gnuastro-0.22/0000755000175000017500000000000014557514203007046 5gnuastro-0.22/bin/0000755000175000017500000000000014557514203007616 5gnuastro-0.22/bin/gnuastro.conf0000644000175000017500000000325714557205301012252 # Default values for the common options to all the programs in GNU # Astronomy Utitlies. # # Use the long option name of each paramter followed by # a value. The name and value should be separated by # atleast one of the following charaacters: # space, ',', '=' or ':' # # Run with '--help' option or read the manual for a full # explanation of what each option means. # # NOTE I: All counting is from zero, not one. # NOTE II: Lines starting with '#' are ignored. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Input: hdu 1 ignorecase 1 searchin name stdintimeout 1500000 # Tessellation tilesize 30,30 numchannels 1,1 remainderfrac 0.1 workoverch 0 interpmetric radial interpnumngb 15 interponlyblank 0 # Output: tableformat fits-binary wcslinearmatrix pc # Operating mode quietmmap 0 # The default 'minmapsize' is set to the maximum possible value for signed # 64-bit integers (half the full logical size of a 64-bit system, which is # larger than 9 x 10^18 bytes). Effectively, this means that forced # memory-mapping will be disabled. Therefore memory-mapping will only # happen when memory cannot be allocated with the RAM (for any reason, # mainly not having enough space). On 32-bit systems, this will # automatically be read by the C library as the largest possible memory in # those systems (~4.3 x 10^9 bytes). minmapsize 9223372036854775807 gnuastro-0.22/bin/completion.bash.in0000644000175000017500000010357314551337306013165 # Common funcitons of Bash auto-completion in Gnuastro. For more details on # completion, see the "autocomplete feature" section under the "Developing" # chapter of Gnuastro's manual and the comments below. # # This script contains generic functions that can be used by all the # programs. Each program also has its own '*-complete.bash' file that will # use the generic functions here and define all the internal variables that # these functions take as input/output. During the installation, all those # '*-complete.bash' files will be appended to this (and installed as one # file to be loaded into the user's '.bashrc'). # # Because the combined file is loaded into the user's Bash environment # every time, we don't want to complicate the user's environment with # global environment variables. As a result, all the functions used in the # Bash auto-completion should be 'local' (to that particular function and # the functions it calls). # # To debug/test this script, you can take these steps after building # Gnuastro in the program's 'bin/progname/astprogname-complete.bash' # file. Building Gnuastro is necessary because one of the files # # 1. Uncomment the two 'source' lines in the program's completion # script. # 2. Correct the un-commented locations. Note that the second is an # automatically built file (it is not under version control or in the # source directory). So in case you have defined a separate build # directory, give that directory. If you are building within your # source (which is generally a bad idea!), it will be the same # directory. # 3. Give a value to the 'gnuastro_prefix' variable within # '_gnuastro_autocomplete_astprogname'. This is the location that # Gnuastro is installed in your OS (usually '/usr/local/bin'). # 4. Activate the program's script with this command in the terminal you # are testing: 'source bin/progname/astprogname-complete.bash' (here # assuming you are in the top Gnuastro source directory, you can run # it from anywhere, just correct the locatation). # # Original author: # Pedram Ashofteh-Ardakani # Contributing author(s): # Mohammad Akhlaghi # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . ####################################################################### ############ Options and general operating mode ############ ####################################################################### # Basic initialization. _gnuastro_autocomplete_initialize(){ # Initialize the completion response with null COMPREPLY=(); # Variable "current", is the current word being completed. "$2" is the # default value for the current word in completion scripts. But we are # using the longer form: "${COMP_WORDS[COMP_CWORD]}" for clarity. current="${COMP_WORDS[COMP_CWORD]}" if [ "$current" = "=" ]; then # The equal sign '=' raises complexities when filling suggestions # for long options. Things will work out fine when they are simply # ignored. current="" fi # Variable "prev", is one word before the one being completed. By # default, this is set as "$3" in completion scripts. But we are using # the longer form: "${COMP_WORDS[COMP_CWORD-1]}" to avoid confusions # with the arguments of our internal functions. Note that Bash will # return the '=' sign as a separate component of the line, so in that # case, we want the second-last word. prev="${COMP_WORDS[COMP_CWORD-1]}" if [ "$prev" = "=" ]; then # While a user is writing a long option's argument, the previous # word will be the equal sign '='. This is not helpful at all. But # looking at a word just before '=' helps us understand which long # option is being called upon. prev="${COMP_WORDS[COMP_CWORD-2]}" fi } # List all the options of the given program (an '=' is kept for the options # that need a value). In the output of '--help', option lines have these # properties: # # - The full line starts with two empty spaces. # - The first non-white character is a '-'. # - It contains a long option formated like '--XXXX'. # # But some options have a short version (which we ignore in # autocompletion), so if the first word ends with a ',' the option name we # want to show is the second word. _gnuastro_autocomplete_option_list(){ options_all=$("${COMP_WORDS[0]}" --help \ | awk '/^ / && $1 ~ /^-/ && /--+[a-zA-Z0-9]*/ { \ if($1 ~ /,$/) name=$2; \ else name=$1; \ print name}' \ | sed -e's|=.*|=|'); } # Return successfully if the previous token (specified as first argument) # is an option that requires a value and store the option name if it is. # # INPUT: # 1) [as argument] String to search for. # *) [as variable] 'options_all' (in case the list of options is # already read) _gnuastro_autocomplete_string_is_valued_option(){ # For easy reading. local string=$1 # If the first character of the string isn't a '-', then its not an # option and there is no need to do any futher checks (and slow down # the output) so we can safely return failure. if [ ${string:0:1} != "-" ]; then return 1; fi # List of option names (with an '=' after those that need a value. if [ x"$options_all" = x ]; then _gnuastro_autocomplete_option_list fi # Go over the option list and see if they match the '$1'. for option in $options_all; do if [[ $option = $string=* ]]; then return 0; fi done # If control reaches here, then return failure (1). return 1 } # See if the current word is an argument or option value. _gnuastro_autocomplete_mode_arg_optval(){ # If the previous token is the first token, then this is an # argument, no need for any further checks. if [ $prev = "${COMP_WORDS[0]}" ]; then argument=$current # If the previous token is an option that needs a value, then this is # an option value, this function will set 'option_name' and # 'option_name_complete' if necessary. elif _gnuastro_autocomplete_string_is_valued_option $prev; then option_name=$prev option_value=$current option_name_complete=1 # The previous token wasn't an option that required a value, so this is # an argument. else argument=$current fi } # See if this is an argument, option name or option value. This function # will fill 'argument', 'option_name' and 'option_value' (they should be # initialized to an empty string before it). # # option_value=FULL: We are busy completing an option value. # option_name=FULL: Can mean different meanings. # { # option_name_complete==0: We are still filling the option name. # option_name_complete==1: We are starting the option values. # } # argument=FULL: We are busy filling an argument. # argument=EMPTY: We haven't started writing an argument yet. _gnuastro_autocomplete_mode(){ # Local variable necessary only in this function. local namevalue="" # If the current word is empty, it may be an argument, or value of an # option (in case a value-required option is given before). if [ x$current = x ]; then _gnuastro_autocomplete_mode_arg_optval # The current word isn't empty. else # If the current word starts with a '-', it is an option name or # 'name=value' pair. if [ ${current:0:1} = "-" ]; then # If there is an equal sign, then we should separate the option # name from the value and keep if [[ $current = *=* ]]; then # By setting the "internal field separator" (IFS) to '=' # and using 'read', we can separate the strings before and # after the equal sign. IFS="=" read -ra namevalue <<< $current option_name=${namevalue[0]} option_name_complete=1 # If the value isn't written yet, (for example '--hdu='), # then the second string will just be an '='. But no value # is given yet, so 'option_value' should be empty. option_value=${namevalue[1]} if [ x$option_value = x"\=" ]; then option_value=""; fi else option_name=$current option_name_complete=0 fi # The current word didn't start with a '-', so it may be an # argument or option value. else # Bash may separate the '=' in 'name=value' tokens. In this # scenario, when the user only gives 'name=' and presses TAB, # then 'current' will be '='. In this case, we should just set # it to empty. if [ $current = "=" ]; then current=""; fi # Check to see if its an argument or option value. _gnuastro_autocomplete_mode_arg_optval fi fi } # Given a certain option (as first argument), find the value that the user # has given for it. # # OUTPUT: # read_option_value _gnuastro_autocomplete_read_option_value(){ # Inputs: local read_option_name=$1 # Initialize the output (defined as 'local' before this). read_option_value="" # Parse through the given command-line and find the value. local option_found=0 for word in ${COMP_WORDS[*]}; do # Ignore the program name (first word), current (last) word and any # '=' signs. if [ x$word = x${COMP_WORDS[0]} ] \ || [ x$word = x$current ] \ || [ x$word = x"=" ]; then local just_a_place_holder=1 else # If the 'option_found' flag is set, this is the answer, set it # and return (this has to be *before* the place that we set # 'option_found'). if [ $option_found = 1 ]; then read_option_value="$word"; return 0 fi # If this word is the desired option, set the 'option_found' # flag so the next word is taken as the value. if [ x$word = x$read_option_name ]; then option_found=1; fi fi done } ####################################################################### ############ Files ############ ####################################################################### # Check if the given file is a FITS file (that can actually be # opened). Note that FITS files have many possible extensions (see the # 'gal_fits_name_is_fits' function in 'lib/fits.c'). _gnuastro_autocomplete_is_fits(){ if "$gnuastro_prefix"/astfits "$1" &> /dev/null; then return 0; else return 1; fi } # Return successfully if argument (a FITS file) has a image HDU. _gnuastro_autocomplete_fits_has_image(){ if _gnuastro_autocomplete_is_fits "$1"; then if [ $("$gnuastro_prefix"/astfits "$1" --hasimagehdu) = 1 ]; then return 0 fi fi return 1 } # Return successfully if argument (a FITS file) has a table HDU. _gnuastro_autocomplete_fits_has_table(){ if _gnuastro_autocomplete_is_fits "$1"; then if [ $("$gnuastro_prefix"/astfits "$1" --hastablehdu) = 1 ]; then return 0 fi fi return 1 } # Return successfully if first argument is plain-text (not binary). _gnuastro_autocomplete_is_plaintext(){ if file "$1" | grep 'executable\|binary' &> /dev/null; then return 1; else return 0; fi } # Return successfully (with 0) if the given non-FITS file is a table. _gnuastro_autocomplete_is_plaintext_table(){ # Only do the check if the file exists. if [ -f "$1" ]; then # If the file is not plain-text, it will contain an 'executable' or # 'binary' in the output of the 'file' command. if _gnuastro_autocomplete_is_plaintext "$1"; then # The file is plain-text. Extract the first non-commented or # empty line and feed it to 'asttable' to see if it can be # interpretted properly. We don't want to bother with the other # lines, because we don't want to waste computational power # here. if awk '!/^#/ && NF>0 {print; exit 0}' "$1" \ | "$gnuastro_prefix"/asttable &> /dev/null; then return 0 else return 1 fi # The file was binary else return 1 fi # The file didn't exist. else return 1 fi } # Return successfully if the first argument is a table. _gnuastro_autocomplete_is_table(){ if _gnuastro_autocomplete_fits_has_table "$1"; then return 0 elif _gnuastro_autocomplete_is_plaintext_table "$1"; then return 0 else return 1 fi } # If a certain file (image, table, or certain other files) is already given # in the previous tokens, return successfully (with zero), and will put its # name in 'given_file'. Otherwise, return a failure (1) and 'given_file' # will be untouched. _gnuastro_autocomplete_first_in_arguments(){ # Inputs local mode=$1 # Local variables (that are only for this function). local word="" local previous="" # Initialize outputs given_file="" # Go over all the words/tokens given until now. for word in ${COMP_WORDS[*]}; do # Ignore the program name (first word), current (last) word, any # directories or '=', or any word that starts with a '-' (which is # an option). if [ x$word = x${COMP_WORDS[0]} ] \ || [ x$word = x$current ] \ || [ ${word:0:1} = "-" ] \ || [ x$word = x"=" ] \ || [ -d $word ]; then local just_a_place_holder=1 else # If the previous word is a valued option, then it shouldn't be # checked. if _gnuastro_autocomplete_string_is_valued_option $previous; then local just_a_place_holder=1 # Previous word was not a valued option, do the operation based # on the mode. else case "$mode" in fits) if _gnuastro_autocomplete_is_fits "$word"; then given_file="$word" fi ;; image) if _gnuastro_autocomplete_fits_has_image "$word"; then given_file="$word" return 0; fi ;; table) if _gnuastro_autocomplete_is_table "$word"; then given_file="$word" return 0; fi ;; source_c) if $(echo "$word" | grep "\.c$" &> /dev/null) \ && [ -f "$word" ]; then given_file="$word" return 0; fi ;; esac fi fi # If this word isn't an '=', put it in 'previous' and go onto the # next word. if [ $word != "=" ]; then previous=$word fi done # If control reached here, then there weren't any tables on the # command-line until now. return 1; } # Find the requested file from the existing tokens on the command-line. # # INPUT ARGUMENTS: # 1) Mode of file ('table', 'image', 'fits'). # 2) Name of option containing file names. # # WRITTEN VARIABLES (should be defined before this function). # given_file: file name of given table. _gnuastro_autocomplete_given_file(){ # Set inputs (for each readability). local mode="$1" local name="$2" local read_option_value="" # If 'name' is emtpy, we should look in the arguments, otherwise, we # should look into the options. if [ x"$name" = x ]; then if _gnuastro_autocomplete_first_in_arguments $mode; then # given_file is written by the function as a side-effect. local just_a_place_holder=1 fi # We are looking for a certain option. else # Read the given option's value. _gnuastro_autocomplete_read_option_value "$name" # If we are in image-mode, and the found file has an image, then # put the name in 'given_file' (final output). Same for tables. case $mode in fits) if _gnuastro_autocomplete_is_fits "$read_option_value"; then given_file="$read_option_value" fi ;; image) if _gnuastro_autocomplete_fits_has_image \ "$read_option_value"; then given_file="$read_option_value" fi ;; table) if _gnuastro_autocomplete_is_table \ "$read_option_value"; then given_file="$read_option_value" fi ;; esac fi } # Find the requested filename and HDU within the already entered # command-line. This option needs three arguments: # # INPUT ARGUMENTS # 1) Mode of file ('table' or 'image'). # 2) The filename option (if empty string, 1st argument). # 3) The HDU option (only necessary if the file is FITS). # # WRITTEN VARIABLES (should be defined before this function). # given_file: file name of given table/image. # given_hdu: HDU of given table/table. _gnuastro_autocomplete_given_file_and_hdu(){ # Set inputs (for each readability). local mode=$1 local name=$2 local hduoption=$3 # Internal variables. local read_option_value="" # Initialize the outputs (defined before this). given_hdu="" given_file="" # First, confirm the table file name. If requested table is in an # argument, 'name' will be empty. _gnuastro_autocomplete_given_file $mode $name # If a file name existed and it is a FITS file, find the HDU given in # the option. if [ x"$given_file" != x ] \ && _gnuastro_autocomplete_is_fits "$given_file"; then _gnuastro_autocomplete_read_option_value $hduoption given_hdu="$read_option_value" fi } ####################################################################### ############ Completion replies ############ ####################################################################### # Given a set of strings, select the one that matches the first argument _gnuastro_autocomplete_compreply_from_string(){ # Internal variables (for easy reading). local string="$1" local match="$2" # When there isn't any match string, just add everything. if [ x"$match" = x ]; then for v in $string; do COMPREPLY+=("$v"); done # When there is a match, limit it. We aren't using 'grep' because it # can confuse a possible '--XXX', with its own options on some systems # (and placing a '--' before the search string may not be portable). else for v in $(echo $string \ | awk '{for(i=1;i<=NF;++i) \ if($i ~ /^'$match'/) print $i}'); do COMPREPLY+=("$v"); done fi } # Some options take multiple values, separated by a comma (for example # '--option=A,B,C'). Once the possible solutions have been found by the # caller function, this function will decide how to print the suggestions: # add a comma or not. _gnuastro_autocomplete_compreply_comma_when_matched(){ # Input arguments: local replies="$1" local tomatch="$2" local fullmatch="$3" local continuematch="$4" # Add the completion replies. if [ x"$continuematch" = x ]; then for c in $replies; do COMPREPLY+=("$c"); done else # If there is only one match, include the previously specified # replies in the final filled value and append an ',' to let the # user specify more values to the option. if [ $(echo $replies | wc -w) = 1 ]; then # In the continue-mode we don't want the final value to be # appended with a space. compopt -o nospace # When 'fullmatch' and 'tomatch' are the same, this was the # first requested reply, so we can safely just print it with a # comma. if [ x"$fullmatch" = x"$tomatch" ]; then COMPREPLY+=("$replies,") # This was not the first reply, so we need to add the old ones # as a prefix. But we first need to remove any possible start # of the current reply. else local oldreps=$(echo "$fullmatch" | sed -e's|'$tomatch'$||') COMPREPLY+=("$oldreps$replies,") fi # There was more than one matching reply, so continue suggesting # with only the column names. else local oldreps=$(echo "$fullmatch" | sed -e's|'$tomatch'$||') for c in $replies; do COMPREPLY+=("$oldreps$c"); done fi fi } # Add completion replies for the values to '--searchin'. _gnuastro_autocomplete_compreply_searchin(){ _gnuastro_autocomplete_compreply_from_string \ "name unit comment" "$1" } # Add completion replies for the values to '--searchin'. _gnuastro_autocomplete_compreply_tableformat(){ _gnuastro_autocomplete_compreply_from_string \ "fits-ascii fits-binary txt" "$1" } # Add completion replies for the values to '--numthreads'. _gnuastro_autocomplete_compreply_numthreads(){ if nproc &> /dev/null; then local numthreads="$(seq $(nproc))" _gnuastro_autocomplete_compreply_from_string \ "$numthreads" "$1" fi } # Values to the common '--interpmetric' option. _gnuastro_autocomplete_compreply_interpmetric(){ _gnuastro_autocomplete_compreply_from_string \ "radial manhattan" "$1" } # Values to the common '--type' option. _gnuastro_autocomplete_compreply_numbertype(){ _gnuastro_autocomplete_compreply_from_string \ "uint8 int8 uint16 int16 uint32 int32 uint64 int64 float32 float64" \ "$1" } # Values to the common '--wcslinearmatrix' option. _gnuastro_autocomplete_compreply_wcslinearmatrix(){ _gnuastro_autocomplete_compreply_from_string \ "cd pc" "$1" } # Add matching options to the completion replies. _gnuastro_autocomplete_compreply_options_all(){ # Variable only necessary here. local options_match="" # Get the list of option names (with an '=' after those that need a # value (if 'options_all' isn't already set) if [ x"$options_all" = x ]; then _gnuastro_autocomplete_option_list fi # Limit the options to those that start with the already given portion. if [ x$1 = x ]; then options_match="$options_all" else # We aren't using 'grep' because it can confuse the '--XXX' with # its own options on some systems (and placing a '--' before the # search string may not be portable). options_match=$(echo "$options_all" | awk '/^'$1'/') fi # Add the list of options. for f in $options_match; do COMPREPLY+=("$f"); done # Disable the extra space on the command-line after the match, only for # this run (only relevant when we have found the match). compopt -o nospace } # Add a file into the completion replies. The main point is to remove the # fixed directory name prefix of the file (that is appended by 'ls'). # # It takes two arguments: # # 1. Base string (that was fed into 'ls' to find the full string). # This string CAN BE EMPTY. # 2. Full string. # # If the first is a full directory, then it will remove it from the full # string before saving string (which is standard in autocomplete (the user # has already given it and it is just annoying!). _gnuastro_autocomplete_compreply_file(){ # For some reason, when there are multiple matches in a sub-directory, # removing the directory removes the whole thing that the user has # already typed! So the part below (which was the main purpose of this # function is currently commented). Until that bug is fixed, we'll just # return the full file name. Here is how you can reproduce the problem # (with the MAIN FUNCTION below uncommented and the WORK AROUND # commented): # # $ ls # image.fits # $ mkdir subdir # $ mv image.fits subdir/ab-123.fits # $ cp subdir/ab-123.fits subdir/ab-456.fits # $ astcrop subdir/ab-[TAB] # MAIN FUNCTION #if [ x$1 != x ] && [ -d $1 ]; then COMPREPLY+=("${2#$1}") #else COMPREPLY+=("$2") #fi # WORK AROUND COMPREPLY+=("$2") } # Add all the HDUs that contain a table/image in the first argument (a FITS # file) into the completion replies. # # INPUT ARGUMENTS # 1) Mode of file ('table', 'image', or 'all'). # 2) Name of file. # 3) Existing argument. _gnuastro_autocomplete_compreply_hdus(){ # Local variables (for easy reading) local mode="$1" local given_file="$2" local matchstr="$3" if _gnuastro_autocomplete_is_fits "$given_file"; then # Get list of the file's HDUs. hdus=$("$gnuastro_prefix"/astfits "$given_file" \ --list"$mode"hdus) # Add the matching ones into COMPREPLY. _gnuastro_autocomplete_compreply_from_string \ "$hdus" "$matchstr" fi } # Add all the keywords in current HDU to the replies. # # INPUT ARGUMENTS: # 1) FITS file name. # 2) HDU within the FITS file. # 3) Existing argument (to match). # 4) If a comma should be appended in case of match. _gnuastro_autocomplete_compreply_keys(){ # Input arguments. local given_file="$1" local given_hdu="$2" local fullmatch="$3" local continuematch="$4" # Local variables. local keys="" local tomatch="" # Keywords can sometimes be given in series (for example # '--keyvalue=A,B,C'). In this case, the caller will give a non-empty # value to the fourth argument ('continuematch'). We therefore need to # will take the last component of the comma-separated list for the # matching of the next element. if [ x"$continuematch" = x ]; then tomatch="$fullmatch" else tomatch=$(echo $fullmatch | awk 'BEGIN{FS=","} {print $NF}') fi # Get list of keywords. keys=$("$gnuastro_prefix"/astfits "$given_file" \ --hdu="$given_hdu" \ --printkeynames \ | grep ^$tomatch) _gnuastro_autocomplete_compreply_comma_when_matched \ "$keys" "$tomatch" "$fullmatch" "$continuematch" } # Fill the replies with certain files. _gnuastro_autocomplete_compreply_directories(){ # For easy reading. local arg=$1 # Get the list of directories (all ending with '/', with '-d' we are # telling 'ls' to not go into sub-directories). local directs=($(ls -d "$arg"*/ 2> /dev/null)) # If a directory exists at all. if [ x"${directs[0]}" != x ]; then # If there is only one match. if [ x"${directs[1]}" = x ]; then # If there are sub-directories, then keep the ending '/' and # don't add space (the user may want to add sub-directories). if $(ls -d "${directs[0]}"/*/ &> /dev/null); then COMPREPLY+=("$d") compopt -o nospace # There are no sub-directories. In this case, remove the ending # '/' and let Bash add a space after the matched name. else COMPREPLY+=($(echo "${directs[0]}" | sed -e's|/$||')) fi # More than one match: go over all the matches and add them. we # should avoid printing a space (so the sub-directories continue in # the same token). Also RECALL THAT '$d' ALREADY ENDS WITH A '/' # HERE. else for d in ${directs[*]}; do COMPREPLY+=("$d") compopt -o nospace done fi fi } # Fill the replies with all image formats (note that the 'image' of # '_gnuastro_autocomplete_compreply_files_certain' is only FITS files) _gnuastro_autocomplete_compreply_images_all(){ # Local variables to be filled by functions. local arg="$1" local ls_in="" local files="" local suffixes_jpeg="" local suffixes_tiff="" # Get the FITS images. _gnuastro_autocomplete_compreply_files_certain image "$arg" # If the given name doesn't have a suffix, then search for desired # suffixes. if [ x"$arg" = x"$(echo $arg | cut -d. -f1)" ]; then # Since the other formats are checked by suffix and there are many # suffixes, its easier to just call 'ls' once. _gnuastro_autocomplete_compreply_suffixes_jpeg _gnuastro_autocomplete_compreply_suffixes_tiff for s in $suffixes_jpeg $suffixes_tiff; do ls_in="$ls_in "$arg"*$s" done # The given argument already contains a suffix. So you can safely # ignore the matched suffixes. else ls_in=$arg"*" fi # Find the matching files and add them to the replies. files=($(ls -d $ls_in 2> /dev/null)) for f in ${files[*]}; do if [ -d "$f" ]; then COMPREPLY+=("$f/") compopt -o nospace else _gnuastro_autocomplete_compreply_file "$arg" "$f" fi done } # Fill the replies with certain files. _gnuastro_autocomplete_compreply_files_certain(){ # For easy reading. local arg=$2 local mode=$1 # Get list of matching files (with '-d' we are telling 'ls' to not go # into sub-directories). local files=($(ls -d "$arg"* 2> /dev/null)) # Parse the list of files and add it when it is a directory or it can # be read as a table. for f in ${files[*]}; do if [ -d "$f" ]; then COMPREPLY+=("$f/") compopt -o nospace else case "$mode" in fits) if _gnuastro_autocomplete_is_fits "$f"; then _gnuastro_autocomplete_compreply_file "$arg" "$f" fi ;; image) if _gnuastro_autocomplete_fits_has_image "$f"; then _gnuastro_autocomplete_compreply_file "$arg" "$f" fi ;; table) if _gnuastro_autocomplete_is_table "$f"; then _gnuastro_autocomplete_compreply_file "$arg" "$f" fi ;; source_c) if $(echo $f | grep "\.c$" &> /dev/null); then _gnuastro_autocomplete_compreply_file "$arg" "$f" fi ;; source_la) if $(echo $f | grep "\.la$" &> /dev/null); then _gnuastro_autocomplete_compreply_file "$arg" "$f" fi ;; esac fi done } # Add all table columns in given file (possibly with HDU) that start with # the given string into the completion replies. _gnuastro_autocomplete_compreply_table_columns(){ # Inputs local table_file="$1" local table_hdu="$2" local fullmatch="$3" local continuematch="$4" # Internal local tomatch="" local columns="" local hdu_option="" # If no file has been given, don't set anything, just return. if [ x"$table_file" = x ]; then return 0; fi # If a HDU is given, then add it to the options. if [ x"$table_hdu" != x ]; then hdu_option="--hdu=$table_hdu"; fi # Columns can usually be given in series (for example # '--column=A,B,C'). In this case, the caller will give a non-empty # value to the fourth argument ('continuematch'). We therefore need to # will take the last component of the comma-separated list for the # matching of the next element. if [ x"$continuematch" = x ]; then tomatch="$fullmatch" else tomatch=$(echo $fullmatch | awk 'BEGIN{FS=","} {print $NF}') fi # Get the list of columns from the output of '--information': the # column names are the second column of the lines that start with a # number. If there is no column name, print the column number. # # We are forcing 'awk' to read after the second line of 'asttable' # output, because the second line contains the filename. The filename # might start with numbers. If so, there will be an unwanted '(hdu:' # printed in the results. Here, 'awk' will print the second column in # lines that start with a number. columns=$("$gnuastro_prefix"/asttable --information \ "$table_file" $hdu_option \ | awk 'NR>2 && /^[0-9]/ { \ if($2=="n/a") print $1; else print $2 \ }' \ | grep ^$tomatch) # Add the necessary columns in a comma-separated manner. _gnuastro_autocomplete_compreply_comma_when_matched \ "$columns" "$tomatch" "$fullmatch" "$continuematch" } gnuastro-0.22/bin/arithmetic/0000755000175000017500000000000014557514201011745 5gnuastro-0.22/bin/arithmetic/Makefile.am0000644000175000017500000000330214557211443013721 ## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2015-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astarithmetic ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astarithmetic_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astarithmetic_SOURCES = main.c ui.c arithmetic.c operands.c EXTRA_DIST = main.h authors-cite.h args.h ui.h arithmetic.h operands.h \ astarithmetic-complete.bash ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astarithmetic.conf gnuastro-0.22/bin/arithmetic/astarithmetic.conf0000644000175000017500000000173714551337306015410 # Default parameters (System) for Arithmetic. # Arithmetic is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astarithmetic --help # Full list of options, short doc. # $ astarithmetic -P # Print all options and used values. # $ info astarithmetic # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Inputs wcshdu 1 gnuastro-0.22/bin/arithmetic/Makefile.in0000644000175000017500000034037214557513746013760 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astarithmetic$(EXEEXT) subdir = bin/arithmetic ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astarithmetic_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ arithmetic.$(OBJEXT) operands.$(OBJEXT) astarithmetic_OBJECTS = $(am_astarithmetic_OBJECTS) am__DEPENDENCIES_1 = astarithmetic_DEPENDENCIES = \ $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/arithmetic.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/operands.Po ./$(DEPDIR)/ui.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astarithmetic_SOURCES) DIST_SOURCES = $(astarithmetic_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib astarithmetic_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astarithmetic_SOURCES = main.c ui.c arithmetic.c operands.c EXTRA_DIST = main.h authors-cite.h args.h ui.h arithmetic.h operands.h \ astarithmetic-complete.bash dist_sysconf_DATA = astarithmetic.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/arithmetic/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/arithmetic/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astarithmetic$(EXEEXT): $(astarithmetic_OBJECTS) $(astarithmetic_DEPENDENCIES) $(EXTRA_astarithmetic_DEPENDENCIES) @rm -f astarithmetic$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astarithmetic_OBJECTS) $(astarithmetic_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/operands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/arithmetic.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/operands.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/arithmetic.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/operands.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/arithmetic/main.c0000644000175000017500000000320714551337306012762 /********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" /* needs main.h. */ #include "arithmetic.h" /* needs main.h. */ int main (int argc, char *argv[]) { struct timeval t1; struct arithmeticparams p={{{0},0},{0},0}; /* Set the starting time. */ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Arithmetic. */ arithmetic(&p); /* Free any allocated space. */ freeandreport(&p, &t1); /* Return successfully. */ return 0; } gnuastro-0.22/bin/arithmetic/ui.c0000644000175000017500000004315214551337306012456 /********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata or number [ASTRdata] OPERATOR ..."; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will do arithmetic " "operations on one or multiple images and numbers. Simply put, the name " "of the image along with the arithmetic operators and possible numbers " "are given as arguments. The extensions of each input are specified with " "(possibly multiple) calls to the '--hdu' option." "\n\nCurrently "PROGRAM_NAME" only supports postfix or reverse polish " "notation. For example to get the result of '5+6', you should write " "'5 6 +', or to get the average of two images, you should write 'a.fits " "b.fits + 2 /' (or more simply use the 'average' operator with " "'a.fits b.fits average'). Please see the manual for more information. " "\n\n"PROGRAM_NAME" recognizes a large collection of standard operators, " "including basic arithmetic (e.g., +, -, x, /), mathematical (e.g., abs, " "pow, sqrt, log), statistical (minvalue, min, max, average), comparison " "(e.g., lt, le, gt), logical (e.g., and, or, not), the full set of bitwise " "operators, and numeric type conversion operators to all known types. " "Please run the command below for a complete list describing all " "operators (press the 'SPACE' keyboard key, or arrow keys, to go down " "and 'q' to return to the command-line):\n\n" " $ info gnuastro \"Arithmetic operators\"\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct arithmeticparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; /* Modify the common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: cp->coptions[i].value=&p->hdus; cp->coptions[i].type=GAL_TYPE_STRLL; cp->coptions[i].doc="Nth call, used for HDU of Nth input FITS."; break; case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_STDINTIMEOUT: cp->coptions[i].flags=OPTION_HIDDEN; break; case GAL_OPTIONS_KEY_MINMAPSIZE: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: if(cp->coptions[i].key!=GAL_OPTIONS_KEY_INTERPMETRIC) cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct arithmeticparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(arg[0]!='\0') gal_list_str_add(&p->tokens, arg, 0); break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct arithmeticparams *p) { if(p->wcsfile && strcmp(p->wcsfile,"none")) { if(gal_fits_file_recognized(p->wcsfile)==0) error(EXIT_FAILURE, 0, "%s: file given to '--wcsfile' must be in " "FITS format with a recognizable FITS format suffix.", p->wcsfile); if(p->wcshdu==NULL) error(EXIT_FAILURE, 0, "%s: no HDU/extension specified (file given " "to '--wcsfile')! Please use '--wcshdu' to specify a " "HDU/extension to read from", p->wcsfile); } } /* Sanity check on options AND arguments. If only option values are to be checked, use 'ui_check_only_options'. */ static void ui_check_options_and_arguments(struct arithmeticparams *p) { gal_list_str_t *token, *hdu; size_t nummultiext=0, numhdus=0; char *tofilename=NULL, *basename=NULL; struct gal_options_common_params *cp=&p->cp; /* First, make sure that tokens are actually given. */ if(p->tokens) { /* The input tokens are put in a lastin-firstout (simple) linked list, so change them to the correct order so the order we pop a token is the same order that the user input a value. Note that for the options this was done in 'gal_options_read_config_set'. */ gal_list_str_reverse(&p->tokens); } else { if(p->arguments) { p->tokens=gal_txt_read_to_list(p->arguments); free(p->arguments); p->arguments=NULL; } else error(EXIT_FAILURE, 0, "no input tokens. Please specify a file " "name or number (as operands) along with operator(s) as " "input; or use the '--arguments' options. Please run any " "of the following commands for more information.\n\n" " $ astarithmetic --help # Short info.\n" " $ info astarithmetic # Full invocation " "documentation.\n"); } /* To allow adding extensions to existing files, let the 'keep' flag be the same as the 'dontdelete'. */ cp->keep=cp->dontdelete; /* Set the output file name (if any is needed). Note that since the lists are already reversed, the first FITS file encountered, is the first FITS file given by the user. Also, note that these file name operations are only necessary for the first FITS file in the token list. In some scnearios, we need to know if an actual output name was given or if the output name was set automatically. So we'll set 'outnamerequested' before automatically filling the output if not given. */ p->outnamerequested = cp->output ? 1 : 0; for(token=p->tokens; token!=NULL; token=token->next) { /* Strings given to the 'tofile' or 'tofilefree' operators are also considered as outputs and we should delete them before starting the parse. */ tofilename = ( strncmp(OPERATOR_PREFIX_TOFILE, token->v, OPERATOR_PREFIX_LENGTH_TOFILE)==0 ? &token->v[ OPERATOR_PREFIX_LENGTH_TOFILE ] : ( strncmp(OPERATOR_PREFIX_TOFILEFREE, token->v, OPERATOR_PREFIX_LENGTH_TOFILEFREE)==0 ? &token->v[ OPERATOR_PREFIX_LENGTH_TOFILEFREE ] : NULL ) ); if(tofilename) gal_checkset_writable_remove(tofilename, basename, cp->keep, cp->dontdelete); /* This may be a simple filename. */ else { /* This token is a file, count how many mult-extension files we have and use the first to set the output file's name (if it has not been set). */ if( gal_array_name_recognized(token->v) || gal_fits_file_recognized(token->v) ) { /* Increment the counter for FITS files (if they are input). Recall that the 'load-col' operator can also have '.fits' suffixes, but they aren't relevant here because they are inputs, and their HDUs are given within the operator string. */ if( strncmp(GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX, token->v, GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX_LEN) && gal_array_name_recognized_multiext(token->v) ) ++nummultiext; /* If no output name is given, we need to extract the output name from the inputs. */ if(basename==NULL) basename=token->v; } /* This token is a number. Check if a negative dash was present that has been temporarily replaced with 'NEG_DASH_REPLACE' before option parsing. */ else if(token->v[0]==NEG_DASH_REPLACE && isdigit(token->v[1]) ) token->v[0]='-'; } } /* In case no output name has been given (can happen with operators like 'makenew' when the user doesn't set an output name explicity), use a default name. */ if(cp->output) gal_checkset_writable_remove(cp->output, basename, cp->keep, cp->dontdelete); else { if(basename) p->cp.output=gal_checkset_automatic_output(cp, basename, "_arith.fits"); else { gal_checkset_allocate_copy("arithmetic.fits", &cp->output); gal_checkset_writable_remove(cp->output, basename, cp->keep, cp->dontdelete); } } /* Count the number of HDU values (if globalhdu isn't given) and check if its not less than the number of input FITS images. */ if(p->globalhdu) { if(p->hdus) { gal_list_str_free(p->hdus, 1); p->hdus=NULL; }; } else { for(hdu=p->hdus; hdu!=NULL; hdu=hdu->next) ++numhdus; if(numhduswcsfile && strcmp(p->wcsfile,"none")) { /* Read the number of dimensions and the size of each. */ dsize=gal_fits_img_info_dim(p->wcsfile, p->wcshdu, &ndim, "--wcshdu"); /* Read the WCS. */ p->refdata.wcs=gal_wcs_read(p->wcsfile, p->wcshdu, p->cp.wcslinearmatrix, 0, 0, &p->refdata.nwcs, "--wcshdu"); if(p->refdata.wcs) { if(!p->cp.quiet) printf(" - WCS: %s (hdu %s).\n", p->wcsfile, p->wcshdu); } else fprintf(stderr, "WARNING: %s (hdu %s) didn't contain a " "(readable by WCSLIB) WCS.\n", p->wcsfile, p->wcshdu); /* Correct the WCS dimensions if necessary. Note that we don't need the 'ndim' or 'dsize' any more. */ ndim=gal_dimension_remove_extra(ndim, dsize, p->refdata.wcs); /* Clean up. */ free(dsize); } } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct arithmeticparams *p) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* The dash of a negative number will cause problems with the option readin. To work properly we will go over all the options/arguments and if any one starts with a dash and is followed by a number, then the dash is replaced by NEG_DASH_REPLACE. */ for(i=0;icp); /* Sanity check only on options. */ ui_check_only_options(p); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Initial preparations. */ ui_preparations(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void freeandreport(struct arithmeticparams *p, struct timeval *t1) { /* Free the simple strings. */ free(p->cp.output); if(p->wcshdu) free(p->wcshdu); if(p->metaname) free(p->metaname); if(p->metaunit) free(p->metaunit); if(p->globalhdu) free(p->globalhdu); if(p->metacomment) free(p->metacomment); /* If there are any remaining HDUs in the hdus linked list, then free them. */ if(p->hdus) gal_list_str_free(p->hdus, 1); /* Report the duration of the job */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in", 0); } gnuastro-0.22/bin/arithmetic/arithmetic.c0000644000175000017500000022452314551337306014175 /********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "operands.h" #include "arithmetic.h" /***************************************************************/ /************* Internal functions *************/ /***************************************************************/ #define SET_NUM_OP(CTYPE) { \ CTYPE a=*(CTYPE *)(numpop->array); \ gal_data_free(numpop); \ if(a>0) return a; } static size_t pop_number_of_operands(struct arithmeticparams *p, int op, char *token_string, gal_data_t **params) { char *cstring="first"; size_t c, numparams=0; gal_data_t *tmp, *numpop; /* See if this operator needs any parameters. If so, pop them. */ switch(op) { case GAL_ARITHMETIC_OP_STITCH: case GAL_ARITHMETIC_OP_QUANTILE: numparams=1; break; case GAL_ARITHMETIC_OP_MADCLIP_STD: case GAL_ARITHMETIC_OP_SIGCLIP_STD: case GAL_ARITHMETIC_OP_MADCLIP_MAD: case GAL_ARITHMETIC_OP_SIGCLIP_MAD: case GAL_ARITHMETIC_OP_MADCLIP_MEAN: case GAL_ARITHMETIC_OP_SIGCLIP_MEAN: case GAL_ARITHMETIC_OP_MADCLIP_MEDIAN: case GAL_ARITHMETIC_OP_SIGCLIP_MEDIAN: case GAL_ARITHMETIC_OP_MADCLIP_NUMBER: case GAL_ARITHMETIC_OP_SIGCLIP_NUMBER: case GAL_ARITHMETIC_OP_MADCLIP_FILL_MAD: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MAD: case GAL_ARITHMETIC_OP_MADCLIP_FILL_STD: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_STD: case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEAN: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEAN: case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEDIAN: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEDIAN: case GAL_ARITHMETIC_OP_MADCLIP_FILL_NUMBER: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_NUMBER: numparams=2; break; } /* If any parameters should be read, read them. */ *params=NULL; for(c=0;csize>1) error(EXIT_FAILURE, 0, "the %s popped operand of the '%s' " "operator must be a single number", cstring, token_string); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); gal_list_data_add(params, tmp); /* A small sanity check (none of the parameters for sigma-clipping, or quantile estimation can be negative). */ if( ((float *)(tmp->array))[0]<=0.0 ) error(EXIT_FAILURE, 0, "the %s popped operand of the '%s' " "operator cannot be zero or negative", cstring, token_string); /* Increment the counter string. */ cstring=c?"third":"second"; } /* Check if it is a number. */ numpop=operands_pop(p, token_string); if(numpop->size>1) error(EXIT_FAILURE, 0, "the %s popped operand of the '%s' " "operator (number of input datasets) must be a number, not an " "array", cstring, token_string); /* Check its type and return the value. */ switch(numpop->type) { /* For the integer types, if they are unsigned, then just pass their value, if they are signed, you have to make sure they are zero or positive. */ case GAL_TYPE_UINT8: SET_NUM_OP(uint8_t); break; case GAL_TYPE_INT8: SET_NUM_OP(int8_t); break; case GAL_TYPE_UINT16: SET_NUM_OP(uint16_t); break; case GAL_TYPE_INT16: SET_NUM_OP(int16_t); break; case GAL_TYPE_UINT32: SET_NUM_OP(uint32_t); break; case GAL_TYPE_INT32: SET_NUM_OP(int32_t); break; case GAL_TYPE_UINT64: SET_NUM_OP(uint64_t); break; case GAL_TYPE_INT64: SET_NUM_OP(int64_t); break; /* Floating point numbers are not acceptable in this context. */ case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: error(EXIT_FAILURE, 0, "the %s popped operand of the '%s' " "operator (number of input datasets) must be an integer type", cstring, token_string); default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, numpop->type); } /* If control reaches here, then the number must have been a negative value, so print an error. */ error(EXIT_FAILURE, 0, "the %s popped operand of the '%s' operator " "cannot be zero or a negative number", cstring, token_string); return 0; } /**********************************************************************/ /**************** Filtering operators *****************/ /**********************************************************************/ #define ARITHMETIC_FILTER_DIM 10 struct arithmetic_filter_p { int operator; /* The type of filtering. */ size_t *fsize; /* Filter size. */ size_t *hpfsize; /* Positive Half-filter size. */ size_t *hnfsize; /* Negative Half-filter size. */ float sclip_multip; /* Sigma multiple in sigma-clipping. */ float sclip_param; /* Termination critera in sigma-cliping. */ gal_data_t *input; /* Input dataset. */ gal_data_t *out; /* Output dataset. */ }; /* Main filtering work function. */ static void * arithmetic_filter(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct arithmetic_filter_p *afp=(struct arithmetic_filter_p *)tprm->params; gal_data_t *input=afp->input; size_t sind=-1; int clipflags=0; size_t ind, index, one=1; gal_data_t *sigclip, *result=NULL; size_t *hpfsize=afp->hpfsize, *hnfsize=afp->hnfsize; size_t *tsize, *dsize=input->dsize, *fsize=afp->fsize; size_t i, j, coord[ARITHMETIC_FILTER_DIM], ndim=input->ndim; size_t start[ARITHMETIC_FILTER_DIM], end[ARITHMETIC_FILTER_DIM]; gal_data_t *tile=gal_data_alloc(NULL, input->type, ndim, afp->fsize, NULL, 0, -1, 1, NULL, NULL, NULL); /* Prepare the tile. */ free(tile->array); tsize=tile->dsize; tile->block=input; /* Go over all the pixels that were assigned to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading, put the index in 'ind'. */ ind=tprm->indexs[i]; /* Get the coordinate of the pixel. */ gal_dimension_index_to_coord(ind, ndim, dsize, coord); /* See which dimensions need trimming. */ tile->size=1; for(j=0;j dsize[j]) || (coord[j] + hpfsize[j] >= dsize[j]) ) { start[j] = ( (coord[j] - hnfsize[j] > dsize[j]) ? 0 : coord[j] - hnfsize[j] ); end[j] = ( (coord[j] + hpfsize[j] >= dsize[j]) ? dsize[j] : coord[j] + hpfsize[j] + 1); tsize[j] = end[j] - start[j]; } else /* NOT on the edge (given requested filter width). */ { tsize[j] = fsize[j]; start[j] = coord[j] - hnfsize[j]; } tile->size *= tsize[j]; } /* For a test. printf("coord: %zu, %zu\n", coord[1]+1, coord[0]+1); printf("\tstart: %zu, %zu\n", start[1]+1, start[0]+1); printf("\ttsize: %zu, %zu\n", tsize[1], tsize[0]); */ /* Set the tile's starting pointer. */ index=gal_dimension_coord_to_index(ndim, dsize, start); tile->array=gal_pointer_increment(input->array, index, input->type); /* Do the necessary calculation. */ switch(afp->operator) { case ARITHMETIC_OP_FILTER_MEDIAN: result=gal_statistics_median(tile, 0); break; case ARITHMETIC_OP_FILTER_MEAN: result=gal_statistics_mean(tile); break; case ARITHMETIC_OP_FILTER_SIGCLIP_MEAN: case ARITHMETIC_OP_FILTER_SIGCLIP_MEDIAN: /* The median is always available with a sigma-clip, but the mean needs to be explicitly requested. */ if(afp->operator == ARITHMETIC_OP_FILTER_SIGCLIP_MEAN) clipflags = GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN; sigclip=gal_statistics_clip_sigma(tile, afp->sclip_multip, afp->sclip_param, clipflags, 0, 1); /* Set the required index. */ switch(afp->operator) { case ARITHMETIC_OP_FILTER_SIGCLIP_MEAN: sind = GAL_STATISTICS_CLIP_OUTCOL_MEAN; break; case ARITHMETIC_OP_FILTER_SIGCLIP_MEDIAN: sind = GAL_STATISTICS_CLIP_OUTCOL_MEDIAN; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at " "%s to fix the problem. The 'afp->operator' value " "%d is not recognized as sigma-clipped median or " "mean", __func__, PACKAGE_BUGREPORT, afp->operator); } /* Allocate the output and write the value into it. */ result=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); ((float *)(result->array))[0] = ((float *)(sigclip->array))[sind]; /* Clean up. */ gal_data_free(sigclip); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "to fix the problem. 'afp->operator' code %d is not " "recognized", PACKAGE_BUGREPORT, __func__, afp->operator); } /* Make sure the output array type and result's type are the same. */ if(result->type!=afp->out->type) result=gal_data_copy_to_new_type_free(result, afp->out->type); /* Copy the result into the output array. */ memcpy(gal_pointer_increment(afp->out->array, ind, afp->out->type), result->array, gal_type_sizeof(afp->out->type)); /* Clean up for this pixel. */ gal_data_free(result); } /* Clean up for this thread. */ tile->array=NULL; tile->block=NULL; gal_data_free(tile); /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } static void wrapper_for_filter(struct arithmeticparams *p, char *token, int operator) { int type=GAL_TYPE_INVALID; size_t i=0, ndim, nparams, one=1; struct arithmetic_filter_p afp={0}; size_t fsize[ARITHMETIC_FILTER_DIM]; gal_data_t *tmp, *tmp2, *zero, *comp, *params_list=NULL; size_t hnfsize[ARITHMETIC_FILTER_DIM], hpfsize[ARITHMETIC_FILTER_DIM]; int issigclip=(operator==ARITHMETIC_OP_FILTER_SIGCLIP_MEAN || operator==ARITHMETIC_OP_FILTER_SIGCLIP_MEDIAN); /* Get the input's number of dimensions. */ afp.input=operands_pop(p, token); afp.operator=operator; ndim=afp.input->ndim; afp.hnfsize=hnfsize; afp.hpfsize=hpfsize; afp.fsize=fsize; /* A small sanity check. */ if(ndim>ARITHMETIC_FILTER_DIM) error(EXIT_FAILURE, 0, "%s: currently only datasets with less than " "%d dimensions are acceptable. The input has %zu dimensions", __func__, ARITHMETIC_FILTER_DIM, ndim); /* A zero value for checking the value of input widths. */ zero=gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &one, NULL, 1, -1, 1, NULL, NULL, NULL); /* Based on the first popped operand's dimensions and the operator, of pop the necessary number of operands. */ nparams = ndim + (issigclip ? 2 : 0 ); for(i=0;isize!=1) error(EXIT_FAILURE, 0, "the parameters given to the filtering " "operators can only be numbers. Operand number %zu after " "the main input has %zu elements, so its an array", i, params_list->size); } /* If this is a sigma-clipping filter, the top two operands are the sigma-clipping parameters. */ if(issigclip) { /* Read the sigma-clipping multiple (first element in the list). */ tmp=gal_list_data_pop(¶ms_list); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); afp.sclip_multip=*(float *)(tmp->array); gal_data_free(tmp); /* Read the sigma-clipping termination parameter. */ tmp=gal_list_data_pop(¶ms_list); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); afp.sclip_param=*(float *)(tmp->array); gal_data_free(tmp); } /* If the input only has one element, it is most probably and error (the user has confused the parameters with the input dataset). So report a warning filtering makes no sense, so don't waste time, just add the input onto the stack. */ if(afp.input->size==1) { /* Inform the user that this is suspicious. */ if(p->cp.quiet==0) error(EXIT_SUCCESS, 0, "WARNING: the first popped operand to the " "filtering operators has a single element! This is most " "probably a typo in the order of operands! Recall that the " "filtering operators need the main input image/cube as the " "first popped operand"); /* Set the input as the output. */ afp.out=afp.input; } else { /* Allocate an array for the size of the filter and fill it in. The values must be written in the inverse order since the user gives dimensions with the FITS standard. */ i=ndim-1; for(tmp=params_list; tmp!=NULL; tmp=tmp->next) { /* Make sure the user has given an integer type. */ if(tmp->type==GAL_TYPE_FLOAT32 || tmp->type==GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "lengths of filter along dimensions " "must be integer values, not floats. The given length " "along dimension %zu is a float", ndim-i); /* Make sure it isn't negative. */ comp=gal_arithmetic(GAL_ARITHMETIC_OP_GT, 1, 0, tmp, zero); if( *(uint8_t *)(comp->array) == 0 ) error(EXIT_FAILURE, 0, "lengths of filter along dimensions " "must be positive. The given length in dimension %zu" "is either zero or negative", ndim-i); gal_data_free(comp); /* Convert the input into size_t and put it into the array that keeps the filter size. */ tmp2=gal_data_copy_to_new_type(tmp, GAL_TYPE_SIZE_T); fsize[ i ] = *(size_t *)(tmp2->array); gal_data_free(tmp2); /* If the width is larger than the input's size, change the width to the input's size. */ if( fsize[i] > afp.input->dsize[i] ) error(EXIT_FAILURE, 0, "%s: the filter size along dimension " "%zu (%zu) is greater than the input's length in that " "dimension (%zu)", __func__, i, fsize[i], afp.input->dsize[i]); /* Go onto the previous dimension. */ --i; } /* Set the half filter sizes. Note that when the size is an odd number, the number of pixels before and after the actual pixel are equal, but for an even number, we will look into one element more when looking before than the ones after. */ for(i=0;itype; break; case ARITHMETIC_OP_FILTER_MEAN: case ARITHMETIC_OP_FILTER_SIGCLIP_MEAN: type=GAL_TYPE_FLOAT64; break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to " "fix the problem. The 'operator' code %d is not recognized", PACKAGE_BUGREPORT, __func__, operator); } /* Allocate the output dataset. Note that filtering doesn't change the units of the dataset. */ afp.out=gal_data_alloc(NULL, type, ndim, afp.input->dsize, afp.input->wcs, 0, afp.input->minmapsize, afp.input->quietmmap, NULL, afp.input->unit, NULL); /* Spin off threads for each pixel. */ gal_threads_spin_off(arithmetic_filter, &afp, afp.input->size, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap); } /* Add the output to the top of the stack. */ operands_add(p, NULL, afp.out); /* Clean up and add the output on top of the stack. */ gal_data_free(zero); gal_list_data_free(params_list); if(afp.input!=afp.out) gal_data_free(afp.input); /* Single-element. */ } /***************************************************************/ /************* Other functions *************/ /***************************************************************/ static int arithmetic_binary_sanity_checks(gal_data_t *in, gal_data_t *conn, char *operator) { int conn_int; /* Do proper sanity checks on 'conn'. */ if(conn->size!=1) error(EXIT_FAILURE, 0, "the first popped operand to '%s' must be a " "single number. However, it has %zu elements", operator, conn->size); if(conn->type==GAL_TYPE_FLOAT32 || conn->type==GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "the first popped operand to '%s' is the " "connectivity (a value between 1 and the number of dimensions) " "therefore, it must NOT be a floating point", operator); /* Convert the connectivity value to a 32-bit integer and read it in and make sure it is not larger than the number of dimensions. */ conn=gal_data_copy_to_new_type_free(conn, GAL_TYPE_INT32); conn_int = *((int32_t *)(conn->array)); if(conn_int>in->ndim) error(EXIT_FAILURE, 0, "the first popped operand of '%s' (%d) is " "larger than the number of dimensions in the second-popped " "operand (%zu)", operator, conn_int, in->ndim); /* Make sure the array has an unsigned 8-bit type. */ if(in->type!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "the second popped operand of '%s' has a type " "of %s. However, it must be a binary dataset (only being equal " "to zero is checked). You can use the 'uint8' operator for type " "conversion, alternatively, if all your values are positive " "and floating point, you can use '0 gt', if you want non-blank " "values you can use 'isblank not' and many other operators that " "produce a binary output", operator, gal_type_name(in->type, 1)); /* Clean up and return the integer value of 'conn'. */ gal_data_free(conn); return conn_int; } static void arithmetic_erode_dilate(struct arithmeticparams *p, char *token, int op) { int conn_int; /* Pop the two necessary operands. */ gal_data_t *conn = operands_pop(p, token); gal_data_t *in = operands_pop(p, token); /* Do the sanity checks. */ conn_int=arithmetic_binary_sanity_checks(in, conn, token); /* Do the operation. */ switch(op) { case ARITHMETIC_OP_ERODE: gal_binary_erode(in, 1, conn_int, 1); break; case ARITHMETIC_OP_DILATE: gal_binary_dilate(in, 1, conn_int, 1); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. The operator code %d not recognized", __func__, PACKAGE_BUGREPORT, op); } /* Push the result onto the stack. */ operands_add(p, NULL, in); } static void arithmetic_number_neighbors(struct arithmeticparams *p, char *token, int op) { int conn_int; /* Pop the two necessary operands. */ gal_data_t *conn = operands_pop(p, token); gal_data_t *in = operands_pop(p, token); /* Do the sanity checks and do the job. */ conn_int=arithmetic_binary_sanity_checks(in, conn, token); in=gal_binary_number_neighbors(in, conn_int, 1); /* Push the result onto the stack. */ operands_add(p, NULL, in); } static void arithmetic_connected_components(struct arithmeticparams *p, char *token) { int conn_int; gal_data_t *out=NULL; /* Pop the two necessary operands. */ gal_data_t *conn = operands_pop(p, token); gal_data_t *in = operands_pop(p, token); /* Basic sanity checks. */ conn_int=arithmetic_binary_sanity_checks(in, conn, token); /* Do the connected components labeling. */ gal_binary_connected_components(in, &out, conn_int); /* Push the result onto the stack. */ operands_add(p, NULL, out); /* Clean up ('conn' was freed in the sanity check). */ gal_data_free(in); } static void arithmetic_fill_holes(struct arithmeticparams *p, char *token) { int conn_int; /* Pop the two necessary operands. */ gal_data_t *conn = operands_pop(p, token); gal_data_t *in = operands_pop(p, token); /* Basic sanity checks. */ conn_int=arithmetic_binary_sanity_checks(in, conn, token); /* Fill the holes. */ gal_binary_holes_fill(in, conn_int, -1); /* Push the result onto the stack. */ operands_add(p, NULL, in); } static void arithmetic_invert(struct arithmeticparams *p, char *token) { gal_data_t *in = operands_pop(p, token); uint8_t *u8 = in->array, *u8f = u8 + in->size; uint8_t *u16 = in->array, *u16f = u16 + in->size; uint8_t *u32 = in->array, *u32f = u32 + in->size; uint8_t *u64 = in->array, *u64f = u64 + in->size; /* Do the inversion based on type. */ switch(in->type) { case GAL_TYPE_UINT8: do *u8 = UINT8_MAX-*u8; while(++u8type, 1)); } /* Push the result onto the stack. */ operands_add(p, NULL, in); } #define INTERPOLATE_REGION(TYPE,OP,FUNC) { \ TYPE mm, b, *a=in->array, *m=minmax->array; \ FUNC(in->type, &mm); \ gal_blank_write(&b, in->type); \ for(i=0;isize;++i) m[i]=mm; \ for(i=0;isize;++i) \ { \ if( l[i]>0 ) \ GAL_DIMENSION_NEIGHBOR_OP(i, in->ndim, in->dsize, in->ndim, \ dinc, \ { \ if(in->type==GAL_TYPE_FLOAT32 || in->type==GAL_TYPE_FLOAT64) \ { if( a[nind] OP m[l[i]] ) m[l[i]]=a[nind]; } \ else \ { if( a[nind]!=b && a[nind] OP m[l[i]] ) m[l[i]]=a[nind]; } \ }); \ } \ for(i=0;isize;++i) if( l[i]>0 ) { a[i]=m[l[i]]; } \ } #define INTERPOLATE_REGION_OP(TYPE) { \ switch(operator) \ { \ case ARITHMETIC_OP_INTERPOLATE_MINOFREGION: \ INTERPOLATE_REGION(TYPE,<,gal_type_max); break; \ case ARITHMETIC_OP_INTERPOLATE_MAXOFREGION: \ INTERPOLATE_REGION(TYPE,>,gal_type_min); break; \ default: \ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " \ "fix the problem. The operator code %d isn't recognized", \ __func__, PACKAGE_BUGREPORT, operator); \ } \ } static void arithmetic_interpolate_region(struct arithmeticparams *p, int operator, char *token) { /* Pop the dataset to interpolate. */ int32_t *l; gal_data_t *minmax; gal_data_t *lab=NULL, *flag; size_t i, *con, *dinc, numlabs; /* First pop the number of nearby neighbors.*/ gal_data_t *connectivity = operands_pop(p, token); /* Then pop the actual dataset to interpolate. */ gal_data_t *in = operands_pop(p, token); /* Do proper sanity checks on 'con'. */ if(connectivity->size!=1) error(EXIT_FAILURE, 0, "the first popped operand to the " "'interpolate-XXXofregion' operators must be a single number. " "However, it has %zu elements", connectivity->size); if( connectivity->type==GAL_TYPE_FLOAT32 || connectivity->type==GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "the first popped operand to " "'interpolate-XXXofregion' operators is the connectivity to " "define connected blank regions (a counter, an integer, with " "a maximum of the number of dimensions of the input). It must " "NOT be a floating point.\n\n" "If its already an integer, but in a floating point container, " "you can use the 'int32' operator to convert it to a 32-bit " "integer for example"); /* Convert connectivity to an integer type and make sure its not larger than dimensions of the input. */ connectivity=gal_data_copy_to_new_type_free(connectivity, GAL_TYPE_SIZE_T); con=connectivity->array; if(con[0]>in->ndim) error(EXIT_FAILURE, 0, "the first popped operand to " "'interpolate-XXXofregion' operators must not be larger than " "the number of dimensions of the input. The connectivity is " "used to define connected blank regions. For example in a " "2D dataset, a connectivity of 1 corresponds to 4-connected " "neighbors and connectivity 2 corresponds to 8-connected " "neighbors"); /* First make sure the input has blank values. If it doesn't, don't waste time, just return it. */ if( gal_blank_present(in, 1)==0 ) { operands_add(p, NULL, in); return; } /* Build a binary image with the blank regions masked and label them, then free the flagged array. */ flag=gal_blank_flag(in); numlabs=gal_binary_connected_components(flag, &lab, con[0]); gal_data_free(flag); /* Allocate array to keep maximum values for each region. Just note that because we count the regions from 1, but the indexs from 0, we'll allocate one extra point. */ ++numlabs; minmax=gal_data_alloc(NULL, in->type, 1, &numlabs, NULL, 0, in->minmapsize, in->quietmmap, NULL, NULL, NULL); /* Parse the dataset elements for NaNs. */ l=lab->array; dinc=gal_dimension_increment(in->ndim, in->dsize); switch(in->type) { case GAL_TYPE_UINT8: INTERPOLATE_REGION_OP(uint8_t); break; case GAL_TYPE_INT8: INTERPOLATE_REGION_OP(int8_t); break; case GAL_TYPE_UINT16: INTERPOLATE_REGION_OP(uint16_t); break; case GAL_TYPE_INT16: INTERPOLATE_REGION_OP(int16_t); break; case GAL_TYPE_UINT32: INTERPOLATE_REGION_OP(uint32_t); break; case GAL_TYPE_INT32: INTERPOLATE_REGION_OP(int32_t); break; case GAL_TYPE_FLOAT32: INTERPOLATE_REGION_OP(float); break; case GAL_TYPE_FLOAT64: INTERPOLATE_REGION_OP(double); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code %d is not a recognized data " "type", __func__, PACKAGE_BUGREPORT, in->type); } /* For tests. gal_fits_img_write(lab, "test-out.fits", NULL, NULL); gal_fits_img_write(in, "test-out.fits", NULL, NULL); printf("\n...%s...\n", __func__); exit(0); */ /* Clean up. */ free(dinc); gal_data_free(lab); gal_data_free(minmax); gal_data_free(connectivity); /* Push the interpolated dataset onto the stack. */ operands_add(p, NULL, in); } static void arithmetic_interpolate(struct arithmeticparams *p, int operator, char *token) { gal_data_t *interpolated; int num_int, interpop=GAL_ARITHMETIC_OP_INVALID; /* First pop the number of nearby neighbors. */ gal_data_t *num = operands_pop(p, token); /* Then pop the actual dataset to interpolate. */ gal_data_t *in = operands_pop(p, token); /* Do proper sanity checks on 'num'. */ if(num->size!=1) error(EXIT_FAILURE, 0, "the first popped operand to " "'interpolate-XXXXXngb' operators must be a single number. " "However, it has %zu elements", num->size); if(num->type==GAL_TYPE_FLOAT32 || num->type==GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "the first popped operand to " "'interpolate-XXXXXngb' operators is the number of nearby " "neighbors (a counter, an integer). It must NOT be a floating " "point.\n\n" "If its already an integer, but in a floating point container, " "you can use the 'int32' operator to convert it to a 32-bit " "integer for example"); /* Convert the given number to a 32-bit integer and read it in. */ num=gal_data_copy_to_new_type_free(num, GAL_TYPE_INT32); num_int = *((int32_t *)(num->array)); /* Set the interpolation operator. */ switch(operator) { case ARITHMETIC_OP_INTERPOLATE_MINNGB: interpop=GAL_INTERPOLATE_NEIGHBORS_FUNC_MIN; break; case ARITHMETIC_OP_INTERPOLATE_MAXNGB: interpop=GAL_INTERPOLATE_NEIGHBORS_FUNC_MAX; break; case ARITHMETIC_OP_INTERPOLATE_MEANNGB: interpop=GAL_INTERPOLATE_NEIGHBORS_FUNC_MEAN; break; case ARITHMETIC_OP_INTERPOLATE_MEDIANNGB: interpop=GAL_INTERPOLATE_NEIGHBORS_FUNC_MEDIAN; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The operator code %d isn't recognized", __func__, PACKAGE_BUGREPORT, operator); } /* Call the interpolation function. */ interpolated=gal_interpolate_neighbors(in, NULL, p->cp.interpmetric, num_int, p->cp.numthreads, 1, 0, interpop); /* Clean up and push the interpolated array onto the stack. */ gal_data_free(in); gal_data_free(num); operands_add(p, NULL, interpolated); } static void arithmetic_collapse_single_value(gal_data_t *input, char *counter, char *opstr, char *description, int checkint) { if( input->ndim!=1 || input->size!=1) error(EXIT_FAILURE, 0, "%s popped operand of 'collapse-%s*' " "operators (%s) must be a single number (single-element, " "one-dimensional dataset). But it has %zu dimension(s) and " "%zu element(s).", counter, opstr, description, input->ndim, input->size); if(checkint) if(input->type==GAL_TYPE_FLOAT32 || input->type==GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "%s popped operand of 'collapse-%s*' " "operators (%s) must have an integer type, but it has a " "floating point type ('%s')", counter, opstr, description, gal_type_name(input->type,1)); } static void arithmetic_collapse(struct arithmeticparams *p, char *token, int operator) { long dim; float p1=NAN, p2=NAN; int qmm=p->cp.quietmmap; gal_data_t *dimension=NULL, *input=NULL; size_t nt=p->cp.numthreads, mms=p->cp.minmapsize; gal_data_t *collapsed=NULL, *param1=NULL, *param2=NULL; /* First popped operand is the dimension. */ dimension = operands_pop(p, token); /* If we are on any of the sigma-clipping operators, we need to pop two more operands. */ if( operator==ARITHMETIC_OP_COLLAPSE_MADCLIP_MAD || operator==ARITHMETIC_OP_COLLAPSE_MADCLIP_STD || operator==ARITHMETIC_OP_COLLAPSE_MADCLIP_MEAN || operator==ARITHMETIC_OP_COLLAPSE_MADCLIP_MEDIAN || operator==ARITHMETIC_OP_COLLAPSE_MADCLIP_NUMBER || operator==ARITHMETIC_OP_COLLAPSE_SIGCLIP_MAD || operator==ARITHMETIC_OP_COLLAPSE_SIGCLIP_STD || operator==ARITHMETIC_OP_COLLAPSE_SIGCLIP_MEAN || operator==ARITHMETIC_OP_COLLAPSE_SIGCLIP_MEDIAN || operator==ARITHMETIC_OP_COLLAPSE_SIGCLIP_NUMBER || operator==ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_MAD || operator==ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_STD || operator==ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_MEAN || operator==ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_MEDIAN || operator==ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_NUMBER || operator==ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_MAD || operator==ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_STD || operator==ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_MEAN || operator==ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_MEDIAN || operator==ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_NUMBER ) { param2=operands_pop(p, token); /* Termination criteria. */ param1=operands_pop(p, token); /* Multiple of sigma. */ } /* Final popped operand is the desired input dataset. */ input = operands_pop(p, token); /* Sanity checks. */ arithmetic_collapse_single_value(dimension, "first", "", "dimension to collapse", 1); dimension=gal_data_copy_to_new_type_free(dimension, GAL_TYPE_LONG); dim=((long *)(dimension->array))[0]; if(dim<=0) error(EXIT_FAILURE, 0, "first popped operand of 'collapse-*' " "operators (dimension to collapse) must be positive (larger " "than zero), it is %ld", dim); if(dim > input->ndim) error(EXIT_FAILURE, 0, "input dataset to '%s' has %zu dimension(s), " "but you have asked to collapse along dimension %ld", token, input->ndim, dim); if(param1) { arithmetic_collapse_single_value(param1, "third", "sigclip-", "sigma-clip's multiple of sigma", 0); arithmetic_collapse_single_value(param2, "second", "sigclip-", "sigma-clip's termination param", 0); param1=gal_data_copy_to_new_type_free(param1, GAL_TYPE_FLOAT32); param2=gal_data_copy_to_new_type_free(param2, GAL_TYPE_FLOAT32); p1=((float *)(param1->array))[0]; p2=((float *)(param2->array))[0]; if(p1<=0 || p2<=0) error(EXIT_FAILURE, 0, "third and second popped operands of " "'collapse-sigclip-*' operators (sigma multiple and " "termination criteria) must be positive (larger than " "zero), but they are %g and %g", p1, p2); } /* If a WCS structure has been read, we'll need to pass it to 'gal_dimension_collapse', so it modifies it respectively. */ if(p->wcs_collapsed==0) { p->wcs_collapsed=1; input->wcs=p->refdata.wcs; } /* Run the relevant library function. */ switch(operator) { case ARITHMETIC_OP_COLLAPSE_SUM: collapsed=gal_dimension_collapse_sum(input, input->ndim-dim, NULL); break; case ARITHMETIC_OP_COLLAPSE_MEAN: collapsed=gal_dimension_collapse_mean(input, input->ndim-dim, NULL); break; case ARITHMETIC_OP_COLLAPSE_NUMBER: collapsed=gal_dimension_collapse_number(input, input->ndim-dim); break; case ARITHMETIC_OP_COLLAPSE_MIN: collapsed=gal_dimension_collapse_minmax(input, input->ndim-dim, 0); break; case ARITHMETIC_OP_COLLAPSE_MAX: collapsed=gal_dimension_collapse_minmax(input, input->ndim-dim, 1); break; case ARITHMETIC_OP_COLLAPSE_MEDIAN: collapsed=gal_dimension_collapse_median(input, input->ndim-dim, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_MADCLIP_MAD: collapsed=gal_dimension_collapse_mclip_std(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_MAD: collapsed=gal_dimension_collapse_mclip_fill_std(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_MADCLIP_STD: collapsed=gal_dimension_collapse_mclip_std(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_STD: collapsed=gal_dimension_collapse_mclip_fill_std(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_MADCLIP_MEAN: collapsed=gal_dimension_collapse_mclip_mean(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_MEAN: collapsed=gal_dimension_collapse_mclip_fill_mean(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_MADCLIP_MEDIAN: collapsed=gal_dimension_collapse_mclip_median(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_MEDIAN: collapsed=gal_dimension_collapse_mclip_fill_median(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_MADCLIP_NUMBER: collapsed=gal_dimension_collapse_mclip_number(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_NUMBER: collapsed=gal_dimension_collapse_mclip_fill_number(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_SIGCLIP_MAD: collapsed=gal_dimension_collapse_sclip_std(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_MAD: collapsed=gal_dimension_collapse_sclip_fill_std(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_SIGCLIP_STD: collapsed=gal_dimension_collapse_sclip_std(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_STD: collapsed=gal_dimension_collapse_sclip_fill_std(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_SIGCLIP_MEAN: collapsed=gal_dimension_collapse_sclip_mean(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_MEAN: collapsed=gal_dimension_collapse_sclip_fill_mean(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_SIGCLIP_MEDIAN: collapsed=gal_dimension_collapse_sclip_median(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_MEDIAN: collapsed=gal_dimension_collapse_sclip_fill_median(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_SIGCLIP_NUMBER: collapsed=gal_dimension_collapse_sclip_number(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; case ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_NUMBER: collapsed=gal_dimension_collapse_sclip_fill_number(input, input->ndim-dim, p1, p2, nt, mms, qmm); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The operator code %d is not recognized", __func__, PACKAGE_BUGREPORT, operator); } /* If a WCS structure existed, a modified WCS is now present in 'collapsed->wcs'. So we'll let the freeing of 'input' free the old 'p->refdata.wcs' structure and we'll put the new one there, then we'll set 'collapsed->wcs' to 'NULL', so the new one isn't freed. */ if(collapsed->wcs) { p->refdata.wcs = collapsed->wcs; collapsed->wcs = NULL; } /* We'll also need to correct the size of the reference dataset if it hasn't been corrected yet. We'll use 'memcpy' to write the new 'dsize' values into the old ones. The dimensions have decreased, so we won't be writing outside of allocated space that 'p->refdata.dsize' points to. */ if( p->refdata.ndim != collapsed->ndim ) { p->refdata.ndim -= 1; memcpy( p->refdata.dsize, collapsed->dsize, p->refdata.ndim * (sizeof *p->refdata.dsize) ); } /* Clean up and add the collapsed dataset to the top of the operands. */ gal_data_free(input); gal_data_free(dimension); operands_add(p, NULL, collapsed); } void arithmetic_tofile(struct arithmeticparams *p, char *token, int freeflag) { /* Pop the top dataset. */ gal_data_t *popped = operands_pop(p, token); char *filename = &token[ freeflag ? OPERATOR_PREFIX_LENGTH_TOFILEFREE : OPERATOR_PREFIX_LENGTH_TOFILE ]; /* Make sure that if the file exists, it is deleted. */ gal_checkset_writable_remove(filename, NULL, p->cp.keep, p->cp.dontdelete); /* Save it to a file. */ popped->wcs=p->refdata.wcs; if(popped->ndim==1 && p->onedasimage==0) gal_table_write(popped, NULL, NULL, p->cp.tableformat, filename, "ARITHMETIC", 0, 0); else gal_fits_img_write(popped, filename, NULL, 0); if(!p->cp.quiet) printf(" - Write: %s\n", filename); /* Reset the WCS to NULL and put it back on the stack. */ popped->wcs=NULL; if(freeflag) gal_data_free(popped); else operands_add(p, NULL, popped); } void arithmetic_add_dimension(struct arithmeticparams *p, char *token, int operator) { size_t one=1; gal_data_t *ref=NULL, *out=NULL; size_t i, j, num, dsize[3], nbytes=0; gal_data_t *tmp = operands_pop(p, token); /* Make sure the first operand is a number. */ if(tmp->size!=1) error(EXIT_FAILURE, 0, "first popped operand to '%s' must be a " "number (specifying how many datasets to use)", token); /* Put the first-popped value into 'num'. */ tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_SIZE_T); num=*(size_t *)(tmp->array); gal_data_free(tmp); /* Pop all the datasets and put them in a list. */ for(i=0;itype!=out->type) error(EXIT_FAILURE, 0, "the operands to '%s' must have " "the same data type (the first popped operand has a " "'%s' type, but the popped operand number %zu has " "type '%s')", token, gal_type_name(out->type, 1), i+1, gal_type_name(tmp->type, 1)); /* All entries should also have the same dimension. */ if( gal_dimension_is_different(ref, tmp) ) error(EXIT_FAILURE, 0, "the operands to '%s' must have the " "same size in all dimensions", token); } else /* First popped operand. */ { /* First popped operand, do necessary basic checks here. */ switch(operator) { case ARITHMETIC_OP_ADD_DIMENSION_SLOW: dsize[0]=num; dsize[1]=tmp->dsize[0]; dsize[2]=tmp->dsize[1]; nbytes=gal_type_sizeof(tmp->type)*tmp->size; if(tmp->ndim!=2) error(EXIT_FAILURE, 0, "currently only 2-dimensional " "datasets are acceptable for '%s', please get in " "touch with us at %s so we add functionality for " "different dimensions", token, PACKAGE_BUGREPORT); break; case ARITHMETIC_OP_ADD_DIMENSION_FAST: dsize[1]=num; dsize[0]=tmp->dsize[0]; nbytes=gal_type_sizeof(tmp->type); if(tmp->ndim!=1) error(EXIT_FAILURE, 0, "currently only 1-dimensional " "datasets are acceptable for '%s', please get in " "touch with us at %s so we add functionality for " "different dimensions", token, PACKAGE_BUGREPORT); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at " "%s to address the problem. The operator code '%d' " "isn't recognized", __func__, PACKAGE_BUGREPORT, operator); } /* Allocate the size-reference dataset to simplify checking of the sizes for each new dataset. This is done because this dataset that is actually being popped will be freed right after its values have been written into the output. We don't care about any data from this dataset, and to avoid wasting memory, we will simply allocate a one-element dataset. But we'll many set its sizes to the size of the popped dataset. */ ref=gal_data_alloc(NULL, tmp->type, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); free(ref->dsize); ref->ndim=tmp->ndim; ref->dsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, ref->ndim, 0, __func__, "ref->dsize"); for(j=0;jndim;++j) ref->dsize[j]=tmp->dsize[j]; /* Allocate the output dataset. */ out = gal_data_alloc(NULL, tmp->type, tmp->ndim+1, dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); } /* Copy the dataset into the higher-dimensional output. */ switch(operator) { case ARITHMETIC_OP_ADD_DIMENSION_SLOW: memcpy(gal_pointer_increment(out->array, (num-1-i)*tmp->size, tmp->type), tmp->array, nbytes); break; case ARITHMETIC_OP_ADD_DIMENSION_FAST: for(j=0;jsize;++j) memcpy(gal_pointer_increment(out->array, j*num+num-i-1, out->type), gal_pointer_increment(tmp->array, j, out->type), nbytes); break; } /* Clean up. */ gal_data_free(tmp); } /* Put the higher-dimensional output on the operands stack. */ operands_add(p, NULL, out); /* Clean up. */ gal_data_free(ref); } void arithmetic_repeat(struct arithmeticparams *p, char *token, int operator) { size_t i, num; gal_data_t *ttmp, *tmp = operands_pop(p, token); /* Make sure the first operand is a number. */ if(tmp->size!=1) error(EXIT_FAILURE, 0, "first popped operand to '%s' must be a " "number (specifying how many datasets to use)", token); /* Put the first-popped value into 'num'. */ tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_SIZE_T); num=*(size_t *)(tmp->array); gal_data_free(tmp); /* Pop the dataset to be copied. */ tmp=operands_pop(p, token); /* Add it to the stack for the desired number of times. */ for(i=0; indim, d1->minmapsize, d1->quietmmap); /* Fill the output dataset and return. */ for(i=0;indim;++i) out->dsize[i]=d1->dsize[i]; out->size=d1->size; return out; } static void arithmetic_operator_run(struct arithmeticparams *p, int operator, char *operator_string, size_t num_operands, int inlib) { size_t i; unsigned int numop; int flags = GAL_ARITHMETIC_FLAGS_BASIC; gal_data_t *d1=NULL, *d2=NULL, *d3=NULL, *d4=NULL, *d5=NULL; /* Set the operating-mode flags if necessary. */ if(p->cp.quiet) flags |= GAL_ARITHMETIC_FLAG_QUIET; if(p->envseed) flags |= GAL_ARITHMETIC_FLAG_ENVSEED; /* If this operator is in the library, we should pop everything here. */ if(inlib) { /* Pop the necessary number of operators. Note that the operators are poped from a linked list (which is last-in-first-out). So for the operators which need a specific order, the first poped operand is actally the last (right most, in in-fix notation) input operand.*/ switch(num_operands) { case 0: break; case 1: d1=operands_pop(p, operator_string); break; case 2: d2=operands_pop(p, operator_string); d1=operands_pop(p, operator_string); break; case 3: d3=operands_pop(p, operator_string); d2=operands_pop(p, operator_string); d1=operands_pop(p, operator_string); break; case 4: d4=operands_pop(p, operator_string); d3=operands_pop(p, operator_string); d2=operands_pop(p, operator_string); d1=operands_pop(p, operator_string); break; case 5: d5=operands_pop(p, operator_string); d4=operands_pop(p, operator_string); d3=operands_pop(p, operator_string); d2=operands_pop(p, operator_string); d1=operands_pop(p, operator_string); break; case -1: /* This case is when the number of operands is itself an operand. So except for operators that have high-level parameters (like sigma-clipping), the first popped operand must be an integer number, we will use that to construct a linked list of any number of operands within the single 'd1' pointer. */ numop=pop_number_of_operands(p, operator, operator_string, &d2); for(i=0;iwcs=gal_wcs_copy(p->refdata.wcs); break; /* Operators that need/modify the WCS. */ case GAL_ARITHMETIC_OP_POOLMAX: case GAL_ARITHMETIC_OP_POOLMIN: case GAL_ARITHMETIC_OP_POOLSUM: case GAL_ARITHMETIC_OP_POOLMEAN: case GAL_ARITHMETIC_OP_POOLMEDIAN: /* Print warning in case of existing WCS. */ if(p->refdata.wcs) { if(p->cp.quiet==0) error(EXIT_SUCCESS, 0, "WARNING: the WCS is not currently " "supported for the pooling operators (the output " "will not contain WCS). If it is necessary in your " "usage, please get in touch with us at '%s'. You " "can suppress this warning with the '--quiet' option", PACKAGE_BUGREPORT); gal_wcs_free(p->refdata.wcs); p->refdata.wcs=NULL; } /* In case you want to pass the WCS to the library function ... d1->wcs=gal_wcs_copy(p->refdata.wcs); ... uncomment the line above and comment the whole 'if(p->refdata.wcs)' check above (so the wcs is not freed).*/ break; } /* Run the arithmetic operation. Note that 'gal_arithmetic' is a variable argument function (like printf). So the number of arguments it uses depend on the operator. So when the operator doesn't need three operands, the extra arguments will be ignored. */ operands_add(p, NULL, gal_arithmetic(operator, p->cp.numthreads, flags, d1, d2, d3, d4, d5)); /* Operators with special attention afterwards. */ switch(operator) { case GAL_ARITHMETIC_OP_TRIM: gal_wcs_free(p->refdata.wcs); p->refdata.wcs=gal_wcs_copy(p->operands->data->wcs); break; } } /* No need to call the arithmetic library, call the proper wrappers directly. */ else { switch(operator) { case ARITHMETIC_OP_FILTER_MEAN: case ARITHMETIC_OP_FILTER_MEDIAN: case ARITHMETIC_OP_FILTER_SIGCLIP_MEAN: case ARITHMETIC_OP_FILTER_SIGCLIP_MEDIAN: wrapper_for_filter(p, operator_string, operator); break; case ARITHMETIC_OP_ERODE: case ARITHMETIC_OP_DILATE: arithmetic_erode_dilate(p, operator_string, operator); break; case ARITHMETIC_OP_NUMBER_NEIGHBORS: arithmetic_number_neighbors(p, operator_string, operator); break; case ARITHMETIC_OP_CONNECTED_COMPONENTS: arithmetic_connected_components(p, operator_string); break; case ARITHMETIC_OP_FILL_HOLES: arithmetic_fill_holes(p, operator_string); break; case ARITHMETIC_OP_INVERT: arithmetic_invert(p, operator_string); break; case ARITHMETIC_OP_INTERPOLATE_MINNGB: case ARITHMETIC_OP_INTERPOLATE_MAXNGB: case ARITHMETIC_OP_INTERPOLATE_MEANNGB: case ARITHMETIC_OP_INTERPOLATE_MEDIANNGB: arithmetic_interpolate(p, operator, operator_string); break; case ARITHMETIC_OP_INTERPOLATE_MINOFREGION: case ARITHMETIC_OP_INTERPOLATE_MAXOFREGION: arithmetic_interpolate_region(p, operator, operator_string); break; case ARITHMETIC_OP_COLLAPSE_SUM: case ARITHMETIC_OP_COLLAPSE_MIN: case ARITHMETIC_OP_COLLAPSE_MAX: case ARITHMETIC_OP_COLLAPSE_MEAN: case ARITHMETIC_OP_COLLAPSE_MEDIAN: case ARITHMETIC_OP_COLLAPSE_NUMBER: case ARITHMETIC_OP_COLLAPSE_MADCLIP_MAD: case ARITHMETIC_OP_COLLAPSE_SIGCLIP_MAD: case ARITHMETIC_OP_COLLAPSE_MADCLIP_STD: case ARITHMETIC_OP_COLLAPSE_SIGCLIP_STD: case ARITHMETIC_OP_COLLAPSE_MADCLIP_MEAN: case ARITHMETIC_OP_COLLAPSE_SIGCLIP_MEAN: case ARITHMETIC_OP_COLLAPSE_MADCLIP_MEDIAN: case ARITHMETIC_OP_COLLAPSE_SIGCLIP_MEDIAN: case ARITHMETIC_OP_COLLAPSE_MADCLIP_NUMBER: case ARITHMETIC_OP_COLLAPSE_SIGCLIP_NUMBER: case ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_MAD: case ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_MAD: case ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_STD: case ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_STD: case ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_MEAN: case ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_MEAN: case ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_MEDIAN: case ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_MEDIAN: case ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_NUMBER: case ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_NUMBER: arithmetic_collapse(p, operator_string, operator); break; case ARITHMETIC_OP_ADD_DIMENSION_SLOW: case ARITHMETIC_OP_ADD_DIMENSION_FAST: arithmetic_add_dimension(p, operator_string, operator); break; case ARITHMETIC_OP_REPEAT: arithmetic_repeat(p, operator_string, operator); break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at " "%s to fix the problem. The code %d is not " "recognized for 'op'", __func__, PACKAGE_BUGREPORT, operator); } } } /* Used by the 'set-' operator. */ static int arithmetic_set_name_used_later(void *in, char *name) { struct gal_arithmetic_set_params *p=(struct gal_arithmetic_set_params *)in; gal_list_str_t *token, *tokens = (gal_list_str_t *)(p->tokens); size_t counter=0; /* If the name exists after the current token, then return 1. */ for(token=tokens;token!=NULL;token=token->next) if( counter++ > p->tokencounter && !strcmp(token->v, name) ) return 1; /* If we get to this point, it means that the name doesn't exist. */ return 0; } static void arithmetic_final_read_file(struct arithmeticparams *p, struct operand *operand) { gal_data_t *out=NULL; char *hdu, *filename; /* Read the desired image and report it if necessary. */ hdu=operand->hdu; filename=operand->filename; if( gal_fits_file_recognized(filename) ) { /* Read the data, note that the WCS has already been set. */ out=gal_array_read_one_ch(filename, hdu, NULL, p->cp.minmapsize, p->cp.quietmmap, "--hdu"); out->ndim=gal_dimension_remove_extra(out->ndim, out->dsize, NULL); if(!p->cp.quiet) printf(" - %s (hdu %s) is read.\n", filename, hdu); } else error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to fix " "the problem. While 'operands->data' is NULL, the filename " "('%s') is not recognized as a FITS file", __func__, PACKAGE_BUGREPORT, filename); /* Keep the read dataset (note that we don't need to free 'filename' or 'hdu' since their pointers are simply copied into the operand, they are not copied.*/ operand->data=out; } /* Extract all the datasets of the remaining operands. */ static gal_data_t * arithmetic_final_data(struct arithmeticparams *p) { struct operand *op; gal_data_t *out=NULL; /* Go over the operands, extract their dataset and add it to the list. */ for(op=p->operands; op!=NULL; op=op->next) { gal_list_data_add(&out, op->data); out->wcs=gal_wcs_copy(p->refdata.wcs); } /* Reverse the list so it goes in the same order as the operands, then return it. */ gal_list_data_reverse(&out); return out; } /* This function implements the reverse polish algorithm as explained in the Wikipedia page. NOTE that in ui.c, the input linked list of tokens was ordered to have the same order as what the user provided. */ void reversepolish(struct arithmeticparams *p) { char *printnum=NULL; struct operand *otmp; size_t num_operands=0; gal_list_str_t *token; gal_data_t *tmp, *data, *col; struct gal_options_common_params *cp=&p->cp; int inlib, operator=GAL_ARITHMETIC_OP_INVALID; /* Prepare the processing: */ p->popcounter=0; p->operands=NULL; p->setprm.params=p; p->setprm.tokencounter=0; p->setprm.tokens=p->tokens; p->setprm.pop=operands_pop_wrapper_set; p->setprm.used_later=arithmetic_set_name_used_later; /* Go over each input token and do the work. */ for(token=p->tokens;token!=NULL;token=token->next) { /* The 'tofile-' operator's string can end in a '.fits', similar to a FITS file input file. So, it needs to be checked before checking for a filename. If we have a name or number, then add it to the operands linked list. Otherwise, pull out two members and do the specified operation on them. */ operator=GAL_ARITHMETIC_OP_INVALID; if( !strncmp(OPERATOR_PREFIX_TOFILE, token->v, OPERATOR_PREFIX_LENGTH_TOFILE) ) arithmetic_tofile(p, token->v, 0); else if( !strncmp(OPERATOR_PREFIX_TOFILEFREE, token->v, OPERATOR_PREFIX_LENGTH_TOFILEFREE) ) arithmetic_tofile(p, token->v, 1); else if( !strncmp(token->v, GAL_ARITHMETIC_SET_PREFIX, GAL_ARITHMETIC_SET_PREFIX_LENGTH) ) gal_arithmetic_set_name(&p->setprm, token->v); else if( (col=gal_arithmetic_load_col(token->v, cp->searchin, cp->ignorecase, cp->minmapsize, cp->quietmmap))!=NULL ) operands_add(p, NULL, col); else if( gal_array_file_recognized(token->v) || gal_arithmetic_set_is_name(p->setprm.named, token->v) ) operands_add(p, token->v, NULL); else if( (data=gal_data_copy_string_to_number(token->v)) ) { /* The 'minmapsize' and 'quietmmap' parameters should be passed onto the library within numbers also (since they are the only things that go in the library sometimes). */ data->quietmmap=p->cp.quietmmap; data->minmapsize=p->cp.minmapsize; operands_add(p, NULL, data); } /* Last option is an operator: the program will abort if the token isn't an operator. */ else { operator=arithmetic_set_operator(token->v, &num_operands, &inlib); arithmetic_operator_run(p, operator, token->v, num_operands, inlib); } /* Increment the token counter. */ ++p->setprm.tokencounter; } /* If there aren't any more operands (a variable has been set but not used), then there is nothing to create. */ if(p->operands==NULL) error(EXIT_FAILURE, 0, "no operands on the stack to write (as output)"); /* If there is more than one node in the operands stack then the user has given too many operands which is an error. */ if(p->writeall==0 && p->operands->next!=NULL) error(EXIT_FAILURE, 0, "too many operands"); /* If the final operand has a filename, but its 'data' element is NULL, then the file hasn't actually be read yet. In this case, we need to read the contents of the file and put the resulting dataset into the operands 'data' element. This can happen for example if no operators are called and there is only one filename as an argument (which can happen in scripts).*/ for(otmp=p->operands; otmp!=NULL; otmp=otmp->next) if(otmp->data==NULL && otmp->filename) arithmetic_final_read_file(p, otmp); /* If the final data structure has more than one element, write it as a FITS file. Otherwise, if the user didn't call '--output', print it in the standard output. */ data=arithmetic_final_data(p); if(data->next==NULL && data->size==1 && data->ndim==1 && p->outnamerequested==0) { /* Make the string to print the number. */ printnum=gal_type_to_string(data->array, data->type, 0); printf("%s\n", printnum); /* Clean up (don't set it to 'NULL', this is used to specify if a file was created in the end or not). */ free(printnum); } else { /* If the user has requested a name, units or comments for the FITS file, insert them into the dataset here. */ if(p->metaname) { if(data->name) free(data->name); gal_checkset_allocate_copy(p->metaname, &data->name); } if(p->metaunit) { if(data->unit) free(data->unit); gal_checkset_allocate_copy(p->metaunit, &data->unit); } if(p->metacomment) { if(data->comment) free(data->comment); gal_checkset_allocate_copy(p->metacomment, &data->comment); } /* Put a copy of the WCS structure from the reference image, it will be freed while freeing 'data'. But start the file with the 0-th HDU keywords.*/ gal_fits_key_write(p->cp.ckeys, p->cp.output, "0", "NONE", 1, 1); if(data->ndim==1 && p->onedasimage==0) gal_table_write(data, NULL, NULL, p->cp.tableformat, p->onedonstdout ? NULL : p->cp.output, "ARITHMETIC", 0, 0); else for(tmp=data; tmp!=NULL; tmp=tmp->next) gal_fits_img_write(tmp, p->cp.output, NULL, 0); /* Let the user know that the job is done. */ if(!p->cp.quiet) printf(" - Write (final): %s\n", p->cp.output); } /* Clean up, note that above, we copied the pointer to 'refdata->wcs' into 'data', so it is freed when freeing 'data'. */ gal_data_free(data); free(p->refdata.dsize); gal_list_data_free(p->setprm.named); /* Clean up. Note that the tokens were taken from the command-line arguments, so the string within each token linked list must not be freed. */ gal_list_str_free(p->tokens, 0); free(p->operands); } /***************************************************************/ /************* Top-level function *************/ /***************************************************************/ void arithmetic(struct arithmeticparams *p) { /* Parse the arguments */ reversepolish(p); } gnuastro-0.22/bin/arithmetic/operands.c0000644000175000017500000002274714551337306013663 /********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "operands.h" /**********************************************************************/ /************ General info on operands ***************/ /**********************************************************************/ size_t operands_num(struct arithmeticparams *p) { size_t counter=0; struct operand *tmp=NULL; for(tmp=p->operands;tmp!=NULL;tmp=tmp->next) ++counter; return counter; } /**********************************************************************/ /************ Adding to and popping from stack ***************/ /**********************************************************************/ /* When the operand to be added is a list, we don't have to worry about filenames (external datasets) because lists can only be added */ static void operands_add_list(struct arithmeticparams *p, gal_data_t *data) { gal_data_t *tmp; struct operand *newnode; /* First, reverse the list so when we add them, they have the proper order. */ gal_list_data_reverse(&data); /* Go over the list and add them to the stack. */ while(data) { /* Shift the 'data' pointer to the next element. */ tmp=data; data=data->next; /* Allocate space for the new operand. */ errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for 'newnode'", __func__, sizeof *newnode); /* Set the basic parameters. */ newnode->data=tmp; newnode->hdu=NULL; newnode->filename=NULL; newnode->data->next=NULL; /* Add this dataset to the top of the stack. */ newnode->next=p->operands; p->operands=newnode; } } void operands_add(struct arithmeticparams *p, char *filename, gal_data_t *data) { int readwcs; size_t ndim, *dsize; struct operand *newnode; /* In case 'data' is a list then there is no file name or HDU involved, the given datasets were produced internally, so things are easier. */ if(data && data->next) { operands_add_list(p, data); return; } /* Some operators might not actually return any dataset (data=NULL), in such cases filename will also be NULL (since the operand was not added from the command-line). So, we shouldn't add anything to the stack. */ if(data || filename) { /* Allocate space for the new operand. */ errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for 'newnode'", __func__, sizeof *newnode); /* If the 'filename' is the name of a dataset, then use a copy of it. otherwise, do the basic analysis. */ if( filename && gal_arithmetic_set_is_name(p->setprm.named, filename) ) { newnode->filename=NULL; newnode->data=gal_arithmetic_set_copy_named(&p->setprm, filename); } else { /* Set the basic parameters. */ newnode->data=data; newnode->filename=filename; /* See if a HDU must be read or not. */ if(filename != NULL && ( gal_fits_file_recognized(filename) || gal_tiff_name_is_tiff(filename) ) ) { /* Set the HDU for this filename. */ if(p->globalhdu) gal_checkset_allocate_copy(p->globalhdu, &newnode->hdu); else newnode->hdu=gal_list_str_pop(&p->hdus); /* If no WCS is set yet, use the WCS of this image and remove possibly extra dimensions if necessary. */ readwcs = (p->wcsfile && !strcmp(p->wcsfile,"none")) ? 0 : 1; if(readwcs && p->refdata.wcs==NULL) { /* If the HDU is an image, read its size. */ dsize = ( gal_fits_hdu_format(filename, newnode->hdu, "--hdu")==IMAGE_HDU ? gal_fits_img_info_dim(filename, newnode->hdu, &ndim, "--hdu") : NULL); /* Read the WCS. */ p->refdata.wcs=gal_wcs_read(filename, newnode->hdu, p->cp.wcslinearmatrix, 0, 0, &p->refdata.nwcs, "--hdu"); /* Remove extra (length of 1) dimensions (if we had an image HDU). */ if(dsize) { ndim=gal_dimension_remove_extra(ndim, dsize, p->refdata.wcs); free(dsize); } /* Let the user know that the WCS is read. */ if(p->refdata.wcs && !p->cp.quiet) printf(" - WCS: %s (hdu %s).\n", filename, newnode->hdu); } } else newnode->hdu=NULL; } /* Make the link to the previous list. */ newnode->next=p->operands; p->operands=newnode; } } gal_data_t * operands_pop(struct arithmeticparams *p, char *operator) { size_t i; gal_data_t *data; char *filename, *hdu; struct operand *operands=p->operands; /* If the operand linked list has finished, then give an error and exit. */ if(operands==NULL) error(EXIT_FAILURE, 0, "not enough operands for the '%s' operator", operator); /* Set the dataset. If filename is present then read the file and fill in the array, if not then just set the array. */ if(operands->filename) { /* Set the HDU and filename */ hdu=operands->hdu; filename=operands->filename; /* Read the dataset and remove possibly extra dimensions. */ data=gal_array_read_one_ch(filename, hdu, NULL, p->cp.minmapsize, p->cp.quietmmap, "--hdu"); data->ndim=gal_dimension_remove_extra(data->ndim, data->dsize, NULL); /* When the reference data structure's dimensionality is non-zero, it means that this is not the first image read. So, write its basic information into the reference data structure for future checks. */ if(p->refdata.ndim==0) { /* Set the dimensionality. */ p->refdata.ndim=(data)->ndim; /* Allocate the dsize array. */ errno=0; p->refdata.dsize=malloc(p->refdata.ndim * sizeof *p->refdata.dsize); if(p->refdata.dsize==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for " "p->refdata.dsize", __func__, p->refdata.ndim * sizeof *p->refdata.dsize); /* Write the values into it. */ for(i=0;irefdata.ndim;++i) p->refdata.dsize[i]=data->dsize[i]; } /* Report the read image if desired: */ if(!p->cp.quiet) printf(" - Read: %s (hdu %s).\n", filename, hdu); /* Free the HDU string: */ if(hdu) free(hdu); /* Add to the number of popped FITS images: */ ++p->popcounter; } else data=operands->data; /* Arithmetic changes the contents of a dataset, so the old name and metadata (in the FITS 'EXTNAME' keyword for example) must not be used beyond this point. Furthermore, in Arithmetic, the 'name' element is used to identify variables (with the 'set-' operator). */ if(data->name) { free(data->name); data->name=NULL; } if(data->unit) { free(data->unit); data->unit=NULL; } if(data->comment) { free(data->comment); data->comment=NULL; } /* Remove this node from the queue, return the data structure. */ p->operands=operands->next; free(operands); return data; } /* Wrapper to use the 'operands_pop' function with the 'set-' operator. */ gal_data_t * operands_pop_wrapper_set(void *in) { struct gal_arithmetic_set_params *tprm = (struct gal_arithmetic_set_params *)in; struct arithmeticparams *p=(struct arithmeticparams *)tprm->params; return operands_pop(p, "set"); } gnuastro-0.22/bin/arithmetic/main.h0000644000175000017500000000763114551337306012774 /********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H #include #include #include #include /* Progarm name macros: */ #define PROGRAM_NAME "Arithmetic" /* Program full name. */ #define PROGRAM_EXEC "astarithmetic" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Constants: */ #define NEG_DASH_REPLACE 11 /* Vertical tab (ASCII=11) for negative dash */ #define OPERATOR_PREFIX_TOFILE "tofile-" #define OPERATOR_PREFIX_TOFILEFREE "tofilefree-" #define OPERATOR_PREFIX_LENGTH_TOFILE strlen(OPERATOR_PREFIX_TOFILE) #define OPERATOR_PREFIX_LENGTH_TOFILEFREE strlen(OPERATOR_PREFIX_TOFILEFREE) /* In every node of the operand linked list, only one of the 'filename' or 'data' should be non-NULL. Otherwise it will be a bug and will cause problems. All the operands operate on this premise. */ struct operand { char *filename; /* !=NULL if the operand is a filename. */ char *hdu; /* !=NULL if the operand is a filename. */ gal_data_t *data; /* !=NULL if the operand is a dataset. */ struct operand *next; /* Pointer to next operand. */ }; struct arithmeticparams { /* Other structures: */ struct gal_options_common_params cp; /* Common parameters. */ struct gal_arithmetic_set_params setprm; /* Parameters for 'set-'. */ /* Input: */ char *arguments; /* File containing arguments to be used. */ gal_list_str_t *hdus; /* List of all given HDU strings. */ gal_list_str_t *tokens; /* List of all arithmetic tokens. */ char *wcsfile; /* File to use for output's WCS. */ char *wcshdu; /* Extension to use for output's WCS. */ size_t popcounter; /* The number of FITS images popped. */ gal_data_t refdata; /* Container for information of the data. */ char *globalhdu; /* Single HDU for all inputs. */ uint8_t onedasimage; /* Write 1D outputs as an image not table. */ uint8_t onedonstdout; /* Write 1D outputs on stdout, not table. */ char *metaname; /* FITS name (EXTNAME keyword) of output. */ char *metaunit; /* FITS name (BUNIT keyword) of output. */ char *metacomment; /* FITS comment of output. */ uint8_t writeall; /* Write all outputs. */ /* Operating mode: */ int wcs_collapsed; /* If the internal WCS is already collapsed.*/ /* Internal: */ uint8_t envseed; /* To setup the random number generator. */ struct operand *operands; /* The operands linked list. */ int outnamerequested; /* ==1 if the user has given '--otuput'. */ time_t rawtime; /* Starting time of the program. */ }; #endif gnuastro-0.22/bin/arithmetic/authors-cite.h0000644000175000017500000000302414551337306014447 /********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/arithmetic/args.h0000644000175000017500000001156414551337306013004 /********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Definition of program-specific options. */ struct argp_option program_options[] = { /* Input options. */ { "globalhdu", UI_KEY_GLOBALHDU, "STR", 0, "Use this HDU for all inputs, ignore '--hdu'.", GAL_OPTIONS_GROUP_INPUT, &p->globalhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "wcsfile", UI_KEY_WCSFILE, "FITS", 0, "File to use for output's WCS.", GAL_OPTIONS_GROUP_INPUT, &p->wcsfile, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "wcshdu", UI_KEY_WCSHDU, "STR", 0, "HDU/extension to use for output's WCS.", GAL_OPTIONS_GROUP_INPUT, &p->wcshdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "envseed", UI_KEY_ENVSEED, 0, 0, "Use GSL_RNG_SEED env. for mknoise operator.", GAL_OPTIONS_GROUP_INPUT, &p->envseed, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "arguments", UI_KEY_ARGUMENTS, "STR", 0, "Plain-text file with command-line arguments.", GAL_OPTIONS_GROUP_INPUT, &p->arguments, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Output options. */ { "onedasimage", UI_KEY_ONEDASIMAGE, 0, 0, "Write 1D outputs as an image, not a table.", GAL_OPTIONS_GROUP_OUTPUT, &p->onedasimage, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "onedonstdout", UI_KEY_ONEDONSTDOUT, 0, 0, "Write 1D output on stdout, not in a table.", GAL_OPTIONS_GROUP_OUTPUT, &p->onedonstdout, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "metaname", UI_KEY_METANAME, "STR", 0, "Internal name (FITS images: EXTNAME keyword).", GAL_OPTIONS_GROUP_OUTPUT, &p->metaname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "metaunit", UI_KEY_METAUNIT, "STR", 0, "Internal units (FITS images: BUNIT keyword).", GAL_OPTIONS_GROUP_OUTPUT, &p->metaunit, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "metacomment", UI_KEY_METACOMMENT, "STR", 0, "Internal comments (FITS images: COMMENT keyword).", GAL_OPTIONS_GROUP_OUTPUT, &p->metacomment, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "writeall", UI_KEY_WRITEALL, 0, 0, "Write all remaining data in the output.", GAL_OPTIONS_GROUP_OUTPUT, &p->writeall, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/arithmetic/ui.h0000644000175000017500000000363614551337306012466 /********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Available letters for short options: b d e f i j k l m p r t v x y z A B C E G H J L Q R X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_GLOBALHDU = 'g', UI_KEY_ONEDASIMAGE = 'O', UI_KEY_ONEDONSTDOUT = 's', UI_KEY_WCSFILE = 'w', UI_KEY_WCSHDU = 'W', UI_KEY_METANAME = 'n', UI_KEY_METAUNIT = 'u', UI_KEY_METACOMMENT = 'c', UI_KEY_WRITEALL = 'a', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_ENVSEED = 1000, UI_KEY_ARGUMENTS, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct arithmeticparams *p); size_t * ui_read_ndim_dsize(char *filename, char *hdu, size_t *ndim); void freeandreport(struct arithmeticparams *p, struct timeval *t1); #endif gnuastro-0.22/bin/arithmetic/arithmetic.h0000644000175000017500000000560114551337306014174 /********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef IMGARITH_H #define IMGARITH_H #include /* These are operator codes for functions that aren't in the arithmetic library. */ enum arithmetic_prog_operators { ARITHMETIC_OP_FILTER_MEDIAN = GAL_ARITHMETIC_OP_LAST_CODE, ARITHMETIC_OP_FILTER_MEAN, ARITHMETIC_OP_FILTER_SIGCLIP_MEAN, ARITHMETIC_OP_FILTER_SIGCLIP_MEDIAN, ARITHMETIC_OP_ERODE, ARITHMETIC_OP_DILATE, ARITHMETIC_OP_NUMBER_NEIGHBORS, ARITHMETIC_OP_CONNECTED_COMPONENTS, ARITHMETIC_OP_FILL_HOLES, ARITHMETIC_OP_INVERT, ARITHMETIC_OP_INTERPOLATE_MINNGB, ARITHMETIC_OP_INTERPOLATE_MAXNGB, ARITHMETIC_OP_INTERPOLATE_MEANNGB, ARITHMETIC_OP_INTERPOLATE_MEDIANNGB, ARITHMETIC_OP_INTERPOLATE_MINOFREGION, ARITHMETIC_OP_INTERPOLATE_MAXOFREGION, ARITHMETIC_OP_COLLAPSE_SUM, ARITHMETIC_OP_COLLAPSE_MIN, ARITHMETIC_OP_COLLAPSE_MAX, ARITHMETIC_OP_COLLAPSE_MEAN, ARITHMETIC_OP_COLLAPSE_MEDIAN, ARITHMETIC_OP_COLLAPSE_NUMBER, ARITHMETIC_OP_COLLAPSE_SIGCLIP_MAD, ARITHMETIC_OP_COLLAPSE_SIGCLIP_STD, ARITHMETIC_OP_COLLAPSE_SIGCLIP_MEAN, ARITHMETIC_OP_COLLAPSE_SIGCLIP_MEDIAN, ARITHMETIC_OP_COLLAPSE_SIGCLIP_NUMBER, ARITHMETIC_OP_COLLAPSE_MADCLIP_MAD, ARITHMETIC_OP_COLLAPSE_MADCLIP_STD, ARITHMETIC_OP_COLLAPSE_MADCLIP_MEAN, ARITHMETIC_OP_COLLAPSE_MADCLIP_MEDIAN, ARITHMETIC_OP_COLLAPSE_MADCLIP_NUMBER, ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_MAD, ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_STD, ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_MEAN, ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_MEDIAN, ARITHMETIC_OP_COLLAPSE_SIGCLIP_FILL_NUMBER, ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_MAD, ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_STD, ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_MEAN, ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_MEDIAN, ARITHMETIC_OP_COLLAPSE_MADCLIP_FILL_NUMBER, ARITHMETIC_OP_ADD_DIMENSION_SLOW, ARITHMETIC_OP_ADD_DIMENSION_FAST, ARITHMETIC_OP_REPEAT, }; void arithmetic(struct arithmeticparams *p); #endif gnuastro-0.22/bin/arithmetic/operands.h0000644000175000017500000000263014551337306013655 /********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef OPERANDS_H #define OPERANDS_H size_t operands_num(struct arithmeticparams *p); void operands_add(struct arithmeticparams *p, char *filename, gal_data_t *data); gal_data_t * operands_pop(struct arithmeticparams *p, char *operator); gal_data_t * operands_pop_wrapper_set(void *in); void operands_set_name(struct arithmeticparams *p, char *token); int operands_is_name(struct arithmeticparams *p, char *token); #endif gnuastro-0.22/bin/arithmetic/astarithmetic-complete.bash0000644000175000017500000001257714551337306017212 # Bash autocompletion to Gnuastro's Arithmetic program. See the comments # above 'bin/completion.bash.in' for more. # # Original author: # Mohammad Akhlaghi # Contributing author(s): # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see ## Contributing author(s): ## Copyright (C) 2017-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. ## ## Buildprog will also need some system-specific information that is ## gathered at compile time (for example the library installation directory ## (LIBDIR) and the executive file suffix (EXEEXT). AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib \ -DLIBDIR=\"$(libdir)\" \ -DINCLUDEDIR=\"$(includedir)\" \ -DEXEEXT=\"$(EXEEXT)\" ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astbuildprog ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astbuildprog_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) # Basic program sources. astbuildprog_SOURCES = main.c ui.c buildprog.c # Extra files that must be distributed in the tarball. EXTRA_DIST = main.h authors-cite.h args.h ui.h buildprog.h \ astbuildprog-complete.bash astbuildprog.conf.in # Build the BuildProgram configuration file. The main problem is the # possible CPPFLAGS and LDFLAGS that the user might have given at # Gnuastro's configure time. BuildProgram also needs to know these # directories in order to compile its programs. With the rule below, the # directories in these variables will be written into the final # BuildProgram configuration file. # # The user might give non-'-I' arguments to CPPFLAGS and non-'-L' arguments # to LDFLAGS (see bug #54346). But here, we only want these two options, # and nothing else. To make the check, we'll see if '$i' (the input string) # is the same as '$v' or not. If the string starts with '-I' or '-L', it # will change between the two (the '-I' or '-L' have been removed), so it # shouldn't be the same. astbuildprog.conf: $(top_srcdir)/bin/buildprog/astbuildprog.conf.in cat $< > $@ infoadded="no"; \ for i in $(CPPFLAGS); do \ v=$$(echo $$i | sed -e 's/^-I//'); \ if test $$i != $$v; then \ if test $$infoadded = "no"; then \ echo "" >> $@; \ echo "# Installation information" >> $@; \ infoadded="yes"; \ fi; \ echo " includedir $$v" >> $@; \ fi; \ done; \ for i in $(LDFLAGS); do \ v=$$(echo $$i | sed -e 's/^-L//'); \ if test $$i != $$v; then \ if test $$infoadded = "no"; then \ echo "" >> $@; \ echo "# Installation information" >> $@; \ infoadded="yes"; \ fi; \ echo " linkdir $$v" >> $@; \ fi; \ done echo "# Build-time LDFLAGS: $(LDFLAGS)" >> $@ echo "# Build-time CPPFLAGS: $(CPPFLAGS)" >> $@ ## The configuration file in BuildProgram must be built on the users's ## system (see above). The built configuration file is needed during 'make ## check'. But the (built) configuration file should NOT be distributed in a ## tarball. Since all built files are distributed, the only way to avoid ## the configuration file being distributed it so use a 'nodist_' prefix. ## ## NOTE: the man page is created in doc/Makefile.am nodist_sysconf_DATA = astbuildprog.conf check_DATA = astbuildprog.conf CLEANFILES = astbuildprog.conf gnuastro-0.22/bin/buildprog/Makefile.in0000644000175000017500000034461314557513747013621 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astbuildprog$(EXEEXT) subdir = bin/buildprog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astbuildprog_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ buildprog.$(OBJEXT) astbuildprog_OBJECTS = $(am_astbuildprog_OBJECTS) am__DEPENDENCIES_1 = astbuildprog_DEPENDENCIES = \ $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/buildprog.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/ui.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astbuildprog_SOURCES) DIST_SOURCES = $(astbuildprog_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(nodist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib \ -DLIBDIR=\"$(libdir)\" \ -DINCLUDEDIR=\"$(includedir)\" \ -DEXEEXT=\"$(EXEEXT)\" astbuildprog_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) # Basic program sources. astbuildprog_SOURCES = main.c ui.c buildprog.c # Extra files that must be distributed in the tarball. EXTRA_DIST = main.h authors-cite.h args.h ui.h buildprog.h \ astbuildprog-complete.bash astbuildprog.conf.in nodist_sysconf_DATA = astbuildprog.conf check_DATA = astbuildprog.conf CLEANFILES = astbuildprog.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/buildprog/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/buildprog/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astbuildprog$(EXEEXT): $(astbuildprog_OBJECTS) $(astbuildprog_DEPENDENCIES) $(EXTRA_astbuildprog_DEPENDENCIES) @rm -f astbuildprog$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astbuildprog_OBJECTS) $(astbuildprog_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buildprog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-nodist_sysconfDATA: $(nodist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(nodist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-nodist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(nodist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_DATA) check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/buildprog.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-nodist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/buildprog.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-nodist_sysconfDATA .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man \ install-nodist_sysconfDATA install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-nodist_sysconfDATA .PRECIOUS: Makefile # Build the BuildProgram configuration file. The main problem is the # possible CPPFLAGS and LDFLAGS that the user might have given at # Gnuastro's configure time. BuildProgram also needs to know these # directories in order to compile its programs. With the rule below, the # directories in these variables will be written into the final # BuildProgram configuration file. # # The user might give non-'-I' arguments to CPPFLAGS and non-'-L' arguments # to LDFLAGS (see bug #54346). But here, we only want these two options, # and nothing else. To make the check, we'll see if '$i' (the input string) # is the same as '$v' or not. If the string starts with '-I' or '-L', it # will change between the two (the '-I' or '-L' have been removed), so it # shouldn't be the same. astbuildprog.conf: $(top_srcdir)/bin/buildprog/astbuildprog.conf.in cat $< > $@ infoadded="no"; \ for i in $(CPPFLAGS); do \ v=$$(echo $$i | sed -e 's/^-I//'); \ if test $$i != $$v; then \ if test $$infoadded = "no"; then \ echo "" >> $@; \ echo "# Installation information" >> $@; \ infoadded="yes"; \ fi; \ echo " includedir $$v" >> $@; \ fi; \ done; \ for i in $(LDFLAGS); do \ v=$$(echo $$i | sed -e 's/^-L//'); \ if test $$i != $$v; then \ if test $$infoadded = "no"; then \ echo "" >> $@; \ echo "# Installation information" >> $@; \ infoadded="yes"; \ fi; \ echo " linkdir $$v" >> $@; \ fi; \ done echo "# Build-time LDFLAGS: $(LDFLAGS)" >> $@ echo "# Build-time CPPFLAGS: $(CPPFLAGS)" >> $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/buildprog/main.c0000644000175000017500000000306014551337306012615 /********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" #include "buildprog.h" /* Main function */ int main (int argc, char *argv[]) { int retval; struct buildprogparams p={{{0},0},0}; /* Set they starting time. */ time(&p.rawtime); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Buildprog. */ retval=buildprog(&p); /* Free all non-freed allocations. */ ui_free_report(&p); /* Return successfully. */ return retval; } gnuastro-0.22/bin/buildprog/ui.c0000644000175000017500000002503214551337306012311 /********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "C-source [ARGUMENTS TO RUN]"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will compile and run a " "C program, while automatically linking with libraries that Gnuastro " "depends on. Hence you do not have to worry about explicitly linking " "with CFITSIO for example if you want to work on a FITS file, or with " "GSL if you want to use GNU Scientific Library's functions. The standard " "compiler options of '-I', '-L', and '-l' are also available for further " "customization of the build.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct buildprogparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_HDU: case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_NUMTHREADS: case GAL_OPTIONS_KEY_TABLEFORMAT: case GAL_OPTIONS_KEY_STDINTIMEOUT: case GAL_OPTIONS_KEY_WCSLINEARMATRIX: cp->coptions[i].flags=OPTION_HIDDEN; cp->coptions[i].mandatory=GAL_OPTIONS_NOT_MANDATORY; break; /* '--ignorecase's default short format is 'I', but here we want to follow the compiler format, hence we need 'I' for 'include'. Therefore, here, we'll change the key for 'include' to some large number just to avoid confusion.*/ case GAL_OPTIONS_KEY_IGNORECASE: cp->coptions[i].key=20000; cp->coptions[i].flags=OPTION_HIDDEN; cp->coptions[i].mandatory=GAL_OPTIONS_NOT_MANDATORY; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct buildprogparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(arg[0]!='\0') gal_list_str_add(&p->sourceargs, arg, 0); break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct buildprogparams *p) { size_t len; /* If an '.la' file is given, make sure it has the correct suffix. */ if(p->la) { len=strlen(p->la); if(len>=4) if(strcmp(&p->la[len-3], ".la")) error(EXIT_FAILURE, 0, "'%s' is not a Libtool control file name " "(with a '.la' suffix). The file name given to the '--la' " "('-a') option must be a Libtool control file", p->la); } } /* Check the options and arguments. */ static void ui_check_options_and_arguments(struct buildprogparams *p) { if(p->sourceargs==NULL) error(EXIT_FAILURE, 0, "no input (C source file) given"); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ void ui_preparations(struct buildprogparams *p) { /* Reverse the sourceargs list (note that the options are reversed in options.c). */ gal_list_str_reverse(&p->sourceargs); /* Set the final output name. 'EXEEXT' comes from the configuration script (given by BuildProgram's 'Makefile.am'). */ if(p->cp.output==NULL) p->cp.output=gal_checkset_automatic_output(&p->cp, p->sourceargs->v, EXEEXT); /* Set the C compiler. Later we can add a check to make sure that 'cc' is actually in the PATH. */ if(p->cc==NULL) { /* No C compiler chosen. */ if(p->noenv==0) { p->cc=getenv("CC"); /* First check for 'CC'. */ if(p->cc==NULL) p->cc=getenv("GCC"); /* Then check for 'GCC'. */ } if(p->cc==NULL) p->cc="gcc"; /* Default: 'gcc'. */ } } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct buildprogparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct buildprogparams *p) { /* Free the allocated arrays: */ free(p->cp.hdu); free(p->cp.output); gal_list_str_free(p->include, 1); gal_list_str_free(p->linkdir, 1); gal_list_str_free(p->linklib, 1); gal_list_str_free(p->sourceargs, 0); } gnuastro-0.22/bin/buildprog/buildprog.c0000644000175000017500000001641614551337306013671 /********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include /* Write the given list into */ char * buildprog_as_one_string(char *opt, gal_list_str_t *list) { char *out; size_t len=0; gal_list_str_t *tmp; /* Only if we have a list. */ if(list) { /* For every node in the list, we want the 'opt' and a space along with the actual string. */ for(tmp=list; tmp!=NULL; tmp=tmp->next) len += 1 + (opt ? strlen(opt) : 0) + strlen(tmp->v); /* Allocate space for the string. */ out=gal_pointer_allocate(GAL_TYPE_UINT8, len+1, 0, __func__, "out"); /* Write all the strings into the allocated space. */ len=0; for(tmp=list; tmp!=NULL; tmp=tmp->next) len += sprintf(&out[len], "%s%s ", opt ? opt : "", tmp->v); } else out=NULL; /* Return the final string. */ return out; } /*******************************************************************/ /************* Top-level function *************/ /*******************************************************************/ /* Create the build command and run it. Necessity of CONFIG_GNUASTRO_LDADD: By default Libtool will look into the 'dependency_libs' variable of a library's 'libXXXXX.la' file to find the dependencies of that library and add them to the link command. Through this feature if we simply give the '.la' file to Libtool, it will automatically use the dependency libraries in the final compile and link command, making it redundant to use the 'CONFIG_GNUASTRO_LDADD' macro discussed here (which has all the link commands necessary to use all the features of Gnuastro's library for this system and was created at configure time). However, on some OSs (including Debian, and all derivative OSs like Ubuntu), this feature of libtool (to parse the dependnecies of a library) is disabled with a patch in the source of Libtool (that is not modifiable without root permissions!). So it is necessary to add this macro here. On other OSs that don't have a problem, Libtool will automatically remove duplicates before executing the command, so for the user, it won't make any difference.*/ int buildprog(struct buildprogparams *p) { /* Note that the first node of 'sourceargs' is the acutal source and the rest are arguments to be run later. */ int retval; char *fullla; char *ldflags=NULL, *cppflags=NULL; char *command, *optimize=NULL, *warning=NULL; char *include = buildprog_as_one_string("-I", p->include); char *linkdir = buildprog_as_one_string("-L", p->linkdir); char *linklib = buildprog_as_one_string("-l", p->linklib); char *arguments = buildprog_as_one_string(NULL, p->sourceargs->next); /* If not in quiet mode, let the user know. */ if(!p->cp.quiet) { printf("\nCompiling and linking the program\n"); printf("---------------------------------\n"); } /* If environment should be read, read it. */ if(p->noenv==0) { ldflags=getenv("LDFLAGS"); cppflags=getenv("CPPFLAGS"); } /* Compiler options with values: */ if(p->warning) if( asprintf(&warning, "-W%s", p->warning)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); if(p->optimize) if( asprintf(&optimize, "-O%s", p->optimize)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); /* Libtool '.la' file: */ if(p->la) fullla=p->la; else if( asprintf(&fullla, "%s/libgnuastro.la", LIBDIR)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); /* Write the full Libtool command into a string (to run afterwards). */ if( asprintf(&command, "%s -c \"%s %s %s%s --mode=link %s %s %s " "%s %s %s %s %s %s %s -I%s %s %s -o %s\"", GAL_CONFIG_GNULIBTOOL_SHELL, GAL_CONFIG_GNULIBTOOL_EXEC, p->cp.quiet ? "--quiet" : "", p->tag ? "--tag=" : "", p->tag ? p->tag : "", p->cc, warning ? warning : "", p->debug ? "-g" : "", optimize ? optimize : "", include ? include : "", cppflags ? cppflags : "", linkdir ? linkdir : "", ldflags ? ldflags : "", p->sourceargs->v, linklib ?linklib : "", INCLUDEDIR, fullla, CONFIG_GNUASTRO_LDADD, /* See comment on this macro above */ p->cp.output)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); /* Compile (and link): */ retval=system(command); if(retval!=EXIT_SUCCESS) error(EXIT_FAILURE, 0, "failed to build (error code %d), " "see above", retval); else if(p->onlybuild==0) { /* Free the initial command. */ free(command); /* Wright the command to run the program. Note that if the output value doesn't start with a directory, we'll have to put one for it. */ switch(p->cp.output[0]) { case '.': case '/': if( asprintf(&command, "%s %s", p->cp.output, arguments?arguments:"")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); break; default: if( asprintf(&command, "./%s %s", p->cp.output, arguments?arguments:"")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } /* Print the executed command if necessary, then run it. */ if(!p->cp.quiet) { printf("\nRun the compiled program\n"); printf("------------------------\n"); printf("%s\n", command); } retval=system(command); /* Delete the compiled program after running it. */ if(p->deletecompiled) { errno=0; if( remove(p->cp.output) == -1 ) error(EXIT_FAILURE, 0, "unable to delete %s", p->cp.output); } } /* Clean up and return. */ free(include); free(linkdir); free(linklib); free(command); if(warning) free(warning); if(optimize) free(optimize); if(!p->la && fullla) free(fullla); return retval; } gnuastro-0.22/bin/buildprog/main.h0000644000175000017500000000505214551337306012625 /********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include #include /* Progarm names. */ #define PROGRAM_NAME "BuildProgram" /* Program full name. */ #define PROGRAM_EXEC "astbuildprog" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Main program parameters structure */ struct buildprogparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ gal_list_str_t *sourceargs; /* Source files and arguments. */ gal_list_str_t *include; /* Libraries to link against. */ gal_list_str_t *linkdir; /* Libraries to link against. */ gal_list_str_t *linklib; /* Libraries to link against. */ char *la; /* Libtool '.la' instead of default. */ char *cc; /* C compiler to use. */ uint8_t noenv; char *tag; /* Libtool tag (programming language).*/ char *optimize; /* Optimization level. */ char *debug; /* Keep debugging information. */ char *warning; /* Compiler warnings. */ uint8_t onlybuild; /* Don't run the compiled program. */ uint8_t deletecompiled; /* Delete compiled program after running. */ /* Output: */ time_t rawtime; /* Starting time of the program. */ }; #endif gnuastro-0.22/bin/buildprog/authors-cite.h0000644000175000017500000000304514551337306014310 /********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/buildprog/args.h0000644000175000017500000001205614551337306012637 /********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { { "cc", UI_KEY_CC, "STR", 0, "Name of C compiler's executable.", GAL_OPTIONS_GROUP_INPUT, &p->cc, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "includedir", UI_KEY_INCLUDE, "STR", 0, "Directories to search for '#include's.", GAL_OPTIONS_GROUP_INPUT, &p->include, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "linkdir", UI_KEY_LINKDIR, "STR", 0, "Directory to search for libraries to link.", GAL_OPTIONS_GROUP_INPUT, &p->linkdir, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "linklib", UI_KEY_LINKLIB, "STR", 0, "Link libraries, e.g., for libgsl: '-lgsl'.", GAL_OPTIONS_GROUP_INPUT, &p->linklib, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "la", UI_KEY_LA, "STR", 0, "Libtool '.la' to use instead of default.", GAL_OPTIONS_GROUP_INPUT, &p->la, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "tag", UI_KEY_TAG, "STR", 0, "Libtool '--tag': programming language.", GAL_OPTIONS_GROUP_INPUT, &p->tag, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "noenv", UI_KEY_NOENV, 0, 0, "No env. (e.g., LDFLAGS or CPPFLAGS) in build.", GAL_OPTIONS_GROUP_INPUT, &p->noenv, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "debug", UI_KEY_DEBUG, 0, 0, "Debugging information in compiled binary.", GAL_OPTIONS_GROUP_OUTPUT, &p->debug, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "optimize", UI_KEY_OPTIMIZE, "INT", 0, "Optimization level: 0, 1, 2, 3.", GAL_OPTIONS_GROUP_OUTPUT, &p->optimize, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "warning", UI_KEY_WARNING, "STR", 0, "Compilation warnings on command-line.", GAL_OPTIONS_GROUP_OUTPUT, &p->warning, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "onlybuild", UI_KEY_ONLYBUILD, 0, 0, "Don't run the built program.", GAL_OPTIONS_GROUP_OUTPUT, &p->onlybuild, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "deletecompiled", UI_KEY_DETELECOMPILED, 0, 0, "Delete compiled program after running.", GAL_OPTIONS_GROUP_OUTPUT, &p->deletecompiled, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure ------------------------------- NOTE: these parts can be left untouched.*/ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/buildprog/ui.h0000644000175000017500000000355714551337306012326 /********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Available letters for short options: f i j k n p r s u v w x y z A B C E G H J Q R X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_CC = 'c', UI_KEY_INCLUDE = 'I', UI_KEY_LINKDIR = 'L', UI_KEY_LINKLIB = 'l', UI_KEY_ONLYBUILD = 'b', UI_KEY_DEBUG = 'g', UI_KEY_OPTIMIZE = 'O', UI_KEY_WARNING = 'W', UI_KEY_TAG = 't', UI_KEY_DETELECOMPILED = 'd', UI_KEY_LA = 'a', UI_KEY_NOENV = 'e', /* Only with long version (start with a value 1000, the rest will be set automatically). */ }; void ui_read_check_inputs_setup(int argc, char *argv[], struct buildprogparams *p); void ui_free_report(struct buildprogparams *p); #endif gnuastro-0.22/bin/buildprog/buildprog.h0000644000175000017500000000212614551337306013667 /********************************************************************* BuildProgram: Compile and run programs using Gnuastro's library BuildProgram is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef BUILDPROG_H #define BUILDPROG_H int buildprog(struct buildprogparams *p); #endif gnuastro-0.22/bin/buildprog/astbuildprog-complete.bash0000644000175000017500000001204014551337306016667 # Bash autocompletion to Gnuastro's BuildProgram. See the comments above # 'bin/completion.bash.in' for more. # # Original author: # Mohammad Akhlaghi # Contributing author(s): # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see /dev/null; then COMPREPLY+=("$f"); fi done } # Dealing with arguments: BuildProgram currently only takes C source files. _gnuastro_autocomplete_astbuildprog_arguments(){ local given_file="" if _gnuastro_autocomplete_first_in_arguments source_c; then _gnuastro_autocomplete_compreply_options_all "" else _gnuastro_autocomplete_compreply_files_certain source_c "$argument" fi } # Fill option value (depends on option). _gnuastro_autocomplete_astbuildprog_option_value(){ # Internal variables. local junk=1 local fits_file="" local given_hdu="" local given_file="" # Keep this in the same order as the output of '--help', for options # with similar operations, keep the order within the '|'s. case "$option_name" in -a|--la) _gnuastro_autocomplete_compreply_files_certain source_la "$current" ;; -c|--cc) _gnuastro_autocomplete_compreply_c_compiler ;; -I|--includedir|-L|--linkdir) _gnuastro_autocomplete_compreply_directories "$current" ;; -l|--linklib|-t|--tag|-W|--warning) # There is no easy way to guess which libraries the user wants # to link with, or the tag, or the warning level. junk=1 ;; -O|--optimize) for f in $(printf "0\n1\n2\n3" | grep ^"$current"); do COMPREPLY+=("$f"); done ;; esac } _gnuastro_autocomplete_astbuildprog(){ # The installation directory of Gnuastro. The '@PREFIX@' part will be # replaced automatically during 'make install', with the user's given # requested installation directory. If you are debugging, please # correct it yourself (usually to '/usr/local/bin', but don't commit # this particular change). local gnuastro_prefix="@PREFIX@" # Basic initialization. The variables we want to remain inside this # function are given a 'local' here and set inside the 'initialize' # function. The variables are defined above the function that gives # them a value. local prev="" local current="" local argument="" _gnuastro_autocomplete_initialize # For a check #echo #echo "prev: $prev" #echo "current: $current" #echo "argument: $argument" # Extract the current mode (if the user is giving an argument, option # name, or option value). See the description above this function on # how the mode is set. local options_all="" local option_name="" local option_value="" local option_name_complete=0 _gnuastro_autocomplete_mode # For a check #echo #echo "argument: $argument" #echo "option_name: $option_name" #echo "option_name_complete: $option_name_complete" #echo "option_value: $option_value" # If 'option_name_complete==1', then we are busy filling in the option # value. if [ $option_name_complete = 1 ]; then _gnuastro_autocomplete_astbuildprog_option_value # When 'option_name' is not empty (and not yet complete), we are busy # filling in the option name. elif [ x$option_name != x ]; then _gnuastro_autocomplete_compreply_options_all "$option_name" # In the case of "none-of-the-above", it is an argument. else _gnuastro_autocomplete_astbuildprog_arguments fi } # Define the completion specification, or COMPSPEC: -o bashdefault: Use # Bash default completions if nothing is found. -F function: Use this # 'function' to generate the given program's completion. complete -o bashdefault -F _gnuastro_autocomplete_astbuildprog astbuildprog gnuastro-0.22/bin/buildprog/astbuildprog.conf.in0000644000175000017500000000200314551337306015474 # Default parameters (System) for BuildProgram. # BuildProgram is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astbuildprog --help # Full list of options, short doc. # $ astbuildprog -P # Print all options and used values. # $ info astbuildprog # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Output optimize 3 warning all tag CC gnuastro-0.22/bin/convertt/0000755000175000017500000000000014557514201011460 5gnuastro-0.22/bin/convertt/Makefile.am0000644000175000017500000000325014557211443013436 ## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2015-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astconvertt ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astconvertt_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astconvertt_SOURCES = main.c ui.c convertt.c color.c EXTRA_DIST = main.h authors-cite.h args.h ui.h convertt.h color.h \ astconvertt-complete.bash ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astconvertt.conf gnuastro-0.22/bin/convertt/astconvertt.conf0000644000175000017500000000275614551337306014640 # Default parameters (System) for ConvertType. # ConvertType is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astconvertt --help # Full list of options, short doc. # $ astconvertt -P # Print all options and used values. # $ info astconvertt # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: # Output: quality 100 widthincm 10.0 borderwidth 1 bordercolor black output output.jpg colormap gray # Flux: invert 0 # Marks: markshdu 1 marktextprecision 0 # Common options # # --stdintimeout: If a standard input is given, ConvertType will use it as # the first color channel. So we need to actually check it all the time and # can't use the common value for all of Gnuastro (since it will take long). stdintimeout 10000 gnuastro-0.22/bin/convertt/Makefile.in0000644000175000017500000034024514557513747013473 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astconvertt$(EXEEXT) subdir = bin/convertt ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astconvertt_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ convertt.$(OBJEXT) color.$(OBJEXT) astconvertt_OBJECTS = $(am_astconvertt_OBJECTS) am__DEPENDENCIES_1 = astconvertt_DEPENDENCIES = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/color.Po ./$(DEPDIR)/convertt.Po \ ./$(DEPDIR)/main.Po ./$(DEPDIR)/ui.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astconvertt_SOURCES) DIST_SOURCES = $(astconvertt_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib astconvertt_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astconvertt_SOURCES = main.c ui.c convertt.c color.c EXTRA_DIST = main.h authors-cite.h args.h ui.h convertt.h color.h \ astconvertt-complete.bash dist_sysconf_DATA = astconvertt.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/convertt/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/convertt/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astconvertt$(EXEEXT): $(astconvertt_OBJECTS) $(astconvertt_DEPENDENCIES) $(EXTRA_astconvertt_DEPENDENCIES) @rm -f astconvertt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astconvertt_OBJECTS) $(astconvertt_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convertt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/color.Po -rm -f ./$(DEPDIR)/convertt.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/color.Po -rm -f ./$(DEPDIR)/convertt.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/convertt/main.c0000644000175000017500000000305614551337306012477 /********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" /* needs main.h. */ #include "convertt.h" int main(int argc, char *argv[]) { struct converttparams p={{{0},0},0}; /* Set the starting time.*/ time(&p.rawtime); /* Read the input parameters.*/ ui_read_check_inputs_setup(argc, argv, &p); /* Run Convert. */ convertt(&p); /* Free all non-freed allocations. */ ui_free_report(&p); /* Return successfully. */ return EXIT_SUCCESS; } gnuastro-0.22/bin/convertt/ui.c0000644000175000017500000016612314551337306012175 /********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "InputFile1 [InputFile2] ... [InputFile4]"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will convert any of the " "known input formats to any other of the known formats. The output file " "will have the same number of pixels.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct converttparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; /* Program specific non-zero values. */ p->maxbyte = UINT8_MAX; p->quality = GAL_BLANK_UINT8; /* Modify the common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: cp->coptions[i].value=&p->hdus; cp->coptions[i].type=GAL_TYPE_STRLL; cp->coptions[i].doc="FITS input HDU, multiple calls possible."; break; case GAL_OPTIONS_KEY_OUTPUT: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; cp->coptions[i].doc="Output filename or suffix."; break; case GAL_OPTIONS_KEY_MINMAPSIZE: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].flags=OPTION_HIDDEN; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct converttparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(arg[0]!='\0') gal_list_str_add(&p->inputnames, arg, 0); break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ static void ui_colormap_sanity_check(struct converttparams *p) { char **strarr; float *farray; size_t nparams=0; int ccode=COLOR_INVALID; /* See how many parameters are necessary. Notes for TAB completion: 1. Keep 'gray' and 'grey' in the same line. 2. Keep a space after the ',' before the strings. */ strarr=p->colormap->array; if ( !strcmp(strarr[0], "hsv")) {ccode=COLOR_HSV; nparams=2;} else if( !strcmp(strarr[0], "sls")) {ccode=COLOR_SLS; nparams=0;} else if( !strcmp(strarr[0], "viridis")){ccode=COLOR_VIRIDIS; nparams=0;} else if( !strcmp(strarr[0], "gray") || !strcmp(strarr[0], "grey")) { ccode=COLOR_GRAY; nparams=0; } else if( !strcmp(strarr[0], "sls-inverse")) { ccode=COLOR_SLS_INVERSE; nparams=0; } else error(EXIT_FAILURE, 0, "'%s' not recognized as a colormap given " "to '--colormap'", strarr[0]); p->colormap->status=ccode; /* Check if the proper number of parameters are given for this color space. Note that the actual colorspace name is the first element in 'monotocolor'. */ if(p->colormap->size!=1 && p->colormap->size != (nparams+1) ) error(EXIT_FAILURE, 0, "%zu parameters given to '--monotocolor' for " "the '%s' color space (which needs %zu)", p->colormap->size-1, strarr[0], nparams); /* Allocate the necessary space for the parameters (when necessary). */ if(nparams>0) { /* If no parameters were given, put the full range. */ if(p->colormap->size==1) { p->colormap->next=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &nparams, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL,NULL,NULL); farray=p->colormap->next->array; switch(p->colormap->status) { case COLOR_HSV: farray[0]=0; farray[1]=360; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at " "%s to fix the problem. The value '%d' is not " "recognized for a color space that needs default " "parameters", __func__, PACKAGE_BUGREPORT, p->colormap->status); } } else { /* Increment the array pointer (temporarily) so we can read the rest of the parameters as float32. Note that we can't use '+=' because it is a 'void *' pointer. We'll have to use 'strarry', because its type is defined. */ p->colormap->size-=1; p->colormap->array = strarr + 1; p->colormap->next=gal_data_copy_to_new_type(p->colormap, GAL_TYPE_FLOAT32); p->colormap->array = strarr; p->colormap->size+=1; /* For a check { size_t i; farray=p->monotocolor->next->array; for(i=0;imonotocolor->next->size;++i) printf("%f\n", farray[i]); exit(1); } */ } } } /* List the acceptable colors with a demo of what they look like (by setting the background color of an "EXAMPLE" string to the desired color following the ANSI escape sequence standard: https://en.wikipedia.org/wiki/ANSI_escape_code */ static void ui_list_colors(struct converttparams *p) { size_t i; int rgbi[3]; float rgbf[3]; /* Print the metadata lightgoldenrodyellow */ printf("# Column 1: Color-ID [counter, u8] Color's numerical identifier.\n"); printf("# Column 2: Color-Name [name, str20] Extended Web color name.\n"); printf("# Column 3: FRAC-R [frac, f32] Fraction of Red.\n"); printf("# Column 4: FRAC-G [frac, f32] Fraction of Green.\n"); printf("# Column 5: FRAC-B [frac, f32] Fraction of Blue.\n"); printf("# Column 6: HEX [hex, str6] Color code in hexadecimal.\n"); printf("# Column 7: EXAMPLE [n/a, str35] Example of color in 24-bit " "terminals.\n"); /* Print each color's information. */ for(i=1;icp.quiet ) { printf("#\n"); printf("# When viewed within a 24-bit or \"true color\" terminal, " "the demonstration ('EXAMPLE') column will show the desired " "color as the background of the text 'EXAMPLE'. If your " "terminal doesn't support 24-bit true color or the ANSI " "escape sequence standard " "(https://en.wikipedia.org/wiki/ANSI_escape_code), the " "last column's color will either be rounded to the " "nearest supported color, or that column may be displayed " "as a long string of numbers and brackets (which are the " "raw source behind the color-coding). On macOS, the default " "terminal emulator (iTerm) doesn't support 24-bit colors, " "so it is recommended to install and use iTerm2 " "(https://iterm2.com: it is free software and available " "in Homebrew). This message can be removed with the " "'--quiet' (or '-q') option.\n"); } /* There is nothing else for the program to do, simply return successfully. */ exit(EXIT_SUCCESS); } /* List the available fonts for the user to select from. Ghostscript command was inspired from https://superuser.com/questions/379384/ghostscript-how-do-i-find-out-what-fonts-are-available*/ static void ui_list_fonts(struct converttparams *p) { char command[]="gs -q -dNODISPLAY -dBATCH " "-c '(*) {cvn ==} 256 string /Font resourceforall' " "| sed -e's|^/||'"; if(system(command)) error(EXIT_FAILURE, 0, "the Ghostscript command (printed after " "this message) to list the available fonts was not " "successful! The Ghostscript command was: %s", command); /* Let the users know about '--showfonts'. */ if(!p->cp.quiet) printf("#\n# NOTICE: with '--showfonts' you can see all the " "fonts in a PDF file. This can help if you aren't " "already familiar with the shapes of each font. You " "can remove this notice with the '--quiet' option\n"); /* Abort the program. */ exit(EXIT_SUCCESS); } /* List the available fonts for the user to select from */ static void ui_show_fonts(struct converttparams *p) { FILE *fp; char *outps, *outpdf, *command; /* Set the PDF and PS file names. */ outpdf = gal_checkset_automatic_output(&p->cp, p->cp.output, "-fonts.pdf"); gal_checkset_writable_remove(outpdf, p->cp.output, 0, p->cp.dontdelete); outps=gal_checkset_automatic_output(&p->cp, outpdf, ".ps"); /* This command was taken from the 'ps2pdfwr' installed script that comes with Ghostscript by default ('ps2pdfwr' is ultimately what 'ps2pdf' calls, after some checks on the PDF version). */ if( asprintf(&command, "gs -P- -dSAFER -q -P- -dNOPAUSE -dBATCH " "-sDEVICE=pdfwrite -sOutputFile=%s %s", outpdf, outps)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); /* Write the contents of the PostScript file. Inspired from: https://superuser.com/questions/379384/ghostscript-how-do-i-find-out-what-fonts-are-available*/ errno=0; fp=fopen(outps, "w"); if(fp==NULL) error(EXIT_FAILURE, errno, "%s", outps); fprintf(fp, "%%!\n"); fprintf(fp, "<< /PageSize [500 80] >> setpagedevice\n"); fprintf(fp, "(*) {dup cvn findfont 20 scalefont setfont\n"); fprintf(fp, "10 50 moveto show\n"); fprintf(fp, "10 10 moveto (ABCDEFGHIJKLMNOPQRSTUVWXYZ) show showpage}\n"); fprintf(fp, "256 string /Font resourceforall\n"); fprintf(fp, "%%%%EOF"); fclose(fp); /* Convert this to PDF. */ if(system(command)) error(EXIT_FAILURE, 0, "the Ghostscript command (printed after " "this message) to list the available fonts was not " "successful! The Ghostscript command was: %s", command); /* Delete the PostScript file. */ errno=0; if(unlink(outps)) error(EXIT_FAILURE, errno, "%s", outps); /* Let the user know that the printed fonts are now available. */ if(!p->cp.quiet) printf("Fonts shown in (one page per font): %s\n", outpdf); /* Cleanup and finish. */ free(outps); free(outpdf); exit(EXIT_SUCCESS); } /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct converttparams *p) { gal_data_t *cond; /* If the user has asked to list colors or fonts,, that is the only thing the program should do. */ if(p->listcolors || p->listfonts || p->showfonts) { if(p->listcolors + p->listfonts + p->showfonts > 1) error(EXIT_FAILURE, 0, "only one of the '--listcolors', " "'--listfonts' or '--showfonts' should be called in " "one command"); if(p->listfonts) ui_list_fonts(p); if(p->showfonts) ui_show_fonts(p); if(p->listcolors) ui_list_colors(p); } /* Read the truncation values into a data structure and see if flux low is indeed smaller than fluxhigh. */ if(p->fluxlowstr) { p->fluxlow=gal_data_copy_string_to_number(p->fluxlowstr); if(p->fluxlow==NULL) error(EXIT_FAILURE, 0, "value to the '--fluxlow' ('-L', %s) " "couldn't be read as a number", p->fluxlowstr); } if(p->fluxhighstr) { p->fluxhigh=gal_data_copy_string_to_number(p->fluxhighstr); if(p->fluxhigh==NULL) error(EXIT_FAILURE, 0, "value to the '--fluxhigh' ('-H', %s) " "couldn't be read as a number", p->fluxhighstr); } if(p->fluxhighstr && p->fluxlowstr) { cond=gal_arithmetic(GAL_ARITHMETIC_OP_GT, 1, GAL_ARITHMETIC_FLAG_NUMOK, p->fluxhigh, p->fluxlow); if( *((unsigned char *)cond->array) == 0 ) error(EXIT_FAILURE, 0, "The value of '--fluxlow' must be less " "than '--fluxhigh'"); gal_data_free(cond); } /* Check the colormap. */ if(p->colormap) ui_colormap_sanity_check(p); /* Check the marks information (the minimum required parameters are the X and Y positions). */ if(p->marksname) { /* If the mark coordinates are given, blend them into one list */ if(p->markcoords) { gal_options_merge_list_of_csv(&p->markcoords); if(gal_list_str_number(p->markcoords)!=2) error(EXIT_FAILURE, 0, "two values should be give to the " "'--markcoords' (or '-r') option, while you have given " "%zu", gal_list_str_number(p->markcoords)); } else error(EXIT_FAILURE, 0, "the '--markcoords' (or '-r') is necessary " "to define the positions of the marks over the output (recall " "that marks are only supported in EPS or PDF formats)"); /* It is mandatory to define a mode (of 'wcs' or 'img). */ if( p->mode ) { if( strcmp(p->mode, "wcs") && strcmp(p->mode, "img") ) error(EXIT_FAILURE, 0, "'%s' is not recognized for the " "'--mode' (or '-O') option. The recognized values " "are 'img' or 'wcs'", p->mode); } else error(EXIT_FAILURE, 0, "the '--mode' (or '-O') is necessary " "to define how the mark coordinates should be interpreted " "(recall that marks are only supported in EPS or PDF " "formats)"); /* Make sure the size column(s) are in one list. */ if(p->marksize) { gal_options_merge_list_of_csv(&p->marksize); if(gal_list_str_number(p->marksize)>2) error(EXIT_FAILURE, 0, "the '--marksize' option takes two " "values (column names or numbers) at most, but you " "have given %zu values", gal_list_str_number(p->marksize)); } } } static void ui_check_options_and_arguments(struct converttparams *p) { /* Reverse the 'inputnames' linked list if it was given (recall that we also accept input from the standard input). Note that the 'hdu' linked list was reversed during option parsing, so we don't need to do it here any more. */ gal_list_str_reverse(&p->inputnames); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static struct change * ui_make_change_struct(char *arg) { char *p=arg; gal_data_t *data; size_t len=0, counter=0; struct change *out=NULL, *last=NULL, *ch; /* First set all the delimiters to '\0' and count the number of characters in the full string. */ while(*p!='\0') { if( isspace(*p) || *p==':' || *p==',' ) *p='\0'; ++p; } len=p-arg; /* Now, go through the string and read everything that remains. */ p=arg; while(pnext=ch; last=ch; } else out=last=ch; /* Put 'data' in the 'from' element, and since this is the last structure, set its next element to NULL. */ last->from=data; last->next=NULL; } else /* Even. */ last->to=data; } } /* { struct change *tmp; for(tmp=out;tmp!=NULL;tmp=tmp->next) printf("%f --> %f\n", tmp->from, tmp->to); } */ return out; } /* Go through the input files and make a linked list of all the channels that exist in them. When this function finishes the list of channels will be filled in the same order as they were read from the inputs. */ static void ui_make_channels_ll(struct converttparams *p) { char *hdu=NULL; gal_data_t *data; size_t dsize=0, dirnum; gal_list_str_t *name, *lines; /* Initialize the counting of channels. */ p->numch=0; /* If any standard input is provided, we want to process that first. Note that since other input arguments are also allowed (as other channels), we'll need to process the standard input independently first, then go onto the possible list of other files.*/ lines=gal_txt_stdin_read(p->cp.stdintimeout); if(lines) { data=gal_txt_image_read(NULL, lines, p->cp.minmapsize, p->cp.quietmmap); gal_list_data_add(&p->chll, data); gal_list_str_free(lines, 1); ++p->numch; } /* Go through the input files and add the channel(s). */ for(name=p->inputnames; name!=NULL; name=name->next) { /* Check if p->numch has not exceeded 4. */ if(p->numch>=4) error(EXIT_FAILURE, 0, "the number of input color channels (not " "necessarily files) has exceeded 4! Note that one file can " "contain more than one color channel (for example a JPEG " "file in RGB has 3 channels)"); /* Make sure this input file exists (if it isn't blank). */ if(strcmp(name->v, "blank")) gal_checkset_check_file(name->v); /* FITS: */ if( gal_fits_file_recognized(name->v) ) { /* Get the HDU value for this channel. */ if(p->globalhdu) hdu=p->globalhdu; else { if(p->hdus) hdu=gal_list_str_pop(&p->hdus); else error(EXIT_FAILURE, 0, "not enough HDUs. Every input FITS " "image needs a HDU (identified by name or number, " "counting from zero). You can use multiple calls to " "the '--hdu' ('-h') option for each input FITS " "image (in the same order as the input FITS files), " "or use '--globalhdu' ('-g') once when the same " "HDU should be used for all of them"); } /* Read in the array and its WCS information. */ data=gal_fits_img_read(name->v, hdu, p->cp.minmapsize, p->cp.quietmmap, "--hdu"); data->wcs=gal_wcs_read(name->v, hdu, p->cp.wcslinearmatrix, 0, 0, &data->nwcs, "--hdu"); data->ndim=gal_dimension_remove_extra(data->ndim, data->dsize, data->wcs); gal_list_data_add(&p->chll, data); /* A FITS file only has one channel. */ ++p->numch; } /* TIFF: */ else if( gal_tiff_name_is_tiff(name->v) ) { /* Get the directory value for this channel. */ if(p->hdus) { hdu=gal_list_str_pop(&p->hdus); dirnum=gal_tiff_dir_string_read(hdu); } else dirnum=0; /* Read the TIFF image into memory. */ data=gal_tiff_read(name->v, dirnum, p->cp.minmapsize, p->cp.quietmmap); p->numch += gal_list_data_number(data); gal_list_data_add(&p->chll, data); } /* JPEG: */ else if ( gal_jpeg_name_is_jpeg(name->v) ) { data=gal_jpeg_read(name->v, p->cp.minmapsize, p->cp.quietmmap); p->numch += gal_list_data_number(data); gal_list_data_add(&p->chll, data); } /* Blank: */ else if(strcmp(name->v, BLANK_CHANNEL_NAME)==0) { gal_list_data_add_alloc(&p->chll, NULL, GAL_TYPE_INVALID, 0, &dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, "blank", NULL, NULL); ++p->numch; } /* EPS: */ else if ( gal_eps_name_is_eps(name->v) ) error(EXIT_FAILURE, 0, "EPS files cannot be used as input. Since " "EPS files are not raster graphics. EPS is only an output " "format"); /* PDF: */ else if ( gal_pdf_name_is_pdf(name->v) ) error(EXIT_FAILURE, 0, "PDF files cannot be used as input. Since " "PDF files are not raster graphics. PDF is only an output " "format"); /* Text: */ else { data=gal_txt_image_read(name->v, NULL, p->cp.minmapsize, p->cp.quietmmap); gal_list_data_add(&p->chll, data); ++p->numch; } } /* If there weren't any channels, abort with an error. */ if(p->numch==0) error(EXIT_FAILURE, 0, "%s", gal_options_stdin_error(p->cp.stdintimeout, 0, "input")); /* Reverse the list of channels into the input order. */ gal_list_data_reverse(&p->chll); } static void ui_prepare_input_channels_check_wcs(struct converttparams *p) { int printwarning=0; float wcsmatch=1.0; gal_data_t *tmp, *coords=NULL; size_t one=1, numwcs=0, numnonblank=0; double *c1, *c2, r1=NAN, r2=NAN, *pixscale=NULL; /* If all the inputs have WCS, check to see if the inputs are aligned and print a warning if they aren't. */ for(tmp=p->chll; tmp!=NULL; tmp=tmp->next) { if(tmp->wcs && tmp->type!=GAL_TYPE_INVALID) ++numwcs; if(tmp->type!=GAL_TYPE_INVALID) ++numnonblank; } if(numwcs==numnonblank) { /* Allocate the coordinate columns. */ gal_list_data_add_alloc(&coords, NULL, GAL_TYPE_FLOAT64, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); gal_list_data_add_alloc(&coords, NULL, GAL_TYPE_FLOAT64, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); /* Go over each image and put its central pixel in the coordinates and do the world-coordinate transformation. Recall that the C coordinates are the inverse order of FITS coordinates and that FITS coordinates count from 1 (not 0).*/ for(tmp=p->chll; tmp!=NULL; tmp=tmp->next) if(tmp->wcs) { /* Fill the coordinate values. */ c1=coords->array; c2=coords->next->array; c1[0] = tmp->dsize[1] / 2 + 1; c2[0] = tmp->dsize[0] / 2 + 1; /* Get the RA/Dec. */ gal_wcs_img_to_world(coords, tmp->wcs, 1); /* If the pixel scale hasn't been calculated yet, do it (we only need it once, should be similar in all). */ if(pixscale==NULL) pixscale=gal_wcs_pixel_scale(tmp->wcs); /* If the reference/first center is not yet defined then write the conversions in it. If it is defined, compare with it with the new dataset and print a warning if necessary. */ if( isnan(r1) ) { r1=c1[0]; r2=c2[0]; } else { /* For a check. printf("check: %g, %g\n", fabs(c1[0]-r1)/pixscale[0], fabs(c2[0]-r2)/pixscale[1]); */ /* See if a warning should be printed. */ if( fabs(c1[0]-r1)/pixscale[0] > wcsmatch || fabs(c2[0]-r2)/pixscale[1] > wcsmatch ) printwarning=1; } } } /* Print the warning message if necessary. */ if(printwarning && p->cp.quiet==0) { error(EXIT_SUCCESS, 0, "WARNING: The WCS information of the input " "FITS images don't match (by more than %g pixels in the " "center), even though the input images have the same number " "of pixels in each dimension. Therefore the color channels " "of the output colored image may not be aligned. If this is " "not a problem, you can suppress this warning with the " "'--quiet' option.\n\n" "A solution to align your images is provided in the " "\"Aligning images with small WCS offsets\" section of " "Gnuastro's manual. Please run the command below to see " "it (you can return to the command-line by pressing 'q'):\n\n" " info gnuastro \"Color channels in same pixel grid\"\n", wcsmatch); } /* Clean up. */ free(pixscale); } /* Read the input(s)/channels. */ static void ui_prepare_input_channels(struct converttparams *p) { struct wcsprm *wcs=NULL; size_t i, ndim=0, *dsize=NULL; gal_data_t *tmp, *blank, *prev; /* Fill in the channels linked list. */ ui_make_channels_ll(p); /* Make sure there are 1 (for grayscale), 3 (for RGB) or 4 (for CMYK) color channels. */ if(p->numch!=1 && p->numch!=3 && p->numch!=4) error(EXIT_FAILURE, 0, "the number of input color channels has to " "be 1 (for non image data, grayscale or only K channel in " "CMYK), 3 (for RGB) and 4 (for CMYK). You have given %zu " "color channels. Note 1: some file formats (for example " "JPEG in RGB mode) can contain more than one color channel, " "if such a file is given all its channels are read, so " "separate them first. Note 2: if your first input channel " "was given through the standard input (piped from another " "program) you can fix this error by giving a larger value " "to the '--stdintimeout' option (currently %ld " "micro-seconds)", p->numch, p->cp.stdintimeout); /* If there are multiple color channels, then ignore the monotocolor option if it is given. But if there is only one, make sure that the 'colormap' option is actually given.*/ if( p->numch==1 ) { if( p->colormap==NULL ) error(EXIT_FAILURE, 0, "no colormap! When there is only one input " "channel, it is necessary to specify a color map. For " "example 'gray', 'hsv', 'viridis' or 'sls'.\n\n" "For more on ConvertType's color mapping, see the " "description under '--colormap' in the Gnuastro book:\n\n" " $ info astconvertt"); } else if( p->numch>1 && p->colormap ) { if(p->colormap->next) gal_data_free(p->colormap->next); gal_data_free(p->colormap); p->colormap=NULL; } /* Go over the channels and make the proper checks/corrections. We won't be checking blank channels here, recall that blank channels had a dimension of zero. */ for(tmp=p->chll; tmp!=NULL; tmp=tmp->next) if(tmp->ndim>0) { /* Set the reference size (to check and also use for the blank channels). */ if(dsize==NULL) { ndim=tmp->ndim; dsize=tmp->dsize; } else { if(tmp->ndim!=ndim) error(EXIT_FAILURE, 0, "All channels must have the same " "number of dimensions, the first input channel had " "%zu dimensions while atleast one other has %zu", ndim, tmp->ndim); for(i=0;idsize[i]) error(EXIT_FAILURE, 0, "The length along each dimension " "of the channels must be the same"); } /* Incase there is WCS information, also keep a pointer to the first WCS information encountered. */ if(wcs==NULL && tmp->wcs) wcs=tmp->wcs; } /* Make sure the images are all aligned to the same grid. */ ui_prepare_input_channels_check_wcs(p); /* If ndim is still NULL, then there were no non-blank inputs, so print an error. */ if(dsize==NULL) error(EXIT_FAILURE, 0, "all the input(s) are of type blank"); /* Now, fill in the blank channels with zero valued arrays. */ prev=NULL; for(tmp=p->chll; tmp!=NULL; tmp=tmp->next) { /* If this is a blank structure, then set it to a zero valued array. */ if(tmp->ndim==0) { /* Make the blank data structure. */ blank=gal_data_alloc(NULL, GAL_TYPE_UINT8, ndim, dsize, wcs, 1, p->cp.minmapsize, p->cp.quietmmap, "blank channel", NULL, NULL); /* We will use the status value of the data structuer to mark it as one that was originally blank. */ blank->status=1; /* If a previous node pointed to this old blank structure, then correct it. */ if(prev) prev->next=blank; else p->chll=blank; /* Set the next pointer of this one to same pointer that the old blank pointer pointed to. */ blank->next=tmp->next; /* Free the old data structure and put this one in its place. */ gal_data_free(tmp); tmp=blank; } /* This is the final (to be used) data structure, so keep its pointer in case the next one is blank and this structure's 'next' element must be corrected. */ prev=tmp; } } /* We know cp->output is a known suffix, we just don't know if it has a '.' before it or not. If it doesn't, one will be added to it and the output name will be set using the automatic output function. */ void ui_add_dot_use_automatic_output(struct converttparams *p) { gal_list_str_t *stll; char *tmp, *firstname="converttype.txt", *suffix=p->cp.output; /* Find the first non-blank file name in the input(s). */ for(stll=p->inputnames; stll!=NULL; stll=stll->next) if(strcmp(stll->v, BLANK_CHANNEL_NAME)) { firstname=stll->v; break; } /* If the suffix does not start with a '.', put one there. */ if(suffix[0]!='.') { if( asprintf(&tmp, ".%s", suffix)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); free(suffix); suffix=tmp; } /* Set the automatic output and make sure we have write access. */ p->cp.output=gal_checkset_automatic_output(&p->cp, firstname, suffix); } /* Set output name, not that for ConvertType, the output option value is mandatory (in 'args.h'). So by the time the program reaches here, we know it exists. */ static void ui_set_output(struct converttparams *p) { struct gal_options_common_params *cp=&p->cp; /* FITS */ if(gal_fits_name_is_fits(cp->output)) { p->outformat=OUT_FORMAT_FITS; if( gal_fits_suffix_is_fits(cp->output) ) ui_add_dot_use_automatic_output(p); } /* JPEG */ else if(gal_jpeg_name_is_jpeg(cp->output)) { /* If marks are necessary, then we need to use Ghostscript to put the marks over the image. */ if(p->marksname) { p->outformat=OUT_FORMAT_PDF; if(!p->cp.quiet) error(EXIT_SUCCESS, 0, "WARNING: output format is JPEG (a " "raster graphics format), but you have requested " "vector graphics marks (which are native to formats " "like PDF or EPS). The marks will therefore become " "pixelated. If the pixelation over the marks is too " "strong (the quality is too low!), you need to " "increase the resolution. You can do this by " "increasing the centimeter-width of the output by " "giving a larger number to '--widthincm' (or '-w'; " "currently it is %g cm). Just don't increase it too " "much, otherwise your output file size will become " "very large (in bytes). Vector formats are optimal " "for marks (PDF or EPS) and will become much smaller " "(in bytes) while having infinite resolution. Also, " "Ghostscript, and its 'jpeg' output device will be " "used, in case you don't have Ghostscript or this " "device isn't activated, the program will crash. " "This warning can be suppressed with '--quiet' " "(or '-q')", p->widthincm); } else { /* Small sanity checks. */ if(p->quality == GAL_BLANK_UINT8) error(EXIT_FAILURE, 0, "the '--quality' ('-u') option is " "necessary for jpeg outputs, but it has not been given"); if(p->quality > 100) error(EXIT_FAILURE, 0, "'%u' is larger than 100. The value to " "the '--quality' ('-u') option must be between 1 and 100 " "(inclusive)", p->quality); /* Preparations. */ p->outformat=OUT_FORMAT_JPEG; } if( gal_jpeg_suffix_is_jpeg(cp->output) ) ui_add_dot_use_automatic_output(p); } /* TIFF */ else if( gal_tiff_name_is_tiff(cp->output) ) { p->outformat=OUT_FORMAT_TIFF; if( gal_tiff_suffix_is_tiff(cp->output) ) ui_add_dot_use_automatic_output(p); } /* EPS */ else if(gal_eps_name_is_eps(cp->output)) { if(p->borderwidth==0 && p->widthincm==0) error(EXIT_FAILURE, 0, "at least one of '--widthincm' ('-u'), or " "'--borderwidth ('-b') options are necessary for an EPS " "output"); p->outformat=OUT_FORMAT_EPS; if( gal_eps_suffix_is_eps(cp->output) ) ui_add_dot_use_automatic_output(p); } /* PDF */ else if(gal_pdf_name_is_pdf(cp->output)) { if(p->borderwidth==0 && p->widthincm==0) error(EXIT_FAILURE, 0, "at least one of '--widthincm' ('-u'), or " "'--borderwidth ('-b') options are necessary for a PDF " "output"); p->outformat=OUT_FORMAT_PDF; if( gal_pdf_suffix_is_pdf(cp->output) ) ui_add_dot_use_automatic_output(p); } /* Default: plain text. */ else { p->outformat=OUT_FORMAT_TXT; /* If the given value is 'stdout', then set p->cp.output to NULL, so the result will be printed to the standard output. */ if( !strcmp(p->cp.output, "stdout") ) { free(p->cp.output); p->cp.output=NULL; } else { /* Plain text files don't have any unique set of suffixes. So, here, we will just adopt two of the most common ones: 'txt' or 'dat'. If the output is just one of these two suffixes, then we will use automatic output to generate the full name, otherwise, we'll just take the user's given value as the filename. */ if( !strcmp(cp->output, "txt") || !strcmp(cp->output, ".txt") || !strcmp(cp->output, "dat") || !strcmp(cp->output, ".dat") ) ui_add_dot_use_automatic_output(p); /* If output type is not an image, there should only be one color channel: */ if(p->numch>1) error(EXIT_FAILURE, 0, "text output ('--output=%s') can only " "be completed with one input color channel. You have " "given %zu. Note that some formats (for example JPEG) " "can have more than one color channel in each file. " "You can first convert the file to FITS, then convert " "the desired channel to text by specifying the HDU", cp->output, p->numch); } } /* Check if the output already exists and remove it if allowed. */ gal_checkset_writable_remove(cp->output, p->inputnames ? p->inputnames->v : NULL, 0, cp->dontdelete); } /***********************************************************************/ /**************** Marks for EPS or PDF outputs ********************/ /***********************************************************************/ void ui_marks_read_raw(struct converttparams *p, gal_data_t **coord1, gal_data_t **coord2, gal_data_t **size1, gal_data_t **size2, gal_data_t **linewidth, gal_data_t **color, gal_data_t **shape, gal_data_t **rotate, gal_data_t **text, gal_data_t **font, gal_data_t **fontsize) { size_t colnum=0; gal_list_str_t *cols=NULL; gal_data_t *table, *latest; /* Set the requested columns. */ gal_list_str_add(&cols, p->markcoords->v, 1); ++colnum; gal_list_str_add(&cols, p->markcoords->next->v,1); ++colnum; if(p->marksize) { gal_list_str_add(&cols, p->marksize->v, 1); ++colnum; } if(p->marksize && p->marksize->next) { gal_list_str_add(&cols, p->marksize->next->v, 1); ++colnum; } if(p->marklinewidth) { gal_list_str_add(&cols, p->marklinewidth, 1); ++colnum; } if(p->markcolor) { gal_list_str_add(&cols, p->markcolor, 1); ++colnum; } if(p->markshape) { gal_list_str_add(&cols, p->markshape, 1); ++colnum; } if(p->markrotate) { gal_list_str_add(&cols, p->markrotate, 1); ++colnum; } if(p->marktext) { gal_list_str_add(&cols, p->marktext, 1); ++colnum; } if(p->markfont) { gal_list_str_add(&cols, p->markfont, 1); ++colnum; } if(p->markfontsize) { gal_list_str_add(&cols, p->markfontsize, 1); ++colnum; } /* Put the columns in the same order defined above (recall that its a last-in-first-out list). */ gal_list_str_reverse(&cols); /* Read the table */ table=gal_table_read(p->marksname, p->markshdu, NULL, cols, p->cp.searchin, p->cp.ignorecase, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap, NULL, "--markshdu"); /* Make sure that we have only one column for each entry (it may happen that a table has two columns with the same name!). */ if(gal_list_data_number(table)!=colnum) error(EXIT_FAILURE, 0, "%s: more than one column was found for " "one of your '--mark*' columns. This usually happens when " "more than one column has the same name", gal_fits_name_save_as_string(p->marksname, p->markshdu)); /* Put each of the columns in their proper pointer. IMPORTANT: KEEP THE ORDER THE SAME AS THE 'cols' DEFINITION.*/ latest=*coord1=table; latest=*coord2=latest->next; if(p->marksize) { latest=*size1=latest->next; if(p->marksize->next) latest=*size2=latest->next; } if(p->marklinewidth) latest=*linewidth=latest->next; if(p->markcolor) latest=*color=latest->next; if(p->markshape) latest=*shape=latest->next; if(p->markrotate) latest=*rotate=latest->next; if(p->marktext) latest=*text=latest->next; if(p->markfont) latest=*font=latest->next; if(p->markfontsize) latest=*fontsize=latest->next; /* Now that they are read, un-list each column sot they can be treated independently (we don't want their 'next' pointer to interfere with future steps). */ (*coord1)->next=(*coord2)->next=NULL; if(p->marktext) (*text)->next=NULL; if(p->markfont) (*font)->next=NULL; if(p->marksize) (*size1)->next=NULL; if(p->markcolor) (*color)->next=NULL; if(p->markshape) (*shape)->next=NULL; if(p->markrotate) (*rotate)->next=NULL; if(p->markfontsize) (*fontsize)->next=NULL; if(p->marklinewidth) (*linewidth)->next=NULL; if(p->marksize && p->marksize->next) (*size2)->next=NULL; } /* Error message for cases that WCS mode has been requested by the inputs don't have WCS. */ static void ui_marks_error_no_wcs(void) { error(EXIT_FAILURE, 0, "none of the input channel(s) have " "WCS while you had defined your coordinates and sizes " "to be in WCS mode (with '--mode=wcs'). If your " "coordinates and sizes are in image coordinates " "(in units of pixels), please use '--mode=img'"); } static void ui_marks_read_coords(struct converttparams *p, gal_data_t **coord1, gal_data_t **coord2) { int wcsfound=0; gal_data_t *c1=*coord1, *c2=*coord2, *tmp; /* If the coordinates are in WCS mode, convert them. */ if( !strcmp(p->mode, "wcs") ) { /* Find the first channel with WCS and use it to convert the coordinates to pixel coordinates. */ for(tmp=p->chll; tmp!=NULL; tmp=tmp->next) if(tmp->wcs) { /* The coordinates need to have 64-bit floating point type for the WCS conversion. */ c1=gal_data_copy_to_new_type_free(c1, GAL_TYPE_FLOAT64); c2=gal_data_copy_to_new_type_free(c2, GAL_TYPE_FLOAT64); /* Set the second one as the 'next' of the first and do the conversion. */ c1->next=c2; gal_wcs_world_to_img(c1, tmp->wcs, 1); wcsfound=1; c1->next=NULL; break; } /* If no WCS could be found, abort. */ if(wcsfound==0) ui_marks_error_no_wcs(); } /* The columns should have specific names. */ if(c1->name) free(c1->name); if(c2->name) free(c2->name); gal_checkset_allocate_copy(GAL_EPS_MARK_COLNAME_XPIX, &c1->name); gal_checkset_allocate_copy(GAL_EPS_MARK_COLNAME_YPIX, &c2->name); /* The columns should have specific types. */ *coord1=gal_data_copy_to_new_type_free(c1, GAL_TYPE_FLOAT32); *coord2=gal_data_copy_to_new_type_free(c2, GAL_TYPE_FLOAT32); } /* In WCS-mode, the user has given sizes in WCS units (usually degrees). We need to convert them to image coordinates for the EPS library. */ static void ui_marks_size_to_image(struct converttparams *p, gal_data_t *size1, gal_data_t *size2, gal_data_t *shape) { uint8_t *u; float *f, *ff; gal_data_t *tmp; double *ps=NULL; /* Multiplication factor based on size. */ double m = ( p->sizeinarcsec ? 3600 : (p->sizeinarcmin ? 60 : 1.0 ) ); /* If both arrays to convert are NULL, then don't bother with the rest of this function. */ if(size1==NULL && size2==NULL) return; /* Find the first channel with WCS and use it to convert the coordinates to pixel coordinates. */ for(tmp=p->chll; tmp!=NULL; tmp=tmp->next) if(tmp->wcs) ps=gal_wcs_pixel_scale(tmp->wcs); /* If no WCS could be found, print an error. */ if(ps==NULL) ui_marks_error_no_wcs(); /* Use the first dimension's pixel scale for 'size1', and second dimension's pixel scale for 'size2'. */ if(size1) { ff=(f=size1->array)+size1->size; do *f /= m*ps[0]; while(++farray; ff=(f=size2->array)+size1->size; do if(*u++!=GAL_EPS_MARK_SHAPE_ELLIPSE) *f /= m*ps[1]; while(++ftype==GAL_TYPE_STRING) { /* Allocate the output dataset. */ out=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, in->dsize, NULL, 0, in->minmapsize, in->quietmmap, NULL, NULL, NULL); /* Go over the array and convert the names to codes. If the name is not correct the functions will abort with an informative error.*/ u=out->array; strarr=in->array; switch(shape1_color2) { case 1: /* Shape */ for(i=0;isize;++i) u[i]=gal_eps_shape_name_to_id(strarr[i]); name="SHAPE"; break; case 2: /* Color */ for(i=0;isize;++i) u[i]=gal_color_name_to_id(strarr[i]); name="COLOR"; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to find and fix the problem. The operation code '%d' " "isn't recognized", __func__, PACKAGE_BUGREPORT, shape1_color2); } /* Clean the input column. */ gal_data_free(in); } else { /* Set the constants. */ name = shape1_color2==1 ? "SHAPE" : "COLOR"; modestr = shape1_color2==1 ? "shape" : "color"; n=shape1_color2==1 ? GAL_EPS_MARK_SHAPE_NUMBER : GAL_COLOR_NUMBER; /* Convert the type and do a sanity check. */ out=gal_data_copy_to_new_type_free(in, GAL_TYPE_UINT8); u=out->array; for(i=0;isize;++i) { if( u[i]==0 || u[i]>n ) error(EXIT_FAILURE, 0, "the %s numerical identifier '%u' " "(in row %zu) is not recognized! The largest " "numerical identifier for %ss is %u", modestr, u[i], i, modestr, n); } /* Set the dataset name. */ } /* Set the specific name of the output. */ if(out->name) free(out->name); gal_checkset_allocate_copy(name, &out->name); /* Return the output dataset. */ return out; } /* All numbered columns should have a float32 type with a specific name. */ static gal_data_t * ui_marks_read_fixedtype_col(struct converttparams *p, gal_data_t *in, uint8_t type, char *name, int onlypositive, char *colname) { float *f; size_t i; gal_data_t *out=gal_data_copy_to_new_type_free(in, type); /* Small sanity check. */ if(type!=GAL_TYPE_FLOAT32 && type!=GAL_TYPE_STRING) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to fix the problem. The input's type should either be " "float32 or string, but it is '%s'", __func__, PACKAGE_BUGREPORT, gal_type_name(type, 1)); /* If it is important that this column is positive, do the check. */ if(onlypositive) { /* Small sanity check. */ if(type!=GAL_TYPE_FLOAT32) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to fix the problem. When 'onlypositive' is set, the " "type should be float32, but it is '%s'", __func__, PACKAGE_BUGREPORT, gal_type_name(type, 1)); /* Make sure all the elements are positive. */ f=out->array; for(i=0;isize;++i) if(f[i]<0.0) error(EXIT_FAILURE, 0, "%s: column '%s', row %zu has a " "negative value (%g)! This column's values should " "be positive", gal_fits_name_save_as_string(p->marksname, p->markshdu), colname, i+1, f[i]); } /* Free the possibly existing current name. */ if(out->name) free(out->name); gal_checkset_allocate_copy(name, &out->name); /* Return the proper dataset. */ return out; } void ui_marks_read(struct converttparams *p) { size_t i; float *s2arr; uint8_t *sharr; gal_data_t *font=NULL, *fontsize=NULL; gal_data_t *size2=NULL, *rotate=NULL, *text=NULL; gal_data_t *color=NULL, *shape=NULL, *lwidth=NULL; gal_data_t *coord1=NULL, *coord2=NULL, *size1=NULL; /* Read the columns. */ ui_marks_read_raw(p, &coord1, &coord2, &size1, &size2, &lwidth, &color, &shape, &rotate, &text, &font, &fontsize); /* Prepare the coordinates. */ ui_marks_read_coords(p, &coord1, &coord2); /* Prepare the shape and color. */ if(shape) shape=ui_marks_read_named_cols(shape, 1); if(color) color=ui_marks_read_named_cols(color, 2); /* Set the precision to print floating point numbers as strings (if the user has provided one. */ if(p->marktextprecision>0) text->disp_precision=p->marktextprecision; /* Prepare the size (the EPS library needs each dataset in the input list for marks to have specific names and specific formats). */ if(size1) size1 = ui_marks_read_fixedtype_col(p, size1, GAL_TYPE_FLOAT32, GAL_EPS_MARK_COLNAME_SIZE1, 1, p->marksize->v); if(size2) size2 = ui_marks_read_fixedtype_col(p, size2, GAL_TYPE_FLOAT32, GAL_EPS_MARK_COLNAME_SIZE2, 1, p->marksize->next->v); if(rotate) rotate = ui_marks_read_fixedtype_col(p, rotate, GAL_TYPE_FLOAT32, GAL_EPS_MARK_COLNAME_ROTATE, 0, p->markrotate); if(lwidth) lwidth = ui_marks_read_fixedtype_col(p, lwidth, GAL_TYPE_FLOAT32, GAL_EPS_MARK_COLNAME_LINEWIDTH, 1, p->marklinewidth); if(text) text = ui_marks_read_fixedtype_col(p, text, GAL_TYPE_STRING, GAL_EPS_MARK_COLNAME_TEXT, 0, p->marktext); if(font) font = ui_marks_read_fixedtype_col(p, font, GAL_TYPE_STRING, GAL_EPS_MARK_COLNAME_FONT, 0, p->markfont); if(fontsize) fontsize = ui_marks_read_fixedtype_col(p, fontsize, GAL_TYPE_FLOAT32, GAL_EPS_MARK_COLNAME_FONTSIZE, 1, p->markfontsize); /* Convert the sizes to pixel if necessary. */ if( !strcmp(p->mode,"wcs") && p->sizeinpix==0 ) ui_marks_size_to_image(p, size1, size2, shape); /* Put the columns in the list to pass to the EPS library. */ gal_list_data_add(&p->marks, coord1); gal_list_data_add(&p->marks, coord2); if(text) gal_list_data_add(&p->marks, text); if(font) gal_list_data_add(&p->marks, font); if(shape) gal_list_data_add(&p->marks, shape); if(color) gal_list_data_add(&p->marks, color); if(size1) gal_list_data_add(&p->marks, size1); if(size2) gal_list_data_add(&p->marks, size2); if(lwidth) gal_list_data_add(&p->marks, lwidth); if(rotate) gal_list_data_add(&p->marks, rotate); if(fontsize) gal_list_data_add(&p->marks, fontsize); /* Some sanity checks. */ if(shape && size2) { sharr=shape->array; s2arr=size2->array; for(i=0;imarks->size;++i) if( sharr[i]==GAL_EPS_MARK_SHAPE_ELLIPSE && ( s2arr[i]<=0 || s2arr[i]>1 ) ) error(EXIT_FAILURE, 0, "%g is not a valid 'size2' column " "for an ellipse shape (from row number %zu of the " "marks table). For an ellipse, the 'size2' column is " "the axis ratio, so it should always be larger than " "0 and smaller or equal to 1", s2arr[i], i+1); } /* For a check: { gal_data_t *tmp; for(tmp=p->marks;tmp!=NULL;tmp=tmp->next) printf("%s: %s\n", __func__, tmp->name); exit(0); } */ } /***********************************************************************/ /**************** High-level preparations ********************/ /***********************************************************************/ void ui_preparations(struct converttparams *p) { /* Convert the change string into the proper list. */ if(p->changestr) p->change=ui_make_change_struct(p->changestr); /* Read the input channels. */ ui_prepare_input_channels(p); /* Read the marks info. */ if(p->marksname) ui_marks_read(p); /* Set the output name. */ ui_set_output(p); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct converttparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Prepare all the options as FITS keywords to write in output later. */ gal_options_as_fits_keywords(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct converttparams *p) { if(p->colormap) { if(p->colormap->next) gal_data_free(p->colormap->next); gal_data_free(p->colormap); } gal_data_free(p->fluxlow); gal_data_free(p->fluxhigh); gal_list_str_free(p->hdus, 1); if(p->cp.output) free(p->cp.output); gal_list_str_free(p->inputnames, 0); } gnuastro-0.22/bin/convertt/convertt.c0000644000175000017500000002472714551337306013427 /********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "color.h" /**************************************************************/ /************** Modifying pixel values ***************/ /**************************************************************/ static void convertt_change(struct converttparams *p) { gal_data_t *channel, *cond; struct change *change, *tmp; unsigned char flags = GAL_ARITHMETIC_FLAGS_BASIC; /* In case there is no value to convert. */ if(p->change==NULL) return; /* Do the conversion on all channels for each change. */ for(change=p->change; change!=NULL; change=change->next) for(channel=p->chll; channel!=NULL; channel=channel->next) { /* Make a condition array: all pixels with a value equal to 'change->from' will be set as 1 in this array. */ cond=gal_arithmetic(GAL_ARITHMETIC_OP_EQ, 1, GAL_ARITHMETIC_FLAG_NUMOK, channel, change->from); /* Now, use the condition array to set the proper values. */ channel=gal_arithmetic(GAL_ARITHMETIC_OP_WHERE, 1, flags, channel, cond, change->to); /* Clean up, since we set the free flag, all extra arrays have been freed.*/ gal_data_free(change->from); } /* Free the channels linked list. */ change=p->change; while(change!=NULL) { tmp=change->next; free(change); change=tmp; } } static void convertt_trunc_function(int operator, gal_data_t *data, gal_data_t *value) { gal_data_t *cond, *out; /* Note that we need the fluxlow and fluxhigh values later. */ unsigned char flags = ( GAL_ARITHMETIC_FLAG_NUMOK | GAL_ARITHMETIC_FLAG_INPLACE ); /* Make a condition array: all pixels with a value equal to 'change->from' will be set as 1 in this array. */ cond=gal_arithmetic(operator, 1, GAL_ARITHMETIC_FLAG_NUMOK, data, value); /* Now, use the condition array to set the proper values. */ out=gal_arithmetic(GAL_ARITHMETIC_OP_WHERE, 1, flags, data, cond, value); /* A small sanity check. The process must be in-place so the original data structure must not have changed. */ if(out!=data) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to solve the " "problem. The 'out' and 'data' pointers are the same", __func__, PACKAGE_BUGREPORT); /* Clean up. */ gal_data_free(cond); } static void convertt_truncate(struct converttparams *p) { gal_data_t *channel; /* Return if no truncation is desired. */ if(p->fluxhigh==NULL && p->fluxlow==NULL) return; /* Do the truncation for each channel. */ for(channel=p->chll; channel!=NULL; channel=channel->next) { if(p->fluxlow) convertt_trunc_function(GAL_ARITHMETIC_OP_LT, channel, p->fluxlow); if(p->fluxhigh) convertt_trunc_function(GAL_ARITHMETIC_OP_GT, channel, p->fluxhigh); } } /**************************************************************/ /************** convert to 8 bit ***************/ /**************************************************************/ void convertt_scale_to_uchar(struct converttparams *p) { size_t size=p->chll->size; unsigned char *u, *fu, maxbyte=p->maxbyte; gal_data_t *channel, *prev, *copied, *mind, *maxd; float *f, *ff, m, tmin, tmax, min=FLT_MAX, max=-FLT_MAX; /* Convert everything to single precision floating point type and find the minimum and maximum values of all the channels in the process. */ prev=NULL; for(channel=p->chll; channel!=NULL; channel=channel->next) { /* Only for channels that weren't originally blank. */ if(channel->status==0) { /* If the type isn't float, then convert it to float. */ if(channel->type!=GAL_TYPE_FLOAT32) { /* Change the type to float. */ copied=gal_data_copy_to_new_type(channel, GAL_TYPE_FLOAT32); /* Correct the pointers. */ copied->next=channel->next; if(prev) prev->next=copied; else p->chll=copied; /* Clean the old data structure and put in the new one */ gal_data_free(channel); channel=copied; } /* Calculate the minimum and maximum. */ mind = gal_arithmetic(GAL_ARITHMETIC_OP_MINVAL, 1, 0, channel); maxd = gal_arithmetic(GAL_ARITHMETIC_OP_MAXVAL, 1, 0, channel); tmin = *((float *)(mind->array)); tmax = *((float *)(maxd->array)); gal_data_free(mind); gal_data_free(maxd); /* See the over-all minimum and maximum values. */ if(tminmax) max=tmax; } /* Set the prev pointer. */ prev=channel; } /* Change the minimum and maximum if desired, Note that this is only non-redundant when fluxhigh and fluxlow are more or less than the maximum and minimum values in the image.*/ if(p->fluxlow || p->fluxhigh) { if(p->forcemin) { /* Convert the fluxlow value to float and put it in min. */ copied=gal_data_copy_to_new_type(p->fluxlow, GAL_TYPE_FLOAT32); min = *((float *)(copied->array)); gal_data_free(copied); } if(p->forcemax) { /* Convert the fluxhigh value to float and put it in min. */ copied=gal_data_copy_to_new_type(p->fluxhigh, GAL_TYPE_FLOAT32); max = *((float *)(copied->array)); gal_data_free(copied); } } m=(float)maxbyte/(max-min); /* Convert all the non-blank channels to unsigned char. */ prev=NULL; for(channel=p->chll; channel!=NULL; channel=channel->next) { if(channel->status==0) { /* Convert the values into a range between '0' and 'maxbyte'. */ ff=(f=channel->array)+size; if(p->invert) { do *f = isnan(*f) ? maxbyte : maxbyte-(*f-min)*m; while(++fnext=channel->next; if(prev) prev->next=copied; else p->chll=copied; /* Clean the old data structure and put in the new one */ gal_data_free(channel); channel=copied; } else { /* In CMYK, a blank channel should have a maximum value. */ if(p->numch==4) {fu=(u=channel->array)+size; do *u=UINT8_MAX; while(++uchangeaftertrunc) { convertt_truncate(p); convertt_change(p); } else { convertt_change(p); convertt_truncate(p); } /* Save the outputs: */ switch(p->outformat) { /* FITS: a FITS file can have many extensions (channels). */ case OUT_FORMAT_FITS: if(p->numch==3 && p->rgbtohsv) color_rgb_to_hsv(p); gal_fits_key_write(p->cp.ckeys, p->cp.output, "0", "NONE", 1, 1); for(channel=p->chll; channel!=NULL; channel=channel->next) gal_fits_img_write(channel, p->cp.output, NULL, 0); break; /* Plain text: only one channel is acceptable. */ case OUT_FORMAT_TXT: gal_checkset_writable_remove(p->cp.output, p->inputnames->v, 0, p->cp.dontdelete); gal_txt_write(p->chll, NULL, NULL, p->cp.output, 0, 1, 0); break; /* JPEG. */ case OUT_FORMAT_JPEG: if(p->colormap) color_map_prepare(p); else convertt_scale_to_uchar(p); gal_jpeg_write(p->chll, p->cp.output, p->quality, p->widthincm); break; /* EPS. */ case OUT_FORMAT_EPS: if(p->colormap) color_map_prepare(p); else convertt_scale_to_uchar(p); gal_eps_write(p->chll, p->cp.output, p->widthincm, p->borderwidth, p->bordercolor, p->hex, p->forcemin || p->forcemax, 0, p->marks); break; /* PDF. */ case OUT_FORMAT_PDF: if(p->colormap) color_map_prepare(p); else convertt_scale_to_uchar(p); gal_pdf_write(p->chll, p->cp.output, p->widthincm, p->borderwidth, p->bordercolor, p->forcemin || p->forcemax, p->marks); break; /* TIFF. */ case OUT_FORMAT_TIFF: if(p->colormap) color_map_prepare(p); else convertt_scale_to_uchar(p); gal_tiff_write(p->chll, p->cp.output); break; /* Not recognized. */ default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us so we can find " "the problem and fix it The internal type of the output is " "not recognized. ", __func__); } } gnuastro-0.22/bin/convertt/color.c0000644000175000017500000013047214551337306012674 /********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include "main.h" #include "convertt.h" /***********************************************************************/ /************** From mono-channel *****************/ /***********************************************************************/ static void color_min_max(struct converttparams *p, float *value, int min0max1) { gal_data_t *tmp; gal_data_t *given = min0max1 ? p->fluxhigh : p->fluxlow; uint8_t fixedlimit = min0max1 ? p->forcemax : p->forcemin; /* Find the value to write. */ if(fixedlimit && given) tmp=gal_data_copy_to_new_type(given, GAL_TYPE_FLOAT32); else { tmp = ( min0max1 ? gal_statistics_maximum(p->chll) : gal_statistics_minimum(p->chll) ); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); } *value=((float *)(tmp->array))[0]; /* Clean up. */ gal_data_free(tmp); } /* This algorithm is a translation of the primary algorithm in this page: https://stackoverflow.com/questions/3018313/algorithm-to-convert-rgb-to-hsv-and-hsv-to-rgb-in-range-0-255-for-both */ void color_from_mono_hsv(struct converttparams *p) { int i; gal_data_t *R, *G, *B, *channel; float *r, *g, *b, *f, *fp, min, max; float *params=p->colormap->next->array; float h, s=1, v, hh, ff, P, q, t, h_min, h_max; /* Set the input values. */ h_min = params[0]; h_max = params[1]; /* Sanity checks. */ if(h_min>h_max) error(EXIT_FAILURE, 0, "the minimum angle value (%g) is not smaller " "than the maximum (%f)", h_min, h_max); if(h_min<0) error(EXIT_FAILURE, 0, "the minimum angle (%g) must be larger than 0", h_min); if(h_max>360) error(EXIT_FAILURE, 0, "the maximum angle (%g) must be smaller than " "360", h_max); /* Set the range of values and convert the dataset to float. */ color_min_max(p, &min, 0); color_min_max(p, &max, 1); channel=gal_data_copy_to_new_type_free(p->chll, GAL_TYPE_FLOAT32); /* Allocate the three datasets to keep the RGB colors. */ R=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, channel->ndim, channel->dsize, channel->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, "RED", NULL, "Red color channel."); G=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, channel->ndim, channel->dsize, channel->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, "GREEN", NULL, "Green color channel."); B=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, channel->ndim, channel->dsize, channel->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, "BLUE", NULL, "Blue color channel."); /* Start the conversion. Note that the "Choroma" ('C') is fixed by our definition. */ r=R->array; g=G->array; b=B->array; fp=(f=channel->array)+channel->size; do { if(isnan(*f)) *r=*g=*b=0.0; else { /* Shift all the values to start from the desired angle. We'll set the "value" (brightness: 0: dark, 1: bright) using the pixel value, then scale it to fix the color. */ v=(*f-min) / (max-min); h = v * (h_max-h_min) + h_min; if(h==360) h=0; /* Prepare the intermediate values. */ hh=h/60; i = (int)hh; ff = hh - i; P = v * ( 1.0 - s ); q = v * ( 1.0 - (s * ff) ); t = v * ( 1.0 - (s * (1.0 - ff) )); /* Based on the integer phase, set the r,g,b values. */ switch(i) { case 0: *r=v; *g=t; *b=P; break; case 1: *r=q; *g=v; *b=P; break; case 2: *r=P; *g=v; *b=t; break; case 3: *r=P; *g=q; *b=v; break; case 4: *r=t; *g=P; *b=v; break; case 5: default: *r=v; *g=P; *b=q; break; } } /* Convert the RGB values to 0 and 255. With the steps above, they are between 0 and 1. */ *r++ *= 255; *g++ *= 255; *b++ *= 255; } while(++fchll=R; p->chll->next=G; p->chll->next->next=B; /* Clean up. */ gal_data_free(channel); } /* From SAO DS9: */ void color_from_mono_sls(struct converttparams *p) { gal_data_t *R, *G, *B, *channel; float *r, *g, *b, *f, *fp, min, max; /* Set the range, then convert the dataset to floating point. */ color_min_max(p, &min, 0); color_min_max(p, &max, 1); channel=gal_data_copy_to_new_type_free(p->chll, GAL_TYPE_FLOAT32); /* Allocate the three datasets to keep the RGB colors. */ R=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, channel->ndim, channel->dsize, channel->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, "RED", NULL, "Red color channel."); G=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, channel->ndim, channel->dsize, channel->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, "GREEN", NULL, "Green color channel."); B=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, channel->ndim, channel->dsize, channel->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, "BLUE", NULL, "Blue color channel."); /* Start the conversion. Note that the "Choroma" ('C') is fixed by our definition. */ r=R->array; g=G->array; b=B->array; fp=(f=channel->array)+channel->size; do { if(isnan(*f)) *r=*g=*b=0.0; else switch( p->colormap->status==COLOR_SLS ? (int)((*f-min)/(max-min)*200) : 200 - (int)((*f-min)/(max-min)*200) ) { case 0: *r=0.000000; *g=0.000000; *b=0.000000; break; case 1: *r=0.043442; *g=0.000000; *b=0.052883; break; case 2: *r=0.086883; *g=0.000000; *b=0.105767; break; case 3: *r=0.130325; *g=0.000000; *b=0.158650; break; case 4: *r=0.173767; *g=0.000000; *b=0.211533; break; case 5: *r=0.217208; *g=0.000000; *b=0.264417; break; case 6: *r=0.260650; *g=0.000000; *b=0.317300; break; case 7: *r=0.304092; *g=0.000000; *b=0.370183; break; case 8: *r=0.347533; *g=0.000000; *b=0.423067; break; case 9: *r=0.390975; *g=0.000000; *b=0.475950; break; case 10: *r=0.434417; *g=0.000000; *b=0.528833; break; case 11: *r=0.477858; *g=0.000000; *b=0.581717; break; case 12: *r=0.521300; *g=0.000000; *b=0.634600; break; case 13: *r=0.506742; *g=0.000000; *b=0.640217; break; case 14: *r=0.492183; *g=0.000000; *b=0.645833; break; case 15: *r=0.477625; *g=0.000000; *b=0.651450; break; case 16: *r=0.463067; *g=0.000000; *b=0.657067; break; case 17: *r=0.448508; *g=0.000000; *b=0.662683; break; case 18: *r=0.433950; *g=0.000000; *b=0.668300; break; case 19: *r=0.419392; *g=0.000000; *b=0.673917; break; case 20: *r=0.404833; *g=0.000000; *b=0.679533; break; case 21: *r=0.390275; *g=0.000000; *b=0.685150; break; case 22: *r=0.375717; *g=0.000000; *b=0.690767; break; case 23: *r=0.361158; *g=0.000000; *b=0.696383; break; case 24: *r=0.346600; *g=0.000000; *b=0.702000; break; case 25: *r=0.317717; *g=0.000000; *b=0.712192; break; case 26: *r=0.288833; *g=0.000000; *b=0.722383; break; case 27: *r=0.259950; *g=0.000000; *b=0.732575; break; case 28: *r=0.231067; *g=0.000000; *b=0.742767; break; case 29: *r=0.202183; *g=0.000000; *b=0.752958; break; case 30: *r=0.173300; *g=0.000000; *b=0.763150; break; case 31: *r=0.144417; *g=0.000000; *b=0.773342; break; case 32: *r=0.115533; *g=0.000000; *b=0.783533; break; case 33: *r=0.086650; *g=0.000000; *b=0.793725; break; case 34: *r=0.057767; *g=0.000000; *b=0.803917; break; case 35: *r=0.028883; *g=0.000000; *b=0.814108; break; case 36: *r=0.000000; *g=0.000000; *b=0.824300; break; case 37: *r=0.000000; *g=0.019817; *b=0.838942; break; case 38: *r=0.000000; *g=0.039633; *b=0.853583; break; case 39: *r=0.000000; *g=0.059450; *b=0.868225; break; case 40: *r=0.000000; *g=0.079267; *b=0.882867; break; case 41: *r=0.000000; *g=0.099083; *b=0.897508; break; case 42: *r=0.000000; *g=0.118900; *b=0.912150; break; case 43: *r=0.000000; *g=0.138717; *b=0.926792; break; case 44: *r=0.000000; *g=0.158533; *b=0.941433; break; case 45: *r=0.000000; *g=0.178350; *b=0.956075; break; case 46: *r=0.000000; *g=0.198167; *b=0.970717; break; case 47: *r=0.000000; *g=0.217983; *b=0.985358; break; case 48: *r=0.000000; *g=0.237800; *b=1.000000; break; case 49: *r=0.000000; *g=0.268533; *b=1.000000; break; case 50: *r=0.000000; *g=0.299267; *b=1.000000; break; case 51: *r=0.000000; *g=0.330000; *b=1.000000; break; case 52: *r=0.000000; *g=0.360733; *b=1.000000; break; case 53: *r=0.000000; *g=0.391467; *b=1.000000; break; case 54: *r=0.000000; *g=0.422200; *b=1.000000; break; case 55: *r=0.000000; *g=0.452933; *b=1.000000; break; case 56: *r=0.000000; *g=0.483667; *b=1.000000; break; case 57: *r=0.000000; *g=0.514400; *b=1.000000; break; case 58: *r=0.000000; *g=0.545133; *b=1.000000; break; case 59: *r=0.000000; *g=0.575867; *b=1.000000; break; case 60: *r=0.000000; *g=0.606600; *b=1.000000; break; case 61: *r=0.000000; *g=0.631733; *b=0.975300; break; case 62: *r=0.000000; *g=0.656867; *b=0.950600; break; case 63: *r=0.000000; *g=0.682000; *b=0.925900; break; case 64: *r=0.000000; *g=0.707133; *b=0.901200; break; case 65: *r=0.000000; *g=0.732267; *b=0.876500; break; case 66: *r=0.000000; *g=0.757400; *b=0.851800; break; case 67: *r=0.000000; *g=0.782533; *b=0.827100; break; case 68: *r=0.000000; *g=0.807667; *b=0.802400; break; case 69: *r=0.000000; *g=0.832800; *b=0.777700; break; case 70: *r=0.000000; *g=0.857933; *b=0.753000; break; case 71: *r=0.000000; *g=0.883067; *b=0.728300; break; case 72: *r=0.000000; *g=0.908200; *b=0.703600; break; case 73: *r=0.000000; *g=0.901908; *b=0.676675; break; case 74: *r=0.000000; *g=0.895617; *b=0.649750; break; case 75: *r=0.000000; *g=0.889325; *b=0.622825; break; case 76: *r=0.000000; *g=0.883033; *b=0.595900; break; case 77: *r=0.000000; *g=0.876742; *b=0.568975; break; case 78: *r=0.000000; *g=0.870450; *b=0.542050; break; case 79: *r=0.000000; *g=0.864158; *b=0.515125; break; case 80: *r=0.000000; *g=0.857867; *b=0.488200; break; case 81: *r=0.000000; *g=0.851575; *b=0.461275; break; case 82: *r=0.000000; *g=0.845283; *b=0.434350; break; case 83: *r=0.000000; *g=0.838992; *b=0.407425; break; case 84: *r=0.000000; *g=0.832700; *b=0.380500; break; case 85: *r=0.000000; *g=0.832308; *b=0.354858; break; case 86: *r=0.000000; *g=0.831917; *b=0.329217; break; case 87: *r=0.000000; *g=0.831525; *b=0.303575; break; case 88: *r=0.000000; *g=0.831133; *b=0.277933; break; case 89: *r=0.000000; *g=0.830742; *b=0.252292; break; case 90: *r=0.000000; *g=0.830350; *b=0.226650; break; case 91: *r=0.000000; *g=0.829958; *b=0.201008; break; case 92: *r=0.000000; *g=0.829567; *b=0.175367; break; case 93: *r=0.000000; *g=0.829175; *b=0.149725; break; case 94: *r=0.000000; *g=0.828783; *b=0.124083; break; case 95: *r=0.000000; *g=0.828392; *b=0.098442; break; case 96: *r=0.000000; *g=0.828000; *b=0.072800; break; case 97: *r=0.033167; *g=0.834167; *b=0.066733; break; case 98: *r=0.066333; *g=0.840333; *b=0.060667; break; case 99: *r=0.099500; *g=0.846500; *b=0.054600; break; case 100: *r=0.132667; *g=0.852667; *b=0.048533; break; case 101: *r=0.165833; *g=0.858833; *b=0.042467; break; case 102: *r=0.199000; *g=0.865000; *b=0.036400; break; case 103: *r=0.232167; *g=0.871167; *b=0.030333; break; case 104: *r=0.265333; *g=0.877333; *b=0.024267; break; case 105: *r=0.298500; *g=0.883500; *b=0.018200; break; case 106: *r=0.331667; *g=0.889667; *b=0.012133; break; case 107: *r=0.364833; *g=0.895833; *b=0.006067; break; case 108: *r=0.398000; *g=0.902000; *b=0.000000; break; case 109: *r=0.430950; *g=0.902000; *b=0.000000; break; case 110: *r=0.463900; *g=0.902000; *b=0.000000; break; case 111: *r=0.496850; *g=0.902000; *b=0.000000; break; case 112: *r=0.529800; *g=0.902000; *b=0.000000; break; case 113: *r=0.562750; *g=0.902000; *b=0.000000; break; case 114: *r=0.595700; *g=0.902000; *b=0.000000; break; case 115: *r=0.628650; *g=0.902000; *b=0.000000; break; case 116: *r=0.661600; *g=0.902000; *b=0.000000; break; case 117: *r=0.694550; *g=0.902000; *b=0.000000; break; case 118: *r=0.727500; *g=0.902000; *b=0.000000; break; case 119: *r=0.760450; *g=0.902000; *b=0.000000; break; case 120: *r=0.793400; *g=0.902000; *b=0.000000; break; case 121: *r=0.810617; *g=0.897133; *b=0.003983; break; case 122: *r=0.827833; *g=0.892267; *b=0.007967; break; case 123: *r=0.845050; *g=0.887400; *b=0.011950; break; case 124: *r=0.862267; *g=0.882533; *b=0.015933; break; case 125: *r=0.879483; *g=0.877667; *b=0.019917; break; case 126: *r=0.896700; *g=0.872800; *b=0.023900; break; case 127: *r=0.913917; *g=0.867933; *b=0.027883; break; case 128: *r=0.931133; *g=0.863067; *b=0.031867; break; case 129: *r=0.948350; *g=0.858200; *b=0.035850; break; case 130: *r=0.965567; *g=0.853333; *b=0.039833; break; case 131: *r=0.982783; *g=0.848467; *b=0.043817; break; case 132: *r=1.000000; *g=0.843600; *b=0.047800; break; case 133: *r=0.995725; *g=0.824892; *b=0.051600; break; case 134: *r=0.991450; *g=0.806183; *b=0.055400; break; case 135: *r=0.987175; *g=0.787475; *b=0.059200; break; case 136: *r=0.982900; *g=0.768767; *b=0.063000; break; case 137: *r=0.978625; *g=0.750058; *b=0.066800; break; case 138: *r=0.974350; *g=0.731350; *b=0.070600; break; case 139: *r=0.970075; *g=0.712642; *b=0.074400; break; case 140: *r=0.965800; *g=0.693933; *b=0.078200; break; case 141: *r=0.961525; *g=0.675225; *b=0.082000; break; case 142: *r=0.957250; *g=0.656517; *b=0.085800; break; case 143: *r=0.952975; *g=0.637808; *b=0.089600; break; case 144: *r=0.948700; *g=0.619100; *b=0.093400; break; case 145: *r=0.952975; *g=0.600408; *b=0.085617; break; case 146: *r=0.957250; *g=0.581717; *b=0.077833; break; case 147: *r=0.961525; *g=0.563025; *b=0.070050; break; case 148: *r=0.965800; *g=0.544333; *b=0.062267; break; case 149: *r=0.970075; *g=0.525642; *b=0.054483; break; case 150: *r=0.974350; *g=0.506950; *b=0.046700; break; case 151: *r=0.978625; *g=0.488258; *b=0.038917; break; case 152: *r=0.982900; *g=0.469567; *b=0.031133; break; case 153: *r=0.987175; *g=0.450875; *b=0.023350; break; case 154: *r=0.991450; *g=0.432183; *b=0.015567; break; case 155: *r=0.995725; *g=0.413492; *b=0.007783; break; case 156: *r=1.000000; *g=0.394800; *b=0.000000; break; case 157: *r=0.998342; *g=0.361900; *b=0.000000; break; case 158: *r=0.996683; *g=0.329000; *b=0.000000; break; case 159: *r=0.995025; *g=0.296100; *b=0.000000; break; case 160: *r=0.993367; *g=0.263200; *b=0.000000; break; case 161: *r=0.991708; *g=0.230300; *b=0.000000; break; case 162: *r=0.990050; *g=0.197400; *b=0.000000; break; case 163: *r=0.988392; *g=0.164500; *b=0.000000; break; case 164: *r=0.986733; *g=0.131600; *b=0.000000; break; case 165: *r=0.985075; *g=0.098700; *b=0.000000; break; case 166: *r=0.983417; *g=0.065800; *b=0.000000; break; case 167: *r=0.981758; *g=0.032900; *b=0.000000; break; case 168: *r=0.980100; *g=0.000000; *b=0.000000; break; case 169: *r=0.955925; *g=0.000000; *b=0.000000; break; case 170: *r=0.931750; *g=0.000000; *b=0.000000; break; case 171: *r=0.907575; *g=0.000000; *b=0.000000; break; case 172: *r=0.883400; *g=0.000000; *b=0.000000; break; case 173: *r=0.859225; *g=0.000000; *b=0.000000; break; case 174: *r=0.835050; *g=0.000000; *b=0.000000; break; case 175: *r=0.810875; *g=0.000000; *b=0.000000; break; case 176: *r=0.786700; *g=0.000000; *b=0.000000; break; case 177: *r=0.762525; *g=0.000000; *b=0.000000; break; case 178: *r=0.738350; *g=0.000000; *b=0.000000; break; case 179: *r=0.714175; *g=0.000000; *b=0.000000; break; case 180: *r=0.690000; *g=0.000000; *b=0.000000; break; case 181: *r=0.715833; *g=0.083333; *b=0.083333; break; case 182: *r=0.741667; *g=0.166667; *b=0.166667; break; case 183: *r=0.767500; *g=0.250000; *b=0.250000; break; case 184: *r=0.793333; *g=0.333333; *b=0.333333; break; case 185: *r=0.819167; *g=0.416667; *b=0.416667; break; case 186: *r=0.845000; *g=0.500000; *b=0.500000; break; case 187: *r=0.870833; *g=0.583333; *b=0.583333; break; case 188: *r=0.896667; *g=0.666667; *b=0.666667; break; case 189: *r=0.922500; *g=0.750000; *b=0.750000; break; case 190: *r=0.948333; *g=0.833333; *b=0.833333; break; case 191: *r=0.974167; *g=0.916667; *b=0.916667; break; case 192: *r=1.000000; *g=1.000000; *b=1.000000; break; case 193: *r=1.000000; *g=1.000000; *b=1.000000; break; case 194: *r=1.000000; *g=1.000000; *b=1.000000; break; case 195: *r=1.000000; *g=1.000000; *b=1.000000; break; case 196: *r=1.000000; *g=1.000000; *b=1.000000; break; case 197: *r=1.000000; *g=1.000000; *b=1.000000; break; case 198: *r=1.000000; *g=1.000000; *b=1.000000; break; case 199: *r=1.000000; *g=1.000000; *b=1.000000; break; case 200: *r=1.000000; *g=1.000000; *b=1.000000; break; } /* Convert the RGB values to 0 and 255. With the steps above, they are between 0 and 1. */ *r++ *= 255; *g++ *= 255; *b++ *= 255; } while(++fchll=R; p->chll->next=G; p->chll->next->next=B; /* Clean up. */ gal_data_free(channel); } /* Values here copied from PGFPlots 1.16 source. They are a little more precise than the matplotlib values: https://github.com/BIDS/colormap/blob/master/colormaps.py It was created by Stéfan van der Walt and Nathaniel Smith for Matplotlib, see here for a more complete explanation: https://bids.github.io/colormap */ void color_from_mono_viridis(struct converttparams *p) { gal_data_t *R, *G, *B, *channel; float *r, *g, *b, *f, *fp, min, max; /* Set the range, then convert the dataset to floating point. */ color_min_max(p, &min, 0); color_min_max(p, &max, 1); channel=gal_data_copy_to_new_type_free(p->chll, GAL_TYPE_FLOAT32); /* Allocate the three datasets to keep the RGB colors. */ R=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, channel->ndim, channel->dsize, channel->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, "RED", NULL, "Red color channel."); G=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, channel->ndim, channel->dsize, channel->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, "GREEN", NULL, "Green color channel."); B=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, channel->ndim, channel->dsize, channel->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, "BLUE", NULL, "Blue color channel."); /* Start the conversion. Note that the "Choroma" ('C') is fixed by our definition. */ r=R->array; g=G->array; b=B->array; fp=(f=channel->array)+channel->size; do { if(isnan(*f)) *r=*g=*b=0.0; else switch( (int)((*f-min)/(max-min)*255) ) { case 0: *r=0.26700401; *g=0.00487433; *b=0.32941519; break; case 1: *r=0.26851048; *g=0.00960483; *b=0.33542652; break; case 2: *r=0.26994384; *g=0.01462494; *b=0.34137895; break; case 3: *r=0.27130489; *g=0.01994186; *b=0.34726862; break; case 4: *r=0.27259384; *g=0.02556309; *b=0.35309303; break; case 5: *r=0.27380934; *g=0.03149748; *b=0.35885256; break; case 6: *r=0.27495242; *g=0.03775181; *b=0.36454323; break; case 7: *r=0.27602238; *g=0.04416723; *b=0.37016418; break; case 8: *r=0.2770184 ; *g=0.05034437; *b=0.37571452; break; case 9: *r=0.27794143; *g=0.05632444; *b=0.38119074; break; case 10: *r=0.27879067; *g=0.06214536; *b=0.38659204; break; case 11: *r=0.2795655 ; *g=0.06783587; *b=0.39191723; break; case 12: *r=0.28026658; *g=0.07341724; *b=0.39716349; break; case 13: *r=0.28089358; *g=0.07890703; *b=0.40232944; break; case 14: *r=0.28144581; *g=0.0843197 ; *b=0.40741404; break; case 15: *r=0.28192358; *g=0.08966622; *b=0.41241521; break; case 16: *r=0.28232739; *g=0.09495545; *b=0.41733086; break; case 17: *r=0.28265633; *g=0.10019576; *b=0.42216032; break; case 18: *r=0.28291049; *g=0.10539345; *b=0.42690202; break; case 19: *r=0.28309095; *g=0.11055307; *b=0.43155375; break; case 20: *r=0.28319704; *g=0.11567966; *b=0.43611482; break; case 21: *r=0.28322882; *g=0.12077701; *b=0.44058404; break; case 22: *r=0.28318684; *g=0.12584799; *b=0.44496 ; break; case 23: *r=0.283072 ; *g=0.13089477; *b=0.44924127; break; case 24: *r=0.28288389; *g=0.13592005; *b=0.45342734; break; case 25: *r=0.28262297; *g=0.14092556; *b=0.45751726; break; case 26: *r=0.28229037; *g=0.14591233; *b=0.46150995; break; case 27: *r=0.28188676; *g=0.15088147; *b=0.46540474; break; case 28: *r=0.28141228; *g=0.15583425; *b=0.46920128; break; case 29: *r=0.28086773; *g=0.16077132; *b=0.47289909; break; case 30: *r=0.28025468; *g=0.16569272; *b=0.47649762; break; case 31: *r=0.27957399; *g=0.17059884; *b=0.47999675; break; case 32: *r=0.27882618; *g=0.1754902 ; *b=0.48339654; break; case 33: *r=0.27801236; *g=0.18036684; *b=0.48669702; break; case 34: *r=0.27713437; *g=0.18522836; *b=0.48989831; break; case 35: *r=0.27619376; *g=0.19007447; *b=0.49300074; break; case 36: *r=0.27519116; *g=0.1949054 ; *b=0.49600488; break; case 37: *r=0.27412802; *g=0.19972086; *b=0.49891131; break; case 38: *r=0.27300596; *g=0.20452049; *b=0.50172076; break; case 39: *r=0.27182812; *g=0.20930306; *b=0.50443413; break; case 40: *r=0.27059473; *g=0.21406899; *b=0.50705243; break; case 41: *r=0.26930756; *g=0.21881782; *b=0.50957678; break; case 42: *r=0.26796846; *g=0.22354911; *b=0.5120084 ; break; case 43: *r=0.26657984; *g=0.2282621 ; *b=0.5143487 ; break; case 44: *r=0.2651445 ; *g=0.23295593; *b=0.5165993 ; break; case 45: *r=0.2636632 ; *g=0.23763078; *b=0.51876163; break; case 46: *r=0.26213801; *g=0.24228619; *b=0.52083736; break; case 47: *r=0.26057103; *g=0.2469217 ; *b=0.52282822; break; case 48: *r=0.25896451; *g=0.25153685; *b=0.52473609; break; case 49: *r=0.25732244; *g=0.2561304 ; *b=0.52656332; break; case 50: *r=0.25564519; *g=0.26070284; *b=0.52831152; break; case 51: *r=0.25393498; *g=0.26525384; *b=0.52998273; break; case 52: *r=0.25219404; *g=0.26978306; *b=0.53157905; break; case 53: *r=0.25042462; *g=0.27429024; *b=0.53310261; break; case 54: *r=0.24862899; *g=0.27877509; *b=0.53455561; break; case 55: *r=0.2468114 ; *g=0.28323662; *b=0.53594093; break; case 56: *r=0.24497208; *g=0.28767547; *b=0.53726018; break; case 57: *r=0.24311324; *g=0.29209154; *b=0.53851561; break; case 58: *r=0.24123708; *g=0.29648471; *b=0.53970946; break; case 59: *r=0.23934575; *g=0.30085494; *b=0.54084398; break; case 60: *r=0.23744138; *g=0.30520222; *b=0.5419214 ; break; case 61: *r=0.23552606; *g=0.30952657; *b=0.54294396; break; case 62: *r=0.23360277; *g=0.31382773; *b=0.54391424; break; case 63: *r=0.2316735 ; *g=0.3181058 ; *b=0.54483444; break; case 64: *r=0.22973926; *g=0.32236127; *b=0.54570633; break; case 65: *r=0.22780192; *g=0.32659432; *b=0.546532 ; break; case 66: *r=0.2258633 ; *g=0.33080515; *b=0.54731353; break; case 67: *r=0.22392515; *g=0.334994 ; *b=0.54805291; break; case 68: *r=0.22198915; *g=0.33916114; *b=0.54875211; break; case 69: *r=0.22005691; *g=0.34330688; *b=0.54941304; break; case 70: *r=0.21812995; *g=0.34743154; *b=0.55003755; break; case 71: *r=0.21620971; *g=0.35153548; *b=0.55062743; break; case 72: *r=0.21429757; *g=0.35561907; *b=0.5511844 ; break; case 73: *r=0.21239477; *g=0.35968273; *b=0.55171011; break; case 74: *r=0.2105031 ; *g=0.36372671; *b=0.55220646; break; case 75: *r=0.20862342; *g=0.36775151; *b=0.55267486; break; case 76: *r=0.20675628; *g=0.37175775; *b=0.55311653; break; case 77: *r=0.20490257; *g=0.37574589; *b=0.55353282; break; case 78: *r=0.20306309; *g=0.37971644; *b=0.55392505; break; case 79: *r=0.20123854; *g=0.38366989; *b=0.55429441; break; case 80: *r=0.1994295 ; *g=0.38760678; *b=0.55464205; break; case 81: *r=0.1976365 ; *g=0.39152762; *b=0.55496905; break; case 82: *r=0.19585993; *g=0.39543297; *b=0.55527637; break; case 83: *r=0.19410009; *g=0.39932336; *b=0.55556494; break; case 84: *r=0.19235719; *g=0.40319934; *b=0.55583559; break; case 85: *r=0.19063135; *g=0.40706148; *b=0.55608907; break; case 86: *r=0.18892259; *g=0.41091033; *b=0.55632606; break; case 87: *r=0.18723083; *g=0.41474645; *b=0.55654717; break; case 88: *r=0.18555593; *g=0.4185704 ; *b=0.55675292; break; case 89: *r=0.18389763; *g=0.42238275; *b=0.55694377; break; case 90: *r=0.18225561; *g=0.42618405; *b=0.5571201 ; break; case 91: *r=0.18062949; *g=0.42997486; *b=0.55728221; break; case 92: *r=0.17901879; *g=0.43375572; *b=0.55743035; break; case 93: *r=0.17742298; *g=0.4375272 ; *b=0.55756466; break; case 94: *r=0.17584148; *g=0.44128981; *b=0.55768526; break; case 95: *r=0.17427363; *g=0.4450441 ; *b=0.55779216; break; case 96: *r=0.17271876; *g=0.4487906 ; *b=0.55788532; break; case 97: *r=0.17117615; *g=0.4525298 ; *b=0.55796464; break; case 98: *r=0.16964573; *g=0.45626209; *b=0.55803034; break; case 99: *r=0.16812641; *g=0.45998802; *b=0.55808199; break; case 100: *r=0.1666171 ; *g=0.46370813; *b=0.55811913; break; case 101: *r=0.16511703; *g=0.4674229 ; *b=0.55814141; break; case 102: *r=0.16362543; *g=0.47113278; *b=0.55814842; break; case 103: *r=0.16214155; *g=0.47483821; *b=0.55813967; break; case 104: *r=0.16066467; *g=0.47853961; *b=0.55811466; break; case 105: *r=0.15919413; *g=0.4822374 ; *b=0.5580728 ; break; case 106: *r=0.15772933; *g=0.48593197; *b=0.55801347; break; case 107: *r=0.15626973; *g=0.4896237 ; *b=0.557936 ; break; case 108: *r=0.15481488; *g=0.49331293; *b=0.55783967; break; case 109: *r=0.15336445; *g=0.49700003; *b=0.55772371; break; case 110: *r=0.1519182 ; *g=0.50068529; *b=0.55758733; break; case 111: *r=0.15047605; *g=0.50436904; *b=0.55742968; break; case 112: *r=0.14903918; *g=0.50805136; *b=0.5572505 ; break; case 113: *r=0.14760731; *g=0.51173263; *b=0.55704861; break; case 114: *r=0.14618026; *g=0.51541316; *b=0.55682271; break; case 115: *r=0.14475863; *g=0.51909319; *b=0.55657181; break; case 116: *r=0.14334327; *g=0.52277292; *b=0.55629491; break; case 117: *r=0.14193527; *g=0.52645254; *b=0.55599097; break; case 118: *r=0.14053599; *g=0.53013219; *b=0.55565893; break; case 119: *r=0.13914708; *g=0.53381201; *b=0.55529773; break; case 120: *r=0.13777048; *g=0.53749213; *b=0.55490625; break; case 121: *r=0.1364085 ; *g=0.54117264; *b=0.55448339; break; case 122: *r=0.13506561; *g=0.54485335; *b=0.55402906; break; case 123: *r=0.13374299; *g=0.54853458; *b=0.55354108; break; case 124: *r=0.13244401; *g=0.55221637; *b=0.55301828; break; case 125: *r=0.13117249; *g=0.55589872; *b=0.55245948; break; case 126: *r=0.1299327 ; *g=0.55958162; *b=0.55186354; break; case 127: *r=0.12872938; *g=0.56326503; *b=0.55122927; break; case 128: *r=0.12756771; *g=0.56694891; *b=0.55055551; break; case 129: *r=0.12645338; *g=0.57063316; *b=0.5498411 ; break; case 130: *r=0.12539383; *g=0.57431754; *b=0.54908564; break; case 131: *r=0.12439474; *g=0.57800205; *b=0.5482874 ; break; case 132: *r=0.12346281; *g=0.58168661; *b=0.54744498; break; case 133: *r=0.12260562; *g=0.58537105; *b=0.54655722; break; case 134: *r=0.12183122; *g=0.58905521; *b=0.54562298; break; case 135: *r=0.12114807; *g=0.59273889; *b=0.54464114; break; case 136: *r=0.12056501; *g=0.59642187; *b=0.54361058; break; case 137: *r=0.12009154; *g=0.60010387; *b=0.54253043; break; case 138: *r=0.11973756; *g=0.60378459; *b=0.54139999; break; case 139: *r=0.11951163; *g=0.60746388; *b=0.54021751; break; case 140: *r=0.11942341; *g=0.61114146; *b=0.53898192; break; case 141: *r=0.11948255; *g=0.61481702; *b=0.53769219; break; case 142: *r=0.11969858; *g=0.61849025; *b=0.53634733; break; case 143: *r=0.12008079; *g=0.62216081; *b=0.53494633; break; case 144: *r=0.12063824; *g=0.62582833; *b=0.53348834; break; case 145: *r=0.12137972; *g=0.62949242; *b=0.53197275; break; case 146: *r=0.12231244; *g=0.63315277; *b=0.53039808; break; case 147: *r=0.12344358; *g=0.63680899; *b=0.52876343; break; case 148: *r=0.12477953; *g=0.64046069; *b=0.52706792; break; case 149: *r=0.12632581; *g=0.64410744; *b=0.52531069; break; case 150: *r=0.12808703; *g=0.64774881; *b=0.52349092; break; case 151: *r=0.13006688; *g=0.65138436; *b=0.52160791; break; case 152: *r=0.13226797; *g=0.65501363; *b=0.51966086; break; case 153: *r=0.13469183; *g=0.65863619; *b=0.5176488 ; break; case 154: *r=0.13733921; *g=0.66225157; *b=0.51557101; break; case 155: *r=0.14020991; *g=0.66585927; *b=0.5134268 ; break; case 156: *r=0.14330291; *g=0.66945881; *b=0.51121549; break; case 157: *r=0.1466164 ; *g=0.67304968; *b=0.50893644; break; case 158: *r=0.15014782; *g=0.67663139; *b=0.5065889 ; break; case 159: *r=0.15389405; *g=0.68020343; *b=0.50417217; break; case 160: *r=0.15785146; *g=0.68376525; *b=0.50168574; break; case 161: *r=0.16201598; *g=0.68731632; *b=0.49912906; break; case 162: *r=0.1663832 ; *g=0.69085611; *b=0.49650163; break; case 163: *r=0.1709484 ; *g=0.69438405; *b=0.49380294; break; case 164: *r=0.17570671; *g=0.6978996 ; *b=0.49103252; break; case 165: *r=0.18065314; *g=0.70140222; *b=0.48818938; break; case 166: *r=0.18578266; *g=0.70489133; *b=0.48527326; break; case 167: *r=0.19109018; *g=0.70836635; *b=0.48228395; break; case 168: *r=0.19657063; *g=0.71182668; *b=0.47922108; break; case 169: *r=0.20221902; *g=0.71527175; *b=0.47608431; break; case 170: *r=0.20803045; *g=0.71870095; *b=0.4728733 ; break; case 171: *r=0.21400015; *g=0.72211371; *b=0.46958774; break; case 172: *r=0.22012381; *g=0.72550945; *b=0.46622638; break; case 173: *r=0.2263969 ; *g=0.72888753; *b=0.46278934; break; case 174: *r=0.23281498; *g=0.73224735; *b=0.45927675; break; case 175: *r=0.2393739 ; *g=0.73558828; *b=0.45568838; break; case 176: *r=0.24606968; *g=0.73890972; *b=0.45202405; break; case 177: *r=0.25289851; *g=0.74221104; *b=0.44828355; break; case 178: *r=0.25985676; *g=0.74549162; *b=0.44446673; break; case 179: *r=0.26694127; *g=0.74875084; *b=0.44057284; break; case 180: *r=0.27414922; *g=0.75198807; *b=0.4366009 ; break; case 181: *r=0.28147681; *g=0.75520266; *b=0.43255207; break; case 182: *r=0.28892102; *g=0.75839399; *b=0.42842626; break; case 183: *r=0.29647899; *g=0.76156142; *b=0.42422341; break; case 184: *r=0.30414796; *g=0.76470433; *b=0.41994346; break; case 185: *r=0.31192534; *g=0.76782207; *b=0.41558638; break; case 186: *r=0.3198086 ; *g=0.77091403; *b=0.41115215; break; case 187: *r=0.3277958 ; *g=0.77397953; *b=0.40664011; break; case 188: *r=0.33588539; *g=0.7770179 ; *b=0.40204917; break; case 189: *r=0.34407411; *g=0.78002855; *b=0.39738103; break; case 190: *r=0.35235985; *g=0.78301086; *b=0.39263579; break; case 191: *r=0.36074053; *g=0.78596419; *b=0.38781353; break; case 192: *r=0.3692142 ; *g=0.78888793; *b=0.38291438; break; case 193: *r=0.37777892; *g=0.79178146; *b=0.3779385 ; break; case 194: *r=0.38643282; *g=0.79464415; *b=0.37288606; break; case 195: *r=0.39517408; *g=0.79747541; *b=0.36775726; break; case 196: *r=0.40400101; *g=0.80027461; *b=0.36255223; break; case 197: *r=0.4129135 ; *g=0.80304099; *b=0.35726893; break; case 198: *r=0.42190813; *g=0.80577412; *b=0.35191009; break; case 199: *r=0.43098317; *g=0.80847343; *b=0.34647607; break; case 200: *r=0.44013691; *g=0.81113836; *b=0.3409673 ; break; case 201: *r=0.44936763; *g=0.81376835; *b=0.33538426; break; case 202: *r=0.45867362; *g=0.81636288; *b=0.32972749; break; case 203: *r=0.46805314; *g=0.81892143; *b=0.32399761; break; case 204: *r=0.47750446; *g=0.82144351; *b=0.31819529; break; case 205: *r=0.4870258 ; *g=0.82392862; *b=0.31232133; break; case 206: *r=0.49661536; *g=0.82637633; *b=0.30637661; break; case 207: *r=0.5062713 ; *g=0.82878621; *b=0.30036211; break; case 208: *r=0.51599182; *g=0.83115784; *b=0.29427888; break; case 209: *r=0.52577622; *g=0.83349064; *b=0.2881265 ; break; case 210: *r=0.5356211 ; *g=0.83578452; *b=0.28190832; break; case 211: *r=0.5455244 ; *g=0.83803918; *b=0.27562602; break; case 212: *r=0.55548397; *g=0.84025437; *b=0.26928147; break; case 213: *r=0.5654976 ; *g=0.8424299 ; *b=0.26287683; break; case 214: *r=0.57556297; *g=0.84456561; *b=0.25641457; break; case 215: *r=0.58567772; *g=0.84666139; *b=0.24989748; break; case 216: *r=0.59583934; *g=0.84871722; *b=0.24332878; break; case 217: *r=0.60604528; *g=0.8507331 ; *b=0.23671214; break; case 218: *r=0.61629283; *g=0.85270912; *b=0.23005179; break; case 219: *r=0.62657923; *g=0.85464543; *b=0.22335258; break; case 220: *r=0.63690157; *g=0.85654226; *b=0.21662012; break; case 221: *r=0.64725685; *g=0.85839991; *b=0.20986086; break; case 222: *r=0.65764197; *g=0.86021878; *b=0.20308229; break; case 223: *r=0.66805369; *g=0.86199932; *b=0.19629307; break; case 224: *r=0.67848868; *g=0.86374211; *b=0.18950326; break; case 225: *r=0.68894351; *g=0.86544779; *b=0.18272455; break; case 226: *r=0.69941463; *g=0.86711711; *b=0.17597055; break; case 227: *r=0.70989842; *g=0.86875092; *b=0.16925712; break; case 228: *r=0.72039115; *g=0.87035015; *b=0.16260273; break; case 229: *r=0.73088902; *g=0.87191584; *b=0.15602894; break; case 230: *r=0.74138803; *g=0.87344918; *b=0.14956101; break; case 231: *r=0.75188414; *g=0.87495143; *b=0.14322828; break; case 232: *r=0.76237342; *g=0.87642392; *b=0.13706449; break; case 233: *r=0.77285183; *g=0.87786808; *b=0.13110864; break; case 234: *r=0.78331535; *g=0.87928545; *b=0.12540538; break; case 235: *r=0.79375994; *g=0.88067763; *b=0.12000532; break; case 236: *r=0.80418159; *g=0.88204632; *b=0.11496505; break; case 237: *r=0.81457634; *g=0.88339329; *b=0.11034678; break; case 238: *r=0.82494028; *g=0.88472036; *b=0.10621724; break; case 239: *r=0.83526959; *g=0.88602943; *b=0.1026459 ; break; case 240: *r=0.84556056; *g=0.88732243; *b=0.09970219; break; case 241: *r=0.8558096 ; *g=0.88860134; *b=0.09745186; break; case 242: *r=0.86601325; *g=0.88986815; *b=0.09595277; break; case 243: *r=0.87616824; *g=0.89112487; *b=0.09525046; break; case 244: *r=0.88627146; *g=0.89237353; *b=0.09537439; break; case 245: *r=0.89632002; *g=0.89361614; *b=0.09633538; break; case 246: *r=0.90631121; *g=0.89485467; *b=0.09812496; break; case 247: *r=0.91624212; *g=0.89609127; *b=0.1007168 ; break; case 248: *r=0.92610579; *g=0.89732977; *b=0.10407067; break; case 249: *r=0.93590444; *g=0.8985704 ; *b=0.10813094; break; case 250: *r=0.94563626; *g=0.899815 ; *b=0.11283773; break; case 251: *r=0.95529972; *g=0.90106534; *b=0.11812832; break; case 252: *r=0.96489353; *g=0.90232311; *b=0.12394051; break; case 253: *r=0.97441665; *g=0.90358991; *b=0.13021494; break; case 254: *r=0.98386829; *g=0.90486726; *b=0.13689671; break; case 255: *r=0.99324789; *g=0.90615657; *b=0.1439362 ; break; } /* Convert the RGB values to 0 and 255. With the steps above, they are between 0 and 1. */ *r++ *= 255; *g++ *= 255; *b++ *= 255; } while(++fchll=R; p->chll->next=G; p->chll->next->next=B; /* Clean up. */ gal_data_free(channel); } void color_map_prepare(struct converttparams *p) { switch(p->colormap->status) { case COLOR_HSV: color_from_mono_hsv(p); break; case COLOR_VIRIDIS: color_from_mono_viridis(p); break; case COLOR_GRAY: convertt_scale_to_uchar(p); break; case COLOR_SLS: case COLOR_SLS_INVERSE: color_from_mono_sls(p); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The value %d is not a recognized color-space " "code", __func__, PACKAGE_BUGREPORT, p->colormap->status); } } /***********************************************************************/ /************** From mono-channel *****************/ /***********************************************************************/ /* This algorithm is a translation of the primary algorithm in this page: https://stackoverflow.com/questions/3018313/algorithm-to-convert-rgb-to-hsv-and-hsv-to-rgb-in-range-0-255-for-both */ void color_rgb_to_hsv(struct converttparams *p) { float *h, *s, *v; gal_data_t *H, *S, *V; uint8_t *r, *g, *b, *rr, min, max, delta; /* Basic sanity checks. */ if(gal_list_data_number(p->chll)!=3) error(EXIT_FAILURE, 0, "%s: three color channels must be input", __func__); if( p->chll->type!=GAL_TYPE_UINT8 || p->chll->next->type!=GAL_TYPE_UINT8 || p->chll->next->next->type!=GAL_TYPE_UINT8 ) error(EXIT_FAILURE, 0, "when converting RGB to HSV, all three input " "color channels must have an 8-bit unsigned integer type"); /* Allocate the three datasets to keep the RGB colors. */ H=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, p->chll->ndim, p->chll->dsize, p->chll->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, "HUE", NULL, NULL); S=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, p->chll->ndim, p->chll->dsize, p->chll->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, "SATURATION", NULL, NULL); V=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, p->chll->ndim, p->chll->dsize, p->chll->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, "VALUE", NULL, NULL); /* Initiate the pointer arrays. */ h=H->array; s=S->array; v=V->array; r=p->chll->array; g=p->chll->next->array; b=p->chll->next->next->array; /* Parse the dataset and do the conversion. */ rr=r+p->chll->size; do { /* Get the minimum and maximum RGB values. */ min = *r < *g ? *r : *g; min = min < *b ? min : *b; max = *r > *g ? *r : *g; max = max > *b ? max : *b; /* The "value" is the maximum. */ *v = (float)(max)/255.0; /* See what the difference between the minimum and maximum are. */ delta=max-min; if(delta) { if(max) { /* Set the Saturation and hue. */ *s = (float)(delta)/(float)(max); *h = ( *r==max /* Between yellow and magenta. */ ? ((float)(*g-*b)/(float)(delta)) : ( *g==max /* Between cyan & yellow. */ ? (2.0+(float)(*b-*r)/(float)(delta)) /* Between magenta & cyan. */ : (4.0+(float)(*r-*g)/(float)(delta)) ) ); /* Correct the hue: */ *h *= 60.0; if( *h<0.0 ) *h += 360.0; } else /* When 'max==0', then *r=*g=*b=0, so s=h=0. */ *s=*h=0.0; } else /* When there is no difference, then its actually a grayscale dataset, so '*v' is the only parameter that matters. */ *s=*h=0.0; /* Increment all the pointers. */ ++g; ++b; ++h; ++s; ++v; } while(++rchll); p->chll=H; p->chll->next=S; p->chll->next->next=V; } gnuastro-0.22/bin/convertt/main.h0000644000175000017500000001250514551337306012503 /********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include #include /* Progarm names. */ #define PROGRAM_NAME "ConvertType" /* Program full name. */ #define PROGRAM_EXEC "astconvertt" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Constants/macros. */ #define BLANK_CHANNEL_NAME "blank" enum output_formats { OUT_FORMAT_INVALID, /* ==0 by C standard */ OUT_FORMAT_TXT, OUT_FORMAT_EPS, OUT_FORMAT_PDF, OUT_FORMAT_FITS, OUT_FORMAT_JPEG, OUT_FORMAT_TIFF, }; enum colorspace_names { COLOR_INVALID, /* ==0 by C standard */ COLOR_RGB, COLOR_HSV, COLOR_SLS, COLOR_SLS_INVERSE, COLOR_VIRIDIS, COLOR_GRAY, }; /* This is used in converting certain values in the array. */ struct change { gal_data_t *from; gal_data_t *to; struct change *next; }; struct converttparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ gal_list_str_t *inputnames; /* The names of input files. */ gal_list_str_t *hdus; /* The names of input hdus. */ char *globalhdu; /* Global HDU (for all inputs). */ uint8_t quality; /* Quality of JPEG image. */ float widthincm; /* Width in centimeters. */ uint32_t borderwidth; /* Width of border in PostScript points. */ uint8_t bordercolor; /* Color of the border. */ uint8_t hex; /* Use hexadecimal not ASCII85 encoding. */ gal_data_t *colormap; /* Color space to use for single/mono. */ uint8_t rgbtohsv; /* Convert input RGB channels to HSV. */ char *fluxlowstr; /* Lower flux truncation value. */ char *fluxhighstr; /* Higher flux truncation value. */ uint8_t maxbyte; /* Maximum byte value. */ uint8_t forcemin; /* fluxlow is minimum. */ uint8_t forcemax; /* fluxhigh is maximum. */ char *changestr; /* String of change values. */ uint8_t changeaftertrunc; /* First convert, then truncate. */ uint8_t invert; /* ==1: invert the output image. */ char *marksname; /* Filename with table with mark info. */ char *markshdu; /* HDU of table with mark info. */ char *mode; /* Mode of the coordinates for marks. */ gal_list_str_t *markcoords; /* Coordinates of the marks. */ gal_list_str_t *marksize; /* Columns containing mark size(s). */ char *marklinewidth; /* Column containing mark line width. */ char *markcolor; /* Column containing mark color. */ char *markshape; /* Column containing mark shape. */ char *markrotate; /* Column containing mark rotation. */ char *marktext; /* Column containing mark text. */ char *markfont; /* Column containing mark font name. */ char *markfontsize; /* Column containing mark font size. */ uint8_t listcolors; /* List available colors */ uint8_t listfonts; /* List available fonts. */ uint8_t showfonts; /* Show available fonts. */ uint8_t sizeinpix; /* Sizes are in pixels (in WCS-mode). */ uint8_t sizeinarcsec; /* Sizes are in arcseconds (in WCS-mode).*/ uint8_t sizeinarcmin; /* Sizes are in arcminutes (in WCS-mode).*/ uint8_t marktextprecision; /* Precision to convert floats. */ /* Internal */ struct change *change; /* The value conversion string. */ gal_data_t *fluxlow; /* The lower flux truncation. */ gal_data_t *fluxhigh; /* The higher flux truncation. */ time_t rawtime; /* Starting time of the program. */ int outformat; /* The format of the output file. */ size_t numch; /* Current Channel. */ gal_data_t *chll; /* Linked list of color channels. */ gal_data_t *marks; /* Information of objects to show. */ }; #endif gnuastro-0.22/bin/convertt/authors-cite.h0000644000175000017500000000303214551337306014161 /********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/convertt/args.h0000644000175000017500000002755314551337306012524 /********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Input */ { "globalhdu", UI_KEY_GLOBALHDU, "STR/INT", 0, "Use this HDU for all inputs, ignore '--hdu'.", GAL_OPTIONS_GROUP_INPUT, &p->globalhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Output */ { "quality", UI_KEY_QUALITY, "INT", 0, "Quality of output JPEG image (1 to 100).", GAL_OPTIONS_GROUP_OUTPUT, &p->quality, GAL_TYPE_UINT8, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "widthincm", UI_KEY_WIDTHINCM, "FLT", 0, "Width in units of centimeters.", GAL_OPTIONS_GROUP_OUTPUT, &p->widthincm, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "hex", UI_KEY_HEX, 0, 0, "Hexadecimal encoding in EPS. Default: ASCII85.", GAL_OPTIONS_GROUP_OUTPUT, &p->hex, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "colormap", UI_KEY_COLORMAP, "STR[,FLT]", 0, "Color map when only a single channel is given.", GAL_OPTIONS_GROUP_OUTPUT, &p->colormap, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, { "rgbtohsv", UI_KEY_RGBTOHSV, 0, 0, "Convert RGB input into HSV (in FITS output)", GAL_OPTIONS_GROUP_OUTPUT, &p->rgbtohsv, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Flux:", UI_GROUP_FLUX }, { "fluxlow", UI_KEY_FLUXLOW, "FLT", 0, "Lower flux truncation value.", UI_GROUP_FLUX, &p->fluxlowstr, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "fluxhigh", UI_KEY_FLUXHIGH, "FLT", 0, "Higher flux truncation value.", UI_GROUP_FLUX, &p->fluxhighstr, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "maxbyte", UI_KEY_MAXBYTE, "INT", 0, "Maximum byte value for all color channels.", UI_GROUP_FLUX, &p->maxbyte, GAL_TYPE_UINT8, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "forcemin", UI_KEY_FORCEMIN, 0, 0, "Force --fluxmin, even when smaller than minimum.", UI_GROUP_FLUX, &p->forcemin, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "forcemax", UI_KEY_FORCEMAX, 0, 0, "Force --fluxmax, even when larger than maximum.", UI_GROUP_FLUX, &p->forcemax, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "change", UI_KEY_CHANGE, "STR", 0, "Change pixel values 'from_1:to_1,from_2:to_2'.", UI_GROUP_FLUX, &p->changestr, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "changeaftertrunc", UI_KEY_CHANGEAFTERTRUNC, 0, 0, "First truncate then change pixel values.", UI_GROUP_FLUX, &p->changeaftertrunc, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "invert", UI_KEY_INVERT, 0, 0, "Invert the values in JPEG and EPS/PDF.", UI_GROUP_FLUX, &p->invert, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Vector graphics (only for EPS or PDF outputs)", UI_GROUP_VECTOR }, { "borderwidth", UI_KEY_BORDERWIDTH, "INT", 0, "Border width in units of points (1/72 inch).", UI_GROUP_VECTOR, &p->borderwidth, GAL_TYPE_UINT32, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "bordercolor", UI_GROUP_VECTOR, "STR", 0, "Name of color to use for the border.", GAL_OPTIONS_GROUP_OUTPUT, &p->bordercolor, GAL_TYPE_UINT8, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_color }, { "marks", UI_KEY_MARKS, "STR", 0, "Name of mark information table.", UI_GROUP_VECTOR, &p->marksname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "markshdu", UI_KEY_MARKSHDU, "STR", 0, "HDU in '--marks' (if its a FITS file).", UI_GROUP_VECTOR, &p->markshdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "markcoords", UI_KEY_MARKCOORDS, "STR,STR", 0, "Name or Number of columns with coordinates.", UI_GROUP_VECTOR, &p->markcoords, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, }, { "mode", UI_KEY_MODE, "STR", 0, "Coordinate mode for marks ('wcs' or 'img').", UI_GROUP_VECTOR, &p->mode, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "markshape", UI_KEY_MARKSHAPE, "STR", 0, "Name or Number of col. with mark shapes: circle (1), " "plus (2), cross (3), ellipse (4), point(5), square (6) " "rectangle (7) and line (8).", UI_GROUP_VECTOR, &p->markshape, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "markrotate", UI_KEY_MARKROTATE, "STR", 0, "Name or Num. of col. with mark rotation.", UI_GROUP_VECTOR, &p->markrotate, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "marksize", UI_KEY_MARKSIZE, "STR[,STR]", 0, "Name or Number of cols. with mark size(s).", UI_GROUP_VECTOR, &p->marksize, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sizeinpix", UI_KEY_SIZEINPIX, 0, 0, "Size col. values are in pixels (in WCS-mode).", UI_GROUP_VECTOR, &p->sizeinpix, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sizeinarcsec", UI_KEY_SIZEINARCSEC, 0, 0, "Size col. values are in arcsec (in WCS-mode).", UI_GROUP_VECTOR, &p->sizeinarcsec, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sizeinarcmin", UI_KEY_SIZEINARCMIN, 0, 0, "Size col. values are in arcmin (in WCS-mode).", UI_GROUP_VECTOR, &p->sizeinarcmin, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "marklinewidth", UI_KEY_MARKLINEWIDTH, "STR", 0, "Name or Number of col. with line width.", UI_GROUP_VECTOR, &p->marklinewidth, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "markcolor", UI_KEY_MARKCOLOR, "STR", 0, "Name or Number of col. with mark color. ", UI_GROUP_VECTOR, &p->markcolor, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "listcolors", UI_KEY_LISTCOLORS, 0, 0, "List names and RGB info of all colors.", UI_GROUP_VECTOR, &p->listcolors, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "marktext", UI_KEY_MARKTEXT, "STR", 0, "Name or Num. of col. with mark text.", UI_GROUP_VECTOR, &p->marktext, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "marktextprecision", UI_KEY_MARKTEXTPRECISION, "INT", 0, "Number decimals when text is float column.", UI_GROUP_VECTOR, &p->marktextprecision, GAL_TYPE_UINT8, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "markfont", UI_KEY_MARKFONT, "STR", 0, "Name or Num. of col. with mark font name.", UI_GROUP_VECTOR, &p->markfont, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "markfontsize", UI_KEY_MARKFONTSIZE, "STR", 0, "Name or Num. of col. with mark font size.", UI_GROUP_VECTOR, &p->markfontsize, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "showfonts", UI_KEY_SHOWFONTS, 0, 0, "Show all fonts in a PDF.", UI_GROUP_VECTOR, &p->showfonts, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "listfonts", UI_KEY_LISTFONTS, 0, 0, "List names of available fonts.", UI_GROUP_VECTOR, &p->listfonts, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/convertt/ui.h0000644000175000017500000000511314551337306012171 /********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Option groups particular to this program */ enum program_args_groups { UI_GROUP_FLUX = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_VECTOR }; /* Available letters for short options: a d e f j k l n p s t v y z E G J Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_GLOBALHDU = 'g', UI_KEY_QUALITY = 'u', UI_KEY_WIDTHINCM = 'w', UI_KEY_BORDERWIDTH = 'b', UI_KEY_HEX = 'x', UI_KEY_FLUXLOW = 'L', UI_KEY_FLUXHIGH = 'H', UI_KEY_MAXBYTE = 'm', UI_KEY_FORCEMIN = 'A', UI_KEY_FORCEMAX = 'B', UI_KEY_CHANGE = 'c', UI_KEY_CHANGEAFTERTRUNC = 'C', UI_KEY_INVERT = 'i', UI_KEY_MODE = 'O', UI_KEY_MARKCOORDS = 'r', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_COLORMAP = 1000, UI_KEY_RGBTOHSV, UI_KEY_BORDERCOLOR, UI_KEY_MARKS, UI_KEY_MARKSHDU, UI_KEY_MARKSIZE, UI_KEY_MARKLINEWIDTH, UI_KEY_MARKCOLOR, UI_KEY_MARKSHAPE, UI_KEY_MARKROTATE, UI_KEY_MARKTEXT, UI_KEY_MARKFONT, UI_KEY_MARKFONTSIZE, UI_KEY_LISTCOLORS, UI_KEY_LISTFONTS, UI_KEY_SHOWFONTS, UI_KEY_SIZEINPIX, UI_KEY_SIZEINARCSEC, UI_KEY_SIZEINARCMIN, UI_KEY_MARKTEXTPRECISION, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct converttparams *p); void ui_free_report(struct converttparams *p); #endif gnuastro-0.22/bin/convertt/convertt.h0000644000175000017500000000220114551337306013413 /********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef CONVERTT_H #define CONVERTT_H void convertt_scale_to_uchar(struct converttparams *p); void convertt(struct converttparams *p); #endif gnuastro-0.22/bin/convertt/color.h0000644000175000017500000000251414551337306012674 /********************************************************************* ConvertType - Convert between various types of files. ConvertType is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef COLOR_H #define COLOR_H void color_name_to_rgb(char *n, float *f); void color_map_prepare(struct converttparams *p); void color_from_mono_hsv(struct converttparams *p); void color_from_mono_sls(struct converttparams *p); void color_from_mono_viridis(struct converttparams *p); void color_rgb_to_hsv(struct converttparams *p); #endif gnuastro-0.22/bin/convertt/astconvertt-complete.bash0000644000175000017500000001176514551337306016436 # Bash autocompletion to Gnuastro's ConvertType. See the comments above # 'bin/completion.bash.in' for more. # # Original author: # Mohammad Akhlaghi # Contributing author(s): # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see ## Contributing author(s): ## Copyright (C) 2015-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astconvolve ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astconvolve_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astconvolve_SOURCES = main.c ui.c convolve.c EXTRA_DIST = main.h authors-cite.h args.h ui.h convolve.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astconvolve.conf gnuastro-0.22/bin/convolve/astconvolve.conf0000644000175000017500000000212214551337306014601 # Default parameters (System) for Convolve. # Convolve is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astconvolve --help # Full list of options, short doc. # $ astconvolve -P # Print all options and used values. # $ info astconvolve # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: khdu 1 # Output: type float32 # Operating mode: domain frequency minsharpspec 0.005 gnuastro-0.22/bin/convolve/Makefile.in0000644000175000017500000033766214557513747013473 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astconvolve$(EXEEXT) subdir = bin/convolve ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astconvolve_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ convolve.$(OBJEXT) astconvolve_OBJECTS = $(am_astconvolve_OBJECTS) am__DEPENDENCIES_1 = astconvolve_DEPENDENCIES = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/convolve.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/ui.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astconvolve_SOURCES) DIST_SOURCES = $(astconvolve_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib astconvolve_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astconvolve_SOURCES = main.c ui.c convolve.c EXTRA_DIST = main.h authors-cite.h args.h ui.h convolve.h dist_sysconf_DATA = astconvolve.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/convolve/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/convolve/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astconvolve$(EXEEXT): $(astconvolve_OBJECTS) $(astconvolve_DEPENDENCIES) $(EXTRA_astconvolve_DEPENDENCIES) @rm -f astconvolve$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astconvolve_OBJECTS) $(astconvolve_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convolve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/convolve.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/convolve.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/convolve/main.c0000644000175000017500000000314014551337306012460 /********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "convolve.h" #include "ui.h" /* Needs convolveparams in main.h */ int main(int argc, char *argv[]) { struct timeval t1; struct convolveparams p={{{0},0},0}; /* Set the starting time. */ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Convolve. */ convolve(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully. */ return EXIT_SUCCESS; } gnuastro-0.22/bin/convolve/ui.c0000644000175000017500000006301414551337306012157 /********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will convolve an input " "image with a given spatial kernel (image) in the spatial domain (no " "edge effects) or frequency domain. The latter suffers from edge effects, " "but can be much faster.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct convolveparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->poptions = program_options; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; /* Set the mandatory common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_MINMAPSIZE: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_IGNORECASE: case GAL_OPTIONS_KEY_INTERPNUMNGB: case GAL_OPTIONS_KEY_INTERPONLYBLANK: cp->coptions[i].flags=OPTION_HIDDEN; break; } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct convolveparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(p->filename) argp_error(state, "only one argument (input file) should be given"); else if(arg[0]!='\0') p->filename=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct convolveparams *p) { struct gal_options_common_params *cp=&p->cp; /* Read the domain from a string into an integer. */ if( !strcmp("spatial", p->domainstr) ) p->domain=CONVOLVE_DOMAIN_SPATIAL; else if( !strcmp("frequency", p->domainstr) ) p->domain=CONVOLVE_DOMAIN_FREQUENCY; else error(EXIT_FAILURE, 0, "domain value '%s' not recognized. Please use " "either 'spatial' or 'frequency'", p->domainstr); /* If we are in the spatial domain, make sure that the necessary parameters are set. */ if( p->domain==CONVOLVE_DOMAIN_SPATIAL ) if( cp->tl.tilesize==NULL || cp->tl.numchannels==NULL ) { if( cp->tl.tilesize==NULL && cp->tl.numchannels==NULL ) error(EXIT_FAILURE, 0, "in spatial convolution, '--numchannels' " "and '--tilesize' are mandatory"); else error(EXIT_FAILURE, 0, "in spatial convolution, '--%s' is " "mandatory: you should use it to set the %s", cp->tl.tilesize ? "numchannels" : "tilesize", ( cp->tl.tilesize ? "number of channels along each dimension of the input" : "size of tiles to cover the input along each " "dimension" ) ); } } static void ui_check_options_and_arguments(struct convolveparams *p) { int kernel_type; if(p->filename) { /* If input is FITS. */ if( (p->isfits=gal_fits_file_recognized(p->filename)) ) { /* Check if a HDU is given. */ if( p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified. When the input is a " "FITS file, a HDU must also be specified, you can use " "the '--hdu' ('-h') option and give it the HDU number " "(starting from zero), extension name, or anything " "acceptable by CFITSIO"); /* If its an image, make sure column isn't given (in case the user confuses an image with a table). */ p->hdu_type=gal_fits_hdu_format(p->filename, p->cp.hdu, "--hdu"); if(p->hdu_type==IMAGE_HDU && p->column) error(EXIT_FAILURE, 0, "%s (hdu: %s): is a FITS image " "extension. The '--column' option is only applicable " "to tables.", p->filename, p->cp.hdu); } } if(p->kernelname) { /* If input is FITS. */ if( gal_fits_file_recognized(p->kernelname) ) { /* Check if a HDU is given. */ if( p->khdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified. When the kernel is a " "FITS file, a HDU must also be specified, you can use " "the '--khdu' ('-u') option and give it the HDU number " "(starting from zero), extension name, or anything " "acceptable by CFITSIO"); /* If its an image, make sure column isn't given (in case the user confuses an image with a table). */ kernel_type=gal_fits_hdu_format(p->kernelname, p->khdu, "--khdu"); if(kernel_type==IMAGE_HDU && p->kernelcolumn) error(EXIT_FAILURE, 0, "%s (hdu: %s): is a FITS image " "extension. The '--kernelcolumn' option is only " "applicable to tables.", p->kernelname, p->khdu); } } } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static gal_data_t * ui_read_column(struct convolveparams *p, int i0k1) { int tformat; char *source; gal_data_t *out, *cinfo; gal_list_str_t *lines, *column=NULL; size_t ncols, nrows, counter=0; char *hdu = i0k1==0 ? p->cp.hdu : p->khdu; char *name = i0k1==0 ? "input" : "kernel"; char *filename = i0k1==0 ? p->filename : p->kernelname; char *columnname = i0k1==0 ? p->column : p->kernelcolumn; /* Read input from standard input when necessary (only if 'filename' is not given). */ lines=gal_options_check_stdin(filename, p->cp.stdintimeout, name); /* If no column is specified, Convolve will abort and an error will be printed when the table has more than one column. If there is only one column, there is no need to specify any, so Convolve will use it. */ if(columnname==NULL) { /* Get the basic table information. */ cinfo=gal_table_info(filename, hdu, lines, &ncols, &nrows, &tformat, "--hdu"); gal_data_array_free(cinfo, ncols, 1); /* See how many columns it has and take the proper action. */ switch(ncols) { case 0: error(EXIT_FAILURE, 0, "%s contains no usable information", ( filename ? gal_checkset_dataset_name(filename, hdu) : "Standard input" )); case 1: gal_checkset_allocate_copy("1", &columnname); break; default: error(EXIT_FAILURE, 0, "%s is a table containing more than one " "column. However, the specific column to work on isn't " "specified.\n\n" "Please use the '--column' ('-c') or '--kernelcolumn' " "options (depending on which dataset it is) to specify a " "column. You can either give it the column number " "(couting from 1), or a match/search in its meta-data " "(e.g., column names).\n\n" "For more information, please run the following command " "(press the 'SPACE' key to go down and 'q' to return to the " "command-line):\n\n" " $ info gnuastro \"Selecting table columns\"\n", ( filename ? gal_checkset_dataset_name(filename, hdu) : "standard input (pipe from another program)" )); } } gal_list_str_add(&column, columnname, 0); /* Read the desired column(s). */ out=gal_table_read(filename, hdu, lines, column, p->cp.searchin, p->cp.ignorecase, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap, NULL, "--hdu"); gal_list_str_free(lines, 1); /* Confirm if only one column was read (it is possible that a regexp '--searchin' value, gives a match to more than one column). */ if(out->next!=NULL) { if(filename) source=gal_checkset_dataset_name(filename, hdu); else source="standard-input"; error(EXIT_FAILURE, 0, "%s: more than one column in input table " "mached the search criteria. Please limit the match by " "specifying the exact name (if its unique) or column " "number", source); } /* Make sure it is a usable datatype. */ switch(out->type) { case GAL_TYPE_BIT: case GAL_TYPE_STRLL: case GAL_TYPE_STRING: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, " read column number %zu has a %s type, " "which is not currently supported by %s", counter, gal_type_name(out->type, 1), PROGRAM_NAME); } out=gal_data_copy_to_new_type_free(out, INPUT_USE_TYPE); /* If the input was from standard input, we can actually write this into it (for future reporting). */ if(filename==NULL) gal_checkset_allocate_copy("standard-input", ( i0k1==0 ? &p->filename : &p->kernelname )); /* One-dimensional convolution is only supported in spatial-mode convolution. */ p->domain=CONVOLVE_DOMAIN_SPATIAL; /* Clean up and return. */ gal_list_str_free(column, 0); return out; } /* Read the input dataset. */ static void ui_read_input(struct convolveparams *p) { /* To see if we should read it as a table. */ p->input=NULL; /* If the input is a FITS image or any recognized array file format, then read it as an array, otherwise, as a table. */ if( p->filename && gal_array_name_recognized(p->filename) ) if (p->isfits && p->hdu_type==IMAGE_HDU) { p->input=gal_array_read_one_ch_to_type(p->filename, p->cp.hdu, NULL, INPUT_USE_TYPE, p->cp.minmapsize, p->cp.quietmmap, "--hdu"); p->input->wcs=gal_wcs_read(p->filename, p->cp.hdu, p->cp.wcslinearmatrix, 0, 0, &p->input->nwcs, "--hdu"); p->input->ndim=gal_dimension_remove_extra(p->input->ndim, p->input->dsize, p->input->wcs); } /* The input isn't an image (wasn't read yet), so we'll read it as a column. */ if(p->input==NULL) p->input=ui_read_column(p, 0); } /* Read the kernel. VERY IMPORTANT: We can't use the 'fits_img_read_kernel' because the Convolve program also does de-convolution. */ static void ui_read_kernel(struct convolveparams *p) { /* Read the image into file. */ if( p->kernelname && p->input->ndim>1 && gal_array_name_recognized(p->kernelname) ) { p->kernel = gal_array_read_one_ch_to_type(p->kernelname, p->khdu, NULL, INPUT_USE_TYPE, p->cp.minmapsize, p->cp.quietmmap, "--khdu"); p->kernel->ndim=gal_dimension_remove_extra(p->kernel->ndim, p->kernel->dsize, p->kernel->wcs); } else p->kernel=ui_read_column(p, 1); /* Make sure that the kernel and input have the same number of dimensions. */ if(p->kernel->ndim!=p->input->ndim) error(EXIT_FAILURE, 0, "input datasets must have the same number of " "dimensions"); } static void ui_preparations(struct convolveparams *p) { int check=0; double sumv=0; size_t i, size; gal_data_t *sum; float *f, *fp, tmp, *kernel; struct gal_options_common_params *cp=&p->cp; char *outsuffix = p->makekernel ? "_kernel.fits" : "_convolved.fits"; /* Read the input dataset. */ ui_read_input(p); /* Currently Convolve only works on 1D, 2D and 3D datasets. */ if(p->input->ndim>3) error(EXIT_FAILURE, 0, "%s (hdu %s) has %zu dimensions. Currently " "Convolve only operates on 1D (table column, spectrum), 2D " "(image), and 3D (data cube) datasets", p->filename, cp->hdu, p->input->ndim); /* Domain-specific checks. */ if(p->domain==CONVOLVE_DOMAIN_FREQUENCY) { /* Check the dimensionality. */ if(p->input->ndim!=2) error(EXIT_FAILURE, 0, "%s (hdu %s) has %zu dimensions. Frequency " "domain convolution currently only operates on 2D images", p->filename, cp->hdu, p->input->ndim); /* Blank values. */ if( gal_blank_present(p->input, 1) ) fprintf(stderr, "\n----------------------------------------\n" "######## %s WARNING ########\n" "There are blank pixels in '%s' (hdu: '%s') and you have " "asked for frequency domain convolution. As a result, all " "the pixels in the output ('%s') will be blank. Only " "spatial domain convolution can account for blank pixels " "in the input data. You can run %s again with " "'--domain=spatial'\n" "----------------------------------------\n\n", PROGRAM_NAME, p->filename, cp->hdu, cp->output, PROGRAM_NAME); /* Frequency domain is only implemented in 2D. */ if( p->input->ndim==1 ) error(EXIT_FAILURE, 0, "Frequency domain convolution is currently " "not implemented on 1D datasets. Please use '--domain=spatial' " "to convolve this dataset"); } else { if(p->input->ndim>1) gal_tile_full_sanity_check(p->filename, cp->hdu, p->input, &cp->tl); } /* Read the file specified by --kernel. If makekernel is specified, then this is actually the sharper image and the input image (given as an argument) is the blurry image. */ if(p->makekernel) { /* Read the kernel. */ ui_read_kernel(p); /* Currently this is not implemented in 1D. */ if(p->kernel->ndim==1) error(EXIT_FAILURE, 0, "'--makekernel' is currently not available " "on 1D datasets"); else { /* Make sure the size of the kernel is the same as the input. */ if( p->input->dsize[0]!=p->kernel->dsize[0] || p->input->dsize[1]!=p->kernel->dsize[1] ) error(EXIT_FAILURE, 0, "with the '--makekernel' ('-m') option, " "the input image and the image specified with the " "'--kernel' ('-k') option should have the same size. The " "lower resolution input image (%s) has %zux%zu pixels " "while the sharper image (%s) specified with the kernel " "option has %zux%zu pixels", p->filename, p->input->dsize[1], p->input->dsize[0], p->kernelname, p->kernel->dsize[1], p->kernel->dsize[0]); /* Divide both images by their sum so their lowest frequency becomes 1 and their division (in the frequency domain) would be meaningful. */ sum=gal_statistics_sum(p->input); sum=gal_data_copy_to_new_type_free(sum, GAL_TYPE_FLOAT32); p->input = gal_arithmetic(GAL_ARITHMETIC_OP_DIVIDE, 1, GAL_ARITHMETIC_FLAGS_BASIC, p->input, sum); sum=gal_statistics_sum(p->kernel); sum=gal_data_copy_to_new_type_free(sum, GAL_TYPE_FLOAT32); p->kernel = gal_arithmetic(GAL_ARITHMETIC_OP_DIVIDE, 1, GAL_ARITHMETIC_FLAGS_BASIC, p->kernel, sum); } } /* Read the kernel. If there is anything particular to Convolve, then don't use the standard kernel reading function in fits.c. Otherwise just use the same one that all programs use. The standard one is faster because it mixes the NaN conversion and also the normalization into one loop. */ else { /* Read in the kernel array: */ ui_read_kernel(p); /* Check if the size along each dimension of the kernel is an odd number. If they are all an odd number, then the for each dimension, check will be incremented once. */ for(i=0;ikernel->ndim;++i) check += p->kernel->dsize[i]%2; if(check!=p->kernel->ndim) error(EXIT_FAILURE, 0, "%s: the kernel has to have an odd number of " "elements in all dimensions (there has to be one element/pixel " "in the center). At least one of the dimensions of doesn't " "have an odd number of pixels", gal_checkset_dataset_name(p->kernelname, p->khdu)); /* If there are any NaN pixels, set them to zero and normalize it. A blank pixel in a kernel is going to make a completely blank output. */ if( !p->nokernelnorm ) { sumv=0; fp=(f=p->kernel->array)+p->kernel->size; do { if(isnan(*f)) *f=0.0f; else sumv+=*f; } while(++fkernel->flag |= GAL_DATA_FLAG_BLANK_CH; p->kernel->flag &= ~GAL_DATA_FLAG_HASBLANK; f=p->kernel->array; do *f++ *= 1/sumv; while(fnokernelflip ) { size=p->kernel->size; kernel=p->kernel->array; for(i=0;ikernel->size/2;++i) { tmp = kernel[ i ]; kernel[ i ] = kernel[ size - i - 1 ]; kernel[ size - i - 1 ] = tmp; } } } /* Set the output name if the user hasn't set it. */ if(cp->output==NULL) cp->output=gal_checkset_automatic_output(cp, p->filename, outsuffix); gal_checkset_writable_remove(cp->output, p->filename, 0, cp->dontdelete); if(p->checkfreqsteps) { p->freqstepsname=gal_checkset_automatic_output(cp, p->filename, "_freqsteps.fits"); gal_checkset_writable_remove(p->freqstepsname, p->filename, 0, cp->dontdelete); } if(cp->tl.checktiles) { cp->tl.tilecheckname=gal_checkset_automatic_output(cp, p->filename, "_tiled.fits"); gal_checkset_writable_remove(cp->tl.tilecheckname, p->filename, 0, cp->dontdelete); } } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ static void ui_print_intro(struct convolveparams *p) { printf("%s started on %s", PROGRAM_NAME, ctime(&p->rawtime)); printf(" - Using %zu CPU threads.\n", p->cp.numthreads); printf(" - Input: %s\n", gal_checkset_dataset_name(p->filename, p->cp.hdu)); printf(" - Kernel: %s\n", gal_checkset_dataset_name(p->kernelname, p->khdu)); } void ui_read_check_inputs_setup(int argc, char *argv[], struct convolveparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Prepare all the options as FITS keywords to write in output later. */ gal_options_as_fits_keywords(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Everything is ready, print the intro if not in quiet mode. */ if(!p->cp.quiet) ui_print_intro(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct convolveparams *p, struct timeval *t1) { /* Free the allocated arrays: */ free(p->khdu); free(p->cp.hdu); free(p->cp.output); gal_data_free(p->input); gal_data_free(p->kernel); /* Print the final message. */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); } gnuastro-0.22/bin/convolve/convolve.c0000644000175000017500000006124514551337306013401 /********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "convolve.h" /******************************************************************/ /************* Complex numbers *****************/ /******************************************************************/ /* We have a complex (R+iI) array and we want to display it. But we can only do that either with the spectrum, or the phase: Spectrum: sqrt(R^2+I^2) Phase: arctan(I/R) */ void complextoreal(double *c, size_t size, int action, double **output) { double *out, *o, *of; /* Allocate the space for the real array. */ *output=out=gal_pointer_allocate(GAL_TYPE_FLOAT64, size, 0, __func__, "output"); /* Fill the real array with the derived value from the complex array. */ of=(o=out)+size; switch(action) { case COMPLEX_TO_REAL_SPEC: do { *o++ = sqrt( *c**c + *(c+1)**(c+1) ); c+=2; } while(ominsharpspec) { r = ( ( (*a * *b) + (*(a+1) * *(b+1)) ) / ( *b * *b + *(b+1) * *(b+1) ) ); *(a+1) = ( ( (*(a+1) * *b) - (*a * *(b+1)) ) / ( *b * *b + *(b+1) * *(b+1) ) ); *a=r; /* Just as a sanity check (the result should never be larger than one. */ if(sqrt(*a**a + *(a+1)**(a+1))>1.00001f) *a=*(a+1)=0.0f; } else { *a=0; *(a+1)=0; } a+=2; b+=2; } while(ainput->dsize[0], is1=p->input->dsize[1]; size_t ks0=p->kernel->dsize[0], ks1=p->kernel->dsize[1]; float *f, *ff, *input=p->input->array, *kernel=p->kernel->array; /* Find the sizes of the padded image, note that since the kernel sizes are always odd, the extra padding on the input image is always going to be an even number (clearly divisable). */ ps0=p->ps0 = p->makekernel ? is0 : is0 + ks0 - 1; ps1=p->ps1 = p->makekernel ? is1 : is1 + ks1 - 1; /* The Discrete Fourier transforms operate faster on even-sized arrays. So if the padded sides are not even, make them so: */ if(ps0%2) ps0=p->ps0=ps0+1; if(ps1%2) ps1=p->ps1=ps1+1; /* Allocate the space for the padded input image and fill it. */ pimg=p->pimg=gal_pointer_allocate(GAL_TYPE_FLOAT64, 2*ps0*ps1, 0, __func__, "pimg"); for(i=0;ipker=gal_pointer_allocate(GAL_TYPE_FLOAT64, 2*ps0*ps1, 0, __func__, "pker"); for(i=0;ikernel->dsize[0]-1'. Since 'p->kernel->dsize[0]' is always odd, the padding will always be even. */ void removepaddingcorrectroundoff(struct convolveparams *p) { size_t ps1=p->ps1; size_t *isize=p->input->dsize; float *o, *input=p->input->array; double *d, *df, *start, *rpad=p->rpad; size_t i, hi0, hi1, mkwidth=2*p->makekernel-1; /* Set all the necessary parameters to crop the desired region. hi0 and hi1 are the coordinates of the first pixel in the output image. In the case of deconvolution, if the maximum radius is larger than the input image, we will also only be using region that contains non-zero rows and columns. */ if(p->makekernel) { hi0 = mkwidth < isize[0] ? p->ps0/2-p->makekernel : 0; hi1 = mkwidth < isize[1] ? p->ps1/2-p->makekernel : 0; isize[0] = mkwidth < isize[0] ? 2*p->makekernel-1 : isize[0]; isize[1] = mkwidth < isize[1] ? 2*p->makekernel-1 : isize[1]; } else { hi0 = ( p->kernel->dsize[0] - 1 )/2; hi1 = ( p->kernel->dsize[1] - 1 )/2; } /* To start with, 'start' points to the first pixel in the final image: */ start=&rpad[hi0*ps1+hi1]; for(i=0;iCONVFLOATINGPOINTERR ) ? *d : 0.0f; while (++dcp.numthreads*sizeof *fp); if(fp==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for fp", __func__, p->cp.numthreads*sizeof *fp); /* Initialize the gsl_fft_wavetable structures (these are thread safe): */ fp[0].ps0wave=gsl_fft_complex_wavetable_alloc(p->ps0); fp[0].ps1wave=gsl_fft_complex_wavetable_alloc(p->ps1); /* Set the values for all the other threads: */ for(i=0;icp.numthreads;++i) { fp[i].p=p; fp[i].ps0wave=fp[0].ps0wave; fp[i].ps1wave=fp[0].ps1wave; fp[i].ps0work=gsl_fft_complex_workspace_alloc(p->ps0); fp[i].ps1work=gsl_fft_complex_workspace_alloc(p->ps1); } } void freefp(struct fftonthreadparams *fp) { size_t i; gsl_fft_complex_wavetable_free(fp[0].ps0wave); gsl_fft_complex_wavetable_free(fp[0].ps1wave); for(i=0;ip->cp.numthreads;++i) { gsl_fft_complex_workspace_free(fp[i].ps0work); gsl_fft_complex_workspace_free(fp[i].ps1work); } free(fp); } /* Unfortunately I don't understand why the division operation in deconvolution (makekernel) does not produce a centered image, the image is translated by half the input size in both dimensions. So I am correcting this in the spatial domain here. */ void correctdeconvolve(struct convolveparams *p, double **spatial) { double r, *s, *n, *d, *df, sum=0.0f; size_t i, j, ps0=p->ps0, ps1=p->ps1; int ii, jj, ci=p->ps0/2-1, cj=p->ps1/2-1; /* Check if the image has even sides. */ if(ps0%2 || ps1%2) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s. The padded " "image sides are not an even number", __func__, PACKAGE_BUGREPORT); /* First convert the complex image to a real image: */ complextoreal(p->pimg, ps0*ps1, COMPLEX_TO_REAL_SPEC, &s); /* Allocate the array to keep the new values. */ errno=0; n=malloc(ps0*ps1*sizeof *n); if(n==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for 'n'", __func__, ps0*ps1*sizeof *n); /* Put the elements in their proper place: For example in one dimension where the values are actually the true distances: s[0]=0, s[1]=1, s[2]=2, s[3]=3, s[4]=4, s[5]=5 We want the value 0 to be in the 'center'. Note that 's' is periodic, for example the next 6 elements have distances: s[6]=0, s[7]=1, s[8]=2, s[9]=3, s[10]=4, s[11]=5 So a 'center'ed array would be like: s[0]=4, s[1]=5, s[2]=0, s[3]=1, s[4]=2, s[5]=3 The relations between the old (i and j) and new (ii and jj) come from something like the above line. */ for(i=0;ips0/2 ? i-(ps0/2+1) : i+ps0/2-1; for(j=0;jps1/2 ? j-(ps1/2+1) : j+ps1/2-1; r=sqrt( (ii-ci)*(ii-ci) + (jj-cj)*(jj-cj) ); sum += n[ii*ps1+jj] = r < p->makekernel ? s[i*ps1+j] : 0; /*printf("(%zu, %zu) --> (%zu, %zu)\n", i, j, ii, jj); */ } } /* Divide all elements by the sum so the kernel is normalized: */ df=(d=n)+ps0*ps1; do *d++/=sum; while(ds0 and p->s1. When there are two images, then the index numbers are going to be at most double p->s0 and p->s1. In this case, those index values which are smaller than p->s0 or p->s1 belong to the input image and those which are equal or larger than larger belong to the kernel image (after subtraction for p->s0 or p->s1). */ void * onedimensionfft(void *inparam) { struct fftonthreadparams *fp = (struct fftonthreadparams *)inparam; struct convolveparams *p=fp->p; double *d, *df; size_t indmultip, maxindex; gsl_fft_complex_workspace *work; gsl_fft_complex_wavetable *wavetable; double *data, *pimg=p->pimg, *pker=p->pker; int forward1backwardn1=fp->forward1backwardn1; size_t i, size, stride=fp->stride, *indexs=fp->indexs; /* Set the number of points to transform, indmultip: The value to be multiplied by the value in indexs to specify the first pixel of the row or column. */ if(stride==1) { size=p->ps1; wavetable=fp->ps1wave; work=fp->ps1work; maxindex=p->ps0; indmultip=p->ps1; } else { size=p->ps0; wavetable=fp->ps0wave; work=fp->ps0work; maxindex=p->ps1; indmultip=1; } /* Go over all the rows or columns given for this thread. NOTE: The final array (after the two FFT'd arrays are multiplied by each other) is stored in p->pimg. So the check below works both in the forward and the backward transformation. */ for(i=0; indexs[i]!=GAL_BLANK_SIZE_T; ++i) { data = ( indexs[i]cp.numthreads>1) pthread_barrier_wait(fp->b); return NULL; } /* Do the forward Fast Fourier Transform either on two input images (the padded image and kernel) or on one image (the multiplication of the FFT of the two). In the second case, it is assumed that we are looking at the complex conjugate of the array so in practice this will be a backward transform. */ void twodimensionfft(struct convolveparams *p, struct fftonthreadparams *fp, int forward1backwardn1) { int err; pthread_t t; /* All thread ids saved in this, not used. */ char *mmapname=NULL; pthread_attr_t attr; pthread_barrier_t b; size_t i, nb, *indexs, thrdcols; size_t nt=p->cp.numthreads, multiple=0; /* First we are going to get the 1D fourier transform on the rows of both images. */ if(forward1backwardn1==1) multiple=2; else if(forward1backwardn1==-1) multiple=1; else error(EXIT_FAILURE, 0, "%s: a bug! The value of the variable " "'forward1backwardn1' is %d not 1 or 2. Please contact us at %s " "so we can find the cause of the problem and fix it", __func__, forward1backwardn1, PACKAGE_BUGREPORT); /* ==================== */ /* 1D FFT on each row. */ /* ==================== */ mmapname=gal_threads_dist_in_threads(multiple*p->ps0, nt, p->input->minmapsize, p->cp.quietmmap, &indexs, &thrdcols); if(nt==1) { fp[0].stride=1; fp[0].indexs=&indexs[0]; fp[0].forward1backwardn1=forward1backwardn1; onedimensionfft(&fp[0]); } else { /* Initialize the attributes. Note that this running thread (that spinns off the nt threads) is also a thread, so the number the barrier should be one more than the number of threads spinned off. */ if( multiple*p->ps0 < nt ) nb=multiple*p->ps0+1; else nb=nt+1; gal_threads_attr_barrier_init(&attr, &b, nb); /* Spin off the threads: */ for(i=0;icp.quietmmap); else free(indexs); /* ====================== */ /* 1D FFT on each column. */ /* ====================== */ /* No comments, exact duplicate of above, except the p->ps1s! */ mmapname=gal_threads_dist_in_threads(multiple*p->ps1, nt, p->input->minmapsize, p->cp.quietmmap, &indexs, &thrdcols); if(nt==1) { fp[0].stride=p->ps1; fp[0].indexs=indexs; fp[0].forward1backwardn1=forward1backwardn1; onedimensionfft(&fp[0]); } else { if( multiple*p->ps1 < nt ) nb=multiple*p->ps1+1; else nb=nt+1; gal_threads_attr_barrier_init(&attr, &b, nb); for(i=0;ips1; /* On each column, stride is p->ps1 */ fp[i].indexs=&indexs[i*thrdcols]; fp[i].forward1backwardn1=forward1backwardn1; err=pthread_create(&t, &attr, onedimensionfft, &fp[i]); if(err) error(EXIT_FAILURE, 0, "%s: can't create thread %zu for columns", __func__, i); } pthread_barrier_wait(&b); pthread_attr_destroy(&attr); pthread_barrier_destroy(&b); } /* Clean up, note that 'indexs' may be memory-mapped. */ if(mmapname) gal_pointer_mmap_free(&mmapname, p->cp.quietmmap); else free(indexs); } void convolve_frequency(struct convolveparams *p) { double *tmp; size_t dsize[2]; struct timeval t1; gal_data_t *data=NULL; struct fftonthreadparams *fp; /* Make the padded arrays. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); frequency_make_padded_complex(p); if(!p->cp.quiet) gal_timing_report(&t1, "Input and Kernel images padded.", 1); if(p->checkfreqsteps) { /* Prepare the data structure for viewing the steps, note that we don't need the array that is initially made. */ dsize[0]=p->ps0; dsize[1]=p->ps1; data=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 2, dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); free(data->array); /* Save the padded input image. */ complextoreal(p->pimg, p->ps0*p->ps1, COMPLEX_TO_REAL_REAL, &tmp); data->array=tmp; data->name="input padded"; gal_fits_img_write(data, p->freqstepsname, NULL, 0); free(tmp); data->name=NULL; /* Save the padded kernel image. */ complextoreal(p->pker, p->ps0*p->ps1, COMPLEX_TO_REAL_REAL, &tmp); data->array=tmp; data->name="kernel padded"; gal_fits_img_write(data, p->freqstepsname, NULL, 0); free(tmp); data->name=NULL; } /* Initialize the structures: */ fftinitializer(p, &fp); /* Forward 2D FFT on each image. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); twodimensionfft(p, fp, 1); if(!p->cp.quiet) gal_timing_report(&t1, "Images converted to frequency domain.", 1); if(p->checkfreqsteps) { complextoreal(p->pimg, p->ps0*p->ps1, COMPLEX_TO_REAL_SPEC, &tmp); data->array=tmp; data->name="input transformed"; gal_fits_img_write(data, p->freqstepsname, NULL, 0); free(tmp); data->name=NULL; complextoreal(p->pker, p->ps0*p->ps1, COMPLEX_TO_REAL_SPEC, &tmp); data->array=tmp; data->name="kernel transformed"; gal_fits_img_write(data, p->freqstepsname, NULL, 0); free(tmp); data->name=NULL; } /* Multiply or divide the two arrays and save them in the output.*/ if(!p->cp.quiet) gettimeofday(&t1, NULL); if(p->makekernel) { complexarraydivide(p->pimg, p->pker, p->ps0*p->ps1, p->minsharpspec); if(!p->cp.quiet) gal_timing_report(&t1, "Divided in the frequency domain.", 1); } else { complexarraymultiply(p->pimg, p->pker, p->ps0*p->ps1); if(!p->cp.quiet) gal_timing_report(&t1, "Multiplied in the frequency domain.", 1); } if(p->checkfreqsteps) { complextoreal(p->pimg, p->ps0*p->ps1, COMPLEX_TO_REAL_SPEC, &tmp); data->array=tmp; data->name=p->makekernel ? "Divided" : "Multiplied"; gal_fits_img_write(data, p->freqstepsname, NULL, 0); free(tmp); data->name=NULL; } /* Forward (in practice inverse) 2D FFT on each image. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); twodimensionfft(p, fp, -1); if(p->makekernel) correctdeconvolve(p, &p->rpad); else complextoreal(p->pimg, p->ps0*p->ps1, COMPLEX_TO_REAL_REAL, &p->rpad); if(!p->cp.quiet) gal_timing_report(&t1, "Converted back to the spatial domain.", 1); if(p->checkfreqsteps) { data->array=p->rpad; data->name="padded output"; gal_fits_img_write(data, p->freqstepsname, NULL, 0); data->name=NULL; data->array=NULL; } /* Free the padded arrays (they are no longer needed) and put the converted array (that is real, not complex) in p->pimg. */ gal_data_free(data); free(p->pimg); free(p->pker); /* Crop out the center, numbers smaller than 10^{-17} are errors, remove them. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); removepaddingcorrectroundoff(p); if(!p->cp.quiet) gal_timing_report(&t1, "Padded parts removed.", 1); /* Free all the allocated space. */ freefp(fp); } void convolve_spatial(struct convolveparams *p) { gal_data_t *out, *check; int multidim=p->input->ndim>1; struct gal_options_common_params *cp=&p->cp; /* Prepare the mesh structure. */ if(multidim) gal_tile_full_two_layers(p->input, &cp->tl); /* Save the tile IDs if they are requested. */ if(multidim && cp->tl.tilecheckname) { check=gal_tile_block_check_tiles(cp->tl.tiles); gal_fits_img_write(check, cp->tl.tilecheckname, NULL, 0); gal_data_free(check); } /* Do the spatial convolution. One of the main reason someone would want to do spatial domain convolution with this Convolve program is edge correction. So by default we assume it and will only ignore it if the user asks. */ out=gal_convolve_spatial(multidim ? cp->tl.tiles : p->input, p->kernel, cp->numthreads, multidim ? !p->noedgecorrection : 1, multidim ? cp->tl.workoverch : 1, p->conv_on_blank); /* Clean up: free the actual input and replace it's pointer with the convolved dataset to save as output. */ gal_tile_full_free_contents(&cp->tl); gal_data_free(p->input); p->input=out; } /******************************************************************/ /************* Top-level function *****************/ /******************************************************************/ void convolve(struct convolveparams *p) { struct gal_options_common_params *cp=&p->cp; /* Do the convolution. */ if(p->domain==CONVOLVE_DOMAIN_SPATIAL) convolve_spatial(p); else convolve_frequency(p); /* Write Convolve's parameters as keywords into the first extension of the output. */ if( gal_fits_name_is_fits(p->cp.output) ) { gal_fits_key_write_filename("input", p->filename, &cp->ckeys, 1, cp->quiet); gal_fits_key_write(cp->ckeys, cp->output, "0", "NONE", 1, 1); } /* Save the output (which is in p->input) array. */ if(p->input->ndim==1) gal_table_write(p->input, NULL, NULL, p->cp.tableformat, p->cp.output, "CONVOLVED", 0, 0); else gal_fits_img_write_to_type(p->input, cp->output, NULL, cp->type, 0); /* Inform the user that the job is done. */ if(!p->cp.quiet) printf(" - Output: %s\n", p->cp.output); } gnuastro-0.22/bin/convolve/main.h0000644000175000017500000000752014551337306012473 /********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include #include /* Program names. */ #define PROGRAM_NAME "Convolve" /* Program full name. */ #define PROGRAM_EXEC "astconvolve" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Macros */ #define CONVFLOATINGPOINTERR 1e-10 #define INPUT_USE_TYPE GAL_TYPE_FLOAT32 /* Enumerators */ enum complex_to_real { COMPLEX_TO_REAL_INVALID, /* ==0 by C standard. */ COMPLEX_TO_REAL_SPEC, COMPLEX_TO_REAL_PHASE, COMPLEX_TO_REAL_REAL, }; enum domain_codes { CONVOLVE_DOMAIN_INVALID, /* ==0 by C standard. */ CONVOLVE_DOMAIN_SPATIAL, CONVOLVE_DOMAIN_FREQUENCY, }; /* Processing parameters structure */ struct convolveparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ char *filename; /* Name of input file. */ char *column; /* Name of column if input is a table. */ char *kernelname; /* File name of kernel. */ char *khdu; /* HDU of kernel. */ char *kernelcolumn; /* Column to read the input kernel. */ uint8_t nokernelflip; /* Do not flip the kernel. */ uint8_t nokernelnorm; /* Do not normalize the kernel. */ double minsharpspec; /* Deconvolution: min spect. of sharp img. */ uint8_t checkfreqsteps; /* View the frequency domain steps. */ char *domainstr; /* String value specifying domain. */ size_t makekernel; /* Make a kernel to create input. */ uint8_t noedgecorrection; /* Do not correct spatial edge effects. */ uint8_t conv_on_blank; /* Do convolution on blank pixels also. */ /* Internal */ int isfits; /* Input is a FITS file. */ int hdu_type; /* Type of HDU (image or table). */ int domain; /* Frequency or spatial domain conv. */ gal_data_t *input; /* Input image array. */ gal_data_t *kernel; /* Input Kernel array. */ double *pimg; /* Padded image array. */ double *pker; /* Padded kernel array. */ double *rpad; /* Real final image before removing pad'd. */ size_t ps0; /* Padded size along first C axis. */ size_t ps1; /* Padded size along second C axis. */ char *freqstepsname; /* Name of file to check frequency steps. */ time_t rawtime; /* Starting time of the program. */ }; #endif gnuastro-0.22/bin/convolve/authors-cite.h0000644000175000017500000000302514551337306014152 /********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/convolve/args.h0000644000175000017500000001230314551337306012476 /********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Inputs */ { "kernel", UI_KEY_KERNEL, "FITS", 0, "File name of kernel for convolution.", GAL_OPTIONS_GROUP_INPUT, &p->kernelname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "column", UI_KEY_COLUMN, "STR", 0, "Column name or number if input is a table.", GAL_OPTIONS_GROUP_INPUT, &p->column, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "khdu", UI_KEY_KHDU, "STR", 0, "HDU containing the kernel.", GAL_OPTIONS_GROUP_INPUT, &p->khdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "kernelcolumn", UI_KEY_KERNELCOLUMN, "STR", 0, "Column name or number if kernel is a table.", GAL_OPTIONS_GROUP_INPUT, &p->kernelcolumn, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "nokernelflip", UI_KEY_NOKERNELFLIP, 0, 0, "Do not flip the kernel image.", GAL_OPTIONS_GROUP_INPUT, &p->nokernelflip, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "nokernelnorm", UI_KEY_NOKERNELNORM, 0, 0, "Do not normalize the kernel image.", GAL_OPTIONS_GROUP_INPUT, &p->nokernelnorm, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "minsharpspec", UI_KEY_MINSHARPSPEC, "FLT", 0, "Deconvolution: min spectrum of sharp img.", GAL_OPTIONS_GROUP_INPUT, &p->minsharpspec, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Outputs */ { "checkfreqsteps", UI_KEY_CHECKFREQSTEPS, 0, 0, "View the steps in the frequency domain.", GAL_OPTIONS_GROUP_OUTPUT, &p->checkfreqsteps, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "noedgecorrection", UI_KEY_NOEDGECORRECTION, 0, 0, "Do not correct the edges in the spatial domain", GAL_OPTIONS_GROUP_OUTPUT, &p->noedgecorrection, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "conv-on-blank", UI_KEY_CONVONBLANK, 0, 0, "Do convolution on blank pixels also.", GAL_OPTIONS_GROUP_OUTPUT, &p->conv_on_blank, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Operating mode. */ { "domain", UI_KEY_DOMAIN, "STR", 0, "Convolution domain: 'spatial', 'frequency'.", GAL_OPTIONS_GROUP_OPERATING_MODE, &p->domainstr, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "makekernel", UI_KEY_MAKEKERNEL, "INT", 0, "Make 2*INT kernel to create input image.", GAL_OPTIONS_GROUP_OPERATING_MODE, &p->makekernel, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/convolve/ui.h0000644000175000017500000000407614551337306012167 /********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_MESH_GRID = GAL_OPTIONS_GROUP_AFTER_COMMON, }; /* Available letters for short options: a b e f g i j l p s v w x y z A B E G J L O Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_KERNEL = 'k', UI_KEY_KHDU = 'u', UI_KEY_MINSHARPSPEC = 'H', UI_KEY_CHECKFREQSTEPS = 'C', UI_KEY_TILESIZE = 't', UI_KEY_COLUMN = 'c', UI_KEY_NUMCHANNELS = 'n', UI_KEY_REMAINDERFRAC = 'r', UI_KEY_DOMAIN = 'd', UI_KEY_MAKEKERNEL = 'm', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_KERNELCOLUMN = 1000, UI_KEY_CONVONBLANK, UI_KEY_NOKERNELFLIP, UI_KEY_NOKERNELNORM, UI_KEY_NOEDGECORRECTION, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct convolveparams *p); void ui_free_report(struct convolveparams *p, struct timeval *t1); #endif gnuastro-0.22/bin/convolve/convolve.h0000644000175000017500000000353314551337306013402 /********************************************************************* Convolve - Convolve input data with a given kernel. Convolve is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef CONVOLVE_H #define CONVOLVE_H #include #include struct fftonthreadparams { /* Operating info: */ size_t id; /* The number of this thread. */ struct convolveparams *p; /* Pointer to main program structure. */ int forward1backwardn1; /* Operate on one or two images. */ size_t stride; /* 1D FFT on rows or columns? */ /* Pointers to GSL FFT structures: */ gsl_fft_complex_wavetable *ps0wave; gsl_fft_complex_wavetable *ps1wave; gsl_fft_complex_workspace *ps0work; gsl_fft_complex_workspace *ps1work; /* Thread parameters. */ size_t *indexs; /* Indexs to be used in this thread. */ pthread_barrier_t *b; /* Barrier to keep threads waiting. */ }; void convolve(struct convolveparams *p); #endif gnuastro-0.22/bin/cosmiccal/0000755000175000017500000000000014557514201011551 5gnuastro-0.22/bin/cosmiccal/Makefile.am0000644000175000017500000000324114557211443013527 ## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2016-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astcosmiccal ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astcosmiccal_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astcosmiccal_SOURCES = main.c ui.c cosmiccal.c EXTRA_DIST = main.h authors-cite.h args.h ui.h cosmiccal.h \ astcosmiccal-complete.bash ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astcosmiccal.conf gnuastro-0.22/bin/cosmiccal/astcosmiccal.conf0000644000175000017500000000303214551337306015006 # Default parameters (System) for CosmicCalculator. # CosmicCalculator is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astcosmiccal --help # Full list of options, short doc. # $ astcosmiccal -P # Print all options and used values. # $ info astcosmiccal # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Citation # ======== # # The current default cosmological values in CosmicCalculator are taken # from the Planck 2018 results (paper VI, arXiv:1807.06209, Table 2, last # column: "TT,TE,EE+lowE+lensing+BAO"). # # https://arxiv.org/abs/1807.06209 # or # https://ui.adsabs.harvard.edu/abs/2020A%26A...641A...6P # # IMPORTANT NOTES: If you change these system-wide default values, please # change this comment and cite the source. # Input: H0 67.66 olambda 0.6889 omatter 0.3111 oradiation 0.0 # Output: # Spectral lines: lineunit angstrom gnuastro-0.22/bin/cosmiccal/Makefile.in0000644000175000017500000033777614557513747013603 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astcosmiccal$(EXEEXT) subdir = bin/cosmiccal ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astcosmiccal_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ cosmiccal.$(OBJEXT) astcosmiccal_OBJECTS = $(am_astcosmiccal_OBJECTS) am__DEPENDENCIES_1 = astcosmiccal_DEPENDENCIES = \ $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/cosmiccal.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/ui.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astcosmiccal_SOURCES) DIST_SOURCES = $(astcosmiccal_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib astcosmiccal_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astcosmiccal_SOURCES = main.c ui.c cosmiccal.c EXTRA_DIST = main.h authors-cite.h args.h ui.h cosmiccal.h \ astcosmiccal-complete.bash dist_sysconf_DATA = astcosmiccal.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/cosmiccal/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/cosmiccal/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astcosmiccal$(EXEEXT): $(astcosmiccal_OBJECTS) $(astcosmiccal_DEPENDENCIES) $(EXTRA_astcosmiccal_DEPENDENCIES) @rm -f astcosmiccal$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astcosmiccal_OBJECTS) $(astcosmiccal_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cosmiccal.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/cosmiccal.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/cosmiccal.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/cosmiccal/main.c0000644000175000017500000000305714551337306012571 /********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" /* needs main.h. */ #include "cosmiccal.h" /* needs main.h. */ int main (int argc, char *argv[]) { struct cosmiccalparams p={{{0},0},0}; /* Get the starting time. */ time(&p.rawtime); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run CosmicCalculator. */ cosmiccal(&p); /* Return successfully. */ return EXIT_SUCCESS; } gnuastro-0.22/bin/cosmiccal/ui.c0000644000175000017500000005222314557216671012270 /********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = ""; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will do cosmological " "calculations. If no redshfit is specified, it will only print the main " "input parameters. If only a redshift is given, it will print a table of " "all calculations. If any of the single row calculations are requested, " "only their values will be printed with a single space between each.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct cosmiccalparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; /* Program specific initializations. */ p->redshift = NAN; p->velocity = NAN; /* Modify the common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_OUTPUT: case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } /* Select specific options. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_QUIET: case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_NUMTHREADS: case GAL_OPTIONS_KEY_IGNORECASE: case GAL_OPTIONS_KEY_TABLEFORMAT: case GAL_OPTIONS_KEY_STDINTIMEOUT: cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct cosmiccalparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(arg[0]!='\0') argp_error(state, "currently %s doesn't take any arguments", PROGRAM_NAME); break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } static void * ui_add_to_single_value(struct argp_option *option, char *arg, char *filename, size_t lineno, void *params) { int linecode; double *dptr, val=NAN; gal_list_str_t *ltmp, *lines; struct cosmiccalparams *p = (struct cosmiccalparams *)params; /* In case of printing the option values. */ if(lineno==-1) error(EXIT_FAILURE, 0, "currently the options to be printed in one row " "(like '--age', '--luminositydist', and etc) do not support " "printing with the '--printparams' ('-P'), or writing into " "configuration files due to lack of time when implementing " "these features. You can put them into configuration files " "manually. Please get in touch with us at '%s', so we can " "implement it", PACKAGE_BUGREPORT); /* If this option is given in a configuration file, then 'arg' will not be NULL and we don't want to do anything if it is '0'. */ switch(option->key) { /* Options with arguments. */ case UI_KEY_LINEATZ: /* Make sure an argument is given. */ if(arg==NULL) error(EXIT_FAILURE, 0, "option '--lineatz' needs an argument"); /* The input can be a coma-separated string. */ lines=gal_options_parse_csv_strings_to_list(arg, filename, lineno); gal_list_str_reverse(&lines); /* the function returns the raw list. */ for(ltmp=lines;ltmp!=NULL;ltmp=ltmp->next) { /* If the argument is a number, read it, if not, see if it is a known specral line name. */ dptr=&val; if( gal_type_from_string((void **)(&dptr), ltmp->v, GAL_TYPE_FLOAT64) ) { linecode=gal_speclines_line_code(ltmp->v); if(linecode==GAL_SPECLINES_INVALID) error(EXIT_FAILURE, 0, "'%s' not a known spectral line name", ltmp->v); val=gal_speclines_line_angstrom(linecode); } gal_list_f64_add(&p->specific_arg, val); /* Add this option to the print list and return. */ gal_list_i32_add(option->value, option->key); } /* Activate the flag for sanity checks later. */ p->haslineatz=1; break; /* Options without arguments. */ default: if(arg) { /* Make sure the value is only '0' or '1'. */ if( arg[1]!='\0' && *arg!='0' && *arg!='1' ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the '--%s' " "option takes no arguments. In a configuration " "file it can only have the values '1' or '0', " "indicating if it should be used or not", option->name); /* Only proceed if the (possibly given) argument is 1. */ if(arg[0]=='0' && arg[1]=='\0') return NULL; } /* Add this option to the print list and return. */ gal_list_i32_add(option->value, option->key); } return NULL; } /* Parse the observed line properties: LINE,OBSERVED_WAVELENGHT. */ void * ui_parse_obsline(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { size_t nc, two=2; char *c, *linename; gal_data_t *obsline, *tobsline; double *dptr, *tdptr, manualwl=NAN; char *str, sstr[GAL_OPTIONS_STATIC_MEM_FOR_VALUES]; /* We want to print the stored values. */ if(lineno==-1) { /* Set the value pointer to 'obsline'. */ obsline=*(gal_data_t **)(option->value); dptr = obsline->array; /* First write the line name into the output string. */ nc=0; linename=gal_speclines_line_name(obsline->status); nc += sprintf(sstr+nc, "%s,", linename); /* Write the observed wavelength. */ sprintf(sstr+nc, "%g", dptr[0]); /* Copy the string into a dynamically allocated space, because it will be freed later.*/ gal_checkset_allocate_copy(sstr, &str); return str; } else { /* The first part of 'arg' (before the first comma) is not necessarily a number. So we need to separate the first part from the rest.*/ linename=arg; c=arg; while(*c!='\0' && *c!=',') ++c; arg = (*c=='\0') ? NULL : c+1; *c='\0'; /* Read the parameters. */ obsline=gal_options_parse_list_of_numbers(arg, filename, lineno, GAL_TYPE_FLOAT64); /* Only one number must be given as second argument. */ if(obsline==NULL || obsline->size!=1) error(EXIT_FAILURE, 0, "Wrong format given to '--obsline'. Only " "two values (line name/wavelengh, and observed wavelengh) " "must be given to it"); /* If a wavelength is given directly as a number (not a name), then put that number in a second element of the array. */ dptr=&manualwl; if( gal_type_from_string((void **)(&dptr), linename, GAL_TYPE_FLOAT64) ) { /* 'linename' isn't a number. */ obsline->status=gal_speclines_line_code(linename); if(obsline->status==GAL_SPECLINES_INVALID) error(EXIT_FAILURE, 0, "'%s' not recognized as a standard " "spectral line name", linename); } else { /* 'linename' is a number. */ /* Allocate the new space. */ tobsline=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &two, NULL, 0, -1, 1, NULL, NULL, NULL); tobsline->status=GAL_SPECLINES_INVALID; /* Write the values into tptr. */ dptr=obsline->array; tdptr=tobsline->array; tdptr[0]=dptr[0]; tdptr[1]=manualwl; /* Free the old dataset and use the new one. */ gal_data_free(obsline); obsline=tobsline; } /* Point 'option->value' to the dataset. */ *(gal_data_t **)(option->value) = obsline; /* Our job is done, return NULL. */ return NULL; } } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct cosmiccalparams *p) { int hasobsline=p->obsline!=NULL; int hasredshift=!isnan(p->redshift); int hasvelocity=!isnan(p->velocity); double sum = p->olambda + p->omatter + p->oradiation; /* Check if the density fractions add up to 1 (within floating point error). */ if( (sum > (1+1e-8) || sum < (1-1e-8)) && p->cp.quiet==0) error(EXIT_SUCCESS, 0, "WARNING: non-flat FLRW model: the curvature " "density parameter is %.8f; therefore angular diameter based " "distances like '--angulardiamdist' or '--arcsectandist' will " "be wrong in Gnuastro's current implementation; see " "https://savannah.gnu.org/bugs/?65195. This warning message " "can be disabled with '--quiet'", 1.0-sum); /* Make sure that '--listlines' and '--listlinesatz' aren't called together. */ if(p->listlines && p->listlinesatz) error(EXIT_FAILURE, 0, "'--listlines' and '--listlinesatz' can't be " "called together"); /* If any of the line options are requested, make sure that 'lineunit' is also given. */ if( (p->listlines || p->listlinesatz || p->haslineatz || hasobsline) && p->lineunit==0 ) error(EXIT_FAILURE, 0, "no '--lineunit' specified! For the " "operations on lines, it is necessary to specify the unit " "of the reported wavelength with this option. See the output " "of '--help' for acceptable values"); /* Make sure that '--redshift' and '--obsline' aren't called together. */ if( (hasredshift + hasvelocity + hasobsline) > 1 ) error(EXIT_FAILURE, 0, "only one of '--redshift', '--velocity', or " "'--obsline' can be called in each run"); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static void ui_list_lines(struct cosmiccalparams *p) { double ang; size_t i, j; /* Make sure '--lineunit' is given. */ if(p->lineunit==NULL) error(EXIT_FAILURE, 0, "no unit specified for the wavelength of the " "spectral lines. Please use '--lineunit' to specify your " "desired unit"); /* Print basic information. Note that '--listlinesatz' is requested, also print the redshift used. */ if(p->cp.quiet==0) { printf("# %s\n", PROGRAM_STRING); if(p->listlinesatz) printf("# Assumed redshift: %g\n", p->redshift); printf("# Source of rest frame wavelenghts (retrieved on 2023-01-15):\n" "# http://astronomy.nmsu.edu/drewski/tableofemission" "lines.html\n"); /* Print column metadata. */ printf("# Column 1: Wavelength [%s,f32] %s.\n", p->lineunit, ( p->listlinesatz ? "Line wavelength at assumed redshift" : "Rest frame wavelength of the line")); printf("# Column 2: Name [name, str15] Line name in Gnuastro.\n"); } /* Print the line information. */ for(i=1;ilistlinesatz ? ( ang * (1+p->redshift) ) : ang ) * p->lineunitmultip, gal_speclines_line_name(i)); } /* Print the break locations. */ if(p->cp.quiet==0) printf("\n# Hydrogen series limits:\n"); for(i=0;ilistlinesatz ? ( ang * (1+p->redshift) ) : ang ) * p->lineunitmultip, gal_speclines_line_name(j)); } /* Abort the program successfully. */ exit(EXIT_SUCCESS); } static void ui_preparations_lineunit(struct cosmiccalparams *p) { if( !strcmp(p->lineunit, "m") ) p->lineunitmultip=1e-10; else if( !strcmp(p->lineunit, "nano-m") ) p->lineunitmultip=0.1; else if( !strcmp(p->lineunit, "micro-m") ) p->lineunitmultip=1e-4; else if( !strcmp(p->lineunit, "angstrom") ) p->lineunitmultip=1; else error(EXIT_FAILURE, 0, "invalid value '%s' to '--lineunit'! Please " "re-run this command with '--help' to see the acceptable " "values", p->lineunit); } static void ui_preparations(struct cosmiccalparams *p) { double *obsline = p->obsline ? p->obsline->array : NULL; /* Make sure that atleast one of '--redshift', '--obsline', or '--velocity' are given (different ways to set/estimate the redshift). However, when '--listlines' is called we don't need a redshift and the program can run without any of the three options above. */ if(isnan(p->redshift) && p->obsline==NULL && isnan(p->velocity) && p->listlines==0 ) error(EXIT_FAILURE, 0, "no redshift/velocity specified! Please use " "'--redshift', '--velocity' (in km/s), or '--obsline' to specify " "a redshift, run with '--help' for more"); /* If a line unit is given find the factor that should be multiplied. */ if(p->lineunit || p->obsline) ui_preparations_lineunit(p); /* If '--listlines' is given, print them and abort the program successfully, don't continue with the preparations. Note that '--listlines' is the rest-frame lines. So we don't need any redshift. */ if(p->listlines) ui_list_lines(p); /* If '--obsline' has been given, set the redshift based on it (it can't be called with '--velocity'). */ if(p->obsline) p->redshift = ( (p->obsline->status==GAL_SPECLINES_INVALID) ? gal_speclines_line_redshift(obsline[0], obsline[1]) : gal_speclines_line_redshift_code( (obsline[0] / p->lineunitmultip), p->obsline->status) ); /* If '--velocity' has been given, set the redshift based on it (it can't be called with '--obsline'). */ if( !isnan(p->velocity) ) p->redshift = gal_cosmology_z_from_velocity(p->velocity); /* Currently GSL will fail for z=0. So if a value of zero is given (bug #56299). As a work-around, in such cases, we'll change it to an extremely small value. NOTE: This has to be after the 'obsline' check.*/ if(p->redshift==0.0f) p->redshift=MAIN_REDSHIFT_ZERO; /* In case the redshift is negative, print an error. It will be detected and abort the program, prior to this if given directly, but can also happen with '--obsline' for example). */ if(p->redshift<0) error(EXIT_FAILURE, 0, "the selected redshift (%.4f) is negative! " "This can happen when you give unreasonable values to indirect " "ways of specifying the redshift. For example calling " "'--obsline=H-alpha,2000'. When calling '--obsline', please " "make sure that your observed line is redder than the rest-frame " "wavelength of the given line", p->redshift); /* Now that we have the redshift, we can print the 'listlinesatz' option. */ if(p->listlinesatz) ui_list_lines(p); /* The list is filled out in a first-in-last-out order. By the time control reaches here, the list is finalized. So we should just reverse it so the user gets values in the same order they requested them. */ gal_list_i32_reverse(&p->specific); gal_list_f64_reverse(&p->specific_arg); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct cosmiccalparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); } gnuastro-0.22/bin/cosmiccal/cosmiccal.c0000644000175000017500000003104714557216671013611 /********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "cosmiccal.h" static void cosmiccal_print_input(struct cosmiccalparams *p) { printf("%s\n", PROGRAM_STRING); printf("\n Input parameters\n"); printf( " ----------------\n"); if( !isnan(p->redshift) ) printf(FLTFORMAT, "Desired redshift for calculations (z):", p->redshift); printf(FLTFORMAT, "Expansion rate (Hubble constant, H0), now:", p->H0); printf(FLTFORMAT, "Cosmological constant fractional density, now:", p->olambda); printf(FLTFORMAT, "Matter fractional density, now:", p->omatter); printf(EXPFORMAT, "Radiation fractional density, now:", p->oradiation); printf(EXPFORMAT, "Curvature fractional density (from the above):", 1 - ( p->olambda + p->omatter + p->oradiation )); } static void cosmiccal_printall(struct cosmiccalparams *p) { double ad, ld, vz, pd, vel, absmagconv; double curage, ccritd, distmod, outage, zcritd; /* The user wants everything, do all the calculations and print everything with full descriptions. Note that 'quiet' is activated here because the same sanity check is already done in CosmicCalculator's 'ui.c'. */ curage=gal_cosmology_age(0.0f, p->H0, p->olambda, p->omatter, p->oradiation, 1); ccritd=gal_cosmology_critical_density(0.0f, p->H0, p->olambda, p->omatter, p->oradiation, 1); pd=gal_cosmology_proper_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1); ad=gal_cosmology_angular_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1); ld=gal_cosmology_luminosity_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1); distmod=gal_cosmology_distance_modulus(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1); absmagconv=gal_cosmology_to_absolute_mag(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1); outage=gal_cosmology_age(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1); zcritd=gal_cosmology_critical_density(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1); vel=gal_cosmology_velocity_from_z(p->redshift); vz=gal_cosmology_comoving_volume(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1); /* Print out results: */ cosmiccal_print_input(p); printf("\n\n Universe now\n"); printf( " ------------\n"); printf(FLTFORMAT, "Age of Universe now (Ga*):", curage); printf(EXPFORMAT, "Critical density now (g/cm^3):", ccritd); printf(FLTFORMAT, "Velocity at z (km/s):", vel); printf(FLTFORMAT, "Proper distance to z (Mpc):", pd); printf(FLTFORMAT, "Angular diameter distance to z (Mpc):", ad); printf(FLTFORMAT, "Tangential distance covered by 1 arcsec at z (Kpc):", ad*1000*M_PI/3600/180); printf(FLTFORMAT, "Luminosity distance to z (Mpc):", ld); printf(FLTFORMAT, "Distance modulus at z (no unit):", distmod); printf(FLTFORMAT, "Conversion to absolute magnitude (no unit):", absmagconv); printf("\n\n Universe at desired redshift z\n"); printf( " ------------------------------\n"); printf(FLTFORMAT, "Age of Universe at z (Ga*):", outage); printf(FLTFORMAT, "Look-back time to z (Ga*):", curage-outage); printf(EXPFORMAT, "Critical density at z (g/cm^3):", zcritd); printf("\n\n Comoving universe (time independent)\n"); printf( " ------------------------------------\n"); printf(FLTFORMAT, "Comoving volume over 4pi stradian to z (Mpc^3):", vz); printf("\n-------\n"); printf("*: Ga is short for Giga Annum, or billion years (IAU standard).\n"); } /***************************************************************/ /************* Top-level function *************/ /***************************************************************/ void cosmiccal(struct cosmiccalparams *p) { gal_list_i32_t *tmp; double curage, zage; /* If no redshift is given, just print the input parameters along with a notice that further calculations are only possible with a redshift and abort. */ if(isnan(p->redshift)) { cosmiccal_print_input(p); printf("\n\nPlease specify a redshift with the '--redshift' (or " "'-z') option.\n"); return; } /* In case the user just wants one number, only print that and return. Note that 'quiet' is activated here because the same sanity check is already done in CosmicCalculator's 'ui.c'. */ if(p->specific) { for(tmp=p->specific;tmp!=NULL;tmp=tmp->next) { switch(tmp->v) { case UI_KEY_USEDREDSHIFT: printf("%g", p->redshift==MAIN_REDSHIFT_ZERO ? 0.0f: p->redshift); break; case UI_KEY_AGENOW: printf("%f", gal_cosmology_age(0.0f, p->H0, p->olambda, p->omatter, p->oradiation, 1)); break; case UI_KEY_CRITICALDENSITYNOW: printf("%e", gal_cosmology_critical_density(0.0f, p->H0, p->olambda, p->omatter, p->oradiation, 1)); break; case UI_KEY_PROPERDISTANCE: printf("%f", gal_cosmology_proper_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1)); break; case UI_KEY_ANGULARDIAMDIST: printf("%f", gal_cosmology_angular_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1)); break; case UI_KEY_ARCSECTANDIST: printf("%f", ( gal_cosmology_angular_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1) * 1000 * M_PI / 3600 / 180 ) ); break; case UI_KEY_LUMINOSITYDIST: printf("%f", gal_cosmology_luminosity_distance(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1)); break; case UI_KEY_DISTANCEMODULUS: printf("%f", gal_cosmology_distance_modulus(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1)); break; case UI_KEY_ABSMAGCONV: printf("%f", gal_cosmology_to_absolute_mag(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1)); break; case UI_KEY_AGE: printf("%f", gal_cosmology_age(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1)); break; case UI_KEY_LOOKBACKTIME: curage=gal_cosmology_age(0.0f, p->H0, p->olambda, p->omatter, p->oradiation, 1); zage=gal_cosmology_age(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1); printf("%f", curage-zage); break; case UI_KEY_CRITICALDENSITY: printf("%e", gal_cosmology_critical_density(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1)); break; case UI_KEY_VOLUME: printf("%f", gal_cosmology_comoving_volume(p->redshift, p->H0, p->olambda, p->omatter, p->oradiation, 1)); break; case UI_KEY_USEDVELOCITY: printf("%g", gal_cosmology_velocity_from_z(p->redshift)); break; case UI_KEY_LINEATZ: printf("%g", ( gal_list_f64_pop(&p->specific_arg) * (1+p->redshift) * p->lineunitmultip) ); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "to fix the problem. The code %d is not recognized as " "a single value calculation code", __func__, PACKAGE_BUGREPORT, tmp->v); } /* Only add a space-character if there are more results to print. */ if(tmp->next) printf(" "); } /* Print a new-line character to finish the output. */ printf("\n"); } else cosmiccal_printall(p); /* Print a warning if the redshift is too close for the hubble flow to be significant. This is done at the end because it is important and may be missed at the start of the program (before the outputs are printed). */ if(p->redshiftcp.quiet==0) error(EXIT_SUCCESS, 0, "WARNING: at very low redshifts " "(approximately below %g), the peculiar velocity of the " "particular galaxy may be more significant than hubble's " "law (which is the basis of the measurements here). This " "gets worse as the redshift decreases. Therefore the " "results above may not be accurate on a per-object basis. " "You can suppress this warning with the '--quiet' option", MAIN_REDSHIFT_SIG_HUBBLE_FLOW); } gnuastro-0.22/bin/cosmiccal/main.h0000644000175000017500000000563114551337306012576 /********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include #include #include /* Progarm names. */ #define PROGRAM_NAME "CosmicCalculator" /* Program full name. */ #define PROGRAM_EXEC "astcosmiccal" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* To avoid crashing the integration program. */ #define MAIN_REDSHIFT_ZERO 1e-20 /* The z~0.007 corresponds to about 30Mpc in Plank 2018 cosmology. */ #define MAIN_REDSHIFT_SIG_HUBBLE_FLOW 0.007 /* Main program parameters structure */ struct cosmiccalparams { /* Other structures: */ struct gal_options_common_params cp; /* Common parameters. */ /* Input: */ double redshift; /* Redshift of interest. */ gal_data_t *obsline; /* Observed wavelength of a line. */ double velocity; /* Velocity of interest. */ double H0; /* Current expansion rate (km/sec/Mpc). */ double olambda; /* Current cosmological constant dens. */ double omatter; /* Current matter density. */ double oradiation; /* Current radiation density. */ uint8_t listlines; /* List the known spectral lines. */ uint8_t listlinesatz; /* List the known spectral lines. */ char * lineunit; /* Unit of numbers for lines. */ /* Outputs. */ gal_list_i32_t *specific; /* Codes for single row calculations. */ gal_list_f64_t *specific_arg; /* Possible arguments for single calcs. */ /* Internal: */ time_t rawtime; /* Starting time of the program. */ double lineunitmultip; /* Multiple for using line units. */ uint8_t haslineatz; /* A flag for sanity checks. */ }; #endif gnuastro-0.22/bin/cosmiccal/authors-cite.h0000644000175000017500000000303614551337306014256 /********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/cosmiccal/args.h0000644000175000017500000002265314557211443012610 /********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { { "redshift", UI_KEY_REDSHIFT, "FLT", 0, "Redshift of interest.", GAL_OPTIONS_GROUP_INPUT, &p->redshift, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "velocity", UI_KEY_VELOCITY, "FLT", 0, "Velocity of interest in km/s.", GAL_OPTIONS_GROUP_INPUT, &p->velocity, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "obsline", UI_KEY_OBSLINE, "STR,FLT", 0, "Redshift from line and observed wavelength.", GAL_OPTIONS_GROUP_INPUT, &p->obsline, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_parse_obsline }, { "H0", UI_KEY_H0, "FLT", 0, "Current expansion rate (Hubble constant).", GAL_OPTIONS_GROUP_INPUT, &p->H0, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "olambda", UI_KEY_OLAMBDA, "FLT", 0, "Current cosmological cst. dens. per crit. dens.", GAL_OPTIONS_GROUP_INPUT, &p->olambda, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "omatter", UI_KEY_OMATTER, "FLT", 0, "Current matter density per critical density.", GAL_OPTIONS_GROUP_INPUT, &p->omatter, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "oradiation", UI_KEY_ORADIATION, "FLT", 0, "Current radiation density per critical density.", GAL_OPTIONS_GROUP_INPUT, &p->oradiation, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Basic cosmology */ { 0, 0, 0, 0, "Basic cosmology calculations", UI_GROUP_BASIC }, { "usedredshift", UI_KEY_USEDREDSHIFT, 0, 0, "Used redshift in this run.", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "agenow", UI_KEY_AGENOW, 0, 0, "Age of universe now (Ga: Giga Annum).", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "criticaldensitynow", UI_KEY_CRITICALDENSITYNOW, 0, 0, "Critical density now (g/cm^3).", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "properdistance", UI_KEY_PROPERDISTANCE, 0, 0, "Proper distance to z (Mpc).", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "angulardiamdist", UI_KEY_ANGULARDIAMDIST, 0, 0, "Angular diameter distance (Mpc).", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "arcsectandist", UI_KEY_ARCSECTANDIST, 0, 0, "Tangential dist. covered by 1arcsec at z (kpc).", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "luminositydist", UI_KEY_LUMINOSITYDIST, 0, 0, "Luminosity distance to z (Mpc).", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "distancemodulus", UI_KEY_DISTANCEMODULUS, 0, 0, "Distance modulus at z (no units).", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "absmagconv", UI_KEY_ABSMAGCONV, 0, 0, "Conversion to absolute magnitude (no unit).", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "age", UI_KEY_AGE, 0, 0, "Age of universe at z (Ga: Giga Annum).", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "lookbacktime", UI_KEY_LOOKBACKTIME, 0, 0, "Look back time to z (Ga: Giga Annum).", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "criticaldensity", UI_KEY_CRITICALDENSITY, 0, 0, "Critical density at z (g/cm^3).", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "volume", UI_KEY_VOLUME, 0, 0, "Comoving volume (4pi str) to z (Mpc^3).", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, { "usedvelocity", UI_KEY_USEDVELOCITY, 0, 0, "Used velocity (in km/s) for this run.", UI_GROUP_BASIC, &p->specific, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, /* Spectral line options. */ { 0, 0, 0, 0, "Spectral lines", UI_GROUP_SPECTRAL_LINES }, { "listlines", UI_KEY_LISTLINES, 0, 0, "List pre-defined lines at rest frame.", UI_GROUP_SPECTRAL_LINES, &p->listlines, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "listlinesatz", UI_KEY_LISTLINESATZ, 0, 0, "List pre-defined lines at the given redshift.", UI_GROUP_SPECTRAL_LINES, &p->listlinesatz, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "lineunit", UI_KEY_LINEUNIT, "STR", 0, "Unit ('angstrom', 'nm', 'microm' or 'm').", UI_GROUP_SPECTRAL_LINES, &p->lineunit, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, }, { "lineatz", UI_KEY_LINEATZ, "STR/FLT", 0, "Wavelength of line (name or wavelength) at z.", UI_GROUP_SPECTRAL_LINES, &p->specific, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value, }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/cosmiccal/ui.h0000644000175000017500000000472414557211443012270 /********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_BASIC = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_SPECTRAL_LINES, }; /* Available letters for short options: f j k n p t w x B E J Q R W X */ enum option_keys_enum { /* With short-option version. */ UI_KEY_REDSHIFT = 'z', UI_KEY_VELOCITY = 'y', UI_KEY_OBSLINE = 'O', UI_KEY_H0 = 'H', UI_KEY_OLAMBDA = 'l', UI_KEY_OMATTER = 'm', UI_KEY_ORADIATION = 'r', UI_KEY_USEDREDSHIFT = 'e', UI_KEY_AGENOW = 'G', UI_KEY_CRITICALDENSITYNOW = 'C', UI_KEY_PROPERDISTANCE = 'd', UI_KEY_ANGULARDIAMDIST = 'A', UI_KEY_ARCSECTANDIST = 's', UI_KEY_LUMINOSITYDIST = 'L', UI_KEY_DISTANCEMODULUS = 'u', UI_KEY_ABSMAGCONV = 'a', UI_KEY_AGE = 'g', UI_KEY_LOOKBACKTIME = 'b', UI_KEY_CRITICALDENSITY = 'c', UI_KEY_VOLUME = 'v', UI_KEY_USEDVELOCITY = 'Y', UI_KEY_LINEATZ = 'i', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_LINEUNIT = 1000, UI_KEY_LISTLINES, UI_KEY_LISTLINESATZ, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct cosmiccalparams *p); #endif gnuastro-0.22/bin/cosmiccal/cosmiccal.h0000644000175000017500000000226314551337306013605 /********************************************************************* CosmicCalculator - Calculate cosmological parameters CosmicCalculator is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef COSMICCAL_H #define COSMICCAL_H /* Format of final outputs */ # define FLTFORMAT " - %-55s%f\n" # define EXPFORMAT " - %-55s%e\n" void cosmiccal(struct cosmiccalparams *p); #endif gnuastro-0.22/bin/cosmiccal/astcosmiccal-complete.bash0000644000175000017500000001146614551337306016616 # Bash autocompletion to Gnuastro's CosmicCalculator program. See the # comments above 'bin/completion.bash.in' for more. # # Original author: # Mohammad Akhlaghi # Contributing author(s): # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see ## Contributing author(s): ## Copyright (C) 2015-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astcrop ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astcrop_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astcrop_SOURCES = main.c ui.c crop.c wcsmode.c onecrop.c EXTRA_DIST = main.h authors-cite.h args.h ui.h crop.h wcsmode.h onecrop.h \ astcrop-complete.bash ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.ma dist_sysconf_DATA = astcrop.conf gnuastro-0.22/bin/crop/astcrop.conf0000644000175000017500000000237014551337306013026 # Default parameters (System) for Crop. # Crop is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astcrop --help # Full list of options, short doc. # $ astcrop -P # Print all options and used values. # $ info astcrop # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input image and catalog parameters: cathdu 1 hstartwcs 0 hendwcs 0 # Output parameters: checkcenter 0 metaname CROP suffix _cropped.fits # Crop by center (when a catalog is given) coordcol 2 coordcol 3 coordcol 4 # Operating mode: mode wcs gnuastro-0.22/bin/crop/Makefile.in0000644000175000017500000034042514557513747012572 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astcrop$(EXEEXT) subdir = bin/crop ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astcrop_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) crop.$(OBJEXT) \ wcsmode.$(OBJEXT) onecrop.$(OBJEXT) astcrop_OBJECTS = $(am_astcrop_OBJECTS) am__DEPENDENCIES_1 = astcrop_DEPENDENCIES = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/crop.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/onecrop.Po ./$(DEPDIR)/ui.Po \ ./$(DEPDIR)/wcsmode.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astcrop_SOURCES) DIST_SOURCES = $(astcrop_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib astcrop_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astcrop_SOURCES = main.c ui.c crop.c wcsmode.c onecrop.c EXTRA_DIST = main.h authors-cite.h args.h ui.h crop.h wcsmode.h onecrop.h \ astcrop-complete.bash dist_sysconf_DATA = astcrop.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/crop/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/crop/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astcrop$(EXEEXT): $(astcrop_OBJECTS) $(astcrop_DEPENDENCIES) $(EXTRA_astcrop_DEPENDENCIES) @rm -f astcrop$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astcrop_OBJECTS) $(astcrop_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crop.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/onecrop.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcsmode.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/crop.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/onecrop.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f ./$(DEPDIR)/wcsmode.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/crop.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/onecrop.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f ./$(DEPDIR)/wcsmode.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/crop/main.c0000644000175000017500000000306414551337306011575 /********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" #include "crop.h" #include "onecrop.h" int main (int argc, char *argv[]) { struct timeval t1; struct cropparams p={{{0},0},0}; /* Set the starting time.*/ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Image Crop. */ crop(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully. */ return EXIT_SUCCESS; } gnuastro-0.22/bin/crop/ui.c0000644000175000017500000012700514551337306011270 /********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "onecrop.h" #include "wcsmode.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "[Crop-Identifier] ASTRdata ..."; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will create cutouts, " "thumbnails, postage stamps or crops of region(s) from input image(s) " "using image or celestial coordinates. If muliple crops are desired, a " "catalog must be provided. When in WCS mode, if the cut out covers more " "than one input image, all overlapping input images will be stitched in " "the output.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct cropparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->poptions = program_options; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; /* Initalize necessary parameters. */ p->mode = IMGCROP_MODE_INVALID; cp->searchin = GAL_TABLE_SEARCH_INVALID; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; cp->coptions[i].doc="Extension name or number of (all) input(s)."; break; case GAL_OPTIONS_KEY_MINMAPSIZE: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_IGNORECASE: cp->coptions[i].group=UI_GROUP_CENTER_CATALOG; break; case GAL_OPTIONS_KEY_STDINTIMEOUT: cp->coptions[i].group=OPTION_HIDDEN; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct cropparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(arg[0]!='\0') { gal_list_str_add(&p->inputs, arg, 0); ++p->numin; } break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /* Parse the mode to interpret the given coordinates. */ void * ui_parse_coordinate_mode(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *outstr; /* We want to print the stored values. */ if(lineno==-1) { gal_checkset_allocate_copy( *(int *)(option->value)==IMGCROP_MODE_IMG ? "img" : "wcs", &outstr ); return outstr; } else { if (!strcmp(arg, "img")) *(int *)(option->value)=IMGCROP_MODE_IMG; else if (!strcmp(arg, "wcs")) *(int *)(option->value)=IMGCROP_MODE_WCS; else error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' (value to " "'--mode') not recognized as an input mode. " "Recognized values are 'img' and 'wcs'. This option " "is necessary to identify the nature of your input " "coordinates.\n\n" "Please run the following command for more " "information (press the 'SPACE' key to go down and " "'q' to return to the command-line):\n\n" " $ info gnuastro \"Crop modes\"\n", arg); return NULL; } } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct cropparams *p) { double *darray; int i, checksum; /* If it's on the polygon mode and a filename was passed to polygon, then we have to set the mode. It can change the value of '--mode', so this is checked first. */ if(p->polygon && p->polygon->status) { switch(p->polygon->status) { case GAL_DS9_COORD_MODE_IMG: p->mode=IMGCROP_MODE_IMG; break; case GAL_DS9_COORD_MODE_WCS: p->mode=IMGCROP_MODE_WCS; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at " "'%s' to fix the problem. The output coordinate mode " "of 'gal_ds9_reg_read_polygon' (%d) isn't recognized " "by this function", __func__, PACKAGE_BUGREPORT, p->polygon->status); } } /* Make sure that only one of the crop definitions is given. */ checksum = ( (p->center!=NULL) + (p->catname!=NULL) + (p->section!=NULL) + (p->polygon!=NULL) ); switch(checksum) { case 0: if(p->cp.printparams==0) error(EXIT_FAILURE, 0, "no crop definition. You can use any of " "the following options to define the crop(s): '--center', " "'--catalog', '--section', or '--polygon'. Please run this " "command for more information:\n\n" " $ info gnuastro \"Crop modes\"\n"); case 1: /* Everything is ok, just ignore the switch structure. */ break; default: error(EXIT_FAILURE, 0, "more than one crop type specified. In each " "run, only one crop definition is acceptable on the " "command-line or in configuration files. You have called: " "%s%s%s%s\b\b.", p->center!=NULL ? "'--center', " : "", p->catname!=NULL ? "'--catalog', " : "", p->section!=NULL ? "'--section', " : "", p->polygon!=NULL ? "'--polygon', " : ""); } /* The width values must not be negative. */ if(p->width) { darray=p->width->array; for(i=0;iwidth->size;++i) if(darray[i]<=0.0f) error(EXIT_FAILURE, 0, "%g is <=0. The values to the '--width' " "option must be larger than zero. %g is input number %d to " "this option", darray[i], darray[i], i+1); } /* Checkcenter sanity check. */ if(p->incheckcenter) { /* We only want a single number. */ if(p->incheckcenter->size>1) error(EXIT_FAILURE, 0, "%zu values given to '--checkcenter'. This " "option only takes one value currently", p->incheckcenter->size); darray=p->incheckcenter->array; if(*darray<0.0f) error(EXIT_FAILURE, 0, "negative value (%f) given to " "'--checkcenter'. This option only takes positive values", *darray); } /* Section is currently only defined in Image mode. */ if(p->section && p->mode!=IMGCROP_MODE_IMG) error(EXIT_FAILURE, 0, "The '--section' option is only available in " "image coordinate mode, currently it doesn't work with WCS mode. " "Please run with '--mode=img' and if necessary, change the " "values accordingly"); /* Sanity checks and mode setting based on the desired crop. */ if(p->catname) { /* If the searchin option has been given. */ if(p->cp.searchin==GAL_TABLE_SEARCH_INVALID) error(EXIT_FAILURE, 0, "%s: no field specified to search for " "columns. Please use the '--searchin' option to specify " "which column meta-data you would like to search in: 'name', " "'unit' and 'comment'. You may also select columns by their " "number, which won't use this option, but for complentess its " "best for this option to have a value", p->catname); /* If it is a FITS file, we need the HDU. */ if( gal_fits_file_recognized(p->catname) && p->cathdu==NULL ) error(EXIT_FAILURE, 0, "%s: no hdu given. Please use the '--cathdu' " "option to specify which extension contains the table", p->catname); /* Atleast one of the (X,Y), and (RA,Dec) set of columns are necessary. Note that we have checked that they are together if given, so we only need to check one of the two in each couple. */ if(p->coordcol==NULL) error(EXIT_FAILURE, 0, "no crop center columns given to read from " "the input catalog ('%s'). Please use '--coordcol' several " "times (depending on dimensionality) to specify the column " "keeping the center position the respective dimension.\n\n" "For more information on how to select columns in Gnuastro, " "please run the following command:\n\n" " $ info gnuastro \"Selecting table columns\"", p->catname); } /* Parse the polygon vertices if they are given to make sure that it is in the proper format. */ if(p->polygon) { /* The number of vertices is half the total number of given values (currently only 2D spaces are considered so each vertice has 2 coordinates. */ p->nvertices=p->polygon->size/2; /* Basic sanity checks. */ if(p->nvertices<3) error(EXIT_FAILURE, 0, "a polygon has to have 3 or more vertices, " "you have only given %zu", p->nvertices); if(p->polygonout && p->numin>1) error(EXIT_FAILURE, 0, "currently in WCS mode, '--polygonout' can " "only be set to zero when there is one image, you have given " "%zu images. For multiple images the region will be very " "large. It is best if you first crop out the larger region " "you want into one image, then mask the polygon", p->numin); /* Put the coordinates into an array while reversing their order so they correspond to the user's order, then put it in the right place.*/ darray=p->polygon->array; if(p->mode==IMGCROP_MODE_IMG) {p->ipolygon=darray; p->wpolygon=NULL; } else {p->ipolygon=NULL; p->wpolygon=darray;} /* We know that the cropped region is not defined by its center. So it makes no sense to check if the center is blank. */ p->checkcenter=0; } else p->wpolygon=p->ipolygon=NULL; /* If we are in WCS mode, noblanks must be off */ if(p->mode==IMGCROP_MODE_WCS && p->noblank) error(EXIT_FAILURE, 0, "'--noblanks' ('-b') is only for image mode. " "You have called it with WCS mode"); /* If '--apend' has been called, set 'cp.keep' to 1 (since we don't want to delete the output file). */ if(p->append) p->cp.keep=1; } static void ui_check_options_and_arguments(struct cropparams *p) { /* Make sure we actually have inputs. */ if(p->inputs==NULL) error(EXIT_FAILURE, 0, "no input file given"); /* Make sure that a HDU is also given. */ if(p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified. When the input is a FITS " "file, a HDU must also be specified, you can use the '--hdu' " "('-h') option and give it the HDU number (starting from " "zero), extension name, or anything acceptable by CFITSIO"); /* If in image mode, there should only be one input image. */ if(p->mode==IMGCROP_MODE_IMG && p->numin>1) error(EXIT_FAILURE, 0, "in image mode, only one input image may be " "specified"); /* If no output name is given, set it to the current directory. */ if(p->cp.output==NULL) gal_checkset_allocate_copy("./", &p->cp.output); /* Only catalog mode needs multiple threads and a directory for the output. */ if(p->catname) { /* When multiple threads need to access a file, CFITSIO needs to be configured with the '--enable-reentrant' option and we can only know from the 'fits_is_reentrant' function that came from CFITSIO version 3.30. */ #if GAL_CONFIG_HAVE_FITS_IS_REENTRANT == 1 if(p->cp.numthreads>1 && fits_is_reentrant()==0) { fprintf(stderr, "WARNING: CFITSIO was not configured with the " "'--enable-reentrant' option but you have asked to crop " "on %zu threads. Therefore only one thread will be used.\n\n" "Please run the following command to learn more about " "configuring CFITSIO:\n\n" " $ info gnuastro CFITSIO", p->cp.numthreads); p->cp.numthreads=1; } #else if(p->cp.numthreads>1) { fprintf(stderr, "WARNING: the installed CFITSIO version doesn't " "have 'fits_is_reentrant' function (it is older than " "version 3.30). But you have asked to crop on %zu threads." "Therefore only one thread will be used.\n\n" "To avoid this warning, you can set the number of threads " "to one with '-N1' or update your installation of CFITSIO.", p->cp.numthreads); p->cp.numthreads=1; } #endif /* Make sure the given output is a directory. */ gal_checkset_check_dir_write_add_slash(&p->cp.output); } else { p->cp.numthreads=1; p->outnameisfile=gal_checkset_dir_0_file_1(&p->cp, p->cp.output, p->inputs->v); } } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ /* When the crop is defined by its center, the final width that we need must be in actual number of pixels (an integer). But the user's values can be in WCS mode or even in image mode, they may be non-integers. */ static void ui_set_img_sizes(struct cropparams *p) { gal_data_t *newwidth; size_t i, ndim=p->imgs->ndim; double pwidth, pcheckcenter, *warray; /* Make sure a width value is actually given. */ if(p->width==NULL) error(EXIT_FAILURE, 0, "no crop width specified. When crops are " "defined by their center (with '--center' or '--catalog') a " "width is necessary (using the '--width' option)"); /* Make sure that the width array only has one element or the same number of elements as the input's dimensions. */ if(p->width->size!=ndim && p->width->size!=1) error(EXIT_FAILURE, 0, "%zu values give to '--width', but input is %zu " "dimensions. It can only take either one value (same width in all " "dimensions), or the same number as the input's dimensions", p->width->size, ndim); /* If the width array has only one value, that single value should be used for all dimensions. */ if(p->width->size==1) { /* Allocate the new width dataset. */ newwidth=gal_data_alloc(NULL, p->width->type, 1, &ndim, NULL, 0, -1, 1, NULL, NULL, NULL); /* Fill the new width. */ warray=newwidth->array; for(i=0;iwidth->array); /* Free the old (single element) width dataset and put the new one in its place. */ gal_data_free(p->width); p->width=newwidth; } else warray=p->width->array; /* WCS mode. */ if(p->mode==IMGCROP_MODE_WCS) { /* Only convert the width if it is actually in degrees. */ if(p->widthinpix==0) for(i=0;ipixscale[i]; if(pwidth<1 || pwidth>GAL_OPTIONS_WIDTH_TOO_LARGE_SIZE) gal_options_width_too_large(warray[i], i+1, pwidth, p->pixscale[i]); /* Write the single valued width in WCS and the image width for this dimension. */ p->iwidth[i]=GAL_DIMENSION_FLT_TO_INT(pwidth); if(p->iwidth[i]%2==0) { p->iwidth[i] += 1; warray[i] += p->pixscale[i]; } } /* Checkcenter: */ if(p->incheckcenter) pcheckcenter=((double *)(p->incheckcenter->array))[0]/p->pixscale[0]; } /* Image mode. */ else { /* The width (along each dimension). */ for(i=0;iiwidth[i]=GAL_DIMENSION_FLT_TO_INT(warray[i]); if(p->iwidth[i]%2==0) p->iwidth[i] += 1; } /* Checkcenter: */ if(p->incheckcenter) { /* Write the double value into the temporary variable */ pcheckcenter=((double *)(p->incheckcenter->array))[0]; /* In image-mode it has to be an integer. */ if( ceilf(pcheckcenter)!=pcheckcenter ) error(EXIT_FAILURE, 0, "%g is not an integer. When cropping in " "image-mode, the number of pixels to check in the " "center must be an integer", pcheckcenter); } } /* Finalize the number of central pixels to check. */ if(p->incheckcenter) { /* Convert the floating point value to an integer. */ p->checkcenter=GAL_DIMENSION_FLT_TO_INT(pcheckcenter); /* If 'checkcenter' isn't zero, but is even, convert it to an odd number (so the actual center can be checked). */ if(p->checkcenter && p->checkcenter%2==0) p->checkcenter += 1; } /* For a check: printf("Width: "); for(i=0;iiwidth[i]); exit(0); */ } static void ui_read_cols(struct cropparams *p) { char colname[100]; gal_data_t *cols, *tmp, *corrtype=NULL; gal_list_str_t *colstrs=NULL, *extracolstr, *lastcolstr; size_t i, ncoordcols, counter=0, dcounter=0, ndim=p->imgs->ndim; /* See if the number of columns given for coordinates corresponds to the number of dimensions of the input dataset. */ if(p->coordcol) { /* Check if the number of columns given for coordinates is the same as the number of dimensions in the input dataset(s). */ ncoordcols=gal_list_str_number(p->coordcol); if( ncoordcols < ndim) error(EXIT_FAILURE, 0, "'--coordcol' was called %zu times, but the " "input dataset%s %zu dimensions. Recall that through " "'--coordcol' you are specifying the columns containing the " "coordinates of the center of the crop in a catalog", ncoordcols, (p->numin==1?" has":"s have"), ndim); /* If the number of given columns is more than the input's dimensions, then we'll just delete all the unnecessary columns. */ else if( ncoordcols > ndim ) { /* Go over the columns find the last, but first initialize the two ('lastcolstr' to avoid compiler warnings). */ lastcolstr=extracolstr=p->coordcol; for(i=0;inext; } /* Set the 'next' element of the last node to NULL and free the extra ones. */ lastcolstr->next=NULL; gal_list_str_free(extracolstr, 1); } } else error(EXIT_FAILURE, 0, "no coordinate columns specified. When a catalog" "is given, it is necessary to identify which columns identify " "the coordinate values in which dimension.\n\n" "You can do this by calling '--coordcol' multiple times, the " "order must be in the same order as the input's dimensions. " "For more information on how to select columns in Gnuastro, " "please run the following command:\n\n" " $ info gnuastro \"Selecting table columns\""); /* If a name column was also given, the put that as the first column to read, otherwise just use the given set of columns (in the same order). */ if(p->namecol) { gal_list_str_add(&colstrs, p->namecol, 0); colstrs->next=p->coordcol; } else colstrs=p->coordcol; /* Read the desired columns from the file. */ cols=gal_table_read(p->catname, p->cathdu, NULL, colstrs, p->cp.searchin, p->cp.ignorecase, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap, NULL, "--cathdu"); if(cols==NULL) error(EXIT_FAILURE, 0, "%s: is empty! No usable information " "(un-commented lines) could be read from this file", gal_fits_name_save_as_string(p->catname, p->cathdu)); /* Set the number of objects (rows in each column). */ p->numout=cols->size; /* Make sure more columns were not read (the name matchings might result in more than one column being read from the inputs). */ if( gal_list_data_number(cols) != ndim + (p->namecol!=NULL) ) gal_tableintern_error_col_selection(p->catname, p->cathdu, "too " "many columns were selected " "by the given values to the " "options ending in 'col'."); /* Put the information in each column in the proper place. */ while(cols!=NULL) { /* Pop out the top node. */ tmp=gal_list_data_pop(&cols); /* See which column it is. */ switch(++counter) { case 1: if(p->namecol) { sprintf(colname, "crop name prefix"); corrtype = (tmp->type==GAL_TYPE_STRING ? tmp : gal_data_copy_to_new_type_free(tmp, GAL_TYPE_STRING)); p->name=corrtype->array; } else { sprintf(colname, "position in dimension %zu", dcounter+1); corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT64); p->centercoords[ dcounter++ ]=corrtype->array; } break; default: sprintf(colname, "position in dimension %zu", dcounter+1); corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT64); p->centercoords[ dcounter++ ] = corrtype->array; } /* Sanity check and clean up. Note that it might happen that the input structure is already freed. In that case, 'corrtype' will be NULL. */ if(corrtype) { /* Make sure there are no blank values in this column. */ if( gal_blank_present(corrtype, 1) ) error(EXIT_FAILURE, 0, "%s: column with %s has blank values. " "Input columns must not contain blank values", gal_fits_name_save_as_string(p->catname, p->cathdu), colname); /* Free the unnecessary structure information. The correct-type ('corrtype') data structure's array is necessary for later steps, so its pointer has been copied in the main program's structure. Hence, we should set the structure's pointer to NULL so the important data isn't freed.*/ corrtype->array=NULL; gal_data_free(corrtype); corrtype=NULL; } } } static void ui_prepare_center(struct cropparams *p) { double *carray; size_t i, ndim=p->imgs->ndim; /* Allocate space to keep the central positions. */ errno=0; p->centercoords=malloc(ndim*sizeof *p->centercoords); if( p->centercoords==NULL ) error(EXIT_FAILURE, 0, "%s: %zu bytes for 'p->centercoords'", __func__, ndim*sizeof *p->centercoords); /* Set the integer widths of the crop(s) when defined by center. */ ui_set_img_sizes(p); /* For a catalog, we have a separate function, but for a single center value, put the center values into an array. This will essentially simulate a catalog with one row. So from this point on, there is no difference between a catalog input and a central position input. */ if(p->catname) ui_read_cols(p); else { carray=p->center->array; for(i=0;icentercoords[i]=gal_pointer_allocate(GAL_TYPE_FLOAT64, 1, 0, __func__, "p->centercoords[i]"); p->centercoords[i][0]=carray[i]; } } } /* Add all the columns of the log file. Just note that since this is a linked list, we have to add them in the opposite order. */ static void ui_make_log(struct cropparams *p) { char *comment; /* Return if no long file was requested. */ if(p->cp.log==0) return; /* Column to specify if the central pixels are filled. */ if( asprintf(&comment, "Are the central pixels filled? (1: yes, 0: no, " "%u: not checked)", GAL_BLANK_UINT8)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_UINT8, 1, &p->numout, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, "CENTER_FILLED", "bool", comment); free(comment); /* Column for number of datasets used in this crop. */ gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_UINT16, 1, &p->numout, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, "NUM_INPUTS", "count", "Number of input datasets used to make this crop."); /* Filename of crop. */ gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_STRING, 1, &p->numout, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, "CROP_NAME", "name", "File name of crop."); } /* When there is a single image, to avoid complications in the WCS checks, simply convert all the values to pixels and switch to image mode. */ void ui_preparations_to_img_mode(struct cropparams *p) { size_t i; int nwcs; double *darr, pixwidth, *pixscale; struct wcsprm *wcs=gal_wcs_read(p->inputs->v, p->cp.hdu, p->cp.wcslinearmatrix, p->hstartwcs, p->hendwcs, &nwcs, "--hdu"); /* Make sure a WCS actually exists. */ if(wcs==NULL) error(EXIT_FAILURE, 0, "%s (hdu %s): the WCS structure is not " "recognized or isn't present. Hence the WCS mode cannot be " "used as input coordinates. You can try with pixel coordinates " "using '--mode=img'", p->inputs->v, p->cp.hdu); /* If the coordinates are in galactic mode, inform the user. */ if( !p->cp.quiet && (strcmp(wcs->lngtyp, "RA") || strcmp(wcs->lattyp,"DEC")) ) error(EXIT_SUCCESS, 0, "%s (hdu %s): uses the Galactic " "coordinate system for its WCS. If your given point(s) " "are in the Equatorial coordinate system (RA, Dec), you " "will get wrong results. You can suppress this warning " "with '--quiet'", p->inputs->v, p->cp.hdu); /* Convert the given width into pixels. */ if(p->center || p->catname) { /* This function may be called before the formal sanity checks are complete. So we need to check for the presence of '--width' again here. */ if(p->width==NULL) error(EXIT_FAILURE, 0, "no crop width specified. When crops are " "defined by their center (with '--center' or '--catalog') a " "width is necessary (using the '--width' option)"); /* Check if the dataset actually has WCS! */ if(wcs->naxiswidth->size) error(EXIT_FAILURE, 0, "%s (hdu %s): its WCS has %d dimensions " "but %zu dimensions given to '--width'", p->inputs->v, p->cp.hdu, wcs->naxis, p->width->size); /* If the width is in WCS units, convert it to pixels. */ if(p->widthinpix==0) { darr=p->width->array; pixscale=gal_wcs_pixel_scale(wcs); for(i=0;iwidth->size;++i) { pixwidth = darr[i] / pixscale[i]; if(pixwidth>GAL_OPTIONS_WIDTH_TOO_LARGE_SIZE) gal_options_width_too_large(darr[i], i+1, pixwidth, pixscale[i]); darr[i]=pixwidth; } free(pixscale); } } /* Switch the mode and return. */ p->mode=IMGCROP_MODE_IMG; wcsfree(wcs); } static void ui_preparations_to_img_mode_values(struct cropparams *p) { int i, status, *stat=NULL; gal_data_t *tmp, *coords=NULL; struct wcsprm *wcs=p->imgs[0].wcs; size_t ndim=p->imgs[0].ndim, plysize=p->nvertices; double *phi=NULL, *theta=NULL, *pixcrd=NULL, *imgcrd=NULL; /* When central coordinates (either from '--center' or '--catalog' are given). */ if(p->centercoords) { /* Put the coordinate arrays in a list (note that they are in reverse mode). */ for(i=ndim-1;i>=0;--i) gal_list_data_add_alloc(&coords, p->centercoords[i], GAL_TYPE_FLOAT64, 1, &p->numout, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Convert the world coordinates to image coordinates. */ gal_wcs_world_to_img(coords, wcs, 1); /* Clean up: we want the 'array' elements, so we'll set them to NULL first, then clean up the list. */ for(tmp=coords;tmp!=NULL;tmp=tmp->next) tmp->array=NULL; gal_list_data_free(coords); } else if (p->wpolygon) { /* Allocate the necessary arrays, directly calling WCSLIB is easier in this case, because the polygon array for all the points is a single array, not many columns. */ phi = gal_pointer_allocate(GAL_TYPE_FLOAT64, plysize, 0, __func__, "phi"); stat = gal_pointer_allocate(GAL_TYPE_INT32, plysize, 1, __func__, "stat"); theta = gal_pointer_allocate(GAL_TYPE_FLOAT64, plysize, 0, __func__, "theta"); imgcrd = gal_pointer_allocate(GAL_TYPE_FLOAT64, ndim*plysize, 0, __func__, "imgcrd"); pixcrd = gal_pointer_allocate(GAL_TYPE_FLOAT64, ndim*plysize, 0, __func__, "pixcrd"); /* Do the conversion. */ status=wcss2p(wcs, plysize, ndim, p->wpolygon, phi, theta, imgcrd, pixcrd, stat); if(status) error(EXIT_FAILURE, 0, "%s: wcss2p ERROR %d: %s", __func__, status, wcs_errmsg[status]); /* Replace the arrays. */ p->ipolygon=pixcrd; free(p->wpolygon); p->wpolygon=NULL; /* Clean up. */ free(phi); free(stat); free(theta); free(imgcrd); } else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "the problem. the centercoords and wpolygon are both NULL", __func__, PACKAGE_BUGREPORT); } void ui_preparations(struct cropparams *p) { fitsfile *tmpfits; int internalimgmode=0; struct inputimgs *img; int status, firsttype=0; size_t input_counter, firstndim=0; /* If there is only one dataset, convert the given coordinates to pixels and switch to image mode. */ if(p->numin==1 && p->mode==IMGCROP_MODE_WCS) { internalimgmode=1; ui_preparations_to_img_mode(p); } /* For polygon and section, there should be no center checking. */ if(p->polygon || p->section) p->checkcenter=0; /* Allocate space for all the input images. This is done here because WCSLIB is unfortunately not thread-safe when reading the WCS information from the FITS files. In cases where the number of cropped images are more than the input images, this can also be a preformance boost because each image information is only read once. The images are filled in opposite order because we used a linked list to read them in, which is a first in first out structure.*/ errno=0; p->imgs=malloc(p->numin*sizeof *p->imgs); if(p->imgs==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for p->imgs", __func__, p->numin*sizeof *p->imgs); /* Do basic checks of all input images. */ input_counter=p->numin; while(p->inputs) { /* Pop from the list of input images and get the info. */ status=0; img=&p->imgs[--input_counter]; img->name=gal_list_str_pop(&p->inputs); tmpfits=gal_fits_hdu_open_format(img->name, p->cp.hdu, 0, "--hdu"); gal_fits_img_info(tmpfits, &p->type, &img->ndim, &img->dsize, NULL, NULL); img->wcs=gal_wcs_read_fitsptr(tmpfits, p->cp.wcslinearmatrix, p->hstartwcs, p->hendwcs, &img->nwcs); if(img->wcs) img->wcstxt=gal_wcs_write_wcsstr(img->wcs, &img->nwcskeys); else if(p->mode==IMGCROP_MODE_WCS) error(EXIT_FAILURE, 0, "%s (hdu %s): the WCS structure is " "not recognized or isn't present. Hence the WCS mode " "cannot be used as input coordinates. You can try with " "pixel coordinates using '--mode=img'", img->name, p->cp.hdu); fits_close_file(tmpfits, &status); gal_fits_io_error(status, NULL); /* Make sure all the images have the same type and dimensions. */ if(firsttype==0) { /* Set the basic information. */ firsttype = p->type; firstndim = img->ndim; p->blankptrread = gal_blank_alloc_write(p->type); p->blankptrwrite = gal_fits_key_img_blank(p->type); /* Make sure the number of dimensions is supported. */ if(firstndim>MAXDIM) error(EXIT_FAILURE, 0, "%s: is as %zu dimensional dataset, Crop " "currently only supports a maximum of %d dimensions", img->name, firstndim, MAXDIM); /* Make sure the number of coordinates given for center correspond to the dimensionality of the data. */ if(p->center && p->center->size!=firstndim) error(EXIT_FAILURE, 0, "%s (hdu %s) has %zu dimensions, but " "%zu coordinates were given to '--center'", img->name, p->cp.hdu, firstndim, p->center->size); } else { if(firsttype!=p->type) error(EXIT_FAILURE, 0, "%s: type is '%s' while previous input(s) " "were '%s' type. All inputs must have the same pixel data " "type.\n\nYou can use Gnuastro's Arithmetic program to " "convert '%s' to '%s', please run this command for more " "information (press 'SPACE' for going down and 'q' to " "return to the command-line):\n\n" " $ info Arithmetic\n", img->name, gal_type_name(p->type, 1), gal_type_name(firsttype, 1), img->name, gal_type_name(p->type, 1)); if(firstndim!=img->ndim) error(EXIT_FAILURE, 0, "%s: type has %zu dimensions, while " "previous input(s) had %zu dimensions. All inputs must " "have the same number of dimensions", img->name, img->ndim, firstndim); } /* In WCS mode, we need some additional preparations. */ if(p->mode==IMGCROP_MODE_WCS) wcsmode_check_prepare(p, img); } /* Polygon cropping is currently only supported on 2D */ if(p->imgs->ndim!=2 && p->polygon) error(EXIT_FAILURE, 0, "%s: polygon cropping is currently only " "supported on 2D datasets (images), not %zuD datasets", p->imgs->name, p->imgs->ndim); /* Unify central crop methods into 'p->centercoords'. */ if(p->catname || p->center) ui_prepare_center(p); /* 'ui_read_cols' set the number of output crops when a catalog was given, in all other cases, we only have one output. */ if(p->catname==NULL) p->numout=1; /* If there was only one input file and the WCS-mode was internally changed to image-mode, then convert the coordinates too. */ if(internalimgmode) ui_preparations_to_img_mode_values(p); /* Prepare the log file if the user has asked for it. */ ui_make_log(p); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct cropparams *p) { char *msg; struct timeval t1; struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Prepare all the options as FITS keywords to write in output later. */ gal_options_as_fits_keywords(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* To see how long it takes to read meta-data. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Report timing: */ if(!p->cp.quiet) { printf(PROGRAM_NAME" "PACKAGE_VERSION" started on %s", ctime(&p->rawtime)); if(p->cp.numthreads>1) printf(" - Using %zu CPU thread%s\n", p->cp.numthreads, p->cp.numthreads==1 ? "." : "s."); if(p->checkcenter) printf(" - Number of central pixels to check for blank: %zu\n", p->checkcenter); if( asprintf(&msg, "Read metadata of %zu dataset%s.", p->numin, p->numin>1 ? "s" : "")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(&t1, msg, 1); if(p->numout>1) { if( asprintf(&msg, "Will try making %zu crops (from catalog).", p->numout)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, msg, 1); } } } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct cropparams *p, struct timeval *t1) { size_t i; /* Free the simple arrays (if they were set). */ free(p->metaname); free(p->blankptrread); free(p->blankptrwrite); gal_data_free(p->center); if(p->cp.hdu) free(p->cp.hdu); if(p->cathdu) free(p->cathdu); if(p->catname) free(p->catname); /* The arguments (note that the values were not allocated). */ gal_list_str_free(p->inputs, 0); /* Free the name/ array. */ if(p->name) { for(i=0;inumout;++i) free(p->name[i]); free(p->name); } /* Free the log information. */ if(p->cp.log) gal_list_data_free(p->log); /* Print the final message. */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); } gnuastro-0.22/bin/crop/crop.c0000644000175000017500000003416214551337306011617 /********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "onecrop.h" #include "wcsmode.h" /* Write the log entry for each crop. A maximum length of FILENAME_BUFFER_IN_VERB characters is set for the filename to be displayed in stdout in verbose mode. This length is set to make the output on the user's terminal reasonable (in one line). So when the filename is longer than this, its first set of characters are truncated. In the log-file there is no truncation, therefore the log file should be used for checking the outputs, not the outputs printed on the screen. */ static void crop_verbose_info(struct onecropparams *crp) { char *filestatus, *msg; size_t outnamelen=strlen(crp->name);; /* Human readable values. */ filestatus = ( crp->centerfilled==0 ? ( crp->numimg == 0 ? "no overlap" : "removed (blank center)" ) : "created"); /* Define the output string based on the length of the output file. */ if ( outnamelen > FILENAME_BUFFER_IN_VERB ) { if( asprintf(&msg, "...%s %s: %zu input%s.", &crp->name[ outnamelen - FILENAME_BUFFER_IN_VERB + 3 ], filestatus, crp->numimg, crp->numimg==1 ? "" :"s")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&msg, "%-*s %s: %zu input%s.", FILENAME_BUFFER_IN_VERB, crp->name, filestatus, crp->numimg, crp->numimg==1 ? "" : "s")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } /* Print the results. */ gal_timing_report(NULL, msg, 2); free(msg); } /* Print final statistics in verbose mode. */ static void crop_verbose_final(struct cropparams *p) { char *msg; gal_data_t *tmp; size_t i, counter=0, numcrops=0, numstitched=0, numcfilled=0; /* This function is only useful in verbose (non-quiet) mode. */ if(p->cp.quiet) return; /* The information is only available if the user asks for a log file. */ if(p->catname && p->log) { /* Get the basic counts. */ for(tmp=p->log; tmp!=NULL; tmp=tmp->next) switch(++counter) { case 2: for(i=0;inumout;++i) if( ((unsigned short *)(tmp->array))[i] > 1) ++numstitched; break; case 3: /* When the center wasn't checked it has a value of -1, and when it was checked and the center was filled, it has a value of 1. So if 'array[i]==0', we know that the file was removed. */ for(i=0;inumout;++i) { if( ((unsigned char *)(tmp->array))[i] ) ++numcrops; if( ((unsigned char *)(tmp->array))[i] == 1 ) ++numcfilled; } break; } /* Print the basic information. */ if( asprintf(&msg, "%zu crops created.", numcrops)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, msg, 1); free(msg); /* Only if the user wanted to check the center. */ if(p->checkcenter) { if( asprintf(&msg,"%zu pixels filled in the center.",numcfilled)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, msg, 1); free(msg); } /* Only if there were stitched images. */ if(numstitched) { if( asprintf(&msg, "%zu crops used more than one input.", numstitched)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, msg, 1); free(msg); } } } static void crop_write_to_log(struct onecropparams *crp) { char **strarr; gal_data_t *tmp; size_t counter=0; for(tmp=crp->p->log; tmp!=NULL; tmp=tmp->next) { switch(++counter) { case 1: strarr=tmp->array; gal_checkset_allocate_copy(crp->name, &strarr[crp->out_ind]); break; case 2: ((unsigned short *)(tmp->array))[crp->out_ind]=crp->numimg; break; case 3: ((unsigned char *)(tmp->array))[crp->out_ind]=crp->centerfilled; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The value of %zu is not valid for 'counter'", __func__, PACKAGE_BUGREPORT, counter); } } } static void * crop_mode_img(void *inparam) { struct onecropparams *crp=(struct onecropparams *)inparam; struct cropparams *p=crp->p; size_t i; int status; struct inputimgs *img; /* In image mode, we always only have one image. */ crp->in_ind=0; /* The whole catalog is from one image, so you can get the information here:*/ img=&p->imgs[crp->in_ind]; crp->infits=gal_fits_hdu_open_format(img->name, p->cp.hdu, 0, "--hdu"); /* Go over all the outputs that are assigned to this thread: */ for(i=0; crp->indexs[i]!=GAL_BLANK_SIZE_T; ++i) { /* Set all the output parameters: */ crp->out_ind=crp->indexs[i]; crp->outfits=NULL; crp->numimg=1; /* In Image mode there is only one input image. */ onecrop_name(crp); /* Crop the image. */ onecrop(crp); /* If there was no overlap, then no FITS pointer is created, so 'numimg' should be set to zero. */ if(crp->outfits==NULL) crp->numimg=0; /* Check the final output: */ if(crp->numimg) { /* Check if the center of the crop is filled or not. */ crp->centerfilled=onecrop_center_filled(crp); /* Close output FITS image. */ status=0; if( fits_close_file(crp->outfits, &status) ) gal_fits_io_error(status, "CFITSIO could not close " "the opened file"); /* Remove the output image if its center was not filled. */ if(crp->centerfilled==0) { errno=0; if(unlink(crp->name)) error(EXIT_FAILURE, errno, "can't delete %s (center" "was blank)", crp->name); } } else crp->centerfilled=0; /* Report the status on stdout if verbose mode is requested. */ if(!p->cp.quiet) crop_verbose_info(crp); if(p->cp.log) crop_write_to_log(crp); } /* Close the input image. */ status=0; if( fits_close_file(crp->infits, &status) ) gal_fits_io_error(status, "could not close FITS file"); /* Wait until all other threads finish. */ if(p->cp.numthreads>1) pthread_barrier_wait(crp->b); return NULL; } static void * crop_mode_wcs(void *inparam) { struct onecropparams *crp=(struct onecropparams *)inparam; struct cropparams *p=crp->p; size_t i; int status; /* Go over all the output objects for this thread. */ for(i=0; crp->indexs[i]!=GAL_BLANK_SIZE_T; ++i) { /* Set all the output parameters: */ crp->out_ind=crp->indexs[i]; crp->outfits=NULL; crp->name=NULL; crp->numimg=0; /* Set the sides of the crop in RA and Dec */ wcsmode_crop_corners(crp); /* Go over all the images to see if this target is within their range or not. */ crp->in_ind=0; do if(wcsmode_overlap(crp)) { /* Open the input FITS file. */ crp->infits=gal_fits_hdu_open_format(p->imgs[crp->in_ind].name, p->cp.hdu, 0, "--hdu"); /* If a name isn't set yet, set it. */ if(crp->name==NULL) onecrop_name(crp); /* Increment the number of images used (necessary for the header keywords that are written in 'onecrop'). Then do the crop. However, the previously WCS-based overlap can be slightly different from the final overlap, so if we finally don't find any overlap we'll decrement the 'numimg'. */ ++crp->numimg; if( onecrop(crp)==0 ) --crp->numimg; /* Close the file. */ status=0; if( fits_close_file(crp->infits, &status) ) gal_fits_io_error(status, "could not close FITS file"); } while ( ++(crp->in_ind) < p->numin ); /* Correct in_ind. The loop above went until 'in_ind' is one more than the index for the last input image (that is how it exited the loop). But 'crp->in_ind' is needed later, so correct it here. */ --crp->in_ind; /* Check the final output: */ if(crp->numimg) { /* See if the center is filled. */ crp->centerfilled=onecrop_center_filled(crp); /* Close the file. */ status=0; if( fits_close_file(crp->outfits, &status) ) gal_fits_io_error(status, "CFITSIO could not close the " "opened file"); if(crp->centerfilled==0) { errno=0; if(unlink(crp->name)) error(EXIT_FAILURE, errno, "%s", crp->name); } } else { onecrop_name(crp); crp->centerfilled=0; } /* Report the status on stdout if verbose mode is requested. */ if(!p->cp.quiet) crop_verbose_info(crp); if(p->cp.log) crop_write_to_log(crp); } /* Wait until all other threads finish, then return. */ if(p->cp.numthreads>1) pthread_barrier_wait(crp->b); return NULL; } /*******************************************************************/ /************** Top-level function ****************/ /*******************************************************************/ /* Main function for the Image Mode. It is assumed that if only one crop box from each input image is desired, the first and last pixels are already set, irrespective of how the user specified that box. */ void crop(struct cropparams *p) { int err=0; char *tmp; pthread_t t; /* We don't use the thread id, so all are saved here. */ char *mmapname; pthread_attr_t attr; pthread_barrier_t b; struct onecropparams *crp; size_t i, *indexs, thrdcols; gal_list_str_t *comments=NULL; size_t nt=p->cp.numthreads, nb; void *(*modefunction)(void *)=NULL; /* Set the function to run: */ modefunction = p->mode==IMGCROP_MODE_IMG ? &crop_mode_img : &crop_mode_wcs; /* Allocate the array of structures to keep the thread and parameters for each thread. */ errno=0; crp=malloc(nt*sizeof *crp); if(crp==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for 'crp'", __func__, nt*sizeof *crp); /* Distribute the indexs into the threads (for clarity, this is needed even if we only have one object). */ mmapname=gal_threads_dist_in_threads(p->catname ? p->numout : 1, nt, p->cp.minmapsize, p->cp.quietmmap, &indexs, &thrdcols); /* Run the job, if there is only one thread, don't go through the trouble of spinning off a thread! */ if(nt==1) { crp[0].p=p; crp[0].indexs=indexs; modefunction(&crp[0]); } else { /* Initialize the attributes. Note that this running thread (that spinns off the nt threads) is also a thread, so the number the barrier should be one more than the number of threads spinned off. */ if(p->numoutnumout+1; else nb=nt+1; gal_threads_attr_barrier_init(&attr, &b, nb); /* Spin off the threads: */ for(i=0;icp.log) { if(p->checkcenter) { if( asprintf(&tmp, "Width of central check box (in pixels): %zu", p->checkcenter)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_list_str_add(&comments, tmp, 0); } gal_checkset_writable_remove(LOGFILENAME, NULL, 0, p->cp.dontdelete); gal_table_write_log(p->log, PROGRAM_STRING, &p->rawtime, comments, LOGFILENAME, p->cp.quiet); gal_list_str_free(comments, 1); } /* Print the final verbose info, save log, and clean up: */ if(mmapname) gal_pointer_mmap_free(&mmapname, p->cp.quietmmap); else free(indexs); crop_verbose_final(p); free(crp); } gnuastro-0.22/bin/crop/wcsmode.c0000644000175000017500000006101714551337306012314 /********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "onecrop.h" /*******************************************************************/ /**************** Check for ui.c *********************/ /*******************************************************************/ /* This function is called from ui.c. Its job is to check the WCS values of this */ void wcsmode_check_prepare(struct cropparams *p, struct inputimgs *img) { double *pixscale; struct wcsprm *wcs=img->wcs; size_t *dsize=img->dsize, ndim=img->ndim; /* For two dimensions, we have four corners (2 numbers for each) and for three dimensions we have 8 corners (3 numbers for each), so we'll just assume the largest. */ int i, status[8]={0,0,0,0,0,0,0,0}, ncorners=0; double imgcrd[24], phi[8], theta[8], pixcrd[24]; /* Check if the image is aligned with the WCS coordinates. Note that because of small floating point errors, some programs might still keep very small values in the off-diagonal matrix elements. */ if( fabs(wcs->pc[1]/wcs->pc[3])>1e-6 || fabs(wcs->pc[2]/wcs->pc[3])>1e-6 ) error(EXIT_FAILURE, 0, "%s: HDU %s: is not aligned to the " "celestial coordinates. The first FITS axis should be " "along the Right Ascension and the second FITS axis " "should be along the declination.\n\n" "Gnuastro's Warp program can align it with the following " "command:\n\n" " $ astwarp %s --hdu=%s --align\n", img->name, p->cp.hdu, img->name, p->cp.hdu); if(wcs->pc[0]>0) error(EXIT_FAILURE, 0, "%s: HDU %s: An increase in the first " "FITS axis pixel coordinates should be a decrease in the " "RA. You have to flip the image along the second axis " "before running Crop", img->name, p->cp.hdu); if(wcs->pc[3]<0) error(EXIT_FAILURE, 0, "%s: HDU %s: An increase in the second " "FITS axis pixel coordinates should translate to an " "increase in the declination. You have to flip the " "image along the first axis before running Crop", img->name, p->cp.hdu); /* Check the nature of the coordinates, currently we can only support RA and Dec, other modes haven't been checked. */ if( strcmp(wcs->ctype[0], "RA---TAN") || strcmp(wcs->ctype[1], "DEC--TAN") ) error(EXIT_FAILURE, 0, "currently the only WCS types usable are " "'RA---TAN' and 'DEC--TAN' for the first and second axises " "respectively. The WCS types of '%s' (hdu %s) are '%s' and '%s' " "respectively", img->name, p->cp.hdu, wcs->ctype[0], wcs->ctype[1]); /* Check if the pixels are actually a square, then compare the resolution with the other input images. Due to floating point errors, some very small differences might exist in the pixel scale, so break out with an error only if the pixel scales are more different than 1e-6. */ pixscale=gal_wcs_pixel_scale(wcs); if(pixscale==NULL) error(EXIT_FAILURE, 0, "the pixel scale couldn't be deduced from the " "WCS"); if( fabs(pixscale[0]-pixscale[1])/pixscale[0] > 1e-6 ) error(EXIT_FAILURE, 0, "%s: HDU %s: The pixel scale along " "the two image axises is not the same. The first axis " "is %.15g deg/pixel, while the second is %.15g", img->name, p->cp.hdu, pixscale[1], pixscale[0]); if(p->pixscale) { for(i=0;ipixscale[i]-pixscale[i])>1e-10) /* Floating point errors. */ error(EXIT_FAILURE, 0, "%s (hdu %s): has resolution of %g along " "dimension %d. However, previously checked input(s) had " "a resolution of %g in this dimension", img->name, p->cp.hdu, pixscale[i], i+1, p->pixscale[i]); free(pixscale); } else p->pixscale=pixscale; /* Set the coordinates of the dataset's corners. Note that 'dsize' is in C order, while pixcrd is in FITS order.*/ switch(ndim) { case 2: ncorners=4; pixcrd[0] = 1; pixcrd[1] = 1; pixcrd[2] = dsize[1]; pixcrd[3] = 1; pixcrd[4] = 1; pixcrd[5] = dsize[0]; pixcrd[6] = dsize[1]; pixcrd[7] = dsize[0]; break; case 3: ncorners=8; pixcrd[0] = 1; pixcrd[1] = 1; pixcrd[2] = 1; pixcrd[3] = dsize[2]; pixcrd[4] = 1; pixcrd[5] = 1; pixcrd[6] = 1; pixcrd[7] = dsize[1]; pixcrd[8] = 1; pixcrd[9] = dsize[2]; pixcrd[10] = dsize[1]; pixcrd[11] = 1; pixcrd[12] = 1; pixcrd[13] = 1; pixcrd[14] = dsize[0]; pixcrd[15] = dsize[2]; pixcrd[16] = 1; pixcrd[17] = dsize[0]; pixcrd[18] = 1; pixcrd[19] = dsize[1]; pixcrd[20] = dsize[0]; pixcrd[21] = dsize[2]; pixcrd[22] = dsize[1]; pixcrd[23] = dsize[0]; break; default: error(EXIT_FAILURE, 0, "%s: %zu dimensional datasets not supported", __func__, ndim); } /* Get the coordinates of the corners of the dataset in WCS. */ wcsp2s(wcs, ncorners, ndim, pixcrd, imgcrd, phi, theta, img->corners, status); /* Check if there was no error in the conversion. */ for(i=0;isized[0] = ( img->dsize[1] * p->pixscale[0] / cos( img->corners[1] * M_PI / 180 ) ); img->sized[1] = img->dsize[0] * p->pixscale[1]; } else /* 3D */ { img->sized[0] = ( img->dsize[2] * p->pixscale[0] /* RA */ / cos( img->corners[1] * M_PI / 180 ) ); img->sized[1] = img->dsize[1] * p->pixscale[1]; /* Dec */ img->sized[2] = img->dsize[0] * p->pixscale[2]; /* 3D */ } /* In case the image crosses the equator, we will calculate these values here so later on, we don't have to calculate them on every check. See the explanation above 'point_in_dataset'. Note that in both 2D and 3D data, the declination is in the second coordinate (index 1). */ if( img->corners[1] * (img->corners[1]+img->sized[1]) < 0 ) { /* re in the comments above 'point_in_dataset'. */ img->equatorcorr[0]=img->corners[0] -0.5*img->sized[0]*(1-cos(img->corners[1]*M_PI/180)); /* sre in the comments above 'point_in_dataset'. */ img->equatorcorr[1]=img->sized[0]*cos(img->corners[1]*M_PI/180); } /* Just to check: printf("\n\n%s:\n", img->name); if(ndim==2) printf("(%.10f, %.10f)\n" "(%.10f, %.10f)\n" "(%.10f, %.10f)\n" "(%.10f, %.10f)\n\n", img->corners[0], img->corners[1], img->corners[2], img->corners[3], img->corners[4], img->corners[5], img->corners[6], img->corners[7]); else printf("(%.10f, %.10f, %.10f)\n" "(%.10f, %.10f, %.10f)\n" "(%.10f, %.10f, %.10f)\n" "(%.10f, %.10f, %.10f)\n" "(%.10f, %.10f, %.10f)\n" "(%.10f, %.10f, %.10f)\n" "(%.10f, %.10f, %.10f)\n" "(%.10f, %.10f, %.10f)\n\n", img->corners[0], img->corners[1], img->corners[2], img->corners[3], img->corners[4], img->corners[5], img->corners[6], img->corners[7], img->corners[8], img->corners[9], img->corners[10], img->corners[11], img->corners[12], img->corners[13], img->corners[14], img->corners[15], img->corners[16], img->corners[17], img->corners[18], img->corners[19], img->corners[20], img->corners[21], img->corners[22], img->corners[23] ); exit(0); */ } /*******************************************************************/ /************ Check if WCS is in image **************/ /*******************************************************************/ /* Set the four sides around the point of interest in RA and Dec. NOTE: When the image is aligned with the celestial coordinates (current working paradigm), the declination is measured on a great circle, while the right ascension is not. So we have to consider this in calculating the difference in RA. */ void wcsmode_crop_corners(struct onecropparams *crp) { struct cropparams *p=crp->p; size_t i, ndim=p->imgs->ndim; double minra=FLT_MAX, mindec=FLT_MAX; double maxra=-FLT_MAX, maxdec=-FLT_MAX; double r, d, l, dr, h[MAXDIM], hr[MAXDIM]; size_t rmini=-1, rmaxi=-1, dmini=-1, dmaxi=-1; /* Set the four corners of the WCS region. */ if(p->polygon) { /* A small sanity check. */ if(ndim!=2) error(EXIT_FAILURE, 0, "%s: polygon crops are currently only " "supported on 2D datasets, the input dataset is %zuD", __func__, ndim); /* Find their minimum and maximum values. */ for(i=0;invertices;++i) { if(p->wpolygon[i*2]>maxra) maxra=p->wpolygon[i*2]; if(p->wpolygon[i*2]wpolygon[i*2]; if(p->wpolygon[i*2+1]>maxdec) maxdec=p->wpolygon[i*2+1]; if(p->wpolygon[i*2+1]wpolygon[i*2+1]; } /* Set the corners: */ crp->corners[0] = maxra; crp->corners[1] = mindec; /* Bottom Left */ crp->corners[2] = minra; crp->corners[3] = mindec; /* Bottom Right */ crp->corners[4] = maxra; crp->corners[5] = maxdec; /* Top Left */ crp->corners[6] = minra; crp->corners[7] = maxdec; /* Top Right */ } else { /* Set the RA and Dec to use as center. */ r=crp->world[0]=p->centercoords[0][crp->out_ind]; d=crp->world[1]=p->centercoords[1][crp->out_ind]; if(ndim==3) l=crp->world[2]=p->centercoords[2][crp->out_ind]; /* Calculate the declination in radians for easy readability. */ dr=d*M_PI/180; /* Set the half width in each dimension. For the angular dimensions, also calculate it in radians. */ hr[0] = ( h[0] = ((double *)(p->width->array))[0] / 2 ) * M_PI / 180; hr[1] = ( h[1] = ((double *)(p->width->array))[1] / 2 ) * M_PI / 180; if(ndim==3) h[2] = ((double *)(p->width->array))[2] / 2; /* Set the corners of this crop. */ switch(ndim) { case 2: crp->corners[0] = r+h[0]/cos(dr-hr[1]); crp->corners[1] = d-h[1]; /* Bottom left. */ crp->corners[2] = r-h[0]/cos(dr-hr[1]); crp->corners[3] = d-h[1]; /* Bottom Right. */ crp->corners[4] = r+h[0]/cos(dr+hr[1]); crp->corners[5] = d+h[1]; /* Top Left. */ crp->corners[6] = r-h[0]/cos(dr+hr[1]); crp->corners[7] = d+h[1]; /* Top Right. */ break; case 3: /* Note that the third dimension is assumed to be independent of the first two. So the first two coordinates of its corners in the front and back (on the two faces in the third dimension), are equal. */ crp->corners[0] = crp->corners[12] = r+h[0]/cos(dr-hr[1]); crp->corners[1] = crp->corners[13] = d-h[1]; crp->corners[2] = l-h[2]; /* Bottom left front. */ crp->corners[3] = crp->corners[15] = r-h[0]/cos(dr-hr[1]); crp->corners[4] = crp->corners[16] = d-h[1]; crp->corners[5] = l-h[2]; /* Bottom right front.*/ crp->corners[6] = crp->corners[18] = r+h[0]/cos(dr+hr[1]); crp->corners[7] = crp->corners[19] = d+h[1]; crp->corners[8] = l-h[2]; /* Top Left front. */ crp->corners[9] = crp->corners[21] = r-h[0]/cos(dr+hr[1]); crp->corners[10] = crp->corners[22] = d+h[1]; crp->corners[11] = l-h[2]; /* Top right front. */ crp->corners[14] = l+h[2]; /* Bottom left back. */ crp->corners[17] = l+h[2]; /* Bottom right back. */ crp->corners[20] = l+h[2]; /* Top left back. */ crp->corners[23] = l+h[2]; /* Top right back. */ break; } } /* Set the bottom width and height of the crop in degrees. Note that the width changes as the height changes, so here we want the height and the lowest declination. Note that in 2D on the bottom edge, corners[0] is the maximum RA and corners[2] is the minimum RA. For all the 2D region, corners[5] is one of the maximum declinations and corners[1] is one of the the minimum declinations. North and south hemispheres are no problem: When using the center, they are set properly (in any hemisphere) and for a polygon, the minimums and maximums are automatically found. */ rmini = ndim; /* First element in second corner. */ rmaxi = 0; /* First element. */ dmini = 1; /* Second element. */ dmaxi = ndim==2 ? 5 : 7; /* Second element in third corner. */ crp->sized[0]=( (crp->corners[rmaxi]-crp->corners[rmini]) / cos(crp->corners[dmini]*M_PI/180) ); crp->sized[1]=crp->corners[dmaxi]-crp->corners[dmini]; if(ndim==3) crp->sized[2] = crp->corners[14] - crp->corners[2]; /* In case the crop crosses the equator, then we need these two corrections. See the complete explanations above 'point_in_dataset'. */ if(crp->corners[1]*(crp->corners[1]+crp->sized[1]) < 0 ) { /* re in the explanations above 'point_in_dataset'. */ crp->equatorcorr[0]=crp->corners[0] -0.5*crp->sized[0]*(1-cos(crp->corners[1]*M_PI/180)); /* sre in the explanations above 'point_in_dataset'. */ crp->equatorcorr[1]=crp->sized[0]*cos(crp->corners[1]*M_PI/180); } /* Just to check: if(ndim==2) { printf("\n\n%g, %g:\n", r, d); printf("\t(%.10f, %.10f)\n" "\t(%.10f, %.10f)\n" "\t(%.10f, %.10f)\n" "\t(%.10f, %.10f)\n\n", crp->corners[0], crp->corners[1], crp->corners[2], crp->corners[3], crp->corners[4], crp->corners[5], crp->corners[6], crp->corners[7]); } else { printf("\n\n%g, %g, %g:\n", r, d, l); printf("\t(%.10f, %.10f, %g)\n" "\t(%.10f, %.10f, %g)\n" "\t(%.10f, %.10f, %g)\n" "\t(%.10f, %.10f, %g)\n" "\t(%.10f, %.10f, %g)\n" "\t(%.10f, %.10f, %g)\n" "\t(%.10f, %.10f, %g)\n" "\t(%.10f, %.10f, %g)\n\n", crp->corners[0], crp->corners[1], crp->corners[2], crp->corners[3], crp->corners[4], crp->corners[5], crp->corners[6], crp->corners[7], crp->corners[8], crp->corners[9], crp->corners[10], crp->corners[11], crp->corners[12], crp->corners[13], crp->corners[14], crp->corners[15], crp->corners[16], crp->corners[17], crp->corners[18], crp->corners[19], crp->corners[20], crp->corners[21], crp->corners[22], crp->corners[23] ); } exit(0); */ } /* We have the polygon vertices in WCS coordinates and need to change them to one input image's pixel coordinates. */ void fillcrpipolygon(struct onecropparams *crp) { struct cropparams *p=crp->p; gal_data_t *tmp, *coords=NULL; size_t i, d, ndim=p->imgs->ndim; /* Allocate the necessary arrays for each column. */ for(d=0;dnvertices, NULL, 0, -1, 1, NULL, NULL, NULL); /* Fill in the world coordinate columns. */ for(i=0;invertices;++i) { d=0; for(tmp=coords;tmp!=NULL;tmp=tmp->next) ((double *)(tmp->array))[i] = p->wpolygon[ i * ndim + d++ ]; } /* Convert them to image coordinates. */ gal_wcs_world_to_img(coords, p->imgs[crp->in_ind].wcs, 1); /* Allocate the image polygon array, and put the image polygon vertice values into it. */ crp->ipolygon=gal_pointer_allocate(GAL_TYPE_FLOAT64, ndim*p->nvertices, 0, __func__, "crp->ipolygon"); for(i=0;invertices;++i) { d=0; for(tmp=coords;tmp!=NULL;tmp=tmp->next) crp->ipolygon[ i * ndim + d++ ] = ((double *)(tmp->array))[i]; } /* Clean up. */ gal_list_data_free(coords); } /* BASICS: ======= An image is a rectangle, but the sky is on a globe. When the images are aligned to the celstial coordinates, (as we have required here in wcscheckprepare) the first FITS axis shows change in RA, while the second axis shows change in Dec. The declination always changes along a great circle, so there is no problem. But unless declination is constrained to zero, RA changes on small circles. See the rectangle below, assume it is an image. To check if a given point is within the same declination as this rectangle is very simple, since d3==d4 and d1==d2. Note that r1>r2 and r3>r4 (because right ascension increases to the east). (r3,d3) ------------------ (r4,d4) | | | | | | | | (r1,d1) ------------------ (r2,d2) But for RA, the same number of pixels on each declination, corresponds to different ranges in right ascention. As the declination gets higher in the northern hemisphere (where the declination rises towards the top of the image) r1-r2 becomes smaller than r3-r4. So, in terms of coverage in RA and Dec, this box should rather be shown like this trapezoid (exaggerated): -------------------- | | | | (Northern hemisphere) | | | | -------------- On the southern hemisphere it should be shown like this: ---------------- | | | | (Southern hemisphere) | | | | ---------------------- The functional form of the change is the inverse cosine, so: (r3-r4)=(r1-r2)/cos(d3-d1) (North) (r1-r2)=(r3-r4)/cos(d1-d3) (South) QUESTION: ======== Is a given point at the RA and Dec of (rp,dp) inside our rectangular image? IMAGE IS FULLY WITHIN ONE HEMISPHERE ------------------------------------ Our reference point for the image is the first pixel in the image, which by convention is the (r1,d1) point in the rectangle above. We also have the angular size of the rectangular image as 'sr', 'sd' (for "size in RA" and "size in dec"). NOTE: This has to be We also assume r1+sr and d1+sd are the distances to the last pixels in our rectangular image. As explained above, to check the declination range, everything is very easy: dp>=d1 && dp<=d1+sd For RA, things become a little more complicated (recall that r1>r3). 'n' is defined as half of the extra space between the top and bottom lines of the two trapezoids. (North) n=0.5*sr*(1/cos(dp-d1)-1) ==> rp<=r1+n && rp>=r1-sr-n (South) n=0.5*sr*(1-cos(dp-d1)) ==> rp<=r1-n && rp>=r1-sr+n IMAGE CROSSES THE EQUATOR ------------------------- When d1*(d1+sd)<0, the image crosses the equator (d1 is negative and d1+sd is positive). In this case, we define 're' and 'sre' as an equivalent of r1 and sr but on the equator: re=r1-0.5*sr*(1-cos(d1)) && sre=sr*cos(d1) then for all the points with negative declination we use the (South) equations of above as before and for those points that have a positive declination, we use the North formula but replacing r1 with re, d1 with 0 and sr with sre. INPUTS ------ p[]: Point coordinates (rp and dp above). i[]: Coordinates of first pixel in image. (r1 and d1 above). s[]: Size/width of box (sr and sd above). c[]: Corrections if equator is passed, (se and sre above). IMPORTANT: It is assumed that the dimensions are ordered with: 0: RA 1: Dec 2: Third dimension (independent of RA and Dec). */ static int point_in_dataset(double *p, double *i, double *s, double *c, size_t ndim) { double n; /* If there is a third dimension, then first check that. Note that the third dimension is assumed to be indendent of the first two. */ if(ndim==3 && ( p[2]i[2]+s[2] ) ) return 0; /* In the RA and Dec checks, first check the declination. If it is not in range, you can safely return 0. */ if(p[1]>=i[1] && p[1]<=i[1]+s[1]) { if(p[1]<=0) /* Point is in southern hemisphere, it */ { /* doesn't matter if image passes equator! */ n=0.5f*s[0]*( 1 - cos((p[1]-i[1])*M_PI/180) ); if(p[0]<=i[0]-n && p[0]>=i[0]-s[0]+n) return 1; } else /* Point is in the northern hemisphere. */ { if( i[1] * (s[1]+i[1]) > 0 ) /* Image does not cross equator. */ { n=0.5f*s[0]*( 1/cos((p[1]-i[1])*M_PI/180) - 1); if(p[0]<=i[0]+n && p[0]>=i[0]-s[0]-n) return 1; } else /* Image crosses the equator.*/ { n=0.5f*c[1]*( 1/cos((p[1] )*M_PI/180) - 1); if(p[0]<=c[0]+n && p[0]>=c[0]-c[1]-n) return 1; } } } return 0; } /* Is there an overlap between this crop box and the survey image? This function will return 0 if there isn't and 1 if there is. We don't want to necessarily assume that the crop box is smaller than the survey images. If we made that assumption, we only had to check if the corners of the crop are in the image. When we allow the input survey images to be smaller than the crop box, it might happen that none of the corners of the crop are in the image but there is an overlap (the survey image is completely within the crop box). So we have to check both. */ int wcsmode_overlap(struct onecropparams *crp) { double *d, *fd; double *i, *s, *c; /* for clear viewing. */ struct cropparams *p=crp->p; size_t ndim=crp->p->imgs->ndim; /* First check if the corners of the crop are in the image.*/ s=p->imgs[crp->in_ind].sized; i=p->imgs[crp->in_ind].corners; c=p->imgs[crp->in_ind].equatorcorr; fd=(d=crp->corners) + (ndim==2 ? 8 : 24); do { /* As long as one of the crop corners are in the image, we know there is overlap and can return a true value. We don't need to check all corners. */ if( point_in_dataset(d, i, s, c, ndim) ) return 1; d+=ndim; } while(dsized; i=crp->corners; c=crp->equatorcorr; fd=(d=p->imgs[crp->in_ind].corners) + (ndim==2 ? 8 : 24); do { if( point_in_dataset(d, i, s, c, ndim) ) return 1; d+=ndim; } while(d Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "onecrop.h" #include "wcsmode.h" /*******************************************************************/ /************ Set/correct first and last pixel **************/ /*******************************************************************/ /* Read the section string and set the starting and ending pixels based on that. */ void onecrop_parse_section(struct cropparams *p, size_t *dsize, long *fpixel, long *lpixel) { int add; long read; char *tailptr; long naxes[MAXDIM]; char forl='f', *pt=p->section; size_t i, ndim=p->imgs->ndim, dim=0; /* When the user asks for a section of the dataset, then the cropped region is not defined by its center. So it makes no sense to later check if the center is blank or not. Hence, we will over-write it with zero. */ p->checkcenter=0; /* Initialize the fpixel and lpixel arrays (note that 'section' is only defined in image mode, so there will only be one element in 'imgs'. */ for(i=0;iimgs->dsize[ ndim - i - 1 ]; } /* Parse the string: 'forl': "first-or-last". */ while(*pt!='\0') { add=0; switch(*pt) { case ',': ++dim; if(dim>=ndim) error(EXIT_FAILURE, 0, "Extra ',' in '%s'", p->section); forl='f'; ++pt; break; case ':': forl='l'; ++pt; break; case '.': error(EXIT_FAILURE, 0, "the numbers in the argument to " "'--section' ('-s') have to be integers. You input " "includes a float number: %s", p->section); break; case ' ': case '\t': ++pt; break; case '*': add=1; /* If it is an asterisk, then add the */ ++pt; /* given value to the maximum size of */ break; /* the image. */ /* Numerical characters signify the start of a number, so we don't need to increment the pointer and can just break out. */ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '-': break; /* An un-recognized character should crash the program. */ default: error(EXIT_FAILURE, 0, "value to '--section' must only contain " "integer numbers and these special characters between them: " "',', ':', '*' when necessary. But it is '%s' (the first " "non-acceptable character is '%c').\n\n" "Please run the command below to learn more about this " "option in Gnuastro's Crop program:\n\n" " $ info gnuastro \"Crop section syntax\"\n", p->section, *pt); break; } /* Read the number: */ read=strtol(pt, &tailptr, 0); /* Check if there actually was a number. printf("\n\n------\n%c: %ld (%s)\n", *pt, read, tailptr); */ /* Make sure if a number was read at all? */ if(tailptr==pt) /* No number was read! */ { if(add) read=0; /* We have a * followed by ':' or ','. */ else continue; } /* Put it in the correct array. */ if(forl=='f') fpixel[dim] = add ? naxes[dim]+read : read; else lpixel[dim] = add ? naxes[dim]+read : read; pt=tailptr; } /* Make sure the first pixel is located before/below the last pixel. */ for(i=0;ilpixel[i]) error(EXIT_FAILURE, 0, "the bottom left corner coordinates " "cannot be larger or equal to the top right's! Your section " "string (%s) has been read as: bottom left coordinate " "(%ld, %ld) to top right coordinate (%ld, %ld)", p->section, fpixel[0], fpixel[1], lpixel[0], lpixel[1]); /* For a check: printf("\n%s\n", p->section); printf("fpixel: ("); for(i=0;imaxx) maxx=ipolygon[i*2]; if(ipolygon[i*2]maxy) maxy=ipolygon[i*2+1]; if(ipolygon[i*2+1]=0.5 ? (int)minx + 1 : (int)minx; fpixel[1] = miny - (int)miny >=0.5 ? (int)miny + 1 : (int)miny; lpixel[0] = maxx - (int)maxx >=0.5 ? (int)maxx + 1 : (int)maxx; lpixel[1] = maxy - (int)maxy >=0.5 ? (int)maxy + 1 : (int)maxy; } #define POLYGON_MASK(CTYPE) { \ CTYPE *ba=array, *bb=gal_blank_alloc_write(type); \ for(i=0;ip->type; double *ipolygon, point[2]; int polygonout=crp->p->polygonout; int (*isinside)(double *, double *, size_t); size_t i, *ordinds, size=s0*s1, nvertices=crp->p->nvertices; /* First of all, allocate enough space to put a copy of the input coordinates (we will be using that after sorting in an anti-clickwise manner.) */ errno=0; ipolygon=malloc(2*nvertices*sizeof *ipolygon); if(ipolygon==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for ipolygon", __func__, 2*nvertices*sizeof *ipolygon); errno=0; ordinds=malloc(nvertices*sizeof *ordinds); if(ordinds==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for ordinds", __func__, nvertices*sizeof *ordinds); /* If the user wants to sort the edges, do it. If not, make sure its in counter-clockwise orientation. */ if(crp->p->polygonsort) gal_polygon_vertices_sort(crp->ipolygon, nvertices, ordinds); else { /* Keep the original order of the vertices, just make it counter-clockwise. */ for(i=0;iipolygon, nvertices); } /* Fill the final polygon vertice positions within 'ipolygon' and also the fpixel_i coordinates from all the vertices to bring them into the crop image coordinates. */ for(i=0;iipolygon[ordinds[i]*2] - fpixel_i[0]; ipolygon[i*2+1] = crp->ipolygon[ordinds[i]*2+1] - fpixel_i[1]; } /* Print a warning if we done the sorting, _and_ the sorted polygon is concave, _and_ the user hasn't activated the quiet mode. Note that we could'n do this immediately after calling 'gal_polygon_vertices_sort' because that function doesn't touch the actual vertice values, it only fills 'ordinds'. */ if(crp->p->polygonsort && !crp->p->cp.quiet && !gal_polygon_is_convex(ipolygon, nvertices) ) error(0, 0, "%s: warning: the given vertices belong to a concave " "polygon, but there is no unique solution to the sorting of " "concave polygons. Please check the cropped image, if it doesn't " "correspond to your desired polygon, sort the vertices yourself " "in counter-clockwise order _and_ don't use the '--polygonsort' " "option", __func__); /* Set the function for checking if a point is inside the polygon. For concave polygons the process is more complex and thus slower. Therefore when the polygon is convex, its better to use the simpler/faster function. */ isinside = ( gal_polygon_is_convex(ipolygon, nvertices) ? gal_polygon_is_inside_convex : gal_polygon_is_inside ); /* Go over all the pixels in the image and if they are within the polygon keep them if the user has asked for it.*/ switch(type) { case GAL_TYPE_UINT8: POLYGON_MASK(uint8_t); break; case GAL_TYPE_INT8: POLYGON_MASK(int8_t); break; case GAL_TYPE_UINT16: POLYGON_MASK(uint16_t); break; case GAL_TYPE_INT16: POLYGON_MASK(int16_t); break; case GAL_TYPE_UINT32: POLYGON_MASK(uint32_t); break; case GAL_TYPE_INT32: POLYGON_MASK(int32_t); break; case GAL_TYPE_INT64: POLYGON_MASK(int64_t); break; case GAL_TYPE_FLOAT32: POLYGON_MASK(float); break; case GAL_TYPE_FLOAT64: POLYGON_MASK(double); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s, so we " "can fix the problem. Type code %d is not recognized", __func__, PACKAGE_BUGREPORT, type); } /* Clean up: */ free(ordinds); free(ipolygon); } /*******************************************************************/ /****************** One crop. *********************/ /*******************************************************************/ static void onecrop_zero_to_nan(void *array, size_t size, int type) { float *fp, *ffp; double *dp, *fdp; switch(type) { case GAL_TYPE_FLOAT32: ffp=(fp=array)+size; do if(*fp==0.0f) *fp=NAN; while(++fpp; struct gal_options_common_params *cp=&p->cp; /* Set the output name and crop sides: */ if(p->catname) { /* If a name column was set, use it, otherwise, use the ID of the profile. */ if(p->name) { strarr=p->name; if( asprintf(&crp->name, "%s%s%s", cp->output, strarr[crp->out_ind], p->suffix)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else if( asprintf(&crp->name, "%s%zu%s", cp->output, crp->out_ind+1, p->suffix)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); /* Make sure the file doesn't exist. */ gal_checkset_writable_remove(crp->name, NULL, cp->keep, cp->dontdelete); } else { /* Set the output name. */ if(p->outnameisfile) /* An output file was specified. */ { crp->name=cp->output; gal_checkset_writable_remove(crp->name, p->imgs[crp->in_ind].name, cp->keep, cp->dontdelete); } else /* The output was a directory, use automatic output. */ crp->name=gal_checkset_automatic_output(cp, p->imgs[crp->in_ind].name, p->suffix); } } /* Find the first and last pixel of a crop. */ static void onecrop_flpixel(struct onecropparams *crp) { struct cropparams *p=crp->p; size_t ndim=p->imgs->ndim; double center[MAXDIM]; int ncoord=1, status=0; size_t i, *dsize=p->imgs[crp->in_ind].dsize; long *fpixel=crp->fpixel, *lpixel=crp->lpixel; double pixcrd[MAXDIM], imgcrd[MAXDIM], phi[1], theta[1]; switch(p->mode) { case IMGCROP_MODE_IMG: if(p->section) /* Defined by section. */ onecrop_parse_section(p, dsize, fpixel, lpixel); else if(p->polygon) /* Defined by a polygon. */ { if(p->polygonout==0) onecrop_ipolygon_fl(p->ipolygon, p->nvertices, fpixel, lpixel); } else /* Defined by its center. */ { for(i=0;icentercoords[i][crp->out_ind]; gal_box_border_from_center(center, ndim, p->iwidth, fpixel, lpixel); } break; case IMGCROP_MODE_WCS: /* In wcsmode, crp->world is already filled. */ if(p->polygon) /* Note: p->iwidth was set based on p->wwidth. */ { /* Fill crp->ipolygon in wcspolygonpixel, then set flpixel*/ fillcrpipolygon(crp); if(p->polygonout==0) onecrop_ipolygon_fl(crp->ipolygon, p->nvertices, fpixel, lpixel); } else { /* Convert 'crp->world' (in WCS) into 'pixcrd' (image coord). */ if(wcss2p(p->imgs[crp->in_ind].wcs, ncoord, ndim, crp->world, phi, theta, imgcrd, pixcrd, &status) ) if(status) error(EXIT_FAILURE, 0, "%s: wcss2p error %d: %s", __func__, status, wcs_errmsg[status]); /* Find the first and last pixels of this crop. */ gal_box_border_from_center(pixcrd, ndim, p->iwidth, fpixel, lpixel); } break; default: error(EXIT_FAILURE, 0, "%s: a bug! The domain (WCS or image) are not " "set. Please contact us at %s so we can see how it got to this " "impossible place", __func__, PACKAGE_BUGREPORT); } /* If the user only wants regions outside to the polygon, then set the fpixel and lpixel to cover the full input image. */ if(p->polygon && p->polygonout) { crp->fpixel[0]=crp->fpixel[1]=1; crp->lpixel[0]=dsize[1]; crp->lpixel[1]=dsize[0]; } } static void one_crop_make_array_0th(struct onecropparams *crp, char *outname, long *fpixel_i, long *lpixel_i, long *naxes) { struct cropparams *p=crp->p; int status=0; fitsfile *fptr; char basekeyname[FLEN_KEYWORD-5]; size_t i, j=0, ndim=p->imgs->ndim; struct inputimgs *img=&p->imgs[crp->in_ind]; char region[FLEN_VALUE], regionkey[FLEN_KEYWORD]; /* Create the file (after this function returns, the rest assumes that the file is ready). */ if(p->primaryimghdu) { if(fits_create_file(&fptr, outname, &status)) gal_fits_io_error(status, "creating file"); fits_close_file(fptr, &status); } else { /* Write the selected region of this image as a string to include as a FITS keyword. Then we want to delete the last coma ','.*/ for(i=0;icp.ckeys, "Crop metadata", 0); sprintf(basekeyname, "ICF%zu", crp->numimg); gal_fits_key_write_filename(basekeyname, img->name, &p->cp.ckeys, 0, p->cp.quiet); sprintf(regionkey, "%sPIX", basekeyname); gal_fits_key_list_add_end(&p->cp.ckeys, GAL_TYPE_STRING, regionkey, 0, region, 0, "Range of pixels used " "for this output.", 0, NULL, 0); /* Write the 0-th HDU. */ gal_fits_key_write(p->cp.ckeys, outname, "0", "NONE", 0, 1); } } /* Find the size of the final FITS image (irrespective of how many crops will be needed for it) and make the image to keep the data. NOTE: The fpixel and lpixel in crp keep the first and last pixel of the total image for this crop, irrespective of the final keeping blank areas or not. While the fpixel_i and lpixel_i arrays keep the first and last pixels after the blank pixels have been removed. */ static void onecrop_make_array(struct onecropparams *crp, long *fpixel_i, long *lpixel_i, long *fpixel_c, long *lpixel_c) { struct cropparams *p=crp->p; double crpix; fitsfile *ofp; long naxes[MAXDIM]; char *outname=crp->name; int status=0, type=p->type; char **strarr, cpname[FLEN_KEYWORD]; size_t i, ndim=p->imgs->ndim, totsize; gal_data_t *rkey=gal_data_array_calloc(1); struct inputimgs *img=&p->imgs[crp->in_ind]; /* Set the size of the output, in WCS mode, noblank==0. */ if(p->noblank && p->mode==IMGCROP_MODE_IMG) for(i=0;ilpixel[i]-crp->fpixel[i]+1; /* Create the FITS file with a blank first extension, then close it, so with the next 'fits_open_file', we build the image in the second extension. But only if the user didn't want the append the crop to an existing file or if the file doesn't exist at all. This way, at least for Gnuastro's outputs, we can consistently use '-h1' (something like how you count columns, or generally everything from 1). */ if(p->append==0 || gal_checkset_check_file_return(outname)==0) one_crop_make_array_0th(crp, outname, fpixel_i, lpixel_i, naxes); /* Create the output crop image. */ fits_open_file(&crp->outfits, outname, READWRITE, &status); fits_create_img(crp->outfits, gal_fits_type_to_bitpix(type), ndim, naxes, &status); gal_fits_io_error(status, "creating image"); ofp=crp->outfits; /* When CFITSIO creates a FITS extension it adds two comments linking to the FITS paper. Since we are mentioning the version of CFITSIO and only use its routines to read/write from/to FITS files, this is redundant. If 'status!=0', then 'gal_fits_io_error' will abort, but in case CFITSIO doesn't write the comments, status will become non-zero. So we are resetting it to zero after these (because not being able to delete them isn't an error). */ fits_delete_key(ofp, "COMMENT", &status); fits_delete_key(ofp, "COMMENT", &status); status=0; /* Name of extension. */ fits_update_key(ofp, TSTRING, "EXTNAME", p->metaname, "Name of HDU (extension).", &status); gal_fits_io_error(status, "writing EXTNAME"); /* Read the units of the input dataset and store them in the output. */ rkey->next=NULL; rkey->name="BUNIT"; rkey->type=GAL_TYPE_STRING; gal_fits_key_read_from_ptr(crp->infits, rkey, 1, 1); if(rkey->status==0) /* The BUNIT keyword was read. */ { strarr=rkey->array; fits_update_key(ofp, TSTRING, "BUNIT", strarr[0], "physical units", &status); gal_fits_io_error(status, "writing BUNIT"); } rkey->name=NULL; /* 'name' wasn't allocated. */ gal_data_free(rkey); /* Write the blank value as a FITS keyword if necessary. */ if( type!=GAL_TYPE_FLOAT32 && type!=GAL_TYPE_FLOAT64 ) if(fits_write_key(ofp, gal_fits_type_to_datatype(type), "BLANK", p->blankptrwrite, "Pixels with no data.", &status) ) gal_fits_io_error(status, "adding Blank"); totsize = naxes[0]*naxes[1] * (ndim==3?naxes[2]:1); if(fits_write_null_img(ofp, 1, totsize, &status)) gal_fits_io_error(status, "writing null array"); /* Write the WCS header keywords in the output FITS image, then update the header keywords. */ if(img->wcs) { /* Write the WCS title and common WCS information. */ gal_fits_key_write_wcsstr(ofp, img->wcs, img->wcstxt, img->nwcskeys); /* Correct the CRPIX keywords. */ for(i=0;iwcs->crpix[i] - (fpixel_i[i]-1) + (fpixel_c[i]-1); fits_update_key(ofp, TDOUBLE, cpname, &crpix, NULL, &status); gal_fits_io_error(status, NULL); } } } /* The starting and ending points are set in the onecropparams structure for one crop from one image. Crop that region out of the input. On'basekeyname': To be safe, GCC 8.1 (and persumably later versions) assumes that we are writing the full statically allocated space into 'regioinkey'! So it prints a warning that you may be writing outside the allocated space! With these variables, we are ultimately just writing the file counters, so we can never (with current techologies!!!) exceed 'FLEN_KEYWORD' (which is 75 characters). To avoid compiler warnings, we are just removing a few characters ('FLEN_KEYWORD-5') to allow the suffix and remove the warnings. */ int onecrop(struct onecropparams *crp) { struct cropparams *p=crp->p; struct inputimgs *img=&p->imgs[crp->in_ind]; void *array; char *stdoutstring; int status=0, anynul=0; int returnvalue=1, hasoneelem=1; fitsfile *ifp=crp->infits, *ofp; /* '-5': avoid gcc 8.1+ warnings! */ size_t i, cropsize=1, ndim=img->ndim; /* See above comment for more. */ long fpixel_o[MAXDIM], lpixel_o[MAXDIM], inc[MAXDIM]; long naxes[MAXDIM], fpixel_i[MAXDIM], lpixel_i[MAXDIM]; /* Fill the 'naxes' and 'inc' arrays. */ for(i=0;idsize[ ndim - i - 1 ]; } /* Find the first and last pixel of this crop box from this input image. Then copy the first and last pixels into the '_i' arrays.*/ onecrop_flpixel(crp); memcpy(fpixel_i, crp->fpixel, ndim*sizeof *fpixel_i); memcpy(lpixel_i, crp->lpixel, ndim*sizeof *lpixel_i); /* Find the overlap and apply it if there is any overlap. */ if( gal_box_overlap(naxes, fpixel_i, lpixel_i, fpixel_o, lpixel_o, ndim) ) { /* See if the output only has a single element or not. */ for(i=0;ioutfits==NULL && !( p->oneelemstdout && hasoneelem) ) onecrop_make_array(crp, fpixel_i, lpixel_i, fpixel_o, lpixel_o); ofp=crp->outfits; /* Allocate an array to keep the desired crop region, then read the desired pixels into it. */ status=0; for(i=0;itype, cropsize, 0, __func__, "array"); if(fits_read_subset(ifp, gal_fits_type_to_datatype(p->type), fpixel_i, lpixel_i, inc, p->blankptrread, array, &anynul, &status)) gal_fits_io_error(status, NULL); /* If we have a floating point or double image, pixels with zero value should actually be a NaN. Unless the user specificly asks for it, make the conversion.*/ if(p->zeroisnotblank==0 && (p->type==GAL_TYPE_FLOAT32 || p->type==GAL_TYPE_FLOAT64) ) onecrop_zero_to_nan(array, cropsize, p->type); /* If a polygon is given, remove all the pixels within or outside of it.*/ if(p->polygon) { /* A small sanity check until this part supports 3D. */ if(ndim!=2) error(EXIT_FAILURE, 0, "%s: polygons only implemented in 2D", __func__); /* In WCS mode, crp->ipolygon was allocated and filled in wcspolygonflpixel (wcsmode.c). */ if(p->mode==IMGCROP_MODE_IMG) crp->ipolygon=p->ipolygon; polygonmask(crp, array, fpixel_i, lpixel_i[1]-fpixel_i[1]+1, lpixel_i[0]-fpixel_i[0]+1); if(p->mode==IMGCROP_MODE_WCS) free(crp->ipolygon); } /* Write the output (either to a file or standard output if its a single element and the user asked for it). */ if(crp->outfits) { /* Write the array into the file. */ status=0; if( fits_write_subset(ofp, gal_fits_type_to_datatype(p->type), fpixel_o, lpixel_o, array, &status) ) gal_fits_io_error(status, NULL); } /* The output should be printed in standard output. */ else { /* Convert the value into a string. If we only have a single output, then print it without anything else (no identifier is necessary!). Otherwise, use the desired output filename as the identifier. */ stdoutstring=gal_type_to_string(array, p->type, 0); if(p->numout==1) printf("%s\n", stdoutstring); else printf("%s %s\n", crp->name, stdoutstring); free(stdoutstring); } /* Free the allocated array. */ free(array); } else { returnvalue=0; if(p->polygon && p->polygonout==0 && p->mode==IMGCROP_MODE_WCS) free(crp->ipolygon); } /* The crop is complete. */ return returnvalue; } /*******************************************************************/ /****************** Check center *********************/ /*******************************************************************/ int onecrop_center_filled(struct onecropparams *crp) { struct cropparams *p=crp->p; void *array; size_t size, ndim, *dsize; fitsfile *ofp=crp->outfits; int status=0, anynul=0, type; long checkcenter=p->checkcenter; long naxes[3], fpixel[3], lpixel[3], inc[3]={1,1,1}; /* If checkcenter is zero, then don't check. */ if(checkcenter==0) return GAL_BLANK_UINT8; /* Get the final size of the output image. */ gal_fits_img_info(ofp, &type, &ndim, &dsize, NULL, NULL); if(ndim==2) { naxes[0]=dsize[1]; naxes[1]=dsize[0]; } else { naxes[0]=dsize[2]; naxes[1]=dsize[1]; naxes[2]=dsize[0]; } /* Get the size and range of the central region to check. The +1 is because in FITS, counting begins from 1, not zero. It might happen that the image is actually smaller than the width to check the center (for example 1 or 2 pixels wide). In that case, we'll just use the full image to check. */ size = ( (naxes[0]>checkcenter ? checkcenter : naxes[0]) * (naxes[1]>checkcenter ? checkcenter : naxes[1]) ); fpixel[0] = naxes[0]>checkcenter ? ((naxes[0]/2+1)-checkcenter/2) : 1; fpixel[1] = naxes[1]>checkcenter ? ((naxes[1]/2+1)-checkcenter/2) : 1; lpixel[0] = ( naxes[0]>checkcenter ? ((naxes[0]/2+1)+checkcenter/2) : naxes[0] ); lpixel[1] = ( naxes[1]>checkcenter ? ((naxes[1]/2+1)+checkcenter/2) : naxes[1] ); /* For the third dimension. */ if(ndim==3) { size *= (naxes[2]>checkcenter ? checkcenter : naxes[2]); fpixel[2] = naxes[2]>checkcenter ? ((naxes[2]/2+1)-checkcenter/2) : 1; lpixel[2] = ( naxes[2]>checkcenter ? ((naxes[2]/2+1)+checkcenter/2) : naxes[2] ); } /* For a check: printf("naxes: %ld, %ld\nfpixel: (%ld, %ld)\nlpixel: (%ld, %ld)\n" "size: %zu\n", naxes[0], naxes[1], fpixel[0], fpixel[1], lpixel[0], lpixel[1], size); */ /* Allocate the array and read in the pixels. */ array=gal_pointer_allocate(type, size, 0, __func__, "array"); if( fits_read_subset(ofp, gal_fits_type_to_datatype(type), fpixel, lpixel, inc, p->blankptrread, array, &anynul, &status) ) gal_fits_io_error(status, NULL); free(array); /* CFITSIO already checks if there are any blank pixels. If there are, then 'anynul' will be 1, if there aren't it will be 0. So the output of this function is just the inverse of that number. */ return !anynul; } gnuastro-0.22/bin/crop/main.h0000644000175000017500000001347514551337306011611 /********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include #include /* Progarm names. */ #define PROGRAM_NAME "Crop" /* Program full name. */ #define PROGRAM_EXEC "astcrop" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Macros */ #define LOGFILENAME PROGRAM_EXEC".log" #define FILENAME_BUFFER_IN_VERB 30 #define MAXDIM 3 /* Modes to interpret coordinates. */ enum crop_modes { IMGCROP_MODE_INVALID, /* For sanity checks. */ IMGCROP_MODE_IMG, /* Use image coordinates. */ IMGCROP_MODE_WCS, /* Use WCS coordinates. */ }; /* The sides of the image keep the celestial coordinates of the four sides of this image. With respect to the pixels they are. */ struct inputimgs { char *name; /* File name of input image. */ size_t ndim; /* Number of dimensions of this image. */ size_t *dsize; /* Size of the image. */ int nwcs; /* Number of WCS in each input image. */ struct wcsprm *wcs; /* WCS structure of each input image. */ char *wcstxt; /* Text output of each WCS. */ int nwcskeys; /* Number of keywords in the header WCS. */ double corners[24]; /* WCS of corners (24: for 3D, 8: for 2D). */ double sized[MAXDIM]; /* Width and height of image in degrees. */ double equatorcorr[2]; /* If image crosses the equator, see wcsmode.c.*/ }; /* Main program parameters: */ struct cropparams { /* Directly from command-line */ struct gal_options_common_params cp; /* Common parameters. */ gal_list_str_t *inputs; /* All input FITS files. */ size_t hstartwcs; /* Header keyword No. to start read WCS. */ size_t hendwcs; /* Header keyword No. to end read WCS. */ int mode; /* Image or WCS mode. */ uint8_t zeroisnotblank; /* ==1: In float or double, keep 0.0. */ uint8_t primaryimghdu; /* ==1: write in primary/0-th HDU. */ uint8_t append; /* If output exists, append crop. */ uint8_t noblank; /* ==1: no blank (out of image) pixels. */ char *suffix; /* Ending of output file name. */ gal_data_t *incheckcenter; /* Value given to '--checkcenter'. */ gal_data_t *center; /* Center position of crop. */ gal_data_t *width; /* Width of crop when defined by center. */ uint8_t widthinpix; /* Given width is in pixels (in WCS mode)*/ char *catname; /* Name of input catalog. */ char *cathdu; /* HDU of catalog if its a FITS file. */ char *namecol; /* Filename (without suffix) of crop col.*/ gal_list_str_t *coordcol; /* Column in cat containing coordinates. */ char *section; /* Section string. */ gal_data_t *polygon; /* Input string of polygon vertices. */ uint8_t polygonout; /* ==1: Keep the inner polygon region. */ uint8_t polygonsort; /* Don't sort polygon vertices. */ char *metaname; /* Output's EXTNAME keyword. */ /* Internal */ size_t numin; /* Number of input images. */ size_t numout; /* Number of output images. */ double **centercoords; /* A 1D array for the center position. */ size_t checkcenter; /* width of a box to check for zeros */ char **name; /* filename of crop in row. */ double *wpolygon; /* Array of WCS polygon vertices. */ double *ipolygon; /* Array of image polygon vertices. */ size_t nvertices; /* Number of polygon vertices. */ long iwidth[MAXDIM]; /* Image mode width (in pixels). */ double *pixscale; /* Raw resolution in each dimension. */ time_t rawtime; /* Starting time of the program. */ int outnameisfile; /* Output filename is a directory. */ int type; /* Type of output(s). */ void *blankptrread; /* Null value for reading of output type.*/ void *blankptrwrite; /* Null value for writing of output type.*/ struct inputimgs *imgs; /* WCS and size information for inputs. */ gal_data_t *log; /* Log file contents. */ int oneelemstdout; /* Print one element crops on stdout. */ }; #endif gnuastro-0.22/bin/crop/authors-cite.h0000644000175000017500000000302314551337306013260 /********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/crop/args.h0000644000175000017500000002070314551337306011611 /********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Input. */ { "mode", UI_KEY_MODE, "STR", 0, "Coordinate mode 'img' or 'wcs'.", GAL_OPTIONS_GROUP_INPUT, &p->mode, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, ui_parse_coordinate_mode }, { "hstartwcs", UI_KEY_HSTARTWCS, "INT", 0, "Header keyword number to start reading WCS.", GAL_OPTIONS_GROUP_INPUT, &p->hstartwcs, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "hendwcs", UI_KEY_HENDWCS, "INT", 0, "Header keyword number to stop reading WCS.", GAL_OPTIONS_GROUP_INPUT, &p->hendwcs, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "zeroisnotblank", UI_KEY_ZEROISNOTBLANK, 0, 0, "0.0 in float or double images are not blank.", GAL_OPTIONS_GROUP_INPUT, &p->zeroisnotblank, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Output. */ { "primaryimghdu", UI_KEY_PRIMARYIMGHDU, 0, 0, "Write crop in primary/zero-th HDU of output.", GAL_OPTIONS_GROUP_OUTPUT, &p->primaryimghdu, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "noblank", UI_KEY_NOBLANK, 0, 0, "Remove parts of the crop box out of input image.", GAL_OPTIONS_GROUP_OUTPUT, &p->noblank, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "suffix", UI_KEY_SUFFIX, "STR", 0, "Suffix (postfix) of cropped images.", GAL_OPTIONS_GROUP_OUTPUT, &p->suffix, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "oneelemstdout", UI_KEY_ONEELEMSTDOUT, 0, 0, "Print one element's value on stdout.", GAL_OPTIONS_GROUP_OUTPUT, &p->oneelemstdout, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "metaname", UI_KEY_METANAME, "STR", 0, "Name of output HDU (EXTNAME keyword in FITS).", GAL_OPTIONS_GROUP_OUTPUT, &p->metaname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "append", UI_KEY_APPEND, 0, 0, "If output exists, append crop to existing HDUs.", GAL_OPTIONS_GROUP_OUTPUT, &p->append, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Crop by center", UI_GROUP_CENTER_GENERAL }, { "checkcenter", UI_KEY_CHECKCENTER, "FLT/INT", 0, "Width (in pixels) of box at center to check.", UI_GROUP_CENTER_GENERAL, &p->incheckcenter, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "width", UI_KEY_WIDTH, "FLT[,...]", 0, "Width when crop is defined by its center.", UI_GROUP_CENTER_GENERAL, &p->width, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "widthinpix", UI_KEY_WIDTHINPIX, 0, 0, "--width is in pixels (even in WCS mode).", GAL_OPTIONS_GROUP_OUTPUT, &p->widthinpix, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "center", UI_KEY_CENTER, "FLT[,...]", 0, "Central coordinates of a single crop.", UI_GROUP_CENTER_GENERAL, &p->center, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { 0, 0, 0, 0, "Crop by center (when a catalog is given)", UI_GROUP_CENTER_CATALOG }, { "catalog", UI_KEY_CATALOG, "FITS/TXT", 0, "Input catalog filename.", UI_GROUP_CENTER_CATALOG, &p->catname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "cathdu", UI_KEY_CATHDU, "STR/INT", 0, "HDU of catalog, if it is a FITS table.", UI_GROUP_CENTER_CATALOG, &p->cathdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "namecol", UI_KEY_NAMECOL, "STR/INT", 0, "Column no./info of crop filename (no suffix).", UI_GROUP_CENTER_CATALOG, &p->namecol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "coordcol", UI_KEY_COORDCOL, "STR/INT", 0, "Column no./info containing coordinates.", UI_GROUP_CENTER_CATALOG, &p->coordcol, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Crop by region", UI_GROUP_REGION }, { "section", UI_KEY_SECTION, "STR", 0, "Image section string specifying crop range.", UI_GROUP_REGION, &p->section, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "polygon", UI_KEY_POLYGON, "FLT,FLT[:...]", 0, "Polygon vertices, also a DS9 region file.", UI_GROUP_REGION, &p->polygon, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_colon_sep_csv }, { "polygonout", UI_KEY_POLYGONOUT, 0, 0, "Keep the polygon's outside, mask the inside.", UI_GROUP_REGION, &p->polygonout, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "polygonsort", UI_KEY_POLYGONSORT, 0, 0, "Sort polygon vertices as counter-clockwise.", UI_GROUP_REGION, &p->polygonsort, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Operating mode */ {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/crop/ui.h0000644000175000017500000000446714551337306011303 /********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_CENTER_GENERAL = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_CENTER_SINGLE, UI_GROUP_CENTER_CATALOG, UI_GROUP_REGION, }; /* Available letters for short options: d e f g i j k m r u v y B E G H J L Q R W Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_CATALOG = 'C', UI_KEY_NOBLANK = 'b', UI_KEY_SUFFIX = 'p', UI_KEY_NAMECOL = 'n', UI_KEY_SECTION = 's', UI_KEY_POLYGON = 'l', UI_KEY_ZEROISNOTBLANK = 'z', UI_KEY_MODE = 'O', UI_KEY_WIDTH = 'w', UI_KEY_WIDTHINPIX = 'X', UI_KEY_CENTER = 'c', UI_KEY_COORDCOL = 'x', UI_KEY_ONEELEMSTDOUT = 't', UI_KEY_METANAME = 'a', UI_KEY_APPEND = 'A', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_CATHDU = 1000, UI_KEY_HSTARTWCS, UI_KEY_HENDWCS, UI_KEY_POLYGONOUT, UI_KEY_POLYGONSORT, UI_KEY_CHECKCENTER, UI_KEY_PRIMARYIMGHDU, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct cropparams *p); void ui_free_report(struct cropparams *p, struct timeval *t1); #endif gnuastro-0.22/bin/crop/crop.h0000644000175000017500000000206714551337306011623 /********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef IMGMODE_H #define IMGMODE_H void crop(struct cropparams *p); #endif gnuastro-0.22/bin/crop/wcsmode.h0000644000175000017500000000237114551337306012317 /********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef WCSMODE_H #define WCSMODE_H void wcsmode_check_prepare(struct cropparams *p, struct inputimgs *img); void wcsmode_crop_corners(struct onecropparams *crp); void fillcrpipolygon(struct onecropparams *crp); int wcsmode_overlap(struct onecropparams *crp); #endif gnuastro-0.22/bin/crop/onecrop.h0000644000175000017500000000527214551337306012326 /********************************************************************* Crop - Crop a given size from one or multiple images. Crop is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ONECROP_H #define ONECROP_H #include #include struct onecropparams { void *array; /* Pointer to basic structure: */ struct cropparams *p; /* About input image. */ size_t in_ind; /* Index of this image in the input names. */ fitsfile *infits; /* Pointer to the input FITS image. */ long fpixel[MAXDIM]; /* Position of first pixel in input image. */ long lpixel[MAXDIM]; /* Position of last pixel in input image. */ double *ipolygon; /* Input image based polygon vertices. */ /* Output (cropped) image. */ size_t out_ind; /* Index of this crop in the output list. */ double world[MAXDIM]; /* World coordinates of crop center. */ double sized[MAXDIM]; /* Width and height of image in degrees. */ double corners[24]; /* RA and Dec of this crop's corners. */ double equatorcorr[2]; /* Crop crosses the equator, see wcsmode.c. */ fitsfile *outfits; /* Pointer to the output FITS image. */ /* For log */ char *name; /* Filename of crop. */ size_t numimg; /* Number of images used to make this crop. */ unsigned char centerfilled; /* ==1 if the center is filled. */ /* Thread parameters. */ size_t *indexs; /* Indexs to be used in this thread. */ pthread_barrier_t *b; /* pthread barrier to keep threads waiting. */ }; void onecrop_name(struct onecropparams *crp); int onecrop(struct onecropparams *crp); int onecrop_center_filled(struct onecropparams *crp); void crop_print_log(struct onecropparams *p); #endif gnuastro-0.22/bin/crop/astcrop-complete.bash0000644000175000017500000001220414551337306014621 # Bash autocompletion to Gnuastro's Crop program. See the comments above # 'bin/completion.bash.in' for more. # # Original author: # Mohammad Akhlaghi # Contributing author(s): # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see ## Contributing author(s): ## Pedram Ashofteh-Ardakani ## Copyright (C) 2015-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astfits ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astfits_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astfits_SOURCES = main.c ui.c extension.c fits.c keywords.c meta.c EXTRA_DIST = main.h authors-cite.h args.h ui.h extension.c fits.h \ keywords.h meta.h astfits-complete.bash ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astfits.conf gnuastro-0.22/bin/fits/astfits.conf0000644000175000017500000000200714551337306013027 # Default parameters (System) for Fits. # Fits is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astfits --help # Full list of options, short doc. # $ astfits -P # Print all options and used values. # $ info astfits # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Output: type float32 # Meta-image creation: edgesampling 0 gnuastro-0.22/bin/fits/Makefile.in0000644000175000017500000034075414557513747012601 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astfits$(EXEEXT) subdir = bin/fits ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astfits_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) extension.$(OBJEXT) \ fits.$(OBJEXT) keywords.$(OBJEXT) meta.$(OBJEXT) astfits_OBJECTS = $(am_astfits_OBJECTS) am__DEPENDENCIES_1 = astfits_DEPENDENCIES = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/extension.Po ./$(DEPDIR)/fits.Po \ ./$(DEPDIR)/keywords.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/meta.Po ./$(DEPDIR)/ui.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astfits_SOURCES) DIST_SOURCES = $(astfits_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib astfits_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astfits_SOURCES = main.c ui.c extension.c fits.c keywords.c meta.c EXTRA_DIST = main.h authors-cite.h args.h ui.h extension.c fits.h \ keywords.h meta.h astfits-complete.bash dist_sysconf_DATA = astfits.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/fits/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/fits/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astfits$(EXEEXT): $(astfits_OBJECTS) $(astfits_DEPENDENCIES) $(EXTRA_astfits_DEPENDENCIES) @rm -f astfits$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astfits_OBJECTS) $(astfits_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extension.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fits.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keywords.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/meta.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/extension.Po -rm -f ./$(DEPDIR)/fits.Po -rm -f ./$(DEPDIR)/keywords.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/meta.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/extension.Po -rm -f ./$(DEPDIR)/fits.Po -rm -f ./$(DEPDIR)/keywords.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/meta.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/fits/main.c0000644000175000017500000000304314551337306011574 /********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Pedram Ashofteh-Ardakani Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" #include "fits.h" int main (int argc, char *argv[]) { int r; struct fitsparams p={{{0},0},0}; /* Get the starting time. */ time(&p.rawtime); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Fits. */ r=fits(&p); /* Free all non-freed allocations. */ ui_free_and_report(&p); /* Return successfully. */ return r; } gnuastro-0.22/bin/fits/ui.c0000644000175000017500000006541114551337306011274 /********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Pedram Ashofteh-Ardakani Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" allows you to view and " "manipulate (add, delete, or modify) FITS extensions (or HDUs) and FITS " "header keywords within one extension.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct fitsparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->keep = 1; cp->program_struct = p; cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; /* For clarity and non-zero initializations. */ p->mode = FITS_MODE_INVALID; p->edgesampling = GAL_BLANK_SIZE_T; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_IGNORECASE: case GAL_OPTIONS_KEY_WCSLINEARMATRIX: case GAL_OPTIONS_KEY_DONTDELETE: case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_NUMTHREADS: case GAL_OPTIONS_KEY_STDINTIMEOUT: cp->coptions[i].flags=OPTION_HIDDEN; break; case GAL_OPTIONS_KEY_OUTPUT: cp->coptions[i].doc="Output file name (not for keywords)."; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct fitsparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments). */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(arg[0]!='\0') { if( gal_fits_file_recognized(arg) ) gal_list_str_add(&p->input, arg, 1); else argp_error(state, "%s is not a recognized FITS file", arg); } break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ static void ui_check_copykeys(struct fitsparams *p) { long read; char *tailptr; /* size_t group=0; */ char forl='f', *pt=p->copykeys; /* For copykeys, an output filename is mandatory. */ if(p->cp.output==NULL || p->outhdu==NULL) error(EXIT_FAILURE, 0, "an output FITS extension (in an existing " "FITS file, specified with the '--output' and '--outhdu') are " "mandatory for running '--copykeys'"); /* Initialize the values. */ p->copykeysrange[0]=p->copykeysrange[1]=GAL_BLANK_LONG; /* Parse the string: 'forl': "first-or-last". */ while(*pt!='\0') { switch(*pt) { case ':': forl='l'; ++pt; break; case '.': error(EXIT_FAILURE, 0, "the numbers in the argument to " "'--section' ('-s') have to be integers. You input " "includes a float number: %s", p->copykeys); break; case ' ': case '\t': ++pt; break; /* Numerical characters signify the start of a number, so we don't need to increment the pointer and can just break out. */ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '-': break; /* Identifier for next group of ranges. However, For the time being, we just support one group. So we are commenting the break here for it to follow onto default. case ',': ++group; forl='f'; ++pt; break; */ default: /* If a name is given, it will start with an alphabetic character, a hyphen, or an underscore (we already know that the key doesn't start with a digit, since it would break out of the 'switch'). Recall that according to the FITS standard, a keyword name can only contain digits, alphabetic characters, '-', or '_'. See "Section 4.1.2.1. Keyword name" of the FITS 4.0 standard.*/ if( isalpha(*pt) || *pt=='-' || *pt=='_' ) break; /* Print an error if control reaches here because */ error(EXIT_FAILURE, 0, "value to '--copykeys' must either be a " "range of numbers (for example '--copykeys=10:20') or a " "set of names (for example '--copykeys=KEY1,KEY2', for " "any number of names, note that the first keyword name " "should not contain only digits, thus get interpreted " "as a number). However, your given value ('%s') couldn't " "be interpreted as any of the two (the first " "non-acceptable character is '%c'). If this seems to be " "a problem on the programming side, please report the " "issue to us at '%s'", p->copykeys, *pt, PACKAGE_BUGREPORT); break; } /* Read the number: */ read=strtol(pt, &tailptr, 0); /* Check the progress. printf("\n\n------\n%c: %ld (%s)\n", *pt, read, tailptr); */ /* If the value couldn't be read as a number, and the first element hasn't been read as a number, parse it as a set of comma-separated strings and break out of the parsing overall. */ if(tailptr==pt) { if(p->copykeysrange[0]==GAL_BLANK_LONG) { p->copykeysname=gal_options_parse_csv_strings_to_data(pt, NULL, 0); break; } else continue; } /* Put it in the correct place. */ p->copykeysrange[ forl=='f' ? 0 : 1 ]=read; pt=tailptr; } /* Basic sanity checks. */ if( p->copykeysname==NULL ) { if( p->copykeysrange[1]==GAL_BLANK_LONG ) error(EXIT_FAILURE, 0, "no ending keyword number given to " "'--copykeys'. If you want to copy all the keywords after " "a certain one (without worrying about how many there " "are), you can use '-1'.\n\n" "For example if you want to copy all the keywords after " "the 20th, you can use '--copykeys=20,-1'. Generally, " "you can use negative numbers for the last keyword " "number to count from the end."); if( p->copykeysrange[0]<=0 ) error(EXIT_FAILURE, 0, "the first number given to '--copykeys' " "must be positive"); if( p->copykeysrange[1]>=0 && p->copykeysrange[0]>=p->copykeysrange[1] ) error(EXIT_FAILURE, 0, "the first number (%ld) given to " "'--copykeys' must be smaller than the second (%ld)", p->copykeysrange[0], p->copykeysrange[1]); } /* For a check: if( p->copykeysname ) { size_t i; char **strarr=p->copykeysname->array; printf("copykeys: "); for(i=0;icopykeysname->size;++i) printf("%s ", strarr[i]); } else printf("copykeys: %ld, %ld\n", p->copykeysrange[0], p->copykeysrange[1]); exit(0); */ } /* If any of the META related keywords are given, set mode accordingly. */ static void ui_read_check_mode_meta(struct fitsparams *p) { /* Make sure no other type of operation is requested. */ if(p->mode!=FITS_MODE_INVALID) error(EXIT_FAILURE, 0, "meta image options (like '--pixelareaonwcs' " "cannot be called with HDU or keyword manipulation options"); /* If '--type' is not given, inform the user. */ if(p->cp.type==0) error(EXIT_FAILURE, 0, "no '--type' specified! This is necessary " "to determine the numerical data type of the output image. " "In most cases, '--type=float32' is sufficient"); /* If '--edgesampling' isn't given, inform the user. */ if(p->edgesampling==GAL_BLANK_SIZE_T) error(EXIT_FAILURE, 0, "no '--edgesampling'! Please specify a " "value to the '--edgesampling' option (usually '0' is " "fine). This specifies the extra samplings along a pixel's " "edge in options like '--pixelareaonwcs' in case " "distortions are significant. Just note that non-zero " "values will significantly slow down the program"); /* Check if a HDU is given. */ if(p->cp.hdu==NULL) error(EXIT_FAILURE, 0, "a HDU (extension) is necessary for meta " "image outputs (e.g., with '--pixelareaonwcs') but none " "was defined. Please use the '--hdu' (or '-h') option to " "select one of your input's HDUs. You can use the " "'astfits input.fits' command to see the list of " "available HDUs in 'input.fits'"); /* Set the mode. */ p->mode=FITS_MODE_META; } /* If any of the keyword manipulation options are requested, then set the mode flag to keyword-mode. */ static void ui_read_check_mode_keyword(struct fitsparams *p) { int checkkeys; if( p->date || p->comment || p->history || p->asis || p->keyvalue || p->delete || p->rename || p->update || p->write || p->verify || p->printallkeys || p->printkeynames || p->copykeys || p->datetosec || p->wcscoordsys || p->wcsdistortion ) { /* Check if a HDU is given. */ if(p->cp.hdu==NULL) error(EXIT_FAILURE, 0, "a HDU (extension) is necessary for keyword " "related options but none was defined. Please use the " "'--hdu' (or '-h') option to select one"); /* If Copy keys has been given, read it and make sure its setup. */ if(p->copykeys) ui_check_copykeys(p); /* Keyword-related options that must be called alone. */ checkkeys = ( (p->keyvalue!=NULL) + (p->datetosec!=NULL) + (p->printkeynames!=0) + (p->wcscoordsys!=NULL) + (p->wcsdistortion!=NULL) ); if( ( checkkeys && ( p->date || p->comment || p->history || p->asis || p->delete || p->rename || p->update || p->write || p->verify || p->printallkeys || p->copykeys ) ) || checkkeys>1 ) error(EXIT_FAILURE, 0, "'--keyvalue', '--datetosec', " "'--wcscoordsys' and '--wcsdistortion' cannot " "currently be called with any other option"); /* Give an ID to recognized coordinate systems. */ if(p->wcscoordsys) p->coordsysid=gal_wcs_coordsys_name_to_id(p->wcscoordsys); /* Identify the requested distortion. Note that this also acts as a sanity check because it will crash with an error if the given string isn't recognized. */ if(p->wcsdistortion) p->distortionid=gal_wcs_distortion_name_to_id(p->wcsdistortion); /* Make sure the value of '--keyvalue' is actually present. */ if(p->keyvalue && p->keyvalue->v[0]=='\0') error(EXIT_FAILURE, 0, "the '--keyvalue' option requires a value: " "the name(s) of keywords you want the value of"); /* Set the operating mode. */ p->mode=FITS_MODE_KEY; } } /* Same for the extension-related options */ static void ui_read_check_mode_extension(struct fitsparams *p) { uint8_t stdoutcheck=0; if( p->remove || p->copy || p->cut || p->numhdus || p->datasum || p->datasumencoded || p->pixelscale || p->pixelareaarcsec2 || p->skycoverage || p->hastablehdu || p->hasimagehdu || p->listtablehdus || p->listimagehdus ) { /* A small sanity check. */ if(p->mode!=FITS_MODE_INVALID) error(EXIT_FAILURE, 0, "extension and keyword manipulation options " "cannot be called together"); /* Some HDU options cannot be called with other options. */ stdoutcheck = ( p->numhdus + p->datasum + p->datasumencoded + p->pixelscale + p->pixelareaarcsec2 + p->skycoverage + p->hastablehdu + p->hasimagehdu + p->listtablehdus + p->listimagehdus ); /* Make sure if an output file is needed. */ if(stdoutcheck) { /* Make sure HDU reading and editing options aren't called together. */ if(p->remove || p->copy || p->cut) error(EXIT_FAILURE, 0, "HDU reading options (like " "'--numhdus', '--datasum' and etc) cannot be called " "with any of the HDU modification options like " "'--remove', '--copy' or '--cut' options"); /* Make sure these options are called alone. */ if(stdoutcheck>1) error(EXIT_FAILURE, 0, "HDU info options, like '--numhdus', " "'--datasum', '--pixelscale' or '--skycoverage', cannot " "be called together, only one at a time"); /* Make sure the HDU is given if any of the options except '--numhdus' are called. */ if( ( p->numhdus || p->hastablehdu || p->hasimagehdu || p->listtablehdus || p->listimagehdus) && p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "a HDU (extension) is necessary " "for the options that return information on one HDU " "(like ""'--pixelscale' or '--skycoverage'. Please " "use the '--hdu' (or '-h') option to select one"); } else { if(p->cp.output) gal_checkset_writable_remove(p->cp.output, p->input->v, 1, p->cp.dontdelete); else p->cp.output=gal_checkset_automatic_output(&p->cp, p->input->v, "_ext.fits"); } /* Set the operating mode. */ p->mode=FITS_MODE_HDU; } } /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct fitsparams *p) { /* Check the given optinos and set the operating mode accordingly. */ ui_read_check_mode_keyword(p); ui_read_check_mode_extension(p); if( p->pixelareaonwcs) ui_read_check_mode_meta(p); /* If no options are given, go into HDU mode, which will print the HDU information when nothing is asked. */ if(p->mode==FITS_MODE_INVALID) { if(p->hdu_in_commandline) { p->printallkeys=1; p->mode = FITS_MODE_KEY; } else p->mode = FITS_MODE_HDU; } } static void ui_check_options_and_arguments(struct fitsparams *p) { /* Other than the '--keyvalue' option, the rest of the operations only require a single file. */ if(p->keyvalue) { /* If '--arguments' is given and there is no input files, read the names of the inputs from that. Otherwose, complain about not having any input.*/ if(p->input==NULL) { if(p->arguments) p->input=gal_txt_read_to_list(p->arguments); else error(EXIT_FAILURE, 0, "no input file(s) specified"); } } else { /* If there are any inputs. */ if(p->input==NULL) error(EXIT_FAILURE, 0, "no input file is specified"); gal_list_str_reverse(&p->input); /* Only one input. */ if( gal_list_str_number(p->input) > 1) error(EXIT_FAILURE, 0, "one input file is expected but %zu input " "files are given", gal_list_str_number(p->input)); } } /**************************************************************/ /***************** Preparations ********************/ /**************************************************************/ /* The '--update' and '--write' options take multiple values for each keyword, so here, we tokenize them and put them into a 'gal_fits_list_key_t' list. */ static void ui_fill_fits_headerll(gal_list_str_t *input, gal_fits_list_key_t **output, char *option_name) { long l, *lp; void *fvalue; double d, *dp; gal_list_str_t *tmp; char *c, *cf, *start, *tailptr; int i=0, type, vfree, needsvalue; char *original, *keyname, *value, *comment, *unit; for(tmp=input; tmp!=NULL; tmp=tmp->next) { i=0; tailptr=NULL; /* 'c' is created in case of an error, so the input value can be reported. */ errno=0; original=malloc(strlen(tmp->v)+1); if(original==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for 'original'", __func__, strlen(tmp->v)+1); strcpy(original, tmp->v); /* Tokenize the input. Note that strlen does not include the \0 character. So we have added it with a 1. */ cf=(c=start=tmp->v)+strlen(tmp->v)+1; keyname=value=comment=unit=NULL; do { switch(*c) { case ',': case '\0': *c='\0'; if(start!=c) switch(i) { case 0: keyname=start; break; case 1: value=start; break; case 2: comment=start; break; case 3: unit=start; break; default: error(EXIT_FAILURE, 0, "%s: only three commas should " "be given in the write or update keyword " "options. The general expected format is:\n" " KEYWORD,value,\"a comment string\",unit\n", original); } ++i; start=c+1; break; default: break; } } while(++cwrite) ui_fill_fits_headerll(p->write, &p->write_keys, "write"); if(p->update) ui_fill_fits_headerll(p->update, &p->update_keys, "update"); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct fitsparams *p) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Check if the HDU is specified on the command-line. If so, then later, if no operation is requested, we will print the header of the given HDU.*/ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) if(cp->coptions[i].key==GAL_OPTIONS_KEY_HDU && cp->coptions[i].set) p->hdu_in_commandline=1; /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_and_report(struct fitsparams *p) { /* Free the allocated arrays: */ free(p->cp.output); } gnuastro-0.22/bin/fits/extension.c0000644000175000017500000000200214551337306012656 /********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include gnuastro-0.22/bin/fits/fits.c0000644000175000017500000007003314551337306011620 /********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Pedram Ashofteh-Ardakani Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "fits.h" #include "meta.h" #include "keywords.h" int fits_has_error(struct fitsparams *p, int actioncode, char *string, int status) { char *action=NULL; int r=EXIT_SUCCESS; switch(actioncode) { case FITS_ACTION_DELETE: action="deleted"; break; case FITS_ACTION_RENAME: action="renamed"; break; case FITS_ACTION_UPDATE: action="updated"; break; case FITS_ACTION_WRITE: action="written"; break; case FITS_ACTION_COPY: action="copied"; break; case FITS_ACTION_REMOVE: action="removed"; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' so we " "can fix this problem. The value of 'actioncode' must not be %d", __func__, PACKAGE_BUGREPORT, actioncode); } if(p->quitonerror) { fits_report_error(stderr, status); error(EXIT_FAILURE, 0, "%s: %s: not %s\n", __func__, string, action); } else { fprintf(stderr, "%s: Not %s.\n", string, action); r=EXIT_FAILURE; } return r; } /* Print all the extension informations. */ void fits_print_extension_info(struct fitsparams *p) { uint16_t *ui16; fitsfile *fptr; gal_data_t *unitscol; char bunit[FLEN_VALUE]; size_t i, numext, *dsize, ndim; int j, nc, numhdu, hdutype, status=0, type; char **tstra, **estra, **sstra, **cmstra, **ustra; int hascomments=0, hasblankname=0, hasblankunits=0; gal_data_t *tmp, *cols=NULL, *sizecol, *commentscol; char *msg, *tstr=NULL, sstr[1000], extname[FLEN_VALUE]; /* Open the FITS file and read the first extension type, upon moving to the next extension, we will read its type, so for the first we will need to do it explicitly. */ fptr=gal_fits_hdu_open(p->input->v, "0", READONLY, 1, "NONE"); if (fits_get_hdu_type(fptr, &hdutype, &status) ) gal_fits_io_error(status, "reading first extension"); /* Get the number of HDUs. */ if( fits_get_num_hdus(fptr, &numhdu, &status) ) gal_fits_io_error(status, "finding number of HDUs"); numext=numhdu; /* Allocate all the columns (in reverse order, since this is a simple linked list). */ gal_list_data_add_alloc(&cols, NULL, GAL_TYPE_STRING, 1, &numext, NULL, 1, -1, 1, "HDU_COMMENT", "note", "Possible comment"); gal_list_data_add_alloc(&cols, NULL, GAL_TYPE_STRING, 1, &numext, NULL, 1, -1, 1, "HDU_UNITS", "units", "Units of the pixels"); gal_list_data_add_alloc(&cols, NULL, GAL_TYPE_STRING, 1, &numext, NULL, 1, -1, 1, "HDU_SIZE", "name", "Size of image or table " "number of rows and columns."); gal_list_data_add_alloc(&cols, NULL, GAL_TYPE_STRING, 1, &numext, NULL, 1, -1, 1, "HDU_TYPE", "name", "Image data type or " "'table' format (ASCII or binary)."); gal_list_data_add_alloc(&cols, NULL, GAL_TYPE_STRING, 1, &numext, NULL, 1, -1, 1, "EXTNAME", "name", "Extension name of this " "HDU (EXTNAME in FITS)."); gal_list_data_add_alloc(&cols, NULL, GAL_TYPE_UINT16, 1, &numext, NULL, 1, -1, 1, "HDU_INDEX", "count", "Index (starting from " "zero) of each HDU (extension)."); /* Keep pointers to the array of each column for easy writing. */ ui16 = cols->array; estra = cols->next->array; tstra = cols->next->next->array; sizecol = cols->next->next->next; sstra = sizecol->array; unitscol = cols->next->next->next->next; ustra = unitscol->array; commentscol = cols->next->next->next->next->next; cmstra = commentscol->array; cols->next->disp_width=15; cols->next->next->disp_width=15; /* Fill in each column. */ for(i=0;i0) { nc=0; for(j=ndim-1;j>=0;--j) nc += sprintf(sstr+nc, "%zux", dsize[j]); sstr[nc-1]='\0'; free(dsize); } else { sstr[0]='0'; sstr[1]='\0'; } /* Write the strings into the columns. */ j=0; for(tmp=cols; tmp!=NULL; tmp=tmp->next) { switch(j) { case 0: ui16[i]=i; break; case 1: gal_checkset_allocate_copy(extname, estra+i); break; case 2: gal_checkset_allocate_copy(tstr, tstra+i); break; case 3: gal_checkset_allocate_copy(sstr, sstra+i); break; case 4: gal_checkset_allocate_copy(bunit, ustra+i); break; } ++j; } /* Move to the next extension if we aren't on the last extension. */ if( i!=numext-1 && fits_movrel_hdu(fptr, 1, &hdutype, &status) ) { if( asprintf(&msg, "moving to hdu %zu", i+1)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_fits_io_error(status, msg); } } /* Close the file. */ fits_close_file(fptr, &status); /* If there weren't any comments, don't print the comment column. */ if(hascomments==0) { unitscol->next=NULL; gal_data_free(commentscol); } /* Print the results. */ if(!p->cp.quiet) { printf("%s\nRun on %s-----\n", PROGRAM_STRING, ctime(&p->rawtime)); printf("HDU (extension) information: '%s'.\n", p->input->v); printf(" Column 1: Index (counting from 0, usable with '--hdu').\n"); printf(" Column 2: Name ('EXTNAME' in FITS standard, usable with " "'--hdu').\n"); if(hasblankname) printf(" ('%s': no name in HDU metadata)\n", GAL_BLANK_STRING); printf(" Column 3: Image data type or 'table' format (ASCII or " "binary).\n"); printf(" Column 4: Size of data in HDU.\n"); printf(" Column 5: Units of data in HDU (only images, for tables " "use 'asttable -i').\n"); if(hasblankunits) printf(" ('%s': no unit in HDU metadata, or " "HDU is a table)\n", GAL_BLANK_STRING); if(hascomments) printf(" Column 6: Comments about the HDU (e.g., if its HEALpix, " "or etc).\n"); printf("-----\n"); } gal_table_write(cols, NULL, NULL, GAL_TABLE_FORMAT_TXT, NULL, NULL, 0, 0); gal_list_data_free(cols); } static void fits_hdu_number(struct fitsparams *p) { fitsfile *fptr; int numhdu, status=0; /* Read the first extension (necessary for reading the rest). */ fptr=gal_fits_hdu_open(p->input->v, "0", READONLY, 1, "NONE"); /* Get the number of HDUs. */ if( fits_get_num_hdus(fptr, &numhdu, &status) ) gal_fits_io_error(status, "finding number of HDUs"); /* Close the file. */ fits_close_file(fptr, &status); /* Print the result. */ printf("%d\n", numhdu); } static void fits_datasum(struct fitsparams *p) { char *out; if(p->datasum) printf("%ld\n", gal_fits_hdu_datasum(p->input->v, p->cp.hdu, "--hdu")); else if(p->datasumencoded) { out=gal_fits_hdu_datasum_encoded(p->input->v, p->cp.hdu, "--hdu"); printf("%s\n", out); free(out); } else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to fix " "this bug! Both 'datasum' and 'datasumencoded' are zero", __func__, PACKAGE_BUGREPORT); } struct wcsprm * fits_read_check_wcs(struct fitsparams *p, size_t *ndim, char *operation) { int nwcs=0; struct wcsprm *wcs; /* Read the desired WCS. */ wcs=gal_wcs_read(p->input->v, p->cp.hdu, p->cp.wcslinearmatrix, 0, 0, &nwcs, "--hdu"); /* If a WCS doesn't exist, let the user know and return. */ if(wcs) *ndim=wcs->naxis; else error(EXIT_FAILURE, 0, "%s (hdu %s): no WCS could be read by WCSLIB, " "hence the %s cannot be determined", p->input->v, p->cp.hdu, operation); /* Return the WCS. */ return wcs; } static void fits_pixelscale(struct fitsparams *p) { size_t i, ndim=0; double multip, *pixelscale; struct wcsprm *wcs=fits_read_check_wcs(p, &ndim, "pixel scale"); /* Calculate the pixel-scale in each dimension. */ pixelscale=gal_wcs_pixel_scale(wcs); /* If not in quiet-mode, print some extra information. We don't want the last number to have a space after it, so we'll write the last one outside the loop. */ if(p->cp.quiet==0) { printf("Basic information for --pixelscale (remove extra info " "with '--quiet' or '-q')\n"); printf(" Input: %s (hdu %s) has %zu dimensions.\n", p->input->v, p->cp.hdu, ndim); printf(" Pixel scale in each FITS dimension:\n"); for(i=0;icunit[i], "deg") ) printf(" %zu: %g (%s/pixel) = %g (arcsec/pixel)\n", i+1, pixelscale[i], wcs->cunit[i], pixelscale[i]*3600); else printf(" %zu: %g (%s/slice)\n", i+1, pixelscale[i], wcs->cunit[i]); } /* Pixel area/volume. */ if(ndim>=2) { /* Multiply the values in each dimension. */ multip=pixelscale[0]*pixelscale[1]; /* Pixel scale (applicable to 2 or 3 dimensions). */ printf(" Pixel area%s:\n", ndim==2?"":" (on each 2D slice) "); if( strcmp(wcs->cunit[0], wcs->cunit[1]) ) printf(" %g (%s*%s)\n", multip, wcs->cunit[0], wcs->cunit[1]); else if( strcmp(wcs->cunit[0], "deg") ) printf(" %g (%s^2)\n", multip, wcs->cunit[0]); else printf(" %g (deg^2) = %g (arcsec^2)\n", multip, multip*3600*3600 ); /* For a 3 dimensional dataset, we need need extra info. */ if(ndim>=3) { multip*=pixelscale[2]; printf(" Voxel volume:\n"); if( strcmp(wcs->cunit[0], wcs->cunit[1]) ) printf(" %g (%s*%s*%s)\n", multip, wcs->cunit[0], wcs->cunit[1], wcs->cunit[2]); else if( strcmp(wcs->cunit[0], "deg") ) printf(" %g (%s^2*%s)\n", multip, wcs->cunit[0], wcs->cunit[2]); else { if( strcmp(wcs->cunit[2], "m") ) printf(" %g (deg^2*%s) = %g (arcsec^2*%s)\n", multip, wcs->cunit[2], multip*3600*3600, wcs->cunit[2]); else printf(" %g (deg^2*m) = %g (arcsec^2*m) = " "%g (arcsec^2*A)\n", multip, multip*3600*3600, multip*3600*3600*1e10); } /* Higher-dimensional data are not yet supported. */ if(ndim>=4 && p->cp.quiet==0) error(EXIT_SUCCESS, 0, "WARNING: the '--pixelscale' " "option only prints area/volume information for " "2 or 3 dimensional datasets, this dataset is " "%zu dimensions! If you need this feature, please " "contact '%s'. To suppress this warning, please " "run with '--quiet'", ndim, PACKAGE_BUGREPORT); } } } else { multip=1; for(i=0;icunit[i], "deg") ) error(EXIT_FAILURE, 0, "%s (hdu: %s): dimension %zu doesn't " "have a unit of degrees (value to 'CUNIT%zu'), but " "'%s'! In order to use '--pixelareaarcsec2', the units " "of the WCS have to be in degrees", p->input->v, p->cp.hdu, i+1, i+1, wcs->cunit[i]); /* Calculate the pixel-scale in each dimension. */ pixelscale=gal_wcs_pixel_scale(wcs); /* Calcluate the pixel area (currently only in arcsec^N). */ area=1; for(i=0;iinput->v, p->cp.hdu, &ndim, ¢er, &width, &min, &max, "--hdu")==0 ) error(EXIT_FAILURE, 0, "%s (hdu %s): is not usable for finding " "sky coverage (either doesn't have a WCS, or isn't an image " "or cube HDU with 2 or 3 dimensions", p->input->v, p->cp.hdu); /* Inform the user. */ if(p->cp.quiet) { /* First print the center and full-width. */ for(i=0;iinput->v, p->cp.hdu); printf("\nSky coverage by center and (full) width:\n"); switch(ndim) { case 2: printf(" Center: %-15.10g %-15.10g\n", center[0], center[1]); printf(" Width: %-15.10g %-15.10g\n", width[0], width[1]); break; case 3: printf(" Center: %-15.10g %-15.10g %-15.10g\n", center[0], center[1], center[2]); printf(" width: %-15.10g %-15.10g %-15.10g\n", width[0], width[1], width[2]); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. 'ndim' value %zu is not recognized", __func__, PACKAGE_BUGREPORT, ndim); } /* For the range type of coverage. */ wcs=gal_wcs_read(p->input->v, p->cp.hdu, p->cp.wcslinearmatrix, 0, 0, &nwcs, "--hdu"); printf("\nSky coverage by range along dimensions:\n"); for(i=0;i0; --i) if(extname[i]!='\'' && extname[i]!=' ') { extname[i+1]='\0'; break; } } /* Put the value into the allocated 'out' string. */ gal_checkset_allocate_copy(status ? extname : extname+1, &out); return out; } static void fits_certain_hdu(struct fitsparams *p, int list1has0, int table1image0) { fitsfile *fptr; gal_list_str_t *names=NULL; int has=0, naxis, hducounter=1, hdutype, status=0; /* Make sure the given file exists: CFITSIO adds '.gz' silently (see more in the comments within 'gal_fits_hdu_open'). */ gal_checkset_check_file(p->input->v); /* Open the FITS file. */ fits_open_file(&fptr, p->input->v, READONLY, &status); gal_fits_io_error(status, NULL); /* Start by moving to the first HDU (counting from 1) and then parsing through them. */ fits_movabs_hdu(fptr, hducounter, &hdutype, &status); while(status==0) { /* Check the HDU type. */ switch(hdutype) { /* Tables are easy. */ case BINARY_TBL: case ASCII_TBL: if(table1image0) { if(list1has0) gal_list_str_add(&names, fits_list_certain_hdu_string(fptr, hducounter-1), 0); else has=1; } break; /* For images, we need to check there is actually any data. */ case IMAGE_HDU: if(table1image0==0) { fits_get_img_dim(fptr, &naxis, &status); gal_fits_io_error(status, NULL); if(naxis>0) { if(list1has0) gal_list_str_add(&names, fits_list_certain_hdu_string(fptr, hducounter-1), 0); else has=1; } } break; /* Just to avoid bad bugs. */ default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "to fix the problem. The value %d is not recognized " "for 'hdutype'", __func__, PACKAGE_BUGREPORT, hdutype); } /* Move to the next HDU. */ fits_movabs_hdu(fptr, ++hducounter, &hdutype, &status); /* If we are in "has" mode and the first HDU has already been found, then there is no need to continue parsing the HDUs, so set 'status' to 1 to stop the 'while' above. */ if( list1has0==0 && has==1 ) status=1; } /* Close the file. */ status=0; fits_close_file(fptr, &status); /* Reverse the list so they are in the same order as they were found. */ gal_list_str_reverse(&names); /* Print the result. */ if( list1has0 ) { gal_list_str_print(names); gal_list_str_free(names, 1); } else printf("%d\n", has); } static void fits_list_all_hdus(struct fitsparams *p) { fitsfile *fptr; gal_list_str_t *names=NULL; int hducounter=1, hdutype, status=0; /* Make sure the given file exists: CFITSIO adds '.gz' silently (see more in the comments within 'gal_fits_hdu_open'). */ gal_checkset_check_file(p->input->v); /* Open the FITS file. */ fits_open_file(&fptr, p->input->v, READONLY, &status); gal_fits_io_error(status, NULL); /* Start by moving to the first HDU (counting from 1) and then parsing through them. */ fits_movabs_hdu(fptr, hducounter, &hdutype, &status); while(status==0) { gal_list_str_add(&names, fits_list_certain_hdu_string(fptr, hducounter-1), 0); fits_movabs_hdu(fptr, ++hducounter, &hdutype, &status); } /* Close the file. */ status=0; fits_close_file(fptr, &status); /* Print the result. */ gal_list_str_print(names); gal_list_str_free(names, 1); } static void fits_hdu_remove(struct fitsparams *p, int *r) { char *hdu; fitsfile *fptr; int status=0, hdutype; while(p->remove) { /* Pop-out the top element. */ hdu=gal_list_str_pop(&p->remove); /* Open the FITS file at the specified HDU. */ fptr=gal_fits_hdu_open(p->input->v, hdu, READWRITE, 1, "--remove"); /* Delete the extension. */ if( fits_delete_hdu(fptr, &hdutype, &status) ) *r=fits_has_error(p, FITS_ACTION_REMOVE, hdu, status); status=0; /* Close the file. */ fits_close_file(fptr, &status); } } /* This is similar to the library's 'gal_fits_open_to_write', except that it won't create an empty first extension. */ fitsfile * fits_open_to_write_no_blank(char *filename) { int status=0; fitsfile *fptr; /* When the file exists just open it. Otherwise, create the file. But we want to leave the first extension as a blank extension and put the image in the next extension to be consistent between tables and images. */ if(access(filename,F_OK) == -1 ) { /* Create the file. */ if( fits_create_file(&fptr, filename, &status) ) gal_fits_io_error(status, NULL); } /* Open the file, ready for later steps. */ if( fits_open_file(&fptr, filename, READWRITE, &status) ) gal_fits_io_error(status, NULL); /* Return the pointer. */ return fptr; } static void fits_hdu_copy(struct fitsparams *p, int cut1_copy0, int *r) { char *hdu; int status=0, hdutype; fitsfile *in, *out=NULL; char *hopt = cut1_copy0 ? "--cut" : "--copy"; gal_list_str_t *list = cut1_copy0 ? p->cut : p->copy; /* Copy all the given extensions. */ while(list) { /* Pop-out the top element. */ hdu=gal_list_str_pop(&list); /* Open the FITS file at the specified HDU. */ in=gal_fits_hdu_open(p->input->v, hdu, cut1_copy0 ? READWRITE : READONLY, 1, hopt); /* If the output isn't opened yet, open it. */ if(out==NULL) out = ( ( gal_fits_hdu_format(p->input->v, hdu, hopt)==IMAGE_HDU && p->primaryimghdu ) ? fits_open_to_write_no_blank(p->cp.output) : gal_fits_open_to_write(p->cp.output) ); /* Copy to the extension. */ if( fits_copy_hdu(in, out, 0, &status) ) *r=fits_has_error(p, FITS_ACTION_COPY, hdu, status); status=0; /* If this is a 'cut' operation, then remove the extension. */ if(cut1_copy0) { if( fits_delete_hdu(in, &hdutype, &status) ) *r=fits_has_error(p, FITS_ACTION_REMOVE, hdu, status); status=0; } /* Close the input file. */ fits_close_file(in, &status); } /* Close the output file. */ if(out) fits_close_file(out, &status); } /***************************************************************/ /************* Top-level function *************/ /***************************************************************/ int fits(struct fitsparams *p) { int r=EXIT_SUCCESS, printhduinfo=1; switch(p->mode) { /* Functions creating meta-images, in other words, images conveying information about the given image. */ case FITS_MODE_META: meta_pixelareaonwcs(p); break; /* Keywords, we have a separate set of functions in 'keywords.c'. */ case FITS_MODE_KEY: r=keywords(p); break; /* HDU, functions defined here. */ case FITS_MODE_HDU: /* Options that must be called alone. */ if(p->numhdus) fits_hdu_number(p); else if(p->pixelscale) fits_pixelscale(p); else if(p->pixelareaarcsec2) fits_pixelarea(p); else if(p->skycoverage) fits_skycoverage(p); else if(p->hasimagehdu) fits_certain_hdu(p, 0, 0); else if(p->hastablehdu) fits_certain_hdu(p, 0, 1); else if(p->listimagehdus) fits_certain_hdu(p, 1, 0); else if(p->listtablehdus) fits_certain_hdu(p, 1, 1); else if(p->listallhdus) fits_list_all_hdus(p); else if(p->datasum || p->datasumencoded) fits_datasum(p); /* Options that can be called together. */ else { if(p->copy) { fits_hdu_copy(p, 0, &r); printhduinfo=0; } if(p->cut) { fits_hdu_copy(p, 1, &r); printhduinfo=0; } if(p->remove) { fits_hdu_remove(p, &r); printhduinfo=0; } if(printhduinfo) fits_print_extension_info(p); } break; /* Not recognized. */ default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to " "address the problem. The code %d is not recognized for " "p->mode", __func__, PACKAGE_BUGREPORT, p->mode); } return r; } gnuastro-0.22/bin/fits/keywords.c0000644000175000017500000011265214551337306012526 /********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "fits.h" /***********************************************************************/ /****************** Preparations ********************/ /***********************************************************************/ static void keywords_open(struct fitsparams *p, fitsfile **fptr, int iomode) { if(*fptr==NULL) *fptr=gal_fits_hdu_open(p->input->v, p->cp.hdu, iomode, 1, "--hdu"); } /***********************************************************************/ /****************** File manipulation ********************/ /***********************************************************************/ static void keywords_rename_keys(struct fitsparams *p, fitsfile **fptr, int *r) { int status=0; char *copy, *str, *from, *to; /* Set the FITS file pointer. */ keywords_open(p, fptr, READWRITE); /* Tokenize the */ while(p->rename!=NULL) { /* Pop out the top element. */ str=gal_list_str_pop(&p->rename); /* Take a copy of the input string for error reporting, because 'strtok' will write into the array. */ gal_checkset_allocate_copy(str, ©); /* Tokenize the input. */ from = strtok(str, ", "); to = strtok(NULL, ", "); /* Make sure both elements were read. */ if(from==NULL || to==NULL) error(EXIT_FAILURE, 0, "'%s' could not be tokenized in order to " "complete rename. There should be a space character " "or a comma (,) between the two keyword names. If you have " "used the space character, be sure to enclose the value to " "the '--rename' option in double quotation marks", copy); /* Rename the keyword */ fits_modify_name(*fptr, from, to, &status); if(status) *r=fits_has_error(p, FITS_ACTION_RENAME, from, status); else p->updatechecksum=1; status=0; /* Clean up the user's input string. Note that 'strtok' just changes characters within the allocated string, no extra allocation is done. */ free(str); free(copy); } } /* Special write options don't have any value and the value has to be found within the script. */ static int keywords_write_special(struct fitsparams *p, fitsfile **fptr, gal_fits_list_key_t *keyll) { int status=0; if( !strcasecmp(keyll->keyname,"checksum") || !strcasecmp(keyll->keyname,"datasum") ) { /* If a value is given, then just write what the user gave. */ if( keyll->value ) return 1; else { /* Calculate and write the 'CHECKSUM' and 'DATASUM' keywords. */ if( fits_write_chksum(*fptr, &status) ) gal_fits_io_error(status, NULL); /* If the user just wanted datasum, remove the checksum keyword. */ if( !strcasecmp(keyll->keyname,"datasum") ) if( fits_delete_key(*fptr, "CHECKSUM", &status) ) gal_fits_io_error(status, NULL); /* Inform the caller that everything is done. */ return 0; } } else if( keyll->keyname[0]=='/' ) { gal_fits_key_write_title_in_ptr(keyll->value, *fptr); p->updatechecksum=1; return 0; } else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The 'keyname' value '%s' is not " "recognized as one with no value", __func__, PACKAGE_BUGREPORT, keyll->keyname); /* Function should not reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix this " "problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); return 0; } static void keywords_write_update(struct fitsparams *p, fitsfile **fptr, gal_fits_list_key_t *keyll, int u1w2) { int status=0, continuewriting=0; gal_fits_list_key_t *tmp; /* Open the FITS file if it hasn't been opened yet. */ keywords_open(p, fptr, READWRITE); /* Go through each key and write it in the FITS file. */ while(keyll!=NULL) { /* Deal with special keywords. */ continuewriting=1; if( keyll->value==NULL || keyll->keyname[0]=='/' ) continuewriting=keywords_write_special(p, fptr, keyll); /* Write the information: */ if(continuewriting) { if(u1w2==1) { if( keyll->value && gal_blank_is(keyll->value, keyll->type)==0 ) { if( fits_update_key(*fptr, gal_fits_type_to_datatype(keyll->type), keyll->keyname, keyll->value, keyll->comment, &status) ) gal_fits_io_error(status, NULL); } else { if(fits_write_key_null(*fptr, keyll->keyname, keyll->comment, &status)) gal_fits_io_error(status, NULL); } } else if (u1w2==2) { if( keyll->value && gal_blank_is(keyll->value, keyll->type)==0 ) { if( fits_write_key(*fptr, gal_fits_type_to_datatype(keyll->type), keyll->keyname, keyll->value, keyll->comment, &status) ) gal_fits_io_error(status, NULL); } else { if(fits_write_key_null(*fptr, keyll->keyname, keyll->comment, &status)) gal_fits_io_error(status, NULL); } if(keyll->unit && fits_write_key_unit(*fptr, keyll->keyname, keyll->unit, &status) ) gal_fits_io_error(status, NULL); } else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' so " "we can fix this problem. The value %d is not valid for " "'u1w2'", __func__, PACKAGE_BUGREPORT, u1w2); /* Add the unit (if one was given). */ if(keyll->unit && fits_write_key_unit(*fptr, keyll->keyname, keyll->unit, &status) ) gal_fits_io_error(status, NULL); /* By this stage, a keyword has been written or updated. So its necessary to update the checksum in the end. This should be under the 'if(continuewriting)' conditional (because */ p->updatechecksum=1; } /* Free the allocated spaces if necessary: */ if(keyll->vfree) free(keyll->value); if(keyll->kfree) free(keyll->keyname); if(keyll->cfree) free(keyll->comment); /* Keep the pointer to the next keyword and free the allocated space for this keyword.*/ tmp=keyll->next; free(keyll); keyll=tmp; } } static void keywords_print_all_keys(struct fitsparams *p, fitsfile **fptr) { size_t i=0; int nkeys, status=0; char *fullheader, *c, *cf; /* Convert the header into a contiguous string. */ if( fits_hdr2str(*fptr, 0, NULL, 0, &fullheader, &nkeys, &status) ) gal_fits_io_error(status, NULL); /* FLEN_CARD supposes that the NULL string character is in the end of each keyword header card. In fits_hdr2str, the NULL characters are removed and so the maximum length is one less. */ cf=(c=fullheader)+nkeys*(FLEN_CARD-1); do { if(i && i%(FLEN_CARD-1)==0) putc('\n', stdout); putc(*c++, stdout); ++i; } while(ccp.quiet) printf("%s\n" "Checking integrity of %s (hdu %s)\n" "%s" "--------\n" "Basic info (remove all extra info with '--quiet'):\n" " - DATASUM: verifies only the data (not keywords).\n" " - CHECKSUM: verifies data and keywords.\n" "They can be added-to/updated-in an extension/HDU with:\n" " $ astfits %s -h%s --write=checksum\n" "--------\n", PROGRAM_STRING, p->input->v, p->cp.hdu, ctime(&p->rawtime), p->input->v, p->cp.hdu); /* Print the verification result. */ printf("DATASUM: %s\n", dataok==1 ? "Verified" : (dataok==0 ? "NOT-PRESENT" : "INCORRECT")); printf("CHECKSUM: %s\n", hduok==1 ? "Verified" : (hduok==0 ? "NOT-PRESENT" : "INCORRECT")); /* Return failure if any of the keywords are not verified. */ return (dataok==-1 || hduok==-1) ? EXIT_FAILURE : EXIT_SUCCESS; } /* To copy keys to output file when '--copykeys' is given in 'STR,STR,STR' format. */ static void keywords_copykeys_name(struct fitsparams *p, fitsfile *fptr, char *inkeys, size_t numinkeys, int *updatechecksum) { size_t i, j, len; int status=0, found; char **strarr=p->copykeysname->array; /* Copy the requested headers into the output files header. */ for(i=0; icopykeysname->size; ++i) { /* Find the requested key from the set of input keywords that were read before. The FITS standard does specify that the keyword should only have upper-case letters, but CFITSIO does accept small case (and write upper-case), so we'll also ignore case when comparing.*/ found=0; len=strlen(strarr[i]); for(j=0;jinput->v, p->cp.hdu), strarr[i]); } } /* To copy keys to output file when --copykeys are given in INT:INT format. */ static void keywords_copykeys_range(struct fitsparams *p, fitsfile *fptr, char *inkeys, size_t numinkeys, int *updatechecksum) { size_t i; long initial; int status=0; /* Initial sanity check. Since 'numinkeys' includes 'END' (counting from 1, as we do here), the first keyword must not be larger OR EQUAL to 'numinkeys'. */ if(p->copykeysrange[0]>=numinkeys) error(EXIT_FAILURE, 0, "%s (hdu %s): first keyword number give " "to '--copykeys' (%ld) is larger than the number of " "keywords in this header (%zu, including the 'END' " "keyword)", p->input->v, p->cp.hdu, p->copykeysrange[0], numinkeys); /* If the user wanted to count from the end (by giving a negative value), then do that. */ if(p->copykeysrange[1]<0) { /* Set the last keyword requested. */ initial=p->copykeysrange[1]; p->copykeysrange[1] += numinkeys; /* Sanity check. */ if(p->copykeysrange[0]>=p->copykeysrange[1]) error(EXIT_FAILURE, 0, "%s (hdu %s): the last keyword given to " "'--copykeys' (%ld, or %ld after counting from the bottom) " "is earlier than the first (%ld)", p->input->v, p->cp.hdu, initial, p->copykeysrange[1], p->copykeysrange[0]); } /* Final sanity check (on range limit). */ if(p->copykeysrange[1]>=numinkeys) error(EXIT_FAILURE, 0, "%s (hdu %s): second keyword number give to " "'--copykeys' (%ld) is larger than the number of keywords in " "this header (%zu, including the 'END' keyword)", p->input->v, p->cp.hdu, p->copykeysrange[1], numinkeys); /* Copy the requested headers into the output. */ for(i=p->copykeysrange[0]-1; i<=p->copykeysrange[1]-1; ++i) { if( fits_write_record(fptr, &inkeys[i*80], &status ) ) gal_fits_io_error(status, NULL); else *updatechecksum=1; } } static void keywords_copykeys(struct fitsparams *p, char *inkeys, size_t numinkeys) { int status=0; fitsfile *fptr; int updatechecksum=0, checksumexists=0; /* Open the output HDU. */ fptr=gal_fits_hdu_open(p->cp.output, p->outhdu, READWRITE, 1, "--outhdu"); /* See if a 'CHECKSUM' key exists in the HDU or not (to update in case we wrote anything). */ checksumexists=gal_fits_key_exists_fptr(fptr, "CHECKSUM"); /* Call different functions depending on whether a list or range of keywords is given. */ if(p->copykeysname) keywords_copykeys_name(p, fptr, inkeys, numinkeys, &updatechecksum); else keywords_copykeys_range(p, fptr, inkeys, numinkeys, &updatechecksum); /* If a checksum existed, and we made changes in the file, we should update the checksum. */ if(checksumexists && updatechecksum) if( fits_write_chksum(fptr, &status) ) gal_fits_io_error(status, NULL); /* Close the output FITS file. */ if(fits_close_file(fptr, &status)) gal_fits_io_error(status, NULL); } static void keywords_date_to_seconds(struct fitsparams *p, fitsfile *fptr) { int status=0; double subsec; size_t seconds; char *subsecstr=NULL; char fitsdate[FLEN_KEYWORD]; /* Read the requested FITS keyword. */ if( fits_read_key(fptr, TSTRING, p->datetosec, &fitsdate, NULL, &status) ) gal_fits_io_error(status, NULL); /* Return the number of seconds (and subseconds).*/ seconds=gal_fits_key_date_to_seconds(fitsdate, &subsecstr, &subsec); if(seconds==GAL_BLANK_SIZE_T) error(EXIT_FAILURE, 0, "the time string couldn't be interpretted"); /* Print the result (for the sub-seconds, print everything after the */ if( !p->cp.quiet ) { printf("%s (hdu %s), key '%s': %s\n", p->input->v, p->cp.hdu, p->datetosec, fitsdate); printf("Seconds since 1970/01/01 (00:00:00): %zu%s\n\n", seconds, subsecstr?subsecstr:""); printf("(To suppress verbose output, run with '-q')\n"); } else printf("%zu%s\n", seconds, subsecstr?subsecstr:""); /* Clean up. */ if(subsecstr) free(subsecstr); } static void keywords_wcs_convert(struct fitsparams *p) { int nwcs; size_t ndim, *insize; char *suffix, *output; gal_data_t *data=NULL; struct wcsprm *inwcs, *outwcs=NULL; size_t *dsize, defaultsize[2]={2000,2000}; /* If the extension has any data, read it, otherwise just make an empty array. */ if(gal_fits_hdu_format(p->input->v, p->cp.hdu, "--hdu")==IMAGE_HDU) { /* Read the size of the dataset (we don't need the actual size!). */ insize=gal_fits_img_info_dim(p->input->v, p->cp.hdu, &ndim, "--hdu"); free(insize); /* If the number of dimensions is two, then read the dataset, otherwise, ignore it. */ if(ndim==2) data=gal_fits_img_read(p->input->v, p->cp.hdu, p->cp.minmapsize, p->cp.quietmmap, "--hdu"); } /* Read the input's WCS and make sure one exists. */ inwcs=gal_wcs_read(p->input->v, p->cp.hdu, p->cp.wcslinearmatrix, 0, 0, &nwcs, "--hdu"); if(inwcs==NULL) error(EXIT_FAILURE, 0, "%s (hdu %s): doesn't have any WCS structure " "for converting its coordinate system or distortion", p->input->v, p->cp.hdu); /* In case there is no dataset and the conversion is between TPV to SIP, we need to set a default size and use that for the conversion, but we also need to warn the user. */ if(p->wcsdistortion && data==NULL) { if( !p->cp.quiet && gal_wcs_distortion_identify(inwcs)==GAL_WCS_DISTORTION_TPV && p->distortionid==GAL_WCS_DISTORTION_SIP ) error(0, 0, "no data associated with WCS for distortion " "conversion.\n\n" "The requested conversion can't be done analytically, so a " "solution has to be found by fitting the parameters over a " "grid of pixels. We will use a default grid of %zux%zu " "pixels and will proceed with the conversion. But it would " "be more accurate if it is the size of the image that this " "WCS is associated with", defaultsize[1], defaultsize[0]); dsize=defaultsize; } else dsize=data->dsize; /* Do the conversion. */ if(p->wcscoordsys) outwcs=gal_wcs_coordsys_convert(inwcs, p->coordsysid); else if(p->wcsdistortion) outwcs=gal_wcs_distortion_convert(inwcs, p->distortionid, dsize); else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The requested mode for this function is not " "recognized", __func__, PACKAGE_BUGREPORT); /* Set the output filename. */ if(p->cp.output) output=p->cp.output; else { if(asprintf(&suffix, "-%s.fits", p->wcsdistortion ? p->wcsdistortion : p->wcscoordsys)<0) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); output=gal_checkset_automatic_output(&p->cp, p->input->v, suffix); } gal_checkset_writable_remove(output, p->input->v, 0, p->cp.dontdelete); /* Write the output file. */ if(data) { /* Add the output WCS to the dataset and write it. */ data->wcs=outwcs; gal_fits_img_write(data, output, NULL, 0); /* Clean up, but remove the pointer first (so it doesn't free it here). */ data->wcs=NULL; gal_data_free(data); } else gal_wcs_write(outwcs, output, p->wcsdistortion, NULL, PROGRAM_NAME, 0); /* Clean up. */ wcsfree(inwcs); wcsfree(outwcs); if(output!=p->cp.output) free(output); } static void keywords_value_in_output_copy(gal_data_t *write, gal_data_t *key, size_t in_counter) { char **strarrk, **strarrw; /* Small sanity check. */ if(write->type != key->type) error(EXIT_FAILURE, 0, "%s: the input datasets must have " "the same data type. The 'write' and 'key' arguments " "are respectively '%s' and '%s'", __func__, gal_type_name(write->type, 1), gal_type_name(key->type, 1)); /* Copy the value. */ if(key->type==GAL_TYPE_STRING) { strarrk=key->array; strarrw=write->array; strarrw[ in_counter ] = strarrk[0]; strarrk[0]=NULL; } else memcpy(gal_pointer_increment(write->array, in_counter, write->type), key->array, gal_type_sizeof(write->type)); } /* Write the value in the first row. The first row is unique here: if there is only one input dataset, the dataset name will not be in the output. But when there is more than one dataset, we include a column for the name of the dataset. */ static gal_data_t * keywords_value_in_output_first(struct fitsparams *p, gal_data_t *topout, char *filename, gal_data_t *keysll, size_t ninput) { char **strarr; gal_data_t *out=NULL; gal_data_t *write, *key; size_t in_counter=0; /* This function is only for the first row. */ /* If a name column is necessary. */ if(topout) { /* Small sanity check. */ if(topout->next) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The 'next' pointer of 'topout' should " "be NULL", __func__, PACKAGE_BUGREPORT); /* The size of the output should be the same as 'ninput'. */ if(topout->size!=ninput) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The number of elements in 'topout' " "(%zu) is different from 'ninput' (%zu)", __func__, PACKAGE_BUGREPORT, out->size, ninput); /* Write the filename. */ strarr=topout->array; gal_checkset_allocate_copy(filename, &strarr[in_counter]); } /* Add the new columns into the raw output (only keyword values). */ for(key=keysll; key!=NULL; key=key->next) { /* If the keyword couldn't be read for any reason then 'key->status' will be non-zero. In this case, return a string type and put a blank string value. */ if( key->status ) { key->type=GAL_TYPE_STRING; if(p->cp.quiet==0) error(EXIT_SUCCESS, 0, "%s (hdu %s): does not contain a " "keyword '%s'", filename, p->cp.hdu, key->name); } /* Allocate the full column for this key and add it to the end of the existing output list of columns: IMPORTANT NOTE: it is necessary to initialize the values because we may need to change the types before fully writing values within it. */ write=gal_data_alloc(NULL, key->type, 1, &ninput, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, key->name, key->unit, key->comment); /* Copy the value of this key into the output. Note that for strings, the arrays are initialized to NULL. */ if( key->status ) { strarr=write->array; gal_checkset_allocate_copy(GAL_BLANK_STRING, &strarr[in_counter]); } else keywords_value_in_output_copy(write, key, in_counter); /* Put the allocated column into the output list. */ gal_list_data_add(&out, write); } /* Reverse the list (to be the same order as the user's request). */ gal_list_data_reverse(&out); /* If a first row (containing the filename) is given, then add the allocated datasets to its end */ if(topout) { topout->next=out; out=topout; } /* Return the output. */ return out; } static void keywords_value_in_output_rest_replace(gal_data_t *list, gal_data_t *old, gal_data_t *new) { gal_data_t *parse; new->next=old->next; for(parse=list; parse!=NULL; parse=parse->next) if(parse->next==old) { gal_data_free(old); parse->next=new; break; } } /* This function is for the case that we have more than one row. In this case, we always want the input file's name to be printed. */ static void keywords_value_in_output_rest(struct fitsparams *p, gal_data_t *out, char *filename, gal_data_t *keysll, size_t in_counter) { int goodtype; char **strarr; gal_data_t *write, *key; gal_data_t *goodkey, *goodwrite; /* Write the file name in the first column. */ strarr=out->array; gal_checkset_allocate_copy(filename, &strarr[in_counter]); /* Go over all the keys are write them in. */ write=out; for(key=keysll; key!=NULL; key=key->next) { /* Increment the write column also. */ write=write->next; /* If the status is non-zero then the keyword couldn't be read. In this case, put a blank value in this row. */ if(key->status) { gal_blank_write(gal_pointer_increment(write->array, in_counter, write->type), write->type); if(p->cp.quiet==0) error(EXIT_SUCCESS, 0, "%s (hdu %s): does not contain a " "keyword '%s'", filename, p->cp.hdu, key->name); continue; } /* This key is good and the type is string (which is the type for a key that doesn't exist in the previous file(s)). In this case, check if all the previous rows are blank. If they are all blank then this keyword didn't exist in any of the previous files and this is the first one that has the keyword. So change the type of the column to the final type. */ else { if( write->type==GAL_TYPE_STRING && write->type!=key->type && gal_blank_number(write, 1)==write->size ) { goodwrite=gal_data_alloc(NULL, key->type, 1, out->dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, key->name, key->unit, key->comment); gal_blank_initialize(goodwrite); keywords_value_in_output_rest_replace(out, write, goodwrite); write=goodwrite; } } /* If the previous files didn't have metadata for this keyword but this file does, use the metadata here. */ if(write->unit==NULL && key->unit) { write->unit=key->unit; key->unit=NULL; } if(write->comment==NULL && key->comment) { write->comment=key->comment; key->comment=NULL; } /* If the column types are the same, then put them in. */ if(key->type==write->type) keywords_value_in_output_copy(write, key, in_counter); else { /* Find the most inclusive type. */ goodtype=gal_type_out(key->type, write->type); /* Convert each of the two into the same type. */ goodkey = ( key->type==goodtype ? key : gal_data_copy_to_new_type(key, goodtype) ); goodwrite = ( write->type==goodtype ? write : gal_data_copy_to_new_type(write, goodtype) ); /* Copy the row into the output. */ keywords_value_in_output_copy(goodwrite, goodkey, in_counter); /* If the "good" writing dataset has been changed, then replace it in the output (correct its 'next' pointer, and set the previous column to point to it. */ if(goodwrite!=write) { keywords_value_in_output_rest_replace(out, write, goodwrite); write=goodwrite; } /* If a different key has been used, clean it. */ if(goodkey!=key) gal_data_free(goodkey); } } } static void keywords_value(struct fitsparams *p) { int status; fitsfile *fptr=NULL; gal_list_str_t *input, *tmp; size_t i, ii=0, ninput, nkeys; gal_data_t *out=NULL, *keysll=NULL; /* Count how many inputs there are, and allocate the first column with the name. */ ninput=gal_list_str_number(p->input); if(ninput>1 || p->cp.quiet==0) out=gal_data_alloc(NULL, GAL_TYPE_STRING, 1, &ninput, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, "FILENAME", "name", "Name of input file."); /* Allocate the structure to host the desired keywords read from each FITS file and their values. But first convert the list of strings (for keyword names), (where each string can be a comma-separated list) into a list with a single value per string. */ gal_options_merge_list_of_csv(&p->keyvalue); nkeys=gal_list_str_number(p->keyvalue); /* Parse each input file, read the keywords and put them in the output list. */ for(input=p->input; input!=NULL; input=input->next) { /* Open the input FITS file. */ fptr=gal_fits_hdu_open(input->v, p->cp.hdu, READONLY, 1, "--hdu"); /* Allocate the array to keep the keys. */ i=0; keysll=gal_data_array_calloc(nkeys); for(tmp=p->keyvalue; tmp!=NULL; tmp=tmp->next) { if(tmp->next) keysll[i].next=&keysll[i+1]; keysll[i].name=tmp->v; ++i; } /* Read the keys. Note that we only need the comments and units if '--colinfoinstdout' is called. */ gal_fits_key_read_from_ptr(fptr, keysll, p->colinfoinstdout, p->colinfoinstdout); /* Close the input FITS file. */ status=0; if(fits_close_file(fptr, &status)) gal_fits_io_error(status, NULL); /* Write the values of this column into the final output. */ if(ii==0) { ++ii; out=keywords_value_in_output_first(p, out, input->v, keysll, ninput); } else keywords_value_in_output_rest(p, out, input->v, keysll, ii++); /* Clean up. */ for(i=0;icp.output, p->input->v, 0, p->cp.dontdelete); gal_table_write(out, NULL, NULL, p->cp.tableformat, p->cp.output, "KEY-VALUES", p->colinfoinstdout, 0); /* Clean up. */ gal_list_str_free(p->keyvalue, 0); } /***********************************************************************/ /****************** Main function ********************/ /***********************************************************************/ /* NOTE ON CALLING keywords_open FOR EACH OPERATION: 'keywords_open' is being called individually for each separate operation because the necessary permissions differ: when the user only wants to read keywords, they don't necessarily need write permissions. So if they haven't asked for any writing/editing operation, we shouldn't open in write-mode. Because the user might not have the permissions to write and they might not want to write. 'keywords_open' will only open the file once (if the pointer is already allocated, it won't do anything). */ int keywords(struct fitsparams *p) { char *inkeys=NULL; fitsfile *fptr=NULL; gal_list_str_t *tstll; int status=0, numinkeys; int r=EXIT_SUCCESS, checksumexists=0; /* Print the requested keywords. Note that this option isn't called with the rest. It is independent of them. */ if(p->keyvalue) keywords_value(p); /* Delete the requested keywords. */ if(p->delete) { /* Open the FITS file. */ keywords_open(p, &fptr, READWRITE); /* Go over all the keywords to delete. */ for(tstll=p->delete; tstll!=NULL; tstll=tstll->next) { fits_delete_key(fptr, tstll->v, &status); if(status) r=fits_has_error(p, FITS_ACTION_DELETE, tstll->v, status); else p->updatechecksum=1; status=0; } } /* If the checksum keyword still exists in the HDU (wasn't deleted in the previous step), then activate the flag to recalculate it at the end. Note that the distortion or coordinate system functions will do this job separately themselves. */ if(p->rename || p->update || p->write || p->asis || p->history || p->comment || p->date) { keywords_open(p, &fptr, READWRITE); checksumexists=gal_fits_key_exists_fptr(fptr, "CHECKSUM"); } /* Rename the requested keywords. */ if(p->rename) { keywords_open(p, &fptr, READWRITE); keywords_rename_keys(p, &fptr, &r); } /* Update the requested keywords. */ if(p->update) { keywords_open(p, &fptr, READWRITE); keywords_write_update(p, &fptr, p->update_keys, 1); } /* Write the requested keywords. */ if(p->write) { keywords_open(p, &fptr, READWRITE); keywords_write_update(p, &fptr, p->write_keys, 2); } /* Put in any full line of keywords as-is. */ if(p->asis) { keywords_open(p, &fptr, READWRITE); for(tstll=p->asis; tstll!=NULL; tstll=tstll->next) { fits_write_record(fptr, tstll->v, &status); if(status) r=fits_has_error(p, FITS_ACTION_WRITE, tstll->v, status); else p->updatechecksum=1; status=0; } } /* Add the history keyword(s). */ if(p->history) { keywords_open(p, &fptr, READWRITE); for(tstll=p->history; tstll!=NULL; tstll=tstll->next) { fits_write_history(fptr, tstll->v, &status); if(status) r=fits_has_error(p, FITS_ACTION_WRITE, "HISTORY", status); else p->updatechecksum=1; status=0; } } /* Add comment(s). */ if(p->comment) { keywords_open(p, &fptr, READWRITE); for(tstll=p->comment; tstll!=NULL; tstll=tstll->next) { fits_write_comment(fptr, tstll->v, &status); if(status) r=fits_has_error(p, FITS_ACTION_WRITE, "COMMENT", status); else p->updatechecksum=1; status=0; } } /* Update/add the date. */ if(p->date) { keywords_open(p, &fptr, READWRITE); fits_write_date(fptr, &status); if(status) r=fits_has_error(p, FITS_ACTION_WRITE, "DATE", status); else p->updatechecksum=1; status=0; } /* Update the checksum (if necessary). */ if(checksumexists && p->updatechecksum) if( fits_write_chksum(fptr, &status) ) gal_fits_io_error(status, NULL); /* Print all the keywords in the extension. */ if(p->printallkeys) { keywords_open(p, &fptr, READONLY); keywords_print_all_keys(p, &fptr); } /* Verify the CHECKSUM and DATASUM keys. */ if(p->verify) { keywords_open(p, &fptr, READONLY); r=keywords_verify(p, &fptr); } /* If a list/range of keywords must be copied, get all the keywords as a single string. */ if(p->copykeys) { keywords_open(p, &fptr, READONLY); if( fits_convert_hdr2str(fptr, 0, NULL, 0, &inkeys, &numinkeys, &status) ) gal_fits_io_error(status, NULL); status=0; } /* Convert the FITS date string into seconds. */ if(p->datetosec) { keywords_open(p, &fptr, READONLY); keywords_date_to_seconds(p, fptr); } /* List all keyword names. */ if(p->printkeynames) { keywords_open(p, &fptr, READONLY); keywords_list_key_names(p, fptr); } /* Close the FITS file */ if(fptr && fits_close_file(fptr, &status)) gal_fits_io_error(status, NULL); /* Write desired keywords into output. */ if(p->copykeys) { keywords_copykeys(p, inkeys, numinkeys); free(inkeys); } /* Convert the input's distortion to the desired output distortion. */ if(p->wcsdistortion || p->wcscoordsys) keywords_wcs_convert(p); /* Return. */ return r; } gnuastro-0.22/bin/fits/meta.c0000644000175000017500000001235514551337306011604 /********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Corresponding author: Pedram Ashofteh-Ardakani Contributing author(s): Mohammad Akhlaghi Copyright (C) 2022-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "meta.h" /* Prepare the 'wcsalign' structure based on given options. */ static void meta_initialize(struct fitsparams *p, gal_warp_wcsalign_t *wa) { /* Low-level variables. */ gal_data_t *input=NULL; struct gal_options_common_params *cp=&p->cp; /* High-level variables. */ char *hdu=cp->hdu; char *inputname=p->input->v; char *suffix="_pixarea.fits"; /* Set automatic output filename if nothing is given. */ if(!cp->output) cp->output=gal_checkset_automatic_output(cp, inputname, suffix); /* Check if we're allowed to delete the output image. If not, fail FAST before any CPU-intensive process. */ gal_checkset_writable_remove(cp->output, inputname, 0, cp->dontdelete); /* Read the input image and its WCS, must free it when done. */ input=gal_array_read_one_ch_to_type(inputname, hdu, NULL, GAL_TYPE_FLOAT64, -1, 0, "--hdu"); input->wcs=gal_wcs_read(inputname, hdu, 0, 0, 0, &input->nwcs, "--hdu"); /* Prepare the essential warping variables. */ wa->input=input; wa->numthreads=cp->numthreads; wa->edgesampling=p->edgesampling; /* We're using the same grid so only 'coveredfrac=1.0f' is sensible. In other words, there are no overlaps between the two grids where one pixel might encounter neighboring NaN values which then 'coveredfrac' takes care of. */ wa->coveredfrac=1; /* Done with initializations, notify the user and start. */ if(!p->cp.quiet) { printf(PROGRAM_NAME" "PACKAGE_VERSION" started on %s", ctime(&p->rawtime)); printf(" Using %zu CPU thread%s\n", p->cp.numthreads, p->cp.numthreads==1 ? "." : "s."); printf(" Input: %s (hdu: %s)\n", inputname, hdu); printf(" Output: %s (size: %zux%zu, type: %s)\n", cp->output, input->dsize[0], input->dsize[1], gal_type_name(p->cp.type, 1)); } } /* Write the configuration keywords and the created image to output. */ static void meta_write_to_file(struct fitsparams *p, gal_warp_wcsalign_t *wa) { gal_data_t *output=wa->output; gal_fits_list_key_t *headers=NULL; /* Add configuration headers. */ gal_fits_key_list_add_end(&headers, GAL_TYPE_STRING, "input", 0, p->input->v, 0, "File given to astfits", 0, NULL, 0); gal_fits_key_list_add_end(&headers, GAL_TYPE_SIZE_T, "edgesampling", 0, &p->edgesampling, 0, "Extra sampling along pixel edges.", 0, NULL, 0); gal_fits_key_list_add_end(&headers, GAL_TYPE_FLOAT64, "Coveredfrac", 0, &wa->coveredfrac, 0, "Fraction of pixel that is covered by input", 0, NULL, 0); /* Convert to type and write to file. */ if(p->cp.type!=output->type) output=gal_data_copy_to_new_type_free(output, p->cp.type); gal_fits_img_write(output, p->cp.output, headers, 1); /* Clean up. */ wa->output=NULL; /* Must be here to prevent double freeing. */ gal_data_free(output); gal_data_free(wa->input); } /* Calculate input pixel area on WCS and write as pixel values on the a copy of the input. */ void meta_pixelareaonwcs(struct fitsparams *p) { struct timeval t1; /* Store program start time, and the epoch for further timing reports. */ time(&p->rawtime); gettimeofday(&t1, NULL); /* Call for an empty wcsalign structure. */ gal_warp_wcsalign_t wa=gal_warp_wcsalign_template(); /* Initialize the warping variables based on command-line arguments. */ meta_initialize(p, &wa); /* Execute the warping and fill the data-structure with results. */ gal_warp_pixelarea(&wa); /* Done with calculations, write to file and finish. */ meta_write_to_file(p, &wa); /* Report how long the operation took. */ if(!p->cp.quiet) gal_timing_report(&t1, PROGRAM_NAME" finished in: ", 0); } gnuastro-0.22/bin/fits/main.h0000644000175000017500000001235614551337306011610 /********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Pedram Ashofteh-Ardakani Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H #include #include #include /* Progarm name macros: */ #define PROGRAM_NAME "Fits" /* Program full name. */ #define PROGRAM_EXEC "astfits" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION enum fits_mode { FITS_MODE_INVALID, /* ==0, by C standard. */ FITS_MODE_HDU, FITS_MODE_KEY, FITS_MODE_META, }; /* Main program's structure */ struct fitsparams { /* From the environment. */ struct gal_options_common_params cp; /* Common parameters. */ int hdu_in_commandline; /* HDU wasn't given in config. file. */ gal_list_str_t *input; /* Name of input file. */ char *outhdu; /* HDU of output (only when necessary). */ char *arguments; /* List of input files. */ gal_list_str_t *remove; /* Remove extensions from a file. */ gal_list_str_t *copy; /* Copy extensions to output. */ gal_list_str_t *cut; /* Copy ext. to output and remove. */ uint8_t numhdus; /* Print number of HDUs in FITS file. */ uint8_t datasum; /* Calculate and print HDU's datasum. */ uint8_t datasumencoded; /* Calculate and print HDU's datasum. */ uint8_t pixelscale; /* Calculate and print HDU's pixelscale. */ uint8_t pixelareaarcsec2; /* Return pixel area in arcsec^2. */ uint8_t skycoverage; /* Calculate and image coverage in WCS. */ uint8_t hastablehdu; /* File has atleast one table HDU. */ uint8_t hasimagehdu; /* File has atleast one image HDU. */ uint8_t listtablehdus; /* List all table HDUs within the file. */ uint8_t listimagehdus; /* List all image HDUs within the file. */ uint8_t listallhdus; /* List all HDUs within the file. */ uint8_t primaryimghdu; /* Copy/cut HDU into primary HDU. */ uint8_t printallkeys; /* Print all the header keywords. */ uint8_t printkeynames; /* List all keyword names. */ uint8_t date; /* Set DATE to current time. */ gal_list_str_t *asis; /* Strings to write asis. */ gal_list_str_t *keyvalue; /* Strings to write asis. */ gal_list_str_t *delete; /* Keywords to remove. */ gal_list_str_t *rename; /* Rename a keyword. */ gal_list_str_t *update; /* For keywords to update. */ gal_list_str_t *write; /* Full arg. for keywords to add. */ gal_list_str_t *history; /* HISTORY value. */ gal_list_str_t *comment; /* COMMENT value. */ uint8_t *verify; /* Verify the CHECKSUM and DATASUM keys. */ char *copykeys; /* Range of keywords to copy in output. */ char *datetosec; /* Convert FITS date to seconds. */ char *wcscoordsys; /* Name of new WCS coordinate system. */ char *wcsdistortion; /* WCS distortion to write in output. */ uint8_t quitonerror; /* Quit if an error occurs. */ uint8_t colinfoinstdout; /* Print column info in output. */ uint8_t pixelareaonwcs; /* Get pixel area by warp edgesampling. */ size_t edgesampling; /* Sampling of edges in '--pixelareaonwcs'*/ /* Internal: */ int mode; /* Operating on HDUs or keywords. */ int coordsysid; /* ID of desired coordinate system.*/ int distortionid; /* ID of desired distortion. */ int updatechecksum; /* If CHECKSUM should be update. */ long copykeysrange[2]; /* Start and end of copy. */ gal_data_t *copykeysname; /* Keyword names to copy. */ gal_fits_list_key_t *write_keys; /* Keys to write in the header. */ gal_fits_list_key_t *update_keys; /* Keys to update in the header. */ time_t rawtime; /* Starting time of the program. */ }; #endif gnuastro-0.22/bin/fits/authors-cite.h0000644000175000017500000000303014551337306013260 /********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/fits/args.h0000644000175000017500000003145714551337306011623 /********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Pedram Ashofteh-Ardakani Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { { "arguments", UI_KEY_ARGUMENTS, "STR", 0, "Plain-text file with command-line arguments.", GAL_OPTIONS_GROUP_INPUT, &p->arguments, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "HDU (extension) information:", UI_GROUP_EXTENSION_INFORMATION }, { "numhdus", UI_KEY_NUMHDUS, 0, 0, "Print number of HDUs in the given FITS file.", UI_GROUP_EXTENSION_INFORMATION, &p->numhdus, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "datasum", UI_KEY_DATASUM, 0, 0, "Calculate HDU's datasum and print in stdout.", UI_GROUP_EXTENSION_INFORMATION, &p->datasum, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "datasum-encoded", UI_KEY_DATASUMENCODED, 0, 0, "16 character string encoding of '--datasum'.", UI_GROUP_EXTENSION_INFORMATION, &p->datasumencoded, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "pixelscale", UI_KEY_PIXELSCALE, 0, 0, "Return the pixel-scale of the HDU's WCS.", UI_GROUP_EXTENSION_INFORMATION, &p->pixelscale, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "pixelareaarcsec2", UI_KEY_PIXELAREAARCSEC2, 0, 0, "Pixel area in arc-seconds squared.", UI_GROUP_EXTENSION_INFORMATION, &p->pixelareaarcsec2, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "skycoverage", UI_KEY_SKYCOVERAGE, 0, 0, "Image coverage in the WCS coordinates.", UI_GROUP_EXTENSION_INFORMATION, &p->skycoverage, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "hastablehdu", UI_KEY_HASTABLEHDU, 0, 0, "File has at least one table HDU.", UI_GROUP_EXTENSION_INFORMATION, &p->hastablehdu, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "hasimagehdu", UI_KEY_HASIMAGEHDU, 0, 0, "File has at least one image HDU.", UI_GROUP_EXTENSION_INFORMATION, &p->hasimagehdu, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "listtablehdus", UI_KEY_LISTTABLEHDUS, 0, 0, "List all table HDUs within the file.", UI_GROUP_EXTENSION_INFORMATION, &p->listtablehdus, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "listimagehdus", UI_KEY_LISTIMAGEHDUS, 0, 0, "List all image HDUs within the file.", UI_GROUP_EXTENSION_INFORMATION, &p->listimagehdus, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "listallhdus", UI_KEY_LISTALLHDUS, 0, 0, "List all HDUs within the file.", UI_GROUP_EXTENSION_INFORMATION, &p->listallhdus, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "HDU (extension) manipulation:", UI_GROUP_EXTENSION_MANIPULATION }, { "remove", UI_KEY_REMOVE, "STR/INT", 0, "Remove extension from input file.", UI_GROUP_EXTENSION_MANIPULATION, &p->remove, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "copy", UI_KEY_COPY, "STR/INT", 0, "Copy extension to output file.", UI_GROUP_EXTENSION_MANIPULATION, &p->copy, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "cut", UI_KEY_CUT, "STR/INT", 0, "Copy extension to output and remove from input.", UI_GROUP_EXTENSION_MANIPULATION, &p->cut, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "primaryimghdu", UI_KEY_PRIMARYIMGHDU, 0, 0, "Copy/cut image HDUs to primary/zero-th HDU.", UI_GROUP_EXTENSION_MANIPULATION, &p->primaryimghdu, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Keywords (in one HDU):", UI_GROUP_KEYWORD }, { "asis", UI_KEY_ASIS, "STR", 0, "Write value as-is (may corrupt FITS file).", UI_GROUP_KEYWORD, &p->asis, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "keyvalue", UI_KEY_KEYVALUE, "STR[,STR,...]", 0, "Only print the value of requested keyword(s).", UI_GROUP_KEYWORD, &p->keyvalue, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "delete", UI_KEY_DELETE, "STR", 0, "Delete a keyword from the header.", UI_GROUP_KEYWORD, &p->delete, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "rename", UI_KEY_RENAME, "STR,STR", 0, "Rename keyword, keeping value and comments.", UI_GROUP_KEYWORD, &p->rename, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "update", UI_KEY_UPDATE, "STR,STR", 0, "Update a keyword value or comments.", UI_GROUP_KEYWORD, &p->update, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "write", UI_KEY_WRITE, "STR", 0, "Write a keyword (with value, comments and units).", UI_GROUP_KEYWORD, &p->write, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "history", UI_KEY_HISTORY, "STR", 0, "Add HISTORY keyword, any length is ok.", UI_GROUP_KEYWORD, &p->history, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "comment", UI_KEY_COMMENT, "STR", 0, "Add COMMENT keyword, any length is ok.", UI_GROUP_KEYWORD, &p->comment, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "date", UI_KEY_DATE, 0, 0, "Set the DATE keyword to the current time.", UI_GROUP_KEYWORD, &p->date, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "verify", UI_KEY_VERIFY, 0, 0, "Verify the CHECKSUM and DATASUM keywords.", UI_GROUP_KEYWORD, &p->verify, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "printallkeys", UI_KEY_PRINTALLKEYS, 0, 0, "Print all keywords in the selected HDU.", UI_GROUP_KEYWORD, &p->printallkeys, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "printkeynames", UI_KEY_PRINTKEYNAMES, 0, 0, "Print all keyword names.", UI_GROUP_KEYWORD, &p->printkeynames, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "copykeys", UI_KEY_COPYKEYS, "INT:INT/STR,STR", 0, "Range/Names of keywords to copy in output.", UI_GROUP_KEYWORD, &p->copykeys, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "datetosec", UI_KEY_DATETOSEC, "STR", 0, "FITS date to sec from 1970/01/01T00:00:00", UI_GROUP_KEYWORD, &p->datetosec, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "wcsdistortion", UI_KEY_WCSDISTORTION, "STR", 0, "Convert WCS distortion to another type.", UI_GROUP_KEYWORD, &p->wcsdistortion, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "wcscoordsys", UI_KEY_WCSCOORDSYS, "STR", 0, "Convert WCS coordinate system.", UI_GROUP_KEYWORD, &p->wcscoordsys, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Meta-image creation:", UI_GROUP_META }, { "pixelareaonwcs", UI_KEY_PIXELAREAONWCS, 0, 0, "Image where pixels show their area in sky (WCS).", UI_GROUP_META, &p->pixelareaonwcs, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "edgesampling", UI_KEY_EDGESAMPLING, "INT", 0, "Number of extra samplings in pixel sides.", UI_GROUP_META, &p->edgesampling, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Output options. */ { "outhdu", UI_KEY_OUTHDU, "STR", 0, "HDU/extension in output for --copykeys.", GAL_OPTIONS_GROUP_OUTPUT, &p->outhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "colinfoinstdout", UI_KEY_COLINFOINSTDOUT, 0, 0, "Column info/metadata when printing to stdout.", GAL_OPTIONS_GROUP_OUTPUT, &p->colinfoinstdout, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Operating mode options. */ { "quitonerror", UI_KEY_QUITONERROR, 0, 0, "Quit if there is an error on any action.", GAL_OPTIONS_GROUP_OPERATING_MODE, &p->quitonerror, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/fits/ui.h0000644000175000017500000000542214551337306011275 /********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Pedram Ashofteh-Ardakani Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_EXTENSION_INFORMATION = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_EXTENSION_MANIPULATION, UI_GROUP_KEYWORD, UI_GROUP_META, }; /* Available letters for short options: b e f g i j m x y z A B E G J L W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_REMOVE = 'R', UI_KEY_COPY = 'C', UI_KEY_CUT = 'k', UI_KEY_NUMHDUS = 'n', UI_KEY_PRINTALLKEYS = 'p', UI_KEY_ASIS = 'a', UI_KEY_KEYVALUE = 'l', UI_KEY_DELETE = 'd', UI_KEY_RENAME = 'r', UI_KEY_UPDATE = 'u', UI_KEY_WRITE = 'w', UI_KEY_COMMENT = 'c', UI_KEY_HISTORY = 'H', UI_KEY_DATE = 't', UI_KEY_VERIFY = 'v', UI_KEY_QUITONERROR = 'Q', UI_KEY_DATETOSEC = 's', UI_KEY_COLINFOINSTDOUT = 'O', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_TITLE = 1000, UI_KEY_DATASUM, UI_KEY_ARGUMENTS, UI_KEY_DATASUMENCODED, UI_KEY_PIXELSCALE, UI_KEY_PIXELAREAONWCS, UI_KEY_PIXELAREAARCSEC2, UI_KEY_SKYCOVERAGE, UI_KEY_HASTABLEHDU, UI_KEY_HASIMAGEHDU, UI_KEY_LISTTABLEHDUS, UI_KEY_LISTIMAGEHDUS, UI_KEY_LISTALLHDUS, UI_KEY_OUTHDU, UI_KEY_COPYKEYS, UI_KEY_PRINTKEYNAMES, UI_KEY_WCSCOORDSYS, UI_KEY_PRIMARYIMGHDU, UI_KEY_WCSDISTORTION, UI_KEY_EDGESAMPLING, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct fitsparams *p); void ui_free_and_report(struct fitsparams *p); #endif gnuastro-0.22/bin/fits/fits.h0000644000175000017500000000260314551337306011623 /********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef FITS_H #define FITS_H enum fits_action_ids { FITS_ACTION_INVALID, /* ==0: by C standard. */ FITS_ACTION_DELETE, FITS_ACTION_RENAME, FITS_ACTION_UPDATE, FITS_ACTION_WRITE, FITS_ACTION_COPY, FITS_ACTION_REMOVE, }; int fits_has_error(struct fitsparams *p, int actioncode, char *string, int status); int fits(struct fitsparams *p); #endif gnuastro-0.22/bin/fits/keywords.h0000644000175000017500000000216614551337306012531 /********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Pedram Ashofteh-Ardakani Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef KEYWORDS_H #define KEYWORDS_H int keywords(struct fitsparams *p); #endif gnuastro-0.22/bin/fits/meta.h0000644000175000017500000000217214551337306011605 /********************************************************************* Fits - View and manipulate FITS extensions and/or headers. Fits is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Pedram Ashofteh-Ardakani Contributing author(s): Mohammad Akhlaghi Copyright (C) 2022-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef META_H #define META_H void meta_pixelareaonwcs(struct fitsparams *p); #endif gnuastro-0.22/bin/fits/astfits-complete.bash0000644000175000017500000001406214551337306014631 # Bash autocompletion to Gnuastro's Fits program. See the comments above # 'bin/completion.bash.in' for more. # # Original author: # Mohammad Akhlaghi # Contributing author(s): # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see ## Contributing author(s): ## Copyright (C) 2017-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astmatch ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astmatch_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astmatch_SOURCES = main.c ui.c match.c EXTRA_DIST = main.h authors-cite.h args.h ui.h match.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astmatch.conf gnuastro-0.22/bin/match/astmatch.conf0000644000175000017500000000202114551337306013301 # Default parameters (System) for Match. # Match is part of GNU Astronomy Utilities. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astmatch --help # Full list of options, short doc. # $ astmatch -P # Print all options and used values. # $ info astmatch # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input hdu2 1 kdtreehdu 1 # Catalog matching kdtree internal gnuastro-0.22/bin/match/Makefile.in0000644000175000017500000033753014557513747012726 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astmatch$(EXEEXT) subdir = bin/match ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astmatch_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) match.$(OBJEXT) astmatch_OBJECTS = $(am_astmatch_OBJECTS) am__DEPENDENCIES_1 = astmatch_DEPENDENCIES = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/main.Po ./$(DEPDIR)/match.Po \ ./$(DEPDIR)/ui.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astmatch_SOURCES) DIST_SOURCES = $(astmatch_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib astmatch_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astmatch_SOURCES = main.c ui.c match.c EXTRA_DIST = main.h authors-cite.h args.h ui.h match.h dist_sysconf_DATA = astmatch.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/match/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/match/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astmatch$(EXEEXT): $(astmatch_OBJECTS) $(astmatch_DEPENDENCIES) $(EXTRA_astmatch_DEPENDENCIES) @rm -f astmatch$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astmatch_OBJECTS) $(astmatch_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/match.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/match.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/match.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/match/main.c0000644000175000017500000000306114551337306011723 /********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" #include "match.h" /* Main function */ int main (int argc, char *argv[]) { struct timeval t1; struct matchparams p={{{0},0},0}; /* Set they starting time. */ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Match. */ match(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully. */ return EXIT_SUCCESS; } gnuastro-0.22/bin/match/ui.c0000644000175000017500000012627014551337306011424 /********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" matches catalogs of objects " "and (by default) will return the re-arranged matching inputs. The " "optional log file will return low-level information about the match " "(indexs and distances).\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct matchparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: cp->coptions[i].doc="Extension name or number of first input."; break; case GAL_OPTIONS_KEY_TYPE: cp->coptions[i].flags=OPTION_HIDDEN; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct matchparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments). */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(p->input1name) { if(p->input2name) argp_error(state, "only two arguments (input files) " "should be given, not any more"); else { if(arg[0]!='\0') p->input2name=arg; } } else { if(arg[0]!='\0') p->input1name=arg; } break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct matchparams *p) { /* k-d tree specific sanity checks. */ if(p->kdtree) { /* Set the k-d tree mode. */ if( !strcmp(p->kdtree,"build") ) p->kdtreemode=MATCH_KDTREE_BUILD; else if( !strcmp(p->kdtree,"internal") ) p->kdtreemode=MATCH_KDTREE_INTERNAL; else if( !strcmp(p->kdtree,"disable") ) p->kdtreemode=MATCH_KDTREE_DISABLE; else if( gal_fits_name_is_fits(p->kdtree) ) p->kdtreemode=MATCH_KDTREE_FILE; else error(EXIT_FAILURE, 0, "'%s' is not valid for '--kdtree'. The " "following values are accepted: 'build' (to build the k-d tree in " "the file given to '--output'), 'internal' (to force internal " "usage of a k-d tree for the matching), 'disable' (to not use a " "k-d tree at all), a FITS file name (the file to read a created " "k-d tree from)", p->kdtree); /* Make sure that the k-d tree build mode is not called with '--outcols'. */ if( p->kdtreemode==MATCH_KDTREE_BUILD && (p->outcols || p->coord) ) error(EXIT_FAILURE, 0, "the '--kdtree=build' option is incompatible " "with the '--outcols' or '--coord' options (because in the k-d " "tree building mode doesn't involve actual matching. It will " "only build k-d tree and write it to a file so it can be used " "in future matches)"); /* Make sure that a HDU is also specified for the k-d tree when its an external file. */ if( p->kdtreemode==MATCH_KDTREE_FILE && p->kdtreehdu==NULL ) error(EXIT_FAILURE, 0, "no '--kdtreehdu' specified! When a FITS " "file is given to '--kdtree', you should specify its " "extension/HDU within the file using '--kdtreehdu'. You " "can either use the HDU name, or its number (counting " "from 0). If you aren't sure what HDUs exist in the file, " "you can use the 'astfits %s' command to see the full list", p->kdtree); } } /* Two necessary catalogs: First: Standard input, or a file. Second: '--coord', or a file. */ static void ui_check_options_and_arguments(struct matchparams *p) { /* When '--coord' is given, or we are in k-d tree building mode, there should be no second catalog (argument). */ if(p->coord || p->kdtreemode==MATCH_KDTREE_BUILD) { /* Make sure no second argument is given. */ if(p->input2name) error(EXIT_FAILURE, 0, "only one argument can be given with the " "'--coord' or '--kdtree=build' options"); /* In case '--ccol2' is given. */ if(p->ccol2 && p->cp.quiet==0) { /* Print a warning to let the user know the option will not be used (the user had probably confused things if they have given it). */ error(EXIT_SUCCESS, 0, "WARNING: with '--coord' or '--kdtree', " "you only need to set '--ccol1' (since there is only a " "single input table), '--ccol2' is not needed"); } } /* We need two input catalogs. */ else { /* Without 'coord' atleast one input is necessary. */ if(p->input1name==NULL) error(EXIT_FAILURE, 0, "no inputs!\n\n" "Two inputs are necessary. The first can be a file, or from " "the standard input (e.g., a pipe). The second can be a " "file, or its coordinates can be directly specified on the " "command-line with '--coord'"); /* If the first input should be read from the standard input, the contents of 'input1name' actually belong to 'input2name'. */ if(p->input2name==NULL) { p->input2name=p->input1name; p->input1name=NULL; } } /* If the first input is a FITS file, make sure its HDU is also given. */ if( p->input1name && gal_fits_file_recognized(p->input1name) && p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU for first input. When the input is " "a FITS file, a HDU must also be specified, you can use the " "'--hdu' ('-h') option and give it the HDU number (starting " "from zero), extension name, or anything acceptable by " "CFITSIO"); if( p->input2name && gal_fits_file_recognized(p->input2name) && p->hdu2==NULL ) error(EXIT_FAILURE, 0, "no HDU for second input. Please use " "the '--hdu2' ('-H') option and give it the HDU number " "(starting from zero), extension name, or anything " "acceptable by CFITSIO"); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static void ui_set_mode(struct matchparams *p) { int tin1, tin2; char *t1=NULL, *t2=NULL; /* We will base the mode on the first input, then check with the second. Note that when the first is from standard input (it is 'NULL'), then we go into catalog mode because currently we assume standard input is only for plain text and WCS matching is not defined on plain text. */ if( p->input1name && gal_fits_file_recognized(p->input1name) ) { tin1=gal_fits_hdu_format(p->input1name, p->cp.hdu, "--hdu"); p->mode = (tin1 == IMAGE_HDU) ? MATCH_MODE_WCS : MATCH_MODE_CATALOG; } else { tin1=ASCII_TBL; /* For "uninitialized" warning, irrelevant here. */ p->mode=MATCH_MODE_CATALOG; } /* Necessary sanity checks. */ if(p->mode==MATCH_MODE_CATALOG && p->cp.searchin==0) error(EXIT_FAILURE, 0, "no '--searchin' option specified. Please run " "the following command for more information:\n\n" " $ info gnuastro \"selecting table columns\"\n"); /* Now that the mode is set, do some sanity checks on the second catalog. Recall that when '--coord' is given, there is no second input file.*/ if(p->input2name) { if(gal_fits_file_recognized(p->input2name)) { tin2=gal_fits_hdu_format(p->input2name, p->hdu2, "--hdu2"); if(tin1==IMAGE_HDU && tin2!=IMAGE_HDU) { t1 = (tin1==IMAGE_HDU) ? "image" : "catalog"; t2 = (tin2==IMAGE_HDU) ? "image" : "catalog"; } if(t1) error(EXIT_FAILURE, 0, "%s is a %s, while %s is an " "%s. Both inputs have to be images or catalogs", gal_checkset_dataset_name(p->input1name, p->cp.hdu), t1, gal_checkset_dataset_name(p->input2name, p->hdu2), t2 ); } else { if(p->mode==MATCH_MODE_WCS) error(EXIT_FAILURE, 0, "%s is an image, while %s is a catalog! " "Both inputs have to be images or catalogs", gal_checkset_dataset_name(p->input1name, p->cp.hdu), gal_checkset_dataset_name(p->input2name, p->hdu2) ); } } else { /* When there is no second-input file name ('--coord' is given), we cannot be in WCS mode (requiring a FITS file). */ if(p->mode==MATCH_MODE_WCS) error(EXIT_FAILURE, 0, "%s is an image, while '--coord' is only " "meaningful for catalogs", gal_checkset_dataset_name(p->input1name, p->cp.hdu)); } } /* The final aperture must have the following values: p->aperture[0]: Major axis length. p->aperture[1]: Axis ratio. p->aperture[2]: Position angle (relative to first dim). */ static void ui_read_columns_aperture_2d(struct matchparams *p) { size_t apersize=3; gal_data_t *newaper=NULL; double *naper=NULL, *oaper=p->aperture->array; /* A general sanity check: the first two elements of aperture cannot be zero or negative. */ if( oaper[0]<=0 ) error(EXIT_FAILURE, 0, "the first value of '--aperture' cannot be " "zero or negative"); if( p->aperture->size>1 && oaper[1]<=0 ) error(EXIT_FAILURE, 0, "the second value of '--aperture' cannot be " "zero or negative"); /* Will be needed in more than one case. */ if(p->aperture->size!=apersize) { newaper=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &apersize, NULL, 0, -1, 1, NULL, NULL, NULL); naper=newaper->array; } /* Different based on */ switch(p->aperture->size) { case 1: naper[0]=oaper[0]; naper[1]=1; naper[2]=0; break; case 2: naper[0] = oaper[0]>oaper[1] ? oaper[0] : oaper[1]; naper[1] = oaper[0]>oaper[1] ? oaper[1]/oaper[0] : oaper[0]/oaper[1]; naper[2] = oaper[0]>oaper[1] ? 0 : 90; break; case 3: if(oaper[1]>1) error(EXIT_FAILURE, 0, "second value to '--aperture' is larger " "than one. When three numbers are given to this option, the " "second is the axis ratio (which must always be less than 1)."); break; default: error(EXIT_FAILURE, 0, "%zu values given to '--aperture'. In 2D, this " "option can only take 1, 2, or 3 values", p->aperture->size); } /* If a new aperture was defined, then replace it with the exitsting one. */ if(newaper) { gal_data_free(p->aperture); p->aperture=newaper; } } /* The 3D aperture must finally have these elements. p->aperture[0] = Major axis length. p->aperture[1] = Second axis ratio. p->aperture[2] = Third axis ratio. p->aperture[3] = First ZXZ Euler angle rotation. p->aperture[4] = Second ZXZ Euler angle rotation. p->aperture[5] = Third ZXZ Euler angle rotation. */ static void ui_read_columns_aperture_3d(struct matchparams *p) { size_t apersize=6; gal_data_t *newaper=NULL; double *naper=NULL, *oaper=p->aperture->array; /* A general sanity check: the first two elements of aperture cannot be zero or negative. */ if( oaper[0]<=0 ) error(EXIT_FAILURE, 0, "the first value of '--aperture' cannot be " "zero or negative"); if( p->aperture->size>2 && (oaper[1]<=0 || oaper[2]<=0) ) error(EXIT_FAILURE, 0, "the second and third values of '--aperture' " "cannot be zero or negative"); /* Will be needed in more than one case. */ if(p->aperture->size!=apersize) { newaper=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &apersize, NULL, 0, -1, 1, NULL, NULL, NULL); naper=newaper->array; } /* Different based on */ switch(p->aperture->size) { case 1: naper[0] = oaper[0]; naper[1] = naper[2] = 1; naper[3] = naper[4] = naper[5] = 0; break; case 3: /* Major axis is along the first dimension, no rotation necessary. */ if(oaper[0]>=oaper[1] && oaper[0]>=oaper[2]) { naper[0] = oaper[0]; naper[1] = oaper[1] / oaper[0]; naper[2] = oaper[2] / oaper[0]; naper[3] = naper[4] = naper[5] = 0; } /* Major axis is along the second dimension. So we want 'X' to be in the direction of 'y'. Therefore, just the first Eurler ZXZ rotation is necessary by 90 degrees. Here is how the rotated coordinates (X,Y,Z) look like (after one rotation about Z). |z (before) Z| /Y | | / | ==> |/ .-------- y .------X / x / You see how the major axis (X) now lies in the second original direction (y). The length along 'x' is now along 'Y' and the third hasn't changed. Note that we are talking about the semi-axis lengths (a scalar, not a vector), so +- is irrelevant. */ else if(oaper[1]>=oaper[0] && oaper[1]>=oaper[2]) { naper[0] = oaper[1]; naper[1] = oaper[0] / oaper[1]; naper[2] = oaper[2] / oaper[1]; naper[3] = 90; naper[4] = naper[5] = 0; } /* The major axis is along the third dimension. So we want 'X' to point in the direction of 'z'. To get to that point, we need 90 degree rotations in all three Euler ZXZ rotations. |z (before) z'| /y' |y'' |X | | / | | | ==> |/ ==> | ==> | .------ y .------x' .------x' Y------. / / / x / z''/ Z/ We thus see that the length along the second original direction (y) doesn't change stays in the second direction (Y). But the original first axis direction (x) is now represented by (Z). Note that we are talking about the semi-axis lengths (a scalar, not a vector), so +- is irrelevant. */ else { naper[0] = oaper[2]; naper[1] = oaper[1] / oaper[2]; naper[2] = oaper[0] / oaper[2]; naper[3] = naper[4] = naper[5] = 90; } break; case 6: if(oaper[1]>1 || oaper[2]>1) error(EXIT_FAILURE, 0, "atleast one of the second or third values " "to '--aperture' is larger than one. When size numbers are " "given to this option (in 3D), the second and third are the " "axis ratios (which must always be less than 1)."); break; default: error(EXIT_FAILURE, 0, "%zu values given to '--aperture'. In 3D, this " "option can only take 1, 3, or 6 values. See the description of " "this option in the book for more with this command:\n\n" " $ info astmatch\n", p->aperture->size); } /* If a new aperture was defined, then replace it with the exitsting one. */ if(newaper) { gal_data_free(p->aperture); p->aperture=newaper; } } static size_t ui_set_columns_sanity_check_read_aperture(struct matchparams *p) { size_t ccol1n=0, ccol2n=0; /* Make sure the columns to match are given. */ if(p->coord || p->kdtreemode==MATCH_KDTREE_BUILD) { if(p->ccol1==NULL) error(EXIT_FAILURE, 0, "no value given to '--ccol1' (necessary " "with '--coord')"); } else { if(p->ccol1==NULL || p->ccol2==NULL) error(EXIT_FAILURE, 0, "both '--ccol1' and '--ccol2' must be " "given. They specify the columns containing the " "coordinates to match"); } /* Make sure the same number of columns is given to both. Note that a second catalog is only necessary when we aren't building a k-d tree. */ ccol1n = p->ccol1->size; if( p->kdtreemode!=MATCH_KDTREE_BUILD ) { ccol2n = p->coord ? p->coord->size : p->ccol2->size; if(ccol1n!=ccol2n) error(EXIT_FAILURE, 0, "number of coordinates given to '--ccol1' " "(%zu) and '--%s' (%zu) must be equal.\n\n" "If you didn't call these options, run with '--checkconfig' " "to see which configuration file is responsible. You can " "always override the configuration file values by calling " "the option manually on the command-line", ccol1n, p->coord ? "coord" : "ccol2", ccol2n); } /* Read/check the aperture values. */ if(p->aperture) switch(ccol1n) { case 1: if(p->aperture->size>1) error(EXIT_FAILURE, 0, "%zu values given to '--aperture'. In " "a 1D match, this option can only take one value", p->aperture->size); break; case 2: ui_read_columns_aperture_2d(p); break; case 3: ui_read_columns_aperture_3d(p); break; default: error(EXIT_FAILURE, 0, "%zu dimensional matches are not currently " "supported (maximum is 2 dimensions). The number of " "dimensions is deduced from the number of values given to " "'--ccol1' (or '--coord') and '--ccol2'", ccol1n); } else if ( p->kdtreemode != MATCH_KDTREE_BUILD ) error(EXIT_FAILURE, 0, "no matching aperture specified. Please use " "the '--aperture' option to define the acceptable aperture for " "matching the coordinates (in the same units as each " "dimension). Please run the following command for more " "information.\n\n $ info %s\n", PROGRAM_EXEC); /* Return the number of dimensions. */ return ccol1n; } /* Save the manually given coordinates (with '--coord') in column format (a list of datasets). */ static gal_data_t * ui_set_columns_from_coord(struct matchparams *p) { size_t i, one=1; gal_data_t *out=NULL; double *coord=p->coord->array; /* Write each given value as a one-row table column (single element datasets that are linked) */ for(i=0;icoord->size;++i) { gal_list_data_add_alloc(&out, NULL, GAL_TYPE_FLOAT64, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); *((double *)(out->array))=coord[i]; } gal_list_data_reverse(&out); /* Return the list. */ return out; } /* We want to keep the columns as double type. So what-ever their original type is, convert it. */ static gal_data_t * ui_read_columns_to_double(struct matchparams *p, char *filename, char *hdu, gal_list_str_t *cols, size_t numcols, char *hdu_option_name) { gal_data_t *tmp, *ttmp, *tout, *out=NULL; struct gal_options_common_params *cp=&p->cp; char *diff_cols_error="%s: the number of columns matched (%zu) " "differs from the number of usable calls to '--ccol1' (%zu). " "Please give more specific values to '--ccol1' (column " "numberes are the only identifiers guaranteed to be unique)."; /* Read the columns. Note that the first input's name can be NULL (if the user intended to use the standrad input). Also note that this function is called more than one time, so if the Standard input is already read once, we don't want to write a blank list over it (the Standard input will be empty after being read). */ if(p->stdinlines==NULL) p->stdinlines=gal_options_check_stdin(filename, p->cp.stdintimeout, "input"); tout=gal_table_read(filename, hdu, filename ? NULL : p->stdinlines, cols, cp->searchin, cp->ignorecase, cp->numthreads, cp->minmapsize, p->cp.quietmmap, NULL, hdu_option_name); /* A small sanity check. */ if(gal_list_data_number(tout)!=numcols) error(EXIT_FAILURE, 0, diff_cols_error, gal_checkset_dataset_name(filename, hdu), gal_list_data_number(tout), numcols); /* Go over the columns and see if they are double or not. To keep things simple, we'll keep a new list even if all the types are float64.*/ tmp=tout; while(tmp!=NULL) { /* If the coordinate column has more than one dimension (a vector column), the abort with an error: */ if(tmp->ndim!=1) error(EXIT_FAILURE, 0, "only single-valued columns can be given " "to '--ccol1' or '--ccol2'"); /* We need ot set the 'next' pointer */ ttmp=tmp->next; tmp->next=NULL; /* Correct the type if necessary. */ if(tmp->type==GAL_TYPE_FLOAT64) gal_list_data_add(&out, tmp); else gal_list_data_add(&out, gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT64) ); /* Set 'tmp' to the initial 'next pointer. */ tmp=ttmp; } /* The 'out' above is in reverse, so correct it and return */ gal_list_data_reverse(&out); return out; } #define UI_READ_KDTREE_FIXED_MSG "You can construct a k-d tree " \ "for your first input table using the command below (just set your " \ "desired output name, and give that file to '--kdtree', in a later " \ "call with the same first input catalog):\n\n" \ " astmatch %s -h%s --ccol1=%s,%s --kdtree=build --output=KDTREE.fits\n\n" \ "To learn more about the expected format of k-d trees in Gnuastro, " \ "please run this command: 'info gnuastro k-d'" static void ui_read_kdtree(struct matchparams *p) { size_t *sizetarr; char **strarr1 = p->ccol1->array; gal_data_t *keysll=gal_data_array_calloc(1); /* Read the external k-d tree. */ p->kdtreedata=gal_table_read(p->kdtree, p->kdtreehdu, NULL, NULL, GAL_TABLE_SEARCH_NAME, 1, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap, NULL, "--kdtreehdu"); /* It has to have only two columns, with an unsigned 32-bit integer type in each. */ if( gal_list_data_number(p->kdtreedata)!=2 ) error(EXIT_FAILURE, 0, "%s (hdu: %s, that was given to " "'--kdtree') has %zu column(s), but should contain 2 " "columns. " UI_READ_KDTREE_FIXED_MSG, p->kdtree, p->kdtreehdu, gal_list_data_number(p->kdtreedata), p->input1name, p->cp.hdu, strarr1[0], strarr1[1]); if( p->kdtreedata->type!=GAL_TYPE_UINT32 || p->kdtreedata->next->type!=GAL_TYPE_UINT32 ) error(EXIT_FAILURE, 0, "%s (hdu: %s, that was given to " "'--kdtree') doesn't have unsigned 32-bit integer columns. " UI_READ_KDTREE_FIXED_MSG, p->kdtree, p->kdtreehdu, p->input1name, p->cp.hdu, strarr1[0], strarr1[1]); if( p->kdtreedata->size!=p->cols1->size ) error(EXIT_FAILURE, 0, "%s (hdu: %s, that was given to " "'--kdtree') doesn't have the same number of rows as " "%s, which is the first given input. " UI_READ_KDTREE_FIXED_MSG, p->kdtree, p->kdtreehdu, gal_fits_name_save_as_string(p->input1name, p->cp.hdu), p->input1name, p->cp.hdu, strarr1[0], strarr1[1]); /* Read the k-d tree root. */ keysll[0].type=GAL_TYPE_SIZE_T; keysll[0].name=MATCH_KDTREE_ROOT_KEY; gal_fits_key_read(p->kdtree, p->kdtreehdu, keysll, 0, 0, "--kdtreehdu"); if(keysll[0].status) error(EXIT_FAILURE, 0, "%s (hdu: %s, that was given to " "'--kdtree') doesn't have the '%s' keyword, or it " "couldn't be read as a number. " UI_READ_KDTREE_FIXED_MSG, p->kdtree, p->kdtreehdu, MATCH_KDTREE_ROOT_KEY, p->input1name, p->cp.hdu, strarr1[0], strarr1[1]); sizetarr=keysll[0].array; p->kdtreeroot=sizetarr[0]; /* Clean up: since the 'name' component wasn't allocated in this example, we should set it to NULL before calling 'gal_data_array_free'. */ keysll[0].name=NULL; gal_data_array_free(keysll, 1, 1); } /* Read catalog columns */ static void ui_read_columns(struct matchparams *p) { size_t i, ndim; char **strarr1, **strarr2; gal_list_str_t *cols1=NULL, *cols2=NULL; /* Basic sanity checks and reading of aperture values. */ ndim=ui_set_columns_sanity_check_read_aperture(p); /* Convert the array of strings to a list of strings for the column names. */ strarr1 = p->ccol1->array; strarr2 = ( (p->coord || p->kdtreemode==MATCH_KDTREE_BUILD) ? NULL : p->ccol2->array ); for(i=0;icols1=ui_read_columns_to_double(p, p->input1name, p->cp.hdu, cols1, ndim, "--hdu"); if( p->kdtreemode!=MATCH_KDTREE_BUILD ) p->cols2=( p->coord ? ui_set_columns_from_coord(p) : ui_read_columns_to_double(p, p->input2name, p->hdu2, cols2, ndim, "--hdu2") ); /* If an external k-d tree is given, read it and make sure it has the same number of rows as the first input and the proper datatype. */ if( p->kdtreemode==MATCH_KDTREE_FILE ) ui_read_kdtree(p); /* If we are in k-d tree based matching and the second dataset is smaller than the first, print a warning to let the user know that the speed can be greatly improved if they swap the two. */ if( !p->cp.quiet && p->kdtreemode!=MATCH_KDTREE_BUILD && p->kdtreemode!=MATCH_KDTREE_DISABLE && p->cols1->size > (2*p->cols2->size) ) error(EXIT_SUCCESS, 0, "TIP: the matching speed will GREATLY IMPROVE " "if you swap the two inputs. Currently the second input has " "fewer rows than the first. In the k-d tree based matching, " "multi-threading will occur on the second input's rows and " "the k-d will be constructed for the first input. Fewer " "first-input rows therefore means a smaller tree, and more " "second-input rows will be better distributed in your " "system's CPU threads"); /* Free the extra spaces. */ gal_list_str_free(cols1, 1); gal_list_str_free(cols2, 1); } static void ui_preparations_out_cols(struct matchparams *p) { void *rptr; int goodvalue; gal_data_t *read; uint8_t readtype; char *col, **strarr=p->outcols->array; size_t i, one=1, ndim=p->coord?p->coord->size:0; /* Go over all the values and put the respective column identifier in the proper list. */ for(i=0;ioutcols->size;++i) { /* For easy reading. */ col=strarr[i]; /* In no-match mode, then the same column will be used from both catalogs so things are easier. */ if(p->notmatched) { gal_list_str_add(&p->acols, col, 0); gal_list_str_add(&p->bcols, col, 0); } /* In match mode, we need to know which column should come from which catalog. */ else switch(col[0]) { case 'a': gal_list_str_add(&p->acols, col+1, 0); break; case 'b': /* With '--coord', only numbers that are smaller than the number of the dimensions are acceptable. */ if(p->coord) { goodvalue=0; rptr=gal_type_string_to_number(col+1, &readtype); if(rptr) { read=gal_data_alloc(rptr, readtype, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); if(gal_type_is_int(readtype)) { read=gal_data_copy_to_new_type_free(read, GAL_TYPE_LONG); if( *((long *)(read->array)) <= ndim ) goodvalue=1; } gal_data_free(read); } if(goodvalue==0) error(EXIT_FAILURE, 0, "bad value to second catalog " "column (%s) of '--outcols'.\n\n" "With the '--coord' option, the second catalog " "is assumed to have a single row and the given " "number of columns. Therefore when using " "'--outcols', only integers that are less than " "the number of dimensions (%zu in this case) " "are acceptable", col+1, ndim); } gal_list_str_add(&p->bcols, col+1, 0); break; default: error(EXIT_FAILURE, 0, "'%s' is not a valid value for " "'--outcols'.\n\n" "The first character of each value to this option " "must be either 'a' or 'b'. The former specifies a " "column from the first input and the latter a " "column from the second. The characters after them " "can be any column identifier (number, name, or " "regular expression). For more on column selection, " "please run this command:\n\n" " $ info gnuastro \"Selecting table columns\"\n", col); } } /* Reverse the lists so they correspond to the input order. */ gal_list_str_reverse(&p->acols); gal_list_str_reverse(&p->bcols); } #define UI_OUT_SUFFNAME "-matched" static void ui_preparations_out_name(struct matchparams *p) { /* To temporarily keep the original value. */ char *suffix; uint8_t keepinputdir_orig; char *refname = p->input1name ? p->input1name : p->input2name; /* Set the output file(s) name(s). */ if(p->logasoutput) { if(p->cp.output) gal_checkset_allocate_copy(p->cp.output, &p->logname); else { if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT) p->logname=gal_checkset_automatic_output(&p->cp, refname, UI_OUT_SUFFNAME".txt"); else p->logname=gal_checkset_automatic_output(&p->cp, refname, UI_OUT_SUFFNAME".fits"); } /* Make sure a file with this name doesn't exist. */ gal_checkset_writable_remove(p->logname, NULL, 0, p->cp.dontdelete); /* The main output name needs to be available in p->out1name (for the final step when we want to write the input configurations as FITS keywords). */ gal_checkset_allocate_copy(p->logname, &p->out1name); } else { if(p->outcols || p->coord || p->kdtreemode==MATCH_KDTREE_BUILD) { if(p->cp.output) gal_checkset_allocate_copy(p->cp.output, &p->out1name); else { suffix = ( p->kdtreemode==MATCH_KDTREE_BUILD ? "-kdtree.fits" : ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? UI_OUT_SUFFNAME".txt" : UI_OUT_SUFFNAME".fits") ); p->out1name = gal_checkset_automatic_output(&p->cp, refname, suffix); } gal_checkset_writable_remove(p->out1name, refname, 0, p->cp.dontdelete); } else { /* Set 'p->out1name' and 'p->out2name'. */ if(p->cp.output) { if( gal_fits_name_is_fits(p->cp.output) ) { gal_checkset_allocate_copy(p->cp.output, &p->out1name); gal_checkset_allocate_copy(p->cp.output, &p->out2name); } else { /* Here, we are be using the output name as input to the automatic output generating function (usually it is the input name, not the output name). Therefore, the 'keepinputdir' variable should be 1. So we will temporarily change it here, then set it back to what it was. */ keepinputdir_orig=p->cp.keepinputdir; p->cp.keepinputdir=1; p->out1name=gal_checkset_automatic_output(&p->cp, p->cp.output, UI_OUT_SUFFNAME "-1.txt"); p->out2name=gal_checkset_automatic_output(&p->cp, p->cp.output, UI_OUT_SUFFNAME "-2.txt"); p->cp.keepinputdir=keepinputdir_orig; } } else { if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT) { p->out1name=gal_checkset_automatic_output(&p->cp, refname, UI_OUT_SUFFNAME "-1.txt"); p->out2name=gal_checkset_automatic_output(&p->cp, p->input2name, UI_OUT_SUFFNAME "-2.txt"); } else { p->out1name=gal_checkset_automatic_output(&p->cp, refname, UI_OUT_SUFFNAME ".fits"); gal_checkset_allocate_copy(p->out1name, &p->out2name); } } /* Make sure no file with these names exists. */ gal_checkset_writable_remove(p->out1name, refname, 0, p->cp.dontdelete); gal_checkset_writable_remove(p->out2name, refname, 0, p->cp.dontdelete); } /* If a log file is necessary, set its name here. */ if(p->cp.log) p->logname=gal_checkset_automatic_output(&p->cp, p->out1name, UI_OUT_SUFFNAME "-log.fits"); } } static void ui_preparations(struct matchparams *p) { /* Set the mode of the program. */ ui_set_mode(p); /* Currently Match only works on catalogs. */ if(p->mode==MATCH_MODE_WCS) error(EXIT_FAILURE, 0, "currently Match only works on catalogs, " "we will implement the WCS matching routines later"); else { ui_read_columns(p); if(p->outcols) ui_preparations_out_cols(p); } /* Set the output filename. */ ui_preparations_out_name(p); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct matchparams *p) { size_t nthreads; struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* If the output is a FITS table, prepare all the options as FITS keywords to write in output later. */ if(gal_fits_name_is_fits(p->out1name)) gal_options_as_fits_keywords(&p->cp); /* Let the user know that processing has started. */ if(!p->cp.quiet) { printf(PROGRAM_NAME" "PACKAGE_VERSION" started on %s", ctime(&p->rawtime)); nthreads=p->kdtreemode==MATCH_KDTREE_DISABLE ? 1 : p->cp.numthreads; printf(" - Using %zu CPU thread%s%s\n", nthreads, nthreads==1 ? "." : "s.", ( p->kdtreemode==MATCH_KDTREE_DISABLE ? " (sort-based match only uses a single thread)" : "")); printf(" - Match algorithm: %s\n", p->kdtree ? "k-d tree" : "sort-based"); printf(" - Input-1: %s; %zu rows\n", gal_fits_name_save_as_string(p->input1name, p->cp.hdu), p->cols1->size); if(p->kdtreemode==MATCH_KDTREE_FILE) printf(" - Input-1 k-d tree: %s\n", gal_fits_name_save_as_string(p->kdtree, p->kdtreehdu)); if(p->kdtreemode!=MATCH_KDTREE_BUILD) printf(" - Input-2: %s; %zu rows\n", p->coord ? "from --coord" : gal_fits_name_save_as_string(p->input2name, p->hdu2), p->cols2->size); } } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct matchparams *p, struct timeval *t1) { /* Free the allocated arrays: */ free(p->cp.hdu); free(p->aperture); free(p->out1name); free(p->out2name); free(p->cp.output); gal_data_free(p->ccol1); gal_data_free(p->ccol2); gal_data_free(p->outcols); gal_list_data_free(p->cols1); gal_list_data_free(p->cols2); if(p->kdtree) free(p->kdtree); gal_list_str_free(p->acols, 0); gal_list_str_free(p->bcols, 0); if(p->kdtreehdu) free(p->kdtreehdu); gal_list_str_free(p->stdinlines, 1); /* Print the final message. */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); } gnuastro-0.22/bin/match/match.c0000644000175000017500000006773414551337306012114 /********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Sachin Kumar Singh Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* Number of columns in a file. */ static gal_list_str_t * match_add_all_cols(char *filename, char *extname, gal_list_str_t *stdinlines, gal_list_str_t *incols, size_t *num, char *hdu_option_name) { char *tstr; int tableformat; gal_data_t *colinfo=NULL; gal_list_str_t *tmp, *finalcols=NULL; size_t i, numrows, numcols=GAL_BLANK_SIZE_T; /* Go over all the given input columns. */ for(tmp=incols; tmp!=NULL; tmp=tmp->next) { if(!strcmp(tmp->v,"_all")) { /* Read all the column information (if it hasn't been read until now). */ if( numcols == GAL_BLANK_SIZE_T ) { colinfo=gal_table_info(filename, extname, filename ? NULL : stdinlines, &numcols, &numrows, &tableformat, hdu_option_name); gal_data_array_free(colinfo, numcols, 1); } /* Add each column number to the list of columns. */ for(i=0;iv, 1); } /* If a new list of columns is ready, re-order tham and write them in. Note that there may be multiple '_all' terms, so we need to do this after parsing all the requested columns. */ gal_list_str_reverse(&finalcols); /* For a check. gal_list_str_print(finalcols); exit(1); */ /* Clean up and return. */ *num=numcols; return finalcols; } static gal_data_t * match_cat_from_coord(struct matchparams *p, gal_list_str_t *cols, size_t *numcolmatch) { void *rptr; gal_list_str_t *col; uint8_t read, readtype; size_t colcounter, counter; gal_data_t *tmp, *ttmp, *out=NULL; /* Go over the desired columns and only return the good ones. */ colcounter=0; for(col=cols;col!=NULL;col=col->next) { /* In 'ui_preparations_out_cols', we have done the necessary sanity checks, so we can safely use the values. */ rptr=gal_type_string_to_number(col->v, &readtype); if(readtype!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The given string didn't have a 'uint8' type", __func__, PACKAGE_BUGREPORT); read=*((uint8_t *)rptr); /* Find the proper column in the second input's columns. Just note that column counting starts from 1.*/ counter=1; for(tmp=p->cols2;tmp!=NULL;tmp=tmp->next) if(counter++ == read) { ttmp=gal_data_copy(tmp); ttmp->next=NULL; gal_list_data_add(&out, ttmp); ++numcolmatch[colcounter]; break; } /* Increment the column counter. */ ++colcounter; } /* Reverse the list. */ gal_list_data_reverse(&out); /* Return the output columns. */ return out; } /*static*/ void /* Static is commented to avoid warning. */ match_catalog_permute_inplace(struct matchparams *p, gal_data_t *in, size_t *permutation, size_t nummatched) { char **strarr; size_t i, numnotmatched; /* Do the permutation. */ gal_permutation_apply(in, permutation); /* Correct the size of the array so only the matching/no-matching columns are saved as output. Note that the 'size' element is only for Gnuastro, it has no effect on later freeing of the array in the memory (we are not 'realloc'ing). */ if(p->notmatched) { /* We want to move the non-matched rows after permutation to the top set of rows. But when we have strings, the strings that will be over-written need to be freed first. */ numnotmatched = in->size - nummatched; if(in->type==GAL_TYPE_STRING) { strarr=in->array; for(i=0;iarray, gal_pointer_increment(in->array, nummatched, in->type), numnotmatched*gal_type_sizeof(in->type)); /* If we are on a string, the pointers at the bottom (that have been moved to the top), should not be set to NULL to avoid any potential double freeing. */ if(in->type==GAL_TYPE_STRING) { strarr=in->array; for(i=numnotmatched; isize;++i) strarr[i]=NULL; } /* Correct the size of the tile. */ in->size = in->dsize[0] = numnotmatched; } /* This is a normal match (not not-match). */ else { /* If we are on a string column, free the allocated space for each element that should be removed. */ if(in->type==GAL_TYPE_STRING) { strarr=in->array; for(i=nummatched;isize;++i) if(strarr[i]) { free(strarr[i]); strarr[i]=NULL; } } /* Correct the size. */ in->size = in->dsize[0] = nummatched; } } static void match_arrange_in_new_col(struct matchparams *p, gal_data_t *in, size_t *permutation, size_t nummatched) { size_t c=0, i, n; size_t istart=p->notmatched ? nummatched : 0; size_t iend=p->notmatched ? in->dsize[0] : nummatched; size_t outrows=p->notmatched ? in->dsize[0] - nummatched : nummatched; /* Set the number of values in this column (for vectors). */ n = in->ndim==1 ? 1 : in->dsize[1]; /* Allocate the array. */ void *out=gal_pointer_allocate_ram_or_mmap(in->type, outrows*n, 0, p->cp.minmapsize, &in->mmapname, p->cp.quietmmap, __func__, "out"); /* Copy the matched rows into the output array. */ for(i=istart;itype), gal_pointer_increment(in->array, n*permutation[i], in->type), gal_type_sizeof(in->type) * n); /**********************************/ /* Add a check so if the column is a string, we free the strings that aren't included in the output. */ /**********************************/ /* Free the existing array, and correct the sizes. */ free(in->array); in->dsize[0] = outrows; in->size = in->dsize[0] * (in->ndim==1 ? 1 : in->dsize[1]); in->array=out; } /* Parameters for parallelization of output creation. */ struct ma_params { struct matchparams *p; /* General program settings. */ gal_data_t *cat; /* Dataset (all rows) to arrange. */ size_t nummatched; /* Number of matched. */ size_t *permutation; /* The permutation. */ }; static void * match_arrange(void *in_prm) { /* Low-level definitions to be done first. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct ma_params *map=(struct ma_params *)tprm->params; /* High-level variables. */ gal_data_t *tmp; size_t c, i, index; /* go over all columns associated to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ index = tprm->indexs[i]; /* Find this column in the whole table (linked list). */ c=0; for(tmp=map->cat; tmp!=NULL; tmp=tmp->next) if(c++==index) break; /* Rearrange this columns' elements. */ match_arrange_in_new_col(map->p, tmp, map->permutation, map->nummatched); } /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* Read the catalog in the given file and use the given permutation to keep the proper columns. */ static gal_data_t * match_catalog_read_write_all(struct matchparams *p, size_t *permutation, size_t nummatched, int f1s2, size_t **numcolmatch) { int hasall=0; struct ma_params map; gal_data_t *tmp, *cat; gal_list_str_t *cols, *tcol; char *hopt = (f1s2==1) ? "--hdu" : "--hdu2"; char *hdu = (f1s2==1) ? p->cp.hdu : p->hdu2; gal_list_str_t *incols = (f1s2==1) ? p->acols : p->bcols; size_t *numcols = (f1s2==1) ? &p->anum : &p->bnum; char *extname = (f1s2==1) ? "INPUT_1" : "INPUT_2"; char *outname = (f1s2==1) ? p->out1name : p->out2name; char *filename = (f1s2==1) ? p->input1name : p->input2name; /* If special columns are requested. */ if(p->outcols) { /* As a special situation, the user can ask to incude all of the columns from one of the inputs with the special '_all' name. So, we'll check if that is the case and write in all the columns where they are requested.*/ for(tcol=incols; tcol!=NULL; tcol=tcol->next) if(!strcmp(tcol->v,"_all")) { hasall=1; break; } /* If atleast one instance of '_all' is present, then reset the list of columns to include in output. */ if(hasall) { cols=match_add_all_cols(filename, hdu, p->stdinlines, incols, numcols, hopt); if(f1s2==1) { gal_list_str_free(p->acols, 0); p->acols=cols; } else { gal_list_str_free(p->bcols, 0); p->bcols=cols; } } else cols=incols; /* When the output contains columns from both inputs, we need to keep the number of columns matched against each column identifier. */ *numcolmatch=gal_pointer_allocate(GAL_TYPE_SIZE_T, gal_list_str_number(cols), 1, __func__, "numcolmatch"); } else cols=incols; /* Read the full table. NOTE that with '--coord', for the second input, both 'filename' and 'p->stdinlines' will be NULL. */ if(filename || p->stdinlines) cat=gal_table_read(filename, hdu, filename ? NULL : p->stdinlines, cols, p->cp.searchin, p->cp.ignorecase, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap, *numcolmatch, hopt); else cat=match_cat_from_coord(p, cols, *numcolmatch); /* Arrange the output rows. */ if(permutation) { /* When we are in no-match AND outcols mode, we don't need to touch the rows of the first input catalog (we want all of them) */ if( (p->notmatched && p->outcols && f1s2==1) == 0 ) { map.p=p; map.cat=cat; map.nummatched=nummatched; map.permutation=permutation; gal_threads_spin_off(match_arrange, &map, gal_list_data_number(cat), p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap); } } /* If no match was found ('permutation==NULL'), and the matched columns are requested, empty all the columns that are to be written (only keeping the meta-data). */ else if(p->notmatched==0) { for(tmp=cat; tmp!=NULL; tmp=tmp->next) { tmp->size=0; free(tmp->dsize); tmp->dsize=NULL; free(tmp->array); tmp->array=NULL; } } /* Write the catalog to the output. */ if(p->outcols) return cat; else if(cat) { /* Write the catalog to a file. */ gal_table_write(cat, NULL, NULL, p->cp.tableformat, outname, extname, 0, 0); /* Clean up. */ gal_list_data_free(cat); } return NULL; } /* When merging is to be done by rows (the non-matched rows of the second catalog get merged into the first for the same columns). */ static void match_catalog_write_one_row(struct matchparams *p, gal_data_t *a, gal_data_t *b) { char **strarr; gal_data_t *ta, *tb, *cat=NULL; size_t i, dsize=a->size+b->size; /* A small sanity check. */ if( gal_list_data_number(a) != gal_list_data_number(b) ) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix it. The number of columns in the two catalogs are not " "equal (%zu and %zu respectively)", __func__, PACKAGE_BUGREPORT, gal_list_data_number(a), gal_list_data_number(b)); /* Check if there is actually any row to add? */ if(b->size>0) { /* Go over the columns of the first and make the final output columns with new sizes, but same types and metadata as the first input.*/ tb=b; for(ta=a; ta!=NULL; ta=ta->next) { /* Make sure both have the same type. */ if(ta->type!=tb->type) error(EXIT_FAILURE, 0, "when '--notmatched' and '--outcols' " "are used together, the each column given to '--outcols' " "must have the same datatype in both tables. However, " "the first input has a type of '%s' for one of the " "columns, while the second has a type of '%s'", gal_type_name(ta->type, 1), gal_type_name(tb->type, 1)); /* Allocate the necessary space. */ gal_list_data_add_alloc(&cat, NULL, ta->type, ta->ndim, &dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, ta->name, ta->unit, ta->comment); /* Copy the data of the first and second inputs in output. */ memcpy(cat->array, ta->array, ta->size*gal_type_sizeof(ta->type)); memcpy(gal_pointer_increment(cat->array, ta->size, cat->type), tb->array, tb->size*gal_type_sizeof(tb->type)); /* If we have a string column, the allocated spaces of each row should now only be freed within the 'cat' column, so set the values within 'a' and 'b' to NULL. */ if(ta->type==GAL_TYPE_STRING) { strarr=ta->array; for(i=0;isize;++i) strarr[i]=NULL; strarr=tb->array; for(i=0;isize;++i) strarr[i]=NULL; } /* Increment 'tb'. */ tb=tb->next; } /* Reverse the table and write it out. */ gal_list_data_reverse(&cat); gal_table_write(cat, NULL, NULL, p->cp.tableformat, p->out1name, "MATCHED", 0, 0); gal_list_data_free(cat); } /* There wasn't any row to add, just write the 'a' columns and don't free it ('a' will be freed in the higher-level function). */ else gal_table_write(a, NULL, NULL, p->cp.tableformat, p->out1name, "MATCHED", 0, 0); } /* When specific columns from both inputs are requested, this function will write them out into a single table. */ static void match_catalog_write_one_col(struct matchparams *p, gal_data_t *a, gal_data_t *b, size_t *acolmatch, size_t *bcolmatch) { gal_data_t *cat=NULL; char **strarr=p->outcols->array; size_t i, j, k, ac=0, bc=0, npop; /* Go over the initial list of strings. */ for(i=0; ioutcols->size; ++i) switch(strarr[i][0]) { case 'a': for(j=0;janum; for(k=0;kbnum; for(k=0;kcp.tableformat, p->out1name, "MATCHED", 0, 0); gal_list_data_free(cat); } static void match_catalog_kdtree_build(struct matchparams *p) { char *msg; size_t root; struct timeval t1; gal_data_t *kdtree; gal_fits_list_key_t *keylist=NULL; /* Meta-data in the output fits file. */ char *unit = "index"; char *comment = "k-d tree root index (counting from 0)."; /* Construct a k-d tree from 'p->cols1': the index of root is stored in 'root'. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); kdtree = gal_kdtree_create(p->cols1, &root); if(!p->cp.quiet) { if( asprintf(&msg, "k-d tree constructed (%zu rows).", p->cols1->size)<0 ) error(EXIT_FAILURE, errno, "asprintf allocation"); gal_timing_report(&t1, msg, 1); free(msg); } /* Write the k-d tree to a file and write root index and input name as FITS keywords ('gal_table_write' frees 'keylist'). */ gal_fits_key_list_title_add(&keylist, "k-d tree parameters", 0); gal_fits_key_write_filename("KDTIN", p->input1name, &keylist, 0, p->cp.quiet); gal_fits_key_list_add_end(&keylist, GAL_TYPE_SIZE_T, MATCH_KDTREE_ROOT_KEY, 0, &root, 0, comment, 0, unit, 0); gal_table_write(kdtree, keylist, NULL, GAL_TABLE_FORMAT_BFITS, p->out1name, "kdtree", 0, 1); /* Let the user know that the k-d tree has been built. */ if(!p->cp.quiet) fprintf(stdout, " - Output (k-d tree): %s\n", p->out1name); } /* Wrapper over the k-d tree library to return an output in the same format as 'gal_match_sort_based'. */ static gal_data_t * match_catalog_kdtree(struct matchparams *p, size_t *nummatched) { char *msg; struct timeval t1; gal_data_t *out=NULL; /* Operate according to the required mode. */ switch(p->kdtreemode) { /* Build a k-d tree and don't continue. */ case MATCH_KDTREE_BUILD: match_catalog_kdtree_build(p); break; /* Do the k-d tree matching. */ case MATCH_KDTREE_FILE: case MATCH_KDTREE_INTERNAL: /* If the k-d tree should be constructed internally, build it, otherwise, we have already read an checked the k-d tree in 'ui.c', so go directly to the matching. */ if(p->kdtreemode==MATCH_KDTREE_INTERNAL) { if(!p->cp.quiet) gettimeofday(&t1, NULL); p->kdtreedata = gal_kdtree_create(p->cols1, &p->kdtreeroot); if(!p->cp.quiet) gal_timing_report(&t1, "Internal k-d tree constructed.", 1); } /* Do k-d tree based match. */ if(!p->cp.quiet) { gettimeofday(&t1, NULL); printf(" - Match using the k-d tree ...\n"); } out = gal_match_kdtree(p->cols1, p->cols2, p->kdtreedata, p->kdtreeroot, p->aperture->array, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap, nummatched); if(!p->cp.quiet) { if( asprintf(&msg, "... %zu matches found, done!", *nummatched)<0 ) error(EXIT_FAILURE, errno, "asprintf allocation"); gal_timing_report(&t1, msg, 1); free(msg); } gal_list_data_free(p->kdtreedata); break; /* Abort if the mode isn't recognized (its a bug!). */ default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem! The code %d isn't recognized for 'kdtreemode'", __func__, PACKAGE_BUGREPORT, p->kdtreemode); } /* Return the final match. */ return out; } static gal_data_t * match_catalog_sort_based(struct matchparams *p, size_t *nummatched) { char *msg; gal_data_t *mcols; struct timeval t1; /* Let the user know that the matching has started. */ if(!p->cp.quiet) { gettimeofday(&t1, NULL); printf(" - Matching by sorting ...\n"); } /* Do the matching. */ mcols=gal_match_sort_based(p->cols1, p->cols2, p->aperture->array, 0, 1, p->cp.minmapsize, p->cp.quietmmap, nummatched); /* Let the user know that it finished. */ if(!p->cp.quiet) { if( asprintf(&msg, "... %zu matches found, done!", *nummatched)<0 ) error(EXIT_FAILURE, errno, "asprintf allocation"); gal_timing_report(&t1, msg, 1); free(msg); } /* Return the permutations. */ return mcols; } static void match_catalog(struct matchparams *p) { uint32_t *u, *uf; struct timeval t1; gal_data_t *tmp, *a=NULL, *b=NULL, *mcols=NULL; size_t nummatched, *acolmatch=NULL, *bcolmatch=NULL; /* If we want to use kd-tree for matching. */ if(p->kdtreemode!=MATCH_KDTREE_DISABLE) { /* The main processing function. */ mcols=match_catalog_kdtree(p, &nummatched); /* If the user just asked to build a k-d tree, no futher processing is necessary, so don't continue. */ if(p->kdtreemode==MATCH_KDTREE_BUILD) return; } else mcols=match_catalog_sort_based(p, &nummatched); /* If the output is to be taken from the input columns (it isn't just the log), then do the job. */ if(p->logasoutput==0) { /* Let the user know what is happening. */ if(!p->cp.quiet) { gettimeofday(&t1, NULL); printf(" - Arranging matched rows (skip this with " "'--logasoutput')...\n"); } /* Read (and possibly write) the outputs. Note that we only need to read the table when it is necessary for the output (the user might have asked for '--outcols', only with columns of one of the two inputs). */ if(p->outcols==NULL || p->acols) a=match_catalog_read_write_all(p, mcols?mcols->array:NULL, nummatched, 1, &acolmatch); if(p->outcols==NULL || p->bcols) b=match_catalog_read_write_all(p, mcols?mcols->next->array:NULL, nummatched, 2, &bcolmatch); /* If one catalog (with specific columns from either of the two inputs) was requested, then write it out. */ if(p->outcols) { /* Arrange the columns and write the output. */ if(p->notmatched) match_catalog_write_one_row(p, a, b); else { match_catalog_write_one_col(p, a, b, acolmatch, bcolmatch); a=b=NULL; /*They are freed in function above. */ } /* Clean up. */ if(acolmatch) free(acolmatch); if(bcolmatch) free(bcolmatch); } /* Clean up. */ if(a) gal_list_data_free(a); if(b) gal_list_data_free(b); /* Let the user know. */ if( !p->cp.quiet ) gal_timing_report(&t1, "... done!", 1); } /* Write the raw information in a log file if necessary. */ if(p->logname && mcols) { /* Note that unsigned 64-bit integers are not recognized in FITS tables. So if the log file is a FITS table, covert the two index columns to uint32. */ tmp=gal_data_copy_to_new_type(mcols, GAL_TYPE_UINT32); tmp->size=tmp->dsize[0]=nummatched; tmp->next=mcols->next; gal_data_free(mcols); mcols=tmp; /* We also want everything to be incremented by one. In a C program, counting starts with zero, so 'gal_match_sort_based' will return indexs starting from zero. But outside a C program, on the command-line people expect counting to start from 1 (for example with AWK). */ uf = (u=mcols->array) + tmp->size; do (*u)++; while(++unext, GAL_TYPE_UINT32); uf = (u=tmp->array) + tmp->size; do (*u)++; while(++usize=tmp->dsize[0]=nummatched; tmp->next=mcols->next->next; gal_data_free(mcols->next); mcols->next=tmp; /* Correct the comments. */ free(mcols->comment); mcols->comment="Row index in first catalog (counting from 1)."; free(mcols->next->comment); mcols->next->comment="Row index in second catalog (counting " "from 1)."; /* Write them into the table. */ gal_table_write(mcols, NULL, NULL, p->cp.tableformat, p->logname, "LOG_INFO", 0, 0); /* Set the comment pointer to NULL: they weren't allocated. */ mcols->comment=NULL; mcols->next->comment=NULL; /* Inform the user that a log-file has been created. */ if(!p->cp.quiet) fprintf(stdout, " - Output (log): %s\n", p->logname); } /* Clean up. */ gal_list_data_free(mcols); /* Print the number of matches if not in quiet mode. */ if(!p->cp.quiet) { if(p->out2name && strcmp(p->out1name, p->out2name)) fprintf(stdout, " - Output-1: %s\n - Output-2: %s\n", p->out1name, p->out2name); else fprintf(stdout, " - Output: %s\n", p->out1name); } } /*******************************************************************/ /************* Top-level function *************/ /*******************************************************************/ void match(struct matchparams *p) { /* Do the correct type of matching. */ switch(p->mode) { case MATCH_MODE_CATALOG: match_catalog(p); break; case MATCH_MODE_WCS: error(EXIT_FAILURE, 0, "matching by WCS is not yet supported"); default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to fix " "the problem: %d is not a recognized mode", __func__, PACKAGE_BUGREPORT, p->mode); } /* Write Match's configuration as keywords into the first extension of the output. */ if(gal_fits_name_is_fits(p->out1name)) { gal_fits_key_write_filename("input1", ( p->input1name ? p->input1name : "Standard input" ), &p->cp.ckeys, 1, p->cp.quiet); gal_fits_key_write_filename("input2", p->input2name?p->input2name:"--coord", &p->cp.ckeys, 1, p->cp.quiet); gal_fits_key_write(p->cp.ckeys, p->out1name, "0", "NONE", 1, 0); } } gnuastro-0.22/bin/match/main.h0000644000175000017500000000755314551337306011742 /********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include #include /* Progarm names. */ #define PROGRAM_NAME "Match" /* Program full name. */ #define PROGRAM_EXEC "astmatch" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Internal constants */ #define MATCH_KDTREE_ROOT_KEY "KDTROOT" enum match_modes { MATCH_MODE_INVALID, /* ==0 by default. */ MATCH_MODE_WCS, MATCH_MODE_CATALOG, }; enum kdtree_modes { MATCH_KDTREE_INVALID, /* ==0 by default. */ MATCH_KDTREE_BUILD, MATCH_KDTREE_INTERNAL, MATCH_KDTREE_DISABLE, MATCH_KDTREE_FILE, }; /* Main program parameters structure */ struct matchparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ char *input1name; /* First input filename. */ char *input2name; /* Second input filename. */ char *hdu2; /* Second input's HDU. */ gal_data_t *ccol1; /* Array of first input column names. */ gal_data_t *ccol2; /* Array of second input column names. */ gal_data_t *coord; /* Array of manual coordinate values. */ gal_data_t *outcols; /* Array of second input column names. */ gal_data_t *aperture; /* Acceptable matching aperture. */ char *kdtree; /* The mode to use k-d tree mode. */ char *kdtreehdu; /* k-d tree HDU when its a (FITS) file. */ uint8_t logasoutput; /* Don't rearrange inputs, out is log. */ uint8_t notmatched; /* Output is rows that don't match. */ /* Internal */ int mode; /* Mode of operation: image or catalog. */ gal_data_t *cols1; /* Column values of first input. */ gal_data_t *cols2; /* Column values of second input. */ gal_list_str_t *acols; /* Output columns from first input. */ gal_list_str_t *bcols; /* Output columns from second input. */ size_t anum; /* Number of columns in first input. */ size_t bnum; /* Number of columns in second input. */ char *logname; /* Name of log file. */ char *out1name; /* Name of first matched output. */ char *out2name; /* Name of second matched output. */ gal_list_str_t *stdinlines; /* Lines given by Standard input. */ int kdtreemode; /* The k-d tree mode. */ gal_data_t *kdtreedata; /* The k-d tree data. */ size_t kdtreeroot; /* The root node of the k-d tree. */ /* Output: */ time_t rawtime; /* Starting time of the program. */ }; #endif gnuastro-0.22/bin/match/authors-cite.h0000644000175000017500000000302014551337306013406 /********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/match/args.h0000644000175000017500000001156314551337306011746 /********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Input file parameters. */ { "hdu2", UI_KEY_HDU2, "STR/INT", 0, "Extension name or number of second input.", GAL_OPTIONS_GROUP_INPUT, &p->hdu2, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Outputs. */ { "logasoutput", UI_KEY_LOGASOUTPUT, 0, 0, "No rearranging of inputs, output is log file", GAL_OPTIONS_GROUP_OUTPUT, &p->logasoutput, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "notmatched", UI_KEY_NOTMATCHED, 0, 0, "Output is rows that don't match.", GAL_OPTIONS_GROUP_OUTPUT, &p->notmatched, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "outcols", UI_KEY_OUTCOLS, "STR", 0, "Out cols in CSV, 'a': first, 'b': second input.", GAL_OPTIONS_GROUP_OUTPUT, &p->outcols, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, /* Catalog matching. */ { 0, 0, 0, 0, "Catalog matching", UI_GROUP_CATALOGMATCH }, { "ccol1", UI_KEY_CCOL1, "STR[,STR]", 0, "Column name/number of first catalog.", UI_GROUP_CATALOGMATCH, &p->ccol1, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, { "ccol2", UI_KEY_CCOL2, "STR[,STR]", 0, "Column name/number of second catalog.", UI_GROUP_CATALOGMATCH, &p->ccol2, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, { "coord", UI_KEY_COORD, "FLT[,FLT]", 0, "Manually input coordiantes.", UI_GROUP_CATALOGMATCH, &p->coord, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "aperture", UI_KEY_APERTURE, "FLT[,...]", 0, "Acceptable aperture for matching.", UI_GROUP_CATALOGMATCH, &p->aperture, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "kdtree", UI_KEY_KDTREE, "STR", 0, "build, internal, disable, CUSTOM-FITS-FILE.", UI_GROUP_CATALOGMATCH, &p->kdtree, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, }, { "kdtreehdu", UI_KEY_KDTREEHDU, "STR", 0, "HDU of k-d tree when --kdtree=FILE.fits.", UI_GROUP_CATALOGMATCH, &p->kdtreehdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, }, {0} }; /* Define the child argp structure ------------------------------- NOTE: these parts can be left untouched.*/ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/match/ui.h0000644000175000017500000000362114551337306011423 /********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Group codes. */ enum program_args_groups { UI_GROUP_CATALOGMATCH = GAL_OPTIONS_GROUP_AFTER_COMMON, }; /* Available letters for short options: b e f g i j m n p r s t u v w x y z A B E G J L O Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_HDU2 = 'H', UI_KEY_APERTURE = 'a', UI_KEY_LOGASOUTPUT = 'l', UI_KEY_CCOL1 = 'c', UI_KEY_CCOL2 = 'C', UI_KEY_COORD = 'd', UI_KEY_KDTREE = 'k', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_NOTMATCHED = 1000, UI_KEY_OUTCOLS, UI_KEY_KDTREEHDU, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct matchparams *p); void ui_free_report(struct matchparams *p, struct timeval *t1); #endif gnuastro-0.22/bin/match/match.h0000644000175000017500000000206214551337306012100 /********************************************************************* Match - A program to match catalogs and WCS warps Match is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MATCH_H #define MATCH_H void match(struct matchparams *p); #endif gnuastro-0.22/bin/mkcatalog/0000755000175000017500000000000014557514202011557 5gnuastro-0.22/bin/mkcatalog/Makefile.am0000644000175000017500000000327114557211443013537 ## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2015-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astmkcatalog ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astmkcatalog_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astmkcatalog_SOURCES = main.c ui.c mkcatalog.c columns.c upperlimit.c parse.c EXTRA_DIST = main.h authors-cite.h args.h ui.h mkcatalog.h columns.h \ upperlimit.h parse.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astmkcatalog.conf gnuastro-0.22/bin/mkcatalog/astmkcatalog.conf0000644000175000017500000000255514551337306015031 # Default parameters (System) for MakeCatalog. # MakeCatalog is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astmkcatalog --help # Full list of options, short doc. # $ astmkcatalog -P # Print all options and used values. # $ info astmkcatalog # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: hdu OBJECTS valueshdu INPUT-NO-SKY clumpshdu CLUMPS skyhdu SKY stdhdu SKY_STD zeropoint 0.0 sigmaclip 3,0.2 # Output: sfmagnsigma 3 sfmagarea 100 # Upper limit magnitude: upnum 100 upsigmaclip 3,0.2 upnsigma 1 # Settings for other columns: spatialresolution 2 # Catalog columns: gnuastro-0.22/bin/mkcatalog/Makefile.in0000644000175000017500000034115214557513747013567 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astmkcatalog$(EXEEXT) subdir = bin/mkcatalog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astmkcatalog_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ mkcatalog.$(OBJEXT) columns.$(OBJEXT) upperlimit.$(OBJEXT) \ parse.$(OBJEXT) astmkcatalog_OBJECTS = $(am_astmkcatalog_OBJECTS) am__DEPENDENCIES_1 = astmkcatalog_DEPENDENCIES = \ $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/columns.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/mkcatalog.Po ./$(DEPDIR)/parse.Po \ ./$(DEPDIR)/ui.Po ./$(DEPDIR)/upperlimit.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astmkcatalog_SOURCES) DIST_SOURCES = $(astmkcatalog_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib astmkcatalog_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astmkcatalog_SOURCES = main.c ui.c mkcatalog.c columns.c upperlimit.c parse.c EXTRA_DIST = main.h authors-cite.h args.h ui.h mkcatalog.h columns.h \ upperlimit.h parse.h dist_sysconf_DATA = astmkcatalog.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/mkcatalog/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/mkcatalog/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astmkcatalog$(EXEEXT): $(astmkcatalog_OBJECTS) $(astmkcatalog_DEPENDENCIES) $(EXTRA_astmkcatalog_DEPENDENCIES) @rm -f astmkcatalog$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astmkcatalog_OBJECTS) $(astmkcatalog_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/columns.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkcatalog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/upperlimit.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/columns.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/mkcatalog.Po -rm -f ./$(DEPDIR)/parse.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f ./$(DEPDIR)/upperlimit.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/columns.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/mkcatalog.Po -rm -f ./$(DEPDIR)/parse.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f ./$(DEPDIR)/upperlimit.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/mkcatalog/main.c0000644000175000017500000000324214551337306012572 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" /* needs main.h. */ #include "mkcatalog.h" /* needs main.h. */ int main (int argc, char *argv[]) { struct timeval t1; struct mkcatalogparams p={{{0},0},0}; /* Set the starting time. */ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run MakeCatalog. */ mkcatalog(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully. */ return EXIT_SUCCESS; } gnuastro-0.22/bin/mkcatalog/ui.c0000644000175000017500000023214614551337306012272 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "mkcatalog.h" #include "ui.h" #include "columns.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will create a catalog from " "an input, labeled, and noise images.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct mkcatalogparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->poptions = program_options; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; /* Specific to this program. */ p->medstd = NAN; p->sfmagnsigma = NAN; p->sfmagarea = NAN; p->upnsigma = NAN; p->zeropoint = NAN; p->sigmaclip[0] = NAN; p->sigmaclip[1] = NAN; p->pixelarcsecsq = NAN; p->upsigmaclip[0] = NAN; p->upsigmaclip[1] = NAN; p->checkuplim[0] = GAL_BLANK_INT32; p->checkuplim[1] = GAL_BLANK_INT32; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_IGNORECASE: case GAL_OPTIONS_KEY_WORKOVERCH: case GAL_OPTIONS_KEY_STDINTIMEOUT: case GAL_OPTIONS_KEY_INTERPNUMNGB: case GAL_OPTIONS_KEY_INTERPONLYBLANK: cp->coptions[i].flags=OPTION_HIDDEN; cp->coptions[i].mandatory=GAL_OPTIONS_NOT_MANDATORY; break; case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct mkcatalogparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(p->objectsfile) argp_error(state, "only one argument (input file) should be given"); else if(arg[0]!='\0') p->objectsfile=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /* Read the user's desired columns. Because the types of these options are 'GAL_TYPE_INVALID', this function will not be called when printing the full list of parameters and their values. */ void * ui_column_codes_ll(struct argp_option *option, char *arg, char *filename, size_t lineno, void *params) { struct mkcatalogparams *p=(struct mkcatalogparams *)params; /* These options don't take arguments on the command-line but in the configuration files they can take values of 0 or 1. In the latter case, the column shouldn't be added if the value is 0. */ if(arg) { if( arg[0]=='0' && arg[1]=='\0' ) return NULL; else if ( !(arg[0]=='1' && arg[1]=='\0') ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' is not a " "valid value to the '%s' option: ('%s').\n\n'%s' " "is an on/off option specifying if you want this " "column in the output catalog, it doesn't take any " "arguments. In a configuration file, it can only " "take a value of '0' (to be ignored) or '1'", arg, option->name, option->doc, option->name); } /* The user wants this column, so add it to the list. Note that the 'ids' column means three columns. */ if(option->key==UI_KEY_IDS) { gal_list_i32_add(&p->columnids, UI_KEY_OBJID); gal_list_i32_add(&p->columnids, UI_KEY_HOSTOBJID); gal_list_i32_add(&p->columnids, UI_KEY_IDINHOSTOBJ); } else gal_list_i32_add(&p->columnids, option->key); /* Return NULL */ return NULL; } /* Prepare the upper-limit distribution parameters. */ void * ui_check_upperlimit(struct argp_option *option, char *arg, char *filename, size_t lineno, void *params) { size_t i; char *str; double *d; gal_data_t *raw; struct mkcatalogparams *p=(struct mkcatalogparams *)params; /* Write. */ if(lineno==-1) { if(p->checkuplim[1]==GAL_BLANK_INT32) { if( asprintf(&str, "%d", p->checkuplim[0])<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else if( asprintf(&str, "%d,%d", p->checkuplim[0], p->checkuplim[1])<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); return str; } /* Read */ else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Read the list of numbers as an array. */ raw=gal_options_parse_list_of_numbers(arg, filename, lineno, GAL_TYPE_FLOAT64); /* Make sure there is at most only two numbers given. */ if(raw->size>2) error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' (value to " "'--%s') contains %zu numbers, but only one or two " "are acceptable.\n\n" "With this option MakeCatalog will write all the " "positions and values of the random distribution " "for one particular labeled region into a table. " "The given value(s) is(are) the label " "identifier.\n\n" "With one value the distribution for an object will " "be printed: the givne number will be interpretted " "as the requested object's label. With two values, " "the distribution for a specific clump will be " "written. The first will be interpretted as the " "clump's host object label and the second as the " "clump's label within the object", arg, option->name, raw->size); /* Make sure the given values are integers and that they are larger than zero. */ d=raw->array; for(i=0;isize;++i) { if( ceil(d[i]) != d[i]) error_at_line(EXIT_FAILURE, 0, filename, lineno, "%g (value " "number %zu given to '--%s') is not an " "integer. The value(s) to this option are " "object/clump labels/identifiers, so they must " "be integers", d[i], i+1, option->name); if( d[i]<=0 ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "%g (value " "number %zu given to '--%s') is not positive. " "The value(s) to this option are object/clump " "labels/identifiers, so they must be positive " "integers", d[i], i+1, option->name); } /* Write the values in. */ p->checkuplim[0] = d[0]; p->checkuplim[1] = raw->size==2 ? d[1] : GAL_BLANK_INT32; /* For no un-used variable warning. This function doesn't need the pointer.*/ return NULL; } } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct mkcatalogparams *p) { float tmp; double *darr; char *tailptr; size_t i, one=1; gal_list_i32_t *colcode; /* If an upper-limit check table is requested with a specific clump, but no clump catalog has been requested, then abort and inform the user. */ if( p->checkuplim[1]!=GAL_BLANK_INT32 && p->clumpscat==0 ) error(EXIT_FAILURE, 0, "no clumps catalog is requested, hence " "'--checkuplim' is only available for objects (one value " "must be given to it).\n\n" "To ask for a clumps catalog, please append '--clumpscat' to " "the command calling MakeCatalog.\n\n" "If you want the upperlimit check table for an object, only " "give one value (the object's label) to '--checkuplim'."); /* See if '--skyin' is a filename or a value. When the string is ONLY a number (and nothing else), 'tailptr' will point to the end of the string ('\0'). */ if(p->skyfile) { tmp=strtod(p->skyfile, &tailptr); if(*tailptr=='\0') { /* Allocate the data structure. */ p->sky=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); /* Write the value inside it. */ *((float *)(p->sky->array))=tmp; } } /* Similar to the case for Sky above. */ if(p->stdfile) { tmp=strtod(p->stdfile, &tailptr); if(*tailptr=='\0') { /* Allocate the data structure. */ p->std=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); /* Write the value inside it. */ *((float *)(p->std->array))=tmp; } } /* Make sure that '--fracmax' is given if necessary and that the fracsum values are less than one. */ for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next) if( (colcode->v==UI_KEY_FRACMAX1AREA || colcode->v==UI_KEY_FRACMAX2AREA) && p->fracmax==NULL ) error(EXIT_FAILURE, 0, "please specify your required fractions for " "'--fracmaxarea' using the '--fracmax' option (for example " "'--fracmax=0.25,0.75' for two columns)"); if(p->fracmax) { /* Currently only 2 fracsums are accepted. */ if(p->fracmax->size>2) error(EXIT_FAILURE, 0, "%zu values given to '--fracmax', only two " "values are currently supported", p->fracmax->size); /* Check the values. */ darr=p->fracmax->array; for(i=0;ifracmax->size;++i) if(darr[i]<=0.0f || darr[i]>=1.0f) error(EXIT_FAILURE, 0, "%g is not acceptable for '--fracmax', " "values should be larger than 0 and less than 1", darr[i]); /* If a second fracum column is necessary, make sure two values are given to --fracmax. */ for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next) if(colcode->v==UI_KEY_FRACMAX2AREA && p->fracmax->size==1) error(EXIT_FAILURE, 0, "only one value given to '--fracmax', " "but '--fracmaxarea2' was requested! You need to give " "the requested fraction as a second value to '--fracmax', " "separated by a comma (,)"); } } static void ui_check_options_and_arguments(struct mkcatalogparams *p) { /* Make sure the main input file name (for the object labels) was given and if it was a FITS file, that a HDU is also given. */ if(p->objectsfile) { if( gal_fits_file_recognized(p->objectsfile) && p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified. When the input is a " "FITS file, a HDU must also be specified, you can use the " "'--hdu' ('-h') option and give it the HDU number (starting " "from zero), extension name, or anything acceptable by " "CFITSIO"); } else error(EXIT_FAILURE, 0, "no input file is specified"); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ /* If the user hasn't explicitly specified a filename for input, MakeCatalog will use other given file names. */ static void ui_set_filenames(struct mkcatalogparams *p) { p->usedclumpsfile = p->clumpsfile ? p->clumpsfile : p->objectsfile; p->usedvaluesfile = p->valuesfile ? p->valuesfile : p->objectsfile; p->usedskyfile = ( p->skyfile ? p->skyfile : (p->valuesfile ? p->valuesfile : p->objectsfile) ); p->usedstdfile = ( p->stdfile ? p->stdfile : (p->valuesfile ? p->valuesfile : p->objectsfile) ); } /* The clumps and objects images must be integer type, so we'll use this function to avoid having to write the error message two times. */ static void ui_check_type_int(char *filename, char *hdu, uint8_t type) { if( type==GAL_TYPE_FLOAT32 || type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s (hdu: %s): type %s not acceptable as " "labels input. labeled images must have an integer datatype.\n\n" "If you are sure the extension contains only integer values but " "it is just stored in a floating point container, you can " "put it in an integer container with Gnuastro's Arithmetic " "program using this command:\n\n" " $ astarithmetic %s int32 -h%s", filename, hdu, gal_type_name(type, 1), filename, hdu); } /* If a WCS structure is present, then read its basic information to use in the table meta-data. */ static void ui_wcs_info(struct mkcatalogparams *p) { char *c; size_t i; /* Read the WCS meta-data. */ p->objects->wcs=gal_wcs_read(p->objectsfile, p->cp.hdu, p->cp.wcslinearmatrix, 0, 0, &p->objects->nwcs, "--hdu"); /* Read the basic WCS information. */ if(p->objects->wcs) { /* Allocate space for the array of strings. */ errno=0; p->ctype=malloc(p->objects->ndim * sizeof *p->ctype); if(p->ctype==NULL) error(EXIT_FAILURE, 0, "%s: %zu bytes for 'p->ctype'", __func__, p->objects->ndim * sizeof *p->ctype); /* Fill in the values. */ for(i=0;iobjects->ndim;++i) { /* CTYPE might contain '-' characters, we just want the first non-dash characters. The loop will either stop either at the end or where there is a dash. So we can just replace it with an end-of-string character. */ gal_checkset_allocate_copy(p->objects->wcs->ctype[i], &p->ctype[i]); c=p->ctype[i]; while(*c!='\0' && *c!='-') ++c; *c='\0'; } } } /* When the number of clumps is not specified a priori (through the 'NUMLABS' keyword in the clumps array, we need to map the original labels to new labels that start counting from one and are congtiguous. */ static size_t ui_num_clumps_orig_labs(struct mkcatalogparams *p) { size_t ncinobj; gal_list_i32_t *tmp, **origclumplist; int32_t olab, **origclpid, *c=p->clumps->array; size_t i, j, numclumps=0, nobjpone=p->numobjects+1; int32_t *o=p->objects->array, *of=o+p->objects->size; /* Allocate array of lists and arrays to keep the unique labels within each object. The list is used in the first run and the array is later filled based on the list.*/ errno=0; origclumplist=calloc(nobjpone, sizeof *origclumplist); if(origclumplist==NULL) error(EXIT_FAILURE, 0, "%s: couldn't allocate %zu bytes for " "'origclumplist'", __func__, nobjpone * sizeof *origclumplist); errno=0; origclpid=calloc(nobjpone, sizeof *origclpid); if(origclpid==NULL) error(EXIT_FAILURE, 0, "%s: couldn't allocate %zu bytes for " "'origclpid'", __func__, nobjpone * sizeof *origclpid); p->origclpid=origclpid; /* To avoid 'p->' in the lines below. */ /* Go over each pixel and find the list of original clump labels. */ do { /* Do the steps if we are on a clump. */ if(*o>0 && *c>0) { /* See if the label has already been found. */ olab = p->outlabsinv ? p->outlabsinv[*o] : *o; for(tmp=origclumplist[olab];tmp!=NULL;tmp=tmp->next) if(tmp->v==*c) break; /* When it wasn't found, 'tmp==NULL'. */ if(tmp==NULL) { ++numclumps; gal_list_i32_add(&origclumplist[olab], *c); } } /* Increment the clumps pointer.*/ ++c; } while(++onumobjects+1;++i) { printf("list%zu: ", i); for(tmp=origclumplist[i];tmp!=NULL;tmp=tmp->next) printf("%d%s", tmp->v, tmp->next?" ":""); printf("\n"); } */ /* Build a separate array of original labels for each objects. */ for(i=1;inumobjects+1;++i) { /* Find the number of clumps in this object and allocate. */ ncinobj=gal_list_i32_number(origclumplist[i]); origclpid[i]=gal_pointer_allocate(GAL_TYPE_INT32, ncinobj+1, 0, __func__, "origclpid"); /* Put the list into the array in reverse because it was filled as last-in-last-out. We are also setting the last element to blank so we can parse through the labels when necessary. */ j=ncinobj; origclpid[i][j--]=GAL_BLANK_INT32; for(tmp=origclumplist[i];tmp!=NULL;tmp=tmp->next) origclpid[i][j--]=tmp->v; } /* For a check of the array. for(i=1;inumobjects+1;++i) if(i==9) { printf("arr%zu: ", i); for(j=0; origclpid[i][j]!=GAL_BLANK_INT32; ++j) printf("%d%s", origclpid[i][j], origclpid[i][j+1]==GAL_BLANK_INT32?"":" "); printf("\n"); } */ /* Clean up and return the total number of clumps. */ for(i=1;inumobjects;++i) gal_list_i32_free(origclumplist[i]); free(origclumplist); return numclumps; } static size_t ui_num_clumps(struct mkcatalogparams *p) { size_t i, numclumps=0; int32_t olab, *c=p->clumps->array; int32_t *o=p->objects->array, *of=o+p->objects->size; /* Count the total number of clumps and extract the original labels within the clumps into an array ('p->origclpid'). */ numclumps=ui_num_clumps_orig_labs(p); /* Re-write the clump values so their numbering is contiguous (this is assumed during the later steps). */ o=p->objects->array; c=p->clumps->array; do { /* Do the steps if we are on a clump. */ if(*o>0 && *c>0) { olab = p->outlabsinv ? p->outlabsinv[*o] : *o; for(i=0;p->origclpid[olab][i]!=GAL_BLANK_INT32;++i) if(p->origclpid[olab][i]==*c) { *c=i+1; break; } } /* Increment the clumps pointer.*/ ++c; } while(++ocp.keepinputdir; p->cp.keepinputdir = p->cp.output ? 1 : 0; basename = p->cp.output ? p->cp.output : p->objectsfile; checkname=gal_checkset_automatic_output(&p->cp, basename, "-clumps-relab.fits"); gal_fits_img_write(p->clumps, checkname, NULL, PROGRAM_STRING); p->cp.keepinputdir=keepinputdir; */ /* Return the number of clumps. */ return numclumps; } /* To make the catalog processing more scalable (and later allow for over-lappping regions), we will define a tile for each object. */ static void ui_one_tile_per_object_correct_numobjects(struct mkcatalogparams *p) { size_t ndim=p->objects->ndim; uint8_t *rarray=NULL; int32_t *l, *lf, *start; gal_data_t *rowsremove=NULL; size_t i, j, d, no, *min, *max, exists, width=2*ndim; size_t *minmax=gal_pointer_allocate(GAL_TYPE_SIZE_T, width*p->numobjects, 0, __func__, "minmax"); size_t *coord=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "coord"); /* Initialize the minimum and maximum position for each tile/object. So, we'll initialize the minimum coordinates to the maximum possible 'size_t' value (in 'GAL_BLANK_SIZE_T') and the maximums to zero. */ for(i=0;inumobjects;++i) for(d=0;dobjects->array; lf=(l=p->objects->array)+p->objects->size; do { /* Small sanity check: the objects image shouldn't have negative values (can happen when the user gives a clump image). */ if(*l!=GAL_BLANK_INT32 && *l<0) error(EXIT_FAILURE, 0, "the main labeled image ('OBJECTS' HDU " "when using Segment), shouldn't contain negative values. " "This can happen when you mistakenly give Segment's " "clumps as the main input labeled image. If you want to " "treat clumps as objects, please use 'astarithmetic' to " "convert all negative pixels to 0 before calling " "MakeCatalog. For example this command: " "'astarithmetic file.fits -hCLUMPS set-i i i 0 lt " "0 where'. For this scenario, a better solution is to " "only keep the clumps and give them each a separate " "label with a command like this: 'astarithmetic file.fits " "-hCLUMPS set-i i i 0 gt 2 connected-components'"); /* We are on an object. */ if(*l>0) { /* Get the coordinates of this pixel. */ gal_dimension_index_to_coord(l-start, ndim, p->objects->dsize, coord); /* Check to see this coordinate is the smallest/largest found so far for this label. Note that labels start from 1, while indexs here start from zero. */ min = &minmax[ (*l-1) * width ]; max = &minmax[ (*l-1) * width + ndim ]; for(d=0;d max[d] ) max[d] = coord[d]; } } } while(++lnumobjects;++i) { /* Make sure a pixel with this label exists in all dimensions. */ exists=0; for(d=0;dinbetweenints) minmax[ i * width + d ] = 0; } else { /* Write over the blank elements when necessary (i!=j). When i==j, then these statements are redundant. */ minmax[no*width+d]=minmax[i*width+d]; minmax[no*width+ndim+d]=minmax[i*width+ndim+d]; /* Set the checked flag. */ exists=1; } /* If it does (or if the user wants to keep all integers), then increment the output counter.*/ if(p->inbetweenints || exists) ++no; else { /* If 'rarray' isn't defined yet, define it. */ if(rarray==NULL) { /* Note that by initializing with zeros, all (the possibly existing) previous rows that shouldn't be removed are flagged as zero in this array. */ rowsremove=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &p->numobjects, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); rarray=rowsremove->array; } rarray[i]=1; } } /* If 'rarray!=NULL', then there are elements to remove and we need to make some modifications/corrections. */ if(rarray) { /* Build an array to keep the real ID of each tile. */ j=0; p->outlabs=gal_pointer_allocate(GAL_TYPE_INT32, no, 0, __func__, "p->outlabs"); for(i=0;inumobjects;++i) if(rarray[i]==0) p->outlabs[j++]=i+1; /* Allocate an array for easy finding of the proper label and fill it with the new labels. This array should have an element for each of the original labels (that are not contiguous). */ if(p->clumpscat) { p->outlabsinv=gal_pointer_allocate(GAL_TYPE_UINT32, p->numobjects+1, 1, __func__, "p->outlabsinv"); for(i=0;ioutlabsinv[ p->outlabs[i] ] = i; } /* Correct numobjects and clean up. */ p->numobjects=no; gal_data_free(rowsremove); /* For a check: for(i=0;inumobjects;++i) printf("outlabs[%zu]: %d\n", i, p->outlabs[i]); */ } /* For a check. for(i=0;inumobjects;++i) printf("%zu: (%zu, %zu) --> (%zu, %zu)\n", p->outlabs ? p->outlabs[i] : i+1, minmax[i*width], minmax[i*width+1], minmax[i*width+2], minmax[i*width+3]); */ /* Make the tiles. */ p->tiles=gal_tile_series_from_minmax(p->objects, minmax, p->numobjects); /* Clean up. */ free(coord); free(minmax); } /* The only mandatory input is the objects image, so first read that and make sure its type is correct. */ static void ui_read_labels(struct mkcatalogparams *p) { gal_list_i32_t *colcode; gal_data_t *tmp, *keys=gal_data_array_calloc(2); /* Read it into memory. */ p->objects = gal_array_read_one_ch(p->objectsfile, p->cp.hdu, NULL, p->cp.minmapsize, p->cp.quietmmap, "--hdu"); p->objects->ndim=gal_dimension_remove_extra(p->objects->ndim, p->objects->dsize, NULL); /* Make sure it has an integer type. */ ui_check_type_int(p->objectsfile, p->cp.hdu, p->objects->type); /* Convert it to 'int32' type (if it already isn't). */ p->objects=gal_data_copy_to_new_type_free(p->objects, GAL_TYPE_INT32); /* Currently MakeCatalog is only implemented for 2D images or 3D cubes. */ if(p->objects->ndim!=2 && p->objects->ndim!=3) error(EXIT_FAILURE, 0, "%s (hdu %s) has %zu dimensions, MakeCatalog " "currently only supports 2D or 3D datasets", p->objectsfile, p->cp.hdu, p->objects->ndim); /* If a column needs a 3D input, do the check here. */ for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next) switch(colcode->v) { case UI_KEY_SUMINSLICE: case UI_KEY_SUMERRINSLICE: case UI_KEY_AREAINSLICE: case UI_KEY_SUMPROJINSLICE: case UI_KEY_AREAPROJINSLICE: case UI_KEY_SUMPROJERRINSLICE: case UI_KEY_AREAOTHERINSLICE: case UI_KEY_SUMOTHERINSLICE: case UI_KEY_SUMOTHERERRINSLICE: if(p->objects->ndim!=3) error(EXIT_FAILURE, 0, "%s (hdu %s) has %zu dimensions, but " "at least one requested column requires a 3D input " "(for example those ending with 'inslice', they are " "clearly marked with '[3D input]' in the output of " "'%s --help')", p->objectsfile, p->cp.hdu, p->objects->ndim, PROGRAM_EXEC); break; } /* See if the total number of objects is given in the header keywords. */ keys[0].name="NUMLABS"; keys[0].type=GAL_TYPE_SIZE_T; keys[0].array=&p->numobjects; gal_fits_key_read(p->objectsfile, p->cp.hdu, keys, 0, 0, "--hdu"); if(keys[0].status) /* status!=0: the key didn't exist. */ { /* Get the maximum of the labels.*/ tmp=gal_statistics_maximum(p->objects); p->numobjects=*((int32_t *)(tmp->array)); /*numobjects is int32_t.*/ /* In case the input is all blank, the maximum will be blank, so in effect, there we no objects. */ if(p->numobjects==GAL_BLANK_INT32) p->numobjects=0; gal_data_free(tmp); } /* If there were no objects in the input, then inform the user with an error (it is pointless to build a catalog). */ if(p->numobjects==0) error(EXIT_FAILURE, 0, "no object labels (non-zero and non-blank " "pixels) in %s (hdu %s). To make a catalog, labeled regions " "must be defined", p->objectsfile, p->cp.hdu); /* See if the labels image has blank pixels and set the flags appropriately. */ p->hasblank = gal_blank_present(p->objects, 1); /* Prepare WCS information for final table meta-data. */ ui_wcs_info(p); /* Make the tiles that cover each object and also correct the total number of objects based on the parsing of the image. */ ui_one_tile_per_object_correct_numobjects(p); /* Read the clumps array if necessary. */ if(p->clumpscat) { /* Make sure the HDU is also given. */ if(p->clumpshdu==NULL) error(EXIT_FAILURE, 0, "%s: no HDU/extension provided for the " "CLUMPS dataset. Please use the '--clumpshdu' option to " "give a specific HDU using its number (counting from zero) " "or name. If the dataset is in another file, please use " "'--clumpsfile' to give the filename. If you don't want any " "clumps catalog output, remove the '--clumpscat' option " "from the command-line or give it a value of zero in a " "configuration file", p->usedclumpsfile); /* Read the clumps image. */ p->clumps = gal_array_read_one_ch(p->usedclumpsfile, p->clumpshdu, NULL, p->cp.minmapsize, p->cp.quietmmap, "--clumpshdu"); p->clumps->ndim=gal_dimension_remove_extra(p->clumps->ndim, p->clumps->dsize, NULL); /* Check its size. */ if( gal_dimension_is_different(p->objects, p->clumps) ) error(EXIT_FAILURE, 0, "'%s' (hdu: %s) and '%s' (hdu: %s) have a" "different dimension/size", p->usedclumpsfile, p->clumpshdu, p->objectsfile, p->cp.hdu); /* Check its type. */ ui_check_type_int(p->usedclumpsfile, p->clumpshdu, p->clumps->type); p->clumps=gal_data_copy_to_new_type_free(p->clumps, GAL_TYPE_INT32); /* See if there are keywords to help in finding the number. */ keys[0].next=&keys[1]; keys[0].status=keys[1].status=0; keys[0].name="CLUMPSN"; keys[1].name="NUMLABS"; keys[0].type=GAL_TYPE_FLOAT32; keys[1].type=GAL_TYPE_SIZE_T; keys[0].array=&p->clumpsn; keys[1].array=&p->numclumps; gal_fits_key_read(p->usedclumpsfile, p->clumpshdu, keys, 0, 0, "--clumpshdu"); if(keys[0].status) p->clumpsn=NAN; if(keys[1].status) p->numclumps=ui_num_clumps(p); /* If there were no clumps, then free the clumps array and set it to NULL, so for the rest of the processing, MakeCatalog things that no clumps image was given. */ if(p->numclumps==0) { /* Just as a sanity check, see if there are any clumps (positive valued pixels) in the array. If there are, then 'NUMCLUMPS' wasn't set properly and we should abort with an error. */ tmp=gal_statistics_maximum(p->clumps); if( *((int32_t *)(p->clumps->array))>0 ) error(EXIT_FAILURE, 0, "%s (hdu: %s): the 'NUMCLUMPS' header " "keyword has a value of zero, but there are positive " "pixels in the array, showing that there are clumps in " "image. This is a wrong usage of the 'NUMCLUMPS' " "keyword. It must contain the total number of clumps " "(irrespective of how many objects there are). Please " "correct this issue and run MakeCatalog again", p->usedclumpsfile, p->clumpshdu); /* Since there are no clumps, we won't bother creating a clumps catalog and from this step onward, we'll act as if no clumps catalog was requested. In order to not confuse the user in the end, we'll print a warning first. */ fprintf(stderr, "WARNING: %s (hdu %s): there are no clumps " "in the image, therefore no clumps catalog will be " "created.\n", p->usedclumpsfile, p->clumpshdu); gal_data_free(p->clumps); p->clumps=NULL; } } /* Clean up. */ keys[0].name=keys[1].name=NULL; keys[0].array=keys[1].array=NULL; gal_data_array_free(keys, 2, 1); } /* See which inputs are necessary. Ultimate, there are only three extra inputs: a values image, a sky image and a sky standard deviation image. However, there are many raw column measurements. So to keep things clean, we'll just put a value of '1' in the three 'values', 'sky' and 'std' pointers everytime a necessary input is found. */ static void ui_necessary_inputs(struct mkcatalogparams *p, int *values, int *sky, int *std) { size_t i; /* Set necessary inputs based on options. */ if(p->forcereadstd) *std=1; if(p->upperlimit) *values=1; /* Go over all the object columns. Note that the objects and clumps (if the '--clumpcat' option is given) inputs are mandatory and it is not necessary to specify it here. */ for(i=0; ioiflag[i]) switch(i) { case OCOL_NUMALL: /* Only object labels. */ break; case OCOL_NUMALLXY: /* Only object labels. */ break; case OCOL_NUM: *values = 1; break; case OCOL_NUMXY: *values = 1; break; case OCOL_SUM: *values = 1; break; case OCOL_SUMP2: *values = 1; break; case OCOL_SUM_VAR: *values = *std = 1; break; case OCOL_SUM_VAR_NUM: *values = *std = 1; break; case OCOL_MEDIAN: *values = 1; break; case OCOL_MAXIMUM: *values = 1; break; case OCOL_SIGCLIPNUM: *values = 1; break; case OCOL_SIGCLIPMEDIAN: *values = 1; break; case OCOL_SIGCLIPMEAN: *values = 1; break; case OCOL_SIGCLIPSTD: *values = 1; break; case OCOL_VX: *values = 1; break; case OCOL_VY: *values = 1; break; case OCOL_VZ: *values = 1; break; case OCOL_VXX: *values = 1; break; case OCOL_VYY: *values = 1; break; case OCOL_VXY: *values = 1; break; case OCOL_MINVX: *values = 1; break; case OCOL_MAXVX: *values = 1; break; case OCOL_MINVY: *values = 1; break; case OCOL_MAXVY: *values = 1; break; case OCOL_MINVZ: *values = 1; break; case OCOL_MAXVZ: *values = 1; break; case OCOL_MINVNUM: *values = 1; break; case OCOL_MAXVNUM: *values = 1; break; case OCOL_SUMSKY: *sky = 1; break; case OCOL_SUMVAR: *std = 1; break; case OCOL_SUMWHT: *values = 1; break; case OCOL_NUMWHT: *values = 1; break; case OCOL_GX: /* Only object labels. */ break; case OCOL_GY: /* Only object labels. */ break; case OCOL_GZ: /* Only object labels. */ break; case OCOL_GXX: /* Only object labels. */ break; case OCOL_GYY: /* Only object labels. */ break; case OCOL_GXY: /* Only object labels. */ break; case OCOL_UPPERLIMIT_B: *values = 1; break; case OCOL_UPPERLIMIT_S: *values = 1; break; case OCOL_UPPERLIMIT_Q: *values = 1; break; case OCOL_UPPERLIMIT_SKEW: *values = 1; break; case OCOL_HALFMAXNUM: *values = 1; break; case OCOL_HALFMAXSUM: *values = 1; break; case OCOL_HALFSUMNUM: *values = 1; break; case OCOL_FRACMAX1NUM: *values = 1; break; case OCOL_FRACMAX1SUM: *values = 1; break; case OCOL_FRACMAX2NUM: *values = 1; break; case OCOL_FRACMAX2SUM: *values = 1; break; case OCOL_C_NUMALL: /* Only clump labels. */ break; case OCOL_C_NUM: *values = 1; break; case OCOL_C_SUM: *values = 1; break; case OCOL_C_VX: *values = 1; break; case OCOL_C_VY: *values = 1; break; case OCOL_C_VZ: *values = 1; break; case OCOL_C_GX: /* Only clump labels. */ break; case OCOL_C_GY: /* Only clump labels. */ break; case OCOL_C_GZ: /* Only clump labels. */ break; case OCOL_C_SUMWHT: *values = 1; break; case OCOL_C_NUMWHT: *values = 1; break; case OCOL_SUMINSLICE: *values = 1; break; case OCOL_NUMINSLICE: *values = 1; break; case OCOL_NUMALLINSLICE: /* Only object labels. */ break; case OCOL_SUMVARINSLICE: *values = *std = 1; break; case OCOL_SUMPROJINSLICE: *values = 1; break; case OCOL_NUMPROJINSLICE: *values = 1; break; case OCOL_NUMOTHERINSLICE: *values = 1; break; case OCOL_SUMOTHERINSLICE: *values = 1; break; case OCOL_SUMPROJVARINSLICE: *values = *std = 1; break; case OCOL_SUMOTHERVARINSLICE: *values = *std = 1; break; case OCOL_NUMALLOTHERINSLICE: /* Only object labels. */ break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code %zu is not a recognized " "intermediate OBJECT columns", __func__, PACKAGE_BUGREPORT, i); } /* Check the clump elements also. */ if(p->clumps) for(i=0; iciflag[i]) switch(i) { case CCOL_NUMALL: /* Only clump labels. */ break; case CCOL_NUMALLXY: /* Only clump labels. */ break; case CCOL_NUM: *values = 1; break; case CCOL_NUMXY: *values = 1; break; case CCOL_SUM: *values = 1; break; case CCOL_SUMP2: *values = 1; break; case CCOL_SUM_VAR: *values = *std = 1; break; case CCOL_SUM_VAR_NUM: *values = *std = 1; break; case CCOL_MEDIAN: *values = 1; break; case CCOL_MAXIMUM: *values = 1; break; case CCOL_SIGCLIPNUM: *values = 1; break; case CCOL_SIGCLIPMEDIAN: *values = 1; break; case CCOL_SIGCLIPMEAN: *values = 1; break; case CCOL_SIGCLIPSTD: *values = 1; break; case CCOL_RIV_NUM: /* Only clump labels. */ break; case CCOL_RIV_SUM: *values = 1; break; case CCOL_RIV_MIN: *values = 1; break; case CCOL_RIV_MAX: *values = 1; break; case CCOL_RIV_SUM_VAR: *values = *std = 1; break; case CCOL_VX: *values = 1; break; case CCOL_VY: *values = 1; break; case CCOL_VZ: *values = 1; break; case CCOL_VXX: *values = 1; break; case CCOL_VYY: *values = 1; break; case CCOL_VXY: *values = 1; break; case CCOL_MINVX: *values = 1; break; case CCOL_MINVY: *values = 1; break; case CCOL_MINVZ: *values = 1; break; case CCOL_MAXVX: *values = 1; break; case CCOL_MAXVY: *values = 1; break; case CCOL_MAXVZ: *values = 1; break; case CCOL_MINVNUM: *values = 1; break; case CCOL_MAXVNUM: *values = 1; break; case CCOL_SUMSKY: *sky = 1; break; case CCOL_SUMVAR: *std = 1; break; case CCOL_SUMWHT: *values = 1; break; case CCOL_NUMWHT: *values = 1; break; case CCOL_GX: /* Only clump labels. */ break; case CCOL_GY: /* Only clump labels. */ break; case CCOL_GZ: /* Only clump labels. */ break; case CCOL_GXX: /* Only clump labels. */ break; case CCOL_GYY: /* Only clump labels. */ break; case CCOL_GXY: /* Only clump labels. */ break; case CCOL_MINX: /* Only clump labels. */ break; case CCOL_MAXX: /* Only clump labels. */ break; case CCOL_MINY: /* Only clump labels. */ break; case CCOL_MAXY: /* Only clump labels. */ break; case CCOL_MINZ: /* Only clump labels. */ break; case CCOL_MAXZ: /* Only clump labels. */ break; case CCOL_UPPERLIMIT_B: *values = 1; break; case CCOL_UPPERLIMIT_S: *values = 1; break; case CCOL_UPPERLIMIT_Q: *values = 1; break; case CCOL_UPPERLIMIT_SKEW: *values = 1; break; case CCOL_HALFMAXNUM: *values = 1; break; case CCOL_HALFMAXSUM: *values = 1; break; case CCOL_HALFSUMNUM: *values = 1; break; case CCOL_FRACMAX1NUM: *values = 1; break; case CCOL_FRACMAX1SUM: *values = 1; break; case CCOL_FRACMAX2NUM: *values = 1; break; case CCOL_FRACMAX2SUM: *values = 1; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code %zu is not a recognized " "intermediate CLUMP column", __func__, PACKAGE_BUGREPORT, i); } } /* When the Sky and its standard deviation are given as tiles, we need to define a tile structure. */ static void ui_preparation_check_size_read_tiles(struct mkcatalogparams *p, gal_data_t *in, char *filename, char *hdu) { struct gal_tile_two_layer_params *tl=&p->cp.tl; /* See if we should treat this dataset as tile values or not. */ if( gal_dimension_is_different(p->objects, in) ) { /* The 'tl' structure is initialized here. But this function may be called multiple times. So, first check if the 'tl' structure has already been initialized and if so, don't repeat it. */ if(tl->ndim==0) { gal_tile_full_sanity_check(p->objectsfile, p->cp.hdu, p->objects, tl); gal_tile_full_two_layers(p->objects, tl); gal_tile_full_permutation(tl); } /* See if the size of the 'in' dataset corresponds to the tessellation. */ if(in->size!=tl->tottiles) error(EXIT_FAILURE, 0, "%s (hdu: %s): doesn't have the right " "size (%zu elements or pixels).\n\n" "It must either be the same size as '%s' (hdu: '%s'), or " "it must have the same number of elements as the total " "number of tiles in the tessellation (%zu). In the latter " "case, each pixel is assumed to be a fixed value for a " "complete tile.\n\n" "Run with '-P' to see the (tessellation) options/settings " "and their values). For more information on tessellation in " "Gnuastro, please run the following command (use the arrow " "keys for up and down and press 'q' to return to the " "command-line):\n\n" " $ info gnuastro tessellation", filename, hdu, in->size, p->objectsfile, p->cp.hdu, tl->tottiles); } } /* Subtract 'sky' from the input dataset depending on its size (it may be the whole array or a tile-values array).. */ static void ui_subtract_sky(struct mkcatalogparams *p) { size_t tid; gal_data_t *tile; float *s, *f, *ff, *skyarr=p->sky->array; struct gal_tile_two_layer_params *tl=&p->cp.tl; /* It is the same size as the input or a single value. */ if( gal_dimension_is_different(p->values, p->sky)==0 || p->sky->size==1) { s=p->sky->array; ff = (f=p->values->array) + p->values->size; if(p->sky->size==1) { if(*s!=0.0) do *f-=*s; while(++ftottiles==p->sky->size ) { /* Go over all the tiles. */ for(tid=0; tidtottiles; ++tid) { /* For easy reading. */ tile=&tl->tiles[tid]; /* Subtract the Sky value from the input image. */ GAL_TILE_PARSE_OPERATE(tile, p->values, 1, 0, {*o-=skyarr[tid];}); } } /* The size must have been checked before, so if control reaches here, we have a bug! */ else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. For some reason, the size doesn't match", __func__, PACKAGE_BUGREPORT); } static void ui_preparations_read_inputs(struct mkcatalogparams *p) { size_t one=1; gal_data_t *zero; gal_data_t *column; int need_values=0, need_sky=0, need_std=0; /* See which inputs are necessary. */ ui_necessary_inputs(p, &need_values, &need_sky, &need_std); /* If the values dataset is necessary, read it in and set the units of the columns from it (if it has any). */ if(need_values) { /* Make sure the HDU is also given. */ if(p->valueshdu==NULL) error(EXIT_FAILURE, 0, "%s: no HDU/extension provided for the " "VALUES dataset. Atleast one column needs this dataset. " "Please use the '--valueshdu' option to give a specific HDU " "using its number (counting from zero) or name. If the " "dataset is in another file, please use '--valuesfile' to " "give the filename", p->usedvaluesfile); /* Read the values dataset. */ p->values=gal_array_read_one_ch_to_type(p->usedvaluesfile, p->valueshdu, NULL, GAL_TYPE_FLOAT32, p->cp.minmapsize, p->cp.quietmmap, "--valueshdu"); p->values->ndim=gal_dimension_remove_extra(p->values->ndim, p->values->dsize, NULL); /* Make sure it has the correct size. */ if( gal_dimension_is_different(p->objects, p->values) ) error(EXIT_FAILURE, 0, "'%s' (hdu: %s) and '%s' (hdu: %s) have a" "different dimension/size", p->usedvaluesfile, p->valueshdu, p->objectsfile, p->cp.hdu); /* Initially, 'p->hasblank' was set based on the objects image, but it may happen that the objects image only has zero values for blank pixels, so we'll also do a check on the input image. */ p->hasblank = gal_blank_present(p->values, 1); /* Reset the units of the value-based columns if the input dataset has defined units. */ if(p->values->unit) { for(column=p->objectcols; column!=NULL; column=column->next) if( !strcmp(column->unit, MKCATALOG_NO_UNIT) ) { free(column->unit); gal_checkset_allocate_copy(p->values->unit, &column->unit); } for(column=p->clumpcols; column!=NULL; column=column->next) if( !strcmp(column->unit, MKCATALOG_NO_UNIT) ) { free(column->unit); gal_checkset_allocate_copy(p->values->unit, &column->unit); } } } /* Read the Sky image and check its size. */ if(p->subtractsky || need_sky) { /* If it wasn't a number, read the dataset into memory. */ if(p->sky==NULL) { /* Make sure the HDU is also given. */ if(p->skyhdu==NULL) error(EXIT_FAILURE, 0, "%s: no HDU/extension provided for the " "SKY dataset. Atleast one column needs this dataset, or " "you have asked to subtract the Sky from the values.\n\n" "Please use the '--skyhdu' option to give a specific " "HDU using its number (counting from zero) or name. If " "the dataset is in another file, please use '--skyin' " "to give the filename", p->usedskyfile); /* Read the Sky dataset. */ p->sky=gal_array_read_one_ch_to_type(p->usedskyfile, p->skyhdu, NULL, GAL_TYPE_FLOAT32, p->cp.minmapsize, p->cp.quietmmap, "--skyhdu"); p->sky->ndim=gal_dimension_remove_extra(p->sky->ndim, p->sky->dsize, NULL); /* Check its size and prepare tile structure. */ ui_preparation_check_size_read_tiles(p, p->sky, p->usedskyfile, p->skyhdu); } /* Subtract the Sky value. */ if(p->subtractsky) ui_subtract_sky(p); } /* Read the Sky standard deviation dataset (if it wasn't already given as a number) and check its size. */ if(need_std && p->std==NULL) { /* Make sure the HDU is also given. */ if(p->stdhdu==NULL) error(EXIT_FAILURE, 0, "%s: no HDU/extension provided for the " "SKY STANDARD DEVIATION dataset.\n\n" "Atleast one column needs this dataset. Please use the " "'--stdhdu' option to give a specific HDU using its number " "(counting from zero) or name. If the dataset is in another " "file, please use '--stdin' to give the filename", p->usedstdfile); /* Read the Sky standard deviation image into memory. */ p->std=gal_array_read_one_ch_to_type(p->usedstdfile, p->stdhdu, NULL, GAL_TYPE_FLOAT32, p->cp.minmapsize, p->cp.quietmmap, "--stdhdu"); p->std->ndim=gal_dimension_remove_extra(p->std->ndim, p->std->dsize, NULL); /* Check its size and prepare tile structure. */ ui_preparation_check_size_read_tiles(p, p->std, p->usedstdfile, p->stdhdu); } /* Sanity checks on upper-limit measurements. */ if(p->upperlimit) { /* If an upperlimit check was requested, make sure the object number is not larger than the maximum number of labels. */ if(p->checkuplim[0] != GAL_BLANK_INT32 && p->checkuplim[0] > p->numobjects) error(EXIT_FAILURE, 0, "%d (object identifier for the " "'--checkuplim' option) is larger than the number of " "objects in the input labels (%zu)", p->checkuplim[0], p->numobjects); /* Read the mask file if it was given. */ if(p->upmaskfile) { /* Make sure the HDU for the mask image is given. */ if(p->upmaskhdu==NULL) error(EXIT_FAILURE, 0, "%s: no HDU/extension provided, please " "use the '--upmaskhdu' option to specify a specific HDU " "using its number (counting from zero) or name", p->upmaskfile); /* Read the mask image. */ p->upmask = gal_array_read_one_ch(p->upmaskfile, p->upmaskhdu, NULL, p->cp.minmapsize, p->cp.quietmmap, "--upmaskhdu"); p->upmask->ndim=gal_dimension_remove_extra(p->upmask->ndim, p->upmask->dsize, NULL); /* Check its size. */ if( gal_dimension_is_different(p->objects, p->upmask) ) error(EXIT_FAILURE, 0, "'%s' (hdu: %s) and '%s' (hdu: %s) " "have a different dimension/size", p->upmaskfile, p->upmaskhdu, p->objectsfile, p->cp.hdu); /* If it isn't an integer type, report an error. */ if( p->upmask->type==GAL_TYPE_FLOAT32 || p->upmask->type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s (hdu: %s) has a %s numerical data " "type. Only integer type inputs are acceptable as a " "mask. If the values are indeed integers, only placed " "in a floating point container, you can use Gnuastro's " "Arithmetic program to conver the numeric data type", p->upmaskfile, p->upmaskhdu, gal_type_name(p->upmask->type, 1)); /* Convert the mask to a uint8_t: with a 1 for all non-zero pixels and 0 for zero pixels. */ zero=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &one, NULL, 1, -1, 1, NULL, NULL, NULL); p->upmask=gal_arithmetic(GAL_ARITHMETIC_OP_NE, 1, GAL_ARITHMETIC_FLAGS_BASIC, p->upmask, zero); } } } /* The necessary keywords from the objects or clumps image were read when we were reading them. They were necessary during the pre-processing. Here, we'll read the image from */ static void ui_preparations_read_keywords(struct mkcatalogparams *p) { gal_data_t *tmp; float std, minstd; gal_data_t *keys=NULL; /* Set the counts-per-second correction. */ if(p->std) { if(p->std->size>1) { /* Read the keywords from the standard deviation image. */ keys=gal_data_array_calloc(2); keys[0].next=&keys[1]; keys[0].name="MINSTD"; keys[1].name="MEDSTD"; keys[0].type=GAL_TYPE_FLOAT32; keys[1].type=GAL_TYPE_FLOAT32; keys[0].array=&minstd; keys[1].array=&p->medstd; gal_fits_key_read(p->usedstdfile, p->stdhdu, keys, 0, 0, "--stdhdu"); /* If the two keywords couldn't be read. We don't want to slow down the user for the median (which needs sorting). So we'll just calculate it if '--forcereadstd' is called. However, we need the minimum for 'p->cpscorr'. */ if(keys[1].status) { if(p->forcereadstd) { tmp=gal_statistics_median(p->std, 0); p->medstd=*((float *)(tmp->array)); } else p->medstd=NAN; } if(keys[0].status) { /* Calculate the minimum STD. */ tmp=gal_statistics_minimum(p->std); minstd=*((float *)(tmp->array)); gal_data_free(tmp); /* If the units are in variance, then take the square root. */ if(p->variance) minstd=sqrt(minstd); } p->cpscorr = minstd>1 ? 1.0f : minstd; /* Clean up. */ keys[0].name=keys[1].name=NULL; keys[0].array=keys[1].array=NULL; gal_data_array_free(keys, 2, 1); } else { std=((float *)(p->std->array))[0]; p->cpscorr=std>1 ? 1.0f : std; } } } /* When both catalogs need to be made, we need a separator, the output names will either be built based on the input name or output name (if given). In both cases, the operations are the same, just the base name differs. So to keep things clean, we have defined this function. */ static void ui_preparations_both_names(struct mkcatalogparams *p) { char *basename, *suffix=".fits"; uint8_t keepinputdir=p->cp.keepinputdir; /* See below. */ /* Set the type ending. */ if(p->cp.output) { /* When the user has specified a name, any possible directories in that name must be respected. So we have kept the actual 'keepinputdir' value in a temporary variable above and set it to 1 only for this operation. Later we set it back to what it was. */ p->cp.keepinputdir=1; /* Set the base name (if necessary). */ basename = p->cp.output; /* FITS speicifc preparations. */ if( gal_fits_name_is_fits(p->cp.output) ) { /* The output file name that the user has given supersedes the 'tableformat' argument. In this case, the filename is a FITS file, so if 'tableformat' is a text file, we will change it to a default binary FITS table. */ if( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ) p->cp.tableformat=GAL_TABLE_FORMAT_BFITS; } } else { /* Note that the suffix is not used in the text table outputs, so it doesn't matter if the output table is not FITS. */ suffix="_cat.fits"; basename = p->objectsfile; } /* Set the final filename. If the output is a text file, we need two files. But when its a FITS file we want to make a multi-extension FITS file. */ if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT) { p->objectsout=gal_checkset_automatic_output(&p->cp, basename, "_o.txt"); p->clumpsout=gal_checkset_automatic_output(&p->cp, basename, "_c.txt"); } else { /* The output file is a FITS file (the 'p->cp.tableformat' has been set before), so a single file output is enough. If no output name has been given, then use automatic output. Otherwise, just check if the given name is writable. */ if(p->cp.output) { gal_checkset_allocate_copy(p->cp.output, &p->objectsout); gal_checkset_writable_remove(p->objectsout, p->objectsfile, 0, p->cp.dontdelete); } else p->objectsout=gal_checkset_automatic_output(&p->cp, basename, suffix); p->clumpsout=p->objectsout; } /* Revert 'keepinputdir' to what it was. */ p->cp.keepinputdir=keepinputdir; } /* Set the output name. */ static void ui_preparations_outnames(struct mkcatalogparams *p) { char *suffix; uint8_t keepinputdir=p->cp.keepinputdir; /* The process differs if an output filename has been given. */ if(p->cp.output) { /* If the output name is a FITS file, then 'gal_tableintern_check_fits_format' will see if the tableformat corresponds to a FITS table or not. If the output name isn't a FITS file then the current value of 'p->cp.tableformat' is irrelevant and it must be set to text. We use this value in the end to determine specific features. */ if( gal_fits_name_is_fits(p->cp.output) ) gal_tableintern_check_fits_format(p->cp.output, p->cp.tableformat); else p->cp.tableformat=GAL_TABLE_FORMAT_TXT; /* If a clumps image is present, then we have two outputs. */ if(p->clumps) ui_preparations_both_names(p); else { gal_checkset_writable_remove(p->cp.output, p->objectsfile, 0, p->cp.dontdelete); gal_checkset_allocate_copy(p->cp.output, &p->objectsout); } } else { /* Both clumps and object catalogs are necessary. */ if(p->clumps) ui_preparations_both_names(p); /* We only need one objects catalog. */ else { suffix = ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "_cat.txt" : "_cat.fits" ); p->objectsout=gal_checkset_automatic_output(&p->cp, p->objectsfile, suffix); } } /* If an upperlimit check image is requsted, then set its filename. */ if(p->checkuplim[0]!=GAL_BLANK_INT32) { /* See if the directory should be respected. */ p->cp.keepinputdir = p->cp.output ? 1 : p->cp.keepinputdir; /* Set the suffix. */ suffix = ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "_upcheck.txt" : "_upcheck.fits" ); /* Set the file name. */ p->upcheckout=gal_checkset_automatic_output(&p->cp, ( p->cp.output ? p->cp.output : p->objectsfile), suffix); /* Set 'keepinputdir' to what it was before. */ p->cp.keepinputdir=keepinputdir; } /* Just to avoid bugs ('p->cp.output' must no longer be used), we'll free it and set it to NULL.*/ free(p->cp.output); p->cp.output=NULL; } /* Sanity checks and preparations for the upper-limit magnitude. */ static void ui_preparations_upperlimit(struct mkcatalogparams *p) { size_t i, c=0; /* Check if the given range has the same number of elements as dimensions in the input. */ if(p->uprange) { for(i=0;p->uprange[i]!=-1;++i) ++c; if(c!=p->objects->ndim) error(EXIT_FAILURE, 0, "%zu values given to '--uprange', but " "input has %zu dimensions", c, p->objects->ndim); } /* Check the number of random samples. */ if( p->upnum < MKCATALOG_UPPERLIMIT_MINIMUM_NUM && p->cp.quiet==0 ) error(EXIT_SUCCESS, 0, "WARNING: %zu (value given to '--upnum') will " "produce unreliable upper-limit measurements. This warning will " "be printed for '--upnum' values less than %d. You can suppress " "this warning by adding '--quiet' to your command", p->upnum, MKCATALOG_UPPERLIMIT_MINIMUM_NUM); /* Check if sigma-clipping parameters have been given. */ if( isnan(p->upsigmaclip[0]) ) error(EXIT_FAILURE, 0, "'--upsigmaclip' is mandatory for measuring " "the upper-limit magnitude. It takes two numbers separated by " "a comma. The first is the multiple of sigma and the second is " "the aborting criteria: <1: tolerance level, >1: number of " "clips"); /* Check if the sigma multiple is given. */ if( isnan(p->upnsigma) ) error(EXIT_FAILURE, 0, "'--upnsigma' is mandatory for measuring the " "upperlimit magnitude. Its value is the multiple of final sigma " "that is reported as the upper-limit"); /* Set the random number generator. */ p->rng=gal_checkset_gsl_rng(p->envseed, &p->rng_name, &p->rng_seed); /* Keep the minimum and maximum values of the random number generator. */ p->rngmin=gsl_rng_min(p->rng); p->rngdiff=gsl_rng_max(p->rng)-p->rngmin; } void ui_preparations(struct mkcatalogparams *p) { /* If no columns are requested, then inform the user. */ if(p->columnids==NULL) error(EXIT_FAILURE, 0, "no measurements requested! Please run again " "with '--help' for the possible list of measurements"); /* Set the actual filenames to use. */ ui_set_filenames(p); /* Read the main input (the objects image). */ ui_read_labels(p); /* Prepare the output columns. */ columns_define_alloc(p); /* Read the inputs. */ ui_preparations_read_inputs(p); /* Read the helper keywords from the inputs and if they aren't present then calculate the necessary parameters. */ ui_preparations_read_keywords(p); /* Set the output filename(s). */ ui_preparations_outnames(p); /* Allocate the reference random number generator and seed values. It will be cloned once for every thread. If the user hasn't called 'envseed', then we want it to be different for every run, so we need to re-set the seed. */ if(p->upperlimit) ui_preparations_upperlimit(p); if( p->hasmag && isnan(p->zeropoint) ) error(EXIT_FAILURE, 0, "no zeropoint specified"); /* Prepare the two internal arrays necessary to sort the clumps catalog by object and clump IDs. We are allocating and filling these in separately (and not using the actual output columns that have the same values), because playing with the output columns can cause bad bugs. If the user wants performance, they are encouraged to run MakeCatalog with '--noclumpsort' and avoid the whole process all together. */ if(p->clumps && !p->noclumpsort && p->cp.numthreads>1) { p->hostobjid_c=gal_pointer_allocate(GAL_TYPE_SIZE_T, p->clumpcols->size, 0, __func__, "p->hostobjid_c"); p->numclumps_c=gal_pointer_allocate(GAL_TYPE_SIZE_T, p->objectcols->size, 0, __func__, "p->numclumps_c"); } } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct mkcatalogparams *p) { char *tmp; struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* If the output is a FITS table, prepare all the options as FITS keywords to write in output later. */ if(gal_fits_name_is_fits(p->objectsout)) gal_options_as_fits_keywords(&p->cp); /* Inform the user. */ if(!p->cp.quiet) { /* Write the information. */ printf(PROGRAM_NAME" "PACKAGE_VERSION" started on %s", ctime(&p->rawtime)); printf(" - Using %zu CPU thread%s\n", p->cp.numthreads, p->cp.numthreads==1 ? "." : "s."); printf(" - Objects: %s (hdu: %s)\n", p->objectsfile, p->cp.hdu); if(p->clumps) printf(" - Clumps: %s (hdu: %s)\n", p->usedclumpsfile, p->clumpshdu); if(p->values) printf(" - Values: %s (hdu: %s)\n", p->usedvaluesfile, p->valueshdu); if(p->subtractsky || p->sky) { if(p->sky->size==1) printf(" - Sky: %g (single value for all pixels)\n", *((float *)(p->sky->array)) ); else printf(" - Sky: %s (hdu: %s)\n", p->usedskyfile, p->skyhdu); if(p->subtractsky) printf(" - Sky has been subtracted from values " "internally.\n"); } if(p->std) { tmp = p->variance ? "VAR" : "STD"; if(p->std->size==1) printf(" - Sky %s: %g (single value for all pixels)\n", tmp, *((float *)(p->std->array)) ); else printf(" - Sky %s: %s (hdu: %s)\n", tmp, p->usedstdfile, p->stdhdu); } if(p->upmaskfile) printf(" - Upper limit magnitude mask: %s (hdu: %s)\n", p->upmaskfile, p->upmaskhdu); if(p->upperlimit) { printf(" - Random number generator name: %s\n", p->rng_name); printf(" - Random number generator seed: %lu\n", p->rng_seed); } } } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct mkcatalogparams *p, struct timeval *t1) { size_t i, d; /* The temporary arrays for WCS coordinates. */ if(p->wcs_vo ) gal_list_data_free(p->wcs_vo); if(p->wcs_vc ) gal_list_data_free(p->wcs_vc); if(p->wcs_go ) gal_list_data_free(p->wcs_go); if(p->wcs_gc ) gal_list_data_free(p->wcs_gc); if(p->wcs_vcc) gal_list_data_free(p->wcs_vcc); if(p->wcs_gcc) gal_list_data_free(p->wcs_gcc); /* Free the types of the WCS coordinates (for catalog meta-data). */ if(p->ctype) { for(d=0;dobjects->ndim;++d) free(p->ctype[d]); free(p->ctype); } /* If a random number generator was allocated, free it. */ if(p->rng) gsl_rng_free(p->rng); /* Free output names. */ if(p->clumpsout && p->clumpsout!=p->objectsout) free(p->clumpsout); free(p->objectsout); /* Free the allocated arrays: */ free(p->skyhdu); free(p->stdhdu); free(p->cp.hdu); free(p->oiflag); free(p->ciflag); free(p->skyfile); free(p->stdfile); free(p->clumpshdu); free(p->valueshdu); free(p->clumpsfile); free(p->valuesfile); free(p->hostobjid_c); free(p->numclumps_c); gal_data_free(p->sky); gal_data_free(p->std); gal_data_free(p->values); gal_data_free(p->upmask); gal_data_free(p->clumps); gal_data_free(p->objects); if(p->outlabs) free(p->outlabs); gal_list_data_free(p->clumpcols); gal_list_data_free(p->objectcols); if(p->outlabsinv) free(p->outlabsinv); if(p->upcheckout) free(p->upcheckout); gal_data_array_free(p->tiles, p->numobjects, 0); /* The original clump labels. */ if(p->origclpid) { for(i=1;inumobjects+1;++i) if(p->origclpid[i]) free(p->origclpid[i]); free(p->origclpid); } /**/ /* If the Sky or its STD image were given in tiles, then we defined a tile structure to deal with them. The initialization of the tile structure is checked with its 'ndim' element. */ if(p->cp.tl.ndim) gal_tile_full_free_contents(&p->cp.tl); /* If an upper limit range warning is necessary, print it here. */ if(p->uprangewarning) fprintf(stderr, "\nMore on the WARNING-UPPERLIMIT(s) above: " "In order to obtain a good/robust random distribution (and " "thus a reliable upper-limit measurement), it is necessary " "to have a sufficienty wide enough range (in each dimension). " "As mentioned in the warning(s) above, the available " "range for random sampling of some of the labels in this " "input is less than double their length. If the input is taken " "from a larger dataset, this issue can be solved by using a " "larger part of it. You can also run MakeCatalog with " "'--checkuplim' to see the distribution for a special " "object or clump as a table and personally inspect its " "reliability. \n\n"); /* Print the final message. */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); } gnuastro-0.22/bin/mkcatalog/mkcatalog.c0000644000175000017500000006674014551337306013624 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "mkcatalog.h" #include "ui.h" #include "parse.h" #include "columns.h" #include "upperlimit.h" /*********************************************************************/ /************** Manage a single object *******************/ /*********************************************************************/ static void mkcatalog_clump_starting_index(struct mkcatalog_passparams *pp) { struct mkcatalogparams *p=pp->p; /* Lock the mutex if we are working on more than one thread. NOTE: it is very important to keep the number of operations within the mutex to a minimum so other threads don't get delayed. */ if(p->cp.numthreads>1) pthread_mutex_lock(&p->mutex); /* Put the current total number of rows filled into the output, then increment the total number by the number of clumps. */ pp->clumpstartindex = p->clumprowsfilled; p->clumprowsfilled += pp->clumpsinobj; /* Unlock the mutex (if it was locked). */ if(p->cp.numthreads>1) pthread_mutex_unlock(&p->mutex); } /* Vector allocation (short name is used since it is repeated a lot). */ static void mkcatalog_vec_alloc(struct mkcatalog_passparams *pp, size_t onum, size_t vnum, uint8_t type) { if( pp->p->oiflag[ onum ] ) gal_data_initialize(&pp->vector[vnum], 0, type, 1, &(pp->p->objects->dsize[0]), NULL, 1, pp->p->cp.minmapsize, pp->p->cp.quietmmap, NULL, NULL, NULL); } /* Allocate all the necessary space. */ static void mkcatalog_single_object_init(struct mkcatalogparams *p, struct mkcatalog_passparams *pp) { uint8_t *oif=p->oiflag; size_t ndim=p->objects->ndim; uint8_t i32=GAL_TYPE_INT32, f64=GAL_TYPE_FLOAT64; /* For short lines.*/ /* Initialize the mkcatalog_passparams elements. */ pp->p = p; pp->clumpstartindex = 0; pp->rng = p->rng ? gsl_rng_clone(p->rng) : NULL; pp->oi = gal_pointer_allocate(GAL_TYPE_FLOAT64, OCOL_NUMCOLS, 0, __func__, "pp->oi"); /* If we have second order measurements, allocate the array keeping the temporary shift values for each object of this thread. Note that the clumps catalog (if requested), will have the same measurements, so its just enough to check the objects. */ pp->shift = ( ( oif[ OCOL_GXX ] || oif[ OCOL_GYY ] || oif[ OCOL_GXY ] || oif[ OCOL_VXX ] || oif[ OCOL_VYY ] || oif[ OCOL_VXY ] ) ? gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "pp->shift") : NULL ); /* If we have upper-limit mode, then allocate the container to keep the values to calculate the standard deviation. */ if(p->upperlimit) { /* Allocate the space to keep the upper-limit values. */ pp->up_vals = gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &p->upnum, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Set the blank checked flag to 1. By definition, this dataset won't have any blank values. Also 'flag' is initialized to '0'. So we just have to set the checked flag ('GAL_DATA_FLAG_BLANK_CH') to one to inform later steps that there are no blank values. */ pp->up_vals->flag |= GAL_DATA_FLAG_BLANK_CH; } else pp->up_vals=NULL; /* If any vector measurements are necessary, do the necessary allocations: first the general array, to keep all that are necessary, then the individual ones. */ pp->vector = ( ( oif[ OCOL_NUMINSLICE ] || oif[ OCOL_SUMINSLICE ] || oif[ OCOL_NUMALLINSLICE ] || oif[ OCOL_SUMVARINSLICE ] || oif[ OCOL_SUMPROJINSLICE ] || oif[ OCOL_NUMPROJINSLICE ] || oif[ OCOL_SUMPROJVARINSLICE ] || oif[ OCOL_NUMOTHERINSLICE ] || oif[ OCOL_SUMOTHERINSLICE ] || oif[ OCOL_SUMOTHERVARINSLICE ] || oif[ OCOL_NUMALLOTHERINSLICE ] ) ? gal_data_array_calloc(VEC_NUM) : NULL ); mkcatalog_vec_alloc(pp, OCOL_NUMINSLICE, VEC_NUMINSLICE, i32); mkcatalog_vec_alloc(pp, OCOL_NUMALLINSLICE, VEC_NUMALLINSLICE, i32); mkcatalog_vec_alloc(pp, OCOL_NUMPROJINSLICE, VEC_NUMPROJINSLICE, i32); mkcatalog_vec_alloc(pp, OCOL_NUMOTHERINSLICE, VEC_NUMOTHERINSLICE,i32); mkcatalog_vec_alloc(pp, OCOL_SUMINSLICE, VEC_SUMINSLICE, f64); mkcatalog_vec_alloc(pp, OCOL_SUMVARINSLICE, VEC_SUMVARINSLICE, f64); mkcatalog_vec_alloc(pp, OCOL_SUMPROJINSLICE, VEC_SUMPROJINSLICE, f64); mkcatalog_vec_alloc(pp, OCOL_SUMOTHERINSLICE, VEC_SUMOTHERINSLICE,f64); mkcatalog_vec_alloc(pp, OCOL_SUMOTHERVARINSLICE, VEC_SUMOTHERVARINSLICE, f64); mkcatalog_vec_alloc(pp, OCOL_NUMALLOTHERINSLICE, VEC_NUMALLOTHERINSLICE, i32); mkcatalog_vec_alloc(pp, OCOL_SUMPROJVARINSLICE, VEC_SUMPROJVARINSLICE, f64); } /* Each thread will call this function once. It will go over all the objects that are assigned to it. */ static void * mkcatalog_single_object(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct mkcatalogparams *p=(struct mkcatalogparams *)(tprm->params); size_t i; struct mkcatalog_passparams pp; /* Initialize and allocate all the necessary values. */ mkcatalog_single_object_init(p, &pp); /* Fill the desired columns for all the objects given to this thread. */ for(i=0; tprm->indexs[i]!=GAL_BLANK_SIZE_T; ++i) { /* For easy reading. Note that the object IDs start from one while the array positions start from 0. */ pp.ci = NULL; pp.object = ( p->outlabs ? p->outlabs[ tprm->indexs[i] ] : tprm->indexs[i] + 1 ); pp.tile = &p->tiles[ tprm->indexs[i] ]; /* Initialize the parameters for this object/tile. */ parse_initialize(&pp); /* Get the first pass information. */ parse_objects(&pp); /* Currently the second pass is only necessary when there is a clumps image. */ if(p->clumps) { /* Allocate space for the properties of each clump. */ pp.ci = gal_pointer_allocate(GAL_TYPE_FLOAT64, pp.clumpsinobj * CCOL_NUMCOLS, 1, __func__, "pp.ci"); /* Get the starting row of this object's clumps in the final catalog. This index is also necessary for the unique random number generator seeds of each clump. */ mkcatalog_clump_starting_index(&pp); /* Get the second pass information. */ parse_clumps(&pp); } /* If an order-based calculation is requested, another pass is necessary. */ if( p->oiflag[ OCOL_MEDIAN ] || p->oiflag[ OCOL_MAXIMUM ] || p->oiflag[ OCOL_HALFMAXSUM ] || p->oiflag[ OCOL_HALFMAXNUM ] || p->oiflag[ OCOL_HALFSUMNUM ] || p->oiflag[ OCOL_SIGCLIPNUM ] || p->oiflag[ OCOL_SIGCLIPSTD ] || p->oiflag[ OCOL_SIGCLIPMEAN ] || p->oiflag[ OCOL_FRACMAX1NUM ] || p->oiflag[ OCOL_FRACMAX2NUM ] || p->oiflag[ OCOL_SIGCLIPMEDIAN ]) parse_order_based(&pp); /* Calculate the upper limit magnitude (if necessary). */ if(p->upperlimit) upperlimit_calculate(&pp); /* Write the pass information into the columns. */ columns_fill(&pp); /* Clean up for this object. */ if(pp.ci) free(pp.ci); } /* Clean up. */ free(pp.oi); free(pp.shift); gal_data_free(pp.up_vals); if(pp.rng) gsl_rng_free(pp.rng); gal_data_array_free(pp.vector, VEC_NUM, 1); /* Wait until all the threads finish and return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /*********************************************************************/ /******** Processing after threads finish *************/ /*********************************************************************/ /* Convert internal image coordinates to WCS for table. Note that from the beginning (during the passing steps), we saved FITS coordinates. Also note that we are doing the conversion in place. */ static void mkcatalog_wcs_conversion(struct mkcatalogparams *p) { gal_data_t *c; gal_data_t *column; /* Flux weighted center positions for clumps and objects. */ if(p->wcs_vo) { gal_wcs_img_to_world(p->wcs_vo, p->objects->wcs, 1); if(p->wcs_vc) gal_wcs_img_to_world(p->wcs_vc, p->objects->wcs, 1); } /* Geometric center positions for clumps and objects. */ if(p->wcs_go) { gal_wcs_img_to_world(p->wcs_go, p->objects->wcs, 1); if(p->wcs_gc) gal_wcs_img_to_world(p->wcs_gc, p->objects->wcs, 1); } /* All clumps flux weighted center. */ if(p->wcs_vcc) gal_wcs_img_to_world(p->wcs_vcc, p->objects->wcs, 1); /* All clumps geometric center. */ if(p->wcs_gcc) gal_wcs_img_to_world(p->wcs_gcc, p->objects->wcs, 1); /* Go over all the object columns and fill in the values. */ for(column=p->objectcols; column!=NULL; column=column->next) { /* Definitions */ c=NULL; /* Set 'c' for the columns that must be corrected. Note that this 'switch' statement doesn't need any 'default', because there are probably columns that don't need any correction. */ switch(column->status) { case UI_KEY_W1: c=p->wcs_vo; break; case UI_KEY_W2: c=p->wcs_vo->next; break; case UI_KEY_W3: c=p->wcs_vo->next->next; break; case UI_KEY_GEOW1: c=p->wcs_go; break; case UI_KEY_GEOW2: c=p->wcs_go->next; break; case UI_KEY_GEOW3: c=p->wcs_go->next->next; break; case UI_KEY_CLUMPSW1: c=p->wcs_vcc; break; case UI_KEY_CLUMPSW2: c=p->wcs_vcc->next; break; case UI_KEY_CLUMPSW3: c=p->wcs_vcc->next->next; break; case UI_KEY_CLUMPSGEOW1: c=p->wcs_gcc; break; case UI_KEY_CLUMPSGEOW2: c=p->wcs_gcc->next; break; case UI_KEY_CLUMPSGEOW3: c=p->wcs_gcc->next->next; break; } /* Copy the elements into the output column. */ if(c) memcpy(column->array, c->array, column->size*gal_type_sizeof(c->type)); } /* Go over all the clump columns and fill in the values. */ for(column=p->clumpcols; column!=NULL; column=column->next) { /* Definitions */ c=NULL; /* Set 'c' for the columns that must be corrected. Note that this 'switch' statement doesn't need any 'default', because there are probably columns that don't need any correction. */ switch(column->status) { case UI_KEY_W1: c=p->wcs_vc; break; case UI_KEY_W2: c=p->wcs_vc->next; break; case UI_KEY_W3: c=p->wcs_vc->next->next; break; case UI_KEY_GEOW1: c=p->wcs_gc; break; case UI_KEY_GEOW2: c=p->wcs_gc->next; break; case UI_KEY_GEOW3: c=p->wcs_gc->next->next; break; } /* Copy the elements into the output column. */ if(c) memcpy(column->array, c->array, column->size*gal_type_sizeof(c->type)); } } void mkcatalog_outputs_keys_numeric(gal_fits_list_key_t **keylist, void *number, uint8_t type, char *nameliteral, char *commentliteral, char *unitliteral) { void *value; value=gal_pointer_allocate(type, 1, 0, __func__, "value"); memcpy(value, number, gal_type_sizeof(type)); gal_fits_key_list_add_end(keylist, type, nameliteral, 0, value, 1, commentliteral, 0, unitliteral, 0); } void mkcatalog_outputs_keys_infiles(struct mkcatalogparams *p, gal_fits_list_key_t **keylist) { int quiet=p->cp.quiet; char *stdname, *stdhdu, *stdvalcom; gal_fits_key_list_title_add_end(keylist, "Input files and/or configuration", 0); /* Object labels. */ gal_fits_key_write_filename("INLAB", p->objectsfile, keylist, 0, quiet); gal_fits_key_write_filename("INLABHDU", p->cp.hdu, keylist, 0, quiet); /* Clump labels. */ if(p->clumps) { gal_fits_key_write_filename("INCLU", p->usedclumpsfile, keylist, 0, quiet); gal_fits_key_write_filename("INCLUHDU", p->clumpshdu, keylist, 0, quiet); } /* Values image. */ if(p->values) { gal_fits_key_write_filename("INVAL", p->usedvaluesfile, keylist, 0, quiet); gal_fits_key_write_filename("INVALHDU", p->valueshdu, keylist, 0, quiet); } /* Sky image/value. */ if(p->sky) { if(p->sky->size==1) mkcatalog_outputs_keys_numeric(keylist, p->sky->array, p->sky->type, "INSKYVAL", "Value of Sky used (a single " "number).", NULL); else { gal_fits_key_write_filename("INSKY", p->usedskyfile, keylist, 0, quiet); gal_fits_key_write_filename("INSKYHDU", p->skyhdu, keylist, 0, quiet); } } /* Standard deviation (or variance) image. */ if(p->variance) { stdname="INVAR"; stdhdu="INVARHDU"; stdvalcom="Value of Sky variance (a single number)."; } else { stdname="INSTD"; stdhdu="INSTDHDU"; stdvalcom="Value of Sky STD (a single number)."; } if(p->std) { if(p->std->size==1) mkcatalog_outputs_keys_numeric(keylist, p->std->array, p->std->type, stdname, stdvalcom, NULL); else { gal_fits_key_write_filename(stdname, p->usedstdfile, keylist, 0, quiet); gal_fits_key_write_filename(stdhdu, p->stdhdu, keylist, 0, quiet); } } /* Upper limit mask. */ if(p->upmaskfile) { gal_fits_key_write_filename("INUPM", p->upmaskfile, keylist, 0, quiet); gal_fits_key_write_filename("INUPMHDU", p->upmaskhdu, keylist, 0, quiet); } } /* Write the output keywords. */ static gal_fits_list_key_t * mkcatalog_outputs_keys(struct mkcatalogparams *p, int o0c1) { float pixarea=NAN, fvalue; gal_fits_list_key_t *keylist=NULL; /* First, add the file names. */ mkcatalog_outputs_keys_infiles(p, &keylist); /* Type of catalog. */ gal_fits_key_list_add_end(&keylist, GAL_TYPE_STRING, "CATTYPE", 0, o0c1 ? "clumps" : "objects", 0, "Type of catalog ('object' or 'clump').", 0, NULL, 0); /* Add project commit information when in a Git-controlled directory and the output isn't a FITS file (in FITS, this will be automatically included). */ if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT && gal_git_describe()) gal_fits_key_list_add_end(&keylist, GAL_TYPE_STRING, "COMMIT", 0, gal_git_describe(), 1, "Git commit in running directory.", 0, NULL, 0); /* Pixel area. */ if(p->objects->wcs) { pixarea=gal_wcs_pixel_area_arcsec2(p->objects->wcs); if( isnan(pixarea)==0 ) mkcatalog_outputs_keys_numeric(&keylist, &pixarea, GAL_TYPE_FLOAT32, "PIXAREA", "Pixel area of input image.", "arcsec^2"); } /* Zeropoint magnitude. */ if( !isnan(p->zeropoint) ) mkcatalog_outputs_keys_numeric(&keylist, &p->zeropoint, GAL_TYPE_FLOAT32, "ZEROPNT", "Zeropoint used for magnitude.", "mag"); /* Add the title for the keywords. */ gal_fits_key_list_title_add_end(&keylist, "Surface brightness limit " "(SBL)", 0); /* Print surface brightness limit. */ if( !isnan(p->medstd) && !isnan(p->sfmagnsigma) ) { /* Used noise value (per pixel) and multiple of sigma. */ mkcatalog_outputs_keys_numeric(&keylist, &p->medstd, GAL_TYPE_FLOAT32, "SBLSTD", "Pixel STD for surface brightness " "limit.", NULL); mkcatalog_outputs_keys_numeric(&keylist, &p->sfmagnsigma, GAL_TYPE_FLOAT32, "SBLNSIG", "Sigma multiple for surface " "brightness limit.", NULL); /* Only print magnitudes if a zeropoint is given. */ if( !isnan(p->zeropoint) ) { /* Per pixel, Surface brightness limit magnitude. */ fvalue=gal_units_counts_to_mag(p->sfmagnsigma * p->medstd, p->zeropoint); mkcatalog_outputs_keys_numeric(&keylist, &fvalue, GAL_TYPE_FLOAT32, "SBLMAGPX", "Surface brightness limit per " "pixel.", "mag/pix"); /* Only print the SBL in fixed area if a WCS is present and a pixel area could be deduced. */ if( !isnan(pixarea) ) { /* Area used for measuring SBL. */ mkcatalog_outputs_keys_numeric(&keylist, &p->sfmagarea, GAL_TYPE_FLOAT32, "SBLAREA", "Area for surface brightness " "limit.", "arcsec^2"); /* Per area, Surface brightness limit magnitude. */ fvalue=gal_units_counts_to_mag(p->sfmagnsigma * p->medstd / sqrt( p->sfmagarea * pixarea), p->zeropoint); mkcatalog_outputs_keys_numeric(&keylist, &fvalue, GAL_TYPE_FLOAT32, "SBLMAG", "Surf. bright. limit in " "SBLAREA.", "mag/arcsec^2"); } else gal_fits_key_list_fullcomment_add_end(&keylist, "Can't " "write surface brightness limiting magnitude (SBLM) " "values in fixed area ('SBLAREA' and 'SBLMAG' " "keywords) because input doesn't have a world " "coordinate system (WCS), or the first two " "coordinates of the WCS weren't angular positions " "in units of degrees.", 0); } else gal_fits_key_list_fullcomment_add_end(&keylist, "Can't write " "surface brightness limiting magnitude values (e.g., " "'SBLMAG' or 'SBLMAGPX' keywords) because no " "'--zeropoint' has been given.", 0); } else { gal_fits_key_list_fullcomment_add_end(&keylist, "No surface " "brightness calcuations (e.g., 'SBLMAG' or 'SBLMAGPX' " "keywords) because STD image didn't have the 'MEDSTD' " "keyword. There are two solutions: 1) Call with " "'--forcereadstd'. 2) Measure the median noise level " "manually (possibly with Gnuastro's Arithmetic program) " "and put the value in the 'MEDSTD' keyword of the STD " "image.", 0); gal_fits_key_list_fullcomment_add_end(&keylist, "", 0); } /* The count-per-second correction. */ if(p->cpscorr>1.0f) mkcatalog_outputs_keys_numeric(&keylist, &p->cpscorr, GAL_TYPE_FLOAT32, "CPSCORR", "Counts-per-second correction.", NULL); /* Print upper-limit parameters. */ if(p->upperlimit) upperlimit_write_keys(p, &keylist, 1); /* In plain-text outputs, put a title for column metadata. */ if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT) gal_fits_key_list_title_add_end(&keylist, "Column metadata", 0); /* Return the list of keywords. */ return keylist; } /* Since all the measurements were done in parallel (and we didn't know the number of clumps per object a-priori), the clumps informtion is just written in as they are measured. Here, we'll sort the clump columns by object ID. There is an option to disable this. */ static void sort_clumps_by_objid(struct mkcatalogparams *p) { gal_data_t *col; size_t o, i, j, *permute, *rowstart; /* Make sure everything is fine. */ if(p->hostobjid_c==NULL || p->numclumps_c==NULL) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. 'p->hostobjid_c' and 'p->numclumps_c' must not be " "NULL.", __func__, PACKAGE_BUGREPORT); /* Allocate the necessary arrays. */ rowstart=gal_pointer_allocate(GAL_TYPE_SIZE_T, p->numobjects, 0, __func__, "rowstart"); permute=gal_pointer_allocate(GAL_TYPE_SIZE_T, p->numclumps, 0, __func__, "permute"); /* The objects array is already sorted by object ID. So we should just add up the number of clumps to find the row where each object's clumps should start from in the final sorted clumps catalog. */ rowstart[0] = 0; for(i=1;inumobjects;++i) rowstart[i] = p->numclumps_c[i-1] + rowstart[i-1]; /* Fill the permutation array. Note that WE KNOW that all the objects for one clump are after each other.*/ i=0; while(inumclumps) { o = ( p->outlabsinv ? (p->outlabsinv[ p->hostobjid_c[i] ] + 1) : p->hostobjid_c[i] ) - 1; for(j=0; jnumclumps_c[o]; ++j) permute[i++] = rowstart[o] + j; } /* Permute all the clump columns. */ for(col=p->clumpcols; col!=NULL; col=col->next) gal_permutation_apply_inverse(col, permute); /* Clean up */ free(permute); free(rowstart); } /* Write the produced columns into the output */ static void mkcatalog_write_outputs(struct mkcatalogparams *p) { gal_fits_list_key_t *keylist; gal_list_str_t *comments=NULL; int outisfits=gal_fits_name_is_fits(p->objectsout); /* If a catalog is to be generated. */ if(p->objectcols) { /* OBJECT catalog */ keylist=mkcatalog_outputs_keys(p, 0); /* Reverse the comments list (so it is printed in the same order here), write the objects catalog and free the comments. */ gal_list_str_reverse(&comments); gal_table_write(p->objectcols, keylist, NULL, p->cp.tableformat, p->objectsout, "OBJECTS", 0, 1); gal_list_str_free(comments, 1); /* CLUMPS catalog */ if(p->clumps) { /* Make the comments. */ keylist=mkcatalog_outputs_keys(p, 1); /* Write objects catalog --------------------- Reverse the comments list (so it is printed in the same order here), write the objects catalog and free the comments. */ gal_list_str_reverse(&comments); gal_table_write(p->clumpcols, NULL, comments, p->cp.tableformat, p->clumpsout, "CLUMPS", 0, 1); gal_list_str_free(comments, 1); } } /* Configuration information. */ if(outisfits) { gal_fits_key_write_filename("input", p->objectsfile, &p->cp.ckeys, 1, p->cp.quiet); gal_fits_key_write(p->cp.ckeys, p->objectsout, "0", "NONE", 1, 0); } /* Inform the user */ if(!p->cp.quiet && p->objectcols) { if(p->clumpsout && strcmp(p->clumpsout,p->objectsout)) { printf(" - Output objects catalog: %s\n", p->objectsout); if(p->clumps) printf(" - Output clumps catalog: %s\n", p->clumpsout); } else printf(" - Catalog written to %s\n", p->objectsout); } } /*********************************************************************/ /***************** Top-level function *******************/ /*********************************************************************/ void mkcatalog(struct mkcatalogparams *p) { /* When more than one thread is to be used, initialize the mutex: we need it to assign a column to the clumps in the final catalog. */ if( p->cp.numthreads > 1 ) pthread_mutex_init(&p->mutex, NULL); /* Do the processing on each thread. */ gal_threads_spin_off(mkcatalog_single_object, p, p->numobjects, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap); /* Post-thread processing, for example to convert image coordinates to RA and Dec. */ mkcatalog_wcs_conversion(p); /* If the columns need to be sorted (by object ID), then some adjustments need to be made (possibly to both the objects and clumps catalogs). */ if(p->hostobjid_c) sort_clumps_by_objid(p); /* Write the filled columns into the output. */ mkcatalog_write_outputs(p); /* Destroy the mutex. */ if( p->cp.numthreads>1 ) pthread_mutex_destroy(&p->mutex); } gnuastro-0.22/bin/mkcatalog/columns.c0000644000175000017500000040623514551337306013337 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "mkcatalog.h" #include "ui.h" #include "columns.h" /******************************************************************/ /******************* Intermediate arrays ******************/ /******************************************************************/ /* Allocate RA-DEC internal arrays. These arrays are defined to keep all the positions in one place and do the RA-DEC conversion once in the end. They are all allocated together, but we don't know if RA is requested first or Dec or if they are requested multiple times. So before the allocation, we'll check the first one. The space that is allocated in 'columns_define_alloc' is for the final values that are written in the output file. */ static void columns_alloc_radec(struct mkcatalogparams *p) { size_t i; /* For objects. */ if(p->wcs_vo==NULL) for(i=0;iobjects->ndim;++i) gal_list_data_add_alloc(&p->wcs_vo, NULL, GAL_TYPE_FLOAT64, 1, &p->numobjects, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* For clumps */ if(p->clumps && p->wcs_vc==NULL) for(i=0;iobjects->ndim;++i) gal_list_data_add_alloc(&p->wcs_vc, NULL, GAL_TYPE_FLOAT64, 1, &p->numclumps, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); } /* Similar to 'columns_alloc_radec'. */ static void columns_alloc_georadec(struct mkcatalogparams *p) { size_t i; /* For objects. */ if(p->wcs_go==NULL) for(i=0;iobjects->ndim;++i) gal_list_data_add_alloc(&p->wcs_go, NULL, GAL_TYPE_FLOAT64, 1, &p->numobjects, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* For clumps */ if(p->clumps && p->wcs_gc==NULL) for(i=0;iobjects->ndim;++i) gal_list_data_add_alloc(&p->wcs_gc, NULL, GAL_TYPE_FLOAT64, 1, &p->numclumps, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); } /* Similar to 'columns_alloc_radec'. */ static void columns_alloc_clumpsradec(struct mkcatalogparams *p) { size_t i; if(p->wcs_vcc==NULL) for(i=0;iobjects->ndim;++i) gal_list_data_add_alloc(&p->wcs_vcc, NULL, GAL_TYPE_FLOAT64, 1, &p->numobjects, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); } /* Similar to 'columns_alloc_radec'. */ static void columns_alloc_clumpsgeoradec(struct mkcatalogparams *p) { size_t i; if(p->wcs_gcc==NULL) for(i=0;iobjects->ndim;++i) gal_list_data_add_alloc(&p->wcs_gcc, NULL, GAL_TYPE_FLOAT64, 1, &p->numobjects, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); } /* Set pointers to fascilitate filling in the values. */ #define SET_WCS_PREPARE(ARR, LIST, ARRNAME) { \ d=0; \ errno=0; \ (ARR)=malloc(p->objects->ndim * sizeof (ARR) ); \ if( (ARR)==NULL ) \ error(EXIT_FAILURE, 0, "%s: %zu bytes for %s", __func__, \ p->objects->ndim * sizeof (ARR), ARRNAME); \ for(tmp=(LIST);tmp!=NULL;tmp=tmp->next) (ARR)[d++]=tmp->array; \ } static void columns_set_wcs_pointers(struct mkcatalogparams *p, double ***vo, double ***vc, double ***go, double ***gc, double ***vcc, double ***gcc) { size_t d; gal_data_t *tmp; if(p->wcs_vo) SET_WCS_PREPARE(*vo, p->wcs_vo, "vo" ); if(p->wcs_vc) SET_WCS_PREPARE(*vc, p->wcs_vc, "vc" ); if(p->wcs_go) SET_WCS_PREPARE(*go, p->wcs_go, "go" ); if(p->wcs_gc) SET_WCS_PREPARE(*gc, p->wcs_gc, "gc" ); if(p->wcs_vcc) SET_WCS_PREPARE(*vcc, p->wcs_vcc, "vcc"); if(p->wcs_gcc) SET_WCS_PREPARE(*gcc, p->wcs_gcc, "gcc"); } /******************************************************************/ /********** Column definition/allocation ***************/ /******************************************************************/ static void columns_wcs_preparation(struct mkcatalogparams *p) { size_t i; double *pixscale; gal_list_i32_t *colcode; int continue_wcs_check=1; /* Make sure a WCS structure is present if we need it. */ for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next) { if(continue_wcs_check) { switch(colcode->v) { /* High-level. */ case UI_KEY_SB: case UI_KEY_RA: case UI_KEY_DEC: case UI_KEY_SBERROR: case UI_KEY_HALFMAXSB: case UI_KEY_HALFSUMSB: case UI_KEY_AREAARCSEC2: case UI_KEY_SIGCLIPSTDSB: case UI_KEY_SIGCLIPMEANSB: case UI_KEY_SIGCLIPMEANSBDELTA: /* Low-level. */ case UI_KEY_W1: case UI_KEY_W2: case UI_KEY_GEOW1: case UI_KEY_GEOW2: case UI_KEY_CLUMPSW1: case UI_KEY_CLUMPSW2: case UI_KEY_CLUMPSGEOW1: case UI_KEY_CLUMPSGEOW2: if(p->objects->wcs) continue_wcs_check=0; else error(EXIT_FAILURE, 0, "%s (hdu: %s): no WCS meta-data " "found by WCSLIB. Atleast one of the requested " "columns requires world coordinate system " "meta-data", p->objectsfile, p->cp.hdu); break; } } else break; } /* Other checks; including conversion of the high-level WCS columns to low-level ones. */ for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next) switch(colcode->v) { case UI_KEY_RA: case UI_KEY_DEC: /* Check all the CTYPES. */ for(i=0;iobjects->ndim;++i) if( !strcmp(p->ctype[i], colcode->v==UI_KEY_RA ? "RA" : "DEC") ) { colcode->v = i==0 ? UI_KEY_W1 : UI_KEY_W2; break; } /* Make sure it actually existed. */ if(i==p->objects->ndim) error(EXIT_FAILURE, 0, "%s (hdu: %s): %s not present in any of " "the WCS axis types (CTYPE)", p->objectsfile, p->cp.hdu, colcode->v==UI_KEY_RA ? "RA" : "DEC"); break; /* Calculate the pixel area if necessary. */ case UI_KEY_SB: case UI_KEY_SBERROR: case UI_KEY_HALFMAXSB: case UI_KEY_HALFSUMSB: case UI_KEY_AREAARCSEC2: case UI_KEY_UPPERLIMITSB: case UI_KEY_SIGCLIPSTDSB: case UI_KEY_SIGCLIPMEANSB: case UI_KEY_SIGCLIPMEANSBDELTA: pixscale=gal_wcs_pixel_scale(p->objects->wcs); p->pixelarcsecsq=pixscale[0]*pixscale[1]*3600.0f*3600.0f; free(pixscale); break; /* The '--frac-max-*' options. */ case UI_KEY_FRACMAX1SUM: case UI_KEY_FRACMAX2SUM: case UI_KEY_FRACMAX1AREA: case UI_KEY_FRACMAX2AREA: case UI_KEY_FRACMAX1RADIUS: case UI_KEY_FRACMAX2RADIUS: /* The '--frac-max' option should also be called. */ if(p->fracmax==NULL) error(EXIT_FAILURE, 0, "the '--frac-max*-*' options should be " "called with the '--frac-max' option (to specify what " "fractions should be used). For example " "'--frac-max=0.8,0.5' allows measurements at fractions " "0.8 (for '--frac-max1-*' measurements) and 0.5 (for " "'--frac-max2-*' measurements) of the maximum"); /* The second fraction values can only be used if there is a second value. */ switch(colcode->v) { case UI_KEY_FRACMAX2SUM: case UI_KEY_FRACMAX2AREA: case UI_KEY_FRACMAX2RADIUS: if(p->fracmax->size!=2) error(EXIT_FAILURE, 0, "only one fraction is given to " "'--frac-max', but the second fraction's " "measurements are requested (for example " "'--frac-max2-sum'). Either give two fractions to " "'--frac-max' or use '--frac-max1-*' measurements"); } break; } } static void columns_sanity_check(struct mkcatalogparams *p) { gal_list_i32_t *colcode; /* If there is any columns that need WCS, the input image needs to have a WCS in its headers. So before anything, we need to check if a WCS is present or not. This can't be done after the initial setting of column properties because the WCS-related columns use information that is based on it (for units and names). */ columns_wcs_preparation(p); /* If sigma-clipping measurements are requested, make sure the necessary parameters are provided. */ for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next) switch(colcode->v) { case UI_KEY_SIGCLIPSTD: case UI_KEY_SIGCLIPMEAN: case UI_KEY_SIGCLIPSTDSB: case UI_KEY_SIGCLIPMEANSB: case UI_KEY_SIGCLIPNUMBER: case UI_KEY_SIGCLIPMEDIAN: case UI_KEY_SIGCLIPMEANSBDELTA: if(isnan(p->sigmaclip[0]) || isnan(p->sigmaclip[1])) error(EXIT_FAILURE, 0, "no sigma-clip defined! When any of the " "sigma-clipping columns are requested, it is necessary to " "specify the necessary sigma-clipping parameters with the " "'--sigmaclip' option"); break; } /* Check for dimension-specific columns. */ switch(p->objects->ndim) { case 2: for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next) switch(colcode->v) { case UI_KEY_AREAXY: case UI_KEY_GEOAREAXY: case UI_KEY_Z: case UI_KEY_MINZ: case UI_KEY_MAXZ: case UI_KEY_GEOZ: case UI_KEY_CLUMPSZ: case UI_KEY_CLUMPSGEOZ: case UI_KEY_W3: case UI_KEY_GEOW3: case UI_KEY_CLUMPSW3: case UI_KEY_CLUMPSGEOW3: error(EXIT_FAILURE, 0, "%s (hdu %s) is a 2D dataset, so " "columns relating to a third dimension cannot be " "requested", p->objectsfile, p->cp.hdu); } break; case 3: for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next) switch(colcode->v) { case UI_KEY_SEMIMAJOR: case UI_KEY_SEMIMINOR: case UI_KEY_AXISRATIO: case UI_KEY_POSITIONANGLE: case UI_KEY_GEOSEMIMAJOR: case UI_KEY_GEOSEMIMINOR: case UI_KEY_GEOAXISRATIO: case UI_KEY_HALFSUMRADIUS: case UI_KEY_FRACMAX1RADIUS: case UI_KEY_FRACMAX2RADIUS: case UI_KEY_GEOPOSITIONANGLE: error(EXIT_FAILURE, 0, "columns requiring second moment " "calculations (like semi-major, semi-minor, axis ratio " "and position angle) are not yet supported for 3D " "inputs"); } break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. MakeCatalog should not reach this point " "when the input has %zu dimensions", __func__, PACKAGE_BUGREPORT, p->objects->ndim); } } /* Set the necessary parameters for each output column and allocate the space necessary to keep the values. */ void columns_define_alloc(struct mkcatalogparams *p) { gal_list_i32_t *colcode; gal_list_str_t *strtmp, *noclumpimg=NULL; int disp_fmt=0, disp_width=0, disp_precision=0; size_t dsize[2], colndim, inndim=p->objects->ndim; char *name=NULL, *unit=NULL, *ocomment=NULL, *ccomment=NULL; uint8_t otype=GAL_TYPE_INVALID, ctype=GAL_TYPE_INVALID, *oiflag, *ciflag; /* Do a sanity check on the columns given the input dataset. */ columns_sanity_check(p); /* Allocate the array for which intermediate parameters are necessary. The basic issue is that higher-level calculations require a smaller domain of raw measurements. So to avoid having to calculate something multiple times, each parameter will flag the intermediate parameters it requires in these arrays. */ oiflag = p->oiflag = gal_pointer_allocate(GAL_TYPE_UINT8, OCOL_NUMCOLS, 1, __func__, "oiflag"); ciflag = p->ciflag = gal_pointer_allocate(GAL_TYPE_UINT8, CCOL_NUMCOLS, 1, __func__, "ciflag"); /* Allocate the columns. */ for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next) { /* Dimensions of output column. By default: most columns will be single dimensional, the vector columns will update this. Also, vector outputs will need 'dsize[1]'. But to avoid forgetting, we'll set it to an absurd value to cause a crash if it is forgotten. */ colndim=1; dsize[1]=GAL_BLANK_SIZE_T; /* Set the column-specific parameters, please follow the same order as 'args.h'. IMPORTANT: we want the names to be the same as the option names. Note that zero 'disp_' variables will be automatically determined.*/ switch(colcode->v) { case UI_KEY_OBJID: name = "OBJ_ID"; unit = "counter"; ocomment = "Object identifier."; ccomment = NULL; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INVALID; disp_fmt = 0; disp_width = 6; disp_precision = 0; /* Is an internal parameter. */ break; case UI_KEY_HOSTOBJID: name = "HOST_OBJ_ID"; unit = "counter"; ocomment = NULL; ccomment = "Object identifier hosting this clump."; otype = GAL_TYPE_INVALID; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; /* Is an internal parameter. */ break; case UI_KEY_IDINHOSTOBJ: name = "ID_IN_HOST_OBJ"; unit = "counter"; ocomment = NULL; ccomment = "ID of clump in its host object."; otype = GAL_TYPE_INVALID; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; /* Is an internal parameter. */ break; case UI_KEY_NUMCLUMPS: name = "NUM_CLUMPS"; unit = "counter"; ocomment = "Number of clumps in this object."; ccomment = NULL; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INVALID; disp_fmt = 0; disp_width = 5; disp_precision = 0; /* Is an internal parameter. */ break; case UI_KEY_AREA: name = "AREA"; unit = "counter"; ocomment = "Number of non-blank pixels."; ccomment = ocomment; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; break; case UI_KEY_AREAARCSEC2: name = "AREA_ARCSEC2"; unit = "arcsec2"; ocomment = "Number of non-blank pixels in arcsec^2"; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; break; case UI_KEY_SB: name = "SURFACE_BRIGHTNESS"; unit = "mag/arcsec^2"; ocomment = "Surface brightness (magnitude of " "brightness/area)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1; break; case UI_KEY_SBERROR: name = "SB_ERROR"; unit = "mag/arcsec^2"; ocomment = "Error in measuring Surface brightness."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1; oiflag[ OCOL_SUM_VAR ] = ciflag[ CCOL_SUM_VAR ] = 1; oiflag[ OCOL_SUM_VAR_NUM ] = ciflag[ CCOL_SUM_VAR_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; ciflag[ CCOL_RIV_SUM_VAR ] = 1; break; case UI_KEY_AREAXY: name = "AREAXY"; unit = "counter"; ocomment = "Projected valued pixels in first two " "dimensions."; ccomment = ocomment; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUMXY ] = ciflag[ CCOL_NUMXY ] = 1; break; case UI_KEY_CLUMPSAREA: name = "AREA_CLUMPS"; unit = "counter"; ocomment = "Total number of clump pixels in object."; ccomment = NULL; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INVALID; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_C_NUM ] = 1; break; case UI_KEY_WEIGHTAREA: name = "AREA_WEIGHT"; unit = "counter"; ocomment = "Area used for flux-weighted positions."; ccomment = ocomment; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUMWHT ] = ciflag[ CCOL_NUMWHT ] = 1; break; case UI_KEY_GEOAREA: name = "AREA_FULL"; unit = "counter"; ocomment = "Full area of label (irrespective of values)."; ccomment = ocomment; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; break; case UI_KEY_GEOAREAXY: name = "AREA_FULL_XY"; unit = "counter"; ocomment = "Project number in first two dimensions."; ccomment = ocomment; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUMALLXY ] = ciflag[ CCOL_NUMALLXY ] = 1; break; case UI_KEY_X: name = "X"; unit = "pixel"; ocomment = "Flux weighted center (FITS axis 1)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_VX ] = ciflag[ CCOL_VX ] = 1; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_SUMWHT ] = ciflag[ CCOL_SUMWHT ] = 1; oiflag[ OCOL_NUMWHT ] = ciflag[ CCOL_NUMWHT ] = 1; break; case UI_KEY_Y: name = "Y"; unit = "pixel"; ocomment = "Flux weighted center (FITS axis 2)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_VY ] = ciflag[ CCOL_VY ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_SUMWHT ] = ciflag[ CCOL_SUMWHT ] = 1; oiflag[ OCOL_NUMWHT ] = ciflag[ CCOL_NUMWHT ] = 1; break; case UI_KEY_Z: name = "Z"; unit = "pixel"; ocomment = "Flux weighted center (FITS axis 3)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_VZ ] = 1; ciflag[ CCOL_VZ ] = 1; break; case UI_KEY_GEOX: name = "GEO_X"; unit = "pixel"; ocomment = "Geometric center (FITS axis 1)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; break; case UI_KEY_GEOY: name = "GEO_Y"; unit = "pixel"; ocomment = "Geometric center (FITS axis 2)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; break; case UI_KEY_GEOZ: name = "GEO_Z"; unit = "pixel"; ocomment = "Geometric center (FITS axis 3)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_GZ ] = 1; ciflag[ CCOL_GZ ] = 1; break; case UI_KEY_CLUMPSX: name = "CLUMPS_X"; unit = "pixel"; ocomment = "Flux weighted center of clumps (FITS axis 1)."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_C_VX ] = 1; oiflag[ OCOL_C_GX ] = 1; oiflag[ OCOL_C_SUMWHT ] = 1; oiflag[ OCOL_C_NUMWHT ] = 1; break; case UI_KEY_CLUMPSY: name = "CLUMPS_Y"; unit = "pixel"; ocomment = "Flux weighted center of clumps (FITS axis 2)."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_C_VY ] = 1; oiflag[ OCOL_C_GY ] = 1; oiflag[ OCOL_C_SUMWHT ] = 1; oiflag[ OCOL_C_NUMWHT ] = 1; break; case UI_KEY_CLUMPSZ: name = "CLUMPS_Z"; unit = "pixel"; ocomment = "Flux weighted center of clumps (FITS axis 3)."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_C_VZ ] = 1; break; case UI_KEY_CLUMPSGEOX: name = "CLUMPS_GEO_X"; unit = "pixel"; ocomment = "Geometric center of clumps (FITS axis 1)."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_C_GX ] = 1; oiflag[ OCOL_C_NUMALL ] = 1; break; case UI_KEY_CLUMPSGEOY: name = "CLUMPS_GEO_Y"; unit = "pixel"; ocomment = "Geometric center of clumps (FITS axis 2)."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_C_GY ] = 1; oiflag[ OCOL_C_NUMALL ] = 1; break; case UI_KEY_CLUMPSGEOZ: name = "CLUMPS_GEO_Z"; unit = "pixel"; ocomment = "Geometric center of clumps (FITS axis 3)."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_C_GZ ] = 1; case UI_KEY_MINVALX: name = "MIN_VAL_X"; unit = "pixel"; ocomment = "Minimum value X pixel position."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; oiflag[ OCOL_MINVX ] = ciflag[ CCOL_MINVX ] = 1; oiflag[ OCOL_MINVNUM ] = ciflag[ CCOL_MINVNUM ] = 1; break; case UI_KEY_MAXVALX: name = "MAX_VAL_X"; unit = "pixel"; ocomment = "Maximum value X pixel position."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; oiflag[ OCOL_MAXVX ] = ciflag[ CCOL_MAXVX ] = 1; oiflag[ OCOL_MAXVNUM ] = ciflag[ CCOL_MAXVNUM ] = 1; break; case UI_KEY_MINVALY: name = "MIN_VAL_Y"; unit = "pixel"; ocomment = "Minimum value Y pixel position."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; oiflag[ OCOL_MINVY ] = ciflag[ CCOL_MINVY ] = 1; oiflag[ OCOL_MINVNUM ] = ciflag[ CCOL_MINVNUM ] = 1; break; case UI_KEY_MAXVALY: name = "MAX_VAL_Y"; unit = "pixel"; ocomment = "Maximum value Y pixel position."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; oiflag[ OCOL_MAXVY ] = ciflag[ CCOL_MAXVY ] = 1; oiflag[ OCOL_MAXVNUM ] = ciflag[ CCOL_MAXVNUM ] = 1; break; case UI_KEY_MINVALZ: name = "MIN_VAL_Z"; unit = "pixel"; ocomment = "Minimum value Z pixel position."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; oiflag[ OCOL_MINVZ ] = ciflag[ CCOL_MINVZ ] = 1; oiflag[ OCOL_MINVNUM ] = ciflag[ CCOL_MINVNUM ] = 1; break; case UI_KEY_MAXVALZ: name = "MAX_VAL_Z"; unit = "pixel"; ocomment = "Maximum value Z pixel position."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; oiflag[ OCOL_MAXVZ ] = ciflag[ CCOL_MAXVZ ] = 1; oiflag[ OCOL_MAXVNUM ] = ciflag[ CCOL_MAXVNUM ] = 1; break; case UI_KEY_MINVALNUM: name = "MIN_VAL_NUM"; unit = "counter"; ocomment = "Number of pixels with the minimum value."; ccomment = ocomment; otype = GAL_TYPE_UINT32; ctype = GAL_TYPE_UINT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; oiflag[ OCOL_MINVNUM ] = ciflag[ CCOL_MINVNUM ] = 1; break; case UI_KEY_MAXVALNUM: name = "MAX_VAL_NUM"; unit = "counter"; ocomment = "Number of pixels with the maximum value.."; ccomment = ocomment; otype = GAL_TYPE_UINT32; ctype = GAL_TYPE_UINT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; oiflag[ OCOL_MAXVNUM ] = ciflag[ CCOL_MAXVNUM ] = 1; break; case UI_KEY_MINX: name = "MIN_X"; unit = "pixel"; ocomment = "Minimum X axis pixel position."; ccomment = ocomment; otype = GAL_TYPE_UINT32; ctype = GAL_TYPE_UINT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; ciflag[ CCOL_MINX ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; break; case UI_KEY_MAXX: name = "MAX_X"; unit = "pixel"; ocomment = "Maximum X axis pixel position."; ccomment = ocomment; otype = GAL_TYPE_UINT32; ctype = GAL_TYPE_UINT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; ciflag[ CCOL_MAXX ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; break; case UI_KEY_MINY: name = "MIN_Y"; unit = "pixel"; ocomment = "Minimum Y axis pixel position."; ccomment = ocomment; otype = GAL_TYPE_UINT32; ctype = GAL_TYPE_UINT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; ciflag[ CCOL_MINY ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; break; case UI_KEY_MAXY: name = "MAX_Y"; unit = "pixel"; ocomment = "Maximum Y axis pixel position."; ccomment = ocomment; otype = GAL_TYPE_UINT32; ctype = GAL_TYPE_UINT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; ciflag[ CCOL_MAXY ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; break; case UI_KEY_MINZ: name = "MIN_Z"; unit = "pixel"; ocomment = "Minimum Z axis pixel position."; ccomment = ocomment; otype = GAL_TYPE_UINT32; ctype = GAL_TYPE_UINT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; ciflag[ CCOL_MINZ ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; break; case UI_KEY_MAXZ: name = "MAX_Z"; unit = "pixel"; ocomment = "Maximum Z axis pixel position."; ccomment = ocomment; otype = GAL_TYPE_UINT32; ctype = GAL_TYPE_UINT32; disp_fmt = 0; disp_width = 10; disp_precision = 0; ciflag[ CCOL_MAXZ ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; break; case UI_KEY_W1: name = p->ctype[0]; unit = p->objects->wcs->cunit[0]; ocomment = "Flux weighted center (WCS axis 1)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_FLOAT64; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 13; disp_precision = 7; columns_alloc_radec(p); oiflag[ OCOL_VX ] = ciflag[ CCOL_VX ] = 1; oiflag[ OCOL_VY ] = ciflag[ CCOL_VY ] = 1; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_SUMWHT ] = ciflag[ CCOL_SUMWHT ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; if(inndim==3) { oiflag[ OCOL_VZ ] = ciflag[ CCOL_VZ ] = 1; oiflag[ OCOL_GZ ] = ciflag[ CCOL_GZ ] = 1; } break; case UI_KEY_W2: name = p->ctype[1]; unit = p->objects->wcs->cunit[1]; ocomment = "Flux weighted center (WCS axis 2)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_FLOAT64; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 13; disp_precision = 7; columns_alloc_radec(p); oiflag[ OCOL_VX ] = ciflag[ CCOL_VX ] = 1; oiflag[ OCOL_VY ] = ciflag[ CCOL_VY ] = 1; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_SUMWHT ] = ciflag[ CCOL_SUMWHT ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; if(inndim==3) { oiflag[ OCOL_VZ ] = ciflag[ CCOL_VZ ] = 1; oiflag[ OCOL_GZ ] = ciflag[ CCOL_GZ ] = 1; } break; case UI_KEY_W3: name = p->ctype[2]; unit = p->objects->wcs->cunit[2]; ocomment = "Flux weighted center (WCS axis 3)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_FLOAT64; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 13; disp_precision = 7; columns_alloc_radec(p); oiflag[ OCOL_VX ] = ciflag[ CCOL_VX ] = 1; oiflag[ OCOL_VY ] = ciflag[ CCOL_VY ] = 1; oiflag[ OCOL_VZ ] = ciflag[ CCOL_VZ ] = 1; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_GZ ] = ciflag[ CCOL_GZ ] = 1; oiflag[ OCOL_SUMWHT ] = ciflag[ CCOL_SUMWHT ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; break; case UI_KEY_GEOW1: name = gal_checkset_malloc_cat("GEO_", p->ctype[0]); unit = p->objects->wcs->cunit[0]; ocomment = "Geometric center (WCS axis 1)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_FLOAT64; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 13; disp_precision = 7; columns_alloc_georadec(p); oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; if(inndim==3) oiflag[ OCOL_GZ ] = ciflag[ CCOL_GZ ] = 1; break; case UI_KEY_GEOW2: name = gal_checkset_malloc_cat("GEO_", p->ctype[1]); unit = p->objects->wcs->cunit[1]; ocomment = "Geometric center (WCS axis 2)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_FLOAT64; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 13; disp_precision = 7; columns_alloc_georadec(p); oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; if(inndim==3) oiflag[ OCOL_GZ ] = ciflag[ CCOL_GZ ] = 1; break; case UI_KEY_GEOW3: name = gal_checkset_malloc_cat("GEO_", p->ctype[2]); unit = p->objects->wcs->cunit[2]; ocomment = "Geometric center (WCS axis 3)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_FLOAT64; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 13; disp_precision = 7; columns_alloc_georadec(p); oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_GZ ] = ciflag[ CCOL_GZ ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; break; case UI_KEY_CLUMPSW1: name = gal_checkset_malloc_cat("CLUMPS_", p->ctype[0]); unit = p->objects->wcs->cunit[0]; ocomment = "Flux.wht center of all clumps (WCS axis 1)."; ccomment = NULL; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 13; disp_precision = 7; columns_alloc_clumpsradec(p); oiflag[ OCOL_C_VX ] = 1; oiflag[ OCOL_C_VY ] = 1; oiflag[ OCOL_C_GX ] = 1; oiflag[ OCOL_C_GY ] = 1; oiflag[ OCOL_C_SUMWHT ] = 1; oiflag[ OCOL_C_NUMALL ] = 1; if(inndim==3) { oiflag[ OCOL_C_VZ ] = 1; oiflag[ OCOL_C_GZ ] = 1; } break; case UI_KEY_CLUMPSW2: name = gal_checkset_malloc_cat("CLUMPS_", p->ctype[1]); unit = p->objects->wcs->cunit[1]; ocomment = "Flux.wht center of all clumps (WCS axis 2)."; ccomment = NULL; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 15; disp_precision = 7; columns_alloc_clumpsradec(p); oiflag[ OCOL_C_VX ] = 1; oiflag[ OCOL_C_VY ] = 1; oiflag[ OCOL_C_GX ] = 1; oiflag[ OCOL_C_GY ] = 1; oiflag[ OCOL_C_SUMWHT ] = 1; oiflag[ OCOL_C_NUMALL ] = 1; if(inndim==3) { oiflag[ OCOL_C_VZ ] = 1; oiflag[ OCOL_C_GZ ] = 1; } break; case UI_KEY_CLUMPSW3: name = gal_checkset_malloc_cat("CLUMPS_", p->ctype[2]); unit = p->objects->wcs->cunit[2]; ocomment = "Flux.wht center of all clumps (WCS axis 3)."; ccomment = NULL; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 15; disp_precision = 7; columns_alloc_clumpsradec(p); oiflag[ OCOL_C_VX ] = 1; oiflag[ OCOL_C_VY ] = 1; oiflag[ OCOL_C_GX ] = 1; oiflag[ OCOL_C_GY ] = 1; oiflag[ OCOL_C_SUMWHT ] = 1; oiflag[ OCOL_C_NUMALL ] = 1; if(inndim==3) { oiflag[ OCOL_C_VZ ] = 1; oiflag[ OCOL_C_GZ ] = 1; } break; case UI_KEY_CLUMPSGEOW1: name = gal_checkset_malloc_cat("CLUMPS_GEO", p->ctype[0]); unit = p->objects->wcs->cunit[0]; ocomment = "Geometric center of all clumps (WCS axis 1)."; ccomment = NULL; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 13; disp_precision = 7; columns_alloc_clumpsgeoradec(p); oiflag[ OCOL_C_GX ] = 1; oiflag[ OCOL_C_GY ] = 1; oiflag[ OCOL_C_NUMALL ] = 1; if(inndim==3) oiflag[ OCOL_C_GZ ] = 1; break; case UI_KEY_CLUMPSGEOW2: name = gal_checkset_malloc_cat("CLUMPS_GEO", p->ctype[1]); unit = p->objects->wcs->cunit[1]; ocomment = "Geometric center of all clumps (WCS axis 2)."; ccomment = NULL; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 13; disp_precision = 7; columns_alloc_clumpsgeoradec(p); oiflag[ OCOL_C_GX ] = 1; oiflag[ OCOL_C_GY ] = 1; oiflag[ OCOL_C_NUMALL ] = 1; if(inndim==3) oiflag[ OCOL_C_GZ ] = 1; break; case UI_KEY_CLUMPSGEOW3: name = gal_checkset_malloc_cat("CLUMPS_GEO", p->ctype[2]); unit = p->objects->wcs->cunit[2]; ocomment = "Geometric center of all clumps (WCS axis 3)."; ccomment = NULL; otype = GAL_TYPE_FLOAT64; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 13; disp_precision = 7; columns_alloc_clumpsgeoradec(p); oiflag[ OCOL_C_GX ] = 1; oiflag[ OCOL_C_GY ] = 1; oiflag[ OCOL_C_GZ ] = 1; oiflag[ OCOL_C_NUMALL ] = 1; break; case UI_KEY_SUM: name = "SUM"; unit = MKCATALOG_NO_UNIT; ocomment = "Sum of sky subtracted values."; ccomment = "Sum of pixels subtracted by rivers."; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_SUMERROR: name = "SUM_ERROR"; unit = MKCATALOG_NO_UNIT; ocomment = "Error (1-sigma) in measuring sum."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM_VAR ] = ciflag[ CCOL_SUM_VAR ] = 1; oiflag[ OCOL_SUM_VAR_NUM ] = ciflag[ CCOL_SUM_VAR_NUM ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM_VAR ] = 1; break; case UI_KEY_CLUMPSSUM: name = "CLUMPS_SUM"; unit = MKCATALOG_NO_UNIT; ocomment = "Sum of pixel values in clumps."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_C_NUM ] = 1; oiflag[ OCOL_C_SUM ] = 1; break; case UI_KEY_SUMNORIVER: name = "NO_RIVER_SUM"; unit = MKCATALOG_NO_UNIT; ocomment = NULL; ccomment = "Sum of sky subtracted values."; otype = GAL_TYPE_INVALID; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; ciflag[ CCOL_NUM ] = 1; ciflag[ CCOL_SUM ] = 1; break; case UI_KEY_MEAN: name = "MEAN"; unit = MKCATALOG_NO_UNIT; ocomment = "Mean of sky subtracted values."; ccomment = "Mean of pixels subtracted by rivers."; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_STD: name = "STD"; unit = MKCATALOG_NO_UNIT; ocomment = "Standard deviation of sky subtracted values."; ccomment = "Standard deviation of pixels subtracted by " "rivers."; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1; oiflag[ OCOL_SUMP2 ] = ciflag[ CCOL_SUMP2 ] = 1; break; case UI_KEY_MEDIAN: name = "MEDIAN"; unit = MKCATALOG_NO_UNIT; ocomment = "Median of sky subtracted values."; ccomment = "Median of pixels subtracted by rivers."; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_MEDIAN ] = ciflag[ CCOL_MEDIAN ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_MAXIMUM: name = "MAXIMUM"; unit = MKCATALOG_NO_UNIT; ocomment = "Maximum of sky subtracted values."; ccomment = "Maximum of pixels subtracted by rivers."; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_MAXIMUM ] = ciflag[ CCOL_MAXIMUM ] = 1; break; case UI_KEY_SIGCLIPNUMBER: name = "SIGCLIP_NUMBER"; unit = "counter"; ocomment = "Number of pixels in Sigma-clipped object"; ccomment = "Number of pixels in Sigma-clipped clump."; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SIGCLIPNUM ] = ciflag[ CCOL_SIGCLIPNUM ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_SIGCLIPMEDIAN: name = "SIGCLIP_MEDIAN"; unit = MKCATALOG_NO_UNIT; ocomment = "Sigma-clipped median of object pixels."; ccomment = "Sigma-clipped median of clump pixels."; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SIGCLIPMEDIAN ] = ciflag[ CCOL_SIGCLIPMEDIAN ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_SIGCLIPMEAN: name = "SIGCLIP_MEAN"; unit = MKCATALOG_NO_UNIT; ocomment = "Sigma-clipped mean of object pixels."; ccomment = "Sigma-clipped mean of clump pixels."; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SIGCLIPMEAN ] = ciflag[ CCOL_SIGCLIPMEAN ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_SIGCLIPSTD: name = "SIGCLIP_STD"; unit = MKCATALOG_NO_UNIT; ocomment = "Sigma-clipped standard deviation of object " "pixels."; ccomment = "Sigma-clipped standard deviation of clump " "pixels."; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SIGCLIPSTD ] = ciflag[ CCOL_SIGCLIPSTD ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_SIGCLIPMEANSB: name = "SIGCLIP_MEAN_SB"; unit = "mag/arcsec^2"; ocomment = "Surface brightness (over one pixel) of " "sig-clip mean of pixels."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SIGCLIPMEAN ] = ciflag[ CCOL_SIGCLIPMEAN ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_SIGCLIPMEANSBDELTA: name = "SIGCLIP_MEAN_SB_DELTA"; unit = "mag/arcsec^2"; ocomment = "Error in SB (over one pixel) of " "sig-clip mean of pixels."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SIGCLIPSTD ] = ciflag[ CCOL_SIGCLIPSTD ] = 1; oiflag[ OCOL_SIGCLIPMEAN ] = ciflag[ CCOL_SIGCLIPMEAN ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_SIGCLIPSTDSB: name = "SIGCLIP_STD_SB"; unit = "mag/arcsec^2"; ocomment = "Surface brightness of sigma-clipped " "standard deviation."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SIGCLIPSTD ] = ciflag[ CCOL_SIGCLIPSTD ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_MAGNITUDE: name = "MAGNITUDE"; unit = "log"; ocomment = "Magnitude."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 8; disp_precision = 3; p->hasmag = 1; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1; ciflag[ CCOL_SUM ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; break; case UI_KEY_MAGNITUDEERROR: name = "MAGNITUDE_ERROR"; unit = "log"; ocomment = "Error in measuring magnitude."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 8; disp_precision = 3; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM_VAR ] = ciflag[ CCOL_SUM_VAR ] = 1; oiflag[ OCOL_SUM_VAR_NUM ] = ciflag[ CCOL_SUM_VAR_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; ciflag[ CCOL_RIV_SUM_VAR ] = 1; break; case UI_KEY_CLUMPSMAGNITUDE: name = "CLUMPS_MAGNITUDE"; unit = "log"; ocomment = "Magnitude in all clumps."; ccomment = NULL; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_INVALID; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 8; disp_precision = 3; p->hasmag = 1; oiflag[ OCOL_C_SUM ] = 1; break; case UI_KEY_UPPERLIMIT: name = "UPPERLIMIT"; unit = MKCATALOG_NO_UNIT; ocomment = "Upper limit value (random positionings)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; p->upperlimit = 1; oiflag[ OCOL_UPPERLIMIT_B ] = ciflag[ CCOL_UPPERLIMIT_B ] = 1; break; case UI_KEY_UPPERLIMITMAG: name = "UPPERLIMIT_MAG"; unit = "log"; ocomment = "Upper limit magnitude (random positionings)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 8; disp_precision = 3; p->hasmag = 1; p->upperlimit = 1; oiflag[ OCOL_UPPERLIMIT_B ] = ciflag[ CCOL_UPPERLIMIT_B ] = 1; break; case UI_KEY_UPPERLIMITSB: name = "UPPERLIMIT_SB"; unit = "mag/arcsec^2"; ocomment = "Upper limit surface brightness over its " "footprint."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 8; disp_precision = 3; p->hasmag = 1; p->upperlimit = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; oiflag[ OCOL_UPPERLIMIT_B ] = ciflag[ CCOL_UPPERLIMIT_B ] = 1; break; case UI_KEY_UPPERLIMITONESIGMA: name = "UPPERLIMIT_ONE_SIGMA"; unit = MKCATALOG_NO_UNIT; ocomment = "One sigma value of all random measurements."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; p->upperlimit = 1; oiflag[ OCOL_UPPERLIMIT_S ] = ciflag[ CCOL_UPPERLIMIT_S ] = 1; break; case UI_KEY_UPPERLIMITSIGMA: name = "UPPERLIMIT_SIGMA"; unit = "frac"; ocomment = "Place in upperlimit distribution (sigma " "multiple)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; p->upperlimit = 1; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1; oiflag[ OCOL_UPPERLIMIT_S ] = ciflag[ CCOL_UPPERLIMIT_S ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_UPPERLIMITQUANTILE: name = "UPPERLIMIT_QUANTILE"; unit = "quantile"; ocomment = "Quantile of brightness in random distribution."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; p->upperlimit = 1; oiflag[ OCOL_UPPERLIMIT_Q ] = ciflag[ CCOL_UPPERLIMIT_Q ] = 1; break; case UI_KEY_UPPERLIMITSKEW: name = "UPPERLIMIT_SKEW"; unit = "frac"; ocomment = "(Mean-Median)/STD of random distribution."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 8; disp_precision = 3; p->upperlimit = 1; oiflag[ OCOL_UPPERLIMIT_SKEW ]=oiflag[ CCOL_UPPERLIMIT_SKEW ]=1; break; case UI_KEY_RIVERMEAN: name = "RIVER_MEAN"; unit = MKCATALOG_NO_UNIT; ocomment = NULL; ccomment = "Average river value surrounding this clump."; otype = GAL_TYPE_INVALID; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; ciflag[ CCOL_RIV_NUM ] = ciflag[ CCOL_RIV_SUM ] = 1; break; case UI_KEY_RIVERMIN: name = "RIVER_MIN"; unit = MKCATALOG_NO_UNIT; ocomment = NULL; ccomment = "Minimum river value surrounding this clump."; otype = GAL_TYPE_INVALID; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; ciflag[ CCOL_RIV_NUM ] = ciflag[ CCOL_RIV_MIN ] = 1; break; case UI_KEY_RIVERMAX: name = "RIVER_MAX"; unit = MKCATALOG_NO_UNIT; ocomment = NULL; ccomment = "Maximum river value surrounding this clump."; otype = GAL_TYPE_INVALID; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; ciflag[ CCOL_RIV_NUM ] = ciflag[ CCOL_RIV_MAX ] = 1; break; case UI_KEY_RIVERNUM: name = "RIVER_NUM"; unit = "counter"; ocomment = NULL; ccomment = "Number of river pixels around this clump."; otype = GAL_TYPE_INVALID; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 5; disp_precision = 0; ciflag[ CCOL_RIV_NUM ] = 1; break; case UI_KEY_SN: name = "SN"; unit = "ratio"; ocomment = "Signal to noise ratio."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1; oiflag[ OCOL_SUM_VAR ] = ciflag[ CCOL_SUM_VAR ] = 1; oiflag[ OCOL_SUM_VAR_NUM ] = ciflag[ CCOL_SUM_VAR_NUM ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM ] = 1; ciflag[ CCOL_RIV_NUM ] = 1; ciflag[ CCOL_RIV_SUM_VAR ] = 1; break; case UI_KEY_SKY: name = "SKY"; unit = MKCATALOG_NO_UNIT; ocomment = "Average input sky value."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 4; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUMSKY ] = ciflag[ CCOL_SUMSKY ] = 1; break; case UI_KEY_SKYSTD: name = "SKY_STD"; unit = MKCATALOG_NO_UNIT; ocomment = "Sky standard deviation under object."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 4; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUMVAR ] = ciflag[ CCOL_SUMVAR ] = 1; break; case UI_KEY_SEMIMAJOR: name = "SEMI_MAJOR"; unit = "pixel"; ocomment = "Flux weighted semi-major axis."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_SUMWHT ] = ciflag[ CCOL_SUMWHT ] = 1; oiflag[ OCOL_VX ] = ciflag[ CCOL_VX ] = 1; oiflag[ OCOL_VY ] = ciflag[ CCOL_VY ] = 1; oiflag[ OCOL_VXX ] = ciflag[ CCOL_VXX ] = 1; oiflag[ OCOL_VYY ] = ciflag[ CCOL_VYY ] = 1; oiflag[ OCOL_VXY ] = ciflag[ CCOL_VXY ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_GXX ] = ciflag[ CCOL_GXX ] = 1; oiflag[ OCOL_GYY ] = ciflag[ CCOL_GYY ] = 1; oiflag[ OCOL_GXY ] = ciflag[ CCOL_GXY ] = 1; break; case UI_KEY_SEMIMINOR: name = "SEMI_MINOR"; unit = "pixel"; ocomment = "Flux weighted semi-minor axis."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_SUMWHT ] = ciflag[ CCOL_SUMWHT ] = 1; oiflag[ OCOL_VX ] = ciflag[ CCOL_VX ] = 1; oiflag[ OCOL_VY ] = ciflag[ CCOL_VY ] = 1; oiflag[ OCOL_VXX ] = ciflag[ CCOL_VXX ] = 1; oiflag[ OCOL_VYY ] = ciflag[ CCOL_VYY ] = 1; oiflag[ OCOL_VXY ] = ciflag[ CCOL_VXY ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_GXX ] = ciflag[ CCOL_GXX ] = 1; oiflag[ OCOL_GYY ] = ciflag[ CCOL_GYY ] = 1; oiflag[ OCOL_GXY ] = ciflag[ CCOL_GXY ] = 1; break; case UI_KEY_AXISRATIO: name = "AXIS_RATIO"; unit = "ratio"; ocomment = "Flux weighted axis ratio (minor/major)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 7; disp_precision = 3; oiflag[ OCOL_SUMWHT ] = ciflag[ CCOL_SUMWHT ] = 1; oiflag[ OCOL_VX ] = ciflag[ CCOL_VX ] = 1; oiflag[ OCOL_VY ] = ciflag[ CCOL_VY ] = 1; oiflag[ OCOL_VXX ] = ciflag[ CCOL_VXX ] = 1; oiflag[ OCOL_VYY ] = ciflag[ CCOL_VYY ] = 1; oiflag[ OCOL_VXY ] = ciflag[ CCOL_VXY ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_GXX ] = ciflag[ CCOL_GXX ] = 1; oiflag[ OCOL_GYY ] = ciflag[ CCOL_GYY ] = 1; oiflag[ OCOL_GXY ] = ciflag[ CCOL_GXY ] = 1; break; case UI_KEY_POSITIONANGLE: name = "POSITION_ANGLE"; unit = "degrees"; ocomment = "Position angle."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_SUMWHT ] = ciflag[ CCOL_SUMWHT ] = 1; oiflag[ OCOL_VX ] = ciflag[ CCOL_VX ] = 1; oiflag[ OCOL_VY ] = ciflag[ CCOL_VY ] = 1; oiflag[ OCOL_VXX ] = ciflag[ CCOL_VXX ] = 1; oiflag[ OCOL_VYY ] = ciflag[ CCOL_VYY ] = 1; oiflag[ OCOL_VXY ] = ciflag[ CCOL_VXY ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_GXX ] = ciflag[ CCOL_GXX ] = 1; oiflag[ OCOL_GYY ] = ciflag[ CCOL_GYY ] = 1; oiflag[ OCOL_GXY ] = ciflag[ CCOL_GXY ] = 1; break; case UI_KEY_GEOSEMIMAJOR: name = "GEO_SEMI_MAJOR"; unit = "pixel"; ocomment = "Geometric semi-major axis."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_GXX ] = ciflag[ CCOL_GXX ] = 1; oiflag[ OCOL_GYY ] = ciflag[ CCOL_GYY ] = 1; oiflag[ OCOL_GXY ] = ciflag[ CCOL_GXY ] = 1; break; case UI_KEY_GEOSEMIMINOR: name = "GEO_SEMI_MINOR"; unit = "pixel"; ocomment = "Geometric semi-minor axis."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_GXX ] = ciflag[ CCOL_GXX ] = 1; oiflag[ OCOL_GYY ] = ciflag[ CCOL_GYY ] = 1; oiflag[ OCOL_GXY ] = ciflag[ CCOL_GXY ] = 1; break; case UI_KEY_GEOAXISRATIO: name = "GEO_AXIS_RATIO"; unit = "ratio"; ocomment = "Geometric axis ratio (minor/major)."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 7; disp_precision = 3; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_GXX ] = ciflag[ CCOL_GXX ] = 1; oiflag[ OCOL_GYY ] = ciflag[ CCOL_GYY ] = 1; oiflag[ OCOL_GXY ] = ciflag[ CCOL_GXY ] = 1; break; case UI_KEY_GEOPOSITIONANGLE: name = "GEO_POSITION_ANGLE"; unit = "degrees"; ocomment = "Geometric Position angle."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_FIXED; disp_width = 10; disp_precision = 3; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_GXX ] = ciflag[ CCOL_GXX ] = 1; oiflag[ OCOL_GYY ] = ciflag[ CCOL_GYY ] = 1; oiflag[ OCOL_GXY ] = ciflag[ CCOL_GXY ] = 1; break; case UI_KEY_HALFSUMAREA: name = "HALF_SUM_AREA"; unit = "counter"; ocomment = "Number of brightest pixels containing half " "of total sum."; ccomment = ocomment; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1; oiflag[ OCOL_HALFSUMNUM ] = ciflag[ CCOL_HALFSUMNUM ] = 1; break; case UI_KEY_HALFMAXAREA: name = "HALF_MAX_AREA"; unit = "counter"; ocomment = "Number of pixels with a value larger than " "half the maximum."; ccomment = ocomment; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_HALFMAXNUM ] = ciflag[ CCOL_HALFMAXNUM ] = 1; break; case UI_KEY_HALFMAXSUM: name = "HALF_MAX_SUM"; unit = MKCATALOG_NO_UNIT; ocomment = "Sum of pixels with a value larger than half " "the maximum."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_HALFMAXSUM ] = ciflag[ CCOL_HALFMAXSUM ] = 1; break; case UI_KEY_HALFMAXSB: name = "HALF_MAX_SB"; unit = "mag/arcsec^2"; ocomment = "Surface brightness for pixels above half " "the maximum."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_HALFMAXNUM ] = ciflag[ CCOL_HALFMAXNUM ] = 1; oiflag[ OCOL_HALFMAXSUM ] = ciflag[ CCOL_HALFMAXSUM ] = 1; break; case UI_KEY_HALFSUMSB: name = "HALF_SUM_SB"; unit = "mag/arcsec^2"; ocomment = "Surface brightness for pixels above half " "the sum of all labeled pixels."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 5; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1; oiflag[ OCOL_HALFSUMNUM ] = ciflag[ CCOL_HALFSUMNUM ] = 1; break; case UI_KEY_FRACMAX1SUM: case UI_KEY_FRACMAX2SUM: name = ( colcode->v==UI_KEY_FRACMAX1SUM ? "FRAC_MAX1_SUM" : "FRAC_MAX2_SUM" ); unit = MKCATALOG_NO_UNIT; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1; if(colcode->v==UI_KEY_FRACMAX1SUM) { ocomment = "Sum of pixels brighter than 1st fraction of " "maximum."; oiflag[ OCOL_FRACMAX1SUM ] = ciflag[ CCOL_FRACMAX1SUM ] = 1; } else { ocomment = "Sum of pixels brighter than 2nd fraction of " "maximum."; oiflag[ OCOL_FRACMAX2SUM ] = ciflag[ CCOL_FRACMAX2SUM ] = 1; } ccomment = ocomment; break; case UI_KEY_FRACMAX1AREA: case UI_KEY_FRACMAX2AREA: name = ( colcode->v==UI_KEY_FRACMAX1AREA ? "FRAC_MAX1_AREA" : "FRAC_MAX2_AREA" ); unit = "counter"; ocomment = "Number of pixels brighter than given fraction " "of maximum value."; ccomment = ocomment; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1; if(colcode->v==UI_KEY_FRACMAX1AREA) oiflag[ OCOL_FRACMAX1NUM ] = ciflag[ CCOL_FRACMAX1NUM ] = 1; else oiflag[ OCOL_FRACMAX2NUM ] = ciflag[ CCOL_FRACMAX2NUM ] = 1; break; case UI_KEY_FWHM: case UI_KEY_HALFMAXRADIUS: case UI_KEY_HALFSUMRADIUS: case UI_KEY_FRACMAX1RADIUS: case UI_KEY_FRACMAX2RADIUS: unit = "pixels"; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = GAL_TABLE_DISPLAY_FMT_GENERAL; disp_width = 10; disp_precision = 3; /* halfsumarea: */ oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1; oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1; /* axisratio: */ oiflag[ OCOL_SUMWHT ] = ciflag[ CCOL_SUMWHT ] = 1; oiflag[ OCOL_VX ] = ciflag[ CCOL_VX ] = 1; oiflag[ OCOL_VY ] = ciflag[ CCOL_VY ] = 1; oiflag[ OCOL_VXX ] = ciflag[ CCOL_VXX ] = 1; oiflag[ OCOL_VYY ] = ciflag[ CCOL_VYY ] = 1; oiflag[ OCOL_VXY ] = ciflag[ CCOL_VXY ] = 1; oiflag[ OCOL_NUMALL ] = ciflag[ CCOL_NUMALL ] = 1; oiflag[ OCOL_GX ] = ciflag[ CCOL_GX ] = 1; oiflag[ OCOL_GY ] = ciflag[ CCOL_GY ] = 1; oiflag[ OCOL_GXX ] = ciflag[ CCOL_GXX ] = 1; oiflag[ OCOL_GYY ] = ciflag[ CCOL_GYY ] = 1; oiflag[ OCOL_GXY ] = ciflag[ CCOL_GXY ] = 1; switch(colcode->v) { case UI_KEY_FWHM: name="FWHM"; oiflag[ OCOL_HALFMAXNUM ] = ciflag[ CCOL_HALFMAXNUM ] = 1; ocomment = "Full width at half maximum (accounting for " "ellipticity)."; break; case UI_KEY_HALFMAXRADIUS: name="HALF_MAX_RADIUS"; oiflag[ OCOL_HALFMAXNUM ] = ciflag[ CCOL_HALFMAXNUM ] = 1; ocomment = "Radius at half of maximum (accounting for " "ellipticity)."; break; case UI_KEY_HALFSUMRADIUS: name="HALF_SUM_RADIUS"; oiflag[ OCOL_HALFSUMNUM ] = ciflag[ CCOL_HALFSUMNUM ] = 1; ocomment = "Radius at half of total sum (accounting for " "ellipticity)."; break; case UI_KEY_FRACMAX1RADIUS: name="FRAC_MAX_RADIUS_1"; oiflag[ OCOL_FRACMAX1NUM ] = ciflag[ CCOL_FRACMAX1NUM ] = 1; ocomment = "Radius derived from area of 1st fraction of " "maximum."; break; case UI_KEY_FRACMAX2RADIUS: name="FRAC_MAX_RADIUS_2"; oiflag[ OCOL_FRACMAX2NUM ] = ciflag[ CCOL_FRACMAX2NUM ] = 1; ocomment = "Radius derived from area of 2nd fraction of " "maximum."; break; } ccomment = ocomment; break; case UI_KEY_SUMINSLICE: colndim = 2; name = "SUM-IN-SLICE"; unit = MKCATALOG_NO_UNIT; dsize[1] = p->objects->dsize[0]; /* Third FITS dim. */ ocomment = "Sum of values with this label in each slice."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_SUMINSLICE ] = 1; oiflag[ OCOL_NUMINSLICE ] = 1; break; case UI_KEY_SUMERRINSLICE: colndim = 2; name = "SUM-ERR-IN-SLICE"; unit = MKCATALOG_NO_UNIT; dsize[1] = p->objects->dsize[0]; /* Third FITS dim. */ ocomment = "Error in 'SUM-IN-SLICE'"; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_SUMINSLICE ] = 1; oiflag[ OCOL_NUMINSLICE ] = 1; oiflag[ OCOL_SUMVARINSLICE ] = 1; break; case UI_KEY_AREAINSLICE: colndim = 2; name = "AREA-IN-SLICE"; unit = "counter"; dsize[1] = p->objects->dsize[0]; /* Third FITS dim. */ ocomment = "Number of pixels of each label in each slice."; ccomment = ocomment; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUMINSLICE ] = 1; break; case UI_KEY_SUMPROJINSLICE: colndim = 2; name = "SUM-PROJ-IN-SLICE"; unit = MKCATALOG_NO_UNIT; dsize[1] = p->objects->dsize[0]; /* Third FITS dim. */ ocomment = "Sum of values in projected area of each slice."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_SUMPROJINSLICE ] = 1; oiflag[ OCOL_NUMPROJINSLICE ] = 1; break; case UI_KEY_SUMPROJERRINSLICE: colndim = 2; name = "SUM-PROJ-ERR-IN-SLICE"; unit = MKCATALOG_NO_UNIT; dsize[1] = p->objects->dsize[0]; /* Third FITS dim. */ ocomment = "Error in 'SUM-PROJ-IN-SLICE'"; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_SUMPROJINSLICE ] = 1; oiflag[ OCOL_NUMPROJINSLICE ] = 1; oiflag[ OCOL_SUMPROJVARINSLICE ] = 1; break; case UI_KEY_AREAPROJINSLICE: colndim = 2; name = "AREA-PROJ-IN-SLICE"; unit = "counter"; dsize[1] = p->objects->dsize[0]; /* Third FITS dim. */ ocomment = "Number of usable pixels in " "'SUM-PROJ-IN-SLICE'."; ccomment = ocomment; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUMPROJINSLICE ] = 1; break; case UI_KEY_SUMOTHERINSLICE: colndim = 2; name = "SUM-OTHER-IN-SLICE"; unit = MKCATALOG_NO_UNIT; dsize[1] = p->objects->dsize[0]; /* Third FITS dim. */ ocomment = "Sum in other labels in projection in each " "slice."; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_SUMOTHERINSLICE ] = 1; oiflag[ OCOL_NUMOTHERINSLICE ] = 1; break; case UI_KEY_SUMOTHERERRINSLICE: colndim = 2; name = "SUM-OTHER-ERR-IN-SLICE"; unit = MKCATALOG_NO_UNIT; dsize[1] = p->objects->dsize[0]; /* Third FITS dim. */ ocomment = "Error in 'SUM-OTHER-IN-SLICE'"; ccomment = ocomment; otype = GAL_TYPE_FLOAT32; ctype = GAL_TYPE_FLOAT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_SUMOTHERINSLICE ] = 1; oiflag[ OCOL_NUMOTHERINSLICE ] = 1; oiflag[ OCOL_SUMOTHERVARINSLICE ] = 1; break; case UI_KEY_AREAOTHERINSLICE: colndim = 2; name = "AREA-OTHER-IN-SLICE"; unit = "counter"; dsize[1] = p->objects->dsize[0]; /* Third FITS dim. */ ocomment = "Number of usable pixels in " "'SUM-OTHER-IN-SLICE'"; ccomment = ocomment; otype = GAL_TYPE_INT32; ctype = GAL_TYPE_INT32; disp_fmt = 0; disp_width = 6; disp_precision = 0; oiflag[ OCOL_NUMOTHERINSLICE ] = 1; break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to " "fix the problem. The code %d is not an internally " "recognized column code", __func__, PACKAGE_BUGREPORT, colcode->v); } /* If this is an object's column, add it to the list of columns. We will be using the 'status' element to keep the MakeCatalog code for the columns. */ if(otype!=GAL_TYPE_INVALID) { dsize[0]=p->numobjects; gal_list_data_add_alloc(&p->objectcols, NULL, otype, colndim, dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, name, unit, ocomment); p->objectcols->status = colcode->v; p->objectcols->disp_fmt = disp_fmt; p->objectcols->disp_width = disp_width; p->objectcols->disp_precision = disp_precision; } /* Similar to the objects column above but for clumps, but since the clumps image is optional, we need a further check before actually allocating the column. */ if(ctype!=GAL_TYPE_INVALID) { /* If a clumps labeled image, add this column for the output. */ if(p->clumps) { dsize[0]=p->numclumps; gal_list_data_add_alloc(&p->clumpcols, NULL, ctype, colndim, dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, name, unit, ccomment); p->clumpcols->status = colcode->v; p->clumpcols->disp_fmt = disp_fmt; p->clumpcols->disp_width = disp_width; p->clumpcols->disp_precision = disp_precision; } /* If this is a clumps-only column and no clumps image was given. Add the column to the list of similar columns to inform the user. We'll just ignore the clump-specific ID-related columns, because the '--ids' (generic for both objects and clumps) is a simple generic solution for identifiers. Also, ultimately, they aren't measurements. */ else if( otype==GAL_TYPE_INVALID && colcode->v!=UI_KEY_HOSTOBJID && colcode->v!=UI_KEY_IDINHOSTOBJ ) gal_list_str_add(&noclumpimg, name, 1); } } /* If the user has asked for clump-only columns, but no clumps catalog is to be created (the '--clumpscat' option was not given or there were no clumps in the specified image), then print an informative message that the columns in question will be ignored. */ if(noclumpimg) { gal_list_str_reverse(&noclumpimg); fprintf(stderr, "WARNING: the following column(s) are unique to " "clumps (not objects), but the '--clumpscat' option has " "not been called, or there were no clumps in the clumps " "labeled image. Hence, these columns will be ignored in " "the output.\n\n"); for(strtmp=noclumpimg; strtmp!=NULL; strtmp=strtmp->next) fprintf(stderr, "\t%s\n", strtmp->v); gal_list_str_free(noclumpimg, 1); fprintf(stderr, "\n-------\n"); } /* Free the general columns information because it is no longe needed, we'll set it back to NULL afterwards so it is not mistakenly used. */ gal_list_i32_free(p->columnids); p->columnids=NULL; } /******************************************************************/ /********** Column calculation ***************/ /******************************************************************/ #define MKC_RATIO(TOP,BOT) ( (BOT)!=0.0f ? (TOP)/(BOT) : NAN ) #define MKC_MAG(B) ( gal_units_counts_to_mag(B, p->zeropoint) ) #define MKC_SB(B, A) ( ((B)>0 && (A)>0) \ ? MKC_MAG(B) + 2.5f * log10((A)*p->pixelarcsecsq) \ : NAN ) /* Calculate the error in brightness (only when the number of pixels used to find variance and number of pixels used to find brightness are the same). */ static double columns_sum_error(struct mkcatalogparams *p, double *row, int o0c1) { size_t numind = o0c1 ? CCOL_NUM : OCOL_NUM; double V = row[ o0c1 ? CCOL_SUM_VAR : OCOL_SUM_VAR ]; size_t svnind = o0c1 ? CCOL_SUM_VAR_NUM : OCOL_SUM_VAR_NUM; double OV = ( (o0c1 && row[ CCOL_RIV_NUM ]) ? row[ CCOL_RIV_SUM_VAR ] : 0.0 ); return ( (row[ numind ]>0.0f && row[ numind ] == row[ svnind ] ) ? sqrt( (V+OV)*p->cpscorr ) : NAN ); } /* Calculate the Signal to noise ratio for the object. */ static double columns_sn(struct mkcatalogparams *p, double *row, int o0c1) { double I = row[ o0c1 ? CCOL_SUM : OCOL_SUM ]; /* When grown clumps are requested from NoiseChisel, some "clumps" will completely cover their objects and there will be no rivers. So if this is a clump, and the river area is 0, we should treat the S/N as a an object (and set the outer flux to 0.0). */ double O = ( (o0c1 && row[ CCOL_RIV_NUM ]) ? (row[ CCOL_NUM ]*row[ CCOL_RIV_SUM ]/row[ CCOL_RIV_NUM ]) : 0.0 ); /* Return the derived value. */ return (I-O) / columns_sum_error(p, row, o0c1); } /* Do the second order calculations, see "Measuring elliptical parameters" section of the book/manual for a thorough explanation of the derivation. */ static double columns_second_order(struct mkcatalog_passparams *pp, double *row, int key, int o0c1) { double x=NAN, y=NAN, xx=NAN, yy=NAN, xy=NAN; double denom, kx=pp->shift[1], ky=pp->shift[0]; /* Preparations. */ switch(key) { /* Brightness weighted. */ case UI_KEY_SEMIMAJOR: case UI_KEY_SEMIMINOR: case UI_KEY_POSITIONANGLE: /* Denominator (to be divided). */ denom = row[ o0c1 ? CCOL_SUMWHT : OCOL_SUMWHT ]; /* First order. */ x = MKC_RATIO( row[ o0c1 ? CCOL_VX : OCOL_VX ], denom ); y = MKC_RATIO( row[ o0c1 ? CCOL_VY : OCOL_VY ], denom ); /* Second order. */ xx = ( MKC_RATIO( row[ o0c1 ? CCOL_VXX : OCOL_VXX ], denom ) - (x-kx) * (x-kx) ); yy = ( MKC_RATIO( row[ o0c1 ? CCOL_VYY : OCOL_VYY ], denom ) - (y-ky) * (y-ky) ); xy = ( MKC_RATIO( row[ o0c1 ? CCOL_VXY : OCOL_VXY ], denom ) - (x-kx) * (y-ky) ); break; /* Geometric. */ case UI_KEY_GEOSEMIMAJOR: case UI_KEY_GEOSEMIMINOR: case UI_KEY_GEOPOSITIONANGLE: /* Denominator (to be divided). */ denom = row[ o0c1 ? CCOL_NUMALL : OCOL_NUMALL ]; /* First order. */ x = MKC_RATIO( row[ o0c1 ? CCOL_GX : OCOL_GX ], denom ); y = MKC_RATIO( row[ o0c1 ? CCOL_GY : OCOL_GY ], denom ); /* Second order. */ xx = ( MKC_RATIO( row[ o0c1 ? CCOL_GXX : OCOL_GXX ], denom ) - (x-kx) * (x-kx) ); yy = ( MKC_RATIO( row[ o0c1 ? CCOL_GYY : OCOL_GYY ], denom ) - (y-ky) * (y-ky) ); xy = ( MKC_RATIO( row[ o0c1 ? CCOL_GXY : OCOL_GXY ], denom ) - (x-kx) * (y-ky) ); break; /* Error. */ default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. %d is not a recognized key", __func__, PACKAGE_BUGREPORT, key); } /* Return the output. */ switch(key) { /* Semi-major axis. */ case UI_KEY_SEMIMAJOR: case UI_KEY_GEOSEMIMAJOR: return sqrt( ( xx + yy ) / 2 + sqrt( (xx - yy)/2 * (xx - yy)/2 + xy * xy ) ); /* Semi-minor axis. */ case UI_KEY_SEMIMINOR: case UI_KEY_GEOSEMIMINOR: return sqrt( ( xx + yy )/2 - sqrt( (xx - yy)/2 * (xx - yy)/2 + xy * xy ) ); /* Position angle. */ case UI_KEY_POSITIONANGLE: case UI_KEY_GEOPOSITIONANGLE: return 0.5f * atan2(2 * xy, xx - yy) * 180/M_PI; } /* Control should not reach here! If it does, its a bug, so abort and let the user know. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s, so we can " "address the problem. Control should not have reached the end of " "this function", __func__, PACKAGE_BUGREPORT); return NAN; } /* The clump brightness is needed in several places, so we've defined this function to have an easier code. */ static double columns_clump_sum(double *ci) { double tmp; /* Calculate the river flux over the clump area. But only when rivers are present. When grown clumps are requested, the clumps can fully cover a detection (that has one or no clumps). */ tmp = ( ci[ CCOL_RIV_NUM ]>0.0f ? ci[ CCOL_RIV_SUM ]/ci[ CCOL_RIV_NUM ]*ci[ CCOL_NUM ] : 0 ); /* Subtract it from the clump's brightness. */ return ci[ CCOL_NUM ]>0.0f ? (ci[ CCOL_SUM ] - tmp) : NAN; } /* Measure the minimum and maximum positions. */ static uint32_t columns_xy_extrema(struct mkcatalog_passparams *pp, double *oi, size_t *coord, int key) { size_t ndim=pp->tile->ndim; gal_data_t *tile=pp->tile, *block=tile->block; /* We only want to do the coordinate estimation once: in 'columns_fill', we initialized the coordinates with 'GAL_BLANK_SIZE_T'. When the coordinate has already been measured already, it won't have this value any more. */ if(coord[0]==GAL_BLANK_SIZE_T) gal_dimension_index_to_coord(gal_pointer_num_between(block->array, tile->array, block->type), block->ndim, block->dsize, coord); /* Return the proper value: note that 'coord' is in C standard: starting from the slowest dimension and counting from zero. */ if(oi[OCOL_NUMALL]) switch(key) { case UI_KEY_MINX: return coord[ndim-1] + 1; break; case UI_KEY_MAXX: return coord[ndim-1] + tile->dsize[ndim-1]; break; case UI_KEY_MINY: return coord[ndim-2] + 1; break; case UI_KEY_MAXY: return coord[ndim-2] + tile->dsize[ndim-2]; break; case UI_KEY_MINZ: return coord[ndim-3] + 1; break; case UI_KEY_MAXZ: return coord[ndim-3] + tile->dsize[ndim-3]; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The value %d is not a recognized value", __func__, PACKAGE_BUGREPORT, key); } else return 0; /* Control should not reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to fix the " "problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); return GAL_BLANK_UINT32; } /* Fill vector columns. */ static void columns_vector_fill(int key, gal_data_t *column, gal_data_t *v, size_t oind) { int sqr=0; float *of32; int32_t *oi32; gal_data_t *vec; int32_t *ii32, *ii32f; double *if64, *if64f; /* Set the input pointer. */ switch(key) { case UI_KEY_SUMINSLICE: vec=&v[VEC_SUMINSLICE]; break; case UI_KEY_AREAINSLICE: vec=&v[VEC_NUMINSLICE]; break; case UI_KEY_SUMPROJINSLICE: vec=&v[VEC_SUMPROJINSLICE]; break; case UI_KEY_AREAPROJINSLICE: vec=&v[VEC_NUMPROJINSLICE]; break; case UI_KEY_AREAOTHERINSLICE: vec=&v[VEC_NUMOTHERINSLICE]; break; case UI_KEY_SUMOTHERINSLICE: vec=&v[VEC_SUMOTHERINSLICE]; break; /* Those that need special attention. */ case UI_KEY_SUMERRINSLICE: vec=&v[VEC_SUMVARINSLICE]; sqr=1; break; case UI_KEY_SUMPROJERRINSLICE: vec=&v[VEC_SUMPROJVARINSLICE]; sqr=1; break; case UI_KEY_SUMOTHERERRINSLICE: vec=&v[VEC_SUMOTHERVARINSLICE]; sqr=1; break; /* Unexpected! */ default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. Column identifier '%d' is not expected " "here", __func__, PACKAGE_BUGREPORT, key); } /* Set the pointers. */ ii32 = vec->array; ii32f = ii32 + vec->size; if64 = vec->array; if64f = if64 + vec->size; /* Copy the values, one by one.*/ switch(column->type) { case GAL_TYPE_INT32: oi32=gal_pointer_increment(column->array, oind*column->dsize[1], column->type); if(sqr) {do *oi32++ = sqrt(*ii32); while(++ii32array, oind*column->dsize[1], column->type); do *of32++ = *if64; while(++if64type, 1)); } } /* The magnitude error is directly derivable from the S/N: To derive the error in measuring the magnitude from the S/N, let's take 'F' as the flux, 'Z' is the zeropoint, 'M' is the magnitude, 'S' is the S/N, and 'D' to stand for capital delta (or error in a value) then from 'M = -2.5*log10(F) + Z' we get the following equation after calculating the derivative with respect to F. 'dM/df = -2.5 * ( 1 / ( F * ln(10) ) )' From the Tailor series, 'DM' can be written as: 'DM = dM/dF * DF' So 'DM = |-2.5/ln(10)| * DF/F' But 'DF/F' is just the inverse of the Signal to noise ratio, or '1/S'. So 'DM = 2.5 / ( S * ln(10) )' */ #define MAG_ERROR(P,ROW,O0C1) ( 2.5f \ / ( ( columns_sn((P),(ROW),(O0C1)) > 0 \ ? columns_sn((P),(ROW),(O0C1)) \ : NAN ) \ * log(10) ) ) #define SB_ERROR(P,ROW,O0C1) ( MAG_ERROR(P,ROW,O0C1) \ + ( 2.5/log(10)*p->spatialresolution \ / ( ROW[ O0C1?CCOL_NUM:OCOL_NUM ] \ ? ROW[ O0C1?CCOL_NUM:OCOL_NUM ] \ : NAN ) ) ) #define SCLIP_SBERR(SIG, STD) ( SIG<=0 ? NAN : 2.5/log(10)*STD/SIG ) /* All the raw first and second pass information has been collected, now write them into the output columns. The list of columns here is in the same order as 'columns_alloc_set_out_cols', see there for the type of each column. */ #define POS_V_G(ARRAY, SUMWHT_COL, NUMALL_COL, V_COL, G_COL) \ ( (ARRAY)[ SUMWHT_COL ]>0 \ ? MKC_RATIO( (ARRAY)[ V_COL ], (ARRAY)[ SUMWHT_COL ] ) \ : MKC_RATIO( (ARRAY)[ G_COL ], (ARRAY)[ NUMALL_COL ] ) ) void columns_fill(struct mkcatalog_passparams *pp) { struct mkcatalogparams *p=pp->p; int key; double tmp; void *colarr; size_t tmpind=GAL_BLANK_SIZE_T; gal_data_t *column, *vec=pp->vector; double *ci, *oi=pp->oi, **vcc=NULL, **gcc=NULL; double **vo=NULL, **vc=NULL, **go=NULL, **gc=NULL; size_t i, cind, coind, sr=pp->clumpstartindex, oind=GAL_BLANK_SIZE_T; size_t coord[3]={GAL_BLANK_SIZE_T, GAL_BLANK_SIZE_T, GAL_BLANK_SIZE_T}; /* Find the object's index in final catalog. */ if(p->outlabs) { for(i=0;inumobjects;++i) if(p->outlabs[i]==pp->object) { oind=i; break; } } else oind=pp->object-1; /* If a WCS column is requested (check will be done inside the function), then set the pointers. */ columns_set_wcs_pointers(p, &vo, &vc, &go, &gc, &vcc, &gcc); /* Go over all the object columns and fill in the information. */ for(column=p->objectcols; column!=NULL; column=column->next) { /* For easy reading. */ key=column->status; colarr=column->array; /* Put the number of clumps in the internal array which we will need later to order the clump table by object ID. */ if(p->numclumps_c) p->numclumps_c[oind]=pp->clumpsinobj; /* Go over all the columns. */ switch(key) { case UI_KEY_OBJID: ((int32_t *)colarr)[oind] = pp->object; break; case UI_KEY_NUMCLUMPS: ((int32_t *)colarr)[oind] = pp->clumpsinobj; break; case UI_KEY_AREA: ((int32_t *)colarr)[oind] = oi[OCOL_NUM]; break; case UI_KEY_AREAARCSEC2: ((float *)colarr)[oind] = oi[OCOL_NUM]*p->pixelarcsecsq; break; case UI_KEY_SB: ((float *)colarr)[oind] = MKC_SB(oi[OCOL_SUM], oi[OCOL_NUM]); break; case UI_KEY_SBERROR: ((float *)colarr)[oind] = SB_ERROR(p, oi, 0); break; case UI_KEY_AREAXY: ((int32_t *)colarr)[oind] = oi[OCOL_NUMXY]; break; case UI_KEY_CLUMPSAREA: ((int32_t *)colarr)[oind] = oi[OCOL_C_NUM]; break; case UI_KEY_WEIGHTAREA: ((int32_t *)colarr)[oind] = oi[OCOL_NUMWHT]; break; case UI_KEY_GEOAREA: ((int32_t *)colarr)[oind] = oi[OCOL_NUMALL]; break; case UI_KEY_GEOAREAXY: ((int32_t *)colarr)[oind] = oi[OCOL_NUMALLXY]; break; case UI_KEY_X: ((float *)colarr)[oind] = POS_V_G(oi, OCOL_SUMWHT, OCOL_NUMWHT, OCOL_VX, OCOL_GX); break; case UI_KEY_Y: ((float *)colarr)[oind] = POS_V_G(oi, OCOL_SUMWHT, OCOL_NUMWHT, OCOL_VY, OCOL_GY); break; case UI_KEY_Z: ((float *)colarr)[oind] = POS_V_G(oi, OCOL_SUMWHT, OCOL_NUMALL, OCOL_VZ, OCOL_GZ); break; case UI_KEY_GEOX: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_GX], oi[OCOL_NUMALL] ); break; case UI_KEY_GEOY: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_GY], oi[OCOL_NUMALL] ); break; case UI_KEY_GEOZ: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_GZ], oi[OCOL_NUMALL] ); break; case UI_KEY_CLUMPSX: ((float *)colarr)[oind] = POS_V_G(oi, OCOL_C_SUMWHT, OCOL_C_NUMWHT, OCOL_C_VX, OCOL_C_GX); break; case UI_KEY_CLUMPSY: ((float *)colarr)[oind] = POS_V_G(oi, OCOL_C_SUMWHT, OCOL_C_NUMWHT, OCOL_C_VY, OCOL_C_GY); break; case UI_KEY_CLUMPSZ: ((float *)colarr)[oind] = POS_V_G(oi, OCOL_C_SUMWHT, OCOL_C_NUMALL, OCOL_C_VZ, OCOL_C_GZ); break; case UI_KEY_CLUMPSGEOX: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_C_GX], oi[OCOL_C_NUMALL] ); break; case UI_KEY_CLUMPSGEOY: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_C_GY], oi[OCOL_C_NUMALL] ); break; case UI_KEY_CLUMPSGEOZ: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_C_GZ], oi[OCOL_C_NUMALL] ); break; case UI_KEY_MINVALX: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_MINVX], oi[OCOL_MINVNUM] ); break; case UI_KEY_MAXVALX: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_MAXVX], oi[OCOL_MAXVNUM] ); break; case UI_KEY_MINVALY: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_MINVY], oi[OCOL_MINVNUM] ); break; case UI_KEY_MAXVALY: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_MAXVY], oi[OCOL_MAXVNUM] ); break; case UI_KEY_MINVALZ: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_MINVZ], oi[OCOL_MINVNUM] ); break; case UI_KEY_MAXVALZ: ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_MAXVZ], oi[OCOL_MAXVNUM] ); break; case UI_KEY_MINVALNUM: ((uint32_t *)colarr)[oind] = oi[OCOL_MINVNUM]; break; case UI_KEY_MAXVALNUM: ((uint32_t *)colarr)[oind] = oi[OCOL_MAXVNUM]; break; case UI_KEY_MINX: case UI_KEY_MAXX: case UI_KEY_MINY: case UI_KEY_MAXY: case UI_KEY_MINZ: case UI_KEY_MAXZ: ((uint32_t *)colarr)[oind]=columns_xy_extrema(pp, oi, coord, key); break; case UI_KEY_W1: case UI_KEY_W2: case UI_KEY_W3: vo[0][oind] = POS_V_G(oi, OCOL_SUMWHT, OCOL_NUMALL, OCOL_VX, OCOL_GX); vo[1][oind] = POS_V_G(oi, OCOL_SUMWHT, OCOL_NUMALL, OCOL_VY, OCOL_GY); if(p->objects->ndim==3) vo[2][oind] = POS_V_G(oi, OCOL_SUMWHT, OCOL_NUMALL, OCOL_VZ, OCOL_GZ); break; case UI_KEY_GEOW1: case UI_KEY_GEOW2: case UI_KEY_GEOW3: go[0][oind] = MKC_RATIO( oi[OCOL_GX], oi[OCOL_NUMALL] ); go[1][oind] = MKC_RATIO( oi[OCOL_GY], oi[OCOL_NUMALL] ); if(p->objects->ndim==3) go[2][oind] = MKC_RATIO( oi[OCOL_GZ], oi[OCOL_NUMALL] ); break; case UI_KEY_CLUMPSW1: case UI_KEY_CLUMPSW2: case UI_KEY_CLUMPSW3: vcc[0][oind] = POS_V_G(oi, OCOL_C_SUMWHT, OCOL_C_NUMALL, OCOL_C_VX, OCOL_C_GX); vcc[1][oind] = POS_V_G(oi, OCOL_C_SUMWHT, OCOL_C_NUMALL, OCOL_C_VY, OCOL_C_GY); if(p->objects->ndim==3) vcc[2][oind] = POS_V_G(oi, OCOL_C_SUMWHT, OCOL_C_NUMALL, OCOL_C_VZ, OCOL_C_GZ); break; case UI_KEY_CLUMPSGEOW1: case UI_KEY_CLUMPSGEOW2: case UI_KEY_CLUMPSGEOW3: gcc[0][oind] = MKC_RATIO( oi[OCOL_C_GX], oi[OCOL_C_NUMALL] ); gcc[1][oind] = MKC_RATIO( oi[OCOL_C_GY], oi[OCOL_C_NUMALL] ); if(p->objects->ndim==3) gcc[2][oind] = MKC_RATIO( oi[OCOL_C_GZ], oi[OCOL_C_NUMALL] ); break; case UI_KEY_SUM: ((float *)colarr)[oind] = ( oi[ OCOL_NUM ]>0.0f ? oi[ OCOL_SUM ] : NAN ); break; case UI_KEY_SUMERROR: ((float *)colarr)[oind] = columns_sum_error(p, oi, 0); break; case UI_KEY_CLUMPSSUM: ((float *)colarr)[oind] = ( oi[ OCOL_C_NUM ]>0.0f ? oi[ OCOL_C_SUM ] : NAN ); break; case UI_KEY_MEAN: ((float *)colarr)[oind] = ( oi[ OCOL_NUM ]>0.0f ? oi[ OCOL_SUM ] / oi[ OCOL_NUM ] : NAN ); break; case UI_KEY_STD: ((float *)colarr)[oind] = gal_statistics_std_from_sums(oi[ OCOL_SUM ], oi[ OCOL_SUMP2 ], oi[ OCOL_NUM ]); break; case UI_KEY_MEDIAN: ((float *)colarr)[oind] = ( oi[ OCOL_NUM ]>0.0f ? oi[ OCOL_MEDIAN ] : NAN ); break; case UI_KEY_MAXIMUM: ((float *)colarr)[oind] = oi[ OCOL_MAXIMUM ]; break; case UI_KEY_SIGCLIPNUMBER: ((int32_t *)colarr)[oind] = oi[ OCOL_SIGCLIPNUM ]; break; case UI_KEY_SIGCLIPMEDIAN: ((float *)colarr)[oind] = oi[ OCOL_SIGCLIPMEDIAN ]; break; case UI_KEY_SIGCLIPMEAN: ((float *)colarr)[oind] = oi[ OCOL_SIGCLIPMEAN ]; break; case UI_KEY_SIGCLIPSTD: ((float *)colarr)[oind] = oi[ OCOL_SIGCLIPSTD ]; break; case UI_KEY_SIGCLIPMEANSB: ((float *)colarr)[oind] = MKC_SB(oi[ OCOL_SIGCLIPMEAN ], 1); break; case UI_KEY_SIGCLIPMEANSBDELTA: ((float *)colarr)[oind] = SCLIP_SBERR(oi[ OCOL_SIGCLIPMEAN ], oi[ OCOL_SIGCLIPSTD ]); break; case UI_KEY_SIGCLIPSTDSB: ((float *)colarr)[oind] = MKC_SB(oi[ OCOL_SIGCLIPSTD ], 1); break; case UI_KEY_MAGNITUDE: ((float *)colarr)[oind] = ( oi[ OCOL_NUM ]>0.0f ? MKC_MAG(oi[ OCOL_SUM ]) : NAN ); break; case UI_KEY_MAGNITUDEERROR: ((float *)colarr)[oind] = MAG_ERROR(p, oi, 0); break; case UI_KEY_CLUMPSMAGNITUDE: ((float *)colarr)[oind] = MKC_MAG(oi[ OCOL_C_SUM ]); break; case UI_KEY_UPPERLIMIT: ((float *)colarr)[oind] = oi[ OCOL_UPPERLIMIT_B ]; break; case UI_KEY_UPPERLIMITMAG: ((float *)colarr)[oind] = MKC_MAG(oi[ OCOL_UPPERLIMIT_B ]); break; case UI_KEY_UPPERLIMITSB: ((float *)colarr)[oind] = MKC_SB( oi[ OCOL_UPPERLIMIT_B ], oi[ OCOL_NUMALL ] ); break; case UI_KEY_UPPERLIMITONESIGMA: ((float *)colarr)[oind] = oi[ OCOL_UPPERLIMIT_S ]; break; case UI_KEY_UPPERLIMITSIGMA: ((float *)colarr)[oind] = ( ( oi[ OCOL_NUM ]>0.0f ? oi[ OCOL_SUM ] : NAN ) / oi[ OCOL_UPPERLIMIT_S ] ); break; case UI_KEY_UPPERLIMITQUANTILE: ((float *)colarr)[oind] = oi[ OCOL_UPPERLIMIT_Q ]; break; case UI_KEY_UPPERLIMITSKEW: ((float *)colarr)[oind] = oi[ OCOL_UPPERLIMIT_SKEW ]; break; case UI_KEY_SN: ((float *)colarr)[oind] = columns_sn(p, oi, 0); break; case UI_KEY_SKY: ((float *)colarr)[oind] = MKC_RATIO(oi[OCOL_SUMSKY], oi[OCOL_NUMSKY]); break; case UI_KEY_SKYSTD: ((float *)colarr)[oind] = sqrt( MKC_RATIO( oi[ OCOL_SUMVAR ], oi[ OCOL_NUMVAR ]) ); break; case UI_KEY_SEMIMAJOR: ((float *)colarr)[oind] = columns_second_order(pp, oi, key, 0); break; case UI_KEY_SEMIMINOR: ((float *)colarr)[oind] = columns_second_order(pp, oi, key, 0); break; case UI_KEY_AXISRATIO: ((float *)colarr)[oind] = ( columns_second_order(pp, oi, UI_KEY_SEMIMINOR, 0) / columns_second_order(pp, oi, UI_KEY_SEMIMAJOR, 0) ); break; case UI_KEY_POSITIONANGLE: ((float *)colarr)[oind] = columns_second_order(pp, oi, key, 0); break; case UI_KEY_GEOSEMIMAJOR: ((float *)colarr)[oind] = columns_second_order(pp, oi, key, 0); break; case UI_KEY_GEOSEMIMINOR: ((float *)colarr)[oind] = columns_second_order(pp, oi, key, 0); break; case UI_KEY_GEOAXISRATIO: ((float *)colarr)[oind] = ( columns_second_order(pp, oi, UI_KEY_GEOSEMIMINOR, 0) / columns_second_order(pp, oi, UI_KEY_GEOSEMIMAJOR, 0) ); break; case UI_KEY_GEOPOSITIONANGLE: ((float *)colarr)[oind] = columns_second_order(pp, oi, key, 0); break; case UI_KEY_HALFSUMAREA: ((int32_t *)colarr)[oind] = oi[OCOL_HALFSUMNUM]; break; case UI_KEY_HALFMAXAREA: ((int32_t *)colarr)[oind] = oi[OCOL_HALFMAXNUM]; break; case UI_KEY_HALFMAXSUM: ((float *)colarr)[oind] = oi[OCOL_HALFMAXNUM]; break; case UI_KEY_HALFMAXSB: ((float *)colarr)[oind] = MKC_SB( oi[OCOL_HALFMAXSUM], oi[OCOL_HALFMAXNUM] ); break; case UI_KEY_FRACMAX1SUM: ((float *)colarr)[oind] = oi[OCOL_FRACMAX1SUM]; break; case UI_KEY_FRACMAX2SUM: ((float *)colarr)[oind] = oi[OCOL_FRACMAX2SUM]; break; case UI_KEY_FRACMAX1AREA: ((int32_t *)colarr)[oind] = oi[OCOL_FRACMAX1NUM]; break; case UI_KEY_FRACMAX2AREA: ((int32_t *)colarr)[oind] = oi[OCOL_FRACMAX2NUM]; break; case UI_KEY_HALFSUMSB: ((float *)colarr)[oind] = MKC_SB( oi[OCOL_SUM]/2.0f, oi[OCOL_HALFSUMNUM] ); break; case UI_KEY_FWHM: case UI_KEY_HALFMAXRADIUS: case UI_KEY_HALFSUMRADIUS: case UI_KEY_FRACMAX1RADIUS: case UI_KEY_FRACMAX2RADIUS: /* First derive the axis ratio (as 'tmp'), then set the index to use and calculate the radius from the area and axis ratio. */ tmp = ( columns_second_order(pp, oi, UI_KEY_SEMIMINOR, 0) / columns_second_order(pp, oi, UI_KEY_SEMIMAJOR, 0) ); switch(key) { case UI_KEY_FWHM: tmpind=OCOL_HALFMAXNUM; break; case UI_KEY_HALFMAXRADIUS: tmpind=OCOL_HALFMAXNUM; break; case UI_KEY_HALFSUMRADIUS: tmpind=OCOL_HALFSUMNUM; break; case UI_KEY_FRACMAX1RADIUS: tmpind=OCOL_FRACMAX1NUM; break; case UI_KEY_FRACMAX2RADIUS: tmpind=OCOL_FRACMAX2NUM; break; } tmp = sqrt( oi[tmpind]/(tmp*M_PI) ); if(key==UI_KEY_FWHM) ((float *)colarr)[oind] = tmp<1e-6 ? NAN : (tmp*2); else ((float *)colarr)[oind] = tmp<1e-6 ? NAN : tmp; break; case UI_KEY_SUMINSLICE: case UI_KEY_AREAINSLICE: case UI_KEY_SUMERRINSLICE: case UI_KEY_SUMPROJINSLICE: case UI_KEY_AREAPROJINSLICE: case UI_KEY_SUMOTHERINSLICE: case UI_KEY_AREAOTHERINSLICE: case UI_KEY_SUMPROJERRINSLICE: case UI_KEY_SUMOTHERERRINSLICE: columns_vector_fill(key, column, vec, oind); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "solve the problem. the output column code %d not " "recognized (for objects). ", __func__, PACKAGE_BUGREPORT, key); } } /* Go over the clump columns and fill the information. */ for(column=p->clumpcols; column!=NULL; column=column->next) for(coind=0;coindclumpsinobj;++coind) { /* 'coind': clump-in-object-index. 'cind': clump-index (over all the catalog). */ cind = sr + coind; colarr = column->array; key = column->status; ci = &pp->ci[ coind * CCOL_NUMCOLS ]; /* Put the object ID of this clump into the temporary array that we will later need to sort the final clumps catalog. */ if(p->hostobjid_c) p->hostobjid_c[cind]=pp->object; /* Parse columns */ switch(key) { case UI_KEY_HOSTOBJID: ((int32_t *)colarr)[cind]=pp->object; break; case UI_KEY_IDINHOSTOBJ: ((int32_t *)colarr)[cind] = ( p->origclpid ? p->origclpid[pp->object][coind] : coind+1 ); break; case UI_KEY_AREA: ((int32_t *)colarr)[cind]=ci[CCOL_NUM]; break; case UI_KEY_AREAARCSEC2: ((float *)colarr)[cind]=ci[CCOL_NUM]*p->pixelarcsecsq; break; case UI_KEY_SB: ((float *)colarr)[cind]=MKC_SB(ci[CCOL_SUM], ci[CCOL_NUM]); break; case UI_KEY_SBERROR: ((float *)colarr)[cind]=SB_ERROR(p, ci, 1); break; case UI_KEY_AREAXY: ((int32_t *)colarr)[cind]=ci[CCOL_NUMXY]; break; case UI_KEY_WEIGHTAREA: ((int32_t *)colarr)[cind]=ci[CCOL_NUMWHT]; break; case UI_KEY_GEOAREA: ((int32_t *)colarr)[cind]=ci[CCOL_NUMALL]; break; case UI_KEY_GEOAREAXY: ((int32_t *)colarr)[cind]=ci[CCOL_NUMALLXY]; break; case UI_KEY_X: ((float *)colarr)[cind] = POS_V_G(ci, CCOL_SUMWHT, CCOL_NUMALL, CCOL_VX, CCOL_GX); break; case UI_KEY_Y: ((float *)colarr)[cind] = POS_V_G(ci, CCOL_SUMWHT, CCOL_NUMALL, CCOL_VY, CCOL_GY); break; case UI_KEY_Z: ((float *)colarr)[cind] = POS_V_G(ci, CCOL_SUMWHT, CCOL_NUMALL, CCOL_VZ, CCOL_GZ); break; case UI_KEY_GEOX: ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_GX], ci[CCOL_NUMALL] ); break; case UI_KEY_GEOY: ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_GY], ci[CCOL_NUMALL] ); break; case UI_KEY_GEOZ: ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_GZ], ci[CCOL_NUMALL] ); break; case UI_KEY_MINVALX: ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_MINVX], ci[CCOL_MINVNUM] ); break; case UI_KEY_MAXVALX: ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_MAXVX], ci[CCOL_MAXVNUM] ); break; case UI_KEY_MINVALY: ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_MINVY], ci[CCOL_MINVNUM] ); break; case UI_KEY_MAXVALY: ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_MAXVY], ci[CCOL_MAXVNUM] ); break; case UI_KEY_MINVALZ: ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_MINVZ], ci[CCOL_MINVNUM] ); break; case UI_KEY_MAXVALZ: ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_MAXVZ], ci[CCOL_MAXVNUM] ); break; case UI_KEY_MINVALNUM: ((uint32_t *)colarr)[cind] = ci[CCOL_MINVNUM]; break; case UI_KEY_MAXVALNUM: ((uint32_t *)colarr)[cind] = ci[CCOL_MAXVNUM]; break; case UI_KEY_MINX: ((uint32_t *)colarr)[cind]=ci[CCOL_MINX];break; case UI_KEY_MAXX: ((uint32_t *)colarr)[cind]=ci[CCOL_MAXX];break; case UI_KEY_MINY: ((uint32_t *)colarr)[cind]=ci[CCOL_MINY];break; case UI_KEY_MAXY: ((uint32_t *)colarr)[cind]=ci[CCOL_MAXY];break; case UI_KEY_MINZ: ((uint32_t *)colarr)[cind]=ci[CCOL_MINZ];break; case UI_KEY_MAXZ: ((uint32_t *)colarr)[cind]=ci[CCOL_MAXZ];break; case UI_KEY_W1: case UI_KEY_W2: case UI_KEY_W3: vc[0][cind] = POS_V_G(ci, CCOL_SUMWHT, CCOL_NUMALL, CCOL_VX, CCOL_GX); vc[1][cind] = POS_V_G(ci, CCOL_SUMWHT, CCOL_NUMALL, CCOL_VY, CCOL_GY); if(p->objects->ndim==3) vc[2][cind] = POS_V_G(ci, CCOL_SUMWHT, CCOL_NUMALL, CCOL_VZ, CCOL_GZ); break; case UI_KEY_GEOW1: case UI_KEY_GEOW2: case UI_KEY_GEOW3: gc[0][cind] = MKC_RATIO( ci[CCOL_GX], ci[CCOL_NUMALL] ); gc[1][cind] = MKC_RATIO( ci[CCOL_GY], ci[CCOL_NUMALL] ); if(p->objects->ndim==3) gc[2][cind] = MKC_RATIO( ci[CCOL_GZ], ci[CCOL_NUMALL] ); break; case UI_KEY_SUM: ((float *)colarr)[cind] = columns_clump_sum(ci); break; case UI_KEY_SUMERROR: ((float *)colarr)[cind] = columns_sum_error(p, ci, 1); break; case UI_KEY_SUMNORIVER: ((float *)colarr)[cind] = ( ci[ CCOL_NUM ]>0.0f ? ci[ CCOL_SUM ] : NAN ); break; case UI_KEY_MEAN: ((float *)colarr)[cind] = ( columns_clump_sum(ci) /ci[CCOL_NUM] ); break; case UI_KEY_STD: ((float *)colarr)[cind] = gal_statistics_std_from_sums(oi[ CCOL_SUM ], oi[ CCOL_SUMP2 ], oi[ CCOL_NUM ]); break; case UI_KEY_MEDIAN: ((float *)colarr)[cind] = ( ci[ CCOL_NUM ]>0.0f ? ci[ CCOL_MEDIAN ] : NAN ); break; case UI_KEY_MAXIMUM: ((float *)colarr)[cind] = ci[ CCOL_MAXIMUM ]; break; case UI_KEY_SIGCLIPNUMBER: ((int32_t *)colarr)[cind] = ci[ CCOL_SIGCLIPNUM ]; break; case UI_KEY_SIGCLIPMEDIAN: ((float *)colarr)[cind] = ci[ CCOL_SIGCLIPMEDIAN ]; break; case UI_KEY_SIGCLIPMEAN: ((float *)colarr)[cind] = ci[ CCOL_SIGCLIPMEAN ]; break; case UI_KEY_SIGCLIPSTD: ((float *)colarr)[cind] = ci[ CCOL_SIGCLIPSTD ]; break; case UI_KEY_SIGCLIPMEANSB: ((float *)colarr)[cind] = MKC_SB(ci[ CCOL_SIGCLIPMEAN ], 1); break; case UI_KEY_SIGCLIPMEANSBDELTA: ((float *)colarr)[cind] = SCLIP_SBERR(ci[ CCOL_SIGCLIPMEAN ], ci[ CCOL_SIGCLIPSTD ]); break; case UI_KEY_SIGCLIPSTDSB: ((float *)colarr)[cind] = MKC_SB(ci[ CCOL_SIGCLIPSTD ], 1); break; case UI_KEY_MAGNITUDE: /* Similar: brightness for clumps */ tmp = ( ci[ CCOL_RIV_NUM ] ? ci[ CCOL_RIV_SUM ]/ci[ CCOL_RIV_NUM ]*ci[ CCOL_NUM ] : 0 ); ((float *)colarr)[cind] = MKC_MAG(ci[ CCOL_SUM ]-tmp); break; case UI_KEY_MAGNITUDEERROR: ((float *)colarr)[cind] = MAG_ERROR(p, ci, 1); break; case UI_KEY_UPPERLIMIT: ((float *)colarr)[cind] = ci[ CCOL_UPPERLIMIT_B ]; break; case UI_KEY_UPPERLIMITMAG: ((float *)colarr)[cind] = MKC_MAG(ci[ CCOL_UPPERLIMIT_B ]); break; case UI_KEY_UPPERLIMITSB: ((float *)colarr)[cind] = MKC_SB( ci[ CCOL_UPPERLIMIT_B ], ci[ CCOL_NUMALL ] ); break; case UI_KEY_UPPERLIMITONESIGMA: ((float *)colarr)[cind] = ci[ CCOL_UPPERLIMIT_S ]; break; case UI_KEY_UPPERLIMITSIGMA: ((float *)colarr)[cind] = ( columns_clump_sum(ci) / ci[ CCOL_UPPERLIMIT_S ] ); break; case UI_KEY_UPPERLIMITQUANTILE: ((float *)colarr)[cind] = ci[ CCOL_UPPERLIMIT_Q ]; break; case UI_KEY_UPPERLIMITSKEW: ((float *)colarr)[cind] = ci[ CCOL_UPPERLIMIT_SKEW ]; break; case UI_KEY_RIVERMEAN: ((float *)colarr)[cind]=(ci[ CCOL_RIV_NUM] ? ci[ CCOL_RIV_SUM ]/ci[ CCOL_RIV_NUM] : NAN ); break; case UI_KEY_RIVERMIN: ((float *)colarr)[cind] = ( ci[ CCOL_RIV_NUM] ? ci[ CCOL_RIV_MIN ] : NAN ); break; case UI_KEY_RIVERMAX: ((float *)colarr)[cind] = ( ci[ CCOL_RIV_NUM] ? ci[ CCOL_RIV_MAX ] : NAN ); break; case UI_KEY_RIVERNUM: ((int32_t *)colarr)[cind] = ci[ CCOL_RIV_NUM ]; break; case UI_KEY_SN: ((float *)colarr)[cind] = columns_sn(p, ci, 1); break; case UI_KEY_SKY: ((float *)colarr)[cind] = MKC_RATIO( ci[ CCOL_SUMSKY], ci[ CCOL_NUMSKY] ); break; case UI_KEY_SKYSTD: ((float *)colarr)[cind] = sqrt( MKC_RATIO(ci[ CCOL_SUMVAR ], ci[ CCOL_NUMVAR ])); break; case UI_KEY_SEMIMAJOR: ((float *)colarr)[cind] = columns_second_order(pp, ci, key, 1); break; case UI_KEY_SEMIMINOR: ((float *)colarr)[cind] = columns_second_order(pp, ci, key, 1); break; case UI_KEY_AXISRATIO: ((float *)colarr)[cind] = ( columns_second_order( pp, ci, UI_KEY_SEMIMINOR, 1) / columns_second_order(pp, ci, UI_KEY_SEMIMAJOR, 1) ); break; case UI_KEY_POSITIONANGLE: ((float *)colarr)[cind] = columns_second_order(pp, ci, key, 1); break; case UI_KEY_GEOSEMIMAJOR: ((float *)colarr)[cind] = columns_second_order(pp, ci, key, 1); break; case UI_KEY_GEOSEMIMINOR: ((float *)colarr)[cind] = columns_second_order(pp, ci, key, 1); break; case UI_KEY_GEOAXISRATIO: ((float *)colarr)[cind] = ( columns_second_order( pp, ci, UI_KEY_GEOSEMIMINOR, 1) / columns_second_order(pp, ci, UI_KEY_GEOSEMIMAJOR, 1) ); break; case UI_KEY_GEOPOSITIONANGLE: ((float *)colarr)[cind] = columns_second_order(pp, ci, key, 1); break; case UI_KEY_HALFSUMAREA: ((int32_t *)colarr)[cind] = ci[CCOL_HALFSUMNUM]; break; case UI_KEY_HALFMAXAREA: ((int32_t *)colarr)[cind] = ci[CCOL_HALFMAXNUM]; break; case UI_KEY_HALFMAXSUM: ((float *)colarr)[cind] = ci[CCOL_HALFMAXSUM]; break; case UI_KEY_HALFMAXSB: ((float *)colarr)[cind] = MKC_SB( ci[CCOL_HALFMAXSUM], ci[CCOL_HALFMAXNUM] ); break; case UI_KEY_FRACMAX1SUM: ((int32_t *)colarr)[cind] = ci[CCOL_FRACMAX1SUM]; break; case UI_KEY_FRACMAX2SUM: ((int32_t *)colarr)[cind] = ci[CCOL_FRACMAX2SUM]; break; case UI_KEY_FRACMAX1AREA: ((int32_t *)colarr)[cind] = ci[CCOL_FRACMAX1NUM]; break; case UI_KEY_FRACMAX2AREA: ((int32_t *)colarr)[cind] = ci[CCOL_FRACMAX2NUM]; break; case UI_KEY_HALFSUMSB: ((float *)colarr)[cind] = MKC_SB( ci[CCOL_SUM]/2.0f, ci[CCOL_HALFSUMNUM] ); break; case UI_KEY_FWHM: case UI_KEY_HALFMAXRADIUS: case UI_KEY_HALFSUMRADIUS: case UI_KEY_FRACMAX1RADIUS: case UI_KEY_FRACMAX2RADIUS: tmp = ( columns_second_order( pp, ci, UI_KEY_SEMIMINOR, 1) / columns_second_order(pp, ci, UI_KEY_SEMIMAJOR, 1) ); switch(key) { case UI_KEY_FWHM: tmpind=CCOL_HALFMAXNUM; break; case UI_KEY_HALFMAXRADIUS: tmpind=CCOL_HALFMAXNUM; break; case UI_KEY_HALFSUMRADIUS: tmpind=CCOL_HALFSUMNUM; break; case UI_KEY_FRACMAX1RADIUS: tmpind=CCOL_FRACMAX1NUM; break; case UI_KEY_FRACMAX2RADIUS: tmpind=CCOL_FRACMAX2NUM; break; } tmp = sqrt( ci[tmpind]/(tmp*M_PI) ); if(key==UI_KEY_FWHM) ((float *)colarr)[cind] = tmp<1e-6 ? NAN : (tmp*2); else ((float *)colarr)[cind] = tmp<1e-6 ? NAN : tmp; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "solve the problem. The output column code %d not " "recognized (for clumps). ", __func__, PACKAGE_BUGREPORT, key); } } /* Clean up. */ if(vo) free(vo); if(vc) free(vc); if(go) free(go); if(gc) free(gc); if(vcc) free(vcc); if(gcc) free(gcc); } gnuastro-0.22/bin/mkcatalog/upperlimit.c0000644000175000017500000007045014551337306014045 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "mkcatalog.h" /*********************************************************************/ /******************* Tiles for clumps ********************/ /*********************************************************************/ static gal_data_t * upperlimit_make_clump_tiles(struct mkcatalog_passparams *pp) { gal_data_t *objects=pp->p->objects; size_t ndim=objects->ndim, *tsize=pp->tile->dsize; gal_data_t *tiles=NULL; size_t increment=0, num_increment=1; size_t i, d, *min, *max, width=2*ndim; int32_t *O, *OO, *C, *start=objects->array; size_t *coord=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "coord"); size_t *minmax=gal_pointer_allocate(GAL_TYPE_SIZE_T, width*pp->clumpsinobj, 0, __func__, "minmax"); /* Initialize the minimum and maximum position for each tile/clump. So, we'll initialize the minimum coordinates to the maximum possible 'size_t' value (in 'GAL_BLANK_SIZE_T') and the maximums to zero. */ for(i=0;iclumpsinobj;++i) for(d=0;dstart_end_inc[0] + increment <= pp->start_end_inc[1] ) { /* Set the pointers for this tile. */ C = pp->st_c + increment; OO = ( O = pp->st_o + increment ) + tsize[ndim-1]; /* Go over the contiguous region. */ do { /* Only consider clumps. */ if( *O==pp->object && *C>0 ) { /* Get the coordinates of this pixel. */ gal_dimension_index_to_coord(O-start, ndim, objects->dsize, coord); /* Check to see if this coordinate is the smallest/largest found so far for this label. Note that labels start from 1, while indexs here start from zero. */ min = &minmax[ (*C-1) * width ]; max = &minmax[ (*C-1) * width + ndim ]; for(d=0;d max[d] ) max[d] = coord[d]; } } /* Increment the other pointers. */ ++C; } while(++Oclumpsinobj;++i) printf("%zu: (%zu, %zu) --> (%zu, %zu)\n", i+1, minmax[i*width], minmax[i*width+1], minmax[i*width+2], minmax[i*width+3]); */ /* Make the tiles. */ tiles=gal_tile_series_from_minmax(objects, minmax, pp->clumpsinobj); /* Cleanup and return. */ free(coord); free(minmax); return tiles; } /*********************************************************************/ /******************* For one tile ********************/ /*********************************************************************/ /* Set the minimum and maximum possible range to place the FIRST pixel of the object/clump tile over the dataset. */ static void upperlimit_random_range(struct mkcatalog_passparams *pp, gal_data_t *tile, size_t *min, size_t *max, int32_t clumplab) { struct mkcatalogparams *p=pp->p; size_t d, tstart, minext, maxext, coord[]={0,0}; size_t ndim=p->objects->ndim, *dsize=p->objects->dsize; /* Set the minimum and maximum acceptable value for the range. */ if(p->uprange) { tstart=gal_pointer_num_between(tile->block->array, tile->array, p->objects->type); gal_dimension_index_to_coord(tstart, ndim, dsize, coord); } /* Go over the dimensions and set the range along each dimension. */ for(d=0;duprange && p->uprange[d] ) { /* Set the minimum of the random range. Since 'size_t' is always positive, to make sure the difference isn't negative, we need to convert them to integer first. */ if( (int)coord[d] - ((int)p->uprange[d])/2 > 0 ) { min[d] = coord[d]-p->uprange[d]/2; maxext = 0; } else { min[d] = 0; maxext = -1 * ((int)coord[d] - ((int)p->uprange[d])/2); } /* Set the maximum of the random range. */ if( coord[d] + p->uprange[d]/2 < dsize[d] - tile->dsize[d] ) { max[d] = coord[d] + p->uprange[d]/2; minext = 0; } else { max[d] = dsize[d] - tile->dsize[d] - 1; minext = ( (coord[d] + p->uprange[d]/2) - (dsize[d] - tile->dsize[d]) ); } /* 'minadd' and 'maxadd' were defined to account for the removed smaller range when an object is on the edge. Their role is to add to the other side of the range as much as possible when one side is decreased on an edge. */ if(minext) min[d] = ((int)(min[d]) - (int)minext >= 0) ? (min[d]-minext) : 0; if(maxext) max[d] = ( (max[d] + maxext < dsize[d] - tile->dsize[d]) ? (max[d] + maxext) : (dsize[d]-tile->dsize[d]-1) ); } else { /* We are positioning the FIRST pixel of the tile, not the center. So, the minimum possible value is zero, and in order to not push out of the image, the maximum is the 'tile->dsize[d]' away from the edge. */ min[d]=0; max[d]=dsize[d]-tile->dsize[d]-1; } /* A small warning to the user if the range isn't large enough. */ if( max[d]-min[d] < 2*tile->dsize[d] ) { p->uprangewarning=1; if(clumplab) fprintf(stderr, "WARNING-UPPERLIMIT: object %d clump %d, " "dimension %zu: range (%zu) < 2*size (%zu).\n", pp->object, clumplab, ndim-d, max[d]-min[d], 2*tile->dsize[d]); else fprintf(stderr, "WARNING-UPPERLIMIT: object %d, dimension %zu: " "range (%zu) < 2*size (%zu).\n", pp->object, ndim-d, max[d]-min[d], 2*tile->dsize[d]); } } } /* Return a random position in the requested dimension. */ static size_t upperlimit_random_position(struct mkcatalog_passparams *pp, gal_data_t *tile, size_t dim, size_t *min, size_t *max) { size_t r; struct mkcatalogparams *p=pp->p; /* 'gsl_rng_get' returns an inclusive value between the minimum and maximum of the particular generator. It may happen that the labeled region extends the full range of a dimension. In that case, the only possible starting point would be 0. */ if( (int)(p->objects->dsize[dim]) - (int)(tile->dsize[dim]) > 0 ) { r=gsl_rng_get(pp->rng); /* For easy reading. */ return lrint( (float)(min[dim]) + ( (float)(r-p->rngmin)/(float)(p->rngdiff) * (float)(max[dim] - min[dim]) ) ); } else return 0; } /* It is necessary to write the upperlimit parameters into the output tables. The same set of information will thus be necessary both in the upperlimit check table and also the final output. This function will do the job in both cases. Note that in the check output, the sigma-clipping information is not used/necessary, so to avoid confusion, we won't write it. */ void upperlimit_write_keys(struct mkcatalogparams *p, gal_fits_list_key_t **keylist, int withsigclip) { /* Write a title for */ gal_fits_key_list_title_add_end(keylist, "Upper-limit (UP) parameters", 0); /* Basic settings. */ gal_fits_key_list_add_end(keylist, GAL_TYPE_FLOAT32, "UPNSIGMA", 0, &p->upnsigma, 0, "Multiple of sigma to measure upper-limit.", 0, NULL, 0); gal_fits_key_list_add_end(keylist, GAL_TYPE_SIZE_T, "UPNUMBER", 0, &p->upnum, 0, "Number of usable random samples.", 0, "counter", 0); gal_fits_key_list_add_end(keylist, GAL_TYPE_STRING, "UPRNGNAM", 0, (void *)(p->rng_name), 0, "Random number generator name.", 0, NULL, 0); mkcatalog_outputs_keys_numeric(keylist, &p->rng_seed, GAL_TYPE_ULONG, "UPRNGSEE", "Random number generator seed.", NULL); /* Range of upper-limit values. */ if(p->uprange) { gal_fits_key_list_add_end(keylist, GAL_TYPE_SIZE_T, "UPRANGE1", 0, &p->uprange[p->objects->ndim-1], 0, "Range about target in axis 1.", 0, "pixels", 0); gal_fits_key_list_add_end(keylist, GAL_TYPE_STRING, "UPRANGE2", 0, &p->uprange[p->objects->ndim==2 ? 0 : 1], 0, "Range about target in axis 2.", 0, "pixels", 0); if(p->objects->ndim==3) gal_fits_key_list_add_end(keylist, GAL_TYPE_STRING, "UPRANGE3", 0, &p->uprange[0], 0, "Range about target in axis 3.", 0, "pixels", 0); } /* If the upper-limit measurement included sigma-clipping. */ if(withsigclip) { gal_fits_key_list_add_end(keylist, GAL_TYPE_FLOAT64, "UPSCMLTP", 0, &p->upsigmaclip[0], 0, "Multiple of STD used for sigma-clipping.", 0, NULL, 0); if(p->upsigmaclip[1]>=1.0f) gal_fits_key_list_add_end(keylist, GAL_TYPE_FLOAT64, "UPSCNUM", 0, &p->upsigmaclip[1], 0, "Number of clips for sigma-clipping.", 0, NULL, 0); else gal_fits_key_list_add_end(keylist, GAL_TYPE_FLOAT64, "UPSCTOL", 0, &p->upsigmaclip[1], 0, "Tolerance level to sigma-clipping.", 0, NULL, 0); } } /* Write the values into a table for the user */ static void upperlimit_write_check(struct mkcatalogparams *p, gal_list_sizet_t *check_x, gal_list_sizet_t *check_y, gal_list_sizet_t *check_z, gal_list_f32_t *check_s) { float *sarr; gal_fits_list_key_t *keylist=NULL; size_t *xarr, *yarr, *zarr=NULL, tnum, ttnum, num; gal_data_t *x=NULL, *y=NULL, *z=NULL, *s=NULL; /* To avoid warnings. */ /* Convert the lists to an array. */ xarr=gal_list_sizet_to_array(check_x, 1, &num); yarr=gal_list_sizet_to_array(check_y, 1, &tnum); if(check_z) zarr=gal_list_sizet_to_array(check_z, 1, &ttnum); if(tnum!=num || (check_z && ttnum!=num) ) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. For some reason the size of the input lists don't " "match (%zu, %zu)", __func__, PACKAGE_BUGREPORT, tnum, num); sarr=gal_list_f32_to_array(check_s, 1, &tnum); if(tnum!=num) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. For some reason the size of the input lists don't " "match (%zu, %zu)", __func__, PACKAGE_BUGREPORT, tnum, num); /* Put the arrays into a data container. */ x=gal_data_alloc(xarr, GAL_TYPE_SIZE_T, 1, &num, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, "RANDOM_X", "pixel", "X-axis position of random footprint's first pixel."); y=gal_data_alloc(yarr, GAL_TYPE_SIZE_T, 1, &num, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, "RANDOM_Y", "pixel", "Y-axis position of random footprint's first pixel."); if(check_z) z=gal_data_alloc(zarr, GAL_TYPE_SIZE_T, 1, &num, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, "RANDOM_Z", "pixel", "Z-axis position of random footprint's first pixel."); s=gal_data_alloc(sarr, GAL_TYPE_FLOAT32, 1, &num, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, "RANDOM_SUM", p->values->unit ? p->values->unit : MKCATALOG_NO_UNIT, "Sum of pixel values over random footprint."); /* If 'size_t' isn't 32-bit on this system, then convert the unsigned 64-bit values to 32-bit because the FITS table format doesn't recognize 64-bit integers.*/ if( GAL_TYPE_SIZE_T != GAL_TYPE_UINT32 ) { x=gal_data_copy_to_new_type_free( x, GAL_TYPE_UINT32); y=gal_data_copy_to_new_type_free( y, GAL_TYPE_UINT32); if(check_z) z=gal_data_copy_to_new_type_free( z, GAL_TYPE_UINT32); } /* Write exactly what object/clump this table is for. */ gal_fits_key_list_title_add_end(&keylist, "Target for upper-limit " "check", 0); mkcatalog_outputs_keys_numeric(&keylist, &p->checkuplim[0], GAL_TYPE_INT32, "UPCHKOBJ", "Object label for upper-limit check " "target.", NULL); if( p->checkuplim[1]!=GAL_BLANK_INT32 ) mkcatalog_outputs_keys_numeric(&keylist, &p->checkuplim[1], GAL_TYPE_INT32, "UPCHKCLU", "Clump label for upper-limit check " "target.", NULL); /* Write the basic info, and conclude the keywords. */ mkcatalog_outputs_keys_infiles(p, &keylist); upperlimit_write_keys(p, &keylist, 0); if(p->cp.tableformat==GAL_TABLE_FORMAT_TXT) gal_fits_key_list_title_add_end(&keylist, "Column metadata", 0); /* Define a list from the containers and write them into a table. */ x->next=y; if(check_z) { y->next=z; z->next=s; } else { y->next=s; } gal_table_write(x, keylist, NULL, p->cp.tableformat, p->upcheckout, "UPPERLIMIT_CHECK", 0, 1); /* Inform the user. */ if(!p->cp.quiet) printf(" - Upperlimit check table: %s\n", p->upcheckout); /* Clean up. */ gal_data_free(x); gal_data_free(y); gal_data_free(s); if(check_z) gal_data_free(z); } /* Given the distribution of values, do the upper-limit calculations. */ static void upperlimit_measure(struct mkcatalog_passparams *pp, int32_t clumplab, int do_measurement) { gal_data_t *column; float *mcarr, mcstd; size_t init_size, col, one=1; struct mkcatalogparams *p=pp->p; gal_data_t *sum, *qfunc=NULL, *madclip=NULL; double *o = ( clumplab ? &pp->ci[ (clumplab-1) * CCOL_NUMCOLS ] : pp->oi ); uint8_t clipflags = ( GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN \ | GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD \ | GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MAD ); /* If the random distribution exsits, then fill it in. */ if(do_measurement) { /* These columns are for both objects and clumps, so if they are requested in objects, they will also be written for clumps here (the order is irrelevant here). */ for(column=p->objectcols; column!=NULL; column=column->next) { switch(column->status) { /* Quantile column. */ case UI_KEY_UPPERLIMITQUANTILE: /* Also only necessary once (if requested multiple times). */ if(qfunc==NULL) { /* Similar to the case for sigma-clipping, we'll need to keep the size here also. */ init_size=pp->up_vals->size; sum=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); ((float *)(sum->array))[0]=o[clumplab?CCOL_SUM:OCOL_SUM]; qfunc=gal_statistics_quantile_function(pp->up_vals, sum, 1); /* Fill in the column. */ col = clumplab ? CCOL_UPPERLIMIT_Q : OCOL_UPPERLIMIT_Q; pp->up_vals->size=pp->up_vals->dsize[0]=init_size; o[col] = ((double *)(qfunc->array))[0]; /* Clean up. */ gal_data_free(sum); gal_data_free(qfunc); } break; /* Columns that depend on the sigma of the distribution. */ default: /* We only need to do this once, but the columns can be requested in any order. */ if(madclip==NULL) { /* Calculate the sigma-clipped standard deviation. Since it is done in place, the size will change, so we'll keep the size here and put it back after we are done. */ init_size=pp->up_vals->size; madclip=gal_statistics_clip_sigma(pp->up_vals, p->upsigmaclip[0], p->upsigmaclip[1], clipflags, 1, 1); pp->up_vals->size=pp->up_vals->dsize[0]=init_size; mcarr=madclip->array; /* 1-sigma. */ mcstd=mcarr[GAL_STATISTICS_CLIP_OUTCOL_STD]; col = clumplab ? CCOL_UPPERLIMIT_S : OCOL_UPPERLIMIT_S; o[col] = mcstd; /* sigma multiplied by 'upnsigma'. */ col = clumplab ? CCOL_UPPERLIMIT_B : OCOL_UPPERLIMIT_B; o[col] = mcstd * p->upnsigma; /* Nonparametric skewness [ (Mean-Median)/STD ]. */ col = clumplab?CCOL_UPPERLIMIT_SKEW:OCOL_UPPERLIMIT_SKEW; o[col] = ( ( mcarr[GAL_STATISTICS_CLIP_OUTCOL_MEAN] - mcarr[GAL_STATISTICS_CLIP_OUTCOL_MEDIAN] ) / mcstd ); } break; } } /* Clean up. */ gal_data_free(madclip); } else { o[ clumplab ? CCOL_UPPERLIMIT_B : OCOL_UPPERLIMIT_B ] = NAN; o[ clumplab ? CCOL_UPPERLIMIT_S : OCOL_UPPERLIMIT_S ] = NAN; o[ clumplab ? CCOL_UPPERLIMIT_Q : OCOL_UPPERLIMIT_Q ] = NAN; } } static void upperlimit_one_tile(struct mkcatalog_passparams *pp, gal_data_t *tile, unsigned long seed, int32_t clumplab) { struct mkcatalogparams *p=pp->p; size_t ndim=p->objects->ndim, *dsize=p->objects->dsize; double sum; void *tarray; uint8_t *M=NULL, *st_m=NULL; int continueparse, writecheck=0; struct gal_list_f32_t *check_s=NULL; size_t d, counter=0, se_inc[2], nfailed=0; float *V, *st_v, *uparr=pp->up_vals->array; size_t min[3], max[3], increment, num_increment; int32_t *O, *OO, *oO, *st_o, *st_oo, *st_oc, *oC=NULL; size_t hw2, hw0=tile->dsize[0]/2, hw1=tile->dsize[1]/2; size_t maxfails = p->upnum * MKCATALOG_UPPERLIMIT_MAXFAILS_MULTIP; struct gal_list_sizet_t *check_x=NULL, *check_y=NULL, *check_z=NULL; size_t *rcoord=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "rcoord"); /* See if a check table must be created for this distribution. */ if( p->checkuplim[0]==pp->object ) { /* We are on a clump */ if( clumplab ) { if( p->checkuplim[1]==clumplab ) writecheck=1; } else if( p->checkuplim[1]==GAL_BLANK_INT32 ) writecheck=1; } /* Initializations. */ tarray=tile->array; gsl_rng_set(pp->rng, seed); pp->up_vals->flag &= ~GAL_DATA_FLAG_SORT_CH; hw2 = tile->ndim==3 ? tile->dsize[2]/2 : GAL_BLANK_SIZE_T; /* Set the range of random values for this tile. */ upperlimit_random_range(pp, tile, min, max, clumplab); /* 'se_inc' is just used temporarily, the important thing here is 'st_oo'. */ st_oo = ( clumplab ? gal_tile_start_end_ind_inclusive(tile, p->objects, se_inc) : pp->st_o ); st_oc = clumplab ? (int32_t *)(p->clumps->array) + se_inc[0] : NULL; /* Continue measuring randomly until we get the desired total number. */ while(nfailedupnum) { /* Get the random coordinates. */ for(d=0;darray = gal_pointer_increment(p->objects->array, gal_dimension_coord_to_index(ndim, dsize, rcoord), p->objects->type); /* Starting and ending coordinates for this random position, note that in 'pp' we have the starting and ending coordinates of the actual tile. */ increment = 0; num_increment = 1; continueparse = 1; sum = 0.0f; /* Starting pointers for the random tile. */ st_v = gal_tile_start_end_ind_inclusive(tile, p->values, se_inc); st_o = (int32_t *)(p->objects->array) + se_inc[0]; if(p->upmask) st_m = (uint8_t *)(p->upmask->array) + se_inc[0]; /* Parse over this object/clump. */ while( se_inc[0] + increment <= se_inc[1] ) { /* Set the pointers. */ V = st_v + increment; /* Random tile. */ O = st_o + increment; /* Random tile. */ if(st_m) M = st_m + increment; /* Random tile. */ oO = st_oo + increment; /* Original tile. */ if(clumplab) oC = st_oc + increment; /* Original tile. */ /* Parse over this contiguous region, similar to the first and second pass functions. */ OO = O + tile->dsize[ndim-1]; do { /* Only use pixels over this object/clump. */ if( *oO==pp->object && ( oC==NULL || *oC==clumplab ) ) { /* If this pixel is a non-zero object code, or is masked, or has a blank value, then stop parsing. */ if( *O || (M && *M) || ( p->hasblank && isnan(*V) ) ) continueparse=0; else sum += *V; } /* Increment the other pointers. */ ++V; ++oO; if(M) ++M; if(oC) ++oC; } while(continueparse && ++Oobjects, dsize, num_increment++, NULL) ); else break; } /* Further processing is only necessary if this random tile was fully parsed. If it was, we must reset 'nfailed' to zero again. */ if(continueparse) { nfailed=0; uparr[ counter++ ] = sum; } else ++nfailed; /* If a check is necessary, put the center of the tile independent of the values/labels (in FITS coordinates). Note that 'rcoord' is the position of the first pixel of the tile, so we need to add half the width of the tile (the 'hw*' variables). */ if(writecheck) { switch(ndim) { case 2: gal_list_sizet_add(&check_x, rcoord[1]+1 + hw1); gal_list_sizet_add(&check_y, rcoord[0]+1 + hw0); break; case 3: gal_list_sizet_add(&check_x, rcoord[2]+1 + hw2); gal_list_sizet_add(&check_y, rcoord[1]+1 + hw1); gal_list_sizet_add(&check_z, rcoord[0]+1 + hw0); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "to fix the problem. 'ndim' value of %zu is not " "recognized", __func__, PACKAGE_BUGREPORT, ndim); } gal_list_f32_add(&check_s, continueparse ? sum : NAN); } } /* If a check is necessary, then write the values. */ if(writecheck) upperlimit_write_check(p, check_x, check_y, check_z, check_s); /* Do the measurement on the random distribution. */ upperlimit_measure(pp, clumplab, counter==p->upnum); /* Reset the tile's array pointer, clean up and return. */ free(rcoord); tile->array=tarray; gal_list_f32_free(check_s); gal_list_sizet_free(check_x); gal_list_sizet_free(check_y); } /*********************************************************************/ /******************* High level function ********************/ /*********************************************************************/ void upperlimit_calculate(struct mkcatalog_passparams *pp) { size_t i; unsigned long seed; gal_data_t *clumptiles; struct mkcatalogparams *p=pp->p; /* First find the upper limit magnitude for this object. */ upperlimit_one_tile(pp, pp->tile, p->rng_seed+pp->object, 0); /* If a clumps image is present (a clump catalog is requested) and this object has clumps, then find the upper limit magnitude for the clumps within this object. */ if(p->clumps && pp->clumpsinobj) { /* If an upper-limit check image is requested, then make sure that the clump label is not more than the number of clumps in this object. */ if( p->checkuplim[0] == pp->object && p->checkuplim[1] != GAL_BLANK_INT32 && p->checkuplim[1] > pp->clumpsinobj ) error(EXIT_FAILURE, 0, "object %d has %zu clumps, but an upperlimit " "check table (using the '--checkuplim' option) has been " "requested for clump %d", pp->object, pp->clumpsinobj, p->checkuplim[1]); /* Make tiles covering the clumps. */ clumptiles=upperlimit_make_clump_tiles(pp); /* Go over all the clumps. The random number generator seed for each clump/object has to be unique, but also reproducible (given the intial seed and identical inputs). So we have defined it based on the total number of objects and clumps and this object and clump's IDs. */ for(i=0;iclumpsinobj;++i) { seed = p->rng_seed + p->numobjects + p->numclumps * pp->object + i; upperlimit_one_tile(pp, &clumptiles[i], seed, i+1); } /* Clean up the clump tiles. */ gal_data_array_free(clumptiles, pp->clumpsinobj, 0); } } gnuastro-0.22/bin/mkcatalog/parse.c0000644000175000017500000017350114551337306012766 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "mkcatalog.h" #include "parse.h" /* Both passes are going to need their starting pointers set, so we'll do that here. */ void parse_initialize(struct mkcatalog_passparams *pp) { struct mkcatalogparams *p=pp->p; gal_data_t *vec; size_t i, ndim=p->objects->ndim; size_t *start_end=pp->start_end_inc; /* Initialize the number of clumps in this object. */ pp->clumpsinobj=0; /* Initialize the intermediate values to zero. */ memset(pp->oi, 0, OCOL_NUMCOLS * sizeof *pp->oi); if(pp->vector) for(i=0;ivector[i]); if(pp->vector[i].array) memset(vec->array, 0, vec->size*gal_type_sizeof(vec->type)); } /* Set the shifts in every dimension to avoid round-off errors in large numbers for the non-linear calculations. We are using the first pixel of each object's tile as the shift parameter to keep the mean (average) reasonably near to the standard deviation. Otherwise, when the object is far out in the image (large x and y positions), then roundoff errors are going to decrease the accuracy of the second order calculations. */ if(pp->shift) { /* Get the coordinates of the tile's starting point. */ gal_dimension_index_to_coord(( (float *)(pp->tile->array) - (float *)(pp->tile->block->array) ), ndim, p->objects->dsize, pp->shift); /* Change their counting to start from 1, not zero, since we will be using them as FITS coordinates. */ for(i=0;ishift[i]; } /* Set the starting and ending indexs of this tile/object on all (the possible) input arrays. */ pp->st_o = gal_tile_start_end_ind_inclusive(pp->tile, p->objects, start_end); pp->st_c = (p->clumps ? (int32_t *)(p->clumps->array) + start_end[0] : NULL); pp->st_v = (p->values ? (float *)(p->values->array) + start_end[0] : NULL); pp->st_sky = ( p->sky ? ( p->sky->size==p->objects->size ? (float *)(p->sky->array) + start_end[0] : NULL ) : NULL); pp->st_std = ( p->std ? ( p->std->size==p->objects->size ? (float *)(p->std->array) + start_end[0] : NULL ) : NULL ); } static size_t * parse_vector_dim3_prepare(struct mkcatalog_passparams *pp, size_t *start_end_inc, int32_t **st_o, float **st_v, float **st_std) { size_t *tsize; gal_data_t *spectile; struct mkcatalogparams *p=pp->p; size_t coord[3], minmax[6]; /* Get the coordinates of the spectral tile's starting element, then make the tile. */ gal_dimension_index_to_coord(gal_pointer_num_between(p->objects->array, pp->tile->array, p->objects->type), p->objects->ndim, p->objects->dsize, coord); minmax[0]=0; /* Changed to first slice.*/ minmax[1]=coord[1]; minmax[2]=coord[2]; minmax[3]=p->objects->dsize[0]-1; /* Changed to last slice. */ minmax[4]=coord[1]+pp->tile->dsize[1]-1; minmax[5]=coord[2]+pp->tile->dsize[2]-1; spectile=gal_tile_series_from_minmax(p->objects, minmax, 1); /* Find the starting (and ending) pointers on each of the datasets. */ *st_o = gal_tile_start_end_ind_inclusive(spectile, p->objects, start_end_inc); *st_v = (float *)(p->values->array) + start_end_inc[0]; *st_std = ( p->std ? ( p->std->size==p->objects->size ? (float *)(p->std->array) + start_end_inc[0] : NULL ) : NULL ); /* Clean up and return. */ tsize=spectile->dsize; spectile->dsize=NULL; gal_data_free(spectile); return tsize; } static void parse_vector_dim3(struct mkcatalog_passparams *pp, gal_data_t *xybin) { struct mkcatalogparams *p=pp->p; double var; int needsvar; gal_data_t *vector=pp->vector; float *std=p->std?p->std->array:NULL; size_t c[3], *dsize=p->objects->dsize; size_t sind=0, pind=0, num_increment=1; uint8_t *xybinarr = xybin ? xybin->array : NULL; float st, sval, *st_v, *st_std, *V=NULL, *ST=NULL; int32_t *st_o, *O, *OO, *objarr=p->objects->array; size_t tid, *tsize, increment=0, start_end_inc[2], ndim=p->objects->ndim; /* Pointers to necessary temporary arrays (they will be NULL if they are not necessary for the user). */ double *suminslice = vector[ VEC_SUMINSLICE ].array; double *sumvarinslice = vector[ VEC_SUMVARINSLICE ].array; double *sumprojinslice = vector[ VEC_SUMPROJINSLICE ].array; double *sumprojvarinslice = vector[ VEC_SUMPROJVARINSLICE ].array; double *sumotherinslice = vector[ VEC_SUMOTHERINSLICE ].array; double *sumothervarinslice = vector[ VEC_SUMOTHERVARINSLICE ].array; int32_t *numinslice = vector[ VEC_NUMINSLICE ].array; int32_t *numallinslice = vector[ VEC_NUMALLINSLICE ].array; int32_t *numprojinslice = vector[ VEC_NUMPROJINSLICE ].array; int32_t *numotherinslice = vector[ VEC_NUMOTHERINSLICE ].array; int32_t *numallotherinslice = vector[ VEC_NUMALLOTHERINSLICE ].array; /* Prepare the parsing information. Also, if tile-id isn't necessary, set 'tid' to a blank value to cause a crash with a mistake. */ tsize=parse_vector_dim3_prepare(pp, start_end_inc, &st_o, &st_v, &st_std); tid = (p->std && p->std->size>1 && st_std == NULL)?0:GAL_BLANK_SIZE_T; /* Check if we need the variance. */ needsvar = ( sumvarinslice || sumprojvarinslice || sumothervarinslice ? 1 : 0 ); if(needsvar && p->std==NULL) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to fix " "the problem. The requested column requires a variance " "estimation, but the input standard deviation image is NULL", __func__, PACKAGE_BUGREPORT); /* Parse each contiguous patch of memory covered by this object. */ while( start_end_inc[0] + increment <= start_end_inc[1] ) { /* Set the contiguous range to parse. The pixel-to-pixel counting along the fastest dimension will be done over the 'O' pointer. */ if( p->values ) V = st_v + increment; if( p->std && st_std ) ST = st_std + increment; OO = ( O = st_o + increment ) + pp->tile->dsize[ndim-1]; /* Parse the "tile" for this label. */ do { /* Counters that don't depend on value. */ if(numallinslice) ++numallinslice[sind]; if(*O!=pp->object && numallotherinslice) ++numallotherinslice[sind]; /* Only continue if this voxel is on a label and is useful (it isn't NaN). */ if( !isnan(*V) ) { /* Variance of this voxel (if necessary) */ if(needsvar) { /* If the standard deviation is given on a tile structure, estimate the tile ID. */ if(tid != GAL_BLANK_SIZE_T) { gal_dimension_index_to_coord(O-objarr, ndim, dsize, c); tid=gal_tile_full_id_from_coord(&p->cp.tl, c); } /* Get the error associated with this voxel. Note that if we are given a variance dataset already, there is no need to use 'st*st', we can directly use 'sval'. */ sval = st_std ? *ST : (p->std->size>1?std[tid]:std[0]); st = p->variance ? sqrt(sval) : sval; var = (p->variance ? sval : st*st) + fabs(*V); } else var = NAN; /* Only on this label. */ if(*O==pp->object) /* We are on this object. */ { if(numinslice) ++numinslice[sind]; if(suminslice) suminslice[sind] += *V; if(sumvarinslice) sumvarinslice[sind] += var; } /* Projected measurements: see if we have a value of '2' in the 'xybin' array (showing that there is atleast one non-blank element there over the whole spectrum. */ if(xybin && xybinarr[pind]==2) { /* Raw measurements over the projection. */ if(numprojinslice) ++numprojinslice[sind]; if(sumprojinslice) sumprojinslice[sind] += *V; if(sumprojvarinslice) sumprojvarinslice[sind] += var; /* Other labels over this projection. */ if(*O!=pp->object) { if(numotherinslice) ++numotherinslice[sind]; if(sumotherinslice) sumotherinslice[sind] += *V; if(sumothervarinslice)sumothervarinslice[sind]+=var; } } } /* Values used, increment the pointrs for next voxel. */ if( xybin ) ++pind; if( p->values ) ++V; if( p->std && st_std ) ++ST; } while(++Oobjects, tsize, num_increment++, NULL) ); /* If we have reached the end of one slice, increment the slice index ('sind'), and reset the projection (2D) index 'pind' if we have just finished parsing a slice. Also, set all the sum values that didn't have any measurement to NAN. */ if( (num_increment-1)%pp->tile->dsize[1]==0 ) { /* If there was no measurement, set NaN for the values and their errors (zero is meaningful). */ if(numinslice && numinslice[sind]==0) suminslice[sind]=NAN; if(numprojinslice && numprojinslice[sind]==0) sumprojinslice[sind]=NAN; if(numotherinslice && numotherinslice[sind]==0) sumotherinslice[sind]=NAN; /* Set the projection-index to zero (since it counts on each slice), and increment the slice-index. */ pind=0; ++sind; } } /* Clean up and return. */ free(tsize); } void parse_objects(struct mkcatalog_passparams *pp) { uint8_t *oif=pp->p->oiflag; struct mkcatalogparams *p=pp->p; size_t ndim=p->objects->ndim, *dsize=p->objects->dsize; double *oi=pp->oi; gal_data_t *xybin=NULL; size_t *tsize=pp->tile->dsize; uint8_t *u, *uf, goodvalue, *xybinarr=NULL; double minima_v=FLT_MAX, maxima_v=-FLT_MAX; size_t d, pind=0, increment=0, num_increment=1; int32_t *O, *OO, *C=NULL, *objarr=p->objects->array; float var, sval, varval, skyval, *V=NULL, *SK=NULL, *ST=NULL; float *std=p->std?p->std->array:NULL, *sky=p->sky?p->sky->array:NULL; /* If tile processing isn't necessary, set 'tid' to a blank value. */ size_t tid = ( ( (p->sky && p->sky->size>1 && pp->st_sky == NULL ) || ( p->std && p->std->size>1 && pp->st_std == NULL ) ) ? 0 : GAL_BLANK_SIZE_T ); /* Coordinate shift. */ size_t *sc = ( pp->shift ? gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "sc") : NULL ); /* If any coordinate columns are requested. */ size_t *c = ( /* Coordinate-related columns. */ ( oif[ OCOL_GX ] || oif[ OCOL_GY ] || oif[ OCOL_GZ ] || oif[ OCOL_VX ] || oif[ OCOL_VY ] || oif[ OCOL_VZ ] || oif[ OCOL_C_GX ] || oif[ OCOL_C_GY ] || oif[ OCOL_C_GZ ] || oif[ OCOL_MINVX ] || oif[ OCOL_MAXVX ] || oif[ OCOL_MINVY ] || oif[ OCOL_MAXVY ] || oif[ OCOL_MINVZ ] || oif[ OCOL_MAXVZ ] || oif[ OCOL_MINVNUM ] || oif[ OCOL_MAXVNUM ] || sc /* When the sky and its STD are tiles, we'll also need the coordinate to find which tile a pixel belongs to. */ || tid==GAL_BLANK_SIZE_T ) ? gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "c") : NULL ); /* If any of the projection measurements are necessary, we need to allocate an array to keep the projected space. */ if( oif[ OCOL_NUMALLXY ] || oif[ OCOL_NUMXY ] || oif[ OCOL_SUMPROJINSLICE ] || oif[ OCOL_NUMPROJINSLICE ] || oif[ OCOL_SUMPROJVARINSLICE ] || oif[ OCOL_NUMOTHERINSLICE ] || oif[ OCOL_SUMOTHERINSLICE ] || oif[ OCOL_SUMOTHERVARINSLICE ] || oif[ OCOL_NUMALLOTHERINSLICE ] ) { xybin=gal_data_alloc(NULL, GAL_TYPE_UINT8, 2, &tsize[1], NULL, 1, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); xybinarr=xybin->array; } /* Parse each contiguous patch of memory covered by this object. */ while( pp->start_end_inc[0] + increment <= pp->start_end_inc[1] ) { /* Set the contiguous range to parse. The pixel-to-pixel counting along the fastest dimension will be done over the 'O' pointer. */ if( p->clumps ) C = pp->st_c + increment; if( p->values ) V = pp->st_v + increment; if( p->sky && pp->st_sky ) SK = pp->st_sky + increment; if( p->std && pp->st_std ) ST = pp->st_std + increment; OO = ( O = pp->st_o + increment ) + tsize[ndim-1]; /* Parse the tile. */ do { /* If this pixel belongs to the requested object then do the processing. */ if( *O==pp->object ) { /* INTERNAL: Get the number of clumps in this object: it is the largest clump ID over each object. */ if( p->clumps && *C>0 ) pp->clumpsinobj = *C > pp->clumpsinobj?*C:pp->clumpsinobj; /* Add to the area of this object. */ if(xybin) xybinarr[ pind ]=1; if(oif[ OCOL_NUMALL ]) oi[ OCOL_NUMALL ]++; /* Geometric coordinate measurements. */ if(c) { /* Convert the index to coordinate. */ gal_dimension_index_to_coord(O-objarr, ndim, dsize, c); /* If we need tile-ID, get the tile ID now. */ if(tid!=GAL_BLANK_SIZE_T) tid=gal_tile_full_id_from_coord(&p->cp.tl, c); /* Do the general geometric (independent of pixel value) calculations. */ if(oif[ OCOL_GX ]) oi[ OCOL_GX ] += c[ ndim-1 ]+1; if(oif[ OCOL_GY ]) oi[ OCOL_GY ] += c[ ndim-2 ]+1; if(oif[ OCOL_GZ ]) oi[ OCOL_GZ ] += c[ ndim-3 ]+1; if(pp->shift) { /* Calculate the shifted coordinates for second order calculations. The coordinate is incremented because from now on, the positions are in the FITS standard (starting from one). */ for(d=0;dshift[d]; /* Include the shifted values, note that the second order moments are never needed independently, they are used together to find the ellipticity parameters. */ oi[ OCOL_GXX ] += sc[1] * sc[1]; oi[ OCOL_GYY ] += sc[0] * sc[0]; oi[ OCOL_GXY ] += sc[1] * sc[0]; } if(p->clumps && *C>0) { if(oif[ OCOL_C_NUMALL ]) oi[ OCOL_C_NUMALL ]++; if(oif[ OCOL_C_GX ]) oi[ OCOL_C_GX ] += c[ndim-1]+1; if(oif[ OCOL_C_GY ]) oi[ OCOL_C_GY ] += c[ndim-2]+1; if(oif[ OCOL_C_GZ ]) oi[ OCOL_C_GZ ] += c[ndim-3]+1; } } /* Value related measurements. */ goodvalue=0; if( p->values && !( p->hasblank && isnan(*V) ) ) { /* For the standard-deviation measurements later. */ goodvalue=1; /* General flux summations. */ if(xybin) xybinarr[ pind ]=2; if(oif[ OCOL_NUM ]) oi[ OCOL_NUM ]++; if(oif[ OCOL_SUM ]) oi[ OCOL_SUM ] += *V; if(oif[ OCOL_SUMP2 ]) oi[ OCOL_SUMP2 ] += *V * *V; /* Get the necessary clump information. */ if(p->clumps && *C>0) { if(oif[ OCOL_C_NUM ]) oi[ OCOL_C_NUM ]++; if(oif[ OCOL_C_SUM ]) oi[ OCOL_C_SUM ] += *V; } /* Get the extrema of the values. Note that if the minima or maxima value's coordinates are requested in any dimension, then 'OCOL_MINVNUM' or 'OCOL_MAXVNUM' will be activated). */ if( oif[ OCOL_MINVNUM ] && *V<=minima_v ) { /* If the value is smaller than the smallest found so far, reset the counter to one, and reset the sum of positions this one's position. */ if( *V=maxima_v ) { if( *V>maxima_v ) { maxima_v = *V; oi[ OCOL_MAXVNUM ]=1; if(oif[OCOL_MAXVX])oi[OCOL_MAXVX]=c[ndim-1]+1; if(oif[OCOL_MAXVY])oi[OCOL_MAXVY]=c[ndim-2]+1; if(oif[OCOL_MAXVZ])oi[OCOL_MAXVZ]=c[ndim-3]+1; } else { oi[ OCOL_MAXVNUM ]++; if(oif[OCOL_MAXVX])oi[OCOL_MAXVX]+=c[ndim-1]+1; if(oif[OCOL_MAXVY])oi[OCOL_MAXVY]+=c[ndim-2]+1; if(oif[OCOL_MAXVZ])oi[OCOL_MAXVZ]+=c[ndim-3]+1; } } /* For flux weighted centers, we can only use positive values, so do those measurements here. */ if( *V > 0.0f ) { if(oif[ OCOL_NUMWHT ]) oi[ OCOL_NUMWHT ]++; if(oif[ OCOL_SUMWHT ]) oi[ OCOL_SUMWHT ] += *V; if(oif[ OCOL_VX ]) oi[ OCOL_VX ] += *V*(c[ndim-1]+1); if(oif[ OCOL_VY ]) oi[ OCOL_VY ] += *V*(c[ndim-2]+1); if(oif[ OCOL_VZ ]) oi[ OCOL_VZ ] += *V*(c[ndim-3]+1); if(pp->shift) { oi[ OCOL_VXX ] += *V * sc[1] * sc[1]; oi[ OCOL_VYY ] += *V * sc[0] * sc[0]; oi[ OCOL_VXY ] += *V * sc[1] * sc[0]; } if(p->clumps && *C>0) { if(oif[ OCOL_C_NUMWHT ]) oi[ OCOL_C_NUMWHT ]++; if(oif[ OCOL_C_SUMWHT ]) oi[ OCOL_C_SUMWHT ]+=*V; if(oif[ OCOL_C_VX ]) oi[ OCOL_C_VX ] += *V * (c[ ndim-1 ]+1); if(oif[ OCOL_C_VY ]) oi[ OCOL_C_VY ] += *V * (c[ ndim-2 ]+1); if(oif[ OCOL_C_VZ ]) oi[ OCOL_C_VZ ] += *V * (c[ ndim-3 ]+1); } } } /* Sky value based measurements. */ if(p->sky && oif[ OCOL_SUMSKY ]) { skyval = ( pp->st_sky ? (isnan(*SK)?0:*SK) /* Full array */ : ( p->sky->size>1 ? (isnan(sky[tid])?0:sky[tid]) /* Tile */ : sky[0] ) ); /* Single value*/ if(!isnan(skyval)) { oi[ OCOL_NUMSKY ]++; oi[ OCOL_SUMSKY ] += skyval; } } /* Sky standard deviation based measurements.*/ if(p->std) { /* Calculate the variance and save it in the output if necessary. */ sval=pp->st_std ? *ST : (p->std->size>1?std[tid]:std[0]); var = p->variance ? sval : sval*sval; if(oif[ OCOL_SUMVAR ] && (!isnan(var))) { oi[ OCOL_NUMVAR ]++; oi[ OCOL_SUMVAR ] += var; } /* For each pixel, we have a sky contribution to the counts and the signal's contribution. The standard deviation in the sky is simply 'sval', but the standard deviation of the signal (independent of the sky) is 'sqrt(*V)'. Therefore the total variance of this pixel is the variance of the sky added with the absolute value of its sky-subtracted flux. We use the absolute value, because especially as the signal gets noisy there will be negative values, and we don't want them to decrease the variance. */ if(oif[ OCOL_SUM_VAR ] && goodvalue) { varval=p->variance ? var : sval; if(!isnan(varval)) { oi[ OCOL_SUM_VAR_NUM ]++; oi[ OCOL_SUM_VAR ] += varval + fabs(*V); } } } } /* Increment the other pointers. */ if( xybin ) ++pind; if( p->values ) ++V; if( p->clumps ) ++C; if( p->sky && pp->st_sky ) ++SK; if( p->std && pp->st_std ) ++ST; } while(++Oobjects, tsize, num_increment++, NULL) ); /* If a 2D projection is requested, see if we should initialize (set to zero) the projection-index ('pind') not. */ if(xybin && (num_increment-1)%tsize[1]==0 ) pind=0; } /* Write the projected area columns. */ if(xybin) { /* Any non-zero pixel must be set for NUMALLXY. */ uf=(u=xybin->array)+xybin->size; do if(*u) { if(oif[ OCOL_NUMALLXY ] ) oi[ OCOL_NUMALLXY ]++; if(oif[ OCOL_NUMXY ] && *u==2 ) oi[ OCOL_NUMXY ]++; } while(++uobject==1) { gal_fits_img_write(xybin, "xybin.fits", NULL, NULL); printf("Created 'xybin.fits'\n"); exit(0); } */ } /* Generate the Spectrum. */ if( oif[ OCOL_SUMINSLICE ] || oif[ OCOL_NUMINSLICE ] || oif[ OCOL_NUMALLINSLICE ] || oif[ OCOL_SUMVARINSLICE ] || oif[ OCOL_SUMPROJINSLICE ] || oif[ OCOL_NUMOTHERINSLICE ] || oif[ OCOL_SUMOTHERINSLICE ] || oif[ OCOL_SUMPROJVARINSLICE ] || oif[ OCOL_SUMOTHERVARINSLICE ] || oif[ OCOL_NUMALLOTHERINSLICE ]) parse_vector_dim3(pp, xybin); /* Clean up. */ if(c) free(c); if(sc) free(sc); if(xybin) gal_data_free(xybin); } /* To keep the main function easier to read. */ static void * parse_init_extrema(uint8_t *cif, uint8_t type, size_t num, int max1min0) { void *out; double *out_d; size_t i, *out_s; /* Allocate the array. */ out=gal_pointer_allocate(type, num, 0, __func__, "out"); /* Initialize the array. */ switch(type) { case GAL_TYPE_FLOAT64: out_d=out; for(i=0;i ci[ COL ] \ ? (c[ DIM ]+1) : ci[ COL ] ) ) /* Parse over the clumps within an object. */ void parse_clumps(struct mkcatalog_passparams *pp) { struct mkcatalogparams *p=pp->p; size_t ndim=p->objects->ndim, *dsize=p->objects->dsize; double *ci, *cir; gal_data_t *xybin=NULL; int32_t *O, *OO, *C=NULL, nlab; size_t cind, *tsize=pp->tile->dsize; double *minima_v=NULL, *maxima_v=NULL; uint8_t *u, *uf, goodvalue, *cif=p->ciflag; size_t nngb=gal_dimension_num_neighbors(ndim); size_t i, ii, d, pind=0, increment=0, num_increment=1; float var, sval, varval, skyval, *V=NULL, *SK=NULL, *ST=NULL; int32_t *objects=p->objects->array, *clumps=p->clumps->array; float *std=p->std?p->std->array:NULL, *sky=p->sky?p->sky->array:NULL; /* If tile processing isn't necessary, set 'tid' to a blank value. */ size_t tid = ( ( (p->sky && p->sky->size>1 && pp->st_sky == NULL ) || ( p->std && p->std->size>1 && pp->st_std == NULL ) ) ? 0 : GAL_BLANK_SIZE_T ); /* Coordinate shift. */ size_t *sc = ( pp->shift ? gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "sc") : NULL ); /* If any coordinate columns are requested. */ size_t *c = ( ( cif[ CCOL_GX ] || cif[ CCOL_GY ] || cif[ CCOL_GZ ] || cif[ CCOL_VX ] || cif[ CCOL_VY ] || cif[ CCOL_VZ ] || cif[ CCOL_MINX ] || cif[ CCOL_MAXX ] || cif[ CCOL_MINY ] || cif[ CCOL_MAXY ] || cif[ CCOL_MINZ ] || cif[ CCOL_MAXZ ] || cif[ CCOL_MINVX ] || cif[ CCOL_MAXVX ] || cif[ CCOL_MINVY ] || cif[ CCOL_MAXVY ] || cif[ CCOL_MINVZ ] || cif[ CCOL_MAXVZ ] || cif[ CCOL_MINVNUM ] || cif[ CCOL_MAXVNUM ] || sc || tid==GAL_BLANK_SIZE_T ) ? gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "c") : NULL ); /* Preparations for neighbor parsing. */ int32_t *ngblabs=( ( cif[ CCOL_RIV_NUM ] || cif[ CCOL_RIV_SUM ] || cif[ CCOL_RIV_SUM_VAR ] ) ? gal_pointer_allocate(GAL_TYPE_INT32, nngb, 0, __func__, "ngblabs") : NULL ); size_t *dinc = ngblabs ? gal_dimension_increment(ndim, dsize) : NULL; /* If an XY projection area is requested, we'll need to allocate an array to keep the projected space.*/ if( cif[ CCOL_NUMALLXY ] || cif[ CCOL_NUMXY ] ) { xybin=gal_data_array_calloc(pp->clumpsinobj); for(i=0;iclumpsinobj;++i) gal_data_initialize(&xybin[i], NULL, GAL_TYPE_UINT8, 2, &tsize[1], NULL, 1, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); } /* For the extrema columns. */ if( cif[ CCOL_MINVNUM ] || cif[ CCOL_MINVX ] || cif[ CCOL_MINVY ] || cif[ CCOL_MINVZ ] ) minima_v=parse_init_extrema(cif, GAL_TYPE_FLOAT64, pp->clumpsinobj, 0); if( cif[ CCOL_MAXVNUM ] || cif[ CCOL_MAXVX ] || cif[ CCOL_MAXVY ] || cif[ CCOL_MAXVZ ] ) maxima_v=parse_init_extrema(cif, GAL_TYPE_FLOAT64, pp->clumpsinobj, 1); /* Parse each contiguous patch of memory covered by this object. */ while( pp->start_end_inc[0] + increment <= pp->start_end_inc[1] ) { /* Set the contiguous range to parse. The pixel-to-pixel counting along the fastest dimension will be done over the 'O' pointer. */ C = pp->st_c + increment; if( p->values ) V = pp->st_v + increment; if( p->sky && pp->st_sky ) SK = pp->st_sky + increment; if( p->std && pp->st_std ) ST = pp->st_std + increment; OO = ( O = pp->st_o + increment ) + tsize[ndim-1]; /* Parse the tile */ do { /* If this pixel belongs to the requested object then do the processing. */ if( *O==pp->object ) { /* We are on a clump. */ if(p->clumps && *C>0) { /* Pointer to make things easier. Note that the clump labels start from 1, but the array indexs from 0.*/ cind = *C-1; ci=&pp->ci[ cind * CCOL_NUMCOLS ]; /* Add to the area of this object. */ if( cif[ CCOL_NUMALL ] || cif[ CCOL_MINX ] || cif[ CCOL_MAXX ] || cif[ CCOL_MINY ] || cif[ CCOL_MAXY ] || cif[ CCOL_MINZ ] || cif[ CCOL_MAXZ ] ) ci[ CCOL_NUMALL ]++; if(cif[ CCOL_NUMALLXY ]) ((uint8_t *)(xybin[cind].array))[ pind ] = 1; /* Raw-position related measurements. */ if(c) { /* Get "C" the coordinates of this point. */ gal_dimension_index_to_coord(O-objects, ndim, dsize, c); /* Position extrema measurements. */ if(cif[ CCOL_MINX ]) ci[CCOL_MINX]=CMIN(CCOL_MINX, ndim-1); if(cif[ CCOL_MAXX ]) ci[CCOL_MAXX]=CMAX(CCOL_MAXX, ndim-1); if(cif[ CCOL_MINY ]) ci[CCOL_MINY]=CMIN(CCOL_MINY, ndim-2); if(cif[ CCOL_MAXY ]) ci[CCOL_MAXY]=CMAX(CCOL_MAXY, ndim-2); if(cif[ CCOL_MINZ ]) ci[CCOL_MINZ]=CMIN(CCOL_MINZ, ndim-3); if(cif[ CCOL_MAXZ ]) ci[CCOL_MAXZ]=CMAX(CCOL_MAXZ, ndim-3); /* If we need tile-ID, get the tile ID now. */ if(tid!=GAL_BLANK_SIZE_T) tid=gal_tile_full_id_from_coord(&p->cp.tl, c); /* General geometric (independent of pixel value) calculations. */ if(cif[ CCOL_GX ]) ci[ CCOL_GX ] += c[ ndim-1 ]+1; if(cif[ CCOL_GY ]) ci[ CCOL_GY ] += c[ ndim-2 ]+1; if(cif[ CCOL_GZ ]) ci[ CCOL_GZ ] += c[ ndim-3 ]+1; if(pp->shift) { /* Shifted coordinates for second order moments, see explanations in the first pass.*/ for(d=0;dshift[d]; /* Raw second-order measurements. */ ci[ CCOL_GXX ] += sc[1] * sc[1]; ci[ CCOL_GYY ] += sc[0] * sc[0]; ci[ CCOL_GXY ] += sc[1] * sc[0]; } } /* Value related measurements, see 'parse_objects' for comments. */ goodvalue=0; if( p->values && !( p->hasblank && isnan(*V) ) ) { /* For the standard-deviation measurement. */ goodvalue=1; /* Fill in the necessary information. */ if(cif[ CCOL_NUM ]) ci[ CCOL_NUM ]++; if(cif[ CCOL_SUM ]) ci[ CCOL_SUM ] += *V; if(cif[ CCOL_SUMP2 ]) ci[ CCOL_SUMP2 ] += *V * *V; if(cif[ CCOL_NUMXY ]) ((uint8_t *)(xybin[cind].array))[ pind ] = 2; /* Minimum/maximum pixel positions. */ if( cif[ CCOL_MINVNUM ] && *V<=minima_v[cind] ) { if( *V=maxima_v[cind] ) { if( *V>maxima_v[cind] ) { maxima_v[cind] = *V; ci[ CCOL_MAXVNUM ]=1; if(cif[CCOL_MAXVX]) ci[ CCOL_MAXVX ] = c[ ndim-1 ]+1; if(cif[CCOL_MAXVY]) ci[ CCOL_MAXVY ] = c[ ndim-2 ]+1; if(cif[CCOL_MAXVZ]) ci[ CCOL_MAXVZ ] = c[ ndim-3 ]+1; } else { ci[ CCOL_MAXVNUM ]++; if(cif[CCOL_MAXVX]) ci[ CCOL_MAXVX ] += c[ ndim-1 ]+1; if(cif[CCOL_MAXVY]) ci[ CCOL_MAXVY ] += c[ ndim-2 ]+1; if(cif[CCOL_MAXVZ]) ci[ CCOL_MAXVZ ] += c[ ndim-3 ]+1; } } /* Columns that need positive values. */ if( *V > 0.0f ) { if(cif[ CCOL_NUMWHT ]) ci[ CCOL_NUMWHT ]++; if(cif[ CCOL_SUMWHT ]) ci[ CCOL_SUMWHT ] += *V; if(cif[ CCOL_VX ]) ci[ CCOL_VX ] += *V * (c[ ndim-1 ]+1); if(cif[ CCOL_VY ]) ci[ CCOL_VY ] += *V * (c[ ndim-2 ]+1); if(cif[ CCOL_VZ ]) ci[ CCOL_VZ ] += *V * (c[ ndim-3 ]+1); if(pp->shift) { ci[ CCOL_VXX ] += *V * sc[1] * sc[1]; ci[ CCOL_VYY ] += *V * sc[0] * sc[0]; ci[ CCOL_VXY ] += *V * sc[1] * sc[0]; } } } /* Sky based measurements. */ if(p->sky && cif[ CCOL_SUMSKY ]) { skyval = ( pp->st_sky ? *SK /* Full. */ : ( p->sky->size>1 ? sky[tid] /* Tile. */ : sky[0] ) ); /* 1 value. */ if(!isnan(skyval)) { ci[ CCOL_NUMSKY ]++; ci[ CCOL_SUMSKY ] += skyval; } } /* Sky Standard deviation based measurements, see 'parse_objects' for comments. */ if(p->std) { sval = ( pp->st_std ? *ST : (p->std->size>1 ? std[tid] : std[0]) ); var = p->variance ? sval : sval*sval; if(cif[ CCOL_SUMVAR ] && (!isnan(var))) { ci[ CCOL_NUMVAR ]++; ci[ CCOL_SUMVAR ] += var; } if(cif[ CCOL_SUM_VAR ] && goodvalue) { varval=p->variance ? var : sval; if(!isnan(varval)) { ci[ CCOL_SUM_VAR_NUM ]++; ci[ CCOL_SUM_VAR ] += varval + fabs(*V); } } } } /* This pixel is on the diffuse region (and the object actually has clumps). If any river-based measurements are necessary check to see if it is touching a clump or not, but only if this object actually has any clumps. */ else if(ngblabs && pp->clumpsinobj) { /* We are on a diffuse (possibly a river) pixel. So the value of this pixel has to be added to any of the clumps in touches. But since it might touch a labeled region more than once, we use 'ngblabs' to keep track of which label we have already added its value to. 'ii' is the number of different labels this river pixel has already been considered for. 'ngblabs' will keep the list labels. */ ii=0; memset(ngblabs, 0, nngb*sizeof *ngblabs); /* Go over the neighbors and see if this pixel is touching a clump or not. */ GAL_DIMENSION_NEIGHBOR_OP(O-objects, ndim, dsize, ndim, dinc, { /* Neighbor's label (mainly for easy reading). */ nlab=clumps[nind]; /* We only want neighbors that are a clump and part of this object and part of the same object. */ if( nlab>0 && objects[nind]==pp->object) { /* Go over all already checked labels and make sure this clump hasn't already been considered. */ for(i=0;ici[ (nlab-1) * CCOL_NUMCOLS ]; /* Write in the necessary values. */ if(cif[ CCOL_RIV_NUM ]) cir[ CCOL_RIV_NUM ]++; /* Total sum of values in river. */ if(cif[ CCOL_RIV_SUM ]) cir[ CCOL_RIV_SUM ] += *V; /* Minimum river value. */ if(cif[CCOL_RIV_MIN]) if(cir[CCOL_RIV_NUM]==1 || *V < cir[CCOL_RIV_MIN]) cir[CCOL_RIV_MIN]=*V; /* Maximum river value. */ if(cif[CCOL_RIV_MAX]) if(cir[CCOL_RIV_NUM]==1 || *V > cir[CCOL_RIV_MAX]) cir[CCOL_RIV_MAX]=*V; /* Sum of variances within river. */ if(cif[ CCOL_RIV_SUM_VAR ]) { sval = ( pp->st_std ? *ST : ( p->std->size>1 ? std[tid] : std[0] ) ); cir[ CCOL_RIV_SUM_VAR ] += fabs(*V) + (p->variance ? sval : sval*sval); } } } }); } } /* Increment the other pointers. */ ++C; if( xybin ) ++pind; if( p->values ) ++V; if( p->sky && pp->st_sky ) ++SK; if( p->std && pp->st_std ) ++ST; } while(++Oobjects, tsize, num_increment++, NULL) ); /* If a 2D projection is requested, see if we should initialize (set to zero) the projection-index ('pind') not. */ if(xybin && (num_increment-1) % tsize[1]==0 ) pind=0; } /* Write the higher-level columns. */ for(i=0;iclumpsinobj;++i) { /* Pointer to make things easier. */ ci=&pp->ci[ i * CCOL_NUMCOLS ]; /* Write the XY projection columns. */ if(xybin) { /* Any non-zero pixel must be set for NUMALLXY. */ uf=(u=xybin[i].array)+xybin[i].size; do if(*u) { if(cif[ CCOL_NUMALLXY ] ) ci[ CCOL_NUMALLXY ]++; if(cif[ CCOL_NUMXY ] && *u==2 ) ci[ CCOL_NUMXY ]++; } while(++uobject==2) gal_fits_img_write(&xybin[i], "xybin.fits", NULL, 0); } } /* Clean up. */ if(c) free(c); if(sc) free(sc); if(dinc) free(dinc); if(ngblabs) free(ngblabs); if(minima_v) free(minima_v); if(maxima_v) free(maxima_v); if(xybin) gal_data_array_free(xybin, pp->clumpsinobj, 1); } static size_t parse_frac_find(gal_data_t *sorted_d, double value, double frac, int dosum) { size_t i; double check=0.0f; double *sorted=sorted_d->array; /* Parse over the sorted array and find the index. */ for(i=0;isize;++i) if(dosum) { if( (check+=sorted[i]) > value*frac ) break; } else { if( sorted[i] < value*frac ) break; } /* Return the final value. Note that if the index is zero, we should actually return 1, because we are starting with the maximum. */ return i==0 ? 1 : i; } static double parse_frac_sum(gal_data_t *sorted_d, double value, double frac, int dosum) { double sum=0.0f, *sorted=sorted_d->array; size_t i, ind=parse_frac_find(sorted_d, value, frac, 0); for(i=0;ip; double max, *sorted; gal_data_t *sorted_d; uint8_t *flag = o1c0 ? p->oiflag : p->ciflag; double *fracmax = p->fracmax ? p->fracmax->array : NULL; double sumlab = o1c0 ? outarr[OCOL_SUM] : outarr[CCOL_SUM]; /* Allocate the array to use. */ sorted_d = ( values->type==GAL_TYPE_FLOAT64 ? values : gal_data_copy_to_new_type(values, GAL_TYPE_FLOAT64) ); /* Sort the desired labels and find the number of elements where we reach half the total sum. */ gal_statistics_sort_decreasing(sorted_d); /* Set the required fractions. */ if(flag[ o1c0 ? OCOL_HALFSUMNUM : CCOL_HALFSUMNUM ]) outarr[ o1c0 ? OCOL_HALFSUMNUM : CCOL_HALFSUMNUM ] = parse_frac_find(sorted_d, sumlab, 0.5f, 1); /* Values related to the maximum. */ if( flag[ o1c0 ? OCOL_MAXIMUM : CCOL_MAXIMUM ] || flag[ o1c0 ? OCOL_HALFMAXNUM : CCOL_HALFMAXNUM ] || flag[ o1c0 ? OCOL_HALFMAXSUM : CCOL_HALFMAXSUM ] || flag[ o1c0 ? OCOL_FRACMAX1NUM : CCOL_FRACMAX1NUM ] || flag[ o1c0 ? OCOL_FRACMAX1SUM : CCOL_FRACMAX1SUM ] || flag[ o1c0 ? OCOL_FRACMAX2NUM : CCOL_FRACMAX2NUM ] || flag[ o1c0 ? OCOL_FRACMAX2SUM : CCOL_FRACMAX2SUM ] ) { /* Set the array and maximum value. We'll use the median of the top three pixels for the maximum (to avoid noise) */ sorted=sorted_d->array; max = ( sorted_d->size>3 ? (sorted[0]+sorted[1]+sorted[2])/3 : sorted[0] ); /* If we want the maximum value, then write it in. */ if(flag[ o1c0 ? OCOL_MAXIMUM : CCOL_MAXIMUM ]) outarr[ o1c0 ? OCOL_MAXIMUM : CCOL_MAXIMUM ] = max; /* Number of pixels within half the maximum. */ if(flag[ o1c0 ? OCOL_HALFMAXNUM : CCOL_HALFMAXNUM ]) outarr[ o1c0 ? OCOL_HALFMAXNUM : CCOL_HALFMAXNUM ] = parse_frac_find(sorted_d, max, 0.5f, 0); /* Number of pixels within the first requested fraction of maximum */ if(flag[ o1c0 ? OCOL_FRACMAX1NUM : CCOL_FRACMAX1NUM ]) outarr[ o1c0 ? OCOL_FRACMAX1NUM : CCOL_FRACMAX1NUM ] = parse_frac_find(sorted_d, max, fracmax[0], 0); /* Number of pixels within the first requested fraction of maximum */ if(flag[ o1c0 ? OCOL_FRACMAX2NUM : CCOL_FRACMAX2NUM ]) outarr[ o1c0 ? OCOL_FRACMAX2NUM : CCOL_FRACMAX2NUM ] = parse_frac_find(sorted_d, max, fracmax[1], 0); /* Sum of the pixels within the given fraction of the maximum. */ if( flag[ o1c0 ? OCOL_HALFMAXSUM : CCOL_HALFMAXSUM ] ) outarr[ o1c0 ? OCOL_HALFMAXSUM : CCOL_HALFMAXSUM ] = parse_frac_sum(sorted_d, max, 0.5f, 0); /* Sum of the pixels within the 1st given fraction of the maximum. */ if( flag[ o1c0 ? OCOL_FRACMAX1SUM : CCOL_FRACMAX1SUM ] ) outarr[ o1c0 ? OCOL_FRACMAX1SUM : CCOL_FRACMAX1SUM ] = parse_frac_sum(sorted_d, max, fracmax[0], 0); /* Sum of the pixels within the 1st given fraction of the maximum. */ if( flag[ o1c0 ? OCOL_FRACMAX2SUM : CCOL_FRACMAX2SUM ] ) outarr[ o1c0 ? OCOL_FRACMAX2SUM : CCOL_FRACMAX2SUM ] = parse_frac_sum(sorted_d, max, fracmax[1], 0); } /* Clean up and return. */ if(sorted_d!=values) gal_data_free(sorted_d); } void parse_order_based(struct mkcatalog_passparams *pp) { struct mkcatalogparams *p=pp->p; float *V; double *ci; float *sigcliparr; gal_data_t *result; uint8_t clipflags=0; int32_t *O, *OO, *C=NULL; size_t i, increment=0, num_increment=1; gal_data_t *objvals=NULL, **clumpsvals=NULL; size_t *tsize=pp->tile->dsize, ndim=p->objects->ndim; size_t counter=0, *ccounter=NULL, tmpsize=pp->oi[OCOL_NUM]; /* It may happen that there are no usable pixels for this object (and thus its possible clumps). In this case `tmpsize' will be zero and we can just write NaN values for the necessary columns. */ if(tmpsize==0) { if(p->oiflag[OCOL_MEDIAN ]) pp->oi[ OCOL_MEDIAN ] = NAN; if(p->oiflag[OCOL_MAXIMUM ]) pp->oi[ OCOL_MAXIMUM ] = NAN; if(p->oiflag[OCOL_HALFMAXSUM ]) pp->oi[ OCOL_HALFMAXSUM ] = NAN; if(p->oiflag[OCOL_HALFMAXNUM ]) pp->oi[ OCOL_HALFMAXNUM ] = 0; if(p->oiflag[OCOL_HALFSUMNUM ]) pp->oi[ OCOL_HALFSUMNUM ] = 0; if(p->oiflag[OCOL_FRACMAX1NUM ]) pp->oi[ OCOL_FRACMAX1NUM ] = 0; if(p->oiflag[OCOL_FRACMAX2NUM ]) pp->oi[ OCOL_FRACMAX2NUM ] = 0; if(p->oiflag[OCOL_SIGCLIPNUM ]) pp->oi[ OCOL_SIGCLIPNUM ] = 0; if(p->oiflag[OCOL_SIGCLIPSTD ]) pp->oi[ OCOL_SIGCLIPSTD ] = 0; if(p->oiflag[OCOL_SIGCLIPMEAN ]) pp->oi[ OCOL_SIGCLIPMEAN ] = NAN; if(p->oiflag[OCOL_SIGCLIPMEDIAN]) pp->oi[ OCOL_SIGCLIPMEDIAN] = NAN; if(p->clumps) for(i=0;iclumpsinobj;++i) { ci=&pp->ci[ i * CCOL_NUMCOLS ]; if(p->ciflag[CCOL_MEDIAN ]) ci[ CCOL_MEDIAN ] = NAN; if(p->ciflag[CCOL_MAXIMUM ]) ci[ CCOL_MAXIMUM ] = NAN; if(p->ciflag[CCOL_HALFMAXSUM ]) ci[ CCOL_HALFMAXSUM ] = NAN; if(p->ciflag[CCOL_HALFMAXNUM ]) ci[ CCOL_HALFMAXNUM ] = 0; if(p->ciflag[CCOL_HALFSUMNUM ]) ci[ CCOL_HALFSUMNUM ] = 0; if(p->ciflag[CCOL_FRACMAX1NUM]) ci[ CCOL_FRACMAX1NUM ] = 0; if(p->ciflag[CCOL_FRACMAX2NUM]) ci[ CCOL_FRACMAX2NUM ] = 0; if(p->ciflag[CCOL_SIGCLIPNUM ]) ci[ CCOL_SIGCLIPNUM ] = 0; if(p->ciflag[CCOL_SIGCLIPSTD ]) ci[ CCOL_SIGCLIPSTD ] = 0; if(p->ciflag[CCOL_SIGCLIPMEAN]) ci[ CCOL_SIGCLIPMEAN ] = NAN; if(p->ciflag[CCOL_SIGCLIPMEDIAN]) ci[ CCOL_SIGCLIPMEDIAN]=NAN; } return; } /* We know we have pixels to use, so allocate space for the values within the object. */ objvals=gal_data_alloc(NULL, p->values->type, 1, &tmpsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Clump preparations. */ if(p->clumps) { /* Allocate the necessary space. */ errno=0; clumpsvals=malloc(pp->clumpsinobj * sizeof *clumpsvals); if(clumpsvals==NULL) error(EXIT_FAILURE, errno, "%s: couldn't allocate 'clumpsvals' " "for %zu clumps", __func__, pp->clumpsinobj); /* Allocate the array necessary to keep the values of each clump. */ ccounter=gal_pointer_allocate(GAL_TYPE_SIZE_T, pp->clumpsinobj, 1, __func__, "ccounter"); for(i=0;iclumpsinobj;++i) { tmpsize=pp->ci[ i * CCOL_NUMCOLS + CCOL_NUM ]; clumpsvals[i] = ( tmpsize ? gal_data_alloc(NULL, p->values->type, 1, &tmpsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL) : NULL ); } } /* Parse each contiguous patch of memory covered by this object. */ while( pp->start_end_inc[0] + increment <= pp->start_end_inc[1] ) { /* Set the contiguous range to parse. The pixel-to-pixel counting along the fastest dimension will be done over the 'O' pointer. */ V = pp->st_v + increment; if(p->clumps) C = pp->st_c + increment; OO = ( O = pp->st_o + increment ) + tsize[ndim-1]; /* Parse the next contiguous region of this tile. */ do { /* If this pixel belongs to the requested object, then do the processing. 'hasblank' is constant, so when the values doesn't have any blank values, the 'isnan' will never be checked. */ if( *O==pp->object && !( p->hasblank && isnan(*V) ) ) { /* Copy the value for the whole object. */ memcpy( gal_pointer_increment(objvals->array, counter++, p->values->type), V, gal_type_sizeof(p->values->type) ); /* We are also on a clump. */ if(p->clumps && *C>0 && clumpsvals[*C-1]!=NULL) memcpy( gal_pointer_increment(clumpsvals[*C-1]->array, ccounter[*C-1]++, p->values->type), V, gal_type_sizeof(p->values->type) ); } /* Increment the other pointers. */ ++V; if(p->clumps) ++C; } while(++Oobjects, tsize, num_increment++, NULL) ); } /* Calculate the necessary values for the objects. */ if(p->oiflag[ OCOL_MEDIAN ]) { result=gal_data_copy_to_new_type_free(gal_statistics_median(objvals, 1), GAL_TYPE_FLOAT64); pp->oi[OCOL_MEDIAN]=*((double *)(result->array)); gal_data_free(result); } if(p->oiflag[ OCOL_SIGCLIPNUM ] || p->oiflag[ OCOL_SIGCLIPSTD ] || p->oiflag[ OCOL_SIGCLIPMEAN ] || p->oiflag[ OCOL_SIGCLIPMEDIAN ]) { /* See which optional clipping measurements are necessary and run the clipping. */ clipflags=0; if(p->oiflag[ OCOL_SIGCLIPSTD ]) clipflags |= GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD; if(p->oiflag[ OCOL_SIGCLIPMEAN ]) clipflags |= GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN; result=gal_statistics_clip_sigma(objvals, p->sigmaclip[0], p->sigmaclip[1], clipflags, 1, 1); sigcliparr=result->array; if(p->oiflag[ OCOL_SIGCLIPNUM ]) pp->oi[OCOL_SIGCLIPNUM] = sigcliparr[GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED]; if(p->oiflag[ OCOL_SIGCLIPSTD ]) pp->oi[OCOL_SIGCLIPSTD] = sigcliparr[GAL_STATISTICS_CLIP_OUTCOL_STD]; if(p->oiflag[ OCOL_SIGCLIPMEAN ]) pp->oi[OCOL_SIGCLIPMEAN] = sigcliparr[GAL_STATISTICS_CLIP_OUTCOL_MEAN]; if(p->oiflag[ OCOL_SIGCLIPMEDIAN ]) pp->oi[OCOL_SIGCLIPMEDIAN] = sigcliparr[GAL_STATISTICS_CLIP_OUTCOL_MEDIAN]; /* Clean up the sigma-clipped values. */ gal_data_free(result); } /* Fractional values. */ if( p->oiflag[ OCOL_MAXIMUM ] || p->oiflag[ OCOL_HALFMAXNUM ] || p->oiflag[ OCOL_HALFMAXSUM ] || p->oiflag[ OCOL_HALFSUMNUM ] || p->oiflag[ OCOL_FRACMAX1NUM ] || p->oiflag[ OCOL_FRACMAX2NUM ] ) parse_area_of_frac_sum(pp, objvals, pp->oi, 1); /* Clean up the object values. */ gal_data_free(objvals); /* Calculate the necessary value for clumps. */ if(p->clumps) { for(i=0;iclumpsinobj;++i) { /* Set the main row to fill and initialize. */ ci=&pp->ci[ i * CCOL_NUMCOLS ]; /* Median. */ if(p->ciflag[ CCOL_MEDIAN ]) { if(clumpsvals[i]) { result=gal_statistics_median(clumpsvals[i], 1); result=gal_data_copy_to_new_type_free(result, GAL_TYPE_FLOAT64); ci[ CCOL_MEDIAN ] = ( *((double *)(result->array)) - ( ci[ CCOL_RIV_SUM ] / ci[ CCOL_RIV_NUM ]) ); gal_data_free(result); } else ci[ CCOL_MEDIAN ] = NAN; } /* Sigma-clipping measurements. */ if(p->ciflag[ CCOL_SIGCLIPNUM ] || p->ciflag[ CCOL_SIGCLIPSTD ] || p->ciflag[ CCOL_SIGCLIPMEAN ] || p->ciflag[ CCOL_SIGCLIPMEDIAN ]) { if(clumpsvals[i]) { clipflags=0; if(p->oiflag[ OCOL_SIGCLIPSTD ]) clipflags |= GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD; if(p->oiflag[ OCOL_SIGCLIPMEAN ]) clipflags |= GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN; result=gal_statistics_clip_sigma(clumpsvals[i], p->sigmaclip[0], p->sigmaclip[1], clipflags, 1, 1); sigcliparr=result->array; if(p->ciflag[ CCOL_SIGCLIPNUM ]) ci[CCOL_SIGCLIPNUM] = sigcliparr[GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED]; if(p->ciflag[ CCOL_SIGCLIPSTD ]) ci[CCOL_SIGCLIPSTD] = ( sigcliparr[GAL_STATISTICS_CLIP_OUTCOL_STD] - ( ci[ CCOL_RIV_SUM ] / ci[ CCOL_RIV_NUM ])); if(p->ciflag[ CCOL_SIGCLIPMEAN ]) ci[CCOL_SIGCLIPMEAN] = ( sigcliparr[GAL_STATISTICS_CLIP_OUTCOL_MEAN] - ( ci[ CCOL_RIV_SUM ] / ci[ CCOL_RIV_NUM ])); if(p->ciflag[ CCOL_SIGCLIPMEDIAN ]) ci[CCOL_SIGCLIPMEDIAN] = ( sigcliparr[GAL_STATISTICS_CLIP_OUTCOL_MEDIAN] - ( ci[ CCOL_RIV_SUM ] / ci[ CCOL_RIV_NUM ])); gal_data_free(result); } else { if(p->ciflag[ CCOL_SIGCLIPNUM ]) ci[ CCOL_SIGCLIPNUM ]=NAN; if(p->ciflag[ CCOL_SIGCLIPSTD ]) ci[ CCOL_SIGCLIPSTD ]=NAN; if(p->ciflag[ CCOL_SIGCLIPMEAN ]) ci[ CCOL_SIGCLIPMEAN ]=NAN; if(p->ciflag[ CCOL_SIGCLIPMEDIAN ]) ci[CCOL_SIGCLIPMEDIAN]=NAN; } } /* Estimate half of the total sum. */ if( p->ciflag[ CCOL_MAXIMUM ] || p->ciflag[ CCOL_HALFMAXNUM ] || p->ciflag[ CCOL_HALFMAXSUM ] || p->ciflag[ CCOL_HALFSUMNUM ] || p->ciflag[ CCOL_FRACMAX1NUM ] || p->ciflag[ CCOL_FRACMAX1SUM ] || p->ciflag[ CCOL_FRACMAX2NUM ] || p->ciflag[ CCOL_FRACMAX2SUM ] ) { if(clumpsvals[i]) parse_area_of_frac_sum(pp, clumpsvals[i], ci, 0); else { if(p->ciflag[CCOL_MAXIMUM ]) ci[CCOL_MAXIMUM ]=NAN; if(p->ciflag[CCOL_HALFMAXNUM ]) ci[CCOL_HALFMAXNUM ]=NAN; if(p->ciflag[CCOL_HALFMAXSUM ]) ci[CCOL_HALFMAXSUM ]=NAN; if(p->ciflag[CCOL_HALFSUMNUM ]) ci[CCOL_HALFSUMNUM ]=NAN; if(p->ciflag[CCOL_FRACMAX1NUM]) ci[CCOL_FRACMAX1NUM]=NAN; if(p->ciflag[CCOL_FRACMAX1SUM]) ci[CCOL_FRACMAX1SUM]=NAN; if(p->ciflag[CCOL_FRACMAX2NUM]) ci[CCOL_FRACMAX2NUM]=NAN; if(p->ciflag[CCOL_FRACMAX2SUM]) ci[CCOL_FRACMAX2SUM]=NAN; } } /* Clean up this clump's values. */ gal_data_free(clumpsvals[i]); } free(clumpsvals); free(ccounter); } } gnuastro-0.22/bin/mkcatalog/main.h0000644000175000017500000004604414551337306012606 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include #include #include /* Progarm names. */ #define PROGRAM_NAME "MakeCatalog" /* Program full name. */ #define PROGRAM_EXEC "astmkcatalog" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Multiple of given number to stop searching for upper-limit magnitude. */ #define MKCATALOG_UPPERLIMIT_MINIMUM_NUM 20 #define MKCATALOG_UPPERLIMIT_MAXFAILS_MULTIP 10 /* Unit string to use if values dataset doesn't have any. */ #define MKCATALOG_NO_UNIT "input-units" /* Intermediate/raw array elements =============================== Commonly, several high-level calculations need the same low-level measurements. So to avoid having to do these low-level calculations on each pixel multiple tiles, each thread/object will have one array of intermediate values which will be filled in the pass over the pixels. After this intermediate array is filled, and we don't need to pass over the pixels any more, we will use the intermediate values to derive the higher-level steps. According to the C standard, the first enum variable has a value of 0 (int), and when none are explicitly set (with an = sign), the values of the subsequent enum variables are 1 larger. We want column indexs that also start with zero, but setting the values by hand manually as preprocessor macros can be buggy (repeated numbers). So defining them as an enum is the perfect solution. Any future column that is to be added (or if any are removed), we (the developers) don't have to worry. --------------------- POSITIONS IN FITS standard --------------------- Like the final output, positions in this intermediate array are also in the FITS standard (fastest dimension is first). */ enum objectcols { OCOL_NUMALL, /* Area/number of all pixels with this label.*/ OCOL_NUMALLXY, /* Area/Number in first two dimensions. */ OCOL_NUM, /* Area/Number of values used in this object.*/ OCOL_NUMXY, /* Number of values in the first two dims. */ OCOL_SUM, /* Sum of (value-sky) in object. */ OCOL_SUMP2, /* Sum^2 of (value-sky) in object. */ OCOL_SUM_VAR, /* Variance including values (not just sky). */ OCOL_SUM_VAR_NUM, /* Number of pixels used for OCOL_SUM_VAR. */ OCOL_MEDIAN, /* Median of values in object. */ OCOL_MAXIMUM, /* Maximum value in object. */ OCOL_SIGCLIPNUM, /* Sigma-clipped mean of this object. */ OCOL_SIGCLIPSTD, /* Sigma-clipped mean of this object. */ OCOL_SIGCLIPMEAN, /* Sigma-clipped mean of this object. */ OCOL_SIGCLIPMEDIAN, /* Sigma-clipped mean of this object. */ OCOL_VX, /* Sum of (value-sky) * x. */ OCOL_VY, /* Sum of (value-sky) * y. */ OCOL_VZ, /* Sum of (value-sky) * z. */ OCOL_VXX, /* Sum of (value-sky) * x * x. */ OCOL_VYY, /* Sum of (value-sky) * y * y. */ OCOL_VXY, /* Sum of (value-sky) * x * y. */ OCOL_MINVX, /* X of minimum pixel in values file. */ OCOL_MAXVX, /* X of maximum pixel in values file. */ OCOL_MINVY, /* Y of minimum pixel in values file. */ OCOL_MAXVY, /* Y of maximum pixel in values file. */ OCOL_MINVZ, /* Z of minimum pixel in values file. */ OCOL_MAXVZ, /* Z of maximum pixel in values file. */ OCOL_MINVNUM, /* Number of pixels with minimum value. */ OCOL_MAXVNUM, /* Number of pixels with maximum value. */ OCOL_SUMSKY, /* Sum of sky value on this object. */ OCOL_NUMSKY, /* Number of sky value on this object. */ OCOL_SUMVAR, /* Sum of sky variance value on this object. */ OCOL_NUMVAR, /* Number of sky value on this object. */ OCOL_SUMWHT, /* Sum of positive image pixels. */ OCOL_NUMWHT, /* Number of positive pixels used for wht. */ OCOL_GX, /* Geometric center of object in X. */ OCOL_GY, /* Geometric center of object in Y. */ OCOL_GZ, /* Geometric center of object in Z. */ OCOL_GXX, /* Second order geometric variable: X*X. */ OCOL_GYY, /* Second order geometric variable: Y*Y. */ OCOL_GXY, /* Second order geometric variable: X*Y. */ OCOL_UPPERLIMIT_B, /* Upper limit brightness. */ OCOL_UPPERLIMIT_S, /* Upper limit one-sigma value. */ OCOL_UPPERLIMIT_Q, /* Quantile of object in random distribution.*/ OCOL_UPPERLIMIT_SKEW,/* (Mean-Median)/STD of random distribution. */ OCOL_HALFMAXNUM, /* Area/Number of pixels above half of max. */ OCOL_HALFMAXSUM, /* Sum of pixels above half of max. */ OCOL_HALFSUMNUM, /* Area/Number containing half of total sum. */ OCOL_FRACMAX1NUM, /* Area/Number containing frac of maximum. */ OCOL_FRACMAX1SUM, /* Sum containing frac of maximum. */ OCOL_FRACMAX2NUM, /* Area/Number containing frac of maximum. */ OCOL_FRACMAX2SUM, /* Sum containing frac of maximum. */ OCOL_C_NUMALL, /* Value independent no. of pixels in clumps.*/ OCOL_C_NUM, /* Area of clumps in this object. */ OCOL_C_SUM, /* Brightness in object clumps. */ OCOL_C_VX, /* Sum of (value-sky)*x on clumps. */ OCOL_C_VY, /* Sum of (value-sky)*y on obj. clumps. */ OCOL_C_VZ, /* Sum of (value-sky)*z on obj. clumps. */ OCOL_C_GX, /* Geometric center of clumps in object X. */ OCOL_C_GY, /* Geometric center of clumps in object Y. */ OCOL_C_GZ, /* Geometric center of clumps in object Z. */ OCOL_C_SUMWHT, /* Sum of positive image pixels for wht. */ OCOL_C_NUMWHT, /* Num of positive image pixels for wht. */ OCOL_NUMINSLICE, /* Number of used values in slice. */ OCOL_SUMINSLICE, /* Sum of values in each slice of label. */ OCOL_NUMALLINSLICE, /* Number of labeled pixels in slice. */ OCOL_SUMVARINSLICE, /* Sum of variance (including values). */ OCOL_SUMPROJINSLICE, /* Sum of projected area on each slice. */ OCOL_NUMPROJINSLICE, /* Sum of projected area on each slice. */ OCOL_SUMPROJVARINSLICE,/* Error in sum of projected area. */ OCOL_NUMOTHERINSLICE,/* Area of other labels in projected area. */ OCOL_SUMOTHERINSLICE,/* Sum of other objects in projected area. */ OCOL_SUMOTHERVARINSLICE,/* Variance in sum of other in proj. area.*/ OCOL_NUMALLOTHERINSLICE,/* Area of other labels in projected area.*/ OCOL_NUMCOLS, /* SHOULD BE LAST: total number of columns. */ }; enum clumpcols { CCOL_NUMALL, /* Number of pixels in clump. */ CCOL_NUMALLXY, /* Number of pixels in first two dims. */ CCOL_NUM, /* Number of values used in clump. */ CCOL_NUMXY, /* Number of values only in first two dims. */ CCOL_SUM, /* River subtracted brightness. */ CCOL_SUMP2, /* River subtracted brightness to power of 2.*/ CCOL_SUM_VAR, /* Variance including values (not just sky). */ CCOL_SUM_VAR_NUM, /* Number of pixels used for CCOL_SUM_VAR. */ CCOL_MEDIAN, /* Median of values in clump. */ CCOL_MAXIMUM, /* Maximum value in clump. */ CCOL_SIGCLIPNUM, /* Sigma-clipped mean of this clump. */ CCOL_SIGCLIPSTD, /* Sigma-clipped mean of this clump. */ CCOL_SIGCLIPMEAN, /* Sigma-clipped mean of this clump. */ CCOL_SIGCLIPMEDIAN, /* Sigma-clipped mean of this clump. */ CCOL_RIV_NUM, /* Num river pixels around this clump. */ CCOL_RIV_SUM, /* Sum of rivers around clump. */ CCOL_RIV_MIN, /* Minimum of rivers around clump. */ CCOL_RIV_MAX, /* Maximum of rivers around clump. */ CCOL_RIV_SUM_VAR, /* Variance of sum (for error measurements). */ CCOL_VX, /* Sum of (value-sky) * x. */ CCOL_VY, /* Sum of (value-sky) * y. */ CCOL_VZ, /* Sum of (value-sky) * z. */ CCOL_VXX, /* Sum of flux*x*x of this clump. */ CCOL_VYY, /* Sum of flux*y*y of this clump. */ CCOL_VXY, /* Sum of flux*x*y of this clump. */ CCOL_MINVX, /* X of minimum pixel in values array. */ CCOL_MAXVX, /* X of maximum pixel in values array. */ CCOL_MINVY, /* Y of minimum pixel in values array. */ CCOL_MAXVY, /* Y of maximum pixel in values array. */ CCOL_MINVZ, /* Z of minimum pixel in values array. */ CCOL_MAXVZ, /* Z of maximum pixel in values array. */ CCOL_MINVNUM, /* Number of pixels with minimum value. */ CCOL_MAXVNUM, /* Number of pixels with maximum value. */ CCOL_SUMSKY, /* Sum of sky value on this clump. */ CCOL_NUMSKY, /* Number of sky value on this clump. */ CCOL_SUMVAR, /* Sum of sky variance value on this clump. */ CCOL_NUMVAR, /* Number of sky variance value on this clump.*/ CCOL_SUMWHT, /* Sum of positive image pixels for wht. */ CCOL_NUMWHT, /* Num of positive image pixels for wht. */ CCOL_GX, /* Geometric center of clump in X. */ CCOL_GY, /* Geometric center of clump in Y. */ CCOL_GZ, /* Geometric center of clump in Y. */ CCOL_GXX, /* Second order geometric moment. */ CCOL_GYY, /* Second order geometric moment. */ CCOL_GXY, /* Second order geometric moment. */ CCOL_MINX, /* Minimum X value of clump. */ CCOL_MAXX, /* Maximum X value of clump. */ CCOL_MINY, /* Minimum Y value of clump. */ CCOL_MAXY, /* Maximum Y value of clump. */ CCOL_MINZ, /* Minimum Z value of clump. */ CCOL_MAXZ, /* Maximum Z value of clump. */ CCOL_UPPERLIMIT_B, /* Upper limit brightness. */ CCOL_UPPERLIMIT_S, /* Upper limit one-sigma value. */ CCOL_UPPERLIMIT_Q, /* Quantile of object in random distribution.*/ CCOL_UPPERLIMIT_SKEW,/* (Mean-Median)/STD of random distribution. */ CCOL_HALFMAXNUM, /* Area/Number of pixels above half of max. */ CCOL_HALFMAXSUM, /* Sum of pixels above half of max. */ CCOL_HALFSUMNUM, /* Area/Number containing half of total sum. */ CCOL_FRACMAX1NUM, /* Area/Number containing frac of maximum. */ CCOL_FRACMAX1SUM, /* Sum containing frac of maximum. */ CCOL_FRACMAX2NUM, /* Area/Number containing frac of maximum. */ CCOL_FRACMAX2SUM, /* Sum containing frac of maximum. */ CCOL_NUMCOLS, /* SHOULD BE LAST: total number of columns. */ }; /* IDs for vector columns, which need a separate allocation. The names should be the same as the 'OCOL_', just the prefix differs. */ enum vector_cols { VEC_NUMINSLICE, VEC_SUMINSLICE, VEC_NUMALLINSLICE, VEC_SUMVARINSLICE, VEC_SUMPROJINSLICE, VEC_NUMPROJINSLICE, VEC_SUMPROJVARINSLICE, VEC_NUMOTHERINSLICE, VEC_SUMOTHERINSLICE, VEC_SUMOTHERVARINSLICE, VEC_NUMALLOTHERINSLICE, VEC_NUM, }; /* Main program parameters structure */ struct mkcatalogparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ gal_list_i32_t *columnids; /* The desired column codes. */ char *objectsfile; /* Input filename. */ char *valuesfile; /* File name of objects file. */ char *valueshdu; /* HDU of objects image. */ char *clumpsfile; /* File name of objects file. */ char *clumpshdu; /* HDU of objects image. */ char *skyfile; /* File name of sky file. */ char *skyhdu; /* HDU of sky image. */ char *stdfile; /* File name of sky STD file. */ char *stdhdu; /* HDU of sky STD image. */ uint8_t clumpscat; /* ==1: create clumps catalog. */ uint8_t noclumpsort; /* Don't sort the clumps catalog. */ float zeropoint; /* Zero-point magnitude of object. */ uint8_t variance; /* Input STD file is actually variance. */ uint8_t forcereadstd; /* Read STD even if not needed. */ uint8_t subtractsky; /* ==1: subtract the Sky from values. */ float sfmagnsigma; /* Surface brightness multiple of sigma.*/ float sfmagarea; /* Surface brightness area (arcsec^2). */ uint8_t inbetweenints; /* Keep rows (integer ids) with no labs.*/ double sigmaclip[2]; /* Sigma clip column settings. */ char *upmaskfile; /* Name of upper limit mask file. */ char *upmaskhdu; /* HDU of upper limit mask file. */ size_t upnum; /* Number of upper-limit random samples.*/ size_t *uprange; /* Range of random pos. around target. */ uint8_t envseed; /* Use the environment for random seed. */ double upsigmaclip[2]; /* Sigma clip to measure upper limit. */ float upnsigma; /* Multiple of sigma to define up-lim. */ int32_t checkuplim[2]; /* Object & clump ID to check dist. */ gal_data_t *fracmax; /* Fractions to use in --fracsumarea. */ float spatialresolution; /* Error in area (used in SB error). */ /* Internal. */ time_t rawtime; /* Starting time of the program. */ gal_data_t *values; /* Input. */ gal_data_t *objects; /* Object labels. */ gal_data_t *clumps; /* Clump labels. */ gal_data_t *sky; /* Sky. */ gal_data_t *std; /* Sky standard deviation. */ gal_data_t *upmask; /* Upper limit magnitude mask. */ float medstd; /* Median standard deviation value. */ float cpscorr; /* Counts-per-second correction. */ int32_t *outlabs; /* Labels in output cat (when necessary)*/ int32_t *outlabsinv; /* Inverse of the 'outlabs' array. */ int32_t **origclpid; /* Original clump labels in objects. */ size_t numobjects; /* Number of object labels in image. */ float clumpsn; /* Clump S/N threshold. */ size_t numclumps; /* Number of clumps in image. */ gal_data_t *objectcols; /* Output columns for the objects. */ gal_data_t *clumpcols; /* Output columns for the clumps. */ gal_data_t *tiles; /* Tiles to cover each object. */ char *objectsout; /* Output objects catalog. */ char *clumpsout; /* Output clumps catalog. */ char *upcheckout; /* Name of upperlimit check table. */ uint8_t *oiflag; /* Intermediate flags for objects. */ uint8_t *ciflag; /* Intermediate flags for clumps. */ pthread_mutex_t mutex; /* Mutex to change the total numbers. */ size_t clumprowsfilled; /* No. filled clump rows at this moment.*/ gsl_rng *rng; /* Main random number generator. */ unsigned long int rng_seed; /* Random number generator seed. */ const char *rng_name; /* Name of random number generator. */ size_t rngmin; /* Minimum possible value of RNG. */ size_t rngdiff; /* Difference of RNG max and min. */ uint8_t uprangewarning; /* A warning must be printed. */ size_t *hostobjid_c; /* To sort the clumps table by Obj.ID. */ size_t *numclumps_c; /* To sort the clumps table by Obj.ID. */ double pixelarcsecsq; /* Area of input's pixels in arcsec^2. */ char *usedvaluesfile; /* Ptr to final name used for values. */ char *usedclumpsfile; /* Ptr to final name used for clumps. */ char *usedskyfile; /* Ptr to final fname used for sky. */ char *usedstdfile; /* Ptr to final name used for sky std. */ gal_data_t *wcs_vo; /* Object RA-Dec flux weighted X, Y. */ gal_data_t *wcs_vc; /* Clump RA-Dec flux weighted X, Y. */ gal_data_t *wcs_go; /* Object RA-Dec geometric X,Y. */ gal_data_t *wcs_gc; /* Clump RA-Dec geometric X, Y. */ gal_data_t *wcs_vcc; /* All clumps RA-Dec flx. wht. X, Y. */ gal_data_t *wcs_gcc; /* All clumps RA-Dec geometric X, Y. */ char **ctype; /* Type of WCS axis. */ uint8_t hasblank; /* Dataset has blank values. */ uint8_t hasmag; /* Catalog has magnitude columns. */ uint8_t upperlimit; /* Calculate upper limit magnitude. */ }; #endif gnuastro-0.22/bin/mkcatalog/authors-cite.h0000644000175000017500000000527214551337306014267 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX \ "Description of MakeCatalog\n" \ "--------------------------\n" \ "@ARTICLE{makecatalog,\n" \ " author = {{Akhlaghi}, Mohammad},\n" \ " title = \"{Separating Detection and Catalog Production}\",\n" \ " journal = {ASPC},\n" \ " year = \"2019\",\n" \ " month = \"Oct\",\n" \ " volume = {521},\n" \ " pages = {299},\n" \ "archivePrefix = {arXiv},\n" \ " eprint = {1611.06387},\n" \ " primaryClass = {astro-ph.IM},\n" \ " adsurl = {https://ui.adsabs.harvard.edu/abs/2019ASPC..521..299A},\n" \ " adsnote = {Provided by the SAO/NASA Astrophysics Data System}\n" \ "}\n" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/mkcatalog/args.h0000644000175000017500000013466214551337306012622 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Input options. */ { "clumpsfile", UI_KEY_CLUMPSFILE, "FITS", 0, "Dataset containing clump labels.", GAL_OPTIONS_GROUP_INPUT, &p->clumpsfile, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "clumpshdu", UI_KEY_CLUMPSHDU, "STR", 0, "Clump labels extension name or number.", GAL_OPTIONS_GROUP_INPUT, &p->clumpshdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "valuesfile", UI_KEY_VALUESFILE, "FITS", 0, "Values/brightness dataset.", GAL_OPTIONS_GROUP_INPUT, &p->valuesfile, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "valueshdu", UI_KEY_VALUESHDU, "STR", 0, "Name or number of extension containing values.", GAL_OPTIONS_GROUP_INPUT, &p->valueshdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "insky", UI_KEY_INSKY, "FITS/FLT", 0, "Input Sky value or file.", GAL_OPTIONS_GROUP_INPUT, &p->skyfile, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "skyhdu", UI_KEY_SKYHDU, "STR", 0, "Sky image extension name or number.", GAL_OPTIONS_GROUP_INPUT, &p->skyhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "subtractsky", UI_KEY_SUBTRACTSKY, 0, 0, "Subtract the Sky dataset from the values.", GAL_OPTIONS_GROUP_INPUT, &p->subtractsky, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "instd", UI_KEY_INSTD, "STR/FLT", 0, "Sky standard deviation value or dataset.", GAL_OPTIONS_GROUP_INPUT, &p->stdfile, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "stdhdu", UI_KEY_STDHDU, "STR", 0, "Sky STD extension name or number.", GAL_OPTIONS_GROUP_INPUT, &p->stdhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "variance", UI_KEY_VARIANCE, 0, 0, "STD input dataset is actually variance.", GAL_OPTIONS_GROUP_INPUT, &p->variance, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "forcereadstd", UI_KEY_FORCEREADSTD, 0, 0, "Read STD even if no columns need it.", GAL_OPTIONS_GROUP_INPUT, &p->forcereadstd, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "zeropoint", UI_KEY_ZEROPOINT, "FLT", 0, "Zeropoint magnitude of input dataset.", GAL_OPTIONS_GROUP_INPUT, &p->zeropoint, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sigmaclip", UI_KEY_SIGMACLIP, "FLT,FLT", 0, "Sigma-clip column multiple and tolerance.", GAL_OPTIONS_GROUP_INPUT, &p->sigmaclip, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_sigma_clip }, /* Output. */ { "clumpscat", UI_KEY_CLUMPSCAT, 0, 0, "Make a clumps catalog also.", GAL_OPTIONS_GROUP_OUTPUT, &p->clumpscat, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "noclumpsort", UI_KEY_NOCLUMPSORT, 0, 0, "Don't sort the clumps catalog by ID.", GAL_OPTIONS_GROUP_OUTPUT, &p->noclumpsort, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sfmagnsigma", UI_KEY_SFMAGNSIGMA, "FLT", 0, "Surface brightness multiple of Sky STD.", GAL_OPTIONS_GROUP_OUTPUT, &p->sfmagnsigma, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sfmagarea", UI_KEY_SFMAGAREA, "FLT", 0, "Surface brightness area (in arcseconds^2).", GAL_OPTIONS_GROUP_OUTPUT, &p->sfmagarea, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "inbetweenints", UI_KEY_INBETWEENINTS, 0, 0, "Keep rows (integer ids) with no labels.", GAL_OPTIONS_GROUP_OUTPUT, &p->inbetweenints, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Upper limit magnitude configurations. */ { 0, 0, 0, 0, "Upper limit magnitude settings:", UI_GROUP_UPPERLIMIT }, { "upmaskfile", UI_KEY_UPMASKFILE, "FITS", 0, "Mask image file name only for upper limit.", UI_GROUP_UPPERLIMIT, &p->upmaskfile, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "upmaskhdu", UI_KEY_UPMASKHDU, "STR", 0, "Mask image HDU only for upper limit.", UI_GROUP_UPPERLIMIT, &p->upmaskhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "upnum", UI_KEY_UPNUM, "INT", 0, "Number of randomly positioned samples", UI_GROUP_UPPERLIMIT, &p->upnum, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "uprange", UI_KEY_UPRANGE, "INT,INT", 0, "Range of random positions (pix) around target.", UI_GROUP_UPPERLIMIT, &p->uprange, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_sizes_reverse }, { "envseed", UI_KEY_ENVSEED, 0, 0, "Use GSL_RNG_SEED environment variable for seed.", UI_GROUP_UPPERLIMIT, &p->envseed, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "upsigmaclip", UI_KEY_UPSIGMACLIP, "FLT,FLT", 0, "Sigma multiple and, tolerance or number.", UI_GROUP_UPPERLIMIT, &p->upsigmaclip, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_sigma_clip }, { "upnsigma", UI_KEY_UPNSIGMA, "FLT", 0, "Multiple of sigma to define upperlimit.", UI_GROUP_UPPERLIMIT, &p->upnsigma, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checkuplim", UI_KEY_CHECKUPLIM, "INT[,INT]", 0, "Check random distribution for one label.", UI_GROUP_UPPERLIMIT, &p->checkuplim, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_check_upperlimit }, /* Other column configurations. */ { 0, 0, 0, 0, "Settings for other columns:", UI_GROUP_OTHERSETTINGS }, { "frac-max", UI_KEY_FRACMAX, "FLT[,FLT]", 0, "Fraction(s) in --frac-max* options.", UI_GROUP_OTHERSETTINGS, &p->fracmax, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "spatialresolution", UI_KEY_SPATIALRESOLUTION, "FLT", 0, "Spatial resolution (for surf. brightness err).", UI_GROUP_OTHERSETTINGS, &p->spatialresolution, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, }, /* ID related columns. */ { 0, 0, 0, 0, "Identifier columns", UI_GROUP_COLUMNS_IDS }, { /* 'ids' is not a unique column, it is a combination of several columns. */ "ids", UI_KEY_IDS, 0, 0, "All IDs of objects and clumps.", UI_GROUP_COLUMNS_IDS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "obj-id", UI_KEY_OBJID, 0, 0, "Object label/ID.", UI_GROUP_COLUMNS_IDS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "host-obj-id", UI_KEY_HOSTOBJID, 0, 0, "ID of object hosting this clump.", UI_GROUP_COLUMNS_IDS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "id-in-host-obj", UI_KEY_IDINHOSTOBJ, 0, 0, "ID of clump in host object.", UI_GROUP_COLUMNS_IDS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, /* Position related columns (pixel). */ { 0, 0, 0, 0, "Positional (pixel/image) measurements", UI_GROUP_COLUMNS_POSITION_PIXEL }, { "x", UI_KEY_X, 0, 0, "Flux weighted center in first FITS axis.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "y", UI_KEY_Y, 0, 0, "Flux weighted center in second FITS axis.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "z", UI_KEY_Z, 0, 0, "Flux weighted center in third FITS axis.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geo-x", UI_KEY_GEOX, 0, 0, "Geometric center in first FITS axis.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geo-y", UI_KEY_GEOY, 0, 0, "Geometric center in second FITS axis.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geo-z", UI_KEY_GEOZ, 0, 0, "Geometric center in third FITS axis.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "min-val-x", UI_KEY_MINVALX, 0, 0, "Minimum value's X axis position.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "max-val-x", UI_KEY_MAXVALX, 0, 0, "Maximum value's X axis position.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "min-val-y", UI_KEY_MINVALY, 0, 0, "Minimum value's Y axis position.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "max-val-y", UI_KEY_MAXVALY, 0, 0, "Maximum value's Y axis position.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "min-val-z", UI_KEY_MINVALZ, 0, 0, "Minimum value's Z axis position.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "max-val-z", UI_KEY_MAXVALZ, 0, 0, "Maximum value's Z axis position", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "min-x", UI_KEY_MINX, 0, 0, "Minimum X axis position.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "max-x", UI_KEY_MAXX, 0, 0, "Maximum X axis position.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "min-y", UI_KEY_MINY, 0, 0, "Minimum Y axis position.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "max-y", UI_KEY_MAXY, 0, 0, "Maximum Y axis position.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "min-z", UI_KEY_MINZ, 0, 0, "Minimum Z axis position", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "max-z", UI_KEY_MAXZ, 0, 0, "Maximum Z axis position.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-x", UI_KEY_CLUMPSX, 0, 0, "Flux.wht center of all clumps in obj. (X).", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-y", UI_KEY_CLUMPSY, 0, 0, "Flux.wht center of all clumps in obj. (Y).", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-z", UI_KEY_CLUMPSZ, 0, 0, "Flux.wht center of all clumps in obj. (Z).", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-geo-x", UI_KEY_CLUMPSGEOX, 0, 0, "Geometric center of all clumps in obj. (X).", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-geo-y", UI_KEY_CLUMPSGEOY, 0, 0, "Geometric center of all clumps in obj. (Y).", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-geo-z", UI_KEY_CLUMPSGEOZ, 0, 0, "Geometric center of all clumps in obj. (Z).", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, /* Position related columns (WCS). */ { 0, 0, 0, 0, "Positional (WCS) measurements", UI_GROUP_COLUMNS_POSITION_WCS }, { "ra", UI_KEY_RA, 0, 0, "Flux weighted center right ascension.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "dec", UI_KEY_DEC, 0, 0, "Flux weighted center declination.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "w1", UI_KEY_W1, 0, 0, "Flux weighted center in first WCS axis.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "w2", UI_KEY_W2, 0, 0, "Flux weighted center in second WCS axis.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "w3", UI_KEY_W3, 0, 0, "Flux weighted center in third WCS axis.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geo-w1", UI_KEY_GEOW1, 0, 0, "Geometric center in first WCS axis.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geo-w2", UI_KEY_GEOW2, 0, 0, "Geometric center in second WCS axis.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geo-w3", UI_KEY_GEOW2, 0, 0, "Geometric center in third WCS axis.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-w1", UI_KEY_CLUMPSW1, 0, 0, "Flux.wht center of all clumps in 1st WCS.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-w2", UI_KEY_CLUMPSW2, 0, 0, "Flux.wht center of all clumps in 2nd WCS.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-w3", UI_KEY_CLUMPSW3, 0, 0, "Flux.wht center of all clumps in 3rd WCS.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-geo-w1", UI_KEY_CLUMPSGEOW1, 0, 0, "Geometric center of all clumps in 1st WCS.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-geo-w2", UI_KEY_CLUMPSGEOW2, 0, 0, "Geometric center of all clumps in 2nd WCS.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-geo-w3", UI_KEY_CLUMPSGEOW3, 0, 0, "Geometric center of all clumps in 3rd WCS.", UI_GROUP_COLUMNS_POSITION_WCS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, /* Brightness/pixel-value related columns. */ { 0, 0, 0, 0, "Brightness/magnitude (only using pixel value/error) measurements", UI_GROUP_COLUMNS_BRIGHTNESS }, { "sum", UI_KEY_SUM, 0, 0, "Sum of pixel values in each label.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sum-error", UI_KEY_SUMERROR, 0, 0, "Error (1-sigma) in measuring sum.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-sum", UI_KEY_CLUMPSSUM, 0, 0, "Brightness of clumps in an object.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sum-no-river", UI_KEY_SUMNORIVER, 0, 0, "Sky (not river) subtracted clump sum.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "mean", UI_KEY_MEAN, 0, 0, "Mean of values in object/clump.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "std", UI_KEY_STD, 0, 0, "Standard dev. of values in object/clump.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "median", UI_KEY_MEDIAN, 0, 0, "Median of values in object/clump.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "maximum", UI_KEY_MAXIMUM, 0, 0, "Maximum value (mean of top three pixels)", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "magnitude", UI_KEY_MAGNITUDE, 0, 0, "Total magnitude of objects or clumps.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "magnitude-error", UI_KEY_MAGNITUDEERROR, 0, 0, "Magnitude error of objects or clumps.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-magnitude", UI_KEY_CLUMPSMAGNITUDE, 0, 0, "Magnitude of all clumps in object.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "upperlimit", UI_KEY_UPPERLIMIT, 0, 0, "Upper-limit value, use other options to config.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "upperlimit-mag", UI_KEY_UPPERLIMITMAG, 0, 0, "Upper-limit mag. use other options to config.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "upperlimit-onesigma", UI_KEY_UPPERLIMITONESIGMA, 0, 0, "Upper-limit one sigma value.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "upperlimit-sigma", UI_KEY_UPPERLIMITSIGMA, 0, 0, "Place in random distribution (sigma multiple).", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "upperlimit-quantile", UI_KEY_UPPERLIMITQUANTILE, 0, 0, "Quantile in random distribution (max 1).", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "upperlimit-skew", UI_KEY_UPPERLIMITSKEW, 0, 0, "(Mean-Median)/STD of random distribution.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "river-mean", UI_KEY_RIVERMEAN, 0, 0, "Mean river value surrounding a clump.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "river-num", UI_KEY_RIVERNUM, 0, 0, "Number of river pixels around a clump.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "river-min", UI_KEY_RIVERMIN, 0, 0, "Minimum river value around clump.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "river-max", UI_KEY_RIVERMAX, 0, 0, "Maximum river value around clump.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sn", UI_KEY_SN, 0, 0, "Signal to noise ratio of objects or clumps.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sky", UI_KEY_SKY, 0, 0, "Sky value (per pixel).", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sky-std", UI_KEY_SKYSTD, 0, 0, "Sky standard deviation (per pixel).", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sigclip-number", UI_KEY_SIGCLIPNUMBER, 0, 0, "Number of pixels in Sigma-clipped measurement.", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sigclip-median", UI_KEY_SIGCLIPMEDIAN, 0, 0, "Median after Sigma-clipping", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sigclip-mean", UI_KEY_SIGCLIPMEAN, 0, 0, "Mean after Sigma-clipping", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sigclip-std", UI_KEY_SIGCLIPSTD, 0, 0, "Standard deviation after Sigma-clipping", UI_GROUP_COLUMNS_BRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, /* Brightness/pixel-value related columns. */ { 0, 0, 0, 0, "Surface brightness measurements (all: mag/arcsec^2)", UI_GROUP_COLUMNS_SURFACEBRIGHTNESS }, { "sb", UI_KEY_SB, 0, 0, "Surface brightness.", UI_GROUP_COLUMNS_SURFACEBRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sb-error", UI_KEY_SBERROR, 0, 0, "Surface brightness error from STD/VAR image.", UI_GROUP_COLUMNS_SURFACEBRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "upperlimit-sb", UI_KEY_UPPERLIMITSB, 0, 0, "Upper-limit surface brightness.", UI_GROUP_COLUMNS_SURFACEBRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sigclip-mean-sb", UI_KEY_SIGCLIPMEANSB, 0, 0, "Surface brightness of sigclip-mean (1 pix area).", UI_GROUP_COLUMNS_SURFACEBRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sigclip-mean-sb-delta", UI_KEY_SIGCLIPMEANSBDELTA, 0, 0, "sigclip-mean-sb delta from sigclip'd STD.", UI_GROUP_COLUMNS_SURFACEBRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sigclip-std-sb", UI_KEY_SIGCLIPSTDSB, 0, 0, "Surface brightness of sigclip-std (1 pix area).", UI_GROUP_COLUMNS_SURFACEBRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "half-sum-sb", UI_KEY_HALFSUMSB, 0, 0, "Surface brightness within --halfsumarea.", UI_GROUP_COLUMNS_SURFACEBRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "half-max-sb", UI_KEY_HALFMAXSB, 0, 0, "Surface brightness within half the maximum.", UI_GROUP_COLUMNS_SURFACEBRIGHTNESS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, /* Morphology/shape related columns. */ { 0, 0, 0, 0, "Morphology/shape (non-parametric) measurements", UI_GROUP_COLUMNS_MORPHOLOGY }, { "num-clumps", UI_KEY_NUMCLUMPS, 0, 0, "Number of clumps in this object.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "area", UI_KEY_AREA, 0, 0, "Number of non-blank valued pixels.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "area-arcsec2", UI_KEY_AREAARCSEC2, 0, 0, "Area of labeled region in arcsec^2.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "area-min-val", UI_KEY_MINVALNUM, 0, 0, "Number of pixels used in '--min-val-*'.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "area-max-val", UI_KEY_MAXVALNUM, 0, 0, "Number of pixels used in '--max-val-*'.", UI_GROUP_COLUMNS_POSITION_PIXEL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "area-xy", UI_KEY_AREAXY, 0, 0, "Projected area in first two dimensions.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "clumps-area", UI_KEY_CLUMPSAREA, 0, 0, "Non-blank area covered by clumps.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "weight-area", UI_KEY_WEIGHTAREA, 0, 0, "Area used for value weighted positions.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geo-area", UI_KEY_GEOAREA, 0, 0, "Area labled region (irrespective of value).", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geo-area-xy", UI_KEY_GEOAREAXY, 0, 0, "Projected geo-area in first two dimensions.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "fwhm", UI_KEY_FWHM, 0, 0, "Full width at half max (non-parametric).", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "half-max-area", UI_KEY_HALFMAXAREA, 0, 0, "No. pixels valued above half the max.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "half-max-radius", UI_KEY_HALFMAXRADIUS, 0, 0, "Radius at half the maximum (non-parametric).", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "half-max-sum", UI_KEY_HALFMAXSUM, 0, 0, "Sum of pixels above half the maximum.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "half-sum-area", UI_KEY_HALFSUMAREA, 0, 0, "Area containing half of --brightness.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "half-sum-radius", UI_KEY_HALFSUMRADIUS, 0, 0, "Radius calculated from --halfsumarea.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "frac-max1-sum", UI_KEY_FRACMAX1SUM, 0, 0, "Sum of pixels brighter than 1st frac. of max.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "frac-max2-sum", UI_KEY_FRACMAX2SUM, 0, 0, "Sum of pixels brighter than 2nd frac. of max.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "frac-max1-area", UI_KEY_FRACMAX1AREA, 0, 0, "Area containing 1st fraction of maximum.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "frac-max2-area", UI_KEY_FRACMAX2AREA, 0, 0, "Area containing 2nd fraction of maximum.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "frac-max1-radius", UI_KEY_FRACMAX1RADIUS, 0, 0, "Radius calculated from --fracmaxarea1.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "frac-max2-radius", UI_KEY_FRACMAX2RADIUS, 0, 0, "Radius calculated from --fracmaxarea2.", UI_GROUP_COLUMNS_MORPHOLOGY, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, /* Elliptical measurements columns. */ { 0, 0, 0, 0, "Morphology/shape (elliptical) measurements", UI_GROUP_COLUMNS_ELLIPTICAL }, { "semi-major", UI_KEY_SEMIMAJOR, 0, 0, "RMS along major axis (in pixels).", UI_GROUP_COLUMNS_ELLIPTICAL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "semi-minor", UI_KEY_SEMIMINOR, 0, 0, "RMS along minor axis (in pixels).", UI_GROUP_COLUMNS_ELLIPTICAL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "axis-ratio", UI_KEY_AXISRATIO, 0, 0, "Flux weighted axis ratio.", UI_GROUP_COLUMNS_ELLIPTICAL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "position-angle", UI_KEY_POSITIONANGLE, 0, 0, "Flux weighted position angle.", UI_GROUP_COLUMNS_ELLIPTICAL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geo-semi-major", UI_KEY_GEOSEMIMAJOR, 0, 0, "Geometric RMS along major axis (ignoring value).", UI_GROUP_COLUMNS_ELLIPTICAL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geo-semi-minor", UI_KEY_GEOSEMIMINOR, 0, 0, "Geometric RMS along minor axis (ignoring value).", UI_GROUP_COLUMNS_ELLIPTICAL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geo-axis-ratio", UI_KEY_GEOAXISRATIO, 0, 0, "Geometric (ignoring values, only lab) axis ratio.", UI_GROUP_COLUMNS_ELLIPTICAL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "geo-position-angle", UI_KEY_GEOPOSITIONANGLE, 0, 0, "Geometric (ignoring values, only lab) pos. angle.", UI_GROUP_COLUMNS_ELLIPTICAL, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, /* Multi-valued measurements. */ { 0, 0, 0, 0, "Vector (multi-valued) measurements", UI_GROUP_COLUMNS_VECTOR }, { "sum-in-slice", UI_KEY_SUMINSLICE, 0, 0, "[3D input] Sum of values in each slice.", UI_GROUP_COLUMNS_VECTOR, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sum-err-in-slice", UI_KEY_SUMERRINSLICE, 0, 0, "[3D input] Error in '--sum-in-slice'.", UI_GROUP_COLUMNS_VECTOR, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "area-in-slice", UI_KEY_AREAINSLICE, 0, 0, "[3D input] Number of labeled in each slice.", UI_GROUP_COLUMNS_VECTOR, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sum-proj-in-slice", UI_KEY_SUMPROJINSLICE, 0, 0, "[3D input] Sum of projected area in each slice.", UI_GROUP_COLUMNS_VECTOR, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "area-proj-in-slice", UI_KEY_AREAPROJINSLICE, 0, 0, "[3D input] Num. voxels in '--sum-proj-in-slice'.", UI_GROUP_COLUMNS_VECTOR, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sum-proj-err-in-slice", UI_KEY_SUMPROJERRINSLICE, 0, 0, "[3D input] Error of '--sum-proj-in-slice'.", UI_GROUP_COLUMNS_VECTOR, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "area-other-in-slice", UI_KEY_AREAOTHERINSLICE, 0, 0, "[3D input] Area of other lab. in projected area.", UI_GROUP_COLUMNS_VECTOR, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sum-other-in-slice", UI_KEY_SUMOTHERINSLICE, 0, 0, "[3D input] Sum of other lab. in projected area.", UI_GROUP_COLUMNS_VECTOR, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, { "sum-other-err-in-slice", UI_KEY_SUMOTHERERRINSLICE, 0, 0, "[3D input] Area in '--sum-other-in-slice'.", UI_GROUP_COLUMNS_VECTOR, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_column_codes_ll }, {0} }; /* Define the child argp structure ------------------------------- NOTE: these parts can be left untouched.*/ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/mkcatalog/ui.h0000644000175000017500000001224314551337306012271 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_UPPERLIMIT = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_OTHERSETTINGS, UI_GROUP_COLUMNS_IDS, UI_GROUP_COLUMNS_POSITION_PIXEL, UI_GROUP_COLUMNS_POSITION_WCS, UI_GROUP_COLUMNS_BRIGHTNESS, UI_GROUP_COLUMNS_SURFACEBRIGHTNESS, UI_GROUP_COLUMNS_MORPHOLOGY, UI_GROUP_COLUMNS_ELLIPTICAL, UI_GROUP_COLUMNS_VECTOR, }; /* Available letters for short options: a b c f g k n u w x y z A B E G H J L O Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_CLUMPSCAT = 'C', /* General settings. */ UI_KEY_VALUESFILE = 'v', UI_KEY_CLUMPSFILE = 'l', UI_KEY_INSKY = 's', UI_KEY_INSTD = 't', UI_KEY_ENVSEED = 'e', UI_KEY_IDS = 'i', /* Catalog columns. */ UI_KEY_HOSTOBJID = 'j', UI_KEY_X = 'x', UI_KEY_Y = 'y', UI_KEY_Z = 'z', UI_KEY_RA = 'r', UI_KEY_DEC = 'd', UI_KEY_MAGNITUDE = 'm', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_VALUESHDU = 1000, /* General settings. */ UI_KEY_CLUMPSHDU, UI_KEY_SKYHDU, UI_KEY_STDHDU, UI_KEY_WITHCLUMPS, UI_KEY_FORCEREADSTD, UI_KEY_ZEROPOINT, UI_KEY_SIGMACLIP, UI_KEY_VARIANCE, UI_KEY_SUBTRACTSKY, UI_KEY_SFMAGNSIGMA, UI_KEY_SFMAGAREA, UI_KEY_SPECTRUM, UI_KEY_INBETWEENINTS, UI_KEY_UPMASKFILE, UI_KEY_UPMASKHDU, UI_KEY_UPNUM, UI_KEY_UPRANGE, UI_KEY_UPSIGMACLIP, UI_KEY_UPNSIGMA, UI_KEY_CHECKUPLIM, UI_KEY_NOCLUMPSORT, UI_KEY_FRACMAX, UI_KEY_SPATIALRESOLUTION, UI_KEY_OBJID, /* Catalog columns. */ UI_KEY_IDINHOSTOBJ, UI_KEY_AREA, UI_KEY_AREAARCSEC2, UI_KEY_SB, UI_KEY_SBERROR, UI_KEY_AREAXY, UI_KEY_NUMCLUMPS, UI_KEY_CLUMPSAREA, UI_KEY_WEIGHTAREA, UI_KEY_GEOAREA, UI_KEY_GEOAREAXY, UI_KEY_GEOX, UI_KEY_GEOY, UI_KEY_GEOZ, UI_KEY_MINVALX, UI_KEY_MAXVALX, UI_KEY_MINVALY, UI_KEY_MAXVALY, UI_KEY_MINVALZ, UI_KEY_MAXVALZ, UI_KEY_MINVALNUM, UI_KEY_MAXVALNUM, UI_KEY_CLUMPSX, UI_KEY_CLUMPSY, UI_KEY_CLUMPSZ, UI_KEY_CLUMPSGEOX, UI_KEY_CLUMPSGEOY, UI_KEY_CLUMPSGEOZ, UI_KEY_MINX, UI_KEY_MAXX, UI_KEY_MINY, UI_KEY_MAXY, UI_KEY_MINZ, UI_KEY_MAXZ, UI_KEY_W1, UI_KEY_W2, UI_KEY_W3, UI_KEY_GEOW1, UI_KEY_GEOW2, UI_KEY_GEOW3, UI_KEY_CLUMPSW1, UI_KEY_CLUMPSW2, UI_KEY_CLUMPSW3, UI_KEY_CLUMPSGEOW1, UI_KEY_CLUMPSGEOW2, UI_KEY_CLUMPSGEOW3, UI_KEY_SUM, UI_KEY_SUMERROR, UI_KEY_CLUMPSSUM, UI_KEY_SUMNORIVER, UI_KEY_STD, UI_KEY_MEAN, UI_KEY_MEDIAN, UI_KEY_MAXIMUM, UI_KEY_MAGNITUDEERROR, UI_KEY_SN, UI_KEY_CLUMPSMAGNITUDE, UI_KEY_UPPERLIMIT, UI_KEY_UPPERLIMITSB, UI_KEY_UPPERLIMITMAG, UI_KEY_UPPERLIMITONESIGMA, UI_KEY_UPPERLIMITSIGMA, UI_KEY_UPPERLIMITQUANTILE, UI_KEY_UPPERLIMITSKEW, UI_KEY_RIVERMEAN, UI_KEY_RIVERNUM, UI_KEY_RIVERMIN, UI_KEY_RIVERMAX, UI_KEY_SKY, UI_KEY_SKYSTD, UI_KEY_SIGCLIPNUMBER, UI_KEY_SIGCLIPMEDIAN, UI_KEY_SIGCLIPMEAN, UI_KEY_SIGCLIPSTD, UI_KEY_SIGCLIPMEANSB, UI_KEY_SIGCLIPMEANSBDELTA, UI_KEY_SIGCLIPSTDSB, UI_KEY_SEMIMAJOR, UI_KEY_SEMIMINOR, UI_KEY_POSITIONANGLE, UI_KEY_AXISRATIO, UI_KEY_GEOSEMIMAJOR, UI_KEY_GEOSEMIMINOR, UI_KEY_GEOAXISRATIO, UI_KEY_GEOPOSITIONANGLE, UI_KEY_FWHM, UI_KEY_HALFMAXAREA, UI_KEY_HALFMAXRADIUS, UI_KEY_HALFMAXSUM, UI_KEY_HALFMAXSB, UI_KEY_HALFSUMAREA, UI_KEY_HALFSUMSB, UI_KEY_HALFSUMRADIUS, UI_KEY_FRACMAX1SUM, UI_KEY_FRACMAX2SUM, UI_KEY_FRACMAX1AREA, UI_KEY_FRACMAX2AREA, UI_KEY_FRACMAX1RADIUS, UI_KEY_FRACMAX2RADIUS, /* Vector columns */ UI_KEY_SUMINSLICE, UI_KEY_SUMERRINSLICE, UI_KEY_AREAINSLICE, UI_KEY_SUMPROJINSLICE, UI_KEY_AREAPROJINSLICE, UI_KEY_SUMPROJERRINSLICE, UI_KEY_AREAOTHERINSLICE, UI_KEY_SUMOTHERINSLICE, UI_KEY_SUMOTHERERRINSLICE, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct mkcatalogparams *p); void ui_free_report(struct mkcatalogparams *p, struct timeval *t1); #endif gnuastro-0.22/bin/mkcatalog/mkcatalog.h0000644000175000017500000000540414551337306013617 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MKCATALOG_H #define MKCATALOG_H /* Main structure for parsing individual objects. */ struct mkcatalog_passparams { struct mkcatalogparams *p; /* Main MakeCatalog paramers. */ double *oi; /* Intermediate values for objects. */ double *ci; /* Intermediate values for clumps. */ int32_t object; /* Object that is currently working on. */ size_t clumpsinobj; /* The number of clumps in this object. */ gal_data_t *tile; /* The tile to pass-over. */ int32_t *st_o; /* Starting pointer for object labels. */ int32_t *st_c; /* Starting pointer for clump labels. */ float *st_v; /* Starting pointer for values array. */ float *st_sky; /* Starting pointer for Sky array. */ float *st_std; /* Starting pointer for Sky STD array. */ size_t start_end_inc[2]; /* Starting and ending indexs. */ size_t *shift; /* Shift coordinates. */ gsl_rng *rng; /* Random number generator. */ size_t clumpstartindex; /* Clump starting row in final catalog. */ gal_data_t *up_vals; /* Container for upper-limit values. */ gal_data_t *vector; /* Array of datasets for raw vectors. */ }; void mkcatalog_outputs_keys_numeric(gal_fits_list_key_t **keylist, void *number, uint8_t type, char *nameliteral, char *commentliteral, char *unitliteral); void mkcatalog_outputs_keys_infiles(struct mkcatalogparams *p, gal_fits_list_key_t **keylist); void mkcatalog(struct mkcatalogparams *p); #endif gnuastro-0.22/bin/mkcatalog/columns.h0000644000175000017500000000222014551337306013326 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef COLUMNS_H #define COLUMNS_H void columns_define_alloc(struct mkcatalogparams *p); void columns_fill(struct mkcatalog_passparams *pp); #endif gnuastro-0.22/bin/mkcatalog/upperlimit.h0000644000175000017500000000234514551337306014050 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UPPERLIMIT_H #define UPPERLIMIT_H void upperlimit_write_keys(struct mkcatalogparams *p, gal_fits_list_key_t **keylist, int withsigclip); void upperlimit_calculate(struct mkcatalog_passparams *pp); #endif gnuastro-0.22/bin/mkcatalog/parse.h0000644000175000017500000000237614551337306012774 /********************************************************************* MakeCatalog - Make a catalog from an input and labeled image. MakeCatalog is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef PARSE_H #define PARSE_H void parse_initialize(struct mkcatalog_passparams *pp); void parse_objects(struct mkcatalog_passparams *pp); void parse_clumps(struct mkcatalog_passparams *pp); void parse_order_based(struct mkcatalog_passparams *pp); #endif gnuastro-0.22/bin/mkprof/0000755000175000017500000000000014557514202011113 5gnuastro-0.22/bin/mkprof/Makefile.am0000644000175000017500000000325014557211443013070 ## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2015-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astmkprof ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astmkprof_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astmkprof_SOURCES = main.c ui.c mkprof.c oneprofile.c profiles.c EXTRA_DIST = main.h authors-cite.h args.h ui.h mkprof.h oneprofile.h \ profiles.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astmkprof.conf astmkprof-3d.conf gnuastro-0.22/bin/mkprof/astmkprof.conf0000644000175000017500000000341314551337306013713 # Default parameters (System) for MakeProfiles. # MakeProfiles is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astmkprof --help # Full list of options, short doc. # $ astmkprof -P # Print all options and used values. # $ info astmkprof # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. #input backhdu 1 customimghdu 1 customtablehdu 1 # Output: mergedsize 1000,1000 oversample 5 circumwidth 2 type float32 # Profiles: tunitinp 0 numrandom 10000 tolerance 0.01 zeropoint 0.00 # Catalog: mode img ccol 2 ccol 3 fcol 4 rcol 5 ncol 6 pcol 7 qcol 8 mcol 9 tcol 10 # WCS: crpix 1,1 crval 1,1 cdelt 0.03/3600,0.03/3600 pc -1,0,0,1 cunit deg,deg ctype RA---TAN,DEC--TAN gnuastro-0.22/bin/mkprof/astmkprof-3d.conf0000644000175000017500000000402014551337306014212 # Default parameters (System) for MakeProfiles. # MakeProfiles is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astmkprof --help # Full list of options, short doc. # $ astmkprof -P # Print all options and used values. # $ info astmkprof # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2019-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. #input backhdu 1 # Output: mergedsize 100,100,200 oversample 3 circumwidth 2 type float32 # Profiles: tunitinp 0 numrandom 10000 tolerance 0.01 zeropoint 0.00 # Catalog: mode img ccol 2 ccol 3 ccol 4 fcol 5 rcol 6 ncol 7 pcol 8 p2col 9 p3col 10 qcol 11 q2col 12 mcol 13 tcol 14 # WCS: crpix 1,1,1 crval 1,1,1e-10 cdelt 0.2/3600,0.2/3600,1.25e-10 pc -1,0,0,0,1,0,0,0,1 cunit deg,deg,m ctype RA---TAN,DEC--TAN,AWAV gnuastro-0.22/bin/mkprof/Makefile.in0000644000175000017500000034053714557513747013131 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astmkprof$(EXEEXT) subdir = bin/mkprof ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astmkprof_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) mkprof.$(OBJEXT) \ oneprofile.$(OBJEXT) profiles.$(OBJEXT) astmkprof_OBJECTS = $(am_astmkprof_OBJECTS) am__DEPENDENCIES_1 = astmkprof_DEPENDENCIES = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/main.Po ./$(DEPDIR)/mkprof.Po \ ./$(DEPDIR)/oneprofile.Po ./$(DEPDIR)/profiles.Po \ ./$(DEPDIR)/ui.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astmkprof_SOURCES) DIST_SOURCES = $(astmkprof_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib astmkprof_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astmkprof_SOURCES = main.c ui.c mkprof.c oneprofile.c profiles.c EXTRA_DIST = main.h authors-cite.h args.h ui.h mkprof.h oneprofile.h \ profiles.h dist_sysconf_DATA = astmkprof.conf astmkprof-3d.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/mkprof/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/mkprof/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astmkprof$(EXEEXT): $(astmkprof_OBJECTS) $(astmkprof_DEPENDENCIES) $(EXTRA_astmkprof_DEPENDENCIES) @rm -f astmkprof$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astmkprof_OBJECTS) $(astmkprof_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkprof.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oneprofile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/profiles.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/mkprof.Po -rm -f ./$(DEPDIR)/oneprofile.Po -rm -f ./$(DEPDIR)/profiles.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/mkprof.Po -rm -f ./$(DEPDIR)/oneprofile.Po -rm -f ./$(DEPDIR)/profiles.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/mkprof/main.c0000644000175000017500000000314014551337306012123 /********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "mkprof.h" #include "ui.h" /* needs main.h. */ int main (int argc, char *argv[]) { struct timeval t1; struct mkprofparams p={{{0},0},0}; /* Set the starting time.*/ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run MakeProfiles. */ mkprof(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully. */ return EXIT_SUCCESS; } gnuastro-0.22/bin/mkprof/ui.c0000644000175000017500000022773314551337306011634 /********************************************************************* Arithmetic - Do arithmetic operations on images. Arithmetic is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "oneprofile.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "[Options] [Catalog]"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will create a FITS " "image containing any number of mock astronomical profiles based on " "an input catalog. All the profiles will be built from the center " "outwards. First by Monte Carlo integration, then using the central " "pixel position. The tolerance level specifies when the switch will " "occur.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static uint8_t ui_profile_name_read(char *string, size_t row) { if( !strcmp("sersic", string) ) return PROFILE_SERSIC; else if ( !strcmp("moffat", string) ) return PROFILE_MOFFAT; else if ( !strcmp("gaussian", string) ) return PROFILE_GAUSSIAN; else if ( !strcmp("point", string) ) return PROFILE_POINT; else if ( !strcmp("flat", string) ) return PROFILE_FLAT; else if ( !strcmp("circum", string) ) return PROFILE_CIRCUMFERENCE; else if ( !strcmp("distance", string) ) return PROFILE_DISTANCE; else if ( !strcmp("azimuth", string) ) return PROFILE_DISTANCE; else if ( !strcmp("custom-prof", string) ) return PROFILE_CUSTOM_PROF; else if ( !strcmp("custom-img", string) ) return PROFILE_CUSTOM_IMG; else if ( !strcmp(GAL_BLANK_STRING, string) ) error(EXIT_FAILURE, 0, "atleast one profile function is blank"); else { if(row) error(EXIT_FAILURE, 0, "'%s' not recognized as a profile " "function name in row %zu", string, row); else error(EXIT_FAILURE, 0, "'%s' not recognized as a profile " "function name in values to '--kernel' option", string); } return PROFILE_INVALID; } char * ui_profile_name_write(int profile_code) { switch(profile_code) { case PROFILE_SERSIC: return "sersic"; case PROFILE_MOFFAT: return "moffat"; case PROFILE_GAUSSIAN: return "gaussian"; case PROFILE_POINT: return "point"; case PROFILE_FLAT: return "flat"; case PROFILE_CIRCUMFERENCE: return "circum"; case PROFILE_DISTANCE: return "distance"; case PROFILE_CUSTOM_PROF: return "custom-prof"; case PROFILE_AZIMUTH: return "azimuth"; case PROFILE_CUSTOM_IMG: return "custom-img"; default: error(EXIT_FAILURE, 0, "%s: %d not recognized as a profile code", __func__, profile_code); } return NULL; } static void ui_initialize_options(struct mkprofparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->poptions = program_options; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; p->customregular[0] = NAN; p->customregular[1] = NAN; /* Default program parameters. */ p->zeropoint = NAN; p->cp.type = GAL_TYPE_FLOAT32; /* Modify the common options for this program. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: cp->coptions[i].doc="Input catalog HDU name or number (if FITS)."; break; case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].flags=OPTION_HIDDEN; break; case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_MINMAPSIZE: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct mkprofparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(p->catname) argp_error(state, "only one argument (input catalog) may be given"); else if(arg[0]!='\0') p->catname=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /* Parse the kernel properties, the format is like this: PROFILE_NAME,PARAM_1,PARAM_2,PARAM_3,...,PARAM_N */ void * ui_parse_kernel(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { long profcode; double *darray; gal_data_t *kernel; size_t i, nc, need=0; char *c, *dstr, *profile, *tailptr; char *str, sstr[GAL_OPTIONS_STATIC_MEM_FOR_VALUES]; /* We want to print the stored values. */ if(lineno==-1) { /* Set the value pointer to kernel. */ kernel=*(gal_data_t **)(option->value); darray = kernel->array; /* First write the profile function code into the output string. */ nc=0; profile=ui_profile_name_write(kernel->status); switch(kernel->flag) { case 2: nc += sprintf(sstr+nc, "%s,", profile); break; case 3: nc += sprintf(sstr+nc, "%s-3d,", profile); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "to fix the problem. %u is not a recognized kernel " "dimensionality", __func__, PACKAGE_BUGREPORT, kernel->flag); } /* Write the values into a string. */ for(i=0;isize;++i) { if( nc > GAL_OPTIONS_STATIC_MEM_FOR_VALUES-100 ) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s " "so we can address the problem. The number of " "necessary characters in the statically allocated " "string has become too close to %d", __func__, PACKAGE_BUGREPORT, GAL_OPTIONS_STATIC_MEM_FOR_VALUES); nc += sprintf(sstr+nc, "%g,", darray[i]); } sstr[nc-1]='\0'; /* Copy the string into a dynamically allocated space, because it will be freed later.*/ gal_checkset_allocate_copy(sstr, &str); return str; } else { /* If the kernel has already been given, ignore it (the previously read value has higher precedence). */ if( *(gal_data_t **)(option->value) ) return NULL; /* The first part of 'arg' (before the first comma) is not necessarily a number. So we need to separate the first part from the rest.*/ c=arg;while(*c!='\0' && *c!=',') ++c; profile=arg; arg = (*c=='\0') ? NULL : c+1; /* the 'point' profile doesn't need */ *c='\0'; /* any numbers. */ /* Make sure something exists after the name of the profile. */ if(arg==NULL) error(EXIT_FAILURE, 0, "the kernel option value couldn't be " "parsed in the expected format: one name (of a profile), " "followed by some numbers defining that profile. See the " "description of '--kernel' in the manual (with the 'info " "astmkprof' command) for the meaning of the numbers"); /* Read the parameters. */ kernel=gal_options_parse_list_of_numbers(arg, filename, lineno, GAL_TYPE_FLOAT64); /* Put the kernel dataset into the main program structure. */ *(gal_data_t **)(option->value) = kernel; /* All parameters must be positive. */ darray=kernel->array; for(i=0;isize;++i) if(darray[i]<=0) error(EXIT_FAILURE, 0, "value number %zu (%g) in the given list " "of kernel parameters ('%s') is not acceptable. All " "parameters to the '--kernel' option must be non-zero and " "positive", i+1, darray[i], arg); /* See if a 2D kernel is requested or a 3D kernel and keep the value in 'kernel->flag'. If no dimensionality is defined, then by default, we'll assume it is 2D.*/ c=profile;while(*c!='\0' && *c!='-') ++c; if(*c=='\0') kernel->flag=2; else { *c='\0'; dstr=c+1; if( (dstr[1]!='d' && dstr[1]!='D') || dstr[2]!='\0') error(EXIT_FAILURE, 0, "bad formatting in '--kernel' " "dimensionality. The dimensionality suffix must be " "either 2d, 3d (not case sensitive). You have given " "'%s'", dstr); switch(dstr[0]) { case '2': kernel->flag=2; break; case '3': kernel->flag=3; break; default: error(EXIT_FAILURE, 0, "only 2 or 3 dimensional kernels " "can currently be built, you have asked for a %c " "dimensional kernel", dstr[0]); } } /* Write the profile type code into 'kernel->status'. If it starts with a digit, then the user might have given the code of the profile directly. In that case, parse the number. Otherwise, let 'ui_profile_name_read' find the value. */ if( isdigit(*profile) ) { profcode=strtol(profile, &tailptr, 0); if(*tailptr!='\0') error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' " "couldn't be read as a profile code", profile); if(profcode<=0 || profcode>=PROFILE_MAXIMUM_CODE) error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' " "isn't a valid profile code. Please run with " "'--help' and see the acceptable codes in " "explanation of the '--fcol' option", profile); kernel->status=profcode; } else kernel->status=ui_profile_name_read(profile, 0); /* Make sure the number of parameters conforms with the profile. */ switch(kernel->status) { case PROFILE_SERSIC: need = kernel->flag==2 ? 3 : 4; break; case PROFILE_MOFFAT: need = kernel->flag==2 ? 3 : 4; break; case PROFILE_GAUSSIAN: need = kernel->flag==2 ? 2 : 3; break; case PROFILE_POINT: need = 0; break; case PROFILE_FLAT: need = kernel->flag==2 ? 1 : 2; break; case PROFILE_CIRCUMFERENCE: need = kernel->flag==2 ? 1 : 2; break; case PROFILE_DISTANCE: need = kernel->flag==2 ? 1 : 2; break; case PROFILE_AZIMUTH: need = kernel->flag==2 ? 1 : 2; break; default: error_at_line(EXIT_FAILURE, 0, filename, lineno, "%s: a bug! " "Please contact us at %s to correct the issue. " "Profile code %d is not recognized", __func__, PACKAGE_BUGREPORT, kernel->status); } /* Make sure the number of parameters given are the same number that are needed. */ if( kernel->size != need ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "as a %uD kernel, " "a '%s' profile needs %zu parameters, but %zu " "parameter%s given to '--kernel'", kernel->flag, ui_profile_name_write(kernel->status), need, kernel->size, kernel->size>1?"s are":" is"); /* Our job is done, return NULL. */ return NULL; } } /* Parse the mode to interpret the given coordinates. */ void * ui_parse_coordinate_mode(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *outstr; /* We want to print the stored values. */ if(lineno==-1) { gal_checkset_allocate_copy( *(uint8_t *)(option->value)==MKPROF_MODE_IMG ? "img" : "wcs", &outstr ); return outstr; } else { if(!strcmp(arg, "img")) *(uint8_t *)(option->value)=MKPROF_MODE_IMG; else if (!strcmp(arg, "wcs")) *(uint8_t *)(option->value)=MKPROF_MODE_WCS; else error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' (value to " "'--mode') not recognized as a coordinate standard " "mode. Recognized values are 'img' and 'wcs'. This " "option is necessary to identify the nature of your " "input coordinates", arg); return NULL; } } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct mkprofparams *p) { size_t i; /* When a no-merged image is to be created, type is necessary. */ if( p->cp.type==GAL_TYPE_INVALID && p->nomerged==0) error(EXIT_FAILURE, 0, "an output type '--type' is necessary when a " "merged image is to be built."); /* Check if one of the coordinate columns has been given, the other is also given. To simplify the job, we use the fact that conditions in C return either a 0 (when failed) and 1 (when successful). Note that if neighter coordinates are specified there is no problem, the user might have input the other coordinate standard. We'll also check for that after this.*/ if(p->kernel==NULL) { if(p->mode==0) error(EXIT_FAILURE, 0, "the '--mode' option is necessary when " "building profiles from a catalog. It can take two values: " "'img' or 'wcs' which specify how to interpret the " "coordinate columns"); } /* The zeropoint magnitude is only necessary when 'mcolissum' is not called. */ if( p->mcolissum==0 && isnan(p->zeropoint) ) error(EXIT_FAILURE, 0, "no zeropoint magnitude given. A zeropoint " "magnitude is necessary when '--mcolissum' is not called (i.e., " "when the contents of '--mcol' must be interpretted as a " "magnitude, not brightness)."); /* The kernel should always be normalized to 1.0. So '--magatpeak' should never be called with '--kernel'. */ if(p->kernel && p->magatpeak) error(EXIT_FAILURE, 0, "the kernel created by '--kernel' should " "always be normalized (sum of its values) to 1.0. Therefore " "it shouldn't be called with '--magatpeak'"); /* Make sure no zero value is given for the '--mergedsize' option (only when it is necessary). */ if(p->dsize && p->backname==NULL) for(i=0;p->dsize[i]!=GAL_BLANK_SIZE_T;++i) if(p->dsize[i]==0) error(EXIT_FAILURE, 0, "values to '--mergedsize' option must not " "be zero"); /* First, make sure all calls to '--customimg' and '--customimghdu' are put into a single list, then make sure that if '--customimg' is given, '--customimghdu' is also given. */ gal_options_merge_list_of_csv(&p->customimghdu); gal_options_merge_list_of_csv(&p->customimgname); if(p->customimgname && p->customimghdu==NULL) error(EXIT_FAILURE, 0, "no '--customimghdu' given: when " "'--customimg' is given, it is necessary to also specify " "a HDU. If '--customimghdu' is given only once, it can be " "used for any number of '--customimg's. Otherwise (if the " "HDUs of different inputs differ), it is necessary to " "have the same number of calls to both '--customimg' and " "'--customimghdu'"); if(gal_list_str_number(p->customimghdu)!=1 && ( gal_list_str_number(p->customimghdu) < gal_list_str_number(p->customimgname) ) ) error(EXIT_FAILURE, 0, "incorrect number of '--customimghdu' " "options are given: you should either give it once " "(same HDU in all images), or it should be called " "at least the same number of times that you have calld " "'--customimg'"); } /* Sanity check on options AND arguments. If only option values are to be checked, use 'ui_check_only_options'. */ static void ui_check_options_and_arguments(struct mkprofparams *p) { int d0f1; char *tmpname; /* If no kernel is given, make sure an input catalog is given, and if it is FITS, that the HDU is also provided. When a kernel option, we will set a fiducial catalog name called 'kernel.txt' to automatic output filename generation. */ if(p->kernel) { if(p->catname) error(EXIT_FAILURE, 0, "'--kernel' cannot be called with an input " "catalog ('%s'). The parameters necessary to build a single " "kernel output should be given to '--kernel', not in a " "catalog", p->catname); p->catname="kernel.optional"; } else { if(p->catname) { if( gal_fits_file_recognized(p->catname) && p->cp.hdu==NULL) error(EXIT_FAILURE, 0, "no 'hdu' specified for the input FITS " "table '%s', to ", p->catname); } } /* If cp->output was not specified on the command line or in any of the configuration files, then automatic output should be used, in which case, cp->output should be the current directory. */ if(p->cp.output==NULL) gal_checkset_allocate_copy("./", &p->cp.output); /* Set the necessary output names. */ d0f1=gal_checkset_dir_0_file_1(&p->cp, p->cp.output, p->catname); if(d0f1) /* --output is a file name. */ { p->mergedimgname=p->cp.output; p->outdir=gal_checkset_dir_part(p->mergedimgname); } else /* --output is a directory name. */ { gal_checkset_allocate_copy(p->cp.output, &p->outdir); gal_checkset_check_dir_write_add_slash(&p->outdir); tmpname=gal_checkset_automatic_output(&p->cp, ( p->catname ? p->catname : "makeprofiles" ), ( p->kernel ? ".fits" : "_profiles.fits" )); p->mergedimgname=gal_checkset_malloc_cat(p->outdir, tmpname); free(tmpname); } p->basename=gal_checkset_not_dir_part(p->mergedimgname); /* If a merged image is requested (or '--kernel' is called), then delete the final filename if it exists. */ if(p->nomerged==0 && p->kernel) gal_checkset_writable_remove(p->mergedimgname, p->catname, p->cp.keep, p->cp.dontdelete); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static gal_data_t * ui_read_cols_general(struct mkprofparams *p, gal_list_str_t *colstrs) { gal_data_t *cols; gal_list_str_t *lines; /* Reverse the order to make the column orders correspond to how we added them here and avoid possible bugs. */ gal_list_str_reverse(&colstrs); /* Read the desired columns from the file. */ lines=gal_options_check_stdin(p->catname, p->cp.stdintimeout, "input"); cols=gal_table_read(p->catname, p->cp.hdu, lines, colstrs, p->cp.searchin, p->cp.ignorecase, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap, NULL, "--hdu"); gal_list_str_free(lines, 1); /* The name of the input catalog is only for informative steps from now on (we won't be dealing with the actual file any more). So if the standard input was used (therefore 'catname==NULL', set it to 'stdin'). */ if(p->catname==NULL) gal_checkset_allocate_copy("standard-input", &p->catname); /* Set the number of objects and return the columns. */ p->num = cols ? cols->size : 0; return cols; } static void ui_read_cols_2d(struct mkprofparams *p) { int checkblank; size_t i, counter=0; size_t numcustomimg=0; char *colname=NULL, **strarr; gal_list_str_t *ccol, *colstrs=NULL; gal_data_t *cols, *tmp, *corrtype=NULL; /* The coordinate columns are a linked list of strings. */ ccol=p->ccol; for(i=0; indim; ++i) { gal_list_str_add(&colstrs, ccol->v, 0); ccol=ccol->next; } /* Add the rest of the columns in a specific order. Later (before reading), we will reverse them, this order here helps in readability at this stage */ gal_list_str_add(&colstrs, p->fcol, 0); gal_list_str_add(&colstrs, p->rcol, 0); gal_list_str_add(&colstrs, p->ncol, 0); gal_list_str_add(&colstrs, p->pcol, 0); gal_list_str_add(&colstrs, p->qcol, 0); gal_list_str_add(&colstrs, p->mcol, 0); gal_list_str_add(&colstrs, p->tcol, 0); /* Read the columns. */ cols=ui_read_cols_general(p, colstrs); /* Put each column's data in the respective internal array. */ while(cols!=NULL) { /* Pop out the top column. */ tmp=gal_list_data_pop(&cols); /* By default check if the column has blank values, but it can be turned off for some columns. */ checkblank=1; /* See which column we are currently reading. */ switch(++counter) { case 1: case 2: colname = ( counter==1 ? "first coordinate column ('--coordcol')" : "second coordinate column ('--coordcol')" ); corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT64); switch(counter) { case 1: p->x=corrtype->array; break; case 2: p->y=corrtype->array; break; } break; case 3: if(tmp->type==GAL_TYPE_STRING) { p->f=gal_pointer_allocate(GAL_TYPE_UINT8, p->num, 0, __func__, "p->f"); strarr=tmp->array; for(i=0;inum;++i) p->f[i]=ui_profile_name_read(strarr[i], i+1); gal_data_free(tmp); corrtype=NULL; } else { /* Read the user's profile codes. */ colname="profile function code ('fcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_UINT8); p->f=corrtype->array; /* Check if they are in the correct range. */ for(i=0;inum;++i) if(p->f[i]<=PROFILE_INVALID || p->f[i]>=PROFILE_MAXIMUM_CODE) error(EXIT_FAILURE, 0, "%s: row %zu, the function " "code is %u. It should be >%d and <%d. Please " "run again with '--help' and check the acceptable " "codes.\n\nAlternatively, you can use alphabetic " "strings to specify the profile functions, see " "the explanations under 'fcol' from the command " "below (press the 'SPACE' key to go down, and " "the 'q' to return back to the command-line):\n\n" " $ info %s\n", p->catname, i+1, p->f[i], PROFILE_INVALID, PROFILE_MAXIMUM_CODE, PROGRAM_EXEC); } break; case 4: colname="radius ('rcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->r=corrtype->array; /* Check if there is no negative or zero-radius profile. */ for(i=0;inum;++i) if(p->f[i]!=PROFILE_POINT && p->r[i]<=0.0f) error(EXIT_FAILURE, 0, "%s: row %zu, the radius value %g is " "not acceptable for a '%s' profile. It has to be larger " "than 0", p->catname, i+1, p->r[i], ui_profile_name_write(p->f[i])); break; case 5: colname="index ('ncol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->n=corrtype->array; break; case 6: colname="position angle ('pcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->p1=corrtype->array; break; case 7: colname="axis ratio ('qcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->q1=corrtype->array; /* Check if there is no negative or >1.0f axis ratio. */ for(i=0;inum;++i) if( p->f[i]!=PROFILE_POINT && p->f[i]!=PROFILE_CUSTOM_IMG && (p->q1[i]<=0.0f || p->q1[i]>1.0f) ) error(EXIT_FAILURE, 0, "%s: row %zu, the axis ratio value " "%g is not acceptable for a '%s' profile. It has to " "be >0 and <=1", p->catname, i+1, p->q1[i], ui_profile_name_write(p->f[i])); break; case 8: colname="magnitude ('mcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->m=corrtype->array; checkblank=0; /* Magnitude can be NaN: to mask regions. */ break; case 9: colname="truncation ('tcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->t=corrtype->array; /* Check if there is no negative or zero truncation radius. */ for(i=0;inum;++i) if(p->t[i]<=0.0f && p->f[i]!=PROFILE_POINT && p->f[i]!=PROFILE_CUSTOM_IMG ) error(EXIT_FAILURE, 0, "%s: row %zu, the truncation radius " "value %g is not acceptable for a '%s' profile. It " "has to be larger than 0", p->catname, i+1, p->t[i], ui_profile_name_write(p->f[i])); break; /* If the index isn't recognized, then it is larger, showing that there was more than one match for the given criteria */ default: gal_tableintern_error_col_selection(p->catname, p->cp.hdu, "too " "many columns were selected " "by the given values to the " "options ending in 'col'."); } /* Sanity check and clean up. Note that it might happen that the input structure is already freed. In that case, 'corrtype' will be NULL. */ if(corrtype) { /* Make sure there are no blank values in this column. */ if( checkblank && gal_blank_present(corrtype, 1) ) error(EXIT_FAILURE, 0, "%s column has blank values. " "Input columns cannot contain blank values", colname); /* Free the unnecessary sturcture information. The correct-type ('corrtype') data structure's array is necessary for later steps, so its pointer has been copied in the main program's structure. Hence, we should set the structure's pointer to NULL so the important data isn't freed.*/ corrtype->array=NULL; gal_data_free(corrtype); } } /* Make sure flat profiles aren't given a value of zero. */ counter=0; if( !p->cp.quiet && (p->mforflatpix || p->mcolissum) ) for(i=0;inum;++i) if( p->m[i]==0.0 && ( p->f[i]==PROFILE_POINT || p->f[i]==PROFILE_FLAT || p->f[i]==PROFILE_CIRCUMFERENCE ) ) { error(0, 0, "WARNING: atleast one single-valued profile " "(point, flat, or circumference profiles) has a " "magnitude column value of 0.0 while '--mforflatpix' " "or '--mcolforbrightness' have also been given. In " "such cases the profile's pixels will have a value " "of zero and thus they will not be identifiable from " "the zero-valued background. If this behavior is " "intended, this warning can be suppressed with the " "'--quiet' (or '-q') option.\n"); break; } /* Make sure the custom image counters are properly given. */ for(i=0;inum;++i) if(p->f[i]==PROFILE_CUSTOM_IMG) { /* For a custom image, the radius column is the counter of the image (given to '--customimg'), so it should be an integer. */ if( p->r[i]!=ceil(p->r[i]) ) error(EXIT_FAILURE, 0, "the value in the \"radius\" column " "for a 'custom-img' should be an integer (counter of " "the image given to '--customimg'), but in row number " "%zu of the input table, it is '%g'", i, p->r[i]); /* Find the largest custom image counter. */ if(p->r[i]>numcustomimg) numcustomimg=p->r[i]; } /* Make sure that a sufficient number of custom images are given (as defined by the largest number of custom image counter. */ if(numcustomimg>0 && numcustomimg>gal_list_str_number(p->customimgname)) error(EXIT_FAILURE, 0, "insufficient number of custom images: " "only %zu image(s) given to '--customimg', but in the " "catalog, at least one row requests custom image number " "%zu (in the \"radius\" column)", gal_list_str_number(p->customimgname), numcustomimg); } /* Read the columns for a 3D profile. */ static void ui_read_cols_3d(struct mkprofparams *p) { int checkblank; size_t i, counter=0; char *colname=NULL, **strarr; gal_list_str_t *ccol, *colstrs=NULL; gal_data_t *cols, *tmp, *corrtype=NULL; /* The 3D-specific columns are not mandatory in 'args.h', so we need to check here if they are given or not before starting to read them. */ if(p->p2col==NULL || p->p3col==NULL || p->q2col==NULL) error(EXIT_FAILURE, 0, "at least one of '--p2col', '--p3col', " "or '--q2col' have not been identified. When building a " "3D profile, these three columns are also mandatory"); /* The coordinate columns are a linked list of strings. */ ccol=p->ccol; for(i=0; indim; ++i) { gal_list_str_add(&colstrs, ccol->v, 0); ccol=ccol->next; } /* Add the rest of the columns in a specific order. Later (before reading), we will reverse them, this order here helps in readability at this stage */ gal_list_str_add(&colstrs, p->fcol, 0); gal_list_str_add(&colstrs, p->rcol, 0); gal_list_str_add(&colstrs, p->ncol, 0); gal_list_str_add(&colstrs, p->pcol, 0); gal_list_str_add(&colstrs, p->p2col, 0); gal_list_str_add(&colstrs, p->p3col, 0); gal_list_str_add(&colstrs, p->qcol, 0); gal_list_str_add(&colstrs, p->q2col, 0); gal_list_str_add(&colstrs, p->mcol, 0); gal_list_str_add(&colstrs, p->tcol, 0); /* Read the columns. */ cols=ui_read_cols_general(p, colstrs); /* Put each column's data in the respective internal array. */ while(cols!=NULL) { /* Pop out the top column. */ tmp=gal_list_data_pop(&cols); /* By default check if the column has blank values, but it can be turned off for some columns. */ checkblank=1; /* See which column we are currently reading. */ switch(++counter) { case 1: case 2: case 3: colname = ( counter==1 ? "first coordinate column ('--coordcol')" : ( counter==2 ? "second coordinate column ('--coordcol')" : "third coordinate column ('--coordcol')" ) ); corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT64); switch(counter) { case 1: p->x=corrtype->array; break; case 2: p->y=corrtype->array; break; case 3: p->z=corrtype->array; break; } break; case 4: if(tmp->type==GAL_TYPE_STRING) { p->f=gal_pointer_allocate(GAL_TYPE_UINT8, p->num, 0, __func__, "p->f"); strarr=tmp->array; for(i=0;inum;++i) p->f[i]=ui_profile_name_read(strarr[i], i+1); gal_data_free(tmp); corrtype=NULL; } else { /* Read the user's profile codes. */ colname="profile function code ('fcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_UINT8); p->f=corrtype->array; /* Check if they are in the correct range. For profile names given as string, a non-matching string will result in an error, so there is no need for this in that scenario. */ for(i=0;inum;++i) if(p->f[i]<=PROFILE_INVALID || p->f[i]>=PROFILE_MAXIMUM_CODE) error(EXIT_FAILURE, 0, "%s: row %zu, the function " "code is %u. It should be >%d and <%d. Please " "run again with '--help' and check the acceptable " "codes.\n\nAlternatively, you can use alphabetic " "strings to specify the profile functions, see " "the explanations under 'fcol' from the command " "below (press the 'SPACE' key to go down, and " "the 'q' to return back to the command-line):\n\n" " $ info %s\n", p->catname, i+1, p->f[i], PROFILE_INVALID, PROFILE_MAXIMUM_CODE, PROGRAM_EXEC); } /* General profile sanity checks. */ for(i=0;inum;++i) { /* Azimuthal profile not yet supported for ellipsoids. */ if(p->f[i]==PROFILE_AZIMUTH) error(EXIT_FAILURE, 0, "%s: row %zu: the azimuthal " "angle profile is not yet supported for 3D " "datasets", p->catname, i+1); } break; case 5: colname="radius ('rcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->r=corrtype->array; /* Check if there is no negative or zero-radius profile. */ for(i=0;inum;++i) if(p->f[i]!=PROFILE_POINT && p->r[i]<=0.0f) error(EXIT_FAILURE, 0, "%s: row %zu, the radius value %g " "is not acceptable for a '%s' profile. It has to be " "larger than 0", p->catname, i+1, p->r[i], ui_profile_name_write(p->f[i])); break; case 6: colname="index ('ncol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->n=corrtype->array; break; case 7: colname="first euler angle ('pcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->p1=corrtype->array; break; case 8: colname="second euler angle ('p2col')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->p2=corrtype->array; break; case 9: colname="third euler angle ('p3col')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->p3=corrtype->array; break; case 10: colname="axis ratio 1 ('qcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->q1=corrtype->array; /* Check if there is no negative or >1.0f axis ratio. */ for(i=0;inum;++i) if( p->f[i]!=PROFILE_POINT && (p->q1[i]<=0.0f || p->q1[i]>1.0f) ) error(EXIT_FAILURE, 0, "%s: row %zu, the first axis ratio " "value %g is not acceptable for a '%s' profile. It " "has to be >0 and <=1", p->catname, i+1, p->q1[i], ui_profile_name_write(p->f[i])); break; case 11: colname="axis ratio 2 ('q2col')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->q2=corrtype->array; /* Check if there is no negative or >1.0f axis ratio. */ for(i=0;inum;++i) if( p->f[i]!=PROFILE_POINT && (p->q2[i]<=0.0f || p->q2[i]>1.0f) ) error(EXIT_FAILURE, 0, "%s: row %zu, the second axis ratio " "value %g is not acceptable for a '%s' profile. It " "has to be >0 and <=1", p->catname, i+1, p->q2[i], ui_profile_name_write(p->f[i])); break; case 12: colname="magnitude ('mcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->m=corrtype->array; checkblank=0; /* Magnitude can be NaN: to mask regions. */ break; case 13: colname="truncation ('tcol')"; corrtype=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->t=corrtype->array; /* Check if there is no negative or zero truncation radius. */ for(i=0;inum;++i) if(p->f[i]!=PROFILE_POINT && p->t[i]<=0.0f) error(EXIT_FAILURE, 0, "%s: row %zu, the truncation radius " "value %g is not acceptable for a '%s' profile. It has " "to be larger than 0", p->catname, i+1, p->t[i], ui_profile_name_write(p->f[i])); break; /* If the index isn't recognized, then it is larger, showing that there was more than one match for the given criteria */ default: gal_tableintern_error_col_selection(p->catname, p->cp.hdu, "too " "many columns were selected " "by the given values to the " "options ending in 'col'."); } /* Sanity check and clean up. Note that it might happen that the input structure is already freed. In that case, 'corrtype' will be NULL. */ if(corrtype) { /* Make sure there are no blank values in this column. */ if( checkblank && gal_blank_present(corrtype, 1) ) error(EXIT_FAILURE, 0, "%s column has blank values. " "Input columns cannot contain blank values", colname); /* Free the unnecessary sturcture information. The correct-type ('corrtype') data structure's array is necessary for later steps, so its pointer has been copied in the main program's structure. Hence, we should set the structure's pointer to NULL so the important data isn't freed.*/ corrtype->array=NULL; gal_data_free(corrtype); } } } /* It is possible to define the internal catalog through a catalog or the '--kernel' option. This function will do the job. */ static void ui_prepare_columns(struct mkprofparams *p) { size_t i; double *karr; float r, n, t, q2; /* If the kernel option was called, then we need to build a series of single element columns to create an internal catalog. */ if(p->kernel) { /* Number of profiles to be built. */ p->num=1; /* Allocate the necessary columns. */ p->x = gal_pointer_allocate(GAL_TYPE_FLOAT64, 1, 1, __func__, "p->x"); p->y = gal_pointer_allocate(GAL_TYPE_FLOAT64, 1, 1, __func__, "p->y"); p->f = gal_pointer_allocate(GAL_TYPE_UINT8, 1, 1, __func__, "p->f"); p->r = gal_pointer_allocate(GAL_TYPE_FLOAT32, 1, 1, __func__, "p->r"); p->n = gal_pointer_allocate(GAL_TYPE_FLOAT32, 1, 1, __func__, "p->n"); p->p1 = gal_pointer_allocate(GAL_TYPE_FLOAT32, 1, 1, __func__, "p->p1"); p->q1 = gal_pointer_allocate(GAL_TYPE_FLOAT32, 1, 1, __func__, "p->q1"); p->m = gal_pointer_allocate(GAL_TYPE_FLOAT32, 1, 1, __func__, "p->m"); p->t = gal_pointer_allocate(GAL_TYPE_FLOAT32, 1, 1, __func__, "p->t"); if(p->ndim==3) { p->z =gal_pointer_allocate(GAL_TYPE_FLOAT64, 1, 1, __func__, "p->z"); p->p2=gal_pointer_allocate(GAL_TYPE_FLOAT32, 1, 1, __func__, "p->p2"); p->p3=gal_pointer_allocate(GAL_TYPE_FLOAT32, 1, 1, __func__, "p->p3"); p->q2=gal_pointer_allocate(GAL_TYPE_FLOAT32, 1, 1, __func__, "p->q2"); } /* For profiles that need a different number of input values. Note that when a profile doesn't need a value, it will be ignored. */ karr=p->kernel->array; if(p->kernel->size) { r = karr[0]; n = p->kernel->size==2 ? 0.0f : karr[1]; t = ( p->ndim==2 ? p->kernel->size==1 ? 1.0f : karr[ p->kernel->size - 1 ] : p->kernel->size==1 ? 1.0f : karr[ p->kernel->size - 2 ] ); } else r=n=t=0.0f; /* Fill the allocated spaces. */ p->x[0] = 0.0f; p->y[0] = 0.0f; p->f[0] = p->kernel->status; p->r[0] = r; p->n[0] = n; p->p1[0] = 0.0f; p->q1[0] = 1.0f; p->m[0] = p->mcolissum ? 1.0f : p->zeropoint; p->t[0] = t; if(p->ndim==3) { /* Parameters for any case. */ p->z[0] = 0.0f; q2 = p->kernel->size ? karr[ p->kernel->size - 1 ] : 0.0f; /* 3rd-dim axis ratio > 1: Set the major axis in the direction of the 3rd dimension (90 degree rotation for all three rotations). Also set the two axis ratios to the inverse of the requested value. */ if(q2>1.0) { p->q1[0] = p->q2[0] = 1/q2; p->p1[0] = p->p2[0] = p->p3[0] = 90.0; } /* 3rd-dim axis ratio <=1: No extra rotation is necessary and 'q2'can simply be put in the respective column. */ else { p->q2[0] = q2; p->p2[0] = p->p3[0] = 0.0; } } } else { /* Make sure the number of coordinate columns and number of dimensions in outputs are the same. There is no problem if it is more than 'ndim'. In that case, the last values (possibly in configuration files) will be ignored. */ if( gal_list_str_number(p->ccol) < p->ndim ) error(EXIT_FAILURE, 0, "%zu coordinate columns (calls to " "'--coordcol') given but output has %zu dimensions", gal_list_str_number(p->ccol), p->ndim); /* Call the respective function. */ switch(p->ndim) { case 2: ui_read_cols_2d(p); break; case 3: ui_read_cols_3d(p); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "resolve the issue. %zu not recognized for 'p->ndim'", __func__, PACKAGE_BUGREPORT, p->ndim); } } /* If a custom profile or image is requested, make sure that a custom file is given. */ for(i=0;inum;++i) { if(p->f[i]==PROFILE_CUSTOM_PROF) { if(p->customtablename==NULL) error(EXIT_FAILURE, 0, "at least one custom profile " "requested (first occurrence in row %zu), but no " "file/table was given to the '--customtable' " "option. See the description of '--customtable' " "for more information on the desired format", i+1); break; } if(p->f[i]==PROFILE_CUSTOM_IMG) { if(p->customimgname==NULL) error(EXIT_FAILURE, 0, "at least one custom image " "requested (first occurrence in row %zu), but no " "file/table was given to the '--customimg' " "option. See the description of '--customimg' " "for more information on the desired format", i+1); break; } } } /* To keep things clean, we'll do the WCS sanity checks in this small function. If everything is ok, this function will return 0 (so an if condition won't be executed). If any of the necessary inputs aren't given, it will return 1. */ static int ui_wcs_sanity_check(struct mkprofparams *p) { size_t ndim=p->ndim; if(p->crpix) { if(p->crpix->size!=ndim) error(EXIT_FAILURE, 0, "%zu values given to '--crpix'. This " "must be the same as the output dimension (%zu)", p->crpix->size, ndim); return 0; } else return 1; if(p->crval) { if(p->crval->size!=ndim) error(EXIT_FAILURE, 0, "%zu values given to '--crval'. This " "must be the same as the output dimension (%zu)", p->crval->size, ndim); return 0; } else return 1; if(p->cdelt) { if(p->cdelt->size!=ndim) error(EXIT_FAILURE, 0, "%zu values given to '--cdelt'. This " "must be the same as the output dimension (%zu)", p->cdelt->size, ndim); return 0; } else return 1; if(p->pc) { if(p->pc->size!=ndim*ndim) error(EXIT_FAILURE, 0, "%zu values given to '--pc'. This must " "be the square as the output dimension (%zu)", p->pc->size, ndim*ndim); return 0; } else return 1; if(p->cunit) { if(p->cunit->size!=ndim) error(EXIT_FAILURE, 0, "%zu values given to '--cunit'. This " "must be the same as the output dimension (%zu)", p->cunit->size, ndim); return 0; } else return 1; if(p->ctype) { if(p->ctype->size!=ndim) error(EXIT_FAILURE, 0, "%zu values given to '--ctype'. This " "must be the same as the output dimension (%zu)", p->ctype->size, ndim); return 0; } else return 1; } static void ui_prepare_wcs(struct mkprofparams *p) { int status; struct wcsprm *wcs; char **cunit, **ctype; size_t i, ndim=p->ndim; double *crpix, *crval, *cdelt, *pc; /* Check and initialize the WCS information. If any of the necessary WCS parameters are missing, then don't build any WCS. */ if( ui_wcs_sanity_check(p) ) return; crpix = p->crpix->array; crval = p->crval->array; cdelt = p->cdelt->array; pc = p->pc->array; cunit = p->cunit->array; ctype = p->ctype->array; /* Allocate the memory necessary for the wcsprm structure. */ errno=0; wcs=p->wcs=malloc(sizeof *wcs); if(wcs==NULL) error(EXIT_FAILURE, errno, "%zu for wcs in preparewcs", sizeof *wcs); /* Initialize the structure (allocate all its internal arrays). */ wcs->flag=-1; if( (status=wcsini(1, ndim, wcs)) ) error(EXIT_FAILURE, 0, "wcsini error %d: %s", status, wcs_errmsg[status]); /* Fill in all the important WCS structure parameters. */ wcs->altlin = 0x1; wcs->equinox = 2000.0f; for(i=0;icrpix[i] = crpix[i]; wcs->crval[i] = crval[i]; wcs->cdelt[i] = cdelt[i]; strcpy(wcs->cunit[i], cunit[i]); strcpy(wcs->ctype[i], ctype[i]); } for(i=0;ipc[i]=pc[i]; /* Set up the wcs structure with the constants defined above. */ status=wcsset(wcs); if(status) error(EXIT_FAILURE, 0, "wcsset error %d: %s", status, wcs_errmsg[status]); /* Convert it to CD if the user wanted it. */ if(p->cp.wcslinearmatrix==GAL_WCS_LINEAR_MATRIX_CD) gal_wcs_to_cd(wcs); } static void ui_prepare_canvas(struct mkprofparams *p) { float *f, *ff; int setshift=0; long width[3]={1,1,1}; size_t tndim, *tdsize; double truncr, semiaxes[3], euler_deg[3]; size_t i, nshift=0, *dsize=NULL, ndim_counter; /* If a background image is specified, then use that as the output image to build the profiles over. */ if(p->backname) { /* Read in the background image and its coordinates, note that when no merged image is desired, we just need the WCS information of the background image and the number of its dimensions. So 'ndim==0' and what 'dsize' points to is irrelevant. */ tdsize=gal_fits_img_info_dim(p->backname, p->backhdu, &tndim, "--backhdu"); p->wcs=gal_wcs_read(p->backname, p->backhdu, p->cp.wcslinearmatrix, 0, 0, &p->nwcs, "--backhdu"); tndim=gal_dimension_remove_extra(tndim, tdsize, p->wcs); free(tdsize); if(p->nomerged==0) { /* If p->dsize was given as an option, free it. */ if( p->dsize ) free(p->dsize); /* Write the size of the background image into 'dsize'. */ p->dsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, p->ndim, 0, __func__, "p->dsize"); for(i=0;indim;++i) p->dsize[i] = p->out->dsize[i]; /* Set all pixels to zero if the user wanted a clear canvas. */ if(p->clearcanvas) {ff=(f=p->out->array)+p->out->size; do *f++=0.0f; while(foversample=1; if(p->shift) free(p->shift); p->shift=gal_pointer_allocate(GAL_TYPE_SIZE_T, p->ndim, 1, __func__, "p->shift (1)"); } else { /* If any of the shift elements are zero, the others should be too!*/ if(p->shift && p->shift[0] && p->shift[1]) { /* Multiply the shift by the over-sample. */ for(i=0;p->shift[i]!=GAL_BLANK_SIZE_T;++i) { ++nshift; p->shift[i] *= p->oversample; } /* Make sure it has the same number of elements as naxis. */ if(p->ndim!=nshift) error(EXIT_FAILURE, 0, "%zu and %zu elements given to " "'--ndim' and '--shift' respectively. These two " "numbers must be the same", p->ndim, nshift); } else { /* 'prepforconv' is only valid when xshift and yshift are both zero. Also, a PSF profile should exist in the image. */ if(p->prepforconv) { /* Check if there is at least one Moffat or Gaussian profile. */ for(i=0;inum;++i) if( oneprofile_ispsf(p->f[i]) ) { /* Calculate the size of the box holding the PSF. Note: - For the Moffat and Gaussian profiles, the radius column is actually the FWHM which is actually the diameter, not radius. So we have to divide it by half. - encloseellipse outputs the total width, we only want half of it for the shift. */ setshift=1; truncr = p->tunitinp ? p->t[i] : p->t[i] * p->r[i]/2; if(p->ndim==2) gal_box_bound_ellipse(truncr, p->q1[i]*truncr, p->p1[i], width); else { euler_deg[0] = p->p1[i]; euler_deg[1] = p->p2[i]; euler_deg[2] = p->p3[i]; semiaxes[0] = truncr; semiaxes[1] = truncr * p->q1[i]; semiaxes[2] = truncr * p->q2[i]; gal_box_bound_ellipsoid(semiaxes, euler_deg, width); } } /* Either set the shifts to zero or to the values set from the PSF. Note that the user might have given any number of shifts (from zero). So, we'll just free it and reset it. */ if(p->shift) free(p->shift); p->shift=gal_pointer_allocate(GAL_TYPE_SIZE_T, p->ndim, 1, __func__, "p->shift (2)"); if(setshift) { p->shift[0] = (width[0]/2)*p->oversample; p->shift[1] = (width[1]/2)*p->oversample; if(p->ndim==3) p->shift[2] = (width[2]/2)*p->oversample; } } } /* If shift has not been set until now, set it. */ if(p->shift==NULL) p->shift=gal_pointer_allocate(GAL_TYPE_SIZE_T, p->ndim, 1, __func__, "p->shift (3)"); /* Prepare the sizes of the final merged image (if it is to be made). Note that even if we don't want a merged image, we still need its WCS structure. */ if(p->nomerged==0) { ndim_counter=0; for(i=0;p->dsize[i]!=GAL_BLANK_SIZE_T;++i) { /* Count the number of dimensions. */ ++ndim_counter; /* Correct dsize. */ p->dsize[i] = (p->dsize[i]*p->oversample) + (2*p->shift[i]); } dsize = p->dsize; /* Make the output structure. */ p->out=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, ndim_counter, dsize, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); } } /* Make the WCS structure of the output data structure (if it has not been set when reading the background image). */ if(p->wcs==NULL) { if(p->backname) { /* If the background image didn't have WCS, the output shouldn't have any either! So let the user know. */ if(p->cp.quiet==0) error(EXIT_SUCCESS, 0, "WARNING: no WCS in image given to " "'--background': %s! The output will therefore also " "not have any WCS. If you want to use the " "MakeProfiles WCS options ('--crpix', '--crval' and " "etc) to manually set the WCS of your output image, " "please do _not_ use '--background' and give the " "final size (in pixels) of your desired output through " "the '--mergedsize' option. You can suppress this " "warning with the '--quiet' option", gal_fits_name_save_as_string(p->backname, p->backhdu)); } else ui_prepare_wcs(p); } /* Set the name, comments and units of the final merged output. */ if(p->out) { if(p->out->name) free(p->out->name); gal_checkset_allocate_copy("Mock profiles", &p->out->name); if(p->out->unit==NULL) gal_checkset_allocate_copy("counts", &p->out->unit); } } static void ui_finalize_coordinates(struct mkprofparams *p) { void *arr=NULL; size_t i=0, ndim=p->ndim; uint8_t *fl, os=p->oversample; gal_data_t *tmp, *flag, *coords=NULL; double *cdelt=p->wcs->cdelt, *crpix=p->wcs->crpix; /* When the user specified RA and Dec columns, the respective values where stored in the 'p->x' and 'p->y' arrays. So before proceeding, we need to change them into actual image coordinates. */ if(p->mode==MKPROF_MODE_WCS) { /* Make list of coordinates for input of 'gal_wcs_world_to_img'. */ for(i=0;ix', 'p->y' and 'p->z' arrays temporarily before. Here, we will convert them to image coordinates in place. */ switch(i) { /* Note that the linked list gets filled in a first-in-last-out order, so the last column added should be the first WCS dimension. */ case 0: arr = ndim==2 ? p->y : p->z; break; case 1: arr = ndim==2 ? p->x : p->y; break; case 2: arr = p->x; break; default: error(EXIT_FAILURE, 0, "conversion from WCS to image " "coordinates is not supported for %zu-dimensional " "datasets", ndim); } /* Allocate the list of coordinates. */ gal_list_data_add_alloc(&coords, arr, GAL_TYPE_FLOAT64, 1, &p->num, NULL, 0, -1, 1, NULL, NULL, NULL); } /* Convert the world coordinates to image coordinates (inplace). */ gal_wcs_world_to_img(coords, p->wcs, 1); /* Remove all blank elements (where WCSLIB couldn't do the conversion) and print a warning for those rows. IMPORTANT: we don't want to update 'p->num' just yet since 'flag' has the size of the pre-blank-removal rows. */ flag=gal_blank_remove_rows(coords, NULL, 0); if(p->cp.quiet==0) { fl=flag->array; for(i=0;inum;++i) if(fl[i]) error(EXIT_SUCCESS, 0, "catalog row %zu ignored because " "WCSLIB could not convert coordinates into image " "coordinates, you can remove this message with " "'--quiet'", i); } /* Update the number of profiles and free the flags. */ p->num=coords->size; gal_data_free(flag); /* We want the actual arrays of each 'coords' column. So, first we'll set all the array elements to NULL, then free it. */ for(tmp=coords;tmp!=NULL;tmp=tmp->next) tmp->array=NULL; gal_list_data_free(coords); } /* Correct the WCS scale. Note that when the WCS is read from a background image, oversample is set to 1. This is done here because the conversion of WCS to pixel coordinates needs to be done with the non-over-sampled image.*/ for(i=0;indim;++i) { /* Oversampling has already been applied in 'p->shift'. Also note that shift is in the C dimension ordring, while crpix is in FITS ordering. */ crpix[i] = crpix[i]*os + p->shift[ndim-i-1] - os/2; cdelt[i] /= os; } /* For a sanity check: printf("\nui_finalize_coordinates sanity check:\n"); for(i=0;inum;++i) printf("%f, %f\n", p->x[i], p->y[i]); */ } /* Add all the columns of the log file. Just note that since this is a linked list, we have to add them in the opposite order. */ static void ui_make_log(struct mkprofparams *p) { char *name, *comment; /* Return if no long file is to be created. */ if(p->cp.log==0) return; /* Individual created. */ gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_UINT8, 1, &p->num, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, "INDIV_CREATED", "bool", "If an individual image was made (1) or " "not (0)."); /* Fraction of monte-carlo. */ gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_FLOAT32, 1, &p->num, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, "FRAC_MONTECARLO", "frac", "Fraction of brightness in Monte-carlo " "integrated pixels."); /* Number of monte-carlo. */ gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_UINT64, 1, &p->num, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, "NUM_MONTECARLO", "count", "Number of Monte Carlo integrated pixels."); /* Magnitude of profile overlap. */ gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_FLOAT32, 1, &p->num, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, "MAG_OVERLAP", "mag", "Magnitude of profile's overlap with merged " "image."); /* Row number in input catalog. */ name=gal_fits_name_save_as_string(p->catname, p->cp.hdu); if( asprintf(&comment, "Row number of profile in %s.", name)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_list_data_add_alloc(&p->log, NULL, GAL_TYPE_UINT64, 1, &p->num, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, "INPUT_ROW_NO", "count", comment); free(comment); free(name); } /* Read the input radial table. */ static void ui_read_custom_table(struct mkprofparams *p) { size_t i; double diff; int isregular; gal_data_t *cols; double *min, *max; /* Read the input radial table. */ cols=gal_table_read(p->customtablename, p->customtablehdu, NULL, NULL, p->cp.searchin, p->cp.ignorecase, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap, NULL, "--customtablehdu"); /* Make sure the table only has three columns. */ if(gal_list_data_number(cols) != 3 ) error(EXIT_FAILURE, 0, "%s: has %zu columns, but it should only " "have three columns. Column 1: the radial interval's lower " "value. Column 2: the radial interval's higher value. " "Column 3: the value to use for pixels within that radius " "interval", gal_fits_name_save_as_string(p->customtablename, p->customtablehdu), gal_list_data_number(cols)); /* Make sure none of the three columns are string type. */ if( cols->type==GAL_TYPE_STRING || cols->next->type==GAL_TYPE_STRING || cols->next->next->type==GAL_TYPE_STRING ) error(EXIT_FAILURE, 0, "%s: the columns should only have numeric " "data types", gal_fits_name_save_as_string(p->customtablename, p->customtablehdu)); /* Fill the final table as a double type. */ p->custom=gal_data_copy_to_new_type(cols, GAL_TYPE_FLOAT64); p->custom->next=gal_data_copy_to_new_type(cols->next, GAL_TYPE_FLOAT64); p->custom->next->next=gal_data_copy_to_new_type(cols->next->next, GAL_TYPE_FLOAT64); /* Make sure the first column values are smaller than the second column's values. */ min=p->custom->array; max=p->custom->next->array; for(i=0;icustom->size;++i) if(min[i]>=max[i]) error(EXIT_FAILURE, 0, "%s: the first column of row %zu (with " "value %g) is larger or equal to the second column (with " "value %g). However, the first column is the lower-limit " "of the radial interval and the second column is the " "upper-limit. So the first column must have a lower value", gal_fits_name_save_as_string(p->customtablename, p->customtablehdu), i+1, min[i], max[i]); /* Check if the input table is regular and sorted (which can greatly speed up its usage). */ isregular=1; diff=max[0]-min[0]; for(i=1;icustom->size;++i) if( min[i]customregular[0]=min[0]; p->customregular[1]=diff; } /* Clean up. */ gal_list_data_free(cols); } static void ui_read_ndim(struct mkprofparams *p) { size_t i, *dsize, ndim_counter; if(p->kernel) { /* The kernel's dimensionality is fixed. */ p->ndim=p->kernel->flag; /* Make sure the kernel and background are not given together. */ if(p->backname) error(EXIT_FAILURE, 0, "the '--kernel' and '--background' " "options cannot be called together"); } else { /* Packground image is given. */ if(p->backname) { /* Small sanity check. */ if(p->backhdu==NULL) error(EXIT_FAILURE, 0, "no hdu specified for the background " "image %s. Please run again '--backhdu' option", p->backname); /* If '--nomerged' is given, we don't actually need to load the image, we just need its WCS later. */ if(p->nomerged) { /* Get the number of the background image's dimensions. */ dsize=gal_fits_img_info_dim(p->backname, p->backhdu, &p->ndim, "--backhdu"); p->ndim=gal_dimension_remove_extra(p->ndim, dsize, NULL); free(dsize); } else { /* Read the image. */ p->out=gal_array_read_one_ch_to_type(p->backname, p->backhdu, NULL, GAL_TYPE_FLOAT32, p->cp.minmapsize, p->cp.quietmmap, "--backhdu"); p->out->ndim=gal_dimension_remove_extra(p->out->ndim, p->out->dsize, NULL); p->ndim=p->out->ndim; } /* Make sure the dimensionality is supported. */ if(p->ndim!=2 && p->ndim!=3) error(EXIT_FAILURE, 0, "%s (hdu %s) has %zu dimensions. " "Currently only 2 or 3 dimensional outputs can be " "produced", p->backname, p->backhdu, p->ndim); } else { /* Get the number of dimensions from the user's options. */ ndim_counter=0; for(i=0;p->dsize[i]!=GAL_BLANK_SIZE_T;++i) ++ndim_counter; p->ndim=ndim_counter; /* Make sure the dimensionality is supported. */ if(p->ndim!=2 && p->ndim!=3) error(EXIT_FAILURE, 0, "%zu values given to '--mergedsize'. " "Currently only 2 or 3 dimensional outputs can be " "produced", p->ndim); } } } static void ui_preparations(struct mkprofparams *p) { /* Set the output dimensionality (necessary to know which columns to use). */ ui_read_ndim(p); /* Read in all the columns (necessary for '--prepforconf' when we want to build the profiles). */ ui_prepare_columns(p); /* Read the radial table. */ if(p->customtablename) ui_read_custom_table(p); /* If the kernel option was given, some parameters need to be over-written: */ if(p->kernel) { /* Set the necessary constants. */ p->nomerged=1; p->psfinimg=0; p->individual=1; p->ndim=p->kernel->flag; /* Set the shift array. */ p->shift=gal_pointer_allocate(GAL_TYPE_SIZE_T, p->ndim, 1, __func__, "p->shift"); } else ui_prepare_canvas(p); /* Preparations now that we have WCS (if any was given in any way: either from a background or from options). */ if(p->wcs) { /* Read the (possible) RA/Dec inputs into X and Y for the builder. NOTE: It may happen that there are no input columns, in that case, just ignore this step.*/ if(p->num) ui_finalize_coordinates(p); /* If individual mode is activated, write the WCS as a string here (earlier than needed). This is because it will be necessary for every individual profile, but it will identical (except for the 'CRPIX's that will be changed). */ p->wcsstr=gal_wcs_write_wcsstr(p->wcs, &p->wcsnkeyrec); } /* Prepare the random number generator. */ p->rng=gal_checkset_gsl_rng(p->envseed, &p->rng_name, &p->rng_seed); /* Make the log linked list. */ ui_make_log(p); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ static void ui_print_intro(struct mkprofparams *p) { char *jobname; if(p->cp.quiet) return; printf(PROGRAM_NAME" "PACKAGE_VERSION" started on %s", ctime(&p->rawtime)); if(p->kernel) { if( asprintf(&jobname, "Building one %s kernel", ui_profile_name_write(p->kernel->status))<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&jobname, "%zu profile%sread from %s", p->num, p->num>1?"s ":" ", p->catname)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } gal_timing_report(NULL, jobname, 1); free(jobname); if(p->backname) { if(p->nomerged) { if( asprintf(&jobname, "WCS information read from %s", p->backname)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&jobname, "%s is read and will be used as canvas", p->backname)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } gal_timing_report(NULL, jobname, 1); free(jobname); } if( asprintf(&jobname, "Random number generator (RNG) type: %s", gsl_rng_name(p->rng))<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, jobname, 1); free(jobname); if( asprintf(&jobname, "Basic RNG seed: %lu", p->rng_seed)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, jobname, 1); free(jobname); if(p->kernel==NULL) { if( asprintf(&jobname, "Using %zu threads.", p->cp.numthreads)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, jobname, 1); free(jobname); } } void ui_read_check_inputs_setup(int argc, char *argv[], struct mkprofparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the sanity check so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Prepare all the options as FITS keywords to write in output later. */ gal_options_as_fits_keywords(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Print introductory information. */ ui_print_intro(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct mkprofparams *p, struct timeval *t1) { /* Free all the allocated arrays. */ free(p->cat); free(p->cp.hdu); free(p->outdir); free(p->basename); /* p->cp.output might be equal to p->mergedimgname. In this case, if we simply free them after each other, there will be a double free error. So after freeing output, we set it to NULL since free(NULL) is ok.*/ if(p->cp.output==p->mergedimgname) free(p->cp.output); else { free(p->cp.output); free(p->mergedimgname); } /* Free the WCS headers string that was defined for individual mode. */ if(p->wcsstr) free(p->wcsstr); /* Free the random number generator: */ gsl_rng_free(p->rng); /* Free the log file information. */ if(p->cp.log) gal_list_data_free(p->log); /* Report the duration of the job */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in", 0); } gnuastro-0.22/bin/mkprof/mkprof.c0000644000175000017500000007205414551337306012507 /******************************************************************** MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "mkprof.h" /* Needs main.h astrthreads.h */ #include "oneprofile.h" /**************************************************************/ /************ builtqueue linked list *************/ /**************************************************************/ /* Add an empty element to the existing builtqueue. */ void builtqueue_addempty(struct builtqueue **bq) { struct builtqueue *tbq; /* Allocate the element. */ errno=0; tbq=malloc(sizeof *tbq); if(tbq==NULL) error(EXIT_FAILURE, 0, "%s: allocating %zu bytes for 'tbq'", __func__, sizeof *tbq); /* Initialize the values (same order as in structure definition). */ tbq->id = GAL_BLANK_SIZE_T; tbq->ispsf = 0; tbq->overlaps = 0; tbq->image = NULL; tbq->overlap_i = NULL; tbq->overlap_m = NULL; tbq->func = PROFILE_MAXIMUM_CODE; tbq->indivcreated = 0; tbq->numaccu = 0; tbq->accufrac = 0.0f; /* Set its next element to the input bq and re-set the input bq. */ tbq->next=*bq; *bq=tbq; } /**************************************************************/ /************ Save individual *************/ /**************************************************************/ #define NUMBERNAMESTRLEN 100 void saveindividual(struct mkonthread *mkp) { struct mkprofparams *p=mkp->p; double *crpix; long os=p->oversample; gal_fits_list_key_t *keys=NULL; struct builtqueue *ibq=mkp->ibq; size_t i, ndim=p->ndim, id=mkp->ibq->id; char *filename, *jobname, *outdir=p->outdir; /* Write the name and remove a similarly named file when the '--kernel' option wasn't called. If '--kernel' is called, then we should just use the final merged filename. */ if(p->kernel) filename=p->mergedimgname; else { if( asprintf(&filename, "%s%zu_%s", outdir, ibq->id, p->basename)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_checkset_writable_remove(filename, NULL, 0, p->cp.dontdelete); } /* Write the array to the file (a separately built PSF doesn't need WCS coordinates). */ if(ibq->ispsf && p->psfinimg==0) gal_fits_img_write(ibq->image, filename, NULL, 0); else { /* Allocate space for the corrected crpix and fill it in. Both 'crpix' and 'fpixel_i' are in FITS order. */ crpix=gal_pointer_allocate(GAL_TYPE_FLOAT64, ndim, 0, __func__, "crpix"); for(i=0;icrpix->array))[i] - os*(mkp->fpixel_i[i]-1) ); /* Write the image. */ gal_fits_img_write_corr_wcs_str(ibq->image, filename, p->wcsstr, p->wcsnkeyrec, crpix, NULL, 0); } ibq->indivcreated=1; /* Write profile settings into a keyword list. */ gal_fits_key_list_title_add(&keys, "Profile configuration", 0); gal_fits_key_list_add(&keys, GAL_TYPE_STRING, "EXTNAME", 0, "PROFILE-CONFIG", 0, "HDU name", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_STRING, "PROFILE", 0, ui_profile_name_write(mkp->func), 0, "Radial function", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT64, "XCENTER", 0, &p->x[id], 0, "Center of profile in catalog " "(FITS axis 1)", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT64, "YCENTER", 0, &p->y[id], 0, "Center of profile in catalog " "(FITS axis 2)", 0, NULL, 0); if(ndim==3) gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT64, "ZCENTER", 0, &p->z[id], 0, "Center of profile in catalog " "(FITS axis 3)", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "RADIUS", 0, &p->r[id], 0, "Radial parameter in catalog", 0, NULL, 0); if( mkp->func==PROFILE_SERSIC || mkp->func==PROFILE_MOFFAT ) gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "PINDEX", 0, &p->r[id], 0, "Index (Sersic or Moffat) of profile" "in catalog", 0, NULL, 0); if(ndim==2) { gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "PA_DEG", 0, &p->p1[id], 0, "Position angle of profile in " "catalog", 0, "deg", 0); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "AXISRATIO", 0, &p->q1[id], 0, "Axis ratio of profile in catalog", 0, NULL, 0); } else { gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "PA1_DEG", 0, &p->p1[id], 0, "First X-Z-X Euler angle in 3D", 0, "deg", 0); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "PA2_DEG", 0, &p->p2[id], 0, "Second X-Z-X Euler angle in 3D", 0, "deg", 0); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "PA3_DEG", 0, &p->p3[id], 0, "Third X-Z-X Euler angle in 3D", 0, "deg", 0); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "AXISRATIO1", 0, &p->q1[id], 0, "Axis ratio along second dim", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "AXISRATIO2", 0, &p->q2[id], 0, "Axis ratio along third dim", 0, NULL, 0); } gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "MAGNITUDE", 0, &p->m[id], 0, "Magnitude of profile in catalog", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "TRUNCATION", 0, &p->t[id], 0, "Truncation of profile in catalog", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_STRING, "RNGNAME", 0, (void *)(p->rng_name), 0, "Name of random number generator", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_ULONG, "RNGSEED", 0, &mkp->rng_seed, 0, "Seed of random number generator", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_SIZE_T, "NUMRANDOM", 0, &p->numrandom, 0, "Number of random points in central pixels", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "TOLERANCE", 0, &p->tolerance, 0, "Tolerance level to stop random integration", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_STRING, "MODE", 0, p->mode==MKPROF_MODE_IMG?"img":"wcs", 0, "Coordinates in image or WCS units", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_UINT8, "OVERSAMPLE", 0, &p->oversample, 0, "Oversampling factor", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_UINT8, "TUNITINP", 0, &p->tunitinp, 0, "Truncation is in units of pixels, " "not radius", 0, NULL, 0); if( !isnan(p->zeropoint) ) gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "ZEROPOINT", 0, &p->zeropoint, 0, "Zeropoint magnitude", 0, NULL, 0); if( mkp->func==PROFILE_CIRCUMFERENCE ) gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "CIRCUMWIDTH", 0, &p->circumwidth, 0, "Width of circumference " "(inward) profiles", 0, NULL, 0); if( mkp->func==PROFILE_FLAT || mkp->func==PROFILE_CIRCUMFERENCE ) gal_fits_key_list_add(&keys, GAL_TYPE_UINT8, "MFORFLATPIX", 0, &p->mforflatpix, 0, "Magnitude is flat pixel " "value", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_UINT8, "MCOLISSUM", 0, &p->mcolissum, 0, "Catalog's magnitude is " "total sum", 0, NULL, 0); gal_fits_key_list_add(&keys, GAL_TYPE_UINT8, "MAGATPEAK", 0, &p->magatpeak, 0, "Magnitude is for peak pixel, " "not full profile", 0, NULL, 0); /* Write the keyword list into the output file. */ gal_fits_key_list_reverse(&keys); gal_fits_key_write(keys, filename, "0", "NONE", 1, 0); /* Report if in verbose mode. */ if(!p->cp.quiet) { if( asprintf(&jobname, "%s created.", filename)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, jobname, 2); free(jobname); } /* Clean up. */ if(p->kernel==NULL) free(filename); } /**************************************************************/ /************ The builders *************/ /**************************************************************/ /* High-level function to built a single profile and prepare it for the next steps. */ static void mkprof_build_single(struct mkonthread *mkp, long *fpixel_i, long *lpixel_i, long *fpixel_o) { struct mkprofparams *p = mkp->p; struct builtqueue *ibq = mkp->ibq; void *ptr; int needs_crop=0; size_t i, ind, fits_i, ndim=p->ndim; size_t start_indiv[3], start_mrg[3], dsize[3], os=p->oversample; /* Make a copy of the main random number generator to use for this profile (in this thread). */ gsl_rng_memcpy(mkp->rng, p->rng); /* Set the seed of the random number generator if the environment is not to be used. */ if(mkp->p->envseed) mkp->rng_seed=mkp->p->rng_seed; else { mkp->rng_seed=gal_timing_time_based_rng_seed(); gsl_rng_set(mkp->rng, mkp->rng_seed); } /* Make the profile */ oneprofile_make(mkp); /* Build an individual image if necessary. */ if( p->individual || (ibq->ispsf && p->psfinimg==0)) { saveindividual(mkp); if(ibq->ispsf && p->psfinimg==0) ibq->overlaps=0; } /* If we want a merged image, then a tile needs to be defined over the individual profile array and the output merged array to define the overlapping region. */ if(p->out) { /* Note that 'fpixel_i' and 'lpixel_o' were in the un-oversampled image, they are also in the FITS coordinates. */ for(i=0;iimage->dsize[i]) needs_crop=1; } /* Define the individual overlap tile. */ if(needs_crop) { /* If a crop is needed, set the starting pointer. */ ind=gal_dimension_coord_to_index(ndim, ibq->image->dsize, start_indiv); ptr=gal_pointer_increment(ibq->image->array, ind, ibq->image->type); } else ptr=ibq->image->array; ibq->overlap_i=gal_data_alloc(ptr, ibq->image->type, ndim, dsize, NULL, 0, -1, 1, NULL, NULL, NULL); ibq->overlap_i->block=ibq->image; /* Define the merged overlap tile. */ ind=gal_dimension_coord_to_index(ndim, p->out->dsize, start_mrg); ptr=gal_pointer_increment(p->out->array, ind, p->out->type); ibq->overlap_m=gal_data_alloc(ptr, p->out->type, ndim, dsize, NULL, 0, -1, 1, NULL, NULL, NULL); ibq->overlap_m->block=p->out; } } /* The profile has been built, now add it to the queue of profiles that must be written into the final merged image. */ static void mkprof_add_built_to_write_queue(struct mkonthread *mkp, struct builtqueue *ibq, struct builtqueue **fbq, size_t counter) { struct mkprofparams *p = mkp->p; int lockresult; pthread_mutex_t *qlock=&p->qlock; pthread_cond_t *qready=&p->qready; /* Try locking the mutex so no thread can change the value of p->bq. If you can lock it, then put the internal builtqueue on top of the general builtqueue. If you can't, continue adding to the internal builtqueue (make the next profiles) until you find a chance to lock the mutex. */ lockresult=pthread_mutex_trylock(qlock); if(lockresult==0) /* Mutex was successfully locked. */ { /* Add this internal queue to system queue. */ (*fbq)->next=p->bq; p->bq=ibq; /* If the list was empty when you locked the mutex, then either 'mkprof_write' is waiting behind a condition variable for you to fill it up or not (either it hasn't got to setting the condition variable yet (this function locked the mutex before 'mkprof_write') or it just got the list to be made and is busy writing the arrays in the output). In either case, pthread_cond_signal will work. */ if((*fbq)->next==NULL) pthread_cond_signal(qready); pthread_mutex_unlock(qlock); /* Finally set both the internal queue and the first internal queue element to NULL.*/ (*fbq)=NULL; mkp->ibq=NULL; } /* The mutex couldn't be locked and there are no more objects for this thread to build (giving a chance for this thread to add up its built profiles). So we have to lock the mutex to pass on this built structure to the builtqueue. */ else if (mkp->indexs[counter+1]==GAL_BLANK_SIZE_T) { pthread_mutex_lock(qlock); (*fbq)->next=p->bq; p->bq=ibq; pthread_cond_signal(qready); pthread_mutex_unlock(qlock); } } /* Build the profiles that are indexed in the indexs array of the mkonthread structure that was assigned to it. See the explanation above overlap (/lib/box.c) for a complete explanation of fpixel_i, lpixel_i, fpixel_o and lpixel_o. ========================================================= About the Central x and y of each profile: The user has asked for the profile to be built on the coordinates (real numbers) of 'x' and 'y' in an output image in the FITS format. We are building the full image for each galaxy separately in an array with an odd number of sides which maybe oversampled. In the FITS format, the pixel centers have an integer value. So for example in 1D, a pixel whose center value is 10.00 covers the area of: [9.5,10.5). We want the fractional part of 'x' (don't forget, this example is 1D) to be in the central pixel of this separate array (with odd sides) that we will be building. The result of this convention is that in 1D, a continuous space pixel with a fractional value of 0.1 is going to be after the central pixel's center, while one with a fractional value of 0.9 will be before it. In this manner, later on, when we want to find the overlap between this array and the output array, if we have a fractional value >=0.5, we will just shift the integer part of the central pixel by one and completely ignore the fractional part. */ static void * mkprof_build(void *inparam) { struct mkonthread *mkp=(struct mkonthread *)inparam; struct mkprofparams *p=mkp->p; size_t i, id, ndim=p->ndim; struct builtqueue *ibq, *fbq=NULL; double center[3], semiaxes[3], euler_deg[3]; long fpixel_i[3], lpixel_i[3], fpixel_o[3], lpixel_o[3]; /* Make each profile that was specified for this thread. */ for(i=0; mkp->indexs[i]!=GAL_BLANK_SIZE_T; ++i) { /* Create a new builtqueue element with all the information. 'fbq' will be used when we want to add 'ibq' to 'p->bq'. It is defined so we don't have to waste time traversing the 'ibq'. Its characteristic compared to the other elements of 'ibq' is that 'fbq->next==NULL'. So to add ibq to p->bq, we just have to set 'fbq->next=p->bq' and then set 'p->bq' to 'ibq'.*/ builtqueue_addempty(&mkp->ibq); ibq=mkp->ibq; id=ibq->id=mkp->indexs[i]; if(fbq==NULL) fbq=ibq; /* Write the necessary parameters for this profile into 'mkp'.*/ oneprofile_set_prof_params(mkp); /* Find the bounding box size (NOT oversampled). */ if( p->f[id] == PROFILE_POINT ) { mkp->width[0]=mkp->width[1]=1; if(ndim==3) mkp->width[2]=1; } else if( p->f[id] == PROFILE_CUSTOM_IMG ) { mkp->width[0]=mkp->customimg->dsize[1]; /* 'width' is in */ mkp->width[1]=mkp->customimg->dsize[0]; /* FITS order not C. */ if(ndim==3) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at " "'%s' to fix the problem. Custom images are not yet " "supported for 3D inputs", __func__, PACKAGE_BUGREPORT); } else switch(ndim) { case 2: gal_box_bound_ellipse(mkp->truncr, mkp->q[0]*mkp->truncr, p->p1[id], mkp->width); break; case 3: euler_deg[0] = p->p1[id]; euler_deg[1] = p->p2[id]; euler_deg[2] = p->p3[id]; semiaxes[0] = mkp->truncr; semiaxes[1] = mkp->truncr * mkp->q[0]; semiaxes[2] = mkp->truncr * mkp->q[1]; gal_box_bound_ellipsoid(semiaxes, euler_deg, mkp->width); break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to " "address the issue. %zu is not recognized for 'ndim'", __func__, PACKAGE_BUGREPORT, ndim); } /* Get the overlapping pixels using the starting points (NOT oversampled). */ if(p->out) { center[0]=p->x[id]; center[1]=p->y[id]; if(ndim==3) center[2]=p->z[id]; gal_box_border_from_center(center, ndim, mkp->width, fpixel_i, lpixel_i); memcpy(mkp->fpixel_i, fpixel_i, ndim*sizeof *fpixel_i); ibq->overlaps = gal_box_overlap(mkp->onaxes, fpixel_i, lpixel_i, fpixel_o, lpixel_o, ndim); } /* Build the profile if necessary. */ if(ibq->overlaps || p->individual || (ibq->ispsf && p->psfinimg==0)) mkprof_build_single(mkp, fpixel_i, lpixel_i, fpixel_o); /* Add this profile to the list of profiles that must be written onto the final merged image with another thread. */ if(p->cp.numthreads>1) mkprof_add_built_to_write_queue(mkp, ibq, &fbq, i); } /* Free the allocated space for this thread and wait until all other threads finish. */ gsl_rng_free(mkp->rng); if(p->cp.numthreads==1) p->bq=mkp->ibq; else pthread_barrier_wait(mkp->b); return NULL; } /**************************************************************/ /************ The writer *************/ /**************************************************************/ static void mkprof_write(struct mkprofparams *p) { double sum; char *jobname; struct timeval t1; gal_data_t *out=p->out, *log; struct builtqueue *ibq=NULL, *tbq; size_t complete=0, num=p->num, clog; /* Write each image into the output array. */ while(completenum) { /* Set ibq. */ if(ibq==NULL) { if(p->cp.numthreads==1) ibq=p->bq; else { pthread_mutex_lock(&p->qlock); while(p->bq==NULL) pthread_cond_wait(&p->qready, &p->qlock); ibq=p->bq; p->bq=NULL; pthread_mutex_unlock(&p->qlock); } } sum=0.0f; /* During the build process, we also defined the overlap tiles of both the individual array and the final merged array, here we will use those to put the required profile pixels into the final array. */ if(ibq->overlaps && out) GAL_TILE_PO_OISET(float,float,ibq->overlap_i,ibq->overlap_m,1,0, { *o = p->replace ? ( *i>*o ? *i : *o ) : (*i + *o); sum += *i; }); /* Fill the log array. */ if(p->cp.log) { clog=0; for(log=p->log; log!=NULL; log=log->next) switch(++clog) { case 5: ((unsigned char *)(log->array))[ibq->id] = ibq->indivcreated; break; case 4: ((float *)(log->array))[ibq->id] = ibq->accufrac; break; case 3: ((unsigned long *)(log->array))[ibq->id]=ibq->numaccu; break; case 2: ((float *)(log->array))[ibq->id] = gal_units_counts_to_mag(sum, p->zeropoint); break; case 1: ((unsigned long *)(log->array))[ibq->id]=ibq->id+1; break; } } /* Report if in verbose mode. */ ++complete; if(!p->cp.quiet && p->num>1) { if( asprintf(&jobname, "row %zu complete, %zu left to go", ibq->id+1, num-complete)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, jobname, 2); free(jobname); } /* Free the array and the queue element and change it to the next one and increment complete. Note that there is no problem to free a NULL pointer (when the built array didn't overlap). */ gal_data_free(ibq->overlap_i); gal_data_free(ibq->overlap_m); gal_data_free(ibq->image); tbq=ibq->next; free(ibq); ibq=tbq; } /* Write the final array to the output FITS image if a merged image is to be created. */ if(out) { /* Get the current time for verbose output. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); /* Write the configuration keywords. */ gal_fits_key_write_filename("input", p->catname, &p->cp.ckeys, 1, p->cp.quiet); gal_fits_key_write(p->cp.ckeys, p->mergedimgname, "0", "NONE", 1, 1); /* Write the final image into a FITS file with the requested type. Until now, we were using 'p->wcs' for the WCS, but from now on, will put it in 'out' to also free it while freeing 'out'. */ out->wcs=p->wcs; gal_fits_img_write_to_type(out, p->mergedimgname, NULL, p->cp.type, 0); p->wcs=NULL; /* Clean up */ gal_data_free(out); /* In verbose mode, print the information. */ if(!p->cp.quiet) { if( asprintf(&jobname, "%s created.", p->mergedimgname)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(&t1, jobname, 1); free(jobname); } } } /**************************************************************/ /************ Top-level function *************/ /**************************************************************/ void mkprof(struct mkprofparams *p) { pthread_t t; /* Thread id not used, all are saved here. */ pthread_attr_t attr; pthread_barrier_t b; size_t numforprint=50; struct mkonthread *mkp; char *tmp, *mmapname=NULL; gal_list_str_t *comments=NULL; int err, origquiet=p->cp.quiet; size_t i, fi, *indexs, thrdcols; long *onaxes=NULL, os=p->oversample; size_t nb, ndim=p->ndim, nt=p->cp.numthreads; /* Allocate the arrays to keep the thread and parameters for each thread. Note that we only want nt-1 threads to do the building. */ errno=0; mkp=calloc(nt, sizeof *mkp); if(mkp==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for 'mkp'", __func__, (nt-1)*sizeof *mkp); /* Distribute the different profiles for different threads. Note that one thread is left out for writing, while nt-1 are left for building. */ mmapname=gal_threads_dist_in_threads(p->num, nt, p->cp.minmapsize, p->cp.quietmmap, &indexs, &thrdcols); /* 'onaxes' are size of the merged output image without over-sampling or shifting in FITS order. When no output merged image is needed, we can ignore it. */ if(p->out) { onaxes=gal_pointer_allocate(GAL_TYPE_LONG, ndim, 0, __func__, "onaxes"); for(fi=0; fi < ndim; ++fi) { i=ndim-fi-1; onaxes[fi] = ( ( p->dsize[i] - 2 * p->shift[i] ) / os + 2 * p->shift[i]/os ); } } /* Build the profiles: */ if(nt==1) { mkp[0].p=p; mkp[0].onaxes=onaxes; mkp[0].indexs=indexs; mkp[0].rng=gsl_rng_clone(p->rng); mkprof_build(&mkp[0]); } else { /* Initialize the attributes. Note that this main thread will also have to be kept behind the barrier, so we need nt+1 barrier stops. */ if(p->numnum+1; else nb=nt+1; gal_threads_attr_barrier_init(&attr, &b, nb); /* Initialize the condition variable and mutex. */ err=pthread_mutex_init(&p->qlock, NULL); if(err) error(EXIT_FAILURE, 0, "%s: mutex not initialized", __func__); err=pthread_cond_init(&p->qready, NULL); if(err) error(EXIT_FAILURE, 0, "%s: condition variable not " "initialized", __func__); /* Spin off the threads: */ for(i=0;irng); mkp[i].indexs=&indexs[i*thrdcols]; err=pthread_create(&t, &attr, mkprof_build, &mkp[i]); if(err) error(EXIT_FAILURE, 0, "%s: can't create thread %zu", __func__, i); } } /* If there are too many profiles, don't print the fact that a profile has been built. */ if(p->num>numforprint) { /* Let the user know that building is ongoing. */ if(p->cp.quiet==0) printf(" ---- Building %zu profiles... ", p->num); /* Disable the quiet flag.*/ p->cp.quiet=1; } /* Write the created arrays into the image. Set the original quiet flag and let the user know that its done. */ mkprof_write(p); if(p->num>numforprint) { p->cp.quiet=origquiet; if(p->cp.quiet==0) printf("done.\n"); } /* Write the log file. */ if(p->cp.log) { if( asprintf(&tmp, "Zeropoint: %g", p->zeropoint)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_list_str_add(&comments, tmp, 0); gal_checkset_writable_remove(LOGFILENAME, NULL, 0, p->cp.dontdelete); gal_table_write_log(p->log, PROGRAM_STRING, &p->rawtime, comments, LOGFILENAME, p->cp.quiet); gal_list_str_free(comments, 1); } /* If numthreads>1, then wait for all the jobs to finish and destroy the attribute and barrier. */ if(nt>1) { pthread_barrier_wait(&b); pthread_attr_destroy(&attr); pthread_barrier_destroy(&b); pthread_cond_destroy(&p->qready); pthread_mutex_destroy(&p->qlock); } /* If a merged image was created, let the user know.... */ if(p->mergedimgname && p->cp.quiet==0) printf(" -- Output: %s\n", p->mergedimgname); /* Clean up. */ if(mmapname) gal_pointer_mmap_free(&mmapname, p->cp.quietmmap); else free(indexs); if(onaxes) free(onaxes); free(mkp); } gnuastro-0.22/bin/mkprof/oneprofile.c0000644000175000017500000006065614551337306013360 /******************************************************************** MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include /* generate random seed */ #include /* used in setrandoms */ #include /* To make noise. */ #include /* gsl_integration_qng */ #include #include #include #include #include #include "main.h" #include "mkprof.h" /* Needs main.h and astrthreads.h */ #include "profiles.h" #include "oneprofile.h" /**************************************************************** ************** Radial distance ****************** ****************************************************************/ /* Set the center position of the profile in the oversampled image. Note that 'mkp->width' is in the non-oversampled scale. IMPORTANT: the ordering is in FITS coordinate order. */ static void oneprofile_center_oversampled(struct mkonthread *mkp) { struct mkprofparams *p=mkp->p; long os=p->oversample; double *dim, r=1000000; size_t i, id=mkp->ibq->id; double val, pixfrac, intpart; for(i=0;indim;++i) { dim = i==0 ? p->x : (i==1 ? p->y : p->z); pixfrac = modf(fabs(dim[id]), &intpart); val = ( os*(mkp->width[i]/2 + pixfrac) + (pixfrac<0.5f ? os/2 : -1*os/2-1) ); mkp->center[i] = round(val*r)/r; } } static void oneprofile_set_coord(struct mkonthread *mkp, size_t index) { size_t i, coord_c[3]; uint8_t os=mkp->p->oversample; size_t ndim=mkp->ibq->image->ndim, *dsize=mkp->ibq->image->dsize; /* Get the coordinates in C order. */ gal_dimension_index_to_coord(index, ndim, dsize, coord_c); /* Convert these coordinates to one where the profile center is at the center and the image is not over-sampled. Note that only 'coord_c' is in C order.*/ for(i=0;icoord[i] = ( coord_c[ndim-i-1] - mkp->center[i] )/os; } /* Convert cartesian coordinates to the rotated elliptical radius. See the "Defining an ellipse and ellipsoid" section of the book for the full derivation. */ static void oneprofile_r_el(struct mkonthread *mkp) { double Xr, Yr, Zr; /* Rotated x, y, z. */ double q1=mkp->q[0], q2=mkp->q[1]; double c1=mkp->c[0], s1=mkp->s[0]; double c2=mkp->c[1], s2=mkp->s[1]; double c3=mkp->c[2], s3=mkp->s[2]; double x=mkp->coord[0], y=mkp->coord[1], z=mkp->coord[2]; switch(mkp->p->ndim) { case 2: /* The parenthesis aren't necessary, but help in readability and avoiding human induced bugs. */ Xr = x * ( c1 ) + y * ( s1 ); Yr = x * ( -1.0f*s1 ) + y * ( c1 ); mkp->r = sqrt( Xr*Xr + Yr*Yr/q1/q1 ); break; case 3: Xr = x*( c3*c1 - s3*c2*s1 ) + y*( c3*s1 + s3*c2*c1) + z*( s3*s2 ); Yr = x*( -1*s3*c1 - c3*c2*s1 ) + y*(-1*s3*s1 + c3*c2*c1) + z*( c3*s2 ); Zr = x*( s1*s2 ) + y*(-1*s2*c1 ) + z*( c2 ); mkp->r = sqrt( Xr*Xr + Yr*Yr/q1/q1 + Zr*Zr/q2/q2 ); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The value %zu is not recognized for " "'mkp->p->ndim'", __func__, PACKAGE_BUGREPORT, mkp->p->ndim); } } /* Calculate the circular/spherical distance of a pixel to the profile center. This is just used to add pixels in the stack. Later, when the pixels are popped from the stack, the elliptical radius will be used to give them a value.*/ static float oneprofile_r_circle(size_t index, struct mkonthread *mkp) { size_t i, c[3]; double d, sum=0.0f; size_t ndim=mkp->ibq->image->ndim, *dsize=mkp->ibq->image->dsize; /* Convert the index into a coordinate. */ gal_dimension_index_to_coord(index, ndim, dsize, c); /* Find the distance to the center along each dimension (in FITS order). */ for(i=0;icenter[i]; sum += d*d; } /* Return the distance. */ return sqrt(sum); } /**************************************************************** ************** Random points ****************** ****************************************************************/ /* Fill pixel with random values */ float oneprofile_randompoints(struct mkonthread *mkp) { double r_before=mkp->r; double range[3], sum=0.0f; size_t i, j, numrandom=mkp->p->numrandom, ndim=mkp->p->ndim; double coord_before[3]={mkp->coord[0], mkp->coord[1], mkp->coord[2]}; /* Set the range in each dimension. */ for(i=0;ihigher[i] - mkp->lower[i]; /* Find the sum of the profile on the random positions. */ for(i=0;icoord[j] = mkp->lower[j] + gsl_rng_uniform(mkp->rng) * range[j]; oneprofile_r_el(mkp); sum+=mkp->profile(mkp); } /* Reset the original distance and coordinate of the pixel and return the average random value. The resetting is mostly redundant (only useful in checks), but since it has a very negligible cost (compared to the random checks above) cost, its good to reset it to help in debugging when necessary (avoid confusion when un-commenting the checks in 'oneprofile_pix_by_pix'). */ mkp->r=r_before; mkp->coord[0]=coord_before[0]; mkp->coord[1]=coord_before[1]; mkp->coord[2]=coord_before[2]; return sum/numrandom; } /**************************************************************** ***************** 2D integration ******************** ****************************************************************/ /* This is an old implementation which we are not using now. But it is kept here in case it can be useful */ #if 0 double twod_over_x(double x, void *params) { struct mkonthread *mkp=(struct mkonthread *) params; mkp->x=x; oneprofile_r_el(mkp); return mkp->profile(mkp); } /* Find the 2d integration over the region. */ double twod_over_xy(double y, void *params) { gsl_function F; static double abserr; static size_t neval=0; double epsabs=0, epsrel=EPSREL_FOR_INTEG, result; struct mkonthread *mkp=(struct mkonthread *) params; F.function = &twod_over_x; F.params = params; mkp->y=y; gsl_integration_qng(&F, mkp->xl, mkp->xh, epsabs, epsrel, &result, &abserr, &neval); return result; } /* 2D integration of a profile.*/ double integ2d(struct mkonthread *mkp) { gsl_function F; static double abserr; static size_t neval=0; double epsabs=0, epsrel=EPSREL_FOR_INTEG, result; F.function = &twod_over_xy; F.params = mkp; gsl_integration_qng(&F, mkp->yl, mkp->yh, epsabs, epsrel, &result, &abserr, &neval); return result; } #endif /**************************************************************/ /************ Pixel by pixel building *************/ /********* Positions are in C not FITS *********/ /**************************************************************/ /* 'oneprofile_center_oversampled' stored the center of the profile in floating point coordinates. This function will convert that into a pixel index. */ static size_t oneprofile_center_pix_index(struct mkonthread *mkp) { double pixfrac, intpart; size_t *dsize=mkp->ibq->image->dsize; size_t i, coord[3], ndim=mkp->p->ndim; /* Find the coordinates of the center point. Note 'mkp->center' is in FITS coordinates, while coord must be in C coordinates (to be used in 'gal_dimension_coord_to_index'). */ for(i=0;icenter[i], &intpart); coord[ndim-i-1] = (long)(mkp->center[i]) + ( pixfrac<0.5f ? 0 : 1 ); } /* Retun the pixel index of this coordinate. */ return gal_dimension_coord_to_index(ndim, dsize, coord); } static void oneprofile_pix_by_pix(struct mkonthread *mkp) { struct builtqueue *ibq=mkp->ibq; size_t ndim=ibq->image->ndim, *dsize=ibq->image->dsize; uint8_t *byt; gal_list_sizet_t *Q=NULL; int use_rand_points=1, ispeak=1; double tolerance=mkp->p->tolerance; float circ_r, *array=mkp->ibq->image->array; double (*profile)(struct mkonthread *)=mkp->profile; double truncr=mkp->truncr, approx, hp=0.5f/mkp->p->oversample; size_t i, p, *dinc=gal_dimension_increment(ndim, dsize); /* lQ: Largest. sQ: Smallest in queue */ gal_list_dosizet_t *lQ=NULL, *sQ; /* Find the nearest pixel to the profile center and add it to the queue. */ p=oneprofile_center_pix_index(mkp); /* If this is a point source, just fill that one pixel and leave this function. */ if(mkp->func==PROFILE_POINT) { array[p] = mkp->fixedvalue; return; } /* Allocate the 'byt' array. It is used as a flag to make sure that we don't re-calculate the profile value on a pixel more than once. */ byt = gal_pointer_allocate(GAL_TYPE_UINT8, gal_dimension_total_size(ndim, dsize), 1, __func__, "byt"); /* Start the queue: */ byt[p]=1; gal_list_dosizet_add( &lQ, &sQ, p, oneprofile_r_circle(p, mkp) ); /* If random points are necessary, then do it: */ switch(mkp->func) { case PROFILE_SERSIC: case PROFILE_MOFFAT: case PROFILE_GAUSSIAN: while(sQ) { /* In case you want to see the status of the twosided ordered queue, increasing and decreasing side by side, uncomment this line. Note that there will be a lot of lines printed! */ /*print_tossll(lQ, sQ);*/ /* Pop a pixel from the queue, convert its index into coordinates and use them to estimate the elliptical radius of the pixel. If the pixel is outside the truncation radius, ignore it. */ p=gal_list_dosizet_pop_smallest(&lQ, &sQ, &circ_r); oneprofile_set_coord(mkp, p); oneprofile_r_el(mkp); if(mkp->r > truncr) continue; /* Set the range for this pixel. */ for(i=0;ilower[i] = mkp->coord[i] - hp; mkp->higher[i] = mkp->coord[i] + hp; } /* Find the random points and profile center. */ array[p]=oneprofile_randompoints(mkp); approx=profile(mkp); if (fabs(array[p]-approx)/array[p] < tolerance) use_rand_points=0; /* For a check: printf("coord: %g, %g\n", mkp->coord[0], mkp->coord[1]); printf("r_rand: %g (rand: %g, center: %g)\n\n", mkp->r, array[p], approx); */ /* Save the peak flux if this is the first pixel: */ if(ispeak) { mkp->peakflux=array[p]; ispeak=0; } /* For the log file: */ ++ibq->numaccu; ibq->accufrac+=array[p]; /* Go over the neighbors and add them to queue of elements to check if they haven't been done already. */ GAL_DIMENSION_NEIGHBOR_OP(p, ndim, dsize, 1, dinc, { if(byt[nind]==0) { byt[nind]=1; gal_list_dosizet_add( &lQ, &sQ, nind, oneprofile_r_circle(nind, mkp) ); } } ); if(use_rand_points==0) break; } } /* All the pixels that required integration or random points are now done, so we don't need an ordered array any more. */ gal_list_dosizet_to_sizet(lQ, &Q); /* Order doesn't matter any more, add all the pixels you find. */ while(Q) { p=gal_list_sizet_pop(&Q); oneprofile_set_coord(mkp, p); oneprofile_r_el(mkp); /* See if this pixel's radial distance is larger than the truncation radius. If so, then don't add its neighbors to the queue and continue to the next pixel in the queue. */ if(mkp->r>truncr) { /* For the circumference, if the profile is too elongated and circumwidth is too small, then some parts of the circumference will not be shown without this condition. */ if(mkp->func==PROFILE_CIRCUMFERENCE) array[p]=profile(mkp); continue; } /* Find the value for this pixel: */ array[p]=profile(mkp); /* For a check: printf("r_center: %g\n", mkp->r); */ /* Save the peak flux if this is the first pixel: */ if(ispeak) { mkp->peakflux=array[p]; ispeak=0; } /* Go over the neighbours and add them to queue of elements to check. */ GAL_DIMENSION_NEIGHBOR_OP(p, ndim, dsize, 1, dinc, { if(byt[nind]==0) { byt[nind]=1; gal_list_sizet_add(&Q, nind); } } ); } /* Clean up. */ free(byt); free(dinc); } /**************************************************************/ /************ Set profile parameters *************/ /**************************************************************/ int oneprofile_ispsf(uint8_t fcode) { return fcode==PROFILE_MOFFAT || fcode==PROFILE_GAUSSIAN; } static gal_data_t * oneprofile_custom_img(struct mkprofparams *p, size_t id) { float *d, *df; gal_data_t *out; size_t i, imgcounter=0; gal_list_str_t *timg, *thdu; /* The identifier of the image (and its HDU) is in the radius column for this type of profile (a custom image). Note that in 'ui.c', we checked that for this profile type, the "radius" column only has integers. */ imgcounter=p->r[id]; /* Load the image. In 'ui.c', we have already checked that the number of images given to '--customimg' is atleast equal to the largest requested profile. Also, note that if only one HDU is given, we'll assume that for all HDUs. */ thdu=p->customimghdu; timg=p->customimgname; for(i=1;inext; if(p->customimghdu->next) for(i=1;inext; out=gal_fits_img_read_to_type(timg->v, thdu->v, GAL_TYPE_FLOAT32, p->cp.minmapsize, p->cp.quietmmap, "--customimghdu"); /* Make sure the image has an odd number of pixels on each side. */ if( out->dsize[0]%2==0 || out->dsize[1]%2==0 ) error(EXIT_FAILURE, 0, "%s: doesn't have an odd number of pixels in " "both axises, but is %zux%zu pixels. To have a clear centeral " "pixel, it is necessary that the number of pixels in each side " "of the image be an odd number", gal_fits_name_save_as_string(timg->v, thdu->v), out->dsize[1], out->dsize[0]); /* If there are NaN pixels in the image, set them to '0' (which makes them ineffective in MakeProfiles). */ if( gal_blank_present(out, 1) ) { df=(d=out->array)+out->size; out->flag &= !GAL_DATA_FLAG_BLANK_CH; do if( isnan(*d) ) *d=0.0f; while(++dp; double sigma; int tp=p->tunitinp; size_t id=mkp->ibq->id, ndim=p->ndim; /* Fill the most basic profile agnostic parameters. */ mkp->brightness = ( p->mcolissum ? p->m[id] : pow( 10, (p->zeropoint - p->m[id]) / 2.5f ) ); mkp->ibq->ispsf = p->kernel ? 1 : oneprofile_ispsf(p->f[id]); mkp->func = mkp->ibq->func = p->f[id]; /* Fill in the dimension-dependent parameters. */ switch(ndim) { case 2: /* Shifts were already multiplied with oversample. Just note that p->x and p->y are in the FITS ordering, while p->shift is in C ordering. */ mkp->q[0] = p->q1[id]; p->x[id] += p->shift[1]/p->oversample; p->y[id] += p->shift[0]/p->oversample; mkp->c[0] = cos( p->p1[id] * DEGREESTORADIANS ); mkp->s[0] = sin( p->p1[id] * DEGREESTORADIANS ); break; case 3: /* See comments for 2D. */ mkp->q[0] = p->q1[id]; mkp->q[1] = p->q2[id]; p->x[id] += p->shift[2]/p->oversample; p->y[id] += p->shift[1]/p->oversample; p->z[id] += p->shift[0]/p->oversample; mkp->c[0] = cos( p->p1[id] * DEGREESTORADIANS ); mkp->s[0] = sin( p->p1[id] * DEGREESTORADIANS ); mkp->c[1] = cos( p->p2[id] * DEGREESTORADIANS ); mkp->s[1] = sin( p->p2[id] * DEGREESTORADIANS ); mkp->c[2] = cos( p->p3[id] * DEGREESTORADIANS ); mkp->s[2] = sin( p->p3[id] * DEGREESTORADIANS ); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "address the problem. The value '%zu' is not recognized for " "'ndim'", __func__, PACKAGE_BUGREPORT, ndim); } /* Fill the profile-dependent parameters. */ switch (mkp->func) { case PROFILE_SERSIC: mkp->correction = 1; mkp->profile = &profiles_sersic; mkp->sersic_re = p->r[id]; mkp->sersic_inv_n = 1.0f/p->n[id]; mkp->sersic_nb = -1.0f*profiles_sersic_b(p->n[id]); mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]; break; case PROFILE_MOFFAT: mkp->correction = 1; mkp->profile = &profiles_moffat; mkp->moffat_nb = -1.0f*p->n[id]; mkp->moffat_alphasq = profiles_moffat_alpha(p->r[id], p->n[id]); mkp->moffat_alphasq *= mkp->moffat_alphasq; mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]/2; if(p->psfinimg==0 && p->individual==0) { mkp->brightness = 1.0f; /* When the PSF is a separate image, */ p->x[id] = 0.0f; /* it should be centered and have a */ p->y[id] = 0.0f; /* total brightness of 1.0f. */ if(ndim==3) p->z[id] = 0.0f; } break; case PROFILE_GAUSSIAN: mkp->correction = 1; mkp->profile = &profiles_gaussian; sigma = p->r[id]/2.35482f; mkp->gaussian_c = -1.0f/(2.0f*sigma*sigma); mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]/2; if(p->psfinimg==0 && p->individual==0) { mkp->brightness = 1.0f; /* Same as the explanations for */ p->x[id] = 0.0f; /* The Moffat profile. */ p->y[id] = 0.0f; if(ndim==3) p->z[id] = 0.0f; } break; case PROFILE_POINT: mkp->profile = &profiles_flat; if(p->mforflatpix) { mkp->correction = 0; mkp->fixedvalue = p->m[id]; } else { mkp->correction = 1; mkp->fixedvalue = 1.0f; } break; case PROFILE_FLAT: mkp->profile = &profiles_flat; mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]; if(p->mforflatpix) { mkp->correction = 0; mkp->fixedvalue = p->m[id]; } else { mkp->correction = 1; mkp->fixedvalue = 1.0f; } break; case PROFILE_CIRCUMFERENCE: mkp->profile = &profiles_circumference; mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]; mkp->intruncr = mkp->truncr - p->circumwidth; if(p->mforflatpix) { mkp->correction = 0; mkp->fixedvalue = p->m[id]; } else { mkp->correction = 1; mkp->fixedvalue = 1.0f; } if(mkp->intruncr<0.0f) mkp->intruncr = 0.0f; break; case PROFILE_DISTANCE: mkp->profile = profiles_radial_distance; mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]; mkp->correction = 0; break; case PROFILE_AZIMUTH: mkp->profile = profiles_azimuth; mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]; mkp->correction = 0; break; case PROFILE_CUSTOM_PROF: mkp->profile = profiles_custom_table; mkp->truncr = tp ? p->t[id] : p->t[id]*p->r[id]; mkp->correction = p->mcolnocustprof ? 0 : 1; break; case PROFILE_CUSTOM_IMG: mkp->profile = profiles_custom_image; /* A place holder */ mkp->customimg = oneprofile_custom_img(p, id); mkp->correction = p->mcolnocustimg ? 0 : 1; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us so we can " "correct this problem. The profile code %u is not recognized.", __func__, mkp->func); } } /**************************************************************/ /************ Outside functions *************/ /**************************************************************/ void oneprofile_make(struct mkonthread *mkp) { struct mkprofparams *p=mkp->p; double sum; float *f, *ff; size_t i, dsize[3], ndim=p->ndim; /* Find the profile center in the over-sampled image in C coordinates. IMPORTANT: width must not be oversampled.*/ oneprofile_center_oversampled(mkp); /* If a custom image is provided, there is no need to build a new dataset. */ if(mkp->customimg) mkp->ibq->image=mkp->customimg; else { /* From this point on, the widths will be in the actual pixel widths (with oversampling). */ for(i=0;iwidth[i] *= p->oversample; dsize[ndim-i-1] = mkp->width[i]; } /* Allocate and clear the array for this one profile. */ mkp->ibq->image=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, ndim, dsize, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, "MOCK", "counts", NULL); /* Build the profile in the image. */ oneprofile_pix_by_pix(mkp); } /* Correct the sum of pixels in the profile so it has the fixed total magnitude or pixel value, mkp->correction was set in setprofparams. Note that the profiles were not normalized during the building.*/ if(mkp->correction) { /* First get the sum of all the pixels in the profile. */ ff=(f=mkp->ibq->image->array) + mkp->ibq->image->size; sum=0.0f; do sum+= isnan(*f) ? 0.0f : *f; while(++fibq->accufrac /= sum; /* Correct all the profile pixels. Note that ideally, if a user wants a NaN valued profile, they should use the 'flat' profile with '--mforflatpix', which won't need this correction. However, it might happen that they forget the later, or the catalog might be generated by a script that gives a NaN value for the magnitude with any kind of profile. In such cases if we don't check the NaN value, then the whole profile's box is going to be NaN values, which is inconvenient and with the simple check here we can avoid it (only have the profile's pixels set to NaN. */ ff = (f=mkp->ibq->image->array) + mkp->ibq->image->size; if(isnan(mkp->brightness)) do *f = *f ? NAN : *f ; while(++fmagatpeak) do *f++ *= mkp->brightness/mkp->peakflux; while(fbrightness/sum; while(f Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include /* For total Sersic brightness. */ #include "main.h" #include "mkprof.h" /* Needs main.h, astrthreads.h */ #include "profiles.h" /**************************************************************** ***************** Profiles: ******************** ****************************************************************/ /* The distance of this pixel. */ double profiles_radial_distance(struct mkonthread *mkp) { return mkp->r; } /* Azimuthal angle. Assuming theta is the azimuthal angle (along a constant radius), then an ellipse is defined by: x=a*cos(theta) y=b*sin(theta) Now, let's take 'phi' to be the angle in the normal equi-distant (non-elliptical coordinates). Therefore: tan(phi)=y/x So: b*sin(theta) tan(phi) = ------------ = b/a * tan(theta) a*cos(theta) Therefore we can find theta like this (where q=b/a): theta = atan( a/b * tan(phi) ) = atan( a/b * y/x ) = atan( y / (x*q) ) However, the 'x' and 'y' above are only for the case where the ellipse has a position angle of zero (its major axis is aligned with the horizontal axis. When the ellipse is rotated, we first need to rotate the 'mkp->coord' values, and then use 'x' and 'y' like above. */ double profiles_azimuth(struct mkonthread *mkp) { /* We are rotating by the inverse (multiplied by -1) position angle. */ double x = mkp->coord[0]*mkp->c[0] + mkp->coord[1]*mkp->s[0]; double y = -1 * mkp->coord[0]*mkp->s[0] + mkp->coord[1]*mkp->c[0]; /* The normal 'atan' function will only return values between -90 to +90 degrees, or only two quadrants (because it only takes a single value). However, with 'atan2' we can get the full -180 to +180 degrees (all four quadrants). */ double d=atan2(y, x*mkp->q[0])*RADIANSTODEGREES; /* 'atan2' returns values between -180 to 180 deg. But we want values from 0 to 360, so we'll add the negative ones by 360. */ return d>0 ? d : d+360.0f; } /* Read the values based on the distance from a table. */ double profiles_custom_table(struct mkonthread *mkp) { long i; /* May become negative. */ double *reg=mkp->p->customregular; double *min=mkp->p->custom->array; double *max=mkp->p->custom->next->array; double *value=mkp->p->custom->next->next->array; double out=0.0f; /* Zero means no value, user may want a NaN value! */ /* If the table isn't regular ('reg[0]' isn't NaN), then we have to parse over the whole table. However, if its regular, we can find the proper value much more easily. */ if( isnan(reg[0]) ) { for(i=0;ip->custom->size;++i) if( mkp->r >= min[i] && mkp->r < max[i] ) { out=value[i]; break; } } else { i=(mkp->r - reg[0])/reg[1]; if(i>=0 && i<=mkp->p->custom->size) out=value[i]; } /* Return the output value. */ return out; } /* This is just a place-holder function, but will never be used. */ double profiles_custom_image(struct mkonthread *mkp) { return NAN; } /* The integral of the Gaussian from -inf to +inf equals the square root of PI. So from zero to +inf it equals half of that.*/ double profiles_gaussian_total(double q) { return q*sqrt(M_PI)/2; } /* The Gaussian function at a point. */ double profiles_gaussian(struct mkonthread *mkp) { return exp( mkp->gaussian_c * mkp->r * mkp->r ); } /* This function will find the moffat function alpha value based on the explantions here: http://labs.adsabs.harvard.edu/adsabs/abs/2001MNRAS.328..977T/ alpha=(FWHM/2)/(2^(1.0/beta)-1)^(0.5). Then the moffat function at r is: (1.0 + (r/alpha)^2.0)^(-1.0*beta)*/ double profiles_moffat_alpha(double fwhm, double beta) { return (fwhm/2)/pow((pow(2, 1/beta)-1), 0.5f); } /* Find the total value of the Moffat profile. I am using equation 10 from Pengetal 2010 (Galfit). In finding the profiles, I am assuming \Sigma_0=1. So that is what I put here too.*/ double profiles_moffat_total(double alpha, double beta, double q) { return M_PI*alpha*alpha*q/(beta-1); } /* Find the Moffat profile for a certain radius. rda=r/alpha and nb=-1*b. This is done before hand to speed up the process. */ double profiles_moffat(struct mkonthread *mkp) { return pow(1+mkp->r*mkp->r/mkp->moffat_alphasq, mkp->moffat_nb); } /* This approximation of b(n) for n>0.35 is taken from McArthur, Courteau and Holtzman 2003: http://adsabs.harvard.edu/abs/2003ApJ...582..689 */ double profiles_sersic_b(double n) { if(n<=0.35f) error(EXIT_FAILURE, 0, "the Sersic index cannot be smaller " "than 0.35. It is %.3f", n); return 2*n-(1/3)+(4/(405*n))+(46/(25515*n*n))+ (131/(1148175*n*n*n)-(2194697/(30690717750*n*n*n*n))); } /* Find the total brightness in a Sersic profile. From equation 4 in Peng 2010. This assumes the surface brightness at the effective radius is 1.*/ double profiles_sersic_total(double n, double re, double b, double q) { return (2*M_PI*re*re*exp(b)*n*pow(b, -2*n)*q* gsl_sf_gamma(2*n)); } /* Find the Sersic profile for a certain radius. rdre=r/re, inv_n=1/n, nb= -1*b. */ double profiles_sersic(struct mkonthread *mkp) { return exp( mkp->sersic_nb * ( pow(mkp->r/mkp->sersic_re, mkp->sersic_inv_n) -1 ) ); } /* Make a circumference (inner to the radius). */ double profiles_circumference(struct mkonthread *mkp) { return ( (mkp->r > mkp->intruncr && mkp->r <= mkp->truncr) ? mkp->fixedvalue : 0.0f ); } /* Always returns a fixed value: */ double profiles_flat(struct mkonthread *mkp) { return mkp->fixedvalue; } gnuastro-0.22/bin/mkprof/main.h0000644000175000017500000002417514551337306012143 /********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H #include #include #include #include /* Progarm name macros: */ #define PROGRAM_NAME "MakeProfiles" /* Program full name. */ #define PROGRAM_EXEC "astmkprof" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Some constants */ #define EPSREL_FOR_INTEG 2 #define DEGREESTORADIANS M_PI/180.0 #define RADIANSTODEGREES 180.0/M_PI /* Modes to interpret coordinates. */ enum coord_modes { MKPROF_MODE_INVALID, /* For sanity checks. */ MKPROF_MODE_IMG, /* Use image coordinates. */ MKPROF_MODE_WCS, /* Use WCS coordinates. */ }; /* Types of profiles. */ enum profile_types { PROFILE_INVALID, /* Invalid (=0 by C standard). */ PROFILE_SERSIC, /* Sersic profile. */ PROFILE_MOFFAT, /* Moffat Profile. */ PROFILE_GAUSSIAN, /* Gaussian Profile. */ PROFILE_POINT, /* Point profile. */ PROFILE_FLAT, /* Flat profile. */ PROFILE_CIRCUMFERENCE, /* Circumference profile. */ PROFILE_DISTANCE, /* Elliptical radius of pixel. */ PROFILE_CUSTOM_PROF, /* Radial prof. in file/table. */ PROFILE_AZIMUTH, /* Azimuthal angle at distance.*/ PROFILE_CUSTOM_IMG, /* Custom image to insert. */ PROFILE_MAXIMUM_CODE, /* Just for a sanity check. */ }; #define MINCIRCUMWIDTH 0.5f /* Log file: 0: ID. 1: Overlap magnitude. 2: Number of accurate pixels. 3: Fraction of accurate values. 4: Is individual file created? */ #define LOGNUMCOLS 5 #define LOGFILENAME PROGRAM_EXEC".log" struct builtqueue { size_t id; /* ID of this object. */ int ispsf; /* This is a PSF profile. */ int overlaps; /* ==1: Overlaps with the image. */ gal_data_t *image; /* Array of this profile's image. */ gal_data_t *overlap_i; /* Overlap tile over individual array. */ gal_data_t *overlap_m; /* Overlap tile over merged array. */ int func; /* Profile's radial function. */ int indivcreated; /* ==1: an individual file is created. */ size_t numaccu; /* Number of accurate pixels. */ double accufrac; /* Difference of accurate values. */ struct builtqueue *next; /* Pointer to next element. */ }; struct mkprofparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ char *backname; /* Name of background image file name. */ char *catname; /* Name of catalog of parameters. */ char *backhdu; /* HDU of background image. */ char *customtablename; /* Table to use for radial profile. */ char *customtablehdu; /* HDU of table to use for radial profile. */ gal_list_str_t *customimgname; /* Image to insert into the image. */ gal_list_str_t *customimghdu; /* HDU of images for custom image. */ size_t *dsize; /* Size of the output image. */ uint8_t clearcanvas; /* Pixels in background image set to zero. */ gal_data_t *kernel; /* Parameters to define a kernel. */ uint8_t oversample; /* Oversampling scale. */ uint8_t psfinimg; /* ==1: Build PSF profiles in image. */ uint8_t individual; /* ==1: Build all catalog separately. */ uint8_t nomerged; /* ==1: Don't make a merged image of all. */ char *typestr; /* Type of finally merged output image. */ size_t numrandom; /* Number of radom points for integration. */ float tolerance; /* Accuracy to stop integration. */ uint8_t tunitinp; /* ==1: Truncation is in pixels, not radial.*/ size_t *shift; /* Shift along axeses position of profiles. */ uint8_t prepforconv; /* Shift and expand by size of first psf. */ float zeropoint; /* Magnitude of zero point flux. */ float circumwidth; /* Width of circumference (inward). */ uint8_t replace; /* Replace overlaping profile pixel values. */ uint8_t magatpeak; /* Mag only for peak pixel, not all profile.*/ uint8_t envseed; /* Use GSL_RNG_SEED for random seed. */ uint8_t mode; /* Coordinates in WCS or image standard. */ gal_list_str_t *ccol; /* Columns that keep coordinates. */ char *fcol; /* Column specifying profile function. */ char *rcol; /* Effective radius of profile. */ char *ncol; /* Sersic index column of profile. */ char *pcol; /* First Euler angle (X-Z-X order). */ char *p2col; /* Second Euler angle (X-Z-X order). */ char *p3col; /* Third Euler angle (X-Z-X order). */ char *qcol; /* Axis ratio1 (major/2nd dim. radius). */ char *q2col; /* Axis ratio2 (major/3rd dim. radius). */ char *mcol; /* Magnitude column. */ char *tcol; /* Truncation of the profiles. */ uint8_t mforflatpix; /* mcol is flat pixel value (f is 4 or 5). */ uint8_t mcolissum; /* mcol is total sum, not magnitude. */ uint8_t mcolnocustimg; /* mcol is ignored in 'custom-img'. */ uint8_t mcolnocustprof; /* mcol is ignored in 'custom-profile'. */ gal_data_t *crpix; /* CRPIX FITS header keywords. */ gal_data_t *crval; /* CRVAL FITS header keywords. */ gal_data_t *cdelt; /* For CDELTi FITS header keywords. */ gal_data_t *pc; /* WCS PC matrix. */ gal_data_t *cunit; /* Units of each coordinate. */ gal_data_t *ctype; /* Type of the coordinates. */ /* Output */ gal_data_t *out; /* Output image. */ char *outdir; /* Output directory. */ char *basename; /* Merged image name with no directory. */ /* Processing parameters: */ size_t num; /* The number of profiles. */ double *x; /* X axis position of profile center. */ double *y; /* Y axis position of profile center. */ double *z; /* Z axis position of profile center. */ uint8_t *f; /* Profile function code. */ float *r; /* Radius of profile. */ float *n; /* Index of profile. */ float *p1; /* First Euler angle (X-Z-X order). */ float *p2; /* Second Euler angle (X-Z-X order). */ float *p3; /* Third Euler angle (X-Z-X order). */ float *q1; /* Ratio of radius to second axis. */ float *q2; /* Ratio of radius to third axis. */ float *m; /* Magnitude of profile. */ float *t; /* Truncation distance. */ gsl_rng *rng; /* Main instance of random number generator.*/ const char *rng_name; /* Name of random number generator. */ unsigned long rng_seed; /* Fixed seed of random number generator. */ time_t rawtime; /* Starting time of the program. */ double *cat; /* Input catalog. */ gal_data_t *log; /* Log data to be printed. */ struct builtqueue *bq; /* Top (last) elem of build queue. */ pthread_cond_t qready; /* bq is ready to be written. */ pthread_mutex_t qlock; /* Mutex lock to change builtq. */ double halfpixel; /* Half pixel in oversampled image. */ char *wcsstr; /* The WCS keywords derived from main img. */ int wcsnkeyrec; /* The number of keywords in the WCS header.*/ char *mergedimgname; /* Name of merged image. */ gal_data_t *custom; /* Table containing custom values. */ double customregular[2]; /* Non-NaN if input table is regular. */ int nwcs; /* for WCSLIB: no. coord. representations. */ struct wcsprm *wcs; /* WCS information for this dataset. */ size_t ndim; /* Number of dimensions (for 'nomerged'). */ /* We can't put it in 'out' because it is */ /* meaning ful there. */ }; #endif gnuastro-0.22/bin/mkprof/authors-cite.h0000644000175000017500000000302714551337306013617 /********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/mkprof/args.h0000644000175000017500000003543514551337306012154 /********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Option definition array. */ struct argp_option program_options[] = { { "background", UI_KEY_BACKGROUND, "FITS", 0, "A background image to make the profiles on.", GAL_OPTIONS_GROUP_INPUT, &p->backname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "backhdu", UI_KEY_BACKHDU, "INT/STR", 0, "HDU of background image.", GAL_OPTIONS_GROUP_INPUT, &p->backhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "clearcanvas", UI_KEY_CLEARCANVAS, 0, 0, "All pixels in background image read as zero.", GAL_OPTIONS_GROUP_INPUT, &p->clearcanvas, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "kernel", UI_KEY_KERNEL, "STR", 0, "Parameters to only build one kernel.", GAL_OPTIONS_GROUP_INPUT, &p->kernel, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_parse_kernel }, { "customtable", UI_KEY_CUSTOMTABLE, "FITS/TXT", 0, "File for 'custom-prof' profile.", GAL_OPTIONS_GROUP_INPUT, &p->customtablename, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "customtablehdu", UI_KEY_CUSTOMTABLEHDU, "INT/STR", 0, "HDU of table given to '--customtable'.", GAL_OPTIONS_GROUP_INPUT, &p->customtablehdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "customimg", UI_KEY_CUSTOMIMG, "FITS", 0, "Image file for 'custom-img' profile.", GAL_OPTIONS_GROUP_INPUT, &p->customimgname, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "customimghdu", UI_KEY_CUSTOMIMGHDU, "INT/STR", 0, "HDU of image given to '--customimg'.", GAL_OPTIONS_GROUP_INPUT, &p->customimghdu, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "mergedsize", UI_KEY_MERGEDSIZE, "INT[,INT,...]", 0, "Merged image size along each dimension.", GAL_OPTIONS_GROUP_OUTPUT, &p->dsize, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_sizes_reverse }, { "oversample", UI_KEY_OVERSAMPLE, "INT", 0, "Scale of oversampling (>0 and odd).", GAL_OPTIONS_GROUP_OUTPUT, &p->oversample, GAL_TYPE_UINT8, GAL_OPTIONS_RANGE_GT_0_ODD, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "psfinimg", UI_KEY_PSFINIMG, 0, 0, "PSF profiles made with all in output image.", GAL_OPTIONS_GROUP_OUTPUT, &p->psfinimg, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "individual", UI_KEY_INDIVIDUAL, 0, 0, "Build all profiles separately.", GAL_OPTIONS_GROUP_OUTPUT, &p->individual, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "nomerged", UI_KEY_NOMERGED, 0, 0, "Do not create a merged image of all profiles.", GAL_OPTIONS_GROUP_OUTPUT, &p->nomerged, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Profiles:", UI_GROUP_PROFILES }, { "mode", UI_KEY_MODE, "STR", 0, "Mode of '--ccol': 'img' or 'wcs'.", UI_GROUP_PROFILES, &p->mode, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, ui_parse_coordinate_mode }, { "numrandom", UI_KEY_NUMRANDOM, "INT", 0, "No. of random points in Monte Carlo integ.", UI_GROUP_PROFILES, &p->numrandom, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "envseed", UI_KEY_ENVSEED, 0, 0, "Use GSL_RNG_SEED environment variable for seed.", UI_GROUP_PROFILES, &p->envseed, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "tolerance", UI_KEY_TOLERANCE, "FLT", 0, "Tolerance to switch to less accurate method.", UI_GROUP_PROFILES, &p->tolerance, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "tunitinp", UI_KEY_TUNITINP, 0, 0, "Truncation is in units of pixels, not radius.", UI_GROUP_PROFILES, &p->tunitinp, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "mforflatpix", UI_KEY_MFORFLATPIX, 0, 0, "mcol is flat pixel value (when fcol is 5 or 6)", UI_GROUP_PROFILES, &p->mforflatpix, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "mcolissum", UI_KEY_MCOLISSUM, 0, 0, "mcol is total sum, not magnitude.", UI_GROUP_PROFILES, &p->mcolissum, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "mcolnocustimg", UI_KEY_MCOLNOCUSTIMG, 0, 0, "Ignore value of mcol in 'custom-img'.", UI_GROUP_PROFILES, &p->mcolnocustimg, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "mcolnocustprof", UI_KEY_MCOLNOCUSTPROF, 0, 0, "Ignore value of mcol in 'custom-prof'.", UI_GROUP_PROFILES, &p->mcolnocustprof, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "shift", UI_KEY_SHIFT, "INT[, ...]", 0, "Shift profile centers in output image.", UI_GROUP_PROFILES, &p->shift, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_sizes_reverse }, { "prepforconv", UI_KEY_PREPFORCONV, 0, 0, "Shift and expand based on first catalog PSF.", UI_GROUP_PROFILES, &p->prepforconv, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "zeropoint", UI_KEY_ZEROPOINT, "FLT", 0, "Magnitude zero point.", UI_GROUP_PROFILES, &p->zeropoint, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "magatpeak", UI_KEY_MAGATPEAK, 0, 0, "Magnitude is for peak pixel, not full profile.", UI_GROUP_PROFILES, &p->magatpeak, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "circumwidth", UI_KEY_CIRCUMWIDTH, "FLT", 0, "Width of circumference (inward) profiles", UI_GROUP_PROFILES, &p->circumwidth, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "replace", UI_KEY_REPLACE, 0, 0, "Replace overlapping profile pixels, don't add.", UI_GROUP_PROFILES, &p->replace, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Columns, by info (see '--searchin'), or number (starting from 1):", UI_GROUP_CATALOG }, { "ccol", UI_KEY_CCOL, "STR/INT", 0, "Coordinate columns (one call for each dim.).", UI_GROUP_CATALOG, &p->ccol, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "fcol", UI_KEY_FCOL, "STR/INT", 0, "sersic (1), moffat (2), gaussian (3), point (4), " "flat (5), circumference (6), distance (7), " "custom-prof (8), azimuth (9), custom-img (10).", UI_GROUP_CATALOG, &p->fcol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "rcol", UI_KEY_RCOL, "STR/INT", 0, "Effective radius or FWHM in pixels.", UI_GROUP_CATALOG, &p->rcol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "ncol", UI_KEY_NCOL, "STR/INT", 0, "Sersic index or Moffat beta.", UI_GROUP_CATALOG, &p->ncol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "pcol", UI_KEY_PCOL, "STR/INT", 0, "Position angle (3D: first X-Z-X Euler angle).", UI_GROUP_CATALOG, &p->pcol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "p2col", UI_KEY_P2COL, "STR/INT", 0, "Second Euler angle (X-Z-X order).", UI_GROUP_CATALOG, &p->p2col, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "p3col", UI_KEY_P2COL, "STR/INT", 0, "Third Euler angle (X-Z-X order).", UI_GROUP_CATALOG, &p->p3col, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "qcol", UI_KEY_QCOL, "STR/INT", 0, "Axis ratio (major/dim2 in 3D).", UI_GROUP_CATALOG, &p->qcol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "q2col", UI_KEY_Q2COL, "STR/INT", 0, "Axis ratio (major/dim3 in 3D).", UI_GROUP_CATALOG, &p->q2col, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "mcol", UI_KEY_MCOL, "STR/INT", 0, "Magnitude.", UI_GROUP_CATALOG, &p->mcol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "tcol", UI_KEY_TCOL, "STR/INT", 0, "Truncation in units of --rcol.", UI_GROUP_CATALOG, &p->tcol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "WCS parameters:", UI_GROUP_WCS }, { "crpix", UI_KEY_CRPIX, "FLT[, ...]", 0, "Pixel coordinates of reference point.", UI_GROUP_WCS, &p->crpix, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "crval", UI_KEY_CRVAL, "FLT[, ...]", 0, "WCS coordinates of reference point.", UI_GROUP_WCS, &p->crval, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "cdelt", UI_KEY_CDELT, "FLT[, ...]", 0, "Resolution in each dimension.", UI_GROUP_WCS, &p->cdelt, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "pc", UI_KEY_PC, "FLT[, ...]", 0, "WCS rotation matrix (all elements).", UI_GROUP_WCS, &p->pc, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "cunit", UI_KEY_CUNIT, "STR[, ... ]", 0, "Units of the WCS coordinates (e.g., 'deg').", UI_GROUP_WCS, &p->cunit, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, { "ctype", UI_KEY_CTYPE, "STR[, ... ]", 0, "One of FITS standard WCS types.", UI_GROUP_WCS, &p->ctype, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/mkprof/ui.h0000644000175000017500000000534414551337306011631 /********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_PROFILES = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_CATALOG, UI_GROUP_WCS, }; /* Keys for each option. Available letters (-V which is used by GNU is also removed): a b d g j l n u v y A G H J L O Q W Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_BACKGROUND = 'k', UI_KEY_BACKHDU = 'B', UI_KEY_MERGEDSIZE = 'x', UI_KEY_CLEARCANVAS = 'C', UI_KEY_KERNEL = 'E', UI_KEY_OVERSAMPLE = 's', UI_KEY_INDIVIDUAL = 'i', UI_KEY_NOMERGED = 'm', UI_KEY_NUMRANDOM = 'r', UI_KEY_TOLERANCE = 't', UI_KEY_TUNITINP = 'p', UI_KEY_SHIFT = 'X', UI_KEY_PREPFORCONV = 'c', UI_KEY_ZEROPOINT = 'z', UI_KEY_CIRCUMWIDTH = 'w', UI_KEY_REPLACE = 'R', UI_KEY_ENVSEED = 'e', UI_KEY_MFORFLATPIX = 'f', /* Only with long version. */ UI_KEY_PSFINIMG = 1000, UI_KEY_MAGATPEAK, UI_KEY_MCOLISSUM, UI_KEY_MCOLNOCUSTPROF, UI_KEY_MCOLNOCUSTIMG, UI_KEY_MODE, UI_KEY_CCOL, UI_KEY_FCOL, UI_KEY_RCOL, UI_KEY_NCOL, UI_KEY_PCOL, UI_KEY_P2COL, UI_KEY_P3COL, UI_KEY_QCOL, UI_KEY_Q2COL, UI_KEY_MCOL, UI_KEY_TCOL, UI_KEY_CRPIX, UI_KEY_CRVAL, UI_KEY_CDELT, UI_KEY_PC, UI_KEY_CUNIT, UI_KEY_CTYPE, UI_KEY_CUSTOMIMG, UI_KEY_CUSTOMTABLE, UI_KEY_CUSTOMIMGHDU, UI_KEY_CUSTOMTABLEHDU, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct mkprofparams *p); char * ui_profile_name_write(int profile_code); void ui_free_report(struct mkprofparams *p, struct timeval *t1); #endif gnuastro-0.22/bin/mkprof/mkprof.h0000644000175000017500000000706214551337306012511 /********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MOCKGALS_H #define MOCKGALS_H #include #include "main.h" struct mkonthread { /* General parameters: */ double r; /* Elliptical radius at this point. */ double coord[3]; /* Pixel coord. (from profile center). */ double lower[3]; /* Coordinates of lower pixel position. */ double higher[3]; /* Coordinates of higher pixel position. */ double c[3]; /* Cosine of position angle(s). */ double s[3]; /* Sine of position angle(s). */ double q[2]; /* Axis ratio(s). */ double center[3]; /* Center (in FITS) in oversampled image.*/ double (*profile)(struct mkonthread *); /* Function to use. */ double truncr; /* Truncation radius in pixels. */ double intruncr; /* Inner truncation radius in pixels. */ long width[3]; /* Enclosing box in FITS axes, not C. */ float peakflux; /* Flux at profile peak. */ float brightness; /* The brightness of the profile. */ uint8_t func; /* Radial function code of the profile. */ long *onaxes; /* Sides of the unover-sampled image. */ long fpixel_i[3]; /* fpixel_i before running overlap. */ int correction; /* ==1: correct the pixels afterwards. */ unsigned long rng_seed; /* Seed used to generate this profile. */ gal_data_t *customimg; /* Custom image for this profile. */ /* Random number generator: */ gsl_rng *rng; /* Copy of main random number generator. */ /* Profile specific parameters: */ double sersic_re; /* r/re in Sersic profile. */ double sersic_inv_n; /* Sersic index of Sersic profile. */ double sersic_nb; /* Negative of b(n) constant. */ double moffat_alphasq; /* r divided by alpha in Moffat. */ double moffat_nb; /* Negative beta in the Moffat. */ double gaussian_c; /* Constant value in Gaussian. */ double fixedvalue; /* Value of a point source. */ /* General parameters */ struct mkprofparams *p; /* Pointer to the main.h structure. */ size_t *indexs; /* Indexs to build on this thread. */ pthread_barrier_t *b; /* Pthread barrier pointer. */ struct builtqueue *ibq; /* Internally built queue. */ }; void mkprof(struct mkprofparams *p); #endif gnuastro-0.22/bin/mkprof/oneprofile.h0000644000175000017500000000230614551337306013351 /******************************************************************** MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ONEPROFILE_H #define ONEPROFILE_H #include "mkprof.h" int oneprofile_ispsf(uint8_t fcolvalue); void oneprofile_set_prof_params(struct mkonthread *mkp); void oneprofile_make(struct mkonthread *mkp); #endif gnuastro-0.22/bin/mkprof/profiles.h0000644000175000017500000000340614551337306013034 /********************************************************************* MakeProfiles - Create mock astronomical profiles. MakeProfiles is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef PROFILES_H #define PROFILES_H double profiles_radial_distance(struct mkonthread *mkp); double profiles_azimuth(struct mkonthread *mkp); double profiles_custom_table(struct mkonthread *mkp); double profiles_custom_image(struct mkonthread *mkp); double profiles_gaussian_total(double q); double profiles_gaussian(struct mkonthread *mkp); double profiles_moffat_alpha(double fwhm, double beta); double profiles_moffat_total(double alpha, double beta, double q); double profiles_moffat(struct mkonthread *mkp); double profiles_sersic_b(double n); double profiles_sersic_total(double n, double re, double b, double q); double profiles_sersic(struct mkonthread *mkp); double profiles_circumference(struct mkonthread *mkp); double profiles_flat(struct mkonthread *mkp); #endif gnuastro-0.22/bin/noisechisel/0000755000175000017500000000000014557514202012122 5gnuastro-0.22/bin/noisechisel/Makefile.am0000644000175000017500000000337614557211443014110 ## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2016-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astnoisechisel ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astnoisechisel_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astnoisechisel_SOURCES = main.c ui.c detection.c noisechisel.c sky.c \ threshold.c EXTRA_DIST = main.h authors-cite.h args.h ui.h detection.h noisechisel.h \ sky.h threshold.h kernel-2d.h kernel-3d.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astnoisechisel.conf astnoisechisel-3d.conf gnuastro-0.22/bin/noisechisel/astnoisechisel.conf0000644000175000017500000000336414551337306015736 # Default parameters (System) for NoiseChisel. # NoiseChisel is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astnoisechisel --help # Full list of options, short doc. # $ astnoisechisel -P # Print all options and used values. # $ info astnoisechisel # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: khdu 1 whdu 1 chdu 1 # Tessellation largetilesize 200,200 # Detection: meanmedqdiff 0.01 qthresh 0.3 outliernumngb 15 outliersigma 5 outliersclip 3,0.2 smoothwidth 5 erode 2 erodengb 4 noerodequant 0.99 opening 1 openingngb 8 minskyfrac 0.7 sigmaclip 3,0.2 dthresh 0.0 dopening 1 dopeningngb 4 holengb 8 pseudoconcomp 4 snminarea 10 minnumfalse 100 snquant 0.99 detgrowquant 0.90 detgrowmaxholesize 100 # Operating mode continueaftercheck 0 gnuastro-0.22/bin/noisechisel/astnoisechisel-3d.conf0000644000175000017500000000332114470407761016236 # Default parameters (System) for NoiseChisel. # NoiseChisel is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astnoisechisel --help # Full list of options, short doc. # $ astnoisechisel -P # Print all options and used values. # $ info astnoisechisel # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: khdu 1 whdu 1 chdu 1 # Tessellation numchannels 1,1,1 tilesize 15,15,5 largetilesize 50,50,15 # Detection: meanmedqdiff 0.005 qthresh 0.3 outliersigma 10 outliersclip 3,0.2 smoothwidth 3 erode 1 erodengb 6 noerodequant 0.99 opening 1 openingngb 18 minskyfrac 0.7 sigmaclip 3,0.2 dthresh 0.0 dopening 1 dopeningngb 6 holengb 18 pseudoconcomp 6 snminarea 20 minnumfalse 100 snquant 0.99 detgrowquant 0.95 detgrowmaxholesize 300 # Operating mode continueaftercheck 0 gnuastro-0.22/bin/noisechisel/Makefile.in0000644000175000017500000034132514557513747014134 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astnoisechisel$(EXEEXT) subdir = bin/noisechisel ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astnoisechisel_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ detection.$(OBJEXT) noisechisel.$(OBJEXT) sky.$(OBJEXT) \ threshold.$(OBJEXT) astnoisechisel_OBJECTS = $(am_astnoisechisel_OBJECTS) am__DEPENDENCIES_1 = astnoisechisel_DEPENDENCIES = \ $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/detection.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/noisechisel.Po ./$(DEPDIR)/sky.Po \ ./$(DEPDIR)/threshold.Po ./$(DEPDIR)/ui.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astnoisechisel_SOURCES) DIST_SOURCES = $(astnoisechisel_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib astnoisechisel_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astnoisechisel_SOURCES = main.c ui.c detection.c noisechisel.c sky.c \ threshold.c EXTRA_DIST = main.h authors-cite.h args.h ui.h detection.h noisechisel.h \ sky.h threshold.h kernel-2d.h kernel-3d.h dist_sysconf_DATA = astnoisechisel.conf astnoisechisel-3d.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/noisechisel/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/noisechisel/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astnoisechisel$(EXEEXT): $(astnoisechisel_OBJECTS) $(astnoisechisel_DEPENDENCIES) $(EXTRA_astnoisechisel_DEPENDENCIES) @rm -f astnoisechisel$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astnoisechisel_OBJECTS) $(astnoisechisel_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/detection.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/noisechisel.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sky.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threshold.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/detection.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/noisechisel.Po -rm -f ./$(DEPDIR)/sky.Po -rm -f ./$(DEPDIR)/threshold.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/detection.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/noisechisel.Po -rm -f ./$(DEPDIR)/sky.Po -rm -f ./$(DEPDIR)/threshold.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/noisechisel/main.c0000644000175000017500000000312114551337306013131 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" #include "noisechisel.h" /* Main function */ int main (int argc, char *argv[]) { struct timeval t1; struct noisechiselparams p={{{0},0},{0},0}; /* Set they starting time. */ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Noisechisel. */ noisechisel(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully. */ return EXIT_SUCCESS; } gnuastro-0.22/bin/noisechisel/ui.c0000644000175000017500000007344714551337306012644 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" Detects and segments signal " "that is deeply burried in noise. It employs a noise-based detection and " "segmentation method enabling it to be very resilient to the rich " "diversity of shapes in astronomical targets.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct noisechiselparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; /* Program specific initialization. */ p->snthresh=NAN; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_IGNORECASE: case GAL_OPTIONS_KEY_STDINTIMEOUT: cp->coptions[i].flags=OPTION_HIDDEN; break; case GAL_OPTIONS_KEY_TILESIZE: case GAL_OPTIONS_KEY_MINMAPSIZE: case GAL_OPTIONS_KEY_NUMCHANNELS: case GAL_OPTIONS_KEY_INTERPMETRIC: case GAL_OPTIONS_KEY_INTERPNUMNGB: case GAL_OPTIONS_KEY_REMAINDERFRAC: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; cp->coptions[i].doc="'txt', 'fits-ascii', 'fits-binary'."; break; } } } /* Parse a single option: */ static error_t parse_opt(int key, char *arg, struct argp_state *state) { struct noisechiselparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(p->inputname) argp_error(state, "only one argument (input file) should be given"); else if(arg[0]!='\0') p->inputname=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct noisechiselparams *p) { /* If the convolved option is given, then the convolved HDU is also mandatory. */ if(p->convolvedname && p->chdu==NULL) error(EXIT_FAILURE, 0, "no value given to '--chdu'. When the " "'--convolved' option is called (to specify a convolved image " "and avoid convolution) it is mandatory to also specify a HDU " "for it"); /* Make sure that the no-erode-quantile is not smaller or equal to qthresh. */ if( p->noerodequant <= p->qthresh) error(EXIT_FAILURE, 0, "the quantile for no erosion ('--noerodequant') " "must be larger than the base quantile threshold ('--qthresh', " "or '-t'). You have provided %.4f and %.4f for the former and " "latter, respectively", p->noerodequant, p->qthresh); /* For the options that make tables, the table format option is mandatory. */ if( p->checksn && p->cp.tableformat==0 ) error(EXIT_FAILURE, 0, "'--tableformat' is necessary with the " "'--checksn' option.\n" "Please see description for '--tableformat' after running the " "following command for more information (use 'SPACE' to go down " "the page and 'q' to return to the command-line):\n\n" " $ info gnuastro \"Input Output options\""); /* Kernel checks. */ if(p->kernelname && strcmp(p->kernelname, UI_NO_CONV_KERNEL_NAME)) { /* If its FITS, see if a HDU has been provided. */ if( gal_fits_file_recognized(p->kernelname) && p->khdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified for kernel. When the " "kernel is a FITS file, a HDU must also be specified. You " "can use the '--khdu' option and give it the HDU number " "(starting from zero), extension name, or anything " "acceptable by CFITSIO"); } /* Wide kernel checks. */ if(p->widekernelname) { /* If its FITS, see if a HDU has been provided. */ if( gal_fits_file_recognized(p->widekernelname) && p->whdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified for the given wide kernel " "('%s'). When the wide kernel is a FITS file, a HDU must also " "be specified. You can use the '--whdu' option and give it the " "HDU number (starting from zero), extension name, or any " "HDU identifier acceptable by CFITSIO", p->widekernelname); } /* If the S/N quantile is less than 0.1 (an arbitrary small value), this is probably due to forgetting that this is the purity level (higher-is-better), not the contamination level (lower-is-better). This actually happened in a few cases: where we wanted a false detection rate of 0.0001 (a super-high value!), and instead of inputing 0.9999, we mistakenly gave '--snquant' a value of '0.0001'. We were thus fully confused with the output (an extremely low value) and thought its a bug, while it wasn't! */ if(p->snquant<0.1) error(EXIT_SUCCESS, 0, "\nWARNING: Value of '--snquant' ('-c') is " "%g. Note that this is not a contamination rate (where lower " "is better), it is a purity rate (where higher is better). If " "you intentionally asked for such a low purity level, please " "ignore this warning\n\n", p->snquant); /* Make sure a reasonable value is given to '--meanmedqdiff'. */ if(p->meanmedqdiff>0.5) error(EXIT_FAILURE, 0, "%g is not acceptable for '--meanmedqdiff'! " "This option is the quantile-difference between the quantile " "of the mean and 0.5 (the quantile of the median). Since the " "range of quantile is from 0.0 to 1.0, the maximum difference " "can therefore be 0.5. For more on this option, please see " "the \"Quantifying signal in a tile\" section of the Gnuastro " "book (with this command: 'info gnuastro \"Quantifying " "signal in a tile\"'", p->meanmedqdiff); if(p->meanmedqdiff>0.3 && p->cp.quiet==0) error(EXIT_SUCCESS, 0, "WARNING: %g is very high for " "'--meanmedqdiff'! This option is the quantile-difference " "between the quantile of the mean and 0.5 (the quantile of " "the median). For more on this option, please see the " "\"Quantifying signal in a tile\" section of the Gnuastro " "book (with this command: 'info gnuastro \"Quantifying " "signal in a tile\"'. To suppress this warning, please use " "the '--quiet' option", p->meanmedqdiff); } static void ui_check_options_and_arguments(struct noisechiselparams *p) { /* Basic input file checks. */ if(p->inputname) { /* If its FITS, see if a HDU has been provided. */ if( gal_fits_file_recognized(p->inputname) && p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified for input. When the input " "is a FITS file, a HDU must also be specified, you can use " "the '--hdu' ('-h') option and give it the HDU number " "(starting from zero), extension name, or anything " "acceptable by CFITSIO"); } else error(EXIT_FAILURE, 0, "no input file is specified"); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static void ui_set_output_names(struct noisechiselparams *p) { char *output=p->cp.output; char *basename = output ? output : p->inputname; /* Main program output. */ if(output) { /* Delete the file if it already exists. */ gal_checkset_writable_remove(p->cp.output, p->inputname, 0, p->cp.dontdelete); /* When the output name is given (possibly with directory information), the check images will also be put in that same directory.. */ p->cp.keepinputdir=1; } else p->cp.output=gal_checkset_automatic_output(&p->cp, p->inputname, "_detected.fits"); /* Tile check. */ if(p->cp.tl.checktiles) p->cp.tl.tilecheckname=gal_checkset_automatic_output(&p->cp, basename, "_tiles.fits"); /* Quantile threshold. */ if(p->checkqthresh) p->qthreshname=gal_checkset_automatic_output(&p->cp, basename, "_qthresh.fits"); /* Initial detection Sky values. */ if(p->checkdetsky) p->detskyname=gal_checkset_automatic_output(&p->cp, basename, "_detsky.fits"); /* Pseudo-detection S/N values. */ if(p->checksn) { p->detsn_s_name=gal_checkset_automatic_output(&p->cp, basename, ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "_detsn_sky.txt" : "_detsn.fits") ); p->detsn_d_name=gal_checkset_automatic_output(&p->cp, basename, ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "_detsn_det.txt" : "_detsn.fits") ); p->detsn_D_name=gal_checkset_automatic_output(&p->cp, basename, ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "_detsn_grown.txt" : "_detsn.fits") ); } /* Detection steps. */ if(p->checkdetection) p->detectionname=gal_checkset_automatic_output(&p->cp, basename, "_detcheck.fits"); /* Sky checks. */ if(p->checksky) p->skyname=gal_checkset_automatic_output(&p->cp, basename, "_sky.fits"); } /* Prepare the kernel, either from a file, or from the default arrays available in the headers. The default kernels were created as follows. */ static void ui_prepare_kernel(struct noisechiselparams *p) { float *f, *ff, *k; size_t ndim=p->input->ndim; /* Import the default kernel. */ #include "kernel-2d.h" #include "kernel-3d.h" /* If a kernel file is given, then use it. Otherwise, use the default kernel. */ if(p->kernelname) { /* Read the kernel. */ if( strcmp(p->kernelname, UI_NO_CONV_KERNEL_NAME) ) { /* Read the kernel into memory. */ p->kernel=gal_fits_img_read_kernel(p->kernelname, p->khdu, p->cp.minmapsize, p->cp.quietmmap, "--khdu"); /* Make sure it has the same dimensions as the input. */ if( p->kernel->ndim != p->input->ndim ) error(EXIT_FAILURE, 0, "%s (hdu %s): is %zuD, however, %s (%s) " "is a %zuD dataset", p->kernelname, p->khdu, p->kernel->ndim, p->inputname, p->cp.hdu, p->input->ndim); } else p->kernel=NULL; } else { /* Allocate space for the kernel (we don't want to use the statically allocated array. */ p->kernel=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, p->input->ndim, ndim==2 ? kernel_2d_dsize : kernel_3d_dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Copy the staticly allocated default array into `p->kernel'. */ k = ndim==2 ? kernel_2d : kernel_3d; ff = (f=p->kernel->array) + p->kernel->size; do *f=*k++; while(++fwidekernelname) p->widekernel=gal_fits_img_read_kernel(p->widekernelname, p->whdu, p->cp.minmapsize, p->cp.quietmmap, "--whdu"); } static void ui_prepare_tiles(struct noisechiselparams *p) { gal_data_t *check; struct gal_tile_two_layer_params *tl=&p->cp.tl, *ltl=&p->ltl; /* Check the tile parameters for the small tile sizes and make the tile structure. We will also need the dimensions of the tile with the maximum required memory. */ p->maxtsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, p->input->ndim, 0, __func__, "p->maxtsize"); gal_tile_full_sanity_check(p->inputname, p->cp.hdu, p->input, tl); gal_tile_full_two_layers(p->input, tl); gal_tile_full_permutation(tl); for(check=tl->tiles; check!=NULL; check=check->next) if( check->size > p->maxtcontig )/* p->maxtcontig initialized to 0. */ { p->maxtcontig=check->size; memcpy(p->maxtsize, check->dsize, tl->ndim*sizeof *p->maxtsize); } /* Make the large tessellation, except for the size, the rest of the parameters are the same as the small tile sizes. */ ltl->numchannels = tl->numchannels; ltl->remainderfrac = tl->remainderfrac; ltl->workoverch = tl->workoverch; ltl->checktiles = tl->checktiles; ltl->oneelempertile = tl->oneelempertile; p->maxltsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, p->input->ndim, 0, __func__, "p->maxltsize"); gal_tile_full_sanity_check(p->inputname, p->cp.hdu, p->input, ltl); gal_tile_full_two_layers(p->input, ltl); gal_tile_full_permutation(ltl); for(check=ltl->tiles; check!=NULL; check=check->next) if( check->size > p->maxltcontig )/* p->maxltcontig initialized to 0. */ { p->maxltcontig=check->size; memcpy(p->maxltsize, check->dsize, ltl->ndim*sizeof *p->maxltsize); } /* If the input has blank elements, then set teh appropriate flag for each tile.*/ if( p->input->flag & GAL_DATA_FLAG_HASBLANK ) { gal_tile_block_blank_flag(tl->tiles, p->cp.numthreads); gal_tile_block_blank_flag(ltl->tiles, p->cp.numthreads); } /* Make the tile check image if requested. */ if(tl->checktiles) { /* Large tiles. */ check=gal_tile_block_check_tiles(ltl->tiles); gal_fits_img_write(check, tl->tilecheckname, NULL, 0); gal_data_free(check); /* Small tiles. */ check=gal_tile_block_check_tiles(tl->tiles); gal_fits_img_write(check, tl->tilecheckname, NULL, 0); gal_data_free(check); /* If 'continueaftercheck' hasn't been called, abort NoiseChisel. */ if(!p->continueaftercheck) ui_abort_after_check(p, tl->tilecheckname, NULL, "showing all tiles over the image"); /* Free the name. */ free(tl->tilecheckname); tl->tilecheckname=NULL; } } static void ui_ngb_check(size_t value, char *optionname, size_t ndim) { switch(ndim) { case 2: if(value!=4 && value!=8) error(EXIT_FAILURE, 0, "%zu is not an acceptable value for " "'--%s'. Acceptable values for 2D inputs are 4 or 8", value, optionname); break; case 3: if(value!=6 && value!=18 && value!=26) error(EXIT_FAILURE, 0, "%zu is not an acceptable value for " "`--%s'. Acceptable values for 3D inputs are 6, 18 or 26", value, optionname); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. Dimension value %zu is not recognized.", __func__, PACKAGE_BUGREPORT, ndim); } } /* Read the input image and do the basic checks */ static void ui_preparations_read_input(struct noisechiselparams *p) { float *f; size_t ndim; /* Read the input as a single precision floating point dataset, also load the WCS and finally remove any possibly existing extra dimensions (with a length of 1). */ p->input = gal_array_read_one_ch_to_type(p->inputname, p->cp.hdu, NULL, GAL_TYPE_FLOAT32, p->cp.minmapsize, p->cp.quietmmap, "--hdu"); p->input->wcs = gal_wcs_read(p->inputname, p->cp.hdu, p->cp.wcslinearmatrix, 0, 0, &p->input->nwcs, "--hdu"); p->input->ndim=gal_dimension_remove_extra(p->input->ndim, p->input->dsize, p->input->wcs); /* When the input doesn't have a name, use 'INPUT'. */ if(p->input->name==NULL) gal_checkset_allocate_copy("INPUT", &p->input->name); /* Check the dimensions of the input. */ ndim=p->input->ndim; if(ndim!=2 && ndim!=3) error(EXIT_FAILURE, 0, "%s: is a %zu dimensional dataset, only 2D " "or 3D datasets are currently supported", gal_fits_name_save_as_string(p->inputname, p->cp.hdu), ndim); /* Check the neighbor options and if the given values correspond to the input's dimensions. */ ui_ngb_check(p->holengb, "holengb", ndim); ui_ngb_check(p->erodengb, "erodengb", ndim); ui_ngb_check(p->openingngb, "openingngb", ndim); ui_ngb_check(p->dopeningngb, "dopeningngb", ndim); ui_ngb_check(p->pseudoconcomp, "pseudoconcomp", ndim); /* A small check to see if the edges of the dataset aren't zero valued: they should be masked. */ f=p->input->array; if( (f[0]==0.0 && f[1]==0.0) || (f[ p->input->size-1 ]==0.0 && f[ p->input->size-2 ]==0.0) ) error(0, 0, "%s (hdu %s): [*** WARNING ***]: The first and/or last few " "pixels have a value of 0.0. As described below, the result of " "this run may thus not be reasonable/optimal.\n\n" "Some data reduction pipelines put 0.0 where there isn't data " "(most commonly on the edges). However, NoiseChisel's " "noise-based detection paradigm starts from the lower values of " "the dataset (not high S/N peaks): its initial threshold is " "mostly below the Sky value (0.0 in processed images). Therefore " "0.0 is meaningful for NoiseChisel and must not be used for a " "blank value.\n\n" "To ignore certain pixels, they must have a blank/NaN value. " "To mask (set to blank/NaN) the 0.0 valued elements, you can use " "Gnuastro's Arithmetic program with a command like this:\n\n" " $ astarithmetic %s %s 0.0 eq nan where -g%s\n\n" "If the few 0.0 valued pixels on the edges are meaningful for " "your analysis, please ignore this warming message.\n" "--------------------------", p->inputname, p->cp.hdu, p->inputname, p->inputname, p->cp.hdu); } static void ui_preparations(struct noisechiselparams *p) { /* Prepare the names of the outputs. */ ui_set_output_names(p); /* Read the input datasets and do the basic checks.*/ ui_preparations_read_input(p); /* If a convolved image was given, read it in. Otherwise, read the given kernel. */ if(p->convolvedname) { /* Read the input convolved image. */ p->conv = gal_array_read_one_ch_to_type(p->convolvedname, p->chdu, NULL, GAL_TYPE_FLOAT32, p->cp.minmapsize, p->cp.quietmmap, "--chdu"); /* Make sure the convolved image is the same size as the input. */ if( gal_dimension_is_different(p->input, p->conv) ) error(EXIT_FAILURE, 0, "%s (hdu %s), given to '--convolved' and " "'--convolvehdu', is not the same size as NoiseChisel's " "input: %s (hdu: %s)", p->convolvedname, p->chdu, p->inputname, p->cp.hdu); } else ui_prepare_kernel(p); /* Check for blank values to help later processing. */ gal_blank_present(p->input, 1); /* Prepare the tessellation. */ ui_prepare_tiles(p); /* Allocate space for the over-all necessary arrays. */ p->binary=gal_data_alloc(NULL, GAL_TYPE_UINT8, p->input->ndim, p->input->dsize, p->input->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, "binary", NULL); p->olabel=gal_data_alloc(NULL, GAL_TYPE_INT32, p->input->ndim, p->input->dsize, p->input->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, "labels", NULL); p->binary->flag = p->olabel->flag = p->input->flag; } /**************************************************************/ /************ High level reading function *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct noisechiselparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Prepare all the options as FITS keywords to write in output later. */ gal_options_as_fits_keywords(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Let the user know that processing has started. */ if(!p->cp.quiet) { printf(PROGRAM_NAME" "PACKAGE_VERSION" started on %s", ctime(&p->rawtime)); printf(" - Using %zu CPU thread%s\n", p->cp.numthreads, p->cp.numthreads==1 ? "." : "s."); printf(" - Input: %s (hdu: %s)\n", p->inputname, p->cp.hdu); if(p->convolvedname) printf(" - Convolved input: %s (hdu: %s)\n", p->convolvedname, p->chdu); else { if(p->kernelname) { if( strcmp(p->kernelname, UI_NO_CONV_KERNEL_NAME) ) printf(" - %s: %s (hdu: %s)\n", p->widekernelname ? "Sharp Kernel" : "Kernel", p->kernelname, p->khdu); else printf(" - No convolution requested.\n"); } else printf(p->kernel->ndim==2 ? " - %s: FWHM=2 pixel Gaussian.\n" : " - %s: FWHM=1.5 pixel Gaussian (half extent in " "3rd dimension).\n", p->widekernelname ? "Sharp Kernel" : "Kernel"); } if(p->widekernelname) printf(" - Wide Kernel: %s (hdu: %s)\n", p->widekernelname, p->whdu); } } /**************************************************************/ /************ Pre-finish/abort operations *************/ /**************************************************************/ void ui_abort_after_check(struct noisechiselparams *p, char *filename, char *file2name, char *description) { char *name; if(file2name) { if( asprintf(&name, "'%s' and '%s'", filename, file2name)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&name, "'%s'", filename)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } /* Let the user know that NoiseChisel is aborting. */ fprintf(stderr, "------------------------------------------------\n" "%s aborted for a check\n" "------------------------------------------------\n" "%s (%s) has been created.\n\n" "If you want %s to continue its processing AND save any " "requested check outputs, please run it again with " "'--continueaftercheck'.\n" "------------------------------------------------\n", PROGRAM_NAME, name, description, PROGRAM_NAME); /* Clean up. */ free(name); ui_free_report(p, NULL); /* Abort. */ exit(EXIT_SUCCESS); } void ui_free_report(struct noisechiselparams *p, struct timeval *t1) { /* Free the simply allocated spaces. */ free(p->cp.hdu); free(p->maxtsize); free(p->maxltsize); free(p->cp.output); if(p->khdu) free(p->khdu); if(p->whdu) free(p->whdu); if(p->chdu) free(p->chdu); if(p->skyname) free(p->skyname); if(p->detskyname) free(p->detskyname); if(p->qthreshname) free(p->qthreshname); if(p->detsn_s_name) free(p->detsn_s_name); if(p->detsn_d_name) free(p->detsn_d_name); if(p->detectionname) free(p->detectionname); /* Free the allocated datasets. */ gal_data_free(p->sky); gal_data_free(p->std); gal_data_free(p->wconv); gal_data_free(p->input); gal_data_free(p->kernel); gal_data_free(p->binary); gal_data_free(p->olabel); gal_data_free(p->noskytiles); gal_data_free(p->widekernel); if(p->conv!=p->input) gal_data_free(p->conv); /* Clean up the tile structure. */ p->ltl.numchannels=NULL; gal_tile_full_free_contents(&p->ltl); gal_tile_full_free_contents(&p->cp.tl); /* Print the final message. */ if(!p->cp.quiet && t1) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); } gnuastro-0.22/bin/noisechisel/detection.c0000644000175000017500000012154714551337306014200 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "sky.h" #include "threshold.h" /**************************************************************** ************ Initial detection ************ ****************************************************************/ /* The user gives connectivity values in terms of the number of neighbors to use, so with this function, we convert that number to the connectivity that is defined in `gnuastro/dimension.h'. */ static int detection_ngb_to_connectivity(size_t ndim, size_t ngb) { int connectivity=0; switch(ndim) { case 2: connectivity = ngb==4 ? 1 : 2; break; case 3: connectivity = ngb==6 ? 1 : (ngb==18 ? 2 : 3); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to address " "the problem. %zu not a valid value to `ndim'", __func__, PACKAGE_BUGREPORT, ndim); } return connectivity; } void detection_initial(struct noisechiselparams *p) { float *f; char *msg; uint8_t *b, *bf; int resetblank=0; struct timeval t0, t1; /* Get the starting time. */ if(!p->cp.quiet) { gal_timing_report(NULL, "Starting to find initial detections.", 1); gettimeofday(&t0, NULL); } /* Find and apply the threshold on the input. */ threshold_quantile_find_apply(p); if(p->detectionname) { p->binary->name="THRESHOLDED"; gal_fits_img_write(p->binary, p->detectionname, NULL, 0); p->binary->name=NULL; } /* Remove any blank elements from the binary image if requested. */ if(p->blankasforeground==0 && gal_blank_present(p->binary,0)) { resetblank=1; bf=(b=p->binary->array)+p->binary->size; do *b = *b==GAL_BLANK_UINT8 ? 0 : *b; while(++bcp.quiet) gettimeofday(&t1, NULL); gal_binary_erode(p->binary, p->erode, detection_ngb_to_connectivity(p->input->ndim, p->erodengb), 1); if(!p->cp.quiet) { if( asprintf(&msg, "Eroded %zu time%s (%zu-connected).", p->erode, p->erode!=1?"s":"", p->erodengb)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(&t1, msg, 2); free(msg); } if(p->detectionname) { p->binary->name="ERODED"; gal_fits_img_write(p->binary, p->detectionname, NULL, 0); p->binary->name=NULL; } /* Correct the no-erode values. */ bf=(b=p->binary->array)+p->binary->size; do *b = *b==THRESHOLD_NO_ERODE_VALUE ? 1 : *b; while(++bcp.quiet) gettimeofday(&t1, NULL); gal_binary_open(p->binary, p->opening, detection_ngb_to_connectivity(p->input->ndim, p->openingngb), 1); if(!p->cp.quiet) { if( asprintf(&msg, "Opened (depth: %zu, %zu-connected).", p->opening, p->openingngb)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(&t1, msg, 2); free(msg); } /* Reset the blank values (if requested). */ if(resetblank) { f=p->input->array; bf=(b=p->binary->array)+p->binary->size; do *b = isnan(*f++) ? GAL_BLANK_UINT8 : *b; while(++bnuminitialdets=gal_binary_connected_components(p->binary, &p->olabel, p->binary->ndim); if(p->detectionname) { p->olabel->name="OPENED-AND-LABELED"; gal_fits_img_write(p->olabel, p->detectionname, NULL, 0); p->olabel->name=NULL; } /* Report the ending of initial detection. */ if(!p->cp.quiet) { if( asprintf(&msg, "%zu initial detections found.", p->numinitialdets)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(&t0, msg, 1); free(msg); } } /**************************************************************** ************ Pseudo detections ************ ****************************************************************/ /* Set all the pixels we don't need to Nan. */ static void detection_pseudo_sky_or_det(struct noisechiselparams *p, uint8_t *w, int s0d1) { int32_t *l=p->olabel->array; uint8_t *b=p->binary->array, *bf=b+p->binary->size; if(s0d1) /* Set all sky regions (label equal to zero) to zero, since a blank pixel is also non-zero, we don't need to check for blanks in this case. */ do *w++ = *l++ ? *b : 0; while(++barray; GAL_TILE_PARSE_OPERATE(tile, NULL, 0, 0, {*i=*c++;}); } /* Fill the holes and open on multiple threads to find the pseudo-detections. Ideally both these should be done immediately after each other on each large tile, but when the user wants to check the steps, we need to break out of the threads at each step. */ struct fho_params { int step; uint8_t *copyspace; gal_data_t *workbin; gal_data_t *worklab; struct noisechiselparams *p; }; static void * detection_fill_holes_open(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct fho_params *fho_prm=(struct fho_params *)(tprm->params); struct noisechiselparams *p=fho_prm->p; void *tarray; uint8_t *b, *bf; gal_data_t *tile, *copy, *tblock; size_t i, dsize[]={1,1,1,1,1,1,1,1,1,1}; /* For upto 10-Dimensions! */ /* A temporary data structure to wrap around the copy space. Note that the initially allocated space for this tile is only 1 pixel! */ copy=gal_data_alloc(NULL, GAL_TYPE_UINT8, p->input->ndim, dsize, NULL, 0, -1, 1, NULL, NULL, NULL); free(copy->array); copy->array=&fho_prm->copyspace[p->maxltcontig*tprm->id]; /* Go over all the tiles given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ tile=&p->ltl.tiles[tprm->indexs[i]]; /* Change the tile pointers (temporarily). */ tarray=tile->array; tblock=tile->block; tile->array=gal_tile_block_relative_to_other(tile, fho_prm->workbin); tile->block=fho_prm->workbin; /* Copy the tile into the contiguous patch of memory to work on, but first reset the size element so 'gal_data_copy_to_allocated' knows there is enough space. */ copy->flag=0; copy->size=p->maxltcontig; gal_data_copy_to_allocated(tile, copy); /* Take blank values to the background (set them to zero) if necsesary. */ if( p->blankasforeground==0 && gal_blank_present(p->input,0) && gal_blank_present(copy, 1) ) { bf=(b=copy->array)+copy->size; do *b = *b==GAL_BLANK_UINT8 ? 0 : *b; while(++binput->ndim, p->holengb), -1); if(fho_prm->step==1) { detection_write_in_large(tile, copy); tile->array=tarray; tile->block=tblock; continue; } /* Open all the regions. */ gal_binary_open(copy, p->dopening, detection_ngb_to_connectivity(p->input->ndim, p->dopeningngb), 1); /* Write the copied region back into the large input and AFTERWARDS, correct the tile's pointers, the pointers must not be corrected before writing the copy. */ detection_write_in_large(tile, copy); tile->array=tarray; tile->block=tblock; } /* Clean up. */ copy->array=NULL; gal_data_free(copy); /* Wait until all the threads finish and return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* We have the thresholded image (with blank values for regions that should not be used). Find the pseudo-detections in those regions. */ static size_t detection_pseudo_find(struct noisechiselparams *p, gal_data_t *workbin, gal_data_t *worklab, int s0d1) { float *f; uint8_t *b, *bf; gal_data_t *bin; struct fho_params fho_prm={0, NULL, workbin, worklab, p}; int con=detection_ngb_to_connectivity(p->input->ndim, p->pseudoconcomp); /* Set all the initial detected pixels to blank values. */ detection_pseudo_sky_or_det(p, workbin->array, s0d1); if(p->detectionname) { workbin->name = s0d1 ? "DTHRESH-ON-DET" : "DTHRESH-ON-SKY"; gal_fits_img_write(workbin, p->detectionname, NULL, 0); workbin->name=NULL; } /* Allocate the space necessary to work on each tile (to avoid having to allocate it it separately for each tile and within each thread. 'maxltcontig' is the maximum contiguous patch of memory needed to store all tiles. Finally, since we are working on a 'uint8_t' type, the size of each element is only 1 byte. */ fho_prm.copyspace=gal_pointer_allocate(GAL_TYPE_UINT8, p->cp.numthreads*p->maxltcontig, 0, __func__, "fho_prm.copyspace"); /* Fill the holes and open on each large tile. When no check image is requested, the two steps can be done independently on each tile, but when a check image is requested, we need to break out of the thread spinning function to save the full image then continue it. */ if( p->detectionname ) { /* Necessary initializations. */ bin=gal_data_copy(workbin); /* - Temporary array for demonstration. */ fho_prm.workbin=bin; /* - To pass onto the thread. */ fho_prm.step=1; /* - So we can break out of the threads. */ /* Do each step. */ while(fho_prm.step<3) { /* Put a copy of 'workbin' into 'bin' for every step (only necessary for the second step and after). For the first time it was already copied.*/ if(fho_prm.step>1) memcpy(bin->array, workbin->array, workbin->size); /* Do the respective step. */ gal_threads_spin_off(detection_fill_holes_open, &fho_prm, p->ltl.tottiles, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap); /* Reset the blank values (if they were changed). */ if( p->blankasforeground==0 && gal_blank_present(p->input,0) ) { f=p->input->array; bf=(b=workbin->array)+workbin->size; do *b = isnan(*f++) ? GAL_BLANK_UINT8 : *b; while(++bname="HOLES-FILLED"; break; case 2: bin->name="OPENED"; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "so we can address the issue. the value %d is not " "recognized.", __func__, PACKAGE_BUGREPORT, fho_prm.step); } /* Write the temporary array into the check image. */ gal_fits_img_write(bin, p->detectionname, NULL, 0); /* Increment the step counter. */ ++fho_prm.step; } /* Clean up: the array in 'bin' should just be replaced with that in 'workbin' because it is used in later steps. */ if(workbin->mmapname) { /* Delete the memory mapped file and set the filename of 'bin' for 'workbin'. */ remove(workbin->mmapname); free(workbin->mmapname); workbin->mmapname=bin->mmapname; bin->mmapname=NULL; } else free(workbin->array); workbin->array=bin->array; bin->name=bin->array=NULL; gal_data_free(bin); } else gal_threads_spin_off(detection_fill_holes_open, &fho_prm, p->ltl.tottiles, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap); /* Clean up. */ free(fho_prm.copyspace); /* Label all regions, but first, deal with the blank pixels in the 'workbin' dataset when working on the Sky. Recall that in this case, the blank pixels are the detections. On the Sky image, blank should be set to 1 (because we want the detected objects to have the same labels as the pseudo-detections that cover them). This will allow us to later remove these pseudo-detections. if(s0d1==0) { bf=(b=workbin->array)+workbin->size; do if(*b==GAL_BLANK_UINT8) *b = !s0d1; while(++bdetsn_D_name : p->detsn_d_name ) : p->detsn_s_name ); if( p->cp.tableformat!=GAL_TABLE_FORMAT_TXT ) extname = ( s0d1D2 ? ( s0d1D2==2 ? "GROWN_DETECTION_SN" : "DET_PSEUDODET_SN" ) : "SKY_PSEUDODET_SN" ); threshold_write_sn_table(p, sn, snind, str, comments, extname); gal_list_str_free(comments, 1); } static gal_data_t * detection_sn(struct noisechiselparams *p, gal_data_t *worklab, size_t num, int s0d1D2, char *extname) { float *snarr; uint8_t *flag; size_t tablen=num+1; gal_data_t *sn, *snind; int32_t *plabend, *indarr=NULL; double ave, err, *pos, *brightness; size_t ind, ndim=p->input->ndim, pcols=1+ndim; float s, ss, *f, *ff, *fs, *sky=p->sky->array; size_t i, j, *area, counter=0, *dsize=p->input->dsize; int32_t *plab = worklab->array, *dlab = s0d1D2 ? NULL : p->olabel->array; size_t *coord=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "coord"); /* Sanity check. */ if(p->input->type!=GAL_TYPE_FLOAT32) error(EXIT_FAILURE, 0, "%s: the input dataset must be float32 type, " "it is %s", __func__, gal_type_name(p->input->type, 1)); if(!isnan(GAL_BLANK_FLOAT32)) error(EXIT_FAILURE, 0, "%s: only a NaN value is recognized for blank " "floating point data types, the blank value is defined to be %f", __func__, GAL_BLANK_FLOAT32); if(ndim!=2 && ndim!=3) error(EXIT_FAILURE, 0, "%s: only 2D images or 3D datacubes are " "acceptable, but input has %zu dimensions", __func__, ndim); /* Allocate all the necessary arrays, note that since we want to put each object's information into the same index, the number of allocated spaces has to be 'tablen=num+1'. */ area = gal_pointer_allocate(GAL_TYPE_SIZE_T, tablen, 1, __func__, "area"); brightness = gal_pointer_allocate(GAL_TYPE_FLOAT64, tablen, 1, __func__, "brightness"); pos = gal_pointer_allocate(GAL_TYPE_FLOAT64, pcols*tablen, 1, __func__, "pos"); flag = ( s0d1D2==0 ? gal_pointer_allocate(GAL_TYPE_UINT8, tablen, 1, __func__, "flag") : NULL ); sn = gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &tablen, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, "SIGNAL-TO-NOISE", "ratio", NULL); snind = ( p->checksn==0 ? NULL : gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &tablen, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, "LABEL", "counter", NULL) ); /* Go over all the pixels and get the necessary information. */ fs = f = p->input->array; ff = f + p->input->size; do { /* All this work is only necessary when we are actually on a pseudo-detection label: it is non-zero and not blank. */ if(*plab && ( (p->input->flag | GAL_DATA_FLAG_HASBLANK) && *plab!=GAL_BLANK_INT32 ) ) { /* For Sky pseudo-detections we'll start to see if it has already been determined that the object lies over a detected object or not. If it does, then just ignore it. */ if(s0d1D2==0) { if( flag[*plab] ) { ++plab; ++dlab; continue; } else if(*dlab) /* We are on a detection. */ { flag[*plab]=1; area[*plab]=0; ++plab; ++dlab; continue; } } /* If we are on a blank pixel, ignore this pixel. */ if( isnan(*f) ) { ++plab; if(s0d1D2==0) ++dlab; continue; } /* Save all the necessary values. */ ++area[*plab]; gal_dimension_index_to_coord(f-fs, ndim, dsize, coord); s = sky[ gal_tile_full_id_from_coord(&p->cp.tl, coord) ]; ss = *f-s; brightness[*plab] += ss; if( ss > 0.0f ) /* For calculatiing the approximate center, */ { /* necessary for calculating Sky and STD. */ pos[ *plab*pcols ] += ss; pos[ *plab*pcols+1 ] += (double)coord[0] * ss; pos[ *plab*pcols+2 ] += (double)coord[1] * ss; if(ndim==3) pos[*plab*pcols+3 ] += (double)coord[2] * ss; } } /* Increment the other two labels. */ ++plab; if(s0d1D2==0) ++dlab; } while(++fdetectionname) { if(s0d1D2<2) { plabend = (plab=worklab->array) + worklab->size; do if( *plab!=GAL_BLANK_INT32 && ( area[*plab]snminarea || brightness[*plab]<0) ) *plab=0; while(++plabname=extname; gal_fits_img_write(worklab, p->detectionname, NULL, 0); worklab->name=NULL; } /* Calculate the signal to noise for successful detections: */ snarr=sn->array; if(snind) indarr=snind->array; if(s0d1D2) { snarr[0]=NAN; if(snind) indarr[0]=GAL_BLANK_INT32; } for(i=1;i=p->snminarea && ave>0.0f && pos[i*pcols]>0.0f ) { /* Get the flux weighted center coordinates. */ for(j=0;jstd->array))[ gal_tile_full_id_from_coord(&p->cp.tl, coord) ]; /* Correct the index in the sn to store the Signal to noise ratio. When we are dealing with the noise, we only want the non-zero signal to noise values, so we will just use a counter. But for initial detections, it is very important that their Signal to noise ratio be placed in the same index as their label. */ ind = s0d1D2 ? i : counter++; if(snind) indarr[ind]=i; snarr[ind] = ( sqrt( (float)(area[i])/p->cpscorr ) * ave / sqrt( ave + err*err ) ); } else /* In detection pseudo-detections, order matters, so we will set all non-usable values to blank. */ if(s0d1D2) { snarr[i]=NAN; if(snind) indarr[i]=GAL_BLANK_INT32;; } } /* A small sanity check. */ if( s0d1D2==0 && counter==0 ) error(EXIT_FAILURE, 0, "no sky pseudo-detections."); /* If we are in Sky mode, the sizes have to be corrected */ if(s0d1D2==0) { sn->dsize[0]=sn->size=counter; if(snind) snind->dsize[0]=snind->size=counter; } /* If the user wanted a list of S/N values for all pseudo-detections, save it. */ if(snind) detection_sn_write_to_file(p, sn, snind, s0d1D2); /* Clean up and return. */ free(pos); free(area); free(coord); free(brightness); if(flag) free(flag); if(snind) gal_data_free(snind); return sn; } /* ONLY FOR PSEUDO DETECTIONS: remove pseudo-detections that have a small S/N from the binary image (the labeled image will be left untouched). */ static void detection_pseudo_remove_low_sn(struct noisechiselparams *p, gal_data_t *workbin, gal_data_t *worklab, gal_data_t *sn) { size_t i; float *snarr=sn->array; uint8_t *b=workbin->array; int32_t *l=worklab->array, *lf=l+worklab->size; uint8_t *keep=gal_pointer_allocate(GAL_TYPE_UINT8, sn->size, 1, __func__, "keep"); /* Specify the new labels for those that must be kept/changed. Note that when an object didn't have an S/N, its S/N was given a value of NaN (which will fail on any condition), so it acts as if it had an S/N lower than the required value. */ for(i=0;isize;++i) if( snarr[i] > p->detsnthresh ) keep[i]=1; /* Go over the pseudo-detection labels and only keep those that must be kept (using the new labels) in the binary array. */ if( p->input->flag & GAL_DATA_FLAG_HASBLANK ) do *b++ = *l == GAL_BLANK_INT32 ? GAL_BLANK_UINT8 : keep[ *l ] > 0; while(++l 0; while(++ldetectionname) { workbin->name="TRUE-PSEUDOS"; gal_fits_img_write(workbin, p->detectionname, NULL, 0); workbin->name=NULL; } /* Clean up: */ free(keep); } /* Find and do the necessary work on pseudo-detections. */ static gal_data_t * detection_pseudo_real(struct noisechiselparams *p) { char *msg; size_t numpseudo; struct timeval t1; gal_data_t *sn, *quant, *workbin, *worklab; /* Allocate the space for the working datasets. */ worklab=gal_data_copy(p->olabel); workbin=gal_data_alloc(NULL, GAL_TYPE_UINT8, p->input->ndim, p->input->dsize, p->input->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); workbin->flag=p->input->flag; /* If a manual S/N is given, then don't bother with using pseudo-detections. */ if( isnan(p->snthresh) ) { /* Over the Sky: find the pseudo-detections and make the S/N table. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); numpseudo=detection_pseudo_find(p, workbin, worklab, 0); sn=detection_sn(p, worklab, numpseudo, 0, "PSEUDOS-FOR-SN"); /* A small sanity check */ if( sn->size < p->minnumfalse) error(EXIT_FAILURE, 0, "only %zu pseudo-detections could be found " "over the sky region to estimate an S/N. This is less than " "%zu (value to '--minnumfalse' option). Please adjust " "parameters like '--dthresh', '--snminarea', or make sure " "that there actually is sufficient sky area after initial " "detection. You can use '--checkdetection' to see every step " "until this point", sn->size, p->minnumfalse); /* Get the S/N quantile and report it if we are in non-quiet mode. */ quant=gal_statistics_quantile(sn, p->snquant, 1); p->detsnthresh = *((float *)(quant->array)); if(!p->cp.quiet) { if( asprintf(&msg, "Pseudo-det S/N: %.3f (%g quant of %zu).", p->detsnthresh, p->snquant, sn->size)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(&t1, msg, 2); free(msg); } gal_data_free(sn); gal_data_free(quant); } else p->detsnthresh=p->snthresh; /* Over the detections: find pseudo-detections and make S/N table. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); numpseudo=detection_pseudo_find(p, workbin, worklab, 1); sn=detection_sn(p, worklab, numpseudo, 1, "PSEUDOS-FOR-SN"); /* Remove the pseudo detections with a low S/N. */ detection_pseudo_remove_low_sn(p, workbin, worklab, sn); /* Clean up and return. */ gal_data_free(sn); gal_data_free(worklab); return workbin; } /* This is for the final detections (grown) detections. */ static size_t detection_final_remove_small_sn(struct noisechiselparams *p, gal_data_t *workbin, size_t num) { size_t i; int8_t *b; float *snarr; gal_data_t *sn; int32_t *l, *lf, curlab=1; int32_t *newlabs=gal_pointer_allocate(GAL_TYPE_INT32, num+1, 1, __func__, "newlabs"); /* Get the Signal to noise ratio of all detections. */ sn=detection_sn(p, p->olabel, num, 2, "DILATED"); /* Only keep the objects with an S/N above the pseudo-detection limit. */ snarr=sn->array; for(i=1;i p->detsnthresh ? curlab++ : 0; /* Go over the labeled image and correct the labels. */ b=workbin->array; lf=(l=p->olabel->array)+p->olabel->size; if( p->input->flag & GAL_DATA_FLAG_HASBLANK ) { do { if( *l != GAL_BLANK_INT32 ) *b = (*l=newlabs[ *l ]) > 0; ++b; } while(++l 0; while(++larray; float *e_th, *arr=p->conv->array; int32_t *l=p->olabel->array, *lf=l+p->olabel->size, curlab=1; int32_t *newlabels=gal_pointer_allocate(GAL_TYPE_UINT32, p->numinitialdets+1, 1, __func__, "newlabels"); /* Find the new labels for all the existing labels. Recall that 'newlabels' was initialized to zero, so any label that is not given a new label here will be automatically removed. After the first pixel of a label overlaps with dbyt[i], we don't need to check the rest of that object's pixels. At this point, tokeep is only binary: 0 or 1. Note that the zeroth element of 'tokeep' can also be non zero, this is because the holes of the labeled regions might be filled during filling the holes, but have not been filled in the original labeled array. They are not important so you can just ignore them. */ do { if( *l && *l!=GAL_BLANK_INT32 ) { newlabels[ *l ] = newlabels[ *l ] /* Have we already checked this label? */ ? 1 /* Yes we have. Just set it to 1. */ : *b; /* No we haven't, check pseudo-detection. */ } ++b; } while(++lnuminitialdets;++i) if(newlabels[i]) newlabels[i] = curlab++; /* Replace the byt and olab values with their proper values. Note that we need the binary array when there is no growth also. The binary array is later used in estimating the sky and its STD. See if growth is necessary or not. Note that even if the user has asked for growth, if the edges of the objects in the image are sharp enough, no growth will be necessary (and thus the labeled image won't be re-written during growth). So it is necessary to check for growth here and later do it in 'detection_quantile_expand'. */ p->numexpand=0; b=workbin->array; l=p->olabel->array; if(p->detgrowquant==1.0) do { /* No growth will happen. */ if(*l!=GAL_BLANK_INT32) /* So set both the binary */ *b = ( *l = newlabels[ *l ] ) > 0; /* AND label images. */ ++b; } while(++lexp_thresh_full=gal_tile_block_write_const_value(p->expand_thresh, p->cp.tl.tiles, 0, 0); /* Remove the false detections and count how many pixels need to grow. */ e_th=p->exp_thresh_full->array; do /* Growth is necessary later. */ { /* So there is no need to set */ if(*l==GAL_BLANK_INT32) /* the labels image, but we */ *b=GAL_BLANK_UINT8; /* have to count the number of */ else /* pixels to (possibly) grow. */ { *b = newlabels[ *l ] > 0; if( *b==0 && *arr>*e_th ) ++p->numexpand; } ++b; ++arr; ++e_th; } while(++lnumexpand==0) { l=p->olabel->array; do if(*l!=GAL_BLANK_INT32) *l = newlabels[ *l ]; while(++lconv->array; uint8_t *b=workbin->array, *bf=b+workbin->size; /* Only continue if there actually are any pixels to expand (this can happen!). */ if(p->numexpand) { /* Allocate the space necessary to keep the index of all the pixels that must be expanded and re-initialize the necessary pointers. */ diffuseindexs=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, &p->numexpand, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Fill in the diffuse indexs and initialize the objects dataset. */ b = workbin->array; arr = p->conv->array; d = diffuseindexs->array; e_th = p->exp_thresh_full->array; of = (o=p->olabel->array) + p->olabel->size; do { /* If the binary value is 1, then we want an initial label of 1 (the object is already detected). If it isn't, then we only want it if it is above the threshold. */ *o = *b==1 ? 1 : ( *arr>*e_th ? GAL_LABEL_INIT : 0); if(*b==0 && *arr>*e_th) *d++ = o - (int32_t *)(p->olabel->array); /* Increment the points and go onto the next pixel. */ ++b; ++arr; ++e_th; } while(++oolabel, diffuseindexs, 0, p->olabel->ndim); /* Only keep the 1 valued pixels in the binary array and fill its holes. */ o=p->olabel->array; bf=(b=workbin->array)+workbin->size; do *b = (*o++ == 1); while(++bdetgrowmaxholesize); /* Get the labeled image. */ numexpanded=gal_binary_connected_components(workbin, &p->olabel, workbin->ndim); /* Set all the input's blank pixels to blank in the labeled and binary arrays. */ if( gal_blank_present(p->input, 1) ) { b=workbin->array; i=p->input->array; of=(o=p->olabel->array)+p->olabel->size; do { if(isnan(*i++)) { *o=GAL_BLANK_INT32; *b=GAL_BLANK_UINT8; } ++b; } while(++oexpand_thresh); gal_data_free(p->exp_thresh_full); return numexpanded ? numexpanded : GAL_BLANK_SIZE_T; } /* The initial detection has been done, now we want to remove false detections. */ void detection(struct noisechiselparams *p) { char *msg; gal_data_t *workbin; struct timeval t0, t1; size_t num_true_initial, num_expanded; /* Report for the user. */ if(!p->cp.quiet) { gal_timing_report(NULL, "Starting to find/remove false detections.", 1); gettimeofday(&t0, NULL); } /* Find the Sky and its Standard Deviation from the initial detectios. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); sky_and_std(p, p->detskyname); if(!p->cp.quiet) gal_timing_report(&t1, "Initial (crude) Sky and its STD found.", 2); /* Apply the sky threshold. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); threshold_apply(p, p->sky->array, p->std->array, THRESHOLD_SKY_STD); if(!p->cp.quiet) { if( asprintf(&msg, "Pseudo-detection thresh (%.3f sigma) applied.", p->dthresh)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(&t1, msg, 2); free(msg); } /* Find the real pseudo-detections. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); workbin=detection_pseudo_real(p); /* Only keep the initial detections that overlap with the real pseudo-detections. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); num_true_initial=detection_remove_false_initial(p, workbin); if(p->detectionname) { workbin->name="DETECTIONS-INIT-TRUE"; gal_fits_img_write(workbin, p->detectionname, NULL, 0); workbin->name=NULL; } if(!p->cp.quiet) { if( asprintf(&msg, "%zu false initial detections removed.", p->numinitialdets - num_true_initial)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(&t1, msg, 2); free(msg); } /* If the user asked for dilation/expansion, then apply it and report the final number of detections. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); if(p->detgrowquant!=1.0f) { /* Grow the detections and report the number of expanded (if necessary). */ num_expanded=detection_quantile_expand(p, workbin); if(num_expanded!=GAL_BLANK_SIZE_T) { /* Set the number of expanded objects. */ num_true_initial=num_expanded; /* If not in quiet-mode, let the user know how its going. */ if(!p->cp.quiet) { /* If the user hasn't asked for a labeled image, then don't confuse them with the number of detections, just let them know that growth is complete. */ if(p->label) { if( asprintf(&msg, "%zu detections after growth to %.3f " "quantile.", num_true_initial, p->detgrowquant)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&msg, "Growth to %.3f quantile complete.", p->detgrowquant)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } gal_timing_report(&t1, msg, 2); free(msg); } } } /* When the final (grown or over-all object) detection's S/N is less than the pseudo-detection's S/N limit, the object is false. For a real detection, the actual object S/N should be higher than any of its pseudo-detection because it has a much larger area (and possibly more flux under it). So when the final S/N is smaller than the minimum acceptable S/N threshold, we have a false pseudo-detection. */ p->numdetections = ( p->cleangrowndet ? detection_final_remove_small_sn(p, workbin, num_true_initial) : num_true_initial ); if(!p->cp.quiet) { /* If the user hasn't asked for a labeled image, then don't confuse them with the number of detections, just let them know that growth is complete. */ if(p->label) { if( asprintf(&msg, "%zu final true detections.", p->numdetections)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else gal_checkset_allocate_copy("Detection complete.", &msg); gal_timing_report(&t0, msg, 1); free(msg); } if(p->detectionname) { p->olabel->name="DETECTION-FINAL"; gal_fits_img_write(p->olabel, p->detectionname, NULL, 0); p->olabel->name=NULL; } /* p->binary was used to keep the initial pseudo-detection threshold. But we don't need it any more, so we'll just free it and put the 'workbin' array in its place. Note that 'workbin' has a map of all the detected objects, which is still necessary during NoiseChisel. */ gal_data_free(p->binary); p->binary=workbin; /* The initial Sky and Sky STD values were only for detection. */ gal_data_free(p->sky); gal_data_free(p->std); p->sky = p->std = NULL; /* If the user wanted to check the threshold and hasn't called 'continueaftercheck', then stop NoiseChisel. */ if(p->detectionname && !p->continueaftercheck) ui_abort_after_check(p, p->detectionname, NULL, "showing all detection steps"); } gnuastro-0.22/bin/noisechisel/noisechisel.c0000644000175000017500000001650414553743675014537 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "sky.h" #include "detection.h" #include "threshold.h" /***********************************************************************/ /************* Wrapper functions (for clean high-level) ***************/ /***********************************************************************/ static void noisechisel_convolve(struct noisechiselparams *p) { struct timeval t1; struct gal_tile_two_layer_params *tl=&p->cp.tl; /* Convovle with sharper kernel. */ if(p->conv==NULL) { /* Do the convolution if a kernel was requested. */ if(p->kernel) { /* Make the convolved image. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); p->conv = gal_convolve_spatial(tl->tiles, p->kernel, p->cp.numthreads, 1, tl->workoverch, 0); /* Report and write check images if necessary. */ if(!p->cp.quiet) { if(p->widekernel) gal_timing_report(&t1, "Convolved with sharper kernel.", 1); else gal_timing_report(&t1, "Convolved with given kernel.", 1); } } else p->conv=p->input; } /* Set a fixed name for the convolved image (since it will be used in many check images). */ if(p->conv!=p->input) { if(p->conv->name) free(p->conv->name); gal_checkset_allocate_copy( ( p->widekernel ? "CONVOLVED-SHARPER" : "CONVOLVED" ), &p->conv->name); } /* Save the convolution step if necessary. */ if(p->detectionname) { gal_fits_img_write(p->input, p->detectionname, NULL, 0); if(p->input!=p->conv) gal_fits_img_write(p->conv, p->detectionname, NULL, 0); } /* Convolve with wider kernel (if requested). */ if(p->widekernel) { if(!p->cp.quiet) gettimeofday(&t1, NULL); p->wconv=gal_convolve_spatial(tl->tiles, p->widekernel, p->cp.numthreads, 1, tl->workoverch, 0); gal_checkset_allocate_copy("CONVOLVED-WIDER", &p->wconv->name); if(!p->cp.quiet) gal_timing_report(&t1, "Convolved with wider kernel.", 1); } } /***********************************************************************/ /************* Output ***************/ /***********************************************************************/ /* Write the output file. */ static void noisechisel_output(struct noisechiselparams *p) { gal_fits_list_key_t *keys=NULL; /* Write the configuration keywords. */ gal_fits_key_list_title_add_end(&p->cp.ckeys, "Input file", 0); gal_fits_key_write_filename("input", p->inputname, &p->cp.ckeys, 0, p->cp.quiet); gal_fits_key_write(p->cp.ckeys, p->cp.output, "0", "NONE", 1, 1); /* Put a copy of the input into the output (when necessary). */ if(p->rawoutput==0) { /* Subtract the Sky value. */ sky_subtract(p); /* Correct the name of the input and write it out. */ if(p->input->name) free(p->input->name); p->input->name="INPUT-NO-SKY"; gal_fits_img_write(p->input, p->cp.output, NULL, 0); p->input->name=NULL; } /* Write the detected pixels and useful information into it's header. */ gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "DETSN", 0, &p->detsnthresh, 0, "Minimum S/N of true pseudo-detections", 0, "ratio", 0); if(p->label) gal_fits_key_list_add(&keys, GAL_TYPE_SIZE_T, "NUMLABS", 0, &p->numdetections, 0, "Total number of labels " "(inclusive)", 0, "counter", 0); gal_fits_key_list_reverse(&keys); if(p->label) { p->olabel->name = "DETECTIONS"; gal_fits_img_write(p->olabel, p->cp.output, keys, 1); p->olabel->name=NULL; } else { p->binary->name = "DETECTIONS"; gal_fits_img_write(p->binary, p->cp.output, keys, 1); p->binary->name=NULL; } keys=NULL; /* Write the Sky image into the output */ if(p->sky->name) free(p->sky->name); p->sky->name="SKY"; gal_tile_full_values_write(p->sky, &p->cp.tl, !p->ignoreblankintiles, p->cp.output, NULL, 0); p->sky->name=NULL; /* Write the Sky standard deviation into the output. */ p->std->name="SKY_STD"; gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "MAXSTD", 0, &p->maxstd, 0, "Maximum raw tile standard deviation", 0, p->input->unit, 0); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "MINSTD", 0, &p->minstd, 0, "Minimum raw tile standard deviation", 0, p->input->unit, 0); gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "MEDSTD", 0, &p->medstd, 0, "Median raw tile standard deviation", 0, p->input->unit, 0); gal_tile_full_values_write(p->std, &p->cp.tl, !p->ignoreblankintiles, p->cp.output, keys, 1); p->std->name=NULL; /* Let the user know that the output is written. */ if(!p->cp.quiet) printf(" - Output written to '%s'.\n", p->cp.output); } /***********************************************************************/ /************* Top-level function ***************/ /***********************************************************************/ void noisechisel(struct noisechiselparams *p) { /* Convolve the image. */ noisechisel_convolve(p); /* Do the initial detection. */ detection_initial(p); /* Remove false detections. */ detection(p); /* Find the final Sky and Sky STD values. */ sky_and_std(p, p->skyname); /* Abort if the user only wanted to see until this point.*/ if(p->skyname && !p->continueaftercheck) ui_abort_after_check(p, p->skyname, NULL, "derivation of final Sky (and its STD) value"); /* Write the output. */ noisechisel_output(p); } gnuastro-0.22/bin/noisechisel/sky.c0000644000175000017500000002532514551337306013025 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "threshold.h" /**************************************************************** ************ Estimate the Sky ************ ****************************************************************/ static void * sky_mean_std_undetected(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct noisechiselparams *p=(struct noisechiselparams *)tprm->params; int setblank, type=GAL_TYPE_FLOAT32; uint8_t *noskytiles=p->noskytiles->array; size_t i, tind, numsky, bdsize=2, ndim=p->sky->ndim; gal_data_t *tile, *fusage, *busage, *bintile, *clip; size_t refarea, twidth=gal_type_sizeof(GAL_TYPE_FLOAT32); uint8_t mclipflags = ( GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN | GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD ); /* Put the temporary usage space for this thread into a data set for easy processing. */ fusage=gal_data_alloc(NULL, type, ndim, p->maxtsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); busage=gal_data_alloc(NULL, GAL_TYPE_UINT8, ndim, p->maxtsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* An empty dataset to replicate a tile on the binary array. */ bintile=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &bdsize, NULL, 0, -1, 1, NULL, NULL, NULL); bintile->ndim=ndim; free(bintile->array); free(bintile->dsize); bintile->block=p->binary; /* Go over all the tiles given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Basic definitions */ numsky=0; tind = tprm->indexs[i]; tile = &p->cp.tl.tiles[tind]; refarea = p->skyfracnoblank ? 0 : tile->size; /* If this tile is already known to have signal in it (from the 'qthresh' phase) it will have a value of '1' in the 'noskytiles' array and should be set to blank here too. */ setblank=noskytiles[tind]; if(setblank==0) { /* Correct the fake binary tile's properties to be the same as this one, then count the number of zero valued elements in it. Note that the 'CHECK_BLANK' flag of 'GAL_TILE_PARSE_OPERATE' is set to 1. So blank values in the input array are not counted. */ bintile->size=tile->size; bintile->dsize=tile->dsize; bintile->array=gal_tile_block_relative_to_other(tile, p->binary); GAL_TILE_PARSE_OPERATE(tile, bintile, 1, 1, { if(p->skyfracnoblank) ++refarea; if(!*o) ++numsky; }); /* Only continue, if the fraction of Sky values is less than the requested fraction. */ if( (float)(numsky)/(float)(refarea) > p->minskyfrac) { /* Re-initialize the usage array's size information (will be corrected to this tile's size by 'gal_data_copy_to_allocated'). */ busage->ndim = fusage->ndim = ndim; busage->size = fusage->size = p->maxtcontig; gal_data_copy_to_allocated(tile, fusage); gal_data_copy_to_allocated(bintile, busage); /* Set all the non-zero pixels in 'busage' to NaN in 'fusage'. */ busage->flag = fusage->flag = 0; gal_blank_flag_apply(fusage, busage); /* Do the MAD-clipping. */ clip=gal_statistics_clip_sigma(fusage, p->sigmaclip[0], p->sigmaclip[1], mclipflags, 1, 1); /* When there are zero-valued pixels on the edges of the dataset (that have not been set to NaN/blank), given special conditions, the whole zero-valued region can get a binary value of 1 and so the Sky and its standard deviation can become zero. So, we need ignore such tiles. */ if( ((float *)(clip->array))[3]==0.0 ) setblank=1; else { /* Copy the sigma-clipped mean and STD to their respective places in the tile arrays. But first, make sure 'clip' has the same type as the sky and std arrays. */ clip=gal_data_copy_to_new_type_free(clip, type); memcpy(gal_pointer_increment(p->sky->array, tind, type), gal_pointer_increment(clip->array, GAL_STATISTICS_CLIP_OUTCOL_MEAN, type), twidth); memcpy(gal_pointer_increment(p->std->array, tind, type), gal_pointer_increment(clip->array, GAL_STATISTICS_CLIP_OUTCOL_STD, type), twidth); } /* Clean up. */ gal_data_free(clip); } else setblank=1; } /* If the tile is marked to be blank, write blank values into it. */ if(setblank==1) { gal_blank_write(gal_pointer_increment(p->sky->array, tind, type), type); gal_blank_write(gal_pointer_increment(p->std->array, tind, type), type); } } /* Clean up and wait for other threads to finish and abort. */ bintile->array=NULL; bintile->dsize=NULL; gal_data_free(fusage); gal_data_free(busage); gal_data_free(bintile); if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } void sky_and_std(struct noisechiselparams *p, char *checkname) { gal_data_t *tmp; struct gal_options_common_params *cp=&p->cp; struct gal_tile_two_layer_params *tl=&cp->tl; /* When the check image has the same resolution as the input, write the binary array as a reference to help in the comparison. */ if(checkname && !tl->oneelempertile) { p->binary->name="DETECTED"; gal_fits_img_write(p->binary, checkname, NULL, 0); p->binary->name=NULL; } /* Allocate space for the mean and standard deviation. */ p->sky=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, p->input->ndim, tl->numtiles, NULL, 0, cp->minmapsize, p->cp.quietmmap, NULL, p->input->unit, NULL); p->std=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, p->input->ndim, tl->numtiles, NULL, 0, cp->minmapsize, p->cp.quietmmap, NULL, p->input->unit, NULL); /* Find the Sky and its STD on proper tiles. */ gal_threads_spin_off(sky_mean_std_undetected, p, tl->tottiles, cp->numthreads, p->cp.minmapsize, p->cp.quietmmap); if(checkname) { p->sky->name="SKY"; p->std->name="STD"; gal_tile_full_values_write(p->sky, tl, !p->ignoreblankintiles, checkname, NULL, 0); gal_tile_full_values_write(p->std, tl, !p->ignoreblankintiles, checkname, NULL, 0); p->sky->name=p->std->name=NULL; } /* Set the blank-checked bit of the arrays to zero so we are sure to check for blanks. */ p->sky->flag &= ~GAL_DATA_FLAG_BLANK_CH; p->std->flag &= ~GAL_DATA_FLAG_BLANK_CH; /* Basic Sky standard deviation distribution measurements. */ tmp=gal_statistics_median(p->std, 0); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); memcpy(&p->medstd, tmp->array, sizeof p->medstd); gal_data_free(tmp); tmp=gal_statistics_minimum(p->std); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); memcpy(&p->minstd, tmp->array, sizeof p->minstd); gal_data_free(tmp); tmp=gal_statistics_maximum(p->std); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); memcpy(&p->maxstd, tmp->array, sizeof p->maxstd); gal_data_free(tmp); /* In case the image is in electrons or counts per second, the standard deviation of the noise will become smaller than unity, so we need to correct it in the S/N calculation. So, we'll calculate the correction factor here. */ p->cpscorr = p->minstd>1 ? 1.0f : p->minstd; /* Interpolate and smooth the derived values. */ threshold_interp_smooth(p, &p->sky, &p->std, NULL, checkname); /* If a check was requested, abort NoiseChisel. */ if(checkname && !p->continueaftercheck) ui_abort_after_check(p, checkname, NULL, "showing derivation of Sky " "value and its standard deviation, or STD"); } /**************************************************************** ************ Subtract the Sky ************ ****************************************************************/ void sky_subtract(struct noisechiselparams *p) { size_t tid; gal_data_t *tile; float *sky=p->sky->array; /* A small sanity check. */ if(p->sky->type!=GAL_TYPE_FLOAT32) error(EXIT_FAILURE, 0, "%s: only 'float32' type is acceptable " "for sky values. but 'p->sky' has type '%s'", __func__, gal_type_name(p->sky->type, 1)); /* Go over all the tiles. */ for(tid=0; tidcp.tl.tottiles; ++tid) { /* For easy reading. */ tile=&p->cp.tl.tiles[tid]; /* Subtract the Sky value from the input image. */ GAL_TILE_PARSE_OPERATE(tile, NULL, 0, 0, {*i-=sky[tid];}); } } gnuastro-0.22/bin/noisechisel/threshold.c0000644000175000017500000006153714553743675014234 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "threshold.h" /**********************************************************************/ /*************** Apply a given threshold. *****************/ /**********************************************************************/ struct threshold_apply_p { float *value1; float *value2; int kind; struct noisechiselparams *p; }; /* Apply the threshold on the tiles given to this thread. */ static void * threshold_apply_on_thread(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct threshold_apply_p *taprm=(struct threshold_apply_p *)(tprm->params); struct noisechiselparams *p=taprm->p; size_t i, tid; void *tarray=NULL; gal_data_t *tile, *tblock=NULL; float *value1=taprm->value1, *value2=taprm->value2; /* Go over all the tiles assigned to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ tid=tprm->indexs[i]; tile=&p->cp.tl.tiles[tid]; /* Based on the kind of threshold. */ switch(taprm->kind) { /* This is a quantile threshold. */ case THRESHOLD_QUANTILES: /* Correct the tile's pointers to apply the threshold on the convolved image. */ if(p->conv) { tarray=tile->array; tblock=tile->block; tile->array=gal_tile_block_relative_to_other(tile, p->conv); tile->block=p->conv; } /* Apply the threshold: When the '>' comparison fails, it can be either because the pixel was actually smaller than the threshold, or that it was a NaN value. In the first case, return 0, in the second, return a blank value. We already know if a tile contains a blank value (which is a constant over the whole loop). So before checking if the value is blank, see if the tile actually has a blank value. This will help in efficiency, because the compiler can move this check out of the loop and only check for NaN values when we know the tile has blank pixels. */ GAL_TILE_PO_OISET(float, uint8_t, tile, p->binary, 1, 0, { *o = ( *i > value1[tid] ? ( *i > value2[tid] ? THRESHOLD_NO_ERODE_VALUE : 1 ) : ( (tile->flag & GAL_DATA_FLAG_HASBLANK) && !(*i==*i) ? GAL_BLANK_UINT8 : 0 ) ); }); /* Revert the tile's pointers back to what they were. */ if(p->conv) { tile->array=tarray; tile->block=tblock; } break; /* This is a Sky and Sky STD threshold. */ case THRESHOLD_SKY_STD: /* See the explanation above the same step in the quantile threshold for an explanation. */ GAL_TILE_PO_OISET(float, uint8_t, tile, p->binary, 1, 0, { *o = ( ( *i - value1[tid] > p->dthresh * value2[tid] ) ? 1 : ( (tile->flag & GAL_DATA_FLAG_HASBLANK) && !(*i==*i) ? GAL_BLANK_UINT8 : 0 ) ); }); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we " "can address the problem. A value of %d had for " "'taprm->kind' is not valid", __func__, PACKAGE_BUGREPORT, taprm->kind); } } /* Wait until all the other threads finish. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* Apply a given threshold threshold on the tiles. */ void threshold_apply(struct noisechiselparams *p, float *value1, float *value2, int kind) { struct threshold_apply_p taprm={value1, value2, kind, p}; gal_threads_spin_off(threshold_apply_on_thread, &taprm, p->cp.tl.tottiles, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap); } /**********************************************************************/ /*************** Write S/N values *****************/ /**********************************************************************/ void threshold_write_sn_table(struct noisechiselparams *p, gal_data_t *insn, gal_data_t *inind, char *filename, gal_list_str_t *comments, char *extname) { gal_data_t *sn, *ind, *cols; /* Remove all blank elements. The index and sn values must have the same set of blank elements, but checking on the integer array is faster. */ if( gal_blank_present(inind, 1) ) { /* Remove blank elements. */ ind=gal_data_copy(inind); sn=gal_data_copy(insn); gal_blank_remove(ind); gal_blank_remove(sn); } else { sn = insn; ind = inind; } /* Set the columns. */ cols = ind; cols->next = sn; /* Prepare the comments. */ gal_table_comments_add_intro(&comments, PROGRAM_STRING, &p->rawtime); /* Write the table. Note that we'll set the 'dontdelete' argument to 0 because when the output is a FITS table, we want all the tables in one FITS file. We have already deleted any existing file with the same name in 'ui_set_output_names'.*/ gal_table_write(cols, NULL, comments, p->cp.tableformat, filename, extname, 0, 0); /* Clean up (if necessary). */ if(sn!=insn) gal_data_free(sn); if(ind==inind) ind->next=NULL; else gal_data_free(ind); } /**********************************************************************/ /*************** Interpolation and smoothing *****************/ /**********************************************************************/ /* Interpolate and smooth the values for each tile over the whole image. */ void threshold_interp_smooth(struct noisechiselparams *p, gal_data_t **first, gal_data_t **second, gal_data_t **third, char *filename) { gal_data_t *tmp; struct gal_options_common_params *cp=&p->cp; struct gal_tile_two_layer_params *tl=&cp->tl; /* A small sanity check. */ if( (*first)->next ) error(EXIT_FAILURE, 0, "%s: 'first' must not have any 'next' pointer.", __func__); if( (*second)->next ) error(EXIT_FAILURE, 0, "%s: 'second' must not have any 'next' pointer.", __func__); if( third && (*third)->next ) error(EXIT_FAILURE, 0, "%s: 'third' must not have any 'next' pointer.", __func__); /* Do the interpolation of both arrays. */ (*first)->next = *second; if(third) (*second)->next = *third; tmp=gal_interpolate_neighbors(*first, tl, cp->interpmetric, cp->interpnumngb, cp->numthreads, cp->interponlyblank, 1, GAL_INTERPOLATE_NEIGHBORS_FUNC_MEDIAN); gal_data_free(*first); gal_data_free(*second); if(third) gal_data_free(*third); *first=tmp; *second=(*first)->next; if(third) { *third=(*second)->next; (*third)->next=NULL; } (*first)->next=(*second)->next=NULL; if(filename) { (*first)->name="THRESH1_INTERP"; (*second)->name="THRESH2_INTERP"; if(third) (*third)->name="THRESH3_INTERP"; gal_tile_full_values_write(*first, tl, !p->ignoreblankintiles, filename, NULL, 0); gal_tile_full_values_write(*second, tl, !p->ignoreblankintiles, filename, NULL, 0); if(third) gal_tile_full_values_write(*third, tl, !p->ignoreblankintiles, filename, NULL, 0); (*first)->name = (*second)->name = NULL; if(third) (*third)->name=NULL; } /* Smooth the threshold if requested. */ if(p->smoothwidth>1) { /* Smooth the first. */ tmp=gal_tile_full_values_smooth(*first, tl, p->smoothwidth, p->cp.numthreads); gal_data_free(*first); *first=tmp; /* Smooth the second */ tmp=gal_tile_full_values_smooth(*second, tl, p->smoothwidth, p->cp.numthreads); gal_data_free(*second); *second=tmp; /* Smooth the third */ if(third) { tmp=gal_tile_full_values_smooth(*third, tl, p->smoothwidth, p->cp.numthreads); gal_data_free(*third); *third=tmp; } /* Add them to the check image. */ if(filename) { (*first)->name="THRESH1_SMOOTH"; (*second)->name="THRESH2_SMOOTH"; if(third) (*third)->name="THRESH3_SMOOTH"; gal_tile_full_values_write(*first, tl, !p->ignoreblankintiles, filename, NULL, 0); gal_tile_full_values_write(*second, tl, !p->ignoreblankintiles, filename, NULL, 0); if(third) gal_tile_full_values_write(*third, tl, !p->ignoreblankintiles, filename, NULL, 0); (*first)->name = (*second)->name = NULL; if(third) (*third)->name=NULL; } } } /**************************************************************** ************ Quantile threshold ************ ****************************************************************/ struct qthreshparams { gal_data_t *erode_th; gal_data_t *noerode_th; gal_data_t *expand_th; void *usage; struct noisechiselparams *p; }; static void * qthresh_on_tile(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct qthreshparams *qprm=(struct qthreshparams *)tprm->params; struct noisechiselparams *p=qprm->p; void *tarray=NULL; int type=qprm->erode_th->type; gal_data_t *meanconv = p->wconv ? p->wconv : p->conv; size_t i, tind, twidth=gal_type_sizeof(type), ndim=p->input->ndim; gal_data_t *tile, *mean, *num, *meanquant, *qvalue, *usage, *tblock=NULL; /* Put the temporary usage space for this thread into a data set for easy processing. */ usage=gal_data_alloc(gal_pointer_increment(qprm->usage, tprm->id*p->maxtcontig, type), type, ndim, p->maxtsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Go over all the tiles given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Re-initialize the usage array's space (will be changed in 'gal_data_copy_to_allocated' for each tile). */ usage->ndim=ndim; usage->size=p->maxtcontig; memcpy(usage->dsize, p->maxtsize, ndim*sizeof *p->maxtsize); /* For easy reading. */ tind = tprm->indexs[i]; tile = &p->cp.tl.tiles[tind]; /* Temporarily change the tile's pointers so we can do the work on the convolved image, then copy the desired contents into the already allocated 'usage' array. */ tarray=tile->array; tblock=tile->block; tile->array=gal_tile_block_relative_to_other(tile, meanconv); tile->block=meanconv; gal_data_copy_to_allocated(tile, usage); tile->array=tarray; tile->block=tblock; /* Find the mean's quantile on this tile, note that we have already copied the tile's dataset to a newly allocated place. So we have set the 'inplace' flag to '1' to avoid extra allocation. */ mean=gal_statistics_mean(usage); num=gal_statistics_number(usage); mean=gal_data_copy_to_new_type_free(mean, usage->type); meanquant = ( *(size_t *)(num->array) ? gal_statistics_quantile_function(usage, mean, 1) : NULL ); /* Only continue if the mean's quantile is close enough to the median. */ if( meanquant && fabs( *(double *)(meanquant->array)-0.5f) < p->meanmedqdiff ) { /* The mean was found on the wider convolved image, but the qthresh values have to be found on the sharper convolved images. This is because the distribution becomes more skewed with a wider kernel, helping us find tiles with no data more easily. But for the quantile threshold, we want to use the sharper convolved image to loose less of the spatial information. */ if(meanconv!=p->conv) { tarray=tile->array; tblock=tile->block; tile->array=gal_tile_block_relative_to_other(tile, p->conv); tile->block=p->conv; usage->ndim=ndim; /* Since usage was modified in */ usage->size=p->maxtcontig; /* place, it needs to be */ gal_data_copy_to_allocated(tile, usage);/* re-initialized. */ tile->array=tarray; tile->block=tblock; } /* Get the erosion quantile for this tile and save it. Note that the type of 'qvalue' is the same as the input dataset. */ qvalue=gal_statistics_quantile(usage, p->qthresh, 1); memcpy(gal_pointer_increment(qprm->erode_th->array, tind, type), qvalue->array, twidth); gal_data_free(qvalue); /* Same for the no-erode quantile. */ qvalue=gal_statistics_quantile(usage, p->noerodequant, 1); memcpy(gal_pointer_increment(qprm->noerode_th->array, tind, type), qvalue->array, twidth); gal_data_free(qvalue); /* Same for the expansion quantile. */ if(qprm->expand_th) { qvalue=gal_statistics_quantile(usage, p->detgrowquant, 1); memcpy(gal_pointer_increment(qprm->expand_th->array, tind, type), qvalue->array, twidth); gal_data_free(qvalue); } } else { gal_blank_write(gal_pointer_increment(qprm->erode_th->array, tind, type), type); gal_blank_write(gal_pointer_increment(qprm->noerode_th->array, tind, type), type); if(qprm->expand_th) gal_blank_write(gal_pointer_increment(qprm->expand_th->array, tind, type), type); } /* Clean up and fix the tile's pointers. */ gal_data_free(num); gal_data_free(mean); gal_data_free(meanquant); } /* Clean up and wait for the other threads to finish, then return. */ usage->array=NULL; /* Not allocated here. */ gal_data_free(usage); if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } static void threshold_good_error(size_t number, int before0_after1, size_t interpnumngb) { before0_after1=1; /* Set the differing strings. */ char *in1 = ( before0_after1 ? "after removing outliers" : "for defining a quantile threshold" ); char *in2 = ( before0_after1 ? "" : "NOTE that this is happening *BEFORE* outlier rejection " "(where the number may decrease even further)."); char *in3 = ( before0_after1 ? "\n" " - (slightly) Decrease '--outliernumngb' to use less " "tiles to find outliers.\n" " - (slightly) Increase '--outliersclip' to reject less " "as outliers.\n" " - (slightly) Increase '--outliersigma' to reject less " "as outliers.\n" : "\n"); /* Print the error message and abort. */ error(EXIT_FAILURE, 0, "%zu tiles usable %s!\n\n" "This is smaller than the requested minimum value of %zu (value to " "the '--interpnumngb' option). %s\n\n" "There are several ways to address the problem. The best and most " "highly recommended is to use a larger input if possible (when the " "input is a crop from a larger dataset). If this is not the case, " "or it doesn't solve the problem, you need to loosen the " "parameters mentioned below in the respective order (and therefore " "cause scatter/inaccuracy in the final result). Hence its best to " "not loosen them too much (recall that you can see all the option " "values to Gnuastro's programs by appending '-P' to the end of your " "command).\n" " - (slightly) Decrease '--tilesize' so your tile-grid has more " "tiles.\n" " - (slightly) Increase '--meanmedqdiff' to accept more tiles.%s" " - (slightly) Decrease '--interpnumngb' to be less than %zu.\n\n" "---- Tip ----\n" "Append your command with '--checkqthresh' to see the " "successful tiles in relation with this dataset's contents " "before this crash. A visual inspection will greatly help in " "finding the cause/solution for this particular dataset (note " "that the output of '--checkqthresh' is a multi-extension FITS " "file).\n\n" "To better understand this important step, please run the " "following command (press 'SPACE'/arrow-keys to navigate and " "'Q' to return back to the command-line):\n\n" " $ info gnuastro \"Quantifying signal in a tile\"\n", number, in1, interpnumngb, in2, in3, number); } void threshold_quantile_find_apply(struct noisechiselparams *p) { char *msg; size_t nval; gal_data_t *num; struct timeval t1; struct qthreshparams qprm; struct gal_options_common_params *cp=&p->cp; struct gal_tile_two_layer_params *tl=&cp->tl; /* Get the starting time if necessary. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); /* Add image to check image if requested. If the user has asked for 'oneelempertile', then the size of values is not going to be the same as the input, making it hard to inspect visually. So we'll only put the full input when 'oneelempertile' isn't requested. */ if(p->qthreshname && !tl->oneelempertile) { gal_fits_img_write(p->conv ? p->conv : p->input, p->qthreshname, NULL, 0); if(p->wconv) gal_fits_img_write(p->wconv ? p->wconv : p->input, p->qthreshname, NULL, 0); } /* Allocate space for the quantile threshold values. */ qprm.erode_th=gal_data_alloc(NULL, p->input->type, p->input->ndim, tl->numtiles, NULL, 0, cp->minmapsize, p->cp.quietmmap, NULL, p->input->unit, NULL); qprm.noerode_th=gal_data_alloc(NULL, p->input->type, p->input->ndim, tl->numtiles, NULL, 0, cp->minmapsize, p->cp.quietmmap, NULL, p->input->unit, NULL); qprm.expand_th = ( p->detgrowquant!=1.0f ? gal_data_alloc(NULL, p->input->type, p->input->ndim, tl->numtiles, NULL, 0, cp->minmapsize, p->cp.quietmmap, NULL, p->input->unit, NULL) : NULL ); /* Allocate temporary space for processing in each tile. */ qprm.usage=gal_pointer_allocate(p->input->type, cp->numthreads * p->maxtcontig, 0, __func__, "qprm.usage"); /* Find the threshold on each tile, free the temporary processing space and set the blank flag on both. Since they have the same blank elements, it is only necessary to check one (with the 'updateflag' value set to 1), then update the next. */ qprm.p=p; gal_threads_spin_off(qthresh_on_tile, &qprm, tl->tottiles, cp->numthreads, cp->minmapsize, cp->quietmmap); free(qprm.usage); if( gal_blank_present(qprm.erode_th, 1) ) { qprm.noerode_th->flag |= GAL_DATA_FLAG_HASBLANK; if(qprm.expand_th) qprm.expand_th->flag |= GAL_DATA_FLAG_HASBLANK; } qprm.noerode_th->flag |= GAL_DATA_FLAG_BLANK_CH; if(qprm.expand_th) qprm.expand_th->flag |= GAL_DATA_FLAG_BLANK_CH; if(p->qthreshname) { qprm.erode_th->name="QTHRESH_ERODE"; qprm.noerode_th->name="QTHRESH_NOERODE"; gal_tile_full_values_write(qprm.erode_th, tl, !p->ignoreblankintiles, p->qthreshname, NULL, 0); gal_tile_full_values_write(qprm.noerode_th, tl, !p->ignoreblankintiles, p->qthreshname, NULL, 0); qprm.erode_th->name=qprm.noerode_th->name=NULL; if(qprm.expand_th) { qprm.expand_th->name="QTHRESH_EXPAND"; gal_tile_full_values_write(qprm.expand_th, tl, !p->ignoreblankintiles, p->qthreshname, NULL, 0); qprm.expand_th->name=NULL; } } /* Remove the outliers. */ if(p->outliernumngb) gal_tileinternal_no_outlier_local(qprm.erode_th, qprm.noerode_th, qprm.expand_th, &cp->tl, cp->interpmetric, p->outliernumngb, cp->numthreads, p->outliersclip, p->outliersigma, p->qthreshname, "--outliernumngb"); /* Use the no-outlier grid as a basis for later estimating the sky. To see this array on the image, use 'gal_tile_full_values_write'. */ p->noskytiles=gal_blank_flag(qprm.erode_th); /* For a check: gal_tile_full_values_write(p->noskytiles, &cp->tl, 1, "noskytiles.fits", NULL, NULL); */ /* Check if the number of acceptable tiles is more than the minimum interpolated number. Since this is a common problem for users, it is much more useful to do the check here rather than printing multiple errors in parallel. */ num=gal_statistics_number(qprm.erode_th); nval=((size_t *)(num->array))[0]; if( nval < cp->interpnumngb ) threshold_good_error(nval, 1, cp->interpnumngb); gal_data_free(num); /* Interpolate and smooth the derived values. */ threshold_interp_smooth(p, &qprm.erode_th, &qprm.noerode_th, qprm.expand_th ? &qprm.expand_th : NULL, p->qthreshname); /* We now have a threshold for all tiles, apply it. */ threshold_apply(p, qprm.erode_th->array, qprm.noerode_th->array, THRESHOLD_QUANTILES); /* Write the binary image if check is requested. */ if(p->qthreshname && !tl->oneelempertile) { p->binary->name="QTHRESH-APPLIED"; gal_fits_img_write(p->binary, p->qthreshname, NULL, 0); p->binary->name=NULL; } /* Set the expansion quantile if necessary. */ p->expand_thresh = qprm.expand_th ? qprm.expand_th : NULL; /* Clean up and report duration if necessary. */ gal_data_free(qprm.erode_th); gal_data_free(qprm.noerode_th); if(!p->cp.quiet) { if( asprintf(&msg, "%.2f & %0.2f quantile thresholds applied.", p->qthresh, p->noerodequant)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(&t1, msg, 2); free(msg); } /* If the user wanted to check the threshold and hasn't called 'continueaftercheck', then stop NoiseChisel. */ if(p->qthreshname && !p->continueaftercheck) ui_abort_after_check(p, p->qthreshname, NULL, "quantile threshold check"); } gnuastro-0.22/bin/noisechisel/main.h0000644000175000017500000001641114551337306013144 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include #include /* Progarm names. */ #define PROGRAM_NAME "NoiseChisel" /* Program full name. */ #define PROGRAM_EXEC "astnoisechisel" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Main program parameters structure */ struct noisechiselparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ struct gal_tile_two_layer_params ltl;/* Large tessellation. */ char *inputname; /* Input filename. */ char *kernelname; /* Input kernel filename. */ char *khdu; /* Kernel HDU. */ char *convolvedname; /* Convolved image (to avoid convolution).*/ char *chdu; /* HDU of convolved image. */ char *widekernelname; /* Name of wider kernel to be used. */ char *whdu; /* Wide kernel HDU. */ uint8_t continueaftercheck; /* Don't abort after the check steps. */ uint8_t ignoreblankintiles; /* Ignore input's blank values. */ uint8_t rawoutput; /* Only detection & 1 elem/tile output. */ uint8_t label; /* Label detections that are connected. */ float meanmedqdiff; /* Difference between mode and median. */ float qthresh; /* Quantile threshold on convolved image. */ size_t outliernumngb; /* Number of neighbors to define outliers.*/ float outliersigma; /* Multiple of sigma to define outlier. */ double outliersclip[2]; /* Outlier Sigma-clipping params. */ size_t smoothwidth; /* Interpolation: flat kernel to smooth. */ uint8_t checkqthresh; /* Save the quantile threhsold steps. */ uint8_t blankasforeground; /* Blank as foreg. in erosion and opening.*/ size_t erode; /* Number of erosions after thresholding. */ size_t erodengb; /* Connectivity for erosion. */ float noerodequant; /* Quantile for no erosion. */ size_t opening; /* Depth of opening after erosion. */ size_t openingngb; /* Connectivity to use for opening. */ uint8_t skyfracnoblank; /* No blanks in estimating non-det frac. */ float minskyfrac; /* Undetected area min. frac. in tile. */ double sigmaclip[2]; /* Sigma-clipping parameters. */ uint8_t checkdetsky; /* Check pseudo-detection sky value. */ float dthresh; /* Sigma threshold for Pseudo-detections. */ size_t dopening; /* Depth of opening after dthresh. */ size_t dopeningngb; /* Connectivity for opening after dthresh.*/ size_t holengb; /* Connectivity for defining a hole. */ size_t pseudoconcomp; /* Connectivity for connected components. */ size_t snminarea; /* Minimum pseudo-detection area for S/N. */ uint8_t checksn; /* Save pseudo-detection S/N values. */ size_t minnumfalse; /* Min No. of det/seg for true quantile. */ float snquant; /* True detection quantile. */ float snthresh; /* Manually input S/N value. */ float detgrowquant; /* Quantile to grow true detections. */ size_t detgrowmaxholesize; /* Max. size of holes to fill in growth. */ uint8_t cleangrowndet; /* Remove grown objects with small S/N. */ uint8_t checkdetection; /* Save all detection steps to a file. */ uint8_t checksky; /* Check the Sky value estimation. */ /* Internal. */ char *qthreshname; /* Name of Quantile threshold check image.*/ char *detskyname; /* Name of Initial det sky check image. */ char *detsn_s_name; /* Sky pseudo-detections S/N name. */ char *detsn_d_name; /* Detection pseudo-detections S/N name. */ char *detsn_D_name; /* Final detection S/N name. */ char *detectionname; /* Name of detection steps file. */ char *skyname; /* Name of Sky estimation steps file. */ gal_data_t *input; /* Input image. */ gal_data_t *kernel; /* Sharper kernel. */ gal_data_t *widekernel; /* Wider kernel. */ gal_data_t *conv; /* Convolved wth sharper kernel. */ gal_data_t *wconv; /* Convolved with wider kernel. */ gal_data_t *binary; /* For binary operations. */ gal_data_t *olabel; /* Labels of objects in the detection. */ gal_data_t *expand_thresh; /* Quantile threshold to expand per tile. */ gal_data_t *exp_thresh_full; /* Full array containing growth thresh. */ gal_data_t *noskytiles; /* Tiles to not use for Sky. */ gal_data_t *sky; /* Mean of undetected pixels, per tile. */ gal_data_t *std; /* STD of undetected pixels, per tile. */ size_t maxtcontig; /* Maximum contiguous space for a tile. */ size_t maxltcontig; /* Maximum contiguous space for a tile. */ size_t *maxtsize; /* Maximum size of a single small tile. */ size_t *maxltsize; /* Maximum size of a single large tile. */ size_t numexpand; /* Initial number of pixels to expand. */ time_t rawtime; /* Starting time of the program. */ float medstd; /* Median STD before interpolation. */ float minstd; /* Minimum STD before interpolation. */ float maxstd; /* Maximum STD before interpolation. */ float cpscorr; /* Counts/second correction. */ size_t numinitialdets; /* Number of initial detections. */ size_t numdetections; /* Number of final detections. */ float detsnthresh; /* Pseudo-detection S/N threshold. */ }; #endif gnuastro-0.22/bin/noisechisel/authors-cite.h0000644000175000017500000000567414551337306014640 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" \ "Paper on NoiseChisel improvements since 2015\n" \ "--------------------------------------------\n" \ "@ARTICLE{noisechisel_segment_2019,\n" \ " author = {{Akhlaghi}, Mohammad},\n" \ " title = \"{Carving out the low surface brightness universe with NoiseChisel}\",\n" \ " journal = {arXiv e-prints},\n" \ " keywords = {Astrophysics - Instrumentation and Methods for Astrophysics,\n" \ " Astrophysics - Astrophysics of Galaxies,\n" \ " Computer Science - Computer Vision and Pattern Recognition},\n" \ " year = \"2019\",\n" \ " month = \"Sep\",\n" \ " eid = {arXiv:1909.11230},\n" \ " pages = {arXiv:1909.11230},\n" \ " archivePrefix = {arXiv},\n" \ " eprint = {1909.11230},\n" \ " primaryClass = {astro-ph.IM},\n" \ " adsurl = {https://ui.adsabs.harvard.edu/abs/2019arXiv190911230A},\n" \ " adsnote = {Provided by the SAO/NASA Astrophysics Data System}\n" \ "}\n" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/noisechisel/args.h0000644000175000017500000003440014551337306013152 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Options in argp_option format. */ struct argp_option program_options[] = { /* Input options. */ { "kernel", UI_KEY_KERNEL, "FITS", 0, "Filename of kernel to convolve with input", GAL_OPTIONS_GROUP_INPUT, &p->kernelname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "khdu", UI_KEY_KHDU, "STR", 0, "HDU containing kernel image.", GAL_OPTIONS_GROUP_INPUT, &p->khdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "convolved", UI_KEY_CONVOLVED, "FITS", 0, "Convolved image file to avoid convolution.", GAL_OPTIONS_GROUP_INPUT, &p->convolvedname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "chdu", UI_KEY_CHDU, "STR", 0, "HDU/extension of convolved image in file.", GAL_OPTIONS_GROUP_INPUT, &p->chdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "widekernel", UI_KEY_WIDEKERNEL, "FITS", 0, "Filename of wider kernel for better qthresh", GAL_OPTIONS_GROUP_INPUT, &p->widekernelname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "whdu", UI_KEY_WHDU, "STR", 0, "HDU containing wide kernel image.", GAL_OPTIONS_GROUP_INPUT, &p->whdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Tessellation. */ { "largetilesize", UI_KEY_LARGETILESIZE, "INT[,INT]", 0, "Sim. to --tilesize, but for larger tiles.", GAL_OPTIONS_GROUP_TESSELLATION, &p->ltl.tilesize, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_sizes_reverse }, /* Output options. */ { "ignoreblankintiles", UI_KEY_IGNOREBLANKINTILES, 0, 0, "Don't write input's blanks in tiled output.", GAL_OPTIONS_GROUP_OUTPUT, &p->ignoreblankintiles, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "rawoutput", UI_KEY_RAWOUTPUT, 0, 0, "Output only detection labels & 1-elem/tile grid.", GAL_OPTIONS_GROUP_OUTPUT, &p->rawoutput, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "label", UI_KEY_LABEL, 0, 0, "Label/count detected pixels that are connected.", GAL_OPTIONS_GROUP_OUTPUT, &p->label, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Detection. */ { 0, 0, 0, 0, "Detection:", UI_GROUP_DETECTION }, { "meanmedqdiff", UI_KEY_MEANMEDQDIFF, "FLT", 0, "Max. mean and median quant diff. per tile.", UI_GROUP_DETECTION, &p->meanmedqdiff, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "qthresh", UI_KEY_QTHRESH, "FLT", 0, "Quantile threshold on convolved image.", UI_GROUP_DETECTION, &p->qthresh, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LT_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "outliernumngb", UI_KEY_OUTLIERNUMNGB, "INT", 0, "Num neighboring tiles to look for outlier.", UI_GROUP_DETECTION, &p->outliernumngb, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "outliersclip", UI_KEY_OUTLIERSCLIP, "FLT,FLT", 0, "Sigma-clip params for qthresh outliers.", UI_GROUP_DETECTION, &p->outliersclip, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_sigma_clip }, { "outliersigma", UI_KEY_OUTLIERSIGMA, "FLT", 0, "Multiple of sigma to define outliers.", UI_GROUP_DETECTION, &p->outliersigma, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "smoothwidth", UI_KEY_SMOOTHWIDTH, "INT", 0, "Flat kernel width to smooth interpolated.", UI_GROUP_DETECTION, &p->smoothwidth, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_0_OR_ODD, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checkqthresh", UI_KEY_CHECKQTHRESH, 0, 0, "Save quantile threshold estimation in file.", UI_GROUP_DETECTION, &p->checkqthresh, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "blankasforeground", UI_KEY_BLANKASFOREGROUND, 0, 0, "Blanks are foreground in erosion and opening.", UI_GROUP_DETECTION, &p->blankasforeground, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "erode", UI_KEY_ERODE, "INT", 0, "Number of erosions after thresholding.", UI_GROUP_DETECTION, &p->erode, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "erodengb", UI_KEY_ERODENGB, "INT", 0, "Connectivity in erosion (number of ngbs).", UI_GROUP_DETECTION, &p->erodengb, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "noerodequant", UI_KEY_NOERODEQUANT, "FLT", 0, "Quantile for no erosion.", UI_GROUP_DETECTION, &p->noerodequant, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "opening", UI_KEY_OPENING, "INT", 0, "Depth of opening after erosion.", UI_GROUP_DETECTION, &p->opening, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "openingngb", UI_KEY_OPENINGNGB, "INT", 0, "Connectivity in opening (number of ngbs).", UI_GROUP_DETECTION, &p->openingngb, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "skyfracnoblank", UI_KEY_SKYFRACNOBLANK, 0, 0, "No blanks in tile undetected frac. (minskyfrac).", UI_GROUP_DETECTION, &p->skyfracnoblank, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "minskyfrac", UI_KEY_MINSKYFRAC, "FLT", 0, "Min. fraction of undetected area in tile.", UI_GROUP_DETECTION, &p->minskyfrac, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checkdetsky", UI_KEY_CHECKDETSKY, 0, 0, "Save Sky value estimation for pseudo-dets.", UI_GROUP_DETECTION, &p->checkdetsky, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sigmaclip", UI_KEY_SIGMACLIP, "FLT,FLT", 0, "Sigma multiple and, tolerance or number.", UI_GROUP_DETECTION, &p->sigmaclip, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_sigma_clip }, { "dthresh", UI_KEY_DTHRESH, "FLT", 0, "Sigma threshold for Pseudo-detections.", UI_GROUP_DETECTION, &p->dthresh, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "dopening", UI_KEY_DOPENING, "INT", 0, "Depth of opening after dthresh.", UI_GROUP_DETECTION, &p->dopening, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "dopeningngb", UI_KEY_DOPENINGNGB, "INT", 0, "4 or 8 connectivity for dthresh opening.", UI_GROUP_DETECTION, &p->dopeningngb, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "holengb", UI_KEY_HOLENGB, "INT", 0, "4 or 8 connectivity for filling holes.", UI_GROUP_DETECTION, &p->holengb, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "pseudoconcomp", UI_KEY_PSEUDOCONCOMP, "INT", 0, "4 or 8 neighbors for labeling pseudo-dets.", UI_GROUP_DETECTION, &p->pseudoconcomp, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "snminarea", UI_KEY_SNMINAREA, "INT", 0, "Min. pseudo-detection area for S/N dist.", UI_GROUP_DETECTION, &p->snminarea, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checksn", UI_KEY_CHECKSN, 0, 0, "Save pseudo-detection S/N values to a file.", UI_GROUP_DETECTION, &p->checksn, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "minnumfalse", UI_KEY_MINNUMFALSE, "INT", 0, "Minimum number for S/N estimation.", UI_GROUP_DETECTION, &p->minnumfalse, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "snquant", UI_KEY_SNQUANT, "FLT", 0, "Quantile in pseudo-det. to define true.", UI_GROUP_DETECTION, &p->snquant, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "snthresh", UI_KEY_SNTHRESH, "FLT", 0, "Manually input pseudo-det S/N threshold.", UI_GROUP_DETECTION, &p->snthresh, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "detgrowquant", UI_KEY_DETGROWQUANT, "FLT", 0, "Minimum quant. to expand true detections.", UI_GROUP_DETECTION, &p->detgrowquant, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "detgrowmaxholesize", UI_KEY_DETGROWMAXHOLESIZE, "INT", 0, "Max. area of holes after growth to fill.", UI_GROUP_DETECTION, &p->detgrowmaxholesize, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "cleangrowndet", UI_KEY_CLEANGROWNDET, 0, 0, "Remove small S/N grown detections.", UI_GROUP_DETECTION, &p->cleangrowndet, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checkdetection", UI_KEY_CHECKDETECTION, 0, 0, "Save all the detection steps to a file.", UI_GROUP_DETECTION, &p->checkdetection, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checksky", UI_KEY_CHECKSKY, 0, 0, "Final sky and its STD steps in a file.", UI_GROUP_DETECTION, &p->checksky, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Operating mode options. */ { "continueaftercheck", UI_KEY_CONTINUEAFTERCHECK, 0, 0, "Continue processing after checks.", GAL_OPTIONS_GROUP_OPERATING_MODE, &p->continueaftercheck, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* End of options. */ {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/noisechisel/ui.h0000644000175000017500000000603114551337306012632 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Macros. */ #define UI_NO_CONV_KERNEL_NAME "none" /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_DETECTION = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_SEGMENTATION, }; /* Available letters for short options: b f g i j n r u v x y z A E G H J O W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_LARGETILESIZE = 'L', UI_KEY_KERNEL = 'k', UI_KEY_WIDEKERNEL = 'w', UI_KEY_MINSKYFRAC = 'B', UI_KEY_MEANMEDQDIFF = 'Q', UI_KEY_QTHRESH = 't', UI_KEY_ERODE = 'e', UI_KEY_OPENING = 'p', UI_KEY_SIGMACLIP = 's', UI_KEY_DTHRESH = 'R', UI_KEY_SNMINAREA = 'm', UI_KEY_SNQUANT = 'c', UI_KEY_DETGROWQUANT = 'd', UI_KEY_CONTINUEAFTERCHECK = 'C', UI_KEY_LABEL = 'l', UI_KEY_OUTLIERNUMNGB = 'a', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_KHDU = 1000, UI_KEY_CONVOLVED, UI_KEY_CHDU, UI_KEY_WHDU, UI_KEY_MINNUMFALSE, UI_KEY_SMOOTHWIDTH, UI_KEY_QTHRESHTILEQUANT, UI_KEY_OUTLIERSIGMA, UI_KEY_OUTLIERSCLIP, UI_KEY_CHECKQTHRESH, UI_KEY_BLANKASFOREGROUND, UI_KEY_ERODENGB, UI_KEY_NOERODEQUANT, UI_KEY_OPENINGNGB, UI_KEY_SKYFRACNOBLANK, UI_KEY_CHECKDETSKY, UI_KEY_DOPENING, UI_KEY_DOPENINGNGB, UI_KEY_HOLENGB, UI_KEY_PSEUDOCONCOMP, UI_KEY_CHECKSN, UI_KEY_SNTHRESH, UI_KEY_DETGROWMAXHOLESIZE, UI_KEY_CLEANGROWNDET, UI_KEY_CHECKDETECTION, UI_KEY_CHECKSKY, UI_KEY_RAWOUTPUT, UI_KEY_IGNOREBLANKINTILES, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct noisechiselparams *p); void ui_abort_after_check(struct noisechiselparams *p, char *filename, char *file2name, char *description); void ui_free_report(struct noisechiselparams *p, struct timeval *t1); #endif gnuastro-0.22/bin/noisechisel/detection.h0000644000175000017500000000217614551337306014201 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef DETECTION_H #define DETECTION_H void detection_initial(struct noisechiselparams *p); void detection(struct noisechiselparams *p); #endif gnuastro-0.22/bin/noisechisel/noisechisel.h0000644000175000017500000000211614551337306014522 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef NOISECHISEL_H #define NOISECHISEL_H void noisechisel(struct noisechiselparams *p); #endif gnuastro-0.22/bin/noisechisel/sky.h0000644000175000017500000000220014551337306013015 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef SKY_H #define SKY_H void sky_and_std(struct noisechiselparams *p, char *checkname); void sky_subtract(struct noisechiselparams *p); #endif gnuastro-0.22/bin/noisechisel/threshold.h0000644000175000017500000000356314551337306014220 /********************************************************************* NoiseChisel - Detect signal in a noisy dataset. NoiseChisel is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef THRESHOLD_H #define THRESHOLD_H #define THRESHOLD_NO_ERODE_VALUE 2 enum threshold_type { THRESHOLD_QUANTILES, THRESHOLD_SKY_STD, }; void threshold_apply(struct noisechiselparams *p, float *value1, float *value2, int type); void threshold_write_sn_table(struct noisechiselparams *p, gal_data_t *sntable, gal_data_t *snind, char *filename, gal_list_str_t *comments, char *extname); void threshold_interp_smooth(struct noisechiselparams *p, gal_data_t **first, gal_data_t **second, gal_data_t **third, char *filename); void threshold_no_outlier(struct noisechiselparams *p, gal_data_t *first, gal_data_t *second, gal_data_t *third, char *filename); void threshold_quantile_find_apply(struct noisechiselparams *p); #endif gnuastro-0.22/bin/noisechisel/kernel-2d.h0000644000175000017500000001132114551337306013776 /********************************************************************* The default 2D kernel to be used in NoiseChisel. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_KERNEL2D_H__ #define __GAL_KERNEL2D_H__ /* How to produce this kernel ========================== Below, the steps necessary to easily create the C contents of this file are described. The first step can be modified to change the default kernel properties and put the new contents into this file. Make the kernel --------------- We'll first make the kernel using MakeProfiles with the following commands. IMPORTANT NOTE: because the kernel is so sharp, random sampling is going to be used for all the pixels (the center won't be used). So it is important to have a large number of random points to make the very slight differences between symmetric parts of the profile even less significant. export GSL_RNG_SEED=1 export GSL_RNG_TYPE=ranlxs2 astmkprof --kernel=gaussian,2,5 --oversample=1 --envseed --numrandom=100000 Convert it to C code -------------------- Put the following C program into a file called 'kernel.c'. #include #include #include int main(void) { size_t i; float *arr; gal_data_t *img=gal_fits_img_read_to_type("kernel.fits", "1", GAL_TYPE_FLOAT32, -1); arr=img->array; printf("size_t kernel_2d_dsize[2]={%zu, %zu};\n", img->dsize[0], img->dsize[1]); printf("float kernel_2d[%zu]={", img->size); for(i=0;isize;++i) { if(i>0) { if(i % img->dsize[1] == 0 ) printf("\n\n"); } // We cannot use '\b' here, since we are writing directly // to the command-line, so we'll first write the number, // then decide if any subsequent character (a comma) // should be written. printf("%.7g", arr[i]); // The last element doesn't need a comma. In each line, // the last character must not be a space, but for easy // readability, the elements in between need a space. if( i!=(img->size-1) ) printf("%s", ((i+1)%img->dsize[1]) ? ", " : ","); } printf("};\n"); gal_data_free(img); return EXIT_SUCCESS; } Run the C program ----------------- We can now compile and run that C program and put the outputs in 'kernel.c'. Once its created, copy the contents of 'kernel-2d.h' after these comments. $ astbuildprog -q kernel.c > kernel-2d.h */ size_t kernel_2d_dsize[2]={11, 11}; float kernel_2d[121]={0, 0, 0, 0, 0, 2.599797e-08, 0, 0, 0, 0, 0, 0, 0, 3.008479e-08, 6.938075e-07, 4.493532e-06, 8.276223e-06, 4.515019e-06, 6.947793e-07, 3.04628e-08, 0, 0, 0, 3.009687e-08, 2.556034e-06, 5.936867e-05, 0.0003808578, 0.0007126221, 0.0003827095, 5.902729e-05, 2.553342e-06, 2.978137e-08, 0, 0, 7.021852e-07, 5.912285e-05, 0.00137637, 0.008863639, 0.01648383, 0.008855942, 0.001365171, 5.925718e-05, 7.021184e-07, 0, 0, 4.490787e-06, 0.0003826718, 0.008857355, 0.05742518, 0.1062628, 0.05727194, 0.008880079, 0.0003826067, 4.478989e-06, 0, 2.595735e-08, 8.31301e-06, 0.0007113572, 0.01640853, 0.1061298, 0.1971036, 0.1062611, 0.01647962, 0.000708363, 8.379878e-06, 2.593496e-08, 0, 4.516684e-06, 0.0003846966, 0.008860709, 0.05739478, 0.1062216, 0.05725683, 0.00881713, 0.000383981, 4.473017e-06, 0, 0, 6.950547e-07, 5.920586e-05, 0.00137483, 0.00887785, 0.0164709, 0.008855232, 0.001372743, 5.939038e-05, 7.016624e-07, 0, 0, 3.006322e-08, 2.587011e-06, 5.92911e-05, 0.0003843824, 0.0007118155, 0.000386519, 5.974654e-05, 2.585581e-06, 3.048036e-08, 0, 0, 0, 3.041056e-08, 7.05225e-07, 4.497418e-06, 8.388542e-06, 4.478833e-06, 7.018358e-07, 2.995504e-08, 0, 0, 0, 0, 0, 0, 0, 2.567377e-08, 0, 0, 0, 0, 0}; #endif gnuastro-0.22/bin/noisechisel/kernel-3d.h0000644000175000017500000001242114435153342013776 /********************************************************************* The default 3D kernel to be used in NoiseChisel and Segment. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2018-2019, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_KERNEL3D_H__ #define __GAL_KERNEL3D_H__ /* How to produce this kernel ========================== Below, the steps necessary to easily create the C contents of this file are described. The first step can be modified to change the default kernel properties and put the new contents into this file. Make the kernel --------------- We'll first make the kernel using MakeProfiles with the following commands. IMPORTANT NOTE: because the kernel is so sharp, random sampling is going to be used for all the pixels (the center won't be used). So it is important to have a large number of random points to make the very slight differences between symmetric parts of the profile even less significant. export GSL_RNG_SEED=1 export GSL_RNG_TYPE=ranlxs2 astmkprof --kernel=gaussian-3d,1.5,5,0.5 --oversample=1 --envseed \ --numrandom=100000 Convert it to C code -------------------- Put the following C program into a file called `kernel.c'. #include #include #include int main(void) { size_t i; float *arr; gal_data_t *img=gal_fits_img_read_to_type("kernel.fits", "1", GAL_TYPE_FLOAT32, -1); arr=img->array; printf("size_t kernel_3d_dsize[3]={%zu, %zu, %zu};\n", img->dsize[0], img->dsize[1], img->dsize[2]); printf("float kernel_3d[%zu]={", img->size); for(i=0;isize;++i) { if(i>0) { if(i % img->dsize[2] == 0 ) printf("\n"); if(i % (img->dsize[2]*img->dsize[1]) == 0 ) printf("\n"); } // We cannot use `\b' here, since we are writing directly // to the command-line, so we'll first write the number, // then decide if any subsequent character (a comma) // should be written. printf("%.7g", arr[i]); // The last element doesn't need a comma. In each line, // the last character must not be a space, but for easy // readability, the elements in between need a space. if( i!=(img->size-1) ) printf("%s", ((i+1)%img->dsize[2]) ? ", " : ","); } printf("};\n"); return EXIT_SUCCESS; } Run the C program ----------------- We can now compile and run that C program and put the outputs in `kernel.c'. Once its created, copy the contents of `kernel-3d.h' after these comments. $ astbuildprog -q kernel.c > kernel-3d.h */ size_t kernel_3d_dsize[3]={3, 7, 7}; float kernel_3d[147]={0, 0, 5.219212e-07, 1.43663e-06, 5.288961e-07, 0, 0, 0, 4.890969e-06, 0.0001122713, 0.0003051736, 0.0001101779, 4.908836e-06, 0, 5.281005e-07, 0.0001115758, 0.002482525, 0.006792462, 0.002476586, 0.0001099998, 5.217535e-07, 1.451268e-06, 0.0003033727, 0.006850741, 0.01871265, 0.006743792, 0.0003061892, 1.43298e-06, 5.209756e-07, 0.000110545, 0.002490561, 0.006798376, 0.002503618, 0.0001109581, 5.295083e-07, 0, 4.884327e-06, 0.0001122016, 0.0003074409, 0.0001103678, 4.984748e-06, 0, 0, 0, 5.224761e-07, 1.425723e-06, 5.33545e-07, 0, 0, 0, 3.538044e-07, 7.891201e-06, 2.166429e-05, 7.979216e-06, 3.570717e-07, 0, 3.536664e-07, 7.511148e-05, 0.001693119, 0.004623666, 0.001691994, 7.563465e-05, 3.541075e-07, 7.921932e-06, 0.001687588, 0.03788469, 0.1038283, 0.03776859, 0.001679332, 7.979274e-06, 2.200398e-05, 0.004617298, 0.1038528, 0.2849551, 0.1039089, 0.004635326, 2.165271e-05, 7.955934e-06, 0.001697289, 0.0379024, 0.1037254, 0.03768558, 0.001666544, 7.878737e-06, 3.523428e-07, 7.45342e-05, 0.001689582, 0.00461954, 0.001684659, 7.568914e-05, 3.499421e-07, 0, 3.56209e-07, 7.915472e-06, 2.17837e-05, 7.854093e-06, 3.555503e-07, 0, 0, 0, 5.263017e-07, 1.431613e-06, 5.12058e-07, 0, 0, 0, 4.907304e-06, 0.0001125078, 0.00030509, 0.000111018, 5.084412e-06, 0, 5.256628e-07, 0.0001103357, 0.002493239, 0.006835639, 0.002478384, 0.0001131122, 5.260213e-07, 1.442301e-06, 0.0003005426, 0.006833205, 0.01862562, 0.006816466, 0.000302246, 1.436046e-06, 5.298979e-07, 0.0001107397, 0.002476231, 0.006837885, 0.00252707, 0.0001124105, 5.305631e-07, 0, 5.012419e-06, 0.0001110889, 0.0003017522, 0.0001124517, 4.790862e-06, 0, 0, 0, 5.104474e-07, 1.45196e-06, 5.191671e-07, 0, 0}; #endif gnuastro-0.22/bin/query/0000755000175000017500000000000014557514202010762 5gnuastro-0.22/bin/query/Makefile.am0000644000175000017500000000330514557211443012740 ## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad akhlaghi ## Contributing author(s): ## Copyright (C) 2016-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astquery ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astquery_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astquery_SOURCES = main.c ui.c query.c astron.c gaia.c ned.c tap.c \ vizier.c EXTRA_DIST = main.h authors-cite.h args.h ui.h query.h astron.h \ gaia.h ned.h tap.h vizier.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astquery.conf gnuastro-0.22/bin/query/astquery.conf0000644000175000017500000000167314551337306013437 # Default parameters (System) for Query. # Query is part of GNU Astronomy Utilities. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astquery --help # Full list of options, short doc. # $ astquery -P # Print all options and used values. # $ info astquery # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2020-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. gnuastro-0.22/bin/query/Makefile.in0000644000175000017500000034153714557513747013001 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astquery$(EXEEXT) subdir = bin/query ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astquery_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) query.$(OBJEXT) \ astron.$(OBJEXT) gaia.$(OBJEXT) ned.$(OBJEXT) tap.$(OBJEXT) \ vizier.$(OBJEXT) astquery_OBJECTS = $(am_astquery_OBJECTS) am__DEPENDENCIES_1 = astquery_DEPENDENCIES = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/astron.Po ./$(DEPDIR)/gaia.Po \ ./$(DEPDIR)/main.Po ./$(DEPDIR)/ned.Po ./$(DEPDIR)/query.Po \ ./$(DEPDIR)/tap.Po ./$(DEPDIR)/ui.Po ./$(DEPDIR)/vizier.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astquery_SOURCES) DIST_SOURCES = $(astquery_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib astquery_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astquery_SOURCES = main.c ui.c query.c astron.c gaia.c ned.c tap.c \ vizier.c EXTRA_DIST = main.h authors-cite.h args.h ui.h query.h astron.h \ gaia.h ned.h tap.h vizier.h dist_sysconf_DATA = astquery.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/query/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/query/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astquery$(EXEEXT): $(astquery_OBJECTS) $(astquery_DEPENDENCIES) $(EXTRA_astquery_DEPENDENCIES) @rm -f astquery$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astquery_OBJECTS) $(astquery_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/astron.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gaia.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ned.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/query.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tap.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vizier.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/astron.Po -rm -f ./$(DEPDIR)/gaia.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ned.Po -rm -f ./$(DEPDIR)/query.Po -rm -f ./$(DEPDIR)/tap.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f ./$(DEPDIR)/vizier.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/astron.Po -rm -f ./$(DEPDIR)/gaia.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ned.Po -rm -f ./$(DEPDIR)/query.Po -rm -f ./$(DEPDIR)/tap.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f ./$(DEPDIR)/vizier.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/query/main.c0000644000175000017500000000305714551337306012001 /********************************************************************* Query - Retreive data from a remote data server. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" #include "query.h" /* Main function */ int main (int argc, char *argv[]) { struct timeval t1; struct queryparams p={{{0},0},0}; /* Set the starting time. */ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Query. */ query(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully. */ return EXIT_SUCCESS; } gnuastro-0.22/bin/query/ui.c0000644000175000017500000004423214551337306011472 /********************************************************************* Query - Retreive data from a remote data server. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "query.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "DATABASE"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" is just a place holder " "used as a minimal set of files and functions necessary for a program in " "Gnuastro. It can be used for learning or as a template to build new " "programs.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct queryparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; /* Program-specific initializations. */ p->head = GAL_BLANK_SIZE_T; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_QUIETMMAP: case GAL_OPTIONS_KEY_IGNORECASE: case GAL_OPTIONS_KEY_NUMTHREADS: case GAL_OPTIONS_KEY_MINMAPSIZE: case GAL_OPTIONS_KEY_STDINTIMEOUT: cp->coptions[i].flags=OPTION_HIDDEN; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Fixed string */ #define UI_NODATABASE "Please use the '--database' ('-d') option to " \ "specify your desired database, see manual ('info gnuastro " \ "astquery' command) for the current databases, here is the list " \ "of acceptable values (with their web-based search URLs):\n\n" \ " astron https://vo.astron.nl/\n" \ " gaia https://gea.esac.esa.int/archive\n" \ " ned https://ned.ipac.caltech.edu/tap/sync\n" \ " vizier http://vizier.u-strasbg.fr/viz-bin/VizieR\n" /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct queryparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(arg[0]!='\0') p->databasestr=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } char * ui_strlist_to_str(gal_list_str_t *input) { char *out=NULL; gal_list_str_t *node; size_t n, nn, nnodes=0, alllen=0; /* First calculate the full length of all nodes. */ for(node=input; node!=NULL; node=node->next) { /* We'll add two extra for each. One for the ',' that must come in between it and the next one. One just for a buffer, incase we haven't accounted for something. */ alllen += strlen(node->v) + 2; ++nnodes; } /* Allocate the output string. */ out=gal_pointer_allocate(GAL_TYPE_STRING, alllen, 1, "out", __func__); /* Write all the strings into the allocated space. */ n=nn=0; for(node=input; node!=NULL; node=node->next) { if(nn++==nnodes-1) sprintf(out+n, "%s", node->v); else n += sprintf(out+n, "%s,", node->v); } /* Return the merged string. */ return out; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct queryparams *p) { size_t i; double *darray; gal_data_t *tmp; int keepinputdir; char *suffix, *rdsuffix, *basename; /* See if database has been specified. */ if(p->databasestr==NULL) error(EXIT_FAILURE, 0, "no input database! " UI_NODATABASE); /* Convert the given string into a code. */ if( !strcmp(p->databasestr, "astron") ) p->database=QUERY_DATABASE_ASTRON; else if( !strcmp(p->databasestr, "gaia") ) p->database=QUERY_DATABASE_GAIA; else if( !strcmp(p->databasestr, "ned") ) p->database=QUERY_DATABASE_NED; else if( !strcmp(p->databasestr, "vizier") ) p->database=QUERY_DATABASE_VIZIER; else error(EXIT_FAILURE, 0, "'%s' is not a recognized database.\n\n" "For the full list of recognized databases, please see the " "documentation (with the command 'info astquery')", p->databasestr); /* If '--limitinfo' is given, but the string is empty (possibly due to a shell variable that wasn't set), remove it. */ if(p->limitinfo && p->limitinfo[0]=='\0') { free(p->limitinfo); p->limitinfo=NULL; for(i=0; !gal_options_is_last(&p->cp.poptions[i]); ++i) if( p->cp.poptions[i].key == UI_KEY_LIMITINFO ) p->cp.poptions[i].set=GAL_OPTIONS_NOT_SET; } /* If '--ccol' is given, first merge all possible calls to it, confirm that there are only two values and put them into the 'ra_name' and 'dec_name' variables. */ if(p->ccol) { gal_options_merge_list_of_csv(&p->ccol); if(gal_list_str_number(p->ccol)!=2) error(EXIT_FAILURE, 0, "2 values should be given to '--ccol', " "but you have given %zu values (possibly in multiple calls " "to '--ccols'). Recall that '--ccol' is the coordinate " "column (usually RA and Dec). You can either put them in " "one call (for example '--ccol=ra,dec') or in two (for " "example '--ccol=ra --ccol=dec')", gal_list_str_number(p->ccol)); p->ra_name=p->ccol->v; p->dec_name=p->ccol->next->v; } /* If '--noblank' or '--sort' are given (possibly multiple times, each with multiple column names) break it up into individual names. */ if(p->sort) gal_options_merge_list_of_csv(&p->sort); if(p->noblank) gal_options_merge_list_of_csv(&p->noblank); /* Make sure that '--query' and '--center' are not called together. */ if(p->query && (p->center || p->overlapwith) ) error(EXIT_FAILURE, 0, "the '--query' option cannot be called together " "together with '--center' or '--overlapwith'"); /* Overlapwith cannot be called with the manual query. */ if( p->overlapwith && (p->center || p->width || p->radius) ) error(EXIT_FAILURE, 0, "the '--overlapwith' option cannot be called " "with the manual region specifiers ('--center', '--width' or " "'--radius')"); /* The radius and width cannot be called together. */ if(p->radius && p->width) error(EXIT_FAILURE, 0, "the '--radius' and '--width' options cannot be " "called together"); /* If radius is given, it should be one value and positive. */ if(p->radius) { if(p->radius->size>1) error(EXIT_FAILURE, 0, "only one value can be given to '--radius' " "('-r') option"); if( ((double *)(p->radius->array))[0]<0 ) error(EXIT_FAILURE, 0, "the '--radius' option value cannot be negative"); } /* Make sure the range values are reasonable. */ i=0; if(p->range) for(tmp=p->range; tmp!=NULL; tmp=tmp->next) { /* Basic preparations. */ ++i; darray=tmp->array; /* Make sure only two values are given. */ if(tmp->size!=2) error(EXIT_FAILURE, 0, "two values (separated by ',' or ':') " "should be given to '--range'. But %zu values were given " "to the %zu%s call of this option (recall that the first " "value should be the column name in the given dataset)", tmp->size, i, i==1 ? "st" : i==2 ? "nd" : i==3 ? "rd" : "th"); /* Make sure the first value is large than the second. */ if(darray[0]>darray[1]) error(EXIT_FAILURE, 0, "the first value of '--range' " "should be smaller than, or equal to, the second, " "but %g>%g", darray[0], darray[1]); /* None of the values should be 'nan'. */ if( isnan(darray[0]) || isnan(darray[1]) ) error(EXIT_FAILURE, 0, "values to '--range' cannot be NaN"); /* ADQL doesn't recognize 'inf', so if the user gives '-inf' or 'inf', change it to the smallest/largest possible floating point number. */ if( isinf(darray[0]) == -1 ) darray[0] = -FLT_MAX; if( isinf(darray[1]) == 1 ) darray[1] = FLT_MAX; } /* Make sure the widths are reasonable. */ if(p->width && p->center) { /* Width should have the same number of elements as the center coordinates */ if( p->width->size > 1 && p->width->size != p->center->size ) error(EXIT_FAILURE, 0, "'--width' should either have a single " "value (used for all dimensions), or one value for each " "dimension. However, you have provided %zu coordinate " "values, and %zu width values", p->center->size, p->width->size); /* All values must be positive. */ for(i=0;iwidth->size;++i) if( ((double *)(p->width->array))[i]<0 ) error(EXIT_FAILURE, 0, "the '--width' option value(s) cannot " "be negative"); } /* Make sure that the output name is in a writable location and that it doesn't exist. If it exists, and the user hasn't called '--dontdelete', then delete the existing file. */ gal_checkset_writable_remove(p->cp.output, NULL, p->cp.keep, p->cp.dontdelete); /* Set the suffix of the default download names for NED (since extinction is given only in VOTable, with an '.xml' suffix). */ if( p->database==QUERY_DATABASE_NED && p->datasetstr && !strcmp(p->datasetstr, "extinction") ) { suffix=".xml"; rdsuffix="-raw-download.xml"; } else { suffix=".fits"; rdsuffix="-raw-download.fits"; } /* Currently Gnuastro doesn't read or write XML files (VOTable). So if the downloaded file is an XML file but the user hasn't given an XML suffix, abort and inform the user. */ if(p->cp.output) { if( !strcmp(suffix,".xml") && strcmp(&p->cp.output[strlen(p->cp.output)-4], ".xml") ) error(EXIT_FAILURE, 0, "this dataset's output is a VOTable (with " "an '.xml' suffix). However, Gnuastro doesn't yet support " "VOTable, so it won't do any checks and corrections on " "the downloaded file. Please give an output name with an " "'.xml' suffix to continue"); } /* Set the name for the downloaded and final output name. These are due to an internal low-level processing that will be done on the raw downloaded file. */ else { basename=gal_checkset_malloc_cat(p->databasestr, suffix); p->cp.output=gal_checkset_make_unique_suffix(basename, suffix); free(basename); } /* Currently we don't interally process VOTable (in '.xml' suffix) files, so to keep the next steps un-affected, we'll set Query to not delete the raw download and copy the name of the output into the raw download. */ if( !strcmp(suffix, ".xml") ) { p->keeprawdownload=1; gal_checkset_allocate_copy(p->cp.output, &p->downloadname); } else { /* Make sure the output name doesn't exist (and report an error if '--dontdelete' is called. Just note that for the automatic output, we are basing that on the output, not the input. So we are temporarily activating 'keepinputdir'. */ keepinputdir=p->cp.keepinputdir; p->cp.keepinputdir=1; gal_checkset_writable_remove(p->cp.output, NULL, 0, p->cp.dontdelete); p->downloadname=gal_checkset_automatic_output(&p->cp, p->cp.output, rdsuffix); p->cp.keepinputdir=keepinputdir; } } static void ui_check_options_and_arguments(struct queryparams *p) { } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static void ui_preparations(struct queryparams *p) { } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct queryparams *p) { struct gal_options_common_params *cp=&p->cp; /* Just to avoid warning on no minmapsize. It is irrelevant here. */ p->cp.minmapsize=-1; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Prepare all the options as FITS keywords to write in output later. */ gal_options_as_fits_keywords(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct queryparams *p, struct timeval *t1) { /* Free the allocated arrays: */ free(p->cp.hdu); free(p->cp.output); free(p->datasetstr); free(p->datasetuse); free(p->downloadname); } gnuastro-0.22/bin/query/query.c0000644000175000017500000003403314551337306012220 /********************************************************************* Query - Retreive data from a remote data server. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include "tap.h" #include "ned.h" #include "gaia.h" #include "query.h" #include "astron.h" #include "vizier.h" /* Go over the columns and see if a given column exists. */ static int query_output_meta_col(gal_list_str_t **cols, gal_data_t *allcols, size_t numcols, char *string) { size_t i; for(i=0; idownloadname, "1", NULL, &numcols, &numrows, &tableformat, "NONE"); /* Parse the column information to set the necessary columns. */ if( query_output_meta_col(&cols, allcols, numcols, "table_name") == 0 ) { error(EXIT_SUCCESS, 0, "no 'table_name' found, but this " "is required by the IVOA TAP standard"); return; } if( query_output_meta_col(&cols, allcols, numcols, "description") == 0 ) { error(EXIT_SUCCESS, 0, "no 'description' found, but this " "is required by the IVOA TAP standard"); return; } if( query_output_meta_col(&cols, allcols, numcols, "table_type") == 0 ) { error(EXIT_SUCCESS, 0, "no 'table_type' found, but this " "is required by the IVOA TAP standard"); return; } query_output_meta_col(&cols, allcols, numcols, "size"); /* Read the necessary columns in the desired order, we just need to reverse the list first since it is last-in-first-out. */ gal_list_str_reverse(&cols); table=gal_table_read(p->downloadname, "1", NULL, cols, GAL_TABLE_SEARCH_NAME, 1, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap, NULL, "NONE"); /* Set the basic columns for easy reading. */ name=table->array; desc=table->next->array; type=table->next->next->array; if(table->next->next->next) { scol=gal_data_copy_to_new_type_free(table->next->next->next, GAL_TYPE_SIZE_T); table->next->next->next=scol; size=scol->array; } /* Print all the information for those tables that have a type of 'table'. If I understood the TAP standard properly, the 'view' ones aren't relevant for non-webpage users. */ printf("\nRETRIEVED DATASET INFORMATION\n" "=============================\n"); printf("Database: %s (URL: %s)\n", p->databasestr, p->urls->v); if(p->limitinfo) printf("Only datasets containing string below in description " "(case sensitive): '%s'\n", p->limitinfo); if(table->size) { for(i=0;isize;++i) if( !strcmp(type[i],"table") ) { printf("\n%zu of %zu\n" "==================\n" "DATASET NAME: %s\n" "------------------\n", i+1, table->size, name[i]); if(size) printf("DATASET SIZE (number of rows): %zu\n" "------------------\n", size[i]); printf("DATASET DESCRIPTION:\n%s\n" "==================\n", desc[i]); } } else printf("\nNO DATASET FOUND!\n"); /* Clean up and return. */ gal_list_data_free(table); gal_data_array_free(allcols, numcols, 0); } /* Note that these types in TAP are not case-sensitive. */ static uint8_t query_type_from_tap(char *typestr) { uint8_t type; if( !strcasecmp(typestr,"BOOLEAN") ) type=GAL_TYPE_INT8; else if( !strcasecmp(typestr,"BIGINT") || !strcasecmp(typestr,"LONG") ) type=GAL_TYPE_INT64; else if( !strcasecmp(typestr,"REAL") || !strcasecmp(typestr,"FLOAT") ) type=GAL_TYPE_FLOAT32; else if( !strcasecmp(typestr,"DOUBLE") ) type=GAL_TYPE_FLOAT64; else if( !strcasecmp(typestr,"SMALLINT") || !strcasecmp(typestr,"SHORT") || !strcasecmp(typestr,"INTEGER") ) type=GAL_TYPE_INT32; else if( !strcasecmp(typestr,"VARCHAR") || !strcasecmp(typestr,"STRING") || !strncasecmp(typestr, "CHAR", 4) ) type=GAL_TYPE_STRING; else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to fix " "the problem. The string '%s' is not a recognized type for " "this function", __func__, PACKAGE_BUGREPORT, typestr); return type; } /* Read the downloaded metadata for all the columns within a table (dataset) and print them in an easy to read format. */ static void query_output_meta_dataset(struct queryparams *p) { size_t i; int tableformat; size_t numcols, numrows; gal_list_str_t *cols=NULL; gal_data_t *table, *allcols; char **name, **type, **unit, **desc; /* Get the downloaded metadata column information so we can ask for the proper columns. */ allcols=gal_table_info(p->downloadname, "1", NULL, &numcols, &numrows, &tableformat, "NONE"); /* Parse the column information to set the necessary columns. */ if( query_output_meta_col(&cols, allcols, numcols, "column_name") == 0 ) { error(EXIT_SUCCESS, 0, "no 'column_name' found, but this " "is required by the IVOA TAP standard"); return; } if( query_output_meta_col(&cols, allcols, numcols, "datatype") == 0 ) { error(EXIT_SUCCESS, 0, "no 'datatype' found, but this " "is required by the IVOA TAP standard"); return; } if( query_output_meta_col(&cols, allcols, numcols, "description") == 0 ) { error(EXIT_SUCCESS, 0, "no 'description' found, but this " "is required by the IVOA TAP standard"); return; } if( query_output_meta_col(&cols, allcols, numcols, "unit") == 0 ) { error(EXIT_SUCCESS, 0, "no 'unit' found, but this " "is required by the IVOA TAP standard"); return; } /* Read the necessary columns in the desired order, we just need to reverse the list first since it is last-in-first-out. */ gal_list_str_reverse(&cols); table=gal_table_read(p->downloadname, "1", NULL, cols, GAL_TABLE_SEARCH_NAME, 1, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap, NULL, "NONE"); /* It may happen that the required dataset name isn't recognized by the database. In this case, 'table' will have 0 rows. */ if(table->size) { /* Free the initial 'allcols' and set the array pointers. */ name=table->array; type=table->next->array; desc=table->next->next->array; unit=table->next->next->next->array; gal_data_array_free(allcols, numcols, 0); /* Allocate the new 'allcols' and fill it with the metadata. */ numcols=table->size; allcols=gal_data_array_calloc(numcols); for(i=0;idatabasestr, p->urls->v, p->datasetuse); gal_table_print_info(allcols, numcols, GAL_BLANK_SIZE_T); } else { /* We are using 'error' to have the progam name at the start, and so it goes to 'stderr'. But we aren't exiting with 'EXIT_FAILURE', because Query still has work to do (for example deleting the temporarily downloaded file). */ printf("\n"); error(EXIT_SUCCESS, 0, "no '%s' dataset found in the '%s' database. " "For the list of datasets within this database, please run the " "command below (put any search word or phrase in 'SEARCH' to " "find your dataset more easily):\n\n" " astquery %s --information --limitinfo=\"SEARCH\"\n\n", p->datasetuse, p->databasestr, p->databasestr); } /* Clean up and return. */ gal_list_data_free(table); gal_data_array_free(allcols, numcols, 0); } /* Read the raw download data, and write them into the output file with Gnuastro's own library. */ static void query_output_data(struct queryparams *p) { gal_data_t *table; /* Read the table and write it into a clean output (in case the downloaded table is compressed in any special FITS way). */ table=gal_table_read(p->downloadname, "1", NULL, NULL, GAL_TABLE_SEARCH_NAME, 1, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap, NULL, "NONE"); gal_table_write(table, NULL, NULL, p->cp.tableformat, p->cp.output ? p->cp.output : p->cp.output, "QUERY", 0, 0); /* Get basic information about the table and free it. */ p->outtableinfo[0]=table->size; p->outtableinfo[1]=gal_list_data_number(table); gal_list_data_free(table); } void query_output_finalize(struct queryparams *p) { size_t len; int isxml=0; char *logname; fitsfile *fptr; int gooddownload=0, status=0; /* See if it is a FITS file or a VOTable. */ len=strlen(p->downloadname); if( !strcmp(&p->downloadname[len-4], ".xml") ) { isxml=1; gooddownload=1; } else { /* Open the FITS file and if the status value is still zero, it means everything worked properly. */ fits_open_file(&fptr, p->downloadname, READONLY, &status); if(status==0) { gooddownload=1; fits_close_file(fptr, &status); } } /* If the downloaded file is good, do the preparations. */ if(gooddownload) { /* Prepare the output dataset. */ if(p->information) { if(p->datasetuse) query_output_meta_dataset(p); else query_output_meta_database(p); } else if(isxml==0) query_output_data(p); /* Delete the raw downloaded file if necessary. */ if(p->keeprawdownload==0) remove(p->downloadname); } /* If there was an error */ else { /* Add a '.log' suffix to the output filename. */ logname=gal_pointer_allocate(GAL_TYPE_STRING, len+10, 1, __func__, "logname"); sprintf(logname, "%s.log", p->downloadname); /* Rename the output file to the logname file and let the user know. */ rename(p->downloadname, logname); if(p->cp.quiet==0) printf("\n"); error(EXIT_FAILURE, 0, "the requested dataset could not be " "retrieved! For more, please see '%s'", logname); } /* Add the query keywords to the first extension of the output (if the output was a FITS file). */ if( p->information==0 && gal_fits_name_is_fits(p->cp.output) ) { gal_fits_key_list_title_add_end(&p->cp.ckeys, "Constructed query command", 0); gal_fits_key_list_fullcomment_add_end(&p->cp.ckeys, p->finalcommand, 1); gal_fits_key_write(p->cp.ckeys, p->cp.output, "0", "NONE", 1, 0); } } /***************************************************************/ /************* Top-level function *************/ /***************************************************************/ void query(struct queryparams *p) { /* Download the dataset. */ switch(p->database) { case QUERY_DATABASE_ASTRON: astron_prepare(p); break; case QUERY_DATABASE_GAIA: gaia_prepare(p); break; case QUERY_DATABASE_NED: ned_prepare(p); break; case QUERY_DATABASE_VIZIER: vizier_prepare(p); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "address the problem. '%d' is not a recognized database " "code", __func__, PACKAGE_BUGREPORT, p->database); } /* Download the requested query. */ if(p->usetap) tap_download(p); /* Make sure that the result is a readable FITS file, otherwise, abort with an error. */ if(p->dryrun==0) query_output_finalize(p); /* Let the user know that things went well. */ if(p->dryrun==0 && p->cp.quiet==0) { if(p->information==0) printf("\nQuery resulted in %zu rows and %zu columns.\n", p->outtableinfo[0], p->outtableinfo[1]); if(p->keeprawdownload) { if(p->information) printf("\n"); printf("Query's raw downloaded file: %s\n", p->downloadname); } if(p->information==0) printf("Query's output written: %s\n", p->cp.output); } /* Clean up. */ gal_list_str_free(p->urls, 0); } gnuastro-0.22/bin/query/astron.c0000644000175000017500000000407114551337306012360 /********************************************************************* Settings for Astron. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2021-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "tap.h" static void astron_sanity_checks(struct queryparams *p) { /* Set the summarized names. */ if(p->datasetstr) { if( !strcmp(p->datasetstr, "tgssadr") ) gal_checkset_allocate_copy("tgssadr.main", &p->datasetuse); else gal_checkset_allocate_copy(p->datasetstr, &p->datasetuse); } /* Currently we assume ASTRON only uses TAP. */ p->usetap=1; } void astron_prepare(struct queryparams *p) { /* ASTRON-specific. */ astron_sanity_checks(p); /* Set the URLs, note that this is a simply-linked list, so we need to reverse it in the end (with 'gal_list_str_reverse') to have the same order here. */ gal_list_str_add(&p->urls, "https://vo.astron.nl/__system__/tap/run/tap/sync", 0); /* Name of default RA Dec columns. */ if(p->ra_name==NULL) p->ra_name="ra"; if(p->dec_name==NULL) p->dec_name="dec"; /* Basic sanity checks. */ tap_sanity_checks(p); } gnuastro-0.22/bin/query/gaia.c0000644000175000017500000000774114551337306011762 /********************************************************************* Settings for ESA's Gaia. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "tap.h" /* Gaia-specific: use simpler names for the commonly used Gaia datasets. This is relevant anytime that '--dataset' has been called. */ static void gaia_sanity_checks(struct queryparams *p) { /* FIRST CHECK (BEFORE SETTING DEFAULT DATASET): Gaia datasets are large and it doesn't allow downloading of the full dataset anonymously! You need to contact them for that. So if no constraints are given for the rows, a warning will be printed. */ if(p->information==0 && p->datasetstr && p->query==NULL && p->center==NULL && p->range==NULL && p->overlapwith==NULL ) error(EXIT_FAILURE, 0, "no constraints specified! " "In other words, you are asking for all the rows within this " "dataset! Gaia datasets have billions of rows, therefore it " "has a limit on the number of rows downloaded anonymously. " "For bulk download access, you should contact " "'gaia-helpdesk@cosmos.esa.int'. Alternatively, you can " "constrain your search to a certain spatial region with " "'--center=RA,DEC' (supplemented by '--radius' or '--width' in " "degrees) or use '--overlapwith' to only download rows that " "overlap with the provided image. See the documentation for " "more with this command: 'info astquery' (press 'q' to return " "to the command-line)."); /* Fix the summarized names. */ if(p->datasetstr) { if( !strcmp(p->datasetstr, "dr3") ) gal_checkset_allocate_copy("gaiadr3.gaia_source", &p->datasetuse); else if( !strcmp(p->datasetstr, "edr3") ) gal_checkset_allocate_copy("gaiaedr3.gaia_source", &p->datasetuse); else if( !strcmp(p->datasetstr, "dr2") ) gal_checkset_allocate_copy("gaiadr2.gaia_source", &p->datasetuse); else if( !strcmp(p->datasetstr, "dr1") ) gal_checkset_allocate_copy("gaiadr1.gaia_source", &p->datasetuse); else if( !strcmp(p->datasetstr, "hipparcos") ) gal_checkset_allocate_copy("public.hipparcos", &p->datasetuse); else if( !strcmp(p->datasetstr, "tycho2") ) gal_checkset_allocate_copy("public.tycho2", &p->datasetuse); else gal_checkset_allocate_copy(p->datasetstr, &p->datasetuse); } /* Currently we assume GAIA only uses TAP. */ p->usetap=1; } void gaia_prepare(struct queryparams *p) { /* Gaia-specific settings. */ gaia_sanity_checks(p); /* Set the URLs, note that this is a simply-linked list, so we need to reverse it in the end (with 'gal_list_str_reverse') to have the same order here. */ gal_list_str_add(&p->urls, "https://gea.esac.esa.int/tap-server/tap/sync", 0); /* Name of default RA Dec columns. */ if(p->ra_name==NULL) p->ra_name="ra"; if(p->dec_name==NULL) p->dec_name="dec"; /* Basic sanity checks. */ tap_sanity_checks(p); } gnuastro-0.22/bin/query/ned.c0000644000175000017500000001507114551337306011622 /********************************************************************* Settings for NED. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2021-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "tap.h" /* Basic sanity checks. */ static void ned_sanity_checks(struct queryparams *p) { /* Set the summarized names. */ if(p->datasetstr) { /* Correct the dataset name if 'objdir' is given. */ if( !strcmp(p->datasetstr, "objdir") ) gal_checkset_allocate_copy("NEDTAP.objdir", &p->datasetuse); else gal_checkset_allocate_copy(p->datasetstr, &p->datasetuse); /* Database-specific checks. For example, if we should use TAP or not. Note that the user may give 'NEDTAP.objdir', so we can't use the 'if' above (for expanding summarized names). */ if( !strcmp(p->datasetuse, "NEDTAP.objdir") ) p->usetap=1; else if( !strcmp(p->datasetuse, "extinction") ) { /* Crash for options that are not compatible with extinction. */ if( p->radius || p->width || p->range || p->noblank || p->columns || p->head!=GAL_BLANK_SIZE_T || p->sort ) error(EXIT_FAILURE, 0, "NED's extinction calculator returns " "the galactic extinction for a single point (in multiple " "filters), therefore the following options are not " "acceptable with it: '--radius', '--width', '--range', " "'--noblank', '--column', '--head' and '--sort'"); /* Make sure that '--center' is given. */ if(p->center==NULL) error(EXIT_FAILURE, 0, "no coordinate specified! Please use " "'--center' to specify the RA and Dec (in J2000) of " "your desired coordinate, for example " "--center=10.68458,41.269166"); } } else error(EXIT_FAILURE, 0, "no dataset specified! Query only recognizes " "two datasets for NED: 'objdir' and 'extinction'. 'objdir' " "is in the IVOA Table Access Protocol (TAP) format, so you " "can see its available columns before downloading the actual " "data (to only download the small sub-set you need) with this " "command: 'astquery %s --dataset=objdir --info'. However, the " "'extinction' catalog isn't TAP-based, so the '--info' option " "isn't supported (but by its nature, the size of the " "extinction catalog is very small)", p->databasestr); /* Currently NED only has a single table for TAP access, so warn the users about this if they ask for any other table. */ if( p->usetap && ( p->datasetuse==NULL || strcmp(p->datasetuse, "NEDTAP.objdir") ) ) error(EXIT_FAILURE, 0, "NED currently only supports a single " "dataset with the TAP protocol called 'NEDTAP.objdir' " "(which you can also call in Query with '--dataset=objdir'). " "TAP access to more datasets/tables will be provided in " "the future. To see all the column information and select " "the columns you want for your work, please run this command:\n\n" " astquery %s --dataset=objdir --info", p->databasestr); } /* Extinction with NED */ void ned_extinction(struct queryparams *p) { double *darr; char *command; /* If the user wants information, we'll specify a (0,0) center coordinate and continue. In the end, instead of saving the file, we'll just report the metadata. */ if(p->information) error(EXIT_FAILURE, 0, "'--information' is not yet supported for " "NED's extinction calculator"); /* Build the calling command. Note that the query quotes are included by the function building it. */ darr=p->center->array; if( asprintf(&command, "curl%s -o%s 'https://ned.ipac.caltech.edu/cgi-bin/calc?in_csys=Equatorial&out_csys=Equatorial&in_equinox=J2000.0&out_equinox=J2000.0&obs_epoch=2000.0&lon=%fd&lat=%fd&of=xml_main&ext=1'", p->cp.quiet ? " -s" : "", p->downloadname, darr[0], darr[1])<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('command')", __func__); /* Print the calling command for the user to know. */ if(p->dryrun==1 || p->cp.quiet==0) { if(p->dryrun==0) printf("\n"); error(EXIT_SUCCESS, 0, "%s: %s", p->dryrun ? "would run" : "running", command); if(p->dryrun==0) printf("\nDownload status:\n"); } /* Run the command if '--dryrun' isn't called: if the command succeeds 'system' returns 'EXIT_SUCCESS'. */ if(p->dryrun==0) { if(system(command)!=EXIT_SUCCESS) error(EXIT_FAILURE, 0, "the query download command %sfailed%s\n", p->cp.quiet==0 ? "printed above " : "", p->cp.quiet==0 ? "" : " (the command can be printed " "if you don't use the option '--quiet', or '-q')"); } } /* For NED's non-TAP queries. */ void ned_non_tap(struct queryparams *p) { if( !strcmp(p->datasetuse, "extinction") ) ned_extinction(p); } void ned_prepare(struct queryparams *p) { /* NED-specific. */ ned_sanity_checks(p); /* If we should use TAP, do the preparations. */ if(p->usetap) { /* Set the URLs, note that this is a simply-linked list, so we need to reverse it in the end (with 'gal_list_str_reverse') to have the same order here. */ gal_list_str_add(&p->urls, "https://ned.ipac.caltech.edu/tap/sync", 0); /* Name of default RA Dec columns. */ if(p->ra_name==NULL) p->ra_name="ra"; if(p->dec_name==NULL) p->dec_name="dec"; /* Basic sanity checks. */ tap_sanity_checks(p); } else ned_non_tap(p); } gnuastro-0.22/bin/query/tap.c0000644000175000017500000003363114551337306011642 /********************************************************************* Table Access Protocol (TAP) based download of given query. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2021-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include "main.h" #include "ui.h" /* Basic sanity checks necessary in all TAP-based databases. */ void tap_sanity_checks(struct queryparams *p) { /* Checks in case a raw query isn't given. */ if(p->query==NULL) { /* If '--center' is given, '--radius' is also necessary. */ if(p->center || p->overlapwith) { /* Make sure the radius is given, and that it isn't zero. */ if(p->center && p->radius==NULL && p->width==NULL) error(EXIT_FAILURE, 0, "the '--radius' ('-r') or " "'--width' ('-w') options are necessary with " "the '--center' ('-C') option"); } /* If no dataset is explicitly given, let the user know that a catalog reference is necessary. */ if( p->information==0 && p->datasetuse==NULL ) error(EXIT_FAILURE, 0, "no '--dataset' specified! To get the " "list of available datasets (tables) in this database, " "please run with '--information' (or '-i'). Note that some " "databases (like VizieR) have (tens of) thousands of " "datasets. Hence, for a fast result, its best to limit the " "downloaded and displayed information list by also adding " "--limitinfo=\"SEARCH\" (where 'SEARCH' can be any string " "in the description of the dataset, usually project or " "author names) for example:\n\n" " astquery %s -i --limitinfo=\"SEARCH_STRING\"\n\n" "For more, see the documentation of 'astquery' and the " "\"Available databases\" section of the book for more:\n\n" " info astquery\n" " info gnuastro \"Available databases\"\n", p->databasestr); } } /* The database string needs to be quoted if it contains a slash. */ static char * tap_dataset_quote_if_necessary(struct queryparams *p) { int quote=0; char *c, *quoted; /* Parse the string for bad characters */ for(c=p->datasetuse; *c!='\0'; ++c) if(*c=='/') { quote=1; break; } /* Add quotes around the database string. */ if(quote) { /* Allocate the new string with quotes. */ if( asprintf("ed, "\"%s\"", p->datasetuse)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('quoted')", __func__); } else quoted=p->datasetuse; /* Return the possibly quoted string. */ return quoted; } /* Construct the query for metadata download. */ static char * tap_query_construct_meta(struct queryparams *p) { char *querystr; /* If a dataset is given, build the query to download the metadata of that dataset. Otherwise, get the metadata of the full database. */ if(p->datasetuse) { if( asprintf(&querystr, "\"SELECT * FROM TAP_SCHEMA.columns " "WHERE table_name = '%s'\"", p->datasetuse)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('querystr')", __func__); } else { if(p->limitinfo) { if( asprintf(&querystr, "\"SELECT * FROM TAP_SCHEMA.tables " "WHERE description LIKE '%%%s%%'\"", p->limitinfo)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('querystr')", __func__); } else gal_checkset_allocate_copy("\"SELECT * FROM TAP_SCHEMA.tables\"", &querystr); } /* Clean up and return. */ return querystr; } /* Construct the spatial-constraints criteria if necessary. */ static char * tap_query_construct_spatial(struct queryparams *p) { size_t ndim; double width2, *center, *darray; char *regionstr=NULL, *spatialstr=NULL; double *ocenter=NULL, *owidth=NULL, *omin=NULL, *omax=NULL; /* If the user wanted an overlap with an image, then calculate it. */ if(p->overlapwith) { /* Calculate the Sky coverage of the overlap dataset. */ gal_wcs_coverage(p->overlapwith, p->cp.hdu, &ndim, &ocenter, &owidth, &omin, &omax, "--hdu"); /* Make sure a WCS existed in the file. */ if(owidth==NULL) error(EXIT_FAILURE, 0, "%s (hdu %s): contains no WCS to " "derive the sky coverage", p->overlapwith, p->cp.hdu); } /* For easy reading. */ center = p->overlapwith ? ocenter : p->center->array; /* Write the region. */ if(p->radius) { darray=p->radius->array; if( asprintf(®ionstr, "CIRCLE('ICRS', %.8f, %.8f, %g)", center[0], center[1], darray[0])<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('regionstr')", __func__); } else if(p->width || p->overlapwith) { darray = p->overlapwith ? owidth : p->width->array; width2 = ( (p->overlapwith || p->width->size==2) ? darray[1] : darray[0] ); if( asprintf( ®ionstr, "BOX('ICRS', %.8f, %.8f, %.8f, %.8f)", center[0], center[1], darray[0], width2 )<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('regionstr')", __func__); } /* Build the final spatial constraint query string. Note on the quotations: the final query is surrounded by single-quotes ('). However, we need the single quotes around 'ICRS' in this command (both in the final string below and the ones above). So just before the first 'ICRS', we end the single-quote and start a double quote and keep it until the end. Finally, we add a single quote again so all other components of the query can assume that the single-quote environment is active.*/ if( asprintf(&spatialstr, "1=CONTAINS( POINT('\"'ICRS', %s, %s), %s )\"'", p->ra_name, p->dec_name, regionstr)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('querystr')", __func__); /* Clean up and return. */ free(regionstr); if(p->overlapwith) { free(ocenter); free(owidth); free(omin); free(omax); } return spatialstr; } static void tap_query_construct_noblank(struct queryparams *p, char **outstr) { gal_list_str_t *tmp; char *noblankstr=NULL, *prevstr=*outstr; for(tmp=p->noblank; tmp!=NULL; tmp=tmp->next) { /* Write 'rangestr'. */ if(prevstr) { if( asprintf(&noblankstr, "%s AND %s IS NOT NULL", prevstr, tmp->v) < 0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('noblankstr', 1)", __func__); free(prevstr); } else if( asprintf(&noblankstr, "%s IS NOT NULL", tmp->v) < 0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('noblankstr', 2)", __func__); /* Put the 'rangestr' in previous-range string for the next round.*/ prevstr=noblankstr; } /* Set the final output pointer. */ *outstr=noblankstr; } static void tap_query_construct_range(struct queryparams *p, char **outstr) { double *darray; gal_data_t *tmp; char *rangestr=NULL, *prevstr=*outstr; for(tmp=p->range; tmp!=NULL; tmp=tmp->next) { /* Write 'rangestr'. */ darray=tmp->array; if(prevstr) { if( asprintf(&rangestr, "%s AND %s>=%g AND %s<=%g", prevstr, tmp->name, darray[0], tmp->name, darray[1]) < 0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('rangestr', 1)", __func__); free(prevstr); } else if( asprintf(&rangestr, "%s>=%g AND %s<=%g", tmp->name, darray[0], tmp->name, darray[1]) < 0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('rangestr', 2)", __func__); /* Put the 'rangestr' in previous-range string for the next round.*/ prevstr=rangestr; } /* Set the final output pointer. */ *outstr=rangestr; } static char * tap_query_construct_sort(struct queryparams *p) { gal_list_str_t *tmp; char *sortstr=NULL, *prevstr=NULL; for(tmp=p->sort; tmp!=NULL; tmp=tmp->next) { /* Write 'rangestr'. */ if(prevstr) { if( asprintf(&sortstr, "%s,%s", prevstr, tmp->v) < 0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('sortstr', 1)", __func__); free(prevstr); } else if( asprintf(&sortstr, "ORDER BY %s", tmp->v) < 0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('sortstr', 2)", __func__); /* Put the 'rangestr' in previous-range string for the next round.*/ prevstr=sortstr; } /* Set the final output pointer. */ return sortstr; } /* Construct the query for data download. */ static char * tap_query_construct_data(struct queryparams *p) { char *sortstr=NULL; char *headstr=NULL, allcols[]="*"; char *datasetuse, *valuelimitstr=NULL; char *querystr, *columns, *spatialstr=NULL; /* If the dataset has special characters (like a slash) it needs to be quoted. */ datasetuse=tap_dataset_quote_if_necessary(p); /* If certain columns have been requested use them, otherwise download all existing columns.*/ columns = p->columns ? ui_strlist_to_str(p->columns) : allcols; /* If the user only wants the top few rows, only return them. */ if(p->head!=GAL_BLANK_SIZE_T) if( asprintf(&headstr, "TOP %zu", p->head)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('head')", __func__); /* Build the 'noblank' and 'range' criteria. No blank goes first because it is easier to check (for the server), thus the more time-consuming range check can be done on fewer rows. */ if(p->noblank) tap_query_construct_noblank(p, &valuelimitstr); if(p->range) tap_query_construct_range(p, &valuelimitstr); /* If the user has asked for a spatial constraint. */ if(p->overlapwith || p->center) spatialstr=tap_query_construct_spatial(p); /* If the user has asked to sort the columns. */ if(p->sort) sortstr=tap_query_construct_sort(p); /* Write the automatically generated query string. */ if( asprintf(&querystr, "'SELECT %s %s FROM %s %s %s %s %s %s'", headstr ? headstr : "", columns, datasetuse, ( valuelimitstr || spatialstr ? "WHERE" : ""), valuelimitstr ? valuelimitstr : "", ( valuelimitstr && spatialstr ? "AND" : "" ), spatialstr ? spatialstr : "", sortstr ? sortstr : "")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('querystr')", __func__); /* Clean up and return. */ if(datasetuse!=p->datasetuse) free(datasetuse); if(valuelimitstr) free(valuelimitstr); if(columns!=allcols) free(columns); if(spatialstr) free(spatialstr); return querystr; } void tap_download(struct queryparams *p) { gal_list_str_t *url; char *command, *querystr; /* If the raw query has been given, use it. */ querystr = ( p->query ? p->query : ( p->information ? tap_query_construct_meta(p) : tap_query_construct_data(p) ) ); /* Go over the given URLs for this server. */ for(url=p->urls; url!=NULL; url=url->next) { /* Build the calling command. Note that the query quotes are included by the function building it. */ if( asprintf(&command, "curl%s -o%s --form LANG=ADQL " "--form FORMAT=fits --form REQUEST=doQuery " "--form QUERY=%s %s", p->cp.quiet ? " -s" : "", p->downloadname, querystr, url->v)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation ('command')", __func__); /* Print the calling command for the user to know. */ if(p->dryrun==1 || p->cp.quiet==0) { if(p->dryrun==0) printf("\n"); error(EXIT_SUCCESS, 0, "%s: %s", p->dryrun ? "would run" : "running", command); if(p->dryrun==0) printf("\nDownload status:\n"); } /* Run the command: if it succeeds ('system' returns zero), then stop parsing with a break. If it fails, then see if this is the last URL or not. If its the last one ('url->next' is NULL), then exit with a failure, otherwise, just let the user know that this download failed, but continue with the next URLs. */ if(p->dryrun) break; else { if(system(command)==EXIT_SUCCESS) break; else error(url->next ? EXIT_SUCCESS : EXIT_FAILURE, 0, "the query download command %sfailed%s\n", p->cp.quiet==0 ? "printed above " : "", p->cp.quiet==0 ? "" : " (the command can be printed " "if you don't use the option '--quiet', or '-q')"); } } /* Keep the executed command (to put in the final file's meta-data). */ p->finalcommand=command; /* Clean up. */ if(querystr!=p->query) free(querystr); } gnuastro-0.22/bin/query/vizier.c0000644000175000017500000001315514551337306012365 /********************************************************************* Settings for VizieR. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2021-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "tap.h" static void vizier_sanity_checks(struct queryparams *p) { /* VizieR specific: if the user has asked for '--information', but without '--limitinfo', print a notice to introduce 'limitinfo'. */ if(p->datasetstr==NULL && p->information && p->limitinfo==NULL) { fprintf(stderr, "\n--------------------\n"); error(EXIT_SUCCESS, 0, "WARNING: The full VizieR metadata " "(information) is more than 20Mb, and contains tens of " "thousands entries. You can use '--limitinfo=XXXX' to " "constrain the downloaded and displayed metadata to " "those that have 'XXXX' in the description (for example " "a certain author, or a certain project name). This will " "greatly improve the speed of your search"); fprintf(stderr, "--------------------\n"); } /* Set the summarized names. */ if(p->datasetstr) { /* Check if the dataset name is a known summary. */ if( !strcmp(p->datasetstr, "2mass") ) gal_checkset_allocate_copy("II/246/out", &p->datasetuse); else if( !strcmp(p->datasetstr, "akarifis") ) gal_checkset_allocate_copy("II/298/fis", &p->datasetuse); else if( !strcmp(p->datasetstr, "allwise") ) gal_checkset_allocate_copy("II/328/allwise", &p->datasetuse); else if( !strcmp(p->datasetstr, "apass9") ) gal_checkset_allocate_copy("II/336/apass9", &p->datasetuse); else if( !strcmp(p->datasetstr, "des1") ) gal_checkset_allocate_copy("II/357/des_dr1", &p->datasetuse); else if( !strcmp(p->datasetstr, "gaiaedr3") ) gal_checkset_allocate_copy("I/350/gaiaedr3", &p->datasetuse); else if( !strcmp(p->datasetstr, "gaiadr3") ) gal_checkset_allocate_copy("I/355/gaiadr3", &p->datasetuse); else if( !strcmp(p->datasetstr, "galex5") ) gal_checkset_allocate_copy("II/312/ais", &p->datasetuse); else if( !strcmp(p->datasetstr, "nomad") ) gal_checkset_allocate_copy("I/297/out", &p->datasetuse); else if( !strcmp(p->datasetstr, "panstarrs1") ) gal_checkset_allocate_copy("II/349/ps1", &p->datasetuse); else if( !strcmp(p->datasetstr, "pmx1") ) gal_checkset_allocate_copy("I/317/sample", &p->datasetuse); else if( !strcmp(p->datasetstr, "usnob1") ) gal_checkset_allocate_copy("I/284/out", &p->datasetuse); else if( !strcmp(p->datasetstr, "ucac5") ) gal_checkset_allocate_copy("I/340/ucac5", &p->datasetuse); else if( !strcmp(p->datasetstr, "unwise") ) gal_checkset_allocate_copy("II/363/unwise", &p->datasetuse); else if( !strcmp(p->datasetstr, "catwise") ) { if(p->ra_name==NULL) p->ra_name="RA_ICRS"; if(p->dec_name==NULL) p->dec_name="DE_ICRS"; gal_checkset_allocate_copy("II/365/catwise", &p->datasetuse); } else if( !strcmp(p->datasetstr, "gaiadr2") ) { if(p->ra_name==NULL) p->ra_name="ra_epoch2000"; if(p->dec_name==NULL) p->dec_name="dec_epoch2000"; gal_checkset_allocate_copy("I/345/gaia2", &p->datasetuse); } else if( !strcmp(p->datasetstr, "sdss12") ) { if(p->ra_name==NULL) p->ra_name="RA_ICRS"; if(p->dec_name==NULL) p->dec_name="DE_ICRS"; gal_checkset_allocate_copy("V/147/sdss12", &p->datasetuse); } /* The given dataset is not a known summary. */ else gal_checkset_allocate_copy(p->datasetstr, &p->datasetuse); } /* Currently we assume VizieR only uses TAP. */ p->usetap=1; } void vizier_prepare(struct queryparams *p) { /* VizieR-specific. */ vizier_sanity_checks(p); /* Set the URLs, note that this is a simply-linked list, so we need to reverse it in the end (with 'gal_list_str_reverse') to have the same order here. Other possible VizieR TAP servers that don't seem to be working now (extracted from the 'visquery' script): http://vizier.cfa.harvard.edu/TAPVizieR/tap/sync http://vizier.nao.ac.jp/TAPVizieR/tap/sync http://data.bao.ac.cn/TAPVizieR/tap/sync http://vizier.ast.cam.ac.uk/TAPVizieR/tap/sync http://www.ukirt.jach.hawaii.edu/TAPVizieR/tap/sync http://vizier.inasan.ru/TAPVizieR/tap/sync */ gal_list_str_add(&p->urls, "http://tapvizier.u-strasbg.fr/TAPVizieR/tap/sync", 0); /* Name of default RA Dec columns. */ if(p->ra_name==NULL) p->ra_name="RAJ2000"; if(p->dec_name==NULL) p->dec_name="DEJ2000"; /* Basic sanity checks. */ tap_sanity_checks(p); } gnuastro-0.22/bin/query/main.h0000644000175000017500000000677114551337306012014 /********************************************************************* Query - Retreive data from a remote data server. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include #include /* Progarm names. */ #define PROGRAM_NAME "query" /* Program full name. */ #define PROGRAM_EXEC "astquery" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Main program parameters structure */ struct queryparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ uint8_t keeprawdownload; /* Keep raw downloaded file. */ uint8_t information; /* Print information on database. */ uint8_t dryrun; /* Only print command, don't run it. */ char *limitinfo; /* Limit retried dataset information. */ int database; /* ID of database to use. */ char *datasetstr; /* ID of dataset in database to use. */ size_t head; /* The number of top rows. */ char *overlapwith; /* Image to use instead of center. */ gal_list_str_t *ccol; /* Coordinate column names in dataset.*/ gal_data_t *center; /* Center position of query. */ gal_data_t *radius; /* Radius around center. */ gal_data_t *range; /* Range of magnitudes to query. */ gal_list_str_t *noblank; /* Return rows that aren't blank. */ gal_list_str_t *sort; /* Sort output by given column(s). */ gal_data_t *width; /* Width of box around center. */ char *query; /* Raw query string. */ gal_list_str_t *columns; /* Columns to extract from database. */ /* Internal variables. */ char *datasetuse; /* Used dataset string. */ char *databasestr; /* Name of input database. */ char *downloadname; /* Temporary output name. */ size_t outtableinfo[2]; /* To print in output. */ gal_list_str_t *urls; /* List of URLs to use. */ char *ra_name; /* Name of RA column. */ char *dec_name; /* Name of Dec columns. */ char *finalcommand; /* The final command used. */ int usetap; /* If a TAP-download should be used. */ /* Output: */ time_t rawtime; /* Starting time of the program. */ }; #endif gnuastro-0.22/bin/query/authors-cite.h0000644000175000017500000000301714551337306013465 /********************************************************************* Query - Retreive data from a remote data server. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/query/args.h0000644000175000017500000001512014551337306012010 /********************************************************************* Query - Retreive data from a remote data server. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Input options */ { "ccol", UI_KEY_CCOL, "STR,STR", 0, "Coordinate (RA, Dec) column names in dataset.", GAL_OPTIONS_GROUP_INPUT, &p->ccol, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Output related options. */ { "keeprawdownload", UI_KEY_KEEPRAWDOWNLOAD, 0, 0, "Don't delete raw downloaded file.", GAL_OPTIONS_GROUP_OUTPUT, &p->keeprawdownload, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "information", UI_KEY_INFORMATION, 0, 0, "Print database or dataset information.", GAL_OPTIONS_GROUP_OUTPUT, &p->information, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "limitinfo", UI_KEY_LIMITINFO, "STR", 0, "Only retrieve dataset info. with this string.", GAL_OPTIONS_GROUP_INPUT, &p->limitinfo, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "dry-run", UI_KEY_DRYRUN, 0, 0, "Only print the download command, don't run it.", GAL_OPTIONS_GROUP_OUTPUT, &p->dryrun, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Database and dataset. */ { "query", UI_KEY_QUERY, "STR", 0, "The raw query as a simple string.", GAL_OPTIONS_GROUP_INPUT, &p->query, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, }, /* Generate query automatically */ { 0, 0, 0, 0, "Generate query internally (not compatible with '--query'):", UI_GROUP_GENQUERY, }, { "dataset", UI_KEY_DATASET, "STR", 0, "Name of dataset in database.", UI_GROUP_GENQUERY, &p->datasetstr, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, }, { "overlapwith", UI_KEY_OVERLAPWITH, "FITS", 0, "Set query region to overlap with this image.", GAL_OPTIONS_GROUP_INPUT, &p->overlapwith, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, }, { "center", UI_KEY_CENTER, "FLT,FLT", 0, "Center coords. to select by region in sky.", UI_GROUP_GENQUERY, &p->center, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "radius", UI_KEY_RADIUS, "FLT", 0, "Radius around --center to select targets.", UI_GROUP_GENQUERY, &p->radius, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "width", UI_KEY_WIDTH, "FLT[,FLT]", 0, "Width of box around --center to select targets.", UI_GROUP_GENQUERY, &p->width, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "range", UI_KEY_RANGE, "STR,FLT:FLT", 0, "Range of selected targets in given column.", UI_GROUP_GENQUERY, &p->range, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_name_and_float64s }, { "noblank", UI_KEY_NOBLANK, "STR[,STR]", 0, "No rows with blank value in given column(s).", UI_GROUP_GENQUERY, &p->noblank, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "column", UI_KEY_COLUMN, "STR", 0, "Column names to download from catalog.", UI_GROUP_GENQUERY, &p->columns, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "head", UI_KEY_HEAD, "INT", 0, "Only download given number of top rows.", UI_GROUP_GENQUERY, &p->head, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, }, { "sort", UI_KEY_SORT, "STR[,STR]", 0, "Sort based on values of given columns.", UI_GROUP_GENQUERY, &p->sort, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure ------------------------------- NOTE: these parts can be left untouched.*/ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/query/ui.h0000644000175000017500000000424314551337306011475 /********************************************************************* Query - Retreive data from a remote data server. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_GENQUERY = GAL_OPTIONS_GROUP_AFTER_COMMON, }; /* Available letters for short options: a e f j m n p t u x y z A B E G J R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_KEEPRAWDOWNLOAD = 'k', UI_KEY_INFORMATION = 'i', UI_KEY_LIMITINFO = 'L', UI_KEY_DATABASE = 'd', UI_KEY_QUERY = 'Q', UI_KEY_DATASET = 's', UI_KEY_CENTER = 'C', UI_KEY_OVERLAPWITH = 'v', UI_KEY_RADIUS = 'r', UI_KEY_RANGE = 'g', UI_KEY_NOBLANK = 'b', UI_KEY_COLUMN = 'c', UI_KEY_WIDTH = 'w', UI_KEY_HEAD = 'H', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_CCOL = 1000, UI_KEY_SORT, UI_KEY_DRYRUN, }; char * ui_strlist_to_str(gal_list_str_t *input); void ui_read_check_inputs_setup(int argc, char *argv[], struct queryparams *p); void ui_free_report(struct queryparams *p, struct timeval *t1); #endif gnuastro-0.22/bin/query/query.h0000644000175000017500000000233114551337306012221 /********************************************************************* Query - Retreive data from a remote data server. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef QUERY_H #define QUERY_H #include "main.h" enum query_databases { QUERY_DATABASE_INVALID, QUERY_DATABASE_ASTRON, QUERY_DATABASE_GAIA, QUERY_DATABASE_NED, QUERY_DATABASE_VIZIER, }; void query(struct queryparams *p); #endif gnuastro-0.22/bin/query/astron.h0000644000175000017500000000206314551337306012364 /********************************************************************* Settings for Astron. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2021-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ASTRON_H #define ASTRON_H #include "main.h" void astron_prepare(struct queryparams *p); #endif gnuastro-0.22/bin/query/gaia.h0000644000175000017500000000206114551337306011755 /********************************************************************* Settings for ESA's Gaia. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef GAIA_H #define GAIA_H #include "main.h" void gaia_prepare(struct queryparams *p); #endif gnuastro-0.22/bin/query/ned.h0000644000175000017500000000204714551337306011626 /********************************************************************* Settings for NED. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2021-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef NED_H #define NED_H #include "main.h" void ned_prepare(struct queryparams *p); #endif gnuastro-0.22/bin/query/tap.h0000644000175000017500000000220114551337306011634 /********************************************************************* Table Access Protocol (TAP) based download of given query. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2021-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef TAP_H #define TAP_H #include "main.h" void tap_sanity_checks(struct queryparams *p); void tap_download(struct queryparams *p); #endif gnuastro-0.22/bin/query/vizier.h0000644000175000017500000000206214470407761012370 /********************************************************************* Settings for VizieR. Query is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad akhlaghi Contributing author(s): Copyright (C) 2021-202 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef VIZIER_H #define VIZIER_H #include "main.h" void vizier_prepare(struct queryparams *p); #endif gnuastro-0.22/bin/segment/0000755000175000017500000000000014557514202011257 5gnuastro-0.22/bin/segment/Makefile.am0000644000175000017500000000326414557211443013241 ## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2018-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astsegment ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astsegment_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astsegment_SOURCES = main.c ui.c segment.c clumps.c EXTRA_DIST = main.h authors-cite.h args.h ui.h segment.h clumps.h \ kernel-2d.h kernel-3d.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astsegment.conf astsegment-3d.conf gnuastro-0.22/bin/segment/astsegment.conf0000644000175000017500000000256214551566633014236 # Default parameters (System) for Segment. # Segment is part of GNU Astronomy Utilities. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astsegment --help # Full list of options, short doc. # $ astsegment -P # Print all options and used values. # $ info astsegment # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: khdu 1 chdu 1 dhdu DETECTIONS skyhdu SKY stdhdu SKY_STD minskyfrac 0.6 minnumfalse 100 # Tessellation largetilesize 200,200 # Segmentation snminarea 15 keepmaxnearriver 0 snquant 0.95 gthresh 0.5 minriverlength 15 objbordersn 1 # Operating mode continueaftercheck 0 gnuastro-0.22/bin/segment/astsegment-3d.conf0000644000175000017500000000255614551566633014545 # Default parameters (System) for Segment (in 3D). # Segment is part of GNU Astronomy Utilities. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ` '[space], or tab). Lines starting with `#' are ignored. # # For more information, please run these commands: # # $ astsegment --help # Full list of options, short doc. # $ astsegment -P # Print all options and used values. # $ info astsegment # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: khdu 1 chdu 1 dhdu DETECTIONS skyhdu SKY stdhdu SKY_STD minskyfrac 0.6 minnumfalse 100 # Tessellation numchannels 1,1,1 tilesize 15,15,5 largetilesize 50,50,15 # Segmentation snminarea 15 keepmaxnearriver 0 snquant 0.95 gthresh 0.5 minriverlength 15 objbordersn 1 # Operating mode continueaftercheck 0 gnuastro-0.22/bin/segment/Makefile.in0000644000175000017500000034024114557513747013265 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astsegment$(EXEEXT) subdir = bin/segment ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astsegment_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) segment.$(OBJEXT) \ clumps.$(OBJEXT) astsegment_OBJECTS = $(am_astsegment_OBJECTS) am__DEPENDENCIES_1 = astsegment_DEPENDENCIES = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/clumps.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/segment.Po ./$(DEPDIR)/ui.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astsegment_SOURCES) DIST_SOURCES = $(astsegment_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib astsegment_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astsegment_SOURCES = main.c ui.c segment.c clumps.c EXTRA_DIST = main.h authors-cite.h args.h ui.h segment.h clumps.h \ kernel-2d.h kernel-3d.h dist_sysconf_DATA = astsegment.conf astsegment-3d.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/segment/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/segment/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astsegment$(EXEEXT): $(astsegment_OBJECTS) $(astsegment_DEPENDENCIES) $(EXTRA_astsegment_DEPENDENCIES) @rm -f astsegment$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astsegment_OBJECTS) $(astsegment_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clumps.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/segment.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/clumps.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/segment.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/clumps.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/segment.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/segment/main.c0000644000175000017500000000311014551337306012264 /********************************************************************* Segment - Segment initial labels based on signal structure. Segment is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" #include "segment.h" /* Main function */ int main (int argc, char *argv[]) { struct timeval t1; struct segmentparams p={{{0},0},{0},0}; /* Set the starting time. */ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Segment. */ segment(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully. */ return EXIT_SUCCESS; } gnuastro-0.22/bin/segment/ui.c0000644000175000017500000011004714551566633011774 /********************************************************************* Segment - Segment initial labels based on signal structure. Segment is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will segment an initially " "labeled region based on structure with the signal. It will first find " "true clumps (local maxima), estimate which ones have strong connections, " "and then grow them to cover the full area of each detection.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct segmentparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; p->medstd = NAN; p->minstd = NAN; p->maxstd = NAN; p->snquant = NAN; p->clumpsnthresh = NAN; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_HDU: cp->coptions[i].doc="HDU containing values (science image)."; break; case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_TYPE: case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_IGNORECASE: case GAL_OPTIONS_KEY_STDINTIMEOUT: cp->coptions[i].flags=OPTION_HIDDEN; break; case GAL_OPTIONS_KEY_TILESIZE: case GAL_OPTIONS_KEY_MINMAPSIZE: case GAL_OPTIONS_KEY_NUMCHANNELS: case GAL_OPTIONS_KEY_INTERPNUMNGB: case GAL_OPTIONS_KEY_REMAINDERFRAC: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; cp->coptions[i].doc="'txt', 'fits-ascii', 'fits-binary'."; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct segmentparams *p = state->input; /* Pass 'ygal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(p->inputname) argp_error(state, "only one argument (input file) should be given"); else if(arg[0]!='\0') p->inputname=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct segmentparams *p) { /* If the full area is to be used as a single detection, we can't find the S/N value from the un-detected regions, so the user must have given the 'clumpsnthresh' option. */ if( p->detectionname && !strcmp(p->detectionname, DETECTION_ALL) && isnan(p->clumpsnthresh) ) error(EXIT_FAILURE, 0, "'--clumpsnthresh' ('-%c') not given.\n\n" "When '--detection=all' (the whole input dataset is assumed to " "be a detection), Segment can't use the undetected pixels to find " "the signal-to-noise ratio of true clumps. Therefore it is " "mandatory to provide a signal-to-noise ratio manually", UI_KEY_CLUMPSNTHRESH); /* If the convolved HDU is given. */ if(p->convolvedname && p->chdu==NULL) error(EXIT_FAILURE, 0, "no value given to '--convolvedhdu'. When the " "'--convolved' option is called (to specify a convolved dataset " "and avoid convolution) it is mandatory to also specify a HDU " "for it"); /* For the options that make tables, the table format option is mandatory. */ if( p->checksn && p->cp.tableformat==0 ) error(EXIT_FAILURE, 0, "'--tableformat' is necessary with the " "'--checksn' option.\n" "Please see description for '--tableformat' after running the " "following command for more information (use 'SPACE' to go down " "the page and 'q' to return to the command-line):\n\n" " $ info gnuastro \"Input Output options\""); /* Kernel checks. */ if(p->kernelname && strcmp(p->kernelname, UI_NO_CONV_KERNEL_NAME)) { /* Check if it exists. */ gal_checkset_check_file(p->kernelname); /* If its FITS, see if a HDU has been provided. */ if( gal_fits_file_recognized(p->kernelname) && p->khdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified for kernel. When the " "kernel is a FITS file, a HDU must also be specified. You " "can use the '--khdu' option and give it the HDU number " "(starting from zero), extension name, or anything " "acceptable by CFITSIO"); } /* If the S/N quantile is less than 0.1 (an arbitrary small value), this is probably due to forgetting that this is the purity level (higher-is-better), not the contamination level (lower-is-better). This actually happened in a few cases: where we wanted a false detection rate of 0.0001 (a super-high value!), and instead of inputing 0.9999, we mistakenly gave '--snquant' a value of '0.0001'. We were thus fully confused with the output (an extremely low value) and thought its a bug, while it wasn't! */ if(p->snquant<0.1) fprintf(stderr, "\nWARNING: Value of '--snquant' ('-c') is %g. Note " "that this is not a contamination rate (where lower is " "better), it is a purity rate (where higher is better). If you " "intentionally asked for such a low purity level, please " "ignore this warning\n\n", p->snquant); } static void ui_check_options_and_arguments(struct segmentparams *p) { /* Make sure an input file name was given and if it was a FITS file, that a HDU is also given. */ if(p->inputname) { /* Check if it exists. */ gal_checkset_check_file(p->inputname); /* If it is FITS, a HDU is also mandatory. */ if( gal_fits_file_recognized(p->inputname) && p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified. When the input is a FITS " "file, a HDU must also be specified, you can use the '--hdu' " "('-h') option and give it the HDU number (starting from " "zero), extension name, or anything acceptable by CFITSIO"); } else error(EXIT_FAILURE, 0, "no input file is specified"); } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static void ui_set_used_names(struct segmentparams *p) { p->useddetectionname = p->detectionname ? p->detectionname : p->inputname; p->usedstdname = ( p->stdname ? p->stdname : ( ( p->detectionname && strcmp(p->detectionname, DETECTION_ALL) ) ? p->detectionname : p->inputname ) ); } static void ui_set_output_names(struct segmentparams *p) { char *output=p->cp.output; char *basename = output ? output : p->inputname; /* Main program output. */ if(output) { /* Delete the file if it already exists. */ gal_checkset_writable_remove(p->cp.output, p->inputname, 0, p->cp.dontdelete); /* When the output name is given (possibly with directory information), the check images will also be put in that same directory. */ p->cp.keepinputdir=1; } else p->cp.output=gal_checkset_automatic_output(&p->cp, p->inputname, "_segmented.fits"); /* Tile check. */ if(p->cp.tl.checktiles) p->cp.tl.tilecheckname=gal_checkset_automatic_output(&p->cp, basename, "_tiles.fits"); /* Clump S/N values. */ if(p->checksn) { p->clumpsn_s_name=gal_checkset_automatic_output(&p->cp, basename, ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "_clumpsn_sky.txt" : "_clumpsn.fits") ); p->clumpsn_d_name=gal_checkset_automatic_output(&p->cp, basename, ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? "_clumpsn_det.txt" : "_clumpsn.fits") ); } /* Segmentation steps. */ if(p->checksegmentation) p->segmentationname=gal_checkset_automatic_output(&p->cp, basename, "_segcheck.fits"); } static void ui_prepare_inputs(struct segmentparams *p) { int32_t *i, *ii; gal_data_t *maxd, *ccin, *blankflag, *ccout=NULL; /* Read the input as a single precision floating point dataset. */ p->input = gal_array_read_one_ch_to_type(p->inputname, p->cp.hdu, NULL, GAL_TYPE_FLOAT32, p->cp.minmapsize, p->cp.quietmmap, "--hdu"); p->input->wcs = gal_wcs_read(p->inputname, p->cp.hdu, p->cp.wcslinearmatrix, 0, 0, &p->input->nwcs, "--hdu"); p->input->ndim=gal_dimension_remove_extra(p->input->ndim, p->input->dsize, p->input->wcs); /* Set the name (the sky will be subtracted here in 'ui.c' before any processing. We want the name to be similar to be descriptive and remind the user that the sky (which may be given to Segment) has been subtracted (this is also the same name in NoiseChisel's output). */ if(p->input->name) free(p->input->name); gal_checkset_allocate_copy("INPUT-NO-SKY", &p->input->name); /* Check for blank values to help later processing. */ gal_blank_present(p->input, 1); /* Segment currently only works on 2D datasets (images). */ if(p->input->ndim!=2 && p->input->ndim!=3) error(EXIT_FAILURE, 0, "%s (hdu: %s) has %zu dimensions but Segment " "can only operate on 2D (images) or 3D (cube) datasets", p->inputname, p->cp.hdu, p->input->ndim); /* If a convolved image is given, read it. */ if(p->convolvedname) { /* Read the input convolved image. */ p->conv = gal_array_read_one_ch_to_type(p->convolvedname, p->chdu, NULL, GAL_TYPE_FLOAT32, p->cp.minmapsize, p->cp.quietmmap, "--chdu"); p->conv->ndim=gal_dimension_remove_extra(p->conv->ndim, p->conv->dsize, p->conv->wcs); p->conv->wcs=gal_wcs_copy(p->input->wcs); /* Make sure it is the same size as the input. */ if( gal_dimension_is_different(p->input, p->conv) ) error(EXIT_FAILURE, 0, "%s (hdu %s), given to '--convolved' and " "'--chdu', is not the same size as the input (%s, hdu: %s)", p->convolvedname, p->chdu, p->inputname, p->cp.hdu); } /* Read the detected label image and check its size. When the user gives '--detection=all', then the whole input is assumed to be a single detection. */ if( strcmp(p->useddetectionname, DETECTION_ALL) ) { /* Read the dataset into memory. */ p->olabel = gal_array_read_one_ch(p->useddetectionname, p->dhdu, NULL, p->cp.minmapsize, p->cp.quietmmap, "--dhdu"); p->olabel->ndim=gal_dimension_remove_extra(p->olabel->ndim, p->olabel->dsize, NULL); if( gal_dimension_is_different(p->input, p->olabel) ) error(EXIT_FAILURE, 0, "'%s' (hdu: %s) and '%s' (hdu: %s) have a" "different dimension/size", p->useddetectionname, p->dhdu, p->inputname, p->cp.hdu); /* Make sure the detected labels are not floating point. */ if(p->olabel->type==GAL_TYPE_FLOAT32 || p->olabel->type==GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "%s (hdu: %s) has a '%s' type. The detection " "(labeled) map must have an integer type (labels/classes can " "only be integers). If the pixel values are integers, but only " "the numerical type of the image is floating-point, you can " "use the command below to convert it to a 32-bit (signed) " "integer type:\n\n" " $ astarithmetic %s int32 -h%s\n\n", p->useddetectionname, p->dhdu, gal_type_name(p->olabel->type, 1), p->useddetectionname, p->dhdu); /* If the input has blank values, set them to blank values in the labeled image too. It doesn't matter if the labeled image has blank pixels that aren't blank on the input image. */ if(gal_blank_present(p->input, 1)) { blankflag=gal_blank_flag(p->input); gal_blank_flag_apply(p->olabel, blankflag); gal_data_free(blankflag); } /* Get the maximum value of the input (total number of labels if they are separate). If the maximum is 1 (the image is a binary image), then apply the connected components algorithm to separate the connected regions. The user is allowed to supply a simple binary image.*/ maxd=gal_statistics_maximum(p->olabel); maxd=gal_data_copy_to_new_type_free(maxd, GAL_TYPE_INT64); p->numdetections = *((uint64_t *)(maxd->array)); if( p->numdetections == 1 ) { ccin=gal_data_copy_to_new_type_free(p->olabel, GAL_TYPE_UINT8); p->numdetections=gal_binary_connected_components(ccin, &ccout, ccin->ndim); gal_data_free(ccin); p->olabel=ccout; } else p->olabel = gal_data_copy_to_new_type_free(p->olabel, GAL_TYPE_INT32); /* Write the WCS into the objects dataset too. */ p->olabel->wcs=gal_wcs_copy(p->input->wcs); } else { /* Set the total number of detections to 1. */ p->numdetections=1; /* Allocate the array. */ p->olabel=gal_data_alloc(NULL, GAL_TYPE_INT32, p->input->ndim, p->input->dsize, p->input->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Initialize it to 1. */ ii=(i=p->olabel->array)+p->olabel->size; do *i++=1; while(iinput->ndim; /* Import the default kernel. */ #include "kernel-2d.h" #include "kernel-3d.h" /* If a kernel file is given, then use it. Otherwise, use the default kernel. */ if(p->kernelname) { /* Read the kernel. */ if( strcmp(p->kernelname, UI_NO_CONV_KERNEL_NAME) ) { /* Read the kernel into memory. */ p->kernel=gal_fits_img_read_kernel(p->kernelname, p->khdu, p->cp.minmapsize, p->cp.quietmmap, "--khdu"); p->kernel->ndim=gal_dimension_remove_extra(p->kernel->ndim, p->kernel->dsize, NULL); /* Make sure it has the same dimensions as the input. */ if( p->kernel->ndim != p->input->ndim ) error(EXIT_FAILURE, 0, "%s (hdu %s): is %zuD, however, %s (%s) " "is a %zuD dataset", p->kernelname, p->khdu, p->kernel->ndim, p->inputname, p->cp.hdu, p->input->ndim); } else p->kernel=NULL; } else { /* Allocate space for the kernel (we don't want to use the statically allocated array. */ p->kernel=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, p->input->ndim, ndim==2 ? kernel_2d_dsize : kernel_3d_dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Copy the staticly allocated default array into `p->kernel'. */ k = ndim==2 ? kernel_2d : kernel_3d; ff = (f=p->kernel->array) + p->kernel->size; do *f=*k++; while(++fcp.tl, *ltl=&p->ltl; /* Check the tile parameters for the small tile sizes and make the tile structure. */ gal_tile_full_sanity_check(p->inputname, p->cp.hdu, p->input, tl); gal_tile_full_two_layers(p->input, tl); gal_tile_full_permutation(tl); /* Make the large tessellation, except for the size, the rest of the parameters are the same as the small tile sizes. */ ltl->numchannels = tl->numchannels; ltl->remainderfrac = tl->remainderfrac; ltl->workoverch = tl->workoverch; ltl->checktiles = tl->checktiles; ltl->oneelempertile = tl->oneelempertile; gal_tile_full_sanity_check(p->inputname, p->cp.hdu, p->input, ltl); gal_tile_full_two_layers(p->input, ltl); gal_tile_full_permutation(ltl); /* If the input has blank elements, then set the appropriate flag for each tile.*/ if( p->input->flag & GAL_DATA_FLAG_HASBLANK ) { gal_tile_block_blank_flag(tl->tiles, p->cp.numthreads); gal_tile_block_blank_flag(ltl->tiles, p->cp.numthreads); } /* Make the tile check image if requested. */ if(tl->checktiles) { /* Large tiles. */ check=gal_tile_block_check_tiles(ltl->tiles); gal_fits_img_write(check, tl->tilecheckname, NULL, 0); gal_data_free(check); /* Small tiles. */ check=gal_tile_block_check_tiles(tl->tiles); gal_fits_img_write(check, tl->tilecheckname, NULL, 0); gal_data_free(check); /* If 'continueaftercheck' hasn't been called, abort NoiseChisel. */ if(!p->continueaftercheck) ui_abort_after_check(p, tl->tilecheckname, NULL, "showing all tiles over the image"); /* Free the name. */ free(tl->tilecheckname); tl->tilecheckname=NULL; } } static void ui_check_size(gal_data_t *base, gal_data_t *comp, size_t numtiles, char *bname, char *bhdu, char *cname, char *chdu) { if( gal_dimension_is_different(base, comp) && numtiles!=comp->size ) error(EXIT_FAILURE, 0, "%s (hdu: %s): doesn't have the right size " "(%zu elements or pixels).\n\n" "It must either be the same size as '%s' (hdu: '%s'), or " "it must have the same number of elements as the total " "number of tiles in the tessellation (%zu). In the latter " "case, each pixel is assumed to be a fixed value for a " "complete tile.\n\n" "Run with '-P' to see the (tessellation) options/settings " "and their values). For more information on tessellation in " "Gnuastro, please run the following command (use the arrow " "keys for up and down and press 'q' to return to the " "command-line):\n\n" " $ info gnuastro tessellation", cname, chdu, comp->size, bname, bhdu, numtiles); } /* Subtract 'sky' from the input dataset depending on its size (it may be the whole array or a tile-values array).. */ static void ui_subtract_sky(gal_data_t *in, gal_data_t *sky, struct gal_tile_two_layer_params *tl) { size_t tid; gal_data_t *tile; float *s, *f, *ff, *skyarr=sky->array; /* It is the same size as the input or a single value. */ if( gal_dimension_is_different(in, sky)==0 || sky->size==1) { s=sky->array; ff=(f=in->array)+in->size; if(sky->size==1) { if(*s!=0.0) do *f-=*s; while(++ftottiles==sky->size ) { /* Go over all the tiles. */ for(tid=0; tidtottiles; ++tid) { /* For easy reading. */ tile=&tl->tiles[tid]; /* Subtract the Sky value from the input image. */ GAL_TILE_PARSE_OPERATE(tile, NULL, 0, 0, {*i-=skyarr[tid];}); } } /* The size must have been checked before, so if control reaches here, we have a bug! */ else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. For some reason, the size doesn't match", __func__, PACKAGE_BUGREPORT); } /* The Sky and Sky standard deviation images can be a 'oneelempertile' image (only one element/pixel for a tile). So we need to do some extra checks on them (after reading the tessellation). */ static float ui_read_std_and_sky(struct segmentparams *p) { size_t one=1; char *tailptr; float tmpval, skyval=NAN; struct gal_tile_two_layer_params *tl=&p->cp.tl; gal_data_t *sky, *keys=gal_data_array_calloc(3); /* See if the name used for the standard deviation is a filename or a value. When the string is only a number (and nothing else), 'tailptr' will point to the end of the string ('\0'). When the string doesn't start with a number, it will point to the start of the string. However, file names might also be things like '1_std.fits'. In such cases, 'strtod' will return '1.0' and 'tailptr' will be '_std.fits'. Thus the most robust test is to see if 'tailptr' is the NULL string character. */ tmpval=strtod(p->usedstdname, &tailptr); if(*tailptr=='\0') { /* Allocate the dataset to keep the value and write it in. */ p->std=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); *(float *)(p->std->array) = tmpval; } else { /* Make sure a HDU is also given. */ if(p->stdhdu==NULL) error(EXIT_FAILURE, 0, "no value given to '--stdhdu'.\n\n" "When the Sky standard deviation is a dataset, it is mandatory " "specify which HDU/extension it is present in. The file can " "be specified explicitly with '--std'. If not, segment will " "use the file given to '--detection'. If that is also not " "called, it will look into the main input file (with no " "option)"); /* Read the STD image. */ p->std=gal_array_read_one_ch_to_type(p->usedstdname, p->stdhdu, NULL, GAL_TYPE_FLOAT32, p->cp.minmapsize, p->cp.quietmmap, "--stdhdu"); p->std->ndim=gal_dimension_remove_extra(p->std->ndim, p->std->dsize, NULL); /* Make sure it has the correct size. */ ui_check_size(p->input, p->std, tl->tottiles, p->inputname, p->cp.hdu, p->usedstdname, p->stdhdu); } /* When the Standard deviation dataset (not single value) is made by NoiseChisel, it puts three basic statistics of the pre-interpolation distribution of standard deviations in 'MEDSTD', 'MINSTD' and 'MAXSTD'. The 'MEDSTD' in particular is most important because it can't be inferred after the interpolations and it can be useful in MakeCatalog later to give a more accurate estimate of the noise level. So if they are present, we will read them here and write them to the STD output (which is created when '--rawoutput' is not given). */ if(!p->rawoutput && p->std->size>1) { keys[0].next=&keys[1]; keys[1].next=&keys[2]; keys[2].next=NULL; keys[0].array=&p->medstd; keys[0].name="MEDSTD"; keys[1].array=&p->minstd; keys[1].name="MINSTD"; keys[2].array=&p->maxstd; keys[2].name="MAXSTD"; keys[0].type=keys[1].type=keys[2].type=GAL_TYPE_FLOAT32; gal_fits_key_read(p->usedstdname, p->stdhdu, keys, 0, 0, "--stdhdu"); if(keys[0].status) p->medstd=NAN; if(keys[1].status) p->minstd=NAN; if(keys[2].status) p->maxstd=NAN; keys[0].name=keys[1].name=keys[2].name=NULL; keys[0].array=keys[1].array=keys[2].array=NULL; gal_data_array_free(keys, 3, 1); } /* Similar to '--std' above. */ if(p->skyname) { tmpval=strtod(p->skyname, &tailptr); if(*tailptr=='\0') { sky=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); *(float *)(sky->array) = skyval = tmpval; } else { /* Make sure a HDU is also given. */ if(p->skyhdu==NULL) error(EXIT_FAILURE, 0, "no value given to '--skyhdu'.\n\n" "When the Sky is a dataset, it is mandatory specify " "which HDU/extension it is present in. The file can be " "specified explicitly with '--sky'. If it is a single " "value, you can just pass the value to '--sky' and no " "HDU will be necessary"); /* Read the Sky dataset. */ sky=gal_array_read_one_ch_to_type(p->skyname, p->skyhdu, NULL, GAL_TYPE_FLOAT32, p->cp.minmapsize, p->cp.quietmmap, "--skyhdu"); sky->ndim=gal_dimension_remove_extra(sky->ndim, sky->dsize, NULL); /* Check its size. */ ui_check_size(p->input, sky, tl->tottiles, p->inputname, p->cp.hdu, p->skyname, p->skyhdu); } /* Subtract the sky from the input. */ ui_subtract_sky(p->input, sky, tl); /* If a convolved image is given, subtract the Sky from that too. */ if(p->conv) ui_subtract_sky(p->conv, sky, tl); /* Clean up. */ gal_data_free(sky); } /* Return the sky value (possibly necessary in verbose mode). */ return skyval; } static float ui_preparations(struct segmentparams *p) { /* Set the input names. */ ui_set_used_names(p); /* Prepare the names of the outputs. */ ui_set_output_names(p); /* Read the input datasets. */ ui_prepare_inputs(p); /* If a convolved image was given, read it in. Otherwise, read the given kernel. */ if(p->conv==NULL) ui_prepare_kernel(p); /* Prepare the tessellation. */ ui_prepare_tiles(p); /* Prepare the (optional Sky, and) Sky Standard deviation image. */ return ui_read_std_and_sky(p); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct segmentparams *p) { float sky; char *stdunit; struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Prepare all the options as FITS keywords to write in output later. */ gal_options_as_fits_keywords(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ sky=ui_preparations(p); /* Let the user know that processing has started. */ if(!p->cp.quiet) { /* Basic inputs. */ printf(PROGRAM_NAME" "PACKAGE_VERSION" started on %s", ctime(&p->rawtime)); printf(" - Using %zu CPU thread%s\n", p->cp.numthreads, p->cp.numthreads==1 ? "." : "s."); printf(" - Input: %s (hdu: %s)\n", p->inputname, p->cp.hdu); /* Sky value information. */ if(p->skyname) { if( isnan(sky) ) printf(" - Sky: %s (hdu: %s)\n", p->skyname, p->skyhdu); else printf(" - Sky: %g\n", sky); } /* Sky Standard deviation information. */ stdunit = p->variance ? "VAR" : "STD"; if(p->std->size>1) printf(" - Sky %s: %s (hdu: %s)\n", stdunit, p->usedstdname, p->stdhdu); else printf(" - Sky %s: %g\n", stdunit, *(float *)(p->std->array) ); /* Convolution information. */ if(p->convolvedname) printf(" - Convolved input: %s (hdu: %s)\n", p->convolvedname, p->chdu); else { if(p->kernelname) { if( strcmp(p->kernelname, UI_NO_CONV_KERNEL_NAME) ) printf(" - Kernel: %s (hdu: %s)\n", p->kernelname, p->khdu); else printf(" - No convolution requested.\n"); } else printf(" - Kernel: FWHM=1.5 pixel Gaussian.\n"); } printf(" - Detection: %s (hdu: %s)\n", p->useddetectionname, p->dhdu); } } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_abort_after_check(struct segmentparams *p, char *filename, char *file2name, char *description) { char *name; if(file2name) { if( asprintf(&name, "'%s' and '%s'", filename, file2name)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&name, "'%s'", filename)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } /* Let the user know that NoiseChisel is aborting. */ fprintf(stderr, "------------------------------------------------\n" "%s aborted for a check\n" "------------------------------------------------\n" "%s (%s) has been created.\n\n" "If you want %s to continue its processing AND save any " "requested check outputs, please run it again with " "'--continueaftercheck'.\n" "------------------------------------------------\n", PROGRAM_NAME, name, description, PROGRAM_NAME); /* Clean up. */ free(name); ui_free_report(p, NULL); /* Abort. */ exit(EXIT_SUCCESS); } void ui_free_report(struct segmentparams *p, struct timeval *t1) { /* Free the allocated arrays: */ free(p->cp.hdu); free(p->cp.output); gal_data_free(p->std); gal_data_free(p->input); gal_data_free(p->kernel); gal_data_free(p->binary); gal_data_free(p->olabel); gal_data_free(p->clabel); if(p->khdu) free(p->khdu); if(p->chdu) free(p->chdu); if(p->dhdu) free(p->dhdu); if(p->skyhdu) free(p->skyhdu); if(p->stdhdu) free(p->stdhdu); if(p->stdname) free(p->stdname); if(p->kernelname) free(p->kernelname); if(p->detectionname) free(p->detectionname); if(p->convolvedname) free(p->convolvedname); if(p->conv!=p->input) gal_data_free(p->conv); if(p->clumpsn_s_name) free(p->clumpsn_s_name); if(p->clumpsn_d_name) free(p->clumpsn_d_name); if(p->segmentationname) free(p->segmentationname); /* Print the final message. */ if(!p->cp.quiet && t1) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); } gnuastro-0.22/bin/segment/segment.c0000644000175000017500000015143214551566633013024 /********************************************************************* Segment - Segment initial labels based on signal structure. Segment is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "clumps.h" #include "segment.h" /***********************************************************************/ /***************** Preparations *****************/ /***********************************************************************/ static void segment_convolve(struct segmentparams *p) { struct timeval t1; struct gal_tile_two_layer_params *tl=&p->cp.tl; /* Convovle with sharper kernel. */ if(p->conv==NULL) { /* Do the convolution if a kernel was requested. */ if(p->kernel) { /* Make the convolved image. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); p->conv = gal_convolve_spatial(tl->tiles, p->kernel, p->cp.numthreads, 1, tl->workoverch, 0); /* Report and write check images if necessary. */ if(!p->cp.quiet) gal_timing_report(&t1, "Convolved with given kernel.", 1); } else p->conv=p->input; } /* Make necessary corrections to the convolved array. */ if(p->conv!=p->input) { /* Set the flags (most importantly, the blank flags). */ p->conv->flag = p->input->flag; /* Set the name. */ if(p->conv->name) free(p->conv->name); gal_checkset_allocate_copy("CONVOLVED", &p->conv->name); } /* Set the values to build clumps on. We are mainly doing this to avoid the accidentially using different arrays when building clumps on the undetected and detected regions. */ p->clumpvals=p->conv; } static void segment_initialize(struct segmentparams *p) { uint8_t *b; float *f, minv; gal_data_t *min; int32_t *o, *c, *cf; /* Allocate the clump labels image and the binary image. */ p->clabel=gal_data_alloc(NULL, p->olabel->type, p->olabel->ndim, p->olabel->dsize, p->olabel->wcs, 1, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); p->binary=gal_data_alloc(NULL, GAL_TYPE_UINT8, p->olabel->ndim, p->olabel->dsize, p->olabel->wcs, 1, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); p->clabel->flag=p->input->flag; p->binary->wcs=gal_wcs_copy(p->input->wcs); p->clabel->wcs=gal_wcs_copy(p->input->wcs); /* Prepare the 'binary', 'clabel' and 'olabel' arrays. */ b=p->binary->array; o=p->olabel->array; f=p->input->array; cf=(c=p->clabel->array)+p->clabel->size; do { if(isnan(*f++)) *o = *c = GAL_BLANK_INT32; else { /* Initialize the binary array. */ *b = *o > 0; /* A small sanity check. */ if(*o<0 && *o!=GAL_BLANK_INT32) error(EXIT_FAILURE, 0, "%s (hdu: %s) has negative value(s). " "Each non-zero pixel in this image must be positive (a " "counter, counting from 1).", p->useddetectionname, p->dhdu); } ++o; ++b; } while(++cstd->size>1) { min=gal_statistics_minimum(p->std); minv=*(float *)(min->array); gal_data_free(min); } else minv=*(float *)(p->std->array); if(p->variance) minv=sqrt(minv); p->cpscorr = minv>1 ? 1.0 : minv; } /***********************************************************************/ /***************** Relabeling (grown) clumps *****************/ /***********************************************************************/ /* Correct the label of an detection when it doesn't need segmentation (it is fully one object). The final labels for the object(s) with a detected region will be set later (don't forget that we have detections that are composed of multiple objects). So the labels within each detection start from 1.*/ static void segment_relab_noseg(struct clumps_thread_params *cltprm) { int32_t *olabel=cltprm->clprm->p->olabel->array; size_t *s=cltprm->indexs->array, *sf=s+cltprm->indexs->size; do olabel[ *s ] = 1; while(++snumtrueclumps+1; struct segmentparams *p=cltprm->clprm->p; size_t ndim=p->input->ndim, *dsize=p->input->dsize; size_t mdsize[2]={amwidth, amwidth}; gal_data_t *nums_d=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 2, mdsize, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); gal_data_t *sums_d=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 2, mdsize, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); gal_data_t *adjacency_d=gal_data_alloc(NULL, GAL_TYPE_UINT8, 2, mdsize, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); float *imgss=p->input->array; int32_t *olabel=p->olabel->array; double var=cltprm->std*cltprm->std; uint8_t *adjacency=adjacency_d->array; size_t nngb=gal_dimension_num_neighbors(ndim); size_t *dinc=gal_dimension_increment(ndim, dsize); size_t *s, *sf, i, j, ii, rpnum, *nums=nums_d->array; double ave, rpsum, c=sqrt(1/p->cpscorr), *sums=sums_d->array; int32_t *ngblabs=gal_pointer_allocate(GAL_TYPE_UINT32, nngb, 0, __func__, "ngblabs"); /* Go over all the still-unlabeled pixels (if they exist) and see which labels they touch. In the process, get the average value of the river-pixel values and put them in the respective adjacency matrix. Note that at this point, the rivers are also part of the "diffuse" regions. So we don't need to go over all the indexs of this object, only its diffuse indexs. */ sf=(s=cltprm->diffuseindexs->array)+cltprm->diffuseindexs->size; do /* We only want to work on pixels that have already been identified as touching more than one label: river pixels. */ if( olabel[ *s ]==GAL_LABEL_RIVER ) { /* Initialize the values. */ i=ii=0; rpnum=1; /* River-pixel number of points used. */ rpsum=imgss[*s]; /* River-pixel sum of values used. */ memset(ngblabs, 0, nngb*sizeof *ngblabs); /* Check all the fully-connected neighbors of this pixel and see if it touches a label or not */ GAL_DIMENSION_NEIGHBOR_OP(*s, ndim, dsize, ndim, dinc, { if( olabel[nind] > 0 ) { /* Add this neighbor's value and increment the number. */ if( !isnan(imgss[nind]) ) { ++rpnum; rpsum+=imgss[nind]; } /* Go over the already found neighbors and see if this grown clump has already been considered or not. */ for(i=0;i0) { printf("%zu, %zu:\n", *s%dsize[1]+1, *s/dsize[1]+1); for(i=0;ii) for(i=0;ip->minriverlength) /* There is a connection. */ { /* For easy reading. */ ave=sums[ii]/nums[ii]; /* In case the average is negative (only possible if 'sums' is negative), don't change the adjacency: it is already initialized to zero. Note that even an area of 1 is acceptable, and we put no area criteria here, because the fact that a river exists between two clumps is important. */ if( ave>0.0f && ( c * ave / sqrt(ave+var) ) > p->objbordersn ) { adjacency[ii]=1; /* We want to set both sides of the */ adjacency[ j * amwidth + i ] = 1; /* Symmetric matrix. */ } } } /* For a check: if(cltprm->id==XXX) { printf("=====================\n"); printf("%zu:\n--------\n", cltprm->id); for(i=1;i %u\n", j, nums[ii], sums[ii], c*ave/sqrt(ave+var), adjacency[ii]); } } printf("\n"); } } */ /* Calculate the new labels for each grown clump. */ cltprm->clumptoobj = gal_binary_connected_adjacency_matrix(adjacency_d, &cltprm->numobjects); /* Clean up and return. */ free(dinc); free(ngblabs); gal_data_free(nums_d); gal_data_free(sums_d); gal_data_free(adjacency_d); } /* For a large number of clumps, 'segment_relab_to_objects_array' will consume too much memory and can completely fill the memory. So we need to use a list-based adjacency solution. */ typedef struct segment_relab_list_t { size_t num; double sum; size_t ngbid; struct segment_relab_list_t *next; } segment_relab_list_t; static void segment_relab_list_add(struct segment_relab_list_t **list, size_t ngbid, double value) { int done=0; struct segment_relab_list_t *tmp=NULL; /* Check if the desired index has already been found or not. Note that if 'list' is empty, then it will never enter the loop.*/ for(tmp=*list; tmp!=NULL; tmp=tmp->next) if( tmp->ngbid == ngbid ) { tmp->sum += value; ++tmp->num; done=1; break; } /* Either the list was empty, or the desired index didn't exist in it. So we need to allocate a new node and add it to the list. */ if(done==0) { /* Allocate a new node. */ errno=0; tmp=malloc(sizeof *tmp); if(tmp==NULL) error(EXIT_FAILURE, errno, "%s: couldn't allocate %zu bytes " "for 'tmp'", __func__, sizeof tmp); /* Fill in the node. */ tmp->num=1; tmp->sum=value; tmp->ngbid=ngbid; /* Put the node at the top of the list. */ tmp->next = *list ? *list : NULL; *list=tmp; } } static void segment_relab_to_objects_list(struct clumps_thread_params *cltprm) { size_t amwidth=cltprm->numtrueclumps+1; struct segmentparams *p=cltprm->clprm->p; size_t ndim=p->input->ndim, *dsize=p->input->dsize; int addadj; float *imgss=p->input->array; size_t *s, *sf, i, j, ii, rpnum; int32_t *olabel=p->olabel->array; double var=cltprm->std*cltprm->std; gal_list_sizet_t **adjacency, *atmp; segment_relab_list_t **rlist, *rtmp; double ave, rpsum, c=sqrt(1/p->cpscorr); size_t nngb=gal_dimension_num_neighbors(ndim); size_t *dinc=gal_dimension_increment(ndim, dsize); int32_t *ngblabs=gal_pointer_allocate(GAL_TYPE_UINT32, nngb, 0, __func__, "ngblabs"); /* Allocate the two lists to keep the number and sum, as well as the final adjacency matrix. */ errno=0; rlist=calloc(amwidth, sizeof *rlist); if(rlist==NULL) error(EXIT_FAILURE, errno, "%s: couldn't allocate %zu bytes for 'rlist'", __func__, amwidth * (sizeof *rlist)); errno=0; adjacency=calloc(amwidth, sizeof *adjacency); if(adjacency==NULL) error(EXIT_FAILURE, errno, "%s: couldn't allocate %zu bytes for 'adjacency'", __func__, amwidth * (sizeof *adjacency)); /* Go over all the still-unlabeled pixels (if they exist) and see which labels they touch. In the process, get the average value of the river-pixel values and put them in the respective adjacency matrix. Note that at this point, the rivers are also part of the "diffuse" regions. So we don't need to go over all the indexs of this object, only its diffuse indexs. */ sf=(s=cltprm->diffuseindexs->array)+cltprm->diffuseindexs->size; do /* We only want to work on pixels that have already been identified as touching more than one label: river pixels. */ if( olabel[ *s ]==GAL_LABEL_RIVER ) { /* Initialize the values. */ i=ii=0; rpnum=1; /* River-pixel number of points used. */ rpsum=imgss[*s]; /* River-pixel sum of values used. */ memset(ngblabs, 0, nngb*sizeof *ngblabs); /* Check all the fully-connected neighbors of this pixel and see if it touches a label or not */ GAL_DIMENSION_NEIGHBOR_OP(*s, ndim, dsize, ndim, dinc, { if( olabel[nind] > 0 ) { /* Add this neighbor's value and increment the number. */ if( !isnan(imgss[nind]) ) { ++rpnum; rpsum+=imgss[nind]; } /* Go over the already found neighbors and see if this grown clump has already been considered or not. */ for(i=0;i0) { printf("%zu, %zu:\n", *s%dsize[1]+1, *s/dsize[1]+1); for(i=0;ii) for(i=0;inext) { if(rtmp->num > p->minriverlength) /* There is a connection. */ { /* For easy reading. */ ave = rtmp->sum / rtmp->num; /* In case the average is negative (only possible if 'sums' is negative), don't change the adjacency: it is already initialized to zero. Note that even an area of 1 is acceptable, and we put no area criteria here, because the fact that a river exists between two clumps is important. */ if( ave>0.0f && ( c * ave / sqrt(ave+var) ) > p->objbordersn ) { addadj=1; for(atmp=adjacency[i]; atmp!=NULL; atmp=atmp->next) if(atmp->v==rtmp->ngbid) { addadj=0; break; } if(addadj) { gal_list_sizet_add(&adjacency[i], rtmp->ngbid); gal_list_sizet_add(&adjacency[rtmp->ngbid], i); } } } } /* For a check: if(cltprm->id==2) { printf("=====================\n"); printf("%zu:\n--------\n", cltprm->id); for(i=1; inext) { if(rtmp->num) { ave=rtmp->sum/rtmp->num; printf(" ...%zu: N:%-4zu S:%-10.2f S/N: %-10.2f\n", rtmp->ngbid, rtmp->num, rtmp->sum, c*ave/sqrt(ave+var)); } } printf("FINAL: "); for(atmp=adjacency[i]; atmp!=NULL; atmp=atmp->next) printf("%zu ", atmp->v); printf("\n\n"); } exit(0); } */ /* Calculate the new labels for each grown clump. */ cltprm->clumptoobj=gal_binary_connected_adjacency_list(adjacency, amwidth, p->cp.minmapsize, p->cp.quietmmap, &cltprm->numobjects); /* Clean up. */ for(i=1; inext; free(rlist[i]); rlist[i]=rtmp; } for(i=1; iclprm->p; size_t *s, *sf; size_t i, amwidth=cltprm->numtrueclumps+1; int32_t *clumptoobj, *olabel=p->olabel->array; /* Find the final object IDs if there is any list of diffuse pixels. It can happen that we don't have a list of diffuse pixels when the user sets a very high 'gthresh' threshold and wants to make sure that each clump is a separate object. So we need to define the number of objects and 'clumptoobj' manually.*/ if(cltprm->diffuseindexs->size) { /* See if we should use a matrix-based adjacent finding (good for small numbers) or a list-based method (necessary for large numbers). Here we'll set the limit to 1000, because of this: the adjacency array will be 1e6 pixels in three types (size_t, double and uint8_t), so it will consume (8+8+1)*1e6 bytes which is 17 megabytes and reasonable. But the same argument for a 10000 limit would be 17*e8 bytes or 1.7GB which is not reasonable. Note that cases with +600000 have also been encountered (wide images of dense fields near the Milky way disk). */ if( amwidth>1000 ) segment_relab_to_objects_list(cltprm); else segment_relab_to_objects_array(cltprm); clumptoobj = cltprm->clumptoobj->array; } else { /* Allocate the 'clumptoobj' array. */ cltprm->clumptoobj = gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &amwidth, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); clumptoobj = cltprm->clumptoobj->array; /* Fill in the 'clumptoobj' array with the indexs of the objects. */ for(i=0;inumobjects = cltprm->numtrueclumps; } /* For a check if(cltprm->id==XXXX) { printf("NUMTRUECLUMPS: %zu\n----------\n", cltprm->numtrueclumps); for(i=0;inumtrueclumps+1;++i) printf("\t%zu --> %d\n", i, clumptoobj[i]); printf("=== numobjects: %zu====\n", cltprm->numobjects); exit(0); } */ /* Correct all the labels. */ sf=(s=cltprm->indexs->array)+cltprm->indexs->size; do if( olabel[*s] > 0 ) olabel[*s] = clumptoobj[ olabel[*s] ]; while(++snumobjects, numtrueclumps=cltprm->numtrueclumps; int32_t *clumptoobj=cltprm->clumptoobj->array; int32_t *clabel=cltprm->clprm->p->clabel->array; size_t i, *s=cltprm->indexs->array, *sf=s+cltprm->indexs->size; size_t *nclumpsinobj=gal_pointer_allocate(GAL_TYPE_SIZE_T, numobjects+1, 1, __func__, "nclumpsinobj"); int32_t *newlabs=gal_pointer_allocate(GAL_TYPE_UINT32, numtrueclumps+1, 1, __func__, "newlabs"); /* Fill both arrays. */ for(i=1;i0) clabel[*s] = newlabs[ clabel[*s] ]; while(++sclprm; int32_t startinglab; uint8_t noobjects=clprm->p->noobjects; size_t *s=cltprm->indexs->array, *sf=s+cltprm->indexs->size; int32_t *clabel=clprm->p->clabel->array, *olabel=clprm->p->olabel->array; /* Lock the mutex if we are working on more than one thread. NOTE: it is very important to keep the number of operations within the mutex to a minimum so other threads don't get delayed. */ if(clprm->p->cp.numthreads>1) pthread_mutex_lock(&clprm->labmutex); /* Set the starting label for re-labeling (THIS HAS TO BE BEFORE CORRECTING THE TOTAL NUMBER OF CLUMPS/OBJECTS). */ startinglab = noobjects ? clprm->totclumps : clprm->totobjects; /* Save the total number of clumps and objects. */ clprm->totclumps += cltprm->numtrueclumps; if( !noobjects ) clprm->totobjects += cltprm->numobjects; /* Unlock the mutex (if it was locked). */ if(clprm->p->cp.numthreads>1) pthread_mutex_unlock(&clprm->labmutex); /* Increase all the object labels by 'startinglab'. */ if( noobjects ) { if(cltprm->numtrueclumps>0) { do if(clabel[*s]>0) clabel[*s] += startinglab; while(++sparams); struct segmentparams *p=clprm->p; size_t i, *s, *sf; gal_data_t *topinds; struct clumps_thread_params cltprm; int32_t *clabel=p->clabel->array, *olabel=p->olabel->array; /* Initialize the general parameters for this thread. */ cltprm.clprm = clprm; /* Go over all the detections given to this thread (counting from zero.) */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Set the ID of this detection, note that for the threads, we counted from zero, but the IDs start from 1, so we'll add a 1 to the ID given to this thread. */ cltprm.id = tprm->indexs[i]+1; cltprm.indexs = &clprm->labindexs[ cltprm.id ]; cltprm.numinitclumps = cltprm.numtrueclumps = cltprm.numobjects = 0; /* The 'topinds' array is only necessary when the user wants to ignore true clumps with a peak touching a river. */ if(p->keepmaxnearriver==0) { /* Allocate the list of local maxima. For each clump there is going to be one local maxima. But we don't know the number of clumps a-priori, so we'll just allocate the number of pixels given to this detected region. */ topinds=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, cltprm.indexs->dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); cltprm.topinds=topinds->array; } else { cltprm.topinds=NULL; topinds=NULL; } /* Find the clumps over this region. */ cltprm.numinitclumps=gal_label_watershed(p->conv, cltprm.indexs, p->clabel, cltprm.topinds, !p->minima); /* Set all the river pixels to zero (we don't need them any more in the clumps image). */ sf=(s=cltprm.indexs->array) + cltprm.indexs->size; do if( clabel[*s]==GAL_LABEL_RIVER ) clabel[*s]=GAL_LABEL_INIT; while(++ssn[ cltprm.id ].dsize==NULL ) { /* Calculate the S/N table. */ cltprm.sn = &cltprm.clprm->sn[ cltprm.id ]; cltprm.snind = ( cltprm.clprm->snind ? &cltprm.clprm->snind[ cltprm.id ] : NULL ); gal_label_clump_significance(p->clumpvals, p->std, p->clabel, cltprm.indexs, &p->cp.tl, cltprm.numinitclumps, p->snminarea, p->variance, clprm->sky0_det1, cltprm.sn, cltprm.snind); /* If it didn't succeed, then just set the S/N table to NULL. */ if( cltprm.clprm->sn[ cltprm.id ].size==0 ) cltprm.snind=cltprm.sn=NULL; } else cltprm.sn=&clprm->sn[ cltprm.id ]; /* If the user wanted to check the segmentation steps or the clump S/N values in a table, then we have to stop the process at this point. */ if( clprm->step==1 || (p->checksn && !p->continueaftercheck ) ) { gal_data_free(topinds); continue; } /* Only keep true clumps. */ clumps_det_keep_true_relabel(&cltprm); gal_data_free(topinds); /* When only clumps are desired ignore the rest of the process. */ if(!p->noobjects) { /* Abort the looping here if we don't only want clumps. */ if(clprm->step==2) continue; /* Set the internal (with the detection) clump and object labels. Segmenting a detection into multiple objects is only defined when there is more than one true clump over the detection. When there is only one true clump (cltprm->numtrueclumps==1) or none (p->numtrueclumps==0), then just set the required preliminaries to make the next steps be generic for all cases. */ if(cltprm.numtrueclumps<=1) { /* Set the basics. */ cltprm.numobjects=1; segment_relab_noseg(&cltprm); /* If the user wanted a check image, this object doesn't change. */ if( clprm->step >= 3 && clprm->step <= 6) continue; /* If the user has asked for grown clumps in the clumps image instead of the raw clumps, then replace the indexs in the 'clabel' array is well. In this case, there will always be one "clump". */ if(p->grownclumps) { sf=(s=cltprm.indexs->array)+cltprm.indexs->size; do clabel[ *s++ ] = 1; while(ssize) gal_label_grow_indexs(p->olabel, cltprm.diffuseindexs, 1, 1); if(clprm->step==3) { gal_data_free(cltprm.diffuseindexs); continue; } /* If grown clumps are desired instead of the raw clumps, then replace all the grown clumps with those in clabel. */ if(p->grownclumps) { sf=(s=cltprm.indexs->array)+cltprm.indexs->size; do if(olabel[*s]>0) clabel[*s]=olabel[*s]; while(++sstep==4) { gal_data_free(cltprm.clumptoobj); gal_data_free(cltprm.diffuseindexs); continue; } /* Continue the growth and cover the whole area, we don't need the diffuse indexs any more, so after filling the detected region, free the indexs. */ if( cltprm.numobjects == 1 ) segment_relab_noseg(&cltprm); else { /* Correct the labels so every non-labeled pixel can be grown. */ clumps_grow_prepare_final(&cltprm); /* Cover the whole area (using maximum connectivity to not miss any pixels). */ gal_label_grow_indexs(p->olabel, cltprm.diffuseindexs, 0, p->olabel->ndim); /* Make sure all diffuse pixels are labeled. */ if(cltprm.diffuseindexs->size) error(EXIT_FAILURE, 0, "a bug! Please contact us at %s " "to fix it. %zu pixels of detection %zu have not " "been labeled (as an object)", PACKAGE_BUGREPORT, cltprm.diffuseindexs->size, cltprm.id); } gal_data_free(cltprm.diffuseindexs); if(clprm->step==5) { gal_data_free(cltprm.clumptoobj); continue; } /* Correct the clump labels. Note that this is only necessary when there is more than object over the detection or when there were multiple clumps over the detection. */ if(cltprm.numobjects>1) segment_relab_clumps_in_objects(&cltprm); gal_data_free(cltprm.clumptoobj); if(clprm->step==6) {continue;} } } /* Convert the object labels to their final value */ segment_relab_overall(&cltprm); } /* Wait until all the threads finish then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* If the user wanted to see the S/N table in a file, this function will be called and will do the job. */ static void segment_save_sn_table(struct clumps_params *clprm) { char *msg; float *sarr; int32_t *oiarr, *cioarr; gal_list_str_t *comments=NULL; size_t i, j, c=0, totclumps=0; struct segmentparams *p=clprm->p; gal_data_t *sn, *objind, *clumpinobj; /* Find the total number of clumps in all the initial detections. Recall that the 'size' values were one more than the actual number because the labelings start from 1. */ for(i=1;inumdetections+1;++i) if( clprm->sn[i].size > 1 ) totclumps += clprm->sn[i].size-1; /* Allocate the columns for the table. */ sn=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &totclumps, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, "CLUMP_S/N", "ratio", "Signal-to-noise ratio."); objind=gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &totclumps, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, "HOST_DET_ID", "counter", "ID of detection hosting this clump."); clumpinobj=gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &totclumps, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, "CLUMP_ID_IN_OBJ", "counter", "ID of clump in host detection."); /* Fill in the columns. */ sarr=sn->array; oiarr=objind->array; cioarr=clumpinobj->array; for(i=1;inumdetections+1;++i) if( clprm->sn[i].size > 1 ) for(j=1;jsn[i].size;++j) { oiarr[c] = i; cioarr[c] = j; sarr[c] = ((float *)(clprm->sn[i].array))[j]; ++c; } /* Write the comments. */ gal_list_str_add(&comments, "See also: 'CLUMPS_ALL_DET' HDU of " "output with '--checksegmentation'.", 1); if( asprintf(&msg, "S/N values of 'nan': clumps smaller than " "'--snminarea' of %zu.", p->snminarea)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_list_str_add(&comments, msg, 0); gal_list_str_add(&comments, "S/N of clumps over detected regions.", 1); gal_table_comments_add_intro(&comments, PROGRAM_STRING, &p->rawtime); /* Set the column pointers and write them into a table.. */ clumpinobj->next=sn; objind->next=clumpinobj; gal_table_write(objind, NULL, comments, p->cp.tableformat, p->clumpsn_d_name, "DET_CLUMP_SN", 0, 0); /* Clean up. */ gal_data_free(sn); gal_data_free(objind); gal_data_free(clumpinobj); gal_list_str_free(comments, 1); /* Abort NoiseChisel if necessary. */ if(!p->continueaftercheck) ui_abort_after_check(p, p->clumpsn_s_name, ( p->cp.tableformat==GAL_TABLE_FORMAT_TXT ? p->clumpsn_d_name : NULL ), "showing all clump S/N values"); } /* Avoid non-reproducible labels (when built on multiple threads). Note that when working with objects, the clump labels don't need to be re-labeled (they always start from 1 within each object and are thus already thread-safe).*/ static void segment_reproducible_labels(struct segmentparams *p) { size_t i; gal_data_t *new; int32_t currentlab=0, *oldarr, *newarr, *newlabs; gal_data_t *old = p->noobjects ? p->clabel : p->olabel; size_t numlabsplus1 = (p->noobjects ? p->numclumps : p->numobjects) + 1; /* Allocate the necessary datasets. */ new=gal_data_alloc(NULL, old->type, old->ndim, old->dsize, old->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, old->name, old->unit, old->comment); newlabs=gal_pointer_allocate(old->type, numlabsplus1, 0, __func__, "newlabs"); /* Initialize the newlabs array to blank (so we don't relabel things). */ for(i=0;iarray; for(i=0;isize;++i) if( oldarr[i] > 0 && newlabs[ oldarr[i] ]==GAL_BLANK_INT32 ) newlabs[ oldarr[i] ] = ++currentlab; /* For a check. for(i=0;i %d\n", i, newlabs[i]); */ /* Fill the newly labeled dataset. */ newarr=new->array; for(i=0;isize;++i) newarr[i] = oldarr[i]>0 ? newlabs[ oldarr[i] ] : oldarr[i]; /* Clean up. */ free(newlabs); if(p->noobjects) { gal_data_free(p->clabel); p->clabel=new; } else { gal_data_free(p->olabel); p->olabel=new; } } /* Find true clumps over the detected regions. */ static void segment_detections(struct segmentparams *p) { char *msg; struct clumps_params clprm; gal_data_t *labindexs, *claborig, *demo=NULL; /* Get the indexs of all the pixels in each label. */ labindexs=gal_label_indexs(p->olabel, p->numdetections, p->cp.minmapsize, p->cp.quietmmap); /* Initialize the necessary thread parameters. Note that since the object labels begin from one, the 'sn' array will have one extra element.*/ clprm.p=p; clprm.sky0_det1=1; clprm.totclumps=0; clprm.totobjects=0; clprm.snind = NULL; clprm.labindexs=labindexs; clprm.sn=gal_data_array_calloc(p->numdetections+1); /* When more than one thread is to be used, initialize the mutex. */ if( p->cp.numthreads > 1 ) pthread_mutex_init(&clprm.labmutex, NULL); /* Spin off the threads to start the work. Note that several steps are done on each tile within a thread. So if the user wants to check steps, we need to break out of the processing get an over-all output, then reset the input and call it again. So it will be slower, but its is natural, since the user is testing to find the correct combination of parameters for later use. */ if(p->segmentationname) { /* Necessary initializations. */ clprm.step=1; claborig=p->clabel; p->clabel=gal_data_copy(claborig); /* Do each step. */ while( clprm.step<8 /* When the user only wanted clumps, there is no point in continuing beyond step 2. */ && !(p->noobjects && clprm.step>2) /* When the user just wants to check the clump S/N values, then break out of the loop, we don't need the rest of the process any more. */ && !( (p->checksn && !p->continueaftercheck) && clprm.step>1 ) ) { /* Reset the temporary copy of clabel back to its original. */ if(clprm.step>1) memcpy(p->clabel->array, claborig->array, claborig->size*gal_type_sizeof(claborig->type)); /* (Re-)do everything until this step. */ gal_threads_spin_off(segment_on_threads, &clprm, p->numdetections, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap); /* Set the extension name. */ switch(clprm.step) { case 1: demo=p->clabel; demo->name = "DET_CLUMPS_ALL"; if(!p->cp.quiet) { if( asprintf(&msg, "Identified clumps over detections " "(HDU: '%s').", demo->name)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, msg, 2); free(msg); } break; case 2: demo=p->clabel; demo->name = "DET_CLUMPS_TRUE"; if(!p->cp.quiet) { if( asprintf(&msg, "True clumps found " "(HDU: '%s').", demo->name)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, msg, 2); free(msg); } break; case 3: demo=p->olabel; demo->name = "DET_CLUMPS_GROWN"; if(!p->cp.quiet) { gal_timing_report(NULL, "Identify objects...", 1); if( asprintf(&msg, "True clumps grown " "(HDU: '%s').", demo->name)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, msg, 2); free(msg); } break; case 4: demo=p->olabel; demo->name = "DET_OBJ_IDENTIFIED"; if(!p->cp.quiet) { if( asprintf(&msg, "Identified objects over detections " "(HDU: '%s').", demo->name)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, msg, 2); free(msg); } break; case 5: demo=p->olabel; demo->name = "DET_OBJECTS_FULL"; if(!p->cp.quiet) { if( asprintf(&msg, "Objects grown to cover full area " "(HDU: '%s').", demo->name)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, msg, 2); free(msg); } break; case 6: demo=p->clabel; demo->name = "CLUMPS_FINAL"; if(!p->cp.quiet) { if( asprintf(&msg, "Clumps given their final label " "(HDU: '%s').", demo->name)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, msg, 2); free(msg); } break; case 7: demo=p->olabel; demo->name = "OBJECTS_FINAL"; if(!p->cp.quiet) { if( asprintf(&msg, "Objects given their final label " "(HDU: '%s').", demo->name)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, msg, 2); free(msg); } break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so " "we can address the issue. The value %d is not " "recognized for clprm.step", __func__, PACKAGE_BUGREPORT, clprm.step); } /* Write the demonstration array into the check image. */ gal_fits_img_write(demo, p->segmentationname, NULL, 0); /* Increment the step counter. */ ++clprm.step; } /* Clean up (we don't need the original any more). */ gal_data_free(claborig); p->olabel->name = p->clabel->name = NULL; } else { clprm.step=0; gal_threads_spin_off(segment_on_threads, &clprm, p->numdetections, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap); } /* If the user wanted to see the S/N table, then make the S/N table and abort Segment if necessary. */ if(p->checksn) segment_save_sn_table(&clprm); /* Write the final number of objects and clumps to be used beyond this function. */ p->numclumps=clprm.totclumps; p->numobjects=clprm.totobjects; /* Correct the final object labels to start from the bottom of the image. This is necessary because we define objects on multiple threads, so every time a program is run, an object can have a different label! */ segment_reproducible_labels(p); /* Clean up allocated structures and destroy the mutex. */ gal_data_array_free(clprm.sn, p->numdetections+1, 1); gal_data_array_free(labindexs, p->numdetections+1, 1); if( p->cp.numthreads>1 ) pthread_mutex_destroy(&clprm.labmutex); } /***********************************************************************/ /***************** Output *****************/ /***********************************************************************/ void segment_output(struct segmentparams *p) { float *f, *ff; gal_fits_list_key_t *keys=NULL; /* Write the configuration keywords. */ gal_fits_key_write_filename("input", p->inputname, &p->cp.ckeys, 1, p->cp.quiet); gal_fits_key_write(p->cp.ckeys, p->cp.output, "0", "NONE", 1, 1); /* The Sky-subtracted input (if requested). */ if(!p->rawoutput) gal_fits_img_write(p->input, p->cp.output, NULL, 0); /* The clump labels. */ gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "CLUMPSN", 0, &p->clumpsnthresh, 0, "Minimum S/N of true clumps", 0, "ratio", 0); gal_fits_key_list_add(&keys, GAL_TYPE_SIZE_T, "NUMLABS", 0, &p->numclumps, 0, "Total number of clumps", 0, "counter", 0); p->clabel->name="CLUMPS"; gal_fits_img_write(p->clabel, p->cp.output, keys, 1); p->clabel->name=NULL; keys=NULL; /* The object labels. */ if(!p->noobjects) { gal_fits_key_list_add(&keys, GAL_TYPE_SIZE_T, "NUMLABS", 0, &p->numobjects, 0, "Total number of objects", 0, "counter", 0); p->olabel->name="OBJECTS"; gal_fits_img_write(p->olabel, p->cp.output, keys, 1); p->olabel->name=NULL; keys=NULL; } /* The Standard deviation image (if one was actually given). */ if( !p->rawoutput && p->std->size>1 ) { /* See if any keywords should be written (possibly inherited from the detection program). */ if( !isnan(p->maxstd) ) gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "MAXSTD", 0, &p->maxstd, 0, "Maximum raw tile standard deviation", 0, p->input->unit, 0); if( !isnan(p->minstd) ) gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "MINSTD", 0, &p->minstd, 0, "Minimum raw tile standard deviation", 0, p->input->unit, 0); if( !isnan(p->medstd) ) gal_fits_key_list_add(&keys, GAL_TYPE_FLOAT32, "MEDSTD", 0, &p->medstd, 0, "Median raw tile standard deviation", 0, p->input->unit, 0); /* If the input was actually a variance dataset, we'll need to take its square root before writing it. We want this output to be a standard deviation dataset. */ if(p->variance) { ff=(f=p->std->array)+p->std->size; do *f=sqrt(*f); while(++fstd->name="SKY_STD"; if(p->std->size == p->input->size) { p->std->wcs=p->input->wcs; gal_fits_img_write(p->std, p->cp.output, keys, 1); p->std->wcs=NULL; } else gal_tile_full_values_write(p->std, &p->cp.tl, 1, p->cp.output, keys, 1); p->std->name=NULL; } /* Let the user know that the output is written. */ if(!p->cp.quiet) printf(" - Output written to '%s'.\n", p->cp.output); } /***********************************************************************/ /***************** Top-level function *****************/ /***********************************************************************/ void segment(struct segmentparams *p) { float *f; char *msg; int32_t *c, *cf; struct timeval t1; /* Get starting time for later reporting if necessary. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); /* Prepare the inputs. */ segment_convolve(p); segment_initialize(p); /* If a check segmentation image was requested, then start filling it in. */ if(p->segmentationname) { gal_fits_img_write(p->input, p->segmentationname, NULL, 0); if(p->input!=p->conv) gal_fits_img_write(p->conv, p->segmentationname, NULL, 0); p->olabel->name="DETECTION_LABELS"; gal_fits_img_write(p->olabel, p->segmentationname, NULL, 0); p->olabel->name=NULL; } if(!p->cp.quiet) printf(" - Input number of connected components: %zu\n", p->numdetections); /* Find the clump S/N threshold. */ if( isnan(p->clumpsnthresh) ) { if(!p->cp.quiet) gal_timing_report(NULL, "Finding true clumps...", 1); clumps_true_find_sn_thresh(p); } else { if(!p->cp.quiet) { if( asprintf(&msg, "Given S/N for true clumps: %g", p->clumpsnthresh) <0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, msg, 1); free(msg); } } /* Reset the clabel array to find true clumps in objects. */ f=p->input->array; cf=(c=p->clabel->array)+p->clabel->size; do *c = isnan(*f++) ? GAL_BLANK_INT32 : 0; while(++ccp.quiet) { if(p->noobjects) { if( asprintf(&msg, "%zu clump%sfound.", p->numclumps, p->numclumps ==1 ? " " : "s ")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&msg, "%zu object%s""containing %zu clump%sfound.", p->numobjects, p->numobjects==1 ? " " : "s ", p->numclumps, p->numclumps ==1 ? " " : "s ")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } gal_timing_report(&t1, msg, 1); free(msg); } /* If the user wanted to check the segmentation and hasn't called 'continueaftercheck', then stop Segment. */ if(p->segmentationname && !p->continueaftercheck) ui_abort_after_check(p, p->segmentationname, NULL, "showing all segmentation steps"); /* Write the output. */ segment_output(p); } gnuastro-0.22/bin/segment/clumps.c0000644000175000017500000007623514551566633012674 /********************************************************************* Segment - Segment initial labels based on signal structure. Segment is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "clumps.h" /**********************************************************************/ /***************** Grow clumps *****************/ /**********************************************************************/ /* Make the preparations for the intiial growing the clumps to identify objects: a single standard deviation for the whole object and preparing the labels (because the growth is going to happen on the 'olabel' image. */ void clumps_grow_prepare_initial(struct clumps_thread_params *cltprm) { gal_data_t *indexs=cltprm->indexs; gal_data_t *input=cltprm->clprm->p->input; struct segmentparams *p=cltprm->clprm->p; double wcoord[3]={0.0f,0.0f,0.0f}, sum=0.0f; size_t ndiffuse=0, coord[3], tcoord[3], *dindexs; size_t *s, *sf, *dsize=input->dsize, ndim=input->ndim; float glimit, *imgss=input->array, *std=p->std->array; int32_t *olabel=p->olabel->array, *clabel=p->clabel->array; /* Find the flux weighted center (meaningful only for positive valued pixels). */ sf=(s=indexs->array)+indexs->size; do if( imgss[ *s ] > 0.0f ) { gal_dimension_index_to_coord(*s, ndim, dsize, tcoord); sum += imgss[ *s ]; wcoord[0] += imgss[ *s ] * tcoord[0]; wcoord[1] += imgss[ *s ] * tcoord[1]; if(ndim==3) wcoord[1] += imgss[ *s ] * tcoord[2]; } while(++sarray)+indexs->size; do { gal_dimension_index_to_coord(*s, ndim, dsize, tcoord); wcoord[0] += tcoord[0]; wcoord[1] += tcoord[1]; if(ndim==3) wcoord[2] += tcoord[2]; } while(++ssize; } /* Convert floating point coordinates to integers. */ coord[0] = GAL_DIMENSION_FLT_TO_INT(wcoord[0]/sum); coord[1] = GAL_DIMENSION_FLT_TO_INT(wcoord[1]/sum); if(ndim==3) coord[2] = GAL_DIMENSION_FLT_TO_INT(wcoord[2]/sum); /* Find the growth limit. Note that the STD may be a value, or a dataset (which may be a full sized image or a tessellation). If its not a single value, we'll check through the number of elements to see what kind of dataset it is (if its a tile or full image). */ cltprm->std = ( p->std->size>1 ? ( p->std->size==p->input->size ? std[gal_dimension_coord_to_index(ndim, dsize, coord)] : std[gal_tile_full_id_from_coord(&p->cp.tl, coord)] ) : std[0] ); if(p->variance) cltprm->std = sqrt(cltprm->std); /* From the standard deviation, find the growth limit. */ glimit = p->gthresh * cltprm->std; /* Allocate space to keep the diffuse indexs over this detection. We need to keep the actual indexs since it is our only connection to the object at this stage: we are also going to re-label the pixels to grow. For most astronomical objects, the major part of the detection area is going to be diffuse flux, so we will just allocate the same size as 'indexs' array (the 'dsize' will be corrected after getting the exact number. Also note that since 'indexs' is already sorted, therefore 'diffuseindexs' will also be already sorted. */ cltprm->diffuseindexs=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, cltprm->indexs->dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); dindexs=cltprm->diffuseindexs->array; sf=(s=indexs->array)+indexs->size; do { olabel[*s] = clabel[*s]; if( clabel[*s]==GAL_LABEL_INIT ) if( imgss[*s]>glimit ) dindexs[ ndiffuse++ ] = *s; } while(++sdiffuseindexs->size = cltprm->diffuseindexs->dsize[0] = ndiffuse; } /* Add all the remaining pixels in the detection (below the growth threshold, or those that were not touching). Note that initially 'diffuseindexs' was filled with the pixels that are above the growth threshold. That was necessary for identifying the objects. Now that we have identified the objects and labeled them, we want to add the remaining diffuse pixels to it too before doing the final growth. Note that the most efficient way is just to re-fill the 'diffuseindexs' array instead of adding the pixels below the threshold and sorting them afterwards.*/ void clumps_grow_prepare_final(struct clumps_thread_params *cltprm) { size_t ndiffuse=0; size_t *dindexs=cltprm->diffuseindexs->array; int32_t *olabel=cltprm->clprm->p->olabel->array; size_t *s=cltprm->indexs->array, *sf=s+cltprm->indexs->size; /* Recall that we initially allocated 'diffuseindexs' to have the same size as the indexs. So there is no problem if there are more pixels in this final round compared to the initial round. */ do if( olabel[*s] < 0 ) dindexs[ ndiffuse++ ] = *s; while(++sdiffuseindexs->size = cltprm->diffuseindexs->dsize[0] = ndiffuse; } /**********************************************************************/ /***************** S/N threshold *****************/ /**********************************************************************/ /* Correct the labels of the clumps that will be used in determining the S/N threshold for true clumps. */ static void clumps_correct_sky_labels_for_check(struct clumps_thread_params *cltprm, gal_data_t *tile) { gal_data_t *newinds; int32_t *ninds, curlab, *l, *lf; size_t len=cltprm->numinitclumps+1; struct segmentparams *p=cltprm->clprm->p; /* If any of the clumps must be kept ('cltprm->snind->size!=0'), then re-label them for the check image. Otherwise, remove all clumps. */ if(cltprm->snind->size) { /* A small sanity check. */ if(gal_tile_block(tile)!=p->clabel) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "address the problem. 'tile->block' must point to the " "'clabel' dataset", __func__, PACKAGE_BUGREPORT); /* Allocate a dataset with the new indexs, note that it will need to have one element for each initial label (the excluded clumps need to be set to zero). So we also need to clear the allocated space. */ newinds=gal_data_alloc(NULL, p->clabel->type, 1, &len, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Get the next available label for these clumps. If more than one thread was used, we are first going to lock the mutex (so no other thread changes these values), we will then read the shared number for this thread to use, then update the shared number and finally, unlock the mutex so other threads can do the same when they get to this point. */ if(p->cp.numthreads>1) pthread_mutex_lock(&cltprm->clprm->labmutex); curlab = p->numclumps+1; /* Note that counting begins from 1. */ p->numclumps += cltprm->snind->size; if(p->cp.numthreads>1) pthread_mutex_unlock(&cltprm->clprm->labmutex); /* Initialize the newinds array to GAL_LABEL_INIT (which be used as a new label for all the clumps that must be removed. */ lf = (l=newinds->array) + newinds->size; do *l++=GAL_LABEL_INIT; while(lsninds' and give them a value of 'curlab++'. */ ninds=newinds->array; lf = (l=cltprm->snind->array) + cltprm->snind->size; do { ninds[*l]=curlab++; *l=ninds[*l]; } while(++l0) *i=ninds[ *(int32_t *)i ];} ); /* Clean up. */ gal_data_free(newinds); } else /* There were no usable clumps in this tile, so just set all the pixels larger than zero (a clump) to 'GAL_LABEL_INIT'. */ GAL_TILE_PARSE_OPERATE( tile, NULL, 0, 1, {*i=*i>0?GAL_LABEL_INIT:*i;} ); } static void * clumps_find_make_sn_table(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct clumps_params *clprm=(struct clumps_params *)(tprm->params); struct segmentparams *p=clprm->p; size_t ndim=p->input->ndim, *dsize=p->input->dsize; void *tarray; double numdet; int pixonedge; gal_data_t *tile, *tblock, *tmp; uint8_t *binary=p->binary->array; struct clumps_thread_params cltprm; size_t i, j, c, ind, tind, num, numsky, *indarr; size_t *scoord=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "scoord"); size_t *icoord=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "icoord"); /* Initialize the parameters for this thread. */ cltprm.clprm = clprm; cltprm.topinds = NULL; /* Go over all the tiles/detections given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* IDs. */ cltprm.id = tind = tprm->indexs[i]; tile = &p->ltl.tiles[tind]; /* Change the tile's pointers to the binary image (which has 1 for detected pixels and 0 for un-detected regions). */ tarray=tile->array; tblock=tile->block; tile->array = gal_tile_block_relative_to_other(tile, p->binary); tile->block = p->binary; /* Get the number of usable elements in this tile (note that tiles can have blank pixels), so we can't simply use 'tile->size'. */ if(p->input->flag & GAL_DATA_FLAG_HASBLANK) { tmp=gal_statistics_number(tile); num=*((size_t *)(tmp->array)); gal_data_free(tmp); } else num=tile->size; /* Find the number of detected pixels over this tile. Since this is the binary image, this is just the sum of all the pixels. Note that 'numdet' can be 'nan' when the whole tile is blank and so there was no values to sum. Recall that in summing, when there is not input, the output is 'nan'. */ tmp=gal_statistics_sum(tile); numdet=*((double *)(tmp->array)); gal_data_free(tmp); /* See if this tile should be used or not (has enough undetected pixels). Note that it might happen that some tiles are fully blank. In such cases, it is important to first check the number of detected pixels. */ numsky=num-numdet; if( num && (float)numsky/(float)num > p->minskyfrac ) { /* Add the indexs of all undetected pixels in this tile into an array. */ cltprm.indexs=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, &numsky, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Change the tile's block to the clump labels dataset (because we'll need to set the labels of the rivers on the edge of the tile here). */ tile->array = gal_tile_block_relative_to_other(tile, p->clabel); tile->block = p->clabel; /* We need to set all the pixels on the edge of the tile to rivers and not include them in the list of indexs to set clumps. To do that, we need this tile's starting coordinates. */ gal_dimension_index_to_coord(gal_pointer_num_between( p->clabel->array, tile->array, p->clabel->type), ndim, dsize, scoord); /* Add the index of every sky element to the array of indexs. Note that since we know the array is always of type 'int32_t', we can call the 'GAL_TILE_PO_OISET' macro to avoid having to deal with multiple possible types in 'GAL_TILE_PARSE_OPERATE'. Since the OUT macro-variable is NULL, the 'int' is just a place-holder, it will not be used. */ c=0; indarr=cltprm.indexs->array; GAL_TILE_PO_OISET(int32_t, int, tile, NULL, 0, 1, { /* This pixel's index over all the image. */ ind = (int32_t *)i - (int32_t *)(p->clabel->array); gal_dimension_index_to_coord(ind, ndim, dsize, icoord); /* Check if the pixel is on the tile edge. */ pixonedge=0; for(j=0;jdsize[j]-1 ) { pixonedge=1; break; } /* If this pixel is on the edge, then it should be a river. */ if(pixonedge) *(int32_t *)i=GAL_LABEL_RIVER; /* This pixel is not on the edge, check if it had a value of '0' in the binary image (is not detected) then add it to the list of indexs (note that the binary image also contains the blank pixels, so only sky regions have a value of 0 in the binary image). */ else if( binary[ind]==0 ) { /* if(c!=cltprm.indexs->size) { if(cltprm.id==282) *i+=2; */ indarr[c++]=gal_pointer_num_between(p->clabel->array, i, p->clabel->type); /* } else if(cltprm.id==282) { int32_t *clabel=p->clabel->array; size_t kjd=gal_data_num_between(p->clabel->array, i, p->clabel->type); printf("%zu, %zu: %u\n", kjd%dsize[1]+1, kjd/dsize[1]+1, clabel[kjd]); } */ } }); /* Correct the number of indexs. */ cltprm.indexs->size=cltprm.indexs->dsize[0]=c; /* Generate the clumps over this region. */ cltprm.numinitclumps=gal_label_watershed(p->conv, cltprm.indexs, p->clabel, cltprm.topinds, !p->minima); /* Set all river pixels to GAL_LABEL_INIT (to be distinguishable from the detected regions). */ GAL_TILE_PO_OISET( int32_t, int, tile, NULL, 0, 1, {if(*i==GAL_LABEL_RIVER) *i=GAL_LABEL_INIT;} ); /* For a check, the step variable will be set. */ if(clprm->step==1) { gal_data_free(cltprm.indexs); continue; } /* Make the clump S/N table. */ cltprm.sn = &cltprm.clprm->sn[cltprm.id]; cltprm.snind = ( cltprm.clprm->snind ? &cltprm.clprm->snind[cltprm.id] : NULL ); gal_label_clump_significance(p->clumpvals, p->std, p->clabel, cltprm.indexs, &p->cp.tl, cltprm.numinitclumps, p->snminarea, p->variance, clprm->sky0_det1, cltprm.sn, cltprm.snind); /* If the user wanted to check the steps, remove the clumps that weren't used from the 'clabel' image (they have been already excluded from the table). */ if(cltprm.snind) clumps_correct_sky_labels_for_check(&cltprm, tile); /* If there were no clumps, then just set the S/N table to NULL. This must be done after the check image creation (if necessary), because we use 'cltprm.snind' as a proxy for the check image.*/ if( cltprm.clprm->sn[ cltprm.id ].size==0 ) cltprm.snind=cltprm.sn=NULL; /* Clean up. */ gal_data_free(cltprm.indexs); } /* Reset the tile's pointers back to what they were. */ tile->array=tarray; tile->block=tblock; } /* Clean up. */ free(scoord); free(icoord); /* Wait for the all the threads to finish and return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* Write the S/N table. */ static void clumps_write_sn_table(struct segmentparams *p, gal_data_t *insn, gal_data_t *inind, char *filename, gal_list_str_t *comments) { gal_data_t *sn, *ind, *cols; /* Remove all blank elements. The index and sn values must have the same set of blank elements, but checking on the integer array is faster. */ if( gal_blank_present(inind, 1) ) { /* Remove blank elements. */ ind=gal_data_copy(inind); sn=gal_data_copy(insn); gal_blank_remove(ind); gal_blank_remove(sn); /* A small sanity check. */ if(ind->size==0 || sn->size==0) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. For some reason, all the elements in 'ind' or " "'sn' are blank", __func__, PACKAGE_BUGREPORT); } else { sn = insn; ind = inind; } /* Set the columns. */ cols = ind; cols->next = sn; /* Prepare the comments. */ gal_table_comments_add_intro(&comments, PROGRAM_STRING, &p->rawtime); /* write the table. */ gal_table_write(cols, NULL, comments, p->cp.tableformat, filename, "SKY_CLUMP_SN", 0, 0); /* Clean up (if necessary). */ if(sn!=insn) gal_data_free(sn); if(ind==inind) ind->next=NULL; else gal_data_free(ind); } /* Find the true clump signal to noise value from the clumps in the sky region. Each thread will find the useful signal to noise values for the tiles that have been assigned to it. It will then store the pointer to the S/N table into the sntablearr array (with the size of the number of meshs). If no clumps could be found in a mesh, then sntablearr[i]=NULL. Otherwise, it points to an array of the useful S/N values in that clump. Note that we don't care about the order of S/N values any more! There is also an accompanying array to keep the number of elements in the final S/N array of each mesh: numclumpsarr. Using these two arrays, after all the threads are finished, we can concatenate all the S/N values into one array and send it to the main findsnthresh function in thresh.c. */ void clumps_true_find_sn_thresh(struct segmentparams *p) { char *msg; struct timeval t1; size_t i, j, c, numsn=0; struct clumps_params clprm; gal_list_str_t *comments=NULL; gal_data_t *sn, *snind, *quant, *claborig; /* Get starting time for later reporting if necessary. */ if(!p->cp.quiet) gettimeofday(&t1, NULL); /* Initialize/allocate the clump parameters structure, Note that the S/N indexs are also needed when we want to check the segmentation steps (they are used to correct the indexs in the final output). */ clprm.p=p; clprm.sky0_det1=0; clprm.sn=gal_data_array_calloc(p->ltl.tottiles); clprm.snind = ( p->checksegmentation || p->checksn ? gal_data_array_calloc(p->ltl.tottiles) : NULL ); /* If the user wants to check the steps of get an S/N table, then we need a unique label for each clump. But in each region, the labels start from 1. So we need a central place to keep the next available label. Since 'p->numclumps' is not used yet, we will use it here. When multiple threads are used, we will need a mutex to make sure that only one thread can change this central variable at every one moment. */ if(p->checksegmentation || p->checksn) { p->numclumps=0; if( p->cp.numthreads > 1 ) pthread_mutex_init(&clprm.labmutex, NULL); } /* Spin off the threads to start the work. Note that several steps are done on each tile within a thread. So if the user wants to check steps, we need to break out of the processing get an over-all output, then reset the input and call it again. So it will be slower, but its is natural, since the user is testing to find the correct combination of parameters for later use. */ if(p->segmentationname) { /* Necessary initializations. */ clprm.step=1; claborig=p->clabel; p->clabel=gal_data_copy(claborig); /* Do each step. */ while(clprm.step<3) { /* Reset the temporary copy of clabel back to its original. */ if(clprm.step>1) memcpy(p->clabel->array, claborig->array, claborig->size*gal_type_sizeof(claborig->type)); /* Do this step. */ gal_threads_spin_off(clumps_find_make_sn_table, &clprm, p->ltl.tottiles, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap); /* Set the extension name. */ switch(clprm.step) { case 1: p->clabel->name = "SKY_CLUMPS_ALL"; break; case 2: p->clabel->name = "SKY_CLUMPS_FOR_SN"; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "so we can address the issue. The value %d is not " "valid for clprm.step", __func__, PACKAGE_BUGREPORT, clprm.step); } /* Write the demonstration array into the check image. The default values are hard to view, so we'll make a copy of the demo, set all Sky regions to blank and all clump macro values to zero. */ gal_fits_img_write(p->clabel, p->segmentationname, NULL, 0); /* Increment the step counter. */ ++clprm.step; } /* Clean up (we don't need the original any more). */ gal_data_free(claborig); p->clabel->name=NULL; } else { clprm.step=0; gal_threads_spin_off(clumps_find_make_sn_table, &clprm, p->ltl.tottiles, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap); } /* Destroy the mutex if it was initialized. */ if( p->cp.numthreads>1 && (p->checksegmentation || p->checksn) ) pthread_mutex_destroy(&clprm.labmutex); /* Find the total number of S/N values we have for all the clumps. */ for(i=0;iltl.tottiles;++i) if(clprm.sn[i].ndim) /* Only on tiles were an S/N was calculated. */ numsn+=clprm.sn[i].size; if( numsn < p->minnumfalse ) error(EXIT_FAILURE, 0, "%zu usable clumps found in the undetected " "regions. This is smaller than the requested minimum number of " "false/reference clumps (%zu, value to the '--minnumfalse' " "option).\n\n" "There are several ways to address the problem. The best and most " "highly recommended is to use a larger input if possible (when the " "input is a crop from a larger dataset). If that is not the case, " "or it doesn't solve the problem, you need to loosen the " "parameters (and therefore cause more scatter/bias in the final " "result). Thus don't loosen them too much. Recall that you can " "see all the option values to Gnuastro's programs by appending " "'-P' to the end of your command.\n\n" " * Slightly decrease '--largetilesize' to have more tiles.\n" " * Decrease '--minskyfrac' (currently %g) to look into more " "tiles.\n" " * Slightly decrease '--snminarea' (currently %zu) to " "measure more clumps.\n" " * If Segment already works on a dataset with similar noise " "properties, you can directly pass the 'true' clump " "signal-to-noise ratio found there to '--clumpsnthresh' and " "avoid having to study the undetected regions any more.\n\n" "Append your previous command with '--checksegmentation' to see " "the steps and get a better feeling of the cause/solution. Note " "that the output is a multi-extension FITS file).\n\n" "To better understand the segmentation process and options, " "please run the following command (press 'SPACE'/arrow-keys to " "navigate and 'Q' to return back to the command-line):\n\n" " $ info gnuastro \"Segmentation options\"\n", numsn, p->minnumfalse, p->minskyfrac, p->snminarea); /* Allocate the space to keep all the S/N values. */ sn=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &numsn, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, "CLUMP_S/N", "ratio", "Signal-to-noise ratio"); snind = ( p->checksn ? gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &numsn, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, "CLUMP_ID", "counter", "Unique ID for this clump.") : NULL ); /* Copy the S/N values of all the clumps into the unified array. */ c=0; for(i=0;iltl.tottiles;++i) if(clprm.sn[i].ndim) for(j=0;jarray))[c] = ((float *)(clprm.sn[i].array))[j]; if(snind) ((int32_t *)(snind->array))[c] = ((int32_t *)(clprm.snind[i].array))[j]; ++c; } /* The S/N array of sky clumps is desiged to have no blank values, so set the flags accordingly to avoid a redundant blank search. */ sn->flag = GAL_DATA_FLAG_BLANK_CH; sn->flag &= ~GAL_DATA_FLAG_HASBLANK; /* If the user wanted to see the S/N table, then save it. */ if(p->checksn) { /* Make the comments, then write the table and free the comments. */ if(p->cp.numthreads>1) gal_list_str_add(&comments, "NOTE: In multi-threaded mode, clump " "IDs differ in each run and are not sorted.", 1); gal_list_str_add(&comments, "See also: 'SKY_CLUMPS_FOR_SN' HDU of " "output with '--checksegmentation'.", 1); gal_list_str_add(&comments, "S/N of clumps over undetected regions.", 1); clumps_write_sn_table(p, sn, snind, p->clumpsn_s_name, comments); gal_list_str_free(comments, 1); } /* Find the desired quantile from the full S/N distribution. */ quant = gal_statistics_quantile(sn, p->snquant, 1); p->clumpsnthresh = *((float *)(quant->array)); if(!p->cp.quiet) { if( asprintf(&msg, "Clump peak S/N: %g (%.3f quant of %zu).", p->clumpsnthresh, p->snquant, sn->size)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(&t1, msg, 2); free(msg); } /* Clean up. */ gal_data_free(sn); gal_data_free(snind); gal_data_free(quant); gal_data_array_free(clprm.sn, p->ltl.tottiles, 1); gal_data_array_free(clprm.snind, p->ltl.tottiles, 1); } /***********************************************************************/ /***************** Over detections *****************/ /***********************************************************************/ /* Only keep true clumps over detections. */ void clumps_det_keep_true_relabel(struct clumps_thread_params *cltprm) { struct segmentparams *p=cltprm->clprm->p; size_t ndim=p->input->ndim, *dsize=p->input->dsize; int istouching; size_t i, *s, *sf, *dinc; float *sn = cltprm->sn ? cltprm->sn->array : NULL; int32_t *l, *lf, *newlabs, curlab=1, *clabel=p->clabel->array; /* If there were no clumps over the detection, then just set the number of true clumps to zero, otherwise, see which ones should be removed. */ if(cltprm->sn) { /* Allocate the necessary arrays. */ newlabs=gal_pointer_allocate(GAL_TYPE_INT32, cltprm->numinitclumps+1, 0, __func__, "newlabs"); dinc=gal_dimension_increment(ndim, dsize); /* Initialize the new labels with GAL_LABEL_INIT (so the diffuse area can be distinguished from the clumps). */ lf=(l=newlabs)+cltprm->numinitclumps+1; do *l++=GAL_LABEL_INIT; while(lkeepmaxnearriver) { for(i=1;inuminitclumps+1;++i) if( sn[i] > p->clumpsnthresh ) newlabs[i]=curlab++; } else { for(i=1;inuminitclumps+1;++i) { /* Check if all the neighbors of this top element are touching a river or not. */ istouching=0; GAL_DIMENSION_NEIGHBOR_OP(cltprm->topinds[i], ndim, dsize, ndim, dinc, { if(clabel[nind]<1) istouching=1; }); /* If the peak isn't touching a river, then check its S/N and if that is also good, give it a new label. */ if( !istouching && sn[i] > p->clumpsnthresh ) newlabs[i]=curlab++; } } /* Correct the clump labels. Note that the non-clumpy regions over the detections (rivers) have already been initialized to GAL_LABEL_INIT (which is negative). So we'll just need to correct the ones with a value larger than 0. */ sf=(s=cltprm->indexs->array)+cltprm->indexs->size; do if(clabel[*s]>0) clabel[*s] = newlabs[ clabel[*s] ]; while(++snumtrueclumps=curlab-1; /* Clean up. */ free(dinc); free(newlabs); } else cltprm->numtrueclumps=0; } gnuastro-0.22/bin/segment/main.h0000644000175000017500000001256114551566633012312 /********************************************************************* Segment - Segment initial labels based on signal structure. Segment is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include #include /* Progarm names. */ #define PROGRAM_NAME "Segment" /* Program full name. */ #define PROGRAM_EXEC "astsegment" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Macros */ #define DETECTION_ALL "all" /* Main program parameters structure */ struct segmentparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ struct gal_tile_two_layer_params ltl; /* Large tessellation. */ char *inputname; /* Input filename. */ char *kernelname; /* Input kernel filename. */ char *khdu; /* Kernel HDU. */ char *convolvedname; /* Convolved image (to avoid convolution).*/ char *chdu; /* HDU of convolved image. */ char *detectionname; /* Detection image file name. */ char *dhdu; /* Detection image file name. */ char *skyname; /* Filename of Sky image. */ char *skyhdu; /* Filename of Sky image. */ char *stdname; /* File name of Standard deviation image. */ char *stdhdu; /* HDU of Stanard deviation image. */ uint8_t variance; /* The input STD is actually variance. */ uint8_t rawoutput; /* Output only object and clump labels. */ float minskyfrac; /* Undetected area min. frac. in tile. */ uint8_t minima; /* Build clumps from their minima, maxima.*/ size_t snminarea; /* Minimum area for segmentation. */ uint8_t checksn; /* Save the clump S/N values to a file. */ size_t minnumfalse; /* Min No. of det/seg for true quantile. */ float snquant; /* Quantile of clumps in sky for true S/N.*/ uint8_t keepmaxnearriver; /* Keep clumps with a peak near a river. */ float clumpsnthresh; /* Clump S/N threshold. */ uint8_t noobjects; /* Finish after finding true clumps. */ float gthresh; /* Multiple of STD to stop growing clumps.*/ size_t minriverlength; /* Min, len of good grown clump rivers. */ float objbordersn; /* Minimum S/N for grown clumps to be one.*/ uint8_t grownclumps; /* Save grown clumps instead of original. */ uint8_t continueaftercheck; /* Don't abort after the check steps. */ uint8_t checksegmentation; /* Save the segmentation steps in file. */ /* Internal. */ char *clumpsn_s_name; /* Sky clump S/N name. */ char *clumpsn_d_name; /* Detection clumps S/N name. */ char *segmentationname; /* Name of segmentation steps file. */ gal_data_t *input; /* Input dataset. */ gal_data_t *kernel; /* Given kernel for convolution. */ gal_data_t *conv; /* Convolved dataset. */ gal_data_t *binary; /* For binary operations. */ gal_data_t *olabel; /* Object labels. */ gal_data_t *clabel; /* Clumps labels. */ gal_data_t *std; /* STD of undetected pixels, per tile. */ gal_data_t *clumpvals; /* Values to build clumps (avoid bugs). */ float cpscorr; /* Counts/second correction. */ size_t numdetections; /* Number of final detections. */ size_t numclumps; /* Number of true clumps. */ size_t numobjects; /* Number of objects. */ char *useddetectionname; /* Name of file USED for detection image. */ char *usedstdname; /* Name of file USED for sky STD image. */ float medstd; /* For output STD image: median STD. */ float minstd; /* For output STD image: median STD. */ float maxstd; /* For output STD image: median STD. */ /* Output: */ time_t rawtime; /* Starting time of the program. */ }; #endif gnuastro-0.22/bin/segment/authors-cite.h0000644000175000017500000000570414551337306013767 /********************************************************************* Segment - Segment initial labels based on signal structure. Segment is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" \ "Paper on why Segment was spinned-off from NoiseChisel\n" \ "-----------------------------------------------------\n" \ "@ARTICLE{noisechisel_segment_2019,\n" \ " author = {{Akhlaghi}, Mohammad},\n" \ " title = \"{Carving out the low surface brightness universe with NoiseChisel}\",\n" \ " journal = {arXiv e-prints},\n" \ " keywords = {Astrophysics - Instrumentation and Methods for Astrophysics,\n" \ " Astrophysics - Astrophysics of Galaxies,\n" \ " Computer Science - Computer Vision and Pattern Recognition},\n" \ " year = \"2019\",\n" \ " month = \"Sep\",\n" \ " eid = {arXiv:1909.11230},\n" \ " pages = {arXiv:1909.11230},\n" \ " archivePrefix = {arXiv},\n" \ " eprint = {1909.11230},\n" \ " primaryClass = {astro-ph.IM},\n" \ " adsurl = {https://ui.adsabs.harvard.edu/abs/2019arXiv190911230A},\n" \ " adsnote = {Provided by the SAO/NASA Astrophysics Data System}\n" \ "}\n" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/segment/args.h0000644000175000017500000002371314551566633012323 /********************************************************************* Segment - Segment initial labels based on signal structure. Segment is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Input options. */ { "sky", UI_KEY_SKY, "STR/FLT", 0, "Filename of Sky values image to subtract.", GAL_OPTIONS_GROUP_INPUT, &p->skyname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "skyhdu", UI_KEY_SKYHDU, "STR", 0, "HDU containing Sky value to subtract.", GAL_OPTIONS_GROUP_INPUT, &p->skyhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "std", UI_KEY_STD, "STR/FLT", 0, "Filename of Sky standard deviation.", GAL_OPTIONS_GROUP_INPUT, &p->stdname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "stdhdu", UI_KEY_STDHDU, "STR", 0, "HDU containing Sky standard deviation.", GAL_OPTIONS_GROUP_INPUT, &p->stdhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "variance", UI_KEY_VARIANCE, 0, 0, "STD input is actually variance.", GAL_OPTIONS_GROUP_INPUT, &p->variance, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "detection", UI_KEY_DETECTION, "FITS", 0, "Filename of detection image (to segment).", GAL_OPTIONS_GROUP_INPUT, &p->detectionname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "dhdu", UI_KEY_DHDU, "STR", 0, "HDU containing detection image.", GAL_OPTIONS_GROUP_INPUT, &p->dhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "kernel", UI_KEY_KERNEL, "FITS", 0, "Filename of kernel to convolve with input.", GAL_OPTIONS_GROUP_INPUT, &p->kernelname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "khdu", UI_KEY_KHDU, "STR", 0, "HDU containing kernel image.", GAL_OPTIONS_GROUP_INPUT, &p->khdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "convolved", UI_KEY_CONVOLVED, "FITS", 0, "Convolved image file to avoid convolution.", GAL_OPTIONS_GROUP_INPUT, &p->convolvedname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "chdu", UI_KEY_CHDU, "STR", 0, "HDU/extension of convolved image in file.", GAL_OPTIONS_GROUP_INPUT, &p->chdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Output. */ { "rawoutput", UI_KEY_RAWOUTPUT, 0, 0, "Output contains only CLUMPS and/or OBJECTS HDUs.", GAL_OPTIONS_GROUP_OUTPUT, &p->rawoutput, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "noobjects", UI_KEY_NOOBJECTS, 0, 0, "Finish with true clumps, don't create objects.", GAL_OPTIONS_GROUP_OUTPUT, &p->noobjects, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "grownclumps", UI_KEY_GROWNCLUMPS, 0, 0, "Save grown clumps instead of original.", UI_GROUP_SEGMENTATION, &p->grownclumps, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "continueaftercheck", UI_KEY_CONTINUEAFTERCHECK, 0, 0, "Continue processing after checks.", GAL_OPTIONS_GROUP_OPERATING_MODE, &p->continueaftercheck, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Tessellation. */ { "largetilesize", UI_KEY_LARGETILESIZE, "INT[,INT]", 0, "Sim. to --tilesize, but for larger tiles.", GAL_OPTIONS_GROUP_TESSELLATION, &p->ltl.tilesize, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_sizes_reverse }, /* Segmentation options. */ { 0, 0, 0, 0, "Segmentation:", UI_GROUP_SEGMENTATION }, { "minskyfrac", UI_KEY_MINSKYFRAC, "FLT", 0, "Min. fraction of undetected area in tile.", UI_GROUP_SEGMENTATION, &p->minskyfrac, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "minima", UI_KEY_MINIMA, 0, 0, "Built internal clumps from minima.", UI_GROUP_SEGMENTATION, &p->minima, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "snminarea", UI_KEY_SNMINAREA, "INT", 0, "Minimum area of clumps for S/N estimation.", UI_GROUP_SEGMENTATION, &p->snminarea, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checksn", UI_KEY_CHECKSN, 0, 0, "Save clump S/N values into a file.", UI_GROUP_SEGMENTATION, &p->checksn, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "minnumfalse", UI_KEY_MINNUMFALSE, "INT", 0, "Minimum number for S/N estimation.", UI_GROUP_SEGMENTATION, &p->minnumfalse, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "snquant", UI_KEY_SNQUANT, "FLT", 0, "S/N Quantile of true sky clumps.", UI_GROUP_SEGMENTATION, &p->snquant, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "keepmaxnearriver", UI_KEY_KEEPMAXNEARRIVER, 0, 0, "Keep clumps with peak touching a river.", UI_GROUP_SEGMENTATION, &p->keepmaxnearriver, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "clumpsnthresh", UI_KEY_CLUMPSNTHRESH, "FLT", 0, "S/N threshold of true clumps.", UI_GROUP_SEGMENTATION, &p->clumpsnthresh, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "gthresh", UI_KEY_GTHRESH, "FLT", 0, "Multiple of STD to stop growing clumps.", UI_GROUP_SEGMENTATION, &p->gthresh, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "minriverlength", UI_KEY_MINRIVERLENGTH, "INT", 0, "Minimum len of useful grown clump rivers.", UI_GROUP_SEGMENTATION, &p->minriverlength, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "objbordersn", UI_KEY_OBJBORDERSN, "FLT", 0, "Min. S/N for grown clumps as one object.", UI_GROUP_SEGMENTATION, &p->objbordersn, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checksegmentation", UI_KEY_CHECKSEGMENTATION, 0, 0, "Store segmentation steps in a file.", UI_GROUP_SEGMENTATION, &p->checksegmentation, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Operating mode options. */ {0} }; /* Define the child argp structure ------------------------------- NOTE: these parts can be left untouched.*/ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/segment/ui.h0000644000175000017500000000504414551566633012001 /********************************************************************* Segment - Segment initial labels based on signal structure. Segment is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Macros. */ #define UI_NO_CONV_KERNEL_NAME "none" /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_SEGMENTATION = GAL_OPTIONS_GROUP_AFTER_COMMON, }; /* Available letters for short options: a b e f g i j l n p r t u w x z A E H J Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_KERNEL = 'k', UI_KEY_DETECTION = 'd', UI_KEY_LARGETILESIZE = 'L', UI_KEY_MINSKYFRAC = 'B', UI_KEY_SNMINAREA = 'm', UI_KEY_SNQUANT = 'c', UI_KEY_KEEPMAXNEARRIVER = 'v', UI_KEY_CLUMPSNTHRESH = 's', UI_KEY_GTHRESH = 'G', UI_KEY_MINRIVERLENGTH = 'y', UI_KEY_OBJBORDERSN = 'O', UI_KEY_CONTINUEAFTERCHECK = 'C', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_KHDU = 1000, UI_KEY_CONVOLVED, UI_KEY_CHDU, UI_KEY_DHDU, UI_KEY_SKY, UI_KEY_SKYHDU, UI_KEY_STD, UI_KEY_STDHDU, UI_KEY_VARIANCE, UI_KEY_MINIMA, UI_KEY_RAWOUTPUT, UI_KEY_MINNUMFALSE, UI_KEY_NOOBJECTS, UI_KEY_GROWNCLUMPS, UI_KEY_CHECKSN, UI_KEY_CHECKSEGMENTATION, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct segmentparams *p); void ui_abort_after_check(struct segmentparams *p, char *filename, char *file2name, char *description); void ui_free_report(struct segmentparams *p, struct timeval *t1); #endif gnuastro-0.22/bin/segment/segment.h0000644000175000017500000000210614551337306013013 /********************************************************************* Segment - Segment initial labels based on signal structure. Segment is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef SEGMENT_H #define SEGMENT_H void segment(struct segmentparams *p); #endif gnuastro-0.22/bin/segment/clumps.h0000644000175000017500000000666614551337306012673 /********************************************************************* Segment - Segment initial labels based on signal structure. Segment is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef CLUMPS_H #define CLUMPS_H /* Parameters for all threads. */ struct clumps_params { /* General */ int step; /* Counter if we want to check steps. */ int sky0_det1; /* If working on the Sky or Detections. */ struct segmentparams *p; /* Pointer to main Segment parameters. */ pthread_mutex_t labmutex; /* Mutex to change the total numbers. */ /* For Sky region. */ gal_data_t *sn; /* Array of clump S/N tables. */ gal_data_t *snind; /* Array of clump S/N index (for check). */ /* For detections. */ gal_data_t *labindexs; /* Array of 'gal_data_t' with obj indexs. */ size_t totobjects; /* Total number of objects at any point. */ size_t totclumps; /* Total number of clumps at any point. */ }; /* Parameters for one thread (a tile or a detected region). */ struct clumps_thread_params { size_t id; /* ID of this detection/tile over tile. */ size_t *topinds; /* Indexs of all local maxima. */ size_t numinitclumps; /* Number of clumps in tile/detection. */ size_t numtrueclumps; /* Number of true clumps in tile/detection.*/ size_t numobjects; /* Number of objects over this clump. */ float std; /* Standard deviation of noise on center. */ gal_data_t *indexs; /* Array containing indexs of this det. */ gal_data_t *diffuseindexs; /* Diffuse region (after finding clumps). */ gal_data_t *info; /* Information for all clumps. */ gal_data_t *sn; /* Signal-to-noise ratio for these clumps. */ gal_data_t *snind; /* Index of S/N for these clumps. */ gal_data_t *clumptoobj; /* Index of object that a clump belongs to.*/ struct clumps_params *clprm; /* Pointer to main structure. */ }; void clumps_grow_prepare_initial(struct clumps_thread_params *cltprm); void clumps_grow_prepare_final(struct clumps_thread_params *cltprm); void clumps_grow(gal_data_t *labels, gal_data_t *diffuseindexs, int withrivers, int connectivity); void clumps_true_find_sn_thresh(struct segmentparams *p); void clumps_make_sn_table(struct clumps_thread_params *cltprm); gal_data_t * clumps_det_label_indexs(struct segmentparams *p); void clumps_det_keep_true_relabel(struct clumps_thread_params *cltprm); #endif gnuastro-0.22/bin/segment/kernel-2d.h0000644000175000017500000001016414551337306013137 /********************************************************************* The default 2D kernel to be used in Segment. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_KERNEL2D_H__ #define __GAL_KERNEL2D_H__ /* How to produce this kernel ========================== Below, the steps necessary to easily create the C contents of this file are described. The first step can be modified to change the default kernel properties and put the new contents into this file. Make the kernel --------------- We'll first make the kernel using MakeProfiles with the following commands. IMPORTANT NOTE: because the kernel is so sharp, random sampling is going to be used for all the pixels (the center won't be used). So it is important to have a large number of random points to make the very slight differences between symmetric parts of the profile even less significant. export GSL_RNG_SEED=1 export GSL_RNG_TYPE=ranlxs2 astmkprof --kernel=gaussian,1.5,5 --oversample=1 --envseed --numrandom=100000 Convert it to C code -------------------- Put the following C program into a file called 'kernel.c'. #include #include #include int main(void) { size_t i; float *arr; gal_data_t *img=gal_fits_img_read_to_type("kernel.fits", "1", GAL_TYPE_FLOAT32, -1); arr=img->array; printf("size_t kernel_2d_dsize[2]={%zu, %zu};\n", img->dsize[0], img->dsize[1]); printf("float kernel_2d[%zu]={", img->size); for(i=0;isize;++i) { if(i>0) { if(i % img->dsize[1] == 0 ) printf("\n\n"); } // We cannot use '\b' here, since we are writing directly // to the command-line, so we'll first write the number, // then decide if any subsequent character (a comma) // should be written. printf("%.7g", arr[i]); // The last element doesn't need a comma. In each line, // the last character must not be a space, but for easy // readability, the elements in between need a space. if( i!=(img->size-1) ) printf("%s", ((i+1)%img->dsize[1]) ? ", " : ","); } printf("};\n"); gal_data_free(img); return EXIT_SUCCESS; } Run the C program ----------------- We can now compile and run that C program and put the outputs in 'kernel.c'. Once its created, copy the contents of 'kernel-2d.h' after these comments. $ astbuildprog -q kernel.c > kernel-2d.h */ size_t kernel_2d_dsize[2]={7, 7}; float kernel_2d[49]={0, 3.992438e-07, 8.88367e-06, 2.470061e-05, 8.96143e-06, 3.961747e-07, 0, 3.961645e-07, 8.509836e-05, 0.001905851, 0.005246491, 0.001900595, 8.399635e-05, 3.977891e-07, 8.959198e-06, 0.00190299, 0.04301567, 0.1174493, 0.0428412, 0.001911332, 8.923742e-06, 2.455387e-05, 0.005209642, 0.1172349, 0.3221542, 0.1174603, 0.005248448, 2.447141e-05, 9.018465e-06, 0.001908686, 0.04294781, 0.1173853, 0.04282322, 0.001887719, 8.985901e-06, 3.969509e-07, 8.505241e-05, 0.001909065, 0.005238522, 0.001906396, 8.491996e-05, 3.998521e-07, 0, 3.998288e-07, 9.012383e-06, 2.466673e-05, 9.072039e-06, 4.024199e-07, 0}; #endif gnuastro-0.22/bin/segment/kernel-3d.h0000644000175000017500000001242114435153342013133 /********************************************************************* The default 3D kernel to be used in NoiseChisel and Segment. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2018-2019, Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef __GAL_KERNEL3D_H__ #define __GAL_KERNEL3D_H__ /* How to produce this kernel ========================== Below, the steps necessary to easily create the C contents of this file are described. The first step can be modified to change the default kernel properties and put the new contents into this file. Make the kernel --------------- We'll first make the kernel using MakeProfiles with the following commands. IMPORTANT NOTE: because the kernel is so sharp, random sampling is going to be used for all the pixels (the center won't be used). So it is important to have a large number of random points to make the very slight differences between symmetric parts of the profile even less significant. export GSL_RNG_SEED=1 export GSL_RNG_TYPE=ranlxs2 astmkprof --kernel=gaussian-3d,1.5,5,0.5 --oversample=1 --envseed \ --numrandom=100000 Convert it to C code -------------------- Put the following C program into a file called `kernel.c'. #include #include #include int main(void) { size_t i; float *arr; gal_data_t *img=gal_fits_img_read_to_type("kernel.fits", "1", GAL_TYPE_FLOAT32, -1); arr=img->array; printf("size_t kernel_3d_dsize[3]={%zu, %zu, %zu};\n", img->dsize[0], img->dsize[1], img->dsize[2]); printf("float kernel_3d[%zu]={", img->size); for(i=0;isize;++i) { if(i>0) { if(i % img->dsize[2] == 0 ) printf("\n"); if(i % (img->dsize[2]*img->dsize[1]) == 0 ) printf("\n"); } // We cannot use `\b' here, since we are writing directly // to the command-line, so we'll first write the number, // then decide if any subsequent character (a comma) // should be written. printf("%.7g", arr[i]); // The last element doesn't need a comma. In each line, // the last character must not be a space, but for easy // readability, the elements in between need a space. if( i!=(img->size-1) ) printf("%s", ((i+1)%img->dsize[2]) ? ", " : ","); } printf("};\n"); return EXIT_SUCCESS; } Run the C program ----------------- We can now compile and run that C program and put the outputs in `kernel.c'. Once its created, copy the contents of `kernel-3d.h' after these comments. $ astbuildprog -q kernel.c > kernel-3d.h */ size_t kernel_3d_dsize[3]={3, 7, 7}; float kernel_3d[147]={0, 0, 5.219212e-07, 1.43663e-06, 5.288961e-07, 0, 0, 0, 4.890969e-06, 0.0001122713, 0.0003051736, 0.0001101779, 4.908836e-06, 0, 5.281005e-07, 0.0001115758, 0.002482525, 0.006792462, 0.002476586, 0.0001099998, 5.217535e-07, 1.451268e-06, 0.0003033727, 0.006850741, 0.01871265, 0.006743792, 0.0003061892, 1.43298e-06, 5.209756e-07, 0.000110545, 0.002490561, 0.006798376, 0.002503618, 0.0001109581, 5.295083e-07, 0, 4.884327e-06, 0.0001122016, 0.0003074409, 0.0001103678, 4.984748e-06, 0, 0, 0, 5.224761e-07, 1.425723e-06, 5.33545e-07, 0, 0, 0, 3.538044e-07, 7.891201e-06, 2.166429e-05, 7.979216e-06, 3.570717e-07, 0, 3.536664e-07, 7.511148e-05, 0.001693119, 0.004623666, 0.001691994, 7.563465e-05, 3.541075e-07, 7.921932e-06, 0.001687588, 0.03788469, 0.1038283, 0.03776859, 0.001679332, 7.979274e-06, 2.200398e-05, 0.004617298, 0.1038528, 0.2849551, 0.1039089, 0.004635326, 2.165271e-05, 7.955934e-06, 0.001697289, 0.0379024, 0.1037254, 0.03768558, 0.001666544, 7.878737e-06, 3.523428e-07, 7.45342e-05, 0.001689582, 0.00461954, 0.001684659, 7.568914e-05, 3.499421e-07, 0, 3.56209e-07, 7.915472e-06, 2.17837e-05, 7.854093e-06, 3.555503e-07, 0, 0, 0, 5.263017e-07, 1.431613e-06, 5.12058e-07, 0, 0, 0, 4.907304e-06, 0.0001125078, 0.00030509, 0.000111018, 5.084412e-06, 0, 5.256628e-07, 0.0001103357, 0.002493239, 0.006835639, 0.002478384, 0.0001131122, 5.260213e-07, 1.442301e-06, 0.0003005426, 0.006833205, 0.01862562, 0.006816466, 0.000302246, 1.436046e-06, 5.298979e-07, 0.0001107397, 0.002476231, 0.006837885, 0.00252707, 0.0001124105, 5.305631e-07, 0, 5.012419e-06, 0.0001110889, 0.0003017522, 0.0001124517, 4.790862e-06, 0, 0, 0, 5.104474e-07, 1.45196e-06, 5.191671e-07, 0, 0}; #endif gnuastro-0.22/bin/statistics/0000755000175000017500000000000014557514202012007 5gnuastro-0.22/bin/statistics/Makefile.am0000644000175000017500000000323714557211443013771 ## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2015-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = aststatistics ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. aststatistics_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) aststatistics_SOURCES = main.c ui.c contour.c sky.c statistics.c EXTRA_DIST = main.h authors-cite.h args.h ui.h sky.h statistics.h contour.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = aststatistics.conf gnuastro-0.22/bin/statistics/aststatistics.conf0000644000175000017500000000263114551337306015504 # Default parameters (System) for Statistics. # Statistics is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ aststatistics --help # Full list of options, short doc. # $ aststatistics -P # Print all options and used values. # $ info aststatistics # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input image: # Sky and its STD settings khdu 1 meanmedqdiff 0.01 outliernumngb 15 outliersigma 5 outliersclip 3,0.2 smoothwidth 3 sclipparams 3,0.1 mclipparams 4.48,0.01 # Histogram and CFP settings numasciibins 70 asciiheight 10 numbins 100 numbins2 100 mirrordist 1.5 # Fitting fitweight std fitestimatehdu 1 fitrobust bisquare gnuastro-0.22/bin/statistics/Makefile.in0000644000175000017500000034060214557513750014010 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = aststatistics$(EXEEXT) subdir = bin/statistics ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_aststatistics_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) \ contour.$(OBJEXT) sky.$(OBJEXT) statistics.$(OBJEXT) aststatistics_OBJECTS = $(am_aststatistics_OBJECTS) am__DEPENDENCIES_1 = aststatistics_DEPENDENCIES = \ $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/contour.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/sky.Po ./$(DEPDIR)/statistics.Po ./$(DEPDIR)/ui.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(aststatistics_SOURCES) DIST_SOURCES = $(aststatistics_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib aststatistics_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) aststatistics_SOURCES = main.c ui.c contour.c sky.c statistics.c EXTRA_DIST = main.h authors-cite.h args.h ui.h sky.h statistics.h contour.h dist_sysconf_DATA = aststatistics.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/statistics/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/statistics/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list aststatistics$(EXEEXT): $(aststatistics_OBJECTS) $(aststatistics_DEPENDENCIES) $(EXTRA_aststatistics_DEPENDENCIES) @rm -f aststatistics$(EXEEXT) $(AM_V_CCLD)$(LINK) $(aststatistics_OBJECTS) $(aststatistics_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/contour.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sky.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statistics.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/contour.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/sky.Po -rm -f ./$(DEPDIR)/statistics.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/contour.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/sky.Po -rm -f ./$(DEPDIR)/statistics.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/statistics/main.c0000644000175000017500000000304614551337306013024 /********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" #include "statistics.h" int main (int argc, char *argv[]) { struct timeval t1; struct statisticsparams p={{{0},0},0}; /* Set the starting time. */ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Statistics. */ statistics(&p); /* Free all non-freed allocations. */ ui_free_report(&p); /* Return successfully. */ return 0; } gnuastro-0.22/bin/statistics/ui.c0000644000175000017500000013642014551337306012520 /********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will do statistical " "analysis on the input dataset (table column or image). All blank " "pixels or pixels outside of the given range are ignored. You can " "either directly ask for certain statistics in one line/row as " "shown below with the same order as requested, or get tables of " "different statistical measures like the histogram, cumulative " "frequency style and etc. If no particular statistic is " "requested, some basic information about the dataset is printed " "on the command-line.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct statisticsparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; cp->numthreads = gal_threads_number(); cp->tl.remainderfrac = NAN; /* Program-specific initializers */ p->lessthan = NAN; p->lessthan2 = NAN; p->onebinstart = NAN; p->onebinstart2 = NAN; p->greaterequal = NAN; p->greaterequal2 = NAN; p->quantmin = NAN; p->quantmax = NAN; p->mirror = NAN; p->mirrordist = NAN; p->meanmedqdiff = NAN; p->sclipparams[0] = NAN; p->sclipparams[1] = NAN; p->fitmaxpower = GAL_BLANK_SIZE_T; /* Set the mandatory common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_LOG: case GAL_OPTIONS_KEY_TYPE: cp->coptions[i].flags=OPTION_HIDDEN; break; case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_MINMAPSIZE: case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct statisticsparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For " "short options, '=' should not be used and for long " "options, there should be no space between the " "option, equal sign and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(p->inputname) argp_error(state, "only one argument (input file) should be " "given"); else if(arg[0]!='\0') p->inputname=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } static void * ui_add_to_single_value(struct argp_option *option, char *arg, char *filename, size_t lineno, void *params) { size_t i; double *d; gal_data_t *inputs=NULL; struct statisticsparams *p=(struct statisticsparams *)params; /* In case of printing the option values. */ if(lineno==-1) error(EXIT_FAILURE, 0, "currently the options to be printed in one " "row (like '--number', '--mean', and etc) do not support " "printing with the '--printparams' ('-P'), or writing into " "configuration files due to lack of time when implementing " "these features. You can put them into configuration files " "manually. Please get in touch with us at '%s', so we can " "implement it", PACKAGE_BUGREPORT); /* Some of these options take values and some don't. */ if(option->type==GAL_OPTIONS_NO_ARG_TYPE) { /* If this option is given in a configuration file, then 'arg' will not be NULL and we don't want to do anything if it is '0'. */ if(arg) { /* Make sure the value is only '0' or '1'. */ if( arg[1]!='\0' && *arg!='0' && *arg!='1' ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the '--%s' " "option takes no arguments. In a configuration " "file it can only have the values '1' or '0', " "indicating if it should be used or not", option->name); /* Only proceed if the (possibly given) argument is 1. */ if(arg[0]=='0' && arg[1]=='\0') return NULL; } /* Add this option to the print list. */ gal_list_i32_add(&p->singlevalue, option->key); } else { /* Read the string of numbers. */ inputs=gal_options_parse_list_of_numbers(arg, filename, lineno, GAL_TYPE_FLOAT64); if(inputs->size==0) error(EXIT_FAILURE, 0, "'--%s' needs a value", option->name); /* Do the appropriate operations with the */ d=inputs->array; switch(option->key) { case UI_KEY_QUANTILE: case UI_KEY_QUANTFUNC: /* For the quantile and the quantile function, its possible to give any number of arguments, so add the operation index and the argument once for each given number. */ for(i=0;isize;++i) { if(option->key==UI_KEY_QUANTILE && (d[i]<0 || d[i]>1) ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "values " "to '--quantile' ('-u') must be between 0 " "and 1, you had asked for %g (read from " "'%s')", d[i], arg); gal_list_f64_add(&p->tp_args, d[i]); gal_list_i32_add(&p->singlevalue, option->key); } break; default: error_at_line(EXIT_FAILURE, 0, filename, lineno, "a bug! please " "contact us at %s so we can address the problem. " "the option given to 'ui_add_to_print_in_row' is " "marked as requiring a value, but is not " "recognized", PACKAGE_BUGREPORT); } } return NULL; } static void * ui_read_quantile_range(struct argp_option *option, char *arg, char *filename, size_t lineno, void *params) { char *str; gal_data_t *in; struct statisticsparams *p=(struct statisticsparams *)params; /* For the '--printparams' ('-P') option:*/ if(lineno==-1) { if( isnan(p->quantmax) ) { if( asprintf(&str, "%g", p->quantmin)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&str, "%g,%g", p->quantmin, p->quantmax)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } return str; } /* Parse the inputs. */ in=gal_options_parse_list_of_numbers(arg, filename, lineno, GAL_TYPE_FLOAT64); /* Check if there was only two numbers. */ if(in->size!=1 && in->size!=2) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the '--%s' " "option takes one or two values values (separated by " "a comma) to define the range of used values with " "quantiles. However, %zu numbers were read in the " "string '%s' (value to this option).\n\n" "If there is only one number as input, it will be " "interpretted as the lower quantile (Q) range. The " "higher range will be set to the quantile (1-Q). " "When two numbers are given, they will be used as the " "lower and higher quantile range respectively", option->name, in->size, arg); /* Read the values in. */ p->quantmin = ((double *)(in->array))[0]; if(in->size==2) p->quantmax = ((double *)(in->array))[1]; /* Make sure the values are between 0 and 1. */ if( (p->quantmin<0 || p->quantmin>1) || ( !isnan(p->quantmax) && (p->quantmax<0 || p->quantmax>1) ) ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "values to the " "'--quantrange' option must be between 0 and 1 " "(inclusive). Your input was: '%s'", arg); /* When only one value is given, make sure it is less than 0.5. */ if( !isnan(p->quantmax) && p->quantmin>0.5 ) error(EXIT_FAILURE, 0, "%g>=0.5! When only one value is given to the " "'--%s' option, the range is defined as Q and 1-Q. Thus, the " "value must be less than 0.5", p->quantmin, option->name); /* Clean up and return. */ gal_data_free(in); return NULL; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct statisticsparams *p) { gal_list_i32_t *tmp; struct gal_tile_two_layer_params *tl=&p->cp.tl; /* Check if the format of the output table is valid, given the type of the output. */ gal_tableintern_check_fits_format(p->cp.output, p->cp.tableformat); /* If in tile-mode, we must have at least one single valued option. */ if(p->ontile && p->singlevalue==NULL) error(EXIT_FAILURE, 0, "at least one of the single-value measurements " "(for example '--median') must be requested with the '--ontile' " "option: there is no value to put in each tile"); /* Tessellation related options. */ if( p->ontile || p->sky ) { /* The tile or sky mode cannot be called with any other modes. */ if( p->asciihist || p->asciicfp || p->histogram || p->histogram2d || p->cumulative || p->sigmaclip || p->madclip || p->fitname || !isnan(p->mirror) ) error(EXIT_FAILURE, 0, "'--ontile' or '--sky' cannot be called " "with any of the 'particular' calculation options, for " "example '--histogram' or '--madclip'. Because these " "operators change the order of the data and element " "positions are changed, but in the former positions are " "significant"); /* Make sure the tessellation defining options are given. */ if( tl->tilesize==NULL || tl->numchannels==NULL || isnan(tl->remainderfrac) ) error(EXIT_FAILURE, 0, "'--tilesize', '--numchannels', and " "'--remainderfrac' are mandatory options when dealing with " "a tessellation (in '--ontile' or '--sky' mode). Atleast " "one of these options wasn't given a value."); } /* In Sky mode, several options are mandatory. */ if( p->sky ) { /* Mandatory options. */ if( isnan(p->meanmedqdiff) || isnan(p->sclipparams[0]) || p->cp.interpmetric==0 || p->cp.interpnumngb==0 ) error(EXIT_FAILURE, 0, "'--meanmedqdiff', '--sclipparams', " "'--interpmetric' and '--interpnumngb' are mandatory when " "requesting Sky measurement ('--sky')"); /* Make sure a reasonable value is given to '--meanmedqdiff'. */ if(p->meanmedqdiff>0.5) error(EXIT_FAILURE, 0, "%g is not acceptable for " "'--meanmedqdiff'! This option is the quantile-difference " "between the quantile of the mean and 0.5 (the quantile of " "the median). Since the range of quantile is from 0.0 to " "1.0, the maximum difference can therefore be 0.5. For " "more on this option, please see the \"Quantifying signal " "in a tile\" section of the Gnuastro book (with this " "command: 'info gnuastro \"Quantifying signal in a " "tile\"'", p->meanmedqdiff); if(p->meanmedqdiff>0.3 && p->cp.quiet==0) error(EXIT_SUCCESS, 0, "WARNING: %g is very high for " "'--meanmedqdiff'! This option is the quantile-difference " "between the quantile of the mean and 0.5 (the quantile " "of the median). For more on this option, please see the " "\"Quantifying signal in a tile\" section of the Gnuastro " "book (with this command: 'info gnuastro \"Quantifying " "signal in a tile\"'. To suppress this warning, please use " "the '--quiet' option", p->meanmedqdiff); /* If a kernel name has been given, we need the HDU. */ if(p->kernelname && gal_fits_file_recognized(p->kernelname) && p->khdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified for the kernel image. " "When A HDU is necessary for FITS files. You can use the " "'--khdu' ('-u') option and give it the HDU number " "(starting from zero), extension name, or anything " "acceptable by CFITSIO"); } /* Sigma-clipping needs 'sclipparams' and MAD-clipping needs 'mclipparams' */ if(p->sigmaclip && isnan(p->sclipparams[0])) error(EXIT_FAILURE, 0, "'--sclipparams' is necessary with " "'--sigmaclip'. '--sclipparams' takes two values (separated " "by a comma) for defining the sigma-clip: the multiple of " "sigma, and tolerance (<1) or number of clips (>1)."); if(p->madclip && isnan(p->mclipparams[0])) error(EXIT_FAILURE, 0, "'--mclipparams' is necessary with " "'--madclip' (median absolute deviation clipping). " "'--mclipparams' takes two values (separated " "by a comma) for defining the MAD-clip: the multiple of " "MAD, and tolerance (<1) or number of clips (>1)."); /* If any of the mode measurements are requested, then 'mirrordist' is mandatory. */ for(tmp=p->singlevalue; tmp!=NULL; tmp=tmp->next) switch(tmp->v) { case UI_KEY_MODE: case UI_KEY_MODESYM: case UI_KEY_MODEQUANT: case UI_KEY_MODESYMVALUE: if( isnan(p->mirrordist) ) error(EXIT_FAILURE, 0, "'--mirrordist' is required for the " "mode-related single measurements ('--mode', " "'--modequant', '--modesym', and '--modesymvalue')"); break; case UI_KEY_SIGCLIPMAD: case UI_KEY_SIGCLIPSTD: case UI_KEY_SIGCLIPMEAN: case UI_KEY_SIGCLIPNUMBER: case UI_KEY_SIGCLIPMEDIAN: if( isnan(p->sclipparams[0]) ) error(EXIT_FAILURE, 0, "'--sclipparams' is necessary with " "sigma-clipping measurements.\n\n" "'--sclipparams' takes two values (separated by a comma) " "for defining the sigma-clip: the multiple of sigma, " "and tolerance (<1) or number of clips (>1)."); break; } /* If less than and greater than are both given, make sure that the value to greater than is smaller than the value to less-than. */ if( !isnan(p->lessthan) && !isnan(p->greaterequal) && p->lessthan < p->greaterequal ) error(EXIT_FAILURE, 0, "the value to '--lessthan' (%g) must be larger " "than the value to '--greaterequal' (%g)", p->lessthan, p->greaterequal); /* Less-than and greater-equal cannot be called together with quantrange. */ if( ( !isnan(p->lessthan) || !isnan(p->greaterequal) ) && !isnan(p->quantmin) ) error(EXIT_FAILURE, 0, "'--lessthan' and/or '--greaterequal' cannot " "be called together with '--quantrange'"); /* When binned outputs are requested, make sure that 'numbins' is set. */ if( (p->histogram || p->histogram2d || p->cumulative || !isnan(p->mirror)) && p->numbins==0) error(EXIT_FAILURE, 0, "'--numbins' isn't set. When the histogram or " "cumulative frequency plots are requested, the number of bins " "('--numbins') is necessary"); if( p->histogram2d ) { if( p->numbins2==0 ) error(EXIT_FAILURE, 0, "'--numbins2' isn't set. When a 2D " "histogram is requested, the number of bins in the " "second dimension ('--numbins2') is also necessary"); if( strcmp(p->histogram2d,"table") && strcmp(p->histogram2d,"image") ) error(EXIT_FAILURE, 0, "the value to '--histogram2d' can " "either be 'table' or 'image'"); } /* If an ascii plot is requested, check if the ascii number of bins and height are given. */ if( (p->asciihist || p->asciicfp) && (p->numasciibins==0 || p->asciiheight==0) ) error(EXIT_FAILURE, 0, "when an ascii plot is requested, " "'--numasciibins' and '--asciiheight' are mandatory, but " "at least one of these has not been given"); /* Find the fitting type code from the input string. */ if(p->fitname) { /* Interpret the name. */ p->fitid=gal_fit_name_to_id(p->fitname); /* Wrong name? */ if(p->fitid==GAL_FIT_INVALID) error(EXIT_FAILURE, 0, "'%s' is not a recognized name for " "the type of fitting, please see the description of " "'--fit' in the manual (you can run `info %s`", p->fitname, PROGRAM_EXEC); /* Options for polynomial fits. */ if( p->fitid==GAL_FIT_POLYNOMIAL || p->fitid==GAL_FIT_POLYNOMIAL_ROBUST || p->fitid==GAL_FIT_POLYNOMIAL_WEIGHTED ) { /* '--fitmaxpower' is mandatory. */ if(p->fitmaxpower==GAL_BLANK_SIZE_T) error(EXIT_FAILURE, 0, "'--fitmaxpower' is necessary for " "polynomial fitting. This is the maximum power of X " "in the fitted polynomial"); /* For the robust types, '--fitrobustname' is mandatory. */ if( p->fitid==GAL_FIT_POLYNOMIAL_ROBUST ) { /* Make sure '--fitrobust' is given at all. */ if(p->fitrobustname==NULL) error(EXIT_FAILURE, 0, "'--fitrobust' is mandatory for " "robust fittings"); /* Find the ID of the fit. */ p->fitrobustid=gal_fit_name_robust_to_id(p->fitrobustname); if(p->fitrobustid==GAL_FIT_ROBUST_INVALID) error(EXIT_FAILURE, 0, "'%s' is not a recognized robust " "function in the polynomial fittings, please see " "the manual for the acceptable names", p->fitrobustname); } } } /* In case '--checkskynointep' is given, we want everything to be similar to '--checksky' in the initial phases (when necessary, we will check 'p->checkskynointerp'. */ if(p->checkskynointerp) p->checksky=1; /* Reverse the list of statistics to print in one row and also the arguments, so it has the same order the user wanted. */ gal_list_f64_reverse(&p->tp_args); gal_list_i32_reverse(&p->singlevalue); } static void ui_check_options_and_arguments(struct statisticsparams *p) { if(p->inputname) { /* If input is FITS. */ if( (p->isfits=gal_fits_file_recognized(p->inputname)) ) { /* Check if a HDU is given. */ if( p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified. When the input is a " "FITS file, a HDU must also be specified, you can use " "the '--hdu' ('-h') option and give it the HDU number " "(starting from zero), extension name, or anything " "acceptable by CFITSIO"); /* If its an image, make sure column isn't given (in case the user confuses an image with a table). */ p->hdu_type=gal_fits_hdu_format(p->inputname, p->cp.hdu, "--hdu"); if(p->hdu_type==IMAGE_HDU && p->columns) error(EXIT_FAILURE, 0, "%s (hdu: %s): is a FITS image " "extension. The '--column' option is only applicable " "to tables.", p->inputname, p->cp.hdu); } } } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ static void ui_out_of_range_to_blank(struct statisticsparams *p) { size_t one=1; unsigned char flags=GAL_ARITHMETIC_FLAG_NUMOK; unsigned char flagsor = ( GAL_ARITHMETIC_FLAG_INPLACE | GAL_ARITHMETIC_FLAG_NUMOK ); gal_data_t *tmp, *tmp2, *cond_g=NULL, *cond_l=NULL, *cond, *blank, *ref; /* Set the dataset that should be used for the condition. */ ref = p->input; /* If the user has given a quantile range, then set the 'greaterequal' and 'lessthan' values. */ if( !isnan(p->quantmin) ) { /* If only one value was given, set the maximum quantile range. */ if( isnan(p->quantmax) ) p->quantmax = 1 - p->quantmin; /* Set the greater-equal value. */ tmp=gal_statistics_quantile(ref, p->quantmin, 1); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->greaterequal=*((float *)(tmp->array)); /* Set the lower-than value. */ tmp=gal_statistics_quantile(ref, p->quantmax, 1); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); p->lessthan=*((float *)(tmp->array)); } /* Set the condition. Note that the 'greaterequal' name is for the data we want. So we will set the condition based on those that are less-than */ if(!isnan(p->greaterequal)) { tmp=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); *((float *)(tmp->array)) = p->greaterequal; cond_g=gal_arithmetic(GAL_ARITHMETIC_OP_LT, 1, flags, ref, tmp); gal_data_free(tmp); } if( p->input->next && !isnan(p->greaterequal2) ) { tmp=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); *((float *)(tmp->array)) = p->greaterequal2; tmp2=gal_arithmetic(GAL_ARITHMETIC_OP_LT, 1, flags, p->input->next, tmp); cond_g=gal_arithmetic(GAL_ARITHMETIC_OP_OR, 1, flagsor, cond_g, tmp2); gal_data_free(tmp); gal_data_free(tmp2); } /* Same reasoning as above for 'p->greaterthan'. */ if(!isnan(p->lessthan)) { tmp=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); *((float *)(tmp->array)) = p->lessthan; cond_l=gal_arithmetic(GAL_ARITHMETIC_OP_GE, 1, flags, ref, tmp); gal_data_free(tmp); } if(p->input->next && !isnan(p->lessthan2)) { tmp=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); *((float *)(tmp->array)) = p->lessthan2; tmp2=gal_arithmetic(GAL_ARITHMETIC_OP_GE, 1, flags, p->input->next, tmp); cond_l=gal_arithmetic(GAL_ARITHMETIC_OP_OR, 1, flagsor, cond_l, tmp2); gal_data_free(tmp); gal_data_free(tmp2); } /* Now, set the final condition. If both values were specified, then use the GAL_ARITHMETIC_OP_OR to merge them into one. */ switch( !isnan(p->greaterequal) + !isnan(p->lessthan) ) { case 0: return; /* No condition was specified, return. */ case 1: /* Only one condition was specified. */ cond = isnan(p->greaterequal) ? cond_l : cond_g; break; case 2: cond = gal_arithmetic(GAL_ARITHMETIC_OP_OR, 1, flagsor, cond_l, cond_g); gal_data_free(cond_g); break; } /* Allocate a blank value to mask all pixels that don't satisfy the condition. */ blank=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); *((float *)(blank->array)) = NAN; /* Set all the pixels that satisfy the condition to blank. Note that a blank value will be used in the proper type of the input in the 'where' operator. Also reset the blank flags so they are checked again if necessary.*/ gal_arithmetic(GAL_ARITHMETIC_OP_WHERE, 1, flagsor, p->input, cond, blank); p->input->flag &= ~GAL_DATA_FLAG_BLANK_CH; p->input->flag &= ~GAL_DATA_FLAG_HASBLANK; if(p->input->next) { gal_arithmetic(GAL_ARITHMETIC_OP_WHERE, 1, flagsor, p->input->next, cond, blank); p->input->next->flag &= ~GAL_DATA_FLAG_BLANK_CH; p->input->next->flag &= ~GAL_DATA_FLAG_HASBLANK; } /* Clean up. */ gal_data_free(cond); gal_data_free(blank); } /* Check if a sorted array is necessary and if so, then make a sorted array. */ static void ui_make_sorted_if_necessary(struct statisticsparams *p) { int is_necessary=0; gal_list_i32_t *tmp; /* Check in the one-row outputs. */ for(tmp=p->singlevalue; tmp!=NULL; tmp=tmp->next) switch(tmp->v) { case UI_KEY_MODE: case UI_KEY_MEDIAN: case UI_KEY_QUANTILE: case UI_KEY_QUANTFUNC: case UI_KEY_MADCLIPMAD: case UI_KEY_SIGCLIPMAD: case UI_KEY_MADCLIPSTD: case UI_KEY_SIGCLIPSTD: case UI_KEY_QUANTOFMEAN: case UI_KEY_SIGCLIPMEAN: case UI_KEY_MADCLIPMEAN: case UI_KEY_MADCLIPNUMBER: case UI_KEY_SIGCLIPNUMBER: case UI_KEY_MADCLIPMEDIAN: case UI_KEY_SIGCLIPMEDIAN: is_necessary=1; break; } /* Check in the rest of the outputs. */ if( p->sigmaclip || p->madclip || !isnan(p->mirror) ) is_necessary=1; /* Do the sorting, we will keep the sorted array in a separate space, since the unsorted nature of the original dataset will help decrease floating point errors. If the input is already sorted, we'll just point it to the input.*/ if(is_necessary) { if( gal_statistics_is_sorted(p->input, 1) ) p->sorted=p->input; else { p->sorted=gal_data_copy(p->input); gal_statistics_sort_increasing(p->sorted); } } } /* Merge all given columns into one list. This is because people may call for different columns in one call to '--column' ('-c', separated by a comma), or multiple calls to '-c'. */ void ui_read_columns_in_one(struct statisticsparams *p) { size_t i; gal_data_t *strs; char *c, **strarr; gal_list_str_t *tmp, *final=NULL; /* Go over the separate calls to the '-c' option, see the explaination in Table's 'ui_columns_prepare' function for more on every step. */ for(tmp=p->columns;tmp!=NULL;tmp=tmp->next) { /* Remove any new-line character. */ for(c=tmp->v;*c!='\0';++c) if(*c=='\\' && *(c+1)=='\n') { *c=' '; *(++c)=' '; } /* Read the different comma-separated strings into an array (within a 'gal_data_t'). */ strs=gal_options_parse_csv_strings_to_data(tmp->v, NULL, 0); strarr=strs->array; /* Add each array element to the final list of columns. */ for(i=0;isize;++i) gal_list_str_add(&final, strarr[i], 1); /* Clean up. */ gal_data_free(strs); } /* Reverse the list to be in the same order. */ gal_list_str_reverse(&final); /* For a check. for(tmp=final;tmp!=NULL;tmp=tmp->next) printf("%s\n", tmp->v); */ /* Free the input list and replace it with 'final'. */ gal_list_str_free(p->columns, 1); p->columns=final; } void ui_read_columns(struct statisticsparams *p) { int tformat; gal_data_t *cols, *tmp, *cinfo; size_t ncols, nrows, counter=0; gal_list_str_t *lines=gal_options_check_stdin(p->inputname, p->cp.stdintimeout, "input"); /* Merge possibly multiple calls to '-c' (each possibly separated by a coma) into one list. */ ui_read_columns_in_one(p); /* If any columns are specified, and fitting hasn't been requested, make sure there is a maximum of two columns. */ if(p->fitname==NULL && gal_list_str_number(p->columns)>2) error(EXIT_FAILURE, 0, "%zu input columns were given but currently a " "maximum of two columns are supported (two columns only for " "special operations, the majority of operations are on a single " "column)", gal_list_str_number(p->columns)); /* If no column is specified, Statistics will abort and an error will be printed when the table has more than one column. If there is only one column, there is no need to specify any, so Statistics will use it. */ if(p->columns==NULL) { /* Get the basic table information. */ cinfo=gal_table_info(p->inputname, p->cp.hdu, lines, &ncols, &nrows, &tformat, "NONE"); gal_data_array_free(cinfo, ncols, 1); /* See how many columns it has and take the proper action. */ switch(ncols) { case 0: error(EXIT_FAILURE, 0, "%s contains no usable columns", ( p->inputname ? gal_checkset_dataset_name(p->inputname, p->cp.hdu) : "Standard input" )); case 1: gal_list_str_add(&p->columns, "1", 1); break; default: error(EXIT_FAILURE, 0, "%s is a table containing more than one " "column. However, the specific column to work on isn't " "specified.\n\n" "Please use the '--column' ('-c') option to specify a " "column. You can either give it the column number " "(couting from 1), or a match/search in its meta-data " "(e.g., column names).\n\n" "For more information, please run the following command " "(press the 'SPACE' key to go down and 'q' to return to " "the command-line):\n\n" " $ info gnuastro \"Selecting table columns\"\n", ( p->inputname ? gal_checkset_dataset_name(p->inputname, p->cp.hdu) : "Standard input" )); } } /* Read the desired column(s). */ cols=gal_table_read(p->inputname, p->cp.hdu, lines, p->columns, p->cp.searchin, p->cp.ignorecase, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap, NULL, "--hdu"); gal_list_str_free(lines, 1); p->input=cols; /* If the input was from standard input, we'll set the input name to be 'stdin' (for future reporting). */ if(p->inputname==NULL) gal_checkset_allocate_copy("stdin", &p->inputname); /* Print an error if there are too many columns: */ if(gal_list_str_number(p->columns)!=gal_list_data_number(cols)) gal_tableintern_error_col_selection(p->inputname, p->cp.hdu, "too " "many columns were selected by the given values to the " "'--column' (or '-c'). In other words, the number of " "columns that were read, are more than the number of " "columns given to '--column' (this can happen due to " "columns with same name for example)"); /* Make sure all columns have a usable datatype. */ for(tmp=cols; tmp!=NULL; tmp=tmp->next) { switch(tmp->type) { case GAL_TYPE_BIT: case GAL_TYPE_STRLL: case GAL_TYPE_STRING: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, " read column number %zu has a %s type, " "which is not currently supported by %s", counter, gal_type_name(tmp->type, 1), PROGRAM_NAME); } } /* For a check: printf("Number of input columns: %zu\n", gal_list_data_number(p->input)); exit(0); */ } void ui_preparations_fitestimate(struct statisticsparams *p) { size_t one=1; double dbl, *dptr=&dbl; gal_list_str_t *fecols=NULL; if( gal_type_from_string((void **)(&dptr), p->fitestimate, GAL_TYPE_FLOAT64) ) { /* If the value was "self", then we should put the input file name, its HDU and the first column in required values so they are fully read. We aren't using the read 'p->input' because rows with a blank value have been removed there. */ if( !strcmp(p->fitestimate, "self") ) { free(p->fitestimate); free(p->fitestimatehdu); free(p->fitestimatecol); gal_checkset_allocate_copy(p->inputname, &p->fitestimate); gal_checkset_allocate_copy(p->cp.hdu, &p->fitestimatehdu); gal_checkset_allocate_copy(p->columns->v, &p->fitestimatecol); } /* Make sure a HDU is specified. We need to do this here (not in 'ui_check_only_options') because only here we know that the user specified a file not a value. */ if( gal_fits_name_is_fits(p->fitestimate) && p->fitestimatehdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified for '%s' (given to " "'--fitestimate'). Please use the '--fitestimatehdu' " "option to specify the HDU", p->fitestimate); /* Make sure a column is specified. We need to do this here (not in 'ui_check_only_options') because only here we know that the user specified a file not a value. */ if( p->fitestimatecol==NULL ) error(EXIT_FAILURE, 0, "no column specified for '%s' (given to " "'--fitestimate'). Please use the '--fitestimatecol' " "option to specify the column", p->fitestimate); /* Given string couldn't be read as a number, so try reading it as a table. */ gal_list_str_add(&fecols, p->fitestimatecol, 1); p->fitestval=gal_table_read(p->fitestimate, p->fitestimatehdu, NULL, fecols, p->cp.searchin, p->cp.ignorecase, 1, p->cp.minmapsize, p->cp.quietmmap, NULL, "--fitestimatehdu"); /* If more than one column matched, inform the user. */ if(p->fitestval->next) gal_tableintern_error_col_selection(p->fitestimate, p->fitestimatehdu, "More than one column matched " "the value given to '--fitestimatecol'."); } else { /* Given string could be read as a double (in variable 'd'). */ p->fitestval=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); ((double *)(p->fitestval->array))[0]=dbl; } /* Make sure 'fitestval' has a double type. */ p->fitestval=gal_data_copy_to_new_type_free(p->fitestval, GAL_TYPE_FLOAT64); } void ui_preparations_fit_weight(struct statisticsparams *p) { double *d, *df; gal_data_t *wht; /* This is only necessary for fitting models that require a weight. */ switch(p->fitid) { case GAL_FIT_LINEAR_WEIGHTED: case GAL_FIT_POLYNOMIAL_WEIGHTED: case GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED: /* Basic sanity check first. */ if( gal_list_data_number(p->input)<3) error(EXIT_FAILURE, 0, "no weight column specified! A " "weight-based fit needs a third input column"); if(p->fitweight==0) error(EXIT_FAILURE, 0, "the nature of the input weights for " "fitting haven't been specified. Please use the " "'--fitweight' option to specify this. It can take " "values of 'std' (if the weight column is the standard " "deviation), 'var' (for variance) and 'inv-var' " "(inverse-variance) which is direct"); /* Convert the third dataset to double-precision. */ wht=gal_data_copy_to_new_type_free(p->input->next->next, GAL_TYPE_FLOAT64); p->input->next->next=wht; /* Based on the input nature, convert it to the inverse of the variance. */ d=wht->array; if( !strcmp(p->fitweight, "std") ) /* Standard deviation. */ { p->fitwhtid=STATISTICS_FIT_WHT_STD; df=d+wht->size; do *d=1/(*d * *d); while(++dfitweight, "var") ) /* Variance. */ { p->fitwhtid=STATISTICS_FIT_WHT_VAR; df=d+wht->size; do *d = 1 / *d; while(++dfitweight, "inv-var") ) /* Inverse variance. */ p->fitwhtid=STATISTICS_FIT_WHT_INVVAR; else /* Not recognized: error! */ error(EXIT_FAILURE, 0, "'%s' is not a recognized weight-type! " "Please use either 'std' (standard deviation), 'var' " "(variance) or 'inv-var' (inverse variance)", p->fitweight); break; } } void ui_preparations(struct statisticsparams *p) { gal_data_t *check; int keepinputdir=p->cp.keepinputdir; struct gal_options_common_params *cp=&p->cp; struct gal_tile_two_layer_params *tl=&cp->tl; char *checkbasename = p->cp.output ? p->cp.output : p->inputname; /* Change 'keepinputdir' based on if an output name was given. */ p->cp.keepinputdir = p->cp.output ? 1 : 0; /* Read the input. */ if(p->isfits && p->hdu_type==IMAGE_HDU) { p->inputformat=INPUT_FORMAT_IMAGE; p->input=gal_array_read_one_ch(p->inputname, cp->hdu, NULL, cp->minmapsize, p->cp.quietmmap, "--hdu"); p->input->wcs=gal_wcs_read(p->inputname, cp->hdu, p->cp.wcslinearmatrix, 0, 0, &p->input->nwcs, "--hdu"); p->input->ndim=gal_dimension_remove_extra(p->input->ndim, p->input->dsize, p->input->wcs); } else { /* Read the table columns. */ ui_read_columns(p); p->inputformat=INPUT_FORMAT_TABLE; /* Two columns can only be given with 2D histogram mode. */ if(p->histogram2d==0 && p->fitname==NULL && p->input->next!=NULL) error(EXIT_FAILURE, 0, "multi-column input is currently only " "supported for 2D histogram or fitting modes"); } /* Read the convolution kernel if necessary. */ if(p->sky && p->kernelname) { p->kernel=gal_fits_img_read_kernel(p->kernelname, p->khdu, cp->minmapsize, p->cp.quietmmap, "--khdu"); p->kernel->ndim=gal_dimension_remove_extra(p->kernel->ndim, p->kernel->dsize, NULL); } /* Tile and channel sanity checks and preparations. */ if(p->ontile || p->sky) { /* Check the tiles and make the tile structure. */ gal_tile_full_sanity_check(p->inputname, p->cp.hdu, p->input, tl); gal_tile_full_two_layers(p->input, tl); gal_tile_full_permutation(tl); /* Make the tile check image if requested. */ if(tl->checktiles) { tl->tilecheckname=gal_checkset_automatic_output(cp, checkbasename, "_tiled.fits"); check=gal_tile_block_check_tiles(tl->tiles); if(p->inputformat==INPUT_FORMAT_IMAGE) gal_fits_img_write(check, tl->tilecheckname, NULL, 0); else { gal_checkset_writable_remove(tl->tilecheckname, p->inputname, 0, cp->dontdelete); gal_table_write(check, NULL, NULL, cp->tableformat, tl->tilecheckname, "TABLE", 0, 0); } gal_data_free(check); } /* Set the check-sky output name; */ if(p->sky && p->checksky) p->checkskyname=gal_checkset_automatic_output(cp, checkbasename, "_sky_steps.fits"); } /* Set the out-of-range values in the input to blank. */ ui_out_of_range_to_blank(p); /* If we are not to work on tiles, then re-order and change the input. */ if(p->ontile==0 && p->sky==0 && p->contour==NULL) { /* Only keep the elements we want. Note that if we have more than one column, we need to move the same rows in both (otherwise their widths won't be equal). */ if(p->input->next) gal_blank_remove_rows(p->input, NULL, 0); else gal_blank_remove(p->input); /* Make sure there actually are any (non-blank) elements left. */ if(p->input->size==0) error(EXIT_FAILURE, 0, "%s: all elements are blank", gal_fits_name_save_as_string(p->inputname, cp->hdu)); /* Make sure there is data remaining: */ if(p->input->size==0) error(EXIT_FAILURE, 0, "%s: no data, maybe the '--greaterequal' " "or '--lessthan' options need to be adjusted", gal_fits_name_save_as_string(p->inputname, cp->hdu) ); /* Make the sorted array if necessary. */ ui_make_sorted_if_necessary(p); /* Set the number of output files. */ if( !isnan(p->mirror) ) ++p->numoutfiles; if( p->histogram || p->cumulative ) ++p->numoutfiles; } /* Reset 'keepinputdir' to what it originally was. */ p->cp.keepinputdir=keepinputdir; /* Make sure the output doesn't already exist. */ gal_checkset_writable_remove(p->cp.output, p->inputname, p->cp.keep, p->cp.dontdelete); /* Set the fit-estimate column, and prepare the weight based on the user's specification.*/ ui_preparations_fit_weight(p); if(p->fitestimate) ui_preparations_fitestimate(p); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct statisticsparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Prepare all the options as FITS keywords to write in output later. Note that in some modes, there is no output file, and 'ui_add_to_single_value' isn't yet prepared. */ if( (p->singlevalue && p->ontile) || p->sky || p->histogram \ || p->cumulative) gal_options_as_fits_keywords(&p->cp); } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct statisticsparams *p) { /* Free the allocated arrays: */ free(p->cp.hdu); free(p->cp.output); gal_list_data_free(p->input); gal_list_f64_free(p->tp_args); gal_list_i32_free(p->singlevalue); gal_tile_full_free_contents(&p->cp.tl); if(p->sorted!=p->input) gal_data_free(p->sorted); } gnuastro-0.22/bin/statistics/contour.c0000644000175000017500000001431614551337306013573 /********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2019-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include "main.h" #include "contour.h" /* Pixels containing contour */ static gal_data_t * contour_pixels(gal_data_t *input, double level, size_t minmapsize, int quietmmap) { size_t one=1; uint8_t *b, *a, *af; int flags=GAL_ARITHMETIC_FLAG_NUMOK; gal_data_t *number, *thresh, *eroded; /* Allocate the single-element dataset to use in arithmetic.*/ number=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &one, NULL, 1, -1, 1, NULL, NULL, NULL); *(double *)(number->array)=level; /* Only keep the pixels above the requested level, we are using the arithmetic library to not have to worry about the type of the input. */ thresh=gal_arithmetic(GAL_ARITHMETIC_OP_GT, 1, flags, input, number); /* Erode the thresholded image by one. */ eroded=gal_binary_erode(thresh, 1, 1, 0); /* Only keep the outer pixels. */ b=eroded->array; af=(a=thresh->array)+thresh->size; do if(*b++ == 1) *a=0; while(++adsize[1]; /* Go through each connected edge and add the contour positions. */ for(tmp=edgeindexs; tmp!=NULL; tmp=tmp->next) if(tmp->size>10) { if(input->wcs) { { /* Allocate the coordinate arrays. */ x=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &tmp->size, NULL, 0, -1, 1, NULL, NULL, NULL); y=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &tmp->size, NULL, 0, -1, 1, NULL, NULL, NULL); /* Fill in the coordinates. */ xa=x->array; ya=y->array; sf=(s=tmp->array)+tmp->size; do {*xa++=*s%w+1; *ya++=*s/w+1;} while(++snext=y; gal_wcs_img_to_world(x, input->wcs, 1); /* Write them. */ xa=x->array; ya=y->array; sf=(s=tmp->array)+tmp->size; do {fprintf(fp, "%.10f %.10f %f\n", *xa++, *ya++, level);} while(++sarray)+tmp->size; do {fprintf(fp, "%zu %zu %f\n", *s%w+1, *s/w+1, level);} while(++scp.keepinputdir; /* Make sure the dataset is 2D. */ if(p->input->ndim!=2) error(EXIT_FAILURE, 0, "contours are currently only supported for " "2D datasets (images). The input dataset has %zu dimensions", p->input->ndim); /* Make sure the output doesn't exist. */ p->cp.keepinputdir = p->cp.output ? 1 : keepinputdir; outname=gal_checkset_automatic_output(&p->cp, ( p->cp.output ? p->cp.output : p->inputname ), "_contour.txt"); p->cp.keepinputdir=keepinputdir; /* Open the output file. */ fp=fopen(outname, "w+"); /* Print basic information about the columns. */ fprintf(fp, "# %s Contour positions\n", PACKAGE_STRING); fprintf(fp, "# Column 1: Coord_1 [position,f64] Position in first axis.\n"); fprintf(fp, "# Column 2: Coord_2 [position,f64] Position in second axis.\n"); fprintf(fp, "# Column 3: Level [value, f32] Contour level.\n"); fprintf(fp, "#\n"); fprintf(fp, "# Each connected contour is separated by an empty line.\n"); fprintf(fp, "# This format is recognized in PGFPlots (package of LaTeX).\n"); /* Estimate the contours for each level. */ df=(d=p->contour->array)+p->contour->size; do contour_level(p->input, *d, fp, p->cp.minmapsize, p->cp.quietmmap); while(++d Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" static void * sky_on_thread(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct statisticsparams *p=(struct statisticsparams *)tprm->params; void *tblock=NULL, *tarray=NULL; int stype=p->sky_t->type, itype=p->input->type; gal_data_t *num, *tile, *mean, *meanquant, *clip; size_t i, tind, twidth=gal_type_sizeof(p->sky_t->type); uint8_t mclipflags = ( GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN | GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD ); /* Find the Sky and its standard deviation on the tiles given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Set the tile and copy its values into the array we'll be using. */ tind = tprm->indexs[i]; tile = &p->cp.tl.tiles[tind]; /* If we have a convolved image, temporarily (only for finding the mean) change the tile's pointers so we can work on the convolved image for the mean. */ if(p->kernel) { tarray=tile->array; tblock=tile->block; tile->array=gal_tile_block_relative_to_other(tile, p->convolved); tile->block=p->convolved; } /* Calculate the mean's quantile. */ mean=gal_statistics_mean(tile); num=gal_statistics_number(tile); mean=gal_data_copy_to_new_type_free(mean, itype); meanquant = ( *(size_t *)(num->array) ? gal_statistics_quantile_function(tile, mean, 1) : NULL ); /* Reset the pointers of 'tile'. */ if(p->kernel) { tile->array=tarray; tile->block=tblock; } /* Check the mean quantile value. Note that if the mode is in-accurate, then the values will be NaN and all conditionals will fail. So, we'll go onto finding values for this tile */ if( meanquant && fabs( *(double *)(meanquant->array)-0.5f) < p->meanmedqdiff ) { /* Get the sigma-clipped mean and standard deviation. 'inplace' is irrelevant here because this is a tile and it will be copied anyway. */ clip=gal_statistics_clip_sigma(tile, p->sclipparams[0], p->sclipparams[1], mclipflags, 1, 1); /* Put the mean and its standard deviation into the respective place for this tile. */ clip=gal_data_copy_to_new_type_free(clip, stype); memcpy(gal_pointer_increment(p->sky_t->array, tind, stype), gal_pointer_increment(clip->array, GAL_STATISTICS_CLIP_OUTCOL_MEAN, stype), twidth); memcpy(gal_pointer_increment(p->std_t->array, tind, stype), gal_pointer_increment(clip->array, GAL_STATISTICS_CLIP_OUTCOL_STD, stype), twidth); /* Clean up. */ gal_data_free(clip); } else { gal_blank_write(gal_pointer_increment(p->sky_t->array, tind, stype), stype); gal_blank_write(gal_pointer_increment(p->std_t->array, tind, stype), stype); } /* Clean up. */ gal_data_free(num); gal_data_free(mean); gal_data_free(meanquant); } /* Wait for all threads to finish and return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } void sky(struct statisticsparams *p) { char *msg, *outname; struct timeval t0, t1; gal_data_t *num, *tmp; uint8_t keepinputdir=p->cp.keepinputdir; struct gal_options_common_params *cp=&p->cp; struct gal_tile_two_layer_params *tl=&cp->tl; /* Print basic information */ if(!cp->quiet) { gettimeofday(&t0, NULL); printf("%s\n", PROGRAM_STRING); printf("Estimating Sky (reference value) and its STD.\n"); printf("-----------\n"); printf(" - Using %zu CPU thread%s.\n", cp->numthreads, cp->numthreads==1 ? "" : "s"); printf(" - Input: %s (hdu: %s)\n", p->inputname, cp->hdu); if(p->kernelname) printf(" - Kernel: %s (hdu: %s)\n", p->kernelname, p->khdu); } /* When checking steps, the input image is the first extension. */ if(p->checksky) gal_fits_img_write(p->input, p->checkskyname, NULL, 0); /* Convolve the image (if desired). */ if(p->kernel) { if(!cp->quiet) gettimeofday(&t1, NULL); p->convolved=gal_convolve_spatial(tl->tiles, p->kernel, cp->numthreads, 1, tl->workoverch, 0); if(p->checksky) gal_fits_img_write(p->convolved, p->checkskyname, NULL, 0); if(!cp->quiet) gal_timing_report(&t1, "Input convolved with kernel.", 1); } /* Make the arrays keeping the Sky and Sky standard deviation values. */ p->sky_t=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, p->input->ndim, tl->numtiles, NULL, 0, p->input->minmapsize, p->cp.quietmmap, "SKY", p->input->unit, NULL); p->std_t=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, p->input->ndim, tl->numtiles, NULL, 0, p->input->minmapsize, p->cp.quietmmap, "SKY STD", p->input->unit, NULL); /* Find the Sky and Sky standard deviation on the tiles. */ if(!cp->quiet) gettimeofday(&t1, NULL); gal_threads_spin_off(sky_on_thread, p, tl->tottiles, cp->numthreads, cp->minmapsize, cp->quietmmap); if(!cp->quiet) { num=gal_statistics_number(p->sky_t); if( asprintf(&msg, "Sky and its STD found on %zu/%zu tiles.", *((size_t *)(num->array)), tl->tottiles )<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(&t1, msg, 1); gal_data_free(num); free(msg); } if(p->checksky) { gal_tile_full_values_write(p->sky_t, tl, !p->ignoreblankintiles, p->checkskyname, NULL, 0); gal_tile_full_values_write(p->std_t, tl, !p->ignoreblankintiles, p->checkskyname, NULL, 0); } /* Remove outliers if requested. */ if(p->outliernumngb) gal_tileinternal_no_outlier_local(p->sky_t, p->std_t, NULL, &cp->tl, cp->interpmetric, p->outliernumngb, cp->numthreads, p->outliersclip, p->outliersigma, p->checkskyname, "--outliernumngb"); /* If the user only wants the sky level to this step, don't bother with the rest (note that 'p->checksky' was activated in 'ui.c'). */ if(p->checkskynointerp) exit(EXIT_SUCCESS); /* Interpolate the Sky and its standard deviation. */ if(!cp->quiet) gettimeofday(&t1, NULL); p->sky_t->next=p->std_t; tmp=gal_interpolate_neighbors(p->sky_t, tl, cp->interpmetric, cp->interpnumngb, cp->numthreads, cp->interponlyblank, 1, GAL_INTERPOLATE_NEIGHBORS_FUNC_MEDIAN); gal_data_free(p->sky_t); gal_data_free(p->std_t); p->sky_t=tmp; p->std_t=tmp->next; p->sky_t->next=p->std_t->next=NULL; if(!cp->quiet) gal_timing_report(&t1, "All blank tiles filled (interplated).", 1); if(p->checksky) { gal_tile_full_values_write(p->sky_t, tl, !p->ignoreblankintiles, p->checkskyname, NULL, 0); gal_tile_full_values_write(p->std_t, tl, !p->ignoreblankintiles, p->checkskyname, NULL, 0); } /* Smooth the Sky and Sky STD arrays. */ if(p->smoothwidth>1) { if(!cp->quiet) gettimeofday(&t1, NULL); tmp=gal_tile_full_values_smooth(p->sky_t, tl, p->smoothwidth, p->cp.numthreads); gal_data_free(p->sky_t); p->sky_t=tmp; tmp=gal_tile_full_values_smooth(p->std_t, tl, p->smoothwidth, p->cp.numthreads); gal_data_free(p->std_t); p->std_t=tmp; if(!cp->quiet) gal_timing_report(&t1, "Smoothed Sky and Sky STD values on tiles.", 1); if(p->checksky) { gal_tile_full_values_write(p->sky_t, tl, !p->ignoreblankintiles, p->checkskyname, NULL, 0); gal_tile_full_values_write(p->std_t, tl, !p->ignoreblankintiles, p->checkskyname, NULL, 0); if(!cp->quiet) printf(" - Check image written to '%s'.\n", p->checkskyname); } } /* Save the Sky and its standard deviation. We want the output to have a '_sky.fits' suffix. So we'll temporarily re-set 'p->cp.keepinputdir' if the user asked for a specific name. Note that we copied the actual value in the 'keepinputdir' above (in the definition). */ p->cp.keepinputdir = p->cp.output ? 1 : keepinputdir; outname=gal_checkset_automatic_output(&p->cp, ( p->cp.output ? p->cp.output : p->inputname ), "_sky.fits"); p->sky_t->name="SKY"; p->std_t->name="SKY_STD"; p->cp.keepinputdir=keepinputdir; gal_tile_full_values_write(p->sky_t, tl, !p->ignoreblankintiles, outname, NULL, 0); gal_tile_full_values_write(p->std_t, tl, !p->ignoreblankintiles, outname, NULL, 0); p->sky_t->name = p->std_t->name = NULL; gal_fits_key_write_filename("input", p->inputname, &p->cp.ckeys, 1, p->cp.quiet); gal_fits_key_write(p->cp.ckeys, outname, "0", "NONE", 1, 0); if(!cp->quiet) printf(" - Sky and its STD written to '%s'.\n", outname); /* Clean up and return. */ free(outname); gal_data_free(p->sky_t); gal_data_free(p->std_t); gal_data_free(p->convolved); if(!cp->quiet) { printf("-----------\n"); gal_timing_report(&t0, "Completed in:", 0); printf("-----------\n"); } } gnuastro-0.22/bin/statistics/statistics.c0000644000175000017500000016756714551337306014315 /********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "sky.h" #include "contour.h" #include "statistics.h" /*******************************************************************/ /************** Print in one row ***************/ /*******************************************************************/ static gal_data_t * statistics_pull_out_element(gal_data_t *input, size_t index) { size_t dsize=1; gal_data_t *out=gal_data_alloc(NULL, input->type, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); memcpy( out->array, gal_pointer_increment(input->array, index, input->type), gal_type_sizeof(input->type) ); return out; } static double statistics_read_check_args(struct statisticsparams *p) { double d; if(p->tp_args==NULL) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "address the problem. Not enough arguments for the requested " "single measurement options", __func__, PACKAGE_BUGREPORT); d=gal_list_f64_pop(&p->tp_args); return d; } /* This function checks if any of the optional clipping measurements are requested (among all the single-valued measuremens) or not. If so, it will add their respective flag. */ static uint8_t statistics_one_row_clip_flags(struct statisticsparams *p, int32_t mean, int32_t std, int32_t mad) { uint8_t flags=0; gal_list_i32_t *tmp; for(tmp=p->singlevalue; tmp!=NULL; tmp=tmp->next) { if(tmp->v==std) flags |= GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD; if(tmp->v==mad) flags |= GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MAD; if(tmp->v==mean) flags |= GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN; } return flags; } static void statistics_print_one_row(struct statisticsparams *p) { int mustfree; char *toprint; double arg, *d; uint8_t clipflag; gal_list_i32_t *tmp; gal_data_t *medmad=NULL; size_t dsize=1, counter; gal_data_t *sclip=NULL, *mclip=NULL; gal_data_t *sum=NULL, *meanstd=NULL, *modearr=NULL; gal_data_t *tmpv, *out=NULL, *num=NULL, *min=NULL, *max=NULL; /* The user can ask for any of the operators more than once, also some operators might return more than one usable value (like mode). So we will calculate the desired values once, and then print them any number of times. */ for(tmp=p->singlevalue; tmp!=NULL; tmp=tmp->next) switch(tmp->v) { /* Calculate respective values. Checking with 'if(num==NULL)' gives compiler warnings of 'this if clause does not guard ...'. So we are using this empty-if and else statement. */ case UI_KEY_NUMBER: num = num ? num : gal_statistics_number(p->input); break; case UI_KEY_MINIMUM: min = min ? min : gal_statistics_minimum(p->input); break; case UI_KEY_MAXIMUM: max = max ? max : gal_statistics_maximum(p->input); break; case UI_KEY_SUM: sum = sum ? sum : gal_statistics_sum(p->input); break; case UI_KEY_STD: case UI_KEY_MEAN: case UI_KEY_QUANTOFMEAN: meanstd = meanstd ? meanstd : gal_statistics_mean_std(p->input); break; case UI_KEY_MAD: case UI_KEY_MEDIAN: medmad = medmad ? medmad : gal_statistics_median_mad(p->input, 0); break; case UI_KEY_MODE: case UI_KEY_MODEQUANT: case UI_KEY_MODESYM: case UI_KEY_MODESYMVALUE: modearr = ( modearr ? modearr : gal_statistics_mode(p->sorted, p->mirrordist, 0) ); d=modearr->array; if(d[2]sorted, p->mclipparams[0], p->mclipparams[1], clipflag, 0, 1); } break; case UI_KEY_SIGCLIPSTD: case UI_KEY_SIGCLIPMAD: case UI_KEY_SIGCLIPMEAN: case UI_KEY_SIGCLIPNUMBER: case UI_KEY_SIGCLIPMEDIAN: if(sclip==NULL) { clipflag=statistics_one_row_clip_flags(p, UI_KEY_SIGCLIPMEAN, UI_KEY_SIGCLIPSTD, UI_KEY_SIGCLIPMAD); sclip=gal_statistics_clip_sigma(p->sorted, p->sclipparams[0], p->sclipparams[1], clipflag, 0, 1); } break; /* These will be calculated as printed. */ case UI_KEY_QUANTILE: case UI_KEY_QUANTFUNC: break; /* The option isn't recognized. */ default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we " "can address the problem. Operation code %d not recognized", __func__, PACKAGE_BUGREPORT, tmp->v); } /* Print every requested number. */ counter=0; for(tmp=p->singlevalue; tmp!=NULL; tmp=tmp->next) { /* By default don't free anything. */ mustfree=0; /* Get the output. */ switch(tmp->v) { /* Previously calculated values. */ case UI_KEY_NUMBER: out=num; break; case UI_KEY_MINIMUM: out=min; break; case UI_KEY_MAXIMUM: out=max; break; case UI_KEY_SUM: out=sum; break; case UI_KEY_MEDIAN: out=statistics_pull_out_element(medmad, 0); mustfree=1; break; case UI_KEY_MAD: out=statistics_pull_out_element(medmad, 1); mustfree=1; break; case UI_KEY_MEAN: out=statistics_pull_out_element(meanstd, 0); mustfree=1; break; case UI_KEY_STD: out=statistics_pull_out_element(meanstd, 1); mustfree=1; break; case UI_KEY_MODE: out=statistics_pull_out_element(modearr, 0); mustfree=1; break; case UI_KEY_MODEQUANT: out=statistics_pull_out_element(modearr, 1); mustfree=1; break; case UI_KEY_MODESYM: out=statistics_pull_out_element(modearr, 2); mustfree=1; break; case UI_KEY_MODESYMVALUE: out=statistics_pull_out_element(modearr, 3); mustfree=1; break; case UI_KEY_MADCLIPMAD: out=statistics_pull_out_element(mclip, GAL_STATISTICS_CLIP_OUTCOL_MAD); mustfree=1; break; case UI_KEY_MADCLIPSTD: out=statistics_pull_out_element(mclip, GAL_STATISTICS_CLIP_OUTCOL_STD); mustfree=1; break; case UI_KEY_MADCLIPMEAN: out=statistics_pull_out_element(mclip, GAL_STATISTICS_CLIP_OUTCOL_MEAN); mustfree=1; break; case UI_KEY_MADCLIPMEDIAN: out=statistics_pull_out_element(mclip, GAL_STATISTICS_CLIP_OUTCOL_MEDIAN); mustfree=1; break; case UI_KEY_MADCLIPNUMBER: out=statistics_pull_out_element(mclip, GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED); mustfree=1; break; case UI_KEY_SIGCLIPMAD: out=statistics_pull_out_element(sclip, GAL_STATISTICS_CLIP_OUTCOL_MAD); mustfree=1; break; case UI_KEY_SIGCLIPSTD: out=statistics_pull_out_element(sclip, GAL_STATISTICS_CLIP_OUTCOL_STD); mustfree=1; break; case UI_KEY_SIGCLIPMEAN: out=statistics_pull_out_element(sclip, GAL_STATISTICS_CLIP_OUTCOL_MEAN); mustfree=1; break; case UI_KEY_SIGCLIPMEDIAN: out=statistics_pull_out_element(sclip, GAL_STATISTICS_CLIP_OUTCOL_MEDIAN); mustfree=1; break; case UI_KEY_SIGCLIPNUMBER: out=statistics_pull_out_element(sclip, GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED); mustfree=1; break; /* Not previously calculated. */ case UI_KEY_QUANTILE: mustfree=1; arg = statistics_read_check_args(p); out = gal_statistics_quantile(p->sorted, arg, 0); break; case UI_KEY_QUANTFUNC: mustfree=1; arg = statistics_read_check_args(p); tmpv = gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); *((double *)(tmpv->array)) = arg; tmpv = gal_data_copy_to_new_type_free(tmpv, p->input->type); out = gal_statistics_quantile_function(p->sorted, tmpv, 0); gal_data_free(tmpv); break; case UI_KEY_QUANTOFMEAN: mustfree=1; tmpv=statistics_pull_out_element(meanstd, 0); out = gal_statistics_quantile_function(p->sorted, tmpv, 0); gal_data_free(tmpv); break; /* The option isn't recognized. */ default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we " "can address the problem. Operation code %d not recognized", __func__, PACKAGE_BUGREPORT, tmp->v); } /* Print the number. Note that we don't want any extra white space characters before or after the printed outputs. So we have defined 'counter' to add a single white space character before any element except the first one. */ toprint=gal_type_to_string(out->array, out->type, 0); printf("%s%s", counter ? " " : "", toprint); free(toprint); /* Clean up (if necessary). */ ++counter; if(mustfree) gal_data_free(out); } /* Print a new line. */ printf("\n"); /* Clean any of the allocated arrays. */ if(num) gal_data_free(num); if(min) gal_data_free(min); if(max) gal_data_free(max); if(sum) gal_data_free(sum); if(sclip) gal_data_free(sclip); if(medmad) gal_data_free(medmad); if(meanstd) gal_data_free(meanstd); if(modearr) gal_data_free(modearr); } /*******************************************************************/ /************** Single value on tile ***************/ /*******************************************************************/ static void statistics_interpolate_and_write(struct statisticsparams *p, gal_data_t *values, char *output) { gal_data_t *interpd; struct gal_options_common_params *cp=&p->cp; /* Do the interpolation (if necessary). */ if( p->interpolate && !(p->cp.interponlyblank && gal_blank_present(values, 1)==0) ) { interpd=gal_interpolate_neighbors(values, &cp->tl, cp->interpmetric, cp->interpnumngb, cp->numthreads, cp->interponlyblank, 0, GAL_INTERPOLATE_NEIGHBORS_FUNC_MEDIAN); gal_data_free(values); values=interpd; } /* Write the values. */ gal_tile_full_values_write(values, &cp->tl, !p->ignoreblankintiles, output, NULL, 0); gal_fits_key_write_filename("input", p->inputname, &p->cp.ckeys, 1, p->cp.quiet); gal_fits_key_write(p->cp.ckeys, output, "0", "NONE", 1, 0); } static void statistics_on_tile(struct statisticsparams *p) { double arg=0; gal_list_i32_t *operation; gal_data_t *tile, *values; size_t tind, dsize=1, mind=-1; uint8_t type=GAL_TYPE_INVALID; gal_data_t *tmp=NULL, *tmpv=NULL, *ttmp; struct gal_options_common_params *cp=&p->cp; struct gal_tile_two_layer_params *tl=&p->cp.tl; char *output=gal_checkset_automatic_output(cp, cp->output ? cp->output : p->inputname, "_ontile.fits"); /* Do the operation on each tile. */ for(operation=p->singlevalue; operation!=NULL; operation=operation->next) { /* Set the type of the output array. */ switch(operation->v) { case UI_KEY_NUMBER: type=GAL_TYPE_INT32; break; case UI_KEY_MINIMUM: case UI_KEY_MAXIMUM: case UI_KEY_MEDIAN: case UI_KEY_MODE: case UI_KEY_QUANTFUNC: type=p->input->type; break; case UI_KEY_SUM: case UI_KEY_MEAN: case UI_KEY_STD: case UI_KEY_QUANTILE: case UI_KEY_MODEQUANT: case UI_KEY_MODESYM: case UI_KEY_MODESYMVALUE: type=GAL_TYPE_FLOAT64; break; default: error(EXIT_FAILURE, 0, "%s: a bug! %d is not a recognized " "operation code", __func__, operation->v); } /* Allocate the space necessary to keep the value for each tile. */ values=gal_data_alloc(NULL, type, p->input->ndim, tl->numtiles, NULL, 0, p->input->minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Read the argument for those operations that need it. This is done here, because below, the functions are repeated on each tile. */ switch(operation->v) { case UI_KEY_QUANTILE: arg = statistics_read_check_args(p); break; case UI_KEY_QUANTFUNC: arg = statistics_read_check_args(p); tmpv = gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); *((double *)(tmpv->array)) = arg; tmpv = gal_data_copy_to_new_type_free(tmpv, p->input->type); } /* Do the operation on each tile. */ tind=0; for(tile=tl->tiles; tile!=NULL; tile=tile->next) { /* Do the proper operation. */ switch(operation->v) { case UI_KEY_NUMBER: tmp=gal_statistics_number(tile); break; case UI_KEY_MINIMUM: tmp=gal_statistics_minimum(tile); break; case UI_KEY_MAXIMUM: tmp=gal_statistics_maximum(tile); break; case UI_KEY_MEDIAN: tmp=gal_statistics_median(tile, 1); break; case UI_KEY_QUANTFUNC: tmp=gal_statistics_quantile_function(tile, tmpv, 1); break; case UI_KEY_SUM: tmp=gal_statistics_sum(tile); break; case UI_KEY_MEAN: tmp=gal_statistics_mean(tile); break; case UI_KEY_STD: tmp=gal_statistics_std(tile); break; case UI_KEY_QUANTILE: tmp=gal_statistics_quantile(tile, arg, 1); break; case UI_KEY_MODE: case UI_KEY_MODESYM: case UI_KEY_MODEQUANT: case UI_KEY_MODESYMVALUE: switch(operation->v) { case UI_KEY_MODE: mind=0; break; case UI_KEY_MODESYM: mind=2; break; case UI_KEY_MODEQUANT: mind=1; break; case UI_KEY_MODESYMVALUE: mind=3; break; } tmp=gal_statistics_mode(tile, p->mirrordist, 1); ttmp=statistics_pull_out_element(tmp, mind); gal_data_free(tmp); tmp=ttmp; break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to " "fix the problem. The operation code %d is not " "recognized", __func__, PACKAGE_BUGREPORT, operation->v); } /* Put the output value into the 'values' array and clean up. */ tmp=gal_data_copy_to_new_type_free(tmp, type); memcpy(gal_pointer_increment(values->array, tind++, values->type), tmp->array, gal_type_sizeof(type)); gal_data_free(tmp); } /* Do the interpolation (if necessary) and write the array into the output. */ statistics_interpolate_and_write(p, values, output); /* Clean up. */ gal_data_free(values); if(operation->v==UI_KEY_QUANTFUNC) gal_data_free(tmpv); } /* Clean up. */ free(output); } /*******************************************************************/ /************** ASCII plots ***************/ /*******************************************************************/ static void print_ascii_plot(struct statisticsparams *p, gal_data_t *plot, gal_data_t *bins, int h1_c0, int printinfo) { int i, j; size_t *s, *sf, max=0; double *b, v, halfbinwidth, correction; /* Find the maximum of the plot. */ sf=(s=plot->array)+plot->size; do max = *s>max ? *s : max; while(++sarray; halfbinwidth = (b[1]-b[0])/2; printf("\nASCII %s:\n", ( h1_c0 ? "Histogram" : "Cumulative frequency plot") ); if(h1_c0) printf("Number: %zu\n", p->input->size); printf("Y: (linear: 0 to %zu)\n", max); printf("X: (linear: %g -- %g, in %zu bins)\n", b[0]-halfbinwidth, b[ bins->size - 1 ] + halfbinwidth, bins->size); } /* Print the ASCII plot: */ s=plot->array; correction = (double)(p->asciiheight) / (double)max; for(i=p->asciiheight;i>=0;--i) { printf(" |"); for(j=0;jsize;++j) { v = (double)s[j] * correction; if( v >= ((double)i-0.5f) && v > 0.0f ) printf("*"); else printf(" "); } printf("\n"); } printf(" |"); for(j=0;jsize;++j) printf("-"); printf("\n\n"); } /* Data structure that must be fed into 'gal_statistics_regular_bins'.*/ static gal_data_t * set_bin_range_params(struct statisticsparams *p, size_t dim) { size_t rsize=2; gal_data_t *range=NULL; if(p->manualbinrange) { /* Allocate the range data structure. */ range=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &rsize, NULL, 0, -1, 1, NULL, NULL, NULL); switch(dim) { case 1: ((float *)(range->array))[0]=p->greaterequal; ((float *)(range->array))[1]=p->lessthan; break; case 2: ((float *)(range->array))[0]=p->greaterequal2; ((float *)(range->array))[1]=p->lessthan2; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "address the problem. The value %zu for 'dim' isn't " "recogized", __func__, PACKAGE_BUGREPORT, dim); } } return range; } static void ascii_plots(struct statisticsparams *p) { gal_data_t *bins, *hist, *cfp=NULL, *range=NULL; /* Make the bins and the respective plot. */ range=set_bin_range_params(p, 1); bins=gal_statistics_regular_bins(p->input, range, p->numasciibins, NAN); hist=gal_statistics_histogram(p->input, bins, 0, 0); if(p->asciicfp) { bins->next=hist; cfp=gal_statistics_cfp(p->input, bins, 0); } /* Print the plots. */ if(p->asciihist) print_ascii_plot(p, hist, bins, 1, 1); if(p->asciicfp) print_ascii_plot(p, cfp, bins, 0, 1); /* Clean up.*/ gal_data_free(bins); gal_data_free(hist); gal_data_free(range); if(p->asciicfp) gal_data_free(cfp); } /*******************************************************************/ /******* Histogram and cumulative frequency tables ***********/ /*******************************************************************/ static char * statistics_output_name(struct statisticsparams *p, char *suf, int *isfits) { int use_auto_output=0; char *out, *fix, *suffix=NULL; /* Automatic output should be used when no output name was specified or we have more than one output file. */ use_auto_output = p->cp.output ? (p->numoutfiles>1 ? 1 : 0) : 1; /* Set the 'fix' and 'suffix' strings. Note that 'fix' is necessary in every case, even when no automatic output is to be used. Since it is used to determine the format of the output. */ fix = ( *isfits ? "fits" : ( p->cp.output ? gal_fits_name_is_fits(p->cp.output) ? "fits" : "txt" : "txt" ) ); if(use_auto_output) if( asprintf(&suffix, "%s.%s", suf, fix)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); /* Make the output name. */ out = ( use_auto_output ? gal_checkset_automatic_output(&p->cp, p->inputname, suffix) : p->cp.output ); /* See if it is a FITS file. */ *isfits=strcmp(fix, "fits")==0; /* Make sure it doesn't already exist. */ gal_checkset_writable_remove(out, p->inputname, 0, p->cp.dontdelete); /* Clean up and return. */ if(suffix) free(suffix); return out; } void write_output_table(struct statisticsparams *p, gal_data_t *table, char *suf, char *contents) { int isfits=0; char *tmp, *output; gal_list_str_t *comments=NULL; /* Set the output. */ output=statistics_output_name(p, suf, &isfits); /* Write the comments, NOTE: we are writing the first two in reverse of the order we want them. They will later be freed as part of the list's freeing.*/ tmp=gal_fits_name_save_as_string(p->inputname, p->cp.hdu); gal_list_str_add(&comments, tmp, 0); if( asprintf(&tmp, "%s created from:", contents)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_list_str_add(&comments, tmp, 0); if(!isfits) /* The intro info will be in FITS files anyway.*/ gal_table_comments_add_intro(&comments, PROGRAM_STRING, &p->rawtime); /* Write the table. */ gal_checkset_writable_remove(output, p->inputname, 0, p->cp.dontdelete); gal_table_write(table, NULL, comments, p->cp.tableformat, output, "TABLE", 0, 0); /* Write the configuration information if we have a FITS output. */ if(isfits) { gal_fits_key_write_filename("input", p->inputname, &p->cp.ckeys, 1, p->cp.quiet); gal_fits_key_write(p->cp.ckeys, output, "0", "NONE", 1, 0); } /* Let the user know, if we aren't in quiet mode. */ if(!p->cp.quiet) printf("%s created.\n", output); /* Clean up. */ gal_list_str_free(comments, 1); if(output!=p->cp.output) free(output); } static void save_hist_and_or_cfp(struct statisticsparams *p) { char *suf, *contents; gal_data_t *bins, *hist, *cfp=NULL, *range=NULL; /* Set the bins and make the histogram, this is necessary for both the histogram and CFP (recall that the CFP is built from the histogram). */ range=set_bin_range_params(p, 1); bins=gal_statistics_regular_bins(p->input, range, p->numbins, p->onebinstart); hist=gal_statistics_histogram(p->input, bins, p->normalize, p->maxbinone); /* Set the histogram as the next pointer of bins. This is again necessary in both cases: when only a histogram is requested, it is used for the plotting. When only a CFP is desired, it is used as input into 'gal_statistics_cfp'. */ bins->next=hist; /* Make the cumulative frequency plot if the user wanted it. Make the CFP, note that for the CFP, 'maxbinone' and 'normalize' are the same: the last bin (largest value) must be one. So if any of them are given, then set the last argument to 1.*/ if(p->cumulative) cfp=gal_statistics_cfp(p->input, bins, p->normalize || p->maxbinone); /* FITS tables don't accept 'uint64_t', so to be consistent, we'll conver the histogram and CFP to 'uint32_t'.*/ if(hist->type==GAL_TYPE_UINT64) hist=gal_data_copy_to_new_type_free(hist, GAL_TYPE_UINT32); if(cfp && cfp->type==GAL_TYPE_UINT64) cfp=gal_data_copy_to_new_type_free(cfp, GAL_TYPE_UINT32); /* Finalize the next pointers. */ bins->next=hist; hist->next=cfp; /* Prepare the contents. */ if(p->histogram && p->cumulative) { suf="-hist-cfp"; contents="Histogram and cumulative frequency plot"; } else if(p->histogram) { suf="-hist"; contents="Histogram"; } else { suf="-cfp"; contents="Cumulative frequency plot"; } /* Set the output file name. */ write_output_table(p, bins, suf, contents); /* Clean up. */ gal_data_free(range); } /* In the WCS standard, '-' is meaningful, so if a column name contains '-', it should be changed to '_'. */ static char * histogram_2d_set_ctype(char *orig, char *backup) { char *c, *out=NULL; /* If an original name exists, then check it. Otherwise, just return the backup string so 'CTYPE' isn't left empty. */ if(orig) { /* Copy the original name into a newly allocated space because we later want to free it. */ gal_checkset_allocate_copy(orig, &out); /* Parse the copy and if a dash is present, correct it. */ for(c=out; *c!='\0'; ++c) if(*c=='-') *c='_'; } else gal_checkset_allocate_copy(backup, &out); /* Return the final string. */ return out; } static void histogram_2d(struct statisticsparams *p) { int isfits=1; int32_t *imgarr; double *d1, *d2; uint32_t *histarr; gal_data_t *range1, *range2; gal_data_t *img, *hist2d, *bins; size_t i, j, dsize[2], nb1=p->numbins, nb2=p->numbins2; char *output, suf[]="-hist2d", contents[]="2D Histogram"; /* WCS-related arrays. */ char *cunit[2], *ctype[2]; double crpix[2], crval[2], cdelt[2], pc[4]={1,0,0,1}; /* Set the bins for each dimension */ range1=set_bin_range_params(p, 1); range2=set_bin_range_params(p, 2); bins=gal_statistics_regular_bins(p->input, range1, nb1, p->onebinstart); bins->next=gal_statistics_regular_bins(p->input->next, range2, nb2, p->onebinstart2); /* Build the 2D histogram. */ hist2d=gal_statistics_histogram2d(p->input, bins); /* Write the histogram into a 2D FITS image. Note that in the FITS image standard, the first axis is the fastest array (unlike the default format we have adopted for the tables). */ if(!strcmp(p->histogram2d,"image")) { /* Allocate the 2D image array. Note that 'dsize' is in the order of C, where the first dimension is the slowest. However, in FITS the fastest dimension is the first. */ dsize[0]=nb2; dsize[1]=nb1; histarr=hist2d->next->next->array; img=gal_data_alloc(NULL, GAL_TYPE_INT32, 2, dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Fill the array values. */ imgarr=img->array; for(i=0;iarray; d2=bins->next->array; crpix[0] = 1; crpix[1] = 1; crval[0] = d1[0]; crval[1] = d2[0]; cdelt[0] = d1[1]-d1[0]; cdelt[1] = d2[1]-d2[0]; cunit[0] = p->input->unit; cunit[1] = p->input->next->unit; ctype[0] = histogram_2d_set_ctype(p->input->name, "X"); ctype[1] = histogram_2d_set_ctype(p->input->next->name, "Y"); img->wcs=gal_wcs_create(crpix, crval, cdelt, pc, cunit, ctype, 2, p->cp.wcslinearmatrix); /* Write the output. */ output=statistics_output_name(p, suf, &isfits); gal_fits_img_write(img, output, NULL, 0); gal_fits_key_write_filename("input", p->inputname, &p->cp.ckeys, 1, p->cp.quiet); gal_fits_key_write(p->cp.ckeys, output, "0", "NONE", 1, 0); /* Clean up and let the user know that the histogram is built. */ free(ctype[0]); free(ctype[1]); gal_data_free(img); if(!p->cp.quiet) printf("%s created.\n", output); } /* Write 2D histogram as a table. */ else write_output_table(p, hist2d, suf, contents); /* Clean up. */ gal_data_free(range1); gal_data_free(range2); gal_list_data_free(bins); gal_list_data_free(hist2d); } void print_mirror_hist_cfp(struct statisticsparams *p) { size_t dsize=1; gal_data_t *table; double mirror_val; gal_data_t *mirror=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); /* Convert the given mirror value into the type of the input dataset. */ *((double *)(mirror->array)) = p->mirror; mirror=gal_data_copy_to_new_type_free(mirror, p->input->type); /* Make the table columns. */ table=gal_statistics_mode_mirror_plots(p->sorted, mirror, p->numbins, 0, &mirror_val); if(p->mirror!=mirror_val) { fprintf(stderr, "Warning: Mirror value is %f.\n", mirror_val); if(!p->cp.quiet) fprintf(stderr, "\nNote that the mirror distribution is discrete " "and depends on the input data. So the closest point in " "the data to your desired mirror at %f was %f.\n\n", p->mirror, mirror_val); } /* If the mirror value was out-of-range, then no table will be made. */ if(table) write_output_table(p, table, "_mirror_hist_cfp", "Histogram and CFP of mirror distribution"); else error(EXIT_FAILURE, 0, "%s: mirror value %g is out of range", __func__, p->mirror); } /*******************************************************************/ /************** Basic information ***************/ /*******************************************************************/ /* To keep things in 'print_basics' clean, we'll define the input data here, then only print the values there. */ void print_input_info(struct statisticsparams *p) { char *str, *name, *col=NULL; /* Print the program name and version. */ printf("%s\n", PROGRAM_STRING); /* Print the input information, if the input was a table, we also need to give the column information. When the column has a name, it will be printed, when it doesn't, we'll use the same string the user gave. */ printf("-------\n"); name=gal_fits_name_save_as_string(p->inputname, p->cp.hdu); printf("Input: %s\n", name); /* If a table was given, print the column. */ if(p->columns) printf("Column: %s\n", p->input->name ? p->input->name : p->columns->v); /* Range. */ str=NULL; if( !isnan(p->greaterequal) && !isnan(p->lessthan) ) { if( asprintf(&str, "from (inclusive) %g, up to (exclusive) %g", p->greaterequal, p->lessthan)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else if( !isnan(p->greaterequal) ) { if( asprintf(&str, "from (inclusive) %g", p->greaterequal)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else if( !isnan(p->lessthan) ) { if( asprintf(&str, "up to (exclusive) %g", p->lessthan)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } if(str) { printf("Range: %s.\n", str); free(str); } /* Units. */ if(p->input->unit) printf("Unit: %s\n", p->input->unit); /* Clean up. */ if(col) free(col); free(name); printf("-------\n"); } /* This function will report the simple immediate statistics of the data. For the average and standard deviation, the unsorted data is used so we don't suddenly encounter rounding errors. */ void print_basics(struct statisticsparams *p) { char *str; int namewidth=40; float mirrdist=1.5; double mean, std, *d; gal_data_t *tmp, *bins, *hist, *range=NULL; /* Define the input dataset. */ print_input_info(p); /* Print the number: */ printf(" %-*s %zu\n", namewidth, "Number of elements:", p->input->size); /* Minimum: */ tmp=gal_statistics_minimum(p->input); str=gal_type_to_string(tmp->array, tmp->type, 0); printf(" %-*s %s\n", namewidth, "Minimum:", str); gal_data_free(tmp); free(str); /* Maximum: */ tmp=gal_statistics_maximum(p->input); str=gal_type_to_string(tmp->array, tmp->type, 0); printf(" %-*s %s\n", namewidth, "Maximum:", str); gal_data_free(tmp); free(str); /* Find the mean and standard deviation, but don't print them, see explanations under median. */ tmp=gal_statistics_mean_std(p->input); mean = ((double *)(tmp->array))[0]; std = ((double *)(tmp->array))[1]; gal_data_free(tmp); /* Mode of the distribution (if it is valid). we want the mode and median to be found in place to save time/memory. But having a sorted array can decrease the floating point accuracy of the standard deviation. So we'll do the median calculation in the end.*/ tmp=gal_statistics_mode(p->input, mirrdist, 1); d=tmp->array; if(d[2]>GAL_STATISTICS_MODE_GOOD_SYM) { /* Same format as 'gal_data_write_to_string' */ printf(" %-*s %.10g\n", namewidth, "Mode:", d[0]); printf(" %-*s %.10g\n", namewidth, "Mode quantile:", d[1]); } gal_data_free(tmp); /* Find and print the median: */ tmp=gal_statistics_median(p->input, 0); str=gal_type_to_string(tmp->array, tmp->type, 0); printf(" %-*s %s\n", namewidth, "Median:", str); gal_data_free(tmp); free(str); /* Print the mean and standard deviation. Same format as 'gal_data_write_to_string' */ printf(" %-*s %.10g\n", namewidth, "Mean:", mean); printf(" %-*s %.10g\n", namewidth, "Standard deviation:", std); /* Ascii histogram. Note that we don't want to force the user to have the plotting parameters. Also, when a reference column is defined, the range shown in the basic information section applies to that, not the range of the histogram. In that case, we want to print the histogram information. */ printf("-------"); range=set_bin_range_params(p, 1); p->asciiheight = p->asciiheight ? p->asciiheight : 10; p->numasciibins = p->numasciibins ? p->numasciibins : 70; bins=gal_statistics_regular_bins(p->input, range, p->numasciibins, NAN); hist=gal_statistics_histogram(p->input, bins, 0, 0); printf("\nHistogram:\n"); print_ascii_plot(p, hist, bins, 1, 0); gal_data_free(bins); gal_data_free(hist); gal_data_free(range); } /*******************************************************************/ /************** Sigma clipping ***************/ /*******************************************************************/ void print_clip(struct statisticsparams *p, int sig1_mad0) { float *a; char *mode; int namewidth=40; gal_data_t *result; double clipparams[2]; uint8_t flags = ( GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN | GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD | GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MAD ); /* Fill in the clipparams. */ clipparams[0] = sig1_mad0 ? p->sclipparams[0] : p->mclipparams[0]; clipparams[1] = sig1_mad0 ? p->sclipparams[1] : p->mclipparams[1]; /* Set the mode for printing: */ if( clipparams[1]>=1.0f ) { if( asprintf(&mode, "for %g clips", clipparams[1])<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&mode, "until relative change in %s is less than %g", sig1_mad0 ? "STD" : "MAD (median absolute deviation)", clipparams[1])<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } /* Report the status */ if(!p->cp.quiet) { print_input_info(p); printf("%g-%s clipping steps %s:\n\n", clipparams[0], sig1_mad0?"sigma":"MAD", mode); } /* Do the Sigma clipping. In-place is not activated because sigma-clipping reduces the total number of points and users may call other operators also. */ result = ( sig1_mad0 ? gal_statistics_clip_sigma(p->sorted, clipparams[0], clipparams[1], flags, 0, p->cp.quiet) : gal_statistics_clip_mad(p->sorted, clipparams[0], clipparams[1], flags, 0, p->cp.quiet) ); a=result->array; /* Finish the introduction. */ if(!p->cp.quiet) printf("-------\nStatistics (after clipping):\n"); else printf("%g-%s clipped %s:\n", clipparams[0], sig1_mad0?"sigma":"MAD", mode); /* Print the final results: */ printf(" %-*s %zu\n", namewidth, "Number of input elements:", p->input->size); if( clipparams[1] < 1.0f ) printf(" %-*s %.0f\n", namewidth, "Number of clips:", a[GAL_STATISTICS_CLIP_OUTCOL_NUMBER_CLIPS]); printf(" %-*s %.0f\n", namewidth, "Final number of elements:", a[GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED]); printf(" %-*s %.6e\n", namewidth, "Median:", a[GAL_STATISTICS_CLIP_OUTCOL_MEDIAN]); printf(" %-*s %.6e\n", namewidth, "Mean:", a[GAL_STATISTICS_CLIP_OUTCOL_MEAN]); printf(" %-*s %.6e\n", namewidth, "Standard deviation:", a[GAL_STATISTICS_CLIP_OUTCOL_STD]); printf(" %-*s %.6e\n", namewidth, "Median Absolute Deviation:", a[GAL_STATISTICS_CLIP_OUTCOL_MAD]); /* Clean up. */ gal_data_free(result); free(mode); } /*******************************************************************/ /************** Fitting ***************/ /*******************************************************************/ /* 'redchisq' is taken as a pointer so we don't need to allocate it here when the FITS file gets written. */ static struct gal_fits_list_key_t * statistics_fit_params_to_keys(struct statisticsparams *p, gal_data_t *fit, char *whtnat, double *redchisq) { size_t i, j; char *kname, *kcomm; struct gal_fits_list_key_t *out=NULL; double *c=fit->array, *cov=fit->next?fit->next->array:NULL; /* Set the title and basic info (independent of the type of fit). */ gal_fits_key_list_title_add(&out, "Fit results", 0); gal_fits_key_list_add(&out, GAL_TYPE_STRING, "FITTYPE", 0, gal_fit_name_from_id(p->fitid), 0, "Functional form of the fitting.", 0, NULL, 0); if( p->fitid==GAL_FIT_POLYNOMIAL || p->fitid==GAL_FIT_POLYNOMIAL_ROBUST || p->fitid==GAL_FIT_POLYNOMIAL_WEIGHTED ) gal_fits_key_list_add(&out, GAL_TYPE_SIZE_T, "FITMAXP", 0, &p->fitmaxpower, 0, "Maximum power of polynomial.", 0, NULL, 0); if( p->fitid==GAL_FIT_POLYNOMIAL_ROBUST ) gal_fits_key_list_add(&out, GAL_TYPE_STRING, "FITRTYP", 0, p->fitrobustname, 0, "Function for removing outliers", 0, NULL, 0); gal_fits_key_list_add(&out, GAL_TYPE_STRING, "FITIN", 0, p->inputname, 0,"Name of file with input columns.", 0, NULL, 0); if(p->isfits) gal_fits_key_list_add(&out, GAL_TYPE_STRING, "FITINHDU", 0, p->cp.hdu, 0,"Name or Number of HDU with input " "columns.", 0, NULL, 0); gal_fits_key_list_add(&out, GAL_TYPE_STRING, "FITXCOL", 0, p->columns->v, 0,"Name or Number of independent " "(X) column.", 0, NULL, 0); gal_fits_key_list_add(&out, GAL_TYPE_STRING, "FITYCOL", 0, p->columns->next->v, 0,"Name or Number of " "measured (Y) column.", 0, NULL, 0); if(p->columns->next->next) { gal_fits_key_list_add(&out, GAL_TYPE_STRING, "FITWCOL", 0, p->columns->next->next->v, 0, "Name or Number of weight column.", 0, NULL, 0); gal_fits_key_list_add(&out, GAL_TYPE_STRING, "FITWNAT", 0, whtnat, 0, "Nature of weight column.", 0, NULL, 0); } if(p->fitid==GAL_FIT_POLYNOMIAL_ROBUST) gal_fits_key_list_add(&out, GAL_TYPE_STRING, "FITROBST", 0, p->fitrobustname, 0, "Robust fitting (rejecting outliers) function.", 0, NULL, 0); gal_fits_key_list_add(&out, GAL_TYPE_FLOAT64, "FRDCHISQ", 0, redchisq, 0, "Reduced chi^2 of fit.", 0, NULL, 0); /* Add the Fitting results. */ switch(p->fitid) { /* Linear with no constant */ case GAL_FIT_LINEAR_NO_CONSTANT: case GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED: gal_fits_key_list_add(&out, GAL_TYPE_FLOAT64, "FITC1", 0, c, 0, "C1: Multiple of X in linear fit " "(y=C1*x).", 0, NULL, 0); gal_fits_key_list_add(&out, GAL_TYPE_FLOAT64, "FCOV11", 0, c+1, 0, "Variance of C1 (only element of " "cov. matrix).", 0, NULL, 0); break; /* Basic linear. */ case GAL_FIT_LINEAR: case GAL_FIT_LINEAR_WEIGHTED: gal_fits_key_list_add(&out, GAL_TYPE_FLOAT64, "FITC0", 0, c, 0, "C0: Constant in linear fit " "(y=C0+C1*x).", 0, NULL, 0); gal_fits_key_list_add(&out, GAL_TYPE_FLOAT64, "FITC1", 0, c+1, 0, "C1: Multiple of X in linear fit " "(y=C0+C1*x).", 0, NULL, 0); gal_fits_key_list_add(&out, GAL_TYPE_FLOAT64, "FCOV11", 0, c+2, 0, "Covariance matrix element (1,1).", 0, NULL, 0); gal_fits_key_list_add(&out, GAL_TYPE_FLOAT64, "FCOV12", 0, c+3, 0, "Covariance matrix element " "(1,2)=(2,1).", 0, NULL, 0); gal_fits_key_list_add(&out, GAL_TYPE_FLOAT64, "FCOV22", 0, c+4, 0, "Covariance matrix element (2,2).", 0, NULL, 0); break; /* Polynomial fit. */ case GAL_FIT_POLYNOMIAL: case GAL_FIT_POLYNOMIAL_ROBUST: case GAL_FIT_POLYNOMIAL_WEIGHTED: for(i=0;isize;++i) { if( asprintf(&kname, "FITC%zu", i)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf in FITCxx name", __func__); if( asprintf(&kcomm, "C%zu: multiple of x^%zu in polynomial", i, i)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf in FITCxx comment", __func__); gal_fits_key_list_add(&out, GAL_TYPE_FLOAT64, kname, 1, c+i, 0, kcomm, 1, NULL, 0); } for(i=0;isize;++i) for(j=0;jsize;++j) { if( asprintf(&kname, "FCOV%zu%zu", i+1, j+1)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf in FCOVxx name", __func__); if( asprintf(&kcomm, "Covariance matrix element (%zu,%zu).", i+1, j+1)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf in FCOVxx comment", __func__); gal_fits_key_list_add(&out, GAL_TYPE_FLOAT64, kname, 1, cov+(i*fit->size+j), 0, kcomm, 1, NULL, 0); } break; /* Unrecognized FIT ID. */ default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. The code '%d' isn't recognized for 'fitid'", __func__, PACKAGE_BUGREPORT, p->fitid); } /* Reverse the last-in-first-out list to be in the same logical order we inserted the items here. */ gal_fits_key_list_reverse(&out); /* Return the key list. */ return out; } static void statistics_fit_estimate(struct statisticsparams *p, gal_data_t *fit, char *whtnat, double *redchisq) { gal_data_t *est=NULL; double *x, *y, *yerr; struct gal_fits_list_key_t *keys=NULL; /* If the input had no metadata, add them. */ if(p->fitestval->name==NULL) gal_checkset_allocate_copy("X-INPUT", &p->fitestval->name); if(p->fitestval->comment==NULL) gal_checkset_allocate_copy("Requested values to estimate fit.", &p->fitestval->comment); /* Estimations are done on a per-row level. */ switch(p->fitid) { case GAL_FIT_LINEAR: case GAL_FIT_LINEAR_WEIGHTED: case GAL_FIT_LINEAR_NO_CONSTANT: case GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED: est=gal_fit_1d_linear_estimate(fit, p->fitestval); break; case GAL_FIT_POLYNOMIAL: case GAL_FIT_POLYNOMIAL_ROBUST: case GAL_FIT_POLYNOMIAL_WEIGHTED: est=gal_fit_1d_polynomial_estimate(fit, p->fitestval); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. The code '%d' isn't recognized for 'fitid'", __func__, PACKAGE_BUGREPORT, p->fitid); } /* Set the estimated columns to be after the input's columns. */ p->fitestval->next=est; /* Non-quiet title. */ if(p->cp.quiet==0) printf("\nRequested estimation:\n"); /* If only one value was estimated and no column was given, then the user wanted the value on the command-line. */ if(p->fitestimatecol) { if(p->cp.output) { if(p->cp.quiet==0) printf(" Written to: %s\n", p->cp.output); } keys=statistics_fit_params_to_keys(p, fit, whtnat, redchisq); gal_table_write(p->fitestval, keys, NULL, p->cp.tableformat, p->cp.output, "FIT_ESTIMATE", 0, 1); } /* Print estimated value on the commandline. */ else { x=p->fitestval->array; y=p->fitestval->next->array; yerr=p->fitestval->next->next->array; if(p->cp.quiet) printf("%f %f %f\n", x[0], y[0], yerr[0]); else printf(" X: %f (given on command-line)\n" " Y: %f\n" " Y_error: %f\n", x[0], y[0], yerr[0]); } /* Clean up. */ gal_list_data_free(p->fitestval); p->fitestval=NULL; /* Was freed with 'out', avoid generic freeing later. */ } static char * statistics_fit_whtnat(struct statisticsparams *p) { switch(p->fitwhtid) { case STATISTICS_FIT_WHT_STD: return "Standard deviation"; case STATISTICS_FIT_WHT_VAR: return "Variance"; case STATISTICS_FIT_WHT_INVVAR: return "Inverse variance"; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to find and fix the problem. The value '%d' isn't a " "recognized weight type identifier", __func__, PACKAGE_BUGREPORT, p->fitwhtid); } /* Control should not reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to find and fix the problem. Control should not reach the " "end of this function", __func__, PACKAGE_BUGREPORT); return NULL; } static char * statistics_fit_print_intro(struct statisticsparams *p, char **whtnat) { char *colspace; char *filename, *intro, *wcolstr=NULL; gal_list_str_t *xn=p->columns, *yn=xn->next?xn->next:NULL, *wn=yn->next?yn->next:NULL; /* Set the full file name (for easy reading later!).*/ filename=gal_fits_name_save_as_string(p->inputname, p->cp.hdu); /* Prepare string for nature of weight (if any weight was given!). */ *whtnat = p->input->next->next ? statistics_fit_whtnat(p) : NULL; /* Set the Weight column string(s). */ if( p->fitid==GAL_FIT_LINEAR_WEIGHTED || p->fitid==GAL_FIT_POLYNOMIAL_WEIGHTED || p->fitid==GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED ) { colspace=" "; if( asprintf(&wcolstr, " Weight column: %s " "[%s of Y in each row]\n", wn->v, *whtnat)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else colspace=" "; /* Put everything into one string. */ if( asprintf(&intro, "%s\n" "-------\n" "Fitting results (remove extra info with '--quiet' " "or '-q)\n" " Input file: %s with %zu non-blank rows.\n" " X%scolumn: %s\n" " Y%scolumn: %s\n" "%s", PROGRAM_STRING, filename, p->input->size, colspace, xn->v, colspace, yn->v, wcolstr ? wcolstr : "")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); /* Clean up and return. */ free(filename); free(wcolstr); return intro; } static int statistics_fit_linear(struct statisticsparams *p) { double *f, redchisq; gal_data_t *fit=NULL; char *intro, *funcvals, *whtnat=NULL; /* These have to be defined after each other. */ gal_data_t *x=p->input; gal_data_t *y=x->next?x->next:NULL, *w=y->next?y->next:NULL; /* If the required number of columns aren't given, */ switch(p->fitid) { /* Linear fit. */ case GAL_FIT_LINEAR: if(gal_list_data_number(p->input)!=2) return 2; fit=gal_fit_1d_linear(x, y, NULL); break; /* Linear (weighted). */ case GAL_FIT_LINEAR_WEIGHTED: if(gal_list_data_number(p->input)!=3) return 3; fit=gal_fit_1d_linear(x, y, w); break; /* Linear (no constant) */ case GAL_FIT_LINEAR_NO_CONSTANT: if(gal_list_data_number(p->input)!=2) return 2; fit=gal_fit_1d_linear_no_constant(x, y, NULL); break; /* Linear (no constant, weighted) */ case GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED: if(gal_list_data_number(p->input)!=3) return 3; fit=gal_fit_1d_linear_no_constant(x, y, w); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. '%d' isn't recognized as a fitting ID", __func__, PACKAGE_BUGREPORT, p->fitid); } /* Print the output. */ f=fit->array; if(p->cp.quiet) { if(p->fitestval) whtnat=statistics_fit_whtnat(p); else { /* The covariance matrix will only be present if a constant was present. After it, just print the residual (chi-squared or sum of squares of residuals). */ if( p->fitid==GAL_FIT_LINEAR || p->fitid==GAL_FIT_LINEAR_WEIGHTED ) printf("%+-.10f %+-.10f\n" /* The Two coefficients. */ "%+-20.10f %+-20.10f\n"/* First row of cov. matrix. */ "%+-20.10f %+-20.10f\n"/* Second row of cov. matrix. */ "%+-.10f\n", /* Residual. */ f[0], f[1], f[2], f[3], f[3], f[4], f[5]); else printf("%+-.10f\n%+-.10f\n%+-.10f\n", f[0], f[1], f[2]); } } else { /* With or without constant. */ if( p->fitid==GAL_FIT_LINEAR || p->fitid==GAL_FIT_LINEAR_WEIGHTED ) { redchisq=f[5]; if( asprintf(&funcvals, "Fit function: Y = c0 + (c1 * X)\n" " c0: %+-.10f\n" " c1: %+-.10f\n\n" "Covariance matrix (off-diagonal are identical " "same):\n" " %+-20.10f %+-20.10f\n" " %+-20.10f %+-20.10f\n", f[0], f[1], f[2], f[3], f[3], f[4])<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { redchisq=f[2]; if( asprintf(&funcvals, "Fit function: Y = c1 * X\n" " c1: %+-.10f\n\n" "Variance of 'c1':\n" " %+-.10f\n", f[0], f[1])<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } /* Statistics version, and input filenames. */ intro=statistics_fit_print_intro(p, &whtnat); /* Final printed report.*/ printf("%s\n%s\nReduced chi^2 of fit:\n %+f\n", intro, funcvals, redchisq); /* Clean up. */ free(intro); free(funcvals); } /* Estimate values (if requested), note that it involves writing the fitted parameters in the header. */ if(p->fitestval) statistics_fit_estimate(p, fit, whtnat, fit->size==6?f+5:f+2); /* Clean up. */ gal_data_free(fit); return 0; /* Means everything is good! */ } static void statistics_fit_polynomial_print(struct statisticsparams *p, gal_data_t *fit, double redchisq, char **whtnat) { size_t i, j; char *intro; size_t nconst=p->fitmaxpower+1; double *farr=fit->array, *carr=fit->next->array; /* Print fitted constants */ if(p->cp.quiet) { if(p->fitestval==NULL) { for(i=0;ifitid==GAL_FIT_POLYNOMIAL_ROBUST) printf(" Robust function: %s\n", p->fitrobustname); printf(" N: %zu\n", p->fitmaxpower); /* Print the fitted values. */ for(i=0;icp.quiet==0 || p->fitestval==NULL) { for(i=0;icp.quiet==0) printf(" "); for(j=0;jcp.quiet==0) printf("\nReduced chi^2 of fit:\n"); printf("%s%+-.10f\n", p->cp.quiet?"":" ", redchisq); } } static int statistics_fit_polynomial(struct statisticsparams *p) { char *whtnat; gal_data_t *fit=NULL; double redchisq=NAN; /* Important to initialize. */ gal_data_t *x=p->input, *y=x->next?x->next:NULL, *w=y->next?y->next:NULL; /* Sanity check and call the fitting functions. */ switch(p->fitid) { case GAL_FIT_POLYNOMIAL: if(gal_list_data_number(p->input)!=2) return 2; /* Sanity check. */ fit=gal_fit_1d_polynomial(x, y, NULL, p->fitmaxpower, &redchisq); break; case GAL_FIT_POLYNOMIAL_ROBUST: if(gal_list_data_number(p->input)!=2) return 2; /* Sanity check. */ fit=gal_fit_1d_polynomial_robust(x, y, p->fitmaxpower, p->fitrobustid, &redchisq); break; case GAL_FIT_POLYNOMIAL_WEIGHTED: if(gal_list_data_number(p->input)!=3) return 3; /* Sanity check. */ fit=gal_fit_1d_polynomial(x, y, w, p->fitmaxpower, &redchisq); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. '%d' isn't recognized as a fitting ID", __func__, PACKAGE_BUGREPORT, p->fitid); } /* Print the output. */ statistics_fit_polynomial_print(p, fit, redchisq, &whtnat); /* Estimate values (if requested), note that it involves writing the fitted parameters in the header. */ if(p->fitestval) statistics_fit_estimate(p, fit, whtnat, &redchisq); /* Clean up. */ gal_data_free(fit); gal_list_data_free(p->fitestval); p->fitestval=NULL; return 0; /* Means everything is good! */ } static void statistics_fit(struct statisticsparams *p) { size_t neededcols=0; /* Make sure that at least two columns are provided. */ if(p->input->next==NULL) error(EXIT_FAILURE, 0, "at least two columns are necessary for " "the fitting operations"); /* Do the fitting. */ switch(p->fitid) { case GAL_FIT_LINEAR: case GAL_FIT_LINEAR_WEIGHTED: case GAL_FIT_LINEAR_NO_CONSTANT: case GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED: neededcols=statistics_fit_linear(p); break; case GAL_FIT_POLYNOMIAL: case GAL_FIT_POLYNOMIAL_ROBUST: case GAL_FIT_POLYNOMIAL_WEIGHTED: neededcols=statistics_fit_polynomial(p); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. '%s' is not a recognized as a fit type", __func__, PACKAGE_BUGREPORT, p->fitname); } /* If the number of columns is not sufficient, then 'neededcols' will be non-zero. In this case, we should abort and inform the user. */ if(neededcols) error(EXIT_FAILURE, 0, "'%s' fitting requires %zu columns as input, " "but %zu columns have been given", p->fitname, neededcols, gal_list_data_number(p->input)); } /*******************************************************************/ /************** Top-level function ***************/ /*******************************************************************/ void statistics(struct statisticsparams *p) { int print_basic_info=1; /* Print the one-row numbers if the user asked for them. */ if(p->singlevalue) { print_basic_info=0; if(p->ontile) statistics_on_tile(p); else statistics_print_one_row(p); } /* Find the Sky value if called. */ if(p->sky) { sky(p); print_basic_info=0; } if(p->contour) { contour(p); print_basic_info=0; } /* Print the ASCII plots if requested. */ if(p->asciihist || p->asciicfp) { ascii_plots(p); print_basic_info=0; } /* Save the histogram and CFP as tables if requested. */ if(p->histogram || p->cumulative) { print_basic_info=0; save_hist_and_or_cfp(p); } /* 2D histogram. */ if(p->histogram2d) { print_basic_info=0; histogram_2d(p); } /* Print the sigma-clipped results. */ if( p->sigmaclip ) { print_basic_info=0; print_clip(p, 1); } /* Print the MAD-clipped results. */ if( p->madclip ) { print_basic_info=0; print_clip(p, 0); } /* Make the mirror table. */ if( !isnan(p->mirror) ) { print_basic_info=0; print_mirror_hist_cfp(p); } /* Fitting. */ if( p->fitname ) { print_basic_info=0; statistics_fit(p); } /* If nothing was requested print the simple statistics. */ if(print_basic_info) print_basics(p); } gnuastro-0.22/bin/statistics/main.h0000644000175000017500000001561014551337306013031 /********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include #include /* Progarm names. */ #define PROGRAM_NAME "Statistics" /* Program full name. */ #define PROGRAM_EXEC "aststatistics" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Input formats. */ enum statistics_input_format { INPUT_FORMAT_INVALID, INPUT_FORMAT_TABLE, INPUT_FORMAT_IMAGE, }; enum statistics_fit_weight_types { STATISTICS_FIT_WHT_INVALID, STATISTICS_FIT_WHT_STD, STATISTICS_FIT_WHT_VAR, STATISTICS_FIT_WHT_INVVAR, }; /* Main program parameters structure */ struct statisticsparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ gal_list_i32_t *singlevalue; /* Single value calculations. */ gal_list_f64_t *tp_args; /* Arguments for printing. */ char *inputname; /* Input filename. */ gal_list_str_t *columns; /* Column name or number if input is table. */ float greaterequal; /* Only use values >= this value. */ float greaterequal2; /* Only use values >= this value (2D hist). */ float lessthan; /* Only use values < this value. */ float lessthan2; /* Only use values < this value (2D hist). */ float quantmin; /* Quantile min or range: from Q to 1-Q. */ float quantmax; /* Quantile maximum. */ uint8_t ontile; /* Do single value calculations on tiles. */ uint8_t interpolate; /* Use interpolation to fill blank tiles. */ char *fitname; /* Name of fitting function to use. */ char *fitweight; /* Input weight is 'std' or 'invvar'. */ char *fitestimate; /* Values to estimate the fit. */ char *fitestimatecol; /* Column for values to estimate the fit. */ char *fitestimatehdu; /* HDU for values to estimate the fit. */ size_t fitmaxpower; /* Maximum power of polynomial fit. */ char *fitrobustname; /* Name of robust function. */ uint8_t asciihist; /* Print an ASCII histogram. */ uint8_t asciicfp; /* Print an ASCII cumulative frequency plot.*/ uint8_t histogram; /* Save histogram in output. */ char *histogram2d; /* Save 2D-histogram as image or table. */ uint8_t cumulative; /* Save cumulative distibution in output. */ double mirror; /* Mirror value for hist and CFP. */ uint8_t sky; /* Find the Sky value over the image. */ uint8_t sigmaclip; /* Do sigma-clipping over all dataset. */ uint8_t madclip; /* Do MAD-clipping over all dataset. */ gal_data_t *contour; /* Levels to show contours. */ size_t numbins; /* Number of bins in histogram or CFP. */ size_t numbins2; /* No. of second-dim bins in 2D histogram. */ size_t numasciibins; /* Number of bins in ASCII plots. */ size_t asciiheight; /* Height of ASCII histogram or CFP plots. */ uint8_t normalize; /* set the sum of all bins to 1. */ uint8_t manualbinrange; /* Set bin min/max manually, not from data. */ float onebinstart; /* Shift bins to start at this value. */ float onebinstart2; /* Shift bins to start at this value. */ uint8_t maxbinone; /* Set the maximum bin to 1. */ float mirrordist; /* Maximum distance after mirror for mode. */ char *kernelname; /* File name of kernel to convolve input. */ char *khdu; /* Kernel HDU. */ float meanmedqdiff; /* Mode and median quantile difference. */ size_t outliernumngb; /* Number of neighbors to define outliers. */ float outliersigma; /* Multiple of sigma to define outlier. */ double outliersclip[2]; /* Outlier Sigma-clipping params. */ size_t smoothwidth; /* Width of flat kernel to smooth interpd. */ uint8_t checksky; /* Save the steps for deriving the Sky. */ uint8_t checkskynointerp; /* Stop --checksky before interpolation. */ double sclipparams[2]; /* Muliple and parameter of sigma clipping. */ double mclipparams[2]; /* Muliple and parameter of sigma clipping. */ uint8_t ignoreblankintiles;/* Ignore input's blank values. */ /* Internal */ uint8_t inputformat; /* Format of input dataset. */ int numoutfiles; /* Number of output files made in this run. */ uint8_t needssort; /* If sorting is needed. */ gal_data_t *input; /* Input data structure. */ gal_data_t *sorted; /* Sorted input data structure. */ int isfits; /* Input is a FITS file. */ int hdu_type; /* Type of HDU (image or table). */ gal_data_t *kernel; /* Kernel for convolution of input for Sky. */ gal_data_t *convolved; /* Convolved input. */ gal_data_t *sky_t; /* Sky on each tile. */ gal_data_t *std_t; /* Sky standard deviation on each tile. */ char *checkskyname; /* Name of file for Sky calculation steps. */ time_t rawtime; /* Starting time of the program. */ uint8_t fitid; /* ID of desired fit. */ uint8_t fitrobustid; /* ID of robust fit type. */ gal_data_t *fitestval; /* Values to estimate over fit. */ int fitwhtid; /* Code for the nature of the weight column.*/ }; #endif gnuastro-0.22/bin/statistics/authors-cite.h0000644000175000017500000000302714551337306014513 /********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/statistics/args.h0000644000175000017500000005673214551337306013053 /********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { { "column", UI_KEY_COLUMN, "STR", 0, "Column number (counting from 1) or search string.", GAL_OPTIONS_GROUP_INPUT, &p->columns, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "greaterequal", UI_KEY_GREATEREQUAL, "FLT", 0, "Only use values greater-equal than this.", GAL_OPTIONS_GROUP_INPUT, &p->greaterequal, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "lessthan", UI_KEY_LESSTHAN, "FLT", 0, "Only use values less than this.", GAL_OPTIONS_GROUP_INPUT, &p->lessthan, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "qrange", UI_KEY_QRANGE, "FLT[,FLT]", 0, "Quantile range: one (from Q to 1-Q) or two.", GAL_OPTIONS_GROUP_INPUT, NULL, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_read_quantile_range }, /* Tessellation */ { "interpolate", UI_KEY_INTERPOLATE, 0, 0, "Interpolate over blank tiles to fill them.", GAL_OPTIONS_GROUP_TESSELLATION, &p->interpolate, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Single value measurements", UI_GROUP_SINGLE_VALUE }, { "number", UI_KEY_NUMBER, 0, 0, "Number (non-blank).", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "minimum", UI_KEY_MINIMUM, 0, 0, "Minimum.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "maximum", UI_KEY_MAXIMUM, 0, 0, "Maximum.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "sum", UI_KEY_SUM, 0, 0, "Sum.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "mean", UI_KEY_MEAN, 0, 0, "Mean.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "std", UI_KEY_STD, 0, 0, "Standad deviation.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "mad", UI_KEY_MAD, 0, 0, "Median absolute deviation.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "median", UI_KEY_MEDIAN, 0, 0, "Median.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "quantile", UI_KEY_QUANTILE, "FLT[,...]", 0, "Quantile (multiple values acceptable).", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "quantfunc", UI_KEY_QUANTFUNC, "FLT[,...]", 0, "Quantile function (multiple values acceptable).", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "quantofmean", UI_KEY_QUANTOFMEAN, 0, 0, "Quantile of the mean.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "mode", UI_KEY_MODE, 0, 0, "Mode (Appendix C of arXiv:1505.01664).", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "modequant", UI_KEY_MODEQUANT, 0, 0, "Mode quantile (see --mode)", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "modesym", UI_KEY_MODESYM, 0, 0, "Mode symmetricity (see --mode).", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "modesymvalue", UI_KEY_MODESYMVALUE, 0, 0, "Value at mode symmetricity (see --mode).", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "sigclip-number", UI_KEY_SIGCLIPNUMBER, 0, 0, "Number of elements after sigma-clipping.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "sigclip-median", UI_KEY_SIGCLIPMEDIAN, 0, 0, "Sigma-clipped median.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "sigclip-mean", UI_KEY_SIGCLIPMEAN, 0, 0, "Sigma-clipped mean.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "sigclip-std", UI_KEY_SIGCLIPSTD, 0, 0, "Sigma-clipped standard deviation.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "sigclip-mad", UI_KEY_SIGCLIPMAD, 0, 0, "Sigma-clipped Median Absolute Deviation.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "madclip-number", UI_KEY_MADCLIPNUMBER, 0, 0, "Number of elements after MAD-clipping.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "madclip-median", UI_KEY_MADCLIPMEDIAN, 0, 0, "MAD-clipped median.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "madclip-mean", UI_KEY_MADCLIPMEAN, 0, 0, "MAD-clipped mean.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "madclip-std", UI_KEY_MADCLIPSTD, 0, 0, "MAD-clipped standard deviation.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { "madclip-mad", UI_KEY_MADCLIPMAD, 0, 0, "MAD-clipped Median Absolute Deviation.", UI_GROUP_SINGLE_VALUE, &p->singlevalue, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_single_value }, { 0, 0, 0, 0, "Particular calculation", UI_GROUP_PARTICULAR_STAT }, { "asciihist", UI_KEY_ASCIIHIST, 0, 0, "Print an ASCII histogram.", UI_GROUP_PARTICULAR_STAT, &p->asciihist, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "asciicfp", UI_KEY_ASCIICFP, 0, 0, "Print an ASCII cumulative frequency plot.", UI_GROUP_PARTICULAR_STAT, &p->asciicfp, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "histogram", UI_KEY_HISTOGRAM, 0, 0, "Save the histogram in output.", UI_GROUP_PARTICULAR_STAT, &p->histogram, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "cumulative", UI_KEY_CUMULATIVE, 0, 0, "Save the cumulative frequency plot in output.", UI_GROUP_PARTICULAR_STAT, &p->cumulative, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "histogram2d", UI_KEY_HISTOGRAM2D, "STR", 0, "2D histogram (as 'table' or 'image').", UI_GROUP_PARTICULAR_STAT, &p->histogram2d, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "mirror", UI_KEY_MIRROR, "FLT", 0, "Save the histogram and CFP of the mirror dist.", UI_GROUP_PARTICULAR_STAT, &p->mirror, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "ontile", UI_KEY_ONTILE, 0, 0, "Single values on separate tiles, not full input.", UI_GROUP_PARTICULAR_STAT, &p->ontile, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sky", UI_KEY_SKY, 0, 0, "Find the Sky and its STD over the tessellation.", UI_GROUP_PARTICULAR_STAT, &p->sky, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sigmaclip", UI_KEY_SIGMACLIP, 0, 0, "Overall sigma-clipping (see '--sclipparams')", UI_GROUP_PARTICULAR_STAT, &p->sigmaclip, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "madclip", UI_KEY_MADCLIP, 0, 0, "Overall MAD-clipping (see '--mclipparams')", UI_GROUP_PARTICULAR_STAT, &p->madclip, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "contour", UI_KEY_CONTOUR, "STR", 0, "Contour levels, save in PGFPlots format.", UI_GROUP_PARTICULAR_STAT, &p->contour, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { 0, 0, 0, 0, "Sky and Sky STD settings", UI_GROUP_SKY }, { "kernel", UI_KEY_KERNEL, "FITS", 0, "File name of kernel to convolve input.", UI_GROUP_SKY, &p->kernelname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "khdu", UI_KEY_KHDU, "STR", 0, "HDU/extension name or number of kernel.", UI_GROUP_SKY, &p->khdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "mirrordist", UI_KEY_MIRRORDIST, "FLT", 0, "Max. distance (error multip.) to find mode.", UI_GROUP_SKY, &p->mirrordist, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "meanmedqdiff", UI_KEY_MEANMEDQDIFF, "FLT", 0, "Max. mode and median quantile diff. per tile.", UI_GROUP_SKY, &p->meanmedqdiff, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "outliernumngb", UI_KEY_OUTLIERNUMNGB, "INT", 0, "Num neighboring tiles to look for outlier.", UI_GROUP_SKY, &p->outliernumngb, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "outliersclip", UI_KEY_OUTLIERSCLIP, "FLT,FLT", 0, "Sigma-clip params for qthresh outliers.", UI_GROUP_SKY, &p->outliersclip, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_sigma_clip }, { "outliersigma", UI_KEY_OUTLIERSIGMA, "FLT", 0, "Multiple of sigma to define outliers.", UI_GROUP_SKY, &p->outliersigma, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "sclipparams", UI_KEY_SCLIPPARAMS, "FLT,FLT", 0, "Sigma clip: Multiple, and tolerance/number.", UI_GROUP_SKY, p->sclipparams, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_sigma_clip }, { "mclipparams", UI_KEY_MCLIPPARAMS, "FLT,FLT", 0, "MAD clip: Multiple, and tolerance/number.", UI_GROUP_SKY, p->mclipparams, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_sigma_clip }, { "smoothwidth", UI_KEY_SMOOTHWIDTH, "INT", 0, "Sky: flat kernel width to smooth interpolated.", UI_GROUP_SKY, &p->smoothwidth, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_0_OR_ODD, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checksky", UI_KEY_CHECKSKY, 0, 0, "Store steps in '_sky_steps.fits' file.", UI_GROUP_SKY, &p->checksky, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checkskynointerp", UI_KEY_CHECKSKYNOINTERP, 0, 0, "Similar to --checksky, stops at interpolation.", UI_GROUP_SKY, &p->checkskynointerp, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "ignoreblankintiles", UI_KEY_IGNOREBLANKINTILES, 0, 0, "Don't write input's blanks in the tiled output.", UI_GROUP_SKY, &p->ignoreblankintiles, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Histogram and CFP settings", UI_GROUP_HIST_CFP }, { "numbins", UI_KEY_NUMBINS, "INT", 0, "No. of bins in histogram or CFP tables.", UI_GROUP_HIST_CFP, &p->numbins, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "numbins2", UI_KEY_NUMBINS2, "INT", 0, "No. of bins in second-dim of 2D histogram.", UI_GROUP_HIST_CFP, &p->numbins2, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "numasciibins", UI_KEY_NUMASCIIBINS, "INT", 0, "No. of bins in ASCII histogram or CFP plots.", UI_GROUP_HIST_CFP, &p->numasciibins, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "asciiheight", UI_KEY_ASCIIHEIGHT, "INT", 0, "Height of ASCII histogram or CFP plots.", UI_GROUP_HIST_CFP, &p->asciiheight, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "normalize", UI_KEY_NORMALIZE, 0, 0, "Set sum of all bins to 1.", UI_GROUP_HIST_CFP, &p->normalize, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "maxbinone", UI_KEY_MAXBINONE, 0, 0, "Scale such that the maximum bin has value of one.", UI_GROUP_HIST_CFP, &p->maxbinone, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "manualbinrange", UI_KEY_MANUALBINRANGE, 0, 0, "Set min/max of bins manually, not from data.", UI_GROUP_HIST_CFP, &p->manualbinrange, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "onebinstart", UI_KEY_ONEBINSTART, "FLT", 0, "Shift bins so one bin starts on this value.", UI_GROUP_HIST_CFP, &p->onebinstart, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "greaterequal2", UI_KEY_GREATEREQUAL2, "FLT", 0, "Upper range of 2nd dim in 2D histograms.", GAL_OPTIONS_GROUP_INPUT, &p->greaterequal2, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "lessthan2", UI_KEY_LESSTHAN2, "FLT", 0, "Lower range of 2nd dim in 2D histograms.", GAL_OPTIONS_GROUP_INPUT, &p->lessthan2, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "onebinstart2", UI_KEY_ONEBINSTART2, "FLT", 0, "Similar to --onebinstart, for 2D histogram", UI_GROUP_HIST_CFP, &p->onebinstart2, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Fitting (1 dimensional)", UI_GROUP_FIT }, { "fit", UI_KEY_FIT, "STR", 0, "Type of fitting: 'linear', 'linear-weighted', " "'linear-no-constant', 'linear-no-constant-weighted', " "'polynomial', 'polynomial-weighted', " "'polynomial-robust'.", UI_GROUP_FIT, &p->fitname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "fitweight", UI_KEY_FITWEIGHT, "STR", 0, "Input weight: 'std', 'var' or 'inv-variance'.", UI_GROUP_FIT, &p->fitweight, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "fitmaxpower", UI_KEY_FITMAXPOWER, "INT", 0, "Maximum power in polynomial to fit.", UI_GROUP_FIT, &p->fitmaxpower, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "fitrobust", UI_KEY_FITROBUST, "STR", 0, "The robust function name to use.", UI_GROUP_FIT, &p->fitrobustname, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "fitestimate", UI_KEY_FITESTIMATE, "STR/FLT", 0, "Estimate fitted func. (number, file or 'self').", UI_GROUP_FIT, &p->fitestimate, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "fitestimatehdu", UI_KEY_FITESTIMATEHDU, "STR/INT", 0, "HDU containing the --fitestimate values.", UI_GROUP_FIT, &p->fitestimatehdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "fitestimatecol", UI_KEY_FITESTIMATECOL, "STR/INT", 0, "Column containing the --fitestimate values.", UI_GROUP_FIT, &p->fitestimatecol, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/statistics/ui.h0000644000175000017500000000667214551337306012532 /********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_SINGLE_VALUE = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_PARTICULAR_STAT, UI_GROUP_SKY, UI_GROUP_HIST_CFP, UI_GROUP_FIT, }; /* Available letters for short options: b e j r v w x z B G J L W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_COLUMN = 'c', UI_KEY_GREATEREQUAL = 'g', UI_KEY_LESSTHAN = 'l', UI_KEY_QRANGE = 'Q', UI_KEY_MEAN = 'm', UI_KEY_STD = 'd', UI_KEY_MEDIAN = 'E', UI_KEY_MODE = 'O', UI_KEY_QUANTILE = 'u', UI_KEY_ASCIIHIST = 'A', UI_KEY_HISTOGRAM = 'H', UI_KEY_CUMULATIVE = 'C', UI_KEY_SIGMACLIP = 's', UI_KEY_NORMALIZE = 'n', UI_KEY_ONTILE = 't', UI_KEY_INTERPOLATE = 'i', UI_KEY_SKY = 'y', UI_KEY_KERNEL = 'k', UI_KEY_CONTOUR = 'R', UI_KEY_FIT = 'f', UI_KEY_FITMAXPOWER = 'p', UI_KEY_OUTLIERNUMNGB = 'a', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_NUMBER = 1000, UI_KEY_MINIMUM, UI_KEY_MAXIMUM, UI_KEY_SUM, UI_KEY_MAD, UI_KEY_MADCLIP, UI_KEY_MODEQUANT, UI_KEY_MODESYM, UI_KEY_MODESYMVALUE, UI_KEY_QUANTFUNC, UI_KEY_QUANTOFMEAN, UI_KEY_ASCIICFP, UI_KEY_HISTOGRAM2D, UI_KEY_MIRROR, UI_KEY_NUMBINS, UI_KEY_NUMBINS2, UI_KEY_NUMASCIIBINS, UI_KEY_ASCIIHEIGHT, UI_KEY_LOWERBIN, UI_KEY_MANUALBINRANGE, UI_KEY_ONEBINSTART, UI_KEY_MAXBINONE, UI_KEY_KHDU, UI_KEY_MIRRORDIST, UI_KEY_MEANMEDQDIFF, UI_KEY_OUTLIERSIGMA, UI_KEY_OUTLIERSCLIP, UI_KEY_SMOOTHWIDTH, UI_KEY_CHECKSKY, UI_KEY_CHECKSKYNOINTERP, UI_KEY_IGNOREBLANKINTILES, UI_KEY_SCLIPPARAMS, UI_KEY_MCLIPPARAMS, UI_KEY_SIGCLIPNUMBER, UI_KEY_SIGCLIPMEDIAN, UI_KEY_SIGCLIPMEAN, UI_KEY_SIGCLIPSTD, UI_KEY_SIGCLIPMAD, UI_KEY_MADCLIPNUMBER, UI_KEY_MADCLIPMEDIAN, UI_KEY_MADCLIPMEAN, UI_KEY_MADCLIPSTD, UI_KEY_MADCLIPMAD, UI_KEY_GREATEREQUAL2, UI_KEY_LESSTHAN2, UI_KEY_ONEBINSTART2, UI_KEY_FITWEIGHT, UI_KEY_FITESTIMATE, UI_KEY_FITESTIMATEHDU, UI_KEY_FITESTIMATECOL, UI_KEY_FITROBUST, }; /* Functions */ void ui_read_check_inputs_setup(int argc, char *argv[], struct statisticsparams *p); void ui_free_report(struct statisticsparams *p); #endif gnuastro-0.22/bin/statistics/sky.h0000644000175000017500000000207014551337306012707 /********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef SKY_H #define SKY_H void sky(struct statisticsparams *p); #endif gnuastro-0.22/bin/statistics/statistics.h0000644000175000017500000000211514551337306014273 /********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef STATISTICS_H #define STATISTICS_H void statistics(struct statisticsparams *p); #endif gnuastro-0.22/bin/statistics/contour.h0000644000175000017500000000210614551337306013572 /********************************************************************* Statistics - Statistical analysis on input dataset. Statistics is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2019-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef CONTOUR_H #define CONTOUR_H void contour(struct statisticsparams *p); #endif gnuastro-0.22/bin/table/0000755000175000017500000000000014557514202010704 5gnuastro-0.22/bin/table/Makefile.am0000644000175000017500000000322714557211443012665 ## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2016-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = asttable ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. asttable_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) asttable_SOURCES = main.c ui.c arithmetic.c table.c EXTRA_DIST = main.h authors-cite.h args.h ui.h arithmetic.h table.h \ asttable-complete.bash ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = asttable.conf gnuastro-0.22/bin/table/asttable.conf0000644000175000017500000000216414551337306013277 # Default parameters (System) for Table. # Table is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '[space], or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ asttable --help # Full list of options, short doc. # $ asttable -P # Print all options and used values. # $ info asttable # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Inputs wcshdu 1 catrowhdu 1 catcolumnhdu 1 # Output txtf32format exp txtf32precision 6 txtf64format exp txtf64precision 15 gnuastro-0.22/bin/table/Makefile.in0000644000175000017500000034015614557513750012711 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = asttable$(EXEEXT) subdir = bin/table ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_asttable_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) arithmetic.$(OBJEXT) \ table.$(OBJEXT) asttable_OBJECTS = $(am_asttable_OBJECTS) am__DEPENDENCIES_1 = asttable_DEPENDENCIES = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/arithmetic.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/table.Po ./$(DEPDIR)/ui.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(asttable_SOURCES) DIST_SOURCES = $(asttable_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib asttable_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) asttable_SOURCES = main.c ui.c arithmetic.c table.c EXTRA_DIST = main.h authors-cite.h args.h ui.h arithmetic.h table.h \ asttable-complete.bash dist_sysconf_DATA = asttable.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/table/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/table/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list asttable$(EXEEXT): $(asttable_OBJECTS) $(asttable_DEPENDENCIES) $(EXTRA_asttable_DEPENDENCIES) @rm -f asttable$(EXEEXT) $(AM_V_CCLD)$(LINK) $(asttable_OBJECTS) $(asttable_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/table.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/arithmetic.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/table.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/arithmetic.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/table.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/table/main.c0000644000175000017500000000314614551337306011722 /********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" /* needs main.h. */ #include "table.h" /* needs main.h. */ /* Main function */ int main (int argc, char *argv[]) { struct tableparams p={{{0},0},0}; /* Set they starting time. */ time(&p.rawtime); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Table. */ table(&p); /* Free all non-freed allocations. */ ui_free_report(&p); /* Return successfully. */ return EXIT_SUCCESS; } gnuastro-0.22/bin/table/ui.c0000644000175000017500000013344414551337306011420 /********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "arithmetic.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" can be used to view " "the information, select columns, or convert tables. The inputs and " "outputs can be plain text (with white-space or comma as delimiters), " "FITS ascii, or FITS binary tables. The output columns can either be " "selected by number (counting from 1), name or using regular " "expressions. For regular expressions, enclose the value to the " "'--column' ('-c') option in slashes ('\\', as in '-c\\^mag\\'). " "To print the selected columns on the command-line, don't specify " "an output file.\n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct tableparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->poptions = program_options; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->coptions = gal_commonopts_options; /* Program-specific initialization. */ p->txtf32precision = GAL_BLANK_INT; p->txtf64precision = GAL_BLANK_INT; p->head = GAL_BLANK_SIZE_T; p->tail = GAL_BLANK_SIZE_T; /* Modify common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { /* Mandatory options. */ case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_MINMAPSIZE: case GAL_OPTIONS_KEY_TABLEFORMAT: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; /* Options to ignore. */ case GAL_OPTIONS_KEY_TYPE: cp->coptions[i].flags=OPTION_HIDDEN; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct tableparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(p->filename) argp_error(state, "only one argument (input file) should be given, " "extra argument is: '%s'", arg); else if(arg[0]!='\0') p->filename=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ /* Check ONLY the options. When arguments are involved, do the check in 'ui_check_options_and_arguments'. */ static void ui_check_only_options(struct tableparams *p) { size_t i; double *darr; gal_data_t *tmp; /* Check if the format of the output table is valid, given the type of the output. */ gal_tableintern_check_fits_format(p->cp.output, p->cp.tableformat); /* Some checks on '--range'. */ if(p->range) for(tmp=p->range;tmp!=NULL;tmp=tmp->next) { /* Range needs two input numbers. */ if(tmp->size!=2) error(EXIT_FAILURE, 0, "two values (separated by ':' or ',') are " "necessary for '--range' in this format: " "'--range=COLUMN,min:max'"); /* The first must be smaller than the second. */ darr=tmp->array; if( darr[0] > darr[1] ) error(EXIT_FAILURE, 0, "first value (%g) given to '--range' must " "be smaller than the second (%g)", darr[0], darr[1]); } /* Basic checks for '--inpolygon' or '--outpolygon'. */ if(p->inpolygon || p->outpolygon) { if(p->inpolygon && p->outpolygon) error(EXIT_FAILURE, 0, "'--inpolygon' and '--outpolygon' options " "cannot be called together"); if(p->inpolygon && p->inpolygon->size!=2) error(EXIT_FAILURE, 0, "two columns (for coordinates) can " "be given to '--inpolygon'"); if(p->outpolygon && p->outpolygon->size!=2) error(EXIT_FAILURE, 0, "two columns (for coordinates) can " "be given to '--outpolygon'"); if(p->polygon==NULL) error(EXIT_FAILURE, 0, "no polygon specified for '--inpolygon' or " "'--outpolygon'! Please provide the vertices of the desired " "polygon with the '--polygon' option in this format: " "v1x,v1y:v2x,v2y:v3x,v3y:..."); } /* Make sure only one of the positional row selection operations is called in one run. */ if( (p->rowrange!=NULL) + (p->rowrandom!=0) + (p->head!=GAL_BLANK_SIZE_T) + (p->tail!=GAL_BLANK_SIZE_T) > 1 ) error(EXIT_FAILURE, 0, "only one of the following options can be " "called in one run: '--head', '--tail', '--rowrange' and " "'--rowrandom'"); /* Make sure the value to '--rowrange' is in the correct format. */ if(p->rowrange) { /* There should only be two values. */ if(p->rowrange->size!=2) error(EXIT_FAILURE, 0, "only two should be given to " "'--rowrange' (the top and bottom row numbers specifying " "your desired range)"); /* Do individual checks. */ darr=p->rowrange->array; for(i=0;irowrange->size;++i) { /* Make sure it isn't 0 or negative. */ if( darr[i]<=0 ) error(EXIT_FAILURE, 0, "%g (value given to '--rowrange') " "is smaller than, or equal to, zero! This option's " "values are row-counters (starting from 1), so they " "must be positive integers", darr[i]); /* Make sure its an integer. */ if( darr[i] != (size_t)(darr[i]) ) error(EXIT_FAILURE, 0, "%g (value given to '--rowrange') is " "not an integer! This option's values are row-counters " "so they must be integers.", darr[i]); /* Subtract 1 from the value, so it counts from 0. */ --darr[i]; } /* Make sure that the first value is smaller than the second. */ if( darr[0] > darr[1] ) error(EXIT_FAILURE, 0, "the first value to '--rowrange' (%g) is " "larger than the second (%g). This option's values defines " "a row-counter interval, assuming the first value is the top " "of the desired interval (smaller row counter) and the " "second value is the bottom of the desired interval (larger " "row counter)", darr[0], darr[1]); } /* If '--colmetadata' is given, make sure none of the given options have more than three values. */ if(p->colmetadata) for(tmp=p->colmetadata;tmp!=NULL;tmp=tmp->next) if(tmp->size>3) error(EXIT_FAILURE, 0, "at most three values can be given to each " "call of '--colmetadata' ('-m') after the original columns " "name or number. But %zu strings have been given", tmp->size); /* If '--catcolumns' is given (to only concatenate certain columns), but no file has been given for appending from (to '--catcolumnfile'), then print a warning to let the user know (this may have been a typo!). */ if(p->cp.quiet==0 && p->catcolumns && p->catcolumnfile==NULL) error(EXIT_SUCCESS, 0, "WARNING: '--catcolumns' (or '-C') is ignored " "because '--catcolumnfile' (or '-L') was not given to specify " "which file the new columns should come from. To suppress this " "warning, please run with '--quiet'"); /* Check the floating point format string. */ if(p->txtf32fmtstr) { p->txtf32format=gal_table_displayflt_from_str(p->txtf32fmtstr); if(p->txtf32format==GAL_TABLE_DISPLAY_FMT_INVALID) error(EXIT_FAILURE, 0, "'%s' is not a recognized value for " "'--txtf64format'. Recognized values are 'fixed' and " "'exp'", p->txtf32fmtstr); } if(p->txtf64fmtstr) { p->txtf64format=gal_table_displayflt_from_str(p->txtf64fmtstr); if(p->txtf64format==GAL_TABLE_DISPLAY_FMT_INVALID) error(EXIT_FAILURE, 0, "'%s' is not a recognized value for " "'--txtf64format'. Recognized values are 'fixed' and " "'exp'", p->txtf64fmtstr); } /* If the user wants easy-to-read text output (this should over-write the existing values in the command-line or in configuration files). Because default values exist in the configuration files. */ if(p->txteasy) { p->txtf32precision=3; p->txtf64precision=6; p->txtf32format=GAL_TABLE_DISPLAY_FMT_FIXED; p->txtf64format=GAL_TABLE_DISPLAY_FMT_FIXED; } } static void ui_check_options_and_arguments(struct tableparams *p) { /* Make sure an input file name was given and if it was a FITS file, that a HDU is also given. */ if(p->filename) { if( gal_fits_file_recognized(p->filename) && p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified. When the input is a FITS " "file, a HDU must also be specified, you can use the '--hdu' " "('-h') option and give it the HDU number (starting from " "zero), extension name, or anything acceptable by CFITSIO"); } } /**************************************************************/ /************ List of row-selection requests **************/ /**************************************************************/ static void ui_list_select_add(struct list_select **list, gal_data_t *col, int type) { struct list_select *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->col=col; newnode->type=type; newnode->next=*list; *list=newnode; } static gal_data_t * ui_list_select_pop(struct list_select **list, int *type) { gal_data_t *out=NULL; struct list_select *tmp; if(*list) { /* Extract all the necessary components of the node. */ tmp=*list; out=tmp->col; *type=tmp->type; *list=tmp->next; /* Delete the node. */ free(tmp); } return out; } static void ui_list_select_reverse(struct list_select **list) { int thistype; gal_data_t *thisdata; struct list_select *correctorder=NULL; /* Only do the reversal if there is more than one element. */ if( *list && (*list)->next ) { while(*list!=NULL) { thisdata=ui_list_select_pop(list, &thistype); ui_list_select_add(&correctorder, thisdata, thistype); } *list=correctorder; } } void ui_list_select_free(struct list_select *list, int freevalue) { struct list_select *tmp; while(list!=NULL) { tmp=list->next; if(freevalue) gal_data_free(list->col); free(list); list=tmp; } } /**************************************************************/ /*************** Packaged columns *******************/ /**************************************************************/ /* Return the last 'colpack' element. */ static struct column_pack * ui_colpack_last(struct column_pack *list) { if(list) { while(list->next!=NULL) list=list->next; return list; } else return NULL; } /* Allocate a clean 'out_columns' structure and put it at the top of the list. */ static struct column_pack * ui_colpack_add_new_to_end(struct column_pack **list) { struct column_pack *last, *node; /* Allocate a new node. */ errno=0; node=malloc(sizeof *node); if(node==NULL) error(EXIT_FAILURE, errno, "%s: couldn't allocate new node (%zu bytes)", __func__, sizeof *node); /* Initialize its elements. */ node->next=NULL; node->arith=NULL; node->numsimple=0; node->start=GAL_BLANK_SIZE_T; /* If the list already has elements, go to the last node in the list and add this node. */ if(*list) { last=ui_colpack_last(*list); last->next=node; } else *list=node; /* Return a pointer to this node (to use temporarily). */ return node; } void ui_colpack_free(struct column_pack *list) { struct column_pack *tmp; while(list!=NULL) { arithmetic_token_free(list->arith); tmp=list->next; free(list); list=tmp; } } /**************************************************************/ /*************** Preparations *******************/ /**************************************************************/ /* Read the table metadata to print information. */ static gal_data_t * ui_info_read(struct tableparams *p, size_t *numcols, size_t *numrows, int *tableformat) { gal_data_t *allcols; gal_list_str_t *lines; lines=gal_options_check_stdin(p->filename, p->cp.stdintimeout, "input"); allcols=gal_table_info(p->filename, p->cp.hdu, lines, numcols, numrows, tableformat, "--hdu"); if(p->filename==NULL) p->filename="Standard-input"; gal_list_str_free(lines, 1); return allcols; } /* Print full column and row information. */ static void ui_print_info_exit(struct tableparams *p) { char *tmp; int tableformat; gal_data_t *allcols; size_t numcols, numrows; /* Read the input. */ allcols=ui_info_read(p, &numcols, &numrows, &tableformat); /* If there was no actual data in the file, then inform the user */ if(allcols==NULL) error(EXIT_FAILURE, 0, "%s: no usable data rows", p->filename); /* Print the file information. */ printf("--------\n"); tmp=gal_fits_name_save_as_string(p->filename, p->cp.hdu); printf("%s\n", tmp); free(tmp); /* Print each column's information. */ gal_table_print_info(allcols, numcols, numrows); /* Free the information from all the columns. */ gal_data_array_free(allcols, numcols, 0); /* Free the allocated spaces and exit. */ ui_free_report(p); exit(EXIT_SUCCESS); } /* Print number of rows or columns */ static void ui_print_info_nums_exit(struct tableparams *p) { int tableformat; gal_data_t *allcols; size_t numcols, numrows; /* Read the input metadata and free the column information (which is not needed here: we just want the numbers). */ allcols=ui_info_read(p, &numcols, &numrows, &tableformat); gal_data_array_free(allcols, numcols, 0); /* Print the respective information. */ if(p->infonumcols) printf("%zu\n", numcols); else if(p->infonumrows) printf("%zu\n", numrows); else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to fix " "the problem. This function should only be activated when " "'--info-num-cols' or '--info-num-rows' are called", __func__, PACKAGE_BUGREPORT); /* Free the allocated spaces and exit. */ ui_free_report(p); exit(EXIT_SUCCESS); } static void ui_columns_prepare_arith(struct tableparams *p, gal_data_t *colinfo, gal_list_str_t **colstoread, size_t *totcalled, size_t numcols, char *str) { struct column_pack *node; /* If this is the first arithmetic operation and the user has already asked for some columns, we'll need to put all previously requested simply-printed columns into an 'colpack' structure, then add this arithmetic operation's 'colpack'. */ if(p->colpack==NULL && *colstoread) { /* Allocate an empty structure and set the necessary pointers. */ node=ui_colpack_add_new_to_end(&p->colpack); node->start=0; node->numsimple=gal_list_str_number(*colstoread); *totcalled=node->numsimple; } /* Add a new column pack for this arithmetic operation, then read all the tokens (while specifying which columns it needs). */ node=ui_colpack_add_new_to_end(&p->colpack); arithmetic_init(p, &node->arith, colstoread, totcalled, str+ARITHMETIC_CALL_LENGTH, colinfo, numcols); } /* The columns can be given as comma-separated values to one option or multiple calls to the column option. Here, we'll check if the input list has comma-separated values. If they do then the list will be updated to be fully separate. */ static void ui_columns_prepare(struct tableparams *p, gal_list_str_t *lines) { char *tstr; gal_data_t *colinfo=NULL; int tableformat, arithallind=0; struct column_pack *node, *last; gal_list_str_t *tmp, *colstoread=NULL; size_t i, totcalled=0, numcols, numrows, numsimple; char *c, *str, countstr[11]; /* an un-signed 32-bit integer takes 10 chars */ /* Go over the list of requested columns from the main input. */ for(tmp=p->columns;tmp!=NULL;tmp=tmp->next) { /* For easy reading. */ str=tmp->v; /* If this is an arithmetic column. */ if(!strncmp(str, ARITHMETIC_CALL, ARITHMETIC_CALL_LENGTH)) { /* Arithmetic operations may be done on columns from other files (for example with '--catcolumnfile'). We therefore need to check if the requested column is in the main input file or not. If not, it should be set when column arithmetic starts. To do this, we need to get the input's column information. */ if(colinfo==NULL) colinfo=gal_table_info(p->filename, p->cp.hdu, lines, &numcols, &numrows, &tableformat, "--hdu"); /* Check if '$_all' is in the string. */ for(c=str; *c!='\0'; ++c) if(strncmp(c, "$_all", 5)==0) { arithallind=c-str; break; } /* When '$_all' is in the string, we need to repeat this option for every column. Otherwise, just add this option once.*/ if(arithallind) { /* Because we want to use the same bytes as '$_all' in the input string, we have four characters to write over '_all' with the number of each column. However, 'sprintf' already puts a '\0' on the last character (which we later replace with a ' '), so we only have three characters to use for column numbers. Therefore, to use this feature the input table can have a maximum of 999 columns (the FITS standard only accepts 999 columns; so it is very rare for people to need more! but we can add it if necessary). */ if(numcols>999) error(EXIT_FAILURE, 0, "the '$_all' feature is currently " "only implemented for tables with fewer than 999 " "columns. Please contact us at %s to add more columns", PACKAGE_BUGREPORT); /* Repeat the arithmetic command for each column. */ for(i=1;i<=numcols;++i) { gal_checkset_allocate_copy(str, &tstr); sprintf(tstr+arithallind+1, "%-3zu", i); tstr[arithallind+4]=' '; ui_columns_prepare_arith(p, colinfo, &colstoread, &totcalled, numcols, tstr); free(tstr); } } else ui_columns_prepare_arith(p, colinfo, &colstoread, &totcalled, numcols, str); } /* This is a simple column (no change in values). */ else { /* If the value is '_all', then we should add all the input's columns. Otherwise, just add this string. */ if( !strcmp(str, "_all") ) { /* Load column information (it not already loaded). */ if(colinfo==NULL) colinfo=gal_table_info(p->filename, p->cp.hdu, lines, &numcols, &numrows, &tableformat, "--hdu"); /* Add all the input column counters to the list of columns to read */ numsimple=gal_list_data_number(colinfo); for(i=0;icolpack) { /* If the previous column package was an arithmetic operation, allocate a new node. */ last=ui_colpack_last(p->colpack); if(last->arith) { node=ui_colpack_add_new_to_end(&p->colpack); node->start=totcalled; node->numsimple=numsimple; } /* The previous package of columns are simple (we don't need to change their value), so we can just increment the number of columns there and don't need to allocate a new one. */ else last->numsimple+=numsimple; } /* Increment the total number of called columns. */ totcalled+=1; } } /* For a check if(p->colpack) { struct column_pack *tmp; struct arithmetic_token *atmp; for(tmp=p->colpack;tmp!=NULL;tmp=tmp->next) if(tmp->arith) { printf("Arithmetic: \n"); for(atmp=tmp->arith;atmp!=NULL;atmp=atmp->next) { if(atmp->operator!=GAL_ARITHMETIC_OP_INVALID) { printf("\tOperator: %d\n", atmp->operator); if(atmp->name_def) printf("\t\t(Name definition: %s)\n", atmp->name_def); } else if(atmp->constant) printf("\tConstant number\n"); else if(atmp->name_use) printf("\tName usage: %s\n", atmp->name_use); else printf("\tCalled column: %zu\n", atmp->index); } } else printf("Simple: start: %zu, num: %zu\n", tmp->start, tmp->numsimple); } */ /* Free the information from all the columns (that may have been gathered if it was necessary). */ if(colinfo) gal_data_array_free(colinfo, numcols, 0); /* Delete the old list, then reverse the 'colstoread' list, and put it into 'p->columns'. */ gal_list_str_free(p->columns, 1); gal_list_str_reverse(&colstoread); p->columns=colstoread; } /* The users give column numbers counting from 1. But we need an 'index' (starting from 0). So if we can read it as a number, we'll subtract one from it. */ static size_t ui_check_select_sort_read_col_ind(char *string) { size_t out; void *ptr=&out; if( gal_type_from_string(&ptr, string, GAL_TYPE_SIZE_T) ) out=GAL_BLANK_SIZE_T; else out-=1; return out; } /* Fill replace '--noblank' with all columns (if it is given '_all'). */ static void ui_noblank_prepare(struct tableparams *p, size_t numcols) { size_t i, zero=0; gal_list_str_t *tmp; char name[50]; /* No table will have a 50 digit number of columns! */ /* Merge all the possible calls of 'noblank' into one. */ gal_options_merge_list_of_csv(&p->noblankll); /* Initialize the 'noblank' list of (empty!) datasets (we only need the column names, this is done to conform with the general selection mechanism, where some selection methods need values). */ p->noblank=NULL; /* In case it is given an '_all' option (for all columns to be checked). */ if(gal_list_str_number(p->noblankll)==1 && !strcmp(p->noblankll->v,"_all")) { /* Add all the columns to the final list of datasets. */ for(i=0;inoblank, NULL, GAL_TYPE_FLOAT64, 1, &zero, NULL, 0, -1, 1, name, NULL, NULL); } } /* Only certain columns are requested (we should just put the strings in the desired format of a list of datasets with names, not a single dataset with type string and many elements). */ else { for(tmp=p->noblankll; tmp!=NULL; tmp=tmp->next) gal_list_data_add_alloc(&p->noblank, NULL, GAL_TYPE_FLOAT64, 1, &zero, NULL, 0, -1, 1, tmp->v, NULL, NULL); } /* Reverse the final output list of columns. */ gal_list_data_reverse(&p->noblank); /* Clean up the list that we don't need any more. */ gal_list_str_free(p->noblankll, 1); p->noblankll=NULL; /* For a check: gal_data_t *dtmp; for(dtmp=p->noblank;dtmp!=NULL;dtmp=dtmp->next) printf("col: %s\n", dtmp->name); exit(0); */ } /* See if row selection or sorting needs any extra columns to be read. */ static void ui_check_select_sort_before(struct tableparams *p, gal_list_str_t *lines, size_t *nselect, size_t *origoutncols, size_t *sortindout, size_t **selectindout_out, size_t **selecttypeout_out) { char **strarr; gal_list_sizet_t *tmp, *indexll; gal_list_str_t *stmp, *add=NULL; int tableformat, selecthasname=0; size_t one=1, sortind=GAL_BLANK_SIZE_T; size_t *selectind=NULL, *selecttype=NULL; size_t *selectindout=NULL, *selecttypeout=NULL; size_t i, j, k, *s, *sf, allncols, numcols, numrows; gal_data_t *dtmp, *allcols, *inpolytmp=NULL, *outpolytmp=NULL; /* Important note: these have to be in the same order as the 'enum select_types' in 'main.h'. We'll fill the NULL components afterwards. */ gal_data_t *select[SELECT_TYPE_NUMBER]={p->range, NULL, NULL, p->equal, p->notequal, NULL}; /* The inpolygon dataset is currently a single dataset with two elements (strings). But we need to have it as two linked datasets with a set name. */ if(p->inpolygon) { strarr=p->inpolygon->array; inpolytmp=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &one, NULL, 1, -1, 1, strarr[0], NULL, NULL); inpolytmp->next=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &one, NULL, 1, -1, 1, strarr[1], NULL, NULL); select[SELECT_TYPE_INPOLYGON]=inpolytmp; } if(p->outpolygon) { strarr=p->outpolygon->array; outpolytmp=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &one, NULL, 1, -1, 1, strarr[0], NULL, NULL); outpolytmp->next=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &one, NULL, 1, -1, 1, strarr[1], NULL, NULL); select[SELECT_TYPE_OUTPOLYGON]=outpolytmp; } /* Get all the input table's column information. */ allcols=gal_table_info(p->filename, p->cp.hdu, lines, &numcols, &numrows, &tableformat, "--hdu"); /* If '--noblank' is given an '_all', we should replace it with the counters of all the input table columns. */ if(p->noblankll) { ui_noblank_prepare(p, numcols); select[SELECT_TYPE_NOBLANK]=p->noblank; } /* Allocate necessary spaces. */ if(p->selection) { /* Find the number of columns that are needed for selection. */ *nselect = ( gal_list_data_number(p->range) + gal_list_data_number(inpolytmp) + gal_list_data_number(outpolytmp) + gal_list_data_number(p->equal) + gal_list_data_number(p->notequal) + gal_list_data_number(p->noblank) ); /* Allocate the necessary arrays. */ selectind=gal_pointer_allocate(GAL_TYPE_SIZE_T, *nselect, 0, __func__, "selectind"); selecttype=gal_pointer_allocate(GAL_TYPE_SIZE_T, *nselect, 0, __func__, "selecttype"); selectindout=gal_pointer_allocate(GAL_TYPE_SIZE_T, *nselect, 0, __func__, "selectindout"); selecttypeout=gal_pointer_allocate(GAL_TYPE_SIZE_T, *nselect, 0, __func__, "selecttypeout"); /* Initialize them to blank. */ sf=(s=selectindout)+*nselect; do *s++=GAL_BLANK_SIZE_T; while(ssort) sortind=ui_check_select_sort_read_col_ind(p->sort); if(p->selection) for(k=0;knext) { selecttype[i] = k; selectind[i] = ui_check_select_sort_read_col_ind(dtmp->name); ++i; } /* If the values are numbers, we'll check if the given value is less than the total number of columns. Just note that the indexs count from zero. */ if(p->sort && sortind!=GAL_BLANK_SIZE_T && sortind>=numcols) error(EXIT_FAILURE, 0, "%s has %zu columns, less than the column " "number given to '--sort' (%s)", gal_fits_name_save_as_string(p->filename, p->cp.hdu), numcols, p->sort); if(p->selection) for(i=0;i<*nselect;++i) if(selectind[i]!=GAL_BLANK_SIZE_T && selectind[i]>=numcols) error(EXIT_FAILURE, 0, "%s has %zu columns, less than the column " "number given to '--range', '--inpolygon', '--outpolygon', " "'--equal', or '--sort' (%zu)", gal_fits_name_save_as_string(p->filename, p->cp.hdu), numcols, selectind[i]); /* If any of the columns isn't specified by an index, go over the table information and set the index based on the names. */ if(p->selection) for(i=0;i<*nselect;++i) if(selectind[i]==GAL_BLANK_SIZE_T) { selecthasname=1; break; } if( (p->sort && sortind==GAL_BLANK_SIZE_T) || selecthasname ) { /* For '--sort', go over all the columns if an index hasn't been set yet. If the input columns have a name, see if their names matches the name given to 'sort'. */ if(p->sort && sortind==GAL_BLANK_SIZE_T) for(i=0;isort) ) { sortind=i; break; } /* Same for the selection. Just note that here we may have multiple calls. It is thus important to loop over the values given to range first, then loop over the column names from the start for each new '--ran */ i=0; for(k=0;knext) { if(selectind[i]==GAL_BLANK_SIZE_T) for(j=0;jname) ) { selecttype[i]=k; selectind[i]=j; break; } ++i; } } /* The columns must be good indexs now, if they don't the user didn't specify the name properly and the program must abort. */ if( p->sort && sortind==GAL_BLANK_SIZE_T ) error(EXIT_FAILURE, 0, "%s: no column named '%s' (value to '--sort') " "you can either specify a name or number", gal_fits_name_save_as_string(p->filename, p->cp.hdu), p->sort); if(p->selection) { i=0; for(k=0;knext) { if(selectind[i]==GAL_BLANK_SIZE_T) error(EXIT_FAILURE, 0, "%s: no column named '%s' (value to " "'--%s') you can either specify a name or number", gal_fits_name_save_as_string(p->filename, p->cp.hdu), dtmp->name, ( k==0?"range":( k==1?"equal":"notequal") )); ++i; } } /* See which columns the user has asked to output. */ indexll=gal_table_list_of_indexs(p->columns, allcols, numcols, p->cp.searchin, p->cp.ignorecase, p->filename, p->cp.hdu, NULL); allncols=*origoutncols=gal_list_sizet_number(indexll); /* See if the requested columns are already on the to-read list. If so, keep the counter. */ i=0; for(tmp=indexll; tmp!=NULL; tmp=tmp->next) { if(p->sort && *sortindout==GAL_BLANK_SIZE_T && tmp->v == sortind) *sortindout=i; if(p->selection) for(j=0;j<*nselect;++j) if(selectindout[j]==GAL_BLANK_SIZE_T && tmp->v==selectind[j]) { selectindout[j]=i; selecttypeout[j]=selecttype[j]; } ++i; } /* See if any of the sorting or selection columns aren't requested as an output by the user. If there is, keep their new label. Note that the sorting and range may be requested on the same column. In this case, we don't want to read the same column twice. */ if( p->sort && *sortindout==GAL_BLANK_SIZE_T ) { *sortindout=allncols++; gal_list_str_add(&add, p->sort, 0); } if(p->selection) { i=0; for(k=0;knext) { if( *sortindout!=GAL_BLANK_SIZE_T && selectindout[i]==*sortindout) { selecttypeout[i]=k; selectindout[i]=*sortindout; } else { if( selectindout[i]==GAL_BLANK_SIZE_T ) { selecttypeout[i]=k; selectindout[i]=allncols++; gal_list_str_add(&add, dtmp->name, 1); } } ++i; } } /* If any new (not requested by the user to output) columns must be read, add them to the list of columns to read from the input file. */ if(add) { gal_list_str_reverse(&add); for(stmp=p->columns; stmp!=NULL; stmp=stmp->next) if(stmp->next==NULL) { stmp->next=add; break; } } /* Clean up. */ gal_list_sizet_free(indexll); if(selectind) free(selectind); if(selecttype) free(selecttype); gal_data_array_free(allcols, numcols, 0); if(inpolytmp) gal_list_data_free(inpolytmp); if(outpolytmp) gal_list_data_free(outpolytmp); } static void ui_check_select_sort_after(struct tableparams *p, size_t nselect, size_t origoutncols, size_t sortindout, size_t *selectindout, size_t *selecttypeout) { size_t i, j; struct list_select *rtmp; gal_data_t *tmp, *origlast=NULL; /* Allocate the necessary arrays. */ if(p->selection) p->freeselect=gal_pointer_allocate(GAL_TYPE_UINT8, nselect, 1, __func__, "p->freeselect"); /* Set some necessary pointers (last pointer of actual output table and pointer to the sort column). */ i=0; for(tmp=p->table; tmp!=NULL; tmp=tmp->next) { if(i==origoutncols-1) origlast=tmp; if(p->sort && i==sortindout) p->sortcol=tmp; ++i; } /* The column to sort by should not be a vector column. */ if(p->sortcol && p->sortcol->ndim!=1) error(EXIT_FAILURE, 0, "the column given to '--sort' cannot be a " "vector column. If you need this feature, please get in " "touch with us at '%s' to add it", PACKAGE_BUGREPORT); /* Since we can have several selection columns, we'll treat them differently. */ for(i=0;itable; tmp!=NULL; tmp=tmp->next) { if(j==selectindout[i]) { ui_list_select_add(&p->selectcol, tmp, selecttypeout[i]); break; } ++j; } } ui_list_select_reverse(&p->selectcol); /* Terminate the desired output table where it should be terminated (by setting 'origlast->next' to NULL. */ origlast->next=NULL; /* Also, remove any possibly existing 'next' pointer for 'sortcol' and 'selectcol'. */ if(p->sort && sortindout>=origoutncols) { p->sortcol->next=NULL; p->freesort=1; } else p->sortin=1; if(p->selection) { i=0; for(rtmp=p->selectcol;rtmp!=NULL;rtmp=rtmp->next) { if(selectindout[i]>=origoutncols) { rtmp->col->next=NULL; p->freeselect[i] = (rtmp->col==p->sortcol) ? 0 : 1; } ++i; } } } static void ui_preparations(struct tableparams *p) { gal_list_str_t *lines; size_t nselect=0, origoutncols=0; size_t sortindout=GAL_BLANK_SIZE_T; struct gal_options_common_params *cp=&p->cp; size_t *selectindout=NULL, *selecttypeout=NULL; /* If there were no columns specified or the user has asked for information on the columns, we want the full set of columns. */ if(p->information) ui_print_info_exit(p); if(p->infonumcols || p->infonumrows) ui_print_info_nums_exit(p); /* If the input is from stdin, save it as 'lines'. */ lines=gal_options_check_stdin(p->filename, p->cp.stdintimeout, "input"); /* Prepare the column names. */ ui_columns_prepare(p, lines); /* If any kind of row-selection is requested set 'p->selection' to 1. */ p->selection = ( p->range || p->inpolygon || p->outpolygon || p->equal || p->notequal || p->noblankll ); /* If row sorting or selection are requested, see if we should read any extra columns. */ if(p->selection || p->sort) ui_check_select_sort_before(p, lines, &nselect, &origoutncols, &sortindout, &selectindout, &selecttypeout); /* If we have any arithmetic operations, we need to make sure how many columns match every given column name. */ p->colmatch = ( p->colpack ? gal_pointer_allocate(GAL_TYPE_SIZE_T, gal_list_str_number(p->columns), 1, __func__, "p->colmatch") : NULL); /* Read the necessary columns. */ p->table=gal_table_read(p->filename, cp->hdu, lines, p->columns, cp->searchin, cp->ignorecase, cp->numthreads, cp->minmapsize, p->cp.quietmmap, p->colmatch, "--hdu"); if(p->filename==NULL) p->filename="stdin"; gal_list_str_free(lines, 1); /* If row sorting or selection are requested, keep them as separate datasets.*/ if(p->selection || p->sort) ui_check_select_sort_after(p, nselect, origoutncols, sortindout, selectindout, selecttypeout); /* If there was no actual data in the file, then inform the user and abort. */ if(p->table==NULL) error(EXIT_FAILURE, 0, "%s: no usable data rows (non-commented and " "non-blank lines)", p->filename); /* Make sure the (possible) output name is writable. */ gal_checkset_writable_remove(p->cp.output, p->filename, 0, p->cp.dontdelete); /* If random rows are desired, we need to define a GSL random number generator structure. */ if(p->rowrandom) p->rng=gal_checkset_gsl_rng(p->envseed, &p->rng_name, &p->rng_seed); /* Clean up. */ if(selectindout) free(selectindout); if(selecttypeout) free(selecttypeout); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct tableparams *p) { struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Sanity check only on options. */ ui_check_only_options(p); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Let the user know basic information if necessary (for example when a random number generator has been used). */ if(p->rng && !p->cp.quiet) { /* Write the information. */ printf(PROGRAM_NAME" "PACKAGE_VERSION" started on %s", ctime(&p->rawtime)); printf("Parameters used for '--randomrows':\n"); printf(" - Random number generator name: %s\n", p->rng_name); printf(" - Random number generator seed: %lu\n", p->rng_seed); printf("(use '--quiet' to suppress this starting message)\n"); } } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct tableparams *p) { /* Free the allocated arrays: */ free(p->cp.hdu); free(p->cp.output); gal_list_data_free(p->table); if(p->wcshdu) free(p->wcshdu); gal_list_data_free(p->noblank); gal_list_str_free(p->columns, 1); if(p->colmatch) free(p->colmatch); gal_list_data_free(p->colmetadata); gal_list_str_free(p->catcolumnhdu, 1); gal_list_str_free(p->catcolumnfile, 1); /* If a random number generator was allocated, free it. */ if(p->rng) gsl_rng_free(p->rng); } gnuastro-0.22/bin/table/arithmetic.c0000644000175000017500000013151614551337306013132 /********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2019-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "arithmetic.h" /*********************************************************************/ /******************** List operations *********************/ /*********************************************************************/ static struct arithmetic_token * arithmetic_add_new_to_end(struct arithmetic_token **list) { struct arithmetic_token *tmp, *node; /* Allocate a new node. */ errno=0; node=malloc(sizeof *node); if(node==NULL) error(EXIT_FAILURE, errno, "%s: couldn't allocate new node (%zu bytes)", __func__, sizeof *node); /* Initialize its elements. */ node->next=NULL; node->loadcol=NULL; node->name_def=NULL; node->name_use=NULL; node->constant=NULL; node->id_at_usage=NULL; node->index=GAL_BLANK_SIZE_T; node->num_at_usage=GAL_BLANK_SIZE_T; node->operator=GAL_ARITHMETIC_OP_INVALID; /* If the list already has elements, go to the last node in the list and add this node. */ if(*list) { for(tmp=*list;tmp->next!=NULL;tmp=tmp->next) {} tmp->next=node; } else *list=node; /* Return a pointer to this node (to use temporarily). */ return node; } void arithmetic_token_free(struct arithmetic_token *list) { struct arithmetic_token *tmp; while(list!=NULL) { /* Free allocated elements first. */ if(list->name_def) free(list->name_def); if(list->name_use) free(list->name_use); /* Set the next list node, and free this one. */ tmp=list->next; free(list); list=tmp; } } /*********************************************************************/ /******************** User-interface *********************/ /*********************************************************************/ static char * arithmetic_operator_name(int operator) { char *out=gal_arithmetic_operator_string(operator); /* If the operator wasn't in the library, see if it was defined here. */ if(out==NULL) switch(operator) { case ARITHMETIC_TABLE_OP_SET: out="set"; break; case ARITHMETIC_TABLE_OP_WCSTOIMG: out="wcs-to-img"; break; case ARITHMETIC_TABLE_OP_IMGTOWCS: out="img-to-wcs"; break; case ARITHMETIC_TABLE_OP_DATETOSEC: out="date-to-sec"; break; case ARITHMETIC_TABLE_OP_DISTANCEFLAT: out="distance-flat"; break; case ARITHMETIC_TABLE_OP_DATETOMILLISEC: out="date-to-millisec"; break; case ARITHMETIC_TABLE_OP_DISTANCEONSPHERE: out="distance-on-sphere"; break; case ARITHMETIC_TABLE_OP_SORTEDTOINTERVAL: out="sorted-to-interval"; break; case ARITHMETIC_TABLE_OP_EQJ2000TOFLAT: out="eq-j2000-to-flat"; break; case ARITHMETIC_TABLE_OP_EQJ2000FROMFLAT: out="eq-j2000-from-flat"; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. %d is not a recognized operator code", __func__, PACKAGE_BUGREPORT, operator); } return out; } static void arithmetic_init_wcs(struct tableparams *p, char *operator) { /* If a WCS hasn't been read yet, read it.*/ if(p->wcs==NULL) { /* A small sanity check. */ if(p->wcsfile==NULL || p->wcshdu==NULL) error(EXIT_FAILURE, 0, "'--wcsfile' and '--wcshdu' are necessary " "for the '%s' operator", operator); /* Read the WCS. */ p->wcs=gal_wcs_read(p->wcsfile, p->wcshdu, p->cp.wcslinearmatrix, 0, 0, &p->nwcs, "--wcshdu"); if(p->wcs==NULL) error(EXIT_FAILURE, 0, "%s (hdu: %s): no WCS could be read by " "WCSLIB", p->wcsfile, p->wcshdu); } } /* Set the operator code from the given string. */ static int arithmetic_set_operator(struct tableparams *p, char *string, size_t *num_operands, int *inlib) { /* Use the library's main function for its own operators. */ int op=gal_arithmetic_set_operator(string, num_operands); /* Mark if this operator is in the library or not. */ *inlib = op==GAL_ARITHMETIC_OP_INVALID ? 0 : 1; /* Set the operator and number of operands. */ if( op==GAL_ARITHMETIC_OP_INVALID ) { /* Simple operators. */ if( !strcmp(string, "wcs-to-img")) { op=ARITHMETIC_TABLE_OP_WCSTOIMG; *num_operands=0; } else if( !strcmp(string, "img-to-wcs")) { op=ARITHMETIC_TABLE_OP_IMGTOWCS; *num_operands=0; } else if( !strcmp(string, "eq-j2000-to-flat")) { op=ARITHMETIC_TABLE_OP_EQJ2000TOFLAT; *num_operands=0; } else if( !strcmp(string, "eq-j2000-from-flat")) { op=ARITHMETIC_TABLE_OP_EQJ2000FROMFLAT; *num_operands=0; } else if( !strcmp(string, "date-to-sec")) { op=ARITHMETIC_TABLE_OP_DATETOSEC; *num_operands=0; } else if( !strcmp(string, "date-to-millisec")) { op=ARITHMETIC_TABLE_OP_DATETOMILLISEC; *num_operands=0; } else if( !strcmp(string, "distance-flat")) { op=ARITHMETIC_TABLE_OP_DISTANCEFLAT; *num_operands=0; } else if( !strcmp(string, "distance-on-sphere")) { op=ARITHMETIC_TABLE_OP_DISTANCEONSPHERE; *num_operands=0; } else if( !strcmp(string, "sorted-to-interval")) { op=ARITHMETIC_TABLE_OP_SORTEDTOINTERVAL; *num_operands=0; } else { op=GAL_ARITHMETIC_OP_INVALID; *num_operands=GAL_BLANK_INT; } } /* Operator specific operations. */ switch(op) { case ARITHMETIC_TABLE_OP_WCSTOIMG: case ARITHMETIC_TABLE_OP_IMGTOWCS: arithmetic_init_wcs(p, string); break; } /* Return the operator. */ return op; } /* When a column identifier (name or number) is identified, we need to make sure if that the identifier belongs to the first input or not. */ static void arithmetic_init_addcol(char *token, struct arithmetic_token *node, gal_list_str_t **colstoread, size_t *totcalled, gal_data_t *colinfo, size_t numcols) { char *id; int inmaininput=0; size_t i, num=GAL_BLANK_SIZE_T; /* This needs to be defined after 'num'. */ void *numptr=# /* Set the identifier. */ id = ( (token[0]=='$' && isdigit(token[1])) ? &token[1] /* Column num. (starting with '$'). */ : token ); /* Column name, just add it. */ /* See if the column identifier is a number, then 'num' will not be a blank value. */ if( gal_type_from_string(&numptr, id, GAL_TYPE_SIZE_T) ) num=GAL_BLANK_SIZE_T; /* See if the column exists in the main input catalog. */ if(num==GAL_BLANK_SIZE_T) /* ID is a string. */ { for(i=0;iindex=*totcalled; *totcalled+=1; } else { gal_checkset_allocate_copy(id, &node->id_at_usage);/* Future usage. */ node->num_at_usage=num; /* Avoid converting to a number again! */ node->index=GAL_BLANK_SIZE_T; /* Crash if not used properly! */ } } /* Initialize each column from an arithmetic operation. */ void arithmetic_init(struct tableparams *p, struct arithmetic_token **arith, gal_list_str_t **colstoread, size_t *totcalled, char *expression, gal_data_t *colinfo, size_t numcols) { void *num; size_t one=1; uint8_t ntype; gal_data_t *col; struct arithmetic_token *atmp, *node=NULL; struct gal_options_common_params *cp=&p->cp; char *token=NULL, *saveptr, *delimiter=" \t"; /* Parse all the given tokens. */ token=strtok_r(expression, delimiter, &saveptr); while(token!=NULL) { /* Allocate and initialize this arithmetic token. */ node=arithmetic_add_new_to_end(arith); /* See if the token is an operator, if not check other cases. */ node->operator=arithmetic_set_operator(p, token, &node->num_operands, &node->inlib); if(node->operator==GAL_ARITHMETIC_OP_INVALID) { /* Token is a single number.*/ if( (num=gal_type_string_to_number(token, &ntype)) ) node->constant=gal_data_alloc(num, ntype, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); /* This is a 'set-' operator. */ else if( !strncmp(token, GAL_ARITHMETIC_SET_PREFIX, GAL_ARITHMETIC_SET_PREFIX_LENGTH) ) { node->num_operands=0; node->operator=ARITHMETIC_TABLE_OP_SET; gal_checkset_allocate_copy(token, &node->name_def); } /* This is a 'load-col' operator. */ else if( (col=gal_arithmetic_load_col(token, cp->searchin, cp->ignorecase, cp->minmapsize, cp->quietmmap))!=NULL ) node->loadcol=col; /* Non-pre-defined situation.*/ else { /* See if this is an already defined name. */ for(atmp=*arith; atmp!=NULL; atmp=atmp->next) if( atmp->name_def && strcmp(token, ( atmp->name_def + GAL_ARITHMETIC_SET_PREFIX_LENGTH) )==0 ) gal_checkset_allocate_copy(token, &node->name_use); /* If it wasn't found to be a pre-defined name, then its a column operand (column number or name). */ if(node->name_use==NULL) arithmetic_init_addcol(token, node, colstoread, totcalled, colinfo, numcols); } } /* Go to the next token. */ token=strtok_r(NULL, delimiter, &saveptr); } } /* Set the final index of each package of columns (possibly containing processing columns that will change in number and contents). */ void arithmetic_indexs_final(struct tableparams *p) { size_t startind; size_t i, numcols; struct column_pack *tmp; struct arithmetic_token *atmp; /* Set the column array that will allow removal of some read columns (where operations will be done). */ p->colarray=gal_list_data_to_array_ptr(p->table, &p->numcolarray); /* go over each package of columns. */ for(tmp=p->colpack;tmp!=NULL;tmp=tmp->next) { /* If we are on an arithmetic operation. */ if(tmp->arith) { for(atmp=tmp->arith;atmp!=NULL;atmp=atmp->next) if(atmp->index!=GAL_BLANK_SIZE_T) { /* Small sanity check. */ if(p->colmatch[atmp->index]!=1) error(EXIT_FAILURE, 0, "arithmetic operands can " "(currently) only correspond to a single " "column, but more than one match was found " "for a column you used in column arithmetic"); /* Update the index in the full list of read columns. */ numcols=0; for(i=0;iindex;++i) numcols+=p->colmatch[i]; atmp->index=numcols; } } /* A simple column. */ else { /* See where the starting column for this patch of simple columns is. */ startind=0; for(i=0;istart;++i) startind+=p->colmatch[i]; /* How many of the read columns are associated with the this patch of columns. */ numcols=0; for(i=0;inumsimple;++i) numcols+=p->colmatch[tmp->start+i]; /* Update the values. */ tmp->start=startind; tmp->numsimple=numcols; } } } /*********************************************************************/ /******************** Low-level tools *********************/ /*********************************************************************/ static void arithmetic_placeholder_name(gal_data_t *col) { static size_t counter=0; /* Increment counter next time this function is called. */ ++counter; /* Free any possibly existing metadata. */ if(col->name) free(col->name); if(col->unit) free(col->unit); if(col->comment) free(col->comment); /* Set the new meta-data. */ errno=0; if( asprintf(&col->name, "ARITH_%zu", counter)==-1 ) error(EXIT_FAILURE, errno, "%s: asprintf error for name", __func__); if( asprintf(&col->unit, "arith_unit_%zu", counter)==-1) error(EXIT_FAILURE, errno, "%s: asprintf error for unit", __func__); if( asprintf(&col->comment, "Column from arithmetic operation %zu", counter)==-1 ) error(EXIT_FAILURE, errno, "%s: asprintf error for comment", __func__); } static gal_data_t * arithmetic_stack_pop(gal_data_t **stack, int operator, char *errormsg) { size_t i; gal_data_t *out, *top=*stack; /* Update the stack (where necessary). */ switch(operator) { /* Operators don't need to pop the dataset from the stack (they just need the metadata). */ case GAL_ARITHMETIC_OP_INDEX: case GAL_ARITHMETIC_OP_COUNTER: out=gal_data_alloc_empty(top->ndim, top->minmapsize, top->quietmmap); for(i=0;indim;++i) out->dsize[i]=top->dsize[i]; out->size=top->size; break; /* Operators that actually need the data. */ default: out=*stack; if(*stack) *stack=(*stack)->next; else error(EXIT_FAILURE, 0, "not enough operands for '%s'%s", arithmetic_operator_name(operator), errormsg?errormsg:""); } /* Arithmetic changes the contents of a dataset, so the old name (in the FITS 'EXTNAME' keyword) or units must not be used beyond this point. Furthermore, in Arithmetic, the 'name' element is used to identify variables (with the 'set-' operator). */ if(out->name) { free(out->name); out->name=NULL; } if(out->unit) { free(out->unit); out->unit=NULL; } if(out->comment) { free(out->comment); out->comment=NULL; } /* Remove the 'next' element to break from the stack and return. */ out->next=NULL; return out; } /* Wrapper function to pop operands within the 'set-' operator. */ static gal_data_t * arithmetic_stack_pop_wrapper_set(void *in) { struct gal_arithmetic_set_params *tprm = (struct gal_arithmetic_set_params *)in; gal_data_t **stack=(gal_data_t **)tprm->params; return arithmetic_stack_pop(stack, ARITHMETIC_TABLE_OP_SET, NULL); } /* For the 'set-' operator. */ static int arithmetic_set_name_used_later(void *in, char *name) { struct gal_arithmetic_set_params *p=(struct gal_arithmetic_set_params *)in; struct arithmetic_token *tokens = (struct arithmetic_token *)(p->tokens); struct arithmetic_token *token; size_t counter=0; /* If the name exists after the current token, then return 1. Note that we have already separated the usage of names set with 'set-' in the 'name_use' element of the 'token' structure. */ for(token=tokens;token!=NULL;token=token->next) { if( token->name_use && counter > p->tokencounter && strcmp(token->name_use, name)==0 ) return 1; /* Increment the counter (has to be after the check above because it may not always get to the 'counter' variable). */ ++counter; } /* If we get to this point, it means that the name doesn't exist. */ return 0; } /* Set the converted column metadata. */ static void arithmetic_update_metadata(gal_data_t *col, char *name, char *unit, char *comment) { if(col) { if(col->name) free(col->name); if(col->unit) free(col->unit); if(col->comment) free(col->comment); gal_checkset_allocate_copy(name, &col->name); gal_checkset_allocate_copy(unit, &col->unit); gal_checkset_allocate_copy(comment, &col->comment); } } /*********************************************************************/ /******************** Operations *********************/ /*********************************************************************/ static void arithmetic_wcs(struct tableparams *p, gal_data_t **stack, int operator) { gal_data_t *tmp; char errormsg[100]; struct wcsprm *wcs=p->wcs; size_t i, ndim=p->wcs->naxis; gal_data_t *coord[3]={NULL, NULL, NULL}; /* Prepare the (possibly necessaary!) error message for the number of popped operand. */ sprintf(errormsg, " (input WCS has %zu dimensions)", ndim); /* Pop all the necessary datasets and make sure they are double-precision. NOTE: the top dataset on the stack is the highest-dimensional dataset. */ for(i=0;inext=coord[1]; if(coord[2]) coord[1]->next=coord[2]; /* Final preparations. */ if(operator==ARITHMETIC_TABLE_OP_WCSTOIMG) { /* Do the conversion. */ gal_wcs_world_to_img(coord[0], wcs, 1); /* For image coordinates, we don't need much precision. */ for(i=0;ictype[0], wcs->cunit[0], "Converted from pixel coordinates"); arithmetic_update_metadata(coord[1], coord[1]?wcs->ctype[1]:NULL, coord[1]?wcs->cunit[1]:NULL, "Converted from pixel coordinates"); arithmetic_update_metadata(coord[2], coord[2]?wcs->ctype[2]:NULL, coord[2]?wcs->cunit[2]:NULL, "Converted from pixel coordinates"); } /* Reverse the column orders and put them on the stack. */ for(i=0;inext=NULL; gal_list_data_add(stack, coord[i]); } } static void arithmetic_curved_flat(struct tableparams *p, gal_data_t **stack, int operator) { struct wcsprm *wcs=NULL; char *ctype[2], *cunit[2]; gal_data_t *w1, *w2, *proj, *refw1, *refw2; double ref[2], cdelt[2]={1.0f,1.0f}, pc[4]={-1,0,0,1}; char **strarr, ctype1[9], ctype2[9]; /* 9=8+1 (keylength + '\0') */ /* Pop the necessary datasets from the stack (order is important). */ proj=arithmetic_stack_pop(stack, operator, NULL); /* 1st: projection.*/ refw2=arithmetic_stack_pop(stack, operator, NULL);/* 2nd: Ref. Dec. */ refw1=arithmetic_stack_pop(stack, operator, NULL);/* 3rd: Ref. RA. */ w2=arithmetic_stack_pop(stack, operator, NULL); /* 4th: RA column. */ w1=arithmetic_stack_pop(stack, operator, NULL); /* 5th: Dec column. */ /* Basic sanity checks. */ strarr=proj->array; if(proj->size!=1 || refw1->size!=1 || refw2->size!=1) error(EXIT_FAILURE, 0, "the first, second and third popped operands " "from the '%s' operator should have a single element (they " "should not be columns, but a single value), but they " "respectively have %zu, %zu, %zu columns. Recall that the " "first popped operand is the right-most operand (closest to " "the operator", arithmetic_operator_name(operator), proj->size, refw1->size, refw2->size); if(proj->type!=GAL_TYPE_STRING) error(EXIT_FAILURE, 0, "the first popped operand to the '%s' " "operator must be a string, not numeric. It should be the " "three character projection identifier of the WCS standard " "in FITS (for example 'TAN' or 'MOL')", arithmetic_operator_name(operator)); if(gal_wcs_projection_name_to_id(strarr[0])==GAL_WCS_PROJECTION_INVALID) error(EXIT_FAILURE, 0, "the first popped operand to the '%s' " "operator ('%s') could not be interpretted as a pre-defined " "projection in the WCS stanadard of FITS", arithmetic_operator_name(operator), strarr[0]); /* Convert the numeric inputs into the float64 and put the reference values into the expected array.*/ refw1=gal_data_copy_to_new_type_free(refw1, GAL_TYPE_FLOAT64); refw2=gal_data_copy_to_new_type_free(refw2, GAL_TYPE_FLOAT64); w1=gal_data_copy_to_new_type_free(w1, GAL_TYPE_FLOAT64); w2=gal_data_copy_to_new_type_free(w2, GAL_TYPE_FLOAT64); ref[0]=((double *)(refw1->array))[0]; ref[1]=((double *)(refw2->array))[0]; /* Construct the CTYPEi strings */ sprintf(ctype1, "%s---%s", "RA", strarr[0]); sprintf(ctype2, "%s--%s", "DEC", strarr[0]); ctype[0]=ctype1; ctype[1]=ctype2; cunit[0]="deg"; cunit[1]="deg"; /* Build the WCS structure for the conversion. */ wcs=gal_wcs_create(ref, ref, cdelt, pc, cunit, ctype, 2, GAL_WCS_LINEAR_MATRIX_PC); /* For a check: int nkeyrec; char *wcsstr; wcsstr=gal_wcs_write_wcsstr(wcs, &nkeyrec); printf("%s\n", wcsstr); exit(0); */ /* Put the second world coordinate as the next token of the first, and do the conversion. */ w1->next=w2; switch(operator) { case ARITHMETIC_TABLE_OP_EQJ2000TOFLAT: gal_wcs_world_to_img(w1, wcs, 1); break; case ARITHMETIC_TABLE_OP_EQJ2000FROMFLAT: gal_wcs_img_to_world(w1, wcs, 1); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. The integer '%d' is not a recognized " "operator identifier", __func__, PACKAGE_BUGREPORT, operator); } /* Put the output datasets in the stack in reverse order. */ w1->next=w2->next=NULL; gal_list_data_add(stack, w1); gal_list_data_add(stack, w2); /* Clean up (the coordinate conversion was done in place, so 'w1' and 'w2' are the output datasets). */ gal_wcs_free(wcs); gal_data_free(proj); gal_data_free(refw1); gal_data_free(refw2); } static double arithmetic_distance_flat(double a1, double a2, double b1, double b2) { double d1=a1-b1, d2=a2-b2; return sqrt(d1*d1 + d2*d2); } static void arithmetic_distance(struct tableparams *p, gal_data_t **stack, int operator) { size_t i, j; double *o, *a1, *a2, *b1, *b2; gal_data_t *a, *b, *tmp, *out; char *colname=NULL, *colcomment=NULL; double (*distance_func)(double, double, double, double)=NULL; /* Pop the columns for point 'b'.*/ tmp=arithmetic_stack_pop(stack, operator, NULL); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT64); b=arithmetic_stack_pop(stack, operator, NULL); b=gal_data_copy_to_new_type_free(b, GAL_TYPE_FLOAT64); b->next=tmp; /* Pop the columns for point 'a'.*/ tmp=arithmetic_stack_pop(stack, operator, NULL); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT64); a=arithmetic_stack_pop(stack, operator, NULL); a=gal_data_copy_to_new_type_free(a, GAL_TYPE_FLOAT64); a->next=tmp; /* Make sure the sizes are consistant: note that one point can have a single coordinate, but we don't know which one. */ if(a->size!=a->next->size) error(EXIT_FAILURE, 0, "the sizes of the third and fourth operands " "of the '%s' operator (respectively containing %zu and %zu " "numbers) must be equal", arithmetic_operator_name(operator), a->next->size, a->size); if(b->size!=b->next->size) error(EXIT_FAILURE, 0, "the sizes of the first and second operands " "of the '%s' operator (respectively containing %zu and %zu " "numbers) must be equal", arithmetic_operator_name(operator), b->next->size, b->size); /* Basic settings based on the operator. */ switch(operator) { case ARITHMETIC_TABLE_OP_DISTANCEFLAT: colname="dist-flat"; distance_func=arithmetic_distance_flat; colcomment="Distance measured on a flat surface."; break; case ARITHMETIC_TABLE_OP_DISTANCEONSPHERE: colname="dist-spherical"; distance_func=gal_wcs_angular_distance_deg; colcomment="Distance measured on a great circle."; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The operator code %d isn't recognized", __func__, PACKAGE_BUGREPORT, operator); } /* Make the output array based on the largest size. */ out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, (a->size>b->size ? &a->size : &b->size), NULL, 0, p->cp.minmapsize, p->cp.quietmmap, colname, NULL, colcomment); /* Measure the distances (if the dataset isn't empty: it can be!). */ if(out->size>0 && out->array) { o=out->array; a1=a->array; a2=a->next->array; b1=b->array; b2=b->next->array; if(a->size==1 || b->size==1) /* One of them is a single point. */ for(i=0;isize;++i) for(j=0;jsize;++j) o[a->size>b->size?i:j] = distance_func(a1[i], a2[i], b1[j], b2[j]); else /* Both have the same length. */ for(i=0;isize;++i) /* (all were originally from same table) */ o[i] = distance_func(a1[i], a2[i], b1[i], b2[i]); } /* Clean up and put the output dataset onto the stack. */ gal_list_data_free(a); gal_list_data_free(b); gal_list_data_add(stack, out); } /* Convert the ISO date format to seconds since Unix time. */ static void arithmetic_datetosec(struct tableparams *p, gal_data_t **stack, int operator) { size_t i, v; int64_t *iarr; gal_data_t *out; double subsec=NAN; char *subsecstr=NULL; char *unit=NULL, *name=NULL, *comment=NULL; /* Input dataset. */ gal_data_t *in=arithmetic_stack_pop(stack, operator, NULL); char **strarr=in->array; /* Make sure the input has a 'string' type. */ if(in->type!=GAL_TYPE_STRING) error(EXIT_FAILURE, 0, "the operand given to 'date-to-sec' " "should have a string type, but it is '%s'", gal_type_name(in->type, 1)); /* Output metadata. */ switch(operator) { case ARITHMETIC_TABLE_OP_DATETOSEC: unit="sec"; name="UNIXSEC"; comment="Unix seconds (from 00:00:00 UTC, 1 January 1970)"; break; case ARITHMETIC_TABLE_OP_DATETOMILLISEC: unit="msec"; name="UNIXMILLISEC"; comment="Unix milli-seconds (from 00:00:00 UTC, 1 January 1970)"; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "to fix the problem. The operator code %d isn't " "recognized", __func__, PACKAGE_BUGREPORT, operator); } /* Allocate the output dataset. */ out=gal_data_alloc(NULL, GAL_TYPE_INT64, 1, &in->size, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, name, unit, comment); /* Convert each input string into number of seconds. Note that it is possible to have an empty dataset, in that case, we shouldn't do anything.*/ if(out->size>0 && out->array) { iarr=out->array; for(i=0; isize; ++i) { /* Read the number of seconds and sub-seconds and write into the output. */ v=gal_fits_key_date_to_seconds(strarr[i], &subsecstr, &subsec); iarr[i] = ( v==GAL_BLANK_SIZE_T ? GAL_BLANK_INT64 : ( operator == ARITHMETIC_TABLE_OP_DATETOSEC ? v : (isnan(subsec) ? v*1000 : v*1000 + (int64_t)(subsec*1000) ) ) ); } } /* Clean up and put the resulting calculation back on the stack. */ if(in) gal_data_free(in); gal_list_data_add(stack, out); } /* Convert the ISO date format to seconds since Unix time. */ static void arithmetic_sortedtointerval(struct tableparams *p, gal_data_t **stack, int operator) { int f32out; size_t i, size; double *in, *min, *max; gal_data_t *min_d, *max_d; /* Input dataset. */ gal_data_t *in_d=arithmetic_stack_pop(stack, operator, NULL); /* Make sure the input is sorted and is numeric */ if(in_d->type==GAL_TYPE_STRING) error(EXIT_FAILURE, 0, "the operand given to 'sortedtointerval' " "should have a numeric data type"); if(gal_statistics_is_sorted(in_d, 1)==0) error(EXIT_FAILURE, 0, "the operand given to 'sortedtointerval' " "should be sorted"); /* Convert the input to double precision for internal processing. In the end we'll convert the outputs to float32 unless the input was originally float64. */ f32out = in_d->type!=GAL_TYPE_FLOAT64; in_d=gal_data_copy_to_new_type_free(in_d, GAL_TYPE_FLOAT64); /* Allocate the output columns (minimum and maximum of each interval). */ min_d=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, in_d->dsize, NULL, 0, in_d->minmapsize, in_d->quietmmap, NULL, NULL, NULL); max_d=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, in_d->dsize, NULL, 0, in_d->minmapsize, in_d->quietmmap, NULL, NULL, NULL); /* Fill the minimum and maximum intervals. Just note that the minimum value of the first interval and maximum of the last element need special attention (we'll extrapolate from the after/before elements to preserve constant spacing in case that is the case). */ in=in_d->array; size=in_d->size; min=min_d->array; max=max_d->array; min[0] = in[0] - (in[1] - in[0] )/2; max[0] = in[0] + (in[1] - in[0] )/2; min[size-1] = in[size-1] - (in[size-1] - in[size-2])/2; max[size-1] = in[size-1] + (in[size-1] - in[size-2])/2; for(i=1;inext=min_d; gal_data_free(in_d); gal_list_data_add(stack, max_d); } /*********************************************************************/ /******************** Operations *********************/ /*********************************************************************/ static void arithmetic_operator_run(struct tableparams *p, struct arithmetic_token *token, struct gal_arithmetic_set_params *setprm, gal_data_t **stack) { int flags=GAL_ARITHMETIC_FLAGS_BASIC; gal_data_t *d1=NULL, *d2=NULL, *d3=NULL, *d4=NULL, *d5=NULL; /* Set the operating-mode flags if necessary. */ if(p->cp.quiet) flags |= GAL_ARITHMETIC_FLAG_QUIET; if(p->envseed) flags |= GAL_ARITHMETIC_FLAG_ENVSEED; /* If this operator is in the library, we should pop everything here. */ if(token->inlib) { /* Pop the necessary number of operators. Note that the operators are poped from a linked list (which is last-in-first-out). So for the operators which need a specific order, the first poped operand is actally the last (right most, in in-fix notation) input operand.*/ switch(token->num_operands) { case 0: break; case 1: d1=arithmetic_stack_pop(stack, token->operator, NULL); break; case 2: d2=arithmetic_stack_pop(stack, token->operator, NULL); d1=arithmetic_stack_pop(stack, token->operator, NULL); break; case 3: d3=arithmetic_stack_pop(stack, token->operator, NULL); d2=arithmetic_stack_pop(stack, token->operator, NULL); d1=arithmetic_stack_pop(stack, token->operator, NULL); break; case 4: d4=arithmetic_stack_pop(stack, token->operator, NULL); d3=arithmetic_stack_pop(stack, token->operator, NULL); d2=arithmetic_stack_pop(stack, token->operator, NULL); d1=arithmetic_stack_pop(stack, token->operator, NULL); break; case 5: d5=arithmetic_stack_pop(stack, token->operator, NULL); d4=arithmetic_stack_pop(stack, token->operator, NULL); d3=arithmetic_stack_pop(stack, token->operator, NULL); d2=arithmetic_stack_pop(stack, token->operator, NULL); d1=arithmetic_stack_pop(stack, token->operator, NULL); break; case -1: error(EXIT_FAILURE, 0, "operators with a variable number of " "operands are not yet implemented. Please contact us at " "%s to include them", PACKAGE_BUGREPORT); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "to fix the problem. '%zu' is not recognized as an " "operand counter (with '%s')", __func__, PACKAGE_BUGREPORT, token->num_operands, arithmetic_operator_name(token->operator)); } /* Run the arithmetic operation. Note that 'gal_arithmetic' is a variable argument function (like printf). So the number of arguments it uses depend on the operator. In other words, when the operator doesn't need three operands, the extra arguments will be ignored. */ gal_list_data_add(stack, gal_arithmetic(token->operator, p->cp.numthreads, flags, d1, d2, d3, d4, d5) ); /* Reset the meta-data for the element that was just put on the stack. */ arithmetic_placeholder_name(*stack); } /* This operator is specific to this program (Table). */ else { switch(token->operator) { case ARITHMETIC_TABLE_OP_WCSTOIMG: case ARITHMETIC_TABLE_OP_IMGTOWCS: arithmetic_wcs(p, stack, token->operator); break; case ARITHMETIC_TABLE_OP_EQJ2000TOFLAT: case ARITHMETIC_TABLE_OP_EQJ2000FROMFLAT: arithmetic_curved_flat(p, stack, token->operator); break; case ARITHMETIC_TABLE_OP_DATETOSEC: case ARITHMETIC_TABLE_OP_DATETOMILLISEC: arithmetic_datetosec(p, stack, token->operator); break; case ARITHMETIC_TABLE_OP_DISTANCEFLAT: case ARITHMETIC_TABLE_OP_DISTANCEONSPHERE: arithmetic_distance(p, stack, token->operator); break; case ARITHMETIC_TABLE_OP_SORTEDTOINTERVAL: arithmetic_sortedtointerval(p, stack, token->operator); break; case ARITHMETIC_TABLE_OP_SET: gal_arithmetic_set_name(setprm, token->name_def); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The operator code %d is not recognized", __func__, PACKAGE_BUGREPORT, token->operator); } } } /* When the column identifier (name or number) wasn't in the main input table (for example, it was added with '--catcolumnfile'), we need this function to find the column to work with. */ gal_data_t * arithmetic_read_at_usage(struct tableparams *p, struct arithmetic_token *token) { uint8_t pid; size_t i, one=1; gal_data_t *tmp; int hasnewline=0; char *c, **strarr; /* If the number is blank, then we have a name and should return the first column in the table that has the given name. */ if(token->num_at_usage==GAL_BLANK_SIZE_T) { /* Search all the existing columns in the table. */ for(i=0; inumcolarray; ++i) if( p->colarray[i]->name && strcasecmp(p->colarray[i]->name, token->id_at_usage)==0 ) return p->colarray[i]; /* If control reaches here, then the requested name didn't exist in the table, if the next token is the equatorial on flat operator, then we should also check known projection identifiers. */ if( token->next && ( token->next->operator==ARITHMETIC_TABLE_OP_EQJ2000TOFLAT || token->next->operator==ARITHMETIC_TABLE_OP_EQJ2000FROMFLAT) ) { /* If the projection is recognized, add it to the stack otherwise, just let the default error finish the program. */ pid=gal_wcs_projection_name_to_id(token->id_at_usage); if(pid!=GAL_WCS_PROJECTION_INVALID) { tmp=gal_data_alloc(NULL, GAL_TYPE_STRING, 1, &one, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); strarr=tmp->array; gal_checkset_allocate_copy(token->id_at_usage, &strarr[0]); return tmp; } } /* If control reaches here, then the requested name didn't exist in the table. This may happen because the user broke an arithmetic command into muliple lines and forgot to put a back-slash. If so, the string will have a new-line within it.*/ for(c=token->id_at_usage;*c!='\0';++c) if(*c=='\n') hasnewline=1; /* print the error message. */ error(EXIT_FAILURE, 0, "'%s' doesn't correspond to the name of " "any column in the table until this column arithmetic%s", token->id_at_usage, hasnewline?". Because there is a " "new-line in the name, it is highly probable that it " "wasn't actually a name. This can happen when you break " "an arithmetic command into multiple lines, but have " "forgot to put a back-slash ('\\') at the end of a " "broken line":""); } /* We already have the desired column number. */ else if(token->num_at_usage > p->numcolarray) error(EXIT_FAILURE, 0, "%zu is an invalid column number: the " "table only has %zu columns before this column arithmetic " "step", token->num_at_usage, p->numcolarray); else return p->colarray[token->num_at_usage-1]; /* If control reaches here, there is a bug! In then end, simply return NULL to avoid compiler warnings. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to find the " "cause and fix it. This function should not reach this point", __func__, PACKAGE_BUGREPORT); return NULL; } /* Apply reverse polish mechanism for this column. */ static void arithmetic_reverse_polish(struct tableparams *p, struct column_pack *outpack) { struct arithmetic_token *token; gal_data_t *single, *stack=NULL; struct gal_arithmetic_set_params setprm={0}; /* Initialize the arithmetic functions/pointers. */ setprm.params=&stack; setprm.tokens=outpack->arith; setprm.pop=arithmetic_stack_pop_wrapper_set; setprm.used_later=arithmetic_set_name_used_later; /* Go through all the tokens given to this element. */ for(token=outpack->arith;token!=NULL;token=token->next) { /* We are on an operator. */ if(token->operator!=GAL_ARITHMETIC_OP_INVALID) arithmetic_operator_run(p, token, &setprm, &stack); /* We are on a named variable. */ else if( token->name_use ) gal_list_data_add(&stack, gal_arithmetic_set_copy_named(&setprm, token->name_use)); /* We are on a column loaded from another file. */ else if( token->loadcol ) { gal_list_data_add(&stack, token->loadcol); token->loadcol=NULL; } /* Constant number: just put it on top of the stack. */ else if(token->constant) { gal_list_data_add(&stack, token->constant); token->constant=NULL; } /* The column wasn't in the main input. */ else if(token->id_at_usage) { gal_list_data_add(&stack, arithmetic_read_at_usage(p, token)); token->num_at_usage=GAL_BLANK_SIZE_T; free(token->id_at_usage); token->id_at_usage=NULL; } /* A column from the table. */ else if(token->index!=GAL_BLANK_SIZE_T) { if(p->colarray[token->index]->ndim!=1) error(EXIT_FAILURE, 0, "column arithmetic currently only works " "on single-valued columns, not vector columns"); gal_list_data_add(&stack, p->colarray[token->index]); } /* Un-recognized situation. */ else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The token can't be identified as an " "operator, constant or column", __func__, PACKAGE_BUGREPORT); /* Increment the token counter. */ ++setprm.tokencounter; } /* Put everything that remains in the stack (reversed) into the final table. Just note that 'gal_list_data_add' behaves differently for lists, so we'll add have to manually set the 'next' element to NULL before adding the column to the final table. */ gal_list_data_reverse(&stack); while(stack!=NULL) { /* Keep the top element in 'single' and move 'stack' to the next element. */ single=stack; stack=stack->next; /* A small sanity check. */ if(single->size==1 && p->table && single->size!=p->table->size) error(EXIT_FAILURE, 0, "the arithmetic operation resulted in a " "single value, but other columns have also been requested " "which have more elements/rows"); /* Set 'single->next' to NULL so it isn't treated as a list, and set all flags to zero (the arithmetic operation may have changed what the flags pointed to). */ single->flag=0; single->next=NULL; gal_list_data_add(&p->table, single); } } /*********************************************************************/ /******************** High-level *********************/ /*********************************************************************/ void arithmetic_operate(struct tableparams *p) { size_t i; struct column_pack *outpack; /* Set the final indexs and define 'colarray'. */ arithmetic_indexs_final(p); /* From now on, we will be looking for columns from the index in 'colarray', so to keep things clean, we'll set all the 'next' elements to NULL. */ for(i=0; inumcolarray; ++i) p->colarray[i]->next=NULL; /* We'll also reset the output table pointer, to fill it in as we progress. */ p->table=NULL; /* Go over each package of columns. */ for(outpack=p->colpack; outpack!=NULL; outpack=outpack->next) { if(outpack->arith) arithmetic_reverse_polish(p, outpack); else { for(i=0;inumsimple;++i) gal_list_data_add(&p->table, p->colarray[outpack->start+i]); } } /* Reverse the final output to be in the proper order. Note that all the column contents have either been moved into the new table, or have already been freed. */ gal_list_data_reverse(&p->table); /* Clean up. */ ui_colpack_free(p->colpack); if(p->colarray) free(p->colarray); p->colarray=NULL; p->colpack=NULL; } gnuastro-0.22/bin/table/table.c0000644000175000017500000015361514551337306012074 /********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "arithmetic.h" /**************************************************************/ /******** Selecting and ordering of columns **********/ /**************************************************************/ static void table_error_no_column(char *optionname, char *id) { error(EXIT_FAILURE, 0, "no column could be found with the '%s' " "identifier (given to '%s'). The value to this option can " "either be a column name or counter (counting from 1). For " "more on how to select columns in Gnuastro, please run the " "command below (press 'q' to come back to the command-line):\n\n" " info gnuastro \"selecting table columns\"\n", id, optionname); } static void table_apply_permutation(gal_data_t *table, size_t *permutation, size_t permsize, int inverse) { gal_data_t *tmp; for(tmp=table;tmp!=NULL;tmp=tmp->next) { /* Apply the permutation. */ if(inverse) { if(tmp->ndim==1) gal_permutation_apply_inverse(tmp, permutation); else error(EXIT_FAILURE, 0, "%s: inverse permutation on " "vector columns is not yet supported. Please " "get in touch with us at '%s' to add this " "feature", __func__, PACKAGE_BUGREPORT); } else { if(tmp->ndim==1) gal_permutation_apply(tmp, permutation); else gal_permutation_apply_onlydim0(tmp, permutation); } /* Correct the size. */ tmp->dsize[0]=permsize; tmp->size = tmp->dsize[0] * (tmp->ndim==1 ? 1 : tmp->dsize[1]); } } static void table_bring_to_top(gal_data_t *table, gal_data_t *rowids) { char **strarr; gal_data_t *col; size_t i, n, *ids=rowids->array; /* Make sure the rowids are sorted by increasing index. gal_statistics_sort_increasing(rowids); */ /* Go over each column and move the desired rows to the top. */ for(col=table;col!=NULL;col=col->next) { /* For easy operation if the column is a string or vector. */ strarr = col->type==GAL_TYPE_STRING ? col->array : NULL; n = col->ndim==1 ? 1 : col->dsize[1]; /* Move the desired rows up to the top. */ for(i=0;isize;++i) if( i != ids[i] ) { /* Copy the contents. For strings, its just about freeing and copying pointers. */ if(col->type==GAL_TYPE_STRING) { free(strarr[i]); strarr[i]=strarr[ ids[i] ]; strarr[ ids[i] ]=NULL; } else { memcpy(gal_pointer_increment(col->array, i*n, col->type), gal_pointer_increment(col->array, ids[i]*n,col->type), n * gal_type_sizeof(col->type)); } } /* For string arrays, free the pointers of the remaining rows. */ if(col->type==GAL_TYPE_STRING) for(i=rowids->size;isize;++i) if(strarr[i]) free(strarr[i]); /* Correct the size (this should be after freeing of the string pointers. */ col->dsize[0] = rowids->size; col->size = col->dsize[0] * n; /* If there is no elements, free 'array' and set it to NULL. */ if(col->size==0 && col->array) { free(col->array); col->array=NULL; } } } static gal_data_t * table_selection_range(struct tableparams *p, gal_data_t *col) { size_t one=1; double *darr; int numok=GAL_ARITHMETIC_FLAG_NUMOK; int inplace=GAL_ARITHMETIC_FLAG_INPLACE; gal_data_t *min=NULL, *max=NULL, *tmp, *ltmin, *gemax=NULL; /* First, make sure everything is OK. */ if(p->range==NULL) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us to fix the " "problem at %s. 'p->range' should not be NULL at this point", __func__, PACKAGE_BUGREPORT); /* Allocations. */ min=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); max=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); /* Read the range of values for this column. */ darr=p->range->array; ((double *)(min->array))[0] = darr[0]; ((double *)(max->array))[0] = darr[1]; /* Move 'p->range' to the next element in the list and free the current one (we have already read its values and don't need it any more). */ tmp=p->range; p->range=p->range->next; gal_data_free(tmp); /* Find all the elements outside this range (smaller than the minimum, larger than the maximum or blank) as separate binary flags. */ ltmin=gal_arithmetic(GAL_ARITHMETIC_OP_LT, 1, numok, col, min); gemax=gal_arithmetic(GAL_ARITHMETIC_OP_GE, 1, numok, col, max); /* Merge them both into one array. */ ltmin=gal_arithmetic(GAL_ARITHMETIC_OP_OR, 1, inplace, ltmin, gemax); /* For a check. { size_t i; uint8_t *u=ltmin->array; for(i=0;isize;++i) printf("%zu: %u\n", i, u[i]); exit(0); } */ /* Clean up and return. */ gal_data_free(gemax); gal_data_free(min); gal_data_free(max); return ltmin; } /* Read column value of any type as a double for the polygon options. */ static double selection_polygon_read_point(gal_data_t *col, size_t i) { /* Check and assign the points to the points array. */ switch(col->type) { case GAL_TYPE_INT8: return (( int8_t *)col->array)[i]; case GAL_TYPE_UINT8: return (( uint8_t *)col->array)[i]; case GAL_TYPE_UINT16: return (( uint16_t *)col->array)[i]; case GAL_TYPE_INT16: return (( int16_t *)col->array)[i]; case GAL_TYPE_UINT32: return (( uint32_t *)col->array)[i]; case GAL_TYPE_INT32: return (( int32_t *)col->array)[i]; case GAL_TYPE_UINT64: return (( uint64_t *)col->array)[i]; case GAL_TYPE_INT64: return (( int64_t *)col->array)[i]; case GAL_TYPE_FLOAT32: return (( float *)col->array)[i]; case GAL_TYPE_FLOAT64: return (( double *)col->array)[i]; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, col->type); } /* Control should not reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); return NAN; } /* Mask the rows that are not in the given polygon. */ static gal_data_t * table_selection_polygon(struct tableparams *p, gal_data_t *col1, gal_data_t *col2, int in1out0) { uint8_t *oarr; double point[2]; gal_data_t *out=NULL; size_t i, psize=p->polygon->size/2; /* Allocate the output array: This array will have a '0' for the points which are inside the polygon and '1' for those that are outside of it (to be masked/removed from the input). */ out=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, col1->dsize, NULL, 0, -1, 1, NULL, NULL, NULL); oarr=out->array; /* Loop through all the rows in the given columns and check the points. */ for(i=0; isize; i++) { /* Read the column values as a double. */ point[0]=selection_polygon_read_point(col1, i); point[1]=selection_polygon_read_point(col2, i); /* For '--inpolygon', if point is inside polygon, put 0, otherwise 1. Note that we are building a mask for the rows that must be discarded, so we want '1' for the points we don't want. */ oarr[i] = (in1out0 ? !gal_polygon_is_inside(p->polygon->array, point, psize) : gal_polygon_is_inside(p->polygon->array, point, psize)); /* For a check printf("(%f,%f): %s, %u\n", point[0], point[1], oarr[i]); */ } /* Return the output column. */ return out; } /* Given a string dataset and a single string, return a 'uint8_t' array with the same size as the string dataset that has a '1' for all the elements that are equal. */ static gal_data_t * table_selection_string_eq_ne(gal_data_t *column, char *reference, int e0n1) { gal_data_t *out; uint8_t *oarr, comp; size_t i, size=column->size; char **strarr=column->array; /* Allocate the output binary dataset. */ out=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &size, NULL, 0, -1, 1, NULL, NULL, NULL); oarr=out->array; /* Parse the values and mark the outputs IN THE OPPOSITE manner (we are marking the ones that must be removed). */ for(i=0;inotequal : p->equal; /* Note that this operator is used to make the "masked" array, so when 'e0n1==0' the operator should be 'GAL_ARITHMETIC_OP_NE' and vice-versa. For the merging with other elements, when 'e0n1==0', we need the 'GAL_ARITHMETIC_OP_AND', but for 'e0n1==1', it should be 'OR'. */ int mergeop = e0n1 ? GAL_ARITHMETIC_OP_OR : GAL_ARITHMETIC_OP_AND; int operator = e0n1 ? GAL_ARITHMETIC_OP_EQ : GAL_ARITHMETIC_OP_NE; /* First, make sure everything is OK. */ if(arg==NULL) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us to fix the " "problem at %s. 'p->range' should not be NULL at this point", __func__, PACKAGE_BUGREPORT); /* To easily parse the given values. */ strarr=arg->array; /* Go through the values given to this call of the option and flag the elements. */ for(i=0;isize;++i) { /* Write the value. */ if(col->type==GAL_TYPE_STRING) eq=table_selection_string_eq_ne(col, strarr[i], e0n1); else { /* Allocate the value dataset. */ value=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); varr=value->array; /* Read the stored string as a float64. */ if( gal_type_from_string(&varr, strarr[i], GAL_TYPE_FLOAT64) ) { fprintf(stderr, "%s couldn't be read as a number.\n", strarr[i]); exit(EXIT_FAILURE); } /* Mark the rows that are equal (irrespective of the column's original numerical datatype). */ eq=gal_arithmetic(operator, 1, numok, col, value); } /* Merge the results with (possible) previous results. */ if(out) { out=gal_arithmetic(mergeop, 1, inplace, out, eq); gal_data_free(eq); } else out=eq; } /* For a check. { uint8_t *u=out->array; for(i=0;isize;++i) printf("%zu: %u\n", i, u[i]); exit(0); } */ /* Move the main pointer to the next possible call of the given option. Note that 'arg' already points to 'p->equal' or 'p->notequal', so it will automatically be freed with the next step. */ if(e0n1) p->notequal=p->notequal->next; else p->equal=p->equal->next; /* Clean up and return. */ gal_data_free(value); gal_data_free(arg); return out; } static void table_select_by_value(struct tableparams *p) { gal_data_t *rowids; size_t i, *s, ngood=0; struct list_select *tmp; uint8_t *u, *uf, *ustart; int inplace=GAL_ARITHMETIC_FLAG_INPLACE; gal_data_t *mask, *col, *blmask, *addmask=NULL; /* It may happen that the input table is empty! In such cases, just return and don't bother with this step. */ if(p->table->size==0 || p->table->array==NULL || p->table->dsize==NULL) return; /* Allocate datasets for the necessary numbers and write them in. */ mask=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &p->table->dsize[0], NULL, 1, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Go over each selection criteria and remove the necessary elements. */ for(tmp=p->selectcol;tmp!=NULL;tmp=tmp->next) { /* Make sure the selection column isn't a vector column. */ if(tmp->col->ndim!=1) error(EXIT_FAILURE, 0, "row selection by value (for example with " "'--range', '--inpolygon', '--equal' or '--noblank') is " "currently not available for vector columns. If you need " "this feature, please get in touch with us at '%s' to add " "it", PACKAGE_BUGREPORT); /* Make sure all the to-be-used table columns at this point have the same number of rows as the selection column (can be different when transposing). */ for(col=p->table;col!=NULL;col=col->next) if(tmp->col->dsize[0]!=col->dsize[0]) error(EXIT_FAILURE, 0, "the number of rows in the column given " "for selection by value (for example '--range' or '--equal') " "is not the same as the number of rows in the table when " "they are applied. This may happen due to operators like " "'--transpose'. In such cases, you probably want row-based " "operators to have precedence over column-based operators. " "If this is your case, please call '--rowfirst'"); /* Do the specific type of selection. */ switch(tmp->type) { case SELECT_TYPE_RANGE: addmask=table_selection_range(p, tmp->col); break; /* '--inpolygon' and '--outpolygon' need two columns. */ case SELECT_TYPE_INPOLYGON: case SELECT_TYPE_OUTPOLYGON: addmask=table_selection_polygon(p, tmp->col, tmp->next->col, tmp->type==SELECT_TYPE_INPOLYGON); tmp=tmp->next; break; case SELECT_TYPE_EQUAL: addmask=table_selection_equal_or_notequal(p, tmp->col, 0); break; case SELECT_TYPE_NOTEQUAL: addmask=table_selection_equal_or_notequal(p, tmp->col, 1); break; case SELECT_TYPE_NOBLANK: addmask = gal_arithmetic(GAL_ARITHMETIC_OP_ISBLANK, 1, 0, tmp->col); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "to fix the problem. The code %d is not a recognized " "range identifier", __func__, PACKAGE_BUGREPORT, tmp->type); } /* Remove any blank elements (incase we are on a noblank column. */ if(tmp->type!=SELECT_TYPE_NOBLANK && gal_blank_present(tmp->col, 1)) { blmask = gal_arithmetic(GAL_ARITHMETIC_OP_ISBLANK, 1, 0, tmp->col); addmask=gal_arithmetic(GAL_ARITHMETIC_OP_OR, 1, inplace, addmask, blmask); gal_data_free(blmask); } /* Add this mask array to the cumulative mask array (of all selections). */ mask=gal_arithmetic(GAL_ARITHMETIC_OP_OR, 1, inplace, mask, addmask); /* For a check. { float *f=ref->array; uint8_t *m=mask->array; uint8_t *u=addmask->array, *uf=u+addmask->size; printf("\n\nInput column: %s\n", ref->name?ref->name:"No Name"); printf("Range: %g, %g\n", rarr[0], rarr[1]); printf("%-20s%-20s%-20s\n", "Value", "This mask", "Including previous"); do printf("%-20f%-20u%-20u\n", *f++, *u++, *m++); while(uarray)+mask->size; ngood=0; do if(*u==0) ++ngood; while(++ucp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Fill-in the finally desired row-IDs. */ s=rowids->array; ustart=mask->array; uf=(u=mask->array)+mask->size; do if(*u==0) *s++ = u-ustart; while(++utable, rowids); /* If the sort column is not in the table (the proper range has already been applied to it), and we need to sort the resulting columns afterwards, we should also apply the permutation on the sort column. */ if(p->sortcol && p->sortin==0) table_bring_to_top(p->sortcol, rowids); /* Clean up. */ i=0; for(tmp=p->selectcol;tmp!=NULL;tmp=tmp->next) { if(p->freeselect[i]) {gal_data_free(tmp->col); tmp->col=NULL;} ++i; } ui_list_select_free(p->selectcol, 0); free(p->freeselect); gal_data_free(mask); gal_data_free(rowids); } static void table_sort(struct tableparams *p) { gal_data_t *perm; size_t c=0, *s, *sf, dsize0=p->table->dsize[0]; int (*qsortfn)(const void *, const void *)=NULL; /* In case there are no columns to sort, skip this function. */ if(p->table->size==0 || p->table->array==NULL || p->table->dsize==NULL) return; /* Allocate the permutation array and fill it. Note that we need 'dsize0' because the first column may be a vector column (which is 2D). */ perm=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, &dsize0, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); sf=(s=perm->array)+perm->size; do *s=c++; while(++ssortcol->type==GAL_TYPE_STRING) error(EXIT_FAILURE, 0, "sort column has a string type, but it can " "(currently) only work on numbers.\n\n" "TIP: if you know the columns contents are all numbers that are " "just stored as strings, you can use this program to save the " "table as a text file, modify the column meta-data (for example " "to type 'i32' or 'f32' instead of 'strN'), then use this " "program again to save it as a FITS table.\n\n" "For more on column metadata in plain text format, please run " "the following command (or see the 'Gnuastro text table format " "section of the book/manual):\n\n" " $ info gnuastro \"gnuastro text table format\""); /* Set the proper qsort function. */ if(p->descending) switch(p->sortcol->type) { case GAL_TYPE_UINT8: qsortfn=gal_qsort_index_single_uint8_d; break; case GAL_TYPE_INT8: qsortfn=gal_qsort_index_single_int8_d; break; case GAL_TYPE_UINT16: qsortfn=gal_qsort_index_single_uint16_d; break; case GAL_TYPE_INT16: qsortfn=gal_qsort_index_single_int16_d; break; case GAL_TYPE_UINT32: qsortfn=gal_qsort_index_single_uint32_d; break; case GAL_TYPE_INT32: qsortfn=gal_qsort_index_single_int32_d; break; case GAL_TYPE_UINT64: qsortfn=gal_qsort_index_single_uint64_d; break; case GAL_TYPE_INT64: qsortfn=gal_qsort_index_single_int64_d; break; case GAL_TYPE_FLOAT32: qsortfn=gal_qsort_index_single_float32_d; break; case GAL_TYPE_FLOAT64: qsortfn=gal_qsort_index_single_float64_d; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The code '%u' wasn't recognized as a data type", __func__, PACKAGE_BUGREPORT, p->sortcol->type); } else switch(p->sortcol->type) { case GAL_TYPE_UINT8: qsortfn=gal_qsort_index_single_uint8_i; break; case GAL_TYPE_INT8: qsortfn=gal_qsort_index_single_int8_i; break; case GAL_TYPE_UINT16: qsortfn=gal_qsort_index_single_uint16_i; break; case GAL_TYPE_INT16: qsortfn=gal_qsort_index_single_int16_i; break; case GAL_TYPE_UINT32: qsortfn=gal_qsort_index_single_uint32_i; break; case GAL_TYPE_INT32: qsortfn=gal_qsort_index_single_int32_i; break; case GAL_TYPE_UINT64: qsortfn=gal_qsort_index_single_uint64_i; break; case GAL_TYPE_INT64: qsortfn=gal_qsort_index_single_int64_i; break; case GAL_TYPE_FLOAT32: qsortfn=gal_qsort_index_single_float32_i; break; case GAL_TYPE_FLOAT64: qsortfn=gal_qsort_index_single_float64_i; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The code '%u' wasn't recognized as a data type", __func__, PACKAGE_BUGREPORT, p->sortcol->type); } /* Sort the indexs from the values. */ gal_qsort_index_single=p->sortcol->array; qsort(perm->array, perm->size, sizeof *s, qsortfn); /* For a check (only on float32 type 'sortcol'): { float *f=p->sortcol->array; sf=(s=perm->array)+perm->size; do printf("%f\n", f[*s]); while(++stable, perm->array, perm->size, 0); /* Clean up. */ gal_data_free(perm); if(p->freesort) gal_data_free(p->sortcol); } /* Apply random row selection. If the returned value is 'EXIT_SUCCESS', then, it was successful. Otherwise, it will return 'EXIT_FAILURE' and the input won't be touched. */ static int table_random_rows(gal_data_t *table, gsl_rng *rng, size_t numrandom, size_t minmapsize, int quietmmap) { int bad; gal_data_t *rowids; size_t i, j, *ids, ind; /* Sanity check. */ if(numrandom>table->size) return EXIT_FAILURE; /* Allocate space for the list of rows to use. */ rowids=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, &numrandom, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); /* Select the row numbers. */ ids=rowids->array; for(i=0;isize; for(j=0;jrowrange ? p->rowrange->array : NULL; /* If the table is already empty, then don't bother continuing. */ if(p->table->size==0 || p->table->array==NULL || p->table->dsize==NULL) return; /* If the head or tail values are given and are larger than the number of rows, just set them to the number of rows (print the all the final rows). This is how the 'head' and 'tail' programs of GNU Coreutils operate. Note that some columns may be vector (multi-value per column), in this case, they will be 2D. So we should use 'dsize[0]' for the generic way to find the number of rows. */ p->head = ( ( (p->head!=GAL_BLANK_SIZE_T) && (p->head > p->table->dsize[0]) ) ? p->table->dsize[0] : p->head ); p->tail = ( ( (p->tail!=GAL_BLANK_SIZE_T) && (p->tail > p->table->dsize[0]) ) ? p->table->dsize[0] : p->tail ); /* Random row selection (by position, not value). This step is independent of the other operations of this function, so as soon as its finished return. */ if(p->rowrandom) { if( table_random_rows(p->table, p->rng, p->rowrandom, p->cp.minmapsize, p->cp.quietmmap) == EXIT_FAILURE && p->cp.quiet==0 ) error(EXIT_SUCCESS, 0, "'--rowrandom' not activated because " "the number of rows in the table at this stage (%zu) " "is smaller than the number of requested random rows " "(%zu). You can suppress this message with '--quiet'", p->table->size, p->rowrandom); return; } /* Make sure the given values to '--rowrange' are within the number of rows until this point. */ if(p->rowrange) { if(darr[0]>=p->table->dsize[0]) error(EXIT_FAILURE, 0, "the first value to '--rowrange' (%g) " "is larger than the number of rows (%zu)", darr[0]+1, p->table->dsize[0]); else if( darr[1]>=p->table->dsize[0] ) error(EXIT_FAILURE, 0, "the second value to '--rowrange' (%g) " "is larger than the number of rows (%zu)", darr[1]+1, p->table->dsize[0]); } /* Go over all the columns and make the necessary corrections. */ for(col=p->table; col!=NULL; col=col->next) { /* Set the increment (number of elements in this column). For vector columns, this is the number of elements in each row, and for normal columns, this is 1. */ nelem=col->size/col->dsize[0]; /* FOR STRING: we'll need to free the individual strings that will not be used (outside the allocated array directly 'gal_data_t'). We don't have to worry about the space for the actual pointers (they will be free'd by 'free' in any case, since they are in the initially allocated array). */ if(col->type==GAL_TYPE_STRING) { /* Parse the rows and free extra pointers. */ strarr=col->array; if(p->rowrange) { /* Note that the given values to '--rowrange' started from 1, but in 'ui.c' we subtracted one from it (so at this stage, it starts from 0). */ start = darr[0]; end = darr[1]; for(i=0;itable->dsize[0];++i) if(iend) { free(strarr[i]); strarr[i]=NULL; } } else { /* Set the starting and ending indexs to free the allocated space of each string. */ start = p->head!=GAL_BLANK_SIZE_T ? p->head : 0; end = ( p->head!=GAL_BLANK_SIZE_T ? p->table->dsize[0] : p->table->dsize[0] - p->tail ); for(i=start; irowrange) { /* Move the values up to the top and correct the size. */ col->dsize[0]=darr[1]-darr[0]+1; memmove(col->array, gal_pointer_increment(col->array, darr[0]*nelem, col->type), (darr[1]-darr[0]+1)*nelem*gal_type_sizeof(col->type)); } else { /* For '--tail', we'll need to bring the last columns to the start. Note that we are using 'memmove' because we want to be safe with overlap. */ if(p->tail!=GAL_BLANK_SIZE_T) memmove(col->array, gal_pointer_increment(col->array, (col->dsize[0]-p->tail)*nelem, col->type), p->tail*nelem*gal_type_sizeof(col->type)); /* In any case (head or tail), the new number of rows, then update the total number of elements (may be vector). */ col->dsize[0] = p->head!=GAL_BLANK_SIZE_T ? p->head : p->tail; } /* The 'dsize[0]' component was set above, we should not update the total size. */ col->size = col->dsize[0] * (col->ndim==1 ? 1 : col->dsize[1]); } } /* Import columns from another file/table into the working table. */ static void table_catcolumn(struct tableparams *p) { size_t counter=1; gal_list_str_t *filell, *hdull; char *tmpname, *hdu=NULL, cstr[100]; gal_data_t *col, *tocat, *final, *newcol; struct gal_options_common_params *cp=&p->cp; /* Go over all the given files. */ hdull=p->catcolumnhdu; for(filell=p->catcolumnfile; filell!=NULL; filell=filell->next) { /* Set the HDU (not necessary for non-FITS tables). */ if(gal_fits_file_recognized(filell->v)) { if(hdull) { hdu=hdull->v; hdull=hdull->next; } else error(EXIT_FAILURE, 0, "not enough '--catcolumnhdu's (or " "'-u'). For every FITS table given to " "'--catcolumnfile'. A call to '--catcolumnhdu' is " "necessary to identify its HDU/extension"); } else hdu=NULL; /* Read the catcolumn table. */ tocat=gal_table_read(filell->v, hdu, NULL, p->catcolumns, cp->searchin, cp->ignorecase, cp->numthreads, cp->minmapsize, p->cp.quietmmap, NULL, "--catcolumnhdu"); /* Check the number of rows. */ if(tocat->dsize[0]!=p->table->dsize[0]) error(EXIT_FAILURE, 0, "%s: incorrect number of rows. The " "table given to '--catcolumn' must have the same number " "of rows as the main argument (after all row-selections " "have been applied), but they have %zu and %zu rows " "respectively", gal_fits_name_save_as_string(filell->v, hdu), tocat->dsize[0], p->table->dsize[0]); /* Append a counter to the column names because this option is most often used with columns that have a similar name and it would help the user if the output doesn't have multiple columns with same name. */ if(p->catcolumnrawname==0) for(newcol=tocat; newcol!=NULL; newcol=newcol->next) if(newcol->name) { /* If the new column's name is identical (case-insensitive) to an existing name in the existing table so far, we need to add a suffix. */ for(col=p->table; col!=NULL; col=col->next) if( col->name && strcasecmp(col->name, newcol->name)==0 ) { /* Add the counter suffix to the column name. */ sprintf(cstr, "-%zu", counter); tmpname=gal_checkset_malloc_cat(newcol->name, cstr); /* Free the old name and put in the new one. */ free(newcol->name); newcol->name=tmpname; } } /* Find the final column of the main table and add this table. */ final=gal_list_data_last(p->table); final->next=tocat; ++counter; } } static void table_transpose(struct tableparams *p) { gal_data_t *tmp; size_t refwidth=p->table->dsize[1]; /* Temporary error. */ if(p->colpack) error(EXIT_FAILURE, 0, "'--transpose' is currently not supported " "with Column Arithmetic. Please pipe the transposed table " "into a new 'asttable' command for doing column arithmetic " "on the new columns"); /* Basic sanity checks and counting of final output columns. */ for(tmp=p->table; tmp!=NULL; tmp=tmp->next) { /* Inputs should be vectors. */ if(tmp->ndim!=2) error(EXIT_FAILURE, 0, "only vector columns should be present " "in the table when using '--transpose'"); if(tmp->dsize[1] != refwidth) error(EXIT_FAILURE, 0, "all vector columns given to '--transpose' " "should have the same length (number of tokens/elements)"); /* Apply the transposition. */ gal_permutation_transpose_2d(tmp); /* Remove extra dimensions if necessary. */ if(tmp->dsize[1]==1) tmp->ndim=1; } } static void table_fromvector(struct tableparams *p) { size_t i, *iarr; gal_list_sizet_t *indexs=NULL; gal_data_t *tmp, *vector=NULL, *ext; /* Parse the values given to this option. */ for(tmp=p->fromvector;tmp!=NULL;tmp=tmp->next) { /* Extract the name and element counters. */ vector=gal_list_data_select_by_id(p->table, tmp->name, NULL); if(vector==NULL) table_error_no_column("--fromvector", tmp->name); /* If we don't need this vector column any more, remove it from the table. */ if(p->keepvectfin==0) gal_list_data_remove(&p->table, vector); /* Make sure the selected column is actually a vector. */ if(vector->ndim!=2) error(EXIT_FAILURE, 0, "column '%s' (given to '--fromvector') " "is not a vector", tmp->name); /* Loop over the values and make sure they are within the range. */ indexs=NULL; iarr=tmp->array; for(i=0;isize;++i) { /* Check if it is reasonable. */ if(iarr[i]>vector->dsize[1]) error(EXIT_FAILURE, 0, "column '%s' (given to " "'--fromvector') only has a length of %zu, but you " "have asked for element %zu", tmp->name, vector->dsize[1], iarr[i]); /* Make sure the user didn't give a value of 0. */ if(iarr[i]==0) error(EXIT_FAILURE, 0, "integers given to '--fromvector' " "must be larger than 1, but you have given '0'"); /* Add it to the list of indexs. Note that the user has given a "counter" (starting from 1), while we want an "index" (counting from 0). */ gal_list_sizet_add(&indexs, iarr[i]-1); } /* Reverse the list of indexes to be the same as the requested. */ gal_list_sizet_reverse(&indexs); /* Extract the columns and append them to the end of the table. */ ext=gal_table_col_vector_extract(vector, indexs); gal_list_data_last(p->table)->next=ext; /* Clean up (remove the vector column, if requested). */ gal_list_sizet_free(indexs); if(p->keepvectfin==0) gal_data_free(vector); } } static void table_tovector(struct tableparams *p) { size_t i; char **strarr; gal_list_str_t *tstr; gal_data_t *ids, *col, *tcol, *list, *vector, **torm=NULL; /* Loop over all the calls to this option. */ for(tstr=p->tovector;tstr!=NULL;tstr=tstr->next) { /* Extract the separate csv. */ ids=gal_options_parse_csv_strings_to_data(tstr->v, NULL, 0); /* Allocate an array of dataset pointers to keep the columns that should be removed. */ if(p->keepvectfin==0) { errno=0; torm=malloc(ids->size*sizeof *torm); if(torm==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes", __func__, ids->size*sizeof *torm); } /* Parse the given values, and extract them from the table. */ list=NULL; strarr=ids->array; for(i=0;isize;++i) { /* Extract this column. */ tcol=gal_list_data_select_by_id(p->table, strarr[i], NULL); if(tcol==NULL) table_error_no_column("--tovector", strarr[i]); /* Keep a copy of the column and put it in the list of columns to add. */ col=gal_data_copy(tcol); col->next=NULL; gal_list_data_add(&list, col); /* Keep the pointer to this column for removal (if necessary). */ if(p->keepvectfin==0) torm[i]=tcol; } /* Reverse the list to be in the same order as the input, and convert it to a vector. */ gal_list_data_reverse(&list); vector=gal_table_cols_to_vector(list); gal_list_data_free(list); /* Add this vector column to the output. */ gal_list_data_last(p->table)->next=vector; /* Free the input columns if the user wanted to. */ if(p->keepvectfin==0) for(i=0;isize;++i) gal_list_data_remove(&p->table, torm[i]); /* Clean up. */ gal_data_free(ids); if(torm) free(torm); } } /* Find the HDU of the table to read. */ static char * table_catrows_findhdu(char *filename, gal_list_str_t **hdull) { char *hdu=NULL; /* Set the HDU (not necessary for non-FITS tables). */ if(gal_fits_file_recognized(filename)) { if(*hdull) { hdu=(*hdull)->v; *hdull=(*hdull)->next; } else error(EXIT_FAILURE, 0, "not enough '--catrowhdu's (or " "'-X'). For every FITS table given to '--catrowfile'. " "A call to '--catrowhdu' is necessary to identify " "its HDU/extension"); } /* Return the HDU. */ return hdu; } /* Preparations for adding rows: allocate final table, copy input table into it, and free the input table (while checking if enough HDUs are given for all the tables whose rows should be added). */ static size_t table_catrows_prepare(struct tableparams *p) { char **strarr; char *hdu=NULL; int tableformat; gal_data_t *ocol, *tmp; gal_list_str_t *filell, *hdull; size_t i, dsize[2], nrows=p->table->size; size_t numcols, numrows, filledrows=p->table->size; /* Go over all the given tables and find the final number of rows. */ hdull=p->catrowhdu; for(filell=p->catrowfile; filell!=NULL; filell=filell->next) { hdu=table_catrows_findhdu(filell->v, &hdull); gal_table_info(filell->v, hdu, NULL, &numcols, &numrows, &tableformat, "--catrowhdu"); nrows+=numrows; } /* Change the 'array' component of each column (to preserve the column's 'gal_data_t' pointer; since previous preparations have kept that pointer for next steps in some cases like column arithmetic). To do this, we will first allocate a full 'gal_data_t', copy the contents, free the contents of the original column, then replace them with the larger array, and free the temporary 'gal_data_t'. */ for(tmp=p->table; tmp!=NULL; tmp=tmp->next) { /* Set the final amount of allocated space for this column. */ dsize[0]=nrows; if(tmp->ndim==2) dsize[1]=tmp->dsize[1]; /* Allocate a temporary dataset (we just want its allocated space, not the actual 'gal_data_t' pointer)! */ ocol=gal_data_alloc(NULL, tmp->type, tmp->ndim, dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, tmp->name, tmp->unit, tmp->comment); /* Put the full contents of the existing column into the new column: this will be the first set of rows. */ memcpy(ocol->array, tmp->array, tmp->size*gal_type_sizeof(tmp->type)); /* If the column type is a string, we should set the input pointers to NULL to avoid freeing them later. */ if(tmp->type==GAL_TYPE_STRING) { strarr=tmp->array; for(i=0;isize;++i) strarr[i]=NULL; } /* Free the contents of the current column (while keeping its pointer), and replace those of the 'ocol' dataset. */ gal_data_free_contents(tmp); tmp->comment=ocol->comment; ocol->comment=NULL; tmp->array=ocol->array; ocol->array=NULL; tmp->dsize=ocol->dsize; ocol->dsize=NULL; tmp->name=ocol->name; ocol->name=NULL; tmp->unit=ocol->unit; ocol->unit=NULL; tmp->size=ocol->size; /* Free the 'ocol' dataset. */ gal_data_free(ocol); } /* Clean up and return. */ return filledrows; } /* Import rows from another set of table(s). */ static void table_catrows(struct tableparams *p) { size_t increment; char *hdu=NULL, **strarr; gal_data_t *new, *ttmp, *tmp; gal_list_str_t *filell, *hdull; size_t i, colcount, ncols, ncolstest, filledrows; /* Make sure enough HDUs are given, and allocate the final output table, while filling the initiall table rows into it. */ filledrows=table_catrows_prepare(p); /* Go over all the given tables and extract the same set of columns that were extracted from the input table. */ hdull=p->catrowhdu; ncols=gal_list_data_number(p->table); for(filell=p->catrowfile; filell!=NULL; filell=filell->next) { /* Read the columns of the new table. */ hdu=table_catrows_findhdu(filell->v, &hdull); new=gal_table_read(filell->v, hdu, NULL, p->columns, p->cp.searchin, p->cp.ignorecase, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap, NULL, "--catrowhdu"); /* Make sure that the same number of columns were extracted from this table as they were from the original table. */ ncolstest=gal_list_data_number(new); if(ncolstest!=ncols) error(EXIT_FAILURE, 0, "%s: %zu column(s) were matched with " "your requested columns. However, the final table " "before adding rows contains %zu column(s). For " "concatenating (adding) rows, the final number of " "columns in all input tables should be the same. " "Note that adding columns is done before adding " "rows", gal_fits_name_save_as_string(filell->v, hdu), ncolstest, ncols); /* Parse all the new columns and add their contents to the already allocated space of the output. */ colcount=1; ttmp=p->table; for(tmp=new; tmp!=NULL; tmp=tmp->next) { /* See if this column has the same type as the same column in the input table. */ if(tmp->type!=ttmp->type) error(EXIT_FAILURE, 0, "%s: column %zu has a data type of " "'%s'. However, in the final table (before adding " "rows) this column has a type of '%s'. For " "concatenating (adding) rows, the columns must have " "the same data type. Note that adding columns is " "done before adding rows. If you haven't added columns " "you can use Table's column arithmetic to change the " "data type of this column in the inputs", gal_fits_name_save_as_string(filell->v, hdu), colcount, gal_type_name(tmp->type, 1), gal_type_name(ttmp->type, 1)); /* Make sure the two columns have the same dimensions (vector or single element). */ if(tmp->ndim!=ttmp->ndim) error(EXIT_FAILURE, 0, "%s: column %zu is a %s column. " "However, in the final table (before adding rows) this " "column is a %s column", gal_fits_name_save_as_string(filell->v, hdu), colcount, tmp->ndim==1?"single-valued":"vector", ttmp->ndim==1?"single-valued":"vector"); /* If the column is vector, make sure it has the same number of elements. */ if(tmp->ndim==2 && tmp->dsize[1]!=ttmp->dsize[1]) error(EXIT_FAILURE, 0, "%s: vector column %zu has %zu elements " "However, in the final table (before adding rows) this " "vector column has %zu elements", gal_fits_name_save_as_string(filell->v, hdu), colcount, tmp->dsize[1], ttmp->dsize[1]); /* Set the increment on the existing table (column may be vector). */ increment = filledrows * ( tmp->ndim==1 ? 1 : tmp->dsize[1] ); /* Add the new rows and incremenet the counter. */ memcpy(gal_pointer_increment(ttmp->array, increment, ttmp->type), tmp->array, tmp->size*gal_type_sizeof(tmp->type)); /* If the column type is a string, we should set the input pointers to NULL to avoid freeing them later. */ if(tmp->type==GAL_TYPE_STRING) { strarr=tmp->array; for(i=0;isize;++i) strarr[i]=NULL; } /* Take 'ttmp' to the next column and increment the counter. */ ttmp=ttmp->next; ++colcount; } /* Clean up the columns of the table and increment 'filledrows'. */ filledrows += new->dsize[0]; gal_list_data_free(new); } } void table_colmetadata(struct tableparams *p) { char **strarr; gal_data_t *meta, *col; size_t counter, *colnum; /* Loop through all the given updates and implement them. */ for(meta=p->colmetadata;meta!=NULL;meta=meta->next) { /* If the given column specifier is a name (not parse-able as a number), then this condition will fail. */ colnum=NULL; if( gal_type_from_string((void **)(&colnum), meta->name, GAL_TYPE_SIZE_T) ) { /* We have been given a string, so find the first column that has the same name. */ for(col=p->table; col!=NULL; col=col->next) if(!strcasecmp(col->name, meta->name)) break; } /* The column specifier is a number. */ else { /* Go over the columns and find the one with this counter. */ counter=1; for(col=p->table; col!=NULL; col=col->next) if(counter++==colnum[0]) break; /* Clean up the space that was allocated for 'colnum' (its not allocated when the given value was a string). */ free(colnum); } /* If a match was found, then 'col' should not be NULL. */ if(col==NULL) error(EXIT_FAILURE, 0, "no column found for '%s' (given to " "'--colmetadata'). Columns can either be specified by " "their position in the output table (integer counter, " "starting from 1), or their name (the first column " "found with the given name will be used)", meta->name); /* The matching column is found and we know that atleast one value is already given (otherwise 'gal_options_parse_name_and_values' would abort the program). The first given string is the new name. */ strarr=meta->array; if(col->name) free(col->name); gal_checkset_allocate_copy(strarr[0], &col->name); /* If more than one string is given, the second one is the new unit. */ if(meta->size>1) { /* Replace the unit. */ if(col->unit) free(col->unit); gal_checkset_allocate_copy(strarr[1], &col->unit); /* The next element is the comment of the column. */ if(meta->size>2) { if(col->comment) free(col->comment); gal_checkset_allocate_copy(strarr[2], &col->comment); } } } } void table_noblankend_check_add(struct tableparams *p, gal_list_sizet_t **column_indexs, size_t colind) { size_t i=0; gal_data_t *tmp; static int warningprinted=0; /* Before adding, be sure that the column is not a vector column. */ for(tmp=p->table;tmp!=NULL;tmp=tmp->next) if(i++==colind) { if( tmp->ndim==1 ) gal_list_sizet_add(column_indexs, colind); else if(p->cp.quiet==0 && warningprinted==0) { warningprinted=1; error(EXIT_SUCCESS, 0, "WARNING: vector columns will be " "ignored for the '--noblankend' option. To remove " "this warning, run with '--quiet' (or '-q')"); } } } void table_noblankend(struct tableparams *p) { int found; gal_list_str_t *tmp; size_t i, j, *index; gal_data_t *tcol, *flag; gal_list_sizet_t *column_indexs=NULL; /* Merge all possible calls to '--noblankend' into one list. */ gal_options_merge_list_of_csv(&p->noblankend); /* See if all columns should be checked, or just a select few. */ if( gal_list_str_number(p->noblankend)==1 && !strcmp(p->noblankend->v,"_all") ) { for(i=0;itable);++i) table_noblankend_check_add(p, &column_indexs, i); } /* Only certain columns should be checked, so find/add their index. */ else for(tmp=p->noblankend; tmp!=NULL; tmp=tmp->next) { /* First go through the column names and if they match, add them. Note that we don't want to stop once a name is found, in this scenario, if multiple columns have the same name, we should use all. */ j=0; found=0; for(tcol=p->table; tcol!=NULL; tcol=tcol->next) { if( tcol->name && !strcasecmp(tcol->name, tmp->v) ) { found=1; table_noblankend_check_add(p, &column_indexs, j); } ++j; } /* If the given string didn't match any column name, it must be a number, so parse it as a number and use that number. */ if(found==0) { /* Parse the given index. */ index=NULL; if( gal_type_from_string((void **)(&index), tmp->v, GAL_TYPE_SIZE_T) ) error(EXIT_FAILURE, 0, "column '%s' didn't match any of the " "final column names and can't be parsed as a column " "counter (starting from 1) either", tmp->v); /* Make sure its not zero (the user counts from 1). */ if(*index==0) error(EXIT_FAILURE, 0, "the column number (given to the " "'--noblankend' option) should start from 1, but you " "have given 0"); /* Make sure that the index falls within the number (note that it still counts from 1). */ if(*index > gal_list_data_number(p->table)) error(EXIT_FAILURE, 0, "the final output table only has " "%zu columns, but you have given column %zu to " "'--noblankend'. Recall that '--noblankend' operates " "at the end (on the output columns) and that you " "can also use output column names (if they have " "any). In case you meant a column from the input " "table, you should use '--noblank'", gal_list_data_number(p->table), *index); /* Everything is fine, add the index to the list of columns to check. */ table_noblankend_check_add(p, &column_indexs, *index-1); /* Clean up. */ free(index); } /* For a check. printf("%zu\n", column_indexs->v); */ } /* Remove all blank rows from the output table, note that we don't need the flags of the removed columns here. So we can just free it up. Vector columns are currently ignored in '--noblankend', so if the user only asks for no blanks in a vector column, in effect, no rows should be removed. */ if(column_indexs) { flag=gal_blank_remove_rows(p->table, column_indexs, 1); gal_data_free(flag); } } static void table_txt_formats(struct tableparams *p) { gal_data_t *tmp; for(tmp=p->table; tmp!=NULL; tmp=tmp->next) { switch(tmp->type) { case GAL_TYPE_FLOAT32: if(p->txtf32format) tmp->disp_fmt=p->txtf32format; if(p->txtf32precision!=GAL_BLANK_INT) tmp->disp_precision=p->txtf32precision; break; case GAL_TYPE_FLOAT64: if(p->txtf64format) tmp->disp_fmt=p->txtf64format; if(p->txtf64precision!=GAL_BLANK_INT) tmp->disp_precision=p->txtf64precision; break; } } } void table_column(struct tableparams *p) { /* Concatenate the columns of tables (if required). */ if(p->catcolumnfile) table_catcolumn(p); /* Extract columns from vector. */ if(p->fromvector) table_fromvector(p); /* Merge columns into a vector column. */ if(p->tovector) table_tovector(p); /* If any arithmetic operations are needed, do them. */ if(p->colpack) arithmetic_operate(p); } void table_row(struct tableparams *p) { /* Concatenate the rows of multiple tables (if required). */ if(p->catrowfile) table_catrows(p); /* Apply ranges based on row values (if required). */ if(p->selection) table_select_by_value(p); /* Sort it (if required). */ if(p->sort) table_sort(p); /* If the output number of rows is limited, apply them. */ if( p->rowrange || p->rowrandom || p->head!=GAL_BLANK_SIZE_T || p->tail!=GAL_BLANK_SIZE_T ) table_select_by_position(p); /* Transpose the input table. */ if(p->transpose) table_transpose(p); } /***************************************************************/ /************* Top-level function *************/ /***************************************************************/ void table(struct tableparams *p) { /* Do the requested operations. */ if(p->rowfirst) { table_row(p); table_column(p); } else { table_column(p); table_row(p); } /* Last steps (independent of '--rowfirst'). */ if(p->colmetadata) table_colmetadata(p); if(p->noblankend) table_noblankend(p); /* Write the output or a warning/error (it can become NULL!) */ if(p->table) { table_txt_formats(p); gal_table_write(p->table, NULL, NULL, p->cp.tableformat, p->cp.output, "TABLE", p->colinfoinstdout, 0); } else error(EXIT_FAILURE, 0, "no output columns"); } gnuastro-0.22/bin/table/main.h0000644000175000017500000002026314551337306011726 /********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include #include #include #include /* Progarm names. */ #define PROGRAM_NAME "Table" /* Program full name. */ #define PROGRAM_EXEC "asttable" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Row selection types. */ enum select_types { /* Different types of row-selection */ SELECT_TYPE_RANGE, /* 0 by C standard */ SELECT_TYPE_INPOLYGON, SELECT_TYPE_OUTPOLYGON, SELECT_TYPE_EQUAL, SELECT_TYPE_NOTEQUAL, SELECT_TYPE_NOBLANK, /* This marks the total number of row-selection criteria. */ SELECT_TYPE_NUMBER, }; /* Basic structure. */ struct list_select { gal_data_t *col; int type; struct list_select *next; }; struct arithmetic_token { /* First layer elements. */ int operator; /* OPERATOR: Code of operator. */ int inlib; /* OPERATOR: if operator is in library. */ size_t num_operands; /* OPERATOR: Number of required operands. */ size_t index; /* OPERAND: Index in requested columns. */ char *id_at_usage; /* OPERAND: col identifier at usage time. */ size_t num_at_usage; /* OPERAND: col number at usage. */ gal_data_t *constant; /* OPERAND: a constant/single number. */ gal_data_t *loadcol; /* OPERAND: column from another file. */ char *name_def; /* Name given to the 'set-' operator. */ char *name_use; /* If this a usage of a name. */ struct arithmetic_token *next; /* Pointer to next token. */ }; /* For arithmetic operations. */ struct column_pack { size_t start; /* Starting ind. in requested columns. */ size_t numsimple; /* Num. of simple columns (no change). */ struct arithmetic_token *arith; /* Arithmetic tokens to use. */ struct column_pack *next; /* Next output column. */ }; /* Main program parameters structure */ struct tableparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ char *filename; /* Input filename. */ char *wcsfile; /* File with WCS. */ char *wcshdu; /* HDU in file with WCS. */ gal_list_str_t *columns; /* List of given columns. */ uint8_t information; /* ==1: only print input information. */ uint8_t infonumrows; /* ==1: only print input's num rows. */ uint8_t infonumcols; /* ==1: only print input's num columns. */ uint8_t colinfoinstdout; /* ==1: print column metadata in CL. */ uint8_t rowfirst; /* Do row-based operations first. */ gal_data_t *range; /* Range to limit output. */ gal_data_t *inpolygon; /* Columns to check if inside polygon. */ gal_data_t *outpolygon; /* Columns to check if outside polygon. */ gal_data_t *polygon; /* Values of vertices of the polygon. */ gal_data_t *equal; /* Values to keep in output. */ gal_data_t *notequal; /* Values to not include in output. */ gal_list_str_t *noblankll; /* Remove rows with blank values. */ gal_list_str_t *noblankend; /* Similar to noblank but at end. */ char *sort; /* Column name or number for sorting. */ uint8_t descending; /* Sort columns in descending order. */ size_t head; /* Output only the no. of top rows. */ size_t tail; /* Output only the no. of bottom rows. */ gal_data_t *rowrange; /* Output rows in row-counter range. */ size_t rowrandom; /* Number of rows to show randomly. */ uint8_t envseed; /* Use the environment for random seed. */ gal_list_str_t *catcolumnfile;/* Filename to concat column wise. */ gal_list_str_t *catcolumnhdu; /* HDU/extension for the catcolumn. */ gal_list_str_t *catcolumns; /* List of columns to concatenate. */ uint8_t catcolumnrawname; /* Don't modify name of appended col. */ gal_data_t *fromvector; /* Extract columns from a vector column.*/ uint8_t keepvectfin; /* Keep in.s --tovector & --fromvector. */ gal_list_str_t *tovector; /* Merge columns into a vector column. */ uint8_t transpose; /* Transpose vector columns. */ gal_list_str_t *catrowfile; /* Filename to concat column wise. */ gal_list_str_t *catrowhdu; /* HDU/extension for the catcolumn. */ gal_data_t *colmetadata; /* Set column metadata. */ uint8_t txteasy; /* Easy/simple to ready txt output. */ char *txtf32fmtstr; /* Floating point formats (exp, flt). */ char *txtf64fmtstr; /* Floating point formats (exp, flt). */ int txtf32precision; /* Precision of float32 in text. */ int txtf64precision; /* Precision of float32 in text. */ /* Internal. */ struct column_pack *colpack; /* Output column packages. */ gal_data_t *noblank; /* Remove rows that have blank. */ gal_data_t *table; /* Linked list of output table columns. */ struct wcsprm *wcs; /* WCS structure for conversion. */ int nwcs; /* Number of WCS structures. */ gal_data_t *allcolinfo; /* Information of all the columns. */ gal_data_t *sortcol; /* Column to define a sorting. */ int selection; /* Any row-selection is requested. */ gal_data_t *select; /* Select rows for output. */ struct list_select *selectcol; /* Column to define a range. */ uint8_t freesort; /* If the sort column should be freed. */ uint8_t *freeselect; /* If selection columns should be freed.*/ uint8_t sortin; /* If the sort column is in the output. */ time_t rawtime; /* Starting time of the program. */ gal_data_t **colarray; /* Array of columns, with arithmetic. */ size_t numcolarray; /* Number of elements in 'colarray'. */ gsl_rng *rng; /* Main random number generator. */ const char *rng_name; /* Name of random number generator. */ unsigned long int rng_seed; /* Random number generator seed. */ size_t *colmatch; /* Number of matches found for columns. */ uint8_t txtf32format; /* Floating point formats (exp, flt). */ uint8_t txtf64format; /* Floating point formats (exp, flt). */ /* For arithmetic operators. */ gal_list_str_t *wcstoimg_p; /* Pointer to the node. */ gal_list_str_t *imgtowcs_p; /* Pointer to the node. */ size_t wcstoimg; /* Output column no, for conversion. */ size_t imgtowcs; /* Output column no, for conversion. */ }; #endif gnuastro-0.22/bin/table/authors-cite.h0000644000175000017500000000302314551337306013404 /********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi" #endif gnuastro-0.22/bin/table/args.h0000644000175000017500000003310714551337306011737 /********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { { "column", UI_KEY_COLUMN, "STR", 0, "Column number (counting from 1) or search string.", GAL_OPTIONS_GROUP_INPUT, &p->columns, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings_append }, { "wcsfile", UI_KEY_WCSFILE, "FITS", 0, "File with WCS if conversion is requested.", GAL_OPTIONS_GROUP_INPUT, &p->wcsfile, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "wcshdu", UI_KEY_WCSHDU, "STR", 0, "HDU in file with WCS for conversion.", GAL_OPTIONS_GROUP_INPUT, &p->wcshdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "catcolumnfile", UI_KEY_CATCOLUMNFILE, "FITS/TXT", 0, "File(s) to be concatenated by column.", GAL_OPTIONS_GROUP_INPUT, &p->catcolumnfile, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "catcolumnhdu", UI_KEY_CATCOLUMNHDU, "STR/INT", 0, "HDU/Extension(s) in catcolumnfile.", GAL_OPTIONS_GROUP_INPUT, &p->catcolumnhdu, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "catcolumns", UI_KEY_CATCOLUMNS, "STR", 0, "Columns to use in --catcolumnfile.", GAL_OPTIONS_GROUP_INPUT, &p->catcolumns, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "catrowfile", UI_KEY_CATROWFILE, "FITS/TXT", 0, "File(s) to be concatenated by row.", GAL_OPTIONS_GROUP_INPUT, &p->catrowfile, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "catrowhdu", UI_KEY_CATROWHDU, "STR/INT", 0, "HDU/Extension(s) in --catrowfile.", GAL_OPTIONS_GROUP_INPUT, &p->catrowhdu, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Output. */ { "information", UI_KEY_INFORMATION, 0, 0, "Only print input table's information.", GAL_OPTIONS_GROUP_OUTPUT, &p->information, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "info-num-rows", UI_KEY_INFONUMROWS, 0, 0, "Only print input table's number of rows.", GAL_OPTIONS_GROUP_OUTPUT, &p->infonumrows, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "info-num-cols", UI_KEY_INFONUMCOLS, 0, 0, "Only print input table's number of columns.", GAL_OPTIONS_GROUP_OUTPUT, &p->infonumcols, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "colinfoinstdout", UI_KEY_COLINFOINSTDOUT, 0, 0, "Column info/metadata when printing to stdout.", GAL_OPTIONS_GROUP_OUTPUT, &p->colinfoinstdout, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "txteasy", UI_KEY_TXTEASY, 0, 0, "Short for '-Afixed -B6 -ffixed -p3'.", GAL_OPTIONS_GROUP_OUTPUT, &p->txteasy, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "txtf32format", UI_KEY_TXTF32FORMAT, "STR", 0, "Text output float32 format: 'fixed' or 'exp'.", GAL_OPTIONS_GROUP_OUTPUT, &p->txtf32fmtstr, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "txtf64format", UI_KEY_TXTF64FORMAT, "STR", 0, "Text output float64 format: 'fixed' or 'exp'.", GAL_OPTIONS_GROUP_OUTPUT, &p->txtf64fmtstr, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "txtf32precision", UI_KEY_TXTF32PRECISION, "INT", 0, "Text output float32 precision.", GAL_OPTIONS_GROUP_OUTPUT, &p->txtf32precision, GAL_TYPE_INT, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "txtf64precision", UI_KEY_TXTF64PRECISION, "INT", 0, "Text output float64 precision.", GAL_OPTIONS_GROUP_OUTPUT, &p->txtf64precision, GAL_TYPE_INT, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Operation precendence */ { 0, 0, 0, 0, "Precedence (default: column operations first)", UI_GROUP_PRECEDENCE }, { "rowfirst", UI_KEY_ROWFIRST, 0, 0, "Apply row-based operations first.", UI_GROUP_PRECEDENCE, &p->rowfirst, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Output columns. */ { 0, 0, 0, 0, "Columns in output:", UI_GROUP_OUTCOLS }, { "catcolumnrawname", UI_KEY_CATCOLUMNRAWNAME, 0, 0, "Don't touch column names of --catcolumnfile.", UI_GROUP_OUTCOLS, &p->catcolumnrawname, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "colmetadata", UI_KEY_COLMETADATA, "ID,S,S,S", 0, "Column metadata (S=STR: Name, Unit, Comments).", UI_GROUP_OUTCOLS, &p->colmetadata, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_name_and_strings }, { "tovector", UI_KEY_TOVECTOR, "STR,STR[,STR]", 0, "Merge column(s) into a vector column.", UI_GROUP_OUTCOLS, &p->tovector, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "fromvector", UI_KEY_FROMVECTOR, "STR,INT[,INT]", 0, "Extract column(s) from a vector column.", UI_GROUP_OUTCOLS, &p->fromvector, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_name_and_sizets }, { "keepvectfin", UI_KEY_KEEPVECTFIN, 0, 0, "Keep inputs of '--tovector' & '--fromvector'.", UI_GROUP_OUTCOLS, &p->keepvectfin, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "transpose", UI_KEY_TRANSPOSE, 0, 0, "Transpose table (must only contain vector cols).", UI_GROUP_OUTCOLS, &p->transpose, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Output Rows */ { 0, 0, 0, 0, "Rows in output:", UI_GROUP_OUTROWS }, { "range", UI_KEY_RANGE, "STR,FLT:FLT", 0, "Column, and range to limit output.", UI_GROUP_OUTROWS, &p->range, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_name_and_float64s }, { "inpolygon", UI_KEY_INPOLYGON, "STR,STR", 0, "Coord. columns that are inside '--polygon'.", GAL_OPTIONS_GROUP_INPUT, &p->inpolygon, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, { "outpolygon", UI_KEY_OUTPOLYGON, "STR,STR", 0, "Coord. columns that are outside '--polygon'.", GAL_OPTIONS_GROUP_INPUT, &p->outpolygon, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, { "polygon", UI_KEY_POLYGON, "FLT,FLT[:...]", 0, "Polygon vertices, also a DS9 region file.", UI_GROUP_OUTROWS, &p->polygon, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_colon_sep_csv }, { "equal", UI_KEY_EQUAL, "STR,FLT[,...]", 0, "Column, values to keep in output.", UI_GROUP_OUTROWS, &p->equal, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_name_and_strings }, { "notequal", UI_KEY_NOTEQUAL, "STR,FLT[,...]", 0, "Column, values to remove from output.", UI_GROUP_OUTROWS, &p->notequal, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_name_and_strings }, { "sort", UI_KEY_SORT, "STR/INT", 0, "Column name or number for sorting.", UI_GROUP_OUTROWS, &p->sort, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "descending", UI_KEY_DESCENDING, 0, 0, "Sort in descending order: largets first.", UI_GROUP_OUTROWS, &p->descending, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "head", UI_KEY_HEAD, "INT", 0, "Only return given number of top rows.", UI_GROUP_OUTROWS, &p->head, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "tail", UI_KEY_TAIL, "INT", 0, "Only return given number of bottom rows.", UI_GROUP_OUTROWS, &p->tail, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "rowrange", UI_KEY_ROWRANGE, "INT,INT", 0, "Only rows in this row-counter range.", UI_GROUP_OUTROWS, &p->rowrange, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "rowrandom", UI_KEY_ROWRANDOM, "INT", 0, "Number of rows to select randomly.", UI_GROUP_OUTROWS, &p->rowrandom, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, }, { "envseed", UI_KEY_ENVSEED, 0, 0, "Use GSL_RNG_SEED env. for '--rowrandom'.", UI_GROUP_OUTROWS, &p->envseed, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "noblank", UI_KEY_NOBLANK, "STR[,STR]", 0, "Remove rows with blank in given columns.", GAL_OPTIONS_GROUP_INPUT, &p->noblankll, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "noblankend", UI_KEY_NOBLANKEND, "STR[,STR]", 0, "Sim. to --noblank, at end (e.g., after arith.).", GAL_OPTIONS_GROUP_INPUT, &p->noblankend, GAL_TYPE_STRLL, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* End. */ {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/table/ui.h0000644000175000017500000000550714551337306011423 /********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_PRECEDENCE = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_OUTCOLS, UI_GROUP_OUTROWS, }; /* Available letters for short options: a g j l t v x y z G J Q */ enum option_keys_enum { /* With short-option version. */ UI_KEY_WCSFILE = 'w', UI_KEY_WCSHDU = 'W', UI_KEY_COLUMN = 'c', UI_KEY_INFORMATION = 'i', UI_KEY_COLINFOINSTDOUT = 'O', UI_KEY_RANGE = 'r', UI_KEY_EQUAL = 'e', UI_KEY_NOTEQUAL = 'n', UI_KEY_SORT = 's', UI_KEY_DESCENDING = 'd', UI_KEY_HEAD = 'H', UI_KEY_TAIL = 't', UI_KEY_NOBLANK = 'b', UI_KEY_NOBLANKEND = 'E', UI_KEY_CATCOLUMNS = 'C', UI_KEY_CATCOLUMNHDU = 'u', UI_KEY_CATCOLUMNFILE = 'L', UI_KEY_CATROWFILE = 'R', UI_KEY_CATROWHDU = 'X', UI_KEY_COLMETADATA = 'm', UI_KEY_TXTEASY = 'Y', UI_KEY_TXTF32FORMAT = 'f', UI_KEY_TXTF64FORMAT = 'A', UI_KEY_TXTF32PRECISION = 'p', UI_KEY_TXTF64PRECISION = 'B', UI_KEY_KEEPVECTFIN = 'k', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_POLYGON = 1000, UI_KEY_ENVSEED, UI_KEY_ROWRANGE, UI_KEY_TOVECTOR, UI_KEY_ROWFIRST, UI_KEY_ROWRANDOM, UI_KEY_INPOLYGON, UI_KEY_TRANSPOSE, UI_KEY_OUTPOLYGON, UI_KEY_FROMVECTOR, UI_KEY_INFONUMROWS, UI_KEY_INFONUMCOLS, UI_KEY_CATCOLUMNRAWNAME, }; void ui_read_check_inputs_setup(int argc, char *argv[], struct tableparams *p); void ui_list_select_free(struct list_select *list, int freevalue); void ui_colpack_free(struct column_pack *list); void ui_free_report(struct tableparams *p); #endif gnuastro-0.22/bin/table/arithmetic.h0000644000175000017500000000373214551337306013135 /********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARITHMETIC_H #define ARITHMETIC_H #include /* Basic constants. */ #define ARITHMETIC_CALL "arith " #define ARITHMETIC_CALL_LENGTH strlen(ARITHMETIC_CALL) /* Operators used for arithmetic on columns. */ enum arithmetic_operators { ARITHMETIC_TABLE_OP_SET = GAL_ARITHMETIC_OP_LAST_CODE, ARITHMETIC_TABLE_OP_WCSTOIMG, ARITHMETIC_TABLE_OP_IMGTOWCS, ARITHMETIC_TABLE_OP_DATETOSEC, ARITHMETIC_TABLE_OP_DISTANCEFLAT, ARITHMETIC_TABLE_OP_EQJ2000TOFLAT, ARITHMETIC_TABLE_OP_EQJ2000FROMFLAT, ARITHMETIC_TABLE_OP_DATETOMILLISEC, ARITHMETIC_TABLE_OP_DISTANCEONSPHERE, ARITHMETIC_TABLE_OP_SORTEDTOINTERVAL, }; /* Functions */ void arithmetic_init(struct tableparams *p, struct arithmetic_token **arith, gal_list_str_t **colstoread, size_t *totcalled, char *expression, gal_data_t *colinfo, size_t numcols); void arithmetic_token_free(struct arithmetic_token *list); void arithmetic_operate(struct tableparams *p); #endif gnuastro-0.22/bin/table/table.h0000644000175000017500000000206514551337306012071 /********************************************************************* Table - View and manipulate a FITS table structures. Table is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef TABLE_H #define TABLE_H void table(struct tableparams *p); #endif gnuastro-0.22/bin/table/asttable-complete.bash0000644000175000017500000001524214551337306015076 # Bash autocompletion to Gnuastro's Table program. See the comments above # 'bin/completion.bash.in' for more. # # Original author: # Pedram Ashofteh-Ardakani # Contributing author(s): # Mohammad Akhlaghi # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see ## Contributing author(s): ## Copyright (C) 2015-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . ## Necessary pre-processer and linker flags. AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib ## Program definition (name, linking, sources and headers) bin_PROGRAMS = astwarp ## Reason for linking with 'libgnu' described in 'bin/TEMPLATE/Makefile.am'. astwarp_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astwarp_SOURCES = main.c ui.c warp.c EXTRA_DIST = main.h authors-cite.h args.h ui.h warp.h ## The configuration file (distribute and install). ## NOTE: the man page is created in doc/Makefile.am dist_sysconf_DATA = astwarp.conf gnuastro-0.22/bin/warp/astwarp.conf0000644000175000017500000000221414551337306013037 # Default parameters (System) for Warp. # Warp is part of GNU Astronomy Utitlies. # # Use the long option name of each parameter followed by a value. The name # and value should be separated by atleast one white-space character (for # example ' '(space), or tab). Lines starting with '#' are ignored. # # For more information, please run these commands: # # $ astwarp --help # Full list of options, short doc. # $ astwarp -P # Print all options and used values. # $ info astwarp # All options and input/output. # $ info gnuastro "Configuration files" # How to use configuration files. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # Input: edgesampling 0 gridhdu 1 # Output: coveredfrac 1.0 ctype RA---TAN,DEC--TAN # Common parameters type float32 gnuastro-0.22/bin/warp/Makefile.in0000644000175000017500000033747314557513750012603 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = astwarp$(EXEEXT) subdir = bin/warp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_sysconf_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)" PROGRAMS = $(bin_PROGRAMS) am_astwarp_OBJECTS = main.$(OBJEXT) ui.$(OBJEXT) warp.$(OBJEXT) astwarp_OBJECTS = $(am_astwarp_OBJECTS) am__DEPENDENCIES_1 = astwarp_DEPENDENCIES = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/main.Po ./$(DEPDIR)/ui.Po \ ./$(DEPDIR)/warp.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(astwarp_SOURCES) DIST_SOURCES = $(astwarp_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_sysconf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -I\$(top_srcdir)/lib astwarp_LDADD = $(top_builddir)/bootstrapped/lib/libgnu.la \ $(top_builddir)/lib/libgnuastro.la \ $(CONFIG_LDADD) astwarp_SOURCES = main.c ui.c warp.c EXTRA_DIST = main.h authors-cite.h args.h ui.h warp.h dist_sysconf_DATA = astwarp.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/warp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/warp/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list astwarp$(EXEEXT): $(astwarp_OBJECTS) $(astwarp_DEPENDENCIES) $(EXTRA_astwarp_DEPENDENCIES) @rm -f astwarp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(astwarp_OBJECTS) $(astwarp_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/warp.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sysconfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f ./$(DEPDIR)/warp.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-dist_sysconfDATA install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/ui.Po -rm -f ./$(DEPDIR)/warp.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_sysconfDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dist_sysconfDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_sysconfDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/warp/main.c0000644000175000017500000000302414551337306011577 /********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include "main.h" #include "ui.h" #include "warp.h" int main (int argc, char *argv[]) { struct timeval t1; struct warpparams p={{{0},0},{0},0}; /* Set the starting time.*/ time(&p.rawtime); gettimeofday(&t1, NULL); /* Read the input parameters. */ ui_read_check_inputs_setup(argc, argv, &p); /* Run Warp. */ warp(&p); /* Free all non-freed allocations. */ ui_free_report(&p, &t1); /* Return successfully. */ return EXIT_SUCCESS; } gnuastro-0.22/bin/warp/ui.c0000644000175000017500000011670514551337306011303 /********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Pedram Ashofteh-Ardakani Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "ui.h" #include "authors-cite.h" /**************************************************************/ /********* Argp necessary global entities ************/ /**************************************************************/ /* Definition parameters for the Argp: */ const char * argp_program_version = PROGRAM_STRING "\n" GAL_STRINGS_COPYRIGHT "\n\nWritten/developed by "PROGRAM_AUTHORS; const char * argp_program_bug_address = PACKAGE_BUGREPORT; static char args_doc[] = "ASTRdata"; const char doc[] = GAL_STRINGS_TOP_HELP_INFO PROGRAM_NAME" will resample the pixel " "grid of an input image. By default (if no special linear warping is " "requested), it will align the image to the WCS coordinates in any" "and remove any possible distortion. Linear warping (like '--rotate' " "or '--scale') should be explicitly requested with the options under " "the \"Linear warps\" group below. \n" GAL_STRINGS_MORE_HELP_INFO /* After the list of options: */ "\v" PACKAGE_NAME" home page: "PACKAGE_URL; /**************************************************************/ /********* Initialize & Parse command-line **************/ /**************************************************************/ static void ui_initialize_options(struct warpparams *p, struct argp_option *program_options, struct argp_option *gal_commonopts_options) { size_t i; struct gal_options_common_params *cp=&p->cp; /* Set the necessary common parameters structure. */ cp->program_struct = p; cp->program_name = PROGRAM_NAME; cp->program_exec = PROGRAM_EXEC; cp->program_bibtex = PROGRAM_BIBTEX; cp->program_authors = PROGRAM_AUTHORS; cp->poptions = program_options; cp->numthreads = gal_threads_number(); cp->coptions = gal_commonopts_options; /* Program specific initializations. */ p->wa.edgesampling = GAL_BLANK_SIZE_T; /* Set the mandatory common options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) { /* Select individually. */ switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_MINMAPSIZE: cp->coptions[i].mandatory=GAL_OPTIONS_MANDATORY; break; case GAL_OPTIONS_KEY_SEARCHIN: case GAL_OPTIONS_KEY_IGNORECASE: case GAL_OPTIONS_KEY_TABLEFORMAT: case GAL_OPTIONS_KEY_STDINTIMEOUT: cp->coptions[i].flags=OPTION_HIDDEN; break; } /* Select by group. */ switch(cp->coptions[i].group) { case GAL_OPTIONS_GROUP_TESSELLATION: cp->coptions[i].doc=NULL; /* Necessary to remove title. */ cp->coptions[i].flags=OPTION_HIDDEN; break; } } } /* Parse a single option: */ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct warpparams *p = state->input; /* Pass 'gal_options_common_params' into the child parser. */ state->child_inputs[0] = &p->cp; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Set the key to this option. */ switch(key) { /* Read the non-option tokens (arguments): */ case ARGP_KEY_ARG: /* The user may give a shell variable that is empty! In that case 'arg' will be an empty string! We don't want to account for such cases (and give a clear error that no input has been given). */ if(p->inputname) argp_error(state, "only one argument (input file) should be given"); else if(arg[0]!='\0') p->inputname=arg; break; /* This is an option, set its value. */ default: return gal_options_set_from_key(key, arg, p->cp.poptions, &p->cp); } return 0; } /**************************************************************/ /********** Modular matrix linked list *************/ /**************************************************************/ /* Save the codes of the user's desired modular warpings into the linked list. Because the types of these options are 'GAL_TYPE_INVALID', this function will not be called when printing the full list of parameters and their values. */ static void * ui_add_to_modular_warps_ll(struct argp_option *option, char *arg, char *filename, size_t lineno, void *params) { size_t i; double tmp; gal_data_t *new; struct warpparams *p=(struct warpparams *)params; /* When an argument is necessary, make sure we actually have a string to parse. Also note that if an argument is necessary, but none is given Argp will automatically abort the program with an informative error. */ if(arg && *arg=='\0') error(EXIT_FAILURE, 0, "empty string given to '--%s'", option->name); /* Parse the (possible) arguments. */ new=gal_options_parse_list_of_numbers(arg, filename, lineno, GAL_TYPE_FLOAT64); /* If this was a matrix, then put it in the matrix element of the main data structure. Otherwise, add the list of given values to the modular warpings list. */ if(option->key==UI_KEY_MATRIX) { /* Some sanity checks. */ if(p->matrix) error_at_line(EXIT_FAILURE, 0, filename, lineno, "only one matrix " "may be given, you can use multiple modular " "warpings"); if(new->size!=4 && new->size!=9) error_at_line(EXIT_FAILURE, 0, filename, lineno, "only a 4 or 9 " "element 'matrix' is currently acceptable. '%s' has " "%zu elements", arg, new->size); /* Keep the matrix in the main structure. */ p->matrix=new; } else { /* No more than two numbers should be given for the modular warpings. */ if(new->size>2) error_at_line(EXIT_FAILURE, 0, filename, lineno, "%zu numbers " "given to the '%s' option. Modular warpings can " "accept 2 numbers at the most currently (for 2D " "datasets)", new->size, option->name); /* Some modular-warp specific sanity checks: rotate only needs one number, and flip's values should only be 0 and 1. */ if(option->key==UI_KEY_ROTATE) { if(new->size!=1) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the " "'rotate' option only takes one value (the " "angle of rotation). You have given: '%s'", arg); } else if (option->key==UI_KEY_FLIP) { for(i=0;isize;++i) { tmp=((double *)(new->array))[i]; if(tmp!=0.0f && tmp!=1.0f) error_at_line(EXIT_FAILURE, 0, filename, lineno, "'flip' " "only takes values of '1' and '0'. You have " "given '%s'", arg); } } /* Keep the final value. */ new->status=option->key; new->next=p->modularll; p->modularll=new; } return NULL; } /**************************************************************/ /*************** Sanity Check *******************/ /**************************************************************/ static void ui_check_gridfile(struct warpparams *p) { int nwcs; size_t ndim, *dsize=NULL; gal_warp_wcsalign_t *wa=&p->wa; /* Make sure that the file given to '--gridfile' is a recognized FITS file. */ if(gal_fits_file_recognized(p->gridfile)==0) error(EXIT_FAILURE, 0, "'%s' (given to '--gridfile') must be " "in FITS format with a recognizable FITS format suffix", p->gridfile); if(p->gridhdu==NULL) error(EXIT_FAILURE, 0, "%s no HDU/extension specified (file given " "to '--gridfile')! Please use '--gridhdu' to specify a " "HDU/extension to read from", p->gridfile); /* Read the WCS and save to a standard PC convention WCS struct. */ wa->twcs=gal_wcs_read(p->gridfile, p->gridhdu, GAL_WCS_LINEAR_MATRIX_PC, 0, 0, &nwcs, "--gridhdu"); if(wa->twcs==NULL) error(EXIT_FAILURE, 0, "%s (hdu %s): no readable WCS structure", p->gridfile, p->gridhdu); /* Correct the WCS dimensions if necessary. */ dsize=gal_fits_img_info_dim(p->gridfile, p->gridhdu, &ndim, "--gridhdu"); ndim=gal_dimension_remove_extra(ndim, dsize, wa->twcs); if(ndim!=2) error(EXIT_FAILURE, 0, "%s (hdu %s): the target WCS must " "contain 2 dimensions, but warp detected %zu dimensions", p->gridfile, p->gridhdu, ndim); /* If '--width' has already been given, inform the user that it will be ignored (because '--gridfile' has been given). */ if(p->width) { error(EXIT_SUCCESS, 0, "WARNING: '--width' will be ignored " "because '--gridfile' takes precedence"); gal_data_free(p->width); } /* We don't need to free the input 'dsize' array since it will be freed by gal_data_free at the clean up stage. */ wa->widthinpix=gal_data_alloc(dsize, GAL_TYPE_SIZE_T, 1, &ndim, NULL, 1, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* If any of the non-default WCS-defining options are given, free them and print a warning. We don't want to print any warning for the default one ('--ctype') because most users may not set it. */ if(wa->ctype) { gal_data_free(wa->ctype); wa->ctype=NULL; } if(wa->cdelt) { error(EXIT_SUCCESS, 0, "WARNING: '--cdelt' will be ignored " "because '--gridfile' takes precedence"); gal_data_free(wa->cdelt); wa->cdelt=NULL; } if(wa->center) { error(EXIT_SUCCESS, 0, "WARNING: '--center' will be ignored " "because '--gridfile' takes precedence"); gal_data_free(wa->center); wa->center=NULL; } } static void ui_check_wcsalign_cdelt(struct warpparams *p) { size_t two=2, i; gal_data_t *olddata=NULL; double *tmp=NULL, *cdelt=NULL; gal_warp_wcsalign_t *wa=&p->wa; /* '--cdelt' is given. */ if(wa->cdelt) { /* CDELT is given, make sure there are no more than two values */ if(wa->cdelt->size > 2) error(EXIT_FAILURE, 0, "%zu values given to '--cdelt', " "however this option takes no more than 2 values", wa->cdelt->size); /* If only one value given to CDELT, use it for both dimensions. */ if(wa->cdelt->size == 1) { olddata=wa->cdelt; tmp=olddata->array; wa->cdelt=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &two, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); cdelt=p->wa.cdelt->array; cdelt[0]=cdelt[1]=tmp[0]; gal_data_free(olddata); } /* Check if the CDELT is in a reasonable range of degrees (in case '--widthinpix' wasn't given). */ if(p->widthinpix==0) { cdelt=wa->cdelt->array; for(i=wa->cdelt->size; i--;) if(cdelt[i]>0.01) error(EXIT_SUCCESS, 0, "WARNING: CDELT on dimension %zu has " "the unusual value of %f degrees. If you meant to define " "CDELT in arcseconds please use: '--cdelt=%g/3600'", i, cdelt[i], cdelt[i]); } } /* '--cdelt' not given. */ else { /* CDELT is not given, try to deduce from WCS */ cdelt=gal_wcs_pixel_scale(p->input->wcs); if(!cdelt) error(EXIT_FAILURE, 0, "%s (hdu %s): the pixel scale couldn't " "be deduced from the WCS.", p->inputname, p->cp.hdu); /* Set CDELT to the maximum value of the dimensions. */ cdelt[0] = cdelt[1] = fmax(cdelt[0], cdelt[1]); wa->cdelt=gal_data_alloc(cdelt, GAL_TYPE_FLOAT64, 1, &two, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); } } static void ui_check_wcsalign_width(struct warpparams *p) { /* Low-level variable (used in other variable definitions). */ gal_warp_wcsalign_t *wa=&p->wa; /* High-level variables. */ gal_data_t *tmpw; size_t i, two=2, stemp, *sarray=NULL; double *cdelt=wa->cdelt->array, *darray, *tdarray; /* Make sure only two values are given. */ if( p->width->size > 2 ) error(EXIT_FAILURE, 0, "%zu value(s) given to '--width', however " "this option takes 1 or two values on a 2D image: the output " "image width and height in WCS units (if you want to enter " "the width in pixels, please also call '--widthinpix'). If a " "single value is given the size will be a square", p->width->size); /* If a single value is given, use it for both dimensions. */ if(p->width->size==1) { /* Allocate a new one and add the values. */ tmpw=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &two, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Put the values in. */ tdarray=tmpw->array; darray=p->width->array; tdarray[0]=tdarray[1]=darray[0]; /* Clean up and set the new pointer. */ gal_data_free(p->width); p->width=tmpw; } /* When '--widthinpix' is called we can directly use the values. */ darray=p->width->array; if(p->widthinpix) { /* Make sure they are integers. */ if( darray[0]!=ceil(darray[0]) || darray[1]!=ceil(darray[1]) ) error(EXIT_FAILURE, 0, "value to '--width' must be integers, " "but they are: %g, %g", darray[0], darray[1]); p->width=gal_data_copy_to_new_type(p->width, GAL_TYPE_SIZE_T); } else { /* Allocate the size_t array to keep the final values. */ tmpw=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, &two, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); /* Convert the given values to pixels using the pixel scale information, and make sure they are reasonable. */ sarray=tmpw->array; for(i=0;iwidth->size;++i) { sarray[i] = darray[i]/cdelt[i]; if(sarray[i]>GAL_OPTIONS_WIDTH_TOO_LARGE_SIZE) gal_options_width_too_large(darray[i], i+1, sarray[i], cdelt[i]); } /* Free the old dataset and use the new one. */ gal_data_free(p->width); p->width=tmpw; } /* Image size must be ODD */ sarray=p->width->array; if( sarray[0]%2==0 || sarray[1]%2==0 ) { /* Let the user know that we are updating the output size (only relevant if the user directly requested pixel coordinates). */ if(p->widthinpix) error(EXIT_SUCCESS, 0, "WARNING: '--widthinpix' must be odd: " "updating %zux%zu to %zux%zu", sarray[0], sarray[1], sarray[0]%2 ? sarray[0] : sarray[0]+1, sarray[1]%2 ? sarray[1] : sarray[1]+1); /* Keep the final values. */ if(sarray[0]%2==0) sarray[0]+=1; if(sarray[1]%2==0) sarray[1]+=1; } /* To keep the later steps consistent with the C ordering of dimensions, we'll swap the fast and slow axis from FITS (which has the same convention as FORTRAN), because the user sees a FITS file. In an aligned image, sarray[0] is the horizontal axis and sarray[1] the vertical one. NAXIS1 -> dsize[1] -> horizontal axis NAXIS2 -> dsize[0] -> vertical axis */ stemp=sarray[0]; sarray[0]=sarray[1]; sarray[1]=stemp; /* Put the final widthinpix dataset into the warpalign structure. */ p->wa.widthinpix=p->width; p->width=NULL; } static void * ui_check_options_and_arguments_wcsalign(struct warpparams *p) { size_t two=2, indim=0; gal_warp_wcsalign_t *wa=&p->wa; double *icenter=NULL, *iwidth=NULL, *imin=NULL, *imax=NULL, *tmp=NULL; /* Copy necessary parameters for the nonlinear warp (independent of having a WCS or not). */ wa->input=p->input; wa->coveredfrac=p->coveredfrac; wa->numthreads=p->cp.numthreads; /* If using a WCS file for the target grid (with '--gridfile' and '--gridhdu' options) check the file and ignore the other given parameters. */ if(p->gridfile) { ui_check_gridfile(p); return NULL; } /* Sanity check user's possibly given '--center'. */ if(wa->center) { if(wa->center->size !=2) error(EXIT_FAILURE, 0, "%zu value(s) given to '--center', " "however this option takes exactly 2 values to specify " "the output image center", wa->center->size); tmp=wa->center->array; if(tmp[0] < 0 || tmp[0] > 360 || tmp[1] < -90 || tmp[1] > 90 ) error(EXIT_FAILURE, 0, "the first value '--center' should be " "between 0 and 360 (inclusive, because it is the RA) " "and the second value should be between -90 and 90 " "(inclusive, because it is the Dec), however the given " "values are: %g and %g", tmp[0], tmp[1]); } else /* --center not given, use the input image to define it. */ { /* Get sky coverage information about the input image. Note that this allocates the pointers that have to be freed later. */ if( gal_wcs_coverage(p->inputname, p->cp.hdu, &indim, &icenter, &iwidth, &imin, &imax, "--hdu")==0 ) error(EXIT_FAILURE, 0, "%s (hdu %s): is not usable for finding " "sky coverage", p->inputname, p->cp.hdu); /* Store the center array and clean up the rest. */ wa->center=gal_data_alloc(icenter, GAL_TYPE_FLOAT64, 1, &two, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); free(imin); free(imax); free(iwidth); } /* Prepare the output pixel scale and width. Note that the pixel scale should be checked before the width because the width may need the pixel scale. */ ui_check_wcsalign_cdelt(p); if(p->width) ui_check_wcsalign_width(p); /* Check CTYPE */ if(!wa->ctype) error(EXIT_FAILURE, 0, "no output projection CTYPE specified, " "you can use the '--ctype' option and give it a comma " "separated CTYPE value recognized by the WCSLIB (e.g. " "--ctype=RA---TAN,DEC--TAN)"); if(wa->ctype->size != p->input->ndim) error(EXIT_FAILURE, 0, "%zu value(s) given to '--ctype', but it " "takes exactly 2 values", wa->ctype->size); return NULL; } static void ui_check_options_and_arguments(struct warpparams *p) { /* Read the input.*/ if(p->inputname==NULL) error(EXIT_FAILURE, 0, "no input file is specified"); /* Make sure a HDU is given. */ if( gal_fits_file_recognized(p->inputname) && p->cp.hdu==NULL ) error(EXIT_FAILURE, 0, "no HDU specified, you can use the '--hdu' " "('-h') option and give it the HDU number (starting from " "zero), or extension name (generally, anything acceptable " "by CFITSIO)"); /* Make sure mandatory options are provided. */ if(p->modularll==NULL && p->matrix==NULL) { p->wcsalign=1; if(p->wa.edgesampling==GAL_BLANK_SIZE_T) error(EXIT_FAILURE, 0, "no '--edgesampling' provided"); } /* Read the input image as double type and its WCS structure. */ p->input=gal_array_read_one_ch_to_type(p->inputname, p->cp.hdu, NULL, GAL_TYPE_FLOAT64, p->cp.minmapsize, p->cp.quietmmap, "--hdu"); /* Read the WCS and remove one-element wide dimension(s). */ p->input->wcs=gal_wcs_read(p->inputname, p->cp.hdu, p->cp.wcslinearmatrix, p->hstartwcs, p->hendwcs, &p->input->nwcs, "--hdu"); p->input->ndim=gal_dimension_remove_extra(p->input->ndim, p->input->dsize, p->input->wcs); /* Currently Warp only works on 2D images. */ if(p->input->ndim!=2) error(EXIT_FAILURE, 0, "input has %zu dimensions but Warp currently " "only works on 2D datasets (images).\n\n" "We do plan to add 3D functionality (see " "https://savannah.gnu.org/task/?15729), so please get in " "touch if you need it (any further interest, support or help " "would be useful)", p->input->ndim); /* Get basic WCS information. */ if(p->input->wcs) p->inwcsmatrix=gal_wcs_warp_matrix(p->input->wcs); /* Do all the distortion correction sanity-checks.*/ if(p->wcsalign) ui_check_options_and_arguments_wcsalign(p); } /**************************************************************/ /*************** Matrix preparations ******************/ /**************************************************************/ static void ui_error_no_warps() { error(EXIT_FAILURE, 0, "no warping specified, you can either use the " "'--matrix' option for any low-level warp, or specify multipole " "modular warpings with options like '--rotate', '--scale' and etc. " "You can see the full list with the '--help' option"); } /* This function is mainly for easy checking/debugging. */ static void ui_matrix_print(double *matrix) { printf("%-10.3f%-10.3f%-10.3f\n", matrix[0], matrix[1], matrix[2]); printf("%-10.3f%-10.3f%-10.3f\n", matrix[3], matrix[4], matrix[5]); printf("%-10.3f%-10.3f%-10.3f\n", matrix[6], matrix[7], matrix[8]); } static void ui_matrix_prepare_raw(struct warpparams *p) { size_t *dsize; double *in=p->matrix->array, *final; /* If the matrix was 2D, then convert it to 3D. Note that we done a size check when reading the matrix, so at this point, it either has 9 elements, or 4. */ if(p->matrix->size==4) { /* Allocate the final matrix. */ final=gal_pointer_allocate(GAL_TYPE_FLOAT64, 9, 0, __func__, "final"); /* Fill in the final 3x3 matrix from the 2x2 matrix. */ final[0]=in[0]; final[1]=in[1]; final[2]=0.0f; final[3]=in[2]; final[4]=in[3]; final[5]=0.0f; final[6]=0.0f; final[7]=0.0f; final[8]=1.0f; /* Free the old matrix array and put in the new one. */ free(p->matrix->array); p->matrix->size=9; p->matrix->array=final; } /* Correct the dimensional information, because the matrix was read as a single dimensional list of numbers. */ free(p->matrix->dsize); dsize=p->matrix->dsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, 2, 0, __func__, "dsize"); dsize[0]=dsize[1]=3; p->matrix->ndim=2; } static void ui_matrix_inplacw_multiply(double *in, double *with) { /* 'tin' will keep the values of the input array because we want to write the multiplication result in the input array. */ double tin[9]={in[0],in[1],in[2],in[3],in[4],in[5],in[6],in[7],in[8]}; /* For easy checking, here are the matrix/memory layouts: tin[0] tin[1] tin[2] with[0] with[1] with[2] tin[3] tin[4] tin[5] * with[3] with[4] with[5] tin[6] tin[7] tin[8] with[6] with[7] with[8] */ in[0] = tin[0]*with[0] + tin[1]*with[3] + tin[2]*with[6]; in[1] = tin[0]*with[1] + tin[1]*with[4] + tin[2]*with[7]; in[2] = tin[0]*with[2] + tin[1]*with[5] + tin[2]*with[8]; in[3] = tin[3]*with[0] + tin[4]*with[3] + tin[5]*with[6]; in[4] = tin[3]*with[1] + tin[4]*with[4] + tin[5]*with[7]; in[5] = tin[3]*with[2] + tin[4]*with[5] + tin[5]*with[8]; in[6] = tin[6]*with[0] + tin[7]*with[3] + tin[8]*with[6]; in[7] = tin[6]*with[1] + tin[7]*with[4] + tin[8]*with[7]; in[8] = tin[6]*with[2] + tin[7]*with[5] + tin[8]*with[8]; } static void ui_matrix_from_modular(struct warpparams *p) { gal_data_t *pop; size_t dsize[]={3,3}; double s, c, v1, v2, *final, module[9]={1,0,0, 0,1,0, 0,0,1}; /* Reverse the list of modular warpings to be in the same order as the user specified.*/ gal_list_data_reverse(&p->modularll); /* Allocate space for the final matrix. */ p->matrix=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 2, dsize, NULL, 0, p->cp.minmapsize, p->cp.quietmmap, NULL, NULL, NULL); final=p->matrix->array; /* Fill in the final matrix to start with. */ final[0]=1.0f; final[1]=0.0f; final[2]=0.0f; final[3]=0.0f; final[4]=1.0f; final[5]=0.0f; final[6]=0.0f; final[7]=0.0f; final[8]=1.0f; /* Apply all modular warps. */ while(p->modularll) { /* Pop the top element. */ pop=gal_list_data_pop(&p->modularll); /* Set the (possibly) two values given for this warp. */ v1 = pop->ndim ? ((double *)(pop->array))[0] : 0.0f; v2 = pop->size>1 ? ((double *)(pop->array))[1] : v1; /* Depending on the type of the modular warp do it. Recall that the code for the warp, was stored in the 'status' element of the data structure.*/ switch(pop->status) { case UI_KEY_ROTATE: s = sin( v1 * M_PI / 180 ); c = cos( v1 * M_PI / 180 ); module[0]=c; module[1]=-1.0f*s; module[2]=0.0f; module[3]=s; module[4]=c; module[5]=0.0f; module[6]=0.0f; module[7]=0.0f; module[8]=1.0f; break; case UI_KEY_SCALE: module[0]=v1; module[1]=0.0f; module[2]=0.0f; module[3]=0.0f; module[4]=v2; module[5]=0.0f; module[6]=0.0f; module[7]=0.0f; module[8]=1.0f; break; case UI_KEY_FLIP: if ( v1==1.0f && v2==0.0f ) { module[0]=1.0f; module[1]=0.0f; module[3]=0.0f; module[4]=-1.0f; } else if ( v1==0.0f && v2==1.0f ) { module[0]=-1.0f; module[1]=0.0f; module[3]=0.0f; module[4]=1.0f; } else if ( v1==1.0f && v2==1.0f ) { module[0]=-1.0f; module[1]=0.0f; module[3]=0.0f; module[4]=-1.0f; } else /* When both are zero, just in case! */ { module[0]=1.0f; module[1]=0.0f; module[3]=0.0f; module[4]=1.0f; } module[2]=0.0f; module[5]=0.0f; module[6]=0.0f; module[7]=0.0f; module[8]=1.0f; break; case UI_KEY_SHEAR: module[0]=1.0f; module[1]=v1; module[2]=0.0f; module[3]=v2; module[4]=1.0f; module[5]=0.0f; module[6]=0.0f; module[7]=0.0f; module[8]=1.0f; break; case UI_KEY_TRANSLATE: /* Translate cannot be called with '--centeroncorner'. */ if(p->centeroncorner) error(EXIT_FAILURE, 0, "'--translate' and '--centeroncorner' " "(which is a type of translation) cannot be called " "together. To achieve the effect of --centeroncorner, " "start the warp steps with a translation of 0.5 to move " "the coordinate center to the corner of a pixel in each " "dimension"); /* Build the translation matrix. */ module[0]=1.0f; module[1]=0.0f; module[2]=v1; module[3]=0.0f; module[4]=1.0f; module[5]=v2; module[6]=0.0f; module[7]=0.0f; module[8]=1.0f; break; case UI_KEY_PROJECT: module[0]=1.0f; module[1]=0.0f; module[2]=0.0f; module[3]=0.0f; module[4]=1.0f; module[5]=0.0f; module[6]=v1; module[7]=v2; module[8]=1.0f; break; default: error(EXIT_FAILURE, 0, "a bug! the code %d is not recognized as " "a valid modular warp in 'ui_matrix_from_modular', this is " "not your fault, something in the programming has gone " "wrong. Please contact us at %s so we can correct it", pop->status, PACKAGE_BUGREPORT); } /* Multiply the main matrix with this modular matrix. */ ui_matrix_inplacw_multiply(p->matrix->array, module); /* Clean up. */ gal_data_free(pop); } } static void ui_matrix_center_on_corner(struct warpparams *p) { double *b, *d, *df; double before[9]={1,0,0.5,0,1,0.5,0,0,1}; double after[9]={1,0,-0.5,0,1,-0.5,0,0,1}; /* Shift the matrix by +0.5 so the coordinate center lies at the bottom left corner of the first pixel. Note that the updated values are written into the first argument of the function.*/ ui_matrix_inplacw_multiply(before, p->matrix->array); /* Translate them back into the proper FITS center. */ ui_matrix_inplacw_multiply(before, after); /* The final matrix is in 'before', so put its values into the output matrix. */ b = before; df = (d=p->matrix->array) + p->matrix->size; do *d=*b++; while(++dmatrix) ui_matrix_prepare_raw(p); else if (p->modularll) ui_matrix_from_modular(p); else ui_error_no_warps(); /* If the user has asked for it, set the coordinate center on the corner of the first pixel. */ if(p->centeroncorner) ui_matrix_center_on_corner(p); /* Check if there are any non-normal numbers in the matrix: */ df=(d=p->matrix->array)+p->matrix->size; do if(!isfinite(*d++)) { ui_matrix_print(p->matrix->array); error(EXIT_FAILURE, 0, "%f is not a 'normal' number in the " "input matrix shown above", *(d-1)); } while(dmatrix->array; if( d[0]*d[4]*d[8] + d[1]*d[5]*d[6] + d[2]*d[3]*d[7] - d[2]*d[4]*d[6] - d[1]*d[3]*d[8] - d[0]*d[5]*d[7] == 0 ) error(EXIT_FAILURE, 0, "the determinant of the given matrix " "is zero"); /* Not yet implemented: Check if the transformation is spatially invariant, in other words, if it differs between differet regions of the output. If it doesn't we can use this information for a more efficient processing. */ /* Make the inverse matrix: */ inv=p->inverse=gal_pointer_allocate(GAL_TYPE_FLOAT64, 9, 0, __func__, "p->inverse"); inv[0] = d[4]*d[8] - d[5]*d[7]; inv[1] = d[2]*d[7] - d[1]*d[8]; inv[2] = d[1]*d[5] - d[2]*d[4]; inv[3] = d[5]*d[6] - d[3]*d[8]; inv[4] = d[0]*d[8] - d[2]*d[6]; inv[5] = d[2]*d[3] - d[0]*d[5]; inv[6] = d[3]*d[7] - d[4]*d[6]; inv[7] = d[1]*d[6] - d[0]*d[7]; inv[8] = d[0]*d[4] - d[1]*d[3]; /* Just for a test: { size_t i; printf("\nInput matrix:"); for(i=0;i<9;++i) { if(i%3==0) printf("\n"); printf("%-10.5f", d[i]); } printf("\n-----------\n"); printf("Inverse matrix:"); for(i=0;i<9;++i) { if(i%3==0) printf("\n"); printf("%-10.5f", inv[i]); } printf("\n\n"); } */ } /**************************************************************/ /************ General preparations ****************/ /**************************************************************/ /* When only one transformation is required, set the suffix for automatic output to more meaningful string. */ char * ui_set_suffix(struct warpparams *p) { /* Return the suffix as soon as nonlinear mode is detected. Just ignore the rest. */ if(p->wcsalign) return "_aligned.fits"; /* A small independent sanity check: we either need a matrix or at least one modular warping. */ if(p->matrix==NULL && p->modularll==NULL) ui_error_no_warps(); /* We only want the more meaningful suffix when the list is defined AND when its only has one node (the 'next' element is NULL). */ if(p->matrix==NULL && p->modularll->next==NULL) switch(p->modularll->status) { case UI_KEY_ROTATE: return "_rotated.fits"; case UI_KEY_SCALE: return "_scaled.fits"; case UI_KEY_FLIP: return "_flipped.fits"; case UI_KEY_SHEAR: return "_sheared.fits"; case UI_KEY_TRANSLATE: return "_translated.fits"; case UI_KEY_PROJECT: return "_projected.fits"; default: error(EXIT_FAILURE, 0, "a bug! please contact us at %s so we can " "fix the problem. The modular warp code %d is not recognized " "in 'ui_set_suffix'", PACKAGE_BUGREPORT, p->modularll->status); return NULL; } else return "_warped.fits"; } static void ui_preparations(struct warpparams *p) { /* Set the output name. This needs to be done before 'ui_finalize_matrix' because that function will free the linked list of modular warpings which we will need to determine the suffix if no output name is specified. */ if(p->cp.output) gal_checkset_writable_remove(p->cp.output, p->inputname, 0, p->cp.dontdelete); else p->cp.output=gal_checkset_automatic_output(&p->cp, p->inputname, ui_set_suffix(p)); /* Prepare the final warping matrix if in linear mode. */ if(p->wcsalign == 0) ui_matrix_finalize(p); } /**************************************************************/ /************ Set the parameters *************/ /**************************************************************/ void ui_read_check_inputs_setup(int argc, char *argv[], struct warpparams *p) { double *matrix; uint8_t disttype; struct gal_options_common_params *cp=&p->cp; /* Include the parameters necessary for argp from this program ('args.h') and for the common options to all Gnuastro ('commonopts.h'). We want to directly put the pointers to the fields in 'p' and 'cp', so we are simply including the header here to not have to use long macros in those headers which make them hard to read and modify. This also helps in having a clean environment: everything in those headers is only available within the scope of this function. */ #include #include "args.h" /* Initialize the options and necessary information. */ ui_initialize_options(p, program_options, gal_commonopts_options); /* Read the command-line options and arguments. */ errno=0; if(argp_parse(&thisargp, argc, argv, 0, 0, p)) error(EXIT_FAILURE, errno, "parsing arguments"); /* Read the configuration files and set the common values. */ gal_options_read_config_set(&p->cp); /* Print the option values if asked. Note that this needs to be done after the option checks so un-sane values are not printed in the output state. */ gal_options_print_state(&p->cp); /* Prepare all the options as FITS keywords to write in output later. */ gal_options_as_fits_keywords(&p->cp); /* Check that the options and arguments fit well with each other. Note that arguments don't go in a configuration file. So this test should be done after (possibly) printing the option values. */ ui_check_options_and_arguments(p); /* Read/allocate all the necessary starting arrays. */ ui_preparations(p); /* Everything is ready, notify the user of the program starting. */ if(!p->cp.quiet) { printf(PROGRAM_NAME" "PACKAGE_VERSION" started on %s", ctime(&p->rawtime)); printf(" Using %zu CPU thread%s\n", p->cp.numthreads, p->cp.numthreads==1 ? "." : "s."); printf(" Input: %s (hdu: %s)\n", p->inputname, p->cp.hdu); if(p->gridfile) printf(" Pixel grid: %s (hdu %s)\n", p->gridfile, p->gridhdu); if(p->wcsalign) { disttype=gal_wcs_distortion_identify(p->input->wcs); if(disttype!=GAL_WCS_DISTORTION_INVALID) printf(" matrix: '%s' distortion from WCS of input.\n", gal_wcs_distortion_name_from_id(disttype)); } else { matrix=p->matrix->array; printf(" matrix:" "\n\t% .4f % .4f % .4f" "\n\t% .4f % .4f % .4f" "\n\t% .4f % .4f % .4f\n", matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5], matrix[6], matrix[7], matrix[8]); } } } /**************************************************************/ /************ Free allocated, report *************/ /**************************************************************/ void ui_free_report(struct warpparams *p, struct timeval *t1) { gal_warp_wcsalign_t *wa=&p->wa; /* Free allocated datasets and arrays. */ if(p->inverse) free(p->inverse); if(p->gridhdu) free(p->gridhdu); if(p->gridfile) free(p->gridfile); if(p->matrix) gal_data_free(p->matrix); if(p->inwcsmatrix) free(p->inwcsmatrix); if(p->modularll) gal_data_free(p->modularll); if(wa->input) wa->input=NULL; /* Prevent double freeing (done below). */ if(wa->twcs) gal_wcs_free(wa->twcs); if(wa->cdelt) gal_data_free(wa->cdelt); if(wa->ctype) gal_data_free(wa->ctype); if(wa->center) gal_data_free(wa->center); if(wa->widthinpix) gal_data_free(wa->widthinpix); free(p->cp.hdu); free(p->cp.output); gal_data_free(p->input); /* The output might contain a 'MAX-FRAC' HDU, don't miss it. */ gal_list_data_free(p->output); /* Report how long the operation took. */ if(!p->cp.quiet) gal_timing_report(t1, PROGRAM_NAME" finished in: ", 0); } gnuastro-0.22/bin/warp/warp.c0000644000175000017500000004702314551337306011633 /********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Corresponding author: Mohammad Akhlaghi Contributing author(s): Pedram Ashofteh-Ardakani Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "main.h" #include "warp.h" /***************************************************************/ /************** MACROS ******************/ /***************************************************************/ /* Multiply a 2 element vector with a transformation matrix and put the result in the 2 element output array. It is assumed that the input is from a flat coordinate system. */ #define WARP_MAPPOINT(V, T, O) \ { \ (O)[0]=( ( (T)[0]*(V)[0] + (T)[1]*(V)[1] + (T)[2] ) \ / ( (T)[6]*(V)[0] + (T)[7]*(V)[1] + (T)[8] ) ); \ (O)[1]=( ( (T)[3]*(V)[0] + (T)[4]*(V)[1] + (T)[5] ) \ / ( (T)[6]*(V)[0] + (T)[7]*(V)[1] + (T)[8] ) ); \ } \ /***************************************************************/ /************** Processing function ******************/ /***************************************************************/ static void * warp_onthread_linear(void *inparam) { struct gal_threads_params *tprm=(struct gal_threads_params *)inparam; struct warpparams *p=(struct warpparams *)tprm->params; size_t *extinds=p->extinds, *ordinds=p->ordinds; long is0=p->input->dsize[0], is1=p->input->dsize[1]; double area, filledarea, *input=p->input->array, v=NAN; size_t i, j, ind, os1=p->output->dsize[1], numcrn, numinput; long x, y, xstart, xend, ystart, yend; /* Might be negative */ double ocrn[8], icrn_base[8], icrn[8], *output=p->output->array; double pcrn[8], *outfpixval=p->outfpixval, ccrn[GAL_POLYGON_MAX_CORNERS]; for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { ind=tprm->indexs[i]; /* Initialize the output pixel value: */ numinput=0; output[ind]=filledarea=0.0f; /* Set the corners of this output pixel. The ind/os1 and ind%os1 start from 0. Note that the outfpixval already contains the correction for the fact that the FITS standard considers the center of first pixel to be at (1.0f, 1.0f).*/ ocrn[0]=(double)(ind%os1)-0.5f+outfpixval[0]; ocrn[1]=(double)(ind/os1)-0.5f+outfpixval[1]; ocrn[2]=(double)(ind%os1)+0.5f+outfpixval[0]; ocrn[3]=(double)(ind/os1)-0.5f+outfpixval[1]; ocrn[4]=(double)(ind%os1)-0.5f+outfpixval[0]; ocrn[5]=(double)(ind/os1)+0.5f+outfpixval[1]; ocrn[6]=(double)(ind%os1)+0.5f+outfpixval[0]; ocrn[7]=(double)(ind/os1)+0.5f+outfpixval[1]; /* Transform the four corners of the output pixel to the input image coordinates. */ for(j=0;j<4;++j) WARP_MAPPOINT(&ocrn[j*2], p->inverse, &icrn_base[j*2]); /* Using the known relationships between the vertice locations, put everything in the right place: */ xstart = GAL_DIMENSION_NEARESTINT_HALFHIGHER( icrn_base[extinds[0]] ); xend = GAL_DIMENSION_NEARESTINT_HALFLOWER( icrn_base[extinds[1]] ) + 1; ystart = GAL_DIMENSION_NEARESTINT_HALFHIGHER( icrn_base[extinds[2]] ); yend = GAL_DIMENSION_NEARESTINT_HALFLOWER( icrn_base[extinds[3]] ) + 1; icrn[0]=icrn_base[ordinds[0]*2]; icrn[1]=icrn_base[ordinds[0]*2+1]; icrn[2]=icrn_base[ordinds[1]*2]; icrn[3]=icrn_base[ordinds[1]*2+1]; icrn[4]=icrn_base[ordinds[2]*2]; icrn[5]=icrn_base[ordinds[2]*2+1]; icrn[6]=icrn_base[ordinds[3]*2]; icrn[7]=icrn_base[ordinds[3]*2+1]; /* For a check: if(ind==9999) { printf("\n\n\nind: %zu: (%zu, %zu):\n", ind, ind%os1+1, ind/os1+1); for(j=0;j<4;++j) printf("(%.3f, %.3f) --> (%.3f, %.3f)\n", ocrn[j*2], ocrn[j*2+1], icrn_base[j*2], icrn_base[j*2+1]); printf("------- Ordered -------\n"); for(j=0;j<4;++j) printf("(%.3f, %.3f)\n", icrn[j*2], icrn[j*2+1]); printf("------- Start and ending pixels -------\n"); printf("X: %ld -- %ld\n", xstart, xend); printf("Y: %ld -- %ld\n", ystart, yend); } */ /* Go over all the input pixels that are covered. Note that x and y are the centers of the pixel. */ for(y=ystart;yis0 ) continue; pcrn[1]=y-0.5f; pcrn[3]=y-0.5f; pcrn[5]=y+0.5f; pcrn[7]=y+0.5f; for(x=xstart;xis1 ) continue; /* Read the value of the input pixel. */ v=input[(y-1)*is1+x-1]; pcrn[0]=x-0.5f; pcrn[2]=x+0.5f; pcrn[4]=x+0.5f; pcrn[6]=x-0.5f; /* Find the overlapping (clipped) polygon: */ gal_polygon_clip(icrn, 4, pcrn, 4, ccrn, &numcrn); area=gal_polygon_area_flat(ccrn, numcrn); /* Add the fractional value of this pixel. If this output pixel covers a NaN pixel in the input grid, then calculate the area of this NaN pixel to account for it later. */ if( !isnan(v) ) { ++numinput; filledarea+=area; output[ind]+=v*area; } /* For a polygon check: if(ind==9999) { printf("%zu -- (%zd, %zd):\n", ind, x, y); printf("icrn:\n"); for(j=0;j<4;++j) printf("\t%.3f, %.3f\n", icrn[j*2], icrn[j*2+1]); printf("pcrn:\n"); for(j=0;j<4;++j) printf("\t%.3f, %.3f\n", pcrn[j*2], pcrn[j*2+1]); printf("ccrn:\n"); for(j=0;j (%zu) %f\n", v*gal_polygon_area(ccrn, numcrn), numinput, output[ind]); */ } } /* See if the pixel value should be set to NaN or not (because of not enough coverage). */ if(numinput && filledarea/p->opixarea < p->coveredfrac-1e-5) numinput=0; /* Write the final value to disk: */ if(numinput==0) output[ind]=NAN; } /* Wait for all the other threads to finish, then return. */ if(tprm->b) { pthread_barrier_wait(tprm->b); } return NULL; } /***************************************************************/ /************** Preparations ******************/ /***************************************************************/ /* Do all the preparations. Make the output array. We transform the four corners of the image into the output space. To find the four sides of the image. About fpixel and lpixel. The point is that we don't want to spend time, transforming any pixels which we know will not be in the input image. Find the proper order of transformed pixel corners from the output array to the input array. The order is fixed for all the pixels in the image altough the scale might change. */ static void warp_linear_init(struct warpparams *p) { double is0=p->input->dsize[0], is1=p->input->dsize[1]; double output[8], forarea[8]; double *matrix=p->matrix->array; double icrn[8]={0,0,0,0,0,0,0,0}; size_t i, *extinds=p->extinds, dsize[2]; double xmin=DBL_MAX, xmax=-DBL_MAX, ymin=DBL_MAX, ymax=-DBL_MAX; double ocrn[8]={0.5f,0.5f, 1.5f,0.5f, 0.5f,1.5f, 1.5f, 1.5f}; double input[8]={ 0.5f, 0.5f, is1+0.5f, 0.5f, 0.5f, is0+0.5f, is1+0.5f, is0+0.5f }; /* Find the range of pixels of the input image. All the input positions are moved to the negative by half a pixel since the center of the pixel is an integer value.*/ for(i=0;i<4;++i) { WARP_MAPPOINT(&input[i*2], matrix, &output[i*2]); if(output[i*2]xmax) xmax = output[i*2]; if(output[i*2+1]ymax) ymax = output[i*2+1]; } /* For a check: for(i=0;i<4;++i) printf("(%.3f, %.3f) --> (%.3f, %.3f)\n", input[i*2], input[i*2+1], output[i*2], output[i*2+1]); printf("xmin: %.3f\nxmax: %.3f\nymin: %.3f\nymax: %.3f\n", xmin, xmax, ymin, ymax); */ /* Set the final size of the image. The X axis is horizontal. The reason we are using the halflower variation of 'nearestint' for the maximums is that these points are the farthest extremes of the input image. If they are half a pixel value, they should point to the pixel before. */ dsize[1] = GAL_DIMENSION_NEARESTINT_HALFLOWER(xmax) \ - GAL_DIMENSION_NEARESTINT_HALFHIGHER(xmin)+1; dsize[0] = GAL_DIMENSION_NEARESTINT_HALFLOWER(ymax) \ - GAL_DIMENSION_NEARESTINT_HALFHIGHER(ymin)+1; p->outfpixval[0]=GAL_DIMENSION_NEARESTINT_HALFHIGHER(xmin); p->outfpixval[1]=GAL_DIMENSION_NEARESTINT_HALFHIGHER(ymin); /* If we have translation, the 'dsize's and 'outfpixval's should be corrected. Note that centeroncorner is also a translation operation, but in that scenario, we don't want this feature! */ if( p->centeroncorner==0 && (matrix[2]!=0.0f || matrix[5]!=0.0f) ) { dsize[1] += abs( (int)(matrix[2]) )+1; /* (int): avoid warnings. */ dsize[0] += abs( (int)(matrix[5]) )+1; if(xmin>0) p->outfpixval[0]=0; if(ymin>0) p->outfpixval[1]=0; } /* For a check: printf("Wrapped:\n"); printf("dsize [C]: (%zu, %zu)\n", dsize[0], dsize[1]); printf("outfpixval [FITS]: (%.4f, %.4f)\n", p->outfpixval[0], p->outfpixval[1]); */ /* We now know the size of the output and the starting and ending coordinates in the output image (bottom left corners of pixels) for the transformation. */ p->output=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 2, dsize, p->input->wcs, 0, p->cp.minmapsize, p->cp.quietmmap, "Warped", p->input->unit, NULL); /* Order the corners of the inverse-transformed pixel (from the output to the input) in an anti-clockwise transformation. In a general homographic transform, the scales of the output pixels may change, but the relative positions of the corners will not. */ for(i=0;i<4;++i) { ocrn[i*2] += p->outfpixval[0]; ocrn[i*2+1] += p->outfpixval[1]; WARP_MAPPOINT(&ocrn[i*2], p->inverse, &icrn[i*2]); } /* Order the transformed output pixel. */ gal_polygon_vertices_sort_convex(icrn, 4, p->ordinds); /* Find the area of the output pixel in units of the input pixel, this is necessary if we are going to have NAN pixels in the image to account for the area lost due to a NAN value. */ for(i=0;i<4;++i) { forarea[2*i]=icrn[2*p->ordinds[i]]; forarea[2*i+1]=icrn[2*p->ordinds[i]+1]; } p->opixarea=gal_polygon_area_flat(forarea, 4); /* Find which index after transformation will have the minimum and maximum positions along the two axises. We can't use the starting loop because that is based on the input image which can be not-a-square! So we do it here where pixels are squares. */ xmin=DBL_MAX; xmax=-DBL_MAX; ymin=DBL_MAX; ymax=-DBL_MAX; for(i=0;i<4;++i) { if(icrn[i*2]xmax) { xmax=icrn[i*2]; extinds[1]=i*2; } if(icrn[i*2+1]ymax) { ymax=icrn[i*2+1]; extinds[3]=i*2+1; } } /* For a check: for(i=0;i<4;++i) printf("(%.3f, %.3f) --> (%.3f, %.3f)\n", ocrn[i*2], ocrn[i*2+1], icrn[i*2], icrn[i*2+1]); printf("xmin: %.3f\nxmax: %.3f\nymin: %.3f\nymax: %.3f\n", xmin, xmax, ymin, ymax); */ } static void warp_write_to_file(struct warpparams *p, int hasmatrix) { size_t i; gal_data_t *tmp=NULL; char keyword[9*FLEN_KEYWORD]; gal_fits_list_key_t *headers=NULL; double *m= hasmatrix ? p->matrix->array : NULL; /* Add the appropriate headers: */ gal_fits_key_write_filename("INF", p->inputname, &headers, 0, p->cp.quiet); if(hasmatrix) for(i=0;i<9;++i) { sprintf(&keyword[i*FLEN_KEYWORD], "WMTX%zu_%zu", i/3+1, i%3+1); gal_fits_key_list_add_end(&headers, GAL_TYPE_FLOAT64, &keyword[i*FLEN_KEYWORD], 0, &m[i], 0, "Warp matrix element value", 0, NULL, 0); } /* Convert the output image if needed. */ if(p->cp.type && p->cp.type!=p->output->type) p->output=gal_data_copy_to_new_type_free(p->output, p->cp.type); /* Save the output and 'MAX-FRAC' if available. */ for(tmp=p->output;tmp!=NULL;tmp=tmp->next) gal_fits_img_write(tmp, p->cp.output, NULL, 0); /* Write the configuration keywords on HDU/extension '0'. */ gal_fits_key_write_filename("input", p->inputname, &p->cp.ckeys, 1, p->cp.quiet); gal_fits_key_write(p->cp.ckeys, p->cp.output, "0", "NONE", 1, 0); /* Write headers on HDU/extension '1'. */ gal_fits_key_write(headers, p->cp.output, "1", "NONE", 1, 0); } /* Correct the WCS coordinates (Multiply the 2x2 PC matrix of the WCS structure by the INVERSE of the transform in 2x2). Then Multiply the crpix array with the ACTUAL transformation matrix. */ void warp_write_wcs_linear(struct warpparams *p) { double tcrpix[3], *ps; double *m=p->matrix->array, diff; struct wcsprm *wcs=p->output->wcs; double *crpix=wcs?wcs->crpix:NULL, *w=p->inwcsmatrix; /* 'tinv' is the 2 by 2 inverse matrix. Recall that 'p->inverse' is 3 by 3 to account for homogeneous coordinates. */ double tinv[4]={p->inverse[0]/p->inverse[8], p->inverse[1]/p->inverse[8], p->inverse[3]/p->inverse[8], p->inverse[4]/p->inverse[8]}; /* Make the WCS corrections if necessary. */ if(wcs) { if(p->keepwcs==0) { /* Correct the input WCS matrix. Since we are re-writing the PC matrix from the full rotation matrix (including pixel scale), we'll also have to set the CDELT fields to 1. Just to be sure that the PC matrix is used in the end by WCSLIB, we'll also set altlin to 1.*/ wcs->altlin=1; wcs->cdelt[0] = wcs->cdelt[1] = 1.0f; wcs->pc[0] = w[0]*tinv[0] + w[1]*tinv[2]; wcs->pc[1] = w[0]*tinv[1] + w[1]*tinv[3]; wcs->pc[2] = w[2]*tinv[0] + w[3]*tinv[2]; wcs->pc[3] = w[2]*tinv[1] + w[3]*tinv[3]; /* Correct the CRPIX point. The +1 in the end of the last two lines is because FITS counts from 1. */ tcrpix[0] = m[0]*crpix[0]+m[1]*crpix[1]+m[2]; tcrpix[1] = m[3]*crpix[0]+m[4]*crpix[1]+m[5]; tcrpix[2] = m[6]*crpix[0]+m[7]*crpix[1]+m[8]; crpix[0] = tcrpix[0]/tcrpix[2] - p->outfpixval[0] + 1; crpix[1] = tcrpix[1]/tcrpix[2] - p->outfpixval[1] + 1; } /* Due to floating point errors extremely small values of PC matrix can be set to zero and extremely small differences between PC1_1 and PC2_2 can be ignored. The reason for all the 'fabs' functions is because the signs are usually different.*/ if( fabs(wcs->pc[1])pc[1]=0.0f; if( fabs(wcs->pc[2])pc[2]=0.0f; ps=gal_wcs_pixel_scale(wcs); diff=fabs(wcs->pc[0])-fabs(wcs->pc[3]); if( fabs(diff/ps[0])pc[3]=( (wcs->pc[3] < 0.0f ? -1.0f : 1.0f) * fabs(wcs->pc[0]) ); } /* Write the final keywords and the file. */ warp_write_to_file(p, 1); } /***************************************************************/ /************** Top-level function ******************/ /***************************************************************/ void warp(struct warpparams *p) { struct timeval t0; gal_warp_wcsalign_t *wa=&p->wa; /* Do the preparations and set the pointers to the functions to use. */ if( p->wcsalign ) { /* Calculate and allocate the output image size and WCS. */ if(!p->cp.quiet) { gal_timing_report(NULL, "Initializing the output image...", 1); gettimeofday(&t0, NULL); } gal_warp_wcsalign_init(wa); /* Fill the output image. */ if(!p->cp.quiet) { gal_timing_report(&t0, "Done", 2); gal_timing_report(NULL, "Warping the input image...", 1); gettimeofday(&t0, NULL); } gal_threads_spin_off(gal_warp_wcsalign_onthread, wa, wa->output->size, wa->numthreads, wa->input->minmapsize, wa->input->quietmmap); if(!p->cp.quiet) gal_timing_report(&t0, "Done", 2); p->output=wa->output; wa->output=NULL; /* must be here! */ gal_warp_wcsalign_free(wa); /* Write the final keywords and the file. */ warp_write_to_file(p, 0); } else { warp_linear_init(p); /* Fill the output image */ gal_threads_spin_off(warp_onthread_linear, p, p->output->size, p->cp.numthreads, p->cp.minmapsize, p->cp.quietmmap); /* Fix the linear matrix before saving the output image to disk. */ warp_write_wcs_linear(p); } /* Print the created files. */ if(!p->cp.quiet) { printf(" Output: %s%s\n", p->cp.output, p->wa.checkmaxfrac?" (containing two HDUs):":""); if(p->wa.checkmaxfrac) printf(" - "GAL_WARP_OUTPUT_NAME_WARPED": Warped output.\n" " - "GAL_WARP_OUTPUT_NAME_MAXFRAC": Moire pattern " "(actived by '--checkmaxfrac').\n"); } } gnuastro-0.22/bin/warp/main.h0000644000175000017500000000660114551337306011610 /********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Pedram Ashofteh-Ardakani Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef MAIN_H #define MAIN_H /* Include necessary headers */ #include #include #include /* Progarm names. */ #define PROGRAM_NAME "Warp" /* Program full name. */ #define PROGRAM_EXEC "astwarp" /* Program executable name. */ #define PROGRAM_STRING PROGRAM_NAME" (" PACKAGE_NAME ") " PACKAGE_VERSION /* Main program structure. */ struct warpparams { /* From command-line */ struct gal_options_common_params cp; /* Common parameters. */ gal_warp_wcsalign_t wa; /* Nonlinear-specific parameters. */ char *inputname; /* Name of input file. */ size_t hstartwcs; /* Header keyword No. to start reading WCS. */ size_t hendwcs; /* Header keyword No. to end reading WCS. */ uint8_t keepwcs; /* Wrap the warped/transfomed pixels. */ uint8_t centeroncorner; /* Shift center by 0.5 before and after. */ double coveredfrac; /* Acceptable fraction of output covered. */ gal_data_t *width; /* Width of final image. */ uint8_t widthinpix; /* If the given width is in units of pixels. */ char *gridhdu; /* Extension to use for output's WCS. */ char *gridfile; /* File to use for output's WCS. */ /* Internal parameters: */ gal_data_t *input; /* Input data structure. */ gal_data_t *output; /* output data structure. */ gal_data_t *matrix; /* Warp/Transformation matrix. */ gal_data_t *modularll; /* List of modular warpings. */ double *inwcsmatrix; /* Input WCS matrix. */ double *inverse; /* Inverse of the input matrix. */ time_t rawtime; /* Starting time of the program. */ size_t ordinds[4]; /* Indexs of anticlockwise vertices. */ size_t extinds[4]; /* Indexs of the minimum and maximum values. */ double outfpixval[2]; /* Pixel value of first output pixel. */ double opixarea; /* Area of output pix in units of input pix. */ uint8_t wcsalign; /* If warp must work in WCS-align mode. */ uint8_t distortiontype; /* Store distortion type in nonlinear mode. */ }; #endif gnuastro-0.22/bin/warp/authors-cite.h0000644000175000017500000000304714551337306013274 /********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef AUTHORS_CITE_H #define AUTHORS_CITE_H /* When any specific citation is necessary, please add its BibTeX (from ADS hopefully) to this variable along with a title decribing what this paper/book does for the progarm in a short line. In the following line put a row of '-' with the same length and then put the BibTeX. This macro will be used in 'gal_options_print_citation' function of 'lib/options.c' (from the top Gnuastro source code directory). */ #define PROGRAM_BIBTEX "" #define PROGRAM_AUTHORS "Mohammad Akhlaghi and Pedram Ashofteh-Ardakani" #endif gnuastro-0.22/bin/warp/args.h0000644000175000017500000002015614551337306011621 /********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Pedram Ashofteh-Ardakani Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef ARGS_H #define ARGS_H /* Array of acceptable options. */ struct argp_option program_options[] = { /* Input. */ { "hstartwcs", UI_KEY_HSTARTWCS, "INT", 0, "Header keyword number to start reading WCS.", GAL_OPTIONS_GROUP_INPUT, &p->hstartwcs, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "hendwcs", UI_KEY_HENDWCS, "INT", 0, "Header keyword number to end reading WCS.", GAL_OPTIONS_GROUP_INPUT, &p->hendwcs, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Output. */ { "keepwcs", UI_KEY_KEEPWCS, 0, 0, "Do not apply warp to input's WCS", GAL_OPTIONS_GROUP_OUTPUT, &p->keepwcs, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "coveredfrac", UI_KEY_COVEREDFRAC, "FLT", 0, "Acceptable fraction of output pixel covered.", GAL_OPTIONS_GROUP_OUTPUT, &p->coveredfrac, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Align with WCS coordinates (correcting distortion, default mode)", UI_GROUP_ALIGN }, { "center", UI_KEY_CENTER, "FLT,FLT", 0, "Center coordinate of the output image in RA,DEC.", UI_GROUP_ALIGN, &p->wa.center, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "width", UI_KEY_WIDTH, "INT,INT", 0, "Output image size in both dimensions.", UI_GROUP_ALIGN, &p->width, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "widthinpix", UI_KEY_WIDTHINPIX, 0, 0, "--width is in pixels, not in WCS coordinates.", UI_GROUP_ALIGN, &p->widthinpix, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "ctype", UI_KEY_CTYPE, "STR[,STR]", 0, "FITS standard CTYPE value (e.g., 'RA---TAN').", UI_GROUP_ALIGN, &p->wa.ctype, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_strings }, { "cdelt", UI_KEY_CDELT, "FLT[,FLT]", 0, "Pixel scale of output (usually degrees/pixel).", UI_GROUP_ALIGN, &p->wa.cdelt, GAL_TYPE_FLOAT64, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_csv_float64 }, { "edgesampling", UI_KEY_EDGESAMPLING, "INT", 0, "Number of extra samplings in pixel sides.", UI_GROUP_ALIGN, &p->wa.edgesampling, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_MANDATORY, GAL_OPTIONS_NOT_SET, }, { "gridfile", UI_KEY_GRIDFILE, "FITS", 0, "File to use for output grid.", UI_GROUP_ALIGN, &p->gridfile, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "gridhdu", UI_KEY_GRIDHDU, "STR", 0, "HDU/extension to use for output grid.", UI_GROUP_ALIGN, &p->gridhdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checkmaxfrac", UI_KEY_CHECKMAXFRAC, 0, 0, "Moire pattern: Max.frac. input pixels on output.", UI_GROUP_ALIGN, &p->wa.checkmaxfrac, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Linear warps (must be called explicitly on command-line)", UI_GROUP_WARPS }, { "rotate", UI_KEY_ROTATE, "FLT", 0, "Rotate by the given angle in degrees.", UI_GROUP_WARPS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "scale", UI_KEY_SCALE, "FLT[,FLT]", 0, "Scale along the given axis(es).", UI_GROUP_WARPS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "flip", UI_KEY_FLIP, "INT[,INT]", 0, "Flip along the given axis(es).", UI_GROUP_WARPS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "shear", UI_KEY_SHEAR, "FLT[,FLT]", 0, "Shear along the given axis(es).", UI_GROUP_WARPS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "translate", UI_KEY_TRANSLATE, "FLT[,FLT]", 0, "Translate along the given axis(es).", UI_GROUP_WARPS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "project", UI_KEY_PROJECT, "FLT[,FLT]", 0, "Project along the given axis(es).", UI_GROUP_WARPS, 0, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "matrix", UI_KEY_MATRIX, "STR", 0, "Raw transformation matrix, highest priority.", UI_GROUP_WARPS, &p->matrix, GAL_TYPE_INVALID, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, ui_add_to_modular_warps_ll }, { "centeroncorner", UI_KEY_CENTERONCORNER, 0, 0, "Center of coordinates on first pixel corner.", UI_GROUP_WARPS, &p->centeroncorner, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, {0} }; /* Define the child argp structure. */ struct argp gal_options_common_child = {gal_commonopts_options, gal_options_common_argp_parse, NULL, NULL, NULL, NULL, NULL}; /* Use the child argp structure in list of children (only one for now). */ struct argp_child children[]= { {&gal_options_common_child, 0, NULL, 0}, {0, 0, 0, 0} }; /* Set all the necessary argp parameters. */ struct argp thisargp = {program_options, parse_opt, args_doc, doc, children, NULL, NULL}; #endif gnuastro-0.22/bin/warp/ui.h0000644000175000017500000000447114551337306011304 /********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Pedram Ashofteh-Ardakani Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef UI_H #define UI_H /* For common options groups. */ #include /* Option groups particular to this program. */ enum program_args_groups { UI_GROUP_ALIGN = GAL_OPTIONS_GROUP_AFTER_COMMON, UI_GROUP_WARPS }; /* Available letters for short options: a b d g i j l n u v z A B E J L O Q R W X Y */ enum option_keys_enum { /* With short-option version. */ UI_KEY_KEEPWCS = 'k', UI_KEY_COVEREDFRAC = 'C', UI_KEY_ROTATE = 'r', UI_KEY_SCALE = 's', UI_KEY_FLIP = 'f', UI_KEY_SHEAR = 'e', UI_KEY_TRANSLATE = 't', UI_KEY_PROJECT = 'p', UI_KEY_MATRIX = 'm', UI_KEY_CDELT = 'x', UI_KEY_INTERPSAMPLING = 'y', UI_KEY_CENTER = 'c', UI_KEY_WIDTH = 'w', UI_KEY_GRIDFILE = 'G', UI_KEY_GRIDHDU = 'H', /* Only with long version (start with a value 1000, the rest will be set automatically). */ UI_KEY_CENTERONCORNER = 1000, UI_KEY_CHECKMAXFRAC, UI_KEY_EDGESAMPLING, UI_KEY_WIDTHINPIX, UI_KEY_HSTARTWCS, UI_KEY_HENDWCS, UI_KEY_CTYPE, }; /* Functions */ void ui_read_check_inputs_setup(int argc, char *argv[], struct warpparams *p); void ui_free_report(struct warpparams *p, struct timeval *t1); #endif gnuastro-0.22/bin/warp/warp.h0000644000175000017500000000277714551337306011647 /********************************************************************* Warp - Warp images using projective mapping. Warp is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see . **********************************************************************/ #ifndef IMGTRANSFORM_H #define IMGTRANSFORM_H #include /* Limits to account for floating point errors: */ #define ABSOLUTEFLTERROR 1e-10 #define RELATIVEFLTERROR 1e-6 /* Internal structure. */ struct iwpparams { /* General input parameters: */ struct warpparams *p; /* Thread parameters. */ size_t *indexs; /* Indexs to be used in this thread. */ pthread_barrier_t *b; /* Barrier to keep threads waiting. */ }; /* Extenal functions. */ void warp(struct warpparams *p); #endif gnuastro-0.22/bin/script/0000755000175000017500000000000014557514203011122 5gnuastro-0.22/bin/script/Makefile.am0000644000175000017500000001001114551337306013070 ## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi ## Contributing author(s): ## Copyright (C) 2019-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see . # Data files (necessary for various components like desktop files for GUIs # or Makefiles that are called within scripts). pkgdata_DATA = zeropoint.mk \ pointing-simulate.mk \ astscript-fits-view.desktop astscript-fits-view.desktop: $(srcdir)/fits-view.desktop.desktop Makefile sed -e 's|@PREFIX[@]|$(exec_prefix)|g' \ $(srcdir)/fits-view.desktop.desktop > $@ ## List of programs (scripts in this directory) to install under the ## 'prefix/bin' directory ('bin_SCRIPTS'), files necessary to distribute ## with the tarball ('EXTRA_DIST') and output files (to be cleaned with ## 'make clean'). bin_SCRIPTS = astscript-fits-view \ astscript-psf-unite \ astscript-psf-stamp \ astscript-zeropoint \ astscript-ds9-region \ astscript-psf-subtract \ astscript-sort-by-night \ astscript-radial-profile \ astscript-color-faint-gray \ astscript-psf-scale-factor \ astscript-psf-select-stars \ astscript-pointing-simulate EXTRA_DIST = fits-view.sh \ psf-unite.sh \ psf-stamp.sh \ zeropoint.sh \ zeropoint.mk \ ds9-region.sh \ psf-subtract.sh \ sort-by-night.sh \ radial-profile.sh \ color-faint-gray.sh \ psf-select-stars.sh \ psf-scale-factor.sh \ pointing-simulate.sh \ pointing-simulate.mk \ fits-view.desktop.desktop CLEANFILES = $(bin_SCRIPTS) \ astscript-fits-view.desktop ## Command to do basic substitutions (anything surrounded by an '@'). do_subst = sed -e 's,[@]PREFIX[@],$(exec_prefix),g' \ -e 's,[@]VERSION[@],$(VERSION),g' \ -e 's,[@]SCRIPT_NAME[@],$@,g' ## Rules to install the scripts. astscript-color-faint-gray: color-faint-gray.sh Makefile $(do_subst) < $(srcdir)/color-faint-gray.sh > $@ chmod +x $@ astscript-ds9-region: ds9-region.sh Makefile $(do_subst) < $(srcdir)/ds9-region.sh > $@ chmod +x $@ astscript-fits-view: fits-view.sh Makefile $(do_subst) < $(srcdir)/fits-view.sh > $@ chmod +x $@ astscript-pointing-simulate: pointing-simulate.sh Makefile $(do_subst) < $(srcdir)/pointing-simulate.sh > $@ chmod +x $@ astscript-psf-unite: psf-unite.sh Makefile $(do_subst) < $(srcdir)/psf-unite.sh > $@ chmod +x $@ astscript-psf-stamp: psf-stamp.sh Makefile $(do_subst) < $(srcdir)/psf-stamp.sh > $@ chmod +x $@ astscript-psf-scale-factor: psf-scale-factor.sh Makefile $(do_subst) < $(srcdir)/psf-scale-factor.sh > $@ chmod +x $@ astscript-psf-select-stars: psf-select-stars.sh Makefile $(do_subst) < $(srcdir)/psf-select-stars.sh > $@ chmod +x $@ astscript-psf-subtract: psf-subtract.sh Makefile $(do_subst) < $(srcdir)/psf-subtract.sh > $@ chmod +x $@ astscript-radial-profile: radial-profile.sh Makefile $(do_subst) < $(srcdir)/radial-profile.sh > $@ chmod +x $@ astscript-sort-by-night: sort-by-night.sh Makefile $(do_subst) < $(srcdir)/sort-by-night.sh > $@ chmod +x $@ astscript-zeropoint: zeropoint.sh Makefile $(do_subst) < $(srcdir)/zeropoint.sh > $@ chmod +x $@ gnuastro-0.22/bin/script/Makefile.in0000644000175000017500000032753314557513747013140 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = bin/script ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgdatadir)" SCRIPTS = $(bin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(pkgdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Data files (necessary for various components like desktop files for GUIs # or Makefiles that are called within scripts). pkgdata_DATA = zeropoint.mk \ pointing-simulate.mk \ astscript-fits-view.desktop bin_SCRIPTS = astscript-fits-view \ astscript-psf-unite \ astscript-psf-stamp \ astscript-zeropoint \ astscript-ds9-region \ astscript-psf-subtract \ astscript-sort-by-night \ astscript-radial-profile \ astscript-color-faint-gray \ astscript-psf-scale-factor \ astscript-psf-select-stars \ astscript-pointing-simulate EXTRA_DIST = fits-view.sh \ psf-unite.sh \ psf-stamp.sh \ zeropoint.sh \ zeropoint.mk \ ds9-region.sh \ psf-subtract.sh \ sort-by-night.sh \ radial-profile.sh \ color-faint-gray.sh \ psf-select-stars.sh \ psf-scale-factor.sh \ pointing-simulate.sh \ pointing-simulate.mk \ fits-view.desktop.desktop CLEANFILES = $(bin_SCRIPTS) \ astscript-fits-view.desktop do_subst = sed -e 's,[@]PREFIX[@],$(exec_prefix),g' \ -e 's,[@]VERSION[@],$(VERSION),g' \ -e 's,[@]SCRIPT_NAME[@],$@,g' all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/script/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bin/script/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-pkgdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-binSCRIPTS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkgdataDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-binSCRIPTS uninstall-pkgdataDATA .PRECIOUS: Makefile astscript-fits-view.desktop: $(srcdir)/fits-view.desktop.desktop Makefile sed -e 's|@PREFIX[@]|$(exec_prefix)|g' \ $(srcdir)/fits-view.desktop.desktop > $@ astscript-color-faint-gray: color-faint-gray.sh Makefile $(do_subst) < $(srcdir)/color-faint-gray.sh > $@ chmod +x $@ astscript-ds9-region: ds9-region.sh Makefile $(do_subst) < $(srcdir)/ds9-region.sh > $@ chmod +x $@ astscript-fits-view: fits-view.sh Makefile $(do_subst) < $(srcdir)/fits-view.sh > $@ chmod +x $@ astscript-pointing-simulate: pointing-simulate.sh Makefile $(do_subst) < $(srcdir)/pointing-simulate.sh > $@ chmod +x $@ astscript-psf-unite: psf-unite.sh Makefile $(do_subst) < $(srcdir)/psf-unite.sh > $@ chmod +x $@ astscript-psf-stamp: psf-stamp.sh Makefile $(do_subst) < $(srcdir)/psf-stamp.sh > $@ chmod +x $@ astscript-psf-scale-factor: psf-scale-factor.sh Makefile $(do_subst) < $(srcdir)/psf-scale-factor.sh > $@ chmod +x $@ astscript-psf-select-stars: psf-select-stars.sh Makefile $(do_subst) < $(srcdir)/psf-select-stars.sh > $@ chmod +x $@ astscript-psf-subtract: psf-subtract.sh Makefile $(do_subst) < $(srcdir)/psf-subtract.sh > $@ chmod +x $@ astscript-radial-profile: radial-profile.sh Makefile $(do_subst) < $(srcdir)/radial-profile.sh > $@ chmod +x $@ astscript-sort-by-night: sort-by-night.sh Makefile $(do_subst) < $(srcdir)/sort-by-night.sh > $@ chmod +x $@ astscript-zeropoint: zeropoint.sh Makefile $(do_subst) < $(srcdir)/zeropoint.sh > $@ chmod +x $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnuastro-0.22/bin/script/fits-view.sh0000644000175000017500000004362114551337306013322 #!/bin/sh # View the contents of FITS files using DS9 (if there is an image in any of # the HDUs) or TopCat (when there is a table). This script can be called # within a '.desktop' file to easily view FITS images or tables in a GUI. # # Current maintainer: # Mohammad Akhlaghi # All author(s): # Mohammad Akhlaghi # Raul Infante-Sainz # Sepideh Eskandarlou # Copyright (C) 2020-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # Exit the script in the case of failure set -e # 'LC_NUMERIC' is responsible for formatting numbers printed by the OS. It # prevents floating points like '23,45' instead of '23.45'. export LC_NUMERIC=C # Default option values (can be changed with options on the # command-line). hdu="" quiet=0 prefix="" ds9mode="" ds9scale="" ds9extra="" ds9center="" ds9geometry="" version=@VERSION@ ds9colorbarmulti="" scriptname=@SCRIPT_NAME@ # Output of '--usage' and '--help': print_usage() { cat < /dev/null 2>/dev/null; then # The line with a '*' is the resolution of the used screen. We will # then extract the height (second value) and set DS9's geometry # based on that. ds9geometry=$(xrandr \ | grep '*' \ | sed 's/x/ /' \ | awk 'NR==1{w=0.75*$2; printf "%dx%d\n", w, $2}') fi fi ds9geoopt="-geometry $ds9geometry" # Set the DS9 '-scale' option value. If nothing is given, set the mode to # 'zscale'. Also set some aliases to simplify usage on the command-line # (and let the user give '--ds9scale=minmax' instead of '--ds9scale="mode # minmax"'). # # zscale --> mode zscale # minmax --> mode minmax # # Note: '-o' means "or" and is preferred to '[ ] || [ ]' because only a # single invocation of 'test' is done. Run 'man test' for more. if [ x"$ds9scale" = x -o "$ds9scale" = "zscale" ]; then ds9scale="mode zscale" elif [ "$ds9scale" = "minmax" ]; then ds9scale="mode minmax" fi ds9scaleopt="-scale $ds9scale" # Set the DS9 pan option. ds9pan="" if [ x"$ds9center" != x ]; then ds9pancent=$(echo $ds9center | awk 'BEGIN{FS=","} {print $1, $2}') if [ $ds9mode = wcs ]; then ds9pan="-pan to $ds9pancent wcs fk5" else ds9pan="-pan to $ds9pancent image" fi fi # If '--prefix' is given, add it to the PATH for the remainder of the # commands in this script. if [ "x$prefix" != x ]; then ds9exec="$prefix/ds9" topcatexec="$prefix/topcat" else ds9exec=ds9 topcatexec=topcat fi # To allow generic usage, if no input file is given (the `if' below is # true), then just open an empty ds9. if [ x"$inputs" = x ]; then $ds9exec $ds9geoopt else # Select the first input. input1=$(echo $inputs | awk '{print $1}') # Do the tests only if the given file exists. if [ -f $input1 ]; then # If the first input exists. Continue if it is also a FITS file. if astfits $input1 -h0 > /dev/null 2>&1; then # Input is image or table. type=$(astfits $input1 --hasimagehdu) # If the file was a image, then `check` will be 1. if [ "$type" = 1 ]; then # If a HDU is given, add it to all the input file names (within # square brackets for DS9). if [ x"$hdu" = x ]; then inwithhdu="$inputs" else c=1 inwithhdu="" for i in $inputs; do h=$(echo $hdu | awk -vc=$c '{print $c}') inwithhdu="$inwithhdu $i[$h]" c=$((c+1)) done fi # Read the number of dimensions. n0=$(astfits $input1 -h0 | awk '$1=="NAXIS"{print $3}') # Find the number of dimensions. if [ "$n0" = 0 ]; then ndim=$(astfits $input1 -h1 | awk '$1=="NAXIS"{print $3}') else ndim=$n0 fi; # If multiple colorbars should be used. if [ x"$ds9colorbarmulti" = x ]; then multicolorbars=no; else multicolorbars=yes; fi # Open DS9 based on the number of dimension. if [ "$ndim" = 2 ]; then # If a HDU is specified, ignore other HDUs (recall that # with '-mecube' we are viewing all the HDUs as a single # cube. if [ x"$hdu" = x ]; then mecube="-mecube"; else mecube=""; fi # 2D multi-extension file: use the "Cube" window to # flip/slide through the extensions. execom="$ds9exec $ds9scaleopt \ $ds9geoopt \ $mecube \ $inwithhdu \ -zoom to fit \ -wcs degrees \ -cmap sls \ -match frame image \ -match frame colorbar \ -frame lock image \ -colorbar lock yes \ -view multi $multicolorbars \ -lock slice image \ $ds9pan \ $ds9extra" else # If a HDU is given, don't use multi-frame. if [ x"$hdu" = x ]; then mframe="-multiframe"; else mframe=""; fi # 3D multi-extension file: The "Cube" window will slide # between the slices of a single extension. To flip # through the extensions (not the slices), press the # top row "frame" button and from the last four buttons # of the bottom row ("first", "previous", "next" and # "last") can be used to switch through the extensions # (while keeping the same slice). execom="$ds9exec $ds9scaleopt \ $ds9geoopt -wcs degrees \ $mframe \ $inwithhdu \ -lock slice image \ -lock frame image \ -zoom to fit \ -cmap sls \ -match frame colorbar \ -colorbar lock yes \ -view multi $multicolorbars \ $ds9pan \ $ds9extra" fi # When input was table. else # If a HDU is given, add it to all the input file names # (with a '#' between the filename and HDU in TOPCAT). if [ x"$hdu" = x ]; then inwithhdu="$inputs" else c=1 inwithhdu="" for i in $inputs; do h=$(echo $hdu | awk -vc=$c '{print $c}') inwithhdu="$inwithhdu $i#$h" c=$((c+1)) done fi # TOPCAT command. execom="$topcatexec $inwithhdu" fi # Run the final command and print it if not in '--quiet' mode. if [ $quiet = 0 ]; then echo "Running: $(echo $execom | sed 's|* | |')"; fi $execom # 'astfits' couldn't open the file. else echo "$scriptname:$input1: not a FITS file" fi # File does not exist. else echo "$scriptname:$input1: does not exist" fi fi gnuastro-0.22/bin/script/psf-unite.sh0000644000175000017500000005275714551337306013331 #!/bin/sh # Join two different PSF images into a single one. Run with `--help', or # see description under `print_help' (below) for more. # # Original author: # Raul Infante-Sainz # Contributing author(s): # Mohammad Akhlaghi # Carlos Morales-Socorro # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # Exit the script in the case of failure set -e # 'LC_NUMERIC' is responsible for formatting numbers printed by the OS. It # prevents floating points like '23,45' instead of '23.45'. export LC_NUMERIC=C # Default option values (can be changed with options on the command-line). hdu=1 inner="" quiet="" scale="" radius="" keeptmp=0 output="" tmpdir="" innerhdu=1 axisratio=1 positionangle=0 version=@VERSION@ scriptname=@SCRIPT_NAME@ # Output of `--usage' and `--help': print_usage() { cat < # Contributing author(s): # Mohammad Akhlaghi # Carlos Morales-Socorro # Sepideh Eskandarlou # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # Exit the script in the case of failure set -e # 'LC_NUMERIC' is responsible for formatting numbers printed by the OS. It # prevents floating points like '23,45' instead of '23.45'. export LC_NUMERIC=C # Default option values (can be changed with options on the command-line). hdu=1 quiet="" center="" keeptmp=0 output="" tmpdir="" segment="" snthresh="" axisratio=1 normradii="" sigmaclip="" widthinpix="" nocentering=0 normop="median" positionangle=0 version=@VERSION@ scriptname=@SCRIPT_NAME@ # Output of `--usage' and `--help': print_usage() { cat <0.5){x=1-x; xshift=1} else {x*=-1; xshift=0}; \ if(y>0.5){y=1-y; yshift=1} else {y*=-1; yshift=0}; \ printf("%f,%f %d,%d\n", x, y, \ int($1)+xshift+1, int($2)+yshift+1)}') # Warp image based on the measured displacement (first component of the # output above). warpped=$tmpdir/cropped-masked-warpforcenter.fits DXY=$(echo "$warpcoord" | awk '{print $1}') astwarp $cropped_masked --translate=$DXY --output=$warpped # Crop image based on the calculated shift (second component of the # output above). centermsk=$tmpdir/cropped-masked-centered.fits CXY=$(echo "$warpcoord" | awk '{print $2}') astcrop $warpped -h1 \ --mode=img --output=$centermsk \ --center=$CXY --width=$xwidthinpix,$ywidthinpix else # If the user did not want to correct the center of image, we'll use # the raw crop as input for the next step. centermsk=$cropped_masked fi # Compute the radial profile and the normalization value # ------------------------------------------------------ # # Only if the the user has specified a ring of normalization (--normradii). # Otherwise set the normalization value equal to 1.0 (no normalization). if [ x"$normradiusmin" != x -a x"$normradiusmax" != x ]; then # Generate the radial profile of the stamp, since it has been already # centered on the center of the object, it is not necessary to give the # center coordinates. If the user specifies a maximum radius, use it. # Otherwise, compute the radial profile up to the outer part of the # ring for the normalization (to not wast CPU time). If the user # specifies sigma clip parameters, use them. radialprofile=$tmpdir/rprofile.fits maxr=$(echo "$normradiusmax" | awk '{print $1+1}') if [ x"$sigmaclip" = x ]; then finalsigmaclip="" else finalsigmaclip="--sigmaclip=$sigmaclip"; fi astscript-radial-profile $centermsk --hdu=1 --rmax=$maxr \ --measure=$normop $finalsigmaclip \ --position-angle=$positionangle \ --tmpdir=$tmpdir --keeptmp \ --axis-ratio=$axisratio \ --output=$radialprofile $quiet # The normalization value is computed from the radial profile in between # the two radius specified by the user. In this case, the option to give # sigmaclip parameters to 'aststatistics' is different. if [ x"$sigmaclip" = x ]; then finalsigmaclip="" else finalsigmaclip="--sclipparams=$sigmaclip"; fi # Select the values within the requested radial range. values=$(asttable $radialprofile $quiet \ --range=1,$normradiusmin,$normradiusmax) if ! normvalue=$(echo "$values" \ | aststatistics --column=2 --$normop \ $finalsigmaclip -q \ 2> /dev/null); then normvalue=nan fi else normvalue=1.0 fi # Normalize the stamp # ------------------- # # Before applying the normalization factor to the masked stamps, we should # make sure the the normalization value has a 'float32' type. This is # because Arithmetic will interpret its type based on the number of digits # it has. Therefore something like 1.7204 will be read as float32 (1.7204), # but 1.868915 will be read as 'float64'. In the latter case, the output # will become 'float64' also, which will cause problems later when we want # to stack them together (some images will be 'float32', some 'float64'). astarithmetic $centermsk --hdu=1 $normvalue float32 / \ float32 --output=$output $quiet # Keeping meta-data # ----------------- # # Some meta-data are useful for later analysis and because of that, they # are kept into the header of the output file. The data kept are: object # and clump that were not masked and the normalization value. If not masks # were applied, then set the clump and object labels to 'none'. if [ x"$clab" = x ]; then astfits $output --write=NORMVAL,$normvalue,"Normalization value" else astfits $output --write=NORMVAL,$normvalue,"Normalization value" \ --write=CLABEL,$clab,"CLUMP label that was not masked" \ --write=OLABEL,$olab,"OBJECT label that was not masked" fi # Print warning. We are printing this warning here (at the end of the # script) because we dont want it to be mixed with the outputs of the # previus commands. if [ x"$quiet" = x ] && [ $normvalue = nan ]; then all_nan_warning; fi # Remove temporary files # ---------------------- # # If the user does not specify to keep the temporal files with the option # `--keeptmp', then remove the whole directory. if [ $keeptmp = 0 ]; then rm -r $tmpdir fi gnuastro-0.22/bin/script/zeropoint.sh0000644000175000017500000006470614557025423013445 #!/bin/sh # Calculate the zero point of an image based on reference images or a # catalog. # # This script will compute some basic parameters that are necessary for the # computation of the zero point. These parameters are saved into a # configuration Makefile. Finally, the Makefile is executed at the end of # this script. The reason of using Make is to parallelize the computation # of the zero point so it obtained faster than using a script. # # Run with '--help' for more information. # # Current maintainer: # Sepideh Eskandarlou # Contributing authors: # Mohammad Akhlaghi # Raul Infante-Sainz # Copyright (C) 2022-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # Exit the script in the case of failure set -e # 'LC_NUMERIC' is responsible for formatting numbers printed by the OS. It # prevents floating points like '23,45' instead of '23.45'. export LC_NUMERIC=C # Default parameter's values hdu=1 quiet="" output="" tmpdir="" refcat="" refimgs="" starcat="" keeptmp="" keepzpap="" refimgszp="" refcathdu="" numthreads=0 starcathdu="" aperarcsec="" refcatra="RA" refimgshdu="" starcatra="RA" refcatdec="DEC" matchradius=0.2 starcatdec="DEC" magnituderange="" version=@VERSION@ refcatmag="MAGNITUDE" scriptname=@SCRIPT_NAME@ installdir=@PREFIX@/share/gnuastro # Output of '--usage' print_usage() { cat < $config echo "input = $inputs" >> $config echo "hduinput = $hdu" >> $config echo "output = $output" >> $config echo "tmpdir = $tmpdir" >> $config echo "starcat = $starcat" >> $config echo "starcatra = $starcatra" >> $config echo "starcatdec = $starcatdec" >> $config echo "starcathdu = $starcathdu" >> $config echo "matchradius = $matchradius" >> $config # Magnitude range (empty string if not provided). if [ x$magnituderange = x ]; then echo "magrange = " >> $config else echo "magrange = $magnituderange" >> $config fi # Size of the apertures. In Make, the comma should be changed with a SPACE. aper=$(echo $aperarcsec | sed 's|,| |g') echo "aper-arcsec = $aper" >> $config # If a catalog is provided as the reference. if [ x"$refcat" != x ]; then # Basic parameters. echo "reftype = cat" >> $config echo "ref1 = $refcat" >> $config echo "hduref1 = $refcathdu" >> $config echo "refnumber = 1" >> $config echo "ra = $refcatra" >> $config echo "dec = $refcatdec" >> $config echo "mag = $refcatmag" >> $config else # Type of reference file: img. echo "reftype = img" >> $config # Compute how many references images are used. num=$(echo $refimgs \ | awk 'BEGIN{FS=","}{for(i=1;i<=NF;++i) printf "%s ", i}') echo "refnumber = $num" >> $config # For each image, write its variables. for n in $num; do img=$(echo $refimgs | awk 'BEGIN{FS=","}{printf "%s", $'$n'}') hdu=$(echo $refimgshdu | awk 'BEGIN{FS=","}{printf "%s", $'$n'}') zp=$(echo $refimgszp | awk 'BEGIN{FS=","}{printf "%s", $'$n'}') echo "ref$n = $img" >> $config echo "hduref$n = $hdu" >> $config echo "zpref$n = $zp" >> $config done fi # Keep the zeropoint from the different apertures in different extensions # ----------------------------------------------------------------------- # # If the user specifies to keep the zeropoint of the different apertures # they will be saved in different extensions of the output. if [ x"$keepzpap" = x ]; then echo "keepzpap = " >> $config else echo "keepzpap = keep" >> $config fi # If the user hasn't set the number threads, find it # -------------------------------------------------- # # Note that on different operating systems, the command to read the number # of threads differs: for example in GNU/Linux based systems, it is # 'nproc', but in macOS is is a special case of 'sysctl'. if [ x"$numthreads" = x0 ]; then if type nproc > /dev/null 2> /dev/null; then numthreads=$(nproc --all); else numthreads=$(sysctl -a | awk '/^hw\.ncpu/{print $2}') if [ x"$numthreads" = x ]; then numthreads=1; fi fi fi # Call the Makefile # ----------------- # # Here, Makefile is invoked. if [ x$mksrc = x ]; then mksrc=$installdir/zeropoint.mk fi make -f $mksrc tmpdir=$tmpdir --jobs=$numthreads # Remove temporary directory # -------------------------- # # If user does not specify to keep the build file with the option of # --keeptmp', then the directory will be removed. if [ x"$keeptmp" = x ]; then rm -r $tmpdir fi # Inform the user # --------------- # # The outputs are complex and it may not be clear to a new user that the # job is complete without any errors. So we will print the following # message: if [ x"$quiet" = x ]; then cat < # Contributing authors: # Mohammad Akhlaghi # Raul Infante-Sainz # Samane Raji # Zahra sharbaf # Copyright (C) 2022-2024 Free Software Foundation, Inc. # # This Makefile is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This Makefile 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 General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this Makefile. If not, see . Set # input & Final target # Final target. all: final # Second expansion. .SECONDEXPANSION: # Stop the recipe's shell if the command fails .SHELLFLAGS = -ec # Include the configure file. include $(tmpdir)/zeropoint.conf # Catalog of stars # ---------------- # # Use Gaia catalog and only keep the objects with good parallax (to # confirm that they are stars). stars=$(tmpdir)/stars.fits $(stars): $(input) | $(tmpdir) # Recipe if 'starcat' is NOT given (get it from Gaia) ifeq ($(strip $(starcat)),) raw=$(subst .fits,-raw.fits,$@); \ astquery gaia --dataset=dr3 \ --hdu=$(hduinput) \ --overlapwith=$(input) \ -csource_id -cra -cdec -cparallax \ -cparallax_error -cpmra -cpmdec --output=$$raw; \ asttable $$raw -cra,dec --colinfoinstdout \ -c'arith parallax parallax abs \ parallax_error 3 x lt nan where ' \ --colmetadata=3,GOODPLX,int32,"Stars with good parallax." \ --noblankend=GOODPLX \ | asttable -cra,dec --output=$@; \ rm $$raw # Recipe if 'starcat' is given (just use the 'ra' and 'dec' # columns). If the input doesn't have an 'ra' or 'dec' columns, # 'asttable' is going to complain directly. So there is no need to add # extra checks here. else if [ "x$(starcathdu)" = x ]; then hdu=1; \ else hdu=$(starcathdu); fi; \ asttable $(starcat) --hdu=$$hdu --output=$@ \ -c$(starcatra),$(starcatdec) endif # If the reference type is 'img', 'gencat' will be a list with many names # as the number of input images. ifeq ($(reftype),img) gencat=$(foreach i, $(refnumber), ref$(i)) # The reference is a catalog, prepare the single reference catalog with # desired columns. else gencat= # Prepare the catalog for comparing in different appertures. cataper=$(foreach a,$(aper-arcsec), \ $(tmpdir)/ref1-$(a)-cat.fits) $(cataper): $(tmpdir)/ref1-%-cat.fits: asttable $(ref1) -c$(ra),$(dec) -c$(mag) \ | cat -n \ | asttable --output=$@ \ --colmetadata=1,OBJ_ID,int32,"Id of object." \ --colmetadata=2,RA,float64,"Right Assencion." \ --colmetadata=3,DEC,float64,"Declination." \ --colmetadata=4,MAGNITUDE,float32,"Magnitude." endif # Apertures photometry # -------------------- # # To generate the apertures catalog we will use Gnuastro’s MakeProfiles. We # will first read the positions from the Gaia catalog, then use AWK to set # the other parameters of each profile to be a fixed circle of radius 5.1 # pixels. To calculate the pixel size I have to use the big origin image # before cropping zpinput=0 aperture=$(foreach i,input $(gencat), \ $(foreach a,$(aper-arcsec), \ $(tmpdir)/$(i)-$(a)-cat.fits)) $(aperture): $(tmpdir)/%-cat.fits: $(stars) # Brief summary of the steps done here: # - Extract the names. # - Convert the aperture size (arcsec) to pixels. # - Make an aperture catalog by using aperture size in pixels # - Make an image of apertures. # - Build a catalog of this aperture image. # - Clean up. img=$($(word 1, $(subst -, ,$*))); \ zp=$(zp$(word 1, $(subst -, ,$*))); \ aperarcsec=$(word 2, $(subst -, ,$*)); \ hdu=$(hdu$(word 1, $(subst -, ,$*))); \ aperwcscat=$(subst .fits,-aperwcscat.txt,$@); \ aperimg=$(subst .fits,-aper.fits,$@); \ aperpix=$$(astfits $$img --hdu=$$hdu --pixelscale --quiet \ | awk -v s=$$aperarcsec \ '{print s/($$1 * 3600)}'); \ asttable $(stars) -cra,dec \ | awk -v r=$$aperpix \ '{ print NR, $$1, $$2, 5, r, 0, 0, 1, NR, 1 }' \ > $$aperwcscat; \ astmkprof $$aperwcscat --background=$$img --backhdu=$$hdu \ --clearcanvas --replace --type=int32 --mforflatpix \ --mode=wcs --output=$$aperimg --quiet; \ astmkcatalog $$aperimg -h1 --output=$@ --zeropoint=$$zp \ --inbetweenints --valuesfile=$$img \ --valueshdu=$$hdu --ids --ra --dec --magnitude; \ rm $$aperwcscat $$aperimg # Calculate magnitude differences # ------------------------------- # # Match the reference catalog with the input catalog and put reference # magnitude in the catalog. Then subtract the reference mag. from input # mag. Finally, the final target has two columns of reference mag and # subtracted mag. allrefs=$(foreach i, $(refnumber), ref$(i)) magdiff=$(foreach r,$(allrefs), \ $(foreach a,$(aper-arcsec), \ $(tmpdir)/$(r)-$(a)-magdiff.fits)) $(magdiff): $(tmpdir)/%-magdiff.fits: \ $(tmpdir)/%-cat.fits \ $(tmpdir)/input-$$(word 2,$$(subst -, ,%))-cat.fits # Find the matching objects in both catalogs. # Subtract the reference catalog mag from input catalog's mag. # Clean up. match=$(subst .fits,-match.fits,$@); \ astmatch $< --hdu=1 $(word 2,$^) --hdu2=1 \ --ccol1=RA,DEC --ccol2=RA,DEC \ --outcols=aMAGNITUDE,bMAGNITUDE \ --aperture=$(matchradius) \ --output=$$match; \ asttable $$match -c1 -c'arith $$1 $$2 -' \ --colmetadat=1,MAG-REF,f32,"Magnitude of reference." \ --colmetadat=2,MAG-DIFF,f32,"Magnitude diff with input." \ --noblankend=1,2 --output=$@; \ rm $$match # Computing the zero point for each aperture # ------------------------------------------ # # Calculate Zeropoint number in seperated files and calculate the root mean # square of zero point. aperzeropoint=$(foreach a,$(aper-arcsec), \ $(tmpdir)/zeropoint-$(a).txt) $(aperzeropoint): $(tmpdir)/zeropoint-%.txt: \ $$(foreach r,$(allrefs),$(tmpdir)/$$(r)-%-magdiff.fits) # Merge all the magdiffs from all the references. # Merge all the rows from all the reference images into one. # If the user requested a certain magnitude range, use it. # Find the zeropoint and its standard deviationg using sigma-clipped # median and standard deviation. Write them into the target. merged=$(subst .txt,-merged.fits,$@); \ opts=""; \ if ! [ "$(refnumber)" = 1 ]; then \ for r in $$(echo $(refnumber) | sed -e's|1||'); do \ opts="$$opts --catrowfile=$(tmpdir)/ref$$r-$*-magdiff.fits"; \ done; \ fi; \ asttable $(tmpdir)/ref1-$*-magdiff.fits $$opts -o$$merged; \ astfits $$merged --update=EXTNAME,APER-$*; \ rangeopt=""; \ if ! [ x"$(magrange)" = x ]; then \ rangeopt="--range=MAG-REF,$(magrange)"; \ fi; \ zpstd=$$(asttable $$merged $$rangeopt -cMAG-DIFF \ | aststatistics --sigclip-median \ --sigclip-std --quiet); \ echo "$* $$zpstd" > $@ # Most accurate zeropoint # ----------------------- # # For each aperture, one zeropoint and its STD has been computed. The best # value is the one with the lowest STD value. zeropoint=$(output) $(zeropoint): $(aperzeropoint) # Obtain the zeropoint and zero point STD of each aperture. # Find the best aperture; its zero point and STD. # Auxiliary/temporary file # If the user requested a certain magnitude range, add minmag and # maxmag to header. # The 'bestaper' above is returned from 'asttable', that is saved # as a floating point, so the extra digits in reading floating # points # Move the main table to the output and copy the mag-vs-zeroppoint # plot for the best aperture. # Move the main table to the output and copy the mag-vs-zeroppoint # plot for the whole aperture. # Clean up. zp=$(subst .fits,-tmp.txt,$@); \ echo "# Column 1: APERTURE [arcsec,f32,] Aperture used." > $$zp; \ echo "# Column 2: ZEROPOINT [mag, f32,] Zero point (sig-clip median)." >> $$zp; \ echo "# Column 3: ZPSTD [mag, f32,] Zero point Standard deviation." \ >> $$zp; \ for a in $(aper-arcsec); do \ cat $(tmpdir)/zeropoint-$$a.txt >> $$zp; \ done; \ magmin=""; \ magmax=""; \ if ! [ x"$(magrange)" = x ]; then \ magmin=$$(echo "$(magrange)" | sed 's|,| |' | awk '{print $$1}'); \ magmax=$$(echo "$(magrange)" | sed 's|,| |' | awk '{print $$2}'); \ fi; \ asttable $$zp --output=$@.fits; \ bestaper=$$(asttable $$zp --sort=ZPSTD --head=1 --column=APERTURE); \ bestzp=$$(asttable $$zp --sort=ZPSTD --head=1 --column=ZEROPOINT); \ beststd=$$(asttable $$zp --sort=ZPSTD --head=1 --column=ZPSTD); \ astfits $@.fits --update=EXTNAME,"ZEROPOINTS" \ --write=/,"Zeropoint properties" \ --write=ZPAPER,"$$bestaper","Best aperture." \ --write=ZPVALUE,"$$bestzp","Best zero point." \ --write=ZPSTD,"$$beststd","Best std. dev. of zeropoint."; \ if ! [ x"$(magrange)" = x ]; then \ astfits $@.fits \ --write=ZPMAGMIN,"$$magmin","Min mag for obtaining zeropoint."; \ astfits $@.fits \ --write=ZPMAGMAX,"$$magmax","Max mag for obtaining zeropoint."; \ fi; \ if [ x"$(keepzpap)" = x ]; then \ for a in $(aper-arcsec); do \ check=$$(echo $$a \ | awk -vb=$$bestaper \ '$$1>b-1e-6 && $$1 # Contributing author(s): # Samane Raji # Raul Infante-Sainz # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # Exit the script in the case of failure set -e # 'LC_NUMERIC' is responsible for formatting numbers printed by the OS. It # prevents floating points like '23,45' instead of '23.45'. export LC_NUMERIC=C # Default option values (can be changed with options on the # command-line). hdu=1 col="" width=1 mode=wcs radius="" command="" namecol="" out=ds9.reg color=green dontdelete=0 version=@VERSION@ scriptname=@SCRIPT_NAME@ # Output of '--usage' and '--help': print_usage() { cat < $out printf "# Created by $scriptname (GNU Astronomy Utilities) $version\n" >> $out if [ x"$input" = x ]; then printf "# Input from stdin\n" >> $out else printf "# Input file: $input (hdu $hdu)\n" >> $out fi printf "# Columns: $col\n" >> $out if [ x"$namecol" != x ]; then printf "# Region name (or label) column: $namecol\n" >> $out fi printf "global color=%s width=%d\n" $color $width >> $out if [ "$mode" = wcs ]; then printf "fk5\n" >> $out else printf "image\n" >> $out; fi # Write each region's results (when no input file is given, read from the # standard input). Note that the 'unit' string will be empty in image-mode # coordinates. As a result, it we don't enclose it in double-quotations, # 'printf' will not see anything and use the next variable where the unit # should be printed! See https://savannah.gnu.org/bugs/index.php?64153 if [ x"$namecol" = x ]; then if [ x"$input" = x ]; then cat /dev/stdin \ | asttable --column=$col \ | while read a b; do \ printf "circle(%f,%f,%f%s)\n" \ $a $b $radius "$unit" >> $out; \ done else asttable $input --hdu=$hdu --column=$col \ | while read a b; do \ printf "circle(%f,%f,%f%s)\n" \ $a $b $radius "$unit" >> $out; \ done fi else if [ x"$input" = x ]; then cat /dev/stdin \ | asttable --column=$col --column=$namecol \ | while read a b c; do \ printf "circle(%f,%f,%f%s) # text={%g}\n" \ $a $b $radius "$unit" $c >> $out; \ done else asttable $input --hdu=$hdu --column=$col --column=$namecol \ | while read a b c; do \ printf "circle(%f,%f,%f%s) # text={%g}\n" \ $a $b $radius "$unit" $c >> $out; \ done fi fi # Run the user's command (while appending the region). if [ x"$command" != x ]; then $command -regions $out if [ $dontdelete = 0 ]; then rm $out; fi fi gnuastro-0.22/bin/script/psf-subtract.sh0000644000175000017500000005420614551337306014023 #!/bin/sh # Situate a PSF stamp into a given position with the same output image size # than the original image and subtract it. # # Original author: # Raul Infante-Sainz # Contributing author(s): # Mohammad Akhlaghi # Zahra Sharbaf # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # Exit the script in the case of failure set -e # 'LC_NUMERIC' is responsible for formatting numbers printed by the OS. It # prevents floating points like '23,45' instead of '23.45'. export LC_NUMERIC=C # Default option values (can be changed with options on the command-line). hdu=1 psf="" psfhdu=1 quiet="" scale="" center="" keeptmp=0 output="" tmpdir="" modelonly=0 version=@VERSION@ scriptname=@SCRIPT_NAME@ # Output of `--usage' and `--help': print_usage() { cat < # Contributing author(s): # Copyright (C) 2019-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # Exit the script in the case of failure set -e # 'LC_NUMERIC' is responsible for formatting numbers printed by the OS. It # prevents floating points like '23,45' instead of '23.45'. export LC_NUMERIC=C # Default option values (can be changed with options on the # command-line). hdu=1 copy=0 link=0 hour=11 quiet=0 key=DATE prefix=./ version=@VERSION@ stdintime=10000000 scriptname=@SCRIPT_NAME@ # Output of '--usage' and '--help': print_usage() { cat < # Contributing author(s): # Mohammad Akhlaghi # Zahra Sharbaf # Carlos Morales-Socorro # Sepideh Eskandarlou # Copyright (C) 2020-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # Exit the script in the case of failure set -e # 'LC_NUMERIC' is responsible for formatting numbers printed by the OS. It # prevents floating points like '23,45' instead of '23.45'. export LC_NUMERIC=C # Default option values (can be changed with options on the command-line). hdu=1 rmax="" quiet="" instd="" stdhdu=1 center="" tmpdir="" output="" keeptmp=0 mode="img" azimuth="" measure="" precision=0 axisratio=1 zeropoint="" sigmaclip="" measuretmp="" oversample="" undersample="" positionangle=0 zeroisnotblank="" version=@VERSION@ scriptname=@SCRIPT_NAME@ # Define the path work directory. curdir=$(pwd) # Output of `--usage' and `--help': print_usage() { cat <=0 && $1<=6 {print 1}') if [ x$pcheck = x ]; then echo "$scriptname: value of '--precision' ($precision) must be an integer between 0 to 6 (inclusive)" exit 1 fi # If no specific measurement has been requested, use the mean. if [ x"$measure" = x ]; then measure=mean; fi # Finalize the center value # ------------------------- # # Beyond this point, we know the image-based, central coordinate for the # radial profile as two values (one along each dimension). if [ x"$center" = x ]; then # No center has been given: we thus assume that the object is already # centered on the input image and will set the center to the central # pixel in the image. In the FITS standard, pixels are counted from 1, # and the integers are in the center of the pixel. So after dividing # the pixel size of the image by 2, we should add it with 0.5 to be the # `center' of the image. xcenter=$(astfits $inputs --hdu=$hdu | awk '/^NAXIS1/{print $3/2+0.5}') ycenter=$(astfits $inputs --hdu=$hdu | awk '/^NAXIS2/{print $3/2+0.5}') # A center is given. else # The central position is in image mode; we should just separate each # coordinate. if [ "$mode" = img ]; then xcenter=$(echo "$center" | awk 'BEGIN{FS=","} {print $1}') ycenter=$(echo "$center" | awk 'BEGIN{FS=","} {print $2}') # The center is in WCS coordinates. We should thus convert them to # image coordinates at this point. To do that, WCS information from the # input header image is used. else xy=$(echo "$center" \ | asttable -c'arith $1 $2 wcs-to-img' \ --wcsfile=$inputs --wcshdu=$hdu) xcenter=$(echo $xy | awk '{print $1}'); ycenter=$(echo $xy | awk '{print $2}'); fi fi # Calculate the maximum radius # ---------------------------- # # If the user didn't set the '--rmax' parameter, then compute the maximum # radius possible on the image. # # If the user has not given any maximum radius, we give the most reliable # maximum radius (where the full circumference will be within the # image). If the radius goes outside the image, then the measurements and # calculations can be biased, so when the user has not provided any maximum # radius, we should only confine ourselves to a radius where the results # are reliable. # # Y-------------- # | | The maximum radius (to ensure the profile # y |........* | lies within the image) is the smallest # | . | one of these values: # | . | x, y, X-x, Y-y # -------------- # 0 x X # if [ x"$rmax" = x ]; then rmax=$(astfits $inputs --hdu=$hdu \ | awk '/^NAXIS1/{X=$3} /^NAXIS2/{Y=$3} \ END{ x='$xcenter'; y='$ycenter'; \ printf("%s\n%s\n%s\n%s", x, y, X-x, Y-y); }' \ | aststatistics --minimum ) fi # Define the final output file and temporal directory # --------------------------------------------------- # # Here, it is defined the final output file containing the radial profile. # If the user has defined a specific path/name for the output, it will be # used for saving the output file. If the user does not specify a output # name, then a default value containing the center and mode will be # generated. bname_prefix=$(basename $inputs | sed 's/\.fits/ /' | awk '{print $1}') defaultname=$(pwd)/"$bname_prefix"_radial_profile_$mode"_$xcenter"_"$ycenter" if [ x"$output" = x ]; then output="$defaultname.fits"; fi # Construct the temporary directory. If the user does not specify any # directory, then a default one with the base name of the input image will # be constructed. If the user set the directory, then make it. This # directory will be deleted at the end of the script if the user does not # want to keep it (with the `--keeptmp' option). if [ x"$tmpdir" = x ]; then tmpdir=$defaultname; fi if [ -d "$tmpdir" ]; then junk=1; else mkdir $tmpdir; fi # Crop image and instd # -------------------- # # Crop the input image and instd image, if --sn is requested, around the # desired point so we can continue processing only on those pixels (we do # not need the other pixels). # # The crop's output always has the range of pixels from the original image # used in the `ICF1PIX' keyword value. So, to find the new center # (important if it is sub-pixel precission), we can simply get the first # and third value of that string, and convert to the cropped coordinate # system. Note that because FITS pixel couting starts from 1, we need to # subtract `1'. # # For the standard deviation, besides being empty or not, we first need to # make sure it is actually a file (note that it can also be a number). If # its a file, we'll crop it and set 'instd' to be the new cropped file. cropbase=crop.fits crop=$tmpdir/$cropbase cropstdbase=crop-std.fits cropstd=$tmpdir/$cropstdbase cropwidth=$(echo $rmax | awk '{print $1*2+1}') astcrop $inputs --hdu=$hdu --center=$xcenter,$ycenter --mode=img \ --width=$cropwidth $zeroisnotblank --output=$crop $quiet if [ x"$instd" != x ] && [ -f "$instd" ]; then astcrop $instd --hdu="$stdhdu" --center=$xcenter,$ycenter \ --mode=img --width=$cropwidth $zeroisnotblank \ --output=$cropstd $quiet fi # Correct the central position (to cropped image) # ----------------------------------------------- dxy=$(astfits $crop -h0 \ | grep ICF1PIX \ | sed -e"s/'/ /g" -e's/\:/ /g' -e's/,/ /' \ | awk '{print $3-1, $5-1}') xcenter=$(echo "$xcenter $cropwidth $dxy" \ | awk '{ if($1>int($2/2)) print $1-$3; \ else print int($2/2)+$1-int($1) }') ycenter=$(echo "$ycenter $cropwidth $dxy" \ | awk '{ if($1>int($2/2)) print $1-$4; \ else print int($2/2)+$1-int($1) }') # Over-sample the input if necessary # ---------------------------------- # # With the goal of having higher spatial resolution, here the input image # is over-sampled. This is only done if the user request this with the # option --oversample. valuesbase=values.fits values=$tmpdir/$valuesbase valuesstdbase=valuesstd.fits valuesstd=$tmpdir/$valuesstdbase if [ x"$oversample" = x ]; then cd $tmpdir; ln -fs $cropbase $valuesbase; cd $curdir if [ x"$instd" != x -a -f "$instd" ]; then cd $tmpdir; ln -fs $cropstdbase $valuesstdbase; cd $curdir fi else # For the central coordinate, we can't simply multiply the X,Y by the # oversample factor otherwise the over-sampled pixel with distance of 0 # will be on the edge of the original pixel. To make sure that the # central oversampled pixel is in the center of the original pixel, we # need to shift by half the oversampling factor (as an integer). os=$oversample # To shorten the next two commands!. xcenter=$(echo $xcenter | awk '{print '$os'*$1-int('$os'/2)}') ycenter=$(echo $ycenter | awk '{print '$os'*$1-int('$os'/2)}') rmax=$(echo $rmax | awk '{print '$oversample'*$1}') astwarp $crop --scale=$oversample,$oversample -o$values if [ x"$instd" != x -a -f "$instd" ]; then astwarp $cropstd --scale=$oversample,$oversample -o$valuesstd fi fi # Define the standard deviation option to MakeCatalog # --------------------------------------------------- # # The standard deviation input can be a file or a single number. If it is a # file, it has been cropped or warped (in the oversample scenario) in the # previous blocks of the code. In this part, we set the option string to # pass onto MakeCatalog in all possibilities (being a single number, a file # or not defined). # # If the user has not given 'instd', then just pass an empty string to # MakeCatalog. if [ x"$instd" = x ]; then finalinstd="" else # When 'instd' is a file, put the 'valuesstd' as the option value # (which has been warped/cropped and created in the previous section). if [ -f "$instd" ]; then finalinstd="--instd=$valuesstd --stdhdu=1" # When 'instd' is a number, simply give the number as the value. else finalinstd="--instd=$instd" fi fi # Generate the apertures image # ---------------------------- # # The apertures image is generated using MakeProfiles with the parameters # specified in the echo statement: # # 1 -- ID of profile (irrelevant here!) # xcenter -- X center position (in pixels). # ycenter -- Y center position (in pixels). # 7 -- Type of the profiles (radial distance). # 1 -- The Sersic or Moffat index (irrelevant here!). # positionangle -- position angle. # axisratio -- axis ratio. # rmax -- magnitude of the profile within the truncation radius (rmax). # 1 -- Truncation in radius unit. # # After making the apertures image, we will set the central pixel to have # the radius 1 (to avoid missing the central pixel in later phases. radialaperturesbase=radial-raw.fits radialapertures=$tmpdir/$radialaperturesbase precfactor=$(astarithmetic 10 $precision pow --quiet) radialaperturesholed=$tmpdir/radial-raw-with-hole.fits echo "1 $xcenter $ycenter 7 $rmax 1 $positionangle $axisratio 1 1" \ | astmkprof --background=$values --backhdu=1 --mforflatpix \ --mode=img --clearcanvas --type=float32 $quiet \ --circumwidth=1 --replace --output=$radialaperturesholed astarithmetic $radialaperturesholed set-i \ i 0 ne 1 fill-holes set-good \ i good i 1 + where $precfactor x uint32\ $quiet --output $radialapertures rm $radialaperturesholed # Generate an azimuthal profile # ----------------------------- # # Create an azimuthal apertures image if the user specifies a range of # angles over which compute the radial profile. The azimuthal radial # profile is combined with the radial apertures generated above, to only # consider the desired portion of the image. If the azimuth option is not # called, then the aperture image is a symbolic link to the radial aperture # image constructed above. aperturesrawbase=apertures-raw.fits aperturesraw=$tmpdir/$aperturesrawbase if [ x"$azimuth" != x ]; then # Get the initial and final azimuth angles azimuth_ini=$(echo "$azimuth" | awk 'BEGIN{FS=","} {print $1}') azimuth_fin=$(echo "$azimuth" | awk 'BEGIN{FS=","} {print $2}') # Generate the azimuthal apertures azimuthaperturesbase=azimuth-raw.fits azimuthapertures=$tmpdir/$azimuthaperturesbase echo "1 $xcenter $ycenter 9 $rmax 1 $positionangle $axisratio 1 1" \ | astmkprof --background=$values --backhdu=1 --mforflatpix \ --mode=img --clearcanvas --type=float32 $quiet \ --circumwidth=1 --replace --output=$azimuthapertures # From the azimuthal aperture image, consider only that portion that # are in between (or outside) the two specified angles. Set the rest of # the pixels to zero values (on the radial apertures image). # # There are two ways that the angle range can be defined: # # - The first is smaller than the second (for example # '--azimuth=10,20'). In this case, we will use an 'and' between # the regions of each angle so the user gets the region between the # two angles. # # - The first is smaller than the second (for example # '--azimuth=355,5') In this case, we assume that the user wants an # azimuthal range outside the two angles. In the example above, its # the 10 degrees around the azimuthal angle 0. For this case, we # should use 'or' between the two regions. # # - The central pixel contains all azimuth angles, it should # therefore be included in azimthal ranges. By default MakeProfiles # is forced to give it a single azimuth angle value, so without # explicitly adding the central pixel to all azimuthal profiles, it # the radius of 1 will be ignored in some azimuthal ranges and kept # in others. But this is only because it is smaller than our # sampling rate, in practice, the central pixel contains all # azimuth angles. So when defining the 'arc', we are also adding # 'radial 1 eq or' to add that central pixel. condition=$(echo $azimuth_ini $azimuth_fin \ | awk ' {if ($1<$2) print "and"; \ else print "or"}') astarithmetic --output=$aperturesraw $quiet \ $radialapertures -h1 set-radial \ $azimuthapertures -h1 set-azimuth \ azimuth $azimuth_ini ge \ azimuth $azimuth_fin le $condition \ radial 1 eq or set-arc \ radial arc 1 uint8 ne 0 uint8 where else cd $tmpdir; ln -fs $radialaperturesbase $aperturesrawbase; cd $curdir fi # Undersampling the aperture image # -------------------------------- # # The undersampling is for making the size of the apertures larger so the # number of pixels on each aperture (at each radius) will be larger. Most # of times this option is good to average over a larger number of pixels # and increase the signal-to-noise ratio of the measurement. aperturesbase=apertures.fits apertures=$tmpdir/$aperturesbase if [ x"$undersample" != x ]; then # Divide by the undersampling factor (multiplied by the precision # factor: multiple of 10). astarithmetic $aperturesraw $undersample $precfactor int16 x / \ $quiet --output $apertures.fits # The integer division above will re-create the 0-valued hole in the # center! So we need to fill it like above. astarithmetic $apertures.fits set-i \ i 0 ne 1 fill-holes set-good \ i good i 1 + where \ $quiet --output $apertures else cd $tmpdir; ln -fs $aperturesrawbase $aperturesbase; cd $curdir fi # Extract each measurement column(s) # ---------------------------------- # # The user gives each desired MakeCatalog option name as a value to the # '--measure' option here as a comma-separated list of values. But we want # to feed them into MakeCatalog (which needs each one of them to be # prefixed with '--' and separated by a space). finalmeasure=$(echo "$measure" \ | awk 'BEGIN{FS=","} \ END{for(i=1;i<=NF;++i) printf "--%s ", $i}') # MakeCatalog configuration options # --------------------------------- # # If not given, don't use anything and just let MakeCatalog use its default # values. if [ x"$sigmaclip" = x ]; then finalsigmaclip="" else finalsigmaclip="--sigmaclip=$sigmaclip"; fi if [ x"$zeropoint" = x ]; then finalzp="" else finalzp="--zeropoint=$zeropoint"; fi # Obtain the radial profile # ------------------------- # # The radial profile is obtained using MakeCatalog. In practice, we obtain # a catalogue using the segmentation image previously generated (the # elliptical apertures) and the original input image for measuring the # values. # # --spatialresolution=0.0: in a radial profile, the areas used for each # measurement are pre-determined analytically, so the error in area # (relevant for the estimation of the surface brightness error for # example) should be considered as zero. The default value is '2.0' which # will give over-estimated error bars in the center. # # We tested this by making a mock profile and adding different noise # realizations (just changing the random number generator seed). The # radial profiles of each noise realization were then measured and their # scatter was compared with the '--sb-error' column of MakeCatalog when # given to this radial profile script. We saw that without # '--spatialresolution=0.0', the measured errors were overestimated in # the center, but after adding this, the '--sb-error' column was nicely # consistent with the scatter in the mock profiles at central radii. cat=$tmpdir/catalog.fits astmkcatalog $apertures --hdu=1 --valuesfile=$values --valueshdu=1 --ids \ $finalinstd $finalmeasure $finalsigmaclip $finalzp \ --spatialresolution=0.0 --output=$cat $quiet # Final radii of each row # ----------------------- # # In the steps above many operations were done on the labels. It is now # necessary to revert them all and obtain the final radius column that will # go into the output. radraw=$tmpdir/radii.fits if [ x"$oversample" != x ]; then asttable $cat -c'arith OBJ_ID float32 '$precfactor' / 1 - '$oversample' /' \ -o$radraw --colmetadata=1,RADIUS,pix,"Radial distance" elif [ x"$undersample" != x ]; then # Under sampling corrects for the 100 multiplication factor before # MakeCatalog. asttable $cat -c'arith OBJ_ID float32 1 - '$undersample' x' \ -o$radraw else asttable $cat -c'arith OBJ_ID float32 '$precfactor' / 1 -' \ -o$radraw --colmetadata=1,RADIUS,pix,"Radial distance" fi # Prepare the final output columns # -------------------------------- # # Add the radius column calculated above to the measured columns. If the # user has asked for it, build the output in the format of '--customtable' # in MakeProfiles. But before anything, we need to set the options to print # the other columns untouched (we only want to change the first column). outraw=$tmpdir/out-raw.fits restcols=$(astfits $cat -h1 \ | awk '/^TFIELDS/{for(i=2;i<=$3;++i) \ printf "--catcolumns=%d ", i}') asttable $radraw --catcolumnfile=$cat $restcols --output=$outraw \ --colmetadata=1,RADIUS,pix,"Radial distance" # Correct possibly extra rows # --------------------------- # # Due to a possible position angle and axis ratio, it may happen that at # least one extra radial aperture (that is given to # MakeCatalog). Therefore, once the final radii are set (accounting for # over/under sampling), we should make sure that the final output doesn't # contain radii larger than what the user asked for. asttable $outraw --range=RADIUS,0,$rmax --output=$output # Remove temporary files # ---------------------- # # If the user does not specify to keep the temporal files with the option # `--keeptmp', then remove the whole directory. if [ $keeptmp = 0 ]; then rm -r $tmpdir fi gnuastro-0.22/bin/script/color-faint-gray.sh0000644000175000017500000013076314557475506014601 #!/bin/sh # # Build a color image using asinh function to manipulate the pixel values # with the goal of showing the low and high pixel values at the same time. # Script based in Lupton et al. (2004) http://doi.org/10.1086/382245 # # Run with '--help' for more information. # # Current maintainer: # Raul Infante-Sainz # Contributing authors: # Mohammad Akhlaghi # Samane Raji # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # Exit the script in the case of failure set -e # Save the current system language, and then change it to English to avoid # problems in some parts of the code (AWK with `,' instead of `.' for # decimal separator). system_lang=$LANG export LANG=C # Default option values (can be changed with options on the command-line). hdu="" rhdu=1 globalhdu="" # Minimum, weights, and zeropoint values weight="" minimum="" zeropoint="" # To control the asinh transformation, set both to 1 (scientific notation) qbright_default=1.000000e+00 stretch_default=1.000000e+00 # For color, black, and gray regions regions="" grayval="" colorval="" coloronly=0 graykernelfwhm=0 colorkernelfwhm=0 # Linear range values. When normalizing the images to a new range, use the # range 'newmin-newmax'. It is obtained by the following operations: # OldRange = (OldMax - OldMin) # NewRange = (NewMax - NewMin) # NewValue = (((OldValue - OldMin) * NewRange) / OldRange) + NewMin minvalrange=0.000 maxvalrange=100.0 # To enhance the image bias=0.0 gamma=1.0 contrast=1.0 markoptions="" quiet="" tmpdir="" keeptmp=0 checkparams=0 output="color-faint-gray.pdf" version=@VERSION@ scriptname=@SCRIPT_NAME@ # Output of `--usage' and `--help': print_usage() { cat < # Contributing author: # Raul Infante-Sainz # Mohammad Akhlaghi # Carlos Morales-Socorro # Copyright (C) 2020-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # Exit the script in the case of failure set -e # 'LC_NUMERIC' is responsible for formatting numbers printed by the OS. It # prevents floating points like '23,45' instead of '23.45'. export LC_NUMERIC=C # Default parameter's values hdu=1 quiet="" output="" tmpdir="" catalog="" keeptmp="" segmented="" brightmag=-10 racolumn="ra" faintmagdiff=4 deccolumn="dec" minaxisratio=0.9 magnituderange="" version=@VERSION@ mindistdeg=0.016666667 # one arcmin: 1/60 field="phot_g_mean_mag" scriptname=@SCRIPT_NAME@ parallaxanderrorcolumn="" matchaperturedeg=0.002777778 # 10 arcsec: 10/3600 dataset="gaia --dataset=dr3" # Output of '--usage' print_usage() { cat < circular shape). To do that, a catalogue is computed # using 'astmkcatalog' using as input the segmented image. Then, that # catalogue is matched with the Gaia catalog and filtered by the # 'minaxisratio' criteria. circular=$tmpdir/circular-objects.fits if [ -f $circular ]; then echo "Catalog of circular objects already exists" else if [ x"$segmented" = x ]; then cp $goodparallax $circular echo "No segmented image given to use '--minaxisratio'" else # Intermediate files. qraw=$tmpdir/axisratio-raw.fits qmatch=$tmpdir/axisratio-match.fits # Measure axis ratios astmkcatalog $segmented --ids --ra --dec --axis-ratio \ --position-angle --fwhm --clumpscat \ --output=$qraw $quiet # Match with downloaded catalog astmatch $goodparallax --ccol1=$racolumn,$deccolumn \ $qraw --hdu2=CLUMPS --ccol2=RA,DEC \ --aperture=$matchaperturedeg \ --output=$qmatch $quiet \ --outcols=a$racolumn,a$deccolumn,a$field,bAXIS_RATIO,bPOSITION_ANGLE,bFWHM # Select circular objects asttable $qmatch --range=AXIS_RATIO,$minaxisratio,1 \ --output=$circular $quiet fi fi # Determine the number of neighbors around each object # ----------------------------------------------------- # # To have a good catalogue of stars to construct a PSF, it is necessary # that they are not contaminated by bright near objects. Here, those # objects that are contaminated by the presence of a nearby object are # rejected. # First of all based on ra and dec of circular stars determine the distance # between the circular star and brigther stars in minimumm distance and # based on '--noblank' and 'where' remove stars tha have distance larger # than minimum distance. Then remove each circular stars that have more # than 9 neighbors. lessneighbor=$tmpdir/less-than-2-stars.txt moreneighbor=$tmpdir/more-than-2-stars.txt echo "# Column 1: ra [deg,f64] Right ascension" > $lessneighbor echo "# Column 2: dec [deg,f64] Declination" >> $lessneighbor echo "# Column 3: $field [mag,f64] Magnitude" >> $lessneighbor echo "# Column 1: ra [deg,f64] Right ascension" > $moreneighbor echo "# Column 2: dec [deg,f64] Declination" >> $moreneighbor echo "# Column 3: $field [mag,f64] Magnitude" >> $moreneighbor # LOOP over the target catalog. For each star, check the the neighbors. asttable $circular -c$racolumn,$deccolumn,$field \ | while read r d mag; do # Make a file for number of neighbourhood. numberneighbor=$tmpdir/"$r_$d"th-star-neighbor.fits # Find number of neighborhod for each star. asttable $catalog_main -c$racolumn,$deccolumn -c$field \ -c'arith '$racolumn' '$deccolumn' '$r' '$d' distance-on-sphere \ set-i i i '$mindistdeg' gt nan where' \ --noblankend=4 \ --colinfoinstdout \ --output=$numberneighbor $quiet # Check number of neighborhod and remove each star that has more than 2 # neighbors: 1 means match with itself; >2 means that there are nearby # contaminant objects). lof=$(asttable $numberneighbor | wc -l) if [ $lof -lt 2 ]; then echo $r $d $mag >> $lessneighbor else echo $r $d $mag >> $moreneighbor fi done # Create the final output catalogue # --------------------------------- # # This is the catalog with the proper stars once all filtering parameters # have been taken into account and nearby contaminants have been rejected. # Just convert the '.txt' catalog from the above loop to a '.fits' file. asttable $lessneighbor --output=$output # The contaminated objects catalog may be useful for the user for checking # objects to be rejected or not. contaminated_objects=$tmpdir/catalog_contaminated_objects.txt asttable $moreneighbor --output=$contaminated_objects # Print the statistics of the generated catalogue # ----------------------------------------------- # # If the user do not want to see all steps of run, the 'quiet' option must # be used. Without this option user can see all steps of run. if [ x"$quiet" = x ]; then stats_nstars_total=$(asttable $catalog_main | wc -l) stats_nstars_noneighbors=$(asttable $output | wc -l) stats_nstars_goodparallax=$(asttable $goodparallax | wc -l) echo "Number of stars in wider mag-range: $stats_nstars_total" echo "Number of stars with good parallax: $stats_nstars_goodparallax" echo "Number of stars with no neighbors: $stats_nstars_noneighbors" if [ ! -$segmented ]; then stats_nstars_matched=$(asttable $qmatch) echo "Number of clumps matched stars: $stats_nstars_matched" fi fi # Remove temporary directory # -------------------------- # # If user does not specify to keep build file with the option of # --keeptmp', then the directory will be removed. if [ x"$keeptmp" = x ]; then rm -rf $tmpdir fi gnuastro-0.22/bin/script/psf-scale-factor.sh0000644000175000017500000007256614551337306014550 #!/bin/sh # Obtain the scale factor by which it is necessary to multiply a given PSF # image in order to match it to a particular star within a given ring of # radii. Run with `--help', or see description under `print_help' (below) # for more. # # Original author: # Raul Infante-Sainz # Contributing author(s): # Mohammad Akhlaghi # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . # Exit the script in the case of failure set -e # 'LC_NUMERIC' is responsible for formatting numbers printed by the OS. It # prevents floating points like '23,45' instead of '23.45'. export LC_NUMERIC=C # Default option values (can be changed with options on the command-line). hdu=1 psf="" quiet="" psfhdu=1 center="" keeptmp=0 tmpdir="" segment="" normradii="" widthinpix="" nocentering=0 sigmaclip="3,0.1" version=@VERSION@ scriptname=@SCRIPT_NAME@ # Output of `--usage' and `--help': print_usage() { cat < $output fi # If the user does not specify to keep the temporal files with the option # `--keeptmp', then remove the whole directory. if [ $keeptmp = 0 ]; then rm -r $tmpdir fi exit 0 fi # Crop and unlabel the segmentation image # --------------------------------------- # # If the user provides a segmentation image, treat it appropiately in order # to mask all objects that are not the central one. If not, just consider # that the cropped and masked image is the cropped (not masked) image. The # process is as follow: # - Compute the central clump and object labels. This is done with the # option '--oneelemstdout' of Crop. # - Crop the original mask image. # - Crop the original mask image to a central region (core), in order to # compute what is the central object id. This is necessary to unmask # this object. # - Compute what is the central object value, using the median value. # - In the original cropped mask, convert all pixels belonging to the # central object to zeros. By doing this, the central object becomes as # sky. # - Mask all non zero pixels in the mask image as nan values. if [ x"$segment" != x ]; then # Find the object and clump labels of the target. clab=$(astcrop $segment --hdu=CLUMPS --mode=img --width=1,1 \ --oneelemstdout --center=$xcenter,$ycenter \ --quiet) olab=$(astcrop $segment --hdu=OBJECTS --mode=img --width=1,1 \ --oneelemstdout --center=$xcenter,$ycenter \ --quiet) # If for any reason, a clump or object label couldn't be initialized at # the given coordiante, simply ignore this step. But print a warning so # the user is informed of the situation (and that this is a bug: 'clab' # should be initialized!). if [ x"$clab" = x -o x"$olab" = x ]; then if [ x"$quiet" = x ]; then cat <0.5){x=1-x; xshift=1} else {x*=-1; xshift=0}; \ if(y>0.5){y=1-y; yshift=1} else {y*=-1; yshift=0}; \ printf("%f,%f %d,%d\n", x, y, \ int($1)+xshift+1, int($2)+yshift+1)}') # Warp image based on the measured displacement (first component of the # output above). warpped=$tmpdir/cropped-masked-warpforcenter-$objectid.fits DXY=$(echo "$warpcoord" | awk '{print $1}') astwarp $cropped_masked --translate=$DXY --output=$warpped $quiet # Crop image based on the calculated shift (second component of the # output above). centermsk=$tmpdir/cropped-masked-centered-$objectid.fits CXY=$(echo "$warpcoord" | awk '{print $2}') astcrop $warpped -h1 \ --mode=img --output=$centermsk $quiet \ --center=$CXY --width=$xwidthinpix,$ywidthinpix else # If the user did not want to correct the center of image, we'll use # the raw crop as input for the next step. centermsk=$cropped_masked fi # Crop the PSF image with the same size. psfcropped=$tmpdir/cropped-psf-$objectid.fits psfxcenter=$(astfits $psf -h$psfhdu --keyvalue=NAXIS1 --quiet \ | awk '{print $1/2+1}') psfycenter=$(astfits $psf -h$psfhdu --keyvalue=NAXIS2 --quiet \ | awk '{print $1/2+1}') astcrop $psf --hdu=$psfhdu --mode=img \ --center=$psfxcenter,$psfycenter \ --width=$xwidthinpix,$ywidthinpix \ --output=$psfcropped $quiet # Build a radial profile image. It will be used to only select pixels # within the requested radial range. xradcenter=$(echo $xwidthinpix | awk '{print $1/2+1}') yradcenter=$(echo $ywidthinpix | awk '{print $1/2+1}') maxradius=$(printf "$xwidthinpix\n$ywidthinpix" \ | aststatistics --maximum --quiet) radcropped=$tmpdir/cropped-radial-$objectid.fits echo "1 $xradcenter $yradcenter 7 $maxradius 0 0 1 1 1" \ | astmkprof --background=$psfcropped --clearcanvas \ --oversample=1 --output=$radcropped $quiet # Find the multiplication factor multipimg=$tmpdir/for-factor-$objectid.fits astarithmetic $centermsk -h1 set-i \ $psfcropped -h1 set-p \ $radcropped -h1 set-r \ r $normradiusmin lt r $normradiusmax ge or set-m \ i p / m nan where --output $multipimg $quiet multifactor=$(aststatistics $multipimg --sigclip-median \ --sclipparams=$sigmaclip --quiet) # Print the multiplication factor in standard output or in a given file if [ x"$output" = x ]; then echo $multifactor else echo $multifactor > $output fi # Remove temporary files # ---------------------- # # If the user does not specify to keep the temporal files with the option # `--keeptmp', then remove the whole directory. if [ $keeptmp = 0 ]; then rm -r $tmpdir fi gnuastro-0.22/bin/script/pointing-simulate.sh0000644000175000017500000004430214551337306015052 #!/bin/sh # Script to simuate a dither pattern based on an existing image # (accounting for its distortion). # # Original author: # Mohammad Akhlaghi # Contributing author(s): # Copyright (C) 2023-2024 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Exit the script in the case of failure set -e # 'LC_NUMERIC' is responsible for formatting numbers printed by the OS. It # prevents floating points like '23,45' instead of '23.45'. export LC_NUMERIC=C # Default values. img="" hdu=1 cat="" width="" quiet="" imghdu=1 center="" keeptmp=0 racol="RA" deccol="DEC" widthinpix=0 numthreads=0 version=@VERSION@ hook_warp_after="" hook_warp_before="" stack_operator="sum" scriptname=@SCRIPT_NAME@ ctype="RA---TAN,DEC--TAN" output=pointing-simulate.fits installdir=@PREFIX@/share/gnuastro # Output of '--help' print_help() { cat < $config echo "ctype = $ctype" >> $config echo "width = $width" >> $config echo "quiet = $quiet" >> $config echo "center = $center" >> $config echo "output = $output" >> $config echo "imghdu = $imghdu" >> $config echo "scriptname = $scriptname" >> $config echo "stack-operator = $stack_operator" >> $config echo "dithers = $(seq $ndither | tr '\n' ' ')" >> $config echo "hook-warp-before=$hook_warp_before" >> $config echo "hook-warp-after=$hook_warp_after" >> $config if [ $widthinpix = 1 ]; then echo "widthinpix = --widthinpix" >> $config else echo "widthinpix = " >> $config fi asttable $cat -c$racol,$deccol | while read r d; do # Add the RA and Dec of the center of each pointing. echo "$counter-ra = $r" >> $config echo "$counter-dec = $d" >> $config # Increment the counter. counter=$((counter+1)) done # If the user hasn't set the number threads, find it # -------------------------------------------------- # # Note that on different operating systems, the command to read the number # of threads differs: for example in GNU/Linux based systems, it is # 'nproc', but in macOS is is a special case of 'sysctl'. if [ x"$numthreads" = x0 ]; then if type nproc > /dev/null 2> /dev/null; then numthreads=$(nproc --all); else numthreads=$(sysctl -a | awk '/^hw\.ncpu/{print $2}') if [ x"$numthreads" = x ]; then numthreads=1; fi fi fi # Call the Makefile # ----------------- # # Make is invoked with the requested Makefile. We cannot put 'tmpdir' into # the configuration file because the configuration file is within the # temporary directory. Also, the number of threads should be given when # calling Make. Otherwise, all other settings should be taken inside the # configuration file. if [ x"$mksrc" = x ]; then mksrc=$installdir/pointing-simulate.mk; fi make -f $mksrc tmpdir=$tmpdir --jobs=$numthreads # Remove temporary directory # -------------------------- # # If user does not specify to keep the build file with the option of # --keeptmp', then the directory will be removed. if [ x"$keeptmp" = x ]; then rm -r $tmpdir fi # Delete the temporary directory if necessary if [ "$keeptmp" = 0 ]; then rm -rf $tmpdir fi gnuastro-0.22/bin/script/pointing-simulate.mk0000644000175000017500000000711414551337306015047 # Makefile to do the number-crunching of the 'pointing-simulate.sh' script. # # Original author: # Mohammad Akhlaghi # Contributing author(s): # Copyright (C) 2023-2024 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Include the parameters from the user. include $(tmpdir)/pointing-simulate.conf # Final target. all: $(output) # Second expansion. .SECONDEXPANSION: # Stop the recipe's shell if the command fails .SHELLFLAGS = -ec # Hooks preparation: # - For the check in the shell (to see if the hook is activated or not), # it is easier to work with a single word (hence why '$(word 1) is # being used). # - Shell scripts can have double-quotations, which can intefere with the # double quotations within the recipe. hook-warp-after-check=$(subst \",,$(word 1,$(hook-warp-after))) hook-warp-before-check=$(subst \",,$(word 1,$(hook-warp-before))) # Build each separate exposure. exposures=$(foreach d,$(dithers),$(tmpdir)/exp-$(d).fits) $(exposures): $(tmpdir)/exp-%.fits: $(img) | $(tmpdir) # Copy the input into a temporary one and edit its keywords to adjust # to this pointings position. # - 'TARGET' is defined for hooks (who don't see Make's '$@'). # - After each hook, we need to make sure the necessary file for the # next step has been created. @TARGET=$@; \ copy=$(subst .fits,-copy.fits,$@); \ WARPED=$(subst .fits,-warped.fits,$@); \ TOWARP=$(subst .fits,-to-warp.fits,$@); \ EXPOSURE=$(subst .fits,-exposure.fits,$@); \ astfits $(img) --copy=$(imghdu) --output=$$copy $(quiet); \ astfits --update=CRVAL1,$($*-ra) $$copy \ --update=CRVAL2,$($*-dec) $(quiet); \ astarithmetic $$copy 1 uint8 constant --output=$$EXPOSURE \ $(quiet); \ rm $$copy; \ if [ x$(hook-warp-before-check) = x ]; then \ cp $$EXPOSURE $$TOWARP; \ else \ eval "$(hook-warp-before)"; \ if ! [ -f $$TOWARP ]; then \ echo "$(scriptname): command given to '--hook-warp-before' did not create the required input for the next step. Please make sure that the final output of the command given to this hoook is called as '\$$TOWARP' in your command. See the documentation and tutorials for more"; \ exit 1; \ fi; \ fi; \ astwarp $$TOWARP --ctype=$(ctype) --center=$(center) \ $(quiet) --width=$(width) --output=$$WARPED \ $(widthinpix); \ if [ x$(hook-warp-after-check) = x ]; then \ astarithmetic $$WARPED isnotblank -o$$TARGET $(quiet); \ else \ eval "$(hook-warp-after)"; \ if ! [ -f $$TARGET ]; then \ echo "$(scriptname): command given to '--hook-warp-after' did not create the required input for the next step. Please make sure that the final output of the command given to this hoook is called as \$$TARGET in your command. See the documentation and tutorials for more"; \ exit 1; \ fi; \ fi; \ rm $$WARPED $$TOWARP $$EXPOSURE # Build the stack $(output): $(exposures) astarithmetic $(exposures) $(words $(exposures)) \ $(stack-operator) -g1 --output=$@ $(quiet) gnuastro-0.22/bin/script/fits-view.desktop.desktop0000644000175000017500000000467014551337306016032 # Call the 'astscript-fits-view' command on files selected from the graphic # user interface (GUI) for those that support the respective standard from # freedesktop.org (including GNOME and KDE): # https://specifications.freedesktop.org/desktop-entry-spec/latest/ # # This file will be automatically installed with the rest of Gnuastro in # 'PREFIX/share/gnuastro' (where 'PREFIX' is the value given to '--prefix' # at Gnuastro's configure time, by default it is '/usr/local'). # # To activate this in your GUI (based on freedesktop.org including GNOME, # and KDE Plasma and Xfce): # # 1. Run the following command, while replacing 'PREFIX'. If you don't # know what to put in 'PREFIX', run 'which astfits', and extract # 'PREFIX' from the output: the string before '/bin/astfits'. # # ln -sf PREFIX/share/gnuastro/fits-view.desktop \ # ~/.local/share/applications/ # # 2. Tell your GUI environment to open FITS files with this (only once): # # - Right-click on a FITS file # --> "Open with other application" # --> "View all applications" # --> "astscript-fits-view" # # Manual installation instructions: # - Replace '@PREFIX@' with the Gnuastro installation PREFIX. # - Copy this file to '~/.local/share/applications/'. # - Follow step 2 of the activation commands above. # # Current maintainer: # Mohammad Akhlaghi # Contributing authors: # Sepideh Eskandarlou # Copyright (C) 2020-2024 Free Software Foundation, Inc. # # This '.desktop' file is part of Gnuastro. Gnuastro is free software: you # can redistribute it and/or modify it under the terms of the GNU General # Public License as published by the Free Software Foundation, either # version 3 of the License, or (at your option) any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see . [Desktop Entry] Type=Application Version=1.0 Name=astscript-fits-view Comment=View FITS images with DS9 and tables with TopCat Terminal=false Categories=Graphics;RasterGraphics;2DGraphics;3DGraphics Exec=@PREFIX@/bin/astscript-fits-view --quiet %F gnuastro-0.22/bootstrapped/0000755000175000017500000000000014557514203011554 5gnuastro-0.22/bootstrapped/build-aux/0000755000175000017500000000000014557514200013443 5gnuastro-0.22/bootstrapped/build-aux/ar-lib0000755000175000017500000001336314557510611014467 #! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2019-07-04.01; # UTC # Copyright (C) 2010-2021 Free Software Foundation, Inc. # Written by Peter Rosin . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin | msys) file=`cygpath -m "$file" || echo "$file"` ;; wine) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat <. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gnuastro-0.22/bootstrapped/build-aux/config.guess0000755000175000017500000014304614557510362015720 #! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2024 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2024-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system '$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try '$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, 'CC_FOR_BUILD' used to be named 'HOST_CC'. We still # use 'HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #if defined(__ANDROID__) LIBC=android #else #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #elif defined(__LLVM_LIBC__) LIBC=llvm #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like '4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*) GUESS="$UNAME_MACHINE-pc-managarm-mlibc" ;; *:[Mm]anagarm:*:*) GUESS="$UNAME_MACHINE-unknown-managarm-mlibc" ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __ARM_EABI__ #ifdef __ARM_PCS_VFP ABI=eabihf #else ABI=eabi #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in eabi | eabihf) CPU=armv8l; LIBCABI=$LIBC$ABI ;; esac fi GUESS=$CPU-unknown-linux-$LIBCABI ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; kvx:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; kvx:cos:*:*) GUESS=$UNAME_MACHINE-unknown-cos ;; kvx:mbr:*:*) GUESS=$UNAME_MACHINE-unknown-mbr ;; loongarch32:Linux:*:* | loongarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __i386__ ABI=x86 #else #ifdef __ILP32__ ABI=x32 #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in x86) CPU=i686 ;; x32) LIBCABI=${LIBC}x32 ;; esac fi GUESS=$CPU-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find 'uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys 'ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; ppc:Haiku:*:*) # Haiku running on Apple PowerPC GUESS=powerpc-apple-haiku ;; *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) GUESS=$UNAME_MACHINE-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; *:Ironclad:*:*) GUESS=$UNAME_MACHINE-unknown-ironclad ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gnuastro-0.22/bootstrapped/build-aux/config.rpath0000755000175000017500000004425414557510504015707 #! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2024 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly* | midnightbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; freebsd* | dragonfly* | midnightbsd*) library_names_spec='$libname$shrext' ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try '$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \ | windows-* ) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x"$basic_os" != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. obj= case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 fi ;; *) echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2 exit 1 ;; esac case $obj in aout* | coff* | elf* | pe*) ;; '') # empty is fine ;; *) echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2 exit 1 ;; esac # Here we handle the constraint that a (synthetic) cpu and os are # valid only in combination with each other and nowhere else. case $cpu-$os in # The "javascript-unknown-ghcjs" triple is used by GHC; we # accept it here in order to tolerate that, but reject any # variations. javascript-ghcjs) ;; javascript-* | *-ghcjs) echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os-$obj in linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \ | linux-mlibc*- | linux-musl*- | linux-newlib*- \ | linux-relibc*- | linux-uclibc*- ) ;; uclinux-uclibc*- ) ;; managarm-mlibc*- | managarm-kernel*- ) ;; windows*-msvc*-) ;; -dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \ | -uclibc*- ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 exit 1 ;; -kernel*- ) echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 exit 1 ;; *-kernel*- ) echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 exit 1 ;; *-msvc*- ) echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2 exit 1 ;; kfreebsd*-gnu*- | kopensolaris*-gnu*-) ;; vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) ;; nto-qnx*-) ;; os2-emx-) ;; *-eabi*- | *-gnueabi*-) ;; none--*) # None (no kernel, i.e. freestanding / bare metal), # can be paired with an machine code file format ;; -*-) # Blank kernel with real OS is always fine. ;; --*) # Blank kernel and OS with real machine code file format is always fine. ;; *-*-*) echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gnuastro-0.22/bootstrapped/build-aux/install-sh0000744000175000017500000003610114557510613015372 #!/bin/sh # install - install a program, script, or datafile scriptversion=2023-11-23.18; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Report bugs to . GNU Automake home page: . General help using GNU software: ." while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gnuastro-0.22/bootstrapped/build-aux/ltmain.sh0000644000175000017500000121256314557510427015224 #! /usr/bin/env sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2019-02-19.15 # libtool (GNU libtool) 2.4.7.4-1ec8f-dirty # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.7.4-1ec8f-dirty package_revision=2.4.7.4 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2019-02-19.15; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2004-2019, 2021 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # These NLS vars are set unconditionally (bootstrap issue #24). Unset those # in case the environment reset is needed later and the $save_* variant is not # defined (see the code above). LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # func_unset VAR # -------------- # Portably unset VAR. # In some shells, an 'unset VAR' statement leaves a non-zero return # status if VAR is already unset, which might be problematic if the # statement is used at the end of a function (thus poisoning its return # value) or when 'set -e' is active (causing even a spurious abort of # the script in this case). func_unset () { { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } } # Make sure CDPATH doesn't cause `cd` commands to output the target dir. func_unset CDPATH # Make sure ${,E,F}GREP behave sanely. func_unset GREP_OPTIONS ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" # require_check_ifs_backslash # --------------------------- # Check if we can use backslash as IFS='\' separator, and set # $check_ifs_backshlash_broken to ':' or 'false'. require_check_ifs_backslash=func_require_check_ifs_backslash func_require_check_ifs_backslash () { _G_save_IFS=$IFS IFS='\' _G_check_ifs_backshlash='a\\b' for _G_i in $_G_check_ifs_backshlash do case $_G_i in a) check_ifs_backshlash_broken=false ;; '') break ;; *) check_ifs_backshlash_broken=: break ;; esac done IFS=$_G_save_IFS require_check_ifs_backslash=: } ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1+=\\ \$func_quote_arg_result" }' else func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1=\$$1\\ \$func_quote_arg_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_portable EVAL ARG # ---------------------------- # Internal function to portably implement func_quote_arg. Note that we still # keep attention to performance here so we as much as possible try to avoid # calling sed binary (so far O(N) complexity as long as func_append is O(1)). func_quote_portable () { $debug_cmd $require_check_ifs_backslash func_quote_portable_result=$2 # one-time-loop (easy break) while true do if $1; then func_quote_portable_result=`$ECHO "$2" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` break fi # Quote for eval. case $func_quote_portable_result in *[\\\`\"\$]*) # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string # contains the shell wildcard characters. case $check_ifs_backshlash_broken$func_quote_portable_result in :*|*[\[\*\?]*) func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ | $SED "$sed_quote_subst"` break ;; esac func_quote_portable_old_IFS=$IFS for _G_char in '\' '`' '"' '$' do # STATE($1) PREV($2) SEPARATOR($3) set start "" "" func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy IFS=$_G_char for _G_part in $func_quote_portable_result do case $1 in quote) func_append func_quote_portable_result "$3$2" set quote "$_G_part" "\\$_G_char" ;; start) set first "" "" func_quote_portable_result= ;; first) set quote "$_G_part" "" ;; esac done done IFS=$func_quote_portable_old_IFS ;; *) ;; esac break done func_quote_portable_unquoted_result=$func_quote_portable_result case $func_quote_portable_result in # double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # many bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_portable_result=\"$func_quote_portable_result\" ;; esac } # func_quotefast_eval ARG # ----------------------- # Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', # but optimized for speed. Result is stored in $func_quotefast_eval. if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then printf -v _GL_test_printf_tilde %q '~' if test '\~' = "$_GL_test_printf_tilde"; then func_quotefast_eval () { printf -v func_quotefast_eval_result %q "$1" } else # Broken older Bash implementations. Make those faster too if possible. func_quotefast_eval () { case $1 in '~'*) func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result ;; *) printf -v func_quotefast_eval_result %q "$1" ;; esac } fi else func_quotefast_eval () { func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result } fi # func_quote_arg MODEs ARG # ------------------------ # Quote one ARG to be evaled later. MODEs argument may contain zero or more # specifiers listed below separated by ',' character. This function returns two # values: # i) func_quote_arg_result # double-quoted (when needed), suitable for a subsequent eval # ii) func_quote_arg_unquoted_result # has all characters that are still active within double # quotes backslashified. Available only if 'unquoted' is specified. # # Available modes: # ---------------- # 'eval' (default) # - escape shell special characters # 'expand' # - the same as 'eval'; but do not quote variable references # 'pretty' # - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might # be used later in func_quote to get output like: 'echo "a b"' instead # of 'echo a\ b'. This is slower than default on some shells. # 'unquoted' # - produce also $func_quote_arg_unquoted_result which does not contain # wrapping double-quotes. # # Examples for 'func_quote_arg pretty,unquoted string': # # string | *_result | *_unquoted_result # ------------+-----------------------+------------------- # " | \" | \" # a b | "a b" | a b # "a b" | "\"a b\"" | \"a b\" # * | "*" | * # z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" # # Examples for 'func_quote_arg pretty,unquoted,expand string': # # string | *_result | *_unquoted_result # --------------+---------------------+-------------------- # z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" func_quote_arg () { _G_quote_expand=false case ,$1, in *,expand,*) _G_quote_expand=: ;; esac case ,$1, in *,pretty,*|*,expand,*|*,unquoted,*) func_quote_portable $_G_quote_expand "$2" func_quote_arg_result=$func_quote_portable_result func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result ;; *) # Faster quote-for-eval for some shells. func_quotefast_eval "$2" func_quote_arg_result=$func_quotefast_eval_result ;; esac } # func_quote MODEs ARGs... # ------------------------ # Quote all ARGs to be evaled later and join them into single command. See # func_quote_arg's description for more info. func_quote () { $debug_cmd _G_func_quote_mode=$1 ; shift func_quote_result= while test 0 -lt $#; do func_quote_arg "$_G_func_quote_mode" "$1" if test -n "$func_quote_result"; then func_append func_quote_result " $func_quote_arg_result" else func_append func_quote_result "$func_quote_arg_result" fi shift done } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_arg pretty,expand "$_G_cmd" eval "func_notquiet $func_quote_arg_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_arg expand,pretty "$_G_cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2010-2019, 2021 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # # Set a version string for this script. scriptversion=2019-02-19.15; # UTC ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# Copyright'. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug in processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # in the main code. A hook is just a list of function names that can be # run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of hook functions to be called by # FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_propagate_result FUNC_NAME_A FUNC_NAME_B # --------------------------------------------- # If the *_result variable of FUNC_NAME_A _is set_, assign its value to # *_result variable of FUNC_NAME_B. func_propagate_result () { $debug_cmd func_propagate_result_result=: if eval "test \"\${${1}_result+set}\" = set" then eval "${2}_result=\$${1}_result" else func_propagate_result_result=false fi } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It's assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook functions." ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do func_unset "${_G_hook}_result" eval $_G_hook '${1+"$@"}' func_propagate_result $_G_hook func_run_hooks if $func_propagate_result_result; then eval set dummy "$func_run_hooks_result"; shift fi done } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list from your hook function. You may remove # or edit any options that you action, and then pass back the remaining # unprocessed options in '_result', escaped # suitably for 'eval'. # # The '_result' variable is automatically unset # before your hook gets called; for best performance, only set the # *_result variable when necessary (i.e. don't call the 'func_quote' # function unnecessarily because it can be an expensive operation on some # machines). # # Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # No change in '$@' (ignored completely by this hook). Leave # # my_options_prep_result variable intact. # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # args_changed=false # # # Note that, for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: # args_changed=: # ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # args_changed=: # ;; # *) # Make sure the first unrecognised option "$_G_opt" # # is added back to "$@" in case we need it later, # # if $args_changed was set to 'true'. # set dummy "$_G_opt" ${1+"$@"}; shift; break ;; # esac # done # # # Only call 'func_quote' here if we processed at least one argument. # if $args_changed; then # func_quote eval ${1+"$@"} # my_silent_option_result=$func_quote_result # fi # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # } # func_add_hook func_validate_options my_option_validation # # You'll also need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options_finish [ARG]... # ---------------------------- # Finishing the option parse loop (call 'func_options' hooks ATM). func_options_finish () { $debug_cmd func_run_hooks func_options ${1+"$@"} func_propagate_result func_run_hooks func_options_finish } # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd _G_options_quoted=false for my_func in options_prep parse_options validate_options options_finish do func_unset func_${my_func}_result func_unset func_run_hooks_result eval func_$my_func '${1+"$@"}' func_propagate_result func_$my_func func_options if $func_propagate_result_result; then eval set dummy "$func_options_result"; shift _G_options_quoted=: fi done $_G_options_quoted || { # As we (func_options) are top-level options-parser function and # nobody quoted "$@" for us yet, we need to do it explicitly for # caller. func_quote eval ${1+"$@"} func_options_result=$func_quote_result } } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propagate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} func_propagate_result func_run_hooks func_options_prep } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd _G_parse_options_requote=false # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} func_propagate_result func_run_hooks func_parse_options if $func_propagate_result_result; then eval set dummy "$func_parse_options_result"; shift # Even though we may have changed "$@", we passed the "$@" array # down into the hook and it quoted it for us (because we are in # this if-branch). No need to quote it again. _G_parse_options_requote=false fi # Break out of the loop if we already parsed every option. test $# -gt 0 || break # We expect that one of the options parsed in this function matches # and thus we remove _G_opt from "$@" and need to re-quote. _G_match_parse_options=: _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" >&2 $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) if test $# = 0 && func_missing_arg $_G_opt; then _G_parse_options_requote=: break fi case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) _G_parse_options_requote=: ; break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift _G_match_parse_options=false break ;; esac if $_G_match_parse_options; then _G_parse_options_requote=: fi done if $_G_parse_options_requote; then # save modified positional parameters for caller func_quote eval ${1+"$@"} func_parse_options_result=$func_quote_result fi } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} func_propagate_result func_run_hooks func_validate_options # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables # after splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} if test "x$func_split_equals_lhs" = "x$1"; then func_split_equals_rhs= fi }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs=" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. # The version message is extracted from the calling file's header # comments, with leading '# ' stripped: # 1. First display the progname and version # 2. Followed by the header comment line matching /^# Written by / # 3. Then a blank line followed by the first following line matching # /^# Copyright / # 4. Immediately followed by any lines between the previous matches, # except lines preceding the intervening completely blank line. # For example, see the header comments of this file. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /^# Written by /!b s|^# ||; p; n :fwd2blnk /./ { n b fwd2blnk } p; n :holdwrnt s|^# || s|^# *$|| /^Copyright /!{ /./H n b holdwrnt } s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| G s|\(\n\)\n*|\1|g p; q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.7.4-1ec8f-dirty' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname (GNU libtool) 2.4.7.4-1ec8f-dirty automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= _G_rc_lt_options_prep=: # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; *) _G_rc_lt_options_prep=false ;; esac if $_G_rc_lt_options_prep; then # Pass back the list of options. func_quote eval ${1+"$@"} libtool_options_prep_result=$func_quote_result fi } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd _G_rc_lt_parse_options=false # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_match_lt_parse_options=: _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"} ; shift _G_match_lt_parse_options=false break ;; esac $_G_match_lt_parse_options && _G_rc_lt_parse_options=: done if $_G_rc_lt_parse_options; then # save modified positional parameters for caller func_quote eval ${1+"$@"} libtool_parse_options_result=$func_quote_result fi } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote eval ${1+"$@"} libtool_validate_options_result=$func_quote_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_arg pretty "$libobj" test "X$libobj" != "X$func_quote_arg_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_arg pretty "$srcfile" qsrcfile=$func_quote_arg_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG -Xcompiler FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wa,FLAG -Xassembler FLAG pass linker-specific FLAG directly to the assembler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_arg pretty "$nonopt" install_prog="$func_quote_arg_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_arg pretty "$arg" func_append install_prog "$func_quote_arg_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_arg pretty "$arg" func_append install_prog " $func_quote_arg_result" if test -n "$arg2"; then func_quote_arg pretty "$arg2" fi func_append install_shared_prog " $func_quote_arg_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_arg pretty "$install_override_mode" func_append install_shared_prog " -m $func_quote_arg_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_arg expand,pretty "$relink_command" eval "func_echo $func_quote_arg_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" func_quote_arg pretty "$ECHO" qECHO=$func_quote_arg_result $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=$qECHO fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_arg pretty,unquoted "$arg" qarg=$func_quote_arg_unquoted_result func_append libtool_args " $func_quote_arg_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xassembler) func_append compiler_flags " -Xassembler $qarg" prev= func_append compile_command " -Xassembler $qarg" func_append finalize_command " -Xassembler $qarg" continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. -pthread) case $host in *solaris2*) ;; *) case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac ;; esac continue ;; -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_arg pretty "$flag" func_append arg " $func_quote_arg_result" func_append compiler_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_arg pretty "$flag" func_append arg " $wl$func_quote_arg_result" func_append compiler_flags " $wl$func_quote_arg_result" func_append linker_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xassembler) prev=xassembler continue ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer # -fuse-ld=* Linker select flags for GCC # -Wa,* Pass flags directly to the assembler # -Werror, -Werror=* Report (specified) warnings as errors -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*|-Werror|-Werror=*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_arg pretty "$arg" arg=$func_quote_arg_result fi ;; # Some other compiler flag. -* | +*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf | midnightbsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_arg expand,pretty "$cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_arg expand,pretty "$cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_arg pretty "$var_value" relink_command="$var=$func_quote_arg_result; export $var; $relink_command" fi done func_quote eval cd "`pwd`" func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" relink_command=$func_quote_arg_unquoted_result fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_arg pretty,unquoted "$var_value" relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" fi done # Quote the link command for shipping. func_quote eval cd "`pwd`" relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" func_quote_arg pretty,unquoted "$relink_command" relink_command=$func_quote_arg_unquoted_result if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: gnuastro-0.22/bootstrapped/build-aux/missing0000755000175000017500000001533614557510611014774 #! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program 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 General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gnuastro-0.22/bootstrapped/build-aux/depcomp0000755000175000017500000005620114557510362014751 #! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2023-11-23.18; # UTC # Copyright (C) 1999-2024 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program 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 General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . GNU Automake home page: . General help using GNU software: . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsolete pre-3.x GCC compilers. ## but also to in-use compilers like IBM xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gnuastro-0.22/bootstrapped/build-aux/mdate-sh0000755000175000017500000001413514557510362015024 #!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2023-11-23.18; # UTC # Copyright (C) 1995-2024 Free Software Foundation, Inc. # written by Ulrich Drepper , June 1995 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST fi case $1 in '') echo "$0: No file. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: mdate-sh [--help] [--version] FILE Pretty-print the modification day of FILE, in the format: 1 January 1970 Report bugs to . GNU Automake home page: . General help using GNU software: . EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac error () { echo "$0: $1" >&2 exit 1 } # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # Use UTC to get reproducible result. TZ=UTC0 export TZ # GNU ls changes its time format in response to the TIME_STYLE # variable. Since we cannot assume 'unset' works, revert this # variable to its documented default. if test "${TIME_STYLE+set}" = set; then TIME_STYLE=posix-long-iso export TIME_STYLE fi save_arg1=$1 # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # Avoid user/group names that might have spaces, when possible. if ls -n /dev/null 1>/dev/null 2>&1; then ls_command="$ls_command -n" fi # A 'ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named "Jan", or "Feb", etc. However, it's unlikely that '/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set x`$ls_command /` # Find which argument is the month. month= command= until test $month do test $# -gt 0 || error "failed parsing '$ls_command /' output" shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done test -n "$month" || error "failed parsing '$ls_command /' output" # Get the extended ls output of the file or directory. set dummy x`eval "$ls_command \"\\\$save_arg1\""` # Remove all preceding arguments eval $command # Because of the dummy argument above, month is in $2. # # On a POSIX system, we should have # # $# = 5 # $1 = file size # $2 = month # $3 = day # $4 = year or time # $5 = filename # # On Darwin 7.7.0 and 7.6.0, we have # # $# = 4 # $1 = day # $2 = month # $3 = year or time # $4 = filename # Get the month. case $2 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac case $3 in ???*) day=$1;; *) day=$3; shift;; esac # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gnuastro-0.22/bootstrapped/build-aux/texinfo.tex0000644000175000017500000135161414506134604015574 % texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2023-09-19.19} % % Copyright 1985, 1986, 1988, 1990-2023 Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This texinfo.tex file 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 % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % https://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is https://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % LaTeX's \typeout. This ensures that the messages it is used for % are identical in format to the corresponding ones from latex/pdflatex. \def\typeout{\immediate\write17}% \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexsp=\sp \let\ptexstar=\* \let\ptexsup=\sup \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Give the space character the catcode for a space. \def\spaceisspace{\catcode`\ =10\relax} % Likewise for ^^M, the end of line character. \def\endlineisspace{\catcode13=10\relax} \chardef\dashChar = `\- \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Output routine % % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. % \domark is called twice inside \chapmacro, to add one % mark before the section break, and one after. % In the second call \prevchapterdefs is the same as \currentchapterdefs, % and \prevsectiondefs is the same as \currentsectiondefs. % Then if the page is not broken at the mark, some of the previous % section appears on the page, and we can get the name of this section % from \firstmark for @everyheadingmarks top. % @everyheadingmarks bottom uses \botmark. % % See page 260 of The TeXbook. \def\domark{% \toks0=\expandafter{\currentchapterdefs}% \toks2=\expandafter{\currentsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\currentcolordefs}% \mark{% \the\toks0 \the\toks2 % 0: marks for @everyheadingmarks top \noexpand\or \the\toks4 \the\toks6 % 1: for @everyheadingmarks bottom \noexpand\else \the\toks8 % 2: color marks }% } % \gettopheadingmarks, \getbottomheadingmarks, % \getcolormarks - extract needed part of mark. % % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url etc.) between @contents and the very first @chapter. \def\gettopheadingmarks{% \ifcase0\the\savedtopmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\the\savedtopmark\fi} % Avoid "undefined control sequence" errors. \def\currentchapterdefs{} \def\currentsectiondefs{} \def\currentsection{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\currentcolordefs{} % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\txipagewidth \newdimen\txipageheight % Main output routine. % \chardef\PAGE = 255 \newtoks\defaultoutput \defaultoutput = {\savetopmark\onepageout{\pagecontents\PAGE}} \output=\expandafter{\the\defaultoutput} \newbox\headlinebox \newbox\footlinebox % When outputting the double column layout for indices, an output routine % is run several times, hiding the original value of \topmark. Hence, save % \topmark at the beginning. % \newtoks\savedtopmark \newif\iftopmarksaved \topmarksavedtrue \def\savetopmark{% \iftopmarksaved\else \global\savedtopmark=\expandafter{\topmark}% \global\topmarksavedtrue \fi } % \onepageout takes a vbox as an argument. % \shipout a vbox for a single page, adding an optional header, footer % and footnote. This also causes index entries for this page to be written % to the auxiliary files. % \def\onepageout#1{% \hoffset=\normaloffset % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % \checkchapterpage % % Make the heading and footing. \makeheadline and \makefootline % use the contents of \headline and \footline. \def\commonheadfootline{\let\hsize=\txipagewidth \texinfochars} \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \global\setbox\headlinebox = \vbox{\commonheadfootline \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \global\setbox\footlinebox = \vbox{\commonheadfootline \makefootline}% % {% % Set context for writing to auxiliary files like index files. % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \atdummies % don't expand commands in the output. \turnoffactive \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % }% }% \global\topmarksavedfalse \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen % Main part of page, including any footnotes \def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Check if we are on the first page of a chapter. Used for printing headings. \newif\ifchapterpage \def\checkchapterpage{% % Get the chapter that was current at the end of the last page \ifcase1\the\savedtopmark\fi \let\prevchaptername\thischaptername % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \let\curchaptername\thischaptername % \ifx\curchaptername\prevchaptername \chapterpagefalse \else \chapterpagetrue \fi } % Argument parsing % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % For example, \def\foo{\parsearg\fooxxx}. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. Pass the result on to % \argremovespace. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argremovespace#1$ $\ArgTerm} % \argremovec might leave us with trailing space, though; e.g., % @end itemize @c foo % Note that the argument cannot contain the TeX $, as its catcode is % changed to \other when Texinfo source is read. \def\argremovespace#1 $#2\ArgTerm{\finishparsearg#1$\ArgTerm} % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it % just before passing the control to \next. % (But first, we have to remove the remaining $ or two.) \def\finishparsearg#1$#2\ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef - define a command taking an argument on the line % % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \long\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo calls \checkenv and executes the definition of \Efoo. \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @- allows explicit insertion of hyphenation points \def\-{\discretionary{\normaldash}{}{}}% % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. \addgroupbox \prevdepth = \dimen1 \checkinserts } \def\addgroupbox{ % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \txipageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\txipageheight \page \fi \fi \box\groupbox } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % This is similar to the 'needspace' module in LaTeX. % The first penalty allows a break if the end of the page is % not too far away. Following penalties and skips are discarded. % Otherwise, require at least \dimen0 of vertical space. % % (We used to use a \vtop to reserve space, but this had spacing issues % when followed by a section heading, as it was not a "discardable item". % This also has the benefit of providing glue before the page break if % there isn't enough space.) \vskip0pt plus \dimen0 \penalty-100 \vskip0pt plus -\dimen0 \vskip \dimen0 \penalty9999 \vskip -\dimen0 \penalty0\relax % this hides the above glue from \safewhatsit and \dobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\c{\begingroup \catcode`\^^M=\active% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \cxxx} {\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}} % \let\comment\c % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent {\restorefirstparagraphindent \indent}% \gdef\noindent{\restorefirstparagraphindent \noindent}% \global\everypar = {\kern -\parindent \restorefirstparagraphindent}% } % \gdef\restorefirstparagraphindent{% \global\let\indent = \ptexindent \global\let\noindent = \ptexnoindent \global\everypar = {}% } % leave vertical mode without cancelling any first paragraph indent \gdef\imageindent{% \toks0=\everypar \everypar={}% \ptexnoindent \global\everypar=\toks0 } % @refill is a no-op. \let\refill=\relax % @setfilename INFO-FILENAME - ignored \let\setfilename=\comment % @bye. \outer\def\bye{\chappager\pagelabels\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newbox\boxB \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % % For LuaTeX % \newif\iftxiuseunicodedestname \txiuseunicodedestnamefalse % For pdfTeX etc. \ifx\luatexversion\thisisundefined \else % Use Unicode destination names \txiuseunicodedestnametrue % Escape PDF strings with converting UTF-16 from UTF-8 \begingroup \catcode`\%=12 \directlua{ function UTF16oct(str) tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377') for c in string.utfvalues(str) do if c < 0x10000 then tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o', math.floor(c / 256), math.floor(c % 256))) else c = c - 0x10000 local c_hi = c / 1024 + 0xd800 local c_lo = c % 1024 + 0xdc00 tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o', math.floor(c_hi / 256), math.floor(c_hi % 256), math.floor(c_lo / 256), math.floor(c_lo % 256))) end end end } \endgroup \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}} % Escape PDF strings without converting \begingroup \directlua{ function PDFescstr(str) for c in string.bytes(str) do if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then tex.sprint(-2, string.format(string.char(0x5c) .. string.char(0x25) .. '03o', c)) else tex.sprint(-2, string.char(c)) end end end } % The -2 in the arguments here gives all the input to TeX catcode 12 % (other) or 10 (space), preventing undefined control sequence errors. See % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html % \endgroup \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}} \ifnum\luatexversion>84 % For LuaTeX >= 0.85 \def\pdfdest{\pdfextension dest} \let\pdfoutput\outputmode \def\pdfliteral{\pdfextension literal} \def\pdfcatalog{\pdfextension catalog} \def\pdftexversion{\numexpr\pdffeedback version\relax} \let\pdfximage\saveimageresource \let\pdfrefximage\useimageresource \let\pdflastximage\lastsavedimageresourceindex \def\pdfendlink{\pdfextension endlink\relax} \def\pdfoutline{\pdfextension outline} \def\pdfstartlink{\pdfextension startlink} \def\pdffontattr{\pdfextension fontattr} \def\pdfobj{\pdfextension obj} \def\pdflastobj{\numexpr\pdffeedback lastobj\relax} \let\pdfpagewidth\pagewidth \let\pdfpageheight\pageheight \edef\pdfhorigin{\pdfvariable horigin} \edef\pdfvorigin{\pdfvariable vorigin} \fi \fi % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi \newif\ifpdforxetex \pdforxetexfalse \ifpdf \pdforxetextrue \fi \ifx\XeTeXrevision\thisisundefined\else \pdforxetextrue \fi % Output page labels information. % See PDF reference v.1.7 p.594, section 8.3.1. % Page label ranges must be increasing. \ifpdf \def\pagelabels{% \def\title{0 << /P (T-) /S /D >>}% % % support @contents at very end of document \ifnum\contentsendcount=\pagecount \ifnum\arabiccount<\romancount \pdfcatalog{/PageLabels << /Nums [\title \the\arabiccount << /S /D >> \the\romancount << /S /r >> ] >> }\relax \fi % no contents in document \else\ifnum\contentsendcount=0 \pdfcatalog{/PageLabels << /Nums [\title \the\arabiccount << /S /D >> ] >> }\relax \else \pdfcatalog{/PageLabels << /Nums [\title \the\romancount << /S /r >> \the\contentsendcount << /S /D >> ] >> }\relax \fi\fi } \else \let\pagelabels\relax \fi \newcount\pagecount \pagecount=0 \newcount\romancount \romancount=0 \newcount\arabiccount \arabiccount=0 \newcount\contentsendcount \contentsendcount=0 \ifpdf \let\ptxadvancepageno\advancepageno \def\advancepageno{% \ptxadvancepageno\global\advance\pagecount by 1 } \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \xdef#1{#1}% \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \def\txiescapepdfutfsixteen#1{% \ifx\pdfescapestrutfsixteen\thisisundefined % No UTF-16 converting macro available. \txiescapepdf{#1}% \else \xdef#1{\pdfescapestrutfsixteen{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros using ideas from pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. The dark red here is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. We use % black by default, though. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % rg sets the color for filling (usual text, etc.); % RG sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\curcolor{0 0 0}% \def\setcolor#1{% \ifx#1\curcolor\else \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% \xdef\curcolor{#1}% \fi } % \let\maincolor\rgbBlack \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\currentcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\setpdfdestname#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \makevalueexpandable \turnoffactive \iftxiuseunicodedestname \ifx \declaredencoding \latone % Pass through Latin-1 characters. % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode. \else \ifx \declaredencoding \utfeight % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \fi \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \indexnofonts \makevalueexpandable \turnoffactive \ifx \declaredencoding \latone % The PDF format can use an extended form of Latin-1 in bookmark % strings. See Appendix D of the PDF Reference, Sixth Edition, for % the "PDFDocEncoding". \passthroughcharstrue % Pass through Latin-1 characters. % LuaTeX: Convert to Unicode % pdfTeX: Use Latin-1 as PDFDocEncoding \def\pdfoutlinetext{#1}% \else \ifx \declaredencoding \utfeight \ifx\luatexversion\thisisundefined % For pdfTeX with UTF-8. % TODO: the PDF format can use UTF-16 in bookmark strings, % but the code for this isn't done yet. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \else % For LuaTeX with UTF-8. % Pass through Unicode characters for title texts. \passthroughcharstrue \def\pdfoutlinetext{#1}% \fi \else % For non-Latin-1 or non-UTF-8 encodings. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \fi \fi % LuaTeX: Convert to UTF-16 % pdfTeX: Use Latin-1 as PDFDocEncoding \txiescapepdfutfsixteen\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use black for everything. \def\urlcolor{\rgbBlack} \let\linkcolor\rgbBlack \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. % % Currently we prefix the section name with the section number % for chapter and appendix headings only in order to avoid too much % horizontal space being required in the PDF viewer. \def\numchapentry##1##2##3##4{% \dopdfoutline{##2 ##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\unnchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} % \pdfgettoks - Surround page numbers in #1 with @pdflink. #1 may % be a simple number, or a list of numbers in the case of an index % entry. \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{\pdflinkpage{#1}{#1}}% \def\pdflinkpage#1#2{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#2\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput % % For XeTeX % \ifx\XeTeXrevision\thisisundefined \else % % XeTeX version check % \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1 % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307. % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941). % For avoiding PDF destination name replacement, we use this special % instead of xdvipdfmx's command line option `-C 0x0010'. \special{dvipdfmx:config C 0x0010} % XeTeX 0.99995+ comes with xdvipdfmx 20160307+. % It can handle Unicode destination names for PDF. \txiuseunicodedestnametrue \else % XeTeX < 0.99996 (TeX Live < 2016) cannot use the % `dvipdfmx:config' special. % So for avoiding PDF destination name replacement, % xdvipdfmx's command line option `-C 0x0010' is necessary. % % XeTeX < 0.99995 can not handle Unicode destination names for PDF % because xdvipdfmx 20150315 has a UTF-16 conversion issue. % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). \txiuseunicodedestnamefalse \fi % % Color support % \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % \def\pdfsetcolor#1{\special{pdf:scolor [#1]}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\currentcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % PDF outline support % % Emulate pdfTeX primitive \def\pdfdest name#1 xyz{% \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}% } % \def\setpdfdestname#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \makevalueexpandable \turnoffactive \iftxiuseunicodedestname % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \turnoffactive % Always use Unicode characters in title texts. \def\pdfoutlinetext{#1}% % For XeTeX, xdvipdfmx converts to UTF-16. % So we do not convert. \txiescapepdf\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % by default, use black for everything. \def\urlcolor{\rgbBlack} \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % \def\dopdfoutline#1#2#3#4{% \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A << /S /GoTo /D (\pdfdestname) >> >> }% } % \def\pdfmakeoutlines{% \begingroup % % For XeTeX, counts of subentries are not necessary. % Therefore, we read toc only once. % % We use node names as destinations. % % Currently we prefix the section name with the section number % for chapter and appendix headings only in order to avoid too much % horizontal space being required in the PDF viewer. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \dopdfoutline{##2 ##1}{1}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{2}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{3}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% \dopdfoutline{##1}{4}{##3}{##4}}% % \let\appentry\numchapentry% \let\appsecentry\numsecentry% \let\appsubsecentry\numsubsecentry% \let\appsubsubsecentry\numsubsubsecentry% \def\unnchapentry##1##2##3##4{% \dopdfoutline{##1}{1}{##3}{##4}}% \let\unnsecentry\numsecentry% \let\unnsubsecentry\numsubsecentry% \let\unnsubsubsecentry\numsubsubsecentry% % % For XeTeX, xdvipdfmx converts strings to UTF-16. % Therefore, the encoding and the language may not be considered. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] \special{pdf:docview << /PageMode /UseOutlines >> } % ``\special{pdf:tounicode ...}'' is not necessary % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it. % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315, % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings. % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \special{pdf:bann << /Border [0 0 0] /Subtype /Link /A << /S /URI /URI (#1) >> >>}% \endgroup} \def\endlink{\setcolor{\maincolor}\special{pdf:eann}} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{\pdflinkpage{#1}{#1}}% \def\pdflinkpage#1#2{% \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}% \setcolor{\linkcolor}#2\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} % % % @image support % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\doxeteximage#1#2#3{% \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % XeTeX (and the PDF format) supports .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\xeteximgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errmessage{Could not find image file #1 for XeTeX}% \else \gdef\xeteximgext{JPG}% \fi \else \gdef\xeteximgext{jpeg}% \fi \else \gdef\xeteximgext{jpg}% \fi \else \gdef\xeteximgext{png}% \fi \else \gdef\xeteximgext{PDF}% \fi \else \gdef\xeteximgext{pdf}% \fi \closein 1 \endgroup % % Putting an \hbox around the image can prevent an over-long line % after the image. \hbox\bgroup \def\xetexpdfext{pdf}% \ifx\xeteximgext\xetexpdfext \XeTeXpdffile "#1".\xeteximgext "" \else \def\xetexpdfext{PDF}% \ifx\xeteximgext\xetexpdfext \XeTeXpdffile "#1".\xeteximgext "" \else \XeTeXpicfile "#1".\xeteximgext "" \fi \fi \ifdim \wd0 >0pt width \xeteximagewidth \fi \ifdim \wd2 >0pt height \xeteximageheight \fi \relax \egroup } \fi % \message{fonts,} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% \ifx#2\ttshape\hyphenchar#1=-1 \fi \ifx#2\ttbshape\hyphenchar#1=-1 \fi \ifx#2\ttslshape\hyphenchar#1=-1 \fi } % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defsl\slshape{10}{\magstep1}{OT1} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\ttslfont=\defttsl \let\slfont=\defsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for math mode superscripts (7pt). \def\sevennominalsize{7pt} \setfont\sevenrm\rmshape{7}{1000}{OT1} \setfont\seventt\ttshape{10}{700}{OT1TT} \setfont\sevenbf\bfshape{10}{700}{OT1} \setfont\sevenit\itshape{7}{1000}{OT1IT} \setfont\sevensl\slshape{10}{700}{OT1} \setfont\sevensf\sfshape{10}{700}{OT1} \setfont\sevensc\scshape{10}{700}{OT1} \setfont\seventtsl\ttslshape{10}{700}{OT1TT} \font\seveni=cmmi7 \font\sevensy=cmsy7 \def\sevenecsize{0700} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acronym in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defsl\slshape{10}{\magstephalf}{OT1} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\slfont=\defsl \let\ttslfont=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for math mode superscripts (7pt). \def\sevennominalsize{7pt} \setfont\sevenrm\rmshape{7}{1000}{OT1} \setfont\seventt\ttshape{10}{700}{OT1TT} \setfont\sevenbf\bfshape{10}{700}{OT1} \setfont\sevenit\itshape{7}{1000}{OT1IT} \setfont\sevensl\slshape{10}{700}{OT1} \setfont\sevensf\sfshape{10}{700}{OT1} \setfont\sevensc\scshape{10}{700}{OT1} \setfont\seventtsl\ttslshape{10}{700}{OT1TT} \font\seveni=cmmi7 \font\sevensy=cmsy7 \def\sevenecsize{0700} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acronym in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname #1font\endcsname % change the current font } \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. % We don't bother to reset \scriptscriptfont; awaiting user need. % \def\resetmathfonts{% \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont \textfont\ttfam=\ttfont \textfont\sffam=\sffont % % Fonts for superscript. Note that the 7pt fonts are used regardless % of the current font size. \scriptfont0=\sevenrm \scriptfont1=\seveni \scriptfont2=\sevensy \scriptfont\itfam=\sevenit \scriptfont\slfam=\sevensl \scriptfont\bffam=\sevenbf \scriptfont\ttfam=\seventt \scriptfont\sffam=\sevensf } % \defineassignfonts{SIZE} - % Define sequence \assignfontsSIZE, which switches between font sizes % by redefining the meanings of \STYLEfont. (Just \STYLE additionally sets % the current \fam for math mode.) % \def\defineassignfonts#1{% \expandafter\edef\csname assignfonts#1\endcsname{% \let\noexpand\rmfont\csname #1rm\endcsname \let\noexpand\itfont\csname #1it\endcsname \let\noexpand\slfont\csname #1sl\endcsname \let\noexpand\bffont\csname #1bf\endcsname \let\noexpand\ttfont\csname #1tt\endcsname \let\noexpand\smallcaps\csname #1sc\endcsname \let\noexpand\sffont \csname #1sf\endcsname \let\noexpand\ifont \csname #1i\endcsname \let\noexpand\syfont \csname #1sy\endcsname \let\noexpand\ttslfont\csname #1ttsl\endcsname } } \def\assignfonts#1{% \csname assignfonts#1\endcsname } \newif\ifrmisbold % Select smaller font size with the current style. Used to change font size % in, e.g., the LaTeX logo and acronyms. If we are using bold fonts for % normal roman text, also use bold fonts for roman text in the smaller size. \def\switchtolllsize{% \expandafter\assignfonts\expandafter{\lllsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% \def\switchtolsize{% \expandafter\assignfonts\expandafter{\lsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% % Define the font-changing commands (all called \...fonts). % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used % in, e.g., the LaTeX logo and acronyms. % % Note: The fonts used for \ifont are for "math italics" (\itfont is for % italics in regular text). \syfont is also used in math mode only. % \def\definefontsetatsize#1#2#3#4#5{% \defineassignfonts{#1}% \expandafter\def\csname #1fonts\endcsname{% \def\curfontsize{#1}% \def\lsize{#2}\def\lllsize{#3}% \csname rmisbold#5\endcsname \csname assignfonts#1\endcsname \resetmathfonts \setleading{#4}% }} \definefontsetatsize{text} {reduced}{smaller}{\textleading}{false} \definefontsetatsize{title} {chap} {subsec} {27pt} {true} \definefontsetatsize{chap} {sec} {text} {19pt} {true} \definefontsetatsize{sec} {subsec} {reduced}{17pt} {true} \definefontsetatsize{ssec} {text} {small} {15pt} {true} \definefontsetatsize{reduced}{small} {smaller}{10.5pt}{false} \definefontsetatsize{small} {smaller}{smaller}{10.5pt}{false} \definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false} \def\titlefont#1{{\titlefonts\rm #1}} \let\subsecfonts = \ssecfonts \let\subsubsecfonts = \ssecfonts % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. #1 is what to % print if we are indeed using \tt; #2 is what to print otherwise. \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Check if internal flag is clear, i.e. has not been @set. \def\ifflagclear#1#2#3{% \expandafter\ifx\csname SET#1\endcsname\relax #2\else#3\fi } { \catcode`\'=\active \catcode`\`=\active \gdef\setcodequotes{\let`\codequoteleft \let'\codequoteright} \gdef\setregularquotes{\let`\lq \let'\rq} } \setregularquotes % output for ' in @code % in tt font hex 0D (undirected) or 27 (curly right quote) % \def\codequoteright{% \ifusingtt {\ifflagclear{txicodequoteundirected}% {\ifflagclear{codequoteundirected}% {'}% {\char"0D }}% {\char"0D }}% {'}% } % output for ` in @code % in tt font hex 12 (grave accent) or 60 (curly left quote) % \relax disables Spanish ligatures ?` and !` of \tt font. % \def\codequoteleft{% \ifusingtt {\ifflagclear{txicodequotebacktick}% {\ifflagclear{codequotebacktick}% {\relax`}% {\char"12 }}% {\char"12 }}% {\relax`}% } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % Turn them on by default \let\SETtxicodequoteundirected = t \let\SETtxicodequotebacktick = t % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless the following character is such as % not to need one. \def\smartitaliccorrection{\futurelet\next\smartitaliccorrectionx} \def\smartitaliccorrectionx{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ifx\next\.% \else\ifx\next\comma% \else\ptexslash \fi\fi\fi\fi\fi \aftersmartic } % @cite unconditionally uses \sl with \smartitaliccorrection. \def\cite#1{{\sl #1}\smartitaliccorrection} % @var unconditionally uses \sl. This gives consistency for % parameter names whether they are in @def, @table @code or a % regular paragraph. % To get ttsl font for @var when used in code context, @set txicodevaristt. % The \null is to reset \spacefactor. \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% % \ifflagclear{txicodevaristt}% {\def\varnext{{{\sl #1}}\smartitaliccorrection}}% {\def\varnext{\smartslanted{#1}}}% \varnext } % To be removed after next release \def\SETtxicodevaristt{}% @set txicodevaristt \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % @r for roman font, used for code comment \def\r#1{{% \usenormaldash % get --, --- ligatures even if in @code \defcharsdefault % in case on def line \rm #1}} {\catcode`-=\active \gdef\usenormaldash{\let-\normaldash}} % @sc, undocumented @ii. \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} \newif\iffrenchspacing \frenchspacingfalse % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \iffrenchspacing\else \frenchspacingtrue \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m \def\endofsentencespacefactor{1000}% for @. and friends \fi } \def\plainnonfrenchspacing{% \iffrenchspacing \frenchspacingfalse \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends \fi } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \let\frenchspacingsetting\plainnonfrenchspacing % used in output routine \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \let\frenchspacingsetting\plainfrenchspacing \else\ifx\temp\offword \let\frenchspacingsetting\plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi \frenchspacingsetting } % @t, explicit typewriter. \def\t#1{% {\tt \defcharsdefault \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setcodequotes\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % This is for LuaTeX: It is not sufficient to disable hyphenation at % explicit dashes by setting `\hyphenchar` to -1. \def\dashnobreak{% \normaldash \penalty 10000 } % We must turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % We explicitly allow hyphenation at these characters % using \discretionary. % % Hyphenation at - and hyphenation within words was turned off % by default for the tt fonts using the \hyphenchar parameter of TeX. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setcodequotes \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\dashnobreak \let_\realunder \fi \codex } % \gdef\codedash{\futurelet\next\codedashfinish} \gdef\codedashfinish{% \normaldash % always output the dash character itself. % % Now, output a discretionary to allow a line break, unless % (a) the next character is a -, or % (b) the preceding character is a -, or % (c) we are at the start of the string. % In both cases (b) and (c), \codedashnobreak should be set to \codedash. % % E.g., given --posix, we do not want to allow a break after either -. % Given --foo-bar, we do want to allow a break between the - and the b. \ifx\next\codedash \else \ifx\codedashnobreak\codedash \else \discretionary{}{}{}\fi \fi % we need the space after the = for the case when \next itself is a % space token; it would get swallowed otherwise. As in @code{- a}. \global\let\codedashnobreak= \next } } \def\normaldash{-} % \def\codex #1{\tclose{% % Given -foo (with a single dash), we do not want to allow a break % after the -. \codedashnobreak is set to the first character in % @code. \futurelet\codedashnobreak\relax #1% }\endgroup} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') aka @url takes an optional % (comma-separated) second argument specifying the text to display and % an optional third arg as text to display instead of (rather than in % addition to) the url itself. First (mandatory) arg is the url. % TeX-only option to allow changing PDF output to show only the second % arg (if given), and not the url (which is then just the link target). \newif\ifurefurlonlylink % The default \pretolerance setting stops the penalty inserted in % \urefallowbreak being a discouragement to line breaking. Set it to % a negative value for this paragraph only. Hopefully this does not % conflict with redefinitions of \par done elsewhere. \def\nopretolerance{% \pretolerance=-1 \def\par{\endgraf\pretolerance=100 \let\par\endgraf}% } % The main macro is \urefbreak, which allows breaking at expected % places within the url. \def\urefbreak{\nopretolerance \begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak % \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% look for second arg \ifdim\wd0 > 0pt \ifpdf % For pdfTeX and LuaTeX \ifurefurlonlylink % PDF plus option to not display url, show just arg \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \else \ifx\XeTeXrevision\thisisundefined \unhbox0\ (\urefcode{#1})% DVI, always show arg and url \else % For XeTeX \ifurefurlonlylink % PDF plus option to not display url, show just arg \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \fi \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode`\&=\active \catcode`\.=\active \catcode`\#=\active \catcode`\?=\active \catcode`\/=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setcodequotes \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } \def\urefcodeamp{\urefprebreak \&\urefpostbreak} \def\urefcodedot{\urefprebreak .\urefpostbreak} \def\urefcodehash{\urefprebreak \#\urefpostbreak} \def\urefcodequest{\urefprebreak ?\urefpostbreak} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprebreak \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpostbreak \fi } } % By default we'll break after the special characters, but some people like to % break before the special chars, so allow that. Also allow no breaking at % all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\urefallowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\urefallowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} % Allow a ragged right output to aid breaking long URL's. There can % be a break at the \allowbreak with no extra glue (if the existing stretch in % the line is sufficient), a break at the \penalty with extra glue added % at the end of the line, or no break at all here. % Changing the value of the penalty and/or the amount of stretch affects how % preferable one choice is over the other. \def\urefallowbreak{% \penalty0\relax \hskip 0pt plus 2 em\relax \penalty1000\relax \hskip 0pt plus -2 em\relax } \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdforxetex \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct \def\kbd#1{% \tclose{\kbdfont\setcodequotes#1}% } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. % \def\key#1{{\setregularquotes \tt #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\switchtolsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \ifmmode\else % only go into math if not in math mode already \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot % have to provide another name for sup operator \let\mathopsup=\sup $\expandafter\finishmath\fi } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % for @sub and @sup, if in math mode, just do a normal sub/superscript. % If in text, use math to place as sub/superscript, but switch % into text mode, with smaller fonts. This is a different font than the % one used for real math sub/superscripts (8pt vs. 7pt), but let's not % fix it (significant additions to font machinery) until someone notices. % \def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi} \def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}% % \def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi} \def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}% % provide this command from LaTeX as it is very common \def\frac#1#2{{{#1}\over{#2}}} % @displaymath. % \globaldefs is needed to recognize the end lines in \tex and % \end tex. Set \thisenv as @end displaymath is seen before @end tex. {\obeylines \globaldefs=1 \envdef\displaymath{% \tex% \def\thisenv{\displaymath}% \begingroup\let\end\displaymathend% $$% } \def\displaymathend{$$\endgroup\end}% \def\Edisplaymath{% \def\thisenv{\tex}% \end tex }} % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % % @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if % FMTNAME is tex, else ELSE-TEXT. \long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} \long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi } % % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } % @inlineifset{VAR, TEXT} expands TEXT if VAR is @set. % \long\def\inlineifset#1{\doinlineifset #1,\finish} \long\def\doinlineifset#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \else\ignorespaces#2\fi } % @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set. % \long\def\inlineifclear#1{\doinlineifclear #1,\finish} \long\def\doinlineifclear#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. \def\lbracechar{{\ifusingtt{\char123}{\ensuremath\lbrace}}} \def\rbracechar{{\ifusingtt{\char125}{\ensuremath\rbrace}}} \let\{=\lbracechar \let\}=\rbracechar % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else \ifx\curfontsize\smallword % For footnotes and indices \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \switchtolllsize A% \fi \fi }% \vss }}% \kern-.15em \TeX } \def\smallword{small} % Some math mode symbols. Define \ensuremath to switch into math mode % unless we are already there. Expansion tricks may not be needed here, % but safer, and can't hurt. \def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi} \def\ensuredmath#1{$\relax#1$} % \def\bullet{\ensuremath\ptexbullet} \def\geq{\ensuremath\ge} \def\leq{\ensuremath\le} \def\minus{\ensuremath-} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\ttfont \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\ifusingtt{\ecfont\char"BF}{\it\$}}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % \def\L{{\ecfont \char"8A}} % L with stroke \def\l{{\ecfont \char"AA}} % l with stroke % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the European Computer Modern fonts (cm-super in outline format) % for non-CM glyphs. That is ec* for regular text and tc* for the text % companion symbols (LaTeX TS1 encoding). Both are part of the ec % package and follow the same conventions. % \def\ecfont{\etcfont{e}} \def\tcfont{\etcfont{t}} % \def\etcfont#1{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifusingtt % typewriter: {\font\thisecfont = #1ctt\ecsize \space at \nominalsize}% % else {\ifx\curfontstyle\bfstylename % bold: \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi}% \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\switchtolllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{% \ifmmode ^\circ \else {\tcfont \char 176}% \fi} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quoteleft=`\` \chardef\quoteright=`\' % only change font for tt for correct kerning and to avoid using % \ecfont unless necessary. \def\quotedblleft{% \ifusingtt{{\ecfont\char"10}}{{\char"5C}}% } \def\quotedblright{% \ifusingtt{{\ecfont\char"11}}{{\char`\"}}% } \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % @setcontentsaftertitlepage used to do an implicit @contents or % @shortcontents after @end titlepage, but it is now obsolete. \def\setcontentsaftertitlepage{% \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo command; move your @contents command if you want the contents after the title page.}}% \def\setshortcontentsaftertitlepage{% \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo command; move your @shortcontents and @contents commands if you want the contents after the title page.}}% \parseargdef\shorttitlepage{% {\headingsoff \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page}\pageone} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts \headingsoff % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \pageone \endgroup % } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. \par should % be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rm \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\rmfont \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rm \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenchapheadline% headline on even pages with a new chapter \newtoks\oddchapheadline % headline on odd pages with a new chapter \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make \makeheadline and \makefootline in Plain TeX use those variables \headline={{\textfonts\rm\frenchspacingsetting \ifchapterpage \ifodd\pageno\the\oddchapheadline\else\the\evenchapheadline\fi \else \ifodd\pageno\the\oddheadline\else\the\evenheadline\fi \fi}} \footline={{\textfonts\rm\frenchspacingsetting \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}% \HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}} \global\evenchapheadline=\evenheadline} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}% \global\oddchapheadline=\oddheadline} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\txipageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks % These define \getoddheadingmarks, \getevenheadingmarks, % \getoddfootingmarks, and \getevenfootingmarks, each to one of % \gettopheadingmarks, \getbottomheadingmarks. % \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \parseargdef\everyfootingmarks{\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \parseargdef\headings{\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}\evenchapheadline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}\oddchapheadline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting % Set the page number to 1. \def\pageone{ \global\pageno=1 \global\arabiccount = \pagecount } \let\contentsalignmacro = \chappager % \def\HEADINGSon{\HEADINGSdouble} % defined by \CHAPPAGon % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdouble} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdouble{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\evenchapheadline={\line{\folio\hfil\thistitle}} \global\oddchapheadline={\line{\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsingle} \def\HEADINGSsingle{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\evenchapheadline={\line{\hfil\folio}} \global\oddchapheadline={\line{\hfil\folio}} \global\let\contentsalignmacro = \chappager } % for @setchapternewpage off \def\HEADINGSsinglechapoff{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\evenchapheadline=\evenheadline \global\oddchapheadline=\oddheadline \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark so that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \ifinner\else \vadjust{\penalty 1200}% not good to break after first line of item. \fi % We can be in inner vertical mode in a footnote, although an % @itemize looks awful there. }% \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @multitable macros % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % @headitem starts a heading row, which we typeset in bold. Assignments % have to be global since we are inside the implicit group of an % alignment entry. \everycr below resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \crcr % must appear first \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % default for tables with no headings. \let\headitemcrhook=\relax % \def\tab{\checkenv\multitable &\the\everytab}% \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \parskip=0pt \parindent=6pt \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% Reset from possible headitem. \global\colcount=0 % Reset the column counter. % % Check for saved footnotes, etc.: \checkinserts % % Perhaps a \nobreak, then reset: \headitemcrhook \global\let\headitemcrhook=\relax }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \strut \vtop{% \advance\hsize by -1\leftskip % Find the correct column width \hsize=\expandafter\csname col\the\colcount\endcsname % \advance\rightskip by -1\rightskip % Zero leaving only any stretch \ifnum\colcount=1 \advance\hsize by\leftskip % Add indent of surrounding text \else % In order to keep entries from bumping into each other. \leftskip=12pt \ifsetpercent \else % If a template has been used \advance\hsize by \leftskip \fi \fi \noindent\ignorespaces##\unskip\strut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotlatex, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotlatex} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\iflatex{\doignore{iflatex}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\latex{\doignore{latex}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\-=\active \catcode`\_=\active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % Like \expandablevalue, but completely expandable (the \message in the % definition above operates at the execution level of TeX). Used when % writing to auxiliary files, due to the expansion that \write does. % If flag is undefined, pass through an unexpanded @value command: maybe it % will be set by the time it is read back in. % % NB flag names containing - or _ may not work here. \def\dummyvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax \string\value{#1}% \else \csname SET#1\endcsname \fi } % Used for @value's in index entries to form the sort key: expand the @value % if possible, otherwise sort late. \def\indexnofontsvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax ZZZZZZZ% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get the special treatment we need for `@end ifset,' we call % \makecond and then redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {IX} defines an index named IX. % It automatically defines \IXindex such that % \IXindex ...rest of line... puts an entry in the index IX. % It also defines \IXindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is IX. % \def\newindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % The default indices: \newindex{cp}% concepts, \newcodeindex{fn}% functions, \newcodeindex{vr}% variables, \newcodeindex{tp}% types, \newcodeindex{ky}% keys \newcodeindex{pg}% and programs. % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% \requireopenindexfile{#3}% % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all index macros. % Argument #1 is generated by the calling \fooindex macro, % and it is the two-letter name of the index. \def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx} \def\doindexxxx #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx} \def\docodeindexxxx #1{\docind{\indexname}{#1}} % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % % For control letters, we have \definedummyletter, which omits the % space. % \def\definedummyword #1{\def#1{\string#1\space}}% \def\definedummyletter#1{\def#1{\string#1}}% % Used for the aux, toc and index files to prevent expansion of Texinfo % commands. Most of the commands are controlled through the % \ifdummies conditional. % \def\atdummies{% \dummiestrue % \definedummyletter\@% \definedummyletter\ % \definedummyletter\{% \definedummyletter\}% \definedummyletter\&% % \definedummyletter\_% \definedummyletter\-% % \definedummyword\subentry % % We want to disable all macros so that they are not expanded by \write. \let\commondummyword\definedummyword \macrolist \let\value\dummyvalue % \turnoffactive } \newif\ifdummies \newif\ifindexnofonts \def\commondummyletter#1{% \expandafter\let\csname\string#1:impl\endcsname#1% \edef#1{% \noexpand\ifindexnofonts % empty expansion \noexpand\else \noexpand\ifdummies\string#1% \noexpand\else \noexpand\jumptwofi % dispose of the \fi \expandafter\noexpand\csname\string#1:impl\endcsname \noexpand\fi \noexpand\fi}% } \def\commondummyaccent#1{% \expandafter\let\csname\string#1:impl\endcsname#1% \edef#1{% \noexpand\ifindexnofonts \noexpand\expandafter % dispose of \else ... \fi \noexpand\asis \noexpand\else \noexpand\ifdummies\string#1% \noexpand\else \noexpand\jumptwofi % dispose of the \fi \expandafter\noexpand\csname\string#1:impl\endcsname \noexpand\fi \noexpand\fi}% } % Like \commondummyaccent but add a \space at the end of the dummy expansion % #2 is the expansion used for \indexnofonts. #2 is always followed by % \asis to remove a pair of following braces. \def\commondummyword#1#2{% \expandafter\let\csname\string#1:impl\endcsname#1% \expandafter\def\csname\string#1:ixnf\endcsname{#2\asis}% \edef#1{% \noexpand\ifindexnofonts \noexpand\expandafter % dispose of \else ... \fi \expandafter\noexpand\csname\string#1:ixnf\endcsname \noexpand\else \noexpand\ifdummies\string#1\space \noexpand\else \noexpand\jumptwofi % dispose of the \fi \fi \expandafter\noexpand\csname\string#1:impl\endcsname \noexpand\fi \noexpand\fi}% } \def\jumptwofi#1\fi\fi{\fi\fi#1} % For \atdummies and \indexnofonts. \atdummies sets % \dummiestrue and \indexnofonts sets \indexnofontstrue. \def\definedummies{ % @-sign is always an escape character when reading auxiliary files \escapechar = `\@ % \commondummyletter\!% \commondummyaccent\"% \commondummyaccent\'% \commondummyletter\*% \commondummyaccent\,% \commondummyletter\.% \commondummyletter\/% \commondummyletter\:% \commondummyaccent\=% \commondummyletter\?% \commondummyaccent\^% \commondummyaccent\`% \commondummyaccent\~% % % Control letters and accents. \commondummyword\u {}% \commondummyword\v {}% \commondummyword\H {}% \commondummyword\dotaccent {}% \commondummyword\ogonek {}% \commondummyword\ringaccent {}% \commondummyword\tieaccent {}% \commondummyword\ubaraccent {}% \commondummyword\udotaccent {}% \commondummyword\dotless {}% % % Texinfo font commands. \commondummyword\b {}% \commondummyword\i {}% \commondummyword\r {}% \commondummyword\sansserif {}% \commondummyword\sc {}% \commondummyword\slanted {}% \commondummyword\t {}% % % Commands that take arguments. \commondummyword\abbr {}% \commondummyword\acronym {}% \commondummyword\anchor {}% \commondummyword\cite {}% \commondummyword\code {}% \commondummyword\command {}% \commondummyword\dfn {}% \commondummyword\dmn {}% \commondummyword\email {}% \commondummyword\emph {}% \commondummyword\env {}% \commondummyword\file {}% \commondummyword\image {}% \commondummyword\indicateurl{}% \commondummyword\inforef {}% \commondummyword\kbd {}% \commondummyword\key {}% \commondummyword\link {}% \commondummyword\math {}% \commondummyword\option {}% \commondummyword\pxref {}% \commondummyword\ref {}% \commondummyword\samp {}% \commondummyword\strong {}% \commondummyword\tie {}% \commondummyword\U {}% \commondummyword\uref {}% \commondummyword\url {}% \commondummyword\var {}% \commondummyword\verb {}% \commondummyword\w {}% \commondummyword\xref {}% % \commondummyword\AA {AA}% \commondummyword\AE {AE}% \commondummyword\DH {DZZ}% \commondummyword\L {L}% \commondummyword\O {O}% \commondummyword\OE {OE}% \commondummyword\TH {TH}% \commondummyword\aa {aa}% \commondummyword\ae {ae}% \commondummyword\dh {dzz}% \commondummyword\exclamdown {!}% \commondummyword\l {l}% \commondummyword\o {o}% \commondummyword\oe {oe}% \commondummyword\ordf {a}% \commondummyword\ordm {o}% \commondummyword\questiondown {?}% \commondummyword\ss {ss}% \commondummyword\th {th}% % \commondummyword\LaTeX {LaTeX}% \commondummyword\TeX {TeX}% % % Assorted special characters. \commondummyword\ampchar {\normalamp}% \commondummyword\atchar {\@}% \commondummyword\arrow {->}% \commondummyword\backslashchar {\realbackslash}% \commondummyword\bullet {bullet}% \commondummyword\comma {,}% \commondummyword\copyright {copyright}% \commondummyword\dots {...}% \commondummyword\enddots {...}% \commondummyword\entrybreak {}% \commondummyword\equiv {===}% \commondummyword\error {error}% \commondummyword\euro {euro}% \commondummyword\expansion {==>}% \commondummyword\geq {>=}% \commondummyword\guillemetleft {<<}% \commondummyword\guillemetright {>>}% \commondummyword\guilsinglleft {<}% \commondummyword\guilsinglright {>}% \commondummyword\lbracechar {\{}% \commondummyword\leq {<=}% \commondummyword\mathopsup {sup}% \commondummyword\minus {-}% \commondummyword\pounds {pounds}% \commondummyword\point {.}% \commondummyword\print {-|}% \commondummyword\quotedblbase {"}% \commondummyword\quotedblleft {"}% \commondummyword\quotedblright {"}% \commondummyword\quoteleft {`}% \commondummyword\quoteright {'}% \commondummyword\quotesinglbase {,}% \commondummyword\rbracechar {\}}% \commondummyword\registeredsymbol {R}% \commondummyword\result {=>}% \commondummyword\sub {}% \commondummyword\sup {}% \commondummyword\textdegree {o}% } \let\indexlbrace\relax \let\indexrbrace\relax \let\indexatchar\relax \let\indexbackslash\relax {\catcode`\@=0 \catcode`\\=13 @gdef@backslashdisappear{@def\{}} } { \catcode`\<=13 \catcode`\-=13 \catcode`\`=13 \gdef\indexnonalnumdisappear{% \ifflagclear{txiindexlquoteignore}{}{% % @set txiindexlquoteignore makes us ignore left quotes in the sort term. % (Introduced for FSFS 2nd ed.) \let`=\empty }% % \ifflagclear{txiindexbackslashignore}{}{% \backslashdisappear }% \ifflagclear{txiindexhyphenignore}{}{% \def-{}% }% \ifflagclear{txiindexlessthanignore}{}{% \def<{}% }% \ifflagclear{txiindexatsignignore}{}{% \def\@{}% }% } \gdef\indexnonalnumreappear{% \let-\normaldash \let<\normalless } } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% \indexnofontstrue % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % \uccode`\1=`\{ \uppercase{\def\{{1}}% \uccode`\1=`\} \uppercase{\def\}{1}}% \let\lbracechar\{% \let\rbracechar\}% % % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \def\commondummyword##1{\let##1\asis}% \macrolist \let\value\indexnofontsvalue } % #1 is the index name, #2 is the entry text. \def\doind#1#2{% \iflinks {% % \requireopenindexfile{#1}% \edef\writeto{\csname#1indfile\endcsname}% % \def\indextext{#2}% \safewhatsit\doindwrite }% \fi } % Same as \doind, but for code indices \def\docind#1#2{% \iflinks {% % \requireopenindexfile{#1}% \edef\writeto{\csname#1indfile\endcsname}% % \def\indextext{#2}% \safewhatsit\docindwrite }% \fi } % Check if an index file has been opened, and if not, open it. \def\requireopenindexfile#1{% \ifnum\csname #1indfile\endcsname=0 \expandafter\newwrite \csname#1indfile\endcsname \edef\suffix{#1}% % A .fls suffix would conflict with the file extension for the output % of -recorder, so use .f1s instead. \ifx\suffix\indexisfl\def\suffix{f1}\fi % Open the file \immediate\openout\csname#1indfile\endcsname \jobname.\suffix % Using \immediate above here prevents an object entering into the current % box, which could confound checks such as those in \safewhatsit for % preceding skips. \typeout{Writing index file \jobname.\suffix}% \fi} \def\indexisfl{fl} % Definition for writing index entry sort key. { \catcode`\-=13 \gdef\indexwritesortas{% \begingroup \indexnonalnumreappear \indexwritesortasxxx} \gdef\indexwritesortasxxx#1{% \xdef\indexsortkey{#1}\endgroup} } \def\indexwriteseealso#1{ \gdef\pagenumbertext{\string\seealso{#1}}% } \def\indexwriteseeentry#1{ \gdef\pagenumbertext{\string\seeentry{#1}}% } % The default definitions \def\sortas#1{}% \def\seealso#1{\i{\putwordSeeAlso}\ #1}% for sorted index file only \def\putwordSeeAlso{See also} \def\seeentry#1{\i{\putwordSee}\ #1}% for sorted index file only % Given index entry text like "aaa @subentry bbb @sortas{ZZZ}": % * Set \bracedtext to "{aaa}{bbb}" % * Set \fullindexsortkey to "aaa @subentry ZZZ" % * If @seealso occurs, set \pagenumbertext % \def\splitindexentry#1{% \gdef\fullindexsortkey{}% \xdef\bracedtext{}% \def\sep{}% \def\seealso##1{}% \def\seeentry##1{}% \expandafter\doindexsegment#1\subentry\finish\subentry } % append the results from the next segment \def\doindexsegment#1\subentry{% \def\segment{#1}% \ifx\segment\isfinish \else % % Fully expand the segment, throwing away any @sortas directives, and % trim spaces. \edef\trimmed{\segment}% \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% \ifincodeindex \edef\trimmed{\noexpand\code{\trimmed}}% \fi % \xdef\bracedtext{\bracedtext{\trimmed}}% % % Get the string to sort by. Process the segment with all % font commands turned off. \bgroup \let\sortas\indexwritesortas \let\seealso\indexwriteseealso \let\seeentry\indexwriteseeentry \indexnofonts % The braces around the commands are recognized by texindex. \def\lbracechar{{\string\indexlbrace}}% \def\rbracechar{{\string\indexrbrace}}% \let\{=\lbracechar \let\}=\rbracechar \def\@{{\string\indexatchar}}% \def\atchar##1{\@}% \def\backslashchar{{\string\indexbackslash}}% \uccode`\~=`\\ \uppercase{\let~\backslashchar}% % \let\indexsortkey\empty \global\let\pagenumbertext\empty % Execute the segment and throw away the typeset output. This executes % any @sortas or @seealso commands in this segment. \setbox\dummybox = \hbox{\segment}% \ifx\indexsortkey\empty{% \indexnonalnumdisappear \xdef\trimmed{\segment}% \xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% \xdef\indexsortkey{\trimmed}% \ifx\indexsortkey\empty \message{Empty index sort key near line \the\inputlineno}% \xdef\indexsortkey{ }% \fi }\fi % % Append to \fullindexsortkey. \edef\tmp{\gdef\noexpand\fullindexsortkey{% \fullindexsortkey\sep\indexsortkey}}% \tmp \egroup \def\sep{\subentry}% % \expandafter\doindexsegment \fi } \def\isfinish{\finish}% \newbox\dummybox % used above \let\subentry\relax % Use \ instead of @ in index files. To support old texi2dvi and texindex. % This works without changing the escape character used in the toc or aux % files because the index entries are fully expanded here, and \string uses % the current value of \escapechar. \def\escapeisbackslash{\escapechar=`\\} % Use \ in index files by default. texi2dvi didn't support @ as the escape % character (as it checked for "\entry" in the files, and not "@entry"). When % the new version of texi2dvi has had a chance to become more prevalent, then % the escape character can change back to @ again. This should be an easy % change to make now because both @ and \ are only used as escape characters in % index files, never standing for themselves. % \set txiindexescapeisbackslash % Write the entry in \indextext to the index file. % \newif\ifincodeindex \def\doindwrite{\incodeindexfalse\doindwritex} \def\docindwrite{\incodeindextrue\doindwritex} \def\doindwritex{% \maybemarginindex % \atdummies % \ifflagclear{txiindexescapeisbackslash}{}{\escapeisbackslash}% % % For texindex which always views { and } as separators. \def\{{\lbracechar{}}% \def\}{\rbracechar{}}% \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}% % % Split the entry into primary entry and any subentries, and get the index % sort key. \splitindexentry\indextext % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. % \edef\temp{% \write\writeto{% \string\entry{\fullindexsortkey}% {\ifx\pagenumbertext\empty\noexpand\folio\else\pagenumbertext\fi}% \bracedtext}% }% \temp } % Put the index entry in the margin if desired (undocumented). \def\maybemarginindex{% \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \relax\indextext}}% \fi } \let\SETmarginindex=\relax % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % \entry {topic}{} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % \secondary {subtopic}{} % for a subtopic with sub-subtopics % \tertiary {subtopic}{subsubtopic}{pagelist} % for each sub-subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See comment in \requireopenindexfile. \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi % % See if the index file exists and is nonempty. \openin 1 \jobname.\indexname s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \typeout{No file \jobname.\indexname s.}% \else % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \thisline \ifeof 1 \putwordIndexIsEmpty \else \expandafter\printindexzz\thisline\relax\relax\finish% \fi \fi \closein 1 \endgroup} % If the index file starts with a backslash, forgo reading the index % file altogether. If somebody upgrades texinfo.tex they may still have % old index files using \ as the escape character. Reading this would % at best lead to typesetting garbage, at worst a TeX syntax error. \def\printindexzz#1#2\finish{% \ifflagclear{txiindexescapeisbackslash}{% \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1 \ifflagclear{txiskipindexfileswithbackslash}{% \errmessage{% ERROR: A sorted index file in an obsolete format was skipped. To fix this problem, please upgrade your version of 'texi2dvi' or 'texi2pdf' to that at . If you are using an old version of 'texindex' (part of the Texinfo distribution), you may also need to upgrade to a newer version (at least 6.0). You may be able to typeset the index if you run 'texindex \jobname.\indexname' yourself. You could also try setting the 'txiindexescapeisbackslash' flag by running a command like 'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'. If you do this, Texinfo will try to use index files in the old format. If you continue to have problems, deleting the index files and starting again might help (with 'rm \jobname.?? \jobname.??s')% }% }{% (Skipped sorted index file in obsolete format) }% \else \begindoublecolumns \input \jobname.\indexname s \enddoublecolumns \fi }{% \begindoublecolumns \catcode`\\=0\relax % % Make @ an escape character to give macros a chance to work. This % should work because we (hopefully) don't otherwise use @ in index files. %\catcode`\@=12\relax \catcode`\@=0\relax \input \jobname.\indexname s \enddoublecolumns }% } % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. {\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13 \catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13 \catcode`\$=3 \gdef\initialglyphs{% % special control sequences used in the index sort key \let\indexlbrace\{% \let\indexrbrace\}% \let\indexatchar\@% \def\indexbackslash{\math{\backslash}}% % % Some changes for non-alphabetic characters. Using the glyphs from the % math fonts looks more consistent than the typewriter font used elsewhere % for these characters. \uccode`\~=`\\ \uppercase{\def~{\math{\backslash}}} % % In case @\ is used for backslash \uppercase{\let\\=~} % Can't get bold backslash so don't use bold forward slash \catcode`\/=13 \def/{{\secrmnotbold \normalslash}}% \def-{{\normaldash\normaldash}}% en dash `--' \def^{{\chapbf \normalcaret}}% \def~{{\chapbf \normaltilde}}% \def\_{% \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }% \def|{$\vert$}% \def<{$\less$}% \def>{$\gtr$}% \def+{$\normalplus$}% }} \def\initial{% \bgroup \initialglyphs \initialx } \def\initialx#1{% % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. % The glue before the bonus allows a little bit of space at the % bottom of a column to reduce an increase in inter-line spacing. \nobreak \vskip 0pt plus 5\baselineskip \penalty -300 \vskip 0pt plus -5\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus 1\baselineskip \leftline{\secfonts \kern-0.05em \secbf #1}% % \secfonts is inside the argument of \leftline so that the change of % \baselineskip will not affect any glue inserted before the vbox that % \leftline creates. % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip \egroup % \initialglyphs } \newdimen\entryrightmargin \entryrightmargin=0pt % amount to indent subsequent lines in an entry when it spans more than % one line. \newdimen\entrycontskip \entrycontskip=1em % for PDF output, whether to make the text of the entry a link to the page % number. set for @contents and @shortcontents where there is only one % page number. \newif\iflinkentrytext % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % No extra space above this paragraph. \parskip = 0in % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% An undocumented command % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% % Save the text of the entry in \boxA \global\setbox\boxA=\hbox\bgroup \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. % Not absorbing as a macro argument reduces the chance of problems % with catcodes occurring. } {\catcode`\@=11 % #1 is the page number \gdef\finishentry#1{% \egroup % end \boxA \dimen@ = \wd\boxA % Length of text of entry % add any leaders and page number to \boxA. \global\setbox\boxA=\hbox\bgroup \ifpdforxetex \iflinkentrytext \pdflinkpage{#1}{\unhbox\boxA}% \else \unhbox\boxA \fi \else \unhbox\boxA \fi % % Get the width of the page numbers, and only use % leaders if they are present. \global\setbox\boxB = \hbox{#1}% \ifdim\wd\boxB = 0pt \null\nobreak\hfill\ % \else % \null\nobreak\indexdotfill % Have leaders before the page number. % \ifpdforxetex \pdfgettoks#1.% \hskip\skip\thinshrinkable\the\toksA \else \hskip\skip\thinshrinkable #1% \fi \fi \egroup % end \boxA % % now output \ifdim\wd\boxB = 0pt \noindent\unhbox\boxA\par \nobreak \else\bgroup % We want the text of the entries to be aligned to the left, and the % page numbers to be aligned to the right. % \parindent = 0pt \advance\leftskip by 0pt plus 1fil \advance\leftskip by 0pt plus -1fill \rightskip = 0pt plus -1fil \advance\rightskip by 0pt plus 1fill % Cause last line, which could consist of page numbers on their own % if the list of page numbers is long, to be aligned to the right. \parfillskip=0pt plus -1fill % \advance\rightskip by \entryrightmargin % \dimen@ii = \hsize \advance\dimen@ii by -1\leftskip \advance\dimen@ii by -1\entryrightmargin \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line \ifdim\dimen@ > 0.8\dimen@ii % due to long index text \advance\leftskip by 0pt plus 1fill % ragged right % % Indent all lines but the first one. \advance\leftskip by \entrycontskip \advance\parindent by -\entrycontskip \fi\fi \indent % start paragraph \unhbox\boxA % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % Word spacing - no stretch \spaceskip=\fontdimen2\font minus \fontdimen4\font % \linepenalty=1000 % Discourage line breaks. \hyphenpenalty=5000 % Discourage hyphenation. % \par % format the paragraph \egroup % The \vbox \fi \endgroup }} \newskip\thinshrinkable \skip\thinshrinkable=.15em minus .15em % Like plain.tex's \dotfill, except uses up at least 0.5 em. % The filll stretch here overpowers both the fil and fill stretch to push % the page number to the right. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 0.5em plus 1filll} \def\primary #1{\line{#1\hfil}} \def\secondary{\indententry{0.5cm}} \def\tertiary{\indententry{1cm}} \def\indententry#1#2#3{% \bgroup \leftskip=#1 \entry{#2}{#3}% \egroup } % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 % private names \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % If not much space left on page, start a new page. \ifdim\pagetotal>0.8\vsize\vfill\eject\fi % % Grab any single-column material above us. \output = {% \savetopmark % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumnhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \advance\vsize by -\ht\partialpage \vsize = 2\vsize % % For the benefit of balancing columns \advance\baselineskip by 0pt plus 0.5pt } % The double-column output routine for all double-column pages except % the last, which is done by \balancecolumns. % \def\doublecolumnout{% % \savetopmark \splittopskip=\topskip \splitmaxdepth=\maxdepth \dimen@ = \vsize \divide\dimen@ by 2 % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@ \global\advance\vsize by 2\ht\partialpage \onepageout\pagesofar % empty except for the first time we are called \unvbox\PAGE \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\txipagewidth{\box0\hfil\box2}% } % Finished with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \txipageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. \savetopmark \balancecolumns }% \eject % call the \output just set \ifdim\pagetotal=0pt % Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. \global\output=\expandafter{\the\defaultoutput} % \endgroup % started in \begindoublecolumns % Leave the double-column material on the current page, no automatic % page break. \box\balancedcolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize. \global\vsize = \txipageheight % \pagegoal = \txipageheight % \else % We had some left-over material. This might happen when \doublecolumnout % is called in \balancecolumns. Try again. \expandafter\enddoublecolumns \fi } \newbox\balancedcolumns \setbox\balancedcolumns=\vbox{shouldnt see this}% % % Only called for the last of the double column material. \doublecolumnout % does the others. \def\balancecolumns{% \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \ifdim\dimen@<7\baselineskip % Don't split a short final column in two. \setbox2=\vbox{}% \global\setbox\balancedcolumns=\vbox{\pagesofar}% \else % double the leading vertical space \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to \dimen@ii = \dimen@ \splittopskip = \topskip % Loop until left column is at least as high as the right column. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht1<\ht3 \global\advance\dimen@ by 1pt \repeat }% % Now the left column is in box 1, and the right column in box 3. % % Check whether the left column has come out higher than the page itself. % (Note that we have doubled \vsize for the double columns, so % the actual height of the page is 0.5\vsize). \ifdim2\ht1>\vsize % It appears that we have been called upon to balance too much material. % Output some of it with \doublecolumnout, leaving the rest on the page. \setbox\PAGE=\box0 \doublecolumnout \else % Compare the heights of the two columns. \ifdim4\ht1>5\ht3 % Column heights are too different, so don't make their bottoms % flush with each other. \setbox2=\vbox to \ht1 {\unvbox3\vfill}% \setbox0=\vbox to \ht1 {\unvbox1\vfill}% \else % Make column bottoms flush with each other. \setbox2=\vbox to\ht1{\unvbox3\unskip}% \setbox0=\vbox to\ht1{\unvbox1\unskip}% \fi \global\setbox\balancedcolumns=\vbox{\pagesofar}% \fi \fi % } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rm #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page % This outputs a mark at the end of the page that clears \thischapter % and \thissection, as is done in \startcontents. \let\pchapsepmacro\relax \chapmacro{}{Yomitfromtoc}{}% \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} % Start a new page \def\chappager{\par\vfill\supereject} % \chapoddpage - start on an odd page for a new chapter % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname\HEADINGSon} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\def\HEADINGSon{\HEADINGSsinglechapoff}} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \setchapternewpage on % \chapmacro - Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % Not used for @heading series. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yappendixkeyword{Yappendix} \def\Yomitfromtockeyword{Yomitfromtoc} % % % Definitions for @thischapter. These can be overridden in translation % files. \def\thischapterAppendix{% \putwordAppendix{} \thischapternum: \thischaptername} \def\thischapterChapter{% \putwordChapter{} \thischapternum: \thischaptername} % % \def\chapmacro#1#2#3{% \expandafter\ifx\thisenv\titlepage\else \checkenv{}% chapters, etc., should not start inside an environment. \fi % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\currentchapterdefs \let\prevsectiondefs=\currentsectiondefs \gdef\currentsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% \let\noexpand\thischapter\noexpand\thischapterAppendix }% \else \toks0={#1}% \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% \let\noexpand\thischapter\noexpand\thischapterChapter }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\currentchapterdefs \let\prevsectiondefs=\currentsectiondefs \domark % {% \chapfonts \rm \let\footnote=\errfootnoteheading % give better error message % % Have to define \currentsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\currentsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Definition for @thissection. This can be overridden in translation % files. \def\thissectionDef{% \putwordSection{} \thissectionnum: \thissectionname} % % Print any size, any type, section title. % % #1 is the text of the title, % #2 is the section level (sec/subsec/subsubsec), % #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc), % #4 is the section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \def\sectionlevel{#2}% \def\temptype{#3}% % % It is ok for the @heading series commands to appear inside an % environment (it's been historically allowed, though the logic is % dubious), but not the others. \ifx\temptype\Yomitfromtockeyword\else \checkenv{}% non-@*heading should not be in an environment. \fi \let\footnote=\errfootnoteheading % % Switch to the right set of fonts. \csname #2fonts\endcsname \rm % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\currentsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\currentsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% \let\noexpand\thissection\noexpand\thissectionDef }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% \let\noexpand\thissection\noexpand\thissectionDef }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \global\let\prevsectiondefs=\currentsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\currentsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \currentsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\currentsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\currentsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdforxetex \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } % process toc file to find the maximum width of the section numbers for % each chapter \def\findsecnowidths{% \begingroup \setupdatafile \activecatcodes \secentryfonts % Redefinitions \def\numchapentry##1##2##3##4{% \def\curchapname{secnowidth-##2}% \curchapmax=0pt }% \let\appentry\numchapentry % \def\numsecentry##1##2##3##4{% \def\cursecname{secnowidth-##2}% \cursecmax=0pt % \setbox0=\hbox{##2}% \ifdim\wd0>\curchapmax \curchapmax=\wd0 \expandafter\xdef\csname\curchapname\endcsname{\the\wd0}% \fi }% \let\appsecentry\numsecentry % \def\numsubsecentry##1##2##3##4{% \def\curssecname{secnowidth-##2}% \curssecmax=0pt % \setbox0=\hbox{##2}% \ifdim\wd0>\cursecmax \cursecmax=\wd0 \expandafter\xdef\csname\cursecname\endcsname{\the\wd0}% \fi }% \let\appsubsecentry\numsubsecentry % \def\numsubsubsecentry##1##2##3##4{% \setbox0=\hbox{##2}% \ifdim\wd0>\curssecmax \curssecmax=\wd0 \expandafter\xdef\csname\curssecname\endcsname{\the\wd0}% \fi }% \let\appsubsubsecentry\numsubsubsecentry % % Discard any output by outputting to dummy vbox, in case the toc file % contains macros that we have not redefined above. \setbox\dummybox\vbox\bgroup \input \tocreadfilename\relax \egroup \endgroup } \newdimen\curchapmax \newdimen\cursecmax \newdimen\curssecmax % set #1 to the maximum section width for #2 \def\retrievesecnowidth#1#2{% \expandafter\let\expandafter\savedsecnowidth \csname secnowidth-#2\endcsname \ifx\savedsecnowidth\relax #1=0pt \else #1=\savedsecnowidth \fi } \newdimen\secnowidthchap \secnowidthchap=0pt \newdimen\secnowidthsec \secnowidthsec=0pt \newdimen\secnowidthssec \secnowidthssec=0pt \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \entryrightmargin=\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi \def\thistitle{}% no title in double-sided headings % Record where the Roman numerals started. \ifnum\romancount=0 \global\romancount=\pagecount \fi \linkentrytexttrue } % \raggedbottom in plain.tex hardcodes \topskip so override it \catcode`\@=11 \def\raggedbottom{\advance\topskip by 0pt plus60pt \r@ggedbottomtrue} \catcode`\@=\other % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \findsecnowidths \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \contentsendroman } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \extrasecnoskip=0.4pt \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \contentsendroman } \let\shortcontents = \summarycontents % Get ready to use Arabic numerals again \def\contentsendroman{% \lastnegativepageno = \pageno \global\pageno=1 \contentsendcount = \pagecount } % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents, % and are read in from the *.toc file. % % The arguments are like: % \def\numchapentry#1#2#3#4 % #1 - the chapter or section name. % #2 - section number % #3 - level of section (e.g "chap", "sec") % #4 - page number % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{% % Add stretch and a bonus for breaking the page before the part heading. % This reduces the chance of the page being broken immediately after the % part heading, before a following chapter heading. \vskip 0pt plus 5\baselineskip \penalty-300 \vskip 0pt plus -5\baselineskip \dochapentry{#1}{\numeralbox}{}% } % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{% \retrievesecnowidth\secnowidthchap{#2}% \dochapentry{#1}{#2}{#4}% } % Chapters, in the short toc. \def\shortchapentry#1#2#3#4{% \tocentry{#1}{\shortchaplabel{#2}}{#4}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{% \retrievesecnowidth\secnowidthchap{#2}% \dochapentry{\appendixbox{#2}\hskip.7em#1}{}{#4}% } % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{}{#4}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#1}{#2}{#4}} \def\numsecentry#1#2#3#4{% \retrievesecnowidth\secnowidthsec{#2}% \dosecentry{#1}{#2}{#4}% } \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{% \retrievesecnowidth\secnowidthsec{#2}% \dosecentry{#1}{}{#4}% } % Subsections. \def\numsubsecentry#1#2#3#4{% \retrievesecnowidth\secnowidthssec{#2}% \dosubsecentry{#1}{#2}{#4}% } \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{% \retrievesecnowidth\secnowidthssec{#2}% \dosubsecentry{#1}{}{#4}% } % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#2}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text, #2 is % a section number if present, and #3 is the page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2#3{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup % Move the page numbers slightly to the right \advance\entryrightmargin by -0.05em \chapentryfonts \extrasecnoskip=0.4em % separate chapter number more \tocentry{#1}{#2}{#3}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2#3{\begingroup \secnowidth=\secnowidthchap \secentryfonts \leftskip=\tocindent \tocentry{#1}{#2}{#3}% \endgroup} \def\dosubsecentry#1#2#3{\begingroup \secnowidth=\secnowidthsec \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{#2}{#3}% \endgroup} \def\dosubsubsecentry#1#2#3{\begingroup \secnowidth=\secnowidthssec \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{#2}{#3}% \endgroup} % Used for the maximum width of a section number so we can align % section titles. \newdimen\secnowidth \secnowidth=0pt \newdimen\extrasecnoskip \extrasecnoskip=0pt % \tocentry{TITLE}{SEC NO}{PAGE} % \def\tocentry#1#2#3{% \def\secno{#2}% \ifx\empty\secno \entry{#1}{#3}% \else \ifdim 0pt=\secnowidth \setbox0=\hbox{#2\hskip\labelspace\hskip\extrasecnoskip}% \else \advance\secnowidth by \labelspace \advance\secnowidth by \extrasecnoskip \setbox0=\hbox to \secnowidth{% #2\hskip\labelspace\hskip\extrasecnoskip\hfill}% \fi \entrycontskip=\wd0 \entry{\box0 #1}{#3}% \fi } \newdimen\labelspace \labelspace=0.6em \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setregularquotes \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode `\`=\other \catcode `\'=\other % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % % Inverse of the list at the beginning of the file. \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\sp=\ptexsp \let\*=\ptexstar %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % we've made it outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip \ifnum\lastpenalty<10000 % Penalize breaking before the environment, because preceding text % often leads into it. \penalty100 \fi \vskip\envskipamount \fi \fi }} \def\afterenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip % only require the font if @cartouche is actually used \def\cartouchefontdefs{% \font\circle=lcircle10\relax \circthick=\fontdimen8\circle } \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \envparseargdef\cartouche{% \cartouchefontdefs \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. % % Set paragraph width for text inside cartouche. There are % left and right margins of 3pt each plus two vrules 0.4pt each. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \advance\cartinner by -6.8pt % % For drawing top and bottom of cartouche. Each corner char % adds 6pt and we take off the width of a rule to line up with the % right boundary perfectly. \cartouter=\hsize \advance\cartouter by 11.6pt % \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \setbox\groupbox=\vtop\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \def\arg{#1}% \ifx\arg\empty\else \centerV{\hfil \bf #1 \hfil}% \fi \kern3pt \vskip -\parskip } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \addgroupbox \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp, @verbatim % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setcodequotes \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \parsearg\gobble } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt \def\par{\leavevmode\endgraf}% \parindent = 0pt \setcodequotes \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. \newbox\verbbox \def\starttabbox{\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \leavevmode\box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim \def\par{\egroup\leavevmode\box\verbbox\endgraf\starttabbox}% \tabexpand \setcodequotes % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{% \starttabbox#2\egroup\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. % The \egroup ends the \verbbox started at the end of the last line in % the block. \endgroup % \envdef\verbatim{% \setnormaldispenv\setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim {% \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \edef\tmp{\noexpand\input #1 } \expandafter }\expandafter\starttabbox\tmp\egroup \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is desirable. % \def\copying{\checkenv{}\begingroup\macrobodyctxt\docopying} {\catcode`\ =\other \gdef\docopying#1@end copying{\endgroup\def\copyingtext{#1}} } \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } % Called as \printdefunline \deffooheader{text} % \def\printdefunline#1#2{% \begingroup \plainfrenchspacing % call \deffooheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \deffoox % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % @defblock, @defline do not automatically create index entries \envdef\defblock{% \startdefun } \let\Edefblock\Edefun \def\defline{% \doingtypefnfalse \parseargusing\activeparens{\printdefunline\deflineheader}% } \def\deflineheader#1 #2 #3\endheader{% \printdefname{#1}{}{#2}\magicamp\defunargs{#3\unskip}% } \def\deftypeline{% \doingtypefntrue \parseargusing\activeparens{\printdefunline\deftypelineheader}% } \def\deftypelineheader#1 #2 #3 #4\endheader{% \printdefname{#1}{#2}{#3}\magicamp\defunargs{#4\unskip}% } % \makedefun{deffoo} (\deffooheader parameters) { (\deffooheader expansion) } % % Define \deffoo, \deffoox \Edeffoo and \deffooheader. \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{% % First, check whether we are in the right environment: \checkenv#1% % % As in \startdefun, allow line break if we have multiple x headers % in a row. It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#3% definition of \deffooheader follows } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % Untyped functions: % @deffn category name args \makedefun{deffn}#1 #2 #3\endheader{% \doind{fn}{\code{#2}}% \printdefname{#1}{}{#2}\magicamp\defunargs{#3\unskip}% } % @defop category class name args \makedefun{defop}#1 {\defopheaderx{#1\ \putwordon}} \def\defopheaderx#1#2 #3 #4\endheader{% \doind{fn}{\code{#3}\space\putwordon\ \code{#2}}% \printdefname{#1\ \code{#2}}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}#1 #2 #3 #4\endheader{% \doind{fn}{\code{#3}}% \doingtypefntrue \printdefname{#1}{#2}{#3}\defunargs{#4\unskip}% } % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopheaderx{#1\ \putwordon}} \def\deftypeopheaderx#1#2 #3 #4 #5\endheader{% \doind{fn}{\code{#4}\space\putwordon\ \code{#1\ \code{#2}}}% \doingtypefntrue \printdefname{#1\ \code{#2}}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}#1 #2 #3 #4\endheader{% \doind{vr}{\code{#3}}% \printdefname{#1}{#2}{#3}\defunargs{#4\unskip}% } % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvheaderx{#1\ \putwordof}} \def\deftypecvheaderx#1#2 #3 #4 #5\endheader{% \doind{vr}{\code{#4}\space\putwordof\ \code{#2}}% \printdefname{#1\ \code{#2}}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvheaderx{#1\ \putwordof}} \def\defcvheaderx#1#2 {\deftypecvheaderx{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \printdefname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopheaderx\putwordMethodon} \makedefun{deftypemethod}{\deftypeopheaderx\putwordMethodon} \makedefun{defivar}{\defcvheaderx\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvheaderx\putwordInstanceVariableof} % \printdefname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\printdefname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \ifflagclear{txideftypefnnl}{}{\rettypeownlinetrue}% \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% \def\^^M{}% for line continuation % % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% \ifflagclear{txidefnamenospace}{% {\rm\enskip}% hskip 0.5 em of \rmfont }{}% % \boldbrax % arguments will be output next, if any. } % Print arguments. Use slanted for @def*, typewriter for @deftype*. \def\defunargs#1{% \bgroup \def\^^M{}% for line continuation \df \ifdoingtypefn \tt \else \sl \fi \ifflagclear{txicodevaristt}{}% {\def\var##1{{\setregularquotes \ttsl ##1}}}% #1% \egroup } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \gdef\defcharsdefault{% \let(=\lparen \let)=\rparen \let[=\lbrack \let]=\rbrack \let& = \&% } \globaldefs=1 \defcharsdefault \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \let\ampchar\& \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\rm\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \let\E=\expandafter % Used at the time of macro expansion. % Argument is macro body with arguments substituted \def\scanmacro#1{% \newlinechar`\^^M % expand the expansion of \eatleadingcr twice to maybe remove a leading % newline (and \else and \fi tokens), then call \eatspaces on the result. \def\xeatspaces##1{% \E\E\E\E\E\E\E\eatspaces\E\E\E\E\E\E\E{\eatleadingcr##1% }}% \def\xempty##1{}% % % Process the macro body under the current catcode regime. \scantokens{#1@comment}% % % The \comment is to remove the \newlinechar added by \scantokens, and % can be noticed by \parsearg. Note \c isn't used because this means cedilla % in math mode. } % Used for copying and captions \def\scanexp#1{% \expandafter\scanmacro\expandafter{#1}% } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \commondummyword\macro1\commondummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\commondummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } {\catcode`\^^M=\other% \gdef\eatleadingcr#1{\if\noexpand#1\noexpand^^M\else\E#1\fi}}% % Warning: this won't work for a delimited argument % or for an empty argument % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \catcode`\@=\other \catcode`\^^M=\other \catcode`\\=\active \passthroughcharstrue } \def\macrobodyctxt{% used for @macro definitions and @copying \scanctxt \catcode`\ =\other \catcode`\{=\other \catcode`\}=\other } % Used when scanning braced macro arguments. Note, however, that catcode % changes here are ineffectual if the macro invocation was nested inside % an argument to another Texinfo command. \def\macroargctxt{% \scanctxt \catcode`\ =\active } \def\macrolineargctxt{% used for whole-line arguments without braces \scanctxt \catcode`\{=\other \catcode`\}=\other } % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \usembodybackslash \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\commondummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\commondummyword \noexpand#1% \fi } % \getargs -- Parse the arguments to a @macro line. Set \macname to % the name of the macro, and \argl to the braced argument list. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % This made use of the feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. % Parse the optional {params} list to @macro or @rmacro. % Set \paramno to the number of arguments, % and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a % three-param macro.) Define \macarg.BLAH for each BLAH in the params % list to some hook where the argument is to be expanded. If there are % less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % If there are 10 or more arguments, a different technique is used: see % \parsemmanyargdef. % \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax % \hash is redefined to `#' later to get it into definitions \let\xeatspaces\relax \let\xempty\relax \parsemargdefxxx#1,;,% \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno\noexpand\xempty{}}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % the \xempty{} is to give \eatleadingcr an argument in the case of an % empty macro argument. % \parsemacbody, \parsermacbody % % Read recursive and nonrecursive macro bodies. (They're different since % rec and nonrec macros end differently.) % % We are in \macrobodyctxt, and the \xdef causes backslashes in the macro % body to be transformed. % Set \macrobody to the body of the macro, and call \macrodef. % {\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{% \xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}% {\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{% \xdef\macrobody{\eatcr{#1}}\endgroup\macrodef}}% % Make @ a letter, so that we can make private-to-Texinfo macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax %%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%% % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime under which the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, no macro can have more than 256 arguments (else error). % % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments' values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa. % \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } % Define the named-macro outside of this group and then close this group. % \def\macargexpandinbody@{% \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Trailing missing arguments are set to empty. % \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } %%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%% % This defines a Texinfo @macro or @rmacro, called by \parsemacbody. % \macrobody has the body of the macro in it, with placeholders for % its parameters, looking like "\xeatspaces{\hash 1}". % \paramno is the number of parameters % \paramlist is a TeX parameter text, e.g. "#1,#2,#3," % There are four cases: macros of zero, one, up to nine, and many arguments. % \xdef is used so that macro definitions will survive the file % they're defined in: @include reads the file inside a group. % \def\macrodef{% \let\hash=##% convert placeholders to macro parameter chars \ifnum\paramno=1 \long\def\xeatspaces##1{##1}% % We don't use \xeatspaces for single-argument macros, because we % want to keep ends of lines. This definition removes \xeatspaces % when \macrobody is expanded below. \else \def\xeatspaces{\string\xeatspaces}% % This expands \xeatspaces as a sequence of character tokens, which % stops \scantokens inserting an extra space after the control sequence. \fi \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \begingroup \noexpand\spaceisspace \noexpand\endlineisspace \noexpand\expandafter % skip any whitespace after the macro name. \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname{% \endgroup \noexpand\scanmacro{\macrobody}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \begingroup \noexpand\braceorline \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \endgroup \noexpand\scanmacro{\macrobody}% }% \else % at most 9 \ifnum\paramno<10\relax % @MACNAME sets the context for reading the macro argument % @MACNAME@@ gets the argument, processes backslashes and appends a % comma. % @MACNAME@@@ removes braces surrounding the argument list. % @MACNAME@@@@ scans the macro body with arguments substituted. \expandafter\xdef\csname\the\macname\endcsname{% \begingroup \noexpand\expandafter % This \expandafter skip any spaces after the \noexpand\macroargctxt % macro before we change the catcode of space. \noexpand\expandafter \expandafter\noexpand\csname\the\macname @@\endcsname}% \expandafter\xdef\csname\the\macname @@\endcsname##1{% \noexpand\passargtomacro \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname @@@@\endcsname\paramlist{% \endgroup\noexpand\scanmacro{\macrobody}}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi} \catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % {\catcode`\@=0 \catcode`\\=13 % We need to manipulate \ so use @ as escape @catcode`@_=11 % private names @catcode`@!=11 % used as argument separator % \passargtomacro#1#2 - % Call #1 with a list of tokens #2, with any doubled backslashes in #2 % compressed to one. % % This implementation works by expansion, and not execution (so we cannot use % \def or similar). This reduces the risk of this failing in contexts where % complete expansion is done with no execution (for example, in writing out to % an auxiliary file for an index entry). % % State is kept in the input stream: the argument passed to % @look_ahead, @gobble_and_check_finish and @add_segment is % % THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN (... rest of input) % % where: % THE_MACRO - name of the macro we want to call % ARG_RESULT - argument list we build to pass to that macro % PENDING_BS - either a backslash or nothing % NEXT_TOKEN - used to look ahead in the input stream to see what's coming next @gdef@passargtomacro#1#2{% @add_segment #1!{}@relax#2\@_finish\% } @gdef@_finish{@_finishx} @global@let@_finishx@relax % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 used to look ahead % % If the next token is not a backslash, process the rest of the argument; % otherwise, remove the next token. @gdef@look_ahead#1!#2#3#4{% @ifx#4\% @expandafter@gobble_and_check_finish @else @expandafter@add_segment @fi#1!{#2}#4#4% } % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 should be a backslash, which is gobbled. % #5 looks ahead % % Double backslash found. Add a single backslash, and look ahead. @gdef@gobble_and_check_finish#1!#2#3#4#5{% @add_segment#1\!{}#5#5% } @gdef@is_fi{@fi} % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 is input stream until next backslash % % Input stream is either at the start of the argument, or just after a % backslash sequence, either a lone backslash, or a doubled backslash. % NEXT_TOKEN contains the first token in the input stream: if it is \finish, % finish; otherwise, append to ARG_RESULT the segment of the argument up until % the next backslash. PENDING_BACKSLASH contains a backslash to represent % a backslash just before the start of the input stream that has not been % added to ARG_RESULT. @gdef@add_segment#1!#2#3#4\{% @ifx#3@_finish @call_the_macro#1!% @else % append the pending backslash to the result, followed by the next segment @expandafter@is_fi@look_ahead#1#2#4!{\}@fi % this @fi is discarded by @look_ahead. % we can't get rid of it with \expandafter because we don't know how % long #4 is. } % #1 - THE_MACRO % #2 - ARG_RESULT % #3 discards the res of the conditional in @add_segment, and @is_fi ends the % conditional. @gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \braceorline MAC is used for a one-argument macro MAC. It checks % whether the next non-whitespace character is a {. It sets the context % for reading the argument (slightly different in the two cases). Then, % to read the argument, in the whole-line case, it then calls the regular % \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC. % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup \macroargctxt \expandafter\passargtomacro \else \macrolineargctxt\expandafter\parsearg \fi \macnamexxx} % @linemacro \parseargdef\linemacro{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty \paramno=0 \let\hash\relax \def\paramlist{\hash 1\endlinemacro}% \else \expandafter\linegetparamlist\argl;% \fi \begingroup \macrobodyctxt \usembodybackslash \parselinemacrobody } % Build up \paramlist which will be used as the parameter text for the macro. % At the end it will be like "#1 #2 #3\endlinemacro". \def\linegetparamlist#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \linegetparamlistxxx#1,;,% } \def\linegetparamlistxxx#1,{% \if#1;\let\next=\linegetparamlistxxxx \else \let\next=\linegetparamlistxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\hash\the\paramno}% \edef\paramlist{\paramlist\hash\the\paramno\space}% \fi\next} \def\linegetparamlistxxxx{% \expandafter\fixparamlist\paramlist\fixparamlist } % Replace final space token \def\fixparamlist#1 \fixparamlist{% \def\paramlist{#1\endlinemacro}% } % Read the body of the macro, replacing backslash-surrounded variables % {\catcode`\ =\other\long\gdef\parselinemacrobody#1@end linemacro{% \xdef\macrobody{#1}% \endgroup \linemacrodef }} % Make the definition \def\linemacrodef{% \let\hash=##% \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\parsearg \expandafter\noexpand\csname\the\macname @@\endcsname } \expandafter\xdef\csname\the\macname @@\endcsname##1{% \egroup \expandafter\noexpand \csname\the\macname @@@\endcsname##1\noexpand\endlinemacro } \expandafter\expandafter \expandafter\xdef \expandafter\expandafter\csname\the\macname @@@\endcsname\paramlist{% \newlinechar=13 % split \macrobody into lines \noexpand\scantokens{\macrobody}% } } % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}\omittopnode} % Used so that the @top node doesn't have to be wrapped in an @ifnottex % conditional. % \doignore goes to more effort to skip nested conditionals but we don't need % that here. \def\omittopnode{% \ifx\lastnode\wordTop \expandafter\ignorenode\fi } \def\wordTop{Top} % Until the next @node, @part or @bye command, divert output to a box that % is not output. \def\ignorenode{\setbox\dummybox\vbox\bgroup \def\part{\egroup\part}% \def\node{\egroup\node}% \ignorenodebye } {\let\bye\relax \gdef\ignorenodebye{\let\bye\ignorenodebyedef} \gdef\ignorenodebyedef{\egroup(`Top' node ignored)\bye}} % The redefinition of \bye here is because it is declared \outer \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @nodedescription, @nodedescriptionblock - do nothing for TeX \parseargdef\nodedescription{} \def\nodedescriptionblock{\doignore{nodedescriptionblock}} % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \currentsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \requireauxfile \atdummies % preserve commands, but don't expand them % match definition in \xrdef, \refx, \xrefX. \def\value##1{##1}% \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\currentsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref{\putwordsee{} \xrefXX} \def\xref{\putwordSee{} \xrefXX} \def\ref{\xrefXX} \def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX} \def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % \getprintedrefname{#1}{#3}{#5}% \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \startxreflink{#1}{#4}% {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \def\value##1{##1}% \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". \iffloat distinguishes them by % \Xthisreftitle being set to a magic string. \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % Only output a following space if the -snt ref is nonempty, as the ref % will be empty for @unnumbered and @anchor. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi % % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % \ifflagclear{txiomitxrefpg}{% % We always want a comma ,% % output the `page 3'. \turnoffactive \putpageref{#1}% % Add a , if xref followed by a space \if\space\noexpand\tokenafterxref ,% \else\ifx\ \tokenafterxref ,% @TAB \else\ifx\*\tokenafterxref ,% @* \else\ifx\ \tokenafterxref ,% @SPACE \else\ifx\ \tokenafterxref ,% @NL \else\ifx\tie\tokenafterxref ,% @tie \fi\fi\fi\fi\fi\fi }{}% \fi\fi \fi \endlink \endgroup} % \getprintedrefname{NODE}{LABEL}{MANUAL} % - set \printedrefname and \printedmanual % \def\getprintedrefname#1#2#3{% % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #2}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\printedmanual{\ignorespaces #3}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #2) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi } % \startxreflink{NODE}{FILE} - start link in pdf output. \def\startxreflink#1#2{% \ifpdforxetex % For pdfTeX and LuaTeX {\indexnofonts \makevalueexpandable \turnoffactive % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #2, including (wrongly) those in the middle of the filename. \getfilename{#2}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \setpdfdestname{#1}% % \ifx\pdfdestname\empty \def\pdfdestname{Top}% no empty targets \fi % \leavevmode \ifpdf \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfdestname}% \else goto name{\pdfmkpgn{\pdfdestname}}% \fi \else % XeTeX \ifnum\filenamelength>0 % With default settings, % XeTeX (xdvipdfmx) replaces link destination names with integers. % In this case, the replaced destination names of % remote PDFs are no longer known. In order to avoid a replacement, % you can use xdvipdfmx's command line option `-C 0x0010'. % If you use XeTeX 0.99996+ (TeX Live 2016+), % this command line option is no longer necessary % because we can use the `dvipdfmx:config' special. \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}% \else \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoTo /D (\pdfdestname) >> >>}% \fi \fi }% \setcolor{\linkcolor}% \fi } % can be overridden in translation files \def\putpageref#1{% \space\putwordpage\tie\refx{#1-pg}} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % @link{NODENAME, LABEL, MANUAL} - create a "plain" link, with no % page number. Not useful if printed on paper. % \def\link#1{\linkX[#1,,,]} \def\linkX[#1,#2,#3,#4]{% \begingroup \unsepspaces \getprintedrefname{#1}{#2}{#3}% \startxreflink{#1}{#3}% \printedrefname \endlink \endgroup } % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % \refx{NAME} - reference a cross-reference string named NAME. \def\refx#1{% \requireauxfile {% \indexnofonts \turnoffactive \def\value##1{##1}% \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi } % This is the macro invoked by entries in the aux file. Define a control % sequence for a cross-reference target (we prepend XR to the control sequence % name to avoid collisions). The value is the page number. If this is a float % type, we have more work to do. % \def\xrdef#1#2{% {% Expand the node or anchor name to remove control sequences. % \turnoffactive stops 8-bit characters being changed to commands % like @'e. \refx does the same to retrieve the value in the definition. \indexnofonts \turnoffactive \def\value##1{##1}% \xdef\safexrefname{#1}% }% % \bgroup \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% \egroup % We put the \gdef inside a group to avoid the definitions building up on % TeX's save stack, which can cause it to run out of space for aux files with % thousands of lines. \gdef doesn't use the save stack, but \csname does % when it defines an unknown control sequence as \relax. % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate at the beginning of the file. % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % Used when writing to the aux file, or when using data from it. \def\requireauxfile{% \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi \global\let\requireauxfile=\relax % Only do this once. } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\active \catcode`\|=\active \catcode`\<=\active \catcode`\>=\active \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % \catcode`\\=\active % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % % Nested footnotes are not supported in TeX, that would take a lot % more work. (\startsavinginserts does not suffice.) \let\footnote=\errfootnotenest % % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\txipagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 \def\errfootnotenest{% \errhelp=\EMsimple \errmessage{Nested footnotes not supported in texinfo.tex, even though they work in makeinfo; sorry} } \def\errfootnoteheading{% \errhelp=\EMsimple \errmessage{Footnotes in chapters, sections, etc., are not supported} } % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % Approximate height of a line in the standard text font. \newdimen\capheight \setbox0=\vbox{\tenrm H} \capheight=\ht0 % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names \makevalueexpandable \ifvmode \imagevmodetrue \medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \vskip\parskip % % Place image in a \vtop for a top page margin that is (close to) correct, % as \topskip glue is relative to the first baseline. \vtop\bgroup \kern -\capheight \vskip-\parskip \fi % \ifx\centersub\centerV % For @center @image, enter vertical mode and add vertical space % Enter an extra \parskip because @center doesn't add space itself. \vbox\bgroup\vskip\parskip\medskip\vskip\parskip \else % Enter horizontal mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. \imageindent \fi % % Output the image. \ifpdf % For pdfTeX and LuaTeX <= 0.80 \dopdfimage{#1}{#2}{#3}% \else \ifx\XeTeXrevision\thisisundefined % For epsf.tex % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \else % For XeTeX \doxeteximage{#1}{#2}{#3}% \fi \fi % \ifimagevmode \egroup \medskip % space after a standalone image \fi \ifx\centersub\centerV % @center @image \medskip \egroup % close \vbox \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \currentsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\currentsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \requireauxfile \atdummies % \ifx\thisshortcaption\empty \def\gtemp{\thiscaption}% \else \def\gtemp{\thisshortcaption}% \fi \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanctxt\docaptionz} \def\docaptionz#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \currentsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{% \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \let_ = \normalunderscore % normal _ character for filename test \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore #1_\finish \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX } % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % XeTeX and LuaTeX can handle Unicode natively. % Their default I/O uses UTF-8 sequences instead of a byte-wise operation. % Other TeX engines' I/O (pdfTeX, etc.) is byte-wise. % \newif\iftxinativeunicodecapable \newif\iftxiusebytewiseio \ifx\XeTeXrevision\thisisundefined \ifx\luatexversion\thisisundefined \txinativeunicodecapablefalse \txiusebytewiseiotrue \else \txinativeunicodecapabletrue \txiusebytewiseiofalse \fi \else \txinativeunicodecapabletrue \txiusebytewiseiofalse \fi % Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex % for non-UTF-8 (byte-wise) encodings. % \def\setbytewiseio{% \ifx\XeTeXrevision\thisisundefined \else \XeTeXdefaultencoding "bytes" % For subsequent files to be read \XeTeXinputencoding "bytes" % For document root file % Unfortunately, there seems to be no corresponding XeTeX command for % output encoding. This is a problem for auxiliary index and TOC files. % The only solution would be perhaps to write out @U{...} sequences in % place of non-ASCII characters. \fi \ifx\luatexversion\thisisundefined \else \directlua{ local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub local function convert_char (char) return utf8_char(byte(char)) end local function convert_line (line) return gsub(line, ".", convert_char) end callback.register("process_input_buffer", convert_line) local function convert_line_out (line) local line_out = "" for c in string.utfvalues(line) do line_out = line_out .. string.char(c) end return line_out end callback.register("process_output_buffer", convert_line_out) } \fi \txiusebytewiseiotrue } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz} \def\documentencodingzzz#1{% % % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \iftxinativeunicodecapable % For native Unicode handling (XeTeX and LuaTeX) \nativeunicodechardefs \else % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX). % Since we already invoke \utfeightchardefs at the top level, % making non-ascii chars active is sufficient. \setnonasciicharscatcode\active \fi % \else \message{Ignoring unknown document encoding: #1.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii % \ifx\XeTeXrevision\thisisundefined \else \ifx \declaredencoding \utfeight \else \ifx \declaredencoding \ascii \else \message{Warning: XeTeX with non-UTF-8 encodings cannot handle % non-ASCII characters in auxiliary files.}% \fi \fi \fi } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing, sorry: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} \def\gdefchar#1#2{% \gdef#1{% \ifpassthroughchars \string#1% \else #2% \fi }} \begingroup % Make non-ASCII characters active for defining the character definition % macros. \setnonasciicharscatcode\active % Latin1 (ISO-8859-1) character definitions. \gdef\latonechardefs{% \gdefchar^^a0{\tie} \gdefchar^^a1{\exclamdown} \gdefchar^^a2{{\tcfont \char162}} % cent \gdefchar^^a3{\pounds{}} \gdefchar^^a4{{\tcfont \char164}} % currency \gdefchar^^a5{{\tcfont \char165}} % yen \gdefchar^^a6{{\tcfont \char166}} % broken bar \gdefchar^^a7{\S} \gdefchar^^a8{\"{}} \gdefchar^^a9{\copyright{}} \gdefchar^^aa{\ordf} \gdefchar^^ab{\guillemetleft{}} \gdefchar^^ac{\ensuremath\lnot} \gdefchar^^ad{\-} \gdefchar^^ae{\registeredsymbol{}} \gdefchar^^af{\={}} % \gdefchar^^b0{\textdegree} \gdefchar^^b1{$\pm$} \gdefchar^^b2{$^2$} \gdefchar^^b3{$^3$} \gdefchar^^b4{\'{}} \gdefchar^^b5{$\mu$} \gdefchar^^b6{\P} \gdefchar^^b7{\ensuremath\cdot} \gdefchar^^b8{\cedilla\ } \gdefchar^^b9{$^1$} \gdefchar^^ba{\ordm} \gdefchar^^bb{\guillemetright{}} \gdefchar^^bc{$1\over4$} \gdefchar^^bd{$1\over2$} \gdefchar^^be{$3\over4$} \gdefchar^^bf{\questiondown} % \gdefchar^^c0{\`A} \gdefchar^^c1{\'A} \gdefchar^^c2{\^A} \gdefchar^^c3{\~A} \gdefchar^^c4{\"A} \gdefchar^^c5{\ringaccent A} \gdefchar^^c6{\AE} \gdefchar^^c7{\cedilla C} \gdefchar^^c8{\`E} \gdefchar^^c9{\'E} \gdefchar^^ca{\^E} \gdefchar^^cb{\"E} \gdefchar^^cc{\`I} \gdefchar^^cd{\'I} \gdefchar^^ce{\^I} \gdefchar^^cf{\"I} % \gdefchar^^d0{\DH} \gdefchar^^d1{\~N} \gdefchar^^d2{\`O} \gdefchar^^d3{\'O} \gdefchar^^d4{\^O} \gdefchar^^d5{\~O} \gdefchar^^d6{\"O} \gdefchar^^d7{$\times$} \gdefchar^^d8{\O} \gdefchar^^d9{\`U} \gdefchar^^da{\'U} \gdefchar^^db{\^U} \gdefchar^^dc{\"U} \gdefchar^^dd{\'Y} \gdefchar^^de{\TH} \gdefchar^^df{\ss} % \gdefchar^^e0{\`a} \gdefchar^^e1{\'a} \gdefchar^^e2{\^a} \gdefchar^^e3{\~a} \gdefchar^^e4{\"a} \gdefchar^^e5{\ringaccent a} \gdefchar^^e6{\ae} \gdefchar^^e7{\cedilla c} \gdefchar^^e8{\`e} \gdefchar^^e9{\'e} \gdefchar^^ea{\^e} \gdefchar^^eb{\"e} \gdefchar^^ec{\`{\dotless i}} \gdefchar^^ed{\'{\dotless i}} \gdefchar^^ee{\^{\dotless i}} \gdefchar^^ef{\"{\dotless i}} % \gdefchar^^f0{\dh} \gdefchar^^f1{\~n} \gdefchar^^f2{\`o} \gdefchar^^f3{\'o} \gdefchar^^f4{\^o} \gdefchar^^f5{\~o} \gdefchar^^f6{\"o} \gdefchar^^f7{$\div$} \gdefchar^^f8{\o} \gdefchar^^f9{\`u} \gdefchar^^fa{\'u} \gdefchar^^fb{\^u} \gdefchar^^fc{\"u} \gdefchar^^fd{\'y} \gdefchar^^fe{\th} \gdefchar^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \gdef\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdefchar^^a4{\euro{}} \gdefchar^^a6{\v S} \gdefchar^^a8{\v s} \gdefchar^^b4{\v Z} \gdefchar^^b8{\v z} \gdefchar^^bc{\OE} \gdefchar^^bd{\oe} \gdefchar^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \gdef\lattwochardefs{% \gdefchar^^a0{\tie} \gdefchar^^a1{\ogonek{A}} \gdefchar^^a2{\u{}} \gdefchar^^a3{\L} \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}} \gdefchar^^a5{\v L} \gdefchar^^a6{\'S} \gdefchar^^a7{\S} \gdefchar^^a8{\"{}} \gdefchar^^a9{\v S} \gdefchar^^aa{\cedilla S} \gdefchar^^ab{\v T} \gdefchar^^ac{\'Z} \gdefchar^^ad{\-} \gdefchar^^ae{\v Z} \gdefchar^^af{\dotaccent Z} % \gdefchar^^b0{\textdegree} \gdefchar^^b1{\ogonek{a}} \gdefchar^^b2{\ogonek{ }} \gdefchar^^b3{\l} \gdefchar^^b4{\'{}} \gdefchar^^b5{\v l} \gdefchar^^b6{\'s} \gdefchar^^b7{\v{}} \gdefchar^^b8{\cedilla\ } \gdefchar^^b9{\v s} \gdefchar^^ba{\cedilla s} \gdefchar^^bb{\v t} \gdefchar^^bc{\'z} \gdefchar^^bd{\H{}} \gdefchar^^be{\v z} \gdefchar^^bf{\dotaccent z} % \gdefchar^^c0{\'R} \gdefchar^^c1{\'A} \gdefchar^^c2{\^A} \gdefchar^^c3{\u A} \gdefchar^^c4{\"A} \gdefchar^^c5{\'L} \gdefchar^^c6{\'C} \gdefchar^^c7{\cedilla C} \gdefchar^^c8{\v C} \gdefchar^^c9{\'E} \gdefchar^^ca{\ogonek{E}} \gdefchar^^cb{\"E} \gdefchar^^cc{\v E} \gdefchar^^cd{\'I} \gdefchar^^ce{\^I} \gdefchar^^cf{\v D} % \gdefchar^^d0{\DH} \gdefchar^^d1{\'N} \gdefchar^^d2{\v N} \gdefchar^^d3{\'O} \gdefchar^^d4{\^O} \gdefchar^^d5{\H O} \gdefchar^^d6{\"O} \gdefchar^^d7{$\times$} \gdefchar^^d8{\v R} \gdefchar^^d9{\ringaccent U} \gdefchar^^da{\'U} \gdefchar^^db{\H U} \gdefchar^^dc{\"U} \gdefchar^^dd{\'Y} \gdefchar^^de{\cedilla T} \gdefchar^^df{\ss} % \gdefchar^^e0{\'r} \gdefchar^^e1{\'a} \gdefchar^^e2{\^a} \gdefchar^^e3{\u a} \gdefchar^^e4{\"a} \gdefchar^^e5{\'l} \gdefchar^^e6{\'c} \gdefchar^^e7{\cedilla c} \gdefchar^^e8{\v c} \gdefchar^^e9{\'e} \gdefchar^^ea{\ogonek{e}} \gdefchar^^eb{\"e} \gdefchar^^ec{\v e} \gdefchar^^ed{\'{\dotless{i}}} \gdefchar^^ee{\^{\dotless{i}}} \gdefchar^^ef{\v d} % \gdefchar^^f0{\dh} \gdefchar^^f1{\'n} \gdefchar^^f2{\v n} \gdefchar^^f3{\'o} \gdefchar^^f4{\^o} \gdefchar^^f5{\H o} \gdefchar^^f6{\"o} \gdefchar^^f7{$\div$} \gdefchar^^f8{\v r} \gdefchar^^f9{\ringaccent u} \gdefchar^^fa{\'u} \gdefchar^^fb{\H u} \gdefchar^^fc{\"u} \gdefchar^^fd{\'y} \gdefchar^^fe{\cedilla t} \gdefchar^^ff{\dotaccent{}} } \endgroup % active chars % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } % Give non-ASCII bytes the active definitions for processing UTF-8 sequences \begingroup \catcode`\~13 \catcode`\$12 \catcode`\"12 % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp % substituting ~ and $ with a character token of that value. \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uccode`\$\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} % For bytes other than the first in a UTF-8 sequence. Not expected to % be expanded except when writing to auxiliary files. \countUTFx = "80 \countUTFy = "C2 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $\fi}}% \UTFviiiLoop \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiFourOctets\expandafter$\fi }}% \UTFviiiLoop \endgroup \def\globallet{\global\let} % save some \expandafter's below % @U{xxxx} to produce U+xxxx, if we support it. \def\U#1{% \expandafter\ifx\csname uni:#1\endcsname \relax \iftxinativeunicodecapable % All Unicode characters can be used if native Unicode handling is % active. However, if the font does not have the glyph, % letters are missing. \begingroup \uccode`\.="#1\relax \uppercase{.} \endgroup \else \errhelp = \EMsimple \errmessage{Unicode character U+#1 not supported, sorry}% \fi \else \csname uni:#1\endcsname \fi } % These macros are used here to construct the name of a control % sequence to be defined. \def\UTFviiiTwoOctetsName#1#2{% \csname u8:#1\string #2\endcsname}% \def\UTFviiiThreeOctetsName#1#2#3{% \csname u8:#1\string #2\string #3\endcsname}% \def\UTFviiiFourOctetsName#1#2#3#4{% \csname u8:#1\string #2\string #3\string #4\endcsname}% % For UTF-8 byte sequences (TeX, e-TeX and pdfTeX), % provide a definition macro to replace a Unicode character; % this gets used by the @U command % \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacterUTFviii#1#2{% \countUTFz = "#1\relax \begingroup \parseXMLCharref % Give \u8:... its definition. The sequence of seven \expandafter's % expands after the \gdef three times, e.g. % % 1. \UTFviiTwoOctetsName B1 B2 % 2. \csname u8:B1 \string B2 \endcsname % 3. \u8: B1 B2 (a single control sequence token) % \expandafter\expandafter \expandafter\expandafter \expandafter\expandafter \expandafter\gdef \UTFviiiTmp{#2}% % \expandafter\ifx\csname uni:#1\endcsname \relax \else \message{Internal error, already defined: #1}% \fi % % define an additional control sequence for this code point. \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp \endgroup} % % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp % to the corresponding UTF-8 sequence. \gdef\parseXMLCharref{% \ifnum\countUTFz < "20\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 0020}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctetsName.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}% \fi\fi\fi } % Extract a byte from the end of the UTF-8 representation of \countUTFx. % It must be a non-initial byte in the sequence. % Change \uccode of #1 for it to be used in \parseUTFviiiB as one % of the bytes. \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz % Save to be the future value of \countUTFz. \multiply\countUTFz by 64 % \countUTFz is now \countUTFx with the last 5 bits cleared. Subtract % in order to get the last five bits. \advance\countUTFx by -\countUTFz % Convert this to the byte in the UTF-8 sequence. \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} % Used to put a UTF-8 byte sequence into \UTFviiiTmp % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8 % sequence. % #2 is one of the \UTFviii*OctetsName macros. % #3 is always a full stop (.) % #4 is a template for the other bytes in the sequence. The values for these % bytes is substituted in here with \uppercase using the \uccode's. \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup % For native Unicode handling (XeTeX and LuaTeX), % provide a definition macro that sets a catcode to `other' non-globally % \def\DeclareUnicodeCharacterNativeOther#1#2{% \catcode"#1=\other } % https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M % U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block) % U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block) % U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A % U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B % % Many of our renditions are less than wonderful, and all the missing % characters are available somewhere. Loading the necessary fonts % awaits user request. We can't truly support Unicode without % reimplementing everything that's been done in LaTeX for many years, % plus probably using luatex or xetex, and who knows what else. % We won't be doing that here in this simple file. But we can try to at % least make most of the characters not bomb out. % \def\unicodechardefs{% \DeclareUnicodeCharacter{0020}{ } % space \DeclareUnicodeCharacter{0021}{\char"21 }% % space to terminate number \DeclareUnicodeCharacter{0022}{\char"22 }% \DeclareUnicodeCharacter{0023}{\char"23 }% \DeclareUnicodeCharacter{0024}{\char"24 }% \DeclareUnicodeCharacter{0025}{\char"25 }% \DeclareUnicodeCharacter{0026}{\char"26 }% \DeclareUnicodeCharacter{0027}{\char"27 }% \DeclareUnicodeCharacter{0028}{\char"28 }% \DeclareUnicodeCharacter{0029}{\char"29 }% \DeclareUnicodeCharacter{002A}{\char"2A }% \DeclareUnicodeCharacter{002B}{\char"2B }% \DeclareUnicodeCharacter{002C}{\char"2C }% \DeclareUnicodeCharacter{002D}{\char"2D }% \DeclareUnicodeCharacter{002E}{\char"2E }% \DeclareUnicodeCharacter{002F}{\char"2F }% \DeclareUnicodeCharacter{0030}{0}% \DeclareUnicodeCharacter{0031}{1}% \DeclareUnicodeCharacter{0032}{2}% \DeclareUnicodeCharacter{0033}{3}% \DeclareUnicodeCharacter{0034}{4}% \DeclareUnicodeCharacter{0035}{5}% \DeclareUnicodeCharacter{0036}{6}% \DeclareUnicodeCharacter{0037}{7}% \DeclareUnicodeCharacter{0038}{8}% \DeclareUnicodeCharacter{0039}{9}% \DeclareUnicodeCharacter{003A}{\char"3A }% \DeclareUnicodeCharacter{003B}{\char"3B }% \DeclareUnicodeCharacter{003C}{\char"3C }% \DeclareUnicodeCharacter{003D}{\char"3D }% \DeclareUnicodeCharacter{003E}{\char"3E }% \DeclareUnicodeCharacter{003F}{\char"3F }% \DeclareUnicodeCharacter{0040}{\char"40 }% \DeclareUnicodeCharacter{0041}{A}% \DeclareUnicodeCharacter{0042}{B}% \DeclareUnicodeCharacter{0043}{C}% \DeclareUnicodeCharacter{0044}{D}% \DeclareUnicodeCharacter{0045}{E}% \DeclareUnicodeCharacter{0046}{F}% \DeclareUnicodeCharacter{0047}{G}% \DeclareUnicodeCharacter{0048}{H}% \DeclareUnicodeCharacter{0049}{I}% \DeclareUnicodeCharacter{004A}{J}% \DeclareUnicodeCharacter{004B}{K}% \DeclareUnicodeCharacter{004C}{L}% \DeclareUnicodeCharacter{004D}{M}% \DeclareUnicodeCharacter{004E}{N}% \DeclareUnicodeCharacter{004F}{O}% \DeclareUnicodeCharacter{0050}{P}% \DeclareUnicodeCharacter{0051}{Q}% \DeclareUnicodeCharacter{0052}{R}% \DeclareUnicodeCharacter{0053}{S}% \DeclareUnicodeCharacter{0054}{T}% \DeclareUnicodeCharacter{0055}{U}% \DeclareUnicodeCharacter{0056}{V}% \DeclareUnicodeCharacter{0057}{W}% \DeclareUnicodeCharacter{0058}{X}% \DeclareUnicodeCharacter{0059}{Y}% \DeclareUnicodeCharacter{005A}{Z}% \DeclareUnicodeCharacter{005B}{\char"5B }% \DeclareUnicodeCharacter{005C}{\char"5C }% \DeclareUnicodeCharacter{005D}{\char"5D }% \DeclareUnicodeCharacter{005E}{\char"5E }% \DeclareUnicodeCharacter{005F}{\char"5F }% \DeclareUnicodeCharacter{0060}{\char"60 }% \DeclareUnicodeCharacter{0061}{a}% \DeclareUnicodeCharacter{0062}{b}% \DeclareUnicodeCharacter{0063}{c}% \DeclareUnicodeCharacter{0064}{d}% \DeclareUnicodeCharacter{0065}{e}% \DeclareUnicodeCharacter{0066}{f}% \DeclareUnicodeCharacter{0067}{g}% \DeclareUnicodeCharacter{0068}{h}% \DeclareUnicodeCharacter{0069}{i}% \DeclareUnicodeCharacter{006A}{j}% \DeclareUnicodeCharacter{006B}{k}% \DeclareUnicodeCharacter{006C}{l}% \DeclareUnicodeCharacter{006D}{m}% \DeclareUnicodeCharacter{006E}{n}% \DeclareUnicodeCharacter{006F}{o}% \DeclareUnicodeCharacter{0070}{p}% \DeclareUnicodeCharacter{0071}{q}% \DeclareUnicodeCharacter{0072}{r}% \DeclareUnicodeCharacter{0073}{s}% \DeclareUnicodeCharacter{0074}{t}% \DeclareUnicodeCharacter{0075}{u}% \DeclareUnicodeCharacter{0076}{v}% \DeclareUnicodeCharacter{0077}{w}% \DeclareUnicodeCharacter{0078}{x}% \DeclareUnicodeCharacter{0079}{y}% \DeclareUnicodeCharacter{007A}{z}% \DeclareUnicodeCharacter{007B}{\char"7B }% \DeclareUnicodeCharacter{007C}{\char"7C }% \DeclareUnicodeCharacter{007D}{\char"7D }% \DeclareUnicodeCharacter{007E}{\char"7E }% % \DeclareUnicodeCharacter{007F}{} % DEL % \DeclareUnicodeCharacter{00A0}{\tie}% \DeclareUnicodeCharacter{00A1}{\exclamdown}% \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent \DeclareUnicodeCharacter{00A3}{\pounds{}}% \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar \DeclareUnicodeCharacter{00A7}{\S}% \DeclareUnicodeCharacter{00A8}{\"{ }}% \DeclareUnicodeCharacter{00A9}{\copyright{}}% \DeclareUnicodeCharacter{00AA}{\ordf}% \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}% \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}% \DeclareUnicodeCharacter{00AD}{\-}% \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}% \DeclareUnicodeCharacter{00AF}{\={ }}% % \DeclareUnicodeCharacter{00B0}{\textdegree}% \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}% \DeclareUnicodeCharacter{00B2}{$^2$}% \DeclareUnicodeCharacter{00B3}{$^3$}% \DeclareUnicodeCharacter{00B4}{\'{ }}% \DeclareUnicodeCharacter{00B5}{$\mu$}% \DeclareUnicodeCharacter{00B6}{\P}% \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}% \DeclareUnicodeCharacter{00B8}{\cedilla{ }}% \DeclareUnicodeCharacter{00B9}{$^1$}% \DeclareUnicodeCharacter{00BA}{\ordm}% \DeclareUnicodeCharacter{00BB}{\guillemetright{}}% \DeclareUnicodeCharacter{00BC}{$1\over4$}% \DeclareUnicodeCharacter{00BD}{$1\over2$}% \DeclareUnicodeCharacter{00BE}{$3\over4$}% \DeclareUnicodeCharacter{00BF}{\questiondown}% % \DeclareUnicodeCharacter{00C0}{\`A}% \DeclareUnicodeCharacter{00C1}{\'A}% \DeclareUnicodeCharacter{00C2}{\^A}% \DeclareUnicodeCharacter{00C3}{\~A}% \DeclareUnicodeCharacter{00C4}{\"A}% \DeclareUnicodeCharacter{00C5}{\AA}% \DeclareUnicodeCharacter{00C6}{\AE}% \DeclareUnicodeCharacter{00C7}{\cedilla{C}}% \DeclareUnicodeCharacter{00C8}{\`E}% \DeclareUnicodeCharacter{00C9}{\'E}% \DeclareUnicodeCharacter{00CA}{\^E}% \DeclareUnicodeCharacter{00CB}{\"E}% \DeclareUnicodeCharacter{00CC}{\`I}% \DeclareUnicodeCharacter{00CD}{\'I}% \DeclareUnicodeCharacter{00CE}{\^I}% \DeclareUnicodeCharacter{00CF}{\"I}% % \DeclareUnicodeCharacter{00D0}{\DH}% \DeclareUnicodeCharacter{00D1}{\~N}% \DeclareUnicodeCharacter{00D2}{\`O}% \DeclareUnicodeCharacter{00D3}{\'O}% \DeclareUnicodeCharacter{00D4}{\^O}% \DeclareUnicodeCharacter{00D5}{\~O}% \DeclareUnicodeCharacter{00D6}{\"O}% \DeclareUnicodeCharacter{00D7}{\ensuremath\times}% \DeclareUnicodeCharacter{00D8}{\O}% \DeclareUnicodeCharacter{00D9}{\`U}% \DeclareUnicodeCharacter{00DA}{\'U}% \DeclareUnicodeCharacter{00DB}{\^U}% \DeclareUnicodeCharacter{00DC}{\"U}% \DeclareUnicodeCharacter{00DD}{\'Y}% \DeclareUnicodeCharacter{00DE}{\TH}% \DeclareUnicodeCharacter{00DF}{\ss}% % \DeclareUnicodeCharacter{00E0}{\`a}% \DeclareUnicodeCharacter{00E1}{\'a}% \DeclareUnicodeCharacter{00E2}{\^a}% \DeclareUnicodeCharacter{00E3}{\~a}% \DeclareUnicodeCharacter{00E4}{\"a}% \DeclareUnicodeCharacter{00E5}{\aa}% \DeclareUnicodeCharacter{00E6}{\ae}% \DeclareUnicodeCharacter{00E7}{\cedilla{c}}% \DeclareUnicodeCharacter{00E8}{\`e}% \DeclareUnicodeCharacter{00E9}{\'e}% \DeclareUnicodeCharacter{00EA}{\^e}% \DeclareUnicodeCharacter{00EB}{\"e}% \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}% \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}% \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}% \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}% % \DeclareUnicodeCharacter{00F0}{\dh}% \DeclareUnicodeCharacter{00F1}{\~n}% \DeclareUnicodeCharacter{00F2}{\`o}% \DeclareUnicodeCharacter{00F3}{\'o}% \DeclareUnicodeCharacter{00F4}{\^o}% \DeclareUnicodeCharacter{00F5}{\~o}% \DeclareUnicodeCharacter{00F6}{\"o}% \DeclareUnicodeCharacter{00F7}{\ensuremath\div}% \DeclareUnicodeCharacter{00F8}{\o}% \DeclareUnicodeCharacter{00F9}{\`u}% \DeclareUnicodeCharacter{00FA}{\'u}% \DeclareUnicodeCharacter{00FB}{\^u}% \DeclareUnicodeCharacter{00FC}{\"u}% \DeclareUnicodeCharacter{00FD}{\'y}% \DeclareUnicodeCharacter{00FE}{\th}% \DeclareUnicodeCharacter{00FF}{\"y}% % \DeclareUnicodeCharacter{0100}{\=A}% \DeclareUnicodeCharacter{0101}{\=a}% \DeclareUnicodeCharacter{0102}{\u{A}}% \DeclareUnicodeCharacter{0103}{\u{a}}% \DeclareUnicodeCharacter{0104}{\ogonek{A}}% \DeclareUnicodeCharacter{0105}{\ogonek{a}}% \DeclareUnicodeCharacter{0106}{\'C}% \DeclareUnicodeCharacter{0107}{\'c}% \DeclareUnicodeCharacter{0108}{\^C}% \DeclareUnicodeCharacter{0109}{\^c}% \DeclareUnicodeCharacter{010A}{\dotaccent{C}}% \DeclareUnicodeCharacter{010B}{\dotaccent{c}}% \DeclareUnicodeCharacter{010C}{\v{C}}% \DeclareUnicodeCharacter{010D}{\v{c}}% \DeclareUnicodeCharacter{010E}{\v{D}}% \DeclareUnicodeCharacter{010F}{d'}% % \DeclareUnicodeCharacter{0110}{\DH}% \DeclareUnicodeCharacter{0111}{\dh}% \DeclareUnicodeCharacter{0112}{\=E}% \DeclareUnicodeCharacter{0113}{\=e}% \DeclareUnicodeCharacter{0114}{\u{E}}% \DeclareUnicodeCharacter{0115}{\u{e}}% \DeclareUnicodeCharacter{0116}{\dotaccent{E}}% \DeclareUnicodeCharacter{0117}{\dotaccent{e}}% \DeclareUnicodeCharacter{0118}{\ogonek{E}}% \DeclareUnicodeCharacter{0119}{\ogonek{e}}% \DeclareUnicodeCharacter{011A}{\v{E}}% \DeclareUnicodeCharacter{011B}{\v{e}}% \DeclareUnicodeCharacter{011C}{\^G}% \DeclareUnicodeCharacter{011D}{\^g}% \DeclareUnicodeCharacter{011E}{\u{G}}% \DeclareUnicodeCharacter{011F}{\u{g}}% % \DeclareUnicodeCharacter{0120}{\dotaccent{G}}% \DeclareUnicodeCharacter{0121}{\dotaccent{g}}% \DeclareUnicodeCharacter{0122}{\cedilla{G}}% \DeclareUnicodeCharacter{0123}{\cedilla{g}}% \DeclareUnicodeCharacter{0124}{\^H}% \DeclareUnicodeCharacter{0125}{\^h}% \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}% \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}% \DeclareUnicodeCharacter{0128}{\~I}% \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}% \DeclareUnicodeCharacter{012A}{\=I}% \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}% \DeclareUnicodeCharacter{012C}{\u{I}}% \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}% \DeclareUnicodeCharacter{012E}{\ogonek{I}}% \DeclareUnicodeCharacter{012F}{\ogonek{i}}% % \DeclareUnicodeCharacter{0130}{\dotaccent{I}}% \DeclareUnicodeCharacter{0131}{\dotless{i}}% \DeclareUnicodeCharacter{0132}{IJ}% \DeclareUnicodeCharacter{0133}{ij}% \DeclareUnicodeCharacter{0134}{\^J}% \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}% \DeclareUnicodeCharacter{0136}{\cedilla{K}}% \DeclareUnicodeCharacter{0137}{\cedilla{k}}% \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}% \DeclareUnicodeCharacter{0139}{\'L}% \DeclareUnicodeCharacter{013A}{\'l}% \DeclareUnicodeCharacter{013B}{\cedilla{L}}% \DeclareUnicodeCharacter{013C}{\cedilla{l}}% \DeclareUnicodeCharacter{013D}{L'}% should kern \DeclareUnicodeCharacter{013E}{l'}% should kern \DeclareUnicodeCharacter{013F}{L\U{00B7}}% % \DeclareUnicodeCharacter{0140}{l\U{00B7}}% \DeclareUnicodeCharacter{0141}{\L}% \DeclareUnicodeCharacter{0142}{\l}% \DeclareUnicodeCharacter{0143}{\'N}% \DeclareUnicodeCharacter{0144}{\'n}% \DeclareUnicodeCharacter{0145}{\cedilla{N}}% \DeclareUnicodeCharacter{0146}{\cedilla{n}}% \DeclareUnicodeCharacter{0147}{\v{N}}% \DeclareUnicodeCharacter{0148}{\v{n}}% \DeclareUnicodeCharacter{0149}{'n}% \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}% \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}% \DeclareUnicodeCharacter{014C}{\=O}% \DeclareUnicodeCharacter{014D}{\=o}% \DeclareUnicodeCharacter{014E}{\u{O}}% \DeclareUnicodeCharacter{014F}{\u{o}}% % \DeclareUnicodeCharacter{0150}{\H{O}}% \DeclareUnicodeCharacter{0151}{\H{o}}% \DeclareUnicodeCharacter{0152}{\OE}% \DeclareUnicodeCharacter{0153}{\oe}% \DeclareUnicodeCharacter{0154}{\'R}% \DeclareUnicodeCharacter{0155}{\'r}% \DeclareUnicodeCharacter{0156}{\cedilla{R}}% \DeclareUnicodeCharacter{0157}{\cedilla{r}}% \DeclareUnicodeCharacter{0158}{\v{R}}% \DeclareUnicodeCharacter{0159}{\v{r}}% \DeclareUnicodeCharacter{015A}{\'S}% \DeclareUnicodeCharacter{015B}{\'s}% \DeclareUnicodeCharacter{015C}{\^S}% \DeclareUnicodeCharacter{015D}{\^s}% \DeclareUnicodeCharacter{015E}{\cedilla{S}}% \DeclareUnicodeCharacter{015F}{\cedilla{s}}% % \DeclareUnicodeCharacter{0160}{\v{S}}% \DeclareUnicodeCharacter{0161}{\v{s}}% \DeclareUnicodeCharacter{0162}{\cedilla{T}}% \DeclareUnicodeCharacter{0163}{\cedilla{t}}% \DeclareUnicodeCharacter{0164}{\v{T}}% \DeclareUnicodeCharacter{0165}{\v{t}}% \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}% \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}% \DeclareUnicodeCharacter{0168}{\~U}% \DeclareUnicodeCharacter{0169}{\~u}% \DeclareUnicodeCharacter{016A}{\=U}% \DeclareUnicodeCharacter{016B}{\=u}% \DeclareUnicodeCharacter{016C}{\u{U}}% \DeclareUnicodeCharacter{016D}{\u{u}}% \DeclareUnicodeCharacter{016E}{\ringaccent{U}}% \DeclareUnicodeCharacter{016F}{\ringaccent{u}}% % \DeclareUnicodeCharacter{0170}{\H{U}}% \DeclareUnicodeCharacter{0171}{\H{u}}% \DeclareUnicodeCharacter{0172}{\ogonek{U}}% \DeclareUnicodeCharacter{0173}{\ogonek{u}}% \DeclareUnicodeCharacter{0174}{\^W}% \DeclareUnicodeCharacter{0175}{\^w}% \DeclareUnicodeCharacter{0176}{\^Y}% \DeclareUnicodeCharacter{0177}{\^y}% \DeclareUnicodeCharacter{0178}{\"Y}% \DeclareUnicodeCharacter{0179}{\'Z}% \DeclareUnicodeCharacter{017A}{\'z}% \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}% \DeclareUnicodeCharacter{017C}{\dotaccent{z}}% \DeclareUnicodeCharacter{017D}{\v{Z}}% \DeclareUnicodeCharacter{017E}{\v{z}}% \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}% % \DeclareUnicodeCharacter{01C4}{D\v{Z}}% \DeclareUnicodeCharacter{01C5}{D\v{z}}% \DeclareUnicodeCharacter{01C6}{d\v{z}}% \DeclareUnicodeCharacter{01C7}{LJ}% \DeclareUnicodeCharacter{01C8}{Lj}% \DeclareUnicodeCharacter{01C9}{lj}% \DeclareUnicodeCharacter{01CA}{NJ}% \DeclareUnicodeCharacter{01CB}{Nj}% \DeclareUnicodeCharacter{01CC}{nj}% \DeclareUnicodeCharacter{01CD}{\v{A}}% \DeclareUnicodeCharacter{01CE}{\v{a}}% \DeclareUnicodeCharacter{01CF}{\v{I}}% % \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}% \DeclareUnicodeCharacter{01D1}{\v{O}}% \DeclareUnicodeCharacter{01D2}{\v{o}}% \DeclareUnicodeCharacter{01D3}{\v{U}}% \DeclareUnicodeCharacter{01D4}{\v{u}}% % \DeclareUnicodeCharacter{01E2}{\={\AE}}% \DeclareUnicodeCharacter{01E3}{\={\ae}}% \DeclareUnicodeCharacter{01E6}{\v{G}}% \DeclareUnicodeCharacter{01E7}{\v{g}}% \DeclareUnicodeCharacter{01E8}{\v{K}}% \DeclareUnicodeCharacter{01E9}{\v{k}}% % \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}% \DeclareUnicodeCharacter{01F1}{DZ}% \DeclareUnicodeCharacter{01F2}{Dz}% \DeclareUnicodeCharacter{01F3}{dz}% \DeclareUnicodeCharacter{01F4}{\'G}% \DeclareUnicodeCharacter{01F5}{\'g}% \DeclareUnicodeCharacter{01F8}{\`N}% \DeclareUnicodeCharacter{01F9}{\`n}% \DeclareUnicodeCharacter{01FC}{\'{\AE}}% \DeclareUnicodeCharacter{01FD}{\'{\ae}}% \DeclareUnicodeCharacter{01FE}{\'{\O}}% \DeclareUnicodeCharacter{01FF}{\'{\o}}% % \DeclareUnicodeCharacter{021E}{\v{H}}% \DeclareUnicodeCharacter{021F}{\v{h}}% % \DeclareUnicodeCharacter{0226}{\dotaccent{A}}% \DeclareUnicodeCharacter{0227}{\dotaccent{a}}% \DeclareUnicodeCharacter{0228}{\cedilla{E}}% \DeclareUnicodeCharacter{0229}{\cedilla{e}}% \DeclareUnicodeCharacter{022E}{\dotaccent{O}}% \DeclareUnicodeCharacter{022F}{\dotaccent{o}}% % \DeclareUnicodeCharacter{0232}{\=Y}% \DeclareUnicodeCharacter{0233}{\=y}% \DeclareUnicodeCharacter{0237}{\dotless{j}}% % \DeclareUnicodeCharacter{02BC}{'}% % \DeclareUnicodeCharacter{02DB}{\ogonek{ }}% % % Greek letters upper case \DeclareUnicodeCharacter{0391}{{\it A}}% \DeclareUnicodeCharacter{0392}{{\it B}}% \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}% \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}% \DeclareUnicodeCharacter{0395}{{\it E}}% \DeclareUnicodeCharacter{0396}{{\it Z}}% \DeclareUnicodeCharacter{0397}{{\it H}}% \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}% \DeclareUnicodeCharacter{0399}{{\it I}}% \DeclareUnicodeCharacter{039A}{{\it K}}% \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}% \DeclareUnicodeCharacter{039C}{{\it M}}% \DeclareUnicodeCharacter{039D}{{\it N}}% \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}% \DeclareUnicodeCharacter{039F}{{\it O}}% \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}% \DeclareUnicodeCharacter{03A1}{{\it P}}% %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}% \DeclareUnicodeCharacter{03A4}{{\it T}}% \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}% \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}% \DeclareUnicodeCharacter{03A7}{{\it X}}% \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}% \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}% % % Vowels with accents \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}% \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}% \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}% \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}% \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}% \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}% % % Standalone accent \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}% % % Greek letters lower case \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}% \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}% \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}% \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}% \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}% \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}% \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}% \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}% \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}% \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}% \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}% \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}% \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}% \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}% \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}% \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}% \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}% \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}% \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}% \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}% \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}% \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}% \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}% \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}% % % More Greek vowels with accents \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}% \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}% \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}% \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}% \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}% % % Variant Greek letters \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}% \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}% \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}% % \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}% \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}% \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}% \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}% \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}% \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}% \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}% \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}% \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}% \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}% \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}% \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}% % \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}% \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}% % \DeclareUnicodeCharacter{1E20}{\=G}% \DeclareUnicodeCharacter{1E21}{\=g}% \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}% \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}% \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}% \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}% \DeclareUnicodeCharacter{1E26}{\"H}% \DeclareUnicodeCharacter{1E27}{\"h}% % \DeclareUnicodeCharacter{1E30}{\'K}% \DeclareUnicodeCharacter{1E31}{\'k}% \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}% \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}% \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}% \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}% \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}% \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}% \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}% \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}% \DeclareUnicodeCharacter{1E3E}{\'M}% \DeclareUnicodeCharacter{1E3F}{\'m}% % \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}% \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}% \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}% \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}% \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}% \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}% \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}% \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}% \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}% \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}% % \DeclareUnicodeCharacter{1E54}{\'P}% \DeclareUnicodeCharacter{1E55}{\'p}% \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}% \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}% \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}% \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}% \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}% \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}% \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}% \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}% % \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}% \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}% \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}% \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}% \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}% \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}% \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}% \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}% \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}% \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}% % \DeclareUnicodeCharacter{1E7C}{\~V}% \DeclareUnicodeCharacter{1E7D}{\~v}% \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}% \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}% % \DeclareUnicodeCharacter{1E80}{\`W}% \DeclareUnicodeCharacter{1E81}{\`w}% \DeclareUnicodeCharacter{1E82}{\'W}% \DeclareUnicodeCharacter{1E83}{\'w}% \DeclareUnicodeCharacter{1E84}{\"W}% \DeclareUnicodeCharacter{1E85}{\"w}% \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}% \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}% \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}% \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}% \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}% \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}% \DeclareUnicodeCharacter{1E8C}{\"X}% \DeclareUnicodeCharacter{1E8D}{\"x}% \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}% \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}% % \DeclareUnicodeCharacter{1E90}{\^Z}% \DeclareUnicodeCharacter{1E91}{\^z}% \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}% \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}% \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}% \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}% \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}% \DeclareUnicodeCharacter{1E97}{\"t}% \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}% \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}% % \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}% \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}% % \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}% \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}% \DeclareUnicodeCharacter{1EBC}{\~E}% \DeclareUnicodeCharacter{1EBD}{\~e}% % \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}% \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}% \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}% \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}% % \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}% \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}% % \DeclareUnicodeCharacter{1EF2}{\`Y}% \DeclareUnicodeCharacter{1EF3}{\`y}% \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}% % \DeclareUnicodeCharacter{1EF8}{\~Y}% \DeclareUnicodeCharacter{1EF9}{\~y}% % % Exotic spaces \DeclareUnicodeCharacter{2007}{\hphantom{0}}% % % Punctuation \DeclareUnicodeCharacter{2013}{--}% \DeclareUnicodeCharacter{2014}{---}% \DeclareUnicodeCharacter{2018}{\quoteleft{}}% \DeclareUnicodeCharacter{2019}{\quoteright{}}% \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}% \DeclareUnicodeCharacter{201C}{\quotedblleft{}}% \DeclareUnicodeCharacter{201D}{\quotedblright{}}% \DeclareUnicodeCharacter{201E}{\quotedblbase{}}% \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}% \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}% \DeclareUnicodeCharacter{2022}{\bullet{}}% \DeclareUnicodeCharacter{202F}{\thinspace}% \DeclareUnicodeCharacter{2026}{\dots{}}% \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}% \DeclareUnicodeCharacter{203A}{\guilsinglright{}}% % \DeclareUnicodeCharacter{20AC}{\euro{}}% % \DeclareUnicodeCharacter{2192}{\arrow}% \DeclareUnicodeCharacter{21D2}{\result{}}% % % Mathematical symbols \DeclareUnicodeCharacter{2200}{\ensuremath\forall}% \DeclareUnicodeCharacter{2203}{\ensuremath\exists}% \DeclareUnicodeCharacter{2208}{\ensuremath\in}% \DeclareUnicodeCharacter{2212}{\minus{}}% \DeclareUnicodeCharacter{2217}{\ast}% \DeclareUnicodeCharacter{221E}{\ensuremath\infty}% \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}% \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}% \DeclareUnicodeCharacter{2229}{\ensuremath\cap}% \DeclareUnicodeCharacter{2261}{\equiv{}}% \DeclareUnicodeCharacter{2264}{\ensuremath\leq}% \DeclareUnicodeCharacter{2265}{\ensuremath\geq}% \DeclareUnicodeCharacter{2282}{\ensuremath\subset}% \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}% % \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}% \DeclareUnicodeCharacter{2032}{\ensuremath\prime}% \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}% \DeclareUnicodeCharacter{2111}{\ensuremath\Im}% \DeclareUnicodeCharacter{2113}{\ensuremath\ell}% \DeclareUnicodeCharacter{2118}{\ensuremath\wp}% \DeclareUnicodeCharacter{211C}{\ensuremath\Re}% \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}% \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}% \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}% \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}% \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}% \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}% \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}% \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}% \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}% \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}% \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}% \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}% \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}% \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}% \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}% \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}% \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}% \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}% \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}% \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}% \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}% \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}% \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}% \DeclareUnicodeCharacter{2202}{\ensuremath\partial}% \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}% \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}% \DeclareUnicodeCharacter{2209}{\ensuremath\notin}% \DeclareUnicodeCharacter{220B}{\ensuremath\owns}% \DeclareUnicodeCharacter{220F}{\ensuremath\prod}% \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}% \DeclareUnicodeCharacter{2211}{\ensuremath\sum}% \DeclareUnicodeCharacter{2213}{\ensuremath\mp}% \DeclareUnicodeCharacter{2218}{\ensuremath\circ}% \DeclareUnicodeCharacter{221A}{\ensuremath\surd}% \DeclareUnicodeCharacter{221D}{\ensuremath\propto}% \DeclareUnicodeCharacter{2220}{\ensuremath\angle}% \DeclareUnicodeCharacter{2223}{\ensuremath\mid}% \DeclareUnicodeCharacter{2228}{\ensuremath\vee}% \DeclareUnicodeCharacter{222A}{\ensuremath\cup}% \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}% \DeclareUnicodeCharacter{222E}{\ensuremath\oint}% \DeclareUnicodeCharacter{223C}{\ensuremath\sim}% \DeclareUnicodeCharacter{2240}{\ensuremath\wr}% \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}% \DeclareUnicodeCharacter{2245}{\ensuremath\cong}% \DeclareUnicodeCharacter{2248}{\ensuremath\approx}% \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}% \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}% \DeclareUnicodeCharacter{2260}{\ensuremath\neq}% \DeclareUnicodeCharacter{226A}{\ensuremath\ll}% \DeclareUnicodeCharacter{226B}{\ensuremath\gg}% \DeclareUnicodeCharacter{227A}{\ensuremath\prec}% \DeclareUnicodeCharacter{227B}{\ensuremath\succ}% \DeclareUnicodeCharacter{2283}{\ensuremath\supset}% \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}% \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}% \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}% \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}% \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}% \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}% \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}% \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}% \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}% \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}% \DeclareUnicodeCharacter{2299}{\ensuremath\odot}% \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}% \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}% \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}% \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}% \DeclareUnicodeCharacter{22A8}{\ensuremath\models}% \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}% \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}% \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}% \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}% \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}% \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}% \DeclareUnicodeCharacter{22C6}{\ensuremath\star}% \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}% \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}% \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}% \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}% \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}% \DeclareUnicodeCharacter{2322}{\ensuremath\frown}% \DeclareUnicodeCharacter{2323}{\ensuremath\smile}% % \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}% \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}% \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}% \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}% \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}% \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}% \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}% \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}% \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}% \DeclareUnicodeCharacter{266D}{\ensuremath\flat}% \DeclareUnicodeCharacter{266E}{\ensuremath\natural}% \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}% \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}% \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}% \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}% \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}% \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}% \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}% \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}% \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}% \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}% \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}% \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}% \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}% \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}% \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}% \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}% \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}% \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}% % \global\mathchardef\checkmark="1370% actually the square root sign \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}% }% end of \unicodechardefs % UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command) % It makes the setting that replace UTF-8 byte sequence. \def\utfeightchardefs{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii \unicodechardefs } % Whether the active definitions of non-ASCII characters expand to % non-active tokens with the same character code. This is used to % write characters literally, instead of using active definitions for % printing the correct glyphs. \newif\ifpassthroughchars \passthroughcharsfalse % For native Unicode handling (XeTeX and LuaTeX), % provide a definition macro to replace/pass-through a Unicode character % \def\DeclareUnicodeCharacterNative#1#2{% \ifnum"#1>"7F % only make non-ASCII chars active \catcode"#1=\active \def\dodeclareunicodecharacternative##1##2##3{% \begingroup \uccode`\~="##2\relax \uppercase{\gdef~}{% \ifpassthroughchars ##1% \else ##3% \fi } \endgroup } \begingroup \uccode`\.="#1\relax \uppercase{\def\UTFNativeTmp{.}}% \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}% \endgroup \fi } % Native Unicode handling (XeTeX and LuaTeX) character replacing definition. % It activates the setting that replaces Unicode characters. \def\nativeunicodechardefs{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative \unicodechardefs } % For native Unicode handling (XeTeX and LuaTeX), % make the character token expand % to the sequences given in \unicodechardefs for printing. \def\DeclareUnicodeCharacterNativeAtU#1#2{% \def\UTFAtUTmp{#2} \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp } % @U command definitions for native Unicode handling (XeTeX and LuaTeX). \def\nativeunicodechardefsatu{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU \unicodechardefs } % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Define all Unicode characters we know about \iftxinativeunicodecapable \nativeunicodechardefsatu \else \utfeightchardefs \fi \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \txipageheight = \vsize % \hsize = #2\relax \txipagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \else \ifx\XeTeXrevision\thisisundefined \special{papersize=#8,#7}% \else \pdfpageheight #7\relax \pdfpagewidth #8\relax % XeTeX does not have \pdfhorigin and \pdfvorigin. \fi \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{-11.4mm}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} \def\bsixpaper{{\globaldefs = 1 \afourpaper \internalpagesizes{140mm}{100mm}% {-6.35mm}{-12.7mm}% {\bindingoffset}{14pt}% {176mm}{125mm}% \let\SETdispenvsize=\smallword \lispnarrowing = 0.2in \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by 2.5in % default 1in margin above heading line % and 1.5in to include heading, footing and % bottom margin % \dimen2 = \hsize \advance\dimen2 by 2in % default to 1 inch margin on each side % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper % Default value of \hfuzz, for suppressing warnings about overfull hboxes. \hfuzz = 1pt \message{microtype,} % protrusion, from Thanh's protcode.tex. \def\mtsetprotcode#1{% \rpcode#1`\!=200 \rpcode#1`\,=700 \rpcode#1`\-=700 \rpcode#1`\.=700 \rpcode#1`\;=500 \rpcode#1`\:=500 \rpcode#1`\?=200 \rpcode#1`\'=700 \rpcode#1 34=500 % '' \rpcode#1 123=300 % -- \rpcode#1 124=200 % --- \rpcode#1`\)=50 \rpcode#1`\A=50 \rpcode#1`\F=50 \rpcode#1`\K=50 \rpcode#1`\L=50 \rpcode#1`\T=50 \rpcode#1`\V=50 \rpcode#1`\W=50 \rpcode#1`\X=50 \rpcode#1`\Y=50 \rpcode#1`\k=50 \rpcode#1`\r=50 \rpcode#1`\t=50 \rpcode#1`\v=50 \rpcode#1`\w=50 \rpcode#1`\x=50 \rpcode#1`\y=50 % \lpcode#1`\`=700 \lpcode#1 92=500 % `` \lpcode#1`\(=50 \lpcode#1`\A=50 \lpcode#1`\J=50 \lpcode#1`\T=50 \lpcode#1`\V=50 \lpcode#1`\W=50 \lpcode#1`\X=50 \lpcode#1`\Y=50 \lpcode#1`\v=50 \lpcode#1`\w=50 \lpcode#1`\x=50 \lpcode#1`\y=0 % \mtadjustprotcode#1\relax } \newcount\countC \def\mtadjustprotcode#1{% \countC=0 \loop \ifcase\lpcode#1\countC\else \mtadjustcp\lpcode#1\countC \fi \ifcase\rpcode#1\countC\else \mtadjustcp\rpcode#1\countC \fi \advance\countC 1 \ifnum\countC < 256 \repeat } \newcount\countB \def\mtadjustcp#1#2#3{% \setbox\boxA=\hbox{% \ifx#2\font\else#2\fi \char#3}% \countB=\wd\boxA \multiply\countB #1#2#3\relax \divide\countB \fontdimen6 #2\relax #1#2#3=\countB\relax } \ifx\XeTeXrevision\thisisundefined \ifx\luatexversion\thisisundefined \ifpdf % pdfTeX \mtsetprotcode\textrm \def\mtfontexpand#1{\pdffontexpand#1 20 20 1 autoexpand\relax} \else % TeX \def\mtfontexpand#1{} \fi \else % LuaTeX \mtsetprotcode\textrm \def\mtfontexpand#1{\expandglyphsinfont#1 20 20 1\relax} \fi \else % XeTeX \mtsetprotcode\textrm \def\mtfontexpand#1{} \fi \newif\ifmicrotype \def\microtypeON{% \microtypetrue % \ifx\XeTeXrevision\thisisundefined \ifx\luatexversion\thisisundefined \ifpdf % pdfTeX \pdfadjustspacing=2 \pdfprotrudechars=2 \fi \else % LuaTeX \adjustspacing=2 \protrudechars=2 \fi \else % XeTeX \XeTeXprotrudechars=2 \fi % \mtfontexpand\textrm \mtfontexpand\textsl \mtfontexpand\textbf } \def\microtypeOFF{% \microtypefalse % \ifx\XeTeXrevision\thisisundefined \ifx\luatexversion\thisisundefined \ifpdf % pdfTeX \pdfadjustspacing=0 \pdfprotrudechars=0 \fi \else % LuaTeX \adjustspacing=0 \protrudechars=0 \fi \else % XeTeX \XeTeXprotrudechars=0 \fi } \microtypeOFF \parseargdef\microtype{% \def\txiarg{#1}% \ifx\txiarg\onword \microtypeON \else\ifx\txiarg\offword \microtypeOFF \else \errhelp = \EMsimple \errmessage{Unknown @microtype option `\txiarg', must be on|off}% \fi\fi } \message{and turning on texinfo input format.} % Make UTF-8 the default encoding. \documentencodingzzz{UTF-8} \def^^L{\par} % remove \outer, so ^L can appear in an @comment \catcode`\^^K = 10 % treat vertical tab as whitespace % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % Set catcodes for Texinfo file % Active characters for printing the wanted glyph. % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. % \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde \chardef\hatchar=`\^ \catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \let\realunder=_ \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless \chardef \gtr=`\> \catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix \catcode`\-=\active \let-=\normaldash % used for headline/footline in the output routine, in case the page % breaks in the middle of an @tex block. \def\texinfochars{% \let< = \activeless \let> = \activegtr \let~ = \activetilde \let^ = \activehat \setregularquotes \let\b = \strong \let\i = \smartitalic % in principle, all other definitions in \tex have to be undone too. } % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \passthroughcharstrue \let-=\normaldash \let"=\normaldoublequote \let$=\normaldollar %$ font-lock fix \let+=\normalplus \let<=\normalless \let>=\normalgreater \let^=\normalcaret \let_=\normalunderscore \let|=\normalverticalbar \let~=\normaltilde \otherbackslash \setregularquotes \unsepspaces } % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \loadconf turn them back on. \catcode`+=\other \catcode`\_=\other % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ % Print a typewriter backslash. For math mode, we can't simply use % \backslashcurfont: the story here is that in math mode, the \char % of \backslashcurfont ends up printing the roman \ from the math symbol % font (because \char in math mode uses the \mathcode, and plain.tex % sets \mathcode`\\="026E). Hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. \def\ttbackslash{{\tt \ifmmode \mathchar29020 \else \backslashcurfont \fi}} \let\backslashchar = \ttbackslash % \backslashchar{} is for user documents. % These are made active for url-breaking, so need % active definitions as the normal characters. \def\normaldot{.} \def\normalquest{?} \def\normalslash{/} % \newlinesloadsconf - call \loadconf as soon as possible in the % file, e.g. at the first newline. % {\catcode`\^=7 \catcode`\^^M=13 \gdef\newlineloadsconf{% \catcode`\^^M=13 % \newlineloadsconfzz% } \gdef\newlineloadsconfzz#1^^M{% \def\c{\loadconf\c}% % Definition for the first newline read in the file \def ^^M{\loadconf}% % In case the first line has a whole-line or environment command on it \let\originalparsearg\parsearg% \def\parsearg{\loadconf\originalparsearg}% % % \startenvironment is in the expansion of commands defined with \envdef \let\originalstartenvironment\startenvironment% \def\startenvironment{\loadconf\startenvironment}% }} % Emergency active definition of newline, in case an active newline token % appears by mistake. {\catcode`\^=7 \catcode13=13% \gdef\enableemergencynewline{% \gdef^^M{% \par% %\par% }}} % \loadconf gets called at the beginning of every Texinfo file. % If texinfo.cnf is present on the system, read it. Useful for site-wide % @afourpaper, etc. Not opening texinfo.cnf directly in texinfo.tex % makes it possible to make a format file for Texinfo. % \gdef\loadconf{% \relax % Terminate the filename if running as "tex '&texinfo' FILE.texi". % % Turn off the definitions that trigger \loadconf \everyjobreset \catcode13=5 % regular end of line \enableemergencynewline \let\c=\comment \let\parsearg\originalparsearg \let\startenvironment\originalstartenvironment % % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. \catcode`+=\active \catcode`\_=\active % \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 } % Redefine some control sequences to be controlled by the \ifdummies % and \ifindexnofonts switches. Do this at the end so that the control % sequences are all defined. \definedummies \catcode`\@=0 % \realbackslash is an actual character `\' with catcode other. {\catcode`\\=\other @gdef@realbackslash{\}} % In Texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. @let\ = @ttbackslash % If in a .fmt file, print the version number. % \eatinput stops the `\input texinfo' from showing up. % After that, `\' should revert to printing a backslash. % Turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. % @everyjob{@message{[Texinfo version @texinfoversion]}% @global@let\ = @eatinput @catcode`+=@active @catcode`@_=@active} {@catcode`@^=7 @catcode`@^^M=13% @gdef@eatinput input texinfo#1^^M{@loadconf}} @def@everyjobreset{@ifx\@eatinput @let\ = @ttbackslash @fi} % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % {@catcode`- = @active @gdef@normalturnoffactive{% @turnoffactive @let\=@ttbackslash } } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @c Local variables: @c eval: (add-hook 'before-save-hook 'time-stamp nil t) @c time-stamp-pattern: "texinfoversion{%Y-%02m-%02d.%02H}" @c page-delimiter: "^\\\\message" @c End: @newlineloadsconf gnuastro-0.22/bootstrapped/build-aux/gendocs.sh0000755000175000017500000004516614557510504015363 #!/bin/sh -e # gendocs.sh -- generate a GNU manual in many formats. This script is # mentioned in maintain.texi. See the help message below for usage details. scriptversion=2024-01-27.16 # Copyright 2003-2024 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Original author: Mohit Agarwal. # Send bug reports and any other correspondence to bug-gnulib@gnu.org. # # The latest version of this script, and the companion template, is # available from the Gnulib repository: # # https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh # https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template # TODO: # - image importing was only implemented for HTML generated by # makeinfo. But it should be simple enough to adjust. # - images are not imported in the source tarball. All the needed # formats (PDF, PNG, etc.) should be included. prog=`basename "$0"` srcdir=`pwd` scripturl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/gendocs.sh" templateurl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/gendocs_template" : "${SETLANG="env LANG= LC_TIME= LC_MESSAGES= LC_ALL= LANGUAGE="}" : "${MAKEINFO="makeinfo"}" : "${TEXI2DVI="texi2dvi"}" : "${DOCBOOK2HTML="docbook2html"}" : "${DOCBOOK2PDF="docbook2pdf"}" : "${DOCBOOK2TXT="docbook2txt"}" : "${GENDOCS_TEMPLATE_DIR="."}" : "${PERL="perl"}" : "${TEXI2HTML="texi2html"}" unset CDPATH unset use_texi2html MANUAL_TITLE= PACKAGE= EMAIL=webmasters@gnu.org # please override with --email commonarg= # passed to all makeinfo/texi2html invocations. dirargs= # passed to all tools (-I dir). dirs= # -I directories. htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual" default_htmlarg=true infoarg=--no-split generate_ascii=true generate_html=true generate_info=true generate_tex=true outdir=manual unset source_extra split=node srcfile= texarg="-t @finalout" version="gendocs.sh $scriptversion Copyright 2024 Free Software Foundation, Inc. There is NO warranty. You may redistribute this software under the terms of the GNU General Public License. For more information about these matters, see the files named COPYING." usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE Generate output in various formats from PACKAGE.texinfo (or .texi or .txi) source. See the GNU Maintainers document for a more extensive discussion: https://www.gnu.org/prep/maintain_toc.html Options: --email ADR use ADR as contact in generated web pages; always give this. -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi} -o OUTDIR write files into OUTDIR, instead of manual/. -I DIR append DIR to the Texinfo search path. --common ARG pass ARG in all invocations. --html ARG pass ARG to makeinfo or texi2html for HTML targets, instead of '$htmlarg'. --info ARG pass ARG to makeinfo for Info, instead of --no-split. --no-ascii skip generating the plain text output. --no-html skip generating the html output. --no-info skip generating the info output. --no-tex skip generating the dvi and pdf output. --source ARG include ARG in tar archive of sources. --split HOW make split HTML by node, section, chapter; default node. --tex ARG pass ARG to texi2dvi for DVI and PDF, instead of -t @finalout. --texi2html use texi2html to make HTML target, with all split versions. --docbook convert through DocBook too (xml, txt, html, pdf). --help display this help and exit successfully. --version display version information and exit successfully. Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\" Typical sequence: cd PACKAGESOURCE/doc wget \"$scripturl\" wget \"$templateurl\" $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\" Output will be in a new subdirectory \"manual\" (by default; use -o OUTDIR to override). Move all the new files into your web CVS tree, as explained in the Web Pages node of maintain.texi. Please use the --email ADDRESS option so your own bug-reporting address will be used in the generated HTML pages. MANUAL-TITLE is included as part of the HTML of the overall manual/index.html file. It should include the name of the package being documented. manual/index.html is created by substitution from the file $GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the generic template for your own purposes.) If you have several manuals, you'll need to run this script several times with different MANUAL values, specifying a different output directory with -o each time. Then write (by hand) an overall index.html with links to them all. If a manual's Texinfo sources are spread across several directories, first copy or symlink all Texinfo sources into a single directory. (Part of the script's work is to make a tar.gz of the sources.) As implied above, by default monolithic Info files are generated. If you want split Info, or other Info options, use --info to override. You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, and PERL to control the programs that get executed, and GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is looked for. With --docbook, the environment variables DOCBOOK2HTML, DOCBOOK2PDF, and DOCBOOK2TXT are also consulted. By default, makeinfo and texi2dvi are run in the default (English) locale, since that's the language of most Texinfo manuals. If you happen to have a non-English manual and non-English web site, see the SETLANG setting in the source. Email bug reports or enhancement requests to bug-gnulib@gnu.org. " while test $# -gt 0; do case $1 in -s) shift; srcfile=$1;; -o) shift; outdir=$1;; -I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";; --common) shift; commonarg=$1;; --docbook) docbook=yes;; --email) shift; EMAIL=$1;; --html) shift; default_htmlarg=false; htmlarg=$1;; --info) shift; infoarg=$1;; --no-ascii) generate_ascii=false;; --no-html) generate_html=false;; --no-info) generate_info=false;; --no-tex) generate_tex=false;; --source) shift; source_extra=$1;; --split) shift; split=$1;; --tex) shift; texarg=$1;; --texi2html) use_texi2html=1;; --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; -*) echo "$0: Unknown option \`$1'." >&2 echo "$0: Try \`--help' for more information." >&2 exit 1;; *) if test -z "$PACKAGE"; then PACKAGE=$1 elif test -z "$MANUAL_TITLE"; then MANUAL_TITLE=$1 else echo "$0: extra non-option argument \`$1'." >&2 exit 1 fi;; esac shift done # makeinfo uses the dirargs, but texi2dvi doesn't. commonarg=" $dirargs $commonarg" # For most of the following, the base name is just $PACKAGE base=$PACKAGE if $default_htmlarg && test -n "$use_texi2html"; then # The legacy texi2html doesn't support TOP_NODE_UP_URL htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css" fi if test -n "$srcfile"; then # but here, we use the basename of $srcfile base=`basename "$srcfile"` case $base in *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;; esac PACKAGE=$base elif test -s "$srcdir/$PACKAGE.texinfo"; then srcfile=$srcdir/$PACKAGE.texinfo elif test -s "$srcdir/$PACKAGE.texi"; then srcfile=$srcdir/$PACKAGE.texi elif test -s "$srcdir/$PACKAGE.txi"; then srcfile=$srcdir/$PACKAGE.txi else echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2 exit 1 fi if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2 echo "$0: it is available from $templateurl." >&2 exit 1 fi # Function to return size of $1 in something resembling kilobytes. calcsize() { size=`ls -ksl $1 | awk '{print $1}'` echo $size } # copy_images OUTDIR HTML-FILE... # ------------------------------- # Copy all the images needed by the HTML-FILEs into OUTDIR. # Look for them in . and the -I directories; this is simpler than what # makeinfo supports with -I, but hopefully it will suffice. copy_images() { local odir odir=$1 shift $PERL -n -e " BEGIN { \$me = '$prog'; \$odir = '$odir'; @dirs = qw(. $dirs); } " -e ' /<img src="(.*?)"/g && ++$need{$1}; END { #print "$me: @{[keys %need]}\n"; # for debugging, show images found. FILE: for my $f (keys %need) { for my $d (@dirs) { if (-f "$d/$f") { use File::Basename; my $dest = dirname ("$odir/$f"); # use File::Path; -d $dest || mkpath ($dest) || die "$me: cannot mkdir $dest: $!\n"; # use File::Copy; copy ("$d/$f", $dest) || die "$me: cannot copy $d/$f to $dest: $!\n"; next FILE; } } die "$me: $ARGV: cannot find image $f\n"; } } ' -- "$@" || exit 1 } case $outdir in /*) abs_outdir=$outdir;; *) abs_outdir=$srcdir/$outdir;; esac echo "Making output for $srcfile" echo " in `pwd`" mkdir -p "$outdir/" # if $generate_info; then cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\"" echo "Generating info... ($cmd)" rm -f $PACKAGE.info* # get rid of any strays eval "$cmd" tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info* ls -l "$outdir/$PACKAGE.info.tar.gz" info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"` # do not mv the info files, there's no point in having them available # separately on the web. fi # end info # if $generate_tex; then cmd="$SETLANG $TEXI2DVI $dirargs $texarg \"$srcfile\"" printf "\nGenerating dvi... (%s)\n" "$cmd" eval "$cmd" # compress/finish dvi: gzip -f -9 $PACKAGE.dvi dvi_gz_size=`calcsize $PACKAGE.dvi.gz` mv $PACKAGE.dvi.gz "$outdir/" ls -l "$outdir/$PACKAGE.dvi.gz" cmd="$SETLANG $TEXI2DVI --pdf $dirargs $texarg \"$srcfile\"" printf "\nGenerating pdf... (%s)\n" "$cmd" eval "$cmd" pdf_size=`calcsize $PACKAGE.pdf` mv $PACKAGE.pdf "$outdir/" ls -l "$outdir/$PACKAGE.pdf" fi # end tex (dvi + pdf) # if $generate_ascii; then opt="-o $PACKAGE.txt --no-split --no-headers $commonarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating ascii... (%s)\n" "$cmd" eval "$cmd" ascii_size=`calcsize $PACKAGE.txt` gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz" ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"` mv $PACKAGE.txt "$outdir/" ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz" fi # if $generate_html; then # Split HTML at level $1. Used for texi2html. html_split() { opt="--split=$1 --node-files $commonarg $htmlarg" cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\"" printf "\nGenerating html by %s... (%s)\n" "$1" "$cmd" eval "$cmd" split_html_dir=$PACKAGE.html ( cd ${split_html_dir} || exit 1 ln -sf ${PACKAGE}.html index.html tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html ) eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"` rm -f "$outdir"/html_$1/*.html mkdir -p "$outdir/html_$1/" mv ${split_html_dir}/*.html "$outdir/html_$1/" rmdir ${split_html_dir} } if test -z "$use_texi2html"; then opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating monolithic html... (%s)\n" "$cmd" rm -rf $PACKAGE.html # in case a directory is left over eval "$cmd" html_mono_size=`calcsize $PACKAGE.html` gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` copy_images "$outdir/" $PACKAGE.html mv $PACKAGE.html "$outdir/" ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz" # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option, # it just always split by node. So if we're splitting by node anyway, # leave it out. if test "x$split" = xnode; then split_arg= else split_arg=--split=$split fi # opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating html by %s... (%s)\n" "$split" "$cmd" eval "$cmd" split_html_dir=$PACKAGE.html copy_images $split_html_dir/ $split_html_dir/*.html ( cd $split_html_dir || exit 1 tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- * ) eval \ html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"` rm -rf "$outdir/html_$split/" mv $split_html_dir "$outdir/html_$split/" du -s "$outdir/html_$split/" ls -l "$outdir/$PACKAGE.html_$split.tar.gz" else # use texi2html: opt="--output $PACKAGE.html $commonarg $htmlarg" cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\"" printf "\nGenerating monolithic html with texi2html... (%s)\n" "$cmd" rm -rf $PACKAGE.html # in case a directory is left over eval "$cmd" html_mono_size=`calcsize $PACKAGE.html` gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` mv $PACKAGE.html "$outdir/" html_split node html_split chapter html_split section fi fi # end html # printf "\nMaking .tar.gz for sources...\n" d=`dirname $srcfile` ( cd "$d" || exit # Set PATS to a list of globbing patterns that expand to # file names to be put into the .tar.gz for sources. # Omit patterns that do not expand to file names. pats= if case `$MAKEINFO --version | sed -e 's/^[^0-9]*//' -e 1q` in \ [1-6]* | 7.[01]*) false;; \ *) true;; \ esac \ ; then for pat in '*.eps'; do for file in $pat; do test "$file" = "$pat" && test ! -e "$file" || pats="$pats $pat" break done done # if $MAKEINFO is recent enough, use --trace-includes on the # $srcfile to get the included files of the targetted manual only base=`basename "$srcfile"` cmd="$SETLANG $MAKEINFO $commonarg --trace-includes \"$base\"" eval "$cmd" \ | tar -czhf "$abs_outdir/$PACKAGE.texi.tar.gz" \ --verbatim-files-from -T- -- "$base" $pats \ ${source_extra+"$source_extra"} \ && ls -l "$abs_outdir/$PACKAGE.texi.tar.gz" else for pat in '*.texinfo' '*.texi' '*.txi' '*.eps'; do for file in $pat; do test "$file" = "$pat" && test ! -e "$file" || pats="$pats $pat" break done done tar -czhf "$abs_outdir/$PACKAGE.texi.tar.gz" \ -- $pats ${source_extra+"$source_extra"} \ && ls -l "$abs_outdir/$PACKAGE.texi.tar.gz" fi ) || exit texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"` # # Do everything again through docbook. if test -n "$docbook"; then opt="-o - --docbook $commonarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml" printf "\nGenerating docbook XML... (%s)\n" "$cmd" eval "$cmd" docbook_xml_size=`calcsize $PACKAGE-db.xml` gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz" docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"` mv $PACKAGE-db.xml "$outdir/" split_html_db_dir=html_node_db opt="$commonarg -o $split_html_db_dir" cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook HTML... (%s)\n" "$cmd" eval "$cmd" ( cd ${split_html_db_dir} || exit 1 tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html ) html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"` rm -f "$outdir"/html_node_db/*.html mkdir -p "$outdir/html_node_db" mv ${split_html_db_dir}/*.html "$outdir/html_node_db/" rmdir ${split_html_db_dir} cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook ASCII... (%s)\n" "$cmd" eval "$cmd" docbook_ascii_size=`calcsize $PACKAGE-db.txt` mv $PACKAGE-db.txt "$outdir/" cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook PDF... (%s)\n" "$cmd" eval "$cmd" docbook_pdf_size=`calcsize $PACKAGE-db.pdf` mv $PACKAGE-db.pdf "$outdir/" fi # printf "\nMaking index.html for %s...\n" "$PACKAGE" if test -z "$use_texi2html"; then if test x$split = xnode; then CONDS="/%%IF *HTML_NODE%%/d;/%%ENDIF *HTML_NODE%%/d;\ /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d;\ /%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;" elif test x$split = xchapter; then CONDS="/%%IF *HTML_CHAPTER%%/d;/%%ENDIF *HTML_CHAPTER%%/d;\ /%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\ /%%IF *HTML_NODE%%/,/%%ENDIF *HTML_NODE%%/d;" elif test x$split = xsection; then CONDS="/%%IF *HTML_SECTION%%/d;/%%ENDIF *HTML_SECTION%%/d;\ /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d;\ /%%IF *HTML_NODE%%/,/%%ENDIF *HTML_NODE%%/d;" else CONDS="/%%IF.*%%/d;/%%ENDIF.*%%/d;" # invalid split argument fi else # for texi2html, we do not take account of --split and simply output # all variants CONDS="/%%IF.*%%/d;/%%ENDIF.*%%/d;" fi curdate=`$SETLANG date '+%B %d, %Y'` sed \ -e "s!%%TITLE%%!$MANUAL_TITLE!g" \ -e "s!%%EMAIL%%!$EMAIL!g" \ -e "s!%%PACKAGE%%!$PACKAGE!g" \ -e "s!%%DATE%%!$curdate!g" \ -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \ -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \ -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \ -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \ -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \ -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \ -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \ -e "s!%%PDF_SIZE%%!$pdf_size!g" \ -e "s!%%ASCII_SIZE%%!$ascii_size!g" \ -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \ -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \ -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \ -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \ -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \ -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \ -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \ -e "s,%%SCRIPTURL%%,$scripturl,g" \ -e "s!%%SCRIPTNAME%%!$prog!g" \ -e "$CONDS" \ $GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html" echo "Done, see $outdir/ subdirectory for new files." # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/build-aux/git-version-gen������������������������������������������������0000755�0001750�0001750�00000017640�14557510504�016341� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Print a version string. scriptversion=2022-07-09.08; # UTC # Copyright (C) 2007-2024 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # This script is derived from GIT-VERSION-GEN from GIT: https://git-scm.com/. # It may be run two ways: # - from a git repository in which the "git describe" command below # produces useful output (thus requiring at least one signed tag) # - from a non-git-repo directory containing a .tarball-version file, which # presumes this script is invoked like "./git-version-gen .tarball-version". # In order to use intra-version strings in your project, you will need two # separate generated version string files: # # .tarball-version - present only in a distribution tarball, and not in # a checked-out repository. Created with contents that were learned at # the last time autoconf was run, and used by git-version-gen. Must not # be present in either $(srcdir) or $(builddir) for git-version-gen to # give accurate answers during normal development with a checked out tree, # but must be present in a tarball when there is no version control system. # Therefore, it cannot be used in any dependencies. GNUmakefile has # hooks to force a reconfigure at distribution time to get the value # correct, without penalizing normal development with extra reconfigures. # # .version - present in a checked-out repository and in a distribution # tarball. Usable in dependencies, particularly for files that don't # want to depend on config.h but do want to track version changes. # Delete this file prior to any autoconf run where you want to rebuild # files to pick up a version string change; and leave it stale to # minimize rebuild time after unrelated changes to configure sources. # # As with any generated file in a VC'd directory, you should add # /.version to .gitignore, so that you don't accidentally commit it. # .tarball-version is never generated in a VC'd directory, so needn't # be listed there. # # Use the following line in your configure.ac, so that $(VERSION) will # automatically be up-to-date each time configure is run (and note that # since configure.ac no longer includes a version string, Makefile rules # should not depend on configure.ac for version updates). # # AC_INIT([GNU project], # m4_esyscmd([build-aux/git-version-gen .tarball-version]), # [bug-project@example]) # # Then use the following lines in your Makefile.am, so that .version # will be present for dependencies, and so that .version and # .tarball-version will exist in distribution tarballs. # # EXTRA_DIST = $(top_srcdir)/.version # BUILT_SOURCES = $(top_srcdir)/.version # $(top_srcdir)/.version: # echo '$(VERSION)' > $@-t # mv $@-t $@ # dist-hook: # echo '$(VERSION)' > $(distdir)/.tarball-version me=$0 year=`expr "$scriptversion" : '\([^-]*\)'` version="git-version-gen $scriptversion Copyright (C) ${year} Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law." usage="\ Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT] Print a version string. Options: --prefix PREFIX prefix of git tags (default 'v') --fallback VERSION fallback version to use if \"git --version\" fails --help display this help and exit --version output version information and exit Send patches and bug reports to <bug-gnulib@gnu.org>." prefix=v fallback= while test $# -gt 0; do case $1 in --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; --prefix) shift; prefix=${1?};; --fallback) shift; fallback=${1?};; -*) echo "$0: Unknown option '$1'." >&2 echo "$0: Try '--help' for more information." >&2 exit 1;; *) if test "x$tarball_version_file" = x; then tarball_version_file="$1" elif test "x$tag_sed_script" = x; then tag_sed_script="$1" else echo "$0: extra non-option argument '$1'." >&2 exit 1 fi;; esac shift done if test "x$tarball_version_file" = x; then echo "$usage" exit 1 fi tag_sed_script="${tag_sed_script:-s/x/x/}" nl=' ' # Avoid meddling by environment variable of the same name. v= v_from_git= # First see if there is a tarball-only version file. # then try "git describe", then default. if test -f $tarball_version_file then v=`cat $tarball_version_file` || v= case $v in *$nl*) v= ;; # reject multi-line output esac test "x$v" = x \ && echo "$0: WARNING: $tarball_version_file is damaged" 1>&2 fi if test "x$v" != x then : # use $v # Otherwise, if there is at least one git commit involving the working # directory, and "git describe" output looks sensible, use that to # derive a version string. elif test "`git log -1 --pretty=format:x . 2>&1`" = x \ && v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \ || git describe --abbrev=4 HEAD 2>/dev/null` \ && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \ && case $v in $prefix[0-9]*) ;; *) (exit 1) ;; esac then # Is this a new git that lists number of commits since the last # tag or the previous older version that did not? # Newer: v6.10-77-g0f8faeb # Older: v6.10-g0f8faeb vprefix=`expr "X$v" : 'X\(.*\)-g[^-]*$'` || vprefix=$v case $vprefix in *-*) : git describe is probably okay three part flavor ;; *) : git describe is older two part flavor # Recreate the number of commits and rewrite such that the # result is the same as if we were using the newer version # of git describe. vtag=`echo "$v" | sed 's/-.*//'` commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \ || { commit_list=failed; echo "$0: WARNING: git rev-list failed" 1>&2; } numcommits=`echo "$commit_list" | wc -l` v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`; test "$commit_list" = failed && v=UNKNOWN ;; esac # Change the penultimate "-" to ".", for version-comparing tools. # Remove the "g" to save a byte. v=`echo "$v" | sed 's/-\([^-]*\)-g\([^-]*\)$/.\1-\2/'`; v_from_git=1 elif test "x$fallback" = x || git --version >/dev/null 2>&1; then v=UNKNOWN else v=$fallback fi v=`echo "$v" |sed "s/^$prefix//"` # Test whether to append the "-dirty" suffix only if the version # string we're using came from git. I.e., skip the test if it's "UNKNOWN" # or if it came from .tarball-version. if test "x$v_from_git" != x; then # Don't declare a version "dirty" merely because a timestamp has changed. git update-index --refresh > /dev/null 2>&1 dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty= case "$dirty" in '') ;; *) # Append the suffix only if there isn't one already. case $v in *-dirty) ;; *) v="$v-dirty" ;; esac ;; esac fi # Omit the trailing newline, so that m4_esyscmd can use the result directly. printf %s "$v" # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/build-aux/test-driver����������������������������������������������������0000755�0001750�0001750�00000011417�14557510613�015571� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2018-03-07.03; # UTC # Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <<END Usage: test-driver --test-name NAME --log-file PATH --trs-file PATH [--expect-failure {yes|no}] [--color-tests {yes|no}] [--enable-hard-errors {yes|no}] [--] TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS] The '--test-name', '--log-file' and '--trs-file' options are mandatory. See the GNU Automake documentation for information. END } test_name= # Used for reporting. log_file= # Where to save the output of the test script. trs_file= # Where to save the metadata of the test run. expect_failure=no color_tests=no enable_hard_errors=yes while test $# -gt 0; do case $1 in --help) print_usage; exit $?;; --version) echo "test-driver $scriptversion"; exit $?;; --test-name) test_name=$2; shift;; --log-file) log_file=$2; shift;; --trs-file) trs_file=$2; shift;; --color-tests) color_tests=$2; shift;; --expect-failure) expect_failure=$2; shift;; --enable-hard-errors) enable_hard_errors=$2; shift;; --) shift; break;; -*) usage_error "invalid option: '$1'";; *) break;; esac shift done missing_opts= test x"$test_name" = x && missing_opts="$missing_opts --test-name" test x"$log_file" = x && missing_opts="$missing_opts --log-file" test x"$trs_file" = x && missing_opts="$missing_opts --trs-file" if test x"$missing_opts" != x; then usage_error "the following mandatory options are missing:$missing_opts" fi if test $# -eq 0; then usage_error "missing argument" fi if test $color_tests = yes; then # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'. red='' # Red. grn='' # Green. lgn='' # Light green. blu='' # Blue. mgn='' # Magenta. std='' # No color. else red= grn= lgn= blu= mgn= std= fi do_exit='rm -f $log_file $trs_file; (exit $st); exit $st' trap "st=129; $do_exit" 1 trap "st=130; $do_exit" 2 trap "st=141; $do_exit" 13 trap "st=143; $do_exit" 15 # Test script is run here. We create the file first, then append to it, # to ameliorate tests themselves also writing to the log file. Our tests # don't, but others can (automake bug#35762). : >"$log_file" "$@" >>"$log_file" 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>"$log_file" # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/����������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514177�012106� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/00gnulib.m4�����������������������������������������������������������0000644�0001750�0001750�00000007015�14557510505�013702� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 00gnulib.m4 serial 9 dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This file must be named something that sorts before all other dnl gnulib-provided .m4 files. It is needed until the clang fix has dnl been included in Autoconf. # The following definitions arrange to use a compiler option # -Werror=implicit-function-declaration in AC_CHECK_DECL, when the # compiler is clang. Without it, clang implicitly declares "known" # library functions in C mode, but not in C++ mode, which would cause # Gnulib to omit a declaration and thus later produce an error in C++ # mode. As of clang 9.0, these "known" functions are identified through # LIBBUILTIN invocations in the LLVM source file # llvm/tools/clang/include/clang/Basic/Builtins.def. # It's not possible to AC_REQUIRE the extra tests from AC_CHECK_DECL, # because AC_CHECK_DECL, like other Autoconf built-ins, is not supposed # to AC_REQUIRE anything: some configure.ac files have their first # AC_CHECK_DECL executed conditionally. Therefore append the extra tests # to AC_PROG_CC. AC_DEFUN([gl_COMPILER_CLANG], [ dnl AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([whether the compiler is clang], [gl_cv_compiler_clang], [dnl Use _AC_COMPILE_IFELSE instead of AC_EGREP_CPP, to avoid error dnl "circular dependency of AC_LANG_COMPILER(C)" if AC_PROG_CC has dnl not yet been invoked. _AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #ifdef __clang__ barfbarf #endif ]],[[]]) ], [gl_cv_compiler_clang=no], [gl_cv_compiler_clang=yes]) ]) ]) AC_DEFUN([gl_COMPILER_PREPARE_CHECK_DECL], [ dnl AC_REQUIRE([AC_PROG_CC]) dnl AC_REQUIRE([gl_COMPILER_CLANG]) AC_CACHE_CHECK([for compiler option needed when checking for declarations], [gl_cv_compiler_check_decl_option], [if test $gl_cv_compiler_clang = yes; then dnl Test whether the compiler supports the option dnl '-Werror=implicit-function-declaration'. saved_ac_compile="$ac_compile" ac_compile="$ac_compile -Werror=implicit-function-declaration" dnl Use _AC_COMPILE_IFELSE instead of AC_COMPILE_IFELSE, to avoid a dnl warning "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". _AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])], [gl_cv_compiler_check_decl_option='-Werror=implicit-function-declaration'], [gl_cv_compiler_check_decl_option=none]) ac_compile="$saved_ac_compile" else gl_cv_compiler_check_decl_option=none fi ]) if test "x$gl_cv_compiler_check_decl_option" != xnone; then ac_compile_for_check_decl="$ac_compile $gl_cv_compiler_check_decl_option" else ac_compile_for_check_decl="$ac_compile" fi ]) dnl Redefine _AC_CHECK_DECL_BODY so that it references ac_compile_for_check_decl dnl instead of ac_compile. If, for whatever reason, the override of AC_PROG_CC dnl in zzgnulib.m4 is inactive, use the original ac_compile. m4_define([_AC_CHECK_DECL_BODY], [ ac_saved_ac_compile="$ac_compile" if test -n "$ac_compile_for_check_decl"; then ac_compile="$ac_compile_for_check_decl" fi] m4_defn([_AC_CHECK_DECL_BODY])[ ac_compile="$ac_saved_ac_compile" ]) # gl_00GNULIB # ----------- # Witness macro that this file has been included. Needed to force # Automake to include this file prior to all other gnulib .m4 files. AC_DEFUN([gl_00GNULIB]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/__inline.m4�����������������������������������������������������������0000644�0001750�0001750�00000001423�14557510505�014033� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Test for __inline keyword dnl Copyright 2017-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl___INLINE], [ AC_CACHE_CHECK([whether the compiler supports the __inline keyword], [gl_cv_c___inline], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[typedef int foo_t; static __inline foo_t foo (void) { return 0; }]], [[return foo ();]])], [gl_cv_c___inline=yes], [gl_cv_c___inline=no])]) if test $gl_cv_c___inline = yes; then AC_DEFINE([HAVE___INLINE], [1], [Define to 1 if the compiler supports the keyword '__inline'.]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/absolute-header.m4����������������������������������������������������0000644�0001750�0001750�00000010164�14557510505�015325� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# absolute-header.m4 serial 18 dnl Copyright (C) 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Derek Price. # gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) # --------------------------------------- # Find the absolute name of a header file, testing first if the header exists. # If the header were sys/inttypes.h, this macro would define # ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h # in config.h # (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. AC_DEFUN([gl_ABSOLUTE_HEADER], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PREPROC_REQUIRE()dnl m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_absolute_header], [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], [gl_absolute_header], [AS_VAR_PUSHDEF([ac_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl if test AS_VAR_GET([ac_header_exists]) = yes; then gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) fi AS_VAR_POPDEF([ac_header_exists])dnl ])dnl AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), ["AS_VAR_GET([gl_absolute_header])"], [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.]) AS_VAR_POPDEF([gl_absolute_header])dnl ])dnl ])# gl_ABSOLUTE_HEADER # gl_ABSOLUTE_HEADER_ONE(HEADER) # ------------------------------ # Like gl_ABSOLUTE_HEADER, except that: # - it assumes that the header exists, # - it uses the current CPPFLAGS, # - it does not cache the result, # - it is silent. AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) dnl AIX "xlc -E" and "cc -E" omit #line directives for header files dnl that contain only a #include of other header files and no dnl non-comment tokens of their own. This leads to a failure to dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h> dnl and others. The workaround is to force preservation of comments dnl through option -C. This ensures all necessary #line directives dnl are present. GCC supports option -C as well. case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac changequote(,) case "$host_os" in mingw* | windows*) dnl For the sake of native Windows compilers (excluding gcc), dnl treat backslash as a directory separator, like /. dnl Actually, these compilers use a double-backslash as dnl directory separator, inside the dnl # line "filename" dnl directives. gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac dnl A sed expression that turns a string into a basic regular dnl expression, for use within "/.../". gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo '$1' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' changequote([,]) dnl eval is necessary to expand gl_absname_cpp. dnl Ultrix and Pyramid sh refuse to redirect output of eval, dnl so use subshell. AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]), [`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | sed -n "$gl_absolute_header_sed"`]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/access.m4�������������������������������������������������������������0000644�0001750�0001750�00000005141�14557510505�013521� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# access.m4 serial 3 dnl Copyright (C) 2019-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ACCESS], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On native Windows, access (= _access) does not support the X_OK mode. dnl It works by chance on some versions of mingw. case "$host_os" in mingw* | windows*) REPLACE_ACCESS=1 ;; *) dnl Mac OS X 10.5 mistakenly allows access("link-to-file/",amode). AC_CHECK_FUNCS_ONCE([lstat]) AC_CACHE_CHECK([whether access honors trailing slash], [gl_cv_func_access_slash_works], [# Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then rm -rf conftest.f conftest.lnk touch conftest.f || AC_MSG_ERROR([cannot create temporary files]) ln -s conftest.f conftest.lnk AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <unistd.h> ]], [[int result = 0; if (access ("conftest.lnk/", R_OK) == 0) result |= 1; return result; ]])], [gl_cv_func_access_slash_works=yes], [gl_cv_func_access_slash_works=no], dnl When crosscompiling, assume access is broken. [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_access_slash_works="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_access_slash_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_access_slash_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_access_slash_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.f conftest.lnk else gl_cv_func_access_slash_works="guessing yes" fi ]) case "$gl_cv_func_access_slash_works" in *yes) ;; *) REPLACE_ACCESS=1 AC_DEFINE([ACCESS_TRAILING_SLASH_BUG], [1], [Define if access does not correctly handle trailing slashes.]) ;; esac ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/alloca.m4�������������������������������������������������������������0000644�0001750�0001750�00000007312�14557510505�013515� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# alloca.m4 serial 21 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2024 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ALLOCA], [ AC_REQUIRE([AC_FUNC_ALLOCA]) if test $ac_cv_func_alloca_works = no; then gl_PREREQ_ALLOCA fi # Define an additional variable used in the Makefile substitution. if test $ac_cv_working_alloca_h = yes; then AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [ AC_EGREP_CPP([Need own alloca], [ #if defined __GNUC__ || defined _AIX || defined _MSC_VER Need own alloca #endif ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no]) ]) if test $gl_cv_rpl_alloca = yes; then dnl OK, alloca can be implemented through a compiler built-in. AC_DEFINE([HAVE_ALLOCA], [1], [Define to 1 if you have 'alloca' after including <alloca.h>, a header that may be supplied by this distribution.]) GL_GENERATE_ALLOCA_H=true else dnl alloca exists as a library function, i.e. it is slow and probably dnl a memory leak. Don't define HAVE_ALLOCA in this case. GL_GENERATE_ALLOCA_H=false fi else GL_GENERATE_ALLOCA_H=true fi if test $ac_cv_working_alloca_h = yes; then HAVE_ALLOCA_H=1 else HAVE_ALLOCA_H=0 fi AC_SUBST([HAVE_ALLOCA_H]) ]) # Prerequisites of lib/alloca.c. # STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. AC_DEFUN([gl_PREREQ_ALLOCA], [:]) m4_version_prereq([2.70], [], [ # This works around a bug in autoconf <= 2.68 and has simplifications # from 2.70. See: # https://lists.gnu.org/r/bug-gnulib/2011-06/msg00277.html # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=6cd9f12520b0d6f76d3230d7565feba1ecf29497 # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=15edf7fd8094fd14a89d9891dd72a9624762597a # _AC_LIBOBJ_ALLOCA # ----------------- # Set up the LIBOBJ replacement of 'alloca'. Well, not exactly # AC_LIBOBJ since we actually set the output variable 'ALLOCA'. # Nevertheless, for Automake, AC_LIBSOURCES it. m4_define([_AC_LIBOBJ_ALLOCA], [# The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. AC_LIBSOURCES(alloca.c) AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.]) AC_CACHE_CHECK([stack direction for C alloca], [ac_cv_c_stack_direction], [AC_RUN_IFELSE([AC_LANG_SOURCE( [AC_INCLUDES_DEFAULT int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; }])], [ac_cv_c_stack_direction=1], [ac_cv_c_stack_direction=-1], [ac_cv_c_stack_direction=0])]) AH_VERBATIM([STACK_DIRECTION], [/* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION])dnl AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction) ])# _AC_LIBOBJ_ALLOCA ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/argp.m4���������������������������������������������������������������0000644�0001750�0001750�00000005144�14557510505�013214� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# argp.m4 serial 16 dnl Copyright (C) 2003-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_ARGP], [ AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS([program_invocation_name], [], [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_NAME], [1], [Define to 1 to add extern declaration of program_invocation_name to argp.h])], [[#include <errno.h>]]) AC_CHECK_DECLS([program_invocation_short_name], [], [AC_DEFINE([GNULIB_PROGRAM_INVOCATION_SHORT_NAME], [1], [Define to 1 to add extern declaration of program_invocation_short_name to argp.h])], [[#include <errno.h>]]) # Check if program_invocation_name and program_invocation_short_name # are defined elsewhere. It is improbable that only one of them will # be defined and other not, I prefer to stay on the safe side and to # test each one separately. AC_MSG_CHECKING([whether program_invocation_name is defined]) AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern char *program_invocation_name;]], [[program_invocation_name = "test";]])], [AC_DEFINE([HAVE_PROGRAM_INVOCATION_NAME], [1], [Define if program_invocation_name is defined]) AC_MSG_RESULT([yes]) ], [AC_MSG_RESULT([no])]) AC_MSG_CHECKING([whether program_invocation_short_name is defined]) AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern char *program_invocation_short_name;]], [[program_invocation_short_name = "test";]])], [AC_DEFINE([HAVE_PROGRAM_INVOCATION_SHORT_NAME], [1], [Define if program_invocation_short_name is defined]) AC_MSG_RESULT([yes]) ], [AC_MSG_RESULT([no])]) AC_CHECK_DECLS_ONCE([clearerr_unlocked]) AC_CHECK_DECLS_ONCE([feof_unlocked]) AC_CHECK_DECLS_ONCE([ferror_unlocked]) AC_CHECK_DECLS_ONCE([fflush_unlocked]) AC_CHECK_DECLS_ONCE([fgets_unlocked]) AC_CHECK_DECLS_ONCE([fputc_unlocked]) AC_CHECK_DECLS_ONCE([fputs_unlocked]) AC_CHECK_DECLS_ONCE([fread_unlocked]) AC_CHECK_DECLS_ONCE([fwrite_unlocked]) AC_CHECK_DECLS_ONCE([getc_unlocked]) AC_CHECK_DECLS_ONCE([getchar_unlocked]) AC_CHECK_DECLS_ONCE([putc_unlocked]) AC_CHECK_DECLS_ONCE([putchar_unlocked]) AC_CHECK_FUNCS_ONCE([flockfile funlockfile]) AC_CHECK_HEADERS_ONCE([features.h linewrap.h]) AC_REQUIRE([AC_FUNC_STRERROR_R]) ]) dnl argp-parse.c depends on GNU getopt internals, therefore use GNU getopt dnl always. AC_DEFUN([gl_REPLACE_GETOPT_ALWAYS], []) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/arpa_inet_h.m4��������������������������������������������������������0000644�0001750�0001750�00000005035�14557510505�014533� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# arpa_inet_h.m4 serial 17 dnl Copyright (C) 2006, 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Simon Josefsson and Bruno Haible AC_DEFUN_ONCE([gl_ARPA_INET_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) AC_CHECK_HEADERS_ONCE([arpa/inet.h]) if test $ac_cv_header_arpa_inet_h = yes; then HAVE_ARPA_INET_H=1 else HAVE_ARPA_INET_H=0 fi AC_SUBST([HAVE_ARPA_INET_H]) dnl <arpa/inet.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([arpa/inet.h]) AC_REQUIRE([gl_FEATURES_H]) gl_PREREQ_SYS_H_WS2TCPIP dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* On some systems, this header is not self-consistent. */ #if !(defined __GLIBC__ || defined __UCLIBC__) # include <sys/socket.h> #endif #ifdef __TANDEM # include <netdb.h> #endif #include <arpa/inet.h> ]], [inet_ntop inet_pton]) ]) # gl_ARPA_INET_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_ARPA_INET_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_ARPA_INET_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_ARPA_INET_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_ARPA_INET_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_INET_NTOP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_INET_PTON]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_ARPA_INET_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) ]) AC_DEFUN([gl_ARPA_INET_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_INET_NTOP=1; AC_SUBST([HAVE_DECL_INET_NTOP]) HAVE_DECL_INET_PTON=1; AC_SUBST([HAVE_DECL_INET_PTON]) REPLACE_INET_NTOP=0; AC_SUBST([REPLACE_INET_NTOP]) REPLACE_INET_PTON=0; AC_SUBST([REPLACE_INET_PTON]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/assert_h.m4�����������������������������������������������������������0000644�0001750�0001750�00000005207�14557510505�014073� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# assert-h.m4 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_DEFUN([gl_ASSERT_H], [ AC_CACHE_CHECK([for static_assert], [gl_cv_static_assert], [gl_saved_CFLAGS=$CFLAGS for gl_working in "yes, a keyword" "yes, an <assert.h> macro"; do AS_CASE([$gl_working], [*assert.h*], [CFLAGS="$gl_saved_CFLAGS -DINCLUDE_ASSERT_H"]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#if defined __clang__ && __STDC_VERSION__ < 202311 #pragma clang diagnostic error "-Wc2x-extensions" #pragma clang diagnostic error "-Wc++1z-extensions" #endif #ifdef INCLUDE_ASSERT_H #include <assert.h> #endif static_assert (2 + 2 == 4, "arithmetic does not work"); static_assert (2 + 2 == 4); ]], [[ static_assert (sizeof (char) == 1, "sizeof does not work"); static_assert (sizeof (char) == 1); ]])], [gl_cv_static_assert=$gl_working], [gl_cv_static_assert=no]) CFLAGS=$gl_saved_CFLAGS test "$gl_cv_static_assert" != no && break done]) GL_GENERATE_ASSERT_H=false AS_CASE([$gl_cv_static_assert], [yes*keyword*], [AC_DEFINE([HAVE_C_STATIC_ASSERT], [1], [Define to 1 if the static_assert keyword works.])], [no], [GL_GENERATE_ASSERT_H=true gl_NEXT_HEADERS([assert.h])]) dnl The "zz" puts this toward config.h's end, to avoid potential dnl collisions with other definitions. dnl #undef assert so that programs are not tempted to use it without dnl specifically including assert.h. dnl #undef __ASSERT_H__ so that on IRIX, when programs later include dnl <assert.h>, this include actually defines assert. dnl Break the #undef_s apart with a comment so that 'configure' does dnl not comment them out. AH_VERBATIM([zzstatic_assert], [#if (!defined HAVE_C_STATIC_ASSERT && !defined assert \ && (!defined __cplusplus \ || (__cpp_static_assert < 201411 \ && __GNUG__ < 6 && __clang_major__ < 6))) #include <assert.h> #undef/**/assert #ifdef __sgi #undef/**/__ASSERT_H__ #endif /* Solaris 11.4 <assert.h> defines static_assert as a macro with 2 arguments. We need it also to be invocable with a single argument. */ #if defined __sun && (__STDC_VERSION__ - 0 >= 201112L) && !defined __cplusplus #undef/**/static_assert #define static_assert _Static_assert #endif #endif]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/ax_check_compile_flag.m4����������������������������������������������0000644�0001750�0001750�00000004070�14557510557�016535� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # # DESCRIPTION # # Check whether the given FLAG works with the current language's compiler # or gives an error. (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the current language's default # flags (e.g. CFLAGS) when the check is done. The check is thus made with # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to # force the compiler to issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_COMPILE_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de> # Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com> # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 6 AC_DEFUN([AX_CHECK_COMPILE_FLAG], [AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) AS_VAR_IF(CACHEVAR,yes, [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_COMPILE_FLAGS ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/ax_compare_version.m4�������������������������������������������������0000644�0001750�0001750�00000014653�14557510557�016162� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_compare_version.html # =========================================================================== # # SYNOPSIS # # AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # # DESCRIPTION # # This macro compares two version strings. Due to the various number of # minor-version numbers that can exist, and the fact that string # comparisons are not compatible with numeric comparisons, this is not # necessarily trivial to do in a autoconf script. This macro makes doing # these comparisons easy. # # The six basic comparisons are available, as well as checking equality # limited to a certain number of minor-version levels. # # The operator OP determines what type of comparison to do, and can be one # of: # # eq - equal (test A == B) # ne - not equal (test A != B) # le - less than or equal (test A <= B) # ge - greater than or equal (test A >= B) # lt - less than (test A < B) # gt - greater than (test A > B) # # Additionally, the eq and ne operator can have a number after it to limit # the test to that number of minor versions. # # eq0 - equal up to the length of the shorter version # ne0 - not equal up to the length of the shorter version # eqN - equal up to N sub-version levels # neN - not equal up to N sub-version levels # # When the condition is true, shell commands ACTION-IF-TRUE are run, # otherwise shell commands ACTION-IF-FALSE are run. The environment # variable 'ax_compare_version' is always set to either 'true' or 'false' # as well. # # Examples: # # AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8]) # AX_COMPARE_VERSION([3.15],[lt],[3.15.8]) # # would both be true. # # AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8]) # AX_COMPARE_VERSION([3.15],[gt],[3.15.8]) # # would both be false. # # AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8]) # # would be true because it is only comparing two minor versions. # # AX_COMPARE_VERSION([3.15.7],[eq0],[3.15]) # # would be true because it is only comparing the lesser number of minor # versions of the two values. # # Note: The characters that separate the version numbers do not matter. An # empty string is the same as version 0. OP is evaluated by autoconf, not # configure, so must be a string, not a variable. # # The author would like to acknowledge Guido Draheim whose advice about # the m4_case and m4_ifvaln functions make this macro only include the # portions necessary to perform the specific comparison specified by the # OP argument in the final configure script. # # LICENSE # # Copyright (c) 2008 Tim Toolan <toolan@ele.uri.edu> # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 13 dnl ######################################################################### AC_DEFUN([AX_COMPARE_VERSION], [ AC_REQUIRE([AC_PROG_AWK]) # Used to indicate true or false condition ax_compare_version=false # Convert the two version strings to be compared into a format that # allows a simple string comparison. The end result is that a version # string of the form 1.12.5-r617 will be converted to the form # 0001001200050617. In other words, each number is zero padded to four # digits, and non digits are removed. AS_VAR_PUSHDEF([A],[ax_compare_version_A]) A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/[[^0-9]]//g'` AS_VAR_PUSHDEF([B],[ax_compare_version_B]) B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ -e 's/[[^0-9]]//g'` dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary dnl # then the first line is used to determine if the condition is true. dnl # The sed right after the echo is to remove any indented white space. m4_case(m4_tolower($2), [lt],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"` ], [gt],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"` ], [le],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"` ], [ge],[ ax_compare_version=`echo "x$A x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"` ],[ dnl Split the operator from the subversion count if present. m4_bmatch(m4_substr($2,2), [0],[ # A count of zero means use the length of the shorter version. # Determine the number of characters in A and B. ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'` ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'` # Set A to no more than B's length and B to no more than A's length. A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"` B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"` ], [[0-9]+],[ # A count greater than zero means use only that many subversions A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` ], [.+],[ AC_WARNING( [invalid OP numeric parameter: $2]) ],[]) # Pad zeros at end of numbers to make same length. ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`" B="$B`echo $A | sed 's/./0/g'`" A="$ax_compare_version_tmp_A" # Check for equality or inequality as necessary. m4_case(m4_tolower(m4_substr($2,0,2)), [eq],[ test "x$A" = "x$B" && ax_compare_version=true ], [ne],[ test "x$A" != "x$B" && ax_compare_version=true ],[ AC_WARNING([invalid OP parameter: $2]) ]) ]) AS_VAR_POPDEF([A])dnl AS_VAR_POPDEF([B])dnl dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE. if test "$ax_compare_version" = "true" ; then m4_ifvaln([$4],[$4],[:])dnl m4_ifvaln([$5],[else $5])dnl fi ]) dnl AX_COMPARE_VERSION �������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/ax_pthread.m4���������������������������������������������������������0000644�0001750�0001750�00000054034�14557510557�014413� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS # # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. It # sets the PTHREAD_LIBS output variable to the threads library and linker # flags, and the PTHREAD_CFLAGS output variable to any special C compiler # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # # Also sets PTHREAD_CC and PTHREAD_CXX to any special C compiler that is # needed for multi-threaded programs (defaults to the value of CC # respectively CXX otherwise). (This is necessary on e.g. AIX to use the # special cc_r/CC_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also to link with them as well. For example, you might link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # $PTHREAD_CXX $CXXFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threaded programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # CXX="$PTHREAD_CXX" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to # that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the # PTHREAD_PRIO_INHERIT symbol is defined when compiling with # PTHREAD_CFLAGS. # # ACTION-IF-FOUND is a list of shell commands to run if a threads library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or if # you have any other suggestions or comments. This macro was based on work # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by # Alejandro Forero Cuervo to the autoconf macro repository. We are also # grateful for the helpful feedback of numerous users. # # Updated for Autoconf 2.68 by Daniel Richard G. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu> # Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG> # Copyright (c) 2019 Marc Stevens <marc.stevens@cwi.nl> # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program 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 General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see <https://www.gnu.org/licenses/>. # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 31 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_PROG_SED]) AC_LANG_PUSH([C]) ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on Tru64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then ax_pthread_save_CC="$CC" ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"]) AS_IF([test "x$PTHREAD_CXX" != "x"], [CXX="$PTHREAD_CXX"]) CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS]) AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes]) AC_MSG_RESULT([$ax_pthread_ok]) if test "x$ax_pthread_ok" = "xno"; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi CC="$ax_pthread_save_CC" CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items with a "," contain both # C compiler flags (before ",") and linker flags (after ","). Other items # starting with a "-" are C compiler flags, and remaining items are # library names, except for "none" which indicates that we try without # any flags at all, and "pthread-config" which is a program returning # the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 # (Note: HP C rejects this with "bad form for `-t' option") # -pthreads: Solaris/gcc (Note: HP C also rejects) # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads and # -D_REENTRANT too), HP C (must be checked before -lpthread, which # is present but should not be used directly; and before -mthreads, # because the compiler interprets this as "-mt" + "-hreads") # -mthreads: Mingw32/gcc, Lynx/gcc # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case $host_os in freebsd*) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) ax_pthread_flags="-kthread lthread $ax_pthread_flags" ;; hpux*) # From the cc(1) man page: "[-mt] Sets various -D flags to enable # multi-threading and also sets -lpthread." ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" ;; openedition*) # IBM z/OS requires a feature-test macro to be defined in order to # enable POSIX threads at all, so give the user a hint if this is # not set. (We don't define these ourselves, as they can affect # other portions of the system API in unpredictable ways.) AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING], [ # if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) AX_PTHREAD_ZOS_MISSING # endif ], [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])]) ;; solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (N.B.: The stubs are missing # pthread_cleanup_push, or rather a function called by this macro, # so we could check for that, but who knows whether they'll stub # that too in a future libc.) So we'll check first for the # standard Solaris way of linking pthreads (-mt -lpthread). ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags" ;; esac # Are we compiling with Clang? AC_CACHE_CHECK([whether $CC is Clang], [ax_cv_PTHREAD_CLANG], [ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG], [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ # if defined(__clang__) && defined(__llvm__) AX_PTHREAD_CC_IS_CLANG # endif ], [ax_cv_PTHREAD_CLANG=yes]) fi ]) ax_pthread_clang="$ax_cv_PTHREAD_CLANG" # GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) # Note that for GCC and Clang -pthread generally implies -lpthread, # except when -nostdlib is passed. # This is problematic using libtool to build C++ shared libraries with pthread: # [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460 # [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333 # [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555 # To solve this, first try -pthread together with -lpthread for GCC AS_IF([test "x$GCC" = "xyes"], [ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags"]) # Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first AS_IF([test "x$ax_pthread_clang" = "xyes"], [ax_pthread_flags="-pthread,-lpthread -pthread"]) # The presence of a feature test macro requesting re-entrant function # definitions is, on some systems, a strong hint that pthreads support is # correctly enabled case $host_os in darwin* | hpux* | linux* | osf* | solaris*) ax_pthread_check_macro="_REENTRANT" ;; aix*) ax_pthread_check_macro="_THREAD_SAFE" ;; *) ax_pthread_check_macro="--" ;; esac AS_IF([test "x$ax_pthread_check_macro" = "x--"], [ax_pthread_check_cond=0], [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"]) if test "x$ax_pthread_ok" = "xno"; then for ax_pthread_try_flag in $ax_pthread_flags; do case $ax_pthread_try_flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; *,*) PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"` PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"` AC_MSG_CHECKING([whether pthreads work with "$PTHREAD_CFLAGS" and "$PTHREAD_LIBS"]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag]) PTHREAD_CFLAGS="$ax_pthread_try_flag" ;; pthread-config) AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) AS_IF([test "x$ax_pthread_config" = "xno"], [continue]) PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag]) PTHREAD_LIBS="-l$ax_pthread_try_flag" ;; esac ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h> # if $ax_pthread_check_cond # error "$ax_pthread_check_macro must be defined" # endif static void *some_global = NULL; static void routine(void *a) { /* To avoid any unused-parameter or unused-but-set-parameter warning. */ some_global = a; } static void *start_routine(void *a) { return a; }], [pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */])], [ax_pthread_ok=yes], []) CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" AC_MSG_RESULT([$ax_pthread_ok]) AS_IF([test "x$ax_pthread_ok" = "xyes"], [break]) PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Clang needs special handling, because older versions handle the -pthread # option in a rather... idiosyncratic way if test "x$ax_pthread_clang" = "xyes"; then # Clang takes -pthread; it has never supported any other flag # (Note 1: This will need to be revisited if a system that Clang # supports has POSIX threads in a separate library. This tends not # to be the way of modern systems, but it's conceivable.) # (Note 2: On some systems, notably Darwin, -pthread is not needed # to get POSIX threads support; the API is always present and # active. We could reasonably leave PTHREAD_CFLAGS empty. But # -pthread does define _REENTRANT, and while the Darwin headers # ignore this macro, third-party headers might not.) # However, older versions of Clang make a point of warning the user # that, in an invocation where only linking and no compilation is # taking place, the -pthread option has no effect ("argument unused # during compilation"). They expect -pthread to be passed in only # when source code is being compiled. # # Problem is, this is at odds with the way Automake and most other # C build frameworks function, which is that the same flags used in # compilation (CFLAGS) are also used in linking. Many systems # supported by AX_PTHREAD require exactly this for POSIX threads # support, and in fact it is often not straightforward to specify a # flag that is used only in the compilation phase and not in # linking. Such a scenario is extremely rare in practice. # # Even though use of the -pthread flag in linking would only print # a warning, this can be a nuisance for well-run software projects # that build with -Werror. So if the active version of Clang has # this misfeature, we search for an option to squash it. AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread], [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG], [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one # (.c -> exe), because the warning occurs only in the second # step ax_pthread_save_ac_link="$ac_link" ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' ax_pthread_link_step=`AS_ECHO(["$ac_link"]) | sed "$ax_pthread_sed"` ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do AS_IF([test "x$ax_pthread_try" = "xunknown"], [break]) CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" ac_link="$ax_pthread_save_ac_link" AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], [ac_link="$ax_pthread_2step_ac_link" AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], [break]) ]) done ac_link="$ax_pthread_save_ac_link" CFLAGS="$ax_pthread_save_CFLAGS" AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no]) ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" ]) case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in no | unknown) ;; *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; esac fi # $ax_pthread_clang = yes # Various other checks: if test "x$ax_pthread_ok" = "xyes"; then ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_CACHE_CHECK([for joinable pthread attribute], [ax_cv_PTHREAD_JOINABLE_ATTR], [ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>], [int attr = $ax_pthread_attr; return attr /* ; */])], [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break], []) done ]) AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ test "x$ax_pthread_joinable_attr_defined" != "xyes"], [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$ax_cv_PTHREAD_JOINABLE_ATTR], [Define to necessary symbol if this constant uses a non-standard name on your system.]) ax_pthread_joinable_attr_defined=yes ]) AC_CACHE_CHECK([whether more special flags are required for pthreads], [ax_cv_PTHREAD_SPECIAL_FLAGS], [ax_cv_PTHREAD_SPECIAL_FLAGS=no case $host_os in solaris*) ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" ;; esac ]) AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ test "x$ax_pthread_special_flags_added" != "xyes"], [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" ax_pthread_special_flags_added=yes]) AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], [ax_cv_PTHREAD_PRIO_INHERIT], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], [[int i = PTHREAD_PRIO_INHERIT; return i;]])], [ax_cv_PTHREAD_PRIO_INHERIT=yes], [ax_cv_PTHREAD_PRIO_INHERIT=no]) ]) AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ test "x$ax_pthread_prio_inherit_defined" != "xyes"], [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.]) ax_pthread_prio_inherit_defined=yes ]) CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" # More AIX lossage: compile with *_r variant if test "x$GCC" != "xyes"; then case $host_os in aix*) AS_CASE(["x/$CC"], [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], [#handle absolute path differently from PATH based program lookup AS_CASE(["x$CC"], [x/*], [ AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"]) AS_IF([test "x${CXX}" != "x"], [AS_IF([AS_EXECUTABLE_P([${CXX}_r])],[PTHREAD_CXX="${CXX}_r"])]) ], [ AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC]) AS_IF([test "x${CXX}" != "x"], [AC_CHECK_PROGS([PTHREAD_CXX],[${CXX}_r],[$CXX])]) ] ) ]) ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) AC_SUBST([PTHREAD_CXX]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test "x$ax_pthread_ok" = "xyes"; then ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) : else ax_pthread_ok=no $2 fi AC_LANG_POP ])dnl AX_PTHREAD ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/btowc.m4��������������������������������������������������������������0000644�0001750�0001750�00000011041�14557510505�013372� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# btowc.m4 serial 14 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_BTOWC], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl Check whether <wchar.h> is usable at all, first. Otherwise the test dnl program below may lead to an endless loop. See dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) AC_CHECK_FUNCS_ONCE([btowc]) if test $ac_cv_func_btowc = no; then HAVE_BTOWC=0 else AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Cygwin 1.7.2 btowc('\0') is WEOF, not 0. AC_CACHE_CHECK([whether btowc(0) is correct], [gl_cv_func_btowc_nul], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> int main () { if (btowc ('\0') != 0) return 1; return 0; }]])], [gl_cv_func_btowc_nul=yes], [gl_cv_func_btowc_nul=no], [ changequote(,)dnl case "$host_os" in # Guess no on Cygwin. cygwin*) gl_cv_func_btowc_nul="guessing no" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_btowc_nul="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_nul="guessing yes" ;; esac changequote([,])dnl ]) ]) dnl IRIX 6.5 btowc(EOF) is 0xFF, not WEOF. AC_CACHE_CHECK([whether btowc(EOF) is correct], [gl_cv_func_btowc_eof], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on IRIX. irix*) gl_cv_func_btowc_eof="guessing no" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_btowc_eof="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_eof="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdio.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (btowc (EOF) != WEOF) return 1; } return 0; }]])], [gl_cv_func_btowc_eof=yes], [gl_cv_func_btowc_eof=no], [:]) fi ]) dnl On mingw, in the C locale, btowc is inconsistent with mbrtowc: dnl mbrtowc avoids calling MultiByteToWideChar when MB_CUR_MAX is 1 and dnl ___lc_codepage_func() is 0, but btowc is lacking this special case. AC_CHECK_FUNCS_ONCE([mbrtowc]) AC_CACHE_CHECK([whether btowc is consistent with mbrtowc in the C locale], [gl_cv_func_btowc_consistent], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { #if HAVE_MBRTOWC wint_t wc1 = btowc (0x80); wchar_t wc2 = (wchar_t) 0xbadface; char buf[1] = { 0x80 }; mbstate_t state; memset (&state, 0, sizeof (mbstate_t)); if (mbrtowc (&wc2, buf, 1, &state) != 1 || wc1 != wc2) return 1; #endif return 0; }]])], [gl_cv_func_btowc_consistent=yes], [gl_cv_func_btowc_consistent=no], [case "$host_os" in # Guess no on mingw. mingw* | windows*) AC_EGREP_CPP([Problem], [ #ifdef __MINGW32__ Problem #endif ], [gl_cv_func_btowc_consistent="guessing no"], [gl_cv_func_btowc_consistent="guessing yes"]) ;; # Guess yes otherwise. *) gl_cv_func_btowc_consistent="guessing yes" ;; esac ]) ]) case "$gl_cv_func_btowc_nul" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac case "$gl_cv_func_btowc_eof" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac case "$gl_cv_func_btowc_consistent" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac if test $REPLACE_BTOWC = 0; then gl_MBRTOWC_C_LOCALE case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac fi fi ]) # Prerequisites of lib/btowc.c. AC_DEFUN([gl_PREREQ_BTOWC], [ : AC_CHECK_FUNCS_ONCE([mbrtowc]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/builtin-expect.m4�����������������������������������������������������0000644�0001750�0001750�00000003023�14557510505�015211� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Check for __builtin_expect. dnl Copyright 2016-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl___BUILTIN_EXPECT], [ AC_CACHE_CHECK([for __builtin_expect], [gl_cv___builtin_expect], [AC_LINK_IFELSE( [AC_LANG_SOURCE([[ int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; }]])], [gl_cv___builtin_expect=yes], [AC_LINK_IFELSE( [AC_LANG_SOURCE([[ #include <builtins.h> int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; }]])], [gl_cv___builtin_expect="in <builtins.h>"], [gl_cv___builtin_expect=no])])]) if test "$gl_cv___builtin_expect" = yes; then AC_DEFINE([HAVE___BUILTIN_EXPECT], [1]) elif test "$gl_cv___builtin_expect" = "in <builtins.h>"; then AC_DEFINE([HAVE___BUILTIN_EXPECT], [2]) fi AH_VERBATIM([HAVE___BUILTIN_EXPECT], [/* Define to 1 if the compiler supports __builtin_expect, and to 2 if <builtins.h> does. */ #undef HAVE___BUILTIN_EXPECT #ifndef HAVE___BUILTIN_EXPECT # define __builtin_expect(e, c) (e) #elif HAVE___BUILTIN_EXPECT == 2 # include <builtins.h> #endif ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/c-bool.m4�������������������������������������������������������������0000644�0001750�0001750�00000003360�14557510505�013434� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for bool that conforms to C2023. dnl Copyright 2022-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_C_BOOL], [ AC_CACHE_CHECK([for bool, true, false], [gl_cv_c_bool], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE([[ #if true == false #error "true == false" #endif extern bool b; bool b = true == false;]])], [gl_cv_c_bool=yes], [gl_cv_c_bool=no])]) if test "$gl_cv_c_bool" = yes; then AC_DEFINE([HAVE_C_BOOL], [1], [Define to 1 if bool, true and false work as per C2023.]) fi AC_CHECK_HEADERS_ONCE([stdbool.h]) dnl The "zz" puts this toward config.h's end, to avoid potential dnl collisions with other definitions. dnl If 'bool', 'true' and 'false' do not work, arrange for them to work. dnl In C, this means including <stdbool.h> if it is not already included. dnl However, if the preprocessor mistakenly treats 'true' as 0, dnl define it to a bool expression equal to 1; this is needed in dnl Sun C++ 5.11 (Oracle Solaris Studio 12.2, 2010) and older. AH_VERBATIM([zzbool], [#ifndef HAVE_C_BOOL # if !defined __cplusplus && !defined __bool_true_false_are_defined # if HAVE_STDBOOL_H # include <stdbool.h> # else # if defined __SUNPRO_C # error "<stdbool.h> is not usable with this configuration. To make it usable, add -D_STDC_C99= to $CC." # else # error "<stdbool.h> does not exist on this platform. Use gnulib module 'stdbool-c99' instead of gnulib module 'stdbool'." # endif # endif # endif # if !true # define true (!false) # endif #endif]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/c32rtomb.m4�����������������������������������������������������������0000644�0001750�0001750�00000004771�14557510505�013723� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# c32rtomb.m4 serial 7 dnl Copyright (C) 2020-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_C32RTOMB], [ AC_REQUIRE([gl_UCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) dnl Cf. gl_CHECK_FUNCS_ANDROID AC_CHECK_DECL([c32rtomb], , , [[#ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> ]]) if test $ac_cv_have_decl_c32rtomb = yes; then dnl We can't use AC_CHECK_FUNC here, because c32rtomb() is defined as a dnl static inline function on Haiku 2020. AC_CACHE_CHECK([for c32rtomb], [gl_cv_func_c32rtomb], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> ]], [[char buf[8]; return c32rtomb (buf, 0, NULL) == 0; ]]) ], [gl_cv_func_c32rtomb=yes], [gl_cv_func_c32rtomb=no]) ]) else gl_cv_func_c32rtomb=no fi if test $gl_cv_func_c32rtomb = no; then HAVE_C32RTOMB=0 else dnl When we override mbrtoc32, redefining the meaning of the char32_t dnl values, we need to override c32rtomb as well, for consistency. if test $HAVE_WORKING_MBRTOC32 = 0; then REPLACE_C32RTOMB=1 fi AC_CACHE_CHECK([whether c32rtomb return value is correct], [gl_cv_func_c32rtomb_retval], [ dnl Initial guess, used when cross-compiling. changequote(,)dnl case "$host_os" in # Guess no on AIX. aix*) gl_cv_func_c32rtomb_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_c32rtomb_retval="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stddef.h> #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> int main () { int result = 0; if (c32rtomb (NULL, 0, NULL) != 1) result |= 1; return result; }]])], [gl_cv_func_c32rtomb_retval=yes], [gl_cv_func_c32rtomb_retval=no], [:]) ]) case "$gl_cv_func_c32rtomb_retval" in *yes) ;; *) AC_DEFINE([C32RTOMB_RETVAL_BUG], [1], [Define if the c32rtomb function has an incorrect return value.]) REPLACE_C32RTOMB=1 ;; esac fi ]) �������gnuastro-0.22/bootstrapped/m4/calloc.m4�������������������������������������������������������������0000644�0001750�0001750�00000006064�14557510505�013522� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# calloc.m4 serial 31 # Copyright (C) 2004-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. # Determine whether calloc (N, S) returns non-NULL when N*S is zero, # and returns NULL when N*S overflows. # If so, define HAVE_CALLOC. Otherwise, define calloc to rpl_calloc # and arrange to use a calloc wrapper function that does work in that case. # _AC_FUNC_CALLOC_IF([IF-WORKS], [IF-NOT]) # ------------------------------------- # If calloc is compatible with GNU calloc, run IF-WORKS, otherwise, IF-NOT. AC_DEFUN([_AC_FUNC_CALLOC_IF], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether calloc (0, n) and calloc (n, 0) return nonnull], [ac_cv_func_calloc_0_nonnull], [if test $cross_compiling != yes; then ac_cv_func_calloc_0_nonnull=yes AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[int result = 0; char * volatile p = calloc (0, 0); if (!p) result |= 1; free (p); return result; ]])], [], [ac_cv_func_calloc_0_nonnull=no]) else case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on native Windows. mingw* | windows*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_calloc_0_nonnull="$gl_cross_guess_normal" ;; esac fi ]) AS_CASE([$ac_cv_func_calloc_0_nonnull], [*yes], [$1], [$2]) ]) # gl_FUNC_CALLOC_GNU # ------------------ # Replace calloc if it is not compatible with GNU libc. AC_DEFUN([gl_FUNC_CALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_CALLOC_POSIX]) REPLACE_CALLOC_FOR_CALLOC_GNU="$REPLACE_CALLOC_FOR_CALLOC_POSIX" if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 0; then _AC_FUNC_CALLOC_IF([], [REPLACE_CALLOC_FOR_CALLOC_GNU=1]) fi ])# gl_FUNC_CALLOC_GNU # gl_FUNC_CALLOC_POSIX # -------------------- # Test whether 'calloc' is POSIX compliant (sets errno to ENOMEM when it # fails, and doesn't mess up with ptrdiff_t or size_t overflow), # and replace calloc if it is not. AC_DEFUN([gl_FUNC_CALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_CALLOC_FOR_CALLOC_POSIX=1 fi dnl Although in theory we should also test for size_t overflow, dnl in practice testing for ptrdiff_t overflow suffices dnl since PTRDIFF_MAX <= SIZE_MAX on all known Gnulib porting targets. dnl A separate size_t test would slow down 'configure'. ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/chdir-long.m4���������������������������������������������������������0000644�0001750�0001750�00000002054�14557510505�014306� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 17 # Use Gnulib's robust chdir function. # It can handle arbitrarily long directory names, which means # that when it is given the name of an existing directory, it # never fails with ENAMETOOLONG. # Arrange to compile chdir-long.c only on systems that define PATH_MAX. dnl Copyright (C) 2004-2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. AC_DEFUN([gl_FUNC_CHDIR_LONG], [ AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ]) AC_CACHE_CHECK([whether this system supports file names of any length], [gl_cv_have_unlimited_file_name_length], [AC_EGREP_CPP([have_arbitrary_file_name_length_limit], gl_PATHMAX_SNIPPET[ #ifdef PATH_MAX have_arbitrary_file_name_length_limit #endif], [gl_cv_have_unlimited_file_name_length=no], [gl_cv_have_unlimited_file_name_length=yes])]) ]) AC_DEFUN([gl_PREREQ_CHDIR_LONG], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/close.m4��������������������������������������������������������������0000644�0001750�0001750�00000002227�14557510506�013370� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# close.m4 serial 10 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_FUNC_CLOSE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_CLOSE=1 fi ]) m4_ifdef([gl_PREREQ_SYS_H_WINSOCK2], [ gl_PREREQ_SYS_H_WINSOCK2 if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then dnl Even if the 'socket' module is not used here, another part of the dnl application may use it and pass file descriptors that refer to dnl sockets to the close() function. So enable the support for sockets. REPLACE_CLOSE=1 fi ]) dnl Replace close() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ if test $REPLACE_CLOSE = 0; then gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_CLOSE=1 fi fi ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/codeset.m4������������������������������������������������������������0000644�0001750�0001750�00000001525�14557510506�013711� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# codeset.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016, 2019-2024 Free Software dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <langinfo.h>]], [[char* cs = nl_langinfo(CODESET); return !cs;]])], [am_cv_langinfo_codeset=yes], [am_cv_langinfo_codeset=no]) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE([HAVE_LANGINFO_CODESET], [1], [Define if you have <langinfo.h> and nl_langinfo(CODESET).]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/creat.m4��������������������������������������������������������������0000644�0001750�0001750�00000001074�14557510506�013360� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# creat.m4 serial 2 dnl Copyright (C) 2019-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CREAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw* | windows*) REPLACE_CREAT=1 ;; *) gl_OPEN_TRAILING_SLASH_BUG case "$gl_cv_func_open_slash" in *no) REPLACE_CREAT=1 ;; esac ;; esac ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/ctype_h.m4������������������������������������������������������������0000644�0001750�0001750�00000003227�14557510506�013717� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ctype_h.m4 serial 9 dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_CTYPE_H], [ AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) dnl <ctype.h> is always overridden, because of GNULIB_POSIXCHECK. gl_NEXT_HEADERS([ctype.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <ctype.h> ]], [isblank]) ]) # gl_CTYPE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_CTYPE_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_CTYPE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_CTYPE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_CTYPE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISBLANK]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_CTYPE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) ]) AC_DEFUN([gl_CTYPE_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_ISBLANK=1; AC_SUBST([HAVE_ISBLANK]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/dirent_h.m4�����������������������������������������������������������0000644�0001750�0001750�00000007412�14557510506�014060� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dirent_h.m4 serial 22 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN_ONCE([gl_DIRENT_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) dnl <dirent.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([dirent.h]) if test $ac_cv_header_dirent_h = yes; then HAVE_DIRENT_H=1 else HAVE_DIRENT_H=0 fi AC_SUBST([HAVE_DIRENT_H]) gl_DIRENT_DIR dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <dirent.h> ]], [alphasort closedir dirfd fdopendir opendir readdir rewinddir scandir]) ]) dnl Determine whether <dirent.h> needs to override the DIR type. AC_DEFUN_ONCE([gl_DIRENT_DIR], [ dnl Set DIR_HAS_FD_MEMBER if dirfd() works, i.e. not always returns -1. dnl We could use the findings from gl_FUNC_DIRFD and gl_PREREQ_DIRFD, but dnl it's simpler since we know the affected platforms. AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw* | windows* | os2*) DIR_HAS_FD_MEMBER=0 ;; *) DIR_HAS_FD_MEMBER=1 ;; esac AC_SUBST([DIR_HAS_FD_MEMBER]) ]) # gl_DIRENT_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_DIRENT_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_DIRENT_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_DIRENT_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_DIRENT_H_MODULE_INDICATOR_DEFAULTS], [ gl_UNISTD_H_REQUIRE_DEFAULTS dnl for REPLACE_FCHDIR gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPENDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REWINDDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CLOSEDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DIRFD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDOPENDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCANDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ALPHASORT]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_DIRENT_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) ]) AC_DEFUN([gl_DIRENT_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_OPENDIR=1; AC_SUBST([HAVE_OPENDIR]) HAVE_READDIR=1; AC_SUBST([HAVE_READDIR]) HAVE_REWINDDIR=1; AC_SUBST([HAVE_REWINDDIR]) HAVE_CLOSEDIR=1; AC_SUBST([HAVE_CLOSEDIR]) HAVE_DECL_DIRFD=1; AC_SUBST([HAVE_DECL_DIRFD]) HAVE_DECL_FDOPENDIR=1;AC_SUBST([HAVE_DECL_FDOPENDIR]) HAVE_FDOPENDIR=1; AC_SUBST([HAVE_FDOPENDIR]) HAVE_SCANDIR=1; AC_SUBST([HAVE_SCANDIR]) HAVE_ALPHASORT=1; AC_SUBST([HAVE_ALPHASORT]) REPLACE_OPENDIR=0; AC_SUBST([REPLACE_OPENDIR]) REPLACE_READDIR=0; AC_SUBST([REPLACE_READDIR]) REPLACE_REWINDDIR=0; AC_SUBST([REPLACE_REWINDDIR]) REPLACE_CLOSEDIR=0; AC_SUBST([REPLACE_CLOSEDIR]) REPLACE_DIRFD=0; AC_SUBST([REPLACE_DIRFD]) REPLACE_FDOPENDIR=0; AC_SUBST([REPLACE_FDOPENDIR]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/dirfd.m4��������������������������������������������������������������0000644�0001750�0001750�00000004722�14557510506�013355� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 30 -*- Autoconf -*- dnl Find out how to get the file descriptor associated with an open DIR*. # Copyright (C) 2001-2006, 2008-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering AC_DEFUN([gl_FUNC_DIRFD], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl Persuade glibc <dirent.h> to declare dirfd(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS([dirfd]) AC_CHECK_DECLS([dirfd], , , [[#include <sys/types.h> #include <dirent.h>]]) if test $ac_cv_have_decl_dirfd = no; then HAVE_DECL_DIRFD=0 fi AC_CACHE_CHECK([whether dirfd is a macro], [gl_cv_func_dirfd_macro], [AC_EGREP_CPP([dirent_header_defines_dirfd], [ #include <sys/types.h> #include <dirent.h> #ifdef dirfd dirent_header_defines_dirfd #endif], [gl_cv_func_dirfd_macro=yes], [gl_cv_func_dirfd_macro=no])]) if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no; then HAVE_DIRFD=0 else HAVE_DIRFD=1 dnl Replace dirfd() on native Windows and OS/2 kLIBC, dnl to support fdopendir(). AC_REQUIRE([gl_DIRENT_DIR]) if test $DIR_HAS_FD_MEMBER = 0; then REPLACE_DIRFD=1 fi fi ]) dnl Prerequisites of lib/dirfd.c. AC_DEFUN([gl_PREREQ_DIRFD], [ AC_CACHE_CHECK([how to get the file descriptor associated with an open DIR*], [gl_cv_sys_dir_fd_member_name], [ gl_saved_CFLAGS=$CFLAGS for ac_expr in d_fd dd_fd; do CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <dirent.h>]], [[DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME;]])], [dir_fd_found=yes] ) CFLAGS=$gl_saved_CFLAGS test "$dir_fd_found" = yes && break done test "$dir_fd_found" = yes || ac_expr=no_such_member gl_cv_sys_dir_fd_member_name=$ac_expr ] ) if test $gl_cv_sys_dir_fd_member_name != no_such_member; then AC_DEFINE_UNQUOTED([DIR_FD_MEMBER_NAME], [$gl_cv_sys_dir_fd_member_name], [the name of the file descriptor member of DIR]) fi AH_VERBATIM([DIR_TO_FD], [#ifdef DIR_FD_MEMBER_NAME # define DIR_TO_FD(Dir_p) ((Dir_p)->DIR_FD_MEMBER_NAME) #else # define DIR_TO_FD(Dir_p) -1 #endif ]) ]) ����������������������������������������������gnuastro-0.22/bootstrapped/m4/double-slash-root.m4��������������������������������������������������0000644�0001750�0001750�00000003125�14557510506�015624� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# double-slash-root.m4 serial 4 -*- Autoconf -*- dnl Copyright (C) 2006, 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_DOUBLE_SLASH_ROOT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root], [ if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # <bug-gnulib@gnu.org>. case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi]) if test "$gl_cv_double_slash_root" = yes; then AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1], [Define to 1 if // is a file system root distinct from /.]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/dup.m4����������������������������������������������������������������0000644�0001750�0001750�00000003234�14557510506�013052� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dup.m4 serial 8 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_DUP], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_DUP=1 fi ]) dnl Replace dup() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_DUP=1 fi ]) AC_CACHE_CHECK([whether dup works], [gl_cv_func_dup_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <unistd.h> #include <fcntl.h> #include <errno.h> ]GL_MDA_DEFINES], [[/* On OS/2 kLIBC, dup does not work on a directory fd. */ int fd = open (".", O_RDONLY); return fd < 0 ? 1 : dup (fd) < 0 ? 2 : 0; ]]) ], [gl_cv_func_dup_works=yes], [gl_cv_func_dup_works=no], [case "$host_os" in # Guess no on native Windows. mingw* | windows*) gl_cv_func_dup_works="guessing no" ;; *) gl_cv_func_dup_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_dup_works" in *yes) ;; *) REPLACE_DUP=1 ;; esac ]) # Prerequisites of lib/dup.c. AC_DEFUN([gl_PREREQ_DUP], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/dup2.m4���������������������������������������������������������������0000644�0001750�0001750�00000007251�14557510506�013137� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 28 dnl Copyright (C) 2002, 2005, 2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_DUP2], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works], [AC_RUN_IFELSE([ AC_LANG_PROGRAM( [[#include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> ]GL_MDA_DEFINES[ #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif ]], [[int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; #ifdef FD_CLOEXEC if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) result |= 1; #endif if (dup2 (1, 1) != 1) result |= 2; #ifdef FD_CLOEXEC if (fcntl (1, F_GETFD) != FD_CLOEXEC) result |= 4; #endif close (0); if (dup2 (0, 0) != -1) result |= 8; /* Many gnulib modules require POSIX conformance of EBADF. */ if (dup2 (2, bad_fd) == -1 && errno != EBADF) result |= 16; /* Flush out some cygwin core dumps. */ if (dup2 (2, -1) != -1 || errno != EBADF) result |= 32; dup2 (2, 255); dup2 (2, 256); /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ { int fd = open (".", O_RDONLY); if (fd == -1) result |= 64; else if (dup2 (fd, fd + 1) == -1) result |= 128; close (fd); } return result;]]) ], [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no], [case "$host_os" in mingw* | windows*) # on this platform, dup2 always returns 0 for success gl_cv_func_dup2_works="guessing no" ;; cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 gl_cv_func_dup2_works="guessing no" ;; aix* | freebsd*) # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, # not EBADF. gl_cv_func_dup2_works="guessing no" ;; haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. gl_cv_func_dup2_works="guessing no" ;; *-android*) # implemented using dup3(), which fails if oldfd == newfd gl_cv_func_dup2_works="guessing no" ;; os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. gl_cv_func_dup2_works="guessing no" ;; *) gl_cv_func_dup2_works="guessing yes" ;; esac]) ]) case "$gl_cv_func_dup2_works" in *yes) ;; *) REPLACE_DUP2=1 AC_CHECK_FUNCS([setdtablesize]) ;; esac dnl Replace dup2() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_DUP2=1 fi ]) ]) # Prerequisites of lib/dup2.c. AC_DEFUN([gl_PREREQ_DUP2], []) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/eealloc.m4������������������������������������������������������������0000644�0001750�0001750�00000001667�14557510506�013676� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# eealloc.m4 serial 3 dnl Copyright (C) 2003, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_EEALLOC], [ AC_REQUIRE([gl_EEMALLOC]) AC_REQUIRE([gl_EEREALLOC]) ]) AC_DEFUN([gl_EEMALLOC], [ _AC_FUNC_MALLOC_IF( [gl_cv_func_malloc_0_nonnull=1], [gl_cv_func_malloc_0_nonnull=0]) AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], [$gl_cv_func_malloc_0_nonnull], [If malloc(0) is != NULL, define this to 1. Otherwise define this to 0.]) ]) AC_DEFUN([gl_EEREALLOC], [ _AC_FUNC_REALLOC_IF( [gl_cv_func_realloc_0_nonnull=1], [gl_cv_func_realloc_0_nonnull=0]) AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], [$gl_cv_func_realloc_0_nonnull], [If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this to 0.]) ]) �������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/environ.m4������������������������������������������������������������0000644�0001750�0001750�00000002606�14557510506�013744� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# environ.m4 serial 8 dnl Copyright (C) 2001-2004, 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_ENVIRON], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare environ. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([unistd.h]) gt_CHECK_VAR_DECL( [#if HAVE_UNISTD_H #include <unistd.h> #endif /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ #include <stdlib.h> ], [environ]) if test $gt_cv_var_environ_declaration != yes; then HAVE_DECL_ENVIRON=0 fi ]) # Check if a variable is properly declared. # gt_CHECK_VAR_DECL(includes,variable) AC_DEFUN([gt_CHECK_VAR_DECL], [ define([gt_cv_var], [gt_cv_var_]$2[_declaration]) AC_CACHE_CHECK([if $2 is properly declared], [gt_cv_var], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[$1 typedef struct { int foo; } foo_t; extern foo_t $2;]], [[$2.foo = 1;]])], [gt_cv_var=no], [gt_cv_var=yes])]) if test $gt_cv_var = yes; then AC_DEFINE([HAVE_]m4_translit($2, [a-z], [A-Z])[_DECL], 1, [Define if you have the declaration of $2.]) fi undefine([gt_cv_var]) ]) ��������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/errno_h.m4������������������������������������������������������������0000644�0001750�0001750�00000005642�14557510506�013723� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# errno_h.m4 serial 14 dnl Copyright (C) 2004, 2006, 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.61]) AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ AC_EGREP_CPP([booboo],[ #include <errno.h> #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif ], [gl_cv_header_errno_h_complete=no], [gl_cv_header_errno_h_complete=yes]) ]) if test $gl_cv_header_errno_h_complete = yes; then GL_GENERATE_ERRNO_H=false else gl_NEXT_HEADERS([errno.h]) GL_GENERATE_ERRNO_H=true fi gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) gl_REPLACE_ERRNO_VALUE([ENOLINK]) gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) ]) # Assuming $1 = EOVERFLOW. # The EOVERFLOW errno value ought to be defined in <errno.h>, according to # POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and # some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. # Check for the value of EOVERFLOW. # Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. AC_DEFUN([gl_REPLACE_ERRNO_VALUE], [ if $GL_GENERATE_ERRNO_H; then AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ AC_EGREP_CPP([yes],[ #include <errno.h> #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=yes], [gl_cv_header_errno_h_]$1[=no]) if test $gl_cv_header_errno_h_]$1[ = no; then AC_EGREP_CPP([yes],[ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=hidden]) if test $gl_cv_header_errno_h_]$1[ = hidden; then dnl The macro exists but is hidden. dnl Define it to the same value. AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> ]) fi fi ]) case $gl_cv_header_errno_h_]$1[ in yes | no) ]$1[_HIDDEN=0; ]$1[_VALUE= ;; *) ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" ;; esac AC_SUBST($1[_HIDDEN]) AC_SUBST($1[_VALUE]) fi ]) ����������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/error.m4��������������������������������������������������������������0000644�0001750�0001750�00000001130�14557510506�013404� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 16 # Copyright (C) 1996-1998, 2001-2004, 2009-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_ERROR], [ ]) # Prerequisites of lib/error.c. AC_DEFUN([gl_PREREQ_ERROR], [ dnl Use system extensions on Android, so that AC_FUNC_STRERROR_R dnl discovers the GNU API for strerror_r on Android API level 23 and later. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_FUNC_STRERROR_R]) : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/error_h.m4������������������������������������������������������������0000644�0001750�0001750�00000007516�14557510506�013731� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# error_h.m4 serial 4 dnl Copyright (C) 1996-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Provide a working "error.h". AC_DEFUN_ONCE([gl_ERROR_H], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_CHECK_NEXT_HEADERS([error.h]) if test $ac_cv_header_error_h = yes; then HAVE_ERROR_H=1 else HAVE_ERROR_H=0 fi AC_SUBST([HAVE_ERROR_H]) REPLACE_ERROR=0 gl_CHECK_FUNCS_ANDROID([error], [[#include <error.h>]]) if test $ac_cv_func_error = yes; then HAVE_ERROR=1 else HAVE_ERROR=0 case "$gl_cv_onwards_func_error" in future*) REPLACE_ERROR=1 ;; esac fi dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer dnl maintained in Autoconf and because it invokes AC_LIBOBJ. dnl We need to notice a missing declaration, like gl_CHECK_FUNCS_ANDROID does. AC_CHECK_DECL([error_at_line], , , [[#include <error.h>]]) if test $ac_cv_have_decl_error_at_line = yes; then AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <error.h>]], [[error_at_line (0, 0, "", 0, "an error occurred");]])], [ac_cv_lib_error_at_line=yes], [ac_cv_lib_error_at_line=no])]) else ac_cv_lib_error_at_line=no fi if test $ac_cv_lib_error_at_line = yes; then HAVE_ERROR_AT_LINE=1 else HAVE_ERROR_AT_LINE=0 fi REPLACE_ERROR_AT_LINE=0 if test $ac_cv_func_error = yes && test $ac_cv_lib_error_at_line = yes; then dnl On Android 11, when error_print_progname is set, the output of the dnl error() function contains an extra space. AC_CACHE_CHECK([for working error function], [gl_cv_func_working_error], [if test $cross_compiling != yes; then AC_LINK_IFELSE( [AC_LANG_PROGRAM([[ #include <error.h> static void print_no_progname (void) {} ]], [[ error_print_progname = print_no_progname; error (0, 0, "foo"); ]]) ], [rm -f conftest.out if test -s conftest$ac_exeext \ && ./conftest$ac_exeext 2> conftest.out; then if grep ' ' conftest.out >/dev/null; then gl_cv_func_working_error=no else gl_cv_func_working_error=yes fi else gl_cv_func_working_error=no fi rm -f conftest.out ], [gl_cv_func_working_error=no]) else AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <error.h> ]], [[ error (0, 0, "foo"); ]]) ], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_error="guessing yes" ;; # Guess no on Android. linux*-android*) gl_cv_func_working_error="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_error="$gl_cross_guess_normal" ;; esac ], [gl_cv_func_working_error=no]) fi ]) case "$gl_cv_func_working_error" in *no) REPLACE_ERROR=1 REPLACE_ERROR_AT_LINE=1 ;; esac fi if test $HAVE_ERROR = 0 || test $REPLACE_ERROR = 1 \ || test $HAVE_ERROR_AT_LINE = 0 || test $REPLACE_ERROR_AT_LINE = 1; then COMPILE_ERROR_C=1 else COMPILE_ERROR_C=0 fi AC_SUBST([HAVE_ERROR]) AC_SUBST([HAVE_ERROR_AT_LINE]) AC_SUBST([REPLACE_ERROR]) AC_SUBST([REPLACE_ERROR_AT_LINE]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/euidaccess.m4���������������������������������������������������������0000644�0001750�0001750�00000003700�14557510506�014370� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# euidaccess.m4 serial 17 dnl Copyright (C) 2002-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_NONREENTRANT_EUIDACCESS], [ AC_REQUIRE([gl_FUNC_EUIDACCESS]) AC_CHECK_DECLS([setregid]) AC_DEFINE([PREFER_NONREENTRANT_EUIDACCESS], [1], [Define this if you prefer euidaccess to return the correct result even if this would make it nonreentrant. Define this only if your entire application is safe even if the uid or gid might temporarily change. If your application uses signal handlers or threads it is probably not safe.]) ]) AC_DEFUN([gl_FUNC_EUIDACCESS], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare euidaccess(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS([euidaccess]) if test $ac_cv_func_euidaccess = no; then HAVE_EUIDACCESS=0 fi ]) # Prerequisites of lib/euidaccess.c. AC_DEFUN([gl_PREREQ_EUIDACCESS], [ dnl Prefer POSIX faccessat over non-standard euidaccess. gl_CHECK_FUNCS_ANDROID([faccessat], [[#include <unistd.h>]]) dnl Try various other non-standard fallbacks. AC_CHECK_HEADERS([libgen.h]) AC_FUNC_GETGROUPS # Solaris 9 and 10 need -lgen to get the eaccess function. # Save and restore LIBS so -lgen isn't added to it. Otherwise, *all* # programs in the package would end up linked with that potentially-shared # library, inducing unnecessary run-time overhead. EUIDACCESS_LIBGEN= AC_SUBST([EUIDACCESS_LIBGEN]) gl_saved_libs=$LIBS AC_SEARCH_LIBS([eaccess], [gen], [test "$ac_cv_search_eaccess" = "none required" || EUIDACCESS_LIBGEN=$ac_cv_search_eaccess]) AC_CHECK_FUNCS([eaccess]) LIBS=$gl_saved_libs # For backward compatibility. LIB_EACCESS="$EUIDACCESS_LIBGEN" AC_SUBST([LIB_EACCESS]) ]) ����������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/exponentd.m4����������������������������������������������������������0000644�0001750�0001750�00000007557�14557510506�014302� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exponentd.m4 serial 4 dnl Copyright (C) 2007-2008, 2010-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_DOUBLE_EXPONENT_LOCATION], [ AC_CACHE_CHECK([where to find the exponent in a 'double'], [gl_cv_cc_double_expbit0], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (double x) { memory_double m; size_t i; /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ memset (&m, 0, sizeof (memory_double)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25); add_to_ored_words (0.5); add_to_ored_words (1.0); add_to_ored_words (2.0); add_to_ored_words (4.0); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } ]])], [gl_cv_cc_double_expbit0=`cat conftest.out`], [gl_cv_cc_double_expbit0="unknown"], [ dnl On ARM, there are two 'double' floating-point formats, used by dnl different sets of instructions: The older FPA instructions assume dnl that they are stored in big-endian word order, while the words dnl (like integer types) are stored in little-endian byte order. dnl The newer VFP instructions assume little-endian order dnl consistently. AC_EGREP_CPP([mixed_endianness], [ #if defined arm || defined __arm || defined __arm__ mixed_endianness #endif ], [gl_cv_cc_double_expbit0="unknown"], [ pushdef([AC_MSG_CHECKING],[:])dnl pushdef([AC_MSG_RESULT],[:])dnl pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl AC_C_BIGENDIAN( [gl_cv_cc_double_expbit0="word 0 bit 20"], [gl_cv_cc_double_expbit0="word 1 bit 20"], [gl_cv_cc_double_expbit0="unknown"]) popdef([AC_MSG_RESULT_UNQUOTED])dnl popdef([AC_MSG_RESULT])dnl popdef([AC_MSG_CHECKING])dnl ]) ]) rm -f conftest.out ]) case "$gl_cv_cc_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word], [Define as the word index where to find the exponent of 'double'.]) AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit], [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/exponentf.m4����������������������������������������������������������0000644�0001750�0001750�00000005463�14557510506�014276� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exponentf.m4 serial 3 dnl Copyright (C) 2007-2008, 2010-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_FLOAT_EXPONENT_LOCATION], [ AC_CACHE_CHECK([where to find the exponent in a 'float'], [gl_cv_cc_float_expbit0], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (float x) { memory_float m; size_t i; /* Clear it first, in case sizeof (float) < sizeof (memory_float). */ memset (&m, 0, sizeof (memory_float)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25f); add_to_ored_words (0.5f); add_to_ored_words (1.0f); add_to_ored_words (2.0f); add_to_ored_words (4.0f); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } ]])], [gl_cv_cc_float_expbit0=`cat conftest.out`], [gl_cv_cc_float_expbit0="unknown"], [gl_cv_cc_float_expbit0="word 0 bit 23"]) rm -f conftest.out ]) case "$gl_cv_cc_float_expbit0" in word*bit*) word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([FLT_EXPBIT0_WORD], [$word], [Define as the word index where to find the exponent of 'float'.]) AC_DEFINE_UNQUOTED([FLT_EXPBIT0_BIT], [$bit], [Define as the bit index in the word where to find bit 0 of the exponent of 'float'.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/exponentl.m4����������������������������������������������������������0000644�0001750�0001750�00000007160�14557510506�014300� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exponentl.m4 serial 7 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_LONG_DOUBLE_EXPONENT_LOCATION], [ AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([where to find the exponent in a 'long double'], [gl_cv_cc_long_double_expbit0], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (long double *x) { memory_long_double m; size_t i; /* Clear it first, in case sizeof (long double) < sizeof (memory_long_double). */ memset (&m, 0, sizeof (memory_long_double)); m.value = *x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { static long double samples[5] = { 0.25L, 0.5L, 1.0L, 2.0L, 4.0L }; size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; for (j = 0; j < 5; j++) add_to_ored_words (&samples[j]); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } ]])], [gl_cv_cc_long_double_expbit0=`cat conftest.out`], [gl_cv_cc_long_double_expbit0="unknown"], [ dnl When cross-compiling, in general we don't know. It depends on the dnl ABI and compiler version. There are too many cases. gl_cv_cc_long_double_expbit0="unknown" case "$host_os" in mingw* | windows*) # On native Windows (little-endian), we know the result # in two cases: mingw, MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_cc_long_double_expbit0="word 2 bit 0"]) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_cc_long_double_expbit0="word 1 bit 20"]) ;; esac ]) rm -f conftest.out ]) case "$gl_cv_cc_long_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_WORD], [$word], [Define as the word index where to find the exponent of 'long double'.]) AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_BIT], [$bit], [Define as the bit index in the word where to find bit 0 of the exponent of 'long double'.]) ;; esac ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/extensions.m4���������������������������������������������������������0000644�0001750�0001750�00000020626�14557510506�014465� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 23 -*- Autoconf -*- # Enable extensions on systems that normally disable them. # Copyright (C) 2003, 2006-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl Define to empty for the benefit of Autoconf 2.69 and earlier, so that dnl AC_USE_SYSTEM_EXTENSIONS (below) can be used unchanged from Autoconf 2.70+. m4_ifndef([AC_CHECK_INCLUDES_DEFAULT], [AC_DEFUN([AC_CHECK_INCLUDES_DEFAULT], [])]) # This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git # Autoconf. Perhaps we can remove this once we can assume Autoconf # is recent-enough everywhere, but since Autoconf mutates rapidly # enough in this area it's likely we'll need to redefine # AC_USE_SYSTEM_EXTENSIONS for quite some time. # If autoconf reports a warning # warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # the fix is # 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked # but always AC_REQUIREd, # 2) to ensure that for each occurrence of # AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) # or # AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # the corresponding gnulib module description has 'extensions' among # its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS # invocation occurs in gl_EARLY, not in gl_INIT. m4_version_prereq([2.72], [], [ # AC_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. # We unconditionally define as many of the known feature-enabling # as possible, reserving conditional behavior for macros that are # known to cause problems on some platforms (such as __EXTENSIONS__). AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], [AC_BEFORE([$0], [AC_PREPROC_IFELSE])dnl AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl AC_BEFORE([$0], [AC_LINK_IFELSE])dnl AC_BEFORE([$0], [AC_RUN_IFELSE])dnl AC_BEFORE([$0], [AC_CHECK_INCLUDES_DEFAULT])dnl dnl #undef in AH_VERBATIM gets replaced with #define by AC_DEFINE. dnl Use a different key than __EXTENSIONS__, as that name broke existing dnl configure.ac when using autoheader 2.62. dnl The macros below are in alphabetical order ignoring leading _ or __ dnl prefixes. AH_VERBATIM([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Identify the host operating system as Minix. This macro does not affect the system headers' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX # undef _MINIX #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE # undef _POSIX_SOURCE #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE # undef _POSIX_1_SOURCE #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by C23 Annex F. */ #ifndef __STDC_WANT_IEC_60559_EXT__ # undef __STDC_WANT_IEC_60559_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif ])dnl AC_REQUIRE([AC_CHECK_INCLUDES_DEFAULT])dnl _AC_CHECK_HEADER_ONCE([wchar.h]) _AC_CHECK_HEADER_ONCE([minix/config.h]) dnl Defining __EXTENSIONS__ may break the system headers on some systems. dnl (FIXME: Which ones?) AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], [ac_cv_safe_to_define___extensions__], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ # define __EXTENSIONS__ 1 ]AC_INCLUDES_DEFAULT])], [ac_cv_safe_to_define___extensions__=yes], [ac_cv_safe_to_define___extensions__=no])]) dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to dnl 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. dnl But defining _XOPEN_SOURCE may turn *off* extensions on platforms dnl not covered by turn-on-extensions macros (notably Dragonfly, Free, dnl and OpenBSD, which don't have any equivalent of _NETBSD_SOURCE) so dnl it should only be defined when necessary. AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined], [ac_cv_should_define__xopen_source], [ac_cv_should_define__xopen_source=no AS_IF([test $ac_cv_header_wchar_h = yes], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <wchar.h> mbstate_t x;]])], [], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #define _XOPEN_SOURCE 500 #include <wchar.h> mbstate_t x;]])], [ac_cv_should_define__xopen_source=yes])])])]) AC_DEFINE([_ALL_SOURCE]) AC_DEFINE([_DARWIN_C_SOURCE]) AC_DEFINE([_GNU_SOURCE]) AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API]) AC_DEFINE([_NETBSD_SOURCE]) AC_DEFINE([_OPENBSD_SOURCE]) AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__]) AC_DEFINE([__STDC_WANT_LIB_EXT2__]) AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__]) AC_DEFINE([_TANDEM_SOURCE]) AS_IF([test $ac_cv_header_minix_config_h = yes], [MINIX=yes AC_DEFINE([_MINIX]) AC_DEFINE([_POSIX_SOURCE]) AC_DEFINE([_POSIX_1_SOURCE], [2])], [MINIX=]) AS_IF([test $ac_cv_safe_to_define___extensions__ = yes], [AC_DEFINE([__EXTENSIONS__])]) AS_IF([test $ac_cv_should_define__xopen_source = yes], [AC_DEFINE([_XOPEN_SOURCE], [500])]) ])# AC_USE_SYSTEM_EXTENSIONS ]) # gl_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl On OpenBSD 6.8 with GCC, the include files contain a couple of dnl definitions that are only activated with an explicit -D_ISOC11_SOURCE. dnl That's because this version of GCC (4.2.1) supports the option dnl '-std=gnu99' but not the option '-std=gnu11'. AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in openbsd*) AC_DEFINE([_ISOC11_SOURCE], [1], [Define to enable the declarations of ISO C 11 types and functions.]) ;; esac ]) ����������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/extern-inline.m4������������������������������������������������������0000644�0001750�0001750�00000013072�14557510506�015044� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl 'extern inline' a la ISO C99. dnl Copyright 2012-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_EXTERN_INLINE], [ AC_CACHE_CHECK([whether ctype.h defines __header_inline], [gl_cv_have___header_inline], [AC_PREPROC_IFELSE( [AC_LANG_SOURCE([[#include <ctype.h> #ifndef __header_inline #error "<ctype.h> does not define __header_inline" #endif ]])], [gl_cv_have___header_inline=yes], [gl_cv_have___header_inline=no])]) if test "$gl_cv_have___header_inline" = yes; then AC_DEFINE([HAVE___HEADER_INLINE], [1], [Define to 1 if ctype.h defines __header_inline.]) fi AH_VERBATIM([HAVE___HEADER_INLINE_1], [/* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>. Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Oracle Developer Studio 12.6 (Sun C 5.15 SunOS_sparc 2017/05/30). Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like <ctype.h>. For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions (ISO C 99 section 6.7.4.(3). This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see <https://trac.macports.org/ticket/41033>. Assume DragonFly and FreeBSD will be similar. GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. It defines a macro __GNUC_STDC_INLINE__ to indicate this situation or a macro __GNUC_GNU_INLINE__ to indicate the opposite situation. GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline semantics but warns, unless -fgnu89-inline is used: warning: C99 inline functions are not supported; using GNU89 warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined HAVE___HEADER_INLINE \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? (defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ && !defined __PCC__) \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined __PCC__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE _GL_UNUSED static # define _GL_EXTERN_INLINE _GL_UNUSED static #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/faccessat.m4����������������������������������������������������������0000644�0001750�0001750�00000001772�14557510506�014223� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 12 # See if we need to provide faccessat replacement. dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_FACCESSAT], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) dnl Persuade glibc <unistd.h> to declare faccessat(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) gl_CHECK_FUNCS_ANDROID([faccessat], [[#include <unistd.h>]]) if test $ac_cv_func_faccessat = no; then HAVE_FACCESSAT=0 case "$gl_cv_onwards_func_faccessat" in future*) REPLACE_FACCESSAT=1 ;; esac else case $gl_cv_func_lstat_dereferences_slashed_symlink in *yes) ;; *) REPLACE_FACCESSAT=1 ;; esac fi ]) # Prerequisites of lib/faccessat.c. AC_DEFUN([gl_PREREQ_FACCESSAT], [ AC_CHECK_FUNCS([access]) ]) ������gnuastro-0.22/bootstrapped/m4/fchdir.m4�������������������������������������������������������������0000644�0001750�0001750�00000005442�14557510506�013524� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fchdir.m4 serial 32 dnl Copyright (C) 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FCHDIR], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([fchdir]) if test $ac_cv_have_decl_fchdir = no; then HAVE_DECL_FCHDIR=0 fi AC_REQUIRE([gl_TEST_FCHDIR]) if test $HAVE_FCHDIR = 1; then AC_REQUIRE([gl_DIRENT_DIR]) if test $DIR_HAS_FD_MEMBER = 0; then dnl fchdir() should be replaced if dirfd() does not work. REPLACE_FCHDIR=1 fi fi if test $HAVE_FCHDIR = 0 || test $REPLACE_FCHDIR = 1; then AC_DEFINE([REPLACE_FCHDIR], [1], [Define to 1 if gnulib's fchdir() replacement is used.]) dnl We must also replace anything that can manipulate a directory fd, dnl to keep our bookkeeping up-to-date. We don't have to replace dnl fstatat, since no platform has fstatat but lacks fchdir. AC_CACHE_CHECK([whether open can visit directories], [gl_cv_func_open_directory_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <fcntl.h> ]GL_MDA_DEFINES], [[return open(".", O_RDONLY) < 0;]])], [gl_cv_func_open_directory_works=yes], [gl_cv_func_open_directory_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_open_directory_works="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_open_directory_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_open_directory_works="guessing yes" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_open_directory_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_open_directory_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_open_directory_works" in *yes) ;; *) AC_DEFINE([REPLACE_OPEN_DIRECTORY], [1], [Define to 1 if open() should work around the inability to open a directory.]) ;; esac fi ]) # Determine whether to use the overrides in lib/fchdir.c. AC_DEFUN([gl_TEST_FCHDIR], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([fchdir]) if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi ]) # Prerequisites of lib/fchdir.c. AC_DEFUN([gl_PREREQ_FCHDIR], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/fcntl-o.m4������������������������������������������������������������0000644�0001750�0001750�00000011277�14557510506�013632� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fcntl-o.m4 serial 8 dnl Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_PREREQ([2.60]) # Test whether the flags O_NOATIME and O_NOFOLLOW actually work. # Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. # Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. AC_DEFUN([gl_FCNTL_O_FLAGS], [ dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_FUNCS_ONCE([symlink]) AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/stat.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> # include <stdlib.h> # defined sleep(n) _sleep ((n) * 1000) #endif #include <fcntl.h> ]GL_MDA_DEFINES[ #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; ]], [[ int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result;]])], [gl_cv_header_working_fcntl_h=yes], [case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac], [case "$host_os" in # Guess 'no' on native Windows. mingw* | windows*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac ]) ]) case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], [Define to 1 if O_NOATIME works.]) case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], [Define to 1 if O_NOFOLLOW works.]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/fcntl.m4��������������������������������������������������������������0000644�0001750�0001750�00000012172�14557510506�013371� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fcntl.m4 serial 11 dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # For now, this module ensures that fcntl() # - supports F_DUPFD correctly # - supports or emulates F_DUPFD_CLOEXEC # - supports F_GETFD # Still to be ported to mingw: # - F_SETFD # - F_GETFL, F_SETFL # - F_GETOWN, F_SETOWN # - F_GETLK, F_SETLK, F_SETLKW AC_DEFUN([gl_FUNC_FCNTL], [ dnl Persuade glibc to expose F_DUPFD_CLOEXEC. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([fcntl]) if test $ac_cv_func_fcntl = no; then gl_REPLACE_FCNTL else dnl cygwin 1.5.x F_DUPFD has wrong errno, and allows negative target dnl haiku alpha 2 F_DUPFD has wrong errno AC_CACHE_CHECK([whether fcntl handles F_DUPFD correctly], [gl_cv_func_fcntl_f_dupfd_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> ]GL_MDA_DEFINES[ #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif ]], [[int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; if (errno != EINVAL) result |= 2; if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; if (errno != EINVAL) result |= 8; /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ { int fd; fd = open (".", O_RDONLY); if (fd == -1) result |= 16; else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) result |= 32; close (fd); } return result;]])], [gl_cv_func_fcntl_f_dupfd_works=yes], [gl_cv_func_fcntl_f_dupfd_works=no], [case $host_os in aix* | cygwin* | haiku*) gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; esac])]) case $gl_cv_func_fcntl_f_dupfd_works in *yes) ;; *) gl_REPLACE_FCNTL AC_DEFINE([FCNTL_DUPFD_BUGGY], [1], [Define this to 1 if F_DUPFD behavior does not match POSIX]) ;; esac dnl Many systems lack F_DUPFD_CLOEXEC. dnl NetBSD 9.0 declares F_DUPFD_CLOEXEC but it works only like F_DUPFD. AC_CACHE_CHECK([whether fcntl understands F_DUPFD_CLOEXEC], [gl_cv_func_fcntl_f_dupfd_cloexec], [AC_RUN_IFELSE( [AC_LANG_SOURCE( [[#include <fcntl.h> #include <unistd.h> int main (int argc, char *argv[]) { if (argc == 1) /* parent process */ { if (fcntl (1, F_DUPFD_CLOEXEC, 10) < 0) return 1; return execl ("./conftest", "./conftest", "child", NULL); } else /* child process */ return (fcntl (10, F_GETFL) < 0 ? 0 : 42); } ]]) ], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #ifdef __linux__ /* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace it to support the semantics on older kernels that failed with EINVAL. */ choke me #endif ]])], [gl_cv_func_fcntl_f_dupfd_cloexec=yes], [gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"]) ], [gl_cv_func_fcntl_f_dupfd_cloexec=no], [case "$host_os" in # Guess no on NetBSD. netbsd*) gl_cv_func_fcntl_f_dupfd_cloexec="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_cloexec="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_fcntl_f_dupfd_cloexec" in *yes) ;; *) gl_REPLACE_FCNTL dnl No witness macro needed for this bug. ;; esac fi dnl Replace fcntl() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then gl_REPLACE_FCNTL fi ]) ]) AC_DEFUN([gl_REPLACE_FCNTL], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([fcntl]) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/fcntl_h.m4������������������������������������������������������������0000644�0001750�0001750�00000005206�14557510506�013700� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 20 # Configure fcntl.h. dnl Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN_ONCE([gl_FCNTL_H], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([gl_FCNTL_O_FLAGS]) gl_NEXT_HEADERS([fcntl.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, if it is not common dnl enough to be declared everywhere. gl_WARN_ON_USE_PREPARE([[#include <fcntl.h> ]], [fcntl openat]) ]) # gl_FCNTL_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_FCNTL_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_FCNTL_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_FCNTL_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_FCNTL_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CREAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCNTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NONBLOCKING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPENAT]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CREAT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_OPEN], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_FCNTL_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) ]) AC_DEFUN([gl_FCNTL_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCNTL=1; AC_SUBST([HAVE_FCNTL]) HAVE_OPENAT=1; AC_SUBST([HAVE_OPENAT]) REPLACE_CREAT=0; AC_SUBST([REPLACE_CREAT]) REPLACE_FCNTL=0; AC_SUBST([REPLACE_FCNTL]) REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN]) REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/fdopen.m4�������������������������������������������������������������0000644�0001750�0001750�00000002645�14557510506�013542� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fdopen.m4 serial 6 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FDOPEN], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_FDOPEN=1 fi ]) if test $REPLACE_FDOPEN = 0; then dnl Test whether fdopen() sets errno when it fails due to a bad fd argument. AC_CACHE_CHECK([whether fdopen sets errno], [gl_cv_func_fdopen_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <errno.h> ]GL_MDA_DEFINES[ int main (void) { FILE *fp; errno = 0; fp = fdopen (-1, "r"); if (fp == NULL && errno == 0) return 1; return 0; }]])], [gl_cv_func_fdopen_works=yes], [gl_cv_func_fdopen_works=no], [case "$host_os" in mingw* | windows*) gl_cv_func_fdopen_works="guessing no" ;; *) gl_cv_func_fdopen_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_fdopen_works" in *no) REPLACE_FDOPEN=1 ;; esac fi ]) dnl Prerequisites of lib/fdopen.c. AC_DEFUN([gl_PREREQ_FDOPEN], []) �������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/filenamecat.m4��������������������������������������������������������0000644�0001750�0001750�00000001011�14557510506�014521� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# filenamecat.m4 serial 12 dnl Copyright (C) 2002-2006, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FILE_NAME_CONCAT], [ AC_REQUIRE([gl_FILE_NAME_CONCAT_LGPL]) ]) AC_DEFUN([gl_FILE_NAME_CONCAT_LGPL], [ dnl Prerequisites of lib/filenamecat-lgpl.c. gl_CHECK_FUNCS_ANDROID([mempcpy], [[#include <string.h>]]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/flexmember.m4���������������������������������������������������������0000644�0001750�0001750�00000003254�14557510506�014412� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 # Check for flexible array member support. # Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. AC_DEFUN([AC_C_FLEXIBLE_ARRAY_MEMBER], [ AC_CACHE_CHECK([for flexible array member], ac_cv_c_flexmember, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> #include <stdio.h> #include <stddef.h> struct m { struct m *next, **list; char name[]; }; struct s { struct s *p; struct m *m; int n; double d[]; };]], [[int m = getchar (); size_t nbytes = offsetof (struct s, d) + m * sizeof (double); nbytes += sizeof (struct s) - 1; nbytes -= nbytes % sizeof (struct s); struct s *p = malloc (nbytes); p->p = p; p->m = NULL; p->d[0] = 0.0; return p->d != (double *) NULL;]])], [ac_cv_c_flexmember=yes], [ac_cv_c_flexmember=no])]) if test $ac_cv_c_flexmember = yes; then AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [], [Define to nothing if C supports flexible array members, and to 1 if it does not. That way, with a declaration like 'struct s { int n; short d@<:@FLEXIBLE_ARRAY_MEMBER@:>@; };', the struct hack can be used with pre-C99 compilers. Use 'FLEXSIZEOF (struct s, d, N * sizeof (short))' to calculate the size in bytes of such a struct containing an N-element array.]) else AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/float_h.m4������������������������������������������������������������0000644�0001750�0001750�00000005467�14557510506�013710� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# float_h.m4 serial 14 dnl Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FLOAT_H], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) GL_GENERATE_FLOAT_H=false REPLACE_FLOAT_LDBL=0 case "$host_os" in aix* | beos* | openbsd* | mirbsd* | irix*) GL_GENERATE_FLOAT_H=true ;; freebsd* | dragonfly*) case "$host_cpu" in changequote(,)dnl i[34567]86 ) changequote([,])dnl GL_GENERATE_FLOAT_H=true ;; x86_64 ) # On x86_64 systems, the C compiler may still be generating # 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __x86_64__ || defined __amd64__ int ok; #else error fail #endif ]])], [], [GL_GENERATE_FLOAT_H=true]) ;; esac ;; linux*) case "$host_cpu" in powerpc*) GL_GENERATE_FLOAT_H=true ;; esac ;; esac case "$host_os" in aix* | freebsd* | dragonfly* | linux*) if $GL_GENERATE_FLOAT_H; then REPLACE_FLOAT_LDBL=1 fi ;; esac dnl Test against glibc-2.7 Linux/SPARC64 bug. REPLACE_ITOLD=0 AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works], [gl_cv_func_itold_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ int i = -1; volatile long double ld; int main () { ld += i * 1.0L; if (ld > 0) return 1; return 0; }]])], [gl_cv_func_itold_works=yes], [gl_cv_func_itold_works=no], [case "$host" in sparc*-*-linux*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_func_itold_works="guessing no"], [gl_cv_func_itold_works="guessing yes"]) ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_itold_works="guessing yes" ;; *) gl_cv_func_itold_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_itold_works" in *no) REPLACE_ITOLD=1 dnl We add the workaround to <float.h> but also to <math.h>, dnl to increase the chances that the fix function gets pulled in. GL_GENERATE_FLOAT_H=true ;; esac if $GL_GENERATE_FLOAT_H; then gl_NEXT_HEADERS([float.h]) fi AC_SUBST([REPLACE_ITOLD]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/fpieee.m4�������������������������������������������������������������0000644�0001750�0001750�00000004340�14557510506�013516� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fpieee.m4 serial 2 -*- coding: utf-8 -*- dnl Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl IEEE 754 standardized three items: dnl - The formats of single-float and double-float - nowadays commonly dnl available as 'float' and 'double' in C and C++. dnl No autoconf test needed. dnl - The overflow and division by zero behaviour: The result are values dnl '±Inf' and 'NaN', rather than exceptions as it was before. dnl This file provides an autoconf macro for ensuring this behaviour of dnl floating-point operations. dnl - A set of conditions (overflow, underflow, inexact, etc.) which can dnl be configured to trigger an exception. dnl This cannot be done in a portable way: it depends on the compiler, dnl libc, kernel, and CPU. No autoconf macro is provided for this. dnl Ensure non-trapping behaviour of floating-point overflow and dnl floating-point division by zero. dnl (For integer overflow, see gcc's -ftrapv option; for integer division by dnl zero, see the autoconf macro in intdiv0.m4.) AC_DEFUN([gl_FP_IEEE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) # IEEE behaviour is the default on all CPUs except Alpha and SH # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 # and the GCC 4.1.2 manual). case "$host_cpu" in alpha*) # On Alpha systems, a compiler option provides the behaviour. # See the ieee(3) manual page, also available at # <https://backdrift.org/man/tru64/man3/ieee.3.html> if test -n "$GCC"; then # GCC has the option -mieee. # For full IEEE compliance (rarely needed), use option -mieee-with-inexact. CPPFLAGS="$CPPFLAGS -mieee" else # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact. # For full IEEE compliance (rarely needed), use option -ieee_with_inexact. CPPFLAGS="$CPPFLAGS -ieee" fi ;; sh*) if test -n "$GCC"; then # GCC has the option -mieee. CPPFLAGS="$CPPFLAGS -mieee" fi ;; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/free.m4���������������������������������������������������������������0000644�0001750�0001750�00000003710�14557510506�013202� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# free.m4 serial 6 # Copyright (C) 2003-2005, 2009-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert and Bruno Haible. AC_DEFUN([gl_FUNC_FREE], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl In the next release of POSIX, free must preserve errno. dnl https://www.austingroupbugs.net/view.php?id=385 dnl https://sourceware.org/bugzilla/show_bug.cgi?id=17924 dnl So far, we know of three platforms that do this: dnl * glibc >= 2.33, thanks to the fix for this bug: dnl <https://sourceware.org/bugzilla/show_bug.cgi?id=17924> dnl * OpenBSD >= 4.5, thanks to this commit: dnl <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c.diff?r1=1.100&r2=1.101&f=h> dnl * Solaris, because its malloc() implementation is based on brk(), dnl not mmap(); hence its free() implementation makes no system calls. dnl For other platforms, you can only be sure if they state it in their dnl documentation, or by code inspection of the free() implementation in libc. AC_CACHE_CHECK([whether free is known to preserve errno], [gl_cv_func_free_preserves_errno], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[#if 2 < __GLIBC__ + (33 <= __GLIBC_MINOR__) #elif defined __OpenBSD__ #elif defined __sun #else #error "'free' is not known to preserve errno" #endif ]])], [gl_cv_func_free_preserves_errno=yes], [gl_cv_func_free_preserves_errno=no]) ]) case $gl_cv_func_free_preserves_errno in *yes) AC_DEFINE([HAVE_FREE_POSIX], [1], [Define if the 'free' function is guaranteed to preserve errno.]) ;; *) REPLACE_FREE=1 ;; esac ]) # Prerequisites of lib/free.c. AC_DEFUN([gl_PREREQ_FREE], [:]) ��������������������������������������������������������gnuastro-0.22/bootstrapped/m4/fstat.m4��������������������������������������������������������������0000644�0001750�0001750�00000002157�14557510506�013406� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fstat.m4 serial 10 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FSTAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) case "$host_os" in darwin* | mingw* | windows* | solaris*) dnl macOS and Solaris stat can return a negative tv_nsec. dnl On MinGW, the original stat() returns st_atime, st_mtime, dnl st_ctime values that are affected by the time zone. REPLACE_FSTAT=1 ;; esac dnl Replace fstat() for supporting the gnulib-defined open() on directories. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then case "$gl_cv_func_open_directory_works" in *yes) ;; *) REPLACE_FSTAT=1 ;; esac fi ]) ]) # Prerequisites of lib/fstat.c and lib/stat-w32.c. AC_DEFUN([gl_PREREQ_FSTAT], [ AC_REQUIRE([gl_SYS_STAT_H]) AC_REQUIRE([gl_PREREQ_STAT_W32]) : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/fstatat.m4������������������������������������������������������������0000644�0001750�0001750�00000003764�14557510506�013740� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fstatat.m4 serial 5 dnl Copyright (C) 2004-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. # If we have the fstatat function, and it has the bug (in AIX 7.1) # that it does not fill in st_size correctly, use the replacement function. AC_DEFUN([gl_FUNC_FSTATAT], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([fstatat]) if test $ac_cv_func_fstatat = no; then HAVE_FSTATAT=0 else dnl Test for an AIX 7.1 bug; see dnl <https://lists.gnu.org/r/bug-tar/2011-09/msg00015.html>. AC_CACHE_CHECK([whether fstatat (..., 0) works], [gl_cv_func_fstatat_zero_flag], [AC_RUN_IFELSE( [AC_LANG_SOURCE( [[ #include <fcntl.h> #include <sys/stat.h> int main (void) { struct stat a; return fstatat (AT_FDCWD, ".", &a, 0) != 0; } ]])], [gl_cv_func_fstatat_zero_flag=yes], [gl_cv_func_fstatat_zero_flag=no], [case "$host_os" in aix*) gl_cv_func_fstatat_zero_flag="guessing no";; *) gl_cv_func_fstatat_zero_flag="guessing yes";; esac ]) ]) case $gl_cv_func_fstatat_zero_flag+$gl_cv_func_lstat_dereferences_slashed_symlink in *yes+*yes) ;; *) REPLACE_FSTATAT=1 ;; esac case $host_os in darwin* | solaris*) REPLACE_FSTATAT=1 ;; esac case $REPLACE_FSTATAT,$gl_cv_func_fstatat_zero_flag in 1,*yes) AC_DEFINE([HAVE_WORKING_FSTATAT_ZERO_FLAG], [1], [Define to 1 if fstatat (..., 0) works. For example, it does not work in AIX 7.1.]) ;; esac fi ]) ������������gnuastro-0.22/bootstrapped/m4/ftruncate.m4����������������������������������������������������������0000644�0001750�0001750�00000002612�14557510506�014254� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 24 # See if we need to emulate a missing ftruncate function using _chsize. # Copyright (C) 2000-2001, 2003-2007, 2009-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FTRUNCATE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_CHECK_FUNCS_ANDROID([ftruncate], [[#include <unistd.h>]]) if test $ac_cv_func_ftruncate = yes; then m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw* | windows*) dnl Native Windows, and Large File Support is requested. dnl The MSVCRT _chsize() function only accepts a 32-bit file size, dnl and the mingw64 ftruncate64() function is unreliable (it may dnl delete the file, see dnl <https://web.archive.org/web/20160425005423/http://mingw-w64.sourcearchive.com/documentation/2.0-1/ftruncate64_8c_source.html>). dnl Use gnulib's ftruncate() implementation instead. REPLACE_FTRUNCATE=1 ;; esac ], [ : ]) else HAVE_FTRUNCATE=0 case "$gl_cv_onwards_func_ftruncate" in future*) REPLACE_FTRUNCATE=1 ;; esac fi ]) # Prerequisites of lib/ftruncate.c. AC_DEFUN([gl_PREREQ_FTRUNCATE], [ AC_CHECK_FUNCS([_chsize]) ]) ����������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/func.m4���������������������������������������������������������������0000644�0001750�0001750�00000001313�14557510506�013211� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# func.m4 serial 2 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Simon Josefsson AC_DEFUN([gl_FUNC], [ AC_CACHE_CHECK([whether __func__ is available], [gl_cv_var_func], AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[const char *str = __func__;]])], [gl_cv_var_func=yes], [gl_cv_var_func=no])) if test "$gl_cv_var_func" != yes; then AC_DEFINE([__func__], ["<unknown function>"], [Define as a replacement for the ISO C99 __func__ variable.]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/getcwd.m4�������������������������������������������������������������0000644�0001750�0001750�00000012514�14557510506�013540� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getcwd.m4 - check for working getcwd that is compatible with glibc # Copyright (C) 2001, 2003-2007, 2009-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. # serial 21 AC_DEFUN([gl_FUNC_GETCWD_NULL], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether getcwd (NULL, 0) allocates memory for result], [gl_cv_func_getcwd_null], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ # include <stdlib.h> # if HAVE_UNISTD_H # include <unistd.h> # else /* on Windows with MSVC */ # include <direct.h> # endif ]GL_MDA_DEFINES[ # ifndef getcwd char *getcwd (); # endif ]], [[ #if defined _WIN32 && ! defined __CYGWIN__ /* mingw cwd does not start with '/', but _getcwd does allocate. However, mingw fails to honor non-zero size. */ #else if (chdir ("/") != 0) return 1; else { char *f = getcwd (NULL, 0); if (! f) return 2; if (f[0] != '/') { free (f); return 3; } if (f[1] != '\0') { free (f); return 4; } free (f); return 0; } #endif ]])], [gl_cv_func_getcwd_null=yes], [gl_cv_func_getcwd_null=no], [[case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on Cygwin. cygwin*) gl_cv_func_getcwd_null="guessing yes";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_getcwd_null="$gl_cross_guess_normal";; esac ]])]) ]) AC_DEFUN([gl_FUNC_GETCWD_SIGNATURE], [ AC_CACHE_CHECK([for getcwd with POSIX signature], [gl_cv_func_getcwd_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]GL_MDA_DEFINES], [[extern #ifdef __cplusplus "C" #endif char *getcwd (char *, size_t); ]]) ], [gl_cv_func_getcwd_posix_signature=yes], [gl_cv_func_getcwd_posix_signature=no]) ]) ]) dnl Guarantee that getcwd will malloc with a NULL first argument. Assumes dnl that either the system getcwd is robust, or that calling code is okay dnl with spurious failures when run from a directory with an absolute name dnl larger than 4k bytes. dnl dnl Assumes that getcwd exists; if you are worried about obsolete dnl platforms that lacked getcwd(), then you need to use the GPL module. AC_DEFUN([gl_FUNC_GETCWD_LGPL], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_GETCWD_NULL]) AC_REQUIRE([gl_FUNC_GETCWD_SIGNATURE]) case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_posix_signature in *yes,yes) ;; *) dnl Minimal replacement lib/getcwd-lgpl.c. REPLACE_GETCWD=1 ;; esac ]) dnl Check for all known getcwd bugs; useful for a program likely to be dnl executed from an arbitrary location. AC_DEFUN([gl_FUNC_GETCWD], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_GETCWD_NULL]) AC_REQUIRE([gl_FUNC_GETCWD_SIGNATURE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_abort_bug=no case "$host_os" in mingw* | windows*) gl_cv_func_getcwd_path_max=yes ;; *) gl_FUNC_GETCWD_PATH_MAX case "$gl_cv_func_getcwd_null" in *yes) gl_FUNC_GETCWD_ABORT_BUG([gl_abort_bug=yes]) ;; esac ;; esac dnl Define HAVE_MINIMALLY_WORKING_GETCWD and HAVE_PARTLY_WORKING_GETCWD dnl if appropriate. case "$gl_cv_func_getcwd_path_max" in *"no" | *"no, it has the AIX bug") ;; *) AC_DEFINE([HAVE_MINIMALLY_WORKING_GETCWD], [1], [Define to 1 if getcwd minimally works, that is, its result can be trusted when it succeeds.]) ;; esac case "$gl_cv_func_getcwd_path_max" in *"no, but it is partly working") AC_DEFINE([HAVE_PARTLY_WORKING_GETCWD], [1], [Define to 1 if getcwd works, except it sometimes fails when it shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT.]) ;; *"yes, but with shorter paths") AC_DEFINE([HAVE_GETCWD_SHORTER], [1], [Define to 1 if getcwd works, but with shorter paths than is generally tested with the replacement.]) ;; esac if { case "$gl_cv_func_getcwd_null" in *yes) false;; *) true;; esac; } \ || test $gl_cv_func_getcwd_posix_signature != yes \ || { case "$gl_cv_func_getcwd_path_max" in *yes*) false;; *) true;; esac; } \ || test $gl_abort_bug = yes; then REPLACE_GETCWD=1 fi ]) # Prerequisites of lib/getcwd.c, when full replacement is in effect. AC_DEFUN([gl_PREREQ_GETCWD], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO]) : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/getdelim.m4�����������������������������������������������������������0000644�0001750�0001750�00000006756�14557510506�014070� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getdelim.m4 serial 19 dnl Copyright (C) 2005-2007, 2009-2024 Free Software Foundation, Inc. dnl dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.59]) AC_DEFUN([gl_FUNC_GETDELIM], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl Persuade glibc <stdio.h> to declare getdelim(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([getdelim]) gl_CHECK_FUNCS_ANDROID([getdelim], [[#include <stdio.h>]]) if test $ac_cv_func_getdelim = yes; then HAVE_GETDELIM=1 dnl Found it in some library. Verify that it works. AC_CACHE_CHECK([for working getdelim function], [gl_cv_func_working_getdelim], [case "$host_os" in darwin*) dnl On macOS 10.13, valgrind detected an out-of-bounds read during dnl the GNU sed test suite: dnl Invalid read of size 16 dnl at 0x100EE6A05: _platform_memchr$VARIANT$Base (in /usr/lib/system/libsystem_platform.dylib) dnl by 0x100B7B0BD: getdelim (in /usr/lib/system/libsystem_c.dylib) dnl by 0x10000B0BE: ck_getdelim (utils.c:254) gl_cv_func_working_getdelim=no ;; *) echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data AC_RUN_IFELSE([AC_LANG_SOURCE([[ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getdelim (&line, &siz, '\n', in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getdelim (&line, &siz, '\n', in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } ]])], [gl_cv_func_working_getdelim=yes], [gl_cv_func_working_getdelim=no], [dnl We're cross compiling. dnl Guess it works on glibc2 systems and musl systems. AC_EGREP_CPP([Lucky GNU user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [gl_cv_func_working_getdelim="guessing yes"], [case "$host_os" in *-musl* | midipix*) gl_cv_func_working_getdelim="guessing yes" ;; *) gl_cv_func_working_getdelim="$gl_cross_guess_normal" ;; esac ]) ]) ;; esac ]) case "$gl_cv_func_working_getdelim" in *yes) ;; *) REPLACE_GETDELIM=1 ;; esac else HAVE_GETDELIM=0 case "$gl_cv_onwards_func_getdelim" in future*) REPLACE_GETDELIM=1 ;; esac fi if test $ac_cv_have_decl_getdelim = no; then HAVE_DECL_GETDELIM=0 fi ]) # Prerequisites of lib/getdelim.c. AC_DEFUN([gl_PREREQ_GETDELIM], [ AC_CHECK_FUNCS([flockfile funlockfile]) AC_CHECK_DECLS([getc_unlocked]) ]) ������������������gnuastro-0.22/bootstrapped/m4/getdtablesize.m4������������������������������������������������������0000644�0001750�0001750�00000005045�14557510506�015112� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getdtablesize.m4 serial 8 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETDTABLESIZE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([getdtablesize]) AC_CHECK_DECLS_ONCE([getdtablesize]) if test $ac_cv_func_getdtablesize = yes && test $ac_cv_have_decl_getdtablesize = yes; then AC_CACHE_CHECK([whether getdtablesize works], [gl_cv_func_getdtablesize_works], [dnl There are two concepts: the "maximum possible file descriptor value + 1" dnl and the "maximum number of open file descriptors in a process". dnl Per SUSv2 and POSIX, getdtablesize() should return the first one. dnl On most platforms, the first and the second concept are the same. dnl On OpenVMS, however, they are different and getdtablesize() returns dnl the second one; thus the test below fails. But we don't care dnl because there's no good way to write a replacement getdtablesize(). case "$host_os" in vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; *) dnl Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft dnl limit up to an unchangeable hard limit; all other platforms dnl correctly require setrlimit before getdtablesize() can report dnl a larger value. AC_RUN_IFELSE([ AC_LANG_PROGRAM( [[#include <unistd.h>] GL_MDA_DEFINES ], [[int size = getdtablesize(); if (dup2 (0, getdtablesize()) != -1) return 1; if (size != getdtablesize()) return 2; ]])], [gl_cv_func_getdtablesize_works=yes], [gl_cv_func_getdtablesize_works=no], [case "$host_os" in cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows gl_cv_func_getdtablesize_works="guessing no" ;; *) gl_cv_func_getdtablesize_works="guessing yes" ;; esac ]) ;; esac ]) case "$gl_cv_func_getdtablesize_works" in *yes | "no (limitation)") ;; *) REPLACE_GETDTABLESIZE=1 ;; esac else HAVE_GETDTABLESIZE=0 fi ]) # Prerequisites of lib/getdtablesize.c. AC_DEFUN([gl_PREREQ_GETDTABLESIZE], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/getgroups.m4����������������������������������������������������������0000644�0001750�0001750�00000007751�14557510506�014311� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 25 dnl From Jim Meyering. dnl A wrapper around AC_FUNC_GETGROUPS. # Copyright (C) 1996-1997, 1999-2004, 2008-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This is taken from the following Autoconf patch: # https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=7fbb553727ed7e0e689a17594b58559ecf3ea6e9 AC_DEFUN([AC_FUNC_GETGROUPS], [ AC_REQUIRE([AC_TYPE_GETGROUPS])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CHECK_FUNC([getgroups]) # If we don't yet have getgroups, see if it's in -lbsd. # This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1. gl_saved_LIBS=$LIBS if test $ac_cv_func_getgroups = no; then AC_CHECK_LIB(bsd, getgroups, [GETGROUPS_LIB=-lbsd]) fi # Run the program to test the functionality of the system-supplied # getgroups function only if there is such a function. if test $ac_cv_func_getgroups = yes; then AC_CACHE_CHECK([for working getgroups], [ac_cv_func_getgroups_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[/* On NeXTstep 3.2, getgroups (0, 0) always fails. */ return getgroups (0, 0) == -1;]]) ], [ac_cv_func_getgroups_works=yes], [ac_cv_func_getgroups_works=no], [case "$host_os" in # (( # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_getgroups_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) ac_cv_func_getgroups_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_getgroups_works="$gl_cross_guess_normal" ;; esac ]) ]) else ac_cv_func_getgroups_works=no fi case "$ac_cv_func_getgroups_works" in *yes) AC_DEFINE([HAVE_GETGROUPS], [1], [Define to 1 if your system has a working `getgroups' function.]) ;; esac LIBS=$gl_saved_LIBS ])# AC_FUNC_GETGROUPS AC_DEFUN([gl_FUNC_GETGROUPS], [ AC_REQUIRE([AC_TYPE_GETGROUPS]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_FUNC_GETGROUPS if test $ac_cv_func_getgroups != yes; then HAVE_GETGROUPS=0 else if test "$ac_cv_type_getgroups" != gid_t \ || { case "$ac_cv_func_getgroups_works" in *yes) false;; *) true;; esac }; then REPLACE_GETGROUPS=1 AC_DEFINE([GETGROUPS_ZERO_BUG], [1], [Define this to 1 if getgroups(0,NULL) does not return the number of groups.]) else dnl Detect Mac OS X and FreeBSD bug; POSIX requires getgroups(-1,ptr) dnl to fail. AC_CACHE_CHECK([whether getgroups handles negative values], [gl_cv_func_getgroups_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], [[int size = getgroups (0, 0); gid_t *list = malloc (size * sizeof *list); int result = getgroups (-1, list) != -1; free (list); return result;]])], [gl_cv_func_getgroups_works=yes], [gl_cv_func_getgroups_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_getgroups_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_getgroups_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_getgroups_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_getgroups_works" in *yes) ;; *) REPLACE_GETGROUPS=1 ;; esac fi fi test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS" ]) �����������������������gnuastro-0.22/bootstrapped/m4/getline.m4������������������������������������������������������������0000644�0001750�0001750�00000006414�14557510506�013714� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getline.m4 serial 33 dnl Copyright (C) 1998-2003, 2005-2007, 2009-2024 Free Software Foundation, dnl Inc. dnl dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.59]) dnl See if there's a working, system-supplied version of the getline function. dnl We can't just do AC_REPLACE_FUNCS([getline]) because some systems dnl have a function by that name in -linet that doesn't have anything dnl to do with the function we need. AC_DEFUN([gl_FUNC_GETLINE], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <stdio.h> to declare getline(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([getline]) gl_CHECK_FUNCS_ANDROID([getline], [[#include <stdio.h>]]) if test $ac_cv_func_getline = yes; then dnl Found it in some library. Verify that it works. AC_CACHE_CHECK([for working getline function], [am_cv_func_working_getline], [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data AC_RUN_IFELSE([AC_LANG_SOURCE([[ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getline (&line, &siz, in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getline (&line, &siz, in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } ]])], [am_cv_func_working_getline=yes], [am_cv_func_working_getline=no], [dnl We're cross compiling. dnl Guess it works on glibc2 systems and musl systems. AC_EGREP_CPP([Lucky GNU user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [am_cv_func_working_getline="guessing yes"], [case "$host_os" in *-musl* | midipix*) am_cv_func_working_getline="guessing yes" ;; *) am_cv_func_working_getline="$gl_cross_guess_normal" ;; esac ]) ]) ]) else am_cv_func_working_getline=no case "$gl_cv_onwards_func_getline" in future*) REPLACE_GETLINE=1 ;; esac fi if test $ac_cv_have_decl_getline = no; then HAVE_DECL_GETLINE=0 fi case "$am_cv_func_working_getline" in *yes) ;; *) dnl Set REPLACE_GETLINE always: Even if we have not found the broken dnl getline function among $LIBS, it may exist in libinet and the dnl executable may be linked with -linet. REPLACE_GETLINE=1 ;; esac ]) # Prerequisites of lib/getline.c. AC_DEFUN([gl_PREREQ_GETLINE], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/getopt.m4�������������������������������������������������������������0000644�0001750�0001750�00000031473�14557510506�013572� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getopt.m4 serial 49 dnl Copyright (C) 2002-2006, 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Request a POSIX compliant getopt function. AC_DEFUN([gl_FUNC_GETOPT_POSIX], [ m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) dnl Other modules can request the gnulib implementation of the getopt dnl functions unconditionally, by defining gl_REPLACE_GETOPT_ALWAYS. dnl argp.m4 does this. m4_ifdef([gl_REPLACE_GETOPT_ALWAYS], [ REPLACE_GETOPT=1 ], [ REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then REPLACE_GETOPT=1 fi ]) GL_GENERATE_GETOPT_H=false GL_GENERATE_GETOPT_CDEFS_H=false if test $REPLACE_GETOPT = 1; then dnl Arrange for getopt.h to be created. gl_GETOPT_SUBSTITUTE_HEADER fi ]) # Request a POSIX compliant getopt function with GNU extensions (such as # options with optional arguments) and the functions getopt_long, # getopt_long_only. AC_DEFUN([gl_FUNC_GETOPT_GNU], [ dnl Set the variable gl_getopt_required, so that all invocations of dnl gl_GETOPT_CHECK_HEADERS in the scope of the current configure file dnl will check for getopt with GNU extensions. dnl This means that if one gnulib-tool invocation requests getopt-posix dnl and another gnulib-tool invocation requests getopt-gnu, it is as if dnl both had requested getopt-gnu. m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU]) dnl No need to invoke gl_FUNC_GETOPT_POSIX here; this is automatically dnl done through the module dependency getopt-gnu -> getopt-posix. ]) # Determine whether to replace the entire getopt facility. AC_DEFUN([gl_GETOPT_CHECK_HEADERS], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON dnl Persuade Solaris <unistd.h> to declare optarg, optind, opterr, optopt. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) gl_CHECK_NEXT_HEADERS([getopt.h]) if test $ac_cv_header_getopt_h = yes; then HAVE_GETOPT_H=1 else HAVE_GETOPT_H=0 fi AC_SUBST([HAVE_GETOPT_H]) gl_replace_getopt= dnl Test whether <getopt.h> is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes]) fi dnl Test whether the function getopt_long is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes]) fi dnl POSIX 2008 does not specify leading '+' behavior, but see dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on dnl the next version of POSIX. For now, we only guarantee leading '+' dnl behavior with getopt-gnu. if test -z "$gl_replace_getopt"; then AC_CACHE_CHECK([whether getopt is POSIX compatible], [gl_cv_func_getopt_posix], [ dnl Merging these three different test programs into a single one dnl would require a reset mechanism. On BSD systems, it can be done dnl through 'optreset'; on some others (glibc), it can be done by dnl setting 'optind' to 0; on others again (HP-UX, IRIX, OSF/1, dnl Solaris 9, musl libc), there is no such mechanism. if test $cross_compiling = no; then dnl Sanity check. Succeeds everywhere (except on MSVC, dnl which lacks <unistd.h> and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) if test $gl_cv_func_getopt_posix = maybe; then dnl Sanity check with '+'. Succeeds everywhere (except on MSVC, dnl which lacks <unistd.h> and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; c = getopt (7, argv, "+abp:q:"); if (!(c == -1)) return 4; if (!(strcmp (argv[0], "program") == 0)) return 5; if (!(strcmp (argv[1], "donald") == 0)) return 6; if (!(strcmp (argv[2], "-p") == 0)) return 7; if (!(strcmp (argv[3], "billy") == 0)) return 8; if (!(strcmp (argv[4], "duck") == 0)) return 9; if (!(strcmp (argv[5], "-a") == 0)) return 10; if (!(strcmp (argv[6], "bar") == 0)) return 11; if (!(optind == 1)) return 12; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) fi if test $gl_cv_func_getopt_posix = maybe; then dnl Detect Mac OS X 10.5, AIX 7.1, mingw bug. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; if (getopt (2, argv, "ab:") != 'a') return 13; if (getopt (2, argv, "ab:") != '?') return 14; if (optopt != 'b') return 15; if (optind != 2) return 16; return 0; } ]])], [gl_cv_func_getopt_posix=yes], [gl_cv_func_getopt_posix=no]) fi else case "$host_os" in darwin* | aix* | mingw* | windows*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac fi ]) case "$gl_cv_func_getopt_posix" in *no) gl_replace_getopt=yes ;; esac fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu], [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the # optstring is necessary for programs like m4 that have POSIX-mandated # semantics for supporting options interspersed with files. # Also, since getopt_long is a GNU extension, we require optind=0. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. dnl GNU Coding Standards currently allow awk but not env; besides, env dnl is ambiguous with environment values that contain newlines. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in xx) gl_had_POSIXLY_CORRECT=exported ;; x) gl_had_POSIXLY_CORRECT=yes ;; *) gl_had_POSIXLY_CORRECT= ;; esac POSIXLY_CORRECT=1 export POSIXLY_CORRECT AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <getopt.h> #include <stddef.h> #include <string.h> ]GL_NOCRASH[ ]], [[ int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 16; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 32; else if (getopt (3, argv, "+:a:b") != ':') result |= 32; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 64; } return result; ]])], [gl_cv_func_getopt_gnu=yes], [gl_cv_func_getopt_gnu=no], [dnl Cross compiling. dnl Assume the worst, even on glibc platforms. dnl But obey --enable-cross-guesses. gl_cv_func_getopt_gnu="$gl_cross_guess_normal" ]) case $gl_had_POSIXLY_CORRECT in exported) ;; yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;; *) AS_UNSET([POSIXLY_CORRECT]) ;; esac ]) if test "$gl_cv_func_getopt_gnu" != yes; then gl_replace_getopt=yes else AC_CACHE_CHECK([for working GNU getopt_long function], [gl_cv_func_getopt_long_gnu], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <getopt.h> #include <stddef.h> #include <string.h> ]], [[static const struct option long_options[] = { { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; /* This code fails on OpenBSD 5.0. */ { static char program[] = "program"; static char xtremel[] = "--xtremel"; char *argv[] = { program, xtremel, NULL }; int option_index; optind = 1; opterr = 0; if (getopt_long (2, argv, "", long_options, &option_index) != 1003) return 1; } return 0; ]])], [gl_cv_func_getopt_long_gnu=yes], [gl_cv_func_getopt_long_gnu=no], [dnl Cross compiling. Guess no on OpenBSD, yes otherwise. case "$host_os" in openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; *) gl_cv_func_getopt_long_gnu="guessing yes";; esac ]) ]) case "$gl_cv_func_getopt_long_gnu" in *yes) ;; *) gl_replace_getopt=yes ;; esac fi fi ]) AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], [ AC_CHECK_HEADERS_ONCE([sys/cdefs.h]) if test $ac_cv_header_sys_cdefs_h = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi AC_SUBST([HAVE_SYS_CDEFS_H]) AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], [Define to rpl_ if the getopt replacement functions and variables should be used.]) GL_GENERATE_GETOPT_H=true GL_GENERATE_GETOPT_CDEFS_H=true ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/getpagesize.m4��������������������������������������������������������0000644�0001750�0001750�00000002775�14557510506�014602� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getpagesize.m4 serial 11 dnl Copyright (C) 2002, 2004-2005, 2007, 2009-2024 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETPAGESIZE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CHECK_FUNC_GETPAGESIZE if test $gl_cv_func_getpagesize = no; then HAVE_GETPAGESIZE=0 AC_CHECK_HEADERS([OS.h]) if test $ac_cv_header_OS_h = yes; then HAVE_OS_H=1 fi AC_CHECK_HEADERS([sys/param.h]) if test $ac_cv_header_sys_param_h = yes; then HAVE_SYS_PARAM_H=1 fi fi case "$host_os" in mingw* | windows*) REPLACE_GETPAGESIZE=1 ;; esac dnl Also check whether it's declared. dnl mingw has getpagesize() in libgcc.a but doesn't declare it. AC_CHECK_DECL([getpagesize], , [HAVE_DECL_GETPAGESIZE=0]) ]) dnl Tests whether the function getpagesize() exists. dnl Sets gl_cv_func_getpagesize. AC_DEFUN([gl_CHECK_FUNC_GETPAGESIZE], [ dnl We can't use AC_CHECK_FUNC here, because getpagesize() is defined as a dnl static inline function when compiling for Android 4.4 or older. AC_CACHE_CHECK([for getpagesize], [gl_cv_func_getpagesize], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h>]], [[return getpagesize();]]) ], [gl_cv_func_getpagesize=yes], [gl_cv_func_getpagesize=no]) ]) ]) ���gnuastro-0.22/bootstrapped/m4/getprogname.m4��������������������������������������������������������0000644�0001750�0001750�00000003551�14557510506�014574� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getprogname.m4 - check for getprogname or replacements for it # Copyright (C) 2016-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 AC_DEFUN([gl_FUNC_GETPROGNAME], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) gl_CHECK_FUNCS_ANDROID([getprogname], [[#include <stdlib.h>]]) if test $ac_cv_func_getprogname = no; then HAVE_GETPROGNAME=0 case "$gl_cv_onwards_func_getprogname" in future*) REPLACE_GETPROGNAME=1 ;; esac fi AC_CHECK_DECLS([program_invocation_name], [], [HAVE_DECL_PROGRAM_INVOCATION_NAME=0], [[#include <errno.h>]]) ]) AC_DEFUN([gl_PREREQ_GETPROGNAME], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([getexecname]) ac_found=0 AC_CHECK_DECLS([program_invocation_name], [ac_found=1], [], [#include <errno.h>]) AC_CHECK_DECLS([program_invocation_short_name], [ac_found=1], [], [#include <errno.h>]) AC_CHECK_DECLS([__argv], [ac_found=1], [], [#include <stdlib.h>]) # Incur the cost of this test only if none of the above worked. if test $ac_found = 0; then # On OpenBSD 5.1, using the global __progname variable appears to be # the only way to implement getprogname. AC_CACHE_CHECK([whether __progname is defined in default libraries], [gl_cv_var___progname], [ gl_cv_var___progname= AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern char *__progname;]], [[return *__progname;]] )], [gl_cv_var___progname=yes] ) ] ) if test "$gl_cv_var___progname" = yes; then AC_DEFINE([HAVE_VAR___PROGNAME], 1, [Define if you have a global __progname variable]) fi fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/gettimeofday.m4�������������������������������������������������������0000644�0001750�0001750�00000005315�14557510506�014745� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 30 # Copyright (C) 2001-2003, 2005, 2007, 2009-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. AC_DEFUN([gl_FUNC_GETTIMEOFDAY], [ AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_TIME_H]) AC_CHECK_FUNCS_ONCE([gettimeofday]) gl_gettimeofday_timezone=void if test $ac_cv_func_gettimeofday != yes; then HAVE_GETTIMEOFDAY=0 else AC_CACHE_CHECK([for gettimeofday with POSIX signature], [gl_cv_func_gettimeofday_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/time.h> struct timeval c; int gettimeofday (struct timeval *restrict, void *restrict); ]], [[/* glibc uses struct timezone * rather than the POSIX void * if _GNU_SOURCE is defined. However, since the only portable use of gettimeofday uses NULL as the second parameter, and since the glibc definition is actually more typesafe, it is not worth wrapping this to get a compliant signature. */ int (*f) (struct timeval *restrict, void *restrict) = gettimeofday; int x = f (&c, 0); return !(x | c.tv_sec | c.tv_usec); ]])], [gl_cv_func_gettimeofday_posix_signature=yes], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/time.h> int gettimeofday (struct timeval *restrict, struct timezone *restrict); ]])], [gl_cv_func_gettimeofday_posix_signature=almost], [gl_cv_func_gettimeofday_posix_signature=no])])]) if test $gl_cv_func_gettimeofday_posix_signature = almost; then gl_gettimeofday_timezone='struct timezone' elif test $gl_cv_func_gettimeofday_posix_signature != yes; then REPLACE_GETTIMEOFDAY=1 fi dnl If we override 'struct timeval', we also have to override gettimeofday. if test $REPLACE_STRUCT_TIMEVAL = 1; then REPLACE_GETTIMEOFDAY=1 fi dnl On mingw, the original gettimeofday has only a precision of 15.6 dnl milliseconds. So override it. case "$host_os" in mingw* | windows*) REPLACE_GETTIMEOFDAY=1 ;; esac fi AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone], [Define this to 'void' or 'struct timezone' to match the system's declaration of the second argument to gettimeofday.]) ]) # Prerequisites of lib/gettimeofday.c. AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/gnulib-common.m4������������������������������������������������������0000644�0001750�0001750�00000154233�14557510506�015036� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gnulib-common.m4 serial 91 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.62]) # gl_COMMON # is expanded unconditionally through gnulib-tool magic. AC_DEFUN([gl_COMMON], [ dnl Use AC_REQUIRE here, so that the code is expanded once only. AC_REQUIRE([gl_00GNULIB]) AC_REQUIRE([gl_COMMON_BODY]) AC_REQUIRE([gl_ZZGNULIB]) ]) AC_DEFUN([gl_COMMON_BODY], [ AH_VERBATIM([0witness], [/* Witness that <config.h> has been included. */ #define _GL_CONFIG_H_INCLUDED 1 ]) AH_VERBATIM([_GL_GNUC_PREREQ], [/* True if the compiler says it groks GNU C version MAJOR.MINOR. */ #if defined __GNUC__ && defined __GNUC_MINOR__ # define _GL_GNUC_PREREQ(major, minor) \ ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__)) #else # define _GL_GNUC_PREREQ(major, minor) 0 #endif ]) AH_VERBATIM([_Noreturn], [/* The _Noreturn keyword of C11. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif (defined __clang__ && __clang_major__ < 16 \ && defined _GL_WORK_AROUND_LLVM_BUG_59792) /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around that rare LLVM bug, though you may get many false-alarm warnings. */ # define _Noreturn # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ && (_GL_GNUC_PREREQ (4, 7) \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))))) /* _Noreturn works as-is. */ # elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ]) AH_VERBATIM([isoc99_inline], [/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif]) AH_VERBATIM([attribute], [/* Attributes. */ #if (defined __has_attribute \ && (!defined __clang_minor__ \ || (defined __apple_build_version__ \ ? 7000000 <= __apple_build_version__ \ : 5 <= __clang_major__))) # define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__) #else # define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr # define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2) # define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95) # define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_diagnose_if 0 # define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1) # define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0) # define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6) # define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0) # ifdef _ICC # define _GL_ATTR_may_alias 0 # else # define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3) # endif # define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0) # define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96) # define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9) # define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0) # define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4) #endif /* Use __has_c_attribute if available. However, do not use with pre-C23 GCC, which can issue false positives if -Wpedantic. */ #if (defined __has_c_attribute \ && ! (_GL_GNUC_PREREQ (4, 6) \ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) <= 201710)) # define _GL_HAVE___HAS_C_ATTRIBUTE 1 #else # define _GL_HAVE___HAS_C_ATTRIBUTE 0 #endif /* Define if, in a function declaration, the attributes in bracket syntax [[...]] must come before the attributes in __attribute__((...)) syntax. If this is defined, it is best to avoid the bracket syntax, so that the various _GL_ATTRIBUTE_* can be cumulated on the same declaration in any order. */ #ifdef __cplusplus # if defined __clang__ # define _GL_BRACKET_BEFORE_ATTRIBUTE 1 # endif #else # if defined __GNUC__ && !defined __clang__ # define _GL_BRACKET_BEFORE_ATTRIBUTE 1 # endif #endif ]dnl There is no _GL_ATTRIBUTE_ALIGNED; use stdalign's alignas instead. [ /* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function is the size of the returned memory block. _GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied by the Nth argument of the function is the size of the returned memory block. */ /* Applies to: function, pointer to function, function types. */ #ifndef _GL_ATTRIBUTE_ALLOC_SIZE # if _GL_HAS_ATTRIBUTE (alloc_size) # define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) # else # define _GL_ATTRIBUTE_ALLOC_SIZE(args) # endif #endif /* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the function and report an error if it cannot do so. */ /* Applies to: function. */ #ifndef _GL_ATTRIBUTE_ALWAYS_INLINE # if _GL_HAS_ATTRIBUTE (always_inline) # define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__)) # else # define _GL_ATTRIBUTE_ALWAYS_INLINE # endif #endif /* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show in stack traces when debugging. The compiler should omit the function from stack traces. */ /* Applies to: function. */ #ifndef _GL_ATTRIBUTE_ARTIFICIAL # if _GL_HAS_ATTRIBUTE (artificial) # define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__)) # else # define _GL_ATTRIBUTE_ARTIFICIAL # endif #endif /* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */ /* Applies to: functions. */ /* Avoid __attribute__ ((cold)) on MinGW; see thread starting at <https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>. Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */ #ifndef _GL_ATTRIBUTE_COLD # if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__ # ifndef __SUNPRO_C # define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__)) # else # define _GL_ATTRIBUTE_COLD __attribute__ ((cold)) # endif # else # define _GL_ATTRIBUTE_COLD # endif #endif /* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate calls to the function with the same arguments. This attribute is safe for a function that neither depends on nor affects observable state, and always returns exactly once - e.g., does not loop forever, and does not call longjmp. (This attribute is stricter than _GL_ATTRIBUTE_PURE.) */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_CONST # if _GL_HAS_ATTRIBUTE (const) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) # else # define _GL_ATTRIBUTE_CONST # endif #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if _GL_GNUC_PREREQ (11, 0) # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* If gnulib's <string.h> or <wchar.h> has already defined this macro, continue to use this earlier definition, since <stdlib.h> may not have been included yet. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # if defined __cplusplus && defined __GNUC__ && !defined __clang__ /* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */ # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1) # else # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC (free, 1) # endif #endif /* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated. The compiler may warn if the entity is used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: namespace, class, template specialization. */ #ifndef _GL_ATTRIBUTE_DEPRECATED # ifndef _GL_BRACKET_BEFORE_ATTRIBUTE # if _GL_HAVE___HAS_C_ATTRIBUTE # if __has_c_attribute (__deprecated__) # define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]] # endif # endif # endif # if !defined _GL_ATTRIBUTE_DEPRECATED && _GL_HAS_ATTRIBUTE (deprecated) # define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) # endif # ifndef _GL_ATTRIBUTE_DEPRECATED # define _GL_ATTRIBUTE_DEPRECATED # endif #endif /* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and the function call is not optimized away. _GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and the function call is not optimized away. */ /* Applies to: functions. */ #if !(defined _GL_ATTRIBUTE_ERROR && defined _GL_ATTRIBUTE_WARNING) # if _GL_HAS_ATTRIBUTE (error) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg))) # elif _GL_HAS_ATTRIBUTE (diagnose_if) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__diagnose_if__ (1, msg, "error"))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__diagnose_if__ (1, msg, "warning"))) # else # define _GL_ATTRIBUTE_ERROR(msg) # define _GL_ATTRIBUTE_WARNING(msg) # endif #endif /* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain visible to debuggers etc., even with '-fwhole-program'. */ /* Applies to: functions, variables. */ #ifndef _GL_ATTRIBUTE_EXTERNALLY_VISIBLE # if _GL_HAS_ATTRIBUTE (externally_visible) # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible)) # else # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE # endif #endif /* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if the control flow falls through to the immediately following 'case' or 'default' label. The compiler should not warn in this case. */ /* Applies to: Empty statement (;), inside a 'switch' statement. */ /* Always expands to something. */ #ifndef _GL_ATTRIBUTE_FALLTHROUGH # if _GL_HAVE___HAS_C_ATTRIBUTE # if __has_c_attribute (__fallthrough__) # define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]] # endif # endif # if !defined _GL_ATTRIBUTE_FALLTHROUGH && _GL_HAS_ATTRIBUTE (fallthrough) # define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__)) # endif # ifndef _GL_ATTRIBUTE_FALLTHROUGH # define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0) # endif #endif /* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) declares that the STRING-INDEXth function argument is a format string of style ARCHETYPE, which is one of: printf, gnu_printf scanf, gnu_scanf, strftime, gnu_strftime, strfmon, or the same thing prefixed and suffixed with '__'. If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK are suitable for the format string. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_FORMAT # if _GL_HAS_ATTRIBUTE (format) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) # else # define _GL_ATTRIBUTE_FORMAT(spec) # endif #endif /* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other compilation unit, it executes code from that unit only by return or by exception handling. This declaration lets the compiler optimize that unit more aggressively. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_LEAF # if _GL_HAS_ATTRIBUTE (leaf) # define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__)) # else # define _GL_ATTRIBUTE_LEAF # endif #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if _GL_HAS_ATTRIBUTE (malloc) # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the same storage as pointers to other types. Thus this declaration disables strict aliasing optimization. */ /* Applies to: types. */ /* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */ #ifndef _GL_ATTRIBUTE_MAY_ALIAS # if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C # define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__)) # else # define _GL_ATTRIBUTE_MAY_ALIAS # endif #endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: class. */ /* In C++ and C23, this is spelled [[__maybe_unused__]]. GCC's syntax is __attribute__ ((__unused__)). clang supports both syntaxes. Except that with clang ≥ 6, < 10, in C++ mode, __has_c_attribute (__maybe_unused__) yields true but the use of [[__maybe_unused__]] nevertheless produces a warning. */ #ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # ifndef _GL_BRACKET_BEFORE_ATTRIBUTE # if defined __clang__ && defined __cplusplus # if !defined __apple_build_version__ && __clang_major__ >= 10 # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # endif # elif _GL_HAVE___HAS_C_ATTRIBUTE # if __has_c_attribute (__maybe_unused__) # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # endif # endif # endif # ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED # endif #endif /* Alternative spelling of this macro, for convenience and for compatibility with glibc/include/libc-symbols.h. */ #define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED /* Earlier spellings of this macro. */ #define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED /* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not discard the return value. The compiler may warn if the caller does not use the return value, unless the caller uses something like ignore_value. */ /* Applies to: function, enumeration, class. */ #ifndef _GL_ATTRIBUTE_NODISCARD # ifndef _GL_BRACKET_BEFORE_ATTRIBUTE # if defined __clang__ && defined __cplusplus /* With clang up to 15.0.6 (at least), in C++ mode, [[__nodiscard__]] produces a warning. The 1000 below means a yet unknown threshold. When clang++ version X starts supporting [[__nodiscard__]] without warning about it, you can replace the 1000 with X. */ # if __clang_major__ >= 1000 # define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] # endif # elif _GL_HAVE___HAS_C_ATTRIBUTE # if __has_c_attribute (__nodiscard__) # define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] # endif # endif # endif # if !defined _GL_ATTRIBUTE_NODISCARD && _GL_HAS_ATTRIBUTE (warn_unused_result) # define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__)) # endif # ifndef _GL_ATTRIBUTE_NODISCARD # define _GL_ATTRIBUTE_NODISCARD # endif #endif /* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the function. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_NOINLINE # if _GL_HAS_ATTRIBUTE (noinline) # define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__)) # else # define _GL_ATTRIBUTE_NOINLINE # endif #endif /* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,... must not be NULL. _GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be null. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_NONNULL # if _GL_HAS_ATTRIBUTE (nonnull) # define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args)) # else # define _GL_ATTRIBUTE_NONNULL(args) # endif #endif /* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is not meant to be NUL-terminated. */ /* Applies to: struct/union members and variables that are arrays of element type '[[un]signed] char'. */ #ifndef _GL_ATTRIBUTE_NONSTRING # if _GL_HAS_ATTRIBUTE (nonstring) # define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__)) # else # define _GL_ATTRIBUTE_NONSTRING # endif #endif /* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */ /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ /* Applies to: functions. */ /* After a function's parameter list, this attribute must come first, before other attributes. */ #ifndef _GL_ATTRIBUTE_NOTHROW # if defined __cplusplus # if _GL_GNUC_PREREQ (2, 8) || __clang_major >= 4 # if __cplusplus >= 201103L # define _GL_ATTRIBUTE_NOTHROW noexcept (true) # else # define _GL_ATTRIBUTE_NOTHROW throw () # endif # else # define _GL_ATTRIBUTE_NOTHROW # endif # else # if _GL_HAS_ATTRIBUTE (nothrow) # define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) # else # define _GL_ATTRIBUTE_NOTHROW # endif # endif #endif /* _GL_ATTRIBUTE_PACKED declares: For struct members: The member has the smallest possible alignment. For struct, union, class: All members have the smallest possible alignment, minimizing the memory required. */ /* Applies to: struct members, struct, union, in C++ also: class. */ #ifndef _GL_ATTRIBUTE_PACKED # if _GL_HAS_ATTRIBUTE (packed) # define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__)) # else # define _GL_ATTRIBUTE_PACKED # endif #endif /* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate calls to the function with the same arguments if observable state is not changed between calls. This attribute is safe for a function that does not affect observable state, and always returns exactly once. (This attribute is looser than _GL_ATTRIBUTE_CONST.) */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_PURE # if _GL_HAS_ATTRIBUTE (pure) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE # endif #endif /* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is a non-NULL pointer. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_RETURNS_NONNULL # if _GL_HAS_ATTRIBUTE (returns_nonnull) # define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) # else # define _GL_ATTRIBUTE_RETURNS_NONNULL # endif #endif /* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a trailing NULL argument. _GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). _GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_SENTINEL # if _GL_HAS_ATTRIBUTE (sentinel) # define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos)) # else # define _GL_ATTRIBUTE_SENTINEL(pos) # endif #endif /* A helper macro. Don't use it directly. */ #ifndef _GL_ATTRIBUTE_UNUSED # if _GL_HAS_ATTRIBUTE (unused) # define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else # define _GL_ATTRIBUTE_UNUSED # endif #endif ]dnl There is no _GL_ATTRIBUTE_VISIBILITY; see m4/visibility.m4 instead. [ /* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the immediately preceding label is not used. The compiler should not warn if the label is not used. */ /* Applies to: label (both in C and C++). */ /* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;' syntax. But clang does. */ #ifndef _GL_UNUSED_LABEL # if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__ # define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED # else # define _GL_UNUSED_LABEL # endif #endif ]) AH_VERBATIM([c_linkage], [/* In C++, there is the concept of "language linkage", that encompasses name mangling and function calling conventions. The following macros start and end a block of "C" linkage. */ #ifdef __cplusplus # define _GL_BEGIN_C_LINKAGE extern "C" { # define _GL_END_C_LINKAGE } #else # define _GL_BEGIN_C_LINKAGE # define _GL_END_C_LINKAGE #endif ]) AH_VERBATIM([async_safe], [/* The _GL_ASYNC_SAFE marker should be attached to functions that are signal handlers (for signals other than SIGABRT, SIGPIPE) or can be invoked from such signal handlers. Such functions have some restrictions: * All functions that it calls should be marked _GL_ASYNC_SAFE as well, or should be listed as async-signal-safe in POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04> section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in particular, are NOT async-signal-safe. * All memory locations (variables and struct fields) that these functions access must be marked 'volatile'. This holds for both read and write accesses. Otherwise the compiler might optimize away stores to and reads from such locations that occur in the program, depending on its data flow analysis. For example, when the program contains a loop that is intended to inspect a variable set from within a signal handler while (!signal_occurred) ; the compiler is allowed to transform this into an endless loop if the variable 'signal_occurred' is not declared 'volatile'. Additionally, recall that: * A signal handler should not modify errno (except if it is a handler for a fatal signal and ends by raising the same signal again, thus provoking the termination of the process). If it invokes a function that may clobber errno, it needs to save and restore the value of errno. */ #define _GL_ASYNC_SAFE ]) AH_VERBATIM([micro_optimizations], [/* _GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where n1 and n2 are expressions without side effects, that evaluate to real numbers (excluding NaN). It returns 1 if n1 > n2 0 if n1 == n2 -1 if n1 < n2 The naïve code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional jump with nearly all GCC versions up to GCC 10. This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many GCC versions up to GCC 9. The better code (n1 > n2) - (n1 < n2) from Hacker's Delight § 2-9 avoids conditional jumps in all GCC versions >= 3.4. */ #define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2))) ]) dnl Hint which direction to take regarding cross-compilation guesses: dnl When a user installs a program on a platform they are not intimately dnl familiar with, --enable-cross-guesses=conservative is the appropriate dnl choice. It implements the "If we don't know, assume the worst" principle. dnl However, when an operating system developer (on a platform which is not dnl yet known to gnulib) builds packages for their platform, they want to dnl expose, not hide, possible platform bugs; in this case, dnl --enable-cross-guesses=risky is the appropriate choice. dnl Sets the variables dnl gl_cross_guess_normal (to be used when 'yes' is good and 'no' is bad), dnl gl_cross_guess_inverted (to be used when 'no' is good and 'yes' is bad). AC_ARG_ENABLE([cross-guesses], [AS_HELP_STRING([[--enable-cross-guesses={conservative|risky}]], [specify policy for cross-compilation guesses])], [if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then AC_MSG_WARN([invalid argument supplied to --enable-cross-guesses]) enableval=conservative fi gl_cross_guesses="$enableval"], [gl_cross_guesses=conservative]) if test $gl_cross_guesses = risky; then gl_cross_guess_normal="guessing yes" gl_cross_guess_inverted="guessing no" else gl_cross_guess_normal="guessing no" gl_cross_guess_inverted="guessing yes" fi dnl Preparation for running test programs: dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not dnl to /dev/tty, so they can be redirected to log files. Such diagnostics dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ ]) # gl_MODULE_INDICATOR_INIT_VARIABLE([variablename]) # gl_MODULE_INDICATOR_INIT_VARIABLE([variablename], [initialvalue]) # initializes the shell variable that indicates the presence of the given module # as a C preprocessor expression. AC_DEFUN([gl_MODULE_INDICATOR_INIT_VARIABLE], [ GL_MODULE_INDICATOR_PREFIX[]_[$1]=m4_if([$2], , [0], [$2]) AC_SUBST(GL_MODULE_INDICATOR_PREFIX[]_[$1]) ]) # gl_MODULE_INDICATOR_CONDITION # expands to a C preprocessor expression that evaluates to 1 or 0, depending # whether a gnulib module that has been requested shall be considered present # or not. m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) # gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) # sets the shell variable that indicates the presence of the given module to # a C preprocessor expression that will evaluate to 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], [ gl_MODULE_INDICATOR_SET_VARIABLE_AUX( [GL_MODULE_INDICATOR_PREFIX[]_GNULIB_[]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], [gl_MODULE_INDICATOR_CONDITION]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) # modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. # The shell variable's value is a C preprocessor expression that evaluates # to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], [ m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], [ dnl Simplify the expression VALUE || 1 to 1. $1=1 ], [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], [gl_MODULE_INDICATOR_CONDITION])]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) # modifies the shell variable to include the given condition. The shell # variable's value is a C preprocessor expression that evaluates to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], [ dnl Simplify the expression 1 || CONDITION to 1. if test "$[]$1" != 1; then dnl Simplify the expression 0 || CONDITION to CONDITION. if test "$[]$1" = 0; then $1=$2 else $1="($[]$1 || $2)" fi fi ]) # gl_MODULE_INDICATOR([modulename]) # defines a C macro indicating the presence of the given module # in a location where it can be used. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 0 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR], [ AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [gl_MODULE_INDICATOR_CONDITION], [Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module $1 shall be considered present.]) ]) # gl_MODULE_INDICATOR_FOR_TESTS([modulename]) # defines a C macro indicating the presence of the given module # in lib or tests. This is useful to determine whether the module # should be tested. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [ AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], [Define to 1 when the gnulib module $1 should be tested.]) ]) # gl_ASSERT_NO_GNULIB_POSIXCHECK # asserts that there will never be a need to #define GNULIB_POSIXCHECK. # and thereby enables an optimization of configure and config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], [ dnl Override gl_WARN_ON_USE_PREPARE. dnl But hide this definition from 'aclocal'. AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) ]) # gl_ASSERT_NO_GNULIB_TESTS # asserts that there will be no gnulib tests in the scope of the configure.ac # and thereby enables an optimization of config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], [ dnl Override gl_MODULE_INDICATOR_FOR_TESTS. AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) ]) # Test whether <features.h> exists. # Set HAVE_FEATURES_H. AC_DEFUN([gl_FEATURES_H], [ AC_CHECK_HEADERS_ONCE([features.h]) if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi AC_SUBST([HAVE_FEATURES_H]) ]) # gl_PROG_CC_C99 # Modifies the value of the shell variable CC in an attempt to make $CC # understand ISO C99 source code. AC_DEFUN([gl_PROG_CC_C99], [ dnl Just use AC_PROG_CC_C99. dnl When AC_PROG_CC_C99 and AC_PROG_CC_STDC are used together, the substituted dnl value of CC will contain the C99 enabling options twice. But this is only dnl a cosmetic problem. dnl With Autoconf >= 2.70, use AC_PROG_CC since it implies AC_PROG_CC_C99; dnl this avoids a "warning: The macro `AC_PROG_CC_C99' is obsolete." m4_version_prereq([2.70], [AC_REQUIRE([AC_PROG_CC])], [AC_REQUIRE([AC_PROG_CC_C99])]) ]) # gl_PROG_AR_RANLIB # Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. # The user can set the variables AR, ARFLAGS, RANLIB if he wants to override # the values. AC_DEFUN([gl_PROG_AR_RANLIB], [ dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler dnl as "cc", and GCC as "gcc". They have different object file formats and dnl library formats. In particular, the GNU binutils programs ar and ranlib dnl produce libraries that work only with gcc, not with cc. AC_REQUIRE([AC_PROG_CC]) dnl The '][' hides this use from 'aclocal'. AC_BEFORE([$0], [A][M_PROG_AR]) AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], [ AC_EGREP_CPP([Amsterdam], [ #ifdef __ACK__ Amsterdam #endif ], [gl_cv_c_amsterdam_compiler=yes], [gl_cv_c_amsterdam_compiler=no]) ]) dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not dnl building with __ACK__. if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST dnl ARFLAGS variable (it is filed into Makefile.in directly by automake dnl script on-demand, if not specified by ./configure of course). dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block dnl because AM_PROG_AR is written so it could re-set AR variable even for dnl __ACK__. It may seem like its easier to avoid calling the macro here, dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good dnl default value and automake should usually know them). dnl dnl The '][' hides this use from 'aclocal'. m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:]) fi dnl In case the code above has not helped with setting AR/ARFLAGS, use dnl Automake-documented default values for AR and ARFLAGS, but prefer dnl ${host}-ar over ar (useful for cross-compiling). AC_CHECK_TOOL([AR], [ar], [ar]) if test -z "$ARFLAGS"; then ARFLAGS='cr' fi AC_SUBST([AR]) AC_SUBST([ARFLAGS]) if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else dnl Use the ranlib program if it is available. AC_PROG_RANLIB fi fi AC_SUBST([RANLIB]) ]) # AC_C_RESTRICT # This definition is copied from post-2.70 Autoconf and overrides the # AC_C_RESTRICT macro from autoconf 2.60..2.70. m4_version_prereq([2.70.1], [], [ AC_DEFUN([AC_C_RESTRICT], [AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], [ac_cv_c_restrict=no # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see: # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html # Put 'restrict' last, because C++ lacks it. for ac_kw in __restrict__ __restrict _Restrict restrict; do AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } ]], [[int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ]])], [ac_cv_c_restrict=$ac_kw]) test "$ac_cv_c_restrict" != no && break done ]) AH_VERBATIM([restrict], [/* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported only directly. */ #undef restrict /* Work around a bug in older versions of Sun C++, which did not #define __restrict__ or support _Restrict or __restrict__ even though the corresponding Sun C compiler ended up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. This workaround can be removed once we assume Oracle Developer Studio 12.5 (2016) or later. */ #if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ # define _Restrict # define __restrict__ #endif]) case $ac_cv_c_restrict in restrict) ;; no) AC_DEFINE([restrict], []) ;; *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; esac ])# AC_C_RESTRICT ]) # gl_BIGENDIAN # is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. # Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some # macros invoke AC_C_BIGENDIAN with arguments. AC_DEFUN([gl_BIGENDIAN], [ AC_C_BIGENDIAN ]) # A temporary file descriptor. # Must be less than 10, because dash 0.5.8 does not support redirections # with multi-digit file descriptors. m4_define([GL_TMP_FD], 9) # gl_SILENT(command) # executes command, but without the normal configure output. # This is useful when you want to invoke AC_CACHE_CHECK (or AC_CHECK_FUNC etc.) # inside another AC_CACHE_CHECK. AC_DEFUN([gl_SILENT], [ exec GL_TMP_FD>&AS_MESSAGE_FD AS_MESSAGE_FD>/dev/null $1 exec AS_MESSAGE_FD>&GL_TMP_FD GL_TMP_FD>&- ]) # gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) # is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not # output a spurious "(cached)" mark in the midst of other configure output. # This macro should be used instead of AC_CACHE_VAL when it is not surrounded # by an AC_MSG_CHECKING/AC_MSG_RESULT pair. AC_DEFUN([gl_CACHE_VAL_SILENT], [ gl_SILENT([ AC_CACHE_VAL([$1], [$2]) ]) ]) # gl_CONDITIONAL(conditional, condition) # is like AM_CONDITIONAL(conditional, condition), except that it does not # produce an error # configure: error: conditional "..." was never defined. # Usually this means the macro was only invoked conditionally. # when only invoked conditionally. Instead, in that case, both the _TRUE # and the _FALSE case are disabled. AC_DEFUN([gl_CONDITIONAL], [ pushdef([AC_CONFIG_COMMANDS_PRE], [:])dnl AM_CONDITIONAL([$1], [$2]) popdef([AC_CONFIG_COMMANDS_PRE])dnl if test -z "${[$1]_TRUE}" && test -z "${[$1]_FALSE}"; then [$1]_TRUE='#' [$1]_FALSE='#' fi ]) # gl_CC_ALLOW_WARNINGS # sets and substitutes a variable GL_CFLAG_ALLOW_WARNINGS, to a $(CC) option # that reverts a preceding '-Werror' option, if available. # This is expected to be '-Wno-error' on gcc, clang (except clang/MSVC), xlclang # and empty otherwise. AC_DEFUN([gl_CC_ALLOW_WARNINGS], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for C compiler option to allow warnings], [gl_cv_cc_wallow], [rm -f conftest* echo 'int dummy;' > conftest.c AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err]) >/dev/null AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -Wno-error -c conftest.c 2>conftest2.err]) >/dev/null dnl Test the number of error output lines, because AIX xlc accepts the dnl option '-Wno-error', just to produce a warning dnl "Option -Wno-error was incorrectly specified. The option will be ignored." dnl afterwards. if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then gl_cv_cc_wallow='-Wno-error' else gl_cv_cc_wallow=none fi rm -f conftest* ]) case "$gl_cv_cc_wallow" in none) GL_CFLAG_ALLOW_WARNINGS='' ;; *) GL_CFLAG_ALLOW_WARNINGS="$gl_cv_cc_wallow" ;; esac AC_SUBST([GL_CFLAG_ALLOW_WARNINGS]) ]) # gl_CXX_ALLOW_WARNINGS # sets and substitutes a variable GL_CXXFLAG_ALLOW_WARNINGS, to a $(CC) option # that reverts a preceding '-Werror' option, if available. AC_DEFUN([gl_CXX_ALLOW_WARNINGS], [ dnl Requires AC_PROG_CXX or gl_PROG_ANSI_CXX. if test -n "$CXX" && test "$CXX" != no; then AC_CACHE_CHECK([for C++ compiler option to allow warnings], [gl_cv_cxx_wallow], [rm -f conftest* echo 'int dummy;' > conftest.cc AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -c conftest.cc 2>conftest1.err]) >/dev/null AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -Wno-error -c conftest.cc 2>conftest2.err]) >/dev/null dnl Test the number of error output lines, because AIX xlC accepts the dnl option '-Wno-error', just to produce a warning dnl "Option -Wno-error was incorrectly specified. The option will be ignored." dnl afterwards. if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then gl_cv_cxx_wallow='-Wno-error' else gl_cv_cxx_wallow=none fi rm -f conftest* ]) case "$gl_cv_cxx_wallow" in none) GL_CXXFLAG_ALLOW_WARNINGS='' ;; *) GL_CXXFLAG_ALLOW_WARNINGS="$gl_cv_cxx_wallow" ;; esac else GL_CXXFLAG_ALLOW_WARNINGS='' fi AC_SUBST([GL_CXXFLAG_ALLOW_WARNINGS]) ]) # gl_CC_GNULIB_WARNINGS # sets and substitutes a variable GL_CFLAG_GNULIB_WARNINGS, to a $(CC) option # set that enables or disables warnings as suitable for the Gnulib coding style. AC_DEFUN([gl_CC_GNULIB_WARNINGS], [ AC_REQUIRE([gl_CC_ALLOW_WARNINGS]) dnl Assume that the compiler supports -Wno-* options only if it also supports dnl -Wno-error. GL_CFLAG_GNULIB_WARNINGS='' if test -n "$GL_CFLAG_ALLOW_WARNINGS"; then dnl Enable these warning options: dnl dnl GCC clang dnl -Wno-cast-qual >= 3 >= 3.9 dnl -Wno-conversion >= 3 >= 3.9 dnl -Wno-float-conversion >= 4.9 >= 3.9 dnl -Wno-float-equal >= 3 >= 3.9 dnl -Wimplicit-fallthrough >= 7 >= 3.9 dnl -Wno-pedantic >= 4.8 >= 3.9 dnl -Wno-sign-compare >= 3 >= 3.9 dnl -Wno-sign-conversion >= 4.3 >= 3.9 dnl -Wno-tautological-out-of-range-compare - >= 3.9 dnl -Wno-type-limits >= 4.3 >= 3.9 dnl -Wno-undef >= 3 >= 3.9 dnl -Wno-unsuffixed-float-constants >= 4.5 dnl -Wno-unused-function >= 3 >= 3.9 dnl -Wno-unused-parameter >= 3 >= 3.9 dnl cat > conftest.c <<\EOF #if __GNUC__ >= 3 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter #endif #if __GNUC__ + (__GNUC_MINOR__ >= 9) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-float-conversion #endif #if __GNUC__ >= 7 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wimplicit-fallthrough #endif #if __GNUC__ + (__GNUC_MINOR__ >= 8) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-pedantic #endif #if 3 < __clang_major__ + (9 <= __clang_minor__) -Wno-tautological-constant-out-of-range-compare #endif #if __GNUC__ + (__GNUC_MINOR__ >= 3) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-sign-conversion -Wno-type-limits #endif #if __GNUC__ + (__GNUC_MINOR__ >= 5) > 4 -Wno-unsuffixed-float-constants #endif EOF gl_command="$CC $CFLAGS $CPPFLAGS -E conftest.c > conftest.out" if AC_TRY_EVAL([gl_command]); then gl_options=`grep -v '#' conftest.out` for word in $gl_options; do GL_CFLAG_GNULIB_WARNINGS="$GL_CFLAG_GNULIB_WARNINGS $word" done fi rm -f conftest.c conftest.out fi AC_SUBST([GL_CFLAG_GNULIB_WARNINGS]) ]) dnl gl_CONDITIONAL_HEADER([foo.h]) dnl takes a shell variable GL_GENERATE_FOO_H (with value true or false) as input dnl and produces dnl - an AC_SUBSTed variable FOO_H that is either a file name or empty, based dnl on whether GL_GENERATE_FOO_H is true or false, dnl - an Automake conditional GL_GENERATE_FOO_H that evaluates to the value of dnl the shell variable GL_GENERATE_FOO_H. AC_DEFUN([gl_CONDITIONAL_HEADER], [ m4_pushdef([gl_header_name], AS_TR_SH(m4_toupper($1))) m4_pushdef([gl_generate_var], [GL_GENERATE_]AS_TR_SH(m4_toupper($1))) m4_pushdef([gl_generate_cond], [GL_GENERATE_]AS_TR_SH(m4_toupper($1))) case "$gl_generate_var" in false) gl_header_name='' ;; true) dnl It is OK to use a .h file in lib/ from within tests/, but not vice dnl versa. if test -z "$gl_header_name"; then gl_header_name="${gl_source_base_prefix}$1" fi ;; *) echo "*** gl_generate_var is not set correctly" 1>&2; exit 1 ;; esac AC_SUBST(gl_header_name) gl_CONDITIONAL(gl_generate_cond, [$gl_generate_var]) m4_popdef([gl_generate_cond]) m4_popdef([gl_generate_var]) m4_popdef([gl_header_name]) ]) dnl Preparations for gl_CHECK_FUNCS_MACOS. AC_DEFUN([gl_PREPARE_CHECK_FUNCS_MACOS], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_COMPILER_CLANG]) AC_CACHE_CHECK([for compiler option needed when checking for future declarations], [gl_cv_compiler_check_future_option], [case "$host_os" in dnl This is only needed on macOS. darwin*) if test $gl_cv_compiler_clang = yes; then dnl Test whether the compiler supports the option dnl '-Werror=unguarded-availability-new'. saved_ac_compile="$ac_compile" ac_compile="$ac_compile -Werror=unguarded-availability-new" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])], [gl_cv_compiler_check_future_option='-Werror=unguarded-availability-new'], [gl_cv_compiler_check_future_option=none]) ac_compile="$saved_ac_compile" else gl_cv_compiler_check_future_option=none fi ;; *) gl_cv_compiler_check_future_option=none ;; esac ]) ]) dnl Pieces of the expansion of dnl gl_CHECK_FUNCS_ANDROID dnl gl_CHECK_FUNCS_MACOS dnl gl_CHECK_FUNCS_ANDROID_MACOS AC_DEFUN([gl_CHECK_FUNCS_DEFAULT_CASE], [ *) AC_CHECK_FUNC([$1]) [gl_cv_onwards_func_][$1]=$[ac_cv_func_][$1] ;; ]) AC_DEFUN([gl_CHECK_FUNCS_CASE_FOR_ANDROID], [ linux*-android*) AC_CHECK_DECL([$1], , , [$2]) if test $[ac_cv_have_decl_][$1] = yes; then AC_CHECK_FUNC([[$1]]) if test $[ac_cv_func_][$1] = yes; then [gl_cv_onwards_func_][$1]=yes else dnl The function is declared but does not exist. This should not dnl happen normally. But anyway, we know that a future version dnl of Android will have the function. [gl_cv_onwards_func_][$1]='future OS version' fi else [gl_cv_onwards_func_][$1]='future OS version' fi ;; ]) AC_DEFUN([gl_CHECK_FUNCS_CASE_FOR_MACOS], [ darwin*) if test "x$gl_cv_compiler_check_future_option" != "xnone"; then dnl Use a compile test, not a link test. saved_ac_compile="$ac_compile" ac_compile="$ac_compile $gl_cv_compiler_check_future_option" saved_ac_compile_for_check_decl="$ac_compile_for_check_decl" ac_compile_for_check_decl="$ac_compile_for_check_decl $gl_cv_compiler_check_future_option" unset [ac_cv_have_decl_][$1] AC_CHECK_DECL([$1], , , [$2]) ac_compile="$saved_ac_compile" ac_compile_for_check_decl="$saved_ac_compile_for_check_decl" [ac_cv_func_][$1]="$[ac_cv_have_decl_][$1]" if test $[ac_cv_func_][$1] = yes; then [gl_cv_onwards_func_][$1]=yes else unset [ac_cv_have_decl_][$1] AC_CHECK_DECL([$1], , , [$2]) if test $[ac_cv_have_decl_][$1] = yes; then [gl_cv_onwards_func_][$1]='future OS version' else [gl_cv_onwards_func_][$1]=no fi fi else AC_CHECK_FUNC([$1]) [gl_cv_onwards_func_][$1]=$[ac_cv_func_][$1] fi ;; ]) AC_DEFUN([gl_CHECK_FUNCS_SET_RESULTS], [ case "$[gl_cv_onwards_func_][$1]" in future*) [ac_cv_func_][$1]=no ;; *) [ac_cv_func_][$1]=$[gl_cv_onwards_func_][$1] ;; esac if test $[ac_cv_func_][$1] = yes; then AC_DEFINE([HAVE_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz], [ABCDEFGHIJKLMNOPQRSTUVWXYZ]), [1], [Define to 1 if you have the `$1' function.]) fi ]) dnl gl_CHECK_FUNCS_ANDROID([func], [[#include <foo.h>]]) dnl is like AC_CHECK_FUNCS([func]), taking into account a portability problem dnl on Android. dnl dnl When code is compiled on Android, it is in the context of a certain dnl "Android API level", which indicates the minimum version of Android on dnl which the app can be installed. In other words, you don't compile for a dnl specific version of Android. You compile for all versions of Android, dnl onwards from the given API level. dnl Thus, the question "does the OS have the function func" has three possible dnl answers: dnl - yes, in all versions starting from the given API level, dnl - no, in no version, dnl - not in the given API level, but in a later version of Android. dnl dnl In detail, this works as follows: dnl If func was added to Android API level, say, 28, then the libc.so has the dnl symbol func always, whereas the header file <foo.h> declares func dnl conditionally: dnl #if __ANDROID_API__ >= 28 dnl ... func (...) __INTRODUCED_IN(28); dnl #endif dnl Thus, when compiling with "clang -target armv7a-unknown-linux-android28", dnl the function func is declared and exists in libc. dnl Whereas when compiling with "clang -target armv7a-unknown-linux-android27", dnl the function func is not declared but exists in libc. dnl dnl This macro sets two variables: dnl - gl_cv_onwards_func_<func> to yes / no / "future OS version" dnl - ac_cv_func_<func> to yes / no / no dnl The first variable allows to distinguish all three cases. dnl The second variable is set, so that an invocation dnl gl_CHECK_FUNCS_ANDROID([func], [[#include <foo.h>]]) dnl can be used as a drop-in replacement for dnl AC_CHECK_FUNCS([func]). AC_DEFUN([gl_CHECK_FUNCS_ANDROID], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([for [$1]], [[gl_cv_onwards_func_][$1]], [gl_SILENT([ case "$host_os" in gl_CHECK_FUNCS_CASE_FOR_ANDROID([$1], [$2]) gl_CHECK_FUNCS_DEFAULT_CASE([$1]) esac ]) ]) gl_CHECK_FUNCS_SET_RESULTS([$1]) ]) dnl gl_CHECK_FUNCS_MACOS([func], [[#include <foo.h>]]) dnl is like AC_CHECK_FUNCS([func]), taking into account a portability problem dnl on macOS. dnl dnl When code is compiled on macOS, it is in the context of a certain minimum dnl macOS version, that can be set through the option '-mmacosx-version-min='. dnl In other words, you don't compile for a specific version of macOS. You dnl compile for all versions of macOS, onwards from the given version. dnl Thus, the question "does the OS have the function func" has three possible dnl answers: dnl - yes, in all versions starting from the given version, dnl - no, in no version, dnl - not in the given version, but in a later version of macOS. dnl dnl In detail, this works as follows: dnl If func was added to, say, macOS version 13, then the libc has the dnl symbol func always, whereas the header file <foo.h> declares func dnl conditionally with a special availability attribute: dnl ... func (...) __attribute__((availability(macos,introduced=13.0))); dnl Thus, when compiling with "clang mmacosx-version-min=13", there is no dnl warning about the use of func, and the resulting binary dnl - runs fine on macOS 13, dnl - aborts with a dyld "Symbol not found" message on macOS 12. dnl Whereas, when compiling with "clang mmacosx-version-min=12", there is a dnl warning: 'func' is only available on macOS 13.0 or newer dnl [-Wunguarded-availability-new], dnl and the resulting binary dnl - runs fine on macOS 13, dnl - crashes with a SIGSEGV (signal 11) on macOS 12. dnl dnl This macro sets two variables: dnl - gl_cv_onwards_func_<func> to yes / no / "future OS version" dnl - ac_cv_func_<func> to yes / no / no dnl The first variable allows to distinguish all three cases. dnl The second variable is set, so that an invocation dnl gl_CHECK_FUNCS_MACOS([func], [[#include <foo.h>]]) dnl can be used as a drop-in replacement for dnl AC_CHECK_FUNCS([func]). AC_DEFUN([gl_CHECK_FUNCS_MACOS], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PREPARE_CHECK_FUNCS_MACOS]) AC_CACHE_CHECK([for [$1]], [[gl_cv_onwards_func_][$1]], [gl_SILENT([ case "$host_os" in gl_CHECK_FUNCS_CASE_FOR_MACOS([$1], [$2]) gl_CHECK_FUNCS_DEFAULT_CASE([$1]) esac ]) ]) gl_CHECK_FUNCS_SET_RESULTS([$1]) ]) dnl gl_CHECK_FUNCS_ANDROID_MACOS([func], [[#include <foo.h>]]) dnl is like AC_CHECK_FUNCS([func]), taking into account a portability problem dnl on Android and on macOS. dnl It is the combination of gl_CHECK_FUNCS_ANDROID and gl_CHECK_FUNCS_MACOS. AC_DEFUN([gl_CHECK_FUNCS_ANDROID_MACOS], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PREPARE_CHECK_FUNCS_MACOS]) AC_CACHE_CHECK([for [$1]], [[gl_cv_onwards_func_][$1]], [gl_SILENT([ case "$host_os" in gl_CHECK_FUNCS_CASE_FOR_ANDROID([$1], [$2]) gl_CHECK_FUNCS_CASE_FOR_MACOS([$1], [$2]) gl_CHECK_FUNCS_DEFAULT_CASE([$1]) esac ]) ]) gl_CHECK_FUNCS_SET_RESULTS([$1]) ]) dnl Expands to some code for use in .c programs that, on native Windows, defines dnl the Microsoft deprecated alias function names to the underscore-prefixed dnl actual function names. With this macro, these function names are available dnl without linking with '-loldnames' and without generating warnings. dnl Usage: Use it after all system header files are included. dnl #include <...> dnl #include <...> dnl ]GL_MDA_DEFINES[ dnl ... AC_DEFUN([GL_MDA_DEFINES],[ AC_REQUIRE([_GL_MDA_DEFINES]) [$gl_mda_defines] ]) AC_DEFUN([_GL_MDA_DEFINES], [gl_mda_defines=' #if defined _WIN32 && !defined __CYGWIN__ #define access _access #define chdir _chdir #define chmod _chmod #define close _close #define creat _creat #define dup _dup #define dup2 _dup2 #define ecvt _ecvt #define execl _execl #define execle _execle #define execlp _execlp #define execv _execv #define execve _execve #define execvp _execvp #define execvpe _execvpe #define fcloseall _fcloseall #define fcvt _fcvt #define fdopen _fdopen #define fileno _fileno #define gcvt _gcvt #define getcwd _getcwd #define getpid _getpid #define getw _getw #define isatty _isatty #define j0 _j0 #define j1 _j1 #define jn _jn #define lfind _lfind #define lsearch _lsearch #define lseek _lseek #define memccpy _memccpy #define mkdir _mkdir #define mktemp _mktemp #define open _open #define putenv _putenv #define putw _putw #define read _read #define rmdir _rmdir #define strdup _strdup #define swab _swab #define tempnam _tempnam #define tzset _tzset #define umask _umask #define unlink _unlink #define utime _utime #define wcsdup _wcsdup #define write _write #define y0 _y0 #define y1 _y1 #define yn _yn #endif ' ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/gnulib-comp.m4��������������������������������������������������������0000644�0001750�0001750�00000251305�14557510520�014476� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# DO NOT EDIT! GENERATED AUTOMATICALLY! # Copyright (C) 2002-2024 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This file 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the compiled summary of the specification in # gnulib-cache.m4. It lists the computed macro invocations that need # to be invoked from configure.ac. # In projects that use version control, this file can be treated like # other built files. # This macro should be invoked from ./configure.ac, in the section # "Checks for programs", right after AC_PROG_CC, and certainly before # any checks for libraries, header files, types and library functions. AC_DEFUN([gl_EARLY], [ m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace m4_pattern_allow([^gl_ES$])dnl a valid locale name m4_pattern_allow([^gl_LIBOBJS$])dnl a variable m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable # Pre-early section. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_PROG_AR_RANLIB]) # Code from module absolute-header: # Code from module accept: # Code from module accept-tests: # Code from module access: # Code from module access-tests: # Code from module alignasof: # Code from module alignasof-tests: # Code from module alloca: # Code from module alloca-opt: # Code from module alloca-opt-tests: # Code from module argp: # Code from module argp-tests: # Code from module arpa_inet: # Code from module arpa_inet-tests: # Code from module assert-h: # Code from module assert-h-tests: # Code from module assure: # Code from module at-internal: # Code from module attribute: # Code from module basename-lgpl: # Code from module binary-io: # Code from module binary-io-tests: # Code from module bind: # Code from module bind-tests: # Code from module btoc32: # Code from module btoc32-tests: # Code from module btowc: # Code from module btowc-tests: # Code from module builtin-expect: # Code from module c-ctype: # Code from module c-ctype-tests: # Code from module c-strcase: # Code from module c-strcase-tests: # Code from module c-strcasestr: # Code from module c-strcasestr-tests: # Code from module c32isalnum: # Code from module c32isalnum-tests: # Code from module c32isalpha: # Code from module c32isalpha-tests: # Code from module c32isblank: # Code from module c32isblank-tests: # Code from module c32iscntrl: # Code from module c32iscntrl-tests: # Code from module c32isdigit: # Code from module c32isdigit-tests: # Code from module c32isgraph: # Code from module c32isgraph-tests: # Code from module c32islower: # Code from module c32islower-tests: # Code from module c32isprint: # Code from module c32isprint-tests: # Code from module c32ispunct: # Code from module c32ispunct-tests: # Code from module c32isspace: # Code from module c32isspace-tests: # Code from module c32isupper: # Code from module c32isupper-tests: # Code from module c32isxdigit: # Code from module c32isxdigit-tests: # Code from module c32rtomb: # Code from module c32rtomb-tests: # Code from module c32tob: # Code from module c32tolower: # Code from module c32tolower-tests: # Code from module c32width: # Code from module c32width-tests: # Code from module c99: # Code from module calloc-gnu: # Code from module calloc-gnu-tests: # Code from module calloc-posix: # Code from module chdir: # Code from module chdir-long: # Code from module chdir-tests: # Code from module cloexec: # Code from module cloexec-tests: # Code from module close: # Code from module close-tests: # Code from module connect: # Code from module connect-tests: # Code from module creat: # Code from module creat-tests: # Code from module ctype: # Code from module ctype-tests: # Code from module dirent: # Code from module dirent-tests: # Code from module dirfd: # Code from module dirfd-tests: # Code from module double-slash-root: # Code from module dup: # Code from module dup-tests: # Code from module dup2: # Code from module dup2-tests: # Code from module environ: # Code from module environ-tests: # Code from module errno: # Code from module errno-tests: # Code from module error: # Code from module error-h: # Code from module error-tests: # Code from module euidaccess: # Code from module euidaccess-tests: # Code from module exitfail: # Code from module extensions: # Code from module extern-inline: # Code from module faccessat: # Code from module faccessat-tests: # Code from module fchdir: # Code from module fchdir-tests: # Code from module fcntl: # Code from module fcntl-h: # Code from module fcntl-h-tests: # Code from module fcntl-tests: # Code from module fd-hook: # Code from module fd-safer-flag: # Code from module fdopen: # Code from module fdopen-tests: # Code from module fgetc-tests: # Code from module filename: # Code from module filenamecat-lgpl: # Code from module flexmember: # Code from module float: # Code from module float-tests: # Code from module fpieee: AC_REQUIRE([gl_FP_IEEE]) # Code from module fpucw: # Code from module fputc-tests: # Code from module fread-tests: # Code from module free-posix: # Code from module free-posix-tests: # Code from module fstat: # Code from module fstat-tests: # Code from module fstatat: # Code from module fstatat-tests: # Code from module ftruncate: # Code from module ftruncate-tests: # Code from module func: # Code from module func-tests: # Code from module fwrite-tests: # Code from module gen-header: # Code from module gendocs: # Code from module getcwd-lgpl: # Code from module getcwd-lgpl-tests: # Code from module getdelim: # Code from module getdelim-tests: # Code from module getdtablesize: # Code from module getdtablesize-tests: # Code from module getgroups: # Code from module getgroups-tests: # Code from module getline: # Code from module getline-tests: # Code from module getopt-gnu: # Code from module getopt-gnu-tests: # Code from module getopt-posix: # Code from module getopt-posix-tests: # Code from module getpagesize: # Code from module getprogname: # Code from module getprogname-tests: # Code from module gettext-h: # Code from module gettimeofday: # Code from module gettimeofday-tests: # Code from module git-version-gen: # Code from module glibc-internal/dynarray: # Code from module glibc-internal/dynarray-tests: # Code from module gpl-3.0: # Code from module group-member: # Code from module hard-locale: # Code from module hard-locale-tests: # Code from module havelib: # Code from module ialloc: # Code from module idx: # Code from module ignore-value: # Code from module ignore-value-tests: # Code from module include_next: # Code from module inet_pton: # Code from module inet_pton-tests: # Code from module intprops: # Code from module intprops-tests: # Code from module inttypes: # Code from module inttypes-incomplete: # Code from module inttypes-tests: # Code from module ioctl: # Code from module ioctl-tests: # Code from module isblank: # Code from module isblank-tests: # Code from module isnand-nolibm: # Code from module isnand-nolibm-tests: # Code from module isnanf-nolibm: # Code from module isnanf-nolibm-tests: # Code from module isnanl-nolibm: # Code from module isnanl-nolibm-tests: # Code from module iswblank: # Code from module iswblank-tests: # Code from module iswctype: # Code from module iswctype-tests: # Code from module iswdigit: # Code from module iswdigit-tests: # Code from module iswpunct: # Code from module iswpunct-tests: # Code from module iswxdigit: # Code from module iswxdigit-tests: # Code from module langinfo: # Code from module langinfo-tests: # Code from module largefile: AC_REQUIRE([AC_SYS_LARGEFILE]) # Code from module largefile-tests: # Code from module libc-config: # Code from module limits-h: # Code from module limits-h-tests: # Code from module listen: # Code from module listen-tests: # Code from module localcharset: # Code from module localcharset-tests: # Code from module locale: # Code from module locale-tests: # Code from module localeconv: # Code from module localeconv-tests: # Code from module localename: # Code from module localename-tests: # Code from module lock: # Code from module lock-tests: # Code from module lstat: # Code from module lstat-tests: # Code from module malloc-gnu: # Code from module malloc-gnu-tests: # Code from module malloc-posix: # Code from module malloca: # Code from module malloca-tests: # Code from module math: # Code from module math-tests: # Code from module mbchar: # Code from module mbrtoc32: # Code from module mbrtoc32-tests: # Code from module mbrtowc: # Code from module mbrtowc-tests: # Code from module mbschr: # Code from module mbschr-tests: # Code from module mbsinit: # Code from module mbsinit-tests: # Code from module mbspbrk: # Code from module mbspbrk-tests: # Code from module mbsspn: # Code from module mbsspn-tests: # Code from module mbstok_r: # Code from module mbszero: # Code from module mbtowc: # Code from module mbuiterf: # Code from module memchr: # Code from module memchr-tests: # Code from module memmove: # Code from module mempcpy: # Code from module memrchr: # Code from module memrchr-tests: # Code from module minmax: # Code from module mktime: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module multiarch: # Code from module nan: # Code from module nanosleep: # Code from module nanosleep-tests: # Code from module netinet_in: # Code from module netinet_in-tests: # Code from module nl_langinfo: # Code from module nl_langinfo-tests: # Code from module nocrash: # Code from module nproc: # Code from module open: # Code from module open-tests: # Code from module openat: # Code from module openat-die: # Code from module openat-h: # Code from module openat-tests: # Code from module pathmax: # Code from module pathmax-tests: # Code from module perror: # Code from module perror-tests: # Code from module pipe-posix: # Code from module pipe-posix-tests: # Code from module pselect: # Code from module pselect-tests: # Code from module pthread-h: gl_ANYTHREADLIB_EARLY # Code from module pthread-h-tests: # Code from module pthread-thread: # Code from module pthread-thread-tests: # Code from module pthread_sigmask: # Code from module pthread_sigmask-tests: # Code from module putenv: # Code from module raise: # Code from module raise-tests: # Code from module random: # Code from module random-tests: # Code from module random_r: # Code from module random_r-tests: # Code from module rawmemchr: # Code from module rawmemchr-tests: # Code from module realloc-gnu: # Code from module realloc-gnu-tests: # Code from module realloc-posix: # Code from module reallocarray: # Code from module reallocarray-tests: # Code from module regex: # Code from module regex-tests: # Code from module root-uid: # Code from module same-inode: # Code from module save-cwd: # Code from module sched: # Code from module sched-tests: # Code from module sched_yield: # Code from module secure_getenv: # Code from module select: # Code from module select-tests: # Code from module setenv: # Code from module setenv-tests: # Code from module setlocale: # Code from module setlocale-null: # Code from module setlocale-null-tests: # Code from module setlocale-tests: # Code from module setsockopt: # Code from module setsockopt-tests: # Code from module signal-h: # Code from module signal-h-tests: # Code from module signbit: # Code from module signbit-tests: # Code from module signed-nan: # Code from module signed-snan: # Code from module sigprocmask: # Code from module sigprocmask-tests: # Code from module size_max: # Code from module sleep: # Code from module sleep-tests: # Code from module snan: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module socket: # Code from module socketlib: # Code from module sockets: # Code from module sockets-tests: # Code from module socklen: # Code from module ssize_t: # Code from module stat: # Code from module stat-tests: # Code from module stat-time: # Code from module stat-time-tests: # Code from module std-gnu11: # Code from module stdbool: # Code from module stdbool-tests: # Code from module stdckdint: # Code from module stdckdint-tests: # Code from module stddef: # Code from module stddef-tests: # Code from module stdint: # Code from module stdint-tests: # Code from module stdio: gl_STDIO_H_EARLY # Code from module stdio-tests: # Code from module stdlib: # Code from module stdlib-tests: # Code from module strcase: # Code from module strchrnul: # Code from module strchrnul-tests: # Code from module strdup-posix: # Code from module streq: # Code from module strerror: # Code from module strerror-override: # Code from module strerror-tests: # Code from module strerror_r-posix: # Code from module strerror_r-posix-tests: # Code from module string: # Code from module string-tests: # Code from module strings: # Code from module strings-tests: # Code from module strndup: # Code from module strnlen: # Code from module strnlen-tests: # Code from module strnlen1: # Code from module strptime: # Code from module strtod: # Code from module strtod-tests: # Code from module strtok_r: # Code from module symlink: # Code from module symlink-tests: # Code from module sys_ioctl: # Code from module sys_ioctl-tests: # Code from module sys_select: # Code from module sys_select-tests: # Code from module sys_socket: # Code from module sys_socket-tests: # Code from module sys_stat: # Code from module sys_stat-tests: # Code from module sys_time: # Code from module sys_time-tests: # Code from module sys_types: # Code from module sys_types-tests: # Code from module sys_uio: # Code from module sys_uio-tests: # Code from module sys_wait: # Code from module sys_wait-tests: # Code from module sysexits: # Code from module sysexits-tests: # Code from module system-posix: # Code from module test-framework-sh: # Code from module test-framework-sh-tests: # Code from module thread: # Code from module thread-optim: # Code from module thread-tests: # Code from module threadlib: gl_THREADLIB_EARLY # Code from module time: # Code from module time-h: # Code from module time-h-tests: # Code from module time-tests: # Code from module time_r: # Code from module uchar: # Code from module uchar-tests: # Code from module unicase/base: # Code from module unicase/tolower: # Code from module unicase/tolower-tests: # Code from module unictype/base: # Code from module unictype/ctype-alnum: # Code from module unictype/ctype-alnum-tests: # Code from module unictype/ctype-alpha: # Code from module unictype/ctype-alpha-tests: # Code from module unictype/ctype-blank: # Code from module unictype/ctype-blank-tests: # Code from module unictype/ctype-cntrl: # Code from module unictype/ctype-cntrl-tests: # Code from module unictype/ctype-digit: # Code from module unictype/ctype-digit-tests: # Code from module unictype/ctype-graph: # Code from module unictype/ctype-graph-tests: # Code from module unictype/ctype-lower: # Code from module unictype/ctype-lower-tests: # Code from module unictype/ctype-print: # Code from module unictype/ctype-print-tests: # Code from module unictype/ctype-punct: # Code from module unictype/ctype-punct-tests: # Code from module unictype/ctype-space: # Code from module unictype/ctype-space-tests: # Code from module unictype/ctype-upper: # Code from module unictype/ctype-upper-tests: # Code from module unictype/ctype-xdigit: # Code from module unictype/ctype-xdigit-tests: # Code from module uninorm/base: # Code from module unistd: # Code from module unistd-safer: # Code from module unistd-safer-tests: # Code from module unistd-tests: # Code from module unitypes: # Code from module uniwidth/base: # Code from module uniwidth/width: # Code from module uniwidth/width-tests: # Code from module unsetenv: # Code from module unsetenv-tests: # Code from module usleep: # Code from module usleep-tests: # Code from module vararrays: # Code from module vasnprintf: # Code from module vasnprintf-tests: # Code from module verify: # Code from module verify-tests: # Code from module vsnprintf: # Code from module vsnprintf-tests: # Code from module wchar: # Code from module wchar-tests: # Code from module wcrtomb: # Code from module wcrtomb-tests: # Code from module wctob: # Code from module wctomb: # Code from module wctype: # Code from module wctype-h: # Code from module wctype-h-tests: # Code from module wctype-tests: # Code from module wcwidth: # Code from module wcwidth-tests: # Code from module windows-mutex: # Code from module windows-once: # Code from module windows-recmutex: # Code from module windows-rwlock: # Code from module windows-thread: # Code from module windows-tls: # Code from module xalloc: # Code from module xalloc-die: # Code from module xalloc-die-tests: # Code from module xalloc-oversized: # Code from module xsize: # Code from module yield: ]) # This macro should be invoked from ./configure.ac, in the section # "Check for header files, types and library functions". AC_DEFUN([gl_INIT], [ AC_CONFIG_LIBOBJ_DIR([bootstrapped/lib]) AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) gl_cond_libtool=true gl_m4_base='bootstrapped/m4' m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) m4_pushdef([gl_LIBSOURCES_LIST], []) m4_pushdef([gl_LIBSOURCES_DIR], []) m4_pushdef([GL_MACRO_PREFIX], [gl]) m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [GL]) gl_COMMON gl_source_base='bootstrapped/lib' gl_source_base_prefix= gl_FUNC_ACCESS gl_CONDITIONAL([GL_COND_OBJ_ACCESS], [test $REPLACE_ACCESS = 1]) gl_UNISTD_MODULE_INDICATOR([access]) gl_ALIGNASOF changequote(,)dnl LTALLOCA=`echo "$ALLOCA" | sed -e 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'` changequote([, ])dnl AC_SUBST([LTALLOCA]) gl_FUNC_ALLOCA gl_CONDITIONAL_HEADER([alloca.h]) AC_PROG_MKDIR_P gl_ARGP m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=argp_error:2:c-format]) AM_][XGETTEXT_OPTION([--flag=argp_failure:4:c-format])]) gl_ASSERT_H gl_CONDITIONAL_HEADER([assert.h]) AC_PROG_MKDIR_P AC_REQUIRE([AC_CANONICAL_HOST]) gl_FUNC_BTOWC gl_CONDITIONAL([GL_COND_OBJ_BTOWC], [test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1]) AM_COND_IF([GL_COND_OBJ_BTOWC], [ gl_PREREQ_BTOWC ]) gl_WCHAR_MODULE_INDICATOR([btowc]) gl___BUILTIN_EXPECT AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isalnum]) AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isalpha]) AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isblank]) AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32iscntrl]) AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isdigit]) AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isgraph]) AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32islower]) AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isprint]) AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32ispunct]) AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isspace]) AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isupper]) AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32isxdigit]) AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32tolower]) AC_REQUIRE([gl_UCHAR_H]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how mbrtoc32 is implemented. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32width]) gl_UNISTD_MODULE_INDICATOR([chdir]) gl_FUNC_CHDIR_LONG gl_CONDITIONAL([GL_COND_OBJ_CHDIR_LONG], [test $gl_cv_have_unlimited_file_name_length = no]) AM_COND_IF([GL_COND_OBJ_CHDIR_LONG], [ gl_PREREQ_CHDIR_LONG ]) gl_MODULE_INDICATOR_FOR_TESTS([cloexec]) gl_FUNC_CLOSE gl_CONDITIONAL([GL_COND_OBJ_CLOSE], [test $REPLACE_CLOSE = 1]) gl_UNISTD_MODULE_INDICATOR([close]) gl_DIRENT_H gl_DIRENT_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_DIRFD gl_CONDITIONAL([GL_COND_OBJ_DIRFD], [test $HAVE_DIRFD = 0 || test $REPLACE_DIRFD = 1]) AM_COND_IF([GL_COND_OBJ_DIRFD], [ gl_PREREQ_DIRFD ]) gl_DIRENT_MODULE_INDICATOR([dirfd]) gl_DOUBLE_SLASH_ROOT gl_FUNC_DUP2 gl_CONDITIONAL([GL_COND_OBJ_DUP2], [test $REPLACE_DUP2 = 1]) AM_COND_IF([GL_COND_OBJ_DUP2], [ gl_PREREQ_DUP2 ]) gl_UNISTD_MODULE_INDICATOR([dup2]) gl_HEADER_ERRNO_H gl_CONDITIONAL_HEADER([errno.h]) AC_PROG_MKDIR_P AC_REQUIRE([gl_ERROR_H]) gl_ERROR gl_CONDITIONAL([GL_COND_OBJ_ERROR], [test $COMPILE_ERROR_C = 1]) AM_COND_IF([GL_COND_OBJ_ERROR], [ gl_PREREQ_ERROR ]) m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=error:3:c-format]) AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) gl_ERROR_H AC_PROG_MKDIR_P gl_FUNC_EUIDACCESS gl_CONDITIONAL([GL_COND_OBJ_EUIDACCESS], [test $HAVE_EUIDACCESS = 0]) AM_COND_IF([GL_COND_OBJ_EUIDACCESS], [ gl_PREREQ_EUIDACCESS ]) gl_UNISTD_MODULE_INDICATOR([euidaccess]) AC_REQUIRE([gl_EXTERN_INLINE]) gl_FUNC_FACCESSAT gl_CONDITIONAL([GL_COND_OBJ_FACCESSAT], [test $HAVE_FACCESSAT = 0 || test $REPLACE_FACCESSAT = 1]) AM_COND_IF([GL_COND_OBJ_FACCESSAT], [ gl_PREREQ_FACCESSAT ]) gl_MODULE_INDICATOR([faccessat]) gl_UNISTD_MODULE_INDICATOR([faccessat]) gl_FUNC_FCHDIR gl_CONDITIONAL([GL_COND_OBJ_FCHDIR], [test $HAVE_FCHDIR = 0 || test $REPLACE_FCHDIR = 1]) AM_COND_IF([GL_COND_OBJ_FCHDIR], [ gl_PREREQ_FCHDIR ]) gl_UNISTD_MODULE_INDICATOR([fchdir]) gl_FUNC_FCNTL gl_CONDITIONAL([GL_COND_OBJ_FCNTL], [test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1]) gl_FCNTL_MODULE_INDICATOR([fcntl]) gl_FCNTL_H gl_FCNTL_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_MODULE_INDICATOR([fd-safer-flag]) gl_FILE_NAME_CONCAT_LGPL gl_FLOAT_H gl_CONDITIONAL_HEADER([float.h]) AC_PROG_MKDIR_P gl_CONDITIONAL([GL_COND_OBJ_FLOAT], [test $REPLACE_FLOAT_LDBL = 1]) gl_CONDITIONAL([GL_COND_OBJ_ITOLD], [test $REPLACE_ITOLD = 1]) gl_FUNC_FREE gl_CONDITIONAL([GL_COND_OBJ_FREE], [test $REPLACE_FREE = 1]) AM_COND_IF([GL_COND_OBJ_FREE], [ gl_PREREQ_FREE ]) gl_STDLIB_MODULE_INDICATOR([free-posix]) gl_FUNC_FSTAT gl_CONDITIONAL([GL_COND_OBJ_FSTAT], [test $REPLACE_FSTAT = 1]) AM_COND_IF([GL_COND_OBJ_FSTAT], [ case "$host_os" in mingw* | windows*) AC_LIBOBJ([stat-w32]) ;; esac gl_PREREQ_FSTAT ]) gl_SYS_STAT_MODULE_INDICATOR([fstat]) gl_FUNC_FSTATAT gl_CONDITIONAL([GL_COND_OBJ_FSTATAT], [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1]) gl_SYS_STAT_MODULE_INDICATOR([fstatat]) gl_FUNC gl_FUNC_GETCWD_LGPL gl_CONDITIONAL([GL_COND_OBJ_GETCWD_LGPL], [test $REPLACE_GETCWD = 1]) gl_UNISTD_MODULE_INDICATOR([getcwd]) gl_FUNC_GETDELIM gl_CONDITIONAL([GL_COND_OBJ_GETDELIM], [test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1]) AM_COND_IF([GL_COND_OBJ_GETDELIM], [ gl_PREREQ_GETDELIM ]) gl_STDIO_MODULE_INDICATOR([getdelim]) gl_FUNC_GETDTABLESIZE gl_CONDITIONAL([GL_COND_OBJ_GETDTABLESIZE], [test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1]) AM_COND_IF([GL_COND_OBJ_GETDTABLESIZE], [ gl_PREREQ_GETDTABLESIZE ]) gl_UNISTD_MODULE_INDICATOR([getdtablesize]) gl_FUNC_GETGROUPS gl_CONDITIONAL([GL_COND_OBJ_GETGROUPS], [test $HAVE_GETGROUPS = 0 || test $REPLACE_GETGROUPS = 1]) gl_UNISTD_MODULE_INDICATOR([getgroups]) gl_FUNC_GETLINE gl_CONDITIONAL([GL_COND_OBJ_GETLINE], [test $REPLACE_GETLINE = 1]) AM_COND_IF([GL_COND_OBJ_GETLINE], [ gl_PREREQ_GETLINE ]) gl_STDIO_MODULE_INDICATOR([getline]) gl_FUNC_GETOPT_GNU dnl Because of the way gl_FUNC_GETOPT_GNU is implemented (the gl_getopt_required dnl mechanism), there is no need to do any AC_LIBOBJ or AC_SUBST here; they are dnl done in the getopt-posix module. gl_FUNC_GETOPT_POSIX gl_CONDITIONAL_HEADER([getopt.h]) gl_CONDITIONAL_HEADER([getopt-cdefs.h]) AC_PROG_MKDIR_P gl_CONDITIONAL([GL_COND_OBJ_GETOPT], [test $REPLACE_GETOPT = 1]) AM_COND_IF([GL_COND_OBJ_GETOPT], [ dnl Define the substituted variable GNULIB_UNISTD_H_GETOPT to 1. gl_UNISTD_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_GETOPT], [1]) ]) gl_UNISTD_MODULE_INDICATOR([getopt-posix]) gl_FUNC_GETPROGNAME gl_CONDITIONAL([GL_COND_OBJ_GETPROGNAME], [test $HAVE_GETPROGNAME = 0 || test $REPLACE_GETPROGNAME = 1]) AM_COND_IF([GL_COND_OBJ_GETPROGNAME], [ gl_PREREQ_GETPROGNAME ]) gl_STDLIB_MODULE_INDICATOR([getprogname]) AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) gl_FUNC_GETTIMEOFDAY gl_CONDITIONAL([GL_COND_OBJ_GETTIMEOFDAY], [test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1]) AM_COND_IF([GL_COND_OBJ_GETTIMEOFDAY], [ gl_PREREQ_GETTIMEOFDAY ]) gl_SYS_TIME_MODULE_INDICATOR([gettimeofday]) AC_PROG_MKDIR_P gl_FUNC_GROUP_MEMBER gl_CONDITIONAL([GL_COND_OBJ_GROUP_MEMBER], [test $HAVE_GROUP_MEMBER = 0]) AM_COND_IF([GL_COND_OBJ_GROUP_MEMBER], [ gl_PREREQ_GROUP_MEMBER ]) gl_UNISTD_MODULE_INDICATOR([group-member]) AC_REQUIRE([gl_FUNC_SETLOCALE_NULL]) HARD_LOCALE_LIB="$SETLOCALE_NULL_LIB" AC_SUBST([HARD_LOCALE_LIB]) dnl For backward compatibility. LIB_HARD_LOCALE="$HARD_LOCALE_LIB" AC_SUBST([LIB_HARD_LOCALE]) AC_DEFUN([gl_HAVE_MODULE_HAVELIB]) gl_INTTYPES_H gl_INTTYPES_INCOMPLETE gl_INTTYPES_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_ISNAND_NO_LIBM if test $gl_func_isnand_no_libm != yes; then AC_LIBOBJ([isnand]) gl_PREREQ_ISNAND fi gl_FUNC_ISNANF_NO_LIBM if test $gl_func_isnanf_no_libm != yes; then AC_LIBOBJ([isnanf]) gl_PREREQ_ISNANF fi gl_FUNC_ISNANL_NO_LIBM if test $gl_func_isnanl_no_libm != yes; then AC_LIBOBJ([isnanl]) gl_PREREQ_ISNANL fi gl_FUNC_ISWBLANK gl_CONDITIONAL([GL_COND_OBJ_ISWBLANK], [! { test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; } && { test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; }]) gl_WCTYPE_MODULE_INDICATOR([iswblank]) gl_FUNC_ISWCTYPE gl_CONDITIONAL([GL_COND_OBJ_ISWCTYPE], [test $HAVE_WCTYPE_T = 0 || test $GNULIBHEADERS_OVERRIDE_WINT_T = 1 || test $REPLACE_WCTYPE = 1]) gl_WCTYPE_MODULE_INDICATOR([iswctype]) gl_FUNC_ISWDIGIT gl_CONDITIONAL([GL_COND_OBJ_ISWDIGIT], [! { test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; } && test $REPLACE_ISWDIGIT = 1]) gl_WCTYPE_MODULE_INDICATOR([iswdigit]) gl_FUNC_ISWPUNCT gl_CONDITIONAL([GL_COND_OBJ_ISWPUNCT], [! { test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; } && test $REPLACE_ISWPUNCT = 1]) gl_WCTYPE_MODULE_INDICATOR([iswpunct]) gl_FUNC_ISWXDIGIT gl_CONDITIONAL([GL_COND_OBJ_ISWXDIGIT], [! { test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; } && test $REPLACE_ISWXDIGIT = 1]) gl_WCTYPE_MODULE_INDICATOR([iswxdigit]) gl_LANGINFO_H gl_LANGINFO_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P AC_REQUIRE([gl_LARGEFILE]) gl___INLINE gl_LIMITS_H gl_CONDITIONAL_HEADER([limits.h]) AC_PROG_MKDIR_P gl_LOCALCHARSET dnl For backward compatibility. Some packages still use this. LOCALCHARSET_TESTS_ENVIRONMENT= AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT]) gl_LOCALE_H gl_LOCALE_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_LOCALECONV gl_CONDITIONAL([GL_COND_OBJ_LOCALECONV], [test $REPLACE_LOCALECONV = 1]) AM_COND_IF([GL_COND_OBJ_LOCALECONV], [ gl_PREREQ_LOCALECONV ]) gl_LOCALE_MODULE_INDICATOR([localeconv]) gl_LOCK gl_MODULE_INDICATOR([lock]) gl_FUNC_LSTAT gl_CONDITIONAL([GL_COND_OBJ_LSTAT], [test $REPLACE_LSTAT = 1]) AM_COND_IF([GL_COND_OBJ_LSTAT], [ gl_PREREQ_LSTAT ]) gl_SYS_STAT_MODULE_INDICATOR([lstat]) gl_FUNC_MALLOC_GNU if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 1; then AC_LIBOBJ([malloc]) fi gl_STDLIB_MODULE_INDICATOR([malloc-gnu]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then AC_LIBOBJ([malloc]) fi gl_STDLIB_MODULE_INDICATOR([malloc-posix]) gl_MALLOCA gl_MATH_H gl_MATH_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_MBCHAR gl_FUNC_MBRTOC32 gl_CONDITIONAL([GL_COND_OBJ_MBRTOC32], [test $HAVE_MBRTOC32 = 0 || test $REPLACE_MBRTOC32 = 1]) AM_COND_IF([GL_COND_OBJ_MBRTOC32], [ if test $REPLACE_MBSTATE_T = 1; then AC_LIBOBJ([lc-charset-dispatch]) AC_LIBOBJ([mbtowc-lock]) gl_PREREQ_MBTOWC_LOCK fi gl_PREREQ_MBRTOC32 ]) gl_UCHAR_MODULE_INDICATOR([mbrtoc32]) gl_FUNC_MBRTOWC gl_CONDITIONAL([GL_COND_OBJ_MBRTOWC], [test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1]) AM_COND_IF([GL_COND_OBJ_MBRTOWC], [ if test $REPLACE_MBSTATE_T = 1; then AC_LIBOBJ([lc-charset-dispatch]) AC_LIBOBJ([mbtowc-lock]) gl_PREREQ_MBTOWC_LOCK fi gl_PREREQ_MBRTOWC ]) gl_WCHAR_MODULE_INDICATOR([mbrtowc]) gl_STRING_MODULE_INDICATOR([mbschr]) gl_FUNC_MBSINIT gl_CONDITIONAL([GL_COND_OBJ_MBSINIT], [test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1]) AM_COND_IF([GL_COND_OBJ_MBSINIT], [ gl_PREREQ_MBSINIT ]) gl_WCHAR_MODULE_INDICATOR([mbsinit]) gl_STRING_MODULE_INDICATOR([mbspbrk]) gl_STRING_MODULE_INDICATOR([mbsspn]) gl_STRING_MODULE_INDICATOR([mbstok_r]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN gl_MUSL_LIBC gl_WCHAR_MODULE_INDICATOR([mbszero]) gl_FUNC_MBTOWC gl_CONDITIONAL([GL_COND_OBJ_MBTOWC], [test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1]) AM_COND_IF([GL_COND_OBJ_MBTOWC], [ gl_PREREQ_MBTOWC ]) gl_STDLIB_MODULE_INDICATOR([mbtowc]) gl_MBITER gl_FUNC_MEMCHR gl_CONDITIONAL([GL_COND_OBJ_MEMCHR], [test $REPLACE_MEMCHR = 1]) AM_COND_IF([GL_COND_OBJ_MEMCHR], [ gl_PREREQ_MEMCHR ]) gl_STRING_MODULE_INDICATOR([memchr]) gl_FUNC_MEMMOVE gl_CONDITIONAL([GL_COND_OBJ_MEMMOVE], [test $ac_cv_func_memmove = no]) AM_COND_IF([GL_COND_OBJ_MEMMOVE], [ gl_PREREQ_MEMMOVE ]) gl_FUNC_MEMPCPY gl_CONDITIONAL([GL_COND_OBJ_MEMPCPY], [test $HAVE_MEMPCPY = 0 || test $REPLACE_MEMPCPY = 1]) AM_COND_IF([GL_COND_OBJ_MEMPCPY], [ gl_PREREQ_MEMPCPY ]) gl_STRING_MODULE_INDICATOR([mempcpy]) gl_FUNC_MEMRCHR gl_CONDITIONAL([GL_COND_OBJ_MEMRCHR], [test $ac_cv_func_memrchr = no]) AM_COND_IF([GL_COND_OBJ_MEMRCHR], [ gl_PREREQ_MEMRCHR ]) gl_STRING_MODULE_INDICATOR([memrchr]) gl_MINMAX gl_FUNC_MKTIME if test $REPLACE_MKTIME = 1; then AC_LIBOBJ([mktime]) gl_PREREQ_MKTIME fi gl_TIME_MODULE_INDICATOR([mktime]) AC_REQUIRE([gl_MSVC_INVAL]) gl_CONDITIONAL([GL_COND_OBJ_MSVC_INVAL], [test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1]) AC_REQUIRE([gl_MSVC_NOTHROW]) gl_CONDITIONAL([GL_COND_OBJ_MSVC_NOTHROW], [test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1]) gl_MODULE_INDICATOR([msvc-nothrow]) gl_MULTIARCH gl_FUNC_NL_LANGINFO gl_CONDITIONAL([GL_COND_OBJ_NL_LANGINFO], [test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1]) gl_CONDITIONAL([GL_COND_OBJ_NL_LANGINFO_LOCK], [test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0]) if test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0; then gl_PREREQ_NL_LANGINFO_LOCK fi gl_LANGINFO_MODULE_INDICATOR([nl_langinfo]) gl_NPROC gl_FUNC_OPEN gl_CONDITIONAL([GL_COND_OBJ_OPEN], [test $REPLACE_OPEN = 1]) AM_COND_IF([GL_COND_OBJ_OPEN], [ gl_PREREQ_OPEN ]) gl_FCNTL_MODULE_INDICATOR([open]) gl_FUNC_OPENAT gl_CONDITIONAL([GL_COND_OBJ_OPENAT], [test $HAVE_OPENAT = 0 || test $REPLACE_OPENAT = 1]) AM_COND_IF([GL_COND_OBJ_OPENAT], [ gl_PREREQ_OPENAT ]) gl_MODULE_INDICATOR([openat]) dnl for lib/getcwd.c gl_FCNTL_MODULE_INDICATOR([openat]) gl_PATHMAX gl_FUNC_PIPE gl_CONDITIONAL([GL_COND_OBJ_PIPE], [test $HAVE_PIPE = 0]) gl_UNISTD_MODULE_INDICATOR([pipe]) gl_FUNC_RAWMEMCHR gl_CONDITIONAL([GL_COND_OBJ_RAWMEMCHR], [test $HAVE_RAWMEMCHR = 0]) AM_COND_IF([GL_COND_OBJ_RAWMEMCHR], [ gl_PREREQ_RAWMEMCHR ]) gl_STRING_MODULE_INDICATOR([rawmemchr]) gl_FUNC_REALLOC_GNU if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then AC_LIBOBJ([realloc]) fi gl_STDLIB_MODULE_INDICATOR([realloc-gnu]) gl_FUNC_REALLOC_POSIX if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then AC_LIBOBJ([realloc]) fi gl_STDLIB_MODULE_INDICATOR([realloc-posix]) gl_REGEX gl_CONDITIONAL([GL_COND_OBJ_REGEX], [test $ac_use_included_regex = yes]) AM_COND_IF([GL_COND_OBJ_REGEX], [ gl_PREREQ_REGEX ]) gl_SAVE_CWD gl_FUNC_SECURE_GETENV gl_CONDITIONAL([GL_COND_OBJ_SECURE_GETENV], [test $HAVE_SECURE_GETENV = 0]) AM_COND_IF([GL_COND_OBJ_SECURE_GETENV], [ gl_PREREQ_SECURE_GETENV ]) gl_STDLIB_MODULE_INDICATOR([secure_getenv]) gl_FUNC_SELECT gl_CONDITIONAL([GL_COND_OBJ_SELECT], [test $REPLACE_SELECT = 1]) gl_SYS_SELECT_MODULE_INDICATOR([select]) gl_FUNC_SETLOCALE_NULL gl_CONDITIONAL([GL_COND_OBJ_SETLOCALE_LOCK], [test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0]) AM_COND_IF([GL_COND_OBJ_SETLOCALE_LOCK], [ gl_PREREQ_SETLOCALE_LOCK ]) gl_LOCALE_MODULE_INDICATOR([setlocale_null]) gl_SIGNAL_H gl_SIGNAL_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SIGNBIT gl_CONDITIONAL([GL_COND_OBJ_SIGNBIT3], [test $REPLACE_SIGNBIT = 1]) gl_MATH_MODULE_INDICATOR([signbit]) gl_SIZE_MAX gl_FUNC_SLEEP gl_CONDITIONAL([GL_COND_OBJ_SLEEP], [test $HAVE_SLEEP = 0 || test $REPLACE_SLEEP = 1]) gl_UNISTD_MODULE_INDICATOR([sleep]) AC_REQUIRE([gl_SOCKETLIB]) AC_REQUIRE([gl_SOCKETS]) gl_TYPE_SOCKLEN_T gt_TYPE_SSIZE_T gl_FUNC_STAT gl_CONDITIONAL([GL_COND_OBJ_STAT], [test $REPLACE_STAT = 1]) AM_COND_IF([GL_COND_OBJ_STAT], [ case "$host_os" in mingw* | windows*) AC_LIBOBJ([stat-w32]) ;; esac gl_PREREQ_STAT ]) gl_SYS_STAT_MODULE_INDICATOR([stat]) gl_STAT_TIME gl_STAT_BIRTHTIME gl_C_BOOL AC_CHECK_HEADERS_ONCE([stdckdint.h]) if test $ac_cv_header_stdckdint_h = yes; then GL_GENERATE_STDCKDINT_H=false else GL_GENERATE_STDCKDINT_H=true fi gl_CONDITIONAL_HEADER([stdckdint.h]) AC_PROG_MKDIR_P gl_STDDEF_H gl_STDDEF_H_REQUIRE_DEFAULTS gl_CONDITIONAL_HEADER([stddef.h]) AC_PROG_MKDIR_P gl_STDINT_H gl_CONDITIONAL_HEADER([stdint.h]) dnl Because of gl_REPLACE_LIMITS_H: gl_CONDITIONAL_HEADER([limits.h]) AC_PROG_MKDIR_P gl_STDIO_H gl_STDIO_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_CONDITIONAL([GL_COND_OBJ_STDIO_READ], [test $REPLACE_STDIO_READ_FUNCS = 1]) gl_CONDITIONAL([GL_COND_OBJ_STDIO_WRITE], [test $REPLACE_STDIO_WRITE_FUNCS = 1]) dnl No need to create extra modules for these functions. Everyone who uses dnl <stdio.h> likely needs them. gl_STDIO_MODULE_INDICATOR([fscanf]) gl_MODULE_INDICATOR([fscanf]) gl_STDIO_MODULE_INDICATOR([scanf]) gl_MODULE_INDICATOR([scanf]) gl_STDIO_MODULE_INDICATOR([fgetc]) gl_STDIO_MODULE_INDICATOR([getc]) gl_STDIO_MODULE_INDICATOR([getchar]) gl_STDIO_MODULE_INDICATOR([fgets]) gl_STDIO_MODULE_INDICATOR([fread]) dnl No need to create extra modules for these functions. Everyone who uses dnl <stdio.h> likely needs them. gl_STDIO_MODULE_INDICATOR([fprintf]) gl_STDIO_MODULE_INDICATOR([printf]) gl_STDIO_MODULE_INDICATOR([vfprintf]) gl_STDIO_MODULE_INDICATOR([vprintf]) gl_STDIO_MODULE_INDICATOR([fputc]) gl_STDIO_MODULE_INDICATOR([putc]) gl_STDIO_MODULE_INDICATOR([putchar]) gl_STDIO_MODULE_INDICATOR([fputs]) gl_STDIO_MODULE_INDICATOR([puts]) gl_STDIO_MODULE_INDICATOR([fwrite]) gl_STDLIB_H gl_STDLIB_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_STRCASE gl_CONDITIONAL([GL_COND_OBJ_STRCASECMP], [test $HAVE_STRCASECMP = 0]) AM_COND_IF([GL_COND_OBJ_STRCASECMP], [ gl_PREREQ_STRCASECMP ]) gl_CONDITIONAL([GL_COND_OBJ_STRNCASECMP], [test $HAVE_STRNCASECMP = 0]) AM_COND_IF([GL_COND_OBJ_STRNCASECMP], [ gl_PREREQ_STRNCASECMP ]) gl_FUNC_STRCHRNUL gl_CONDITIONAL([GL_COND_OBJ_STRCHRNUL], [test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1]) AM_COND_IF([GL_COND_OBJ_STRCHRNUL], [ gl_PREREQ_STRCHRNUL ]) gl_STRING_MODULE_INDICATOR([strchrnul]) gl_FUNC_STRDUP_POSIX gl_CONDITIONAL([GL_COND_OBJ_STRDUP], [test $REPLACE_STRDUP = 1]) AM_COND_IF([GL_COND_OBJ_STRDUP], [ gl_PREREQ_STRDUP ]) gl_STRING_MODULE_INDICATOR([strdup]) gl_FUNC_STRERROR gl_CONDITIONAL([GL_COND_OBJ_STRERROR], [test $REPLACE_STRERROR = 1]) gl_MODULE_INDICATOR([strerror]) gl_STRING_MODULE_INDICATOR([strerror]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) gl_CONDITIONAL([GL_COND_OBJ_STRERROR_OVERRIDE], [test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1]) AM_COND_IF([GL_COND_OBJ_STRERROR_OVERRIDE], [ gl_PREREQ_SYS_H_WINSOCK2 ]) gl_STRING_H gl_STRING_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_STRINGS_H gl_STRINGS_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_STRNDUP gl_CONDITIONAL([GL_COND_OBJ_STRNDUP], [test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1]) gl_STRING_MODULE_INDICATOR([strndup]) gl_FUNC_STRNLEN gl_CONDITIONAL([GL_COND_OBJ_STRNLEN], [test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1]) AM_COND_IF([GL_COND_OBJ_STRNLEN], [ gl_PREREQ_STRNLEN ]) gl_STRING_MODULE_INDICATOR([strnlen]) gl_FUNC_STRPTIME gl_CONDITIONAL([GL_COND_OBJ_STRPTIME], [test $HAVE_STRPTIME = 0]) AM_COND_IF([GL_COND_OBJ_STRPTIME], [ gl_PREREQ_STRPTIME ]) gl_TIME_MODULE_INDICATOR([strptime]) gl_FUNC_STRTOD gl_CONDITIONAL([GL_COND_OBJ_STRTOD], [test $HAVE_STRTOD = 0 || test $REPLACE_STRTOD = 1]) AM_COND_IF([GL_COND_OBJ_STRTOD], [ gl_PREREQ_STRTOD ]) gl_STDLIB_MODULE_INDICATOR([strtod]) gl_FUNC_STRTOK_R gl_CONDITIONAL([GL_COND_OBJ_STRTOK_R], [test $HAVE_STRTOK_R = 0 || test $REPLACE_STRTOK_R = 1]) AM_COND_IF([GL_COND_OBJ_STRTOK_R], [ gl_PREREQ_STRTOK_R ]) gl_STRING_MODULE_INDICATOR([strtok_r]) gl_SYS_SELECT_H gl_SYS_SELECT_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYS_SOCKET_H gl_SYS_SOCKET_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYS_STAT_H gl_SYS_STAT_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYS_TIME_H gl_SYS_TIME_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYS_TYPES_H gl_SYS_TYPES_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYS_UIO_H gl_SYS_UIO_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYS_WAIT_H gl_SYS_WAIT_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYSEXITS gl_CONDITIONAL_HEADER([sysexits.h]) AC_PROG_MKDIR_P gl_STDLIB_MODULE_INDICATOR([system-posix]) AC_REQUIRE([gl_THREADLIB]) gl_FUNC_TIME gl_CONDITIONAL([GL_COND_OBJ_TIME], [test $REPLACE_TIME = 1]) AM_COND_IF([GL_COND_OBJ_TIME], [ gl_PREREQ_TIME ]) gl_TIME_MODULE_INDICATOR([time]) gl_TIME_H gl_TIME_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_TIME_R gl_CONDITIONAL([GL_COND_OBJ_TIME_R], [test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1]) AM_COND_IF([GL_COND_OBJ_TIME_R], [ gl_PREREQ_TIME_R ]) gl_TIME_MODULE_INDICATOR([time_r]) gl_UCHAR_H gl_UCHAR_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_LIBUNISTRING_LIBHEADER([1.2], [unicase.h]) gl_UNICASE_H gl_UNICASE_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_LIBUNISTRING_MODULE([0.9.11], [unicase/tolower]) gl_LIBUNISTRING_LIBHEADER([1.2], [unictype.h]) gl_UNICTYPE_H gl_UNICTYPE_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([1.2], [unictype/ctype-alnum]) AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([1.2], [unictype/ctype-alpha]) AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-blank]) AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-cntrl]) AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-digit]) AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([1.2], [unictype/ctype-graph]) AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.11], [unictype/ctype-lower]) AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([1.2], [unictype/ctype-print]) AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([1.2], [unictype/ctype-punct]) AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-space]) AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.11], [unictype/ctype-upper]) AC_REQUIRE([AC_C_INLINE]) gl_LIBUNISTRING_MODULE([0.9.8], [unictype/ctype-xdigit]) gl_LIBUNISTRING_LIBHEADER([1.2], [uninorm.h]) gl_UNINORM_H gl_UNINORM_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_UNISTD_H gl_UNISTD_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_UNISTD_SAFER gl_LIBUNISTRING_LIBHEADER([0.9.11], [unitypes.h]) AC_PROG_MKDIR_P AH_VERBATIM([unitypes_restrict], [ /* This definition is a duplicate of the one in unitypes.h. It is here so that we can cope with an older version of unitypes.h that does not contain this definition and that is pre-installed among the public header files. */ # if defined __restrict \ || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3 # define _UC_RESTRICT __restrict # elif 199901L <= __STDC_VERSION__ || defined restrict # define _UC_RESTRICT restrict # else # define _UC_RESTRICT # endif ]) gl_LIBUNISTRING_LIBHEADER([0.9.11], [uniwidth.h]) AC_PROG_MKDIR_P gl_LIBUNISTRING_MODULE([1.1], [uniwidth/width]) AC_C_VARARRAYS AC_REQUIRE([AC_C_RESTRICT]) gl_FUNC_VASNPRINTF gl_FUNC_VSNPRINTF gl_STDIO_MODULE_INDICATOR([vsnprintf]) gl_WCHAR_H gl_WCHAR_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_WCRTOMB gl_CONDITIONAL([GL_COND_OBJ_WCRTOMB], [test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1]) AM_COND_IF([GL_COND_OBJ_WCRTOMB], [ gl_PREREQ_WCRTOMB ]) gl_WCHAR_MODULE_INDICATOR([wcrtomb]) gl_FUNC_WCTYPE gl_CONDITIONAL([GL_COND_OBJ_WCTYPE], [test $HAVE_WCTYPE = 0 || test $REPLACE_WCTYPE = 1]) gl_WCTYPE_MODULE_INDICATOR([wctype]) gl_WCTYPE_H gl_WCTYPE_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_WCWIDTH gl_CONDITIONAL([GL_COND_OBJ_WCWIDTH], [test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1]) AM_COND_IF([GL_COND_OBJ_WCWIDTH], [ gl_PREREQ_WCWIDTH ]) gl_WCHAR_MODULE_INDICATOR([wcwidth]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_MUTEX], [case "$host_os" in mingw* | windows*) true;; *) false;; esac]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_ONCE], [case "$host_os" in mingw* | windows*) true;; *) false;; esac]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_RECMUTEX], [case "$host_os" in mingw* | windows*) true;; *) false;; esac]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_RWLOCK], [case "$host_os" in mingw* | windows*) true;; *) false;; esac]) gl_XSIZE # End of code from modules m4_ifval(gl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || for gl_file in ]gl_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([GL_MODULE_INDICATOR_PREFIX]) m4_popdef([GL_MACRO_PREFIX]) m4_popdef([gl_LIBSOURCES_DIR]) m4_popdef([gl_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gl_libobjs= gl_ltlibobjs= gl_libobjdeps= if test -n "$gl_LIBOBJS"; then # Remove the extension. changequote(,)dnl sed_drop_objext='s/\.o$//;s/\.obj$//' sed_dirname1='s,//*,/,g' sed_dirname2='s,\(.\)/$,\1,' sed_dirname3='s,^[^/]*$,.,' sed_dirname4='s,\(.\)/[^/]*$,\1,' sed_basename1='s,.*/,,' changequote([, ])dnl for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"` i_base=`echo "$i" | sed -e "$sed_basename1"` gl_libobjdeps="$gl_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Plo" done fi AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) AC_SUBST([gl_LIBOBJDEPS], [$gl_libobjdeps]) ]) gltests_libdeps= gltests_ltlibdeps= m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) m4_pushdef([gltests_LIBSOURCES_LIST], []) m4_pushdef([gltests_LIBSOURCES_DIR], []) m4_pushdef([GL_MACRO_PREFIX], [gltests]) m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [GL]) gl_COMMON AC_REQUIRE([gl_CC_ALLOW_WARNINGS]) AC_REQUIRE([gl_CXX_ALLOW_WARNINGS]) gl_source_base='bootstrapped/tests' gl_source_base_prefix= changequote(,)dnl gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS changequote([, ])dnl AC_SUBST([gltests_WITNESS]) gl_module_indicator_condition=$gltests_WITNESS m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) AC_REQUIRE([gl_SYS_SOCKET_H]) gl_CONDITIONAL([GL_COND_OBJ_ACCEPT], [test "$ac_cv_header_winsock2_h" = yes]) gl_SYS_SOCKET_MODULE_INDICATOR([accept]) AC_CHECK_FUNCS_ONCE([geteuid]) gl_ARPA_INET_H gl_ARPA_INET_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P AC_REQUIRE([gl_SYS_SOCKET_H]) gl_CONDITIONAL([GL_COND_OBJ_BIND], [test "$ac_cv_header_winsock2_h" = yes]) gl_SYS_SOCKET_MODULE_INDICATOR([bind]) gl_UCHAR_MODULE_INDICATOR([btoc32]) gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_FR gt_LOCALE_TR_UTF8 gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gl_MUSL_LIBC gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gl_MUSL_LIBC gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gl_MUSL_LIBC gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gl_MUSL_LIBC gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gl_MUSL_LIBC gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gl_FUNC_C32RTOMB gl_CONDITIONAL([GL_COND_OBJ_C32RTOMB], [test $HAVE_C32RTOMB = 0 || test $REPLACE_C32RTOMB = 1]) gl_UCHAR_MODULE_INDICATOR([c32rtomb]) gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) gl_UCHAR_MODULE_INDICATOR([c32tob]) gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gl_FUNC_CALLOC_GNU if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 1; then AC_LIBOBJ([calloc]) fi gl_STDLIB_MODULE_INDICATOR([calloc-gnu]) gl_FUNC_CALLOC_POSIX if test $REPLACE_CALLOC_FOR_CALLOC_POSIX = 1; then AC_LIBOBJ([calloc]) fi gl_STDLIB_MODULE_INDICATOR([calloc-posix]) AC_REQUIRE([gl_SYS_SOCKET_H]) gl_CONDITIONAL([GL_COND_OBJ_CONNECT], [test "$ac_cv_header_winsock2_h" = yes]) gl_SYS_SOCKET_MODULE_INDICATOR([connect]) gl_FUNC_CREAT gl_CONDITIONAL([GL_COND_OBJ_CREAT], [test $REPLACE_CREAT = 1]) gl_FCNTL_MODULE_INDICATOR([creat]) gl_CTYPE_H gl_CTYPE_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_DUP gl_CONDITIONAL([GL_COND_OBJ_DUP], [test $REPLACE_DUP = 1]) AM_COND_IF([GL_COND_OBJ_DUP], [ gl_PREREQ_DUP ]) gl_UNISTD_MODULE_INDICATOR([dup]) gl_ENVIRON gl_UNISTD_MODULE_INDICATOR([environ]) AC_CHECK_FUNCS_ONCE([geteuid]) gl_FUNC_FDOPEN gl_CONDITIONAL([GL_COND_OBJ_FDOPEN], [test $REPLACE_FDOPEN = 1]) AM_COND_IF([GL_COND_OBJ_FDOPEN], [ gl_PREREQ_FDOPEN ]) gl_STDIO_MODULE_INDICATOR([fdopen]) AC_C_FLEXIBLE_ARRAY_MEMBER gl_FUNC_FTRUNCATE gl_CONDITIONAL([GL_COND_OBJ_FTRUNCATE], [test $HAVE_FTRUNCATE = 0 || test $REPLACE_FTRUNCATE = 1]) AM_COND_IF([GL_COND_OBJ_FTRUNCATE], [ gl_PREREQ_FTRUNCATE ]) gl_UNISTD_MODULE_INDICATOR([ftruncate]) gl_FUNC_GETPAGESIZE gl_CONDITIONAL([GL_COND_OBJ_GETPAGESIZE], [test $REPLACE_GETPAGESIZE = 1]) gl_UNISTD_MODULE_INDICATOR([getpagesize]) gl_MUSL_LIBC dnl Distinguish OpenBSD >= 6.2 from OpenBSD < 6.2. gl_CHECK_FUNCS_ANDROID([duplocale], [[#include <locale.h>]]) gl_FUNC_INET_PTON gl_CONDITIONAL([GL_COND_OBJ_INET_PTON], [test $HAVE_INET_PTON = 0 || test $REPLACE_INET_PTON = 1]) AM_COND_IF([GL_COND_OBJ_INET_PTON], [ gl_PREREQ_INET_PTON ]) gl_ARPA_INET_MODULE_INDICATOR([inet_pton]) AC_C_BIGENDIAN gl_FUNC_IOCTL gl_CONDITIONAL([GL_COND_OBJ_IOCTL], [test $HAVE_IOCTL = 0 || test $REPLACE_IOCTL = 1]) gl_SYS_IOCTL_MODULE_INDICATOR([ioctl]) gl_FUNC_ISBLANK gl_CONDITIONAL([GL_COND_OBJ_ISBLANK], [test $HAVE_ISBLANK = 0]) gl_MODULE_INDICATOR([isblank]) gl_CTYPE_MODULE_INDICATOR([isblank]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN AC_REQUIRE([gl_SYS_SOCKET_H]) gl_CONDITIONAL([GL_COND_OBJ_LISTEN], [test "$ac_cv_header_winsock2_h" = yes]) gl_SYS_SOCKET_MODULE_INDICATOR([listen]) gl_CHECK_FUNCS_ANDROID([newlocale], [[#include <locale.h>]]) gl_LOCALENAME gl_LOCALE_MODULE_INDICATOR([localename]) gl_CHECK_FUNCS_ANDROID([newlocale], [[#include <locale.h>]]) AC_CHECK_HEADERS_ONCE([semaphore.h]) AC_CHECK_DECLS_ONCE([alarm]) AC_REQUIRE([gl_SEMAPHORE]) gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gt_LOCALE_ZH_CN gt_LOCALE_FR_UTF8 gt_LOCALE_FR_UTF8 gt_LOCALE_FR_UTF8 dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) gl_FUNC_NANOSLEEP gl_CONDITIONAL([GL_COND_OBJ_NANOSLEEP], [test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1]) gl_TIME_MODULE_INDICATOR([nanosleep]) AC_CHECK_DECLS_ONCE([alarm]) gl_HEADER_NETINET_IN gl_CONDITIONAL_HEADER([netinet/in.h]) AC_PROG_MKDIR_P gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_FUNC_USELOCALE gl_MUSL_LIBC gl_FUNC_PERROR gl_CONDITIONAL([GL_COND_OBJ_PERROR], [test $REPLACE_PERROR = 1]) gl_STRING_MODULE_INDICATOR([perror]) gl_FUNC_PSELECT gl_CONDITIONAL([GL_COND_OBJ_PSELECT], [test $HAVE_PSELECT = 0 || test $REPLACE_PSELECT = 1]) gl_SYS_SELECT_MODULE_INDICATOR([pselect]) AC_CHECK_HEADERS_ONCE([sys/wait.h]) gl_PTHREAD_H gl_PTHREAD_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_PTHREAD_THREAD gl_CONDITIONAL([GL_COND_OBJ_PTHREAD_THREAD], [test $HAVE_PTHREAD_CREATE = 0 || test $REPLACE_PTHREAD_CREATE = 1]) gl_PTHREAD_MODULE_INDICATOR([pthread-thread]) gl_FUNC_PTHREAD_SIGMASK gl_CONDITIONAL([GL_COND_OBJ_PTHREAD_SIGMASK], [test $HAVE_PTHREAD_SIGMASK = 0 || test $REPLACE_PTHREAD_SIGMASK = 1]) AM_COND_IF([GL_COND_OBJ_PTHREAD_SIGMASK], [ gl_PREREQ_PTHREAD_SIGMASK ]) gl_SIGNAL_MODULE_INDICATOR([pthread_sigmask]) gl_FUNC_PUTENV gl_CONDITIONAL([GL_COND_OBJ_PUTENV], [test $REPLACE_PUTENV = 1]) AM_COND_IF([GL_COND_OBJ_PUTENV], [ gl_PREREQ_PUTENV ]) gl_STDLIB_MODULE_INDICATOR([putenv]) gl_FUNC_RAISE gl_CONDITIONAL([GL_COND_OBJ_RAISE], [test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1]) AM_COND_IF([GL_COND_OBJ_RAISE], [ gl_PREREQ_RAISE ]) gl_SIGNAL_MODULE_INDICATOR([raise]) gl_FUNC_RANDOM gl_CONDITIONAL([GL_COND_OBJ_RANDOM], [test $HAVE_RANDOM = 0 || test $REPLACE_RANDOM = 1 || test $REPLACE_INITSTATE = 1 || test $REPLACE_SETSTATE = 1]) AM_COND_IF([GL_COND_OBJ_RANDOM], [ gl_PREREQ_RANDOM ]) gl_STDLIB_MODULE_INDICATOR([random]) gl_FUNC_RANDOM_R gl_CONDITIONAL([GL_COND_OBJ_RANDOM_R], [test $HAVE_RANDOM_R = 0 || test $REPLACE_RANDOM_R = 1]) AM_COND_IF([GL_COND_OBJ_RANDOM_R], [ gl_PREREQ_RANDOM_R ]) gl_STDLIB_MODULE_INDICATOR([random_r]) dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) gl_FUNC_REALLOCARRAY gl_CONDITIONAL([GL_COND_OBJ_REALLOCARRAY], [test $HAVE_REALLOCARRAY = 0 || test $REPLACE_REALLOCARRAY = 1]) AM_COND_IF([GL_COND_OBJ_REALLOCARRAY], [ gl_PREREQ_REALLOCARRAY ]) gl_MODULE_INDICATOR([reallocarray]) gl_STDLIB_MODULE_INDICATOR([reallocarray]) gl_SCHED_H gl_SCHED_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_SCHED_YIELD gl_CONDITIONAL([GL_COND_OBJ_SCHED_YIELD], [test $HAVE_SCHED_YIELD = 0 || test $REPLACE_SCHED_YIELD = 1]) gl_SCHED_MODULE_INDICATOR([sched_yield]) AC_CHECK_HEADERS_ONCE([sys/wait.h]) gl_FUNC_SETENV gl_CONDITIONAL([GL_COND_OBJ_SETENV], [test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1]) gl_STDLIB_MODULE_INDICATOR([setenv]) gl_FUNC_SETLOCALE gl_CONDITIONAL([GL_COND_OBJ_SETLOCALE], [test $REPLACE_SETLOCALE = 1]) AM_COND_IF([GL_COND_OBJ_SETLOCALE], [ gl_PREREQ_SETLOCALE ]) gl_LOCALE_MODULE_INDICATOR([setlocale]) gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN AC_REQUIRE([gl_SYS_SOCKET_H]) gl_CONDITIONAL([GL_COND_OBJ_SETSOCKOPT], [test "$ac_cv_header_winsock2_h" = yes]) gl_SYS_SOCKET_MODULE_INDICATOR([setsockopt]) gl_SIGNALBLOCKING gl_CONDITIONAL([GL_COND_OBJ_SIGPROCMASK], [test $HAVE_POSIX_SIGNALBLOCKING = 0]) AM_COND_IF([GL_COND_OBJ_SIGPROCMASK], [ gl_PREREQ_SIGPROCMASK ]) gl_SIGNAL_MODULE_INDICATOR([sigprocmask]) AC_CHECK_DECLS_ONCE([alarm]) gl_SNAN gl_NAN_MIPS AC_REQUIRE([gl_SYS_SOCKET_H]) gl_CONDITIONAL([GL_COND_OBJ_SOCKET], [test "$ac_cv_header_winsock2_h" = yes]) # When this module is used, sockets may actually occur as file descriptors, # hence it is worth warning if the modules 'close' and 'ioctl' are not used. m4_ifdef([gl_UNISTD_H_DEFAULTS], [gl_UNISTD_H_REQUIRE_DEFAULTS]) m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [gl_SYS_IOCTL_H_REQUIRE_DEFAULTS]) AC_REQUIRE([gl_PREREQ_SYS_H_WINSOCK2]) if test "$ac_cv_header_winsock2_h" = yes; then UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 fi gl_SYS_SOCKET_MODULE_INDICATOR([socket]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) gl_DOUBLE_EXPONENT_LOCATION gl_FUNC_STRERROR_R AS_IF([test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1], [ AC_LIBOBJ([strerror_r]) gl_PREREQ_STRERROR_R ]) gl_STRING_MODULE_INDICATOR([strerror_r]) dnl For the modules argp, error, xstrerror. gl_MODULE_INDICATOR([strerror_r-posix]) dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) gt_LOCALE_FR gt_LOCALE_FR_UTF8 gl_FUNC_SYMLINK gl_CONDITIONAL([GL_COND_OBJ_SYMLINK], [test $HAVE_SYMLINK = 0 || test $REPLACE_SYMLINK = 1]) gl_UNISTD_MODULE_INDICATOR([symlink]) gl_SYS_IOCTL_H gl_SYS_IOCTL_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P AC_CHECK_FUNCS_ONCE([shutdown]) gl_THREAD AC_CHECK_HEADERS([sys/single_threaded.h]) gl_FUNC_UNSETENV gl_CONDITIONAL([GL_COND_OBJ_UNSETENV], [test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1]) AM_COND_IF([GL_COND_OBJ_UNSETENV], [ gl_PREREQ_UNSETENV ]) gl_STDLIB_MODULE_INDICATOR([unsetenv]) gl_FUNC_USLEEP gl_CONDITIONAL([GL_COND_OBJ_USLEEP], [test $HAVE_USLEEP = 0 || test $REPLACE_USLEEP = 1]) gl_UNISTD_MODULE_INDICATOR([usleep]) gt_LOCALE_FR gt_LOCALE_FR_UTF8 gt_LOCALE_JA gt_LOCALE_ZH_CN gl_FUNC_WCTOB gl_CONDITIONAL([GL_COND_OBJ_WCTOB], [test $HAVE_WCTOB = 0 || test $REPLACE_WCTOB = 1]) AM_COND_IF([GL_COND_OBJ_WCTOB], [ gl_PREREQ_WCTOB ]) gl_WCHAR_MODULE_INDICATOR([wctob]) gl_FUNC_WCTOMB gl_CONDITIONAL([GL_COND_OBJ_WCTOMB], [test $REPLACE_WCTOMB = 1]) AM_COND_IF([GL_COND_OBJ_WCTOMB], [ gl_PREREQ_WCTOMB ]) gl_STDLIB_MODULE_INDICATOR([wctomb]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_THREAD], [case "$host_os" in mingw* | windows*) true;; *) false;; esac]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_TLS], [case "$host_os" in mingw* | windows*) true;; *) false;; esac]) gl_XALLOC gl_MODULE_INDICATOR([xalloc]) gl_MODULE_INDICATOR([xalloc-die]) AC_REQUIRE([gl_YIELD]) m4_popdef([gl_MODULE_INDICATOR_CONDITION]) m4_ifval(gltests_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ || for gl_file in ]gltests_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([GL_MODULE_INDICATOR_PREFIX]) m4_popdef([GL_MACRO_PREFIX]) m4_popdef([gltests_LIBSOURCES_DIR]) m4_popdef([gltests_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gltests_libobjs= gltests_ltlibobjs= gltests_libobjdeps= if test -n "$gltests_LIBOBJS"; then # Remove the extension. changequote(,)dnl sed_drop_objext='s/\.o$//;s/\.obj$//' sed_dirname1='s,//*,/,g' sed_dirname2='s,\(.\)/$,\1,' sed_dirname3='s,^[^/]*$,.,' sed_dirname4='s,\(.\)/[^/]*$,\1,' sed_basename1='s,.*/,,' changequote([, ])dnl for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"` i_base=`echo "$i" | sed -e "$sed_basename1"` gltests_libobjdeps="$gltests_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Plo" done fi AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) AC_SUBST([gltests_LIBOBJDEPS], [$gltests_libobjdeps]) ]) AC_REQUIRE([gl_CC_GNULIB_WARNINGS]) LIBTESTS_LIBDEPS="$gltests_libdeps" AC_SUBST([LIBTESTS_LIBDEPS]) ]) # Like AC_LIBOBJ, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_LIBOBJ], [ AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gl_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gl_LIBSOURCES_DIR], [bootstrapped/lib]) m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_LIBOBJ], [ AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gltests_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gltests_LIBSOURCES_DIR], [bootstrapped/tests]) m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # This macro records the list of files which have been installed by # gnulib-tool and may be removed by future gnulib-tool invocations. AC_DEFUN([gl_FILE_LIST], [ build-aux/config.rpath build-aux/gendocs.sh build-aux/git-version-gen doc/gendocs_template doc/gendocs_template_min doc/gpl-3.0.texi lib/_Noreturn.h lib/access.c lib/alloca.c lib/alloca.in.h lib/arg-nonnull.h lib/argp-ba.c lib/argp-eexst.c lib/argp-fmtstream.c lib/argp-fmtstream.h lib/argp-fs-xinl.c lib/argp-help.c lib/argp-namefrob.h lib/argp-parse.c lib/argp-pin.c lib/argp-pv.c lib/argp-pvh.c lib/argp-xinl.c lib/argp.h lib/asnprintf.c lib/assert.in.h lib/assure.h lib/at-func.c lib/attribute.h lib/basename-lgpl.c lib/basename-lgpl.h lib/btowc.c lib/c++defs.h lib/c-ctype.c lib/c-ctype.h lib/c32is-impl.h lib/c32isalnum.c lib/c32isalpha.c lib/c32isblank.c lib/c32iscntrl.c lib/c32isdigit.c lib/c32isgraph.c lib/c32islower.c lib/c32isprint.c lib/c32ispunct.c lib/c32isspace.c lib/c32isupper.c lib/c32isxdigit.c lib/c32to-impl.h lib/c32tolower.c lib/c32width.c lib/cdefs.h lib/chdir-long.c lib/chdir-long.h lib/cloexec.c lib/cloexec.h lib/close.c lib/dirent-private.h lib/dirent.in.h lib/dirfd.c lib/dup-safer-flag.c lib/dup-safer.c lib/dup2.c lib/dynarray.h lib/errno.in.h lib/error.c lib/error.in.h lib/euidaccess.c lib/exitfail.c lib/exitfail.h lib/faccessat.c lib/fchdir.c lib/fcntl.c lib/fcntl.in.h lib/fd-hook.c lib/fd-hook.h lib/fd-safer-flag.c lib/fd-safer.c lib/filename.h lib/filenamecat-lgpl.c lib/filenamecat.h lib/float+.h lib/float.c lib/float.in.h lib/free.c lib/fstat.c lib/fstatat.c lib/getcwd-lgpl.c lib/getdelim.c lib/getdtablesize.c lib/getgroups.c lib/getline.c lib/getopt-cdefs.in.h lib/getopt-core.h lib/getopt-ext.h lib/getopt-pfx-core.h lib/getopt-pfx-ext.h lib/getopt.c lib/getopt.in.h lib/getopt1.c lib/getopt_int.h lib/getprogname.c lib/getprogname.h lib/gettext.h lib/gettimeofday.c lib/glthread/lock.c lib/glthread/lock.h lib/glthread/threadlib.c lib/group-member.c lib/hard-locale.c lib/hard-locale.h lib/idx.h lib/intprops-internal.h lib/intprops.h lib/inttypes.in.h lib/isnan.c lib/isnand-nolibm.h lib/isnand.c lib/isnanf-nolibm.h lib/isnanf.c lib/isnanl-nolibm.h lib/isnanl.c lib/iswblank.c lib/iswctype-impl.h lib/iswctype.c lib/iswdigit.c lib/iswpunct.c lib/iswxdigit.c lib/itold.c lib/langinfo.in.h lib/lc-charset-dispatch.c lib/lc-charset-dispatch.h lib/libc-config.h lib/limits.in.h lib/localcharset.c lib/localcharset.h lib/locale.in.h lib/localeconv.c lib/lstat.c lib/malloc.c lib/malloc/dynarray-skeleton.c lib/malloc/dynarray.h lib/malloc/dynarray_at_failure.c lib/malloc/dynarray_emplace_enlarge.c lib/malloc/dynarray_finalize.c lib/malloc/dynarray_resize.c lib/malloc/dynarray_resize_clear.c lib/malloca.c lib/malloca.h lib/math.c lib/math.in.h lib/mbchar.c lib/mbchar.h lib/mbrtoc32.c lib/mbrtowc-impl-utf8.h lib/mbrtowc-impl.h lib/mbrtowc.c lib/mbschr.c lib/mbsinit.c lib/mbspbrk.c lib/mbsspn.c lib/mbstok_r.c lib/mbszero.c lib/mbtowc-impl.h lib/mbtowc-lock.c lib/mbtowc-lock.h lib/mbtowc.c lib/mbuiterf.c lib/mbuiterf.h lib/memchr.c lib/memchr.valgrind lib/memmove.c lib/mempcpy.c lib/memrchr.c lib/minmax.h lib/mktime-internal.h lib/mktime.c lib/msvc-inval.c lib/msvc-inval.h lib/msvc-nothrow.c lib/msvc-nothrow.h lib/nl_langinfo-lock.c lib/nl_langinfo.c lib/nproc.c lib/nproc.h lib/open.c lib/openat-die.c lib/openat-priv.h lib/openat-proc.c lib/openat.c lib/openat.h lib/pathmax.h lib/pipe-safer.c lib/pipe.c lib/printf-args.c lib/printf-args.h lib/printf-parse.c lib/printf-parse.h lib/rawmemchr.c lib/rawmemchr.valgrind lib/realloc.c lib/regcomp.c lib/regex.c lib/regex.h lib/regex_internal.c lib/regex_internal.h lib/regexec.c lib/root-uid.h lib/save-cwd.c lib/save-cwd.h lib/secure_getenv.c lib/select.c lib/setlocale-lock.c lib/setlocale_null.c lib/setlocale_null.h lib/signal.in.h lib/signbitd.c lib/signbitf.c lib/signbitl.c lib/size_max.h lib/sleep.c lib/sockets.c lib/sockets.h lib/stat-time.c lib/stat-time.h lib/stat-w32.c lib/stat-w32.h lib/stat.c lib/stdckdint.in.h lib/stddef.in.h lib/stdint.in.h lib/stdio-read.c lib/stdio-write.c lib/stdio.in.h lib/stdlib.in.h lib/strcasecmp.c lib/strchrnul.c lib/strchrnul.valgrind lib/strdup.c lib/streq.h lib/strerror-override.c lib/strerror-override.h lib/strerror.c lib/string.in.h lib/strings.in.h lib/strncasecmp.c lib/strndup.c lib/strnlen.c lib/strnlen1.c lib/strnlen1.h lib/strptime.c lib/strtod.c lib/strtok_r.c lib/sys_select.in.h lib/sys_socket.c lib/sys_socket.in.h lib/sys_stat.in.h lib/sys_time.in.h lib/sys_types.in.h lib/sys_uio.in.h lib/sys_wait.in.h lib/sysexits.in.h lib/time.c lib/time.in.h lib/time_r.c lib/uchar.in.h lib/unicase.in.h lib/unicase/simple-mapping.h lib/unicase/tolower.c lib/unicase/tolower.h lib/unictype.in.h lib/unictype/bitmap.h lib/unictype/ctype_alnum.c lib/unictype/ctype_alnum.h lib/unictype/ctype_alpha.c lib/unictype/ctype_alpha.h lib/unictype/ctype_blank.c lib/unictype/ctype_blank.h lib/unictype/ctype_cntrl.c lib/unictype/ctype_cntrl.h lib/unictype/ctype_digit.c lib/unictype/ctype_digit.h lib/unictype/ctype_graph.c lib/unictype/ctype_graph.h lib/unictype/ctype_lower.c lib/unictype/ctype_lower.h lib/unictype/ctype_print.c lib/unictype/ctype_print.h lib/unictype/ctype_punct.c lib/unictype/ctype_punct.h lib/unictype/ctype_space.c lib/unictype/ctype_space.h lib/unictype/ctype_upper.c lib/unictype/ctype_upper.h lib/unictype/ctype_xdigit.c lib/unictype/ctype_xdigit.h lib/uninorm.in.h lib/unistd--.h lib/unistd-safer.h lib/unistd.c lib/unistd.in.h lib/unitypes.in.h lib/uniwidth.in.h lib/uniwidth/cjk.h lib/uniwidth/width.c lib/uniwidth/width0.h lib/uniwidth/width2.h lib/vasnprintf.c lib/vasnprintf.h lib/verify.h lib/vsnprintf.c lib/w32sock.h lib/warn-on-use.h lib/wchar.in.h lib/wcrtomb.c lib/wctype-h.c lib/wctype-impl.h lib/wctype.c lib/wctype.in.h lib/wcwidth.c lib/windows-initguard.h lib/windows-mutex.c lib/windows-mutex.h lib/windows-once.c lib/windows-once.h lib/windows-recmutex.c lib/windows-recmutex.h lib/windows-rwlock.c lib/windows-rwlock.h lib/xalloc-oversized.h lib/xsize.c lib/xsize.h m4/00gnulib.m4 m4/__inline.m4 m4/absolute-header.m4 m4/access.m4 m4/alloca.m4 m4/argp.m4 m4/arpa_inet_h.m4 m4/assert_h.m4 m4/btowc.m4 m4/builtin-expect.m4 m4/c-bool.m4 m4/c32rtomb.m4 m4/calloc.m4 m4/chdir-long.m4 m4/close.m4 m4/codeset.m4 m4/creat.m4 m4/ctype_h.m4 m4/dirent_h.m4 m4/dirfd.m4 m4/double-slash-root.m4 m4/dup.m4 m4/dup2.m4 m4/eealloc.m4 m4/environ.m4 m4/errno_h.m4 m4/error.m4 m4/error_h.m4 m4/euidaccess.m4 m4/exponentd.m4 m4/exponentf.m4 m4/exponentl.m4 m4/extensions.m4 m4/extern-inline.m4 m4/faccessat.m4 m4/fchdir.m4 m4/fcntl-o.m4 m4/fcntl.m4 m4/fcntl_h.m4 m4/fdopen.m4 m4/filenamecat.m4 m4/flexmember.m4 m4/float_h.m4 m4/fpieee.m4 m4/free.m4 m4/fstat.m4 m4/fstatat.m4 m4/ftruncate.m4 m4/func.m4 m4/getcwd.m4 m4/getdelim.m4 m4/getdtablesize.m4 m4/getgroups.m4 m4/getline.m4 m4/getopt.m4 m4/getpagesize.m4 m4/getprogname.m4 m4/gettimeofday.m4 m4/gnulib-common.m4 m4/group-member.m4 m4/host-cpu-c-abi.m4 m4/include_next.m4 m4/inet_pton.m4 m4/intl-thread-locale.m4 m4/intlmacosx.m4 m4/intmax_t.m4 m4/inttypes.m4 m4/inttypes_h.m4 m4/ioctl.m4 m4/isblank.m4 m4/isnand.m4 m4/isnanf.m4 m4/isnanl.m4 m4/iswblank.m4 m4/iswctype.m4 m4/iswdigit.m4 m4/iswpunct.m4 m4/iswxdigit.m4 m4/langinfo_h.m4 m4/largefile.m4 m4/lcmessage.m4 m4/ldexp.m4 m4/lib-ld.m4 m4/lib-link.m4 m4/lib-prefix.m4 m4/libunistring-base.m4 m4/limits-h.m4 m4/localcharset.m4 m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-tr.m4 m4/locale-zh.m4 m4/locale_h.m4 m4/localeconv.m4 m4/localename.m4 m4/lock.m4 m4/lstat.m4 m4/malloc.m4 m4/malloca.m4 m4/math_h.m4 m4/mbchar.m4 m4/mbiter.m4 m4/mbrtoc32.m4 m4/mbrtowc.m4 m4/mbsinit.m4 m4/mbstate_t.m4 m4/mbtowc.m4 m4/memchr.m4 m4/memmove.m4 m4/mempcpy.m4 m4/memrchr.m4 m4/minmax.m4 m4/mktime.m4 m4/mmap-anon.m4 m4/mode_t.m4 m4/msvc-inval.m4 m4/msvc-nothrow.m4 m4/multiarch.m4 m4/musl.m4 m4/nan-mips.m4 m4/nanosleep.m4 m4/netinet_in_h.m4 m4/nl_langinfo.m4 m4/nocrash.m4 m4/nproc.m4 m4/off_t.m4 m4/open-cloexec.m4 m4/open-slash.m4 m4/open.m4 m4/openat.m4 m4/pathmax.m4 m4/perror.m4 m4/pid_t.m4 m4/pipe.m4 m4/printf.m4 m4/pselect.m4 m4/pthread-thread.m4 m4/pthread_h.m4 m4/pthread_rwlock_rdlock.m4 m4/pthread_sigmask.m4 m4/putenv.m4 m4/raise.m4 m4/random.m4 m4/random_r.m4 m4/rawmemchr.m4 m4/realloc.m4 m4/reallocarray.m4 m4/regex.m4 m4/save-cwd.m4 m4/sched_h.m4 m4/sched_yield.m4 m4/secure_getenv.m4 m4/select.m4 m4/semaphore.m4 m4/setenv.m4 m4/setlocale.m4 m4/setlocale_null.m4 m4/signal_h.m4 m4/signalblocking.m4 m4/signbit.m4 m4/size_max.m4 m4/sleep.m4 m4/snan.m4 m4/socketlib.m4 m4/sockets.m4 m4/socklen.m4 m4/sockpfaf.m4 m4/ssize_t.m4 m4/stat-time.m4 m4/stat.m4 m4/std-gnu11.m4 m4/stdalign.m4 m4/stddef_h.m4 m4/stdint.m4 m4/stdint_h.m4 m4/stdio_h.m4 m4/stdlib_h.m4 m4/strcase.m4 m4/strchrnul.m4 m4/strdup.m4 m4/strerror.m4 m4/strerror_r.m4 m4/string_h.m4 m4/strings_h.m4 m4/strndup.m4 m4/strnlen.m4 m4/strptime.m4 m4/strtod.m4 m4/strtok_r.m4 m4/symlink.m4 m4/sys_ioctl_h.m4 m4/sys_select_h.m4 m4/sys_socket_h.m4 m4/sys_stat_h.m4 m4/sys_time_h.m4 m4/sys_types_h.m4 m4/sys_uio_h.m4 m4/sys_wait_h.m4 m4/sysexits.m4 m4/thread.m4 m4/threadlib.m4 m4/time.m4 m4/time_h.m4 m4/time_r.m4 m4/tm_gmtoff.m4 m4/uchar_h.m4 m4/unicase_h.m4 m4/unictype_h.m4 m4/uninorm_h.m4 m4/unistd-safer.m4 m4/unistd_h.m4 m4/usleep.m4 m4/vararrays.m4 m4/vasnprintf.m4 m4/visibility.m4 m4/vsnprintf.m4 m4/warn-on-use.m4 m4/wchar_h.m4 m4/wchar_t.m4 m4/wcrtomb.m4 m4/wctob.m4 m4/wctomb.m4 m4/wctype.m4 m4/wctype_h.m4 m4/wcwidth.m4 m4/wint_t.m4 m4/xalloc.m4 m4/xsize.m4 m4/yield.m4 m4/zzgnulib.m4 tests/atomic-int-gnulib.h tests/infinity.h tests/init.sh tests/locale.c tests/macros.h tests/minus-zero.h tests/nap.h tests/signature.h tests/test-accept.c tests/test-access.c tests/test-access.h tests/test-alignasof.c tests/test-alloca-opt.c tests/test-argp-2.sh tests/test-argp.c tests/test-arpa_inet.c tests/test-assert.c tests/test-binary-io.c tests/test-binary-io.sh tests/test-bind.c tests/test-btoc32-1.sh tests/test-btoc32-2.sh tests/test-btoc32-3.sh tests/test-btoc32.c tests/test-btowc-1.sh tests/test-btowc-2.sh tests/test-btowc-3.sh tests/test-btowc.c tests/test-c-ctype.c tests/test-c-strcase.sh tests/test-c-strcasecmp.c tests/test-c-strcasestr.c tests/test-c-strncasecmp.c tests/test-c32isalnum.c tests/test-c32isalnum.sh tests/test-c32isalpha.c tests/test-c32isalpha.sh tests/test-c32isblank.c tests/test-c32isblank.sh tests/test-c32iscntrl.c tests/test-c32iscntrl.sh tests/test-c32isdigit.c tests/test-c32isdigit.sh tests/test-c32isgraph.c tests/test-c32isgraph.sh tests/test-c32islower.c tests/test-c32islower.sh tests/test-c32isprint.c tests/test-c32isprint.sh tests/test-c32ispunct.c tests/test-c32ispunct.sh tests/test-c32isspace.c tests/test-c32isspace.sh tests/test-c32isupper.c tests/test-c32isupper.sh tests/test-c32isxdigit.c tests/test-c32isxdigit.sh tests/test-c32rtomb-w32-2.sh tests/test-c32rtomb-w32-3.sh tests/test-c32rtomb-w32-4.sh tests/test-c32rtomb-w32-5.sh tests/test-c32rtomb-w32-6.sh tests/test-c32rtomb-w32-7.sh tests/test-c32rtomb-w32-8.sh tests/test-c32rtomb-w32.c tests/test-c32rtomb.c tests/test-c32rtomb.sh tests/test-c32tolower.c tests/test-c32tolower.sh tests/test-c32width.c tests/test-calloc-gnu.c tests/test-chdir.c tests/test-cloexec.c tests/test-close.c tests/test-connect.c tests/test-creat.c tests/test-ctype.c tests/test-dirent.c tests/test-dirfd.c tests/test-dup-safer.c tests/test-dup.c tests/test-dup2.c tests/test-dynarray.c tests/test-environ.c tests/test-errno.c tests/test-error.c tests/test-error.sh tests/test-euidaccess.c tests/test-faccessat.c tests/test-fchdir.c tests/test-fcntl-h.c tests/test-fcntl.c tests/test-fdopen.c tests/test-fgetc.c tests/test-float.c tests/test-fputc.c tests/test-fread.c tests/test-free.c tests/test-fstat.c tests/test-fstatat.c tests/test-ftruncate.c tests/test-ftruncate.sh tests/test-func.c tests/test-fwrite.c tests/test-getcwd-lgpl.c tests/test-getdelim.c tests/test-getdtablesize.c tests/test-getgroups.c tests/test-getline.c tests/test-getopt-gnu.c tests/test-getopt-main.h tests/test-getopt-posix.c tests/test-getopt.h tests/test-getopt_long.h tests/test-getprogname.c tests/test-gettimeofday.c tests/test-hard-locale.c tests/test-ignore-value.c tests/test-inet_pton.c tests/test-init.sh tests/test-intprops.c tests/test-inttypes.c tests/test-ioctl.c tests/test-isblank.c tests/test-isnand-nolibm.c tests/test-isnand.h tests/test-isnanf-nolibm.c tests/test-isnanf.h tests/test-isnanl-nolibm.c tests/test-isnanl.h tests/test-iswblank.c tests/test-iswctype.c tests/test-iswdigit.c tests/test-iswdigit.sh tests/test-iswpunct.c tests/test-iswpunct.sh tests/test-iswxdigit.c tests/test-iswxdigit.sh tests/test-langinfo.c tests/test-largefile.c tests/test-limits-h.c tests/test-listen.c tests/test-localcharset.c tests/test-locale.c tests/test-localeconv.c tests/test-localename.c tests/test-lock.c tests/test-lstat.c tests/test-lstat.h tests/test-malloc-gnu.c tests/test-malloca.c tests/test-math.c tests/test-mbrtoc32-1.sh tests/test-mbrtoc32-2.sh tests/test-mbrtoc32-3.sh tests/test-mbrtoc32-4.sh tests/test-mbrtoc32-5.sh tests/test-mbrtoc32-w32-2.sh tests/test-mbrtoc32-w32-3.sh tests/test-mbrtoc32-w32-4.sh tests/test-mbrtoc32-w32-5.sh tests/test-mbrtoc32-w32-6.sh tests/test-mbrtoc32-w32-7.sh tests/test-mbrtoc32-w32-8.sh tests/test-mbrtoc32-w32.c tests/test-mbrtoc32.c tests/test-mbrtowc-1.sh tests/test-mbrtowc-2.sh tests/test-mbrtowc-3.sh tests/test-mbrtowc-4.sh tests/test-mbrtowc-5.sh tests/test-mbrtowc-w32-2.sh tests/test-mbrtowc-w32-3.sh tests/test-mbrtowc-w32-4.sh tests/test-mbrtowc-w32-5.sh tests/test-mbrtowc-w32-6.sh tests/test-mbrtowc-w32-7.sh tests/test-mbrtowc-w32-8.sh tests/test-mbrtowc-w32.c tests/test-mbrtowc.c tests/test-mbschr.c tests/test-mbschr.sh tests/test-mbsinit.c tests/test-mbsinit.sh tests/test-mbspbrk.c tests/test-mbspbrk.sh tests/test-mbsspn.c tests/test-mbsspn.sh tests/test-memchr.c tests/test-memrchr.c tests/test-nanosleep.c tests/test-netinet_in.c tests/test-nl_langinfo-mt.c tests/test-nl_langinfo1.c tests/test-nl_langinfo1.sh tests/test-nl_langinfo2.c tests/test-nl_langinfo2.sh tests/test-once.c tests/test-open.c tests/test-open.h tests/test-openat.c tests/test-pathmax.c tests/test-perror.c tests/test-perror.sh tests/test-perror2.c tests/test-pipe.c tests/test-pselect.c tests/test-pthread-thread.c tests/test-pthread.c tests/test-pthread_sigmask1.c tests/test-pthread_sigmask2.c tests/test-raise.c tests/test-random-mt.c tests/test-random.c tests/test-random_r.c tests/test-rawmemchr.c tests/test-realloc-gnu.c tests/test-reallocarray.c tests/test-regex.c tests/test-rwlock1.c tests/test-sched.c tests/test-select-fd.c tests/test-select-in.sh tests/test-select-out.sh tests/test-select-stdin.c tests/test-select.c tests/test-select.h tests/test-setenv.c tests/test-setlocale1.c tests/test-setlocale1.sh tests/test-setlocale2.c tests/test-setlocale2.sh tests/test-setlocale_null-mt-all.c tests/test-setlocale_null-mt-one.c tests/test-setlocale_null.c tests/test-setsockopt.c tests/test-signal-h.c tests/test-signbit.c tests/test-sigprocmask.c tests/test-sleep.c tests/test-sockets.c tests/test-stat-time.c tests/test-stat.c tests/test-stat.h tests/test-stdbool.c tests/test-stdckdint.c tests/test-stddef.c tests/test-stdint.c tests/test-stdio.c tests/test-stdlib.c tests/test-strchrnul.c tests/test-strerror.c tests/test-strerror_r.c tests/test-string.c tests/test-strings.c tests/test-strnlen.c tests/test-strtod.c tests/test-strtod1.c tests/test-strtod1.sh tests/test-symlink.c tests/test-symlink.h tests/test-sys_ioctl.c tests/test-sys_select.c tests/test-sys_socket.c tests/test-sys_stat.c tests/test-sys_time.c tests/test-sys_types.c tests/test-sys_uio.c tests/test-sys_wait.c tests/test-sys_wait.h tests/test-sysexits.c tests/test-thread_create.c tests/test-thread_self.c tests/test-time-h.c tests/test-time.c tests/test-uchar.c tests/test-unistd.c tests/test-unsetenv.c tests/test-usleep.c tests/test-vasnprintf.c tests/test-verify-try.c tests/test-verify.c tests/test-verify.sh tests/test-vsnprintf.c tests/test-wchar.c tests/test-wcrtomb-w32-2.sh tests/test-wcrtomb-w32-3.sh tests/test-wcrtomb-w32-4.sh tests/test-wcrtomb-w32-5.sh tests/test-wcrtomb-w32-6.sh tests/test-wcrtomb-w32-7.sh tests/test-wcrtomb-w32-8.sh tests/test-wcrtomb-w32.c tests/test-wcrtomb.c tests/test-wcrtomb.sh tests/test-wctype-h.c tests/test-wctype.c tests/test-wcwidth.c tests/test-xalloc-die.c tests/test-xalloc-die.sh tests/unicase/test-mapping-part1.h tests/unicase/test-mapping-part2.h tests/unicase/test-uc_tolower.c tests/unictype/test-ctype_alnum.c tests/unictype/test-ctype_alpha.c tests/unictype/test-ctype_blank.c tests/unictype/test-ctype_cntrl.c tests/unictype/test-ctype_digit.c tests/unictype/test-ctype_graph.c tests/unictype/test-ctype_lower.c tests/unictype/test-ctype_print.c tests/unictype/test-ctype_punct.c tests/unictype/test-ctype_space.c tests/unictype/test-ctype_upper.c tests/unictype/test-ctype_xdigit.c tests/unictype/test-predicate-part1.h tests/unictype/test-predicate-part2.h tests/uniwidth/test-uc_width.c tests/uniwidth/test-uc_width2.c tests/uniwidth/test-uc_width2.sh tests/zerosize-ptr.h tests=lib/_Noreturn.h tests=lib/accept.c tests=lib/arg-nonnull.h tests=lib/arpa_inet.in.h tests=lib/binary-io.c tests=lib/binary-io.h tests=lib/bind.c tests=lib/btoc32.c tests=lib/c++defs.h tests=lib/c-strcase.h tests=lib/c-strcasecmp.c tests=lib/c-strcasestr.c tests=lib/c-strcasestr.h tests=lib/c-strncasecmp.c tests=lib/c32rtomb.c tests=lib/c32tob.c tests=lib/calloc.c tests=lib/connect.c tests=lib/creat.c tests=lib/ctype.in.h tests=lib/dup.c tests=lib/fdopen.c tests=lib/flexmember.h tests=lib/fpucw.h tests=lib/ftruncate.c tests=lib/getpagesize.c tests=lib/glthread/thread.c tests=lib/glthread/thread.h tests=lib/glthread/yield.h tests=lib/ialloc.c tests=lib/ialloc.h tests=lib/ignore-value.h tests=lib/inet_pton.c tests=lib/ioctl.c tests=lib/isblank.c tests=lib/listen.c tests=lib/localename-table.c tests=lib/localename-table.h tests=lib/localename.c tests=lib/localename.h tests=lib/nan.h tests=lib/nanosleep.c tests=lib/netinet_in.in.h tests=lib/perror.c tests=lib/pselect.c tests=lib/pthread-thread.c tests=lib/pthread.in.h tests=lib/pthread_sigmask.c tests=lib/putenv.c tests=lib/raise.c tests=lib/random.c tests=lib/random_r.c tests=lib/reallocarray.c tests=lib/same-inode.c tests=lib/same-inode.h tests=lib/sched.in.h tests=lib/sched_yield.c tests=lib/setenv.c tests=lib/setlocale.c tests=lib/setsockopt.c tests=lib/signed-nan.h tests=lib/signed-snan.h tests=lib/sigprocmask.c tests=lib/snan.h tests=lib/socket.c tests=lib/str-two-way.h tests=lib/strerror_r.c tests=lib/symlink.c tests=lib/sys_ioctl.in.h tests=lib/thread-optim.h tests=lib/unsetenv.c tests=lib/usleep.c tests=lib/w32sock.h tests=lib/warn-on-use.h tests=lib/wctob.c tests=lib/wctomb-impl.h tests=lib/wctomb.c tests=lib/windows-thread.c tests=lib/windows-thread.h tests=lib/windows-tls.c tests=lib/windows-tls.h tests=lib/xalloc-die.c tests=lib/xalloc.h tests=lib/xmalloc.c ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/group-member.m4�������������������������������������������������������0000644�0001750�0001750�00000001412�14557510506�014657� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 14 # Copyright (C) 1999-2001, 2003-2007, 2009-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl Written by Jim Meyering AC_DEFUN([gl_FUNC_GROUP_MEMBER], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare group_member(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Do this replacement check manually because I want the hyphen dnl (not the underscore) in the filename. AC_CHECK_FUNC([group_member], , [ HAVE_GROUP_MEMBER=0 ]) ]) # Prerequisites of lib/group-member.c. AC_DEFUN([gl_PREREQ_GROUP_MEMBER], [ AC_REQUIRE([AC_FUNC_GETGROUPS]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/host-cpu-c-abi.m4�����������������������������������������������������0000644�0001750�0001750�00000041354�14557510506�015002� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# host-cpu-c-abi.m4 serial 17 dnl Copyright (C) 2002-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible and Sam Steingold. dnl Sets the HOST_CPU variable to the canonical name of the CPU. dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its dnl C language ABI (application binary interface). dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in dnl config.h. dnl dnl This canonical name can be used to select a particular assembly language dnl source file that will interoperate with C code on the given host. dnl dnl For example: dnl * 'i386' and 'sparc' are different canonical names, because code for i386 dnl will not run on SPARC CPUs and vice versa. They have different dnl instruction sets. dnl * 'sparc' and 'sparc64' are different canonical names, because code for dnl 'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code dnl contains 32-bit instructions, whereas 'sparc64' code contains 64-bit dnl instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit dnl mode, but not both. dnl * 'mips' and 'mipsn32' are different canonical names, because they use dnl different argument passing and return conventions for C functions, and dnl although the instruction set of 'mips' is a large subset of the dnl instruction set of 'mipsn32'. dnl * 'mipsn32' and 'mips64' are different canonical names, because they use dnl different sizes for the C types like 'int' and 'void *', and although dnl the instruction sets of 'mipsn32' and 'mips64' are the same. dnl * The same canonical name is used for different endiannesses. You can dnl determine the endianness through preprocessor symbols: dnl - 'arm': test __ARMEL__. dnl - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL. dnl - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN. dnl * The same name 'i386' is used for CPUs of type i386, i486, i586 dnl (Pentium), AMD K7, Pentium II, Pentium IV, etc., because dnl - Instructions that do not exist on all of these CPUs (cmpxchg, dnl MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your dnl assembly language source files use such instructions, you will dnl need to make the distinction. dnl - Speed of execution of the common instruction set is reasonable across dnl the entire family of CPUs. If you have assembly language source files dnl that are optimized for particular CPU types (like GNU gmp has), you dnl will need to make the distinction. dnl See <https://en.wikipedia.org/wiki/X86_instruction_listings>. AC_DEFUN([gl_HOST_CPU_C_ABI], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_C_ASM]) AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi], [case "$host_cpu" in changequote(,)dnl i[34567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi=i386 ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=x86_64-x32], [gl_cv_host_cpu_c_abi=x86_64])], [gl_cv_host_cpu_c_abi=i386]) ;; changequote(,)dnl alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) changequote([,])dnl gl_cv_host_cpu_c_abi=alpha ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __aarch64__ int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=arm64-ilp32], [gl_cv_host_cpu_c_abi=arm64])], [# Don't distinguish little-endian and big-endian arm, since they # don't require different machine code for simple operations and # since the user can distinguish them through the preprocessor # defines __ARMEL__ vs. __ARMEB__. # But distinguish arm which passes floating-point arguments and # return values in integer registers (r0, r1, ...) - this is # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which # passes them in float registers (s0, s1, ...) and double registers # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer # sets the preprocessor defines __ARM_PCS (for the first case) and # __ARM_PCS_VFP (for the second case), but older GCC does not. echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c # Look for a reference to the register d0 in the .s file. AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then gl_cv_host_cpu_c_abi=armhf else gl_cv_host_cpu_c_abi=arm fi rm -f conftest* ]) ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=hppa64], [gl_cv_host_cpu_c_abi=hppa]) ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=ia64-ilp32], [gl_cv_host_cpu_c_abi=ia64]) ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mips64], [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32. # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (_MIPS_SIM == _ABIN32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mipsn32], [gl_cv_host_cpu_c_abi=mips])]) ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif ]])], [# On powerpc64, there are two ABIs on Linux: The AIX compatible # one and the ELFv2 one. The latter defines _CALL_ELF=2. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _CALL_ELF && _CALL_ELF == 2 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=powerpc64-elfv2], [gl_cv_host_cpu_c_abi=powerpc64]) ], [gl_cv_host_cpu_c_abi=powerpc]) ;; rs6000 ) gl_cv_host_cpu_c_abi=powerpc ;; riscv32 | riscv64 ) # There are 2 architectures (with variants): rv32* and rv64*. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if __riscv_xlen == 64 int ok; #else error fail #endif ]])], [cpu=riscv64], [cpu=riscv32]) # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. # Size of 'long' and 'void *': AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ int ok; #else error fail #endif ]])], [main_abi=lp64], [main_abi=ilp32]) # Float ABIs: # __riscv_float_abi_double: # 'float' and 'double' are passed in floating-point registers. # __riscv_float_abi_single: # 'float' are passed in floating-point registers. # __riscv_float_abi_soft: # No values are passed in floating-point registers. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __riscv_float_abi_double int ok; #else error fail #endif ]])], [float_abi=d], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __riscv_float_abi_single int ok; #else error fail #endif ]])], [float_abi=f], [float_abi='']) ]) gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}" ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=s390x], [gl_cv_host_cpu_c_abi=s390]) ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=sparc64], [gl_cv_host_cpu_c_abi=sparc]) ;; *) gl_cv_host_cpu_c_abi="$host_cpu" ;; esac ]) dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same. HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" AC_SUBST([HOST_CPU]) AC_SUBST([HOST_CPU_C_ABI]) # This was # AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) # earlier, but KAI C++ 3.2d doesn't like this. sed -e 's/-/_/g' >> confdefs.h <<EOF #ifndef __${HOST_CPU}__ #define __${HOST_CPU}__ 1 #endif #ifndef __${HOST_CPU_C_ABI}__ #define __${HOST_CPU_C_ABI}__ 1 #endif EOF AH_TOP([/* CPU and C ABI indicator */ #ifndef __i386__ #undef __i386__ #endif #ifndef __x86_64_x32__ #undef __x86_64_x32__ #endif #ifndef __x86_64__ #undef __x86_64__ #endif #ifndef __alpha__ #undef __alpha__ #endif #ifndef __arm__ #undef __arm__ #endif #ifndef __armhf__ #undef __armhf__ #endif #ifndef __arm64_ilp32__ #undef __arm64_ilp32__ #endif #ifndef __arm64__ #undef __arm64__ #endif #ifndef __hppa__ #undef __hppa__ #endif #ifndef __hppa64__ #undef __hppa64__ #endif #ifndef __ia64_ilp32__ #undef __ia64_ilp32__ #endif #ifndef __ia64__ #undef __ia64__ #endif #ifndef __loongarch64__ #undef __loongarch64__ #endif #ifndef __m68k__ #undef __m68k__ #endif #ifndef __mips__ #undef __mips__ #endif #ifndef __mipsn32__ #undef __mipsn32__ #endif #ifndef __mips64__ #undef __mips64__ #endif #ifndef __powerpc__ #undef __powerpc__ #endif #ifndef __powerpc64__ #undef __powerpc64__ #endif #ifndef __powerpc64_elfv2__ #undef __powerpc64_elfv2__ #endif #ifndef __riscv32__ #undef __riscv32__ #endif #ifndef __riscv64__ #undef __riscv64__ #endif #ifndef __riscv32_ilp32__ #undef __riscv32_ilp32__ #endif #ifndef __riscv32_ilp32f__ #undef __riscv32_ilp32f__ #endif #ifndef __riscv32_ilp32d__ #undef __riscv32_ilp32d__ #endif #ifndef __riscv64_ilp32__ #undef __riscv64_ilp32__ #endif #ifndef __riscv64_ilp32f__ #undef __riscv64_ilp32f__ #endif #ifndef __riscv64_ilp32d__ #undef __riscv64_ilp32d__ #endif #ifndef __riscv64_lp64__ #undef __riscv64_lp64__ #endif #ifndef __riscv64_lp64f__ #undef __riscv64_lp64f__ #endif #ifndef __riscv64_lp64d__ #undef __riscv64_lp64d__ #endif #ifndef __s390__ #undef __s390__ #endif #ifndef __s390x__ #undef __s390x__ #endif #ifndef __sh__ #undef __sh__ #endif #ifndef __sparc__ #undef __sparc__ #endif #ifndef __sparc64__ #undef __sparc64__ #endif ]) ]) dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI dnl (application binary interface) is a 32-bit one, to 'no' if it is a 64-bit dnl one. dnl This is a simplified variant of gl_HOST_CPU_C_ABI. AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([32-bit host C ABI], [gl_cv_host_cpu_c_abi_32bit], [case "$host_cpu" in # CPUs that only support a 32-bit ABI. arc \ | bfin \ | cris* \ | csky \ | epiphany \ | ft32 \ | h8300 \ | m68k \ | microblaze | microblazeel \ | nds32 | nds32le | nds32be \ | nios2 | nios2eb | nios2el \ | or1k* \ | or32 \ | sh | sh[1234] | sh[1234]e[lb] \ | tic6x \ | xtensa* ) gl_cv_host_cpu_c_abi_32bit=yes ;; # CPUs that only support a 64-bit ABI. changequote(,)dnl alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ | mmix ) changequote([,])dnl gl_cv_host_cpu_c_abi_32bit=no ;; *) if test -n "$gl_cv_host_cpu_c_abi"; then dnl gl_HOST_CPU_C_ABI has already been run. Use its result. case "$gl_cv_host_cpu_c_abi" in i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 | alpha | arm64 | aarch64c | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) gl_cv_host_cpu_c_abi_32bit=no ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac else gl_cv_host_cpu_c_abi_32bit=unknown fi if test $gl_cv_host_cpu_c_abi_32bit = unknown; then AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[int test_pointer_size[sizeof (void *) - 5]; ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) fi ;; esac ]) HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/include_next.m4�������������������������������������������������������0000644�0001750�0001750�00000021040�14557510506�014736� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# include_next.m4 serial 27 dnl Copyright (C) 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert and Derek Price. dnl Sets INCLUDE_NEXT, INCLUDE_NEXT_AS_FIRST_DIRECTIVE, PRAGMA_SYSTEM_HEADER, dnl and PRAGMA_COLUMNS. dnl dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to dnl 'include' otherwise. dnl dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler dnl supports it in the special case that it is the first include directive in dnl the given file, or to 'include' otherwise. dnl dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, dnl so as to avoid GCC warnings when the gcc option -pedantic is used. dnl '#pragma GCC system_header' has the same effect as if the file was found dnl through the include search path specified with '-isystem' options (as dnl opposed to the search path specified with '-I' options). Namely, gcc dnl does not warn about some things, and on some systems (Solaris and Interix) dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead dnl of plain '__STDC__'. dnl dnl PRAGMA_COLUMNS can be used in files that override system header files, so dnl as to avoid compilation errors on HP NonStop systems when the gnulib file dnl is included by a system header file that does a "#pragma COLUMNS 80" (which dnl has the effect of truncating the lines of that file and all files that it dnl includes to 80 columns) and the gnulib file has lines longer than 80 dnl columns. AC_DEFUN([gl_INCLUDE_NEXT], [ AC_LANG_PREPROC_REQUIRE() AC_CACHE_CHECK([whether the preprocessor supports include_next], [gl_cv_have_include_next], [rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on dnl AIX 6.1 support include_next when used as first preprocessor directive dnl in a file, but not when preceded by another include directive. Check dnl for this bug by including <stdio.h>. dnl Additionally, with this same compiler, include_next is a no-op when dnl used in a header file that was included by specifying its absolute dnl file name. Despite these two bugs, include_next is used in the dnl compiler's <math.h>. By virtue of the second bug, we need to use dnl include_next as well in this case. cat <<EOF > conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include <stdio.h> #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_saved_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_saved_CPPFLAGS -Iconftestd1b -Iconftestd2" dnl We intentionally avoid using AC_LANG_SOURCE here. AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], [gl_cv_have_include_next=yes], [CPPFLAGS="$gl_saved_CPPFLAGS -Iconftestd1a -Iconftestd2" AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], [gl_cv_have_include_next=buggy], [gl_cv_have_include_next=no]) ]) CPPFLAGS="$gl_saved_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 ]) PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi AC_SUBST([INCLUDE_NEXT]) AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) AC_SUBST([PRAGMA_SYSTEM_HEADER]) dnl HP NonStop systems, which define __TANDEM, limit the line length dnl after including some system header files. AC_CACHE_CHECK([whether source code line length is unlimited], [gl_cv_source_line_length_unlimited], [AC_EGREP_CPP([choke me], [ #ifdef __TANDEM choke me #endif ], [gl_cv_source_line_length_unlimited=no], [gl_cv_source_line_length_unlimited=yes]) ]) if test $gl_cv_source_line_length_unlimited = no; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi AC_SUBST([PRAGMA_COLUMNS]) ]) # gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------------ # For each arg foo.h, if #include_next works, define NEXT_FOO_H to be # '<foo.h>'; otherwise define it to be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # Also, if #include_next works as first preprocessing directive in a file, # define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to # be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # That way, a header file with the following line: # #@INCLUDE_NEXT@ @NEXT_FOO_H@ # or # #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ # behaves (after sed substitution) as if it contained # #include_next <foo.h> # even if the compiler does not support include_next. # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. # # This macro also checks whether each header exists, by invoking # AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. AC_DEFUN([gl_CHECK_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [check]) ]) # gl_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------ # Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. # This is suitable for headers like <stddef.h> that are standardized by C89 # and therefore can be assumed to exist. AC_DEFUN([gl_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [assume]) ]) # The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], [ AC_REQUIRE([gl_INCLUDE_NEXT]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_if([$2], [check], [AC_CHECK_HEADERS_ONCE([$1]) ]) m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_next_header], [gl_cv_next_]m4_defn([gl_HEADER_NAME])) if test $gl_cv_have_include_next = yes; then AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) else AC_CACHE_CHECK( [absolute name of <]m4_defn([gl_HEADER_NAME])[>], [gl_next_header], [m4_if([$2], [check], [AS_VAR_PUSHDEF([gl_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME])) if test AS_VAR_GET([gl_header_exists]) = yes; then AS_VAR_POPDEF([gl_header_exists]) ]) gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) AS_VAR_SET([gl_next_header], ['"'$gl_header'"']) m4_if([$2], [check], [else AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) fi ]) ]) fi AC_SUBST( AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), [AS_VAR_GET([gl_next_header])]) if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'gl_HEADER_NAME'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=AS_VAR_GET([gl_next_header]) fi AC_SUBST( AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), [$gl_next_as_first_directive]) AS_VAR_POPDEF([gl_next_header])]) ]) # Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; # this fallback is safe for all earlier autoconf versions. m4_define_default([AC_LANG_DEFINES_PROVIDED]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/inet_pton.m4����������������������������������������������������������0000644�0001750�0001750�00000004462�14557510506�014265� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inet_pton.m4 serial 20 dnl Copyright (C) 2006, 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_INET_PTON], [ AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS]) dnl Persuade Solaris <arpa/inet.h> to declare inet_pton. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_C_RESTRICT]) dnl Most platforms that provide inet_pton define it in libc. dnl Solaris 8..10 provide inet_pton in libnsl instead. dnl Solaris 2.6..7 provide inet_pton in libresolv instead. dnl Haiku provides it in -lnetwork. dnl Native Windows provides it in -lws2_32 instead, with a declaration in dnl <ws2tcpip.h>, and it uses stdcall calling convention, not cdecl dnl (hence we cannot use AC_CHECK_FUNCS, AC_SEARCH_LIBS to find it). HAVE_INET_PTON=1 INET_PTON_LIB= gl_PREREQ_SYS_H_WINSOCK2 if test $HAVE_WINSOCK2_H = 1; then dnl It needs to be overridden, because the stdcall calling convention dnl is not compliant with POSIX. Set REPLACE_INET_PTON in order to avoid dnl a name conflict at the linker level, even though the header file dnl <ws2tcpip.h> declares inet_pton only if _WIN32_WINNT >= 0x0600. REPLACE_INET_PTON=1 AC_CHECK_DECLS([inet_pton],,, [[#include <ws2tcpip.h>]]) if test $ac_cv_have_decl_inet_pton = yes; then INET_PTON_LIB="-lws2_32" else HAVE_DECL_INET_PTON=0 fi else gl_saved_LIBS=$LIBS AC_SEARCH_LIBS([inet_pton], [nsl resolv network], [], [AC_CHECK_FUNCS([inet_pton]) if test $ac_cv_func_inet_pton = no; then HAVE_INET_PTON=0 fi ]) LIBS=$gl_saved_LIBS if test "$ac_cv_search_inet_pton" != "no" \ && test "$ac_cv_search_inet_pton" != "none required"; then INET_PTON_LIB="$ac_cv_search_inet_pton" fi AC_CHECK_HEADERS_ONCE([netdb.h]) AC_CHECK_DECLS([inet_pton],,, [[#include <arpa/inet.h> #if HAVE_NETDB_H # include <netdb.h> #endif ]]) if test $ac_cv_have_decl_inet_pton = no; then HAVE_DECL_INET_PTON=0 fi fi AC_SUBST([INET_PTON_LIB]) ]) # Prerequisites of lib/inet_pton.c. AC_DEFUN([gl_PREREQ_INET_PTON], [ AC_REQUIRE([gl_SOCKET_FAMILIES]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/intl-thread-locale.m4�������������������������������������������������0000644�0001750�0001750�00000017653�14557510506�015744� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intl-thread-locale.m4 serial 10 dnl Copyright (C) 2015-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Check how to retrieve the name of a per-thread locale (POSIX locale_t). dnl Sets gt_nameless_locales. AC_DEFUN([gt_INTL_THREAD_LOCALE_NAME], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl Persuade Solaris <locale.h> to define 'locale_t'. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Test whether uselocale() exists and works at all. gt_FUNC_USELOCALE dnl On OpenBSD >= 6.2, the locale_t type and the uselocale(), newlocale(), dnl duplocale(), freelocale() functions exist but are effectively useless, dnl because the locale_t value depends only on the LC_CTYPE category of the dnl locale and furthermore contains only one bit of information (it dnl distinguishes the "C" locale from the *.UTF-8 locales). See dnl <https://cvsweb.openbsd.org/src/lib/libc/locale/newlocale.c?rev=1.1&content-type=text/x-cvsweb-markup>. dnl In the setlocale() implementation they have thought about the programs dnl that use the API ("Even though only LC_CTYPE has any effect in the dnl OpenBSD base system, store complete information about the global locale, dnl such that third-party software can access it"), but for uselocale() dnl they did not think about the programs. dnl In this situation, even the HAVE_NAMELESS_LOCALES support does not work. dnl So, define HAVE_FAKE_LOCALES and disable all locale_t support. case "$gt_cv_func_uselocale_works" in *yes) AC_CHECK_HEADERS_ONCE([xlocale.h]) AC_CACHE_CHECK([for fake locale system (OpenBSD)], [gt_cv_locale_fake], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #if HAVE_XLOCALE_H # include <xlocale.h> #endif int main () { locale_t loc1, loc2; if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL) return 1; if (setlocale (LC_ALL, "fr_FR.UTF-8") == NULL) return 1; loc1 = newlocale (LC_ALL_MASK, "de_DE.UTF-8", (locale_t)0); loc2 = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", (locale_t)0); return !(loc1 == loc2); }]])], [gt_cv_locale_fake=yes], [gt_cv_locale_fake=no], [dnl Guess the locale system is fake only on OpenBSD. case "$host_os" in openbsd*) gt_cv_locale_fake="guessing yes" ;; *) gt_cv_locale_fake="guessing no" ;; esac ]) ]) ;; *) gt_cv_locale_fake=no ;; esac case "$gt_cv_locale_fake" in *yes) gt_fake_locales=yes AC_DEFINE([HAVE_FAKE_LOCALES], [1], [Define if the locale_t type contains insufficient information, as on OpenBSD.]) ;; *) gt_fake_locales=no ;; esac case "$gt_cv_func_uselocale_works" in *yes) AC_CACHE_CHECK([for Solaris 11.4 locale system], [gt_cv_locale_solaris114], [case "$host_os" in solaris*) dnl Test whether <locale.h> defines locale_t as a typedef of dnl 'struct _LC_locale_t **' (whereas Illumos defines it as a dnl typedef of 'struct _locale *'). dnl Another possible test would be to include <sys/localedef.h> dnl and test whether it defines the _LC_core_data_locale_t type. dnl This type was added in Solaris 11.4. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <locale.h> struct _LC_locale_t *x; locale_t y; ]], [[*y = x;]])], [gt_cv_locale_solaris114=yes], [gt_cv_locale_solaris114=no]) ;; *) gt_cv_locale_solaris114=no ;; esac ]) ;; *) gt_cv_locale_solaris114=no ;; esac if test $gt_cv_locale_solaris114 = yes; then AC_DEFINE([HAVE_SOLARIS114_LOCALES], [1], [Define if the locale_t type is as on Solaris 11.4.]) fi dnl Solaris 12 will maybe provide getlocalename_l. If it does, it will dnl improve the implementation of gl_locale_name_thread(), by removing dnl the use of undocumented structures. case "$gt_cv_func_uselocale_works" in *yes) AC_CHECK_FUNCS([getlocalename_l]) ;; esac dnl This code is for platforms where the locale_t type does not provide access dnl to the name of each locale category. This code has the drawback that it dnl requires the gnulib overrides of 'newlocale', 'duplocale', 'freelocale', dnl which is a problem for GNU libunistring. Therefore try hard to avoid dnl enabling this code! gt_nameless_locales=no case "$host_os" in dnl It's needed on AIX 7.2. aix*) gt_nameless_locales=yes AC_DEFINE([HAVE_NAMELESS_LOCALES], [1], [Define if the locale_t type does not contain the name of each locale category.]) ;; esac dnl We cannot support uselocale() on platforms where the locale_t type is dnl fake. So, set dnl gt_good_uselocale = gt_working_uselocale && !gt_fake_locales. if test $gt_working_uselocale = yes && test $gt_fake_locales = no; then gt_good_uselocale=yes AC_DEFINE([HAVE_GOOD_USELOCALE], [1], [Define if the uselocale exists, may be safely called, and returns sufficient information.]) else gt_good_uselocale=no fi dnl Set gt_localename_enhances_locale_funcs to indicate whether localename.c dnl overrides newlocale(), duplocale(), freelocale() to keep track of locale dnl names. if test $gt_good_uselocale = yes && test $gt_nameless_locales = yes; then gt_localename_enhances_locale_funcs=yes LOCALENAME_ENHANCE_LOCALE_FUNCS=1 AC_DEFINE([LOCALENAME_ENHANCE_LOCALE_FUNCS], [1], [Define if localename.c overrides newlocale(), duplocale(), freelocale().]) else gt_localename_enhances_locale_funcs=no fi ]) dnl Tests whether uselocale() exists and is usable. dnl Sets gt_working_uselocale and defines HAVE_WORKING_USELOCALE. AC_DEFUN([gt_FUNC_USELOCALE], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc and Solaris <locale.h> to define 'locale_t'. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) gl_CHECK_FUNCS_ANDROID([uselocale], [[#include <locale.h>]]) dnl On AIX 7.2, the uselocale() function is not documented and leads to dnl crashes in subsequent setlocale() invocations. dnl In 2019, some versions of z/OS lack the locale_t type and have a broken dnl uselocale function. if test $ac_cv_func_uselocale = yes; then AC_CHECK_HEADERS_ONCE([xlocale.h]) AC_CACHE_CHECK([whether uselocale works], [gt_cv_func_uselocale_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #if HAVE_XLOCALE_H # include <xlocale.h> #endif locale_t loc1; int main () { uselocale (NULL); setlocale (LC_ALL, "en_US.UTF-8"); return 0; }]])], [gt_cv_func_uselocale_works=yes], [gt_cv_func_uselocale_works=no], [# Guess no on AIX and z/OS, yes otherwise. case "$host_os" in aix* | openedition*) gt_cv_func_uselocale_works="guessing no" ;; *) gt_cv_func_uselocale_works="guessing yes" ;; esac ]) ]) else gt_cv_func_uselocale_works=no fi case "$gt_cv_func_uselocale_works" in *yes) gt_working_uselocale=yes AC_DEFINE([HAVE_WORKING_USELOCALE], [1], [Define if the uselocale function exists and may safely be called.]) ;; *) gt_working_uselocale=no ;; esac ]) �������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/intlmacosx.m4���������������������������������������������������������0000644�0001750�0001750�00000006660�14557510506�014451� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intlmacosx.m4 serial 10 (gettext-0.23) dnl Copyright (C) 2004-2014, 2016, 2019-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.4. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_saved_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <CoreFoundation/CFPreferences.h>]], [[CFPreferencesCopyAppValue(NULL, NULL)]])], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_saved_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Don't check for the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent, dnl because in macOS 10.13.4 it has the following behaviour: dnl When two or more languages are specified in the dnl "System Preferences > Language & Region > Preferred Languages" panel, dnl it returns en_CC where CC is the territory (even when English is not among dnl the preferred languages!). What we want instead is what dnl CFLocaleCopyCurrent returned in earlier macOS releases and what dnl CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the dnl first among the preferred languages and CC is the territory. AC_CACHE_CHECK([for CFLocaleCopyPreferredLanguages], [gt_cv_func_CFLocaleCopyPreferredLanguages], [gt_saved_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <CoreFoundation/CFLocale.h>]], [[CFLocaleCopyPreferredLanguages();]])], [gt_cv_func_CFLocaleCopyPreferredLanguages=yes], [gt_cv_func_CFLocaleCopyPreferredLanguages=no]) LIBS="$gt_saved_LIBS"]) if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then AC_DEFINE([HAVE_CFLOCALECOPYPREFERREDLANGUAGES], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes \ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then dnl Starting with macOS version 14, CoreFoundation relies on CoreServices, dnl and we have to link it in explicitly, otherwise an exception dnl NSInvalidArgumentException "unrecognized selector sent to instance" dnl occurs. INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation -Wl,-framework -Wl,CoreServices" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) ��������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/intmax_t.m4�����������������������������������������������������������0000644�0001750�0001750�00000003544�14557510506�014111� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intmax_t.m4 serial 9 dnl Copyright (C) 1997-2004, 2006-2007, 2009-2024 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_PREREQ([2.53]) # Define intmax_t to 'long' or 'long long' # if it is not already defined in <stdint.h> or <inttypes.h>. AC_DEFUN([gl_AC_TYPE_INTMAX_T], [ dnl For simplicity, we assume that a header file defines 'intmax_t' if and dnl only if it defines 'uintmax_t'. AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then AC_DEFINE_UNQUOTED([intmax_t], [long long], [Define to long or long long if <inttypes.h> and <stdint.h> don't define.]) else AC_DEFINE([HAVE_INTMAX_T], [1], [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.]) fi ]) dnl An alternative would be to explicitly test for 'intmax_t'. AC_DEFUN([gt_AC_TYPE_INTMAX_T], [ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <stddef.h> #include <stdlib.h> #if HAVE_STDINT_H_WITH_UINTMAX #include <stdint.h> #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include <inttypes.h> #endif ]], [[intmax_t x = -1; return !x;]])], [gt_cv_c_intmax_t=yes], [gt_cv_c_intmax_t=no])]) if test $gt_cv_c_intmax_t = yes; then AC_DEFINE([HAVE_INTMAX_T], [1], [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.]) else AC_DEFINE_UNQUOTED([intmax_t], [long long], [Define to long or long long if <stdint.h> and <inttypes.h> don't define.]) fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/inttypes.m4�����������������������������������������������������������0000644�0001750�0001750�00000014312�14557510506�014140� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inttypes.m4 serial 37 dnl Copyright (C) 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Derek Price, Bruno Haible. dnl Test whether <inttypes.h> is supported or must be substituted. AC_DEFUN_ONCE([gl_INTTYPES_H], [ AC_REQUIRE([gl_INTTYPES_INCOMPLETE]) gl_INTTYPES_PRI_SCN ]) AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE], [ AC_REQUIRE([gl_STDINT_H]) AC_CHECK_HEADERS_ONCE([inttypes.h]) dnl Override <inttypes.h> always, so that the portability warnings work. AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([inttypes.h]) AC_REQUIRE([gl_MULTIARCH]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <inttypes.h> ]], [imaxabs imaxdiv strtoimax strtoumax]) AC_REQUIRE([AC_C_RESTRICT]) ]) # Ensure that the PRI* and SCN* macros are defined appropriately. AC_DEFUN([gl_INTTYPES_PRI_SCN], [ PRIPTR_PREFIX= if $GL_GENERATE_STDINT_H; then dnl Using the gnulib <stdint.h>. It defines intptr_t to 'long' or dnl 'long long', depending on _WIN64. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #ifdef _WIN64 LLP64 #endif ]]) ], [PRIPTR_PREFIX='"l"'], [PRIPTR_PREFIX='"ll"']) else dnl Using the system's <stdint.h>. for glpfx in '' l ll I64; do case $glpfx in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; I64) gltype1='__int64';; esac AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <stdint.h> extern intptr_t foo; extern $gltype1 foo;]])], [PRIPTR_PREFIX='"'$glpfx'"']) test -n "$PRIPTR_PREFIX" && break done fi AC_SUBST([PRIPTR_PREFIX]) gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [INT32_MAX_LT_INTMAX_MAX], [defined INT32_MAX && defined INTMAX_MAX], [INT32_MAX < INTMAX_MAX], [sizeof (int) < sizeof (long long int)]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [INT64_MAX_EQ_LONG_MAX], [defined INT64_MAX], [INT64_MAX == LONG_MAX], [sizeof (long long int) == sizeof (long int)]) else INT64_MAX_EQ_LONG_MAX=-1 fi gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [UINT32_MAX_LT_UINTMAX_MAX], [defined UINT32_MAX && defined UINTMAX_MAX], [UINT32_MAX < UINTMAX_MAX], [sizeof (unsigned int) < sizeof (unsigned long long int)]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [UINT64_MAX_EQ_ULONG_MAX], [defined UINT64_MAX], [UINT64_MAX == ULONG_MAX], [sizeof (unsigned long long int) == sizeof (unsigned long int)]) else UINT64_MAX_EQ_ULONG_MAX=-1 fi ]) # Define the symbol $1 to be 1 if the condition is true, 0 otherwise. # If $2 is true, the condition is $3; otherwise if long long int is supported # approximate the condition with $4; otherwise, assume the condition is false. # The condition should work on all C99 platforms; the approximations should be # good enough to work on all practical pre-C99 platforms. # $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants. AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION], [ AC_CACHE_CHECK([whether $3], [gl_cv_test_$1], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #if $2 #define CONDITION ($3) #else #define CONDITION ($4) #endif int test[CONDITION ? 1 : -1];]])], [gl_cv_test_$1=yes], [gl_cv_test_$1=no])]) if test $gl_cv_test_$1 = yes; then $1=1; else $1=0; fi AC_SUBST([$1]) ]) # gl_INTTYPES_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_INTTYPES_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_INTTYPES_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXABS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXDIV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOIMAX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUMAX]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) ]) AC_DEFUN([gl_INTTYPES_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS]) HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV]) HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX]) HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX]) HAVE_IMAXDIV_T=1; AC_SUBST([HAVE_IMAXDIV_T]) HAVE_IMAXABS=1; AC_SUBST([HAVE_IMAXABS]) HAVE_IMAXDIV=1; AC_SUBST([HAVE_IMAXDIV]) REPLACE_IMAXABS=0; AC_SUBST([REPLACE_IMAXABS]) REPLACE_IMAXDIV=0; AC_SUBST([REPLACE_IMAXDIV]) REPLACE_STRTOIMAX=0; AC_SUBST([REPLACE_STRTOIMAX]) REPLACE_STRTOUMAX=0; AC_SUBST([REPLACE_STRTOUMAX]) INT32_MAX_LT_INTMAX_MAX=1; AC_SUBST([INT32_MAX_LT_INTMAX_MAX]) INT64_MAX_EQ_LONG_MAX='defined _LP64'; AC_SUBST([INT64_MAX_EQ_LONG_MAX]) PRIPTR_PREFIX=__PRIPTR_PREFIX; AC_SUBST([PRIPTR_PREFIX]) UINT32_MAX_LT_UINTMAX_MAX=1; AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX]) UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; AC_SUBST([UINT64_MAX_EQ_ULONG_MAX]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/inttypes_h.m4���������������������������������������������������������0000644�0001750�0001750�00000001774�14557510506�014457� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inttypes_h.m4 serial 10 dnl Copyright (C) 1997-2004, 2006, 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists, # doesn't clash with <sys/types.h>, and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <sys/types.h> #include <inttypes.h> ]], [[uintmax_t i = (uintmax_t) -1; return !i;]])], [gl_cv_header_inttypes_h=yes], [gl_cv_header_inttypes_h=no])]) if test $gl_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and declares uintmax_t. ]) fi ]) ����gnuastro-0.22/bootstrapped/m4/ioctl.m4��������������������������������������������������������������0000644�0001750�0001750�00000003043�14557510506�013372� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ioctl.m4 serial 6 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_IOCTL], [ AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS]) AC_REQUIRE([gl_SYS_SOCKET_H]) HAVE_IOCTL=1 if test "$ac_cv_header_winsock2_h" = yes; then dnl Even if the 'socket' module is not used here, another part of the dnl application may use it and pass file descriptors that refer to dnl sockets to the ioctl() function. So enable the support for sockets. HAVE_IOCTL=0 else AC_CHECK_FUNCS([ioctl]) dnl On glibc systems, the second parameter is 'unsigned long int request', dnl not 'int request'. We cannot simply cast the function pointer, but dnl instead need a wrapper. AC_CACHE_CHECK([for ioctl with POSIX signature], [gl_cv_func_ioctl_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/ioctl.h> /* On some platforms, ioctl() is declared in <unistd.h>. */ #include <unistd.h> ]], [[extern #ifdef __cplusplus "C" #endif int ioctl (int, int, ...); ]]) ], [gl_cv_func_ioctl_posix_signature=yes], [gl_cv_func_ioctl_posix_signature=no]) ]) if test $gl_cv_func_ioctl_posix_signature != yes; then REPLACE_IOCTL=1 fi fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/isblank.m4������������������������������������������������������������0000644�0001750�0001750�00000001032�14557510506�013677� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isblank.m4 serial 3 dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISBLANK], [ dnl Persuade glibc <ctype.h> to declare isblank(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_CTYPE_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([isblank]) if test $ac_cv_func_isblank = no; then HAVE_ISBLANK=0 fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/isnand.m4�������������������������������������������������������������0000644�0001750�0001750�00000005315�14557510506�013540� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnand.m4 serial 14 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check how to get or define isnand(). AC_DEFUN([gl_FUNC_ISNAND], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) ISNAND_LIBM= gl_HAVE_ISNAND_NO_LIBM if test $gl_cv_func_isnand_no_libm = no; then gl_HAVE_ISNAND_IN_LIBM if test $gl_cv_func_isnand_in_libm = yes; then ISNAND_LIBM=-lm fi fi dnl The variable gl_func_isnand set here is used by isnan.m4. if test $gl_cv_func_isnand_no_libm = yes || test -n "$ISNAND_LIBM"; then gl_func_isnand=yes else gl_func_isnand=no HAVE_ISNAND=0 fi AC_SUBST([ISNAND_LIBM]) ]) dnl Check how to get or define isnand() without linking with libm. AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM], [ gl_HAVE_ISNAND_NO_LIBM gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm if test $gl_cv_func_isnand_no_libm = yes; then AC_DEFINE([HAVE_ISNAND_IN_LIBC], [1], [Define if the isnan(double) function is available in libc.]) fi ]) dnl Prerequisites of replacement isnand definition. It does not need -lm. AC_DEFUN([gl_PREREQ_ISNAND], [ AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) ]) dnl Test whether isnand() can be used with libm. AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM], [ AC_CACHE_CHECK([whether isnan(double) can be used with libm], [gl_cv_func_isnand_in_libm], [ saved_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) #elif defined isnan # undef isnand # define isnand(x) isnan ((double)(x)) #endif double x;]], [[return isnand (x);]])], [gl_cv_func_isnand_in_libm=yes], [gl_cv_func_isnand_in_libm=no]) LIBS="$saved_LIBS" ]) ]) AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM], [ AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm], [gl_cv_func_isnand_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) #else # undef isnand # define isnand(x) isnan ((double)(x)) #endif double x;]], [[return isnand (x);]])], [gl_cv_func_isnand_no_libm=yes], [gl_cv_func_isnand_no_libm=no]) ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/isnanf.m4�������������������������������������������������������������0000644�0001750�0001750�00000012757�14557510506�013552� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnanf.m4 serial 21 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check how to get or define isnanf(). AC_DEFUN([gl_FUNC_ISNANF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) ISNANF_LIBM= gl_HAVE_ISNANF_NO_LIBM if test $gl_cv_func_isnanf_no_libm = no; then gl_HAVE_ISNANF_IN_LIBM if test $gl_cv_func_isnanf_in_libm = yes; then ISNANF_LIBM=-lm fi fi dnl The variable gl_func_isnanf set here is used by isnan.m4. if test $gl_cv_func_isnanf_no_libm = yes || test -n "$ISNANF_LIBM"; then saved_LIBS="$LIBS" LIBS="$LIBS $ISNANF_LIBM" gl_ISNANF_WORKS LIBS="$saved_LIBS" case "$gl_cv_func_isnanf_works" in *yes) gl_func_isnanf=yes ;; *) gl_func_isnanf=no; ISNANF_LIBM= ;; esac else gl_func_isnanf=no fi if test $gl_func_isnanf != yes; then HAVE_ISNANF=0 fi AC_SUBST([ISNANF_LIBM]) ]) dnl Check how to get or define isnanf() without linking with libm. AC_DEFUN([gl_FUNC_ISNANF_NO_LIBM], [ gl_HAVE_ISNANF_NO_LIBM if test $gl_cv_func_isnanf_no_libm = yes; then gl_ISNANF_WORKS fi if test $gl_cv_func_isnanf_no_libm = yes \ && { case "$gl_cv_func_isnanf_works" in *yes) true;; *) false;; esac }; then gl_func_isnanf_no_libm=yes AC_DEFINE([HAVE_ISNANF_IN_LIBC], [1], [Define if the isnan(float) function is available in libc.]) else gl_func_isnanf_no_libm=no fi ]) dnl Prerequisites of replacement isnanf definition. It does not need -lm. AC_DEFUN([gl_PREREQ_ISNANF], [ gl_FLOAT_EXPONENT_LOCATION ]) dnl Test whether isnanf() can be used without libm. AC_DEFUN([gl_HAVE_ISNANF_NO_LIBM], [ AC_CACHE_CHECK([whether isnan(float) can be used without linking with libm], [gl_cv_func_isnanf_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif float x;]], [[return isnanf (x);]])], [gl_cv_func_isnanf_no_libm=yes], [gl_cv_func_isnanf_no_libm=no]) ]) ]) dnl Test whether isnanf() can be used with libm. AC_DEFUN([gl_HAVE_ISNANF_IN_LIBM], [ AC_CACHE_CHECK([whether isnan(float) can be used with libm], [gl_cv_func_isnanf_in_libm], [ saved_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif float x;]], [[return isnanf (x);]])], [gl_cv_func_isnanf_in_libm=yes], [gl_cv_func_isnanf_in_libm=no]) LIBS="$saved_LIBS" ]) ]) dnl Test whether isnanf() rejects Infinity (this fails on Solaris 2.5.1), dnl recognizes a NaN (this fails on IRIX 6.5 with cc), and recognizes a NaN dnl with in-memory representation 0x7fbfffff (this fails on IRIX 6.5). AC_DEFUN([gl_ISNANF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION]) AC_CACHE_CHECK([whether isnan(float) works], [gl_cv_func_isnanf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif /* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ #ifdef __DECC static float NaN () { static float zero = 0.0f; return zero / zero; } #else # define NaN() (0.0f / 0.0f) #endif #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; float value; } memory_float; int main() { int result = 0; if (isnanf (1.0f / 0.0f)) result |= 1; if (!isnanf (NaN ())) result |= 2; #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* The isnanf function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit. */ if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) { memory_float m; m.value = NaN (); /* Set the bits below the exponent to 01111...111. */ m.word[0] &= -1U << FLT_EXPBIT0_BIT; m.word[0] |= (1U << (FLT_EXPBIT0_BIT - 1)) - 1; if (!isnanf (m.value)) result |= 4; } #endif return result; }]])], [gl_cv_func_isnanf_works=yes], [gl_cv_func_isnanf_works=no], [case "$host_os" in irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;; mingw* | windows*) # Guess yes on mingw, no on MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_func_isnanf_works="guessing yes"], [gl_cv_func_isnanf_works="guessing no"]) ;; *) gl_cv_func_isnanf_works="guessing yes" ;; esac ]) ]) ]) �����������������gnuastro-0.22/bootstrapped/m4/isnanl.m4�������������������������������������������������������������0000644�0001750�0001750�00000016536�14557510506�013557� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnanl.m4 serial 26 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_FUNC_ISNANL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) ISNANL_LIBM= gl_HAVE_ISNANL_NO_LIBM if test $gl_cv_func_isnanl_no_libm = no; then gl_HAVE_ISNANL_IN_LIBM if test $gl_cv_func_isnanl_in_libm = yes; then ISNANL_LIBM=-lm fi fi dnl The variable gl_func_isnanl set here is used by isnan.m4. if test $gl_cv_func_isnanl_no_libm = yes || test -n "$ISNANL_LIBM"; then saved_LIBS="$LIBS" LIBS="$LIBS $ISNANL_LIBM" gl_FUNC_ISNANL_WORKS LIBS="$saved_LIBS" case "$gl_cv_func_isnanl_works" in *yes) gl_func_isnanl=yes ;; *) gl_func_isnanl=no; ISNANL_LIBM= ;; esac else gl_func_isnanl=no fi if test $gl_func_isnanl != yes; then HAVE_ISNANL=0 fi AC_SUBST([ISNANL_LIBM]) ]) AC_DEFUN([gl_FUNC_ISNANL_NO_LIBM], [ gl_HAVE_ISNANL_NO_LIBM gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm if test $gl_func_isnanl_no_libm = yes; then gl_FUNC_ISNANL_WORKS case "$gl_cv_func_isnanl_works" in *yes) ;; *) gl_func_isnanl_no_libm=no ;; esac fi if test $gl_func_isnanl_no_libm = yes; then AC_DEFINE([HAVE_ISNANL_IN_LIBC], [1], [Define if the isnan(long double) function is available in libc.]) fi ]) dnl Prerequisites of replacement isnanl definition. It does not need -lm. AC_DEFUN([gl_PREREQ_ISNANL], [ gl_LONG_DOUBLE_EXPONENT_LOCATION AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) ]) dnl Test whether isnanl() can be used without libm. AC_DEFUN([gl_HAVE_ISNANL_NO_LIBM], [ AC_CACHE_CHECK([whether isnan(long double) can be used without linking with libm], [gl_cv_func_isnanl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif long double x;]], [[return isnanl (x);]])], [gl_cv_func_isnanl_no_libm=yes], [gl_cv_func_isnanl_no_libm=no]) ]) ]) dnl Test whether isnanl() can be used with libm. AC_DEFUN([gl_HAVE_ISNANL_IN_LIBM], [ AC_CACHE_CHECK([whether isnan(long double) can be used with libm], [gl_cv_func_isnanl_in_libm], [ saved_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif long double x;]], [[return isnanl (x);]])], [gl_cv_func_isnanl_in_libm=yes], [gl_cv_func_isnanl_in_libm=no]) LIBS="$saved_LIBS" ]) ]) dnl Test whether isnanl() recognizes all canonical numbers which are neither dnl finite nor infinite. AC_DEFUN([gl_FUNC_ISNANL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether isnanl works], [gl_cv_func_isnanl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <limits.h> #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; long double value; } memory_long_double; /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the runtime type conversion. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif int main () { int result = 0; if (!isnanl (NaNl ())) result |= 1; { memory_long_double m; unsigned int i; /* The isnanl function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit (since the exponent never extends to bit 31). */ m.value = NaNl (); m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); for (i = 0; i < NWORDS; i++) m.word[i] |= 1; if (!isnanl (m.value)) result |= 1; } #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } { /* Signalling NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } /* isnanl should return something even for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 4; } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 8; } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 16; } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 32; } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 64; } #endif return result; }]])], [gl_cv_func_isnanl_works=yes], [gl_cv_func_isnanl_works=no], [case "$host_os" in mingw* | windows*) # Guess yes on mingw, no on MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_func_isnanl_works="guessing yes"], [gl_cv_func_isnanl_works="guessing no"]) ;; *) gl_cv_func_isnanl_works="guessing yes" ;; esac ]) ]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/iswblank.m4�����������������������������������������������������������0000644�0001750�0001750�00000002210�14557510506�014065� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iswblank.m4 serial 7 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISWBLANK], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) dnl Persuade glibc <wctype.h> to declare iswblank(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) gl_CHECK_FUNCS_ANDROID([iswblank], [[#include <wctype.h>]]) AC_CHECK_DECLS([iswblank], , , [[ #include <wchar.h> #include <wctype.h> ]]) if test $ac_cv_func_iswblank = no; then HAVE_ISWBLANK=0 if test $ac_cv_have_decl_iswblank = yes \ || case "$gl_cv_onwards_func_iswblank" in \ future*) true ;; \ *) false ;; \ esac; then REPLACE_ISWBLANK=1 fi fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then dnl Redefine all of iswcntrl, ..., towupper in <wctype.h>. : else if test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; then dnl Redefine only iswblank. : fi fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/iswctype.m4�����������������������������������������������������������0000644�0001750�0001750�00000000667�14557510506�014140� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iswctype.m4 serial 3 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISWCTYPE], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) dnl Determine REPLACE_WCTYPE. AC_REQUIRE([gl_FUNC_WCTYPE]) ]) �������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/iswdigit.m4�����������������������������������������������������������0000644�0001750�0001750�00000006677�14557510506�014123� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iswdigit.m4 serial 6 dnl Copyright (C) 2020-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISWDIGIT], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then dnl <wctype.h> redefines iswdigit already. REPLACE_ISWDIGIT="$REPLACE_ISWCNTRL" else AC_CACHE_CHECK([whether iswdigit is ISO C compliant], [gl_cv_func_iswdigit_works], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on FreeBSD, NetBSD, Solaris, native Windows. freebsd* | dragonfly* | netbsd* | solaris* | mingw* | windows*) gl_cv_func_iswdigit_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_iswdigit_works="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none || test $LOCALE_JA != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include <wctype.h> /* Returns the value of iswdigit for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, s, n, &state); if (ret != n) abort (); return iswdigit (wc); } int main (int argc, char *argv[]) { int is; int result = 0; if (strcmp ("$LOCALE_FR", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR") != NULL) { /* This fails on mingw, MSVC 14. */ /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\262", 1); if (!(is == 0)) result |= 1; } if (strcmp ("$LOCALE_JA", "none") != 0 && setlocale (LC_ALL, "$LOCALE_JA") != NULL) { /* This fails on NetBSD 8.0. */ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); if (!(is == 0)) result |= 2; } if (strcmp ("$LOCALE_FR_UTF8", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { /* This fails on FreeBSD 13.0, NetBSD 8.0, MSVC 14. */ /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\331\243", 2); if (!(is == 0)) result |= 4; /* This fails on FreeBSD 13.0, NetBSD 8.0, MSVC 14. */ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\357\274\221", 3); if (!(is == 0)) result |= 8; } if (strcmp ("$LOCALE_ZH_CN", "none") != 0 && setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { /* This fails on NetBSD 8.0, Solaris 10, Solaris 11.4. */ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); if (!(is == 0)) result |= 16; } return result; }]])], [gl_cv_func_iswdigit_works=yes], [gl_cv_func_iswdigit_works=no], [:]) fi ]) case "$gl_cv_func_iswdigit_works" in *yes) ;; *) REPLACE_ISWDIGIT=1 ;; esac fi ]) �����������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/iswpunct.m4�����������������������������������������������������������0000644�0001750�0001750�00000002630�14557510506�014135� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iswpunct.m4 serial 2 dnl Copyright (C) 2023-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISWPUNCT], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then dnl <wctype.h> redefines iswpunct already. REPLACE_ISWPUNCT="$REPLACE_ISWCNTRL" else AC_CACHE_CHECK([whether iswpunct is consistent with ispunct], [gl_cv_func_iswpunct_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <ctype.h> #include <wchar.h> #include <wctype.h> int main (int argc, char *argv[]) { int result = 0; /* This fails on Android 11. */ if ((! iswpunct ('\`')) != (! ispunct ('\`'))) result |= 1; return result; }]])], [gl_cv_func_iswpunct_works=yes], [gl_cv_func_iswpunct_works=no], [case "$host_os" in # Guess no on Android. android*) gl_cv_func_iswpunct_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_iswpunct_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_iswpunct_works" in *yes) ;; *) REPLACE_ISWPUNCT=1 ;; esac fi ]) ��������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/iswxdigit.m4����������������������������������������������������������0000644�0001750�0001750�00000006154�14557510506�014301� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iswxdigit.m4 serial 6 dnl Copyright (C) 2020-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISWXDIGIT], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then dnl <wctype.h> redefines iswxdigit already. REPLACE_ISWXDIGIT="$REPLACE_ISWCNTRL" else AC_CACHE_CHECK([whether iswxdigit is ISO C compliant], [gl_cv_func_iswxdigit_works], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on FreeBSD, NetBSD, Solaris, native Windows. freebsd* | dragonfly* | netbsd* | solaris* | mingw* | windows*) gl_cv_func_iswxdigit_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_iswxdigit_works="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_JA != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include <wctype.h> /* Returns the value of iswxdigit for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, s, n, &state); if (ret != n) abort (); return iswxdigit (wc); } int main (int argc, char *argv[]) { int is; int result = 0; if (strcmp ("$LOCALE_JA", "none") != 0 && setlocale (LC_ALL, "$LOCALE_JA") != NULL) { /* This fails on NetBSD 8.0. */ /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ is = for_character ("\243\301", 2); if (!(is == 0)) result |= 1; } if (strcmp ("$LOCALE_FR_UTF8", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { /* This fails on FreeBSD 13.0. */ /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\331\243", 2); if (!(is == 0)) result |= 2; /* This fails on MSVC 14. */ /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ is = for_character ("\357\274\241", 3); if (!(is == 0)) result |= 4; } if (strcmp ("$LOCALE_ZH_CN", "none") != 0 && setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { /* This fails on Solaris 10, Solaris 11.4. */ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); if (!(is == 0)) result |= 8; } return result; }]])], [gl_cv_func_iswxdigit_works=yes], [gl_cv_func_iswxdigit_works=no], [:]) fi ]) case "$gl_cv_func_iswxdigit_works" in *yes) ;; *) REPLACE_ISWXDIGIT=1 ;; esac fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/langinfo_h.m4���������������������������������������������������������0000644�0001750�0001750�00000011234�14557510506�014365� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# langinfo_h.m4 serial 12 dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_LANGINFO_H], [ AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) dnl Persuade glibc-2.0.6 <langinfo.h> to define CODESET. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl <langinfo.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([langinfo.h]) dnl Determine whether <langinfo.h> exists. It is missing on mingw and BeOS. HAVE_LANGINFO_CODESET=0 HAVE_LANGINFO_T_FMT_AMPM=0 HAVE_LANGINFO_ALTMON=0 HAVE_LANGINFO_ERA=0 HAVE_LANGINFO_YESEXPR=0 AC_CHECK_HEADERS_ONCE([langinfo.h]) if test $ac_cv_header_langinfo_h = yes; then HAVE_LANGINFO_H=1 dnl Determine what <langinfo.h> defines. dnl CODESET is missing on OpenBSD 3.8. dnl ERA etc. are missing on OpenBSD 6.7. dnl T_FMT_AMPM and YESEXPR, NOEXPR are missing on IRIX 5.3. dnl ALTMON_* are missing on glibc 2.26 and many other systems. AC_CACHE_CHECK([whether langinfo.h defines CODESET], [gl_cv_header_langinfo_codeset], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = CODESET; ]])], [gl_cv_header_langinfo_codeset=yes], [gl_cv_header_langinfo_codeset=no]) ]) if test $gl_cv_header_langinfo_codeset = yes; then HAVE_LANGINFO_CODESET=1 fi AC_CACHE_CHECK([whether langinfo.h defines T_FMT_AMPM], [gl_cv_header_langinfo_t_fmt_ampm], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = T_FMT_AMPM; ]])], [gl_cv_header_langinfo_t_fmt_ampm=yes], [gl_cv_header_langinfo_t_fmt_ampm=no]) ]) if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then HAVE_LANGINFO_T_FMT_AMPM=1 fi AC_CACHE_CHECK([whether langinfo.h defines ALTMON_1], [gl_cv_header_langinfo_altmon], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = ALTMON_1; ]])], [gl_cv_header_langinfo_altmon=yes], [gl_cv_header_langinfo_altmon=no]) ]) if test $gl_cv_header_langinfo_altmon = yes; then HAVE_LANGINFO_ALTMON=1 fi AC_CACHE_CHECK([whether langinfo.h defines ERA], [gl_cv_header_langinfo_era], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = ERA; ]])], [gl_cv_header_langinfo_era=yes], [gl_cv_header_langinfo_era=no]) ]) if test $gl_cv_header_langinfo_era = yes; then HAVE_LANGINFO_ERA=1 fi AC_CACHE_CHECK([whether langinfo.h defines YESEXPR], [gl_cv_header_langinfo_yesexpr], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = YESEXPR; ]])], [gl_cv_header_langinfo_yesexpr=yes], [gl_cv_header_langinfo_yesexpr=no]) ]) if test $gl_cv_header_langinfo_yesexpr = yes; then HAVE_LANGINFO_YESEXPR=1 fi else HAVE_LANGINFO_H=0 fi AC_SUBST([HAVE_LANGINFO_H]) AC_SUBST([HAVE_LANGINFO_CODESET]) AC_SUBST([HAVE_LANGINFO_T_FMT_AMPM]) AC_SUBST([HAVE_LANGINFO_ALTMON]) AC_SUBST([HAVE_LANGINFO_ERA]) AC_SUBST([HAVE_LANGINFO_YESEXPR]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <langinfo.h> ]], [nl_langinfo]) ]) # gl_LANGINFO_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_LANGINFO_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_LANGINFO_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_LANGINFO_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_LANGINFO_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NL_LANGINFO]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_LANGINFO_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) ]) AC_DEFUN([gl_LANGINFO_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_NL_LANGINFO=1; AC_SUBST([HAVE_NL_LANGINFO]) REPLACE_NL_LANGINFO=0; AC_SUBST([REPLACE_NL_LANGINFO]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/largefile.m4����������������������������������������������������������0000644�0001750�0001750�00000034316�14557510506�014221� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Enable large files on systems where this is not the default. # Enable support for files on Linux file systems with 64-bit inode numbers. # Copyright 1992-1996, 1998-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # The following macro works around a problem in Autoconf's AC_FUNC_FSEEKO: # It does not set _LARGEFILE_SOURCE=1 on HP-UX/ia64 32-bit, although this # setting of _LARGEFILE_SOURCE is needed so that <stdio.h> declares fseeko # and ftello in C++ mode as well. # This problem occurs in Autoconf 2.71 and earlier, which lack AC_SYS_YEAR2038. AC_DEFUN([gl_SET_LARGEFILE_SOURCE], m4_ifndef([AC_SYS_YEAR2038], [[ AC_REQUIRE([AC_CANONICAL_HOST]) AC_FUNC_FSEEKO case "$host_os" in hpux*) AC_DEFINE([_LARGEFILE_SOURCE], [1], [Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2).]) ;; esac ]]) ) m4_ifndef([AC_SYS_YEAR2038_RECOMMENDED], [ # Support AC_SYS_YEAR2038_RECOMMENDED and related macros, even if # Autoconf 2.71 or earlier. This code is taken from Autoconf master. # _AC_SYS_YEAR2038_TEST_CODE # -------------------------- # C code used to probe for time_t that can represent time points more # than 2**31 - 1 seconds after the epoch. With the usual Unix epoch, # these correspond to dates after 2038-01-18 22:14:07 +0000 (Gregorian), # hence the name. AC_DEFUN([_AC_SYS_YEAR2038_TEST_CODE], [[ #include <time.h> /* Check that time_t can represent 2**32 - 1 correctly. */ #define LARGE_TIME_T \\ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 && LARGE_TIME_T % 65537 == 0) ? 1 : -1]; ]]) # _AC_SYS_YEAR2038_OPTIONS # ------------------------ # List of known ways to enable support for large time_t. If you change # this list you probably also need to change the AS_CASE at the end of # _AC_SYS_YEAR2038_PROBE. m4_define([_AC_SYS_YEAR2038_OPTIONS], m4_normalize( ["none needed"] dnl 64-bit and newer 32-bit Unix ["-D_TIME_BITS=64"] dnl glibc 2.34 with some 32-bit ABIs ["-D__MINGW_USE_VC2005_COMPAT"] dnl 32-bit MinGW ["-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"] dnl 32-bit MinGW (misconfiguration) )) # _AC_SYS_YEAR2038_PROBE # ---------------------- # Subroutine of AC_SYS_YEAR2038. Probe for time_t that can represent # time points more than 2**31 - 1 seconds after the epoch (dates after # 2038-01-18, see above) and set the cache variable ac_cv_sys_year2038_opts # to one of the values in the _AC_SYS_YEAR2038_OPTIONS list, or to # "support not detected" if none of them worked. Then, set compilation # options and #defines as necessary to enable large time_t support. # # Note that we do not test whether mktime, localtime, etc. handle # large values of time_t correctly, as that would require use of # AC_TRY_RUN. Note also that some systems only support large time_t # together with large off_t. # # If you change this macro you may also need to change # _AC_SYS_YEAR2038_OPTIONS. AC_DEFUN([_AC_SYS_YEAR2038_PROBE], [AC_CACHE_CHECK([for $CC option for timestamps after 2038], [ac_cv_sys_year2038_opts], [ac_save_CPPFLAGS="$CPPFLAGS" ac_opt_found=no for ac_opt in _AC_SYS_YEAR2038_OPTIONS; do AS_IF([test x"$ac_opt" != x"none needed"], [CPPFLAGS="$ac_save_CPPFLAGS $ac_opt"]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([_AC_SYS_YEAR2038_TEST_CODE])], [ac_cv_sys_year2038_opts="$ac_opt" ac_opt_found=yes]) test $ac_opt_found = no || break done CPPFLAGS="$ac_save_CPPFLAGS" test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected"]) ac_have_year2038=yes AS_CASE([$ac_cv_sys_year2038_opts], ["none needed"], [], ["support not detected"], [ac_have_year2038=no], ["-D_TIME_BITS=64"], [AC_DEFINE([_TIME_BITS], [64], [Number of bits in time_t, on hosts where this is settable.])], ["-D__MINGW_USE_VC2005_COMPAT"], [AC_DEFINE([__MINGW_USE_VC2005_COMPAT], [1], [Define to 1 on platforms where this makes time_t a 64-bit type.])], ["-U_USE_32_BIT_TIME_T"*], [AC_MSG_FAILURE(m4_text_wrap( [the 'time_t' type is currently forced to be 32-bit. It will stop working after mid-January 2038. Remove _USE_32BIT_TIME_T from the compiler flags.], [], [], [55]))], [AC_MSG_ERROR( [internal error: bad value for \$ac_cv_sys_year2038_opts])]) ]) # _AC_SYS_YEAR2038_ENABLE # ----------------------- # Depending on which of the YEAR2038 macros was used, add either an # --enable-year2038 or a --disable-year2038 to # the configure script. This is expanded very late and # therefore there cannot be any code in the AC_ARG_ENABLE. The # default value for 'enable_year2038' is emitted unconditionally # because the generated code always looks at this variable. m4_define([_AC_SYS_YEAR2038_ENABLE], [m4_divert_text([DEFAULTS], m4_provide_if([AC_SYS_YEAR2038], [enable_year2038=yes], [enable_year2038=no]))]dnl [AC_ARG_ENABLE([year2038], m4_provide_if([AC_SYS_YEAR2038], [AS_HELP_STRING([--disable-year2038], [don't support timestamps after 2038])], [AS_HELP_STRING([--enable-year2038], [support timestamps after 2038])]))]) # AC_SYS_YEAR2038 # --------------- # Attempt to detect and activate support for large time_t. # On systems where time_t is not always 64 bits, this probe can be # skipped by passing the --disable-year2038 option to configure. AC_DEFUN([AC_SYS_YEAR2038], [AC_REQUIRE([AC_SYS_LARGEFILE])dnl AS_IF([test "$enable_year2038,$ac_have_year2038,$cross_compiling" = yes,no,no], [# If we're not cross compiling and 'touch' works with a large # timestamp, then we can presume the system supports wider time_t # *somehow* and we just weren't able to detect it. One common # case that we deliberately *don't* probe for is a system that # supports both 32- and 64-bit ABIs but only the 64-bit ABI offers # wide time_t. (It would be inappropriate for us to override an # intentional use of -m32.) Error out, demanding use of # --disable-year2038 if this is intentional. AS_IF([TZ=UTC0 touch -t 210602070628.15 conftest.time 2>/dev/null], [AS_CASE([`TZ=UTC0 LC_ALL=C ls -l conftest.time 2>/dev/null`], [*'Feb 7 2106'* | *'Feb 7 17:10'*], [AC_MSG_FAILURE(m4_text_wrap( [this system appears to support timestamps after mid-January 2038, but no mechanism for enabling wide 'time_t' was detected. Did you mean to build a 64-bit binary? (E.g., 'CC="${CC} -m64"'.) To proceed with 32-bit time_t, configure with '--disable-year2038'.], [], [], [55]))])])])]) # AC_SYS_YEAR2038_RECOMMENDED # --------------------------- # Same as AC_SYS_YEAR2038, but recommend support for large time_t. # If we cannot find any way to make time_t capable of representing # values larger than 2**31 - 1, error out unless --disable-year2038 is given. AC_DEFUN([AC_SYS_YEAR2038_RECOMMENDED], [AC_REQUIRE([AC_SYS_YEAR2038])dnl AS_IF([test "$enable_year2038,$ac_have_year2038" = yes,no], [AC_MSG_FAILURE(m4_text_wrap( [could not enable timestamps after mid-January 2038. This package recommends support for these later timestamps. However, to proceed with signed 32-bit time_t even though it will fail then, configure with '--disable-year2038'.], [], [], [55]))])]) # _AC_SYS_LARGEFILE_TEST_CODE # --------------------------- # C code used to probe for large file support. m4_define([_AC_SYS_LARGEFILE_TEST_CODE], [@%:@include <sys/types.h> @%:@ifndef FTYPE @%:@ define FTYPE off_t @%:@endif /* Check that FTYPE can represent 2**63 - 1 correctly. We can't simply define LARGE_FTYPE to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ @%:@define LARGE_FTYPE (((FTYPE) 1 << 31 << 31) - 1 + ((FTYPE) 1 << 31 << 31)) int FTYPE_is_large[[(LARGE_FTYPE % 2147483629 == 721 && LARGE_FTYPE % 2147483647 == 1) ? 1 : -1]];[]dnl ]) # Defined by Autoconf 2.71 and circa 2022 Gnulib unwisely depended on it. m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES], [_AC_SYS_LARGEFILE_TEST_CODE]) # _AC_SYS_LARGEFILE_OPTIONS # ------------------------- # List of known ways to enable support for large files. If you change # this list you probably also need to change the AS_CASE at the end of # _AC_SYS_LARGEFILE_PROBE. m4_define([_AC_SYS_LARGEFILE_OPTIONS], m4_normalize( ["none needed"] dnl Most current systems ["-D_FILE_OFFSET_BITS=64"] dnl X/Open LFS spec ["-D_LARGE_FILES=1"] dnl 32-bit AIX 4.2.1+, 32-bit z/OS ["-n32"] dnl 32-bit IRIX 6, SGI cc (obsolete) )) # _AC_SYS_LARGEFILE_PROBE # ----------------------- # Subroutine of AC_SYS_LARGEFILE. Probe for large file support and set # the cache variable ac_cv_sys_largefile_opts to one of the values in # the _AC_SYS_LARGEFILE_OPTIONS list, or to "support not detected" if # none of the options in that list worked. Then, set compilation # options and #defines as necessary to enable large file support. # # If large file support is not detected, the behavior depends on which of # the top-level AC_SYS_LARGEFILE macros was used (see below). # # If you change this macro you may also need to change # _AC_SYS_LARGEFILE_OPTIONS. AC_DEFUN([_AC_SYS_LARGEFILE_PROBE], [AC_CACHE_CHECK([for $CC option to enable large file support], [ac_cv_sys_largefile_opts], [ac_save_CC="$CC" ac_opt_found=no for ac_opt in _AC_SYS_LARGEFILE_OPTIONS; do AS_IF([test x"$ac_opt" != x"none needed"], [CC="$ac_save_CC $ac_opt"]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_CODE])], [AS_IF([test x"$ac_opt" = x"none needed"], [# GNU/Linux s390x and alpha need _FILE_OFFSET_BITS=64 for wide ino_t. CC="$CC -DFTYPE=ino_t" AC_COMPILE_IFELSE([], [], [CC="$CC -D_FILE_OFFSET_BITS=64" AC_COMPILE_IFELSE([], [ac_opt='-D_FILE_OFFSET_BITS=64'])])]) ac_cv_sys_largefile_opts=$ac_opt ac_opt_found=yes]) test $ac_opt_found = no || break done CC="$ac_save_CC" dnl Gnulib implements large file support for native Windows, based on the dnl variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE. m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([AC_CANONICAL_HOST]) if test $ac_opt_found != yes; then AS_CASE([$host_os], [mingw* | windows*], [ac_cv_sys_largefile_opts="supported through gnulib" ac_opt_found=yes] ) fi ]) test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected"]) ac_have_largefile=yes AS_CASE([$ac_cv_sys_largefile_opts], ["none needed"], [], ["supported through gnulib"], [], ["support not detected"], [ac_have_largefile=no], ["-D_FILE_OFFSET_BITS=64"], [AC_DEFINE([_FILE_OFFSET_BITS], [64], [Number of bits in a file offset, on hosts where this is settable.])], ["-D_LARGE_FILES=1"], [AC_DEFINE([_LARGE_FILES], [1], [Define to 1 on platforms where this makes off_t a 64-bit type.])], ["-n32"], [CC="$CC -n32"], [AC_MSG_ERROR( [internal error: bad value for \$ac_cv_sys_largefile_opts])]) AS_IF([test "$enable_year2038" != no], [_AC_SYS_YEAR2038_PROBE]) AC_CONFIG_COMMANDS_PRE([_AC_SYS_YEAR2038_ENABLE])]) # AC_SYS_LARGEFILE # ---------------- # By default, many hosts won't let programs access large files; # one must use special compiler options to get large-file access to work. # For more details about this brain damage please see: # http://www.unix.org/version2/whatsnew/lfs20mar.html # Additionally, on Linux file systems with 64-bit inodes a file that happens # to have a 64-bit inode number cannot be accessed by 32-bit applications on # Linux x86/x86_64. This can occur with file systems such as XFS and NFS. AC_DEFUN([AC_SYS_LARGEFILE], [AC_ARG_ENABLE([largefile], [AS_HELP_STRING([--disable-largefile], [omit support for large files])])dnl AS_IF([test "$enable_largefile,$enable_year2038" != no,no], [_AC_SYS_LARGEFILE_PROBE])]) ])# m4_ifndef AC_SYS_YEAR2038_RECOMMENDED # Enable large files on systems where this is implemented by Gnulib, not by the # system headers. # Set the variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE if Gnulib # overrides ensure that off_t or 'struct size.st_size' are 64-bit, respectively. AC_DEFUN([gl_LARGEFILE], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw* | windows*) dnl Native Windows. dnl mingw64 defines off_t to a 64-bit type already, if dnl _FILE_OFFSET_BITS=64, which is ensured by AC_SYS_LARGEFILE. AC_CACHE_CHECK([for 64-bit off_t], [gl_cv_type_off_t_64], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; ]], [[]])], [gl_cv_type_off_t_64=yes], [gl_cv_type_off_t_64=no]) ]) if test $gl_cv_type_off_t_64 = no; then WINDOWS_64_BIT_OFF_T=1 else WINDOWS_64_BIT_OFF_T=0 fi dnl Some mingw versions define, if _FILE_OFFSET_BITS=64, 'struct stat' dnl to 'struct _stat32i64' or 'struct _stat64' (depending on dnl _USE_32BIT_TIME_T), which has a 32-bit st_size member. AC_CACHE_CHECK([for 64-bit st_size], [gl_cv_member_st_size_64], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> struct stat buf; int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; ]], [[]])], [gl_cv_member_st_size_64=yes], [gl_cv_member_st_size_64=no]) ]) if test $gl_cv_member_st_size_64 = no; then WINDOWS_64_BIT_ST_SIZE=1 else WINDOWS_64_BIT_ST_SIZE=0 fi ;; *) dnl Nothing to do on gnulib's side. dnl A 64-bit off_t is dnl - already the default on Mac OS X, FreeBSD, NetBSD, OpenBSD, IRIX, dnl OSF/1, Cygwin, dnl - enabled by _FILE_OFFSET_BITS=64 (ensured by AC_SYS_LARGEFILE) on dnl glibc, HP-UX, Solaris, dnl - enabled by _LARGE_FILES=1 (ensured by AC_SYS_LARGEFILE) on AIX, dnl - impossible to achieve on Minix 3.1.8. WINDOWS_64_BIT_OFF_T=0 WINDOWS_64_BIT_ST_SIZE=0 ;; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/lcmessage.m4����������������������������������������������������������0000644�0001750�0001750�00000002515�14557510506�014226� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lcmessage.m4 serial 8 dnl Copyright (C) 1995-2002, 2004-2005, 2008-2014, 2016, 2019-2024 Free dnl Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995. # Check whether LC_MESSAGES is available in <locale.h>. AC_DEFUN([gt_LC_MESSAGES], [ AC_CACHE_CHECK([for LC_MESSAGES], [gt_cv_val_LC_MESSAGES], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h>]], [[return LC_MESSAGES]])], [gt_cv_val_LC_MESSAGES=yes], [gt_cv_val_LC_MESSAGES=no])]) if test $gt_cv_val_LC_MESSAGES = yes; then AC_DEFINE([HAVE_LC_MESSAGES], [1], [Define if your <locale.h> file defines LC_MESSAGES.]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/ldexp.m4��������������������������������������������������������������0000644�0001750�0001750�00000006272�14557510506�013403� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ldexp.m4 serial 3 dnl Copyright (C) 2010-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LDEXP], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_ISNAND]) dnl for ISNAND_LIBM AC_REQUIRE([gl_CHECK_LDEXP_NO_LIBM]) LDEXP_LIBM= if test $gl_cv_func_ldexp_no_libm = no; then AC_CACHE_CHECK([whether ldexp() can be used with libm], [gl_cv_func_ldexp_in_libm], [ saved_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double, int) = ldexp; double x;]], [[return ldexp (x, -1) > 0;]])], [gl_cv_func_ldexp_in_libm=yes], [gl_cv_func_ldexp_in_libm=no]) LIBS="$saved_LIBS" ]) if test $gl_cv_func_ldexp_in_libm = yes; then LDEXP_LIBM=-lm fi fi saved_LIBS="$LIBS" LIBS="$LIBS $LDEXP_LIBM" gl_FUNC_LDEXP_WORKS LIBS="$saved_LIBS" case "$gl_cv_func_ldexp_works" in *yes) ;; *) REPLACE_LDEXP=1 ;; esac if test $REPLACE_LDEXP = 1; then dnl Find libraries needed to link lib/ldexp.c. LDEXP_LIBM="$ISNAND_LIBM" fi AC_SUBST([LDEXP_LIBM]) ]) dnl Test whether ldexp() can be used without linking with libm. dnl Set gl_cv_func_ldexp_no_libm to 'yes' or 'no' accordingly. AC_DEFUN([gl_CHECK_LDEXP_NO_LIBM], [ AC_CACHE_CHECK([whether ldexp() can be used without linking with libm], [gl_cv_func_ldexp_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double, int) = ldexp; double x;]], [[return ldexp (x, -1) > 0;]])], [gl_cv_func_ldexp_no_libm=yes], [gl_cv_func_ldexp_no_libm=no]) ]) ]) dnl Test whether ldexp() works (this fails on OpenBSD 7.3/mips64). AC_DEFUN([gl_FUNC_LDEXP_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether ldexp works], [gl_cv_func_ldexp_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> int main() { int result = 0; { volatile double x = 1.9269695883136991774e-308; volatile double y = ldexp (x, 0); if (y != x) result |= 1; } return result; }]])], [gl_cv_func_ldexp_works=yes], [gl_cv_func_ldexp_works=no], [case "$host_os" in openbsd*) gl_cv_func_ldexp_works="guessing no" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_ldexp_works="guessing yes" ;; *) gl_cv_func_ldexp_works="guessing yes" ;; esac ]) ]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/lib-ld.m4�������������������������������������������������������������0000644�0001750�0001750�00000012410�14557510506�013421� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-ld.m4 serial 13 dnl Copyright (C) 1996-2003, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) acl_cv_prog_gnu_ld=yes ;; *) acl_cv_prog_gnu_ld=no ;; esac]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-2.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([[--with-gnu-ld]], [assume the C compiler uses GNU ld [default=no]])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi if test -n "$LD"; then AC_MSG_CHECKING([for ld]) elif test "$GCC" = yes; then AC_MSG_CHECKING([for ld used by $CC]) elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi if test -n "$LD"; then # Let the user override the test with a path. : else AC_CACHE_VAL([acl_cv_path_LD], [ acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. case $host in *-*-mingw* | windows*) # gcc leaves a trailing carriage return which upsets mingw acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) acl_output=`($CC -print-prog-name=ld) 2>&5` ;; esac case $acl_output in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` done # Got the pathname. No search in PATH is needed. acl_cv_path_LD="$acl_output" ac_prog= ;; "") # If it fails, then pretend we aren't using GCC. ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac fi if test -n "$ac_prog"; then # Search for $ac_prog in $PATH. acl_saved_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_saved_IFS" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$acl_saved_IFS" fi case $host in *-*-aix*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif ]])], [# The compiler produces 64-bit code. Add option '-b64' so that the # linker groks 64-bit object files. case "$acl_cv_path_LD " in *" -b64 "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; esac ], []) ;; sparc64-*-netbsd*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [], [# The compiler produces 32-bit code. Add option '-m elf32_sparc' # so that the linker groks 32-bit object files. case "$acl_cv_path_LD " in *" -m elf32_sparc "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; esac ]) ;; esac ]) LD="$acl_cv_path_LD" fi if test -n "$LD"; then AC_MSG_RESULT([$LD]) else AC_MSG_RESULT([no]) AC_MSG_ERROR([no acceptable ld found in \$PATH]) fi AC_LIB_PROG_LD_GNU ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/lib-link.m4�����������������������������������������������������������0000644�0001750�0001750�00000105766�14557510557�014006� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-link.m4 serial 34 dnl Copyright (C) 2001-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.61]) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes popdef([NAME]) popdef([Name]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. The missing-message dnl defaults to 'no' and may contain additional hints for the user. dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. acl_saved_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ acl_saved_LIBS="$LIBS" dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, dnl because these -l options might require -L options that are present in dnl LIBS. -l options benefit only from the -L options listed before it. dnl Otherwise, add it to the front of LIBS, because it may be a static dnl library that depends on another static library that is present in LIBS. dnl Static libraries benefit only from the static libraries listed after dnl it. case " $LIB[]NAME" in *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; *) LIBS="$LIB[]NAME $LIBS" ;; esac AC_LINK_IFELSE( [AC_LANG_PROGRAM([[$3]], [[$4]])], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) LIBS="$acl_saved_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$acl_saved_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) popdef([NAME]) popdef([Name]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_libname_spec, dnl acl_library_names_spec, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Complain if config.rpath is missing. AC_REQUIRE_AUX_FILE([config.rpath]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) AC_ARG_WITH(PACK[-prefix], [[ --with-]]PACK[[-prefix[=DIR] search for ]]PACKLIBS[[ in DIR/include and DIR/lib --without-]]PACK[[-prefix don't search for ]]PACKLIBS[[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi ]) if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Use breadth-first search. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. saved_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$saved_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $dependency_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then dnl Really add $dependency_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then dnl Really add $dependency_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. dnl But on GNU systems, ignore -lc options, because dnl - linking with libc is the default anyway, dnl - linking with libc.a may produce an error dnl "/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie" dnl or may produce an executable that always crashes, see dnl <https://lists.gnu.org/archive/html/grep-devel/2020-09/msg00052.html>. dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_saved_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_saved_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2" \ && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2" \ && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_saved_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_saved_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) ����������gnuastro-0.22/bootstrapped/m4/lib-prefix.m4���������������������������������������������������������0000644�0001750�0001750�00000027655�14557510506�014340� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-prefix.m4 serial 21 dnl Copyright (C) 2001-2005, 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH([lib-prefix], [[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_saved_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_saved_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a function acl_is_expected_elfclass, that tests whether standard input dn; has a 32-bit or 64-bit ELF header, depending on the host CPU ABI, dnl - 3 variables acl_libdirstem, acl_libdirstem2, acl_libdirstem3, containing dnl the basename of the libdir to try in turn, either "lib" or "lib64" or dnl "lib/64" or "lib32" or "lib/sparcv9" or "lib/amd64" or similar. AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib, lib32, and lib64. dnl On most glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. However, on dnl Arch Linux based distributions, it's the opposite: 32-bit libraries go dnl under $prefix/lib32 and 64-bit libraries go under $prefix/lib. dnl We determine the compiler's default mode by looking at the compiler's dnl library search path. If at least one of its elements ends in /lib64 or dnl points to a directory whose absolute pathname ends in /lib64, we use that dnl for 64-bit ABIs. Similarly for 32-bit ABIs. Otherwise we use the default, dnl namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT]) AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf], [AC_EGREP_CPP([Extensible Linking Format], [#if defined __ELF__ || (defined __linux__ && defined __EDG__) Extensible Linking Format #endif ], [gl_cv_elf=yes], [gl_cv_elf=no]) ]) if test $gl_cv_elf = yes; then # Extract the ELF class of a file (5th byte) in decimal. # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header if od -A x < /dev/null >/dev/null 2>/dev/null; then # Use POSIX od. func_elfclass () { od -A n -t d1 -j 4 -N 1 } else # Use BSD hexdump. func_elfclass () { dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' echo } fi # Use 'expr', not 'test', to compare the values of func_elfclass, because on # Solaris 11 OpenIndiana and Solaris 11 OmniOS, the result is 001 or 002, # not 1 or 2. changequote(,)dnl case $HOST_CPU_C_ABI_32BIT in yes) # 32-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 1 > /dev/null } ;; no) # 64-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 2 > /dev/null } ;; *) # Unknown. acl_is_expected_elfclass () { : } ;; esac changequote([,])dnl else acl_is_expected_elfclass () { : } fi dnl Allow the user to override the result by setting acl_cv_libdirstems. AC_CACHE_CHECK([for the common suffixes of directories in the library search path], [acl_cv_libdirstems], [dnl Try 'lib' first, because that's the default for libdir in GNU, see dnl <https://www.gnu.org/prep/standards/html_node/Directory-Variables.html>. acl_libdirstem=lib acl_libdirstem2= acl_libdirstem3= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl <https://docs.oracle.com/cd/E19253-01/816-5138/dev-env/index.html>. dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. if test $HOST_CPU_C_ABI_32BIT = no; then acl_libdirstem2=lib/64 case "$host_cpu" in sparc*) acl_libdirstem3=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; esac fi ;; *) dnl If $CC generates code for a 32-bit ABI, the libraries are dnl surely under $prefix/lib or $prefix/lib32, not $prefix/lib64. dnl Similarly, if $CC generates code for a 64-bit ABI, the libraries dnl are surely under $prefix/lib or $prefix/lib64, not $prefix/lib32. dnl Find the compiler's search path. However, non-system compilers dnl sometimes have odd library search paths. But we can't simply invoke dnl '/usr/bin/gcc -print-search-dirs' because that would not take into dnl account the -m32/-m31 or -m64 options from the $CC or $CFLAGS. searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test $HOST_CPU_C_ABI_32BIT != no; then # 32-bit or unknown ABI. if test -d /usr/lib32; then acl_libdirstem2=lib32 fi fi if test $HOST_CPU_C_ABI_32BIT != yes; then # 64-bit or unknown ABI. if test -d /usr/lib64; then acl_libdirstem3=lib64 fi fi if test -n "$searchpath"; then acl_saved_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib32 ) acl_libdirstem2=lib32 ;; */lib64 ) acl_libdirstem3=lib64 ;; esac ;; esac fi done IFS="$acl_saved_IFS" if test $HOST_CPU_C_ABI_32BIT = yes; then # 32-bit ABI. acl_libdirstem3= fi if test $HOST_CPU_C_ABI_32BIT = no; then # 64-bit ABI. acl_libdirstem2= fi fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" ]) dnl Decompose acl_cv_libdirstems into acl_libdirstem, acl_libdirstem2, and dnl acl_libdirstem3. changequote(,)dnl acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` changequote([,])dnl ]) �����������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/libtool.m4������������������������������������������������������������0000644�0001750�0001750�00001127431�14557510427�013737� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. ]) # serial 59 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_DECL_FILECMD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC and # ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to <bug-libtool@gnu.org>." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) case $MACOSX_DEPLOYMENT_TARGET,$host in 10.[[012]],*|,*powerpc*-darwin[[5-8]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [m4_require([_LT_DECL_SED])dnl AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} _LT_DECL([], [AR], [1], [The archiver]) # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because thats what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS _LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)]) # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. _LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -z "$STRIP"; then AC_MSG_RESULT([no]) else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test no != "$with_gnu_ld" && break ;; *) test yes != "$with_gnu_ld" && break ;; esac fi done IFS=$lt_save_ifs else lt_cv_path_LD=$LD # Let the user override the test with a path. fi]) LD=$lt_cv_path_LD if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) _LT_PATH_LD_GNU AC_SUBST([LD]) _LT_TAGDECL([], [LD], [1], [The linker used to build libraries]) ])# LT_PATH_LD # Old names: AU_ALIAS([AM_PROG_LD], [LT_PATH_LD]) AU_ALIAS([AC_PROG_LD], [LT_PATH_LD]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_LD], []) dnl AC_DEFUN([AC_PROG_LD], []) # _LT_PATH_LD_GNU #- -------------- m4_defun([_LT_PATH_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac]) with_gnu_ld=$lt_cv_prog_gnu_ld ])# _LT_PATH_LD_GNU # _LT_CMD_RELOAD # -------------- # find reload flag for linker # -- PORTME Some linkers may need a different reload flag. m4_defun([_LT_CMD_RELOAD], [AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag, [lt_cv_ld_reload_flag='-r']) reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac _LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl _LT_TAGDECL([], [reload_cmds], [2])dnl ])# _LT_CMD_RELOAD # _LT_PATH_DD # ----------- # find a working dd m4_defun([_LT_PATH_DD], [AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl* | icl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl* | ,icl* | no,icl*) # Native MSVC or ICC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_FILECMD # ---------------- # Check for a file(cmd) program that can be used to detect file type and magic m4_defun([_LT_DECL_FILECMD], [AC_CHECK_TOOL([FILECMD], [file], [:]) _LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types]) ])# _LD_DECL_FILECMD # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/libunistring-base.m4��������������������������������������������������0000644�0001750�0001750�00000021005�14557510506�015677� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libunistring-base.m4 serial 8 dnl Copyright (C) 2010-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paolo Bonzini and Bruno Haible. dnl gl_LIBUNISTRING_MODULE([VERSION], [Module]) dnl Declares that the source files of Module should be compiled, unless we dnl are linking with libunistring and its version is >= the given VERSION. dnl Defines an automake conditional LIBUNISTRING_COMPILE_$MODULE that is dnl true if the source files of Module should be compiled. dnl This macro is to be used for public libunistring API, not for dnl undocumented API. dnl dnl You have to bump the VERSION argument to the next projected version dnl number each time you make a change that affects the behaviour of the dnl functions defined in Module (even if the sources of Module itself do not dnl change). dnl dnl This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_LIBUNISTRING_MODULE], [ AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE]) dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from dnl gl_LIBUNISTRING_CORE if that macro has been run. gl_CONDITIONAL(AS_TR_CPP([LIBUNISTRING_COMPILE_$2]), [gl_LIBUNISTRING_VERSION_CMP([$1])]) ]) dnl gl_LIBUNISTRING_MODULE_WITH_VARIABLE([VERSION], [Module]) dnl is like gl_LIBUNISTRING_MODULE([VERSION], [Module]), except that it also dnl defines an AC_SUBSTed autoconf variable GNULIB_$MODULE_DLL_VARIABLE. dnl What's the expansion of this autoconf variable? dnl - When building libunistring, it expands to LIBUNISTRING_DLL_VARIABLE. dnl (This is necessary because this token must be present in the .h files dnl when the .h files get installed.) dnl - When building gnulib or application code it expands to dnl - LIBUNISTRING_DLL_VARIABLE by default, dnl - empty if the automake conditional LIBUNISTRING_COMPILE_$MODULE dnl evaluates to true. dnl (This is necessary because when the conditional evaluates to false, dnl the application code expects to use the declared variable from the dnl installed libunistring; it's in this case that the dnl LIBUNISTRING_DLL_VARIABLE macro from the installed dnl <unistring/woe32dll.h> must be used.) dnl dnl This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_LIBUNISTRING_MODULE_WITH_VARIABLE], [ gl_LIBUNISTRING_MODULE([$1], [$2]) m4_ifndef([gl_IN_LIBUNISTRING], [if test -z "${AS_TR_CPP([LIBUNISTRING_COMPILE_$2])_TRUE}"; then GL_MODULE_INDICATOR_PREFIX[]_GNULIB_[]AS_TR_CPP([$2_DLL_VARIABLE])= fi ]) ]) dnl gl_LIBUNISTRING_LIBHEADER([VERSION], [HeaderFile]) dnl Declares that HeaderFile should be created, unless we are linking dnl with libunistring and its version is >= the given VERSION. dnl HeaderFile should be relative to the lib directory and end in '.h'. dnl Prepares for substituting LIBUNISTRING_HEADERFILE (to HeaderFile or empty). dnl dnl When we are linking with the already installed libunistring and its version dnl is < VERSION, we create HeaderFile here, because we may compile functions dnl (via gl_LIBUNISTRING_MODULE above) that are not contained in the installed dnl version. dnl When we are linking with the already installed libunistring and its version dnl is > VERSION, we don't create HeaderFile here: it could cause compilation dnl errors in other libunistring header files if some types are missing. dnl dnl You have to bump the VERSION argument to the next projected version dnl number each time you make a non-comment change to the HeaderFile. AC_DEFUN([gl_LIBUNISTRING_LIBHEADER], [ AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE]) dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from dnl gl_LIBUNISTRING_CORE if that macro has been run. if gl_LIBUNISTRING_VERSION_CMP([$1]); then dnl It is OK to use a .h file in lib/ from within tests/, but not vice dnl versa. if test -z "$LIBUNISTRING_[]AS_TR_CPP([$2])"; then LIBUNISTRING_[]AS_TR_CPP([$2])="${gl_source_base_prefix}$2" fi else LIBUNISTRING_[]AS_TR_CPP([$2])= fi AC_SUBST([LIBUNISTRING_]AS_TR_CPP([$2])) ]) dnl Miscellaneous preparations/initializations. AC_DEFUN([gl_LIBUNISTRING_LIB_PREPARE], [ dnl Ensure that HAVE_LIBUNISTRING is fully determined at this point. m4_ifdef([gl_LIBUNISTRING], [AC_REQUIRE([gl_LIBUNISTRING])]) AC_REQUIRE([AC_PROG_AWK]) dnl Sed expressions to extract the parts of a version number. changequote(,) gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;} i\ 0 q ' gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;} i\ 0 q ' gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;} i\ 0 q ' changequote([,]) if test "$HAVE_LIBUNISTRING" = yes; then LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"` LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"` LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"` fi dnl Determine whether <unistring/woe32dll.h> from an installed libunistring dnl is available. m4_ifdef([gl_IN_LIBUNISTRING], [dnl In libunistring, all .h files that declare variables need to dnl #include <unistring/woe32dll.h>. This references the file dnl unistring/woe32dll.h in libunistring. HAVE_UNISTRING_WOE32DLL_H=1 ], [dnl In gnulib or in applications, we need a #include <unistring/woe32dll.h> dnl if and only if an installed libunistring is available. if test "$HAVE_LIBUNISTRING" = yes; then AC_CHECK_HEADERS([unistring/woe32dll.h], [HAVE_UNISTRING_WOE32DLL_H=1], [HAVE_UNISTRING_WOE32DLL_H=0]) else HAVE_UNISTRING_WOE32DLL_H=0 fi ]) AC_SUBST([HAVE_UNISTRING_WOE32DLL_H]) ]) dnl gl_LIBUNISTRING_VERSION_CMP([VERSION]) dnl Expands to a shell statement that evaluates to true if LIBUNISTRING_VERSION dnl is less than the VERSION argument. AC_DEFUN([gl_LIBUNISTRING_VERSION_CMP], [ { test "$HAVE_LIBUNISTRING" != yes \ || { dnl AS_LITERAL_IF exists and works fine since autoconf-2.59 at least. AS_LITERAL_IF([$1], [dnl This is the optimized variant, that assumes the argument is a literal: m4_pushdef([requested_version_major], [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^\([0-9]*\).*], [\1]), [])]) m4_pushdef([requested_version_minor], [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.]\([0-9]*\).*], [\1]), [$1])]) m4_pushdef([requested_version_subminor], [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.][0-9]*[.]\([0-9]*\).*], [\1]), [$1])]) test $LIBUNISTRING_VERSION_MAJOR -lt requested_version_major \ || { test $LIBUNISTRING_VERSION_MAJOR -eq requested_version_major \ && { test $LIBUNISTRING_VERSION_MINOR -lt requested_version_minor \ || { test $LIBUNISTRING_VERSION_MINOR -eq requested_version_minor \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt requested_version_subminor } } } m4_popdef([requested_version_subminor]) m4_popdef([requested_version_minor]) m4_popdef([requested_version_major]) ], [dnl This is the unoptimized variant: requested_version_major=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_major"` requested_version_minor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_minor"` requested_version_subminor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_subminor"` test $LIBUNISTRING_VERSION_MAJOR -lt $requested_version_major \ || { test $LIBUNISTRING_VERSION_MAJOR -eq $requested_version_major \ && { test $LIBUNISTRING_VERSION_MINOR -lt $requested_version_minor \ || { test $LIBUNISTRING_VERSION_MINOR -eq $requested_version_minor \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt $requested_version_subminor } } } ]) } }]) dnl gl_LIBUNISTRING_ARG_OR_ZERO([ARG], [ORIG]) expands to ARG if it is not the dnl same as ORIG, otherwise to 0. m4_define([gl_LIBUNISTRING_ARG_OR_ZERO], [m4_if([$1], [$2], [0], [$1])]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/limits-h.m4�����������������������������������������������������������0000644�0001750�0001750�00000003314�14557510506�014007� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Check whether limits.h has needed features. dnl Copyright 2016-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_DEFUN_ONCE([gl_LIMITS_H], [ gl_CHECK_NEXT_HEADERS([limits.h]) AC_CACHE_CHECK([whether limits.h has WORD_BIT, BOOL_WIDTH etc.], [gl_cv_header_limits_width], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <limits.h> long long llm = LLONG_MAX; int wb = WORD_BIT; int ullw = ULLONG_WIDTH; int bw = BOOL_WIDTH; int bm = BOOL_MAX; int mblm = MB_LEN_MAX; ]])], [gl_cv_header_limits_width=yes], [gl_cv_header_limits_width=no])]) GL_GENERATE_LIMITS_H=true AS_IF([test "$gl_cv_header_limits_width" = yes], [AC_CACHE_CHECK([whether limits.h has SSIZE_MAX], [gl_cv_header_limits_ssize_max], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#include <limits.h> #ifndef SSIZE_MAX #error "SSIZE_MAX is not defined" #endif ]])], [gl_cv_header_limits_ssize_max=yes], [gl_cv_header_limits_ssize_max=no])]) if test "$gl_cv_header_limits_ssize_max" = yes; then GL_GENERATE_LIMITS_H=false fi]) ]) dnl Unconditionally enables the replacement of <limits.h>. AC_DEFUN([gl_REPLACE_LIMITS_H], [ AC_REQUIRE([gl_LIMITS_H]) GL_GENERATE_LIMITS_H=true ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/localcharset.m4�������������������������������������������������������0000644�0001750�0001750�00000000633�14557510506�014726� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# localcharset.m4 serial 8 dnl Copyright (C) 2002, 2004, 2006, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LOCALCHARSET], [ dnl Prerequisites of lib/localcharset.c. AC_REQUIRE([AM_LANGINFO_CODESET]) ]) �����������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/locale-fr.m4����������������������������������������������������������0000644�0001750�0001750�00000030173�14557510506�014130� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-fr.m4 serial 23 dnl Copyright (C) 2003, 2005-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a french locale with traditional encoding. AC_DEFUN_ONCE([gt_LOCALE_FR], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw* | windows*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_FR=$gt_cv_locale_fr case $LOCALE_FR in #( '' | *[[[:space:]\"\$\'*@<:@]]*) dnl This locale name might cause trouble with sh or make. AC_MSG_WARN([invalid locale "$LOCALE_FR"; assuming "none"]) LOCALE_FR=none;; esac AC_SUBST([LOCALE_FR]) ]) dnl Determine the name of a french locale with UTF-8 encoding. AC_DEFUN_ONCE([gt_LOCALE_FR_UTF8], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [ case "$host_os" in *-musl* | midipix*) dnl On musl libc, all kinds of ll_CC.UTF-8 locales exist, even without dnl any locale file on disk. But they are effectively equivalent to the dnl C.UTF-8 locale, except for locale categories (such as LC_MESSSAGES) dnl for which localizations (.mo files) have been installed. gt_cv_locale_fr_utf8=fr_FR.UTF-8 ;; *) AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw* | windows*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* ;; esac ]) LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 case $LOCALE_FR_UTF8 in #( '' | *[[[:space:]\"\$\'*@<:@]]*) dnl This locale name might cause trouble with sh or make. AC_MSG_WARN([invalid locale "$LOCALE_FR_UTF8"; assuming "none"]) LOCALE_FR_UTF8=none;; esac AC_SUBST([LOCALE_FR_UTF8]) dnl Users of $LOCALE_FR_UTF8 need to know which of the locale categories they dnl can rely on. case "$host_os" in *-musl* | midipix*) dnl On musl libc, locale categories other than LC_CTYPE and LC_MESSAGES dnl are effectively unimplemented. LC_COLLATE_IMPLEMENTED=false LC_NUMERIC_IMPLEMENTED=false LC_TIME_IMPLEMENTED=false LC_MONETARY_IMPLEMENTED=false ;; *) LC_COLLATE_IMPLEMENTED=true LC_NUMERIC_IMPLEMENTED=true LC_TIME_IMPLEMENTED=true LC_MONETARY_IMPLEMENTED=true ;; esac AC_SUBST([LC_COLLATE_IMPLEMENTED]) AC_SUBST([LC_NUMERIC_IMPLEMENTED]) AC_SUBST([LC_TIME_IMPLEMENTED]) AC_SUBST([LC_MONETARY_IMPLEMENTED]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/locale-ja.m4����������������������������������������������������������0000644�0001750�0001750�00000013544�14557510506�014116� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-ja.m4 serial 18 dnl Copyright (C) 2003, 2005-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a japanese locale with EUC-JP encoding. AC_DEFUN_ONCE([gt_LOCALE_JA], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a traditional japanese locale], [gt_cv_locale_ja], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales on Cygwin 1.5.x. */ if (MB_CUR_MAX == 1) return 1; /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } return 0; #endif } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw* | windows*) # Note that on native Windows, the Japanese locale is # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we # cannot use it here. gt_cv_locale_ja=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the AIX locale name. if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP else # Test for the locale name with explicit encoding suffix. if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC-JP else # Test for the HP-UX, OSF/1, NetBSD locale name. if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.eucJP else # Test for the IRIX, FreeBSD locale name. if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC else # Test for the Solaris 7 locale name. if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja else # Special test for NetBSD 1.6. if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then gt_cv_locale_ja=ja_JP.eucJP else # None found. gt_cv_locale_ja=none fi fi fi fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_JA=$gt_cv_locale_ja case $LOCALE_JA in #( '' | *[[[:space:]\"\$\'*@<:@]]*) dnl This locale name might cause trouble with sh or make. AC_MSG_WARN([invalid locale "$LOCALE_JA"; assuming "none"]) LOCALE_JA=none;; esac AC_SUBST([LOCALE_JA]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/locale-tr.m4����������������������������������������������������������0000644�0001750�0001750�00000012436�14557510506�014150� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-tr.m4 serial 15 dnl Copyright (C) 2003, 2005-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a turkish locale with UTF-8 encoding. AC_DEFUN_ONCE([gt_LOCALE_TR_UTF8], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a turkish Unicode locale], [gt_cv_locale_tr_utf8], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> #include <wctype.h> struct tm t; char buf[16]; int main () { /* On BeOS, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. But BeOS does not implement the Turkish upper-/lowercase mappings. Therefore, let this program return 1 on BeOS. */ /* Check whether the given locale name is recognized by the system. */ #if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; #else if (setlocale (LC_ALL, "") == NULL) return 1; #endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the tr_TR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ #if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } #endif #ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; #endif /* Check whether in the abbreviation of the eighth month, the second character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f) return 1; /* Check whether the upper-/lowercase mappings are as expected for Turkish. */ if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i' || towupper(0x0131) != 'I' || towlower ('I') != 0x0131) return 1; return 0; } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw* | windows*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Turkish_Turkey.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=Turkish_Turkey.65001 else # None found. gt_cv_locale_tr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr_TR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr_TR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr.UTF-8 else # None found. gt_cv_locale_tr_utf8=none fi fi fi ;; esac else gt_cv_locale_tr_utf8=none fi rm -fr conftest* ]) LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8 case $LOCALE_TR_UTF8 in #( '' | *[[[:space:]\"\$\'*@<:@]]*) dnl This locale name might cause trouble with sh or make. AC_MSG_WARN([invalid locale "$LOCALE_TR_UTF8"; assuming "none"]) LOCALE_TR_UTF8=none;; esac AC_SUBST([LOCALE_TR_UTF8]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/locale-zh.m4����������������������������������������������������������0000644�0001750�0001750�00000013200�14557510506�014132� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-zh.m4 serial 18 dnl Copyright (C) 2003, 2005-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a chinese locale with GB18030 encoding. AC_DEFUN_ONCE([gt_LOCALE_ZH_CN], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a transitional chinese locale], [gt_cv_locale_zh_CN], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; #endif } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw* | windows*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=Chinese_China.54936 else # None found. gt_cv_locale_zh_CN=none fi ;; solaris2.8) # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. gt_cv_locale_zh_CN=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the locale name without encoding suffix. if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN else # Test for the locale name with explicit encoding suffix. if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN.GB18030 else # None found. gt_cv_locale_zh_CN=none fi fi ;; esac else # If there was a link error, due to mblen(), the system is so old that # it certainly doesn't have a chinese locale. gt_cv_locale_zh_CN=none fi rm -fr conftest* ]) LOCALE_ZH_CN=$gt_cv_locale_zh_CN case $LOCALE_ZH_CN in #( '' | *[[[:space:]\"\$\'*@<:@]]*) dnl This locale name might cause trouble with sh or make. AC_MSG_WARN([invalid locale "$LOCALE_ZH_CN"; assuming "none"]) LOCALE_ZH_CN=none;; esac AC_SUBST([LOCALE_ZH_CN]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/locale_h.m4�����������������������������������������������������������0000644�0001750�0001750�00000014032�14557510506�014026� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale_h.m4 serial 30 dnl Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_LOCALE_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_* dnl members of 'struct lconv'. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl If <stddef.h> is replaced, then <locale.h> must also be replaced. AC_REQUIRE([gl_STDDEF_H]) AC_REQUIRE([gl_LOCALE_T]) dnl Solaris 11.0 defines the int_p_*, int_n_* members of 'struct lconv' dnl only if _LCONV_C99 is defined. AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in solaris*) AC_DEFINE([_LCONV_C99], [1], [Define to 1 on Solaris.]) ;; esac AC_CACHE_CHECK([whether locale.h conforms to POSIX:2001], [gl_cv_header_locale_h_posix2001], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h> int x = LC_MESSAGES; int y = sizeof (((struct lconv *) 0)->decimal_point);]], [[]])], [gl_cv_header_locale_h_posix2001=yes], [gl_cv_header_locale_h_posix2001=no])]) dnl Check whether 'struct lconv' is complete. dnl Bionic libc's 'struct lconv' is just a dummy. dnl On OpenBSD 4.9, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, dnl mingw, MSVC 9, it lacks the int_p_* and int_n_* members. AC_CACHE_CHECK([whether struct lconv is properly defined], [gl_cv_sys_struct_lconv_ok], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h> struct lconv l; int x = sizeof (l.decimal_point); int y = sizeof (l.int_p_cs_precedes);]], [[]])], [gl_cv_sys_struct_lconv_ok=yes], [gl_cv_sys_struct_lconv_ok=no]) ]) if test $gl_cv_sys_struct_lconv_ok = no; then dnl On native Windows with MSVC, merely define these member names as macros. dnl This avoids trouble in C++ mode. case "$host_os" in windows*-msvc*) ;; mingw* | windows*) AC_EGREP_CPP([Special], [ #ifdef _MSC_VER Special #endif ], [], [REPLACE_STRUCT_LCONV=1]) ;; *) REPLACE_STRUCT_LCONV=1 ;; esac fi dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK. gl_NEXT_HEADERS([locale.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <locale.h> /* Some systems provide declarations in a non-standard header. */ #if HAVE_XLOCALE_H # include <xlocale.h> #endif ]], [setlocale newlocale duplocale freelocale]) ]) dnl Checks to determine whether the system has the locale_t type, dnl and how to obtain it. AC_DEFUN([gl_LOCALE_T], [ dnl Persuade glibc and Solaris <locale.h> to define locale_t. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Check whether use of locale_t requires inclusion of <xlocale.h>, dnl e.g. on Mac OS X 10.5. If <locale.h> does not define locale_t by dnl itself, we assume that <xlocale.h> will do so. AC_CACHE_CHECK([whether locale.h defines locale_t], [gl_cv_header_locale_has_locale_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h> locale_t x;]], [[]])], [gl_cv_header_locale_has_locale_t=yes], [gl_cv_header_locale_has_locale_t=no]) ]) dnl Check for <xlocale.h>. AC_CHECK_HEADERS_ONCE([xlocale.h]) if test $ac_cv_header_xlocale_h = yes; then HAVE_XLOCALE_H=1 if test $gl_cv_header_locale_has_locale_t = yes; then gl_cv_header_locale_h_needs_xlocale_h=no else gl_cv_header_locale_h_needs_xlocale_h=yes fi HAVE_LOCALE_T=1 else HAVE_XLOCALE_H=0 gl_cv_header_locale_h_needs_xlocale_h=no if test $gl_cv_header_locale_has_locale_t = yes; then HAVE_LOCALE_T=1 else HAVE_LOCALE_T=0 fi fi AC_SUBST([HAVE_XLOCALE_H]) ]) # gl_LOCALE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_LOCALE_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_LOCALE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_LOCALE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALECONV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE_NULL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUPLOCALE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALENAME]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) ]) AC_DEFUN([gl_LOCALE_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_NEWLOCALE=1; AC_SUBST([HAVE_NEWLOCALE]) HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE]) HAVE_FREELOCALE=1; AC_SUBST([HAVE_FREELOCALE]) REPLACE_LOCALECONV=0; AC_SUBST([REPLACE_LOCALECONV]) REPLACE_SETLOCALE=0; AC_SUBST([REPLACE_SETLOCALE]) REPLACE_NEWLOCALE=0; AC_SUBST([REPLACE_NEWLOCALE]) REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE]) REPLACE_FREELOCALE=0; AC_SUBST([REPLACE_FREELOCALE]) REPLACE_STRUCT_LCONV=0; AC_SUBST([REPLACE_STRUCT_LCONV]) LOCALENAME_ENHANCE_LOCALE_FUNCS=0; AC_SUBST([LOCALENAME_ENHANCE_LOCALE_FUNCS]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/localeconv.m4���������������������������������������������������������0000644�0001750�0001750�00000004126�14557510506�014410� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# localeconv.m4 serial 3 dnl Copyright (C) 2012-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOCALECONV], [ AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) AC_REQUIRE([gl_LOCALE_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles if test $REPLACE_STRUCT_LCONV = 1; then REPLACE_LOCALECONV=1 fi if test $REPLACE_LOCALECONV = 0; then dnl Test whether fields of type 'char' are filled correctly. dnl This test fails on mingw 5.0.3. AC_CACHE_CHECK([whether localeconv works], [gl_cv_func_localeconv_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <limits.h> int main () { struct lconv *l = localeconv (); return l->frac_digits != CHAR_MAX && l->frac_digits < 0; } ]])], [gl_cv_func_localeconv_works=yes], [gl_cv_func_localeconv_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_localeconv_works="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_localeconv_works="guessing yes" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_localeconv_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_localeconv_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_localeconv_works" in *yes) ;; *) REPLACE_LOCALECONV=1 ;; esac fi ]) # Prerequisites of lib/localeconv.c. AC_DEFUN([gl_PREREQ_LOCALECONV], [ AC_CHECK_MEMBERS([struct lconv.decimal_point], [], [], [[#include <locale.h>]]) AC_CHECK_MEMBERS([struct lconv.int_p_cs_precedes], [], [], [[#include <locale.h>]]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/localename.m4���������������������������������������������������������0000644�0001750�0001750�00000003544�14557510506�014366� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# localename.m4 serial 10 dnl Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LOCALENAME], [ AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) AC_REQUIRE([gl_LOCALE_T]) AC_REQUIRE([gt_LC_MESSAGES]) AC_REQUIRE([gt_INTL_THREAD_LOCALE_NAME]) AC_REQUIRE([gt_INTL_MACOSX]) AC_CHECK_HEADERS_ONCE([langinfo.h]) if test $HAVE_LOCALE_T = 1; then gl_CHECK_FUNCS_ANDROID([newlocale], [[#include <locale.h>]]) gl_CHECK_FUNCS_ANDROID([duplocale], [[#include <locale.h>]]) gl_CHECK_FUNCS_ANDROID([freelocale], [[#include <locale.h>]]) gl_func_newlocale="$ac_cv_func_newlocale" gl_func_duplocale="$ac_cv_func_duplocale" gl_func_freelocale="$ac_cv_func_freelocale" else dnl In 2019, some versions of z/OS lack the locale_t type and have broken dnl newlocale, duplocale, freelocale functions. gl_cv_onwards_func_newlocale='future OS version' gl_cv_onwards_func_duplocale='future OS version' gl_cv_onwards_func_freelocale='future OS version' gl_func_newlocale=no gl_func_duplocale=no gl_func_freelocale=no fi if test $gl_func_newlocale != yes; then HAVE_NEWLOCALE=0 case "$gl_cv_onwards_func_newlocale" in future*) REPLACE_NEWLOCALE=1 ;; esac fi if test $gl_func_duplocale != yes; then HAVE_DUPLOCALE=0 case "$gl_cv_onwards_func_duplocale" in future*) REPLACE_DUPLOCALE=1 ;; esac fi if test $gl_func_freelocale != yes; then HAVE_FREELOCALE=0 case "$gl_cv_onwards_func_freelocale" in future*) REPLACE_FREELOCALE=1 ;; esac fi if test $gt_localename_enhances_locale_funcs = yes; then REPLACE_NEWLOCALE=1 REPLACE_DUPLOCALE=1 REPLACE_FREELOCALE=1 fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/lock.m4���������������������������������������������������������������0000644�0001750�0001750�00000003037�14557510506�013213� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lock.m4 serial 14 dnl Copyright (C) 2005-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gl_LOCK], [ AC_REQUIRE([gl_THREADLIB]) if test "$gl_threads_api" = posix; then # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. has_rwlock=false AC_CHECK_TYPE([pthread_rwlock_t], [has_rwlock=true AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1], [Define if the POSIX multithreading library has read/write locks.])], [], [#include <pthread.h>]) if $has_rwlock; then gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. AC_COMPILE_IFELSE([ AC_LANG_PROGRAM( [[#include <pthread.h>]], [[ #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ]])], [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1], [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])]) fi gl_PREREQ_LOCK ]) # Prerequisites of lib/glthread/lock.c. AC_DEFUN([gl_PREREQ_LOCK], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/lstat.m4��������������������������������������������������������������0000644�0001750�0001750�00000005736�14557510506�013422� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 36 # Copyright (C) 1997-2001, 2003-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. AC_DEFUN([gl_FUNC_LSTAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) dnl If lstat does not exist, the replacement <sys/stat.h> does dnl "#define lstat stat", and lstat.c is a no-op. AC_CHECK_FUNCS_ONCE([lstat]) if test $ac_cv_func_lstat = yes; then AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in darwin* | solaris* | *no) REPLACE_LSTAT=1 ;; esac else HAVE_LSTAT=0 fi ]) # Prerequisites of lib/lstat.c. AC_DEFUN([gl_PREREQ_LSTAT], [:]) AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK], [ dnl We don't use AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK any more, because it dnl is no longer maintained in Autoconf and because it invokes AC_LIBOBJ. AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether lstat correctly handles trailing slash], [gl_cv_func_lstat_dereferences_slashed_symlink], [rm -f conftest.sym conftest.file echo >conftest.file AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[struct stat sbuf; if (symlink ("conftest.file", "conftest.sym") != 0) return 1; /* Linux will dereference the symlink and fail, as required by POSIX. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ]])], [gl_cv_func_lstat_dereferences_slashed_symlink=yes], [gl_cv_func_lstat_dereferences_slashed_symlink=no], [case "$host_os" in linux-* | linux) # Guess yes on Linux systems. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; midipix*) # Guess yes on systems that emulate the Linux system calls. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; *-gnu* | gnu*) # Guess yes on glibc systems. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; mingw* | windows*) # Guess no on native Windows. gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; *) # If we don't know, obey --enable-cross-guesses. gl_cv_func_lstat_dereferences_slashed_symlink="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.sym conftest.file ]) case "$gl_cv_func_lstat_dereferences_slashed_symlink" in *yes) AC_DEFINE_UNQUOTED([LSTAT_FOLLOWS_SLASHED_SYMLINK], [1], [Define to 1 if 'lstat' dereferences a symlink specified with a trailing slash.]) ;; esac ]) ����������������������������������gnuastro-0.22/bootstrapped/m4/ltoptions.m4����������������������������������������������������������0000644�0001750�0001750�00000034275�14557510427�014330� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free # Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/ltsugar.m4������������������������������������������������������������0000644�0001750�0001750�00000010453�14557510427�013746� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/ltversion.m4����������������������������������������������������������0000644�0001750�0001750�00000001352�14557510427�014310� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation, # Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4249 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.7.4-1ec8f-dirty]) m4_define([LT_PACKAGE_REVISION], [2.4.7.4]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.7.4-1ec8f-dirty' macro_revision='2.4.7.4' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/lt~obsolete.m4��������������������������������������������������������0000644�0001750�0001750�00000014007�14557510427�014636� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free # Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/malloc.m4�������������������������������������������������������������0000644�0001750�0001750�00000013626�14557510506�013537� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# malloc.m4 serial 31 dnl Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # This is adapted with modifications from upstream Autoconf here: # https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n949 AC_DEFUN([_AC_FUNC_MALLOC_IF], [ AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CACHE_CHECK([whether malloc (0) returns nonnull], [ac_cv_func_malloc_0_nonnull], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[void *p = malloc (0); void * volatile vp = p; int result = !vp; free (p); return result;]]) ], [ac_cv_func_malloc_0_nonnull=yes], [ac_cv_func_malloc_0_nonnull=no], [case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midipix* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | windows* | msys* ) ac_cv_func_malloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac ]) ]) AS_CASE([$ac_cv_func_malloc_0_nonnull], [*yes], [$1], [$2]) ])# _AC_FUNC_MALLOC_IF # gl_FUNC_MALLOC_GNU # ------------------ # Replace malloc if it is not compatible with GNU libc. AC_DEFUN([gl_FUNC_MALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) REPLACE_MALLOC_FOR_MALLOC_GNU="$REPLACE_MALLOC_FOR_MALLOC_POSIX" if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 0; then _AC_FUNC_MALLOC_IF([], [REPLACE_MALLOC_FOR_MALLOC_GNU=1]) fi ]) # gl_FUNC_MALLOC_PTRDIFF # ---------------------- # Test whether malloc (N) reliably fails when N exceeds PTRDIFF_MAX, # and replace malloc otherwise. AC_DEFUN([gl_FUNC_MALLOC_PTRDIFF], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_PTRDIFF]) test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC_FOR_MALLOC_POSIX=1 ]) # Test whether malloc, realloc, calloc refuse to create objects # larger than what can be expressed in ptrdiff_t. # Set gl_cv_func_malloc_gnu to yes or no accordingly. AC_DEFUN([gl_CHECK_MALLOC_PTRDIFF], [ AC_CACHE_CHECK([whether malloc is ptrdiff_t safe], [gl_cv_malloc_ptrdiff], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdint.h> ]], [[/* 64-bit ptrdiff_t is so wide that no practical platform can exceed it. */ #define WIDE_PTRDIFF (PTRDIFF_MAX >> 31 >> 31 != 0) /* On rare machines where size_t fits in ptrdiff_t there is no problem. */ #define NARROW_SIZE (SIZE_MAX <= PTRDIFF_MAX) /* glibc 2.30 and later malloc refuses to exceed ptrdiff_t bounds even on 32-bit platforms. We don't know which non-glibc systems are safe. */ #define KNOWN_SAFE (2 < __GLIBC__ + (30 <= __GLIBC_MINOR__)) #if WIDE_PTRDIFF || NARROW_SIZE || KNOWN_SAFE return 0; #else #error "malloc might not be ptrdiff_t safe" syntax error #endif ]])], [gl_cv_malloc_ptrdiff=yes], [gl_cv_malloc_ptrdiff=no]) ]) ]) # gl_FUNC_MALLOC_POSIX # -------------------- # Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it # fails, and doesn't mess up with ptrdiff_t overflow), and replace # malloc if it is not. AC_DEFUN([gl_FUNC_MALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_PTRDIFF]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) if test "$gl_cv_func_malloc_posix" = yes; then AC_DEFINE([HAVE_MALLOC_POSIX], [1], [Define if malloc, realloc, and calloc set errno on allocation failure.]) else REPLACE_MALLOC_FOR_MALLOC_POSIX=1 fi ]) # Test whether malloc, realloc, calloc set errno to ENOMEM on failure. # Set gl_cv_func_malloc_posix to yes or no accordingly. AC_DEFUN([gl_CHECK_MALLOC_POSIX], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether malloc, realloc, calloc set errno on failure], [gl_cv_func_malloc_posix], [ dnl It is too dangerous to try to allocate a large amount of memory: dnl some systems go to their knees when you do that. So assume that dnl all Unix implementations of the function set errno on failure, dnl except on those platforms where we have seen 'test-malloc-gnu', dnl 'test-realloc-gnu', 'test-calloc-gnu' fail. case "$host_os" in mingw* | windows*) gl_cv_func_malloc_posix=no ;; irix* | solaris*) dnl On IRIX 6.5, the three functions return NULL with errno unset dnl when the argument is larger than PTRDIFF_MAX. dnl On Solaris 11.3, the three functions return NULL with errno set dnl to EAGAIN, not ENOMEM, when the argument is larger than dnl PTRDIFF_MAX. dnl Here is a test program: m4_divert_push([KILL]) #include <errno.h> #include <stdio.h> #include <stdlib.h> #define ptrdiff_t long #ifndef PTRDIFF_MAX # define PTRDIFF_MAX ((ptrdiff_t) ((1UL << (8 * sizeof (ptrdiff_t) - 1)) - 1)) #endif int main () { void *p; fprintf (stderr, "PTRDIFF_MAX = %lu\n", (unsigned long) PTRDIFF_MAX); errno = 0; p = malloc ((unsigned long) PTRDIFF_MAX + 1); fprintf (stderr, "p=%p errno=%d\n", p, errno); errno = 0; p = calloc (PTRDIFF_MAX / 2 + 1, 2); fprintf (stderr, "p=%p errno=%d\n", p, errno); errno = 0; p = realloc (NULL, (unsigned long) PTRDIFF_MAX + 1); fprintf (stderr, "p=%p errno=%d\n", p, errno); return 0; } m4_divert_pop([KILL]) gl_cv_func_malloc_posix=no ;; *) gl_cv_func_malloc_posix=yes ;; esac ]) ]) ����������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/malloca.m4������������������������������������������������������������0000644�0001750�0001750�00000001033�14557510506�013665� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# malloca.m4 serial 2 dnl Copyright (C) 2003-2004, 2006-2007, 2009-2024 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MALLOCA], [ dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables dnl @ALLOCA@ and @LTALLOCA@. dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies. AC_REQUIRE([gl_EEMALLOC]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/math_h.m4�������������������������������������������������������������0000644�0001750�0001750�00000052234�14557510506�013526� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# math_h.m4 serial 126 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_MATH_H], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([math.h]) AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[/* Solaris 10 has a broken definition of NAN. Other platforms fail to provide NAN, or provide it only in C99 mode; this test only needs to fail when NAN is provided but wrong. */ float f = 1.0f; #ifdef NAN f = NAN; #endif return f == 0;]])], [gl_cv_header_math_nan_works=yes], [gl_cv_header_math_nan_works=no])]) if test $gl_cv_header_math_nan_works = no; then REPLACE_NAN=1 fi AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[/* Solaris 10 has a broken definition of HUGE_VAL. */ double d = HUGE_VAL; return d == 0;]])], [gl_cv_header_math_huge_val_works=yes], [gl_cv_header_math_huge_val_works=no])]) if test $gl_cv_header_math_huge_val_works = no; then REPLACE_HUGE_VAL=1 fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <math.h>]], [acosf acosl asinf asinl atanf atanl cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf expf expl exp2 exp2f exp2l expm1 expm1f expm1l fabsf fabsl floorf floorl fma fmaf fmal fmod fmodf fmodl frexpf frexpl hypotf hypotl ilogb ilogbf ilogbl ldexpf ldexpl log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l logb logbf logbl modf modff modfl powf remainder remainderf remainderl rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl tanf tanl tanhf totalorder totalorderf totalorderl trunc truncf truncl]) ]) # gl_MATH_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_MATH_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_MATH_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_MATH_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_MATH_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACOSF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACOSL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ASINF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ASINL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATANL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATAN2F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEIL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEILF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEILL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGNF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGNL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSHF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2L]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1L]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FABSF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FABSL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOOR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOORF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOORL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMA]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMAF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMAL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMODF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMODL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXPF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXPL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGBF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGBL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISFINITE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISINF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNAN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNAND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10L]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1P]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1PF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1PL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2L]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGBF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGBL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODFF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODFL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POWF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDERF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDERL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUNDF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUNDL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGNBIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINHF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SQRTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SQRTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANHF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TOTALORDER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TOTALORDERF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TOTALORDERL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCL]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_J0], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_J1], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_JN], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_Y0], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_Y1], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_YN], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_MATH_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) ]) AC_DEFUN([gl_MATH_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF]) HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL]) HAVE_ASINF=1; AC_SUBST([HAVE_ASINF]) HAVE_ASINL=1; AC_SUBST([HAVE_ASINL]) HAVE_ATANF=1; AC_SUBST([HAVE_ATANF]) HAVE_ATANL=1; AC_SUBST([HAVE_ATANL]) HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F]) HAVE_CBRT=1; AC_SUBST([HAVE_CBRT]) HAVE_CBRTF=1; AC_SUBST([HAVE_CBRTF]) HAVE_CBRTL=1; AC_SUBST([HAVE_CBRTL]) HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN]) HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL]) HAVE_COSF=1; AC_SUBST([HAVE_COSF]) HAVE_COSL=1; AC_SUBST([HAVE_COSL]) HAVE_COSHF=1; AC_SUBST([HAVE_COSHF]) HAVE_EXPF=1; AC_SUBST([HAVE_EXPF]) HAVE_EXPL=1; AC_SUBST([HAVE_EXPL]) HAVE_EXPM1=1; AC_SUBST([HAVE_EXPM1]) HAVE_EXPM1F=1; AC_SUBST([HAVE_EXPM1F]) HAVE_FABSF=1; AC_SUBST([HAVE_FABSF]) HAVE_FABSL=1; AC_SUBST([HAVE_FABSL]) HAVE_FMA=1; AC_SUBST([HAVE_FMA]) HAVE_FMAF=1; AC_SUBST([HAVE_FMAF]) HAVE_FMAL=1; AC_SUBST([HAVE_FMAL]) HAVE_FMODF=1; AC_SUBST([HAVE_FMODF]) HAVE_FMODL=1; AC_SUBST([HAVE_FMODL]) HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF]) HAVE_HYPOTF=1; AC_SUBST([HAVE_HYPOTF]) HAVE_HYPOTL=1; AC_SUBST([HAVE_HYPOTL]) HAVE_ILOGB=1; AC_SUBST([HAVE_ILOGB]) HAVE_ILOGBF=1; AC_SUBST([HAVE_ILOGBF]) HAVE_ILOGBL=1; AC_SUBST([HAVE_ILOGBL]) HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF]) HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND]) HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL]) HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF]) HAVE_LOGF=1; AC_SUBST([HAVE_LOGF]) HAVE_LOGL=1; AC_SUBST([HAVE_LOGL]) HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F]) HAVE_LOG10L=1; AC_SUBST([HAVE_LOG10L]) HAVE_LOG1P=1; AC_SUBST([HAVE_LOG1P]) HAVE_LOG1PF=1; AC_SUBST([HAVE_LOG1PF]) HAVE_LOG1PL=1; AC_SUBST([HAVE_LOG1PL]) HAVE_LOGBF=1; AC_SUBST([HAVE_LOGBF]) HAVE_LOGBL=1; AC_SUBST([HAVE_LOGBL]) HAVE_MODFF=1; AC_SUBST([HAVE_MODFF]) HAVE_MODFL=1; AC_SUBST([HAVE_MODFL]) HAVE_POWF=1; AC_SUBST([HAVE_POWF]) HAVE_REMAINDER=1; AC_SUBST([HAVE_REMAINDER]) HAVE_REMAINDERF=1; AC_SUBST([HAVE_REMAINDERF]) HAVE_RINT=1; AC_SUBST([HAVE_RINT]) HAVE_RINTL=1; AC_SUBST([HAVE_RINTL]) HAVE_SINF=1; AC_SUBST([HAVE_SINF]) HAVE_SINL=1; AC_SUBST([HAVE_SINL]) HAVE_SINHF=1; AC_SUBST([HAVE_SINHF]) HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF]) HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL]) HAVE_TANF=1; AC_SUBST([HAVE_TANF]) HAVE_TANL=1; AC_SUBST([HAVE_TANL]) HAVE_TANHF=1; AC_SUBST([HAVE_TANHF]) HAVE_TOTALORDER=1; AC_SUBST([HAVE_TOTALORDER]) HAVE_TOTALORDERF=1; AC_SUBST([HAVE_TOTALORDERF]) HAVE_TOTALORDERL=1; AC_SUBST([HAVE_TOTALORDERL]) HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL]) HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL]) HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL]) HAVE_DECL_CBRTF=1; AC_SUBST([HAVE_DECL_CBRTF]) HAVE_DECL_CBRTL=1; AC_SUBST([HAVE_DECL_CBRTL]) HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF]) HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL]) HAVE_DECL_COPYSIGNF=1; AC_SUBST([HAVE_DECL_COPYSIGNF]) HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL]) HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL]) HAVE_DECL_EXP2=1; AC_SUBST([HAVE_DECL_EXP2]) HAVE_DECL_EXP2F=1; AC_SUBST([HAVE_DECL_EXP2F]) HAVE_DECL_EXP2L=1; AC_SUBST([HAVE_DECL_EXP2L]) HAVE_DECL_EXPM1L=1; AC_SUBST([HAVE_DECL_EXPM1L]) HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF]) HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL]) HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL]) HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL]) HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL]) HAVE_DECL_LOG10L=1; AC_SUBST([HAVE_DECL_LOG10L]) HAVE_DECL_LOG2=1; AC_SUBST([HAVE_DECL_LOG2]) HAVE_DECL_LOG2F=1; AC_SUBST([HAVE_DECL_LOG2F]) HAVE_DECL_LOG2L=1; AC_SUBST([HAVE_DECL_LOG2L]) HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB]) HAVE_DECL_REMAINDER=1; AC_SUBST([HAVE_DECL_REMAINDER]) HAVE_DECL_REMAINDERL=1; AC_SUBST([HAVE_DECL_REMAINDERL]) HAVE_DECL_RINTF=1; AC_SUBST([HAVE_DECL_RINTF]) HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND]) HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF]) HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL]) HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL]) HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL]) HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL]) HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC]) HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF]) HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL]) REPLACE_ACOSF=0; AC_SUBST([REPLACE_ACOSF]) REPLACE_ASINF=0; AC_SUBST([REPLACE_ASINF]) REPLACE_ATANF=0; AC_SUBST([REPLACE_ATANF]) REPLACE_ATAN2F=0; AC_SUBST([REPLACE_ATAN2F]) REPLACE_CBRTF=0; AC_SUBST([REPLACE_CBRTF]) REPLACE_CBRTL=0; AC_SUBST([REPLACE_CBRTL]) REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL]) REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF]) REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL]) REPLACE_COSF=0; AC_SUBST([REPLACE_COSF]) REPLACE_COSHF=0; AC_SUBST([REPLACE_COSHF]) REPLACE_EXPF=0; AC_SUBST([REPLACE_EXPF]) REPLACE_EXPL=0; AC_SUBST([REPLACE_EXPL]) REPLACE_EXPM1=0; AC_SUBST([REPLACE_EXPM1]) REPLACE_EXPM1F=0; AC_SUBST([REPLACE_EXPM1F]) REPLACE_EXPM1L=0; AC_SUBST([REPLACE_EXPM1L]) REPLACE_EXP2=0; AC_SUBST([REPLACE_EXP2]) REPLACE_EXP2L=0; AC_SUBST([REPLACE_EXP2L]) REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL]) REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR]) REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF]) REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL]) REPLACE_FMA=0; AC_SUBST([REPLACE_FMA]) REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF]) REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL]) REPLACE_FMOD=0; AC_SUBST([REPLACE_FMOD]) REPLACE_FMODF=0; AC_SUBST([REPLACE_FMODF]) REPLACE_FMODL=0; AC_SUBST([REPLACE_FMODL]) REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF]) REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP]) REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL]) REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL]) REPLACE_HYPOT=0; AC_SUBST([REPLACE_HYPOT]) REPLACE_HYPOTF=0; AC_SUBST([REPLACE_HYPOTF]) REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL]) REPLACE_ILOGB=0; AC_SUBST([REPLACE_ILOGB]) REPLACE_ILOGBF=0; AC_SUBST([REPLACE_ILOGBF]) REPLACE_ILOGBL=0; AC_SUBST([REPLACE_ILOGBL]) REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE]) REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF]) REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN]) REPLACE_LDEXP=0; AC_SUBST([REPLACE_LDEXP]) REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL]) REPLACE_LOG=0; AC_SUBST([REPLACE_LOG]) REPLACE_LOGF=0; AC_SUBST([REPLACE_LOGF]) REPLACE_LOGL=0; AC_SUBST([REPLACE_LOGL]) REPLACE_LOG10=0; AC_SUBST([REPLACE_LOG10]) REPLACE_LOG10F=0; AC_SUBST([REPLACE_LOG10F]) REPLACE_LOG10L=0; AC_SUBST([REPLACE_LOG10L]) REPLACE_LOG1P=0; AC_SUBST([REPLACE_LOG1P]) REPLACE_LOG1PF=0; AC_SUBST([REPLACE_LOG1PF]) REPLACE_LOG1PL=0; AC_SUBST([REPLACE_LOG1PL]) REPLACE_LOG2=0; AC_SUBST([REPLACE_LOG2]) REPLACE_LOG2F=0; AC_SUBST([REPLACE_LOG2F]) REPLACE_LOG2L=0; AC_SUBST([REPLACE_LOG2L]) REPLACE_LOGB=0; AC_SUBST([REPLACE_LOGB]) REPLACE_LOGBF=0; AC_SUBST([REPLACE_LOGBF]) REPLACE_LOGBL=0; AC_SUBST([REPLACE_LOGBL]) REPLACE_MODF=0; AC_SUBST([REPLACE_MODF]) REPLACE_MODFF=0; AC_SUBST([REPLACE_MODFF]) REPLACE_MODFL=0; AC_SUBST([REPLACE_MODFL]) REPLACE_NAN=0; AC_SUBST([REPLACE_NAN]) REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER]) REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF]) REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL]) REPLACE_RINTL=0; AC_SUBST([REPLACE_RINTL]) REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND]) REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF]) REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL]) REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT]) REPLACE_SIGNBIT_USING_BUILTINS=0; AC_SUBST([REPLACE_SIGNBIT_USING_BUILTINS]) REPLACE_SINF=0; AC_SUBST([REPLACE_SINF]) REPLACE_SINHF=0; AC_SUBST([REPLACE_SINHF]) REPLACE_SQRTF=0; AC_SUBST([REPLACE_SQRTF]) REPLACE_SQRTL=0; AC_SUBST([REPLACE_SQRTL]) REPLACE_TANF=0; AC_SUBST([REPLACE_TANF]) REPLACE_TANHF=0; AC_SUBST([REPLACE_TANHF]) REPLACE_TOTALORDER=0; AC_SUBST([REPLACE_TOTALORDER]) REPLACE_TOTALORDERF=0; AC_SUBST([REPLACE_TOTALORDERF]) REPLACE_TOTALORDERL=0; AC_SUBST([REPLACE_TOTALORDERL]) REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC]) REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF]) REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL]) ]) # gl_LONG_DOUBLE_VS_DOUBLE # determines whether 'long double' and 'double' have the same representation. # Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines # HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly. # The currently known platforms where this is the case are: # Linux/HPPA, NetBSD/sparc32, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9. AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE], [ AC_CACHE_CHECK([whether long double and double are the same], [gl_cv_long_double_equals_double], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <float.h>]], [[typedef int check[sizeof (long double) == sizeof (double) && LDBL_MANT_DIG == DBL_MANT_DIG && LDBL_MAX_EXP == DBL_MAX_EXP && LDBL_MIN_EXP == DBL_MIN_EXP ? 1 : -1]; ]])], [gl_cv_long_double_equals_double=yes], [gl_cv_long_double_equals_double=no]) ]) if test $gl_cv_long_double_equals_double = yes; then AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1], [Define to 1 if 'long double' and 'double' have the same representation.]) HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 else HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 fi AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/mbchar.m4�������������������������������������������������������������0000644�0001750�0001750�00000000653�14557510506�013520� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbchar.m4 serial 9 dnl Copyright (C) 2005-2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl autoconf tests required for use of mbchar.m4 dnl From Bruno Haible. AC_DEFUN([gl_MBCHAR], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) ]) �������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/mbiter.m4�������������������������������������������������������������0000644�0001750�0001750�00000000642�14557510506�013544� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbiter.m4 serial 7 dnl Copyright (C) 2005, 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl autoconf tests required for use of mbiter.h dnl From Bruno Haible. AC_DEFUN([gl_MBITER], [ AC_REQUIRE([AC_TYPE_MBSTATE_T]) : ]) ����������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/mbrtoc32.m4�����������������������������������������������������������0000644�0001750�0001750�00000020537�14557510506�013722� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbrtoc32.m4 serial 18 dnl Copyright (C) 2014-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBRTOC32], [ AC_REQUIRE([gl_UCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) dnl Determine REPLACE_MBSTATE_T, from which GNULIB_defined_mbstate_t is dnl determined. It describes how our overridden mbrtowc is implemented. dnl We then implement mbrtoc32 accordingly. AC_REQUIRE([gl_MBSTATE_T_BROKEN]) AC_REQUIRE([gl_TYPE_CHAR32_T]) AC_REQUIRE([gl_MBRTOC32_SANITYCHECK]) AC_REQUIRE([gl_CHECK_FUNC_MBRTOC32]) if test $gl_cv_func_mbrtoc32 = no; then HAVE_MBRTOC32=0 else if test $GNULIBHEADERS_OVERRIDE_CHAR32_T = 1 || test $REPLACE_MBSTATE_T = 1; then REPLACE_MBRTOC32=1 else gl_MBRTOC32_EMPTY_INPUT gl_MBRTOC32_C_LOCALE case "$gl_cv_func_mbrtoc32_empty_input" in *yes) ;; *) AC_DEFINE([MBRTOC32_EMPTY_INPUT_BUG], [1], [Define if the mbrtoc32 function does not return (size_t) -2 for empty input.]) REPLACE_MBRTOC32=1 ;; esac case "$gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ" in *yes) ;; *) AC_DEFINE([MBRTOC32_IN_C_LOCALE_MAYBE_EILSEQ], [1], [Define if the mbrtoc32 function may signal encoding errors in the C locale.]) REPLACE_MBRTOC32=1 ;; esac fi if test $HAVE_WORKING_MBRTOC32 = 0; then REPLACE_MBRTOC32=1 fi fi ]) AC_DEFUN([gl_CHECK_FUNC_MBRTOC32], [ dnl Cf. gl_CHECK_FUNCS_ANDROID AC_CHECK_DECL([mbrtoc32], , , [[#ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> ]]) if test $ac_cv_have_decl_mbrtoc32 = yes; then dnl We can't use AC_CHECK_FUNC here, because mbrtoc32() is defined as a dnl static inline function on Haiku 2020. AC_CACHE_CHECK([for mbrtoc32], [gl_cv_func_mbrtoc32], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> ]], [[char32_t c; return mbrtoc32 (&c, "", 1, NULL) == 0; ]]) ], [gl_cv_func_mbrtoc32=yes], [gl_cv_func_mbrtoc32=no]) ]) else gl_cv_func_mbrtoc32=no fi ]) dnl Test whether mbrtoc32 returns the correct value on empty input. AC_DEFUN([gl_MBRTOC32_EMPTY_INPUT], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtoc32 works on empty input], [gl_cv_func_mbrtoc32_empty_input], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> static char32_t wc; static mbstate_t mbs; int main (void) { return mbrtoc32 (&wc, "", 0, &mbs) != (size_t) -2; }]])], [gl_cv_func_mbrtoc32_empty_input=yes], [gl_cv_func_mbrtoc32_empty_input=no], [case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_func_mbrtoc32_empty_input="guessing no" ;; # Guess no on Android. linux*-android*) gl_cv_func_mbrtoc32_empty_input="guessing no" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_mbrtoc32_empty_input="guessing no" ;; *) gl_cv_func_mbrtoc32_empty_input="guessing yes" ;; esac ]) ]) ]) dnl <https://pubs.opengroup.org/onlinepubs/9699919799/functions/mbrtowc.html> dnl POSIX:2018 says regarding mbrtowc: "In the POSIX locale an [EILSEQ] error dnl cannot occur since all byte values are valid characters." It is reasonable dnl to expect mbrtoc32 to behave in the same way. AC_DEFUN([gl_MBRTOC32_C_LOCALE], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether the C locale is free of encoding errors], [gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <limits.h> #include <locale.h> #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> ]], [[ int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; char32_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtoc32 (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ]])], [gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ=yes], [gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ=no], [case "$host_os" in # Guess yes on native Windows. mingw* | windows*) gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ="guessing yes" ;; *) gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ="$gl_cross_guess_normal" ;; esac ]) ]) ]) dnl Test whether mbrtoc32 works not worse than mbrtowc. dnl Result is HAVE_WORKING_MBRTOC32. AC_DEFUN([gl_MBRTOC32_SANITYCHECK], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_TYPE_CHAR32_T]) AC_REQUIRE([gl_CHECK_FUNC_MBRTOC32]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles if test $GNULIBHEADERS_OVERRIDE_CHAR32_T = 1 || test $gl_cv_func_mbrtoc32 = no; then HAVE_WORKING_MBRTOC32=0 else AC_CACHE_CHECK([whether mbrtoc32 works as well as mbrtowc], [gl_cv_func_mbrtoc32_sanitycheck], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on FreeBSD, Solaris, native Windows. freebsd* | midnightbsd* | solaris* | mingw* | windows*) gl_cv_func_mbrtoc32_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtoc32_sanitycheck="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none || test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> int main () { int result = 0; /* This fails on native Windows: mbrtoc32 returns (size_t)-1. mbrtowc returns 1 (correct). */ if (strcmp ("$LOCALE_FR", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR") != NULL) { mbstate_t state; wchar_t wc = (wchar_t) 0xBADFACE; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\374", 1, &state) == 1) { char32_t c32 = (wchar_t) 0xBADFACE; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtoc32 (&c32, "\374", 1, &state) != 1) result |= 1; } } /* This fails on FreeBSD 13.0 and Solaris 11.4: mbrtoc32 returns (size_t)-2 or (size_t)-1. mbrtowc returns 4 (correct). */ if (strcmp ("$LOCALE_ZH_CN", "none") != 0 && setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; wchar_t wc = (wchar_t) 0xBADFACE; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\224\071\375\067", 4, &state) == 4) { char32_t c32 = (wchar_t) 0xBADFACE; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtoc32 (&c32, "\224\071\375\067", 4, &state) != 4) result |= 2; } } return result; }]])], [gl_cv_func_mbrtoc32_sanitycheck=yes], [gl_cv_func_mbrtoc32_sanitycheck=no], [:]) fi ]) case "$gl_cv_func_mbrtoc32_sanitycheck" in *yes) HAVE_WORKING_MBRTOC32=1 AC_DEFINE([HAVE_WORKING_MBRTOC32], [1], [Define if the mbrtoc32 function basically works.]) ;; *) HAVE_WORKING_MBRTOC32=0 ;; esac fi AC_SUBST([HAVE_WORKING_MBRTOC32]) ]) # Prerequisites of lib/mbrtoc32.c and lib/lc-charset-dispatch.c. AC_DEFUN([gl_PREREQ_MBRTOC32], [ : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/mbrtowc.m4������������������������������������������������������������0000644�0001750�0001750�00000056463�14557510506�013753� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbrtowc.m4 serial 44 -*- coding: utf-8 -*- dnl Copyright (C) 2001-2002, 2004-2005, 2008-2024 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBRTOWC], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([gl_PTHREADLIB]) AC_CHECK_HEADERS_ONCE([threads.h]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([mbrtowc]) if test $ac_cv_func_mbrtowc = no; then HAVE_MBRTOWC=0 AC_CHECK_DECLS([mbrtowc],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_mbrtowc = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares mbrtowc() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_MBRTOWC=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBRTOWC=1 else gl_MBRTOWC_NULL_ARG1 gl_MBRTOWC_NULL_ARG2 gl_MBRTOWC_RETVAL gl_MBRTOWC_NUL_RETVAL gl_MBRTOWC_STORES_INCOMPLETE gl_MBRTOWC_EMPTY_INPUT gl_MBRTOWC_C_LOCALE case "$gl_cv_func_mbrtowc_null_arg1" in *yes) ;; *) AC_DEFINE([MBRTOWC_NULL_ARG1_BUG], [1], [Define if the mbrtowc function has the NULL pwc argument bug.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_null_arg2" in *yes) ;; *) AC_DEFINE([MBRTOWC_NULL_ARG2_BUG], [1], [Define if the mbrtowc function has the NULL string argument bug.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_retval" in *yes) ;; *) AC_DEFINE([MBRTOWC_RETVAL_BUG], [1], [Define if the mbrtowc function returns a wrong return value.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_nul_retval" in *yes) ;; *) AC_DEFINE([MBRTOWC_NUL_RETVAL_BUG], [1], [Define if the mbrtowc function does not return 0 for a NUL character.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_stores_incomplete" in *no) ;; *) AC_DEFINE([MBRTOWC_STORES_INCOMPLETE_BUG], [1], [Define if the mbrtowc function stores a wide character when reporting incomplete input.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_empty_input" in *yes) ;; *) AC_DEFINE([MBRTOWC_EMPTY_INPUT_BUG], [1], [Define if the mbrtowc function does not return (size_t) -2 for empty input.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) ;; *) AC_DEFINE([MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ], [1], [Define if the mbrtowc function may signal encoding errors in the C locale.]) REPLACE_MBRTOWC=1 ;; esac fi fi if test $REPLACE_MBSTATE_T = 1; then case "$host_os" in mingw* | windows*) MBRTOWC_LIB= ;; *) gl_WEAK_SYMBOLS case "$gl_cv_have_weak" in *yes) MBRTOWC_LIB= ;; *) MBRTOWC_LIB="$LIBPTHREAD" ;; esac ;; esac else MBRTOWC_LIB= fi dnl MBRTOWC_LIB is expected to be '-pthread' or '-lpthread' on AIX dnl with gcc or xlc, and empty otherwise. AC_SUBST([MBRTOWC_LIB]) dnl For backward compatibility. LIB_MBRTOWC="$MBRTOWC_LIB" AC_SUBST([LIB_MBRTOWC]) ]) dnl Test whether mbsinit() and mbrtowc() need to be overridden in a way that dnl redefines the semantics of the given mbstate_t type. dnl Result is REPLACE_MBSTATE_T. dnl When this is set to 1, we replace both mbsinit() and mbrtowc(), in order to dnl avoid inconsistencies. AC_DEFUN_ONCE([gl_MBSTATE_T_BROKEN], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_CHECK_FUNCS_ONCE([mbsinit]) AC_CHECK_FUNCS_ONCE([mbrtowc]) dnl On native Windows, we know exactly how mbsinit() behaves and don't need dnl to override it, even if - like on MSVC - mbsinit() is only defined as dnl an inline function, not as a global function. if case "$host_os" in mingw* | windows*) true ;; *) test $ac_cv_func_mbsinit = yes ;; esac \ && test $ac_cv_func_mbrtowc = yes; then gl_MBRTOWC_INCOMPLETE_STATE gl_MBRTOWC_SANITYCHECK REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi ]) dnl Test whether mbrtowc puts the state into non-initial state when parsing an dnl incomplete multibyte character. dnl Result is gl_cv_func_mbrtowc_incomplete_state. AC_DEFUN([gl_MBRTOWC_INCOMPLETE_STATE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles incomplete characters], [gl_cv_func_mbrtowc_incomplete_state], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_JA != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_incomplete_state=yes], [gl_cv_func_mbrtowc_incomplete_state=no], [:]) else if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_incomplete_state=yes], [gl_cv_func_mbrtowc_incomplete_state=no], [:]) fi fi ]) ]) dnl Test whether mbrtowc works not worse than mbtowc. dnl Result is gl_cv_func_mbrtowc_sanitycheck. AC_DEFUN([gl_MBRTOWC_SANITYCHECK], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc works as well as mbtowc], [gl_cv_func_mbrtowc_sanitycheck], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_sanitycheck=yes], [gl_cv_func_mbrtowc_sanitycheck=no], [:]) fi ]) ]) dnl Test whether mbrtowc supports a NULL pwc argument correctly. dnl Result is gl_cv_func_mbrtowc_null_arg1. AC_DEFUN([gl_MBRTOWC_NULL_ARG1], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles a NULL pwc argument], [gl_cv_func_mbrtowc_null_arg1], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "\303\237er"; mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 5, &state); if (ret != 2) result |= 1; if (!mbsinit (&state)) result |= 2; memset (&state, '\0', sizeof (mbstate_t)); ret = mbrtowc (NULL, input, 5, &state); if (ret != 2) /* Solaris 7 fails here: ret is -1. */ result |= 4; if (!mbsinit (&state)) result |= 8; } return result; }]])], [gl_cv_func_mbrtowc_null_arg1=yes], [gl_cv_func_mbrtowc_null_arg1=no], [:]) fi ]) ]) dnl Test whether mbrtowc supports a NULL string argument correctly. dnl Result is gl_cv_func_mbrtowc_null_arg2. AC_DEFUN([gl_MBRTOWC_NULL_ARG2], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles a NULL string argument], [gl_cv_func_mbrtowc_null_arg2], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on OSF/1. osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { mbstate_t state; wchar_t wc; int ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; mbrtowc (&wc, NULL, 5, &state); /* Check that wc was not modified. */ if (wc != (wchar_t) 0xBADFACE) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_null_arg2=yes], [gl_cv_func_mbrtowc_null_arg2=no], [:]) fi ]) ]) dnl Test whether mbrtowc, when parsing the end of a multibyte character, dnl correctly returns the number of bytes that were needed to complete the dnl character (not the total number of bytes of the multibyte character). dnl Result is gl_cv_func_mbrtowc_retval. AC_DEFUN([gl_MBRTOWC_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether mbrtowc has a correct return value], [gl_cv_func_mbrtowc_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on HP-UX, Solaris, native Windows. hpux* | solaris* | mingw* | windows*) gl_cv_func_mbrtowc_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ || { case "$host_os" in mingw* | windows*) true;; *) false;; esac; }; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; int found_some_locale = 0; /* This fails on Solaris. */ if (strcmp ("$LOCALE_FR_UTF8", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 1) result |= 1; } found_some_locale = 1; } /* This fails on HP-UX 11.11. */ if (strcmp ("$LOCALE_JA", "none") != 0 && setlocale (LC_ALL, "$LOCALE_JA") != NULL) { char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 2) result |= 2; } found_some_locale = 1; } /* This fails on native Windows. */ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 4; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 8; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 16; } found_some_locale = 1; } return (found_some_locale ? result : 77); }]])], [gl_cv_func_mbrtowc_retval=yes], [if test $? != 77; then gl_cv_func_mbrtowc_retval=no fi ], [:]) fi ]) ]) dnl Test whether mbrtowc, when parsing a NUL character, correctly returns 0. dnl Result is gl_cv_func_mbrtowc_nul_retval. AC_DEFUN([gl_MBRTOWC_NUL_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc returns 0 when parsing a NUL character], [gl_cv_func_mbrtowc_nul_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris 8 and 9. solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8 and 9. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "", 1, &state) != 0) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_nul_retval=yes], [gl_cv_func_mbrtowc_nul_retval=no], [:]) fi ]) ]) dnl Test whether mbrtowc stores a wide character when reporting incomplete dnl input. AC_DEFUN([gl_MBRTOWC_STORES_INCOMPLETE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc stores incomplete characters], [gl_cv_func_mbrtowc_stores_incomplete], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess yes on native Windows. mingw* | windows*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" ;; *) gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;; esac changequote([,])dnl case "$host_os" in mingw* | windows*) AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "French_France.65001") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 1; } if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\226", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 2; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\245", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 4; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\261", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 8; } return result; }]])], [gl_cv_func_mbrtowc_stores_incomplete=no], [gl_cv_func_mbrtowc_stores_incomplete=yes], [:]) ;; *) AC_REQUIRE([gt_LOCALE_FR_UTF8]) if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) return 1; } return 0; }]])], [gl_cv_func_mbrtowc_stores_incomplete=no], [gl_cv_func_mbrtowc_stores_incomplete=yes], [:]) fi ;; esac ]) ]) dnl Test whether mbrtowc returns the correct value on empty input. AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc works on empty input], [gl_cv_func_mbrtowc_empty_input], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> static wchar_t wc; static mbstate_t mbs; int main (void) { return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; }]])], [gl_cv_func_mbrtowc_empty_input=yes], [gl_cv_func_mbrtowc_empty_input=no], [case "$host_os" in # Guess no on AIX and glibc systems. aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; # Guess no on Android. linux*-android*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; esac ]) ]) ]) dnl Test whether mbrtowc reports encoding errors in the C locale. dnl Although POSIX was never intended to allow this, the GNU C Library dnl and other implementations do it. See: dnl https://sourceware.org/bugzilla/show_bug.cgi?id=19932 dnl POSIX has now clarified it: dnl <https://pubs.opengroup.org/onlinepubs/9699919799/functions/mbrtowc.html> dnl says: "In the POSIX locale an [EILSEQ] error cannot occur since all byte dnl values are valid characters." AC_DEFUN([gl_MBRTOWC_C_LOCALE], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether the C locale is free of encoding errors], [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <limits.h> #include <locale.h> #include <wchar.h> ]], [[ int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; wchar_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtowc (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ]])], [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes], [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=no], [case "$host_os" in # Guess yes on native Windows. mingw* | windows*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;; *) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" ;; esac ]) ]) ]) # Prerequisites of lib/mbrtowc.c and lib/lc-charset-dispatch.c. AC_DEFUN([gl_PREREQ_MBRTOWC], [ AC_REQUIRE([AC_C_INLINE]) : ]) # Prerequisites of lib/mbtowc-lock.c. AC_DEFUN([gl_PREREQ_MBTOWC_LOCK], [ gl_VISIBILITY ]) dnl From Paul Eggert dnl This is an override of an autoconf macro. AC_DEFUN([AC_FUNC_MBRTOWC], [ dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60. AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared], [gl_cv_func_mbrtowc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h>]], [[wchar_t wc; char const s[] = ""; size_t n = 1; mbstate_t state; return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])], [gl_cv_func_mbrtowc=yes], [gl_cv_func_mbrtowc=no])]) if test $gl_cv_func_mbrtowc = yes; then AC_DEFINE([HAVE_MBRTOWC], [1], [Define to 1 if mbrtowc and mbstate_t are properly declared.]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/mbsinit.m4������������������������������������������������������������0000644�0001750�0001750�00000002415�14557510506�013727� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbsinit.m4 serial 10 dnl Copyright (C) 2008, 2010-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBSINIT], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([mbsinit]) if test $ac_cv_func_mbsinit = no; then HAVE_MBSINIT=0 AC_CHECK_DECLS([mbsinit],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_mbsinit = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares mbsinit() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_MBSINIT=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBSINIT=1 else dnl On mingw, mbsinit() always returns 1, which is inappropriate for dnl states produced by mbrtowc() for an incomplete multibyte character dnl in multibyte locales. case "$host_os" in mingw* | windows*) REPLACE_MBSINIT=1 ;; esac fi fi ]) # Prerequisites of lib/mbsinit.c. AC_DEFUN([gl_PREREQ_MBSINIT], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/mbstate_t.m4����������������������������������������������������������0000644�0001750�0001750�00000002210�14557510506�014235� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbstate_t.m4 serial 14 dnl Copyright (C) 2000-2002, 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # From Paul Eggert. # BeOS 5 has <wchar.h> but does not define mbstate_t, # so you can't declare an object of that type. # Check for this incompatibility with Standard C. # AC_TYPE_MBSTATE_T # ----------------- AC_DEFUN([AC_TYPE_MBSTATE_T], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl for HP-UX 11.11 AC_CACHE_CHECK([for mbstate_t], [ac_cv_type_mbstate_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT[ #include <wchar.h>]], [[mbstate_t x; return sizeof x;]])], [ac_cv_type_mbstate_t=yes], [ac_cv_type_mbstate_t=no])]) if test $ac_cv_type_mbstate_t = yes; then AC_DEFINE([HAVE_MBSTATE_T], [1], [Define to 1 if <wchar.h> declares mbstate_t.]) else AC_DEFINE([mbstate_t], [int], [Define to a type if <wchar.h> does not define.]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/mbtowc.m4�������������������������������������������������������������0000644�0001750�0001750�00000001251�14557510506�013552� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbtowc.m4 serial 5 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBTOWC], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) gl_CHECK_FUNCS_ANDROID([mbtowc], [[#include <stdlib.h>]]) if test $ac_cv_func_mbtowc = no; then HAVE_MBTOWC=0 case "$gl_cv_onwards_func_mbtowc" in future*) REPLACE_MBTOWC=1 ;; esac else if false; then REPLACE_MBTOWC=1 fi fi ]) # Prerequisites of lib/mbtowc.c. AC_DEFUN([gl_PREREQ_MBTOWC], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/memchr.m4�������������������������������������������������������������0000644�0001750�0001750�00000006534�14557510506�013543� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memchr.m4 serial 19 dnl Copyright (C) 2002-2004, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_FUNC_MEMCHR], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) # Detect platform-specific bugs in some versions of glibc: # memchr should not dereference anything with length 0 # https://bugzilla.redhat.com/show_bug.cgi?id=499689 # memchr should not dereference overestimated length after a match # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 # https://sourceware.org/bugzilla/show_bug.cgi?id=10162 # memchr should cast the second argument to 'unsigned char'. # This bug exists in Android 4.3. # Assume that memchr works on platforms that lack mprotect. AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <string.h> #if HAVE_SYS_MMAN_H # include <fcntl.h> # include <unistd.h> # include <sys/types.h> # include <sys/mman.h> # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif ]], [[ int result = 0; char *fence = NULL; #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) fence = two_pages + pagesize; } #endif if (fence) { /* Test against bugs on glibc systems. */ if (memchr (fence, 0, 0)) result |= 1; strcpy (fence - 9, "12345678"); if (memchr (fence - 9, 0, 79) != fence - 1) result |= 2; if (memchr (fence - 1, 0, 3) != fence - 1) result |= 4; /* Test against bug on AIX 7.2. */ if (memchr (fence - 4, '6', 16) != fence - 4) result |= 8; } /* Test against bug on Android 4.3. */ { char input[3]; input[0] = 'a'; input[1] = 'b'; input[2] = 'c'; if (memchr (input, 0x789abc00 | 'b', 3) != input + 1) result |= 16; } return result; ]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], [case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_memchr_works="guessing no" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_memchr_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_memchr_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_memchr_works" in *yes) ;; *) REPLACE_MEMCHR=1 ;; esac ]) # Prerequisites of lib/memchr.c. AC_DEFUN([gl_PREREQ_MEMCHR], [ AC_CHECK_HEADERS([bp-sym.h]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/memmove.m4������������������������������������������������������������0000644�0001750�0001750�00000000641�14557510506�013726� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memmove.m4 serial 4 dnl Copyright (C) 2002, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMMOVE], [ AC_CHECK_FUNCS([memmove]) ]) # Prerequisites of lib/memmove.c. AC_DEFUN([gl_PREREQ_MEMMOVE], [ : ]) �����������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/mempcpy.m4������������������������������������������������������������0000644�0001750�0001750�00000001527�14557510506�013737� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mempcpy.m4 serial 14 dnl Copyright (C) 2003-2004, 2006-2007, 2009-2024 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMPCPY], [ dnl Persuade glibc <string.h> to declare mempcpy(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl The mempcpy() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) gl_CHECK_FUNCS_ANDROID([mempcpy], [[#include <string.h>]]) if test $ac_cv_func_mempcpy = no; then HAVE_MEMPCPY=0 case "$gl_cv_onwards_func_mempcpy" in future*) REPLACE_MEMPCPY=1 ;; esac fi ]) # Prerequisites of lib/mempcpy.c. AC_DEFUN([gl_PREREQ_MEMPCPY], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/memrchr.m4������������������������������������������������������������0000644�0001750�0001750�00000001244�14557510506�013716� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memrchr.m4 serial 11 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2024 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMRCHR], [ dnl Persuade glibc <string.h> to declare memrchr(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([memrchr]) if test $ac_cv_have_decl_memrchr = no; then HAVE_DECL_MEMRCHR=0 fi AC_CHECK_FUNCS([memrchr]) ]) # Prerequisites of lib/memrchr.c. AC_DEFUN([gl_PREREQ_MEMRCHR], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/minmax.m4�������������������������������������������������������������0000644�0001750�0001750�00000002455�14557510506�013557� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# minmax.m4 serial 4 dnl Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.53]) AC_DEFUN([gl_MINMAX], [ AC_REQUIRE([gl_PREREQ_MINMAX]) ]) # Prerequisites of lib/minmax.h. AC_DEFUN([gl_PREREQ_MINMAX], [ gl_MINMAX_IN_HEADER([limits.h]) gl_MINMAX_IN_HEADER([sys/param.h]) ]) dnl gl_MINMAX_IN_HEADER(HEADER) dnl The parameter has to be a literal header name; it cannot be macro, dnl nor a shell variable. (Because autoheader collects only AC_DEFINE dnl invocations with a literal macro name.) AC_DEFUN([gl_MINMAX_IN_HEADER], [ m4_pushdef([header], AS_TR_SH([$1])) m4_pushdef([HEADER], AS_TR_CPP([$1])) AC_CACHE_CHECK([whether <$1> defines MIN and MAX], [gl_cv_minmax_in_]header, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <$1> int x = MIN (42, 17);]], [[]])], [gl_cv_minmax_in_]header[=yes], [gl_cv_minmax_in_]header[=no])]) if test $gl_cv_minmax_in_[]header = yes; then AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1, [Define to 1 if <$1> defines the MIN and MAX macros.]) fi m4_popdef([HEADER]) m4_popdef([header]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/mktime.m4�������������������������������������������������������������0000644�0001750�0001750�00000021653�14557510506�013555� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 39 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2024 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. AC_DEFUN([gl_TIME_T_IS_SIGNED], [ AC_CACHE_CHECK([whether time_t is signed], [gl_cv_time_t_is_signed], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <time.h> char time_t_signed[(time_t) -1 < 0 ? 1 : -1];]])], [gl_cv_time_t_is_signed=yes], [gl_cv_time_t_is_signed=no])]) if test $gl_cv_time_t_is_signed = yes; then AC_DEFINE([TIME_T_IS_SIGNED], [1], [Define to 1 if time_t is signed.]) fi ]) dnl Test whether mktime works. Set gl_cv_func_working_mktime. AC_DEFUN([gl_FUNC_MKTIME_WORKS], [ AC_REQUIRE([gl_TIME_T_IS_SIGNED]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl We don't use AC_FUNC_MKTIME any more, because it is no longer maintained dnl in Autoconf and because it invokes AC_LIBOBJ. AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_DECLS_ONCE([alarm]) AC_REQUIRE([gl_MULTIARCH]) AC_CACHE_CHECK([for working mktime], [gl_cv_func_working_mktime], [if test $APPLE_UNIVERSAL_BUILD = 1; then # A universal build on Apple Mac OS X platforms. # The test result would be 'yes' in 32-bit mode and 'no' in 64-bit mode. # But we need a configuration result that is valid in both modes. gl_cv_func_working_mktime="guessing no" else AC_RUN_IFELSE( [AC_LANG_SOURCE( [[/* Test program from Paul Eggert and Tony Leneis. */ #include <limits.h> #include <stdlib.h> #include <time.h> #ifdef HAVE_UNISTD_H # include <unistd.h> #endif #if HAVE_DECL_ALARM # include <signal.h> #endif ]GL_MDA_DEFINES[ #ifndef TIME_T_IS_SIGNED # define TIME_T_IS_SIGNED 0 #endif static time_t time_t_max; static time_t time_t_min; /* Values we'll use to set the TZ environment variable. */ static char *tz_strings[] = { (char *) 0, "TZ=GMT0", "TZ=JST-9", "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00" }; #define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0])) /* Return 0 if mktime fails to convert a date in the spring-forward gap. Based on a problem report from Andreas Jaeger. */ static int spring_forward_gap () { /* glibc (up to about 1998-10-07) failed this test. */ struct tm tm; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ if (putenv ("TZ=PST8PDT,M4.1.0,M10.5.0") != 0) return -1; tm.tm_year = 98; tm.tm_mon = 3; tm.tm_mday = 5; tm.tm_hour = 2; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; return mktime (&tm) != (time_t) -1; } static int mktime_test1 (time_t now) { struct tm *lt; return ! (lt = localtime (&now)) || mktime (lt) == now; } static int mktime_test (time_t now) { return (mktime_test1 (now) && mktime_test1 ((time_t) (time_t_max - now)) && mktime_test1 ((time_t) (time_t_min + now))); } static int irix_6_4_bug () { /* Based on code from Ariel Faigon. */ struct tm tm; tm.tm_year = 96; tm.tm_mon = 3; tm.tm_mday = 0; tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; mktime (&tm); return tm.tm_mon == 2 && tm.tm_mday == 31; } static int bigtime_test (int j) { struct tm tm; time_t now; tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j; now = mktime (&tm); if (now != (time_t) -1) { struct tm *lt = localtime (&now); if (! (lt && lt->tm_year == tm.tm_year && lt->tm_mon == tm.tm_mon && lt->tm_mday == tm.tm_mday && lt->tm_hour == tm.tm_hour && lt->tm_min == tm.tm_min && lt->tm_sec == tm.tm_sec && lt->tm_yday == tm.tm_yday && lt->tm_wday == tm.tm_wday && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst) == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst)))) return 0; } return 1; } static int year_2050_test () { /* The correct answer for 2050-02-01 00:00:00 in Pacific time, ignoring leap seconds. */ unsigned long int answer = 2527315200UL; struct tm tm; time_t t; tm.tm_year = 2050 - 1900; tm.tm_mon = 2 - 1; tm.tm_mday = 1; tm.tm_hour = tm.tm_min = tm.tm_sec = 0; tm.tm_isdst = -1; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ if (putenv ("TZ=PST8PDT,M4.1.0,M10.5.0") != 0) return -1; t = mktime (&tm); /* Check that the result is either a failure, or close enough to the correct answer that we can assume the discrepancy is due to leap seconds. */ return (t == (time_t) -1 || (0 < t && answer - 120 <= t && t <= answer + 120)); } static int indiana_test () { if (putenv ("TZ=America/Indiana/Indianapolis") != 0) return -1; struct tm tm; tm.tm_year = 1986 - 1900; tm.tm_mon = 4 - 1; tm.tm_mday = 28; tm.tm_hour = 16; tm.tm_min = 24; tm.tm_sec = 50; tm.tm_isdst = 0; time_t std = mktime (&tm); if (! (std == 515107490 || std == 515107503)) return 1; /* This platform supports TZDB, either without or with leap seconds. Return true if GNU Bug#48085 is absent. */ tm.tm_isdst = 1; time_t dst = mktime (&tm); return std - dst == 60 * 60; } int main () { int result = 0; time_t t, delta; int i, j; int time_t_signed_magnitude = (time_t) ~ (time_t) 0 < (time_t) -1; #if HAVE_DECL_ALARM /* This test makes some buggy mktime implementations loop. Give up after 60 seconds; a mktime slower than that isn't worth using anyway. */ signal (SIGALRM, SIG_DFL); alarm (60); #endif time_t_max = (! TIME_T_IS_SIGNED ? (time_t) -1 : ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1) * 2 + 1)); time_t_min = (! TIME_T_IS_SIGNED ? (time_t) 0 : time_t_signed_magnitude ? ~ (time_t) 0 : ~ time_t_max); delta = time_t_max / 997; /* a suitable prime number */ for (i = 0; i < N_STRINGS; i++) { if (tz_strings[i]) putenv (tz_strings[i]); for (t = 0; t <= time_t_max - delta && (result & 1) == 0; t += delta) if (! mktime_test (t)) result |= 1; if ((result & 2) == 0 && ! (mktime_test ((time_t) 1) && mktime_test ((time_t) (60 * 60)) && mktime_test ((time_t) (60 * 60 * 24)))) result |= 2; for (j = 1; (result & 4) == 0; j <<= 1) { if (! bigtime_test (j)) result |= 4; if (INT_MAX / 2 < j) break; } if ((result & 8) == 0 && ! bigtime_test (INT_MAX)) result |= 8; } if (! irix_6_4_bug ()) result |= 16; if (! spring_forward_gap ()) result |= 32; if (! year_2050_test () || ! indiana_test ()) result |= 64; return result; }]])], [gl_cv_func_working_mktime=yes], [gl_cv_func_working_mktime=no], [case "$host_os" in # Guess no on native Windows. mingw* | windows*) gl_cv_func_working_mktime="guessing no" ;; *) gl_cv_func_working_mktime="$gl_cross_guess_normal" ;; esac ]) fi ]) ]) dnl Main macro of module 'mktime'. AC_DEFUN([gl_FUNC_MKTIME], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) if test "$gl_cv_func_working_mktime" != yes; then REPLACE_MKTIME=1 AC_DEFINE([NEED_MKTIME_WORKING], [1], [Define if the compilation of mktime.c should define 'mktime' with the algorithmic workarounds.]) fi case "$host_os" in mingw* | windows*) REPLACE_MKTIME=1 AC_DEFINE([NEED_MKTIME_WINDOWS], [1], [Define if the compilation of mktime.c should define 'mktime' with the native Windows TZ workaround.]) ;; esac ]) dnl Main macro of module 'mktime-internal'. AC_DEFUN([gl_FUNC_MKTIME_INTERNAL], [ AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) WANT_MKTIME_INTERNAL=0 dnl BeOS has __mktime_internal in libc, but other platforms don't. AC_CHECK_FUNC([__mktime_internal], [AC_DEFINE([mktime_internal], [__mktime_internal], [Define to the real name of the mktime_internal function.]) ], [dnl mktime works but it doesn't export __mktime_internal, dnl so we need to substitute our own mktime implementation. WANT_MKTIME_INTERNAL=1 AC_DEFINE([NEED_MKTIME_INTERNAL], [1], [Define if the compilation of mktime.c should define 'mktime_internal'.]) ]) ]) # Prerequisites of lib/mktime.c. AC_DEFUN([gl_PREREQ_MKTIME], [:]) �������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/mmap-anon.m4����������������������������������������������������������0000644�0001750�0001750�00000003747�14557510506�014156� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mmap-anon.m4 serial 12 dnl Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Detect how mmap can be used to create anonymous (not file-backed) memory # mappings. # - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS # and MAP_ANON exist and have the same value. # - On HP-UX, only MAP_ANONYMOUS exists. # - On Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, only MAP_ANON exists. # - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be # used. AC_DEFUN_ONCE([gl_FUNC_MMAP_ANON], [ dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no]) # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then AC_MSG_CHECKING([for MAP_ANONYMOUS]) AC_EGREP_CPP([I cannot identify this map], [ #include <sys/mman.h> #ifdef MAP_ANONYMOUS I cannot identify this map #endif ], [gl_have_mmap_anonymous=yes]) if test $gl_have_mmap_anonymous != yes; then AC_EGREP_CPP([I cannot identify this map], [ #include <sys/mman.h> #ifdef MAP_ANON I cannot identify this map #endif ], [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON], [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.]) gl_have_mmap_anonymous=yes]) fi AC_MSG_RESULT([$gl_have_mmap_anonymous]) if test $gl_have_mmap_anonymous = yes; then AC_DEFINE([HAVE_MAP_ANONYMOUS], [1], [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including config.h and <sys/mman.h>.]) fi fi ]) �������������������������gnuastro-0.22/bootstrapped/m4/mode_t.m4�������������������������������������������������������������0000644�0001750�0001750�00000002342�14557510506�013530� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mode_t.m4 serial 2 dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # For using mode_t, it's sufficient to use AC_TYPE_MODE_T and # include <sys/types.h>. # Define PROMOTED_MODE_T to the type that is the result of "default argument # promotion" (ISO C 6.5.2.2.(6)) of the type mode_t. AC_DEFUN([gl_PROMOTED_TYPE_MODE_T], [ AC_REQUIRE([AC_TYPE_MODE_T]) AC_CACHE_CHECK([for promoted mode_t type], [gl_cv_promoted_mode_t], [ dnl Assume mode_t promotes to 'int' if and only if it is smaller than 'int', dnl and to itself otherwise. This assumption is not guaranteed by the ISO C dnl standard, but we don't know of any real-world counterexamples. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>]], [[typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];]])], [gl_cv_promoted_mode_t='int'], [gl_cv_promoted_mode_t='mode_t']) ]) AC_DEFINE_UNQUOTED([PROMOTED_MODE_T], [$gl_cv_promoted_mode_t], [Define to the type that is the result of default argument promotions of type mode_t.]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/msvc-inval.m4���������������������������������������������������������0000644�0001750�0001750�00000001334�14557510506�014340� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# msvc-inval.m4 serial 1 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MSVC_INVAL], [ AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler]) if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1], [Define to 1 on MSVC platforms that have the "invalid parameter handler" concept.]) else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/msvc-nothrow.m4�������������������������������������������������������0000644�0001750�0001750�00000000530�14557510506�014724� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# msvc-nothrow.m4 serial 1 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MSVC_NOTHROW], [ AC_REQUIRE([gl_MSVC_INVAL]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/multiarch.m4����������������������������������������������������������0000644�0001750�0001750�00000004220�14557510506�014246� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# multiarch.m4 serial 9 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Determine whether the compiler is or may be producing universal binaries. # # On Mac OS X 10.5 and later systems, the user can create libraries and # executables that work on multiple system types--known as "fat" or # "universal" binaries--by specifying multiple '-arch' options to the # compiler but only a single '-arch' option to the preprocessor. Like # this: # # ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CPP="gcc -E" CXXCPP="g++ -E" # # Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly. AC_DEFUN_ONCE([gl_MULTIARCH], [ dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. AC_CACHE_CHECK([whether the compiler produces multi-arch binaries], [gl_cv_c_multiarch], [gl_cv_c_multiarch=no AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; ]])], [ dnl Check for potential -arch flags. It is not universal unless dnl there are at least two -arch flags with different values. arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64 | arm | arm64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done ]) ]) if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi AC_SUBST([APPLE_UNIVERSAL_BUILD]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/musl.m4���������������������������������������������������������������0000644�0001750�0001750�00000001233�14557510506�013237� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# musl.m4 serial 4 dnl Copyright (C) 2019-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Test for musl libc, despite the musl libc authors don't like it # <https://wiki.musl-libc.org/faq.html> # <https://lists.gnu.org/archive/html/bug-gnulib/2018-02/msg00079.html>. # From Bruno Haible. AC_DEFUN_ONCE([gl_MUSL_LIBC], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in *-musl* | midipix*) AC_DEFINE([MUSL_LIBC], [1], [Define to 1 on musl libc.]) ;; esac ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/nan-mips.m4�����������������������������������������������������������0000644�0001750�0001750�00000006557�14557510506�014017� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nan-mips.m4 serial 1 dnl Copyright (C) 2023-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Extra meta-info mentioned by lib/snan.h. AC_DEFUN_ONCE([gl_NAN_MIPS], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_cpu" in mips*) AC_CACHE_CHECK([whether the NaN float encoding is IEEE 754-2008 compliant], [gl_cv_nan2008_f], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ float volatile zero; /* Assume 'float' has 32 bits, i.e. IEEE single-float. */ union { float value; unsigned int word; } qnan; ]], [[qnan.value = zero / zero; return !((qnan.word >> 22) & 1); ]]) ], [gl_cv_nan2008_f=yes], [gl_cv_nan2008_f=no], [gl_cv_nan2008_f="guessing no"]) ]) case "$gl_cv_nan2008_f" in *yes) gl_mips_nan2008_f=1 ;; *) gl_mips_nan2008_f=0 ;; esac AC_DEFINE_UNQUOTED([MIPS_NAN2008_FLOAT], [$gl_mips_nan2008_f], [Define to 1 if the encoding of NaN 'float's is as in IEEE 754-2008 § 6.2.1.]) AC_CACHE_CHECK([whether the NaN double encoding is IEEE 754-2008 compliant], [gl_cv_nan2008_d], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ double volatile zero; /* Assume 'double' has 64 bits, i.e. IEEE double-float. */ union { double value; unsigned long long word; } qnan; ]], [[qnan.value = zero / zero; return !((qnan.word >> 51) & 1); ]]) ], [gl_cv_nan2008_d=yes], [gl_cv_nan2008_d=no], [gl_cv_nan2008_d="guessing no"]) ]) case "$gl_cv_nan2008_d" in *yes) gl_mips_nan2008_d=1 ;; *) gl_mips_nan2008_d=0 ;; esac AC_DEFINE_UNQUOTED([MIPS_NAN2008_DOUBLE], [$gl_mips_nan2008_d], [Define to 1 if the encoding of NaN 'double's is as in IEEE 754-2008 § 6.2.1.]) AC_CACHE_CHECK([whether the NaN long double encoding is IEEE 754-2008 compliant], [gl_cv_nan2008_l], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <float.h> long double volatile zero; #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { long double value; unsigned int word[NWORDS]; } qnan; ]], [[qnan.value = zero / zero; #if defined _MIPSEB /* equivalent: __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ */ return !((qnan.word[0] >> ((LDBL_MANT_DIG - 2) % 32)) & 1); #else return !((qnan.word[NWORDS - 1] >> ((LDBL_MANT_DIG - 2) % 32)) & 1); #endif ]]) ], [gl_cv_nan2008_l=yes], [gl_cv_nan2008_l=no], [gl_cv_nan2008_l="guessing no"]) ]) case "$gl_cv_nan2008_l" in *yes) gl_mips_nan2008_l=1 ;; *) gl_mips_nan2008_l=0 ;; esac AC_DEFINE_UNQUOTED([MIPS_NAN2008_LONG_DOUBLE], [$gl_mips_nan2008_l], [Define to 1 if the encoding of NaN 'long double's is as in IEEE 754-2008 § 6.2.1.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/nanosleep.m4����������������������������������������������������������0000644�0001750�0001750�00000011527�14557510506�014252� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 46 dnl From Jim Meyering. dnl Check for the nanosleep function. dnl If not found, use the supplied replacement. dnl # Copyright (C) 1999-2001, 2003-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_NANOSLEEP], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc and Solaris <time.h> to declare nanosleep. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([alarm]) gl_saved_LIBS=$LIBS # Solaris 2.5.1 needs -lposix4 to get the nanosleep function. # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. NANOSLEEP_LIB= AC_SUBST([NANOSLEEP_LIB]) AC_SEARCH_LIBS([nanosleep], [rt posix4], [test "$ac_cv_search_nanosleep" = "none required" || NANOSLEEP_LIB=$ac_cv_search_nanosleep]) if test "x$ac_cv_search_nanosleep" != xno; then dnl The system has a nanosleep function. AC_REQUIRE([gl_MULTIARCH]) if test $APPLE_UNIVERSAL_BUILD = 1; then # A universal build on Apple Mac OS X platforms. # The test result would be 'no (mishandles large arguments)' in 64-bit # mode but 'yes' in 32-bit mode. But we need a configuration result that # is valid in both modes. gl_cv_func_nanosleep='no (mishandles large arguments)' fi AC_CACHE_CHECK([for working nanosleep], [gl_cv_func_nanosleep], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <errno.h> #include <limits.h> #include <signal.h> #include <time.h> #include <unistd.h> #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) #if HAVE_DECL_ALARM static void check_for_SIGALRM (int sig) { if (sig != SIGALRM) _exit (1); } #endif int main () { static struct timespec ts_sleep; static struct timespec ts_remaining; /* Test for major problems first. */ if (! nanosleep) return 2; ts_sleep.tv_sec = 0; ts_sleep.tv_nsec = 1; #if HAVE_DECL_ALARM { static struct sigaction act; act.sa_handler = check_for_SIGALRM; sigemptyset (&act.sa_mask); sigaction (SIGALRM, &act, NULL); alarm (1); if (nanosleep (&ts_sleep, NULL) != 0) return 3; /* Test for a minor problem: the handling of large arguments. */ ts_sleep.tv_sec = TYPE_MAXIMUM (time_t); ts_sleep.tv_nsec = 999999999; alarm (1); if (nanosleep (&ts_sleep, &ts_remaining) != -1) return 4; if (errno != EINTR) return 5; if (ts_remaining.tv_sec <= TYPE_MAXIMUM (time_t) - 10) return 6; } #else /* A simpler test for native Windows. */ if (nanosleep (&ts_sleep, &ts_remaining) < 0) return 3; /* Test for 32-bit mingw bug: negative nanosecond values do not cause failure. */ ts_sleep.tv_sec = 1; ts_sleep.tv_nsec = -1; if (nanosleep (&ts_sleep, &ts_remaining) != -1) return 7; #endif return 0; }]])], [gl_cv_func_nanosleep=yes], [case $? in 4|5|6) gl_cv_func_nanosleep='no (mishandles large arguments)' ;; 7) gl_cv_func_nanosleep='no (mishandles negative tv_nsec)' ;; *) gl_cv_func_nanosleep=no ;; esac], [case "$host_os" in # Guess it halfway works when the kernel is Linux. linux*) gl_cv_func_nanosleep='guessing no (mishandles large arguments)' ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_nanosleep='guessing no' ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_nanosleep="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_nanosleep" in *yes) ;; *) REPLACE_NANOSLEEP=1 case "$gl_cv_func_nanosleep" in *"mishandles large arguments"*) AC_DEFINE([HAVE_BUG_BIG_NANOSLEEP], [1], [Define to 1 if nanosleep mishandles large arguments.]) ;; esac ;; esac else HAVE_NANOSLEEP=0 fi LIBS=$gl_saved_LIBS # For backward compatibility. LIB_NANOSLEEP="$NANOSLEEP_LIB" AC_SUBST([LIB_NANOSLEEP]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/netinet_in_h.m4�������������������������������������������������������0000644�0001750�0001750�00000001753�14557510506�014731� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# netinet_in_h.m4 serial 6 dnl Copyright (C) 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_HEADER_NETINET_IN], [ AC_CACHE_CHECK([whether <netinet/in.h> is self-contained], [gl_cv_header_netinet_in_h_selfcontained], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netinet/in.h>]], [[]])], [gl_cv_header_netinet_in_h_selfcontained=yes], [gl_cv_header_netinet_in_h_selfcontained=no]) ]) if test $gl_cv_header_netinet_in_h_selfcontained = yes; then GL_GENERATE_NETINET_IN_H=false else GL_GENERATE_NETINET_IN_H=true AC_CHECK_HEADERS([netinet/in.h]) gl_CHECK_NEXT_HEADERS([netinet/in.h]) if test $ac_cv_header_netinet_in_h = yes; then HAVE_NETINET_IN_H=1 else HAVE_NETINET_IN_H=0 fi AC_SUBST([HAVE_NETINET_IN_H]) fi ]) ���������������������gnuastro-0.22/bootstrapped/m4/nl_langinfo.m4��������������������������������������������������������0000644�0001750�0001750�00000005474�14557510506�014560� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nl_langinfo.m4 serial 11 dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_NL_LANGINFO], [ AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) AC_REQUIRE([gl_LANGINFO_H]) gl_CHECK_FUNCS_ANDROID([nl_langinfo], [[#include <langinfo.h>]]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_FUNC_SETLOCALE_NULL]) AC_REQUIRE([gl_PTHREADLIB]) AC_CHECK_HEADERS_ONCE([threads.h]) if test $ac_cv_func_nl_langinfo = yes; then # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken. AC_CACHE_CHECK([whether YESEXPR works], [gl_cv_func_nl_langinfo_yesexpr_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> ]], [[return !*nl_langinfo(YESEXPR); ]])], [gl_cv_func_nl_langinfo_yesexpr_works=yes], [gl_cv_func_nl_langinfo_yesexpr_works=no], [ case "$host_os" in # Guess no on irix systems. irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";; # Guess yes elsewhere. *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";; esac ]) ]) case $gl_cv_func_nl_langinfo_yesexpr_works in *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;; *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;; esac AC_DEFINE_UNQUOTED([FUNC_NL_LANGINFO_YESEXPR_WORKS], [$FUNC_NL_LANGINFO_YESEXPR_WORKS], [Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string.]) # On Solaris 10 and Solaris 11.3, nl_langinfo is not multithread-safe. case "$host_os" in solaris*) NL_LANGINFO_MTSAFE=0 ;; *) NL_LANGINFO_MTSAFE=1 ;; esac AC_DEFINE_UNQUOTED([NL_LANGINFO_MTSAFE], [$NL_LANGINFO_MTSAFE], [Define to 1 if nl_langinfo is multithread-safe.]) if test $HAVE_LANGINFO_CODESET = 1 \ && test $HAVE_LANGINFO_T_FMT_AMPM = 1 \ && test $HAVE_LANGINFO_ALTMON = 1 \ && test $HAVE_LANGINFO_ERA = 1 \ && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1 \ && test $NL_LANGINFO_MTSAFE = 1; then : else REPLACE_NL_LANGINFO=1 AC_DEFINE([REPLACE_NL_LANGINFO], [1], [Define if nl_langinfo exists but is overridden by gnulib.]) fi else HAVE_NL_LANGINFO=0 case "$gl_cv_onwards_func_nl_langinfo" in future*) REPLACE_NL_LANGINFO=1 ;; esac fi if test $HAVE_NL_LANGINFO = 0 || test $HAVE_LANGINFO_CODESET = 0; then LIB_NL_LANGINFO="$SETLOCALE_NULL_LIB" else LIB_NL_LANGINFO= fi dnl LIB_NL_LANGINFO is expected to be empty everywhere. AC_SUBST([LIB_NL_LANGINFO]) ]) # Prerequisites of lib/nl_langinfo-lock.c. AC_DEFUN([gl_PREREQ_NL_LANGINFO_LOCK], [ gl_VISIBILITY ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/nocrash.m4������������������������������������������������������������0000644�0001750�0001750�00000010555�14557510506�013723� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nocrash.m4 serial 5 dnl Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Based on libsigsegv, from Bruno Haible and Paolo Bonzini. AC_PREREQ([2.13]) dnl Expands to some code for use in .c programs that will cause the configure dnl test to exit instead of crashing. This is useful to avoid triggering dnl action from a background debugger and to avoid core dumps. dnl Usage: ... dnl ]GL_NOCRASH[ dnl ... dnl int main() { nocrash_init(); ... } AC_DEFUN([GL_NOCRASH],[[ #include <stdlib.h> #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include <mach/mach.h> #include <mach/mach_error.h> #include <mach/thread_status.h> #include <mach/exception.h> #include <mach/task.h> #include <pthread.h> /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif defined _WIN32 && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winerror.h> static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include <signal.h> #include <unistd.h> /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif ]]) ���������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/nproc.m4��������������������������������������������������������������0000644�0001750�0001750�00000003530�14557510506�013402� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nproc.m4 serial 6 dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_NPROC], [ gl_PREREQ_NPROC ]) # Prerequisites of lib/nproc.c. AC_DEFUN([gl_PREREQ_NPROC], [ dnl Persuade glibc <sched.h> to declare CPU_SETSIZE, CPU_ISSET etc. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS([sys/pstat.h sys/sysmp.h sys/param.h],,, [AC_INCLUDES_DEFAULT]) dnl <sys/sysctl.h> requires <sys/param.h> on OpenBSD 4.0. AC_CHECK_HEADERS([sys/sysctl.h],,, [AC_INCLUDES_DEFAULT #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif ]) AC_CHECK_FUNCS([sched_getaffinity_np pstat_getdynamic sysmp sysctl]) gl_CHECK_FUNCS_ANDROID([sched_getaffinity], [[#include <sched.h>]]) dnl Test whether sched_getaffinity has the expected declaration. dnl glibc 2.3.[0-2]: dnl int sched_getaffinity (pid_t, unsigned int, unsigned long int *); dnl glibc 2.3.3: dnl int sched_getaffinity (pid_t, cpu_set_t *); dnl glibc >= 2.3.4: dnl int sched_getaffinity (pid_t, size_t, cpu_set_t *); if test $ac_cv_func_sched_getaffinity = yes; then AC_CACHE_CHECK([for glibc compatible sched_getaffinity], [gl_cv_func_sched_getaffinity3], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #include <sched.h>]], [[sched_getaffinity (0, 0, (cpu_set_t *) 0);]])], [gl_cv_func_sched_getaffinity3=yes], [gl_cv_func_sched_getaffinity3=no]) ]) if test $gl_cv_func_sched_getaffinity3 = yes; then AC_DEFINE([HAVE_SCHED_GETAFFINITY_LIKE_GLIBC], [1], [Define to 1 if sched_getaffinity has a glibc compatible declaration.]) fi fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/off_t.m4��������������������������������������������������������������0000644�0001750�0001750�00000001006�14557510506�013352� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# off_t.m4 serial 1 dnl Copyright (C) 2012-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check whether to override the 'off_t' type. dnl Set WINDOWS_64_BIT_OFF_T. AC_DEFUN([gl_TYPE_OFF_T], [ m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_OFF_T=0 ]) AC_SUBST([WINDOWS_64_BIT_OFF_T]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/open-cloexec.m4�������������������������������������������������������0000644�0001750�0001750�00000001323�14557510506�014640� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Test whether O_CLOEXEC is defined. dnl Copyright 2017-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PREPROC_O_CLOEXEC], [ AC_CACHE_CHECK([for O_CLOEXEC], [gl_cv_macro_O_CLOEXEC], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <fcntl.h> #ifndef O_CLOEXEC choke me; #endif ]], [[return O_CLOEXEC;]])], [gl_cv_macro_O_CLOEXEC=yes], [gl_cv_macro_O_CLOEXEC=no])]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/open-slash.m4���������������������������������������������������������0000644�0001750�0001750�00000003455�14557510506�014340� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# open-slash.m4 serial 2 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Tests whether open() and creat() recognize a trailing slash. dnl Sets gl_cv_func_open_slash. AC_DEFUN([gl_OPEN_TRAILING_SLASH_BUG], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl open("foo/") should not create a file when the file name has a dnl trailing slash. FreeBSD only has the problem on symlinks. AC_CHECK_FUNCS_ONCE([lstat]) AC_CACHE_CHECK([whether open recognizes a trailing slash], [gl_cv_func_open_slash], [# Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then touch conftest.tmp ln -s conftest.tmp conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <fcntl.h> #if HAVE_UNISTD_H # include <unistd.h> #endif ]GL_MDA_DEFINES[ int main () { int result = 0; #if HAVE_LSTAT if (open ("conftest.lnk/", O_RDONLY) != -1) result |= 1; #endif if (open ("conftest.sl/", O_CREAT, 0600) >= 0) result |= 2; return result; }]])], [gl_cv_func_open_slash=yes], [gl_cv_func_open_slash=no], [ changequote(,)dnl case "$host_os" in freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) gl_cv_func_open_slash="guessing no" ;; *) gl_cv_func_open_slash="guessing yes" ;; esac changequote([,])dnl ]) rm -f conftest.sl conftest.tmp conftest.lnk ]) case "$gl_cv_func_open_slash" in *no) AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1], [Define to 1 if open() fails to recognize a trailing slash.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/open.m4���������������������������������������������������������������0000644�0001750�0001750�00000003000�14557510506�013212� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# open.m4 serial 16 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_OPEN], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PREPROC_O_CLOEXEC]) case "$host_os" in mingw* | windows* | pw*) REPLACE_OPEN=1 ;; *) dnl open("foo/") should not create a file when the file name has a dnl trailing slash. FreeBSD only has the problem on symlinks. AC_CHECK_FUNCS_ONCE([lstat]) if test "$gl_cv_macro_O_CLOEXEC" != yes; then REPLACE_OPEN=1 fi gl_OPEN_TRAILING_SLASH_BUG case "$gl_cv_func_open_slash" in *no) REPLACE_OPEN=1 ;; esac ;; esac dnl Replace open() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ if test $REPLACE_OPEN = 0; then gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_OPEN=1 fi fi ]) dnl Replace open() for supporting the gnulib-defined O_NONBLOCK flag. m4_ifdef([gl_NONBLOCKING_IO], [ if test $REPLACE_OPEN = 0; then gl_NONBLOCKING_IO if test $gl_cv_have_open_O_NONBLOCK != yes; then REPLACE_OPEN=1 fi fi ]) ]) # Prerequisites of lib/open.c. AC_DEFUN([gl_PREREQ_OPEN], [ AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) : ]) gnuastro-0.22/bootstrapped/m4/openat.m4�������������������������������������������������������������0000644�0001750�0001750�00000002023�14557510506�013543� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 46 # See if we need to use our replacement for Solaris' openat et al functions. dnl Copyright (C) 2004-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. AC_DEFUN([gl_FUNC_OPENAT], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([openat]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) AC_REQUIRE([gl_PREPROC_O_CLOEXEC]) case $ac_cv_func_openat+$gl_cv_func_lstat_dereferences_slashed_symlink+$gl_cv_macro_O_CLOEXEC in yes+*yes+yes) ;; yes+*) # Solaris 10 lacks O_CLOEXEC. # Solaris 9 has *at functions, but uniformly mishandles trailing # slash in all of them. REPLACE_OPENAT=1 ;; *) HAVE_OPENAT=0 ;; esac ]) # Prerequisites of lib/openat.c. AC_DEFUN([gl_PREREQ_OPENAT], [ AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/pathmax.m4������������������������������������������������������������0000644�0001750�0001750�00000002155�14557510506�013725� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pathmax.m4 serial 11 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2024 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PATHMAX], [ dnl Prerequisites of lib/pathmax.h. AC_CHECK_HEADERS_ONCE([sys/param.h]) ]) # Expands to a piece of C program that defines PATH_MAX in the same way as # "pathmax.h" will do. AC_DEFUN([gl_PATHMAX_SNIPPET], [[ /* Arrange to define PATH_MAX, like "pathmax.h" does. */ #if HAVE_UNISTD_H # include <unistd.h> #endif #include <limits.h> #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include <sys/param.h> #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifdef __hpux # undef PATH_MAX # define PATH_MAX 1024 #endif #if defined _WIN32 && ! defined __CYGWIN__ # undef PATH_MAX # define PATH_MAX 260 #endif ]]) # Prerequisites of gl_PATHMAX_SNIPPET. AC_DEFUN([gl_PATHMAX_SNIPPET_PREREQ], [ AC_CHECK_HEADERS_ONCE([unistd.h sys/param.h]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/perror.m4�������������������������������������������������������������0000644�0001750�0001750�00000005550�14557510506�013576� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# perror.m4 serial 13 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PERROR], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_R]) AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl We intentionally do not check for the broader REPLACE_STRERROR_R, dnl since on glibc systems, strerror_r is replaced only for signature dnl issues, and perror is just fine. Rather, we only want to dnl replace perror if strerror_r was replaced for a content fix. if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" != false:0; then dnl The system's perror() cannot know about the new errno values we add dnl to <errno.h>, or any fix for strerror(0). Replace it. REPLACE_PERROR=1 fi case ${gl_cv_func_strerror_r_works-unset} in unset|*yes) AC_CACHE_CHECK([whether perror matches strerror], [gl_cv_func_perror_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> ]], [[char *str = strerror (-1); if (!getenv("CONFTEST_OUTPUT")) return 0; if (!str) str = ""; puts (str); errno = -1; perror (""); return 0; ]])], [if CONFTEST_OUTPUT=1 ./conftest$EXEEXT >conftest.txt1 2>conftest.txt2 \ && cmp conftest.txt1 conftest.txt2 >/dev/null; then gl_cv_func_perror_works=yes else gl_cv_func_perror_works=no fi rm -rf conftest.txt1 conftest.txt2], [gl_cv_func_perror_works=no], [case "$host_os" in # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_perror_works="guessing yes" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_perror_works="guessing yes" ;; # Otherwise obey --enable-cross-guesses. *) gl_cv_func_perror_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_perror_works" in *yes) ;; *) REPLACE_PERROR=1 ;; esac ;; *) dnl The system's perror() probably inherits the bugs in the dnl system's strerror_r(). Replace it. REPLACE_PERROR=1 ;; esac dnl Does perror clobber the strerror buffer? case "$host_os" in # Yes on Android 11. linux*-android*) REPLACE_PERROR=1 ;; esac ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/pipe.m4���������������������������������������������������������������0000644�0001750�0001750�00000000660�14557510506�013217� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pipe.m4 serial 2 dnl Copyright (C) 2010-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PIPE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([pipe]) if test $ac_cv_func_pipe != yes; then HAVE_PIPE=0 fi ]) ��������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/printf.m4�������������������������������������������������������������0000644�0001750�0001750�00000261672�14557510506�013600� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf.m4 serial 89 dnl Copyright (C) 2003, 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Test whether the *printf family of functions supports the 'j', 'z', 't', dnl 'L' size specifiers. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_sizes_c99. AC_DEFUN([gl_PRINTF_SIZES_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports size specifiers as in C99], [gl_cv_func_printf_sizes_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stddef.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #if HAVE_STDINT_H_WITH_UINTMAX # include <stdint.h> #endif #if HAVE_INTTYPES_H_WITH_UINTMAX # include <inttypes.h> #endif static char buf[100]; int main () { int result = 0; #if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX buf[0] = '\0'; if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 || strcmp (buf, "12345671 33") != 0) result |= 1; #else result |= 1; #endif buf[0] = '\0'; if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 || strcmp (buf, "12345672 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 || strcmp (buf, "12345673 33") != 0) result |= 4; buf[0] = '\0'; if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 || strcmp (buf, "1.5 33") != 0) result |= 8; return result; }]])], [gl_cv_func_printf_sizes_c99=yes], [gl_cv_func_printf_sizes_c99=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_printf_sizes_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; midnightbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_printf_sizes_c99="guessing no";; openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_printf_sizes_c99="guessing no";; netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_sizes_c99="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. windows*-msvc*) gl_cv_func_printf_sizes_c99="guessing yes" ;; mingw* | windows*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_sizes_c99="guessing yes"], [gl_cv_func_printf_sizes_c99="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_sizes_c99="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the 'w8', 'w16', dnl 'w32', 'w64', 'wf8', 'wf16', 'wf32', 'wf64' size specifiers. (ISO C23) dnl Result is gl_cv_func_printf_sizes_c23. AC_DEFUN([gl_PRINTF_SIZES_C23], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports size specifiers as in C23], [gl_cv_func_printf_sizes_c23], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stddef.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #if HAVE_STDINT_H_WITH_UINTMAX # include <stdint.h> #endif #if HAVE_INTTYPES_H_WITH_UINTMAX # include <inttypes.h> #endif static char buf[100]; int main () { int result = 0; buf[0] = '\0'; if (sprintf (buf, "%w8u %d", (uint8_t) 123, 33, 44, 55) < 0 || strcmp (buf, "123 33") != 0) result |= 1; buf[0] = '\0'; if (sprintf (buf, "%wf8u %d", (uint_fast8_t) 123, 33, 44, 55) < 0 || strcmp (buf, "123 33") != 0) result |= 1; buf[0] = '\0'; if (sprintf (buf, "%w16u %d", (uint16_t) 12345, 33, 44, 55) < 0 || strcmp (buf, "12345 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%wf16u %d", (uint_fast16_t) 12345, 33, 44, 55) < 0 || strcmp (buf, "12345 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%w32u %d", (uint32_t) 12345671, 33, 44, 55) < 0 || strcmp (buf, "12345671 33") != 0) result |= 4; buf[0] = '\0'; if (sprintf (buf, "%wf32u %d", (uint_fast32_t) 12345671, 33, 44, 55) < 0 || strcmp (buf, "12345671 33") != 0) result |= 4; #if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX buf[0] = '\0'; if (sprintf (buf, "%w64u %d", (uint64_t) 12345671, 33, 44, 55) < 0 || strcmp (buf, "12345671 33") != 0) result |= 8; buf[0] = '\0'; if (sprintf (buf, "%wf64u %d", (uint_fast64_t) 12345671, 33, 44, 55) < 0 || strcmp (buf, "12345671 33") != 0) result |= 8; #else result |= 8; #endif return result; }]])], [gl_cv_func_printf_sizes_c23=yes], [gl_cv_func_printf_sizes_c23=no], [ case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_sizes_c23="guessing no";; # Guess no on musl systems. *-musl* | midipix*) gl_cv_func_printf_sizes_c23="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_sizes_c23="guessing no";; # Guess no on native Windows. mingw* | windows*) gl_cv_func_printf_sizes_c23="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_sizes_c23="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports 'long double' dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_long_double. AC_DEFUN([gl_PRINTF_LONG_DOUBLE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports 'long double' arguments], [gl_cv_func_printf_long_double], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[10000]; int main () { int result = 0; buf[0] = '\0'; if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.750000 33") != 0) result |= 1; buf[0] = '\0'; if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.750000e+00 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.75 33") != 0) result |= 4; return result; }]])], [gl_cv_func_printf_long_double=yes], [gl_cv_func_printf_long_double=no], [case "$host_os" in # Guess no on BeOS. beos*) gl_cv_func_printf_long_double="guessing no";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_long_double="guessing yes";; # Guess yes on MSVC, no on mingw. windows*-msvc*) gl_cv_func_printf_long_double="guessing yes" ;; mingw* | windows*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_long_double="guessing yes"], [gl_cv_func_printf_long_double="guessing no"]) ;; *) gl_cv_func_printf_long_double="guessing yes";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports infinite and NaN dnl 'double' arguments and negative zero arguments in the %f, %e, %g dnl directives. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_infinite. AC_DEFUN([gl_PRINTF_INFINITE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports infinite 'double' arguments], [gl_cv_func_printf_infinite], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static int strisnan (const char *string, size_t start_index, size_t end_index) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static int have_minus_zero () { static double plus_zero = 0.0; double minus_zero = - plus_zero; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } static char buf[10000]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%f", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%f", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%f", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%e", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 4; if (sprintf (buf, "%e", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 4; if (sprintf (buf, "%e", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 8; if (sprintf (buf, "%g", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 16; if (sprintf (buf, "%g", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 16; if (sprintf (buf, "%g", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 32; /* This test fails on HP-UX 10.20. */ if (have_minus_zero ()) if (sprintf (buf, "%g", - zero) < 0 || strcmp (buf, "-0") != 0) result |= 64; return result; }]])], [gl_cv_func_printf_infinite=yes], [gl_cv_func_printf_infinite=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; midnightbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; darwin*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; hpux*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_printf_infinite="guessing no";; netbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; openbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_infinite="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_infinite="guessing no";; changequote([,])dnl # Guess yes on MSVC, no on mingw. windows*-msvc*) gl_cv_func_printf_infinite="guessing yes" ;; mingw* | windows*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_infinite="guessing yes"], [gl_cv_func_printf_infinite="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_infinite="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports infinite and NaN dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_infinite_long_double. AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl The user can set or unset the variable gl_printf_safe to indicate dnl that he wishes a safe handling of non-IEEE-754 'long double' values. if test -n "$gl_printf_safe"; then AC_DEFINE([CHECK_PRINTF_SAFE], [1], [Define if you wish *printf() functions that have a safe handling of non-IEEE-754 'long double' values.]) fi case "$gl_cv_func_printf_long_double" in *yes) AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments], [gl_cv_func_printf_infinite_long_double], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ ]GL_NOCRASH[ #include <float.h> #include <stdio.h> #include <string.h> static int strisnan (const char *string, size_t start_index, size_t end_index) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static char buf[10000]; static long double zeroL = 0.0L; int main () { int result = 0; nocrash_init(); if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; if (sprintf (buf, "%Le", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Le", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Le", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; #if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; } { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 4; if (sprintf (buf, "%Le", x.value) <= 0) result |= 4; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 4; } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 8; if (sprintf (buf, "%Le", x.value) <= 0) result |= 8; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 8; } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 16; if (sprintf (buf, "%Le", x.value) <= 0) result |= 16; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 16; } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 32; if (sprintf (buf, "%Le", x.value) <= 0) result |= 32; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 32; } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 64; if (sprintf (buf, "%Le", x.value) <= 0) result |= 64; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 64; } #endif return result; }]])], [gl_cv_func_printf_infinite_long_double=yes], [gl_cv_func_printf_infinite_long_double=no], [case "$host_cpu" in # Guess no on ia64, x86_64, i386. ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; *) case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; midnightbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; openbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_infinite_long_double="guessing no";; changequote([,])dnl # Guess yes on MSVC, no on mingw. windows*-msvc*) gl_cv_func_printf_infinite_long_double="guessing yes" ;; mingw* | windows*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_infinite_long_double="guessing yes"], [gl_cv_func_printf_infinite_long_double="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_infinite_long_double="$gl_cross_guess_normal";; esac ;; esac ]) ]) ;; *) gl_cv_func_printf_infinite_long_double="irrelevant" ;; esac ]) dnl Test whether the *printf family of functions supports the 'a' and 'A' dnl conversion specifier for hexadecimal output of floating-point numbers. dnl (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_a. AC_DEFUN([gl_PRINTF_DIRECTIVE_A], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives], [gl_cv_func_printf_directive_a], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 || (strcmp (buf, "0x1.922p+1 33") != 0 && strcmp (buf, "0x3.244p+0 33") != 0 && strcmp (buf, "0x6.488p-1 33") != 0 && strcmp (buf, "0xc.91p-2 33") != 0)) result |= 1; if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 || (strcmp (buf, "-0X1.922P+1 33") != 0 && strcmp (buf, "-0X3.244P+0 33") != 0 && strcmp (buf, "-0X6.488P-1 33") != 0 && strcmp (buf, "-0XC.91P-2 33") != 0)) result |= 2; /* This catches a FreeBSD 13.0 bug: it doesn't round. */ if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 || (strcmp (buf, "0x1.83p+0 33") != 0 && strcmp (buf, "0x3.05p-1 33") != 0 && strcmp (buf, "0x6.0ap-2 33") != 0 && strcmp (buf, "0xc.14p-3 33") != 0)) result |= 4; /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round. */ if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0 || (strcmp (buf, "0x2p+0 33") != 0 && strcmp (buf, "0x3p-1 33") != 0 && strcmp (buf, "0x6p-2 33") != 0 && strcmp (buf, "0xcp-3 33") != 0)) result |= 4; /* This catches a FreeBSD 6.1 bug. See <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 || buf[0] == '0') result |= 8; /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug. */ if (sprintf (buf, "%.1a", 1.999) < 0 || (strcmp (buf, "0x1.0p+1") != 0 && strcmp (buf, "0x2.0p+0") != 0 && strcmp (buf, "0x4.0p-1") != 0 && strcmp (buf, "0x8.0p-2") != 0)) result |= 16; /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ if (sprintf (buf, "%.1La", 1.999L) < 0 || (strcmp (buf, "0x1.0p+1") != 0 && strcmp (buf, "0x2.0p+0") != 0 && strcmp (buf, "0x4.0p-1") != 0 && strcmp (buf, "0x8.0p-2") != 0)) result |= 32; return result; }]])], [gl_cv_func_printf_directive_a=yes], [gl_cv_func_printf_directive_a=no], [ case "$host_os" in # Guess yes on glibc >= 2.5 systems. *-gnu* | gnu*) AC_EGREP_CPP([BZ2908], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__ BZ2908 #endif #endif ], [gl_cv_func_printf_directive_a="guessing yes"], [gl_cv_func_printf_directive_a="guessing no"]) ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_printf_directive_a="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_a="guessing no";; # Guess no on native Windows. mingw* | windows*) gl_cv_func_printf_directive_a="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_directive_a="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the 'b' conversion dnl specifier for binary output of integers. dnl (ISO C23) dnl Result is gl_cv_func_printf_directive_b. AC_DEFUN([gl_PRINTF_DIRECTIVE_B], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'b' directive], [gl_cv_func_printf_directive_b], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; int main () { int result = 0; if (sprintf (buf, "%b %d", 12345, 33, 44, 55) < 0 || strcmp (buf, "11000000111001 33") != 0) result |= 1; return result; }]])], [gl_cv_func_printf_directive_b=yes], [gl_cv_func_printf_directive_b=no], [ case "$host_os" in # Guess yes on glibc >= 2.35 systems. *-gnu* | gnu*) AC_EGREP_CPP([Lucky], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 35) || (__GLIBC__ > 2) Lucky user #endif #endif ], [gl_cv_func_printf_directive_uppercase_b="guessing yes"], [gl_cv_func_printf_directive_uppercase_b="guessing no"]) ;; # Guess no on musl systems. *-musl* | midipix*) gl_cv_func_printf_directive_b="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_b="guessing no";; # Guess no on native Windows. mingw* | windows*) gl_cv_func_printf_directive_b="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_directive_b="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the 'B' conversion dnl specifier for binary output of integers. dnl (GNU, encouraged by ISO C23 § 7.23.6.1) dnl Result is gl_cv_func_printf_directive_uppercase_b. AC_DEFUN([gl_PRINTF_DIRECTIVE_UPPERCASE_B], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'B' directive], [gl_cv_func_printf_directive_uppercase_b], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; int main () { int result = 0; if (sprintf (buf, "%#B %d", 12345, 33, 44, 55) < 0 || strcmp (buf, "0B11000000111001 33") != 0) result |= 1; return result; }]])], [gl_cv_func_printf_directive_uppercase_b=yes], [gl_cv_func_printf_directive_uppercase_b=no], [ case "$host_os" in # Guess yes on glibc >= 2.35 systems. *-gnu* | gnu*) AC_EGREP_CPP([Lucky], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 35) || (__GLIBC__ > 2) Lucky user #endif #endif ], [gl_cv_func_printf_directive_uppercase_b="guessing yes"], [gl_cv_func_printf_directive_uppercase_b="guessing no"]) ;; # Guess no on musl systems. *-musl* | midipix*) gl_cv_func_printf_directive_uppercase_b="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_uppercase_b="guessing no";; # Guess no on native Windows. mingw* | windows*) gl_cv_func_printf_directive_uppercase_b="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_directive_uppercase_b="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %F format dnl directive. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_f. AC_DEFUN([gl_PRINTF_DIRECTIVE_F], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'F' directive], [gl_cv_func_printf_directive_f], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 || strcmp (buf, "1234567.000000 33") != 0) result |= 1; if (sprintf (buf, "%F", 1.0 / zero) < 0 || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) result |= 2; /* This catches a Cygwin 1.5.x bug. */ if (sprintf (buf, "%.F", 1234.0) < 0 || strcmp (buf, "1234") != 0) result |= 4; return result; }]])], [gl_cv_func_printf_directive_f=yes], [gl_cv_func_printf_directive_f=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; midnightbsd*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; darwin*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; openbsd*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";; solaris*) gl_cv_func_printf_directive_f="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_f="guessing no";; changequote([,])dnl # Guess yes on MSVC, no on mingw. windows*-msvc*) gl_cv_func_printf_directive_f="guessing yes" ;; mingw* | windows*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_directive_f="guessing yes"], [gl_cv_func_printf_directive_f="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_directive_f="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %n format dnl directive. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_n. AC_DEFUN([gl_PRINTF_DIRECTIVE_N], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'n' directive], [gl_cv_func_printf_directive_n], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef _MSC_VER #include <inttypes.h> /* See page about "Parameter Validation" on msdn.microsoft.com. <https://docs.microsoft.com/en-us/cpp/c-runtime-library/parameter-validation> <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/set-invalid-parameter-handler-set-thread-local-invalid-parameter-handler> */ static void cdecl invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { exit (1); } #endif static char fmtstring[10]; static char buf[100]; int main () { int count = -1; #ifdef _MSC_VER _set_invalid_parameter_handler (invalid_parameter_handler); #endif /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) support %n in format strings in read-only memory but not in writable memory. */ strcpy (fmtstring, "%d %n"); if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 || strcmp (buf, "123 ") != 0 || count != 4) return 1; return 0; }]])], [gl_cv_func_printf_directive_n=yes], [gl_cv_func_printf_directive_n=no], [case "$host_os" in # Guess no on glibc when _FORTIFY_SOURCE >= 2. *-gnu* | gnu*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if _FORTIFY_SOURCE >= 2 error fail #endif ]])], [gl_cv_func_printf_directive_n="guessing yes"], [gl_cv_func_printf_directive_n="guessing no"]) ;; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_n="guessing no";; # Guess no on native Windows. mingw* | windows*) gl_cv_func_printf_directive_n="guessing no";; *) gl_cv_func_printf_directive_n="guessing yes";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %ls format dnl directive and in particular, when a precision is specified, whether dnl the functions stop converting the wide string argument when the number dnl of bytes that have been produced by this conversion equals or exceeds dnl the precision. dnl Result is gl_cv_func_printf_directive_ls. AC_DEFUN([gl_PRINTF_DIRECTIVE_LS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'ls' directive], [gl_cv_func_printf_directive_ls], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <wchar.h> #include <string.h> int main () { int result = 0; char buf[100]; /* Test whether %ls works at all. This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on Cygwin 1.5. */ { static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; buf[0] = '\0'; if (sprintf (buf, "%ls", wstring) < 0 || strcmp (buf, "abc") != 0) result |= 1; } /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an assertion failure inside libc), but not on OpenBSD 4.0. */ { static const wchar_t wstring[] = { 'a', 0 }; buf[0] = '\0'; if (sprintf (buf, "%ls", wstring) < 0 || strcmp (buf, "a") != 0) result |= 2; } /* Test whether precisions in %ls are supported as specified in ISO C 99 section 7.19.6.1: "If a precision is specified, no more than that many bytes are written (including shift sequences, if any), and the array shall contain a null wide character if, to equal the multibyte character sequence length given by the precision, the function would need to access a wide character one past the end of the array." This test fails on Solaris 10. */ { static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; buf[0] = '\0'; if (sprintf (buf, "%.2ls", wstring) < 0 || strcmp (buf, "ab") != 0) result |= 8; } return result; }]])], [gl_cv_func_printf_directive_ls=yes], [gl_cv_func_printf_directive_ls=no], [ changequote(,)dnl case "$host_os" in # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_directive_ls="guessing no";; openbsd*) gl_cv_func_printf_directive_ls="guessing yes";; irix*) gl_cv_func_printf_directive_ls="guessing no";; solaris*) gl_cv_func_printf_directive_ls="guessing no";; cygwin*) gl_cv_func_printf_directive_ls="guessing no";; beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_ls="guessing no";; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_printf_directive_ls="guessing yes";; *) gl_cv_func_printf_directive_ls="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports the %lc format dnl directive and in particular, when the argument is a null wide character, dnl whether the functions produce a NUL byte, as specified in ISO C 23 dnl after the issue GB-141 was fixed. dnl Result is gl_cv_func_printf_directive_lc. AC_DEFUN([gl_PRINTF_DIRECTIVE_LC], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'lc' directive correctly], [gl_cv_func_printf_directive_lc], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <wchar.h> #include <string.h> int main () { int result = 0; char buf[100]; /* This test fails on musl libc 1.2.4. */ { buf[0] = '\0'; if (sprintf (buf, "%lc%lc%lc", (wint_t) 'a', (wint_t) 0, (wint_t) 'z') < 0 || memcmp (buf, "a\0z", 4) != 0) result |= 1; } return result; }]])], [gl_cv_func_printf_directive_lc=yes], [gl_cv_func_printf_directive_lc=no], [ changequote(,)dnl case "$host_os" in # Guess no on musl libc. *-musl* | midipix*) gl_cv_func_printf_directive_lc="guessing no";; # Guess yes otherwise. *) gl_cv_func_printf_directive_lc="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports POSIX/XSI format dnl strings with positions. (POSIX:2001) dnl Result is gl_cv_func_printf_positions. AC_DEFUN_ONCE([gl_PRINTF_POSITIONS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions], [gl_cv_func_printf_positions], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); }]])], [gl_cv_func_printf_positions=yes], [gl_cv_func_printf_positions=no], [ changequote(,)dnl case "$host_os" in netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) gl_cv_func_printf_positions="guessing no";; beos*) gl_cv_func_printf_positions="guessing no";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_positions="guessing yes";; # Guess no on native Windows. mingw* | windows* | pw*) gl_cv_func_printf_positions="guessing no";; *) gl_cv_func_printf_positions="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports POSIX/XSI format dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001) dnl Result is gl_cv_func_printf_flag_grouping. AC_DEFUN([gl_PRINTF_FLAG_GROUPING], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the grouping flag], [gl_cv_func_printf_flag_grouping], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; int main () { if (sprintf (buf, "%'d %d", 1234567, 99) < 0 || buf[strlen (buf) - 1] != '9') return 1; return 0; }]])], [gl_cv_func_printf_flag_grouping=yes], [gl_cv_func_printf_flag_grouping=no], [ changequote(,)dnl case "$host_os" in cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_flag_grouping="guessing no";; # Guess no on native Windows. mingw* | windows* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; *) gl_cv_func_printf_flag_grouping="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports the - flag correctly. dnl (ISO C99.) See dnl <https://lists.gnu.org/r/bug-coreutils/2008-02/msg00035.html> dnl Result is gl_cv_func_printf_flag_leftadjust. AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly], [gl_cv_func_printf_flag_leftadjust], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; int main () { /* Check that a '-' flag is not annihilated by a negative width. */ if (sprintf (buf, "a%-*sc", -3, "b") < 0 || strcmp (buf, "ab c") != 0) return 1; return 0; }]])], [gl_cv_func_printf_flag_leftadjust=yes], [gl_cv_func_printf_flag_leftadjust=no], [ changequote(,)dnl case "$host_os" in # Guess yes on HP-UX 11. hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess no on HP-UX 10 and older. hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess yes otherwise. *) gl_cv_func_printf_flag_leftadjust="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports padding of non-finite dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See dnl <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> dnl Result is gl_cv_func_printf_flag_zero. AC_DEFUN([gl_PRINTF_FLAG_ZERO], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the zero flag correctly], [gl_cv_func_printf_flag_zero], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; static double zero = 0.0; int main () { if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0 || (strcmp (buf, " inf") != 0 && strcmp (buf, " infinity") != 0)) return 1; return 0; }]])], [gl_cv_func_printf_flag_zero=yes], [gl_cv_func_printf_flag_zero=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_flag_zero="guessing no";; # Guess no on native Windows. mingw* | windows*) gl_cv_func_printf_flag_zero="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_flag_zero="$gl_cross_guess_normal";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports the # flag with a dnl zero precision and a zero value in the 'x' and 'X' directives correctly. dnl ISO C and POSIX specify that for the 'd', 'i', 'b', 'o', 'u', 'x', 'X' dnl directives: "The result of converting a zero value with a precision of dnl zero is no characters." But on Mac OS X 10.5, for the 'x', 'X' directives, dnl when a # flag is present, the output is "0" instead of "". dnl Result is gl_cv_func_printf_flag_alt_precision_zero. AC_DEFUN([gl_PRINTF_FLAG_ALT_PRECISION_ZERO], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the alternative flag with a zero precision], [gl_cv_func_printf_flag_alt_precision_zero], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> static char buf[10]; int main () { int result = 0; if (sprintf (buf, "%#.0x %d", 0, 33, 44) > 0 + 3) result |= 1; return result; }]])], [gl_cv_func_printf_flag_alt_precision_zero=yes], [gl_cv_func_printf_flag_alt_precision_zero=no], [ changequote(,)dnl case "$host_os" in # Guess no only on macOS 10..12 systems. darwin[0-9] | darwin[0-9].* | \ darwin1[0-9] | darwin1[0-9].* | \ darwin2[0-1] | darwin2[0-1].*) gl_cv_func_printf_flag_alt_precision_zero="guessing no" ;; darwin*) gl_cv_func_printf_flag_alt_precision_zero="guessing yes" ;; *) gl_cv_func_printf_flag_alt_precision_zero="guessing yes" ;; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports large precisions. dnl On mingw, precisions larger than 512 are treated like 512, in integer, dnl floating-point or pointer output. On Solaris 10/x86, precisions larger dnl than 510 in floating-point output crash the program. On Solaris 10/SPARC, dnl precisions larger than 510 in floating-point output yield wrong results. dnl On AIX 7.1, precisions larger than 998 in floating-point output yield dnl wrong results. On BeOS, precisions larger than 1044 crash the program. dnl Result is gl_cv_func_printf_precision. AC_DEFUN([gl_PRINTF_PRECISION], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports large precisions], [gl_cv_func_printf_precision], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[5000]; int main () { int result = 0; #ifdef __BEOS__ /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ return 1; #endif if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) result |= 1; if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) result |= 2; if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 || buf[0] != '1') result |= 4; if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 || buf[0] != '1') result |= 4; return result; }]])], [gl_cv_func_printf_precision=yes], [gl_cv_func_printf_precision=no], [ changequote(,)dnl case "$host_os" in # Guess no only on Solaris, native Windows, and BeOS systems. solaris*) gl_cv_func_printf_precision="guessing no" ;; mingw* | windows* | pw*) gl_cv_func_printf_precision="guessing no" ;; beos*) gl_cv_func_printf_precision="guessing no" ;; # Guess yes on Android. linux*-android*) gl_cv_func_printf_precision="guessing yes" ;; *) gl_cv_func_printf_precision="guessing yes" ;; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions recovers gracefully in case dnl of an out-of-memory condition, or whether it crashes the entire program. dnl Result is gl_cv_func_printf_enomem. AC_DEFUN([gl_PRINTF_ENOMEM], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_MULTIARCH]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf survives out-of-memory conditions], [gl_cv_func_printf_enomem], [ gl_cv_func_printf_enomem="guessing no" if test "$cross_compiling" = no; then if test $APPLE_UNIVERSAL_BUILD = 0; then AC_LANG_CONFTEST([AC_LANG_SOURCE([[ ]GL_NOCRASH[ #include <stdio.h> #include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> #include <errno.h> int main() { struct rlimit limit; int ret; nocrash_init (); /* Some printf implementations allocate temporary space with malloc. */ /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ #ifdef RLIMIT_DATA if (getrlimit (RLIMIT_DATA, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_DATA, &limit) < 0) return 77; #endif /* On Linux systems, malloc() is limited by RLIMIT_AS. */ #ifdef RLIMIT_AS if (getrlimit (RLIMIT_AS, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_AS, &limit) < 0) return 77; #endif /* Some printf implementations allocate temporary space on the stack. */ #ifdef RLIMIT_STACK if (getrlimit (RLIMIT_STACK, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_STACK, &limit) < 0) return 77; #endif ret = printf ("%.5000000f", 1.0); return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then (./conftest 2>&AS_MESSAGE_LOG_FD result=$? _AS_ECHO_LOG([\$? = $result]) if test $result != 0 && test $result != 77; then result=1; fi exit $result ) >/dev/null 2>/dev/null case $? in 0) gl_cv_func_printf_enomem="yes" ;; 77) gl_cv_func_printf_enomem="guessing no" ;; *) gl_cv_func_printf_enomem="no" ;; esac else gl_cv_func_printf_enomem="guessing no" fi rm -fr conftest* else dnl A universal build on Apple Mac OS X platforms. dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode. dnl But we need a configuration result that is valid in both modes. gl_cv_func_printf_enomem="guessing no" fi fi if test "$gl_cv_func_printf_enomem" = "guessing no"; then changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on Solaris. solaris*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on AIX. aix*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on HP-UX/hppa. hpux*) case "$host_cpu" in hppa*) gl_cv_func_printf_enomem="guessing yes";; *) gl_cv_func_printf_enomem="guessing no";; esac ;; # Guess yes on IRIX. irix*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on OSF/1. osf*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on Haiku. haiku*) gl_cv_func_printf_enomem="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_enomem="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_enomem="$gl_cross_guess_normal";; esac changequote([,])dnl fi ]) ]) dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001) dnl Result is ac_cv_func_snprintf. AC_DEFUN([gl_SNPRINTF_PRESENCE], [ AC_CHECK_FUNCS_ONCE([snprintf]) ]) dnl Test whether the string produced by the snprintf function is always NUL dnl terminated. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_snprintf_truncation_c99. AC_DEFUN_ONCE([gl_SNPRINTF_TRUNCATION_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf truncates the result as in C99], [gl_cv_func_snprintf_truncation_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); my_snprintf (buf, 3, "%d %d", 4567, 89); if (memcmp (buf, "45\0DEF", 6) != 0) return 1; return 0; }]])], [gl_cv_func_snprintf_truncation_c99=yes], [gl_cv_func_snprintf_truncation_c99=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_truncation_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; midnightbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_truncation_c99="guessing no";; openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_snprintf_truncation_c99="guessing no";; solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OSF/1 >= 5. osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_truncation_c99="guessing no";; netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess no on native Windows. mingw* | windows*) gl_cv_func_snprintf_truncation_c99="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_snprintf_truncation_c99="$gl_cross_guess_normal";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the return value of the snprintf function is the number dnl of bytes (excluding the terminating NUL) that would have been produced dnl if the buffer had been large enough. (ISO C99, POSIX:2001) dnl For example, this test program fails on IRIX 6.5: dnl --------------------------------------------------------------------- dnl #include <stdio.h> dnl int main() dnl { dnl static char buf[8]; dnl int retval = snprintf (buf, 3, "%d", 12345); dnl return retval >= 0 && retval < 3; dnl } dnl --------------------------------------------------------------------- dnl Result is gl_cv_func_snprintf_retval_c99. AC_DEFUN_ONCE([gl_SNPRINTF_RETVAL_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf returns a byte count as in C99], [gl_cv_func_snprintf_retval_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) return 1; if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) return 2; if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) return 3; return 0; }]])], [gl_cv_func_snprintf_retval_c99=yes], [gl_cv_func_snprintf_retval_c99=no], [case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; midnightbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_retval_c99="guessing no";; openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_retval_c99="guessing no";; netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_retval_c99="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. windows*-msvc*) gl_cv_func_snprintf_retval_c99="guessing yes" ;; mingw* | windows*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_snprintf_retval_c99="guessing yes"], [gl_cv_func_snprintf_retval_c99="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_snprintf_retval_c99="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the snprintf function supports the %n format directive dnl also in truncated portions of the format string. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_snprintf_directive_n. AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive], [gl_cv_func_snprintf_directive_n], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char fmtstring[10]; static char buf[100]; int main () { int count = -1; /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) support %n in format strings in read-only memory but not in writable memory. */ strcpy (fmtstring, "%d %n"); my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); if (count != 6) return 1; return 0; }]])], [gl_cv_func_snprintf_directive_n=yes], [gl_cv_func_snprintf_directive_n=no], [ case "$host_os" in # Guess no on glibc when _FORTIFY_SOURCE >= 2. *-gnu* | gnu*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if _FORTIFY_SOURCE >= 2 error fail #endif ]])], [gl_cv_func_snprintf_directive_n="guessing yes"], [gl_cv_func_snprintf_directive_n="guessing no"]) ;; changequote(,)dnl # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_directive_n="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";; midnightbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";; darwin*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_snprintf_directive_n="guessing no";; solaris*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";; aix*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on OSF/1 >= 5. osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";; osf*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_directive_n="guessing no";; netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_snprintf_directive_n="guessing no";; # Guess no on native Windows. mingw* | windows*) gl_cv_func_snprintf_directive_n="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_snprintf_directive_n="$gl_cross_guess_normal";; changequote([,])dnl esac ]) ]) ]) dnl Test whether the snprintf function, when passed a size = 1, writes any dnl output without bounds in this case, behaving like sprintf. This is the dnl case on Linux libc5. dnl Result is gl_cv_func_snprintf_size1. AC_DEFUN([gl_SNPRINTF_SIZE1], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf respects a size of 1], [gl_cv_func_snprintf_size1], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif int main() { static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; my_snprintf (buf, 1, "%d", 12345); return buf[1] != 'E'; }]])], [gl_cv_func_snprintf_size1=yes], [gl_cv_func_snprintf_size1=no], [case "$host_os" in # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_size1="guessing yes" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_snprintf_size1="guessing yes" ;; *) gl_cv_func_snprintf_size1="guessing yes" ;; esac ]) ]) ]) dnl Test whether the vsnprintf function, when passed a zero size, produces no dnl output. (ISO C99, POSIX:2001) dnl For example, snprintf nevertheless writes a NUL byte in this case dnl on OSF/1 5.1: dnl --------------------------------------------------------------------- dnl #include <stdio.h> dnl int main() dnl { dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; dnl snprintf (buf, 0, "%d", 12345); dnl return buf[0] != 'D'; dnl } dnl --------------------------------------------------------------------- dnl And vsnprintf writes any output without bounds in this case, behaving like dnl vsprintf, on HP-UX 11 and OSF/1 5.1: dnl --------------------------------------------------------------------- dnl #include <stdarg.h> dnl #include <stdio.h> dnl static int my_snprintf (char *buf, int size, const char *format, ...) dnl { dnl va_list args; dnl int ret; dnl va_start (args, format); dnl ret = vsnprintf (buf, size, format, args); dnl va_end (args); dnl return ret; dnl } dnl int main() dnl { dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; dnl my_snprintf (buf, 0, "%d", 12345); dnl return buf[0] != 'D'; dnl } dnl --------------------------------------------------------------------- dnl Result is gl_cv_func_vsnprintf_zerosize_c99. AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99], [gl_cv_func_vsnprintf_zerosize_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdarg.h> #include <stdio.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } int main() { static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; my_snprintf (buf, 0, "%d", 12345); return buf[0] != 'D'; }]])], [gl_cv_func_vsnprintf_zerosize_c99=yes], [gl_cv_func_vsnprintf_zerosize_c99=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; midnightbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Cygwin. cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on native Windows. mingw* | windows* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_vsnprintf_zerosize_c99="$gl_cross_guess_normal";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the swprintf function works correctly when it produces output dnl that contains null wide characters. dnl Result is gl_cv_func_swprintf_works. AC_DEFUN([gl_SWPRINTF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([swprintf]) AC_CACHE_CHECK([whether swprintf works], [gl_cv_func_swprintf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __USE_MINGW_ANSI_STDIO # define __USE_MINGW_ANSI_STDIO 1 #endif #include <stdio.h> #include <wchar.h> int main() { int result = 0; { /* This test fails on musl libc 1.2.3, FreeBSD, NetBSD, OpenBSD, macOS, AIX. */ wchar_t buf[5] = { 0xBEEF, 0xBEEF, 0xBEEF, 0xBEEF, 0xBEEF }; int ret = swprintf (buf, 4, L"%cz", '\0'); /* Expected result: ret = 2, buf[0] = 0x0, buf[1] = 0x7a, buf[2] = 0x0, buf[3] = 0xbeef musl libc 1.2.3: ret = 2, buf[0] = 0x0, buf[1] = 0x0, buf[2] = 0x0, buf[3] = 0x0 Reported at <https://www.openwall.com/lists/musl/2023/03/22/9>. FreeBSD 13.1, NetBSD 9.0, OpenBSD 7.2, macOS 12.5, AIX 7.2: ret = 2, buf[0] = 0x0, buf[1] = 0xbeef, buf[2] = 0xbeef, buf[3] = 0xbeef */ if (ret < 0 || buf[1] != 'z') result |= 1; } { /* This test fails on mingw. */ wchar_t buf[2]; int ret = swprintf (buf, 2, L"%lc", (wint_t)0); /* Expected: ret = 1 mingw: ret = 0 */ if (ret != 1) result |= 2; } return result; }]])], [gl_cv_func_swprintf_works=yes], [gl_cv_func_swprintf_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_swprintf_works="guessing yes";; # Guess no on musl systems. *-musl* | midipix*) gl_cv_func_swprintf_works="guessing no";; # Guess no on FreeBSD, NetBSD, OpenBSD, macOS, AIX. freebsd* | midnightbsd* | netbsd* | openbsd* | darwin* | aix*) gl_cv_func_swprintf_works="guessing no";; # Guess no on native Windows. mingw* | windows* | pw*) gl_cv_func_swprintf_works="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_swprintf_works="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *wprintf family of functions supports the 'a' and 'A' dnl conversion specifier for hexadecimal output of 'long double' numbers. dnl (ISO C99, POSIX:2001) dnl Result is gl_cv_func_swprintf_directive_la. AC_DEFUN([gl_SWPRINTF_DIRECTIVE_LA], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether swprintf supports the 'La' and 'LA' directives], [gl_cv_func_swprintf_directive_la], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <wchar.h> static wchar_t buf[100]; int main () { int result = 0; /* This catches a glibc 2.15 and Haiku 2022 bug. */ if (swprintf (buf, sizeof (buf) / sizeof (wchar_t), L"%La %d", 3.1416015625L, 33, 44, 55) < 0 || (wcscmp (buf, L"0x1.922p+1 33") != 0 && wcscmp (buf, L"0x3.244p+0 33") != 0 && wcscmp (buf, L"0x6.488p-1 33") != 0 && wcscmp (buf, L"0xc.91p-2 33") != 0)) result |= 1; return result; }]])], [gl_cv_func_swprintf_directive_la=yes], [gl_cv_func_swprintf_directive_la=no], [case "$host_os" in # Guess yes on glibc >= 2.17 systems. *-gnu* | gnu*) AC_EGREP_CPP([Unlucky], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16) || (__GLIBC__ > 2)) && !defined __UCLIBC__ Unlucky #endif #endif ], [gl_cv_func_swprintf_directive_la="guessing yes"], [gl_cv_func_swprintf_directive_la="guessing no"]) ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_swprintf_directive_la="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_swprintf_directive_la="guessing yes";; # Guess no on native Windows. mingw* | windows*) gl_cv_func_swprintf_directive_la="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_swprintf_directive_la="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *wprintf family of functions supports the 'lc' conversion dnl specifier for all wide characters. dnl (ISO C11, POSIX:2001) dnl Result is gl_cv_func_swprintf_directive_lc. AC_DEFUN([gl_SWPRINTF_DIRECTIVE_LC], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether swprintf supports the 'lc' directive], [gl_cv_func_swprintf_directive_lc], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <wchar.h> static wchar_t buf[100]; static wint_t L_invalid = (wchar_t) 0x76543210; int main () { int result = 0; /* This catches a musl libc 1.2.4, Android bug. Reported at <https://www.openwall.com/lists/musl/2023/06/12/3>. */ if (swprintf (buf, sizeof (buf) / sizeof (wchar_t), L"%lc %d", L_invalid, 33, 44, 55) < 0) result |= 1; return result; }]])], [gl_cv_func_swprintf_directive_lc=yes], [gl_cv_func_swprintf_directive_lc=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_swprintf_directive_lc="guessing yes";; # Guess no on musl systems. *-musl* | midipix*) gl_cv_func_swprintf_directive_lc="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_swprintf_directive_lc="guessing no";; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_swprintf_directive_lc="guessing yes";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_swprintf_directive_lc="$gl_cross_guess_normal";; esac ]) ]) ]) dnl The results of these tests on various platforms are: dnl dnl 1 = gl_PRINTF_SIZES_C99 dnl 2 = gl_PRINTF_SIZES_C23 dnl 3 = gl_PRINTF_LONG_DOUBLE dnl 4 = gl_PRINTF_INFINITE dnl 5 = gl_PRINTF_INFINITE_LONG_DOUBLE dnl 6 = gl_PRINTF_DIRECTIVE_A dnl 7 = gl_PRINTF_DIRECTIVE_B dnl 8 = gl_PRINTF_DIRECTIVE_UPPERCASE_B dnl 9 = gl_PRINTF_DIRECTIVE_F dnl 10 = gl_PRINTF_DIRECTIVE_N dnl 11 = gl_PRINTF_DIRECTIVE_LS dnl 12 = gl_PRINTF_DIRECTIVE_LC dnl 13 = gl_PRINTF_POSITIONS dnl 14 = gl_PRINTF_FLAG_GROUPING dnl 15 = gl_PRINTF_FLAG_LEFTADJUST dnl 16 = gl_PRINTF_FLAG_ZERO dnl 17 = gl_PRINTF_FLAG_ALT_PRECISION_ZERO dnl 18 = gl_PRINTF_PRECISION dnl 19 = gl_PRINTF_ENOMEM dnl 20 = gl_SNPRINTF_PRESENCE dnl 21 = gl_SNPRINTF_TRUNCATION_C99 dnl 22 = gl_SNPRINTF_RETVAL_C99 dnl 23 = gl_SNPRINTF_DIRECTIVE_N dnl 24 = gl_SNPRINTF_SIZE1 dnl 25 = gl_VSNPRINTF_ZEROSIZE_C99 dnl 26 = gl_SWPRINTF_WORKS dnl 27 = gl_SWPRINTF_DIRECTIVE_LA dnl 28 = gl_SWPRINTF_DIRECTIVE_LC dnl dnl 1 = checking whether printf supports size specifiers as in C99... dnl 2 = checking whether printf supports size specifiers as in C23... dnl 3 = checking whether printf supports 'long double' arguments... dnl 4 = checking whether printf supports infinite 'double' arguments... dnl 5 = checking whether printf supports infinite 'long double' arguments... dnl 6 = checking whether printf supports the 'a' and 'A' directives... dnl 7 = checking whether printf supports the 'b' directive... dnl 8 = checking whether printf supports the 'B' directive... dnl 9 = checking whether printf supports the 'F' directive... dnl 10 = checking whether printf supports the 'n' directive... dnl 11 = checking whether printf supports the 'ls' directive... dnl 12 = checking whether printf supports the 'lc' directive correctly... dnl 13 = checking whether printf supports POSIX/XSI format strings with positions... dnl 14 = checking whether printf supports the grouping flag... dnl 15 = checking whether printf supports the left-adjust flag correctly... dnl 16 = checking whether printf supports the zero flag correctly... dnl 17 = checking whether printf supports the alternative flag with a zero precision... dnl 18 = checking whether printf supports large precisions... dnl 19 = checking whether printf survives out-of-memory conditions... dnl 20 = checking for snprintf... dnl 21 = checking whether snprintf truncates the result as in C99... dnl 22 = checking whether snprintf returns a byte count as in C99... dnl 23 = checking whether snprintf fully supports the 'n' directive... dnl 24 = checking whether snprintf respects a size of 1... dnl 25 = checking whether vsnprintf respects a zero size as in C99... dnl 26 = checking whether swprintf works... dnl 27 = checking whether swprintf supports the 'La' and 'LA' directives... dnl 28 = checking whether swprintf supports the 'lc' directive... dnl dnl . = yes, # = no. dnl dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 dnl musl libc 1.2.3 . # . . . . # # . . . # . . . . ? . . . . . . . . # . # dnl glibc 2.35 . # . . . . . . . . . . . . . . . . . . . . . . . . . . dnl glibc 2.5 . # . . . . # # . . . . . . . . . . . . . . . . . . # . dnl glibc 2.3.6 . # . . . # # # . . . . . . . . . . . . . . . . . . # . dnl FreeBSD 14.0 . . . . . # . . . . . . . . . . . . # . . . . . . # . # dnl FreeBSD 13.0 . # . . . # # # . . . . . . . . . . # . . . . . . # . # dnl FreeBSD 5.4, 6.1 . # . . . # # # . . . . . . . # ? . # . . . . . . # ? ? dnl Mac OS X 10.13.5 . # . . # # # # . # . . . . . . . . . . . . # . . # ? ? dnl Mac OS X 10.5.8 . # . . # # # # . . . . . . . # # . . . . . . . . # ? ? dnl Mac OS X 10.3.9 . # . . . # # # . . . . . . . # # . # . . . . . . # ? ? dnl OpenBSD 6.0, 6.7 . # . . . # # # . . . . . . . . . . # . . . . . . # . # dnl OpenBSD 3.9, 4.0 . # . # # # # # # . # . . # . # ? . # . . . . . . # ? ? dnl Cygwin 1.7.0 (2009) . # . . # . # # . . ? ? . . . . ? . ? . . . . . . ? ? ? dnl Cygwin 1.5.25 (2008) . # . . # # # # . . # ? . . . . ? . # . . . . . . ? ? ? dnl Cygwin 1.5.19 (2006) # # . . # # # # # . # ? . # . # ? # # . . . . . . ? ? ? dnl Solaris 11.4 . # . # # # # # . . # . . . . # . . . . . . . . . . # . dnl Solaris 11.3 . # . . . # # # . . # . . . . . . . . . . . . . . . # . dnl Solaris 11.0 . # . # # # # # . . # . . . . # . . . . . . . . . ? ? ? dnl Solaris 10 . # . # # # # # . . # . . . . # . # . . . . . . . . # . dnl Solaris 2.6 ... 9 # # . # # # # # # . # . . . . # ? # . . . # . . . ? ? ? dnl Solaris 2.5.1 # # . # # # # # # . # . . . . # ? . . # # # # # # ? ? ? dnl AIX 7.1 . # . # # # # # . . . . . . . # . # . . . . . . . # . . dnl AIX 5.2 . # . # # # # # . . . . . . . # ? . . . . . . . . # ? ? dnl AIX 4.3.2, 5.1 # # . # # # # # # . . . . . . # ? . . . . # . . . # ? ? dnl HP-UX 11.31 . # . . . # # # . . . ? . . . # ? . . . . # # . . ? ? ? dnl HP-UX 11.{00,11,23} # # . . . # # # # . . ? . . . # ? . . . . # # . # ? ? ? dnl HP-UX 10.20 # # . # . # # # # . ? ? . . # # ? . . . . # # ? # ? ? ? dnl IRIX 6.5 # # . # # # # # # . # . . . . # ? . . . . # . . . # ? ? dnl OSF/1 5.1 # # . # # # # # # . . ? . . . # ? . . . . # . . # ? ? ? dnl OSF/1 4.0d # # . # # # # # # . . ? . . . # ? . . # # # # # # ? ? ? dnl NetBSD 9.0 . # . . . # # # . . . . . . . . . . . . . . . . . # . # dnl NetBSD 5.0 . # . . # # # # . . . . . . . # ? . # . . . . . . # ? ? dnl NetBSD 4.0 . # ? ? ? ? # # ? . ? . . ? ? ? ? ? ? . . . ? ? ? # ? ? dnl NetBSD 3.0 . # . . . # # # # . ? . # # ? # ? . # . . . . . . # ? ? dnl Haiku . # . . # # # # # . # ? . . . . ? . ? . . ? . . . . # . dnl BeOS # # # . # # # # # . ? ? # . ? . ? # ? . . ? . . . ? ? ? dnl Android 4.3 . # . # # # # # # # # ? . # . # ? . # . . . # . . ? ? ? dnl old mingw / msvcrt # # # # # # # # # . . ? # # . # ? # ? . # # # . . # ? ? dnl MSVC 9 # # # # # # # # # # . ? # # . # ? # ? # # # # . . # ? ? dnl mingw 2009-2011 . # # . # . # # . . . ? # # . . ? . ? . . . . . . # ? ? dnl mingw-w64 2011 # # # # # # # # # . . ? # # . # ? # ? . # # # . . # ? ? ����������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/pselect.m4������������������������������������������������������������0000644�0001750�0001750�00000005055�14557510506�013724� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pselect.m4 serial 11 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PSELECT], [ AC_REQUIRE([gl_SYS_SELECT_H]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([pselect]) if test $ac_cv_func_pselect = yes; then AC_CACHE_CHECK([whether signature of pselect conforms to POSIX], [gl_cv_sig_pselect], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/select.h> ]], [[int (*p) (int, fd_set *, fd_set *, fd_set *restrict, struct timespec const *restrict, sigset_t const *restrict) = pselect; return !p;]])], [gl_cv_sig_pselect=yes], [gl_cv_sig_pselect=no])]) dnl On FreeBSD 8.2, pselect() doesn't always reject bad fds. AC_CACHE_CHECK([whether pselect detects invalid fds], [gl_cv_func_pselect_detects_ebadf], [ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/time.h> #if HAVE_SYS_SELECT_H # include <sys/select.h> #endif #include <unistd.h> #include <errno.h> ]GL_MDA_DEFINES], [[ fd_set set; dup2(0, 16); FD_ZERO(&set); FD_SET(16, &set); close(16); struct timespec timeout; timeout.tv_sec = 0; timeout.tv_nsec = 5000; return pselect (17, &set, NULL, NULL, &timeout, NULL) != -1 || errno != EBADF; ]])], [gl_cv_func_pselect_detects_ebadf=yes], [gl_cv_func_pselect_detects_ebadf=no], [ case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_pselect_detects_ebadf="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_pselect_detects_ebadf="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_pselect_detects_ebadf="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_pselect_detects_ebadf="$gl_cross_guess_normal" ;; esac ]) ]) case $gl_cv_func_pselect_detects_ebadf in *yes) ;; *) REPLACE_PSELECT=1 ;; esac fi if test $ac_cv_func_pselect = no || test $gl_cv_sig_pselect = no; then REPLACE_PSELECT=1 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/pthread-thread.m4�����������������������������������������������������0000644�0001750�0001750�00000004345�14557510506�015162� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread-thread.m4 serial 3 dnl Copyright (C) 2019-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PTHREAD_THREAD], [ AC_REQUIRE([gl_PTHREAD_H]) AC_REQUIRE([AC_CANONICAL_HOST]) if { case "$host_os" in mingw* | windows*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then dnl Choose function names that don't conflict with the mingw-w64 winpthreads dnl library. REPLACE_PTHREAD_CREATE=1 REPLACE_PTHREAD_ATTR_INIT=1 REPLACE_PTHREAD_ATTR_GETDETACHSTATE=1 REPLACE_PTHREAD_ATTR_SETDETACHSTATE=1 REPLACE_PTHREAD_ATTR_DESTROY=1 REPLACE_PTHREAD_SELF=1 REPLACE_PTHREAD_EQUAL=1 REPLACE_PTHREAD_DETACH=1 REPLACE_PTHREAD_JOIN=1 REPLACE_PTHREAD_EXIT=1 else if test $HAVE_PTHREAD_H = 0; then HAVE_PTHREAD_CREATE=0 HAVE_PTHREAD_ATTR_INIT=0 HAVE_PTHREAD_ATTR_GETDETACHSTATE=0 HAVE_PTHREAD_ATTR_SETDETACHSTATE=0 HAVE_PTHREAD_ATTR_DESTROY=0 HAVE_PTHREAD_SELF=0 HAVE_PTHREAD_EQUAL=0 HAVE_PTHREAD_DETACH=0 HAVE_PTHREAD_JOIN=0 HAVE_PTHREAD_EXIT=0 else dnl On HP-UX 11.11, pthread_create() and pthread_attr_init() are only dnl defined as inline functions. AC_CACHE_CHECK([whether pthread_create exists as a global function], [gl_cv_func_pthread_create], [saved_LIBS="$LIBS" LIBS="$LIBS $LIBPMULTITHREAD" AC_LINK_IFELSE( [AC_LANG_SOURCE( [[extern #ifdef __cplusplus "C" #endif int pthread_create (void); int main () { return pthread_create (); } ]])], [gl_cv_func_pthread_create=yes], [gl_cv_func_pthread_create=no]) LIBS="$saved_LIBS" ]) if test $gl_cv_func_pthread_create = no; then REPLACE_PTHREAD_CREATE=1 REPLACE_PTHREAD_ATTR_INIT=1 AC_DEFINE([PTHREAD_CREATE_IS_INLINE], [1], [Define if pthread_create is an inline function.]) fi fi fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/pthread_h.m4����������������������������������������������������������0000644�0001750�0001750�00000035417�14557510506�014230� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread_h.m4 serial 9 dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_PTHREAD_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_PTHREAD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PTHREADLIB]) gl_CHECK_NEXT_HEADERS([pthread.h]) if test $ac_cv_header_pthread_h = yes; then HAVE_PTHREAD_H=1 dnl On mingw, if --enable-threads=windows or gl_AVOID_WINPTHREAD is used, dnl ignore the <pthread.h> from the mingw-w64 winpthreads library. m4_ifdef([gl_][THREADLIB], [ AC_REQUIRE([gl_][THREADLIB]) if { case "$host_os" in mingw* | windows*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then HAVE_PTHREAD_H=0 fi ]) else HAVE_PTHREAD_H=0 fi AC_SUBST([HAVE_PTHREAD_H]) AC_CHECK_TYPES([pthread_t, pthread_spinlock_t], [], [], [AC_INCLUDES_DEFAULT[ #if HAVE_PTHREAD_H #include <pthread.h> #endif]]) if test $ac_cv_type_pthread_t != yes; then HAVE_PTHREAD_T=0 fi if test $ac_cv_type_pthread_spinlock_t != yes; then HAVE_PTHREAD_SPINLOCK_T=0 fi dnl Constants may be defined as C preprocessor macros or as enum items. AC_CACHE_CHECK([for PTHREAD_CREATE_DETACHED], [gl_cv_const_PTHREAD_CREATE_DETACHED], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> int x = PTHREAD_CREATE_DETACHED; ]], [[]])], [gl_cv_const_PTHREAD_CREATE_DETACHED=yes], [gl_cv_const_PTHREAD_CREATE_DETACHED=no]) ]) if test $gl_cv_const_PTHREAD_CREATE_DETACHED != yes; then HAVE_PTHREAD_CREATE_DETACHED=0 fi AC_CACHE_CHECK([for PTHREAD_MUTEX_RECURSIVE], [gl_cv_const_PTHREAD_MUTEX_RECURSIVE], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> int x = PTHREAD_MUTEX_RECURSIVE; ]], [[]])], [gl_cv_const_PTHREAD_MUTEX_RECURSIVE=yes], [gl_cv_const_PTHREAD_MUTEX_RECURSIVE=no]) ]) if test $gl_cv_const_PTHREAD_MUTEX_RECURSIVE != yes; then HAVE_PTHREAD_MUTEX_RECURSIVE=0 fi AC_CACHE_CHECK([for PTHREAD_MUTEX_ROBUST], [gl_cv_const_PTHREAD_MUTEX_ROBUST], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> int x = PTHREAD_MUTEX_ROBUST; ]], [[]])], [gl_cv_const_PTHREAD_MUTEX_ROBUST=yes], [gl_cv_const_PTHREAD_MUTEX_ROBUST=no]) ]) if test $gl_cv_const_PTHREAD_MUTEX_ROBUST != yes; then HAVE_PTHREAD_MUTEX_ROBUST=0 fi AC_CACHE_CHECK([for PTHREAD_PROCESS_SHARED], [gl_cv_const_PTHREAD_PROCESS_SHARED], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> int x = PTHREAD_PROCESS_SHARED; ]], [[]])], [gl_cv_const_PTHREAD_PROCESS_SHARED=yes], [gl_cv_const_PTHREAD_PROCESS_SHARED=no]) ]) if test $gl_cv_const_PTHREAD_PROCESS_SHARED != yes; then HAVE_PTHREAD_PROCESS_SHARED=0 fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, if it is not common dnl enough to be declared everywhere. gl_WARN_ON_USE_PREPARE([[#include <pthread.h> ]], [ pthread_create pthread_attr_init pthread_attr_getdetachstate pthread_attr_setdetachstate pthread_attr_destroy pthread_self pthread_equal pthread_detach pthread_join pthread_exit pthread_once pthread_mutex_init pthread_mutexattr_init pthread_mutexattr_gettype pthread_mutexattr_settype pthread_mutexattr_getrobust pthread_mutexattr_setrobust pthread_mutexattr_destroy pthread_mutex_lock pthread_mutex_trylock pthread_mutex_timedlock pthread_mutex_unlock pthread_mutex_destroy pthread_rwlock_init pthread_rwlockattr_init pthread_rwlockattr_destroy pthread_rwlock_rdlock pthread_rwlock_wrlock pthread_rwlock_tryrdlock pthread_rwlock_trywrlock pthread_rwlock_timedrdlock pthread_rwlock_timedwrlock pthread_rwlock_unlock pthread_rwlock_destroy pthread_cond_init pthread_condattr_init pthread_condattr_destroy pthread_cond_wait pthread_cond_timedwait pthread_cond_signal pthread_cond_broadcast pthread_cond_destroy pthread_key_create pthread_setspecific pthread_getspecific pthread_key_delete pthread_spin_init pthread_spin_lock pthread_spin_trylock pthread_spin_unlock pthread_spin_destroy]) AC_REQUIRE([AC_C_RESTRICT]) dnl For backward compatibility with gnulib versions <= 2019-07. LIB_PTHREAD="$LIBPMULTITHREAD" AC_SUBST([LIB_PTHREAD]) ]) # gl_PTHREAD_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_PTHREAD_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_PTHREAD_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_PTHREAD_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_PTHREAD_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_THREAD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_ONCE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_MUTEX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_RWLOCK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_COND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_TSS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_SPIN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_MUTEX_TIMEDLOCK]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_PTHREAD_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_PTHREAD_H_DEFAULTS]) ]) AC_DEFUN([gl_PTHREAD_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_PTHREAD_T=1; AC_SUBST([HAVE_PTHREAD_T]) HAVE_PTHREAD_SPINLOCK_T=1; AC_SUBST([HAVE_PTHREAD_SPINLOCK_T]) HAVE_PTHREAD_CREATE_DETACHED=1; AC_SUBST([HAVE_PTHREAD_CREATE_DETACHED]) HAVE_PTHREAD_MUTEX_RECURSIVE=1; AC_SUBST([HAVE_PTHREAD_MUTEX_RECURSIVE]) HAVE_PTHREAD_MUTEX_ROBUST=1; AC_SUBST([HAVE_PTHREAD_MUTEX_ROBUST]) HAVE_PTHREAD_PROCESS_SHARED=1; AC_SUBST([HAVE_PTHREAD_PROCESS_SHARED]) HAVE_PTHREAD_CREATE=1; AC_SUBST([HAVE_PTHREAD_CREATE]) HAVE_PTHREAD_ATTR_INIT=1; AC_SUBST([HAVE_PTHREAD_ATTR_INIT]) HAVE_PTHREAD_ATTR_GETDETACHSTATE=1; AC_SUBST([HAVE_PTHREAD_ATTR_GETDETACHSTATE]) HAVE_PTHREAD_ATTR_SETDETACHSTATE=1; AC_SUBST([HAVE_PTHREAD_ATTR_SETDETACHSTATE]) HAVE_PTHREAD_ATTR_DESTROY=1; AC_SUBST([HAVE_PTHREAD_ATTR_DESTROY]) HAVE_PTHREAD_SELF=1; AC_SUBST([HAVE_PTHREAD_SELF]) HAVE_PTHREAD_EQUAL=1; AC_SUBST([HAVE_PTHREAD_EQUAL]) HAVE_PTHREAD_DETACH=1; AC_SUBST([HAVE_PTHREAD_DETACH]) HAVE_PTHREAD_JOIN=1; AC_SUBST([HAVE_PTHREAD_JOIN]) HAVE_PTHREAD_EXIT=1; AC_SUBST([HAVE_PTHREAD_EXIT]) HAVE_PTHREAD_ONCE=1; AC_SUBST([HAVE_PTHREAD_ONCE]) HAVE_PTHREAD_MUTEX_INIT=1; AC_SUBST([HAVE_PTHREAD_MUTEX_INIT]) HAVE_PTHREAD_MUTEXATTR_INIT=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_INIT]) HAVE_PTHREAD_MUTEXATTR_GETTYPE=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_GETTYPE]) HAVE_PTHREAD_MUTEXATTR_SETTYPE=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_SETTYPE]) HAVE_PTHREAD_MUTEXATTR_GETROBUST=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_GETROBUST]) HAVE_PTHREAD_MUTEXATTR_SETROBUST=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_SETROBUST]) HAVE_PTHREAD_MUTEXATTR_DESTROY=1; AC_SUBST([HAVE_PTHREAD_MUTEXATTR_DESTROY]) HAVE_PTHREAD_MUTEX_LOCK=1; AC_SUBST([HAVE_PTHREAD_MUTEX_LOCK]) HAVE_PTHREAD_MUTEX_TRYLOCK=1; AC_SUBST([HAVE_PTHREAD_MUTEX_TRYLOCK]) HAVE_PTHREAD_MUTEX_TIMEDLOCK=1; AC_SUBST([HAVE_PTHREAD_MUTEX_TIMEDLOCK]) HAVE_PTHREAD_MUTEX_UNLOCK=1; AC_SUBST([HAVE_PTHREAD_MUTEX_UNLOCK]) HAVE_PTHREAD_MUTEX_DESTROY=1; AC_SUBST([HAVE_PTHREAD_MUTEX_DESTROY]) HAVE_PTHREAD_RWLOCK_INIT=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_INIT]) HAVE_PTHREAD_RWLOCKATTR_INIT=1; AC_SUBST([HAVE_PTHREAD_RWLOCKATTR_INIT]) HAVE_PTHREAD_RWLOCKATTR_DESTROY=1; AC_SUBST([HAVE_PTHREAD_RWLOCKATTR_DESTROY]) HAVE_PTHREAD_RWLOCK_RDLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_RDLOCK]) HAVE_PTHREAD_RWLOCK_WRLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_WRLOCK]) HAVE_PTHREAD_RWLOCK_TRYRDLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_TRYRDLOCK]) HAVE_PTHREAD_RWLOCK_TRYWRLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_TRYWRLOCK]) HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK]) HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK]) HAVE_PTHREAD_RWLOCK_UNLOCK=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_UNLOCK]) HAVE_PTHREAD_RWLOCK_DESTROY=1; AC_SUBST([HAVE_PTHREAD_RWLOCK_DESTROY]) HAVE_PTHREAD_COND_INIT=1; AC_SUBST([HAVE_PTHREAD_COND_INIT]) HAVE_PTHREAD_CONDATTR_INIT=1; AC_SUBST([HAVE_PTHREAD_CONDATTR_INIT]) HAVE_PTHREAD_CONDATTR_DESTROY=1; AC_SUBST([HAVE_PTHREAD_CONDATTR_DESTROY]) HAVE_PTHREAD_COND_WAIT=1; AC_SUBST([HAVE_PTHREAD_COND_WAIT]) HAVE_PTHREAD_COND_TIMEDWAIT=1; AC_SUBST([HAVE_PTHREAD_COND_TIMEDWAIT]) HAVE_PTHREAD_COND_SIGNAL=1; AC_SUBST([HAVE_PTHREAD_COND_SIGNAL]) HAVE_PTHREAD_COND_BROADCAST=1; AC_SUBST([HAVE_PTHREAD_COND_BROADCAST]) HAVE_PTHREAD_COND_DESTROY=1; AC_SUBST([HAVE_PTHREAD_COND_DESTROY]) HAVE_PTHREAD_KEY_CREATE=1; AC_SUBST([HAVE_PTHREAD_KEY_CREATE]) HAVE_PTHREAD_SETSPECIFIC=1; AC_SUBST([HAVE_PTHREAD_SETSPECIFIC]) HAVE_PTHREAD_GETSPECIFIC=1; AC_SUBST([HAVE_PTHREAD_GETSPECIFIC]) HAVE_PTHREAD_KEY_DELETE=1; AC_SUBST([HAVE_PTHREAD_KEY_DELETE]) HAVE_PTHREAD_SPIN_INIT=1; AC_SUBST([HAVE_PTHREAD_SPIN_INIT]) HAVE_PTHREAD_SPIN_LOCK=1; AC_SUBST([HAVE_PTHREAD_SPIN_LOCK]) HAVE_PTHREAD_SPIN_TRYLOCK=1; AC_SUBST([HAVE_PTHREAD_SPIN_TRYLOCK]) HAVE_PTHREAD_SPIN_UNLOCK=1; AC_SUBST([HAVE_PTHREAD_SPIN_UNLOCK]) HAVE_PTHREAD_SPIN_DESTROY=1; AC_SUBST([HAVE_PTHREAD_SPIN_DESTROY]) REPLACE_PTHREAD_CREATE=0; AC_SUBST([REPLACE_PTHREAD_CREATE]) REPLACE_PTHREAD_ATTR_INIT=0; AC_SUBST([REPLACE_PTHREAD_ATTR_INIT]) REPLACE_PTHREAD_ATTR_GETDETACHSTATE=0; AC_SUBST([REPLACE_PTHREAD_ATTR_GETDETACHSTATE]) REPLACE_PTHREAD_ATTR_SETDETACHSTATE=0; AC_SUBST([REPLACE_PTHREAD_ATTR_SETDETACHSTATE]) REPLACE_PTHREAD_ATTR_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_ATTR_DESTROY]) REPLACE_PTHREAD_SELF=0; AC_SUBST([REPLACE_PTHREAD_SELF]) REPLACE_PTHREAD_EQUAL=0; AC_SUBST([REPLACE_PTHREAD_EQUAL]) REPLACE_PTHREAD_DETACH=0; AC_SUBST([REPLACE_PTHREAD_DETACH]) REPLACE_PTHREAD_JOIN=0; AC_SUBST([REPLACE_PTHREAD_JOIN]) REPLACE_PTHREAD_EXIT=0; AC_SUBST([REPLACE_PTHREAD_EXIT]) REPLACE_PTHREAD_ONCE=0; AC_SUBST([REPLACE_PTHREAD_ONCE]) REPLACE_PTHREAD_MUTEX_INIT=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_INIT]) REPLACE_PTHREAD_MUTEXATTR_INIT=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_INIT]) REPLACE_PTHREAD_MUTEXATTR_GETTYPE=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_GETTYPE]) REPLACE_PTHREAD_MUTEXATTR_SETTYPE=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_SETTYPE]) REPLACE_PTHREAD_MUTEXATTR_GETROBUST=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_GETROBUST]) REPLACE_PTHREAD_MUTEXATTR_SETROBUST=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_SETROBUST]) REPLACE_PTHREAD_MUTEXATTR_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_MUTEXATTR_DESTROY]) REPLACE_PTHREAD_MUTEX_LOCK=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_LOCK]) REPLACE_PTHREAD_MUTEX_TRYLOCK=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_TRYLOCK]) REPLACE_PTHREAD_MUTEX_TIMEDLOCK=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_TIMEDLOCK]) REPLACE_PTHREAD_MUTEX_UNLOCK=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_UNLOCK]) REPLACE_PTHREAD_MUTEX_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_MUTEX_DESTROY]) REPLACE_PTHREAD_RWLOCK_INIT=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_INIT]) REPLACE_PTHREAD_RWLOCKATTR_INIT=0; AC_SUBST([REPLACE_PTHREAD_RWLOCKATTR_INIT]) REPLACE_PTHREAD_RWLOCKATTR_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_RWLOCKATTR_DESTROY]) REPLACE_PTHREAD_RWLOCK_RDLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_RDLOCK]) REPLACE_PTHREAD_RWLOCK_WRLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_WRLOCK]) REPLACE_PTHREAD_RWLOCK_TRYRDLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_TRYRDLOCK]) REPLACE_PTHREAD_RWLOCK_TRYWRLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_TRYWRLOCK]) REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK]) REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK]) REPLACE_PTHREAD_RWLOCK_UNLOCK=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_UNLOCK]) REPLACE_PTHREAD_RWLOCK_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_RWLOCK_DESTROY]) REPLACE_PTHREAD_COND_INIT=0; AC_SUBST([REPLACE_PTHREAD_COND_INIT]) REPLACE_PTHREAD_CONDATTR_INIT=0; AC_SUBST([REPLACE_PTHREAD_CONDATTR_INIT]) REPLACE_PTHREAD_CONDATTR_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_CONDATTR_DESTROY]) REPLACE_PTHREAD_COND_WAIT=0; AC_SUBST([REPLACE_PTHREAD_COND_WAIT]) REPLACE_PTHREAD_COND_TIMEDWAIT=0; AC_SUBST([REPLACE_PTHREAD_COND_TIMEDWAIT]) REPLACE_PTHREAD_COND_SIGNAL=0; AC_SUBST([REPLACE_PTHREAD_COND_SIGNAL]) REPLACE_PTHREAD_COND_BROADCAST=0; AC_SUBST([REPLACE_PTHREAD_COND_BROADCAST]) REPLACE_PTHREAD_COND_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_COND_DESTROY]) REPLACE_PTHREAD_KEY_CREATE=0; AC_SUBST([REPLACE_PTHREAD_KEY_CREATE]) REPLACE_PTHREAD_SETSPECIFIC=0; AC_SUBST([REPLACE_PTHREAD_SETSPECIFIC]) REPLACE_PTHREAD_GETSPECIFIC=0; AC_SUBST([REPLACE_PTHREAD_GETSPECIFIC]) REPLACE_PTHREAD_KEY_DELETE=0; AC_SUBST([REPLACE_PTHREAD_KEY_DELETE]) REPLACE_PTHREAD_SPIN_INIT=0; AC_SUBST([REPLACE_PTHREAD_SPIN_INIT]) REPLACE_PTHREAD_SPIN_LOCK=0; AC_SUBST([REPLACE_PTHREAD_SPIN_LOCK]) REPLACE_PTHREAD_SPIN_TRYLOCK=0; AC_SUBST([REPLACE_PTHREAD_SPIN_TRYLOCK]) REPLACE_PTHREAD_SPIN_UNLOCK=0; AC_SUBST([REPLACE_PTHREAD_SPIN_UNLOCK]) REPLACE_PTHREAD_SPIN_DESTROY=0; AC_SUBST([REPLACE_PTHREAD_SPIN_DESTROY]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/pthread_rwlock_rdlock.m4����������������������������������������������0000644�0001750�0001750�00000015577�14557510506�016645� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread_rwlock_rdlock.m4 serial 8 dnl Copyright (C) 2017-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Inspired by dnl https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_rdlock/2-2.c dnl by Intel Corporation. dnl Test whether in a situation where dnl - an rwlock is taken by a reader and has a writer waiting, dnl - an additional reader requests the lock, dnl - the waiting writer and the requesting reader threads have the same dnl priority, dnl the requesting reader thread gets blocked, so that at some point the dnl waiting writer can acquire the lock. dnl Without such a guarantee, when there a N readers and each of the readers dnl spends more than 1/Nth of the time with the lock held, there is a high dnl probability that the waiting writer will not get the lock in a given finite dnl time, a phenomenon called "writer starvation". dnl Without such a guarantee, applications have a hard time avoiding writer dnl starvation. dnl dnl POSIX:2017 makes this requirement only for implementations that support TPS dnl (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO dnl and SCHED_RR, see dnl https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html dnl but this test verifies the guarantee regardless of TPS and regardless of dnl scheduling policy. dnl Glibc does not provide this guarantee (and never will on Linux), see dnl https://sourceware.org/bugzilla/show_bug.cgi?id=13701 dnl https://bugzilla.redhat.com/show_bug.cgi?id=1410052 AC_DEFUN([gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [ AC_REQUIRE([gl_THREADLIB]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether pthread_rwlock_rdlock prefers a writer to a reader], [gl_cv_pthread_rwlock_rdlock_prefer_writer], [saved_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <errno.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (exit (10 + (n))) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static pthread_rwlock_t lock; static pthread_t reader1; static pthread_t writer; static pthread_t reader2; static pthread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static pthread_mutex_t baton; static void * timer_func (void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9: The second reader thread requests the lock. */ err = pthread_rwlock_tryrdlock (&lock); if (err == 0) FAILURE (); else if (err != EBUSY) UNEXPECTED (9); /* Step 10: Launch a timer, to test whether the next call blocks. */ if (pthread_create (&timer, NULL, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = pthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (pthread_create (&reader2, NULL, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (pthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = pthread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (pthread_rwlock_init (&lock, NULL)) UNEXPECTED (1); if (pthread_mutex_init (&baton, NULL)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (pthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (pthread_create (&writer, NULL, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { sleep (1); } } ]])], [gl_cv_pthread_rwlock_rdlock_prefer_writer=yes], [gl_cv_pthread_rwlock_rdlock_prefer_writer=no], [case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on musl systems. *-musl* | midipix*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on bionic systems. *-android*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess yes on native Windows with the mingw-w64 winpthreads library. # Guess no on native Windows with the gnulib windows-rwlock module. mingw* | windows*) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" else gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" fi ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;; esac ]) LIBS="$saved_LIBS" ]) case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in *yes) AC_DEFINE([HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [1], [Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader.]) ;; esac ]) ���������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/pthread_sigmask.m4����������������������������������������������������0000644�0001750�0001750�00000023237�14557510506�015434� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread_sigmask.m4 serial 23 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PTHREAD_SIGMASK], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([pthread_sigmask]) dnl On MinGW pthread_sigmask is just a macro which always returns 0. dnl It does not exist as a real function, which is required by POSIX. AC_CACHE_CHECK([whether pthread_sigmask is a macro], [gl_cv_func_pthread_sigmask_macro], [AC_EGREP_CPP([headers_define_pthread_sigmask], [ #include <pthread.h> #include <signal.h> #ifdef pthread_sigmask headers_define_pthread_sigmask #endif], [gl_cv_func_pthread_sigmask_macro=yes], [gl_cv_func_pthread_sigmask_macro=no]) ]) PTHREAD_SIGMASK_LIB= if test $gl_cv_func_pthread_sigmask_macro = yes; then dnl pthread_sigmask is a dummy macro. HAVE_PTHREAD_SIGMASK=0 dnl Make sure to '#undef pthread_sigmask' before defining it. REPLACE_PTHREAD_SIGMASK=1 else dnl Test whether the gnulib module 'threadlib' is in use. dnl Some packages like Emacs use --avoid=threadlib. dnl Write the symbol in such a way that it does not cause 'aclocal' to pick dnl the threadlib.m4 file that is installed in $PREFIX/share/aclocal/. m4_ifdef([gl_][THREADLIB], [ AC_REQUIRE([gl_][THREADLIB]) if test "$gl_threads_api" = posix; then if test $ac_cv_func_pthread_sigmask = yes; then dnl pthread_sigmask is available without -lpthread. : else if test -n "$LIBMULTITHREAD"; then AC_CACHE_CHECK([for pthread_sigmask in $LIBMULTITHREAD], [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD], [gl_saved_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> #include <signal.h> ]], [[return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0);]]) ], [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=yes], [gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no]) LIBS="$gl_saved_LIBS" ]) if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then dnl pthread_sigmask is available with -pthread or -lpthread. PTHREAD_SIGMASK_LIB="$LIBMULTITHREAD" else dnl pthread_sigmask is not available at all. HAVE_PTHREAD_SIGMASK=0 fi else dnl pthread_sigmask is not available at all. HAVE_PTHREAD_SIGMASK=0 fi fi else dnl pthread_sigmask may exist but does not interoperate with the chosen dnl multithreading facility. if test $ac_cv_func_pthread_sigmask = yes; then REPLACE_PTHREAD_SIGMASK=1 else HAVE_PTHREAD_SIGMASK=0 fi fi ], [ dnl The module 'threadlib' is not in use, due to --avoid=threadlib being dnl specified. dnl The package either has prepared CPPFLAGS and LIBS for use of dnl POSIX:2008 threads, or wants to build single-threaded programs. if test $ac_cv_func_pthread_sigmask = yes; then dnl pthread_sigmask exists and does not require extra libraries. dnl Assume that it is declared. : else dnl pthread_sigmask either does not exist or needs extra libraries. HAVE_PTHREAD_SIGMASK=0 dnl Define the symbol rpl_pthread_sigmask, not pthread_sigmask, dnl so as to not accidentally override the system's pthread_sigmask dnl symbol from libpthread. This is necessary on IRIX 6.5. REPLACE_PTHREAD_SIGMASK=1 fi ]) fi AC_SUBST([PTHREAD_SIGMASK_LIB]) dnl For backward compatibility. LIB_PTHREAD_SIGMASK="$PTHREAD_SIGMASK_LIB" AC_SUBST([LIB_PTHREAD_SIGMASK]) dnl We don't need a variable LTLIB_PTHREAD_SIGMASK, because when dnl "$gl_threads_api" = posix, $LTLIBMULTITHREAD and $LIBMULTITHREAD are the dnl same. dnl Now test for some bugs in the system function. if test $HAVE_PTHREAD_SIGMASK = 1; then AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl On FreeBSD 13.0, MidnightBSD 1.1, HP-UX 11.31, Solaris 9, in programs dnl that are not linked with -lpthread, the pthread_sigmask() function dnl always returns 0 and has no effect. if test -z "$PTHREAD_SIGMASK_LIB"; then case " $LIBS " in *' -pthread '*) ;; *' -lpthread '*) ;; *) AC_CACHE_CHECK([whether pthread_sigmask works without -lpthread], [gl_cv_func_pthread_sigmask_in_libc_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <pthread.h> #include <signal.h> #include <stddef.h> int main () { sigset_t set; sigemptyset (&set); return pthread_sigmask (1729, &set, NULL) != 0; }]])], [gl_cv_func_pthread_sigmask_in_libc_works=no], [gl_cv_func_pthread_sigmask_in_libc_works=yes], [ changequote(,)dnl case "$host_os" in freebsd* | midnightbsd* | hpux* | solaris | solaris2.[2-9]*) gl_cv_func_pthread_sigmask_in_libc_works="guessing no";; *) gl_cv_func_pthread_sigmask_in_libc_works="guessing yes";; esac changequote([,])dnl ]) ]) case "$gl_cv_func_pthread_sigmask_in_libc_works" in *no) REPLACE_PTHREAD_SIGMASK=1 AC_DEFINE([PTHREAD_SIGMASK_INEFFECTIVE], [1], [Define to 1 if pthread_sigmask may return 0 and have no effect.]) ;; esac;; esac fi dnl On Cygwin 1.7.5, the pthread_sigmask() has a wrong return value dnl convention: Upon failure, it returns -1 and sets errno. AC_CACHE_CHECK([whether pthread_sigmask returns error numbers], [gl_cv_func_pthread_sigmask_return_works], [ gl_saved_LIBS="$LIBS" LIBS="$LIBS $PTHREAD_SIGMASK_LIB" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <pthread.h> #include <signal.h> #include <stddef.h> int main () { sigset_t set; sigemptyset (&set); if (pthread_sigmask (1729, &set, NULL) == -1) return 1; return 0; }]])], [gl_cv_func_pthread_sigmask_return_works=yes], [gl_cv_func_pthread_sigmask_return_works=no], [case "$host_os" in cygwin*) gl_cv_func_pthread_sigmask_return_works="guessing no";; *) gl_cv_func_pthread_sigmask_return_works="guessing yes";; esac ]) LIBS="$gl_saved_LIBS" ]) case "$gl_cv_func_pthread_sigmask_return_works" in *no) REPLACE_PTHREAD_SIGMASK=1 AC_DEFINE([PTHREAD_SIGMASK_FAILS_WITH_ERRNO], [1], [Define to 1 if pthread_sigmask(), when it fails, returns -1 and sets errno.]) ;; esac dnl On IRIX 6.5, in a single-threaded program, pending signals are not dnl immediately delivered when they are unblocked through pthread_sigmask, dnl only a little while later. AC_CACHE_CHECK([whether pthread_sigmask unblocks signals correctly], [gl_cv_func_pthread_sigmask_unblock_works], [ case "$host_os" in irix*) gl_cv_func_pthread_sigmask_unblock_works="guessing no";; *) gl_cv_func_pthread_sigmask_unblock_works="guessing yes";; esac m4_ifdef([gl_][THREADLIB], [dnl Link against $LIBMULTITHREAD, not only $PTHREAD_SIGMASK_LIB. dnl Otherwise we get a false positive on those platforms where dnl $gl_cv_func_pthread_sigmask_in_libc_works is "no". gl_saved_LIBS=$LIBS LIBS="$LIBS $LIBMULTITHREAD"]) AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <limits.h> #include <pthread.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> ]GL_MDA_DEFINES[ static volatile int sigint_occurred; static void sigint_handler (int sig) { sigint_occurred++; } int main () { sigset_t set; pid_t pid = getpid (); char command[80]; if (LONG_MAX < pid) return 6; signal (SIGINT, sigint_handler); sigemptyset (&set); sigaddset (&set, SIGINT); if (!(pthread_sigmask (SIG_BLOCK, &set, NULL) == 0)) return 1; sprintf (command, "sh -c 'sleep 1; kill -INT %ld' &", (long) pid); if (!(system (command) == 0)) return 2; sleep (2); if (!(sigint_occurred == 0)) return 3; if (!(pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0)) return 4; if (!(sigint_occurred == 1)) /* This fails on IRIX. */ return 5; return 0; }]])], [:], [gl_cv_func_pthread_sigmask_unblock_works=no], [:]) m4_ifdef([gl_][THREADLIB], [LIBS=$gl_saved_LIBS]) ]) case "$gl_cv_func_pthread_sigmask_unblock_works" in *no) REPLACE_PTHREAD_SIGMASK=1 AC_DEFINE([PTHREAD_SIGMASK_UNBLOCK_BUG], [1], [Define to 1 if pthread_sigmask() unblocks signals incorrectly.]) ;; esac fi ]) # Prerequisite of lib/pthread_sigmask.c. AC_DEFUN([gl_PREREQ_PTHREAD_SIGMASK], [ if test $HAVE_PTHREAD_SIGMASK = 1; then AC_DEFINE([HAVE_PTHREAD_SIGMASK], [1], [Define to 1 if the pthread_sigmask function can be used (despite bugs).]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/putenv.m4�������������������������������������������������������������0000644�0001750�0001750�00000004027�14557510506�013604� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# putenv.m4 serial 27 dnl Copyright (C) 2002-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. dnl dnl Check whether putenv ("FOO") removes FOO from the environment. dnl The putenv in libc on at least SunOS 4.1.4 does *not* do that. AC_DEFUN([gl_FUNC_PUTENV], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([for putenv compatible with GNU and SVID], [gl_cv_func_svid_putenv], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT GL_MDA_DEFINES], [[ /* Put it in env. */ if (putenv ("CONFTEST_putenv=val")) return 1; /* Try to remove it. */ if (putenv ("CONFTEST_putenv")) return 2; /* Make sure it was deleted. */ if (getenv ("CONFTEST_putenv") != 0) return 3; return 0; ]])], [gl_cv_func_svid_putenv=yes], [gl_cv_func_svid_putenv=no], [dnl When crosscompiling, assume putenv is broken. case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_svid_putenv="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_svid_putenv="guessing yes" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_svid_putenv="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_svid_putenv="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_svid_putenv" in *yes) ;; *) REPLACE_PUTENV=1 ;; esac ]) # Prerequisites of lib/putenv.c. AC_DEFUN([gl_PREREQ_PUTENV], [ AC_CHECK_DECLS([_putenv]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/raise.m4��������������������������������������������������������������0000644�0001750�0001750�00000001771�14557510506�013371� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# raise.m4 serial 4 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RAISE], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS([raise]) if test $ac_cv_func_raise = no; then HAVE_RAISE=0 else m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_RAISE=1 fi ]) m4_ifdef([gl_SIGNALBLOCKING], [ gl_SIGNALBLOCKING if test $HAVE_POSIX_SIGNALBLOCKING = 0; then m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_RAISE=1 fi ], [:]) fi ]) fi ]) # Prerequisites of lib/raise.c. AC_DEFUN([gl_PREREQ_RAISE], [:]) �������gnuastro-0.22/bootstrapped/m4/random.m4�������������������������������������������������������������0000644�0001750�0001750�00000004346�14557510506�013547� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# random.m4 serial 8 dnl Copyright (C) 2012-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RANDOM], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl We can't use AC_CHECK_FUNC here, because random() is defined as a dnl static inline function when compiling for Android 4.4 or older. AC_CACHE_CHECK([for random], [gl_cv_func_random], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h>]], [[return random() == 0;]]) ], [gl_cv_func_random=yes], [gl_cv_func_random=no]) ]) gl_CHECK_FUNCS_ANDROID([initstate], [[#include <stdlib.h>]]) gl_CHECK_FUNCS_ANDROID([setstate], [[#include <stdlib.h>]]) if test $gl_cv_func_random = no; then HAVE_RANDOM=0 HAVE_INITSTATE=0 HAVE_SETSTATE=0 else if test $ac_cv_func_initstate = no; then HAVE_INITSTATE=0 fi if test $ac_cv_func_setstate = no; then HAVE_SETSTATE=0 fi fi if test $HAVE_INITSTATE = 0; then case "$gl_cv_onwards_func_initstate" in future*) REPLACE_INITSTATE=1 ;; esac fi if test $HAVE_SETSTATE = 0; then case "$gl_cv_onwards_func_setstate" in future*) REPLACE_SETSTATE=1 ;; esac fi dnl On several platforms, random() is not multithread-safe. if test $ac_cv_func_initstate = no || test $ac_cv_func_setstate = no \ || case "$host_os" in \ darwin* | freebsd* | solaris* | cygwin* | haiku*) true ;; \ *) false ;; \ esac then dnl In order to define initstate or setstate, we need to define all the dnl functions at once. REPLACE_RANDOM=1 if test $ac_cv_func_initstate = yes; then REPLACE_INITSTATE=1 fi if test $ac_cv_func_setstate = yes; then REPLACE_SETSTATE=1 fi fi AC_CHECK_DECLS_ONCE([initstate]) if test $ac_cv_have_decl_initstate = no; then HAVE_DECL_INITSTATE=0 fi AC_CHECK_DECLS_ONCE([setstate]) if test $ac_cv_have_decl_setstate = no; then HAVE_DECL_SETSTATE=0 fi ]) # Prerequisites of lib/random.c. AC_DEFUN([gl_PREREQ_RANDOM], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/random_r.m4�����������������������������������������������������������0000644�0001750�0001750�00000002052�14557510506�014060� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RANDOM_R], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT]) if test $ac_cv_header_random_h = no; then HAVE_RANDOM_H=0 fi AC_CHECK_TYPES([struct random_data], [], [HAVE_STRUCT_RANDOM_DATA=0], [[#include <stdlib.h> #if HAVE_RANDOM_H # include <random.h> #endif ]]) dnl On AIX and OSF/1, these functions exist, but with different declarations. dnl Override them all. case "$host_os" in aix* | osf*) REPLACE_RANDOM_R=1 ;; *) AC_CHECK_FUNCS([random_r]) if test $ac_cv_func_random_r = no; then HAVE_RANDOM_R=0 fi ;; esac ]) # Prerequisites of lib/random_r.c. AC_DEFUN([gl_PREREQ_RANDOM_R], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/rawmemchr.m4����������������������������������������������������������0000644�0001750�0001750�00000001163�14557510506�014246� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rawmemchr.m4 serial 3 dnl Copyright (C) 2003, 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RAWMEMCHR], [ dnl Persuade glibc <string.h> to declare rawmemchr(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([rawmemchr]) if test $ac_cv_func_rawmemchr = no; then HAVE_RAWMEMCHR=0 fi ]) # Prerequisites of lib/strchrnul.c. AC_DEFUN([gl_PREREQ_RAWMEMCHR], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/realloc.m4������������������������������������������������������������0000644�0001750�0001750�00000004430�14557510506�013702� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# realloc.m4 serial 29 dnl Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # This is adapted with modifications from upstream Autoconf here: # https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n1455 AC_DEFUN([_AC_FUNC_REALLOC_IF], [ AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CACHE_CHECK([whether realloc (0, 0) returns nonnull], [ac_cv_func_realloc_0_nonnull], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[void *p = realloc (0, 0); void * volatile vp = p; int result = !vp; free (p); return result;]]) ], [ac_cv_func_realloc_0_nonnull=yes], [ac_cv_func_realloc_0_nonnull=no], [case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midipix* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | windows* | msys* ) ac_cv_func_realloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;; esac ]) ]) AS_CASE([$ac_cv_func_realloc_0_nonnull], [*yes], [$1], [$2]) ])# AC_FUNC_REALLOC # gl_FUNC_REALLOC_GNU # ------------------- # Replace realloc if it is not compatible with GNU libc. AC_DEFUN([gl_FUNC_REALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_REALLOC_POSIX]) if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 0; then _AC_FUNC_REALLOC_IF([], [REPLACE_REALLOC_FOR_REALLOC_GNU=1]) fi ])# gl_FUNC_REALLOC_GNU # gl_FUNC_REALLOC_POSIX # --------------------- # Test whether 'realloc' is POSIX compliant (sets errno to ENOMEM when it # fails, and doesn't mess up with ptrdiff_t overflow), # and replace realloc if it is not. AC_DEFUN([gl_FUNC_REALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_REALLOC_FOR_REALLOC_POSIX=1 fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/reallocarray.m4�������������������������������������������������������0000644�0001750�0001750�00000001571�14557510506�014744� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# reallocarray.m4 serial 5 dnl Copyright (C) 2017-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_REALLOCARRAY], [ dnl Persuade glibc <stdlib.h> to declare reallocarray. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_PTRDIFF]) gl_CHECK_FUNCS_ANDROID([reallocarray], [[#include <stdlib.h>]]) if test "$ac_cv_func_reallocarray" = no; then HAVE_REALLOCARRAY=0 case "$gl_cv_onwards_func_reallocarray" in future*) REPLACE_REALLOCARRAY=1 ;; esac elif test "$gl_cv_malloc_ptrdiff" = no; then REPLACE_REALLOCARRAY=1 fi ]) # Prerequisites of lib/reallocarray.c. AC_DEFUN([gl_PREREQ_REALLOCARRAY], [:]) ���������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/regex.m4��������������������������������������������������������������0000644�0001750�0001750�00000036026�14557510506�013401� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 75 # Copyright (C) 1996-2001, 2003-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl Initially derived from code in GNU grep. dnl Mostly written by Jim Meyering. AC_PREREQ([2.50]) AC_DEFUN([gl_REGEX], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_ARG_WITH([included-regex], [AS_HELP_STRING([[--without-included-regex]], [don't compile regex; this is the default on systems with recent-enough versions of the GNU C Library (use with caution on other systems).])]) case $with_included_regex in #( yes|no) ac_use_included_regex=$with_included_regex ;; '') # If the system regex support is good enough that it passes the # following run test, then default to *not* using the included regex.c. # If cross compiling, assume the test would fail and use the included # regex.c. AC_CHECK_DECLS_ONCE([alarm]) AC_CHECK_HEADERS_ONCE([malloc.h]) AC_CACHE_CHECK([for working re_compile_pattern], [gl_cv_func_re_compile_pattern_working], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <regex.h> #include <locale.h> #include <limits.h> #include <string.h> #if defined M_CHECK_ACTION || HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #if HAVE_MALLOC_H # include <malloc.h> #endif #ifdef M_CHECK_ACTION /* Exit with distinguishable exit code. */ static void sigabrt_no_core (int sig) { raise (SIGTERM); } #endif ]], [[int result = 0; static struct re_pattern_buffer regex; unsigned char folded_chars[UCHAR_MAX + 1]; int i; const char *s; struct re_registers regs; /* Some builds of glibc go into an infinite loop on this test. Use alarm to force death, and mallopt to avoid malloc recursion in diagnosing the corrupted heap. */ #if HAVE_DECL_ALARM signal (SIGALRM, SIG_DFL); alarm (2); #endif #ifdef M_CHECK_ACTION signal (SIGABRT, sigabrt_no_core); mallopt (M_CHECK_ACTION, 2); #endif if (setlocale (LC_ALL, "en_US.UTF-8")) { { /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html This test needs valgrind to catch the bug on Debian GNU/Linux 3.1 x86, but it might catch the bug better on other platforms and it shouldn't hurt to try the test here. */ static char const pat[] = "insert into"; static char const data[] = "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { if (re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s) != -1) result |= 1; regfree (®ex); } } { /* This test is from glibc bug 15078. The test case is from Andreas Schwab in <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. */ static char const pat[] = "[^x]x"; static char const data[] = /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ "\xe1\x80\x80" "\xe1\x80\xbb" "\xe1\x80\xbd" "\xe1\x80\x94" "\xe1\x80\xba" "\xe1\x80\xaf" "\xe1\x80\x95" "\xe1\x80\xba" "x"; re_set_syntax (0); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, 0); if (i != 0 && i != 21) result |= 1; regfree (®ex); } } if (! setlocale (LC_ALL, "C")) return 1; } /* This test is from glibc bug 3957, reported by Andrew Mackey. */ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[^x]b", 6, ®ex); if (s) result |= 2; else { /* This should fail, but succeeds for glibc-2.5. */ if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) result |= 2; regfree (®ex); } /* This regular expression is from Spencer ere test number 75 in grep-2.3. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); for (i = 0; i <= UCHAR_MAX; i++) folded_chars[i] = i; regex.translate = folded_chars; s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, ®ex); /* This should fail with _Invalid character class name_ error. */ if (!s) { result |= 4; regfree (®ex); } /* Ensure that [b-a] is diagnosed as invalid, when using RE_NO_EMPTY_RANGES. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[b-a]", 6, ®ex); if (s == 0) { result |= 8; regfree (®ex); } /* This should succeed, but does not for glibc-2.1.3. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("{1", 2, ®ex); if (s) result |= 8; else regfree (®ex); /* The following example is derived from a problem report against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[an\371]*n", 7, ®ex); if (s) result |= 8; else { /* This should match, but does not for glibc-2.2.1. */ if (re_match (®ex, "an", 2, 0, ®s) != 2) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 8; else { /* glibc-2.2.93 does not work with a negative RANGE argument. */ if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } /* The version of regex.c in older versions of gnulib ignored RE_ICASE. Detect that problem too. */ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 16; else { if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) result |= 16; else { free (regs.start); free (regs.end); } regfree (®ex); } /* Catch a bug reported by Vin Shelton in https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html */ re_set_syntax (RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[[:alnum:]_-]\\\\+\$", 16, ®ex); if (s) result |= 32; else regfree (®ex); /* REG_STARTEND was added to glibc on 2004-01-15. Reject older versions. */ if (! REG_STARTEND) result |= 64; /* Matching with the compiled form of this regexp would provoke an assertion failure prior to glibc-2.28: regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed With glibc-2.28, compilation fails and reports the invalid back reference. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("0|()0|\\\\1|0", 10, ®ex); if (!s) { memset (®s, 0, sizeof regs); i = re_search (®ex, "x", 1, 0, 1, ®s); if (i != -1) result |= 64; if (0 <= i) { free (regs.start); free (regs.end); } regfree (®ex); } else { if (strcmp (s, "Invalid back reference")) result |= 64; } /* glibc bug 11053. */ re_set_syntax (RE_SYNTAX_POSIX_BASIC); memset (®ex, 0, sizeof regex); static char const pat_sub2[] = "\\\\(a*\\\\)*a*\\\\1"; s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, ®ex); if (s) result |= 64; else { memset (®s, 0, sizeof regs); static char const data[] = "a"; int datalen = sizeof data - 1; i = re_search (®ex, data, datalen, 0, datalen, ®s); if (i != 0) result |= 64; else if (regs.num_regs < 2) result |= 64; else if (! (regs.start[0] == 0 && regs.end[0] == 1)) result |= 64; else if (! (regs.start[1] == 0 && regs.end[1] == 0)) result |= 64; regfree (®ex); free (regs.start); free (regs.end); } #if 0 /* It would be nice to reject hosts whose regoff_t values are too narrow (including glibc on hosts with 64-bit ptrdiff_t and 32-bit int), but we should wait until glibc implements this feature. Otherwise, support for equivalence classes and multibyte collation symbols would always be broken except when compiling --without-included-regex. */ if (sizeof (regoff_t) < sizeof (ptrdiff_t) || sizeof (regoff_t) < sizeof (ssize_t)) result |= 64; #endif return result; ]])], [gl_cv_func_re_compile_pattern_working=yes], [gl_cv_func_re_compile_pattern_working=no], [case "$host_os" in # Guess no on native Windows. mingw* | windows*) gl_cv_func_re_compile_pattern_working="guessing no" ;; # Otherwise obey --enable-cross-guesses. *) gl_cv_func_re_compile_pattern_working="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_re_compile_pattern_working" in #( *yes) ac_use_included_regex=no;; #( *no) ac_use_included_regex=yes;; esac ;; *) AC_MSG_ERROR([Invalid value for --with-included-regex: $with_included_regex]) ;; esac if test $ac_use_included_regex = yes; then AC_DEFINE([_REGEX_INCLUDE_LIMITS_H], [1], [Define if you want <regex.h> to include <limits.h>, so that it consistently overrides <limits.h>'s RE_DUP_MAX.]) AC_DEFINE([_REGEX_LARGE_OFFSETS], [1], [Define if you want regoff_t to be at least as wide POSIX requires.]) AC_DEFINE([re_syntax_options], [rpl_re_syntax_options], [Define to rpl_re_syntax_options if the replacement should be used.]) AC_DEFINE([re_set_syntax], [rpl_re_set_syntax], [Define to rpl_re_set_syntax if the replacement should be used.]) AC_DEFINE([re_compile_pattern], [rpl_re_compile_pattern], [Define to rpl_re_compile_pattern if the replacement should be used.]) AC_DEFINE([re_compile_fastmap], [rpl_re_compile_fastmap], [Define to rpl_re_compile_fastmap if the replacement should be used.]) AC_DEFINE([re_search], [rpl_re_search], [Define to rpl_re_search if the replacement should be used.]) AC_DEFINE([re_search_2], [rpl_re_search_2], [Define to rpl_re_search_2 if the replacement should be used.]) AC_DEFINE([re_match], [rpl_re_match], [Define to rpl_re_match if the replacement should be used.]) AC_DEFINE([re_match_2], [rpl_re_match_2], [Define to rpl_re_match_2 if the replacement should be used.]) AC_DEFINE([re_set_registers], [rpl_re_set_registers], [Define to rpl_re_set_registers if the replacement should be used.]) AC_DEFINE([re_comp], [rpl_re_comp], [Define to rpl_re_comp if the replacement should be used.]) AC_DEFINE([re_exec], [rpl_re_exec], [Define to rpl_re_exec if the replacement should be used.]) AC_DEFINE([regcomp], [rpl_regcomp], [Define to rpl_regcomp if the replacement should be used.]) AC_DEFINE([regexec], [rpl_regexec], [Define to rpl_regexec if the replacement should be used.]) AC_DEFINE([regerror], [rpl_regerror], [Define to rpl_regerror if the replacement should be used.]) AC_DEFINE([regfree], [rpl_regfree], [Define to rpl_regfree if the replacement should be used.]) fi ]) # Prerequisites of lib/regex.c and lib/regex_internal.c. AC_DEFUN([gl_PREREQ_REGEX], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_REQUIRE([gl_EEMALLOC]) AC_CHECK_HEADERS([libintl.h]) AC_CHECK_FUNCS_ONCE([isblank iswctype]) AC_CHECK_DECLS([isblank], [], [], [[#include <ctype.h>]]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/save-cwd.m4�����������������������������������������������������������0000644�0001750�0001750�00000000570�14557510506�013773� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 dnl Copyright (C) 2002-2006, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Prerequisites for lib/save-cwd.c. AC_DEFUN([gl_SAVE_CWD], [ AC_CHECK_FUNCS_ONCE([fchdir]) ]) ����������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/sched_h.m4������������������������������������������������������������0000644�0001750�0001750�00000006363�14557510506�013665� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sched_h.m4 serial 15 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN_ONCE([gl_SCHED_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_SCHED_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_HEADERS_ONCE([sys/cdefs.h]) AC_CHECK_HEADERS([sched.h], [], [], [[#if HAVE_SYS_CDEFS_H #include <sys/cdefs.h> #endif ]]) gl_NEXT_HEADERS([sched.h]) if test "$ac_cv_header_sched_h" = yes; then HAVE_SCHED_H=1 else HAVE_SCHED_H=0 fi AC_SUBST([HAVE_SCHED_H]) if test "$HAVE_SCHED_H" = 1; then AC_CHECK_TYPE([struct sched_param], [HAVE_STRUCT_SCHED_PARAM=1], [HAVE_STRUCT_SCHED_PARAM=0], [[#if HAVE_SYS_CDEFS_H #include <sys/cdefs.h> #endif #include <sched.h> ]]) else HAVE_STRUCT_SCHED_PARAM=0 case "$host_os" in os2*) dnl On OS/2 kLIBC, struct sched_param is in spawn.h. AC_CHECK_TYPE([struct sched_param], [HAVE_STRUCT_SCHED_PARAM=1], [], [#include <spawn.h>]) ;; vms) dnl On OpenVMS 7.2 or newer, struct sched_param is in pthread.h. AC_CHECK_TYPE([struct sched_param], [HAVE_STRUCT_SCHED_PARAM=1], [], [#include <pthread.h>]) ;; esac fi AC_SUBST([HAVE_STRUCT_SCHED_PARAM]) if test "$ac_cv_header_sys_cdefs_h" = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi AC_SUBST([HAVE_SYS_CDEFS_H]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, if it is not common dnl enough to be declared everywhere. gl_WARN_ON_USE_PREPARE([[#include <sched.h> ]], [sched_yield]) ]) # gl_SCHED_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SCHED_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SCHED_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SCHED_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SCHED_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCHED_YIELD]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SCHED_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SCHED_H_DEFAULTS]) ]) AC_DEFUN([gl_SCHED_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_SCHED_YIELD=1; AC_SUBST([HAVE_SCHED_YIELD]) REPLACE_SCHED_YIELD=0; AC_SUBST([REPLACE_SCHED_YIELD]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/sched_yield.m4��������������������������������������������������������0000644�0001750�0001750�00000001367�14557510506�014543� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sched_yield.m4 serial 3 dnl Copyright (C) 2019-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SCHED_YIELD], [ AC_REQUIRE([gl_SCHED_H_DEFAULTS]) AC_REQUIRE([gl_PTHREADLIB]) AC_REQUIRE([AC_CANONICAL_HOST]) if { case "$host_os" in mingw* | windows*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then dnl Choose function names that don't conflict with the mingw-w64 winpthreads dnl library. REPLACE_SCHED_YIELD=1 else AC_CHECK_DECL([sched_yield], , [HAVE_SCHED_YIELD=0], [[#include <sched.h>]]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/secure_getenv.m4������������������������������������������������������0000644�0001750�0001750�00000001540�14557510506�015116� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# secure_getenv.m4 serial 2 dnl Copyright 2013-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SECURE_GETENV], [ dnl Persuade glibc <stdlib.h> to declare secure_getenv(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([secure_getenv]) if test $ac_cv_func_secure_getenv = no; then HAVE_SECURE_GETENV=0 fi ]) # Prerequisites of lib/secure_getenv.c. AC_DEFUN([gl_PREREQ_SECURE_GETENV], [ AC_CHECK_FUNCS([__secure_getenv]) if test $ac_cv_func___secure_getenv = no; then gl_CHECK_FUNCS_ANDROID([issetugid], [[#include <unistd.h>]]) fi AC_CHECK_FUNCS_ONCE([getuid geteuid getgid getegid]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/select.m4�������������������������������������������������������������0000644�0001750�0001750�00000007274�14557510506�013551� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# select.m4 serial 16 dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SELECT], [ AC_REQUIRE([gl_SYS_SELECT_H]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SOCKETS]) if test "$ac_cv_header_winsock2_h" = yes; then REPLACE_SELECT=1 else dnl On Interix 3.5, select(0, NULL, NULL, NULL, timeout) fails with error dnl EFAULT. AC_CHECK_HEADERS_ONCE([sys/select.h]) AC_CACHE_CHECK([whether select supports a 0 argument], [gl_cv_func_select_supports0], [ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #include <sys/time.h> #if HAVE_SYS_SELECT_H #include <sys/select.h> #endif int main () { struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 5; return select (0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout) < 0; }]])], [gl_cv_func_select_supports0=yes], [gl_cv_func_select_supports0=no], [ changequote(,)dnl case "$host_os" in # Guess no on Interix. interix*) gl_cv_func_select_supports0="guessing no";; # Guess yes otherwise. *) gl_cv_func_select_supports0="guessing yes";; esac changequote([,])dnl ]) ]) case "$gl_cv_func_select_supports0" in *yes) ;; *) REPLACE_SELECT=1 ;; esac dnl On FreeBSD 8.2, select() doesn't always reject bad fds. AC_CACHE_CHECK([whether select detects invalid fds], [gl_cv_func_select_detects_ebadf], [ AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/time.h> #if HAVE_SYS_SELECT_H # include <sys/select.h> #endif #include <unistd.h> #include <errno.h> ]GL_MDA_DEFINES], [[ fd_set set; dup2(0, 16); FD_ZERO(&set); FD_SET(16, &set); close(16); struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 5; return select (17, &set, NULL, NULL, &timeout) != -1 || errno != EBADF; ]])], [gl_cv_func_select_detects_ebadf=yes], [gl_cv_func_select_detects_ebadf=no], [ case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_select_detects_ebadf="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_select_detects_ebadf="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_select_detects_ebadf="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_select_detects_ebadf="$gl_cross_guess_normal" ;; esac ]) ]) case $gl_cv_func_select_detects_ebadf in *yes) ;; *) REPLACE_SELECT=1 ;; esac fi dnl Determine the needed libraries. SELECT_LIB="$LIBSOCKET" if test $REPLACE_SELECT = 1; then case "$host_os" in mingw* | windows*) dnl On the MSVC platform, the function MsgWaitForMultipleObjects dnl (used in lib/select.c) requires linking with -luser32. On mingw, dnl it is implicit. AC_LINK_IFELSE( [AC_LANG_SOURCE([[ #define WIN32_LEAN_AND_MEAN #include <windows.h> int main () { MsgWaitForMultipleObjects (0, NULL, 0, 0, 0); return 0; }]])], [], [SELECT_LIB="$SELECT_LIB -luser32"]) ;; esac fi AC_SUBST([SELECT_LIB]) dnl For backward compatibility. LIB_SELECT="$LIB_SELECT" AC_SUBST([LIB_SELECT]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/semaphore.m4����������������������������������������������������������0000644�0001750�0001750�00000003057�14557510506�014250� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# semaphore.m4 serial 2 dnl Copyright (C) 2019-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Sets LIB_SEMAPHORE to the library needed, in addition to $(LIBMULTITHREAD), # for getting the <semaphore.h> functions. AC_DEFUN([gl_SEMAPHORE], [ AC_REQUIRE([gl_THREADLIB]) dnl sem_post is dnl - in libc on macOS, FreeBSD, AIX, IRIX, Solaris 11, Haiku, Cygwin, dnl - in libpthread on glibc systems, OpenBSD, dnl - in libpthread or librt on NetBSD, dnl - in librt on HP-UX 11, OSF/1, Solaris 10. dnl On the platforms where -lpthread is needed, it is contained in dnl $LIBMULTITHREAD. Therefore, the only library we need to test for is -lrt. AC_CACHE_CHECK([for library needed for semaphore functions], [gl_cv_semaphore_lib], [saved_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <semaphore.h>]], [[sem_post ((sem_t *)0);]])], [gl_cv_semaphore_lib=none], [LIBS="$LIBS -lrt" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <semaphore.h>]], [[sem_post ((sem_t *)0);]])], [gl_cv_semaphore_lib='-lrt'], [gl_cv_semaphore_lib=none]) ]) LIBS="$saved_LIBS" ]) if test "x$gl_cv_semaphore_lib" = xnone; then LIB_SEMAPHORE= else LIB_SEMAPHORE="$gl_cv_semaphore_lib" fi AC_SUBST([LIB_SEMAPHORE]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/setenv.m4�������������������������������������������������������������0000644�0001750�0001750�00000011630�14557510506�013565� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# setenv.m4 serial 33 dnl Copyright (C) 2001-2004, 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SETENV], [ AC_REQUIRE([gl_FUNC_SETENV_SEPARATE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles if test $ac_cv_func_setenv = no; then HAVE_SETENV=0 else AC_CACHE_CHECK([whether setenv validates arguments], [gl_cv_func_setenv_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stdlib.h> #include <errno.h> #include <string.h> ]], [[ int result = 0; { if (setenv ("", "", 0) != -1) result |= 1; else if (errno != EINVAL) result |= 2; } { if (setenv ("a", "=", 1) != 0) result |= 4; else if (strcmp (getenv ("a"), "=") != 0) result |= 8; } return result; ]])], [gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_setenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setenv_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_setenv_works" in *yes) ;; *) REPLACE_SETENV=1 ;; esac fi ]) # Like gl_FUNC_SETENV, except prepare for separate compilation # (no REPLACE_SETENV, no AC_LIBOBJ). AC_DEFUN([gl_FUNC_SETENV_SEPARATE], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([setenv]) if test $ac_cv_have_decl_setenv = no; then HAVE_DECL_SETENV=0 fi AC_CHECK_FUNCS_ONCE([setenv]) gl_PREREQ_SETENV ]) AC_DEFUN([gl_FUNC_UNSETENV], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([unsetenv]) if test $ac_cv_have_decl_unsetenv = no; then HAVE_DECL_UNSETENV=0 fi AC_CHECK_FUNCS([unsetenv]) if test $ac_cv_func_unsetenv = no; then HAVE_UNSETENV=0 else HAVE_UNSETENV=1 dnl Some BSDs return void, failing to do error checking. AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #undef _BSD #define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */ #include <stdlib.h> extern #ifdef __cplusplus "C" #endif int unsetenv (const char *name); ]], [[]])], [gt_cv_func_unsetenv_ret='int'], [gt_cv_func_unsetenv_ret='void'])]) if test $gt_cv_func_unsetenv_ret = 'void'; then AC_DEFINE([VOID_UNSETENV], [1], [Define to 1 if unsetenv returns void instead of int.]) REPLACE_UNSETENV=1 fi dnl Solaris 10 unsetenv does not remove all copies of a name. dnl Haiku alpha 2 unsetenv gets confused by assignment to environ. dnl OpenBSD 4.7 unsetenv("") does not fail. AC_CACHE_CHECK([whether unsetenv obeys POSIX], [gl_cv_func_unsetenv_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <stdlib.h> #include <errno.h> extern char **environ; ]GL_MDA_DEFINES], [[ char entry1[] = "a=1"; char entry2[] = "b=2"; char *env[] = { entry1, entry2, NULL }; if (putenv ((char *) "a=1")) return 1; if (putenv (entry2)) return 2; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 3; if (!unsetenv ("") || errno != EINVAL) return 4; entry2[0] = 'b'; environ = env; if (!getenv ("a")) return 5; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 6; ]])], [gl_cv_func_unsetenv_works=yes], [gl_cv_func_unsetenv_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_unsetenv_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_unsetenv_works" in *yes) ;; *) REPLACE_UNSETENV=1 ;; esac fi ]) # Prerequisites of lib/setenv.c. AC_DEFUN([gl_PREREQ_SETENV], [ AC_REQUIRE([gl_ENVIRON]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_HEADERS([search.h]) gl_CHECK_FUNCS_ANDROID([tsearch], [[#include <search.h>]]) ]) # Prerequisites of lib/unsetenv.c. AC_DEFUN([gl_PREREQ_UNSETENV], [ AC_REQUIRE([gl_ENVIRON]) AC_CHECK_HEADERS_ONCE([unistd.h]) ]) ��������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/setlocale.m4����������������������������������������������������������0000644�0001750�0001750�00000005746�14557510506�014247� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# setlocale.m4 serial 10 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SETLOCALE], [ AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_SETLOCALE_NULL]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl Test whether we need to improve on the general working of setlocale. NEED_SETLOCALE_IMPROVED=0 case "$host_os" in dnl On native Windows systems, setlocale(category,NULL) does not look at dnl the environment variables LC_ALL, category, and LANG. mingw* | windows*) NEED_SETLOCALE_IMPROVED=1 ;; dnl On Cygwin 1.5.x, setlocale always succeeds but setlocale(LC_CTYPE,NULL) dnl is then still "C". cygwin*) case `uname -r` in 1.5.*) NEED_SETLOCALE_IMPROVED=1 ;; esac ;; dnl On Android 4.3, setlocale(category,"C") always fails. *) AC_CACHE_CHECK([whether setlocale supports the C locale], [gl_cv_func_setlocale_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> int main () { return setlocale (LC_ALL, "C") == NULL; }]])], [gl_cv_func_setlocale_works=yes], [gl_cv_func_setlocale_works=no], [case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_setlocale_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_setlocale_works="guessing yes";; esac ]) ]) case "$gl_cv_func_setlocale_works" in *yes) ;; *) NEED_SETLOCALE_IMPROVED=1 ;; esac ;; esac AC_DEFINE_UNQUOTED([NEED_SETLOCALE_IMPROVED], [$NEED_SETLOCALE_IMPROVED], [Define to 1 to enable general improvements of setlocale.]) dnl Test whether we need a multithread-safe setlocale(category,NULL). NEED_SETLOCALE_MTSAFE=0 if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then NEED_SETLOCALE_MTSAFE=1 fi AC_DEFINE_UNQUOTED([NEED_SETLOCALE_MTSAFE], [$NEED_SETLOCALE_MTSAFE], [Define to 1 to enable a multithread-safety fix of setlocale.]) if test $NEED_SETLOCALE_IMPROVED = 1 || test $NEED_SETLOCALE_MTSAFE = 1; then REPLACE_SETLOCALE=1 fi if test $NEED_SETLOCALE_MTSAFE = 1; then SETLOCALE_LIB="$SETLOCALE_NULL_LIB" else SETLOCALE_LIB= fi dnl SETLOCALE_LIB is expected to be '-pthread' or '-lpthread' on AIX with gcc dnl or xlc, and empty otherwise. AC_SUBST([SETLOCALE_LIB]) dnl For backward compatibility. LIB_SETLOCALE="$SETLOCALE_LIB" AC_SUBST([LIB_SETLOCALE]) ]) # Prerequisites of lib/setlocale.c. AC_DEFUN([gl_PREREQ_SETLOCALE], [ dnl No need to check for CFLocaleCopyPreferredLanguages and dnl CFPreferencesCopyAppValue because lib/setlocale.c is not used on Mac OS X. dnl (The Mac OS X specific code is only used in libintl.) : ]) ��������������������������gnuastro-0.22/bootstrapped/m4/setlocale_null.m4�����������������������������������������������������0000644�0001750�0001750�00000010323�14557510506�015264� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# setlocale_null.m4 serial 9 dnl Copyright (C) 2019-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SETLOCALE_NULL], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PTHREADLIB]) AC_CHECK_HEADERS_ONCE([threads.h]) AC_CACHE_CHECK([whether setlocale (LC_ALL, NULL) is multithread-safe], [gl_cv_func_setlocale_null_all_mtsafe], [case "$host_os" in # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku. *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku*) gl_cv_func_setlocale_null_all_mtsafe=no ;; # Guess no on Cygwin < 3.4.6. cygwin*) AC_EGREP_CPP([Lucky user], [ #if defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED >= CYGWIN_VERSION_DLL_MAKE_COMBINED (3004, 6) Lucky user #endif #endif ], [gl_cv_func_setlocale_null_all_mtsafe=yes], [gl_cv_func_setlocale_null_all_mtsafe=no]) ;; # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows. *-gnu* | gnu* | hpux* | irix* | solaris* | mingw* | windows*) gl_cv_func_setlocale_null_all_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;; esac ]) dnl On platforms without multithreading, there is no issue. case "$host_os" in mingw* | windows*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_all_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_all_mtsafe" in *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;; *) SETLOCALE_NULL_ALL_MTSAFE=0 ;; esac AC_DEFINE_UNQUOTED([SETLOCALE_NULL_ALL_MTSAFE], [$SETLOCALE_NULL_ALL_MTSAFE], [Define to 1 if setlocale (LC_ALL, NULL) is multithread-safe.]) dnl This is about a single category (not LC_ALL). AC_CACHE_CHECK([whether setlocale (category, NULL) is multithread-safe], [gl_cv_func_setlocale_null_one_mtsafe], [case "$host_os" in # Guess no on OpenBSD, AIX. openbsd* | aix*) gl_cv_func_setlocale_null_one_mtsafe=no ;; # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows. *-gnu* | gnu* | *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw* | windows*) gl_cv_func_setlocale_null_one_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;; esac ]) dnl On platforms without multithreading, there is no issue. case "$host_os" in mingw* | windows*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_one_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_one_mtsafe" in *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;; *) SETLOCALE_NULL_ONE_MTSAFE=0 ;; esac AC_DEFINE_UNQUOTED([SETLOCALE_NULL_ONE_MTSAFE], [$SETLOCALE_NULL_ONE_MTSAFE], [Define to 1 if setlocale (category, NULL) is multithread-safe.]) dnl Determine link dependencies of lib/setlocale_null.c and lib/setlocale-lock.c. if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then case "$host_os" in mingw* | windows*) SETLOCALE_NULL_LIB= ;; *) gl_WEAK_SYMBOLS case "$gl_cv_have_weak" in *yes) SETLOCALE_NULL_LIB= ;; *) SETLOCALE_NULL_LIB="$LIBPTHREAD" ;; esac ;; esac else SETLOCALE_NULL_LIB= fi dnl SETLOCALE_NULL_LIB is expected to be '-pthread' or '-lpthread' on AIX dnl with gcc or xlc, and empty otherwise. AC_SUBST([SETLOCALE_NULL_LIB]) dnl For backward compatibility. LIB_SETLOCALE_NULL="$SETLOCALE_NULL_LIB" AC_SUBST([LIB_SETLOCALE_NULL]) ]) # Prerequisites of lib/setlocale-lock.c. AC_DEFUN([gl_PREREQ_SETLOCALE_LOCK], [ gl_VISIBILITY ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/signal_h.m4�����������������������������������������������������������0000644�0001750�0001750�00000007315�14557510506�014052� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# signal_h.m4 serial 22 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SIGNAL_H], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T]) gl_NEXT_HEADERS([signal.h]) # AIX declares sig_atomic_t to already include volatile, and C89 compilers # then choke on 'volatile sig_atomic_t'. C99 requires that it compile. AC_CHECK_TYPE([volatile sig_atomic_t], [], [HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0], [[ #include <signal.h> ]]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) AC_REQUIRE([AC_TYPE_UID_T]) dnl Persuade glibc <signal.h> to define sighandler_t. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_TYPE([sighandler_t], [], [HAVE_SIGHANDLER_T=0], [[ #include <signal.h> ]]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <signal.h> ]], [pthread_sigmask sigaction sigaddset sigdelset sigemptyset sigfillset sigismember sigpending sigprocmask]) AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_CHECK_TYPE_SIGSET_T], [ AC_CHECK_TYPES([sigset_t], [gl_cv_type_sigset_t=yes], [gl_cv_type_sigset_t=no], [[ #include <signal.h> /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */ #include <sys/types.h> ]]) if test $gl_cv_type_sigset_t != yes; then HAVE_SIGSET_T=0 fi ]) # gl_SIGNAL_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SIGNAL_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SIGNAL_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SIGNAL_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_SIGMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RAISE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGNAL_H_SIGPIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGPROCMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGACTION]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SIGNAL_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) ]) AC_DEFUN([gl_SIGNAL_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_POSIX_SIGNALBLOCKING=1; AC_SUBST([HAVE_POSIX_SIGNALBLOCKING]) HAVE_PTHREAD_SIGMASK=1; AC_SUBST([HAVE_PTHREAD_SIGMASK]) HAVE_RAISE=1; AC_SUBST([HAVE_RAISE]) HAVE_SIGSET_T=1; AC_SUBST([HAVE_SIGSET_T]) HAVE_SIGINFO_T=1; AC_SUBST([HAVE_SIGINFO_T]) HAVE_SIGACTION=1; AC_SUBST([HAVE_SIGACTION]) HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; AC_SUBST([HAVE_STRUCT_SIGACTION_SA_SIGACTION]) HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; AC_SUBST([HAVE_TYPE_VOLATILE_SIG_ATOMIC_T]) HAVE_SIGHANDLER_T=1; AC_SUBST([HAVE_SIGHANDLER_T]) REPLACE_PTHREAD_SIGMASK=0; AC_SUBST([REPLACE_PTHREAD_SIGMASK]) REPLACE_RAISE=0; AC_SUBST([REPLACE_RAISE]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/signalblocking.m4�����������������������������������������������������0000644�0001750�0001750�00000001562�14557510506�015252� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# signalblocking.m4 serial 17 dnl Copyright (C) 2001-2002, 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Determine available signal blocking primitives. Three different APIs exist: # 1) POSIX: sigemptyset, sigaddset, sigprocmask # 2) SYSV: sighold, sigrelse # 3) BSD: sigblock, sigsetmask # For simplicity, here we check only for the POSIX signal blocking. AC_DEFUN([gl_SIGNALBLOCKING], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T]) HAVE_POSIX_SIGNALBLOCKING=0 if test "$gl_cv_type_sigset_t" = yes; then AC_CHECK_FUNC([sigprocmask], [HAVE_POSIX_SIGNALBLOCKING=1]) fi ]) # Prerequisites of lib/sigprocmask.c. AC_DEFUN([gl_PREREQ_SIGPROCMASK], [:]) ����������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/signbit.m4������������������������������������������������������������0000644�0001750�0001750�00000031230�14557510506�013716� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# signbit.m4 serial 22 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SIGNBIT], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([for signbit macro], [gl_cv_func_signbit], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> /* If signbit is defined as a function, don't use it, since calling it for 'float' or 'long double' arguments would involve conversions. If signbit is not declared at all but exists as a library function, don't use it, since the prototype may not match. If signbit is not declared at all but exists as a compiler built-in, don't use it, since it's preferable to use __builtin_signbit* (no warnings, no conversions). */ #ifndef signbit # error "signbit should be a macro" #endif #include <string.h> ]gl_SIGNBIT_TEST_PROGRAM ])], [gl_cv_func_signbit=yes], [gl_cv_func_signbit=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_signbit="guessing yes" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_signbit="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_signbit="$gl_cross_guess_normal" ;; esac ]) ]) dnl GCC >= 4.0 and clang provide three built-ins for signbit. dnl They can be used without warnings, also in C++, regardless of <math.h>. dnl But they may expand to calls to functions, which may or may not be in dnl libc. AC_CACHE_CHECK([for signbit compiler built-ins], [gl_cv_func_signbit_builtins], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # define signbit(x) \ (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ __builtin_signbitf (x)) #else # error "signbit should be three compiler built-ins" #endif #include <string.h> ]gl_SIGNBIT_TEST_PROGRAM ])], [gl_cv_func_signbit_builtins=yes], [gl_cv_func_signbit_builtins=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_signbit_builtins="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_signbit_builtins="guessing yes" ;; # Guess yes on mingw, no on MSVC. mingw* | windows*) if test -n "$GCC"; then gl_cv_func_signbit_builtins="guessing yes" else gl_cv_func_signbit_builtins="guessing no" fi ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_signbit_builtins="$gl_cross_guess_normal" ;; esac ]) ]) dnl Use the compiler built-ins whenever possible, because they are more dnl efficient than the system library functions (if they exist). case "$gl_cv_func_signbit_builtins" in *yes) REPLACE_SIGNBIT_USING_BUILTINS=1 ;; *) case "$gl_cv_func_signbit" in *yes) ;; *) dnl REPLACE_SIGNBIT=1 makes sure the signbit[fdl] functions get built. REPLACE_SIGNBIT=1 ;; esac ;; esac dnl On Solaris 10, with CC in C++ mode, signbit is not available although dnl is with cc in C mode. This cannot be worked around by defining dnl _XOPEN_SOURCE=600, because the latter does not work in C++ mode on dnl Solaris 11.0. Therefore use the replacement functions on Solaris. case "$host_os" in solaris*) REPLACE_SIGNBIT=1 ;; esac if test $REPLACE_SIGNBIT = 1; then gl_FLOAT_SIGN_LOCATION gl_DOUBLE_SIGN_LOCATION gl_LONG_DOUBLE_SIGN_LOCATION if test "$gl_cv_cc_float_signbit" = unknown; then dnl Test whether copysignf() is declared. AC_CHECK_DECLS([copysignf], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_copysignf" = yes; then dnl Test whether copysignf() can be used without libm. AC_CACHE_CHECK([whether copysignf can be used without linking with libm], [gl_cv_func_copysignf_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> float x, y;]], [[return copysignf (x, y) < 0;]])], [gl_cv_func_copysignf_no_libm=yes], [gl_cv_func_copysignf_no_libm=no]) ]) if test $gl_cv_func_copysignf_no_libm = yes; then AC_DEFINE([HAVE_COPYSIGNF_IN_LIBC], [1], [Define if the copysignf function is declared in <math.h> and available in libc.]) fi fi fi if test "$gl_cv_cc_double_signbit" = unknown; then dnl Test whether copysign() is declared. AC_CHECK_DECLS([copysign], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_copysign" = yes; then dnl Test whether copysign() can be used without libm. AC_CACHE_CHECK([whether copysign can be used without linking with libm], [gl_cv_func_copysign_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> double x, y;]], [[return copysign (x, y) < 0;]])], [gl_cv_func_copysign_no_libm=yes], [gl_cv_func_copysign_no_libm=no]) ]) if test $gl_cv_func_copysign_no_libm = yes; then AC_DEFINE([HAVE_COPYSIGN_IN_LIBC], [1], [Define if the copysign function is declared in <math.h> and available in libc.]) fi fi fi if test "$gl_cv_cc_long_double_signbit" = unknown; then dnl Test whether copysignl() is declared. AC_CHECK_DECLS([copysignl], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_copysignl" = yes; then dnl Test whether copysignl() can be used without libm. AC_CACHE_CHECK([whether copysignl can be used without linking with libm], [gl_cv_func_copysignl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> long double x, y;]], [[return copysignl (x, y) < 0;]])], [gl_cv_func_copysignl_no_libm=yes], [gl_cv_func_copysignl_no_libm=no]) ]) if test $gl_cv_func_copysignl_no_libm = yes; then AC_DEFINE([HAVE_COPYSIGNL_IN_LIBC], [1], [Define if the copysignl function is declared in <math.h> and available in libc.]) fi fi fi fi ]) AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[ /* Global variables. Needed because GCC 4 constant-folds __builtin_signbitl (literal) but cannot constant-fold __builtin_signbitl (variable). */ float vf; double vd; long double vl; int main () { /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. So we use -p0f and -p0d instead. */ float p0f = 0.0f; float m0f = -p0f; double p0d = 0.0; double m0d = -p0d; /* On HP-UX 10.20, negating 0.0L does not yield -0.0L. So we use another constant expression instead. But that expression does not work on other platforms, such as when cross-compiling to PowerPC on Mac OS X 10.5. */ long double p0l = 0.0L; #if defined __hpux || defined __sgi long double m0l = -LDBL_MIN * LDBL_MIN; #else long double m0l = -p0l; #endif int result = 0; if (signbit (vf)) /* link check */ vf++; { float plus_inf = 1.0f / p0f; float minus_inf = -1.0f / p0f; if (!(!signbit (255.0f) && signbit (-255.0f) && !signbit (p0f) && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 1; } if (signbit (vd)) /* link check */ vd++; { double plus_inf = 1.0 / p0d; double minus_inf = -1.0 / p0d; if (!(!signbit (255.0) && signbit (-255.0) && !signbit (p0d) && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 2; } if (signbit (vl)) /* link check */ vl++; { long double plus_inf = 1.0L / p0l; long double minus_inf = -1.0L / p0l; if (signbit (255.0L)) result |= 4; if (!signbit (-255.0L)) result |= 4; if (signbit (p0l)) result |= 8; if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) result |= 16; if (signbit (plus_inf)) result |= 32; if (!signbit (minus_inf)) result |= 64; } return result; } ]]) AC_DEFUN([gl_FLOAT_SIGN_LOCATION], [ gl_FLOATTYPE_SIGN_LOCATION([float], [gl_cv_cc_float_signbit], [f], [FLT]) ]) AC_DEFUN([gl_DOUBLE_SIGN_LOCATION], [ gl_FLOATTYPE_SIGN_LOCATION([double], [gl_cv_cc_double_signbit], [], [DBL]) ]) AC_DEFUN([gl_LONG_DOUBLE_SIGN_LOCATION], [ gl_FLOATTYPE_SIGN_LOCATION([long double], [gl_cv_cc_long_double_signbit], [L], [LDBL]) ]) AC_DEFUN([gl_FLOATTYPE_SIGN_LOCATION], [ AC_CACHE_CHECK([where to find the sign bit in a '$1'], [$2], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stddef.h> #include <stdio.h> #define NWORDS \ ((sizeof ($1) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { $1 value; unsigned int word[NWORDS]; } memory_float; static memory_float plus = { 1.0$3 }; static memory_float minus = { -1.0$3 }; int main () { size_t j, k, i; unsigned int m; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; /* Find the different bit. */ k = 0; m = 0; for (j = 0; j < NWORDS; j++) { unsigned int x = plus.word[j] ^ minus.word[j]; if ((x & (x - 1)) || (x && m)) { /* More than one bit difference. */ fprintf (fp, "unknown"); fclose (fp); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); fclose (fp); return 3; } /* Now m = plus.word[k] ^ ~minus.word[k]. */ if (plus.word[k] & ~minus.word[k]) { /* Oh? The sign bit is set in the positive and cleared in the negative numbers? */ fprintf (fp, "unknown"); fclose (fp); return 4; } for (i = 0; ; i++) if ((m >> i) & 1) break; fprintf (fp, "word %d bit %d", (int) k, (int) i); if (fclose (fp) != 0) return 5; return 0; } ]])], [$2=`cat conftest.out`], [$2="unknown"], [ dnl When cross-compiling, we don't know. It depends on the dnl ABI and compiler version. There are too many cases. $2="unknown" ]) rm -f conftest.out ]) case "$]$2[" in word*bit*) word=`echo "$]$2[" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$]$2[" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([$4][_SIGNBIT_WORD], [$word], [Define as the word index where to find the sign of '$1'.]) AC_DEFINE_UNQUOTED([$4][_SIGNBIT_BIT], [$bit], [Define as the bit index in the word where to find the sign of '$1'.]) ;; esac ]) # Expands to code that defines a function signbitf(float). # It extracts the sign bit of a non-NaN value. AC_DEFUN([gl_FLOAT_SIGNBIT_CODE], [ gl_FLOATTYPE_SIGNBIT_CODE([float], [f], [f]) ]) # Expands to code that defines a function signbitd(double). # It extracts the sign bit of a non-NaN value. AC_DEFUN([gl_DOUBLE_SIGNBIT_CODE], [ gl_FLOATTYPE_SIGNBIT_CODE([double], [d], []) ]) # Expands to code that defines a function signbitl(long double). # It extracts the sign bit of a non-NaN value. AC_DEFUN([gl_LONG_DOUBLE_SIGNBIT_CODE], [ gl_FLOATTYPE_SIGNBIT_CODE([long double], [l], [L]) ]) AC_DEFUN([gl_FLOATTYPE_SIGNBIT_CODE], [[ static int signbit$2 ($1 value) { typedef union { $1 f; unsigned char b[sizeof ($1)]; } float_union; static float_union plus_one = { 1.0$3 }; /* unused bits are zero here */ static float_union minus_one = { -1.0$3 }; /* unused bits are zero here */ /* Compute the sign bit mask as the XOR of plus_one and minus_one. */ float_union u; unsigned int i; u.f = value; for (i = 0; i < sizeof ($1); i++) if (u.b[i] & (plus_one.b[i] ^ minus_one.b[i])) return 1; return 0; } ]]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/size_max.m4�����������������������������������������������������������0000644�0001750�0001750�00000005476�14557510506�014113� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# size_max.m4 serial 12 dnl Copyright (C) 2003, 2005-2006, 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.61]) AC_DEFUN([gl_SIZE_MAX], [ AC_CHECK_HEADERS([stdint.h]) dnl First test whether the system already has SIZE_MAX. AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ gl_cv_size_max=no AC_EGREP_CPP([Found it], [ #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #ifdef SIZE_MAX Found it #endif ], [gl_cv_size_max=yes]) if test $gl_cv_size_max != yes; then dnl Define it ourselves. Here we assume that the type 'size_t' is not wider dnl than the type 'unsigned long'. Try hard to find a definition that can dnl be used in a preprocessor #if, i.e. doesn't contain a cast. AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], [#include <stddef.h> #include <limits.h>], [size_t_bits_minus_1=]) AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], [#include <stddef.h>], [fits_in_uint=]) if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then if test $fits_in_uint = 1; then dnl Even though SIZE_MAX fits in an unsigned int, it must be of type dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> extern size_t foo; extern unsigned long foo; ]], [[]])], [fits_in_uint=0]) fi dnl We cannot use 'expr' to simplify this expression, because 'expr' dnl works only with 'long' integers in the host environment, while we dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" else gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" fi else dnl Shouldn't happen, but who knows... gl_cv_size_max='((size_t)~(size_t)0)' fi fi ]) if test "$gl_cv_size_max" != yes; then AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], [Define as the maximum value of type 'size_t', if the system doesn't define it.]) fi dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with dnl #define by AC_DEFINE_UNQUOTED. AH_VERBATIM([SIZE_MAX], [/* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #ifndef SIZE_MAX # undef SIZE_MAX #endif]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/sleep.m4��������������������������������������������������������������0000644�0001750�0001750�00000004767�14557510506�013406� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sleep.m4 serial 13 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SLEEP], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl We expect to see the declaration of sleep() in a header file. dnl Older versions of mingw have a sleep() function that is an alias to dnl _sleep() in MSVCRT. It has a different signature than POSIX sleep(): dnl it takes the number of milliseconds as argument and returns void. dnl mingw does not declare this function. AC_CHECK_DECLS([sleep], , , [[#include <unistd.h>]]) AC_CHECK_FUNCS_ONCE([sleep]) if test $ac_cv_have_decl_sleep != yes; then HAVE_SLEEP=0 else dnl Cygwin 1.5.x has a bug where sleep can't exceed 49.7 days. AC_CACHE_CHECK([for working sleep], [gl_cv_func_sleep_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <errno.h> #include <unistd.h> #include <signal.h> static void handle_alarm (int sig) { if (sig != SIGALRM) _exit (2); } ]], [[ /* Failure to compile this test due to missing alarm is okay, since all such platforms (mingw) also lack sleep. */ unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ unsigned int remaining; signal (SIGALRM, handle_alarm); alarm (1); remaining = sleep (pentecost); if (remaining > pentecost) return 3; if (remaining <= pentecost - 10) return 4; return 0; ]])], [gl_cv_func_sleep_works=yes], [gl_cv_func_sleep_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_sleep_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_sleep_works="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_sleep_works="guessing yes" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_sleep_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_sleep_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_sleep_works" in *yes) ;; *) REPLACE_SLEEP=1 ;; esac fi ]) ���������gnuastro-0.22/bootstrapped/m4/snan.m4���������������������������������������������������������������0000644�0001750�0001750�00000000726�14557510506�013224� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# snan.m4 serial 3 dnl Copyright (C) 2023-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites for lib/snan.h. AC_DEFUN_ONCE([gl_SNAN], [ gl_FLOAT_EXPONENT_LOCATION gl_DOUBLE_EXPONENT_LOCATION gl_LONG_DOUBLE_EXPONENT_LOCATION AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) ]) ������������������������������������������gnuastro-0.22/bootstrapped/m4/socketlib.m4����������������������������������������������������������0000644�0001750�0001750�00000006105�14557510506�014241� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# socketlib.m4 serial 4 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl gl_SOCKETLIB dnl Determines the library to use for socket functions. dnl Sets and AC_SUBSTs LIBSOCKET. AC_DEFUN([gl_SOCKETLIB], [ gl_PREREQ_SYS_H_WINSOCK2 dnl for HAVE_WINSOCK2_H LIBSOCKET= if test $HAVE_WINSOCK2_H = 1; then dnl Native Windows API (not Cygwin). dnl If the function WSAStartup exists (declared in <winsock2.h> and dnl defined through -lws2_32), we need to call it. AC_CACHE_CHECK([for WSAStartup], [gl_cv_func_wsastartup], [ gl_saved_LIBS="$LIBS" LIBS="$LIBS -lws2_32" AC_LINK_IFELSE( [AC_LANG_PROGRAM([[ #ifdef HAVE_WINSOCK2_H # include <winsock2.h> #endif]], [[ WORD wVersionRequested = MAKEWORD(1, 1); WSADATA wsaData; int err = WSAStartup(wVersionRequested, &wsaData); WSACleanup (); ]]) ], [gl_cv_func_wsastartup=yes], [gl_cv_func_wsastartup=no]) LIBS="$gl_saved_LIBS" ]) if test "$gl_cv_func_wsastartup" = "yes"; then AC_DEFINE([WINDOWS_SOCKETS], [1], [Define if WSAStartup is needed.]) LIBSOCKET='-lws2_32' fi else dnl Unix API. dnl Solaris has most socket functions in libsocket. dnl Haiku has most socket functions in libnetwork. dnl BeOS has most socket functions in libnet. dnl On HP-UX, do NOT link with libxnet, because in 64-bit mode this would dnl break code (e.g. in libraries) that invokes accept(), getpeername(), dnl getsockname(), getsockopt(), or recvfrom() with a 32-bit addrlen. See dnl "man xopen_networking" for details. AC_CACHE_CHECK([for library containing setsockopt], [gl_cv_lib_socket], [ gl_cv_lib_socket= AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern #ifdef __cplusplus "C" #endif char setsockopt();]], [[setsockopt();]])], [], [gl_saved_LIBS="$LIBS" LIBS="$gl_saved_LIBS -lsocket" AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern #ifdef __cplusplus "C" #endif char setsockopt();]], [[setsockopt();]])], [gl_cv_lib_socket="-lsocket"]) if test -z "$gl_cv_lib_socket"; then LIBS="$gl_saved_LIBS -lnetwork" AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern #ifdef __cplusplus "C" #endif char setsockopt();]], [[setsockopt();]])], [gl_cv_lib_socket="-lnetwork"]) if test -z "$gl_cv_lib_socket"; then LIBS="$gl_saved_LIBS -lnet" AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern #ifdef __cplusplus "C" #endif char setsockopt();]], [[setsockopt();]])], [gl_cv_lib_socket="-lnet"]) fi fi LIBS="$gl_saved_LIBS" ]) if test -z "$gl_cv_lib_socket"; then gl_cv_lib_socket="none needed" fi ]) if test "$gl_cv_lib_socket" != "none needed"; then LIBSOCKET="$gl_cv_lib_socket" fi fi AC_SUBST([LIBSOCKET]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/sockets.m4������������������������������������������������������������0000644�0001750�0001750�00000000707�14557510506�013737� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sockets.m4 serial 7 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SOCKETS], [ AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([gl_SOCKETLIB]) gl_PREREQ_SOCKETS ]) # Prerequisites of lib/sockets.c. AC_DEFUN([gl_PREREQ_SOCKETS], [ : ]) ���������������������������������������������������������gnuastro-0.22/bootstrapped/m4/socklen.m4������������������������������������������������������������0000644�0001750�0001750�00000006157�14557510506�013727� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# socklen.m4 serial 11 dnl Copyright (C) 2005-2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Albert Chin, Windows fixes from Simon Josefsson. dnl Check for socklen_t: historically on BSD it is an int, and in dnl POSIX 1g it is a type of its own, but some platforms use different dnl types for the argument to getsockopt, getpeername, etc.: dnl HP-UX 10.20, IRIX 6.5, OSF/1 4.0, Interix 3.5, BeOS. dnl So we have to test to find something that will work. AC_DEFUN([gl_TYPE_SOCKLEN_T], [AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])dnl AC_CHECK_TYPE([socklen_t], , [AC_CACHE_CHECK([for socklen_t equivalent], [gl_cv_socklen_t_equiv], [# Systems have either "struct sockaddr *" or # "void *" as the second argument to getpeername gl_cv_socklen_t_equiv= for arg2 in "struct sockaddr" void; do for t in int size_t "unsigned int" "long int" "unsigned long int"; do AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/socket.h> int getpeername (int, $arg2 *, $t *);]], [[$t len; getpeername (0, 0, &len);]])], [gl_cv_socklen_t_equiv="$t"]) test "$gl_cv_socklen_t_equiv" != "" && break done test "$gl_cv_socklen_t_equiv" != "" && break done if test "$gl_cv_socklen_t_equiv" = ""; then AC_MSG_ERROR([Cannot find a type to use in place of socklen_t]) fi ]) AC_DEFINE_UNQUOTED([socklen_t], [$gl_cv_socklen_t_equiv], [type to use in place of socklen_t if not defined])], [gl_SOCKET_HEADERS])]) dnl On mingw32, socklen_t is in ws2tcpip.h ('int'), so we try to find dnl it there too. But on Cygwin, wc2tcpip.h must not be included. Users dnl of this module should use the same include pattern as gl_SOCKET_HEADERS. dnl When you change this macro, keep also in sync: dnl - gl_CHECK_SOCKET_HEADERS, dnl - the Include section of modules/socklen. AC_DEFUN([gl_SOCKET_HEADERS], [ /* <sys/types.h> is not needed according to POSIX, but the <sys/socket.h> in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include <sys/types.h> #if HAVE_SYS_SOCKET_H # include <sys/socket.h> #elif HAVE_WS2TCPIP_H # include <ws2tcpip.h> #endif ]) dnl Tests for the existence of the header for socket facilities. dnl Defines the C macros HAVE_SYS_SOCKET_H, HAVE_WS2TCPIP_H. dnl This macro must match gl_SOCKET_HEADERS. AC_DEFUN([gl_CHECK_SOCKET_HEADERS], [AC_CHECK_HEADERS_ONCE([sys/socket.h]) if test $ac_cv_header_sys_socket_h = no; then dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make dnl the check for those headers unconditional; yet cygwin reports dnl that the headers are present but cannot be compiled (since on dnl cygwin, all socket information should come from sys/socket.h). AC_CHECK_HEADERS([ws2tcpip.h]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/sockpfaf.m4�����������������������������������������������������������0000644�0001750�0001750�00000004767�14557510506�014072� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sockpfaf.m4 serial 10 dnl Copyright (C) 2004, 2006, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Test for some common socket protocol families (PF_INET, PF_INET6, ...) dnl and some common address families (AF_INET, AF_INET6, ...). dnl This test assumes that a system supports an address family if and only if dnl it supports the corresponding protocol family. dnl From Bruno Haible. AC_DEFUN([gl_SOCKET_FAMILIES], [ AC_REQUIRE([gl_SYS_SOCKET_H]) AC_CHECK_HEADERS_ONCE([netinet/in.h]) AC_CACHE_CHECK([for IPv4 sockets], [gl_cv_socket_ipv4], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETINET_IN_H #include <netinet/in.h> #endif #ifdef HAVE_WINSOCK2_H #include <winsock2.h> #endif]], [[int x = AF_INET; struct in_addr y; struct sockaddr_in z; if (&x && &y && &z) return 0;]])], gl_cv_socket_ipv4=yes, gl_cv_socket_ipv4=no)]) if test $gl_cv_socket_ipv4 = yes; then AC_DEFINE([HAVE_IPV4], [1], [Define to 1 if <sys/socket.h> defines AF_INET.]) fi AC_CACHE_CHECK([for IPv6 sockets], [gl_cv_socket_ipv6], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETINET_IN_H #include <netinet/in.h> #endif #ifdef HAVE_WINSOCK2_H #include <winsock2.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif]], [[int x = AF_INET6; struct in6_addr y; struct sockaddr_in6 z; if (&x && &y && &z) return 0;]])], gl_cv_socket_ipv6=yes, gl_cv_socket_ipv6=no)]) if test $gl_cv_socket_ipv6 = yes; then AC_DEFINE([HAVE_IPV6], [1], [Define to 1 if <sys/socket.h> defines AF_INET6.]) fi ]) AC_DEFUN([gl_SOCKET_FAMILY_UNIX], [ AC_REQUIRE([gl_SYS_SOCKET_H]) AC_CHECK_HEADERS_ONCE([sys/un.h]) AC_CACHE_CHECK([for UNIX domain sockets], [gl_cv_socket_unix], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_SYS_UN_H #include <sys/un.h> #endif #ifdef HAVE_WINSOCK2_H #include <winsock2.h> #endif]], [[int x = AF_UNIX; struct sockaddr_un y; if (&x && &y) return 0;]])], gl_cv_socket_unix=yes, gl_cv_socket_unix=no)]) if test $gl_cv_socket_unix = yes; then AC_DEFINE([HAVE_UNIXSOCKET], [1], [Define to 1 if <sys/socket.h> defines AF_UNIX.]) fi ]) ���������gnuastro-0.22/bootstrapped/m4/ssize_t.m4������������������������������������������������������������0000644�0001750�0001750�00000002612�14557510506�013741� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ssize_t.m4 serial 6 dnl Copyright (C) 2001-2003, 2006, 2010-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Define ssize_t if it does not already exist. AC_DEFUN([gt_TYPE_SSIZE_T], [ AC_CACHE_CHECK([for ssize_t], [gl_cv_ssize_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h>]], [[int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x;]])], [gl_cv_ssize_t=yes], [gl_cv_ssize_t=no])]) if test $gl_cv_ssize_t = no; then dnl On 64-bit native Windows, ssize_t needs to be defined as 'long long', dnl for consistency with the 64-bit size_t. AC_CACHE_CHECK([whether size_t is wider than 'long'], [gl_cv_size_t_large], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> typedef int array [2 * (sizeof (size_t) > sizeof (long)) - 1]; ]])], [gl_cv_size_t_large=yes], [gl_cv_size_t_large=no])]) if test $gl_cv_size_t_large = yes; then gl_def_ssize_t='long long' else gl_def_ssize_t='long' fi AC_DEFINE_UNQUOTED([ssize_t], [$gl_def_ssize_t], [Define as a signed type of the same size as size_t.]) fi ]) ����������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/stat-time.m4����������������������������������������������������������0000644�0001750�0001750�00000006057�14557510506�014177� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Checks for stat-related time functions. # Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2024 Free Software # Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # st_atim.tv_nsec - Linux, Solaris, Cygwin # st_atimespec.tv_nsec - FreeBSD, NetBSD, if ! defined _POSIX_SOURCE # st_atimensec - FreeBSD, NetBSD, if defined _POSIX_SOURCE # st_atim.st__tim.tv_nsec - UnixWare (at least 2.1.2 through 7.1) # st_birthtimespec - FreeBSD, NetBSD (hidden on OpenBSD 3.9, anyway) # st_birthtim - Cygwin 1.7.0+ AC_DEFUN([gl_STAT_TIME], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CHECK_MEMBERS([struct stat.st_atim.tv_nsec], [AC_CACHE_CHECK([whether struct stat.st_atim is of type struct timespec], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[ #include <sys/types.h> #include <sys/stat.h> #if HAVE_SYS_TIME_H # include <sys/time.h> #endif #include <time.h> struct timespec ts; struct stat st; ]], [[ st.st_atim = ts; ]])], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no])]) if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then AC_DEFINE([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC], [1], [Define to 1 if the type of the st_atim member of a struct stat is struct timespec.]) fi], [AC_CHECK_MEMBERS([struct stat.st_atimespec.tv_nsec], [], [AC_CHECK_MEMBERS([struct stat.st_atimensec], [], [AC_CHECK_MEMBERS([struct stat.st_atim.st__tim.tv_nsec], [], [], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>]) ]) # Check for st_birthtime, a feature from UFS2 (FreeBSD, NetBSD, OpenBSD, etc.) # and NTFS (Cygwin). # There was a time when this field was named st_createtime (21 June # 2002 to 16 July 2002) But that window is very small and applied only # to development code, so systems still using that configuration are # not supported. See revisions 1.10 and 1.11 of FreeBSD's # src/sys/ufs/ufs/dinode.h. # AC_DEFUN([gl_STAT_BIRTHTIME], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec], [], [AC_CHECK_MEMBERS([struct stat.st_birthtimensec], [], [AC_CHECK_MEMBERS([struct stat.st_birthtim.tv_nsec], [], [], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/stat.m4���������������������������������������������������������������0000644�0001750�0001750�00000006000�14557510506�013227� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 21 # Copyright (C) 2009-2024 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([lstat]) case "$host_os" in mingw* | windows*) dnl On this platform, the original stat() returns st_atime, st_mtime, dnl st_ctime values that are affected by the time zone. REPLACE_STAT=1 ;; *) dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/"). dnl (For mingw, this is due to a broken stat() override in libmingwex.a.) dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/"). AC_CACHE_CHECK([whether stat handles trailing slashes on files], [gl_cv_func_stat_file_slash], [touch conftest.tmp # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.tmp conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/stat.h> ]], [[int result = 0; struct stat st; if (!stat ("conftest.tmp/", &st)) result |= 1; #if HAVE_LSTAT if (!stat ("conftest.lnk/", &st)) result |= 2; #endif return result; ]])], [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_stat_file_slash="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_stat_file_slash="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.tmp conftest.lnk]) case $gl_cv_func_stat_file_slash in *no) REPLACE_STAT=1 AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs help when passed a file name with a trailing slash]);; esac case $host_os in dnl macOS and Solaris stat can return a negative tv_nsec. darwin* | solaris*) REPLACE_FSTAT=1 ;; esac ;; esac ]) # Prerequisites of lib/stat.c and lib/stat-w32.c. AC_DEFUN([gl_PREREQ_STAT], [ AC_REQUIRE([gl_SYS_STAT_H]) AC_REQUIRE([gl_PREREQ_STAT_W32]) : ]) # Prerequisites of lib/stat-w32.c. AC_DEFUN([gl_PREREQ_STAT_W32], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw* | windows*) AC_CHECK_HEADERS([sdkddkver.h]) ;; esac ]) gnuastro-0.22/bootstrapped/m4/stdalign.m4�����������������������������������������������������������0000644�0001750�0001750�00000017335�14557510506�014076� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for alignas and alignof that conform to C23. dnl Copyright 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert and Bruno Haible. # Prepare for substituting <stdalign.h> if it is not supported. AC_DEFUN([gl_ALIGNASOF], [ AC_CACHE_CHECK([for alignas and alignof], [gl_cv_header_working_stdalign_h], [gl_saved_CFLAGS=$CFLAGS for gl_working in "yes, keywords" "yes, <stdalign.h> macros"; do AS_CASE([$gl_working], [*stdalign.h*], [CFLAGS="$gl_saved_CFLAGS -DINCLUDE_STDALIGN_H"]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdint.h> #ifdef INCLUDE_STDALIGN_H #include <stdalign.h> #endif #include <stddef.h> /* Test that alignof yields a result consistent with offsetof. This catches GCC bug 52023 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */ #ifdef __cplusplus template <class t> struct alignof_helper { char a; t b; }; # define ao(type) offsetof (alignof_helper<type>, b) #else # define ao(type) offsetof (struct { char a; type b; }, b) #endif char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1]; char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1]; char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1]; /* Test alignas only on platforms where gnulib can help. */ #if \ ((defined __cplusplus && 201103 <= __cplusplus) \ || (__TINYC__ && defined __attribute__) \ || (defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ : __GNUC__) \ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \ || 1300 <= _MSC_VER) struct alignas_test { char c; char alignas (8) alignas_8; }; char test_alignas[offsetof (struct alignas_test, alignas_8) == 8 ? 1 : -1]; #endif ]])], [gl_cv_header_working_stdalign_h=$gl_working], [gl_cv_header_working_stdalign_h=no]) CFLAGS=$gl_saved_CFLAGS test "$gl_cv_header_working_stdalign_h" != no && break done]) AS_CASE([$gl_cv_header_working_stdalign_h], [yes*keyword*], [AC_DEFINE([HAVE_C_ALIGNASOF], [1], [Define to 1 if the alignas and alignof keywords work.])]) dnl The "zz" puts this toward config.h's end, to avoid potential dnl collisions with other definitions. AH_VERBATIM([zzalignas], [#if !defined HAVE_C_ALIGNASOF \ && !(defined __cplusplus && 201103 <= __cplusplus) \ && !defined alignof # if defined HAVE_STDALIGN_H # include <stdalign.h> # endif /* ISO C23 alignas and alignof for platforms that lack it. References: ISO C23 (latest free draft <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf>) sections 6.5.3.4, 6.7.5, 7.15. C++11 (latest free draft <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf>) section 18.10. */ /* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment requirement of a structure member (i.e., slot or field) that is of type TYPE, as an integer constant expression. This differs from GCC's and clang's __alignof__ operator, which can yield a better-performing alignment for an object of that type. For example, on x86 with GCC and on Linux/x86 with clang, __alignof__ (double) and __alignof__ (long long) are 8, whereas alignof (double) and alignof (long long) are 4 unless the option '-malign-double' is used. The result cannot be used as a value for an 'enum' constant, if you want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. */ /* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. clang versions < 8.0.0 have the same bug. */ # if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \ || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9) \ && !defined __clang__) \ || (defined __clang__ && __clang_major__ < 8)) # undef/**/_Alignof # ifdef __cplusplus # if (201103 <= __cplusplus || defined _MSC_VER) # define _Alignof(type) alignof (type) # else template <class __t> struct __alignof_helper { char __a; __t __b; }; # if (defined __GNUC__ && 4 <= __GNUC__) || defined __clang__ # define _Alignof(type) __builtin_offsetof (__alignof_helper<type>, __b) # else # define _Alignof(type) offsetof (__alignof_helper<type>, __b) # endif # define _GL_STDALIGN_NEEDS_STDDEF 1 # endif # else # if (defined __GNUC__ && 4 <= __GNUC__) || defined __clang__ # define _Alignof(type) __builtin_offsetof (struct { char __a; type __b; }, __b) # else # define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) # define _GL_STDALIGN_NEEDS_STDDEF 1 # endif # endif # endif # if ! (defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER)) # undef/**/alignof # define alignof _Alignof # endif /* alignas (A), also known as _Alignas (A), aligns a variable or type to the alignment A, where A is an integer constant expression. For example: int alignas (8) foo; struct s { int a; int alignas (8) bar; }; aligns the address of FOO and the offset of BAR to be multiples of 8. A should be a power of two that is at least the type's alignment and at most the implementation's alignment limit. This limit is 2**28 on typical GNUish hosts, and 2**13 on MSVC. To be portable to MSVC through at least version 10.0, A should be an integer constant, as MSVC does not support expressions such as 1 << 3. To be portable to Sun C 5.11, do not align auto variables to anything stricter than their default alignment. The following C23 requirements are not supported here: - If A is zero, alignas has no effect. - alignas can be used multiple times; the strictest one wins. - alignas (TYPE) is equivalent to alignas (alignof (TYPE)). */ # if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 # if defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER) # define _Alignas(a) alignas (a) # elif (!defined __attribute__ \ && ((defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ : __GNUC__ && !defined __ibmxl__) \ || (4 <= __clang_major__) \ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__)) # define _Alignas(a) __attribute__ ((__aligned__ (a))) # elif 1300 <= _MSC_VER # define _Alignas(a) __declspec (align (a)) # endif # endif # if !defined HAVE_STDALIGN_H # if ((defined _Alignas \ && !(defined __cplusplus \ && (201103 <= __cplusplus || defined _MSC_VER))) \ || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) # define alignas _Alignas # endif # endif # if defined _GL_STDALIGN_NEEDS_STDDEF # include <stddef.h> # endif #endif]) ]) AC_DEFUN([gl_STDALIGN_H], [ AC_REQUIRE([gl_ALIGNASOF]) if test "$gl_cv_header_working_stdalign_h" = no; then GL_GENERATE_STDALIGN_H=true else GL_GENERATE_STDALIGN_H=false fi gl_CHECK_NEXT_HEADERS([stdalign.h]) if test $ac_cv_header_stdalign_h = yes; then HAVE_STDALIGN_H=1 else HAVE_STDALIGN_H=0 fi AC_SUBST([HAVE_STDALIGN_H]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/stddef_h.m4�����������������������������������������������������������0000644�0001750�0001750�00000010630�14557510506�014040� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stddef_h.m4 serial 14 dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl A placeholder for <stddef.h>, for platforms that have issues. AC_DEFUN_ONCE([gl_STDDEF_H], [ AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) dnl Persuade OpenBSD <stddef.h> to declare max_align_t. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) GL_GENERATE_STDDEF_H=false dnl Test whether the type max_align_t exists and whether its alignment dnl "is as great as is supported by the implementation in all contexts". AC_CACHE_CHECK([for good max_align_t], [gl_cv_type_max_align_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* On FreeBSD 12.0/x86, max_align_t defined by <stddef.h> has the correct alignment with the default (wrong) definition of _Alignof, but a wrong alignment as soon as we activate an ISO C compliant _Alignof definition. */ #if ((defined __GNUC__ && 4 <= __GNUC__) || defined __clang__) && !defined __cplusplus #define _Alignof(type) __builtin_offsetof (struct { char __a; type __b; }, __b) #endif #include <stddef.h> unsigned int s = sizeof (max_align_t); #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; #endif typedef struct { char a; max_align_t b; } max_helper; typedef struct { char a; long b; } long_helper; typedef struct { char a; double b; } double_helper; typedef struct { char a; long double b; } long_double_helper; int check3[2 * (offsetof (long_helper, b) <= offsetof (max_helper, b)) - 1]; int check4[2 * (offsetof (double_helper, b) <= offsetof (max_helper, b)) - 1]; int check5[2 * (offsetof (long_double_helper, b) <= offsetof (max_helper, b)) - 1]; ]])], [gl_cv_type_max_align_t=yes], [gl_cv_type_max_align_t=no]) ]) if test $gl_cv_type_max_align_t = no; then HAVE_MAX_ALIGN_T=0 GL_GENERATE_STDDEF_H=true fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 GL_GENERATE_STDDEF_H=true fi AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], [gl_cv_decl_null_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h> int test[2 * (sizeof NULL == sizeof (void *)) -1]; ]])], [gl_cv_decl_null_works=yes], [gl_cv_decl_null_works=no])]) if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 GL_GENERATE_STDDEF_H=true fi AC_CACHE_CHECK([for unreachable], [gl_cv_func_unreachable], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> ]], [[unreachable (); ]])], [gl_cv_func_unreachable=yes], [gl_cv_func_unreachable=no]) ]) if test $gl_cv_func_unreachable = no; then GL_GENERATE_STDDEF_H=true fi if $GL_GENERATE_STDDEF_H; then gl_NEXT_HEADERS([stddef.h]) fi ]) # gl_STDDEF_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STDDEF_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STDDEF_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDDEF_H_MODULE_INDICATOR_DEFAULTS], [ ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STDDEF_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) ]) AC_DEFUN([gl_STDDEF_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) HAVE_MAX_ALIGN_T=1; AC_SUBST([HAVE_MAX_ALIGN_T]) HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) ]) ��������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/stdint.m4�������������������������������������������������������������0000644�0001750�0001750�00000043254�14557510506�013575� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdint.m4 serial 63 dnl Copyright (C) 2001-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert and Bruno Haible. dnl Test whether <stdint.h> is supported or must be substituted. AC_PREREQ([2.61]) AC_DEFUN_ONCE([gl_STDINT_H], [ AC_PREREQ([2.59])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_LIMITS_H]) AC_REQUIRE([gt_TYPE_WINT_T]) dnl For backward compatibility. Some packages may still be testing these dnl macros. AC_DEFINE([HAVE_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'long long int'.]) AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'unsigned long long int'.]) dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does. AC_CHECK_HEADERS_ONCE([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) dnl Check for <inttypes.h>. AC_CHECK_HEADERS_ONCE([inttypes.h]) if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi AC_SUBST([HAVE_INTTYPES_H]) dnl Check for <sys/types.h>. AC_CHECK_HEADERS_ONCE([sys/types.h]) if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi AC_SUBST([HAVE_SYS_TYPES_H]) gl_CHECK_NEXT_HEADERS([stdint.h]) if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi AC_SUBST([HAVE_STDINT_H]) dnl Now see whether we need a substitute <stdint.h>. if test $ac_cv_header_stdint_h = yes; then AC_CACHE_CHECK([whether stdint.h conforms to C99], [gl_cv_header_working_stdint_h], [gl_cv_header_working_stdint_h=no AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" #endif ] gl_STDINT_INCLUDES [ #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ /* ISO C 11 mandates _Generic, but GCC versions < 4.9 lack it. */ #if 201112 <= __STDC_VERSION__ \ && (!defined __GNUC__ || 4 < __GNUC__ + (9 <= __GNUC_MINOR__) \ || defined __clang__) int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || 4 <= __clang_major__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include <limits.h> /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0/ia64 and FreeBSD 13.0/arm64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; ]])], [dnl Determine whether the various *_MIN, *_MAX macros are usable dnl in preprocessor expression. We could do it by compiling a test dnl program for each of these macros. It is faster to run a program dnl that inspects the macro expansion. dnl This detects a bug on HP-UX 11.23/ia64. AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> ] gl_STDINT_INCLUDES [ #include <stdio.h> #include <string.h> #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; ]], [[ const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ]])], [gl_cv_header_working_stdint_h=yes], [], [case "$host_os" in # Guess yes on native Windows. mingw* | windows*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac ]) ]) ]) fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 GL_GENERATE_STDINT_H=true case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 dnl Now see whether the system <stdint.h> works without dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. dnl If not, there would be problems when stdint.h is included from C++. AC_CACHE_CHECK([whether stdint.h works without ISO C predefines], [gl_cv_header_stdint_without_STDC_macros], [gl_cv_header_stdint_without_STDC_macros=no AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include <stdint.h> ] gl_STDINT_INCLUDES [ intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); ]])], [gl_cv_header_stdint_without_STDC_macros=yes]) ]) if test $gl_cv_header_stdint_without_STDC_macros = no; then AC_DEFINE([__STDC_CONSTANT_MACROS], [1], [Define to 1 if the system <stdint.h> predates C++11.]) AC_DEFINE([__STDC_LIMIT_MACROS], [1], [Define to 1 if the system <stdint.h> predates C++11.]) fi AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], [gl_cv_header_stdint_width], [gl_cv_header_stdint_width=no AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <stdint.h> ]gl_STDINT_INCLUDES[ int iw = UINTMAX_WIDTH; ]])], [gl_cv_header_stdint_width=yes])]) if test "$gl_cv_header_stdint_width" = yes; then GL_GENERATE_STDINT_H=false fi ;; *) dnl Check for <sys/inttypes.h>, and for dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5). AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi gl_STDINT_TYPE_PROPERTIES ;; esac dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. gl_REPLACE_LIMITS_H AC_SUBST([HAVE_C99_STDINT_H]) AC_SUBST([HAVE_SYS_BITYPES_H]) AC_SUBST([HAVE_SYS_INTTYPES_H]) ]) dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) dnl Determine the size of each of the given types in bits. AC_DEFUN([gl_STDINT_BITSIZEOF], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to the number of bits in type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], [$2 #include <limits.h>], [result=unknown]) eval gl_cv_bitsizeof_${gltype}=\$result ]) eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, dnl do a syntax check even on unused #if conditions and give an error dnl on valid C code like this: dnl #if 0 dnl # if > 32 dnl # endif dnl #endif result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) eval BITSIZEOF_${GLTYPE}=\$result done m4_foreach_w([gltype], [$1], [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) dnl Determine the signedness of each of the given types. dnl Define HAVE_SIGNED_TYPE if type is signed. AC_DEFUN([gl_CHECK_TYPES_SIGNED], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to 1 if ']gltype[' is a signed integer type.])]) for gltype in $1 ; do AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], result=yes, result=no) eval gl_cv_type_${gltype}_signed=\$result ]) eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done m4_foreach_w([gltype], [$1], [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) dnl Determine the suffix to use for integer constants of the given types. dnl Define t_SUFFIX for each such type. AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], [Define to l, ll, u, ul, ull, etc., as suitable for constants of type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for $gltype integer literal suffix], [gl_cv_type_${gltype}_suffix], [eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ extern $gltype foo; extern $gltype1 foo;]])], [eval gl_cv_type_${gltype}_suffix=\$glsuf]) eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done]) GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) done m4_foreach_w([gltype], [$1], [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) ]) dnl gl_STDINT_INCLUDES AC_DEFUN([gl_STDINT_INCLUDES], [[ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif ]]) dnl gl_STDINT_TYPE_PROPERTIES dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t dnl of interest to stdint.in.h. AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], [ AC_REQUIRE([gl_MULTIARCH]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_STDINT_BITSIZEOF([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99 dnl requirement that wint_t is "unchanged by default argument promotions". dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t. dnl Set the variable BITSIZEOF_WINT_T accordingly. if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/stdint_h.m4�����������������������������������������������������������0000644�0001750�0001750�00000001743�14557510506�014101� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdint_h.m4 serial 9 dnl Copyright (C) 1997-2004, 2006, 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists, # doesn't clash with <sys/types.h>, and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_STDINT_H], [ AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <stdint.h>]], [[uintmax_t i = (uintmax_t) -1; return !i;]])], [gl_cv_header_stdint_h=yes], [gl_cv_header_stdint_h=no])]) if test $gl_cv_header_stdint_h = yes; then AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], [Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares uintmax_t. ]) fi ]) �����������������������������gnuastro-0.22/bootstrapped/m4/stdio_h.m4������������������������������������������������������������0000644�0001750�0001750�00000027556�14557510506�013730� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdio_h.m4 serial 63 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STDIO_H_EARLY], [ dnl Defining __USE_MINGW_ANSI_STDIO to 1 must be done early, because dnl the results of several configure tests depend on it: The tests dnl - checking whether snprintf returns a byte count as in C99... dnl - checking whether snprintf truncates the result as in C99... dnl - checking whether printf supports the 'F' directive... dnl - checking whether printf supports the grouping flag... dnl - checking whether printf supports the zero flag correctly... dnl - checking whether printf supports infinite 'double' arguments... dnl - checking whether printf supports large precisions... dnl report 'yes' if __USE_MINGW_ANSI_STDIO is 1 but 'no' if dnl __USE_MINGW_ANSI_STDIO is not set. AH_VERBATIM([MINGW_ANSI_STDIO], [/* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO #endif ]) AC_DEFINE([__USE_MINGW_ANSI_STDIO]) ]) AC_DEFUN_ONCE([gl_STDIO_H], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_NEXT_HEADERS([stdio.h]) dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and dnl inttypes.h behave like gnu instead of system; we must give our dnl printf wrapper the right attribute to match. AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros], [gl_cv_func_printf_attribute_flavor], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define __STDC_FORMAT_MACROS 1 #include <stdio.h> #include <inttypes.h> /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ #if (defined _WIN32 && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif ]])], [gl_cv_func_printf_attribute_flavor=system], [gl_cv_func_printf_attribute_flavor=gnu])]) if test "$gl_cv_func_printf_attribute_flavor" = gnu; then AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1], [Define to 1 if printf and friends should be labeled with attribute "__gnu_printf__" instead of "__printf__"]) fi dnl For defining _PRINTF_NAN_LEN_MAX. gl_MUSL_LIBC dnl This ifdef is an optimization, to avoid performing a configure check whose dnl result is not used. But it does not make the test of dnl GNULIB_STDIO_H_NONBLOCKING or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_READ_FUNCS=1 fi ]) dnl This ifdef is an optimization, to avoid performing a configure check whose dnl result is not used. But it does not make the test of dnl GNULIB_STDIO_H_SIGPIPE or GNULIB_SIGPIPE redundant. m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_STDIO_WRITE_FUNCS=1 fi ]) dnl This ifdef is an optimization, to avoid performing a configure check whose dnl result is not used. But it does not make the test of dnl GNULIB_STDIO_H_NONBLOCKING or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_WRITE_FUNCS=1 fi ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by both C89 and C11. gl_WARN_ON_USE_PREPARE([[#include <stdio.h> ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS_ONCE([fcloseall]) if test $ac_cv_have_decl_fcloseall = no; then HAVE_DECL_FCLOSEALL=0 fi AC_CHECK_DECLS_ONCE([getw]) if test $ac_cv_have_decl_getw = no; then HAVE_DECL_GETW=0 fi AC_CHECK_DECLS_ONCE([putw]) if test $ac_cv_have_decl_putw = no; then HAVE_DECL_PUTW=0 fi ]) # gl_STDIO_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STDIO_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STDIO_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STDIO_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFLUSH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPURGE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREAD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEKO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELLO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FWRITE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCHAR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDELIM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLINE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PCLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PERROR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTCHAR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMOVE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAMEAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SNPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_NONBLOCKING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_SIGPIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TMPFILE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VASPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFSCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VDPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSNPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSPRINTF_POSIX]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCLOSEALL], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FDOPEN], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FILENO], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETW], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTW], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_TEMPNAM], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) ]) AC_DEFUN([gl_STDIO_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_FCLOSEALL=1; AC_SUBST([HAVE_DECL_FCLOSEALL]) HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE]) HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO]) HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO]) HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) HAVE_DECL_GETW=1; AC_SUBST([HAVE_DECL_GETW]) HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF]) HAVE_DECL_PUTW=1; AC_SUBST([HAVE_DECL_PUTW]) HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF]) HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE]) HAVE_POPEN=1; AC_SUBST([HAVE_POPEN]) HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT]) HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF]) REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF]) REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE]) REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN]) REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) REPLACE_FOPEN_FOR_FOPEN_GNU=0; AC_SUBST([REPLACE_FOPEN_FOR_FOPEN_GNU]) REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE]) REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM]) REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF]) REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR]) REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN]) REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE]) REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME]) REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT]) REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS]) REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE]) REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/stdlib_h.m4�����������������������������������������������������������0000644�0001750�0001750�00000027530�14557510506�014057� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdlib_h.m4 serial 76 dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_STDLIB_H], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) gl_NEXT_HEADERS([stdlib.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include <stdlib.h> #if HAVE_SYS_LOADAVG_H /* OpenIndiana has a bug: <sys/time.h> must be included before <sys/loadavg.h>. */ # include <sys/time.h> # include <sys/loadavg.h> #endif #if HAVE_RANDOM_H # include <random.h> #endif ]], [_Exit aligned_alloc atoll canonicalize_file_name free getloadavg getprogname getsubopt grantpt initstate initstate_r mbstowcs mbtowc mkdtemp mkostemp mkostemps mkstemp mkstemps posix_memalign posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray realpath rpmatch secure_getenv setenv setstate setstate_r srandom srandom_r strtod strtol strtold strtoll strtoul strtoull unlockpt unsetenv]) AC_REQUIRE([AC_C_RESTRICT]) dnl Test whether MB_CUR_MAX needs to be overridden. dnl On Solaris 10, in UTF-8 locales, its value is 3 but needs to be 4. dnl Fortunately, we can do this because on this platform MB_LEN_MAX is 5. AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_CACHE_CHECK([whether MB_CUR_MAX is correct], [gl_cv_macro_MB_CUR_MAX_good], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_macro_MB_CUR_MAX_good="guessing no" ;; # Guess yes otherwise. *) gl_cv_macro_MB_CUR_MAX_good="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { if (MB_CUR_MAX < 4) result |= 1; } return result; }]])], [gl_cv_macro_MB_CUR_MAX_good=yes], [gl_cv_macro_MB_CUR_MAX_good=no], [:]) fi ]) case "$gl_cv_macro_MB_CUR_MAX_good" in *yes) ;; *) REPLACE_MB_CUR_MAX=1 ;; esac AC_CHECK_DECLS_ONCE([ecvt]) if test $ac_cv_have_decl_ecvt = no; then HAVE_DECL_ECVT=0 fi AC_CHECK_DECLS_ONCE([fcvt]) if test $ac_cv_have_decl_fcvt = no; then HAVE_DECL_FCVT=0 fi AC_CHECK_DECLS_ONCE([gcvt]) if test $ac_cv_have_decl_gcvt = no; then HAVE_DECL_GCVT=0 fi ]) # gl_STDLIB_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STDLIB_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STDLIB_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB__EXIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ALIGNED_ALLOC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATOLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CANONICALIZE_FILE_NAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREE_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOADAVG]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPROGNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSUBOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GRANTPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSTOWCS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBTOWC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDTEMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMPS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMPS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_MEMALIGN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_OPENPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_QSORT_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RAND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOCARRAY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALPATH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RPMATCH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SECURE_GETENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOULL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYSTEM_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLOCKPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNSETENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTOMB]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ECVT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCVT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GCVT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MKTEMP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTENV], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) ]) AC_DEFUN([gl_STDLIB_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE__EXIT=1; AC_SUBST([HAVE__EXIT]) HAVE_ALIGNED_ALLOC=1; AC_SUBST([HAVE_ALIGNED_ALLOC]) HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME]) HAVE_DECL_ECVT=1; AC_SUBST([HAVE_DECL_ECVT]) HAVE_DECL_FCVT=1; AC_SUBST([HAVE_DECL_FCVT]) HAVE_DECL_GCVT=1; AC_SUBST([HAVE_DECL_GCVT]) HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) HAVE_DECL_PROGRAM_INVOCATION_NAME=1; AC_SUBST([HAVE_DECL_PROGRAM_INVOCATION_NAME]) HAVE_GETPROGNAME=1; AC_SUBST([HAVE_GETPROGNAME]) HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) HAVE_INITSTATE=1; AC_SUBST([HAVE_INITSTATE]) HAVE_DECL_INITSTATE=1; AC_SUBST([HAVE_DECL_INITSTATE]) HAVE_MBTOWC=1; AC_SUBST([HAVE_MBTOWC]) HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP]) HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS]) HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP]) HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS]) HAVE_POSIX_MEMALIGN=1; AC_SUBST([HAVE_POSIX_MEMALIGN]) HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT]) HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME]) HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R]) HAVE_QSORT_R=1; AC_SUBST([HAVE_QSORT_R]) HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM]) HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H]) HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) HAVE_REALLOCARRAY=1; AC_SUBST([HAVE_REALLOCARRAY]) HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV]) HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV]) HAVE_SETSTATE=1; AC_SUBST([HAVE_SETSTATE]) HAVE_DECL_SETSTATE=1; AC_SUBST([HAVE_DECL_SETSTATE]) HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) HAVE_STRTOL=1; AC_SUBST([HAVE_STRTOL]) HAVE_STRTOLD=1; AC_SUBST([HAVE_STRTOLD]) HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) HAVE_STRTOUL=1; AC_SUBST([HAVE_STRTOUL]) HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT]) HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV]) REPLACE__EXIT=0; AC_SUBST([REPLACE__EXIT]) REPLACE_ALIGNED_ALLOC=0; AC_SUBST([REPLACE_ALIGNED_ALLOC]) REPLACE_CALLOC_FOR_CALLOC_GNU=0; AC_SUBST([REPLACE_CALLOC_FOR_CALLOC_GNU]) REPLACE_CALLOC_FOR_CALLOC_POSIX=0; AC_SUBST([REPLACE_CALLOC_FOR_CALLOC_POSIX]) REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) REPLACE_FREE=0; AC_SUBST([REPLACE_FREE]) REPLACE_GETLOADAVG=0; AC_SUBST([REPLACE_GETLOADAVG]) REPLACE_GETPROGNAME=0; AC_SUBST([REPLACE_GETPROGNAME]) REPLACE_GETSUBOPT=0; AC_SUBST([REPLACE_GETSUBOPT]) REPLACE_INITSTATE=0; AC_SUBST([REPLACE_INITSTATE]) REPLACE_MALLOC_FOR_MALLOC_GNU=0; AC_SUBST([REPLACE_MALLOC_FOR_MALLOC_GNU]) REPLACE_MALLOC_FOR_MALLOC_POSIX=0; AC_SUBST([REPLACE_MALLOC_FOR_MALLOC_POSIX]) REPLACE_MB_CUR_MAX=0; AC_SUBST([REPLACE_MB_CUR_MAX]) REPLACE_MBSTOWCS=0; AC_SUBST([REPLACE_MBSTOWCS]) REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) REPLACE_MKOSTEMP=0; AC_SUBST([REPLACE_MKOSTEMP]) REPLACE_MKOSTEMPS=0; AC_SUBST([REPLACE_MKOSTEMPS]) REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) REPLACE_POSIX_MEMALIGN=0; AC_SUBST([REPLACE_POSIX_MEMALIGN]) REPLACE_POSIX_OPENPT=0; AC_SUBST([REPLACE_POSIX_OPENPT]) REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME]) REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R]) REPLACE_RAND=0; AC_SUBST([REPLACE_RAND]) REPLACE_RANDOM=0; AC_SUBST([REPLACE_RANDOM]) REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R]) REPLACE_REALLOC_FOR_REALLOC_GNU=0; AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_GNU]) REPLACE_REALLOC_FOR_REALLOC_POSIX=0; AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_POSIX]) REPLACE_REALLOCARRAY=0; AC_SUBST([REPLACE_REALLOCARRAY]) REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH]) REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV]) REPLACE_SETSTATE=0; AC_SUBST([REPLACE_SETSTATE]) REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) REPLACE_STRTOL=0; AC_SUBST([REPLACE_STRTOL]) REPLACE_STRTOLD=0; AC_SUBST([REPLACE_STRTOLD]) REPLACE_STRTOLL=0; AC_SUBST([REPLACE_STRTOLL]) REPLACE_STRTOUL=0; AC_SUBST([REPLACE_STRTOUL]) REPLACE_STRTOULL=0; AC_SUBST([REPLACE_STRTOULL]) REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV]) REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/strcase.m4������������������������������������������������������������0000644�0001750�0001750�00000001774�14557510506�013735� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strcase.m4 serial 12 dnl Copyright (C) 2002, 2005-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STRCASE], [ gl_FUNC_STRCASECMP gl_FUNC_STRNCASECMP ]) AC_DEFUN([gl_FUNC_STRCASECMP], [ AC_REQUIRE([gl_STRINGS_H_DEFAULTS]) AC_CHECK_FUNCS([strcasecmp]) if test $ac_cv_func_strcasecmp = no; then HAVE_STRCASECMP=0 fi ]) AC_DEFUN([gl_FUNC_STRNCASECMP], [ AC_REQUIRE([gl_STRINGS_H_DEFAULTS]) AC_CHECK_FUNCS([strncasecmp]) if test $ac_cv_func_strncasecmp = yes; then HAVE_STRNCASECMP=1 else HAVE_STRNCASECMP=0 fi AC_CHECK_DECLS([strncasecmp]) if test $ac_cv_have_decl_strncasecmp = no; then HAVE_DECL_STRNCASECMP=0 fi ]) # Prerequisites of lib/strcasecmp.c. AC_DEFUN([gl_PREREQ_STRCASECMP], [ : ]) # Prerequisites of lib/strncasecmp.c. AC_DEFUN([gl_PREREQ_STRNCASECMP], [ : ]) ����gnuastro-0.22/bootstrapped/m4/strchrnul.m4����������������������������������������������������������0000644�0001750�0001750�00000003154�14557510506�014307� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strchrnul.m4 serial 12 dnl Copyright (C) 2003, 2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRCHRNUL], [ dnl Persuade glibc <string.h> to declare strchrnul(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) gl_CHECK_FUNCS_ANDROID([strchrnul], [[#include <string.h>]]) if test $ac_cv_func_strchrnul = no; then HAVE_STRCHRNUL=0 case "$gl_cv_onwards_func_strchrnul" in future*) REPLACE_STRCHRNUL=1 ;; esac else AC_CACHE_CHECK([whether strchrnul works], [gl_cv_func_strchrnul_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <string.h> /* for strchrnul */ ]], [[const char *buf = "a"; return strchrnul (buf, 'b') != buf + 1; ]])], [gl_cv_func_strchrnul_works=yes], [gl_cv_func_strchrnul_works=no], [dnl Cygwin 1.7.9 introduced strchrnul, but it was broken until 1.7.10 AC_EGREP_CPP([Lucky user], [ #if defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 9) Lucky user #endif #else Lucky user #endif ], [gl_cv_func_strchrnul_works="guessing yes"], [gl_cv_func_strchrnul_works="guessing no"]) ]) ]) case "$gl_cv_func_strchrnul_works" in *yes) ;; *) REPLACE_STRCHRNUL=1 ;; esac fi ]) # Prerequisites of lib/strchrnul.c. AC_DEFUN([gl_PREREQ_STRCHRNUL], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/strdup.m4�������������������������������������������������������������0000644�0001750�0001750�00000001455�14557510506�013606� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strdup.m4 serial 15 dnl Copyright (C) 2002-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRDUP], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([strdup]) if test $ac_cv_have_decl_strdup = no; then HAVE_DECL_STRDUP=0 fi ]) AC_DEFUN([gl_FUNC_STRDUP_POSIX], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) if test $gl_cv_func_malloc_posix != yes; then REPLACE_STRDUP=1 fi AC_CHECK_DECLS_ONCE([strdup]) if test $ac_cv_have_decl_strdup = no; then HAVE_DECL_STRDUP=0 fi ]) # Prerequisites of lib/strdup.c. AC_DEFUN([gl_PREREQ_STRDUP], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/strerror.m4�����������������������������������������������������������0000644�0001750�0001750�00000007311�14557510506�014144� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strerror.m4 serial 25 dnl Copyright (C) 2002, 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRERROR], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) ]) if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then AC_CACHE_CHECK([for working strerror function], [gl_cv_func_working_strerror], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> ]], [[if (!*strerror (-2)) return 1;]])], [gl_cv_func_working_strerror=yes], [gl_cv_func_working_strerror=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_strerror="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_working_strerror" in *yes) ;; *) dnl The system's strerror() fails to return a string for out-of-range dnl integers. Replace it. REPLACE_STRERROR=1 ;; esac m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's dnl buffer, we must replace strerror. case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR=1 ;; esac ]) else dnl The system's strerror() cannot know about the new errno values we add dnl to <errno.h>, or any fix for strerror(0). Replace it. REPLACE_STRERROR=1 fi ]) dnl Detect if strerror(0) passes (that is, does not set errno, and does not dnl return a string that matches strerror(-1)). AC_DEFUN([gl_FUNC_STRERROR_0], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles REPLACE_STRERROR_0=0 AC_CACHE_CHECK([whether strerror(0) succeeds], [gl_cv_func_strerror_0_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> #include <errno.h> ]], [[int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result;]])], [gl_cv_func_strerror_0_works=yes], [gl_cv_func_strerror_0_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0) does not return a message implying success.]) ;; esac ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/strerror_r.m4���������������������������������������������������������0000644�0001750�0001750�00000015531�14557510506�014470� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strerror_r.m4 serial 26 dnl Copyright (C) 2002, 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRERROR_R], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) dnl Some systems don't declare strerror_r() if _THREAD_SAFE and _REENTRANT dnl are not defined. AC_CHECK_DECLS_ONCE([strerror_r]) if test $ac_cv_have_decl_strerror_r = no; then HAVE_DECL_STRERROR_R=0 fi if test $ac_cv_func_strerror_r = yes; then if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then if test $gl_cv_func_strerror_r_posix_signature = yes; then case "$gl_cv_func_strerror_r_works" in dnl The system's strerror_r has bugs. Replace it. *no) REPLACE_STRERROR_R=1 ;; esac else dnl The system's strerror_r() has a wrong signature. Replace it. REPLACE_STRERROR_R=1 fi else dnl The system's strerror_r() cannot know about the new errno values we dnl add to <errno.h>, or any fix for strerror(0). Replace it. REPLACE_STRERROR_R=1 fi fi ]) # Prerequisites of lib/strerror_r.c. AC_DEFUN([gl_PREREQ_STRERROR_R], [ AC_REQUIRE([AC_FUNC_STRERROR_R]) dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r. AC_CHECK_FUNCS_ONCE([__xpg_strerror_r]) gl_CHECK_FUNCS_ANDROID([catgets], [[#include <nl_types.h>]]) AC_CHECK_FUNCS_ONCE([snprintf]) ]) # Detect if strerror_r works, but without affecting whether a replacement # strerror_r will be used. AC_DEFUN([gl_FUNC_STRERROR_R_WORKS], [ AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade Android <string.h> to use the GNU strerror_r API, dnl and Solaris <string.h> to declare strerror_r. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FUNC_STRERROR_0]) gl_CHECK_FUNCS_ANDROID([strerror_r], [[#include <string.h>]]) if test $ac_cv_func_strerror_r = yes; then if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then dnl The POSIX prototype is: int strerror_r (int, char *, size_t); dnl glibc, Cygwin: char *strerror_r (int, char *, size_t); dnl AIX 5.1, OSF/1 5.1: int strerror_r (int, char *, int); AC_CACHE_CHECK([for strerror_r with POSIX signature], [gl_cv_func_strerror_r_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> int strerror_r (int, char *, size_t); ]], [])], [gl_cv_func_strerror_r_posix_signature=yes], [gl_cv_func_strerror_r_posix_signature=no]) ]) if test $gl_cv_func_strerror_r_posix_signature = yes; then dnl AIX 6.1 strerror_r fails by returning -1, not an error number. dnl HP-UX 11.31 strerror_r always fails when the buffer length argument dnl is less than 80. dnl FreeBSD 8.s strerror_r claims failure on 0 dnl Mac OS X 10.5 strerror_r treats 0 like -1 dnl Solaris 10 strerror_r corrupts errno on failure AC_CACHE_CHECK([whether strerror_r works], [gl_cv_func_strerror_r_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #include <string.h> ]], [[int result = 0; char buf[79]; if (strerror_r (EACCES, buf, 0) < 0) result |= 1; errno = 0; if (strerror_r (EACCES, buf, sizeof buf) != 0) result |= 2; strcpy (buf, "Unknown"); if (strerror_r (0, buf, sizeof buf) != 0) result |= 4; if (errno) result |= 8; if (strstr (buf, "nknown") || strstr (buf, "ndefined")) result |= 0x10; errno = 0; *buf = 0; if (strerror_r (-3, buf, sizeof buf) < 0) result |= 0x20; if (errno) result |= 0x40; if (!*buf) result |= 0x80; return result; ]])], [gl_cv_func_strerror_r_works=yes], [gl_cv_func_strerror_r_works=no], [ changequote(,)dnl case "$host_os" in # Guess no on AIX. aix*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on HP-UX. hpux*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on BSD variants. *bsd*) gl_cv_func_strerror_r_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_strerror_r_works="guessing yes";; esac changequote([,])dnl ]) ]) else dnl The system's strerror() has a wrong signature. dnl glibc >= 2.3.4 and cygwin 1.7.9 have a function __xpg_strerror_r. AC_CHECK_FUNCS_ONCE([__xpg_strerror_r]) dnl In glibc < 2.14, __xpg_strerror_r does not populate buf on failure. dnl In cygwin < 1.7.10, __xpg_strerror_r clobbers strerror's buffer. if test $ac_cv_func___xpg_strerror_r = yes; then AC_CACHE_CHECK([whether __xpg_strerror_r works], [gl_cv_func_strerror_r_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #include <string.h> extern #ifdef __cplusplus "C" #endif int __xpg_strerror_r(int, char *, size_t); ]], [[int result = 0; char buf[256] = "^"; char copy[256]; char *str = strerror (-1); strcpy (copy, str); if (__xpg_strerror_r (-2, buf, 1) == 0) result |= 1; if (*buf) result |= 2; __xpg_strerror_r (-2, buf, 256); if (strcmp (str, copy)) result |= 4; return result; ]])], [gl_cv_func_strerror_r_works=yes], [gl_cv_func_strerror_r_works=no], [dnl Guess no on all platforms that have __xpg_strerror_r, dnl at least until fixed glibc and cygwin are more common. gl_cv_func_strerror_r_works="$gl_cross_guess_normal" ]) ]) fi fi fi else case "$gl_cv_onwards_func_strerror_r" in future*) REPLACE_STRERROR_R=1 ;; esac fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/string_h.m4�����������������������������������������������������������0000644�0001750�0001750�00000016706�14557510506�014107� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a GNU-like replacement for <string.h>. # Copyright (C) 2007-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 39 # Written by Paul Eggert. AC_DEFUN_ONCE([gl_STRING_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_STRING_H_DEFAULTS]) gl_NEXT_HEADERS([string.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include <string.h> ]], [explicit_bzero ffsl ffsll memmem mempcpy memrchr memset_explicit rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strerrorname_np sigabbrev_np sigdescr_np strsignal strverscmp]) AC_REQUIRE([AC_C_RESTRICT]) ]) # gl_STRING_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STRING_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STRING_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STRING_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPLICIT_BZERO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMMEM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMRCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMSET_EXPLICIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RAWMEMCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPNCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCHRNUL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRDUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNCAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNDUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPBRK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCASESTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOK_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASESTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPBRK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSTOK_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERRORNAME_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGABBREV_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGDESCR_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSIGNAL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRVERSCMP]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MEMCCPY], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_STRDUP], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS]) dnl Make sure the shell variable for GNULIB_FREE_POSIX is initialized. gl_STDLIB_H_REQUIRE_DEFAULTS AC_REQUIRE([gl_STRING_H_DEFAULTS]) ]) AC_DEFUN([gl_STRING_H_DEFAULTS], [ HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO]) HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) HAVE_MEMSET_EXPLICIT=1; AC_SUBST([HAVE_MEMSET_EXPLICIT]) HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) HAVE_STRERRORNAME_NP=1; AC_SUBST([HAVE_STRERRORNAME_NP]) HAVE_SIGABBREV_NP=1; AC_SUBST([HAVE_SIGABBREV_NP]) HAVE_SIGDESCR_NP=1; AC_SUBST([HAVE_SIGDESCR_NP]) HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) REPLACE_FFSLL=0; AC_SUBST([REPLACE_FFSLL]) REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) REPLACE_MEMPCPY=0; AC_SUBST([REPLACE_MEMPCPY]) REPLACE_MEMSET_EXPLICIT=0; AC_SUBST([REPLACE_MEMSET_EXPLICIT]) REPLACE_STPCPY=0; AC_SUBST([REPLACE_STPCPY]) REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) REPLACE_STRERRORNAME_NP=0; AC_SUBST([REPLACE_STRERRORNAME_NP]) REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) REPLACE_STRVERSCMP=0; AC_SUBST([REPLACE_STRVERSCMP]) UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) ]) ����������������������������������������������������������gnuastro-0.22/bootstrapped/m4/strings_h.m4����������������������������������������������������������0000644�0001750�0001750�00000004202�14557510506�014256� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a replacement for <strings.h>. # serial 9 # Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_STRINGS_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_STRINGS_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([strings.h]) if test $ac_cv_header_strings_h = yes; then HAVE_STRINGS_H=1 else HAVE_STRINGS_H=0 fi AC_SUBST([HAVE_STRINGS_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Minix 3.1.8 has a bug: <sys/types.h> must be included before <strings.h>. */ #include <sys/types.h> #include <strings.h> ]], [ffs strcasecmp strncasecmp]) ]) # gl_STRINGS_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STRINGS_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STRINGS_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STRINGS_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STRINGS_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFS]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STRINGS_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STRINGS_H_DEFAULTS]) ]) AC_DEFUN([gl_STRINGS_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FFS=1; AC_SUBST([HAVE_FFS]) HAVE_STRCASECMP=1; AC_SUBST([HAVE_STRCASECMP]) HAVE_DECL_STRNCASECMP=1; AC_SUBST([HAVE_DECL_STRNCASECMP]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/strndup.m4������������������������������������������������������������0000644�0001750�0001750�00000003265�14557510506�013765� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strndup.m4 serial 23 dnl Copyright (C) 2002-2003, 2005-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRNDUP], [ dnl Persuade glibc <string.h> to declare strndup(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([strndup]) AC_CHECK_FUNCS_ONCE([strndup]) if test $ac_cv_have_decl_strndup = no; then HAVE_DECL_STRNDUP=0 fi if test $ac_cv_func_strndup = yes; then HAVE_STRNDUP=1 # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. AC_CACHE_CHECK([for working strndup], [gl_cv_func_strndup_works], [AC_RUN_IFELSE([ AC_LANG_PROGRAM([[#include <string.h> #include <stdlib.h>]], [[ #if !HAVE_DECL_STRNDUP extern #ifdef __cplusplus "C" #endif char *strndup (const char *, size_t); #endif int result; char *s; s = strndup ("some longer string", 15); free (s); s = strndup ("shorter string", 13); result = s[13] != '\0'; free (s); return result;]])], [gl_cv_func_strndup_works=yes], [gl_cv_func_strndup_works=no], [ changequote(,)dnl case $host_os in aix | aix[3-6]*) gl_cv_func_strndup_works="guessing no";; *) gl_cv_func_strndup_works="guessing yes";; esac changequote([,])dnl ])]) case $gl_cv_func_strndup_works in *no) REPLACE_STRNDUP=1 ;; esac else HAVE_STRNDUP=0 fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/strnlen.m4������������������������������������������������������������0000644�0001750�0001750�00000001552�14557510506�013750� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strnlen.m4 serial 14 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2024 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRNLEN], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) dnl Persuade glibc <string.h> to declare strnlen(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([strnlen]) if test $ac_cv_have_decl_strnlen = no; then HAVE_DECL_STRNLEN=0 else m4_pushdef([AC_LIBOBJ], [:]) dnl Note: AC_FUNC_STRNLEN does AC_LIBOBJ([strnlen]). AC_FUNC_STRNLEN m4_popdef([AC_LIBOBJ]) if test $ac_cv_func_strnlen_working = no; then REPLACE_STRNLEN=1 fi fi ]) # Prerequisites of lib/strnlen.c. AC_DEFUN([gl_PREREQ_STRNLEN], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/strptime.m4�����������������������������������������������������������0000644�0001750�0001750�00000001116�14557510506�014126� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strptime.m4 serial 8 dnl Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRPTIME], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_FUNCS_ONCE([strptime]) if test $ac_cv_func_strptime != yes; then HAVE_STRPTIME=0 fi ]) # Prerequisites of lib/strptime.c. AC_DEFUN([gl_PREREQ_STRPTIME], [ AC_REQUIRE([gl_TM_GMTOFF]) : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/strtod.m4�������������������������������������������������������������0000644�0001750�0001750�00000010556�14557510506�013606� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtod.m4 serial 29 dnl Copyright (C) 2002-2003, 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOD], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_FUNC_STRTOD_OBSOLETE], [ dnl Test whether strtod is declared. dnl Don't call AC_FUNC_STRTOD, because it does not have the right guess dnl when cross-compiling. dnl Don't call AC_CHECK_FUNCS([strtod]) because it would collide with the dnl ac_cv_func_strtod variable set by the AC_FUNC_STRTOD macro. AC_CHECK_DECLS_ONCE([strtod]) if test $ac_cv_have_decl_strtod != yes; then HAVE_STRTOD=0 fi ]) if test $HAVE_STRTOD = 1; then AC_CACHE_CHECK([whether strtod obeys C99], [gl_cv_func_strtod_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stdlib.h> #include <math.h> #include <errno.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (double x, double y) { return x == y; } ]], [[ int result = 0; { /* In some old versions of Linux (2000 or before), strtod mis-parses strings with leading '+'. */ const char *string = " +69"; char *term; double value = strtod (string, &term); if (value != 69 || term != (string + 4)) result |= 1; } { /* Under Solaris 2.4, strtod returns the wrong value for the terminating character under some conditions. */ const char *string = "NaN"; char *term; strtod (string, &term); if (term != string && *(term - 1) == 0) result |= 2; } { /* Older glibc and Cygwin mis-parse "-0x". */ const char *string = "-0x"; char *term; double value = strtod (string, &term); double zero = 0.0; if (1.0 / value != -1.0 / zero || term != (string + 2)) result |= 4; } { /* Many platforms do not parse hex floats. */ const char *string = "0XaP+1"; char *term; double value = strtod (string, &term); if (value != 20.0 || term != (string + 6)) result |= 8; } { /* Many platforms do not parse infinities. HP-UX 11.31 parses inf, but mistakenly sets errno. */ const char *string = "inf"; char *term; double value; errno = 0; value = strtod (string, &term); if (value != HUGE_VAL || term != (string + 3) || errno) result |= 16; } { /* glibc 2.7 and cygwin 1.5.24 misparse "nan()". */ const char *string = "nan()"; char *term; double value = strtod (string, &term); if (numeric_equal (value, value) || term != (string + 5)) result |= 32; } { /* darwin 10.6.1 misparses "nan(". */ const char *string = "nan("; char *term; double value = strtod (string, &term); if (numeric_equal (value, value) || term != (string + 3)) result |= 64; } return result; ]])], [gl_cv_func_strtod_works=yes], [gl_cv_func_strtod_works=no], [dnl The last known bugs in glibc strtod(), as of this writing, dnl were fixed in version 2.8 AC_EGREP_CPP([Lucky user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8) || (__GLIBC__ > 2)) \ && !defined __UCLIBC__ Lucky user #endif #endif ], [gl_cv_func_strtod_works="guessing yes"], [case "$host_os" in # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_strtod_works="guessing yes" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_strtod_works="guessing yes" ;; *) gl_cv_func_strtod_works="$gl_cross_guess_normal" ;; esac ]) ]) ]) case "$gl_cv_func_strtod_works" in *yes) ;; *) REPLACE_STRTOD=1 ;; esac fi ]) # Prerequisites of lib/strtod.c. AC_DEFUN([gl_PREREQ_STRTOD], [ AC_REQUIRE([gl_CHECK_LDEXP_NO_LIBM]) if test $gl_cv_func_ldexp_no_libm = yes; then AC_DEFINE([HAVE_LDEXP_IN_LIBC], [1], [Define if the ldexp function is available in libc.]) fi gl_CHECK_FUNCS_ANDROID([nl_langinfo], [[#include <langinfo.h>]]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/strtok_r.m4�����������������������������������������������������������0000644�0001750�0001750�00000005140�14557510506�014127� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strtok_r.m4 serial 17 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2024 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRTOK_R], [ dnl The strtok_r() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS([strtok_r]) if test $ac_cv_func_strtok_r = yes; then HAVE_STRTOK_R=1 dnl glibc 2.7 has a bug in strtok_r that causes a segmentation fault dnl when the second argument to strtok_r is a constant string that has dnl exactly one byte and compiling with optimization. This bug is, for dnl example, present in the glibc 2.7-18 package in Debian "lenny". dnl See <https://sourceware.org/bugzilla/show_bug.cgi?id=5614>. AC_CACHE_CHECK([whether strtok_r works], [gl_cv_func_strtok_r_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #ifndef __OPTIMIZE__ # define __OPTIMIZE__ 1 #endif #undef __OPTIMIZE_SIZE__ #undef __NO_INLINE__ #include <stdlib.h> #include <string.h> ]], [[static const char dummy[] = "\177\01a"; char delimiters[] = "xxxxxxxx"; char *save_ptr = (char *) dummy; strtok_r (delimiters, "x", &save_ptr); strtok_r (NULL, "x", &save_ptr); return 0; ]]) ], [gl_cv_func_strtok_r_works=yes], [gl_cv_func_strtok_r_works=no], [case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_func_strtok_r_works="guessing no" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_strtok_r_works="guessing yes" ;; *) gl_cv_func_strtok_r_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_strtok_r_works" in *no) dnl We could set REPLACE_STRTOK_R=1 here, but it's only the macro dnl version in <bits/string2.h> which is wrong. The code compiled dnl into libc is fine. UNDEFINE_STRTOK_R=1 ;; esac else HAVE_STRTOK_R=0 fi AC_CHECK_DECLS_ONCE([strtok_r]) if test $ac_cv_have_decl_strtok_r = no; then HAVE_DECL_STRTOK_R=0 fi ]) # Prerequisites of lib/strtok_r.c. AC_DEFUN([gl_PREREQ_STRTOK_R], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/symlink.m4������������������������������������������������������������0000644�0001750�0001750�00000004230�14557510506�013745� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 # See if we need to provide symlink replacement. dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_SYMLINK], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([symlink]) dnl The best we can do on mingw is provide a dummy that always fails, so dnl that compilation can proceed with fewer ifdefs. On FreeBSD 7.2, AIX 7.1, dnl and Solaris 9, we want to fix a bug with trailing slash handling. if test $ac_cv_func_symlink = no; then HAVE_SYMLINK=0 else AC_CACHE_CHECK([whether symlink handles trailing slash correctly], [gl_cv_func_symlink_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]], [[int result = 0; if (!symlink ("a", "conftest.link/")) result |= 1; if (symlink ("conftest.f", "conftest.lnk2")) result |= 2; else if (!symlink ("a", "conftest.lnk2/")) result |= 4; return result; ]])], [gl_cv_func_symlink_works=yes], [gl_cv_func_symlink_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_symlink_works="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_symlink_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_symlink_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_symlink_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.f conftest.link conftest.lnk2]) case "$gl_cv_func_symlink_works" in *yes) ;; *) REPLACE_SYMLINK=1 ;; esac fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/sys_ioctl_h.m4��������������������������������������������������������0000644�0001750�0001750�00000005775�14557510506�014615� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_ioctl_h.m4 serial 15 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN_ONCE([gl_SYS_IOCTL_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS]) AC_CHECK_HEADERS_ONCE([sys/ioctl.h]) if test $ac_cv_header_sys_ioctl_h = yes; then HAVE_SYS_IOCTL_H=1 dnl Test whether <sys/ioctl.h> declares ioctl(), or whether some other dnl header file, such as <unistd.h> or <stropts.h>, is needed for that. AC_CACHE_CHECK([whether <sys/ioctl.h> declares ioctl], [gl_cv_decl_ioctl_in_sys_ioctl_h], [dnl We cannot use AC_CHECK_DECL because it produces its own messages. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/ioctl.h>]], [[(void) ioctl;]])], [gl_cv_decl_ioctl_in_sys_ioctl_h=yes], [gl_cv_decl_ioctl_in_sys_ioctl_h=no]) ]) else HAVE_SYS_IOCTL_H=0 fi AC_SUBST([HAVE_SYS_IOCTL_H]) dnl <sys/ioctl.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/ioctl.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <sys/ioctl.h> /* Some platforms declare ioctl in the wrong header. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <unistd.h> #endif ]], [ioctl]) ]) # gl_SYS_IOCTL_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_IOCTL_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_IOCTL_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_IOCTL_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_IOCTL_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IOCTL]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_IOCTL_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_IOCTL_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. SYS_IOCTL_H_HAVE_WINSOCK2_H=0; AC_SUBST([SYS_IOCTL_H_HAVE_WINSOCK2_H]) SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; AC_SUBST([SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) REPLACE_IOCTL=0; AC_SUBST([REPLACE_IOCTL]) ]) ���gnuastro-0.22/bootstrapped/m4/sys_select_h.m4�������������������������������������������������������0000644�0001750�0001750�00000010206�14557510506�014743� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_select_h.m4 serial 23 dnl Copyright (C) 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_SELECT_H], [ AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_CACHE_CHECK([whether <sys/select.h> is self-contained], [gl_cv_header_sys_select_h_selfcontained], [ dnl Test against two bugs: dnl 1. On many platforms, <sys/select.h> assumes prior inclusion of dnl <sys/types.h>. dnl 2. On OSF/1 4.0, <sys/select.h> provides only a forward declaration dnl of 'struct timeval', and no definition of this type. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/select.h>]], [[struct timeval b;]])], [gl_cv_header_sys_select_h_selfcontained=yes], [gl_cv_header_sys_select_h_selfcontained=no]) dnl Test against another bug: dnl 3. On Solaris 10, <sys/select.h> provides an FD_ZERO implementation dnl that relies on memset(), but without including <string.h>. if test $gl_cv_header_sys_select_h_selfcontained = yes; then AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <sys/select.h>]], [[int memset; int bzero;]]) ], [AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include <sys/select.h>]], [[ #undef memset #define memset nonexistent_memset extern #ifdef __cplusplus "C" #endif void *memset (void *, int, unsigned long); #undef bzero #define bzero nonexistent_bzero extern #ifdef __cplusplus "C" #endif void bzero (void *, unsigned long); fd_set fds; FD_ZERO (&fds); ]]) ], [], [gl_cv_header_sys_select_h_selfcontained=no]) ]) fi ]) dnl <sys/select.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/select.h]) if test $ac_cv_header_sys_select_h = yes; then HAVE_SYS_SELECT_H=1 else HAVE_SYS_SELECT_H=0 fi AC_SUBST([HAVE_SYS_SELECT_H]) gl_PREREQ_SYS_H_WINSOCK2 dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Some systems require prerequisite headers. */ #include <sys/types.h> #if !(defined __GLIBC__ && !defined __UCLIBC__) && HAVE_SYS_TIME_H # include <sys/time.h> #endif #include <sys/select.h> ]], [pselect select]) ]) # gl_SYS_SELECT_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_SELECT_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_SELECT_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_SELECT_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_SELECT_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PSELECT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SELECT]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_SELECT_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_SELECT_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_SELECT_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_PSELECT=1; AC_SUBST([HAVE_PSELECT]) REPLACE_PSELECT=0; AC_SUBST([REPLACE_PSELECT]) REPLACE_SELECT=0; AC_SUBST([REPLACE_SELECT]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/sys_socket_h.m4�������������������������������������������������������0000644�0001750�0001750�00000016333�14557510506�014763� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_socket_h.m4 serial 29 dnl Copyright (C) 2005-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson. AC_DEFUN_ONCE([gl_SYS_SOCKET_H], [ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have dnl old-style declarations (with return type 'int' instead of 'ssize_t') dnl unless _POSIX_PII_SOCKET is defined. case "$host_os" in osf*) AC_DEFINE([_POSIX_PII_SOCKET], [1], [Define to 1 in order to get the POSIX compatible declarations of socket functions.]) ;; esac GL_GENERATE_SYS_SOCKET_H=false AC_CACHE_CHECK([whether <sys/socket.h> is self-contained], [gl_cv_header_sys_socket_h_selfcontained], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[]])], [gl_cv_header_sys_socket_h_selfcontained=yes], [gl_cv_header_sys_socket_h_selfcontained=no]) ]) if test $gl_cv_header_sys_socket_h_selfcontained = yes; then dnl If the shutdown function exists, <sys/socket.h> should define dnl SHUT_RD, SHUT_WR, SHUT_RDWR. AC_CHECK_FUNCS([shutdown]) if test $ac_cv_func_shutdown = yes; then AC_CACHE_CHECK([whether <sys/socket.h> defines the SHUT_* macros], [gl_cv_header_sys_socket_h_shut], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])], [gl_cv_header_sys_socket_h_shut=yes], [gl_cv_header_sys_socket_h_shut=no]) ]) if test $gl_cv_header_sys_socket_h_shut = no; then GL_GENERATE_SYS_SOCKET_H=true fi fi fi # We need to check for ws2tcpip.h now. gl_PREREQ_SYS_H_SOCKET AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[ /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif ]) if test $ac_cv_type_struct_sockaddr_storage = no; then HAVE_STRUCT_SOCKADDR_STORAGE=0 fi if test $ac_cv_type_sa_family_t = no; then HAVE_SA_FAMILY_T=0 fi if test $ac_cv_type_struct_sockaddr_storage != no; then AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family], [], [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0], [#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif ]) fi if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then GL_GENERATE_SYS_SOCKET_H=true fi gl_PREREQ_SYS_H_WINSOCK2 dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Some systems require prerequisite headers. */ #include <sys/types.h> #include <sys/socket.h> ]], [socket connect accept bind getpeername getsockname getsockopt listen recv send recvfrom sendto setsockopt shutdown accept4]) AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], [ dnl Check prerequisites of the <sys/socket.h> replacement. AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) gl_CHECK_NEXT_HEADERS([sys/socket.h]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_SYS_SOCKET_H=1 else HAVE_SYS_SOCKET_H=0 fi AC_SUBST([HAVE_SYS_SOCKET_H]) gl_PREREQ_SYS_H_WS2TCPIP ]) # Common prerequisites of the <sys/socket.h> replacement and of the # <sys/select.h> replacement. # Sets and substitutes HAVE_WINSOCK2_H. AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2], [ m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) AC_CHECK_HEADERS_ONCE([sys/socket.h]) if test $ac_cv_header_sys_socket_h != yes; then dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make dnl the check for those headers unconditional; yet cygwin reports dnl that the headers are present but cannot be compiled (since on dnl cygwin, all socket information should come from sys/socket.h). AC_CHECK_HEADERS([winsock2.h]) fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi AC_SUBST([HAVE_WINSOCK2_H]) ]) # Common prerequisites of the <sys/socket.h> replacement and of the # <arpa/inet.h> replacement. # Sets and substitutes HAVE_WS2TCPIP_H. AC_DEFUN([gl_PREREQ_SYS_H_WS2TCPIP], [ AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_WS2TCPIP_H=0 else if test $ac_cv_header_ws2tcpip_h = yes; then HAVE_WS2TCPIP_H=1 else HAVE_WS2TCPIP_H=0 fi fi AC_SUBST([HAVE_WS2TCPIP_H]) ]) # gl_SYS_SOCKET_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_SOCKET_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_SOCKET_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_SOCKET_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SOCKET]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CONNECT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCEPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BIND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPEERNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSOCKNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSOCKOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LISTEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RECV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SEND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RECVFROM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SENDTO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETSOCKOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SHUTDOWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCEPT4]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_SOCKET_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS], [ HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE]) HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY]) HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T]) HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/sys_stat_h.m4���������������������������������������������������������0000644�0001750�0001750�00000012232�14557510506�014440� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_stat_h.m4 serial 42 -*- Autoconf -*- dnl Copyright (C) 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Eric Blake. dnl Provide a GNU-like <sys/stat.h>. AC_DEFUN_ONCE([gl_SYS_STAT_H], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) dnl Check for broken stat macros. AC_REQUIRE([AC_HEADER_STAT]) gl_CHECK_NEXT_HEADERS([sys/stat.h]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to enable precise timestamps in 'struct stat'. m4_ifdef([gl_WINDOWS_STAT_TIMESPEC], [ AC_REQUIRE([gl_WINDOWS_STAT_TIMESPEC]) ], [ WINDOWS_STAT_TIMESPEC=0 ]) AC_SUBST([WINDOWS_STAT_TIMESPEC]) dnl Whether to ensure that struct stat.st_size is 64-bit wide. m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_ST_SIZE=0 ]) AC_SUBST([WINDOWS_64_BIT_ST_SIZE]) dnl Define types that are supposed to be defined in <sys/types.h> or dnl <sys/stat.h>. AC_CHECK_TYPE([nlink_t], [], [AC_DEFINE([nlink_t], [int], [Define to the type of st_nlink in struct stat, or a supertype.])], [#include <sys/types.h> #include <sys/stat.h>]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <sys/stat.h> ]], [chmod fchmodat fstat fstatat futimens getumask lchmod lstat mkdirat mkfifo mkfifoat mknod mknodat stat utimensat]) AC_REQUIRE([AC_C_RESTRICT]) ]) # gl_SYS_STAT_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_STAT_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_STAT_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_STAT_H_MODULE_INDICATOR_DEFAULTS], [ gl_UNISTD_H_REQUIRE_DEFAULTS dnl for REPLACE_FCHDIR gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHMOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHMODAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSTAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSTATAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FUTIMENS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHMOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSTAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDIRAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKFIFO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKFIFOAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKNOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKNODAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UTIMENSAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OVERRIDES_STRUCT_STAT]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHMOD], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MKDIR], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UMASK], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_STAT_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_STAT_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT]) HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT]) HAVE_FUTIMENS=1; AC_SUBST([HAVE_FUTIMENS]) HAVE_GETUMASK=1; AC_SUBST([HAVE_GETUMASK]) HAVE_LCHMOD=1; AC_SUBST([HAVE_LCHMOD]) HAVE_LSTAT=1; AC_SUBST([HAVE_LSTAT]) HAVE_MKDIRAT=1; AC_SUBST([HAVE_MKDIRAT]) HAVE_MKFIFO=1; AC_SUBST([HAVE_MKFIFO]) HAVE_MKFIFOAT=1; AC_SUBST([HAVE_MKFIFOAT]) HAVE_MKNOD=1; AC_SUBST([HAVE_MKNOD]) HAVE_MKNODAT=1; AC_SUBST([HAVE_MKNODAT]) HAVE_UTIMENSAT=1; AC_SUBST([HAVE_UTIMENSAT]) REPLACE_CHMOD=0; AC_SUBST([REPLACE_CHMOD]) REPLACE_FCHMODAT=0; AC_SUBST([REPLACE_FCHMODAT]) REPLACE_FSTAT=0; AC_SUBST([REPLACE_FSTAT]) REPLACE_FSTATAT=0; AC_SUBST([REPLACE_FSTATAT]) REPLACE_FUTIMENS=0; AC_SUBST([REPLACE_FUTIMENS]) REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT]) REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR]) REPLACE_MKFIFO=0; AC_SUBST([REPLACE_MKFIFO]) REPLACE_MKFIFOAT=0; AC_SUBST([REPLACE_MKFIFOAT]) REPLACE_MKNOD=0; AC_SUBST([REPLACE_MKNOD]) REPLACE_MKNODAT=0; AC_SUBST([REPLACE_MKNODAT]) REPLACE_STAT=0; AC_SUBST([REPLACE_STAT]) REPLACE_UTIMENSAT=0; AC_SUBST([REPLACE_UTIMENSAT]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/sys_time_h.m4���������������������������������������������������������0000644�0001750�0001750�00000010420�14557510506�014420� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a replacement for <sys/time.h>. # serial 12 # Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert and Martin Lambers. AC_DEFUN_ONCE([gl_SYS_TIME_H], [ dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1 dnl statements that occur in other macros. AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_HEADERS_ONCE([sys/time.h]) gl_CHECK_NEXT_HEADERS([sys/time.h]) if test $ac_cv_header_sys_time_h != yes; then HAVE_SYS_TIME_H=0 fi dnl On native Windows with MSVC, 'struct timeval' is defined in <winsock2.h> dnl only. So include that header in the list. gl_PREREQ_SYS_H_WINSOCK2 AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#if HAVE_SYS_TIME_H #include <sys/time.h> #endif #include <time.h> #if HAVE_WINSOCK2_H # include <winsock2.h> #endif ]], [[static struct timeval x; x.tv_sec = x.tv_usec;]])], [gl_cv_sys_struct_timeval=yes], [gl_cv_sys_struct_timeval=no]) ]) if test $gl_cv_sys_struct_timeval != yes; then HAVE_STRUCT_TIMEVAL=0 else dnl On native Windows with a 64-bit 'time_t', 'struct timeval' is defined dnl (in <sys/time.h> and <winsock2.h> for mingw64, in <winsock2.h> only dnl for MSVC) with a tv_sec field of type 'long' (32-bit!), which is dnl smaller than the 'time_t' type mandated by POSIX. dnl On OpenBSD 5.1 amd64, tv_sec is 64 bits and time_t 32 bits, but dnl that is good enough. AC_CACHE_CHECK([for wide-enough struct timeval.tv_sec member], [gl_cv_sys_struct_timeval_tv_sec], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#if HAVE_SYS_TIME_H #include <sys/time.h> #endif #include <time.h> #if HAVE_WINSOCK2_H # include <winsock2.h> #endif ]], [[static struct timeval x; typedef int verify_tv_sec_type[ sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 ]; ]])], [gl_cv_sys_struct_timeval_tv_sec=yes], [gl_cv_sys_struct_timeval_tv_sec=no]) ]) if test $gl_cv_sys_struct_timeval_tv_sec != yes; then REPLACE_STRUCT_TIMEVAL=1 fi fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_SYS_TIME_H # include <sys/time.h> #endif #include <time.h> ]], [gettimeofday]) ]) # gl_SYS_TIME_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_TIME_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_TIME_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_TIME_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETTIMEOFDAY]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_TIME_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_TIME_H_DEFAULTS], [ dnl Assume POSIX behavior unless another module says otherwise. HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY]) HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL]) HAVE_SYS_TIME_H=1; AC_SUBST([HAVE_SYS_TIME_H]) REPLACE_GETTIMEOFDAY=0; AC_SUBST([REPLACE_GETTIMEOFDAY]) REPLACE_STRUCT_TIMEVAL=0; AC_SUBST([REPLACE_STRUCT_TIMEVAL]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/sys_types_h.m4��������������������������������������������������������0000644�0001750�0001750�00000004361�14557510506�014635� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_types_h.m4 serial 13 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_TYPES_H], [ AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) dnl Use sane struct stat types in OpenVMS 8.2 and later. AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.]) gl_NEXT_HEADERS([sys/types.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to override the 'off_t' type. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Whether to override the 'dev_t' and 'ino_t' types. m4_ifdef([gl_WINDOWS_STAT_INODES], [ AC_REQUIRE([gl_WINDOWS_STAT_INODES]) ], [ WINDOWS_STAT_INODES=0 ]) AC_SUBST([WINDOWS_STAT_INODES]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_TYPES_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS], [ ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], [ ]) # This works around a buggy version in autoconf <= 2.69. # See <https://lists.gnu.org/r/autoconf/2016-08/msg00014.html> # The 2.70 version isn't quoted properly, so override it too. m4_version_prereq([2.70.1], [], [ m4_undefine([AC_HEADER_MAJOR]) AC_DEFUN([AC_HEADER_MAJOR], [AC_CHECK_HEADERS_ONCE([sys/types.h]) AC_CHECK_HEADER([sys/mkdev.h], [AC_DEFINE([MAJOR_IN_MKDEV], [1], [Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.])]) if test $ac_cv_header_sys_mkdev_h = no; then AC_CHECK_HEADER([sys/sysmacros.h], [AC_DEFINE([MAJOR_IN_SYSMACROS], [1], [Define to 1 if `major', `minor', and `makedev' are declared in <sysmacros.h>.])]) fi ])# AC_HEADER_MAJOR ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/sys_uio_h.m4����������������������������������������������������������0000644�0001750�0001750�00000003102�14557510506�014255� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_uio_h.m4 serial 3 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_UIO_H], [ AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS]) dnl <sys/uio.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/uio.h]) if test $ac_cv_header_sys_uio_h = yes; then HAVE_SYS_UIO_H=1 else HAVE_SYS_UIO_H=0 fi AC_SUBST([HAVE_SYS_UIO_H]) ]) # gl_SYS_UIO_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_UIO_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_UIO_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_UIO_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_UIO_H_MODULE_INDICATOR_DEFAULTS], [ ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_UIO_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_UIO_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_UIO_H_DEFAULTS], [ ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/sys_wait_h.m4���������������������������������������������������������0000644�0001750�0001750�00000003516�14557510506�014436� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_wait_h.m4 serial 9 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_WAIT_H], [ AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS]) dnl <sys/wait.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/wait.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <sys/wait.h>]], [waitpid]) ]) # gl_SYS_WAIT_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_WAIT_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_WAIT_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_WAIT_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_WAIT_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WAITPID]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_WAIT_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_WAIT_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/sysexits.m4�����������������������������������������������������������0000644�0001750�0001750�00000002273�14557510506�014157� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sysexits.m4 serial 7 dnl Copyright (C) 2003, 2005, 2007, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SYSEXITS], [ AC_CHECK_HEADERS_ONCE([sysexits.h]) if test $ac_cv_header_sysexits_h = yes; then HAVE_SYSEXITS_H=1 gl_CHECK_NEXT_HEADERS([sysexits.h]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sysexits.h>]], [[switch (0) { case EX_OK: case EX_USAGE: case EX_DATAERR: case EX_NOINPUT: case EX_NOUSER: case EX_NOHOST: case EX_UNAVAILABLE: case EX_SOFTWARE: case EX_OSERR: case EX_OSFILE: case EX_CANTCREAT: case EX_IOERR: case EX_TEMPFAIL: case EX_PROTOCOL: case EX_NOPERM: case EX_CONFIG: break; } ]])], [GL_GENERATE_SYSEXITS_H=false], [GL_GENERATE_SYSEXITS_H=true]) else HAVE_SYSEXITS_H=0 GL_GENERATE_SYSEXITS_H=true fi AC_SUBST([HAVE_SYSEXITS_H]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/thread.m4�������������������������������������������������������������0000644�0001750�0001750�00000001025�14557510506�013525� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# thread.m4 serial 5 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_THREAD], [ AC_REQUIRE([gl_THREADLIB]) if test $gl_threads_api = posix; then gl_saved_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" gl_CHECK_FUNCS_ANDROID([pthread_atfork], [[#include <pthread.h>]]) LIBS="$gl_saved_LIBS" fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/threadlib.m4����������������������������������������������������������0000644�0001750�0001750�00000062136�14557510506�014226� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# threadlib.m4 serial 42 dnl Copyright (C) 2005-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.60]) dnl The general structure of the multithreading modules in gnulib is that we dnl have three set of modules: dnl dnl * POSIX API: dnl pthread, which combines dnl pthread-h dnl pthread-thread dnl pthread-once dnl pthread-mutex dnl pthread-rwlock dnl pthread-cond dnl pthread-tss dnl pthread-spin dnl sched_yield dnl dnl * ISO C API: dnl threads, which combines dnl threads-h dnl thrd dnl mtx dnl cnd dnl tss dnl dnl * Gnulib API, with an implementation that can be chosen at configure dnl time through the option --enable-threads=... dnl thread dnl lock dnl cond dnl tls dnl yield dnl dnl They are independent, except for the fact that dnl - the implementation of the ISO C API may use the POSIX (or some other dnl platform dependent) API, dnl - the implementation of the Gnulib API may use the POSIX or ISO C or dnl some other platform dependent API, depending on the --enable-threads dnl option. dnl dnl This file contains macros for all of these APIs! dnl ============================================================================ dnl Macros for all thread APIs AC_DEFUN([gl_ANYTHREADLIB_EARLY], [ AC_REQUIRE([AC_CANONICAL_HOST]) if test -z "$gl_anythreadlib_early_done"; then case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks <pthread.h>. cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in <errno.h>. case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac gl_anythreadlib_early_done=done fi ]) dnl Checks whether the compiler and linker support weak declarations of symbols. AC_DEFUN([gl_WEAK_SYMBOLS], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether imported symbols can be declared weak], [gl_cv_have_weak], [case "$host_os" in cygwin* | mingw* | windows*) dnl On Cygwin 3.2.0 with gcc 10.2, and likewise on mingw 10.0.0 with dnl gcc 11.3, the test below would succeed, but programs that use dnl pthread_in_use() with weak symbol references crash miserably at dnl runtime. gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no dnl First, test whether the compiler accepts it syntactically. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern void xyzzy (); #pragma weak xyzzy]], [[xyzzy();]])], [gl_cv_have_weak=maybe]) if test $gl_cv_have_weak = maybe; then dnl Second, test whether it actually works. On Cygwin 1.7.2, with dnl gcc 4.3, symbols declared weak always evaluate to the address 0. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); }]])], [gl_cv_have_weak=yes], [gl_cv_have_weak=no], [dnl When cross-compiling, assume that only ELF platforms support dnl weak symbols. AC_EGREP_CPP([Extensible Linking Format], [#ifdef __ELF__ Extensible Linking Format #endif ], [gl_cv_have_weak="guessing yes"], [gl_cv_have_weak="guessing no"]) ]) fi ;; esac dnl But when linking statically, weak symbols don't work. case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac dnl Test for a bug in FreeBSD 11: A link error occurs when using a weak dnl symbol and linking against a shared library that has a dependency on dnl the shared library that defines the symbol. case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&AS_MESSAGE_LOG_FD 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&AS_MESSAGE_LOG_FD 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac ]) case "$gl_cv_have_weak" in *yes) AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], [Define to 1 if the compiler and linker support weak declarations of symbols.]) ;; esac ]) dnl ============================================================================ dnl Macros for the POSIX API dnl gl_PTHREADLIB dnl ------------- dnl Tests for the libraries needs for using the POSIX threads API. dnl Sets the variable LIBPTHREAD to the linker options for use in a Makefile. dnl Sets the variable LIBPMULTITHREAD, for programs that really need dnl multithread functionality. The difference between LIBPTHREAD and dnl LIBPMULTITHREAD is that on platforms supporting weak symbols, typically dnl LIBPTHREAD is empty whereas LIBPMULTITHREAD is not. dnl Sets the variable SCHED_YIELD_LIB to the linker options needed to use the dnl sched_yield() function. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. dnl Defines the C macro HAVE_PTHREAD_API if (at least parts of) the POSIX dnl threads API is available. dnl The guts of gl_PTHREADLIB. Needs to be expanded only once. AC_DEFUN([gl_PTHREADLIB_BODY], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) if test -z "$gl_pthreadlib_body_done"; then gl_pthread_api=no LIBPTHREAD= LIBPMULTITHREAD= # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. AC_CHECK_HEADER([pthread.h], [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html saved_LIBS="$LIBS" for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> pthread_mutex_t m; pthread_mutexattr_t ma; ]], [[pthread_mutex_lock (&m); pthread_mutexattr_init (&ma);]])], [gl_pthread_api=yes LIBPTHREAD=$gl_pthread LIBPMULTITHREAD=$gl_pthread]) LIBS="$saved_LIBS" test $gl_pthread_api = yes && break done echo "$as_me:__oline__: gl_pthread_api=$gl_pthread_api" >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: LIBPTHREAD=$LIBPTHREAD" >&AS_MESSAGE_LOG_FD gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional # pthread functions. case "$host_os" in linux*) AC_EGREP_CPP([Lucky user], [#include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) Lucky user #endif #endif ], [gl_pthread_in_glibc=yes], []) ;; esac echo "$as_me:__oline__: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&AS_MESSAGE_LOG_FD # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. AC_CHECK_LIB([pthread], [pthread_kill], [if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in changequote(,)dnl solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) changequote([,])dnl AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], [Define if the pthread_in_use() detection is hard.]) esac fi ], [dnl This is needed on FreeBSD 5.2.1. AC_CHECK_LIB([thr], [pthread_kill], [if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lthr fi ]) ]) elif test $gl_pthread_api != yes; then # Some library is needed. Try libpthread and libc_r. AC_CHECK_LIB([pthread], [pthread_kill], [gl_pthread_api=yes LIBPTHREAD=-lpthread LIBPMULTITHREAD=-lpthread]) if test $gl_pthread_api != yes; then # For FreeBSD 4. AC_CHECK_LIB([c_r], [pthread_kill], [gl_pthread_api=yes LIBPTHREAD=-lc_r LIBPMULTITHREAD=-lc_r]) fi fi echo "$as_me:__oline__: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&AS_MESSAGE_LOG_FD fi AC_MSG_CHECKING([whether POSIX threads API is available]) AC_MSG_RESULT([$gl_pthread_api]) AC_SUBST([LIBPTHREAD]) AC_SUBST([LIBPMULTITHREAD]) if test $gl_pthread_api = yes; then AC_DEFINE([HAVE_PTHREAD_API], [1], [Define if you have the <pthread.h> header and the POSIX threads API.]) fi dnl On some systems, sched_yield is in librt, rather than in libpthread. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <sched.h>]], [[sched_yield ();]])], [SCHED_YIELD_LIB= ], [dnl Solaris 7...10 has sched_yield in librt, not in libpthread or libc. AC_CHECK_LIB([rt], [sched_yield], [SCHED_YIELD_LIB=-lrt], [dnl Solaris 2.5.1, 2.6 has sched_yield in libposix4, not librt. AC_CHECK_LIB([posix4], [sched_yield], [SCHED_YIELD_LIB=-lposix4])]) ]) AC_SUBST([SCHED_YIELD_LIB]) dnl For backward compatibility. LIB_SCHED_YIELD="$SCHED_YIELD_LIB" AC_SUBST([LIB_SCHED_YIELD]) gl_pthreadlib_body_done=done fi ]) AC_DEFUN([gl_PTHREADLIB], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) gl_PTHREADLIB_BODY ]) dnl ============================================================================ dnl Macros for the ISO C API dnl gl_STDTHREADLIB dnl --------------- dnl Tests for the libraries needs for using the ISO C threads API. dnl Sets the variable LIBSTDTHREAD to the linker options for use in a Makefile. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. dnl Defines the C macro HAVE_THREADS_H if (at least parts of) the ISO C threads dnl API is available. dnl The guts of gl_STDTHREADLIB. Needs to be expanded only once. AC_DEFUN([gl_STDTHREADLIB_BODY], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) AC_REQUIRE([AC_CANONICAL_HOST]) if test -z "$gl_stdthreadlib_body_done"; then AC_CHECK_HEADERS_ONCE([threads.h]) case "$host_os" in mingw* | windows*) LIBSTDTHREAD= ;; *) gl_PTHREADLIB_BODY if test $ac_cv_header_threads_h = yes; then dnl glibc >= 2.29 has thrd_create in libpthread. dnl FreeBSD >= 10 has thrd_create in libstdthreads; this library depends dnl on libpthread (for the symbol 'pthread_mutexattr_gettype'). dnl glibc >= 2.34, AIX >= 7.1, and Solaris >= 11.4 have thrd_create in dnl libc. gl_CHECK_FUNCS_ANDROID([thrd_create], [[#include <threads.h>]]) if test $ac_cv_func_thrd_create = yes; then LIBSTDTHREAD= else AC_CHECK_LIB([stdthreads], [thrd_create], [ LIBSTDTHREAD='-lstdthreads -lpthread' ], [ dnl Guess that thrd_create is in libpthread. LIBSTDTHREAD="$LIBPMULTITHREAD" ]) fi else dnl Libraries needed by thrd.c, mtx.c, cnd.c, tss.c. LIBSTDTHREAD="$LIBPMULTITHREAD $SCHED_YIELD_LIB" fi ;; esac AC_SUBST([LIBSTDTHREAD]) AC_MSG_CHECKING([whether ISO C threads API is available]) AC_MSG_RESULT([$ac_cv_header_threads_h]) gl_stdthreadlib_body_done=done fi ]) AC_DEFUN([gl_STDTHREADLIB], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) gl_STDTHREADLIB_BODY ]) dnl ============================================================================ dnl Macros for the Gnulib API dnl gl_THREADLIB dnl ------------ dnl Tests for a multithreading library to be used. dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the dnl default is 'no', otherwise it is system dependent. In both cases, the user dnl can change the choice through the options --enable-threads=choice or dnl --disable-threads. dnl Defines at most one of the macros USE_ISOC_THREADS, USE_POSIX_THREADS, dnl USE_ISOC_AND_POSIX_THREADS, USE_WINDOWS_THREADS. dnl The choice --enable-threads=isoc+posix is available only on platforms that dnl have both the ISO C and the POSIX threads APIs. It has the effect of using dnl the ISO C API for most things and the POSIX API only for creating and dnl controlling threads (because there is no equivalent to pthread_atfork in dnl the ISO C API). dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with dnl libtool). dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for dnl programs that really need multithread functionality. The difference dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. dnl Since support for GNU pth was removed, $LTLIBTHREAD and $LIBTHREAD have the dnl same value, and similarly $LTLIBMULTITHREAD and $LIBMULTITHREAD have the dnl same value. Only system libraries are needed. AC_DEFUN([gl_THREADLIB_EARLY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) ]) dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_EARLY_BODY], [ dnl Ordering constraints: This macro modifies CPPFLAGS in a way that dnl influences the result of the autoconf tests that test for *_unlocked dnl declarations, on AIX 5 at least. Therefore it must come early. AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl AC_BEFORE([$0], [gl_ARGP])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Check for multithreading. m4_ifdef([gl_THREADLIB_DEFAULT_NO], [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])], [m4_divert_text([DEFAULTS], [gl_use_threads_default=])]) dnl gl_use_winpthreads_default defaults to 'no', because in mingw 10, like dnl in mingw 5, the use of libwinpthread still makes test-pthread-tss crash. m4_divert_text([DEFAULTS], [gl_use_winpthreads_default=no]) AC_ARG_ENABLE([threads], AS_HELP_STRING([[--enable-threads={isoc|posix|isoc+posix|windows}]], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ AS_HELP_STRING([[--disable-threads]], [build without multithread safety])]), [gl_use_threads=$enableval], [if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else changequote(,)dnl case "$host_os" in dnl Disable multithreading by default on OSF/1, because it interferes dnl with fork()/exec(): When msgexec is linked with -lpthread, its dnl child process gets an endless segmentation fault inside execvp(). osf*) gl_use_threads=no ;; dnl Disable multithreading by default on Cygwin 1.5.x, because it has dnl bugs that lead to endless loops or crashes. See dnl <https://cygwin.com/ml/cygwin/2009-08/msg00283.html>. cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; dnl Obey gl_AVOID_WINPTHREAD on mingw. mingw* | windows*) case "$gl_use_winpthreads_default" in yes) gl_use_threads=posix ;; no) gl_use_threads=windows ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac changequote([,])dnl fi ]) if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = isoc \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then # For using <threads.h> or <pthread.h>: gl_ANYTHREADLIB_EARLY fi ]) dnl The guts of gl_THREADLIB. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_BODY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then dnl Check whether the compiler and linker support weak declarations. gl_WEAK_SYMBOLS if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then dnl If we use weak symbols to implement pthread_in_use / pth_in_use / dnl thread_in_use, we also need to test whether the ISO C 11 thrd_create dnl facility is in use. AC_CHECK_HEADERS_ONCE([threads.h]) : fi if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then AC_CHECK_HEADERS_ONCE([threads.h]) gl_have_isoc_threads="$ac_cv_header_threads_h" fi if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then gl_PTHREADLIB_BODY LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD if test $gl_pthread_api = yes; then if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then gl_threads_api='isoc+posix' AC_DEFINE([USE_ISOC_AND_POSIX_THREADS], [1], [Define if the combination of the ISO C and POSIX multithreading APIs can be used.]) LIBTHREAD= LTLIBTHREAD= else gl_threads_api=posix AC_DEFINE([USE_POSIX_THREADS], [1], [Define if the POSIX multithreading library can be used.]) if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then AC_DEFINE([USE_POSIX_THREADS_FROM_LIBC], [1], [Define if references to the POSIX multithreading library are satisfied by libc.]) else if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], [Define if references to the POSIX multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= else case "$host_os" in freebsd* | dragonfly* | midnightbsd*) if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then dnl If weak symbols can't tell whether pthread_create(), pthread_key_create() dnl etc. will succeed, we need a runtime test. AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], [Define if the pthread_in_use() detection is hard.]) fi ;; esac fi fi fi fi fi if test $gl_threads_api = none; then if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then gl_STDTHREADLIB_BODY LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD gl_threads_api=isoc AC_DEFINE([USE_ISOC_THREADS], [1], [Define if the ISO C multithreading library can be used.]) fi fi if test $gl_threads_api = none; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in mingw* | windows*) true;; *) false;; esac }; then gl_threads_api=windows AC_DEFINE([USE_WINDOWS_THREADS], [1], [Define if the native Windows multithreading API can be used.]) fi ;; esac fi else dnl "$gl_use_threads" is "no". AC_DEFINE([AVOID_ANY_THREADS], [1], [Define if no multithread safety and no multithreading is desired.]) fi AC_MSG_CHECKING([for multithread API to use]) AC_MSG_RESULT([$gl_threads_api]) AC_SUBST([LIBTHREAD]) AC_SUBST([LTLIBTHREAD]) AC_SUBST([LIBMULTITHREAD]) AC_SUBST([LTLIBMULTITHREAD]) ]) AC_DEFUN([gl_THREADLIB], [ AC_REQUIRE([gl_THREADLIB_EARLY]) AC_REQUIRE([gl_THREADLIB_BODY]) ]) dnl gl_DISABLE_THREADS dnl ------------------ dnl Sets the gl_THREADLIB default so that threads are not used by default. dnl The user can still override it at installation time, by using the dnl configure option '--enable-threads'. AC_DEFUN([gl_DISABLE_THREADS], [ m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no]) ]) dnl gl_AVOID_WINPTHREAD dnl ------------------- dnl Sets the gl_THREADLIB default so that on mingw, a dependency to the dnl libwinpthread DLL (mingw-w64 winpthreads library) is avoided. dnl The user can still override it at installation time, by using the dnl configure option '--enable-threads=posix'. dnl As of 2023, this is now the default. AC_DEFUN([gl_AVOID_WINPTHREAD], [ m4_divert_text([INIT_PREPARE], [gl_use_winpthreads_default=no]) ]) dnl ============================================================================ dnl Survey of platforms: dnl dnl Platform Available Compiler Supports test-lock dnl flavours option weak result dnl --------------- --------- --------- -------- --------- dnl Linux 2.4/glibc posix -lpthread Y OK dnl dnl Linux/glibc 2.34 posix Y OK dnl dnl GNU Hurd/glibc posix -lpthread Y OK dnl dnl Ubuntu 14.04 posix -pthread Y OK dnl dnl FreeBSD 5.3 posix -lc_r Y dnl posix -lkse ? Y dnl posix -lpthread ? Y dnl posix -lthr Y dnl dnl FreeBSD 5.2 posix -lc_r Y dnl posix -lkse Y dnl posix -lthr Y dnl dnl FreeBSD 4.0,4.10 posix -lc_r Y OK dnl dnl NetBSD 1.6 -- dnl dnl OpenBSD 3.4 posix -lpthread Y OK dnl dnl Mac OS X 10.[123] posix -lpthread Y OK dnl dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK dnl dnl HP-UX 11 posix -lpthread N (cc) OK dnl Y (gcc) dnl dnl IRIX 6.5 posix -lpthread Y 0.5 dnl dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK dnl dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK dnl -lpthread (gcc) Y dnl dnl Cygwin posix -lpthread Y OK dnl dnl Mingw windows N OK dnl dnl BeOS 5 -- dnl dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is dnl turned off: dnl OK if all three tests terminate OK, dnl 0.5 if the first test terminates OK but the second one loops endlessly, dnl 0.0 if the first test already loops endlessly. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/time.m4���������������������������������������������������������������0000644�0001750�0001750�00000003303�14557510506�013215� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# time.m4 serial 5 dnl Copyright (C) 2023-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gl_FUNC_TIME], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl glibc has the bug https://sourceware.org/bugzilla/show_bug.cgi?id=30200 . AC_CACHE_CHECK([whether time() works], [gl_cv_func_time_works], [dnl Guess that it works except on dnl - glibc >= 2.31 with Linux. And binaries produced on glibc < 2.31 dnl need to run fine on newer glibc versions as well; therefore ignore dnl __GLIBC_MINOR__. dnl - FreeBSD/sparc, dnl - AIX, dnl - native Windows. case "$host_os" in linux*-gnu*) AC_EGREP_CPP([Unlucky], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if __GLIBC__ == 2 Unlucky GNU user #endif #endif ], [gl_cv_func_time_works="guessing no"], [gl_cv_func_time_works="guessing yes"]) ;; freebsd*) case "$host_cpu" in sparc*) gl_cv_func_time_works="guessing no";; *) gl_cv_func_time_works="guessing yes";; esac ;; aix*) gl_cv_func_time_works="guessing no";; mingw* | windows*) gl_cv_func_time_works="guessing no";; *) gl_cv_func_time_works="guessing yes";; esac ]) case "$gl_cv_func_time_works" in *no) REPLACE_TIME=1 ;; esac ]) # Prerequisites of lib/time.c. AC_DEFUN([gl_PREREQ_TIME], [ : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/time_h.m4�������������������������������������������������������������0000644�0001750�0001750�00000016266�14557510506�013540� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a more-standard replacement for <time.h>. # Copyright (C) 2000-2001, 2003-2007, 2009-2024 Free Software Foundation, Inc. # serial 25 # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert and Jim Meyering. AC_DEFUN_ONCE([gl_TIME_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_TIME_H_DEFAULTS]) gl_NEXT_HEADERS([time.h]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #include <time.h> ]], [ asctime asctime_r ctime ctime_r gmtime_r localtime localtime_r mktime nanosleep strftime strptime time timegm timespec_get timespec_getres tzset ]) AC_REQUIRE([AC_C_RESTRICT]) AC_CACHE_CHECK([for TIME_UTC in <time.h>], [gl_cv_time_h_has_TIME_UTC], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <time.h> ]], [[static int x = TIME_UTC; x++;]])], [gl_cv_time_h_has_TIME_UTC=yes], [gl_cv_time_h_has_TIME_UTC=no])]) if test $gl_cv_time_h_has_TIME_UTC = yes; then TIME_H_DEFINES_TIME_UTC=1 else TIME_H_DEFINES_TIME_UTC=0 fi AC_SUBST([TIME_H_DEFINES_TIME_UTC]) ]) dnl Check whether 'struct timespec' is declared dnl in time.h, sys/time.h, pthread.h, or unistd.h. AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], [ AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CACHE_CHECK([for struct timespec in <time.h>], [gl_cv_sys_struct_timespec_in_time_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <time.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_time_h=yes], [gl_cv_sys_struct_timespec_in_time_h=no])]) TIME_H_DEFINES_STRUCT_TIMESPEC=0 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 if test $gl_cv_sys_struct_timespec_in_time_h = yes; then TIME_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in <sys/time.h>], [gl_cv_sys_struct_timespec_in_sys_time_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/time.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_sys_time_h=yes], [gl_cv_sys_struct_timespec_in_sys_time_h=no])]) if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in <pthread.h>], [gl_cv_sys_struct_timespec_in_pthread_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_pthread_h=yes], [gl_cv_sys_struct_timespec_in_pthread_h=no])]) if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in <unistd.h>], [gl_cv_sys_struct_timespec_in_unistd_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_unistd_h=yes], [gl_cv_sys_struct_timespec_in_unistd_h=no])]) if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 fi fi fi fi AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC]) ]) # gl_TIME_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_TIME_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_TIME_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_TIME_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_TIME_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NANOSLEEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRFTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMEGM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMESPEC_GET]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMESPEC_GETRES]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_RZ]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TZSET]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_TZSET], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_TIME_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_TIME_H_DEFAULTS]) ]) AC_DEFUN([gl_TIME_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R]) HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP]) HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME]) HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM]) HAVE_TIMESPEC_GET=1; AC_SUBST([HAVE_TIMESPEC_GET]) HAVE_TIMESPEC_GETRES=1; AC_SUBST([HAVE_TIMESPEC_GETRES]) dnl Even GNU libc does not have timezone_t yet. HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T]) REPLACE_CTIME=0; AC_SUBST([REPLACE_CTIME]) REPLACE_GMTIME=0; AC_SUBST([REPLACE_GMTIME]) REPLACE_LOCALTIME=0; AC_SUBST([REPLACE_LOCALTIME]) REPLACE_LOCALTIME_R=0; AC_SUBST([REPLACE_LOCALTIME_R]) REPLACE_MKTIME=0; AC_SUBST([REPLACE_MKTIME]) REPLACE_NANOSLEEP=0; AC_SUBST([REPLACE_NANOSLEEP]) REPLACE_STRFTIME=0; AC_SUBST([REPLACE_STRFTIME]) REPLACE_TIME=0; AC_SUBST([REPLACE_TIME]) REPLACE_TIMEGM=0; AC_SUBST([REPLACE_TIMEGM]) REPLACE_TIMESPEC_GET=0; AC_SUBST([REPLACE_TIMESPEC_GET]) REPLACE_TIMESPEC_GETRES=0; AC_SUBST([REPLACE_TIMESPEC_GETRES]) REPLACE_TZSET=0; AC_SUBST([REPLACE_TZSET]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/time_r.m4�������������������������������������������������������������0000644�0001750�0001750�00000006461�14557510506�013546� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Reentrant time functions: localtime_r, gmtime_r. dnl Copyright (C) 2003, 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_TIME_R], [ dnl Persuade glibc and Solaris <time.h> to declare localtime_r. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) dnl Some systems don't declare localtime_r() and gmtime_r() if _REENTRANT is dnl not defined. AC_CHECK_DECLS([localtime_r], [], [], [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> ]]) if test $ac_cv_have_decl_localtime_r = no; then HAVE_DECL_LOCALTIME_R=0 fi AC_CHECK_FUNCS_ONCE([localtime_r]) if test $ac_cv_func_localtime_r = yes; then HAVE_LOCALTIME_R=1 AC_CACHE_CHECK([whether localtime_r is compatible with its POSIX signature], [gl_cv_time_r_posix], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> ]], [[/* We don't need to append 'restrict's to the argument types, even though the POSIX signature has the 'restrict's, since C99 says they can't affect type compatibility. */ struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r; if (ptr) return 0; /* Check the return type is a pointer. On HP-UX 10 it is 'int'. */ *localtime_r (0, 0);]]) ], [gl_cv_time_r_posix=yes], [gl_cv_time_r_posix=no]) ]) if test $gl_cv_time_r_posix != yes; then REPLACE_LOCALTIME_R=1 fi else HAVE_LOCALTIME_R=0 dnl On mingw, localtime_r() is defined as an inline function; use through a dnl direct function call works but the use as a function pointer leads to a dnl link error. AC_CACHE_CHECK([whether localtime_r exists as an inline function], [gl_cv_func_localtime_r_inline], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> ]], [[time_t a; struct tm r; localtime_r (&a, &r); ]]) ], [gl_cv_func_localtime_r_inline=yes], [gl_cv_func_localtime_r_inline=no]) ]) if test $gl_cv_func_localtime_r_inline = yes; then REPLACE_LOCALTIME_R=1 fi fi ]) # Prerequisites of lib/time_r.c. AC_DEFUN([gl_PREREQ_TIME_R], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/tm_gmtoff.m4����������������������������������������������������������0000644�0001750�0001750�00000001035�14557510506�014241� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tm_gmtoff.m4 serial 3 dnl Copyright (C) 2002, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_TM_GMTOFF], [ AC_CHECK_MEMBER([struct tm.tm_gmtoff], [AC_DEFINE([HAVE_TM_GMTOFF], [1], [Define if struct tm has the tm_gmtoff member.])], , [#include <time.h>]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/uchar_h.m4������������������������������������������������������������0000644�0001750�0001750�00000021735�14557510506�013701� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# uchar_h.m4 serial 31 dnl Copyright (C) 2019-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Prepare the overridden <uchar.h>. AC_DEFUN_ONCE([gl_UCHAR_H], [ AC_REQUIRE([gl_UCHAR_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([uchar.h]) if test $ac_cv_header_uchar_h = yes; then HAVE_UCHAR_H=1 else HAVE_UCHAR_H=0 fi AC_SUBST([HAVE_UCHAR_H]) gl_TYPE_CHAR8_T gl_TYPE_CHAR16_T gl_TYPE_CHAR32_T dnl In C++ mode, clang defines 'char16_t' and 'char32_t' as built-in types dnl on some platforms (e.g. OpenBSD 6.7), and as types defined by many dnl header files (<limits.h>, <stddef.h>, <stdint.h>, <stdio.h>, <stdlib.h> dnl and others) on some platforms (e.g. Mac OS X 10.13). dnl The same thing may also happen for 'char8_t'; so, be prepared for it. m4_ifdef([gl_ANSI_CXX], [AC_REQUIRE([gl_ANSI_CXX])]) CXX_HAS_UCHAR_TYPES=0 if test $HAVE_UCHAR_H = 0; then if test "$CXX" != no; then AC_CACHE_CHECK([whether the C++ compiler predefines the <uchar.h> types], [gl_cv_cxx_has_uchar_types], [dnl We can't use AC_LANG_PUSH([C++]) and AC_LANG_POP([C++]) here, due to dnl an autoconf bug <https://savannah.gnu.org/support/?110294>. cat > conftest.cpp <<\EOF #include <stddef.h> char16_t a; char32_t b; EOF gl_command="$CXX $CXXFLAGS $CPPFLAGS -c conftest.cpp" if AC_TRY_EVAL([gl_command]); then gl_cv_cxx_has_uchar_types=yes else gl_cv_cxx_has_uchar_types=no fi rm -fr conftest* ]) if test $gl_cv_cxx_has_uchar_types = yes; then CXX_HAS_UCHAR_TYPES=1 fi fi fi AC_SUBST([CXX_HAS_UCHAR_TYPES]) CXX_HAS_CHAR8_TYPE=0 if test $HAVE_UCHAR_H = 0; then if test "$CXX" != no; then AC_CACHE_CHECK([whether the C++ compiler predefines the char8_t types], [gl_cv_cxx_has_char8_type], [dnl We can't use AC_LANG_PUSH([C++]) and AC_LANG_POP([C++]) here, due to dnl an autoconf bug <https://savannah.gnu.org/support/?110294>. cat > conftest.cpp <<\EOF #include <stddef.h> char8_t a; EOF gl_command="$CXX $CXXFLAGS $CPPFLAGS -c conftest.cpp" if AC_TRY_EVAL([gl_command]); then gl_cv_cxx_has_char8_type=yes else gl_cv_cxx_has_char8_type=no fi rm -fr conftest* ]) if test $gl_cv_cxx_has_char8_type = yes; then CXX_HAS_CHAR8_TYPE=1 fi fi fi AC_SUBST([CXX_HAS_CHAR8_TYPE]) dnl Test whether a 'char32_t' can hold more characters than a 'wchar_t'. gl_STDINT_BITSIZEOF([wchar_t], [gl_STDINT_INCLUDES]) if test $BITSIZEOF_WCHAR_T -lt 32; then SMALL_WCHAR_T=1 else SMALL_WCHAR_T=0 fi dnl SMALL_WCHAR_T is expected to be 1 on 32-bit AIX, Cygwin, native Windows. AC_SUBST([SMALL_WCHAR_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C11. gl_WARN_ON_USE_PREPARE([[ #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> ]], [c32rtomb mbrtoc16 mbrtoc32]) ]) AC_DEFUN_ONCE([gl_TYPE_CHAR8_T], [ dnl Determine whether gnulib's <uchar.h> would, if present, override char8_t. AC_CACHE_CHECK([whether char8_t is correctly defined], [gl_cv_type_char8_t_works], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> int verify[(char8_t)(-1) >= 0 && sizeof (char8_t) == sizeof (unsigned char) ? 1 : -1]; ]]) ], [gl_cv_type_char8_t_works=yes], [gl_cv_type_char8_t_works=no]) ]) if test $gl_cv_type_char8_t_works = no; then GNULIBHEADERS_OVERRIDE_CHAR8_T=1 else GNULIBHEADERS_OVERRIDE_CHAR8_T=0 fi AC_SUBST([GNULIBHEADERS_OVERRIDE_CHAR8_T]) ]) dnl On Haiku 2020, char16_t and char32_t are incorrectly defined. dnl See <https://dev.haiku-os.org/ticket/15990>. AC_DEFUN_ONCE([gl_TYPE_CHAR16_T], [ dnl Determine whether gnulib's <uchar.h> would, if present, override char16_t. AC_CACHE_CHECK([whether char16_t is correctly defined], [gl_cv_type_char16_t_works], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> /* For simplicity, assume that uint16_least_t is equivalent to 'unsigned short'. */ int verify[(char16_t)(-1) >= 0 && sizeof (char16_t) == sizeof (unsigned short) ? 1 : -1]; ]]) ], [gl_cv_type_char16_t_works=yes], [gl_cv_type_char16_t_works=no]) ]) if test $gl_cv_type_char16_t_works = no; then GNULIBHEADERS_OVERRIDE_CHAR16_T=1 else GNULIBHEADERS_OVERRIDE_CHAR16_T=0 fi AC_SUBST([GNULIBHEADERS_OVERRIDE_CHAR16_T]) ]) AC_DEFUN_ONCE([gl_TYPE_CHAR32_T], [ dnl Determine whether gnulib's <uchar.h> would, if present, override char32_t. AC_CACHE_CHECK([whether char32_t is correctly defined], [gl_cv_type_char32_t_works], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> /* For simplicity, assume that uint32_least_t is equivalent to 'unsigned int'. */ int verify[(char32_t)(-1) >= 0 && sizeof (char32_t) == sizeof (unsigned int) ? 1 : -1]; ]]) ], [gl_cv_type_char32_t_works=yes], [gl_cv_type_char32_t_works=no]) ]) if test $gl_cv_type_char32_t_works = no; then GNULIBHEADERS_OVERRIDE_CHAR32_T=1 else GNULIBHEADERS_OVERRIDE_CHAR32_T=0 fi AC_SUBST([GNULIBHEADERS_OVERRIDE_CHAR32_T]) ]) # gl_UCHAR_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_UCHAR_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_UCHAR_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_UCHAR_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_UCHAR_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BTOC32]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISALNUM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISALPHA]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISBLANK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISCNTRL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISDIGIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISGRAPH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISLOWER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISPRINT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISPUNCT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISSPACE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISUPPER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32ISXDIGIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32TOLOWER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32TOUPPER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32WIDTH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32RTOMB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32SNRTOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32SRTOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32STOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32SWIDTH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32TOB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32_APPLY_MAPPING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32_APPLY_TYPE_TEST]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32_GET_MAPPING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_C32_GET_TYPE_TEST]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRTOC16]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRTOC32]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNRTOC32S]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRTOC32S]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSTOC32S]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_UCHAR_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_UCHAR_H_DEFAULTS]) ]) AC_DEFUN([gl_UCHAR_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_C32RTOMB=1; AC_SUBST([HAVE_C32RTOMB]) HAVE_MBRTOC16=1; AC_SUBST([HAVE_MBRTOC16]) HAVE_MBRTOC32=1; AC_SUBST([HAVE_MBRTOC32]) REPLACE_C32RTOMB=0; AC_SUBST([REPLACE_C32RTOMB]) REPLACE_MBRTOC16=0; AC_SUBST([REPLACE_MBRTOC16]) REPLACE_MBRTOC32=0; AC_SUBST([REPLACE_MBRTOC32]) ]) �����������������������������������gnuastro-0.22/bootstrapped/m4/unicase_h.m4����������������������������������������������������������0000644�0001750�0001750�00000003376�14557510506�014227� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unicase_h.m4 serial 1 dnl Copyright (C) 2023-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_UNICASE_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_UNICASE_H_DEFAULTS]) ]) # gl_UNICASE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_UNICASE_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_UNICASE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_UNICASE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_UNICASE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_UNICASE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_UNICASE_H_DEFAULTS]) ]) AC_DEFUN([gl_UNICASE_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/unictype_h.m4���������������������������������������������������������0000644�0001750�0001750�00000043056�14557510506�014437� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unictype_h.m4 serial 2 dnl Copyright (C) 2023-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_UNICTYPE_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_UNICTYPE_H_DEFAULTS]) ]) # gl_UNICTYPE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_UNICTYPE_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_UNICTYPE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_UNICTYPE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_UNICTYPE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_UNICTYPE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_UNICTYPE_H_DEFAULTS]) ]) AC_DEFUN([gl_UNICTYPE_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/uninorm_h.m4����������������������������������������������������������0000644�0001750�0001750�00000003656�14557510506�014270� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# uninorm_h.m4 serial 1 dnl Copyright (C) 2023-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_UNINORM_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_UNINORM_H_DEFAULTS]) ]) # gl_UNINORM_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_UNINORM_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_UNINORM_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_UNINORM_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_UNINORM_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNINORM_NFD_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNINORM_NFC_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNINORM_NFKD_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNINORM_NFKC_DLL_VARIABLE], ['LIBUNISTRING_DLL_VARIABLE']) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_UNINORM_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_UNINORM_H_DEFAULTS]) ]) AC_DEFUN([gl_UNINORM_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. ]) ����������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/unistd-safer.m4�������������������������������������������������������0000644�0001750�0001750�00000000530�14557510506�014662� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 9 dnl Copyright (C) 2002, 2005-2006, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_UNISTD_SAFER], [ AC_CHECK_FUNCS_ONCE([pipe]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/unistd_h.m4�����������������������������������������������������������0000644�0001750�0001750�00000034435�14557510506�014106� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unistd_h.m4 serial 95 dnl Copyright (C) 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Simon Josefsson, Bruno Haible. AC_DEFUN_ONCE([gl_UNISTD_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([unistd.h]) if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi AC_SUBST([HAVE_UNISTD_H]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Determine WINDOWS_64_BIT_OFF_T. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_UNISTD_H # include <unistd.h> #endif /* Some systems declare various items in the wrong headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <fcntl.h> # include <stdio.h> # include <stdlib.h> # if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> # endif #endif ]], [access chdir chown copy_file_range dup dup2 dup3 environ euidaccess execl execle execlp execv execve execvp execvpe faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getentropy getgroups gethostname getlogin getlogin_r getpagesize getpass getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sethostname sleep symlink symlinkat truncate ttyname_r unlink unlinkat usleep]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS_ONCE([execvpe]) if test $ac_cv_have_decl_execvpe = no; then HAVE_DECL_EXECVPE=0 fi ]) # gl_UNISTD_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_UNISTD_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_UNISTD_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCESS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHOWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPY_FILE_RANGE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP3]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ENVIRON]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EUIDACCESS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FACCESSAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHOWNAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDATASYNC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSYNC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTRUNCATE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCWD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDOMAINNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDTABLESIZE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETENTROPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETGROUPS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETHOSTNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETOPT_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPAGESIZE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUSERSHELL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GROUP_MEMBER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISATTY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHOWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSEEK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PREAD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PWRITE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READ]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RMDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETHOSTNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SLEEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCATE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TTYNAME_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_GETOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_NONBLOCKING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_SIGPIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_USLEEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WRITE]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ACCESS], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHDIR], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CLOSE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP2], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECL], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECV], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVPE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETCWD], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETPID], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ISATTY], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_LSEEK], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_READ], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_RMDIR], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_SWAB], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UNLINK], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WRITE], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) ]) AC_DEFUN([gl_UNISTD_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) HAVE_COPY_FILE_RANGE=1; AC_SUBST([HAVE_COPY_FILE_RANGE]) HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) HAVE_EXECVPE=1; AC_SUBST([HAVE_EXECVPE]) HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT]) HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR]) HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT]) HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC]) HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) HAVE_GETENTROPY=1; AC_SUBST([HAVE_GETENTROPY]) HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS]) HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN]) HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) HAVE_GETPASS=1; AC_SUBST([HAVE_GETPASS]) HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) HAVE_LINK=1; AC_SUBST([HAVE_LINK]) HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) HAVE_PIPE=1; AC_SUBST([HAVE_PIPE]) HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2]) HAVE_PREAD=1; AC_SUBST([HAVE_PREAD]) HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE]) HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT]) HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME]) HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT]) HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP]) HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) HAVE_DECL_EXECVPE=1; AC_SUBST([HAVE_DECL_EXECVPE]) HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) HAVE_DECL_GETLOGIN=1; AC_SUBST([HAVE_DECL_GETLOGIN]) HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE]) HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL]) HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME]) HAVE_DECL_TRUNCATE=1; AC_SUBST([HAVE_DECL_TRUNCATE]) HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) REPLACE_ACCESS=0; AC_SUBST([REPLACE_ACCESS]) REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) REPLACE_COPY_FILE_RANGE=0; AC_SUBST([REPLACE_COPY_FILE_RANGE]) REPLACE_DUP=0; AC_SUBST([REPLACE_DUP]) REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2]) REPLACE_DUP3=0; AC_SUBST([REPLACE_DUP3]) REPLACE_EXECL=0; AC_SUBST([REPLACE_EXECL]) REPLACE_EXECLE=0; AC_SUBST([REPLACE_EXECLE]) REPLACE_EXECLP=0; AC_SUBST([REPLACE_EXECLP]) REPLACE_EXECV=0; AC_SUBST([REPLACE_EXECV]) REPLACE_EXECVE=0; AC_SUBST([REPLACE_EXECVE]) REPLACE_EXECVP=0; AC_SUBST([REPLACE_EXECVP]) REPLACE_EXECVPE=0; AC_SUBST([REPLACE_EXECVPE]) REPLACE_FACCESSAT=0; AC_SUBST([REPLACE_FACCESSAT]) REPLACE_FCHDIR=0; AC_SUBST([REPLACE_FCHDIR]) REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) REPLACE_FDATASYNC=0; AC_SUBST([REPLACE_FDATASYNC]) REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE]) REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE]) REPLACE_GETENTROPY=0; AC_SUBST([REPLACE_GETENTROPY]) REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) REPLACE_GETPASS=0; AC_SUBST([REPLACE_GETPASS]) REPLACE_GETPASS_FOR_GETPASS_GNU=0; AC_SUBST([REPLACE_GETPASS_FOR_GETPASS_GNU]) REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY]) REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) REPLACE_LINK=0; AC_SUBST([REPLACE_LINK]) REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT]) REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) REPLACE_PIPE2=0; AC_SUBST([REPLACE_PIPE2]) REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD]) REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE]) REPLACE_READ=0; AC_SUBST([REPLACE_READ]) REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK]) REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT]) REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) REPLACE_SETHOSTNAME=0; AC_SUBST([REPLACE_SETHOSTNAME]) REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT]) REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE]) REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R]) REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK]) REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT]) REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP]) REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) UNISTD_H_HAVE_SYS_RANDOM_H=0; AC_SUBST([UNISTD_H_HAVE_SYS_RANDOM_H]) UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/usleep.m4�������������������������������������������������������������0000644�0001750�0001750�00000004256�14557510506�013564� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# usleep.m4 serial 9 dnl Copyright (C) 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This macro intentionally does not check for select or nanosleep; dnl both of those modules can require external libraries. AC_DEFUN([gl_FUNC_USLEEP], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl usleep was required in POSIX 2001, but dropped as obsolete in dnl POSIX 2008; therefore, it is not always exposed in headers. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([usleep]) AC_CHECK_TYPE([useconds_t], [], [AC_DEFINE([useconds_t], [unsigned int], [Define to an unsigned 32-bit type if <sys/types.h> lacks this type.])]) if test $ac_cv_func_usleep = no; then HAVE_USLEEP=0 else dnl POSIX allows implementations to reject arguments larger than dnl 999999, but GNU guarantees it will work. AC_CACHE_CHECK([whether usleep allows large arguments], [gl_cv_func_usleep_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <unistd.h> ]], [[return !!usleep (1000000);]])], [gl_cv_func_usleep_works=yes], [gl_cv_func_usleep_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_usleep_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_usleep_works="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_usleep_works="guessing yes" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_usleep_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_usleep_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_usleep_works" in *yes) ;; *) REPLACE_USLEEP=1 ;; esac fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/vasnprintf.m4���������������������������������������������������������0000644�0001750�0001750�00000035050�14557510506�014455� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vasnprintf.m4 serial 52 dnl Copyright (C) 2002-2004, 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VASNPRINTF], [ AC_CHECK_FUNCS_ONCE([vasnprintf]) if test $ac_cv_func_vasnprintf = no; then gl_REPLACE_VASNPRINTF fi ]) AC_DEFUN([gl_REPLACE_VASNPRINTF], [ AC_CHECK_FUNCS_ONCE([vasnprintf]) AC_LIBOBJ([vasnprintf]) AC_LIBOBJ([printf-args]) AC_LIBOBJ([printf-parse]) AC_LIBOBJ([asnprintf]) if test $ac_cv_func_vasnprintf = yes; then AC_DEFINE([REPLACE_VASNPRINTF], [1], [Define if vasnprintf exists but is overridden by gnulib.]) fi gl_PREREQ_PRINTF_ARGS gl_PREREQ_PRINTF_PARSE gl_PREREQ_VASNPRINTF gl_PREREQ_ASNPRINTF ]) AC_DEFUN([gl_FUNC_VASNWPRINTF], [ AC_LIBOBJ([printf-args]) gl_PREREQ_PRINTF_ARGS gl_PREREQ_PRINTF_PARSE gl_PREREQ_VASNWPRINTF gl_PREREQ_ASNPRINTF ]) # Prerequisites of lib/printf-args.h, lib/printf-args.c. AC_DEFUN([gl_PREREQ_PRINTF_ARGS], [ AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) ]) # Prerequisites of lib/printf-parse.h, lib/printf-parse.c. # Prerequisites of lib/wprintf-parse.h, lib/wprintf-parse.c. AC_DEFUN([gl_PREREQ_PRINTF_PARSE], [ AC_REQUIRE([gl_FEATURES_H]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) AC_REQUIRE([AC_TYPE_SIZE_T]) AC_CHECK_TYPE([ptrdiff_t], , [AC_DEFINE([ptrdiff_t], [long], [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) ]) AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) ]) # Prerequisites of lib/vasnprintf.c if !WIDE_CHAR_VERSION. AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF], [ AC_CHECK_FUNCS([snprintf strnlen wcrtomb]) dnl Use the _snprintf function only if it is declared (because on NetBSD it dnl is defined as a weak alias of snprintf; we prefer to use the latter). AC_CHECK_DECLS([_snprintf], , , [[#include <stdio.h>]]) dnl We can avoid a lot of code by assuming that snprintf's return value dnl conforms to ISO C99. So check that. AC_REQUIRE([gl_SNPRINTF_RETVAL_C99]) case "$gl_cv_func_snprintf_retval_c99" in *yes) AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1], [Define if the return value of the snprintf function is the number of of bytes (excluding the terminating NUL) that would have been produced if the buffer had been large enough.]) ;; esac dnl Additionally, the use of %n can be eliminated by assuming that snprintf dnl always produces NUL-terminated strings (no truncation). AC_REQUIRE([gl_SNPRINTF_TRUNCATION_C99]) case "$gl_cv_func_snprintf_truncation_c99" in *yes) AC_DEFINE([HAVE_SNPRINTF_TRUNCATION_C99], [1], [Define if the string produced by the snprintf function is always NUL terminated.]) ;; esac gl_PREREQ_VASNXPRINTF ]) # Prerequisites of lib/vasnwprintf.c. AC_DEFUN_ONCE([gl_PREREQ_VASNWPRINTF], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([swprintf wcsnlen mbrtowc]) AC_CHECK_DECLS([_snwprintf], , , [[#include <stdio.h>]]) AC_CHECK_DECLS([wcsnlen], , , [[#include <wchar.h>]]) gl_SWPRINTF_WORKS case "$gl_cv_func_swprintf_works" in *yes) AC_DEFINE([HAVE_WORKING_SWPRINTF], [1], [Define if the swprintf function works correctly when it produces output that contains null wide characters.]) ;; esac gl_MBRTOWC_C_LOCALE case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) AC_CACHE_CHECK([whether swprintf in the C locale is free of encoding errors], [gl_cv_func_swprintf_C_locale_sans_EILSEQ], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __USE_MINGW_ANSI_STDIO # define __USE_MINGW_ANSI_STDIO 1 #endif #include <stdio.h> #include <wchar.h> int main() { int result = 0; { /* This test fails on glibc 2.35, musl libc 1.2.4, FreeBSD 13.2, NetBSD 9.3, OpenBSD 7.2, Cygwin 2.9.0. Reported at <https://www.openwall.com/lists/musl/2023/06/12/2>. */ wchar_t buf[12]; int ret = swprintf (buf, 12, L"%c", '\377'); if (ret < 0) result |= 1; } return result; }]])], [gl_cv_func_swprintf_C_locale_sans_EILSEQ=yes], [gl_cv_func_swprintf_C_locale_sans_EILSEQ=no], [case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_func_swprintf_C_locale_sans_EILSEQ="guessing yes";; # Guess no on musl systems. *-musl* | midipix*) gl_cv_func_swprintf_C_locale_sans_EILSEQ="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_swprintf_C_locale_sans_EILSEQ="$gl_cross_guess_normal";; esac ]) ]) ;; esac if case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) false ;; *) true ;; esac \ || case "$gl_cv_func_swprintf_C_locale_sans_EILSEQ" in *yes) false ;; *) true ;; esac; then AC_DEFINE([NEED_WPRINTF_DIRECTIVE_C], [1], [Define if the vasnwprintf implementation needs special code for the 'c' directive.]) fi gl_SWPRINTF_DIRECTIVE_LA case "$gl_cv_func_swprintf_directive_la" in *yes) ;; *) AC_DEFINE([NEED_WPRINTF_DIRECTIVE_LA], [1], [Define if the vasnwprintf implementation needs special code for the 'a' directive with 'long double' arguments.]) ;; esac gl_SWPRINTF_DIRECTIVE_LC case "$gl_cv_func_swprintf_directive_lc" in *yes) ;; *) AC_DEFINE([NEED_WPRINTF_DIRECTIVE_LC], [1], [Define if the vasnwprintf implementation needs special code for the 'lc' directive.]) ;; esac gl_MUSL_LIBC gl_PREREQ_VASNXPRINTF ]) # Common prerequisites of lib/vasnprintf.c and lib/vasnwprintf.c. AC_DEFUN_ONCE([gl_PREREQ_VASNXPRINTF], [ AC_REQUIRE([AC_FUNC_ALLOCA]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) AC_CHECK_FUNCS([wcslen]) dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE. AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) ]) # Extra prerequisites of lib/vasnprintf.c for supporting 'long double' # arguments. AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) case "$gl_cv_func_printf_long_double" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' # arguments. AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], [ AC_REQUIRE([gl_PRINTF_INFINITE]) case "$gl_cv_func_printf_infinite" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for infinite 'double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' # arguments. AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if dnl NEED_PRINTF_LONG_DOUBLE is already set. AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE]) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for infinite 'long double' arguments.]) ;; esac ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) case "$gl_cv_func_printf_directive_a" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1], [Define if the vasnprintf implementation needs special code for the 'a' and 'A' directives.]) gl_CHECK_FUNCS_ANDROID([nl_langinfo], [[#include <langinfo.h>]]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'b' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_B], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_B]) case "$gl_cv_func_printf_directive_b" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_B], [1], [Define if the vasnprintf implementation needs special code for the 'b' directive.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) case "$gl_cv_func_printf_directive_f" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1], [Define if the vasnprintf implementation needs special code for the 'F' directive.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) case "$gl_cv_func_printf_directive_ls" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1], [Define if the vasnprintf implementation needs special code for the 'ls' directive.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'lc' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LC], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_LC]) case "$gl_cv_func_printf_directive_lc" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_LC], [1], [Define if the vasnprintf implementation needs special code for the 'lc' directive.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], [ AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) case "$gl_cv_func_printf_flag_grouping" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1], [Define if the vasnprintf implementation needs special code for the ' flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], [ AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) case "$gl_cv_func_printf_flag_leftadjust" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1], [Define if the vasnprintf implementation needs special code for the '-' flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], [ AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) case "$gl_cv_func_printf_flag_zero" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1], [Define if the vasnprintf implementation needs special code for the 0 flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the # flag with a # zero precision and a zero value in the 'x' and 'X' directives. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ALT_PRECISION_ZERO], [ AC_REQUIRE([gl_PRINTF_FLAG_ALT_PRECISION_ZERO]) case "$gl_cv_func_printf_flag_alt_precision_zero" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_ALT_PRECISION_ZERO], [1], [Define if the vasnprintf implementation needs special code for the # flag with a zero precision and a zero value in the 'x' and 'X' directives.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting large precisions. AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], [ AC_REQUIRE([gl_PRINTF_PRECISION]) case "$gl_cv_func_printf_precision" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1], [Define if the vasnprintf implementation needs special code for supporting large precisions without arbitrary bounds.]) AC_DEFINE([NEED_PRINTF_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'double' arguments.]) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory # conditions. AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], [ AC_REQUIRE([gl_PRINTF_ENOMEM]) case "$gl_cv_func_printf_enomem" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_ENOMEM], [1], [Define if the vasnprintf implementation needs special code for surviving out-of-memory conditions.]) AC_DEFINE([NEED_PRINTF_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'double' arguments.]) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS], [ AC_REQUIRE([gl_PREREQ_VASNPRINTF]) gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_B gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_DIRECTIVE_LC gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_FLAG_ALT_PRECISION_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'B' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_UPPERCASE_B], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_UPPERCASE_B]) case "$gl_cv_func_printf_directive_uppercase_b" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_UPPERCASE_B], [1], [Define if the vasnprintf implementation needs special code for the 'B' directive.]) ;; esac ]) # Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance # and GNU compatibility. AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_GNU_EXTRAS], [ gl_PREREQ_VASNPRINTF_WITH_POSIX_EXTRAS AC_DEFINE([SUPPORT_GNU_PRINTF_DIRECTIVES], [1], [Define if the vasnprintf implementation should support GNU compatible printf directives.]) gl_PREREQ_VASNPRINTF_DIRECTIVE_UPPERCASE_B ]) # Prerequisites of lib/asnprintf.c. # Prerequisites of lib/asnwprintf.c. AC_DEFUN([gl_PREREQ_ASNPRINTF], [ ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/visibility.m4���������������������������������������������������������0000644�0001750�0001750�00000006626�14557510506�014461� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# visibility.m4 serial 9 dnl Copyright (C) 2005, 2008, 2010-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Tests whether the compiler supports the command-line option dnl -fvisibility=hidden and the function and variable attributes dnl __attribute__((__visibility__("hidden"))) and dnl __attribute__((__visibility__("default"))). dnl Does *not* test for __visibility__("protected") - which has tricky dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on dnl Mac OS X. dnl Does *not* test for __visibility__("internal") - which has processor dnl dependent semantics. dnl Does *not* test for #pragma GCC visibility push(hidden) - which is dnl "really only recommended for legacy code". dnl Set the variable CFLAG_VISIBILITY. dnl Defines and sets the variable HAVE_VISIBILITY. AC_DEFUN([gl_VISIBILITY], [ AC_REQUIRE([AC_PROG_CC]) CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then dnl First, check whether -Werror can be added to the command line, or dnl whether it leads to an error because of some other option that the dnl user has put into $CC $CFLAGS $CPPFLAGS. AC_CACHE_CHECK([whether the -Werror option is usable], [gl_cv_cc_vis_werror], [gl_saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_vis_werror=yes], [gl_cv_cc_vis_werror=no]) CFLAGS="$gl_saved_CFLAGS" ]) dnl Now check whether visibility declarations are supported. AC_CACHE_CHECK([for simple visibility declarations], [gl_cv_cc_visibility], [gl_saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" dnl We use the option -Werror and a function dummyfunc, because on some dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning dnl "visibility attribute not supported in this configuration; ignored" dnl at the first function definition in every compilation unit, and we dnl don't want to use the option in this case. if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} ]], [[]])], [gl_cv_cc_visibility=yes], [gl_cv_cc_visibility=no]) CFLAGS="$gl_saved_CFLAGS" ]) if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi AC_SUBST([CFLAG_VISIBILITY]) AC_SUBST([HAVE_VISIBILITY]) AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) ]) ����������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/vsnprintf.m4����������������������������������������������������������0000644�0001750�0001750�00000003621�14557510506�014313� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vsnprintf.m4 serial 7 dnl Copyright (C) 2002-2004, 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Libintl 0.17 will replace vsnprintf only if it does not support %1$s, dnl but defers to any gnulib vsnprintf replacements. Therefore, gnulib dnl must guarantee that the decision for replacing vsnprintf is a superset dnl of the reasons checked by libintl. AC_DEFUN([gl_FUNC_VSNPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_cv_func_vsnprintf_usable=no AC_CHECK_FUNCS([vsnprintf]) if test $ac_cv_func_vsnprintf = yes; then gl_SNPRINTF_SIZE1 case "$gl_cv_func_snprintf_size1" in *yes) gl_SNPRINTF_RETVAL_C99 case "$gl_cv_func_snprintf_retval_c99" in *yes) gl_PRINTF_POSITIONS case "$gl_cv_func_printf_positions" in *yes) gl_cv_func_vsnprintf_usable=yes ;; esac ;; esac ;; esac fi if test $gl_cv_func_vsnprintf_usable = no; then gl_REPLACE_VSNPRINTF fi AC_CHECK_DECLS_ONCE([vsnprintf]) if test $ac_cv_have_decl_vsnprintf = no; then HAVE_DECL_VSNPRINTF=0 fi ]) AC_DEFUN([gl_REPLACE_VSNPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_LIBOBJ([vsnprintf]) if test $ac_cv_func_vsnprintf = yes; then REPLACE_VSNPRINTF=1 else AC_CHECK_DECLS_ONCE([vsnprintf]) if test $ac_cv_have_decl_vsnprintf = yes; then dnl If the function is declared but does not appear to exist, it may be dnl defined as an inline function. In order to avoid a conflict, we have dnl to define rpl_vsnprintf, not vsnprintf. REPLACE_VSNPRINTF=1 fi fi gl_PREREQ_VSNPRINTF ]) # Prerequisites of lib/vsnprintf.c. AC_DEFUN([gl_PREREQ_VSNPRINTF], [:]) ���������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/warn-on-use.m4��������������������������������������������������������0000644�0001750�0001750�00000005525�14557510506�014442� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# warn-on-use.m4 serial 11 dnl Copyright (C) 2010-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES) # --------------------------------------- # If the module 'posixcheck' is in use: # # For each whitespace-separated element in the list of NAMES, define # HAVE_RAW_DECL_name if the function has a declaration among INCLUDES # even after being undefined as a macro. # # See warn-on-use.h for some hints on how to poison function names, as # well as ideas on poisoning global variables and macros. NAMES may # include global variables, but remember that only functions work with # _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single # header, but if the replacement header pulls in other headers because # some systems declare functions in the wrong header, then INCLUDES # should do likewise. # # It is generally safe to assume declarations for functions declared # in the intersection of C89 and C11 (such as printf) without # needing gl_WARN_ON_USE_PREPARE. AC_DEFUN([gl_WARN_ON_USE_PREPARE], [ m4_ifdef([gl_POSIXCHECK], [m4_foreach_w([gl_decl], [$2], [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), [Define to 1 if ]m4_defn([gl_decl])[ is declared even after undefining macros.])])dnl for gl_func in m4_flatten([$2]); do AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl dnl As a workaround to implicit built-in function declarations in dnl clang (e.g. strndup), reference ac_compile_for_check_decl instead dnl of ac_compile. If, for whatever reason, the override of AC_PROG_CC dnl in zzgnulib.m4 is inactive, use the original ac_compile. ac_saved_ac_compile="$ac_compile" if test -n "$ac_compile_for_check_decl"; then ac_compile="$ac_compile_for_check_decl" fi AC_CACHE_CHECK([whether $gl_func is declared without a macro], [gl_Symbol], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], [[#undef $gl_func (void) $gl_func;]])], [AS_VAR_SET([gl_Symbol], [yes])], [AS_VAR_SET([gl_Symbol], [no])])]) ac_compile="$ac_saved_ac_compile" AS_VAR_IF([gl_Symbol], [yes], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) dnl Shortcut for an AC_CHECK_DECL invocation that may come later: dnl If the raw declaration exists with the given includes, then dnl AC_CHECK_DECL with its many includes would see it as well. dnl So, set a cache variable to allow skipping any later dnl AC_CHECK_DECL invocation for $gl_func. eval "ac_cv_have_decl_$gl_func=yes" ]) AS_VAR_POPDEF([gl_Symbol])dnl done ]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/wchar_h.m4������������������������������������������������������������0000644�0001750�0001750�00000026501�14557510506�013677� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues. dnl Copyright (C) 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Eric Blake. # wchar_h.m4 serial 63 AC_DEFUN_ONCE([gl_WCHAR_H], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) dnl Prepare for creating substitute <wchar.h>. dnl Check for <wchar.h> (missing in Linux uClibc when built without wide dnl character support). dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) AC_REQUIRE([gl_FEATURES_H]) AC_REQUIRE([gt_TYPE_WINT_T]) if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi AC_SUBST([HAVE_WINT_T]) AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #include <wchar.h> ]], [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmempcpy wmemset wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime ]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS([wcsdup], [], [], [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wcsdup = no; then HAVE_DECL_WCSDUP=0 fi ]) dnl Check whether <wchar.h> is usable at all. AC_DEFUN([gl_WCHAR_H_INLINE_OK], [ dnl Test whether <wchar.h> suffers due to the transition from '__inline' to dnl 'gnu_inline'. See <https://sourceware.org/bugzilla/show_bug.cgi?id=4022> dnl and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary, dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>. AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly], [gl_cv_header_wchar_h_correct_inline], [gl_cv_header_wchar_h_correct_inline=yes case "$host_os" in *-gnu* | gnu*) AC_LANG_CONFTEST([ AC_LANG_SOURCE([[ #define wcstod renamed_wcstod #include <wchar.h> extern int zero (void); int main () { return zero(); } ]])]) dnl Do not rename the object file from conftest.$ac_objext to dnl conftest1.$ac_objext, as this will cause the link to fail on dnl z/OS when using the XPLINK object format (due to duplicate dnl CSECT names). Instead, temporarily redefine $ac_compile so dnl that the object file has the latter name from the start. saved_ac_compile="$ac_compile" ac_compile=`echo "$saved_ac_compile" | sed s/conftest/conftest1/` if echo '#include "conftest.c"' >conftest1.c \ && AC_TRY_EVAL([ac_compile]); then AC_LANG_CONFTEST([ AC_LANG_SOURCE([[ #define wcstod renamed_wcstod #include <wchar.h> int zero (void) { return 0; } ]])]) dnl See note above about renaming object files. ac_compile=`echo "$saved_ac_compile" | sed s/conftest/conftest2/` if echo '#include "conftest.c"' >conftest2.c \ && AC_TRY_EVAL([ac_compile]); then if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then : else gl_cv_header_wchar_h_correct_inline=no fi fi fi ac_compile="$saved_ac_compile" rm -f conftest[12].c conftest[12].$ac_objext conftest$ac_exeext ;; esac ]) if test $gl_cv_header_wchar_h_correct_inline = no; then AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in C99 mode. You have four options: - Add the flag -fgnu89-inline to CC and reconfigure, or - Fix your include files, using parts of <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or - Use a gcc version older than 4.3, or - Don't use the flags -std=c99 or -std=gnu99. Configuration aborted.]) fi ]) # gl_WCHAR_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_WCHAR_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_WCHAR_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCHAR_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BTOWC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTOB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSINIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSZERO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRTOWC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRTOWCS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNRTOWCS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCRTOMB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSRTOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNRTOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCWIDTH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMMOVE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMSET]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCPNCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCOLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSXFRM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSDUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSRCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSPBRK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSSTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSTOK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSWIDTH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSFTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WGETCWD]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WCSDUP], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_WCHAR_H_MODULE_INDICATOR_DEFAULTS]) dnl Make sure the shell variable for GNULIB_FREE_POSIX is initialized. gl_STDLIB_H_REQUIRE_DEFAULTS AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) ]) AC_DEFUN([gl_WCHAR_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC]) HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN]) HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS]) HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS]) HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB]) HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS]) HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS]) HAVE_WMEMCHR=1; AC_SUBST([HAVE_WMEMCHR]) HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP]) HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY]) HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE]) HAVE_WMEMPCPY=1; AC_SUBST([HAVE_WMEMPCPY]) HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET]) HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN]) HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN]) HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY]) HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY]) HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY]) HAVE_WCPNCPY=1; AC_SUBST([HAVE_WCPNCPY]) HAVE_WCSCAT=1; AC_SUBST([HAVE_WCSCAT]) HAVE_WCSNCAT=1; AC_SUBST([HAVE_WCSNCAT]) HAVE_WCSCMP=1; AC_SUBST([HAVE_WCSCMP]) HAVE_WCSNCMP=1; AC_SUBST([HAVE_WCSNCMP]) HAVE_WCSCASECMP=1; AC_SUBST([HAVE_WCSCASECMP]) HAVE_WCSNCASECMP=1; AC_SUBST([HAVE_WCSNCASECMP]) HAVE_WCSCOLL=1; AC_SUBST([HAVE_WCSCOLL]) HAVE_WCSXFRM=1; AC_SUBST([HAVE_WCSXFRM]) HAVE_WCSDUP=1; AC_SUBST([HAVE_WCSDUP]) HAVE_WCSCHR=1; AC_SUBST([HAVE_WCSCHR]) HAVE_WCSRCHR=1; AC_SUBST([HAVE_WCSRCHR]) HAVE_WCSCSPN=1; AC_SUBST([HAVE_WCSCSPN]) HAVE_WCSSPN=1; AC_SUBST([HAVE_WCSSPN]) HAVE_WCSPBRK=1; AC_SUBST([HAVE_WCSPBRK]) HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR]) HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK]) HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH]) HAVE_WCSFTIME=1; AC_SUBST([HAVE_WCSFTIME]) HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) HAVE_DECL_WCSDUP=1; AC_SUBST([HAVE_DECL_WCSDUP]) HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC]) REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB]) REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT]) REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC]) REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN]) REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS]) REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS]) REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB]) REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS]) REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS]) REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH]) REPLACE_WCSFTIME=0; AC_SUBST([REPLACE_WCSFTIME]) REPLACE_WCSCMP=0; AC_SUBST([REPLACE_WCSCMP]) REPLACE_WCSNCMP=0; AC_SUBST([REPLACE_WCSNCMP]) REPLACE_WCSSTR=0; AC_SUBST([REPLACE_WCSSTR]) REPLACE_WCSTOK=0; AC_SUBST([REPLACE_WCSTOK]) REPLACE_WMEMCMP=0; AC_SUBST([REPLACE_WMEMCMP]) REPLACE_WMEMPCPY=0; AC_SUBST([REPLACE_WMEMPCPY]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/wchar_t.m4������������������������������������������������������������0000644�0001750�0001750�00000001462�14557510506�013712� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wchar_t.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2002-2003, 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether <stddef.h> has the 'wchar_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WCHAR_T], [ AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> wchar_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])]) if test $gt_cv_c_wchar_t = yes; then AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/wcrtomb.m4������������������������������������������������������������0000644�0001750�0001750�00000011335�14557510506�013740� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcrtomb.m4 serial 19 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCRTOMB], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([wcrtomb]) if test $ac_cv_func_wcrtomb = no; then HAVE_WCRTOMB=0 AC_CHECK_DECLS([wcrtomb],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wcrtomb = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares wcrtomb() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_WCRTOMB=1 fi else dnl We don't actually need to override wcrtomb when redefining the semantics dnl of the mbstate_t type. Tested on 32-bit AIX. dnl if test $REPLACE_MBSTATE_T = 1; then dnl REPLACE_WCRTOMB=1 dnl fi if test $REPLACE_WCRTOMB = 0; then dnl On Android 4.3, wcrtomb produces wrong characters in the C locale. dnl On AIX 4.3, OSF/1 5.1 and Solaris <= 11.3, wcrtomb (NULL, 0, NULL) dnl sometimes returns 0 instead of 1. AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether wcrtomb works in the C locale], [gl_cv_func_wcrtomb_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <string.h> #include <stdlib.h> #include <wchar.h> int main () { mbstate_t state; char out[64]; int count; memset (&state, 0, sizeof (state)); out[0] = 'x'; count = wcrtomb (out, L'a', &state); return !(count == 1 && out[0] == 'a'); }]])], [gl_cv_func_wcrtomb_works=yes], [gl_cv_func_wcrtomb_works=no], [case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_wcrtomb_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_wcrtomb_works="guessing yes";; esac ]) ]) case "$gl_cv_func_wcrtomb_works" in *yes) ;; *) AC_DEFINE([WCRTOMB_C_LOCALE_BUG], [1], [Define if the wcrtomb function does not work in the C locale.]) REPLACE_WCRTOMB=1 ;; esac fi if test $REPLACE_WCRTOMB = 0; then AC_CACHE_CHECK([whether wcrtomb return value is correct], [gl_cv_func_wcrtomb_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX 4, OSF/1, Solaris, native Windows. aix4* | osf* | solaris* | mingw* | windows*) gl_cv_func_wcrtomb_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wcrtomb_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> #include <stdlib.h> int main () { int result = 0; if (strcmp ("$LOCALE_FR", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 1; } if (strcmp ("$LOCALE_FR_UTF8", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 2; { wchar_t wc = (wchar_t) 0xBADFACE; if (mbtowc (&wc, "\303\274", 2) == 2) if (wcrtomb (NULL, wc, NULL) != 1) result |= 2; } } if (strcmp ("$LOCALE_JA", "none") != 0 && setlocale (LC_ALL, "$LOCALE_JA") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 4; } if (strcmp ("$LOCALE_ZH_CN", "none") != 0 && setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 8; } return result; }]])], [gl_cv_func_wcrtomb_retval=yes], [gl_cv_func_wcrtomb_retval=no], [:]) fi ]) case "$gl_cv_func_wcrtomb_retval" in *yes) ;; *) AC_DEFINE([WCRTOMB_RETVAL_BUG], [1], [Define if the wcrtomb function has an incorrect return value.]) REPLACE_WCRTOMB=1 ;; esac fi fi ]) # Prerequisites of lib/wcrtomb.c. AC_DEFUN([gl_PREREQ_WCRTOMB], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/wctob.m4��������������������������������������������������������������0000644�0001750�0001750�00000005524�14557510506�013404� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctob.m4 serial 14 dnl Copyright (C) 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCTOB], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wctob]) if test $ac_cv_func_wctob = no; then HAVE_WCTOB=0 HAVE_DECL_WCTOB=0 else HAVE_WCTOB=1 dnl Solaris 9 has the wctob() function but it does not work. dnl Cygwin 1.7.2 has the wctob() function but it clobbers caller-owned dnl registers, see <https://cygwin.com/ml/cygwin/2010-05/msg00015.html>. AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether wctob works], [gl_cv_func_wctob_works], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris <= 9 and Cygwin. solaris2.[1-9] | solaris2.[1-9].* | cygwin*) gl_cv_func_wctob_works="guessing no" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_wctob_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wctob_works="guessing yes" ;; esac changequote([,])dnl case "$host_os" in cygwin*) AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <wchar.h> register long global __asm__ ("%ebx"); int main () { setlocale (LC_ALL, "en_US.UTF-8"); global = 0x12345678; if (wctob (0x00FC) != -1) return 1; if (global != 0x12345678) return 2; return 0; }]])], [:], [gl_cv_func_wctob_works=no], [:]) ;; esac if test "$gl_cv_func_wctob_works" != no && test $LOCALE_FR != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { wchar_t wc; if (mbtowc (&wc, "\374", 1) == 1) if (wctob (wc) != (unsigned char) '\374') return 1; } return 0; }]])], [gl_cv_func_wctob_works=yes], [gl_cv_func_wctob_works=no], [:]) fi ]) case "$gl_cv_func_wctob_works" in *yes) ;; *) REPLACE_WCTOB=1 ;; esac if test $REPLACE_WCTOB = 0; then dnl IRIX 6.5 has the wctob() function but does not declare it. AC_CHECK_DECLS([wctob], [], [], [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wctob != yes; then HAVE_DECL_WCTOB=0 fi fi fi ]) # Prerequisites of lib/wctob.c. AC_DEFUN([gl_PREREQ_WCTOB], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/wctomb.m4�������������������������������������������������������������0000644�0001750�0001750�00000000714�14557510506�013555� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctomb.m4 serial 2 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCTOMB], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) if false; then REPLACE_WCTOMB=1 fi ]) # Prerequisites of lib/wctomb.c. AC_DEFUN([gl_PREREQ_WCTOMB], [ : ]) ����������������������������������������������������gnuastro-0.22/bootstrapped/m4/wctype.m4�������������������������������������������������������������0000644�0001750�0001750�00000003562�14557510506�013601� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctype.m4 serial 6 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_FUNC_WCTYPE], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles HAVE_WCTYPE=$HAVE_WCTYPE_T if test $HAVE_WCTYPE = 1; then AC_CACHE_CHECK([whether wctype supports the "blank" and "punct" character classes], [gl_cv_func_wctype_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <ctype.h> #include <wchar.h> #include <wctype.h> int main () { /* This test fails on mingw. */ if (wctype ("blank") == (wctype_t)0) return 1; /* This test fails on MSVC 14. */ if ((! iswctype ('\t', wctype ("blank"))) != (! iswblank ('\t'))) return 2; /* This test fails on Android 11. */ if ((! iswctype ('\`', wctype ("punct"))) != (! ispunct ('\`'))) return 4; return 0; } ]])], [gl_cv_func_wctype_works=yes], [gl_cv_func_wctype_works=no], [case "$host_os" in # Guess no on native Windows. mingw* | windows*) gl_cv_func_wctype_works="guessing no" ;; # Guess no on Android. android*) gl_cv_func_wctype_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wctype_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_wctype_works" in *yes) ;; *) REPLACE_WCTYPE=1 ;; esac fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/wctype_h.m4�����������������������������������������������������������0000644�0001750�0001750�00000014771�14557510506�014114� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctype_h.m4 serial 33 dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it. dnl Copyright (C) 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN_ONCE([gl_WCTYPE_H], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([iswcntrl]) if test $ac_cv_func_iswcntrl = yes; then HAVE_ISWCNTRL=1 else HAVE_ISWCNTRL=0 fi AC_SUBST([HAVE_ISWCNTRL]) AC_REQUIRE([gt_TYPE_WINT_T]) if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi AC_SUBST([HAVE_WINT_T]) AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) gl_CHECK_NEXT_HEADERS([wctype.h]) if test $ac_cv_header_wctype_h = yes; then if test $ac_cv_func_iswcntrl = yes; then dnl Linux libc5 has an iswprint function that returns 0 for all arguments. dnl The other functions are likely broken in the same way. AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> #include <wctype.h> int main () { return iswprint ('x') == 0; } ]])], [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no], [dnl Guess no on Linux libc5, yes otherwise. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h> #if __GNU_LIBRARY__ == 1 Linux libc5 i18n is broken. #endif]], [[]])], [gl_cv_func_iswcntrl_works="guessing yes"], [gl_cv_func_iswcntrl_works="guessing no"]) ]) ]) fi HAVE_WCTYPE_H=1 else HAVE_WCTYPE_H=0 fi AC_SUBST([HAVE_WCTYPE_H]) if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then REPLACE_ISWCNTRL=1 else case "$gl_cv_func_iswcntrl_works" in *yes) REPLACE_ISWCNTRL=0 ;; *) REPLACE_ISWCNTRL=1 ;; esac fi AC_SUBST([REPLACE_ISWCNTRL]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then dnl Redefine all of iswcntrl, ..., iswxdigit in <wctype.h>. : fi if test $REPLACE_ISWCNTRL = 1; then REPLACE_TOWLOWER=1 else AC_CHECK_FUNCS([towlower]) if test $ac_cv_func_towlower = yes; then REPLACE_TOWLOWER=0 else AC_CHECK_DECLS([towlower],,, [[#include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif ]]) if test $ac_cv_have_decl_towlower = yes; then dnl On Minix 3.1.8, the system's <wctype.h> declares towlower() and dnl towupper() although it does not have the functions. Avoid a dnl collision with gnulib's replacement. REPLACE_TOWLOWER=1 else REPLACE_TOWLOWER=0 fi fi fi AC_SUBST([REPLACE_TOWLOWER]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then dnl Redefine towlower, towupper in <wctype.h>. : fi dnl We assume that the wctype() and iswctype() functions exist if and only dnl if the type wctype_t is defined in <wchar.h> or in <wctype.h> if that dnl exists. dnl HP-UX 11.00 declares all these in <wchar.h> and lacks <wctype.h>. AC_CACHE_CHECK([for wctype_t], [gl_cv_type_wctype_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif wctype_t a; ]], [[]])], [gl_cv_type_wctype_t=yes], [gl_cv_type_wctype_t=no]) ]) if test $gl_cv_type_wctype_t = no; then HAVE_WCTYPE_T=0 fi dnl We assume that the wctrans() and towctrans() functions exist if and only dnl if the type wctrans_t is defined in <wctype.h>. AC_CACHE_CHECK([for wctrans_t], [gl_cv_type_wctrans_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> #include <wctype.h> wctrans_t a; ]], [[]])], [gl_cv_type_wctrans_t=yes], [gl_cv_type_wctrans_t=no]) ]) if test $gl_cv_type_wctrans_t = no; then HAVE_WCTRANS_T=0 fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <wchar.h> #endif #include <wctype.h> ]], [wctype iswctype wctrans towctrans ]) ]) # gl_WCTYPE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_WCTYPE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_WCTYPE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWBLANK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWDIGIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWPUNCT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWXDIGIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTYPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWCTYPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTRANS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TOWCTRANS]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) ]) AC_DEFUN([gl_WCTYPE_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_ISWBLANK=1; AC_SUBST([HAVE_ISWBLANK]) HAVE_WCTYPE_T=1; AC_SUBST([HAVE_WCTYPE_T]) HAVE_WCTRANS_T=1; AC_SUBST([HAVE_WCTRANS_T]) REPLACE_ISWBLANK=0; AC_SUBST([REPLACE_ISWBLANK]) REPLACE_ISWDIGIT=0; AC_SUBST([REPLACE_ISWDIGIT]) REPLACE_ISWPUNCT=0; AC_SUBST([REPLACE_ISWPUNCT]) REPLACE_ISWXDIGIT=0; AC_SUBST([REPLACE_ISWXDIGIT]) REPLACE_WCTRANS=0; AC_SUBST([REPLACE_WCTRANS]) REPLACE_WCTYPE=0; AC_SUBST([REPLACE_WCTYPE]) ]) �������gnuastro-0.22/bootstrapped/m4/wcwidth.m4������������������������������������������������������������0000644�0001750�0001750�00000006672�14557510506�013744� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcwidth.m4 serial 36 dnl Copyright (C) 2006-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCWIDTH], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <wchar.h> to declare wcwidth(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) AC_CHECK_HEADERS_ONCE([wchar.h]) AC_CHECK_FUNCS_ONCE([wcwidth]) AC_CHECK_DECLS([wcwidth], [], [], [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wcwidth != yes; then HAVE_DECL_WCWIDTH=0 fi if test $ac_cv_func_wcwidth != yes; then AC_CACHE_CHECK([whether wcwidth is a macro], [gl_cv_func_wcwidth_macro], [AC_EGREP_CPP([wchar_header_defines_wcwidth], [ #include <wchar.h> #ifdef wcwidth wchar_header_defines_wcwidth #endif], [gl_cv_func_wcwidth_macro=yes], [gl_cv_func_wcwidth_macro=no]) ]) fi if test $ac_cv_func_wcwidth = yes || test $gl_cv_func_wcwidth_macro = yes; then HAVE_WCWIDTH=1 dnl On Mac OS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) returns 1. dnl On macOS 12.5, NetBSD 9.0, OpenBSD 5.0, MidnightBSD 1.1, dnl wcwidth(0x05B0) (HEBREW POINT SHEVA) returns 1. dnl On macOS 12.5, NetBSD 9.0, MidnightBSD 1.1, OSF/1 5.1, dnl wcwidth(0x200B) (ZERO WIDTH SPACE) returns 1. dnl On OpenBSD 5.8, wcwidth(0xFF1A) (FULLWIDTH COLON) returns 0. dnl This leads to bugs in 'ls' (coreutils). dnl On Solaris 11.4, wcwidth(0x2202) (PARTIAL DIFFERENTIAL) returns 2, dnl even in Western locales. AC_CACHE_CHECK([whether wcwidth works reasonably in UTF-8 locales], [gl_cv_func_wcwidth_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <wchar.h> #if !HAVE_DECL_WCWIDTH extern # ifdef __cplusplus "C" # endif int wcwidth (int); #endif int main () { int result = 0; if (setlocale (LC_ALL, "en_US.UTF-8") != NULL) { if (wcwidth (0x0301) > 0) result |= 1; if (wcwidth (0x05B0) > 0) result |= 2; if (wcwidth (0x200B) > 0) result |= 4; if (wcwidth (0xFF1A) == 0) result |= 8; if (wcwidth (0x2202) > 1) result |= 16; } return result; }]])], [gl_cv_func_wcwidth_works=yes], [gl_cv_func_wcwidth_works=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_wcwidth_works="guessing yes";; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_wcwidth_works="guessing yes";; # Guess yes on AIX 7 systems. aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";; *) gl_cv_func_wcwidth_works="$gl_cross_guess_normal";; esac changequote([,])dnl ]) ]) case "$gl_cv_func_wcwidth_works" in *yes) ;; *no) REPLACE_WCWIDTH=1 ;; esac else HAVE_WCWIDTH=0 fi dnl We don't substitute HAVE_WCWIDTH. We assume that if the system does not dnl have the wcwidth function, then it does not declare it. ]) # Prerequisites of lib/wcwidth.c. AC_DEFUN([gl_PREREQ_WCWIDTH], [ AC_REQUIRE([AC_C_INLINE]) : ]) ����������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/wint_t.m4�������������������������������������������������������������0000644�0001750�0001750�00000003433�14557510506�013567� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wint_t.m4 serial 11 dnl Copyright (C) 2003, 2007-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether <wchar.h> has the 'wint_t' type and whether gnulib's dnl <wchar.h> or <wctype.h> would, if present, override 'wint_t'. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WINT_T], [ AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> wint_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])]) if test $gt_cv_c_wint_t = yes; then AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) dnl Determine whether gnulib's <wchar.h> or <wctype.h> would, if present, dnl override 'wint_t'. AC_CACHE_CHECK([whether wint_t is large enough], [gl_cv_type_wint_t_large_enough], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; ]])], [gl_cv_type_wint_t_large_enough=yes], [gl_cv_type_wint_t_large_enough=no])]) if test $gl_cv_type_wint_t_large_enough = no; then GNULIBHEADERS_OVERRIDE_WINT_T=1 else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi AC_SUBST([GNULIBHEADERS_OVERRIDE_WINT_T]) ]) dnl Prerequisites of the 'wint_t' override. AC_DEFUN([gl_TYPE_WINT_T_PREREQ], [ AC_CHECK_HEADERS_ONCE([crtdefs.h]) if test $ac_cv_header_crtdefs_h = yes; then HAVE_CRTDEFS_H=1 else HAVE_CRTDEFS_H=0 fi AC_SUBST([HAVE_CRTDEFS_H]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/xalloc.m4�������������������������������������������������������������0000644�0001750�0001750�00000000472�14557510506�013545� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# xalloc.m4 serial 18 dnl Copyright (C) 2002-2006, 2009-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XALLOC], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/xsize.m4��������������������������������������������������������������0000644�0001750�0001750�00000000626�14557510506�013426� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# xsize.m4 serial 5 dnl Copyright (C) 2003-2004, 2008-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XSIZE], [ dnl Prerequisites of lib/xsize.h. AC_REQUIRE([gl_SIZE_MAX]) AC_CHECK_HEADERS([stdint.h]) ]) ����������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/m4/yield.m4��������������������������������������������������������������0000644�0001750�0001750�00000000744�14557510506�013373� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# yield.m4 serial 5 dnl Copyright (C) 2005-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_YIELD], [ AC_REQUIRE([gl_PTHREADLIB]) AC_REQUIRE([gl_THREADLIB]) if test $gl_threads_api = posix; then YIELD_LIB="$SCHED_YIELD_LIB" else YIELD_LIB= fi AC_SUBST([YIELD_LIB]) ]) ����������������������������gnuastro-0.22/bootstrapped/m4/zzgnulib.m4�����������������������������������������������������������0000644�0001750�0001750�00000001522�14557510506�014124� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# zzgnulib.m4 serial 1 dnl Copyright (C) 2020-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This file must be named something that sorts after all other dnl package- or gnulib-provided .m4 files - at least for those packages dnl that redefine AC_PROG_CC. dnl Redefine AC_PROG_CC so that it ends with invocations of gl_COMPILER_CLANG dnl and gl_COMPILER_PREPARE_CHECK_DECL. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[ gl_COMPILER_CLANG gl_COMPILER_PREPARE_CHECK_DECL ]) # gl_ZZGNULIB # ----------- # Witness macro that this file has been included. Needed to force # Automake to include this file after all other gnulib .m4 files. AC_DEFUN([gl_ZZGNULIB]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/README�������������������������������������������������������������������0000644�0001750�0001750�00000003635�14435153342�012361� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Imported files to GNU Astronomy Utilities ========================================= Copyright (C) 2015-2020 Free Software Foundation, Inc. See the end of the file for license conditions. The contents of this directory (except this README file!) are imported to GNU Astronomy Utilities (Gnuastro) from other projects. Therefore they are not maintained by Gnuastro developers and are kept separately in this directory for clarity and easy maintenance. In the version controlled repository this directory only contains this single README file. It is populated during the bootstrapping process (see ../README-hacking for more on bootstrapping, or the "Bootstrapping" section in the manual). In the distribution tar-ball this directory is populated with the necessary files. The projects that were used are: - GNU Portability Library (Gnulib): https://www.gnu.org/software/gnulib/ This is a very useful collection of libraries (from GNU C library) to enable non-complying operating systems to run programs based on it. It also contains various very useful scripts needed for the GNU build process. - GNU Autoconf-archives: https://www.gnu.org/software/autoconf-archive/ These archives contain a large number of M4 scripts that can be used at ./configure time. We are most grateful to the maintainers of these projects which allow Gnuastro to be easily installed on a very large set of Unix-like operating systems. Copyright information --------------------- Copyright (C) 2015-2020 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the "GNU Free Documentation License" file as part of this distribution.���������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/���������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514200�012317� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/glthread/������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514177�014126� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/glthread/lock.h������������������������������������������������������0000644�0001750�0001750�00000076101�14557510505�015143� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locking in multithreaded situations. Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ /* This file contains locking primitives for use with a given thread library. It does not contain primitives for creating threads or for other synchronization primitives. Normal (non-recursive) locks: Type: gl_lock_t Declaration: gl_lock_define(extern, name) Initializer: gl_lock_define_initialized(, name) Initialization: gl_lock_init (name); Taking the lock: gl_lock_lock (name); Releasing the lock: gl_lock_unlock (name); De-initialization: gl_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_lock_init (&name); Taking the lock: err = glthread_lock_lock (&name); Releasing the lock: err = glthread_lock_unlock (&name); De-initialization: err = glthread_lock_destroy (&name); Read-Write (non-recursive) locks: Type: gl_rwlock_t Declaration: gl_rwlock_define(extern, name) Initializer: gl_rwlock_define_initialized(, name) Initialization: gl_rwlock_init (name); Taking the lock: gl_rwlock_rdlock (name); gl_rwlock_wrlock (name); Releasing the lock: gl_rwlock_unlock (name); De-initialization: gl_rwlock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_rwlock_init (&name); Taking the lock: err = glthread_rwlock_rdlock (&name); err = glthread_rwlock_wrlock (&name); Releasing the lock: err = glthread_rwlock_unlock (&name); De-initialization: err = glthread_rwlock_destroy (&name); Recursive locks: Type: gl_recursive_lock_t Declaration: gl_recursive_lock_define(extern, name) Initializer: gl_recursive_lock_define_initialized(, name) Initialization: gl_recursive_lock_init (name); Taking the lock: gl_recursive_lock_lock (name); Releasing the lock: gl_recursive_lock_unlock (name); De-initialization: gl_recursive_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_recursive_lock_init (&name); Taking the lock: err = glthread_recursive_lock_lock (&name); Releasing the lock: err = glthread_recursive_lock_unlock (&name); De-initialization: err = glthread_recursive_lock_destroy (&name); Once-only execution: Type: gl_once_t Initializer: gl_once_define(extern, name) Execution: gl_once (name, initfunction); Equivalent functions with control of error handling: Execution: err = glthread_once (&name, initfunction); */ #ifndef _LOCK_H #define _LOCK_H /* This file uses HAVE_THREADS_H, HAVE_PTHREAD_RWLOCK, HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER, PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP, HAVE_PTHREAD_MUTEX_RECURSIVE. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <errno.h> #include <stdlib.h> #if !defined c11_threads_in_use # if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC # define c11_threads_in_use() 1 # elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif #endif /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the ISO C threads library. */ # include <threads.h> # ifdef __cplusplus extern "C" { # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef struct { int volatile init_needed; once_flag init_once; void (*init_func) (void); mtx_t mutex; } gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ static void _atomic_init_##NAME (void); \ STORAGECLASS gl_lock_t NAME = \ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ static void _atomic_init_##NAME (void) \ { \ if (glthread_lock_init (&(NAME))) \ abort (); \ } extern int glthread_lock_init (gl_lock_t *lock); extern int glthread_lock_lock (gl_lock_t *lock); extern int glthread_lock_unlock (gl_lock_t *lock); extern int glthread_lock_destroy (gl_lock_t *lock); /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef struct { int volatile init_needed; once_flag init_once; void (*init_func) (void); mtx_t lock; /* protects the remaining fields */ cnd_t waiting_readers; /* waiting readers */ cnd_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ static void _atomic_init_##NAME (void); \ STORAGECLASS gl_rwlock_t NAME = \ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ static void _atomic_init_##NAME (void) \ { \ if (glthread_rwlock_init (&(NAME))) \ abort (); \ } extern int glthread_rwlock_init (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock (gl_rwlock_t *lock); extern int glthread_rwlock_unlock (gl_rwlock_t *lock); extern int glthread_rwlock_destroy (gl_rwlock_t *lock); /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef struct { int volatile init_needed; once_flag init_once; void (*init_func) (void); mtx_t mutex; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ static void _atomic_init_##NAME (void); \ STORAGECLASS gl_recursive_lock_t NAME = \ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ static void _atomic_init_##NAME (void) \ { \ if (glthread_recursive_lock_init (&(NAME))) \ abort (); \ } extern int glthread_recursive_lock_init (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy (gl_recursive_lock_t *lock); /* -------------------------- gl_once_t datatype -------------------------- */ typedef once_flag gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS once_flag NAME = ONCE_FLAG_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (call_once (ONCE_CONTROL, INITFUNCTION), 0) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include <pthread.h> # ifdef __cplusplus extern "C" { # endif # if PTHREAD_IN_USE_DETECTION_HARD /* The pthread_in_use() detection needs to be done at runtime. */ # define pthread_in_use() \ glthread_in_use () extern int glthread_in_use (void); # endif # if USE_POSIX_THREADS_WEAK /* Use weak references to the POSIX threads library. */ /* Weak references avoid dragging in external libraries if the other parts of the program don't use them. Here we use them, because we don't want every program that uses libintl to depend on libpthread. This assumes that libpthread would not be loaded after libintl; i.e. if libintl is loaded first, by an executable that does not depend on libpthread, and then a module is dynamically loaded that depends on libpthread, libintl will not be multithread-safe. */ /* The way to test at runtime whether libpthread is present is to test whether a function pointer's value, such as &pthread_mutex_init, is non-NULL. However, some versions of GCC have a bug through which, in PIC mode, &foo != NULL always evaluates to true if there is a direct call to foo(...) in the same function. To avoid this, we test the address of a function in libpthread that we don't use. */ # pragma weak pthread_mutex_init # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock # pragma weak pthread_mutex_destroy # pragma weak pthread_rwlock_init # pragma weak pthread_rwlock_rdlock # pragma weak pthread_rwlock_wrlock # pragma weak pthread_rwlock_unlock # pragma weak pthread_rwlock_destroy # pragma weak pthread_once # pragma weak pthread_cond_init # pragma weak pthread_cond_wait # pragma weak pthread_cond_signal # pragma weak pthread_cond_broadcast # pragma weak pthread_cond_destroy # pragma weak pthread_mutexattr_init # pragma weak pthread_mutexattr_settype # pragma weak pthread_mutexattr_destroy # pragma weak pthread_rwlockattr_init # if __GNU_LIBRARY__ > 1 # pragma weak pthread_rwlockattr_setkind_np # endif # pragma weak pthread_rwlockattr_destroy # ifndef pthread_self # pragma weak pthread_self # endif # if !PTHREAD_IN_USE_DETECTION_HARD /* Considering all platforms with USE_POSIX_THREADS_WEAK, only few symbols can be used to determine whether libpthread is in use. These are: pthread_mutexattr_gettype pthread_rwlockattr_destroy pthread_rwlockattr_init */ # pragma weak pthread_mutexattr_gettype # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # endif # else # if !PTHREAD_IN_USE_DETECTION_HARD # define pthread_in_use() 1 # endif # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef pthread_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ PTHREAD_MUTEX_INITIALIZER # define glthread_lock_init(LOCK) \ (pthread_in_use () ? pthread_mutex_init (LOCK, NULL) : 0) # define glthread_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) # if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP typedef pthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer; # if HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER # if defined PTHREAD_RWLOCK_INITIALIZER # define gl_rwlock_initializer \ PTHREAD_RWLOCK_INITIALIZER # else # define gl_rwlock_initializer \ PTHREAD_RWLOCK_INITIALIZER_NP # endif # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0) # else /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ # define gl_rwlock_initializer \ PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_for_glibc (LOCK) : 0) extern int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock); # endif # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_wrlock (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_unlock (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? pthread_rwlock_destroy (LOCK) : 0) # else typedef struct { int initialized; pthread_mutex_t guard; /* protects the initialization */ pthread_rwlock_t rwlock; /* read-write lock */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { 0, PTHREAD_MUTEX_INITIALIZER } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif # else typedef struct { pthread_mutex_t lock; /* protects the remaining fields */ pthread_cond_t waiting_readers; /* waiting readers */ pthread_cond_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP typedef pthread_mutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer; # ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER # else # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP # endif # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); # else typedef struct { pthread_mutex_t recmutex; /* recursive mutex */ pthread_mutex_t guard; /* protects the initialization */ int initialized; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif # else /* Old versions of POSIX threads on Solaris did not have recursive locks. We have to implement them ourselves. */ typedef struct { pthread_mutex_t mutex; pthread_t owner; unsigned long depth; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif /* -------------------------- gl_once_t datatype -------------------------- */ typedef pthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT; # if PTHREAD_IN_USE_DETECTION_HARD || USE_POSIX_THREADS_WEAK # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pthread_in_use () \ ? pthread_once (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) # else # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pthread_in_use () \ ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_multithreaded (pthread_once_t *once_control, void (*init_function) (void)); # endif extern int glthread_once_singlethreaded (pthread_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-mutex.h" # include "windows-rwlock.h" # include "windows-recmutex.h" # include "windows-once.h" # ifdef __cplusplus extern "C" { # endif /* We can use CRITICAL_SECTION directly, rather than the native Windows Event, Mutex, Semaphore types, because - we need only to synchronize inside a single process (address space), not inter-process locking, - we don't need to support trylock operations. (TryEnterCriticalSection does not work on Windows 95/98/ME. Packages that need trylock usually define their own mutex type.) */ /* There is no way to statically initialize a CRITICAL_SECTION. It needs to be done lazily, once only. For this we need spinlocks. */ /* -------------------------- gl_lock_t datatype -------------------------- */ typedef glwthread_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME = gl_lock_initializer; # define gl_lock_initializer \ GLWTHREAD_MUTEX_INIT # define glthread_lock_init(LOCK) \ (glwthread_mutex_init (LOCK), 0) # define glthread_lock_lock(LOCK) \ glwthread_mutex_lock (LOCK) # define glthread_lock_unlock(LOCK) \ glwthread_mutex_unlock (LOCK) # define glthread_lock_destroy(LOCK) \ glwthread_mutex_destroy (LOCK) /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef glwthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ GLWTHREAD_RWLOCK_INIT # define glthread_rwlock_init(LOCK) \ (glwthread_rwlock_init (LOCK), 0) # define glthread_rwlock_rdlock(LOCK) \ glwthread_rwlock_rdlock (LOCK) # define glthread_rwlock_wrlock(LOCK) \ glwthread_rwlock_wrlock (LOCK) # define glthread_rwlock_unlock(LOCK) \ glwthread_rwlock_unlock (LOCK) # define glthread_rwlock_destroy(LOCK) \ glwthread_rwlock_destroy (LOCK) /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef glwthread_recmutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ GLWTHREAD_RECMUTEX_INIT # define glthread_recursive_lock_init(LOCK) \ (glwthread_recmutex_init (LOCK), 0) # define glthread_recursive_lock_lock(LOCK) \ glwthread_recmutex_lock (LOCK) # define glthread_recursive_lock_unlock(LOCK) \ glwthread_recmutex_unlock (LOCK) # define glthread_recursive_lock_destroy(LOCK) \ glwthread_recmutex_destroy (LOCK) /* -------------------------- gl_once_t datatype -------------------------- */ typedef glwthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = GLWTHREAD_ONCE_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (glwthread_once (ONCE_CONTROL, INITFUNCTION), 0) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ /* -------------------------- gl_lock_t datatype -------------------------- */ typedef int gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) # define gl_lock_define_initialized(STORAGECLASS, NAME) # define glthread_lock_init(NAME) 0 # define glthread_lock_lock(NAME) 0 # define glthread_lock_unlock(NAME) 0 # define glthread_lock_destroy(NAME) 0 /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef int gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) # define gl_rwlock_define_initialized(STORAGECLASS, NAME) # define glthread_rwlock_init(NAME) 0 # define glthread_rwlock_rdlock(NAME) 0 # define glthread_rwlock_wrlock(NAME) 0 # define glthread_rwlock_unlock(NAME) 0 # define glthread_rwlock_destroy(NAME) 0 /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef int gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) # define glthread_recursive_lock_init(NAME) 0 # define glthread_recursive_lock_lock(NAME) 0 # define glthread_recursive_lock_unlock(NAME) 0 # define glthread_recursive_lock_destroy(NAME) 0 /* -------------------------- gl_once_t datatype -------------------------- */ typedef int gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = 0; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (*(ONCE_CONTROL) == 0 ? (*(ONCE_CONTROL) = ~ 0, INITFUNCTION (), 0) : 0) #endif /* ========================================================================= */ /* Macros with built-in error handling. */ /* -------------------------- gl_lock_t datatype -------------------------- */ #define gl_lock_init(NAME) \ do \ { \ if (glthread_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_lock(NAME) \ do \ { \ if (glthread_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_unlock(NAME) \ do \ { \ if (glthread_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_destroy(NAME) \ do \ { \ if (glthread_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ #define gl_rwlock_init(NAME) \ do \ { \ if (glthread_rwlock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_rdlock(NAME) \ do \ { \ if (glthread_rwlock_rdlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_wrlock(NAME) \ do \ { \ if (glthread_rwlock_wrlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_unlock(NAME) \ do \ { \ if (glthread_rwlock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_destroy(NAME) \ do \ { \ if (glthread_rwlock_destroy (&NAME)) \ abort (); \ } \ while (0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ #define gl_recursive_lock_init(NAME) \ do \ { \ if (glthread_recursive_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_lock(NAME) \ do \ { \ if (glthread_recursive_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_unlock(NAME) \ do \ { \ if (glthread_recursive_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_destroy(NAME) \ do \ { \ if (glthread_recursive_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* -------------------------- gl_once_t datatype -------------------------- */ #define gl_once(NAME, INITFUNCTION) \ do \ { \ if (glthread_once (&NAME, INITFUNCTION)) \ abort (); \ } \ while (0) /* ========================================================================= */ #endif /* _LOCK_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/glthread/lock.c������������������������������������������������������0000644�0001750�0001750�00000044211�14557510505�015133� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locking in multithreaded situations. Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h. */ #include <config.h> #include "glthread/lock.h" /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ int glthread_lock_init (gl_lock_t *lock) { if (mtx_init (&lock->mutex, mtx_plain) != thrd_success) return ENOMEM; lock->init_needed = 0; return 0; } int glthread_lock_lock (gl_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->mutex) != thrd_success) return EAGAIN; return 0; } int glthread_lock_unlock (gl_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_unlock (&lock->mutex) != thrd_success) return EINVAL; return 0; } int glthread_lock_destroy (gl_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); mtx_destroy (&lock->mutex); return 0; } /* ------------------------- gl_rwlock_t datatype ------------------------- */ int glthread_rwlock_init (gl_rwlock_t *lock) { if (mtx_init (&lock->lock, mtx_plain) != thrd_success || cnd_init (&lock->waiting_readers) != thrd_success || cnd_init (&lock->waiting_writers) != thrd_success) return ENOMEM; lock->waiting_writers_count = 0; lock->runcount = 0; lock->init_needed = 0; return 0; } int glthread_rwlock_rdlock (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->lock) != thrd_success) return EAGAIN; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ if (cnd_wait (&lock->waiting_readers, &lock->lock) != thrd_success) { mtx_unlock (&lock->lock); return EINVAL; } } lock->runcount++; if (mtx_unlock (&lock->lock) != thrd_success) return EINVAL; return 0; } int glthread_rwlock_wrlock (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->lock) != thrd_success) return EAGAIN; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; if (cnd_wait (&lock->waiting_writers, &lock->lock) != thrd_success) { lock->waiting_writers_count--; mtx_unlock (&lock->lock); return EINVAL; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ if (mtx_unlock (&lock->lock) != thrd_success) return EINVAL; return 0; } int glthread_rwlock_unlock (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->lock) != thrd_success) return EAGAIN; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { mtx_unlock (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { mtx_unlock (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ if (cnd_signal (&lock->waiting_writers) != thrd_success) { mtx_unlock (&lock->lock); return EINVAL; } } else { /* Wake up all waiting readers. */ if (cnd_broadcast (&lock->waiting_readers) != thrd_success) { mtx_unlock (&lock->lock); return EINVAL; } } } if (mtx_unlock (&lock->lock) != thrd_success) return EINVAL; return 0; } int glthread_rwlock_destroy (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); mtx_destroy (&lock->lock); cnd_destroy (&lock->waiting_readers); cnd_destroy (&lock->waiting_writers); return 0; } /* --------------------- gl_recursive_lock_t datatype --------------------- */ int glthread_recursive_lock_init (gl_recursive_lock_t *lock) { if (mtx_init (&lock->mutex, mtx_plain | mtx_recursive) != thrd_success) return ENOMEM; lock->init_needed = 0; return 0; } int glthread_recursive_lock_lock (gl_recursive_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->mutex) != thrd_success) return EAGAIN; return 0; } int glthread_recursive_lock_unlock (gl_recursive_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_unlock (&lock->mutex) != thrd_success) return EINVAL; return 0; } int glthread_recursive_lock_destroy (gl_recursive_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); mtx_destroy (&lock->mutex); return 0; } /* -------------------------- gl_once_t datatype -------------------------- */ #endif /* ========================================================================= */ #if USE_POSIX_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) # if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP # if !HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock) { pthread_rwlockattr_t attributes; int err; err = pthread_rwlockattr_init (&attributes); if (err != 0) return err; /* Note: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP is the only value that causes the writer to be preferred. PTHREAD_RWLOCK_PREFER_WRITER_NP does not do this; see http://man7.org/linux/man-pages/man3/pthread_rwlockattr_setkind_np.3.html */ err = pthread_rwlockattr_setkind_np (&attributes, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP); if (err == 0) err = pthread_rwlock_init(lock, &attributes); /* pthread_rwlockattr_destroy always returns 0. It cannot influence the return value. */ pthread_rwlockattr_destroy (&attributes); return err; } # endif # else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_rwlock_init (&lock->rwlock, NULL); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_rdlock (&lock->rwlock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_wrlock (&lock->rwlock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_rwlock_unlock (&lock->rwlock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_rwlock_destroy (&lock->rwlock); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_init (&lock->lock, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_readers, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_writers, NULL); if (err != 0) return err; lock->waiting_writers_count = 0; lock->runcount = 0; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ err = pthread_cond_wait (&lock->waiting_readers, &lock->lock); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } lock->runcount++; return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; err = pthread_cond_wait (&lock->waiting_writers, &lock->lock); if (err != 0) { lock->waiting_writers_count--; pthread_mutex_unlock (&lock->lock); return err; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ err = pthread_cond_signal (&lock->waiting_writers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } else { /* Wake up all waiting readers. */ err = pthread_cond_broadcast (&lock->waiting_readers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } } return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_destroy (&lock->lock); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_readers); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_writers); if (err != 0) return err; return 0; } # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (lock, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; return 0; } # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (&lock->recmutex, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_recursive_lock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_mutex_lock (&lock->recmutex); } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_mutex_unlock (&lock->recmutex); } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_mutex_destroy (&lock->recmutex); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { int err; err = pthread_mutex_init (&lock->mutex, NULL); if (err != 0) return err; lock->owner = (pthread_t) 0; lock->depth = 0; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { pthread_t self = pthread_self (); if (lock->owner != self) { int err; err = pthread_mutex_lock (&lock->mutex); if (err != 0) return err; lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } return 0; } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != pthread_self ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = (pthread_t) 0; return pthread_mutex_unlock (&lock->mutex); } else return 0; } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != (pthread_t) 0) return EBUSY; return pthread_mutex_destroy (&lock->mutex); } # endif /* -------------------------- gl_once_t datatype -------------------------- */ static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT; int glthread_once_singlethreaded (pthread_once_t *once_control) { /* We don't know whether pthread_once_t is an integer type, a floating-point type, a pointer type, or a structure type. */ char *firstbyte = (char *)once_control; if (*firstbyte == *(const char *)&fresh_once) { /* First time use of once_control. Invert the first byte. */ *firstbyte = ~ *(const char *)&fresh_once; return 1; } else return 0; } # if !(PTHREAD_IN_USE_DETECTION_HARD || USE_POSIX_THREADS_WEAK) int glthread_once_multithreaded (pthread_once_t *once_control, void (*init_function) (void)) { int err = pthread_once (once_control, init_function); if (err == ENOSYS) { /* This happens on FreeBSD 11: The pthread_once function in libc returns ENOSYS. */ if (glthread_once_singlethreaded (once_control)) init_function (); return 0; } return err; } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS #endif /* ========================================================================= */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/glthread/threadlib.c�������������������������������������������������0000644�0001750�0001750�00000005120�14557510505�016135� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multithreading primitives. Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #include <config.h> /* ========================================================================= */ #if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the POSIX threads library. */ # include <errno.h> # include <pthread.h> # include <stdlib.h> # if PTHREAD_IN_USE_DETECTION_HARD # if defined __FreeBSD__ || defined __DragonFly__ /* FreeBSD */ /* Test using pthread_key_create. */ int glthread_in_use (void) { static int tested; static int result; /* 1: linked with -lpthread, 0: only with libc */ if (!tested) { pthread_key_t key; int err = pthread_key_create (&key, NULL); if (err == ENOSYS) result = 0; else { result = 1; if (err == 0) pthread_key_delete (key); } tested = 1; } return result; } # else /* Solaris, HP-UX */ /* Test using pthread_create. */ /* The function to be executed by a dummy thread. */ static void * dummy_thread_func (void *arg) { return arg; } int glthread_in_use (void) { static int tested; static int result; /* 1: linked with -lpthread, 0: only with libc */ if (!tested) { pthread_t thread; if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0) /* Thread creation failed. */ result = 0; else { /* Thread creation works. */ void *retval; if (pthread_join (thread, &retval) != 0) abort (); result = 1; } tested = 1; } return result; } # endif # endif #endif /* ========================================================================= */ /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/malloc/��������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514177�013603� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/malloc/dynarray_at_failure.c�����������������������������������������0000644�0001750�0001750�00000002415�14557510505�017704� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report an dynamic array index out of bounds condition. Copyright (C) 2017-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> # include <stdlib.h> #endif #include <dynarray.h> #include <stdio.h> void __libc_dynarray_at_failure (size_t size, size_t index) { #ifdef _LIBC char buf[200]; __snprintf (buf, sizeof (buf), "Fatal glibc error: " "array index %zu not less than array length %zu\n", index, size); __libc_fatal (buf); #else abort (); #endif } libc_hidden_def (__libc_dynarray_at_failure) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/malloc/dynarray_emplace_enlarge.c������������������������������������0000644�0001750�0001750�00000004507�14557510505�020700� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Increase the size of a dynamic array in preparation of an emplace operation. Copyright (C) 2017-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <errno.h> #include <stdckdint.h> #include <stdlib.h> #include <string.h> bool __libc_dynarray_emplace_enlarge (struct dynarray_header *list, void *scratch, size_t element_size) { size_t new_allocated; if (list->allocated == 0) { /* No scratch buffer provided. Choose a reasonable default size. */ if (element_size < 4) new_allocated = 16; else if (element_size < 8) new_allocated = 8; else new_allocated = 4; } else /* Increase the allocated size, using an exponential growth policy. */ { new_allocated = list->allocated + list->allocated / 2 + 1; if (new_allocated <= list->allocated) { /* Overflow. */ __set_errno (ENOMEM); return false; } } size_t new_size; if (ckd_mul (&new_size, new_allocated, element_size)) return false; void *new_array; if (list->array == scratch) { /* The previous array was not heap-allocated. */ new_array = malloc (new_size); if (new_array != NULL && list->array != NULL) memcpy (new_array, list->array, list->used * element_size); } else new_array = realloc (list->array, new_size); if (new_array == NULL) return false; list->array = new_array; list->allocated = new_allocated; return true; } libc_hidden_def (__libc_dynarray_emplace_enlarge) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/malloc/dynarray_finalize.c�������������������������������������������0000644�0001750�0001750�00000004230�14557510505�017367� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy the dynamically-allocated area to an explicitly-sized heap allocation. Copyright (C) 2017-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <stdlib.h> #include <string.h> bool __libc_dynarray_finalize (struct dynarray_header *list, void *scratch, size_t element_size, struct dynarray_finalize_result *result) { if (__dynarray_error (list)) /* The caller will reported the deferred error. */ return false; size_t used = list->used; /* Empty list. */ if (used == 0) { /* An empty list could still be backed by a heap-allocated array. Free it if necessary. */ if (list->array != scratch) free (list->array); *result = (struct dynarray_finalize_result) { NULL, 0 }; return true; } size_t allocation_size = used * element_size; void *heap_array = malloc (allocation_size); if (heap_array != NULL) { /* The new array takes ownership of the strings. */ if (list->array != NULL) memcpy (heap_array, list->array, allocation_size); if (list->array != scratch) free (list->array); *result = (struct dynarray_finalize_result) { .array = heap_array, .length = used }; return true; } else /* The caller will perform the freeing operation. */ return false; } libc_hidden_def (__libc_dynarray_finalize) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/malloc/dynarray_resize.c���������������������������������������������0000644�0001750�0001750�00000004100�14557510505�017063� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Increase the size of a dynamic array. Copyright (C) 2017-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <errno.h> #include <stdckdint.h> #include <stdlib.h> #include <string.h> bool __libc_dynarray_resize (struct dynarray_header *list, size_t size, void *scratch, size_t element_size) { /* The existing allocation provides sufficient room. */ if (size <= list->allocated) { list->used = size; return true; } /* Otherwise, use size as the new allocation size. The caller is expected to provide the final size of the array, so there is no over-allocation here. */ size_t new_size_bytes; if (ckd_mul (&new_size_bytes, size, element_size)) { /* Overflow. */ __set_errno (ENOMEM); return false; } void *new_array; if (list->array == scratch) { /* The previous array was not heap-allocated. */ new_array = malloc (new_size_bytes); if (new_array != NULL && list->array != NULL) memcpy (new_array, list->array, list->used * element_size); } else new_array = realloc (list->array, new_size_bytes); if (new_array == NULL) return false; list->array = new_array; list->allocated = size; list->used = size; return true; } libc_hidden_def (__libc_dynarray_resize) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/malloc/dynarray_resize_clear.c���������������������������������������0000644�0001750�0001750�00000002660�14557510505�020242� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Increase the size of a dynamic array and clear the new part. Copyright (C) 2017-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <string.h> bool __libc_dynarray_resize_clear (struct dynarray_header *list, size_t size, void *scratch, size_t element_size) { size_t old_size = list->used; if (!__libc_dynarray_resize (list, size, scratch, element_size)) return false; /* __libc_dynarray_resize already checked for overflow. */ char *array = list->array; memset (array + (old_size * element_size), 0, (size - old_size) * element_size); return true; } libc_hidden_def (__libc_dynarray_resize_clear) ��������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/malloc/dynarray-skeleton.c�������������������������������������������0000644�0001750�0001750�00000043551�14557510505�017341� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Type-safe arrays which grow dynamically. Copyright (C) 2017-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* Pre-processor macros which act as parameters: DYNARRAY_STRUCT The struct tag of dynamic array to be defined. DYNARRAY_ELEMENT The type name of the element type. Elements are copied as if by memcpy, and can change address as the dynamic array grows. DYNARRAY_PREFIX The prefix of the functions which are defined. The following parameters are optional: DYNARRAY_ELEMENT_FREE DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the contents of elements. E is of type DYNARRAY_ELEMENT *. DYNARRAY_ELEMENT_INIT DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new element. E is of type DYNARRAY_ELEMENT *. If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is defined, new elements are automatically zero-initialized. Otherwise, new elements have undefined contents. DYNARRAY_INITIAL_SIZE The size of the statically allocated array (default: at least 2, more elements if they fit into 128 bytes). Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0, there is no statically allocated array at, and all non-empty arrays are heap-allocated. DYNARRAY_FINAL_TYPE The name of the type which holds the final array. If not defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE must be a struct type, with members of type DYNARRAY_ELEMENT and size_t at the start (in this order). These macros are undefined after this header file has been included. The following types are provided (their members are private to the dynarray implementation): struct DYNARRAY_STRUCT The following functions are provided: void DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *); void DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *); bool DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *); void DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *); size_t DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *, size_t); void DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *, DYNARRAY_ELEMENT); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *); bool DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *, size_t); void DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *); void DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *); The following functions are provided are provided if the prerequisites are met: bool DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *, DYNARRAY_FINAL_TYPE *); (if DYNARRAY_FINAL_TYPE is defined) DYNARRAY_ELEMENT *DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *, size_t *); (if DYNARRAY_FINAL_TYPE is not defined) */ #include <malloc/dynarray.h> #include <errno.h> #include <stdlib.h> #include <string.h> #ifndef DYNARRAY_STRUCT # error "DYNARRAY_STRUCT must be defined" #endif #ifndef DYNARRAY_ELEMENT # error "DYNARRAY_ELEMENT must be defined" #endif #ifndef DYNARRAY_PREFIX # error "DYNARRAY_PREFIX must be defined" #endif #ifdef DYNARRAY_INITIAL_SIZE # if DYNARRAY_INITIAL_SIZE < 0 # error "DYNARRAY_INITIAL_SIZE must be non-negative" # endif # if DYNARRAY_INITIAL_SIZE > 0 # define DYNARRAY_HAVE_SCRATCH 1 # else # define DYNARRAY_HAVE_SCRATCH 0 # endif #else /* Provide a reasonable default which limits the size of DYNARRAY_STRUCT. */ # define DYNARRAY_INITIAL_SIZE \ (sizeof (DYNARRAY_ELEMENT) > 64 ? 2 : 128 / sizeof (DYNARRAY_ELEMENT)) # define DYNARRAY_HAVE_SCRATCH 1 #endif /* Public type definitions. */ /* All fields of this struct are private to the implementation. */ struct DYNARRAY_STRUCT { union { struct dynarray_header dynarray_abstract; struct { /* These fields must match struct dynarray_header. */ size_t used; size_t allocated; DYNARRAY_ELEMENT *array; } dynarray_header; } u; #if DYNARRAY_HAVE_SCRATCH /* Initial inline allocation. */ DYNARRAY_ELEMENT scratch[DYNARRAY_INITIAL_SIZE]; #endif }; /* Internal use only: Helper macros. */ /* Ensure macro-expansion of DYNARRAY_PREFIX. */ #define DYNARRAY_CONCAT0(prefix, name) prefix##name #define DYNARRAY_CONCAT1(prefix, name) DYNARRAY_CONCAT0(prefix, name) #define DYNARRAY_NAME(name) DYNARRAY_CONCAT1(DYNARRAY_PREFIX, name) /* Use DYNARRAY_FREE instead of DYNARRAY_NAME (free), so that Gnulib does not change 'free' to 'rpl_free'. */ #define DYNARRAY_FREE DYNARRAY_CONCAT1 (DYNARRAY_NAME (f), ree) /* Address of the scratch buffer if any. */ #if DYNARRAY_HAVE_SCRATCH # define DYNARRAY_SCRATCH(list) (list)->scratch #else # define DYNARRAY_SCRATCH(list) NULL #endif /* Internal use only: Helper functions. */ /* Internal function. Call DYNARRAY_ELEMENT_FREE with the array elements. Name mangling needed due to the DYNARRAY_ELEMENT_FREE macro expansion. */ static inline void DYNARRAY_NAME (free__elements__) (DYNARRAY_ELEMENT *__dynarray_array, size_t __dynarray_used) { #ifdef DYNARRAY_ELEMENT_FREE for (size_t __dynarray_i = 0; __dynarray_i < __dynarray_used; ++__dynarray_i) DYNARRAY_ELEMENT_FREE (&__dynarray_array[__dynarray_i]); #endif /* DYNARRAY_ELEMENT_FREE */ } /* Internal function. Free the non-scratch array allocation. */ static inline void DYNARRAY_NAME (free__array__) (struct DYNARRAY_STRUCT *list) { #if DYNARRAY_HAVE_SCRATCH if (list->u.dynarray_header.array != list->scratch) free (list->u.dynarray_header.array); #else free (list->u.dynarray_header.array); #endif } /* Public functions. */ /* Initialize a dynamic array object. This must be called before any use of the object. */ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (init) (struct DYNARRAY_STRUCT *list) { list->u.dynarray_header.used = 0; list->u.dynarray_header.allocated = DYNARRAY_INITIAL_SIZE; list->u.dynarray_header.array = DYNARRAY_SCRATCH (list); } /* Deallocate the dynamic array and its elements. */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static void DYNARRAY_FREE (struct DYNARRAY_STRUCT *list) { DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array, list->u.dynarray_header.used); DYNARRAY_NAME (free__array__) (list); DYNARRAY_NAME (init) (list); } /* Return true if the dynamic array is in an error state. */ __attribute_nonnull__ ((1)) static inline bool DYNARRAY_NAME (has_failed) (const struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.allocated == __dynarray_error_marker (); } /* Mark the dynamic array as failed. All elements are deallocated as a side effect. */ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (mark_failed) (struct DYNARRAY_STRUCT *list) { DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array, list->u.dynarray_header.used); DYNARRAY_NAME (free__array__) (list); list->u.dynarray_header.array = DYNARRAY_SCRATCH (list); list->u.dynarray_header.used = 0; list->u.dynarray_header.allocated = __dynarray_error_marker (); } /* Return the number of elements which have been added to the dynamic array. */ __attribute_nonnull__ ((1)) static inline size_t DYNARRAY_NAME (size) (const struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.used; } /* Return a pointer to the array element at INDEX. Terminate the process if INDEX is out of bounds. */ __attribute_nonnull__ ((1)) static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (at) (struct DYNARRAY_STRUCT *list, size_t index) { if (__glibc_unlikely (index >= DYNARRAY_NAME (size) (list))) __libc_dynarray_at_failure (DYNARRAY_NAME (size) (list), index); return list->u.dynarray_header.array + index; } /* Return a pointer to the first array element, if any. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ __attribute_nonnull__ ((1)) static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (begin) (struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.array; } /* Return a pointer one element past the last array element. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ __attribute_nonnull__ ((1)) static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (end) (struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.array + list->u.dynarray_header.used; } /* Internal function. Slow path for the add function below. */ static void DYNARRAY_NAME (add__) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item) { if (__glibc_unlikely (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)))) { DYNARRAY_NAME (mark_failed) (list); return; } /* Copy the new element and increase the array length. */ list->u.dynarray_header.array[list->u.dynarray_header.used++] = item; } /* Add ITEM at the end of the array, enlarging it by one element. Mark *LIST as failed if the dynamic array allocation size cannot be increased. */ __attribute_nonnull__ ((1)) static inline void DYNARRAY_NAME (add) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item) { /* Do nothing in case of previous error. */ if (DYNARRAY_NAME (has_failed) (list)) return; /* Enlarge the array if necessary. */ if (__glibc_unlikely (list->u.dynarray_header.used == list->u.dynarray_header.allocated)) { DYNARRAY_NAME (add__) (list, item); return; } /* Copy the new element and increase the array length. */ list->u.dynarray_header.array[list->u.dynarray_header.used++] = item; } /* Internal function. Building block for the emplace functions below. Assumes space for one more element in *LIST. */ static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (emplace__tail__) (struct DYNARRAY_STRUCT *list) { DYNARRAY_ELEMENT *result = &list->u.dynarray_header.array[list->u.dynarray_header.used]; ++list->u.dynarray_header.used; #if defined (DYNARRAY_ELEMENT_INIT) DYNARRAY_ELEMENT_INIT (result); #elif defined (DYNARRAY_ELEMENT_FREE) memset (result, 0, sizeof (*result)); #endif return result; } /* Internal function. Slow path for the emplace function below. */ static DYNARRAY_ELEMENT * DYNARRAY_NAME (emplace__) (struct DYNARRAY_STRUCT *list) { if (__glibc_unlikely (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)))) { DYNARRAY_NAME (mark_failed) (list); return NULL; } return DYNARRAY_NAME (emplace__tail__) (list); } /* Allocate a place for a new element in *LIST and return a pointer to it. The pointer can be NULL if the dynamic array cannot be enlarged due to a memory allocation failure. */ __attribute_maybe_unused__ __attribute_warn_unused_result__ __attribute_nonnull__ ((1)) static /* Avoid inlining with the larger initialization code. */ #if !(defined (DYNARRAY_ELEMENT_INIT) || defined (DYNARRAY_ELEMENT_FREE)) inline #endif DYNARRAY_ELEMENT * DYNARRAY_NAME (emplace) (struct DYNARRAY_STRUCT *list) { /* Do nothing in case of previous error. */ if (DYNARRAY_NAME (has_failed) (list)) return NULL; /* Enlarge the array if necessary. */ if (__glibc_unlikely (list->u.dynarray_header.used == list->u.dynarray_header.allocated)) return (DYNARRAY_NAME (emplace__) (list)); return DYNARRAY_NAME (emplace__tail__) (list); } /* Change the size of *LIST to SIZE. If SIZE is larger than the existing size, new elements are added (which can be initialized). Otherwise, the list is truncated, and elements are freed. Return false on memory allocation failure (and mark *LIST as failed). */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static bool DYNARRAY_NAME (resize) (struct DYNARRAY_STRUCT *list, size_t size) { if (size > list->u.dynarray_header.used) { bool ok; #if defined (DYNARRAY_ELEMENT_INIT) /* The new elements have to be initialized. */ size_t old_size = list->u.dynarray_header.used; ok = __libc_dynarray_resize (&list->u.dynarray_abstract, size, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); if (ok) for (size_t i = old_size; i < size; ++i) { DYNARRAY_ELEMENT_INIT (&list->u.dynarray_header.array[i]); } #elif defined (DYNARRAY_ELEMENT_FREE) /* Zero initialization is needed so that the elements can be safely freed. */ ok = __libc_dynarray_resize_clear (&list->u.dynarray_abstract, size, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); #else ok = __libc_dynarray_resize (&list->u.dynarray_abstract, size, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); #endif if (__glibc_unlikely (!ok)) DYNARRAY_NAME (mark_failed) (list); return ok; } else { /* The list has shrunk in size. Free the removed elements. */ DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array + size, list->u.dynarray_header.used - size); list->u.dynarray_header.used = size; return true; } } /* Remove the last element of LIST if it is present. */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (remove_last) (struct DYNARRAY_STRUCT *list) { /* used > 0 implies that the array is the non-failed state. */ if (list->u.dynarray_header.used > 0) { size_t new_length = list->u.dynarray_header.used - 1; #ifdef DYNARRAY_ELEMENT_FREE DYNARRAY_ELEMENT_FREE (&list->u.dynarray_header.array[new_length]); #endif list->u.dynarray_header.used = new_length; } } /* Remove all elements from the list. The elements are freed, but the list itself is not. */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (clear) (struct DYNARRAY_STRUCT *list) { /* free__elements__ does nothing if the list is in the failed state. */ DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array, list->u.dynarray_header.used); list->u.dynarray_header.used = 0; } #ifdef DYNARRAY_FINAL_TYPE /* Transfer the dynamic array to a permanent location at *RESULT. Returns true on success on false on allocation failure. In either case, *LIST is re-initialized and can be reused. A NULL pointer is stored in *RESULT if LIST refers to an empty list. On success, the pointer in *RESULT is heap-allocated and must be deallocated using free. */ __attribute_maybe_unused__ __attribute_warn_unused_result__ __attribute_nonnull__ ((1, 2)) static bool DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, DYNARRAY_FINAL_TYPE *result) { struct dynarray_finalize_result res; if (__libc_dynarray_finalize (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT), &res)) { /* On success, the result owns all the data. */ DYNARRAY_NAME (init) (list); *result = (DYNARRAY_FINAL_TYPE) { res.array, res.length }; return true; } else { /* On error, we need to free all data. */ DYNARRAY_FREE (list); errno = ENOMEM; return false; } } #else /* !DYNARRAY_FINAL_TYPE */ /* Transfer the dynamic array to a heap-allocated array and return a pointer to it. The pointer is NULL if memory allocation fails, or if the array is empty, so this function should be used only for arrays which are known not be empty (usually because they always have a sentinel at the end). If LENGTHP is not NULL, the array length is written to *LENGTHP. *LIST is re-initialized and can be reused. */ __attribute_maybe_unused__ __attribute_warn_unused_result__ __attribute_nonnull__ ((1)) static DYNARRAY_ELEMENT * DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, size_t *lengthp) { struct dynarray_finalize_result res; if (__libc_dynarray_finalize (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT), &res)) { /* On success, the result owns all the data. */ DYNARRAY_NAME (init) (list); if (lengthp != NULL) *lengthp = res.length; return res.array; } else { /* On error, we need to free all data. */ DYNARRAY_FREE (list); errno = ENOMEM; return NULL; } } #endif /* !DYNARRAY_FINAL_TYPE */ /* Undo macro definitions. */ #undef DYNARRAY_CONCAT0 #undef DYNARRAY_CONCAT1 #undef DYNARRAY_NAME #undef DYNARRAY_SCRATCH #undef DYNARRAY_HAVE_SCRATCH #undef DYNARRAY_STRUCT #undef DYNARRAY_ELEMENT #undef DYNARRAY_PREFIX #undef DYNARRAY_ELEMENT_FREE #undef DYNARRAY_ELEMENT_INIT #undef DYNARRAY_INITIAL_SIZE #undef DYNARRAY_FINAL_TYPE �������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/malloc/dynarray.h����������������������������������������������������0000644�0001750�0001750�00000014217�14557510505�015521� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Type-safe arrays which grow dynamically. Shared definitions. Copyright (C) 2017-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* To use the dynarray facility, you need to include <malloc/dynarray-skeleton.c> and define the parameter macros documented in that file. A minimal example which provides a growing list of integers can be defined like this: struct int_array { // Pointer to result array followed by its length, // as required by DYNARRAY_FINAL_TYPE. int *array; size_t length; }; #define DYNARRAY_STRUCT dynarray_int #define DYNARRAY_ELEMENT int #define DYNARRAY_PREFIX dynarray_int_ #define DYNARRAY_FINAL_TYPE struct int_array #include <malloc/dynarray-skeleton.c> To create a three-element array with elements 1, 2, 3, use this code: struct dynarray_int dyn; dynarray_int_init (&dyn); for (int i = 1; i <= 3; ++i) { int *place = dynarray_int_emplace (&dyn); assert (place != NULL); *place = i; } struct int_array result; bool ok = dynarray_int_finalize (&dyn, &result); assert (ok); assert (result.length == 3); assert (result.array[0] == 1); assert (result.array[1] == 2); assert (result.array[2] == 3); free (result.array); If the elements contain resources which must be freed, define DYNARRAY_ELEMENT_FREE appropriately, like this: struct str_array { char **array; size_t length; }; #define DYNARRAY_STRUCT dynarray_str #define DYNARRAY_ELEMENT char * #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr) #define DYNARRAY_PREFIX dynarray_str_ #define DYNARRAY_FINAL_TYPE struct str_array #include <malloc/dynarray-skeleton.c> Compared to scratch buffers, dynamic arrays have the following features: - They have an element type, and are not just an untyped buffer of bytes. - When growing, previously stored elements are preserved. (It is expected that scratch_buffer_grow_preserve and scratch_buffer_set_array_size eventually go away because all current users are moved to dynamic arrays.) - Scratch buffers have a more aggressive growth policy because growing them typically means a retry of an operation (across an NSS service module boundary), which is expensive. - For the same reason, scratch buffers have a much larger initial stack allocation. */ #ifndef _DYNARRAY_H #define _DYNARRAY_H #include <stddef.h> #include <string.h> struct dynarray_header { size_t used; size_t allocated; void *array; }; /* Marker used in the allocated member to indicate that an error was encountered. */ static inline size_t __dynarray_error_marker (void) { return -1; } /* Internal function. See the has_failed function in dynarray-skeleton.c. */ static inline bool __dynarray_error (struct dynarray_header *list) { return list->allocated == __dynarray_error_marker (); } /* Internal function. Enlarge the dynamically allocated area of the array to make room for one more element. SCRATCH is a pointer to the scratch area (which is not heap-allocated and must not be freed). ELEMENT_SIZE is the size, in bytes, of one element. Return false on failure, true on success. */ bool __libc_dynarray_emplace_enlarge (struct dynarray_header *, void *scratch, size_t element_size); /* Internal function. Enlarge the dynamically allocated area of the array to make room for at least SIZE elements (which must be larger than the existing used part of the dynamic array). SCRATCH is a pointer to the scratch area (which is not heap-allocated and must not be freed). ELEMENT_SIZE is the size, in bytes, of one element. Return false on failure, true on success. */ bool __libc_dynarray_resize (struct dynarray_header *, size_t size, void *scratch, size_t element_size); /* Internal function. Like __libc_dynarray_resize, but clear the new part of the dynamic array. */ bool __libc_dynarray_resize_clear (struct dynarray_header *, size_t size, void *scratch, size_t element_size); /* Internal type. */ struct dynarray_finalize_result { void *array; size_t length; }; /* Internal function. Copy the dynamically-allocated area to an explicitly-sized heap allocation. SCRATCH is a pointer to the embedded scratch space. ELEMENT_SIZE is the size, in bytes, of the element type. On success, true is returned, and pointer and length are written to *RESULT. On failure, false is returned. The caller has to take care of some of the memory management; this function is expected to be called from dynarray-skeleton.c. */ bool __libc_dynarray_finalize (struct dynarray_header *list, void *scratch, size_t element_size, struct dynarray_finalize_result *result); /* Internal function. Terminate the process after an index error. SIZE is the number of elements of the dynamic array. INDEX is the lookup index which triggered the failure. */ _Noreturn void __libc_dynarray_at_failure (size_t size, size_t index); #ifndef _ISOMAC libc_hidden_proto (__libc_dynarray_emplace_enlarge) libc_hidden_proto (__libc_dynarray_resize) libc_hidden_proto (__libc_dynarray_resize_clear) libc_hidden_proto (__libc_dynarray_finalize) libc_hidden_proto (__libc_dynarray_at_failure) #endif #endif /* _DYNARRAY_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unicase/�������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514177�013763� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unicase/tolower.c����������������������������������������������������0000644�0001750�0001750�00000002014�14557510505�015526� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Lowercase mapping for Unicode characters (locale and context independent). Copyright (C) 2002, 2006, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unicase.h" /* Define u_mapping table. */ #include "tolower.h" #define FUNC uc_tolower #include "simple-mapping.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unicase/simple-mapping.h���������������������������������������������0000644�0001750�0001750�00000002605�14557510505�016770� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Simple case mapping for Unicode characters. Copyright (C) 2002, 2006, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ ucs4_t FUNC (ucs4_t uc) { unsigned int index1 = uc >> mapping_header_0; if (index1 < mapping_header_1) { int lookup1 = u_mapping.level1[index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> mapping_header_2) & mapping_header_3; int lookup2 = u_mapping.level2[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = (uc & mapping_header_4); int lookup3 = u_mapping.level3[lookup2 + index3]; return uc + lookup3; } } } return uc; } ���������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unicase/tolower.h����������������������������������������������������0000644�0001750�0001750�00000122765�14557510505�015553� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Simple character mapping of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define mapping_header_0 16 #define mapping_header_1 2 #define mapping_header_2 7 #define mapping_header_3 511 #define mapping_header_4 127 static const struct { int level1[2]; short level2[2 << 9]; int level3[35 << 7]; } u_mapping = { { 0, 512 }, { 0, 128, 256, 384, 512, -1, 640, 768, 896, 1024, 1152, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1280, -1, -1, -1, -1, -1, 1408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1536, -1, -1, 1664, 1792, 1920, 2048, -1, -1, 2176, 2304, -1, -1, -1, -1, -1, 2432, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2560, 2688, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2816, 2944, 3072, 3200, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3328, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3456, 3584, 3712, 3840, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3968, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4096, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4352, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, -199, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, -121, 1, 0, 1, 0, 1, 0, 0, 0, 210, 1, 0, 1, 0, 206, 1, 0, 205, 205, 1, 0, 0, 79, 202, 203, 1, 0, 205, 207, 0, 211, 209, 1, 0, 0, 0, 211, 213, 0, 214, 1, 0, 1, 0, 1, 0, 218, 1, 0, 218, 0, 0, 1, 0, 218, 1, 0, 217, 217, 1, 0, 1, 0, 219, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 2, 1, 0, 1, 0, -97, -56, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, -130, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 10795, 1, 0, -163, 10792, 0, 0, 1, 0, -195, 69, 71, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, 38, 0, 37, 37, 37, 0, 64, 0, 63, 63, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, -60, 0, 0, 1, 0, -7, 1, 0, 0, -130, -130, -130, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 15, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, 0, 7264, 0, 0, 0, 0, 0, 7264, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 38864, 8, 8, 8, 8, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, -3008, 0, 0, -3008, -3008, -3008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7615, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, 0, -8, 0, -8, 0, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -8, -8, -8, -8, -8, -8, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -74, -74, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, -86, -86, -86, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -100, -100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, -8, -112, -112, -7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -128, -126, -126, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -7517, 0, 0, 0, -8383, -8262, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -10743, -3814, -10727, 0, 0, 1, 0, 1, 0, 1, 0, -10780, -10749, -10783, -10782, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -10815, -10815, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, -35332, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, -42280, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, -42308, -42319, -42315, -42305, -42308, 0, -42258, -42282, -42261, 928, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, -48, -42307, -35384, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 0, 39, 39, 39, 39, 39, 39, 39, 0, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; �����������gnuastro-0.22/bootstrapped/lib/unictype/������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514200�014157� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_alnum.c�����������������������������������������������0000644�0001750�0001750�00000002057�14557510505�016573� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_alnum table. */ #include "ctype_alnum.h" bool uc_is_alnum (ucs4_t uc) { return bitmap_lookup (&u_is_alnum, uc); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_alpha.c�����������������������������������������������0000644�0001750�0001750�00000002057�14557510505�016544� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_alpha table. */ #include "ctype_alpha.h" bool uc_is_alpha (ucs4_t uc) { return bitmap_lookup (&u_is_alpha, uc); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_blank.c�����������������������������������������������0000644�0001750�0001750�00000002057�14557510505�016546� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_blank table. */ #include "ctype_blank.h" bool uc_is_blank (ucs4_t uc) { return bitmap_lookup (&u_is_blank, uc); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_cntrl.c�����������������������������������������������0000644�0001750�0001750�00000002057�14557510505�016601� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_cntrl table. */ #include "ctype_cntrl.h" bool uc_is_cntrl (ucs4_t uc) { return bitmap_lookup (&u_is_cntrl, uc); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_digit.c�����������������������������������������������0000644�0001750�0001750�00000002057�14557510505�016557� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_digit table. */ #include "ctype_digit.h" bool uc_is_digit (ucs4_t uc) { return bitmap_lookup (&u_is_digit, uc); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_graph.c�����������������������������������������������0000644�0001750�0001750�00000002057�14557510505�016560� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_graph table. */ #include "ctype_graph.h" bool uc_is_graph (ucs4_t uc) { return bitmap_lookup (&u_is_graph, uc); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_lower.c�����������������������������������������������0000644�0001750�0001750�00000002057�14557510505�016607� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_lower table. */ #include "ctype_lower.h" bool uc_is_lower (ucs4_t uc) { return bitmap_lookup (&u_is_lower, uc); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_print.c�����������������������������������������������0000644�0001750�0001750�00000002057�14557510505�016613� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_print table. */ #include "ctype_print.h" bool uc_is_print (ucs4_t uc) { return bitmap_lookup (&u_is_print, uc); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_punct.c�����������������������������������������������0000644�0001750�0001750�00000002057�14557510505�016610� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_punct table. */ #include "ctype_punct.h" bool uc_is_punct (ucs4_t uc) { return bitmap_lookup (&u_is_punct, uc); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_space.c�����������������������������������������������0000644�0001750�0001750�00000002057�14557510505�016552� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_space table. */ #include "ctype_space.h" bool uc_is_space (ucs4_t uc) { return bitmap_lookup (&u_is_space, uc); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_upper.c�����������������������������������������������0000644�0001750�0001750�00000002057�14557510505�016612� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_upper table. */ #include "ctype_upper.h" bool uc_is_upper (ucs4_t uc) { return bitmap_lookup (&u_is_upper, uc); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_xdigit.c����������������������������������������������0000644�0001750�0001750�00000002063�14557510505�016744� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ISO C <ctype.h> like properties of Unicode characters. Copyright (C) 2002, 2006-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "unictype.h" #include "bitmap.h" /* Define u_is_xdigit table. */ #include "ctype_xdigit.h" bool uc_is_xdigit (ucs4_t uc) { return bitmap_lookup (&u_is_xdigit, uc); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/bitmap.h����������������������������������������������������0000644�0001750�0001750�00000003302�14557510505�015526� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Three-level bitmap lookup. Copyright (C) 2000-2002, 2005-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2000-2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ static inline int bitmap_lookup (const void *table, ucs4_t uc); /* These values are currently hardcoded into gen-uni-tables.c, function output_predicate(). */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static inline int bitmap_lookup (const void *table, ucs4_t uc) { unsigned int index1 = uc >> header_0; if (index1 < ((const int *) table)[0]) { int lookup1 = ((const int *) table)[1 + index1]; if (lookup1 >= 0) { unsigned int index2 = (uc >> header_2) & header_3; int lookup2 = ((const short *) table)[lookup1 + index2]; if (lookup2 >= 0) { unsigned int index3 = (uc >> 5) & header_4; unsigned int lookup3 = ((const unsigned int *) table)[lookup2 + index3]; return (lookup3 >> (uc & 0x1f)) & 1; } } } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_alnum.h�����������������������������������������������0000644�0001750�0001750�00000115542�14557510505�016604� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[4]; short level2[4 << 7]; unsigned int level3[81 << 4]; } u_is_alnum = { { 4 }, { 5 * sizeof (int) / sizeof (short) + 0, 5 * sizeof (int) / sizeof (short) + 128, 5 * sizeof (int) / sizeof (short) + 256, 5 * sizeof (int) / sizeof (short) + 384 }, { 5 + 512 * sizeof (short) / sizeof (int) + 0, 5 + 512 * sizeof (short) / sizeof (int) + 16, 5 + 512 * sizeof (short) / sizeof (int) + 32, 5 + 512 * sizeof (short) / sizeof (int) + 48, 5 + 512 * sizeof (short) / sizeof (int) + 64, 5 + 512 * sizeof (short) / sizeof (int) + 80, 5 + 512 * sizeof (short) / sizeof (int) + 96, 5 + 512 * sizeof (short) / sizeof (int) + 112, 5 + 512 * sizeof (short) / sizeof (int) + 128, 5 + 512 * sizeof (short) / sizeof (int) + 144, 5 + 512 * sizeof (short) / sizeof (int) + 160, 5 + 512 * sizeof (short) / sizeof (int) + 176, 5 + 512 * sizeof (short) / sizeof (int) + 192, 5 + 512 * sizeof (short) / sizeof (int) + 208, 5 + 512 * sizeof (short) / sizeof (int) + 224, 5 + 512 * sizeof (short) / sizeof (int) + 240, 5 + 512 * sizeof (short) / sizeof (int) + 256, -1, 5 + 512 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 288, 5 + 512 * sizeof (short) / sizeof (int) + 304, 5 + 512 * sizeof (short) / sizeof (int) + 320, -1, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 352, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 368, 5 + 512 * sizeof (short) / sizeof (int) + 384, 5 + 512 * sizeof (short) / sizeof (int) + 400, 5 + 512 * sizeof (short) / sizeof (int) + 416, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 448, 5 + 512 * sizeof (short) / sizeof (int) + 464, 5 + 512 * sizeof (short) / sizeof (int) + 480, 5 + 512 * sizeof (short) / sizeof (int) + 496, 5 + 512 * sizeof (short) / sizeof (int) + 512, 5 + 512 * sizeof (short) / sizeof (int) + 528, 5 + 512 * sizeof (short) / sizeof (int) + 544, 5 + 512 * sizeof (short) / sizeof (int) + 560, 5 + 512 * sizeof (short) / sizeof (int) + 576, 5 + 512 * sizeof (short) / sizeof (int) + 592, 5 + 512 * sizeof (short) / sizeof (int) + 608, 5 + 512 * sizeof (short) / sizeof (int) + 624, 5 + 512 * sizeof (short) / sizeof (int) + 640, 5 + 512 * sizeof (short) / sizeof (int) + 656, 5 + 512 * sizeof (short) / sizeof (int) + 672, 5 + 512 * sizeof (short) / sizeof (int) + 688, 5 + 512 * sizeof (short) / sizeof (int) + 704, 5 + 512 * sizeof (short) / sizeof (int) + 720, 5 + 512 * sizeof (short) / sizeof (int) + 736, 5 + 512 * sizeof (short) / sizeof (int) + 752, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 768, 5 + 512 * sizeof (short) / sizeof (int) + 784, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 800, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 816, -1, -1, -1, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 848, -1, 5 + 512 * sizeof (short) / sizeof (int) + 864, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 880, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 912, 5 + 512 * sizeof (short) / sizeof (int) + 928, 5 + 512 * sizeof (short) / sizeof (int) + 944, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 960, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 976, 5 + 512 * sizeof (short) / sizeof (int) + 992, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 1008, 5 + 512 * sizeof (short) / sizeof (int) + 1024, 5 + 512 * sizeof (short) / sizeof (int) + 1040, 5 + 512 * sizeof (short) / sizeof (int) + 1056, 5 + 512 * sizeof (short) / sizeof (int) + 1072, 5 + 512 * sizeof (short) / sizeof (int) + 1088, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 1104, 5 + 512 * sizeof (short) / sizeof (int) + 1120, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 1136, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1152, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1168, 5 + 512 * sizeof (short) / sizeof (int) + 1184, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1200, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1216, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1232, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1248, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1264, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1280, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x04200400U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFC3U, 0x0000501FU, 0x00000000U, 0x00000000U, 0x00000020U, 0xBCDF0000U, 0xFFFFD740U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC03U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x027FFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFF0000U, 0x000787FFU, 0x00000000U, 0xFFFFFFFFU, 0x000007FFU, 0xFFFEC3FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x002FFFFFU, 0x9FFFC060U, 0xFFFD0000U, 0x0000FFFFU, 0xFFFFE000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0002003FU, 0xFFFFFFFFU, 0x043007FFU, 0x043FFFFFU, 0x00000110U, 0x01FFFFFFU, 0xFFFF07FFU, 0x00007EFFU, 0xFFFFFFFFU, 0x000003FFU, 0x00000000U, 0xFFFFFFF0U, 0x23FFFFFFU, 0xFF010000U, 0xFFFEFFC3U, 0xFFF99FE1U, 0x23C5FDFFU, 0xB0004000U, 0x1003FFC3U, 0xFFF987E0U, 0x036DFDFFU, 0x5E000000U, 0x001CFFC0U, 0xFFFBBFE0U, 0x23EDFDFFU, 0x00010000U, 0x0200FFC3U, 0xFFF99FE0U, 0x23EDFDFFU, 0xB0000000U, 0x0002FFC3U, 0xD63DC7E8U, 0x03FFC718U, 0x00010000U, 0x0000FFC0U, 0xFFFDDFE0U, 0x23FFFDFFU, 0x27000000U, 0x0000FFC3U, 0xFFFDDFE1U, 0x23EFFDFFU, 0x60000000U, 0x0006FFC3U, 0xFFFDDFF0U, 0x27FFFFFFU, 0x80704000U, 0xFC00FFC3U, 0xFC7FFFE0U, 0x2FFBFFFFU, 0x0000007FU, 0x0000FFC0U, 0xFFFFFFFEU, 0x07FF7FFFU, 0x03FF7FBFU, 0x00000000U, 0xFFFFF7D6U, 0x200DFFAFU, 0xF3FF005FU, 0x00000000U, 0x00000001U, 0x000003FFU, 0xFFFFFEFFU, 0x00001FFFU, 0x00001F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x800007FFU, 0x3C3F03FFU, 0xFFE1C062U, 0x03FF4003U, 0xFFFFFFFFU, 0xFFFF20BFU, 0xF7FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF9FFFU, 0x07FFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFC7FFU, 0x8003FFFFU, 0x0003FFFFU, 0x0003FFFFU, 0x0001DFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0x10800000U, 0x000003FFU, 0x03FF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFFFFFU, 0xFFFFFF9FU, 0xFFFF05FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0xFFFFFFC0U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x03FF03FFU, 0x00000000U, 0x007FFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x03FF03FFU, 0x00000080U, 0x00000000U, 0x00000000U, 0xFFFFFFE0U, 0x000FFFFFU, 0x03FF1FE0U, 0x00000000U, 0xFFFFFFF8U, 0xFFFFC001U, 0xFFFFFFFFU, 0x0000003FU, 0xFFFFFFFFU, 0x0000000FU, 0xFFFFE3FFU, 0x3FFFFFFFU, 0xFFFF01FFU, 0xE7FFFFFFU, 0x00000000U, 0x046FDE00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E2FFC84U, 0xF3FFBF50U, 0x000043E0U, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000C781FU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x000080FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000000E0U, 0x1F3E03FEU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xE07FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFE0U, 0xFFFEFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFF0000U, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0x00000FFFU, 0xFFFFFFFFU, 0x80007FFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFF800000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFF9FFU, 0xFFFFFFFFU, 0x03EB07FFU, 0xFFFC0000U, 0xFFFFF7BBU, 0x00000007U, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFCU, 0x000FFFFFU, 0x03FF0000U, 0x68FC0000U, 0xFFFFFFFFU, 0xFFFF003FU, 0x0000007FU, 0x1FFFFFFFU, 0xFFFFFFF0U, 0x0007FFFFU, 0x03FF8000U, 0x7FFFFFDFU, 0xFFFFFFFFU, 0x000001FFU, 0x03FF0FF7U, 0xC47FFFFFU, 0xFFFFFFFFU, 0x3E62FFFFU, 0x38000005U, 0x001C07FFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xF7FFFFFFU, 0xFFFF03FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF0007U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xA0F8007FU, 0x5F7FFDFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x0FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFDF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0x03FF0000U, 0x07FFFFFEU, 0x07FFFFFEU, 0xFFFFFFC0U, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x00000000U, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFE000U, 0xFFFF07FFU, 0x003FFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x003EFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF03FFU, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0xF7FF000FU, 0xFFB7F7FFU, 0x1BFBFFFBU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0xFFFFFFBFU, 0x07FDFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0x003FFFFFU, 0x007FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x0037FFFFU, 0x003FFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xC0FFFFFFU, 0x00000000U, 0x00000000U, 0xFEEF0001U, 0x003FFFFFU, 0x00000000U, 0x1FFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0xFFFFFEFFU, 0x0000001FU, 0xFFFFFFFFU, 0x003FFFFFU, 0x003FFFFFU, 0x0007FFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x03FF000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000303FFU, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFF0080U, 0x0000003FU, 0xFFFF0000U, 0x00000003U, 0xFFFF0000U, 0x0000001FU, 0x007FFFFFU, 0xFFFFFFF8U, 0x00FFFFFFU, 0x00000000U, 0x0026FFC0U, 0xFFFFFFF8U, 0x0000FFFFU, 0xFFFF0000U, 0x03FF01FFU, 0xFFFFFFF8U, 0xFFC0007FU, 0xFFFF0090U, 0x0047FFFFU, 0xFFFFFFF8U, 0x0007FFFFU, 0x17FF001EU, 0x00000000U, 0xFFFBFFFFU, 0x80000FFFU, 0x00000001U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF01FFU, 0x7FFFFFFFU, 0x03FF0000U, 0xFFF99FE0U, 0x23EDFDFFU, 0xE0010000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x83FF0780U, 0x00000003U, 0xFFFFFFFFU, 0x0000FFFFU, 0x03FF00B0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x0F000000U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x03FF0010U, 0x00000000U, 0xFFFFFFFFU, 0x010007FFU, 0x000003FFU, 0x00000000U, 0x07FFFFFFU, 0x03FF0000U, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x800003FFU, 0xFF6FF27FU, 0x8000FFFFU, 0x03FF0002U, 0x00000000U, 0x00000000U, 0xFFFFFCFFU, 0x0001FFFFU, 0x0000000AU, 0xFFFFF801U, 0x0407FFFFU, 0xF0010000U, 0xFFFFFFFFU, 0x200003FFU, 0xFFFF0000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0x00007FFFU, 0x03FF0001U, 0xFFFC0000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFB7FU, 0x0001FFFFU, 0x03FF0040U, 0xFFFFFDBFU, 0x010003FFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007FFFFU, 0xFFFDFFF4U, 0x000FFFFFU, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x0000007EU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0xFFFF03FFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFF03FFU, 0x00003FFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x03FF000FU, 0xE0FFFFF8U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000107FFU, 0x00000000U, 0xFFF80000U, 0x00000000U, 0x00000000U, 0x0000000BU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x6FEF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00040007U, 0x00270000U, 0xFFFF00F0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0x03FF01FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0xFFFFCFF7U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x000007E0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x00003FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x3F801FFFU, 0x000043FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00003FFFU, 0xFFFFFFFFU, 0x03FF0FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x03FF0FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFF6F7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF080FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF1FFFU, 0xFFFF03FFU, 0xFFFF03FFU, 0x000007FFU, 0x00000020U, 0x00000000U, 0xFFFFFFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0003U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF07FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_alpha.h�����������������������������������������������0000644�0001750�0001750�00000115542�14557510505�016555� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[4]; short level2[4 << 7]; unsigned int level3[81 << 4]; } u_is_alpha = { { 4 }, { 5 * sizeof (int) / sizeof (short) + 0, 5 * sizeof (int) / sizeof (short) + 128, 5 * sizeof (int) / sizeof (short) + 256, 5 * sizeof (int) / sizeof (short) + 384 }, { 5 + 512 * sizeof (short) / sizeof (int) + 0, 5 + 512 * sizeof (short) / sizeof (int) + 16, 5 + 512 * sizeof (short) / sizeof (int) + 32, 5 + 512 * sizeof (short) / sizeof (int) + 48, 5 + 512 * sizeof (short) / sizeof (int) + 64, 5 + 512 * sizeof (short) / sizeof (int) + 80, 5 + 512 * sizeof (short) / sizeof (int) + 96, 5 + 512 * sizeof (short) / sizeof (int) + 112, 5 + 512 * sizeof (short) / sizeof (int) + 128, 5 + 512 * sizeof (short) / sizeof (int) + 144, 5 + 512 * sizeof (short) / sizeof (int) + 160, 5 + 512 * sizeof (short) / sizeof (int) + 176, 5 + 512 * sizeof (short) / sizeof (int) + 192, 5 + 512 * sizeof (short) / sizeof (int) + 208, 5 + 512 * sizeof (short) / sizeof (int) + 224, 5 + 512 * sizeof (short) / sizeof (int) + 240, 5 + 512 * sizeof (short) / sizeof (int) + 256, -1, 5 + 512 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 288, 5 + 512 * sizeof (short) / sizeof (int) + 304, 5 + 512 * sizeof (short) / sizeof (int) + 320, -1, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 352, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 368, 5 + 512 * sizeof (short) / sizeof (int) + 384, 5 + 512 * sizeof (short) / sizeof (int) + 400, 5 + 512 * sizeof (short) / sizeof (int) + 416, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 448, 5 + 512 * sizeof (short) / sizeof (int) + 464, 5 + 512 * sizeof (short) / sizeof (int) + 480, 5 + 512 * sizeof (short) / sizeof (int) + 496, 5 + 512 * sizeof (short) / sizeof (int) + 512, 5 + 512 * sizeof (short) / sizeof (int) + 528, 5 + 512 * sizeof (short) / sizeof (int) + 544, 5 + 512 * sizeof (short) / sizeof (int) + 560, 5 + 512 * sizeof (short) / sizeof (int) + 576, 5 + 512 * sizeof (short) / sizeof (int) + 592, 5 + 512 * sizeof (short) / sizeof (int) + 608, 5 + 512 * sizeof (short) / sizeof (int) + 624, 5 + 512 * sizeof (short) / sizeof (int) + 640, 5 + 512 * sizeof (short) / sizeof (int) + 656, 5 + 512 * sizeof (short) / sizeof (int) + 672, 5 + 512 * sizeof (short) / sizeof (int) + 688, 5 + 512 * sizeof (short) / sizeof (int) + 704, 5 + 512 * sizeof (short) / sizeof (int) + 720, 5 + 512 * sizeof (short) / sizeof (int) + 736, 5 + 512 * sizeof (short) / sizeof (int) + 752, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 768, 5 + 512 * sizeof (short) / sizeof (int) + 784, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 800, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 816, -1, -1, -1, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 848, -1, 5 + 512 * sizeof (short) / sizeof (int) + 864, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 880, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 896, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 912, 5 + 512 * sizeof (short) / sizeof (int) + 928, 5 + 512 * sizeof (short) / sizeof (int) + 944, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 960, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 976, 5 + 512 * sizeof (short) / sizeof (int) + 992, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 1008, 5 + 512 * sizeof (short) / sizeof (int) + 1024, 5 + 512 * sizeof (short) / sizeof (int) + 1040, 5 + 512 * sizeof (short) / sizeof (int) + 1056, 5 + 512 * sizeof (short) / sizeof (int) + 1072, 5 + 512 * sizeof (short) / sizeof (int) + 1088, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 1104, 5 + 512 * sizeof (short) / sizeof (int) + 1120, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 1136, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1152, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1168, 5 + 512 * sizeof (short) / sizeof (int) + 1184, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1200, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1216, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1232, -1, -1, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1248, -1, -1, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1264, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 336, 5 + 512 * sizeof (short) / sizeof (int) + 1280, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x07FFFFFEU, 0x00000000U, 0x04200400U, 0xFF7FFFFFU, 0xFF7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFC3U, 0x0000501FU, 0x00000000U, 0x00000000U, 0x00000020U, 0xBCDF0000U, 0xFFFFD740U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFC03U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0x027FFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFF0000U, 0x000787FFU, 0x00000000U, 0xFFFFFFFFU, 0x000007FFU, 0xFFFEC3FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x002FFFFFU, 0x9FFFC060U, 0xFFFD0000U, 0x0000FFFFU, 0xFFFFE000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0002003FU, 0xFFFFFFFFU, 0x043007FFU, 0x043FFFFFU, 0x00000110U, 0x01FFFFFFU, 0xFFFF07FFU, 0x00007EFFU, 0xFFFFFFFFU, 0x000003FFU, 0x00000000U, 0xFFFFFFF0U, 0x23FFFFFFU, 0xFF010000U, 0xFFFEFFC3U, 0xFFF99FE1U, 0x23C5FDFFU, 0xB0004000U, 0x1003FFC3U, 0xFFF987E0U, 0x036DFDFFU, 0x5E000000U, 0x001CFFC0U, 0xFFFBBFE0U, 0x23EDFDFFU, 0x00010000U, 0x0200FFC3U, 0xFFF99FE0U, 0x23EDFDFFU, 0xB0000000U, 0x0002FFC3U, 0xD63DC7E8U, 0x03FFC718U, 0x00010000U, 0x0000FFC0U, 0xFFFDDFE0U, 0x23FFFDFFU, 0x27000000U, 0x0000FFC3U, 0xFFFDDFE1U, 0x23EFFDFFU, 0x60000000U, 0x0006FFC3U, 0xFFFDDFF0U, 0x27FFFFFFU, 0x80704000U, 0xFC00FFC3U, 0xFC7FFFE0U, 0x2FFBFFFFU, 0x0000007FU, 0x0000FFC0U, 0xFFFFFFFEU, 0x07FF7FFFU, 0x03FF7FBFU, 0x00000000U, 0xFFFFF7D6U, 0x200DFFAFU, 0xF3FF005FU, 0x00000000U, 0x00000001U, 0x000003FFU, 0xFFFFFEFFU, 0x00001FFFU, 0x00001F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x800007FFU, 0x3C3F03FFU, 0xFFE1C062U, 0x03FF4003U, 0xFFFFFFFFU, 0xFFFF20BFU, 0xF7FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF9FFFU, 0x07FFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFC7FFU, 0x8003FFFFU, 0x0003FFFFU, 0x0003FFFFU, 0x0001DFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0x10800000U, 0x000003FFU, 0x03FF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFFFFFU, 0xFFFFFF9FU, 0xFFFF05FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0xFFFFFFC0U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0x03FF03FFU, 0x00000000U, 0x007FFFFFU, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x03FF03FFU, 0x00000080U, 0x00000000U, 0x00000000U, 0xFFFFFFE0U, 0x000FFFFFU, 0x03FF1FE0U, 0x00000000U, 0xFFFFFFF8U, 0xFFFFC001U, 0xFFFFFFFFU, 0x0000003FU, 0xFFFFFFFFU, 0x0000000FU, 0xFFFFE3FFU, 0x3FFFFFFFU, 0xFFFF01FFU, 0xE7FFFFFFU, 0x00000000U, 0x046FDE00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x5FDFFFFFU, 0x0FCF1FDCU, 0x1FDC1FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x80020000U, 0x1FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E2FFC84U, 0xF3FFBF50U, 0x000043E0U, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000C781FU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x000080FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000000E0U, 0x1F3E03FEU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xE07FFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xF7FFFFFFU, 0xFFFFFFE0U, 0xFFFEFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00001FFFU, 0x00000000U, 0xFFFF0000U, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0x00000FFFU, 0xFFFFFFFFU, 0x80007FFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFF800000U, 0xFFFFFFFCU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFF9FFU, 0xFFFFFFFFU, 0x03EB07FFU, 0xFFFC0000U, 0xFFFFF7BBU, 0x00000007U, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFCU, 0x000FFFFFU, 0x03FF0000U, 0x68FC0000U, 0xFFFFFFFFU, 0xFFFF003FU, 0x0000007FU, 0x1FFFFFFFU, 0xFFFFFFF0U, 0x0007FFFFU, 0x03FF8000U, 0x7FFFFFDFU, 0xFFFFFFFFU, 0x000001FFU, 0x03FF0FF7U, 0xC47FFFFFU, 0xFFFFFFFFU, 0x3E62FFFFU, 0x38000005U, 0x001C07FFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xF7FFFFFFU, 0xFFFF03FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF0007U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xA0F8007FU, 0x5F7FFDFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFF80000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000000FFU, 0x0FFF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFDF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0x03FF0000U, 0x07FFFFFEU, 0x07FFFFFEU, 0xFFFFFFC0U, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x00000000U, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFE000U, 0xFFFF07FFU, 0x003FFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0x003EFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF03FFU, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0xF7FF000FU, 0xFFB7F7FFU, 0x1BFBFFFBU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0xFFFFFFBFU, 0x07FDFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0x003FFFFFU, 0x007FFFFFU, 0x7FFFFFFFU, 0x00000000U, 0x00000000U, 0x0037FFFFU, 0x003FFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xC0FFFFFFU, 0x00000000U, 0x00000000U, 0xFEEF0001U, 0x003FFFFFU, 0x00000000U, 0x1FFFFFFFU, 0x1FFFFFFFU, 0x00000000U, 0xFFFFFEFFU, 0x0000001FU, 0xFFFFFFFFU, 0x003FFFFFU, 0x003FFFFFU, 0x0007FFFFU, 0x0003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0x03FF000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000303FFU, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFF0080U, 0x0000003FU, 0xFFFF0000U, 0x00000003U, 0xFFFF0000U, 0x0000001FU, 0x007FFFFFU, 0xFFFFFFF8U, 0x00FFFFFFU, 0x00000000U, 0x0026FFC0U, 0xFFFFFFF8U, 0x0000FFFFU, 0xFFFF0000U, 0x03FF01FFU, 0xFFFFFFF8U, 0xFFC0007FU, 0xFFFF0090U, 0x0047FFFFU, 0xFFFFFFF8U, 0x0007FFFFU, 0x17FF001EU, 0x00000000U, 0xFFFBFFFFU, 0x80000FFFU, 0x00000001U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF01FFU, 0x7FFFFFFFU, 0x03FF0000U, 0xFFF99FE0U, 0x23EDFDFFU, 0xE0010000U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x83FF0780U, 0x00000003U, 0xFFFFFFFFU, 0x0000FFFFU, 0x03FF00B0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00007FFFU, 0x0F000000U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x03FF0010U, 0x00000000U, 0xFFFFFFFFU, 0x010007FFU, 0x000003FFU, 0x00000000U, 0x07FFFFFFU, 0x03FF0000U, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x800003FFU, 0xFF6FF27FU, 0x8000FFFFU, 0x03FF0002U, 0x00000000U, 0x00000000U, 0xFFFFFCFFU, 0x0001FFFFU, 0x0000000AU, 0xFFFFF801U, 0x0407FFFFU, 0xF0010000U, 0xFFFFFFFFU, 0x200003FFU, 0xFFFF0000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0x00007FFFU, 0x03FF0001U, 0xFFFC0000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFB7FU, 0x0001FFFFU, 0x03FF0040U, 0xFFFFFDBFU, 0x010003FFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007FFFFU, 0xFFFDFFF4U, 0x000FFFFFU, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00007FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x0000007EU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0xFFFF03FFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFF03FFU, 0x00003FFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x03FF000FU, 0xE0FFFFF8U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000107FFU, 0x00000000U, 0xFFF80000U, 0x00000000U, 0x00000000U, 0x0000000BU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x6FEF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00040007U, 0x00270000U, 0xFFFF00F0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0x03FF01FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xF7FFFFFDU, 0xF7FFFFFFU, 0xFFDFFFFFU, 0xFFDFFFFFU, 0xFFFF7FFFU, 0xFFFF7FFFU, 0xFFFFFDFFU, 0xFFFFFDFFU, 0xFFFFCFF7U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x000007E0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x00003FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x3F801FFFU, 0x000043FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00003FFFU, 0xFFFFFFFFU, 0x03FF0FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x03FF0FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFF6F7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000001FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF080FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF1FFFU, 0xFFFF03FFU, 0xFFFF03FFU, 0x000007FFU, 0x00000020U, 0x00000000U, 0xFFFFFFC0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x03FF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0003U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF07FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_blank.h�����������������������������������������������0000644�0001750�0001750�00000007162�14557510505�016555� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[4 << 4]; } u_is_blank = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000200U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000077FU, 0x00000000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_cntrl.h�����������������������������������������������0000644�0001750�0001750�00000006122�14557510505�016603� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[2 << 4]; } u_is_cntrl = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x80000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000300U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_digit.h�����������������������������������������������0000644�0001750�0001750�00000005502�14557510505�016562� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_is_digit = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_graph.h�����������������������������������������������0000644�0001750�0001750�00000146213�14557510505�016570� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[17]; short level2[6 << 7]; unsigned int level3[90 << 4]; } u_is_graph = { { 17 }, { 18 * sizeof (int) / sizeof (short) + 0, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 * sizeof (int) / sizeof (short) + 512, 18 * sizeof (int) / sizeof (short) + 640, 18 * sizeof (int) / sizeof (short) + 640 }, { 18 + 768 * sizeof (short) / sizeof (int) + 0, 18 + 768 * sizeof (short) / sizeof (int) + 16, 18 + 768 * sizeof (short) / sizeof (int) + 32, 18 + 768 * sizeof (short) / sizeof (int) + 48, 18 + 768 * sizeof (short) / sizeof (int) + 64, 18 + 768 * sizeof (short) / sizeof (int) + 80, 18 + 768 * sizeof (short) / sizeof (int) + 96, 18 + 768 * sizeof (short) / sizeof (int) + 112, 18 + 768 * sizeof (short) / sizeof (int) + 128, 18 + 768 * sizeof (short) / sizeof (int) + 144, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 176, 18 + 768 * sizeof (short) / sizeof (int) + 192, 18 + 768 * sizeof (short) / sizeof (int) + 208, 18 + 768 * sizeof (short) / sizeof (int) + 224, 18 + 768 * sizeof (short) / sizeof (int) + 240, 18 + 768 * sizeof (short) / sizeof (int) + 256, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 272, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 288, 18 + 768 * sizeof (short) / sizeof (int) + 304, 18 + 768 * sizeof (short) / sizeof (int) + 320, 18 + 768 * sizeof (short) / sizeof (int) + 336, 18 + 768 * sizeof (short) / sizeof (int) + 352, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 368, 18 + 768 * sizeof (short) / sizeof (int) + 384, 18 + 768 * sizeof (short) / sizeof (int) + 400, 18 + 768 * sizeof (short) / sizeof (int) + 416, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 448, 18 + 768 * sizeof (short) / sizeof (int) + 464, 18 + 768 * sizeof (short) / sizeof (int) + 480, 18 + 768 * sizeof (short) / sizeof (int) + 496, 18 + 768 * sizeof (short) / sizeof (int) + 512, 18 + 768 * sizeof (short) / sizeof (int) + 528, 18 + 768 * sizeof (short) / sizeof (int) + 544, 18 + 768 * sizeof (short) / sizeof (int) + 560, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 592, 18 + 768 * sizeof (short) / sizeof (int) + 608, 18 + 768 * sizeof (short) / sizeof (int) + 624, 18 + 768 * sizeof (short) / sizeof (int) + 640, 18 + 768 * sizeof (short) / sizeof (int) + 656, 18 + 768 * sizeof (short) / sizeof (int) + 672, 18 + 768 * sizeof (short) / sizeof (int) + 688, 18 + 768 * sizeof (short) / sizeof (int) + 704, 18 + 768 * sizeof (short) / sizeof (int) + 720, 18 + 768 * sizeof (short) / sizeof (int) + 736, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 784, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 800, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 816, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 832, -1, 18 + 768 * sizeof (short) / sizeof (int) + 848, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 864, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 880, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 896, 18 + 768 * sizeof (short) / sizeof (int) + 912, 18 + 768 * sizeof (short) / sizeof (int) + 928, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 944, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 960, 18 + 768 * sizeof (short) / sizeof (int) + 976, 18 + 768 * sizeof (short) / sizeof (int) + 992, 18 + 768 * sizeof (short) / sizeof (int) + 1008, 18 + 768 * sizeof (short) / sizeof (int) + 1024, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1040, -1, 18 + 768 * sizeof (short) / sizeof (int) + 1056, 18 + 768 * sizeof (short) / sizeof (int) + 1072, 18 + 768 * sizeof (short) / sizeof (int) + 1088, 18 + 768 * sizeof (short) / sizeof (int) + 1104, 18 + 768 * sizeof (short) / sizeof (int) + 1120, 18 + 768 * sizeof (short) / sizeof (int) + 1136, -1, 18 + 768 * sizeof (short) / sizeof (int) + 1152, 18 + 768 * sizeof (short) / sizeof (int) + 1168, 18 + 768 * sizeof (short) / sizeof (int) + 1184, 18 + 768 * sizeof (short) / sizeof (int) + 1200, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1216, 18 + 768 * sizeof (short) / sizeof (int) + 1232, 18 + 768 * sizeof (short) / sizeof (int) + 1248, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1264, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1280, 18 + 768 * sizeof (short) / sizeof (int) + 1296, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1312, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1328, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1344, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1360, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1376, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 1408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1424 }, { 0x00000000U, 0xFFFFFFFEU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFCFFFFFFU, 0xFFFFD7F0U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0xFE7FFFFFU, 0xFFFFFFFFU, 0xFFFEE7FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x001F87FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFBFFFU, 0xFFFFFFFFU, 0xFFFFE7FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFFFFFFFU, 0xE7FFFFFFU, 0xFFFFFFFFU, 0x7FFF3FFFU, 0x4FFFFFFFU, 0xFFFF07FFU, 0xFF037FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF99FEFU, 0xF3C5FDFFU, 0xB080799FU, 0x7FFFFFCFU, 0xFFF987EEU, 0xD36DFDFFU, 0x5E023987U, 0x007FFFC0U, 0xFFFBBFEEU, 0xF3EDFDFFU, 0x00013BBFU, 0xFE03FFCFU, 0xFFF99FEEU, 0xF3EDFDFFU, 0xB0E0399FU, 0x00FFFFCFU, 0xD63DC7ECU, 0xC3FFC718U, 0x00813DC7U, 0x07FFFFC0U, 0xFFFDDFFFU, 0xF3FFFDFFU, 0x27603DDFU, 0xFF80FFCFU, 0xFFFDDFFFU, 0xF3EFFDFFU, 0x60603DDFU, 0x000EFFCFU, 0xFFFDDFFFU, 0xFFFFFFFFU, 0xFFF0FDDFU, 0xFFFFFFCFU, 0xFC7FFFEEU, 0x2FFBFFFFU, 0xFF5F847FU, 0x001CFFC0U, 0xFFFFFFFEU, 0x87FFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0xFFFFF7D6U, 0x3FFFFFAFU, 0xF3FF7F5FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFEFFU, 0xFFFE1FFFU, 0xFEFFFFFFU, 0xDFFFFFFFU, 0x07FFDFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0xE7FFFFFFU, 0x1FFFFFFFU, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFFFFFU, 0x803FFFFFU, 0x007FFFFFU, 0x000FFFFFU, 0x000DDFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x03FF03FFU, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFFFFFU, 0xFFFFFFFFU, 0xFFFF07FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x0FFF0FFFU, 0xFFFFFFF1U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xC7FF03FFU, 0xFFFFFFFFU, 0xCFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x9FFFFFFFU, 0x03FF03FFU, 0xFFFF3FFFU, 0x00007FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF00FFFFFU, 0xFFFFFFFFU, 0xF8FFFFFFU, 0xFFFFE3FFU, 0xFFFFFFFFU, 0xFFFF01FFU, 0xE7FFFFFFU, 0xFFFF00FFU, 0x07FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xEFCFFFDFU, 0x7FDCFFFFU, 0xFFFFF880U, 0xFFFFFCFFU, 0x7FFFFFFFU, 0xFFF3FFDFU, 0x1FFF7FFFU, 0xFFFFFFFFU, 0xFFFF0001U, 0x0001FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x000007FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFCFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFE0FFFFFU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x800180FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x00000000U, 0xFBFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFF0000U, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFE7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFE0U, 0xFFFEFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF7FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF800FU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0xFFFFFFFFU, 0xFFFF007FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03EB07FFU, 0xFFFC0000U, 0xFFFFFFFFU, 0x03FF1FFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFC03FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x800FFFFFU, 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC3FFBFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0xF3FF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF8000007U, 0x007FFFFFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xE0F8007FU, 0x5F7FFFFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF80007U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000080FFU, 0xFFFF0000U, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFF7FFFFU, 0xFFDF0F7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x9FFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x3E007F7FU, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0xFFFFFF87U, 0xFF8FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF7FFFU, 0x00000001U, 0xFFFF0000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFFE00FU, 0xFFFF07FFU, 0x07FFFFFFU, 0xBFFFFFFFU, 0xFFFFFFFFU, 0x003FFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF03FFU, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0xF7FF800FU, 0xFFB7F7FFU, 0x1BFBFFFBU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0xFFFFFFBFU, 0x07FDFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x0000FF80U, 0x00000000U, 0xF837FFFFU, 0x8FFFFFFFU, 0x83FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF0FFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0xFEEFF06FU, 0x873FFFFFU, 0x01FF01FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0x007FF87FU, 0xFFFFFFFFU, 0xFE3FFFFFU, 0xFF3FFFFFU, 0xFF07FFFFU, 0x1E03FFFFU, 0x0000FE00U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0xFC07FFFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x00033BFFU, 0x00000000U, 0xE0000000U, 0xFFFFFFFFU, 0xFFFF00FFU, 0x03FFFFFFU, 0xFFFF0000U, 0x000003FFU, 0xFFFF0000U, 0x00000FFFU, 0x007FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFC3FFFU, 0x803FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF2007U, 0x03FF01FFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFF00FFU, 0x007FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFEU, 0xFFFBFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF03FFU, 0xFFFFFFFFU, 0x03FF07FFU, 0xFFF99FEFU, 0xFBEDFDFFU, 0xE081399FU, 0x001F1FCFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xEFFFFFFFU, 0x00000003U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFF3FFFFFU, 0x3FFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF001FU, 0x00001FFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x000003FFU, 0x00000000U, 0xE7FFFFFFU, 0xFFFF0FFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x8007FFFFU, 0xFF6FF27FU, 0xF9BFFFFFU, 0x03FF007FU, 0x00000000U, 0x00000000U, 0xFFFFFCFFU, 0xFCFFFFFFU, 0x0000001FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0007U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0xFF7FFFFFU, 0xFFFF003FU, 0xFFFF1FFFU, 0xFFFCFFFFU, 0x007FFEFFU, 0x00000000U, 0x00000000U, 0xFFFFFB7FU, 0xB47FFFFFU, 0x03FF00FFU, 0xFFFFFDBFU, 0x01FB7FFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01FFFFFFU, 0xFFFDFFFFU, 0xC7FFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00010000U, 0xFFFFFFFFU, 0x8003FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001F7FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0xFFFFC3FFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFF03FFU, 0x003F3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFBFF003FU, 0xE0FFFFFBU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF87FFU, 0xFFFFFFFFU, 0xFFFF80FFU, 0x00000000U, 0x00000000U, 0x0003001FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x6FEF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00040007U, 0x00270000U, 0xFFFF00F0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0xF3FF01FFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFF007FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFE7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000007FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x000FFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFCFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF8000FFFU, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x000007E0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0xFFFF07DBU, 0xFFFFFFFFU, 0x00003FFFU, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x3FFF1FFFU, 0x0000C3FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00007FFFU, 0xFFFFFFFFU, 0x83FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFF6F7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFF9FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC3FF0FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFEU, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFE7FFFU, 0xFFFEFFFEU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00003FFFU, 0x00000000U, 0xFFFFFFC0U, 0xFFFF0007U, 0x0FFFFFFFU, 0x000301FFU, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF0FFFFFFU, 0x1FFF1FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00010FFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x00033FFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0x1FFF3FFFU, 0xFFFF01FFU, 0xBFFFFFFFU, 0x0FFFC03FU, 0x01FF01FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF7FFFFU, 0xFFFFFFFFU, 0x000007FFU, 0x03FF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0003U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF07FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_lower.h�����������������������������������������������0000644�0001750�0001750�00000021414�14557510505�016612� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[18 << 4]; } u_is_lower = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00200000U, 0x80000000U, 0xFF7FFFFFU, 0xAAAAAAAAU, 0x54AAAAAAU, 0xAAAAA955U, 0xD4AAAAAAU, 0x46241129U, 0xA251212AU, 0xB5555B60U, 0xAA2CAAAAU, 0xAAAAAAAAU, 0x900AAAA8U, 0x1ADFAA85U, 0x20269F6BU, 0x60041F8DU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000020U, 0x388A0000U, 0x00000000U, 0xFFFEF000U, 0xAAE37FFFU, 0x092FAAAAU, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xAAAAAAAAU, 0xAAAAA802U, 0xAAAAAAAAU, 0xAAAAD554U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0000AAAAU, 0x00000000U, 0xFFFFFFFEU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xE7FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3F000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x22000000U, 0x00004000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x082AAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x003F00FFU, 0x00FF00FFU, 0x00AA003FU, 0x3FFF00FFU, 0x00FF00FFU, 0x400B00FFU, 0x00030008U, 0x00080023U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0xFFFF0000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x00481562U, 0xAAAAAAAAU, 0xAAAAAAAAU, 0xAAAAAAAAU, 0x0008500AU, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAAAAAAAU, 0x00002AAAU, 0x0AAAAAAAU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xAAA8AAA8U, 0xAAAAAAAAU, 0x9400AAAAU, 0xAA9A10AAU, 0xAAA002AAU, 0x0282050AU, 0x00400000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00080000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFF00U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF000000U, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800000U, 0x1BFBFFFBU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFCU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_print.h�����������������������������������������������0000644�0001750�0001750�00000146213�14557510505�016623� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[17]; short level2[6 << 7]; unsigned int level3[90 << 4]; } u_is_print = { { 17 }, { 18 * sizeof (int) / sizeof (short) + 0, 18 * sizeof (int) / sizeof (short) + 128, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 * sizeof (int) / sizeof (short) + 512, 18 * sizeof (int) / sizeof (short) + 640, 18 * sizeof (int) / sizeof (short) + 640 }, { 18 + 768 * sizeof (short) / sizeof (int) + 0, 18 + 768 * sizeof (short) / sizeof (int) + 16, 18 + 768 * sizeof (short) / sizeof (int) + 32, 18 + 768 * sizeof (short) / sizeof (int) + 48, 18 + 768 * sizeof (short) / sizeof (int) + 64, 18 + 768 * sizeof (short) / sizeof (int) + 80, 18 + 768 * sizeof (short) / sizeof (int) + 96, 18 + 768 * sizeof (short) / sizeof (int) + 112, 18 + 768 * sizeof (short) / sizeof (int) + 128, 18 + 768 * sizeof (short) / sizeof (int) + 144, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 176, 18 + 768 * sizeof (short) / sizeof (int) + 192, 18 + 768 * sizeof (short) / sizeof (int) + 208, 18 + 768 * sizeof (short) / sizeof (int) + 224, 18 + 768 * sizeof (short) / sizeof (int) + 240, 18 + 768 * sizeof (short) / sizeof (int) + 256, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 272, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 288, 18 + 768 * sizeof (short) / sizeof (int) + 304, 18 + 768 * sizeof (short) / sizeof (int) + 320, 18 + 768 * sizeof (short) / sizeof (int) + 336, 18 + 768 * sizeof (short) / sizeof (int) + 352, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 368, 18 + 768 * sizeof (short) / sizeof (int) + 384, 18 + 768 * sizeof (short) / sizeof (int) + 400, 18 + 768 * sizeof (short) / sizeof (int) + 416, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 432, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 448, 18 + 768 * sizeof (short) / sizeof (int) + 464, 18 + 768 * sizeof (short) / sizeof (int) + 480, 18 + 768 * sizeof (short) / sizeof (int) + 496, 18 + 768 * sizeof (short) / sizeof (int) + 512, 18 + 768 * sizeof (short) / sizeof (int) + 528, 18 + 768 * sizeof (short) / sizeof (int) + 544, 18 + 768 * sizeof (short) / sizeof (int) + 560, 18 + 768 * sizeof (short) / sizeof (int) + 576, 18 + 768 * sizeof (short) / sizeof (int) + 592, 18 + 768 * sizeof (short) / sizeof (int) + 608, 18 + 768 * sizeof (short) / sizeof (int) + 624, 18 + 768 * sizeof (short) / sizeof (int) + 640, 18 + 768 * sizeof (short) / sizeof (int) + 656, 18 + 768 * sizeof (short) / sizeof (int) + 672, 18 + 768 * sizeof (short) / sizeof (int) + 688, 18 + 768 * sizeof (short) / sizeof (int) + 704, 18 + 768 * sizeof (short) / sizeof (int) + 720, 18 + 768 * sizeof (short) / sizeof (int) + 736, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 752, 18 + 768 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 784, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 800, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 816, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 832, -1, 18 + 768 * sizeof (short) / sizeof (int) + 848, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 864, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 880, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 896, 18 + 768 * sizeof (short) / sizeof (int) + 912, 18 + 768 * sizeof (short) / sizeof (int) + 928, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 944, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 960, 18 + 768 * sizeof (short) / sizeof (int) + 976, 18 + 768 * sizeof (short) / sizeof (int) + 992, 18 + 768 * sizeof (short) / sizeof (int) + 1008, 18 + 768 * sizeof (short) / sizeof (int) + 1024, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1040, -1, 18 + 768 * sizeof (short) / sizeof (int) + 1056, 18 + 768 * sizeof (short) / sizeof (int) + 1072, 18 + 768 * sizeof (short) / sizeof (int) + 1088, 18 + 768 * sizeof (short) / sizeof (int) + 1104, 18 + 768 * sizeof (short) / sizeof (int) + 1120, 18 + 768 * sizeof (short) / sizeof (int) + 1136, -1, 18 + 768 * sizeof (short) / sizeof (int) + 1152, 18 + 768 * sizeof (short) / sizeof (int) + 1168, 18 + 768 * sizeof (short) / sizeof (int) + 1184, 18 + 768 * sizeof (short) / sizeof (int) + 1200, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1216, 18 + 768 * sizeof (short) / sizeof (int) + 1232, 18 + 768 * sizeof (short) / sizeof (int) + 1248, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1264, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1280, 18 + 768 * sizeof (short) / sizeof (int) + 1296, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1312, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1328, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1344, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1360, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1376, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 1408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 160, 18 + 768 * sizeof (short) / sizeof (int) + 1424 }, { 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFCFFFFFFU, 0xFFFFD7F0U, 0xFFFFFFFBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFEFFFFU, 0xFE7FFFFFU, 0xFFFFFFFFU, 0xFFFEE7FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x001F87FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFBFFFU, 0xFFFFFFFFU, 0xFFFFE7FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0003FFFFU, 0xFFFFFFFFU, 0xE7FFFFFFU, 0xFFFFFFFFU, 0x7FFF3FFFU, 0x4FFFFFFFU, 0xFFFF07FFU, 0xFF037FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF99FEFU, 0xF3C5FDFFU, 0xB080799FU, 0x7FFFFFCFU, 0xFFF987EEU, 0xD36DFDFFU, 0x5E023987U, 0x007FFFC0U, 0xFFFBBFEEU, 0xF3EDFDFFU, 0x00013BBFU, 0xFE03FFCFU, 0xFFF99FEEU, 0xF3EDFDFFU, 0xB0E0399FU, 0x00FFFFCFU, 0xD63DC7ECU, 0xC3FFC718U, 0x00813DC7U, 0x07FFFFC0U, 0xFFFDDFFFU, 0xF3FFFDFFU, 0x27603DDFU, 0xFF80FFCFU, 0xFFFDDFFFU, 0xF3EFFDFFU, 0x60603DDFU, 0x000EFFCFU, 0xFFFDDFFFU, 0xFFFFFFFFU, 0xFFF0FDDFU, 0xFFFFFFCFU, 0xFC7FFFEEU, 0x2FFBFFFFU, 0xFF5F847FU, 0x001CFFC0U, 0xFFFFFFFEU, 0x87FFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0xFFFFF7D6U, 0x3FFFFFAFU, 0xF3FF7F5FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFEFFU, 0xFFFE1FFFU, 0xFEFFFFFFU, 0xDFFFFFFFU, 0x07FFDFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3D7F3DFFU, 0xFFFFFFFFU, 0xFFFF3DFFU, 0x7F3DFFFFU, 0xFF7FFF3DU, 0xFFFFFFFFU, 0xFF3DFFFFU, 0xFFFFFFFFU, 0xE7FFFFFFU, 0x1FFFFFFFU, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFFFFFU, 0x803FFFFFU, 0x007FFFFFU, 0x000FFFFFU, 0x000DDFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x03FF03FFU, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x01FFFFFFU, 0xFFFFFFFFU, 0xFFFF07FFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x7FFFFFFFU, 0x0FFF0FFFU, 0xFFFFFFF1U, 0x001F3FFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xC7FF03FFU, 0xFFFFFFFFU, 0xCFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x9FFFFFFFU, 0x03FF03FFU, 0xFFFF3FFFU, 0x00007FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF00FFFFFU, 0xFFFFFFFFU, 0xF8FFFFFFU, 0xFFFFE3FFU, 0xFFFFFFFFU, 0xFFFF01FFU, 0xE7FFFFFFU, 0xFFFF00FFU, 0x07FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3F3FFFFFU, 0xFFFFFFFFU, 0xAAFF3F3FU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xEFCFFFDFU, 0x7FDCFFFFU, 0xFFFFFFFFU, 0xFFFFFCFFU, 0xFFFFFFFFU, 0xFFF3FFDFU, 0x1FFF7FFFU, 0xFFFFFFFFU, 0xFFFF0001U, 0x0001FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x000007FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFCFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFE0FFFFFU, 0xFFFFFFFFU, 0xFFFF20BFU, 0xFFFFFFFFU, 0x800180FFU, 0x007FFFFFU, 0x7F7F7F7FU, 0x7F7F7F7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x00000000U, 0xFBFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFE7FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFE0U, 0xFFFEFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF7FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF800FU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF1FFFU, 0xFFFFFFFFU, 0xFFFF007FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03EB07FFU, 0xFFFC0000U, 0xFFFFFFFFU, 0x03FF1FFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFC03FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x800FFFFFU, 0x1FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC3FFBFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0xF3FF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF8000007U, 0x007FFFFFU, 0x007E7E7EU, 0xFFFF7F7FU, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF000FU, 0xFFFFF87FU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0xE0F8007FU, 0x5F7FFFFFU, 0xFFFFFFDBU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF80007U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x000080FFU, 0xFFFF0000U, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFF7FFFFU, 0xFFDF0F7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x9FFFFFFFU, 0xFFFFFFFEU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x1CFCFCFCU, 0x3E007F7FU, 0xFFFFEFFFU, 0xB7FFFF7FU, 0x3FFF3FFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0xFFFFFF87U, 0xFF8FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF7FFFU, 0x00000001U, 0xFFFF0000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0xFFFFFFFFU, 0x0001FFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFFE00FU, 0xFFFF07FFU, 0x07FFFFFFU, 0xBFFFFFFFU, 0xFFFFFFFFU, 0x003FFF0FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF03FFU, 0xFF0FFFFFU, 0x0FFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0xF7FF800FU, 0xFFB7F7FFU, 0x1BFBFFFBU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x003FFFFFU, 0x000000FFU, 0xFFFFFFBFU, 0x07FDFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFD3FU, 0x91BFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0x0000FF80U, 0x00000000U, 0xF837FFFFU, 0x8FFFFFFFU, 0x83FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xF0FFFFFFU, 0xFFFCFFFFU, 0xFFFFFFFFU, 0xFEEFF06FU, 0x873FFFFFU, 0x01FF01FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0x007FF87FU, 0xFFFFFFFFU, 0xFE3FFFFFU, 0xFF3FFFFFU, 0xFF07FFFFU, 0x1E03FFFFU, 0x0000FE00U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000001FFU, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0xFC07FFFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0xFFFFFFFFU, 0x00033BFFU, 0x00000000U, 0xE0000000U, 0xFFFFFFFFU, 0xFFFF00FFU, 0x03FFFFFFU, 0xFFFF0000U, 0x000003FFU, 0xFFFF0000U, 0x00000FFFU, 0x007FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFC3FFFU, 0x803FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF2007U, 0x03FF01FFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFF00FFU, 0x007FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001FFFFEU, 0xFFFBFFFFU, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0xBFFFBD7FU, 0xFFFF03FFU, 0xFFFFFFFFU, 0x03FF07FFU, 0xFFF99FEFU, 0xFBEDFDFFU, 0xE081399FU, 0x001F1FCFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xEFFFFFFFU, 0x00000003U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFF3FFFFFU, 0x3FFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FF001FU, 0x00001FFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x000003FFU, 0x00000000U, 0xE7FFFFFFU, 0xFFFF0FFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x8007FFFFU, 0xFF6FF27FU, 0xF9BFFFFFU, 0x03FF007FU, 0x00000000U, 0x00000000U, 0xFFFFFCFFU, 0xFCFFFFFFU, 0x0000001FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0007U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFDFFU, 0xFF7FFFFFU, 0xFFFF003FU, 0xFFFF1FFFU, 0xFFFCFFFFU, 0x007FFEFFU, 0x00000000U, 0x00000000U, 0xFFFFFB7FU, 0xB47FFFFFU, 0x03FF00FFU, 0xFFFFFDBFU, 0x01FB7FFFU, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01FFFFFFU, 0xFFFDFFFFU, 0xC7FFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00010000U, 0xFFFFFFFFU, 0x8003FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x001F7FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0007FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x01FFFFFFU, 0x7FFFFFFFU, 0xFFFFC3FFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFF03FFU, 0x003F3FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFBFF003FU, 0xE0FFFFFBU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF87FFU, 0xFFFFFFFFU, 0xFFFF80FFU, 0x00000000U, 0x00000000U, 0x0003001FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x6FEF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00040007U, 0x00270000U, 0xFFFF00F0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x1FFF07FFU, 0xF3FF01FFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFF007FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFE7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000007FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x000FFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFDFFFFFU, 0xFFFFFFFFU, 0xDFFFFFFFU, 0xEBFFDE64U, 0xFFFFFFEFU, 0xFFFFFFFFU, 0xDFDFE7BFU, 0x7BFFFFFFU, 0xFFFDFC5FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFF3FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFCFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF8000FFFU, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x000007E0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0xFFFF07DBU, 0xFFFFFFFFU, 0x00003FFFU, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x3FFF1FFFU, 0x0000C3FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00007FFFU, 0xFFFFFFFFU, 0x83FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x03FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFF6F7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFF9FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xC3FF0FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFEU, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFEFU, 0x0AF7FE96U, 0xAA96EA84U, 0x5EF7F796U, 0x0FFFFBFFU, 0x0FFFFBEEU, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFE7FFFU, 0xFFFEFFFEU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00003FFFU, 0x00000000U, 0xFFFFFFC0U, 0xFFFF0007U, 0x0FFFFFFFU, 0x000301FFU, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF0FFFFFFU, 0x1FFF1FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00010FFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x00033FFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0x1FFF3FFFU, 0xFFFF01FFU, 0xBFFFFFFFU, 0x0FFFC03FU, 0x01FF01FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF7FFFFU, 0xFFFFFFFFU, 0x000007FFU, 0x03FF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0003U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF0001U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF07FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_punct.h�����������������������������������������������0000644�0001750�0001750�00000101533�14557510505�016614� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[17]; short level2[4 << 7]; unsigned int level3[72 << 4]; } u_is_punct = { { 17 }, { 18 * sizeof (int) / sizeof (short) + 0, 18 * sizeof (int) / sizeof (short) + 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 * sizeof (int) / sizeof (short) + 256, 18 * sizeof (int) / sizeof (short) + 384, 18 * sizeof (int) / sizeof (short) + 384 }, { 18 + 512 * sizeof (short) / sizeof (int) + 0, 18 + 512 * sizeof (short) / sizeof (int) + 16, 18 + 512 * sizeof (short) / sizeof (int) + 32, 18 + 512 * sizeof (short) / sizeof (int) + 48, 18 + 512 * sizeof (short) / sizeof (int) + 64, 18 + 512 * sizeof (short) / sizeof (int) + 80, 18 + 512 * sizeof (short) / sizeof (int) + 96, 18 + 512 * sizeof (short) / sizeof (int) + 112, 18 + 512 * sizeof (short) / sizeof (int) + 128, 18 + 512 * sizeof (short) / sizeof (int) + 144, 18 + 512 * sizeof (short) / sizeof (int) + 160, 18 + 512 * sizeof (short) / sizeof (int) + 176, 18 + 512 * sizeof (short) / sizeof (int) + 192, 18 + 512 * sizeof (short) / sizeof (int) + 208, 18 + 512 * sizeof (short) / sizeof (int) + 224, 18 + 512 * sizeof (short) / sizeof (int) + 240, 18 + 512 * sizeof (short) / sizeof (int) + 256, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 288, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 304, 18 + 512 * sizeof (short) / sizeof (int) + 320, 18 + 512 * sizeof (short) / sizeof (int) + 336, 18 + 512 * sizeof (short) / sizeof (int) + 352, 18 + 512 * sizeof (short) / sizeof (int) + 368, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 384, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 400, 18 + 512 * sizeof (short) / sizeof (int) + 416, 18 + 512 * sizeof (short) / sizeof (int) + 432, 18 + 512 * sizeof (short) / sizeof (int) + 448, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 464, 18 + 512 * sizeof (short) / sizeof (int) + 480, 18 + 512 * sizeof (short) / sizeof (int) + 496, 18 + 512 * sizeof (short) / sizeof (int) + 512, 18 + 512 * sizeof (short) / sizeof (int) + 528, 18 + 512 * sizeof (short) / sizeof (int) + 544, 18 + 512 * sizeof (short) / sizeof (int) + 560, -1, 18 + 512 * sizeof (short) / sizeof (int) + 576, 18 + 512 * sizeof (short) / sizeof (int) + 592, 18 + 512 * sizeof (short) / sizeof (int) + 608, 18 + 512 * sizeof (short) / sizeof (int) + 624, 18 + 512 * sizeof (short) / sizeof (int) + 640, 18 + 512 * sizeof (short) / sizeof (int) + 656, 18 + 512 * sizeof (short) / sizeof (int) + 672, 18 + 512 * sizeof (short) / sizeof (int) + 688, 18 + 512 * sizeof (short) / sizeof (int) + 704, 18 + 512 * sizeof (short) / sizeof (int) + 720, 18 + 512 * sizeof (short) / sizeof (int) + 736, 18 + 512 * sizeof (short) / sizeof (int) + 752, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 768, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 784, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 800, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 816, -1, 18 + 512 * sizeof (short) / sizeof (int) + 832, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 848, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 864, 18 + 512 * sizeof (short) / sizeof (int) + 880, 18 + 512 * sizeof (short) / sizeof (int) + 896, -1, 18 + 512 * sizeof (short) / sizeof (int) + 912, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 928, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 944, 18 + 512 * sizeof (short) / sizeof (int) + 960, 18 + 512 * sizeof (short) / sizeof (int) + 976, -1, 18 + 512 * sizeof (short) / sizeof (int) + 992, -1, 18 + 512 * sizeof (short) / sizeof (int) + 1008, 18 + 512 * sizeof (short) / sizeof (int) + 1024, 18 + 512 * sizeof (short) / sizeof (int) + 1040, 18 + 512 * sizeof (short) / sizeof (int) + 1056, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 1072, 18 + 512 * sizeof (short) / sizeof (int) + 1088, 18 + 512 * sizeof (short) / sizeof (int) + 1104, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 1120, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 272, 18 + 512 * sizeof (short) / sizeof (int) + 1136 }, { 0x00000000U, 0xFC00FFFEU, 0xF8000001U, 0x78000001U, 0x00000000U, 0xFBDFFBFFU, 0x00800000U, 0x00800000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC003CU, 0xFFFFAFE0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFDFU, 0x4020FFFFU, 0x000000B0U, 0x00000000U, 0x00000000U, 0x00400000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x000003FCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00000000U, 0xFFFEE600U, 0xFFFFFFFFU, 0x000000FFU, 0x00180000U, 0xFFFFFFFFU, 0x00000000U, 0xFFFFF800U, 0x00013C00U, 0x00000000U, 0x00000000U, 0xFFD00000U, 0x60003F9FU, 0x0002BFFFU, 0xFFFF0000U, 0x000007FFU, 0x00000000U, 0x00000000U, 0x0001FFC0U, 0x00000000U, 0xE3CFF800U, 0xFBC00000U, 0x7FFF3EEFU, 0x4E000000U, 0x00000000U, 0xFF030100U, 0x00000000U, 0xFFFFFC00U, 0xFFFFFFFFU, 0x0000000FU, 0xDC000000U, 0x00FEFFFFU, 0x0001003CU, 0x0000000EU, 0xD0000000U, 0x0080399FU, 0x6FFC000CU, 0x0000000EU, 0xD0000000U, 0x00023987U, 0x00630000U, 0x0000000EU, 0xD0000000U, 0x00003BBFU, 0xFC03000CU, 0x0000000EU, 0xD0000000U, 0x00E0399FU, 0x00FD000CU, 0x00000004U, 0xC0000000U, 0x00803DC7U, 0x07FF0000U, 0x0000001FU, 0xD0000000U, 0x00603DDFU, 0xFF80000CU, 0x0000001EU, 0xD0000000U, 0x00603DDFU, 0x0008000CU, 0x0000000FU, 0xD8000000U, 0x7F80BDDFU, 0x03FF000CU, 0x0000000EU, 0x00000000U, 0xFF5F8400U, 0x001C0000U, 0x00000000U, 0x80008000U, 0x0C008040U, 0x00000000U, 0x00000000U, 0x1FF20000U, 0x00007F00U, 0x00000000U, 0xFFFFFFFEU, 0xFFFFFC00U, 0x00000000U, 0xFFFE0000U, 0xFEFFE0FFU, 0xDFFFFFFFU, 0x07FFDFFFU, 0x00000000U, 0x00000000U, 0x7FFFF800U, 0xC3C0FC00U, 0x001E3F9DU, 0xFC00BFFCU, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xE0000000U, 0x1FFFFFFFU, 0x03FF0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00006000U, 0x18000000U, 0x00000000U, 0x00000000U, 0x00003800U, 0x003C0000U, 0x007C0000U, 0x000C0000U, 0x000C0000U, 0x00000000U, 0xFFF00000U, 0x2F7FFFFFU, 0x03FF0000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000060U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FFF0FFFU, 0x00000031U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC4000000U, 0xFFFFFFFFU, 0xCF800000U, 0x00000000U, 0x7FE00000U, 0x9FFFFFFFU, 0x00000000U, 0xFFFF3F7FU, 0x00007FFFU, 0x00000000U, 0x0000001FU, 0xFFF00000U, 0xFC00001FU, 0x7FFFFFFFU, 0x00000007U, 0x00003FFEU, 0x00000000U, 0xF00FFFC0U, 0x00000000U, 0xF8FFFFF0U, 0x00000000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0xFFFF00FFU, 0x039021FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xA0000000U, 0xE000E003U, 0x6000E000U, 0xFFFFF880U, 0xFFFFFCFFU, 0x7FFFFFFFU, 0x7FF1FFDFU, 0x00007FFFU, 0xFFFFFFFFU, 0xFFFF0001U, 0x0001FFFFU, 0xC1D0037BU, 0x0C0040AFU, 0xFFFFBC1FU, 0x00000000U, 0xFFFF0E00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000007FU, 0x000007FFU, 0xFFFFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFC00U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFCFFFFFU, 0xFFBFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFE0387E0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF7FFFU, 0x3FFFFFFFU, 0x00000000U, 0xFBFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFF0000U, 0xFFFFFF1EU, 0xE0C1FC01U, 0x00000000U, 0x00000000U, 0x1E000000U, 0x00000001U, 0x00000000U, 0x08000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x00000000U, 0xFFFFFFFFU, 0x0000800FU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x0000007FU, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000E000U, 0x00000000U, 0x00000000U, 0x7FFF8000U, 0xC0000000U, 0x00000000U, 0x00000000U, 0x00FF0000U, 0x007FFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000600U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000844U, 0x03FF1FF8U, 0x00000000U, 0x00F00000U, 0x00000003U, 0xFFF00000U, 0x0000C03FU, 0x9703FFFFU, 0x00000000U, 0x0000FFC0U, 0x800FFF80U, 0x00000000U, 0x0000000FU, 0xFFF80000U, 0xC0003FFFU, 0x00000020U, 0x00000000U, 0x007FFE00U, 0xF0003008U, 0x3B800000U, 0x00000000U, 0xC19D0000U, 0xC0000002U, 0x0063F800U, 0x00000000U, 0x00000000U, 0x08000000U, 0x00000C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00003FF8U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x40000000U, 0x00000200U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFC0000U, 0x00000007U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC0000000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0xF0000000U, 0x03FFFFFFU, 0xFFFFFFFFU, 0xFFF7FFFFU, 0x00000F7FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x80000000U, 0xFC00FFFEU, 0xF8000001U, 0xF8000001U, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x3E007F7FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFF87U, 0xFF8FFFFFU, 0x00000000U, 0xFFE00000U, 0x1FFF7FFFU, 0x00000001U, 0xFFFF0000U, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FFFFFFFU, 0x00000000U, 0x0000000FU, 0x00000000U, 0x07C00000U, 0x80000000U, 0x00000000U, 0x00010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF800000U, 0xFF800000U, 0x00000000U, 0x0000FF80U, 0x00000000U, 0xF8000000U, 0x8FC00000U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x30000000U, 0xFFFCFFFFU, 0xFFFFFFFFU, 0x0000F06EU, 0x87000000U, 0x01FF01FFU, 0xE0000000U, 0xE0000000U, 0x00000000U, 0x00000100U, 0x007FF860U, 0x00000000U, 0xFE000000U, 0xFF000000U, 0xFF000000U, 0x1E000000U, 0x0000FE00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFC000000U, 0x00000000U, 0x000000F0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x7FFFFFFFU, 0x00000000U, 0x00003800U, 0x00000000U, 0xE0000000U, 0xE0000000U, 0x0000007FU, 0x03FFFFC0U, 0x00000000U, 0x000003FCU, 0x00000000U, 0x00000FE0U, 0x00000000U, 0x00000007U, 0xFF000000U, 0xFFFC3FFFU, 0x8019003FU, 0x00000007U, 0xFFFF0000U, 0x00002007U, 0x00000000U, 0x00000007U, 0x001FFF80U, 0x0000006FU, 0x00380000U, 0x00000007U, 0xFFF80000U, 0xE800FFE1U, 0x001FFFFEU, 0x00000000U, 0x7FFFF000U, 0x00000002U, 0x00000000U, 0x00000000U, 0x00000200U, 0x80000000U, 0x000007FFU, 0x0000000FU, 0xD8000000U, 0x0080399FU, 0x001F1FCCU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFE00000U, 0x6C00F87FU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0000004FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF3F8000U, 0x30FFFFFFU, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x0000000FU, 0x00001FFFU, 0x00000000U, 0x02FFF800U, 0x00000000U, 0x00000000U, 0xE0000000U, 0xFC000FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0FFFF000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0007FC00U, 0x00000000U, 0x79BF0000U, 0x0000007DU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFCFE0000U, 0x00000015U, 0x000007FEU, 0xFBF80000U, 0x0FFE00FFU, 0x00000000U, 0xDFFFFC00U, 0x00000007U, 0x00000000U, 0x00000000U, 0x000003FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFF7F8000U, 0xFC00003EU, 0x00031FFFU, 0xFFFC0000U, 0x007FFEFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xB47E0000U, 0x000000BFU, 0x00000000U, 0x00FB7C00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x01F80000U, 0x0000000BU, 0xC7F00000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x8003FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x001F0000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00060000U, 0x00000000U, 0xFFFF0000U, 0x003FFF81U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000C000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x003F0000U, 0x00000000U, 0xFFFF0000U, 0xF8000030U, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE8000U, 0xFFFFFFFFU, 0x000780FFU, 0x00000000U, 0x00000000U, 0x00030014U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF0000000U, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF3FFFU, 0xFFFF007FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0xFFFFFFFFU, 0xFFFFFE7FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000007FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x000FFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x007FFFFFU, 0x01FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x08000002U, 0x08000000U, 0x00200000U, 0x00200000U, 0x00008000U, 0x00008000U, 0x00000200U, 0x00000200U, 0x00000008U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF8000FFFU, 0x0000FFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF9FFFF7FU, 0x000007DBU, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007F0000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00004000U, 0x00000000U, 0x8000F000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000F000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x007FFF80U, 0x00000000U, 0x00000000U, 0x00000000U, 0xC00007F0U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFE0000U, 0xFFFFFFFFU, 0x001FFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFEU, 0x3FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00030000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0xFFFE7FFFU, 0xFFFEFFFEU, 0x003FFFFFU, 0x0000FFFFU, 0x0000E000U, 0x0000FC00U, 0x0000FC00U, 0xFFFFF800U, 0x00003FDFU, 0x00000000U, 0x00000000U, 0xFFFF0007U, 0x0FFFFFFFU, 0x000301FFU, 0x0000003FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF0FFFFFFU, 0x1FFF1FFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xF87FFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x03FFFFFFU, 0x00010FFFU, 0xFFFF0FFFU, 0xFFFFFFFFU, 0x03FF00FFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0x00033FFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x000FFFFFU, 0x1FFF3FFFU, 0xFFFF01FFU, 0xBFFFFFFFU, 0x0FFFC03FU, 0x01FF01FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFF7FFFFU, 0xFFFFFFFFU, 0x000007FFU, 0x00000000U, 0x00000002U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_space.h�����������������������������������������������0000644�0001750�0001750�00000007162�14557510505�016561� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[4 << 4]; } u_is_space = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 16, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, -1, -1, 2 + 128 * sizeof (short) / sizeof (int) + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00003E00U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000077FU, 0x00000300U, 0x80000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype/ctype_upper.h�����������������������������������������������0000644�0001750�0001750�00000020774�14557510505�016625� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[2]; short level2[2 << 7]; unsigned int level3[17 << 4]; } u_is_upper = { { 2 }, { 3 * sizeof (int) / sizeof (short) + 0, 3 * sizeof (int) / sizeof (short) + 128 }, { 3 + 256 * sizeof (short) / sizeof (int) + 0, 3 + 256 * sizeof (short) / sizeof (int) + 16, 3 + 256 * sizeof (short) / sizeof (int) + 32, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 48, 3 + 256 * sizeof (short) / sizeof (int) + 64, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 80, 3 + 256 * sizeof (short) / sizeof (int) + 96, 3 + 256 * sizeof (short) / sizeof (int) + 112, -1, 3 + 256 * sizeof (short) / sizeof (int) + 128, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 144, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 160, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 176, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 208, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 224, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3 + 256 * sizeof (short) / sizeof (int) + 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x7F7FFFFFU, 0x00000000U, 0x55555555U, 0xAA555555U, 0x555554AAU, 0x2B555555U, 0xB1DBCED6U, 0x11AED2D5U, 0x4AAAADB0U, 0x55D65555U, 0x55555555U, 0x6C055555U, 0x0000557AU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x80450000U, 0xFFFED740U, 0x00000FFBU, 0x55008000U, 0xE6905555U, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x55555555U, 0x55555401U, 0x55555555U, 0x55552AABU, 0x55555555U, 0x55555555U, 0xFFFE5555U, 0x007FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000020BFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xE7FFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55555555U, 0x55555555U, 0x55555555U, 0x55555555U, 0x40155555U, 0x55555555U, 0x55555555U, 0x55555555U, 0x3F00FF00U, 0xFF00FF00U, 0xAA003F00U, 0x0000FF00U, 0xFF00FF00U, 0x1F00FF00U, 0x0F001F00U, 0x1F001F00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00040C40U, 0x00000000U, 0x0000FFFFU, 0x00000008U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFC00000U, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0xC025EA9DU, 0x55555555U, 0x55555555U, 0x55555555U, 0x00042805U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55555555U, 0x00001555U, 0x05555555U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x55545554U, 0x55555555U, 0x6A005555U, 0x55452855U, 0x555F7D55U, 0x014102F5U, 0x00200000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FFFFFEU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x000000FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0x000FFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xF7FF0000U, 0x0037F7FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x0007FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0x00000003U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ����gnuastro-0.22/bootstrapped/lib/unictype/ctype_xdigit.h����������������������������������������������0000644�0001750�0001750�00000005503�14557510505�016753� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* ISO C <ctype.h> like properties of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[1]; short level2[1 << 7]; unsigned int level3[1 << 4]; } u_is_xdigit = { { 1 }, { 2 * sizeof (int) / sizeof (short) + 0 }, { 2 + 128 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, { 0x00000000U, 0x03FF0000U, 0x0000007EU, 0x0000007EU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/uniwidth/������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514200�014152� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/uniwidth/width.c�����������������������������������������������������0000644�0001750�0001750�00000006463�14557510505�015372� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine display width of Unicode character. Copyright (C) 2001-2002, 2006-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "uniwidth.h" #include "cjk.h" /* The non-spacing attribute table consists of: * Non-spacing characters; generated from PropList.txt or "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt" * Format control characters; generated from "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt" * Zero width characters; generated from "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt" * Hangul Jamo characters that have conjoining behaviour: - jungseong = syllable-middle vowels - jongseong = syllable-final consonants Rationale: 1) These characters act like combining characters. They have no equivalent in legacy character sets. Therefore the EastAsianWidth.txt file does not really matter for them; UAX #11 East Asian Width <https://www.unicode.org/reports/tr11/> makes it clear that it focus is on compatibility with traditional Japanese layout. By contrast, the same glyphs without conjoining behaviour are available in the U+3130..U+318F block, and these characters are mapped to legacy character sets, and traditional Japanese layout matters for them. 2) glibc does the same thing, see <https://sourceware.org/bugzilla/show_bug.cgi?id=21750> <https://sourceware.org/bugzilla/show_bug.cgi?id=26120> */ #include "uniwidth/width0.h" #include "uniwidth/width2.h" #include "unictype/bitmap.h" #define SIZEOF(a) (sizeof(a) / sizeof(a[0])) /* Determine number of column positions required for UC. */ int uc_width (ucs4_t uc, const char *encoding) { /* Test for non-spacing or control character. */ if ((uc >> 9) < SIZEOF (nonspacing_table_ind)) { int ind = nonspacing_table_ind[uc >> 9]; if (ind >= 0) if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1) { if (uc > 0 && uc < 0xa0) return -1; else return 0; } } else if ((uc >> 9) == (0xe0000 >> 9)) { if (uc >= 0xe0100) { if (uc <= 0xe01ef) return 0; } else { if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001) return 0; } } /* Test for double-width character. */ if (bitmap_lookup (&u_width2, uc)) return 2; /* In ancient CJK encodings, Cyrillic and most other characters are double-width as well. */ if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9 && is_cjk_encoding (encoding)) return 2; return 1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/uniwidth/cjk.h�������������������������������������������������������0000644�0001750�0001750�00000003167�14557510505�015025� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for CJK encoding. Copyright (C) 2001-2002, 2005-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2002. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include "streq.h" static int is_cjk_encoding (const char *encoding) { if (0 /* Legacy Japanese encodings */ || STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0) /* Legacy Chinese encodings */ || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) || STREQ_OPT (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0) || STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0) || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0) /* Legacy Korean encodings */ || STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) || STREQ_OPT (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0) || STREQ_OPT (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0)) return 1; return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/uniwidth/width0.h����������������������������������������������������0000644�0001750�0001750�00000074576�14557510505�015471� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Table of non-spacing or control characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ static const unsigned char nonspacing_table_data[48*64] = { /* 0x0000-0x01ff */ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */ 0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */ /* 0x0200-0x03ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */ /* 0x0400-0x05ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */ 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */ 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */ 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */ /* 0x0600-0x07ff */ 0x3f, 0x00, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */ 0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */ 0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */ 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */ 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */ 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x20, /* 0x07c0-0x07ff */ /* 0x0800-0x09ff */ 0x00, 0x00, 0xc0, 0xfb, 0xef, 0x3e, 0x00, 0x00, /* 0x0800-0x083f */ 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */ 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */ 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x08c0-0x08ff */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, /* 0x0900-0x093f */ 0xfe, 0x21, 0xfe, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */ 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x40, /* 0x09c0-0x09ff */ /* 0x0a00-0x0bff */ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */ 0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */ 0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xfc, /* 0x0ac0-0x0aff */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */ 0x1e, 0x20, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */ 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */ /* 0x0c00-0x0dff */ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, /* 0x0c00-0x0c3f */ 0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */ 0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, /* 0x0d00-0x0d3f */ 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */ 0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */ /* 0x0e00-0x0fff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */ 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1f, /* 0x0e80-0x0ebf */ 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */ 0xdf, 0xe0, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */ /* 0x1000-0x11ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */ 0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */ 0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x1140-0x117f */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x1180-0x11bf */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x11c0-0x11ff */ /* 0x1200-0x13ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */ 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */ /* 0x1600-0x17ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */ 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1700-0x173f */ 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */ 0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */ /* 0x1800-0x19ff */ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */ 0x60, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */ 0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */ /* 0x1a00-0x1bff */ 0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */ 0x00, 0x00, 0x40, 0x7f, 0xe5, 0x1f, 0xf8, 0x9f, /* 0x1a40-0x1a7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x1a80-0x1abf */ 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */ 0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */ 0x03, 0x00, 0x00, 0x00, 0x3c, 0x3b, 0x00, 0x00, /* 0x1b80-0x1bbf */ 0x00, 0x00, 0x00, 0x00, 0x40, 0xa3, 0x03, 0x00, /* 0x1bc0-0x1bff */ /* 0x1c00-0x1dff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */ 0x00, 0x00, 0xf7, 0xff, 0xfd, 0x21, 0x10, 0x03, /* 0x1cc0-0x1cff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x1dc0-0x1dff */ /* 0x2000-0x21ff */ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */ 0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0x00, 0x00, /* 0x2040-0x207f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */ 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */ /* 0x2c00-0x2dff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, /* 0x2cc0-0x2cff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x2d40-0x2d7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */ /* 0x3000-0x31ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x3000-0x303f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */ /* 0xa600-0xa7ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf7, 0x3f, /* 0xa640-0xa67f */ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0xa6c0-0xa6ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */ /* 0xa800-0xa9ff */ 0x44, 0x08, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, /* 0xa800-0xa83f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */ 0x30, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x80, /* 0xa8c0-0xa8ff */ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */ 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x33, /* 0xa980-0xa9bf */ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */ /* 0xaa00-0xabff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */ 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0xaa40-0xaa7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x00, /* 0xaac0-0xaaff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */ 0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, /* 0xabc0-0xabff */ /* 0xd600-0xd7ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd600-0xd63f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd640-0xd67f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd680-0xd6bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd6c0-0xd6ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd700-0xd73f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd740-0xd77f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0xd780-0xd7bf */ 0x7f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, /* 0xd7c0-0xd7ff */ /* 0xfa00-0xfbff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */ /* 0xfe00-0xffff */ 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, /* 0xfe00-0xfe3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */ /* 0x10000-0x101ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */ /* 0x10200-0x103ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10200-0x1023f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10240-0x1027f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10280-0x102bf */ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, /* 0x102c0-0x102ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10300-0x1033f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, /* 0x10340-0x1037f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10380-0x103bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x103c0-0x103ff */ /* 0x10a00-0x10bff */ 0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */ 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */ /* 0x10c00-0x10dff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c00-0x10c3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c40-0x10c7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c80-0x10cbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10cc0-0x10cff */ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, /* 0x10d00-0x10d3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10d40-0x10d7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10d80-0x10dbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10dc0-0x10dff */ /* 0x10e00-0x10fff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10e00-0x10e3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10e40-0x10e7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, /* 0x10e80-0x10ebf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, /* 0x10ec0-0x10eff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10f00-0x10f3f */ 0xc0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10f40-0x10f7f */ 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10f80-0x10fbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10fc0-0x10fff */ /* 0x11000-0x111ff */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11000-0x1103f */ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x80, /* 0x11040-0x1107f */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, /* 0x11080-0x110bf */ 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */ 0x07, 0x00, 0x00, 0x00, 0x80, 0xef, 0x1f, 0x00, /* 0x11100-0x1113f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, /* 0x11140-0x1117f */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, /* 0x11180-0x111bf */ 0x00, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */ /* 0x11200-0x113ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xd3, 0x40, /* 0x11200-0x1123f */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11240-0x1127f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11280-0x112bf */ 0x00, 0x00, 0x00, 0x80, 0xf8, 0x07, 0x00, 0x00, /* 0x112c0-0x112ff */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, /* 0x11300-0x1133f */ 0x01, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x1f, 0x00, /* 0x11340-0x1137f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11380-0x113bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x113c0-0x113ff */ /* 0x11400-0x115ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11400-0x1143f */ 0x5c, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0x11440-0x1147f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x85, /* 0x11480-0x114bf */ 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x114c0-0x114ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11500-0x1153f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11540-0x1157f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xb0, /* 0x11580-0x115bf */ 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, /* 0x115c0-0x115ff */ /* 0x11600-0x117ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xa7, /* 0x11600-0x1163f */ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11640-0x1167f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xbf, 0x00, /* 0x11680-0x116bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x116c0-0x116ff */ 0x00, 0x00, 0x00, 0xe0, 0xbc, 0x0f, 0x00, 0x00, /* 0x11700-0x1173f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11740-0x1177f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11780-0x117bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x117c0-0x117ff */ /* 0x11800-0x119ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x06, /* 0x11800-0x1183f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11840-0x1187f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11880-0x118bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x118c0-0x118ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, /* 0x11900-0x1193f */ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11940-0x1197f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11980-0x119bf */ 0x00, 0x00, 0xf0, 0x0c, 0x01, 0x00, 0x00, 0x00, /* 0x119c0-0x119ff */ /* 0x11a00-0x11bff */ 0x7e, 0x06, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x79, /* 0x11a00-0x11a3f */ 0x80, 0x00, 0x7e, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x11a40-0x11a7f */ 0x00, 0xfc, 0x7f, 0x03, 0x00, 0x00, 0x00, 0x00, /* 0x11a80-0x11abf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11ac0-0x11aff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11b00-0x11b3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11b40-0x11b7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11b80-0x11bbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11bc0-0x11bff */ /* 0x11c00-0x11dff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3f, /* 0x11c00-0x11c3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c40-0x11c7f */ 0x00, 0x00, 0xfc, 0xff, 0xff, 0xfc, 0x6d, 0x00, /* 0x11c80-0x11cbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11cc0-0x11cff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xb4, /* 0x11d00-0x11d3f */ 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d40-0x11d7f */ 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d80-0x11dbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11dc0-0x11dff */ /* 0x11e00-0x11fff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11e00-0x11e3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11e40-0x11e7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11e80-0x11ebf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, /* 0x11ec0-0x11eff */ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, /* 0x11f00-0x11f3f */ 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11f40-0x11f7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11f80-0x11fbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11fc0-0x11fff */ /* 0x13400-0x135ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x13400-0x1343f */ 0x81, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13440-0x1347f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13480-0x134bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x134c0-0x134ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13500-0x1353f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13540-0x1357f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13580-0x135bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x135c0-0x135ff */ /* 0x16a00-0x16bff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a00-0x16a3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a40-0x16a7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a80-0x16abf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, /* 0x16ac0-0x16aff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, /* 0x16b00-0x16b3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b40-0x16b7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b80-0x16bbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16bc0-0x16bff */ /* 0x16e00-0x16fff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e00-0x16e3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e40-0x16e7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e80-0x16ebf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16ec0-0x16eff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f00-0x16f3f */ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f40-0x16f7f */ 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f80-0x16fbf */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, /* 0x16fc0-0x16fff */ /* 0x1bc00-0x1bdff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc00-0x1bc3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc40-0x1bc7f */ 0x00, 0x00, 0x00, 0x60, 0x0f, 0x00, 0x00, 0x00, /* 0x1bc80-0x1bcbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bcc0-0x1bcff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd00-0x1bd3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd40-0x1bd7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd80-0x1bdbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bdc0-0x1bdff */ /* 0x1ce00-0x1cfff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ce00-0x1ce3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ce40-0x1ce7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ce80-0x1cebf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cec0-0x1ceff */ 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, /* 0x1cf00-0x1cf3f */ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cf40-0x1cf7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cf80-0x1cfbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cfc0-0x1cfff */ /* 0x1d000-0x1d1ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */ 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xf8, 0xff, /* 0x1d140-0x1d17f */ 0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */ /* 0x1d200-0x1d3ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d3c0-0x1d3ff */ /* 0x1da00-0x1dbff */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf8, /* 0x1da00-0x1da3f */ 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x20, 0x00, /* 0x1da40-0x1da7f */ 0x10, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x00, 0x00, /* 0x1da80-0x1dabf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dac0-0x1daff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db00-0x1db3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db40-0x1db7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db80-0x1dbbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dbc0-0x1dbff */ /* 0x1e000-0x1e1ff */ 0x7f, 0xff, 0xff, 0xf9, 0xdb, 0x07, 0x00, 0x00, /* 0x1e000-0x1e03f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e040-0x1e07f */ 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e080-0x1e0bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0c0-0x1e0ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, /* 0x1e100-0x1e13f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e140-0x1e17f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e180-0x1e1bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e1c0-0x1e1ff */ /* 0x1e200-0x1e3ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e200-0x1e23f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e240-0x1e27f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, /* 0x1e280-0x1e2bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, /* 0x1e2c0-0x1e2ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e300-0x1e33f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e340-0x1e37f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e380-0x1e3bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e3c0-0x1e3ff */ /* 0x1e400-0x1e5ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e400-0x1e43f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e440-0x1e47f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e480-0x1e4bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, /* 0x1e4c0-0x1e4ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e500-0x1e53f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e540-0x1e57f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e580-0x1e5bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e5c0-0x1e5ff */ /* 0x1e800-0x1e9ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e800-0x1e83f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e840-0x1e87f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e880-0x1e8bf */ 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8c0-0x1e8ff */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e900-0x1e93f */ 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e940-0x1e97f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e980-0x1e9bf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x1e9c0-0x1e9ff */ }; static const signed char nonspacing_table_ind[248] = { 0, 1, 2, 3, 4, 5, 6, 7, /* 0x0000-0x0fff */ 8, 9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */ 14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */ 16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */ -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */ -1, -1, -1, 20, -1, -1, -1, -1, /* 0xd000-0xdfff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */ -1, -1, -1, -1, -1, 21, -1, 22, /* 0xf000-0xffff */ 23, 24, -1, -1, -1, 25, 26, 27, /* 0x10000-0x10fff */ 28, 29, 30, 31, 32, 33, 34, 35, /* 0x11000-0x11fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */ -1, -1, 36, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */ -1, -1, -1, -1, -1, 37, -1, 38, /* 0x16000-0x16fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */ -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */ -1, -1, -1, -1, -1, -1, 39, -1, /* 0x1b000-0x1bfff */ -1, -1, -1, -1, -1, -1, -1, 40, /* 0x1c000-0x1cfff */ 41, 42, -1, -1, -1, 43, -1, -1, /* 0x1d000-0x1dfff */ 44, 45, 46, -1, 47, -1, -1, -1 /* 0x1e000-0x1efff */ }; ����������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/uniwidth/width2.h����������������������������������������������������0000644�0001750�0001750�00000056001�14557510505�015452� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Width 2 property of Unicode characters. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ /* Copyright (C) 2000-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define header_0 16 #define header_2 9 #define header_3 127 #define header_4 15 static const struct { int header[1]; int level1[4]; short level2[3 << 7]; unsigned int level3[28 << 4]; } u_width2 = { { 4 }, { 5 * sizeof (int) / sizeof (short) + 0, 5 * sizeof (int) / sizeof (short) + 128, 5 * sizeof (int) / sizeof (short) + 256, 5 * sizeof (int) / sizeof (short) + 256 }, { -1, -1, -1, -1, -1, -1, -1, -1, 5 + 384 * sizeof (short) / sizeof (int) + 0, -1, -1, -1, -1, -1, -1, -1, -1, 5 + 384 * sizeof (short) / sizeof (int) + 16, 5 + 384 * sizeof (short) / sizeof (int) + 32, 5 + 384 * sizeof (short) / sizeof (int) + 48, -1, 5 + 384 * sizeof (short) / sizeof (int) + 64, -1, 5 + 384 * sizeof (short) / sizeof (int) + 80, 5 + 384 * sizeof (short) / sizeof (int) + 96, 5 + 384 * sizeof (short) / sizeof (int) + 112, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 144, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 160, -1, 5 + 384 * sizeof (short) / sizeof (int) + 176, -1, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 192, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 + 384 * sizeof (short) / sizeof (int) + 208, 5 + 384 * sizeof (short) / sizeof (int) + 224, -1, 5 + 384 * sizeof (short) / sizeof (int) + 240, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 + 384 * sizeof (short) / sizeof (int) + 256, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 272, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 288, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 + 384 * sizeof (short) / sizeof (int) + 304, 5 + 384 * sizeof (short) / sizeof (int) + 320, 5 + 384 * sizeof (short) / sizeof (int) + 336, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5 + 384 * sizeof (short) / sizeof (int) + 352, 5 + 384 * sizeof (short) / sizeof (int) + 368, 5 + 384 * sizeof (short) / sizeof (int) + 384, 5 + 384 * sizeof (short) / sizeof (int) + 400, 5 + 384 * sizeof (short) / sizeof (int) + 416, 5 + 384 * sizeof (short) / sizeof (int) + 432, -1, -1, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128, 5 + 384 * sizeof (short) / sizeof (int) + 128 }, { 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0C000000U, 0x00000600U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00091E00U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x60000000U, 0x00300000U, 0x00000000U, 0x000FFF00U, 0x80000000U, 0x00080000U, 0x60000C02U, 0x00104030U, 0x242C0400U, 0x00000C20U, 0x00000100U, 0x00B85000U, 0x00000000U, 0x00E00000U, 0x80010000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x18000000U, 0x00000000U, 0x00210000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFF00FFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x1FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000000FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFF0000U, 0xFFFF0000U, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000001U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0000007FU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x0003000FU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00FFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x003FFFFFU, 0x00000000U, 0x000001FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x6FEF0000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000007U, 0x00070000U, 0xFFFF00F0U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0FFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000010U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00008000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x07FE4000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFBFE001U, 0xFFFFFFFFU, 0xDFFFFFFFU, 0x000FFFFFU, 0xFFFFFFFFU, 0x000F87FFU, 0xFF11FFFFU, 0xFFFFFFFFU, 0x7FFFFFFFU, 0xFFFFFFFDU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x9FFFFFFFU, 0xFFFFFFFFU, 0x3FFFFFFFU, 0xFFFF7800U, 0x040000FFU, 0x00600000U, 0x00000010U, 0x00000000U, 0xF8000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x0000FFFFU, 0x00000000U, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xE0E7103FU, 0x1FF01800U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00010FFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0xFFFFF000U, 0xF7FFFFFFU, 0xFFFFFFBFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0xFFFFFFFFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x1F1F0000U, 0xFFFF007FU, 0x07FF1FFFU, 0x03FF003FU, 0x007F00FFU, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U, 0x00000000U } }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/Makefile.am����������������������������������������������������������0000644�0001750�0001750�00000466370�14557510537�014324� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2024 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This file 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: # gnulib-tool --import --local-dir=gl \ # --lib=libgnu \ # --source-base=bootstrapped/lib \ # --m4-base=bootstrapped/m4 \ # --doc-base=bootstrapped/doc \ # --tests-base=bootstrapped/tests \ # --aux-dir=bootstrapped/build-aux \ # --with-tests \ # --no-conditional-dependencies \ # --libtool \ # --macro-prefix=gl \ # --no-vc-files \ # argp \ # error \ # faccessat \ # fcntl \ # fcntl-h \ # func \ # gendocs \ # getline \ # git-version-gen \ # gpl-3.0 \ # havelib \ # inttypes \ # math \ # mbstok_r \ # memmove \ # mktime \ # nproc \ # regex \ # secure_getenv \ # select \ # signbit \ # stdint \ # stdio \ # strcase \ # strptime \ # strtod \ # strtok_r \ # sys_time \ # system-posix \ # time AUTOMAKE_OPTIONS = 1.14 gnits subdir-objects SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = EXTRA_DIST = BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = # No GNU Make output. AM_CPPFLAGS = AM_CFLAGS = noinst_LTLIBRARIES += libgnu.la libgnu_la_SOURCES = libgnu_la_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS) libgnu_la_LIBADD = $(gl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = libgnu_la_LDFLAGS = $(AM_LDFLAGS) libgnu_la_LDFLAGS += -no-undefined libgnu_la_LDFLAGS += $(EUIDACCESS_LIBGEN) libgnu_la_LDFLAGS += $(HARD_LOCALE_LIB) libgnu_la_LDFLAGS += $(LIBSOCKET) libgnu_la_LDFLAGS += $(LIBTHREAD) libgnu_la_LDFLAGS += $(LTLIBC32CONV) libgnu_la_LDFLAGS += $(LTLIBINTL) libgnu_la_LDFLAGS += $(LTLIBUNISTRING) libgnu_la_LDFLAGS += $(MBRTOWC_LIB) libgnu_la_LDFLAGS += $(SELECT_LIB) libgnu_la_LDFLAGS += $(SETLOCALE_NULL_LIB) ## begin gnulib module absolute-header # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || __clang__ || 60000000 <= __DECC_VER) ## end gnulib module absolute-header ## begin gnulib module access if GL_COND_OBJ_ACCESS libgnu_la_SOURCES += access.c endif ## end gnulib module access ## begin gnulib module alloca libgnu_la_LIBADD += @LTALLOCA@ libgnu_la_DEPENDENCIES += @LTALLOCA@ EXTRA_DIST += alloca.c EXTRA_libgnu_la_SOURCES += alloca.c ## end gnulib module alloca ## begin gnulib module alloca-opt BUILT_SOURCES += $(ALLOCA_H) # We need the following in order to create <alloca.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_ALLOCA_H alloca.h: alloca.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' \ $(srcdir)/alloca.in.h > $@-t $(AM_V_at)mv $@-t $@ else alloca.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += alloca.h alloca.h-t EXTRA_DIST += alloca.in.h ## end gnulib module alloca-opt ## begin gnulib module argp libgnu_la_SOURCES += argp.h argp-ba.c argp-eexst.c argp-fmtstream.c argp-fmtstream.h argp-fs-xinl.c argp-help.c argp-namefrob.h argp-parse.c argp-pin.c argp-pv.c argp-pvh.c argp-xinl.c ## end gnulib module argp ## begin gnulib module assert-h BUILT_SOURCES += $(ASSERT_H) # We need the following in order to create <assert.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_ASSERT_H assert.h: assert.in.h verify.h $(top_builddir)/config.status $(gl_V_at){ $(SED_HEADER_STDOUT) \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_ASSERT_H''@|$(NEXT_ASSERT_H)|g' \ < $(srcdir)/assert.in.h && \ sed -e '/@assert.h omit start@/,/@assert.h omit end@/d' \ -e 's|_gl_verify|_gl_static_assert|g' \ -e 's|_GL_VERIFY|_GL_STATIC_ASSERT|g' \ -e 's|_GL\(_STATIC_ASSERT_H\)|_GL\1|g' \ < $(srcdir)/verify.h; \ } > $@-t $(AM_V_at)mv $@-t $@ else assert.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += assert.h assert.h-t EXTRA_DIST += assert.in.h verify.h ## end gnulib module assert-h ## begin gnulib module assure EXTRA_DIST += assure.h ## end gnulib module assure ## begin gnulib module at-internal libgnu_la_SOURCES += openat-priv.h openat-proc.c ## end gnulib module at-internal ## begin gnulib module attribute EXTRA_DIST += attribute.h ## end gnulib module attribute ## begin gnulib module basename-lgpl libgnu_la_SOURCES += basename-lgpl.c EXTRA_DIST += basename-lgpl.h ## end gnulib module basename-lgpl ## begin gnulib module btowc if GL_COND_OBJ_BTOWC libgnu_la_SOURCES += btowc.c endif ## end gnulib module btowc ## begin gnulib module c-ctype libgnu_la_SOURCES += c-ctype.h c-ctype.c ## end gnulib module c-ctype ## begin gnulib module c32isalnum libgnu_la_SOURCES += c32isalnum.c EXTRA_DIST += c32is-impl.h ## end gnulib module c32isalnum ## begin gnulib module c32isalpha libgnu_la_SOURCES += c32isalpha.c EXTRA_DIST += c32is-impl.h ## end gnulib module c32isalpha ## begin gnulib module c32isblank libgnu_la_SOURCES += c32isblank.c EXTRA_DIST += c32is-impl.h ## end gnulib module c32isblank ## begin gnulib module c32iscntrl libgnu_la_SOURCES += c32iscntrl.c EXTRA_DIST += c32is-impl.h ## end gnulib module c32iscntrl ## begin gnulib module c32isdigit libgnu_la_SOURCES += c32isdigit.c EXTRA_DIST += c32is-impl.h ## end gnulib module c32isdigit ## begin gnulib module c32isgraph libgnu_la_SOURCES += c32isgraph.c EXTRA_DIST += c32is-impl.h ## end gnulib module c32isgraph ## begin gnulib module c32islower libgnu_la_SOURCES += c32islower.c EXTRA_DIST += c32is-impl.h ## end gnulib module c32islower ## begin gnulib module c32isprint libgnu_la_SOURCES += c32isprint.c EXTRA_DIST += c32is-impl.h ## end gnulib module c32isprint ## begin gnulib module c32ispunct libgnu_la_SOURCES += c32ispunct.c EXTRA_DIST += c32is-impl.h ## end gnulib module c32ispunct ## begin gnulib module c32isspace libgnu_la_SOURCES += c32isspace.c EXTRA_DIST += c32is-impl.h ## end gnulib module c32isspace ## begin gnulib module c32isupper libgnu_la_SOURCES += c32isupper.c EXTRA_DIST += c32is-impl.h ## end gnulib module c32isupper ## begin gnulib module c32isxdigit libgnu_la_SOURCES += c32isxdigit.c EXTRA_DIST += c32is-impl.h ## end gnulib module c32isxdigit ## begin gnulib module c32tolower libgnu_la_SOURCES += c32tolower.c EXTRA_DIST += c32to-impl.h ## end gnulib module c32tolower ## begin gnulib module c32width libgnu_la_SOURCES += c32width.c ## end gnulib module c32width ## begin gnulib module chdir-long if GL_COND_OBJ_CHDIR_LONG libgnu_la_SOURCES += chdir-long.c endif EXTRA_DIST += chdir-long.h ## end gnulib module chdir-long ## begin gnulib module cloexec libgnu_la_SOURCES += cloexec.c EXTRA_DIST += cloexec.h ## end gnulib module cloexec ## begin gnulib module close if GL_COND_OBJ_CLOSE libgnu_la_SOURCES += close.c endif ## end gnulib module close ## begin gnulib module dirent BUILT_SOURCES += dirent.h # We need the following in order to create <dirent.h> when the system # doesn't have one that works with the given compiler. dirent.h: dirent.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_DIRENT_H''@|$(HAVE_DIRENT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \ -e 's/@''DIR_HAS_FD_MEMBER''@/$(DIR_HAS_FD_MEMBER)/g' \ -e 's/@''GNULIB_OPENDIR''@/$(GL_GNULIB_OPENDIR)/g' \ -e 's/@''GNULIB_READDIR''@/$(GL_GNULIB_READDIR)/g' \ -e 's/@''GNULIB_REWINDDIR''@/$(GL_GNULIB_REWINDDIR)/g' \ -e 's/@''GNULIB_CLOSEDIR''@/$(GL_GNULIB_CLOSEDIR)/g' \ -e 's/@''GNULIB_DIRFD''@/$(GL_GNULIB_DIRFD)/g' \ -e 's/@''GNULIB_FDOPENDIR''@/$(GL_GNULIB_FDOPENDIR)/g' \ -e 's/@''GNULIB_SCANDIR''@/$(GL_GNULIB_SCANDIR)/g' \ -e 's/@''GNULIB_ALPHASORT''@/$(GL_GNULIB_ALPHASORT)/g' \ -e 's/@''HAVE_OPENDIR''@/$(HAVE_OPENDIR)/g' \ -e 's/@''HAVE_READDIR''@/$(HAVE_READDIR)/g' \ -e 's/@''HAVE_REWINDDIR''@/$(HAVE_REWINDDIR)/g' \ -e 's/@''HAVE_CLOSEDIR''@/$(HAVE_CLOSEDIR)/g' \ -e 's|@''HAVE_DECL_DIRFD''@|$(HAVE_DECL_DIRFD)|g' \ -e 's|@''HAVE_DECL_FDOPENDIR''@|$(HAVE_DECL_FDOPENDIR)|g' \ -e 's|@''HAVE_FDOPENDIR''@|$(HAVE_FDOPENDIR)|g' \ -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \ -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \ -e 's|@''REPLACE_OPENDIR''@|$(REPLACE_OPENDIR)|g' \ -e 's|@''REPLACE_READDIR''@|$(REPLACE_READDIR)|g' \ -e 's|@''REPLACE_REWINDDIR''@|$(REPLACE_REWINDDIR)|g' \ -e 's|@''REPLACE_CLOSEDIR''@|$(REPLACE_CLOSEDIR)|g' \ -e 's|@''REPLACE_DIRFD''@|$(REPLACE_DIRFD)|g' \ -e 's|@''REPLACE_FDOPENDIR''@|$(REPLACE_FDOPENDIR)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/dirent.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += dirent.h dirent.h-t EXTRA_DIST += dirent.in.h ## end gnulib module dirent ## begin gnulib module dirfd if GL_COND_OBJ_DIRFD libgnu_la_SOURCES += dirfd.c endif EXTRA_DIST += dirent-private.h ## end gnulib module dirfd ## begin gnulib module dup2 if GL_COND_OBJ_DUP2 libgnu_la_SOURCES += dup2.c endif ## end gnulib module dup2 ## begin gnulib module errno BUILT_SOURCES += $(ERRNO_H) # We need the following in order to create <errno.h> when the system # doesn't have one that is POSIX compliant. if GL_GENERATE_ERRNO_H errno.h: errno.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ $(srcdir)/errno.in.h > $@-t $(AM_V_at)mv $@-t $@ else errno.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += errno.h errno.h-t EXTRA_DIST += errno.in.h ## end gnulib module errno ## begin gnulib module error if GL_COND_OBJ_ERROR libgnu_la_SOURCES += error.c endif ## end gnulib module error ## begin gnulib module error-h BUILT_SOURCES += error.h # We need the following in order to override <error.h>. error.h: error.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_ERROR_H''@|$(HAVE_ERROR_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''NEXT_ERROR_H''@|$(NEXT_ERROR_H)|g' \ -e 's|@''HAVE_ERROR''@|$(HAVE_ERROR)|g' \ -e 's|@''HAVE_ERROR_AT_LINE''@|$(HAVE_ERROR_AT_LINE)|g' \ -e 's|@''REPLACE_ERROR''@|$(REPLACE_ERROR)|g' \ -e 's|@''REPLACE_ERROR_AT_LINE''@|$(REPLACE_ERROR_AT_LINE)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ $(srcdir)/error.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += error.h error.h-t EXTRA_DIST += error.in.h ## end gnulib module error-h ## begin gnulib module euidaccess if GL_COND_OBJ_EUIDACCESS libgnu_la_SOURCES += euidaccess.c endif ## end gnulib module euidaccess ## begin gnulib module exitfail libgnu_la_SOURCES += exitfail.c EXTRA_DIST += exitfail.h ## end gnulib module exitfail ## begin gnulib module faccessat if GL_COND_OBJ_FACCESSAT libgnu_la_SOURCES += faccessat.c endif EXTRA_DIST += at-func.c EXTRA_libgnu_la_SOURCES += at-func.c ## end gnulib module faccessat ## begin gnulib module fchdir if GL_COND_OBJ_FCHDIR libgnu_la_SOURCES += fchdir.c endif ## end gnulib module fchdir ## begin gnulib module fcntl if GL_COND_OBJ_FCNTL libgnu_la_SOURCES += fcntl.c endif ## end gnulib module fcntl ## begin gnulib module fcntl-h BUILT_SOURCES += fcntl.h # We need the following in order to create <fcntl.h> when the system # doesn't have one that works with the given compiler. fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ -e 's/@''GNULIB_CREAT''@/$(GL_GNULIB_CREAT)/g' \ -e 's/@''GNULIB_FCNTL''@/$(GL_GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GL_GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GL_GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GL_GNULIB_OPENAT)/g' \ -e 's/@''GNULIB_MDA_CREAT''@/$(GL_GNULIB_MDA_CREAT)/g' \ -e 's/@''GNULIB_MDA_OPEN''@/$(GL_GNULIB_MDA_OPEN)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ -e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/fcntl.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += fcntl.h fcntl.h-t EXTRA_DIST += fcntl.in.h ## end gnulib module fcntl-h ## begin gnulib module fd-hook libgnu_la_SOURCES += fd-hook.c EXTRA_DIST += fd-hook.h ## end gnulib module fd-hook ## begin gnulib module fd-safer-flag libgnu_la_SOURCES += fd-safer-flag.c dup-safer-flag.c ## end gnulib module fd-safer-flag ## begin gnulib module filename EXTRA_DIST += filename.h ## end gnulib module filename ## begin gnulib module filenamecat-lgpl libgnu_la_SOURCES += filenamecat-lgpl.c EXTRA_DIST += filenamecat.h ## end gnulib module filenamecat-lgpl ## begin gnulib module float BUILT_SOURCES += $(FLOAT_H) # We need the following in order to create <float.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_FLOAT_H float.h: float.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ $(srcdir)/float.in.h > $@-t $(AM_V_at)mv $@-t $@ else float.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += float.h float.h-t if GL_COND_OBJ_FLOAT libgnu_la_SOURCES += float.c endif if GL_COND_OBJ_ITOLD libgnu_la_SOURCES += itold.c endif EXTRA_DIST += float.in.h ## end gnulib module float ## begin gnulib module free-posix if GL_COND_OBJ_FREE libgnu_la_SOURCES += free.c endif ## end gnulib module free-posix ## begin gnulib module fstat if GL_COND_OBJ_FSTAT libgnu_la_SOURCES += fstat.c endif EXTRA_DIST += stat-w32.c stat-w32.h EXTRA_libgnu_la_SOURCES += stat-w32.c ## end gnulib module fstat ## begin gnulib module fstatat if GL_COND_OBJ_FSTATAT libgnu_la_SOURCES += fstatat.c endif EXTRA_DIST += at-func.c EXTRA_libgnu_la_SOURCES += at-func.c ## end gnulib module fstatat ## begin gnulib module gen-header # In 'sed', replace the pattern space with a "DO NOT EDIT" comment. SED_HEADER_NOEDIT = s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */, # '$(SED_HEADER_STDOUT) -e "..."' runs 'sed' but first outputs "DO NOT EDIT". SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G # '$(SED_HEADER_TO_AT_t) FILE' copies FILE to $@-t, prepending a leading # "DO_NOT_EDIT". Although this could be done more simply via: # SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) > $@-t # the -n and 'w' avoid a fork+exec, at least when GNU Make is used. SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t' # Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that gl_V_at = $(AM_V_GEN) ## end gnulib module gen-header ## begin gnulib module gendocs EXTRA_DIST += $(top_srcdir)/bootstrapped/build-aux/gendocs.sh ## end gnulib module gendocs ## begin gnulib module getcwd-lgpl if GL_COND_OBJ_GETCWD_LGPL libgnu_la_SOURCES += getcwd-lgpl.c endif ## end gnulib module getcwd-lgpl ## begin gnulib module getdelim if GL_COND_OBJ_GETDELIM libgnu_la_SOURCES += getdelim.c endif ## end gnulib module getdelim ## begin gnulib module getdtablesize if GL_COND_OBJ_GETDTABLESIZE libgnu_la_SOURCES += getdtablesize.c endif ## end gnulib module getdtablesize ## begin gnulib module getgroups if GL_COND_OBJ_GETGROUPS libgnu_la_SOURCES += getgroups.c endif ## end gnulib module getgroups ## begin gnulib module getline if GL_COND_OBJ_GETLINE libgnu_la_SOURCES += getline.c endif ## end gnulib module getline ## begin gnulib module getopt-posix BUILT_SOURCES += $(GETOPT_H) $(GETOPT_CDEFS_H) # We need the following in order to create <getopt.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_GETOPT_H getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ $(srcdir)/getopt.in.h > $@-t $(AM_V_at)mv $@-t $@ else getopt.h: $(top_builddir)/config.status rm -f $@ endif if GL_GENERATE_GETOPT_CDEFS_H getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status $(AM_V_GEN)$(SED_HEADER_STDOUT) \ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ $(srcdir)/getopt-cdefs.in.h > $@-t $(AM_V_at)mv $@-t $@ else getopt-cdefs.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += getopt.h getopt.h-t getopt-cdefs.h getopt-cdefs.h-t if GL_COND_OBJ_GETOPT libgnu_la_SOURCES += getopt.c getopt1.c endif EXTRA_DIST += getopt-cdefs.in.h getopt-core.h getopt-ext.h getopt-pfx-core.h getopt-pfx-ext.h getopt.in.h getopt_int.h ## end gnulib module getopt-posix ## begin gnulib module getprogname if GL_COND_OBJ_GETPROGNAME libgnu_la_SOURCES += getprogname.c endif EXTRA_DIST += getprogname.h ## end gnulib module getprogname ## begin gnulib module gettext-h libgnu_la_SOURCES += gettext.h ## end gnulib module gettext-h ## begin gnulib module gettimeofday if GL_COND_OBJ_GETTIMEOFDAY libgnu_la_SOURCES += gettimeofday.c endif ## end gnulib module gettimeofday ## begin gnulib module git-version-gen EXTRA_DIST += $(top_srcdir)/bootstrapped/build-aux/git-version-gen ## end gnulib module git-version-gen ## begin gnulib module glibc-internal/dynarray BUILT_SOURCES += malloc/dynarray.gl.h malloc/dynarray-skeleton.gl.h malloc/dynarray.gl.h: malloc/dynarray.h $(AM_V_GEN)$(MKDIR_P) '%reldir%/malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e '/libc_hidden_proto/d' \ $(srcdir)/malloc/dynarray.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += malloc/dynarray.gl.h malloc/dynarray.gl.h-t malloc/dynarray-skeleton.gl.h: malloc/dynarray-skeleton.c $(AM_V_GEN)$(MKDIR_P) '%reldir%/malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|<malloc/dynarray\.h>|<malloc/dynarray.gl.h>|g' \ -e 's|__attribute_maybe_unused__|_GL_ATTRIBUTE_MAYBE_UNUSED|g' \ -e 's|__attribute_nonnull__|_GL_ATTRIBUTE_NONNULL|g' \ -e 's|__attribute_warn_unused_result__|_GL_ATTRIBUTE_NODISCARD|g' \ -e 's|__glibc_likely|_GL_LIKELY|g' \ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ $(srcdir)/malloc/dynarray-skeleton.c > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += malloc/dynarray-skeleton.gl.h malloc/dynarray-skeleton.gl.h-t libgnu_la_SOURCES += malloc/dynarray_at_failure.c malloc/dynarray_emplace_enlarge.c malloc/dynarray_finalize.c malloc/dynarray_resize.c malloc/dynarray_resize_clear.c EXTRA_DIST += dynarray.h malloc/dynarray-skeleton.c malloc/dynarray.h EXTRA_libgnu_la_SOURCES += malloc/dynarray-skeleton.c ## end gnulib module glibc-internal/dynarray ## begin gnulib module group-member if GL_COND_OBJ_GROUP_MEMBER libgnu_la_SOURCES += group-member.c endif ## end gnulib module group-member ## begin gnulib module hard-locale libgnu_la_SOURCES += hard-locale.c EXTRA_DIST += hard-locale.h ## end gnulib module hard-locale ## begin gnulib module havelib EXTRA_DIST += $(top_srcdir)/bootstrapped/build-aux/config.rpath ## end gnulib module havelib ## begin gnulib module idx libgnu_la_SOURCES += idx.h ## end gnulib module idx ## begin gnulib module intprops EXTRA_DIST += intprops-internal.h intprops.h ## end gnulib module intprops ## begin gnulib module inttypes-incomplete BUILT_SOURCES += inttypes.h # We need the following in order to create <inttypes.h> when the system # doesn't have one that works with the given compiler. inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ -e 's/@''GNULIB_IMAXABS''@/$(GL_GNULIB_IMAXABS)/g' \ -e 's/@''GNULIB_IMAXDIV''@/$(GL_GNULIB_IMAXDIV)/g' \ -e 's/@''GNULIB_STRTOIMAX''@/$(GL_GNULIB_STRTOIMAX)/g' \ -e 's/@''GNULIB_STRTOUMAX''@/$(GL_GNULIB_STRTOUMAX)/g' \ -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \ -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \ -e 's/@''REPLACE_IMAXABS''@/$(REPLACE_IMAXABS)/g' \ -e 's/@''REPLACE_IMAXDIV''@/$(REPLACE_IMAXDIV)/g' \ -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \ -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \ -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/inttypes.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += inttypes.h inttypes.h-t EXTRA_DIST += inttypes.in.h ## end gnulib module inttypes-incomplete ## begin gnulib module isnand-nolibm EXTRA_DIST += float+.h isnan.c isnand-nolibm.h isnand.c EXTRA_libgnu_la_SOURCES += isnan.c isnand.c ## end gnulib module isnand-nolibm ## begin gnulib module isnanf-nolibm EXTRA_DIST += float+.h isnan.c isnanf-nolibm.h isnanf.c EXTRA_libgnu_la_SOURCES += isnan.c isnanf.c ## end gnulib module isnanf-nolibm ## begin gnulib module isnanl-nolibm EXTRA_DIST += float+.h isnan.c isnanl-nolibm.h isnanl.c EXTRA_libgnu_la_SOURCES += isnan.c isnanl.c ## end gnulib module isnanl-nolibm ## begin gnulib module iswblank if GL_COND_OBJ_ISWBLANK libgnu_la_SOURCES += iswblank.c endif ## end gnulib module iswblank ## begin gnulib module iswctype if GL_COND_OBJ_ISWCTYPE libgnu_la_SOURCES += iswctype.c endif EXTRA_DIST += iswctype-impl.h ## end gnulib module iswctype ## begin gnulib module iswdigit if GL_COND_OBJ_ISWDIGIT libgnu_la_SOURCES += iswdigit.c endif ## end gnulib module iswdigit ## begin gnulib module iswpunct if GL_COND_OBJ_ISWPUNCT libgnu_la_SOURCES += iswpunct.c endif ## end gnulib module iswpunct ## begin gnulib module iswxdigit if GL_COND_OBJ_ISWXDIGIT libgnu_la_SOURCES += iswxdigit.c endif ## end gnulib module iswxdigit ## begin gnulib module langinfo BUILT_SOURCES += langinfo.h # We need the following in order to create an empty placeholder for # <langinfo.h> when the system doesn't have one. langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ -e 's/@''GNULIB_NL_LANGINFO''@/$(GL_GNULIB_NL_LANGINFO)/g' \ -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ -e 's|@''HAVE_LANGINFO_ALTMON''@|$(HAVE_LANGINFO_ALTMON)|g' \ -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/langinfo.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += langinfo.h langinfo.h-t EXTRA_DIST += langinfo.in.h ## end gnulib module langinfo ## begin gnulib module libc-config EXTRA_DIST += cdefs.h libc-config.h ## end gnulib module libc-config ## begin gnulib module limits-h BUILT_SOURCES += $(LIMITS_H) # We need the following in order to create <limits.h> when the system # doesn't have one that is compatible with GNU. if GL_GENERATE_LIMITS_H limits.h: limits.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ $(srcdir)/limits.in.h > $@-t $(AM_V_at)mv $@-t $@ else limits.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += limits.h limits.h-t EXTRA_DIST += limits.in.h ## end gnulib module limits-h ## begin gnulib module localcharset libgnu_la_SOURCES += localcharset.c EXTRA_DIST += localcharset.h ## end gnulib module localcharset ## begin gnulib module locale BUILT_SOURCES += locale.h # We need the following in order to create <locale.h> when the system # doesn't have one that provides all definitions. locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ -e 's/@''GNULIB_LOCALECONV''@/$(GL_GNULIB_LOCALECONV)/g' \ -e 's/@''GNULIB_SETLOCALE''@/$(GL_GNULIB_SETLOCALE)/g' \ -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GL_GNULIB_SETLOCALE_NULL)/g' \ -e 's/@''GNULIB_DUPLOCALE''@/$(GL_GNULIB_DUPLOCALE)/g' \ -e 's/@''GNULIB_LOCALENAME''@/$(GL_GNULIB_LOCALENAME)/g' \ -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \ -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \ -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \ -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \ -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ -e 's|@''LOCALENAME_ENHANCE_LOCALE_FUNCS''@|$(LOCALENAME_ENHANCE_LOCALE_FUNCS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/locale.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += locale.h locale.h-t EXTRA_DIST += locale.in.h ## end gnulib module locale ## begin gnulib module localeconv if GL_COND_OBJ_LOCALECONV libgnu_la_SOURCES += localeconv.c endif ## end gnulib module localeconv ## begin gnulib module lock libgnu_la_SOURCES += glthread/lock.h glthread/lock.c ## end gnulib module lock ## begin gnulib module lstat if GL_COND_OBJ_LSTAT libgnu_la_SOURCES += lstat.c endif ## end gnulib module lstat ## begin gnulib module malloc-gnu EXTRA_DIST += malloc.c EXTRA_libgnu_la_SOURCES += malloc.c ## end gnulib module malloc-gnu ## begin gnulib module malloc-posix EXTRA_DIST += malloc.c EXTRA_libgnu_la_SOURCES += malloc.c ## end gnulib module malloc-posix ## begin gnulib module malloca libgnu_la_SOURCES += malloca.c EXTRA_DIST += malloca.h ## end gnulib module malloca ## begin gnulib module math BUILT_SOURCES += math.h libgnu_la_SOURCES += math.c # We need the following in order to create <math.h> when the system # doesn't have one that works with the given compiler. math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \ -e 's/@''GNULIB_ACOSF''@/$(GL_GNULIB_ACOSF)/g' \ -e 's/@''GNULIB_ACOSL''@/$(GL_GNULIB_ACOSL)/g' \ -e 's/@''GNULIB_ASINF''@/$(GL_GNULIB_ASINF)/g' \ -e 's/@''GNULIB_ASINL''@/$(GL_GNULIB_ASINL)/g' \ -e 's/@''GNULIB_ATANF''@/$(GL_GNULIB_ATANF)/g' \ -e 's/@''GNULIB_ATANL''@/$(GL_GNULIB_ATANL)/g' \ -e 's/@''GNULIB_ATAN2F''@/$(GL_GNULIB_ATAN2F)/g' \ -e 's/@''GNULIB_CBRT''@/$(GL_GNULIB_CBRT)/g' \ -e 's/@''GNULIB_CBRTF''@/$(GL_GNULIB_CBRTF)/g' \ -e 's/@''GNULIB_CBRTL''@/$(GL_GNULIB_CBRTL)/g' \ -e 's/@''GNULIB_CEIL''@/$(GL_GNULIB_CEIL)/g' \ -e 's/@''GNULIB_CEILF''@/$(GL_GNULIB_CEILF)/g' \ -e 's/@''GNULIB_CEILL''@/$(GL_GNULIB_CEILL)/g' \ -e 's/@''GNULIB_COPYSIGN''@/$(GL_GNULIB_COPYSIGN)/g' \ -e 's/@''GNULIB_COPYSIGNF''@/$(GL_GNULIB_COPYSIGNF)/g' \ -e 's/@''GNULIB_COPYSIGNL''@/$(GL_GNULIB_COPYSIGNL)/g' \ -e 's/@''GNULIB_COSF''@/$(GL_GNULIB_COSF)/g' \ -e 's/@''GNULIB_COSL''@/$(GL_GNULIB_COSL)/g' \ -e 's/@''GNULIB_COSHF''@/$(GL_GNULIB_COSHF)/g' \ -e 's/@''GNULIB_EXPF''@/$(GL_GNULIB_EXPF)/g' \ -e 's/@''GNULIB_EXPL''@/$(GL_GNULIB_EXPL)/g' \ -e 's/@''GNULIB_EXP2''@/$(GL_GNULIB_EXP2)/g' \ -e 's/@''GNULIB_EXP2F''@/$(GL_GNULIB_EXP2F)/g' \ -e 's/@''GNULIB_EXP2L''@/$(GL_GNULIB_EXP2L)/g' \ -e 's/@''GNULIB_EXPM1''@/$(GL_GNULIB_EXPM1)/g' \ -e 's/@''GNULIB_EXPM1F''@/$(GL_GNULIB_EXPM1F)/g' \ -e 's/@''GNULIB_EXPM1L''@/$(GL_GNULIB_EXPM1L)/g' \ -e 's/@''GNULIB_FABSF''@/$(GL_GNULIB_FABSF)/g' \ -e 's/@''GNULIB_FABSL''@/$(GL_GNULIB_FABSL)/g' \ -e 's/@''GNULIB_FLOOR''@/$(GL_GNULIB_FLOOR)/g' \ -e 's/@''GNULIB_FLOORF''@/$(GL_GNULIB_FLOORF)/g' \ -e 's/@''GNULIB_FLOORL''@/$(GL_GNULIB_FLOORL)/g' \ -e 's/@''GNULIB_FMA''@/$(GL_GNULIB_FMA)/g' \ -e 's/@''GNULIB_FMAF''@/$(GL_GNULIB_FMAF)/g' \ -e 's/@''GNULIB_FMAL''@/$(GL_GNULIB_FMAL)/g' \ -e 's/@''GNULIB_FMOD''@/$(GL_GNULIB_FMOD)/g' \ -e 's/@''GNULIB_FMODF''@/$(GL_GNULIB_FMODF)/g' \ -e 's/@''GNULIB_FMODL''@/$(GL_GNULIB_FMODL)/g' \ -e 's/@''GNULIB_FREXPF''@/$(GL_GNULIB_FREXPF)/g' \ -e 's/@''GNULIB_FREXP''@/$(GL_GNULIB_FREXP)/g' \ -e 's/@''GNULIB_FREXPL''@/$(GL_GNULIB_FREXPL)/g' \ -e 's/@''GNULIB_HYPOT''@/$(GL_GNULIB_HYPOT)/g' \ -e 's/@''GNULIB_HYPOTF''@/$(GL_GNULIB_HYPOTF)/g' \ -e 's/@''GNULIB_HYPOTL''@/$(GL_GNULIB_HYPOTL)/g' \ < $(srcdir)/math.in.h > $@-t1 $(AM_V_at)sed \ -e 's/@''GNULIB_ILOGB''@/$(GL_GNULIB_ILOGB)/g' \ -e 's/@''GNULIB_ILOGBF''@/$(GL_GNULIB_ILOGBF)/g' \ -e 's/@''GNULIB_ILOGBL''@/$(GL_GNULIB_ILOGBL)/g' \ -e 's/@''GNULIB_ISFINITE''@/$(GL_GNULIB_ISFINITE)/g' \ -e 's/@''GNULIB_ISINF''@/$(GL_GNULIB_ISINF)/g' \ -e 's/@''GNULIB_ISNAN''@/$(GL_GNULIB_ISNAN)/g' \ -e 's/@''GNULIB_ISNANF''@/$(GL_GNULIB_ISNANF)/g' \ -e 's/@''GNULIB_ISNAND''@/$(GL_GNULIB_ISNAND)/g' \ -e 's/@''GNULIB_ISNANL''@/$(GL_GNULIB_ISNANL)/g' \ -e 's/@''GNULIB_LDEXP''@/$(GL_GNULIB_LDEXP)/g' \ -e 's/@''GNULIB_LDEXPF''@/$(GL_GNULIB_LDEXPF)/g' \ -e 's/@''GNULIB_LDEXPL''@/$(GL_GNULIB_LDEXPL)/g' \ -e 's/@''GNULIB_LOG''@/$(GL_GNULIB_LOG)/g' \ -e 's/@''GNULIB_LOGF''@/$(GL_GNULIB_LOGF)/g' \ -e 's/@''GNULIB_LOGL''@/$(GL_GNULIB_LOGL)/g' \ -e 's/@''GNULIB_LOG10''@/$(GL_GNULIB_LOG10)/g' \ -e 's/@''GNULIB_LOG10F''@/$(GL_GNULIB_LOG10F)/g' \ -e 's/@''GNULIB_LOG10L''@/$(GL_GNULIB_LOG10L)/g' \ -e 's/@''GNULIB_LOG1P''@/$(GL_GNULIB_LOG1P)/g' \ -e 's/@''GNULIB_LOG1PF''@/$(GL_GNULIB_LOG1PF)/g' \ -e 's/@''GNULIB_LOG1PL''@/$(GL_GNULIB_LOG1PL)/g' \ -e 's/@''GNULIB_LOG2''@/$(GL_GNULIB_LOG2)/g' \ -e 's/@''GNULIB_LOG2F''@/$(GL_GNULIB_LOG2F)/g' \ -e 's/@''GNULIB_LOG2L''@/$(GL_GNULIB_LOG2L)/g' \ -e 's/@''GNULIB_LOGB''@/$(GL_GNULIB_LOGB)/g' \ -e 's/@''GNULIB_LOGBF''@/$(GL_GNULIB_LOGBF)/g' \ -e 's/@''GNULIB_LOGBL''@/$(GL_GNULIB_LOGBL)/g' \ -e 's/@''GNULIB_MODF''@/$(GL_GNULIB_MODF)/g' \ -e 's/@''GNULIB_MODFF''@/$(GL_GNULIB_MODFF)/g' \ -e 's/@''GNULIB_MODFL''@/$(GL_GNULIB_MODFL)/g' \ -e 's/@''GNULIB_POWF''@/$(GL_GNULIB_POWF)/g' \ -e 's/@''GNULIB_REMAINDER''@/$(GL_GNULIB_REMAINDER)/g' \ -e 's/@''GNULIB_REMAINDERF''@/$(GL_GNULIB_REMAINDERF)/g' \ -e 's/@''GNULIB_REMAINDERL''@/$(GL_GNULIB_REMAINDERL)/g' \ -e 's/@''GNULIB_RINT''@/$(GL_GNULIB_RINT)/g' \ -e 's/@''GNULIB_RINTF''@/$(GL_GNULIB_RINTF)/g' \ -e 's/@''GNULIB_RINTL''@/$(GL_GNULIB_RINTL)/g' \ -e 's/@''GNULIB_ROUND''@/$(GL_GNULIB_ROUND)/g' \ -e 's/@''GNULIB_ROUNDF''@/$(GL_GNULIB_ROUNDF)/g' \ -e 's/@''GNULIB_ROUNDL''@/$(GL_GNULIB_ROUNDL)/g' \ -e 's/@''GNULIB_SIGNBIT''@/$(GL_GNULIB_SIGNBIT)/g' \ -e 's/@''GNULIB_SINF''@/$(GL_GNULIB_SINF)/g' \ -e 's/@''GNULIB_SINL''@/$(GL_GNULIB_SINL)/g' \ -e 's/@''GNULIB_SINHF''@/$(GL_GNULIB_SINHF)/g' \ -e 's/@''GNULIB_SQRTF''@/$(GL_GNULIB_SQRTF)/g' \ -e 's/@''GNULIB_SQRTL''@/$(GL_GNULIB_SQRTL)/g' \ -e 's/@''GNULIB_TANF''@/$(GL_GNULIB_TANF)/g' \ -e 's/@''GNULIB_TANL''@/$(GL_GNULIB_TANL)/g' \ -e 's/@''GNULIB_TANHF''@/$(GL_GNULIB_TANHF)/g' \ -e 's/@''GNULIB_TRUNC''@/$(GL_GNULIB_TRUNC)/g' \ -e 's/@''GNULIB_TRUNCF''@/$(GL_GNULIB_TRUNCF)/g' \ -e 's/@''GNULIB_TRUNCL''@/$(GL_GNULIB_TRUNCL)/g' \ -e 's/@''GNULIB_TOTALORDER''@/$(GL_GNULIB_TOTALORDER)/g' \ -e 's/@''GNULIB_TOTALORDERF''@/$(GL_GNULIB_TOTALORDERF)/g' \ -e 's/@''GNULIB_TOTALORDERL''@/$(GL_GNULIB_TOTALORDERL)/g' \ -e 's/@''GNULIB_MDA_J0''@/$(GL_GNULIB_MDA_J0)/g' \ -e 's/@''GNULIB_MDA_J1''@/$(GL_GNULIB_MDA_J1)/g' \ -e 's/@''GNULIB_MDA_JN''@/$(GL_GNULIB_MDA_JN)/g' \ -e 's/@''GNULIB_MDA_Y0''@/$(GL_GNULIB_MDA_Y0)/g' \ -e 's/@''GNULIB_MDA_Y1''@/$(GL_GNULIB_MDA_Y1)/g' \ -e 's/@''GNULIB_MDA_YN''@/$(GL_GNULIB_MDA_YN)/g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \ -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \ -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \ -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \ -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \ -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \ -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \ -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \ -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \ -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \ -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \ -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \ -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \ -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \ -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \ -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \ -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \ -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \ -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \ -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \ -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \ -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \ -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \ -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \ -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \ -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \ -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \ -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \ -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \ -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \ -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \ -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \ -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \ -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \ -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \ -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \ -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \ -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \ -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \ -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \ -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \ -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \ -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \ -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \ -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \ -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \ -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \ -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \ -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \ -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \ -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \ -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \ -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \ -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \ -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \ -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \ -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \ -e 's|@''HAVE_TOTALORDER''@|$(HAVE_TOTALORDER)|g' \ -e 's|@''HAVE_TOTALORDERF''@|$(HAVE_TOTALORDERF)|g' \ -e 's|@''HAVE_TOTALORDERL''@|$(HAVE_TOTALORDERL)|g' \ < $@-t2 > $@-t3 $(AM_V_at)sed \ -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \ -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \ -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \ -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \ -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \ -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \ -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \ -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \ -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \ -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \ -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \ -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \ -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \ -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \ -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \ -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \ -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \ -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \ -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \ -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \ -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \ -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \ -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \ < $@-t3 > $@-t4 $(AM_V_at)sed \ -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \ -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \ -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \ -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \ -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \ -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \ -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \ -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \ -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \ -e 's|@''REPLACE_EXPL''@|$(REPLACE_EXPL)|g' \ -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \ -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \ -e 's|@''REPLACE_EXPM1L''@|$(REPLACE_EXPM1L)|g' \ -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \ -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \ -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \ -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \ -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \ -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \ -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \ -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \ -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \ -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \ -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \ -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \ -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \ -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \ -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \ -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \ -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \ -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ < $@-t4 > $@-t5 $(AM_V_at)sed \ -e 's|@''REPLACE_LDEXP''@|$(REPLACE_LDEXP)|g' \ -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \ -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \ -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \ -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \ -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \ -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \ -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \ -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \ -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \ -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \ -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \ -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \ -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \ -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \ -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \ -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \ -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \ -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \ -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \ -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \ -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \ -e 's|@''REPLACE_RINTL''@|$(REPLACE_RINTL)|g' \ -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ -e 's|@''REPLACE_SIGNBIT_USING_BUILTINS''@|$(REPLACE_SIGNBIT_USING_BUILTINS)|g' \ -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \ -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \ -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \ -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \ -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \ -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \ -e 's|@''REPLACE_TOTALORDER''@|$(REPLACE_TOTALORDER)|g' \ -e 's|@''REPLACE_TOTALORDERF''@|$(REPLACE_TOTALORDERF)|g' \ -e 's|@''REPLACE_TOTALORDERL''@|$(REPLACE_TOTALORDERL)|g' \ -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \ -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \ -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t5 > $@-t6 $(AM_V_at)rm -f $@-t1 $@-t2 $@-t3 $@-t4 $@-t5 $(AM_V_at)mv $@-t6 $@ MOSTLYCLEANFILES += math.h math.h-t1 math.h-t2 math.h-t3 math.h-t4 math.h-t5 math.h-t6 EXTRA_DIST += math.in.h ## end gnulib module math ## begin gnulib module mbchar libgnu_la_SOURCES += mbchar.c EXTRA_DIST += mbchar.h ## end gnulib module mbchar ## begin gnulib module mbrtoc32 if GL_COND_OBJ_MBRTOC32 libgnu_la_SOURCES += mbrtoc32.c endif EXTRA_DIST += lc-charset-dispatch.c lc-charset-dispatch.h mbrtowc-impl-utf8.h mbrtowc-impl.h mbtowc-lock.c mbtowc-lock.h windows-initguard.h EXTRA_libgnu_la_SOURCES += lc-charset-dispatch.c mbtowc-lock.c ## end gnulib module mbrtoc32 ## begin gnulib module mbrtowc if GL_COND_OBJ_MBRTOWC libgnu_la_SOURCES += mbrtowc.c endif EXTRA_DIST += lc-charset-dispatch.c lc-charset-dispatch.h mbrtowc-impl-utf8.h mbrtowc-impl.h mbtowc-lock.c mbtowc-lock.h windows-initguard.h EXTRA_libgnu_la_SOURCES += lc-charset-dispatch.c mbtowc-lock.c ## end gnulib module mbrtowc ## begin gnulib module mbschr libgnu_la_SOURCES += mbschr.c ## end gnulib module mbschr ## begin gnulib module mbsinit if GL_COND_OBJ_MBSINIT libgnu_la_SOURCES += mbsinit.c endif ## end gnulib module mbsinit ## begin gnulib module mbspbrk libgnu_la_SOURCES += mbspbrk.c ## end gnulib module mbspbrk ## begin gnulib module mbsspn libgnu_la_SOURCES += mbsspn.c ## end gnulib module mbsspn ## begin gnulib module mbstok_r libgnu_la_SOURCES += mbstok_r.c ## end gnulib module mbstok_r ## begin gnulib module mbszero libgnu_la_SOURCES += mbszero.c ## end gnulib module mbszero ## begin gnulib module mbtowc if GL_COND_OBJ_MBTOWC libgnu_la_SOURCES += mbtowc.c endif EXTRA_DIST += mbtowc-impl.h ## end gnulib module mbtowc ## begin gnulib module mbuiterf libgnu_la_SOURCES += mbuiterf.h mbuiterf.c ## end gnulib module mbuiterf ## begin gnulib module memchr if GL_COND_OBJ_MEMCHR libgnu_la_SOURCES += memchr.c endif EXTRA_DIST += memchr.valgrind ## end gnulib module memchr ## begin gnulib module memmove if GL_COND_OBJ_MEMMOVE libgnu_la_SOURCES += memmove.c endif ## end gnulib module memmove ## begin gnulib module mempcpy if GL_COND_OBJ_MEMPCPY libgnu_la_SOURCES += mempcpy.c endif ## end gnulib module mempcpy ## begin gnulib module memrchr if GL_COND_OBJ_MEMRCHR libgnu_la_SOURCES += memrchr.c endif ## end gnulib module memrchr ## begin gnulib module minmax libgnu_la_SOURCES += minmax.h ## end gnulib module minmax ## begin gnulib module mktime EXTRA_DIST += mktime-internal.h mktime.c EXTRA_libgnu_la_SOURCES += mktime.c ## end gnulib module mktime ## begin gnulib module msvc-inval if GL_COND_OBJ_MSVC_INVAL libgnu_la_SOURCES += msvc-inval.c endif EXTRA_DIST += msvc-inval.h ## end gnulib module msvc-inval ## begin gnulib module msvc-nothrow if GL_COND_OBJ_MSVC_NOTHROW libgnu_la_SOURCES += msvc-nothrow.c endif EXTRA_DIST += msvc-nothrow.h ## end gnulib module msvc-nothrow ## begin gnulib module nl_langinfo if GL_COND_OBJ_NL_LANGINFO libgnu_la_SOURCES += nl_langinfo.c endif if GL_COND_OBJ_NL_LANGINFO_LOCK libgnu_la_SOURCES += nl_langinfo-lock.c endif EXTRA_DIST += windows-initguard.h ## end gnulib module nl_langinfo ## begin gnulib module nproc libgnu_la_SOURCES += nproc.c EXTRA_DIST += nproc.h ## end gnulib module nproc ## begin gnulib module open if GL_COND_OBJ_OPEN libgnu_la_SOURCES += open.c endif ## end gnulib module open ## begin gnulib module openat if GL_COND_OBJ_OPENAT libgnu_la_SOURCES += openat.c endif ## end gnulib module openat ## begin gnulib module openat-die libgnu_la_SOURCES += openat-die.c ## end gnulib module openat-die ## begin gnulib module openat-h EXTRA_DIST += openat.h ## end gnulib module openat-h ## begin gnulib module pathmax EXTRA_DIST += pathmax.h ## end gnulib module pathmax ## begin gnulib module pipe-posix if GL_COND_OBJ_PIPE libgnu_la_SOURCES += pipe.c endif ## end gnulib module pipe-posix ## begin gnulib module rawmemchr if GL_COND_OBJ_RAWMEMCHR libgnu_la_SOURCES += rawmemchr.c endif EXTRA_DIST += rawmemchr.valgrind ## end gnulib module rawmemchr ## begin gnulib module realloc-gnu EXTRA_DIST += realloc.c EXTRA_libgnu_la_SOURCES += realloc.c ## end gnulib module realloc-gnu ## begin gnulib module realloc-posix EXTRA_DIST += realloc.c EXTRA_libgnu_la_SOURCES += realloc.c ## end gnulib module realloc-posix ## begin gnulib module regex if GL_COND_OBJ_REGEX libgnu_la_SOURCES += regex.c endif EXTRA_DIST += regcomp.c regex.h regex_internal.c regex_internal.h regexec.c EXTRA_libgnu_la_SOURCES += regcomp.c regex_internal.c regexec.c ## end gnulib module regex ## begin gnulib module root-uid EXTRA_DIST += root-uid.h ## end gnulib module root-uid ## begin gnulib module save-cwd libgnu_la_SOURCES += save-cwd.c EXTRA_DIST += save-cwd.h ## end gnulib module save-cwd ## begin gnulib module secure_getenv if GL_COND_OBJ_SECURE_GETENV libgnu_la_SOURCES += secure_getenv.c endif ## end gnulib module secure_getenv ## begin gnulib module select if GL_COND_OBJ_SELECT libgnu_la_SOURCES += select.c endif ## end gnulib module select ## begin gnulib module setlocale-null libgnu_la_SOURCES += setlocale_null.c if GL_COND_OBJ_SETLOCALE_LOCK libgnu_la_SOURCES += setlocale-lock.c endif EXTRA_DIST += setlocale_null.h windows-initguard.h ## end gnulib module setlocale-null ## begin gnulib module signal-h BUILT_SOURCES += signal.h # We need the following in order to create <signal.h> when the system # doesn't have a complete one. signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GL_GNULIB_PTHREAD_SIGMASK)/g' \ -e 's/@''GNULIB_RAISE''@/$(GL_GNULIB_RAISE)/g' \ -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GL_GNULIB_SIGNAL_H_SIGPIPE)/g' \ -e 's/@''GNULIB_SIGPROCMASK''@/$(GL_GNULIB_SIGPROCMASK)/g' \ -e 's/@''GNULIB_SIGACTION''@/$(GL_GNULIB_SIGACTION)/g' \ -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \ -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \ -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \ -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \ -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/signal.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += signal.h signal.h-t EXTRA_DIST += signal.in.h ## end gnulib module signal-h ## begin gnulib module signbit if GL_COND_OBJ_SIGNBIT3 libgnu_la_SOURCES += signbitf.c signbitd.c signbitl.c endif EXTRA_DIST += float+.h ## end gnulib module signbit ## begin gnulib module size_max libgnu_la_SOURCES += size_max.h ## end gnulib module size_max ## begin gnulib module sleep if GL_COND_OBJ_SLEEP libgnu_la_SOURCES += sleep.c endif ## end gnulib module sleep ## begin gnulib module snippet/_Noreturn # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H=$(srcdir)/_Noreturn.h EXTRA_DIST += _Noreturn.h ## end gnulib module snippet/_Noreturn ## begin gnulib module snippet/arg-nonnull # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H=$(srcdir)/arg-nonnull.h EXTRA_DIST += arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/c++defs # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H=$(srcdir)/c++defs.h EXTRA_DIST += c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/warn-on-use # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H=$(srcdir)/warn-on-use.h EXTRA_DIST += warn-on-use.h ## end gnulib module snippet/warn-on-use ## begin gnulib module sockets libgnu_la_SOURCES += sockets.h sockets.c EXTRA_DIST += w32sock.h ## end gnulib module sockets ## begin gnulib module stat if GL_COND_OBJ_STAT libgnu_la_SOURCES += stat.c endif EXTRA_DIST += stat-w32.c stat-w32.h EXTRA_libgnu_la_SOURCES += stat-w32.c ## end gnulib module stat ## begin gnulib module stat-time libgnu_la_SOURCES += stat-time.c EXTRA_DIST += stat-time.h ## end gnulib module stat-time ## begin gnulib module stdckdint BUILT_SOURCES += $(STDCKDINT_H) # We need the following in order to create <stdckdint.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDCKDINT_H stdckdint.h: stdckdint.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ $(srcdir)/stdckdint.in.h > $@-t $(AM_V_at)mv $@-t $@ else stdckdint.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdckdint.h stdckdint.h-t EXTRA_DIST += intprops-internal.h stdckdint.in.h ## end gnulib module stdckdint ## begin gnulib module stddef BUILT_SOURCES += $(STDDEF_H) # We need the following in order to create <stddef.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDDEF_H stddef.h: stddef.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ $(srcdir)/stddef.in.h > $@-t $(AM_V_at)mv $@-t $@ else stddef.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stddef.h stddef.h-t EXTRA_DIST += stddef.in.h ## end gnulib module stddef ## begin gnulib module stdint BUILT_SOURCES += $(STDINT_H) # We need the following in order to create <stdint.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDINT_H stdint.h: stdint.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ $(srcdir)/stdint.in.h > $@-t $(AM_V_at)mv $@-t $@ else stdint.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdint.h stdint.h-t EXTRA_DIST += stdint.in.h ## end gnulib module stdint ## begin gnulib module stdio BUILT_SOURCES += stdio.h # We need the following in order to create <stdio.h> when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GL_GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GL_GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GL_GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GL_GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GL_GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GL_GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GL_GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FOPEN_GNU''@/$(GL_GNULIB_FOPEN_GNU)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GL_GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GL_GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GL_GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GL_GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GL_GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GL_GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GL_GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GL_GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GL_GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GL_GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GL_GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GL_GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GL_GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GL_GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GL_GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GL_GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GL_GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GL_GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GL_GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GL_GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GL_GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GL_GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GL_GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GL_GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GL_GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GL_GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GL_GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GL_GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GL_GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GL_GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GL_GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GL_GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GL_GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GL_GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GL_GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GL_GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GL_GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GL_GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GL_GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GL_GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GL_GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GL_GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GL_GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GL_GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GL_GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GL_GNULIB_VSPRINTF_POSIX)/g' \ -e 's/@''GNULIB_MDA_FCLOSEALL''@/$(GL_GNULIB_MDA_FCLOSEALL)/g' \ -e 's/@''GNULIB_MDA_FDOPEN''@/$(GL_GNULIB_MDA_FDOPEN)/g' \ -e 's/@''GNULIB_MDA_FILENO''@/$(GL_GNULIB_MDA_FILENO)/g' \ -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \ -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \ < $(srcdir)/stdio.in.h > $@-t1 $(AM_V_at)sed \ -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_GETW''@|$(HAVE_DECL_GETW)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_PUTW''@|$(HAVE_DECL_PUTW)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FOPEN_FOR_FOPEN_GNU''@|$(REPLACE_FOPEN_FOR_FOPEN_GNU)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t2 > $@-t3 $(AM_V_at)rm -f $@-t1 $@-t2 $(AM_V_at)mv $@-t3 $@ MOSTLYCLEANFILES += stdio.h stdio.h-t1 stdio.h-t2 stdio.h-t3 if GL_COND_OBJ_STDIO_READ libgnu_la_SOURCES += stdio-read.c endif if GL_COND_OBJ_STDIO_WRITE libgnu_la_SOURCES += stdio-write.c endif EXTRA_DIST += stdio.in.h ## end gnulib module stdio ## begin gnulib module stdlib BUILT_SOURCES += stdlib.h # We need the following in order to create <stdlib.h> when the system # doesn't have one that works with the given compiler. stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ -e 's/@''GNULIB__EXIT''@/$(GL_GNULIB__EXIT)/g' \ -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GL_GNULIB_ALIGNED_ALLOC)/g' \ -e 's/@''GNULIB_ATOLL''@/$(GL_GNULIB_ATOLL)/g' \ -e 's/@''GNULIB_CALLOC_GNU''@/$(GL_GNULIB_CALLOC_GNU)/g' \ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GL_GNULIB_CALLOC_POSIX)/g' \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GL_GNULIB_CANONICALIZE_FILE_NAME)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GL_GNULIB_GETLOADAVG)/g' \ -e 's/@''GNULIB_GETPROGNAME''@/$(GL_GNULIB_GETPROGNAME)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GL_GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GL_GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_GNU''@/$(GL_GNULIB_MALLOC_GNU)/g' \ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GL_GNULIB_MALLOC_POSIX)/g' \ -e 's/@''GNULIB_MBSTOWCS''@/$(GL_GNULIB_MBSTOWCS)/g' \ -e 's/@''GNULIB_MBTOWC''@/$(GL_GNULIB_MBTOWC)/g' \ -e 's/@''GNULIB_MKDTEMP''@/$(GL_GNULIB_MKDTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMP''@/$(GL_GNULIB_MKOSTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMPS''@/$(GL_GNULIB_MKOSTEMPS)/g' \ -e 's/@''GNULIB_MKSTEMP''@/$(GL_GNULIB_MKSTEMP)/g' \ -e 's/@''GNULIB_MKSTEMPS''@/$(GL_GNULIB_MKSTEMPS)/g' \ -e 's/@''GNULIB_POSIX_MEMALIGN''@/$(GL_GNULIB_POSIX_MEMALIGN)/g' \ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GL_GNULIB_POSIX_OPENPT)/g' \ -e 's/@''GNULIB_PTSNAME''@/$(GL_GNULIB_PTSNAME)/g' \ -e 's/@''GNULIB_PTSNAME_R''@/$(GL_GNULIB_PTSNAME_R)/g' \ -e 's/@''GNULIB_PUTENV''@/$(GL_GNULIB_PUTENV)/g' \ -e 's/@''GNULIB_QSORT_R''@/$(GL_GNULIB_QSORT_R)/g' \ -e 's/@''GNULIB_RAND''@/$(GL_GNULIB_RAND)/g' \ -e 's/@''GNULIB_RANDOM''@/$(GL_GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GL_GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_GNU''@/$(GL_GNULIB_REALLOC_GNU)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GL_GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALLOCARRAY''@/$(GL_GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GL_GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GL_GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GL_GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GL_GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GL_GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOL''@/$(GL_GNULIB_STRTOL)/g' \ -e 's/@''GNULIB_STRTOLD''@/$(GL_GNULIB_STRTOLD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GL_GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOUL''@/$(GL_GNULIB_STRTOUL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GL_GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GL_GNULIB_SYSTEM_POSIX)/g' \ -e 's/@''GNULIB_UNLOCKPT''@/$(GL_GNULIB_UNLOCKPT)/g' \ -e 's/@''GNULIB_UNSETENV''@/$(GL_GNULIB_UNSETENV)/g' \ -e 's/@''GNULIB_WCTOMB''@/$(GL_GNULIB_WCTOMB)/g' \ -e 's/@''GNULIB_MDA_ECVT''@/$(GL_GNULIB_MDA_ECVT)/g' \ -e 's/@''GNULIB_MDA_FCVT''@/$(GL_GNULIB_MDA_FCVT)/g' \ -e 's/@''GNULIB_MDA_GCVT''@/$(GL_GNULIB_MDA_GCVT)/g' \ -e 's/@''GNULIB_MDA_MKTEMP''@/$(GL_GNULIB_MDA_MKTEMP)/g' \ -e 's/@''GNULIB_MDA_PUTENV''@/$(GL_GNULIB_MDA_PUTENV)/g' \ < $(srcdir)/stdlib.in.h > $@-t1 $(AM_V_at)sed \ -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ALIGNED_ALLOC''@|$(HAVE_ALIGNED_ALLOC)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''HAVE_DECL_ECVT''@|$(HAVE_DECL_ECVT)|g' \ -e 's|@''HAVE_DECL_FCVT''@|$(HAVE_DECL_FCVT)|g' \ -e 's|@''HAVE_DECL_GCVT''@|$(HAVE_DECL_GCVT)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_DECL_PROGRAM_INVOCATION_NAME''@|$(HAVE_DECL_PROGRAM_INVOCATION_NAME)|g' \ -e 's|@''HAVE_GETPROGNAME''@|$(HAVE_GETPROGNAME)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ -e 's|@''HAVE_POSIX_MEMALIGN''@|$(HAVE_POSIX_MEMALIGN)|g' \ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOL''@|$(HAVE_STRTOL)|g' \ -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOUL''@|$(HAVE_STRTOUL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's|@''REPLACE__EXIT''@|$(REPLACE__EXIT)|g' \ -e 's|@''REPLACE_ALIGNED_ALLOC''@|$(REPLACE_ALIGNED_ALLOC)|g' \ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_GNU''@|$(REPLACE_CALLOC_FOR_CALLOC_GNU)|g' \ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_POSIX''@|$(REPLACE_CALLOC_FOR_CALLOC_POSIX)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_GETLOADAVG''@|$(REPLACE_GETLOADAVG)|g' \ -e 's|@''REPLACE_GETPROGNAME''@|$(REPLACE_GETPROGNAME)|g' \ -e 's|@''REPLACE_GETSUBOPT''@|$(REPLACE_GETSUBOPT)|g' \ -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_GNU''@|$(REPLACE_MALLOC_FOR_MALLOC_GNU)|g' \ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_POSIX''@|$(REPLACE_MALLOC_FOR_MALLOC_POSIX)|g' \ -e 's|@''REPLACE_MB_CUR_MAX''@|$(REPLACE_MB_CUR_MAX)|g' \ -e 's|@''REPLACE_MBSTOWCS''@|$(REPLACE_MBSTOWCS)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKOSTEMP''@|$(REPLACE_MKOSTEMP)|g' \ -e 's|@''REPLACE_MKOSTEMPS''@|$(REPLACE_MKOSTEMPS)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_POSIX_MEMALIGN''@|$(REPLACE_POSIX_MEMALIGN)|g' \ -e 's|@''REPLACE_POSIX_OPENPT''@|$(REPLACE_POSIX_OPENPT)|g' \ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ -e 's|@''REPLACE_RAND''@|$(REPLACE_RAND)|g' \ -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_GNU''@|$(REPLACE_REALLOC_FOR_REALLOC_GNU)|g' \ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_POSIX''@|$(REPLACE_REALLOC_FOR_REALLOC_POSIX)|g' \ -e 's|@''REPLACE_REALLOCARRAY''@|$(REPLACE_REALLOCARRAY)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ -e 's|@''REPLACE_STRTOL''@|$(REPLACE_STRTOL)|g' \ -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \ -e 's|@''REPLACE_STRTOLL''@|$(REPLACE_STRTOLL)|g' \ -e 's|@''REPLACE_STRTOUL''@|$(REPLACE_STRTOUL)|g' \ -e 's|@''REPLACE_STRTOULL''@|$(REPLACE_STRTOULL)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t2 > $@-t3 $(AM_V_at)rm -f $@-t1 $@-t2 $(AM_V_at)mv $@-t3 $@ MOSTLYCLEANFILES += stdlib.h stdlib.h-t1 stdlib.h-t2 stdlib.h-t3 EXTRA_DIST += stdlib.in.h ## end gnulib module stdlib ## begin gnulib module strcase if GL_COND_OBJ_STRCASECMP libgnu_la_SOURCES += strcasecmp.c endif if GL_COND_OBJ_STRNCASECMP libgnu_la_SOURCES += strncasecmp.c endif ## end gnulib module strcase ## begin gnulib module strchrnul if GL_COND_OBJ_STRCHRNUL libgnu_la_SOURCES += strchrnul.c endif EXTRA_DIST += strchrnul.valgrind ## end gnulib module strchrnul ## begin gnulib module strdup-posix if GL_COND_OBJ_STRDUP libgnu_la_SOURCES += strdup.c endif ## end gnulib module strdup-posix ## begin gnulib module streq EXTRA_DIST += streq.h ## end gnulib module streq ## begin gnulib module strerror if GL_COND_OBJ_STRERROR libgnu_la_SOURCES += strerror.c endif ## end gnulib module strerror ## begin gnulib module strerror-override if GL_COND_OBJ_STRERROR_OVERRIDE libgnu_la_SOURCES += strerror-override.c endif EXTRA_DIST += strerror-override.h ## end gnulib module strerror-override ## begin gnulib module string BUILT_SOURCES += string.h # We need the following in order to create <string.h> when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GL_GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GL_GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GL_GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GL_GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GL_GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GL_GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GL_GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GL_GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GL_GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GL_GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GL_GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GL_GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GL_GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GL_GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GL_GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GL_GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GL_GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GL_GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GL_GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GL_GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GL_GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_MEMSET_EXPLICIT''@/$(GL_GNULIB_MEMSET_EXPLICIT)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GL_GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GL_GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GL_GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GL_GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GL_GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GL_GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GL_GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GL_GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GL_GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GL_GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GL_GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GL_GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GL_GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GL_GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GL_GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GL_GNULIB_STRERRORNAME_NP)/g' \ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GL_GNULIB_SIGABBREV_NP)/g' \ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GL_GNULIB_SIGDESCR_NP)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GL_GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GL_GNULIB_STRVERSCMP)/g' \ -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GL_GNULIB_MDA_MEMCCPY)/g' \ -e 's/@''GNULIB_MDA_STRDUP''@/$(GL_GNULIB_MDA_STRDUP)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ < $(srcdir)/string.in.h > $@-t1 $(AM_V_at)sed \ -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_MEMSET_EXPLICIT''@|$(HAVE_MEMSET_EXPLICIT)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_STRERRORNAME_NP''@|$(HAVE_STRERRORNAME_NP)|g' \ -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \ -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_FFSLL''@|$(REPLACE_FFSLL)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_MEMPCPY''@|$(REPLACE_MEMPCPY)|g' \ -e 's|@''REPLACE_MEMSET_EXPLICIT''@|$(REPLACE_MEMSET_EXPLICIT)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_STPCPY''@|$(REPLACE_STPCPY)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRERRORNAME_NP''@|$(REPLACE_STRERRORNAME_NP)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''REPLACE_STRVERSCMP''@|$(REPLACE_STRVERSCMP)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t1 > $@-t2 $(AM_V_at)rm -f $@-t1 $(AM_V_at)mv $@-t2 $@ MOSTLYCLEANFILES += string.h string.h-t1 string.h-t2 EXTRA_DIST += string.in.h ## end gnulib module string ## begin gnulib module strings BUILT_SOURCES += strings.h # We need the following in order to create <strings.h> when the system # doesn't have one that works with the given compiler. strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ -e 's/@''GNULIB_FFS''@/$(GL_GNULIB_FFS)/g' \ -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/strings.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += strings.h strings.h-t EXTRA_DIST += strings.in.h ## end gnulib module strings ## begin gnulib module strndup if GL_COND_OBJ_STRNDUP libgnu_la_SOURCES += strndup.c endif ## end gnulib module strndup ## begin gnulib module strnlen if GL_COND_OBJ_STRNLEN libgnu_la_SOURCES += strnlen.c endif ## end gnulib module strnlen ## begin gnulib module strnlen1 libgnu_la_SOURCES += strnlen1.h strnlen1.c ## end gnulib module strnlen1 ## begin gnulib module strptime if GL_COND_OBJ_STRPTIME libgnu_la_SOURCES += strptime.c endif ## end gnulib module strptime ## begin gnulib module strtod if GL_COND_OBJ_STRTOD libgnu_la_SOURCES += strtod.c endif ## end gnulib module strtod ## begin gnulib module strtok_r if GL_COND_OBJ_STRTOK_R libgnu_la_SOURCES += strtok_r.c endif ## end gnulib module strtok_r ## begin gnulib module sys_select BUILT_SOURCES += sys/select.h # We need the following in order to create <sys/select.h> when the system # doesn't have one that works with the given compiler. sys/select.h: sys_select.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_SELECT_H''@|$(NEXT_SYS_SELECT_H)|g' \ -e 's|@''HAVE_SYS_SELECT_H''@|$(HAVE_SYS_SELECT_H)|g' \ -e 's/@''GNULIB_PSELECT''@/$(GL_GNULIB_PSELECT)/g' \ -e 's/@''GNULIB_SELECT''@/$(GL_GNULIB_SELECT)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's|@''HAVE_PSELECT''@|$(HAVE_PSELECT)|g' \ -e 's|@''REPLACE_PSELECT''@|$(REPLACE_PSELECT)|g' \ -e 's|@''REPLACE_SELECT''@|$(REPLACE_SELECT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_select.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/select.h sys/select.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_select.in.h ## end gnulib module sys_select ## begin gnulib module sys_socket BUILT_SOURCES += sys/socket.h libgnu_la_SOURCES += sys_socket.c # We need the following in order to create <sys/socket.h> when the system # doesn't have one that works with the given compiler. sys/socket.h: sys_socket.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_SOCKET_H''@|$(NEXT_SYS_SOCKET_H)|g' \ -e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_SOCKET''@/$(GL_GNULIB_SOCKET)/g' \ -e 's/@''GNULIB_CONNECT''@/$(GL_GNULIB_CONNECT)/g' \ -e 's/@''GNULIB_ACCEPT''@/$(GL_GNULIB_ACCEPT)/g' \ -e 's/@''GNULIB_BIND''@/$(GL_GNULIB_BIND)/g' \ -e 's/@''GNULIB_GETPEERNAME''@/$(GL_GNULIB_GETPEERNAME)/g' \ -e 's/@''GNULIB_GETSOCKNAME''@/$(GL_GNULIB_GETSOCKNAME)/g' \ -e 's/@''GNULIB_GETSOCKOPT''@/$(GL_GNULIB_GETSOCKOPT)/g' \ -e 's/@''GNULIB_LISTEN''@/$(GL_GNULIB_LISTEN)/g' \ -e 's/@''GNULIB_RECV''@/$(GL_GNULIB_RECV)/g' \ -e 's/@''GNULIB_SEND''@/$(GL_GNULIB_SEND)/g' \ -e 's/@''GNULIB_RECVFROM''@/$(GL_GNULIB_RECVFROM)/g' \ -e 's/@''GNULIB_SENDTO''@/$(GL_GNULIB_SENDTO)/g' \ -e 's/@''GNULIB_SETSOCKOPT''@/$(GL_GNULIB_SETSOCKOPT)/g' \ -e 's/@''GNULIB_SHUTDOWN''@/$(GL_GNULIB_SHUTDOWN)/g' \ -e 's/@''GNULIB_ACCEPT4''@/$(GL_GNULIB_ACCEPT4)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \ -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY''@|$(HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY)|g' \ -e 's|@''HAVE_SA_FAMILY_T''@|$(HAVE_SA_FAMILY_T)|g' \ -e 's|@''HAVE_ACCEPT4''@|$(HAVE_ACCEPT4)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_socket.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/socket.h sys/socket.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_socket.in.h ## end gnulib module sys_socket ## begin gnulib module sys_stat BUILT_SOURCES += sys/stat.h # We need the following in order to create <sys/stat.h> when the system # has one that is incomplete. sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ -e 's/@''GNULIB_CHMOD''@/$(GL_GNULIB_CHMOD)/g' \ -e 's/@''GNULIB_FCHMODAT''@/$(GL_GNULIB_FCHMODAT)/g' \ -e 's/@''GNULIB_FSTAT''@/$(GL_GNULIB_FSTAT)/g' \ -e 's/@''GNULIB_FSTATAT''@/$(GL_GNULIB_FSTATAT)/g' \ -e 's/@''GNULIB_FUTIMENS''@/$(GL_GNULIB_FUTIMENS)/g' \ -e 's/@''GNULIB_GETUMASK''@/$(GL_GNULIB_GETUMASK)/g' \ -e 's/@''GNULIB_LCHMOD''@/$(GL_GNULIB_LCHMOD)/g' \ -e 's/@''GNULIB_LSTAT''@/$(GL_GNULIB_LSTAT)/g' \ -e 's/@''GNULIB_MKDIR''@/$(GL_GNULIB_MKDIR)/g' \ -e 's/@''GNULIB_MKDIRAT''@/$(GL_GNULIB_MKDIRAT)/g' \ -e 's/@''GNULIB_MKFIFO''@/$(GL_GNULIB_MKFIFO)/g' \ -e 's/@''GNULIB_MKFIFOAT''@/$(GL_GNULIB_MKFIFOAT)/g' \ -e 's/@''GNULIB_MKNOD''@/$(GL_GNULIB_MKNOD)/g' \ -e 's/@''GNULIB_MKNODAT''@/$(GL_GNULIB_MKNODAT)/g' \ -e 's/@''GNULIB_STAT''@/$(GL_GNULIB_STAT)/g' \ -e 's/@''GNULIB_UTIMENSAT''@/$(GL_GNULIB_UTIMENSAT)/g' \ -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GL_GNULIB_OVERRIDES_STRUCT_STAT)/g' \ -e 's/@''GNULIB_MDA_CHMOD''@/$(GL_GNULIB_MDA_CHMOD)/g' \ -e 's/@''GNULIB_MDA_MKDIR''@/$(GL_GNULIB_MDA_MKDIR)/g' \ -e 's/@''GNULIB_MDA_UMASK''@/$(GL_GNULIB_MDA_UMASK)/g' \ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ -e 's|@''HAVE_GETUMASK''@|$(HAVE_GETUMASK)|g' \ -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ -e 's|@''REPLACE_CHMOD''@|$(REPLACE_CHMOD)|g' \ -e 's|@''REPLACE_FCHMODAT''@|$(REPLACE_FCHMODAT)|g' \ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ -e 's|@''REPLACE_MKFIFOAT''@|$(REPLACE_MKFIFOAT)|g' \ -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ -e 's|@''REPLACE_MKNODAT''@|$(REPLACE_MKNODAT)|g' \ -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_stat.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_stat.in.h ## end gnulib module sys_stat ## begin gnulib module sys_time BUILT_SOURCES += sys/time.h # We need the following in order to create <sys/time.h> when the system # doesn't have one that works with the given compiler. sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GL_GNULIB_GETTIMEOFDAY)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \ -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_time.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/time.h sys/time.h-t EXTRA_DIST += sys_time.in.h ## end gnulib module sys_time ## begin gnulib module sys_types BUILT_SOURCES += sys/types.h # We need the following in order to create <sys/types.h> when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ $(srcdir)/sys_types.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/types.h sys/types.h-t EXTRA_DIST += sys_types.in.h ## end gnulib module sys_types ## begin gnulib module sys_uio BUILT_SOURCES += sys/uio.h # We need the following in order to create <sys/uio.h> when the system # doesn't have one that works with the given compiler. sys/uio.h: sys_uio.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_UIO_H''@|$(NEXT_SYS_UIO_H)|g' \ -e 's|@''HAVE_SYS_UIO_H''@|$(HAVE_SYS_UIO_H)|g' \ $(srcdir)/sys_uio.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/uio.h sys/uio.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_uio.in.h ## end gnulib module sys_uio ## begin gnulib module sys_wait BUILT_SOURCES += sys/wait.h # We need the following in order to create <sys/wait.h> when the system # has one that is incomplete. sys/wait.h: sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ -e 's/@''GNULIB_WAITPID''@/$(GL_GNULIB_WAITPID)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_wait.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/wait.h sys/wait.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_wait.in.h ## end gnulib module sys_wait ## begin gnulib module sysexits BUILT_SOURCES += $(SYSEXITS_H) # We need the following in order to create <sysexits.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_SYSEXITS_H sysexits.h: sysexits.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_SYSEXITS_H''@|$(HAVE_SYSEXITS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYSEXITS_H''@|$(NEXT_SYSEXITS_H)|g' \ $(srcdir)/sysexits.in.h > $@-t $(AM_V_at)mv $@-t $@ else sysexits.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += sysexits.h sysexits.h-t EXTRA_DIST += sysexits.in.h ## end gnulib module sysexits ## begin gnulib module threadlib libgnu_la_SOURCES += glthread/threadlib.c ## end gnulib module threadlib ## begin gnulib module time if GL_COND_OBJ_TIME libgnu_la_SOURCES += time.c endif ## end gnulib module time ## begin gnulib module time-h BUILT_SOURCES += time.h # We need the following in order to create <time.h> when the system # doesn't have one that works with the given compiler. time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ -e 's/@''GNULIB_CTIME''@/$(GL_GNULIB_CTIME)/g' \ -e 's/@''GNULIB_LOCALTIME''@/$(GL_GNULIB_LOCALTIME)/g' \ -e 's/@''GNULIB_MKTIME''@/$(GL_GNULIB_MKTIME)/g' \ -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \ -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \ -e 's/@''GNULIB_TIME''@/$(GL_GNULIB_TIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \ -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \ -e 's/@''GNULIB_TIME_R''@/$(GL_GNULIB_TIME_R)/g' \ -e 's/@''GNULIB_TIME_RZ''@/$(GL_GNULIB_TIME_RZ)/g' \ -e 's/@''GNULIB_TZSET''@/$(GL_GNULIB_TZSET)/g' \ -e 's/@''GNULIB_MDA_TZSET''@/$(GL_GNULIB_MDA_TZSET)/g' \ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ -e 's|@''HAVE_TIMESPEC_GET''@|$(HAVE_TIMESPEC_GET)|g' \ -e 's|@''HAVE_TIMESPEC_GETRES''@|$(HAVE_TIMESPEC_GETRES)|g' \ -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ -e 's|@''REPLACE_TIME''@|$(REPLACE_TIME)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ -e 's|@''REPLACE_TIMESPEC_GET''@|$(REPLACE_TIMESPEC_GET)|g' \ -e 's|@''REPLACE_TIMESPEC_GETRES''@|$(REPLACE_TIMESPEC_GETRES)|g' \ -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_TIME_UTC''@|$(TIME_H_DEFINES_TIME_UTC)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/time.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += time.h time.h-t EXTRA_DIST += time.in.h ## end gnulib module time-h ## begin gnulib module time_r if GL_COND_OBJ_TIME_R libgnu_la_SOURCES += time_r.c endif ## end gnulib module time_r ## begin gnulib module uchar BUILT_SOURCES += uchar.h uchar.h: uchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_UCHAR_H''@/$(HAVE_UCHAR_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UCHAR_H''@|$(NEXT_UCHAR_H)|g' \ -e 's|@''CXX_HAS_CHAR8_TYPE''@|$(CXX_HAS_CHAR8_TYPE)|g' \ -e 's|@''CXX_HAS_UCHAR_TYPES''@|$(CXX_HAS_UCHAR_TYPES)|g' \ -e 's|@''SMALL_WCHAR_T''@|$(SMALL_WCHAR_T)|g' \ -e 's|@''GNULIBHEADERS_OVERRIDE_CHAR8_T''@|$(GNULIBHEADERS_OVERRIDE_CHAR8_T)|g' \ -e 's|@''GNULIBHEADERS_OVERRIDE_CHAR16_T''@|$(GNULIBHEADERS_OVERRIDE_CHAR16_T)|g' \ -e 's|@''GNULIBHEADERS_OVERRIDE_CHAR32_T''@|$(GNULIBHEADERS_OVERRIDE_CHAR32_T)|g' \ -e 's/@''GNULIB_BTOC32''@/$(GL_GNULIB_BTOC32)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GL_GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_C32ISALNUM''@/$(GL_GNULIB_C32ISALNUM)/g' \ -e 's/@''GNULIB_C32ISALPHA''@/$(GL_GNULIB_C32ISALPHA)/g' \ -e 's/@''GNULIB_C32ISBLANK''@/$(GL_GNULIB_C32ISBLANK)/g' \ -e 's/@''GNULIB_C32ISCNTRL''@/$(GL_GNULIB_C32ISCNTRL)/g' \ -e 's/@''GNULIB_C32ISDIGIT''@/$(GL_GNULIB_C32ISDIGIT)/g' \ -e 's/@''GNULIB_C32ISGRAPH''@/$(GL_GNULIB_C32ISGRAPH)/g' \ -e 's/@''GNULIB_C32ISLOWER''@/$(GL_GNULIB_C32ISLOWER)/g' \ -e 's/@''GNULIB_C32ISPRINT''@/$(GL_GNULIB_C32ISPRINT)/g' \ -e 's/@''GNULIB_C32ISPUNCT''@/$(GL_GNULIB_C32ISPUNCT)/g' \ -e 's/@''GNULIB_C32ISSPACE''@/$(GL_GNULIB_C32ISSPACE)/g' \ -e 's/@''GNULIB_C32ISUPPER''@/$(GL_GNULIB_C32ISUPPER)/g' \ -e 's/@''GNULIB_C32ISXDIGIT''@/$(GL_GNULIB_C32ISXDIGIT)/g' \ -e 's/@''GNULIB_C32TOLOWER''@/$(GL_GNULIB_C32TOLOWER)/g' \ -e 's/@''GNULIB_C32TOUPPER''@/$(GL_GNULIB_C32TOUPPER)/g' \ -e 's/@''GNULIB_C32WIDTH''@/$(GL_GNULIB_C32WIDTH)/g' \ -e 's/@''GNULIB_C32RTOMB''@/$(GL_GNULIB_C32RTOMB)/g' \ -e 's/@''GNULIB_C32SNRTOMBS''@/$(GL_GNULIB_C32SNRTOMBS)/g' \ -e 's/@''GNULIB_C32SRTOMBS''@/$(GL_GNULIB_C32SRTOMBS)/g' \ -e 's/@''GNULIB_C32STOMBS''@/$(GL_GNULIB_C32STOMBS)/g' \ -e 's/@''GNULIB_C32SWIDTH''@/$(GL_GNULIB_C32SWIDTH)/g' \ -e 's/@''GNULIB_C32TOB''@/$(GL_GNULIB_C32TOB)/g' \ -e 's/@''GNULIB_C32_APPLY_MAPPING''@/$(GL_GNULIB_C32_APPLY_MAPPING)/g' \ -e 's/@''GNULIB_C32_APPLY_TYPE_TEST''@/$(GL_GNULIB_C32_APPLY_TYPE_TEST)/g' \ -e 's/@''GNULIB_C32_GET_MAPPING''@/$(GL_GNULIB_C32_GET_MAPPING)/g' \ -e 's/@''GNULIB_C32_GET_TYPE_TEST''@/$(GL_GNULIB_C32_GET_TYPE_TEST)/g' \ -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \ -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \ -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \ -e 's/@''GNULIB_MBRTOC16''@/$(GL_GNULIB_MBRTOC16)/g' \ -e 's/@''GNULIB_MBRTOC32''@/$(GL_GNULIB_MBRTOC32)/g' \ -e 's/@''GNULIB_MBSNRTOC32S''@/$(GL_GNULIB_MBSNRTOC32S)/g' \ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GL_GNULIB_MBSNRTOWCS)/g' \ -e 's/@''GNULIB_MBSRTOC32S''@/$(GL_GNULIB_MBSRTOC32S)/g' \ -e 's/@''GNULIB_MBSRTOWCS''@/$(GL_GNULIB_MBSRTOWCS)/g' \ -e 's/@''GNULIB_MBSTOC32S''@/$(GL_GNULIB_MBSTOC32S)/g' \ -e 's/@''GNULIB_TOWCTRANS''@/$(GL_GNULIB_TOWCTRANS)/g' \ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GL_GNULIB_WCSNRTOMBS)/g' \ -e 's/@''GNULIB_WCSRTOMBS''@/$(GL_GNULIB_WCSRTOMBS)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GL_GNULIB_WCSWIDTH)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GL_GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_WCTRANS''@/$(GL_GNULIB_WCTRANS)/g' \ -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \ -e 's/@''GNULIB_WCWIDTH''@/$(GL_GNULIB_WCWIDTH)/g' \ -e 's|@''HAVE_C32RTOMB''@|$(HAVE_C32RTOMB)|g' \ -e 's|@''HAVE_MBRTOC16''@|$(HAVE_MBRTOC16)|g' \ -e 's|@''HAVE_MBRTOC32''@|$(HAVE_MBRTOC32)|g' \ -e 's|@''REPLACE_C32RTOMB''@|$(REPLACE_C32RTOMB)|g' \ -e 's|@''REPLACE_MBRTOC16''@|$(REPLACE_MBRTOC16)|g' \ -e 's|@''REPLACE_MBRTOC32''@|$(REPLACE_MBRTOC32)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/uchar.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += uchar.h uchar.h-t EXTRA_DIST += uchar.in.h ## end gnulib module uchar ## begin gnulib module unicase/base BUILT_SOURCES += $(LIBUNISTRING_UNICASE_H) unicase.h: unicase.in.h $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''HAVE_UNISTRING_WOE32DLL_H''@|$(HAVE_UNISTRING_WOE32DLL_H)|g' \ -e 's/@''GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE''@/$(GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE''@/$(GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE)/g' \ $(srcdir)/unicase.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += unicase.h unicase.h-t EXTRA_DIST += unicase.in.h ## end gnulib module unicase/base ## begin gnulib module unicase/tolower if LIBUNISTRING_COMPILE_UNICASE_TOLOWER libgnu_la_SOURCES += unicase/tolower.c endif EXTRA_DIST += unicase/simple-mapping.h unicase/tolower.h ## end gnulib module unicase/tolower ## begin gnulib module unictype/base BUILT_SOURCES += $(LIBUNISTRING_UNICTYPE_H) unictype.h: unictype.in.h $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''HAVE_UNISTRING_WOE32DLL_H''@|$(HAVE_UNISTRING_WOE32DLL_H)|g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE)/g' \ < $(srcdir)/unictype.in.h > $@-t1 $(AM_V_at)sed \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE)/g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE)/g' \ < $@-t2 > $@-t3 $(AM_V_at)sed \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE)/g' \ < $@-t3 > $@-t4 $(AM_V_at)rm -f $@-t1 $@-t2 $@-t3 $(AM_V_at)mv $@-t4 $@ MOSTLYCLEANFILES += unictype.h unictype.h-t1 unictype.h-t2 unictype.h-t3 unictype.h-t4 EXTRA_DIST += unictype.in.h ## end gnulib module unictype/base ## begin gnulib module unictype/ctype-alnum if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM libgnu_la_SOURCES += unictype/ctype_alnum.c endif EXTRA_DIST += unictype/bitmap.h unictype/ctype_alnum.h ## end gnulib module unictype/ctype-alnum ## begin gnulib module unictype/ctype-alpha if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA libgnu_la_SOURCES += unictype/ctype_alpha.c endif EXTRA_DIST += unictype/bitmap.h unictype/ctype_alpha.h ## end gnulib module unictype/ctype-alpha ## begin gnulib module unictype/ctype-blank if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK libgnu_la_SOURCES += unictype/ctype_blank.c endif EXTRA_DIST += unictype/bitmap.h unictype/ctype_blank.h ## end gnulib module unictype/ctype-blank ## begin gnulib module unictype/ctype-cntrl if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL libgnu_la_SOURCES += unictype/ctype_cntrl.c endif EXTRA_DIST += unictype/bitmap.h unictype/ctype_cntrl.h ## end gnulib module unictype/ctype-cntrl ## begin gnulib module unictype/ctype-digit if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT libgnu_la_SOURCES += unictype/ctype_digit.c endif EXTRA_DIST += unictype/bitmap.h unictype/ctype_digit.h ## end gnulib module unictype/ctype-digit ## begin gnulib module unictype/ctype-graph if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH libgnu_la_SOURCES += unictype/ctype_graph.c endif EXTRA_DIST += unictype/bitmap.h unictype/ctype_graph.h ## end gnulib module unictype/ctype-graph ## begin gnulib module unictype/ctype-lower if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER libgnu_la_SOURCES += unictype/ctype_lower.c endif EXTRA_DIST += unictype/bitmap.h unictype/ctype_lower.h ## end gnulib module unictype/ctype-lower ## begin gnulib module unictype/ctype-print if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT libgnu_la_SOURCES += unictype/ctype_print.c endif EXTRA_DIST += unictype/bitmap.h unictype/ctype_print.h ## end gnulib module unictype/ctype-print ## begin gnulib module unictype/ctype-punct if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT libgnu_la_SOURCES += unictype/ctype_punct.c endif EXTRA_DIST += unictype/bitmap.h unictype/ctype_punct.h ## end gnulib module unictype/ctype-punct ## begin gnulib module unictype/ctype-space if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE libgnu_la_SOURCES += unictype/ctype_space.c endif EXTRA_DIST += unictype/bitmap.h unictype/ctype_space.h ## end gnulib module unictype/ctype-space ## begin gnulib module unictype/ctype-upper if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER libgnu_la_SOURCES += unictype/ctype_upper.c endif EXTRA_DIST += unictype/bitmap.h unictype/ctype_upper.h ## end gnulib module unictype/ctype-upper ## begin gnulib module unictype/ctype-xdigit if LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT libgnu_la_SOURCES += unictype/ctype_xdigit.c endif EXTRA_DIST += unictype/bitmap.h unictype/ctype_xdigit.h ## end gnulib module unictype/ctype-xdigit ## begin gnulib module uninorm/base BUILT_SOURCES += $(LIBUNISTRING_UNINORM_H) uninorm.h: uninorm.in.h $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''HAVE_UNISTRING_WOE32DLL_H''@|$(HAVE_UNISTRING_WOE32DLL_H)|g' \ -e 's/@''GNULIB_UNINORM_NFD_DLL_VARIABLE''@/$(GL_GNULIB_UNINORM_NFD_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNINORM_NFC_DLL_VARIABLE''@/$(GL_GNULIB_UNINORM_NFC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNINORM_NFKD_DLL_VARIABLE''@/$(GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNINORM_NFKC_DLL_VARIABLE''@/$(GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE)/g' \ $(srcdir)/uninorm.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += uninorm.h uninorm.h-t EXTRA_DIST += uninorm.in.h ## end gnulib module uninorm/base ## begin gnulib module unistd BUILT_SOURCES += unistd.h libgnu_la_SOURCES += unistd.c # We need the following in order to create an empty placeholder for # <unistd.h> when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_ACCESS''@/$(GL_GNULIB_ACCESS)/g' \ -e 's/@''GNULIB_CHDIR''@/$(GL_GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GL_GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GL_GNULIB_COPY_FILE_RANGE)/g' \ -e 's/@''GNULIB_DUP''@/$(GL_GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GL_GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GL_GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GL_GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GL_GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_EXECL''@/$(GL_GNULIB_EXECL)/g' \ -e 's/@''GNULIB_EXECLE''@/$(GL_GNULIB_EXECLE)/g' \ -e 's/@''GNULIB_EXECLP''@/$(GL_GNULIB_EXECLP)/g' \ -e 's/@''GNULIB_EXECV''@/$(GL_GNULIB_EXECV)/g' \ -e 's/@''GNULIB_EXECVE''@/$(GL_GNULIB_EXECVE)/g' \ -e 's/@''GNULIB_EXECVP''@/$(GL_GNULIB_EXECVP)/g' \ -e 's/@''GNULIB_EXECVPE''@/$(GL_GNULIB_EXECVPE)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GL_GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GL_GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GL_GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GL_GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GL_GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GL_GNULIB_FTRUNCATE)/g' \ < $(srcdir)/unistd.in.h > $@-t1 $(AM_V_at)sed \ -e 's/@''GNULIB_GETCWD''@/$(GL_GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GL_GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GL_GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETENTROPY''@/$(GL_GNULIB_GETENTROPY)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GL_GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GL_GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GL_GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GL_GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETOPT_POSIX''@/$(GL_GNULIB_GETOPT_POSIX)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GL_GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETPASS''@/$(GL_GNULIB_GETPASS)/g' \ -e 's/@''GNULIB_GETPASS_GNU''@/$(GL_GNULIB_GETPASS_GNU)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GL_GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GL_GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GL_GNULIB_ISATTY)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GL_GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GL_GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GL_GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GL_GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GL_GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GL_GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GL_GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GL_GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GL_GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GL_GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GL_GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GL_GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SETHOSTNAME''@/$(GL_GNULIB_SETHOSTNAME)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GL_GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GL_GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GL_GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TRUNCATE''@/$(GL_GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GL_GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GL_GNULIB_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GL_GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GL_GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GL_GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GL_GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GL_GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GL_GNULIB_WRITE)/g' \ -e 's/@''GNULIB_MDA_ACCESS''@/$(GL_GNULIB_MDA_ACCESS)/g' \ -e 's/@''GNULIB_MDA_CHDIR''@/$(GL_GNULIB_MDA_CHDIR)/g' \ -e 's/@''GNULIB_MDA_CLOSE''@/$(GL_GNULIB_MDA_CLOSE)/g' \ -e 's/@''GNULIB_MDA_DUP''@/$(GL_GNULIB_MDA_DUP)/g' \ -e 's/@''GNULIB_MDA_DUP2''@/$(GL_GNULIB_MDA_DUP2)/g' \ -e 's/@''GNULIB_MDA_EXECL''@/$(GL_GNULIB_MDA_EXECL)/g' \ -e 's/@''GNULIB_MDA_EXECLE''@/$(GL_GNULIB_MDA_EXECLE)/g' \ -e 's/@''GNULIB_MDA_EXECLP''@/$(GL_GNULIB_MDA_EXECLP)/g' \ -e 's/@''GNULIB_MDA_EXECV''@/$(GL_GNULIB_MDA_EXECV)/g' \ -e 's/@''GNULIB_MDA_EXECVE''@/$(GL_GNULIB_MDA_EXECVE)/g' \ -e 's/@''GNULIB_MDA_EXECVP''@/$(GL_GNULIB_MDA_EXECVP)/g' \ -e 's/@''GNULIB_MDA_EXECVPE''@/$(GL_GNULIB_MDA_EXECVPE)/g' \ -e 's/@''GNULIB_MDA_GETCWD''@/$(GL_GNULIB_MDA_GETCWD)/g' \ -e 's/@''GNULIB_MDA_GETPID''@/$(GL_GNULIB_MDA_GETPID)/g' \ -e 's/@''GNULIB_MDA_ISATTY''@/$(GL_GNULIB_MDA_ISATTY)/g' \ -e 's/@''GNULIB_MDA_LSEEK''@/$(GL_GNULIB_MDA_LSEEK)/g' \ -e 's/@''GNULIB_MDA_READ''@/$(GL_GNULIB_MDA_READ)/g' \ -e 's/@''GNULIB_MDA_RMDIR''@/$(GL_GNULIB_MDA_RMDIR)/g' \ -e 's/@''GNULIB_MDA_SWAB''@/$(GL_GNULIB_MDA_SWAB)/g' \ -e 's/@''GNULIB_MDA_UNLINK''@/$(GL_GNULIB_MDA_UNLINK)/g' \ -e 's/@''GNULIB_MDA_WRITE''@/$(GL_GNULIB_MDA_WRITE)/g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_EXECVPE''@|$(HAVE_EXECVPE)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETENTROPY''@|$(HAVE_GETENTROPY)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_EXECVPE''@|$(HAVE_DECL_EXECVPE)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ < $@-t2 > $@-t3 $(AM_V_at)sed \ -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_COPY_FILE_RANGE''@|$(REPLACE_COPY_FILE_RANGE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_DUP3''@|$(REPLACE_DUP3)|g' \ -e 's|@''REPLACE_EXECL''@|$(REPLACE_EXECL)|g' \ -e 's|@''REPLACE_EXECLE''@|$(REPLACE_EXECLE)|g' \ -e 's|@''REPLACE_EXECLP''@|$(REPLACE_EXECLP)|g' \ -e 's|@''REPLACE_EXECV''@|$(REPLACE_EXECV)|g' \ -e 's|@''REPLACE_EXECVE''@|$(REPLACE_EXECVE)|g' \ -e 's|@''REPLACE_EXECVP''@|$(REPLACE_EXECVP)|g' \ -e 's|@''REPLACE_EXECVPE''@|$(REPLACE_EXECVPE)|g' \ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FDATASYNC''@|$(REPLACE_FDATASYNC)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETENTROPY''@|$(REPLACE_GETENTROPY)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ -e 's|@''REPLACE_GETPASS_FOR_GETPASS_GNU''@|$(REPLACE_GETPASS_FOR_GETPASS_GNU)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PIPE2''@|$(REPLACE_PIPE2)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SETHOSTNAME''@|$(REPLACE_SETHOSTNAME)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_SYS_RANDOM_H''@|$(UNISTD_H_HAVE_SYS_RANDOM_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t3 > $@-t4 $(AM_V_at)rm -f $@-t1 $@-t2 $@-t3 $(AM_V_at)mv $@-t4 $@ MOSTLYCLEANFILES += unistd.h unistd.h-t1 unistd.h-t2 unistd.h-t3 unistd.h-t4 EXTRA_DIST += unistd.in.h ## end gnulib module unistd ## begin gnulib module unistd-safer libgnu_la_SOURCES += dup-safer.c fd-safer.c pipe-safer.c EXTRA_DIST += unistd--.h unistd-safer.h ## end gnulib module unistd-safer ## begin gnulib module unitypes BUILT_SOURCES += $(LIBUNISTRING_UNITYPES_H) unitypes.h: unitypes.in.h $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/unitypes.in.h $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += unitypes.h unitypes.h-t EXTRA_DIST += unitypes.in.h ## end gnulib module unitypes ## begin gnulib module uniwidth/base BUILT_SOURCES += $(LIBUNISTRING_UNIWIDTH_H) uniwidth.h: uniwidth.in.h $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/uniwidth.in.h $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += uniwidth.h uniwidth.h-t EXTRA_DIST += localcharset.h uniwidth.in.h ## end gnulib module uniwidth/base ## begin gnulib module uniwidth/width if LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH libgnu_la_SOURCES += uniwidth/width.c endif EXTRA_DIST += unictype/bitmap.h uniwidth/cjk.h uniwidth/width0.h uniwidth/width2.h ## end gnulib module uniwidth/width ## begin gnulib module vasnprintf EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h EXTRA_libgnu_la_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c ## end gnulib module vasnprintf ## begin gnulib module verify EXTRA_DIST += verify.h ## end gnulib module verify ## begin gnulib module vsnprintf EXTRA_DIST += vsnprintf.c EXTRA_libgnu_la_SOURCES += vsnprintf.c ## end gnulib module vsnprintf ## begin gnulib module wchar BUILT_SOURCES += wchar.h # We need the following in order to create <wchar.h> when the system # version does not work standalone. wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GL_GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GL_GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_MBSINIT''@/$(GL_GNULIB_MBSINIT)/g' \ -e 's/@''GNULIB_MBSZERO''@/$(GL_GNULIB_MBSZERO)/g' \ -e 's/@''GNULIB_MBRTOWC''@/$(GL_GNULIB_MBRTOWC)/g' \ -e 's/@''GNULIB_MBRLEN''@/$(GL_GNULIB_MBRLEN)/g' \ -e 's/@''GNULIB_MBSRTOWCS''@/$(GL_GNULIB_MBSRTOWCS)/g' \ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GL_GNULIB_MBSNRTOWCS)/g' \ -e 's/@''GNULIB_WCRTOMB''@/$(GL_GNULIB_WCRTOMB)/g' \ -e 's/@''GNULIB_WCSRTOMBS''@/$(GL_GNULIB_WCSRTOMBS)/g' \ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GL_GNULIB_WCSNRTOMBS)/g' \ -e 's/@''GNULIB_WCWIDTH''@/$(GL_GNULIB_WCWIDTH)/g' \ -e 's/@''GNULIB_WMEMCHR''@/$(GL_GNULIB_WMEMCHR)/g' \ -e 's/@''GNULIB_WMEMCMP''@/$(GL_GNULIB_WMEMCMP)/g' \ -e 's/@''GNULIB_WMEMCPY''@/$(GL_GNULIB_WMEMCPY)/g' \ -e 's/@''GNULIB_WMEMMOVE''@/$(GL_GNULIB_WMEMMOVE)/g' \ -e 's/@''GNULIB_WMEMPCPY''@/$(GL_GNULIB_WMEMPCPY)/g' \ -e 's/@''GNULIB_WMEMSET''@/$(GL_GNULIB_WMEMSET)/g' \ -e 's/@''GNULIB_WCSLEN''@/$(GL_GNULIB_WCSLEN)/g' \ -e 's/@''GNULIB_WCSNLEN''@/$(GL_GNULIB_WCSNLEN)/g' \ -e 's/@''GNULIB_WCSCPY''@/$(GL_GNULIB_WCSCPY)/g' \ -e 's/@''GNULIB_WCPCPY''@/$(GL_GNULIB_WCPCPY)/g' \ -e 's/@''GNULIB_WCSNCPY''@/$(GL_GNULIB_WCSNCPY)/g' \ -e 's/@''GNULIB_WCPNCPY''@/$(GL_GNULIB_WCPNCPY)/g' \ -e 's/@''GNULIB_WCSCAT''@/$(GL_GNULIB_WCSCAT)/g' \ -e 's/@''GNULIB_WCSNCAT''@/$(GL_GNULIB_WCSNCAT)/g' \ -e 's/@''GNULIB_WCSCMP''@/$(GL_GNULIB_WCSCMP)/g' \ -e 's/@''GNULIB_WCSNCMP''@/$(GL_GNULIB_WCSNCMP)/g' \ -e 's/@''GNULIB_WCSCASECMP''@/$(GL_GNULIB_WCSCASECMP)/g' \ -e 's/@''GNULIB_WCSNCASECMP''@/$(GL_GNULIB_WCSNCASECMP)/g' \ -e 's/@''GNULIB_WCSCOLL''@/$(GL_GNULIB_WCSCOLL)/g' \ -e 's/@''GNULIB_WCSXFRM''@/$(GL_GNULIB_WCSXFRM)/g' \ -e 's/@''GNULIB_WCSDUP''@/$(GL_GNULIB_WCSDUP)/g' \ -e 's/@''GNULIB_WCSCHR''@/$(GL_GNULIB_WCSCHR)/g' \ -e 's/@''GNULIB_WCSRCHR''@/$(GL_GNULIB_WCSRCHR)/g' \ -e 's/@''GNULIB_WCSCSPN''@/$(GL_GNULIB_WCSCSPN)/g' \ -e 's/@''GNULIB_WCSSPN''@/$(GL_GNULIB_WCSSPN)/g' \ -e 's/@''GNULIB_WCSPBRK''@/$(GL_GNULIB_WCSPBRK)/g' \ -e 's/@''GNULIB_WCSSTR''@/$(GL_GNULIB_WCSSTR)/g' \ -e 's/@''GNULIB_WCSTOK''@/$(GL_GNULIB_WCSTOK)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GL_GNULIB_WCSWIDTH)/g' \ -e 's/@''GNULIB_WCSFTIME''@/$(GL_GNULIB_WCSFTIME)/g' \ -e 's/@''GNULIB_WGETCWD''@/$(GL_GNULIB_WGETCWD)/g' \ -e 's/@''GNULIB_MDA_WCSDUP''@/$(GL_GNULIB_MDA_WCSDUP)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ < $(srcdir)/wchar.in.h > $@-t1 $(AM_V_at)sed \ -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ -e 's|@''HAVE_WMEMPCPY''@|$(HAVE_WMEMPCPY)|g' \ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCSDUP''@|$(HAVE_DECL_WCSDUP)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ -e 's|@''REPLACE_WCSCMP''@|$(REPLACE_WCSCMP)|g' \ -e 's|@''REPLACE_WCSNCMP''@|$(REPLACE_WCSNCMP)|g' \ -e 's|@''REPLACE_WCSSTR''@|$(REPLACE_WCSSTR)|g' \ -e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|g' \ -e 's|@''REPLACE_WMEMCMP''@|$(REPLACE_WMEMCMP)|g' \ -e 's|@''REPLACE_WMEMPCPY''@|$(REPLACE_WMEMPCPY)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t2 > $@-t3 $(AM_V_at)rm -f $@-t1 $@-t2 $(AM_V_at)mv $@-t3 $@ MOSTLYCLEANFILES += wchar.h wchar.h-t1 wchar.h-t2 wchar.h-t3 EXTRA_DIST += wchar.in.h ## end gnulib module wchar ## begin gnulib module wcrtomb if GL_COND_OBJ_WCRTOMB libgnu_la_SOURCES += wcrtomb.c endif ## end gnulib module wcrtomb ## begin gnulib module wctype if GL_COND_OBJ_WCTYPE libgnu_la_SOURCES += wctype.c endif EXTRA_DIST += wctype-impl.h ## end gnulib module wctype ## begin gnulib module wctype-h BUILT_SOURCES += wctype.h libgnu_la_SOURCES += wctype-h.c # We need the following in order to create <wctype.h> when the system # doesn't have one that works with the given compiler. wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_ISWBLANK''@/$(GL_GNULIB_ISWBLANK)/g' \ -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \ -e 's/@''GNULIB_ISWPUNCT''@/$(GL_GNULIB_ISWPUNCT)/g' \ -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \ -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \ -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \ -e 's/@''GNULIB_WCTRANS''@/$(GL_GNULIB_WCTRANS)/g' \ -e 's/@''GNULIB_TOWCTRANS''@/$(GL_GNULIB_TOWCTRANS)/g' \ -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ -e 's/@''REPLACE_ISWDIGIT''@/$(REPLACE_ISWDIGIT)/g' \ -e 's/@''REPLACE_ISWPUNCT''@/$(REPLACE_ISWPUNCT)/g' \ -e 's/@''REPLACE_ISWXDIGIT''@/$(REPLACE_ISWXDIGIT)/g' \ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ -e 's/@''REPLACE_WCTRANS''@/$(REPLACE_WCTRANS)/g' \ -e 's/@''REPLACE_WCTYPE''@/$(REPLACE_WCTYPE)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/wctype.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += wctype.h wctype.h-t EXTRA_DIST += wctype.in.h ## end gnulib module wctype-h ## begin gnulib module wcwidth if GL_COND_OBJ_WCWIDTH libgnu_la_SOURCES += wcwidth.c endif ## end gnulib module wcwidth ## begin gnulib module windows-mutex if GL_COND_OBJ_WINDOWS_MUTEX libgnu_la_SOURCES += windows-mutex.c endif EXTRA_DIST += windows-initguard.h windows-mutex.h ## end gnulib module windows-mutex ## begin gnulib module windows-once if GL_COND_OBJ_WINDOWS_ONCE libgnu_la_SOURCES += windows-once.c endif EXTRA_DIST += windows-once.h ## end gnulib module windows-once ## begin gnulib module windows-recmutex if GL_COND_OBJ_WINDOWS_RECMUTEX libgnu_la_SOURCES += windows-recmutex.c endif EXTRA_DIST += windows-initguard.h windows-recmutex.h ## end gnulib module windows-recmutex ## begin gnulib module windows-rwlock if GL_COND_OBJ_WINDOWS_RWLOCK libgnu_la_SOURCES += windows-rwlock.c endif EXTRA_DIST += windows-initguard.h windows-rwlock.h ## end gnulib module windows-rwlock ## begin gnulib module xalloc-oversized EXTRA_DIST += xalloc-oversized.h ## end gnulib module xalloc-oversized ## begin gnulib module xsize libgnu_la_SOURCES += xsize.h xsize.c ## end gnulib module xsize mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : distclean-local: distclean-gnulib-libobjs distclean-gnulib-libobjs: -rm -f @gl_LIBOBJDEPS@ maintainer-clean-local: distclean-gnulib-libobjs ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/Makefile.in����������������������������������������������������������0000644�0001750�0001750�00001742731�14557513750�014334� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2002-2024 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This file 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: # gnulib-tool --import --local-dir=gl \ # --lib=libgnu \ # --source-base=bootstrapped/lib \ # --m4-base=bootstrapped/m4 \ # --doc-base=bootstrapped/doc \ # --tests-base=bootstrapped/tests \ # --aux-dir=bootstrapped/build-aux \ # --with-tests \ # --no-conditional-dependencies \ # --libtool \ # --macro-prefix=gl \ # --no-vc-files \ # argp \ # error \ # faccessat \ # fcntl \ # fcntl-h \ # func \ # gendocs \ # getline \ # git-version-gen \ # gpl-3.0 \ # havelib \ # inttypes \ # math \ # mbstok_r \ # memmove \ # mktime \ # nproc \ # regex \ # secure_getenv \ # select \ # signbit \ # stdint \ # stdio \ # strcase \ # strptime \ # strtod \ # strtok_r \ # sys_time \ # system-posix \ # time VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @GL_COND_OBJ_ACCESS_TRUE@am__append_1 = access.c @GL_COND_OBJ_BTOWC_TRUE@am__append_2 = btowc.c @GL_COND_OBJ_CHDIR_LONG_TRUE@am__append_3 = chdir-long.c @GL_COND_OBJ_CLOSE_TRUE@am__append_4 = close.c @GL_COND_OBJ_DIRFD_TRUE@am__append_5 = dirfd.c @GL_COND_OBJ_DUP2_TRUE@am__append_6 = dup2.c @GL_COND_OBJ_ERROR_TRUE@am__append_7 = error.c @GL_COND_OBJ_EUIDACCESS_TRUE@am__append_8 = euidaccess.c @GL_COND_OBJ_FACCESSAT_TRUE@am__append_9 = faccessat.c @GL_COND_OBJ_FCHDIR_TRUE@am__append_10 = fchdir.c @GL_COND_OBJ_FCNTL_TRUE@am__append_11 = fcntl.c @GL_COND_OBJ_FLOAT_TRUE@am__append_12 = float.c @GL_COND_OBJ_ITOLD_TRUE@am__append_13 = itold.c @GL_COND_OBJ_FREE_TRUE@am__append_14 = free.c @GL_COND_OBJ_FSTAT_TRUE@am__append_15 = fstat.c @GL_COND_OBJ_FSTATAT_TRUE@am__append_16 = fstatat.c @GL_COND_OBJ_GETCWD_LGPL_TRUE@am__append_17 = getcwd-lgpl.c @GL_COND_OBJ_GETDELIM_TRUE@am__append_18 = getdelim.c @GL_COND_OBJ_GETDTABLESIZE_TRUE@am__append_19 = getdtablesize.c @GL_COND_OBJ_GETGROUPS_TRUE@am__append_20 = getgroups.c @GL_COND_OBJ_GETLINE_TRUE@am__append_21 = getline.c @GL_COND_OBJ_GETOPT_TRUE@am__append_22 = getopt.c getopt1.c @GL_COND_OBJ_GETPROGNAME_TRUE@am__append_23 = getprogname.c @GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__append_24 = gettimeofday.c @GL_COND_OBJ_GROUP_MEMBER_TRUE@am__append_25 = group-member.c @GL_COND_OBJ_ISWBLANK_TRUE@am__append_26 = iswblank.c @GL_COND_OBJ_ISWCTYPE_TRUE@am__append_27 = iswctype.c @GL_COND_OBJ_ISWDIGIT_TRUE@am__append_28 = iswdigit.c @GL_COND_OBJ_ISWPUNCT_TRUE@am__append_29 = iswpunct.c @GL_COND_OBJ_ISWXDIGIT_TRUE@am__append_30 = iswxdigit.c @GL_COND_OBJ_LOCALECONV_TRUE@am__append_31 = localeconv.c @GL_COND_OBJ_LSTAT_TRUE@am__append_32 = lstat.c @GL_COND_OBJ_MBRTOC32_TRUE@am__append_33 = mbrtoc32.c @GL_COND_OBJ_MBRTOWC_TRUE@am__append_34 = mbrtowc.c @GL_COND_OBJ_MBSINIT_TRUE@am__append_35 = mbsinit.c @GL_COND_OBJ_MBTOWC_TRUE@am__append_36 = mbtowc.c @GL_COND_OBJ_MEMCHR_TRUE@am__append_37 = memchr.c @GL_COND_OBJ_MEMMOVE_TRUE@am__append_38 = memmove.c @GL_COND_OBJ_MEMPCPY_TRUE@am__append_39 = mempcpy.c @GL_COND_OBJ_MEMRCHR_TRUE@am__append_40 = memrchr.c @GL_COND_OBJ_MSVC_INVAL_TRUE@am__append_41 = msvc-inval.c @GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__append_42 = msvc-nothrow.c @GL_COND_OBJ_NL_LANGINFO_TRUE@am__append_43 = nl_langinfo.c @GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE@am__append_44 = nl_langinfo-lock.c @GL_COND_OBJ_OPEN_TRUE@am__append_45 = open.c @GL_COND_OBJ_OPENAT_TRUE@am__append_46 = openat.c @GL_COND_OBJ_PIPE_TRUE@am__append_47 = pipe.c @GL_COND_OBJ_RAWMEMCHR_TRUE@am__append_48 = rawmemchr.c @GL_COND_OBJ_REGEX_TRUE@am__append_49 = regex.c @GL_COND_OBJ_SECURE_GETENV_TRUE@am__append_50 = secure_getenv.c @GL_COND_OBJ_SELECT_TRUE@am__append_51 = select.c @GL_COND_OBJ_SETLOCALE_LOCK_TRUE@am__append_52 = setlocale-lock.c @GL_COND_OBJ_SIGNBIT3_TRUE@am__append_53 = signbitf.c signbitd.c signbitl.c @GL_COND_OBJ_SLEEP_TRUE@am__append_54 = sleep.c @GL_COND_OBJ_STAT_TRUE@am__append_55 = stat.c @GL_COND_OBJ_STDIO_READ_TRUE@am__append_56 = stdio-read.c @GL_COND_OBJ_STDIO_WRITE_TRUE@am__append_57 = stdio-write.c @GL_COND_OBJ_STRCASECMP_TRUE@am__append_58 = strcasecmp.c @GL_COND_OBJ_STRNCASECMP_TRUE@am__append_59 = strncasecmp.c @GL_COND_OBJ_STRCHRNUL_TRUE@am__append_60 = strchrnul.c @GL_COND_OBJ_STRDUP_TRUE@am__append_61 = strdup.c @GL_COND_OBJ_STRERROR_TRUE@am__append_62 = strerror.c @GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__append_63 = strerror-override.c @GL_COND_OBJ_STRNDUP_TRUE@am__append_64 = strndup.c @GL_COND_OBJ_STRNLEN_TRUE@am__append_65 = strnlen.c @GL_COND_OBJ_STRPTIME_TRUE@am__append_66 = strptime.c @GL_COND_OBJ_STRTOD_TRUE@am__append_67 = strtod.c @GL_COND_OBJ_STRTOK_R_TRUE@am__append_68 = strtok_r.c @GL_COND_OBJ_TIME_TRUE@am__append_69 = time.c @GL_COND_OBJ_TIME_R_TRUE@am__append_70 = time_r.c @LIBUNISTRING_COMPILE_UNICASE_TOLOWER_TRUE@am__append_71 = unicase/tolower.c @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM_TRUE@am__append_72 = unictype/ctype_alnum.c @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA_TRUE@am__append_73 = unictype/ctype_alpha.c @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK_TRUE@am__append_74 = unictype/ctype_blank.c @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL_TRUE@am__append_75 = unictype/ctype_cntrl.c @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT_TRUE@am__append_76 = unictype/ctype_digit.c @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH_TRUE@am__append_77 = unictype/ctype_graph.c @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER_TRUE@am__append_78 = unictype/ctype_lower.c @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT_TRUE@am__append_79 = unictype/ctype_print.c @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT_TRUE@am__append_80 = unictype/ctype_punct.c @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE_TRUE@am__append_81 = unictype/ctype_space.c @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER_TRUE@am__append_82 = unictype/ctype_upper.c @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT_TRUE@am__append_83 = unictype/ctype_xdigit.c @LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__append_84 = uniwidth/width.c @GL_COND_OBJ_WCRTOMB_TRUE@am__append_85 = wcrtomb.c @GL_COND_OBJ_WCTYPE_TRUE@am__append_86 = wctype.c @GL_COND_OBJ_WCWIDTH_TRUE@am__append_87 = wcwidth.c @GL_COND_OBJ_WINDOWS_MUTEX_TRUE@am__append_88 = windows-mutex.c @GL_COND_OBJ_WINDOWS_ONCE_TRUE@am__append_89 = windows-once.c @GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE@am__append_90 = windows-recmutex.c @GL_COND_OBJ_WINDOWS_RWLOCK_TRUE@am__append_91 = windows-rwlock.c subdir = bootstrapped/lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = am__libgnu_la_SOURCES_DIST = access.c argp.h argp-ba.c argp-eexst.c \ argp-fmtstream.c argp-fmtstream.h argp-fs-xinl.c argp-help.c \ argp-namefrob.h argp-parse.c argp-pin.c argp-pv.c argp-pvh.c \ argp-xinl.c openat-priv.h openat-proc.c basename-lgpl.c \ btowc.c c-ctype.h c-ctype.c c32isalnum.c c32isalpha.c \ c32isblank.c c32iscntrl.c c32isdigit.c c32isgraph.c \ c32islower.c c32isprint.c c32ispunct.c c32isspace.c \ c32isupper.c c32isxdigit.c c32tolower.c c32width.c \ chdir-long.c cloexec.c close.c dirfd.c dup2.c error.c \ euidaccess.c exitfail.c faccessat.c fchdir.c fcntl.c fd-hook.c \ fd-safer-flag.c dup-safer-flag.c filenamecat-lgpl.c float.c \ itold.c free.c fstat.c fstatat.c getcwd-lgpl.c getdelim.c \ getdtablesize.c getgroups.c getline.c getopt.c getopt1.c \ getprogname.c gettext.h gettimeofday.c \ malloc/dynarray_at_failure.c malloc/dynarray_emplace_enlarge.c \ malloc/dynarray_finalize.c malloc/dynarray_resize.c \ malloc/dynarray_resize_clear.c group-member.c hard-locale.c \ idx.h iswblank.c iswctype.c iswdigit.c iswpunct.c iswxdigit.c \ localcharset.c localeconv.c glthread/lock.h glthread/lock.c \ lstat.c malloca.c math.c mbchar.c mbrtoc32.c mbrtowc.c \ mbschr.c mbsinit.c mbspbrk.c mbsspn.c mbstok_r.c mbszero.c \ mbtowc.c mbuiterf.h mbuiterf.c memchr.c memmove.c mempcpy.c \ memrchr.c minmax.h msvc-inval.c msvc-nothrow.c nl_langinfo.c \ nl_langinfo-lock.c nproc.c open.c openat.c openat-die.c pipe.c \ rawmemchr.c regex.c save-cwd.c secure_getenv.c select.c \ setlocale_null.c setlocale-lock.c signbitf.c signbitd.c \ signbitl.c size_max.h sleep.c sockets.h sockets.c stat.c \ stat-time.c stdio-read.c stdio-write.c strcasecmp.c \ strncasecmp.c strchrnul.c strdup.c strerror.c \ strerror-override.c strndup.c strnlen.c strnlen1.h strnlen1.c \ strptime.c strtod.c strtok_r.c sys_socket.c \ glthread/threadlib.c time.c time_r.c unicase/tolower.c \ unictype/ctype_alnum.c unictype/ctype_alpha.c \ unictype/ctype_blank.c unictype/ctype_cntrl.c \ unictype/ctype_digit.c unictype/ctype_graph.c \ unictype/ctype_lower.c unictype/ctype_print.c \ unictype/ctype_punct.c unictype/ctype_space.c \ unictype/ctype_upper.c unictype/ctype_xdigit.c unistd.c \ dup-safer.c fd-safer.c pipe-safer.c uniwidth/width.c wcrtomb.c \ wctype.c wctype-h.c wcwidth.c windows-mutex.c windows-once.c \ windows-recmutex.c windows-rwlock.c xsize.h xsize.c @GL_COND_OBJ_ACCESS_TRUE@am__objects_1 = libgnu_la-access.lo @GL_COND_OBJ_BTOWC_TRUE@am__objects_2 = libgnu_la-btowc.lo @GL_COND_OBJ_CHDIR_LONG_TRUE@am__objects_3 = libgnu_la-chdir-long.lo @GL_COND_OBJ_CLOSE_TRUE@am__objects_4 = libgnu_la-close.lo @GL_COND_OBJ_DIRFD_TRUE@am__objects_5 = libgnu_la-dirfd.lo @GL_COND_OBJ_DUP2_TRUE@am__objects_6 = libgnu_la-dup2.lo @GL_COND_OBJ_ERROR_TRUE@am__objects_7 = libgnu_la-error.lo @GL_COND_OBJ_EUIDACCESS_TRUE@am__objects_8 = libgnu_la-euidaccess.lo @GL_COND_OBJ_FACCESSAT_TRUE@am__objects_9 = libgnu_la-faccessat.lo @GL_COND_OBJ_FCHDIR_TRUE@am__objects_10 = libgnu_la-fchdir.lo @GL_COND_OBJ_FCNTL_TRUE@am__objects_11 = libgnu_la-fcntl.lo @GL_COND_OBJ_FLOAT_TRUE@am__objects_12 = libgnu_la-float.lo @GL_COND_OBJ_ITOLD_TRUE@am__objects_13 = libgnu_la-itold.lo @GL_COND_OBJ_FREE_TRUE@am__objects_14 = libgnu_la-free.lo @GL_COND_OBJ_FSTAT_TRUE@am__objects_15 = libgnu_la-fstat.lo @GL_COND_OBJ_FSTATAT_TRUE@am__objects_16 = libgnu_la-fstatat.lo @GL_COND_OBJ_GETCWD_LGPL_TRUE@am__objects_17 = \ @GL_COND_OBJ_GETCWD_LGPL_TRUE@ libgnu_la-getcwd-lgpl.lo @GL_COND_OBJ_GETDELIM_TRUE@am__objects_18 = libgnu_la-getdelim.lo @GL_COND_OBJ_GETDTABLESIZE_TRUE@am__objects_19 = \ @GL_COND_OBJ_GETDTABLESIZE_TRUE@ libgnu_la-getdtablesize.lo @GL_COND_OBJ_GETGROUPS_TRUE@am__objects_20 = libgnu_la-getgroups.lo @GL_COND_OBJ_GETLINE_TRUE@am__objects_21 = libgnu_la-getline.lo @GL_COND_OBJ_GETOPT_TRUE@am__objects_22 = libgnu_la-getopt.lo \ @GL_COND_OBJ_GETOPT_TRUE@ libgnu_la-getopt1.lo @GL_COND_OBJ_GETPROGNAME_TRUE@am__objects_23 = \ @GL_COND_OBJ_GETPROGNAME_TRUE@ libgnu_la-getprogname.lo @GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__objects_24 = \ @GL_COND_OBJ_GETTIMEOFDAY_TRUE@ libgnu_la-gettimeofday.lo am__dirstamp = $(am__leading_dot)dirstamp @GL_COND_OBJ_GROUP_MEMBER_TRUE@am__objects_25 = \ @GL_COND_OBJ_GROUP_MEMBER_TRUE@ libgnu_la-group-member.lo @GL_COND_OBJ_ISWBLANK_TRUE@am__objects_26 = libgnu_la-iswblank.lo @GL_COND_OBJ_ISWCTYPE_TRUE@am__objects_27 = libgnu_la-iswctype.lo @GL_COND_OBJ_ISWDIGIT_TRUE@am__objects_28 = libgnu_la-iswdigit.lo @GL_COND_OBJ_ISWPUNCT_TRUE@am__objects_29 = libgnu_la-iswpunct.lo @GL_COND_OBJ_ISWXDIGIT_TRUE@am__objects_30 = libgnu_la-iswxdigit.lo @GL_COND_OBJ_LOCALECONV_TRUE@am__objects_31 = libgnu_la-localeconv.lo @GL_COND_OBJ_LSTAT_TRUE@am__objects_32 = libgnu_la-lstat.lo @GL_COND_OBJ_MBRTOC32_TRUE@am__objects_33 = libgnu_la-mbrtoc32.lo @GL_COND_OBJ_MBRTOWC_TRUE@am__objects_34 = libgnu_la-mbrtowc.lo @GL_COND_OBJ_MBSINIT_TRUE@am__objects_35 = libgnu_la-mbsinit.lo @GL_COND_OBJ_MBTOWC_TRUE@am__objects_36 = libgnu_la-mbtowc.lo @GL_COND_OBJ_MEMCHR_TRUE@am__objects_37 = libgnu_la-memchr.lo @GL_COND_OBJ_MEMMOVE_TRUE@am__objects_38 = libgnu_la-memmove.lo @GL_COND_OBJ_MEMPCPY_TRUE@am__objects_39 = libgnu_la-mempcpy.lo @GL_COND_OBJ_MEMRCHR_TRUE@am__objects_40 = libgnu_la-memrchr.lo @GL_COND_OBJ_MSVC_INVAL_TRUE@am__objects_41 = libgnu_la-msvc-inval.lo @GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__objects_42 = \ @GL_COND_OBJ_MSVC_NOTHROW_TRUE@ libgnu_la-msvc-nothrow.lo @GL_COND_OBJ_NL_LANGINFO_TRUE@am__objects_43 = \ @GL_COND_OBJ_NL_LANGINFO_TRUE@ libgnu_la-nl_langinfo.lo @GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE@am__objects_44 = libgnu_la-nl_langinfo-lock.lo @GL_COND_OBJ_OPEN_TRUE@am__objects_45 = libgnu_la-open.lo @GL_COND_OBJ_OPENAT_TRUE@am__objects_46 = libgnu_la-openat.lo @GL_COND_OBJ_PIPE_TRUE@am__objects_47 = libgnu_la-pipe.lo @GL_COND_OBJ_RAWMEMCHR_TRUE@am__objects_48 = libgnu_la-rawmemchr.lo @GL_COND_OBJ_REGEX_TRUE@am__objects_49 = libgnu_la-regex.lo @GL_COND_OBJ_SECURE_GETENV_TRUE@am__objects_50 = \ @GL_COND_OBJ_SECURE_GETENV_TRUE@ libgnu_la-secure_getenv.lo @GL_COND_OBJ_SELECT_TRUE@am__objects_51 = libgnu_la-select.lo @GL_COND_OBJ_SETLOCALE_LOCK_TRUE@am__objects_52 = \ @GL_COND_OBJ_SETLOCALE_LOCK_TRUE@ libgnu_la-setlocale-lock.lo @GL_COND_OBJ_SIGNBIT3_TRUE@am__objects_53 = libgnu_la-signbitf.lo \ @GL_COND_OBJ_SIGNBIT3_TRUE@ libgnu_la-signbitd.lo \ @GL_COND_OBJ_SIGNBIT3_TRUE@ libgnu_la-signbitl.lo @GL_COND_OBJ_SLEEP_TRUE@am__objects_54 = libgnu_la-sleep.lo @GL_COND_OBJ_STAT_TRUE@am__objects_55 = libgnu_la-stat.lo @GL_COND_OBJ_STDIO_READ_TRUE@am__objects_56 = libgnu_la-stdio-read.lo @GL_COND_OBJ_STDIO_WRITE_TRUE@am__objects_57 = \ @GL_COND_OBJ_STDIO_WRITE_TRUE@ libgnu_la-stdio-write.lo @GL_COND_OBJ_STRCASECMP_TRUE@am__objects_58 = libgnu_la-strcasecmp.lo @GL_COND_OBJ_STRNCASECMP_TRUE@am__objects_59 = \ @GL_COND_OBJ_STRNCASECMP_TRUE@ libgnu_la-strncasecmp.lo @GL_COND_OBJ_STRCHRNUL_TRUE@am__objects_60 = libgnu_la-strchrnul.lo @GL_COND_OBJ_STRDUP_TRUE@am__objects_61 = libgnu_la-strdup.lo @GL_COND_OBJ_STRERROR_TRUE@am__objects_62 = libgnu_la-strerror.lo @GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__objects_63 = libgnu_la-strerror-override.lo @GL_COND_OBJ_STRNDUP_TRUE@am__objects_64 = libgnu_la-strndup.lo @GL_COND_OBJ_STRNLEN_TRUE@am__objects_65 = libgnu_la-strnlen.lo @GL_COND_OBJ_STRPTIME_TRUE@am__objects_66 = libgnu_la-strptime.lo @GL_COND_OBJ_STRTOD_TRUE@am__objects_67 = libgnu_la-strtod.lo @GL_COND_OBJ_STRTOK_R_TRUE@am__objects_68 = libgnu_la-strtok_r.lo @GL_COND_OBJ_TIME_TRUE@am__objects_69 = libgnu_la-time.lo @GL_COND_OBJ_TIME_R_TRUE@am__objects_70 = libgnu_la-time_r.lo @LIBUNISTRING_COMPILE_UNICASE_TOLOWER_TRUE@am__objects_71 = unicase/libgnu_la-tolower.lo @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM_TRUE@am__objects_72 = unictype/libgnu_la-ctype_alnum.lo @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA_TRUE@am__objects_73 = unictype/libgnu_la-ctype_alpha.lo @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK_TRUE@am__objects_74 = unictype/libgnu_la-ctype_blank.lo @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL_TRUE@am__objects_75 = unictype/libgnu_la-ctype_cntrl.lo @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT_TRUE@am__objects_76 = unictype/libgnu_la-ctype_digit.lo @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH_TRUE@am__objects_77 = unictype/libgnu_la-ctype_graph.lo @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER_TRUE@am__objects_78 = unictype/libgnu_la-ctype_lower.lo @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT_TRUE@am__objects_79 = unictype/libgnu_la-ctype_print.lo @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT_TRUE@am__objects_80 = unictype/libgnu_la-ctype_punct.lo @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE_TRUE@am__objects_81 = unictype/libgnu_la-ctype_space.lo @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER_TRUE@am__objects_82 = unictype/libgnu_la-ctype_upper.lo @LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT_TRUE@am__objects_83 = unictype/libgnu_la-ctype_xdigit.lo @LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__objects_84 = uniwidth/libgnu_la-width.lo @GL_COND_OBJ_WCRTOMB_TRUE@am__objects_85 = libgnu_la-wcrtomb.lo @GL_COND_OBJ_WCTYPE_TRUE@am__objects_86 = libgnu_la-wctype.lo @GL_COND_OBJ_WCWIDTH_TRUE@am__objects_87 = libgnu_la-wcwidth.lo @GL_COND_OBJ_WINDOWS_MUTEX_TRUE@am__objects_88 = \ @GL_COND_OBJ_WINDOWS_MUTEX_TRUE@ libgnu_la-windows-mutex.lo @GL_COND_OBJ_WINDOWS_ONCE_TRUE@am__objects_89 = \ @GL_COND_OBJ_WINDOWS_ONCE_TRUE@ libgnu_la-windows-once.lo @GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE@am__objects_90 = libgnu_la-windows-recmutex.lo @GL_COND_OBJ_WINDOWS_RWLOCK_TRUE@am__objects_91 = \ @GL_COND_OBJ_WINDOWS_RWLOCK_TRUE@ libgnu_la-windows-rwlock.lo am_libgnu_la_OBJECTS = $(am__objects_1) libgnu_la-argp-ba.lo \ libgnu_la-argp-eexst.lo libgnu_la-argp-fmtstream.lo \ libgnu_la-argp-fs-xinl.lo libgnu_la-argp-help.lo \ libgnu_la-argp-parse.lo libgnu_la-argp-pin.lo \ libgnu_la-argp-pv.lo libgnu_la-argp-pvh.lo \ libgnu_la-argp-xinl.lo libgnu_la-openat-proc.lo \ libgnu_la-basename-lgpl.lo $(am__objects_2) \ libgnu_la-c-ctype.lo libgnu_la-c32isalnum.lo \ libgnu_la-c32isalpha.lo libgnu_la-c32isblank.lo \ libgnu_la-c32iscntrl.lo libgnu_la-c32isdigit.lo \ libgnu_la-c32isgraph.lo libgnu_la-c32islower.lo \ libgnu_la-c32isprint.lo libgnu_la-c32ispunct.lo \ libgnu_la-c32isspace.lo libgnu_la-c32isupper.lo \ libgnu_la-c32isxdigit.lo libgnu_la-c32tolower.lo \ libgnu_la-c32width.lo $(am__objects_3) libgnu_la-cloexec.lo \ $(am__objects_4) $(am__objects_5) $(am__objects_6) \ $(am__objects_7) $(am__objects_8) libgnu_la-exitfail.lo \ $(am__objects_9) $(am__objects_10) $(am__objects_11) \ libgnu_la-fd-hook.lo libgnu_la-fd-safer-flag.lo \ libgnu_la-dup-safer-flag.lo libgnu_la-filenamecat-lgpl.lo \ $(am__objects_12) $(am__objects_13) $(am__objects_14) \ $(am__objects_15) $(am__objects_16) $(am__objects_17) \ $(am__objects_18) $(am__objects_19) $(am__objects_20) \ $(am__objects_21) $(am__objects_22) $(am__objects_23) \ $(am__objects_24) malloc/libgnu_la-dynarray_at_failure.lo \ malloc/libgnu_la-dynarray_emplace_enlarge.lo \ malloc/libgnu_la-dynarray_finalize.lo \ malloc/libgnu_la-dynarray_resize.lo \ malloc/libgnu_la-dynarray_resize_clear.lo $(am__objects_25) \ libgnu_la-hard-locale.lo $(am__objects_26) $(am__objects_27) \ $(am__objects_28) $(am__objects_29) $(am__objects_30) \ libgnu_la-localcharset.lo $(am__objects_31) \ glthread/libgnu_la-lock.lo $(am__objects_32) \ libgnu_la-malloca.lo libgnu_la-math.lo libgnu_la-mbchar.lo \ $(am__objects_33) $(am__objects_34) libgnu_la-mbschr.lo \ $(am__objects_35) libgnu_la-mbspbrk.lo libgnu_la-mbsspn.lo \ libgnu_la-mbstok_r.lo libgnu_la-mbszero.lo $(am__objects_36) \ libgnu_la-mbuiterf.lo $(am__objects_37) $(am__objects_38) \ $(am__objects_39) $(am__objects_40) $(am__objects_41) \ $(am__objects_42) $(am__objects_43) $(am__objects_44) \ libgnu_la-nproc.lo $(am__objects_45) $(am__objects_46) \ libgnu_la-openat-die.lo $(am__objects_47) $(am__objects_48) \ $(am__objects_49) libgnu_la-save-cwd.lo $(am__objects_50) \ $(am__objects_51) libgnu_la-setlocale_null.lo \ $(am__objects_52) $(am__objects_53) $(am__objects_54) \ libgnu_la-sockets.lo $(am__objects_55) libgnu_la-stat-time.lo \ $(am__objects_56) $(am__objects_57) $(am__objects_58) \ $(am__objects_59) $(am__objects_60) $(am__objects_61) \ $(am__objects_62) $(am__objects_63) $(am__objects_64) \ $(am__objects_65) libgnu_la-strnlen1.lo $(am__objects_66) \ $(am__objects_67) $(am__objects_68) libgnu_la-sys_socket.lo \ glthread/libgnu_la-threadlib.lo $(am__objects_69) \ $(am__objects_70) $(am__objects_71) $(am__objects_72) \ $(am__objects_73) $(am__objects_74) $(am__objects_75) \ $(am__objects_76) $(am__objects_77) $(am__objects_78) \ $(am__objects_79) $(am__objects_80) $(am__objects_81) \ $(am__objects_82) $(am__objects_83) libgnu_la-unistd.lo \ libgnu_la-dup-safer.lo libgnu_la-fd-safer.lo \ libgnu_la-pipe-safer.lo $(am__objects_84) $(am__objects_85) \ $(am__objects_86) libgnu_la-wctype-h.lo $(am__objects_87) \ $(am__objects_88) $(am__objects_89) $(am__objects_90) \ $(am__objects_91) libgnu_la-xsize.lo libgnu_la_OBJECTS = $(am_libgnu_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgnu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libgnu_la_CFLAGS) \ $(CFLAGS) $(libgnu_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/alloca.Plo \ ./$(DEPDIR)/libgnu_la-access.Plo \ ./$(DEPDIR)/libgnu_la-alloca.Plo \ ./$(DEPDIR)/libgnu_la-argp-ba.Plo \ ./$(DEPDIR)/libgnu_la-argp-eexst.Plo \ ./$(DEPDIR)/libgnu_la-argp-fmtstream.Plo \ ./$(DEPDIR)/libgnu_la-argp-fs-xinl.Plo \ ./$(DEPDIR)/libgnu_la-argp-help.Plo \ ./$(DEPDIR)/libgnu_la-argp-parse.Plo \ ./$(DEPDIR)/libgnu_la-argp-pin.Plo \ ./$(DEPDIR)/libgnu_la-argp-pv.Plo \ ./$(DEPDIR)/libgnu_la-argp-pvh.Plo \ ./$(DEPDIR)/libgnu_la-argp-xinl.Plo \ ./$(DEPDIR)/libgnu_la-asnprintf.Plo \ ./$(DEPDIR)/libgnu_la-at-func.Plo \ ./$(DEPDIR)/libgnu_la-basename-lgpl.Plo \ ./$(DEPDIR)/libgnu_la-btowc.Plo \ ./$(DEPDIR)/libgnu_la-c-ctype.Plo \ ./$(DEPDIR)/libgnu_la-c32isalnum.Plo \ ./$(DEPDIR)/libgnu_la-c32isalpha.Plo \ ./$(DEPDIR)/libgnu_la-c32isblank.Plo \ ./$(DEPDIR)/libgnu_la-c32iscntrl.Plo \ ./$(DEPDIR)/libgnu_la-c32isdigit.Plo \ ./$(DEPDIR)/libgnu_la-c32isgraph.Plo \ ./$(DEPDIR)/libgnu_la-c32islower.Plo \ ./$(DEPDIR)/libgnu_la-c32isprint.Plo \ ./$(DEPDIR)/libgnu_la-c32ispunct.Plo \ ./$(DEPDIR)/libgnu_la-c32isspace.Plo \ ./$(DEPDIR)/libgnu_la-c32isupper.Plo \ ./$(DEPDIR)/libgnu_la-c32isxdigit.Plo \ ./$(DEPDIR)/libgnu_la-c32tolower.Plo \ ./$(DEPDIR)/libgnu_la-c32width.Plo \ ./$(DEPDIR)/libgnu_la-chdir-long.Plo \ ./$(DEPDIR)/libgnu_la-cloexec.Plo \ ./$(DEPDIR)/libgnu_la-close.Plo \ ./$(DEPDIR)/libgnu_la-dirfd.Plo \ ./$(DEPDIR)/libgnu_la-dup-safer-flag.Plo \ ./$(DEPDIR)/libgnu_la-dup-safer.Plo \ ./$(DEPDIR)/libgnu_la-dup2.Plo ./$(DEPDIR)/libgnu_la-error.Plo \ ./$(DEPDIR)/libgnu_la-euidaccess.Plo \ ./$(DEPDIR)/libgnu_la-exitfail.Plo \ ./$(DEPDIR)/libgnu_la-faccessat.Plo \ ./$(DEPDIR)/libgnu_la-fchdir.Plo \ ./$(DEPDIR)/libgnu_la-fcntl.Plo \ ./$(DEPDIR)/libgnu_la-fd-hook.Plo \ ./$(DEPDIR)/libgnu_la-fd-safer-flag.Plo \ ./$(DEPDIR)/libgnu_la-fd-safer.Plo \ ./$(DEPDIR)/libgnu_la-filenamecat-lgpl.Plo \ ./$(DEPDIR)/libgnu_la-float.Plo ./$(DEPDIR)/libgnu_la-free.Plo \ ./$(DEPDIR)/libgnu_la-fstat.Plo \ ./$(DEPDIR)/libgnu_la-fstatat.Plo \ ./$(DEPDIR)/libgnu_la-getcwd-lgpl.Plo \ ./$(DEPDIR)/libgnu_la-getdelim.Plo \ ./$(DEPDIR)/libgnu_la-getdtablesize.Plo \ ./$(DEPDIR)/libgnu_la-getgroups.Plo \ ./$(DEPDIR)/libgnu_la-getline.Plo \ ./$(DEPDIR)/libgnu_la-getopt.Plo \ ./$(DEPDIR)/libgnu_la-getopt1.Plo \ ./$(DEPDIR)/libgnu_la-getprogname.Plo \ ./$(DEPDIR)/libgnu_la-gettimeofday.Plo \ ./$(DEPDIR)/libgnu_la-group-member.Plo \ ./$(DEPDIR)/libgnu_la-hard-locale.Plo \ ./$(DEPDIR)/libgnu_la-isnan.Plo \ ./$(DEPDIR)/libgnu_la-isnand.Plo \ ./$(DEPDIR)/libgnu_la-isnanf.Plo \ ./$(DEPDIR)/libgnu_la-isnanl.Plo \ ./$(DEPDIR)/libgnu_la-iswblank.Plo \ ./$(DEPDIR)/libgnu_la-iswctype.Plo \ ./$(DEPDIR)/libgnu_la-iswdigit.Plo \ ./$(DEPDIR)/libgnu_la-iswpunct.Plo \ ./$(DEPDIR)/libgnu_la-iswxdigit.Plo \ ./$(DEPDIR)/libgnu_la-itold.Plo \ ./$(DEPDIR)/libgnu_la-lc-charset-dispatch.Plo \ ./$(DEPDIR)/libgnu_la-localcharset.Plo \ ./$(DEPDIR)/libgnu_la-localeconv.Plo \ ./$(DEPDIR)/libgnu_la-lstat.Plo \ ./$(DEPDIR)/libgnu_la-malloc.Plo \ ./$(DEPDIR)/libgnu_la-malloca.Plo \ ./$(DEPDIR)/libgnu_la-math.Plo \ ./$(DEPDIR)/libgnu_la-mbchar.Plo \ ./$(DEPDIR)/libgnu_la-mbrtoc32.Plo \ ./$(DEPDIR)/libgnu_la-mbrtowc.Plo \ ./$(DEPDIR)/libgnu_la-mbschr.Plo \ ./$(DEPDIR)/libgnu_la-mbsinit.Plo \ ./$(DEPDIR)/libgnu_la-mbspbrk.Plo \ ./$(DEPDIR)/libgnu_la-mbsspn.Plo \ ./$(DEPDIR)/libgnu_la-mbstok_r.Plo \ ./$(DEPDIR)/libgnu_la-mbszero.Plo \ ./$(DEPDIR)/libgnu_la-mbtowc-lock.Plo \ ./$(DEPDIR)/libgnu_la-mbtowc.Plo \ ./$(DEPDIR)/libgnu_la-mbuiterf.Plo \ ./$(DEPDIR)/libgnu_la-memchr.Plo \ ./$(DEPDIR)/libgnu_la-memmove.Plo \ ./$(DEPDIR)/libgnu_la-mempcpy.Plo \ ./$(DEPDIR)/libgnu_la-memrchr.Plo \ ./$(DEPDIR)/libgnu_la-mktime.Plo \ ./$(DEPDIR)/libgnu_la-msvc-inval.Plo \ ./$(DEPDIR)/libgnu_la-msvc-nothrow.Plo \ ./$(DEPDIR)/libgnu_la-nl_langinfo-lock.Plo \ ./$(DEPDIR)/libgnu_la-nl_langinfo.Plo \ ./$(DEPDIR)/libgnu_la-nproc.Plo ./$(DEPDIR)/libgnu_la-open.Plo \ ./$(DEPDIR)/libgnu_la-openat-die.Plo \ ./$(DEPDIR)/libgnu_la-openat-proc.Plo \ ./$(DEPDIR)/libgnu_la-openat.Plo \ ./$(DEPDIR)/libgnu_la-pipe-safer.Plo \ ./$(DEPDIR)/libgnu_la-pipe.Plo \ ./$(DEPDIR)/libgnu_la-printf-args.Plo \ ./$(DEPDIR)/libgnu_la-printf-parse.Plo \ ./$(DEPDIR)/libgnu_la-rawmemchr.Plo \ ./$(DEPDIR)/libgnu_la-realloc.Plo \ ./$(DEPDIR)/libgnu_la-regcomp.Plo \ ./$(DEPDIR)/libgnu_la-regex.Plo \ ./$(DEPDIR)/libgnu_la-regex_internal.Plo \ ./$(DEPDIR)/libgnu_la-regexec.Plo \ ./$(DEPDIR)/libgnu_la-save-cwd.Plo \ ./$(DEPDIR)/libgnu_la-secure_getenv.Plo \ ./$(DEPDIR)/libgnu_la-select.Plo \ ./$(DEPDIR)/libgnu_la-setlocale-lock.Plo \ ./$(DEPDIR)/libgnu_la-setlocale_null.Plo \ ./$(DEPDIR)/libgnu_la-signbitd.Plo \ ./$(DEPDIR)/libgnu_la-signbitf.Plo \ ./$(DEPDIR)/libgnu_la-signbitl.Plo \ ./$(DEPDIR)/libgnu_la-sleep.Plo \ ./$(DEPDIR)/libgnu_la-sockets.Plo \ ./$(DEPDIR)/libgnu_la-stat-time.Plo \ ./$(DEPDIR)/libgnu_la-stat-w32.Plo \ ./$(DEPDIR)/libgnu_la-stat.Plo \ ./$(DEPDIR)/libgnu_la-stdio-read.Plo \ ./$(DEPDIR)/libgnu_la-stdio-write.Plo \ ./$(DEPDIR)/libgnu_la-strcasecmp.Plo \ ./$(DEPDIR)/libgnu_la-strchrnul.Plo \ ./$(DEPDIR)/libgnu_la-strdup.Plo \ ./$(DEPDIR)/libgnu_la-strerror-override.Plo \ ./$(DEPDIR)/libgnu_la-strerror.Plo \ ./$(DEPDIR)/libgnu_la-strncasecmp.Plo \ ./$(DEPDIR)/libgnu_la-strndup.Plo \ ./$(DEPDIR)/libgnu_la-strnlen.Plo \ ./$(DEPDIR)/libgnu_la-strnlen1.Plo \ ./$(DEPDIR)/libgnu_la-strptime.Plo \ ./$(DEPDIR)/libgnu_la-strtod.Plo \ ./$(DEPDIR)/libgnu_la-strtok_r.Plo \ ./$(DEPDIR)/libgnu_la-sys_socket.Plo \ ./$(DEPDIR)/libgnu_la-time.Plo \ ./$(DEPDIR)/libgnu_la-time_r.Plo \ ./$(DEPDIR)/libgnu_la-unistd.Plo \ ./$(DEPDIR)/libgnu_la-vasnprintf.Plo \ ./$(DEPDIR)/libgnu_la-vsnprintf.Plo \ ./$(DEPDIR)/libgnu_la-wcrtomb.Plo \ ./$(DEPDIR)/libgnu_la-wctype-h.Plo \ ./$(DEPDIR)/libgnu_la-wctype.Plo \ ./$(DEPDIR)/libgnu_la-wcwidth.Plo \ ./$(DEPDIR)/libgnu_la-windows-mutex.Plo \ ./$(DEPDIR)/libgnu_la-windows-once.Plo \ ./$(DEPDIR)/libgnu_la-windows-recmutex.Plo \ ./$(DEPDIR)/libgnu_la-windows-rwlock.Plo \ ./$(DEPDIR)/libgnu_la-xsize.Plo \ glthread/$(DEPDIR)/libgnu_la-lock.Plo \ glthread/$(DEPDIR)/libgnu_la-threadlib.Plo \ malloc/$(DEPDIR)/libgnu_la-dynarray-skeleton.Plo \ malloc/$(DEPDIR)/libgnu_la-dynarray_at_failure.Plo \ malloc/$(DEPDIR)/libgnu_la-dynarray_emplace_enlarge.Plo \ malloc/$(DEPDIR)/libgnu_la-dynarray_finalize.Plo \ malloc/$(DEPDIR)/libgnu_la-dynarray_resize.Plo \ malloc/$(DEPDIR)/libgnu_la-dynarray_resize_clear.Plo \ unicase/$(DEPDIR)/libgnu_la-tolower.Plo \ unictype/$(DEPDIR)/libgnu_la-ctype_alnum.Plo \ unictype/$(DEPDIR)/libgnu_la-ctype_alpha.Plo \ unictype/$(DEPDIR)/libgnu_la-ctype_blank.Plo \ unictype/$(DEPDIR)/libgnu_la-ctype_cntrl.Plo \ unictype/$(DEPDIR)/libgnu_la-ctype_digit.Plo \ unictype/$(DEPDIR)/libgnu_la-ctype_graph.Plo \ unictype/$(DEPDIR)/libgnu_la-ctype_lower.Plo \ unictype/$(DEPDIR)/libgnu_la-ctype_print.Plo \ unictype/$(DEPDIR)/libgnu_la-ctype_punct.Plo \ unictype/$(DEPDIR)/libgnu_la-ctype_space.Plo \ unictype/$(DEPDIR)/libgnu_la-ctype_upper.Plo \ unictype/$(DEPDIR)/libgnu_la-ctype_xdigit.Plo \ uniwidth/$(DEPDIR)/libgnu_la-width.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) DIST_SOURCES = $(am__libgnu_la_SOURCES_DIST) \ $(EXTRA_libgnu_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp alloca.c DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.14 gnits subdir-objects SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = libgnu.la EXTRA_DIST = alloca.c alloca.in.h assert.in.h verify.h assure.h \ attribute.h basename-lgpl.h c32is-impl.h c32is-impl.h \ c32is-impl.h c32is-impl.h c32is-impl.h c32is-impl.h \ c32is-impl.h c32is-impl.h c32is-impl.h c32is-impl.h \ c32is-impl.h c32is-impl.h c32to-impl.h chdir-long.h cloexec.h \ dirent.in.h dirent-private.h errno.in.h error.in.h exitfail.h \ at-func.c fcntl.in.h fd-hook.h filename.h filenamecat.h \ float.in.h stat-w32.c stat-w32.h at-func.c \ $(top_srcdir)/bootstrapped/build-aux/gendocs.sh \ getopt-cdefs.in.h getopt-core.h getopt-ext.h getopt-pfx-core.h \ getopt-pfx-ext.h getopt.in.h getopt_int.h getprogname.h \ $(top_srcdir)/bootstrapped/build-aux/git-version-gen \ dynarray.h malloc/dynarray-skeleton.c malloc/dynarray.h \ hard-locale.h \ $(top_srcdir)/bootstrapped/build-aux/config.rpath \ intprops-internal.h intprops.h inttypes.in.h float+.h isnan.c \ isnand-nolibm.h isnand.c float+.h isnan.c isnanf-nolibm.h \ isnanf.c float+.h isnan.c isnanl-nolibm.h isnanl.c \ iswctype-impl.h langinfo.in.h cdefs.h libc-config.h \ limits.in.h localcharset.h locale.in.h malloc.c malloc.c \ malloca.h math.in.h mbchar.h lc-charset-dispatch.c \ lc-charset-dispatch.h mbrtowc-impl-utf8.h mbrtowc-impl.h \ mbtowc-lock.c mbtowc-lock.h windows-initguard.h \ lc-charset-dispatch.c lc-charset-dispatch.h \ mbrtowc-impl-utf8.h mbrtowc-impl.h mbtowc-lock.c mbtowc-lock.h \ windows-initguard.h mbtowc-impl.h memchr.valgrind \ mktime-internal.h mktime.c msvc-inval.h msvc-nothrow.h \ windows-initguard.h nproc.h openat.h pathmax.h \ rawmemchr.valgrind realloc.c realloc.c regcomp.c regex.h \ regex_internal.c regex_internal.h regexec.c root-uid.h \ save-cwd.h setlocale_null.h windows-initguard.h signal.in.h \ float+.h _Noreturn.h arg-nonnull.h c++defs.h warn-on-use.h \ w32sock.h stat-w32.c stat-w32.h stat-time.h \ intprops-internal.h stdckdint.in.h stddef.in.h stdint.in.h \ stdio.in.h stdlib.in.h strchrnul.valgrind streq.h \ strerror-override.h string.in.h strings.in.h sys_select.in.h \ sys_socket.in.h sys_stat.in.h sys_time.in.h sys_types.in.h \ sys_uio.in.h sys_wait.in.h sysexits.in.h time.in.h uchar.in.h \ unicase.in.h unicase/simple-mapping.h unicase/tolower.h \ unictype.in.h unictype/bitmap.h unictype/ctype_alnum.h \ unictype/bitmap.h unictype/ctype_alpha.h unictype/bitmap.h \ unictype/ctype_blank.h unictype/bitmap.h \ unictype/ctype_cntrl.h unictype/bitmap.h \ unictype/ctype_digit.h unictype/bitmap.h \ unictype/ctype_graph.h unictype/bitmap.h \ unictype/ctype_lower.h unictype/bitmap.h \ unictype/ctype_print.h unictype/bitmap.h \ unictype/ctype_punct.h unictype/bitmap.h \ unictype/ctype_space.h unictype/bitmap.h \ unictype/ctype_upper.h unictype/bitmap.h \ unictype/ctype_xdigit.h uninorm.in.h unistd.in.h unistd--.h \ unistd-safer.h unitypes.in.h localcharset.h uniwidth.in.h \ unictype/bitmap.h uniwidth/cjk.h uniwidth/width0.h \ uniwidth/width2.h asnprintf.c float+.h printf-args.c \ printf-args.h printf-parse.c printf-parse.h vasnprintf.c \ vasnprintf.h verify.h vsnprintf.c wchar.in.h wctype-impl.h \ wctype.in.h windows-initguard.h windows-mutex.h windows-once.h \ windows-initguard.h windows-recmutex.h windows-initguard.h \ windows-rwlock.h xalloc-oversized.h BUILT_SOURCES = $(ALLOCA_H) $(ASSERT_H) dirent.h $(ERRNO_H) error.h \ fcntl.h $(FLOAT_H) $(GETOPT_H) $(GETOPT_CDEFS_H) \ malloc/dynarray.gl.h malloc/dynarray-skeleton.gl.h inttypes.h \ langinfo.h $(LIMITS_H) locale.h math.h signal.h $(STDCKDINT_H) \ $(STDDEF_H) $(STDINT_H) stdio.h stdlib.h string.h strings.h \ sys/select.h sys/socket.h sys/stat.h sys/time.h sys/types.h \ sys/uio.h sys/wait.h $(SYSEXITS_H) time.h uchar.h \ $(LIBUNISTRING_UNICASE_H) $(LIBUNISTRING_UNICTYPE_H) \ $(LIBUNISTRING_UNINORM_H) unistd.h $(LIBUNISTRING_UNITYPES_H) \ $(LIBUNISTRING_UNIWIDTH_H) wchar.h wctype.h SUFFIXES = MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t assert.h \ assert.h-t dirent.h dirent.h-t errno.h errno.h-t error.h \ error.h-t fcntl.h fcntl.h-t float.h float.h-t getopt.h \ getopt.h-t getopt-cdefs.h getopt-cdefs.h-t \ malloc/dynarray.gl.h malloc/dynarray.gl.h-t \ malloc/dynarray-skeleton.gl.h malloc/dynarray-skeleton.gl.h-t \ inttypes.h inttypes.h-t langinfo.h langinfo.h-t limits.h \ limits.h-t locale.h locale.h-t math.h math.h-t1 math.h-t2 \ math.h-t3 math.h-t4 math.h-t5 math.h-t6 signal.h signal.h-t \ stdckdint.h stdckdint.h-t stddef.h stddef.h-t stdint.h \ stdint.h-t stdio.h stdio.h-t1 stdio.h-t2 stdio.h-t3 stdlib.h \ stdlib.h-t1 stdlib.h-t2 stdlib.h-t3 string.h string.h-t1 \ string.h-t2 strings.h strings.h-t sys/select.h sys/select.h-t \ sys/socket.h sys/socket.h-t sys/stat.h sys/stat.h-t sys/time.h \ sys/time.h-t sys/types.h sys/types.h-t sys/uio.h sys/uio.h-t \ sys/wait.h sys/wait.h-t sysexits.h sysexits.h-t time.h \ time.h-t uchar.h uchar.h-t unicase.h unicase.h-t unictype.h \ unictype.h-t1 unictype.h-t2 unictype.h-t3 unictype.h-t4 \ uninorm.h uninorm.h-t unistd.h unistd.h-t1 unistd.h-t2 \ unistd.h-t3 unistd.h-t4 unitypes.h unitypes.h-t uniwidth.h \ uniwidth.h-t wchar.h wchar.h-t1 wchar.h-t2 wchar.h-t3 wctype.h \ wctype.h-t MOSTLYCLEANDIRS = sys sys sys sys sys CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = # No GNU Make output. AM_CPPFLAGS = AM_CFLAGS = libgnu_la_SOURCES = $(am__append_1) argp.h argp-ba.c argp-eexst.c \ argp-fmtstream.c argp-fmtstream.h argp-fs-xinl.c argp-help.c \ argp-namefrob.h argp-parse.c argp-pin.c argp-pv.c argp-pvh.c \ argp-xinl.c openat-priv.h openat-proc.c basename-lgpl.c \ $(am__append_2) c-ctype.h c-ctype.c c32isalnum.c c32isalpha.c \ c32isblank.c c32iscntrl.c c32isdigit.c c32isgraph.c \ c32islower.c c32isprint.c c32ispunct.c c32isspace.c \ c32isupper.c c32isxdigit.c c32tolower.c c32width.c \ $(am__append_3) cloexec.c $(am__append_4) $(am__append_5) \ $(am__append_6) $(am__append_7) $(am__append_8) exitfail.c \ $(am__append_9) $(am__append_10) $(am__append_11) fd-hook.c \ fd-safer-flag.c dup-safer-flag.c filenamecat-lgpl.c \ $(am__append_12) $(am__append_13) $(am__append_14) \ $(am__append_15) $(am__append_16) $(am__append_17) \ $(am__append_18) $(am__append_19) $(am__append_20) \ $(am__append_21) $(am__append_22) $(am__append_23) gettext.h \ $(am__append_24) malloc/dynarray_at_failure.c \ malloc/dynarray_emplace_enlarge.c malloc/dynarray_finalize.c \ malloc/dynarray_resize.c malloc/dynarray_resize_clear.c \ $(am__append_25) hard-locale.c idx.h $(am__append_26) \ $(am__append_27) $(am__append_28) $(am__append_29) \ $(am__append_30) localcharset.c $(am__append_31) \ glthread/lock.h glthread/lock.c $(am__append_32) malloca.c \ math.c mbchar.c $(am__append_33) $(am__append_34) mbschr.c \ $(am__append_35) mbspbrk.c mbsspn.c mbstok_r.c mbszero.c \ $(am__append_36) mbuiterf.h mbuiterf.c $(am__append_37) \ $(am__append_38) $(am__append_39) $(am__append_40) minmax.h \ $(am__append_41) $(am__append_42) $(am__append_43) \ $(am__append_44) nproc.c $(am__append_45) $(am__append_46) \ openat-die.c $(am__append_47) $(am__append_48) \ $(am__append_49) save-cwd.c $(am__append_50) $(am__append_51) \ setlocale_null.c $(am__append_52) $(am__append_53) size_max.h \ $(am__append_54) sockets.h sockets.c $(am__append_55) \ stat-time.c $(am__append_56) $(am__append_57) $(am__append_58) \ $(am__append_59) $(am__append_60) $(am__append_61) \ $(am__append_62) $(am__append_63) $(am__append_64) \ $(am__append_65) strnlen1.h strnlen1.c $(am__append_66) \ $(am__append_67) $(am__append_68) sys_socket.c \ glthread/threadlib.c $(am__append_69) $(am__append_70) \ $(am__append_71) $(am__append_72) $(am__append_73) \ $(am__append_74) $(am__append_75) $(am__append_76) \ $(am__append_77) $(am__append_78) $(am__append_79) \ $(am__append_80) $(am__append_81) $(am__append_82) \ $(am__append_83) unistd.c dup-safer.c fd-safer.c pipe-safer.c \ $(am__append_84) $(am__append_85) $(am__append_86) wctype-h.c \ $(am__append_87) $(am__append_88) $(am__append_89) \ $(am__append_90) $(am__append_91) xsize.h xsize.c libgnu_la_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS) libgnu_la_LIBADD = $(gl_LTLIBOBJS) @LTALLOCA@ libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) @LTALLOCA@ EXTRA_libgnu_la_SOURCES = alloca.c at-func.c stat-w32.c at-func.c \ malloc/dynarray-skeleton.c isnan.c isnand.c isnan.c isnanf.c \ isnan.c isnanl.c malloc.c malloc.c lc-charset-dispatch.c \ mbtowc-lock.c lc-charset-dispatch.c mbtowc-lock.c mktime.c \ realloc.c realloc.c regcomp.c regex_internal.c regexec.c \ stat-w32.c asnprintf.c printf-args.c printf-parse.c \ vasnprintf.c vsnprintf.c libgnu_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(EUIDACCESS_LIBGEN) \ $(HARD_LOCALE_LIB) $(LIBSOCKET) $(LIBTHREAD) $(LTLIBC32CONV) \ $(LTLIBINTL) $(LTLIBUNISTRING) $(MBRTOWC_LIB) $(SELECT_LIB) \ $(SETLOCALE_NULL_LIB) # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || __clang__ || 60000000 <= __DECC_VER) # In 'sed', replace the pattern space with a "DO NOT EDIT" comment. SED_HEADER_NOEDIT = s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */, # '$(SED_HEADER_STDOUT) -e "..."' runs 'sed' but first outputs "DO NOT EDIT". SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G # '$(SED_HEADER_TO_AT_t) FILE' copies FILE to $@-t, prepending a leading # "DO_NOT_EDIT". Although this could be done more simply via: # SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) > $@-t # the -n and 'w' avoid a fork+exec, at least when GNU Make is used. SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t' # Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that gl_V_at = $(AM_V_GEN) # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H = $(srcdir)/_Noreturn.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H = $(srcdir)/arg-nonnull.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H = $(srcdir)/c++defs.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H = $(srcdir)/warn-on-use.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits bootstrapped/lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits bootstrapped/lib/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } malloc/$(am__dirstamp): @$(MKDIR_P) malloc @: > malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) malloc/$(DEPDIR) @: > malloc/$(DEPDIR)/$(am__dirstamp) malloc/libgnu_la-dynarray_at_failure.lo: malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) malloc/libgnu_la-dynarray_emplace_enlarge.lo: malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) malloc/libgnu_la-dynarray_finalize.lo: malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) malloc/libgnu_la-dynarray_resize.lo: malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) malloc/libgnu_la-dynarray_resize_clear.lo: malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) glthread/$(am__dirstamp): @$(MKDIR_P) glthread @: > glthread/$(am__dirstamp) glthread/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) glthread/$(DEPDIR) @: > glthread/$(DEPDIR)/$(am__dirstamp) glthread/libgnu_la-lock.lo: glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) glthread/libgnu_la-threadlib.lo: glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) unicase/$(am__dirstamp): @$(MKDIR_P) unicase @: > unicase/$(am__dirstamp) unicase/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) unicase/$(DEPDIR) @: > unicase/$(DEPDIR)/$(am__dirstamp) unicase/libgnu_la-tolower.lo: unicase/$(am__dirstamp) \ unicase/$(DEPDIR)/$(am__dirstamp) unictype/$(am__dirstamp): @$(MKDIR_P) unictype @: > unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) unictype/$(DEPDIR) @: > unictype/$(DEPDIR)/$(am__dirstamp) unictype/libgnu_la-ctype_alnum.lo: unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) unictype/libgnu_la-ctype_alpha.lo: unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) unictype/libgnu_la-ctype_blank.lo: unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) unictype/libgnu_la-ctype_cntrl.lo: unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) unictype/libgnu_la-ctype_digit.lo: unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) unictype/libgnu_la-ctype_graph.lo: unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) unictype/libgnu_la-ctype_lower.lo: unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) unictype/libgnu_la-ctype_print.lo: unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) unictype/libgnu_la-ctype_punct.lo: unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) unictype/libgnu_la-ctype_space.lo: unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) unictype/libgnu_la-ctype_upper.lo: unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) unictype/libgnu_la-ctype_xdigit.lo: unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) uniwidth/$(am__dirstamp): @$(MKDIR_P) uniwidth @: > uniwidth/$(am__dirstamp) uniwidth/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) uniwidth/$(DEPDIR) @: > uniwidth/$(DEPDIR)/$(am__dirstamp) uniwidth/libgnu_la-width.lo: uniwidth/$(am__dirstamp) \ uniwidth/$(DEPDIR)/$(am__dirstamp) malloc/libgnu_la-dynarray-skeleton.lo: malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) $(EXTRA_libgnu_la_DEPENDENCIES) $(AM_V_CCLD)$(libgnu_la_LINK) $(libgnu_la_OBJECTS) $(libgnu_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f glthread/*.$(OBJEXT) -rm -f glthread/*.lo -rm -f malloc/*.$(OBJEXT) -rm -f malloc/*.lo -rm -f unicase/*.$(OBJEXT) -rm -f unicase/*.lo -rm -f unictype/*.$(OBJEXT) -rm -f unictype/*.lo -rm -f uniwidth/*.$(OBJEXT) -rm -f uniwidth/*.lo distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-access.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-alloca.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-argp-ba.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-argp-eexst.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-argp-fmtstream.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-argp-fs-xinl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-argp-help.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-argp-parse.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-argp-pin.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-argp-pv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-argp-pvh.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-argp-xinl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-asnprintf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-at-func.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-basename-lgpl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-btowc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c-ctype.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32isalnum.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32isalpha.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32isblank.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32iscntrl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32isdigit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32isgraph.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32islower.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32isprint.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32ispunct.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32isspace.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32isupper.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32isxdigit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32tolower.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-c32width.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-chdir-long.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-cloexec.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-close.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-dirfd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-dup-safer-flag.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-dup-safer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-dup2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-error.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-euidaccess.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-exitfail.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-faccessat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-fchdir.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-fcntl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-fd-hook.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-fd-safer-flag.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-fd-safer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-filenamecat-lgpl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-float.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-free.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-fstat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-fstatat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-getcwd-lgpl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-getdelim.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-getdtablesize.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-getgroups.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-getline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-getopt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-getopt1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-getprogname.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-gettimeofday.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-group-member.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-hard-locale.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-isnan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-isnand.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-isnanf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-isnanl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-iswblank.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-iswctype.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-iswdigit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-iswpunct.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-iswxdigit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-itold.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-lc-charset-dispatch.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-localcharset.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-localeconv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-lstat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-malloc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-malloca.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-math.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mbchar.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mbrtoc32.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mbrtowc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mbschr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mbsinit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mbspbrk.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mbsspn.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mbstok_r.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mbszero.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mbtowc-lock.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mbtowc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mbuiterf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-memchr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-memmove.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mempcpy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-memrchr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-mktime.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-msvc-inval.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-msvc-nothrow.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-nl_langinfo-lock.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-nl_langinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-nproc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-open.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-openat-die.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-openat-proc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-openat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-pipe-safer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-pipe.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-printf-args.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-printf-parse.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-rawmemchr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-realloc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-regcomp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-regex.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-regex_internal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-regexec.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-save-cwd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-secure_getenv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-select.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-setlocale-lock.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-setlocale_null.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-signbitd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-signbitf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-signbitl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-sleep.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-sockets.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-stat-time.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-stat-w32.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-stat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-stdio-read.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-stdio-write.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-strcasecmp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-strchrnul.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-strdup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-strerror-override.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-strerror.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-strncasecmp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-strndup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-strnlen.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-strnlen1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-strptime.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-strtod.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-strtok_r.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-sys_socket.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-time.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-time_r.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-unistd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-vasnprintf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-vsnprintf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-wcrtomb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-wctype-h.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-wctype.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-wcwidth.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-windows-mutex.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-windows-once.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-windows-recmutex.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-windows-rwlock.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgnu_la-xsize.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/libgnu_la-lock.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/libgnu_la-threadlib.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_la-dynarray-skeleton.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_la-dynarray_at_failure.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_la-dynarray_emplace_enlarge.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_la-dynarray_finalize.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_la-dynarray_resize.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/libgnu_la-dynarray_resize_clear.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/libgnu_la-tolower.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/libgnu_la-ctype_alnum.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/libgnu_la-ctype_alpha.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/libgnu_la-ctype_blank.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/libgnu_la-ctype_cntrl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/libgnu_la-ctype_digit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/libgnu_la-ctype_graph.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/libgnu_la-ctype_lower.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/libgnu_la-ctype_print.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/libgnu_la-ctype_punct.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/libgnu_la-ctype_space.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/libgnu_la-ctype_upper.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/libgnu_la-ctype_xdigit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/libgnu_la-width.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libgnu_la-access.lo: access.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-access.lo -MD -MP -MF $(DEPDIR)/libgnu_la-access.Tpo -c -o libgnu_la-access.lo `test -f 'access.c' || echo '$(srcdir)/'`access.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-access.Tpo $(DEPDIR)/libgnu_la-access.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='access.c' object='libgnu_la-access.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-access.lo `test -f 'access.c' || echo '$(srcdir)/'`access.c libgnu_la-argp-ba.lo: argp-ba.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-argp-ba.lo -MD -MP -MF $(DEPDIR)/libgnu_la-argp-ba.Tpo -c -o libgnu_la-argp-ba.lo `test -f 'argp-ba.c' || echo '$(srcdir)/'`argp-ba.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-argp-ba.Tpo $(DEPDIR)/libgnu_la-argp-ba.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='argp-ba.c' object='libgnu_la-argp-ba.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-argp-ba.lo `test -f 'argp-ba.c' || echo '$(srcdir)/'`argp-ba.c libgnu_la-argp-eexst.lo: argp-eexst.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-argp-eexst.lo -MD -MP -MF $(DEPDIR)/libgnu_la-argp-eexst.Tpo -c -o libgnu_la-argp-eexst.lo `test -f 'argp-eexst.c' || echo '$(srcdir)/'`argp-eexst.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-argp-eexst.Tpo $(DEPDIR)/libgnu_la-argp-eexst.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='argp-eexst.c' object='libgnu_la-argp-eexst.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-argp-eexst.lo `test -f 'argp-eexst.c' || echo '$(srcdir)/'`argp-eexst.c libgnu_la-argp-fmtstream.lo: argp-fmtstream.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-argp-fmtstream.lo -MD -MP -MF $(DEPDIR)/libgnu_la-argp-fmtstream.Tpo -c -o libgnu_la-argp-fmtstream.lo `test -f 'argp-fmtstream.c' || echo '$(srcdir)/'`argp-fmtstream.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-argp-fmtstream.Tpo $(DEPDIR)/libgnu_la-argp-fmtstream.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='argp-fmtstream.c' object='libgnu_la-argp-fmtstream.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-argp-fmtstream.lo `test -f 'argp-fmtstream.c' || echo '$(srcdir)/'`argp-fmtstream.c libgnu_la-argp-fs-xinl.lo: argp-fs-xinl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-argp-fs-xinl.lo -MD -MP -MF $(DEPDIR)/libgnu_la-argp-fs-xinl.Tpo -c -o libgnu_la-argp-fs-xinl.lo `test -f 'argp-fs-xinl.c' || echo '$(srcdir)/'`argp-fs-xinl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-argp-fs-xinl.Tpo $(DEPDIR)/libgnu_la-argp-fs-xinl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='argp-fs-xinl.c' object='libgnu_la-argp-fs-xinl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-argp-fs-xinl.lo `test -f 'argp-fs-xinl.c' || echo '$(srcdir)/'`argp-fs-xinl.c libgnu_la-argp-help.lo: argp-help.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-argp-help.lo -MD -MP -MF $(DEPDIR)/libgnu_la-argp-help.Tpo -c -o libgnu_la-argp-help.lo `test -f 'argp-help.c' || echo '$(srcdir)/'`argp-help.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-argp-help.Tpo $(DEPDIR)/libgnu_la-argp-help.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='argp-help.c' object='libgnu_la-argp-help.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-argp-help.lo `test -f 'argp-help.c' || echo '$(srcdir)/'`argp-help.c libgnu_la-argp-parse.lo: argp-parse.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-argp-parse.lo -MD -MP -MF $(DEPDIR)/libgnu_la-argp-parse.Tpo -c -o libgnu_la-argp-parse.lo `test -f 'argp-parse.c' || echo '$(srcdir)/'`argp-parse.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-argp-parse.Tpo $(DEPDIR)/libgnu_la-argp-parse.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='argp-parse.c' object='libgnu_la-argp-parse.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-argp-parse.lo `test -f 'argp-parse.c' || echo '$(srcdir)/'`argp-parse.c libgnu_la-argp-pin.lo: argp-pin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-argp-pin.lo -MD -MP -MF $(DEPDIR)/libgnu_la-argp-pin.Tpo -c -o libgnu_la-argp-pin.lo `test -f 'argp-pin.c' || echo '$(srcdir)/'`argp-pin.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-argp-pin.Tpo $(DEPDIR)/libgnu_la-argp-pin.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='argp-pin.c' object='libgnu_la-argp-pin.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-argp-pin.lo `test -f 'argp-pin.c' || echo '$(srcdir)/'`argp-pin.c libgnu_la-argp-pv.lo: argp-pv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-argp-pv.lo -MD -MP -MF $(DEPDIR)/libgnu_la-argp-pv.Tpo -c -o libgnu_la-argp-pv.lo `test -f 'argp-pv.c' || echo '$(srcdir)/'`argp-pv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-argp-pv.Tpo $(DEPDIR)/libgnu_la-argp-pv.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='argp-pv.c' object='libgnu_la-argp-pv.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-argp-pv.lo `test -f 'argp-pv.c' || echo '$(srcdir)/'`argp-pv.c libgnu_la-argp-pvh.lo: argp-pvh.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-argp-pvh.lo -MD -MP -MF $(DEPDIR)/libgnu_la-argp-pvh.Tpo -c -o libgnu_la-argp-pvh.lo `test -f 'argp-pvh.c' || echo '$(srcdir)/'`argp-pvh.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-argp-pvh.Tpo $(DEPDIR)/libgnu_la-argp-pvh.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='argp-pvh.c' object='libgnu_la-argp-pvh.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-argp-pvh.lo `test -f 'argp-pvh.c' || echo '$(srcdir)/'`argp-pvh.c libgnu_la-argp-xinl.lo: argp-xinl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-argp-xinl.lo -MD -MP -MF $(DEPDIR)/libgnu_la-argp-xinl.Tpo -c -o libgnu_la-argp-xinl.lo `test -f 'argp-xinl.c' || echo '$(srcdir)/'`argp-xinl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-argp-xinl.Tpo $(DEPDIR)/libgnu_la-argp-xinl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='argp-xinl.c' object='libgnu_la-argp-xinl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-argp-xinl.lo `test -f 'argp-xinl.c' || echo '$(srcdir)/'`argp-xinl.c libgnu_la-openat-proc.lo: openat-proc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-openat-proc.lo -MD -MP -MF $(DEPDIR)/libgnu_la-openat-proc.Tpo -c -o libgnu_la-openat-proc.lo `test -f 'openat-proc.c' || echo '$(srcdir)/'`openat-proc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-openat-proc.Tpo $(DEPDIR)/libgnu_la-openat-proc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openat-proc.c' object='libgnu_la-openat-proc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-openat-proc.lo `test -f 'openat-proc.c' || echo '$(srcdir)/'`openat-proc.c libgnu_la-basename-lgpl.lo: basename-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-basename-lgpl.lo -MD -MP -MF $(DEPDIR)/libgnu_la-basename-lgpl.Tpo -c -o libgnu_la-basename-lgpl.lo `test -f 'basename-lgpl.c' || echo '$(srcdir)/'`basename-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-basename-lgpl.Tpo $(DEPDIR)/libgnu_la-basename-lgpl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='basename-lgpl.c' object='libgnu_la-basename-lgpl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-basename-lgpl.lo `test -f 'basename-lgpl.c' || echo '$(srcdir)/'`basename-lgpl.c libgnu_la-btowc.lo: btowc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-btowc.lo -MD -MP -MF $(DEPDIR)/libgnu_la-btowc.Tpo -c -o libgnu_la-btowc.lo `test -f 'btowc.c' || echo '$(srcdir)/'`btowc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-btowc.Tpo $(DEPDIR)/libgnu_la-btowc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='btowc.c' object='libgnu_la-btowc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-btowc.lo `test -f 'btowc.c' || echo '$(srcdir)/'`btowc.c libgnu_la-c-ctype.lo: c-ctype.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c-ctype.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c-ctype.Tpo -c -o libgnu_la-c-ctype.lo `test -f 'c-ctype.c' || echo '$(srcdir)/'`c-ctype.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c-ctype.Tpo $(DEPDIR)/libgnu_la-c-ctype.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c-ctype.c' object='libgnu_la-c-ctype.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c-ctype.lo `test -f 'c-ctype.c' || echo '$(srcdir)/'`c-ctype.c libgnu_la-c32isalnum.lo: c32isalnum.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32isalnum.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32isalnum.Tpo -c -o libgnu_la-c32isalnum.lo `test -f 'c32isalnum.c' || echo '$(srcdir)/'`c32isalnum.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32isalnum.Tpo $(DEPDIR)/libgnu_la-c32isalnum.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32isalnum.c' object='libgnu_la-c32isalnum.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32isalnum.lo `test -f 'c32isalnum.c' || echo '$(srcdir)/'`c32isalnum.c libgnu_la-c32isalpha.lo: c32isalpha.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32isalpha.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32isalpha.Tpo -c -o libgnu_la-c32isalpha.lo `test -f 'c32isalpha.c' || echo '$(srcdir)/'`c32isalpha.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32isalpha.Tpo $(DEPDIR)/libgnu_la-c32isalpha.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32isalpha.c' object='libgnu_la-c32isalpha.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32isalpha.lo `test -f 'c32isalpha.c' || echo '$(srcdir)/'`c32isalpha.c libgnu_la-c32isblank.lo: c32isblank.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32isblank.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32isblank.Tpo -c -o libgnu_la-c32isblank.lo `test -f 'c32isblank.c' || echo '$(srcdir)/'`c32isblank.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32isblank.Tpo $(DEPDIR)/libgnu_la-c32isblank.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32isblank.c' object='libgnu_la-c32isblank.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32isblank.lo `test -f 'c32isblank.c' || echo '$(srcdir)/'`c32isblank.c libgnu_la-c32iscntrl.lo: c32iscntrl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32iscntrl.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32iscntrl.Tpo -c -o libgnu_la-c32iscntrl.lo `test -f 'c32iscntrl.c' || echo '$(srcdir)/'`c32iscntrl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32iscntrl.Tpo $(DEPDIR)/libgnu_la-c32iscntrl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32iscntrl.c' object='libgnu_la-c32iscntrl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32iscntrl.lo `test -f 'c32iscntrl.c' || echo '$(srcdir)/'`c32iscntrl.c libgnu_la-c32isdigit.lo: c32isdigit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32isdigit.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32isdigit.Tpo -c -o libgnu_la-c32isdigit.lo `test -f 'c32isdigit.c' || echo '$(srcdir)/'`c32isdigit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32isdigit.Tpo $(DEPDIR)/libgnu_la-c32isdigit.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32isdigit.c' object='libgnu_la-c32isdigit.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32isdigit.lo `test -f 'c32isdigit.c' || echo '$(srcdir)/'`c32isdigit.c libgnu_la-c32isgraph.lo: c32isgraph.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32isgraph.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32isgraph.Tpo -c -o libgnu_la-c32isgraph.lo `test -f 'c32isgraph.c' || echo '$(srcdir)/'`c32isgraph.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32isgraph.Tpo $(DEPDIR)/libgnu_la-c32isgraph.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32isgraph.c' object='libgnu_la-c32isgraph.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32isgraph.lo `test -f 'c32isgraph.c' || echo '$(srcdir)/'`c32isgraph.c libgnu_la-c32islower.lo: c32islower.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32islower.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32islower.Tpo -c -o libgnu_la-c32islower.lo `test -f 'c32islower.c' || echo '$(srcdir)/'`c32islower.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32islower.Tpo $(DEPDIR)/libgnu_la-c32islower.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32islower.c' object='libgnu_la-c32islower.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32islower.lo `test -f 'c32islower.c' || echo '$(srcdir)/'`c32islower.c libgnu_la-c32isprint.lo: c32isprint.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32isprint.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32isprint.Tpo -c -o libgnu_la-c32isprint.lo `test -f 'c32isprint.c' || echo '$(srcdir)/'`c32isprint.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32isprint.Tpo $(DEPDIR)/libgnu_la-c32isprint.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32isprint.c' object='libgnu_la-c32isprint.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32isprint.lo `test -f 'c32isprint.c' || echo '$(srcdir)/'`c32isprint.c libgnu_la-c32ispunct.lo: c32ispunct.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32ispunct.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32ispunct.Tpo -c -o libgnu_la-c32ispunct.lo `test -f 'c32ispunct.c' || echo '$(srcdir)/'`c32ispunct.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32ispunct.Tpo $(DEPDIR)/libgnu_la-c32ispunct.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32ispunct.c' object='libgnu_la-c32ispunct.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32ispunct.lo `test -f 'c32ispunct.c' || echo '$(srcdir)/'`c32ispunct.c libgnu_la-c32isspace.lo: c32isspace.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32isspace.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32isspace.Tpo -c -o libgnu_la-c32isspace.lo `test -f 'c32isspace.c' || echo '$(srcdir)/'`c32isspace.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32isspace.Tpo $(DEPDIR)/libgnu_la-c32isspace.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32isspace.c' object='libgnu_la-c32isspace.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32isspace.lo `test -f 'c32isspace.c' || echo '$(srcdir)/'`c32isspace.c libgnu_la-c32isupper.lo: c32isupper.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32isupper.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32isupper.Tpo -c -o libgnu_la-c32isupper.lo `test -f 'c32isupper.c' || echo '$(srcdir)/'`c32isupper.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32isupper.Tpo $(DEPDIR)/libgnu_la-c32isupper.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32isupper.c' object='libgnu_la-c32isupper.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32isupper.lo `test -f 'c32isupper.c' || echo '$(srcdir)/'`c32isupper.c libgnu_la-c32isxdigit.lo: c32isxdigit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32isxdigit.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32isxdigit.Tpo -c -o libgnu_la-c32isxdigit.lo `test -f 'c32isxdigit.c' || echo '$(srcdir)/'`c32isxdigit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32isxdigit.Tpo $(DEPDIR)/libgnu_la-c32isxdigit.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32isxdigit.c' object='libgnu_la-c32isxdigit.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32isxdigit.lo `test -f 'c32isxdigit.c' || echo '$(srcdir)/'`c32isxdigit.c libgnu_la-c32tolower.lo: c32tolower.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32tolower.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32tolower.Tpo -c -o libgnu_la-c32tolower.lo `test -f 'c32tolower.c' || echo '$(srcdir)/'`c32tolower.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32tolower.Tpo $(DEPDIR)/libgnu_la-c32tolower.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32tolower.c' object='libgnu_la-c32tolower.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32tolower.lo `test -f 'c32tolower.c' || echo '$(srcdir)/'`c32tolower.c libgnu_la-c32width.lo: c32width.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-c32width.lo -MD -MP -MF $(DEPDIR)/libgnu_la-c32width.Tpo -c -o libgnu_la-c32width.lo `test -f 'c32width.c' || echo '$(srcdir)/'`c32width.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-c32width.Tpo $(DEPDIR)/libgnu_la-c32width.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c32width.c' object='libgnu_la-c32width.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-c32width.lo `test -f 'c32width.c' || echo '$(srcdir)/'`c32width.c libgnu_la-chdir-long.lo: chdir-long.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-chdir-long.lo -MD -MP -MF $(DEPDIR)/libgnu_la-chdir-long.Tpo -c -o libgnu_la-chdir-long.lo `test -f 'chdir-long.c' || echo '$(srcdir)/'`chdir-long.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-chdir-long.Tpo $(DEPDIR)/libgnu_la-chdir-long.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='chdir-long.c' object='libgnu_la-chdir-long.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-chdir-long.lo `test -f 'chdir-long.c' || echo '$(srcdir)/'`chdir-long.c libgnu_la-cloexec.lo: cloexec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-cloexec.lo -MD -MP -MF $(DEPDIR)/libgnu_la-cloexec.Tpo -c -o libgnu_la-cloexec.lo `test -f 'cloexec.c' || echo '$(srcdir)/'`cloexec.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-cloexec.Tpo $(DEPDIR)/libgnu_la-cloexec.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cloexec.c' object='libgnu_la-cloexec.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-cloexec.lo `test -f 'cloexec.c' || echo '$(srcdir)/'`cloexec.c libgnu_la-close.lo: close.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-close.lo -MD -MP -MF $(DEPDIR)/libgnu_la-close.Tpo -c -o libgnu_la-close.lo `test -f 'close.c' || echo '$(srcdir)/'`close.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-close.Tpo $(DEPDIR)/libgnu_la-close.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='close.c' object='libgnu_la-close.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-close.lo `test -f 'close.c' || echo '$(srcdir)/'`close.c libgnu_la-dirfd.lo: dirfd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-dirfd.lo -MD -MP -MF $(DEPDIR)/libgnu_la-dirfd.Tpo -c -o libgnu_la-dirfd.lo `test -f 'dirfd.c' || echo '$(srcdir)/'`dirfd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-dirfd.Tpo $(DEPDIR)/libgnu_la-dirfd.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dirfd.c' object='libgnu_la-dirfd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-dirfd.lo `test -f 'dirfd.c' || echo '$(srcdir)/'`dirfd.c libgnu_la-dup2.lo: dup2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-dup2.lo -MD -MP -MF $(DEPDIR)/libgnu_la-dup2.Tpo -c -o libgnu_la-dup2.lo `test -f 'dup2.c' || echo '$(srcdir)/'`dup2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-dup2.Tpo $(DEPDIR)/libgnu_la-dup2.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup2.c' object='libgnu_la-dup2.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-dup2.lo `test -f 'dup2.c' || echo '$(srcdir)/'`dup2.c libgnu_la-error.lo: error.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-error.lo -MD -MP -MF $(DEPDIR)/libgnu_la-error.Tpo -c -o libgnu_la-error.lo `test -f 'error.c' || echo '$(srcdir)/'`error.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-error.Tpo $(DEPDIR)/libgnu_la-error.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='error.c' object='libgnu_la-error.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-error.lo `test -f 'error.c' || echo '$(srcdir)/'`error.c libgnu_la-euidaccess.lo: euidaccess.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-euidaccess.lo -MD -MP -MF $(DEPDIR)/libgnu_la-euidaccess.Tpo -c -o libgnu_la-euidaccess.lo `test -f 'euidaccess.c' || echo '$(srcdir)/'`euidaccess.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-euidaccess.Tpo $(DEPDIR)/libgnu_la-euidaccess.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='euidaccess.c' object='libgnu_la-euidaccess.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-euidaccess.lo `test -f 'euidaccess.c' || echo '$(srcdir)/'`euidaccess.c libgnu_la-exitfail.lo: exitfail.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-exitfail.lo -MD -MP -MF $(DEPDIR)/libgnu_la-exitfail.Tpo -c -o libgnu_la-exitfail.lo `test -f 'exitfail.c' || echo '$(srcdir)/'`exitfail.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-exitfail.Tpo $(DEPDIR)/libgnu_la-exitfail.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='exitfail.c' object='libgnu_la-exitfail.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-exitfail.lo `test -f 'exitfail.c' || echo '$(srcdir)/'`exitfail.c libgnu_la-faccessat.lo: faccessat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-faccessat.lo -MD -MP -MF $(DEPDIR)/libgnu_la-faccessat.Tpo -c -o libgnu_la-faccessat.lo `test -f 'faccessat.c' || echo '$(srcdir)/'`faccessat.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-faccessat.Tpo $(DEPDIR)/libgnu_la-faccessat.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='faccessat.c' object='libgnu_la-faccessat.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-faccessat.lo `test -f 'faccessat.c' || echo '$(srcdir)/'`faccessat.c libgnu_la-fchdir.lo: fchdir.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-fchdir.lo -MD -MP -MF $(DEPDIR)/libgnu_la-fchdir.Tpo -c -o libgnu_la-fchdir.lo `test -f 'fchdir.c' || echo '$(srcdir)/'`fchdir.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-fchdir.Tpo $(DEPDIR)/libgnu_la-fchdir.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fchdir.c' object='libgnu_la-fchdir.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-fchdir.lo `test -f 'fchdir.c' || echo '$(srcdir)/'`fchdir.c libgnu_la-fcntl.lo: fcntl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-fcntl.lo -MD -MP -MF $(DEPDIR)/libgnu_la-fcntl.Tpo -c -o libgnu_la-fcntl.lo `test -f 'fcntl.c' || echo '$(srcdir)/'`fcntl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-fcntl.Tpo $(DEPDIR)/libgnu_la-fcntl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fcntl.c' object='libgnu_la-fcntl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-fcntl.lo `test -f 'fcntl.c' || echo '$(srcdir)/'`fcntl.c libgnu_la-fd-hook.lo: fd-hook.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-fd-hook.lo -MD -MP -MF $(DEPDIR)/libgnu_la-fd-hook.Tpo -c -o libgnu_la-fd-hook.lo `test -f 'fd-hook.c' || echo '$(srcdir)/'`fd-hook.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-fd-hook.Tpo $(DEPDIR)/libgnu_la-fd-hook.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-hook.c' object='libgnu_la-fd-hook.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-fd-hook.lo `test -f 'fd-hook.c' || echo '$(srcdir)/'`fd-hook.c libgnu_la-fd-safer-flag.lo: fd-safer-flag.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-fd-safer-flag.lo -MD -MP -MF $(DEPDIR)/libgnu_la-fd-safer-flag.Tpo -c -o libgnu_la-fd-safer-flag.lo `test -f 'fd-safer-flag.c' || echo '$(srcdir)/'`fd-safer-flag.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-fd-safer-flag.Tpo $(DEPDIR)/libgnu_la-fd-safer-flag.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-safer-flag.c' object='libgnu_la-fd-safer-flag.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-fd-safer-flag.lo `test -f 'fd-safer-flag.c' || echo '$(srcdir)/'`fd-safer-flag.c libgnu_la-dup-safer-flag.lo: dup-safer-flag.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-dup-safer-flag.lo -MD -MP -MF $(DEPDIR)/libgnu_la-dup-safer-flag.Tpo -c -o libgnu_la-dup-safer-flag.lo `test -f 'dup-safer-flag.c' || echo '$(srcdir)/'`dup-safer-flag.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-dup-safer-flag.Tpo $(DEPDIR)/libgnu_la-dup-safer-flag.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup-safer-flag.c' object='libgnu_la-dup-safer-flag.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-dup-safer-flag.lo `test -f 'dup-safer-flag.c' || echo '$(srcdir)/'`dup-safer-flag.c libgnu_la-filenamecat-lgpl.lo: filenamecat-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-filenamecat-lgpl.lo -MD -MP -MF $(DEPDIR)/libgnu_la-filenamecat-lgpl.Tpo -c -o libgnu_la-filenamecat-lgpl.lo `test -f 'filenamecat-lgpl.c' || echo '$(srcdir)/'`filenamecat-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-filenamecat-lgpl.Tpo $(DEPDIR)/libgnu_la-filenamecat-lgpl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filenamecat-lgpl.c' object='libgnu_la-filenamecat-lgpl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-filenamecat-lgpl.lo `test -f 'filenamecat-lgpl.c' || echo '$(srcdir)/'`filenamecat-lgpl.c libgnu_la-float.lo: float.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-float.lo -MD -MP -MF $(DEPDIR)/libgnu_la-float.Tpo -c -o libgnu_la-float.lo `test -f 'float.c' || echo '$(srcdir)/'`float.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-float.Tpo $(DEPDIR)/libgnu_la-float.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='float.c' object='libgnu_la-float.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-float.lo `test -f 'float.c' || echo '$(srcdir)/'`float.c libgnu_la-itold.lo: itold.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-itold.lo -MD -MP -MF $(DEPDIR)/libgnu_la-itold.Tpo -c -o libgnu_la-itold.lo `test -f 'itold.c' || echo '$(srcdir)/'`itold.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-itold.Tpo $(DEPDIR)/libgnu_la-itold.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='itold.c' object='libgnu_la-itold.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-itold.lo `test -f 'itold.c' || echo '$(srcdir)/'`itold.c libgnu_la-free.lo: free.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-free.lo -MD -MP -MF $(DEPDIR)/libgnu_la-free.Tpo -c -o libgnu_la-free.lo `test -f 'free.c' || echo '$(srcdir)/'`free.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-free.Tpo $(DEPDIR)/libgnu_la-free.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='free.c' object='libgnu_la-free.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-free.lo `test -f 'free.c' || echo '$(srcdir)/'`free.c libgnu_la-fstat.lo: fstat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-fstat.lo -MD -MP -MF $(DEPDIR)/libgnu_la-fstat.Tpo -c -o libgnu_la-fstat.lo `test -f 'fstat.c' || echo '$(srcdir)/'`fstat.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-fstat.Tpo $(DEPDIR)/libgnu_la-fstat.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fstat.c' object='libgnu_la-fstat.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-fstat.lo `test -f 'fstat.c' || echo '$(srcdir)/'`fstat.c libgnu_la-fstatat.lo: fstatat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-fstatat.lo -MD -MP -MF $(DEPDIR)/libgnu_la-fstatat.Tpo -c -o libgnu_la-fstatat.lo `test -f 'fstatat.c' || echo '$(srcdir)/'`fstatat.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-fstatat.Tpo $(DEPDIR)/libgnu_la-fstatat.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fstatat.c' object='libgnu_la-fstatat.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-fstatat.lo `test -f 'fstatat.c' || echo '$(srcdir)/'`fstatat.c libgnu_la-getcwd-lgpl.lo: getcwd-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-getcwd-lgpl.lo -MD -MP -MF $(DEPDIR)/libgnu_la-getcwd-lgpl.Tpo -c -o libgnu_la-getcwd-lgpl.lo `test -f 'getcwd-lgpl.c' || echo '$(srcdir)/'`getcwd-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-getcwd-lgpl.Tpo $(DEPDIR)/libgnu_la-getcwd-lgpl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getcwd-lgpl.c' object='libgnu_la-getcwd-lgpl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-getcwd-lgpl.lo `test -f 'getcwd-lgpl.c' || echo '$(srcdir)/'`getcwd-lgpl.c libgnu_la-getdelim.lo: getdelim.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-getdelim.lo -MD -MP -MF $(DEPDIR)/libgnu_la-getdelim.Tpo -c -o libgnu_la-getdelim.lo `test -f 'getdelim.c' || echo '$(srcdir)/'`getdelim.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-getdelim.Tpo $(DEPDIR)/libgnu_la-getdelim.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdelim.c' object='libgnu_la-getdelim.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-getdelim.lo `test -f 'getdelim.c' || echo '$(srcdir)/'`getdelim.c libgnu_la-getdtablesize.lo: getdtablesize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-getdtablesize.lo -MD -MP -MF $(DEPDIR)/libgnu_la-getdtablesize.Tpo -c -o libgnu_la-getdtablesize.lo `test -f 'getdtablesize.c' || echo '$(srcdir)/'`getdtablesize.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-getdtablesize.Tpo $(DEPDIR)/libgnu_la-getdtablesize.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdtablesize.c' object='libgnu_la-getdtablesize.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-getdtablesize.lo `test -f 'getdtablesize.c' || echo '$(srcdir)/'`getdtablesize.c libgnu_la-getgroups.lo: getgroups.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-getgroups.lo -MD -MP -MF $(DEPDIR)/libgnu_la-getgroups.Tpo -c -o libgnu_la-getgroups.lo `test -f 'getgroups.c' || echo '$(srcdir)/'`getgroups.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-getgroups.Tpo $(DEPDIR)/libgnu_la-getgroups.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getgroups.c' object='libgnu_la-getgroups.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-getgroups.lo `test -f 'getgroups.c' || echo '$(srcdir)/'`getgroups.c libgnu_la-getline.lo: getline.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-getline.lo -MD -MP -MF $(DEPDIR)/libgnu_la-getline.Tpo -c -o libgnu_la-getline.lo `test -f 'getline.c' || echo '$(srcdir)/'`getline.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-getline.Tpo $(DEPDIR)/libgnu_la-getline.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getline.c' object='libgnu_la-getline.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-getline.lo `test -f 'getline.c' || echo '$(srcdir)/'`getline.c libgnu_la-getopt.lo: getopt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-getopt.lo -MD -MP -MF $(DEPDIR)/libgnu_la-getopt.Tpo -c -o libgnu_la-getopt.lo `test -f 'getopt.c' || echo '$(srcdir)/'`getopt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-getopt.Tpo $(DEPDIR)/libgnu_la-getopt.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getopt.c' object='libgnu_la-getopt.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-getopt.lo `test -f 'getopt.c' || echo '$(srcdir)/'`getopt.c libgnu_la-getopt1.lo: getopt1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-getopt1.lo -MD -MP -MF $(DEPDIR)/libgnu_la-getopt1.Tpo -c -o libgnu_la-getopt1.lo `test -f 'getopt1.c' || echo '$(srcdir)/'`getopt1.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-getopt1.Tpo $(DEPDIR)/libgnu_la-getopt1.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getopt1.c' object='libgnu_la-getopt1.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-getopt1.lo `test -f 'getopt1.c' || echo '$(srcdir)/'`getopt1.c libgnu_la-getprogname.lo: getprogname.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-getprogname.lo -MD -MP -MF $(DEPDIR)/libgnu_la-getprogname.Tpo -c -o libgnu_la-getprogname.lo `test -f 'getprogname.c' || echo '$(srcdir)/'`getprogname.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-getprogname.Tpo $(DEPDIR)/libgnu_la-getprogname.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getprogname.c' object='libgnu_la-getprogname.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-getprogname.lo `test -f 'getprogname.c' || echo '$(srcdir)/'`getprogname.c libgnu_la-gettimeofday.lo: gettimeofday.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-gettimeofday.lo -MD -MP -MF $(DEPDIR)/libgnu_la-gettimeofday.Tpo -c -o libgnu_la-gettimeofday.lo `test -f 'gettimeofday.c' || echo '$(srcdir)/'`gettimeofday.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-gettimeofday.Tpo $(DEPDIR)/libgnu_la-gettimeofday.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gettimeofday.c' object='libgnu_la-gettimeofday.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-gettimeofday.lo `test -f 'gettimeofday.c' || echo '$(srcdir)/'`gettimeofday.c malloc/libgnu_la-dynarray_at_failure.lo: malloc/dynarray_at_failure.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT malloc/libgnu_la-dynarray_at_failure.lo -MD -MP -MF malloc/$(DEPDIR)/libgnu_la-dynarray_at_failure.Tpo -c -o malloc/libgnu_la-dynarray_at_failure.lo `test -f 'malloc/dynarray_at_failure.c' || echo '$(srcdir)/'`malloc/dynarray_at_failure.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_la-dynarray_at_failure.Tpo malloc/$(DEPDIR)/libgnu_la-dynarray_at_failure.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_at_failure.c' object='malloc/libgnu_la-dynarray_at_failure.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_la-dynarray_at_failure.lo `test -f 'malloc/dynarray_at_failure.c' || echo '$(srcdir)/'`malloc/dynarray_at_failure.c malloc/libgnu_la-dynarray_emplace_enlarge.lo: malloc/dynarray_emplace_enlarge.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT malloc/libgnu_la-dynarray_emplace_enlarge.lo -MD -MP -MF malloc/$(DEPDIR)/libgnu_la-dynarray_emplace_enlarge.Tpo -c -o malloc/libgnu_la-dynarray_emplace_enlarge.lo `test -f 'malloc/dynarray_emplace_enlarge.c' || echo '$(srcdir)/'`malloc/dynarray_emplace_enlarge.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_la-dynarray_emplace_enlarge.Tpo malloc/$(DEPDIR)/libgnu_la-dynarray_emplace_enlarge.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_emplace_enlarge.c' object='malloc/libgnu_la-dynarray_emplace_enlarge.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_la-dynarray_emplace_enlarge.lo `test -f 'malloc/dynarray_emplace_enlarge.c' || echo '$(srcdir)/'`malloc/dynarray_emplace_enlarge.c malloc/libgnu_la-dynarray_finalize.lo: malloc/dynarray_finalize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT malloc/libgnu_la-dynarray_finalize.lo -MD -MP -MF malloc/$(DEPDIR)/libgnu_la-dynarray_finalize.Tpo -c -o malloc/libgnu_la-dynarray_finalize.lo `test -f 'malloc/dynarray_finalize.c' || echo '$(srcdir)/'`malloc/dynarray_finalize.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_la-dynarray_finalize.Tpo malloc/$(DEPDIR)/libgnu_la-dynarray_finalize.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_finalize.c' object='malloc/libgnu_la-dynarray_finalize.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_la-dynarray_finalize.lo `test -f 'malloc/dynarray_finalize.c' || echo '$(srcdir)/'`malloc/dynarray_finalize.c malloc/libgnu_la-dynarray_resize.lo: malloc/dynarray_resize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT malloc/libgnu_la-dynarray_resize.lo -MD -MP -MF malloc/$(DEPDIR)/libgnu_la-dynarray_resize.Tpo -c -o malloc/libgnu_la-dynarray_resize.lo `test -f 'malloc/dynarray_resize.c' || echo '$(srcdir)/'`malloc/dynarray_resize.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_la-dynarray_resize.Tpo malloc/$(DEPDIR)/libgnu_la-dynarray_resize.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_resize.c' object='malloc/libgnu_la-dynarray_resize.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_la-dynarray_resize.lo `test -f 'malloc/dynarray_resize.c' || echo '$(srcdir)/'`malloc/dynarray_resize.c malloc/libgnu_la-dynarray_resize_clear.lo: malloc/dynarray_resize_clear.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT malloc/libgnu_la-dynarray_resize_clear.lo -MD -MP -MF malloc/$(DEPDIR)/libgnu_la-dynarray_resize_clear.Tpo -c -o malloc/libgnu_la-dynarray_resize_clear.lo `test -f 'malloc/dynarray_resize_clear.c' || echo '$(srcdir)/'`malloc/dynarray_resize_clear.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_la-dynarray_resize_clear.Tpo malloc/$(DEPDIR)/libgnu_la-dynarray_resize_clear.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_resize_clear.c' object='malloc/libgnu_la-dynarray_resize_clear.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_la-dynarray_resize_clear.lo `test -f 'malloc/dynarray_resize_clear.c' || echo '$(srcdir)/'`malloc/dynarray_resize_clear.c libgnu_la-group-member.lo: group-member.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-group-member.lo -MD -MP -MF $(DEPDIR)/libgnu_la-group-member.Tpo -c -o libgnu_la-group-member.lo `test -f 'group-member.c' || echo '$(srcdir)/'`group-member.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-group-member.Tpo $(DEPDIR)/libgnu_la-group-member.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='group-member.c' object='libgnu_la-group-member.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-group-member.lo `test -f 'group-member.c' || echo '$(srcdir)/'`group-member.c libgnu_la-hard-locale.lo: hard-locale.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-hard-locale.lo -MD -MP -MF $(DEPDIR)/libgnu_la-hard-locale.Tpo -c -o libgnu_la-hard-locale.lo `test -f 'hard-locale.c' || echo '$(srcdir)/'`hard-locale.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-hard-locale.Tpo $(DEPDIR)/libgnu_la-hard-locale.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hard-locale.c' object='libgnu_la-hard-locale.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-hard-locale.lo `test -f 'hard-locale.c' || echo '$(srcdir)/'`hard-locale.c libgnu_la-iswblank.lo: iswblank.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-iswblank.lo -MD -MP -MF $(DEPDIR)/libgnu_la-iswblank.Tpo -c -o libgnu_la-iswblank.lo `test -f 'iswblank.c' || echo '$(srcdir)/'`iswblank.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-iswblank.Tpo $(DEPDIR)/libgnu_la-iswblank.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iswblank.c' object='libgnu_la-iswblank.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-iswblank.lo `test -f 'iswblank.c' || echo '$(srcdir)/'`iswblank.c libgnu_la-iswctype.lo: iswctype.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-iswctype.lo -MD -MP -MF $(DEPDIR)/libgnu_la-iswctype.Tpo -c -o libgnu_la-iswctype.lo `test -f 'iswctype.c' || echo '$(srcdir)/'`iswctype.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-iswctype.Tpo $(DEPDIR)/libgnu_la-iswctype.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iswctype.c' object='libgnu_la-iswctype.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-iswctype.lo `test -f 'iswctype.c' || echo '$(srcdir)/'`iswctype.c libgnu_la-iswdigit.lo: iswdigit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-iswdigit.lo -MD -MP -MF $(DEPDIR)/libgnu_la-iswdigit.Tpo -c -o libgnu_la-iswdigit.lo `test -f 'iswdigit.c' || echo '$(srcdir)/'`iswdigit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-iswdigit.Tpo $(DEPDIR)/libgnu_la-iswdigit.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iswdigit.c' object='libgnu_la-iswdigit.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-iswdigit.lo `test -f 'iswdigit.c' || echo '$(srcdir)/'`iswdigit.c libgnu_la-iswpunct.lo: iswpunct.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-iswpunct.lo -MD -MP -MF $(DEPDIR)/libgnu_la-iswpunct.Tpo -c -o libgnu_la-iswpunct.lo `test -f 'iswpunct.c' || echo '$(srcdir)/'`iswpunct.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-iswpunct.Tpo $(DEPDIR)/libgnu_la-iswpunct.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iswpunct.c' object='libgnu_la-iswpunct.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-iswpunct.lo `test -f 'iswpunct.c' || echo '$(srcdir)/'`iswpunct.c libgnu_la-iswxdigit.lo: iswxdigit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-iswxdigit.lo -MD -MP -MF $(DEPDIR)/libgnu_la-iswxdigit.Tpo -c -o libgnu_la-iswxdigit.lo `test -f 'iswxdigit.c' || echo '$(srcdir)/'`iswxdigit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-iswxdigit.Tpo $(DEPDIR)/libgnu_la-iswxdigit.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iswxdigit.c' object='libgnu_la-iswxdigit.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-iswxdigit.lo `test -f 'iswxdigit.c' || echo '$(srcdir)/'`iswxdigit.c libgnu_la-localcharset.lo: localcharset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-localcharset.lo -MD -MP -MF $(DEPDIR)/libgnu_la-localcharset.Tpo -c -o libgnu_la-localcharset.lo `test -f 'localcharset.c' || echo '$(srcdir)/'`localcharset.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-localcharset.Tpo $(DEPDIR)/libgnu_la-localcharset.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='localcharset.c' object='libgnu_la-localcharset.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-localcharset.lo `test -f 'localcharset.c' || echo '$(srcdir)/'`localcharset.c libgnu_la-localeconv.lo: localeconv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-localeconv.lo -MD -MP -MF $(DEPDIR)/libgnu_la-localeconv.Tpo -c -o libgnu_la-localeconv.lo `test -f 'localeconv.c' || echo '$(srcdir)/'`localeconv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-localeconv.Tpo $(DEPDIR)/libgnu_la-localeconv.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='localeconv.c' object='libgnu_la-localeconv.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-localeconv.lo `test -f 'localeconv.c' || echo '$(srcdir)/'`localeconv.c glthread/libgnu_la-lock.lo: glthread/lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT glthread/libgnu_la-lock.lo -MD -MP -MF glthread/$(DEPDIR)/libgnu_la-lock.Tpo -c -o glthread/libgnu_la-lock.lo `test -f 'glthread/lock.c' || echo '$(srcdir)/'`glthread/lock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/libgnu_la-lock.Tpo glthread/$(DEPDIR)/libgnu_la-lock.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/lock.c' object='glthread/libgnu_la-lock.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o glthread/libgnu_la-lock.lo `test -f 'glthread/lock.c' || echo '$(srcdir)/'`glthread/lock.c libgnu_la-lstat.lo: lstat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-lstat.lo -MD -MP -MF $(DEPDIR)/libgnu_la-lstat.Tpo -c -o libgnu_la-lstat.lo `test -f 'lstat.c' || echo '$(srcdir)/'`lstat.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-lstat.Tpo $(DEPDIR)/libgnu_la-lstat.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lstat.c' object='libgnu_la-lstat.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-lstat.lo `test -f 'lstat.c' || echo '$(srcdir)/'`lstat.c libgnu_la-malloca.lo: malloca.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-malloca.lo -MD -MP -MF $(DEPDIR)/libgnu_la-malloca.Tpo -c -o libgnu_la-malloca.lo `test -f 'malloca.c' || echo '$(srcdir)/'`malloca.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-malloca.Tpo $(DEPDIR)/libgnu_la-malloca.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloca.c' object='libgnu_la-malloca.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-malloca.lo `test -f 'malloca.c' || echo '$(srcdir)/'`malloca.c libgnu_la-math.lo: math.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-math.lo -MD -MP -MF $(DEPDIR)/libgnu_la-math.Tpo -c -o libgnu_la-math.lo `test -f 'math.c' || echo '$(srcdir)/'`math.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-math.Tpo $(DEPDIR)/libgnu_la-math.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='math.c' object='libgnu_la-math.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-math.lo `test -f 'math.c' || echo '$(srcdir)/'`math.c libgnu_la-mbchar.lo: mbchar.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mbchar.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mbchar.Tpo -c -o libgnu_la-mbchar.lo `test -f 'mbchar.c' || echo '$(srcdir)/'`mbchar.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mbchar.Tpo $(DEPDIR)/libgnu_la-mbchar.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbchar.c' object='libgnu_la-mbchar.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mbchar.lo `test -f 'mbchar.c' || echo '$(srcdir)/'`mbchar.c libgnu_la-mbrtoc32.lo: mbrtoc32.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mbrtoc32.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mbrtoc32.Tpo -c -o libgnu_la-mbrtoc32.lo `test -f 'mbrtoc32.c' || echo '$(srcdir)/'`mbrtoc32.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mbrtoc32.Tpo $(DEPDIR)/libgnu_la-mbrtoc32.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbrtoc32.c' object='libgnu_la-mbrtoc32.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mbrtoc32.lo `test -f 'mbrtoc32.c' || echo '$(srcdir)/'`mbrtoc32.c libgnu_la-mbrtowc.lo: mbrtowc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mbrtowc.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mbrtowc.Tpo -c -o libgnu_la-mbrtowc.lo `test -f 'mbrtowc.c' || echo '$(srcdir)/'`mbrtowc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mbrtowc.Tpo $(DEPDIR)/libgnu_la-mbrtowc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbrtowc.c' object='libgnu_la-mbrtowc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mbrtowc.lo `test -f 'mbrtowc.c' || echo '$(srcdir)/'`mbrtowc.c libgnu_la-mbschr.lo: mbschr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mbschr.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mbschr.Tpo -c -o libgnu_la-mbschr.lo `test -f 'mbschr.c' || echo '$(srcdir)/'`mbschr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mbschr.Tpo $(DEPDIR)/libgnu_la-mbschr.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbschr.c' object='libgnu_la-mbschr.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mbschr.lo `test -f 'mbschr.c' || echo '$(srcdir)/'`mbschr.c libgnu_la-mbsinit.lo: mbsinit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mbsinit.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mbsinit.Tpo -c -o libgnu_la-mbsinit.lo `test -f 'mbsinit.c' || echo '$(srcdir)/'`mbsinit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mbsinit.Tpo $(DEPDIR)/libgnu_la-mbsinit.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbsinit.c' object='libgnu_la-mbsinit.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mbsinit.lo `test -f 'mbsinit.c' || echo '$(srcdir)/'`mbsinit.c libgnu_la-mbspbrk.lo: mbspbrk.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mbspbrk.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mbspbrk.Tpo -c -o libgnu_la-mbspbrk.lo `test -f 'mbspbrk.c' || echo '$(srcdir)/'`mbspbrk.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mbspbrk.Tpo $(DEPDIR)/libgnu_la-mbspbrk.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbspbrk.c' object='libgnu_la-mbspbrk.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mbspbrk.lo `test -f 'mbspbrk.c' || echo '$(srcdir)/'`mbspbrk.c libgnu_la-mbsspn.lo: mbsspn.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mbsspn.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mbsspn.Tpo -c -o libgnu_la-mbsspn.lo `test -f 'mbsspn.c' || echo '$(srcdir)/'`mbsspn.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mbsspn.Tpo $(DEPDIR)/libgnu_la-mbsspn.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbsspn.c' object='libgnu_la-mbsspn.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mbsspn.lo `test -f 'mbsspn.c' || echo '$(srcdir)/'`mbsspn.c libgnu_la-mbstok_r.lo: mbstok_r.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mbstok_r.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mbstok_r.Tpo -c -o libgnu_la-mbstok_r.lo `test -f 'mbstok_r.c' || echo '$(srcdir)/'`mbstok_r.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mbstok_r.Tpo $(DEPDIR)/libgnu_la-mbstok_r.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbstok_r.c' object='libgnu_la-mbstok_r.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mbstok_r.lo `test -f 'mbstok_r.c' || echo '$(srcdir)/'`mbstok_r.c libgnu_la-mbszero.lo: mbszero.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mbszero.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mbszero.Tpo -c -o libgnu_la-mbszero.lo `test -f 'mbszero.c' || echo '$(srcdir)/'`mbszero.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mbszero.Tpo $(DEPDIR)/libgnu_la-mbszero.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbszero.c' object='libgnu_la-mbszero.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mbszero.lo `test -f 'mbszero.c' || echo '$(srcdir)/'`mbszero.c libgnu_la-mbtowc.lo: mbtowc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mbtowc.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mbtowc.Tpo -c -o libgnu_la-mbtowc.lo `test -f 'mbtowc.c' || echo '$(srcdir)/'`mbtowc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mbtowc.Tpo $(DEPDIR)/libgnu_la-mbtowc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc.c' object='libgnu_la-mbtowc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mbtowc.lo `test -f 'mbtowc.c' || echo '$(srcdir)/'`mbtowc.c libgnu_la-mbuiterf.lo: mbuiterf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mbuiterf.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mbuiterf.Tpo -c -o libgnu_la-mbuiterf.lo `test -f 'mbuiterf.c' || echo '$(srcdir)/'`mbuiterf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mbuiterf.Tpo $(DEPDIR)/libgnu_la-mbuiterf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbuiterf.c' object='libgnu_la-mbuiterf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mbuiterf.lo `test -f 'mbuiterf.c' || echo '$(srcdir)/'`mbuiterf.c libgnu_la-memchr.lo: memchr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-memchr.lo -MD -MP -MF $(DEPDIR)/libgnu_la-memchr.Tpo -c -o libgnu_la-memchr.lo `test -f 'memchr.c' || echo '$(srcdir)/'`memchr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-memchr.Tpo $(DEPDIR)/libgnu_la-memchr.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memchr.c' object='libgnu_la-memchr.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-memchr.lo `test -f 'memchr.c' || echo '$(srcdir)/'`memchr.c libgnu_la-memmove.lo: memmove.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-memmove.lo -MD -MP -MF $(DEPDIR)/libgnu_la-memmove.Tpo -c -o libgnu_la-memmove.lo `test -f 'memmove.c' || echo '$(srcdir)/'`memmove.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-memmove.Tpo $(DEPDIR)/libgnu_la-memmove.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memmove.c' object='libgnu_la-memmove.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-memmove.lo `test -f 'memmove.c' || echo '$(srcdir)/'`memmove.c libgnu_la-mempcpy.lo: mempcpy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mempcpy.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mempcpy.Tpo -c -o libgnu_la-mempcpy.lo `test -f 'mempcpy.c' || echo '$(srcdir)/'`mempcpy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mempcpy.Tpo $(DEPDIR)/libgnu_la-mempcpy.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mempcpy.c' object='libgnu_la-mempcpy.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mempcpy.lo `test -f 'mempcpy.c' || echo '$(srcdir)/'`mempcpy.c libgnu_la-memrchr.lo: memrchr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-memrchr.lo -MD -MP -MF $(DEPDIR)/libgnu_la-memrchr.Tpo -c -o libgnu_la-memrchr.lo `test -f 'memrchr.c' || echo '$(srcdir)/'`memrchr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-memrchr.Tpo $(DEPDIR)/libgnu_la-memrchr.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memrchr.c' object='libgnu_la-memrchr.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-memrchr.lo `test -f 'memrchr.c' || echo '$(srcdir)/'`memrchr.c libgnu_la-msvc-inval.lo: msvc-inval.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-msvc-inval.lo -MD -MP -MF $(DEPDIR)/libgnu_la-msvc-inval.Tpo -c -o libgnu_la-msvc-inval.lo `test -f 'msvc-inval.c' || echo '$(srcdir)/'`msvc-inval.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-msvc-inval.Tpo $(DEPDIR)/libgnu_la-msvc-inval.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-inval.c' object='libgnu_la-msvc-inval.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-msvc-inval.lo `test -f 'msvc-inval.c' || echo '$(srcdir)/'`msvc-inval.c libgnu_la-msvc-nothrow.lo: msvc-nothrow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-msvc-nothrow.lo -MD -MP -MF $(DEPDIR)/libgnu_la-msvc-nothrow.Tpo -c -o libgnu_la-msvc-nothrow.lo `test -f 'msvc-nothrow.c' || echo '$(srcdir)/'`msvc-nothrow.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-msvc-nothrow.Tpo $(DEPDIR)/libgnu_la-msvc-nothrow.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-nothrow.c' object='libgnu_la-msvc-nothrow.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-msvc-nothrow.lo `test -f 'msvc-nothrow.c' || echo '$(srcdir)/'`msvc-nothrow.c libgnu_la-nl_langinfo.lo: nl_langinfo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-nl_langinfo.lo -MD -MP -MF $(DEPDIR)/libgnu_la-nl_langinfo.Tpo -c -o libgnu_la-nl_langinfo.lo `test -f 'nl_langinfo.c' || echo '$(srcdir)/'`nl_langinfo.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-nl_langinfo.Tpo $(DEPDIR)/libgnu_la-nl_langinfo.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nl_langinfo.c' object='libgnu_la-nl_langinfo.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-nl_langinfo.lo `test -f 'nl_langinfo.c' || echo '$(srcdir)/'`nl_langinfo.c libgnu_la-nl_langinfo-lock.lo: nl_langinfo-lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-nl_langinfo-lock.lo -MD -MP -MF $(DEPDIR)/libgnu_la-nl_langinfo-lock.Tpo -c -o libgnu_la-nl_langinfo-lock.lo `test -f 'nl_langinfo-lock.c' || echo '$(srcdir)/'`nl_langinfo-lock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-nl_langinfo-lock.Tpo $(DEPDIR)/libgnu_la-nl_langinfo-lock.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nl_langinfo-lock.c' object='libgnu_la-nl_langinfo-lock.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-nl_langinfo-lock.lo `test -f 'nl_langinfo-lock.c' || echo '$(srcdir)/'`nl_langinfo-lock.c libgnu_la-nproc.lo: nproc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-nproc.lo -MD -MP -MF $(DEPDIR)/libgnu_la-nproc.Tpo -c -o libgnu_la-nproc.lo `test -f 'nproc.c' || echo '$(srcdir)/'`nproc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-nproc.Tpo $(DEPDIR)/libgnu_la-nproc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nproc.c' object='libgnu_la-nproc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-nproc.lo `test -f 'nproc.c' || echo '$(srcdir)/'`nproc.c libgnu_la-open.lo: open.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-open.lo -MD -MP -MF $(DEPDIR)/libgnu_la-open.Tpo -c -o libgnu_la-open.lo `test -f 'open.c' || echo '$(srcdir)/'`open.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-open.Tpo $(DEPDIR)/libgnu_la-open.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='open.c' object='libgnu_la-open.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-open.lo `test -f 'open.c' || echo '$(srcdir)/'`open.c libgnu_la-openat.lo: openat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-openat.lo -MD -MP -MF $(DEPDIR)/libgnu_la-openat.Tpo -c -o libgnu_la-openat.lo `test -f 'openat.c' || echo '$(srcdir)/'`openat.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-openat.Tpo $(DEPDIR)/libgnu_la-openat.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openat.c' object='libgnu_la-openat.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-openat.lo `test -f 'openat.c' || echo '$(srcdir)/'`openat.c libgnu_la-openat-die.lo: openat-die.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-openat-die.lo -MD -MP -MF $(DEPDIR)/libgnu_la-openat-die.Tpo -c -o libgnu_la-openat-die.lo `test -f 'openat-die.c' || echo '$(srcdir)/'`openat-die.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-openat-die.Tpo $(DEPDIR)/libgnu_la-openat-die.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openat-die.c' object='libgnu_la-openat-die.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-openat-die.lo `test -f 'openat-die.c' || echo '$(srcdir)/'`openat-die.c libgnu_la-pipe.lo: pipe.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-pipe.lo -MD -MP -MF $(DEPDIR)/libgnu_la-pipe.Tpo -c -o libgnu_la-pipe.lo `test -f 'pipe.c' || echo '$(srcdir)/'`pipe.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-pipe.Tpo $(DEPDIR)/libgnu_la-pipe.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipe.c' object='libgnu_la-pipe.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-pipe.lo `test -f 'pipe.c' || echo '$(srcdir)/'`pipe.c libgnu_la-rawmemchr.lo: rawmemchr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-rawmemchr.lo -MD -MP -MF $(DEPDIR)/libgnu_la-rawmemchr.Tpo -c -o libgnu_la-rawmemchr.lo `test -f 'rawmemchr.c' || echo '$(srcdir)/'`rawmemchr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-rawmemchr.Tpo $(DEPDIR)/libgnu_la-rawmemchr.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rawmemchr.c' object='libgnu_la-rawmemchr.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-rawmemchr.lo `test -f 'rawmemchr.c' || echo '$(srcdir)/'`rawmemchr.c libgnu_la-regex.lo: regex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-regex.lo -MD -MP -MF $(DEPDIR)/libgnu_la-regex.Tpo -c -o libgnu_la-regex.lo `test -f 'regex.c' || echo '$(srcdir)/'`regex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-regex.Tpo $(DEPDIR)/libgnu_la-regex.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regex.c' object='libgnu_la-regex.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-regex.lo `test -f 'regex.c' || echo '$(srcdir)/'`regex.c libgnu_la-save-cwd.lo: save-cwd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-save-cwd.lo -MD -MP -MF $(DEPDIR)/libgnu_la-save-cwd.Tpo -c -o libgnu_la-save-cwd.lo `test -f 'save-cwd.c' || echo '$(srcdir)/'`save-cwd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-save-cwd.Tpo $(DEPDIR)/libgnu_la-save-cwd.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='save-cwd.c' object='libgnu_la-save-cwd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-save-cwd.lo `test -f 'save-cwd.c' || echo '$(srcdir)/'`save-cwd.c libgnu_la-secure_getenv.lo: secure_getenv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-secure_getenv.lo -MD -MP -MF $(DEPDIR)/libgnu_la-secure_getenv.Tpo -c -o libgnu_la-secure_getenv.lo `test -f 'secure_getenv.c' || echo '$(srcdir)/'`secure_getenv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-secure_getenv.Tpo $(DEPDIR)/libgnu_la-secure_getenv.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='secure_getenv.c' object='libgnu_la-secure_getenv.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-secure_getenv.lo `test -f 'secure_getenv.c' || echo '$(srcdir)/'`secure_getenv.c libgnu_la-select.lo: select.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-select.lo -MD -MP -MF $(DEPDIR)/libgnu_la-select.Tpo -c -o libgnu_la-select.lo `test -f 'select.c' || echo '$(srcdir)/'`select.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-select.Tpo $(DEPDIR)/libgnu_la-select.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='select.c' object='libgnu_la-select.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-select.lo `test -f 'select.c' || echo '$(srcdir)/'`select.c libgnu_la-setlocale_null.lo: setlocale_null.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-setlocale_null.lo -MD -MP -MF $(DEPDIR)/libgnu_la-setlocale_null.Tpo -c -o libgnu_la-setlocale_null.lo `test -f 'setlocale_null.c' || echo '$(srcdir)/'`setlocale_null.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-setlocale_null.Tpo $(DEPDIR)/libgnu_la-setlocale_null.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale_null.c' object='libgnu_la-setlocale_null.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-setlocale_null.lo `test -f 'setlocale_null.c' || echo '$(srcdir)/'`setlocale_null.c libgnu_la-setlocale-lock.lo: setlocale-lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-setlocale-lock.lo -MD -MP -MF $(DEPDIR)/libgnu_la-setlocale-lock.Tpo -c -o libgnu_la-setlocale-lock.lo `test -f 'setlocale-lock.c' || echo '$(srcdir)/'`setlocale-lock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-setlocale-lock.Tpo $(DEPDIR)/libgnu_la-setlocale-lock.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale-lock.c' object='libgnu_la-setlocale-lock.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-setlocale-lock.lo `test -f 'setlocale-lock.c' || echo '$(srcdir)/'`setlocale-lock.c libgnu_la-signbitf.lo: signbitf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-signbitf.lo -MD -MP -MF $(DEPDIR)/libgnu_la-signbitf.Tpo -c -o libgnu_la-signbitf.lo `test -f 'signbitf.c' || echo '$(srcdir)/'`signbitf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-signbitf.Tpo $(DEPDIR)/libgnu_la-signbitf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='signbitf.c' object='libgnu_la-signbitf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-signbitf.lo `test -f 'signbitf.c' || echo '$(srcdir)/'`signbitf.c libgnu_la-signbitd.lo: signbitd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-signbitd.lo -MD -MP -MF $(DEPDIR)/libgnu_la-signbitd.Tpo -c -o libgnu_la-signbitd.lo `test -f 'signbitd.c' || echo '$(srcdir)/'`signbitd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-signbitd.Tpo $(DEPDIR)/libgnu_la-signbitd.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='signbitd.c' object='libgnu_la-signbitd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-signbitd.lo `test -f 'signbitd.c' || echo '$(srcdir)/'`signbitd.c libgnu_la-signbitl.lo: signbitl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-signbitl.lo -MD -MP -MF $(DEPDIR)/libgnu_la-signbitl.Tpo -c -o libgnu_la-signbitl.lo `test -f 'signbitl.c' || echo '$(srcdir)/'`signbitl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-signbitl.Tpo $(DEPDIR)/libgnu_la-signbitl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='signbitl.c' object='libgnu_la-signbitl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-signbitl.lo `test -f 'signbitl.c' || echo '$(srcdir)/'`signbitl.c libgnu_la-sleep.lo: sleep.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-sleep.lo -MD -MP -MF $(DEPDIR)/libgnu_la-sleep.Tpo -c -o libgnu_la-sleep.lo `test -f 'sleep.c' || echo '$(srcdir)/'`sleep.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-sleep.Tpo $(DEPDIR)/libgnu_la-sleep.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sleep.c' object='libgnu_la-sleep.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-sleep.lo `test -f 'sleep.c' || echo '$(srcdir)/'`sleep.c libgnu_la-sockets.lo: sockets.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-sockets.lo -MD -MP -MF $(DEPDIR)/libgnu_la-sockets.Tpo -c -o libgnu_la-sockets.lo `test -f 'sockets.c' || echo '$(srcdir)/'`sockets.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-sockets.Tpo $(DEPDIR)/libgnu_la-sockets.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sockets.c' object='libgnu_la-sockets.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-sockets.lo `test -f 'sockets.c' || echo '$(srcdir)/'`sockets.c libgnu_la-stat.lo: stat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-stat.lo -MD -MP -MF $(DEPDIR)/libgnu_la-stat.Tpo -c -o libgnu_la-stat.lo `test -f 'stat.c' || echo '$(srcdir)/'`stat.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-stat.Tpo $(DEPDIR)/libgnu_la-stat.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat.c' object='libgnu_la-stat.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-stat.lo `test -f 'stat.c' || echo '$(srcdir)/'`stat.c libgnu_la-stat-time.lo: stat-time.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-stat-time.lo -MD -MP -MF $(DEPDIR)/libgnu_la-stat-time.Tpo -c -o libgnu_la-stat-time.lo `test -f 'stat-time.c' || echo '$(srcdir)/'`stat-time.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-stat-time.Tpo $(DEPDIR)/libgnu_la-stat-time.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-time.c' object='libgnu_la-stat-time.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-stat-time.lo `test -f 'stat-time.c' || echo '$(srcdir)/'`stat-time.c libgnu_la-stdio-read.lo: stdio-read.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-stdio-read.lo -MD -MP -MF $(DEPDIR)/libgnu_la-stdio-read.Tpo -c -o libgnu_la-stdio-read.lo `test -f 'stdio-read.c' || echo '$(srcdir)/'`stdio-read.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-stdio-read.Tpo $(DEPDIR)/libgnu_la-stdio-read.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-read.c' object='libgnu_la-stdio-read.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-stdio-read.lo `test -f 'stdio-read.c' || echo '$(srcdir)/'`stdio-read.c libgnu_la-stdio-write.lo: stdio-write.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-stdio-write.lo -MD -MP -MF $(DEPDIR)/libgnu_la-stdio-write.Tpo -c -o libgnu_la-stdio-write.lo `test -f 'stdio-write.c' || echo '$(srcdir)/'`stdio-write.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-stdio-write.Tpo $(DEPDIR)/libgnu_la-stdio-write.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-write.c' object='libgnu_la-stdio-write.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-stdio-write.lo `test -f 'stdio-write.c' || echo '$(srcdir)/'`stdio-write.c libgnu_la-strcasecmp.lo: strcasecmp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-strcasecmp.lo -MD -MP -MF $(DEPDIR)/libgnu_la-strcasecmp.Tpo -c -o libgnu_la-strcasecmp.lo `test -f 'strcasecmp.c' || echo '$(srcdir)/'`strcasecmp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-strcasecmp.Tpo $(DEPDIR)/libgnu_la-strcasecmp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strcasecmp.c' object='libgnu_la-strcasecmp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-strcasecmp.lo `test -f 'strcasecmp.c' || echo '$(srcdir)/'`strcasecmp.c libgnu_la-strncasecmp.lo: strncasecmp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-strncasecmp.lo -MD -MP -MF $(DEPDIR)/libgnu_la-strncasecmp.Tpo -c -o libgnu_la-strncasecmp.lo `test -f 'strncasecmp.c' || echo '$(srcdir)/'`strncasecmp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-strncasecmp.Tpo $(DEPDIR)/libgnu_la-strncasecmp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strncasecmp.c' object='libgnu_la-strncasecmp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-strncasecmp.lo `test -f 'strncasecmp.c' || echo '$(srcdir)/'`strncasecmp.c libgnu_la-strchrnul.lo: strchrnul.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-strchrnul.lo -MD -MP -MF $(DEPDIR)/libgnu_la-strchrnul.Tpo -c -o libgnu_la-strchrnul.lo `test -f 'strchrnul.c' || echo '$(srcdir)/'`strchrnul.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-strchrnul.Tpo $(DEPDIR)/libgnu_la-strchrnul.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strchrnul.c' object='libgnu_la-strchrnul.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-strchrnul.lo `test -f 'strchrnul.c' || echo '$(srcdir)/'`strchrnul.c libgnu_la-strdup.lo: strdup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-strdup.lo -MD -MP -MF $(DEPDIR)/libgnu_la-strdup.Tpo -c -o libgnu_la-strdup.lo `test -f 'strdup.c' || echo '$(srcdir)/'`strdup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-strdup.Tpo $(DEPDIR)/libgnu_la-strdup.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strdup.c' object='libgnu_la-strdup.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-strdup.lo `test -f 'strdup.c' || echo '$(srcdir)/'`strdup.c libgnu_la-strerror.lo: strerror.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-strerror.lo -MD -MP -MF $(DEPDIR)/libgnu_la-strerror.Tpo -c -o libgnu_la-strerror.lo `test -f 'strerror.c' || echo '$(srcdir)/'`strerror.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-strerror.Tpo $(DEPDIR)/libgnu_la-strerror.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror.c' object='libgnu_la-strerror.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-strerror.lo `test -f 'strerror.c' || echo '$(srcdir)/'`strerror.c libgnu_la-strerror-override.lo: strerror-override.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-strerror-override.lo -MD -MP -MF $(DEPDIR)/libgnu_la-strerror-override.Tpo -c -o libgnu_la-strerror-override.lo `test -f 'strerror-override.c' || echo '$(srcdir)/'`strerror-override.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-strerror-override.Tpo $(DEPDIR)/libgnu_la-strerror-override.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror-override.c' object='libgnu_la-strerror-override.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-strerror-override.lo `test -f 'strerror-override.c' || echo '$(srcdir)/'`strerror-override.c libgnu_la-strndup.lo: strndup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-strndup.lo -MD -MP -MF $(DEPDIR)/libgnu_la-strndup.Tpo -c -o libgnu_la-strndup.lo `test -f 'strndup.c' || echo '$(srcdir)/'`strndup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-strndup.Tpo $(DEPDIR)/libgnu_la-strndup.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strndup.c' object='libgnu_la-strndup.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-strndup.lo `test -f 'strndup.c' || echo '$(srcdir)/'`strndup.c libgnu_la-strnlen.lo: strnlen.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-strnlen.lo -MD -MP -MF $(DEPDIR)/libgnu_la-strnlen.Tpo -c -o libgnu_la-strnlen.lo `test -f 'strnlen.c' || echo '$(srcdir)/'`strnlen.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-strnlen.Tpo $(DEPDIR)/libgnu_la-strnlen.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strnlen.c' object='libgnu_la-strnlen.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-strnlen.lo `test -f 'strnlen.c' || echo '$(srcdir)/'`strnlen.c libgnu_la-strnlen1.lo: strnlen1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-strnlen1.lo -MD -MP -MF $(DEPDIR)/libgnu_la-strnlen1.Tpo -c -o libgnu_la-strnlen1.lo `test -f 'strnlen1.c' || echo '$(srcdir)/'`strnlen1.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-strnlen1.Tpo $(DEPDIR)/libgnu_la-strnlen1.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strnlen1.c' object='libgnu_la-strnlen1.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-strnlen1.lo `test -f 'strnlen1.c' || echo '$(srcdir)/'`strnlen1.c libgnu_la-strptime.lo: strptime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-strptime.lo -MD -MP -MF $(DEPDIR)/libgnu_la-strptime.Tpo -c -o libgnu_la-strptime.lo `test -f 'strptime.c' || echo '$(srcdir)/'`strptime.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-strptime.Tpo $(DEPDIR)/libgnu_la-strptime.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strptime.c' object='libgnu_la-strptime.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-strptime.lo `test -f 'strptime.c' || echo '$(srcdir)/'`strptime.c libgnu_la-strtod.lo: strtod.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-strtod.lo -MD -MP -MF $(DEPDIR)/libgnu_la-strtod.Tpo -c -o libgnu_la-strtod.lo `test -f 'strtod.c' || echo '$(srcdir)/'`strtod.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-strtod.Tpo $(DEPDIR)/libgnu_la-strtod.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strtod.c' object='libgnu_la-strtod.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-strtod.lo `test -f 'strtod.c' || echo '$(srcdir)/'`strtod.c libgnu_la-strtok_r.lo: strtok_r.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-strtok_r.lo -MD -MP -MF $(DEPDIR)/libgnu_la-strtok_r.Tpo -c -o libgnu_la-strtok_r.lo `test -f 'strtok_r.c' || echo '$(srcdir)/'`strtok_r.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-strtok_r.Tpo $(DEPDIR)/libgnu_la-strtok_r.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strtok_r.c' object='libgnu_la-strtok_r.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-strtok_r.lo `test -f 'strtok_r.c' || echo '$(srcdir)/'`strtok_r.c libgnu_la-sys_socket.lo: sys_socket.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-sys_socket.lo -MD -MP -MF $(DEPDIR)/libgnu_la-sys_socket.Tpo -c -o libgnu_la-sys_socket.lo `test -f 'sys_socket.c' || echo '$(srcdir)/'`sys_socket.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-sys_socket.Tpo $(DEPDIR)/libgnu_la-sys_socket.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sys_socket.c' object='libgnu_la-sys_socket.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-sys_socket.lo `test -f 'sys_socket.c' || echo '$(srcdir)/'`sys_socket.c glthread/libgnu_la-threadlib.lo: glthread/threadlib.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT glthread/libgnu_la-threadlib.lo -MD -MP -MF glthread/$(DEPDIR)/libgnu_la-threadlib.Tpo -c -o glthread/libgnu_la-threadlib.lo `test -f 'glthread/threadlib.c' || echo '$(srcdir)/'`glthread/threadlib.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/libgnu_la-threadlib.Tpo glthread/$(DEPDIR)/libgnu_la-threadlib.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/threadlib.c' object='glthread/libgnu_la-threadlib.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o glthread/libgnu_la-threadlib.lo `test -f 'glthread/threadlib.c' || echo '$(srcdir)/'`glthread/threadlib.c libgnu_la-time.lo: time.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-time.lo -MD -MP -MF $(DEPDIR)/libgnu_la-time.Tpo -c -o libgnu_la-time.lo `test -f 'time.c' || echo '$(srcdir)/'`time.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-time.Tpo $(DEPDIR)/libgnu_la-time.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='time.c' object='libgnu_la-time.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-time.lo `test -f 'time.c' || echo '$(srcdir)/'`time.c libgnu_la-time_r.lo: time_r.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-time_r.lo -MD -MP -MF $(DEPDIR)/libgnu_la-time_r.Tpo -c -o libgnu_la-time_r.lo `test -f 'time_r.c' || echo '$(srcdir)/'`time_r.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-time_r.Tpo $(DEPDIR)/libgnu_la-time_r.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='time_r.c' object='libgnu_la-time_r.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-time_r.lo `test -f 'time_r.c' || echo '$(srcdir)/'`time_r.c unicase/libgnu_la-tolower.lo: unicase/tolower.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT unicase/libgnu_la-tolower.lo -MD -MP -MF unicase/$(DEPDIR)/libgnu_la-tolower.Tpo -c -o unicase/libgnu_la-tolower.lo `test -f 'unicase/tolower.c' || echo '$(srcdir)/'`unicase/tolower.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) unicase/$(DEPDIR)/libgnu_la-tolower.Tpo unicase/$(DEPDIR)/libgnu_la-tolower.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unicase/tolower.c' object='unicase/libgnu_la-tolower.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o unicase/libgnu_la-tolower.lo `test -f 'unicase/tolower.c' || echo '$(srcdir)/'`unicase/tolower.c unictype/libgnu_la-ctype_alnum.lo: unictype/ctype_alnum.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT unictype/libgnu_la-ctype_alnum.lo -MD -MP -MF unictype/$(DEPDIR)/libgnu_la-ctype_alnum.Tpo -c -o unictype/libgnu_la-ctype_alnum.lo `test -f 'unictype/ctype_alnum.c' || echo '$(srcdir)/'`unictype/ctype_alnum.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) unictype/$(DEPDIR)/libgnu_la-ctype_alnum.Tpo unictype/$(DEPDIR)/libgnu_la-ctype_alnum.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unictype/ctype_alnum.c' object='unictype/libgnu_la-ctype_alnum.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o unictype/libgnu_la-ctype_alnum.lo `test -f 'unictype/ctype_alnum.c' || echo '$(srcdir)/'`unictype/ctype_alnum.c unictype/libgnu_la-ctype_alpha.lo: unictype/ctype_alpha.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT unictype/libgnu_la-ctype_alpha.lo -MD -MP -MF unictype/$(DEPDIR)/libgnu_la-ctype_alpha.Tpo -c -o unictype/libgnu_la-ctype_alpha.lo `test -f 'unictype/ctype_alpha.c' || echo '$(srcdir)/'`unictype/ctype_alpha.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) unictype/$(DEPDIR)/libgnu_la-ctype_alpha.Tpo unictype/$(DEPDIR)/libgnu_la-ctype_alpha.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unictype/ctype_alpha.c' object='unictype/libgnu_la-ctype_alpha.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o unictype/libgnu_la-ctype_alpha.lo `test -f 'unictype/ctype_alpha.c' || echo '$(srcdir)/'`unictype/ctype_alpha.c unictype/libgnu_la-ctype_blank.lo: unictype/ctype_blank.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT unictype/libgnu_la-ctype_blank.lo -MD -MP -MF unictype/$(DEPDIR)/libgnu_la-ctype_blank.Tpo -c -o unictype/libgnu_la-ctype_blank.lo `test -f 'unictype/ctype_blank.c' || echo '$(srcdir)/'`unictype/ctype_blank.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) unictype/$(DEPDIR)/libgnu_la-ctype_blank.Tpo unictype/$(DEPDIR)/libgnu_la-ctype_blank.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unictype/ctype_blank.c' object='unictype/libgnu_la-ctype_blank.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o unictype/libgnu_la-ctype_blank.lo `test -f 'unictype/ctype_blank.c' || echo '$(srcdir)/'`unictype/ctype_blank.c unictype/libgnu_la-ctype_cntrl.lo: unictype/ctype_cntrl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT unictype/libgnu_la-ctype_cntrl.lo -MD -MP -MF unictype/$(DEPDIR)/libgnu_la-ctype_cntrl.Tpo -c -o unictype/libgnu_la-ctype_cntrl.lo `test -f 'unictype/ctype_cntrl.c' || echo '$(srcdir)/'`unictype/ctype_cntrl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) unictype/$(DEPDIR)/libgnu_la-ctype_cntrl.Tpo unictype/$(DEPDIR)/libgnu_la-ctype_cntrl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unictype/ctype_cntrl.c' object='unictype/libgnu_la-ctype_cntrl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o unictype/libgnu_la-ctype_cntrl.lo `test -f 'unictype/ctype_cntrl.c' || echo '$(srcdir)/'`unictype/ctype_cntrl.c unictype/libgnu_la-ctype_digit.lo: unictype/ctype_digit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT unictype/libgnu_la-ctype_digit.lo -MD -MP -MF unictype/$(DEPDIR)/libgnu_la-ctype_digit.Tpo -c -o unictype/libgnu_la-ctype_digit.lo `test -f 'unictype/ctype_digit.c' || echo '$(srcdir)/'`unictype/ctype_digit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) unictype/$(DEPDIR)/libgnu_la-ctype_digit.Tpo unictype/$(DEPDIR)/libgnu_la-ctype_digit.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unictype/ctype_digit.c' object='unictype/libgnu_la-ctype_digit.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o unictype/libgnu_la-ctype_digit.lo `test -f 'unictype/ctype_digit.c' || echo '$(srcdir)/'`unictype/ctype_digit.c unictype/libgnu_la-ctype_graph.lo: unictype/ctype_graph.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT unictype/libgnu_la-ctype_graph.lo -MD -MP -MF unictype/$(DEPDIR)/libgnu_la-ctype_graph.Tpo -c -o unictype/libgnu_la-ctype_graph.lo `test -f 'unictype/ctype_graph.c' || echo '$(srcdir)/'`unictype/ctype_graph.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) unictype/$(DEPDIR)/libgnu_la-ctype_graph.Tpo unictype/$(DEPDIR)/libgnu_la-ctype_graph.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unictype/ctype_graph.c' object='unictype/libgnu_la-ctype_graph.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o unictype/libgnu_la-ctype_graph.lo `test -f 'unictype/ctype_graph.c' || echo '$(srcdir)/'`unictype/ctype_graph.c unictype/libgnu_la-ctype_lower.lo: unictype/ctype_lower.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT unictype/libgnu_la-ctype_lower.lo -MD -MP -MF unictype/$(DEPDIR)/libgnu_la-ctype_lower.Tpo -c -o unictype/libgnu_la-ctype_lower.lo `test -f 'unictype/ctype_lower.c' || echo '$(srcdir)/'`unictype/ctype_lower.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) unictype/$(DEPDIR)/libgnu_la-ctype_lower.Tpo unictype/$(DEPDIR)/libgnu_la-ctype_lower.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unictype/ctype_lower.c' object='unictype/libgnu_la-ctype_lower.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o unictype/libgnu_la-ctype_lower.lo `test -f 'unictype/ctype_lower.c' || echo '$(srcdir)/'`unictype/ctype_lower.c unictype/libgnu_la-ctype_print.lo: unictype/ctype_print.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT unictype/libgnu_la-ctype_print.lo -MD -MP -MF unictype/$(DEPDIR)/libgnu_la-ctype_print.Tpo -c -o unictype/libgnu_la-ctype_print.lo `test -f 'unictype/ctype_print.c' || echo '$(srcdir)/'`unictype/ctype_print.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) unictype/$(DEPDIR)/libgnu_la-ctype_print.Tpo unictype/$(DEPDIR)/libgnu_la-ctype_print.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unictype/ctype_print.c' object='unictype/libgnu_la-ctype_print.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o unictype/libgnu_la-ctype_print.lo `test -f 'unictype/ctype_print.c' || echo '$(srcdir)/'`unictype/ctype_print.c unictype/libgnu_la-ctype_punct.lo: unictype/ctype_punct.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT unictype/libgnu_la-ctype_punct.lo -MD -MP -MF unictype/$(DEPDIR)/libgnu_la-ctype_punct.Tpo -c -o unictype/libgnu_la-ctype_punct.lo `test -f 'unictype/ctype_punct.c' || echo '$(srcdir)/'`unictype/ctype_punct.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) unictype/$(DEPDIR)/libgnu_la-ctype_punct.Tpo unictype/$(DEPDIR)/libgnu_la-ctype_punct.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unictype/ctype_punct.c' object='unictype/libgnu_la-ctype_punct.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o unictype/libgnu_la-ctype_punct.lo `test -f 'unictype/ctype_punct.c' || echo '$(srcdir)/'`unictype/ctype_punct.c unictype/libgnu_la-ctype_space.lo: unictype/ctype_space.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT unictype/libgnu_la-ctype_space.lo -MD -MP -MF unictype/$(DEPDIR)/libgnu_la-ctype_space.Tpo -c -o unictype/libgnu_la-ctype_space.lo `test -f 'unictype/ctype_space.c' || echo '$(srcdir)/'`unictype/ctype_space.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) unictype/$(DEPDIR)/libgnu_la-ctype_space.Tpo unictype/$(DEPDIR)/libgnu_la-ctype_space.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unictype/ctype_space.c' object='unictype/libgnu_la-ctype_space.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o unictype/libgnu_la-ctype_space.lo `test -f 'unictype/ctype_space.c' || echo '$(srcdir)/'`unictype/ctype_space.c unictype/libgnu_la-ctype_upper.lo: unictype/ctype_upper.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT unictype/libgnu_la-ctype_upper.lo -MD -MP -MF unictype/$(DEPDIR)/libgnu_la-ctype_upper.Tpo -c -o unictype/libgnu_la-ctype_upper.lo `test -f 'unictype/ctype_upper.c' || echo '$(srcdir)/'`unictype/ctype_upper.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) unictype/$(DEPDIR)/libgnu_la-ctype_upper.Tpo unictype/$(DEPDIR)/libgnu_la-ctype_upper.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unictype/ctype_upper.c' object='unictype/libgnu_la-ctype_upper.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o unictype/libgnu_la-ctype_upper.lo `test -f 'unictype/ctype_upper.c' || echo '$(srcdir)/'`unictype/ctype_upper.c unictype/libgnu_la-ctype_xdigit.lo: unictype/ctype_xdigit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT unictype/libgnu_la-ctype_xdigit.lo -MD -MP -MF unictype/$(DEPDIR)/libgnu_la-ctype_xdigit.Tpo -c -o unictype/libgnu_la-ctype_xdigit.lo `test -f 'unictype/ctype_xdigit.c' || echo '$(srcdir)/'`unictype/ctype_xdigit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) unictype/$(DEPDIR)/libgnu_la-ctype_xdigit.Tpo unictype/$(DEPDIR)/libgnu_la-ctype_xdigit.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unictype/ctype_xdigit.c' object='unictype/libgnu_la-ctype_xdigit.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o unictype/libgnu_la-ctype_xdigit.lo `test -f 'unictype/ctype_xdigit.c' || echo '$(srcdir)/'`unictype/ctype_xdigit.c libgnu_la-unistd.lo: unistd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-unistd.lo -MD -MP -MF $(DEPDIR)/libgnu_la-unistd.Tpo -c -o libgnu_la-unistd.lo `test -f 'unistd.c' || echo '$(srcdir)/'`unistd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-unistd.Tpo $(DEPDIR)/libgnu_la-unistd.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unistd.c' object='libgnu_la-unistd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-unistd.lo `test -f 'unistd.c' || echo '$(srcdir)/'`unistd.c libgnu_la-dup-safer.lo: dup-safer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-dup-safer.lo -MD -MP -MF $(DEPDIR)/libgnu_la-dup-safer.Tpo -c -o libgnu_la-dup-safer.lo `test -f 'dup-safer.c' || echo '$(srcdir)/'`dup-safer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-dup-safer.Tpo $(DEPDIR)/libgnu_la-dup-safer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup-safer.c' object='libgnu_la-dup-safer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-dup-safer.lo `test -f 'dup-safer.c' || echo '$(srcdir)/'`dup-safer.c libgnu_la-fd-safer.lo: fd-safer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-fd-safer.lo -MD -MP -MF $(DEPDIR)/libgnu_la-fd-safer.Tpo -c -o libgnu_la-fd-safer.lo `test -f 'fd-safer.c' || echo '$(srcdir)/'`fd-safer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-fd-safer.Tpo $(DEPDIR)/libgnu_la-fd-safer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-safer.c' object='libgnu_la-fd-safer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-fd-safer.lo `test -f 'fd-safer.c' || echo '$(srcdir)/'`fd-safer.c libgnu_la-pipe-safer.lo: pipe-safer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-pipe-safer.lo -MD -MP -MF $(DEPDIR)/libgnu_la-pipe-safer.Tpo -c -o libgnu_la-pipe-safer.lo `test -f 'pipe-safer.c' || echo '$(srcdir)/'`pipe-safer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-pipe-safer.Tpo $(DEPDIR)/libgnu_la-pipe-safer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipe-safer.c' object='libgnu_la-pipe-safer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-pipe-safer.lo `test -f 'pipe-safer.c' || echo '$(srcdir)/'`pipe-safer.c uniwidth/libgnu_la-width.lo: uniwidth/width.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT uniwidth/libgnu_la-width.lo -MD -MP -MF uniwidth/$(DEPDIR)/libgnu_la-width.Tpo -c -o uniwidth/libgnu_la-width.lo `test -f 'uniwidth/width.c' || echo '$(srcdir)/'`uniwidth/width.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) uniwidth/$(DEPDIR)/libgnu_la-width.Tpo uniwidth/$(DEPDIR)/libgnu_la-width.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='uniwidth/width.c' object='uniwidth/libgnu_la-width.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o uniwidth/libgnu_la-width.lo `test -f 'uniwidth/width.c' || echo '$(srcdir)/'`uniwidth/width.c libgnu_la-wcrtomb.lo: wcrtomb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-wcrtomb.lo -MD -MP -MF $(DEPDIR)/libgnu_la-wcrtomb.Tpo -c -o libgnu_la-wcrtomb.lo `test -f 'wcrtomb.c' || echo '$(srcdir)/'`wcrtomb.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-wcrtomb.Tpo $(DEPDIR)/libgnu_la-wcrtomb.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wcrtomb.c' object='libgnu_la-wcrtomb.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-wcrtomb.lo `test -f 'wcrtomb.c' || echo '$(srcdir)/'`wcrtomb.c libgnu_la-wctype.lo: wctype.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-wctype.lo -MD -MP -MF $(DEPDIR)/libgnu_la-wctype.Tpo -c -o libgnu_la-wctype.lo `test -f 'wctype.c' || echo '$(srcdir)/'`wctype.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-wctype.Tpo $(DEPDIR)/libgnu_la-wctype.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wctype.c' object='libgnu_la-wctype.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-wctype.lo `test -f 'wctype.c' || echo '$(srcdir)/'`wctype.c libgnu_la-wctype-h.lo: wctype-h.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-wctype-h.lo -MD -MP -MF $(DEPDIR)/libgnu_la-wctype-h.Tpo -c -o libgnu_la-wctype-h.lo `test -f 'wctype-h.c' || echo '$(srcdir)/'`wctype-h.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-wctype-h.Tpo $(DEPDIR)/libgnu_la-wctype-h.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wctype-h.c' object='libgnu_la-wctype-h.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-wctype-h.lo `test -f 'wctype-h.c' || echo '$(srcdir)/'`wctype-h.c libgnu_la-wcwidth.lo: wcwidth.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-wcwidth.lo -MD -MP -MF $(DEPDIR)/libgnu_la-wcwidth.Tpo -c -o libgnu_la-wcwidth.lo `test -f 'wcwidth.c' || echo '$(srcdir)/'`wcwidth.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-wcwidth.Tpo $(DEPDIR)/libgnu_la-wcwidth.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wcwidth.c' object='libgnu_la-wcwidth.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-wcwidth.lo `test -f 'wcwidth.c' || echo '$(srcdir)/'`wcwidth.c libgnu_la-windows-mutex.lo: windows-mutex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-windows-mutex.lo -MD -MP -MF $(DEPDIR)/libgnu_la-windows-mutex.Tpo -c -o libgnu_la-windows-mutex.lo `test -f 'windows-mutex.c' || echo '$(srcdir)/'`windows-mutex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-windows-mutex.Tpo $(DEPDIR)/libgnu_la-windows-mutex.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-mutex.c' object='libgnu_la-windows-mutex.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-windows-mutex.lo `test -f 'windows-mutex.c' || echo '$(srcdir)/'`windows-mutex.c libgnu_la-windows-once.lo: windows-once.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-windows-once.lo -MD -MP -MF $(DEPDIR)/libgnu_la-windows-once.Tpo -c -o libgnu_la-windows-once.lo `test -f 'windows-once.c' || echo '$(srcdir)/'`windows-once.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-windows-once.Tpo $(DEPDIR)/libgnu_la-windows-once.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-once.c' object='libgnu_la-windows-once.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-windows-once.lo `test -f 'windows-once.c' || echo '$(srcdir)/'`windows-once.c libgnu_la-windows-recmutex.lo: windows-recmutex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-windows-recmutex.lo -MD -MP -MF $(DEPDIR)/libgnu_la-windows-recmutex.Tpo -c -o libgnu_la-windows-recmutex.lo `test -f 'windows-recmutex.c' || echo '$(srcdir)/'`windows-recmutex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-windows-recmutex.Tpo $(DEPDIR)/libgnu_la-windows-recmutex.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-recmutex.c' object='libgnu_la-windows-recmutex.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-windows-recmutex.lo `test -f 'windows-recmutex.c' || echo '$(srcdir)/'`windows-recmutex.c libgnu_la-windows-rwlock.lo: windows-rwlock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-windows-rwlock.lo -MD -MP -MF $(DEPDIR)/libgnu_la-windows-rwlock.Tpo -c -o libgnu_la-windows-rwlock.lo `test -f 'windows-rwlock.c' || echo '$(srcdir)/'`windows-rwlock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-windows-rwlock.Tpo $(DEPDIR)/libgnu_la-windows-rwlock.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-rwlock.c' object='libgnu_la-windows-rwlock.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-windows-rwlock.lo `test -f 'windows-rwlock.c' || echo '$(srcdir)/'`windows-rwlock.c libgnu_la-xsize.lo: xsize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-xsize.lo -MD -MP -MF $(DEPDIR)/libgnu_la-xsize.Tpo -c -o libgnu_la-xsize.lo `test -f 'xsize.c' || echo '$(srcdir)/'`xsize.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-xsize.Tpo $(DEPDIR)/libgnu_la-xsize.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xsize.c' object='libgnu_la-xsize.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-xsize.lo `test -f 'xsize.c' || echo '$(srcdir)/'`xsize.c libgnu_la-alloca.lo: alloca.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-alloca.lo -MD -MP -MF $(DEPDIR)/libgnu_la-alloca.Tpo -c -o libgnu_la-alloca.lo `test -f 'alloca.c' || echo '$(srcdir)/'`alloca.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-alloca.Tpo $(DEPDIR)/libgnu_la-alloca.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alloca.c' object='libgnu_la-alloca.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-alloca.lo `test -f 'alloca.c' || echo '$(srcdir)/'`alloca.c libgnu_la-at-func.lo: at-func.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-at-func.lo -MD -MP -MF $(DEPDIR)/libgnu_la-at-func.Tpo -c -o libgnu_la-at-func.lo `test -f 'at-func.c' || echo '$(srcdir)/'`at-func.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-at-func.Tpo $(DEPDIR)/libgnu_la-at-func.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='at-func.c' object='libgnu_la-at-func.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-at-func.lo `test -f 'at-func.c' || echo '$(srcdir)/'`at-func.c libgnu_la-stat-w32.lo: stat-w32.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-stat-w32.lo -MD -MP -MF $(DEPDIR)/libgnu_la-stat-w32.Tpo -c -o libgnu_la-stat-w32.lo `test -f 'stat-w32.c' || echo '$(srcdir)/'`stat-w32.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-stat-w32.Tpo $(DEPDIR)/libgnu_la-stat-w32.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-w32.c' object='libgnu_la-stat-w32.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-stat-w32.lo `test -f 'stat-w32.c' || echo '$(srcdir)/'`stat-w32.c malloc/libgnu_la-dynarray-skeleton.lo: malloc/dynarray-skeleton.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT malloc/libgnu_la-dynarray-skeleton.lo -MD -MP -MF malloc/$(DEPDIR)/libgnu_la-dynarray-skeleton.Tpo -c -o malloc/libgnu_la-dynarray-skeleton.lo `test -f 'malloc/dynarray-skeleton.c' || echo '$(srcdir)/'`malloc/dynarray-skeleton.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/libgnu_la-dynarray-skeleton.Tpo malloc/$(DEPDIR)/libgnu_la-dynarray-skeleton.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray-skeleton.c' object='malloc/libgnu_la-dynarray-skeleton.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o malloc/libgnu_la-dynarray-skeleton.lo `test -f 'malloc/dynarray-skeleton.c' || echo '$(srcdir)/'`malloc/dynarray-skeleton.c libgnu_la-isnan.lo: isnan.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-isnan.lo -MD -MP -MF $(DEPDIR)/libgnu_la-isnan.Tpo -c -o libgnu_la-isnan.lo `test -f 'isnan.c' || echo '$(srcdir)/'`isnan.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-isnan.Tpo $(DEPDIR)/libgnu_la-isnan.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnan.c' object='libgnu_la-isnan.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-isnan.lo `test -f 'isnan.c' || echo '$(srcdir)/'`isnan.c libgnu_la-isnand.lo: isnand.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-isnand.lo -MD -MP -MF $(DEPDIR)/libgnu_la-isnand.Tpo -c -o libgnu_la-isnand.lo `test -f 'isnand.c' || echo '$(srcdir)/'`isnand.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-isnand.Tpo $(DEPDIR)/libgnu_la-isnand.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnand.c' object='libgnu_la-isnand.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-isnand.lo `test -f 'isnand.c' || echo '$(srcdir)/'`isnand.c libgnu_la-isnanf.lo: isnanf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-isnanf.lo -MD -MP -MF $(DEPDIR)/libgnu_la-isnanf.Tpo -c -o libgnu_la-isnanf.lo `test -f 'isnanf.c' || echo '$(srcdir)/'`isnanf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-isnanf.Tpo $(DEPDIR)/libgnu_la-isnanf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnanf.c' object='libgnu_la-isnanf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-isnanf.lo `test -f 'isnanf.c' || echo '$(srcdir)/'`isnanf.c libgnu_la-isnanl.lo: isnanl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-isnanl.lo -MD -MP -MF $(DEPDIR)/libgnu_la-isnanl.Tpo -c -o libgnu_la-isnanl.lo `test -f 'isnanl.c' || echo '$(srcdir)/'`isnanl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-isnanl.Tpo $(DEPDIR)/libgnu_la-isnanl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnanl.c' object='libgnu_la-isnanl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-isnanl.lo `test -f 'isnanl.c' || echo '$(srcdir)/'`isnanl.c libgnu_la-malloc.lo: malloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-malloc.lo -MD -MP -MF $(DEPDIR)/libgnu_la-malloc.Tpo -c -o libgnu_la-malloc.lo `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-malloc.Tpo $(DEPDIR)/libgnu_la-malloc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc.c' object='libgnu_la-malloc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-malloc.lo `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c libgnu_la-lc-charset-dispatch.lo: lc-charset-dispatch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-lc-charset-dispatch.lo -MD -MP -MF $(DEPDIR)/libgnu_la-lc-charset-dispatch.Tpo -c -o libgnu_la-lc-charset-dispatch.lo `test -f 'lc-charset-dispatch.c' || echo '$(srcdir)/'`lc-charset-dispatch.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-lc-charset-dispatch.Tpo $(DEPDIR)/libgnu_la-lc-charset-dispatch.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lc-charset-dispatch.c' object='libgnu_la-lc-charset-dispatch.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-lc-charset-dispatch.lo `test -f 'lc-charset-dispatch.c' || echo '$(srcdir)/'`lc-charset-dispatch.c libgnu_la-mbtowc-lock.lo: mbtowc-lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mbtowc-lock.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mbtowc-lock.Tpo -c -o libgnu_la-mbtowc-lock.lo `test -f 'mbtowc-lock.c' || echo '$(srcdir)/'`mbtowc-lock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mbtowc-lock.Tpo $(DEPDIR)/libgnu_la-mbtowc-lock.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc-lock.c' object='libgnu_la-mbtowc-lock.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mbtowc-lock.lo `test -f 'mbtowc-lock.c' || echo '$(srcdir)/'`mbtowc-lock.c libgnu_la-mktime.lo: mktime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-mktime.lo -MD -MP -MF $(DEPDIR)/libgnu_la-mktime.Tpo -c -o libgnu_la-mktime.lo `test -f 'mktime.c' || echo '$(srcdir)/'`mktime.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-mktime.Tpo $(DEPDIR)/libgnu_la-mktime.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mktime.c' object='libgnu_la-mktime.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-mktime.lo `test -f 'mktime.c' || echo '$(srcdir)/'`mktime.c libgnu_la-realloc.lo: realloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-realloc.lo -MD -MP -MF $(DEPDIR)/libgnu_la-realloc.Tpo -c -o libgnu_la-realloc.lo `test -f 'realloc.c' || echo '$(srcdir)/'`realloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-realloc.Tpo $(DEPDIR)/libgnu_la-realloc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='realloc.c' object='libgnu_la-realloc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-realloc.lo `test -f 'realloc.c' || echo '$(srcdir)/'`realloc.c libgnu_la-regcomp.lo: regcomp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-regcomp.lo -MD -MP -MF $(DEPDIR)/libgnu_la-regcomp.Tpo -c -o libgnu_la-regcomp.lo `test -f 'regcomp.c' || echo '$(srcdir)/'`regcomp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-regcomp.Tpo $(DEPDIR)/libgnu_la-regcomp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regcomp.c' object='libgnu_la-regcomp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-regcomp.lo `test -f 'regcomp.c' || echo '$(srcdir)/'`regcomp.c libgnu_la-regex_internal.lo: regex_internal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-regex_internal.lo -MD -MP -MF $(DEPDIR)/libgnu_la-regex_internal.Tpo -c -o libgnu_la-regex_internal.lo `test -f 'regex_internal.c' || echo '$(srcdir)/'`regex_internal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-regex_internal.Tpo $(DEPDIR)/libgnu_la-regex_internal.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regex_internal.c' object='libgnu_la-regex_internal.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-regex_internal.lo `test -f 'regex_internal.c' || echo '$(srcdir)/'`regex_internal.c libgnu_la-regexec.lo: regexec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-regexec.lo -MD -MP -MF $(DEPDIR)/libgnu_la-regexec.Tpo -c -o libgnu_la-regexec.lo `test -f 'regexec.c' || echo '$(srcdir)/'`regexec.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-regexec.Tpo $(DEPDIR)/libgnu_la-regexec.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regexec.c' object='libgnu_la-regexec.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-regexec.lo `test -f 'regexec.c' || echo '$(srcdir)/'`regexec.c libgnu_la-asnprintf.lo: asnprintf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-asnprintf.lo -MD -MP -MF $(DEPDIR)/libgnu_la-asnprintf.Tpo -c -o libgnu_la-asnprintf.lo `test -f 'asnprintf.c' || echo '$(srcdir)/'`asnprintf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-asnprintf.Tpo $(DEPDIR)/libgnu_la-asnprintf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asnprintf.c' object='libgnu_la-asnprintf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-asnprintf.lo `test -f 'asnprintf.c' || echo '$(srcdir)/'`asnprintf.c libgnu_la-printf-args.lo: printf-args.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-printf-args.lo -MD -MP -MF $(DEPDIR)/libgnu_la-printf-args.Tpo -c -o libgnu_la-printf-args.lo `test -f 'printf-args.c' || echo '$(srcdir)/'`printf-args.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-printf-args.Tpo $(DEPDIR)/libgnu_la-printf-args.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='printf-args.c' object='libgnu_la-printf-args.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-printf-args.lo `test -f 'printf-args.c' || echo '$(srcdir)/'`printf-args.c libgnu_la-printf-parse.lo: printf-parse.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-printf-parse.lo -MD -MP -MF $(DEPDIR)/libgnu_la-printf-parse.Tpo -c -o libgnu_la-printf-parse.lo `test -f 'printf-parse.c' || echo '$(srcdir)/'`printf-parse.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-printf-parse.Tpo $(DEPDIR)/libgnu_la-printf-parse.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='printf-parse.c' object='libgnu_la-printf-parse.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-printf-parse.lo `test -f 'printf-parse.c' || echo '$(srcdir)/'`printf-parse.c libgnu_la-vasnprintf.lo: vasnprintf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-vasnprintf.lo -MD -MP -MF $(DEPDIR)/libgnu_la-vasnprintf.Tpo -c -o libgnu_la-vasnprintf.lo `test -f 'vasnprintf.c' || echo '$(srcdir)/'`vasnprintf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-vasnprintf.Tpo $(DEPDIR)/libgnu_la-vasnprintf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vasnprintf.c' object='libgnu_la-vasnprintf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-vasnprintf.lo `test -f 'vasnprintf.c' || echo '$(srcdir)/'`vasnprintf.c libgnu_la-vsnprintf.lo: vsnprintf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -MT libgnu_la-vsnprintf.lo -MD -MP -MF $(DEPDIR)/libgnu_la-vsnprintf.Tpo -c -o libgnu_la-vsnprintf.lo `test -f 'vsnprintf.c' || echo '$(srcdir)/'`vsnprintf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgnu_la-vsnprintf.Tpo $(DEPDIR)/libgnu_la-vsnprintf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vsnprintf.c' object='libgnu_la-vsnprintf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgnu_la_CFLAGS) $(CFLAGS) -c -o libgnu_la-vsnprintf.lo `test -f 'vsnprintf.c' || echo '$(srcdir)/'`vsnprintf.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf glthread/.libs glthread/_libs -rm -rf malloc/.libs malloc/_libs -rm -rf unicase/.libs unicase/_libs -rm -rf unictype/.libs unictype/_libs -rm -rf uniwidth/.libs uniwidth/_libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f glthread/$(DEPDIR)/$(am__dirstamp) -rm -f glthread/$(am__dirstamp) -rm -f malloc/$(DEPDIR)/$(am__dirstamp) -rm -f malloc/$(am__dirstamp) -rm -f unicase/$(DEPDIR)/$(am__dirstamp) -rm -f unicase/$(am__dirstamp) -rm -f unictype/$(DEPDIR)/$(am__dirstamp) -rm -f unictype/$(am__dirstamp) -rm -f uniwidth/$(DEPDIR)/$(am__dirstamp) -rm -f uniwidth/$(am__dirstamp) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/alloca.Plo -rm -f ./$(DEPDIR)/libgnu_la-access.Plo -rm -f ./$(DEPDIR)/libgnu_la-alloca.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-ba.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-eexst.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-fmtstream.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-fs-xinl.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-help.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-parse.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-pin.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-pv.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-pvh.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-xinl.Plo -rm -f ./$(DEPDIR)/libgnu_la-asnprintf.Plo -rm -f ./$(DEPDIR)/libgnu_la-at-func.Plo -rm -f ./$(DEPDIR)/libgnu_la-basename-lgpl.Plo -rm -f ./$(DEPDIR)/libgnu_la-btowc.Plo -rm -f ./$(DEPDIR)/libgnu_la-c-ctype.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isalnum.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isalpha.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isblank.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32iscntrl.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isdigit.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isgraph.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32islower.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isprint.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32ispunct.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isspace.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isupper.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isxdigit.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32tolower.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32width.Plo -rm -f ./$(DEPDIR)/libgnu_la-chdir-long.Plo -rm -f ./$(DEPDIR)/libgnu_la-cloexec.Plo -rm -f ./$(DEPDIR)/libgnu_la-close.Plo -rm -f ./$(DEPDIR)/libgnu_la-dirfd.Plo -rm -f ./$(DEPDIR)/libgnu_la-dup-safer-flag.Plo -rm -f ./$(DEPDIR)/libgnu_la-dup-safer.Plo -rm -f ./$(DEPDIR)/libgnu_la-dup2.Plo -rm -f ./$(DEPDIR)/libgnu_la-error.Plo -rm -f ./$(DEPDIR)/libgnu_la-euidaccess.Plo -rm -f ./$(DEPDIR)/libgnu_la-exitfail.Plo -rm -f ./$(DEPDIR)/libgnu_la-faccessat.Plo -rm -f ./$(DEPDIR)/libgnu_la-fchdir.Plo -rm -f ./$(DEPDIR)/libgnu_la-fcntl.Plo -rm -f ./$(DEPDIR)/libgnu_la-fd-hook.Plo -rm -f ./$(DEPDIR)/libgnu_la-fd-safer-flag.Plo -rm -f ./$(DEPDIR)/libgnu_la-fd-safer.Plo -rm -f ./$(DEPDIR)/libgnu_la-filenamecat-lgpl.Plo -rm -f ./$(DEPDIR)/libgnu_la-float.Plo -rm -f ./$(DEPDIR)/libgnu_la-free.Plo -rm -f ./$(DEPDIR)/libgnu_la-fstat.Plo -rm -f ./$(DEPDIR)/libgnu_la-fstatat.Plo -rm -f ./$(DEPDIR)/libgnu_la-getcwd-lgpl.Plo -rm -f ./$(DEPDIR)/libgnu_la-getdelim.Plo -rm -f ./$(DEPDIR)/libgnu_la-getdtablesize.Plo -rm -f ./$(DEPDIR)/libgnu_la-getgroups.Plo -rm -f ./$(DEPDIR)/libgnu_la-getline.Plo -rm -f ./$(DEPDIR)/libgnu_la-getopt.Plo -rm -f ./$(DEPDIR)/libgnu_la-getopt1.Plo -rm -f ./$(DEPDIR)/libgnu_la-getprogname.Plo -rm -f ./$(DEPDIR)/libgnu_la-gettimeofday.Plo -rm -f ./$(DEPDIR)/libgnu_la-group-member.Plo -rm -f ./$(DEPDIR)/libgnu_la-hard-locale.Plo -rm -f ./$(DEPDIR)/libgnu_la-isnan.Plo -rm -f ./$(DEPDIR)/libgnu_la-isnand.Plo -rm -f ./$(DEPDIR)/libgnu_la-isnanf.Plo -rm -f ./$(DEPDIR)/libgnu_la-isnanl.Plo -rm -f ./$(DEPDIR)/libgnu_la-iswblank.Plo -rm -f ./$(DEPDIR)/libgnu_la-iswctype.Plo -rm -f ./$(DEPDIR)/libgnu_la-iswdigit.Plo -rm -f ./$(DEPDIR)/libgnu_la-iswpunct.Plo -rm -f ./$(DEPDIR)/libgnu_la-iswxdigit.Plo -rm -f ./$(DEPDIR)/libgnu_la-itold.Plo -rm -f ./$(DEPDIR)/libgnu_la-lc-charset-dispatch.Plo -rm -f ./$(DEPDIR)/libgnu_la-localcharset.Plo -rm -f ./$(DEPDIR)/libgnu_la-localeconv.Plo -rm -f ./$(DEPDIR)/libgnu_la-lstat.Plo -rm -f ./$(DEPDIR)/libgnu_la-malloc.Plo -rm -f ./$(DEPDIR)/libgnu_la-malloca.Plo -rm -f ./$(DEPDIR)/libgnu_la-math.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbchar.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbrtoc32.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbrtowc.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbschr.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbsinit.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbspbrk.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbsspn.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbstok_r.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbszero.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbtowc-lock.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbtowc.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbuiterf.Plo -rm -f ./$(DEPDIR)/libgnu_la-memchr.Plo -rm -f ./$(DEPDIR)/libgnu_la-memmove.Plo -rm -f ./$(DEPDIR)/libgnu_la-mempcpy.Plo -rm -f ./$(DEPDIR)/libgnu_la-memrchr.Plo -rm -f ./$(DEPDIR)/libgnu_la-mktime.Plo -rm -f ./$(DEPDIR)/libgnu_la-msvc-inval.Plo -rm -f ./$(DEPDIR)/libgnu_la-msvc-nothrow.Plo -rm -f ./$(DEPDIR)/libgnu_la-nl_langinfo-lock.Plo -rm -f ./$(DEPDIR)/libgnu_la-nl_langinfo.Plo -rm -f ./$(DEPDIR)/libgnu_la-nproc.Plo -rm -f ./$(DEPDIR)/libgnu_la-open.Plo -rm -f ./$(DEPDIR)/libgnu_la-openat-die.Plo -rm -f ./$(DEPDIR)/libgnu_la-openat-proc.Plo -rm -f ./$(DEPDIR)/libgnu_la-openat.Plo -rm -f ./$(DEPDIR)/libgnu_la-pipe-safer.Plo -rm -f ./$(DEPDIR)/libgnu_la-pipe.Plo -rm -f ./$(DEPDIR)/libgnu_la-printf-args.Plo -rm -f ./$(DEPDIR)/libgnu_la-printf-parse.Plo -rm -f ./$(DEPDIR)/libgnu_la-rawmemchr.Plo -rm -f ./$(DEPDIR)/libgnu_la-realloc.Plo -rm -f ./$(DEPDIR)/libgnu_la-regcomp.Plo -rm -f ./$(DEPDIR)/libgnu_la-regex.Plo -rm -f ./$(DEPDIR)/libgnu_la-regex_internal.Plo -rm -f ./$(DEPDIR)/libgnu_la-regexec.Plo -rm -f ./$(DEPDIR)/libgnu_la-save-cwd.Plo -rm -f ./$(DEPDIR)/libgnu_la-secure_getenv.Plo -rm -f ./$(DEPDIR)/libgnu_la-select.Plo -rm -f ./$(DEPDIR)/libgnu_la-setlocale-lock.Plo -rm -f ./$(DEPDIR)/libgnu_la-setlocale_null.Plo -rm -f ./$(DEPDIR)/libgnu_la-signbitd.Plo -rm -f ./$(DEPDIR)/libgnu_la-signbitf.Plo -rm -f ./$(DEPDIR)/libgnu_la-signbitl.Plo -rm -f ./$(DEPDIR)/libgnu_la-sleep.Plo -rm -f ./$(DEPDIR)/libgnu_la-sockets.Plo -rm -f ./$(DEPDIR)/libgnu_la-stat-time.Plo -rm -f ./$(DEPDIR)/libgnu_la-stat-w32.Plo -rm -f ./$(DEPDIR)/libgnu_la-stat.Plo -rm -f ./$(DEPDIR)/libgnu_la-stdio-read.Plo -rm -f ./$(DEPDIR)/libgnu_la-stdio-write.Plo -rm -f ./$(DEPDIR)/libgnu_la-strcasecmp.Plo -rm -f ./$(DEPDIR)/libgnu_la-strchrnul.Plo -rm -f ./$(DEPDIR)/libgnu_la-strdup.Plo -rm -f ./$(DEPDIR)/libgnu_la-strerror-override.Plo -rm -f ./$(DEPDIR)/libgnu_la-strerror.Plo -rm -f ./$(DEPDIR)/libgnu_la-strncasecmp.Plo -rm -f ./$(DEPDIR)/libgnu_la-strndup.Plo -rm -f ./$(DEPDIR)/libgnu_la-strnlen.Plo -rm -f ./$(DEPDIR)/libgnu_la-strnlen1.Plo -rm -f ./$(DEPDIR)/libgnu_la-strptime.Plo -rm -f ./$(DEPDIR)/libgnu_la-strtod.Plo -rm -f ./$(DEPDIR)/libgnu_la-strtok_r.Plo -rm -f ./$(DEPDIR)/libgnu_la-sys_socket.Plo -rm -f ./$(DEPDIR)/libgnu_la-time.Plo -rm -f ./$(DEPDIR)/libgnu_la-time_r.Plo -rm -f ./$(DEPDIR)/libgnu_la-unistd.Plo -rm -f ./$(DEPDIR)/libgnu_la-vasnprintf.Plo -rm -f ./$(DEPDIR)/libgnu_la-vsnprintf.Plo -rm -f ./$(DEPDIR)/libgnu_la-wcrtomb.Plo -rm -f ./$(DEPDIR)/libgnu_la-wctype-h.Plo -rm -f ./$(DEPDIR)/libgnu_la-wctype.Plo -rm -f ./$(DEPDIR)/libgnu_la-wcwidth.Plo -rm -f ./$(DEPDIR)/libgnu_la-windows-mutex.Plo -rm -f ./$(DEPDIR)/libgnu_la-windows-once.Plo -rm -f ./$(DEPDIR)/libgnu_la-windows-recmutex.Plo -rm -f ./$(DEPDIR)/libgnu_la-windows-rwlock.Plo -rm -f ./$(DEPDIR)/libgnu_la-xsize.Plo -rm -f glthread/$(DEPDIR)/libgnu_la-lock.Plo -rm -f glthread/$(DEPDIR)/libgnu_la-threadlib.Plo -rm -f malloc/$(DEPDIR)/libgnu_la-dynarray-skeleton.Plo -rm -f malloc/$(DEPDIR)/libgnu_la-dynarray_at_failure.Plo -rm -f malloc/$(DEPDIR)/libgnu_la-dynarray_emplace_enlarge.Plo -rm -f malloc/$(DEPDIR)/libgnu_la-dynarray_finalize.Plo -rm -f malloc/$(DEPDIR)/libgnu_la-dynarray_resize.Plo -rm -f malloc/$(DEPDIR)/libgnu_la-dynarray_resize_clear.Plo -rm -f unicase/$(DEPDIR)/libgnu_la-tolower.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_alnum.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_alpha.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_blank.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_cntrl.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_digit.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_graph.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_lower.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_print.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_punct.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_space.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_upper.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_xdigit.Plo -rm -f uniwidth/$(DEPDIR)/libgnu_la-width.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/alloca.Plo -rm -f ./$(DEPDIR)/libgnu_la-access.Plo -rm -f ./$(DEPDIR)/libgnu_la-alloca.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-ba.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-eexst.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-fmtstream.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-fs-xinl.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-help.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-parse.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-pin.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-pv.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-pvh.Plo -rm -f ./$(DEPDIR)/libgnu_la-argp-xinl.Plo -rm -f ./$(DEPDIR)/libgnu_la-asnprintf.Plo -rm -f ./$(DEPDIR)/libgnu_la-at-func.Plo -rm -f ./$(DEPDIR)/libgnu_la-basename-lgpl.Plo -rm -f ./$(DEPDIR)/libgnu_la-btowc.Plo -rm -f ./$(DEPDIR)/libgnu_la-c-ctype.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isalnum.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isalpha.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isblank.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32iscntrl.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isdigit.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isgraph.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32islower.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isprint.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32ispunct.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isspace.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isupper.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32isxdigit.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32tolower.Plo -rm -f ./$(DEPDIR)/libgnu_la-c32width.Plo -rm -f ./$(DEPDIR)/libgnu_la-chdir-long.Plo -rm -f ./$(DEPDIR)/libgnu_la-cloexec.Plo -rm -f ./$(DEPDIR)/libgnu_la-close.Plo -rm -f ./$(DEPDIR)/libgnu_la-dirfd.Plo -rm -f ./$(DEPDIR)/libgnu_la-dup-safer-flag.Plo -rm -f ./$(DEPDIR)/libgnu_la-dup-safer.Plo -rm -f ./$(DEPDIR)/libgnu_la-dup2.Plo -rm -f ./$(DEPDIR)/libgnu_la-error.Plo -rm -f ./$(DEPDIR)/libgnu_la-euidaccess.Plo -rm -f ./$(DEPDIR)/libgnu_la-exitfail.Plo -rm -f ./$(DEPDIR)/libgnu_la-faccessat.Plo -rm -f ./$(DEPDIR)/libgnu_la-fchdir.Plo -rm -f ./$(DEPDIR)/libgnu_la-fcntl.Plo -rm -f ./$(DEPDIR)/libgnu_la-fd-hook.Plo -rm -f ./$(DEPDIR)/libgnu_la-fd-safer-flag.Plo -rm -f ./$(DEPDIR)/libgnu_la-fd-safer.Plo -rm -f ./$(DEPDIR)/libgnu_la-filenamecat-lgpl.Plo -rm -f ./$(DEPDIR)/libgnu_la-float.Plo -rm -f ./$(DEPDIR)/libgnu_la-free.Plo -rm -f ./$(DEPDIR)/libgnu_la-fstat.Plo -rm -f ./$(DEPDIR)/libgnu_la-fstatat.Plo -rm -f ./$(DEPDIR)/libgnu_la-getcwd-lgpl.Plo -rm -f ./$(DEPDIR)/libgnu_la-getdelim.Plo -rm -f ./$(DEPDIR)/libgnu_la-getdtablesize.Plo -rm -f ./$(DEPDIR)/libgnu_la-getgroups.Plo -rm -f ./$(DEPDIR)/libgnu_la-getline.Plo -rm -f ./$(DEPDIR)/libgnu_la-getopt.Plo -rm -f ./$(DEPDIR)/libgnu_la-getopt1.Plo -rm -f ./$(DEPDIR)/libgnu_la-getprogname.Plo -rm -f ./$(DEPDIR)/libgnu_la-gettimeofday.Plo -rm -f ./$(DEPDIR)/libgnu_la-group-member.Plo -rm -f ./$(DEPDIR)/libgnu_la-hard-locale.Plo -rm -f ./$(DEPDIR)/libgnu_la-isnan.Plo -rm -f ./$(DEPDIR)/libgnu_la-isnand.Plo -rm -f ./$(DEPDIR)/libgnu_la-isnanf.Plo -rm -f ./$(DEPDIR)/libgnu_la-isnanl.Plo -rm -f ./$(DEPDIR)/libgnu_la-iswblank.Plo -rm -f ./$(DEPDIR)/libgnu_la-iswctype.Plo -rm -f ./$(DEPDIR)/libgnu_la-iswdigit.Plo -rm -f ./$(DEPDIR)/libgnu_la-iswpunct.Plo -rm -f ./$(DEPDIR)/libgnu_la-iswxdigit.Plo -rm -f ./$(DEPDIR)/libgnu_la-itold.Plo -rm -f ./$(DEPDIR)/libgnu_la-lc-charset-dispatch.Plo -rm -f ./$(DEPDIR)/libgnu_la-localcharset.Plo -rm -f ./$(DEPDIR)/libgnu_la-localeconv.Plo -rm -f ./$(DEPDIR)/libgnu_la-lstat.Plo -rm -f ./$(DEPDIR)/libgnu_la-malloc.Plo -rm -f ./$(DEPDIR)/libgnu_la-malloca.Plo -rm -f ./$(DEPDIR)/libgnu_la-math.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbchar.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbrtoc32.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbrtowc.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbschr.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbsinit.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbspbrk.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbsspn.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbstok_r.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbszero.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbtowc-lock.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbtowc.Plo -rm -f ./$(DEPDIR)/libgnu_la-mbuiterf.Plo -rm -f ./$(DEPDIR)/libgnu_la-memchr.Plo -rm -f ./$(DEPDIR)/libgnu_la-memmove.Plo -rm -f ./$(DEPDIR)/libgnu_la-mempcpy.Plo -rm -f ./$(DEPDIR)/libgnu_la-memrchr.Plo -rm -f ./$(DEPDIR)/libgnu_la-mktime.Plo -rm -f ./$(DEPDIR)/libgnu_la-msvc-inval.Plo -rm -f ./$(DEPDIR)/libgnu_la-msvc-nothrow.Plo -rm -f ./$(DEPDIR)/libgnu_la-nl_langinfo-lock.Plo -rm -f ./$(DEPDIR)/libgnu_la-nl_langinfo.Plo -rm -f ./$(DEPDIR)/libgnu_la-nproc.Plo -rm -f ./$(DEPDIR)/libgnu_la-open.Plo -rm -f ./$(DEPDIR)/libgnu_la-openat-die.Plo -rm -f ./$(DEPDIR)/libgnu_la-openat-proc.Plo -rm -f ./$(DEPDIR)/libgnu_la-openat.Plo -rm -f ./$(DEPDIR)/libgnu_la-pipe-safer.Plo -rm -f ./$(DEPDIR)/libgnu_la-pipe.Plo -rm -f ./$(DEPDIR)/libgnu_la-printf-args.Plo -rm -f ./$(DEPDIR)/libgnu_la-printf-parse.Plo -rm -f ./$(DEPDIR)/libgnu_la-rawmemchr.Plo -rm -f ./$(DEPDIR)/libgnu_la-realloc.Plo -rm -f ./$(DEPDIR)/libgnu_la-regcomp.Plo -rm -f ./$(DEPDIR)/libgnu_la-regex.Plo -rm -f ./$(DEPDIR)/libgnu_la-regex_internal.Plo -rm -f ./$(DEPDIR)/libgnu_la-regexec.Plo -rm -f ./$(DEPDIR)/libgnu_la-save-cwd.Plo -rm -f ./$(DEPDIR)/libgnu_la-secure_getenv.Plo -rm -f ./$(DEPDIR)/libgnu_la-select.Plo -rm -f ./$(DEPDIR)/libgnu_la-setlocale-lock.Plo -rm -f ./$(DEPDIR)/libgnu_la-setlocale_null.Plo -rm -f ./$(DEPDIR)/libgnu_la-signbitd.Plo -rm -f ./$(DEPDIR)/libgnu_la-signbitf.Plo -rm -f ./$(DEPDIR)/libgnu_la-signbitl.Plo -rm -f ./$(DEPDIR)/libgnu_la-sleep.Plo -rm -f ./$(DEPDIR)/libgnu_la-sockets.Plo -rm -f ./$(DEPDIR)/libgnu_la-stat-time.Plo -rm -f ./$(DEPDIR)/libgnu_la-stat-w32.Plo -rm -f ./$(DEPDIR)/libgnu_la-stat.Plo -rm -f ./$(DEPDIR)/libgnu_la-stdio-read.Plo -rm -f ./$(DEPDIR)/libgnu_la-stdio-write.Plo -rm -f ./$(DEPDIR)/libgnu_la-strcasecmp.Plo -rm -f ./$(DEPDIR)/libgnu_la-strchrnul.Plo -rm -f ./$(DEPDIR)/libgnu_la-strdup.Plo -rm -f ./$(DEPDIR)/libgnu_la-strerror-override.Plo -rm -f ./$(DEPDIR)/libgnu_la-strerror.Plo -rm -f ./$(DEPDIR)/libgnu_la-strncasecmp.Plo -rm -f ./$(DEPDIR)/libgnu_la-strndup.Plo -rm -f ./$(DEPDIR)/libgnu_la-strnlen.Plo -rm -f ./$(DEPDIR)/libgnu_la-strnlen1.Plo -rm -f ./$(DEPDIR)/libgnu_la-strptime.Plo -rm -f ./$(DEPDIR)/libgnu_la-strtod.Plo -rm -f ./$(DEPDIR)/libgnu_la-strtok_r.Plo -rm -f ./$(DEPDIR)/libgnu_la-sys_socket.Plo -rm -f ./$(DEPDIR)/libgnu_la-time.Plo -rm -f ./$(DEPDIR)/libgnu_la-time_r.Plo -rm -f ./$(DEPDIR)/libgnu_la-unistd.Plo -rm -f ./$(DEPDIR)/libgnu_la-vasnprintf.Plo -rm -f ./$(DEPDIR)/libgnu_la-vsnprintf.Plo -rm -f ./$(DEPDIR)/libgnu_la-wcrtomb.Plo -rm -f ./$(DEPDIR)/libgnu_la-wctype-h.Plo -rm -f ./$(DEPDIR)/libgnu_la-wctype.Plo -rm -f ./$(DEPDIR)/libgnu_la-wcwidth.Plo -rm -f ./$(DEPDIR)/libgnu_la-windows-mutex.Plo -rm -f ./$(DEPDIR)/libgnu_la-windows-once.Plo -rm -f ./$(DEPDIR)/libgnu_la-windows-recmutex.Plo -rm -f ./$(DEPDIR)/libgnu_la-windows-rwlock.Plo -rm -f ./$(DEPDIR)/libgnu_la-xsize.Plo -rm -f glthread/$(DEPDIR)/libgnu_la-lock.Plo -rm -f glthread/$(DEPDIR)/libgnu_la-threadlib.Plo -rm -f malloc/$(DEPDIR)/libgnu_la-dynarray-skeleton.Plo -rm -f malloc/$(DEPDIR)/libgnu_la-dynarray_at_failure.Plo -rm -f malloc/$(DEPDIR)/libgnu_la-dynarray_emplace_enlarge.Plo -rm -f malloc/$(DEPDIR)/libgnu_la-dynarray_finalize.Plo -rm -f malloc/$(DEPDIR)/libgnu_la-dynarray_resize.Plo -rm -f malloc/$(DEPDIR)/libgnu_la-dynarray_resize_clear.Plo -rm -f unicase/$(DEPDIR)/libgnu_la-tolower.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_alnum.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_alpha.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_blank.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_cntrl.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_digit.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_graph.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_lower.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_print.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_punct.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_space.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_upper.Plo -rm -f unictype/$(DEPDIR)/libgnu_la-ctype_xdigit.Plo -rm -f uniwidth/$(DEPDIR)/libgnu_la-width.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all check install install-am \ install-exec install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-local distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # We need the following in order to create <alloca.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_ALLOCA_H_TRUE@alloca.h: alloca.in.h $(top_builddir)/config.status @GL_GENERATE_ALLOCA_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_ALLOCA_H_TRUE@ -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' \ @GL_GENERATE_ALLOCA_H_TRUE@ $(srcdir)/alloca.in.h > $@-t @GL_GENERATE_ALLOCA_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_ALLOCA_H_FALSE@alloca.h: $(top_builddir)/config.status @GL_GENERATE_ALLOCA_H_FALSE@ rm -f $@ # We need the following in order to create <assert.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_ASSERT_H_TRUE@assert.h: assert.in.h verify.h $(top_builddir)/config.status @GL_GENERATE_ASSERT_H_TRUE@ $(gl_V_at){ $(SED_HEADER_STDOUT) \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|@''NEXT_ASSERT_H''@|$(NEXT_ASSERT_H)|g' \ @GL_GENERATE_ASSERT_H_TRUE@ < $(srcdir)/assert.in.h && \ @GL_GENERATE_ASSERT_H_TRUE@ sed -e '/@assert.h omit start@/,/@assert.h omit end@/d' \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|_gl_verify|_gl_static_assert|g' \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|_GL_VERIFY|_GL_STATIC_ASSERT|g' \ @GL_GENERATE_ASSERT_H_TRUE@ -e 's|_GL\(_STATIC_ASSERT_H\)|_GL\1|g' \ @GL_GENERATE_ASSERT_H_TRUE@ < $(srcdir)/verify.h; \ @GL_GENERATE_ASSERT_H_TRUE@ } > $@-t @GL_GENERATE_ASSERT_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_ASSERT_H_FALSE@assert.h: $(top_builddir)/config.status @GL_GENERATE_ASSERT_H_FALSE@ rm -f $@ # We need the following in order to create <dirent.h> when the system # doesn't have one that works with the given compiler. dirent.h: dirent.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_DIRENT_H''@|$(HAVE_DIRENT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \ -e 's/@''DIR_HAS_FD_MEMBER''@/$(DIR_HAS_FD_MEMBER)/g' \ -e 's/@''GNULIB_OPENDIR''@/$(GL_GNULIB_OPENDIR)/g' \ -e 's/@''GNULIB_READDIR''@/$(GL_GNULIB_READDIR)/g' \ -e 's/@''GNULIB_REWINDDIR''@/$(GL_GNULIB_REWINDDIR)/g' \ -e 's/@''GNULIB_CLOSEDIR''@/$(GL_GNULIB_CLOSEDIR)/g' \ -e 's/@''GNULIB_DIRFD''@/$(GL_GNULIB_DIRFD)/g' \ -e 's/@''GNULIB_FDOPENDIR''@/$(GL_GNULIB_FDOPENDIR)/g' \ -e 's/@''GNULIB_SCANDIR''@/$(GL_GNULIB_SCANDIR)/g' \ -e 's/@''GNULIB_ALPHASORT''@/$(GL_GNULIB_ALPHASORT)/g' \ -e 's/@''HAVE_OPENDIR''@/$(HAVE_OPENDIR)/g' \ -e 's/@''HAVE_READDIR''@/$(HAVE_READDIR)/g' \ -e 's/@''HAVE_REWINDDIR''@/$(HAVE_REWINDDIR)/g' \ -e 's/@''HAVE_CLOSEDIR''@/$(HAVE_CLOSEDIR)/g' \ -e 's|@''HAVE_DECL_DIRFD''@|$(HAVE_DECL_DIRFD)|g' \ -e 's|@''HAVE_DECL_FDOPENDIR''@|$(HAVE_DECL_FDOPENDIR)|g' \ -e 's|@''HAVE_FDOPENDIR''@|$(HAVE_FDOPENDIR)|g' \ -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \ -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \ -e 's|@''REPLACE_OPENDIR''@|$(REPLACE_OPENDIR)|g' \ -e 's|@''REPLACE_READDIR''@|$(REPLACE_READDIR)|g' \ -e 's|@''REPLACE_REWINDDIR''@|$(REPLACE_REWINDDIR)|g' \ -e 's|@''REPLACE_CLOSEDIR''@|$(REPLACE_CLOSEDIR)|g' \ -e 's|@''REPLACE_DIRFD''@|$(REPLACE_DIRFD)|g' \ -e 's|@''REPLACE_FDOPENDIR''@|$(REPLACE_FDOPENDIR)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/dirent.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <errno.h> when the system # doesn't have one that is POSIX compliant. @GL_GENERATE_ERRNO_H_TRUE@errno.h: errno.in.h $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ $(srcdir)/errno.in.h > $@-t @GL_GENERATE_ERRNO_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_ERRNO_H_FALSE@errno.h: $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_FALSE@ rm -f $@ # We need the following in order to override <error.h>. error.h: error.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_ERROR_H''@|$(HAVE_ERROR_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''NEXT_ERROR_H''@|$(NEXT_ERROR_H)|g' \ -e 's|@''HAVE_ERROR''@|$(HAVE_ERROR)|g' \ -e 's|@''HAVE_ERROR_AT_LINE''@|$(HAVE_ERROR_AT_LINE)|g' \ -e 's|@''REPLACE_ERROR''@|$(REPLACE_ERROR)|g' \ -e 's|@''REPLACE_ERROR_AT_LINE''@|$(REPLACE_ERROR_AT_LINE)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ $(srcdir)/error.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <fcntl.h> when the system # doesn't have one that works with the given compiler. fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ -e 's/@''GNULIB_CREAT''@/$(GL_GNULIB_CREAT)/g' \ -e 's/@''GNULIB_FCNTL''@/$(GL_GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GL_GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GL_GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GL_GNULIB_OPENAT)/g' \ -e 's/@''GNULIB_MDA_CREAT''@/$(GL_GNULIB_MDA_CREAT)/g' \ -e 's/@''GNULIB_MDA_OPEN''@/$(GL_GNULIB_MDA_OPEN)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ -e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/fcntl.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <float.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_FLOAT_H_TRUE@float.h: float.in.h $(top_builddir)/config.status @GL_GENERATE_FLOAT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ @GL_GENERATE_FLOAT_H_TRUE@ $(srcdir)/float.in.h > $@-t @GL_GENERATE_FLOAT_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_FLOAT_H_FALSE@float.h: $(top_builddir)/config.status @GL_GENERATE_FLOAT_H_FALSE@ rm -f $@ # We need the following in order to create <getopt.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_GETOPT_H_TRUE@getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) @GL_GENERATE_GETOPT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ @GL_GENERATE_GETOPT_H_TRUE@ $(srcdir)/getopt.in.h > $@-t @GL_GENERATE_GETOPT_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_GETOPT_H_FALSE@getopt.h: $(top_builddir)/config.status @GL_GENERATE_GETOPT_H_FALSE@ rm -f $@ @GL_GENERATE_GETOPT_CDEFS_H_TRUE@getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status @GL_GENERATE_GETOPT_CDEFS_H_TRUE@ $(AM_V_GEN)$(SED_HEADER_STDOUT) \ @GL_GENERATE_GETOPT_CDEFS_H_TRUE@ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ @GL_GENERATE_GETOPT_CDEFS_H_TRUE@ $(srcdir)/getopt-cdefs.in.h > $@-t @GL_GENERATE_GETOPT_CDEFS_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_GETOPT_CDEFS_H_FALSE@getopt-cdefs.h: $(top_builddir)/config.status @GL_GENERATE_GETOPT_CDEFS_H_FALSE@ rm -f $@ malloc/dynarray.gl.h: malloc/dynarray.h $(AM_V_GEN)$(MKDIR_P) 'malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e '/libc_hidden_proto/d' \ $(srcdir)/malloc/dynarray.h > $@-t $(AM_V_at)mv $@-t $@ malloc/dynarray-skeleton.gl.h: malloc/dynarray-skeleton.c $(AM_V_GEN)$(MKDIR_P) 'malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|<malloc/dynarray\.h>|<malloc/dynarray.gl.h>|g' \ -e 's|__attribute_maybe_unused__|_GL_ATTRIBUTE_MAYBE_UNUSED|g' \ -e 's|__attribute_nonnull__|_GL_ATTRIBUTE_NONNULL|g' \ -e 's|__attribute_warn_unused_result__|_GL_ATTRIBUTE_NODISCARD|g' \ -e 's|__glibc_likely|_GL_LIKELY|g' \ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ $(srcdir)/malloc/dynarray-skeleton.c > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <inttypes.h> when the system # doesn't have one that works with the given compiler. inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ -e 's/@''GNULIB_IMAXABS''@/$(GL_GNULIB_IMAXABS)/g' \ -e 's/@''GNULIB_IMAXDIV''@/$(GL_GNULIB_IMAXDIV)/g' \ -e 's/@''GNULIB_STRTOIMAX''@/$(GL_GNULIB_STRTOIMAX)/g' \ -e 's/@''GNULIB_STRTOUMAX''@/$(GL_GNULIB_STRTOUMAX)/g' \ -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \ -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \ -e 's/@''REPLACE_IMAXABS''@/$(REPLACE_IMAXABS)/g' \ -e 's/@''REPLACE_IMAXDIV''@/$(REPLACE_IMAXDIV)/g' \ -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \ -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \ -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/inttypes.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create an empty placeholder for # <langinfo.h> when the system doesn't have one. langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ -e 's/@''GNULIB_NL_LANGINFO''@/$(GL_GNULIB_NL_LANGINFO)/g' \ -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ -e 's|@''HAVE_LANGINFO_ALTMON''@|$(HAVE_LANGINFO_ALTMON)|g' \ -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/langinfo.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <limits.h> when the system # doesn't have one that is compatible with GNU. @GL_GENERATE_LIMITS_H_TRUE@limits.h: limits.in.h $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ $(srcdir)/limits.in.h > $@-t @GL_GENERATE_LIMITS_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_LIMITS_H_FALSE@limits.h: $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_FALSE@ rm -f $@ # We need the following in order to create <locale.h> when the system # doesn't have one that provides all definitions. locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ -e 's/@''GNULIB_LOCALECONV''@/$(GL_GNULIB_LOCALECONV)/g' \ -e 's/@''GNULIB_SETLOCALE''@/$(GL_GNULIB_SETLOCALE)/g' \ -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GL_GNULIB_SETLOCALE_NULL)/g' \ -e 's/@''GNULIB_DUPLOCALE''@/$(GL_GNULIB_DUPLOCALE)/g' \ -e 's/@''GNULIB_LOCALENAME''@/$(GL_GNULIB_LOCALENAME)/g' \ -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \ -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \ -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \ -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \ -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ -e 's|@''LOCALENAME_ENHANCE_LOCALE_FUNCS''@|$(LOCALENAME_ENHANCE_LOCALE_FUNCS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/locale.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <math.h> when the system # doesn't have one that works with the given compiler. math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \ -e 's/@''GNULIB_ACOSF''@/$(GL_GNULIB_ACOSF)/g' \ -e 's/@''GNULIB_ACOSL''@/$(GL_GNULIB_ACOSL)/g' \ -e 's/@''GNULIB_ASINF''@/$(GL_GNULIB_ASINF)/g' \ -e 's/@''GNULIB_ASINL''@/$(GL_GNULIB_ASINL)/g' \ -e 's/@''GNULIB_ATANF''@/$(GL_GNULIB_ATANF)/g' \ -e 's/@''GNULIB_ATANL''@/$(GL_GNULIB_ATANL)/g' \ -e 's/@''GNULIB_ATAN2F''@/$(GL_GNULIB_ATAN2F)/g' \ -e 's/@''GNULIB_CBRT''@/$(GL_GNULIB_CBRT)/g' \ -e 's/@''GNULIB_CBRTF''@/$(GL_GNULIB_CBRTF)/g' \ -e 's/@''GNULIB_CBRTL''@/$(GL_GNULIB_CBRTL)/g' \ -e 's/@''GNULIB_CEIL''@/$(GL_GNULIB_CEIL)/g' \ -e 's/@''GNULIB_CEILF''@/$(GL_GNULIB_CEILF)/g' \ -e 's/@''GNULIB_CEILL''@/$(GL_GNULIB_CEILL)/g' \ -e 's/@''GNULIB_COPYSIGN''@/$(GL_GNULIB_COPYSIGN)/g' \ -e 's/@''GNULIB_COPYSIGNF''@/$(GL_GNULIB_COPYSIGNF)/g' \ -e 's/@''GNULIB_COPYSIGNL''@/$(GL_GNULIB_COPYSIGNL)/g' \ -e 's/@''GNULIB_COSF''@/$(GL_GNULIB_COSF)/g' \ -e 's/@''GNULIB_COSL''@/$(GL_GNULIB_COSL)/g' \ -e 's/@''GNULIB_COSHF''@/$(GL_GNULIB_COSHF)/g' \ -e 's/@''GNULIB_EXPF''@/$(GL_GNULIB_EXPF)/g' \ -e 's/@''GNULIB_EXPL''@/$(GL_GNULIB_EXPL)/g' \ -e 's/@''GNULIB_EXP2''@/$(GL_GNULIB_EXP2)/g' \ -e 's/@''GNULIB_EXP2F''@/$(GL_GNULIB_EXP2F)/g' \ -e 's/@''GNULIB_EXP2L''@/$(GL_GNULIB_EXP2L)/g' \ -e 's/@''GNULIB_EXPM1''@/$(GL_GNULIB_EXPM1)/g' \ -e 's/@''GNULIB_EXPM1F''@/$(GL_GNULIB_EXPM1F)/g' \ -e 's/@''GNULIB_EXPM1L''@/$(GL_GNULIB_EXPM1L)/g' \ -e 's/@''GNULIB_FABSF''@/$(GL_GNULIB_FABSF)/g' \ -e 's/@''GNULIB_FABSL''@/$(GL_GNULIB_FABSL)/g' \ -e 's/@''GNULIB_FLOOR''@/$(GL_GNULIB_FLOOR)/g' \ -e 's/@''GNULIB_FLOORF''@/$(GL_GNULIB_FLOORF)/g' \ -e 's/@''GNULIB_FLOORL''@/$(GL_GNULIB_FLOORL)/g' \ -e 's/@''GNULIB_FMA''@/$(GL_GNULIB_FMA)/g' \ -e 's/@''GNULIB_FMAF''@/$(GL_GNULIB_FMAF)/g' \ -e 's/@''GNULIB_FMAL''@/$(GL_GNULIB_FMAL)/g' \ -e 's/@''GNULIB_FMOD''@/$(GL_GNULIB_FMOD)/g' \ -e 's/@''GNULIB_FMODF''@/$(GL_GNULIB_FMODF)/g' \ -e 's/@''GNULIB_FMODL''@/$(GL_GNULIB_FMODL)/g' \ -e 's/@''GNULIB_FREXPF''@/$(GL_GNULIB_FREXPF)/g' \ -e 's/@''GNULIB_FREXP''@/$(GL_GNULIB_FREXP)/g' \ -e 's/@''GNULIB_FREXPL''@/$(GL_GNULIB_FREXPL)/g' \ -e 's/@''GNULIB_HYPOT''@/$(GL_GNULIB_HYPOT)/g' \ -e 's/@''GNULIB_HYPOTF''@/$(GL_GNULIB_HYPOTF)/g' \ -e 's/@''GNULIB_HYPOTL''@/$(GL_GNULIB_HYPOTL)/g' \ < $(srcdir)/math.in.h > $@-t1 $(AM_V_at)sed \ -e 's/@''GNULIB_ILOGB''@/$(GL_GNULIB_ILOGB)/g' \ -e 's/@''GNULIB_ILOGBF''@/$(GL_GNULIB_ILOGBF)/g' \ -e 's/@''GNULIB_ILOGBL''@/$(GL_GNULIB_ILOGBL)/g' \ -e 's/@''GNULIB_ISFINITE''@/$(GL_GNULIB_ISFINITE)/g' \ -e 's/@''GNULIB_ISINF''@/$(GL_GNULIB_ISINF)/g' \ -e 's/@''GNULIB_ISNAN''@/$(GL_GNULIB_ISNAN)/g' \ -e 's/@''GNULIB_ISNANF''@/$(GL_GNULIB_ISNANF)/g' \ -e 's/@''GNULIB_ISNAND''@/$(GL_GNULIB_ISNAND)/g' \ -e 's/@''GNULIB_ISNANL''@/$(GL_GNULIB_ISNANL)/g' \ -e 's/@''GNULIB_LDEXP''@/$(GL_GNULIB_LDEXP)/g' \ -e 's/@''GNULIB_LDEXPF''@/$(GL_GNULIB_LDEXPF)/g' \ -e 's/@''GNULIB_LDEXPL''@/$(GL_GNULIB_LDEXPL)/g' \ -e 's/@''GNULIB_LOG''@/$(GL_GNULIB_LOG)/g' \ -e 's/@''GNULIB_LOGF''@/$(GL_GNULIB_LOGF)/g' \ -e 's/@''GNULIB_LOGL''@/$(GL_GNULIB_LOGL)/g' \ -e 's/@''GNULIB_LOG10''@/$(GL_GNULIB_LOG10)/g' \ -e 's/@''GNULIB_LOG10F''@/$(GL_GNULIB_LOG10F)/g' \ -e 's/@''GNULIB_LOG10L''@/$(GL_GNULIB_LOG10L)/g' \ -e 's/@''GNULIB_LOG1P''@/$(GL_GNULIB_LOG1P)/g' \ -e 's/@''GNULIB_LOG1PF''@/$(GL_GNULIB_LOG1PF)/g' \ -e 's/@''GNULIB_LOG1PL''@/$(GL_GNULIB_LOG1PL)/g' \ -e 's/@''GNULIB_LOG2''@/$(GL_GNULIB_LOG2)/g' \ -e 's/@''GNULIB_LOG2F''@/$(GL_GNULIB_LOG2F)/g' \ -e 's/@''GNULIB_LOG2L''@/$(GL_GNULIB_LOG2L)/g' \ -e 's/@''GNULIB_LOGB''@/$(GL_GNULIB_LOGB)/g' \ -e 's/@''GNULIB_LOGBF''@/$(GL_GNULIB_LOGBF)/g' \ -e 's/@''GNULIB_LOGBL''@/$(GL_GNULIB_LOGBL)/g' \ -e 's/@''GNULIB_MODF''@/$(GL_GNULIB_MODF)/g' \ -e 's/@''GNULIB_MODFF''@/$(GL_GNULIB_MODFF)/g' \ -e 's/@''GNULIB_MODFL''@/$(GL_GNULIB_MODFL)/g' \ -e 's/@''GNULIB_POWF''@/$(GL_GNULIB_POWF)/g' \ -e 's/@''GNULIB_REMAINDER''@/$(GL_GNULIB_REMAINDER)/g' \ -e 's/@''GNULIB_REMAINDERF''@/$(GL_GNULIB_REMAINDERF)/g' \ -e 's/@''GNULIB_REMAINDERL''@/$(GL_GNULIB_REMAINDERL)/g' \ -e 's/@''GNULIB_RINT''@/$(GL_GNULIB_RINT)/g' \ -e 's/@''GNULIB_RINTF''@/$(GL_GNULIB_RINTF)/g' \ -e 's/@''GNULIB_RINTL''@/$(GL_GNULIB_RINTL)/g' \ -e 's/@''GNULIB_ROUND''@/$(GL_GNULIB_ROUND)/g' \ -e 's/@''GNULIB_ROUNDF''@/$(GL_GNULIB_ROUNDF)/g' \ -e 's/@''GNULIB_ROUNDL''@/$(GL_GNULIB_ROUNDL)/g' \ -e 's/@''GNULIB_SIGNBIT''@/$(GL_GNULIB_SIGNBIT)/g' \ -e 's/@''GNULIB_SINF''@/$(GL_GNULIB_SINF)/g' \ -e 's/@''GNULIB_SINL''@/$(GL_GNULIB_SINL)/g' \ -e 's/@''GNULIB_SINHF''@/$(GL_GNULIB_SINHF)/g' \ -e 's/@''GNULIB_SQRTF''@/$(GL_GNULIB_SQRTF)/g' \ -e 's/@''GNULIB_SQRTL''@/$(GL_GNULIB_SQRTL)/g' \ -e 's/@''GNULIB_TANF''@/$(GL_GNULIB_TANF)/g' \ -e 's/@''GNULIB_TANL''@/$(GL_GNULIB_TANL)/g' \ -e 's/@''GNULIB_TANHF''@/$(GL_GNULIB_TANHF)/g' \ -e 's/@''GNULIB_TRUNC''@/$(GL_GNULIB_TRUNC)/g' \ -e 's/@''GNULIB_TRUNCF''@/$(GL_GNULIB_TRUNCF)/g' \ -e 's/@''GNULIB_TRUNCL''@/$(GL_GNULIB_TRUNCL)/g' \ -e 's/@''GNULIB_TOTALORDER''@/$(GL_GNULIB_TOTALORDER)/g' \ -e 's/@''GNULIB_TOTALORDERF''@/$(GL_GNULIB_TOTALORDERF)/g' \ -e 's/@''GNULIB_TOTALORDERL''@/$(GL_GNULIB_TOTALORDERL)/g' \ -e 's/@''GNULIB_MDA_J0''@/$(GL_GNULIB_MDA_J0)/g' \ -e 's/@''GNULIB_MDA_J1''@/$(GL_GNULIB_MDA_J1)/g' \ -e 's/@''GNULIB_MDA_JN''@/$(GL_GNULIB_MDA_JN)/g' \ -e 's/@''GNULIB_MDA_Y0''@/$(GL_GNULIB_MDA_Y0)/g' \ -e 's/@''GNULIB_MDA_Y1''@/$(GL_GNULIB_MDA_Y1)/g' \ -e 's/@''GNULIB_MDA_YN''@/$(GL_GNULIB_MDA_YN)/g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \ -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \ -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \ -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \ -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \ -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \ -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \ -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \ -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \ -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \ -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \ -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \ -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \ -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \ -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \ -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \ -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \ -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \ -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \ -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \ -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \ -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \ -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \ -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \ -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \ -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \ -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \ -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \ -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \ -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \ -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \ -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \ -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \ -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \ -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \ -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \ -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \ -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \ -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \ -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \ -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \ -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \ -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \ -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \ -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \ -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \ -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \ -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \ -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \ -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \ -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \ -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \ -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \ -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \ -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \ -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \ -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \ -e 's|@''HAVE_TOTALORDER''@|$(HAVE_TOTALORDER)|g' \ -e 's|@''HAVE_TOTALORDERF''@|$(HAVE_TOTALORDERF)|g' \ -e 's|@''HAVE_TOTALORDERL''@|$(HAVE_TOTALORDERL)|g' \ < $@-t2 > $@-t3 $(AM_V_at)sed \ -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \ -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \ -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \ -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \ -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \ -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \ -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \ -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \ -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \ -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \ -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \ -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \ -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \ -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \ -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \ -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \ -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \ -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \ -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \ -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \ -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \ -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \ -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \ < $@-t3 > $@-t4 $(AM_V_at)sed \ -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \ -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \ -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \ -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \ -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \ -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \ -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \ -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \ -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \ -e 's|@''REPLACE_EXPL''@|$(REPLACE_EXPL)|g' \ -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \ -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \ -e 's|@''REPLACE_EXPM1L''@|$(REPLACE_EXPM1L)|g' \ -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \ -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \ -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \ -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \ -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \ -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \ -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \ -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \ -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \ -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \ -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \ -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \ -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \ -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \ -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \ -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \ -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \ -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ < $@-t4 > $@-t5 $(AM_V_at)sed \ -e 's|@''REPLACE_LDEXP''@|$(REPLACE_LDEXP)|g' \ -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \ -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \ -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \ -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \ -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \ -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \ -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \ -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \ -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \ -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \ -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \ -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \ -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \ -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \ -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \ -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \ -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \ -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \ -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \ -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \ -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \ -e 's|@''REPLACE_RINTL''@|$(REPLACE_RINTL)|g' \ -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ -e 's|@''REPLACE_SIGNBIT_USING_BUILTINS''@|$(REPLACE_SIGNBIT_USING_BUILTINS)|g' \ -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \ -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \ -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \ -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \ -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \ -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \ -e 's|@''REPLACE_TOTALORDER''@|$(REPLACE_TOTALORDER)|g' \ -e 's|@''REPLACE_TOTALORDERF''@|$(REPLACE_TOTALORDERF)|g' \ -e 's|@''REPLACE_TOTALORDERL''@|$(REPLACE_TOTALORDERL)|g' \ -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \ -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \ -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t5 > $@-t6 $(AM_V_at)rm -f $@-t1 $@-t2 $@-t3 $@-t4 $@-t5 $(AM_V_at)mv $@-t6 $@ # We need the following in order to create <signal.h> when the system # doesn't have a complete one. signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GL_GNULIB_PTHREAD_SIGMASK)/g' \ -e 's/@''GNULIB_RAISE''@/$(GL_GNULIB_RAISE)/g' \ -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GL_GNULIB_SIGNAL_H_SIGPIPE)/g' \ -e 's/@''GNULIB_SIGPROCMASK''@/$(GL_GNULIB_SIGPROCMASK)/g' \ -e 's/@''GNULIB_SIGACTION''@/$(GL_GNULIB_SIGACTION)/g' \ -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \ -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \ -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \ -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \ -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/signal.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <stdckdint.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDCKDINT_H_TRUE@stdckdint.h: stdckdint.in.h $(top_builddir)/config.status @GL_GENERATE_STDCKDINT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_STDCKDINT_H_TRUE@ $(srcdir)/stdckdint.in.h > $@-t @GL_GENERATE_STDCKDINT_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_STDCKDINT_H_FALSE@stdckdint.h: $(top_builddir)/config.status @GL_GENERATE_STDCKDINT_H_FALSE@ rm -f $@ # We need the following in order to create <stddef.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ $(srcdir)/stddef.in.h > $@-t @GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_FALSE@ rm -f $@ # We need the following in order to create <stdint.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status @GL_GENERATE_STDINT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ $(srcdir)/stdint.in.h > $@-t @GL_GENERATE_STDINT_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status @GL_GENERATE_STDINT_H_FALSE@ rm -f $@ # We need the following in order to create <stdio.h> when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GL_GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GL_GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GL_GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GL_GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GL_GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GL_GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GL_GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FOPEN_GNU''@/$(GL_GNULIB_FOPEN_GNU)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GL_GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GL_GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GL_GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GL_GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GL_GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GL_GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GL_GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GL_GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GL_GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GL_GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GL_GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GL_GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GL_GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GL_GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GL_GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GL_GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GL_GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GL_GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GL_GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GL_GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GL_GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GL_GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GL_GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GL_GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GL_GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GL_GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GL_GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GL_GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GL_GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GL_GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GL_GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GL_GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GL_GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GL_GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GL_GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GL_GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GL_GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GL_GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GL_GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GL_GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GL_GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GL_GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GL_GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GL_GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GL_GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GL_GNULIB_VSPRINTF_POSIX)/g' \ -e 's/@''GNULIB_MDA_FCLOSEALL''@/$(GL_GNULIB_MDA_FCLOSEALL)/g' \ -e 's/@''GNULIB_MDA_FDOPEN''@/$(GL_GNULIB_MDA_FDOPEN)/g' \ -e 's/@''GNULIB_MDA_FILENO''@/$(GL_GNULIB_MDA_FILENO)/g' \ -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \ -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \ < $(srcdir)/stdio.in.h > $@-t1 $(AM_V_at)sed \ -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_GETW''@|$(HAVE_DECL_GETW)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_PUTW''@|$(HAVE_DECL_PUTW)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FOPEN_FOR_FOPEN_GNU''@|$(REPLACE_FOPEN_FOR_FOPEN_GNU)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t2 > $@-t3 $(AM_V_at)rm -f $@-t1 $@-t2 $(AM_V_at)mv $@-t3 $@ # We need the following in order to create <stdlib.h> when the system # doesn't have one that works with the given compiler. stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ -e 's/@''GNULIB__EXIT''@/$(GL_GNULIB__EXIT)/g' \ -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GL_GNULIB_ALIGNED_ALLOC)/g' \ -e 's/@''GNULIB_ATOLL''@/$(GL_GNULIB_ATOLL)/g' \ -e 's/@''GNULIB_CALLOC_GNU''@/$(GL_GNULIB_CALLOC_GNU)/g' \ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GL_GNULIB_CALLOC_POSIX)/g' \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GL_GNULIB_CANONICALIZE_FILE_NAME)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GL_GNULIB_GETLOADAVG)/g' \ -e 's/@''GNULIB_GETPROGNAME''@/$(GL_GNULIB_GETPROGNAME)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GL_GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GL_GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_GNU''@/$(GL_GNULIB_MALLOC_GNU)/g' \ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GL_GNULIB_MALLOC_POSIX)/g' \ -e 's/@''GNULIB_MBSTOWCS''@/$(GL_GNULIB_MBSTOWCS)/g' \ -e 's/@''GNULIB_MBTOWC''@/$(GL_GNULIB_MBTOWC)/g' \ -e 's/@''GNULIB_MKDTEMP''@/$(GL_GNULIB_MKDTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMP''@/$(GL_GNULIB_MKOSTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMPS''@/$(GL_GNULIB_MKOSTEMPS)/g' \ -e 's/@''GNULIB_MKSTEMP''@/$(GL_GNULIB_MKSTEMP)/g' \ -e 's/@''GNULIB_MKSTEMPS''@/$(GL_GNULIB_MKSTEMPS)/g' \ -e 's/@''GNULIB_POSIX_MEMALIGN''@/$(GL_GNULIB_POSIX_MEMALIGN)/g' \ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GL_GNULIB_POSIX_OPENPT)/g' \ -e 's/@''GNULIB_PTSNAME''@/$(GL_GNULIB_PTSNAME)/g' \ -e 's/@''GNULIB_PTSNAME_R''@/$(GL_GNULIB_PTSNAME_R)/g' \ -e 's/@''GNULIB_PUTENV''@/$(GL_GNULIB_PUTENV)/g' \ -e 's/@''GNULIB_QSORT_R''@/$(GL_GNULIB_QSORT_R)/g' \ -e 's/@''GNULIB_RAND''@/$(GL_GNULIB_RAND)/g' \ -e 's/@''GNULIB_RANDOM''@/$(GL_GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GL_GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_GNU''@/$(GL_GNULIB_REALLOC_GNU)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GL_GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALLOCARRAY''@/$(GL_GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GL_GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GL_GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GL_GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GL_GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GL_GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOL''@/$(GL_GNULIB_STRTOL)/g' \ -e 's/@''GNULIB_STRTOLD''@/$(GL_GNULIB_STRTOLD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GL_GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOUL''@/$(GL_GNULIB_STRTOUL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GL_GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GL_GNULIB_SYSTEM_POSIX)/g' \ -e 's/@''GNULIB_UNLOCKPT''@/$(GL_GNULIB_UNLOCKPT)/g' \ -e 's/@''GNULIB_UNSETENV''@/$(GL_GNULIB_UNSETENV)/g' \ -e 's/@''GNULIB_WCTOMB''@/$(GL_GNULIB_WCTOMB)/g' \ -e 's/@''GNULIB_MDA_ECVT''@/$(GL_GNULIB_MDA_ECVT)/g' \ -e 's/@''GNULIB_MDA_FCVT''@/$(GL_GNULIB_MDA_FCVT)/g' \ -e 's/@''GNULIB_MDA_GCVT''@/$(GL_GNULIB_MDA_GCVT)/g' \ -e 's/@''GNULIB_MDA_MKTEMP''@/$(GL_GNULIB_MDA_MKTEMP)/g' \ -e 's/@''GNULIB_MDA_PUTENV''@/$(GL_GNULIB_MDA_PUTENV)/g' \ < $(srcdir)/stdlib.in.h > $@-t1 $(AM_V_at)sed \ -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ALIGNED_ALLOC''@|$(HAVE_ALIGNED_ALLOC)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''HAVE_DECL_ECVT''@|$(HAVE_DECL_ECVT)|g' \ -e 's|@''HAVE_DECL_FCVT''@|$(HAVE_DECL_FCVT)|g' \ -e 's|@''HAVE_DECL_GCVT''@|$(HAVE_DECL_GCVT)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_DECL_PROGRAM_INVOCATION_NAME''@|$(HAVE_DECL_PROGRAM_INVOCATION_NAME)|g' \ -e 's|@''HAVE_GETPROGNAME''@|$(HAVE_GETPROGNAME)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ -e 's|@''HAVE_POSIX_MEMALIGN''@|$(HAVE_POSIX_MEMALIGN)|g' \ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOL''@|$(HAVE_STRTOL)|g' \ -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOUL''@|$(HAVE_STRTOUL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's|@''REPLACE__EXIT''@|$(REPLACE__EXIT)|g' \ -e 's|@''REPLACE_ALIGNED_ALLOC''@|$(REPLACE_ALIGNED_ALLOC)|g' \ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_GNU''@|$(REPLACE_CALLOC_FOR_CALLOC_GNU)|g' \ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_POSIX''@|$(REPLACE_CALLOC_FOR_CALLOC_POSIX)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_GETLOADAVG''@|$(REPLACE_GETLOADAVG)|g' \ -e 's|@''REPLACE_GETPROGNAME''@|$(REPLACE_GETPROGNAME)|g' \ -e 's|@''REPLACE_GETSUBOPT''@|$(REPLACE_GETSUBOPT)|g' \ -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_GNU''@|$(REPLACE_MALLOC_FOR_MALLOC_GNU)|g' \ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_POSIX''@|$(REPLACE_MALLOC_FOR_MALLOC_POSIX)|g' \ -e 's|@''REPLACE_MB_CUR_MAX''@|$(REPLACE_MB_CUR_MAX)|g' \ -e 's|@''REPLACE_MBSTOWCS''@|$(REPLACE_MBSTOWCS)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKOSTEMP''@|$(REPLACE_MKOSTEMP)|g' \ -e 's|@''REPLACE_MKOSTEMPS''@|$(REPLACE_MKOSTEMPS)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_POSIX_MEMALIGN''@|$(REPLACE_POSIX_MEMALIGN)|g' \ -e 's|@''REPLACE_POSIX_OPENPT''@|$(REPLACE_POSIX_OPENPT)|g' \ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ -e 's|@''REPLACE_RAND''@|$(REPLACE_RAND)|g' \ -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_GNU''@|$(REPLACE_REALLOC_FOR_REALLOC_GNU)|g' \ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_POSIX''@|$(REPLACE_REALLOC_FOR_REALLOC_POSIX)|g' \ -e 's|@''REPLACE_REALLOCARRAY''@|$(REPLACE_REALLOCARRAY)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ -e 's|@''REPLACE_STRTOL''@|$(REPLACE_STRTOL)|g' \ -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \ -e 's|@''REPLACE_STRTOLL''@|$(REPLACE_STRTOLL)|g' \ -e 's|@''REPLACE_STRTOUL''@|$(REPLACE_STRTOUL)|g' \ -e 's|@''REPLACE_STRTOULL''@|$(REPLACE_STRTOULL)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t2 > $@-t3 $(AM_V_at)rm -f $@-t1 $@-t2 $(AM_V_at)mv $@-t3 $@ # We need the following in order to create <string.h> when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GL_GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GL_GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GL_GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GL_GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GL_GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GL_GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GL_GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GL_GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GL_GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GL_GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GL_GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GL_GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GL_GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GL_GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GL_GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GL_GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GL_GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GL_GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GL_GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GL_GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GL_GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_MEMSET_EXPLICIT''@/$(GL_GNULIB_MEMSET_EXPLICIT)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GL_GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GL_GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GL_GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GL_GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GL_GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GL_GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GL_GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GL_GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GL_GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GL_GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GL_GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GL_GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GL_GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GL_GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GL_GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GL_GNULIB_STRERRORNAME_NP)/g' \ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GL_GNULIB_SIGABBREV_NP)/g' \ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GL_GNULIB_SIGDESCR_NP)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GL_GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GL_GNULIB_STRVERSCMP)/g' \ -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GL_GNULIB_MDA_MEMCCPY)/g' \ -e 's/@''GNULIB_MDA_STRDUP''@/$(GL_GNULIB_MDA_STRDUP)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ < $(srcdir)/string.in.h > $@-t1 $(AM_V_at)sed \ -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_MEMSET_EXPLICIT''@|$(HAVE_MEMSET_EXPLICIT)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_STRERRORNAME_NP''@|$(HAVE_STRERRORNAME_NP)|g' \ -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \ -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_FFSLL''@|$(REPLACE_FFSLL)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_MEMPCPY''@|$(REPLACE_MEMPCPY)|g' \ -e 's|@''REPLACE_MEMSET_EXPLICIT''@|$(REPLACE_MEMSET_EXPLICIT)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_STPCPY''@|$(REPLACE_STPCPY)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRERRORNAME_NP''@|$(REPLACE_STRERRORNAME_NP)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''REPLACE_STRVERSCMP''@|$(REPLACE_STRVERSCMP)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t1 > $@-t2 $(AM_V_at)rm -f $@-t1 $(AM_V_at)mv $@-t2 $@ # We need the following in order to create <strings.h> when the system # doesn't have one that works with the given compiler. strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ -e 's/@''GNULIB_FFS''@/$(GL_GNULIB_FFS)/g' \ -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/strings.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/select.h> when the system # doesn't have one that works with the given compiler. sys/select.h: sys_select.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_SELECT_H''@|$(NEXT_SYS_SELECT_H)|g' \ -e 's|@''HAVE_SYS_SELECT_H''@|$(HAVE_SYS_SELECT_H)|g' \ -e 's/@''GNULIB_PSELECT''@/$(GL_GNULIB_PSELECT)/g' \ -e 's/@''GNULIB_SELECT''@/$(GL_GNULIB_SELECT)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's|@''HAVE_PSELECT''@|$(HAVE_PSELECT)|g' \ -e 's|@''REPLACE_PSELECT''@|$(REPLACE_PSELECT)|g' \ -e 's|@''REPLACE_SELECT''@|$(REPLACE_SELECT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_select.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/socket.h> when the system # doesn't have one that works with the given compiler. sys/socket.h: sys_socket.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_SOCKET_H''@|$(NEXT_SYS_SOCKET_H)|g' \ -e 's|@''HAVE_SYS_SOCKET_H''@|$(HAVE_SYS_SOCKET_H)|g' \ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_SOCKET''@/$(GL_GNULIB_SOCKET)/g' \ -e 's/@''GNULIB_CONNECT''@/$(GL_GNULIB_CONNECT)/g' \ -e 's/@''GNULIB_ACCEPT''@/$(GL_GNULIB_ACCEPT)/g' \ -e 's/@''GNULIB_BIND''@/$(GL_GNULIB_BIND)/g' \ -e 's/@''GNULIB_GETPEERNAME''@/$(GL_GNULIB_GETPEERNAME)/g' \ -e 's/@''GNULIB_GETSOCKNAME''@/$(GL_GNULIB_GETSOCKNAME)/g' \ -e 's/@''GNULIB_GETSOCKOPT''@/$(GL_GNULIB_GETSOCKOPT)/g' \ -e 's/@''GNULIB_LISTEN''@/$(GL_GNULIB_LISTEN)/g' \ -e 's/@''GNULIB_RECV''@/$(GL_GNULIB_RECV)/g' \ -e 's/@''GNULIB_SEND''@/$(GL_GNULIB_SEND)/g' \ -e 's/@''GNULIB_RECVFROM''@/$(GL_GNULIB_RECVFROM)/g' \ -e 's/@''GNULIB_SENDTO''@/$(GL_GNULIB_SENDTO)/g' \ -e 's/@''GNULIB_SETSOCKOPT''@/$(GL_GNULIB_SETSOCKOPT)/g' \ -e 's/@''GNULIB_SHUTDOWN''@/$(GL_GNULIB_SHUTDOWN)/g' \ -e 's/@''GNULIB_ACCEPT4''@/$(GL_GNULIB_ACCEPT4)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE''@|$(HAVE_STRUCT_SOCKADDR_STORAGE)|g' \ -e 's|@''HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY''@|$(HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY)|g' \ -e 's|@''HAVE_SA_FAMILY_T''@|$(HAVE_SA_FAMILY_T)|g' \ -e 's|@''HAVE_ACCEPT4''@|$(HAVE_ACCEPT4)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_socket.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/stat.h> when the system # has one that is incomplete. sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ -e 's/@''GNULIB_CHMOD''@/$(GL_GNULIB_CHMOD)/g' \ -e 's/@''GNULIB_FCHMODAT''@/$(GL_GNULIB_FCHMODAT)/g' \ -e 's/@''GNULIB_FSTAT''@/$(GL_GNULIB_FSTAT)/g' \ -e 's/@''GNULIB_FSTATAT''@/$(GL_GNULIB_FSTATAT)/g' \ -e 's/@''GNULIB_FUTIMENS''@/$(GL_GNULIB_FUTIMENS)/g' \ -e 's/@''GNULIB_GETUMASK''@/$(GL_GNULIB_GETUMASK)/g' \ -e 's/@''GNULIB_LCHMOD''@/$(GL_GNULIB_LCHMOD)/g' \ -e 's/@''GNULIB_LSTAT''@/$(GL_GNULIB_LSTAT)/g' \ -e 's/@''GNULIB_MKDIR''@/$(GL_GNULIB_MKDIR)/g' \ -e 's/@''GNULIB_MKDIRAT''@/$(GL_GNULIB_MKDIRAT)/g' \ -e 's/@''GNULIB_MKFIFO''@/$(GL_GNULIB_MKFIFO)/g' \ -e 's/@''GNULIB_MKFIFOAT''@/$(GL_GNULIB_MKFIFOAT)/g' \ -e 's/@''GNULIB_MKNOD''@/$(GL_GNULIB_MKNOD)/g' \ -e 's/@''GNULIB_MKNODAT''@/$(GL_GNULIB_MKNODAT)/g' \ -e 's/@''GNULIB_STAT''@/$(GL_GNULIB_STAT)/g' \ -e 's/@''GNULIB_UTIMENSAT''@/$(GL_GNULIB_UTIMENSAT)/g' \ -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GL_GNULIB_OVERRIDES_STRUCT_STAT)/g' \ -e 's/@''GNULIB_MDA_CHMOD''@/$(GL_GNULIB_MDA_CHMOD)/g' \ -e 's/@''GNULIB_MDA_MKDIR''@/$(GL_GNULIB_MDA_MKDIR)/g' \ -e 's/@''GNULIB_MDA_UMASK''@/$(GL_GNULIB_MDA_UMASK)/g' \ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ -e 's|@''HAVE_GETUMASK''@|$(HAVE_GETUMASK)|g' \ -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ -e 's|@''REPLACE_CHMOD''@|$(REPLACE_CHMOD)|g' \ -e 's|@''REPLACE_FCHMODAT''@|$(REPLACE_FCHMODAT)|g' \ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ -e 's|@''REPLACE_MKFIFOAT''@|$(REPLACE_MKFIFOAT)|g' \ -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ -e 's|@''REPLACE_MKNODAT''@|$(REPLACE_MKNODAT)|g' \ -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_stat.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/time.h> when the system # doesn't have one that works with the given compiler. sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GL_GNULIB_GETTIMEOFDAY)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \ -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_time.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/types.h> when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ $(srcdir)/sys_types.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/uio.h> when the system # doesn't have one that works with the given compiler. sys/uio.h: sys_uio.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_UIO_H''@|$(NEXT_SYS_UIO_H)|g' \ -e 's|@''HAVE_SYS_UIO_H''@|$(HAVE_SYS_UIO_H)|g' \ $(srcdir)/sys_uio.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/wait.h> when the system # has one that is incomplete. sys/wait.h: sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ -e 's/@''GNULIB_WAITPID''@/$(GL_GNULIB_WAITPID)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_wait.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sysexits.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_SYSEXITS_H_TRUE@sysexits.h: sysexits.in.h $(top_builddir)/config.status @GL_GENERATE_SYSEXITS_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''HAVE_SYSEXITS_H''@|$(HAVE_SYSEXITS_H)|g' \ @GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_SYSEXITS_H_TRUE@ -e 's|@''NEXT_SYSEXITS_H''@|$(NEXT_SYSEXITS_H)|g' \ @GL_GENERATE_SYSEXITS_H_TRUE@ $(srcdir)/sysexits.in.h > $@-t @GL_GENERATE_SYSEXITS_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_SYSEXITS_H_FALSE@sysexits.h: $(top_builddir)/config.status @GL_GENERATE_SYSEXITS_H_FALSE@ rm -f $@ # We need the following in order to create <time.h> when the system # doesn't have one that works with the given compiler. time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ -e 's/@''GNULIB_CTIME''@/$(GL_GNULIB_CTIME)/g' \ -e 's/@''GNULIB_LOCALTIME''@/$(GL_GNULIB_LOCALTIME)/g' \ -e 's/@''GNULIB_MKTIME''@/$(GL_GNULIB_MKTIME)/g' \ -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \ -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \ -e 's/@''GNULIB_TIME''@/$(GL_GNULIB_TIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \ -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \ -e 's/@''GNULIB_TIME_R''@/$(GL_GNULIB_TIME_R)/g' \ -e 's/@''GNULIB_TIME_RZ''@/$(GL_GNULIB_TIME_RZ)/g' \ -e 's/@''GNULIB_TZSET''@/$(GL_GNULIB_TZSET)/g' \ -e 's/@''GNULIB_MDA_TZSET''@/$(GL_GNULIB_MDA_TZSET)/g' \ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ -e 's|@''HAVE_TIMESPEC_GET''@|$(HAVE_TIMESPEC_GET)|g' \ -e 's|@''HAVE_TIMESPEC_GETRES''@|$(HAVE_TIMESPEC_GETRES)|g' \ -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ -e 's|@''REPLACE_TIME''@|$(REPLACE_TIME)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ -e 's|@''REPLACE_TIMESPEC_GET''@|$(REPLACE_TIMESPEC_GET)|g' \ -e 's|@''REPLACE_TIMESPEC_GETRES''@|$(REPLACE_TIMESPEC_GETRES)|g' \ -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_TIME_UTC''@|$(TIME_H_DEFINES_TIME_UTC)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/time.in.h > $@-t $(AM_V_at)mv $@-t $@ uchar.h: uchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_UCHAR_H''@/$(HAVE_UCHAR_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UCHAR_H''@|$(NEXT_UCHAR_H)|g' \ -e 's|@''CXX_HAS_CHAR8_TYPE''@|$(CXX_HAS_CHAR8_TYPE)|g' \ -e 's|@''CXX_HAS_UCHAR_TYPES''@|$(CXX_HAS_UCHAR_TYPES)|g' \ -e 's|@''SMALL_WCHAR_T''@|$(SMALL_WCHAR_T)|g' \ -e 's|@''GNULIBHEADERS_OVERRIDE_CHAR8_T''@|$(GNULIBHEADERS_OVERRIDE_CHAR8_T)|g' \ -e 's|@''GNULIBHEADERS_OVERRIDE_CHAR16_T''@|$(GNULIBHEADERS_OVERRIDE_CHAR16_T)|g' \ -e 's|@''GNULIBHEADERS_OVERRIDE_CHAR32_T''@|$(GNULIBHEADERS_OVERRIDE_CHAR32_T)|g' \ -e 's/@''GNULIB_BTOC32''@/$(GL_GNULIB_BTOC32)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GL_GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_C32ISALNUM''@/$(GL_GNULIB_C32ISALNUM)/g' \ -e 's/@''GNULIB_C32ISALPHA''@/$(GL_GNULIB_C32ISALPHA)/g' \ -e 's/@''GNULIB_C32ISBLANK''@/$(GL_GNULIB_C32ISBLANK)/g' \ -e 's/@''GNULIB_C32ISCNTRL''@/$(GL_GNULIB_C32ISCNTRL)/g' \ -e 's/@''GNULIB_C32ISDIGIT''@/$(GL_GNULIB_C32ISDIGIT)/g' \ -e 's/@''GNULIB_C32ISGRAPH''@/$(GL_GNULIB_C32ISGRAPH)/g' \ -e 's/@''GNULIB_C32ISLOWER''@/$(GL_GNULIB_C32ISLOWER)/g' \ -e 's/@''GNULIB_C32ISPRINT''@/$(GL_GNULIB_C32ISPRINT)/g' \ -e 's/@''GNULIB_C32ISPUNCT''@/$(GL_GNULIB_C32ISPUNCT)/g' \ -e 's/@''GNULIB_C32ISSPACE''@/$(GL_GNULIB_C32ISSPACE)/g' \ -e 's/@''GNULIB_C32ISUPPER''@/$(GL_GNULIB_C32ISUPPER)/g' \ -e 's/@''GNULIB_C32ISXDIGIT''@/$(GL_GNULIB_C32ISXDIGIT)/g' \ -e 's/@''GNULIB_C32TOLOWER''@/$(GL_GNULIB_C32TOLOWER)/g' \ -e 's/@''GNULIB_C32TOUPPER''@/$(GL_GNULIB_C32TOUPPER)/g' \ -e 's/@''GNULIB_C32WIDTH''@/$(GL_GNULIB_C32WIDTH)/g' \ -e 's/@''GNULIB_C32RTOMB''@/$(GL_GNULIB_C32RTOMB)/g' \ -e 's/@''GNULIB_C32SNRTOMBS''@/$(GL_GNULIB_C32SNRTOMBS)/g' \ -e 's/@''GNULIB_C32SRTOMBS''@/$(GL_GNULIB_C32SRTOMBS)/g' \ -e 's/@''GNULIB_C32STOMBS''@/$(GL_GNULIB_C32STOMBS)/g' \ -e 's/@''GNULIB_C32SWIDTH''@/$(GL_GNULIB_C32SWIDTH)/g' \ -e 's/@''GNULIB_C32TOB''@/$(GL_GNULIB_C32TOB)/g' \ -e 's/@''GNULIB_C32_APPLY_MAPPING''@/$(GL_GNULIB_C32_APPLY_MAPPING)/g' \ -e 's/@''GNULIB_C32_APPLY_TYPE_TEST''@/$(GL_GNULIB_C32_APPLY_TYPE_TEST)/g' \ -e 's/@''GNULIB_C32_GET_MAPPING''@/$(GL_GNULIB_C32_GET_MAPPING)/g' \ -e 's/@''GNULIB_C32_GET_TYPE_TEST''@/$(GL_GNULIB_C32_GET_TYPE_TEST)/g' \ -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \ -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \ -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \ -e 's/@''GNULIB_MBRTOC16''@/$(GL_GNULIB_MBRTOC16)/g' \ -e 's/@''GNULIB_MBRTOC32''@/$(GL_GNULIB_MBRTOC32)/g' \ -e 's/@''GNULIB_MBSNRTOC32S''@/$(GL_GNULIB_MBSNRTOC32S)/g' \ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GL_GNULIB_MBSNRTOWCS)/g' \ -e 's/@''GNULIB_MBSRTOC32S''@/$(GL_GNULIB_MBSRTOC32S)/g' \ -e 's/@''GNULIB_MBSRTOWCS''@/$(GL_GNULIB_MBSRTOWCS)/g' \ -e 's/@''GNULIB_MBSTOC32S''@/$(GL_GNULIB_MBSTOC32S)/g' \ -e 's/@''GNULIB_TOWCTRANS''@/$(GL_GNULIB_TOWCTRANS)/g' \ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GL_GNULIB_WCSNRTOMBS)/g' \ -e 's/@''GNULIB_WCSRTOMBS''@/$(GL_GNULIB_WCSRTOMBS)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GL_GNULIB_WCSWIDTH)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GL_GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_WCTRANS''@/$(GL_GNULIB_WCTRANS)/g' \ -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \ -e 's/@''GNULIB_WCWIDTH''@/$(GL_GNULIB_WCWIDTH)/g' \ -e 's|@''HAVE_C32RTOMB''@|$(HAVE_C32RTOMB)|g' \ -e 's|@''HAVE_MBRTOC16''@|$(HAVE_MBRTOC16)|g' \ -e 's|@''HAVE_MBRTOC32''@|$(HAVE_MBRTOC32)|g' \ -e 's|@''REPLACE_C32RTOMB''@|$(REPLACE_C32RTOMB)|g' \ -e 's|@''REPLACE_MBRTOC16''@|$(REPLACE_MBRTOC16)|g' \ -e 's|@''REPLACE_MBRTOC32''@|$(REPLACE_MBRTOC32)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/uchar.in.h > $@-t $(AM_V_at)mv $@-t $@ unicase.h: unicase.in.h $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''HAVE_UNISTRING_WOE32DLL_H''@|$(HAVE_UNISTRING_WOE32DLL_H)|g' \ -e 's/@''GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE''@/$(GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE''@/$(GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE)/g' \ $(srcdir)/unicase.in.h > $@-t $(AM_V_at)mv $@-t $@ unictype.h: unictype.in.h $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''HAVE_UNISTRING_WOE32DLL_H''@|$(HAVE_UNISTRING_WOE32DLL_H)|g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE)/g' \ < $(srcdir)/unictype.in.h > $@-t1 $(AM_V_at)sed \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE)/g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE)/g' \ < $@-t2 > $@-t3 $(AM_V_at)sed \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE''@/$(GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE)/g' \ < $@-t3 > $@-t4 $(AM_V_at)rm -f $@-t1 $@-t2 $@-t3 $(AM_V_at)mv $@-t4 $@ uninorm.h: uninorm.in.h $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''HAVE_UNISTRING_WOE32DLL_H''@|$(HAVE_UNISTRING_WOE32DLL_H)|g' \ -e 's/@''GNULIB_UNINORM_NFD_DLL_VARIABLE''@/$(GL_GNULIB_UNINORM_NFD_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNINORM_NFC_DLL_VARIABLE''@/$(GL_GNULIB_UNINORM_NFC_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNINORM_NFKD_DLL_VARIABLE''@/$(GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE)/g' \ -e 's/@''GNULIB_UNINORM_NFKC_DLL_VARIABLE''@/$(GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE)/g' \ $(srcdir)/uninorm.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create an empty placeholder for # <unistd.h> when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_ACCESS''@/$(GL_GNULIB_ACCESS)/g' \ -e 's/@''GNULIB_CHDIR''@/$(GL_GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GL_GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GL_GNULIB_COPY_FILE_RANGE)/g' \ -e 's/@''GNULIB_DUP''@/$(GL_GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GL_GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GL_GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GL_GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GL_GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_EXECL''@/$(GL_GNULIB_EXECL)/g' \ -e 's/@''GNULIB_EXECLE''@/$(GL_GNULIB_EXECLE)/g' \ -e 's/@''GNULIB_EXECLP''@/$(GL_GNULIB_EXECLP)/g' \ -e 's/@''GNULIB_EXECV''@/$(GL_GNULIB_EXECV)/g' \ -e 's/@''GNULIB_EXECVE''@/$(GL_GNULIB_EXECVE)/g' \ -e 's/@''GNULIB_EXECVP''@/$(GL_GNULIB_EXECVP)/g' \ -e 's/@''GNULIB_EXECVPE''@/$(GL_GNULIB_EXECVPE)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GL_GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GL_GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GL_GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GL_GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GL_GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GL_GNULIB_FTRUNCATE)/g' \ < $(srcdir)/unistd.in.h > $@-t1 $(AM_V_at)sed \ -e 's/@''GNULIB_GETCWD''@/$(GL_GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GL_GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GL_GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETENTROPY''@/$(GL_GNULIB_GETENTROPY)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GL_GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GL_GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GL_GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GL_GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETOPT_POSIX''@/$(GL_GNULIB_GETOPT_POSIX)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GL_GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETPASS''@/$(GL_GNULIB_GETPASS)/g' \ -e 's/@''GNULIB_GETPASS_GNU''@/$(GL_GNULIB_GETPASS_GNU)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GL_GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GL_GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GL_GNULIB_ISATTY)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GL_GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GL_GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GL_GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GL_GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GL_GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GL_GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GL_GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GL_GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GL_GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GL_GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GL_GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GL_GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SETHOSTNAME''@/$(GL_GNULIB_SETHOSTNAME)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GL_GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GL_GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GL_GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TRUNCATE''@/$(GL_GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GL_GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GL_GNULIB_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GL_GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GL_GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GL_GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GL_GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GL_GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GL_GNULIB_WRITE)/g' \ -e 's/@''GNULIB_MDA_ACCESS''@/$(GL_GNULIB_MDA_ACCESS)/g' \ -e 's/@''GNULIB_MDA_CHDIR''@/$(GL_GNULIB_MDA_CHDIR)/g' \ -e 's/@''GNULIB_MDA_CLOSE''@/$(GL_GNULIB_MDA_CLOSE)/g' \ -e 's/@''GNULIB_MDA_DUP''@/$(GL_GNULIB_MDA_DUP)/g' \ -e 's/@''GNULIB_MDA_DUP2''@/$(GL_GNULIB_MDA_DUP2)/g' \ -e 's/@''GNULIB_MDA_EXECL''@/$(GL_GNULIB_MDA_EXECL)/g' \ -e 's/@''GNULIB_MDA_EXECLE''@/$(GL_GNULIB_MDA_EXECLE)/g' \ -e 's/@''GNULIB_MDA_EXECLP''@/$(GL_GNULIB_MDA_EXECLP)/g' \ -e 's/@''GNULIB_MDA_EXECV''@/$(GL_GNULIB_MDA_EXECV)/g' \ -e 's/@''GNULIB_MDA_EXECVE''@/$(GL_GNULIB_MDA_EXECVE)/g' \ -e 's/@''GNULIB_MDA_EXECVP''@/$(GL_GNULIB_MDA_EXECVP)/g' \ -e 's/@''GNULIB_MDA_EXECVPE''@/$(GL_GNULIB_MDA_EXECVPE)/g' \ -e 's/@''GNULIB_MDA_GETCWD''@/$(GL_GNULIB_MDA_GETCWD)/g' \ -e 's/@''GNULIB_MDA_GETPID''@/$(GL_GNULIB_MDA_GETPID)/g' \ -e 's/@''GNULIB_MDA_ISATTY''@/$(GL_GNULIB_MDA_ISATTY)/g' \ -e 's/@''GNULIB_MDA_LSEEK''@/$(GL_GNULIB_MDA_LSEEK)/g' \ -e 's/@''GNULIB_MDA_READ''@/$(GL_GNULIB_MDA_READ)/g' \ -e 's/@''GNULIB_MDA_RMDIR''@/$(GL_GNULIB_MDA_RMDIR)/g' \ -e 's/@''GNULIB_MDA_SWAB''@/$(GL_GNULIB_MDA_SWAB)/g' \ -e 's/@''GNULIB_MDA_UNLINK''@/$(GL_GNULIB_MDA_UNLINK)/g' \ -e 's/@''GNULIB_MDA_WRITE''@/$(GL_GNULIB_MDA_WRITE)/g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_EXECVPE''@|$(HAVE_EXECVPE)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETENTROPY''@|$(HAVE_GETENTROPY)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_EXECVPE''@|$(HAVE_DECL_EXECVPE)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ < $@-t2 > $@-t3 $(AM_V_at)sed \ -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_COPY_FILE_RANGE''@|$(REPLACE_COPY_FILE_RANGE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_DUP3''@|$(REPLACE_DUP3)|g' \ -e 's|@''REPLACE_EXECL''@|$(REPLACE_EXECL)|g' \ -e 's|@''REPLACE_EXECLE''@|$(REPLACE_EXECLE)|g' \ -e 's|@''REPLACE_EXECLP''@|$(REPLACE_EXECLP)|g' \ -e 's|@''REPLACE_EXECV''@|$(REPLACE_EXECV)|g' \ -e 's|@''REPLACE_EXECVE''@|$(REPLACE_EXECVE)|g' \ -e 's|@''REPLACE_EXECVP''@|$(REPLACE_EXECVP)|g' \ -e 's|@''REPLACE_EXECVPE''@|$(REPLACE_EXECVPE)|g' \ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FDATASYNC''@|$(REPLACE_FDATASYNC)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETENTROPY''@|$(REPLACE_GETENTROPY)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ -e 's|@''REPLACE_GETPASS_FOR_GETPASS_GNU''@|$(REPLACE_GETPASS_FOR_GETPASS_GNU)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PIPE2''@|$(REPLACE_PIPE2)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SETHOSTNAME''@|$(REPLACE_SETHOSTNAME)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_SYS_RANDOM_H''@|$(UNISTD_H_HAVE_SYS_RANDOM_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t3 > $@-t4 $(AM_V_at)rm -f $@-t1 $@-t2 $@-t3 $(AM_V_at)mv $@-t4 $@ unitypes.h: unitypes.in.h $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/unitypes.in.h $(AM_V_at)mv $@-t $@ uniwidth.h: uniwidth.in.h $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/uniwidth.in.h $(AM_V_at)mv $@-t $@ # We need the following in order to create <wchar.h> when the system # version does not work standalone. wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GL_GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GL_GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_MBSINIT''@/$(GL_GNULIB_MBSINIT)/g' \ -e 's/@''GNULIB_MBSZERO''@/$(GL_GNULIB_MBSZERO)/g' \ -e 's/@''GNULIB_MBRTOWC''@/$(GL_GNULIB_MBRTOWC)/g' \ -e 's/@''GNULIB_MBRLEN''@/$(GL_GNULIB_MBRLEN)/g' \ -e 's/@''GNULIB_MBSRTOWCS''@/$(GL_GNULIB_MBSRTOWCS)/g' \ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GL_GNULIB_MBSNRTOWCS)/g' \ -e 's/@''GNULIB_WCRTOMB''@/$(GL_GNULIB_WCRTOMB)/g' \ -e 's/@''GNULIB_WCSRTOMBS''@/$(GL_GNULIB_WCSRTOMBS)/g' \ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GL_GNULIB_WCSNRTOMBS)/g' \ -e 's/@''GNULIB_WCWIDTH''@/$(GL_GNULIB_WCWIDTH)/g' \ -e 's/@''GNULIB_WMEMCHR''@/$(GL_GNULIB_WMEMCHR)/g' \ -e 's/@''GNULIB_WMEMCMP''@/$(GL_GNULIB_WMEMCMP)/g' \ -e 's/@''GNULIB_WMEMCPY''@/$(GL_GNULIB_WMEMCPY)/g' \ -e 's/@''GNULIB_WMEMMOVE''@/$(GL_GNULIB_WMEMMOVE)/g' \ -e 's/@''GNULIB_WMEMPCPY''@/$(GL_GNULIB_WMEMPCPY)/g' \ -e 's/@''GNULIB_WMEMSET''@/$(GL_GNULIB_WMEMSET)/g' \ -e 's/@''GNULIB_WCSLEN''@/$(GL_GNULIB_WCSLEN)/g' \ -e 's/@''GNULIB_WCSNLEN''@/$(GL_GNULIB_WCSNLEN)/g' \ -e 's/@''GNULIB_WCSCPY''@/$(GL_GNULIB_WCSCPY)/g' \ -e 's/@''GNULIB_WCPCPY''@/$(GL_GNULIB_WCPCPY)/g' \ -e 's/@''GNULIB_WCSNCPY''@/$(GL_GNULIB_WCSNCPY)/g' \ -e 's/@''GNULIB_WCPNCPY''@/$(GL_GNULIB_WCPNCPY)/g' \ -e 's/@''GNULIB_WCSCAT''@/$(GL_GNULIB_WCSCAT)/g' \ -e 's/@''GNULIB_WCSNCAT''@/$(GL_GNULIB_WCSNCAT)/g' \ -e 's/@''GNULIB_WCSCMP''@/$(GL_GNULIB_WCSCMP)/g' \ -e 's/@''GNULIB_WCSNCMP''@/$(GL_GNULIB_WCSNCMP)/g' \ -e 's/@''GNULIB_WCSCASECMP''@/$(GL_GNULIB_WCSCASECMP)/g' \ -e 's/@''GNULIB_WCSNCASECMP''@/$(GL_GNULIB_WCSNCASECMP)/g' \ -e 's/@''GNULIB_WCSCOLL''@/$(GL_GNULIB_WCSCOLL)/g' \ -e 's/@''GNULIB_WCSXFRM''@/$(GL_GNULIB_WCSXFRM)/g' \ -e 's/@''GNULIB_WCSDUP''@/$(GL_GNULIB_WCSDUP)/g' \ -e 's/@''GNULIB_WCSCHR''@/$(GL_GNULIB_WCSCHR)/g' \ -e 's/@''GNULIB_WCSRCHR''@/$(GL_GNULIB_WCSRCHR)/g' \ -e 's/@''GNULIB_WCSCSPN''@/$(GL_GNULIB_WCSCSPN)/g' \ -e 's/@''GNULIB_WCSSPN''@/$(GL_GNULIB_WCSSPN)/g' \ -e 's/@''GNULIB_WCSPBRK''@/$(GL_GNULIB_WCSPBRK)/g' \ -e 's/@''GNULIB_WCSSTR''@/$(GL_GNULIB_WCSSTR)/g' \ -e 's/@''GNULIB_WCSTOK''@/$(GL_GNULIB_WCSTOK)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GL_GNULIB_WCSWIDTH)/g' \ -e 's/@''GNULIB_WCSFTIME''@/$(GL_GNULIB_WCSFTIME)/g' \ -e 's/@''GNULIB_WGETCWD''@/$(GL_GNULIB_WGETCWD)/g' \ -e 's/@''GNULIB_MDA_WCSDUP''@/$(GL_GNULIB_MDA_WCSDUP)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ < $(srcdir)/wchar.in.h > $@-t1 $(AM_V_at)sed \ -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ -e 's|@''HAVE_WMEMPCPY''@|$(HAVE_WMEMPCPY)|g' \ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCSDUP''@|$(HAVE_DECL_WCSDUP)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ -e 's|@''REPLACE_WCSCMP''@|$(REPLACE_WCSCMP)|g' \ -e 's|@''REPLACE_WCSNCMP''@|$(REPLACE_WCSNCMP)|g' \ -e 's|@''REPLACE_WCSSTR''@|$(REPLACE_WCSSTR)|g' \ -e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|g' \ -e 's|@''REPLACE_WMEMCMP''@|$(REPLACE_WMEMCMP)|g' \ -e 's|@''REPLACE_WMEMPCPY''@|$(REPLACE_WMEMPCPY)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t2 > $@-t3 $(AM_V_at)rm -f $@-t1 $@-t2 $(AM_V_at)mv $@-t3 $@ # We need the following in order to create <wctype.h> when the system # doesn't have one that works with the given compiler. wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_ISWBLANK''@/$(GL_GNULIB_ISWBLANK)/g' \ -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \ -e 's/@''GNULIB_ISWPUNCT''@/$(GL_GNULIB_ISWPUNCT)/g' \ -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \ -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \ -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \ -e 's/@''GNULIB_WCTRANS''@/$(GL_GNULIB_WCTRANS)/g' \ -e 's/@''GNULIB_TOWCTRANS''@/$(GL_GNULIB_TOWCTRANS)/g' \ -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ -e 's/@''REPLACE_ISWDIGIT''@/$(REPLACE_ISWDIGIT)/g' \ -e 's/@''REPLACE_ISWPUNCT''@/$(REPLACE_ISWPUNCT)/g' \ -e 's/@''REPLACE_ISWXDIGIT''@/$(REPLACE_ISWXDIGIT)/g' \ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ -e 's/@''REPLACE_WCTRANS''@/$(REPLACE_WCTRANS)/g' \ -e 's/@''REPLACE_WCTYPE''@/$(REPLACE_WCTYPE)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/wctype.in.h > $@-t $(AM_V_at)mv $@-t $@ mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : distclean-local: distclean-gnulib-libobjs distclean-gnulib-libobjs: -rm -f @gl_LIBOBJDEPS@ maintainer-clean-local: distclean-gnulib-libobjs # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������gnuastro-0.22/bootstrapped/lib/alloca.c�������������������������������������������������������������0000644�0001750�0001750�00000011524�14557510504�013644� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* alloca.c -- allocate automatically reclaimed memory This file is in the public domain. */ /* (Mostly) portable implementation -- D A Gwyn This implementation of the PWB library alloca function, which is used to allocate space off the run-time stack so that it is automatically reclaimed upon procedure exit, was inspired by discussions with J. Q. Johnson of Cornell. J.Otto Tennant <jot@cray.com> contributed the Cray support. There are some preprocessor constants that can be defined when compiling for your specific system, for improved efficiency; however, the defaults should be okay. The general concept of this implementation is to keep track of all alloca-allocated blocks, and reclaim any that are found to be deeper in the stack than the current invocation. This heuristic does not reclaim storage as soon as it becomes invalid, but it will do so eventually. As a special case, alloca(0) reclaims storage without allocating any. It is a good idea to use alloca(0) in your main control loop, etc. to force garbage collection. */ #include <config.h> #include <alloca.h> #include <string.h> #include <stdlib.h> /* If compiling with GCC or clang, this file is not needed. */ #if !(defined __GNUC__ || defined __clang__) /* If someone has defined alloca as a macro, there must be some other way alloca is supposed to work. */ # ifndef alloca /* Define STACK_DIRECTION if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ # ifndef STACK_DIRECTION # define STACK_DIRECTION 0 /* Direction unknown. */ # endif # if STACK_DIRECTION != 0 # define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ # else /* STACK_DIRECTION == 0; need run-time code. */ static int stack_dir; /* 1 or -1 once known. */ # define STACK_DIR stack_dir static int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } # endif /* STACK_DIRECTION == 0 */ /* An "alloca header" is used to: (a) chain together all alloca'ed blocks; (b) keep track of stack depth. It is very important that sizeof(header) agree with malloc alignment chunk size. The following default should work okay. */ # ifndef ALIGN_SIZE # define ALIGN_SIZE sizeof(double) # endif typedef union hdr { char align[ALIGN_SIZE]; /* To force sizeof(header). */ struct { union hdr *next; /* For chaining headers. */ char *deep; /* For stack depth measure. */ } h; } header; static header *last_alloca_header = NULL; /* -> last alloca header. */ /* Return a pointer to at least SIZE bytes of storage, which will be automatically reclaimed upon exit from the procedure that called alloca. Originally, this space was supposed to be taken from the current stack frame of the caller, but that method cannot be made to work for some implementations of C, for example under Gould's UTX/32. */ void * alloca (size_t size) { auto char probe; /* Probes stack depth: */ register char *depth = &probe; # if STACK_DIRECTION == 0 if (STACK_DIR == 0) /* Unknown growth direction. */ STACK_DIR = find_stack_direction (NULL, (size & 1) + 20); # endif /* Reclaim garbage, defined as all alloca'd storage that was allocated from deeper in the stack than currently. */ { register header *hp; /* Traverses linked list. */ for (hp = last_alloca_header; hp != NULL;) if ((STACK_DIR > 0 && hp->h.deep > depth) || (STACK_DIR < 0 && hp->h.deep < depth)) { register header *np = hp->h.next; free (hp); /* Collect garbage. */ hp = np; /* -> next header. */ } else break; /* Rest are not deeper. */ last_alloca_header = hp; /* -> last valid storage. */ } if (size == 0) return NULL; /* No allocation required. */ /* Allocate combined header + user data storage. */ { /* Address of header. */ register header *new; size_t combined_size = sizeof (header) + size; if (combined_size < sizeof (header)) memory_full (); new = malloc (combined_size); if (! new) memory_full (); new->h.next = last_alloca_header; new->h.deep = depth; last_alloca_header = new; /* User storage begins just after header. */ return (void *) (new + 1); } } # endif /* no alloca */ #endif /* not GCC || clang */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/access.c�������������������������������������������������������������0000644�0001750�0001750�00000003532�14557510504�013652� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the access rights of a file. Copyright (C) 2019-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #if defined _WIN32 && !defined __CYGWIN__ # include <io.h> #endif int access (const char *file, int mode) #undef access { int ret; #if defined _WIN32 && !defined __CYGWIN__ if ((mode & X_OK) != 0) mode = (mode & ~X_OK) | R_OK; ret = _access (file, mode); #else ret = access (file, mode); #endif #if (defined _WIN32 && !defined __CYGWIN__) || ACCESS_TRAILING_SLASH_BUG # if defined _WIN32 && !defined __CYGWIN__ if (ret == 0 || errno == EINVAL) # else if (ret == 0) # endif { size_t file_len = strlen (file); if (file_len > 0 && file[file_len - 1] == '/') { struct stat st; if (stat (file, &st) == 0) { if (! S_ISDIR (st.st_mode)) { errno = ENOTDIR; return -1; } } else return (mode == F_OK && errno == EOVERFLOW ? 0 : -1); } } #endif return ret; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/argp.h���������������������������������������������������������������0000644�0001750�0001750�00000071760�14557510557�013367� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hierarchical argument parsing, layered over getopt. Copyright (C) 1995-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _ARGP_H #define _ARGP_H /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_FORMAT. */ #if !_LIBC && !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <stdio.h> #include <ctype.h> #include <getopt.h> #include <limits.h> #define __need_error_t #include <errno.h> #ifndef __THROW # define __THROW #endif #ifndef __NTH # define __NTH(fct) fct __THROW #endif /* GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". Other compilers use __restrict, __restrict__, and _Restrict, and 'configure' might #define 'restrict' to those words. */ #ifndef __restrict # if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3) # if 199901L <= __STDC_VERSION__ # define __restrict restrict # else # define __restrict # endif # endif #endif #ifndef __error_t_defined typedef int error_t; # define __error_t_defined #endif #ifdef __cplusplus extern "C" { #endif /* Glibc documentation: https://www.gnu.org/software/libc/manual/html_node/Argp.html */ /* A description of a particular option. A pointer to an array of these is passed in the OPTIONS field of an argp structure. Each option entry can correspond to one long option and/or one short option; more names for the same option can be added by following an entry in an option array with options having the OPTION_ALIAS flag set. */ struct argp_option { /* The long option name. For more than one name for the same option, you can use following options with the OPTION_ALIAS flag set. */ const char *name; /* What key is returned for this option. If > 0 and printable, then it's also accepted as a short option. */ int key; /* If non-NULL, this is the name of the argument associated with this option, which is required unless the OPTION_ARG_OPTIONAL flag is set. */ const char *arg; /* OPTION_ flags. */ int flags; /* The doc string for this option. If both NAME and KEY are 0, This string will be printed outdented from the normal option column, making it useful as a group header (it will be the first thing printed in its group); in this usage, it's conventional to end the string with a ':'. Write the initial value as N_("TEXT") if you want xgettext to collect it into a POT file. */ const char *doc; /* The group this option is in. In a long help message, options are sorted alphabetically within each group, and the groups presented in the order 0, 1, 2, ..., n, -m, ..., -2, -1. Every entry in an options array with if this field 0 will inherit the group number of the previous entry, or zero if it's the first one, unless its a group header (NAME and KEY both 0), in which case, the previous entry + 1 is the default. Automagic options such as --help are put into group -1. */ int group; /* Pointer to value. IMPORTANT: A Gnuastro addition. */ void *value; /* Type of value (see lib/gnuastro/data.h). IMPORTANT: A Gnuastro addition. */ int type; /* Acceptable range of value (see lib/options.h). IMPORTANT: A Gnuastro addition. */ int range; /* Is this option mandatory? (see lib/options.h). IMPORTANT: A Gnuastro addition. */ unsigned char mandatory; /* Is value already set or not? (see lib/options.h). IMPORTANT: A Gnuastro addition. */ unsigned char set; /* Function to process the given value. Arguments to the function: struct argp_option *option: This argp_option. char *arg: String given by the user. char *filename: Filename option was read from. size_t lineno: Line number of option in file. void *struct: Pointer to main program struct. IMPORTANT: A Gnuastro addition. */ void *(*func)(struct argp_option *, char *, char *, size_t, void *); }; /* The argument associated with this option is optional. */ #define OPTION_ARG_OPTIONAL 0x1 /* This option isn't displayed in any help messages. */ #define OPTION_HIDDEN 0x2 /* This option is an alias for the closest previous non-alias option. This means that it will be displayed in the same help entry, and will inherit fields other than NAME and KEY from the aliased option. */ #define OPTION_ALIAS 0x4 /* This option isn't actually an option (and so should be ignored by the actual option parser), but rather an arbitrary piece of documentation that should be displayed in much the same manner as the options. If this flag is set, then the option NAME field is displayed unmodified (e.g., no '--' prefix is added) at the left-margin (where a *short* option would normally be displayed), and the documentation string in the normal place. The NAME field will be translated using gettext, unless OPTION_NO_TRANS is set (see below). For purposes of sorting, any leading whitespace and punctuation is ignored, except that if the first non-whitespace character is not '-', this entry is displayed after all options (and OPTION_DOC entries with a leading '-') in the same group. */ #define OPTION_DOC 0x8 /* This option shouldn't be included in "long" usage messages (but is still included in help messages). This is mainly intended for options that are completely documented in an argp's ARGS_DOC field, in which case including the option in the generic usage list would be redundant. For instance, if ARGS_DOC is "FOO BAR\n-x BLAH", and the '-x' option's purpose is to distinguish these two cases, -x should probably be marked OPTION_NO_USAGE. */ #define OPTION_NO_USAGE 0x10 /* Valid only in conjunction with OPTION_DOC. This option disables translation of option name. */ #define OPTION_NO_TRANS 0x20 struct argp; /* fwd declare this type */ struct argp_state; /* " */ struct argp_child; /* " */ /* The type of a pointer to an argp parsing function. */ typedef error_t (*argp_parser_t) (int __key, char *__arg, struct argp_state *__state); /* What to return for unrecognized keys. For special ARGP_KEY_ keys, such returns will simply be ignored. For user keys, this error will be turned into EINVAL (if the call to argp_parse is such that errors are propagated back to the user instead of exiting); returning EINVAL itself would result in an immediate stop to parsing in *all* cases. */ #define ARGP_ERR_UNKNOWN E2BIG /* Hurd should never need E2BIG. XXX */ /* Special values for the KEY argument to an argument parsing function. ARGP_ERR_UNKNOWN should be returned if they aren't understood. The sequence of keys to a parsing function is either (where each uppercased word should be prefixed by 'ARGP_KEY_' and opt is a user key): INIT opt... NO_ARGS END SUCCESS -- No non-option arguments at all or INIT (opt | ARG)... END SUCCESS -- All non-option args parsed or INIT (opt | ARG)... SUCCESS -- Some non-option arg unrecognized The third case is where every parser returned ARGP_KEY_UNKNOWN for an argument, in which case parsing stops at that argument (returning the unparsed arguments to the caller of argp_parse if requested, or stopping with an error message if not). If an error occurs (either detected by argp, or because the parsing function returned an error value), then the parser is called with ARGP_KEY_ERROR, and no further calls are made. */ /* This is not an option at all, but rather a command line argument. If a parser receiving this key returns success, the fact is recorded, and the ARGP_KEY_NO_ARGS case won't be used. HOWEVER, if while processing the argument, a parser function decrements the NEXT field of the state it's passed, the option won't be considered processed; this is to allow you to actually modify the argument (perhaps into an option), and have it processed again. */ #define ARGP_KEY_ARG 0 /* There are remaining arguments not parsed by any parser, which may be found starting at (STATE->argv + STATE->next). If success is returned, but STATE->next left untouched, it's assumed that all arguments were consume, otherwise, the parser should adjust STATE->next to reflect any arguments consumed. */ #define ARGP_KEY_ARGS 0x1000006 /* There are no more command line arguments at all. */ #define ARGP_KEY_END 0x1000001 /* Because it's common to want to do some special processing if there aren't any non-option args, user parsers are called with this key if they didn't successfully process any non-option arguments. Called just before ARGP_KEY_END (where more general validity checks on previously parsed arguments can take place). */ #define ARGP_KEY_NO_ARGS 0x1000002 /* Passed in before any parsing is done. Afterwards, the values of each element of the CHILD_INPUT field, if any, in the state structure is copied to each child's state to be the initial value of the INPUT field. */ #define ARGP_KEY_INIT 0x1000003 /* Use after all other keys, including SUCCESS & END. */ #define ARGP_KEY_FINI 0x1000007 /* Passed in when parsing has successfully been completed (even if there are still arguments remaining). */ #define ARGP_KEY_SUCCESS 0x1000004 /* Passed in if an error occurs. */ #define ARGP_KEY_ERROR 0x1000005 /* An argp structure contains a set of options declarations, a function to deal with parsing one, documentation string, a possible vector of child argp's, and perhaps a function to filter help output. When actually parsing options, getopt is called with the union of all the argp structures chained together through their CHILD pointers, with conflicts being resolved in favor of the first occurrence in the chain. */ struct argp { /* An array of argp_option structures, terminated by an entry with both NAME and KEY having a value of 0. */ const struct argp_option *options; /* What to do with an option from this structure. KEY is the key associated with the option, and ARG is any associated argument (NULL if none was supplied). If KEY isn't understood, ARGP_ERR_UNKNOWN should be returned. If a non-zero, non-ARGP_ERR_UNKNOWN value is returned, then parsing is stopped immediately, and that value is returned from argp_parse(). For special (non-user-supplied) values of KEY, see the ARGP_KEY_ definitions below. */ argp_parser_t parser; /* If non-NULL, a string describing what other arguments are wanted by this program. It is only used by argp_usage to print the "Usage:" message. If it contains newlines, the strings separated by them are considered alternative usage patterns, and printed on separate lines (lines after the first are prefix by " or: " instead of "Usage:"). */ const char *args_doc; /* If non-NULL, a string containing extra text to be printed before and after the options in a long help message (separated by a vertical tab '\v' character). Write the initial value as N_("BEFORE-TEXT") "\v" N_("AFTER-TEXT") if you want xgettext to collect the two pieces of text into a POT file. */ const char *doc; /* A vector of argp_children structures, terminated by a member with a 0 argp field, pointing to child argps should be parsed with this one. Any conflicts are resolved in favor of this argp, or early argps in the CHILDREN list. This field is useful if you use libraries that supply their own argp structure, which you want to use in conjunction with your own. */ const struct argp_child *children; /* If non-zero, this should be a function to filter the output of help messages. KEY is either a key from an option, in which case TEXT is that option's help text, or a special key from the ARGP_KEY_HELP_ defines, below, describing which other help text TEXT is. The function should return either TEXT, if it should be used as-is, a replacement string, which should be malloced, and will be freed by argp, or NULL, meaning "print nothing". The value for TEXT is *after* any translation has been done, so if any of the replacement text also needs translation, that should be done by the filter function. INPUT is either the input supplied to argp_parse, or NULL, if argp_help was called directly. */ char *(*help_filter) (int __key, const char *__text, void *__input); /* If non-zero the strings used in the argp library are translated using the domain described by this string. Otherwise the currently installed default domain is used. */ const char *argp_domain; }; /* Possible KEY arguments to a help filter function. */ #define ARGP_KEY_HELP_PRE_DOC 0x2000001 /* Help text preceding options. */ #define ARGP_KEY_HELP_POST_DOC 0x2000002 /* Help text following options. */ #define ARGP_KEY_HELP_HEADER 0x2000003 /* Option header string. */ #define ARGP_KEY_HELP_EXTRA 0x2000004 /* After all other documentation; TEXT is NULL for this key. */ /* Explanatory note emitted when duplicate option arguments have been suppressed. */ #define ARGP_KEY_HELP_DUP_ARGS_NOTE 0x2000005 #define ARGP_KEY_HELP_ARGS_DOC 0x2000006 /* Argument doc string. */ /* When an argp has a non-zero CHILDREN field, it should point to a vector of argp_child structures, each of which describes a subsidiary argp. */ struct argp_child { /* The child parser. */ const struct argp *argp; /* Flags for this child. */ int flags; /* If non-zero, an optional header to be printed in help output before the child options. As a side-effect, a non-zero value forces the child options to be grouped together; to achieve this effect without actually printing a header string, use a value of "". */ const char *header; /* Where to group the child options relative to the other ("consolidated") options in the parent argp; the values are the same as the GROUP field in argp_option structs, but all child-groupings follow parent options at a particular group level. If both this field and HEADER are zero, then they aren't grouped at all, but rather merged with the parent options (merging the child's grouping levels with the parents). */ int group; }; /* Parsing state. This is provided to parsing functions called by argp, which may examine and, as noted, modify fields. */ struct argp_state { /* The top level ARGP being parsed. */ const struct argp *root_argp; /* The argument vector being parsed. May be modified. */ int argc; char **argv; /* The index in ARGV of the next arg that to be parsed. May be modified. */ int next; /* The flags supplied to argp_parse. May be modified. */ unsigned flags; /* While calling a parsing function with a key of ARGP_KEY_ARG, this is the number of the current arg, starting at zero, and incremented after each such call returns. At all other times, this is the number of such arguments that have been processed. */ unsigned arg_num; /* If non-zero, the index in ARGV of the first argument following a special '--' argument (which prevents anything following being interpreted as an option). Only set once argument parsing has proceeded past this point. */ int quoted; /* An arbitrary pointer passed in from the user. */ void *input; /* Values to pass to child parsers. This vector will be the same length as the number of children for the current parser. */ void **child_inputs; /* For the parser's use. Initialized to 0. */ void *hook; /* The name used when printing messages. This is initialized to ARGV[0], or PROGRAM_INVOCATION_NAME if that is unavailable. */ char *name; /* Streams used when argp prints something. */ FILE *err_stream; /* For errors; initialized to stderr. */ FILE *out_stream; /* For information; initialized to stdout. */ void *pstate; /* Private, for use by argp. */ }; /* Flags for argp_parse (note that the defaults are those that are convenient for program command line parsing): */ /* Don't ignore the first element of ARGV. Normally (and always unless ARGP_NO_ERRS is set) the first element of the argument vector is skipped for option parsing purposes, as it corresponds to the program name in a command line. */ #define ARGP_PARSE_ARGV0 0x01 /* Don't print error messages for unknown options to stderr; unless this flag is set, ARGP_PARSE_ARGV0 is ignored, as ARGV[0] is used as the program name in the error messages. This flag implies ARGP_NO_EXIT (on the assumption that silent exiting upon errors is bad behaviour). */ #define ARGP_NO_ERRS 0x02 /* Don't parse any non-option args. Normally non-option args are parsed by calling the parse functions with a key of ARGP_KEY_ARG, and the actual arg as the value. Since it's impossible to know which parse function wants to handle it, each one is called in turn, until one returns 0 or an error other than ARGP_ERR_UNKNOWN; if an argument is handled by no one, the argp_parse returns prematurely (but with a return value of 0). If all args have been parsed without error, all parsing functions are called one last time with a key of ARGP_KEY_END. This flag needn't normally be set, as the normal behavior is to stop parsing as soon as some argument can't be handled. */ #define ARGP_NO_ARGS 0x04 /* Parse options and arguments in the same order they occur on the command line -- normally they're rearranged so that all options come first. */ #define ARGP_IN_ORDER 0x08 /* Don't provide the standard long option --help, which causes usage and option help information to be output to stdout, and exit (0) called. */ #define ARGP_NO_HELP 0x10 /* Don't exit on errors (they may still result in error messages). */ #define ARGP_NO_EXIT 0x20 /* Use the gnu getopt "long-only" rules for parsing arguments. */ #define ARGP_LONG_ONLY 0x40 /* Turns off any message-printing/exiting options. */ #define ARGP_SILENT (ARGP_NO_EXIT | ARGP_NO_ERRS | ARGP_NO_HELP) /* Parse the options strings in ARGC & ARGV according to the options in ARGP. FLAGS is one of the ARGP_ flags above. If ARG_INDEX is non-NULL, the index in ARGV of the first unparsed option is returned in it. If an unknown option is present, ARGP_ERR_UNKNOWN is returned; if some parser routine returned a non-zero value, it is returned; otherwise 0 is returned. This function may also call exit unless the ARGP_NO_HELP flag is set. INPUT is a pointer to a value to be passed to the parser. */ extern error_t argp_parse (const struct argp *__restrict __argp, int /*argc*/, char **__restrict /*argv*/, unsigned __flags, int *__restrict __arg_index, void *__restrict __input); extern error_t __argp_parse (const struct argp *__restrict __argp, int /*argc*/, char **__restrict /*argv*/, unsigned __flags, int *__restrict __arg_index, void *__restrict __input); /* Global variables. */ /* GNULIB makes sure both program_invocation_name and program_invocation_short_name are available */ #ifdef GNULIB_PROGRAM_INVOCATION_NAME extern char *program_invocation_name; # undef HAVE_DECL_PROGRAM_INVOCATION_NAME # define HAVE_DECL_PROGRAM_INVOCATION_NAME 1 #endif #ifdef GNULIB_PROGRAM_INVOCATION_SHORT_NAME extern char *program_invocation_short_name; # undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME # define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME 1 #endif /* If defined or set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which will print this string followed by a newline and exit (unless the ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ extern const char *argp_program_version; /* If defined or set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which calls this function with a stream to print the version to and a pointer to the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is used). This variable takes precedent over ARGP_PROGRAM_VERSION. */ extern void (*argp_program_version_hook) (FILE *__restrict __stream, struct argp_state *__restrict __state); /* If defined or set by the user program, it should point to string that is the bug-reporting address for the program. It will be printed by argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various standard help messages), embedded in a sentence that says something like "Report bugs to ADDR." */ extern const char *argp_program_bug_address; /* The exit status that argp will use when exiting due to a parsing error. If not defined or set by the user program, this defaults to EX_USAGE from <sysexits.h>. */ extern error_t argp_err_exit_status; /* Flags for argp_help. */ #define ARGP_HELP_USAGE 0x01 /* a Usage: message. */ #define ARGP_HELP_SHORT_USAGE 0x02 /* " but don't actually print options. */ #define ARGP_HELP_SEE 0x04 /* a "Try ... for more help" message. */ #define ARGP_HELP_LONG 0x08 /* a long help message. */ #define ARGP_HELP_PRE_DOC 0x10 /* doc string preceding long help. */ #define ARGP_HELP_POST_DOC 0x20 /* doc string following long help. */ #define ARGP_HELP_DOC (ARGP_HELP_PRE_DOC | ARGP_HELP_POST_DOC) #define ARGP_HELP_BUG_ADDR 0x40 /* bug report address */ #define ARGP_HELP_LONG_ONLY 0x80 /* modify output appropriately to reflect ARGP_LONG_ONLY mode. */ /* These ARGP_HELP flags are only understood by argp_state_help. */ #define ARGP_HELP_EXIT_ERR 0x100 /* Call exit(1) instead of returning. */ #define ARGP_HELP_EXIT_OK 0x200 /* Call exit(0) instead of returning. */ /* The standard thing to do after a program command line parsing error, if an error message has already been printed. */ #define ARGP_HELP_STD_ERR \ (ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) /* The standard thing to do after a program command line parsing error, if no more specific error message has been printed. */ #define ARGP_HELP_STD_USAGE \ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_SEE | ARGP_HELP_EXIT_ERR) /* The standard thing to do in response to a --help option. */ #define ARGP_HELP_STD_HELP \ (ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG | ARGP_HELP_EXIT_OK \ | ARGP_HELP_DOC | ARGP_HELP_BUG_ADDR) /* Output a usage message for ARGP to STREAM. FLAGS are from the set ARGP_HELP_*. */ extern void argp_help (const struct argp *__restrict __argp, FILE *__restrict __stream, unsigned __flags, char *__restrict __name); extern void __argp_help (const struct argp *__restrict __argp, FILE *__restrict __stream, unsigned __flags, char *__name); /* The following routines are intended to be called from within an argp parsing routine (thus taking an argp_state structure as the first argument). They may or may not print an error message and exit, depending on the flags in STATE -- in any case, the caller should be prepared for them *not* to exit, and should return an appropriate error after calling them. [argp_usage & argp_error should probably be called argp_state_..., but they're used often enough that they should be short] */ /* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are from the set ARGP_HELP_*. */ extern void argp_state_help (const struct argp_state *__restrict __state, FILE *__restrict __stream, unsigned int __flags); extern void __argp_state_help (const struct argp_state *__restrict __state, FILE *__restrict __stream, unsigned int __flags); #if _LIBC /* Possibly output the standard usage message for ARGP to stderr and exit. */ extern void argp_usage (const struct argp_state *__state); extern void __argp_usage (const struct argp_state *__state); #endif /* If appropriate, print the printf string FMT and following args, preceded by the program name and ':', to stderr, and followed by a "Try ... --help" message, then exit (1). */ extern void argp_error (const struct argp_state *__restrict __state, const char *__restrict __fmt, ...) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 3)) #endif ; extern void __argp_error (const struct argp_state *__restrict __state, const char *__restrict __fmt, ...) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 2, 3)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 2, 3)) #endif ; /* Similar to the standard gnu error-reporting function error(), but will respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print to STATE->err_stream. This is useful for argument parsing code that is shared between program startup (when exiting is desired) and runtime option parsing (when typically an error code is returned instead). The difference between this function and argp_error is that the latter is for *parsing errors*, and the former is for other problems that occur during parsing but don't reflect a (syntactic) problem with the input. */ extern void argp_failure (const struct argp_state *__restrict __state, int __status, int __errnum, const char *__restrict __fmt, ...) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 4, 5)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 4, 5)) #endif ; extern void __argp_failure (const struct argp_state *__restrict __state, int __status, int __errnum, const char *__restrict __fmt, ...) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 4, 5)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 4, 5)) #endif ; #if _LIBC /* Returns true if the option OPT is a valid short option. */ extern int _option_is_short (const struct argp_option *__opt) __THROW; extern int __option_is_short (const struct argp_option *__opt) __THROW; /* Returns true if the option OPT is in fact the last (unused) entry in an options array. */ extern int _option_is_end (const struct argp_option *__opt) __THROW; extern int __option_is_end (const struct argp_option *__opt) __THROW; #endif /* Return the input field for ARGP in the parser corresponding to STATE; used by the help routines. */ extern void *_argp_input (const struct argp *__restrict __argp, const struct argp_state *__restrict __state) __THROW; extern void *__argp_input (const struct argp *__restrict __argp, const struct argp_state *__restrict __state) __THROW; #if !_LIBC || defined __USE_EXTERN_INLINES # if !_LIBC # define __argp_usage argp_usage # define __argp_state_help argp_state_help # define __option_is_short _option_is_short # define __option_is_end _option_is_end _GL_INLINE_HEADER_BEGIN # ifndef ARGP_EI # define ARGP_EI _GL_INLINE # endif # endif # ifndef ARGP_EI # define ARGP_EI __extern_inline # endif ARGP_EI void __argp_usage (const struct argp_state *__state) { __argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE); } ARGP_EI int __NTH (__option_is_short (const struct argp_option *__opt)) { if (__opt->flags & OPTION_DOC) return 0; else { int __key = __opt->key; return __key > 0 && __key <= UCHAR_MAX && isprint (__key); } } ARGP_EI int __NTH (__option_is_end (const struct argp_option *__opt)) { return !__opt->key && !__opt->name && !__opt->doc && !__opt->group; } # if !_LIBC # undef __argp_usage # undef __argp_state_help # undef __option_is_short # undef __option_is_end _GL_INLINE_HEADER_END # endif #endif /* Use extern inlines. */ #ifdef __cplusplus } #endif #endif /* argp.h */ ����������������gnuastro-0.22/bootstrapped/lib/argp-ba.c������������������������������������������������������������0000644�0001750�0001750�00000003076�14557510504�013725� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Default definition for ARGP_PROGRAM_BUG_ADDRESS. Copyright (C) 1996-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* If set by the user program, it should point to string that is the bug-reporting address for the program. It will be printed by argp_help if the ARGP_HELP_BUG_ADDR flag is set (as it is by various standard help messages), embedded in a sentence that says something like "Report bugs to ADDR." */ const char *argp_program_bug_address /* This variable should be zero-initialized. On most systems, putting it into BSS is sufficient. Not so on Mac OS X 10.3 and 10.4, see <https://lists.gnu.org/r/bug-gnulib/2009-01/msg00329.html> <https://lists.gnu.org/r/bug-gnulib/2009-08/msg00096.html>. */ #if defined __ELF__ /* On ELF systems, variables in BSS behave well. */ #else = (const char *) 0 #endif ; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/argp-eexst.c���������������������������������������������������������0000644�0001750�0001750�00000002226�14557510504�014467� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Default definition for ARGP_ERR_EXIT_STATUS Copyright (C) 1997, 2009-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <sysexits.h> #include "argp.h" /* The exit status that argp will use when exiting due to a parsing error. If not defined or set by the user program, this defaults to EX_USAGE from <sysexits.h>. */ error_t argp_err_exit_status = EX_USAGE; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/argp-fmtstream.c�����������������������������������������������������0000644�0001750�0001750�00000031706�14557510504�015346� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word-wrapping and line-truncating streams Copyright (C) 1997-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* This package emulates glibc 'line_wrap_stream' semantics for systems that don't have that. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stdlib.h> #include <string.h> #include <errno.h> #include <stdarg.h> #include <ctype.h> #include "argp-fmtstream.h" #include "argp-namefrob.h" #ifndef ARGP_FMTSTREAM_USE_LINEWRAP #ifndef isblank #define isblank(ch) ((ch)==' ' || (ch)=='\t') #endif #ifdef _LIBC # include <wchar.h> # include <libio/libioP.h> # define __vsnprintf(s, l, f, a) _IO_vsnprintf (s, l, f, a) #endif #define INIT_BUF_SIZE 200 #define PRINTF_SIZE_GUESS 150 /* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines written on it with LMARGIN spaces and limits them to RMARGIN columns total. If WMARGIN >= 0, words that extend past RMARGIN are wrapped by replacing the whitespace before them with a newline and WMARGIN spaces. Otherwise, chars beyond RMARGIN are simply dropped until a newline. Returns NULL if there was an error. */ argp_fmtstream_t __argp_make_fmtstream (FILE *stream, size_t lmargin, size_t rmargin, ssize_t wmargin) { argp_fmtstream_t fs; fs = (struct argp_fmtstream *) malloc (sizeof (struct argp_fmtstream)); if (fs != NULL) { fs->stream = stream; fs->lmargin = lmargin; fs->rmargin = rmargin; fs->wmargin = wmargin; fs->point_col = 0; fs->point_offs = 0; fs->buf = (char *) malloc (INIT_BUF_SIZE); if (! fs->buf) { free (fs); fs = NULL; } else { fs->p = fs->buf; fs->end = fs->buf + INIT_BUF_SIZE; } } return fs; } #if 0 /* Not exported. */ #ifdef weak_alias weak_alias (__argp_make_fmtstream, argp_make_fmtstream) #endif #endif /* Flush FS to its stream, and free it (but don't close the stream). */ void __argp_fmtstream_free (argp_fmtstream_t fs) { __argp_fmtstream_update (fs); if (fs->p > fs->buf) { #ifdef _LIBC __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf); #else fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream); #endif } free (fs->buf); free (fs); } #if 0 /* Not exported. */ #ifdef weak_alias weak_alias (__argp_fmtstream_free, argp_fmtstream_free) #endif #endif /* Process FS's buffer so that line wrapping is done from POINT_OFFS to the end of its buffer. This code is mostly from glibc stdio/linewrap.c. */ void __argp_fmtstream_update (argp_fmtstream_t fs) { char *buf, *nl; size_t len; /* Scan the buffer for newlines. */ buf = fs->buf + fs->point_offs; while (buf < fs->p) { size_t r; if (fs->point_col == 0 && fs->lmargin != 0) { /* We are starting a new line. Print spaces to the left margin. */ const size_t pad = fs->lmargin; if (fs->p + pad < fs->end) { /* We can fit in them in the buffer by moving the buffer text up and filling in the beginning. */ memmove (buf + pad, buf, fs->p - buf); fs->p += pad; /* Compensate for bigger buffer. */ memset (buf, ' ', pad); /* Fill in the spaces. */ buf += pad; /* Don't bother searching them. */ } else { /* No buffer space for spaces. Must flush. */ size_t i; for (i = 0; i < pad; i++) { #ifdef _LIBC if (_IO_fwide (fs->stream, 0) > 0) putwc_unlocked (L' ', fs->stream); else #endif putc_unlocked (' ', fs->stream); } } fs->point_col = pad; } len = fs->p - buf; nl = memchr (buf, '\n', len); if (fs->point_col < 0) fs->point_col = 0; if (!nl) { /* The buffer ends in a partial line. */ if (fs->point_col + len < fs->rmargin) { /* The remaining buffer text is a partial line and fits within the maximum line width. Advance point for the characters to be written and stop scanning. */ fs->point_col += len; break; } else /* Set the end-of-line pointer for the code below to the end of the buffer. */ nl = fs->p; } else if (fs->point_col + (nl - buf) < (ssize_t) fs->rmargin) { /* The buffer contains a full line that fits within the maximum line width. Reset point and scan the next line. */ fs->point_col = 0; buf = nl + 1; continue; } /* This line is too long. */ r = fs->rmargin - 1; if (fs->wmargin < 0) { /* Truncate the line by overwriting the excess with the newline and anything after it in the buffer. */ if (nl < fs->p) { memmove (buf + (r - fs->point_col), nl, fs->p - nl); fs->p -= buf + (r - fs->point_col) - nl; /* Reset point for the next line and start scanning it. */ fs->point_col = 0; buf += r + 1; /* Skip full line plus \n. */ } else { /* The buffer ends with a partial line that is beyond the maximum line width. Advance point for the characters written, and discard those past the max from the buffer. */ fs->point_col += len; fs->p -= fs->point_col - r; break; } } else { /* Do word wrap. Go to the column just past the maximum line width and scan back for the beginning of the word there. Then insert a line break. */ char *p, *nextline; int i; p = buf + (r + 1 - fs->point_col); while (p >= buf && !isblank ((unsigned char) *p)) --p; nextline = p + 1; /* This will begin the next line. */ if (nextline > buf) { /* Swallow separating blanks. */ if (p >= buf) do --p; while (p >= buf && isblank ((unsigned char) *p)); nl = p + 1; /* The newline will replace the first blank. */ } else { /* A single word that is greater than the maximum line width. Oh well. Put it on an overlong line by itself. */ p = buf + (r + 1 - fs->point_col); /* Find the end of the long word. */ if (p < nl) do ++p; while (p < nl && !isblank ((unsigned char) *p)); if (p == nl) { /* It already ends a line. No fussing required. */ fs->point_col = 0; buf = nl + 1; continue; } /* We will move the newline to replace the first blank. */ nl = p; /* Swallow separating blanks. */ do ++p; while (isblank ((unsigned char) *p)); /* The next line will start here. */ nextline = p; } /* Note: There are a bunch of tests below for NEXTLINE == BUF + LEN + 1; this case is where NL happens to fall at the end of the buffer, and NEXTLINE is in fact empty (and so we need not be careful to maintain its contents). */ if ((nextline == buf + len + 1 ? fs->end - nl < fs->wmargin + 1 : nextline - (nl + 1) < fs->wmargin) && fs->p > nextline) { /* The margin needs more blanks than we removed. */ if (fs->end - fs->p > fs->wmargin + 1) /* Make some space for them. */ { size_t mv = fs->p - nextline; memmove (nl + 1 + fs->wmargin, nextline, mv); nextline = nl + 1 + fs->wmargin; len = nextline + mv - buf; *nl++ = '\n'; } else /* Output the first line so we can use the space. */ { #ifdef _LIBC __fxprintf (fs->stream, "%.*s\n", (int) (nl - fs->buf), fs->buf); #else if (nl > fs->buf) fwrite_unlocked (fs->buf, 1, nl - fs->buf, fs->stream); putc_unlocked ('\n', fs->stream); #endif len += buf - fs->buf; nl = buf = fs->buf; } } else /* We can fit the newline and blanks in before the next word. */ *nl++ = '\n'; if (nextline - nl >= fs->wmargin || (nextline == buf + len + 1 && fs->end - nextline >= fs->wmargin)) /* Add blanks up to the wrap margin column. */ for (i = 0; i < fs->wmargin; ++i) *nl++ = ' '; else for (i = 0; i < fs->wmargin; ++i) #ifdef _LIBC if (_IO_fwide (fs->stream, 0) > 0) putwc_unlocked (L' ', fs->stream); else #endif putc_unlocked (' ', fs->stream); /* Copy the tail of the original buffer into the current buffer position. */ if (nl < nextline) memmove (nl, nextline, buf + len - nextline); len -= nextline - buf; /* Continue the scan on the remaining lines in the buffer. */ buf = nl; /* Restore bufp to include all the remaining text. */ fs->p = nl + len; /* Reset the counter of what has been output this line. If wmargin is 0, we want to avoid the lmargin getting added, so we set point_col to a magic value of -1 in that case. */ fs->point_col = fs->wmargin ? fs->wmargin : -1; } } /* Remember that we've scanned as far as the end of the buffer. */ fs->point_offs = fs->p - fs->buf; } /* Ensure that FS has space for AMOUNT more bytes in its buffer, either by growing the buffer, or by flushing it. True is returned iff we succeed. */ int __argp_fmtstream_ensure (struct argp_fmtstream *fs, size_t amount) { if ((size_t) (fs->end - fs->p) < amount) { ssize_t wrote; /* Flush FS's buffer. */ __argp_fmtstream_update (fs); #ifdef _LIBC __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf); wrote = fs->p - fs->buf; #else wrote = fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream); #endif if (wrote == fs->p - fs->buf) { fs->p = fs->buf; fs->point_offs = 0; } else { fs->p -= wrote; fs->point_offs -= wrote; memmove (fs->buf, fs->buf + wrote, fs->p - fs->buf); return 0; } if ((size_t) (fs->end - fs->buf) < amount) /* Gotta grow the buffer. */ { size_t old_size = fs->end - fs->buf; size_t new_size = old_size + amount; char *new_buf; if (new_size < old_size || ! (new_buf = realloc (fs->buf, new_size))) { __set_errno (ENOMEM); return 0; } fs->buf = new_buf; fs->end = new_buf + new_size; fs->p = fs->buf; } } return 1; } ssize_t __argp_fmtstream_printf (struct argp_fmtstream *fs, const char *fmt, ...) { int out; size_t avail; size_t size_guess = PRINTF_SIZE_GUESS; /* How much space to reserve. */ do { va_list args; if (! __argp_fmtstream_ensure (fs, size_guess)) return -1; va_start (args, fmt); avail = fs->end - fs->p; out = __vsnprintf (fs->p, avail, fmt, args); va_end (args); if ((size_t) out >= avail) size_guess = out + 1; } while ((size_t) out >= avail); fs->p += out; return out; } #if 0 /* Not exported. */ #ifdef weak_alias weak_alias (__argp_fmtstream_printf, argp_fmtstream_printf) #endif #endif #endif /* !ARGP_FMTSTREAM_USE_LINEWRAP */ ����������������������������������������������������������gnuastro-0.22/bootstrapped/lib/argp-fmtstream.h�����������������������������������������������������0000644�0001750�0001750�00000026045�14557510504�015353� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Word-wrapping and line-truncating streams. Copyright (C) 1997-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* This package emulates glibc 'line_wrap_stream' semantics for systems that don't have that. If the system does have it, it is just a wrapper for that. This header file is only used internally while compiling argp, and shouldn't be installed. */ #ifndef _ARGP_FMTSTREAM_H #define _ARGP_FMTSTREAM_H /* This file uses _GL_INLINE_HEADER_BEGIN, __GL_INLINE, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_FORMAT. */ #if !_LIBC && !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <stdio.h> #include <string.h> #include <unistd.h> #if defined (__GNU_LIBRARY__) && defined (HAVE_LINEWRAP_H) /* line_wrap_stream is available, so use that. */ #define ARGP_FMTSTREAM_USE_LINEWRAP #endif #ifdef ARGP_FMTSTREAM_USE_LINEWRAP /* Just be a simple wrapper for line_wrap_stream; the semantics are *slightly* different, as line_wrap_stream doesn't actually make a new object, it just modifies the given stream (reversibly) to do line-wrapping. Since we control who uses this code, it doesn't matter. */ #include <linewrap.h> typedef FILE *argp_fmtstream_t; #define argp_make_fmtstream line_wrap_stream #define __argp_make_fmtstream line_wrap_stream #define argp_fmtstream_free line_unwrap_stream #define __argp_fmtstream_free line_unwrap_stream #define __argp_fmtstream_putc(fs,ch) putc(ch,fs) #define argp_fmtstream_putc(fs,ch) putc(ch,fs) #define __argp_fmtstream_puts(fs,str) fputs(str,fs) #define argp_fmtstream_puts(fs,str) fputs(str,fs) #define __argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs) #define argp_fmtstream_write(fs,str,len) fwrite(str,1,len,fs) #define __argp_fmtstream_printf fprintf #define argp_fmtstream_printf fprintf #define __argp_fmtstream_lmargin line_wrap_lmargin #define argp_fmtstream_lmargin line_wrap_lmargin #define __argp_fmtstream_set_lmargin line_wrap_set_lmargin #define argp_fmtstream_set_lmargin line_wrap_set_lmargin #define __argp_fmtstream_rmargin line_wrap_rmargin #define argp_fmtstream_rmargin line_wrap_rmargin #define __argp_fmtstream_set_rmargin line_wrap_set_rmargin #define argp_fmtstream_set_rmargin line_wrap_set_rmargin #define __argp_fmtstream_wmargin line_wrap_wmargin #define argp_fmtstream_wmargin line_wrap_wmargin #define __argp_fmtstream_set_wmargin line_wrap_set_wmargin #define argp_fmtstream_set_wmargin line_wrap_set_wmargin #define __argp_fmtstream_point line_wrap_point #define argp_fmtstream_point line_wrap_point #else /* !ARGP_FMTSTREAM_USE_LINEWRAP */ /* Guess we have to define our own version. */ struct argp_fmtstream { FILE *stream; /* The stream we're outputting to. */ size_t lmargin, rmargin; /* Left and right margins. */ ssize_t wmargin; /* Margin to wrap to, or -1 to truncate. */ /* Point in buffer to which we've processed for wrapping, but not output. */ size_t point_offs; /* Output column at POINT_OFFS, or -1 meaning 0 but don't add lmargin. */ ssize_t point_col; char *buf; /* Output buffer. */ char *p; /* Current end of text in BUF. */ char *end; /* Absolute end of BUF. */ }; typedef struct argp_fmtstream *argp_fmtstream_t; /* Flush __FS to its stream, and free it (but don't close the stream). */ extern void __argp_fmtstream_free (argp_fmtstream_t __fs); extern void argp_fmtstream_free (argp_fmtstream_t __fs); /* Return an argp_fmtstream that outputs to STREAM, and which prefixes lines written on it with LMARGIN spaces and limits them to RMARGIN columns total. If WMARGIN >= 0, words that extend past RMARGIN are wrapped by replacing the whitespace before them with a newline and WMARGIN spaces. Otherwise, chars beyond RMARGIN are simply dropped until a newline. Returns NULL if there was an error. */ extern argp_fmtstream_t __argp_make_fmtstream (FILE *__stream, size_t __lmargin, size_t __rmargin, ssize_t __wmargin) _GL_ATTRIBUTE_DEALLOC (__argp_fmtstream_free, 1); extern argp_fmtstream_t argp_make_fmtstream (FILE *__stream, size_t __lmargin, size_t __rmargin, ssize_t __wmargin) _GL_ATTRIBUTE_DEALLOC (argp_fmtstream_free, 1); extern ssize_t __argp_fmtstream_printf (argp_fmtstream_t __fs, const char *__fmt, ...) _GL_ATTRIBUTE_FORMAT ((printf, 2, 3)); extern ssize_t argp_fmtstream_printf (argp_fmtstream_t __fs, const char *__fmt, ...) _GL_ATTRIBUTE_FORMAT ((printf, 2, 3)); #if _LIBC extern int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); extern int argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch); extern int __argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str); extern int argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str); extern size_t __argp_fmtstream_write (argp_fmtstream_t __fs, const char *__str, size_t __len); extern size_t argp_fmtstream_write (argp_fmtstream_t __fs, const char *__str, size_t __len); #endif /* Access macros for various bits of state. */ #define argp_fmtstream_lmargin(__fs) ((__fs)->lmargin) #define argp_fmtstream_rmargin(__fs) ((__fs)->rmargin) #define argp_fmtstream_wmargin(__fs) ((__fs)->wmargin) #define __argp_fmtstream_lmargin argp_fmtstream_lmargin #define __argp_fmtstream_rmargin argp_fmtstream_rmargin #define __argp_fmtstream_wmargin argp_fmtstream_wmargin #if _LIBC /* Set __FS's left margin to LMARGIN and return the old value. */ extern size_t argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin); extern size_t __argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin); /* Set __FS's right margin to __RMARGIN and return the old value. */ extern size_t argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin); extern size_t __argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin); /* Set __FS's wrap margin to __WMARGIN and return the old value. */ extern size_t argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin); extern size_t __argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin); /* Return the column number of the current output point in __FS. */ extern size_t argp_fmtstream_point (argp_fmtstream_t __fs); extern size_t __argp_fmtstream_point (argp_fmtstream_t __fs); #endif /* Internal routines. */ extern void _argp_fmtstream_update (argp_fmtstream_t __fs); extern void __argp_fmtstream_update (argp_fmtstream_t __fs); extern int _argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount); extern int __argp_fmtstream_ensure (argp_fmtstream_t __fs, size_t __amount); #if !_LIBC || defined __OPTIMIZE__ /* Inline versions of above routines. */ #if !_LIBC #define __argp_fmtstream_putc argp_fmtstream_putc #define __argp_fmtstream_puts argp_fmtstream_puts #define __argp_fmtstream_write argp_fmtstream_write #define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin #define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin #define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin #define __argp_fmtstream_point argp_fmtstream_point #define __argp_fmtstream_update _argp_fmtstream_update #define __argp_fmtstream_ensure _argp_fmtstream_ensure _GL_INLINE_HEADER_BEGIN #ifndef ARGP_FS_EI # define ARGP_FS_EI _GL_INLINE #endif #endif #ifndef ARGP_FS_EI #define ARGP_FS_EI extern inline #endif ARGP_FS_EI size_t __argp_fmtstream_write (argp_fmtstream_t __fs, const char *__str, size_t __len) { if (__fs->p + __len <= __fs->end || __argp_fmtstream_ensure (__fs, __len)) { memcpy (__fs->p, __str, __len); __fs->p += __len; return __len; } else return 0; } ARGP_FS_EI int __argp_fmtstream_puts (argp_fmtstream_t __fs, const char *__str) { size_t __len = strlen (__str); if (__len) { size_t __wrote = __argp_fmtstream_write (__fs, __str, __len); return __wrote == __len ? 0 : -1; } else return 0; } ARGP_FS_EI int __argp_fmtstream_putc (argp_fmtstream_t __fs, int __ch) { if (__fs->p < __fs->end || __argp_fmtstream_ensure (__fs, 1)) return *__fs->p++ = __ch; else return EOF; } /* Set __FS's left margin to __LMARGIN and return the old value. */ ARGP_FS_EI size_t __argp_fmtstream_set_lmargin (argp_fmtstream_t __fs, size_t __lmargin) { size_t __old; if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) __argp_fmtstream_update (__fs); __old = __fs->lmargin; __fs->lmargin = __lmargin; return __old; } /* Set __FS's right margin to __RMARGIN and return the old value. */ ARGP_FS_EI size_t __argp_fmtstream_set_rmargin (argp_fmtstream_t __fs, size_t __rmargin) { size_t __old; if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) __argp_fmtstream_update (__fs); __old = __fs->rmargin; __fs->rmargin = __rmargin; return __old; } /* Set FS's wrap margin to __WMARGIN and return the old value. */ ARGP_FS_EI size_t __argp_fmtstream_set_wmargin (argp_fmtstream_t __fs, size_t __wmargin) { size_t __old; if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) __argp_fmtstream_update (__fs); __old = __fs->wmargin; __fs->wmargin = __wmargin; return __old; } /* Return the column number of the current output point in __FS. */ ARGP_FS_EI size_t __argp_fmtstream_point (argp_fmtstream_t __fs) { if ((size_t) (__fs->p - __fs->buf) > __fs->point_offs) __argp_fmtstream_update (__fs); return __fs->point_col >= 0 ? __fs->point_col : 0; } #if !_LIBC #undef __argp_fmtstream_putc #undef __argp_fmtstream_puts #undef __argp_fmtstream_write #undef __argp_fmtstream_set_lmargin #undef __argp_fmtstream_set_rmargin #undef __argp_fmtstream_set_wmargin #undef __argp_fmtstream_point #undef __argp_fmtstream_update #undef __argp_fmtstream_ensure _GL_INLINE_HEADER_END #endif #endif /* !_LIBC || __OPTIMIZE__ */ #endif /* ARGP_FMTSTREAM_USE_LINEWRAP */ #endif /* argp-fmtstream.h */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/argp-fs-xinl.c�������������������������������������������������������0000644�0001750�0001750�00000003213�14557510504�014714� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Real definitions for extern inline functions in argp-fmtstream.h Copyright (C) 1997-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #ifdef _LIBC # define ARGP_FS_EI #else # define ARGP_FS_EI _GL_EXTERN_INLINE #endif #undef __OPTIMIZE__ #define __OPTIMIZE__ 1 #include "argp-fmtstream.h" #if 0 /* Not exported. */ /* Add weak aliases. */ #if _LIBC - 0 && !defined (ARGP_FMTSTREAM_USE_LINEWRAP) && defined (weak_alias) weak_alias (__argp_fmtstream_putc, argp_fmtstream_putc) weak_alias (__argp_fmtstream_puts, argp_fmtstream_puts) weak_alias (__argp_fmtstream_write, argp_fmtstream_write) weak_alias (__argp_fmtstream_set_lmargin, argp_fmtstream_set_lmargin) weak_alias (__argp_fmtstream_set_rmargin, argp_fmtstream_set_rmargin) weak_alias (__argp_fmtstream_set_wmargin, argp_fmtstream_set_wmargin) weak_alias (__argp_fmtstream_point, argp_fmtstream_point) #endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/argp-help.c����������������������������������������������������������0000644�0001750�0001750�00000201257�14557510504�014274� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hierarchical argument parsing help output Copyright (C) 1995-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <alloca.h> #include <errno.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <assert.h> #include <stdarg.h> #include <ctype.h> #include <limits.h> #ifdef _LIBC # include <../libio/libioP.h> # include <wchar.h> #endif #ifdef _LIBC # include <libintl.h> # undef dgettext # define dgettext(domain, msgid) \ __dcgettext (domain, msgid, LC_MESSAGES) #else # include "gettext.h" #endif #include "argp.h" #include "argp-fmtstream.h" #include "argp-namefrob.h" #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif /* ========================================================================== */ /* User-selectable (using an environment variable) formatting parameters. These may be specified in an environment variable called 'ARGP_HELP_FMT', with a contents like: VAR1=VAL1,VAR2=VAL2,BOOLVAR2,no-BOOLVAR2 Where VALn must be a positive integer. The list of variables is in the UPARAM_NAMES vector, below. */ /* Default parameters. */ #define DUP_ARGS 0 /* True if option argument can be duplicated. */ #define DUP_ARGS_NOTE 1 /* True to print a note about duplicate args. */ #define SHORT_OPT_COL 2 /* column in which short options start */ #define LONG_OPT_COL 6 /* column in which long options start */ #define DOC_OPT_COL 2 /* column in which doc options start */ #define OPT_DOC_COL 29 /* column in which option text starts */ #define HEADER_COL 1 /* column in which group headers are printed */ #define USAGE_INDENT 12 /* indentation of wrapped usage lines */ #define RMARGIN 79 /* right margin used for wrapping */ /* User-selectable (using an environment variable) formatting parameters. They must all be of type 'int' for the parsing code to work. */ struct uparams { /* If true, arguments for an option are shown with both short and long options, even when a given option has both, e.g. '-x ARG, --longx=ARG'. If false, then if an option has both, the argument is only shown with the long one, e.g., '-x, --longx=ARG', and a message indicating that this really means both is printed below the options. */ int dup_args; /* This is true if when DUP_ARGS is false, and some duplicate arguments have been suppressed, an explanatory message should be printed. */ int dup_args_note; /* Various output columns. */ int short_opt_col; /* column in which short options start */ int long_opt_col; /* column in which long options start */ int doc_opt_col; /* column in which doc options start */ int opt_doc_col; /* column in which option text starts */ int header_col; /* column in which group headers are printed */ int usage_indent; /* indentation of wrapped usage lines */ int rmargin; /* right margin used for wrapping */ int valid; /* True when the values in here are valid. */ }; /* This is a global variable, as user options are only ever read once. */ static struct uparams uparams = { DUP_ARGS, DUP_ARGS_NOTE, SHORT_OPT_COL, LONG_OPT_COL, DOC_OPT_COL, OPT_DOC_COL, HEADER_COL, USAGE_INDENT, RMARGIN }; /* A particular uparam, and what the user name is. */ struct uparam_name { const char name[14]; /* User name. */ bool is_bool; /* Whether it's 'boolean'. */ unsigned char uparams_offs; /* Location of the (int) field in UPARAMS. */ }; /* The name-field mappings we know about. */ static const struct uparam_name uparam_names[] = { { "dup-args", true, offsetof (struct uparams, dup_args) }, { "dup-args-note", true, offsetof (struct uparams, dup_args_note) }, { "short-opt-col", false, offsetof (struct uparams, short_opt_col) }, { "long-opt-col", false, offsetof (struct uparams, long_opt_col) }, { "doc-opt-col", false, offsetof (struct uparams, doc_opt_col) }, { "opt-doc-col", false, offsetof (struct uparams, opt_doc_col) }, { "header-col", false, offsetof (struct uparams, header_col) }, { "usage-indent", false, offsetof (struct uparams, usage_indent) }, { "rmargin", false, offsetof (struct uparams, rmargin) } }; #define nuparam_names (sizeof (uparam_names) / sizeof (uparam_names[0])) static void validate_uparams (const struct argp_state *state, struct uparams *upptr) { const struct uparam_name *up; for (up = uparam_names; up < uparam_names + nuparam_names; up++) { if (up->is_bool || up->uparams_offs == offsetof (struct uparams, rmargin)) continue; if (*(int *)((char *)upptr + up->uparams_offs) >= upptr->rmargin) { __argp_failure (state, 0, 0, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "\ ARGP_HELP_FMT: %s value is less than or equal to %s"), "rmargin", up->name); return; } } uparams = *upptr; uparams.valid = 1; } /* Read user options from the environment, and fill in UPARAMS appropriately. */ static void fill_in_uparams (const struct argp_state *state) { const char *var = getenv ("ARGP_HELP_FMT"); struct uparams new_params = uparams; #define SKIPWS(p) do { while (isspace ((unsigned char) *p)) p++; } while (0) if (var) { /* Parse var. */ while (*var) { SKIPWS (var); if (isalpha ((unsigned char) *var)) { size_t var_len; const struct uparam_name *un; int unspec = 0, val = 0; const char *arg = var; while (isalnum ((unsigned char) *arg) || *arg == '-' || *arg == '_') arg++; var_len = arg - var; SKIPWS (arg); if (*arg == '\0' || *arg == ',') unspec = 1; else if (*arg == '=') { arg++; SKIPWS (arg); } if (unspec) { if (var[0] == 'n' && var[1] == 'o' && var[2] == '-') { val = 0; var += 3; var_len -= 3; } else val = 1; } else if (isdigit ((unsigned char) *arg)) { val = atoi (arg); while (isdigit ((unsigned char) *arg)) arg++; SKIPWS (arg); } for (un = uparam_names; un < uparam_names + nuparam_names; un++) if (strlen (un->name) == var_len && strncmp (var, un->name, var_len) == 0) { if (unspec && !un->is_bool) __argp_failure (state, 0, 0, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "\ %.*s: ARGP_HELP_FMT parameter requires a value"), (int) var_len, var); else *(int *)((char *)&new_params + un->uparams_offs) = val; break; } if (un == uparam_names + nuparam_names) __argp_failure (state, 0, 0, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "\ %.*s: Unknown ARGP_HELP_FMT parameter"), (int) var_len, var); var = arg; if (*var == ',') var++; } else if (*var) { __argp_failure (state, 0, 0, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "Garbage in ARGP_HELP_FMT: %s"), var); break; } } validate_uparams (state, &new_params); } } /* ========================================================================== */ /* Returns true if OPT hasn't been marked invisible. Visibility only affects whether OPT is displayed or used in sorting, not option shadowing. */ #define ovisible(opt) (! ((opt)->flags & OPTION_HIDDEN)) /* Returns true if OPT is an alias for an earlier option. */ #define oalias(opt) ((opt)->flags & OPTION_ALIAS) /* Returns true if OPT is a documentation-only entry. */ #define odoc(opt) ((opt)->flags & OPTION_DOC) /* Returns true if OPT should not be translated */ #define onotrans(opt) ((opt)->flags & OPTION_NO_TRANS) /* Returns true if OPT is the end-of-list marker for a list of options. */ #define oend(opt) __option_is_end (opt) /* Returns true if OPT has a short option. */ #define oshort(opt) __option_is_short (opt) /* The help format for a particular option is like: -xARG, -yARG, --long1=ARG, --long2=ARG Documentation... Where ARG will be omitted if there's no argument, for this option, or will be surrounded by "[" and "]" appropriately if the argument is optional. The documentation string is word-wrapped appropriately, and if the list of options is long enough, it will be started on a separate line. If there are no short options for a given option, the first long option is indented slightly in a way that's supposed to make most long options appear to be in a separate column. For example, the following output (from ps): -p PID, --pid=PID List the process PID --pgrp=PGRP List processes in the process group PGRP -P, -x, --no-parent Include processes without parents -Q, --all-fields Don't elide unusable fields (normally if there's some reason ps can't print a field for any process, it's removed from the output entirely) -r, --reverse, --gratuitously-long-reverse-option Reverse the order of any sort --session[=SID] Add the processes from the session SID (which defaults to the sid of the current process) Here are some more options: -f ZOT, --foonly=ZOT Glork a foonly -z, --zaza Snit a zar -?, --help Give this help list --usage Give a short usage message -V, --version Print program version The struct argp_option array for the above could look like: { {"pid", 'p', "PID", 0, "List the process PID"}, {"pgrp", OPT_PGRP, "PGRP", 0, "List processes in the process group PGRP"}, {"no-parent", 'P', 0, 0, "Include processes without parents"}, {0, 'x', 0, OPTION_ALIAS}, {"all-fields",'Q', 0, 0, "Don't elide unusable fields (normally" " if there's some reason ps can't" " print a field for any process, it's" " removed from the output entirely)" }, {"reverse", 'r', 0, 0, "Reverse the order of any sort"}, {"gratuitously-long-reverse-option", 0, 0, OPTION_ALIAS}, {"session", OPT_SESS, "SID", OPTION_ARG_OPTIONAL, "Add the processes from the session" " SID (which defaults to the sid of" " the current process)" }, {0,0,0,0, "Here are some more options:"}, {"foonly", 'f', "ZOT", 0, "Glork a foonly"}, {"zaza", 'z', 0, 0, "Snit a zar"}, {0} } Note that the last three options are automatically supplied by argp_parse, unless you tell it not to with ARGP_NO_HELP. */ /* Returns true if CH occurs between BEG and END. */ static int find_char (char ch, char *beg, char *end) { while (beg < end) if (*beg == ch) return 1; else beg++; return 0; } /* -------------------------------------------------------------------------- */ /* Data structure: HOL = Help Option List */ struct hol_cluster; /* fwd decl */ struct hol_entry { /* First option. */ const struct argp_option *opt; /* Number of options (including aliases). */ unsigned num; /* A pointers into the HOL's short_options field, to the first short option letter for this entry. The order of the characters following this point corresponds to the order of options pointed to by OPT, and there are at most NUM. A short option recorded in an option following OPT is only valid if it occurs in the right place in SHORT_OPTIONS (otherwise it's probably been shadowed by some other entry). */ char *short_options; /* Entries are sorted by their group first, in the order: 0, 1, 2, ..., n, -m, ..., -2, -1 and then alphabetically within each group. The default is 0. */ int group; /* The cluster of options this entry belongs to, or NULL if none. */ struct hol_cluster *cluster; /* The argp from which this option came. */ const struct argp *argp; /* Position in the array */ unsigned ord; }; /* A cluster of entries to reflect the argp tree structure. */ struct hol_cluster { /* A descriptive header printed before options in this cluster. */ const char *header; /* Used to order clusters within the same group with the same parent, according to the order in which they occurred in the parent argp's child list. */ int index; /* How to sort this cluster with respect to options and other clusters at the same depth (clusters always follow options in the same group). */ int group; /* The cluster to which this cluster belongs, or NULL if it's at the base level. */ struct hol_cluster *parent; /* The argp from which this cluster is (eventually) derived. */ const struct argp *argp; /* The distance this cluster is from the root. */ int depth; /* Clusters in a given hol are kept in a linked list, to make freeing them possible. */ struct hol_cluster *next; }; /* A list of options for help. */ struct hol { /* An array of hol_entry's. */ struct hol_entry *entries; /* The number of entries in this hol. If this field is zero, entries and short_options are undefined. */ unsigned num_entries; /* A string containing all short options in this HOL. Each entry contains pointers into this string, so the order can't be messed with blindly. */ char *short_options; /* Clusters of entries in this hol. */ struct hol_cluster *clusters; }; /* Create a struct hol from the options in ARGP. CLUSTER is the hol_cluster in which these entries occur, or NULL if at the root. */ static struct hol * make_hol (const struct argp *argp, struct hol_cluster *cluster) { char *so; const struct argp_option *o; const struct argp_option *opts = argp->options; struct hol_entry *entry; unsigned num_short_options = 0; struct hol *hol = malloc (sizeof (struct hol)); assert (hol); hol->num_entries = 0; hol->clusters = NULL; if (opts) { int cur_group = 0; /* The first option must not be an alias. */ assert (! oalias (opts)); /* Calculate the space needed. */ for (o = opts; ! oend (o); o++) { if (! oalias (o)) hol->num_entries++; if (oshort (o)) num_short_options++; /* This is an upper bound. */ } hol->entries = malloc (sizeof (struct hol_entry) * hol->num_entries); hol->short_options = malloc (num_short_options + 1); assert (hol->entries && hol->short_options); if (SIZE_MAX <= UINT_MAX) assert (hol->num_entries <= SIZE_MAX / sizeof (struct hol_entry)); /* Fill in the entries. */ so = hol->short_options; for (o = opts, entry = hol->entries; ! oend (o); entry++) { entry->opt = o; entry->num = 0; entry->short_options = so; entry->group = cur_group = o->group ? o->group : ((!o->name && !o->key) ? cur_group + 1 : cur_group); entry->cluster = cluster; entry->argp = argp; do { entry->num++; if (oshort (o) && ! find_char (o->key, hol->short_options, so)) /* O has a valid short option which hasn't already been used.*/ *so++ = o->key; o++; } while (! oend (o) && oalias (o)); } *so = '\0'; /* null terminated so we can find the length */ } return hol; } /* Add a new cluster to HOL, with the given GROUP and HEADER (taken from the associated argp child list entry), INDEX, and PARENT, and return a pointer to it. ARGP is the argp that this cluster results from. */ static struct hol_cluster * hol_add_cluster (struct hol *hol, int group, const char *header, int index, struct hol_cluster *parent, const struct argp *argp) { struct hol_cluster *cl = malloc (sizeof (struct hol_cluster)); if (cl) { cl->group = group; cl->header = header; cl->index = index; cl->parent = parent; cl->argp = argp; cl->depth = parent ? parent->depth + 1 : 0; cl->next = hol->clusters; hol->clusters = cl; } return cl; } /* Free HOL and any resources it uses. */ static void hol_free (struct hol *hol) { struct hol_cluster *cl = hol->clusters; while (cl) { struct hol_cluster *next = cl->next; free (cl); cl = next; } if (hol->num_entries > 0) { free (hol->entries); free (hol->short_options); } free (hol); } /* Iterate across the short_options of the given ENTRY. Call FUNC for each. Stop when such a call returns a non-zero value, and return this value. If all FUNC invocations returned 0, return 0. */ static int hol_entry_short_iterate (const struct hol_entry *entry, int (*func)(const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie), const char *domain, void *cookie) { unsigned nopts; int val = 0; const struct argp_option *opt, *real = entry->opt; char *so = entry->short_options; for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--) if (oshort (opt) && *so == opt->key) { if (!oalias (opt)) real = opt; if (ovisible (opt)) val = (*func)(opt, real, domain, cookie); so++; } return val; } /* Iterate across the long options of the given ENTRY. Call FUNC for each. Stop when such a call returns a non-zero value, and return this value. If all FUNC invocations returned 0, return 0. */ static inline int #if (__GNUC__ >= 3) || (__clang_major__ >= 4) __attribute__ ((always_inline)) #endif hol_entry_long_iterate (const struct hol_entry *entry, int (*func)(const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie), const char *domain, void *cookie) { unsigned nopts; int val = 0; const struct argp_option *opt, *real = entry->opt; for (opt = real, nopts = entry->num; nopts > 0 && !val; opt++, nopts--) if (opt->name) { if (!oalias (opt)) real = opt; if (ovisible (opt)) val = (*func)(opt, real, domain, cookie); } return val; } /* A filter that returns true for the first short option of a given ENTRY. */ static int until_short (const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie) { return oshort (opt) ? opt->key : 0; } /* Returns the first valid short option in ENTRY, or 0 if there is none. */ static char hol_entry_first_short (const struct hol_entry *entry) { return hol_entry_short_iterate (entry, until_short, entry->argp->argp_domain, 0); } /* Returns the first valid long option in ENTRY, or NULL if there is none. */ static const char * hol_entry_first_long (const struct hol_entry *entry) { const struct argp_option *opt; unsigned num; for (opt = entry->opt, num = entry->num; num > 0; opt++, num--) if (opt->name && ovisible (opt)) return opt->name; return NULL; } /* Returns the entry in HOL with the long option name NAME, or NULL if there is none. */ static struct hol_entry * hol_find_entry (struct hol *hol, const char *name) { unsigned num_entries = hol->num_entries; if (num_entries > 0) { struct hol_entry *entry = hol->entries; do { const struct argp_option *opt = entry->opt; unsigned num_opts = entry->num; while (num_opts-- > 0) if (opt->name && ovisible (opt) && strcmp (opt->name, name) == 0) return entry; else opt++; entry++; } while (--num_entries > 0); } return NULL; } /* If an entry with the long option NAME occurs in HOL, set its special sort position to GROUP. */ static void hol_set_group (struct hol *hol, const char *name, int group) { struct hol_entry *entry = hol_find_entry (hol, name); if (entry) entry->group = group; } /* -------------------------------------------------------------------------- */ /* Sorting the entries in a HOL. */ /* Order by group: 0, 1, 2, ..., n, -m, ..., -2, -1. */ static int group_cmp (int group1, int group2) { if ((group1 < 0 && group2 < 0) || (group1 >= 0 && group2 >= 0)) return group1 - group2; else /* Return > 0 if group1 < 0 <= group2. Return < 0 if group2 < 0 <= group1. */ return group2 - group1; } /* Compare clusters CL1 and CL2 by the order that they should appear in output. Assume CL1 and CL2 have the same parent. */ static int hol_sibling_cluster_cmp (const struct hol_cluster *cl1, const struct hol_cluster *cl2) { /* Compare by group first. */ int cmp = group_cmp (cl1->group, cl2->group); if (cmp != 0) return cmp; /* Within a group, compare by index within the group. */ return cl2->index - cl1->index; } /* Compare clusters CL1 and CL2 by the order that they should appear in output. Assume CL1 and CL2 are at the same depth. */ static int hol_cousin_cluster_cmp (const struct hol_cluster *cl1, const struct hol_cluster *cl2) { if (cl1->parent == cl2->parent) return hol_sibling_cluster_cmp (cl1, cl2); else { /* Compare the parent clusters first. */ int cmp = hol_cousin_cluster_cmp (cl1->parent, cl2->parent); if (cmp != 0) return cmp; /* Next, compare by group. */ cmp = group_cmp (cl1->group, cl2->group); if (cmp != 0) return cmp; /* Next, within a group, compare by index within the group. */ return cl2->index - cl1->index; } } /* Compare clusters CL1 and CL2 by the order that they should appear in output. */ static int hol_cluster_cmp (const struct hol_cluster *cl1, const struct hol_cluster *cl2) { /* If one cluster is deeper than the other, use its ancestor at the same level. Then, go by the rule that entries that are not in a sub-cluster come before entries in a sub-cluster. */ if (cl1->depth > cl2->depth) { do cl1 = cl1->parent; while (cl1->depth > cl2->depth); int cmp = hol_cousin_cluster_cmp (cl1, cl2); if (cmp != 0) return cmp; return 1; } else if (cl1->depth < cl2->depth) { do cl2 = cl2->parent; while (cl1->depth < cl2->depth); int cmp = hol_cousin_cluster_cmp (cl1, cl2); if (cmp != 0) return cmp; return -1; } else return hol_cousin_cluster_cmp (cl1, cl2); } /* Return the ancestor of CL that's just below the root (i.e., has a parent of 0). */ static struct hol_cluster * hol_cluster_base (struct hol_cluster *cl) { while (cl->parent) cl = cl->parent; return cl; } /* Given the name of an OPTION_DOC option, modifies *NAME to start at the tail that should be used for comparisons, and returns true iff it should be treated as a non-option. */ static int canon_doc_option (const char **name) { int non_opt; /* Skip initial whitespace. */ while (isspace ((unsigned char) **name)) (*name)++; /* Decide whether this looks like an option (leading '-') or not. */ non_opt = (**name != '-'); /* Skip until part of name used for sorting. */ while (**name && !isalnum ((unsigned char) **name)) (*name)++; return non_opt; } /* Order ENTRY1 and ENTRY2 by the order which they should appear in a help listing. This function implements a total order, that is: - if cmp (entry1, entry2) < 0 and cmp (entry2, entry3) < 0, then cmp (entry1, entry3) < 0. - if cmp (entry1, entry2) < 0 and cmp (entry2, entry3) == 0, then cmp (entry1, entry3) < 0. - if cmp (entry1, entry2) == 0 and cmp (entry2, entry3) < 0, then cmp (entry1, entry3) < 0. - if cmp (entry1, entry2) == 0 and cmp (entry2, entry3) == 0, then cmp (entry1, entry3) == 0. */ static int hol_entry_cmp (const struct hol_entry *entry1, const struct hol_entry *entry2) { /* First, compare the group numbers. For entries within a cluster, what matters is the group number of the base cluster in which the entry resides. */ int group1 = (entry1->cluster ? hol_cluster_base (entry1->cluster)->group : entry1->group); int group2 = (entry2->cluster ? hol_cluster_base (entry2->cluster)->group : entry2->group); int cmp = group_cmp (group1, group2); if (cmp != 0) return cmp; /* The group numbers are the same. */ /* Entries that are not in a cluster come before entries in a cluster. */ cmp = (entry1->cluster != NULL) - (entry2->cluster != NULL); if (cmp != 0) return cmp; /* Compare the clusters. */ if (entry1->cluster != NULL) { cmp = hol_cluster_cmp (entry1->cluster, entry2->cluster); if (cmp != 0) return cmp; } /* For entries in the same cluster, compare also the group numbers within the cluster. */ cmp = group_cmp (entry1->group, entry2->group); if (cmp != 0) return cmp; /* The entries are both in the same group and the same cluster. */ /* 'documentation' options always follow normal options (or documentation options that *look* like normal options). */ const char *long1 = hol_entry_first_long (entry1); const char *long2 = hol_entry_first_long (entry2); int doc1 = (odoc (entry1->opt) ? long1 != NULL && canon_doc_option (&long1) : 0); int doc2 = (odoc (entry2->opt) ? long2 != NULL && canon_doc_option (&long2) : 0); cmp = doc1 - doc2; if (cmp != 0) return cmp; /* Compare the entries alphabetically. */ /* First, compare the first character of the options. Put entries without *any* valid options (such as options with OPTION_HIDDEN set) first. But as they're not displayed, it doesn't matter where they are. */ int short1 = hol_entry_first_short (entry1); int short2 = hol_entry_first_short (entry2); unsigned char first1 = short1 ? short1 : long1 != NULL ? *long1 : 0; unsigned char first2 = short2 ? short2 : long2 != NULL ? *long2 : 0; /* Compare ignoring case. */ /* Use tolower, not _tolower, since the latter has undefined behaviour for characters that are not uppercase letters. */ cmp = tolower (first1) - tolower (first2); if (cmp != 0) return cmp; /* When the options start with the same letter (ignoring case), lower-case comes first. */ cmp = first2 - first1; if (cmp != 0) return cmp; /* The first character of the options agree. */ /* Put entries with a short option before entries without a short option. */ cmp = (short1 != 0) - (short2 != 0); if (cmp != 0) return cmp; /* Compare entries without a short option by comparing the long option. */ if (short1 == 0) { cmp = (long1 != NULL) - (long2 != NULL); if (cmp != 0) return cmp; if (long1 != NULL) { cmp = __strcasecmp (long1, long2); if (cmp != 0) return cmp; } } /* We're out of comparison criteria. At this point, if ENTRY1 != ENTRY2, the order of these entries will be unpredictable. */ return 0; } /* Variant of hol_entry_cmp with correct signature for qsort. */ static int hol_entry_qcmp (const void *entry1_v, const void *entry2_v) { return hol_entry_cmp (entry1_v, entry2_v); } /* Sort HOL by group and alphabetically by option name (with short options taking precedence over long). Since the sorting is for display purposes only, the shadowing of options isn't effected. */ static void hol_sort (struct hol *hol) { if (hol->num_entries > 0) { unsigned i; struct hol_entry *e; for (i = 0, e = hol->entries; i < hol->num_entries; i++, e++) e->ord = i; qsort (hol->entries, hol->num_entries, sizeof (struct hol_entry), hol_entry_qcmp); } } /* -------------------------------------------------------------------------- */ /* Constructing the HOL. */ /* Append MORE to HOL, destroying MORE in the process. Options in HOL shadow any in MORE with the same name. */ static void hol_append (struct hol *hol, struct hol *more) { struct hol_cluster **cl_end = &hol->clusters; /* Steal MORE's cluster list, and add it to the end of HOL's. */ while (*cl_end) cl_end = &(*cl_end)->next; *cl_end = more->clusters; more->clusters = NULL; /* Merge entries. */ if (more->num_entries > 0) { if (hol->num_entries == 0) { hol->num_entries = more->num_entries; hol->entries = more->entries; hol->short_options = more->short_options; more->num_entries = 0; /* Mark MORE's fields as invalid. */ } else /* Append the entries in MORE to those in HOL, taking care to only add non-shadowed SHORT_OPTIONS values. */ { unsigned left; char *so, *more_so; struct hol_entry *e; unsigned num_entries = hol->num_entries + more->num_entries; struct hol_entry *entries = malloc (num_entries * sizeof (struct hol_entry)); unsigned hol_so_len = strlen (hol->short_options); char *short_options = malloc (hol_so_len + strlen (more->short_options) + 1); assert (entries && short_options); if (SIZE_MAX <= UINT_MAX) assert (num_entries <= SIZE_MAX / sizeof (struct hol_entry)); __mempcpy (__mempcpy (entries, hol->entries, hol->num_entries * sizeof (struct hol_entry)), more->entries, more->num_entries * sizeof (struct hol_entry)); __mempcpy (short_options, hol->short_options, hol_so_len); /* Fix up the short options pointers from HOL. */ for (e = entries, left = hol->num_entries; left > 0; e++, left--) e->short_options = short_options + (e->short_options - hol->short_options); /* Now add the short options from MORE, fixing up its entries too. */ so = short_options + hol_so_len; more_so = more->short_options; for (left = more->num_entries; left > 0; e++, left--) { int opts_left; const struct argp_option *opt; e->short_options = so; for (opts_left = e->num, opt = e->opt; opts_left; opt++, opts_left--) { int ch = *more_so; if (oshort (opt) && ch == opt->key) /* The next short option in MORE_SO, CH, is from OPT. */ { if (! find_char (ch, short_options, short_options + hol_so_len)) /* The short option CH isn't shadowed by HOL's options, so add it to the sum. */ *so++ = ch; more_so++; } } } *so = '\0'; free (hol->entries); free (hol->short_options); hol->entries = entries; hol->num_entries = num_entries; hol->short_options = short_options; } } hol_free (more); } /* Make a HOL containing all levels of options in ARGP. CLUSTER is the cluster in which ARGP's entries should be clustered, or NULL. */ static struct hol * argp_hol (const struct argp *argp, struct hol_cluster *cluster) { const struct argp_child *child = argp->children; struct hol *hol = make_hol (argp, cluster); if (child) while (child->argp) { struct hol_cluster *child_cluster = ((child->group || child->header) /* Put CHILD->argp within its own cluster. */ ? hol_add_cluster (hol, child->group, child->header, child - argp->children, cluster, argp) /* Just merge it into the parent's cluster. */ : cluster); hol_append (hol, argp_hol (child->argp, child_cluster)) ; child++; } return hol; } /* -------------------------------------------------------------------------- */ /* Printing the HOL. */ /* Inserts enough spaces to make sure STREAM is at column COL. */ static void indent_to (argp_fmtstream_t stream, unsigned col) { int needed = col - __argp_fmtstream_point (stream); while (needed-- > 0) __argp_fmtstream_putc (stream, ' '); } /* Output to STREAM either a space, or a newline if there isn't room for at least ENSURE characters before the right margin. */ static void space (argp_fmtstream_t stream, size_t ensure) { if (__argp_fmtstream_point (stream) + ensure >= __argp_fmtstream_rmargin (stream)) __argp_fmtstream_putc (stream, '\n'); else __argp_fmtstream_putc (stream, ' '); } /* If the option REAL has an argument, we print it in using the printf format REQ_FMT or OPT_FMT depending on whether it's a required or optional argument. */ static void arg (const struct argp_option *real, const char *req_fmt, const char *opt_fmt, const char *domain, argp_fmtstream_t stream) { if (real->arg) { if (real->flags & OPTION_ARG_OPTIONAL) __argp_fmtstream_printf (stream, opt_fmt, dgettext (domain, real->arg)); else __argp_fmtstream_printf (stream, req_fmt, dgettext (domain, real->arg)); } } /* Helper functions for hol_entry_help. */ /* State used during the execution of hol_help. */ struct hol_help_state { /* PREV_ENTRY should contain the previous entry printed, or NULL. */ struct hol_entry *prev_entry; /* If an entry is in a different group from the previous one, and SEP_GROUPS is true, then a blank line will be printed before any output. */ int sep_groups; /* True if a duplicate option argument was suppressed (only ever set if UPARAMS.dup_args is false). */ int suppressed_dup_arg; }; /* Some state used while printing a help entry (used to communicate with helper functions). See the doc for hol_entry_help for more info, as most of the fields are copied from its arguments. */ struct pentry_state { const struct hol_entry *entry; argp_fmtstream_t stream; struct hol_help_state *hhstate; /* True if nothing's been printed so far. */ int first; /* If non-zero, the state that was used to print this help. */ const struct argp_state *state; }; /* If a user doc filter should be applied to DOC, do so. */ static const char * filter_doc (const char *doc, int key, const struct argp *argp, const struct argp_state *state) { if (argp && argp->help_filter) /* We must apply a user filter to this output. */ { void *input = __argp_input (argp, state); return (*argp->help_filter) (key, doc, input); } else /* No filter. */ return doc; } /* Prints STR as a header line, with the margin lines set appropriately, and notes the fact that groups should be separated with a blank line. ARGP is the argp that should dictate any user doc filtering to take place. Note that the previous wrap margin isn't restored, but the left margin is reset to 0. */ static void print_header (const char *str, const struct argp *argp, struct pentry_state *pest) { const char *tstr = str ? dgettext (argp->argp_domain, str) : NULL; const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_HEADER, argp, pest->state); if (fstr) { if (*fstr) { if (pest->hhstate->prev_entry) /* Precede with a blank line. */ __argp_fmtstream_putc (pest->stream, '\n'); indent_to (pest->stream, uparams.header_col); __argp_fmtstream_set_lmargin (pest->stream, uparams.header_col); __argp_fmtstream_set_wmargin (pest->stream, uparams.header_col); __argp_fmtstream_puts (pest->stream, fstr); __argp_fmtstream_set_lmargin (pest->stream, 0); __argp_fmtstream_putc (pest->stream, '\n'); } pest->hhstate->sep_groups = 1; /* Separate subsequent groups. */ } if (fstr != tstr) free ((char *) fstr); } /* Return true if CL1 is a child of CL2. */ static int hol_cluster_is_child (const struct hol_cluster *cl1, const struct hol_cluster *cl2) { while (cl1 && cl1 != cl2) cl1 = cl1->parent; return cl1 == cl2; } /* Inserts a comma if this isn't the first item on the line, and then makes sure we're at least to column COL. If this *is* the first item on a line, prints any pending whitespace/headers that should precede this line. Also clears FIRST. */ static void comma (unsigned col, struct pentry_state *pest) { if (pest->first) { const struct hol_entry *pe = pest->hhstate->prev_entry; const struct hol_cluster *cl = pest->entry->cluster; if (pest->hhstate->sep_groups && pe && pest->entry->group != pe->group) __argp_fmtstream_putc (pest->stream, '\n'); if (cl && cl->header && *cl->header && (!pe || (pe->cluster != cl && !hol_cluster_is_child (pe->cluster, cl)))) /* If we're changing clusters, then this must be the start of the ENTRY's cluster unless that is an ancestor of the previous one (in which case we had just popped into a sub-cluster for a bit). If so, then print the cluster's header line. */ { int old_wm = __argp_fmtstream_wmargin (pest->stream); print_header (cl->header, cl->argp, pest); __argp_fmtstream_set_wmargin (pest->stream, old_wm); } pest->first = 0; } else __argp_fmtstream_puts (pest->stream, ", "); indent_to (pest->stream, col); } /* Print help for ENTRY to STREAM. */ static void hol_entry_help (struct hol_entry *entry, const struct argp_state *state, argp_fmtstream_t stream, struct hol_help_state *hhstate) { unsigned num; const struct argp_option *real = entry->opt, *opt; char *so = entry->short_options; int have_long_opt = 0; /* We have any long options. */ /* Saved margins. */ int old_lm = __argp_fmtstream_set_lmargin (stream, 0); int old_wm = __argp_fmtstream_wmargin (stream); /* PEST is a state block holding some of our variables that we'd like to share with helper functions. */ struct pentry_state pest = { entry, stream, hhstate, 1, state }; if (! odoc (real)) for (opt = real, num = entry->num; num > 0; opt++, num--) if (opt->name && ovisible (opt)) { have_long_opt = 1; break; } /* First emit short options. */ __argp_fmtstream_set_wmargin (stream, uparams.short_opt_col); /* For truly bizarre cases. */ for (opt = real, num = entry->num; num > 0; opt++, num--) if (oshort (opt) && opt->key == *so) /* OPT has a valid (non shadowed) short option. */ { if (ovisible (opt)) { comma (uparams.short_opt_col, &pest); __argp_fmtstream_putc (stream, '-'); __argp_fmtstream_putc (stream, *so); if (!have_long_opt || uparams.dup_args) arg (real, " %s", "[%s]", state == NULL ? NULL : state->root_argp->argp_domain, stream); else if (real->arg) hhstate->suppressed_dup_arg = 1; } so++; } /* Now, long options. */ if (odoc (real)) /* A "documentation" option. */ { __argp_fmtstream_set_wmargin (stream, uparams.doc_opt_col); for (opt = real, num = entry->num; num > 0; opt++, num--) if (opt->name && ovisible (opt)) { comma (uparams.doc_opt_col, &pest); /* Calling dgettext here isn't quite right, since sorting will have been done on the original; but documentation options should be pretty rare anyway... */ __argp_fmtstream_puts (stream, dgettext (state == NULL ? NULL : state->root_argp->argp_domain, opt->name)); } } else /* A real long option. */ { __argp_fmtstream_set_wmargin (stream, uparams.long_opt_col); for (opt = real, num = entry->num; num > 0; opt++, num--) if (opt->name && ovisible (opt)) { comma (uparams.long_opt_col, &pest); __argp_fmtstream_printf (stream, "--%s", opt->name); arg (real, "=%s", "[=%s]", state == NULL ? NULL : state->root_argp->argp_domain, stream); } } /* Next, documentation strings. */ __argp_fmtstream_set_lmargin (stream, 0); if (pest.first) { /* Didn't print any switches, what's up? */ if (!oshort (real) && !real->name) /* This is a group header, print it nicely. */ print_header (real->doc, entry->argp, &pest); else /* Just a totally shadowed option or null header; print nothing. */ goto cleanup; /* Just return, after cleaning up. */ } else { const char *tstr = real->doc ? dgettext (state == NULL ? NULL : state->root_argp->argp_domain, real->doc) : NULL; const char *fstr = filter_doc (tstr, real->key, entry->argp, state); if (fstr && *fstr) { unsigned int col = __argp_fmtstream_point (stream); __argp_fmtstream_set_lmargin (stream, uparams.opt_doc_col); __argp_fmtstream_set_wmargin (stream, uparams.opt_doc_col); if (col > (unsigned int) (uparams.opt_doc_col + 3)) __argp_fmtstream_putc (stream, '\n'); else if (col >= (unsigned int) uparams.opt_doc_col) __argp_fmtstream_puts (stream, " "); else indent_to (stream, uparams.opt_doc_col); __argp_fmtstream_puts (stream, fstr); } if (fstr && fstr != tstr) free ((char *) fstr); /* Reset the left margin. */ __argp_fmtstream_set_lmargin (stream, 0); __argp_fmtstream_putc (stream, '\n'); } hhstate->prev_entry = entry; cleanup: __argp_fmtstream_set_lmargin (stream, old_lm); __argp_fmtstream_set_wmargin (stream, old_wm); } /* Output a long help message about the options in HOL to STREAM. */ static void hol_help (struct hol *hol, const struct argp_state *state, argp_fmtstream_t stream) { unsigned num; struct hol_entry *entry; struct hol_help_state hhstate = { 0, 0, 0 }; for (entry = hol->entries, num = hol->num_entries; num > 0; entry++, num--) hol_entry_help (entry, state, stream, &hhstate); if (hhstate.suppressed_dup_arg && uparams.dup_args_note) { const char *tstr = dgettext (state == NULL ? NULL : state->root_argp->argp_domain, "\ Mandatory or optional arguments to long options are also mandatory or \ optional for any corresponding short options."); const char *fstr = filter_doc (tstr, ARGP_KEY_HELP_DUP_ARGS_NOTE, state ? state->root_argp : 0, state); if (fstr && *fstr) { __argp_fmtstream_putc (stream, '\n'); __argp_fmtstream_puts (stream, fstr); __argp_fmtstream_putc (stream, '\n'); } if (fstr && fstr != tstr) free ((char *) fstr); } } /* Helper functions for hol_usage. */ /* If OPT is a short option without an arg, append its key to the string pointer pointer to by COOKIE, and advance the pointer. */ static int add_argless_short_opt (const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie) { char **snao_end = cookie; if (!(opt->arg || real->arg) && !((opt->flags | real->flags) & OPTION_NO_USAGE)) *(*snao_end)++ = opt->key; return 0; } /* If OPT is a short option with an arg, output a usage entry for it to the stream pointed at by COOKIE. */ static int usage_argful_short_opt (const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie) { argp_fmtstream_t stream = cookie; const char *arg = opt->arg; int flags = opt->flags | real->flags; if (! arg) arg = real->arg; if (arg && !(flags & OPTION_NO_USAGE)) { arg = dgettext (domain, arg); if (flags & OPTION_ARG_OPTIONAL) __argp_fmtstream_printf (stream, " [-%c[%s]]", opt->key, arg); else { /* Manually do line wrapping so that it (probably) won't get wrapped at the embedded space. */ space (stream, 6 + strlen (arg)); __argp_fmtstream_printf (stream, "[-%c %s]", opt->key, arg); } } return 0; } /* Output a usage entry for the long option opt to the stream pointed at by COOKIE. */ static int usage_long_opt (const struct argp_option *opt, const struct argp_option *real, const char *domain, void *cookie) { argp_fmtstream_t stream = cookie; const char *arg = opt->arg; int flags = opt->flags | real->flags; if (! arg) arg = real->arg; if (! (flags & OPTION_NO_USAGE)) { if (arg) { arg = dgettext (domain, arg); if (flags & OPTION_ARG_OPTIONAL) __argp_fmtstream_printf (stream, " [--%s[=%s]]", opt->name, arg); else __argp_fmtstream_printf (stream, " [--%s=%s]", opt->name, arg); } else __argp_fmtstream_printf (stream, " [--%s]", opt->name); } return 0; } /* Print a short usage description for the arguments in HOL to STREAM. */ static void hol_usage (struct hol *hol, argp_fmtstream_t stream) { if (hol->num_entries > 0) { unsigned nentries; struct hol_entry *entry; char *short_no_arg_opts = alloca (strlen (hol->short_options) + 1); char *snao_end = short_no_arg_opts; /* First we put a list of short options without arguments. */ for (entry = hol->entries, nentries = hol->num_entries ; nentries > 0 ; entry++, nentries--) hol_entry_short_iterate (entry, add_argless_short_opt, entry->argp->argp_domain, &snao_end); if (snao_end > short_no_arg_opts) { *snao_end++ = '\0'; __argp_fmtstream_printf (stream, " [-%s]", short_no_arg_opts); } /* Now a list of short options *with* arguments. */ for (entry = hol->entries, nentries = hol->num_entries ; nentries > 0 ; entry++, nentries--) hol_entry_short_iterate (entry, usage_argful_short_opt, entry->argp->argp_domain, stream); /* Finally, a list of long options (whew!). */ for (entry = hol->entries, nentries = hol->num_entries ; nentries > 0 ; entry++, nentries--) hol_entry_long_iterate (entry, usage_long_opt, entry->argp->argp_domain, stream); } } /* Calculate how many different levels with alternative args strings exist in ARGP. */ static size_t argp_args_levels (const struct argp *argp) { size_t levels = 0; const struct argp_child *child = argp->children; if (argp->args_doc && strchr (argp->args_doc, '\n')) levels++; if (child) while (child->argp) levels += argp_args_levels ((child++)->argp); return levels; } /* Print all the non-option args documented in ARGP to STREAM. Any output is preceded by a space. LEVELS is a pointer to a byte vector the length returned by argp_args_levels; it should be initialized to zero, and updated by this routine for the next call if ADVANCE is true. True is returned as long as there are more patterns to output. */ static int argp_args_usage (const struct argp *argp, const struct argp_state *state, char **levels, int advance, argp_fmtstream_t stream) { char *our_level = *levels; int multiple = 0; const struct argp_child *child = argp->children; const char *tdoc = argp->args_doc ? dgettext (argp->argp_domain, argp->args_doc) : NULL; const char *fdoc = filter_doc (tdoc, ARGP_KEY_HELP_ARGS_DOC, argp, state); const char *nl = NULL; if (fdoc) { const char *cp = fdoc; nl = __strchrnul (cp, '\n'); if (*nl != '\0') /* This is a 'multi-level' args doc; advance to the correct position as determined by our state in LEVELS, and update LEVELS. */ { int i; multiple = 1; for (i = 0; i < *our_level; i++) cp = nl + 1, nl = __strchrnul (cp, '\n'); (*levels)++; } /* Manually do line wrapping so that it (probably) won't get wrapped at any embedded spaces. */ space (stream, 1 + nl - cp); __argp_fmtstream_write (stream, cp, nl - cp); } if (fdoc && fdoc != tdoc) free ((char *)fdoc); /* Free user's modified doc string. */ if (child) while (child->argp) advance = !argp_args_usage ((child++)->argp, state, levels, advance, stream); if (advance && multiple) { /* Need to increment our level. */ if (*nl) /* There's more we can do here. */ { (*our_level)++; advance = 0; /* Our parent shouldn't advance also. */ } else if (*our_level > 0) /* We had multiple levels, but used them up; reset to zero. */ *our_level = 0; } return !advance; } /* Print the documentation for ARGP to STREAM; if POST is false, then everything preceding a '\v' character in the documentation strings (or the whole string, for those with none) is printed, otherwise, everything following the '\v' character (nothing for strings without). Each separate bit of documentation is separated a blank line, and if PRE_BLANK is true, then the first is as well. If FIRST_ONLY is true, only the first occurrence is output. Returns true if anything was output. */ static int argp_doc (const struct argp *argp, const struct argp_state *state, int post, int pre_blank, int first_only, argp_fmtstream_t stream) { const char *text; const char *inp_text; void *input = NULL; int anything = 0; size_t inp_text_limit = 0; const char *doc = argp->doc ? dgettext (argp->argp_domain, argp->doc) : NULL; const struct argp_child *child = argp->children; if (doc) { char *vt = strchr (doc, '\v'); inp_text = post ? (vt ? vt + 1 : 0) : doc; inp_text_limit = (!post && vt) ? (vt - doc) : 0; } else inp_text = 0; if (argp->help_filter) /* We have to filter the doc strings. */ { if (inp_text_limit) /* Copy INP_TEXT so that it's nul-terminated. */ inp_text = __strndup (inp_text, inp_text_limit); input = __argp_input (argp, state); text = (*argp->help_filter) (post ? ARGP_KEY_HELP_POST_DOC : ARGP_KEY_HELP_PRE_DOC, inp_text, input); } else text = (const char *) inp_text; if (text) { if (pre_blank) __argp_fmtstream_putc (stream, '\n'); if (text == inp_text && inp_text_limit) __argp_fmtstream_write (stream, inp_text, inp_text_limit); else __argp_fmtstream_puts (stream, text); if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream)) __argp_fmtstream_putc (stream, '\n'); anything = 1; } if (text && text != inp_text) free ((char *) text); /* Free TEXT returned from the help filter. */ if (inp_text && inp_text_limit && argp->help_filter) free ((char *) inp_text); /* We copied INP_TEXT, so free it now. */ if (post && argp->help_filter) /* Now see if we have to output a ARGP_KEY_HELP_EXTRA text. */ { text = (*argp->help_filter) (ARGP_KEY_HELP_EXTRA, 0, input); if (text) { if (anything || pre_blank) __argp_fmtstream_putc (stream, '\n'); __argp_fmtstream_puts (stream, text); free ((char *) text); if (__argp_fmtstream_point (stream) > __argp_fmtstream_lmargin (stream)) __argp_fmtstream_putc (stream, '\n'); anything = 1; } } if (child) while (child->argp && !(first_only && anything)) anything |= argp_doc ((child++)->argp, state, post, anything || pre_blank, first_only, stream); return anything; } /* Output a usage message for ARGP to STREAM. If called from argp_state_help, STATE is the relevant parsing state. FLAGS are from the set ARGP_HELP_*. NAME is what to use wherever a 'program name' is needed. */ static void _help (const struct argp *argp, const struct argp_state *state, FILE *stream, unsigned flags, char *name) { int anything = 0; /* Whether we've output anything. */ struct hol *hol = NULL; argp_fmtstream_t fs; if (! stream) return; #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __flockfile (stream); #endif if (! uparams.valid) fill_in_uparams (state); fs = __argp_make_fmtstream (stream, 0, uparams.rmargin, 0); if (! fs) { #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __funlockfile (stream); #endif return; } if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE | ARGP_HELP_LONG)) { hol = argp_hol (argp, 0); /* If present, these options always come last. */ hol_set_group (hol, "help", -1); hol_set_group (hol, "version", -1); hol_sort (hol); } if (flags & (ARGP_HELP_USAGE | ARGP_HELP_SHORT_USAGE)) /* Print a short "Usage:" message. */ { int first_pattern = 1, more_patterns; size_t num_pattern_levels = argp_args_levels (argp); char *pattern_levels = alloca (num_pattern_levels); memset (pattern_levels, 0, num_pattern_levels); do { int old_lm; int old_wm = __argp_fmtstream_set_wmargin (fs, uparams.usage_indent); char *levels = pattern_levels; if (first_pattern) __argp_fmtstream_printf (fs, "%s %s", dgettext (argp->argp_domain, "Usage:"), name); else __argp_fmtstream_printf (fs, "%s %s", dgettext (argp->argp_domain, " or: "), name); /* We set the lmargin as well as the wmargin, because hol_usage manually wraps options with newline to avoid annoying breaks. */ old_lm = __argp_fmtstream_set_lmargin (fs, uparams.usage_indent); if (flags & ARGP_HELP_SHORT_USAGE) /* Just show where the options go. */ { if (hol->num_entries > 0) __argp_fmtstream_puts (fs, dgettext (argp->argp_domain, " [OPTION...]")); } else /* Actually print the options. */ { hol_usage (hol, fs); flags |= ARGP_HELP_SHORT_USAGE; /* But only do so once. */ } more_patterns = argp_args_usage (argp, state, &levels, 1, fs); __argp_fmtstream_set_wmargin (fs, old_wm); __argp_fmtstream_set_lmargin (fs, old_lm); __argp_fmtstream_putc (fs, '\n'); anything = 1; first_pattern = 0; } while (more_patterns); } if (flags & ARGP_HELP_PRE_DOC) anything |= argp_doc (argp, state, 0, 0, 1, fs); if (flags & ARGP_HELP_SEE) { __argp_fmtstream_printf (fs, dgettext (argp->argp_domain, "\ Try '%s --help' or '%s --usage' for more information.\n"), name, name); anything = 1; } if (flags & ARGP_HELP_LONG) /* Print a long, detailed help message. */ { /* Print info about all the options. */ if (hol->num_entries > 0) { if (anything) __argp_fmtstream_putc (fs, '\n'); hol_help (hol, state, fs); anything = 1; } } if (flags & ARGP_HELP_POST_DOC) /* Print any documentation strings at the end. */ anything |= argp_doc (argp, state, 1, anything, 0, fs); if ((flags & ARGP_HELP_BUG_ADDR) && argp_program_bug_address) { if (anything) __argp_fmtstream_putc (fs, '\n'); __argp_fmtstream_printf (fs, dgettext (argp->argp_domain, "Report bugs to %s.\n"), argp_program_bug_address); anything = 1; } #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __funlockfile (stream); #endif if (hol) hol_free (hol); __argp_fmtstream_free (fs); } /* Output a usage message for ARGP to STREAM. FLAGS are from the set ARGP_HELP_*. NAME is what to use wherever a 'program name' is needed. */ void __argp_help (const struct argp *argp, FILE *stream, unsigned flags, char *name) { _help (argp, 0, stream, flags, name); } #ifdef weak_alias weak_alias (__argp_help, argp_help) #endif #if ! (defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME) char * __argp_short_program_name (void) { # if HAVE_DECL_PROGRAM_INVOCATION_NAME char *name = strrchr (program_invocation_name, '/'); return name ? name + 1 : program_invocation_name; # else /* FIXME: What now? Miles suggests that it is better to use NULL, but currently the value is passed on directly to fputs_unlocked, so that requires more changes. */ # if __GNUC__ || (__clang_major__ >= 4) # warning No reasonable value to return # endif /* __GNUC__ */ return ""; # endif } #endif /* Output, if appropriate, a usage message for STATE to STREAM. FLAGS are from the set ARGP_HELP_*. */ void __argp_state_help (const struct argp_state *state, FILE *stream, unsigned flags) { if ((!state || ! (state->flags & ARGP_NO_ERRS)) && stream) { if (state && (state->flags & ARGP_LONG_ONLY)) flags |= ARGP_HELP_LONG_ONLY; _help (state ? state->root_argp : 0, state, stream, flags, state ? state->name : __argp_short_program_name ()); if (!state || ! (state->flags & ARGP_NO_EXIT)) { if (flags & ARGP_HELP_EXIT_ERR) exit (argp_err_exit_status); if (flags & ARGP_HELP_EXIT_OK) exit (0); } } } #ifdef weak_alias weak_alias (__argp_state_help, argp_state_help) #endif /* If appropriate, print the printf string FMT and following args, preceded by the program name and ':', to stderr, and followed by a "Try ... --help" message, then exit (1). */ void __argp_error (const struct argp_state *state, const char *fmt, ...) { if (!state || !(state->flags & ARGP_NO_ERRS)) { FILE *stream = state ? state->err_stream : stderr; if (stream) { va_list ap; #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __flockfile (stream); #endif va_start (ap, fmt); #ifdef _LIBC char *buf; if (_IO_vasprintf (&buf, fmt, ap) < 0) buf = NULL; __fxprintf (stream, "%s: %s\n", state ? state->name : __argp_short_program_name (), buf); free (buf); #else fputs_unlocked (state ? state->name : __argp_short_program_name (), stream); putc_unlocked (':', stream); putc_unlocked (' ', stream); vfprintf (stream, fmt, ap); putc_unlocked ('\n', stream); #endif __argp_state_help (state, stream, ARGP_HELP_STD_ERR); va_end (ap); #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __funlockfile (stream); #endif } } } #ifdef weak_alias weak_alias (__argp_error, argp_error) #endif /* Similar to the standard gnu error-reporting function error(), but will respect the ARGP_NO_EXIT and ARGP_NO_ERRS flags in STATE, and will print to STATE->err_stream. This is useful for argument parsing code that is shared between program startup (when exiting is desired) and runtime option parsing (when typically an error code is returned instead). The difference between this function and argp_error is that the latter is for *parsing errors*, and the former is for other problems that occur during parsing but don't reflect a (syntactic) problem with the input. */ void __argp_failure (const struct argp_state *state, int status, int errnum, const char *fmt, ...) { if (!state || !(state->flags & ARGP_NO_ERRS)) { FILE *stream = state ? state->err_stream : stderr; if (stream) { #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __flockfile (stream); #endif #ifdef _LIBC __fxprintf (stream, "%s", state ? state->name : __argp_short_program_name ()); #else fputs_unlocked (state ? state->name : __argp_short_program_name (), stream); #endif if (fmt) { va_list ap; va_start (ap, fmt); #ifdef _LIBC char *buf; if (_IO_vasprintf (&buf, fmt, ap) < 0) buf = NULL; __fxprintf (stream, ": %s", buf); free (buf); #else putc_unlocked (':', stream); putc_unlocked (' ', stream); vfprintf (stream, fmt, ap); #endif va_end (ap); } if (errnum) { char buf[200]; #ifdef _LIBC __fxprintf (stream, ": %s", __strerror_r (errnum, buf, sizeof (buf))); #else char const *s = NULL; putc_unlocked (':', stream); putc_unlocked (' ', stream); # if GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R # if !GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P s = __strerror_r (errnum, buf, sizeof buf); # else if (__strerror_r (errnum, buf, sizeof buf) == 0) s = buf; # endif # endif if (! s && ! (s = strerror (errnum))) s = dgettext (state->root_argp->argp_domain, "Unknown system error"); fputs_unlocked (s, stream); #endif } #if _LIBC if (_IO_fwide (stream, 0) > 0) putwc_unlocked (L'\n', stream); else #endif putc_unlocked ('\n', stream); #if _LIBC || (HAVE_FLOCKFILE && HAVE_FUNLOCKFILE) __funlockfile (stream); #endif if (status && (!state || !(state->flags & ARGP_NO_EXIT))) exit (status); } } } #ifdef weak_alias weak_alias (__argp_failure, argp_failure) #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/argp-namefrob.h������������������������������������������������������0000644�0001750�0001750�00000013477�14557510504�015147� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Name frobnication for compiling argp outside of glibc Copyright (C) 1997-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #if !_LIBC /* This code is written for inclusion in gnu-libc, and uses names in the namespace reserved for libc. If we're not compiling in libc, define those names to be the normal ones instead. */ /* argp-parse functions */ #undef __argp_parse #define __argp_parse argp_parse #undef __option_is_end #define __option_is_end _option_is_end #undef __option_is_short #define __option_is_short _option_is_short #undef __argp_input #define __argp_input _argp_input /* argp-help functions */ #undef __argp_help #define __argp_help argp_help #undef __argp_error #define __argp_error argp_error #undef __argp_failure #define __argp_failure argp_failure #undef __argp_state_help #define __argp_state_help argp_state_help #undef __argp_usage #define __argp_usage argp_usage /* argp-fmtstream functions */ #undef __argp_make_fmtstream #define __argp_make_fmtstream argp_make_fmtstream #undef __argp_fmtstream_free #define __argp_fmtstream_free argp_fmtstream_free #undef __argp_fmtstream_putc #define __argp_fmtstream_putc argp_fmtstream_putc #undef __argp_fmtstream_puts #define __argp_fmtstream_puts argp_fmtstream_puts #undef __argp_fmtstream_write #define __argp_fmtstream_write argp_fmtstream_write #undef __argp_fmtstream_printf #define __argp_fmtstream_printf argp_fmtstream_printf #undef __argp_fmtstream_set_lmargin #define __argp_fmtstream_set_lmargin argp_fmtstream_set_lmargin #undef __argp_fmtstream_set_rmargin #define __argp_fmtstream_set_rmargin argp_fmtstream_set_rmargin #undef __argp_fmtstream_set_wmargin #define __argp_fmtstream_set_wmargin argp_fmtstream_set_wmargin #undef __argp_fmtstream_point #define __argp_fmtstream_point argp_fmtstream_point #undef __argp_fmtstream_update #define __argp_fmtstream_update _argp_fmtstream_update #undef __argp_fmtstream_ensure #define __argp_fmtstream_ensure _argp_fmtstream_ensure #undef __argp_fmtstream_lmargin #define __argp_fmtstream_lmargin argp_fmtstream_lmargin #undef __argp_fmtstream_rmargin #define __argp_fmtstream_rmargin argp_fmtstream_rmargin #undef __argp_fmtstream_wmargin #define __argp_fmtstream_wmargin argp_fmtstream_wmargin /* normal libc functions we call */ #undef __flockfile #define __flockfile flockfile #undef __funlockfile #define __funlockfile funlockfile #undef __mempcpy #define __mempcpy mempcpy #undef __sleep #define __sleep sleep #undef __strcasecmp #define __strcasecmp strcasecmp #undef __strchrnul #define __strchrnul strchrnul #undef __strerror_r #define __strerror_r strerror_r #undef __strndup #define __strndup strndup #undef __vsnprintf #define __vsnprintf vsnprintf #if (defined HAVE_DECL_CLEARERR_UNLOCKED && !HAVE_DECL_CLEARERR_UNLOCKED \ && !defined clearerr_unlocked) # define clearerr_unlocked(x) clearerr (x) #endif #if (defined HAVE_DECL_FEOF_UNLOCKED && !HAVE_DECL_FEOF_UNLOCKED \ && !defined feof_unlocked) # define feof_unlocked(x) feof (x) #endif #if (defined HAVE_DECL_FERROR_UNLOCKED && !HAVE_DECL_FERROR_UNLOCKED \ && !defined ferror_unlocked) # define ferror_unlocked(x) ferror (x) #endif #if (defined HAVE_DECL_FFLUSH_UNLOCKED && !HAVE_DECL_FFLUSH_UNLOCKED \ && !defined fflush_unlocked) # define fflush_unlocked(x) fflush (x) #endif #if (defined HAVE_DECL_FGETS_UNLOCKED && !HAVE_DECL_FGETS_UNLOCKED \ && !defined fgets_unlocked) # define fgets_unlocked(x,y,z) fgets (x,y,z) #endif #if (defined HAVE_DECL_FPUTC_UNLOCKED && !HAVE_DECL_FPUTC_UNLOCKED \ && !defined fputc_unlocked) # define fputc_unlocked(x,y) fputc (x,y) #endif #if (defined HAVE_DECL_FPUTS_UNLOCKED && !HAVE_DECL_FPUTS_UNLOCKED \ && !defined fputs_unlocked) # define fputs_unlocked(x,y) fputs (x,y) #endif #if (defined HAVE_DECL_FREAD_UNLOCKED && !HAVE_DECL_FREAD_UNLOCKED \ && !defined fread_unlocked) # define fread_unlocked(w,x,y,z) fread (w,x,y,z) #endif #if (defined HAVE_DECL_FWRITE_UNLOCKED && !HAVE_DECL_FWRITE_UNLOCKED \ && !defined fwrite_unlocked) # define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z) #endif #if (defined HAVE_DECL_GETC_UNLOCKED && !HAVE_DECL_GETC_UNLOCKED \ && !defined getc_unlocked) # define getc_unlocked(x) getc (x) #endif #if (defined HAVE_DECL_GETCHAR_UNLOCKED && !HAVE_DECL_GETCHAR_UNLOCKED \ && !defined getchar_unlocked) # define getchar_unlocked() getchar () #endif #if (defined HAVE_DECL_PUTC_UNLOCKED && !HAVE_DECL_PUTC_UNLOCKED \ && !defined putc_unlocked) # define putc_unlocked(x,y) putc (x,y) #endif #if (defined HAVE_DECL_PUTCHAR_UNLOCKED && !HAVE_DECL_PUTCHAR_UNLOCKED \ && !defined putchar_unlocked) # define putchar_unlocked(x) putchar (x) #endif #endif /* !_LIBC */ #ifndef __set_errno #define __set_errno(e) (errno = (e)) #endif #if defined GNULIB_ARGP_DISABLE_DIRNAME # define __argp_base_name(arg) arg #elif defined GNULIB_ARGP_EXTERN_BASENAME extern char *__argp_base_name (const char *arg); #else # include "basename-lgpl.h" # define __argp_base_name last_component #endif #if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME # define __argp_short_program_name() (program_invocation_short_name) #else extern char *__argp_short_program_name (void); #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/argp-parse.c���������������������������������������������������������0000644�0001750�0001750�00000076005�14557510504�014457� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hierarchical argument parsing, layered over getopt Copyright (C) 1995-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <alloca.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <limits.h> #include <getopt.h> #include <getopt_int.h> #ifdef _LIBC # include <libintl.h> # undef dgettext # define dgettext(domain, msgid) \ __dcgettext (domain, msgid, LC_MESSAGES) #else # include "gettext.h" #endif #define N_(msgid) msgid #include "argp.h" #include "argp-namefrob.h" #define alignto(n, d) ((((n) + (d) - 1) / (d)) * (d)) /* Getopt return values. */ #define KEY_END (-1) /* The end of the options. */ #define KEY_ARG 1 /* A non-option argument. */ #define KEY_ERR '?' /* An error parsing the options. */ /* The meta-argument used to prevent any further arguments being interpreted as options. */ #define QUOTE "--" /* The number of bits we steal in a long-option value for our own use. */ #define GROUP_BITS CHAR_BIT /* The number of bits available for the user value. */ #define USER_BITS ((sizeof ((struct option *)0)->val * CHAR_BIT) - GROUP_BITS) #define USER_MASK ((1 << USER_BITS) - 1) /* EZ alias for ARGP_ERR_UNKNOWN. */ #define EBADKEY ARGP_ERR_UNKNOWN /* Default options. */ /* When argp is given the --HANG switch, _ARGP_HANG is set and argp will sleep for one second intervals, decrementing _ARGP_HANG until it's zero. Thus you can force the program to continue by attaching a debugger and setting it to 0 yourself. */ static volatile int _argp_hang; #define OPT_PROGNAME -2 #define OPT_USAGE -3 #define OPT_HANG -4 static const struct argp_option argp_default_options[] = { {"help", '?', 0, 0, N_("give this help list"), -1}, {"usage", OPT_USAGE, 0, 0, N_("give a short usage message"), 0}, {"program-name",OPT_PROGNAME, N_("NAME"), OPTION_HIDDEN, N_("set the program name"), 0}, {"HANG", OPT_HANG, N_("SECS"), OPTION_ARG_OPTIONAL | OPTION_HIDDEN, N_("hang for SECS seconds (default 3600)"), 0}, {NULL, 0, 0, 0, NULL, 0} }; static error_t argp_default_parser (int key, char *arg, struct argp_state *state) { switch (key) { case '?': __argp_state_help (state, state->out_stream, ARGP_HELP_STD_HELP); break; case OPT_USAGE: __argp_state_help (state, state->out_stream, ARGP_HELP_USAGE | ARGP_HELP_EXIT_OK); break; case OPT_PROGNAME: /* Set the program name. */ #if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_NAME program_invocation_name = arg; #endif /* [Note that some systems only have PROGRAM_INVOCATION_SHORT_NAME (aka __PROGNAME), in which case, PROGRAM_INVOCATION_NAME is just defined to be that, so we have to be a bit careful here.] */ /* Update what we use for messages. */ state->name = __argp_base_name (arg); #if defined _LIBC || HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME program_invocation_short_name = state->name; #endif if ((state->flags & (ARGP_PARSE_ARGV0 | ARGP_NO_ERRS)) == ARGP_PARSE_ARGV0) /* Update what getopt uses too. */ state->argv[0] = arg; break; case OPT_HANG: _argp_hang = atoi (arg ? arg : "3600"); while (_argp_hang-- > 0) __sleep (1); break; default: return EBADKEY; } return 0; } static const struct argp argp_default_argp = {argp_default_options, &argp_default_parser, NULL, NULL, NULL, NULL, "libc"}; static const struct argp_option argp_version_options[] = { {"version", 'V', 0, 0, N_("print program version"), -1}, {NULL, 0, 0, 0, NULL, 0} }; static error_t argp_version_parser (int key, char *arg, struct argp_state *state) { switch (key) { case 'V': if (argp_program_version_hook) (*argp_program_version_hook) (state->out_stream, state); else if (argp_program_version) fprintf (state->out_stream, "%s\n", argp_program_version); else __argp_error (state, "%s", dgettext (state->root_argp->argp_domain, "(PROGRAM ERROR) No version known!?")); if (! (state->flags & ARGP_NO_EXIT)) exit (0); break; default: return EBADKEY; } return 0; } static const struct argp argp_version_argp = {argp_version_options, &argp_version_parser, NULL, NULL, NULL, NULL, "libc"}; /* Returns the offset into the getopt long options array LONG_OPTIONS of a long option with called NAME, or -1 if none is found. Passing NULL as NAME will return the number of options. */ static int find_long_option (struct option *long_options, const char *name) { struct option *l = long_options; while (l->name != NULL) if (name != NULL && strcmp (l->name, name) == 0) return l - long_options; else l++; if (name == NULL) return l - long_options; else return -1; } /* The state of a "group" during parsing. Each group corresponds to a particular argp structure from the tree of such descending from the top level argp passed to argp_parse. */ struct group { /* This group's parsing function. */ argp_parser_t parser; /* Which argp this group is from. */ const struct argp *argp; /* Points to the point in SHORT_OPTS corresponding to the end of the short options for this group. We use it to determine from which group a particular short options is from. */ char *short_end; /* The number of non-option args successfully handled by this parser. */ unsigned args_processed; /* This group's parser's parent's group. */ struct group *parent; unsigned parent_index; /* And the our position in the parent. */ /* These fields are swapped into and out of the state structure when calling this group's parser. */ void *input, **child_inputs; void *hook; }; /* Call GROUP's parser with KEY and ARG, swapping any group-specific info from STATE before calling, and back into state afterwards. If GROUP has no parser, EBADKEY is returned. */ static error_t group_parse (struct group *group, struct argp_state *state, int key, char *arg) { if (group->parser) { error_t err; state->hook = group->hook; state->input = group->input; state->child_inputs = group->child_inputs; state->arg_num = group->args_processed; err = (*group->parser)(key, arg, state); group->hook = state->hook; return err; } else return EBADKEY; } struct parser { const struct argp *argp; /* SHORT_OPTS is the getopt short options string for the union of all the groups of options. */ char *short_opts; /* LONG_OPTS is the array of getop long option structures for the union of all the groups of options. */ struct option *long_opts; /* OPT_DATA is the getopt data used for the reentrant getopt. */ struct _getopt_data opt_data; /* States of the various parsing groups. */ struct group *groups; /* The end of the GROUPS array. */ struct group *egroup; /* A vector containing storage for the CHILD_INPUTS field in all groups. */ void **child_inputs; /* True if we think using getopt is still useful; if false, then remaining arguments are just passed verbatim with ARGP_KEY_ARG. This is cleared whenever getopt returns KEY_END, but may be set again if the user moves the next argument pointer backwards. */ int try_getopt; /* State block supplied to parsing routines. */ struct argp_state state; /* Memory used by this parser. */ void *storage; }; /* The next usable entries in the various parser tables being filled in by convert_options. */ struct parser_convert_state { struct parser *parser; char *short_end; struct option *long_end; void **child_inputs_end; }; /* Converts all options in ARGP (which is put in GROUP) and ancestors into getopt options stored in SHORT_OPTS and LONG_OPTS; SHORT_END and CVT->LONG_END are the points at which new options are added. Returns the next unused group entry. CVT holds state used during the conversion. */ static struct group * convert_options (const struct argp *argp, struct group *parent, unsigned parent_index, struct group *group, struct parser_convert_state *cvt) { /* REAL is the most recent non-alias value of OPT. */ const struct argp_option *real = argp->options; const struct argp_child *children = argp->children; if (real || argp->parser) { const struct argp_option *opt; if (real) for (opt = real; !__option_is_end (opt); opt++) { if (! (opt->flags & OPTION_ALIAS)) /* OPT isn't an alias, so we can use values from it. */ real = opt; if (! (real->flags & OPTION_DOC)) /* A real option (not just documentation). */ { if (__option_is_short (opt)) /* OPT can be used as a short option. */ { *cvt->short_end++ = opt->key; if (real->arg) { *cvt->short_end++ = ':'; if (real->flags & OPTION_ARG_OPTIONAL) *cvt->short_end++ = ':'; } *cvt->short_end = '\0'; /* keep 0 terminated */ } if (opt->name && find_long_option (cvt->parser->long_opts, opt->name) < 0) /* OPT can be used as a long option. */ { cvt->long_end->name = opt->name; cvt->long_end->has_arg = (real->arg ? (real->flags & OPTION_ARG_OPTIONAL ? optional_argument : required_argument) : no_argument); cvt->long_end->flag = 0; /* we add a disambiguating code to all the user's values (which is removed before we actually call the function to parse the value); this means that the user loses use of the high 8 bits in all his values (the sign of the lower bits is preserved however)... */ cvt->long_end->val = ((opt->key ? opt->key : real->key) & USER_MASK) + (((group - cvt->parser->groups) + 1) << USER_BITS); /* Keep the LONG_OPTS list terminated. */ (++cvt->long_end)->name = NULL; } } } group->parser = argp->parser; group->argp = argp; group->short_end = cvt->short_end; group->args_processed = 0; group->parent = parent; group->parent_index = parent_index; group->input = NULL; group->hook = NULL; group->child_inputs = NULL; if (children) /* Assign GROUP's CHILD_INPUTS field some space from CVT->child_inputs_end.*/ { unsigned num_children = 0; while (children[num_children].argp) num_children++; group->child_inputs = cvt->child_inputs_end; cvt->child_inputs_end += num_children; } parent = group++; } else parent = NULL; if (children) { unsigned index = 0; while (children->argp) group = convert_options (children++->argp, parent, index++, group, cvt); } return group; } /* Find the merged set of getopt options, with keys appropriately prefixed. */ static void parser_convert (struct parser *parser, const struct argp *argp, int flags) { struct parser_convert_state cvt; cvt.parser = parser; cvt.short_end = parser->short_opts; cvt.long_end = parser->long_opts; cvt.child_inputs_end = parser->child_inputs; if (flags & ARGP_IN_ORDER) *cvt.short_end++ = '-'; else if (flags & ARGP_NO_ARGS) *cvt.short_end++ = '+'; *cvt.short_end = '\0'; cvt.long_end->name = NULL; parser->argp = argp; if (argp) parser->egroup = convert_options (argp, 0, 0, parser->groups, &cvt); else parser->egroup = parser->groups; /* No parsers at all! */ } /* Lengths of various parser fields which we will allocated. */ struct parser_sizes { size_t short_len; /* Getopt short options string. */ size_t long_len; /* Getopt long options vector. */ size_t num_groups; /* Group structures we allocate. */ size_t num_child_inputs; /* Child input slots. */ }; /* For ARGP, increments the NUM_GROUPS field in SZS by the total number of argp structures descended from it, and the SHORT_LEN & LONG_LEN fields by the maximum lengths of the resulting merged getopt short options string and long-options array, respectively. */ static void calc_sizes (const struct argp *argp, struct parser_sizes *szs) { const struct argp_child *child = argp->children; const struct argp_option *opt = argp->options; if (opt || argp->parser) { szs->num_groups++; if (opt) { int num_opts = 0; while (!__option_is_end (opt++)) num_opts++; szs->short_len += num_opts * 3; /* opt + up to 2 ':'s */ szs->long_len += num_opts; } } if (child) while (child->argp) { calc_sizes ((child++)->argp, szs); szs->num_child_inputs++; } } /* Initializes PARSER to parse ARGP in a manner described by FLAGS. */ static error_t parser_init (struct parser *parser, const struct argp *argp, int argc, char **argv, int flags, void *input) { error_t err = 0; struct group *group; struct parser_sizes szs; struct _getopt_data opt_data = _GETOPT_DATA_INITIALIZER; char *storage; size_t glen, gsum; size_t clen, csum; size_t llen, lsum; size_t slen, ssum; szs.short_len = (flags & ARGP_NO_ARGS) ? 0 : 1; szs.long_len = 0; szs.num_groups = 0; szs.num_child_inputs = 0; if (argp) calc_sizes (argp, &szs); /* Lengths of the various bits of storage used by PARSER. */ glen = (szs.num_groups + 1) * sizeof (struct group); clen = szs.num_child_inputs * sizeof (void *); llen = (szs.long_len + 1) * sizeof (struct option); slen = szs.short_len + 1; /* Sums of previous lengths, properly aligned. There's no need to align gsum, since struct group is aligned at least as strictly as void * (since it contains a void * member). And there's no need to align lsum, since struct option is aligned at least as strictly as char. */ gsum = glen; csum = alignto (gsum + clen, alignof (struct option)); lsum = csum + llen; ssum = lsum + slen; parser->storage = malloc (ssum); if (! parser->storage) return ENOMEM; storage = parser->storage; parser->groups = parser->storage; parser->child_inputs = (void **) (storage + gsum); parser->long_opts = (struct option *) (storage + csum); parser->short_opts = storage + lsum; parser->opt_data = opt_data; memset (parser->child_inputs, 0, clen); parser_convert (parser, argp, flags); memset (&parser->state, 0, sizeof (struct argp_state)); parser->state.root_argp = parser->argp; parser->state.argc = argc; parser->state.argv = argv; parser->state.flags = flags; parser->state.err_stream = stderr; parser->state.out_stream = stdout; parser->state.next = 0; /* Tell getopt to initialize. */ parser->state.pstate = parser; parser->try_getopt = 1; /* Call each parser for the first time, giving it a chance to propagate values to child parsers. */ if (parser->groups < parser->egroup) parser->groups->input = input; for (group = parser->groups; group < parser->egroup && (!err || err == EBADKEY); group++) { if (group->parent) /* If a child parser, get the initial input value from the parent. */ group->input = group->parent->child_inputs[group->parent_index]; if (!group->parser && group->argp->children && group->argp->children->argp) /* For the special case where no parsing function is supplied for an argp, propagate its input to its first child, if any (this just makes very simple wrapper argps more convenient). */ group->child_inputs[0] = group->input; err = group_parse (group, &parser->state, ARGP_KEY_INIT, 0); } if (err == EBADKEY) err = 0; /* Some parser didn't understand. */ if (err) return err; if (parser->state.flags & ARGP_NO_ERRS) { parser->opt_data.opterr = 0; if (parser->state.flags & ARGP_PARSE_ARGV0) /* getopt always skips ARGV[0], so we have to fake it out. As long as OPTERR is 0, then it shouldn't actually try to access it. */ parser->state.argv--, parser->state.argc++; } else parser->opt_data.opterr = 1; /* Print error messages. */ if (parser->state.argv == argv && argv[0]) /* There's an argv[0]; use it for messages. */ parser->state.name = __argp_base_name (argv[0]); else parser->state.name = __argp_short_program_name (); return 0; } /* Free any storage consumed by PARSER (but not PARSER itself). */ static error_t parser_finalize (struct parser *parser, error_t err, int arg_ebadkey, int *end_index) { struct group *group; if (err == EBADKEY && arg_ebadkey) /* Suppress errors generated by unparsed arguments. */ err = 0; if (! err) { if (parser->state.next == parser->state.argc) /* We successfully parsed all arguments! Call all the parsers again, just a few more times... */ { for (group = parser->groups; group < parser->egroup && (!err || err==EBADKEY); group++) if (group->args_processed == 0) err = group_parse (group, &parser->state, ARGP_KEY_NO_ARGS, 0); for (group = parser->egroup - 1; group >= parser->groups && (!err || err==EBADKEY); group--) err = group_parse (group, &parser->state, ARGP_KEY_END, 0); if (err == EBADKEY) err = 0; /* Some parser didn't understand. */ /* Tell the user that all arguments are parsed. */ if (end_index) *end_index = parser->state.next; } else if (end_index) /* Return any remaining arguments to the user. */ *end_index = parser->state.next; else /* No way to return the remaining arguments, they must be bogus. */ { if (!(parser->state.flags & ARGP_NO_ERRS) && parser->state.err_stream) fprintf (parser->state.err_stream, dgettext (parser->argp->argp_domain, "%s: Too many arguments\n"), parser->state.name); err = EBADKEY; } } /* Okay, we're all done, with either an error or success; call the parsers to indicate which one. */ if (err) { /* Maybe print an error message. */ if (err == EBADKEY) /* An appropriate message describing what the error was should have been printed earlier. */ __argp_state_help (&parser->state, parser->state.err_stream, ARGP_HELP_STD_ERR); /* Since we didn't exit, give each parser an error indication. */ for (group = parser->groups; group < parser->egroup; group++) group_parse (group, &parser->state, ARGP_KEY_ERROR, 0); } else /* Notify parsers of success, and propagate back values from parsers. */ { /* We pass over the groups in reverse order so that child groups are given a chance to do there processing before passing back a value to the parent. */ for (group = parser->egroup - 1 ; group >= parser->groups && (!err || err == EBADKEY) ; group--) err = group_parse (group, &parser->state, ARGP_KEY_SUCCESS, 0); if (err == EBADKEY) err = 0; /* Some parser didn't understand. */ } /* Call parsers once more, to do any final cleanup. Errors are ignored. */ for (group = parser->egroup - 1; group >= parser->groups; group--) group_parse (group, &parser->state, ARGP_KEY_FINI, 0); if (err == EBADKEY) err = EINVAL; free (parser->storage); return err; } /* Call the user parsers to parse the non-option argument VAL, at the current position, returning any error. The state NEXT pointer is assumed to have been adjusted (by getopt) to point after this argument; this function will adjust it correctly to reflect however many args actually end up being consumed. */ static error_t parser_parse_arg (struct parser *parser, char *val) { /* Save the starting value of NEXT, first adjusting it so that the arg we're parsing is again the front of the arg vector. */ int index = --parser->state.next; error_t err = EBADKEY; struct group *group; int key = 0; /* Which of ARGP_KEY_ARG[S] we used. */ /* Try to parse the argument in each parser. */ for (group = parser->groups ; group < parser->egroup && err == EBADKEY ; group++) { parser->state.next++; /* For ARGP_KEY_ARG, consume the arg. */ key = ARGP_KEY_ARG; err = group_parse (group, &parser->state, key, val); if (err == EBADKEY) /* This parser doesn't like ARGP_KEY_ARG; try ARGP_KEY_ARGS instead. */ { parser->state.next--; /* For ARGP_KEY_ARGS, put back the arg. */ key = ARGP_KEY_ARGS; err = group_parse (group, &parser->state, key, 0); } } if (! err) { if (key == ARGP_KEY_ARGS) /* The default for ARGP_KEY_ARGS is to assume that if NEXT isn't changed by the user, *all* arguments should be considered consumed. */ parser->state.next = parser->state.argc; if (parser->state.next > index) /* Remember that we successfully processed a non-option argument -- but only if the user hasn't gotten tricky and set the clock back. */ (--group)->args_processed += (parser->state.next - index); else /* The user wants to reparse some args, give getopt another try. */ parser->try_getopt = 1; } return err; } /* Call the user parsers to parse the option OPT, with argument VAL, at the current position, returning any error. */ static error_t parser_parse_opt (struct parser *parser, int opt, char *val) { /* The group key encoded in the high bits; 0 for short opts or group_number + 1 for long opts. */ int group_key = opt >> USER_BITS; error_t err = EBADKEY; if (group_key == 0) /* A short option. By comparing OPT's position in SHORT_OPTS to the various starting positions in each group's SHORT_END field, we can determine which group OPT came from. */ { struct group *group; char *short_index = strchr (parser->short_opts, opt); if (short_index) for (group = parser->groups; group < parser->egroup; group++) if (group->short_end > short_index) { err = group_parse (group, &parser->state, opt, parser->opt_data.optarg); break; } } else /* A long option. Preserve the sign in the user key, without invoking undefined behavior. Assume two's complement. */ { int user_key = ((opt & (1 << (USER_BITS - 1))) ? ~USER_MASK : 0) | (opt & USER_MASK); err = group_parse (&parser->groups[group_key - 1], &parser->state, user_key, parser->opt_data.optarg); } if (err == EBADKEY) /* At least currently, an option not recognized is an error in the parser, because we pre-compute which parser is supposed to deal with each option. */ { static const char bad_key_err[] = N_("(PROGRAM ERROR) Option should have been recognized!?"); if (group_key == 0) __argp_error (&parser->state, "-%c: %s", opt, dgettext (parser->argp->argp_domain, bad_key_err)); else { struct option *long_opt = parser->long_opts; while (long_opt->val != opt && long_opt->name) long_opt++; __argp_error (&parser->state, "--%s: %s", long_opt->name ? long_opt->name : "???", dgettext (parser->argp->argp_domain, bad_key_err)); } } return err; } /* Parse the next argument in PARSER (as indicated by PARSER->state.next). Any error from the parsers is returned, and *ARGP_EBADKEY indicates whether a value of EBADKEY is due to an unrecognized argument (which is generally not fatal). */ static error_t parser_parse_next (struct parser *parser, int *arg_ebadkey) { int opt; error_t err = 0; if (parser->state.quoted && parser->state.next < parser->state.quoted) /* The next argument pointer has been moved to before the quoted region, so pretend we never saw the quoting "--", and give getopt another chance. If the user hasn't removed it, getopt will just process it again. */ parser->state.quoted = 0; if (parser->try_getopt && !parser->state.quoted) /* Give getopt a chance to parse this. */ { /* Put it back in OPTIND for getopt. */ parser->opt_data.optind = parser->state.next; /* Distinguish KEY_ERR from a real option. */ parser->opt_data.optopt = KEY_END; if (parser->state.flags & ARGP_LONG_ONLY) opt = _getopt_long_only_r (parser->state.argc, parser->state.argv, parser->short_opts, parser->long_opts, 0, &parser->opt_data); else opt = _getopt_long_r (parser->state.argc, parser->state.argv, parser->short_opts, parser->long_opts, 0, &parser->opt_data); /* And see what getopt did. */ parser->state.next = parser->opt_data.optind; if (opt == KEY_END) /* Getopt says there are no more options, so stop using getopt; we'll continue if necessary on our own. */ { parser->try_getopt = 0; if (parser->state.next > 1 && strcmp (parser->state.argv[parser->state.next - 1], QUOTE) == 0) /* Not only is this the end of the options, but it's a "quoted" region, which may have args that *look* like options, so we definitely shouldn't try to use getopt past here, whatever happens. */ parser->state.quoted = parser->state.next; } else if (opt == KEY_ERR && parser->opt_data.optopt != KEY_END) /* KEY_ERR can have the same value as a valid user short option, but in the case of a real error, getopt sets OPTOPT to the offending character, which can never be KEY_END. */ { *arg_ebadkey = 0; return EBADKEY; } } else opt = KEY_END; if (opt == KEY_END) { /* We're past what getopt considers the options. */ if (parser->state.next >= parser->state.argc || (parser->state.flags & ARGP_NO_ARGS)) /* Indicate that we're done. */ { *arg_ebadkey = 1; return EBADKEY; } else /* A non-option arg; simulate what getopt might have done. */ { opt = KEY_ARG; parser->opt_data.optarg = parser->state.argv[parser->state.next++]; } } if (opt == KEY_ARG) /* A non-option argument; try each parser in turn. */ err = parser_parse_arg (parser, parser->opt_data.optarg); else err = parser_parse_opt (parser, opt, parser->opt_data.optarg); if (err == EBADKEY) *arg_ebadkey = (opt == KEY_END || opt == KEY_ARG); return err; } /* Parse the options strings in ARGC & ARGV according to the argp in ARGP. FLAGS is one of the ARGP_ flags above. If END_INDEX is non-NULL, the index in ARGV of the first unparsed option is returned in it. If an unknown option is present, EINVAL is returned; if some parser routine returned a non-zero value, it is returned; otherwise 0 is returned. */ error_t __argp_parse (const struct argp *argp, int argc, char **argv, unsigned flags, int *end_index, void *input) { error_t err; struct parser parser; /* If true, then err == EBADKEY is a result of a non-option argument failing to be parsed (which in some cases isn't actually an error). */ int arg_ebadkey = 0; #ifndef _LIBC if (!(flags & ARGP_PARSE_ARGV0)) { #if HAVE_DECL_PROGRAM_INVOCATION_NAME if (!program_invocation_name) program_invocation_name = argv[0]; #endif #if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME if (!program_invocation_short_name) program_invocation_short_name = __argp_base_name (argv[0]); #endif } #endif if (! (flags & ARGP_NO_HELP)) /* Add our own options. */ { struct argp_child *child = alloca (4 * sizeof (struct argp_child)); struct argp *top_argp = alloca (sizeof (struct argp)); /* TOP_ARGP has no options, it just serves to group the user & default argps. */ memset (top_argp, 0, sizeof (*top_argp)); top_argp->children = child; memset (child, 0, 4 * sizeof (struct argp_child)); if (argp) (child++)->argp = argp; (child++)->argp = &argp_default_argp; if (argp_program_version || argp_program_version_hook) (child++)->argp = &argp_version_argp; child->argp = NULL; argp = top_argp; } /* Construct a parser for these arguments. */ err = parser_init (&parser, argp, argc, argv, flags, input); if (! err) /* Parse! */ { while (! err) err = parser_parse_next (&parser, &arg_ebadkey); err = parser_finalize (&parser, err, arg_ebadkey, end_index); } return err; } #ifdef weak_alias weak_alias (__argp_parse, argp_parse) #endif /* Return the input field for ARGP in the parser corresponding to STATE; used by the help routines. */ void * __argp_input (const struct argp *argp, const struct argp_state *state) { if (state) { struct group *group; struct parser *parser = state->pstate; for (group = parser->groups; group < parser->egroup; group++) if (group->argp == argp) return group->input; } return NULL; } #ifdef weak_alias weak_alias (__argp_input, _argp_input) #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/argp-pin.c�����������������������������������������������������������0000644�0001750�0001750�00000002334�14557510504�014125� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Full and short program names for argp module Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <stddef.h> #ifndef HAVE_PROGRAM_INVOCATION_SHORT_NAME char *program_invocation_short_name = NULL; #endif #ifndef HAVE_PROGRAM_INVOCATION_NAME char *program_invocation_name = NULL; #endif #if (defined HAVE_PROGRAM_INVOCATION_SHORT_NAME \ && defined HAVE_PROGRAM_INVOCATION_NAME) /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/argp-pv.c������������������������������������������������������������0000644�0001750�0001750�00000003035�14557510504�013763� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Default definition for ARGP_PROGRAM_VERSION. Copyright (C) 1996-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* If set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which will print this string followed by a newline and exit (unless the ARGP_NO_EXIT flag is used). Overridden by ARGP_PROGRAM_VERSION_HOOK. */ const char *argp_program_version /* This variable should be zero-initialized. On most systems, putting it into BSS is sufficient. Not so on Mac OS X 10.3 and 10.4, see <https://lists.gnu.org/r/bug-gnulib/2009-01/msg00329.html> <https://lists.gnu.org/r/bug-gnulib/2009-08/msg00096.html>. */ #if defined __ELF__ /* On ELF systems, variables in BSS behave well. */ #else = (const char *) 0 #endif ; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/argp-pvh.c�����������������������������������������������������������0000644�0001750�0001750�00000002555�14557510504�014141� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Default definition for ARGP_PROGRAM_VERSION_HOOK. Copyright (C) 1996-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include "argp.h" /* If set by the user program to a non-zero value, then a default option --version is added (unless the ARGP_NO_HELP flag is used), which calls this function with a stream to print the version to and a pointer to the current parsing state, and then exits (unless the ARGP_NO_EXIT flag is used). This variable takes precedent over ARGP_PROGRAM_VERSION. */ void (*argp_program_version_hook) (FILE *stream, struct argp_state *state) = NULL; ���������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/argp-xinl.c����������������������������������������������������������0000644�0001750�0001750�00000002605�14557510504�014312� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Real definitions for extern inline functions in argp.h Copyright (C) 1997-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Miles Bader <miles@gnu.ai.mit.edu>. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #if defined _LIBC || defined HAVE_FEATURES_H # include <features.h> #endif #ifndef __USE_EXTERN_INLINES # define __USE_EXTERN_INLINES 1 #endif #ifdef _LIBC # define ARGP_EI #else # define ARGP_EI _GL_EXTERN_INLINE #endif #undef __OPTIMIZE__ #define __OPTIMIZE__ 1 #include "argp.h" /* Add weak aliases. */ #if _LIBC - 0 && defined (weak_alias) weak_alias (__argp_usage, argp_usage) weak_alias (__option_is_short, _option_is_short) weak_alias (__option_is_end, _option_is_end) #endif ���������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/openat-priv.h��������������������������������������������������������0000644�0001750�0001750�00000005064�14557510505�014665� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internals for openat-like functions. Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #ifndef _GL_HEADER_OPENAT_PRIV #define _GL_HEADER_OPENAT_PRIV #include <errno.h> #include <limits.h> #include <stdlib.h> /* Maximum number of bytes that it is safe to allocate as a single array on the stack, and that is known as a compile-time constant. The assumption is that we'll touch the array very quickly, or a temporary very near the array, provoking an out-of-memory trap. On some operating systems, there is only one guard page for the stack, and a page size can be as small as 4096 bytes. Subtract 64 in the hope that this will let the compiler touch a nearby temporary and provoke a trap. */ #define SAFER_ALLOCA_MAX (4096 - 64) #define SAFER_ALLOCA(m) ((m) < SAFER_ALLOCA_MAX ? (m) : SAFER_ALLOCA_MAX) #if defined PATH_MAX # define OPENAT_BUFFER_SIZE SAFER_ALLOCA (PATH_MAX) #elif defined _XOPEN_PATH_MAX # define OPENAT_BUFFER_SIZE SAFER_ALLOCA (_XOPEN_PATH_MAX) #else # define OPENAT_BUFFER_SIZE SAFER_ALLOCA (1024) #endif char *openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file); /* Trying to access a BUILD_PROC_NAME file will fail on systems without /proc support, and even on systems *with* ProcFS support. Return nonzero if the failure may be legitimate, e.g., because /proc is not readable, or the particular .../fd/N directory is not present. */ #define EXPECTED_ERRNO(Errno) \ ((Errno) == ENOTDIR || (Errno) == ENOENT \ || (Errno) == EPERM || (Errno) == EACCES \ || (Errno) == ENOSYS /* Solaris 8 */ \ || (Errno) == EOPNOTSUPP /* FreeBSD */) /* Wrapper function shared among linkat and renameat. */ int at_func2 (int fd1, char const *file1, int fd2, char const *file2, int (*func) (char const *file1, char const *file2)); #endif /* _GL_HEADER_OPENAT_PRIV */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/openat-proc.c��������������������������������������������������������0000644�0001750�0001750�00000011410�14557510505�014633� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create /proc/self/fd-related names for subfiles of open directories. Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include "openat-priv.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef __KLIBC__ /* OS/2 */ # include <InnoTekLIBC/backend.h> #endif #ifdef __MVS__ /* z/OS */ # include <termios.h> #endif #include "intprops.h" /* Set BUF to the name of the subfile of the directory identified by FD, where the subfile is named FILE. If successful, return BUF if the result fits in BUF, dynamically allocated memory otherwise. Return NULL (setting errno) on error. */ char * openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file) { char *result = buf; int dirlen; /* Make sure the caller gets ENOENT when appropriate. */ if (!*file) { buf[0] = '\0'; return buf; } #if !(defined __KLIBC__ || defined __MVS__) /* Generic code for Linux, Solaris, and similar platforms. */ # define PROC_SELF_FD_FORMAT "/proc/self/fd/%d/" { enum { PROC_SELF_FD_DIR_SIZE_BOUND = (sizeof PROC_SELF_FD_FORMAT - (sizeof "%d" - 1) + INT_STRLEN_BOUND (int)) }; static int proc_status = 0; if (! proc_status) { /* Set PROC_STATUS to a positive value if /proc/self/fd is reliable, and a negative value otherwise. Solaris 10 /proc/self/fd mishandles "..", and any file name might expand to ".." after symbolic link expansion, so avoid /proc/self/fd if it mishandles "..". Solaris 10 has openat, but this problem is exhibited on code that built on Solaris 8 and running on Solaris 10. */ int proc_self_fd = open ("/proc/self/fd", O_SEARCH | O_DIRECTORY | O_NOCTTY | O_NONBLOCK | O_CLOEXEC); if (proc_self_fd < 0) proc_status = -1; else { /* Detect whether /proc/self/fd/%i/../fd exists, where %i is the number of a file descriptor open on /proc/self/fd. On Linux, that name resolves to /proc/self/fd, which was opened above. However, on Solaris, it may resolve to /proc/self/fd/fd, which cannot exist, since all names in /proc/self/fd are numeric. */ char dotdot_buf[PROC_SELF_FD_DIR_SIZE_BOUND + sizeof "../fd" - 1]; sprintf (dotdot_buf, PROC_SELF_FD_FORMAT "../fd", proc_self_fd); proc_status = access (dotdot_buf, F_OK) ? -1 : 1; close (proc_self_fd); } } if (proc_status < 0) return NULL; else { size_t bufsize = PROC_SELF_FD_DIR_SIZE_BOUND + strlen (file); if (OPENAT_BUFFER_SIZE < bufsize) { result = malloc (bufsize); if (! result) return NULL; } dirlen = sprintf (result, PROC_SELF_FD_FORMAT, fd); } } #else /* (defined __KLIBC__ || defined __MVS__), i.e. OS/2 or z/OS */ /* OS/2 kLIBC provides a function to retrieve a path from a fd. */ { size_t bufsize; # ifdef __KLIBC__ char dir[_MAX_PATH]; if (__libc_Back_ioFHToPath (fd, dir, sizeof dir)) return NULL; # endif # ifdef __MVS__ char dir[_XOPEN_PATH_MAX]; /* Documentation: https://www.ibm.com/docs/en/zos/2.2.0?topic=functions-w-ioctl-w-pioctl-control-devices */ if (w_ioctl (fd, _IOCC_GPN, sizeof dir, dir) < 0) return NULL; /* Documentation: https://www.ibm.com/docs/en/zos/2.2.0?topic=functions-e2a-l-convert-characters-from-ebcdic-ascii */ dirlen = __e2a_l (dir, strlen (dir)); if (dirlen < 0 || dirlen >= sizeof dir) return NULL; dir[dirlen] = '\0'; # endif dirlen = strlen (dir); bufsize = dirlen + 1 + strlen (file) + 1; /* 1 for '/', 1 for null */ if (OPENAT_BUFFER_SIZE < bufsize) { result = malloc (bufsize); if (! result) return NULL; } strcpy (result, dir); result[dirlen++] = '/'; } #endif strcpy (result + dirlen, file); return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/basename-lgpl.c������������������������������������������������������0000644�0001750�0001750�00000003440�14557510504�015116� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* basename.c -- return the last element in a file name Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "basename-lgpl.h" #include <string.h> #include "filename.h" char * last_component (char const *name) { char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); char const *p; bool last_was_slash = false; while (ISSLASH (*base)) base++; for (p = base; *p; p++) { if (ISSLASH (*p)) last_was_slash = true; else if (last_was_slash) { base = p; last_was_slash = false; } } return (char *) base; } size_t base_len (char const *name) { size_t len; size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1 && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2]) return 2; if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len && len == prefix_len && ISSLASH (name[prefix_len])) return prefix_len + 1; return len; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/btowc.c��������������������������������������������������������������0000644�0001750�0001750�00000002445�14557510504�013531� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert unibyte character to wide character. Copyright (C) 2008, 2010-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <stdio.h> #include <stdlib.h> #include <string.h> wint_t btowc (int c) { if (c != EOF) { char buf[1]; wchar_t wc; buf[0] = c; #if HAVE_MBRTOWC mbstate_t state; mbszero (&state); size_t ret = mbrtowc (&wc, buf, 1, &state); if (!(ret == (size_t)(-1) || ret == (size_t)(-2))) #else if (mbtowc (&wc, buf, 1) >= 0) #endif return wc; } return WEOF; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c-ctype.h������������������������������������������������������������0000644�0001750�0001750�00000022530�14557510504�013761� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character handling in C locale. These functions work like the corresponding functions in <ctype.h>, except that they have the C (POSIX) locale hardwired, whereas the <ctype.h> functions' behaviour depends on the current locale set via setlocale. Copyright (C) 2000-2003, 2006, 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef C_CTYPE_H #define C_CTYPE_H /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef C_CTYPE_INLINE # define C_CTYPE_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* The functions defined in this file assume the "C" locale and a character set without diacritics (ASCII-US or EBCDIC-US or something like that). Even if the "C" locale on a particular system is an extension of the ASCII character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it is ISO-8859-1), the functions in this file recognize only the ASCII characters. */ #if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) /* The character set is ASCII or one of its variants or extensions, not EBCDIC. Testing the value of '\n' and '\r' is not relevant. */ # define C_CTYPE_ASCII 1 #elif ! (' ' == '\x40' && '0' == '\xf0' \ && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \ && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2') # error "Only ASCII and EBCDIC are supported" #endif #if 'A' < 0 # error "EBCDIC and char is signed -- not supported" #endif /* Cases for control characters. */ #define _C_CTYPE_CNTRL \ case '\a': case '\b': case '\f': case '\n': \ case '\r': case '\t': case '\v': \ _C_CTYPE_OTHER_CNTRL /* ASCII control characters other than those with \-letter escapes. */ #if C_CTYPE_ASCII # define _C_CTYPE_OTHER_CNTRL \ case '\x00': case '\x01': case '\x02': case '\x03': \ case '\x04': case '\x05': case '\x06': case '\x0e': \ case '\x0f': case '\x10': case '\x11': case '\x12': \ case '\x13': case '\x14': case '\x15': case '\x16': \ case '\x17': case '\x18': case '\x19': case '\x1a': \ case '\x1b': case '\x1c': case '\x1d': case '\x1e': \ case '\x1f': case '\x7f' #else /* Use EBCDIC code page 1047's assignments for ASCII control chars; assume all EBCDIC code pages agree about these assignments. */ # define _C_CTYPE_OTHER_CNTRL \ case '\x00': case '\x01': case '\x02': case '\x03': \ case '\x07': case '\x0e': case '\x0f': case '\x10': \ case '\x11': case '\x12': case '\x13': case '\x18': \ case '\x19': case '\x1c': case '\x1d': case '\x1e': \ case '\x1f': case '\x26': case '\x27': case '\x2d': \ case '\x2e': case '\x32': case '\x37': case '\x3c': \ case '\x3d': case '\x3f' #endif /* Cases for lowercase hex letters, and lowercase letters, all offset by N. */ #define _C_CTYPE_LOWER_A_THRU_F_N(N) \ case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \ case 'e' + (N): case 'f' + (N) #define _C_CTYPE_LOWER_N(N) \ _C_CTYPE_LOWER_A_THRU_F_N(N): \ case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \ case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \ case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \ case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \ case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N) /* Cases for hex letters, digits, lower, punct, and upper. */ #define _C_CTYPE_A_THRU_F \ _C_CTYPE_LOWER_A_THRU_F_N (0): \ _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a') #define _C_CTYPE_DIGIT \ case '0': case '1': case '2': case '3': \ case '4': case '5': case '6': case '7': \ case '8': case '9' #define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0) #define _C_CTYPE_PUNCT \ case '!': case '"': case '#': case '$': \ case '%': case '&': case '\'': case '(': \ case ')': case '*': case '+': case ',': \ case '-': case '.': case '/': case ':': \ case ';': case '<': case '=': case '>': \ case '?': case '@': case '[': case '\\': \ case ']': case '^': case '_': case '`': \ case '{': case '|': case '}': case '~' #define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a') /* Function definitions. */ /* Unlike the functions in <ctype.h>, which require an argument in the range of the 'unsigned char' type, the functions here operate on values that are in the 'unsigned char' range or in the 'char' range. In other words, when you have a 'char' value, you need to cast it before using it as argument to a <ctype.h> function: const char *s = ...; if (isalpha ((unsigned char) *s)) ... but you don't need to cast it for the functions defined in this file: const char *s = ...; if (c_isalpha (*s)) ... */ C_CTYPE_INLINE bool c_isalnum (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isalpha (int c) { switch (c) { _C_CTYPE_LOWER: _C_CTYPE_UPPER: return true; default: return false; } } /* The function isascii is not locale dependent. Its use in EBCDIC is questionable. */ C_CTYPE_INLINE bool c_isascii (int c) { switch (c) { case ' ': _C_CTYPE_CNTRL: _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isblank (int c) { return c == ' ' || c == '\t'; } C_CTYPE_INLINE bool c_iscntrl (int c) { switch (c) { _C_CTYPE_CNTRL: return true; default: return false; } } C_CTYPE_INLINE bool c_isdigit (int c) { switch (c) { _C_CTYPE_DIGIT: return true; default: return false; } } C_CTYPE_INLINE bool c_isgraph (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_islower (int c) { switch (c) { _C_CTYPE_LOWER: return true; default: return false; } } C_CTYPE_INLINE bool c_isprint (int c) { switch (c) { case ' ': _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_ispunct (int c) { switch (c) { _C_CTYPE_PUNCT: return true; default: return false; } } C_CTYPE_INLINE bool c_isspace (int c) { switch (c) { case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': return true; default: return false; } } C_CTYPE_INLINE bool c_isupper (int c) { switch (c) { _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isxdigit (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_A_THRU_F: return true; default: return false; } } C_CTYPE_INLINE int c_tolower (int c) { switch (c) { _C_CTYPE_UPPER: return c - 'A' + 'a'; default: return c; } } C_CTYPE_INLINE int c_toupper (int c) { switch (c) { _C_CTYPE_LOWER: return c - 'a' + 'A'; default: return c; } } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* C_CTYPE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c-ctype.c������������������������������������������������������������0000644�0001750�0001750�00000001513�14557510504�013752� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character handling in C locale. Copyright (C) 2003-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define C_CTYPE_INLINE _GL_EXTERN_INLINE #include "c-ctype.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32isalnum.c���������������������������������������������������������0000644�0001750�0001750�00000001710�14557510504�014365� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being alphanumeric. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IN_C32ISALNUM /* Specification. */ #include <uchar.h> #define FUNC c32isalnum #define WCHAR_FUNC iswalnum #define UCS_FUNC uc_is_alnum #include "c32is-impl.h" ��������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32isalpha.c���������������������������������������������������������0000644�0001750�0001750�00000001706�14557510504�014343� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being alphabetic. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IN_C32ISALPHA /* Specification. */ #include <uchar.h> #define FUNC c32isalpha #define WCHAR_FUNC iswalpha #define UCS_FUNC uc_is_alpha #include "c32is-impl.h" ����������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32isblank.c���������������������������������������������������������0000644�0001750�0001750�00000001701�14557510504�014340� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being blank. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IN_C32ISBLANK /* Specification. */ #include <uchar.h> #define FUNC c32isblank #define WCHAR_FUNC iswblank #define UCS_FUNC uc_is_blank #include "c32is-impl.h" ���������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32iscntrl.c���������������������������������������������������������0000644�0001750�0001750�00000001717�14557510504�014402� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being a control character. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IN_C32ISCNTRL /* Specification. */ #include <uchar.h> #define FUNC c32iscntrl #define WCHAR_FUNC iswcntrl #define UCS_FUNC uc_is_cntrl #include "c32is-impl.h" �������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32isdigit.c���������������������������������������������������������0000644�0001750�0001750�00000001703�14557510504�014353� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being a digit. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IN_C32ISDIGIT /* Specification. */ #include <uchar.h> #define FUNC c32isdigit #define WCHAR_FUNC iswdigit #define UCS_FUNC uc_is_digit #include "c32is-impl.h" �������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32isgraph.c���������������������������������������������������������0000644�0001750�0001750�00000001703�14557510505�014355� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being graphic. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IN_C32ISGRAPH /* Specification. */ #include <uchar.h> #define FUNC c32isgraph #define WCHAR_FUNC iswgraph #define UCS_FUNC uc_is_graph #include "c32is-impl.h" �������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32islower.c���������������������������������������������������������0000644�0001750�0001750�00000001705�14557510505�014406� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being lowercase. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IN_C32ISLOWER /* Specification. */ #include <uchar.h> #define FUNC c32islower #define WCHAR_FUNC iswlower #define UCS_FUNC uc_is_lower #include "c32is-impl.h" �����������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32isprint.c���������������������������������������������������������0000644�0001750�0001750�00000001705�14557510505�014412� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being printable. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IN_C32ISPRINT /* Specification. */ #include <uchar.h> #define FUNC c32isprint #define WCHAR_FUNC iswprint #define UCS_FUNC uc_is_print #include "c32is-impl.h" �����������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32ispunct.c���������������������������������������������������������0000644�0001750�0001750�00000001735�14557510505�014412� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being a punctuation or symbol character. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IN_C32ISPUNCT /* Specification. */ #include <uchar.h> #define FUNC c32ispunct #define WCHAR_FUNC iswpunct #define UCS_FUNC uc_is_punct #include "c32is-impl.h" �����������������������������������gnuastro-0.22/bootstrapped/lib/c32isspace.c���������������������������������������������������������0000644�0001750�0001750�00000001707�14557510505�014353� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being white-space. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IN_C32ISSPACE /* Specification. */ #include <uchar.h> #define FUNC c32isspace #define WCHAR_FUNC iswspace #define UCS_FUNC uc_is_space #include "c32is-impl.h" ���������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32isupper.c���������������������������������������������������������0000644�0001750�0001750�00000001705�14557510505�014411� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being uppercase. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IN_C32ISUPPER /* Specification. */ #include <uchar.h> #define FUNC c32isupper #define WCHAR_FUNC iswupper #define UCS_FUNC uc_is_upper #include "c32is-impl.h" �����������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32isxdigit.c��������������������������������������������������������0000644�0001750�0001750�00000001723�14557510505�014546� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test 32-bit wide character for being a hexadecimal digit. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IN_C32ISXDIGIT /* Specification. */ #include <uchar.h> #define FUNC c32isxdigit #define WCHAR_FUNC iswxdigit #define UCS_FUNC uc_is_xdigit #include "c32is-impl.h" ���������������������������������������������gnuastro-0.22/bootstrapped/lib/c32tolower.c���������������������������������������������������������0000644�0001750�0001750�00000001676�14557510505�014424� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Map a 32-bit wide character to lowercase. Copyright (C) 2023-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IN_C32TOLOWER /* Specification. */ #include <uchar.h> #define FUNC c32tolower #define WCHAR_FUNC towlower #define UCS_FUNC uc_tolower #include "c32to-impl.h" ������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32width.c�����������������������������������������������������������0000644�0001750�0001750�00000006400�14557510505�014036� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the number of screen columns needed for a 32-bit wide character. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2023. */ #include <config.h> #define IN_C32WIDTH /* Specification. */ #include <uchar.h> #include <wchar.h> #ifdef __CYGWIN__ # include <cygwin/version.h> #endif #if GNULIB_defined_mbstate_t # include "streq.h" #endif #include "localcharset.h" #if GL_CHAR32_T_IS_UNICODE # include "lc-charset-unicode.h" #endif #include "uniwidth.h" #if _GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t _GL_EXTERN_INLINE #endif int c32width (char32_t wc) { /* The char32_t encoding of a multibyte character is defined by the way mbrtoc32() is defined. */ #if GNULIB_defined_mbstate_t /* AIX, IRIX */ /* mbrtoc32() is defined on top of mbtowc() for the non-UTF-8 locales and directly for the UTF-8 locales. */ const char *encoding = locale_charset (); if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) return uc_width (wc, encoding); else return wcwidth (wc); #elif HAVE_WORKING_MBRTOC32 /* glibc, Android */ /* mbrtoc32() is essentially defined by the system libc. */ # if _GL_WCHAR_T_IS_UCS4 /* The char32_t encoding of a multibyte character is known to be the same as the wchar_t encoding. */ return wcwidth (wc); # else /* The char32_t encoding of a multibyte character is known to be UCS-4, different from the wchar_t encoding. */ return uc_width (wc, locale_charset ()); # endif #elif _GL_SMALL_WCHAR_T /* Cygwin, mingw, MSVC */ /* The wchar_t encoding is UTF-16. The char32_t encoding is UCS-4. */ # if defined __CYGWIN__ && CYGWIN_VERSION_DLL_MAJOR >= 1007 && 0 /* As an extension to POSIX, the wcwidth() function of Cygwin >= 1.7 supports also wc arguments outside the Unicode BMP, that is, outside the 'wchar_t' range. See <https://www.cygwin.com/cgit/newlib-cygwin/commit/?id=098a75dc51caa98f369d98a9809d773bc45329aa>. But the resulting values for these characters are not of good quality. */ return wcwidth (wc); # else if (wc == (wchar_t) wc) /* wc is in the range for the wcwidth function. */ return wcwidth (wc); else return uc_width (wc, locale_charset ()); # endif #else /* macOS, FreeBSD, NetBSD, OpenBSD, HP-UX, Solaris, Minix, Android */ /* char32_t and wchar_t are equivalent. */ static_assert (sizeof (char32_t) == sizeof (wchar_t)); # if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION return uc_width (wc, locale_charset ()); # endif return wcwidth (wc); #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/chdir-long.c���������������������������������������������������������0000644�0001750�0001750�00000015241�14557510505�014440� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a chdir function that tries not to fail due to ENAMETOOLONG Copyright (C) 2004-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> #include "chdir-long.h" #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include "assure.h" #ifndef PATH_MAX # error "compile this file only if your system defines PATH_MAX" #endif /* The results of openat() in this file are not leaked to any single-threaded code that could use stdio. FIXME - if the kernel ever adds support for multi-thread safety for avoiding standard fds, then we should use openat_safer. */ struct cd_buf { int fd; }; static void cdb_init (struct cd_buf *cdb) { cdb->fd = AT_FDCWD; } static int cdb_fchdir (struct cd_buf const *cdb) { return fchdir (cdb->fd); } static void cdb_free (struct cd_buf const *cdb) { if (0 <= cdb->fd) { bool close_fail = close (cdb->fd); assure (! close_fail); } } /* Given a file descriptor of an open directory (or AT_FDCWD), CDB->fd, try to open the CDB->fd-relative directory, DIR. If the open succeeds, update CDB->fd with the resulting descriptor, close the incoming file descriptor, and return zero. Upon failure, return -1 and set errno. */ static int cdb_advance_fd (struct cd_buf *cdb, char const *dir) { int new_fd = openat (cdb->fd, dir, O_SEARCH | O_DIRECTORY | O_NOCTTY | O_NONBLOCK); if (new_fd < 0) return -1; cdb_free (cdb); cdb->fd = new_fd; return 0; } /* Return a pointer to the first non-slash in S. */ static char * _GL_ATTRIBUTE_PURE find_non_slash (char const *s) { size_t n_slash = strspn (s, "/"); return (char *) s + n_slash; } /* This is a function much like chdir, but without the PATH_MAX limitation on the length of the directory name. A significant difference is that it must be able to modify (albeit only temporarily) the directory name. It handles an arbitrarily long directory name by operating on manageable portions of the name. On systems without the openat syscall, this means changing the working directory to more and more "distant" points along the long directory name and then restoring the working directory. If any of those attempts to save or restore the working directory fails, this function exits nonzero. Note that this function may still fail with errno == ENAMETOOLONG, but only if the specified directory name contains a component that is long enough to provoke such a failure all by itself (e.g. if the component has length PATH_MAX or greater on systems that define PATH_MAX). */ int chdir_long (char *dir) { int e = chdir (dir); if (e == 0 || errno != ENAMETOOLONG) return e; { size_t len = strlen (dir); char *dir_end = dir + len; struct cd_buf cdb; size_t n_leading_slash; cdb_init (&cdb); /* If DIR is the empty string, then the chdir above must have failed and set errno to ENOENT. */ assure (0 < len); assure (PATH_MAX <= len); /* Count leading slashes. */ n_leading_slash = strspn (dir, "/"); /* Handle any leading slashes as well as any name that matches the regular expression, m!^//hostname[/]*! . Handling this prefix separately usually results in a single additional cdb_advance_fd call, but it's worthwhile, since it makes the code in the following loop cleaner. */ if (n_leading_slash == 2) { int err; /* Find next slash. We already know that dir[2] is neither a slash nor '\0'. */ char *slash = memchr (dir + 3, '/', dir_end - (dir + 3)); if (slash == NULL) { errno = ENAMETOOLONG; return -1; } *slash = '\0'; err = cdb_advance_fd (&cdb, dir); *slash = '/'; if (err != 0) goto Fail; dir = find_non_slash (slash + 1); } else if (n_leading_slash) { if (cdb_advance_fd (&cdb, "/") != 0) goto Fail; dir += n_leading_slash; } assure (*dir != '/'); assure (dir <= dir_end); while (PATH_MAX <= dir_end - dir) { int err; /* Find a slash that is PATH_MAX or fewer bytes away from dir. I.e. see if there is a slash that will give us a name of length PATH_MAX-1 or less. */ char *slash = memrchr (dir, '/', PATH_MAX); if (slash == NULL) { errno = ENAMETOOLONG; return -1; } *slash = '\0'; assure (slash - dir < PATH_MAX); err = cdb_advance_fd (&cdb, dir); *slash = '/'; if (err != 0) goto Fail; dir = find_non_slash (slash + 1); } if (dir < dir_end) { if (cdb_advance_fd (&cdb, dir) != 0) goto Fail; } if (cdb_fchdir (&cdb) != 0) goto Fail; cdb_free (&cdb); return 0; Fail: { int saved_errno = errno; cdb_free (&cdb); errno = saved_errno; return -1; } } } #if TEST_CHDIR # include "closeout.h" # include <error.h> int main (int argc, char *argv[]) { char *line = NULL; size_t n = 0; int len; atexit (close_stdout); len = getline (&line, &n, stdin); if (len < 0) { int saved_errno = errno; if (feof (stdin)) exit (0); error (EXIT_FAILURE, saved_errno, "reading standard input"); } else if (len == 0) exit (0); if (line[len-1] == '\n') line[len-1] = '\0'; if (chdir_long (line) != 0) error (EXIT_FAILURE, errno, "chdir_long failed: %s", line); if (argc <= 1) { /* Using 'pwd' here makes sense only if it is a robust implementation, like the one in coreutils after the 2004-04-19 changes. */ char const *cmd = "pwd"; execlp (cmd, (char *) NULL); error (EXIT_FAILURE, errno, "%s", cmd); } fclose (stdin); fclose (stderr); exit (EXIT_SUCCESS); } #endif /* Local Variables: compile-command: "gcc -DTEST_CHDIR=1 -g -O -W -Wall chdir-long.c libcoreutils.a" End: */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/cloexec.c������������������������������������������������������������0000644�0001750�0001750�00000004454�14557510505�014040� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* cloexec.c - set or clear the close-on-exec descriptor flag Copyright (C) 1991, 2004-2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* The code is taken from glibc/manual/llio.texi */ #include <config.h> #include "cloexec.h" #include <errno.h> #include <fcntl.h> #include <unistd.h> /* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, or clear the flag if VALUE is false. Return 0 on success, or -1 on error with 'errno' set. Note that on MingW, this function does NOT protect DESC from being inherited into spawned children. Instead, either use dup_cloexec followed by closing the original DESC, or use interfaces such as open or pipe2 that accept flags like O_CLOEXEC to create DESC non-inheritable in the first place. */ int set_cloexec_flag (int desc, bool value) { #ifdef F_SETFD int flags = fcntl (desc, F_GETFD, 0); if (0 <= flags) { int newflags = (value ? flags | FD_CLOEXEC : flags & ~FD_CLOEXEC); if (flags == newflags || fcntl (desc, F_SETFD, newflags) != -1) return 0; } return -1; #else /* !F_SETFD */ /* Use dup2 to reject invalid file descriptors; the cloexec flag will be unaffected. */ if (desc < 0) { errno = EBADF; return -1; } if (dup2 (desc, desc) < 0) /* errno is EBADF here. */ return -1; /* There is nothing we can do on this kind of platform. Punt. */ return 0; #endif /* !F_SETFD */ } /* Duplicates a file handle FD, while marking the copy to be closed prior to exec or spawn. Returns -1 and sets errno if FD could not be duplicated. */ int dup_cloexec (int fd) { return fcntl (fd, F_DUPFD_CLOEXEC, 0); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/close.c��������������������������������������������������������������0000644�0001750�0001750�00000003143�14557510505�013515� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* close replacement. Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include "fd-hook.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef close #if defined _WIN32 && !defined __CYGWIN__ # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int close_nothrow (int fd) { int result; TRY_MSVC_INVAL { result = _close (fd); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define close_nothrow _close # endif #else # define close_nothrow close #endif /* Override close() to call into other gnulib modules. */ int rpl_close (int fd) { #if WINDOWS_SOCKETS int retval = execute_all_close_hooks (close_nothrow, fd); #else int retval = close_nothrow (fd); #endif #if REPLACE_FCHDIR if (retval >= 0) _gl_unregister_fd (fd); #endif return retval; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/dirfd.c��������������������������������������������������������������0000644�0001750�0001750�00000002240�14557510505�013475� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* dirfd.c -- return the file descriptor associated with an open DIR* Copyright (C) 2001, 2006, 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> #include <dirent.h> #include <errno.h> #if GNULIB_defined_DIR # include "dirent-private.h" #endif int dirfd (DIR *dir_p) { #if GNULIB_defined_DIR int fd = dir_p->fd_to_close; if (fd == -1) errno = EINVAL; return fd; #else int fd = DIR_TO_FD (dir_p); if (fd == -1) errno = ENOTSUP; return fd; #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/dup2.c���������������������������������������������������������������0000644�0001750�0001750�00000007742�14557510505�013273� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate an open file descriptor to a specified file descriptor. Copyright (C) 1999, 2004-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #undef dup2 #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int dup2_nothrow (int fd, int desired_fd) { int result; TRY_MSVC_INVAL { result = _dup2 (fd, desired_fd); } CATCH_MSVC_INVAL { errno = EBADF; result = -1; } DONE_MSVC_INVAL; return result; } # else # define dup2_nothrow _dup2 # endif static int ms_windows_dup2 (int fd, int desired_fd) { int result; /* If fd is closed, mingw hangs on dup2 (fd, fd). If fd is open, dup2 (fd, fd) returns 0, but all further attempts to use fd in future dup2 calls will hang. */ if (fd == desired_fd) { if ((HANDLE) _get_osfhandle (fd) == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } return fd; } /* Wine 1.0.1 return 0 when desired_fd is negative but not -1: https://bugs.winehq.org/show_bug.cgi?id=21289 */ if (desired_fd < 0) { errno = EBADF; return -1; } result = dup2_nothrow (fd, desired_fd); if (result == 0) result = desired_fd; return result; } # define dup2 ms_windows_dup2 #elif defined __KLIBC__ # include <InnoTekLIBC/backend.h> static int klibc_dup2dirfd (int fd, int desired_fd) { int tempfd; int dupfd; tempfd = open ("NUL", O_RDONLY); if (tempfd == -1) return -1; if (tempfd == desired_fd) { close (tempfd); char path[_MAX_PATH]; if (__libc_Back_ioFHToPath (fd, path, sizeof (path))) return -1; return open(path, O_RDONLY); } dupfd = klibc_dup2dirfd (fd, desired_fd); close (tempfd); return dupfd; } static int klibc_dup2 (int fd, int desired_fd) { int dupfd; struct stat sbuf; dupfd = dup2 (fd, desired_fd); if (dupfd == -1 && errno == ENOTSUP \ && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { close (desired_fd); return klibc_dup2dirfd (fd, desired_fd); } return dupfd; } # define dup2 klibc_dup2 #endif int rpl_dup2 (int fd, int desired_fd) { int result; #ifdef F_GETFL /* On Linux kernels 2.6.26-2.6.29, dup2 (fd, fd) returns -EBADF. On Cygwin 1.5.x, dup2 (1, 1) returns 0. On Cygwin 1.7.17, dup2 (1, -1) dumps core. On Cygwin 1.7.25, dup2 (1, 256) can dump core. On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC. */ # if HAVE_SETDTABLESIZE setdtablesize (desired_fd + 1); # endif if (desired_fd < 0) fd = desired_fd; if (fd == desired_fd) return fcntl (fd, F_GETFL) == -1 ? -1 : fd; #endif result = dup2 (fd, desired_fd); /* Correct an errno value on FreeBSD 6.1 and Cygwin 1.5.x. */ if (result == -1 && errno == EMFILE) errno = EBADF; #if REPLACE_FCHDIR if (fd != desired_fd && result != -1) result = _gl_register_dup (fd, result); #endif return result; } ������������������������������gnuastro-0.22/bootstrapped/lib/error.c��������������������������������������������������������������0000644�0001750�0001750�00000024746�14557510505�013555� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Error handler for noninteractive utilities Copyright (C) 1990-1998, 2000-2007, 2009-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ #if !_LIBC # include <config.h> # define _GL_NO_INLINE_ERROR #endif #include <error.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if !_LIBC && ENABLE_NLS # include "gettext.h" # define _(msgid) gettext (msgid) #endif #ifdef _LIBC # include <libintl.h> # include <stdbool.h> # include <stdint.h> # include <wchar.h> # define mbsrtowcs __mbsrtowcs # define USE_UNLOCKED_IO 0 # define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(a, b) # define _GL_ARG_NONNULL(a) #endif #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #ifndef _ # define _(String) String #endif /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ unsigned int error_message_count; #ifdef _LIBC /* In the GNU C library, there is a predefined variable for this. */ # define program_name program_invocation_name # include <errno.h> # include <limits.h> # include <libio/libioP.h> /* In GNU libc we want do not want to use the common name 'error' directly. Instead make it a weak alias. */ extern void __error (int status, int errnum, const char *message, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern void __error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) __attribute__ ((__format__ (__printf__, 5, 6))); # define error __error # define error_at_line __error_at_line # include <libio/iolibio.h> # define fflush(s) _IO_fflush (s) # undef putc # define putc(c, fp) _IO_putc (c, fp) # include <bits/libc-lock.h> #else /* not _LIBC */ # include <fcntl.h> # include <unistd.h> # if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # endif /* The gnulib override of fcntl is not needed in this file. */ # undef fcntl # if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R) # ifndef HAVE_DECL_STRERROR_R "this configure-time declaration test was not run" # endif # if STRERROR_R_CHAR_P char *strerror_r (int errnum, char *buf, size_t buflen); # else int strerror_r (int errnum, char *buf, size_t buflen); # endif # endif # define program_name getprogname () # if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r # define __strerror_r strerror_r # endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */ #endif /* not _LIBC */ #if !_LIBC /* Return non-zero if FD is open. */ static int is_open (int fd) { # if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows: The initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE. There is no fcntl, and the gnulib replacement fcntl does not support F_GETFL. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; # else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); # endif } #endif static void flush_stdout (void) { #if !_LIBC int stdout_fd; # if GNULIB_FREOPEN_SAFER /* Use of gnulib's freopen-safer module normally ensures that fileno (stdout) == 1 whenever stdout is open. */ stdout_fd = STDOUT_FILENO; # else /* POSIX states that fileno (stdout) after fclose is unspecified. But in practice it is not a problem, because stdout is statically allocated and the fd of a FILE stream is stored as a field in its allocated memory. */ stdout_fd = fileno (stdout); # endif /* POSIX states that fflush (stdout) after fclose is unspecified; it is safe in glibc, but not on all other platforms. fflush (NULL) is always defined, but too draconian. */ if (0 <= stdout_fd && is_open (stdout_fd)) #endif fflush (stdout); } static void print_errno_message (int errnum) { char const *s; #if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R char errbuf[1024]; # if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P) s = __strerror_r (errnum, errbuf, sizeof errbuf); # else if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) s = errbuf; else s = 0; # endif #else s = strerror (errnum); #endif #if !_LIBC if (! s) s = _("Unknown system error"); #endif #if _LIBC __fxprintf (NULL, ": %s", s); #else fprintf (stderr, ": %s", s); #endif } static void _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3)) error_tail (int status, int errnum, const char *message, va_list args) { #if _LIBC if (_IO_fwide (stderr, 0) > 0) { size_t len = strlen (message) + 1; wchar_t *wmessage = NULL; mbstate_t st; size_t res; const char *tmp; bool use_malloc = false; while (1) { if (__libc_use_alloca (len * sizeof (wchar_t))) wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); else { if (!use_malloc) wmessage = NULL; wchar_t *p = (wchar_t *) realloc (wmessage, len * sizeof (wchar_t)); if (p == NULL) { free (wmessage); fputws_unlocked (L"out of memory\n", stderr); return; } wmessage = p; use_malloc = true; } memset (&st, '\0', sizeof (st)); tmp = message; res = mbsrtowcs (wmessage, &tmp, len, &st); if (res != len) break; if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0)) { /* This really should not happen if everything is fine. */ res = (size_t) -1; break; } len *= 2; } if (res == (size_t) -1) { /* The string cannot be converted. */ if (use_malloc) { free (wmessage); use_malloc = false; } wmessage = (wchar_t *) L"???"; } __vfwprintf (stderr, wmessage, args); if (use_malloc) free (wmessage); } else #endif vfprintf (stderr, message, args); ++error_message_count; if (errnum) print_errno_message (errnum); #if _LIBC __fxprintf (NULL, "\n"); #else putc ('\n', stderr); #endif fflush (stderr); if (status) exit (status); } /* Print the program name and error message MESSAGE, which is a printf-style format string with optional args. If ERRNUM is nonzero, print its corresponding system error message. Exit with status STATUS if it is nonzero. */ void error (int status, int errnum, const char *message, ...) { va_list args; #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s: ", program_name); #else fprintf (stderr, "%s: ", program_name); #endif } va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ int error_one_per_line; void error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) { va_list args; if (error_one_per_line) { static const char *old_file_name; static unsigned int old_line_number; if (old_line_number == line_number && (file_name == old_file_name || (old_file_name != NULL && file_name != NULL && strcmp (old_file_name, file_name) == 0))) /* Simply return and print nothing. */ return; old_file_name = file_name; old_line_number = line_number; } #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s:", program_name); #else fprintf (stderr, "%s:", program_name); #endif } #if _LIBC __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #else fprintf (stderr, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #endif va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } #ifdef _LIBC /* Make the weak alias. */ # undef error # undef error_at_line weak_alias (__error, error) weak_alias (__error_at_line, error_at_line) #endif ��������������������������gnuastro-0.22/bootstrapped/lib/euidaccess.c���������������������������������������������������������0000644�0001750�0001750�00000014157�14557510505�014527� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* euidaccess -- check if effective user id can access file Copyright (C) 1990-1991, 1995, 1998, 2000, 2003-2006, 2008-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by David MacKenzie and Torbjorn Granlund. Adapted for GNU C library by Roland McGrath. */ #ifndef _LIBC # include <config.h> #endif #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> #else # include "root-uid.h" #endif #if HAVE_LIBGEN_H # include <libgen.h> #endif #include <errno.h> #ifndef __set_errno # define __set_errno(val) errno = (val) #endif #if defined EACCES && !defined EACCESS # define EACCESS EACCES #endif #ifndef F_OK # define F_OK 0 # define X_OK 1 # define W_OK 2 # define R_OK 4 #endif #ifdef _LIBC # define access __access # define getuid __getuid # define getgid __getgid # define geteuid __geteuid # define getegid __getegid # define group_member __group_member # define euidaccess __euidaccess # undef stat # define stat stat64 #endif /* Return 0 if the user has permission of type MODE on FILE; otherwise, return -1 and set 'errno'. Like access, except that it uses the effective user and group id's instead of the real ones, and it does not always check for read-only file system, text busy, etc. */ int euidaccess (const char *file, int mode) { #if HAVE_FACCESSAT /* glibc, AIX 7, Solaris 11, Cygwin 1.7 */ return faccessat (AT_FDCWD, file, mode, AT_EACCESS); #elif defined EFF_ONLY_OK /* IRIX, OSF/1, Interix */ return access (file, mode | EFF_ONLY_OK); #elif defined ACC_SELF /* AIX */ return accessx (file, mode, ACC_SELF); #elif HAVE_EACCESS /* FreeBSD */ return eaccess (file, mode); #elif defined _WIN32 && ! defined __CYGWIN__ /* mingw */ return _access (file, mode); #else /* Mac OS X, NetBSD, OpenBSD, HP-UX, Solaris, Cygwin, BeOS */ uid_t uid = getuid (); gid_t gid = getgid (); uid_t euid = geteuid (); gid_t egid = getegid (); struct stat stats; # if HAVE_DECL_SETREGID && PREFER_NONREENTRANT_EUIDACCESS /* Define PREFER_NONREENTRANT_EUIDACCESS if you prefer euidaccess to return the correct result even if this would make it nonreentrant. Define this only if your entire application is safe even if the uid or gid might temporarily change. If your application uses signal handlers or threads it is probably not safe. */ if (mode == F_OK) { int result = stat (file, &stats); return result != 0 && errno == EOVERFLOW ? 0 : result; } else { int result; int saved_errno; if (uid != euid) setreuid (euid, uid); if (gid != egid) setregid (egid, gid); result = access (file, mode); saved_errno = errno; /* Restore them. */ if (uid != euid) setreuid (uid, euid); if (gid != egid) setregid (gid, egid); errno = saved_errno; return result; } # else /* The following code assumes the traditional Unix model, and is not correct on systems that have ACLs or the like. However, it's better than nothing, and it is reentrant. */ unsigned int granted; if (uid == euid && gid == egid) /* If we are not set-uid or set-gid, access does the same. */ return access (file, mode); if (stat (file, &stats) == -1) return mode == F_OK && errno == EOVERFLOW ? 0 : -1; /* The super-user can read and write any file, and execute any file that anyone can execute. */ if (euid == ROOT_UID && ((mode & X_OK) == 0 || (stats.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))) return 0; /* Convert the mode to traditional form, clearing any bogus bits. */ if (R_OK == 4 && W_OK == 2 && X_OK == 1 && F_OK == 0) mode &= 7; else mode = ((mode & R_OK ? 4 : 0) + (mode & W_OK ? 2 : 0) + (mode & X_OK ? 1 : 0)); if (mode == 0) return 0; /* The file exists. */ /* Convert the file's permission bits to traditional form. */ if (S_IRUSR == (4 << 6) && S_IWUSR == (2 << 6) && S_IXUSR == (1 << 6) && S_IRGRP == (4 << 3) && S_IWGRP == (2 << 3) && S_IXGRP == (1 << 3) && S_IROTH == (4 << 0) && S_IWOTH == (2 << 0) && S_IXOTH == (1 << 0)) granted = stats.st_mode; else granted = ((stats.st_mode & S_IRUSR ? 4 << 6 : 0) + (stats.st_mode & S_IWUSR ? 2 << 6 : 0) + (stats.st_mode & S_IXUSR ? 1 << 6 : 0) + (stats.st_mode & S_IRGRP ? 4 << 3 : 0) + (stats.st_mode & S_IWGRP ? 2 << 3 : 0) + (stats.st_mode & S_IXGRP ? 1 << 3 : 0) + (stats.st_mode & S_IROTH ? 4 << 0 : 0) + (stats.st_mode & S_IWOTH ? 2 << 0 : 0) + (stats.st_mode & S_IXOTH ? 1 << 0 : 0)); if (euid == stats.st_uid) granted >>= 6; else if (egid == stats.st_gid || group_member (stats.st_gid)) granted >>= 3; if ((mode & ~granted) == 0) return 0; __set_errno (EACCESS); return -1; # endif #endif } #undef euidaccess #ifdef weak_alias weak_alias (__euidaccess, euidaccess) #endif #ifdef TEST # include <error.h> # include <stdio.h> # include <stdlib.h> int main (int argc, char **argv) { char *file; int mode; int err; if (argc < 3) abort (); file = argv[1]; mode = atoi (argv[2]); err = euidaccess (file, mode); printf ("%d\n", err); if (err != 0) error (0, errno, "%s", file); exit (0); } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/exitfail.c�����������������������������������������������������������0000644�0001750�0001750�00000001555�14557510505�014222� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Failure exit status Copyright (C) 2002-2003, 2005-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "exitfail.h" #include <stdlib.h> int volatile exit_failure = EXIT_FAILURE; ���������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/faccessat.c����������������������������������������������������������0000644�0001750�0001750�00000005611�14557510505�014346� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Check the access rights of a file relative to an open directory. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Eric Blake */ /* If the user's config.h happens to include <unistd.h>, let it include only the system's <unistd.h> here, so that orig_faccessat doesn't recurse to rpl_faccessat. */ #define _GL_INCLUDING_UNISTD_H #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #undef _GL_INCLUDING_UNISTD_H #if HAVE_FACCESSAT static int orig_faccessat (int fd, char const *name, int mode, int flag) { return faccessat (fd, name, mode, flag); } #endif #ifdef __osf__ /* Write "unistd.h" here, not <unistd.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <unistd.h> above. */ # include "unistd.h" #else # include <unistd.h> #endif #ifndef HAVE_ACCESS /* Mingw lacks access, but it also lacks real vs. effective ids, so the gnulib euidaccess module is good enough. */ # undef access # define access euidaccess #endif #if HAVE_FACCESSAT int rpl_faccessat (int fd, char const *file, int mode, int flag) { int result = orig_faccessat (fd, file, mode, flag); if (result == 0 && file[strlen (file) - 1] == '/') { struct stat st; result = fstatat (fd, file, &st, 0); if (result == 0 && !S_ISDIR (st.st_mode)) { errno = ENOTDIR; return -1; } } return result; } #else /* !HAVE_FACCESSAT */ /* Invoke access or euidaccess on file, FILE, using mode MODE, in the directory open on descriptor FD. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then (access|euidaccess)/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. Note that this implementation only supports AT_EACCESS, although some native versions also support AT_SYMLINK_NOFOLLOW. */ # define AT_FUNC_NAME faccessat # define AT_FUNC_F1 euidaccess # define AT_FUNC_F2 access # define AT_FUNC_USE_F1_COND AT_EACCESS # define AT_FUNC_POST_FILE_PARAM_DECLS , int mode, int flag # define AT_FUNC_POST_FILE_ARGS , mode # include "at-func.c" #endif �����������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/fchdir.c�������������������������������������������������������������0000644�0001750�0001750�00000013261�14557510505�013651� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fchdir replacement. Copyright (C) 2006-2024 Free Software Foundation, Inc. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <dirent.h> #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include "assure.h" #include "filename.h" #include "filenamecat.h" #ifndef REPLACE_OPEN_DIRECTORY # define REPLACE_OPEN_DIRECTORY 0 #endif /* This replacement assumes that a directory is not renamed while opened through a file descriptor. FIXME: On mingw, this would be possible to enforce if we were to also open a HANDLE to each directory currently visited by a file descriptor, since mingw refuses to rename any in-use file system object. */ /* Array of file descriptors opened. If REPLACE_OPEN_DIRECTORY or if it points to a directory, it stores info about this directory. */ typedef struct { char *name; /* Absolute name of the directory, or NULL. */ } dir_info_t; static dir_info_t *dirs; static size_t dirs_allocated; /* Try to ensure dirs has enough room for a slot at index fd; free any contents already in that slot. Return false and set errno to ENOMEM on allocation failure. */ static bool ensure_dirs_slot (size_t fd) { if (fd < dirs_allocated) free (dirs[fd].name); else { size_t new_allocated; dir_info_t *new_dirs; new_allocated = 2 * dirs_allocated + 1; if (new_allocated <= fd) new_allocated = fd + 1; new_dirs = (dirs != NULL ? (dir_info_t *) realloc (dirs, new_allocated * sizeof *dirs) : (dir_info_t *) malloc (new_allocated * sizeof *dirs)); if (new_dirs == NULL) return false; memset (new_dirs + dirs_allocated, 0, (new_allocated - dirs_allocated) * sizeof *dirs); dirs = new_dirs; dirs_allocated = new_allocated; } return true; } /* Return an absolute name of DIR in malloc'd storage. Upon failure, return NULL with errno set. */ static char * get_name (char const *dir) { char *cwd; char *result; if (IS_ABSOLUTE_FILE_NAME (dir)) return strdup (dir); /* We often encounter "."; treat it as a special case. */ cwd = getcwd (NULL, 0); if (!cwd || (dir[0] == '.' && dir[1] == '\0')) return cwd; result = mfile_name_concat (cwd, dir, NULL); free (cwd); return result; } /* Hook into the gnulib replacements for open() and close() to keep track of the open file descriptors. */ /* Close FD, cleaning up any fd to name mapping if fd was visiting a directory. */ void _gl_unregister_fd (int fd) { if (fd >= 0 && fd < dirs_allocated) { free (dirs[fd].name); dirs[fd].name = NULL; } } /* Mark FD as visiting FILENAME. FD must be non-negative, and refer to an open file descriptor. If REPLACE_OPEN_DIRECTORY is non-zero, this should only be called if FD is visiting a directory. Close FD and return -1 with errno set if there is insufficient memory to track the directory name; otherwise return FD. */ int _gl_register_fd (int fd, const char *filename) { struct stat statbuf; assure (0 <= fd); if (REPLACE_OPEN_DIRECTORY || (fstat (fd, &statbuf) == 0 && S_ISDIR (statbuf.st_mode))) { if (!ensure_dirs_slot (fd) || (dirs[fd].name = get_name (filename)) == NULL) { int saved_errno = errno; close (fd); errno = saved_errno; return -1; } } return fd; } /* Mark NEWFD as a duplicate of OLDFD; useful from dup, dup2, dup3, and fcntl. Both arguments must be valid and distinct file descriptors. Close NEWFD and return -1 if OLDFD is tracking a directory, but there is insufficient memory to track the same directory in NEWFD; otherwise return NEWFD. */ int _gl_register_dup (int oldfd, int newfd) { assure (0 <= oldfd && 0 <= newfd && oldfd != newfd); if (oldfd < dirs_allocated && dirs[oldfd].name) { /* Duplicated a directory; must ensure newfd is allocated. */ if (!ensure_dirs_slot (newfd) || (dirs[newfd].name = strdup (dirs[oldfd].name)) == NULL) { int saved_errno = errno; close (newfd); errno = saved_errno; newfd = -1; } } else if (newfd < dirs_allocated) { /* Duplicated a non-directory; ensure newfd is cleared. */ free (dirs[newfd].name); dirs[newfd].name = NULL; } return newfd; } /* If FD is currently visiting a directory, then return the name of that directory. Otherwise, return NULL and set errno. */ const char * _gl_directory_name (int fd) { if (0 <= fd && fd < dirs_allocated && dirs[fd].name != NULL) return dirs[fd].name; /* At this point, fd is either invalid, or open but not a directory. If dup2 fails, errno is correctly EBADF. */ if (0 <= fd) { if (dup2 (fd, fd) == fd) errno = ENOTDIR; } else errno = EBADF; return NULL; } /* Implement fchdir() in terms of chdir(). */ int fchdir (int fd) { const char *name = _gl_directory_name (fd); return name ? chdir (name) : -1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/fcntl.c��������������������������������������������������������������0000644�0001750�0001750�00000044621�14557510505�013524� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide file descriptor control. Copyright (C) 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>. */ #include <config.h> /* Specification. */ #include <fcntl.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include <unistd.h> #ifdef __KLIBC__ # define INCL_DOS # include <os2.h> #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Upper bound on getdtablesize(). See lib/getdtablesize.c. */ # define OPEN_MAX_MAX 0x10000 /* Duplicate OLDFD into the first available slot of at least NEWFD, which must be positive, with FLAGS determining whether the duplicate will be inheritable. */ static int dupfd (int oldfd, int newfd, int flags) { /* Mingw has no way to create an arbitrary fd. Iterate until all file descriptors less than newfd are filled up. */ HANDLE curr_process = GetCurrentProcess (); HANDLE old_handle = (HANDLE) _get_osfhandle (oldfd); unsigned char fds_to_close[OPEN_MAX_MAX / CHAR_BIT]; unsigned int fds_to_close_bound = 0; int result; BOOL inherit = flags & O_CLOEXEC ? FALSE : TRUE; int mode; if (newfd < 0 || getdtablesize () <= newfd) { errno = EINVAL; return -1; } if (old_handle == INVALID_HANDLE_VALUE || (mode = _setmode (oldfd, O_BINARY)) == -1) { /* oldfd is not open, or is an unassigned standard file descriptor. */ errno = EBADF; return -1; } _setmode (oldfd, mode); flags |= mode; for (;;) { HANDLE new_handle; int duplicated_fd; unsigned int index; if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ old_handle, /* SourceHandle */ curr_process, /* TargetProcessHandle */ (PHANDLE) &new_handle, /* TargetHandle */ (DWORD) 0, /* DesiredAccess */ inherit, /* InheritHandle */ DUPLICATE_SAME_ACCESS)) /* Options */ { switch (GetLastError ()) { case ERROR_TOO_MANY_OPEN_FILES: errno = EMFILE; break; case ERROR_INVALID_HANDLE: case ERROR_INVALID_TARGET_HANDLE: case ERROR_DIRECT_ACCESS_HANDLE: errno = EBADF; break; case ERROR_INVALID_PARAMETER: case ERROR_INVALID_FUNCTION: case ERROR_INVALID_ACCESS: errno = EINVAL; break; default: errno = EACCES; break; } result = -1; break; } duplicated_fd = _open_osfhandle ((intptr_t) new_handle, flags); if (duplicated_fd < 0) { CloseHandle (new_handle); result = -1; break; } if (newfd <= duplicated_fd) { result = duplicated_fd; break; } /* Set the bit duplicated_fd in fds_to_close[]. */ index = (unsigned int) duplicated_fd / CHAR_BIT; if (fds_to_close_bound <= index) { if (sizeof fds_to_close <= index) /* Need to increase OPEN_MAX_MAX. */ abort (); memset (fds_to_close + fds_to_close_bound, '\0', index + 1 - fds_to_close_bound); fds_to_close_bound = index + 1; } fds_to_close[index] |= 1 << ((unsigned int) duplicated_fd % CHAR_BIT); } /* Close the previous fds that turned out to be too small. */ { int saved_errno = errno; unsigned int duplicated_fd; for (duplicated_fd = 0; duplicated_fd < fds_to_close_bound * CHAR_BIT; duplicated_fd++) if ((fds_to_close[duplicated_fd / CHAR_BIT] >> (duplicated_fd % CHAR_BIT)) & 1) close (duplicated_fd); errno = saved_errno; } # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (oldfd, result); # endif return result; } #endif /* W32 */ /* Forward declarations, because we '#undef fcntl' in the middle of this compilation unit. */ /* Our implementation of fcntl (fd, F_DUPFD, target). */ static int rpl_fcntl_DUPFD (int fd, int target); /* Our implementation of fcntl (fd, F_DUPFD_CLOEXEC, target). */ static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target); #ifdef __KLIBC__ /* Adds support for fcntl on directories. */ static int klibc_fcntl (int fd, int action, /* arg */...); #endif /* Perform the specified ACTION on the file descriptor FD, possibly using the argument ARG further described below. This replacement handles the following actions, and forwards all others on to the native fcntl. An unrecognized ACTION returns -1 with errno set to EINVAL. F_DUPFD - duplicate FD, with int ARG being the minimum target fd. If successful, return the duplicate, which will be inheritable; otherwise return -1 and set errno. F_DUPFD_CLOEXEC - duplicate FD, with int ARG being the minimum target fd. If successful, return the duplicate, which will not be inheritable; otherwise return -1 and set errno. F_GETFD - ARG need not be present. If successful, return a non-negative value containing the descriptor flags of FD (only FD_CLOEXEC is portable, but other flags may be present); otherwise return -1 and set errno. */ int fcntl (int fd, int action, /* arg */...) #undef fcntl #ifdef __KLIBC__ # define fcntl klibc_fcntl #endif { va_list arg; int result = -1; va_start (arg, action); switch (action) { case F_DUPFD: { int target = va_arg (arg, int); result = rpl_fcntl_DUPFD (fd, target); break; } case F_DUPFD_CLOEXEC: { int target = va_arg (arg, int); result = rpl_fcntl_DUPFD_CLOEXEC (fd, target); break; } #if !HAVE_FCNTL case F_GETFD: { # if defined _WIN32 && ! defined __CYGWIN__ HANDLE handle = (HANDLE) _get_osfhandle (fd); DWORD flags; if (handle == INVALID_HANDLE_VALUE || GetHandleInformation (handle, &flags) == 0) errno = EBADF; else result = (flags & HANDLE_FLAG_INHERIT) ? 0 : FD_CLOEXEC; # else /* !W32 */ /* Use dup2 to reject invalid file descriptors. No way to access this information, so punt. */ if (0 <= dup2 (fd, fd)) result = 0; # endif /* !W32 */ break; } /* F_GETFD */ #endif /* !HAVE_FCNTL */ /* Implementing F_SETFD on mingw is not trivial - there is no API for changing the O_NOINHERIT bit on an fd, and merely changing the HANDLE_FLAG_INHERIT bit on the underlying handle can lead to odd state. It may be possible by duplicating the handle, using _open_osfhandle with the right flags, then using dup2 to move the duplicate onto the original, but that is not supported for now. */ default: { #if HAVE_FCNTL switch (action) { #ifdef F_BARRIERFSYNC /* macOS */ case F_BARRIERFSYNC: #endif #ifdef F_CHKCLEAN /* macOS */ case F_CHKCLEAN: #endif #ifdef F_CLOSEM /* NetBSD, HP-UX */ case F_CLOSEM: #endif #ifdef F_FLUSH_DATA /* macOS */ case F_FLUSH_DATA: #endif #ifdef F_FREEZE_FS /* macOS */ case F_FREEZE_FS: #endif #ifdef F_FULLFSYNC /* macOS */ case F_FULLFSYNC: #endif #ifdef F_GETCONFINED /* macOS */ case F_GETCONFINED: #endif #ifdef F_GETDEFAULTPROTLEVEL /* macOS */ case F_GETDEFAULTPROTLEVEL: #endif #ifdef F_GETFD /* POSIX */ case F_GETFD: #endif #ifdef F_GETFL /* POSIX */ case F_GETFL: #endif #ifdef F_GETLEASE /* Linux */ case F_GETLEASE: #endif #ifdef F_GETNOSIGPIPE /* macOS */ case F_GETNOSIGPIPE: #endif #ifdef F_GETOWN /* POSIX */ case F_GETOWN: #endif #ifdef F_GETPIPE_SZ /* Linux */ case F_GETPIPE_SZ: #endif #ifdef F_GETPROTECTIONCLASS /* macOS */ case F_GETPROTECTIONCLASS: #endif #ifdef F_GETPROTECTIONLEVEL /* macOS */ case F_GETPROTECTIONLEVEL: #endif #ifdef F_GET_SEALS /* Linux */ case F_GET_SEALS: #endif #ifdef F_GETSIG /* Linux */ case F_GETSIG: #endif #ifdef F_MAXFD /* NetBSD */ case F_MAXFD: #endif #ifdef F_RECYCLE /* macOS */ case F_RECYCLE: #endif #ifdef F_SETFIFOENH /* HP-UX */ case F_SETFIFOENH: #endif #ifdef F_THAW_FS /* macOS */ case F_THAW_FS: #endif /* These actions take no argument. */ result = fcntl (fd, action); break; #ifdef F_ADD_SEALS /* Linux */ case F_ADD_SEALS: #endif #ifdef F_BADFD /* Solaris */ case F_BADFD: #endif #ifdef F_CHECK_OPENEVT /* macOS */ case F_CHECK_OPENEVT: #endif #ifdef F_DUP2FD /* FreeBSD, AIX, Solaris */ case F_DUP2FD: #endif #ifdef F_DUP2FD_CLOEXEC /* FreeBSD, Solaris */ case F_DUP2FD_CLOEXEC: #endif #ifdef F_DUP2FD_CLOFORK /* Solaris */ case F_DUP2FD_CLOFORK: #endif #ifdef F_DUPFD /* POSIX */ case F_DUPFD: #endif #ifdef F_DUPFD_CLOEXEC /* POSIX */ case F_DUPFD_CLOEXEC: #endif #ifdef F_DUPFD_CLOFORK /* Solaris */ case F_DUPFD_CLOFORK: #endif #ifdef F_GETXFL /* Solaris */ case F_GETXFL: #endif #ifdef F_GLOBAL_NOCACHE /* macOS */ case F_GLOBAL_NOCACHE: #endif #ifdef F_MAKECOMPRESSED /* macOS */ case F_MAKECOMPRESSED: #endif #ifdef F_MOVEDATAEXTENTS /* macOS */ case F_MOVEDATAEXTENTS: #endif #ifdef F_NOCACHE /* macOS */ case F_NOCACHE: #endif #ifdef F_NODIRECT /* macOS */ case F_NODIRECT: #endif #ifdef F_NOTIFY /* Linux */ case F_NOTIFY: #endif #ifdef F_OPLKACK /* IRIX */ case F_OPLKACK: #endif #ifdef F_OPLKREG /* IRIX */ case F_OPLKREG: #endif #ifdef F_RDAHEAD /* macOS */ case F_RDAHEAD: #endif #ifdef F_SETBACKINGSTORE /* macOS */ case F_SETBACKINGSTORE: #endif #ifdef F_SETCONFINED /* macOS */ case F_SETCONFINED: #endif #ifdef F_SETFD /* POSIX */ case F_SETFD: #endif #ifdef F_SETFL /* POSIX */ case F_SETFL: #endif #ifdef F_SETLEASE /* Linux */ case F_SETLEASE: #endif #ifdef F_SETNOSIGPIPE /* macOS */ case F_SETNOSIGPIPE: #endif #ifdef F_SETOWN /* POSIX */ case F_SETOWN: #endif #ifdef F_SETPIPE_SZ /* Linux */ case F_SETPIPE_SZ: #endif #ifdef F_SETPROTECTIONCLASS /* macOS */ case F_SETPROTECTIONCLASS: #endif #ifdef F_SETSIG /* Linux */ case F_SETSIG: #endif #ifdef F_SINGLE_WRITER /* macOS */ case F_SINGLE_WRITER: #endif /* These actions take an 'int' argument. */ { int x = va_arg (arg, int); result = fcntl (fd, action, x); } break; default: /* Other actions take a pointer argument. */ { void *p = va_arg (arg, void *); result = fcntl (fd, action, p); } break; } #else errno = EINVAL; #endif break; } } va_end (arg); return result; } static int rpl_fcntl_DUPFD (int fd, int target) { int result; #if !HAVE_FCNTL result = dupfd (fd, target, 0); #elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR /* Detect invalid target; needed for cygwin 1.5.x. */ if (target < 0 || getdtablesize () <= target) { result = -1; errno = EINVAL; } else { /* Haiku alpha 2 loses fd flags on original. */ int flags = fcntl (fd, F_GETFD); if (flags < 0) result = -1; else { result = fcntl (fd, F_DUPFD, target); if (0 <= result && fcntl (fd, F_SETFD, flags) == -1) { int saved_errno = errno; close (result); result = -1; errno = saved_errno; } # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif } } #else result = fcntl (fd, F_DUPFD, target); #endif return result; } static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target) { int result; #if !HAVE_FCNTL result = dupfd (fd, target, O_CLOEXEC); #else /* HAVE_FCNTL */ # if defined __NetBSD__ || defined __HAIKU__ /* On NetBSD 9.0, the system fcntl (fd, F_DUPFD_CLOEXEC, target) has only the same effect as fcntl (fd, F_DUPFD, target). */ /* On Haiku, the system fcntl (fd, F_DUPFD_CLOEXEC, target) sets the FD_CLOEXEC flag on fd, not on target. Therefore avoid the system fcntl in this case. */ # define have_dupfd_cloexec -1 # else /* Try the system call first, if the headers claim it exists (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we may be running with a glibc that has the macro but with an older kernel that does not support it. Cache the information on whether the system call really works, but avoid caching failure if the corresponding F_DUPFD fails for any reason. 0 = unknown, 1 = yes, -1 = no. */ static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0; if (0 <= have_dupfd_cloexec) { result = fcntl (fd, F_DUPFD_CLOEXEC, target); if (0 <= result || errno != EINVAL) { have_dupfd_cloexec = 1; # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif } else { result = rpl_fcntl_DUPFD (fd, target); if (result >= 0) have_dupfd_cloexec = -1; } } else # endif result = rpl_fcntl_DUPFD (fd, target); if (0 <= result && have_dupfd_cloexec == -1) { int flags = fcntl (result, F_GETFD); if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1) { int saved_errno = errno; close (result); errno = saved_errno; result = -1; } } #endif /* HAVE_FCNTL */ return result; } #undef fcntl #ifdef __KLIBC__ static int klibc_fcntl (int fd, int action, /* arg */...) { va_list arg_ptr; int arg; struct stat sbuf; int result; va_start (arg_ptr, action); arg = va_arg (arg_ptr, int); result = fcntl (fd, action, arg); /* EPERM for F_DUPFD, ENOTSUP for others */ if (result == -1 && (errno == EPERM || errno == ENOTSUP) && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { ULONG ulMode; switch (action) { case F_DUPFD: /* Find available fd */ while (fcntl (arg, F_GETFL) != -1 || errno != EBADF) arg++; result = dup2 (fd, arg); break; /* Using underlying APIs is right ? */ case F_GETFD: if (DosQueryFHState (fd, &ulMode)) break; result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0; break; case F_SETFD: if (arg & ~FD_CLOEXEC) break; if (DosQueryFHState (fd, &ulMode)) break; if (arg & FD_CLOEXEC) ulMode |= OPEN_FLAGS_NOINHERIT; else ulMode &= ~OPEN_FLAGS_NOINHERIT; /* Filter supported flags. */ ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT); if (DosSetFHState (fd, ulMode)) break; result = 0; break; case F_GETFL: result = 0; break; case F_SETFL: if (arg != 0) break; result = 0; break; default: errno = EINVAL; break; } } va_end (arg_ptr); return result; } #endif ���������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/fd-hook.c������������������������������������������������������������0000644�0001750�0001750�00000007025�14557510505�013742� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hook for making file descriptor functions close(), ioctl() extensible. Copyright (C) 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "fd-hook.h" #include <stdlib.h> /* Currently, this entire code is only needed for the handling of sockets on native Windows platforms. */ #if WINDOWS_SOCKETS /* The first and last link in the doubly linked list. Initially the list is empty. */ static struct fd_hook anchor = { &anchor, &anchor, NULL, NULL }; int execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, int fd) { if (remaining_list == &anchor) /* End of list reached. */ return primary (fd); else return remaining_list->private_close_fn (remaining_list->private_next, primary, fd); } int execute_all_close_hooks (gl_close_fn primary, int fd) { return execute_close_hooks (anchor.private_next, primary, fd); } int execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg) { if (remaining_list == &anchor) /* End of list reached. */ return primary (fd, request, arg); else return remaining_list->private_ioctl_fn (remaining_list->private_next, primary, fd, request, arg); } int execute_all_ioctl_hooks (gl_ioctl_fn primary, int fd, int request, void *arg) { return execute_ioctl_hooks (anchor.private_next, primary, fd, request, arg); } void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link) { if (close_hook == NULL) close_hook = execute_close_hooks; if (ioctl_hook == NULL) ioctl_hook = execute_ioctl_hooks; if (link->private_next == NULL && link->private_prev == NULL) { /* Add the link to the doubly linked list. */ link->private_next = anchor.private_next; link->private_prev = &anchor; link->private_close_fn = close_hook; link->private_ioctl_fn = ioctl_hook; anchor.private_next->private_prev = link; anchor.private_next = link; } else { /* The link is already in use. */ if (link->private_close_fn != close_hook || link->private_ioctl_fn != ioctl_hook) abort (); } } void unregister_fd_hook (struct fd_hook *link) { struct fd_hook *next = link->private_next; struct fd_hook *prev = link->private_prev; if (next != NULL && prev != NULL) { /* The link is in use. Remove it from the doubly linked list. */ prev->private_next = next; next->private_prev = prev; /* Clear the link, to mark it unused. */ link->private_next = NULL; link->private_prev = NULL; link->private_close_fn = NULL; link->private_ioctl_fn = NULL; } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/fd-safer-flag.c������������������������������������������������������0000644�0001750�0001750�00000003352�14557510505�015010� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Adjust a file descriptor result so that it avoids clobbering STD{IN,OUT,ERR}_FILENO, with specific flags. Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Eric Blake. */ #include <config.h> /* Specification. */ #include "unistd-safer.h" #include <errno.h> #include <unistd.h> /* Return FD, unless FD would be a copy of standard input, output, or error; in that case, return a duplicate of FD, closing FD. If FLAG contains O_CLOEXEC, the returned FD will have close-on-exec semantics. On failure to duplicate, close FD, set errno, and return -1. Preserve errno if FD is negative, so that the caller can always inspect errno when the returned value is negative. This function is usefully wrapped around functions that return file descriptors, e.g., fd_safer_flag (open ("file", O_RDONLY | flag), flag). */ int fd_safer_flag (int fd, int flag) { if (STDIN_FILENO <= fd && fd <= STDERR_FILENO) { int f = dup_safer_flag (fd, flag); int e = errno; close (fd); errno = e; fd = f; } return fd; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/dup-safer-flag.c�����������������������������������������������������0000644�0001750�0001750�00000002444�14557510505�015210� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate a file descriptor result, avoiding clobbering STD{IN,OUT,ERR}_FILENO, with specific flags. Copyright (C) 2001, 2004-2006, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Eric Blake. */ #include <config.h> /* Specification. */ #include "unistd-safer.h" #include <fcntl.h> #include <unistd.h> /* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. If FLAG contains O_CLOEXEC, behave like fcntl(F_DUPFD_CLOEXEC) rather than fcntl(F_DUPFD). */ int dup_safer_flag (int fd, int flag) { return fcntl (fd, (flag & O_CLOEXEC) ? F_DUPFD_CLOEXEC : F_DUPFD, STDERR_FILENO + 1); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/filenamecat-lgpl.c���������������������������������������������������0000644�0001750�0001750�00000005411�14557510505�015614� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two arbitrary file names. Copyright (C) 1996-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> /* Specification. */ #include "filenamecat.h" #include <stdlib.h> #include <string.h> #include "basename-lgpl.h" #include "filename.h" #if ! HAVE_MEMPCPY && ! defined mempcpy # define mempcpy(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N))) #endif /* Concatenate two file name components, DIR and BASE, in newly-allocated storage and return the result. The resulting file name F is such that the commands "ls F" and "(cd DIR; ls ./BASE)" refer to the same file. If necessary, put a separator between DIR and BASE in the result. Typically this separator is "/", but in rare cases it might be ".". In any case, if BASE_IN_RESULT is non-NULL, set *BASE_IN_RESULT to point to the copy of BASE at the end of the returned concatenation. If malloc fails, return NULL with errno set. */ char * mfile_name_concat (char const *dir, char const *base, char **base_in_result) { char const *dirbase = last_component (dir); size_t dirbaselen = base_len (dirbase); size_t dirlen = dirbase - dir + dirbaselen; size_t baselen = strlen (base); char sep = '\0'; if (dirbaselen) { /* DIR is not a file system root, so separate with / if needed. */ if (! ISSLASH (dir[dirlen - 1]) && ! ISSLASH (*base)) sep = '/'; } else if (ISSLASH (*base)) { /* DIR is a file system root and BASE begins with a slash, so separate with ".". For example, if DIR is "/" and BASE is "/foo" then return "/./foo", as "//foo" would be wrong on some POSIX systems. A fancier algorithm could omit "." in some cases but is not worth the trouble. */ sep = '.'; } char *p_concat = malloc (dirlen + (sep != '\0') + baselen + 1); if (p_concat == NULL) return NULL; { char *p; p = mempcpy (p_concat, dir, dirlen); *p = sep; p += sep != '\0'; if (base_in_result) *base_in_result = p; p = mempcpy (p, base, baselen); *p = '\0'; } return p_concat; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/float.c��������������������������������������������������������������0000644�0001750�0001750�00000002526�14557510505�013521� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary definitions for <float.h>. Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <float.h> #if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ const union gl_long_double_union gl_LDBL_MAX = { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } }; #elif defined __i386__ const union gl_long_double_union gl_LDBL_MAX = { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } }; #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/itold.c��������������������������������������������������������������0000644�0001750�0001750�00000002032�14557510505�013517� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacement for 'int' to 'long double' conversion routine. Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <float.h> void _Qp_itoq (long double *result, int a) { /* Convert from 'int' to 'double', then from 'double' to 'long double'. */ *result = (double) a; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/free.c���������������������������������������������������������������0000644�0001750�0001750�00000002772�14557510505�013340� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Make free() preserve errno. Copyright (C) 2003, 2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ #include <config.h> /* Specification. */ #include <stdlib.h> /* A function definition is only needed if HAVE_FREE_POSIX is not defined. */ #if !HAVE_FREE_POSIX # include <errno.h> void rpl_free (void *p) # undef free { # if defined __GNUC__ && !defined __clang__ /* An invalid GCC optimization <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98396> would optimize away the assignments in the code below, when link-time optimization (LTO) is enabled. Make the code more complicated, so that GCC does not grok how to optimize it. */ int err[2]; err[0] = errno; err[1] = errno; errno = 0; free (p); errno = err[errno == 0]; # else int err = errno; free (p); errno = err; # endif } #endif ������gnuastro-0.22/bootstrapped/lib/fstat.c��������������������������������������������������������������0000644�0001750�0001750�00000005153�14557510505�013534� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fstat() replacement. Copyright (C) 2011-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_fstat doesn't recurse to rpl_fstat. */ #define __need_system_sys_stat_h #include <config.h> /* Get the original definition of fstat. It might be defined as a macro. */ #include <sys/types.h> #include <sys/stat.h> #undef __need_system_sys_stat_h #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #if !defined WINDOWS_NATIVE static int orig_fstat (int fd, struct stat *buf) { return fstat (fd, buf); } #endif /* Specification. */ #ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" #else # include <sys/stat.h> #endif #include "stat-time.h" #include <errno.h> #include <unistd.h> #ifdef WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # include "stat-w32.h" #endif int rpl_fstat (int fd, struct stat *buf) { #if REPLACE_FCHDIR && REPLACE_OPEN_DIRECTORY /* Handle the case when rpl_open() used a dummy file descriptor to work around an open() that can't normally visit directories. */ const char *name = _gl_directory_name (fd); if (name != NULL) return stat (name, buf); #endif #ifdef WINDOWS_NATIVE /* Fill the fields ourselves, because the original fstat function returns values for st_atime, st_mtime, st_ctime that depend on the current time zone. See <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */ HANDLE h = (HANDLE) _get_osfhandle (fd); if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } return _gl_fstat_by_handle (h, NULL, buf); #else return stat_time_normalize (orig_fstat (fd, buf), buf); #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/fstatat.c������������������������������������������������������������0000644�0001750�0001750�00000011215�14557510505�014055� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around an fstatat bug on Solaris 9. Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Jim Meyering. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_fstatat doesn't recurse to rpl_fstatat. */ #define __need_system_sys_stat_h #include <config.h> /* Get the original definition of fstatat. It might be defined as a macro. */ #include <sys/types.h> #include <sys/stat.h> #undef __need_system_sys_stat_h #if HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG static int orig_fstatat (int fd, char const *filename, struct stat *buf, int flags) { return fstatat (fd, filename, buf, flags); } #endif #ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" #else # include <sys/stat.h> #endif #include "stat-time.h" #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #if HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG # ifndef LSTAT_FOLLOWS_SLASHED_SYMLINK # define LSTAT_FOLLOWS_SLASHED_SYMLINK 0 # endif static int normal_fstatat (int fd, char const *file, struct stat *st, int flag) { return stat_time_normalize (orig_fstatat (fd, file, st, flag), st); } /* fstatat should always follow symbolic links that end in /, but on Solaris 9 it doesn't if AT_SYMLINK_NOFOLLOW is specified. Likewise, trailing slash on a non-directory should be an error. These are the same problems that lstat.c and stat.c address, so solve it in a similar way. AIX 7.1 fstatat (AT_FDCWD, ..., 0) always fails, which is a bug. Work around this bug if FSTATAT_AT_FDCWD_0_BROKEN is nonzero. */ int rpl_fstatat (int fd, char const *file, struct stat *st, int flag) { int result = normal_fstatat (fd, file, st, flag); size_t len; if (LSTAT_FOLLOWS_SLASHED_SYMLINK || result != 0) return result; len = strlen (file); if (flag & AT_SYMLINK_NOFOLLOW) { /* Fix lstat behavior. */ if (file[len - 1] != '/' || S_ISDIR (st->st_mode)) return 0; if (!S_ISLNK (st->st_mode)) { errno = ENOTDIR; return -1; } result = normal_fstatat (fd, file, st, flag & ~AT_SYMLINK_NOFOLLOW); } /* Fix stat behavior. */ if (result == 0 && !S_ISDIR (st->st_mode) && file[len - 1] == '/') { errno = ENOTDIR; return -1; } return result; } #else /* ! (HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG) */ /* On mingw, the gnulib <sys/stat.h> defines 'stat' as a function-like macro; but using it in AT_FUNC_F2 causes compilation failure because the preprocessor sees a use of a macro that requires two arguments but is only given one. Hence, we need an inline forwarder to get past the preprocessor. */ static int stat_func (char const *name, struct stat *st) { return stat (name, st); } /* Likewise, if there is no native 'lstat', then the gnulib <sys/stat.h> defined it as stat, which also needs adjustment. */ # if !HAVE_LSTAT # undef lstat # define lstat stat_func # endif /* Replacement for Solaris' function by the same name. <https://www.google.com/search?q=fstatat+site:docs.oracle.com> First, try to simulate it via l?stat ("/proc/self/fd/FD/FILE"). Failing that, simulate it via save_cwd/fchdir/(stat|lstat)/restore_cwd. If either the save_cwd or the restore_cwd fails (relatively unlikely), then give a diagnostic and exit nonzero. Otherwise, this function works just like Solaris' fstatat. */ # define AT_FUNC_NAME fstatat # define AT_FUNC_F1 lstat # define AT_FUNC_F2 stat_func # define AT_FUNC_USE_F1_COND AT_SYMLINK_NOFOLLOW # define AT_FUNC_POST_FILE_PARAM_DECLS , struct stat *st, int flag # define AT_FUNC_POST_FILE_ARGS , st # include "at-func.c" # undef AT_FUNC_NAME # undef AT_FUNC_F1 # undef AT_FUNC_F2 # undef AT_FUNC_USE_F1_COND # undef AT_FUNC_POST_FILE_PARAM_DECLS # undef AT_FUNC_POST_FILE_ARGS #endif /* !HAVE_FSTATAT */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getcwd-lgpl.c��������������������������������������������������������0000644�0001750�0001750�00000006327�14557510505�014630� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2011-2024 Free Software Foundation, Inc. This file is part of gnulib. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification */ #include <unistd.h> #include <errno.h> #include <stdlib.h> #include <string.h> #if GNULIB_GETCWD /* Favor GPL getcwd.c if both getcwd and getcwd-lgpl modules are in use. */ typedef int dummy; #else /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Returns NULL if the directory couldn't be determined (perhaps because the absolute name was longer than PATH_MAX, or because of missing read/search permissions on parent directories) or SIZE was too small. If successful, returns BUF. If BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ # undef getcwd # if defined _WIN32 && !defined __CYGWIN__ # define getcwd _getcwd # endif char * rpl_getcwd (char *buf, size_t size) { char *result; /* Handle single size operations. */ if (buf) { /* Check SIZE argument. */ if (!size) { errno = EINVAL; return NULL; } return getcwd (buf, size); } if (size) { buf = malloc (size); if (!buf) { errno = ENOMEM; return NULL; } result = getcwd (buf, size); if (!result) free (buf); return result; } /* Flexible sizing requested. Avoid over-allocation for the common case of a name that fits within a 4k page, minus some space for local variables, to be sure we don't skip over a guard page. */ { char tmp[4032]; size = sizeof tmp; char *ptr = getcwd (tmp, size); if (ptr) { result = strdup (ptr); if (!result) errno = ENOMEM; return result; } if (errno != ERANGE) return NULL; } /* My what a large directory name we have. */ do { size <<= 1; char *ptr = realloc (buf, size); if (ptr == NULL) { free (buf); errno = ENOMEM; return NULL; } buf = ptr; result = getcwd (buf, size); } while (!result && errno == ERANGE); if (!result) free (buf); else { /* Here result == buf. */ /* Shrink result before returning it. */ size_t actual_size = strlen (result) + 1; if (actual_size < size) { char *shrinked_result = realloc (result, actual_size); if (shrinked_result != NULL) result = shrinked_result; } } return result; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getdelim.c�����������������������������������������������������������0000644�0001750�0001750�00000007443�14557510505�014211� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getdelim.c --- Implementation of replacement getdelim function. Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Ported from glibc by Simon Josefsson. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the lineptr == NULL || n == NULL || fp == NULL tests below. */ #define _GL_ARG_NONNULL(params) #include <config.h> #include <stdio.h> #include <limits.h> #include <stdint.h> #include <stdlib.h> #include <errno.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" # define getc_maybe_unlocked(fp) getc(fp) #elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED # undef flockfile # undef funlockfile # define flockfile(x) ((void) 0) # define funlockfile(x) ((void) 0) # define getc_maybe_unlocked(fp) getc(fp) #else # define getc_maybe_unlocked(fp) getc_unlocked(fp) #endif static void alloc_failed (void) { #if defined _WIN32 && ! defined __CYGWIN__ /* Avoid errno problem without using the realloc module; see: https://lists.gnu.org/r/bug-gnulib/2016-08/msg00025.html */ errno = ENOMEM; #endif } /* Read up to (and including) a DELIMITER from FP into *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *N characters of space. It is realloc'ed as necessary. Returns the number of characters read (not including the null terminator), or -1 on error or EOF. */ ssize_t getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) { ssize_t result; size_t cur_len = 0; if (lineptr == NULL || n == NULL || fp == NULL) { errno = EINVAL; return -1; } flockfile (fp); if (*lineptr == NULL || *n == 0) { char *new_lineptr; *n = 120; new_lineptr = (char *) realloc (*lineptr, *n); if (new_lineptr == NULL) { alloc_failed (); result = -1; goto unlock_return; } *lineptr = new_lineptr; } for (;;) { int i; i = getc_maybe_unlocked (fp); if (i == EOF) { result = -1; break; } /* Make enough space for len+1 (for final NUL) bytes. */ if (cur_len + 1 >= *n) { size_t needed_max = SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; size_t needed = 2 * *n + 1; /* Be generous. */ char *new_lineptr; if (needed_max < needed) needed = needed_max; if (cur_len + 1 >= needed) { result = -1; errno = EOVERFLOW; goto unlock_return; } new_lineptr = (char *) realloc (*lineptr, needed); if (new_lineptr == NULL) { alloc_failed (); result = -1; goto unlock_return; } *lineptr = new_lineptr; *n = needed; } (*lineptr)[cur_len] = i; cur_len++; if (i == delimiter) break; } (*lineptr)[cur_len] = '\0'; result = cur_len ? cur_len : result; unlock_return: funlockfile (fp); /* doesn't set errno */ return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getdtablesize.c������������������������������������������������������0000644�0001750�0001750�00000006565�14557510505�015251� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getdtablesize() function: Return maximum possible file descriptor value + 1. Copyright (C) 2008-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <stdio.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int _setmaxstdio_nothrow (int newmax) { int result; TRY_MSVC_INVAL { result = _setmaxstdio (newmax); } CATCH_MSVC_INVAL { result = -1; } DONE_MSVC_INVAL; return result; } # else # define _setmaxstdio_nothrow _setmaxstdio # endif /* Cache for the previous getdtablesize () result. Safe to cache because Windows also lacks setrlimit. */ static int dtablesize; int getdtablesize (void) { if (dtablesize == 0) { /* We are looking for the number N such that the valid file descriptors are 0..N-1. It can be obtained through a loop as follows: { int fd; for (fd = 3; fd < 65536; fd++) if (dup2 (0, fd) == -1) break; return fd; } On Windows XP, the result is 2048. The drawback of this loop is that it allocates memory for a libc internal array that is never freed. The number N can also be obtained as the upper bound for _getmaxstdio (). _getmaxstdio () returns the maximum number of open FILE objects. The sanity check in _setmaxstdio reveals the maximum number of file descriptors. This too allocates memory, but it is freed when we call _setmaxstdio with the original value. */ int orig_max_stdio = _getmaxstdio (); unsigned int bound; for (bound = 0x10000; _setmaxstdio_nothrow (bound) < 0; bound = bound / 2) ; _setmaxstdio_nothrow (orig_max_stdio); dtablesize = bound; } return dtablesize; } #else # include <limits.h> # include <sys/resource.h> # ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY # endif # ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY # endif # ifdef __CYGWIN__ /* Cygwin 1.7.25 auto-increases the RLIMIT_NOFILE soft limit until it hits the compile-time constant hard limit of 3200. We might as well just report the hard limit. */ # define rlim_cur rlim_max # endif int getdtablesize (void) { struct rlimit lim; if (getrlimit (RLIMIT_NOFILE, &lim) == 0 && 0 <= lim.rlim_cur && lim.rlim_cur <= INT_MAX && lim.rlim_cur != RLIM_INFINITY && lim.rlim_cur != RLIM_SAVED_CUR && lim.rlim_cur != RLIM_SAVED_MAX) return lim.rlim_cur; return INT_MAX; } #endif �������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getgroups.c����������������������������������������������������������0000644�0001750�0001750�00000007070�14557510505�014432� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide consistent interface to getgroups for systems that don't allow N==0 Copyright (C) 1996, 1999, 2003, 2006-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> #include <unistd.h> #include <errno.h> #include <stdlib.h> #include <stdint.h> #if !HAVE_GETGROUPS /* Provide a stub that fails with ENOSYS, since there is no group information available on mingw. */ int getgroups (_GL_UNUSED int n, _GL_UNUSED GETGROUPS_T *groups) { errno = ENOSYS; return -1; } #else /* HAVE_GETGROUPS */ # undef getgroups # ifndef GETGROUPS_ZERO_BUG # define GETGROUPS_ZERO_BUG 0 # endif /* On OS X 10.6 and later, use the usual getgroups, not the one supplied when _DARWIN_C_SOURCE is defined. _DARWIN_C_SOURCE is normally defined, since it means "conform to POSIX, but add non-POSIX extensions even if that violates the POSIX namespace rules", which is what we normally want. But with getgroups there is an inconsistency, and _DARWIN_C_SOURCE means "change getgroups() so that it no longer works right". The BUGS section of compat(5) says that the behavior is dubious if you compile different sections of a program with different _DARWIN_C_SOURCE settings, so fix only the offending symbol. */ # ifdef __APPLE__ int posix_getgroups (int, gid_t []) __asm ("_getgroups"); # define getgroups posix_getgroups # endif /* On at least NeXTstep 3.2, getgroups (0, NULL) always fails. On other systems, it returns the number of supplemental groups for the process. This function handles that special case and lets the system-provided function handle all others. However, it can fail with ENOMEM if memory is tight. It is unspecified whether the effective group id is included in the list. */ int rpl_getgroups (int n, gid_t *group) { int n_groups; GETGROUPS_T *gbuf; if (n < 0) { errno = EINVAL; return -1; } if (n != 0 || !GETGROUPS_ZERO_BUG) { int result; if (sizeof *group == sizeof *gbuf) return getgroups (n, (GETGROUPS_T *) group); if (SIZE_MAX / sizeof *gbuf <= n) { errno = ENOMEM; return -1; } gbuf = malloc (n * sizeof *gbuf); if (!gbuf) return -1; result = getgroups (n, gbuf); if (0 <= result) { n = result; while (n--) group[n] = gbuf[n]; } free (gbuf); return result; } n = 20; while (1) { /* No need to worry about address arithmetic overflow here, since the ancient systems that we're running on have low limits on the number of secondary groups. */ gbuf = malloc (n * sizeof *gbuf); if (!gbuf) return -1; n_groups = getgroups (n, gbuf); if (n_groups == -1 ? errno != EINVAL : n_groups < n) break; free (gbuf); n *= 2; } free (gbuf); return n_groups; } #endif /* HAVE_GETGROUPS */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getline.c������������������������������������������������������������0000644�0001750�0001750�00000001730�14557510505�014037� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getline.c --- Implementation of replacement getline function. Copyright (C) 2005-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson. */ #include <config.h> #include <stdio.h> ssize_t getline (char **lineptr, size_t *n, FILE *stream) { return getdelim (lineptr, n, '\n', stream); } ����������������������������������������gnuastro-0.22/bootstrapped/lib/getopt.c�������������������������������������������������������������0000644�0001750�0001750�00000057427�14557510505�013730� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Getopt for GNU. Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> #endif #include <getopt.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef _LIBC /* When used as part of glibc, error printing must be done differently for standards compliance. getopt is not a cancellation point, so it must not call functions that are, and it is specified by an older standard than stdio locking, so it must not refer to functions in the "user namespace" related to stdio locking. Finally, it must use glibc's internal message translation so that the messages are looked up in the proper text domain. */ # include <libintl.h> # define fprintf __fxprintf_nocancel # define flockfile(fp) _IO_flockfile (fp) # define funlockfile(fp) _IO_funlockfile (fp) #else # include "gettext.h" # define _(msgid) gettext (msgid) /* When used standalone, flockfile and funlockfile might not be available. */ # if (!defined _POSIX_THREAD_SAFE_FUNCTIONS \ || (defined _WIN32 && ! defined __CYGWIN__)) # define flockfile(fp) /* nop */ # define funlockfile(fp) /* nop */ # endif /* When used standalone, do not attempt to use alloca. */ # define __libc_use_alloca(size) 0 # undef alloca # define alloca(size) (abort (), (void *)0) #endif /* This implementation of 'getopt' has three modes for handling options interspersed with non-option arguments. It can stop scanning for options at the first non-option argument encountered, as POSIX specifies. It can continue scanning for options after the first non-option argument, but permute 'argv' as it goes so that, after 'getopt' is done, all the options precede all the non-option arguments and 'optind' points to the first non-option argument. Or, it can report non-option arguments as if they were arguments to the option character '\x01'. The default behavior of 'getopt_long' is to permute the argument list. When this implementation is used standalone, the default behavior of 'getopt' is to stop at the first non-option argument, but when it is used as part of GNU libc it also permutes the argument list. In both cases, setting the environment variable POSIXLY_CORRECT to any value disables permutation. If the first character of the OPTSTRING argument to 'getopt' or 'getopt_long' is '+', both functions will stop at the first non-option argument. If it is '-', both functions will report non-option arguments as arguments to the option character '\x01'. */ #include "getopt_int.h" /* For communication from 'getopt' to the caller. When 'getopt' finds an option that takes an argument, the argument value is returned here. Also, when 'ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to 'getopt'. On entry to 'getopt', zero means this is the first call; initialize. When 'getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, 'optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Keep a global copy of all internal members of getopt_data. */ static struct _getopt_data getopt_data; /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. 'first_nonopt' and 'last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ static void exchange (char **argv, struct _getopt_data *d) { int bottom = d->__first_nonopt; int middle = d->__last_nonopt; int top = d->optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ d->__first_nonopt += (d->optind - d->__last_nonopt); d->__last_nonopt = d->optind; } /* Process the argument starting with d->__nextchar as a long option. d->optind should *not* have been advanced over this argument. If the value returned is -1, it was not actually a long option, the state is unchanged, and the argument should be processed as a set of short options (this can only happen when long_only is true). Otherwise, the option (and its argument, if any) have been consumed and the return value is the value to return from _getopt_internal_r. */ static int process_long_option (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, struct _getopt_data *d, int print_errors, const char *prefix) { char *nameend; size_t namelen; const struct option *p; const struct option *pfound = NULL; int n_options; int option_index; for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; namelen = nameend - d->__nextchar; /* First look for an exact match, counting the options as a side effect. */ for (p = longopts, n_options = 0; p->name; p++, n_options++) if (!strncmp (p->name, d->__nextchar, namelen) && namelen == strlen (p->name)) { /* Exact match found. */ pfound = p; option_index = n_options; break; } if (pfound == NULL) { /* Didn't find an exact match, so look for abbreviations. */ unsigned char *ambig_set = NULL; /* Use simpler fallback diagnostic if ambig_set == &ambig_fallback. */ unsigned char ambig_fallback; void *ambig_malloced = NULL; int indfound = -1; for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, d->__nextchar, namelen)) { if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) { /* Second or later nonexact match found. */ if (ambig_set != &ambig_fallback) { if (!print_errors) /* Don't waste effort tracking the ambig set if we're not going to print it anyway. */ ambig_set = &ambig_fallback; else if (!ambig_set) { if (__libc_use_alloca (n_options)) ambig_set = alloca (n_options); else { ambig_malloced = malloc (n_options); /* Fall back to simpler diagnostic if memory allocation fails. */ ambig_set = (ambig_malloced ? ambig_malloced : &ambig_fallback); } if (ambig_set != &ambig_fallback) { memset (ambig_set, 0, n_options); ambig_set[indfound] = 1; } } if (ambig_set && ambig_set != &ambig_fallback) ambig_set[option_index] = 1; } } } if (ambig_set) { if (print_errors) { if (ambig_set == &ambig_fallback) fprintf (stderr, _("%s: option '%s%s' is ambiguous\n"), argv[0], prefix, d->__nextchar); else { flockfile (stderr); fprintf (stderr, _("%s: option '%s%s' is ambiguous; possibilities:"), argv[0], prefix, d->__nextchar); for (option_index = 0; option_index < n_options; option_index++) if (ambig_set[option_index]) fprintf (stderr, " '%s%s'", prefix, longopts[option_index].name); /* This must use 'fprintf' even though it's only printing a single character, so that it goes through __fxprintf_nocancel when compiled as part of glibc. */ fprintf (stderr, "\n"); funlockfile (stderr); } } free (ambig_malloced); d->__nextchar += strlen (d->__nextchar); d->optind++; d->optopt = 0; return '?'; } option_index = indfound; } if (pfound == NULL) { /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. */ if (!long_only || argv[d->optind][1] == '-' || strchr (optstring, *d->__nextchar) == NULL) { if (print_errors) fprintf (stderr, _("%s: unrecognized option '%s%s'\n"), argv[0], prefix, d->__nextchar); d->__nextchar = NULL; d->optind++; d->optopt = 0; return '?'; } /* Otherwise interpret it as a short option. */ return -1; } /* We have found a matching long option. Consume it. */ d->optind++; d->__nextchar = NULL; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) d->optarg = nameend + 1; else { if (print_errors) fprintf (stderr, _("%s: option '%s%s' doesn't allow an argument\n"), argv[0], prefix, pfound->name); d->optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) fprintf (stderr, _("%s: option '%s%s' requires an argument\n"), argv[0], prefix, pfound->name); d->optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Initialize internal data upon the first call to getopt. */ static const char * _getopt_initialize (_GL_UNUSED int argc, _GL_UNUSED char **argv, const char *optstring, struct _getopt_data *d, int posixly_correct) { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ if (d->optind == 0) d->optind = 1; d->__first_nonopt = d->__last_nonopt = d->optind; d->__nextchar = NULL; /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { d->__ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { d->__ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct || !!getenv ("POSIXLY_CORRECT")) d->__ordering = REQUIRE_ORDER; else d->__ordering = PERMUTE; d->__initialized = 1; return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If 'getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If 'getopt' finds another option character, it returns that character, updating 'optind' and 'nextchar' so that the next call to 'getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, 'getopt' returns -1. Then 'optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set 'opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in 'optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in 'optarg', otherwise 'optarg' is set to zero. If OPTSTRING starts with '-' or '+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with '--' instead of '-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a '=', or else the in next ARGV-element. When 'getopt' finds a long-named option, it returns 0 if that option's 'flag' field is nonzero, the value of the option's 'val' field if the 'flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of 'struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal_r (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, struct _getopt_data *d, int posixly_correct) { int print_errors = d->opterr; if (argc < 1) return -1; d->optarg = NULL; if (d->optind == 0 || !d->__initialized) optstring = _getopt_initialize (argc, argv, optstring, d, posixly_correct); else if (optstring[0] == '-' || optstring[0] == '+') optstring++; if (optstring[0] == ':') print_errors = 0; /* Test whether ARGV[optind] points to a non-option argument. */ #define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') if (d->__nextchar == NULL || *d->__nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (d->__last_nonopt > d->optind) d->__last_nonopt = d->optind; if (d->__first_nonopt > d->optind) d->__first_nonopt = d->optind; if (d->__ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange (argv, d); else if (d->__last_nonopt != d->optind) d->__first_nonopt = d->optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (d->optind < argc && NONOPTION_P) d->optind++; d->__last_nonopt = d->optind; } /* The special ARGV-element '--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (d->optind != argc && !strcmp (argv[d->optind], "--")) { d->optind++; if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange (argv, d); else if (d->__first_nonopt == d->__last_nonopt) d->__first_nonopt = d->optind; d->__last_nonopt = argc; d->optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (d->optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (d->__first_nonopt != d->__last_nonopt) d->optind = d->__first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (d->__ordering == REQUIRE_ORDER) return -1; d->optarg = argv[d->optind++]; return 1; } /* We have found another option-ARGV-element. Check whether it might be a long option. */ if (longopts) { if (argv[d->optind][1] == '-') { /* "--foo" is always a long option. The special option "--" was handled above. */ d->__nextchar = argv[d->optind] + 2; return process_long_option (argc, argv, optstring, longopts, longind, long_only, d, print_errors, "--"); } /* If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (long_only && (argv[d->optind][2] || !strchr (optstring, argv[d->optind][1]))) { int code; d->__nextchar = argv[d->optind] + 1; code = process_long_option (argc, argv, optstring, longopts, longind, long_only, d, print_errors, "-"); if (code != -1) return code; } } /* It is not a long option. Skip the initial punctuation. */ d->__nextchar = argv[d->optind] + 1; } /* Look at and handle the next short option-character. */ { char c = *d->__nextchar++; const char *temp = strchr (optstring, c); /* Increment 'optind' when we start to process its last character. */ if (*d->__nextchar == '\0') ++d->optind; if (temp == NULL || c == ':' || c == ';') { if (print_errors) fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c); d->optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';' && longopts != NULL) { /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') d->optarg = d->__nextchar; else if (d->optind == argc) { if (print_errors) fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else d->optarg = argv[d->optind]; d->__nextchar = d->optarg; d->optarg = NULL; return process_long_option (argc, argv, optstring, longopts, longind, 0 /* long_only */, d, print_errors, "-W "); } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; d->optind++; } else d->optarg = NULL; d->__nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ d->optind++; } else if (d->optind == argc) { if (print_errors) fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented 'optind' once; increment it again when taking next ARGV-elt as argument. */ d->optarg = argv[d->optind++]; d->__nextchar = NULL; } } return c; } } int _getopt_internal (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, int posixly_correct) { int result; getopt_data.optind = optind; getopt_data.opterr = opterr; result = _getopt_internal_r (argc, argv, optstring, longopts, longind, long_only, &getopt_data, posixly_correct); optind = getopt_data.optind; optarg = getopt_data.optarg; optopt = getopt_data.optopt; return result; } /* glibc gets a LSB-compliant getopt and a POSIX-complaint __posix_getopt. Standalone applications just get a POSIX-compliant getopt. POSIX and LSB both require these functions to take 'char *const *argv' even though this is incorrect (because of the permutation). */ #define GETOPT_ENTRY(NAME, POSIXLY_CORRECT) \ int \ NAME (int argc, char *const *argv, const char *optstring) \ { \ return _getopt_internal (argc, (char **)argv, optstring, \ 0, 0, 0, POSIXLY_CORRECT); \ } #ifdef _LIBC GETOPT_ENTRY(getopt, 0) GETOPT_ENTRY(__posix_getopt, 1) #else GETOPT_ENTRY(getopt, 1) #endif #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of 'getopt'. */ int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getopt1.c������������������������������������������������������������0000644�0001750�0001750�00000007360�14557510505�014000� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987-2024 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> #endif #include <getopt.h> #include "getopt_int.h" int getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 0, 0); } int _getopt_long_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 0, d, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 1, 0); } int _getopt_long_only_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 1, d, 0); } #ifdef TEST #include <stdio.h> #include <stdlib.h> int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static const struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case 'd': printf ("option d with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getprogname.c��������������������������������������������������������0000644�0001750�0001750�00000023610�14557510505�014721� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2016-2024 Free Software Foundation, Inc. This program 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 program 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. Also get __argv declaration. */ #include <stdlib.h> #include <errno.h> /* get program_invocation_name declaration */ #ifdef _AIX # include <unistd.h> # include <procinfo.h> # include <string.h> #endif #ifdef __MVS__ # ifndef _OPEN_SYS # define _OPEN_SYS # endif # include <string.h> # include <sys/ps.h> #endif #ifdef __hpux # include <unistd.h> # include <sys/param.h> # include <sys/pstat.h> # include <string.h> #endif #if defined __sgi || defined __osf__ # include <string.h> # include <unistd.h> # include <stdio.h> # include <fcntl.h> # include <sys/procfs.h> #endif #if defined __SCO_VERSION__ || defined __sysv5__ # include <fcntl.h> # include <string.h> #endif #include "basename-lgpl.h" #ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Solaris >= 11, Cygwin, Android API level >= 21 */ char const * getprogname (void) { # if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return program_invocation_short_name; # elif HAVE_DECL_PROGRAM_INVOCATION_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return last_component (program_invocation_name); # elif HAVE_GETEXECNAME /* Solaris */ /* https://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */ const char *p = getexecname (); if (!p) p = "?"; return last_component (p); # elif HAVE_DECL___ARGV /* mingw, MSVC */ /* https://docs.microsoft.com/en-us/cpp/c-runtime-library/argc-argv-wargv */ const char *p = __argv && __argv[0] ? __argv[0] : "?"; return last_component (p); # elif HAVE_VAR___PROGNAME /* OpenBSD, Android, QNX */ /* https://man.openbsd.org/style.9 */ /* http://www.qnx.de/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2F__progname.html */ /* Be careful to declare this only when we absolutely need it (OpenBSD 5.1), rather than when it's available. Otherwise, its mere declaration makes program_invocation_short_name malfunction (have zero length) with Fedora 25's glibc. */ extern char *__progname; const char *p = __progname; # if defined __ANDROID__ return last_component (p); # else return p && p[0] ? p : "?"; # endif # elif _AIX /* AIX */ /* Idea by Bastien ROUCARIÈS, https://lists.gnu.org/r/bug-gnulib/2010-12/msg00095.html Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm */ static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct procentry64 procs; p = (0 < getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1) ? strdup (procs.pi_comm) : NULL); if (!p) p = "?"; } return p; # elif defined __hpux static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct pst_status status; if (pstat_getproc (&status, sizeof status, 0, pid) > 0) { char *ucomm = status.pst_ucomm; char *cmd = status.pst_cmd; if (strlen (ucomm) < PST_UCOMMLEN - 1) p = ucomm; else { /* ucomm is truncated to length PST_UCOMMLEN - 1. Look at cmd instead. */ char *space = strchr (cmd, ' '); if (space != NULL) *space = '\0'; p = strrchr (cmd, '/'); if (p != NULL) p++; else p = cmd; if (strlen (p) > PST_UCOMMLEN - 1 && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) /* p is less truncated than ucomm. */ ; else p = ucomm; } p = strdup (p); } else { # if !defined __LP64__ /* Support for 32-bit programs running in 64-bit HP-UX. The documented way to do this is to use the same source code as above, but in a compilation unit where '#define _PSTAT64 1' is in effect. I prefer a single compilation unit; the struct size and the offsets are not going to change. */ char status64[1216]; if (__pstat_getproc64 (status64, sizeof status64, 0, pid) > 0) { char *ucomm = status64 + 288; char *cmd = status64 + 168; if (strlen (ucomm) < PST_UCOMMLEN - 1) p = ucomm; else { /* ucomm is truncated to length PST_UCOMMLEN - 1. Look at cmd instead. */ char *space = strchr (cmd, ' '); if (space != NULL) *space = '\0'; p = strrchr (cmd, '/'); if (p != NULL) p++; else p = cmd; if (strlen (p) > PST_UCOMMLEN - 1 && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) /* p is less truncated than ucomm. */ ; else p = ucomm; } p = strdup (p); } else # endif p = NULL; } if (!p) p = "?"; } return p; # elif __MVS__ /* z/OS */ /* https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rtwgetp.htm */ static char *p = "?"; static int first = 1; if (first) { pid_t pid = getpid (); int token; W_PSPROC buf; first = 0; memset (&buf, 0, sizeof(buf)); buf.ps_cmdptr = (char *) malloc (buf.ps_cmdlen = PS_CMDBLEN_LONG); buf.ps_conttyptr = (char *) malloc (buf.ps_conttylen = PS_CONTTYBLEN); buf.ps_pathptr = (char *) malloc (buf.ps_pathlen = PS_PATHBLEN); if (buf.ps_cmdptr && buf.ps_conttyptr && buf.ps_pathptr) { for (token = 0; token >= 0; token = w_getpsent (token, &buf, sizeof(buf))) { if (token > 0 && buf.ps_pid == pid) { char *s = strdup (last_component (buf.ps_pathptr)); if (s) { # if defined __XPLINK__ && __CHARSET_LIB == 1 /* The compiler option -qascii is in use. https://makingdeveloperslivesbetter.wordpress.com/2022/01/07/is-z-os-ascii-or-ebcdic-yes/ https://www.ibm.com/docs/en/zos/2.5.0?topic=features-macros-related-compiler-option-settings So, convert the result from EBCDIC to ASCII. https://www.ibm.com/docs/en/zos/2.5.0?topic=functions-e2a-s-convert-string-from-ebcdic-ascii */ if (__e2a_s (s) == (size_t)-1) free (s); else # endif p = s; } break; } } } free (buf.ps_cmdptr); free (buf.ps_conttyptr); free (buf.ps_pathptr); } return p; # elif defined __sgi || defined __osf__ /* IRIX or Tru64 */ char filename[50]; int fd; # if defined __sgi sprintf (filename, "/proc/pinfo/%d", (int) getpid ()); # else sprintf (filename, "/proc/%d", (int) getpid ()); # endif fd = open (filename, O_RDONLY | O_CLOEXEC); if (0 <= fd) { prpsinfo_t buf; int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf); close (fd); if (ioctl_ok) { char *name = buf.pr_fname; size_t namesize = sizeof buf.pr_fname; /* It may not be NUL-terminated. */ char *namenul = memchr (name, '\0', namesize); size_t namelen = namenul ? namenul - name : namesize; char *namecopy = malloc (namelen + 1); if (namecopy) { namecopy[namelen] = '\0'; return memcpy (namecopy, name, namelen); } } } return NULL; # elif defined __SCO_VERSION__ || defined __sysv5__ /* SCO OpenServer6/UnixWare */ char buf[80]; int fd; sprintf (buf, "/proc/%d/cmdline", getpid()); fd = open (buf, O_RDONLY); if (0 <= fd) { size_t n = read (fd, buf, 79); if (n > 0) { buf[n] = '\0'; /* Guarantee null-termination */ char *progname; progname = strrchr (buf, '/'); if (progname) { progname = progname + 1; /* Skip the '/' */ } else { progname = buf; } char *ret; ret = malloc (strlen (progname) + 1); if (ret) { strcpy (ret, progname); return ret; } } close (fd); } return "?"; # else # error "getprogname module not ported to this OS" # endif } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ ������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/gettext.h������������������������������������������������������������0000644�0001750�0001750�00000025015�14557510505�014103� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convenience header for conditional use of GNU <libintl.h>. Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option or through "#define ENABLE NLS 0" before including this file. */ #if defined ENABLE_NLS && ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include <libintl.h> /* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by the gettext() and ngettext() macros. This is an alternative to calling textdomain(), and is useful for libraries. */ # ifdef DEFAULT_TEXT_DOMAIN # undef gettext # define gettext(Msgid) \ dgettext (DEFAULT_TEXT_DOMAIN, Msgid) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) # endif #else /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of <locale.h> a NOP. We don't include <libintl.h> as well because people using "gettext.h" will not include <libintl.h>, and also including <libintl.h> would fail on SunOS 4, whereas <locale.h> is OK. */ #if defined(__sun) # include <locale.h> #endif /* Many header files from the libstdc++ coming with g++ 3.3 or newer include <libintl.h>, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of <libintl.h> a NOP. */ #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) # include <cstdlib> # if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H # include <libintl.h> # endif #endif /* Disabled NLS. The casts to 'const char *' serve the purpose of producing warnings for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ # undef gettext # define gettext(Msgid) ((const char *) (Msgid)) # undef dgettext # define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) # undef dcgettext # define dcgettext(Domainname, Msgid, Category) \ ((void) (Category), dgettext (Domainname, Msgid)) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ ((N) == 1 \ ? ((void) (Msgid2), (const char *) (Msgid1)) \ : ((void) (Msgid1), (const char *) (Msgid2))) # undef dngettext # define dngettext(Domainname, Msgid1, Msgid2, N) \ ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) # undef dcngettext # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) # undef textdomain # define textdomain(Domainname) ((const char *) (Domainname)) # undef bindtextdomain # define bindtextdomain(Domainname, Dirname) \ ((void) (Domainname), (const char *) (Dirname)) # undef bind_textdomain_codeset # define bind_textdomain_codeset(Domainname, Codeset) \ ((void) (Domainname), (const char *) (Codeset)) #endif /* Prefer gnulib's setlocale override over libintl's setlocale override. */ #ifdef GNULIB_defined_setlocale # undef setlocale # define setlocale rpl_setlocale #endif /* A pseudo function call that serves as a marker for the automated extraction of messages, but does not call gettext(). The run-time translation is done at a different place in the code. The argument, String, should be a literal string. Concatenated strings and other string expressions won't work. The macro's expansion is not parenthesized, so that it is suitable as initializer for static 'char[]' or 'const char[]' variables. */ #define gettext_noop(String) String /* The separator between msgctxt and msgid in a .mo file. */ #define GETTEXT_CONTEXT_GLUE "\004" /* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be short and rarely need to change. The letter 'p' stands for 'particular' or 'special'. */ #ifdef DEFAULT_TEXT_DOMAIN # define pgettext(Msgctxt, Msgid) \ pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #else # define pgettext(Msgctxt, Msgid) \ pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #endif #define dpgettext(Domainname, Msgctxt, Msgid) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) #ifdef DEFAULT_TEXT_DOMAIN # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #else # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #endif #define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) #if defined __GNUC__ || defined __clang__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * pgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, int category) { const char *translation = dcgettext (domain, msg_ctxt_id, category); if (translation == msg_ctxt_id) return msgid; else return translation; } #if defined __GNUC__ || defined __clang__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * npgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { const char *translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); if (translation == msg_ctxt_id || translation == msgid_plural) return (n == 1 ? msgid : msgid_plural); else return translation; } /* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID can be arbitrary expressions. But for string literals these macros are less efficient than those above. */ #include <string.h> /* GNULIB_NO_VLA can be defined to disable use of VLAs even if supported. This relates to the -Wvla and -Wvla-larger-than warnings, enabled in the default GCC many warnings set. This allows programs to disable use of VLAs, which may be unintended, or may be awkward to support portably, or may have security implications due to non-deterministic stack usage. */ #if (!defined GNULIB_NO_VLA \ && defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \ && !defined __STDC_NO_VLA__) # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 #else # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 #endif #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS #include <stdlib.h> #endif #define pgettext_expr(Msgctxt, Msgid) \ dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) #define dpgettext_expr(Domainname, Msgctxt, Msgid) \ dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) #if defined __GNUC__ || defined __clang__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcgettext (domain, msg_ctxt_id, category); found_translation = (translation != msg_ctxt_id); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) return translation; } return msgid; } #define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #if defined __GNUC__ || defined __clang__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcnpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) return translation; } return (n == 1 ? msgid : msgid_plural); } #endif /* _LIBGETTEXT_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/gettimeofday.c�������������������������������������������������������0000644�0001750�0001750�00000011270�14557510505�015071� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide gettimeofday for systems that don't have it or for which it's broken. Copyright (C) 2001-2003, 2005-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> /* Specification. */ #include <sys/time.h> #include <time.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE # include <windows.h> #endif #ifdef WINDOWS_NATIVE /* Don't assume that UNICODE is not defined. */ # undef LoadLibrary # define LoadLibrary LoadLibraryA # if !(_WIN32_WINNT >= _WIN32_WINNT_WIN8) /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress /* GetSystemTimePreciseAsFileTime was introduced only in Windows 8. */ typedef void (WINAPI * GetSystemTimePreciseAsFileTimeFuncType) (FILETIME *lpTime); static GetSystemTimePreciseAsFileTimeFuncType GetSystemTimePreciseAsFileTimeFunc = NULL; static BOOL initialized = FALSE; static void initialize (void) { HMODULE kernel32 = LoadLibrary ("kernel32.dll"); if (kernel32 != NULL) { GetSystemTimePreciseAsFileTimeFunc = (GetSystemTimePreciseAsFileTimeFuncType) GetProcAddress (kernel32, "GetSystemTimePreciseAsFileTime"); } initialized = TRUE; } # else # define GetSystemTimePreciseAsFileTimeFunc GetSystemTimePreciseAsFileTime # endif #endif /* This is a wrapper for gettimeofday. It is used only on systems that lack this function, or whose implementation of this function causes problems. Work around the bug in some systems whereby gettimeofday clobbers the static buffer that localtime uses for its return value. The gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has this problem. */ int gettimeofday (struct timeval *restrict tv, void *restrict tz) { #undef gettimeofday #ifdef WINDOWS_NATIVE /* On native Windows, there are two ways to get the current time: GetSystemTimeAsFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimeasfiletime> or GetSystemTimePreciseAsFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime>. GetSystemTimeAsFileTime produces values that jump by increments of 15.627 milliseconds (!) on average. Whereas GetSystemTimePreciseAsFileTime values usually jump by 1 or 2 microseconds. More discussion on this topic: <http://www.windowstimestamp.com/description>. */ FILETIME current_time; # if !(_WIN32_WINNT >= _WIN32_WINNT_WIN8) if (!initialized) initialize (); # endif if (GetSystemTimePreciseAsFileTimeFunc != NULL) GetSystemTimePreciseAsFileTimeFunc (¤t_time); else GetSystemTimeAsFileTime (¤t_time); /* Convert from FILETIME to 'struct timeval'. */ /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ ULONGLONG since_1601 = ((ULONGLONG) current_time.dwHighDateTime << 32) | (ULONGLONG) current_time.dwLowDateTime; /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ ULONGLONG since_1970 = since_1601 - (ULONGLONG) 134774 * (ULONGLONG) 86400 * (ULONGLONG) 10000000; ULONGLONG microseconds_since_1970 = since_1970 / (ULONGLONG) 10; *tv = (struct timeval) { .tv_sec = microseconds_since_1970 / (ULONGLONG) 1000000, .tv_usec = microseconds_since_1970 % (ULONGLONG) 1000000 }; return 0; #else # if HAVE_GETTIMEOFDAY # if defined timeval /* 'struct timeval' overridden by gnulib? */ # undef timeval struct timeval otv; int result = gettimeofday (&otv, (struct timezone *) tz); if (result == 0) *tv = otv; # else int result = gettimeofday (tv, (struct timezone *) tz); # endif return result; # else # if !defined OK_TO_USE_1S_CLOCK # error "Only 1-second nominal clock resolution found. Is that intended?" \ "If so, compile with the -DOK_TO_USE_1S_CLOCK option." # endif *tv = (struct timeval) { .tv_sec = time (NULL), .tv_usec = 0 }; return 0; # endif #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/group-member.c�������������������������������������������������������0000644�0001750�0001750�00000005152�14557510505�015013� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* group-member.c -- determine whether group id is in calling user's group list Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <stdckdint.h> #include <stdio.h> #include <sys/types.h> #include <stdlib.h> /* Most processes have no more than this many groups, and for these processes we can avoid using malloc. */ enum { GROUPBUF_SIZE = 100 }; struct group_info { gid_t *group; gid_t groupbuf[GROUPBUF_SIZE]; }; static void free_group_info (struct group_info const *g) { if (g->group != g->groupbuf) free (g->group); } static int get_group_info (struct group_info *gi) { int n_groups = getgroups (GROUPBUF_SIZE, gi->groupbuf); gi->group = gi->groupbuf; if (n_groups < 0) { int n_group_slots = getgroups (0, NULL); size_t nbytes; if (! ckd_mul (&nbytes, n_group_slots, sizeof *gi->group)) { gi->group = malloc (nbytes); if (gi->group) n_groups = getgroups (n_group_slots, gi->group); } } /* In case of error, the user loses. */ return n_groups; } /* Return non-zero if GID is one that we have in our groups list. Note that the groups list is not guaranteed to contain the current or effective group ID, so they should generally be checked separately. */ int group_member (gid_t gid) { int i; int found; struct group_info gi; int n_groups = get_group_info (&gi); /* Search through the list looking for GID. */ found = 0; for (i = 0; i < n_groups; i++) { if (gid == gi.group[i]) { found = 1; break; } } free_group_info (&gi); return found; } #ifdef TEST int main (int argc, char **argv) { int i; for (i = 1; i < argc; i++) { gid_t gid; gid = atoi (argv[i]); printf ("%d: %s\n", gid, group_member (gid) ? "yes" : "no"); } exit (0); } #endif /* TEST */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/hard-locale.c��������������������������������������������������������0000644�0001750�0001750�00000002722�14557510505�014565� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hard-locale.c -- Determine whether a locale is hard. Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "hard-locale.h" #include <locale.h> #include <stdlib.h> #include <string.h> bool hard_locale (int category) { char locale[SETLOCALE_NULL_MAX]; if (setlocale_null_r (category, locale, sizeof (locale))) return false; if (!(strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0)) return true; #if defined __ANDROID__ /* On Android 5.0 or newer, it is possible to set a locale that has the same name as the "C" locale but in fact uses UTF-8 encoding. Cf. test case 2 in <https://lists.gnu.org/archive/html/bug-gnulib/2023-01/msg00141.html>. */ if (MB_CUR_MAX > 1) return true; #endif return false; } ����������������������������������������������gnuastro-0.22/bootstrapped/lib/idx.h����������������������������������������������������������������0000644�0001750�0001750�00000012062�14557510505�013201� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A type for indices and sizes. Copyright (C) 2020-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _IDX_H #define _IDX_H /* Get ptrdiff_t. */ #include <stddef.h> /* Get PTRDIFF_MAX. */ #include <stdint.h> /* The type 'idx_t' holds an (array) index or an (object) size. Its implementation promotes to a signed integer type, which can hold the values 0..2^63-1 (on 64-bit platforms) or 0..2^31-1 (on 32-bit platforms). Why a signed integer type? * Security: Signed types can be checked for overflow via '-fsanitize=undefined', but unsigned types cannot. * Comparisons without surprises: ISO C99 § 6.3.1.8 specifies a few surprising results for comparisons, such as (int) -3 < (unsigned long) 7 => false (int) -3 < (unsigned int) 7 => false and on 32-bit machines: (long) -3 < (unsigned int) 7 => false This is surprising because the natural comparison order is by value in the realm of infinite-precision signed integers (ℤ). The best way to get rid of such surprises is to use signed types for numerical integer values, and use unsigned types only for bit masks and enums. Why not use 'size_t' directly? * Because 'size_t' is an unsigned type, and a signed type is better. See above. Why not use 'ssize_t'? * 'ptrdiff_t' is more portable; it is standardized by ISO C whereas 'ssize_t' is standardized only by POSIX. * 'ssize_t' is not required to be as wide as 'size_t', and some now-obsolete POSIX platforms had 'size_t' wider than 'ssize_t'. * Conversely, some now-obsolete platforms had 'ptrdiff_t' wider than 'size_t', which can be a win and conforms to POSIX. Won't this cause a problem with objects larger than PTRDIFF_MAX? * Typical modern or large platforms do not allocate such objects, so this is not much of a problem in practice; for example, you can safely write 'idx_t len = strlen (s);'. To port to older small platforms where allocations larger than PTRDIFF_MAX could in theory be a problem, you can use Gnulib's ialloc module, or functions like ximalloc in Gnulib's xalloc module. Why not use 'ptrdiff_t' directly? * Maintainability: When reading and modifying code, it helps to know that a certain variable cannot have negative values. For example, when you have a loop int n = ...; for (int i = 0; i < n; i++) ... or ptrdiff_t n = ...; for (ptrdiff_t i = 0; i < n; i++) ... you have to ask yourself "what if n < 0?". Whereas in idx_t n = ...; for (idx_t i = 0; i < n; i++) ... you know that this case cannot happen. Similarly, when a programmer writes idx_t = ptr2 - ptr1; there is an implied assertion that ptr1 and ptr2 point into the same object and that ptr1 <= ptr2. * Being future-proof: In the future, range types (integers which are constrained to a certain range of values) may be added to C compilers or to the C standard. Several programming languages (Ada, Haskell, Common Lisp, Pascal) already have range types. Such range types may help producing good code and good warnings. The type 'idx_t' could then be typedef'ed to a range type that is signed after promotion. */ /* In the future, idx_t could be typedef'ed to a signed range type. The clang "extended integer types", supported in Clang 11 or newer <https://clang.llvm.org/docs/LanguageExtensions.html#extended-integer-types>, are a special case of range types. However, these types don't support binary operators with plain integer types (e.g. expressions such as x > 1). Therefore, they don't behave like signed types (and not like unsigned types either). So, we cannot use them here. */ /* Use the signed type 'ptrdiff_t'. */ /* Note: ISO C does not mandate that 'size_t' and 'ptrdiff_t' have the same size, but it is so on all platforms we have seen since 1990. */ typedef ptrdiff_t idx_t; /* IDX_MAX is the maximum value of an idx_t. */ #define IDX_MAX PTRDIFF_MAX /* So far no need has been found for an IDX_WIDTH macro. Perhaps there should be another macro IDX_VALUE_BITS that does not count the sign bit and is therefore one less than PTRDIFF_WIDTH. */ #endif /* _IDX_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/iswblank.c�����������������������������������������������������������0000644�0001750�0001750�00000001573�14557510505�014227� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test wide character for being blank. Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wctype.h> int iswblank (wint_t wc) { return wc == ' ' || wc == '\t'; } �������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/iswctype.c�����������������������������������������������������������0000644�0001750�0001750�00000002142�14557510505�014255� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a wide character has a given property. Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wctype.h> #if GNULIB_defined_wint_t && !GNULIB_defined_wctype_t int iswctype (wint_t wc, wctype_t desc) # undef iswctype { return ((wchar_t) wc == wc ? iswctype ((wchar_t) wc, desc) : 0); } #else # include "iswctype-impl.h" #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/iswdigit.c�����������������������������������������������������������0000644�0001750�0001750�00000001574�14557510505�014241� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test wide character for being a digit. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wctype.h> int iswdigit (wint_t wc) { return wc >= '0' && wc <= '9'; } ������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/iswpunct.c�����������������������������������������������������������0000644�0001750�0001750�00000002027�14557510505�014264� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test wide character for being a punctuation or symbol character. Copyright (C) 2023-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wctype.h> #include <ctype.h> int iswpunct (wint_t wc) #undef iswpunct { #if defined __ANDROID__ if ((unsigned int) wc < 128) return ispunct ((unsigned int) wc); #endif return iswpunct (wc); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/iswxdigit.c����������������������������������������������������������0000644�0001750�0001750�00000002154�14557510505�014424� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test wide character for being a hexadecimal digit. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wctype.h> int iswxdigit (wint_t wc) { return ((wc >= '0' && wc <= '9') #if 'A' == 0x41 && 'a' == 0x61 /* Optimization, assuming ASCII */ || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F') #else || (wc >= 'A' && wc <= 'F') || (wc >= 'a' && wc <= 'f') #endif ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/localcharset.c�������������������������������������������������������0000644�0001750�0001750�00000115723�14557510505�015064� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2006, 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>. */ #include <config.h> /* Specification. */ #include "localcharset.h" #include <stddef.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET # define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */ #endif #if defined _WIN32 && !defined __CYGWIN__ # define WINDOWS_NATIVE # include <locale.h> #endif #if defined __EMX__ /* Assume EMX program runs on OS/2, even if compiled under DOS. */ # ifndef OS2 # define OS2 # endif #endif #if !defined WINDOWS_NATIVE # if HAVE_LANGINFO_CODESET # include <langinfo.h> # else # if 0 /* see comment regarding use of setlocale(), below */ # include <locale.h> # endif # endif # ifdef __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> # endif #elif defined WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> /* For the use of setlocale() below, the Gnulib override in setlocale.c is not needed; see the platform lists in setlocale_null.m4. */ # undef setlocale #endif #if defined OS2 # define INCL_DOS # include <os2.h> #endif /* For MB_CUR_MAX_L */ #if defined DARWIN7 # include <xlocale.h> #endif #if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 /* On these platforms, we use a mapping from non-canonical encoding name to GNU canonical encoding name. */ /* With glibc-2.1 or newer, we don't need any canonicalization, because glibc has iconv and both glibc and libiconv support all GNU canonical names directly. */ # if !((defined __GNU_LIBRARY__ && __GLIBC__ >= 2) || defined __UCLIBC__) struct table_entry { const char alias[11+1]; const char canonical[11+1]; }; /* Table of platform-dependent mappings, sorted in ascending order. */ static const struct table_entry alias_table[] = { # if defined __FreeBSD__ /* FreeBSD */ /*{ "ARMSCII-8", "ARMSCII-8" },*/ { "Big5", "BIG5" }, { "C", "ASCII" }, /*{ "CP1131", "CP1131" },*/ /*{ "CP1251", "CP1251" },*/ /*{ "CP866", "CP866" },*/ /*{ "GB18030", "GB18030" },*/ /*{ "GB2312", "GB2312" },*/ /*{ "GBK", "GBK" },*/ /*{ "ISCII-DEV", "?" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-9", "ISO-8859-9" }, /*{ "KOI8-R", "KOI8-R" },*/ /*{ "KOI8-U", "KOI8-U" },*/ { "SJIS", "SHIFT_JIS" }, { "US-ASCII", "ASCII" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" } # define alias_table_defined # endif # if defined __NetBSD__ /* NetBSD */ { "646", "ASCII" }, /*{ "ARMSCII-8", "ARMSCII-8" },*/ /*{ "BIG5", "BIG5" },*/ { "Big5-HKSCS", "BIG5-HKSCS" }, /*{ "CP1251", "CP1251" },*/ /*{ "CP866", "CP866" },*/ /*{ "GB18030", "GB18030" },*/ /*{ "GB2312", "GB2312" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, /*{ "KOI8-R", "KOI8-R" },*/ /*{ "KOI8-U", "KOI8-U" },*/ /*{ "PT154", "PT154" },*/ { "SJIS", "SHIFT_JIS" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" } # define alias_table_defined # endif # if defined __OpenBSD__ /* OpenBSD */ { "646", "ASCII" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "US-ASCII", "ASCII" } # define alias_table_defined # endif # if defined __APPLE__ && defined __MACH__ /* Mac OS X */ /* Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is useless: - It returns the empty string when LANG is set to a locale of the form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 LC_CTYPE file. - The environment variables LANG, LC_CTYPE, LC_ALL are not set by the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. - The documentation says: "... all code that calls BSD system routines should ensure that the const *char parameters of these routines are in UTF-8 encoding. All BSD system functions expect their string parameters to be in UTF-8 encoding and nothing else." It also says "An additional caveat is that string parameters for files, paths, and other file-system entities must be in canonical UTF-8. In a canonical UTF-8 Unicode string, all decomposable characters are decomposed ..." but this is not true: You can pass non-decomposed UTF-8 strings to file system functions, and it is the OS which will convert them to decomposed UTF-8 before accessing the file system. - The Apple Terminal application displays UTF-8 by default. - However, other applications are free to use different encodings: - xterm uses ISO-8859-1 by default. - TextEdit uses MacRoman by default. We prefer UTF-8 over decomposed UTF-8-MAC because one should minimize the use of decomposed Unicode. Unfortunately, through the Darwin file system, decomposed UTF-8 strings are leaked into user space nevertheless. Then there are also the locales with encodings other than US-ASCII and UTF-8. These locales can be occasionally useful to users (e.g. when grepping through ISO-8859-1 encoded text files), when all their file names are in US-ASCII. */ { "ARMSCII-8", "ARMSCII-8" }, { "Big5", "BIG5" }, { "Big5HKSCS", "BIG5-HKSCS" }, { "CP1131", "CP1131" }, { "CP1251", "CP1251" }, { "CP866", "CP866" }, { "CP949", "CP949" }, { "GB18030", "GB18030" }, { "GB2312", "GB2312" }, { "GBK", "GBK" }, /*{ "ISCII-DEV", "?" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-9", "ISO-8859-9" }, { "KOI8-R", "KOI8-R" }, { "KOI8-U", "KOI8-U" }, { "PT154", "PT154" }, { "SJIS", "SHIFT_JIS" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" } # define alias_table_defined # endif # if defined _AIX /* AIX */ /*{ "GBK", "GBK" },*/ { "IBM-1046", "CP1046" }, { "IBM-1124", "CP1124" }, { "IBM-1129", "CP1129" }, { "IBM-1252", "CP1252" }, { "IBM-850", "CP850" }, { "IBM-856", "CP856" }, { "IBM-921", "ISO-8859-13" }, { "IBM-922", "CP922" }, { "IBM-932", "CP932" }, { "IBM-943", "CP943" }, { "IBM-eucCN", "GB2312" }, { "IBM-eucJP", "EUC-JP" }, { "IBM-eucKR", "EUC-KR" }, { "IBM-eucTW", "EUC-TW" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-6", "ISO-8859-6" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "TIS-620", "TIS-620" }, /*{ "UTF-8", "UTF-8" },*/ { "big5", "BIG5" } # define alias_table_defined # endif # if defined __hpux /* HP-UX */ { "SJIS", "SHIFT_JIS" }, { "arabic8", "HP-ARABIC8" }, { "big5", "BIG5" }, { "cp1251", "CP1251" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" }, { "gb18030", "GB18030" }, { "greek8", "HP-GREEK8" }, { "hebrew8", "HP-HEBREW8" }, { "hkbig5", "BIG5-HKSCS" }, { "hp15CN", "GB2312" }, { "iso88591", "ISO-8859-1" }, { "iso885913", "ISO-8859-13" }, { "iso885915", "ISO-8859-15" }, { "iso88592", "ISO-8859-2" }, { "iso88594", "ISO-8859-4" }, { "iso88595", "ISO-8859-5" }, { "iso88596", "ISO-8859-6" }, { "iso88597", "ISO-8859-7" }, { "iso88598", "ISO-8859-8" }, { "iso88599", "ISO-8859-9" }, { "kana8", "HP-KANA8" }, { "koi8r", "KOI8-R" }, { "roman8", "HP-ROMAN8" }, { "tis620", "TIS-620" }, { "turkish8", "HP-TURKISH8" }, { "utf8", "UTF-8" } # define alias_table_defined # endif # if defined __sgi /* IRIX */ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-9", "ISO-8859-9" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" } # define alias_table_defined # endif # if defined __osf__ /* OSF/1 */ /*{ "GBK", "GBK" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "KSC5601", "CP949" }, { "SJIS", "SHIFT_JIS" }, { "TACTIS", "TIS-620" }, /*{ "UTF-8", "UTF-8" },*/ { "big5", "BIG5" }, { "cp850", "CP850" }, { "dechanyu", "DEC-HANYU" }, { "dechanzi", "GB2312" }, { "deckanji", "DEC-KANJI" }, { "deckorean", "EUC-KR" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" }, { "sdeckanji", "EUC-JP" } # define alias_table_defined # endif # if defined __sun /* Solaris */ { "5601", "EUC-KR" }, { "646", "ASCII" }, /*{ "BIG5", "BIG5" },*/ { "Big5-HKSCS", "BIG5-HKSCS" }, { "GB18030", "GB18030" }, /*{ "GBK", "GBK" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-11", "TIS-620" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-3", "ISO-8859-3" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-6", "ISO-8859-6" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "PCK", "SHIFT_JIS" }, { "TIS620.2533", "TIS-620" }, /*{ "UTF-8", "UTF-8" },*/ { "ansi-1251", "CP1251" }, { "cns11643", "EUC-TW" }, { "eucJP", "EUC-JP" }, { "gb2312", "GB2312" }, { "koi8-r", "KOI8-R" } # define alias_table_defined # endif # if defined __minix /* Minix */ { "646", "ASCII" } # define alias_table_defined # endif # if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Windows */ { "CP1361", "JOHAB" }, { "CP20127", "ASCII" }, { "CP20866", "KOI8-R" }, { "CP20936", "GB2312" }, { "CP21866", "KOI8-RU" }, { "CP28591", "ISO-8859-1" }, { "CP28592", "ISO-8859-2" }, { "CP28593", "ISO-8859-3" }, { "CP28594", "ISO-8859-4" }, { "CP28595", "ISO-8859-5" }, { "CP28596", "ISO-8859-6" }, { "CP28597", "ISO-8859-7" }, { "CP28598", "ISO-8859-8" }, { "CP28599", "ISO-8859-9" }, { "CP28605", "ISO-8859-15" }, { "CP38598", "ISO-8859-8" }, { "CP51932", "EUC-JP" }, { "CP51936", "GB2312" }, { "CP51949", "EUC-KR" }, { "CP51950", "EUC-TW" }, { "CP54936", "GB18030" }, { "CP65001", "UTF-8" }, { "CP936", "GBK" } # define alias_table_defined # endif # if defined OS2 /* OS/2 */ /* The list of encodings is taken from "List of OS/2 Codepages" by Alex Taylor: <http://altsan.org/os2/toolkits/uls/index.html#codepages>. See also "__convcp() of kLIBC": <https://github.com/bitwiseworks/libc/blob/master/src/emx/src/lib/locale/__convcp.c>. */ { "CP1004", "CP1252" }, /*{ "CP1041", "CP943" },*/ /*{ "CP1088", "CP949" },*/ { "CP1089", "ISO-8859-6" }, /*{ "CP1114", "CP950" },*/ /*{ "CP1115", "GB2312" },*/ { "CP1208", "UTF-8" }, /*{ "CP1380", "GB2312" },*/ { "CP1381", "GB2312" }, { "CP1383", "GB2312" }, { "CP1386", "GBK" }, /*{ "CP301", "CP943" },*/ { "CP3372", "EUC-JP" }, { "CP4946", "CP850" }, /*{ "CP5048", "JIS_X0208-1990" },*/ /*{ "CP5049", "JIS_X0212-1990" },*/ /*{ "CP5067", "KS_C_5601-1987" },*/ { "CP813", "ISO-8859-7" }, { "CP819", "ISO-8859-1" }, { "CP878", "KOI8-R" }, /*{ "CP897", "CP943" },*/ { "CP912", "ISO-8859-2" }, { "CP913", "ISO-8859-3" }, { "CP914", "ISO-8859-4" }, { "CP915", "ISO-8859-5" }, { "CP916", "ISO-8859-8" }, { "CP920", "ISO-8859-9" }, { "CP921", "ISO-8859-13" }, { "CP923", "ISO-8859-15" }, /*{ "CP941", "CP943" },*/ /*{ "CP947", "CP950" },*/ /*{ "CP951", "CP949" },*/ /*{ "CP952", "JIS_X0208-1990" },*/ /*{ "CP953", "JIS_X0212-1990" },*/ { "CP954", "EUC-JP" }, { "CP964", "EUC-TW" }, { "CP970", "EUC-KR" }, /*{ "CP971", "KS_C_5601-1987" },*/ { "IBM-1004", "CP1252" }, /*{ "IBM-1006", "?" },*/ /*{ "IBM-1008", "?" },*/ /*{ "IBM-1041", "CP943" },*/ /*{ "IBM-1051", "?" },*/ /*{ "IBM-1088", "CP949" },*/ { "IBM-1089", "ISO-8859-6" }, /*{ "IBM-1098", "?" },*/ /*{ "IBM-1114", "CP950" },*/ /*{ "IBM-1115", "GB2312" },*/ /*{ "IBM-1116", "?" },*/ /*{ "IBM-1117", "?" },*/ /*{ "IBM-1118", "?" },*/ /*{ "IBM-1119", "?" },*/ { "IBM-1124", "CP1124" }, { "IBM-1125", "CP1125" }, { "IBM-1131", "CP1131" }, { "IBM-1208", "UTF-8" }, { "IBM-1250", "CP1250" }, { "IBM-1251", "CP1251" }, { "IBM-1252", "CP1252" }, { "IBM-1253", "CP1253" }, { "IBM-1254", "CP1254" }, { "IBM-1255", "CP1255" }, { "IBM-1256", "CP1256" }, { "IBM-1257", "CP1257" }, /*{ "IBM-1275", "?" },*/ /*{ "IBM-1276", "?" },*/ /*{ "IBM-1277", "?" },*/ /*{ "IBM-1280", "?" },*/ /*{ "IBM-1281", "?" },*/ /*{ "IBM-1282", "?" },*/ /*{ "IBM-1283", "?" },*/ /*{ "IBM-1380", "GB2312" },*/ { "IBM-1381", "GB2312" }, { "IBM-1383", "GB2312" }, { "IBM-1386", "GBK" }, /*{ "IBM-301", "CP943" },*/ { "IBM-3372", "EUC-JP" }, { "IBM-367", "ASCII" }, { "IBM-437", "CP437" }, { "IBM-4946", "CP850" }, /*{ "IBM-5048", "JIS_X0208-1990" },*/ /*{ "IBM-5049", "JIS_X0212-1990" },*/ /*{ "IBM-5067", "KS_C_5601-1987" },*/ { "IBM-813", "ISO-8859-7" }, { "IBM-819", "ISO-8859-1" }, { "IBM-850", "CP850" }, /*{ "IBM-851", "?" },*/ { "IBM-852", "CP852" }, { "IBM-855", "CP855" }, { "IBM-856", "CP856" }, { "IBM-857", "CP857" }, /*{ "IBM-859", "?" },*/ { "IBM-860", "CP860" }, { "IBM-861", "CP861" }, { "IBM-862", "CP862" }, { "IBM-863", "CP863" }, { "IBM-864", "CP864" }, { "IBM-865", "CP865" }, { "IBM-866", "CP866" }, /*{ "IBM-868", "?" },*/ { "IBM-869", "CP869" }, { "IBM-874", "CP874" }, { "IBM-878", "KOI8-R" }, /*{ "IBM-895", "?" },*/ /*{ "IBM-897", "CP943" },*/ /*{ "IBM-907", "?" },*/ /*{ "IBM-909", "?" },*/ { "IBM-912", "ISO-8859-2" }, { "IBM-913", "ISO-8859-3" }, { "IBM-914", "ISO-8859-4" }, { "IBM-915", "ISO-8859-5" }, { "IBM-916", "ISO-8859-8" }, { "IBM-920", "ISO-8859-9" }, { "IBM-921", "ISO-8859-13" }, { "IBM-922", "CP922" }, { "IBM-923", "ISO-8859-15" }, { "IBM-932", "CP932" }, /*{ "IBM-941", "CP943" },*/ /*{ "IBM-942", "?" },*/ { "IBM-943", "CP943" }, /*{ "IBM-947", "CP950" },*/ { "IBM-949", "CP949" }, { "IBM-950", "CP950" }, /*{ "IBM-951", "CP949" },*/ /*{ "IBM-952", "JIS_X0208-1990" },*/ /*{ "IBM-953", "JIS_X0212-1990" },*/ { "IBM-954", "EUC-JP" }, /*{ "IBM-955", "?" },*/ { "IBM-964", "EUC-TW" }, { "IBM-970", "EUC-KR" }, /*{ "IBM-971", "KS_C_5601-1987" },*/ { "IBM-eucCN", "GB2312" }, { "IBM-eucJP", "EUC-JP" }, { "IBM-eucKR", "EUC-KR" }, { "IBM-eucTW", "EUC-TW" }, { "IBM33722", "EUC-JP" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-3", "ISO-8859-3" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-6", "ISO-8859-6" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, /*{ "JISX0201-1976", "JISX0201-1976" },*/ /*{ "JISX0208-1978", "?" },*/ /*{ "JISX0208-1983", "JIS_X0208-1983" },*/ /*{ "JISX0208-1990", "JIS_X0208-1990" },*/ /*{ "JISX0212-1990", "JIS_X0212-1990" },*/ /*{ "KSC5601-1987", "KS_C_5601-1987" },*/ { "SJIS-1", "CP943" }, { "SJIS-2", "CP943" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW-1993", "EUC-TW" } # define alias_table_defined # endif # if defined VMS /* OpenVMS */ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation "Compaq C Run-Time Library Reference Manual for OpenVMS systems" section 10.7 "Handling Different Character Sets". */ { "DECHANYU", "DEC-HANYU" }, { "DECHANZI", "GB2312" }, { "DECKANJI", "DEC-KANJI" }, { "DECKOREAN", "EUC-KR" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "SDECKANJI", "EUC-JP" }, { "SJIS", "SHIFT_JIS" }, { "eucJP", "EUC-JP" }, { "eucTW", "EUC-TW" } # define alias_table_defined # endif # ifndef alias_table_defined /* Just a dummy entry, to avoid a C syntax error. */ { "", "" } # endif }; # endif #else /* On these platforms, we use a mapping from locale name to GNU canonical encoding name. */ struct table_entry { const char locale[17+1]; const char canonical[11+1]; }; /* Table of platform-dependent mappings, sorted in ascending order. */ static const struct table_entry locale_table[] = { # if defined __FreeBSD__ /* FreeBSD 4.2 */ { "cs_CZ.ISO_8859-2", "ISO-8859-2" }, { "da_DK.DIS_8859-15", "ISO-8859-15" }, { "da_DK.ISO_8859-1", "ISO-8859-1" }, { "de_AT.DIS_8859-15", "ISO-8859-15" }, { "de_AT.ISO_8859-1", "ISO-8859-1" }, { "de_CH.DIS_8859-15", "ISO-8859-15" }, { "de_CH.ISO_8859-1", "ISO-8859-1" }, { "de_DE.DIS_8859-15", "ISO-8859-15" }, { "de_DE.ISO_8859-1", "ISO-8859-1" }, { "en_AU.DIS_8859-15", "ISO-8859-15" }, { "en_AU.ISO_8859-1", "ISO-8859-1" }, { "en_CA.DIS_8859-15", "ISO-8859-15" }, { "en_CA.ISO_8859-1", "ISO-8859-1" }, { "en_GB.DIS_8859-15", "ISO-8859-15" }, { "en_GB.ISO_8859-1", "ISO-8859-1" }, { "en_US.DIS_8859-15", "ISO-8859-15" }, { "en_US.ISO_8859-1", "ISO-8859-1" }, { "es_ES.DIS_8859-15", "ISO-8859-15" }, { "es_ES.ISO_8859-1", "ISO-8859-1" }, { "fi_FI.DIS_8859-15", "ISO-8859-15" }, { "fi_FI.ISO_8859-1", "ISO-8859-1" }, { "fr_BE.DIS_8859-15", "ISO-8859-15" }, { "fr_BE.ISO_8859-1", "ISO-8859-1" }, { "fr_CA.DIS_8859-15", "ISO-8859-15" }, { "fr_CA.ISO_8859-1", "ISO-8859-1" }, { "fr_CH.DIS_8859-15", "ISO-8859-15" }, { "fr_CH.ISO_8859-1", "ISO-8859-1" }, { "fr_FR.DIS_8859-15", "ISO-8859-15" }, { "fr_FR.ISO_8859-1", "ISO-8859-1" }, { "hr_HR.ISO_8859-2", "ISO-8859-2" }, { "hu_HU.ISO_8859-2", "ISO-8859-2" }, { "is_IS.DIS_8859-15", "ISO-8859-15" }, { "is_IS.ISO_8859-1", "ISO-8859-1" }, { "it_CH.DIS_8859-15", "ISO-8859-15" }, { "it_CH.ISO_8859-1", "ISO-8859-1" }, { "it_IT.DIS_8859-15", "ISO-8859-15" }, { "it_IT.ISO_8859-1", "ISO-8859-1" }, { "ja_JP.EUC", "EUC-JP" }, { "ja_JP.SJIS", "SHIFT_JIS" }, { "ja_JP.Shift_JIS", "SHIFT_JIS" }, { "ko_KR.EUC", "EUC-KR" }, { "la_LN.ASCII", "ASCII" }, { "la_LN.DIS_8859-15", "ISO-8859-15" }, { "la_LN.ISO_8859-1", "ISO-8859-1" }, { "la_LN.ISO_8859-2", "ISO-8859-2" }, { "la_LN.ISO_8859-4", "ISO-8859-4" }, { "lt_LN.ASCII", "ASCII" }, { "lt_LN.DIS_8859-15", "ISO-8859-15" }, { "lt_LN.ISO_8859-1", "ISO-8859-1" }, { "lt_LN.ISO_8859-2", "ISO-8859-2" }, { "lt_LT.ISO_8859-4", "ISO-8859-4" }, { "nl_BE.DIS_8859-15", "ISO-8859-15" }, { "nl_BE.ISO_8859-1", "ISO-8859-1" }, { "nl_NL.DIS_8859-15", "ISO-8859-15" }, { "nl_NL.ISO_8859-1", "ISO-8859-1" }, { "no_NO.DIS_8859-15", "ISO-8859-15" }, { "no_NO.ISO_8859-1", "ISO-8859-1" }, { "pl_PL.ISO_8859-2", "ISO-8859-2" }, { "pt_PT.DIS_8859-15", "ISO-8859-15" }, { "pt_PT.ISO_8859-1", "ISO-8859-1" }, { "ru_RU.CP866", "CP866" }, { "ru_RU.ISO_8859-5", "ISO-8859-5" }, { "ru_RU.KOI8-R", "KOI8-R" }, { "ru_SU.CP866", "CP866" }, { "ru_SU.ISO_8859-5", "ISO-8859-5" }, { "ru_SU.KOI8-R", "KOI8-R" }, { "sl_SI.ISO_8859-2", "ISO-8859-2" }, { "sv_SE.DIS_8859-15", "ISO-8859-15" }, { "sv_SE.ISO_8859-1", "ISO-8859-1" }, { "uk_UA.KOI8-U", "KOI8-U" }, { "zh_CN.EUC", "GB2312" }, { "zh_TW.BIG5", "BIG5" }, { "zh_TW.Big5", "BIG5" } # define locale_table_defined # endif # if defined __DJGPP__ /* DOS / DJGPP 2.03 */ /* The encodings given here may not all be correct. If you find that the encoding given for your language and country is not the one your DOS machine actually uses, just correct it in this file, and send a mail to Juan Manuel Guerrero <juan.guerrero@gmx.de> and <bug-gnulib@gnu.org>. */ { "C", "ASCII" }, { "ar", "CP864" }, { "ar_AE", "CP864" }, { "ar_DZ", "CP864" }, { "ar_EG", "CP864" }, { "ar_IQ", "CP864" }, { "ar_IR", "CP864" }, { "ar_JO", "CP864" }, { "ar_KW", "CP864" }, { "ar_MA", "CP864" }, { "ar_OM", "CP864" }, { "ar_QA", "CP864" }, { "ar_SA", "CP864" }, { "ar_SY", "CP864" }, { "be", "CP866" }, { "be_BE", "CP866" }, { "bg", "CP866" }, /* not CP855 ?? */ { "bg_BG", "CP866" }, /* not CP855 ?? */ { "ca", "CP850" }, { "ca_ES", "CP850" }, { "cs", "CP852" }, { "cs_CZ", "CP852" }, { "da", "CP865" }, /* not CP850 ?? */ { "da_DK", "CP865" }, /* not CP850 ?? */ { "de", "CP850" }, { "de_AT", "CP850" }, { "de_CH", "CP850" }, { "de_DE", "CP850" }, { "el", "CP869" }, { "el_GR", "CP869" }, { "en", "CP850" }, { "en_AU", "CP850" }, /* not CP437 ?? */ { "en_CA", "CP850" }, { "en_GB", "CP850" }, { "en_NZ", "CP437" }, { "en_US", "CP437" }, { "en_ZA", "CP850" }, /* not CP437 ?? */ { "eo", "CP850" }, { "eo_EO", "CP850" }, { "es", "CP850" }, { "es_AR", "CP850" }, { "es_BO", "CP850" }, { "es_CL", "CP850" }, { "es_CO", "CP850" }, { "es_CR", "CP850" }, { "es_CU", "CP850" }, { "es_DO", "CP850" }, { "es_EC", "CP850" }, { "es_ES", "CP850" }, { "es_GT", "CP850" }, { "es_HN", "CP850" }, { "es_MX", "CP850" }, { "es_NI", "CP850" }, { "es_PA", "CP850" }, { "es_PE", "CP850" }, { "es_PY", "CP850" }, { "es_SV", "CP850" }, { "es_UY", "CP850" }, { "es_VE", "CP850" }, { "et", "CP850" }, { "et_EE", "CP850" }, { "eu", "CP850" }, { "eu_ES", "CP850" }, { "fi", "CP850" }, { "fi_FI", "CP850" }, { "fr", "CP850" }, { "fr_BE", "CP850" }, { "fr_CA", "CP850" }, { "fr_CH", "CP850" }, { "fr_FR", "CP850" }, { "ga", "CP850" }, { "ga_IE", "CP850" }, { "gd", "CP850" }, { "gd_GB", "CP850" }, { "gl", "CP850" }, { "gl_ES", "CP850" }, { "he", "CP862" }, { "he_IL", "CP862" }, { "hr", "CP852" }, { "hr_HR", "CP852" }, { "hu", "CP852" }, { "hu_HU", "CP852" }, { "id", "CP850" }, /* not CP437 ?? */ { "id_ID", "CP850" }, /* not CP437 ?? */ { "is", "CP861" }, /* not CP850 ?? */ { "is_IS", "CP861" }, /* not CP850 ?? */ { "it", "CP850" }, { "it_CH", "CP850" }, { "it_IT", "CP850" }, { "ja", "CP932" }, { "ja_JP", "CP932" }, { "kr", "CP949" }, /* not CP934 ?? */ { "kr_KR", "CP949" }, /* not CP934 ?? */ { "lt", "CP775" }, { "lt_LT", "CP775" }, { "lv", "CP775" }, { "lv_LV", "CP775" }, { "mk", "CP866" }, /* not CP855 ?? */ { "mk_MK", "CP866" }, /* not CP855 ?? */ { "mt", "CP850" }, { "mt_MT", "CP850" }, { "nb", "CP865" }, /* not CP850 ?? */ { "nb_NO", "CP865" }, /* not CP850 ?? */ { "nl", "CP850" }, { "nl_BE", "CP850" }, { "nl_NL", "CP850" }, { "nn", "CP865" }, /* not CP850 ?? */ { "nn_NO", "CP865" }, /* not CP850 ?? */ { "no", "CP865" }, /* not CP850 ?? */ { "no_NO", "CP865" }, /* not CP850 ?? */ { "pl", "CP852" }, { "pl_PL", "CP852" }, { "pt", "CP850" }, { "pt_BR", "CP850" }, { "pt_PT", "CP850" }, { "ro", "CP852" }, { "ro_RO", "CP852" }, { "ru", "CP866" }, { "ru_RU", "CP866" }, { "sk", "CP852" }, { "sk_SK", "CP852" }, { "sl", "CP852" }, { "sl_SI", "CP852" }, { "sq", "CP852" }, { "sq_AL", "CP852" }, { "sr", "CP852" }, /* CP852 or CP866 or CP855 ?? */ { "sr_CS", "CP852" }, /* CP852 or CP866 or CP855 ?? */ { "sr_YU", "CP852" }, /* CP852 or CP866 or CP855 ?? */ { "sv", "CP850" }, { "sv_SE", "CP850" }, { "th", "CP874" }, { "th_TH", "CP874" }, { "tr", "CP857" }, { "tr_TR", "CP857" }, { "uk", "CP1125" }, { "uk_UA", "CP1125" }, { "zh_CN", "GBK" }, { "zh_TW", "CP950" } /* not CP938 ?? */ # define locale_table_defined # endif # ifndef locale_table_defined /* Just a dummy entry, to avoid a C syntax error. */ { "", "" } # endif }; #endif /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed below. The result must not be freed; it is statically allocated. The result becomes invalid when setlocale() is used to change the global locale, or when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG is changed; threads in multithreaded programs should not do this. If the canonical name cannot be determined, the result is a non-canonical name. */ #ifdef STATIC STATIC #endif const char * locale_charset (void) { const char *codeset; /* This function must be multithread-safe. To achieve this without using thread-local storage, we use a simple strcpy or memcpy to fill this static buffer. Filling it through, for example, strcpy + strcat would not be guaranteed to leave the buffer's contents intact if another thread is currently accessing it. If necessary, the contents is first assembled in a stack-allocated buffer. */ #if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 # if HAVE_LANGINFO_CODESET /* Most systems support nl_langinfo (CODESET) nowadays. */ codeset = nl_langinfo (CODESET); # ifdef __CYGWIN__ /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always returns "US-ASCII". Return the suffix of the locale name from the environment variables (if present) or the codepage as a number. */ if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) { const char *locale; static char resultbuf[2 + 10 + 1]; locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (resultbuf)) { /* This way of filling resultbuf is multithread-safe. */ memcpy (resultbuf, dot, modifier - dot); resultbuf [modifier - dot] = '\0'; return resultbuf; } } } /* The Windows API has a function returning the locale's codepage as a number: GetACP(). This encoding is used by Cygwin, unless the user has set the environment variable CYGWIN=codepage:oem (which very few people do). Output directed to console windows needs to be converted (to GetOEMCP() if the console is using a raster font, or to GetConsoleOutputCP() if it is using a TrueType font). Cygwin does this conversion transparently (see winsup/cygwin/fhandler_console.cc), converting to GetConsoleOutputCP(). This leads to correct results, except when SetConsoleOutputCP has been called and a raster font is in use. */ { char buf[2 + 10 + 1]; sprintf (buf, "CP%u", GetACP ()); strcpy (resultbuf, buf); codeset = resultbuf; } } # endif if (codeset == NULL) /* The canonical name cannot be determined. */ codeset = ""; # elif defined WINDOWS_NATIVE char buf[2 + 10 + 1]; static char resultbuf[2 + 10 + 1]; /* The Windows API has a function returning the locale's codepage as a number, but the value doesn't change according to what the 'setlocale' call specified. So we use it as a last resort, in case the string returned by 'setlocale' doesn't specify the codepage. */ char *current_locale = setlocale (LC_CTYPE, NULL); char *pdot = strrchr (current_locale, '.'); if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf)) sprintf (buf, "CP%s", pdot + 1); else { /* The Windows API has a function returning the locale's codepage as a number: GetACP(). When the output goes to a console window, it needs to be provided in GetOEMCP() encoding if the console is using a raster font, or in GetConsoleOutputCP() encoding if it is using a TrueType font. But in GUI programs and for output sent to files and pipes, GetACP() encoding is the best bet. */ sprintf (buf, "CP%u", GetACP ()); } /* For a locale name such as "French_France.65001", in Windows 10, setlocale now returns "French_France.utf8" instead. */ if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0) codeset = "UTF-8"; else { strcpy (resultbuf, buf); codeset = resultbuf; } # elif defined OS2 const char *locale; static char resultbuf[2 + 10 + 1]; ULONG cp[3]; ULONG cplen; codeset = NULL; /* Allow user to override the codeset, as set in the operating system, with standard language environment variables. */ locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (resultbuf)) { /* This way of filling resultbuf is multithread-safe. */ memcpy (resultbuf, dot, modifier - dot); resultbuf [modifier - dot] = '\0'; return resultbuf; } } /* For the POSIX locale, don't use the system's codepage. */ if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0) codeset = ""; } if (codeset == NULL) { /* OS/2 has a function returning the locale's codepage as a number. */ if (DosQueryCp (sizeof (cp), cp, &cplen)) codeset = ""; else { char buf[2 + 10 + 1]; sprintf (buf, "CP%u", cp[0]); strcpy (resultbuf, buf); codeset = resultbuf; } } # else # error "Add code for other platforms here." # endif /* Resolve alias. */ { # ifdef alias_table_defined /* On some platforms, UTF-8 locales are the most frequently used ones. Speed up the common case and slow down the less common cases by testing for this case first. */ # if defined __OpenBSD__ || (defined __APPLE__ && defined __MACH__) || defined __sun || defined __CYGWIN__ if (strcmp (codeset, "UTF-8") == 0) goto done_table_lookup; else # endif { const struct table_entry * const table = alias_table; size_t const table_size = sizeof (alias_table) / sizeof (struct table_entry); /* The table is sorted. Perform a binary search. */ size_t hi = table_size; size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, strcmp (table[i].alias, codeset) < 0, for i >= hi, strcmp (table[i].alias, codeset) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = strcmp (table[mid].alias, codeset); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with strcmp (table[i].alias, codeset) == 0. */ codeset = table[mid].canonical; goto done_table_lookup; } } } if (0) done_table_lookup: {} else # endif { /* Did not find it in the table. */ /* On Mac OS X, all modern locales use the UTF-8 encoding. BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ # if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ codeset = "UTF-8"; # else /* Don't return an empty string. GNU libc and GNU libiconv interpret the empty string as denoting "the locale's character encoding", thus GNU libiconv would call this function a second time. */ if (codeset[0] == '\0') codeset = "ASCII"; # endif } } #else /* On old systems which lack it, use setlocale or getenv. */ const char *locale = NULL; /* But most old systems don't have a complete set of locales. Some (like DJGPP) have only the C locale. Therefore we don't use setlocale here; it would return "C" when it doesn't support the locale name the user has set. */ # if 0 locale = setlocale (LC_CTYPE, NULL); # endif if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); if (locale == NULL) locale = ""; } } /* Map locale name to canonical encoding name. */ { # ifdef locale_table_defined const struct table_entry * const table = locale_table; size_t const table_size = sizeof (locale_table) / sizeof (struct table_entry); /* The table is sorted. Perform a binary search. */ size_t hi = table_size; size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, strcmp (table[i].locale, locale) < 0, for i >= hi, strcmp (table[i].locale, locale) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = strcmp (table[mid].locale, locale); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with strcmp (table[i].locale, locale) == 0. */ codeset = table[mid].canonical; goto done_table_lookup; } } if (0) done_table_lookup: ; else # endif { /* Did not find it in the table. */ /* On Mac OS X, all modern locales use the UTF-8 encoding. BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ # if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ codeset = "UTF-8"; # else /* The canonical name cannot be determined. */ /* Don't return an empty string. GNU libc and GNU libiconv interpret the empty string as denoting "the locale's character encoding", thus GNU libiconv would call this function a second time. */ codeset = "ASCII"; # endif } } #endif #ifdef DARWIN7 /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8" (the default codeset) does not work when MB_CUR_MAX is 1. */ if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1) codeset = "ASCII"; #endif return codeset; } ���������������������������������������������gnuastro-0.22/bootstrapped/lib/localeconv.c���������������������������������������������������������0000644�0001750�0001750�00000010354�14557510505�014537� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query locale dependent information for formatting numbers. Copyright (C) 2012-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <locale.h> #include <limits.h> #if HAVE_STRUCT_LCONV_DECIMAL_POINT # define FIX_CHAR_VALUE(x) ((x) >= 0 ? (x) : CHAR_MAX) /* Override for platforms where 'struct lconv' lacks the int_p_*, int_n_* members or where fields of type 'char' are set to -1 instead of CHAR_MAX. */ struct lconv * localeconv (void) { static struct lconv result; # undef lconv # undef localeconv struct lconv *sys_result = localeconv (); result.decimal_point = sys_result->decimal_point; result.thousands_sep = sys_result->thousands_sep; result.grouping = sys_result->grouping; result.mon_decimal_point = sys_result->mon_decimal_point; result.mon_thousands_sep = sys_result->mon_thousands_sep; result.mon_grouping = sys_result->mon_grouping; result.positive_sign = sys_result->positive_sign; result.negative_sign = sys_result->negative_sign; result.currency_symbol = sys_result->currency_symbol; result.frac_digits = FIX_CHAR_VALUE (sys_result->frac_digits); result.p_cs_precedes = FIX_CHAR_VALUE (sys_result->p_cs_precedes); result.p_sign_posn = FIX_CHAR_VALUE (sys_result->p_sign_posn); result.p_sep_by_space = FIX_CHAR_VALUE (sys_result->p_sep_by_space); result.n_cs_precedes = FIX_CHAR_VALUE (sys_result->n_cs_precedes); result.n_sign_posn = FIX_CHAR_VALUE (sys_result->n_sign_posn); result.n_sep_by_space = FIX_CHAR_VALUE (sys_result->n_sep_by_space); result.int_curr_symbol = sys_result->int_curr_symbol; result.int_frac_digits = FIX_CHAR_VALUE (sys_result->int_frac_digits); # if HAVE_STRUCT_LCONV_INT_P_CS_PRECEDES result.int_p_cs_precedes = FIX_CHAR_VALUE (sys_result->int_p_cs_precedes); result.int_p_sign_posn = FIX_CHAR_VALUE (sys_result->int_p_sign_posn); result.int_p_sep_by_space = FIX_CHAR_VALUE (sys_result->int_p_sep_by_space); result.int_n_cs_precedes = FIX_CHAR_VALUE (sys_result->int_n_cs_precedes); result.int_n_sign_posn = FIX_CHAR_VALUE (sys_result->int_n_sign_posn); result.int_n_sep_by_space = FIX_CHAR_VALUE (sys_result->int_n_sep_by_space); # else result.int_p_cs_precedes = FIX_CHAR_VALUE (sys_result->p_cs_precedes); result.int_p_sign_posn = FIX_CHAR_VALUE (sys_result->p_sign_posn); result.int_p_sep_by_space = FIX_CHAR_VALUE (sys_result->p_sep_by_space); result.int_n_cs_precedes = FIX_CHAR_VALUE (sys_result->n_cs_precedes); result.int_n_sign_posn = FIX_CHAR_VALUE (sys_result->n_sign_posn); result.int_n_sep_by_space = FIX_CHAR_VALUE (sys_result->n_sep_by_space); # endif return &result; } #else /* Override for platforms where 'struct lconv' is a dummy. */ struct lconv * localeconv (void) { static /*const*/ struct lconv result = { /* decimal_point */ ".", /* thousands_sep */ "", /* grouping */ "", /* mon_decimal_point */ "", /* mon_thousands_sep */ "", /* mon_grouping */ "", /* positive_sign */ "", /* negative_sign */ "", /* currency_symbol */ "", /* frac_digits */ CHAR_MAX, /* p_cs_precedes */ CHAR_MAX, /* p_sign_posn */ CHAR_MAX, /* p_sep_by_space */ CHAR_MAX, /* n_cs_precedes */ CHAR_MAX, /* n_sign_posn */ CHAR_MAX, /* n_sep_by_space */ CHAR_MAX, /* int_curr_symbol */ "", /* int_frac_digits */ CHAR_MAX, /* int_p_cs_precedes */ CHAR_MAX, /* int_p_sign_posn */ CHAR_MAX, /* int_p_sep_by_space */ CHAR_MAX, /* int_n_cs_precedes */ CHAR_MAX, /* int_n_sign_posn */ CHAR_MAX, /* int_n_sep_by_space */ CHAR_MAX }; return &result; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/lstat.c��������������������������������������������������������������0000644�0001750�0001750�00000007236�14557510505�013546� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around a bug of lstat on some systems Copyright (C) 1997-2006, 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_lstat doesn't recurse to rpl_lstat. */ #define __need_system_sys_stat_h #include <config.h> #if !HAVE_LSTAT /* On systems that lack symlinks, our replacement <sys/stat.h> already defined lstat as stat, so there is nothing further to do other than avoid an empty file. */ typedef int dummy; #else /* HAVE_LSTAT */ /* Get the original definition of lstat. It might be defined as a macro. */ # include <sys/types.h> # include <sys/stat.h> # undef __need_system_sys_stat_h static int orig_lstat (const char *filename, struct stat *buf) { return lstat (filename, buf); } /* Specification. */ # ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" # else # include <sys/stat.h> # endif # include "stat-time.h" # include <string.h> # include <errno.h> /* lstat works differently on Linux and Solaris systems. POSIX (see "pathname resolution" in the glossary) requires that programs like 'ls' take into consideration the fact that FILE has a trailing slash when FILE is a symbolic link. On Linux and Solaris 10 systems, the lstat function already has the desired semantics (in treating 'lstat ("symlink/", sbuf)' just like 'lstat ("symlink/.", sbuf)', but on Solaris 9 and earlier it does not. If FILE has a trailing slash and specifies a symbolic link, then use stat() to get more info on the referent of FILE. If the referent is a non-directory, then set errno to ENOTDIR and return -1. Otherwise, return stat's result. */ int rpl_lstat (const char *file, struct stat *sbuf) { int result = orig_lstat (file, sbuf); /* This replacement file can blindly check against '/' rather than using the ISSLASH macro, because all platforms with '\\' either lack symlinks (mingw) or have working lstat (cygwin) and thus do not compile this file. 0 len should have already been filtered out above, with a failure return of ENOENT. */ if (result == 0) { if (S_ISDIR (sbuf->st_mode) || file[strlen (file) - 1] != '/') result = stat_time_normalize (result, sbuf); else { /* At this point, a trailing slash is permitted only on symlink-to-dir; but it should have found information on the directory, not the symlink. Call 'stat' to get info about the link's referent. Our replacement stat guarantees valid results, even if the symlink is not pointing to a directory. */ if (!S_ISLNK (sbuf->st_mode)) { errno = ENOTDIR; return -1; } result = stat (file, sbuf); } } return result; } #endif /* HAVE_LSTAT */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/malloca.c������������������������������������������������������������0000644�0001750�0001750�00000010303�14557510505�014014� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation. Copyright (C) 2003, 2006-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003, 2018. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> /* Specification. */ #include "malloca.h" #include <stdckdint.h> #if defined __CHERI_PURE_CAPABILITY__ # include <cheri.h> #endif #include "idx.h" /* The speed critical point in this file is freea() applied to an alloca() result: it must be fast, to match the speed of alloca(). The speed of mmalloca() and freea() in the other case are not critical, because they are only invoked for big memory sizes. Here we use a bit in the address as an indicator, an idea by OndÅ™ej Bílka. malloca() can return three types of pointers: - Pointers ≡ 0 mod 2*sa_alignment_max come from stack allocation. - Pointers ≡ sa_alignment_max mod 2*sa_alignment_max come from heap allocation. - NULL comes from a failed heap allocation. */ #if defined __CHERI_PURE_CAPABILITY__ /* Type for holding the original malloc() result. */ typedef uintptr_t small_t; #else /* Type for holding very small pointer differences. */ typedef unsigned char small_t; /* Verify that it is wide enough. */ static_assert (2 * sa_alignment_max - 1 <= (small_t) -1); #endif void * mmalloca (size_t n) { #if HAVE_ALLOCA /* Allocate one more word, used to determine the address to pass to freea(), and room for the alignment ≡ sa_alignment_max mod 2*sa_alignment_max. */ uintptr_t alignment2_mask = 2 * sa_alignment_max - 1; int plus = sizeof (small_t) + alignment2_mask; idx_t nplus; if (!ckd_add (&nplus, n, plus) && !xalloc_oversized (nplus, 1)) { char *mem = (char *) malloc (nplus); if (mem != NULL) { uintptr_t umem = (uintptr_t) mem; /* The ckd_add avoids signed integer overflow on theoretical platforms where UINTPTR_MAX <= INT_MAX. */ uintptr_t umemplus; ckd_add (&umemplus, umem, sizeof (small_t) + sa_alignment_max - 1); idx_t offset = (umemplus - umemplus % (2 * sa_alignment_max) + sa_alignment_max - umem); void *p = mem + offset; /* Here p >= mem + sizeof (small_t), and p <= mem + sizeof (small_t) + 2 * sa_alignment_max - 1 hence p + n <= mem + nplus. So, the memory range [p, p+n) lies in the allocated memory range [mem, mem + nplus). */ small_t *sp = p; # if defined __CHERI_PURE_CAPABILITY__ sp[-1] = umem; p = (char *) cheri_bounds_set ((char *) p - sizeof (small_t), sizeof (small_t) + n) + sizeof (small_t); # else sp[-1] = offset; # endif /* p ≡ sa_alignment_max mod 2*sa_alignment_max. */ return p; } } /* Out of memory. */ return NULL; #else # if !MALLOC_0_IS_NONNULL if (n == 0) n = 1; # endif return malloc (n); #endif } #if HAVE_ALLOCA void freea (void *p) { /* Check argument. */ uintptr_t u = (uintptr_t) p; if (u & (sa_alignment_max - 1)) { /* p was not the result of a malloca() call. Invalid argument. */ abort (); } /* Determine whether p was a non-NULL pointer returned by mmalloca(). */ if (u & sa_alignment_max) { char *cp = p; small_t *sp = p; # if defined __CHERI_PURE_CAPABILITY__ void *mem = sp[-1]; # else void *mem = cp - sp[-1]; # endif free (mem); } } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/math.c���������������������������������������������������������������0000644�0001750�0001750�00000001533�14557510505�013342� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <math.h>. Copyright (C) 2012-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define _GL_MATH_INLINE _GL_EXTERN_INLINE #include "math.h" typedef int dummy; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbchar.c�������������������������������������������������������������0000644�0001750�0001750�00000001510�14557510505�013640� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2001, 2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define MBCHAR_INLINE _GL_EXTERN_INLINE #include <limits.h> #include "mbchar.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbrtoc32.c�����������������������������������������������������������0000644�0001750�0001750�00000015736�14557510505�014056� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to 32-bit wide character. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2020. */ #include <config.h> /* Specification. */ #include <uchar.h> #include "attribute.h" #include <errno.h> #include <stdlib.h> #if GL_CHAR32_T_IS_UNICODE # include "lc-charset-unicode.h" #endif #if GNULIB_defined_mbstate_t /* AIX, IRIX */ /* Implement mbrtoc32() on top of mbtowc() for the non-UTF-8 locales and directly for the UTF-8 locales. */ /* Note: On AIX (64-bit) we can implement mbrtoc32 in two equivalent ways: - in a way that parallels the override of mbrtowc; this is the code branch here; - in a way that invokes the overridden mbrtowc; this would be the #else branch below. They are equivalent. */ # if AVOID_ANY_THREADS /* The option '--disable-threads' explicitly requests no locking. */ # elif defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif # include "lc-charset-dispatch.h" # include "mbtowc-lock.h" static_assert (sizeof (mbstate_t) >= 4); static char internal_state[4]; size_t mbrtoc32 (char32_t *pwc, const char *s, size_t n, mbstate_t *ps) { # define FITS_IN_CHAR_TYPE(wc) 1 # include "mbrtowc-impl.h" } #else /* glibc, macOS, FreeBSD, NetBSD, OpenBSD, HP-UX, Solaris, Cygwin, mingw, MSVC, Minix, Android */ /* Implement mbrtoc32() based on the original mbrtoc32() or on mbrtowc(). */ # include <wchar.h> # include "localcharset.h" # include "streq.h" # if MBRTOC32_IN_C_LOCALE_MAYBE_EILSEQ # include "hard-locale.h" # include <locale.h> # endif static mbstate_t internal_state; size_t mbrtoc32 (char32_t *pwc, const char *s, size_t n, mbstate_t *ps) # undef mbrtoc32 { /* It's simpler to handle the case s == NULL upfront, than to worry about this case later, before every test of pwc and n. */ if (s == NULL) { pwc = NULL; s = ""; n = 1; } # if MBRTOC32_EMPTY_INPUT_BUG || _GL_SMALL_WCHAR_T if (n == 0) return (size_t) -2; # endif if (ps == NULL) ps = &internal_state; # if HAVE_WORKING_MBRTOC32 /* mbrtoc32() may produce different values for wc than mbrtowc(). Therefore use mbrtoc32(). */ # if defined _WIN32 && !defined __CYGWIN__ char32_t wc; size_t ret = mbrtoc32 (&wc, s, n, ps); if (ret < (size_t) -2 && pwc != NULL) *pwc = wc; # else size_t ret = mbrtoc32 (pwc, s, n, ps); # endif # if GNULIB_MBRTOC32_REGULAR /* Verify that mbrtoc32 is regular. */ if (ret < (size_t) -3 && ! mbsinit (ps)) /* This occurs on glibc 2.36. */ mbszero (ps); if (ret == (size_t) -3) abort (); # endif # if MBRTOC32_IN_C_LOCALE_MAYBE_EILSEQ if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE)) { if (pwc != NULL) *pwc = (unsigned char) *s; return 1; } # endif return ret; # elif _GL_SMALL_WCHAR_T /* Special-case all encodings that may produce wide character values > WCHAR_MAX. */ const char *encoding = locale_charset (); if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) { /* Special-case the UTF-8 encoding. Assume that the wide-character encoding in a UTF-8 locale is UCS-2 or, equivalently, UTF-16. */ /* Here n > 0. */ char *pstate = (char *)ps; size_t nstate = pstate[0]; char buf[4]; const char *p; size_t m; int res; switch (nstate) { case 0: p = s; m = n; break; case 3: buf[2] = pstate[3]; FALLTHROUGH; case 2: buf[1] = pstate[2]; FALLTHROUGH; case 1: buf[0] = pstate[1]; p = buf; m = nstate; buf[m++] = s[0]; if (n >= 2 && m < 4) { buf[m++] = s[1]; if (n >= 3 && m < 4) buf[m++] = s[2]; } break; default: errno = EINVAL; return (size_t)(-1); } /* Here m > 0. */ { # define FITS_IN_CHAR_TYPE(wc) 1 # include "mbrtowc-impl-utf8.h" } success: if (nstate >= (res > 0 ? res : 1)) abort (); res -= nstate; /* Set *ps to an initial state. */ # if defined _WIN32 && !defined __CYGWIN__ /* Native Windows. */ /* MSVC defines 'mbstate_t' as an 8-byte struct; the first 4 bytes matter. On mingw, 'mbstate_t' is sometimes defined as 'int', sometimes defined as an 8-byte struct, of which the first 4 bytes matter. */ *(unsigned int *)pstate = 0; # elif defined __CYGWIN__ /* Cygwin defines 'mbstate_t' as an 8-byte struct; the first 4 bytes matter. */ ps->__count = 0; # else pstate[0] = 0; # endif return res; incomplete: { size_t k = nstate; /* Here 0 <= k < m < 4. */ pstate[++k] = s[0]; if (k < m) { pstate[++k] = s[1]; if (k < m) pstate[++k] = s[2]; } if (k != m) abort (); } pstate[0] = m; return (size_t)(-2); invalid: errno = EILSEQ; /* The conversion state is undefined, says POSIX. */ return (size_t)(-1); } else { wchar_t wc; size_t ret = mbrtowc (&wc, s, n, ps); if (ret < (size_t) -2 && pwc != NULL) *pwc = wc; return ret; } # else /* char32_t and wchar_t are equivalent. Use mbrtowc(). */ wchar_t wc; size_t ret = mbrtowc (&wc, s, n, ps); # if GNULIB_MBRTOC32_REGULAR /* Ensure that mbrtoc32 is regular. */ if (ret < (size_t) -2 && ! mbsinit (ps)) /* This occurs on glibc 2.12. */ mbszero (ps); # endif # if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION if (ret < (size_t) -2 && wc != 0) { wc = locale_encoding_to_unicode (wc); if (wc == 0) { ret = (size_t) -1; errno = EILSEQ; } } # endif if (ret < (size_t) -2 && pwc != NULL) *pwc = wc; return ret; # endif } #endif ����������������������������������gnuastro-0.22/bootstrapped/lib/mbrtowc.c������������������������������������������������������������0000644�0001750�0001750�00000007310�14557510505�014065� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #if GNULIB_defined_mbstate_t /* Implement mbrtowc() on top of mbtowc() for the non-UTF-8 locales and directly for the UTF-8 locales. */ # include <errno.h> # include <stdint.h> # include <stdlib.h> # if AVOID_ANY_THREADS /* The option '--disable-threads' explicitly requests no locking. */ # elif defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif # include "attribute.h" # include "lc-charset-dispatch.h" # include "mbtowc-lock.h" static_assert (sizeof (mbstate_t) >= 4); static char internal_state[4]; size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) { # define FITS_IN_CHAR_TYPE(wc) ((wc) <= WCHAR_MAX) # include "mbrtowc-impl.h" } #else /* Override the system's mbrtowc() function. */ # if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ # include "hard-locale.h" # include <locale.h> # endif # undef mbrtowc size_t rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) { size_t ret; wchar_t wc; # if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG || MBRTOWC_EMPTY_INPUT_BUG if (s == NULL) { pwc = NULL; s = ""; n = 1; } # endif # if MBRTOWC_EMPTY_INPUT_BUG if (n == 0) return (size_t) -2; # endif if (! pwc) pwc = &wc; # if MBRTOWC_RETVAL_BUG { static mbstate_t internal_state; /* Override mbrtowc's internal state. We cannot call mbsinit() on the hidden internal state, but we can call it on our variable. */ if (ps == NULL) ps = &internal_state; if (!mbsinit (ps)) { /* Parse the rest of the multibyte character byte for byte. */ size_t count = 0; for (; n > 0; s++, n--) { ret = mbrtowc (&wc, s, 1, ps); if (ret == (size_t)(-1)) return (size_t)(-1); count++; if (ret != (size_t)(-2)) { /* The multibyte character has been completed. */ *pwc = wc; return (wc == 0 ? 0 : count); } } return (size_t)(-2); } } # endif # if MBRTOWC_STORES_INCOMPLETE_BUG ret = mbrtowc (&wc, s, n, ps); if (ret < (size_t) -2 && pwc != NULL) *pwc = wc; # else ret = mbrtowc (pwc, s, n, ps); # endif # if MBRTOWC_NUL_RETVAL_BUG if (ret < (size_t) -2 && !*pwc) return 0; # endif # if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE)) { unsigned char uc = *s; *pwc = uc; return 1; } # endif return ret; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbschr.c�������������������������������������������������������������0000644�0001750�0001750�00000004200�14557510505�013661� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching a string for a character. Copyright (C) 2007-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <stdlib.h> #if GNULIB_MCEL_PREFER # include "mcel.h" #else # include "mbuiterf.h" #endif /* Locate the first single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. */ char * mbschr (const char *string, int c) { if (MB_CUR_MAX > 1 /* Optimization: We know that ASCII characters < 0x30 don't occur as part of multibyte characters longer than 1 byte. Hence, if c < 0x30, the faster unibyte loop can be used. */ && (unsigned char) c >= 0x30) { #if GNULIB_MCEL_PREFER while (*string) { mcel_t g = mcel_scanz (string); if (g.len == 1 && (unsigned char) *string == (unsigned char) c) return (char *) string; string += g.len; } #else mbuif_state_t state; const char *iter; for (mbuif_init (state), iter = string;; ) { if (!mbuif_avail (state, iter)) goto notfound; mbchar_t cur = mbuif_next (state, iter); if (mb_len (cur) == 1 && (unsigned char) *iter == (unsigned char) c) break; iter += mb_len (cur); } return (char *) iter; notfound: #endif return NULL; } else return strchr (string, c); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbsinit.c������������������������������������������������������������0000644�0001750�0001750�00000004531�14557510505�014057� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for initial conversion state. Copyright (C) 2008-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #if GNULIB_defined_mbstate_t /* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs() and wcrtomb(), wcsrtombs(). We assume that - sizeof (mbstate_t) >= 4, - only stateless encodings are supported (such as UTF-8 and EUC-JP, but not ISO-2022 variants), - for each encoding, the number of bytes for a wide character is <= 4. (This maximum is attained for UTF-8, GB18030, EUC-TW.) We define the meaning of mbstate_t as follows: - In mb -> wc direction, mbstate_t's first byte contains the number of buffered bytes (in the range 0..3), followed by up to 3 buffered bytes. See mbrtowc.c. - In wc -> mb direction, mbstate_t contains no information. In other words, it is always in an initial state. */ static_assert (sizeof (mbstate_t) >= 4); int mbsinit (const mbstate_t *ps) { const char *pstate = (const char *)ps; return pstate == NULL || pstate[0] == 0; } #else int mbsinit (const mbstate_t *ps) { # if defined _WIN32 && !defined __CYGWIN__ /* Native Windows. */ /* MSVC defines 'mbstate_t' as an 8-byte struct; the first 4 bytes matter. On mingw, 'mbstate_t' is sometimes defined as 'int', sometimes defined as an 8-byte struct, of which the first 4 bytes matter. */ return ps == NULL || *(const unsigned int *)ps == 0; # else /* Minix, HP-UX 11.00, Solaris 2.6, Interix, ... */ /* Maybe this definition works, maybe not... */ return ps == NULL || *(const char *)ps == 0; # endif } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbspbrk.c������������������������������������������������������������0000644�0001750�0001750�00000005415�14557510505�014054� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching a string for a character among a given set of characters. Copyright (C) 1999, 2002, 2006-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <stdlib.h> #if GNULIB_MCEL_PREFER # include "mcel.h" #else # include "mbuiterf.h" #endif /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the pointer to it, or NULL if none exists. */ char * mbspbrk (const char *string, const char *accept) { /* Optimize two cases. */ if (accept[0] == '\0') return NULL; if (accept[1] == '\0') return mbschr (string, accept[0]); /* General case. */ if (MB_CUR_MAX > 1) { char const *iter = string; #if GNULIB_MCEL_PREFER mcel_t a, g; for (; *iter; iter += g.len) { g = mcel_scanz (iter); if (g.len == 1) { if (mbschr (accept, *iter)) return (char *) iter; } else for (char const *aiter = accept; *aiter; aiter += a.len) { a = mcel_scanz (aiter); if (mcel_cmp (a, g) == 0) return (char *) iter; } } #else mbuif_state_t state; for (mbuif_init (state); mbuif_avail (state, iter); ) { mbchar_t cur = mbuif_next (state, iter); if (mb_len (cur) == 1) { if (mbschr (accept, *iter)) return (char *) iter; } else { mbuif_state_t astate; const char *aiter; for (mbuif_init (astate), aiter = accept; mbuif_avail (astate, aiter); ) { mbchar_t acur = mbuif_next (astate, aiter); if (mb_equal (acur, cur)) return (char *) iter; aiter += mb_len (acur); } } iter += mb_len (cur); } #endif return NULL; } else return strpbrk (string, accept); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbsspn.c�������������������������������������������������������������0000644�0001750�0001750�00000007545�14557510505�013724� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching a string for a character outside a given set of characters. Copyright (C) 1999, 2002, 2006-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <stdlib.h> #if GNULIB_MCEL_PREFER # include "mcel.h" #else # include "mbuiterf.h" #endif /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. */ size_t mbsspn (const char *string, const char *reject) { /* Optimize two cases. */ if (reject[0] == '\0') return 0; if (reject[1] == '\0') { unsigned char uc = (unsigned char) reject[0]; const char *iter = string; if (MB_CUR_MAX > 1) { #if GNULIB_MCEL_PREFER for (mcel_t g; *iter; iter += g.len) { g = mcel_scanz (iter); if (! (g.len == 1 && (unsigned char) *iter == uc)) break; } #else mbuif_state_t state; for (mbuif_init (state); mbuif_avail (state, iter); ) { mbchar_t cur = mbuif_next (state, iter); if (!(mb_len (cur) == 1 && (unsigned char) *iter == uc)) break; iter += mb_len (cur); } #endif } else { for (; *iter != '\0'; iter++) if ((unsigned char) *iter != uc) break; } return iter - string; } /* General case. */ if (MB_CUR_MAX > 1) { #if GNULIB_MCEL_PREFER for (size_t i = 0; ; ) { char c = string[i]; if (!c) return i; mcel_t g = mcel_scanz (string + i); if (g.len == 1) { if (!mbschr (reject, c)) return i; } else { for (char const *aiter = reject; ; ) { if (!*aiter) return i; mcel_t a = mcel_scanz (aiter); if (mcel_cmp (a, g) == 0) break; aiter += a.len; } } i += g.len; } #else mbuif_state_t state; const char *iter; for (mbuif_init (state), iter = string; mbuif_avail (state, iter); ) { mbchar_t cur = mbuif_next (state, iter); if (mb_len (cur) == 1) { if (mbschr (reject, *iter) == NULL) goto found; } else { mbuif_state_t astate; const char *aiter; for (mbuif_init (astate), aiter = reject; ; ) { if (!mbuif_avail (astate, aiter)) goto found; mbchar_t acur = mbuif_next (astate, aiter); if (mb_equal (acur, cur)) break; aiter += mb_len (acur); } } iter += mb_len (cur); } found: return iter - string; #endif } else return strspn (string, reject); } �����������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbstok_r.c�����������������������������������������������������������0000644�0001750�0001750�00000003425�14557510505�014233� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tokenizing a string. Copyright (C) 1999, 2002, 2006-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <stdlib.h> char * mbstok_r (char *string, const char *delim, char **save_ptr) { if (MB_CUR_MAX > 1) { if (string == NULL) { string = *save_ptr; if (string == NULL) return NULL; /* reminder that end of token sequence has been reached */ } /* Skip leading delimiters. */ string += mbsspn (string, delim); /* Found a token? */ if (*string == '\0') { *save_ptr = NULL; return NULL; } /* Move past the token. */ { char *token_end = mbspbrk (string, delim); if (token_end != NULL) { /* NUL-terminate the token. */ *token_end = '\0'; *save_ptr = token_end + 1; } else *save_ptr = NULL; } return string; } else return strtok_r (string, delim, save_ptr); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbszero.c������������������������������������������������������������0000644�0001750�0001750�00000001647�14557510505�014100� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Put an mbstate_t into an initial conversion state. Copyright (C) 2023-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2023. */ #include <config.h> #define IN_MBSZERO /* Specification and implementation. */ #include <wchar.h> �����������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbtowc.c�������������������������������������������������������������0000644�0001750�0001750�00000001670�14557510505�013706� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <wchar.h> #include "mbtowc-impl.h" ������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbuiterf.h�����������������������������������������������������������0000644�0001750�0001750�00000016212�14557510505�014233� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterating through multibyte strings, faster: macros for multi-byte encodings. Copyright (C) 2001, 2005, 2007, 2009-2024 Free Software Foundation, Inc. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, with insights from Paul Eggert. */ /* The macros in this file implement forward iteration through a multi-byte string, without knowing its length a-priori. With these macros, an iteration loop that looks like char *iter; for (iter = buf; *iter != '\0'; iter++) { do_something (*iter); } becomes mbuif_state_t state; [const] char *iter; for (mbuif_init (state), iter = buf; mbuif_avail (state, iter); ) { mbchar_t cur = mbuif_next (state, iter); // Note: Here always mb_ptr (cur) == iter. do_something (iter, mb_len (cur)); iter += mb_len (cur); } The benefit of these macros over plain use of mbrtowc or mbrtoc32 is: - Handling of invalid multibyte sequences is possible without making the code more complicated, while still preserving the invalid multibyte sequences. Compared to mbiterf.h, the macros here don't need to know the string's length a-priori. The downside is that at each step, the look-ahead that guards against overrunning the terminating '\0' is more expensive. The mbuif_* macros are therefore suitable when there is a high probability that only the first few multibyte characters need to be inspected. Whereas the mbif_* macros are better if usually the iteration runs through the entire string. The benefit of these macros over those from mbuiter.h is that it produces faster code with today's optimizing compilers (because mbuif_next returns its result by value). mbuif_state_t is a type usable for variable declarations. mbuif_init (state) initializes the state. mbuif_avail (state, iter) returns true if another loop round is needed. mbuif_next (state, iter) returns the next multibyte character. It asssumes that the state is initialized and that *iter != '\0'. Here are the function prototypes of the macros. extern void mbuif_init (mbuif_state_t state); extern bool mbuif_avail (mbuif_state_t state, const char *iter); extern mbchar_t mbuif_next (mbuif_state_t state, const char *iter); */ #ifndef _MBUITERF_H #define _MBUITERF_H 1 /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_ALWAYS_INLINE. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <assert.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <uchar.h> #include <wchar.h> #include "mbchar.h" #include "strnlen1.h" _GL_INLINE_HEADER_BEGIN #ifndef MBUITERF_INLINE # define MBUITERF_INLINE _GL_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE #endif struct mbuif_state { #if !GNULIB_MBRTOC32_REGULAR bool in_shift; /* true if next byte may not be interpreted as ASCII */ /* If GNULIB_MBRTOC32_REGULAR, it is always false, so optimize it away. */ #endif mbstate_t state; /* if in_shift: current shift state */ /* If GNULIB_MBRTOC32_REGULAR, it is in an initial state before and after every mbuiterf_next invocation. */ unsigned int cur_max; /* A cache of MB_CUR_MAX. */ }; MBUITERF_INLINE mbchar_t mbuiterf_next (struct mbuif_state *ps, const char *iter) { #if !GNULIB_MBRTOC32_REGULAR if (ps->in_shift) goto with_shift; #endif /* Handle most ASCII characters quickly, without calling mbrtowc(). */ if (is_basic (*iter)) { /* These characters are part of the POSIX portable character set. For most of them, namely those in the ISO C basic character set, ISO C 99 guarantees that their wide character code is identical to their char code. For the few other ones, this is the case as well, in all locale encodings that are in use. The 32-bit wide character code is the same as well. */ return (mbchar_t) { .ptr = iter, .bytes = 1, .wc_valid = true, .wc = *iter }; } else { assert (mbsinit (&ps->state)); #if !GNULIB_MBRTOC32_REGULAR ps->in_shift = true; with_shift:; #endif size_t bytes; char32_t wc; bytes = mbrtoc32 (&wc, iter, strnlen1 (iter, ps->cur_max), &ps->state); if (bytes == (size_t) -1) { /* An invalid multibyte sequence was encountered. */ /* Allow the next invocation to continue from a sane state. */ #if !GNULIB_MBRTOC32_REGULAR ps->in_shift = false; #endif mbszero (&ps->state); return (mbchar_t) { .ptr = iter, .bytes = 1, .wc_valid = false }; } else if (bytes == (size_t) -2) { /* An incomplete multibyte character at the end. */ /* Whether to set ps->in_shift = false and reset ps->state or not is not important; the string end is reached anyway. */ return (mbchar_t) { .ptr = iter, .bytes = strlen (iter), .wc_valid = false }; } else { if (bytes == 0) { /* A null wide character was encountered. */ bytes = 1; assert (*iter == '\0'); assert (wc == 0); } #if !GNULIB_MBRTOC32_REGULAR else if (bytes == (size_t) -3) /* The previous multibyte sequence produced an additional 32-bit wide character. */ bytes = 0; #endif /* When in an initial state, we can go back treating ASCII characters more quickly. */ #if !GNULIB_MBRTOC32_REGULAR if (mbsinit (&ps->state)) ps->in_shift = false; #endif return (mbchar_t) { .ptr = iter, .bytes = bytes, .wc_valid = true, .wc = wc }; } } } /* Iteration macros. */ typedef struct mbuif_state mbuif_state_t; #if !GNULIB_MBRTOC32_REGULAR #define mbuif_init(st) \ ((st).in_shift = false, mbszero (&(st).state), \ (st).cur_max = MB_CUR_MAX) #else /* Optimized: no in_shift. */ #define mbuif_init(st) \ (mbszero (&(st).state), \ (st).cur_max = MB_CUR_MAX) #endif #if !GNULIB_MBRTOC32_REGULAR #define mbuif_avail(st, iter) ((st).in_shift || (*(iter) != '\0')) #else /* Optimized: no in_shift. */ #define mbuif_avail(st, iter) (*(iter) != '\0') #endif #define mbuif_next(st, iter) \ mbuiterf_next (&(st), (iter)) _GL_INLINE_HEADER_END #endif /* _MBUITERF_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbuiterf.c�����������������������������������������������������������0000644�0001750�0001750�00000001560�14557510505�014226� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Iterating through multibyte strings: macros for multi-byte encodings. Copyright (C) 2023-2024 Free Software Foundation, Inc. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define MBUITERF_INLINE _GL_EXTERN_INLINE #include "mbuiterf.h" ������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/memchr.c�������������������������������������������������������������0000644�0001750�0001750�00000013455�14557510505�013672� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2024 Free Software Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se) and commentary by Jim Blandy (jimb@ai.mit.edu); adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), and implemented by Roland McGrath (roland@ai.mit.edu). NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> #endif #include <string.h> #include <stddef.h> #if defined _LIBC # include <memcopy.h> #else # define reg_char char #endif #include <limits.h> #if HAVE_BP_SYM_H || defined _LIBC # include <bp-sym.h> #else # define BP_SYM(sym) sym #endif #undef __memchr #ifdef _LIBC # undef memchr #endif #ifndef weak_alias # define __memchr memchr #endif /* Search no more than N bytes of S for C. */ void * __memchr (void const *s, int c_in, size_t n) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned reg_char c; c = (unsigned char) c_in; /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; n > 0 && (size_t) char_ptr % sizeof (longword) != 0; --n, ++char_ptr) if (*char_ptr == c) return (void *) char_ptr; longword_ptr = (const longword *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 is zero. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. So, the test whether any byte in longword1 is zero is equivalent to testing whether tmp is nonzero. */ while (n >= sizeof (longword)) { longword longword1 = *longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) & (repeated_one << 7)) != 0) break; longword_ptr++; n -= sizeof (longword); } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that either n < sizeof (longword), or one of the sizeof (longword) bytes starting at char_ptr is == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ for (; n > 0; --n, ++char_ptr) { if (*char_ptr == c) return (void *) char_ptr; } return NULL; } #ifdef weak_alias weak_alias (__memchr, BP_SYM (memchr)) #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/memmove.c������������������������������������������������������������0000644�0001750�0001750�00000001307�14557510505�014055� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* memmove.c -- copy memory. This file is in the public domain. */ /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ #include <config.h> #include <stddef.h> /* Copy LENGTH bytes from SOURCE to DEST. Does not null-terminate. */ void * memmove (void *dest0, void const *source0, size_t length) { char *dest = dest0; char const *source = source0; if (source < dest) /* Moving from low mem to hi mem; start at end. */ for (source += length, dest += length; length; --length) *--dest = *--source; else if (source != dest) { /* Moving from hi mem to low mem; start at beginning. */ for (; length; --length) *dest++ = *source++; } return dest0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mempcpy.c������������������������������������������������������������0000644�0001750�0001750�00000002213�14557510505�014057� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy memory area and return pointer after last written byte. Copyright (C) 2003, 2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> /* A function definition is only needed if HAVE_MEMPCPY is not defined. */ #if !HAVE_MEMPCPY /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ void * mempcpy (void *dest, const void *src, size_t n) { return (char *) memcpy (dest, src, n) + n; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/memrchr.c������������������������������������������������������������0000644�0001750�0001750�00000013115�14557510505�014045� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* memrchr -- find the last occurrence of a byte in a memory block Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2024 Free Software Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se) and commentary by Jim Blandy (jimb@ai.mit.edu); adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), and implemented by Roland McGrath (roland@ai.mit.edu). This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #if defined _LIBC # include <memcopy.h> #else # include <config.h> # define reg_char char #endif #include <string.h> #include <limits.h> #undef __memrchr #ifdef _LIBC # undef memrchr #endif #ifndef weak_alias # define __memrchr memrchr #endif /* Search no more than N bytes of S for C. */ void * __memrchr (void const *s, int c_in, size_t n) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned reg_char c; c = (unsigned char) c_in; /* Handle the last few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s + n; n > 0 && (size_t) char_ptr % sizeof (longword) != 0; --n) if (*--char_ptr == c) return (void *) char_ptr; longword_ptr = (const void *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 is zero. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. So, the test whether any byte in longword1 is zero is equivalent to testing whether tmp is nonzero. */ while (n >= sizeof (longword)) { longword longword1 = *--longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) & (repeated_one << 7)) != 0) { longword_ptr++; break; } n -= sizeof (longword); } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that either n < sizeof (longword), or one of the sizeof (longword) bytes starting at char_ptr is == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ while (n-- > 0) { if (*--char_ptr == c) return (void *) char_ptr; } return NULL; } #ifdef weak_alias weak_alias (__memrchr, memrchr) #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/minmax.h�������������������������������������������������������������0000644�0001750�0001750�00000004761�14557510505�013715� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* MIN, MAX macros. Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _MINMAX_H #define _MINMAX_H /* Note: MIN, MAX are also defined in <sys/param.h> on some systems (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about MIN, MAX macro redefinitions on some systems; the workaround is to #include this file as the last one among the #include list. */ /* This file uses HAVE_MINMAX_IN_LIMITS_H, HAVE_MINMAX_IN_SYS_PARAM_H. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Before we define the following symbols we get the <limits.h> file since otherwise we get redefinitions on some systems if <limits.h> is included after this file. Likewise for <sys/param.h>. If more than one of these system headers define MIN and MAX, pick just one of the headers (because the definitions most likely are the same). */ #if HAVE_MINMAX_IN_LIMITS_H # include <limits.h> #elif HAVE_MINMAX_IN_SYS_PARAM_H # include <sys/param.h> #endif /* Note: MIN and MAX should be used with two arguments of the same type. They might not return the minimum and maximum of their two arguments, if the arguments have different types or have unusual floating-point values. For example, on a typical host with 32-bit 'int', 64-bit 'long long', and 64-bit IEEE 754 'double' types: MAX (-1, 2147483648) returns 4294967295. MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. MAX (NaN, 0.0) returns 0.0. MAX (+0.0, -0.0) returns -0.0. and in each case the answer is in some sense bogus. */ /* MAX(a,b) returns the maximum of A and B. */ #ifndef MAX # define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif /* MIN(a,b) returns the minimum of A and B. */ #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #endif /* _MINMAX_H */ ���������������gnuastro-0.22/bootstrapped/lib/msvc-inval.c���������������������������������������������������������0000644�0001750�0001750�00000007553�14557510505�014500� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "msvc-inval.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* Get _invalid_parameter_handler type and _set_invalid_parameter_handler declaration. */ # include <stdlib.h> # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { } # else /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # if defined _MSC_VER static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # else /* An index to thread-local storage. */ static DWORD tls_index; static int tls_initialized /* = 0 */; /* Used as a fallback only. */ static struct gl_msvc_inval_per_thread not_per_thread; struct gl_msvc_inval_per_thread * gl_msvc_inval_current (void) { if (!tls_initialized) { tls_index = TlsAlloc (); tls_initialized = 1; } if (tls_index == TLS_OUT_OF_INDEXES) /* TlsAlloc had failed. */ return ¬_per_thread; else { struct gl_msvc_inval_per_thread *pointer = (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); if (pointer == NULL) { /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ pointer = (struct gl_msvc_inval_per_thread *) malloc (sizeof (struct gl_msvc_inval_per_thread)); if (pointer == NULL) /* Could not allocate memory. Use the global storage. */ pointer = ¬_per_thread; TlsSetValue (tls_index, pointer); } return pointer; } } static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); if (current->restart_valid) longjmp (current->restart, 1); else /* An invalid parameter notification from outside the gnulib code. Give the caller a chance to intervene. */ RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # endif # endif static int gl_msvc_inval_initialized /* = 0 */; void gl_msvc_inval_ensure_handler (void) { if (gl_msvc_inval_initialized == 0) { _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); gl_msvc_inval_initialized = 1; } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/msvc-nothrow.c�������������������������������������������������������0000644�0001750�0001750�00000002556�14557510505�015065� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "msvc-nothrow.h" /* Get declarations of the native Windows API functions. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef _get_osfhandle #if HAVE_MSVC_INVALID_PARAMETER_HANDLER intptr_t _gl_nothrow_get_osfhandle (int fd) { intptr_t result; TRY_MSVC_INVAL { result = _get_osfhandle (fd); } CATCH_MSVC_INVAL { result = (intptr_t) INVALID_HANDLE_VALUE; } DONE_MSVC_INVAL; return result; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/nl_langinfo.c��������������������������������������������������������0000644�0001750�0001750�00000037371�14557510505�014710� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* nl_langinfo() replacement: query locale dependent information. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <langinfo.h> #include <locale.h> #include <stdlib.h> #include <string.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include <stdio.h> #endif #if REPLACE_NL_LANGINFO && !NL_LANGINFO_MTSAFE # if AVOID_ANY_THREADS /* The option '--disable-threads' explicitly requests no locking. */ # elif defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif #endif /* nl_langinfo() must be multithread-safe. To achieve this without using thread-local storage: 1. We use a specific static buffer for each possible argument. So that different threads can call nl_langinfo with different arguments, without interfering. 2. We use a simple strcpy or memcpy to fill this static buffer. Filling it through, for example, strcpy + strcat would not be guaranteed to leave the buffer's contents intact if another thread is currently accessing it. If necessary, the contents is first assembled in a stack-allocated buffer. */ #if !REPLACE_NL_LANGINFO || GNULIB_defined_CODESET /* Return the codeset of the current locale, if this is easily deducible. Otherwise, return "". */ static char * ctype_codeset (void) { /* This function is only used on platforms which don't have uselocale(). Therefore we don't need to look at the per-thread locale first, here. */ static char result[2 + 10 + 1]; char buf[2 + 10 + 1]; char locale[SETLOCALE_NULL_MAX]; char *codeset; size_t codesetlen; if (setlocale_null_r (LC_CTYPE, locale, sizeof (locale))) locale[0] = '\0'; codeset = buf; codeset[0] = '\0'; if (locale[0]) { /* If the locale name contains an encoding after the dot, return it. */ char *dot = strchr (locale, '.'); if (dot) { /* Look for the possible @... trailer and remove it, if any. */ char *codeset_start = dot + 1; char const *modifier = strchr (codeset_start, '@'); if (! modifier) codeset = codeset_start; else { codesetlen = modifier - codeset_start; if (codesetlen < sizeof buf) { codeset = memcpy (buf, codeset_start, codesetlen); codeset[codesetlen] = '\0'; } } } } # if defined _WIN32 && ! defined __CYGWIN__ /* If setlocale is successful, it returns the number of the codepage, as a string. Otherwise, fall back on Windows API GetACP, which returns the locale's codepage as a number (although this doesn't change according to what the 'setlocale' call specified). Either way, prepend "CP" to make it a valid codeset name. */ codesetlen = strlen (codeset); if (0 < codesetlen && codesetlen < sizeof buf - 2) memmove (buf + 2, codeset, codesetlen + 1); else sprintf (buf + 2, "%u", GetACP ()); /* For a locale name such as "French_France.65001", in Windows 10, setlocale now returns "French_France.utf8" instead. */ if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0) return (char *) "UTF-8"; else { memcpy (buf, "CP", 2); strcpy (result, buf); return result; } # else strcpy (result, codeset); return result; #endif } #endif #if REPLACE_NL_LANGINFO /* Override nl_langinfo with support for added nl_item values. */ # undef nl_langinfo /* Without locking, on Solaris 11.3, test-nl_langinfo-mt fails, with message "thread5 disturbed by threadN!", even when threadN invokes only nl_langinfo (CODESET); nl_langinfo (CRNCYSTR); Similarly on Solaris 10. */ # if !NL_LANGINFO_MTSAFE /* Solaris */ # define ITEMS (MAXSTRMSG + 1) # define MAX_RESULT_LEN 80 static char * nl_langinfo_unlocked (nl_item item) { static char result[ITEMS][MAX_RESULT_LEN]; /* The result of nl_langinfo is in storage that can be overwritten by other calls to nl_langinfo. */ char *tmp = nl_langinfo (item); if (item >= 0 && item < ITEMS && tmp != NULL) { size_t tmp_len = strlen (tmp); if (tmp_len < MAX_RESULT_LEN) strcpy (result[item], tmp); else { /* Produce a truncated result. Oh well... */ result[item][MAX_RESULT_LEN - 1] = '\0'; memcpy (result[item], tmp, MAX_RESULT_LEN - 1); } return result[item]; } else return tmp; } /* Use a lock, so that no two threads can invoke nl_langinfo_unlocked at the same time. */ /* Prohibit renaming this symbol. */ # undef gl_get_nl_langinfo_lock # if AVOID_ANY_THREADS /* The option '--disable-threads' explicitly requests no locking. */ # define nl_langinfo_with_lock nl_langinfo_unlocked # elif defined _WIN32 && !defined __CYGWIN__ extern __declspec(dllimport) CRITICAL_SECTION *gl_get_nl_langinfo_lock (void); static char * nl_langinfo_with_lock (nl_item item) { CRITICAL_SECTION *lock = gl_get_nl_langinfo_lock (); char *ret; EnterCriticalSection (lock); ret = nl_langinfo_unlocked (item); LeaveCriticalSection (lock); return ret; } # elif HAVE_PTHREAD_API extern # if defined _WIN32 || defined __CYGWIN__ __declspec(dllimport) # endif pthread_mutex_t *gl_get_nl_langinfo_lock (void); # if HAVE_WEAK_SYMBOLS /* musl libc, FreeBSD, NetBSD, OpenBSD, Haiku */ /* Avoid the need to link with '-lpthread'. */ # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock /* Determine whether libpthread is in use. */ # pragma weak pthread_mutexattr_gettype /* See the comments in lock.h. */ # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # else # define pthread_in_use() 1 # endif static char * nl_langinfo_with_lock (nl_item item) { if (pthread_in_use()) { pthread_mutex_t *lock = gl_get_nl_langinfo_lock (); char *ret; if (pthread_mutex_lock (lock)) abort (); ret = nl_langinfo_unlocked (item); if (pthread_mutex_unlock (lock)) abort (); return ret; } else return nl_langinfo_unlocked (item); } # elif HAVE_THREADS_H extern mtx_t *gl_get_nl_langinfo_lock (void); static char * nl_langinfo_with_lock (nl_item item) { mtx_t *lock = gl_get_nl_langinfo_lock (); char *ret; if (mtx_lock (lock) != thrd_success) abort (); ret = nl_langinfo_unlocked (item); if (mtx_unlock (lock) != thrd_success) abort (); return ret; } # endif # else /* On other platforms, no lock is needed. */ # define nl_langinfo_with_lock nl_langinfo # endif char * rpl_nl_langinfo (nl_item item) { switch (item) { # if GNULIB_defined_CODESET case CODESET: return ctype_codeset (); # endif # if GNULIB_defined_T_FMT_AMPM case T_FMT_AMPM: return (char *) "%I:%M:%S %p"; # endif # if GNULIB_defined_ALTMON case ALTMON_1: case ALTMON_2: case ALTMON_3: case ALTMON_4: case ALTMON_5: case ALTMON_6: case ALTMON_7: case ALTMON_8: case ALTMON_9: case ALTMON_10: case ALTMON_11: case ALTMON_12: /* We don't ship the appropriate localizations with gnulib. Therefore, treat ALTMON_i like MON_i. */ item = item - ALTMON_1 + MON_1; break; # endif # if GNULIB_defined_ERA case ERA: /* The format is not standardized. In glibc it is a sequence of strings of the form "direction:offset:start_date:end_date:era_name:era_format" with an empty string at the end. */ return (char *) ""; case ERA_D_FMT: /* The %Ex conversion in strftime behaves like %x if the locale does not have an alternative time format. */ item = D_FMT; break; case ERA_D_T_FMT: /* The %Ec conversion in strftime behaves like %c if the locale does not have an alternative time format. */ item = D_T_FMT; break; case ERA_T_FMT: /* The %EX conversion in strftime behaves like %X if the locale does not have an alternative time format. */ item = T_FMT; break; case ALT_DIGITS: /* The format is not standardized. In glibc it is a sequence of 10 strings, appended in memory. */ return (char *) "\0\0\0\0\0\0\0\0\0\0"; # endif # if GNULIB_defined_YESEXPR || !FUNC_NL_LANGINFO_YESEXPR_WORKS case YESEXPR: return (char *) "^[yY]"; case NOEXPR: return (char *) "^[nN]"; # endif default: break; } return nl_langinfo_with_lock (item); } #else /* Provide nl_langinfo from scratch, either for native MS-Windows, or for old Unix platforms without locales, such as Linux libc5 or BeOS. */ # include <time.h> char * nl_langinfo (nl_item item) { char buf[100]; struct tm tmm = { 0 }; switch (item) { /* nl_langinfo items of the LC_CTYPE category */ case CODESET: { char *codeset = ctype_codeset (); if (*codeset) return codeset; } # ifdef __BEOS__ return (char *) "UTF-8"; # else return (char *) "ISO-8859-1"; # endif /* nl_langinfo items of the LC_NUMERIC category */ case RADIXCHAR: return localeconv () ->decimal_point; case THOUSEP: return localeconv () ->thousands_sep; # ifdef GROUPING case GROUPING: return localeconv () ->grouping; # endif /* nl_langinfo items of the LC_TIME category. TODO: Really use the locale. */ case D_T_FMT: case ERA_D_T_FMT: return (char *) "%a %b %e %H:%M:%S %Y"; case D_FMT: case ERA_D_FMT: return (char *) "%m/%d/%y"; case T_FMT: case ERA_T_FMT: return (char *) "%H:%M:%S"; case T_FMT_AMPM: return (char *) "%I:%M:%S %p"; case AM_STR: { static char result[80]; if (!strftime (buf, sizeof result, "%p", &tmm)) return (char *) "AM"; strcpy (result, buf); return result; } case PM_STR: { static char result[80]; tmm.tm_hour = 12; if (!strftime (buf, sizeof result, "%p", &tmm)) return (char *) "PM"; strcpy (result, buf); return result; } case DAY_1: case DAY_2: case DAY_3: case DAY_4: case DAY_5: case DAY_6: case DAY_7: { static char result[7][50]; static char const days[][sizeof "Wednesday"] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; tmm.tm_wday = item - DAY_1; if (!strftime (buf, sizeof result[0], "%A", &tmm)) return (char *) days[item - DAY_1]; strcpy (result[item - DAY_1], buf); return result[item - DAY_1]; } case ABDAY_1: case ABDAY_2: case ABDAY_3: case ABDAY_4: case ABDAY_5: case ABDAY_6: case ABDAY_7: { static char result[7][30]; static char const abdays[][sizeof "Sun"] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; tmm.tm_wday = item - ABDAY_1; if (!strftime (buf, sizeof result[0], "%a", &tmm)) return (char *) abdays[item - ABDAY_1]; strcpy (result[item - ABDAY_1], buf); return result[item - ABDAY_1]; } { static char const months[][sizeof "September"] = { "January", "February", "March", "April", "May", "June", "July", "September", "October", "November", "December" }; case MON_1: case MON_2: case MON_3: case MON_4: case MON_5: case MON_6: case MON_7: case MON_8: case MON_9: case MON_10: case MON_11: case MON_12: { static char result[12][50]; tmm.tm_mon = item - MON_1; if (!strftime (buf, sizeof result[0], "%B", &tmm)) return (char *) months[item - MON_1]; strcpy (result[item - MON_1], buf); return result[item - MON_1]; } case ALTMON_1: case ALTMON_2: case ALTMON_3: case ALTMON_4: case ALTMON_5: case ALTMON_6: case ALTMON_7: case ALTMON_8: case ALTMON_9: case ALTMON_10: case ALTMON_11: case ALTMON_12: { static char result[12][50]; tmm.tm_mon = item - ALTMON_1; /* The platforms without nl_langinfo() don't support strftime with %OB. We don't even need to try. */ #if 0 if (!strftime (buf, sizeof result[0], "%OB", &tmm)) #endif if (!strftime (buf, sizeof result[0], "%B", &tmm)) return (char *) months[item - ALTMON_1]; strcpy (result[item - ALTMON_1], buf); return result[item - ALTMON_1]; } } case ABMON_1: case ABMON_2: case ABMON_3: case ABMON_4: case ABMON_5: case ABMON_6: case ABMON_7: case ABMON_8: case ABMON_9: case ABMON_10: case ABMON_11: case ABMON_12: { static char result[12][30]; static char const abmonths[][sizeof "Jan"] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Sep", "Oct", "Nov", "Dec" }; tmm.tm_mon = item - ABMON_1; if (!strftime (buf, sizeof result[0], "%b", &tmm)) return (char *) abmonths[item - ABMON_1]; strcpy (result[item - ABMON_1], buf); return result[item - ABMON_1]; } case ERA: return (char *) ""; case ALT_DIGITS: return (char *) "\0\0\0\0\0\0\0\0\0\0"; /* nl_langinfo items of the LC_MONETARY category. */ case CRNCYSTR: return localeconv () ->currency_symbol; # ifdef INT_CURR_SYMBOL case INT_CURR_SYMBOL: return localeconv () ->int_curr_symbol; case MON_DECIMAL_POINT: return localeconv () ->mon_decimal_point; case MON_THOUSANDS_SEP: return localeconv () ->mon_thousands_sep; case MON_GROUPING: return localeconv () ->mon_grouping; case POSITIVE_SIGN: return localeconv () ->positive_sign; case NEGATIVE_SIGN: return localeconv () ->negative_sign; case FRAC_DIGITS: return & localeconv () ->frac_digits; case INT_FRAC_DIGITS: return & localeconv () ->int_frac_digits; case P_CS_PRECEDES: return & localeconv () ->p_cs_precedes; case N_CS_PRECEDES: return & localeconv () ->n_cs_precedes; case P_SEP_BY_SPACE: return & localeconv () ->p_sep_by_space; case N_SEP_BY_SPACE: return & localeconv () ->n_sep_by_space; case P_SIGN_POSN: return & localeconv () ->p_sign_posn; case N_SIGN_POSN: return & localeconv () ->n_sign_posn; # endif /* nl_langinfo items of the LC_MESSAGES category TODO: Really use the locale. */ case YESEXPR: return (char *) "^[yY]"; case NOEXPR: return (char *) "^[nN]"; default: return (char *) ""; } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/nl_langinfo-lock.c���������������������������������������������������0000644�0001750�0001750�00000010616�14557510505�015627� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the internal lock used by nl_langinfo. Copyright (C) 2019-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */ #include <config.h> /* The option '--disable-threads' explicitly requests no locking. */ /* When it is known that the gl_get_nl_langinfo_lock function is defined by a dependency library, it should not be defined here. */ #if AVOID_ANY_THREADS || OMIT_NL_LANGINFO_LOCK /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #else /* This file defines the internal lock used by nl_langinfo. It is a separate compilation unit, so that only one copy of it is present when linking statically. */ /* Prohibit renaming this symbol. */ # undef gl_get_nl_langinfo_lock /* Macro for exporting a symbol (function, not variable) defined in this file, when compiled into a shared library. */ # ifndef SHLIB_EXPORTED # if HAVE_VISIBILITY /* Override the effect of the compiler option '-fvisibility=hidden'. */ # define SHLIB_EXPORTED __attribute__((__visibility__("default"))) # elif defined _WIN32 || defined __CYGWIN__ # define SHLIB_EXPORTED __declspec(dllexport) # else # define SHLIB_EXPORTED # endif # endif # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-initguard.h" /* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', because the latter is not guaranteed to be a stable ABI in the future. */ /* Make sure the function gets exported from DLLs. */ SHLIB_EXPORTED CRITICAL_SECTION *gl_get_nl_langinfo_lock (void); static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; static CRITICAL_SECTION lock; /* Returns the internal lock used by nl_langinfo. */ CRITICAL_SECTION * gl_get_nl_langinfo_lock (void) { if (!guard.done) { if (InterlockedIncrement (&guard.started) == 0) { /* This thread is the first one to need the lock. Initialize it. */ InitializeCriticalSection (&lock); guard.done = 1; } else { /* Don't let guard.started grow and wrap around. */ InterlockedDecrement (&guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!guard.done) Sleep (0); } } return &lock; } # elif HAVE_PTHREAD_API # include <pthread.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Make sure the function gets exported from shared libraries. */ SHLIB_EXPORTED pthread_mutex_t *gl_get_nl_langinfo_lock (void); /* Returns the internal lock used by nl_langinfo. */ pthread_mutex_t * gl_get_nl_langinfo_lock (void) { return &mutex; } # elif HAVE_THREADS_H # include <threads.h> # include <stdlib.h> static int volatile init_needed = 1; static once_flag init_once = ONCE_FLAG_INIT; static mtx_t mutex; static void atomic_init (void) { if (mtx_init (&mutex, mtx_plain) != thrd_success) abort (); init_needed = 0; } /* Make sure the function gets exported from shared libraries. */ SHLIB_EXPORTED mtx_t *gl_get_nl_langinfo_lock (void); /* Returns the internal lock used by nl_langinfo. */ mtx_t * gl_get_nl_langinfo_lock (void) { if (init_needed) call_once (&init_once, atomic_init); return &mutex; } # endif # if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER /* Make sure the '__declspec(dllimport)' in nl_langinfo.c does not cause a link failure when no DLLs are involved. */ # if defined _WIN64 || defined _LP64 # define IMP(x) __imp_##x # else # define IMP(x) _imp__##x # endif void * IMP(gl_get_nl_langinfo_lock) = &gl_get_nl_langinfo_lock; # endif #endif ������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/nproc.c��������������������������������������������������������������0000644�0001750�0001750�00000026057�14557510505�013542� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Detect the number of processors. Copyright (C) 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Glen Lenker and Bruno Haible. */ #include <config.h> #include "nproc.h" #include <limits.h> #include <stdlib.h> #include <unistd.h> #if HAVE_PTHREAD_GETAFFINITY_NP && 0 # include <pthread.h> # include <sched.h> #endif #if HAVE_SCHED_GETAFFINITY_LIKE_GLIBC || HAVE_SCHED_GETAFFINITY_NP # include <sched.h> #endif #include <sys/types.h> #if HAVE_SYS_PSTAT_H # include <sys/pstat.h> #endif #if HAVE_SYS_SYSMP_H # include <sys/sysmp.h> #endif #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif #if HAVE_SYS_SYSCTL_H && !(defined __GLIBC__ && defined __linux__) # include <sys/sysctl.h> #endif #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif #include "c-ctype.h" #include "minmax.h" #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) /* Return the number of processors available to the current process, based on a modern system call that returns the "affinity" between the current process and each CPU. Return 0 if unknown or if such a system call does not exist. */ static unsigned long num_processors_via_affinity_mask (void) { /* glibc >= 2.3.3 with NPTL and NetBSD 5 have pthread_getaffinity_np, but with different APIs. Also it requires linking with -lpthread. Therefore this code is not enabled. glibc >= 2.3.4 has sched_getaffinity whereas NetBSD 5 has sched_getaffinity_np. */ #if HAVE_PTHREAD_GETAFFINITY_NP && defined __GLIBC__ && 0 { cpu_set_t set; if (pthread_getaffinity_np (pthread_self (), sizeof (set), &set) == 0) { unsigned long count; # ifdef CPU_COUNT /* glibc >= 2.6 has the CPU_COUNT macro. */ count = CPU_COUNT (&set); # else size_t i; count = 0; for (i = 0; i < CPU_SETSIZE; i++) if (CPU_ISSET (i, &set)) count++; # endif if (count > 0) return count; } } #elif HAVE_PTHREAD_GETAFFINITY_NP && defined __NetBSD__ && 0 { cpuset_t *set; set = cpuset_create (); if (set != NULL) { unsigned long count = 0; if (pthread_getaffinity_np (pthread_self (), cpuset_size (set), set) == 0) { cpuid_t i; for (i = 0;; i++) { int ret = cpuset_isset (i, set); if (ret < 0) break; if (ret > 0) count++; } } cpuset_destroy (set); if (count > 0) return count; } } #elif HAVE_SCHED_GETAFFINITY_LIKE_GLIBC /* glibc >= 2.3.4 */ { cpu_set_t set; if (sched_getaffinity (0, sizeof (set), &set) == 0) { unsigned long count; # ifdef CPU_COUNT /* glibc >= 2.6 has the CPU_COUNT macro. */ count = CPU_COUNT (&set); # else size_t i; count = 0; for (i = 0; i < CPU_SETSIZE; i++) if (CPU_ISSET (i, &set)) count++; # endif if (count > 0) return count; } } #elif HAVE_SCHED_GETAFFINITY_NP /* NetBSD >= 5 */ { cpuset_t *set; set = cpuset_create (); if (set != NULL) { unsigned long count = 0; if (sched_getaffinity_np (getpid (), cpuset_size (set), set) == 0) { cpuid_t i; for (i = 0;; i++) { int ret = cpuset_isset (i, set); if (ret < 0) break; if (ret > 0) count++; } } cpuset_destroy (set); if (count > 0) return count; } } #endif #if defined _WIN32 && ! defined __CYGWIN__ { /* This works on native Windows platforms. */ DWORD_PTR process_mask; DWORD_PTR system_mask; if (GetProcessAffinityMask (GetCurrentProcess (), &process_mask, &system_mask)) { DWORD_PTR mask = process_mask; unsigned long count = 0; for (; mask != 0; mask = mask >> 1) if (mask & 1) count++; if (count > 0) return count; } } #endif return 0; } /* Return the total number of processors. Here QUERY must be one of NPROC_ALL, NPROC_CURRENT. The result is guaranteed to be at least 1. */ static unsigned long int num_processors_ignoring_omp (enum nproc_query query) { /* On systems with a modern affinity mask system call, we have sysconf (_SC_NPROCESSORS_CONF) >= sysconf (_SC_NPROCESSORS_ONLN) >= num_processors_via_affinity_mask () The first number is the number of CPUs configured in the system. The second number is the number of CPUs available to the scheduler. The third number is the number of CPUs available to the current process. Note! On Linux systems with glibc, the first and second number come from the /sys and /proc file systems (see glibc/sysdeps/unix/sysv/linux/getsysstats.c). In some situations these file systems are not mounted, and the sysconf call returns 1 or 2 (<https://sourceware.org/bugzilla/show_bug.cgi?id=21542>), which does not reflect the reality. */ if (query == NPROC_CURRENT) { /* Try the modern affinity mask system call. */ { unsigned long nprocs = num_processors_via_affinity_mask (); if (nprocs > 0) return nprocs; } #if defined _SC_NPROCESSORS_ONLN { /* This works on glibc, Mac OS X 10.5, FreeBSD, AIX, OSF/1, Solaris, Cygwin, Haiku. */ long int nprocs = sysconf (_SC_NPROCESSORS_ONLN); if (nprocs > 0) return nprocs; } #endif } else /* query == NPROC_ALL */ { #if defined _SC_NPROCESSORS_CONF { /* This works on glibc, Mac OS X 10.5, FreeBSD, AIX, OSF/1, Solaris, Cygwin, Haiku. */ long int nprocs = sysconf (_SC_NPROCESSORS_CONF); # if __GLIBC__ >= 2 && defined __linux__ /* On Linux systems with glibc, this information comes from the /sys and /proc file systems (see glibc/sysdeps/unix/sysv/linux/getsysstats.c). In some situations these file systems are not mounted, and the sysconf call returns 1 or 2. But we wish to guarantee that num_processors (NPROC_ALL) >= num_processors (NPROC_CURRENT). */ if (nprocs == 1 || nprocs == 2) { unsigned long nprocs_current = num_processors_via_affinity_mask (); if (/* nprocs_current > 0 && */ nprocs_current > nprocs) nprocs = nprocs_current; } # endif if (nprocs > 0) return nprocs; } #endif } #if HAVE_PSTAT_GETDYNAMIC { /* This works on HP-UX. */ struct pst_dynamic psd; if (pstat_getdynamic (&psd, sizeof psd, 1, 0) >= 0) { /* The field psd_proc_cnt contains the number of active processors. In newer releases of HP-UX 11, the field psd_max_proc_cnt includes deactivated processors. */ if (query == NPROC_CURRENT) { if (psd.psd_proc_cnt > 0) return psd.psd_proc_cnt; } else { if (psd.psd_max_proc_cnt > 0) return psd.psd_max_proc_cnt; } } } #endif #if HAVE_SYSMP && defined MP_NAPROCS && defined MP_NPROCS { /* This works on IRIX. */ /* MP_NPROCS yields the number of installed processors. MP_NAPROCS yields the number of processors available to unprivileged processes. */ int nprocs = sysmp (query == NPROC_CURRENT && getuid () != 0 ? MP_NAPROCS : MP_NPROCS); if (nprocs > 0) return nprocs; } #endif /* Finally, as fallback, use the APIs that don't distinguish between NPROC_CURRENT and NPROC_ALL. */ #if HAVE_SYSCTL && !(defined __GLIBC__ && defined __linux__) && defined HW_NCPU { /* This works on macOS, FreeBSD, NetBSD, OpenBSD. macOS 10.14 does not allow mib to be const. */ int nprocs; size_t len = sizeof (nprocs); static int mib[][2] = { # ifdef HW_NCPUONLINE { CTL_HW, HW_NCPUONLINE }, # endif { CTL_HW, HW_NCPU } }; for (int i = 0; i < ARRAY_SIZE (mib); i++) { if (sysctl (mib[i], ARRAY_SIZE (mib[i]), &nprocs, &len, NULL, 0) == 0 && len == sizeof (nprocs) && 0 < nprocs) return nprocs; } } #endif #if defined _WIN32 && ! defined __CYGWIN__ { /* This works on native Windows platforms. */ SYSTEM_INFO system_info; GetSystemInfo (&system_info); if (0 < system_info.dwNumberOfProcessors) return system_info.dwNumberOfProcessors; } #endif return 1; } /* Parse OMP environment variables without dependence on OMP. Return 0 for invalid values. */ static unsigned long int parse_omp_threads (char const* threads) { unsigned long int ret = 0; if (threads == NULL) return ret; /* The OpenMP spec says that the value assigned to the environment variables "may have leading and trailing white space". */ while (*threads != '\0' && c_isspace (*threads)) threads++; /* Convert it from positive decimal to 'unsigned long'. */ if (c_isdigit (*threads)) { char *endptr = NULL; unsigned long int value = strtoul (threads, &endptr, 10); if (endptr != NULL) { while (*endptr != '\0' && c_isspace (*endptr)) endptr++; if (*endptr == '\0') return value; /* Also accept the first value in a nesting level, since we can't determine the nesting level from env vars. */ else if (*endptr == ',') return value; } } return ret; } unsigned long int num_processors (enum nproc_query query) { unsigned long int omp_env_limit = ULONG_MAX; if (query == NPROC_CURRENT_OVERRIDABLE) { unsigned long int omp_env_threads; /* Honor the OpenMP environment variables, recognized also by all programs that are based on OpenMP. */ omp_env_threads = parse_omp_threads (getenv ("OMP_NUM_THREADS")); omp_env_limit = parse_omp_threads (getenv ("OMP_THREAD_LIMIT")); if (! omp_env_limit) omp_env_limit = ULONG_MAX; if (omp_env_threads) return MIN (omp_env_threads, omp_env_limit); query = NPROC_CURRENT; } /* Here query is one of NPROC_ALL, NPROC_CURRENT. */ { unsigned long nprocs = num_processors_ignoring_omp (query); return MIN (nprocs, omp_env_limit); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/open.c���������������������������������������������������������������0000644�0001750�0001750�00000015460�14557510505�013356� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a descriptor to a file. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ /* If the user's config.h happens to include <fcntl.h>, let it include only the system's <fcntl.h> here, so that orig_open doesn't recurse to rpl_open. */ #define __need_system_fcntl_h #include <config.h> /* Get the original definition of open. It might be defined as a macro. */ #include <fcntl.h> #include <sys/types.h> #undef __need_system_fcntl_h static int orig_open (const char *filename, int flags, mode_t mode) { #if defined _WIN32 && !defined __CYGWIN__ return _open (filename, flags, mode); #else return open (filename, flags, mode); #endif } /* Specification. */ #ifdef __osf__ /* Write "fcntl.h" here, not <fcntl.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <fcntl.h> above. */ # include "fcntl.h" #else # include <fcntl.h> #endif #include "cloexec.h" #include <errno.h> #include <stdarg.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #ifndef REPLACE_OPEN_DIRECTORY # define REPLACE_OPEN_DIRECTORY 0 #endif int open (const char *filename, int flags, ...) { /* 0 = unknown, 1 = yes, -1 = no. */ #if GNULIB_defined_O_CLOEXEC int have_cloexec = -1; #else static int have_cloexec; #endif mode_t mode; int fd; mode = 0; if (flags & O_CREAT) { va_list arg; va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); } #if GNULIB_defined_O_NONBLOCK /* The only known platform that lacks O_NONBLOCK is mingw, but it also lacks named pipes and Unix sockets, which are the only two file types that require non-blocking handling in open(). Therefore, it is safe to ignore O_NONBLOCK here. It is handy that mingw also lacks openat(), so that is also covered here. */ flags &= ~O_NONBLOCK; #endif #if defined _WIN32 && ! defined __CYGWIN__ if (strcmp (filename, "/dev/null") == 0) filename = "NUL"; #endif #if OPEN_TRAILING_SLASH_BUG /* Fail if one of O_CREAT, O_WRONLY, O_RDWR is specified and the filename ends in a slash, as POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file already exists as a directory, then - if O_CREAT is specified, open() must fail because of the semantics of O_CREAT, - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html> says that it fails with errno = EISDIR in this case. If the named file does not exist or does not name a directory, then - if O_CREAT is specified, open() must fail since open() cannot create directories, - if O_WRONLY or O_RDWR is specified, open() must fail because the file does not contain a '.' directory. */ if ((flags & O_CREAT) || (flags & O_ACCMODE) == O_RDWR || (flags & O_ACCMODE) == O_WRONLY) { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { errno = EISDIR; return -1; } } #endif fd = orig_open (filename, flags & ~(have_cloexec < 0 ? O_CLOEXEC : 0), mode); if (flags & O_CLOEXEC) { if (! have_cloexec) { if (0 <= fd) have_cloexec = 1; else if (errno == EINVAL) { fd = orig_open (filename, flags & ~O_CLOEXEC, mode); have_cloexec = -1; } } if (have_cloexec < 0 && 0 <= fd) set_cloexec_flag (fd, true); } #if REPLACE_FCHDIR /* Implementing fchdir and fdopendir requires the ability to open a directory file descriptor. If open doesn't support that (as on mingw), we use a dummy file that behaves the same as directories on Linux (ie. always reports EOF on attempts to read()), and override fstat() in fchdir.c to hide the fact that we have a dummy. */ if (REPLACE_OPEN_DIRECTORY && fd < 0 && errno == EACCES && ((flags & O_ACCMODE) == O_RDONLY || (O_SEARCH != O_RDONLY && (flags & O_ACCMODE) == O_SEARCH))) { struct stat statbuf; if (stat (filename, &statbuf) == 0 && S_ISDIR (statbuf.st_mode)) { /* Maximum recursion depth of 1. */ fd = open ("/dev/null", flags, mode); if (0 <= fd) fd = _gl_register_fd (fd, filename); } else errno = EACCES; } #endif #if OPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and fd does not refer to a directory, then fail. Rationale: POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file without the slash is not a directory, open() must fail with ENOTDIR. */ if (fd >= 0) { /* We know len is positive, since open did not fail with ENOENT. */ size_t len = strlen (filename); if (filename[len - 1] == '/') { struct stat statbuf; if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) { close (fd); errno = ENOTDIR; return -1; } } } #endif #if REPLACE_FCHDIR if (!REPLACE_OPEN_DIRECTORY && 0 <= fd) fd = _gl_register_fd (fd, filename); #endif return fd; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/openat.c�������������������������������������������������������������0000644�0001750�0001750�00000022363�14557510505�013703� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a replacement openat function Copyright (C) 2004-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ /* If the user's config.h happens to include <fcntl.h>, let it include only the system's <fcntl.h> here, so that orig_openat doesn't recurse to rpl_openat. */ #define __need_system_fcntl_h #include <config.h> /* Get the original definition of open. It might be defined as a macro. */ #include <fcntl.h> #include <sys/types.h> #undef __need_system_fcntl_h #if HAVE_OPENAT static int orig_openat (int fd, char const *filename, int flags, mode_t mode) { return openat (fd, filename, flags, mode); } #endif #ifdef __osf__ /* Write "fcntl.h" here, not <fcntl.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <fcntl.h> above. */ # include "fcntl.h" #else # include <fcntl.h> #endif #include "openat.h" #include "cloexec.h" #include <stdarg.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <errno.h> #if HAVE_OPENAT /* Like openat, but support O_CLOEXEC and work around Solaris 9 bugs with trailing slash. */ int rpl_openat (int dfd, char const *filename, int flags, ...) { /* 0 = unknown, 1 = yes, -1 = no. */ #if GNULIB_defined_O_CLOEXEC int have_cloexec = -1; #else static int have_cloexec; #endif mode_t mode; int fd; mode = 0; if (flags & O_CREAT) { va_list arg; va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); } # if OPEN_TRAILING_SLASH_BUG /* Fail if one of O_CREAT, O_WRONLY, O_RDWR is specified and the filename ends in a slash, as POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file already exists as a directory, then - if O_CREAT is specified, open() must fail because of the semantics of O_CREAT, - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/openat.html> says that it fails with errno = EISDIR in this case. If the named file does not exist or does not name a directory, then - if O_CREAT is specified, open() must fail since open() cannot create directories, - if O_WRONLY or O_RDWR is specified, open() must fail because the file does not contain a '.' directory. */ if ((flags & O_CREAT) || (flags & O_ACCMODE) == O_RDWR || (flags & O_ACCMODE) == O_WRONLY) { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { errno = EISDIR; return -1; } } # endif fd = orig_openat (dfd, filename, flags & ~(have_cloexec < 0 ? O_CLOEXEC : 0), mode); if (flags & O_CLOEXEC) { if (! have_cloexec) { if (0 <= fd) have_cloexec = 1; else if (errno == EINVAL) { fd = orig_openat (dfd, filename, flags & ~O_CLOEXEC, mode); have_cloexec = -1; } } if (have_cloexec < 0 && 0 <= fd) set_cloexec_flag (fd, true); } # if OPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and fd does not refer to a directory, then fail. Rationale: POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file without the slash is not a directory, open() must fail with ENOTDIR. */ if (fd >= 0) { /* We know len is positive, since open did not fail with ENOENT. */ size_t len = strlen (filename); if (filename[len - 1] == '/') { struct stat statbuf; if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) { close (fd); errno = ENOTDIR; return -1; } } } # endif return fd; } #else /* !HAVE_OPENAT */ # include "filename.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ # include "openat-priv.h" # include "save-cwd.h" /* Replacement for Solaris' openat function. <https://www.google.com/search?q=openat+site:docs.oracle.com> First, try to simulate it via open ("/proc/self/fd/FD/FILE"). Failing that, simulate it by doing save_cwd/fchdir/open/restore_cwd. If either the save_cwd or the restore_cwd fails (relatively unlikely), then give a diagnostic and exit nonzero. Otherwise, upon failure, set errno and return -1, as openat does. Upon successful completion, return a file descriptor. */ int openat (int fd, char const *file, int flags, ...) { mode_t mode = 0; if (flags & O_CREAT) { va_list arg; va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); } return openat_permissive (fd, file, flags, mode, NULL); } /* Like openat (FD, FILE, FLAGS, MODE), but if CWD_ERRNO is nonnull, set *CWD_ERRNO to an errno value if unable to save or restore the initial working directory. This is needed only the first time remove.c's remove_dir opens a command-line directory argument. If a previous attempt to restore the current working directory failed, then we must not even try to access a '.'-relative name. It is the caller's responsibility not to call this function in that case. */ int openat_permissive (int fd, char const *file, int flags, mode_t mode, int *cwd_errno) { struct saved_cwd saved_cwd; int saved_errno; int err; bool save_ok; if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file)) return open (file, flags, mode); { char buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (buf, fd, file); if (proc_file) { int open_result = open (proc_file, flags, mode); int open_errno = errno; if (proc_file != buf) free (proc_file); /* If the syscall succeeds, or if it fails with an unexpected errno value, then return right away. Otherwise, fall through and resort to using save_cwd/restore_cwd. */ if (0 <= open_result || ! EXPECTED_ERRNO (open_errno)) { errno = open_errno; return open_result; } } } save_ok = (save_cwd (&saved_cwd) == 0); if (! save_ok) { if (! cwd_errno) openat_save_fail (errno); *cwd_errno = errno; } if (0 <= fd && fd == saved_cwd.desc) { /* If saving the working directory collides with the user's requested fd, then the user's fd must have been closed to begin with. */ free_cwd (&saved_cwd); errno = EBADF; return -1; } err = fchdir (fd); saved_errno = errno; if (! err) { err = open (file, flags, mode); saved_errno = errno; if (save_ok && restore_cwd (&saved_cwd) != 0) { if (! cwd_errno) { /* Don't write a message to just-created fd 2. */ saved_errno = errno; if (err == STDERR_FILENO) close (err); openat_restore_fail (saved_errno); } *cwd_errno = errno; } } free_cwd (&saved_cwd); errno = saved_errno; return err; } /* Return true if our openat implementation must resort to using save_cwd and restore_cwd. */ bool openat_needs_fchdir (void) { bool needs_fchdir = true; int fd = open ("/", O_SEARCH | O_CLOEXEC); if (0 <= fd) { char buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (buf, fd, "."); if (proc_file) { needs_fchdir = false; if (proc_file != buf) free (proc_file); } close (fd); } return needs_fchdir; } #endif /* !HAVE_OPENAT */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/openat-die.c���������������������������������������������������������0000644�0001750�0001750�00000003506�14557510505�014440� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report a save- or restore-cwd failure in our openat replacement and then exit. Copyright (C) 2005-2006, 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "openat.h" #include <stdlib.h> #ifndef GNULIB_LIBPOSIX # include <error.h> #endif #include "exitfail.h" #include "gettext.h" #define _(msgid) gettext (msgid) _Noreturn void openat_save_fail (int errnum) { #ifndef GNULIB_LIBPOSIX error (exit_failure, errnum, _("unable to record current working directory")); #endif /* _Noreturn cannot be applied to error, since it returns when its first argument is 0. To help compilers understand that this function does not return, call abort. Also, the abort is a safety feature if exit_failure is 0 (which shouldn't happen). */ abort (); } /* Exit with an error about failure to restore the working directory during an openat emulation. The caller must ensure that fd 2 is not a just-opened fd, even when openat_safer is not in use. */ _Noreturn void openat_restore_fail (int errnum) { #ifndef GNULIB_LIBPOSIX error (exit_failure, errnum, _("failed to return to initial working directory")); #endif /* As above. */ abort (); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/pipe.c���������������������������������������������������������������0000644�0001750�0001750�00000002536�14557510505�013352� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a pipe. Copyright (C) 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ /* Get _pipe(). */ # include <io.h> /* Get _O_BINARY. */ # include <fcntl.h> int pipe (int fd[2]) { /* Mingw changes fd to {-1,-1} on failure, but this violates http://austingroupbugs.net/view.php?id=467 */ int tmp[2]; int result = _pipe (tmp, 4096, _O_BINARY); if (!result) { fd[0] = tmp[0]; fd[1] = tmp[1]; } return result; } #else # error "This platform lacks a pipe function, and Gnulib doesn't provide a replacement. This is a bug in Gnulib." #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/rawmemchr.c����������������������������������������������������������0000644�0001750�0001750�00000012473�14557510505�014403� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching in a string. Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> /* A function definition is needed only if HAVE_RAWMEMCHR is not defined. */ #if !HAVE_RAWMEMCHR # include <limits.h> # include <stdint.h> /* Find the first occurrence of C in S. */ void * rawmemchr (const void *s, int c_in) { # ifdef __CHERI_PURE_CAPABILITY__ /* Most architectures let you read an aligned word, even if the unsigned char array at S ends in the middle of the word. However CHERI does not, so call memchr with the underlying object's remaining length. This cannot return NULL if S points to a C_IN-terminated array. Use builtins rather than including <cheri.h> which is less stable. */ return memchr (s, c_in, (__builtin_cheri_length_get (s) - __builtin_cheri_offset_get (s))); # else /* You can change this typedef to experiment with performance. */ typedef uintptr_t longword; /* Verify that the longword type lacks padding bits. */ static_assert (UINTPTR_WIDTH == UCHAR_WIDTH * sizeof (uintptr_t)); const unsigned char *char_ptr; unsigned char c = c_in; /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a natural longword boundary, as using alignof (longword) might be slower. */ for (char_ptr = (const unsigned char *) s; (uintptr_t) char_ptr % sizeof (longword) != 0; ++char_ptr) if (*char_ptr == c) return (void *) char_ptr; longword const *longword_ptr = s = char_ptr; /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ longword repeated_one = (longword) -1 / UCHAR_MAX; longword repeated_c = repeated_one * c; longword repeated_hibit = repeated_one * (UCHAR_MAX / 2 + 1); /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if any of the bytes in the longword in question are equal to c. We first use an xor with repeated_c. This reduces the task to testing whether any of the bytes in longword1 is zero. (The following comments assume 8-bit bytes, as POSIX requires; the code's use of UCHAR_MAX should work even if bytes have more than 8 bits.) We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one * 0x80). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. The test whether any byte in longword1 is zero is equivalent to testing whether tmp is nonzero. This test can read beyond the end of a string, depending on where C_IN is encountered. However, this is considered safe since the initialization phase ensured that the read will be aligned, therefore, the read will not cross page boundaries and will not cause a fault. */ while (1) { longword longword1 = *longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) & repeated_hibit) != 0) break; longword_ptr++; } char_ptr = s = longword_ptr; /* At this point, we know that one of the sizeof (longword) bytes starting at char_ptr is == c. If we knew endianness, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. However, the following simple and portable code does not attempt this potential optimization. */ while (*char_ptr != c) char_ptr++; return (void *) char_ptr; # endif } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/regex.c��������������������������������������������������������������0000644�0001750�0001750�00000006011�14557510505�013517� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #define __STDC_WANT_IEC_60559_BFP_EXT__ #ifndef _LIBC # include <libc-config.h> # if __GNUC_PREREQ (4, 6) # pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" # pragma GCC diagnostic ignored "-Wvla" # endif #endif /* Make sure no one compiles this code with a C++ compiler. */ #if defined __cplusplus && defined _LIBC # error "This is C code, use a C compiler" #endif #ifdef _LIBC /* We have to keep the namespace clean. */ # define regfree(preg) __regfree (preg) # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) # define regerror(errcode, preg, errbuf, errbuf_size) \ __regerror(errcode, preg, errbuf, errbuf_size) # define re_set_registers(bu, re, nu, st, en) \ __re_set_registers (bu, re, nu, st, en) # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) # define re_match(bufp, string, size, pos, regs) \ __re_match (bufp, string, size, pos, regs) # define re_search(bufp, string, size, startpos, range, regs) \ __re_search (bufp, string, size, startpos, range, regs) # define re_compile_pattern(pattern, length, bufp) \ __re_compile_pattern (pattern, length, bufp) # define re_set_syntax(syntax) __re_set_syntax (syntax) # define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) # include "../locale/localeinfo.h" #endif /* On some systems, limits.h sets RE_DUP_MAX to a lower value than GNU regex allows. Include it before <regex.h>, which correctly #undefs RE_DUP_MAX and sets it to the right value. */ #include <limits.h> #include <regex.h> #include "regex_internal.h" #include "regex_internal.c" #include "regcomp.c" #include "regexec.c" /* Binary backward compatibility. */ #if _LIBC # include <shlib-compat.h> # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3) link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.") int re_max_failures = 2000; # endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/save-cwd.c�����������������������������������������������������������0000644�0001750�0001750�00000005724�14557510505�014130� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* save-cwd.c -- Save and restore current working directory. Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> #include "save-cwd.h" #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include "chdir-long.h" #include "unistd--.h" #if GNULIB_FCNTL_SAFER # include "fcntl--.h" #else # define GNULIB_FCNTL_SAFER 0 #endif /* Record the location of the current working directory in CWD so that the program may change to other directories and later use restore_cwd to return to the recorded location. This function may allocate space using malloc (via getcwd) or leave a file descriptor open; use free_cwd to perform the necessary free or close. Upon failure, no memory is allocated, any locally opened file descriptors are closed; return non-zero -- in that case, free_cwd need not be called, but doing so is ok. Otherwise, return zero. The _raison d'etre_ for this interface is that the working directory is sometimes inaccessible, and getcwd is not robust or as efficient. So, we prefer to use the open/fchdir approach, but fall back on getcwd if necessary. This module works for most cases with just the getcwd-lgpl module, but to be truly robust, use the getcwd module. Some systems lack fchdir altogether: e.g., OS/2, pre-2001 Cygwin, SCO Xenix. Also, SunOS 4 and Irix 5.3 provide the function, yet it doesn't work for partitions on which auditing is enabled. If you're still using an obsolete system with these problems, please send email to the maintainer of this code. */ int save_cwd (struct saved_cwd *cwd) { cwd->name = NULL; cwd->desc = open (".", O_SEARCH | O_CLOEXEC); if (!GNULIB_FCNTL_SAFER) cwd->desc = fd_safer_flag (cwd->desc, O_CLOEXEC); if (cwd->desc < 0) { cwd->name = getcwd (NULL, 0); return cwd->name ? 0 : -1; } return 0; } /* Change to recorded location, CWD, in directory hierarchy. Upon failure, return -1 (errno is set by chdir or fchdir). Upon success, return zero. */ int restore_cwd (const struct saved_cwd *cwd) { if (0 <= cwd->desc) return fchdir (cwd->desc); else return chdir_long (cwd->name); } void free_cwd (struct saved_cwd *cwd) { if (cwd->desc >= 0) close (cwd->desc); free (cwd->name); } ��������������������������������������������gnuastro-0.22/bootstrapped/lib/secure_getenv.c������������������������������������������������������0000644�0001750�0001750�00000004017�14557510505�015247� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look up an environment variable, returning NULL in insecure situations. Copyright 2013-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #if !HAVE___SECURE_GETENV # if HAVE_ISSETUGID || (HAVE_GETUID && HAVE_GETEUID && HAVE_GETGID && HAVE_GETEGID) # include <unistd.h> # endif #endif char * secure_getenv (char const *name) { #if HAVE___SECURE_GETENV /* glibc */ return __secure_getenv (name); #elif HAVE_ISSETUGID /* musl, OS X, FreeBSD, NetBSD, OpenBSD, Solaris, Minix */ if (issetugid ()) return NULL; return getenv (name); #elif HAVE_GETUID && HAVE_GETEUID && HAVE_GETGID && HAVE_GETEGID /* other Unix */ if (geteuid () != getuid () || getegid () != getgid ()) return NULL; return getenv (name); #elif defined _WIN32 && ! defined __CYGWIN__ /* native Windows */ /* On native Windows, there is no such concept as setuid or setgid binaries. - Programs launched as system services have high privileges, but they don't inherit environment variables from a user. - Programs launched by a user with "Run as Administrator" have high privileges and use the environment variables, but the user has been asked whether he agrees. - Programs launched by a user without "Run as Administrator" cannot gain high privileges, therefore there is no risk. */ return getenv (name); #else return NULL; #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/select.c�������������������������������������������������������������0000644�0001750�0001750�00000040760�14557510505�013675� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulation for select(2) Contributed by Paolo Bonzini. Copyright 2008-2024 Free Software Foundation, Inc. This file is part of gnulib. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <sys/select.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows. */ #include <alloca.h> #include <assert.h> #include <sys/types.h> #include <errno.h> #include <limits.h> #include <winsock2.h> #include <windows.h> #include <io.h> #include <stdio.h> #include <conio.h> #include <time.h> /* Get the overridden 'struct timeval'. */ #include <sys/time.h> #if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" #else # include <io.h> #endif #undef select /* Don't assume that UNICODE is not defined. */ #undef GetModuleHandle #define GetModuleHandle GetModuleHandleA #undef PeekConsoleInput #define PeekConsoleInput PeekConsoleInputA #undef CreateEvent #define CreateEvent CreateEventA #undef PeekMessage #define PeekMessage PeekMessageA #undef DispatchMessage #define DispatchMessage DispatchMessageA /* Avoid warnings from gcc -Wcast-function-type. */ #define GetProcAddress \ (void *) GetProcAddress struct bitset { unsigned char in[FD_SETSIZE / CHAR_BIT]; unsigned char out[FD_SETSIZE / CHAR_BIT]; }; /* Declare data structures for ntdll functions. */ typedef struct _FILE_PIPE_LOCAL_INFORMATION { ULONG NamedPipeType; ULONG NamedPipeConfiguration; ULONG MaximumInstances; ULONG CurrentInstances; ULONG InboundQuota; ULONG ReadDataAvailable; ULONG OutboundQuota; ULONG WriteQuotaAvailable; ULONG NamedPipeState; ULONG NamedPipeEnd; } FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; typedef struct _IO_STATUS_BLOCK { union { DWORD Status; PVOID Pointer; } u; ULONG_PTR Information; } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; typedef enum _FILE_INFORMATION_CLASS { FilePipeLocalInformation = 24 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; typedef DWORD (WINAPI *PNtQueryInformationFile) (HANDLE, IO_STATUS_BLOCK *, VOID *, ULONG, FILE_INFORMATION_CLASS); #ifndef PIPE_BUF #define PIPE_BUF 512 #endif static BOOL IsConsoleHandle (HANDLE h) { DWORD mode; return GetConsoleMode (h, &mode) != 0; } static BOOL IsSocketHandle (HANDLE h) { WSANETWORKEVENTS ev; if (IsConsoleHandle (h)) return FALSE; /* Under Wine, it seems that getsockopt returns 0 for pipes too. WSAEnumNetworkEvents instead distinguishes the two correctly. */ ev.lNetworkEvents = 0xDEADBEEF; WSAEnumNetworkEvents ((SOCKET) h, NULL, &ev); return ev.lNetworkEvents != 0xDEADBEEF; } /* Compute output fd_sets for libc descriptor FD (whose Windows handle is H). */ static int windows_poll_handle (HANDLE h, int fd, struct bitset *rbits, struct bitset *wbits, struct bitset *xbits) { BOOL read, write, except; int i, ret; INPUT_RECORD *irbuffer; DWORD avail, nbuffer; BOOL bRet; IO_STATUS_BLOCK iosb; FILE_PIPE_LOCAL_INFORMATION fpli; static PNtQueryInformationFile NtQueryInformationFile; static BOOL once_only; read = write = except = FALSE; switch (GetFileType (h)) { case FILE_TYPE_DISK: read = TRUE; write = TRUE; break; case FILE_TYPE_PIPE: if (!once_only) { NtQueryInformationFile = (PNtQueryInformationFile) GetProcAddress (GetModuleHandle ("ntdll.dll"), "NtQueryInformationFile"); once_only = TRUE; } if (PeekNamedPipe (h, NULL, 0, NULL, &avail, NULL) != 0) { if (avail) read = TRUE; } else if (GetLastError () == ERROR_BROKEN_PIPE) ; else { /* It was the write-end of the pipe. Check if it is writable. If NtQueryInformationFile fails, optimistically assume the pipe is writable. This could happen on Windows 9x, where NtQueryInformationFile is not available, or if we inherit a pipe that doesn't permit FILE_READ_ATTRIBUTES access on the write end (I think this should not happen since Windows XP SP2; WINE seems fine too). Otherwise, ensure that enough space is available for atomic writes. */ memset (&iosb, 0, sizeof (iosb)); memset (&fpli, 0, sizeof (fpli)); if (!NtQueryInformationFile || NtQueryInformationFile (h, &iosb, &fpli, sizeof (fpli), FilePipeLocalInformation) || fpli.WriteQuotaAvailable >= PIPE_BUF || (fpli.OutboundQuota < PIPE_BUF && fpli.WriteQuotaAvailable == fpli.OutboundQuota)) write = TRUE; } break; case FILE_TYPE_CHAR: write = TRUE; if (!(rbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) break; ret = WaitForSingleObject (h, 0); if (ret == WAIT_OBJECT_0) { if (!IsConsoleHandle (h)) { read = TRUE; break; } nbuffer = avail = 0; bRet = GetNumberOfConsoleInputEvents (h, &nbuffer); /* Screen buffers handles are filtered earlier. */ assert (bRet); if (nbuffer == 0) { except = TRUE; break; } irbuffer = (INPUT_RECORD *) alloca (nbuffer * sizeof (INPUT_RECORD)); bRet = PeekConsoleInput (h, irbuffer, nbuffer, &avail); if (!bRet || avail == 0) { except = TRUE; break; } for (i = 0; i < avail; i++) if (irbuffer[i].EventType == KEY_EVENT) read = TRUE; } break; default: ret = WaitForSingleObject (h, 0); write = TRUE; if (ret == WAIT_OBJECT_0) read = TRUE; break; } ret = 0; if (read && (rbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) { rbits->out[fd / CHAR_BIT] |= (1 << (fd & (CHAR_BIT - 1))); ret++; } if (write && (wbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) { wbits->out[fd / CHAR_BIT] |= (1 << (fd & (CHAR_BIT - 1))); ret++; } if (except && (xbits->in[fd / CHAR_BIT] & (1 << (fd & (CHAR_BIT - 1))))) { xbits->out[fd / CHAR_BIT] |= (1 << (fd & (CHAR_BIT - 1))); ret++; } return ret; } int rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds, struct timeval *timeout) #undef timeval { static struct timeval tv0; static HANDLE hEvent; HANDLE h, handle_array[FD_SETSIZE + 2]; fd_set handle_rfds, handle_wfds, handle_xfds; struct bitset rbits, wbits, xbits; unsigned char anyfds_in[FD_SETSIZE / CHAR_BIT]; DWORD ret, wait_timeout, nhandles, nsock, nbuffer; MSG msg; int i, fd, rc; clock_t tend; if (nfds < 0 || nfds > FD_SETSIZE) { errno = EINVAL; return -1; } if (!timeout) wait_timeout = INFINITE; else { wait_timeout = timeout->tv_sec * 1000 + timeout->tv_usec / 1000; /* select is also used as a portable usleep. */ if (!rfds && !wfds && !xfds) { Sleep (wait_timeout); return 0; } } if (!hEvent) hEvent = CreateEvent (NULL, FALSE, FALSE, NULL); handle_array[0] = hEvent; nhandles = 1; nsock = 0; /* Copy descriptors to bitsets. At the same time, eliminate bits in the "wrong" direction for console input buffers and screen buffers, because screen buffers are waitable and they will block until a character is available. */ memset (&rbits, 0, sizeof (rbits)); memset (&wbits, 0, sizeof (wbits)); memset (&xbits, 0, sizeof (xbits)); memset (anyfds_in, 0, sizeof (anyfds_in)); if (rfds) for (i = 0; i < rfds->fd_count; i++) { fd = rfds->fd_array[i]; h = (HANDLE) _get_osfhandle (fd); if (IsConsoleHandle (h) && !GetNumberOfConsoleInputEvents (h, &nbuffer)) continue; rbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); } else rfds = (fd_set *) alloca (sizeof (fd_set)); if (wfds) for (i = 0; i < wfds->fd_count; i++) { fd = wfds->fd_array[i]; h = (HANDLE) _get_osfhandle (fd); if (IsConsoleHandle (h) && GetNumberOfConsoleInputEvents (h, &nbuffer)) continue; wbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); } else wfds = (fd_set *) alloca (sizeof (fd_set)); if (xfds) for (i = 0; i < xfds->fd_count; i++) { fd = xfds->fd_array[i]; xbits.in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); anyfds_in[fd / CHAR_BIT] |= 1 << (fd & (CHAR_BIT - 1)); } else xfds = (fd_set *) alloca (sizeof (fd_set)); /* Zero all the fd_sets, including the application's. */ FD_ZERO (rfds); FD_ZERO (wfds); FD_ZERO (xfds); FD_ZERO (&handle_rfds); FD_ZERO (&handle_wfds); FD_ZERO (&handle_xfds); /* Classify handles. Create fd sets for sockets, poll the others. */ for (i = 0; i < nfds; i++) { if ((anyfds_in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) == 0) continue; h = (HANDLE) _get_osfhandle (i); if (!h) { errno = EBADF; return -1; } if (IsSocketHandle (h)) { int requested = FD_CLOSE; /* See above; socket handles are mapped onto select, but we need to map descriptors to handles. */ if (rbits.in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) { requested |= FD_READ | FD_ACCEPT; FD_SET ((SOCKET) h, rfds); FD_SET ((SOCKET) h, &handle_rfds); } if (wbits.in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) { requested |= FD_WRITE | FD_CONNECT; FD_SET ((SOCKET) h, wfds); FD_SET ((SOCKET) h, &handle_wfds); } if (xbits.in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) { requested |= FD_OOB; FD_SET ((SOCKET) h, xfds); FD_SET ((SOCKET) h, &handle_xfds); } WSAEventSelect ((SOCKET) h, hEvent, requested); nsock++; } else { handle_array[nhandles++] = h; /* Poll now. If we get an event, do not wait below. */ if (wait_timeout != 0 && windows_poll_handle (h, i, &rbits, &wbits, &xbits)) wait_timeout = 0; } } /* Place a sentinel at the end of the array. */ handle_array[nhandles] = NULL; /* When will the waiting period expire? */ if (wait_timeout != INFINITE) tend = clock () + wait_timeout; restart: if (wait_timeout == 0 || nsock == 0) rc = 0; else { /* See if we need to wait in the loop below. If any select is ready, do MsgWaitForMultipleObjects anyway to dispatch messages, but no need to call select again. */ rc = select (0, &handle_rfds, &handle_wfds, &handle_xfds, &tv0); if (rc == 0) { /* Restore the fd_sets for the other select we do below. */ memcpy (&handle_rfds, rfds, sizeof (fd_set)); memcpy (&handle_wfds, wfds, sizeof (fd_set)); memcpy (&handle_xfds, xfds, sizeof (fd_set)); } else wait_timeout = 0; } /* How much is left to wait? */ if (wait_timeout != INFINITE) { clock_t tnow = clock (); if (tend >= tnow) wait_timeout = tend - tnow; else wait_timeout = 0; } for (;;) { ret = MsgWaitForMultipleObjects (nhandles, handle_array, FALSE, wait_timeout, QS_ALLINPUT); if (ret == WAIT_OBJECT_0 + nhandles) { /* new input of some other kind */ BOOL bRet; while ((bRet = PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) != 0) { TranslateMessage (&msg); DispatchMessage (&msg); } } else break; } /* If we haven't done it yet, check the status of the sockets. */ if (rc == 0 && nsock > 0) rc = select (0, &handle_rfds, &handle_wfds, &handle_xfds, &tv0); if (nhandles > 1) { /* Count results that are not counted in the return value of select. */ nhandles = 1; for (i = 0; i < nfds; i++) { if ((anyfds_in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) == 0) continue; h = (HANDLE) _get_osfhandle (i); if (h == handle_array[nhandles]) { /* Not a socket. */ nhandles++; windows_poll_handle (h, i, &rbits, &wbits, &xbits); if (rbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1))) || wbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1))) || xbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) rc++; } } if (rc == 0 && (wait_timeout == INFINITE /* If NHANDLES > 1, but no bits are set, it means we've been told incorrectly that some handle was signaled. This happens with anonymous pipes, which always cause MsgWaitForMultipleObjects to exit immediately, but no data is found ready to be read by windows_poll_handle. To avoid a total failure (whereby we return zero and don't wait at all), let's poll in a more busy loop. */ || (wait_timeout != 0 && nhandles > 1))) { /* Sleep 1 millisecond to avoid busy wait and retry with the original fd_sets. */ memcpy (&handle_rfds, rfds, sizeof (fd_set)); memcpy (&handle_wfds, wfds, sizeof (fd_set)); memcpy (&handle_xfds, xfds, sizeof (fd_set)); SleepEx (1, TRUE); goto restart; } if (timeout && wait_timeout == 0 && rc == 0) timeout->tv_sec = timeout->tv_usec = 0; } /* Now fill in the results. */ FD_ZERO (rfds); FD_ZERO (wfds); FD_ZERO (xfds); nhandles = 1; for (i = 0; i < nfds; i++) { if ((anyfds_in[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) == 0) continue; h = (HANDLE) _get_osfhandle (i); if (h != handle_array[nhandles]) { /* Perform handle->descriptor mapping. */ SOCKET s = (SOCKET) h; WSAEventSelect (s, NULL, 0); if (FD_ISSET (s, &handle_rfds)) FD_SET (i, rfds); if (FD_ISSET (s, &handle_wfds)) FD_SET (i, wfds); if (FD_ISSET (s, &handle_xfds)) FD_SET (i, xfds); } else { /* Not a socket. */ nhandles++; if (rbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) FD_SET (i, rfds); if (wbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) FD_SET (i, wfds); if (xbits.out[i / CHAR_BIT] & (1 << (i & (CHAR_BIT - 1)))) FD_SET (i, xfds); } } return rc; } #else /* ! Native Windows. */ #include <stddef.h> /* NULL */ #include <errno.h> #include <unistd.h> #undef select int rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds, struct timeval *timeout) { int i; /* FreeBSD 8.2 has a bug: it does not always detect invalid fds. */ if (nfds < 0 || nfds > FD_SETSIZE) { errno = EINVAL; return -1; } for (i = 0; i < nfds; i++) { if (((rfds && FD_ISSET (i, rfds)) || (wfds && FD_ISSET (i, wfds)) || (xfds && FD_ISSET (i, xfds))) && dup2 (i, i) != i) return -1; } /* Interix 3.5 has a bug: it does not support nfds == 0. */ if (nfds == 0) { nfds = 1; rfds = NULL; wfds = NULL; xfds = NULL; } return select (nfds, rfds, wfds, xfds, timeout); } #endif ����������������gnuastro-0.22/bootstrapped/lib/setlocale_null.c�����������������������������������������������������0000644�0001750�0001750�00000025642�14557510505�015425� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query the name of the current global locale. Copyright (C) 2019-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* Specification. */ #include "setlocale_null.h" #include <errno.h> #include <locale.h> #include <stdlib.h> #include <string.h> #if defined _WIN32 && !defined __CYGWIN__ # include <wchar.h> #endif #if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE) # if AVOID_ANY_THREADS /* The option '--disable-threads' explicitly requests no locking. */ # elif defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif #endif /* Use the system's setlocale() function, not the gnulib override, here. */ #undef setlocale static const char * setlocale_null_androidfix (int category) { const char *result = setlocale (category, NULL); #ifdef __ANDROID__ if (result == NULL) switch (category) { case LC_CTYPE: case LC_NUMERIC: case LC_TIME: case LC_COLLATE: case LC_MONETARY: case LC_MESSAGES: case LC_ALL: case LC_PAPER: case LC_NAME: case LC_ADDRESS: case LC_TELEPHONE: case LC_MEASUREMENT: result = "C"; break; default: break; } #endif return result; } static int setlocale_null_unlocked (int category, char *buf, size_t bufsize) { #if defined _WIN32 && !defined __CYGWIN__ && defined _MSC_VER /* On native Windows, nowadays, the setlocale() implementation is based on _wsetlocale() and uses malloc() for the result. We are better off using _wsetlocale() directly. */ const wchar_t *result = _wsetlocale (category, NULL); if (result == NULL) { /* CATEGORY is invalid. */ if (bufsize > 0) /* Return an empty string in BUF. This is a convenience for callers that don't want to write explicit code for handling EINVAL. */ buf[0] = '\0'; return EINVAL; } else { size_t length = wcslen (result); if (length < bufsize) { size_t i; /* Convert wchar_t[] -> char[], assuming plain ASCII. */ for (i = 0; i <= length; i++) buf[i] = result[i]; return 0; } else { if (bufsize > 0) { /* Return a truncated result in BUF. This is a convenience for callers that don't want to write explicit code for handling ERANGE. */ size_t i; /* Convert wchar_t[] -> char[], assuming plain ASCII. */ for (i = 0; i < bufsize; i++) buf[i] = result[i]; buf[bufsize - 1] = '\0'; } return ERANGE; } } #else const char *result = setlocale_null_androidfix (category); if (result == NULL) { /* CATEGORY is invalid. */ if (bufsize > 0) /* Return an empty string in BUF. This is a convenience for callers that don't want to write explicit code for handling EINVAL. */ buf[0] = '\0'; return EINVAL; } else { size_t length = strlen (result); if (length < bufsize) { memcpy (buf, result, length + 1); return 0; } else { if (bufsize > 0) { /* Return a truncated result in BUF. This is a convenience for callers that don't want to write explicit code for handling ERANGE. */ memcpy (buf, result, bufsize - 1); buf[bufsize - 1] = '\0'; } return ERANGE; } } #endif } #if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE) /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin < 3.4.6 */ /* Use a lock, so that no two threads can invoke setlocale_null_unlocked at the same time. */ /* Prohibit renaming this symbol. */ # undef gl_get_setlocale_null_lock # if AVOID_ANY_THREADS /* The option '--disable-threads' explicitly requests no locking. */ # define setlocale_null_with_lock setlocale_null_unlocked # elif defined _WIN32 && !defined __CYGWIN__ extern __declspec(dllimport) CRITICAL_SECTION *gl_get_setlocale_null_lock (void); static int setlocale_null_with_lock (int category, char *buf, size_t bufsize) { CRITICAL_SECTION *lock = gl_get_setlocale_null_lock (); int ret; EnterCriticalSection (lock); ret = setlocale_null_unlocked (category, buf, bufsize); LeaveCriticalSection (lock); return ret; } # elif HAVE_PTHREAD_API /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin < 3.4.6 */ extern # if defined _WIN32 || defined __CYGWIN__ __declspec(dllimport) # endif pthread_mutex_t *gl_get_setlocale_null_lock (void); # if HAVE_WEAK_SYMBOLS /* musl libc, FreeBSD, NetBSD, OpenBSD, Haiku */ /* Avoid the need to link with '-lpthread'. */ # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock /* Determine whether libpthread is in use. */ # pragma weak pthread_mutexattr_gettype /* See the comments in lock.h. */ # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # else # define pthread_in_use() 1 # endif static int setlocale_null_with_lock (int category, char *buf, size_t bufsize) { if (pthread_in_use()) { pthread_mutex_t *lock = gl_get_setlocale_null_lock (); int ret; if (pthread_mutex_lock (lock)) abort (); ret = setlocale_null_unlocked (category, buf, bufsize); if (pthread_mutex_unlock (lock)) abort (); return ret; } else return setlocale_null_unlocked (category, buf, bufsize); } # elif HAVE_THREADS_H extern mtx_t *gl_get_setlocale_null_lock (void); static int setlocale_null_with_lock (int category, char *buf, size_t bufsize) { mtx_t *lock = gl_get_setlocale_null_lock (); int ret; if (mtx_lock (lock) != thrd_success) abort (); ret = setlocale_null_unlocked (category, buf, bufsize); if (mtx_unlock (lock) != thrd_success) abort (); return ret; } # endif #endif int setlocale_null_r (int category, char *buf, size_t bufsize) { #if SETLOCALE_NULL_ALL_MTSAFE # if SETLOCALE_NULL_ONE_MTSAFE return setlocale_null_unlocked (category, buf, bufsize); # else if (category == LC_ALL) return setlocale_null_unlocked (category, buf, bufsize); else return setlocale_null_with_lock (category, buf, bufsize); # endif #else # if SETLOCALE_NULL_ONE_MTSAFE if (category == LC_ALL) return setlocale_null_with_lock (category, buf, bufsize); else return setlocale_null_unlocked (category, buf, bufsize); # else return setlocale_null_with_lock (category, buf, bufsize); # endif #endif } const char * setlocale_null (int category) { #if SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE return setlocale_null_androidfix (category); #else /* This call must be multithread-safe. To achieve this without using thread-local storage: 1. We use a specific static buffer for each possible CATEGORY argument. So that different threads can call setlocale_mtsafe with different CATEGORY arguments, without interfering. 2. We use a simple strcpy or memcpy to fill this static buffer. Filling it through, for example, strcpy + strcat would not be guaranteed to leave the buffer's contents intact if another thread is currently accessing it. If necessary, the contents is first assembled in a stack-allocated buffer. */ if (category == LC_ALL) { # if SETLOCALE_NULL_ALL_MTSAFE return setlocale_null_androidfix (LC_ALL); # else char buf[SETLOCALE_NULL_ALL_MAX]; static char resultbuf[SETLOCALE_NULL_ALL_MAX]; if (setlocale_null_r (LC_ALL, buf, sizeof (buf))) return "C"; strcpy (resultbuf, buf); return resultbuf; # endif } else { # if SETLOCALE_NULL_ONE_MTSAFE return setlocale_null_androidfix (category); # else enum { LC_CTYPE_INDEX, LC_NUMERIC_INDEX, LC_TIME_INDEX, LC_COLLATE_INDEX, LC_MONETARY_INDEX, LC_MESSAGES_INDEX, # ifdef LC_PAPER LC_PAPER_INDEX, # endif # ifdef LC_NAME LC_NAME_INDEX, # endif # ifdef LC_ADDRESS LC_ADDRESS_INDEX, # endif # ifdef LC_TELEPHONE LC_TELEPHONE_INDEX, # endif # ifdef LC_MEASUREMENT LC_MEASUREMENT_INDEX, # endif # ifdef LC_IDENTIFICATION LC_IDENTIFICATION_INDEX, # endif LC_INDICES_COUNT } i; char buf[SETLOCALE_NULL_MAX]; static char resultbuf[LC_INDICES_COUNT][SETLOCALE_NULL_MAX]; int err; err = setlocale_null_r (category, buf, sizeof (buf)); if (err == EINVAL) return NULL; if (err) return "C"; switch (category) { case LC_CTYPE: i = LC_CTYPE_INDEX; break; case LC_NUMERIC: i = LC_NUMERIC_INDEX; break; case LC_TIME: i = LC_TIME_INDEX; break; case LC_COLLATE: i = LC_COLLATE_INDEX; break; case LC_MONETARY: i = LC_MONETARY_INDEX; break; case LC_MESSAGES: i = LC_MESSAGES_INDEX; break; # ifdef LC_PAPER case LC_PAPER: i = LC_PAPER_INDEX; break; # endif # ifdef LC_NAME case LC_NAME: i = LC_NAME_INDEX; break; # endif # ifdef LC_ADDRESS case LC_ADDRESS: i = LC_ADDRESS_INDEX; break; # endif # ifdef LC_TELEPHONE case LC_TELEPHONE: i = LC_TELEPHONE_INDEX; break; # endif # ifdef LC_MEASUREMENT case LC_MEASUREMENT: i = LC_MEASUREMENT_INDEX; break; # endif # ifdef LC_IDENTIFICATION case LC_IDENTIFICATION: i = LC_IDENTIFICATION_INDEX; break; # endif default: /* If you get here, a #ifdef LC_xxx is missing. */ abort (); } strcpy (resultbuf[i], buf); return resultbuf[i]; # endif } #endif } ����������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/setlocale-lock.c�����������������������������������������������������0000644�0001750�0001750�00000010701�14557510505�015307� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the internal lock used by setlocale_null_r. Copyright (C) 2019-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* The option '--disable-threads' explicitly requests no locking. */ /* When it is known that the gl_get_setlocale_null_lock function is defined by a dependency library, it should not be defined here. */ #if AVOID_ANY_THREADS || OMIT_SETLOCALE_LOCK /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #else /* This file defines the internal lock used by setlocale_null_r. It is a separate compilation unit, so that only one copy of it is present when linking statically. */ /* Prohibit renaming this symbol. */ # undef gl_get_setlocale_null_lock /* Macro for exporting a symbol (function, not variable) defined in this file, when compiled into a shared library. */ # ifndef SHLIB_EXPORTED # if HAVE_VISIBILITY /* Override the effect of the compiler option '-fvisibility=hidden'. */ # define SHLIB_EXPORTED __attribute__((__visibility__("default"))) # elif defined _WIN32 || defined __CYGWIN__ # define SHLIB_EXPORTED __declspec(dllexport) # else # define SHLIB_EXPORTED # endif # endif # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-initguard.h" /* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', because the latter is not guaranteed to be a stable ABI in the future. */ /* Make sure the function gets exported from DLLs. */ SHLIB_EXPORTED CRITICAL_SECTION *gl_get_setlocale_null_lock (void); static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; static CRITICAL_SECTION lock; /* Returns the internal lock used by setlocale_null_r. */ CRITICAL_SECTION * gl_get_setlocale_null_lock (void) { if (!guard.done) { if (InterlockedIncrement (&guard.started) == 0) { /* This thread is the first one to need the lock. Initialize it. */ InitializeCriticalSection (&lock); guard.done = 1; } else { /* Don't let guard.started grow and wrap around. */ InterlockedDecrement (&guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!guard.done) Sleep (0); } } return &lock; } # elif HAVE_PTHREAD_API # include <pthread.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Make sure the function gets exported from shared libraries. */ SHLIB_EXPORTED pthread_mutex_t *gl_get_setlocale_null_lock (void); /* Returns the internal lock used by setlocale_null_r. */ pthread_mutex_t * gl_get_setlocale_null_lock (void) { return &mutex; } # elif HAVE_THREADS_H # include <threads.h> # include <stdlib.h> static int volatile init_needed = 1; static once_flag init_once = ONCE_FLAG_INIT; static mtx_t mutex; static void atomic_init (void) { if (mtx_init (&mutex, mtx_plain) != thrd_success) abort (); init_needed = 0; } /* Make sure the function gets exported from shared libraries. */ SHLIB_EXPORTED mtx_t *gl_get_setlocale_null_lock (void); /* Returns the internal lock used by setlocale_null_r. */ mtx_t * gl_get_setlocale_null_lock (void) { if (init_needed) call_once (&init_once, atomic_init); return &mutex; } # endif # if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER /* Make sure the '__declspec(dllimport)' in setlocale_null.c does not cause a link failure when no DLLs are involved. */ # if defined _WIN64 || defined _LP64 # define IMP(x) __imp_##x # else # define IMP(x) _imp__##x # endif void * IMP(gl_get_setlocale_null_lock) = &gl_get_setlocale_null_lock; # endif #endif ���������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/signbitf.c�����������������������������������������������������������0000644�0001750�0001750�00000004121�14557510505�014212� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* signbit() macro: Determine the sign bit of a floating-point number. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> #include <string.h> #include "isnanf-nolibm.h" #include "float+.h" #ifdef gl_signbitf_OPTIMIZED_MACRO # undef gl_signbitf #endif int gl_signbitf (float arg) { #if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT /* The use of a union to extract the bits of the representation of a 'long double' is safe in practice, despite of the "aliasing rules" of C99, because the GCC docs say "Even with '-fstrict-aliasing', type-punning is allowed, provided the memory is accessed through the union type." and similarly for other compilers. */ # define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { float value; unsigned int word[NWORDS]; } m; m.value = arg; return (m.word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; #elif HAVE_COPYSIGNF_IN_LIBC return copysignf (1.0f, arg) < 0; #else /* This does not do the right thing for NaN, but this is irrelevant for most use cases. */ if (isnanf (arg)) return 0; if (arg < 0.0f) return 1; else if (arg == 0.0f) { /* Distinguish 0.0f and -0.0f. */ static float plus_zero = 0.0f; float arg_mem = arg; return (memcmp (&plus_zero, &arg_mem, SIZEOF_FLT) != 0); } else return 0; #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/signbitd.c�����������������������������������������������������������0000644�0001750�0001750�00000004110�14557510505�014206� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* signbit() macro: Determine the sign bit of a floating-point number. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> #include <string.h> #include "isnand-nolibm.h" #include "float+.h" #ifdef gl_signbitd_OPTIMIZED_MACRO # undef gl_signbitd #endif int gl_signbitd (double arg) { #if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT /* The use of a union to extract the bits of the representation of a 'long double' is safe in practice, despite of the "aliasing rules" of C99, because the GCC docs say "Even with '-fstrict-aliasing', type-punning is allowed, provided the memory is accessed through the union type." and similarly for other compilers. */ # define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { double value; unsigned int word[NWORDS]; } m; m.value = arg; return (m.word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; #elif HAVE_COPYSIGN_IN_LIBC return copysign (1.0, arg) < 0; #else /* This does not do the right thing for NaN, but this is irrelevant for most use cases. */ if (isnand (arg)) return 0; if (arg < 0.0) return 1; else if (arg == 0.0) { /* Distinguish 0.0 and -0.0. */ static double plus_zero = 0.0; double arg_mem = arg; return (memcmp (&plus_zero, &arg_mem, SIZEOF_DBL) != 0); } else return 0; #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/signbitl.c�����������������������������������������������������������0000644�0001750�0001750�00000004164�14557510505�014227� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* signbit() macro: Determine the sign bit of a floating-point number. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> #include <string.h> #include "isnanl-nolibm.h" #include "float+.h" #ifdef gl_signbitl_OPTIMIZED_MACRO # undef gl_signbitl #endif int gl_signbitl (long double arg) { #if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT /* The use of a union to extract the bits of the representation of a 'long double' is safe in practice, despite of the "aliasing rules" of C99, because the GCC docs say "Even with '-fstrict-aliasing', type-punning is allowed, provided the memory is accessed through the union type." and similarly for other compilers. */ # define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { long double value; unsigned int word[NWORDS]; } m; m.value = arg; return (m.word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; #elif HAVE_COPYSIGNL_IN_LIBC return copysignl (1.0L, arg) < 0; #else /* This does not do the right thing for NaN, but this is irrelevant for most use cases. */ if (isnanl (arg)) return 0; if (arg < 0.0L) return 1; else if (arg == 0.0L) { /* Distinguish 0.0L and -0.0L. */ static long double plus_zero = 0.0L; long double arg_mem = arg; return (memcmp (&plus_zero, &arg_mem, SIZEOF_LDBL) != 0); } else return 0; #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/size_max.h�����������������������������������������������������������0000644�0001750�0001750�00000002434�14557510505�014236� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* size_max.h -- declare SIZE_MAX through system headers Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. Written by Simon Josefsson. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef GNULIB_SIZE_MAX_H #define GNULIB_SIZE_MAX_H /* This file uses HAVE_STDINT_H. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ # include <limits.h> /* Get SIZE_MAX declaration on systems like glibc 2. */ # if HAVE_STDINT_H # include <stdint.h> # endif /* On systems where these include files don't define it, SIZE_MAX is defined in config.h. */ #endif /* GNULIB_SIZE_MAX_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/sleep.c��������������������������������������������������������������0000644�0001750�0001750�00000004364�14557510505�013526� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Pausing execution of the current thread. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <limits.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> unsigned int sleep (unsigned int seconds) { unsigned int remaining; /* Sleep for 1 second many times, because 1. Sleep is not interruptible by Ctrl-C, 2. we want to avoid arithmetic overflow while multiplying with 1000. */ for (remaining = seconds; remaining > 0; remaining--) Sleep (1000); return remaining; } #elif HAVE_SLEEP # undef sleep /* Guarantee unlimited sleep and a reasonable return value. Cygwin 1.5.x rejects attempts to sleep more than 49.7 days (2**32 milliseconds), but uses uninitialized memory which results in a garbage answer. Similarly, Linux 2.6.9 with glibc 2.3.4 has a too small return value when asked to sleep more than 24.85 days. */ unsigned int rpl_sleep (unsigned int seconds) { /* This requires int larger than 16 bits. */ static_assert (UINT_MAX / 24 / 24 / 60 / 60); const unsigned int limit = 24 * 24 * 60 * 60; while (limit < seconds) { unsigned int result; seconds -= limit; result = sleep (limit); if (result) return seconds + result; } return sleep (seconds); } #else /* !HAVE_SLEEP */ #error "Please port gnulib sleep.c to your platform, possibly using usleep() or select(), then report this to bug-gnulib." #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/sockets.h������������������������������������������������������������0000644�0001750�0001750�00000003363�14557510505�014074� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sockets.h - wrappers for Windows socket functions Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson */ #ifndef SOCKETS_H #define SOCKETS_H 1 /* This file uses _GL_ATTRIBUTE_CONST. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #define SOCKETS_1_0 0x0001 #define SOCKETS_1_1 0x0101 #define SOCKETS_2_0 0x0002 #define SOCKETS_2_1 0x0102 #define SOCKETS_2_2 0x0202 int gl_sockets_startup (int version) #ifndef WINDOWS_SOCKETS _GL_ATTRIBUTE_CONST #endif ; int gl_sockets_cleanup (void) #ifndef WINDOWS_SOCKETS _GL_ATTRIBUTE_CONST #endif ; /* This function is useful it you create a socket using gnulib's Winsock wrappers but needs to pass on the socket handle to some other library that only accepts sockets. */ #ifdef WINDOWS_SOCKETS # include <sys/socket.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif static inline SOCKET gl_fd_to_handle (int fd) { return _get_osfhandle (fd); } #else # define gl_fd_to_handle(x) (x) #endif /* WINDOWS_SOCKETS */ #endif /* SOCKETS_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/sockets.c������������������������������������������������������������0000644�0001750�0001750�00000010212�14557510505�014056� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* sockets.c --- wrappers for Windows socket functions Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson */ #include <config.h> /* Specification. */ #include "sockets.h" #if WINDOWS_SOCKETS /* This includes winsock2.h on MinGW. */ # include <sys/socket.h> # include "fd-hook.h" # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Get set_winsock_errno, FD_TO_SOCKET etc. */ # include "w32sock.h" static int close_fd_maybe_socket (const struct fd_hook *remaining_list, gl_close_fn primary, int fd) { /* Note about multithread-safety: There is a race condition where, between our calls to closesocket() and the primary close(), some other thread could make system calls that allocate precisely the same HANDLE value as sock; then the primary close() would call CloseHandle() on it. */ SOCKET sock; WSANETWORKEVENTS ev; /* Test whether fd refers to a socket. */ sock = FD_TO_SOCKET (fd); ev.lNetworkEvents = 0xDEADBEEF; WSAEnumNetworkEvents (sock, NULL, &ev); if (ev.lNetworkEvents != 0xDEADBEEF) { /* fd refers to a socket. */ /* FIXME: other applications, like squid, use an undocumented _free_osfhnd free function. But this is not enough: The 'osfile' flags for fd also needs to be cleared, but it is hard to access it. Instead, here we just close twice the file descriptor. */ if (closesocket (sock)) { set_winsock_errno (); return -1; } else { /* This call frees the file descriptor and does a CloseHandle ((HANDLE) _get_osfhandle (fd)), which fails. */ _close (fd); return 0; } } else /* Some other type of file descriptor. */ return execute_close_hooks (remaining_list, primary, fd); } static int ioctl_fd_maybe_socket (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg) { SOCKET sock; WSANETWORKEVENTS ev; /* Test whether fd refers to a socket. */ sock = FD_TO_SOCKET (fd); ev.lNetworkEvents = 0xDEADBEEF; WSAEnumNetworkEvents (sock, NULL, &ev); if (ev.lNetworkEvents != 0xDEADBEEF) { /* fd refers to a socket. */ if (ioctlsocket (sock, request, arg) < 0) { set_winsock_errno (); return -1; } else return 0; } else /* Some other type of file descriptor. */ return execute_ioctl_hooks (remaining_list, primary, fd, request, arg); } static struct fd_hook fd_sockets_hook; static int initialized_sockets_version /* = 0 */; #endif /* WINDOWS_SOCKETS */ int gl_sockets_startup (_GL_UNUSED int version) { #if WINDOWS_SOCKETS if (version > initialized_sockets_version) { WSADATA data; int err; err = WSAStartup (version, &data); if (err != 0) return 1; if (data.wVersion != version) { WSACleanup (); return 2; } if (initialized_sockets_version == 0) register_fd_hook (close_fd_maybe_socket, ioctl_fd_maybe_socket, &fd_sockets_hook); initialized_sockets_version = version; } #endif return 0; } int gl_sockets_cleanup (void) { #if WINDOWS_SOCKETS int err; initialized_sockets_version = 0; unregister_fd_hook (&fd_sockets_hook); err = WSACleanup (); if (err != 0) return 1; #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/stat.c���������������������������������������������������������������0000644�0001750�0001750�00000032714�14557510505�013371� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around platform bugs in stat. Copyright (C) 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake and Bruno Haible. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_stat doesn't recurse to rpl_stat. */ #define __need_system_sys_stat_h #include <config.h> /* Get the original definition of stat. It might be defined as a macro. */ #include <sys/types.h> #include <sys/stat.h> #undef __need_system_sys_stat_h #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #if !defined WINDOWS_NATIVE static int orig_stat (const char *filename, struct stat *buf) { return stat (filename, buf); } #endif /* Specification. */ #ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" #else # include <sys/stat.h> #endif #include "stat-time.h" #include <errno.h> #include <limits.h> #include <string.h> #include "filename.h" #include "malloca.h" #ifdef WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> # include "stat-w32.h" /* Don't assume that UNICODE is not defined. */ # undef WIN32_FIND_DATA # define WIN32_FIND_DATA WIN32_FIND_DATAA # undef CreateFile # define CreateFile CreateFileA # undef FindFirstFile # define FindFirstFile FindFirstFileA #endif #ifdef WINDOWS_NATIVE /* Return TRUE if the given file name denotes an UNC root. */ static BOOL is_unc_root (const char *rname) { /* Test whether it has the syntax '\\server\share'. */ if (ISSLASH (rname[0]) && ISSLASH (rname[1])) { /* It starts with two slashes. Find the next slash. */ const char *p = rname + 2; const char *q = p; while (*q != '\0' && !ISSLASH (*q)) q++; if (q > p && *q != '\0') { /* Found the next slash at q. */ q++; const char *r = q; while (*r != '\0' && !ISSLASH (*r)) r++; if (r > q && *r == '\0') return TRUE; } } return FALSE; } #endif /* Store information about NAME into ST. Work around bugs with trailing slashes. Mingw has other bugs (such as st_ino always being 0 on success) which this wrapper does not work around. But at least this implementation provides the ability to emulate fchdir correctly. */ int rpl_stat (char const *name, struct stat *buf) { #ifdef WINDOWS_NATIVE /* Fill the fields ourselves, because the original stat function returns values for st_atime, st_mtime, st_ctime that depend on the current time zone. See <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */ /* XXX Should we convert to wchar_t* and prepend '\\?\', in order to work around length limitations <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file> ? */ /* POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13> specifies: "More than two leading <slash> characters shall be treated as a single <slash> character." */ if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2])) { name += 2; while (ISSLASH (name[1])) name++; } size_t len = strlen (name); size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0); /* Remove trailing slashes (except the very first one, at position drive_prefix_len), but remember their presence. */ size_t rlen; bool check_dir = false; rlen = len; while (rlen > drive_prefix_len && ISSLASH (name[rlen-1])) { check_dir = true; if (rlen == drive_prefix_len + 1) break; rlen--; } /* Handle '' and 'C:'. */ if (!check_dir && rlen == drive_prefix_len) { errno = ENOENT; return -1; } /* Handle '\\'. */ if (rlen == 1 && ISSLASH (name[0]) && len >= 2) { errno = ENOENT; return -1; } const char *rname; char *malloca_rname; if (rlen == len) { rname = name; malloca_rname = NULL; } else { malloca_rname = malloca (rlen + 1); if (malloca_rname == NULL) { errno = ENOMEM; return -1; } memcpy (malloca_rname, name, rlen); malloca_rname[rlen] = '\0'; rname = malloca_rname; } /* There are two ways to get at the requested information: - by scanning the parent directory and examining the relevant directory entry, - by opening the file directly. The first approach fails for root directories (e.g. 'C:\') and UNC root directories (e.g. '\\server\share'). The second approach fails for some system files (e.g. 'C:\pagefile.sys' and 'C:\hiberfil.sys'): ERROR_SHARING_VIOLATION. The second approach gives more information (in particular, correct st_dev, st_ino, st_nlink fields). So we use the second approach and, as a fallback except for root and UNC root directories, also the first approach. */ { int ret; { /* Approach based on the file. */ /* Open a handle to the file. CreateFile <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea> <https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files> */ HANDLE h = CreateFile (rname, FILE_READ_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only in case as different) makes sense only when applied to *all* filesystem operations. */ FILE_FLAG_BACKUP_SEMANTICS /* | FILE_FLAG_POSIX_SEMANTICS */, NULL); if (h != INVALID_HANDLE_VALUE) { ret = _gl_fstat_by_handle (h, rname, buf); CloseHandle (h); goto done; } } /* Test for root and UNC root directories. */ if ((rlen == drive_prefix_len + 1 && ISSLASH (rname[drive_prefix_len])) || is_unc_root (rname)) goto failed; /* Fallback. */ { /* Approach based on the directory entry. */ if (strchr (rname, '?') != NULL || strchr (rname, '*') != NULL) { /* Other Windows API functions would fail with error ERROR_INVALID_NAME. */ if (malloca_rname != NULL) freea (malloca_rname); errno = ENOENT; return -1; } /* Get the details about the directory entry. This can be done through FindFirstFile <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfilea> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa> or through FindFirstFileEx with argument FindExInfoBasic <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfileexa> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ne-minwinbase-findex_info_levels> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa> */ WIN32_FIND_DATA info; HANDLE h = FindFirstFile (rname, &info); if (h == INVALID_HANDLE_VALUE) goto failed; /* Test for error conditions before starting to fill *buf. */ if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) { FindClose (h); if (malloca_rname != NULL) freea (malloca_rname); errno = EOVERFLOW; return -1; } # if _GL_WINDOWS_STAT_INODES buf->st_dev = 0; # if _GL_WINDOWS_STAT_INODES == 2 buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; # else /* _GL_WINDOWS_STAT_INODES == 1 */ buf->st_ino = 0; # endif # else /* st_ino is not wide enough for identifying a file on a device. Without st_ino, st_dev is pointless. */ buf->st_dev = 0; buf->st_ino = 0; # endif /* st_mode. */ unsigned int mode = /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) | S_IREAD_UGO | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { /* Determine whether the file is executable by looking at the file name suffix. */ if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) { const char *last_dot = NULL; const char *p; for (p = info.cFileName; *p != '\0'; p++) if (*p == '.') last_dot = p; if (last_dot != NULL) { const char *suffix = last_dot + 1; if (_stricmp (suffix, "exe") == 0 || _stricmp (suffix, "bat") == 0 || _stricmp (suffix, "cmd") == 0 || _stricmp (suffix, "com") == 0) mode |= S_IEXEC_UGO; } } } buf->st_mode = mode; /* st_nlink. Ignore hard links here. */ buf->st_nlink = 1; /* There's no easy way to map the Windows SID concept to an integer. */ buf->st_uid = 0; buf->st_gid = 0; /* st_rdev is irrelevant for normal files and directories. */ buf->st_rdev = 0; /* st_size. */ if (sizeof (buf->st_size) <= 4) /* Range check already done above. */ buf->st_size = info.nFileSizeLow; else buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; /* st_atime, st_mtime, st_ctime. */ # if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); # else buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); # endif FindClose (h); ret = 0; } done: if (ret >= 0 && check_dir && !S_ISDIR (buf->st_mode)) { errno = ENOTDIR; ret = -1; } if (malloca_rname != NULL) { int saved_errno = errno; freea (malloca_rname); errno = saved_errno; } return ret; } failed: { DWORD error = GetLastError (); #if 0 fprintf (stderr, "rpl_stat error 0x%x\n", (unsigned int) error); #endif if (malloca_rname != NULL) freea (malloca_rname); switch (error) { /* Some of these errors probably cannot happen with the specific flags that we pass to CreateFile. But who knows... */ case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */ case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */ case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */ case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */ case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */ case ERROR_DIRECTORY: errno = ENOENT; break; case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */ case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys' (second approach only). */ /* XXX map to EACCES or EPERM? */ errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_PROTECT: errno = EROFS; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; case ERROR_BUFFER_OVERFLOW: case ERROR_FILENAME_EXCED_RANGE: errno = ENAMETOOLONG; break; case ERROR_DELETE_PENDING: /* XXX map to EACCES or EPERM? */ errno = EPERM; break; default: errno = EINVAL; break; } return -1; } #else int result = orig_stat (name, buf); if (result == 0) { # if REPLACE_FUNC_STAT_FILE /* Solaris 9 mistakenly succeeds when given a non-directory with a trailing slash. */ if (!S_ISDIR (buf->st_mode)) { size_t len = strlen (name); if (ISSLASH (name[len - 1])) { errno = ENOTDIR; return -1; } } # endif /* REPLACE_FUNC_STAT_FILE */ result = stat_time_normalize (result, buf); } return result; #endif } ����������������������������������������������������gnuastro-0.22/bootstrapped/lib/stat-time.c����������������������������������������������������������0000644�0001750�0001750�00000001520�14557510505�014314� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stat-related time functions. Copyright (C) 2012-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE #include "stat-time.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/stdio-read.c���������������������������������������������������������0000644�0001750�0001750�00000013614�14557510505�014447� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible FILE stream read function. Copyright (C) 2008-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Replace these functions only if module 'nonblocking' is requested. */ #if GNULIB_NONBLOCKING /* On native Windows platforms, when read() is called on a non-blocking pipe with an empty buffer, ReadFile() fails with error GetLastError() = ERROR_NO_DATA, and read() in consequence fails with error EINVAL. This read() function is at the basis of the function which fills the buffer of a FILE stream. */ # if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Don't assume that UNICODE is not defined. */ # undef GetNamedPipeHandleState # define GetNamedPipeHandleState GetNamedPipeHandleStateA # define CALL_WITH_ERRNO_FIX(RETTYPE, EXPRESSION, FAILED) \ if (ferror (stream)) \ return (EXPRESSION); \ else \ { \ RETTYPE ret; \ SetLastError (0); \ ret = (EXPRESSION); \ if (FAILED) \ { \ if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \ { \ int fd = fileno (stream); \ if (fd >= 0) \ { \ HANDLE h = (HANDLE) _get_osfhandle (fd); \ if (GetFileType (h) == FILE_TYPE_PIPE) \ { \ /* h is a pipe or socket. */ \ DWORD state; \ if (GetNamedPipeHandleState (h, &state, NULL, NULL, \ NULL, NULL, 0) \ && (state & PIPE_NOWAIT) != 0) \ /* h is a pipe in non-blocking mode. \ Change errno from EINVAL to EAGAIN. */ \ errno = EAGAIN; \ } \ } \ } \ } \ return ret; \ } /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_SCANF int scanf (const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfscanf (stdin, format, args); va_end (args); return retval; } # endif /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_FSCANF int fscanf (FILE *stream, const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfscanf (stream, format, args); va_end (args); return retval; } # endif /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_VSCANF int vscanf (const char *format, va_list args) { return vfscanf (stdin, format, args); } # endif /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_VFSCANF int vfscanf (FILE *stream, const char *format, va_list args) #undef vfscanf { CALL_WITH_ERRNO_FIX (int, vfscanf (stream, format, args), ret == EOF) } # endif int getchar (void) { return fgetc (stdin); } int fgetc (FILE *stream) #undef fgetc { CALL_WITH_ERRNO_FIX (int, fgetc (stream), ret == EOF) } char * fgets (char *s, int n, FILE *stream) #undef fgets { CALL_WITH_ERRNO_FIX (char *, fgets (s, n, stream), ret == NULL) } /* We intentionally don't bother to fix gets. */ size_t fread (void *ptr, size_t s, size_t n, FILE *stream) #undef fread { CALL_WITH_ERRNO_FIX (size_t, fread (ptr, s, n, stream), ret < n) } # endif #endif ��������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/stdio-write.c��������������������������������������������������������0000644�0001750�0001750�00000016706�14557510505�014673� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible FILE stream write function. Copyright (C) 2008-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Replace these functions only if module 'nonblocking' or module 'sigpipe' is requested. */ #if GNULIB_NONBLOCKING || GNULIB_SIGPIPE /* On native Windows platforms, SIGPIPE does not exist. When write() is called on a pipe with no readers, WriteFile() fails with error GetLastError() = ERROR_NO_DATA, and write() in consequence fails with error EINVAL. This write() function is at the basis of the function which flushes the buffer of a FILE stream. */ # if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <signal.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Don't assume that UNICODE is not defined. */ # undef GetNamedPipeHandleState # define GetNamedPipeHandleState GetNamedPipeHandleStateA # if GNULIB_NONBLOCKING # define CLEAR_ERRNO \ errno = 0; # define HANDLE_ENOSPC \ if (errno == ENOSPC && ferror (stream)) \ { \ int fd = fileno (stream); \ if (fd >= 0) \ { \ HANDLE h = (HANDLE) _get_osfhandle (fd); \ if (GetFileType (h) == FILE_TYPE_PIPE) \ { \ /* h is a pipe or socket. */ \ DWORD state; \ if (GetNamedPipeHandleState (h, &state, NULL, NULL, \ NULL, NULL, 0) \ && (state & PIPE_NOWAIT) != 0) \ /* h is a pipe in non-blocking mode. \ Change errno from ENOSPC to EAGAIN. */ \ errno = EAGAIN; \ } \ } \ } \ else # else # define CLEAR_ERRNO # define HANDLE_ENOSPC # endif # if GNULIB_SIGPIPE # define CLEAR_LastError \ SetLastError (0); # define HANDLE_ERROR_NO_DATA \ if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \ { \ int fd = fileno (stream); \ if (fd >= 0 \ && GetFileType ((HANDLE) _get_osfhandle (fd)) \ == FILE_TYPE_PIPE) \ { \ /* Try to raise signal SIGPIPE. */ \ raise (SIGPIPE); \ /* If it is currently blocked or ignored, change errno from \ EINVAL to EPIPE. */ \ errno = EPIPE; \ } \ } \ else # else # define CLEAR_LastError # define HANDLE_ERROR_NO_DATA # endif # define CALL_WITH_SIGPIPE_EMULATION(RETTYPE, EXPRESSION, FAILED) \ if (ferror (stream)) \ return (EXPRESSION); \ else \ { \ RETTYPE ret; \ CLEAR_ERRNO \ CLEAR_LastError \ ret = (EXPRESSION); \ if (FAILED) \ { \ HANDLE_ENOSPC \ HANDLE_ERROR_NO_DATA \ ; \ } \ return ret; \ } # if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */ int printf (const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfprintf (stdout, format, args); va_end (args); return retval; } # endif # if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */ int fprintf (FILE *stream, const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfprintf (stream, format, args); va_end (args); return retval; } # endif # if !REPLACE_VPRINTF_POSIX /* avoid collision with vprintf.c */ int vprintf (const char *format, va_list args) { return vfprintf (stdout, format, args); } # endif # if !REPLACE_VFPRINTF_POSIX /* avoid collision with vfprintf.c */ int vfprintf (FILE *stream, const char *format, va_list args) #undef vfprintf { CALL_WITH_SIGPIPE_EMULATION (int, vfprintf (stream, format, args), ret == EOF) } # endif int putchar (int c) { return fputc (c, stdout); } int fputc (int c, FILE *stream) #undef fputc { CALL_WITH_SIGPIPE_EMULATION (int, fputc (c, stream), ret == EOF) } int fputs (const char *string, FILE *stream) #undef fputs { CALL_WITH_SIGPIPE_EMULATION (int, fputs (string, stream), ret == EOF) } int puts (const char *string) #undef puts { FILE *stream = stdout; CALL_WITH_SIGPIPE_EMULATION (int, puts (string), ret == EOF) } size_t fwrite (const void *ptr, size_t s, size_t n, FILE *stream) #undef fwrite { CALL_WITH_SIGPIPE_EMULATION (size_t, fwrite (ptr, s, n, stream), ret < n) } # endif #endif ����������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strcasecmp.c���������������������������������������������������������0000644�0001750�0001750�00000003357�14557510505�014563� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison function. Copyright (C) 1998-1999, 2005-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <ctype.h> #include <limits.h> /* Compare strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function does not work with multibyte strings! */ int strcasecmp (const char *s1, const char *s2) { const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2) return 0; do { c1 = tolower (*p1); c2 = tolower (*p2); if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strncasecmp.c��������������������������������������������������������0000644�0001750�0001750�00000003507�14557510505�014736� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strncasecmp.c -- case insensitive string comparator Copyright (C) 1998-1999, 2005-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <ctype.h> #include <limits.h> /* Compare no more than N bytes of strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function cannot work correctly in multibyte locales. */ int strncasecmp (const char *s1, const char *s2, size_t n) { register const unsigned char *p1 = (const unsigned char *) s1; register const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2 || n == 0) return 0; do { c1 = tolower (*p1); c2 = tolower (*p2); if (--n == 0 || c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strchrnul.c����������������������������������������������������������0000644�0001750�0001750�00000013037�14557510505�014437� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching in a string. Copyright (C) 2003, 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> /* Find the first occurrence of C in S or the final NUL byte. */ char * strchrnul (const char *s, int c_in) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned char c; c = (unsigned char) c_in; if (!c) return rawmemchr (s, 0); /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; (size_t) char_ptr % sizeof (longword) != 0; ++char_ptr) if (!*char_ptr || *char_ptr == c) return (char *) char_ptr; longword_ptr = (const longword *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to NUL or c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 or longword2 is zero. Let's consider longword1. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. The test whether any byte in longword1 or longword2 is zero is equivalent to testing whether tmp1 is nonzero or tmp2 is nonzero. We can combine this into a single test, whether (tmp1 | tmp2) is nonzero. This test can read more than one byte beyond the end of a string, depending on where the terminating NUL is encountered. However, this is considered safe since the initialization phase ensured that the read will be aligned, therefore, the read will not cross page boundaries and will not cause a fault. */ while (1) { longword longword1 = *longword_ptr ^ repeated_c; longword longword2 = *longword_ptr; if (((((longword1 - repeated_one) & ~longword1) | ((longword2 - repeated_one) & ~longword2)) & (repeated_one << 7)) != 0) break; longword_ptr++; } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that one of the sizeof (longword) bytes starting at char_ptr is == 0 or == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ char_ptr = (unsigned char *) longword_ptr; while (*char_ptr && (*char_ptr != c)) char_ptr++; return (char *) char_ptr; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strdup.c�������������������������������������������������������������0000644�0001750�0001750�00000002532�14557510505�013732� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> #endif /* Get specification. */ #include <string.h> #include <stdlib.h> #undef __strdup #ifdef _LIBC # undef strdup #endif #ifndef weak_alias # define __strdup strdup #endif /* Duplicate S, returning an identical malloc'd string. */ char * __strdup (const char *s) { size_t len = strlen (s) + 1; void *new = malloc (len); if (new == NULL) return NULL; return (char *) memcpy (new, s, len); } #ifdef libc_hidden_def libc_hidden_def (__strdup) #endif #ifdef weak_alias weak_alias (__strdup, strdup) #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strerror.c�����������������������������������������������������������0000644�0001750�0001750�00000004057�14557510505�014277� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror.c --- POSIX compatible system error routine Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "intprops.h" #include "strerror-override.h" /* Use the system functions, not the gnulib overrides in this file. */ #undef sprintf char * strerror (int n) #undef strerror { static char buf[STACKBUF_LEN]; size_t len; /* Cast away const, due to the historical signature of strerror; callers should not be modifying the string. */ const char *msg = strerror_override (n); if (msg) return (char *) msg; msg = strerror (n); /* Our strerror_r implementation might use the system's strerror buffer, so all other clients of strerror have to see the error copied into a buffer that we manage. This is not thread-safe, even if the system strerror is, but portable programs shouldn't be using strerror if they care about thread-safety. */ if (!msg || !*msg) { static char const fmt[] = "Unknown error %d"; static_assert (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); sprintf (buf, fmt, n); errno = EINVAL; return buf; } /* Fix STACKBUF_LEN if this ever aborts. */ len = strlen (msg); if (sizeof buf <= len) abort (); memcpy (buf, msg, len + 1); return buf; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strerror-override.c��������������������������������������������������0000644�0001750�0001750�00000021646�14557510505�016117� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror-override.c --- POSIX compatible system error routine Copyright (C) 2010-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2010. */ #include <config.h> #include "strerror-override.h" #include <errno.h> #if GNULIB_defined_EWINSOCK /* native Windows platforms */ # if HAVE_WINSOCK2_H # include <winsock2.h> # endif #endif #if !GNULIB_defined_strerror_override_macro /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ const char * strerror_override (int errnum) { /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ switch (errnum) { # if REPLACE_STRERROR_0 case 0: return "Success"; # endif # if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */ case EINPROGRESS: return "Operation now in progress"; case EALREADY: return "Operation already in progress"; case ENOTSOCK: return "Socket operation on non-socket"; case EDESTADDRREQ: return "Destination address required"; case EMSGSIZE: return "Message too long"; case EPROTOTYPE: return "Protocol wrong type for socket"; case ENOPROTOOPT: return "Protocol not available"; case EPROTONOSUPPORT: return "Protocol not supported"; case EOPNOTSUPP: return "Operation not supported"; case EAFNOSUPPORT: return "Address family not supported by protocol"; case EADDRINUSE: return "Address already in use"; case EADDRNOTAVAIL: return "Cannot assign requested address"; case ENETDOWN: return "Network is down"; case ENETUNREACH: return "Network is unreachable"; case ECONNRESET: return "Connection reset by peer"; case ENOBUFS: return "No buffer space available"; case EISCONN: return "Transport endpoint is already connected"; case ENOTCONN: return "Transport endpoint is not connected"; case ETIMEDOUT: return "Connection timed out"; case ECONNREFUSED: return "Connection refused"; case ELOOP: return "Too many levels of symbolic links"; case EHOSTUNREACH: return "No route to host"; case EWOULDBLOCK: return "Operation would block"; # endif # if GNULIB_defined_ESTREAMS /* native Windows platforms with older <errno.h> */ case ETXTBSY: return "Text file busy"; case ENODATA: return "No data available"; case ENOSR: return "Out of streams resources"; case ENOSTR: return "Device not a stream"; case ETIME: return "Timer expired"; case EOTHER: return "Other error"; # endif # if GNULIB_defined_EWINSOCK /* native Windows platforms */ case ESOCKTNOSUPPORT: return "Socket type not supported"; case EPFNOSUPPORT: return "Protocol family not supported"; case ESHUTDOWN: return "Cannot send after transport endpoint shutdown"; case ETOOMANYREFS: return "Too many references: cannot splice"; case EHOSTDOWN: return "Host is down"; case EPROCLIM: return "Too many processes"; case EUSERS: return "Too many users"; case EDQUOT: return "Disk quota exceeded"; case ESTALE: return "Stale NFS file handle"; case EREMOTE: return "Object is remote"; # if HAVE_WINSOCK2_H /* WSA_INVALID_HANDLE maps to EBADF */ /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ /* WSA_INVALID_PARAMETER maps to EINVAL */ case WSA_OPERATION_ABORTED: return "Overlapped operation aborted"; case WSA_IO_INCOMPLETE: return "Overlapped I/O event object not in signaled state"; case WSA_IO_PENDING: return "Overlapped operations will complete later"; /* WSAEINTR maps to EINTR */ /* WSAEBADF maps to EBADF */ /* WSAEACCES maps to EACCES */ /* WSAEFAULT maps to EFAULT */ /* WSAEINVAL maps to EINVAL */ /* WSAEMFILE maps to EMFILE */ /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ /* WSAEINPROGRESS maps to EINPROGRESS */ /* WSAEALREADY maps to EALREADY */ /* WSAENOTSOCK maps to ENOTSOCK */ /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ /* WSAEMSGSIZE maps to EMSGSIZE */ /* WSAEPROTOTYPE maps to EPROTOTYPE */ /* WSAENOPROTOOPT maps to ENOPROTOOPT */ /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ /* WSAEADDRINUSE maps to EADDRINUSE */ /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ /* WSAENETDOWN maps to ENETDOWN */ /* WSAENETUNREACH maps to ENETUNREACH */ /* WSAENETRESET maps to ENETRESET */ /* WSAECONNABORTED maps to ECONNABORTED */ /* WSAECONNRESET maps to ECONNRESET */ /* WSAENOBUFS maps to ENOBUFS */ /* WSAEISCONN maps to EISCONN */ /* WSAENOTCONN maps to ENOTCONN */ /* WSAESHUTDOWN is ESHUTDOWN */ /* WSAETOOMANYREFS is ETOOMANYREFS */ /* WSAETIMEDOUT maps to ETIMEDOUT */ /* WSAECONNREFUSED maps to ECONNREFUSED */ /* WSAELOOP maps to ELOOP */ /* WSAENAMETOOLONG maps to ENAMETOOLONG */ /* WSAEHOSTDOWN is EHOSTDOWN */ /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ /* WSAENOTEMPTY maps to ENOTEMPTY */ /* WSAEPROCLIM is EPROCLIM */ /* WSAEUSERS is EUSERS */ /* WSAEDQUOT is EDQUOT */ /* WSAESTALE is ESTALE */ /* WSAEREMOTE is EREMOTE */ case WSASYSNOTREADY: return "Network subsystem is unavailable"; case WSAVERNOTSUPPORTED: return "Winsock.dll version out of range"; case WSANOTINITIALISED: return "Successful WSAStartup not yet performed"; case WSAEDISCON: return "Graceful shutdown in progress"; case WSAENOMORE: case WSA_E_NO_MORE: return "No more results"; case WSAECANCELLED: case WSA_E_CANCELLED: return "Call was canceled"; case WSAEINVALIDPROCTABLE: return "Procedure call table is invalid"; case WSAEINVALIDPROVIDER: return "Service provider is invalid"; case WSAEPROVIDERFAILEDINIT: return "Service provider failed to initialize"; case WSASYSCALLFAILURE: return "System call failure"; case WSASERVICE_NOT_FOUND: return "Service not found"; case WSATYPE_NOT_FOUND: return "Class type not found"; case WSAEREFUSED: return "Database query was refused"; case WSAHOST_NOT_FOUND: return "Host not found"; case WSATRY_AGAIN: return "Nonauthoritative host not found"; case WSANO_RECOVERY: return "Nonrecoverable error"; case WSANO_DATA: return "Valid name, no data record of requested type"; /* WSA_QOS_* omitted */ # endif # endif # if GNULIB_defined_ENOMSG case ENOMSG: return "No message of desired type"; # endif # if GNULIB_defined_EIDRM case EIDRM: return "Identifier removed"; # endif # if GNULIB_defined_ENOLINK case ENOLINK: return "Link has been severed"; # endif # if GNULIB_defined_EPROTO case EPROTO: return "Protocol error"; # endif # if GNULIB_defined_EMULTIHOP case EMULTIHOP: return "Multihop attempted"; # endif # if GNULIB_defined_EBADMSG case EBADMSG: return "Bad message"; # endif # if GNULIB_defined_EOVERFLOW case EOVERFLOW: return "Value too large for defined data type"; # endif # if GNULIB_defined_ENOTSUP case ENOTSUP: return "Not supported"; # endif # if GNULIB_defined_ENETRESET case ENETRESET: return "Network dropped connection on reset"; # endif # if GNULIB_defined_ECONNABORTED case ECONNABORTED: return "Software caused connection abort"; # endif # if GNULIB_defined_ESTALE case ESTALE: return "Stale NFS file handle"; # endif # if GNULIB_defined_EDQUOT case EDQUOT: return "Disk quota exceeded"; # endif # if GNULIB_defined_ECANCELED case ECANCELED: return "Operation canceled"; # endif # if GNULIB_defined_EOWNERDEAD case EOWNERDEAD: return "Owner died"; # endif # if GNULIB_defined_ENOTRECOVERABLE case ENOTRECOVERABLE: return "State not recoverable"; # endif # if GNULIB_defined_EILSEQ case EILSEQ: return "Invalid or incomplete multibyte or wide character"; # endif default: return NULL; } } #endif ������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strndup.c������������������������������������������������������������0000644�0001750�0001750�00000002066�14557510505�014112� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A replacement function, for systems that lack strndup. Copyright (C) 1996-1998, 2001-2003, 2005-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdlib.h> char * strndup (char const *s, size_t n) { size_t len = strnlen (s, n); char *new = malloc (len + 1); if (new == NULL) return NULL; new[len] = '\0'; return memcpy (new, s, len); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strnlen.c������������������������������������������������������������0000644�0001750�0001750�00000002226�14557510505�014076� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Find the length of STRING, but scan at most MAXLEN characters. Copyright (C) 2005-2007, 2009-2024 Free Software Foundation, Inc. Written by Simon Josefsson. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> /* Find the length of STRING, but scan at most MAXLEN characters. If no '\0' terminator is found in that many characters, return MAXLEN. */ size_t strnlen (const char *string, size_t maxlen) { const char *end = memchr (string, '\0', maxlen); return end ? (size_t) (end - string) : maxlen; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strnlen1.h�����������������������������������������������������������0000644�0001750�0001750�00000002517�14557510505�014167� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Find the length of STRING + 1, but scan at most MAXLEN bytes. Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _STRNLEN1_H #define _STRNLEN1_H /* This file uses _GL_ATTRIBUTE_PURE. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <stddef.h> #ifdef __cplusplus extern "C" { #endif /* Find the length of STRING + 1, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many characters, return MAXLEN. */ /* This is the same as strnlen (string, maxlen - 1) + 1. */ extern size_t strnlen1 (const char *string, size_t maxlen) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } #endif #endif /* _STRNLEN1_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strnlen1.c�����������������������������������������������������������0000644�0001750�0001750�00000002407�14557510505�014160� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Find the length of STRING + 1, but scan at most MAXLEN bytes. Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "strnlen1.h" #include <string.h> /* Find the length of STRING + 1, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many characters, return MAXLEN. */ /* This is the same as strnlen (string, maxlen - 1) + 1. */ size_t strnlen1 (const char *string, size_t maxlen) { const char *end = (const char *) memchr (string, '\0', maxlen); if (end != NULL) return end - string + 1; else return maxlen; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strptime.c�����������������������������������������������������������0000644�0001750�0001750�00000110730�14557510505�014260� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2002, 2004-2005, 2007, 2009-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> #endif #include <time.h> #include <assert.h> #include <ctype.h> #ifdef _LIBC # include <langinfo.h> #endif #include <limits.h> #include <string.h> #include <strings.h> #ifdef _LIBC # include <stdbool.h> # include "../locale/localeinfo.h" #endif #ifndef _LIBC enum ptime_locale_status { not, loc, raw }; #endif #define match_char(ch1, ch2) if (ch1 != ch2) return NULL #if defined _LIBC && defined __GNUC__ && __GNUC__ >= 2 # define match_string(cs1, s2) \ ({ size_t len = strlen (cs1); \ int result = __strncasecmp_l ((cs1), (s2), len, locale) == 0; \ if (result) (s2) += len; \ result; }) #else /* Oh come on. Get a reasonable compiler. */ # define match_string(cs1, s2) \ (strncasecmp ((cs1), (s2), strlen (cs1)) ? 0 : ((s2) += strlen (cs1), 1)) #endif /* We intentionally do not use isdigit() for testing because this will lead to problems with the wide character version. */ #define get_number(from, to, n) \ do { \ int __n = n; \ val = 0; \ while (*rp == ' ') \ ++rp; \ if (*rp < '0' || *rp > '9') \ return NULL; \ do { \ val *= 10; \ val += *rp++ - '0'; \ } while (--__n > 0 && val * 10 <= to && *rp >= '0' && *rp <= '9'); \ if (val < from || val > to) \ return NULL; \ } while (0) #ifdef _NL_CURRENT # define get_alt_number(from, to, n) \ ({ \ __label__ do_normal; \ \ if (*decided != raw) \ { \ val = _nl_parse_alt_digit (&rp HELPER_LOCALE_ARG); \ if (val == -1 && *decided != loc) \ { \ *decided = loc; \ goto do_normal; \ } \ if (val < from || val > to) \ return NULL; \ } \ else \ { \ do_normal: \ get_number (from, to, n); \ } \ 0; \ }) #else # define get_alt_number(from, to, n) \ /* We don't have the alternate representation. */ \ get_number(from, to, n) #endif #define recursive(new_fmt) \ (*(new_fmt) != '\0' \ && (rp = __strptime_internal (rp, (new_fmt), tm, \ decided, era_cnt LOCALE_ARG)) != NULL) #ifdef _LIBC /* This is defined in locale/C-time.c in the GNU libc. */ extern const struct locale_data _nl_C_LC_TIME attribute_hidden; # define weekday_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (DAY_1)].string) # define ab_weekday_name \ (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (ABDAY_1)].string) # define month_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (MON_1)].string) # define ab_month_name (&_nl_C_LC_TIME.values[_NL_ITEM_INDEX (ABMON_1)].string) # define HERE_D_T_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (D_T_FMT)].string) # define HERE_D_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (D_FMT)].string) # define HERE_AM_STR (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (AM_STR)].string) # define HERE_PM_STR (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (PM_STR)].string) # define HERE_T_FMT_AMPM \ (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (T_FMT_AMPM)].string) # define HERE_T_FMT (_nl_C_LC_TIME.values[_NL_ITEM_INDEX (T_FMT)].string) # define strncasecmp(s1, s2, n) __strncasecmp (s1, s2, n) #else static char const weekday_name[][10] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; static char const ab_weekday_name[][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; static char const month_name[][10] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; static char const ab_month_name[][4] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; # define HERE_D_T_FMT "%a %b %e %H:%M:%S %Y" # define HERE_D_FMT "%m/%d/%y" # define HERE_AM_STR "AM" # define HERE_PM_STR "PM" # define HERE_T_FMT_AMPM "%I:%M:%S %p" # define HERE_T_FMT "%H:%M:%S" static const unsigned short int __mon_yday[2][13] = { /* Normal years. */ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, /* Leap years. */ { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } }; #endif #if defined _LIBC /* We use this code also for the extended locale handling where the function gets as an additional argument the locale which has to be used. To access the values we have to redefine the _NL_CURRENT macro. */ # define strptime __strptime_l # undef _NL_CURRENT # define _NL_CURRENT(category, item) \ (current->values[_NL_ITEM_INDEX (item)].string) # undef _NL_CURRENT_WORD # define _NL_CURRENT_WORD(category, item) \ (current->values[_NL_ITEM_INDEX (item)].word) # define LOCALE_PARAM , locale # define LOCALE_ARG , locale # define LOCALE_PARAM_PROTO , __locale_t locale # define LOCALE_PARAM_DECL __locale_t locale; # define HELPER_LOCALE_ARG , current # define ISSPACE(Ch) __isspace_l (Ch, locale) #else # define LOCALE_PARAM # define LOCALE_ARG # define LOCALE_PARAM_DECL # define LOCALE_PARAM_PROTO # define HELPER_LOCALE_ARG # define ISSPACE(Ch) isspace (Ch) #endif #ifndef __isleap /* Nonzero if YEAR is a leap year (every 4 years, except every 100th isn't, and every 400th is). */ # define __isleap(year) \ ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) #endif /* Compute the day of the week. */ static void day_of_the_week (struct tm *tm) { /* We know that January 1st 1970 was a Thursday (= 4). Compute the difference between this data in the one on TM and so determine the weekday. */ int corr_year = 1900 + tm->tm_year - (tm->tm_mon < 2); int corr_quad = corr_year / 4; int wday = (-473 + (365 * (tm->tm_year - 70)) + corr_quad - ((corr_quad + (corr_quad < 0)) / 25 - (corr_quad < 0)) + ((corr_quad / 25) / 4) + __mon_yday[0][tm->tm_mon] + tm->tm_mday - 1); tm->tm_wday = ((wday % 7) + 7) % 7; } /* Compute the day of the year. */ static void day_of_the_year (struct tm *tm) { tm->tm_yday = (__mon_yday[__isleap (1900 + tm->tm_year)][tm->tm_mon] + (tm->tm_mday - 1)); } #ifdef _LIBC char * internal_function #else static char * #endif __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) const char *rp; const char *fmt; struct tm *tm; enum ptime_locale_status *decided; int era_cnt; LOCALE_PARAM_DECL { #ifdef _LIBC struct locale_data *const current = locale->__locales[LC_TIME]; #endif int cnt; size_t val; int have_I, is_pm; int century, want_century; int want_era; int have_wday, want_xday; int have_yday; int have_mon, have_mday; int have_uweek, have_wweek; int week_no; #ifdef _NL_CURRENT size_t num_eras; struct era_entry *era = NULL; const char *rp_backup; #endif have_I = is_pm = 0; century = -1; want_century = 0; want_era = 0; week_no = 0; have_wday = want_xday = have_yday = have_mon = have_mday = have_uweek = 0; have_wweek = 0; while (*fmt != '\0') { /* A white space in the format string matches 0 more or white space in the input string. */ if (ISSPACE (*fmt)) { while (ISSPACE (*rp)) ++rp; ++fmt; continue; } /* Any character but '%' must be matched by the same character in the input string. */ if (*fmt != '%') { match_char (*fmt++, *rp++); continue; } ++fmt; #ifndef _NL_CURRENT /* We need this for handling the 'E' modifier. */ start_over: #else /* Make back up of current processing pointer. */ rp_backup = rp; #endif switch (*fmt++) { case '%': /* Match the '%' character itself. */ match_char ('%', *rp++); break; case 'a': case 'A': /* Match day of week. */ for (cnt = 0; cnt < 7; ++cnt) { #ifdef _NL_CURRENT if (*decided !=raw) { if (match_string (_NL_CURRENT (LC_TIME, DAY_1 + cnt), rp)) { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, DAY_1 + cnt), weekday_name[cnt])) *decided = loc; break; } if (match_string (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), rp)) { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), ab_weekday_name[cnt])) *decided = loc; break; } } #endif if (*decided != loc && (match_string (weekday_name[cnt], rp) || match_string (ab_weekday_name[cnt], rp))) { *decided = raw; break; } } if (cnt == 7) /* Does not match a weekday name. */ return NULL; tm->tm_wday = cnt; have_wday = 1; break; case 'b': case 'B': case 'h': /* Match month name. */ for (cnt = 0; cnt < 12; ++cnt) { #ifdef _NL_CURRENT if (*decided !=raw) { if (match_string (_NL_CURRENT (LC_TIME, MON_1 + cnt), rp)) { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, MON_1 + cnt), month_name[cnt])) *decided = loc; break; } if (match_string (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), rp)) { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), ab_month_name[cnt])) *decided = loc; break; } } #endif if (match_string (month_name[cnt], rp) || match_string (ab_month_name[cnt], rp)) { *decided = raw; break; } } if (cnt == 12) /* Does not match a month name. */ return NULL; tm->tm_mon = cnt; want_xday = 1; break; case 'c': /* Match locale's date and time format. */ #ifdef _NL_CURRENT if (*decided != raw) { if (!recursive (_NL_CURRENT (LC_TIME, D_T_FMT))) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, D_T_FMT), HERE_D_T_FMT)) *decided = loc; want_xday = 1; break; } *decided = raw; } #endif if (!recursive (HERE_D_T_FMT)) return NULL; want_xday = 1; break; case 'C': /* Match century number. */ #ifdef _NL_CURRENT match_century: #endif get_number (0, 99, 2); century = val; want_xday = 1; break; case 'd': case 'e': /* Match day of month. */ get_number (1, 31, 2); tm->tm_mday = val; have_mday = 1; want_xday = 1; break; case 'F': if (!recursive ("%Y-%m-%d")) return NULL; want_xday = 1; break; case 'x': #ifdef _NL_CURRENT if (*decided != raw) { if (!recursive (_NL_CURRENT (LC_TIME, D_FMT))) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, D_FMT), HERE_D_FMT)) *decided = loc; want_xday = 1; break; } *decided = raw; } #endif /* Fall through. */ case 'D': /* Match standard day format. */ if (!recursive (HERE_D_FMT)) return NULL; want_xday = 1; break; case 'k': case 'H': /* Match hour in 24-hour clock. */ get_number (0, 23, 2); tm->tm_hour = val; have_I = 0; break; case 'l': /* Match hour in 12-hour clock. GNU extension. */ case 'I': /* Match hour in 12-hour clock. */ get_number (1, 12, 2); tm->tm_hour = val % 12; have_I = 1; break; case 'j': /* Match day number of year. */ get_number (1, 366, 3); tm->tm_yday = val - 1; have_yday = 1; break; case 'm': /* Match number of month. */ get_number (1, 12, 2); tm->tm_mon = val - 1; have_mon = 1; want_xday = 1; break; case 'M': /* Match minute. */ get_number (0, 59, 2); tm->tm_min = val; break; case 'n': case 't': /* Match any white space. */ while (ISSPACE (*rp)) ++rp; break; case 'p': /* Match locale's equivalent of AM/PM. */ #ifdef _NL_CURRENT if (*decided != raw) { if (match_string (_NL_CURRENT (LC_TIME, AM_STR), rp)) { if (strcmp (_NL_CURRENT (LC_TIME, AM_STR), HERE_AM_STR)) *decided = loc; break; } if (match_string (_NL_CURRENT (LC_TIME, PM_STR), rp)) { if (strcmp (_NL_CURRENT (LC_TIME, PM_STR), HERE_PM_STR)) *decided = loc; is_pm = 1; break; } *decided = raw; } #endif if (!match_string (HERE_AM_STR, rp)) { if (match_string (HERE_PM_STR, rp)) is_pm = 1; else return NULL; } break; case 'q': /* Match quarter of year. GNU extension. */ get_number (1, 4, 1); tm->tm_mon = (val - 1) * 3; tm->tm_mday = 1; have_mon = 1; have_mday = 1; want_xday = 1; break; case 'r': #ifdef _NL_CURRENT if (*decided != raw) { if (!recursive (_NL_CURRENT (LC_TIME, T_FMT_AMPM))) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (*decided == not && strcmp (_NL_CURRENT (LC_TIME, T_FMT_AMPM), HERE_T_FMT_AMPM)) *decided = loc; break; } *decided = raw; } #endif if (!recursive (HERE_T_FMT_AMPM)) return NULL; break; case 'R': if (!recursive ("%H:%M")) return NULL; break; case 's': { /* The number of seconds may be very high so we cannot use the 'get_number' macro. Instead read the number character for character and construct the result while doing this. */ time_t secs = 0; if (*rp < '0' || *rp > '9') /* We need at least one digit. */ return NULL; do { secs *= 10; secs += *rp++ - '0'; } while (*rp >= '0' && *rp <= '9'); if (localtime_r (&secs, tm) == NULL) /* Error in function. */ return NULL; } break; case 'S': get_number (0, 61, 2); tm->tm_sec = val; break; case 'X': #ifdef _NL_CURRENT if (*decided != raw) { if (!recursive (_NL_CURRENT (LC_TIME, T_FMT))) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (strcmp (_NL_CURRENT (LC_TIME, T_FMT), HERE_T_FMT)) *decided = loc; break; } *decided = raw; } #endif /* Fall through. */ case 'T': if (!recursive (HERE_T_FMT)) return NULL; break; case 'u': get_number (1, 7, 1); tm->tm_wday = val % 7; have_wday = 1; break; case 'g': get_number (0, 99, 2); /* XXX This cannot determine any field in TM. */ break; case 'G': if (*rp < '0' || *rp > '9') return NULL; /* XXX Ignore the number since we would need some more information to compute a real date. */ do ++rp; while (*rp >= '0' && *rp <= '9'); break; case 'U': get_number (0, 53, 2); week_no = val; have_uweek = 1; break; case 'W': get_number (0, 53, 2); week_no = val; have_wweek = 1; break; case 'V': get_number (0, 53, 2); /* XXX This cannot determine any field in TM without some information. */ break; case 'w': /* Match number of weekday. */ get_number (0, 6, 1); tm->tm_wday = val; have_wday = 1; break; case 'y': #ifdef _NL_CURRENT match_year_in_century: #endif /* Match year within century. */ get_number (0, 99, 2); /* The "Year 2000: The Millennium Rollover" paper suggests that values in the range 69-99 refer to the twentieth century. */ tm->tm_year = val >= 69 ? val : val + 100; /* Indicate that we want to use the century, if specified. */ want_century = 1; want_xday = 1; break; case 'Y': /* Match year including century number. */ get_number (0, 9999, 4); tm->tm_year = val - 1900; want_century = 0; want_xday = 1; break; case 'Z': /* XXX How to handle this? */ break; case 'z': /* We recognize two formats: if two digits are given, these specify hours. If fours digits are used, minutes are also specified. */ { _GL_UNUSED bool neg; int n; val = 0; while (*rp == ' ') ++rp; if (*rp != '+' && *rp != '-') return NULL; neg = *rp++ == '-'; n = 0; while (n < 4 && *rp >= '0' && *rp <= '9') { val = val * 10 + *rp++ - '0'; ++n; } if (n == 2) val *= 100; else if (n != 4) /* Only two or four digits recognized. */ return NULL; else { /* We have to convert the minutes into decimal. */ if (val % 100 >= 60) return NULL; val = (val / 100) * 100 + ((val % 100) * 50) / 30; } if (val > 1200) return NULL; #if defined _LIBC || HAVE_TM_GMTOFF tm->tm_gmtoff = (val * 3600) / 100; if (neg) tm->tm_gmtoff = -tm->tm_gmtoff; #endif } break; case 'E': #ifdef _NL_CURRENT switch (*fmt++) { case 'c': /* Match locale's alternate date and time format. */ if (*decided != raw) { const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_T_FMT); if (*fmt == '\0') fmt = _NL_CURRENT (LC_TIME, D_T_FMT); if (!recursive (fmt)) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (strcmp (fmt, HERE_D_T_FMT)) *decided = loc; want_xday = 1; break; } *decided = raw; } /* The C locale has no era information, so use the normal representation. */ if (!recursive (HERE_D_T_FMT)) return NULL; want_xday = 1; break; case 'C': if (*decided != raw) { if (era_cnt >= 0) { era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); if (era != NULL && match_string (era->era_name, rp)) { *decided = loc; break; } else return NULL; } num_eras = _NL_CURRENT_WORD (LC_TIME, _NL_TIME_ERA_NUM_ENTRIES); for (era_cnt = 0; era_cnt < (int) num_eras; ++era_cnt, rp = rp_backup) { era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); if (era != NULL && match_string (era->era_name, rp)) { *decided = loc; break; } } if (era_cnt != (int) num_eras) break; era_cnt = -1; if (*decided == loc) return NULL; *decided = raw; } /* The C locale has no era information, so use the normal representation. */ goto match_century; case 'y': if (*decided != raw) { get_number(0, 9999, 4); tm->tm_year = val; want_era = 1; want_xday = 1; want_century = 1; if (era_cnt >= 0) { assert (*decided == loc); era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); bool match = false; if (era != NULL) { int delta = ((tm->tm_year - era->offset) * era->absolute_direction); match = (delta >= 0 && delta < (((int64_t) era->stop_date[0] - (int64_t) era->start_date[0]) * era->absolute_direction)); } if (! match) return NULL; break; } num_eras = _NL_CURRENT_WORD (LC_TIME, _NL_TIME_ERA_NUM_ENTRIES); for (era_cnt = 0; era_cnt < (int) num_eras; ++era_cnt) { era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); if (era != NULL) { int delta = ((tm->tm_year - era->offset) * era->absolute_direction); if (delta >= 0 && delta < (((int64_t) era->stop_date[0] - (int64_t) era->start_date[0]) * era->absolute_direction)) { *decided = loc; break; } } } if (era_cnt != (int) num_eras) break; era_cnt = -1; if (*decided == loc) return NULL; *decided = raw; } goto match_year_in_century; case 'Y': if (*decided != raw) { num_eras = _NL_CURRENT_WORD (LC_TIME, _NL_TIME_ERA_NUM_ENTRIES); for (era_cnt = 0; era_cnt < (int) num_eras; ++era_cnt, rp = rp_backup) { era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); if (era != NULL && recursive (era->era_format)) break; } if (era_cnt == (int) num_eras) { era_cnt = -1; if (*decided == loc) return NULL; else rp = rp_backup; } else { *decided = loc; era_cnt = -1; break; } *decided = raw; } get_number (0, 9999, 4); tm->tm_year = val - 1900; want_century = 0; want_xday = 1; break; case 'x': if (*decided != raw) { const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_FMT); if (*fmt == '\0') fmt = _NL_CURRENT (LC_TIME, D_FMT); if (!recursive (fmt)) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (strcmp (fmt, HERE_D_FMT)) *decided = loc; break; } *decided = raw; } if (!recursive (HERE_D_FMT)) return NULL; break; case 'X': if (*decided != raw) { const char *fmt = _NL_CURRENT (LC_TIME, ERA_T_FMT); if (*fmt == '\0') fmt = _NL_CURRENT (LC_TIME, T_FMT); if (!recursive (fmt)) { if (*decided == loc) return NULL; else rp = rp_backup; } else { if (strcmp (fmt, HERE_T_FMT)) *decided = loc; break; } *decided = raw; } if (!recursive (HERE_T_FMT)) return NULL; break; default: return NULL; } break; #else /* We have no information about the era format. Just use the normal format. */ if (*fmt != 'c' && *fmt != 'C' && *fmt != 'y' && *fmt != 'Y' && *fmt != 'x' && *fmt != 'X') /* This is an illegal format. */ return NULL; goto start_over; #endif case 'O': switch (*fmt++) { case 'd': case 'e': /* Match day of month using alternate numeric symbols. */ get_alt_number (1, 31, 2); tm->tm_mday = val; have_mday = 1; want_xday = 1; break; case 'H': /* Match hour in 24-hour clock using alternate numeric symbols. */ get_alt_number (0, 23, 2); tm->tm_hour = val; have_I = 0; break; case 'I': /* Match hour in 12-hour clock using alternate numeric symbols. */ get_alt_number (1, 12, 2); tm->tm_hour = val % 12; have_I = 1; break; case 'm': /* Match month using alternate numeric symbols. */ get_alt_number (1, 12, 2); tm->tm_mon = val - 1; have_mon = 1; want_xday = 1; break; case 'M': /* Match minutes using alternate numeric symbols. */ get_alt_number (0, 59, 2); tm->tm_min = val; break; case 'q': /* Match quarter using alternate numeric symbols. */ get_alt_number (1, 4, 1); tm->tm_mon = (val - 1) * 3; tm->tm_mday = 1; have_mon = 1; have_mday = 1; want_xday = 1; break; case 'S': /* Match seconds using alternate numeric symbols. */ get_alt_number (0, 61, 2); tm->tm_sec = val; break; case 'U': get_alt_number (0, 53, 2); week_no = val; have_uweek = 1; break; case 'W': get_alt_number (0, 53, 2); week_no = val; have_wweek = 1; break; case 'V': get_alt_number (0, 53, 2); /* XXX This cannot determine any field in TM without further information. */ break; case 'w': /* Match number of weekday using alternate numeric symbols. */ get_alt_number (0, 6, 1); tm->tm_wday = val; have_wday = 1; break; case 'y': /* Match year within century using alternate numeric symbols. */ get_alt_number (0, 99, 2); tm->tm_year = val >= 69 ? val : val + 100; want_xday = 1; break; default: return NULL; } break; default: return NULL; } } if (have_I && is_pm) tm->tm_hour += 12; if (century != -1) { if (want_century) tm->tm_year = tm->tm_year % 100 + (century - 19) * 100; else /* Only the century, but not the year. Strange, but so be it. */ tm->tm_year = (century - 19) * 100; } if (era_cnt != -1) { #ifdef _NL_CURRENT era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); if (era == NULL) return NULL; if (want_era) tm->tm_year = (era->start_date[0] + ((tm->tm_year - era->offset) * era->absolute_direction)); else /* Era start year assumed. */ tm->tm_year = era->start_date[0]; #endif } else if (want_era) { /* No era found but we have seen an E modifier. Rectify some values. */ if (want_century && century == -1 && tm->tm_year < 69) tm->tm_year += 100; } if (want_xday && !have_wday) { if ( !(have_mon && have_mday) && have_yday) { /* We don't have tm_mon and/or tm_mday, compute them. */ int t_mon = 0; while (__mon_yday[__isleap(1900 + tm->tm_year)][t_mon] <= tm->tm_yday) t_mon++; if (!have_mon) tm->tm_mon = t_mon - 1; if (!have_mday) tm->tm_mday = (tm->tm_yday - __mon_yday[__isleap(1900 + tm->tm_year)][t_mon - 1] + 1); } day_of_the_week (tm); } if (want_xday && !have_yday) day_of_the_year (tm); if ((have_uweek || have_wweek) && have_wday) { int saved_wday = tm->tm_wday; int saved_mday = tm->tm_mday; int saved_mon = tm->tm_mon; int w_offset = have_uweek ? 0 : 1; tm->tm_mday = 1; tm->tm_mon = 0; day_of_the_week (tm); if (have_mday) tm->tm_mday = saved_mday; if (have_mon) tm->tm_mon = saved_mon; if (!have_yday) tm->tm_yday = ((7 - (tm->tm_wday - w_offset)) % 7 + (week_no - 1) *7 + saved_wday - w_offset); if (!have_mday || !have_mon) { int t_mon = 0; while (__mon_yday[__isleap(1900 + tm->tm_year)][t_mon] <= tm->tm_yday) t_mon++; if (!have_mon) tm->tm_mon = t_mon - 1; if (!have_mday) tm->tm_mday = (tm->tm_yday - __mon_yday[__isleap(1900 + tm->tm_year)][t_mon - 1] + 1); } tm->tm_wday = saved_wday; } return (char *) rp; } char * strptime (buf, format, tm LOCALE_PARAM) const char *restrict buf; const char *restrict format; struct tm *restrict tm; LOCALE_PARAM_DECL { enum ptime_locale_status decided; #ifdef _NL_CURRENT decided = not; #else decided = raw; #endif return __strptime_internal (buf, format, tm, &decided, -1 LOCALE_ARG); } #ifdef _LIBC weak_alias (__strptime_l, strptime_l) #endif ����������������������������������������gnuastro-0.22/bootstrapped/lib/strtod.c�������������������������������������������������������������0000644�0001750�0001750�00000034073�14557510505�013735� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-1992, 1997, 1999, 2003, 2006, 2008-2024 Free Software Foundation, Inc. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #include <stdlib.h> #include <ctype.h> /* isspace() */ #include <errno.h> #include <float.h> /* {DBL,LDBL}_{MIN,MAX} */ #include <limits.h> /* LONG_{MIN,MAX} */ #include <locale.h> /* localeconv() */ #include <math.h> /* NAN */ #include <stdio.h> /* sprintf() */ #include <string.h> /* strdup() */ #if HAVE_NL_LANGINFO # include <langinfo.h> #endif #include "c-ctype.h" #undef MIN #undef MAX #ifdef USE_LONG_DOUBLE # define STRTOD strtold # define LDEXP ldexpl # if defined __hpux && defined __hppa /* We cannot call strtold on HP-UX/hppa, because its return type is a struct, not a 'long double'. */ # define HAVE_UNDERLYING_STRTOD 0 # elif STRTOLD_HAS_UNDERFLOW_BUG /* strtold would not set errno=ERANGE upon underflow. */ # define HAVE_UNDERLYING_STRTOD 0 # else # define HAVE_UNDERLYING_STRTOD HAVE_STRTOLD # endif # define DOUBLE long double # define MIN LDBL_MIN # define MAX LDBL_MAX # define L_(literal) literal##L #else # define STRTOD strtod # define LDEXP ldexp # define HAVE_UNDERLYING_STRTOD 1 # define DOUBLE double # define MIN DBL_MIN # define MAX DBL_MAX # define L_(literal) literal #endif #if (defined USE_LONG_DOUBLE ? HAVE_LDEXPM_IN_LIBC : HAVE_LDEXP_IN_LIBC) # define USE_LDEXP 1 #else # define USE_LDEXP 0 #endif /* Return true if C is a space in the current locale, avoiding problems with signed char and isspace. */ static bool locale_isspace (char c) { unsigned char uc = c; return isspace (uc) != 0; } /* Determine the decimal-point character according to the current locale. */ static char decimal_point_char (void) { const char *point; /* Determine it in a multithread-safe way. We know nl_langinfo is multithread-safe on glibc systems and Mac OS X systems, but is not required to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. localeconv() is rarely multithread-safe. */ #if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) point = nl_langinfo (RADIXCHAR); #elif 1 char pointbuf[5]; sprintf (pointbuf, "%#.0f", 1.0); point = &pointbuf[1]; #else point = localeconv () -> decimal_point; #endif /* The decimal point is always a single byte: either '.' or ','. */ return (point[0] != '\0' ? point[0] : '.'); } #if !USE_LDEXP #undef LDEXP #define LDEXP dummy_ldexp /* A dummy definition that will never be invoked. */ static DOUBLE LDEXP (_GL_UNUSED DOUBLE x, _GL_UNUSED int exponent) { abort (); return L_(0.0); } #endif /* Return X * BASE**EXPONENT. Return an extreme value and set errno to ERANGE if underflow or overflow occurs. */ static DOUBLE scale_radix_exp (DOUBLE x, int radix, long int exponent) { /* If RADIX == 10, this code is neither precise nor fast; it is merely a straightforward and relatively portable approximation. If N == 2, this code is precise on a radix-2 implementation, albeit perhaps not fast if ldexp is not in libc. */ long int e = exponent; if (USE_LDEXP && radix == 2) return LDEXP (x, e < INT_MIN ? INT_MIN : INT_MAX < e ? INT_MAX : e); else { DOUBLE r = x; if (r != 0) { if (e < 0) { while (e++ != 0) { r /= radix; if (r == 0 && x != 0) { errno = ERANGE; break; } } } else { while (e-- != 0) { if (r < -MAX / radix) { errno = ERANGE; return -HUGE_VAL; } else if (MAX / radix < r) { errno = ERANGE; return HUGE_VAL; } else r *= radix; } } } return r; } } /* Parse a number at NPTR; this is a bit like strtol (NPTR, ENDPTR) except there are no leading spaces or signs or "0x", and ENDPTR is nonnull. The number uses a base BASE (either 10 or 16) fraction, a radix RADIX (either 10 or 2) exponent, and exponent character EXPCHAR. BASE is RADIX**RADIX_MULTIPLIER. */ static DOUBLE parse_number (const char *nptr, int base, int radix, int radix_multiplier, char radixchar, char expchar, char **endptr) { const char *s = nptr; const char *digits_start; const char *digits_end; const char *radixchar_ptr; long int exponent; DOUBLE num; /* First, determine the start and end of the digit sequence. */ digits_start = s; radixchar_ptr = NULL; for (;; ++s) { if (base == 16 ? c_isxdigit (*s) : c_isdigit (*s)) ; else if (radixchar_ptr == NULL && *s == radixchar) { /* Record that we have found the decimal point. */ radixchar_ptr = s; } else /* Any other character terminates the digit sequence. */ break; } digits_end = s; /* Now radixchar_ptr == NULL or digits_start <= radixchar_ptr < digits_end. */ if (false) { /* Unoptimized. */ exponent = (radixchar_ptr != NULL ? - (long int) (digits_end - radixchar_ptr - 1) : 0); } else { /* Remove trailing zero digits. This reduces rounding errors for inputs such as 1.0000000000 or 10000000000e-10. */ while (digits_end > digits_start) { if (digits_end - 1 == radixchar_ptr || *(digits_end - 1) == '0') digits_end--; else break; } exponent = (radixchar_ptr != NULL ? (digits_end > radixchar_ptr ? - (long int) (digits_end - radixchar_ptr - 1) : (long int) (radixchar_ptr - digits_end)) : (long int) (s - digits_end)); } /* Then, convert the digit sequence to a number. */ { const char *dp; num = 0; for (dp = digits_start; dp < digits_end; dp++) if (dp != radixchar_ptr) { int digit; /* Make sure that multiplication by BASE will not overflow. */ if (!(num <= MAX / base)) { /* The value of the digit and all subsequent digits don't matter, since we have already gotten as many digits as can be represented in a 'DOUBLE'. This doesn't necessarily mean that the result will overflow: The exponent may reduce it to within range. */ exponent += (digits_end - dp) - (radixchar_ptr >= dp && radixchar_ptr < digits_end ? 1 : 0); break; } /* Eat the next digit. */ if (c_isdigit (*dp)) digit = *dp - '0'; else if (base == 16 && c_isxdigit (*dp)) digit = c_tolower (*dp) - ('a' - 10); else abort (); num = num * base + digit; } } exponent = exponent * radix_multiplier; /* Finally, parse the exponent. */ if (c_tolower (*s) == expchar && ! locale_isspace (s[1])) { /* Add any given exponent to the implicit one. */ int saved_errno = errno; char *end; long int value = strtol (s + 1, &end, 10); errno = saved_errno; if (s + 1 != end) { /* Skip past the exponent, and add in the implicit exponent, resulting in an extreme value on overflow. */ s = end; exponent = (exponent < 0 ? (value < LONG_MIN - exponent ? LONG_MIN : exponent + value) : (LONG_MAX - exponent < value ? LONG_MAX : exponent + value)); } } *endptr = (char *) s; return scale_radix_exp (num, radix, exponent); } /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. ICC 10.0 has a bug when optimizing the expression -zero. The expression -MIN * MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ static DOUBLE minus_zero (void) { #if defined __hpux || defined __sgi || defined __ICC return -MIN * MIN; #else return -0.0; #endif } /* Convert NPTR to a DOUBLE. If ENDPTR is not NULL, a pointer to the character after the last one used in the number is put in *ENDPTR. */ DOUBLE STRTOD (const char *nptr, char **endptr) #if HAVE_UNDERLYING_STRTOD # ifdef USE_LONG_DOUBLE # undef strtold # else # undef strtod # endif #else # undef STRTOD # define STRTOD(NPTR,ENDPTR) \ parse_number (NPTR, 10, 10, 1, radixchar, 'e', ENDPTR) #endif /* From here on, STRTOD refers to the underlying implementation. It needs to handle only finite unsigned decimal numbers with non-null ENDPTR. */ { char radixchar; bool negative = false; /* The number so far. */ DOUBLE num; const char *s = nptr; const char *end; char *endbuf; int saved_errno = errno; radixchar = decimal_point_char (); /* Eat whitespace. */ while (locale_isspace (*s)) ++s; /* Get the sign. */ negative = *s == '-'; if (*s == '-' || *s == '+') ++s; num = STRTOD (s, &endbuf); end = endbuf; if (c_isdigit (s[*s == radixchar])) { /* If a hex float was converted incorrectly, do it ourselves. If the string starts with "0x" but does not contain digits, consume the "0" ourselves. If a hex float is followed by a 'p' but no exponent, then adjust the end pointer. */ if (*s == '0' && c_tolower (s[1]) == 'x') { if (! c_isxdigit (s[2 + (s[2] == radixchar)])) { end = s + 1; /* strtod() on z/OS returns ERANGE for "0x". */ errno = saved_errno; } else if (end <= s + 2) { num = parse_number (s + 2, 16, 2, 4, radixchar, 'p', &endbuf); end = endbuf; } else { const char *p = s + 2; while (p < end && c_tolower (*p) != 'p') p++; if (p < end && ! c_isdigit (p[1 + (p[1] == '-' || p[1] == '+')])) { char *dup = strdup (s); errno = saved_errno; if (!dup) { /* Not really our day, is it. Rounding errors are better than outright failure. */ num = parse_number (s + 2, 16, 2, 4, radixchar, 'p', &endbuf); } else { dup[p - s] = '\0'; num = STRTOD (dup, &endbuf); saved_errno = errno; free (dup); errno = saved_errno; } end = p; } } } else { /* If "1e 1" was misparsed as 10.0 instead of 1.0, re-do the underlying STRTOD on a copy of the original string truncated to avoid the bug. */ const char *e = s + 1; while (e < end && c_tolower (*e) != 'e') e++; if (e < end && ! c_isdigit (e[1 + (e[1] == '-' || e[1] == '+')])) { char *dup = strdup (s); errno = saved_errno; if (!dup) { /* Not really our day, is it. Rounding errors are better than outright failure. */ num = parse_number (s, 10, 10, 1, radixchar, 'e', &endbuf); } else { dup[e - s] = '\0'; num = STRTOD (dup, &endbuf); saved_errno = errno; free (dup); errno = saved_errno; } end = e; } } s = end; } /* Check for infinities and NaNs. */ else if (c_tolower (*s) == 'i' && c_tolower (s[1]) == 'n' && c_tolower (s[2]) == 'f') { s += 3; if (c_tolower (*s) == 'i' && c_tolower (s[1]) == 'n' && c_tolower (s[2]) == 'i' && c_tolower (s[3]) == 't' && c_tolower (s[4]) == 'y') s += 5; num = HUGE_VAL; errno = saved_errno; } else if (c_tolower (*s) == 'n' && c_tolower (s[1]) == 'a' && c_tolower (s[2]) == 'n') { s += 3; if (*s == '(') { const char *p = s + 1; while (c_isalnum (*p)) p++; if (*p == ')') s = p + 1; } /* If the underlying implementation misparsed the NaN, assume its result is incorrect, and return a NaN. Normally it's better to use the underlying implementation's result, since a nice implementation populates the bits of the NaN according to interpreting n-char-sequence as a hexadecimal number. */ if (s != end || num == num) num = NAN; errno = saved_errno; } else { /* No conversion could be performed. */ errno = EINVAL; s = nptr; } if (endptr != NULL) *endptr = (char *) s; /* Special case -0.0, since at least ICC miscompiles negation. We can't use copysign(), as that drags in -lm on some platforms. */ if (!num && negative) return minus_zero (); return negative ? -num : num; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strtok_r.c�����������������������������������������������������������0000644�0001750�0001750�00000004136�14557510505�014262� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Reentrant string tokenizer. Generic version. Copyright (C) 1991, 1996-1999, 2001, 2004, 2007, 2009-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif #include <string.h> #ifdef _LIBC # undef strtok_r # undef __strtok_r #else # define __strtok_r strtok_r # define __rawmemchr strchr #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" */ char * __strtok_r (char *s, const char *delim, char **save_ptr) { char *token; if (s == NULL) s = *save_ptr; /* Scan leading delimiters. */ s += strspn (s, delim); if (*s == '\0') { *save_ptr = s; return NULL; } /* Find the end of the token. */ token = s; s = strpbrk (token, delim); if (s == NULL) /* This token finishes the string. */ *save_ptr = __rawmemchr (token, '\0'); else { /* Terminate the token and make *SAVE_PTR point past it. */ *s = '\0'; *save_ptr = s + 1; } return token; } #ifdef weak_alias libc_hidden_def (__strtok_r) weak_alias (__strtok_r, strtok_r) #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/sys_socket.c���������������������������������������������������������0000644�0001750�0001750�00000001555�14557510505�014603� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <sys/socket.h>. Copyright (C) 2012-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define _GL_SYS_SOCKET_INLINE _GL_EXTERN_INLINE #include <sys/socket.h> typedef int dummy; ���������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/time.c���������������������������������������������������������������0000644�0001750�0001750�00000002076�14557510505�013352� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide time() for systems for which it's broken. Copyright (C) 2023-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible. */ #include <config.h> /* Specification. */ #include <time.h> #include <stdlib.h> #include <sys/time.h> time_t time (time_t *tp) { struct timeval tv; time_t tt; if (gettimeofday (&tv, NULL) < 0) abort (); tt = tv.tv_sec; if (tp) *tp = tt; return tt; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/time_r.c�������������������������������������������������������������0000644�0001750�0001750�00000002335�14557510505�013671� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Reentrant time functions like localtime_r. Copyright (C) 2003, 2006-2007, 2010-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include <time.h> static struct tm * copy_tm_result (struct tm *dest, struct tm const *src) { if (! src) return 0; *dest = *src; return dest; } struct tm * gmtime_r (time_t const * restrict t, struct tm * restrict tp) { return copy_tm_result (tp, gmtime (t)); } struct tm * localtime_r (time_t const * restrict t, struct tm * restrict tp) { return copy_tm_result (tp, localtime (t)); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unistd.c�������������������������������������������������������������0000644�0001750�0001750�00000001541�14557510505�013716� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <unistd.h>. Copyright (C) 2012-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define _GL_UNISTD_INLINE _GL_EXTERN_INLINE #include <unistd.h> typedef int dummy; ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/dup-safer.c����������������������������������������������������������0000644�0001750�0001750�00000002027�14557510505�014276� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke dup, but avoid some glitches. Copyright (C) 2001, 2004-2006, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include "unistd-safer.h" #include <fcntl.h> #include <unistd.h> /* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. */ int dup_safer (int fd) { return fcntl (fd, F_DUPFD, STDERR_FILENO + 1); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/fd-safer.c�����������������������������������������������������������0000644�0001750�0001750�00000003003�14557510505�014072� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return a safer copy of a file descriptor. Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include "unistd-safer.h" #include <errno.h> #include <unistd.h> /* Return FD, unless FD would be a copy of standard input, output, or error; in that case, return a duplicate of FD, closing FD. On failure to duplicate, close FD, set errno, and return -1. Preserve errno if FD is negative, so that the caller can always inspect errno when the returned value is negative. This function is usefully wrapped around functions that return file descriptors, e.g., fd_safer (open ("file", O_RDONLY)). */ int fd_safer (int fd) { if (STDIN_FILENO <= fd && fd <= STDERR_FILENO) { int f = dup_safer (fd); int e = errno; close (fd); errno = e; fd = f; } return fd; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/pipe-safer.c���������������������������������������������������������0000644�0001750�0001750�00000002626�14557510505�014450� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke pipe, but avoid some glitches. Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> #include "unistd-safer.h" #include <unistd.h> #include <errno.h> /* Like pipe, but ensure that neither of the file descriptors is STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. Fail with ENOSYS on platforms that lack pipe. */ int pipe_safer (int fd[2]) { if (pipe (fd) == 0) { int i; for (i = 0; i < 2; i++) { fd[i] = fd_safer (fd[i]); if (fd[i] < 0) { int saved_errno = errno; close (fd[1 - i]); errno = saved_errno; return -1; } } return 0; } return -1; } ����������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/wcrtomb.c������������������������������������������������������������0000644�0001750�0001750�00000004413�14557510505�014066� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to multibyte character. Copyright (C) 2008-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <errno.h> #include <stdlib.h> size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps) #undef wcrtomb { /* This implementation of wcrtomb supports only stateless encodings. ps must be in an initial state. */ if (ps != NULL && !mbsinit (ps)) { errno = EINVAL; return (size_t)(-1); } #if !HAVE_WCRTOMB /* IRIX 6.5 */ \ || WCRTOMB_RETVAL_BUG /* Solaris 11.3, MSVC */ \ || WCRTOMB_C_LOCALE_BUG /* Android */ if (s == NULL) /* We know the NUL wide character corresponds to the NUL character. */ return 1; else #endif { #if HAVE_WCRTOMB # if WCRTOMB_C_LOCALE_BUG /* Android */ /* Implement consistently with mbrtowc(): through a 1:1 correspondence, as in ISO-8859-1. */ if (wc >= 0 && wc <= 0xff) { *s = (unsigned char) wc; return 1; } else { errno = EILSEQ; return (size_t)(-1); } # else return wcrtomb (s, wc, ps); # endif #else /* IRIX 6.5 */ /* Fallback for platforms that don't have wcrtomb(). Implement on top of wctomb(). This code is not multithread-safe. */ int ret = wctomb (s, wc); if (ret >= 0) return ret; else { errno = EILSEQ; return (size_t)(-1); } #endif } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/wctype.c�������������������������������������������������������������0000644�0001750�0001750�00000001647�14557510505�013732� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get descriptor for a wide character property. Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wctype.h> #include <string.h> #include "wctype-impl.h" �����������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/wctype-h.c�����������������������������������������������������������0000644�0001750�0001750�00000001626�14557510505�014154� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <wctype.h>. Copyright (C) 2012-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Normally this would be wctype.c, but that name's already taken. */ #include <config.h> #define _GL_WCTYPE_INLINE _GL_EXTERN_INLINE #include <wctype.h> ����������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/wcwidth.c������������������������������������������������������������0000644�0001750�0001750�00000004174�14557510505�014066� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine the number of screen columns needed for a character. Copyright (C) 2006-2007, 2010-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> /* Get iswprint. */ #include <wctype.h> #include "localcharset.h" #include "streq.h" #include "uniwidth.h" /* Returns 1 if the current locale is an UTF-8 locale, 0 otherwise. */ static inline int is_locale_utf8 (void) { const char *encoding = locale_charset (); return STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0); } #if GNULIB_WCHAR_SINGLE_LOCALE /* When we know that the locale does not change, provide a speedup by caching the value of is_locale_utf8. */ static int cached_is_locale_utf8 = -1; static inline int is_locale_utf8_cached (void) { if (cached_is_locale_utf8 < 0) cached_is_locale_utf8 = is_locale_utf8 (); return cached_is_locale_utf8; } #else /* By default, don't make assumptions, hence no caching. */ # define is_locale_utf8_cached is_locale_utf8 #endif int wcwidth (wchar_t wc) #undef wcwidth { /* In UTF-8 locales, use a Unicode aware width function. */ if (is_locale_utf8_cached ()) { /* We assume that in a UTF-8 locale, a wide character is the same as a Unicode character. */ return uc_width (wc, "UTF-8"); } else { /* Otherwise, fall back to the system's wcwidth function. */ #if HAVE_WCWIDTH return wcwidth (wc); #else return wc == 0 ? 0 : iswprint (wc) ? 1 : -1; #endif } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/windows-mutex.c������������������������������������������������������0000644�0001750�0001750�00000005240�14557510505�015242� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain mutexes (native Windows implementation). Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-mutex.h" #include <errno.h> void glwthread_mutex_init (glwthread_mutex_t *mutex) { InitializeCriticalSection (&mutex->lock); mutex->guard.done = 1; } int glwthread_mutex_lock (glwthread_mutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_mutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!mutex->guard.done) Sleep (0); } } EnterCriticalSection (&mutex->lock); return 0; } int glwthread_mutex_trylock (glwthread_mutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_mutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Let another thread finish initializing this mutex, and let it also lock this mutex. */ return EBUSY; } } if (!TryEnterCriticalSection (&mutex->lock)) return EBUSY; return 0; } int glwthread_mutex_unlock (glwthread_mutex_t *mutex) { if (!mutex->guard.done) return EINVAL; LeaveCriticalSection (&mutex->lock); return 0; } int glwthread_mutex_destroy (glwthread_mutex_t *mutex) { if (!mutex->guard.done) return EINVAL; DeleteCriticalSection (&mutex->lock); mutex->guard.done = 0; return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/windows-once.c�������������������������������������������������������0000644�0001750�0001750�00000004416�14557510505�015030� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Once-only control (native Windows implementation). Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-once.h" #include <stdlib.h> void glwthread_once (glwthread_once_t *once_control, void (*initfunction) (void)) { if (once_control->inited <= 0) { if (InterlockedIncrement (&once_control->started) == 0) { /* This thread is the first one to come to this once_control. */ InitializeCriticalSection (&once_control->lock); EnterCriticalSection (&once_control->lock); once_control->inited = 0; initfunction (); once_control->inited = 1; LeaveCriticalSection (&once_control->lock); } else { /* Don't let once_control->started grow and wrap around. */ InterlockedDecrement (&once_control->started); /* Some other thread has already started the initialization. Yield the CPU while waiting for the other thread to finish initializing and taking the lock. */ while (once_control->inited < 0) Sleep (0); if (once_control->inited <= 0) { /* Take the lock. This blocks until the other thread has finished calling the initfunction. */ EnterCriticalSection (&once_control->lock); LeaveCriticalSection (&once_control->lock); if (!(once_control->inited > 0)) abort (); } } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/windows-recmutex.c���������������������������������������������������0000644�0001750�0001750�00000006542�14557510505�015742� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain recursive mutexes (native Windows implementation). Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-recmutex.h" #include <errno.h> void glwthread_recmutex_init (glwthread_recmutex_t *mutex) { mutex->owner = 0; mutex->depth = 0; InitializeCriticalSection (&mutex->lock); mutex->guard.done = 1; } int glwthread_recmutex_lock (glwthread_recmutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_recmutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!mutex->guard.done) Sleep (0); } } { DWORD self = GetCurrentThreadId (); if (mutex->owner != self) { EnterCriticalSection (&mutex->lock); mutex->owner = self; } if (++(mutex->depth) == 0) /* wraparound? */ { mutex->depth--; return EAGAIN; } } return 0; } int glwthread_recmutex_trylock (glwthread_recmutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_recmutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Let another thread finish initializing this mutex, and let it also lock this mutex. */ return EBUSY; } } { DWORD self = GetCurrentThreadId (); if (mutex->owner != self) { if (!TryEnterCriticalSection (&mutex->lock)) return EBUSY; mutex->owner = self; } if (++(mutex->depth) == 0) /* wraparound? */ { mutex->depth--; return EAGAIN; } } return 0; } int glwthread_recmutex_unlock (glwthread_recmutex_t *mutex) { if (mutex->owner != GetCurrentThreadId ()) return EPERM; if (mutex->depth == 0) return EINVAL; if (--(mutex->depth) == 0) { mutex->owner = 0; LeaveCriticalSection (&mutex->lock); } return 0; } int glwthread_recmutex_destroy (glwthread_recmutex_t *mutex) { if (mutex->owner != 0) return EBUSY; DeleteCriticalSection (&mutex->lock); mutex->guard.done = 0; return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/windows-rwlock.c�����������������������������������������������������0000644�0001750�0001750�00000027273�14557510505�015413� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read-write locks (native Windows implementation). Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-rwlock.h" #include <errno.h> #include <stdlib.h> /* Don't assume that UNICODE is not defined. */ #undef CreateEvent #define CreateEvent CreateEventA /* In this file, the waitqueues are implemented as circular arrays. */ #define glwthread_waitqueue_t glwthread_carray_waitqueue_t static void glwthread_waitqueue_init (glwthread_waitqueue_t *wq) { wq->array = NULL; wq->count = 0; wq->alloc = 0; wq->offset = 0; } /* Enqueues the current thread, represented by an event, in a wait queue. Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */ static HANDLE glwthread_waitqueue_add (glwthread_waitqueue_t *wq) { HANDLE event; unsigned int index; if (wq->count == wq->alloc) { unsigned int new_alloc = 2 * wq->alloc + 1; HANDLE *new_array = (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE)); if (new_array == NULL) /* No more memory. */ return INVALID_HANDLE_VALUE; /* Now is a good opportunity to rotate the array so that its contents starts at offset 0. */ if (wq->offset > 0) { unsigned int old_count = wq->count; unsigned int old_alloc = wq->alloc; unsigned int old_offset = wq->offset; unsigned int i; if (old_offset + old_count > old_alloc) { unsigned int limit = old_offset + old_count - old_alloc; for (i = 0; i < limit; i++) new_array[old_alloc + i] = new_array[i]; } for (i = 0; i < old_count; i++) new_array[i] = new_array[old_offset + i]; wq->offset = 0; } wq->array = new_array; wq->alloc = new_alloc; } /* Whether the created event is a manual-reset one or an auto-reset one, does not matter, since we will wait on it only once. */ event = CreateEvent (NULL, TRUE, FALSE, NULL); if (event == INVALID_HANDLE_VALUE) /* No way to allocate an event. */ return INVALID_HANDLE_VALUE; index = wq->offset + wq->count; if (index >= wq->alloc) index -= wq->alloc; wq->array[index] = event; wq->count++; return event; } /* Notifies the first thread from a wait queue and dequeues it. */ static void glwthread_waitqueue_notify_first (glwthread_waitqueue_t *wq) { SetEvent (wq->array[wq->offset + 0]); wq->offset++; wq->count--; if (wq->count == 0 || wq->offset == wq->alloc) wq->offset = 0; } /* Notifies all threads from a wait queue and dequeues them all. */ static void glwthread_waitqueue_notify_all (glwthread_waitqueue_t *wq) { unsigned int i; for (i = 0; i < wq->count; i++) { unsigned int index = wq->offset + i; if (index >= wq->alloc) index -= wq->alloc; SetEvent (wq->array[index]); } wq->count = 0; wq->offset = 0; } void glwthread_rwlock_init (glwthread_rwlock_t *lock) { InitializeCriticalSection (&lock->lock); glwthread_waitqueue_init (&lock->waiting_readers); glwthread_waitqueue_init (&lock->waiting_writers); lock->runcount = 0; lock->guard.done = 1; } int glwthread_rwlock_rdlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ HANDLE event = glwthread_waitqueue_add (&lock->waiting_readers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_readers, incremented lock->runcount. */ if (!(lock->runcount > 0)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount + 1 > 0)); } } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_wrlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ HANDLE event = glwthread_waitqueue_add (&lock->waiting_writers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_writers, set lock->runcount = -1. */ if (!(lock->runcount == -1)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount == 0)); } } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } /* It's OK to wait for this critical section, because it is never taken for a long time. */ EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) { /* This thread would have to wait for a while. Return instead. */ LeaveCriticalSection (&lock->lock); return EBUSY; } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } /* It's OK to wait for this critical section, because it is never taken for a long time. */ EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread would have to wait for a while. Return instead. */ LeaveCriticalSection (&lock->lock); return EBUSY; } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_unlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; EnterCriticalSection (&lock->lock); if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) abort (); lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { LeaveCriticalSection (&lock->lock); return EPERM; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers.count > 0) { /* Wake up one of the waiting writers. */ lock->runcount--; glwthread_waitqueue_notify_first (&lock->waiting_writers); } else { /* Wake up all waiting readers. */ lock->runcount += lock->waiting_readers.count; glwthread_waitqueue_notify_all (&lock->waiting_readers); } } LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_destroy (glwthread_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; if (lock->runcount != 0) return EBUSY; DeleteCriticalSection (&lock->lock); if (lock->waiting_readers.array != NULL) free (lock->waiting_readers.array); if (lock->waiting_writers.array != NULL) free (lock->waiting_writers.array); lock->guard.done = 0; return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/xsize.h��������������������������������������������������������������0000644�0001750�0001750�00000007065�14557510505�013566� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xsize.h -- Checked size_t computations. Copyright (C) 2003, 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _XSIZE_H #define _XSIZE_H /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, HAVE_STDINT_H. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Get size_t. */ #include <stddef.h> /* Get SIZE_MAX. */ #include <limits.h> #if HAVE_STDINT_H # include <stdint.h> #endif /* Get ATTRIBUTE_PURE. */ #include "attribute.h" _GL_INLINE_HEADER_BEGIN #ifndef XSIZE_INLINE # define XSIZE_INLINE _GL_INLINE #endif /* The size of memory objects is often computed through expressions of type size_t. Example: void* p = malloc (header_size + n * element_size). These computations can lead to overflow. When this happens, malloc() returns a piece of memory that is way too small, and the program then crashes while attempting to fill the memory. To avoid this, the functions and macros in this file check for overflow. The convention is that SIZE_MAX represents overflow. malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc implementation that uses mmap --, it's recommended to use size_overflow_p() or size_in_bounds_p() before invoking malloc(). The example thus becomes: size_t size = xsum (header_size, xtimes (n, element_size)); void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); */ /* Convert an arbitrary value >= 0 to type size_t. */ #define xcast_size_t(N) \ ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) /* Sum of two sizes, with overflow check. */ XSIZE_INLINE size_t ATTRIBUTE_PURE xsum (size_t size1, size_t size2) { size_t sum = size1 + size2; return (sum >= size1 ? sum : SIZE_MAX); } /* Sum of three sizes, with overflow check. */ XSIZE_INLINE size_t ATTRIBUTE_PURE xsum3 (size_t size1, size_t size2, size_t size3) { return xsum (xsum (size1, size2), size3); } /* Sum of four sizes, with overflow check. */ XSIZE_INLINE size_t ATTRIBUTE_PURE xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) { return xsum (xsum (xsum (size1, size2), size3), size4); } /* Maximum of two sizes, with overflow check. */ XSIZE_INLINE size_t ATTRIBUTE_PURE xmax (size_t size1, size_t size2) { /* No explicit check is needed here, because for any n: max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ return (size1 >= size2 ? size1 : size2); } /* Multiplication of a count with an element size, with overflow check. The count must be >= 0 and the element size must be > 0. This is a macro, not a function, so that it works correctly even when N is of a wider type and N > SIZE_MAX. */ #define xtimes(N, ELSIZE) \ ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) /* Check for overflow. */ #define size_overflow_p(SIZE) \ ((SIZE) == SIZE_MAX) /* Check against overflow. */ #define size_in_bounds_p(SIZE) \ ((SIZE) != SIZE_MAX) _GL_INLINE_HEADER_END #endif /* _XSIZE_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/xsize.c��������������������������������������������������������������0000644�0001750�0001750�00000001504�14557510505�013551� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Checked size_t computations. Copyright (C) 2012-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define XSIZE_INLINE _GL_EXTERN_INLINE #include "xsize.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/at-func.c������������������������������������������������������������0000644�0001750�0001750�00000010470�14557510504�013745� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Define at-style functions like fstatat, unlinkat, fchownat, etc. Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include "filename.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ #ifdef GNULIB_SUPPORT_ONLY_AT_FDCWD # include <errno.h> # ifndef ENOTSUP # define ENOTSUP EINVAL # endif #else # include "openat.h" # include "openat-priv.h" # include "save-cwd.h" #endif #ifdef AT_FUNC_USE_F1_COND # define CALL_FUNC(F) \ (flag == AT_FUNC_USE_F1_COND \ ? AT_FUNC_F1 (F AT_FUNC_POST_FILE_ARGS) \ : AT_FUNC_F2 (F AT_FUNC_POST_FILE_ARGS)) # define VALIDATE_FLAG(F) \ if (flag & ~AT_FUNC_USE_F1_COND) \ { \ errno = EINVAL; \ return FUNC_FAIL; \ } #else # define CALL_FUNC(F) (AT_FUNC_F1 (F AT_FUNC_POST_FILE_ARGS)) # define VALIDATE_FLAG(F) /* empty */ #endif #ifdef AT_FUNC_RESULT # define FUNC_RESULT AT_FUNC_RESULT #else # define FUNC_RESULT int #endif #ifdef AT_FUNC_FAIL # define FUNC_FAIL AT_FUNC_FAIL #else # define FUNC_FAIL -1 #endif /* Call AT_FUNC_F1 to operate on FILE, which is in the directory open on descriptor FD. If AT_FUNC_USE_F1_COND is defined to a value, AT_FUNC_POST_FILE_PARAM_DECLS must include a parameter named flag; call AT_FUNC_F2 if FLAG is 0 or fail if FLAG contains more bits than AT_FUNC_USE_F1_COND. Return int and fail with -1 unless AT_FUNC_RESULT or AT_FUNC_FAIL are defined. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then AT_FUNC_F?/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. */ FUNC_RESULT AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS) { VALIDATE_FLAG (flag); if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file)) return CALL_FUNC (file); #ifdef GNULIB_SUPPORT_ONLY_AT_FDCWD errno = ENOTSUP; return FUNC_FAIL; #else { /* Be careful to choose names unlikely to conflict with AT_FUNC_POST_FILE_PARAM_DECLS. */ struct saved_cwd saved_cwd; int saved_errno; FUNC_RESULT err; { char proc_buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (proc_buf, fd, file); if (proc_file) { FUNC_RESULT proc_result = CALL_FUNC (proc_file); int proc_errno = errno; if (proc_file != proc_buf) free (proc_file); /* If the syscall succeeds, or if it fails with an unexpected errno value, then return right away. Otherwise, fall through and resort to using save_cwd/restore_cwd. */ if (FUNC_FAIL != proc_result) return proc_result; if (! EXPECTED_ERRNO (proc_errno)) { errno = proc_errno; return proc_result; } } } if (save_cwd (&saved_cwd) != 0) openat_save_fail (errno); if (0 <= fd && fd == saved_cwd.desc) { /* If saving the working directory collides with the user's requested fd, then the user's fd must have been closed to begin with. */ free_cwd (&saved_cwd); errno = EBADF; return FUNC_FAIL; } if (fchdir (fd) != 0) { saved_errno = errno; free_cwd (&saved_cwd); errno = saved_errno; return FUNC_FAIL; } err = CALL_FUNC (file); saved_errno = (err == FUNC_FAIL ? errno : 0); if (restore_cwd (&saved_cwd) != 0) openat_restore_fail (errno); free_cwd (&saved_cwd); if (saved_errno) errno = saved_errno; return err; } #endif } #undef CALL_FUNC #undef FUNC_RESULT #undef FUNC_FAIL ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/stat-w32.c�����������������������������������������������������������0000644�0001750�0001750�00000044207�14557510505�014002� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Core of implementation of fstat and stat for native Windows. Copyright (C) 2017-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible. */ #include <config.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Attempt to make <windows.h> define FILE_ID_INFO. But ensure that the redefinition of _WIN32_WINNT does not make us assume Windows Vista or newer when building for an older version of Windows. */ #if HAVE_SDKDDKVER_H # include <sdkddkver.h> # if _WIN32_WINNT >= _WIN32_WINNT_VISTA # define WIN32_ASSUME_VISTA 1 # else # define WIN32_ASSUME_VISTA 0 # endif # if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN8) # undef _WIN32_WINNT # define _WIN32_WINNT _WIN32_WINNT_WIN8 # endif #else # define WIN32_ASSUME_VISTA (_WIN32_WINNT >= _WIN32_WINNT_VISTA) #endif #include <sys/types.h> #include <sys/stat.h> #include <errno.h> #include <limits.h> #include <string.h> #include <unistd.h> #include <windows.h> /* Specification. */ #include "stat-w32.h" #include "pathmax.h" /* Don't assume that UNICODE is not defined. */ #undef LoadLibrary #define LoadLibrary LoadLibraryA #undef GetFinalPathNameByHandle #define GetFinalPathNameByHandle GetFinalPathNameByHandleA /* Older mingw headers do not define VOLUME_NAME_NONE. */ #ifndef VOLUME_NAME_NONE # define VOLUME_NAME_NONE 4 #endif #if !WIN32_ASSUME_VISTA /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress # if _GL_WINDOWS_STAT_INODES == 2 /* GetFileInformationByHandleEx was introduced only in Windows Vista. */ typedef DWORD (WINAPI * GetFileInformationByHandleExFuncType) (HANDLE hFile, FILE_INFO_BY_HANDLE_CLASS fiClass, LPVOID lpBuffer, DWORD dwBufferSize); static GetFileInformationByHandleExFuncType GetFileInformationByHandleExFunc = NULL; # endif /* GetFinalPathNameByHandle was introduced only in Windows Vista. */ typedef DWORD (WINAPI * GetFinalPathNameByHandleFuncType) (HANDLE hFile, LPSTR lpFilePath, DWORD lenFilePath, DWORD dwFlags); static GetFinalPathNameByHandleFuncType GetFinalPathNameByHandleFunc = NULL; static BOOL initialized = FALSE; static void initialize (void) { HMODULE kernel32 = LoadLibrary ("kernel32.dll"); if (kernel32 != NULL) { # if _GL_WINDOWS_STAT_INODES == 2 GetFileInformationByHandleExFunc = (GetFileInformationByHandleExFuncType) GetProcAddress (kernel32, "GetFileInformationByHandleEx"); # endif GetFinalPathNameByHandleFunc = (GetFinalPathNameByHandleFuncType) GetProcAddress (kernel32, "GetFinalPathNameByHandleA"); } initialized = TRUE; } #else # define GetFileInformationByHandleExFunc GetFileInformationByHandleEx # define GetFinalPathNameByHandleFunc GetFinalPathNameByHandle #endif /* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ #if _GL_WINDOWS_STAT_TIMESPEC struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft) { struct timespec result; /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ unsigned long long since_1601 = ((unsigned long long) ft->dwHighDateTime << 32) | (unsigned long long) ft->dwLowDateTime; if (since_1601 == 0) { result.tv_sec = 0; result.tv_nsec = 0; } else { /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ unsigned long long since_1970 = since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; result.tv_sec = since_1970 / (unsigned long long) 10000000; result.tv_nsec = (unsigned long) (since_1970 % (unsigned long long) 10000000) * 100; } return result; } #else time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft) { /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ unsigned long long since_1601 = ((unsigned long long) ft->dwHighDateTime << 32) | (unsigned long long) ft->dwLowDateTime; if (since_1601 == 0) return 0; else { /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ unsigned long long since_1970 = since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; return since_1970 / (unsigned long long) 10000000; } } #endif /* Fill *BUF with information about the file designated by H. PATH is the file name, if known, otherwise NULL. Return 0 if successful, or -1 with errno set upon failure. */ int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf) { /* GetFileType <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletype> */ DWORD type = GetFileType (h); if (type == FILE_TYPE_DISK) { #if !WIN32_ASSUME_VISTA if (!initialized) initialize (); #endif /* st_mode can be determined through GetFileAttributesEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> or through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileBasicInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ BY_HANDLE_FILE_INFORMATION info; if (! GetFileInformationByHandle (h, &info)) goto failed; /* Test for error conditions before starting to fill *buf. */ if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) { errno = EOVERFLOW; return -1; } #if _GL_WINDOWS_STAT_INODES /* st_ino can be determined through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> as 64 bits, or through GetFileInformationByHandleEx with argument FileIdInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_id_info> as 128 bits. The latter requires -D_WIN32_WINNT=_WIN32_WINNT_WIN8 or higher. */ /* Experiments show that GetFileInformationByHandleEx does not provide much more information than GetFileInformationByHandle: * The dwVolumeSerialNumber from GetFileInformationByHandle is equal to the low 32 bits of the 64-bit VolumeSerialNumber from GetFileInformationByHandleEx, and is apparently sufficient for identifying the device. * The nFileIndex from GetFileInformationByHandle is equal to the low 64 bits of the 128-bit FileId from GetFileInformationByHandleEx, and the high 64 bits of this 128-bit FileId are zero. * On a FAT file system, GetFileInformationByHandleEx fails with error ERROR_INVALID_PARAMETER, whereas GetFileInformationByHandle succeeds. * On a CIFS/SMB file system, GetFileInformationByHandleEx fails with error ERROR_INVALID_LEVEL, whereas GetFileInformationByHandle succeeds. */ # if _GL_WINDOWS_STAT_INODES == 2 if (GetFileInformationByHandleExFunc != NULL) { FILE_ID_INFO id; if (GetFileInformationByHandleExFunc (h, FileIdInfo, &id, sizeof (id))) { buf->st_dev = id.VolumeSerialNumber; static_assert (sizeof (ino_t) == sizeof (id.FileId)); memcpy (&buf->st_ino, &id.FileId, sizeof (ino_t)); goto ino_done; } else { switch (GetLastError ()) { case ERROR_INVALID_PARAMETER: /* older Windows version, or FAT */ case ERROR_INVALID_LEVEL: /* CIFS/SMB file system */ goto fallback; default: goto failed; } } } fallback: ; /* Fallback for older Windows versions. */ buf->st_dev = info.dwVolumeSerialNumber; buf->st_ino._gl_ino[0] = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; buf->st_ino._gl_ino[1] = 0; ino_done: ; # else /* _GL_WINDOWS_STAT_INODES == 1 */ buf->st_dev = info.dwVolumeSerialNumber; buf->st_ino = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; # endif #else /* st_ino is not wide enough for identifying a file on a device. Without st_ino, st_dev is pointless. */ buf->st_dev = 0; buf->st_ino = 0; #endif /* st_mode. */ unsigned int mode = /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) | S_IREAD_UGO | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { /* Determine whether the file is executable by looking at the file name suffix. If the file name is already known, use it. Otherwise, for non-empty files, it can be determined through GetFinalPathNameByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfinalpathnamebyhandlea> or through GetFileInformationByHandleEx with argument FileNameInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_name_info> Both require -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) { char fpath[PATH_MAX]; if (path != NULL || (GetFinalPathNameByHandleFunc != NULL && GetFinalPathNameByHandleFunc (h, fpath, sizeof (fpath), VOLUME_NAME_NONE) < sizeof (fpath) && (path = fpath, 1))) { const char *last_dot = NULL; const char *p; for (p = path; *p != '\0'; p++) if (*p == '.') last_dot = p; if (last_dot != NULL) { const char *suffix = last_dot + 1; if (_stricmp (suffix, "exe") == 0 || _stricmp (suffix, "bat") == 0 || _stricmp (suffix, "cmd") == 0 || _stricmp (suffix, "com") == 0) mode |= S_IEXEC_UGO; } } else /* Cannot determine file name. Pretend that it is executable. */ mode |= S_IEXEC_UGO; } } buf->st_mode = mode; /* st_nlink can be determined through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileStandardInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ buf->st_nlink = (info.nNumberOfLinks > SHRT_MAX ? SHRT_MAX : info.nNumberOfLinks); /* There's no easy way to map the Windows SID concept to an integer. */ buf->st_uid = 0; buf->st_gid = 0; /* st_rdev is irrelevant for normal files and directories. */ buf->st_rdev = 0; /* st_size can be determined through GetFileSizeEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfilesizeex> or through GetFileAttributesEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> or through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileStandardInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ if (sizeof (buf->st_size) <= 4) /* Range check already done above. */ buf->st_size = info.nFileSizeLow; else buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; /* st_atime, st_mtime, st_ctime can be determined through GetFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletime> or through GetFileAttributesEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> or through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileBasicInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ #if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); #else buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); #endif return 0; } else if (type == FILE_TYPE_CHAR || type == FILE_TYPE_PIPE) { buf->st_dev = 0; #if _GL_WINDOWS_STAT_INODES == 2 buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; #else buf->st_ino = 0; #endif buf->st_mode = (type == FILE_TYPE_PIPE ? _S_IFIFO : _S_IFCHR); buf->st_nlink = 1; buf->st_uid = 0; buf->st_gid = 0; buf->st_rdev = 0; if (type == FILE_TYPE_PIPE) { /* PeekNamedPipe <https://msdn.microsoft.com/en-us/library/aa365779.aspx> */ DWORD bytes_available; if (PeekNamedPipe (h, NULL, 0, NULL, &bytes_available, NULL)) buf->st_size = bytes_available; else buf->st_size = 0; } else buf->st_size = 0; #if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim.tv_sec = 0; buf->st_atim.tv_nsec = 0; buf->st_mtim.tv_sec = 0; buf->st_mtim.tv_nsec = 0; buf->st_ctim.tv_sec = 0; buf->st_ctim.tv_nsec = 0; #else buf->st_atime = 0; buf->st_mtime = 0; buf->st_ctime = 0; #endif return 0; } else { errno = ENOENT; return -1; } failed: { DWORD error = GetLastError (); #if 0 fprintf (stderr, "_gl_fstat_by_handle error 0x%x\n", (unsigned int) error); #endif switch (error) { case ERROR_ACCESS_DENIED: case ERROR_SHARING_VIOLATION: errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; default: errno = EINVAL; break; } return -1; } } #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/isnan.c��������������������������������������������������������������0000644�0001750�0001750�00000015754�14557510505�013533� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> /* Specification. */ #ifdef USE_LONG_DOUBLE /* Specification found in math.h or isnanl-nolibm.h. */ extern int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; #elif ! defined USE_FLOAT /* Specification found in math.h or isnand-nolibm.h. */ extern int rpl_isnand (double x); #else /* defined USE_FLOAT */ /* Specification found in math.h or isnanf-nolibm.h. */ extern int rpl_isnanf (float x); #endif #include <float.h> #include <string.h> #include "float+.h" #ifdef USE_LONG_DOUBLE # define FUNC rpl_isnanl # define DOUBLE long double # define MAX_EXP LDBL_MAX_EXP # define MIN_EXP LDBL_MIN_EXP # if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT # define KNOWN_EXPBIT0_LOCATION # define EXPBIT0_WORD LDBL_EXPBIT0_WORD # define EXPBIT0_BIT LDBL_EXPBIT0_BIT # endif # define SIZE SIZEOF_LDBL # define L_(literal) literal##L #elif ! defined USE_FLOAT # define FUNC rpl_isnand # define DOUBLE double # define MAX_EXP DBL_MAX_EXP # define MIN_EXP DBL_MIN_EXP # if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT # define KNOWN_EXPBIT0_LOCATION # define EXPBIT0_WORD DBL_EXPBIT0_WORD # define EXPBIT0_BIT DBL_EXPBIT0_BIT # endif # define SIZE SIZEOF_DBL # define L_(literal) literal #else /* defined USE_FLOAT */ # define FUNC rpl_isnanf # define DOUBLE float # define MAX_EXP FLT_MAX_EXP # define MIN_EXP FLT_MIN_EXP # if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT # define KNOWN_EXPBIT0_LOCATION # define EXPBIT0_WORD FLT_EXPBIT0_WORD # define EXPBIT0_BIT FLT_EXPBIT0_BIT # endif # define SIZE SIZEOF_FLT # define L_(literal) literal##f #endif #define EXP_MASK ((MAX_EXP - MIN_EXP) | 7) #define NWORDS \ ((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double; /* Most hosts nowadays use IEEE floating point, so they use IEC 60559 representations, have infinities and NaNs, and do not trap on exceptions. Define IEEE_FLOATING_POINT if this host is one of the typical ones. The C23 macro __STDC_IEC_60559_BFP__ macro (or its cousin, the now-obsolescent C11 macro __STDC_IEC_559__) is close to what is wanted here, but is not quite right because this file does not require all the features of C23 Annex F (and works even with pre-C11 platforms, for that matter). */ #define IEEE_FLOATING_POINT (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \ && FLT_MIN_EXP == -125 && FLT_MAX_EXP == 128) int FUNC (DOUBLE x) { #if defined KNOWN_EXPBIT0_LOCATION && IEEE_FLOATING_POINT # if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Special CPU dependent code is needed to treat bit patterns outside the IEEE 754 specification (such as Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals) as NaNs. These bit patterns are: - exponent = 0x0001..0x7FFF, mantissa bit 63 = 0, - exponent = 0x0000, mantissa bit 63 = 1. The NaN bit pattern is: - exponent = 0x7FFF, mantissa >= 0x8000000000000001. */ memory_double m; unsigned int exponent; m.value = x; exponent = (m.word[EXPBIT0_WORD] >> EXPBIT0_BIT) & EXP_MASK; # ifdef WORDS_BIGENDIAN /* Big endian: EXPBIT0_WORD = 0, EXPBIT0_BIT = 16. */ if (exponent == 0) return 1 & (m.word[0] >> 15); else if (exponent == EXP_MASK) return (((m.word[0] ^ 0x8000U) << 16) | m.word[1] | (m.word[2] >> 16)) != 0; else return 1 & ~(m.word[0] >> 15); # else /* Little endian: EXPBIT0_WORD = 2, EXPBIT0_BIT = 0. */ if (exponent == 0) return (m.word[1] >> 31); else if (exponent == EXP_MASK) return ((m.word[1] ^ 0x80000000U) | m.word[0]) != 0; else return (m.word[1] >> 31) ^ 1; # endif # else /* Be careful to not do any floating-point operation on x, such as x == x, because x may be a signaling NaN. */ # if defined __SUNPRO_C || defined __ICC || defined _MSC_VER \ || defined __DECC || defined __TINYC__ \ || (defined __sgi && !defined __GNUC__) /* The Sun C 5.0, Intel ICC 10.0, Microsoft Visual C/C++ 9.0, Compaq (ex-DEC) 6.4, and TinyCC compilers don't recognize the initializers as constant expressions. The Compaq compiler also fails when constant-folding 0.0 / 0.0 even when constant-folding is not required. The Microsoft Visual C/C++ compiler also fails when constant-folding 1.0 / 0.0 even when constant-folding is not required. The SGI MIPSpro C compiler complains about "floating-point operation result is out of range". */ static DOUBLE zero = L_(0.0); memory_double nan; DOUBLE plus_inf = L_(1.0) / zero; DOUBLE minus_inf = -L_(1.0) / zero; nan.value = zero / zero; # else static memory_double nan = { L_(0.0) / L_(0.0) }; static DOUBLE plus_inf = L_(1.0) / L_(0.0); static DOUBLE minus_inf = -L_(1.0) / L_(0.0); # endif { memory_double m; /* A NaN can be recognized through its exponent. But exclude +Infinity and -Infinity, which have the same exponent. */ m.value = x; if (((m.word[EXPBIT0_WORD] ^ nan.word[EXPBIT0_WORD]) & (EXP_MASK << EXPBIT0_BIT)) == 0) return (memcmp (&m.value, &plus_inf, SIZE) != 0 && memcmp (&m.value, &minus_inf, SIZE) != 0); else return 0; } # endif #else /* The configuration did not find sufficient information, or does not use IEEE floating point. Give up about the signaling NaNs; handle only the quiet NaNs. */ if (x == x) { # if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Detect any special bit patterns that pass ==; see comment above. */ memory_double m1; memory_double m2; memset (&m1.value, 0, SIZE); memset (&m2.value, 0, SIZE); m1.value = x; m2.value = x + (x ? 0.0L : -0.0L); if (memcmp (&m1.value, &m2.value, SIZE) != 0) return 1; # endif return 0; } else return 1; #endif } ��������������������gnuastro-0.22/bootstrapped/lib/isnand.c�������������������������������������������������������������0000644�0001750�0001750�00000001511�14557510505�013661� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include "isnan.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/isnanf.c�������������������������������������������������������������0000644�0001750�0001750�00000001541�14557510505�013666� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #define USE_FLOAT #include "isnan.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/isnanl.c�������������������������������������������������������������0000644�0001750�0001750�00000001547�14557510505�013702� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #define USE_LONG_DOUBLE #include "isnan.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/malloc.c�������������������������������������������������������������0000644�0001750�0001750�00000002430�14557510505�013655� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* malloc() function that is glibc compatible. Copyright (C) 1997-1998, 2006-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> #include <stdlib.h> #include <errno.h> #include "xalloc-oversized.h" /* Allocate an N-byte block of memory from the heap, even if N is 0. */ void * rpl_malloc (size_t n) { if (n == 0) n = 1; if (xalloc_oversized (n, 1)) { errno = ENOMEM; return NULL; } void *result = malloc (n); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/lc-charset-dispatch.c������������������������������������������������0000644�0001750�0001750�00000005220�14557510505�016230� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dispatching based on the current locale's character encoding. Copyright (C) 2018-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2018. */ #include <config.h> /* Specification. */ #include "lc-charset-dispatch.h" #if GNULIB_defined_mbstate_t # include "localcharset.h" # include "streq.h" # if GNULIB_WCHAR_SINGLE_LOCALE /* When we know that the locale does not change, provide a speedup by caching the value of locale_encoding_classification. */ # define locale_encoding_classification_cached locale_encoding_classification # else /* By default, don't make assumptions, hence no caching. */ # define locale_encoding_classification_uncached locale_encoding_classification # endif # if GNULIB_WCHAR_SINGLE_LOCALE static inline # endif enc_t locale_encoding_classification_uncached (void) { const char *encoding = locale_charset (); if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) return enc_utf8; if (STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)) return enc_eucjp; if (STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)) return enc_94; if (STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)) return enc_euctw; if (STREQ_OPT (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0)) return enc_gb18030; if (STREQ_OPT (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0)) return enc_sjis; return enc_other; } # if GNULIB_WCHAR_SINGLE_LOCALE static int cached_locale_enc = -1; enc_t locale_encoding_classification_cached (void) { if (cached_locale_enc < 0) cached_locale_enc = locale_encoding_classification_uncached (); return cached_locale_enc; } # endif #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbtowc-lock.c��������������������������������������������������������0000644�0001750�0001750�00000010617�14557510505�014635� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the internal lock used by mbrtowc and mbrtoc32. Copyright (C) 2019-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */ #include <config.h> /* The option '--disable-threads' explicitly requests no locking. */ /* When it is known that the gl_get_mbtowc_lock function is defined by a dependency library, it should not be defined here. */ #if AVOID_ANY_THREADS || OMIT_MBTOWC_LOCK /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #else /* This file defines the internal lock used by mbrtowc and mbrtoc32. It is a separate compilation unit, so that only one copy of it is present when linking statically. */ /* Prohibit renaming this symbol. */ # undef gl_get_mbtowc_lock /* Macro for exporting a symbol (function, not variable) defined in this file, when compiled into a shared library. */ # ifndef SHLIB_EXPORTED # if HAVE_VISIBILITY /* Override the effect of the compiler option '-fvisibility=hidden'. */ # define SHLIB_EXPORTED __attribute__((__visibility__("default"))) # elif defined _WIN32 || defined __CYGWIN__ # define SHLIB_EXPORTED __declspec(dllexport) # else # define SHLIB_EXPORTED # endif # endif # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-initguard.h" /* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', because the latter is not guaranteed to be a stable ABI in the future. */ /* Make sure the function gets exported from DLLs. */ SHLIB_EXPORTED CRITICAL_SECTION *gl_get_mbtowc_lock (void); static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; static CRITICAL_SECTION lock; /* Returns the internal lock used by mbrtowc and mbrtoc32. */ CRITICAL_SECTION * gl_get_mbtowc_lock (void) { if (!guard.done) { if (InterlockedIncrement (&guard.started) == 0) { /* This thread is the first one to need the lock. Initialize it. */ InitializeCriticalSection (&lock); guard.done = 1; } else { /* Don't let guard.started grow and wrap around. */ InterlockedDecrement (&guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!guard.done) Sleep (0); } } return &lock; } # elif HAVE_PTHREAD_API # include <pthread.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Make sure the function gets exported from shared libraries. */ SHLIB_EXPORTED pthread_mutex_t *gl_get_mbtowc_lock (void); /* Returns the internal lock used by mbrtowc and mbrtoc32. */ pthread_mutex_t * gl_get_mbtowc_lock (void) { return &mutex; } # elif HAVE_THREADS_H # include <threads.h> # include <stdlib.h> static int volatile init_needed = 1; static once_flag init_once = ONCE_FLAG_INIT; static mtx_t mutex; static void atomic_init (void) { if (mtx_init (&mutex, mtx_plain) != thrd_success) abort (); init_needed = 0; } /* Make sure the function gets exported from shared libraries. */ SHLIB_EXPORTED mtx_t *gl_get_mbtowc_lock (void); /* Returns the internal lock used by mbrtowc and mbrtoc32. */ mtx_t * gl_get_mbtowc_lock (void) { if (init_needed) call_once (&init_once, atomic_init); return &mutex; } # endif # if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER /* Make sure the '__declspec(dllimport)' in mbrtowc.c and mbrtoc32.c does not cause a link failure when no DLLs are involved. */ # if defined _WIN64 || defined _LP64 # define IMP(x) __imp_##x # else # define IMP(x) _imp__##x # endif void * IMP(gl_get_mbtowc_lock) = &gl_get_mbtowc_lock; # endif #endif �����������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mktime.c�������������������������������������������������������������0000644�0001750�0001750�00000045321�14557510505�013702� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert a 'struct tm' to a time_t value. Copyright (C) 1993-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Eggert <eggert@twinsun.com>. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* The following macros influence what gets defined when this file is compiled: Macro/expression Which gnulib module This compilation unit should define _LIBC (glibc proper) mktime NEED_MKTIME_WORKING mktime rpl_mktime || NEED_MKTIME_WINDOWS NEED_MKTIME_INTERNAL mktime-internal mktime_internal */ #ifndef _LIBC # include <libc-config.h> #endif /* Assume that leap seconds are possible, unless told otherwise. If the host has a 'zic' command with a '-L leapsecondfilename' option, then it supports leap seconds; otherwise it probably doesn't. */ #ifndef LEAP_SECONDS_POSSIBLE # define LEAP_SECONDS_POSSIBLE 1 #endif #include <time.h> #include <errno.h> #include <limits.h> #include <stdbool.h> #include <stdckdint.h> #include <stdlib.h> #include <string.h> #include <intprops.h> #include <verify.h> #ifndef NEED_MKTIME_INTERNAL # define NEED_MKTIME_INTERNAL 0 #endif #ifndef NEED_MKTIME_WINDOWS # define NEED_MKTIME_WINDOWS 0 #endif #ifndef NEED_MKTIME_WORKING # define NEED_MKTIME_WORKING 0 #endif #include "mktime-internal.h" #if !defined _LIBC && (NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS) static void my_tzset (void) { # if NEED_MKTIME_WINDOWS /* Rectify the value of the environment variable TZ. There are four possible kinds of such values: - Traditional US time zone names, e.g. "PST8PDT". Syntax: see <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> - Time zone names based on geography, that contain one or more slashes, e.g. "Europe/Moscow". - Time zone names based on geography, without slashes, e.g. "Singapore". - Time zone names that contain explicit DST rules. Syntax: see <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03> The Microsoft CRT understands only the first kind. It produces incorrect results if the value of TZ is of the other kinds. But in a Cygwin environment, /etc/profile.d/tzset.sh sets TZ to a value of the second kind for most geographies, or of the first kind in a few other geographies. If it is of the second kind, neutralize it. For the Microsoft CRT, an absent or empty TZ means the time zone that the user has set in the Windows Control Panel. If the value of TZ is of the third or fourth kind -- Cygwin programs understand these syntaxes as well --, it does not matter whether we neutralize it or not, since these values occur only when a Cygwin user has set TZ explicitly; this case is 1. rare and 2. under the user's responsibility. */ const char *tz = getenv ("TZ"); if (tz != NULL && strchr (tz, '/') != NULL) _putenv ("TZ="); # else tzset (); # endif } # undef __tzset # define __tzset() my_tzset () #endif #if defined _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_INTERNAL /* A signed type that can represent an integer number of years multiplied by four times the number of seconds in a year. It is needed when converting a tm_year value times the number of seconds in a year. The factor of four comes because these products need to be subtracted from each other, and sometimes with an offset added to them, and then with another timestamp added, without worrying about overflow. Much of the code uses long_int to represent __time64_t values, to lessen the hassle of dealing with platforms where __time64_t is unsigned, and because long_int should suffice to represent all __time64_t values that mktime can generate even on platforms where __time64_t is wider than the int components of struct tm. */ #if INT_MAX <= LONG_MAX / 4 / 366 / 24 / 60 / 60 typedef long int long_int; #else typedef long long int long_int; #endif verify (INT_MAX <= TYPE_MAXIMUM (long_int) / 4 / 366 / 24 / 60 / 60); /* Shift A right by B bits portably, by dividing A by 2**B and truncating towards minus infinity. B should be in the range 0 <= B <= LONG_INT_BITS - 2, where LONG_INT_BITS is the number of useful bits in a long_int. LONG_INT_BITS is at least 32. ISO C99 says that A >> B is implementation-defined if A < 0. Some implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift right in the usual way when A < 0, so SHR falls back on division if ordinary A >> B doesn't seem to be the usual signed shift. */ static long_int shr (long_int a, int b) { long_int one = 1; return (-one >> 1 == -1 ? a >> b : (a + (a < 0)) / (one << b) - (a < 0)); } /* Bounds for the intersection of __time64_t and long_int. */ static long_int const mktime_min = ((TYPE_SIGNED (__time64_t) && TYPE_MINIMUM (__time64_t) < TYPE_MINIMUM (long_int)) ? TYPE_MINIMUM (long_int) : TYPE_MINIMUM (__time64_t)); static long_int const mktime_max = (TYPE_MAXIMUM (long_int) < TYPE_MAXIMUM (__time64_t) ? TYPE_MAXIMUM (long_int) : TYPE_MAXIMUM (__time64_t)); #define EPOCH_YEAR 1970 #define TM_YEAR_BASE 1900 verify (TM_YEAR_BASE % 100 == 0); /* Is YEAR + TM_YEAR_BASE a leap year? */ static bool leapyear (long_int year) { /* Don't add YEAR to TM_YEAR_BASE, as that might overflow. Also, work even if YEAR is negative. */ return ((year & 3) == 0 && (year % 100 != 0 || ((year / 100) & 3) == (- (TM_YEAR_BASE / 100) & 3))); } /* How many days come before each month (0-12). */ #ifndef _LIBC static #endif const unsigned short int __mon_yday[2][13] = { /* Normal years. */ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, /* Leap years. */ { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } }; /* Do the values A and B differ according to the rules for tm_isdst? A and B differ if one is zero and the other positive. */ static bool isdst_differ (int a, int b) { return (!a != !b) && (0 <= a) && (0 <= b); } /* Return an integer value measuring (YEAR1-YDAY1 HOUR1:MIN1:SEC1) - (YEAR0-YDAY0 HOUR0:MIN0:SEC0) in seconds, assuming that the clocks were not adjusted between the timestamps. The YEAR values uses the same numbering as TP->tm_year. Values need not be in the usual range. However, YEAR1 - YEAR0 must not overflow even when multiplied by three times the number of seconds in a year, and likewise for YDAY1 - YDAY0 and three times the number of seconds in a day. */ static long_int ydhms_diff (long_int year1, long_int yday1, int hour1, int min1, int sec1, int year0, int yday0, int hour0, int min0, int sec0) { verify (-1 / 2 == 0); /* Compute intervening leap days correctly even if year is negative. Take care to avoid integer overflow here. */ int a4 = shr (year1, 2) + shr (TM_YEAR_BASE, 2) - ! (year1 & 3); int b4 = shr (year0, 2) + shr (TM_YEAR_BASE, 2) - ! (year0 & 3); int a100 = (a4 + (a4 < 0)) / 25 - (a4 < 0); int b100 = (b4 + (b4 < 0)) / 25 - (b4 < 0); int a400 = shr (a100, 2); int b400 = shr (b100, 2); int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); /* Compute the desired time without overflowing. */ long_int years = year1 - year0; long_int days = 365 * years + yday1 - yday0 + intervening_leap_days; long_int hours = 24 * days + hour1 - hour0; long_int minutes = 60 * hours + min1 - min0; long_int seconds = 60 * minutes + sec1 - sec0; return seconds; } /* Return the average of A and B, even if A + B would overflow. Round toward positive infinity. */ static long_int long_int_avg (long_int a, long_int b) { return shr (a, 1) + shr (b, 1) + ((a | b) & 1); } /* Return a long_int value corresponding to (YEAR-YDAY HOUR:MIN:SEC) minus *TP seconds, assuming no clock adjustments occurred between the two timestamps. YEAR and YDAY must not be so large that multiplying them by three times the number of seconds in a year (or day, respectively) would overflow long_int. *TP should be in the usual range. */ static long_int tm_diff (long_int year, long_int yday, int hour, int min, int sec, struct tm const *tp) { return ydhms_diff (year, yday, hour, min, sec, tp->tm_year, tp->tm_yday, tp->tm_hour, tp->tm_min, tp->tm_sec); } /* Use CONVERT to convert T to a struct tm value in *TM. T must be in range for __time64_t. Return TM if successful, NULL (setting errno) on failure. */ static struct tm * convert_time (struct tm *(*convert) (const __time64_t *, struct tm *), long_int t, struct tm *tm) { __time64_t x = t; return convert (&x, tm); } /* Use CONVERT to convert *T to a broken down time in *TP. If *T is out of range for conversion, adjust it so that it is the nearest in-range value and then convert that. A value is in range if it fits in both __time64_t and long_int. Return TP on success, NULL (setting errno) on failure. */ static struct tm * ranged_convert (struct tm *(*convert) (const __time64_t *, struct tm *), long_int *t, struct tm *tp) { long_int t1 = (*t < mktime_min ? mktime_min : *t <= mktime_max ? *t : mktime_max); struct tm *r = convert_time (convert, t1, tp); if (r) { *t = t1; return r; } if (errno != EOVERFLOW) return NULL; long_int bad = t1; long_int ok = 0; struct tm oktm; oktm.tm_sec = -1; /* BAD is a known out-of-range value, and OK is a known in-range one. Use binary search to narrow the range between BAD and OK until they differ by 1. */ while (true) { long_int mid = long_int_avg (ok, bad); if (mid == ok || mid == bad) break; if (convert_time (convert, mid, tp)) ok = mid, oktm = *tp; else if (errno != EOVERFLOW) return NULL; else bad = mid; } if (oktm.tm_sec < 0) return NULL; *t = ok; *tp = oktm; return tp; } /* Convert *TP to a __time64_t value, inverting the monotonic and mostly-unit-linear conversion function CONVERT. Use *OFFSET to keep track of a guess at the offset of the result, compared to what the result would be for UTC without leap seconds. If *OFFSET's guess is correct, only one CONVERT call is needed. If successful, set *TP to the canonicalized struct tm; otherwise leave *TP alone, return ((time_t) -1) and set errno. This function is external because it is used also by timegm.c. */ __time64_t __mktime_internal (struct tm *tp, struct tm *(*convert) (const __time64_t *, struct tm *), mktime_offset_t *offset) { struct tm tm; /* The maximum number of probes (calls to CONVERT) should be enough to handle any combinations of time zone rule changes, solar time, leap seconds, and oscillations around a spring-forward gap. POSIX.1 prohibits leap seconds, but some hosts have them anyway. */ int remaining_probes = 6; /* Time requested. Copy it in case CONVERT modifies *TP; this can occur if TP is localtime's returned value and CONVERT is localtime. */ int sec = tp->tm_sec; int min = tp->tm_min; int hour = tp->tm_hour; int mday = tp->tm_mday; int mon = tp->tm_mon; int year_requested = tp->tm_year; int isdst = tp->tm_isdst; /* 1 if the previous probe was DST. */ int dst2 = 0; /* Ensure that mon is in range, and set year accordingly. */ int mon_remainder = mon % 12; int negative_mon_remainder = mon_remainder < 0; int mon_years = mon / 12 - negative_mon_remainder; long_int lyear_requested = year_requested; long_int year = lyear_requested + mon_years; /* The other values need not be in range: the remaining code handles overflows correctly. */ /* Calculate day of year from year, month, and day of month. The result need not be in range. */ int mon_yday = ((__mon_yday[leapyear (year)] [mon_remainder + 12 * negative_mon_remainder]) - 1); long_int lmday = mday; long_int yday = mon_yday + lmday; mktime_offset_t off = *offset; int negative_offset_guess; int sec_requested = sec; if (LEAP_SECONDS_POSSIBLE) { /* Handle out-of-range seconds specially, since ydhms_diff assumes every minute has 60 seconds. */ if (sec < 0) sec = 0; if (59 < sec) sec = 59; } /* Invert CONVERT by probing. First assume the same offset as last time. */ ckd_sub (&negative_offset_guess, 0, off); long_int t0 = ydhms_diff (year, yday, hour, min, sec, EPOCH_YEAR - TM_YEAR_BASE, 0, 0, 0, negative_offset_guess); long_int t = t0, t1 = t0, t2 = t0; /* Repeatedly use the error to improve the guess. */ while (true) { if (! ranged_convert (convert, &t, &tm)) return -1; long_int dt = tm_diff (year, yday, hour, min, sec, &tm); if (dt == 0) break; if (t == t1 && t != t2 && (tm.tm_isdst < 0 || (isdst < 0 ? dst2 <= (tm.tm_isdst != 0) : (isdst != 0) != (tm.tm_isdst != 0)))) /* We can't possibly find a match, as we are oscillating between two values. The requested time probably falls within a spring-forward gap of size DT. Follow the common practice in this case, which is to return a time that is DT away from the requested time, preferring a time whose tm_isdst differs from the requested value. (If no tm_isdst was requested and only one of the two values has a nonzero tm_isdst, prefer that value.) In practice, this is more useful than returning -1. */ goto offset_found; remaining_probes--; if (remaining_probes == 0) { __set_errno (EOVERFLOW); return -1; } t1 = t2, t2 = t, t += dt, dst2 = tm.tm_isdst != 0; } /* We have a match. Check whether tm.tm_isdst has the requested value, if any. */ if (isdst_differ (isdst, tm.tm_isdst)) { /* tm.tm_isdst has the wrong value. Look for a neighboring time with the right value, and use its UTC offset. Heuristic: probe the adjacent timestamps in both directions, looking for the desired isdst. If none is found within a reasonable duration bound, assume a one-hour DST difference. This should work for all real time zone histories in the tz database. */ /* +1 if we wanted standard time but got DST, -1 if the reverse. */ int dst_difference = (isdst == 0) - (tm.tm_isdst == 0); /* Distance between probes when looking for a DST boundary. In tzdata2003a, the shortest period of DST is 601200 seconds (e.g., America/Recife starting 2000-10-08 01:00), and the shortest period of non-DST surrounded by DST is 694800 seconds (Africa/Tunis starting 1943-04-17 01:00). Use the minimum of these two values, so we don't miss these short periods when probing. */ int stride = 601200; /* In TZDB 2021e, the longest period of DST (or of non-DST), in which the DST (or adjacent DST) difference is not one hour, is 457243209 seconds: e.g., America/Cambridge_Bay with leap seconds, starting 1965-10-31 00:00 in a switch from double-daylight time (-05) to standard time (-07), and continuing to 1980-04-27 02:00 in a switch from standard time (-07) to daylight time (-06). */ int duration_max = 457243209; /* Search in both directions, so the maximum distance is half the duration; add the stride to avoid off-by-1 problems. */ int delta_bound = duration_max / 2 + stride; int delta, direction; for (delta = stride; delta < delta_bound; delta += stride) for (direction = -1; direction <= 1; direction += 2) { long_int ot; if (! ckd_add (&ot, t, delta * direction)) { struct tm otm; if (! ranged_convert (convert, &ot, &otm)) return -1; if (! isdst_differ (isdst, otm.tm_isdst)) { /* We found the desired tm_isdst. Extrapolate back to the desired time. */ long_int gt = ot + tm_diff (year, yday, hour, min, sec, &otm); if (mktime_min <= gt && gt <= mktime_max) { if (convert_time (convert, gt, &tm)) { t = gt; goto offset_found; } if (errno != EOVERFLOW) return -1; } } } } /* No unusual DST offset was found nearby. Assume one-hour DST. */ t += 60 * 60 * dst_difference; if (mktime_min <= t && t <= mktime_max && convert_time (convert, t, &tm)) goto offset_found; __set_errno (EOVERFLOW); return -1; } offset_found: /* Set *OFFSET to the low-order bits of T - T0 - NEGATIVE_OFFSET_GUESS. This is just a heuristic to speed up the next mktime call, and correctness is unaffected if integer overflow occurs here. */ ckd_sub (offset, t, t0); ckd_sub (offset, *offset, negative_offset_guess); if (LEAP_SECONDS_POSSIBLE && sec_requested != tm.tm_sec) { /* Adjust time to reflect the tm_sec requested, not the normalized value. Also, repair any damage from a false match due to a leap second. */ long_int sec_adjustment = sec == 0 && tm.tm_sec == 60; sec_adjustment -= sec; sec_adjustment += sec_requested; if (ckd_add (&t, t, sec_adjustment) || ! (mktime_min <= t && t <= mktime_max)) { __set_errno (EOVERFLOW); return -1; } if (! convert_time (convert, t, &tm)) return -1; } *tp = tm; return t; } #endif /* _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_INTERNAL */ #if defined _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS /* Convert *TP to a __time64_t value. */ __time64_t __mktime64 (struct tm *tp) { /* POSIX.1 8.1.1 requires that whenever mktime() is called, the time zone names contained in the external variable 'tzname' shall be set as if the tzset() function had been called. */ __tzset (); # if defined _LIBC || NEED_MKTIME_WORKING static mktime_offset_t localtime_offset; return __mktime_internal (tp, __localtime64_r, &localtime_offset); # else # undef mktime return mktime (tp); # endif } #endif /* _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS */ #if defined _LIBC && __TIMESIZE != 64 libc_hidden_def (__mktime64) time_t mktime (struct tm *tp) { struct tm tm = *tp; __time64_t t = __mktime64 (&tm); if (in_time_t_range (t)) { *tp = tm; return t; } else { __set_errno (EOVERFLOW); return -1; } } #endif weak_alias (mktime, timelocal) libc_hidden_def (mktime) libc_hidden_weak (timelocal) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/realloc.c������������������������������������������������������������0000644�0001750�0001750�00000003131�14557510505�014026� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* realloc() function that is glibc compatible. Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ #include <config.h> #include <stdlib.h> #include <errno.h> #include "xalloc-oversized.h" /* Call the system's realloc below. This file does not define _GL_USE_STDLIB_ALLOC because it needs Gnulib's malloc if present. */ #undef realloc /* Change the size of an allocated block of memory P to N bytes, with error checking. If P is NULL, use malloc. Otherwise if N is zero, free P and return NULL. */ void * rpl_realloc (void *p, size_t n) { if (p == NULL) return malloc (n); if (n == 0) { free (p); return NULL; } if (xalloc_oversized (n, 1)) { errno = ENOMEM; return NULL; } void *result = realloc (p, n); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/regcomp.c������������������������������������������������������������0000644�0001750�0001750�00000332676�14557510505�014064� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifdef _LIBC # include <locale/weight.h> #endif static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, size_t length, reg_syntax_t syntax); static void re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, char *fastmap); static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len); static void free_charset (re_charset_t *cset); static void free_workarea_compile (regex_t *preg); static reg_errcode_t create_initial_state (re_dfa_t *dfa); static void optimize_utf8 (re_dfa_t *dfa); static reg_errcode_t analyze (regex_t *preg); static reg_errcode_t preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra); static reg_errcode_t postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra); static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node); static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node); static bin_tree_t *lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node); static reg_errcode_t calc_first (void *extra, bin_tree_t *node); static reg_errcode_t calc_next (void *extra, bin_tree_t *node); static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node); static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint); static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, unsigned int constraint); static reg_errcode_t calc_eclosure (re_dfa_t *dfa); static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root); static reg_errcode_t calc_inveclosure (re_dfa_t *dfa); static Idx fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax); static int peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax); static bin_tree_t *parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, reg_errcode_t *err); static bin_tree_t *parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_dup_op (bin_tree_t *dup_elem, re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err); static bin_tree_t *parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err); static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token, int token_len, re_dfa_t *dfa, reg_syntax_t syntax, bool accept_hyphen); static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token); static reg_errcode_t build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, Idx *equiv_class_alloc, const unsigned char *name); static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, re_charset_t *mbcset, Idx *char_class_alloc, const char *class_name, reg_syntax_t syntax); static bin_tree_t *build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, const char *class_name, const char *extra, bool non_match, reg_errcode_t *err); static bin_tree_t *create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, re_token_type_t type); static bin_tree_t *create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, const re_token_t *token); static bin_tree_t *duplicate_tree (const bin_tree_t *src, re_dfa_t *dfa); static void free_token (re_token_t *node); static reg_errcode_t free_tree (void *extra, bin_tree_t *node); static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node); /* This table gives an error message for each of the error codes listed in regex.h. Obviously the order here has to be same as there. POSIX doesn't require that we do anything for REG_NOERROR, but why not be nice? */ static const char __re_error_msgid[] = { #define REG_NOERROR_IDX 0 gettext_noop ("Success") /* REG_NOERROR */ "\0" #define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success") gettext_noop ("No match") /* REG_NOMATCH */ "\0" #define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match") gettext_noop ("Invalid regular expression") /* REG_BADPAT */ "\0" #define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression") gettext_noop ("Invalid collation character") /* REG_ECOLLATE */ "\0" #define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character") gettext_noop ("Invalid character class name") /* REG_ECTYPE */ "\0" #define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name") gettext_noop ("Trailing backslash") /* REG_EESCAPE */ "\0" #define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash") gettext_noop ("Invalid back reference") /* REG_ESUBREG */ "\0" #define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference") gettext_noop ("Unmatched [, [^, [:, [., or [=") /* REG_EBRACK */ "\0" #define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [, [^, [:, [., or [=") gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */ "\0" #define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(") gettext_noop ("Unmatched \\{") /* REG_EBRACE */ "\0" #define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{") gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */ "\0" #define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}") gettext_noop ("Invalid range end") /* REG_ERANGE */ "\0" #define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end") gettext_noop ("Memory exhausted") /* REG_ESPACE */ "\0" #define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted") gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */ "\0" #define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression") gettext_noop ("Premature end of regular expression") /* REG_EEND */ "\0" #define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression") gettext_noop ("Regular expression too big") /* REG_ESIZE */ "\0" #define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big") gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ }; static const size_t __re_error_msgid_idx[] = { REG_NOERROR_IDX, REG_NOMATCH_IDX, REG_BADPAT_IDX, REG_ECOLLATE_IDX, REG_ECTYPE_IDX, REG_EESCAPE_IDX, REG_ESUBREG_IDX, REG_EBRACK_IDX, REG_EPAREN_IDX, REG_EBRACE_IDX, REG_BADBR_IDX, REG_ERANGE_IDX, REG_ESPACE_IDX, REG_BADRPT_IDX, REG_EEND_IDX, REG_ESIZE_IDX, REG_ERPAREN_IDX }; /* Entry points for GNU code. */ /* re_compile_pattern is the GNU regular expression compiler: it compiles PATTERN (of length LENGTH) and puts the result in BUFP. Returns 0 if the pattern was valid, otherwise an error string. Assumes the 'allocated' (and perhaps 'buffer') and 'translate' fields are set in BUFP on entry. */ const char * re_compile_pattern (const char *pattern, size_t length, struct re_pattern_buffer *bufp) { reg_errcode_t ret; /* And GNU code determines whether or not to get register information by passing null for the REGS argument to re_match, etc., not by setting no_sub, unless RE_NO_SUB is set. */ bufp->no_sub = !!(re_syntax_options & RE_NO_SUB); /* Match anchors at newline. */ bufp->newline_anchor = 1; ret = re_compile_internal (bufp, pattern, length, re_syntax_options); if (!ret) return NULL; return gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); } weak_alias (__re_compile_pattern, re_compile_pattern) /* Set by 're_set_syntax' to the current regexp syntax to recognize. Can also be assigned to arbitrarily: each pattern buffer stores its own syntax, so it can be changed between regex compilations. */ /* This has no initializer because initialized variables in Emacs become read-only after dumping. */ reg_syntax_t re_syntax_options; /* Specify the precise syntax of regexps for compilation. This provides for compatibility for various utilities which historically have different, incompatible syntaxes. The argument SYNTAX is a bit mask comprised of the various bits defined in regex.h. We return the old syntax. */ reg_syntax_t re_set_syntax (reg_syntax_t syntax) { reg_syntax_t ret = re_syntax_options; re_syntax_options = syntax; return ret; } weak_alias (__re_set_syntax, re_set_syntax) int re_compile_fastmap (struct re_pattern_buffer *bufp) { re_dfa_t *dfa = bufp->buffer; char *fastmap = bufp->fastmap; memset (fastmap, '\0', sizeof (char) * SBC_MAX); re_compile_fastmap_iter (bufp, dfa->init_state, fastmap); if (dfa->init_state != dfa->init_state_word) re_compile_fastmap_iter (bufp, dfa->init_state_word, fastmap); if (dfa->init_state != dfa->init_state_nl) re_compile_fastmap_iter (bufp, dfa->init_state_nl, fastmap); if (dfa->init_state != dfa->init_state_begbuf) re_compile_fastmap_iter (bufp, dfa->init_state_begbuf, fastmap); bufp->fastmap_accurate = 1; return 0; } weak_alias (__re_compile_fastmap, re_compile_fastmap) static __always_inline void re_set_fastmap (char *fastmap, bool icase, int ch) { fastmap[ch] = 1; if (icase) fastmap[tolower (ch)] = 1; } /* Helper function for re_compile_fastmap. Compile fastmap for the initial_state INIT_STATE. */ static void re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, char *fastmap) { re_dfa_t *dfa = bufp->buffer; Idx node_cnt; bool icase = (dfa->mb_cur_max == 1 && (bufp->syntax & RE_ICASE)); for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt) { Idx node = init_state->nodes.elems[node_cnt]; re_token_type_t type = dfa->nodes[node].type; if (type == CHARACTER) { re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c); if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) { unsigned char buf[MB_LEN_MAX]; unsigned char *p; wchar_t wc; mbstate_t state; p = buf; *p++ = dfa->nodes[node].opr.c; while (++node < dfa->nodes_len && dfa->nodes[node].type == CHARACTER && dfa->nodes[node].mb_partial) *p++ = dfa->nodes[node].opr.c; memset (&state, '\0', sizeof (state)); if (__mbrtowc (&wc, (const char *) buf, p - buf, &state) == p - buf && (__wcrtomb ((char *) buf, __towlower (wc), &state) != (size_t) -1)) re_set_fastmap (fastmap, false, buf[0]); } } else if (type == SIMPLE_BRACKET) { int i, ch; for (i = 0, ch = 0; i < BITSET_WORDS; ++i) { int j; bitset_word_t w = dfa->nodes[node].opr.sbcset[i]; for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) if (w & ((bitset_word_t) 1 << j)) re_set_fastmap (fastmap, icase, ch); } } else if (type == COMPLEX_BRACKET) { re_charset_t *cset = dfa->nodes[node].opr.mbcset; Idx i; #ifdef _LIBC /* See if we have to try all bytes which start multiple collation elements. e.g. In da_DK, we want to catch 'a' since "aa" is a valid collation element, and don't catch 'b' since 'b' is the only collation element which starts from 'b' (and it is caught by SIMPLE_BRACKET). */ if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0 && (cset->ncoll_syms || cset->nranges)) { const int32_t *table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); for (i = 0; i < SBC_MAX; ++i) if (table[i] < 0) re_set_fastmap (fastmap, icase, i); } #endif /* _LIBC */ /* See if we have to start the match at all multibyte characters, i.e. where we would not find an invalid sequence. This only applies to multibyte character sets; for single byte character sets, the SIMPLE_BRACKET again suffices. */ if (dfa->mb_cur_max > 1 && (cset->nchar_classes || cset->non_match || cset->nranges #ifdef _LIBC || cset->nequiv_classes #endif /* _LIBC */ )) { unsigned char c = 0; do { mbstate_t mbs; memset (&mbs, 0, sizeof (mbs)); if (__mbrtowc (NULL, (char *) &c, 1, &mbs) == (size_t) -2) re_set_fastmap (fastmap, false, (int) c); } while (++c != 0); } else { /* ... Else catch all bytes which can start the mbchars. */ for (i = 0; i < cset->nmbchars; ++i) { char buf[256]; mbstate_t state; memset (&state, '\0', sizeof (state)); if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1) re_set_fastmap (fastmap, icase, *(unsigned char *) buf); if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) { if (__wcrtomb (buf, __towlower (cset->mbchars[i]), &state) != (size_t) -1) re_set_fastmap (fastmap, false, *(unsigned char *) buf); } } } } else if (type == OP_PERIOD || type == OP_UTF8_PERIOD || type == END_OF_RE) { memset (fastmap, '\1', sizeof (char) * SBC_MAX); if (type == END_OF_RE) bufp->can_be_null = 1; return; } } } /* Entry point for POSIX code. */ /* regcomp takes a regular expression as a string and compiles it. PREG is a regex_t *. We do not expect any fields to be initialized, since POSIX says we shouldn't. Thus, we set 'buffer' to the compiled pattern; 'used' to the length of the compiled pattern; 'syntax' to RE_SYNTAX_POSIX_EXTENDED if the REG_EXTENDED bit in CFLAGS is set; otherwise, to RE_SYNTAX_POSIX_BASIC; 'newline_anchor' to REG_NEWLINE being set in CFLAGS; 'fastmap' to an allocated space for the fastmap; 'fastmap_accurate' to zero; 're_nsub' to the number of subexpressions in PATTERN. PATTERN is the address of the pattern string. CFLAGS is a series of bits which affect compilation. If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we use POSIX basic syntax. If REG_NEWLINE is set, then . and [^...] don't match newline. Also, regexec will try a match beginning after every newline. If REG_ICASE is set, then we considers upper- and lowercase versions of letters to be equivalent when matching. If REG_NOSUB is set, then when PREG is passed to regexec, that routine will report only success or failure, and nothing about the registers. It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for the return codes and their meanings.) */ int regcomp (regex_t *__restrict preg, const char *__restrict pattern, int cflags) { reg_errcode_t ret; reg_syntax_t syntax = ((cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC); preg->buffer = NULL; preg->allocated = 0; preg->used = 0; /* Try to allocate space for the fastmap. */ preg->fastmap = re_malloc (char, SBC_MAX); if (__glibc_unlikely (preg->fastmap == NULL)) return REG_ESPACE; syntax |= (cflags & REG_ICASE) ? RE_ICASE : 0; /* If REG_NEWLINE is set, newlines are treated differently. */ if (cflags & REG_NEWLINE) { /* REG_NEWLINE implies neither . nor [^...] match newline. */ syntax &= ~RE_DOT_NEWLINE; syntax |= RE_HAT_LISTS_NOT_NEWLINE; /* It also changes the matching behavior. */ preg->newline_anchor = 1; } else preg->newline_anchor = 0; preg->no_sub = !!(cflags & REG_NOSUB); preg->translate = NULL; ret = re_compile_internal (preg, pattern, strlen (pattern), syntax); /* POSIX doesn't distinguish between an unmatched open-group and an unmatched close-group: both are REG_EPAREN. */ if (ret == REG_ERPAREN) ret = REG_EPAREN; /* We have already checked preg->fastmap != NULL. */ if (__glibc_likely (ret == REG_NOERROR)) /* Compute the fastmap now, since regexec cannot modify the pattern buffer. This function never fails in this implementation. */ (void) re_compile_fastmap (preg); else { /* Some error occurred while compiling the expression. */ re_free (preg->fastmap); preg->fastmap = NULL; } return (int) ret; } libc_hidden_def (__regcomp) weak_alias (__regcomp, regcomp) /* Returns a message corresponding to an error code, ERRCODE, returned from either regcomp or regexec. We don't use PREG here. */ size_t regerror (int errcode, const regex_t *__restrict preg, char *__restrict errbuf, size_t errbuf_size) { const char *msg; size_t msg_size; int nerrcodes = sizeof __re_error_msgid_idx / sizeof __re_error_msgid_idx[0]; if (__glibc_unlikely (errcode < 0 || errcode >= nerrcodes)) /* Only error codes returned by the rest of the code should be passed to this routine. If we are given anything else, or if other regex code generates an invalid error code, then the program has a bug. Dump core so we can fix it. */ abort (); msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]); msg_size = strlen (msg) + 1; /* Includes the null. */ if (__glibc_likely (errbuf_size != 0)) { size_t cpy_size = msg_size; if (__glibc_unlikely (msg_size > errbuf_size)) { cpy_size = errbuf_size - 1; errbuf[cpy_size] = '\0'; } memcpy (errbuf, msg, cpy_size); } return msg_size; } weak_alias (__regerror, regerror) /* This static array is used for the map to single-byte characters when UTF-8 is used. Otherwise we would allocate memory just to initialize it the same all the time. UTF-8 is the preferred encoding so this is a worthwhile optimization. */ static const bitset_t utf8_sb_map = { /* Set the first 128 bits. */ #if (defined __GNUC__ || __clang_major__ >= 4) && !defined __STRICT_ANSI__ [0 ... 0x80 / BITSET_WORD_BITS - 1] = BITSET_WORD_MAX #else # if 4 * BITSET_WORD_BITS < ASCII_CHARS # error "bitset_word_t is narrower than 32 bits" # elif 3 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, BITSET_WORD_MAX, BITSET_WORD_MAX, # elif 2 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, BITSET_WORD_MAX, # elif 1 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, # endif (BITSET_WORD_MAX >> (SBC_MAX % BITSET_WORD_BITS == 0 ? 0 : BITSET_WORD_BITS - SBC_MAX % BITSET_WORD_BITS)) #endif }; static void free_dfa_content (re_dfa_t *dfa) { Idx i, j; if (dfa->nodes) for (i = 0; i < dfa->nodes_len; ++i) free_token (dfa->nodes + i); re_free (dfa->nexts); for (i = 0; i < dfa->nodes_len; ++i) { if (dfa->eclosures != NULL) re_node_set_free (dfa->eclosures + i); if (dfa->inveclosures != NULL) re_node_set_free (dfa->inveclosures + i); if (dfa->edests != NULL) re_node_set_free (dfa->edests + i); } re_free (dfa->edests); re_free (dfa->eclosures); re_free (dfa->inveclosures); re_free (dfa->nodes); if (dfa->state_table) for (i = 0; i <= dfa->state_hash_mask; ++i) { struct re_state_table_entry *entry = dfa->state_table + i; for (j = 0; j < entry->num; ++j) { re_dfastate_t *state = entry->array[j]; free_state (state); } re_free (entry->array); } re_free (dfa->state_table); if (dfa->sb_char != utf8_sb_map) re_free (dfa->sb_char); re_free (dfa->subexp_map); #ifdef DEBUG re_free (dfa->re_str); #endif re_free (dfa); } /* Free dynamically allocated space used by PREG. */ void regfree (regex_t *preg) { re_dfa_t *dfa = preg->buffer; if (__glibc_likely (dfa != NULL)) { lock_fini (dfa->lock); free_dfa_content (dfa); } preg->buffer = NULL; preg->allocated = 0; re_free (preg->fastmap); preg->fastmap = NULL; re_free (preg->translate); preg->translate = NULL; } libc_hidden_def (__regfree) weak_alias (__regfree, regfree) /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC /* BSD has one and only one pattern buffer. */ static struct re_pattern_buffer re_comp_buf; char * # ifdef _LIBC /* Make these definitions weak in libc, so POSIX programs can redefine these names if they don't use our functions, and still use regcomp/regexec above without link errors. */ weak_function # endif re_comp (const char *s) { reg_errcode_t ret; char *fastmap; if (!s) { if (!re_comp_buf.buffer) return gettext ("No previous regular expression"); return 0; } if (re_comp_buf.buffer) { fastmap = re_comp_buf.fastmap; re_comp_buf.fastmap = NULL; __regfree (&re_comp_buf); memset (&re_comp_buf, '\0', sizeof (re_comp_buf)); re_comp_buf.fastmap = fastmap; } if (re_comp_buf.fastmap == NULL) { re_comp_buf.fastmap = re_malloc (char, SBC_MAX); if (re_comp_buf.fastmap == NULL) return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) REG_ESPACE]); } /* Since 're_exec' always passes NULL for the 'regs' argument, we don't need to initialize the pattern buffer fields which affect it. */ /* Match anchors at newlines. */ re_comp_buf.newline_anchor = 1; ret = re_compile_internal (&re_comp_buf, s, strlen (s), re_syntax_options); if (!ret) return NULL; /* Yes, we're discarding 'const' here if !HAVE_LIBINTL. */ return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); } #ifdef _LIBC libc_freeres_fn (free_mem) { __regfree (&re_comp_buf); } #endif #endif /* _REGEX_RE_COMP */ /* Internal entry point. Compile the regular expression PATTERN, whose length is LENGTH. SYNTAX indicate regular expression's syntax. */ static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, size_t length, reg_syntax_t syntax) { reg_errcode_t err = REG_NOERROR; re_dfa_t *dfa; re_string_t regexp; /* Initialize the pattern buffer. */ preg->fastmap_accurate = 0; preg->syntax = syntax; preg->not_bol = preg->not_eol = 0; preg->used = 0; preg->re_nsub = 0; preg->can_be_null = 0; preg->regs_allocated = REGS_UNALLOCATED; /* Initialize the dfa. */ dfa = preg->buffer; if (__glibc_unlikely (preg->allocated < sizeof (re_dfa_t))) { /* If zero allocated, but buffer is non-null, try to realloc enough space. This loses if buffer's address is bogus, but that is the user's responsibility. If ->buffer is NULL this is a simple allocation. */ dfa = re_realloc (preg->buffer, re_dfa_t, 1); if (dfa == NULL) return REG_ESPACE; preg->allocated = sizeof (re_dfa_t); preg->buffer = dfa; } preg->used = sizeof (re_dfa_t); err = init_dfa (dfa, length); if (__glibc_unlikely (err == REG_NOERROR && lock_init (dfa->lock) != 0)) err = REG_ESPACE; if (__glibc_unlikely (err != REG_NOERROR)) { free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; return err; } #ifdef DEBUG /* Note: length+1 will not overflow since it is checked in init_dfa. */ dfa->re_str = re_malloc (char, length + 1); strncpy (dfa->re_str, pattern, length + 1); #endif err = re_string_construct (®exp, pattern, length, preg->translate, (syntax & RE_ICASE) != 0, dfa); if (__glibc_unlikely (err != REG_NOERROR)) { re_compile_internal_free_return: free_workarea_compile (preg); re_string_destruct (®exp); lock_fini (dfa->lock); free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; return err; } /* Parse the regular expression, and build a structure tree. */ preg->re_nsub = 0; dfa->str_tree = parse (®exp, preg, syntax, &err); if (__glibc_unlikely (dfa->str_tree == NULL)) goto re_compile_internal_free_return; /* Analyze the tree and create the nfa. */ err = analyze (preg); if (__glibc_unlikely (err != REG_NOERROR)) goto re_compile_internal_free_return; /* If possible, do searching in single byte encoding to speed things up. */ if (dfa->is_utf8 && !(syntax & RE_ICASE) && preg->translate == NULL) optimize_utf8 (dfa); /* Then create the initial state of the dfa. */ err = create_initial_state (dfa); /* Release work areas. */ free_workarea_compile (preg); re_string_destruct (®exp); if (__glibc_unlikely (err != REG_NOERROR)) { lock_fini (dfa->lock); free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; } return err; } /* Initialize DFA. We use the length of the regular expression PAT_LEN as the initial length of some arrays. */ static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len) { __re_size_t table_size; #ifndef _LIBC const char *codeset_name; #endif size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t)); size_t max_object_size = MAX (sizeof (struct re_state_table_entry), MAX (sizeof (re_token_t), MAX (sizeof (re_node_set), MAX (sizeof (regmatch_t), max_i18n_object_size)))); memset (dfa, '\0', sizeof (re_dfa_t)); /* Force allocation of str_tree_storage the first time. */ dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; /* Avoid overflows. The extra "/ 2" is for the table_size doubling calculation below, and for similar doubling calculations elsewhere. And it's <= rather than <, because some of the doubling calculations add 1 afterwards. */ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) / 2 <= pat_len)) return REG_ESPACE; dfa->nodes_alloc = pat_len + 1; dfa->nodes = re_malloc (re_token_t, dfa->nodes_alloc); /* table_size = 2 ^ ceil(log pat_len) */ for (table_size = 1; ; table_size <<= 1) if (table_size > pat_len) break; dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size); dfa->state_hash_mask = table_size - 1; dfa->mb_cur_max = MB_CUR_MAX; #ifdef _LIBC if (dfa->mb_cur_max == 6 && strcmp (_NL_CURRENT (LC_CTYPE, _NL_CTYPE_CODESET_NAME), "UTF-8") == 0) dfa->is_utf8 = 1; dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII) != 0); #else codeset_name = nl_langinfo (CODESET); if ((codeset_name[0] == 'U' || codeset_name[0] == 'u') && (codeset_name[1] == 'T' || codeset_name[1] == 't') && (codeset_name[2] == 'F' || codeset_name[2] == 'f') && strcmp (codeset_name + 3 + (codeset_name[3] == '-'), "8") == 0) dfa->is_utf8 = 1; /* We check exhaustively in the loop below if this charset is a superset of ASCII. */ dfa->map_notascii = 0; #endif if (dfa->mb_cur_max > 1) { if (dfa->is_utf8) dfa->sb_char = (re_bitset_ptr_t) utf8_sb_map; else { int i, j, ch; dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); if (__glibc_unlikely (dfa->sb_char == NULL)) return REG_ESPACE; /* Set the bits corresponding to single byte chars. */ for (i = 0, ch = 0; i < BITSET_WORDS; ++i) for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) { wint_t wch = __btowc (ch); if (wch != WEOF) dfa->sb_char[i] |= (bitset_word_t) 1 << j; #ifndef _LIBC if (isascii (ch) && wch != ch) dfa->map_notascii = 1; #endif } } } if (__glibc_unlikely (dfa->nodes == NULL || dfa->state_table == NULL)) return REG_ESPACE; return REG_NOERROR; } /* Initialize WORD_CHAR table, which indicate which character is "word". In this case "word" means that it is the word construction character used by some operators like "\<", "\>", etc. */ static void init_word_char (re_dfa_t *dfa) { int i = 0; int j; int ch = 0; dfa->word_ops_used = 1; if (__glibc_likely (dfa->map_notascii == 0)) { bitset_word_t bits0 = 0x00000000; bitset_word_t bits1 = 0x03ff0000; bitset_word_t bits2 = 0x87fffffe; bitset_word_t bits3 = 0x07fffffe; if (BITSET_WORD_BITS == 64) { /* Pacify gcc -Woverflow on 32-bit platforms. */ dfa->word_char[0] = bits1 << 31 << 1 | bits0; dfa->word_char[1] = bits3 << 31 << 1 | bits2; i = 2; } else if (BITSET_WORD_BITS == 32) { dfa->word_char[0] = bits0; dfa->word_char[1] = bits1; dfa->word_char[2] = bits2; dfa->word_char[3] = bits3; i = 4; } else goto general_case; ch = 128; if (__glibc_likely (dfa->is_utf8)) { memset (&dfa->word_char[i], '\0', (SBC_MAX - ch) / 8); return; } } general_case: for (; i < BITSET_WORDS; ++i) for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) if (isalnum (ch) || ch == '_') dfa->word_char[i] |= (bitset_word_t) 1 << j; } /* Free the work area which are only used while compiling. */ static void free_workarea_compile (regex_t *preg) { re_dfa_t *dfa = preg->buffer; bin_tree_storage_t *storage, *next; for (storage = dfa->str_tree_storage; storage; storage = next) { next = storage->next; re_free (storage); } dfa->str_tree_storage = NULL; dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; dfa->str_tree = NULL; re_free (dfa->org_indices); dfa->org_indices = NULL; } /* Create initial states for all contexts. */ static reg_errcode_t create_initial_state (re_dfa_t *dfa) { Idx first, i; reg_errcode_t err; re_node_set init_nodes; /* Initial states have the epsilon closure of the node which is the first node of the regular expression. */ first = dfa->str_tree->first->node_idx; dfa->init_node = first; err = re_node_set_init_copy (&init_nodes, dfa->eclosures + first); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* The back-references which are in initial states can epsilon transit, since in this case all of the subexpressions can be null. Then we add epsilon closures of the nodes which are the next nodes of the back-references. */ if (dfa->nbackref > 0) for (i = 0; i < init_nodes.nelem; ++i) { Idx node_idx = init_nodes.elems[i]; re_token_type_t type = dfa->nodes[node_idx].type; Idx clexp_idx; if (type != OP_BACK_REF) continue; for (clexp_idx = 0; clexp_idx < init_nodes.nelem; ++clexp_idx) { re_token_t *clexp_node; clexp_node = dfa->nodes + init_nodes.elems[clexp_idx]; if (clexp_node->type == OP_CLOSE_SUBEXP && clexp_node->opr.idx == dfa->nodes[node_idx].opr.idx) break; } if (clexp_idx == init_nodes.nelem) continue; if (type == OP_BACK_REF) { Idx dest_idx = dfa->edests[node_idx].elems[0]; if (!re_node_set_contains (&init_nodes, dest_idx)) { reg_errcode_t merge_err = re_node_set_merge (&init_nodes, dfa->eclosures + dest_idx); if (merge_err != REG_NOERROR) return merge_err; i = 0; } } } /* It must be the first time to invoke acquire_state. */ dfa->init_state = re_acquire_state_context (&err, dfa, &init_nodes, 0); /* We don't check ERR here, since the initial state must not be NULL. */ if (__glibc_unlikely (dfa->init_state == NULL)) return err; if (dfa->init_state->has_constraint) { dfa->init_state_word = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_WORD); dfa->init_state_nl = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_NEWLINE); dfa->init_state_begbuf = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_NEWLINE | CONTEXT_BEGBUF); if (__glibc_unlikely (dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL)) return err; } else dfa->init_state_word = dfa->init_state_nl = dfa->init_state_begbuf = dfa->init_state; re_node_set_free (&init_nodes); return REG_NOERROR; } /* If it is possible to do searching in single byte encoding instead of UTF-8 to speed things up, set dfa->mb_cur_max to 1, clear is_utf8 and change DFA nodes where needed. */ static void optimize_utf8 (re_dfa_t *dfa) { Idx node; int i; bool mb_chars = false; bool has_period = false; for (node = 0; node < dfa->nodes_len; ++node) switch (dfa->nodes[node].type) { case CHARACTER: if (dfa->nodes[node].opr.c >= ASCII_CHARS) mb_chars = true; break; case ANCHOR: switch (dfa->nodes[node].opr.ctx_type) { case LINE_FIRST: case LINE_LAST: case BUF_FIRST: case BUF_LAST: break; default: /* Word anchors etc. cannot be handled. It's okay to test opr.ctx_type since constraints (for all DFA nodes) are created by ORing one or more opr.ctx_type values. */ return; } break; case OP_PERIOD: has_period = true; break; case OP_BACK_REF: case OP_ALT: case END_OF_RE: case OP_DUP_ASTERISK: case OP_OPEN_SUBEXP: case OP_CLOSE_SUBEXP: break; case COMPLEX_BRACKET: return; case SIMPLE_BRACKET: /* Just double check. */ { int rshift = (ASCII_CHARS % BITSET_WORD_BITS == 0 ? 0 : BITSET_WORD_BITS - ASCII_CHARS % BITSET_WORD_BITS); for (i = ASCII_CHARS / BITSET_WORD_BITS; i < BITSET_WORDS; ++i) { if (dfa->nodes[node].opr.sbcset[i] >> rshift != 0) return; rshift = 0; } } break; default: abort (); } if (mb_chars || has_period) for (node = 0; node < dfa->nodes_len; ++node) { if (dfa->nodes[node].type == CHARACTER && dfa->nodes[node].opr.c >= ASCII_CHARS) dfa->nodes[node].mb_partial = 0; else if (dfa->nodes[node].type == OP_PERIOD) dfa->nodes[node].type = OP_UTF8_PERIOD; } /* The search can be in single byte locale. */ dfa->mb_cur_max = 1; dfa->is_utf8 = 0; dfa->has_mb_node = dfa->nbackref > 0 || has_period; } /* Analyze the structure tree, and calculate "first", "next", "edest", "eclosure", and "inveclosure". */ static reg_errcode_t analyze (regex_t *preg) { re_dfa_t *dfa = preg->buffer; reg_errcode_t ret; /* Allocate arrays. */ dfa->nexts = re_malloc (Idx, dfa->nodes_alloc); dfa->org_indices = re_malloc (Idx, dfa->nodes_alloc); dfa->edests = re_malloc (re_node_set, dfa->nodes_alloc); dfa->eclosures = re_malloc (re_node_set, dfa->nodes_alloc); if (__glibc_unlikely (dfa->nexts == NULL || dfa->org_indices == NULL || dfa->edests == NULL || dfa->eclosures == NULL)) return REG_ESPACE; dfa->subexp_map = re_malloc (Idx, preg->re_nsub); if (dfa->subexp_map != NULL) { Idx i; for (i = 0; i < preg->re_nsub; i++) dfa->subexp_map[i] = i; preorder (dfa->str_tree, optimize_subexps, dfa); for (i = 0; i < preg->re_nsub; i++) if (dfa->subexp_map[i] != i) break; if (i == preg->re_nsub) { re_free (dfa->subexp_map); dfa->subexp_map = NULL; } } ret = postorder (dfa->str_tree, lower_subexps, preg); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; ret = postorder (dfa->str_tree, calc_first, dfa); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; preorder (dfa->str_tree, calc_next, dfa); ret = preorder (dfa->str_tree, link_nfa_nodes, dfa); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; ret = calc_eclosure (dfa); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; /* We only need this during the prune_impossible_nodes pass in regexec.c; skip it if p_i_n will not run, as calc_inveclosure can be quadratic. */ if ((!preg->no_sub && preg->re_nsub > 0 && dfa->has_plural_match) || dfa->nbackref) { dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_len); if (__glibc_unlikely (dfa->inveclosures == NULL)) return REG_ESPACE; ret = calc_inveclosure (dfa); } return ret; } /* Our parse trees are very unbalanced, so we cannot use a stack to implement parse tree visits. Instead, we use parent pointers and some hairy code in these two functions. */ static reg_errcode_t postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra) { bin_tree_t *node, *prev; for (node = root; ; ) { /* Descend down the tree, preferably to the left (or to the right if that's the only child). */ while (node->left || node->right) if (node->left) node = node->left; else node = node->right; do { reg_errcode_t err = fn (extra, node); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (node->parent == NULL) return REG_NOERROR; prev = node; node = node->parent; } /* Go up while we have a node that is reached from the right. */ while (node->right == prev || node->right == NULL); node = node->right; } } static reg_errcode_t preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra) { bin_tree_t *node; for (node = root; ; ) { reg_errcode_t err = fn (extra, node); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* Go to the left node, or up and to the right. */ if (node->left) node = node->left; else { bin_tree_t *prev = NULL; while (node->right == prev || node->right == NULL) { prev = node; node = node->parent; if (!node) return REG_NOERROR; } node = node->right; } } } /* Optimization pass: if a SUBEXP is entirely contained, strip it and tell re_search_internal to map the inner one's opr.idx to this one's. Adjust backreferences as well. Requires a preorder visit. */ static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; if (node->token.type == OP_BACK_REF && dfa->subexp_map) { int idx = node->token.opr.idx; node->token.opr.idx = dfa->subexp_map[idx]; dfa->used_bkref_map |= 1 << node->token.opr.idx; } else if (node->token.type == SUBEXP && node->left && node->left->token.type == SUBEXP) { Idx other_idx = node->left->token.opr.idx; node->left = node->left->left; if (node->left) node->left->parent = node; dfa->subexp_map[other_idx] = dfa->subexp_map[node->token.opr.idx]; if (other_idx < BITSET_WORD_BITS) dfa->used_bkref_map &= ~((bitset_word_t) 1 << other_idx); } return REG_NOERROR; } /* Lowering pass: Turn each SUBEXP node into the appropriate concatenation of OP_OPEN_SUBEXP, the body of the SUBEXP (if any) and OP_CLOSE_SUBEXP. */ static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node) { regex_t *preg = (regex_t *) extra; reg_errcode_t err = REG_NOERROR; if (node->left && node->left->token.type == SUBEXP) { node->left = lower_subexp (&err, preg, node->left); if (node->left) node->left->parent = node; } if (node->right && node->right->token.type == SUBEXP) { node->right = lower_subexp (&err, preg, node->right); if (node->right) node->right->parent = node; } return err; } static bin_tree_t * lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node) { re_dfa_t *dfa = preg->buffer; bin_tree_t *body = node->left; bin_tree_t *op, *cls, *tree1, *tree; if (preg->no_sub /* We do not optimize empty subexpressions, because otherwise we may have bad CONCAT nodes with NULL children. This is obviously not very common, so we do not lose much. An example that triggers this case is the sed "script" /\(\)/x. */ && node->left != NULL && (node->token.opr.idx >= BITSET_WORD_BITS || !(dfa->used_bkref_map & ((bitset_word_t) 1 << node->token.opr.idx)))) return node->left; /* Convert the SUBEXP node to the concatenation of an OP_OPEN_SUBEXP, the contents, and an OP_CLOSE_SUBEXP. */ op = create_tree (dfa, NULL, NULL, OP_OPEN_SUBEXP); cls = create_tree (dfa, NULL, NULL, OP_CLOSE_SUBEXP); tree1 = body ? create_tree (dfa, body, cls, CONCAT) : cls; tree = create_tree (dfa, op, tree1, CONCAT); if (__glibc_unlikely (tree == NULL || tree1 == NULL || op == NULL || cls == NULL)) { *err = REG_ESPACE; return NULL; } op->token.opr.idx = cls->token.opr.idx = node->token.opr.idx; op->token.opt_subexp = cls->token.opt_subexp = node->token.opt_subexp; return tree; } /* Pass 1 in building the NFA: compute FIRST and create unlinked automaton nodes. Requires a postorder visit. */ static reg_errcode_t calc_first (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; if (node->token.type == CONCAT) { node->first = node->left->first; node->node_idx = node->left->node_idx; } else { node->first = node; node->node_idx = re_dfa_add_node (dfa, node->token); if (__glibc_unlikely (node->node_idx == -1)) return REG_ESPACE; if (node->token.type == ANCHOR) dfa->nodes[node->node_idx].constraint = node->token.opr.ctx_type; } return REG_NOERROR; } /* Pass 2: compute NEXT on the tree. Preorder visit. */ static reg_errcode_t calc_next (void *extra, bin_tree_t *node) { switch (node->token.type) { case OP_DUP_ASTERISK: node->left->next = node; break; case CONCAT: node->left->next = node->right->first; node->right->next = node->next; break; default: if (node->left) node->left->next = node->next; if (node->right) node->right->next = node->next; break; } return REG_NOERROR; } /* Pass 3: link all DFA nodes to their NEXT node (any order will do). */ static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; Idx idx = node->node_idx; reg_errcode_t err = REG_NOERROR; switch (node->token.type) { case CONCAT: break; case END_OF_RE: DEBUG_ASSERT (node->next == NULL); break; case OP_DUP_ASTERISK: case OP_ALT: { Idx left, right; dfa->has_plural_match = 1; if (node->left != NULL) left = node->left->first->node_idx; else left = node->next->node_idx; if (node->right != NULL) right = node->right->first->node_idx; else right = node->next->node_idx; DEBUG_ASSERT (left > -1); DEBUG_ASSERT (right > -1); err = re_node_set_init_2 (dfa->edests + idx, left, right); } break; case ANCHOR: case OP_OPEN_SUBEXP: case OP_CLOSE_SUBEXP: err = re_node_set_init_1 (dfa->edests + idx, node->next->node_idx); break; case OP_BACK_REF: dfa->nexts[idx] = node->next->node_idx; if (node->token.type == OP_BACK_REF) err = re_node_set_init_1 (dfa->edests + idx, dfa->nexts[idx]); break; default: DEBUG_ASSERT (!IS_EPSILON_NODE (node->token.type)); dfa->nexts[idx] = node->next->node_idx; break; } return err; } /* Duplicate the epsilon closure of the node ROOT_NODE. Note that duplicated nodes have constraint INIT_CONSTRAINT in addition to their own constraint. */ static reg_errcode_t duplicate_node_closure (re_dfa_t *dfa, Idx top_org_node, Idx top_clone_node, Idx root_node, unsigned int init_constraint) { Idx org_node, clone_node; bool ok; unsigned int constraint = init_constraint; for (org_node = top_org_node, clone_node = top_clone_node;;) { Idx org_dest, clone_dest; if (dfa->nodes[org_node].type == OP_BACK_REF) { /* If the back reference epsilon-transit, its destination must also have the constraint. Then duplicate the epsilon closure of the destination of the back reference, and store it in edests of the back reference. */ org_dest = dfa->nexts[org_node]; re_node_set_empty (dfa->edests + clone_node); clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; dfa->nexts[clone_node] = dfa->nexts[org_node]; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } else if (dfa->edests[org_node].nelem == 0) { /* In case of the node can't epsilon-transit, don't duplicate the destination and store the original destination as the destination of the node. */ dfa->nexts[clone_node] = dfa->nexts[org_node]; break; } else if (dfa->edests[org_node].nelem == 1) { /* In case of the node can epsilon-transit, and it has only one destination. */ org_dest = dfa->edests[org_node].elems[0]; re_node_set_empty (dfa->edests + clone_node); /* If the node is root_node itself, it means the epsilon closure has a loop. Then tie it to the destination of the root_node. */ if (org_node == root_node && clone_node != org_node) { ok = re_node_set_insert (dfa->edests + clone_node, org_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; break; } /* In case the node has another constraint, append it. */ constraint |= dfa->nodes[org_node].constraint; clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } else /* dfa->edests[org_node].nelem == 2 */ { /* In case of the node can epsilon-transit, and it has two destinations. In the bin_tree_t and DFA, that's '|' and '*'. */ org_dest = dfa->edests[org_node].elems[0]; re_node_set_empty (dfa->edests + clone_node); /* Search for a duplicated node which satisfies the constraint. */ clone_dest = search_duplicated_node (dfa, org_dest, constraint); if (clone_dest == -1) { /* There is no such duplicated node, create a new one. */ reg_errcode_t err; clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; err = duplicate_node_closure (dfa, org_dest, clone_dest, root_node, constraint); if (__glibc_unlikely (err != REG_NOERROR)) return err; } else { /* There is a duplicated node which satisfies the constraint, use it to avoid infinite loop. */ ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } org_dest = dfa->edests[org_node].elems[1]; clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } org_node = org_dest; clone_node = clone_dest; } return REG_NOERROR; } /* Search for a node which is duplicated from the node ORG_NODE, and satisfies the constraint CONSTRAINT. */ static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, unsigned int constraint) { Idx idx; for (idx = dfa->nodes_len - 1; dfa->nodes[idx].duplicated && idx > 0; --idx) { if (org_node == dfa->org_indices[idx] && constraint == dfa->nodes[idx].constraint) return idx; /* Found. */ } return -1; /* Not found. */ } /* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT. Return the index of the new node, or -1 if insufficient storage is available. */ static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint) { Idx dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx]); if (__glibc_likely (dup_idx != -1)) { dfa->nodes[dup_idx].constraint = constraint; dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].constraint; dfa->nodes[dup_idx].duplicated = 1; /* Store the index of the original node. */ dfa->org_indices[dup_idx] = org_idx; } return dup_idx; } static reg_errcode_t calc_inveclosure (re_dfa_t *dfa) { Idx src, idx; bool ok; for (idx = 0; idx < dfa->nodes_len; ++idx) re_node_set_init_empty (dfa->inveclosures + idx); for (src = 0; src < dfa->nodes_len; ++src) { Idx *elems = dfa->eclosures[src].elems; for (idx = 0; idx < dfa->eclosures[src].nelem; ++idx) { ok = re_node_set_insert_last (dfa->inveclosures + elems[idx], src); if (__glibc_unlikely (! ok)) return REG_ESPACE; } } return REG_NOERROR; } /* Calculate "eclosure" for all the node in DFA. */ static reg_errcode_t calc_eclosure (re_dfa_t *dfa) { Idx node_idx; bool incomplete; DEBUG_ASSERT (dfa->nodes_len > 0); incomplete = false; /* For each nodes, calculate epsilon closure. */ for (node_idx = 0; ; ++node_idx) { reg_errcode_t err; re_node_set eclosure_elem; if (node_idx == dfa->nodes_len) { if (!incomplete) break; incomplete = false; node_idx = 0; } DEBUG_ASSERT (dfa->eclosures[node_idx].nelem != -1); /* If we have already calculated, skip it. */ if (dfa->eclosures[node_idx].nelem != 0) continue; /* Calculate epsilon closure of 'node_idx'. */ err = calc_eclosure_iter (&eclosure_elem, dfa, node_idx, true); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (dfa->eclosures[node_idx].nelem == 0) { incomplete = true; re_node_set_free (&eclosure_elem); } } return REG_NOERROR; } /* Calculate epsilon closure of NODE. */ static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root) { reg_errcode_t err; Idx i; re_node_set eclosure; bool incomplete = false; err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* An epsilon closure includes itself. */ eclosure.elems[eclosure.nelem++] = node; /* This indicates that we are calculating this node now. We reference this value to avoid infinite loop. */ dfa->eclosures[node].nelem = -1; /* If the current node has constraints, duplicate all nodes since they must inherit the constraints. */ if (dfa->nodes[node].constraint && dfa->edests[node].nelem && !dfa->nodes[dfa->edests[node].elems[0]].duplicated) { err = duplicate_node_closure (dfa, node, node, node, dfa->nodes[node].constraint); if (__glibc_unlikely (err != REG_NOERROR)) return err; } /* Expand each epsilon destination nodes. */ if (IS_EPSILON_NODE(dfa->nodes[node].type)) for (i = 0; i < dfa->edests[node].nelem; ++i) { re_node_set eclosure_elem; Idx edest = dfa->edests[node].elems[i]; /* If calculating the epsilon closure of 'edest' is in progress, return intermediate result. */ if (dfa->eclosures[edest].nelem == -1) { incomplete = true; continue; } /* If we haven't calculated the epsilon closure of 'edest' yet, calculate now. Otherwise use calculated epsilon closure. */ if (dfa->eclosures[edest].nelem == 0) { err = calc_eclosure_iter (&eclosure_elem, dfa, edest, false); if (__glibc_unlikely (err != REG_NOERROR)) return err; } else eclosure_elem = dfa->eclosures[edest]; /* Merge the epsilon closure of 'edest'. */ err = re_node_set_merge (&eclosure, &eclosure_elem); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* If the epsilon closure of 'edest' is incomplete, the epsilon closure of this node is also incomplete. */ if (dfa->eclosures[edest].nelem == 0) { incomplete = true; re_node_set_free (&eclosure_elem); } } if (incomplete && !root) dfa->eclosures[node].nelem = 0; else dfa->eclosures[node] = eclosure; *new_set = eclosure; return REG_NOERROR; } /* Functions for token which are used in the parser. */ /* Fetch a token from INPUT. We must not use this function inside bracket expressions. */ static void fetch_token (re_token_t *result, re_string_t *input, reg_syntax_t syntax) { re_string_skip_bytes (input, peek_token (result, input, syntax)); } /* Peek a token from INPUT, and return the length of the token. We must not use this function inside bracket expressions. */ static int peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax) { unsigned char c; if (re_string_eoi (input)) { token->type = END_OF_RE; return 0; } c = re_string_peek_byte (input, 0); token->opr.c = c; token->word_char = 0; token->mb_partial = 0; if (input->mb_cur_max > 1 && !re_string_first_byte (input, re_string_cur_idx (input))) { token->type = CHARACTER; token->mb_partial = 1; return 1; } if (c == '\\') { unsigned char c2; if (re_string_cur_idx (input) + 1 >= re_string_length (input)) { token->type = BACK_SLASH; return 1; } c2 = re_string_peek_byte_case (input, 1); token->opr.c = c2; token->type = CHARACTER; if (input->mb_cur_max > 1) { wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input) + 1); token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; } else token->word_char = IS_WORD_CHAR (c2) != 0; switch (c2) { case '|': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR)) token->type = OP_ALT; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (!(syntax & RE_NO_BK_REFS)) { token->type = OP_BACK_REF; token->opr.idx = c2 - '1'; } break; case '<': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_FIRST; } break; case '>': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_LAST; } break; case 'b': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_DELIM; } break; case 'B': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = NOT_WORD_DELIM; } break; case 'w': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_WORD; break; case 'W': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_NOTWORD; break; case 's': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_SPACE; break; case 'S': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_NOTSPACE; break; case '`': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = BUF_FIRST; } break; case '\'': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = BUF_LAST; } break; case '(': if (!(syntax & RE_NO_BK_PARENS)) token->type = OP_OPEN_SUBEXP; break; case ')': if (!(syntax & RE_NO_BK_PARENS)) token->type = OP_CLOSE_SUBEXP; break; case '+': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_PLUS; break; case '?': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_QUESTION; break; case '{': if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) token->type = OP_OPEN_DUP_NUM; break; case '}': if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) token->type = OP_CLOSE_DUP_NUM; break; default: break; } return 2; } token->type = CHARACTER; if (input->mb_cur_max > 1) { wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input)); token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; } else token->word_char = IS_WORD_CHAR (token->opr.c); switch (c) { case '\n': if (syntax & RE_NEWLINE_ALT) token->type = OP_ALT; break; case '|': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR)) token->type = OP_ALT; break; case '*': token->type = OP_DUP_ASTERISK; break; case '+': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_PLUS; break; case '?': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_QUESTION; break; case '{': if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) token->type = OP_OPEN_DUP_NUM; break; case '}': if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) token->type = OP_CLOSE_DUP_NUM; break; case '(': if (syntax & RE_NO_BK_PARENS) token->type = OP_OPEN_SUBEXP; break; case ')': if (syntax & RE_NO_BK_PARENS) token->type = OP_CLOSE_SUBEXP; break; case '[': token->type = OP_OPEN_BRACKET; break; case '.': token->type = OP_PERIOD; break; case '^': if (!(syntax & (RE_CONTEXT_INDEP_ANCHORS | RE_CARET_ANCHORS_HERE)) && re_string_cur_idx (input) != 0) { char prev = re_string_peek_byte (input, -1); if (!(syntax & RE_NEWLINE_ALT) || prev != '\n') break; } token->type = ANCHOR; token->opr.ctx_type = LINE_FIRST; break; case '$': if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) && re_string_cur_idx (input) + 1 != re_string_length (input)) { re_token_t next; re_string_skip_bytes (input, 1); peek_token (&next, input, syntax); re_string_skip_bytes (input, -1); if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP) break; } token->type = ANCHOR; token->opr.ctx_type = LINE_LAST; break; default: break; } return 1; } /* Peek a token from INPUT, and return the length of the token. We must not use this function out of bracket expressions. */ static int peek_token_bracket (re_token_t *token, re_string_t *input, reg_syntax_t syntax) { unsigned char c; if (re_string_eoi (input)) { token->type = END_OF_RE; return 0; } c = re_string_peek_byte (input, 0); token->opr.c = c; if (input->mb_cur_max > 1 && !re_string_first_byte (input, re_string_cur_idx (input))) { token->type = CHARACTER; return 1; } if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && re_string_cur_idx (input) + 1 < re_string_length (input)) { /* In this case, '\' escape a character. */ unsigned char c2; re_string_skip_bytes (input, 1); c2 = re_string_peek_byte (input, 0); token->opr.c = c2; token->type = CHARACTER; return 1; } if (c == '[') /* '[' is a special char in a bracket exps. */ { unsigned char c2; int token_len; if (re_string_cur_idx (input) + 1 < re_string_length (input)) c2 = re_string_peek_byte (input, 1); else c2 = 0; token->opr.c = c2; token_len = 2; switch (c2) { case '.': token->type = OP_OPEN_COLL_ELEM; break; case '=': token->type = OP_OPEN_EQUIV_CLASS; break; case ':': if (syntax & RE_CHAR_CLASSES) { token->type = OP_OPEN_CHAR_CLASS; break; } FALLTHROUGH; default: token->type = CHARACTER; token->opr.c = c; token_len = 1; break; } return token_len; } switch (c) { case ']': token->type = OP_CLOSE_BRACKET; break; case '^': token->type = OP_NON_MATCH_LIST; break; case '-': /* In V7 Unix grep and Unix awk and mawk, [...---...] (3 adjacent minus signs) stands for a single minus sign. Support that without breaking anything else. */ if (! (re_string_cur_idx (input) + 2 < re_string_length (input) && re_string_peek_byte (input, 1) == '-' && re_string_peek_byte (input, 2) == '-')) { token->type = OP_CHARSET_RANGE; break; } re_string_skip_bytes (input, 2); FALLTHROUGH; default: token->type = CHARACTER; } return 1; } /* Functions for parser. */ /* Entry point of the parser. Parse the regular expression REGEXP and return the structure tree. If an error occurs, ERR is set by error code, and return NULL. This function build the following tree, from regular expression <reg_exp>: CAT / \ / \ <reg_exp> EOR CAT means concatenation. EOR means end of regular expression. */ static bin_tree_t * parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree, *eor, *root; re_token_t current_token; dfa->syntax = syntax; fetch_token (¤t_token, regexp, syntax | RE_CARET_ANCHORS_HERE); tree = parse_reg_exp (regexp, preg, ¤t_token, syntax, 0, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; eor = create_tree (dfa, NULL, NULL, END_OF_RE); if (tree != NULL) root = create_tree (dfa, tree, eor, CONCAT); else root = eor; if (__glibc_unlikely (eor == NULL || root == NULL)) { *err = REG_ESPACE; return NULL; } return root; } /* This function build the following tree, from regular expression <branch1>|<branch2>: ALT / \ / \ <branch1> <branch2> ALT means alternative, which represents the operator '|'. */ static bin_tree_t * parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree, *branch = NULL; bitset_word_t initial_bkref_map = dfa->completed_bkref_map; tree = parse_branch (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; while (token->type == OP_ALT) { fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); if (token->type != OP_ALT && token->type != END_OF_RE && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) { bitset_word_t accumulated_bkref_map = dfa->completed_bkref_map; dfa->completed_bkref_map = initial_bkref_map; branch = parse_branch (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && branch == NULL)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } dfa->completed_bkref_map |= accumulated_bkref_map; } else branch = NULL; tree = create_tree (dfa, tree, branch, OP_ALT); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } } return tree; } /* This function build the following tree, from regular expression <exp1><exp2>: CAT / \ / \ <exp1> <exp2> CAT means concatenation. */ static bin_tree_t * parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { bin_tree_t *tree, *expr; re_dfa_t *dfa = preg->buffer; tree = parse_expression (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; while (token->type != OP_ALT && token->type != END_OF_RE && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) { expr = parse_expression (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && expr == NULL)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } if (tree != NULL && expr != NULL) { bin_tree_t *newtree = create_tree (dfa, tree, expr, CONCAT); if (newtree == NULL) { postorder (expr, free_tree, NULL); postorder (tree, free_tree, NULL); *err = REG_ESPACE; return NULL; } tree = newtree; } else if (tree == NULL) tree = expr; /* Otherwise expr == NULL, we don't need to create new tree. */ } return tree; } /* This function build the following tree, from regular expression a*: * | a */ static bin_tree_t * parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree; switch (token->type) { case CHARACTER: tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } if (dfa->mb_cur_max > 1) { while (!re_string_eoi (regexp) && !re_string_first_byte (regexp, re_string_cur_idx (regexp))) { bin_tree_t *mbc_remain; fetch_token (token, regexp, syntax); mbc_remain = create_token_tree (dfa, NULL, NULL, token); tree = create_tree (dfa, tree, mbc_remain, CONCAT); if (__glibc_unlikely (mbc_remain == NULL || tree == NULL)) { *err = REG_ESPACE; return NULL; } } } break; case OP_OPEN_SUBEXP: tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_OPEN_BRACKET: tree = parse_bracket_exp (regexp, dfa, token, syntax, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_BACK_REF: if (!__glibc_likely (dfa->completed_bkref_map & (1 << token->opr.idx))) { *err = REG_ESUBREG; return NULL; } dfa->used_bkref_map |= 1 << token->opr.idx; tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } ++dfa->nbackref; dfa->has_mb_node = 1; break; case OP_OPEN_DUP_NUM: if (syntax & RE_CONTEXT_INVALID_DUP) { *err = REG_BADRPT; return NULL; } FALLTHROUGH; case OP_DUP_ASTERISK: case OP_DUP_PLUS: case OP_DUP_QUESTION: if (syntax & RE_CONTEXT_INVALID_OPS) { *err = REG_BADRPT; return NULL; } else if (syntax & RE_CONTEXT_INDEP_OPS) { fetch_token (token, regexp, syntax); return parse_expression (regexp, preg, token, syntax, nest, err); } FALLTHROUGH; case OP_CLOSE_SUBEXP: if ((token->type == OP_CLOSE_SUBEXP) && !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)) { *err = REG_ERPAREN; return NULL; } FALLTHROUGH; case OP_CLOSE_DUP_NUM: /* We treat it as a normal character. */ /* Then we can these characters as normal characters. */ token->type = CHARACTER; /* mb_partial and word_char bits should be initialized already by peek_token. */ tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } break; case ANCHOR: if ((token->opr.ctx_type & (WORD_DELIM | NOT_WORD_DELIM | WORD_FIRST | WORD_LAST)) && dfa->word_ops_used == 0) init_word_char (dfa); if (token->opr.ctx_type == WORD_DELIM || token->opr.ctx_type == NOT_WORD_DELIM) { bin_tree_t *tree_first, *tree_last; if (token->opr.ctx_type == WORD_DELIM) { token->opr.ctx_type = WORD_FIRST; tree_first = create_token_tree (dfa, NULL, NULL, token); token->opr.ctx_type = WORD_LAST; } else { token->opr.ctx_type = INSIDE_WORD; tree_first = create_token_tree (dfa, NULL, NULL, token); token->opr.ctx_type = INSIDE_NOTWORD; } tree_last = create_token_tree (dfa, NULL, NULL, token); tree = create_tree (dfa, tree_first, tree_last, OP_ALT); if (__glibc_unlikely (tree_first == NULL || tree_last == NULL || tree == NULL)) { *err = REG_ESPACE; return NULL; } } else { tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } } /* We must return here, since ANCHORs can't be followed by repetition operators. eg. RE"^*" is invalid or "<ANCHOR(^)><CHAR(*)>", it must not be "<ANCHOR(^)><REPEAT(*)>". */ fetch_token (token, regexp, syntax); return tree; case OP_PERIOD: tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } if (dfa->mb_cur_max > 1) dfa->has_mb_node = 1; break; case OP_WORD: case OP_NOTWORD: tree = build_charclass_op (dfa, regexp->trans, "alnum", "_", token->type == OP_NOTWORD, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_SPACE: case OP_NOTSPACE: tree = build_charclass_op (dfa, regexp->trans, "space", "", token->type == OP_NOTSPACE, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_ALT: case END_OF_RE: return NULL; case BACK_SLASH: *err = REG_EESCAPE; return NULL; default: /* Must not happen? */ DEBUG_ASSERT (false); return NULL; } fetch_token (token, regexp, syntax); while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM) { bin_tree_t *dup_tree = parse_dup_op (tree, regexp, dfa, token, syntax, err); if (__glibc_unlikely (*err != REG_NOERROR && dup_tree == NULL)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } tree = dup_tree; /* In BRE consecutive duplications are not allowed. */ if ((syntax & RE_CONTEXT_INVALID_DUP) && (token->type == OP_DUP_ASTERISK || token->type == OP_OPEN_DUP_NUM)) { if (tree != NULL) postorder (tree, free_tree, NULL); *err = REG_BADRPT; return NULL; } } return tree; } /* This function build the following tree, from regular expression (<reg_exp>): SUBEXP | <reg_exp> */ static bin_tree_t * parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree; size_t cur_nsub; cur_nsub = preg->re_nsub++; fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); /* The subexpression may be a null string. */ if (token->type == OP_CLOSE_SUBEXP) tree = NULL; else { tree = parse_reg_exp (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP)) { if (tree != NULL) postorder (tree, free_tree, NULL); *err = REG_EPAREN; } if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; } if (cur_nsub <= '9' - '1') dfa->completed_bkref_map |= 1 << cur_nsub; tree = create_tree (dfa, tree, NULL, SUBEXP); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } tree->token.opr.idx = cur_nsub; return tree; } /* This function parse repetition operators like "*", "+", "{1,3}" etc. */ static bin_tree_t * parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) { bin_tree_t *tree = NULL, *old_tree = NULL; Idx i, start, end, start_idx = re_string_cur_idx (regexp); re_token_t start_token = *token; if (token->type == OP_OPEN_DUP_NUM) { end = 0; start = fetch_number (regexp, token, syntax); if (start == -1) { if (token->type == CHARACTER && token->opr.c == ',') start = 0; /* We treat "{,m}" as "{0,m}". */ else { *err = REG_BADBR; /* <re>{} is invalid. */ return NULL; } } if (__glibc_likely (start != -2)) { /* We treat "{n}" as "{n,n}". */ end = ((token->type == OP_CLOSE_DUP_NUM) ? start : ((token->type == CHARACTER && token->opr.c == ',') ? fetch_number (regexp, token, syntax) : -2)); } if (__glibc_unlikely (start == -2 || end == -2)) { /* Invalid sequence. */ if (__glibc_unlikely (!(syntax & RE_INVALID_INTERVAL_ORD))) { if (token->type == END_OF_RE) *err = REG_EBRACE; else *err = REG_BADBR; return NULL; } /* If the syntax bit is set, rollback. */ re_string_set_index (regexp, start_idx); *token = start_token; token->type = CHARACTER; /* mb_partial and word_char bits should be already initialized by peek_token. */ return elem; } if (__glibc_unlikely ((end != -1 && start > end) || token->type != OP_CLOSE_DUP_NUM)) { /* First number greater than second. */ *err = REG_BADBR; return NULL; } if (__glibc_unlikely (RE_DUP_MAX < (end == -1 ? start : end))) { *err = REG_ESIZE; return NULL; } } else { start = (token->type == OP_DUP_PLUS) ? 1 : 0; end = (token->type == OP_DUP_QUESTION) ? 1 : -1; } fetch_token (token, regexp, syntax); if (__glibc_unlikely (elem == NULL)) return NULL; if (__glibc_unlikely (start == 0 && end == 0)) { postorder (elem, free_tree, NULL); return NULL; } /* Extract "<re>{n,m}" to "<re><re>...<re><re>{0,<m-n>}". */ if (__glibc_unlikely (start > 0)) { tree = elem; for (i = 2; i <= start; ++i) { elem = duplicate_tree (elem, dfa); tree = create_tree (dfa, tree, elem, CONCAT); if (__glibc_unlikely (elem == NULL || tree == NULL)) goto parse_dup_op_espace; } if (start == end) return tree; /* Duplicate ELEM before it is marked optional. */ elem = duplicate_tree (elem, dfa); if (__glibc_unlikely (elem == NULL)) goto parse_dup_op_espace; old_tree = tree; } else old_tree = NULL; if (elem->token.type == SUBEXP) { uintptr_t subidx = elem->token.opr.idx; postorder (elem, mark_opt_subexp, (void *) subidx); } tree = create_tree (dfa, elem, NULL, (end == -1 ? OP_DUP_ASTERISK : OP_ALT)); if (__glibc_unlikely (tree == NULL)) goto parse_dup_op_espace; /* This loop is actually executed only when end != -1, to rewrite <re>{0,n} as (<re>(<re>...<re>?)?)?... We have already created the start+1-th copy. */ if (TYPE_SIGNED (Idx) || end != -1) for (i = start + 2; i <= end; ++i) { elem = duplicate_tree (elem, dfa); tree = create_tree (dfa, tree, elem, CONCAT); if (__glibc_unlikely (elem == NULL || tree == NULL)) goto parse_dup_op_espace; tree = create_tree (dfa, tree, NULL, OP_ALT); if (__glibc_unlikely (tree == NULL)) goto parse_dup_op_espace; } if (old_tree) tree = create_tree (dfa, old_tree, tree, CONCAT); return tree; parse_dup_op_espace: *err = REG_ESPACE; return NULL; } /* Size of the names for collating symbol/equivalence_class/character_class. I'm not sure, but maybe enough. */ #define BRACKET_NAME_BUF_SIZE 32 #ifndef _LIBC /* Convert the byte B to the corresponding wide character. In a unibyte locale, treat B as itself. In a multibyte locale, return WEOF if B is an encoding error. */ static wint_t parse_byte (unsigned char b, re_dfa_t const *dfa) { return dfa->mb_cur_max > 1 ? __btowc (b) : b; } /* Local function for parse_bracket_exp used in _LIBC environment. Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and mbcset->range_ends, is a pointer argument since we may update it. */ static reg_errcode_t build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc, bracket_elem_t *start_elem, bracket_elem_t *end_elem, re_dfa_t *dfa, reg_syntax_t syntax, uint_fast32_t nrules, const unsigned char *collseqmb, const char *collseqwc, int_fast32_t table_size, const void *symb_table, const unsigned char *extra) { /* Equivalence Classes and Character Classes can't be a range start/end. */ if (__glibc_unlikely (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS)) return REG_ERANGE; /* We can handle no multi character collating elements without libc support. */ if (__glibc_unlikely ((start_elem->type == COLL_SYM && strlen ((char *) start_elem->opr.name) > 1) || (end_elem->type == COLL_SYM && strlen ((char *) end_elem->opr.name) > 1))) return REG_ECOLLATE; unsigned int start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] : 0)), end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] : 0)); wint_t start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM) ? parse_byte (start_ch, dfa) : start_elem->opr.wch), end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM) ? parse_byte (end_ch, dfa) : end_elem->opr.wch); if (start_wc == WEOF || end_wc == WEOF) return REG_ECOLLATE; else if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES) && start_wc > end_wc)) return REG_ERANGE; /* Got valid collation sequence values, add them as a new entry. However, for !_LIBC we have no collation elements: if the character set is single byte, the single byte character set that we build below suffices. parse_bracket_exp passes no MBCSET if dfa->mb_cur_max == 1. */ if (dfa->mb_cur_max > 1) { /* Check the space of the arrays. */ if (__glibc_unlikely (*range_alloc == mbcset->nranges)) { /* There is not enough space, need realloc. */ wchar_t *new_array_start, *new_array_end; Idx new_nranges; /* +1 in case of mbcset->nranges is 0. */ new_nranges = 2 * mbcset->nranges + 1; /* Use realloc since mbcset->range_starts and mbcset->range_ends are NULL if *range_alloc == 0. */ new_array_start = re_realloc (mbcset->range_starts, wchar_t, new_nranges); new_array_end = re_realloc (mbcset->range_ends, wchar_t, new_nranges); if (__glibc_unlikely (new_array_start == NULL || new_array_end == NULL)) { re_free (new_array_start); re_free (new_array_end); return REG_ESPACE; } mbcset->range_starts = new_array_start; mbcset->range_ends = new_array_end; *range_alloc = new_nranges; } mbcset->range_starts[mbcset->nranges] = start_wc; mbcset->range_ends[mbcset->nranges++] = end_wc; } /* Build the table for single byte characters. */ for (wchar_t wc = 0; wc < SBC_MAX; ++wc) { if (start_wc <= wc && wc <= end_wc) bitset_set (sbcset, wc); } return REG_NOERROR; } #endif /* not _LIBC */ #ifndef _LIBC /* Helper function for parse_bracket_exp only used in case of NOT _LIBC. Build the collating element which is represented by NAME. The result are written to MBCSET and SBCSET. COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a pointer argument since we may update it. */ static reg_errcode_t build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, Idx *coll_sym_alloc, const unsigned char *name, uint_fast32_t nrules, int_fast32_t table_size, const void *symb_table, const unsigned char *extra) { size_t name_len = strlen ((const char *) name); if (__glibc_unlikely (name_len != 1)) return REG_ECOLLATE; else { bitset_set (sbcset, name[0]); return REG_NOERROR; } } #endif /* not _LIBC */ #ifdef _LIBC /* Local function for parse_bracket_exp used in _LIBC environment. Seek the collating symbol entry corresponding to NAME. Return the index of the symbol in the SYMB_TABLE, or -1 if not found. */ static __always_inline int32_t seek_collating_symbol_entry (const unsigned char *name, size_t name_len, const int32_t *symb_table, int_fast32_t table_size, const unsigned char *extra) { int_fast32_t elem; for (elem = 0; elem < table_size; elem++) if (symb_table[2 * elem] != 0) { int32_t idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; if (/* Compare the length of the name. */ name_len == extra[idx] /* Compare the name. */ && memcmp (name, &extra[idx + 1], name_len) == 0) /* Yep, this is the entry. */ return elem; } return -1; } /* Local function for parse_bracket_exp used in _LIBC environment. Look up the collation sequence value of BR_ELEM. Return the value if succeeded, UINT_MAX otherwise. */ static __always_inline unsigned int lookup_collation_sequence_value (bracket_elem_t *br_elem, uint32_t nrules, const unsigned char *collseqmb, const char *collseqwc, int_fast32_t table_size, const int32_t *symb_table, const unsigned char *extra) { if (br_elem->type == SB_CHAR) { /* if (MB_CUR_MAX == 1) */ if (nrules == 0) return collseqmb[br_elem->opr.ch]; else { wint_t wc = __btowc (br_elem->opr.ch); return __collseq_table_lookup (collseqwc, wc); } } else if (br_elem->type == MB_CHAR) { if (nrules != 0) return __collseq_table_lookup (collseqwc, br_elem->opr.wch); } else if (br_elem->type == COLL_SYM) { size_t sym_name_len = strlen ((char *) br_elem->opr.name); if (nrules != 0) { int32_t elem, idx; elem = seek_collating_symbol_entry (br_elem->opr.name, sym_name_len, symb_table, table_size, extra); if (elem != -1) { /* We found the entry. */ idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; /* Skip the byte sequence of the collating element. */ idx += 1 + extra[idx]; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; /* Skip the multibyte collation sequence value. */ idx += sizeof (unsigned int); /* Skip the wide char sequence of the collating element. */ idx += sizeof (unsigned int) * (1 + *(unsigned int *) (extra + idx)); /* Return the collation sequence value. */ return *(unsigned int *) (extra + idx); } else if (sym_name_len == 1) { /* No valid character. Match it as a single byte character. */ return collseqmb[br_elem->opr.name[0]]; } } else if (sym_name_len == 1) return collseqmb[br_elem->opr.name[0]]; } return UINT_MAX; } /* Local function for parse_bracket_exp used in _LIBC environment. Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and mbcset->range_ends, is a pointer argument since we may update it. */ static __always_inline reg_errcode_t build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc, bracket_elem_t *start_elem, bracket_elem_t *end_elem, re_dfa_t *dfa, reg_syntax_t syntax, uint32_t nrules, const unsigned char *collseqmb, const char *collseqwc, int_fast32_t table_size, const int32_t *symb_table, const unsigned char *extra) { unsigned int ch; uint32_t start_collseq; uint32_t end_collseq; /* Equivalence Classes and Character Classes can't be a range start/end. */ if (__glibc_unlikely (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS)) return REG_ERANGE; /* FIXME: Implement rational ranges here, too. */ start_collseq = lookup_collation_sequence_value (start_elem, nrules, collseqmb, collseqwc, table_size, symb_table, extra); end_collseq = lookup_collation_sequence_value (end_elem, nrules, collseqmb, collseqwc, table_size, symb_table, extra); /* Check start/end collation sequence values. */ if (__glibc_unlikely (start_collseq == UINT_MAX || end_collseq == UINT_MAX)) return REG_ECOLLATE; if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES) && start_collseq > end_collseq)) return REG_ERANGE; /* Got valid collation sequence values, add them as a new entry. However, if we have no collation elements, and the character set is single byte, the single byte character set that we build below suffices. */ if (nrules > 0 || dfa->mb_cur_max > 1) { /* Check the space of the arrays. */ if (__glibc_unlikely (*range_alloc == mbcset->nranges)) { /* There is not enough space, need realloc. */ uint32_t *new_array_start; uint32_t *new_array_end; int new_nranges; /* +1 in case of mbcset->nranges is 0. */ new_nranges = 2 * mbcset->nranges + 1; new_array_start = re_realloc (mbcset->range_starts, uint32_t, new_nranges); new_array_end = re_realloc (mbcset->range_ends, uint32_t, new_nranges); if (__glibc_unlikely (new_array_start == NULL || new_array_end == NULL)) return REG_ESPACE; mbcset->range_starts = new_array_start; mbcset->range_ends = new_array_end; *range_alloc = new_nranges; } mbcset->range_starts[mbcset->nranges] = start_collseq; mbcset->range_ends[mbcset->nranges++] = end_collseq; } /* Build the table for single byte characters. */ for (ch = 0; ch < SBC_MAX; ch++) { uint32_t ch_collseq; /* if (MB_CUR_MAX == 1) */ if (nrules == 0) ch_collseq = collseqmb[ch]; else ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch)); if (start_collseq <= ch_collseq && ch_collseq <= end_collseq) bitset_set (sbcset, ch); } return REG_NOERROR; } /* Local function for parse_bracket_exp used in _LIBC environment. Build the collating element which is represented by NAME. The result are written to MBCSET and SBCSET. COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a pointer argument since we may update it. */ static __always_inline reg_errcode_t build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, Idx *coll_sym_alloc, const unsigned char *name, uint_fast32_t nrules, int_fast32_t table_size, const int32_t *symb_table, const unsigned char *extra) { int32_t elem, idx; size_t name_len = strlen ((const char *) name); if (nrules != 0) { elem = seek_collating_symbol_entry (name, name_len, symb_table, table_size, extra); if (elem != -1) { /* We found the entry. */ idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; } else if (name_len == 1) { /* No valid character, treat it as a normal character. */ bitset_set (sbcset, name[0]); return REG_NOERROR; } else return REG_ECOLLATE; /* Got valid collation sequence, add it as a new entry. */ /* Check the space of the arrays. */ if (__glibc_unlikely (*coll_sym_alloc == mbcset->ncoll_syms)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->ncoll_syms is 0. */ int new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1; /* Use realloc since mbcset->coll_syms is NULL if *alloc == 0. */ int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t, new_coll_sym_alloc); if (__glibc_unlikely (new_coll_syms == NULL)) return REG_ESPACE; mbcset->coll_syms = new_coll_syms; *coll_sym_alloc = new_coll_sym_alloc; } mbcset->coll_syms[mbcset->ncoll_syms++] = idx; return REG_NOERROR; } else { if (__glibc_unlikely (name_len != 1)) return REG_ECOLLATE; else { bitset_set (sbcset, name[0]); return REG_NOERROR; } } } #endif /* _LIBC */ /* This function parse bracket expression like "[abc]", "[a-c]", "[[.a-a.]]" etc. */ static bin_tree_t * parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) { const unsigned char *collseqmb = NULL; const char *collseqwc = NULL; uint_fast32_t nrules = 0; int_fast32_t table_size = 0; const void *symb_table = NULL; const unsigned char *extra = NULL; re_token_t br_token; re_bitset_ptr_t sbcset; re_charset_t *mbcset; Idx coll_sym_alloc = 0, range_alloc = 0, mbchar_alloc = 0; Idx equiv_class_alloc = 0, char_class_alloc = 0; bool non_match = false; bin_tree_t *work_tree; int token_len; bool first_round = true; #ifdef _LIBC collseqmb = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules) { /* if (MB_CUR_MAX > 1) */ collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); symb_table = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); } #endif sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); if (__glibc_unlikely (sbcset == NULL || mbcset == NULL)) { re_free (sbcset); re_free (mbcset); *err = REG_ESPACE; return NULL; } token_len = peek_token_bracket (token, regexp, syntax); if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } if (token->type == OP_NON_MATCH_LIST) { mbcset->non_match = 1; non_match = true; if (syntax & RE_HAT_LISTS_NOT_NEWLINE) bitset_set (sbcset, '\n'); re_string_skip_bytes (regexp, token_len); /* Skip a token. */ token_len = peek_token_bracket (token, regexp, syntax); if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } } /* We treat the first ']' as a normal character. */ if (token->type == OP_CLOSE_BRACKET) token->type = CHARACTER; while (1) { bracket_elem_t start_elem, end_elem; unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE]; unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE]; reg_errcode_t ret; int token_len2 = 0; bool is_range_exp = false; re_token_t token2; start_elem.opr.name = start_name_buf; start_elem.type = COLL_SYM; ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa, syntax, first_round); if (__glibc_unlikely (ret != REG_NOERROR)) { *err = ret; goto parse_bracket_exp_free_return; } first_round = false; /* Get information about the next token. We need it in any case. */ token_len = peek_token_bracket (token, regexp, syntax); /* Do not check for ranges if we know they are not allowed. */ if (start_elem.type != CHAR_CLASS && start_elem.type != EQUIV_CLASS) { if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token->type == OP_CHARSET_RANGE) { re_string_skip_bytes (regexp, token_len); /* Skip '-'. */ token_len2 = peek_token_bracket (&token2, regexp, syntax); if (__glibc_unlikely (token2.type == END_OF_RE)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token2.type == OP_CLOSE_BRACKET) { /* We treat the last '-' as a normal character. */ re_string_skip_bytes (regexp, -token_len); token->type = CHARACTER; } else is_range_exp = true; } } if (is_range_exp == true) { end_elem.opr.name = end_name_buf; end_elem.type = COLL_SYM; ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2, dfa, syntax, true); if (__glibc_unlikely (ret != REG_NOERROR)) { *err = ret; goto parse_bracket_exp_free_return; } token_len = peek_token_bracket (token, regexp, syntax); *err = build_range_exp (sbcset, mbcset, &range_alloc, &start_elem, &end_elem, dfa, syntax, nrules, collseqmb, collseqwc, table_size, symb_table, extra); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; } else { switch (start_elem.type) { case SB_CHAR: bitset_set (sbcset, start_elem.opr.ch); break; case MB_CHAR: /* Check whether the array has enough space. */ if (__glibc_unlikely (mbchar_alloc == mbcset->nmbchars)) { wchar_t *new_mbchars; /* Not enough, realloc it. */ /* +1 in case of mbcset->nmbchars is 0. */ mbchar_alloc = 2 * mbcset->nmbchars + 1; /* Use realloc since array is NULL if *alloc == 0. */ new_mbchars = re_realloc (mbcset->mbchars, wchar_t, mbchar_alloc); if (__glibc_unlikely (new_mbchars == NULL)) goto parse_bracket_exp_espace; mbcset->mbchars = new_mbchars; } mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch; break; case EQUIV_CLASS: *err = build_equiv_class (sbcset, mbcset, &equiv_class_alloc, start_elem.opr.name); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; break; case COLL_SYM: *err = build_collating_symbol (sbcset, mbcset, &coll_sym_alloc, start_elem.opr.name, nrules, table_size, symb_table, extra); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; break; case CHAR_CLASS: *err = build_charclass (regexp->trans, sbcset, mbcset, &char_class_alloc, (const char *) start_elem.opr.name, syntax); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; break; default: DEBUG_ASSERT (false); break; } } if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token->type == OP_CLOSE_BRACKET) break; } re_string_skip_bytes (regexp, token_len); /* Skip a token. */ /* If it is non-matching list. */ if (non_match) bitset_not (sbcset); /* Ensure only single byte characters are set. */ if (dfa->mb_cur_max > 1) bitset_mask (sbcset, dfa->sb_char); if (mbcset->nmbchars || mbcset->ncoll_syms || mbcset->nequiv_classes || mbcset->nranges || (dfa->mb_cur_max > 1 && (mbcset->nchar_classes || mbcset->non_match))) { bin_tree_t *mbc_tree; int sbc_idx; /* Build a tree for complex bracket. */ dfa->has_mb_node = 1; br_token.type = COMPLEX_BRACKET; br_token.opr.mbcset = mbcset; mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (mbc_tree == NULL)) goto parse_bracket_exp_espace; for (sbc_idx = 0; sbc_idx < BITSET_WORDS; ++sbc_idx) if (sbcset[sbc_idx]) break; /* If there are no bits set in sbcset, there is no point of having both SIMPLE_BRACKET and COMPLEX_BRACKET. */ if (sbc_idx < BITSET_WORDS) { /* Build a tree for simple bracket. */ br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; work_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (work_tree == NULL)) goto parse_bracket_exp_espace; /* Then join them by ALT node. */ work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT); if (__glibc_unlikely (work_tree == NULL)) goto parse_bracket_exp_espace; } else { re_free (sbcset); work_tree = mbc_tree; } } else { free_charset (mbcset); /* Build a tree for simple bracket. */ br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; work_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (work_tree == NULL)) goto parse_bracket_exp_espace; } return work_tree; parse_bracket_exp_espace: *err = REG_ESPACE; parse_bracket_exp_free_return: re_free (sbcset); free_charset (mbcset); return NULL; } /* Parse an element in the bracket expression. */ static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token, int token_len, re_dfa_t *dfa, reg_syntax_t syntax, bool accept_hyphen) { int cur_char_size; cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp)); if (cur_char_size > 1) { elem->type = MB_CHAR; elem->opr.wch = re_string_wchar_at (regexp, re_string_cur_idx (regexp)); re_string_skip_bytes (regexp, cur_char_size); return REG_NOERROR; } re_string_skip_bytes (regexp, token_len); /* Skip a token. */ if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS || token->type == OP_OPEN_EQUIV_CLASS) return parse_bracket_symbol (elem, regexp, token); if (__glibc_unlikely (token->type == OP_CHARSET_RANGE) && !accept_hyphen) { /* A '-' must only appear as anything but a range indicator before the closing bracket. Everything else is an error. */ re_token_t token2; (void) peek_token_bracket (&token2, regexp, syntax); if (token2.type != OP_CLOSE_BRACKET) /* The actual error value is not standardized since this whole case is undefined. But ERANGE makes good sense. */ return REG_ERANGE; } elem->type = SB_CHAR; elem->opr.ch = token->opr.c; return REG_NOERROR; } /* Parse a bracket symbol in the bracket expression. Bracket symbols are such as [:<character_class>:], [.<collating_element>.], and [=<equivalent_class>=]. */ static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token) { unsigned char ch, delim = token->opr.c; int i = 0; if (re_string_eoi(regexp)) return REG_EBRACK; for (;; ++i) { if (i >= BRACKET_NAME_BUF_SIZE) return REG_EBRACK; if (token->type == OP_OPEN_CHAR_CLASS) ch = re_string_fetch_byte_case (regexp); else ch = re_string_fetch_byte (regexp); if (re_string_eoi(regexp)) return REG_EBRACK; if (ch == delim && re_string_peek_byte (regexp, 0) == ']') break; elem->opr.name[i] = ch; } re_string_skip_bytes (regexp, 1); elem->opr.name[i] = '\0'; switch (token->type) { case OP_OPEN_COLL_ELEM: elem->type = COLL_SYM; break; case OP_OPEN_EQUIV_CLASS: elem->type = EQUIV_CLASS; break; case OP_OPEN_CHAR_CLASS: elem->type = CHAR_CLASS; break; default: break; } return REG_NOERROR; } /* Helper function for parse_bracket_exp. Build the equivalence class which is represented by NAME. The result are written to MBCSET and SBCSET. EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes, is a pointer argument since we may update it. */ static reg_errcode_t build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, Idx *equiv_class_alloc, const unsigned char *name) { #ifdef _LIBC uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { const int32_t *table, *indirect; const unsigned char *weights, *extra, *cp; unsigned char char_buf[2]; int32_t idx1, idx2; unsigned int ch; size_t len; /* Calculate the index for equivalence class. */ cp = name; table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); idx1 = findidx (table, indirect, extra, &cp, -1); if (__glibc_unlikely (idx1 == 0 || *cp != '\0')) /* This isn't a valid character. */ return REG_ECOLLATE; /* Build single byte matching table for this equivalence class. */ len = weights[idx1 & 0xffffff]; for (ch = 0; ch < SBC_MAX; ++ch) { char_buf[0] = ch; cp = char_buf; idx2 = findidx (table, indirect, extra, &cp, 1); /* idx2 = table[ch]; */ if (idx2 == 0) /* This isn't a valid character. */ continue; /* Compare only if the length matches and the collation rule index is the same. */ if (len == weights[idx2 & 0xffffff] && (idx1 >> 24) == (idx2 >> 24) && memcmp (weights + (idx1 & 0xffffff) + 1, weights + (idx2 & 0xffffff) + 1, len) == 0) bitset_set (sbcset, ch); } /* Check whether the array has enough space. */ if (__glibc_unlikely (*equiv_class_alloc == mbcset->nequiv_classes)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->nequiv_classes is 0. */ Idx new_equiv_class_alloc = 2 * mbcset->nequiv_classes + 1; /* Use realloc since the array is NULL if *alloc == 0. */ int32_t *new_equiv_classes = re_realloc (mbcset->equiv_classes, int32_t, new_equiv_class_alloc); if (__glibc_unlikely (new_equiv_classes == NULL)) return REG_ESPACE; mbcset->equiv_classes = new_equiv_classes; *equiv_class_alloc = new_equiv_class_alloc; } mbcset->equiv_classes[mbcset->nequiv_classes++] = idx1; } else #endif /* _LIBC */ { if (__glibc_unlikely (strlen ((const char *) name) != 1)) return REG_ECOLLATE; bitset_set (sbcset, *name); } return REG_NOERROR; } /* Helper function for parse_bracket_exp. Build the character class which is represented by NAME. The result are written to MBCSET and SBCSET. CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes, is a pointer argument since we may update it. */ static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, re_charset_t *mbcset, Idx *char_class_alloc, const char *class_name, reg_syntax_t syntax) { int i; const char *name = class_name; /* In case of REG_ICASE "upper" and "lower" match the both of upper and lower cases. */ if ((syntax & RE_ICASE) && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0)) name = "alpha"; /* Check the space of the arrays. */ if (__glibc_unlikely (*char_class_alloc == mbcset->nchar_classes)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->nchar_classes is 0. */ Idx new_char_class_alloc = 2 * mbcset->nchar_classes + 1; /* Use realloc since array is NULL if *alloc == 0. */ wctype_t *new_char_classes = re_realloc (mbcset->char_classes, wctype_t, new_char_class_alloc); if (__glibc_unlikely (new_char_classes == NULL)) return REG_ESPACE; mbcset->char_classes = new_char_classes; *char_class_alloc = new_char_class_alloc; } mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name); #define BUILD_CHARCLASS_LOOP(ctype_func) \ do { \ if (__glibc_unlikely (trans != NULL)) \ { \ for (i = 0; i < SBC_MAX; ++i) \ if (ctype_func (i)) \ bitset_set (sbcset, trans[i]); \ } \ else \ { \ for (i = 0; i < SBC_MAX; ++i) \ if (ctype_func (i)) \ bitset_set (sbcset, i); \ } \ } while (0) if (strcmp (name, "alnum") == 0) BUILD_CHARCLASS_LOOP (isalnum); else if (strcmp (name, "cntrl") == 0) BUILD_CHARCLASS_LOOP (iscntrl); else if (strcmp (name, "lower") == 0) BUILD_CHARCLASS_LOOP (islower); else if (strcmp (name, "space") == 0) BUILD_CHARCLASS_LOOP (isspace); else if (strcmp (name, "alpha") == 0) BUILD_CHARCLASS_LOOP (isalpha); else if (strcmp (name, "digit") == 0) BUILD_CHARCLASS_LOOP (isdigit); else if (strcmp (name, "print") == 0) BUILD_CHARCLASS_LOOP (isprint); else if (strcmp (name, "upper") == 0) BUILD_CHARCLASS_LOOP (isupper); else if (strcmp (name, "blank") == 0) BUILD_CHARCLASS_LOOP (isblank); else if (strcmp (name, "graph") == 0) BUILD_CHARCLASS_LOOP (isgraph); else if (strcmp (name, "punct") == 0) BUILD_CHARCLASS_LOOP (ispunct); else if (strcmp (name, "xdigit") == 0) BUILD_CHARCLASS_LOOP (isxdigit); else return REG_ECTYPE; return REG_NOERROR; } static bin_tree_t * build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, const char *class_name, const char *extra, bool non_match, reg_errcode_t *err) { re_bitset_ptr_t sbcset; re_charset_t *mbcset; Idx alloc = 0; reg_errcode_t ret; bin_tree_t *tree; sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); if (__glibc_unlikely (sbcset == NULL)) { *err = REG_ESPACE; return NULL; } mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); if (__glibc_unlikely (mbcset == NULL)) { re_free (sbcset); *err = REG_ESPACE; return NULL; } mbcset->non_match = non_match; /* We don't care the syntax in this case. */ ret = build_charclass (trans, sbcset, mbcset, &alloc, class_name, 0); if (__glibc_unlikely (ret != REG_NOERROR)) { re_free (sbcset); free_charset (mbcset); *err = ret; return NULL; } /* \w match '_' also. */ for (; *extra; extra++) bitset_set (sbcset, *extra); /* If it is non-matching list. */ if (non_match) bitset_not (sbcset); /* Ensure only single byte characters are set. */ if (dfa->mb_cur_max > 1) bitset_mask (sbcset, dfa->sb_char); /* Build a tree for simple bracket. */ re_token_t br_token = { .type = SIMPLE_BRACKET, .opr.sbcset = sbcset }; tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (tree == NULL)) goto build_word_op_espace; if (dfa->mb_cur_max > 1) { bin_tree_t *mbc_tree; /* Build a tree for complex bracket. */ br_token.type = COMPLEX_BRACKET; br_token.opr.mbcset = mbcset; dfa->has_mb_node = 1; mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (mbc_tree == NULL)) goto build_word_op_espace; /* Then join them by ALT node. */ tree = create_tree (dfa, tree, mbc_tree, OP_ALT); if (__glibc_likely (mbc_tree != NULL)) return tree; } else { free_charset (mbcset); return tree; } build_word_op_espace: re_free (sbcset); free_charset (mbcset); *err = REG_ESPACE; return NULL; } /* This is intended for the expressions like "a{1,3}". Fetch a number from 'input', and return the number. Return -1 if the number field is empty like "{,1}". Return RE_DUP_MAX + 1 if the number field is too large. Return -2 if an error occurred. */ static Idx fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax) { Idx num = -1; unsigned char c; while (1) { fetch_token (token, input, syntax); c = token->opr.c; if (__glibc_unlikely (token->type == END_OF_RE)) return -2; if (token->type == OP_CLOSE_DUP_NUM || c == ',') break; num = ((token->type != CHARACTER || c < '0' || '9' < c || num == -2) ? -2 : num == -1 ? c - '0' : MIN (RE_DUP_MAX + 1, num * 10 + c - '0')); } return num; } static void free_charset (re_charset_t *cset) { re_free (cset->mbchars); #ifdef _LIBC re_free (cset->coll_syms); re_free (cset->equiv_classes); #endif re_free (cset->range_starts); re_free (cset->range_ends); re_free (cset->char_classes); re_free (cset); } /* Functions for binary tree operation. */ /* Create a tree node. */ static bin_tree_t * create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, re_token_type_t type) { re_token_t t = { .type = type }; return create_token_tree (dfa, left, right, &t); } static bin_tree_t * create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, const re_token_t *token) { bin_tree_t *tree; if (__glibc_unlikely (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE)) { bin_tree_storage_t *storage = re_malloc (bin_tree_storage_t, 1); if (storage == NULL) return NULL; storage->next = dfa->str_tree_storage; dfa->str_tree_storage = storage; dfa->str_tree_storage_idx = 0; } tree = &dfa->str_tree_storage->data[dfa->str_tree_storage_idx++]; tree->parent = NULL; tree->left = left; tree->right = right; tree->token = *token; tree->token.duplicated = 0; tree->token.opt_subexp = 0; tree->first = NULL; tree->next = NULL; tree->node_idx = -1; if (left != NULL) left->parent = tree; if (right != NULL) right->parent = tree; return tree; } /* Mark the tree SRC as an optional subexpression. To be called from preorder or postorder. */ static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node) { Idx idx = (uintptr_t) extra; if (node->token.type == SUBEXP && node->token.opr.idx == idx) node->token.opt_subexp = 1; return REG_NOERROR; } /* Free the allocated memory inside NODE. */ static void free_token (re_token_t *node) { if (node->type == COMPLEX_BRACKET && node->duplicated == 0) free_charset (node->opr.mbcset); else if (node->type == SIMPLE_BRACKET && node->duplicated == 0) re_free (node->opr.sbcset); } /* Worker function for tree walking. Free the allocated memory inside NODE and its children. */ static reg_errcode_t free_tree (void *extra, bin_tree_t *node) { free_token (&node->token); return REG_NOERROR; } /* Duplicate the node SRC, and return new node. This is a preorder visit similar to the one implemented by the generic visitor, but we need more infrastructure to maintain two parallel trees --- so, it's easier to duplicate. */ static bin_tree_t * duplicate_tree (const bin_tree_t *root, re_dfa_t *dfa) { const bin_tree_t *node; bin_tree_t *dup_root; bin_tree_t **p_new = &dup_root, *dup_node = root->parent; for (node = root; ; ) { /* Create a new tree and link it back to the current parent. */ *p_new = create_token_tree (dfa, NULL, NULL, &node->token); if (*p_new == NULL) return NULL; (*p_new)->parent = dup_node; (*p_new)->token.duplicated = 1; dup_node = *p_new; /* Go to the left node, or up and to the right. */ if (node->left) { node = node->left; p_new = &dup_node->left; } else { const bin_tree_t *prev = NULL; while (node->right == prev || node->right == NULL) { prev = node; node = node->parent; dup_node = dup_node->parent; if (!node) return dup_root; } node = node->right; p_new = &dup_node->right; } } } ������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/regex_internal.c�����������������������������������������������������0000644�0001750�0001750�00000136737�14557510505�015436� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ static void re_string_construct_common (const char *str, Idx len, re_string_t *pstr, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa); static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, re_hashval_t hash); static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context, re_hashval_t hash); static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len); static void build_wcs_buffer (re_string_t *pstr); static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr); static void build_upper_buffer (re_string_t *pstr); static void re_string_translate_buffer (re_string_t *pstr); static unsigned int re_string_context_at (const re_string_t *input, Idx idx, int eflags) __attribute__ ((pure)); /* Functions for string operation. */ /* This function allocate the buffers. It is necessary to call re_string_reconstruct before using the object. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { reg_errcode_t ret; Idx init_buf_len; /* Ensure at least one character fits into the buffers. */ if (init_len < dfa->mb_cur_max) init_len = dfa->mb_cur_max; init_buf_len = (len + 1 < init_len) ? len + 1: init_len; re_string_construct_common (str, len, pstr, trans, icase, dfa); ret = re_string_realloc_buffers (pstr, init_buf_len); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; pstr->word_char = dfa->word_char; pstr->word_ops_used = dfa->word_ops_used; pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; pstr->valid_len = (pstr->mbs_allocated || dfa->mb_cur_max > 1) ? 0 : len; pstr->valid_raw_len = pstr->valid_len; return REG_NOERROR; } /* This function allocate the buffers, and initialize them. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_construct (re_string_t *pstr, const char *str, Idx len, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { reg_errcode_t ret; memset (pstr, '\0', sizeof (re_string_t)); re_string_construct_common (str, len, pstr, trans, icase, dfa); if (len > 0) { ret = re_string_realloc_buffers (pstr, len + 1); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; if (icase) { if (dfa->mb_cur_max > 1) { while (1) { ret = build_wcs_upper_buffer (pstr); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; if (pstr->valid_raw_len >= len) break; if (pstr->bufs_len > pstr->valid_len + dfa->mb_cur_max) break; ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } } else build_upper_buffer (pstr); } else { if (dfa->mb_cur_max > 1) build_wcs_buffer (pstr); else { if (trans != NULL) re_string_translate_buffer (pstr); else { pstr->valid_len = pstr->bufs_len; pstr->valid_raw_len = pstr->bufs_len; } } } return REG_NOERROR; } /* Helper functions for re_string_allocate, and re_string_construct. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len) { if (pstr->mb_cur_max > 1) { wint_t *new_wcs; /* Avoid overflow in realloc. */ const size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx)); if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < new_buf_len)) return REG_ESPACE; new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len); if (__glibc_unlikely (new_wcs == NULL)) return REG_ESPACE; pstr->wcs = new_wcs; if (pstr->offsets != NULL) { Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len); if (__glibc_unlikely (new_offsets == NULL)) return REG_ESPACE; pstr->offsets = new_offsets; } } if (pstr->mbs_allocated) { unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char, new_buf_len); if (__glibc_unlikely (new_mbs == NULL)) return REG_ESPACE; pstr->mbs = new_mbs; } pstr->bufs_len = new_buf_len; return REG_NOERROR; } static void re_string_construct_common (const char *str, Idx len, re_string_t *pstr, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { pstr->raw_mbs = (const unsigned char *) str; pstr->len = len; pstr->raw_len = len; pstr->trans = trans; pstr->icase = icase; pstr->mbs_allocated = (trans != NULL || icase); pstr->mb_cur_max = dfa->mb_cur_max; pstr->is_utf8 = dfa->is_utf8; pstr->map_notascii = dfa->map_notascii; pstr->stop = pstr->len; pstr->raw_stop = pstr->stop; } /* Build wide character buffer PSTR->WCS. If the byte sequence of the string are: <mb1>(0), <mb1>(1), <mb2>(0), <mb2>(1), <sb3> Then wide character buffer will be: <wc1> , WEOF , <wc2> , WEOF , <wc3> We use WEOF for padding, they indicate that the position isn't a first byte of a multibyte character. Note that this function assumes PSTR->VALID_LEN elements are already built and starts from PSTR->VALID_LEN. */ static void build_wcs_buffer (re_string_t *pstr) { #ifdef _LIBC unsigned char buf[MB_LEN_MAX]; DEBUG_ASSERT (MB_LEN_MAX >= pstr->mb_cur_max); #else unsigned char buf[64]; #endif mbstate_t prev_st; Idx byte_idx, end_idx, remain_len; size_t mbclen; /* Build the buffers from pstr->valid_len to either pstr->len or pstr->bufs_len. */ end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (byte_idx = pstr->valid_len; byte_idx < end_idx;) { wchar_t wc; const char *p; remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; /* Apply the translation if we need. */ if (__glibc_unlikely (pstr->trans != NULL)) { int i, ch; for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) { ch = pstr->raw_mbs [pstr->raw_mbs_idx + byte_idx + i]; buf[i] = pstr->mbs[byte_idx + i] = pstr->trans[ch]; } p = (const char *) buf; } else p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx; mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); if (__glibc_unlikely (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len))) { /* We treat these cases as a singlebyte character. */ mbclen = 1; wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; if (__glibc_unlikely (pstr->trans != NULL)) wc = pstr->trans[wc]; pstr->cur_state = prev_st; } else if (__glibc_unlikely (mbclen == (size_t) -2)) { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } /* Write wide character and padding. */ pstr->wcs[byte_idx++] = wc; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } pstr->valid_len = byte_idx; pstr->valid_raw_len = byte_idx; } /* Build wide character buffer PSTR->WCS like build_wcs_buffer, but for REG_ICASE. */ static reg_errcode_t __attribute_warn_unused_result__ build_wcs_upper_buffer (re_string_t *pstr) { mbstate_t prev_st; Idx src_idx, byte_idx, end_idx, remain_len; size_t mbclen; #ifdef _LIBC char buf[MB_LEN_MAX]; DEBUG_ASSERT (pstr->mb_cur_max <= MB_LEN_MAX); #else char buf[64]; #endif byte_idx = pstr->valid_len; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; /* The following optimization assumes that ASCII characters can be mapped to wide characters with a simple cast. */ if (! pstr->map_notascii && pstr->trans == NULL && !pstr->offsets_needed) { while (byte_idx < end_idx) { wchar_t wc; unsigned char ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; if (isascii (ch) && mbsinit (&pstr->cur_state)) { /* The next step uses the assumption that wchar_t is encoded ASCII-safe: all ASCII values can be converted like this. */ wchar_t wcu = __towupper (ch); if (isascii (wcu)) { pstr->mbs[byte_idx] = wcu; pstr->wcs[byte_idx] = wcu; byte_idx++; continue; } } remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; mbclen = __mbrtowc (&wc, ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx), remain_len, &pstr->cur_state); if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2)) { wchar_t wcu = __towupper (wc); if (wcu != wc) { size_t mbcdlen; mbcdlen = __wcrtomb (buf, wcu, &prev_st); if (__glibc_likely (mbclen == mbcdlen)) memcpy (pstr->mbs + byte_idx, buf, mbclen); else { src_idx = byte_idx; goto offsets_needed; } } else memcpy (pstr->mbs + byte_idx, pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen); pstr->wcs[byte_idx++] = wcu; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } else if (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) { /* It is an invalid character, an incomplete character at the end of the string, or '\0'. Just use the byte. */ pstr->mbs[byte_idx] = ch; /* And also cast it to wide char. */ pstr->wcs[byte_idx++] = (wchar_t) ch; if (__glibc_unlikely (mbclen == (size_t) -1)) pstr->cur_state = prev_st; } else { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } } pstr->valid_len = byte_idx; pstr->valid_raw_len = byte_idx; return REG_NOERROR; } else for (src_idx = pstr->valid_raw_len; byte_idx < end_idx;) { wchar_t wc; const char *p; offsets_needed: remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; if (__glibc_unlikely (pstr->trans != NULL)) { int i, ch; for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) { ch = pstr->raw_mbs [pstr->raw_mbs_idx + src_idx + i]; buf[i] = pstr->trans[ch]; } p = (const char *) buf; } else p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx; mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2)) { wchar_t wcu = __towupper (wc); if (wcu != wc) { size_t mbcdlen; mbcdlen = __wcrtomb ((char *) buf, wcu, &prev_st); if (__glibc_likely (mbclen == mbcdlen)) memcpy (pstr->mbs + byte_idx, buf, mbclen); else if (mbcdlen != (size_t) -1) { size_t i; if (byte_idx + mbcdlen > pstr->bufs_len) { pstr->cur_state = prev_st; break; } if (pstr->offsets == NULL) { pstr->offsets = re_malloc (Idx, pstr->bufs_len); if (pstr->offsets == NULL) return REG_ESPACE; } if (!pstr->offsets_needed) { for (i = 0; i < (size_t) byte_idx; ++i) pstr->offsets[i] = i; pstr->offsets_needed = 1; } memcpy (pstr->mbs + byte_idx, buf, mbcdlen); pstr->wcs[byte_idx] = wcu; pstr->offsets[byte_idx] = src_idx; for (i = 1; i < mbcdlen; ++i) { pstr->offsets[byte_idx + i] = src_idx + (i < mbclen ? i : mbclen - 1); pstr->wcs[byte_idx + i] = WEOF; } pstr->len += mbcdlen - mbclen; if (pstr->raw_stop > src_idx) pstr->stop += mbcdlen - mbclen; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; byte_idx += mbcdlen; src_idx += mbclen; continue; } else memcpy (pstr->mbs + byte_idx, p, mbclen); } else memcpy (pstr->mbs + byte_idx, p, mbclen); if (__glibc_unlikely (pstr->offsets_needed != 0)) { size_t i; for (i = 0; i < mbclen; ++i) pstr->offsets[byte_idx + i] = src_idx + i; } src_idx += mbclen; pstr->wcs[byte_idx++] = wcu; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } else if (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) { /* It is an invalid character or '\0'. Just use the byte. */ int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx]; if (__glibc_unlikely (pstr->trans != NULL)) ch = pstr->trans [ch]; pstr->mbs[byte_idx] = ch; if (__glibc_unlikely (pstr->offsets_needed != 0)) pstr->offsets[byte_idx] = src_idx; ++src_idx; /* And also cast it to wide char. */ pstr->wcs[byte_idx++] = (wchar_t) ch; if (__glibc_unlikely (mbclen == (size_t) -1)) pstr->cur_state = prev_st; } else { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } } pstr->valid_len = byte_idx; pstr->valid_raw_len = src_idx; return REG_NOERROR; } /* Skip characters until the index becomes greater than NEW_RAW_IDX. Return the index. */ static Idx re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, wint_t *last_wc) { mbstate_t prev_st; Idx rawbuf_idx; size_t mbclen; wint_t wc = WEOF; /* Skip the characters which are not necessary to check. */ for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_raw_len; rawbuf_idx < new_raw_idx;) { wchar_t wc2; Idx remain_len = pstr->raw_len - rawbuf_idx; prev_st = pstr->cur_state; mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx, remain_len, &pstr->cur_state); if (__glibc_unlikely (mbclen == (size_t) -2 || mbclen == (size_t) -1 || mbclen == 0)) { /* We treat these cases as a single byte character. */ if (mbclen == 0 || remain_len == 0) wc = L'\0'; else wc = *(unsigned char *) (pstr->raw_mbs + rawbuf_idx); mbclen = 1; pstr->cur_state = prev_st; } else wc = wc2; /* Then proceed the next character. */ rawbuf_idx += mbclen; } *last_wc = wc; return rawbuf_idx; } /* Build the buffer PSTR->MBS, and apply the translation if we need. This function is used in case of REG_ICASE. */ static void build_upper_buffer (re_string_t *pstr) { Idx char_idx, end_idx; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx) { int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx]; if (__glibc_unlikely (pstr->trans != NULL)) ch = pstr->trans[ch]; pstr->mbs[char_idx] = toupper (ch); } pstr->valid_len = char_idx; pstr->valid_raw_len = char_idx; } /* Apply TRANS to the buffer in PSTR. */ static void re_string_translate_buffer (re_string_t *pstr) { Idx buf_idx, end_idx; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx) { int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx]; pstr->mbs[buf_idx] = pstr->trans[ch]; } pstr->valid_len = buf_idx; pstr->valid_raw_len = buf_idx; } /* This function re-construct the buffers. Concretely, convert to wide character in case of pstr->mb_cur_max > 1, convert to upper case in case of REG_ICASE, apply translation. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) { Idx offset; if (__glibc_unlikely (pstr->raw_mbs_idx <= idx)) offset = idx - pstr->raw_mbs_idx; else { /* Reset buffer. */ if (pstr->mb_cur_max > 1) memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); pstr->len = pstr->raw_len; pstr->stop = pstr->raw_stop; pstr->valid_len = 0; pstr->raw_mbs_idx = 0; pstr->valid_raw_len = 0; pstr->offsets_needed = 0; pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF : CONTEXT_NEWLINE | CONTEXT_BEGBUF); if (!pstr->mbs_allocated) pstr->mbs = (unsigned char *) pstr->raw_mbs; offset = idx; } if (__glibc_likely (offset != 0)) { /* Should the already checked characters be kept? */ if (__glibc_likely (offset < pstr->valid_raw_len)) { /* Yes, move them to the front of the buffer. */ if (__glibc_unlikely (pstr->offsets_needed)) { Idx low = 0, high = pstr->valid_len, mid; do { mid = (high + low) / 2; if (pstr->offsets[mid] > offset) high = mid; else if (pstr->offsets[mid] < offset) low = mid + 1; else break; } while (low < high); if (pstr->offsets[mid] < offset) ++mid; pstr->tip_context = re_string_context_at (pstr, mid - 1, eflags); /* This can be quite complicated, so handle specially only the common and easy case where the character with different length representation of lower and upper case is present at or after offset. */ if (pstr->valid_len > offset && mid == offset && pstr->offsets[mid] == offset) { memmove (pstr->wcs, pstr->wcs + offset, (pstr->valid_len - offset) * sizeof (wint_t)); memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); pstr->valid_len -= offset; pstr->valid_raw_len -= offset; for (low = 0; low < pstr->valid_len; low++) pstr->offsets[low] = pstr->offsets[low + offset] - offset; } else { /* Otherwise, just find out how long the partial multibyte character at offset is and fill it with WEOF/255. */ pstr->len = pstr->raw_len - idx + offset; pstr->stop = pstr->raw_stop - idx + offset; pstr->offsets_needed = 0; while (mid > 0 && pstr->offsets[mid - 1] == offset) --mid; while (mid < pstr->valid_len) if (pstr->wcs[mid] != WEOF) break; else ++mid; if (mid == pstr->valid_len) pstr->valid_len = 0; else { pstr->valid_len = pstr->offsets[mid] - offset; if (pstr->valid_len) { for (low = 0; low < pstr->valid_len; ++low) pstr->wcs[low] = WEOF; memset (pstr->mbs, 255, pstr->valid_len); } } pstr->valid_raw_len = pstr->valid_len; } } else { pstr->tip_context = re_string_context_at (pstr, offset - 1, eflags); if (pstr->mb_cur_max > 1) memmove (pstr->wcs, pstr->wcs + offset, (pstr->valid_len - offset) * sizeof (wint_t)); if (__glibc_unlikely (pstr->mbs_allocated)) memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); pstr->valid_len -= offset; pstr->valid_raw_len -= offset; DEBUG_ASSERT (pstr->valid_len > 0); } } else { /* No, skip all characters until IDX. */ Idx prev_valid_len = pstr->valid_len; if (__glibc_unlikely (pstr->offsets_needed)) { pstr->len = pstr->raw_len - idx + offset; pstr->stop = pstr->raw_stop - idx + offset; pstr->offsets_needed = 0; } pstr->valid_len = 0; if (pstr->mb_cur_max > 1) { Idx wcs_idx; wint_t wc = WEOF; if (pstr->is_utf8) { const unsigned char *raw, *p, *end; /* Special case UTF-8. Multi-byte chars start with any byte other than 0x80 - 0xbf. */ raw = pstr->raw_mbs + pstr->raw_mbs_idx; end = raw + (offset - pstr->mb_cur_max); if (end < pstr->raw_mbs) end = pstr->raw_mbs; p = raw + offset - 1; #ifdef _LIBC /* We know the wchar_t encoding is UCS4, so for the simple case, ASCII characters, skip the conversion step. */ if (isascii (*p) && __glibc_likely (pstr->trans == NULL)) { memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); /* pstr->valid_len = 0; */ wc = (wchar_t) *p; } else #endif for (; p >= end; --p) if ((*p & 0xc0) != 0x80) { mbstate_t cur_state; wchar_t wc2; Idx mlen = raw + pstr->len - p; unsigned char buf[6]; size_t mbclen; const unsigned char *pp = p; if (__glibc_unlikely (pstr->trans != NULL)) { int i = mlen < 6 ? mlen : 6; while (--i >= 0) buf[i] = pstr->trans[p[i]]; pp = buf; } /* XXX Don't use mbrtowc, we know which conversion to use (UTF-8 -> UCS4). */ memset (&cur_state, 0, sizeof (cur_state)); mbclen = __mbrtowc (&wc2, (const char *) pp, mlen, &cur_state); if (raw + offset - p <= mbclen && mbclen < (size_t) -2) { memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); pstr->valid_len = mbclen - (raw + offset - p); wc = wc2; } break; } } if (wc == WEOF) pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx; if (wc == WEOF) pstr->tip_context = re_string_context_at (pstr, prev_valid_len - 1, eflags); else pstr->tip_context = ((__glibc_unlikely (pstr->word_ops_used != 0) && IS_WIDE_WORD_CHAR (wc)) ? CONTEXT_WORD : ((IS_WIDE_NEWLINE (wc) && pstr->newline_anchor) ? CONTEXT_NEWLINE : 0)); if (__glibc_unlikely (pstr->valid_len)) { for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx) pstr->wcs[wcs_idx] = WEOF; if (pstr->mbs_allocated) memset (pstr->mbs, 255, pstr->valid_len); } pstr->valid_raw_len = pstr->valid_len; } else { int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1]; pstr->valid_raw_len = 0; if (pstr->trans) c = pstr->trans[c]; pstr->tip_context = (bitset_contain (pstr->word_char, c) ? CONTEXT_WORD : ((IS_NEWLINE (c) && pstr->newline_anchor) ? CONTEXT_NEWLINE : 0)); } } if (!__glibc_unlikely (pstr->mbs_allocated)) pstr->mbs += offset; } pstr->raw_mbs_idx = idx; pstr->len -= offset; pstr->stop -= offset; /* Then build the buffers. */ if (pstr->mb_cur_max > 1) { if (pstr->icase) { reg_errcode_t ret = build_wcs_upper_buffer (pstr); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } else build_wcs_buffer (pstr); } else if (__glibc_unlikely (pstr->mbs_allocated)) { if (pstr->icase) build_upper_buffer (pstr); else if (pstr->trans != NULL) re_string_translate_buffer (pstr); } else pstr->valid_len = pstr->len; pstr->cur_idx = 0; return REG_NOERROR; } static unsigned char __attribute__ ((pure)) re_string_peek_byte_case (const re_string_t *pstr, Idx idx) { int ch; Idx off; /* Handle the common (easiest) cases first. */ if (__glibc_likely (!pstr->mbs_allocated)) return re_string_peek_byte (pstr, idx); if (pstr->mb_cur_max > 1 && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx)) return re_string_peek_byte (pstr, idx); off = pstr->cur_idx + idx; if (pstr->offsets_needed) off = pstr->offsets[off]; ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; /* Ensure that e.g. for tr_TR.UTF-8 BACKSLASH DOTLESS SMALL LETTER I this function returns CAPITAL LETTER I instead of first byte of DOTLESS SMALL LETTER I. The latter would confuse the parser, since peek_byte_case doesn't advance cur_idx in any way. */ if (pstr->offsets_needed && !isascii (ch)) return re_string_peek_byte (pstr, idx); return ch; } static unsigned char re_string_fetch_byte_case (re_string_t *pstr) { if (__glibc_likely (!pstr->mbs_allocated)) return re_string_fetch_byte (pstr); if (pstr->offsets_needed) { Idx off; int ch; /* For tr_TR.UTF-8 [[:islower:]] there is [[: CAPITAL LETTER I WITH DOT lower:]] in mbs. Skip in that case the whole multi-byte character and return the original letter. On the other side, with [[: DOTLESS SMALL LETTER I return [[:I, as doing anything else would complicate things too much. */ if (!re_string_first_byte (pstr, pstr->cur_idx)) return re_string_fetch_byte (pstr); off = pstr->offsets[pstr->cur_idx]; ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; if (! isascii (ch)) return re_string_fetch_byte (pstr); re_string_skip_bytes (pstr, re_string_char_size_at (pstr, pstr->cur_idx)); return ch; } return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++]; } static void re_string_destruct (re_string_t *pstr) { re_free (pstr->wcs); re_free (pstr->offsets); if (pstr->mbs_allocated) re_free (pstr->mbs); } /* Return the context at IDX in INPUT. */ static unsigned int re_string_context_at (const re_string_t *input, Idx idx, int eflags) { int c; if (__glibc_unlikely (idx < 0)) /* In this case, we use the value stored in input->tip_context, since we can't know the character in input->mbs[-1] here. */ return input->tip_context; if (__glibc_unlikely (idx == input->len)) return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF : CONTEXT_NEWLINE | CONTEXT_ENDBUF); if (input->mb_cur_max > 1) { wint_t wc; Idx wc_idx = idx; while(input->wcs[wc_idx] == WEOF) { DEBUG_ASSERT (wc_idx >= 0); --wc_idx; if (wc_idx < 0) return input->tip_context; } wc = input->wcs[wc_idx]; if (__glibc_unlikely (input->word_ops_used != 0) && IS_WIDE_WORD_CHAR (wc)) return CONTEXT_WORD; return (IS_WIDE_NEWLINE (wc) && input->newline_anchor ? CONTEXT_NEWLINE : 0); } else { c = re_string_byte_at (input, idx); if (bitset_contain (input->word_char, c)) return CONTEXT_WORD; return IS_NEWLINE (c) && input->newline_anchor ? CONTEXT_NEWLINE : 0; } } /* Functions for set operation. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_alloc (re_node_set *set, Idx size) { set->alloc = size; set->nelem = 0; set->elems = re_malloc (Idx, size); if (__glibc_unlikely (set->elems == NULL) && (MALLOC_0_IS_NONNULL || size != 0)) return REG_ESPACE; return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_1 (re_node_set *set, Idx elem) { set->alloc = 1; set->nelem = 1; set->elems = re_malloc (Idx, 1); if (__glibc_unlikely (set->elems == NULL)) { set->alloc = set->nelem = 0; return REG_ESPACE; } set->elems[0] = elem; return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2) { set->alloc = 2; set->elems = re_malloc (Idx, 2); if (__glibc_unlikely (set->elems == NULL)) return REG_ESPACE; if (elem1 == elem2) { set->nelem = 1; set->elems[0] = elem1; } else { set->nelem = 2; if (elem1 < elem2) { set->elems[0] = elem1; set->elems[1] = elem2; } else { set->elems[0] = elem2; set->elems[1] = elem1; } } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_copy (re_node_set *dest, const re_node_set *src) { dest->nelem = src->nelem; if (src->nelem > 0) { dest->alloc = dest->nelem; dest->elems = re_malloc (Idx, dest->alloc); if (__glibc_unlikely (dest->elems == NULL)) { dest->alloc = dest->nelem = 0; return REG_ESPACE; } memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); } else re_node_set_init_empty (dest); return REG_NOERROR; } /* Calculate the intersection of the sets SRC1 and SRC2. And merge it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. Note: We assume dest->elems is NULL, when dest->alloc is 0. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1, const re_node_set *src2) { Idx i1, i2, is, id, delta, sbase; if (src1->nelem == 0 || src2->nelem == 0) return REG_NOERROR; /* We need dest->nelem + 2 * elems_in_intersection; this is a conservative estimate. */ if (src1->nelem + src2->nelem + dest->nelem > dest->alloc) { Idx new_alloc = src1->nelem + src2->nelem + dest->alloc; Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc); if (__glibc_unlikely (new_elems == NULL)) return REG_ESPACE; dest->elems = new_elems; dest->alloc = new_alloc; } /* Find the items in the intersection of SRC1 and SRC2, and copy into the top of DEST those that are not already in DEST itself. */ sbase = dest->nelem + src1->nelem + src2->nelem; i1 = src1->nelem - 1; i2 = src2->nelem - 1; id = dest->nelem - 1; for (;;) { if (src1->elems[i1] == src2->elems[i2]) { /* Try to find the item in DEST. Maybe we could binary search? */ while (id >= 0 && dest->elems[id] > src1->elems[i1]) --id; if (id < 0 || dest->elems[id] != src1->elems[i1]) dest->elems[--sbase] = src1->elems[i1]; if (--i1 < 0 || --i2 < 0) break; } /* Lower the highest of the two items. */ else if (src1->elems[i1] < src2->elems[i2]) { if (--i2 < 0) break; } else { if (--i1 < 0) break; } } id = dest->nelem - 1; is = dest->nelem + src1->nelem + src2->nelem - 1; delta = is - sbase + 1; /* Now copy. When DELTA becomes zero, the remaining DEST elements are already in place; this is more or less the same loop that is in re_node_set_merge. */ dest->nelem += delta; if (delta > 0 && id >= 0) for (;;) { if (dest->elems[is] > dest->elems[id]) { /* Copy from the top. */ dest->elems[id + delta--] = dest->elems[is--]; if (delta == 0) break; } else { /* Slide from the bottom. */ dest->elems[id + delta] = dest->elems[id]; if (--id < 0) break; } } /* Copy remaining SRC elements. */ memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); return REG_NOERROR; } /* Calculate the union set of the sets SRC1 and SRC2. And store it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_union (re_node_set *dest, const re_node_set *src1, const re_node_set *src2) { Idx i1, i2, id; if (src1 != NULL && src1->nelem > 0 && src2 != NULL && src2->nelem > 0) { dest->alloc = src1->nelem + src2->nelem; dest->elems = re_malloc (Idx, dest->alloc); if (__glibc_unlikely (dest->elems == NULL)) return REG_ESPACE; } else { if (src1 != NULL && src1->nelem > 0) return re_node_set_init_copy (dest, src1); else if (src2 != NULL && src2->nelem > 0) return re_node_set_init_copy (dest, src2); else re_node_set_init_empty (dest); return REG_NOERROR; } for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;) { if (src1->elems[i1] > src2->elems[i2]) { dest->elems[id++] = src2->elems[i2++]; continue; } if (src1->elems[i1] == src2->elems[i2]) ++i2; dest->elems[id++] = src1->elems[i1++]; } if (i1 < src1->nelem) { memcpy (dest->elems + id, src1->elems + i1, (src1->nelem - i1) * sizeof (Idx)); id += src1->nelem - i1; } else if (i2 < src2->nelem) { memcpy (dest->elems + id, src2->elems + i2, (src2->nelem - i2) * sizeof (Idx)); id += src2->nelem - i2; } dest->nelem = id; return REG_NOERROR; } /* Calculate the union set of the sets DEST and SRC. And store it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_merge (re_node_set *dest, const re_node_set *src) { Idx is, id, sbase, delta; if (src == NULL || src->nelem == 0) return REG_NOERROR; if (dest->alloc < 2 * src->nelem + dest->nelem) { Idx new_alloc = 2 * (src->nelem + dest->alloc); Idx *new_buffer = re_realloc (dest->elems, Idx, new_alloc); if (__glibc_unlikely (new_buffer == NULL)) return REG_ESPACE; dest->elems = new_buffer; dest->alloc = new_alloc; } if (__glibc_unlikely (dest->nelem == 0)) { /* Although we already guaranteed above that dest->alloc != 0 and therefore dest->elems != NULL, add a debug assertion to pacify GCC 11.2.1's -fanalyzer. */ DEBUG_ASSERT (dest->elems); dest->nelem = src->nelem; memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); return REG_NOERROR; } /* Copy into the top of DEST the items of SRC that are not found in DEST. Maybe we could binary search in DEST? */ for (sbase = dest->nelem + 2 * src->nelem, is = src->nelem - 1, id = dest->nelem - 1; is >= 0 && id >= 0; ) { if (dest->elems[id] == src->elems[is]) is--, id--; else if (dest->elems[id] < src->elems[is]) dest->elems[--sbase] = src->elems[is--]; else /* if (dest->elems[id] > src->elems[is]) */ --id; } if (is >= 0) { /* If DEST is exhausted, the remaining items of SRC must be unique. */ sbase -= is + 1; memcpy (dest->elems + sbase, src->elems, (is + 1) * sizeof (Idx)); } id = dest->nelem - 1; is = dest->nelem + 2 * src->nelem - 1; delta = is - sbase + 1; if (delta == 0) return REG_NOERROR; /* Now copy. When DELTA becomes zero, the remaining DEST elements are already in place. */ dest->nelem += delta; for (;;) { if (dest->elems[is] > dest->elems[id]) { /* Copy from the top. */ dest->elems[id + delta--] = dest->elems[is--]; if (delta == 0) break; } else { /* Slide from the bottom. */ dest->elems[id + delta] = dest->elems[id]; if (--id < 0) { /* Copy remaining SRC elements. */ memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); break; } } } return REG_NOERROR; } /* Insert the new element ELEM to the re_node_set* SET. SET should not already have ELEM. Return true if successful. */ static bool __attribute_warn_unused_result__ re_node_set_insert (re_node_set *set, Idx elem) { Idx idx; /* In case the set is empty. */ if (set->alloc == 0) return __glibc_likely (re_node_set_init_1 (set, elem) == REG_NOERROR); if (__glibc_unlikely (set->nelem) == 0) { /* Although we already guaranteed above that set->alloc != 0 and therefore set->elems != NULL, add a debug assertion to pacify GCC 11.2 -fanalyzer. */ DEBUG_ASSERT (set->elems); set->elems[0] = elem; ++set->nelem; return true; } /* Realloc if we need. */ if (set->alloc == set->nelem) { Idx *new_elems; set->alloc = set->alloc * 2; new_elems = re_realloc (set->elems, Idx, set->alloc); if (__glibc_unlikely (new_elems == NULL)) return false; set->elems = new_elems; } /* Move the elements which follows the new element. Test the first element separately to skip a check in the inner loop. */ if (elem < set->elems[0]) { for (idx = set->nelem; idx > 0; idx--) set->elems[idx] = set->elems[idx - 1]; } else { for (idx = set->nelem; set->elems[idx - 1] > elem; idx--) set->elems[idx] = set->elems[idx - 1]; DEBUG_ASSERT (set->elems[idx - 1] < elem); } /* Insert the new element. */ set->elems[idx] = elem; ++set->nelem; return true; } /* Insert the new element ELEM to the re_node_set* SET. SET should not already have any element greater than or equal to ELEM. Return true if successful. */ static bool __attribute_warn_unused_result__ re_node_set_insert_last (re_node_set *set, Idx elem) { /* Realloc if we need. */ if (set->alloc == set->nelem) { Idx *new_elems; set->alloc = (set->alloc + 1) * 2; new_elems = re_realloc (set->elems, Idx, set->alloc); if (__glibc_unlikely (new_elems == NULL)) return false; set->elems = new_elems; } /* Insert the new element. */ set->elems[set->nelem++] = elem; return true; } /* Compare two node sets SET1 and SET2. Return true if SET1 and SET2 are equivalent. */ static bool __attribute__ ((pure)) re_node_set_compare (const re_node_set *set1, const re_node_set *set2) { Idx i; if (set1 == NULL || set2 == NULL || set1->nelem != set2->nelem) return false; for (i = set1->nelem ; --i >= 0 ; ) if (set1->elems[i] != set2->elems[i]) return false; return true; } /* Return (idx + 1) if SET contains the element ELEM, return 0 otherwise. */ static Idx __attribute__ ((pure)) re_node_set_contains (const re_node_set *set, Idx elem) { __re_size_t idx, right, mid; if (set->nelem <= 0) return 0; /* Binary search the element. */ idx = 0; right = set->nelem - 1; while (idx < right) { mid = (idx + right) / 2; if (set->elems[mid] < elem) idx = mid + 1; else right = mid; } return set->elems[idx] == elem ? idx + 1 : 0; } static void re_node_set_remove_at (re_node_set *set, Idx idx) { if (idx < 0 || idx >= set->nelem) return; --set->nelem; for (; idx < set->nelem; idx++) set->elems[idx] = set->elems[idx + 1]; } /* Add the token TOKEN to dfa->nodes, and return the index of the token. Or return -1 if an error occurred. */ static Idx re_dfa_add_node (re_dfa_t *dfa, re_token_t token) { if (__glibc_unlikely (dfa->nodes_len >= dfa->nodes_alloc)) { size_t new_nodes_alloc = dfa->nodes_alloc * 2; Idx *new_nexts, *new_indices; re_node_set *new_edests, *new_eclosures; re_token_t *new_nodes; /* Avoid overflows in realloc. */ const size_t max_object_size = MAX (sizeof (re_token_t), MAX (sizeof (re_node_set), sizeof (Idx))); if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < new_nodes_alloc)) return -1; new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc); if (__glibc_unlikely (new_nodes == NULL)) return -1; dfa->nodes = new_nodes; dfa->nodes_alloc = new_nodes_alloc; new_nexts = re_realloc (dfa->nexts, Idx, new_nodes_alloc); if (new_nexts != NULL) dfa->nexts = new_nexts; new_indices = re_realloc (dfa->org_indices, Idx, new_nodes_alloc); if (new_indices != NULL) dfa->org_indices = new_indices; new_edests = re_realloc (dfa->edests, re_node_set, new_nodes_alloc); if (new_edests != NULL) dfa->edests = new_edests; new_eclosures = re_realloc (dfa->eclosures, re_node_set, new_nodes_alloc); if (new_eclosures != NULL) dfa->eclosures = new_eclosures; if (__glibc_unlikely (new_nexts == NULL || new_indices == NULL || new_edests == NULL || new_eclosures == NULL)) return -1; } dfa->nodes[dfa->nodes_len] = token; dfa->nodes[dfa->nodes_len].constraint = 0; dfa->nodes[dfa->nodes_len].accept_mb = ((token.type == OP_PERIOD && dfa->mb_cur_max > 1) || token.type == COMPLEX_BRACKET); dfa->nexts[dfa->nodes_len] = -1; re_node_set_init_empty (dfa->edests + dfa->nodes_len); re_node_set_init_empty (dfa->eclosures + dfa->nodes_len); return dfa->nodes_len++; } static re_hashval_t calc_state_hash (const re_node_set *nodes, unsigned int context) { re_hashval_t hash = nodes->nelem + context; Idx i; for (i = 0 ; i < nodes->nelem ; i++) hash += nodes->elems[i]; return hash; } /* Search for the state whose node_set is equivalent to NODES. Return the pointer to the state, if we found it in the DFA. Otherwise create the new one and return it. In case of an error return NULL and set the error code in ERR. Note: - We assume NULL as the invalid state, then it is possible that return value is NULL and ERR is REG_NOERROR. - We never return non-NULL value in case of any errors, it is for optimization. */ static re_dfastate_t * __attribute_warn_unused_result__ re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa, const re_node_set *nodes) { re_hashval_t hash; re_dfastate_t *new_state; struct re_state_table_entry *spot; Idx i; #if defined GCC_LINT || defined lint /* Suppress bogus uninitialized-variable warnings. */ *err = REG_NOERROR; #endif if (__glibc_unlikely (nodes->nelem == 0)) { *err = REG_NOERROR; return NULL; } hash = calc_state_hash (nodes, 0); spot = dfa->state_table + (hash & dfa->state_hash_mask); for (i = 0 ; i < spot->num ; i++) { re_dfastate_t *state = spot->array[i]; if (hash != state->hash) continue; if (re_node_set_compare (&state->nodes, nodes)) return state; } /* There are no appropriate state in the dfa, create the new one. */ new_state = create_ci_newstate (dfa, nodes, hash); if (__glibc_unlikely (new_state == NULL)) *err = REG_ESPACE; return new_state; } /* Search for the state whose node_set is equivalent to NODES and whose context is equivalent to CONTEXT. Return the pointer to the state, if we found it in the DFA. Otherwise create the new one and return it. In case of an error return NULL and set the error code in ERR. Note: - We assume NULL as the invalid state, then it is possible that return value is NULL and ERR is REG_NOERROR. - We never return non-NULL value in case of any errors, it is for optimization. */ static re_dfastate_t * __attribute_warn_unused_result__ re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context) { re_hashval_t hash; re_dfastate_t *new_state; struct re_state_table_entry *spot; Idx i; #if defined GCC_LINT || defined lint /* Suppress bogus uninitialized-variable warnings. */ *err = REG_NOERROR; #endif if (nodes->nelem == 0) { *err = REG_NOERROR; return NULL; } hash = calc_state_hash (nodes, context); spot = dfa->state_table + (hash & dfa->state_hash_mask); for (i = 0 ; i < spot->num ; i++) { re_dfastate_t *state = spot->array[i]; if (state->hash == hash && state->context == context && re_node_set_compare (state->entrance_nodes, nodes)) return state; } /* There are no appropriate state in 'dfa', create the new one. */ new_state = create_cd_newstate (dfa, nodes, context, hash); if (__glibc_unlikely (new_state == NULL)) *err = REG_ESPACE; return new_state; } /* Finish initialization of the new state NEWSTATE, and using its hash value HASH put in the appropriate bucket of DFA's state table. Return value indicates the error code if failed. */ static reg_errcode_t __attribute_warn_unused_result__ register_state (const re_dfa_t *dfa, re_dfastate_t *newstate, re_hashval_t hash) { struct re_state_table_entry *spot; reg_errcode_t err; Idx i; newstate->hash = hash; err = re_node_set_alloc (&newstate->non_eps_nodes, newstate->nodes.nelem); if (__glibc_unlikely (err != REG_NOERROR)) return REG_ESPACE; for (i = 0; i < newstate->nodes.nelem; i++) { Idx elem = newstate->nodes.elems[i]; if (!IS_EPSILON_NODE (dfa->nodes[elem].type)) if (! re_node_set_insert_last (&newstate->non_eps_nodes, elem)) return REG_ESPACE; } spot = dfa->state_table + (hash & dfa->state_hash_mask); if (__glibc_unlikely (spot->alloc <= spot->num)) { Idx new_alloc = 2 * spot->num + 2; re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *, new_alloc); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; spot->array = new_array; spot->alloc = new_alloc; } spot->array[spot->num++] = newstate; return REG_NOERROR; } static void free_state (re_dfastate_t *state) { re_node_set_free (&state->non_eps_nodes); re_node_set_free (&state->inveclosure); if (state->entrance_nodes != &state->nodes) { re_node_set_free (state->entrance_nodes); re_free (state->entrance_nodes); } re_node_set_free (&state->nodes); re_free (state->word_trtable); re_free (state->trtable); re_free (state); } /* Create the new state which is independent of contexts. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * __attribute_warn_unused_result__ create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, re_hashval_t hash) { Idx i; reg_errcode_t err; re_dfastate_t *newstate; newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); if (__glibc_unlikely (newstate == NULL)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_free (newstate); return NULL; } newstate->entrance_nodes = &newstate->nodes; for (i = 0 ; i < nodes->nelem ; i++) { re_token_t *node = dfa->nodes + nodes->elems[i]; re_token_type_t type = node->type; if (type == CHARACTER && !node->constraint) continue; newstate->accept_mb |= node->accept_mb; /* If the state has the halt node, the state is a halt state. */ if (type == END_OF_RE) newstate->halt = 1; else if (type == OP_BACK_REF) newstate->has_backref = 1; else if (type == ANCHOR || node->constraint) newstate->has_constraint = 1; } err = register_state (dfa, newstate, hash); if (__glibc_unlikely (err != REG_NOERROR)) { free_state (newstate); newstate = NULL; } return newstate; } /* Create the new state which is depend on the context CONTEXT. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * __attribute_warn_unused_result__ create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context, re_hashval_t hash) { Idx i, nctx_nodes = 0; reg_errcode_t err; re_dfastate_t *newstate; newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); if (__glibc_unlikely (newstate == NULL)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_free (newstate); return NULL; } newstate->context = context; newstate->entrance_nodes = &newstate->nodes; for (i = 0 ; i < nodes->nelem ; i++) { re_token_t *node = dfa->nodes + nodes->elems[i]; re_token_type_t type = node->type; unsigned int constraint = node->constraint; if (type == CHARACTER && !constraint) continue; newstate->accept_mb |= node->accept_mb; /* If the state has the halt node, the state is a halt state. */ if (type == END_OF_RE) newstate->halt = 1; else if (type == OP_BACK_REF) newstate->has_backref = 1; if (constraint) { if (newstate->entrance_nodes == &newstate->nodes) { re_node_set *entrance_nodes = re_malloc (re_node_set, 1); if (__glibc_unlikely (entrance_nodes == NULL)) { free_state (newstate); return NULL; } newstate->entrance_nodes = entrance_nodes; if (re_node_set_init_copy (newstate->entrance_nodes, nodes) != REG_NOERROR) { free_state (newstate); return NULL; } nctx_nodes = 0; newstate->has_constraint = 1; } if (NOT_SATISFY_PREV_CONSTRAINT (constraint,context)) { re_node_set_remove_at (&newstate->nodes, i - nctx_nodes); ++nctx_nodes; } } } err = register_state (dfa, newstate, hash); if (__glibc_unlikely (err != REG_NOERROR)) { free_state (newstate); newstate = NULL; } return newstate; } ���������������������������������gnuastro-0.22/bootstrapped/lib/regexec.c������������������������������������������������������������0000644�0001750�0001750�00000372224�14557510505�014043� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, Idx n); static void match_ctx_clean (re_match_context_t *mctx); static void match_ctx_free (re_match_context_t *cache); static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node, Idx str_idx, Idx from, Idx to); static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx); static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx); static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx); static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx); static reg_errcode_t re_search_internal (const regex_t *preg, const char *string, Idx length, Idx start, Idx last_start, Idx stop, size_t nmatch, regmatch_t pmatch[], int eflags); static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop, bool ret_len); static regoff_t re_search_stub (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, Idx stop, struct re_registers *regs, bool ret_len); static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, int regs_allocated); static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx); static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match, Idx *p_match_first); static Idx check_halt_state_context (const re_match_context_t *mctx, const re_dfastate_t *state, Idx idx); static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch); static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, re_node_set *eps_via_nodes); static reg_errcode_t set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, regmatch_t *pmatch, bool fl_backtrack); static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs); static int sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx node_idx, Idx str_idx, Idx max_str_idx); static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx); static reg_errcode_t build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *cur_dest); static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *dest_nodes); static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates); static bool check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx); static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, Idx subexp_idx, Idx from_node, Idx bkref_idx); static int check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, Idx subexp_idx, Idx node, Idx str_idx, Idx bkref_idx); static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates, re_node_set *limits, struct re_backref_cache_entry *bkref_ents, Idx str_idx); static reg_errcode_t sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, const re_node_set *candidates); static reg_errcode_t merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, re_dfastate_t **src, Idx num); static re_dfastate_t *find_recover_state (reg_errcode_t *err, re_match_context_t *mctx); static re_dfastate_t *transit_state (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state); static re_dfastate_t *merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *next_state); static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, Idx str_idx); #if 0 static re_dfastate_t *transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *pstate); #endif static reg_errcode_t transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate); static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes); static reg_errcode_t get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx); static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str); static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, Idx subexp_idx, int type); static reg_errcode_t check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, Idx top_str, Idx last_node, Idx last_str, int type); static reg_errcode_t check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, re_node_set *cur_nodes, re_node_set *next_nodes); static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, Idx ex_subexp, int type); static reg_errcode_t check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, Idx target, Idx ex_subexp, int type); static reg_errcode_t expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, Idx cur_str, Idx subexp_num, int type); static bool build_trtable (const re_dfa_t *dfa, re_dfastate_t *state); static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, const re_string_t *input, Idx idx); #ifdef _LIBC static unsigned int find_collation_sequence_value (const unsigned char *mbs, size_t name_len); #endif static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, re_node_set *states_node, bitset_t *states_ch); static bool check_node_accept (const re_match_context_t *mctx, const re_token_t *node, Idx idx); static reg_errcode_t extend_buffers (re_match_context_t *mctx, int min_len); /* Entry point for POSIX code. */ /* regexec searches for a given pattern, specified by PREG, in the string STRING. If NMATCH is zero or REG_NOSUB was set in the cflags argument to 'regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at least NMATCH elements, and we set them to the offsets of the corresponding matched substrings. EFLAGS specifies "execution flags" which affect matching: if REG_NOTBOL is set, then ^ does not match at the beginning of the string; if REG_NOTEOL is set, then $ does not match at the end. Return 0 if a match is found, REG_NOMATCH if not, REG_BADPAT if EFLAGS is invalid. */ int regexec (const regex_t *__restrict preg, const char *__restrict string, size_t nmatch, regmatch_t pmatch[_REGEX_NELTS (nmatch)], int eflags) { reg_errcode_t err; Idx start, length; re_dfa_t *dfa = preg->buffer; if (eflags & ~(REG_NOTBOL | REG_NOTEOL | REG_STARTEND)) return REG_BADPAT; if (eflags & REG_STARTEND) { start = pmatch[0].rm_so; length = pmatch[0].rm_eo; } else { start = 0; length = strlen (string); } lock_lock (dfa->lock); if (preg->no_sub) err = re_search_internal (preg, string, length, start, length, length, 0, NULL, eflags); else err = re_search_internal (preg, string, length, start, length, length, nmatch, pmatch, eflags); lock_unlock (dfa->lock); return err != REG_NOERROR; } #ifdef _LIBC libc_hidden_def (__regexec) # include <shlib-compat.h> versioned_symbol (libc, __regexec, regexec, GLIBC_2_3_4); # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) __typeof__ (__regexec) __compat_regexec; int attribute_compat_text_section __compat_regexec (const regex_t *__restrict preg, const char *__restrict string, size_t nmatch, regmatch_t pmatch[_REGEX_NELTS (nmatch)], int eflags) { return regexec (preg, string, nmatch, pmatch, eflags & (REG_NOTBOL | REG_NOTEOL)); } compat_symbol (libc, __compat_regexec, regexec, GLIBC_2_0); # endif #endif /* Entry points for GNU code. */ /* re_match, re_search, re_match_2, re_search_2 The former two functions operate on STRING with length LENGTH, while the later two operate on concatenation of STRING1 and STRING2 with lengths LENGTH1 and LENGTH2, respectively. re_match() matches the compiled pattern in BUFP against the string, starting at index START. re_search() first tries matching at index START, then it tries to match starting from index START + 1, and so on. The last start position tried is START + RANGE. (Thus RANGE = 0 forces re_search to operate the same way as re_match().) The parameter STOP of re_{match,search}_2 specifies that no match exceeding the first STOP characters of the concatenation of the strings should be concerned. If REGS is not NULL, and BUFP->no_sub is not set, the offsets of the match and all groups is stored in REGS. (For the "_2" variants, the offsets are computed relative to the concatenation, not relative to the individual strings.) On success, re_match* functions return the length of the match, re_search* return the position of the start of the match. They return -1 on match failure, -2 on error. */ regoff_t re_match (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, struct re_registers *regs) { return re_search_stub (bufp, string, length, start, 0, length, regs, true); } #ifdef _LIBC weak_alias (__re_match, re_match) #endif regoff_t re_search (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, struct re_registers *regs) { return re_search_stub (bufp, string, length, start, range, length, regs, false); } #ifdef _LIBC weak_alias (__re_search, re_search) #endif regoff_t re_match_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, struct re_registers *regs, Idx stop) { return re_search_2_stub (bufp, string1, length1, string2, length2, start, 0, regs, stop, true); } #ifdef _LIBC weak_alias (__re_match_2, re_match_2) #endif regoff_t re_search_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop) { return re_search_2_stub (bufp, string1, length1, string2, length2, start, range, regs, stop, false); } #ifdef _LIBC weak_alias (__re_search_2, re_search_2) #endif static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop, bool ret_len) { const char *str; regoff_t rval; Idx len; char *s = NULL; if (__glibc_unlikely ((length1 < 0 || length2 < 0 || stop < 0 || ckd_add (&len, length1, length2)))) return -2; /* Concatenate the strings. */ if (length2 > 0) if (length1 > 0) { s = re_malloc (char, len); if (__glibc_unlikely (s == NULL)) return -2; #ifdef _LIBC memcpy (__mempcpy (s, string1, length1), string2, length2); #else memcpy (s, string1, length1); memcpy (s + length1, string2, length2); #endif str = s; } else str = string2; else str = string1; rval = re_search_stub (bufp, str, len, start, range, stop, regs, ret_len); re_free (s); return rval; } /* The parameters have the same meaning as those of re_search. Additional parameters: If RET_LEN is true the length of the match is returned (re_match style); otherwise the position of the match is returned. */ static regoff_t re_search_stub (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, Idx stop, struct re_registers *regs, bool ret_len) { reg_errcode_t result; regmatch_t *pmatch; Idx nregs; regoff_t rval; int eflags = 0; re_dfa_t *dfa = bufp->buffer; Idx last_start = start + range; /* Check for out-of-range. */ if (__glibc_unlikely (start < 0 || start > length)) return -1; if (__glibc_unlikely (length < last_start || (0 <= range && last_start < start))) last_start = length; else if (__glibc_unlikely (last_start < 0 || (range < 0 && start <= last_start))) last_start = 0; lock_lock (dfa->lock); eflags |= (bufp->not_bol) ? REG_NOTBOL : 0; eflags |= (bufp->not_eol) ? REG_NOTEOL : 0; /* Compile fastmap if we haven't yet. */ if (start < last_start && bufp->fastmap != NULL && !bufp->fastmap_accurate) re_compile_fastmap (bufp); if (__glibc_unlikely (bufp->no_sub)) regs = NULL; /* We need at least 1 register. */ if (regs == NULL) nregs = 1; else if (__glibc_unlikely (bufp->regs_allocated == REGS_FIXED && regs->num_regs <= bufp->re_nsub)) { nregs = regs->num_regs; if (__glibc_unlikely (nregs < 1)) { /* Nothing can be copied to regs. */ regs = NULL; nregs = 1; } } else nregs = bufp->re_nsub + 1; pmatch = re_malloc (regmatch_t, nregs); if (__glibc_unlikely (pmatch == NULL)) { rval = -2; goto out; } result = re_search_internal (bufp, string, length, start, last_start, stop, nregs, pmatch, eflags); rval = 0; /* I hope we needn't fill their regs with -1's when no match was found. */ if (result != REG_NOERROR) rval = result == REG_NOMATCH ? -1 : -2; else if (regs != NULL) { /* If caller wants register contents data back, copy them. */ bufp->regs_allocated = re_copy_regs (regs, pmatch, nregs, bufp->regs_allocated); if (__glibc_unlikely (bufp->regs_allocated == REGS_UNALLOCATED)) rval = -2; } if (__glibc_likely (rval == 0)) { if (ret_len) { DEBUG_ASSERT (pmatch[0].rm_so == start); rval = pmatch[0].rm_eo - start; } else rval = pmatch[0].rm_so; } re_free (pmatch); out: lock_unlock (dfa->lock); return rval; } static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, int regs_allocated) { int rval = REGS_REALLOCATE; Idx i; Idx need_regs = nregs + 1; /* We need one extra element beyond 'num_regs' for the '-1' marker GNU code uses. */ /* Have the register data arrays been allocated? */ if (regs_allocated == REGS_UNALLOCATED) { /* No. So allocate them with malloc. */ regs->start = re_malloc (regoff_t, need_regs); if (__glibc_unlikely (regs->start == NULL)) return REGS_UNALLOCATED; regs->end = re_malloc (regoff_t, need_regs); if (__glibc_unlikely (regs->end == NULL)) { re_free (regs->start); return REGS_UNALLOCATED; } regs->num_regs = need_regs; } else if (regs_allocated == REGS_REALLOCATE) { /* Yes. If we need more elements than were already allocated, reallocate them. If we need fewer, just leave it alone. */ if (__glibc_unlikely (need_regs > regs->num_regs)) { regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs); regoff_t *new_end; if (__glibc_unlikely (new_start == NULL)) return REGS_UNALLOCATED; new_end = re_realloc (regs->end, regoff_t, need_regs); if (__glibc_unlikely (new_end == NULL)) { re_free (new_start); return REGS_UNALLOCATED; } regs->start = new_start; regs->end = new_end; regs->num_regs = need_regs; } } else { DEBUG_ASSERT (regs_allocated == REGS_FIXED); /* This function may not be called with REGS_FIXED and nregs too big. */ DEBUG_ASSERT (nregs <= regs->num_regs); rval = REGS_FIXED; } /* Copy the regs. */ for (i = 0; i < nregs; ++i) { regs->start[i] = pmatch[i].rm_so; regs->end[i] = pmatch[i].rm_eo; } for ( ; i < regs->num_regs; ++i) regs->start[i] = regs->end[i] = -1; return rval; } /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated using the malloc library routine, and must each be at least NUM_REGS * sizeof (regoff_t) bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ void re_set_registers (struct re_pattern_buffer *bufp, struct re_registers *regs, __re_size_t num_regs, regoff_t *starts, regoff_t *ends) { if (num_regs) { bufp->regs_allocated = REGS_REALLOCATE; regs->num_regs = num_regs; regs->start = starts; regs->end = ends; } else { bufp->regs_allocated = REGS_UNALLOCATED; regs->num_regs = 0; regs->start = regs->end = NULL; } } #ifdef _LIBC weak_alias (__re_set_registers, re_set_registers) #endif /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC int # ifdef _LIBC weak_function # endif re_exec (const char *s) { return 0 == regexec (&re_comp_buf, s, 0, NULL, 0); } #endif /* _REGEX_RE_COMP */ /* Internal entry point. */ /* Searches for a compiled pattern PREG in the string STRING, whose length is LENGTH. NMATCH, PMATCH, and EFLAGS have the same meaning as with regexec. LAST_START is START + RANGE, where START and RANGE have the same meaning as with re_search. Return REG_NOERROR if we find a match, and REG_NOMATCH if not, otherwise return the error code. Note: We assume front end functions already check ranges. (0 <= LAST_START && LAST_START <= LENGTH) */ static reg_errcode_t __attribute_warn_unused_result__ re_search_internal (const regex_t *preg, const char *string, Idx length, Idx start, Idx last_start, Idx stop, size_t nmatch, regmatch_t pmatch[], int eflags) { reg_errcode_t err; const re_dfa_t *dfa = preg->buffer; Idx left_lim, right_lim; int incr; bool fl_longest_match; int match_kind; Idx match_first; Idx match_last = -1; Idx extra_nmatch; bool sb; int ch; re_match_context_t mctx = { .dfa = dfa }; char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate && start != last_start && !preg->can_be_null) ? preg->fastmap : NULL); RE_TRANSLATE_TYPE t = preg->translate; extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0; nmatch -= extra_nmatch; /* Check if the DFA haven't been compiled. */ if (__glibc_unlikely (preg->used == 0 || dfa->init_state == NULL || dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL)) return REG_NOMATCH; /* We assume front-end functions already check them. */ DEBUG_ASSERT (0 <= last_start && last_start <= length); /* If initial states with non-begbuf contexts have no elements, the regex must be anchored. If preg->newline_anchor is set, we'll never use init_state_nl, so do not check it. */ if (dfa->init_state->nodes.nelem == 0 && dfa->init_state_word->nodes.nelem == 0 && (dfa->init_state_nl->nodes.nelem == 0 || !preg->newline_anchor)) { if (start != 0 && last_start != 0) return REG_NOMATCH; start = last_start = 0; } /* We must check the longest matching, if nmatch > 0. */ fl_longest_match = (nmatch != 0 || dfa->nbackref); err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1, preg->translate, (preg->syntax & RE_ICASE) != 0, dfa); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; mctx.input.stop = stop; mctx.input.raw_stop = stop; mctx.input.newline_anchor = preg->newline_anchor; err = match_ctx_init (&mctx, eflags, dfa->nbackref * 2); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* We will log all the DFA states through which the dfa pass, if nmatch > 1, or this dfa has "multibyte node", which is a back-reference or a node which can accept multibyte character or multi character collating element. */ if (nmatch > 1 || dfa->has_mb_node) { /* Avoid overflow. */ if (__glibc_unlikely ((MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) <= mctx.input.bufs_len))) { err = REG_ESPACE; goto free_return; } mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1); if (__glibc_unlikely (mctx.state_log == NULL)) { err = REG_ESPACE; goto free_return; } } match_first = start; mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF : CONTEXT_NEWLINE | CONTEXT_BEGBUF; /* Check incrementally whether the input string matches. */ incr = (last_start < start) ? -1 : 1; left_lim = (last_start < start) ? last_start : start; right_lim = (last_start < start) ? start : last_start; sb = dfa->mb_cur_max == 1; match_kind = (fastmap ? ((sb || !(preg->syntax & RE_ICASE || t) ? 4 : 0) | (start <= last_start ? 2 : 0) | (t != NULL ? 1 : 0)) : 8); for (;; match_first += incr) { err = REG_NOMATCH; if (match_first < left_lim || right_lim < match_first) goto free_return; /* Advance as rapidly as possible through the string, until we find a plausible place to start matching. This may be done with varying efficiency, so there are various possibilities: only the most common of them are specialized, in order to save on code size. We use a switch statement for speed. */ switch (match_kind) { case 8: /* No fastmap. */ break; case 7: /* Fastmap with single-byte translation, match forward. */ while (__glibc_likely (match_first < right_lim) && !fastmap[t[(unsigned char) string[match_first]]]) ++match_first; goto forward_match_found_start_or_reached_end; case 6: /* Fastmap without translation, match forward. */ while (__glibc_likely (match_first < right_lim) && !fastmap[(unsigned char) string[match_first]]) ++match_first; forward_match_found_start_or_reached_end: if (__glibc_unlikely (match_first == right_lim)) { ch = match_first >= length ? 0 : (unsigned char) string[match_first]; if (!fastmap[t ? t[ch] : ch]) goto free_return; } break; case 4: case 5: /* Fastmap without multi-byte translation, match backwards. */ while (match_first >= left_lim) { ch = match_first >= length ? 0 : (unsigned char) string[match_first]; if (fastmap[t ? t[ch] : ch]) break; --match_first; } if (match_first < left_lim) goto free_return; break; default: /* In this case, we can't determine easily the current byte, since it might be a component byte of a multibyte character. Then we use the constructed buffer instead. */ for (;;) { /* If MATCH_FIRST is out of the valid range, reconstruct the buffers. */ __re_size_t offset = match_first - mctx.input.raw_mbs_idx; if (__glibc_unlikely (offset >= (__re_size_t) mctx.input.valid_raw_len)) { err = re_string_reconstruct (&mctx.input, match_first, eflags); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; offset = match_first - mctx.input.raw_mbs_idx; } /* Use buffer byte if OFFSET is in buffer, otherwise '\0'. */ ch = (offset < mctx.input.valid_len ? re_string_byte_at (&mctx.input, offset) : 0); if (fastmap[ch]) break; match_first += incr; if (match_first < left_lim || match_first > right_lim) { err = REG_NOMATCH; goto free_return; } } break; } /* Reconstruct the buffers so that the matcher can assume that the matching starts from the beginning of the buffer. */ err = re_string_reconstruct (&mctx.input, match_first, eflags); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* Don't consider this char as a possible match start if it part, yet isn't the head, of a multibyte character. */ if (!sb && !re_string_first_byte (&mctx.input, 0)) continue; /* It seems to be appropriate one, then use the matcher. */ /* We assume that the matching starts from 0. */ mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0; match_last = check_matching (&mctx, fl_longest_match, start <= last_start ? &match_first : NULL); if (match_last != -1) { if (__glibc_unlikely (match_last == -2)) { err = REG_ESPACE; goto free_return; } else { mctx.match_last = match_last; if ((!preg->no_sub && nmatch > 1) || dfa->nbackref) { re_dfastate_t *pstate = mctx.state_log[match_last]; mctx.last_node = check_halt_state_context (&mctx, pstate, match_last); } if ((!preg->no_sub && nmatch > 1 && dfa->has_plural_match) || dfa->nbackref) { err = prune_impossible_nodes (&mctx); if (err == REG_NOERROR) break; if (__glibc_unlikely (err != REG_NOMATCH)) goto free_return; match_last = -1; } else break; /* We found a match. */ } } match_ctx_clean (&mctx); } DEBUG_ASSERT (match_last != -1); DEBUG_ASSERT (err == REG_NOERROR); /* Set pmatch[] if we need. */ if (nmatch > 0) { Idx reg_idx; /* Initialize registers. */ for (reg_idx = 1; reg_idx < nmatch; ++reg_idx) pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1; /* Set the points where matching start/end. */ pmatch[0].rm_so = 0; pmatch[0].rm_eo = mctx.match_last; /* FIXME: This function should fail if mctx.match_last exceeds the maximum possible regoff_t value. We need a new error code REG_OVERFLOW. */ if (!preg->no_sub && nmatch > 1) { err = set_regs (preg, &mctx, nmatch, pmatch, dfa->has_plural_match && dfa->nbackref > 0); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } /* At last, add the offset to each register, since we slid the buffers so that we could assume that the matching starts from 0. */ for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) if (pmatch[reg_idx].rm_so != -1) { if (__glibc_unlikely (mctx.input.offsets_needed != 0)) { pmatch[reg_idx].rm_so = (pmatch[reg_idx].rm_so == mctx.input.valid_len ? mctx.input.valid_raw_len : mctx.input.offsets[pmatch[reg_idx].rm_so]); pmatch[reg_idx].rm_eo = (pmatch[reg_idx].rm_eo == mctx.input.valid_len ? mctx.input.valid_raw_len : mctx.input.offsets[pmatch[reg_idx].rm_eo]); } pmatch[reg_idx].rm_so += match_first; pmatch[reg_idx].rm_eo += match_first; } for (reg_idx = 0; reg_idx < extra_nmatch; ++reg_idx) { pmatch[nmatch + reg_idx].rm_so = -1; pmatch[nmatch + reg_idx].rm_eo = -1; } if (dfa->subexp_map) for (reg_idx = 0; reg_idx + 1 < nmatch; reg_idx++) if (dfa->subexp_map[reg_idx] != reg_idx) { pmatch[reg_idx + 1].rm_so = pmatch[dfa->subexp_map[reg_idx] + 1].rm_so; pmatch[reg_idx + 1].rm_eo = pmatch[dfa->subexp_map[reg_idx] + 1].rm_eo; } } free_return: re_free (mctx.state_log); if (dfa->nbackref) match_ctx_free (&mctx); re_string_destruct (&mctx.input); return err; } static reg_errcode_t __attribute_warn_unused_result__ prune_impossible_nodes (re_match_context_t *mctx) { const re_dfa_t *const dfa = mctx->dfa; Idx halt_node, match_last; reg_errcode_t ret; re_dfastate_t **sifted_states; re_dfastate_t **lim_states = NULL; re_sift_context_t sctx; DEBUG_ASSERT (mctx->state_log != NULL); match_last = mctx->match_last; halt_node = mctx->last_node; /* Avoid overflow. */ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) <= match_last)) return REG_ESPACE; sifted_states = re_malloc (re_dfastate_t *, match_last + 1); if (__glibc_unlikely (sifted_states == NULL)) { ret = REG_ESPACE; goto free_return; } if (dfa->nbackref) { lim_states = re_malloc (re_dfastate_t *, match_last + 1); if (__glibc_unlikely (lim_states == NULL)) { ret = REG_ESPACE; goto free_return; } while (1) { memset (lim_states, '\0', sizeof (re_dfastate_t *) * (match_last + 1)); sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); ret = sift_states_backward (mctx, &sctx); re_node_set_free (&sctx.limits); if (__glibc_unlikely (ret != REG_NOERROR)) goto free_return; if (sifted_states[0] != NULL || lim_states[0] != NULL) break; do { --match_last; if (match_last < 0) { ret = REG_NOMATCH; goto free_return; } } while (mctx->state_log[match_last] == NULL || !mctx->state_log[match_last]->halt); halt_node = check_halt_state_context (mctx, mctx->state_log[match_last], match_last); } ret = merge_state_array (dfa, sifted_states, lim_states, match_last + 1); re_free (lim_states); lim_states = NULL; if (__glibc_unlikely (ret != REG_NOERROR)) goto free_return; } else { sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); ret = sift_states_backward (mctx, &sctx); re_node_set_free (&sctx.limits); if (__glibc_unlikely (ret != REG_NOERROR)) goto free_return; if (sifted_states[0] == NULL) { ret = REG_NOMATCH; goto free_return; } } re_free (mctx->state_log); mctx->state_log = sifted_states; sifted_states = NULL; mctx->last_node = halt_node; mctx->match_last = match_last; ret = REG_NOERROR; free_return: re_free (sifted_states); re_free (lim_states); return ret; } /* Acquire an initial state and return it. We must select appropriate initial state depending on the context, since initial states may have constraints like "\<", "^", etc.. */ static __always_inline re_dfastate_t * acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx, Idx idx) { const re_dfa_t *const dfa = mctx->dfa; if (dfa->init_state->has_constraint) { unsigned int context; context = re_string_context_at (&mctx->input, idx - 1, mctx->eflags); if (IS_WORD_CONTEXT (context)) return dfa->init_state_word; else if (IS_ORDINARY_CONTEXT (context)) return dfa->init_state; else if (IS_BEGBUF_CONTEXT (context) && IS_NEWLINE_CONTEXT (context)) return dfa->init_state_begbuf; else if (IS_NEWLINE_CONTEXT (context)) return dfa->init_state_nl; else if (IS_BEGBUF_CONTEXT (context)) { /* It is relatively rare case, then calculate on demand. */ return re_acquire_state_context (err, dfa, dfa->init_state->entrance_nodes, context); } else /* Must not happen? */ return dfa->init_state; } else return dfa->init_state; } /* Check whether the regular expression match input string INPUT or not, and return the index where the matching end. Return -1 if there is no match, and return -2 in case of an error. FL_LONGEST_MATCH means we want the POSIX longest matching. If P_MATCH_FIRST is not NULL, and the match fails, it is set to the next place where we may want to try matching. Note that the matcher assumes that the matching starts from the current index of the buffer. */ static Idx __attribute_warn_unused_result__ check_matching (re_match_context_t *mctx, bool fl_longest_match, Idx *p_match_first) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx match = 0; Idx match_last = -1; Idx cur_str_idx = re_string_cur_idx (&mctx->input); re_dfastate_t *cur_state; bool at_init_state = p_match_first != NULL; Idx next_start_idx = cur_str_idx; err = REG_NOERROR; cur_state = acquire_init_state_context (&err, mctx, cur_str_idx); /* An initial state must not be NULL (invalid). */ if (__glibc_unlikely (cur_state == NULL)) { DEBUG_ASSERT (err == REG_ESPACE); return -2; } if (mctx->state_log != NULL) { mctx->state_log[cur_str_idx] = cur_state; /* Check OP_OPEN_SUBEXP in the initial state in case that we use them later. E.g. Processing back references. */ if (__glibc_unlikely (dfa->nbackref)) { at_init_state = false; err = check_subexp_matching_top (mctx, &cur_state->nodes, 0); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (cur_state->has_backref) { err = transit_state_bkref (mctx, &cur_state->nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } } /* If the RE accepts NULL string. */ if (__glibc_unlikely (cur_state->halt)) { if (!cur_state->has_constraint || check_halt_state_context (mctx, cur_state, cur_str_idx)) { if (!fl_longest_match) return cur_str_idx; else { match_last = cur_str_idx; match = 1; } } } while (!re_string_eoi (&mctx->input)) { re_dfastate_t *old_state = cur_state; Idx next_char_idx = re_string_cur_idx (&mctx->input) + 1; if ((__glibc_unlikely (next_char_idx >= mctx->input.bufs_len) && mctx->input.bufs_len < mctx->input.len) || (__glibc_unlikely (next_char_idx >= mctx->input.valid_len) && mctx->input.valid_len < mctx->input.len)) { err = extend_buffers (mctx, next_char_idx + 1); if (__glibc_unlikely (err != REG_NOERROR)) { DEBUG_ASSERT (err == REG_ESPACE); return -2; } } cur_state = transit_state (&err, mctx, cur_state); if (mctx->state_log != NULL) cur_state = merge_state_with_log (&err, mctx, cur_state); if (cur_state == NULL) { /* Reached the invalid state or an error. Try to recover a valid state using the state log, if available and if we have not already found a valid (even if not the longest) match. */ if (__glibc_unlikely (err != REG_NOERROR)) return -2; if (mctx->state_log == NULL || (match && !fl_longest_match) || (cur_state = find_recover_state (&err, mctx)) == NULL) break; } if (__glibc_unlikely (at_init_state)) { if (old_state == cur_state) next_start_idx = next_char_idx; else at_init_state = false; } if (cur_state->halt) { /* Reached a halt state. Check the halt state can satisfy the current context. */ if (!cur_state->has_constraint || check_halt_state_context (mctx, cur_state, re_string_cur_idx (&mctx->input))) { /* We found an appropriate halt state. */ match_last = re_string_cur_idx (&mctx->input); match = 1; /* We found a match, do not modify match_first below. */ p_match_first = NULL; if (!fl_longest_match) break; } } } if (p_match_first) *p_match_first += next_start_idx; return match_last; } /* Check NODE match the current context. */ static bool check_halt_node_context (const re_dfa_t *dfa, Idx node, unsigned int context) { re_token_type_t type = dfa->nodes[node].type; unsigned int constraint = dfa->nodes[node].constraint; if (type != END_OF_RE) return false; if (!constraint) return true; if (NOT_SATISFY_NEXT_CONSTRAINT (constraint, context)) return false; return true; } /* Check the halt state STATE match the current context. Return 0 if not match, if the node, STATE has, is a halt node and match the context, return the node. */ static Idx check_halt_state_context (const re_match_context_t *mctx, const re_dfastate_t *state, Idx idx) { Idx i; unsigned int context; DEBUG_ASSERT (state->halt); context = re_string_context_at (&mctx->input, idx, mctx->eflags); for (i = 0; i < state->nodes.nelem; ++i) if (check_halt_node_context (mctx->dfa, state->nodes.elems[i], context)) return state->nodes.elems[i]; return 0; } /* Compute the next node to which "NFA" transit from NODE("NFA" is a NFA corresponding to the DFA). Return the destination node, and update EPS_VIA_NODES; return -1 on match failure, -2 on error. */ static Idx proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, Idx *pidx, Idx node, re_node_set *eps_via_nodes, struct re_fail_stack_t *fs) { const re_dfa_t *const dfa = mctx->dfa; if (IS_EPSILON_NODE (dfa->nodes[node].type)) { re_node_set *cur_nodes = &mctx->state_log[*pidx]->nodes; re_node_set *edests = &dfa->edests[node]; if (! re_node_set_contains (eps_via_nodes, node)) { bool ok = re_node_set_insert (eps_via_nodes, node); if (__glibc_unlikely (! ok)) return -2; } /* Pick a valid destination, or return -1 if none is found. */ Idx dest_node = -1; for (Idx i = 0; i < edests->nelem; i++) { Idx candidate = edests->elems[i]; if (!re_node_set_contains (cur_nodes, candidate)) continue; if (dest_node == -1) dest_node = candidate; else { /* In order to avoid infinite loop like "(a*)*", return the second epsilon-transition if the first was already considered. */ if (re_node_set_contains (eps_via_nodes, dest_node)) return candidate; /* Otherwise, push the second epsilon-transition on the fail stack. */ else if (fs != NULL && push_fail_stack (fs, *pidx, candidate, nregs, regs, prevregs, eps_via_nodes)) return -2; /* We know we are going to exit. */ break; } } return dest_node; } else { Idx naccepted = 0; re_token_type_t type = dfa->nodes[node].type; if (dfa->nodes[node].accept_mb) naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx); else if (type == OP_BACK_REF) { Idx subexp_idx = dfa->nodes[node].opr.idx + 1; if (subexp_idx < nregs) naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so; if (fs != NULL) { if (subexp_idx >= nregs || regs[subexp_idx].rm_so == -1 || regs[subexp_idx].rm_eo == -1) return -1; else if (naccepted) { char *buf = (char *) re_string_get_buffer (&mctx->input); if (mctx->input.valid_len - *pidx < naccepted || (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx, naccepted) != 0)) return -1; } } if (naccepted == 0) { Idx dest_node; bool ok = re_node_set_insert (eps_via_nodes, node); if (__glibc_unlikely (! ok)) return -2; dest_node = dfa->edests[node].elems[0]; if (re_node_set_contains (&mctx->state_log[*pidx]->nodes, dest_node)) return dest_node; } } if (naccepted != 0 || check_node_accept (mctx, dfa->nodes + node, *pidx)) { Idx dest_node = dfa->nexts[node]; *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted; if (fs && (*pidx > mctx->match_last || mctx->state_log[*pidx] == NULL || !re_node_set_contains (&mctx->state_log[*pidx]->nodes, dest_node))) return -1; re_node_set_empty (eps_via_nodes); return dest_node; } } return -1; } static reg_errcode_t __attribute_warn_unused_result__ push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, re_node_set *eps_via_nodes) { reg_errcode_t err; Idx num = fs->num; if (num == fs->alloc) { struct re_fail_stack_ent_t *new_array; new_array = re_realloc (fs->stack, struct re_fail_stack_ent_t, fs->alloc * 2); if (new_array == NULL) return REG_ESPACE; fs->alloc *= 2; fs->stack = new_array; } fs->stack[num].idx = str_idx; fs->stack[num].node = dest_node; fs->stack[num].regs = re_malloc (regmatch_t, 2 * nregs); if (fs->stack[num].regs == NULL) return REG_ESPACE; fs->num = num + 1; memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs); memcpy (fs->stack[num].regs + nregs, prevregs, sizeof (regmatch_t) * nregs); err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes); return err; } static Idx pop_fail_stack (struct re_fail_stack_t *fs, Idx *pidx, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, re_node_set *eps_via_nodes) { if (fs == NULL || fs->num == 0) return -1; Idx num = --fs->num; *pidx = fs->stack[num].idx; memcpy (regs, fs->stack[num].regs, sizeof (regmatch_t) * nregs); memcpy (prevregs, fs->stack[num].regs + nregs, sizeof (regmatch_t) * nregs); re_node_set_free (eps_via_nodes); re_free (fs->stack[num].regs); *eps_via_nodes = fs->stack[num].eps_via_nodes; DEBUG_ASSERT (0 <= fs->stack[num].node); return fs->stack[num].node; } #define DYNARRAY_STRUCT regmatch_list #define DYNARRAY_ELEMENT regmatch_t #define DYNARRAY_PREFIX regmatch_list_ #include <malloc/dynarray-skeleton.c> /* Set the positions where the subexpressions are starts/ends to registers PMATCH. Note: We assume that pmatch[0] is already set, and pmatch[i].rm_so == pmatch[i].rm_eo == -1 for 0 < i < nmatch. */ static reg_errcode_t __attribute_warn_unused_result__ set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, regmatch_t *pmatch, bool fl_backtrack) { const re_dfa_t *dfa = preg->buffer; Idx idx, cur_node; re_node_set eps_via_nodes; struct re_fail_stack_t *fs; struct re_fail_stack_t fs_body = { 0, 2, NULL }; struct regmatch_list prev_match; regmatch_list_init (&prev_match); DEBUG_ASSERT (nmatch > 1); DEBUG_ASSERT (mctx->state_log != NULL); if (fl_backtrack) { fs = &fs_body; fs->stack = re_malloc (struct re_fail_stack_ent_t, fs->alloc); if (fs->stack == NULL) return REG_ESPACE; } else fs = NULL; cur_node = dfa->init_node; re_node_set_init_empty (&eps_via_nodes); if (!regmatch_list_resize (&prev_match, nmatch)) { regmatch_list_free (&prev_match); free_fail_stack_return (fs); return REG_ESPACE; } regmatch_t *prev_idx_match = regmatch_list_begin (&prev_match); memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); for (idx = pmatch[0].rm_so; idx <= pmatch[0].rm_eo ;) { update_regs (dfa, pmatch, prev_idx_match, cur_node, idx, nmatch); if ((idx == pmatch[0].rm_eo && cur_node == mctx->last_node) || (fs && re_node_set_contains (&eps_via_nodes, cur_node))) { Idx reg_idx; cur_node = -1; if (fs) { for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1) { cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, prev_idx_match, &eps_via_nodes); break; } } if (cur_node < 0) { re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); return free_fail_stack_return (fs); } } /* Proceed to next node. */ cur_node = proceed_next_node (mctx, nmatch, pmatch, prev_idx_match, &idx, cur_node, &eps_via_nodes, fs); if (__glibc_unlikely (cur_node < 0)) { if (__glibc_unlikely (cur_node == -2)) { re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); free_fail_stack_return (fs); return REG_ESPACE; } cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, prev_idx_match, &eps_via_nodes); if (cur_node < 0) { re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); free_fail_stack_return (fs); return REG_NOMATCH; } } } re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); return free_fail_stack_return (fs); } static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs) { if (fs) { Idx fs_idx; for (fs_idx = 0; fs_idx < fs->num; ++fs_idx) { re_node_set_free (&fs->stack[fs_idx].eps_via_nodes); re_free (fs->stack[fs_idx].regs); } re_free (fs->stack); } return REG_NOERROR; } static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch) { int type = dfa->nodes[cur_node].type; if (type == OP_OPEN_SUBEXP) { Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; /* We are at the first node of this sub expression. */ if (reg_num < nmatch) { pmatch[reg_num].rm_so = cur_idx; pmatch[reg_num].rm_eo = -1; } } else if (type == OP_CLOSE_SUBEXP) { /* We are at the last node of this sub expression. */ Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; if (reg_num < nmatch) { if (pmatch[reg_num].rm_so < cur_idx) { pmatch[reg_num].rm_eo = cur_idx; /* This is a non-empty match or we are not inside an optional subexpression. Accept this right away. */ memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); } else { if (dfa->nodes[cur_node].opt_subexp && prev_idx_match[reg_num].rm_so != -1) /* We transited through an empty match for an optional subexpression, like (a?)*, and this is not the subexp's first match. Copy back the old content of the registers so that matches of an inner subexpression are undone as well, like in ((a?))*. */ memcpy (pmatch, prev_idx_match, sizeof (regmatch_t) * nmatch); else /* We completed a subexpression, but it may be part of an optional one, so do not update PREV_IDX_MATCH. */ pmatch[reg_num].rm_eo = cur_idx; } } } } /* This function checks the STATE_LOG from the SCTX->last_str_idx to 0 and sift the nodes in each states according to the following rules. Updated state_log will be wrote to STATE_LOG. Rules: We throw away the Node 'a' in the STATE_LOG[STR_IDX] if... 1. When STR_IDX == MATCH_LAST(the last index in the state_log): If 'a' isn't the LAST_NODE and 'a' can't epsilon transit to the LAST_NODE, we throw away the node 'a'. 2. When 0 <= STR_IDX < MATCH_LAST and 'a' accepts string 's' and transit to 'b': i. If 'b' isn't in the STATE_LOG[STR_IDX+strlen('s')], we throw away the node 'a'. ii. If 'b' is in the STATE_LOG[STR_IDX+strlen('s')] but 'b' is thrown away, we throw away the node 'a'. 3. When 0 <= STR_IDX < MATCH_LAST and 'a' epsilon transit to 'b': i. If 'b' isn't in the STATE_LOG[STR_IDX], we throw away the node 'a'. ii. If 'b' is in the STATE_LOG[STR_IDX] but 'b' is thrown away, we throw away the node 'a'. */ #define STATE_NODE_CONTAINS(state,node) \ ((state) != NULL && re_node_set_contains (&(state)->nodes, node)) static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx) { reg_errcode_t err; int null_cnt = 0; Idx str_idx = sctx->last_str_idx; re_node_set cur_dest; DEBUG_ASSERT (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL); /* Build sifted state_log[str_idx]. It has the nodes which can epsilon transit to the last_node and the last_node itself. */ err = re_node_set_init_1 (&cur_dest, sctx->last_node); if (__glibc_unlikely (err != REG_NOERROR)) return err; err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* Then check each states in the state_log. */ while (str_idx > 0) { /* Update counters. */ null_cnt = (sctx->sifted_states[str_idx] == NULL) ? null_cnt + 1 : 0; if (null_cnt > mctx->max_mb_elem_len) { memset (sctx->sifted_states, '\0', sizeof (re_dfastate_t *) * str_idx); re_node_set_free (&cur_dest); return REG_NOERROR; } re_node_set_empty (&cur_dest); --str_idx; if (mctx->state_log[str_idx]) { err = build_sifted_states (mctx, sctx, str_idx, &cur_dest); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } /* Add all the nodes which satisfy the following conditions: - It can epsilon transit to a node in CUR_DEST. - It is in CUR_SRC. And update state_log. */ err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } err = REG_NOERROR; free_return: re_node_set_free (&cur_dest); return err; } static reg_errcode_t __attribute_warn_unused_result__ build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *cur_dest) { const re_dfa_t *const dfa = mctx->dfa; const re_node_set *cur_src = &mctx->state_log[str_idx]->non_eps_nodes; Idx i; /* Then build the next sifted state. We build the next sifted state on 'cur_dest', and update 'sifted_states[str_idx]' with 'cur_dest'. Note: 'cur_dest' is the sifted state from 'state_log[str_idx + 1]'. 'cur_src' points the node_set of the old 'state_log[str_idx]' (with the epsilon nodes pre-filtered out). */ for (i = 0; i < cur_src->nelem; i++) { Idx prev_node = cur_src->elems[i]; int naccepted = 0; bool ok; DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[prev_node].type)); /* If the node may accept "multi byte". */ if (dfa->nodes[prev_node].accept_mb) naccepted = sift_states_iter_mb (mctx, sctx, prev_node, str_idx, sctx->last_str_idx); /* We don't check backreferences here. See update_cur_sifted_state(). */ if (!naccepted && check_node_accept (mctx, dfa->nodes + prev_node, str_idx) && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1], dfa->nexts[prev_node])) naccepted = 1; if (naccepted == 0) continue; if (sctx->limits.nelem) { Idx to_idx = str_idx + naccepted; if (check_dst_limits (mctx, &sctx->limits, dfa->nexts[prev_node], to_idx, prev_node, str_idx)) continue; } ok = re_node_set_insert (cur_dest, prev_node); if (__glibc_unlikely (! ok)) return REG_ESPACE; } return REG_NOERROR; } /* Helper functions. */ static reg_errcode_t clean_state_log_if_needed (re_match_context_t *mctx, Idx next_state_log_idx) { Idx top = mctx->state_log_top; if ((next_state_log_idx >= mctx->input.bufs_len && mctx->input.bufs_len < mctx->input.len) || (next_state_log_idx >= mctx->input.valid_len && mctx->input.valid_len < mctx->input.len)) { reg_errcode_t err; err = extend_buffers (mctx, next_state_log_idx + 1); if (__glibc_unlikely (err != REG_NOERROR)) return err; } if (top < next_state_log_idx) { DEBUG_ASSERT (mctx->state_log != NULL); memset (mctx->state_log + top + 1, '\0', sizeof (re_dfastate_t *) * (next_state_log_idx - top)); mctx->state_log_top = next_state_log_idx; } return REG_NOERROR; } static reg_errcode_t merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, re_dfastate_t **src, Idx num) { Idx st_idx; reg_errcode_t err; for (st_idx = 0; st_idx < num; ++st_idx) { if (dst[st_idx] == NULL) dst[st_idx] = src[st_idx]; else if (src[st_idx] != NULL) { re_node_set merged_set; err = re_node_set_init_union (&merged_set, &dst[st_idx]->nodes, &src[st_idx]->nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; dst[st_idx] = re_acquire_state (&err, dfa, &merged_set); re_node_set_free (&merged_set); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } return REG_NOERROR; } static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *dest_nodes) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err = REG_NOERROR; const re_node_set *candidates; candidates = ((mctx->state_log[str_idx] == NULL) ? NULL : &mctx->state_log[str_idx]->nodes); if (dest_nodes->nelem == 0) sctx->sifted_states[str_idx] = NULL; else { if (candidates) { /* At first, add the nodes which can epsilon transit to a node in DEST_NODE. */ err = add_epsilon_src_nodes (dfa, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* Then, check the limitations in the current sift_context. */ if (sctx->limits.nelem) { err = check_subexp_limits (dfa, dest_nodes, candidates, &sctx->limits, mctx->bkref_ents, str_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } if (candidates && mctx->state_log[str_idx]->has_backref) { err = sift_states_bkref (mctx, sctx, str_idx, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates) { reg_errcode_t err = REG_NOERROR; Idx i; re_dfastate_t *state = re_acquire_state (&err, dfa, dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (!state->inveclosure.alloc) { err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem); if (__glibc_unlikely (err != REG_NOERROR)) return REG_ESPACE; for (i = 0; i < dest_nodes->nelem; i++) { err = re_node_set_merge (&state->inveclosure, dfa->inveclosures + dest_nodes->elems[i]); if (__glibc_unlikely (err != REG_NOERROR)) return REG_ESPACE; } } return re_node_set_add_intersect (dest_nodes, candidates, &state->inveclosure); } static reg_errcode_t sub_epsilon_src_nodes (const re_dfa_t *dfa, Idx node, re_node_set *dest_nodes, const re_node_set *candidates) { Idx ecl_idx; reg_errcode_t err; re_node_set *inv_eclosure = dfa->inveclosures + node; re_node_set except_nodes; re_node_set_init_empty (&except_nodes); for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) { Idx cur_node = inv_eclosure->elems[ecl_idx]; if (cur_node == node) continue; if (IS_EPSILON_NODE (dfa->nodes[cur_node].type)) { Idx edst1 = dfa->edests[cur_node].elems[0]; Idx edst2 = ((dfa->edests[cur_node].nelem > 1) ? dfa->edests[cur_node].elems[1] : -1); if ((!re_node_set_contains (inv_eclosure, edst1) && re_node_set_contains (dest_nodes, edst1)) || (edst2 > 0 && !re_node_set_contains (inv_eclosure, edst2) && re_node_set_contains (dest_nodes, edst2))) { err = re_node_set_add_intersect (&except_nodes, candidates, dfa->inveclosures + cur_node); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&except_nodes); return err; } } } } for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) { Idx cur_node = inv_eclosure->elems[ecl_idx]; if (!re_node_set_contains (&except_nodes, cur_node)) { Idx idx = re_node_set_contains (dest_nodes, cur_node) - 1; re_node_set_remove_at (dest_nodes, idx); } } re_node_set_free (&except_nodes); return REG_NOERROR; } static bool check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx lim_idx, src_pos, dst_pos; Idx dst_bkref_idx = search_cur_bkref_entry (mctx, dst_idx); Idx src_bkref_idx = search_cur_bkref_entry (mctx, src_idx); for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) { Idx subexp_idx; struct re_backref_cache_entry *ent; ent = mctx->bkref_ents + limits->elems[lim_idx]; subexp_idx = dfa->nodes[ent->node].opr.idx; dst_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], subexp_idx, dst_node, dst_idx, dst_bkref_idx); src_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], subexp_idx, src_node, src_idx, src_bkref_idx); /* In case of: <src> <dst> ( <subexp> ) ( <subexp> ) <src> <dst> ( <subexp1> <src> <subexp2> <dst> <subexp3> ) */ if (src_pos == dst_pos) continue; /* This is unrelated limitation. */ else return true; } return false; } static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, Idx subexp_idx, Idx from_node, Idx bkref_idx) { const re_dfa_t *const dfa = mctx->dfa; const re_node_set *eclosures = dfa->eclosures + from_node; Idx node_idx; /* Else, we are on the boundary: examine the nodes on the epsilon closure. */ for (node_idx = 0; node_idx < eclosures->nelem; ++node_idx) { Idx node = eclosures->elems[node_idx]; switch (dfa->nodes[node].type) { case OP_BACK_REF: if (bkref_idx != -1) { struct re_backref_cache_entry *ent = mctx->bkref_ents + bkref_idx; do { Idx dst; int cpos; if (ent->node != node) continue; if (subexp_idx < BITSET_WORD_BITS && !(ent->eps_reachable_subexps_map & ((bitset_word_t) 1 << subexp_idx))) continue; /* Recurse trying to reach the OP_OPEN_SUBEXP and OP_CLOSE_SUBEXP cases below. But, if the destination node is the same node as the source node, don't recurse because it would cause an infinite loop: a regex that exhibits this behavior is ()\1*\1* */ dst = dfa->edests[node].elems[0]; if (dst == from_node) { if (boundaries & 1) return -1; else /* if (boundaries & 2) */ return 0; } cpos = check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, dst, bkref_idx); if (cpos == -1 /* && (boundaries & 1) */) return -1; if (cpos == 0 && (boundaries & 2)) return 0; if (subexp_idx < BITSET_WORD_BITS) ent->eps_reachable_subexps_map &= ~((bitset_word_t) 1 << subexp_idx); } while (ent++->more); } break; case OP_OPEN_SUBEXP: if ((boundaries & 1) && subexp_idx == dfa->nodes[node].opr.idx) return -1; break; case OP_CLOSE_SUBEXP: if ((boundaries & 2) && subexp_idx == dfa->nodes[node].opr.idx) return 0; break; default: break; } } return (boundaries & 2) ? 1 : 0; } static int check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, Idx subexp_idx, Idx from_node, Idx str_idx, Idx bkref_idx) { struct re_backref_cache_entry *lim = mctx->bkref_ents + limit; int boundaries; /* If we are outside the range of the subexpression, return -1 or 1. */ if (str_idx < lim->subexp_from) return -1; if (lim->subexp_to < str_idx) return 1; /* If we are within the subexpression, return 0. */ boundaries = (str_idx == lim->subexp_from); boundaries |= (str_idx == lim->subexp_to) << 1; if (boundaries == 0) return 0; /* Else, examine epsilon closure. */ return check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, from_node, bkref_idx); } /* Check the limitations of sub expressions LIMITS, and remove the nodes which are against limitations from DEST_NODES. */ static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates, re_node_set *limits, struct re_backref_cache_entry *bkref_ents, Idx str_idx) { reg_errcode_t err; Idx node_idx, lim_idx; for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) { Idx subexp_idx; struct re_backref_cache_entry *ent; ent = bkref_ents + limits->elems[lim_idx]; if (str_idx <= ent->subexp_from || ent->str_idx < str_idx) continue; /* This is unrelated limitation. */ subexp_idx = dfa->nodes[ent->node].opr.idx; if (ent->subexp_to == str_idx) { Idx ops_node = -1; Idx cls_node = -1; for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; re_token_type_t type = dfa->nodes[node].type; if (type == OP_OPEN_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx) ops_node = node; else if (type == OP_CLOSE_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx) cls_node = node; } /* Check the limitation of the open subexpression. */ /* Note that (ent->subexp_to = str_idx != ent->subexp_from). */ if (ops_node >= 0) { err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; } /* Check the limitation of the close subexpression. */ if (cls_node >= 0) for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; if (!re_node_set_contains (dfa->inveclosures + node, cls_node) && !re_node_set_contains (dfa->eclosures + node, cls_node)) { /* It is against this limitation. Remove it form the current sifted state. */ err = sub_epsilon_src_nodes (dfa, node, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; --node_idx; } } } else /* (ent->subexp_to != str_idx) */ { for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; re_token_type_t type = dfa->nodes[node].type; if (type == OP_CLOSE_SUBEXP || type == OP_OPEN_SUBEXP) { if (subexp_idx != dfa->nodes[node].opr.idx) continue; /* It is against this limitation. Remove it form the current sifted state. */ err = sub_epsilon_src_nodes (dfa, node, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } } } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, const re_node_set *candidates) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx node_idx, node; re_sift_context_t local_sctx; Idx first_idx = search_cur_bkref_entry (mctx, str_idx); if (first_idx == -1) return REG_NOERROR; local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized. */ for (node_idx = 0; node_idx < candidates->nelem; ++node_idx) { Idx enabled_idx; re_token_type_t type; struct re_backref_cache_entry *entry; node = candidates->elems[node_idx]; type = dfa->nodes[node].type; /* Avoid infinite loop for the REs like "()\1+". */ if (node == sctx->last_node && str_idx == sctx->last_str_idx) continue; if (type != OP_BACK_REF) continue; entry = mctx->bkref_ents + first_idx; enabled_idx = first_idx; do { Idx subexp_len; Idx to_idx; Idx dst_node; bool ok; re_dfastate_t *cur_state; if (entry->node != node) continue; subexp_len = entry->subexp_to - entry->subexp_from; to_idx = str_idx + subexp_len; dst_node = (subexp_len ? dfa->nexts[node] : dfa->edests[node].elems[0]); if (to_idx > sctx->last_str_idx || sctx->sifted_states[to_idx] == NULL || !STATE_NODE_CONTAINS (sctx->sifted_states[to_idx], dst_node) || check_dst_limits (mctx, &sctx->limits, node, str_idx, dst_node, to_idx)) continue; if (local_sctx.sifted_states == NULL) { local_sctx = *sctx; err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } local_sctx.last_node = node; local_sctx.last_str_idx = str_idx; ok = re_node_set_insert (&local_sctx.limits, enabled_idx); if (__glibc_unlikely (! ok)) { err = REG_ESPACE; goto free_return; } cur_state = local_sctx.sifted_states[str_idx]; err = sift_states_backward (mctx, &local_sctx); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; if (sctx->limited_states != NULL) { err = merge_state_array (dfa, sctx->limited_states, local_sctx.sifted_states, str_idx + 1); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } local_sctx.sifted_states[str_idx] = cur_state; re_node_set_remove (&local_sctx.limits, enabled_idx); /* mctx->bkref_ents may have changed, reload the pointer. */ entry = mctx->bkref_ents + enabled_idx; } while (enabled_idx++, entry++->more); } err = REG_NOERROR; free_return: if (local_sctx.sifted_states != NULL) { re_node_set_free (&local_sctx.limits); } return err; } static int sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx node_idx, Idx str_idx, Idx max_str_idx) { const re_dfa_t *const dfa = mctx->dfa; int naccepted; /* Check the node can accept "multi byte". */ naccepted = check_node_accept_bytes (dfa, node_idx, &mctx->input, str_idx); if (naccepted > 0 && str_idx + naccepted <= max_str_idx && !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted], dfa->nexts[node_idx])) /* The node can't accept the "multi byte", or the destination was already thrown away, then the node couldn't accept the current input "multi byte". */ naccepted = 0; /* Otherwise, it is sure that the node could accept 'naccepted' bytes input. */ return naccepted; } /* Functions for state transition. */ /* Return the next state to which the current state STATE will transit by accepting the current input byte, and update STATE_LOG if necessary. Return NULL on failure. If STATE can accept a multibyte char/collating element/back reference update the destination of STATE_LOG. */ static re_dfastate_t * __attribute_warn_unused_result__ transit_state (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state) { re_dfastate_t **trtable; unsigned char ch; /* If the current state can accept multibyte. */ if (__glibc_unlikely (state->accept_mb)) { *err = transit_state_mb (mctx, state); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; } /* Then decide the next state with the single byte. */ #if 0 if (0) /* don't use transition table */ return transit_state_sb (err, mctx, state); #endif /* Use transition table */ ch = re_string_fetch_byte (&mctx->input); for (;;) { trtable = state->trtable; if (__glibc_likely (trtable != NULL)) return trtable[ch]; trtable = state->word_trtable; if (__glibc_likely (trtable != NULL)) { unsigned int context; context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input) - 1, mctx->eflags); if (IS_WORD_CONTEXT (context)) return trtable[ch + SBC_MAX]; else return trtable[ch]; } if (!build_trtable (mctx->dfa, state)) { *err = REG_ESPACE; return NULL; } /* Retry, we now have a transition table. */ } } /* Update the state_log if we need */ static re_dfastate_t * merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *next_state) { const re_dfa_t *const dfa = mctx->dfa; Idx cur_idx = re_string_cur_idx (&mctx->input); if (cur_idx > mctx->state_log_top) { mctx->state_log[cur_idx] = next_state; mctx->state_log_top = cur_idx; } else if (mctx->state_log[cur_idx] == 0) { mctx->state_log[cur_idx] = next_state; } else { re_dfastate_t *pstate; unsigned int context; re_node_set next_nodes, *log_nodes, *table_nodes = NULL; /* If (state_log[cur_idx] != 0), it implies that cur_idx is the destination of a multibyte char/collating element/ back reference. Then the next state is the union set of these destinations and the results of the transition table. */ pstate = mctx->state_log[cur_idx]; log_nodes = pstate->entrance_nodes; if (next_state != NULL) { table_nodes = next_state->entrance_nodes; *err = re_node_set_init_union (&next_nodes, table_nodes, log_nodes); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; } else next_nodes = *log_nodes; /* Note: We already add the nodes of the initial state, then we don't need to add them here. */ context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input) - 1, mctx->eflags); next_state = mctx->state_log[cur_idx] = re_acquire_state_context (err, dfa, &next_nodes, context); /* We don't need to check errors here, since the return value of this function is next_state and ERR is already set. */ if (table_nodes != NULL) re_node_set_free (&next_nodes); } if (__glibc_unlikely (dfa->nbackref) && next_state != NULL) { /* Check OP_OPEN_SUBEXP in the current state in case that we use them later. We must check them here, since the back references in the next state might use them. */ *err = check_subexp_matching_top (mctx, &next_state->nodes, cur_idx); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; /* If the next state has back references. */ if (next_state->has_backref) { *err = transit_state_bkref (mctx, &next_state->nodes); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; next_state = mctx->state_log[cur_idx]; } } return next_state; } /* Skip bytes in the input that correspond to part of a multi-byte match, then look in the log for a state from which to restart matching. */ static re_dfastate_t * find_recover_state (reg_errcode_t *err, re_match_context_t *mctx) { re_dfastate_t *cur_state; do { Idx max = mctx->state_log_top; Idx cur_str_idx = re_string_cur_idx (&mctx->input); do { if (++cur_str_idx > max) return NULL; re_string_skip_bytes (&mctx->input, 1); } while (mctx->state_log[cur_str_idx] == NULL); cur_state = merge_state_with_log (err, mctx, NULL); } while (*err == REG_NOERROR && cur_state == NULL); return cur_state; } /* Helper functions for transit_state. */ /* From the node set CUR_NODES, pick up the nodes whose types are OP_OPEN_SUBEXP and which have corresponding back references in the regular expression. And register them to use them later for evaluating the corresponding back references. */ static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, Idx str_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx node_idx; reg_errcode_t err; /* TODO: This isn't efficient. Because there might be more than one nodes whose types are OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all nodes. E.g. RE: (a){2} */ for (node_idx = 0; node_idx < cur_nodes->nelem; ++node_idx) { Idx node = cur_nodes->elems[node_idx]; if (dfa->nodes[node].type == OP_OPEN_SUBEXP && dfa->nodes[node].opr.idx < BITSET_WORD_BITS && (dfa->used_bkref_map & ((bitset_word_t) 1 << dfa->nodes[node].opr.idx))) { err = match_ctx_add_subtop (mctx, node, str_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } return REG_NOERROR; } #if 0 /* Return the next state to which the current state STATE will transit by accepting the current input byte. Return NULL on failure. */ static re_dfastate_t * transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state) { const re_dfa_t *const dfa = mctx->dfa; re_node_set next_nodes; re_dfastate_t *next_state; Idx node_cnt, cur_str_idx = re_string_cur_idx (&mctx->input); unsigned int context; *err = re_node_set_alloc (&next_nodes, state->nodes.nelem + 1); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt) { Idx cur_node = state->nodes.elems[node_cnt]; if (check_node_accept (mctx, dfa->nodes + cur_node, cur_str_idx)) { *err = re_node_set_merge (&next_nodes, dfa->eclosures + dfa->nexts[cur_node]); if (__glibc_unlikely (*err != REG_NOERROR)) { re_node_set_free (&next_nodes); return NULL; } } } context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); next_state = re_acquire_state_context (err, dfa, &next_nodes, context); /* We don't need to check errors here, since the return value of this function is next_state and ERR is already set. */ re_node_set_free (&next_nodes); re_string_skip_bytes (&mctx->input, 1); return next_state; } #endif static reg_errcode_t transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx i; for (i = 0; i < pstate->nodes.nelem; ++i) { re_node_set dest_nodes, *new_nodes; Idx cur_node_idx = pstate->nodes.elems[i]; int naccepted; Idx dest_idx; unsigned int context; re_dfastate_t *dest_state; if (!dfa->nodes[cur_node_idx].accept_mb) continue; if (dfa->nodes[cur_node_idx].constraint) { context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input), mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[cur_node_idx].constraint, context)) continue; } /* How many bytes the node can accept? */ naccepted = check_node_accept_bytes (dfa, cur_node_idx, &mctx->input, re_string_cur_idx (&mctx->input)); if (naccepted == 0) continue; /* The node can accepts 'naccepted' bytes. */ dest_idx = re_string_cur_idx (&mctx->input) + naccepted; mctx->max_mb_elem_len = ((mctx->max_mb_elem_len < naccepted) ? naccepted : mctx->max_mb_elem_len); err = clean_state_log_if_needed (mctx, dest_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; DEBUG_ASSERT (dfa->nexts[cur_node_idx] != -1); new_nodes = dfa->eclosures + dfa->nexts[cur_node_idx]; dest_state = mctx->state_log[dest_idx]; if (dest_state == NULL) dest_nodes = *new_nodes; else { err = re_node_set_init_union (&dest_nodes, dest_state->entrance_nodes, new_nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } context = re_string_context_at (&mctx->input, dest_idx - 1, mctx->eflags); mctx->state_log[dest_idx] = re_acquire_state_context (&err, dfa, &dest_nodes, context); if (dest_state != NULL) re_node_set_free (&dest_nodes); if (__glibc_unlikely (mctx->state_log[dest_idx] == NULL && err != REG_NOERROR)) return err; } return REG_NOERROR; } static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx i; Idx cur_str_idx = re_string_cur_idx (&mctx->input); for (i = 0; i < nodes->nelem; ++i) { Idx dest_str_idx, prev_nelem, bkc_idx; Idx node_idx = nodes->elems[i]; unsigned int context; const re_token_t *node = dfa->nodes + node_idx; re_node_set *new_dest_nodes; /* Check whether 'node' is a backreference or not. */ if (node->type != OP_BACK_REF) continue; if (node->constraint) { context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) continue; } /* 'node' is a backreference. Check the substring which the substring matched. */ bkc_idx = mctx->nbkref_ents; err = get_subexp (mctx, node_idx, cur_str_idx); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* And add the epsilon closures (which is 'new_dest_nodes') of the backreference to appropriate state_log. */ DEBUG_ASSERT (dfa->nexts[node_idx] != -1); for (; bkc_idx < mctx->nbkref_ents; ++bkc_idx) { Idx subexp_len; re_dfastate_t *dest_state; struct re_backref_cache_entry *bkref_ent; bkref_ent = mctx->bkref_ents + bkc_idx; if (bkref_ent->node != node_idx || bkref_ent->str_idx != cur_str_idx) continue; subexp_len = bkref_ent->subexp_to - bkref_ent->subexp_from; new_dest_nodes = (subexp_len == 0 ? dfa->eclosures + dfa->edests[node_idx].elems[0] : dfa->eclosures + dfa->nexts[node_idx]); dest_str_idx = (cur_str_idx + bkref_ent->subexp_to - bkref_ent->subexp_from); context = re_string_context_at (&mctx->input, dest_str_idx - 1, mctx->eflags); dest_state = mctx->state_log[dest_str_idx]; prev_nelem = ((mctx->state_log[cur_str_idx] == NULL) ? 0 : mctx->state_log[cur_str_idx]->nodes.nelem); /* Add 'new_dest_node' to state_log. */ if (dest_state == NULL) { mctx->state_log[dest_str_idx] = re_acquire_state_context (&err, dfa, new_dest_nodes, context); if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR)) goto free_return; } else { re_node_set dest_nodes; err = re_node_set_init_union (&dest_nodes, dest_state->entrance_nodes, new_dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&dest_nodes); goto free_return; } mctx->state_log[dest_str_idx] = re_acquire_state_context (&err, dfa, &dest_nodes, context); re_node_set_free (&dest_nodes); if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR)) goto free_return; } /* We need to check recursively if the backreference can epsilon transit. */ if (subexp_len == 0 && mctx->state_log[cur_str_idx]->nodes.nelem > prev_nelem) { err = check_subexp_matching_top (mctx, new_dest_nodes, cur_str_idx); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; err = transit_state_bkref (mctx, new_dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } } } err = REG_NOERROR; free_return: return err; } /* Enumerate all the candidates which the backreference BKREF_NODE can match at BKREF_STR_IDX, and register them by match_ctx_add_entry(). Note that we might collect inappropriate candidates here. However, the cost of checking them strictly here is too high, then we delay these checking for prune_impossible_nodes(). */ static reg_errcode_t __attribute_warn_unused_result__ get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx subexp_num, sub_top_idx; const char *buf = (const char *) re_string_get_buffer (&mctx->input); /* Return if we have already checked BKREF_NODE at BKREF_STR_IDX. */ Idx cache_idx = search_cur_bkref_entry (mctx, bkref_str_idx); if (cache_idx != -1) { const struct re_backref_cache_entry *entry = mctx->bkref_ents + cache_idx; do if (entry->node == bkref_node) return REG_NOERROR; /* We already checked it. */ while (entry++->more); } subexp_num = dfa->nodes[bkref_node].opr.idx; /* For each sub expression */ for (sub_top_idx = 0; sub_top_idx < mctx->nsub_tops; ++sub_top_idx) { reg_errcode_t err; re_sub_match_top_t *sub_top = mctx->sub_tops[sub_top_idx]; re_sub_match_last_t *sub_last; Idx sub_last_idx, sl_str, bkref_str_off; if (dfa->nodes[sub_top->node].opr.idx != subexp_num) continue; /* It isn't related. */ sl_str = sub_top->str_idx; bkref_str_off = bkref_str_idx; /* At first, check the last node of sub expressions we already evaluated. */ for (sub_last_idx = 0; sub_last_idx < sub_top->nlasts; ++sub_last_idx) { regoff_t sl_str_diff; sub_last = sub_top->lasts[sub_last_idx]; sl_str_diff = sub_last->str_idx - sl_str; /* The matched string by the sub expression match with the substring at the back reference? */ if (sl_str_diff > 0) { if (__glibc_unlikely (bkref_str_off + sl_str_diff > mctx->input.valid_len)) { /* Not enough chars for a successful match. */ if (bkref_str_off + sl_str_diff > mctx->input.len) break; err = clean_state_log_if_needed (mctx, bkref_str_off + sl_str_diff); if (__glibc_unlikely (err != REG_NOERROR)) return err; buf = (const char *) re_string_get_buffer (&mctx->input); } if (memcmp (buf + bkref_str_off, buf + sl_str, sl_str_diff) != 0) /* We don't need to search this sub expression any more. */ break; } bkref_str_off += sl_str_diff; sl_str += sl_str_diff; err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, bkref_str_idx); /* Reload buf, since the preceding call might have reallocated the buffer. */ buf = (const char *) re_string_get_buffer (&mctx->input); if (err == REG_NOMATCH) continue; if (__glibc_unlikely (err != REG_NOERROR)) return err; } if (sub_last_idx < sub_top->nlasts) continue; if (sub_last_idx > 0) ++sl_str; /* Then, search for the other last nodes of the sub expression. */ for (; sl_str <= bkref_str_idx; ++sl_str) { Idx cls_node; regoff_t sl_str_off; const re_node_set *nodes; sl_str_off = sl_str - sub_top->str_idx; /* The matched string by the sub expression match with the substring at the back reference? */ if (sl_str_off > 0) { if (__glibc_unlikely (bkref_str_off >= mctx->input.valid_len)) { /* If we are at the end of the input, we cannot match. */ if (bkref_str_off >= mctx->input.len) break; err = extend_buffers (mctx, bkref_str_off + 1); if (__glibc_unlikely (err != REG_NOERROR)) return err; buf = (const char *) re_string_get_buffer (&mctx->input); } if (buf [bkref_str_off++] != buf[sl_str - 1]) break; /* We don't need to search this sub expression any more. */ } if (mctx->state_log[sl_str] == NULL) continue; /* Does this state have a ')' of the sub expression? */ nodes = &mctx->state_log[sl_str]->nodes; cls_node = find_subexp_node (dfa, nodes, subexp_num, OP_CLOSE_SUBEXP); if (cls_node == -1) continue; /* No. */ if (sub_top->path == NULL) { sub_top->path = calloc (sizeof (state_array_t), sl_str - sub_top->str_idx + 1); if (sub_top->path == NULL) return REG_ESPACE; } /* Can the OP_OPEN_SUBEXP node arrive the OP_CLOSE_SUBEXP node in the current context? */ err = check_arrival (mctx, sub_top->path, sub_top->node, sub_top->str_idx, cls_node, sl_str, OP_CLOSE_SUBEXP); if (err == REG_NOMATCH) continue; if (__glibc_unlikely (err != REG_NOERROR)) return err; sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str); if (__glibc_unlikely (sub_last == NULL)) return REG_ESPACE; err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, bkref_str_idx); buf = (const char *) re_string_get_buffer (&mctx->input); if (err == REG_NOMATCH) continue; if (__glibc_unlikely (err != REG_NOERROR)) return err; } } return REG_NOERROR; } /* Helper functions for get_subexp(). */ /* Check SUB_LAST can arrive to the back reference BKREF_NODE at BKREF_STR. If it can arrive, register the sub expression expressed with SUB_TOP and SUB_LAST. */ static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str) { reg_errcode_t err; Idx to_idx; /* Can the subexpression arrive the back reference? */ err = check_arrival (mctx, &sub_last->path, sub_last->node, sub_last->str_idx, bkref_node, bkref_str, OP_OPEN_SUBEXP); if (err != REG_NOERROR) return err; err = match_ctx_add_entry (mctx, bkref_node, bkref_str, sub_top->str_idx, sub_last->str_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; to_idx = bkref_str + sub_last->str_idx - sub_top->str_idx; return clean_state_log_if_needed (mctx, to_idx); } /* Find the first node which is '(' or ')' and whose index is SUBEXP_IDX. Search '(' if FL_OPEN, or search ')' otherwise. TODO: This function isn't efficient... Because there might be more than one nodes whose types are OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all nodes. E.g. RE: (a){2} */ static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, Idx subexp_idx, int type) { Idx cls_idx; for (cls_idx = 0; cls_idx < nodes->nelem; ++cls_idx) { Idx cls_node = nodes->elems[cls_idx]; const re_token_t *node = dfa->nodes + cls_node; if (node->type == type && node->opr.idx == subexp_idx) return cls_node; } return -1; } /* Check whether the node TOP_NODE at TOP_STR can arrive to the node LAST_NODE at LAST_STR. We record the path onto PATH since it will be heavily reused. Return REG_NOERROR if it can arrive, REG_NOMATCH if it cannot, REG_ESPACE if memory is exhausted. */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, Idx top_str, Idx last_node, Idx last_str, int type) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err = REG_NOERROR; Idx subexp_num, backup_cur_idx, str_idx, null_cnt; re_dfastate_t *cur_state = NULL; re_node_set *cur_nodes, next_nodes; re_dfastate_t **backup_state_log; unsigned int context; subexp_num = dfa->nodes[top_node].opr.idx; /* Extend the buffer if we need. */ if (__glibc_unlikely (path->alloc < last_str + mctx->max_mb_elem_len + 1)) { re_dfastate_t **new_array; Idx old_alloc = path->alloc; Idx incr_alloc = last_str + mctx->max_mb_elem_len + 1; Idx new_alloc; if (__glibc_unlikely (IDX_MAX - old_alloc < incr_alloc)) return REG_ESPACE; new_alloc = old_alloc + incr_alloc; if (__glibc_unlikely (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc)) return REG_ESPACE; new_array = re_realloc (path->array, re_dfastate_t *, new_alloc); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; path->array = new_array; path->alloc = new_alloc; memset (new_array + old_alloc, '\0', sizeof (re_dfastate_t *) * (path->alloc - old_alloc)); } str_idx = path->next_idx ? path->next_idx : top_str; /* Temporary modify MCTX. */ backup_state_log = mctx->state_log; backup_cur_idx = mctx->input.cur_idx; mctx->state_log = path->array; mctx->input.cur_idx = str_idx; /* Setup initial node set. */ context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); if (str_idx == top_str) { err = re_node_set_init_1 (&next_nodes, top_node); if (__glibc_unlikely (err != REG_NOERROR)) return err; err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } else { cur_state = mctx->state_log[str_idx]; if (cur_state && cur_state->has_backref) { err = re_node_set_init_copy (&next_nodes, &cur_state->nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } else re_node_set_init_empty (&next_nodes); } if (str_idx == top_str || (cur_state && cur_state->has_backref)) { if (next_nodes.nelem) { err = expand_bkref_cache (mctx, &next_nodes, str_idx, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } mctx->state_log[str_idx] = cur_state; } for (null_cnt = 0; str_idx < last_str && null_cnt <= mctx->max_mb_elem_len;) { re_node_set_empty (&next_nodes); if (mctx->state_log[str_idx + 1]) { err = re_node_set_merge (&next_nodes, &mctx->state_log[str_idx + 1]->nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } if (cur_state) { err = check_arrival_add_next_nodes (mctx, str_idx, &cur_state->non_eps_nodes, &next_nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } ++str_idx; if (next_nodes.nelem) { err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } err = expand_bkref_cache (mctx, &next_nodes, str_idx, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } mctx->state_log[str_idx] = cur_state; null_cnt = cur_state == NULL ? null_cnt + 1 : 0; } re_node_set_free (&next_nodes); cur_nodes = (mctx->state_log[last_str] == NULL ? NULL : &mctx->state_log[last_str]->nodes); path->next_idx = str_idx; /* Fix MCTX. */ mctx->state_log = backup_state_log; mctx->input.cur_idx = backup_cur_idx; /* Then check the current node set has the node LAST_NODE. */ if (cur_nodes != NULL && re_node_set_contains (cur_nodes, last_node)) return REG_NOERROR; return REG_NOMATCH; } /* Helper functions for check_arrival. */ /* Calculate the destination nodes of CUR_NODES at STR_IDX, and append them to NEXT_NODES. TODO: This function is similar to the functions transit_state*(), however this function has many additional works. Can't we unify them? */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, re_node_set *cur_nodes, re_node_set *next_nodes) { const re_dfa_t *const dfa = mctx->dfa; bool ok; Idx cur_idx; reg_errcode_t err = REG_NOERROR; re_node_set union_set; re_node_set_init_empty (&union_set); for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx) { int naccepted = 0; Idx cur_node = cur_nodes->elems[cur_idx]; DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[cur_node].type)); /* If the node may accept "multi byte". */ if (dfa->nodes[cur_node].accept_mb) { naccepted = check_node_accept_bytes (dfa, cur_node, &mctx->input, str_idx); if (naccepted > 1) { re_dfastate_t *dest_state; Idx next_node = dfa->nexts[cur_node]; Idx next_idx = str_idx + naccepted; dest_state = mctx->state_log[next_idx]; re_node_set_empty (&union_set); if (dest_state) { err = re_node_set_merge (&union_set, &dest_state->nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&union_set); return err; } } ok = re_node_set_insert (&union_set, next_node); if (__glibc_unlikely (! ok)) { re_node_set_free (&union_set); return REG_ESPACE; } mctx->state_log[next_idx] = re_acquire_state (&err, dfa, &union_set); if (__glibc_unlikely (mctx->state_log[next_idx] == NULL && err != REG_NOERROR)) { re_node_set_free (&union_set); return err; } } } if (naccepted || check_node_accept (mctx, dfa->nodes + cur_node, str_idx)) { ok = re_node_set_insert (next_nodes, dfa->nexts[cur_node]); if (__glibc_unlikely (! ok)) { re_node_set_free (&union_set); return REG_ESPACE; } } } re_node_set_free (&union_set); return REG_NOERROR; } /* For all the nodes in CUR_NODES, add the epsilon closures of them to CUR_NODES, however exclude the nodes which are: - inside the sub expression whose number is EX_SUBEXP, if FL_OPEN. - out of the sub expression whose number is EX_SUBEXP, if !FL_OPEN. */ static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, Idx ex_subexp, int type) { reg_errcode_t err; Idx idx, outside_node; re_node_set new_nodes; DEBUG_ASSERT (cur_nodes->nelem); err = re_node_set_alloc (&new_nodes, cur_nodes->nelem); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* Create a new node set NEW_NODES with the nodes which are epsilon closures of the node in CUR_NODES. */ for (idx = 0; idx < cur_nodes->nelem; ++idx) { Idx cur_node = cur_nodes->elems[idx]; const re_node_set *eclosure = dfa->eclosures + cur_node; outside_node = find_subexp_node (dfa, eclosure, ex_subexp, type); if (outside_node == -1) { /* There are no problematic nodes, just merge them. */ err = re_node_set_merge (&new_nodes, eclosure); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&new_nodes); return err; } } else { /* There are problematic nodes, re-calculate incrementally. */ err = check_arrival_expand_ecl_sub (dfa, &new_nodes, cur_node, ex_subexp, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&new_nodes); return err; } } } re_node_set_free (cur_nodes); *cur_nodes = new_nodes; return REG_NOERROR; } /* Helper function for check_arrival_expand_ecl. Check incrementally the epsilon closure of TARGET, and if it isn't problematic append it to DST_NODES. */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, Idx target, Idx ex_subexp, int type) { Idx cur_node; for (cur_node = target; !re_node_set_contains (dst_nodes, cur_node);) { bool ok; if (dfa->nodes[cur_node].type == type && dfa->nodes[cur_node].opr.idx == ex_subexp) { if (type == OP_CLOSE_SUBEXP) { ok = re_node_set_insert (dst_nodes, cur_node); if (__glibc_unlikely (! ok)) return REG_ESPACE; } break; } ok = re_node_set_insert (dst_nodes, cur_node); if (__glibc_unlikely (! ok)) return REG_ESPACE; if (dfa->edests[cur_node].nelem == 0) break; if (dfa->edests[cur_node].nelem == 2) { reg_errcode_t err; err = check_arrival_expand_ecl_sub (dfa, dst_nodes, dfa->edests[cur_node].elems[1], ex_subexp, type); if (__glibc_unlikely (err != REG_NOERROR)) return err; } cur_node = dfa->edests[cur_node].elems[0]; } return REG_NOERROR; } /* For all the back references in the current state, calculate the destination of the back references by the appropriate entry in MCTX->BKREF_ENTS. */ static reg_errcode_t __attribute_warn_unused_result__ expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, Idx cur_str, Idx subexp_num, int type) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx cache_idx_start = search_cur_bkref_entry (mctx, cur_str); struct re_backref_cache_entry *ent; if (cache_idx_start == -1) return REG_NOERROR; restart: ent = mctx->bkref_ents + cache_idx_start; do { Idx to_idx, next_node; /* Is this entry ENT is appropriate? */ if (!re_node_set_contains (cur_nodes, ent->node)) continue; /* No. */ to_idx = cur_str + ent->subexp_to - ent->subexp_from; /* Calculate the destination of the back reference, and append it to MCTX->STATE_LOG. */ if (to_idx == cur_str) { /* The backreference did epsilon transit, we must re-check all the node in the current state. */ re_node_set new_dests; reg_errcode_t err2, err3; next_node = dfa->edests[ent->node].elems[0]; if (re_node_set_contains (cur_nodes, next_node)) continue; err = re_node_set_init_1 (&new_dests, next_node); err2 = check_arrival_expand_ecl (dfa, &new_dests, subexp_num, type); err3 = re_node_set_merge (cur_nodes, &new_dests); re_node_set_free (&new_dests); if (__glibc_unlikely (err != REG_NOERROR || err2 != REG_NOERROR || err3 != REG_NOERROR)) { err = (err != REG_NOERROR ? err : (err2 != REG_NOERROR ? err2 : err3)); return err; } /* TODO: It is still inefficient... */ goto restart; } else { re_node_set union_set; next_node = dfa->nexts[ent->node]; if (mctx->state_log[to_idx]) { bool ok; if (re_node_set_contains (&mctx->state_log[to_idx]->nodes, next_node)) continue; err = re_node_set_init_copy (&union_set, &mctx->state_log[to_idx]->nodes); ok = re_node_set_insert (&union_set, next_node); if (__glibc_unlikely (err != REG_NOERROR || ! ok)) { re_node_set_free (&union_set); err = err != REG_NOERROR ? err : REG_ESPACE; return err; } } else { err = re_node_set_init_1 (&union_set, next_node); if (__glibc_unlikely (err != REG_NOERROR)) return err; } mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set); re_node_set_free (&union_set); if (__glibc_unlikely (mctx->state_log[to_idx] == NULL && err != REG_NOERROR)) return err; } } while (ent++->more); return REG_NOERROR; } /* Build transition table for the state. Return true if successful. */ static bool __attribute_noinline__ build_trtable (const re_dfa_t *dfa, re_dfastate_t *state) { reg_errcode_t err; Idx i, j; int ch; bool need_word_trtable = false; bitset_word_t elem, mask; Idx ndests; /* Number of the destination states from 'state'. */ re_dfastate_t **trtable; re_dfastate_t *dest_states[SBC_MAX]; re_dfastate_t *dest_states_word[SBC_MAX]; re_dfastate_t *dest_states_nl[SBC_MAX]; re_node_set follows; bitset_t acceptable; /* We build DFA states which corresponds to the destination nodes from 'state'. 'dests_node[i]' represents the nodes which i-th destination state contains, and 'dests_ch[i]' represents the characters which i-th destination state accepts. */ re_node_set dests_node[SBC_MAX]; bitset_t dests_ch[SBC_MAX]; /* Initialize transition table. */ state->word_trtable = state->trtable = NULL; /* At first, group all nodes belonging to 'state' into several destinations. */ ndests = group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch); if (__glibc_unlikely (ndests <= 0)) { /* Return false in case of an error, true otherwise. */ if (ndests == 0) { state->trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); if (__glibc_unlikely (state->trtable == NULL)) return false; return true; } return false; } err = re_node_set_alloc (&follows, ndests + 1); if (__glibc_unlikely (err != REG_NOERROR)) { out_free: re_node_set_free (&follows); for (i = 0; i < ndests; ++i) re_node_set_free (dests_node + i); return false; } bitset_empty (acceptable); /* Then build the states for all destinations. */ for (i = 0; i < ndests; ++i) { Idx next_node; re_node_set_empty (&follows); /* Merge the follows of this destination states. */ for (j = 0; j < dests_node[i].nelem; ++j) { next_node = dfa->nexts[dests_node[i].elems[j]]; if (next_node != -1) { err = re_node_set_merge (&follows, dfa->eclosures + next_node); if (__glibc_unlikely (err != REG_NOERROR)) goto out_free; } } dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0); if (__glibc_unlikely (dest_states[i] == NULL && err != REG_NOERROR)) goto out_free; /* If the new state has context constraint, build appropriate states for these contexts. */ if (dest_states[i]->has_constraint) { dest_states_word[i] = re_acquire_state_context (&err, dfa, &follows, CONTEXT_WORD); if (__glibc_unlikely (dest_states_word[i] == NULL && err != REG_NOERROR)) goto out_free; if (dest_states[i] != dest_states_word[i] && dfa->mb_cur_max > 1) need_word_trtable = true; dest_states_nl[i] = re_acquire_state_context (&err, dfa, &follows, CONTEXT_NEWLINE); if (__glibc_unlikely (dest_states_nl[i] == NULL && err != REG_NOERROR)) goto out_free; } else { dest_states_word[i] = dest_states[i]; dest_states_nl[i] = dest_states[i]; } bitset_merge (acceptable, dests_ch[i]); } if (!__glibc_unlikely (need_word_trtable)) { /* We don't care about whether the following character is a word character, or we are in a single-byte character set so we can discern by looking at the character code: allocate a 256-entry transition table. */ trtable = state->trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); if (__glibc_unlikely (trtable == NULL)) goto out_free; /* For all characters ch...: */ for (i = 0; i < BITSET_WORDS; ++i) for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; elem; mask <<= 1, elem >>= 1, ++ch) if (__glibc_unlikely (elem & 1)) { /* There must be exactly one destination which accepts character ch. See group_nodes_into_DFAstates. */ for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) ; /* j-th destination accepts the word character ch. */ if (dfa->word_char[i] & mask) trtable[ch] = dest_states_word[j]; else trtable[ch] = dest_states[j]; } } else { /* We care about whether the following character is a word character, and we are in a multi-byte character set: discern by looking at the character code: build two 256-entry transition tables, one starting at trtable[0] and one starting at trtable[SBC_MAX]. */ trtable = state->word_trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), 2 * SBC_MAX); if (__glibc_unlikely (trtable == NULL)) goto out_free; /* For all characters ch...: */ for (i = 0; i < BITSET_WORDS; ++i) for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; elem; mask <<= 1, elem >>= 1, ++ch) if (__glibc_unlikely (elem & 1)) { /* There must be exactly one destination which accepts character ch. See group_nodes_into_DFAstates. */ for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) ; /* j-th destination accepts the word character ch. */ trtable[ch] = dest_states[j]; trtable[ch + SBC_MAX] = dest_states_word[j]; } } /* new line */ if (bitset_contain (acceptable, NEWLINE_CHAR)) { /* The current state accepts newline character. */ for (j = 0; j < ndests; ++j) if (bitset_contain (dests_ch[j], NEWLINE_CHAR)) { /* k-th destination accepts newline character. */ trtable[NEWLINE_CHAR] = dest_states_nl[j]; if (need_word_trtable) trtable[NEWLINE_CHAR + SBC_MAX] = dest_states_nl[j]; /* There must be only one destination which accepts newline. See group_nodes_into_DFAstates. */ break; } } re_node_set_free (&follows); for (i = 0; i < ndests; ++i) re_node_set_free (dests_node + i); return true; } /* Group all nodes belonging to STATE into several destinations. Then for all destinations, set the nodes belonging to the destination to DESTS_NODE[i] and set the characters accepted by the destination to DEST_CH[i]. Return the number of destinations if successful, -1 on internal error. */ static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, re_node_set *dests_node, bitset_t *dests_ch) { reg_errcode_t err; bool ok; Idx i, j, k; Idx ndests; /* Number of the destinations from 'state'. */ bitset_t accepts; /* Characters a node can accept. */ const re_node_set *cur_nodes = &state->nodes; bitset_empty (accepts); ndests = 0; /* For all the nodes belonging to 'state', */ for (i = 0; i < cur_nodes->nelem; ++i) { re_token_t *node = &dfa->nodes[cur_nodes->elems[i]]; re_token_type_t type = node->type; unsigned int constraint = node->constraint; /* Enumerate all single byte character this node can accept. */ if (type == CHARACTER) bitset_set (accepts, node->opr.c); else if (type == SIMPLE_BRACKET) { bitset_merge (accepts, node->opr.sbcset); } else if (type == OP_PERIOD) { if (dfa->mb_cur_max > 1) bitset_merge (accepts, dfa->sb_char); else bitset_set_all (accepts); if (!(dfa->syntax & RE_DOT_NEWLINE)) bitset_clear (accepts, '\n'); if (dfa->syntax & RE_DOT_NOT_NULL) bitset_clear (accepts, '\0'); } else if (type == OP_UTF8_PERIOD) { if (ASCII_CHARS % BITSET_WORD_BITS == 0) memset (accepts, -1, ASCII_CHARS / CHAR_BIT); else bitset_merge (accepts, utf8_sb_map); if (!(dfa->syntax & RE_DOT_NEWLINE)) bitset_clear (accepts, '\n'); if (dfa->syntax & RE_DOT_NOT_NULL) bitset_clear (accepts, '\0'); } else continue; /* Check the 'accepts' and sift the characters which are not match it the context. */ if (constraint) { if (constraint & NEXT_NEWLINE_CONSTRAINT) { bool accepts_newline = bitset_contain (accepts, NEWLINE_CHAR); bitset_empty (accepts); if (accepts_newline) bitset_set (accepts, NEWLINE_CHAR); else continue; } if (constraint & NEXT_ENDBUF_CONSTRAINT) { bitset_empty (accepts); continue; } if (constraint & NEXT_WORD_CONSTRAINT) { bitset_word_t any_set = 0; if (type == CHARACTER && !node->word_char) { bitset_empty (accepts); continue; } if (dfa->mb_cur_max > 1) for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j])); else for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= dfa->word_char[j]); if (!any_set) continue; } if (constraint & NEXT_NOTWORD_CONSTRAINT) { bitset_word_t any_set = 0; if (type == CHARACTER && node->word_char) { bitset_empty (accepts); continue; } if (dfa->mb_cur_max > 1) for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j])); else for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= ~dfa->word_char[j]); if (!any_set) continue; } } /* Then divide 'accepts' into DFA states, or create a new state. Above, we make sure that accepts is not empty. */ for (j = 0; j < ndests; ++j) { bitset_t intersec; /* Intersection sets, see below. */ bitset_t remains; /* Flags, see below. */ bitset_word_t has_intersec, not_subset, not_consumed; /* Optimization, skip if this state doesn't accept the character. */ if (type == CHARACTER && !bitset_contain (dests_ch[j], node->opr.c)) continue; /* Enumerate the intersection set of this state and 'accepts'. */ has_intersec = 0; for (k = 0; k < BITSET_WORDS; ++k) has_intersec |= intersec[k] = accepts[k] & dests_ch[j][k]; /* And skip if the intersection set is empty. */ if (!has_intersec) continue; /* Then check if this state is a subset of 'accepts'. */ not_subset = not_consumed = 0; for (k = 0; k < BITSET_WORDS; ++k) { not_subset |= remains[k] = ~accepts[k] & dests_ch[j][k]; not_consumed |= accepts[k] = accepts[k] & ~dests_ch[j][k]; } /* If this state isn't a subset of 'accepts', create a new group state, which has the 'remains'. */ if (not_subset) { bitset_copy (dests_ch[ndests], remains); bitset_copy (dests_ch[j], intersec); err = re_node_set_init_copy (dests_node + ndests, &dests_node[j]); if (__glibc_unlikely (err != REG_NOERROR)) goto error_return; ++ndests; } /* Put the position in the current group. */ ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]); if (__glibc_unlikely (! ok)) goto error_return; /* If all characters are consumed, go to next node. */ if (!not_consumed) break; } /* Some characters remain, create a new group. */ if (j == ndests) { bitset_copy (dests_ch[ndests], accepts); err = re_node_set_init_1 (dests_node + ndests, cur_nodes->elems[i]); if (__glibc_unlikely (err != REG_NOERROR)) goto error_return; ++ndests; bitset_empty (accepts); } } assume (ndests <= SBC_MAX); return ndests; error_return: for (j = 0; j < ndests; ++j) re_node_set_free (dests_node + j); return -1; } /* Check how many bytes the node 'dfa->nodes[node_idx]' accepts. Return the number of the bytes the node accepts. STR_IDX is the current index of the input string. This function handles the nodes which can accept one character, or one collating element like '.', '[a-z]', opposite to the other nodes can only accept one byte. */ #ifdef _LIBC # include <locale/weight.h> #endif static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, const re_string_t *input, Idx str_idx) { const re_token_t *node = dfa->nodes + node_idx; int char_len, elem_len; Idx i; if (__glibc_unlikely (node->type == OP_UTF8_PERIOD)) { unsigned char c = re_string_byte_at (input, str_idx), d; if (__glibc_likely (c < 0xc2)) return 0; if (str_idx + 2 > input->len) return 0; d = re_string_byte_at (input, str_idx + 1); if (c < 0xe0) return (d < 0x80 || d > 0xbf) ? 0 : 2; else if (c < 0xf0) { char_len = 3; if (c == 0xe0 && d < 0xa0) return 0; } else if (c < 0xf8) { char_len = 4; if (c == 0xf0 && d < 0x90) return 0; } else if (c < 0xfc) { char_len = 5; if (c == 0xf8 && d < 0x88) return 0; } else if (c < 0xfe) { char_len = 6; if (c == 0xfc && d < 0x84) return 0; } else return 0; if (str_idx + char_len > input->len) return 0; for (i = 1; i < char_len; ++i) { d = re_string_byte_at (input, str_idx + i); if (d < 0x80 || d > 0xbf) return 0; } return char_len; } char_len = re_string_char_size_at (input, str_idx); if (node->type == OP_PERIOD) { if (char_len <= 1) return 0; /* FIXME: I don't think this if is needed, as both '\n' and '\0' are char_len == 1. */ /* '.' accepts any one character except the following two cases. */ if ((!(dfa->syntax & RE_DOT_NEWLINE) && re_string_byte_at (input, str_idx) == '\n') || ((dfa->syntax & RE_DOT_NOT_NULL) && re_string_byte_at (input, str_idx) == '\0')) return 0; return char_len; } elem_len = re_string_elem_size_at (input, str_idx); if ((elem_len <= 1 && char_len <= 1) || char_len == 0) return 0; if (node->type == COMPLEX_BRACKET) { const re_charset_t *cset = node->opr.mbcset; #ifdef _LIBC const unsigned char *pin = ((const unsigned char *) re_string_get_buffer (input) + str_idx); Idx j; uint32_t nrules; #endif int match_len = 0; wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars) ? re_string_wchar_at (input, str_idx) : 0); /* match with multibyte character? */ for (i = 0; i < cset->nmbchars; ++i) if (wc == cset->mbchars[i]) { match_len = char_len; goto check_node_accept_bytes_match; } /* match with character_class? */ for (i = 0; i < cset->nchar_classes; ++i) { wctype_t wt = cset->char_classes[i]; if (__iswctype (wc, wt)) { match_len = char_len; goto check_node_accept_bytes_match; } } #ifdef _LIBC nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { unsigned int in_collseq = 0; const int32_t *table, *indirect; const unsigned char *weights, *extra; const char *collseqwc; /* match with collating_symbol? */ if (cset->ncoll_syms) extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); for (i = 0; i < cset->ncoll_syms; ++i) { const unsigned char *coll_sym = extra + cset->coll_syms[i]; /* Compare the length of input collating element and the length of current collating element. */ if (*coll_sym != elem_len) continue; /* Compare each bytes. */ for (j = 0; j < *coll_sym; j++) if (pin[j] != coll_sym[1 + j]) break; if (j == *coll_sym) { /* Match if every bytes is equal. */ match_len = j; goto check_node_accept_bytes_match; } } if (cset->nranges) { if (elem_len <= char_len) { collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); in_collseq = __collseq_table_lookup (collseqwc, wc); } else in_collseq = find_collation_sequence_value (pin, elem_len); } /* match with range expression? */ /* FIXME: Implement rational ranges here, too. */ for (i = 0; i < cset->nranges; ++i) if (cset->range_starts[i] <= in_collseq && in_collseq <= cset->range_ends[i]) { match_len = elem_len; goto check_node_accept_bytes_match; } /* match with equivalence_class? */ if (cset->nequiv_classes) { const unsigned char *cp = pin; table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); int32_t idx = findidx (table, indirect, extra, &cp, elem_len); int32_t rule = idx >> 24; idx &= 0xffffff; if (idx > 0) { size_t weight_len = weights[idx]; for (i = 0; i < cset->nequiv_classes; ++i) { int32_t equiv_class_idx = cset->equiv_classes[i]; int32_t equiv_class_rule = equiv_class_idx >> 24; equiv_class_idx &= 0xffffff; if (weights[equiv_class_idx] == weight_len && equiv_class_rule == rule && memcmp (weights + idx + 1, weights + equiv_class_idx + 1, weight_len) == 0) { match_len = elem_len; goto check_node_accept_bytes_match; } } } } } else #endif /* _LIBC */ { /* match with range expression? */ for (i = 0; i < cset->nranges; ++i) { if (cset->range_starts[i] <= wc && wc <= cset->range_ends[i]) { match_len = char_len; goto check_node_accept_bytes_match; } } } check_node_accept_bytes_match: if (!cset->non_match) return match_len; else { if (match_len > 0) return 0; else return (elem_len > char_len) ? elem_len : char_len; } } return 0; } #ifdef _LIBC static unsigned int find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len) { uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules == 0) { if (mbs_len == 1) { /* No valid character. Match it as a single byte character. */ const unsigned char *collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); return collseq[mbs[0]]; } return UINT_MAX; } else { int32_t idx; const unsigned char *extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); int32_t extrasize = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB + 1) - extra; for (idx = 0; idx < extrasize;) { int mbs_cnt; bool found = false; int32_t elem_mbs_len; /* Skip the name of collating element name. */ idx = idx + extra[idx] + 1; elem_mbs_len = extra[idx++]; if (mbs_len == elem_mbs_len) { for (mbs_cnt = 0; mbs_cnt < elem_mbs_len; ++mbs_cnt) if (extra[idx + mbs_cnt] != mbs[mbs_cnt]) break; if (mbs_cnt == elem_mbs_len) /* Found the entry. */ found = true; } /* Skip the byte sequence of the collating element. */ idx += elem_mbs_len; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; /* Skip the collation sequence value. */ idx += sizeof (uint32_t); /* Skip the wide char sequence of the collating element. */ idx = idx + sizeof (uint32_t) * (*(int32_t *) (extra + idx) + 1); /* If we found the entry, return the sequence value. */ if (found) return *(uint32_t *) (extra + idx); /* Skip the collation sequence value. */ idx += sizeof (uint32_t); } return UINT_MAX; } } #endif /* _LIBC */ /* Check whether the node accepts the byte which is IDX-th byte of the INPUT. */ static bool check_node_accept (const re_match_context_t *mctx, const re_token_t *node, Idx idx) { unsigned char ch; ch = re_string_byte_at (&mctx->input, idx); switch (node->type) { case CHARACTER: if (node->opr.c != ch) return false; break; case SIMPLE_BRACKET: if (!bitset_contain (node->opr.sbcset, ch)) return false; break; case OP_UTF8_PERIOD: if (ch >= ASCII_CHARS) return false; FALLTHROUGH; case OP_PERIOD: if ((ch == '\n' && !(mctx->dfa->syntax & RE_DOT_NEWLINE)) || (ch == '\0' && (mctx->dfa->syntax & RE_DOT_NOT_NULL))) return false; break; default: return false; } if (node->constraint) { /* The node has constraints. Check whether the current context satisfies the constraints. */ unsigned int context = re_string_context_at (&mctx->input, idx, mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) return false; } return true; } /* Extend the buffers, if the buffers have run out. */ static reg_errcode_t __attribute_warn_unused_result__ extend_buffers (re_match_context_t *mctx, int min_len) { reg_errcode_t ret; re_string_t *pstr = &mctx->input; /* Avoid overflow. */ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) / 2 <= pstr->bufs_len)) return REG_ESPACE; /* Double the lengths of the buffers, but allocate at least MIN_LEN. */ ret = re_string_realloc_buffers (pstr, MAX (min_len, MIN (pstr->len, pstr->bufs_len * 2))); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; if (mctx->state_log != NULL) { /* And double the length of state_log. */ /* XXX We have no indication of the size of this buffer. If this allocation fail we have no indication that the state_log array does not have the right size. */ re_dfastate_t **new_array = re_realloc (mctx->state_log, re_dfastate_t *, pstr->bufs_len + 1); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; mctx->state_log = new_array; } /* Then reconstruct the buffers. */ if (pstr->icase) { if (pstr->mb_cur_max > 1) { ret = build_wcs_upper_buffer (pstr); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } else build_upper_buffer (pstr); } else { if (pstr->mb_cur_max > 1) build_wcs_buffer (pstr); else { if (pstr->trans != NULL) re_string_translate_buffer (pstr); } } return REG_NOERROR; } /* Functions for matching context. */ /* Initialize MCTX. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_init (re_match_context_t *mctx, int eflags, Idx n) { mctx->eflags = eflags; mctx->match_last = -1; if (n > 0) { /* Avoid overflow. */ size_t max_object_size = MAX (sizeof (struct re_backref_cache_entry), sizeof (re_sub_match_top_t *)); if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < n)) return REG_ESPACE; mctx->bkref_ents = re_malloc (struct re_backref_cache_entry, n); mctx->sub_tops = re_malloc (re_sub_match_top_t *, n); if (__glibc_unlikely (mctx->bkref_ents == NULL || mctx->sub_tops == NULL)) return REG_ESPACE; } /* Already zero-ed by the caller. else mctx->bkref_ents = NULL; mctx->nbkref_ents = 0; mctx->nsub_tops = 0; */ mctx->abkref_ents = n; mctx->max_mb_elem_len = 1; mctx->asub_tops = n; return REG_NOERROR; } /* Clean the entries which depend on the current input in MCTX. This function must be invoked when the matcher changes the start index of the input, or changes the input string. */ static void match_ctx_clean (re_match_context_t *mctx) { Idx st_idx; for (st_idx = 0; st_idx < mctx->nsub_tops; ++st_idx) { Idx sl_idx; re_sub_match_top_t *top = mctx->sub_tops[st_idx]; for (sl_idx = 0; sl_idx < top->nlasts; ++sl_idx) { re_sub_match_last_t *last = top->lasts[sl_idx]; re_free (last->path.array); re_free (last); } re_free (top->lasts); if (top->path) { re_free (top->path->array); re_free (top->path); } re_free (top); } mctx->nsub_tops = 0; mctx->nbkref_ents = 0; } /* Free all the memory associated with MCTX. */ static void match_ctx_free (re_match_context_t *mctx) { /* First, free all the memory associated with MCTX->SUB_TOPS. */ match_ctx_clean (mctx); re_free (mctx->sub_tops); re_free (mctx->bkref_ents); } /* Add a new backreference entry to MCTX. Note that we assume that caller never call this function with duplicate entry, and call with STR_IDX which isn't smaller than any existing entry. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_add_entry (re_match_context_t *mctx, Idx node, Idx str_idx, Idx from, Idx to) { if (mctx->nbkref_ents >= mctx->abkref_ents) { struct re_backref_cache_entry* new_entry; new_entry = re_realloc (mctx->bkref_ents, struct re_backref_cache_entry, mctx->abkref_ents * 2); if (__glibc_unlikely (new_entry == NULL)) { re_free (mctx->bkref_ents); return REG_ESPACE; } mctx->bkref_ents = new_entry; memset (mctx->bkref_ents + mctx->nbkref_ents, '\0', sizeof (struct re_backref_cache_entry) * mctx->abkref_ents); mctx->abkref_ents *= 2; } if (mctx->nbkref_ents > 0 && mctx->bkref_ents[mctx->nbkref_ents - 1].str_idx == str_idx) mctx->bkref_ents[mctx->nbkref_ents - 1].more = 1; mctx->bkref_ents[mctx->nbkref_ents].node = node; mctx->bkref_ents[mctx->nbkref_ents].str_idx = str_idx; mctx->bkref_ents[mctx->nbkref_ents].subexp_from = from; mctx->bkref_ents[mctx->nbkref_ents].subexp_to = to; /* This is a cache that saves negative results of check_dst_limits_calc_pos. If bit N is clear, means that this entry won't epsilon-transition to an OP_OPEN_SUBEXP or OP_CLOSE_SUBEXP for the N+1-th subexpression. If it is set, check_dst_limits_calc_pos_1 will recurse and try to find one such node. A backreference does not epsilon-transition unless it is empty, so set to all zeros if FROM != TO. */ mctx->bkref_ents[mctx->nbkref_ents].eps_reachable_subexps_map = (from == to ? -1 : 0); mctx->bkref_ents[mctx->nbkref_ents++].more = 0; if (mctx->max_mb_elem_len < to - from) mctx->max_mb_elem_len = to - from; return REG_NOERROR; } /* Return the first entry with the same str_idx, or -1 if none is found. Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX. */ static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx) { Idx left, right, mid, last; last = right = mctx->nbkref_ents; for (left = 0; left < right;) { mid = (left + right) / 2; if (mctx->bkref_ents[mid].str_idx < str_idx) left = mid + 1; else right = mid; } if (left < last && mctx->bkref_ents[left].str_idx == str_idx) return left; else return -1; } /* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches at STR_IDX. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx) { DEBUG_ASSERT (mctx->sub_tops != NULL); DEBUG_ASSERT (mctx->asub_tops > 0); if (__glibc_unlikely (mctx->nsub_tops == mctx->asub_tops)) { Idx new_asub_tops = mctx->asub_tops * 2; re_sub_match_top_t **new_array = re_realloc (mctx->sub_tops, re_sub_match_top_t *, new_asub_tops); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; mctx->sub_tops = new_array; mctx->asub_tops = new_asub_tops; } mctx->sub_tops[mctx->nsub_tops] = calloc (1, sizeof (re_sub_match_top_t)); if (__glibc_unlikely (mctx->sub_tops[mctx->nsub_tops] == NULL)) return REG_ESPACE; mctx->sub_tops[mctx->nsub_tops]->node = node; mctx->sub_tops[mctx->nsub_tops++]->str_idx = str_idx; return REG_NOERROR; } /* Register the node NODE, whose type is OP_CLOSE_SUBEXP, and which matches at STR_IDX, whose corresponding OP_OPEN_SUBEXP is SUB_TOP. Return the new entry if successful, NULL if memory is exhausted. */ static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx) { re_sub_match_last_t *new_entry; if (__glibc_unlikely (subtop->nlasts == subtop->alasts)) { Idx new_alasts = 2 * subtop->alasts + 1; re_sub_match_last_t **new_array = re_realloc (subtop->lasts, re_sub_match_last_t *, new_alasts); if (__glibc_unlikely (new_array == NULL)) return NULL; subtop->lasts = new_array; subtop->alasts = new_alasts; } new_entry = calloc (1, sizeof (re_sub_match_last_t)); if (__glibc_likely (new_entry != NULL)) { subtop->lasts[subtop->nlasts] = new_entry; new_entry->node = node; new_entry->str_idx = str_idx; ++subtop->nlasts; } return new_entry; } static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx) { sctx->sifted_states = sifted_sts; sctx->limited_states = limited_sts; sctx->last_node = last_node; sctx->last_str_idx = last_str_idx; re_node_set_init_empty (&sctx->limits); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/asnprintf.c����������������������������������������������������������0000644�0001750�0001750�00000002110�14557510504�014404� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "vasnprintf.h" #include <stdarg.h> char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; char *result; va_start (args, format); result = vasnprintf (resultbuf, lengthp, format, args); va_end (args); return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/printf-args.c��������������������������������������������������������0000644�0001750�0001750�00000025001�14557510505�014641� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be defined. STATIC Set to 'static' to declare the function static. */ #ifndef PRINTF_FETCHARGS # include <config.h> #endif /* Specification. */ #ifndef PRINTF_FETCHARGS # include "printf-args.h" #endif /* Get INT_WIDTH. */ #include <limits.h> #ifdef STATIC STATIC #endif int PRINTF_FETCHARGS (va_list args, arguments *a) { size_t i; argument *ap; for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) switch (ap->type) { case TYPE_SCHAR: ap->a.a_schar = va_arg (args, /*signed char*/ int); break; case TYPE_UCHAR: ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); break; case TYPE_SHORT: ap->a.a_short = va_arg (args, /*short*/ int); break; case TYPE_USHORT: ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); break; case TYPE_INT: ap->a.a_int = va_arg (args, int); break; case TYPE_UINT: ap->a.a_uint = va_arg (args, unsigned int); break; case TYPE_LONGINT: ap->a.a_longint = va_arg (args, long int); break; case TYPE_ULONGINT: ap->a.a_ulongint = va_arg (args, unsigned long int); break; case TYPE_LONGLONGINT: ap->a.a_longlongint = va_arg (args, long long int); break; case TYPE_ULONGLONGINT: ap->a.a_ulonglongint = va_arg (args, unsigned long long int); break; case TYPE_INT8_T: #if INT8_WIDTH < INT_WIDTH ap->a.a_int8_t = va_arg (args, /* int8_t */ int); #else ap->a.a_int8_t = va_arg (args, int8_t); #endif break; case TYPE_UINT8_T: #if UINT8_WIDTH < INT_WIDTH ap->a.a_uint8_t = va_arg (args, /* uint8_t */ int); #else ap->a.a_uint8_t = va_arg (args, uint8_t); #endif break; case TYPE_INT16_T: #if INT16_WIDTH < INT_WIDTH ap->a.a_int16_t = va_arg (args, /* int16_t */ int); #else ap->a.a_int16_t = va_arg (args, int16_t); #endif break; case TYPE_UINT16_T: #if UINT16_WIDTH < INT_WIDTH ap->a.a_uint16_t = va_arg (args, /* uint16_t */ int); #else ap->a.a_uint16_t = va_arg (args, uint16_t); #endif break; case TYPE_INT32_T: #if INT32_WIDTH < INT_WIDTH ap->a.a_int32_t = va_arg (args, /* int32_t */ int); #else ap->a.a_int32_t = va_arg (args, int32_t); #endif break; case TYPE_UINT32_T: #if UINT32_WIDTH < INT_WIDTH ap->a.a_uint32_t = va_arg (args, /* uint32_t */ int); #else ap->a.a_uint32_t = va_arg (args, uint32_t); #endif break; case TYPE_INT64_T: ap->a.a_int64_t = va_arg (args, int64_t); break; case TYPE_UINT64_T: ap->a.a_uint64_t = va_arg (args, uint64_t); break; case TYPE_INT_FAST8_T: #if INT_FAST8_WIDTH < INT_WIDTH ap->a.a_int_fast8_t = va_arg (args, /* int_fast8_t */ int); #else ap->a.a_int_fast8_t = va_arg (args, int_fast8_t); #endif break; case TYPE_UINT_FAST8_T: #if UINT_FAST8_WIDTH < INT_WIDTH ap->a.a_uint_fast8_t = va_arg (args, /* uint_fast8_t */ int); #else ap->a.a_uint_fast8_t = va_arg (args, uint_fast8_t); #endif break; case TYPE_INT_FAST16_T: #if INT_FAST16_WIDTH < INT_WIDTH ap->a.a_int_fast16_t = va_arg (args, /* int_fast16_t */ int); #else ap->a.a_int_fast16_t = va_arg (args, int_fast16_t); #endif break; case TYPE_UINT_FAST16_T: #if UINT_FAST16_WIDTH < INT_WIDTH ap->a.a_uint_fast16_t = va_arg (args, /* uint_fast16_t */ int); #else ap->a.a_uint_fast16_t = va_arg (args, uint_fast16_t); #endif break; case TYPE_INT_FAST32_T: #if INT_FAST32_WIDTH < INT_WIDTH ap->a.a_int_fast32_t = va_arg (args, /* int_fast32_t */ int); #else ap->a.a_int_fast32_t = va_arg (args, int_fast32_t); #endif break; case TYPE_UINT_FAST32_T: #if UINT_FAST32_WIDTH < INT_WIDTH ap->a.a_uint_fast32_t = va_arg (args, /* uint_fast32_t */ int); #else ap->a.a_uint_fast32_t = va_arg (args, uint_fast32_t); #endif break; case TYPE_INT_FAST64_T: ap->a.a_int_fast64_t = va_arg (args, int_fast64_t); break; case TYPE_UINT_FAST64_T: ap->a.a_uint_fast64_t = va_arg (args, uint_fast64_t); break; case TYPE_DOUBLE: ap->a.a_double = va_arg (args, double); break; case TYPE_LONGDOUBLE: ap->a.a_longdouble = va_arg (args, long double); break; case TYPE_CHAR: ap->a.a_char = va_arg (args, int); break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by default argument promotions", this is not the case in mingw32, where wint_t is 'unsigned short'. */ ap->a.a_wide_char = (sizeof (wint_t) < sizeof (int) ? (wint_t) va_arg (args, int) : va_arg (args, wint_t)); break; #endif case TYPE_STRING: ap->a.a_string = va_arg (args, const char *); /* A null pointer is an invalid argument for "%s", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_string == NULL) ap->a.a_string = "(NULL)"; break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: ap->a.a_wide_string = va_arg (args, const wchar_t *); /* A null pointer is an invalid argument for "%ls", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_wide_string == NULL) { static const wchar_t wide_null_string[] = { (wchar_t)'(', (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', (wchar_t)')', (wchar_t)0 }; ap->a.a_wide_string = wide_null_string; } break; #endif case TYPE_POINTER: ap->a.a_pointer = va_arg (args, void *); break; case TYPE_COUNT_SCHAR_POINTER: ap->a.a_count_schar_pointer = va_arg (args, signed char *); break; case TYPE_COUNT_SHORT_POINTER: ap->a.a_count_short_pointer = va_arg (args, short *); break; case TYPE_COUNT_INT_POINTER: ap->a.a_count_int_pointer = va_arg (args, int *); break; case TYPE_COUNT_LONGINT_POINTER: ap->a.a_count_longint_pointer = va_arg (args, long int *); break; case TYPE_COUNT_LONGLONGINT_POINTER: ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); break; case TYPE_COUNT_INT8_T_POINTER: ap->a.a_count_int8_t_pointer = va_arg (args, int8_t *); break; case TYPE_COUNT_INT16_T_POINTER: ap->a.a_count_int16_t_pointer = va_arg (args, int16_t *); break; case TYPE_COUNT_INT32_T_POINTER: ap->a.a_count_int32_t_pointer = va_arg (args, int32_t *); break; case TYPE_COUNT_INT64_T_POINTER: ap->a.a_count_int64_t_pointer = va_arg (args, int64_t *); break; case TYPE_COUNT_INT_FAST8_T_POINTER: ap->a.a_count_int_fast8_t_pointer = va_arg (args, int_fast8_t *); break; case TYPE_COUNT_INT_FAST16_T_POINTER: ap->a.a_count_int_fast16_t_pointer = va_arg (args, int_fast16_t *); break; case TYPE_COUNT_INT_FAST32_T_POINTER: ap->a.a_count_int_fast32_t_pointer = va_arg (args, int_fast32_t *); break; case TYPE_COUNT_INT_FAST64_T_POINTER: ap->a.a_count_int_fast64_t_pointer = va_arg (args, int_fast64_t *); break; #if ENABLE_UNISTDIO /* The unistdio extensions. */ case TYPE_U8_STRING: ap->a.a_u8_string = va_arg (args, const uint8_t *); /* A null pointer is an invalid argument for "%U", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u8_string == NULL) { static const uint8_t u8_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u8_string = u8_null_string; } break; case TYPE_U16_STRING: ap->a.a_u16_string = va_arg (args, const uint16_t *); /* A null pointer is an invalid argument for "%lU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u16_string == NULL) { static const uint16_t u16_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u16_string = u16_null_string; } break; case TYPE_U32_STRING: ap->a.a_u32_string = va_arg (args, const uint32_t *); /* A null pointer is an invalid argument for "%llU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u32_string == NULL) { static const uint32_t u32_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u32_string = u32_null_string; } break; #endif default: /* Unknown type. */ return -1; } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/printf-parse.c�������������������������������������������������������0000644�0001750�0001750�00000062641�14557510505�015032� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999-2000, 2002-2003, 2006-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* This file can be parametrized with the following macros: CHAR_T The element type of the format string. CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. DIRECTIVE Structure denoting a format directive. Depends on CHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on CHAR_T. PRINTF_PARSE Function that parses a format string. Depends on CHAR_T. STATIC Set to 'static' to declare the function static. ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ #ifndef PRINTF_PARSE # include <config.h> #endif /* Specification. */ #ifndef PRINTF_PARSE # include "printf-parse.h" #endif /* Default parameters. */ #ifndef PRINTF_PARSE # define PRINTF_PARSE printf_parse # define CHAR_T char # define DIRECTIVE char_directive # define DIRECTIVES char_directives #endif /* Get size_t, NULL. */ #include <stddef.h> /* Get intmax_t. */ #include <stdint.h> /* malloc(), realloc(), free(). */ #include <stdlib.h> /* memcpy(). */ #include <string.h> /* errno. */ #include <errno.h> /* Checked size_t computations. */ #include "xsize.h" #if CHAR_T_ONLY_ASCII /* c_isascii(). */ # include "c-ctype.h" #endif #ifdef STATIC STATIC #endif int PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) { const CHAR_T *cp = format; /* pointer into format */ size_t arg_posn = 0; /* number of regular arguments consumed */ size_t d_allocated; /* allocated elements of d->dir */ size_t a_allocated; /* allocated elements of a->arg */ size_t max_width_length = 0; size_t max_precision_length = 0; d->count = 0; d_allocated = N_DIRECT_ALLOC_DIRECTIVES; d->dir = d->direct_alloc_dir; a->count = 0; a_allocated = N_DIRECT_ALLOC_ARGUMENTS; a->arg = a->direct_alloc_arg; #define REGISTER_ARG(_index_,_type_) \ { \ size_t n = (_index_); \ if (n >= a_allocated) \ { \ size_t memory_size; \ argument *memory; \ \ a_allocated = xtimes (a_allocated, 2); \ if (a_allocated <= n) \ a_allocated = xsum (n, 1); \ memory_size = xtimes (a_allocated, sizeof (argument)); \ if (size_overflow_p (memory_size)) \ /* Overflow, would lead to out of memory. */ \ goto out_of_memory; \ memory = (argument *) (a->arg != a->direct_alloc_arg \ ? realloc (a->arg, memory_size) \ : malloc (memory_size)); \ if (memory == NULL) \ /* Out of memory. */ \ goto out_of_memory; \ if (a->arg == a->direct_alloc_arg) \ memcpy (memory, a->arg, a->count * sizeof (argument)); \ a->arg = memory; \ } \ while (a->count <= n) \ a->arg[a->count++].type = TYPE_NONE; \ if (a->arg[n].type == TYPE_NONE) \ a->arg[n].type = (_type_); \ else if (a->arg[n].type != (_type_)) \ /* Ambiguous type for positional argument. */ \ goto error; \ } while (*cp != '\0') { CHAR_T c = *cp++; if (c == '%') { size_t arg_index = ARG_NONE; DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ /* Initialize the next directive. */ dp->dir_start = cp - 1; dp->flags = 0; dp->width_start = NULL; dp->width_end = NULL; dp->width_arg_index = ARG_NONE; dp->precision_start = NULL; dp->precision_end = NULL; dp->precision_arg_index = ARG_NONE; dp->arg_index = ARG_NONE; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; arg_index = n - 1; cp = np + 1; } } /* Read the flags. */ for (;;) { if (*cp == '\'') { dp->flags |= FLAG_GROUP; cp++; } else if (*cp == '-') { dp->flags |= FLAG_LEFT; cp++; } else if (*cp == '+') { dp->flags |= FLAG_SHOWSIGN; cp++; } else if (*cp == ' ') { dp->flags |= FLAG_SPACE; cp++; } else if (*cp == '#') { dp->flags |= FLAG_ALT; cp++; } else if (*cp == '0') { dp->flags |= FLAG_ZERO; cp++; } #if __GLIBC__ >= 2 && !defined __UCLIBC__ else if (*cp == 'I') { dp->flags |= FLAG_LOCALIZED; cp++; } #endif else break; } /* Parse the field width. */ if (*cp == '*') { dp->width_start = cp; cp++; dp->width_end = cp; if (max_width_length < 1) max_width_length = 1; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->width_arg_index = n - 1; cp = np + 1; } } if (dp->width_arg_index == ARG_NONE) { dp->width_arg_index = arg_posn++; if (dp->width_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->width_arg_index, TYPE_INT); } else if (*cp >= '0' && *cp <= '9') { size_t width_length; dp->width_start = cp; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->width_end = cp; width_length = dp->width_end - dp->width_start; if (max_width_length < width_length) max_width_length = width_length; } /* Parse the precision. */ if (*cp == '.') { cp++; if (*cp == '*') { dp->precision_start = cp - 1; cp++; dp->precision_end = cp; if (max_precision_length < 2) max_precision_length = 2; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->precision_arg_index = n - 1; cp = np + 1; } } if (dp->precision_arg_index == ARG_NONE) { dp->precision_arg_index = arg_posn++; if (dp->precision_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->precision_arg_index, TYPE_INT); } else { size_t precision_length; dp->precision_start = cp - 1; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->precision_end = cp; precision_length = dp->precision_end - dp->precision_start; if (max_precision_length < precision_length) max_precision_length = precision_length; } } { arg_type type; /* Parse argument type/size specifiers. */ /* Relevant for the conversion characters d, i. */ arg_type signed_type = TYPE_INT; /* Relevant for the conversion characters b, o, u, x, X. */ arg_type unsigned_type = TYPE_UINT; /* Relevant for the conversion characters n. */ arg_type pointer_type = TYPE_COUNT_INT_POINTER; /* Relevant for the conversion characters a, A, e, E, f, F, g, G. */ arg_type floatingpoint_type = TYPE_DOUBLE; if (*cp == 'h') { if (cp[1] == 'h') { signed_type = TYPE_SCHAR; unsigned_type = TYPE_UCHAR; pointer_type = TYPE_COUNT_SCHAR_POINTER; cp += 2; } else { signed_type = TYPE_SHORT; unsigned_type = TYPE_USHORT; pointer_type = TYPE_COUNT_SHORT_POINTER; cp++; } } else if (*cp == 'l') { if (cp[1] == 'l') { signed_type = TYPE_LONGLONGINT; unsigned_type = TYPE_ULONGLONGINT; pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; /* For backward compatibility only. */ floatingpoint_type = TYPE_LONGDOUBLE; cp += 2; } else { signed_type = TYPE_LONGINT; unsigned_type = TYPE_ULONGINT; pointer_type = TYPE_COUNT_LONGINT_POINTER; cp++; } } else if (*cp == 'j') { if (sizeof (intmax_t) > sizeof (long)) { /* intmax_t = long long */ signed_type = TYPE_LONGLONGINT; unsigned_type = TYPE_ULONGLONGINT; pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; /* For backward compatibility only. */ floatingpoint_type = TYPE_LONGDOUBLE; } else if (sizeof (intmax_t) > sizeof (int)) { /* intmax_t = long */ signed_type = TYPE_LONGINT; unsigned_type = TYPE_ULONGINT; pointer_type = TYPE_COUNT_LONGINT_POINTER; } cp++; } else if (*cp == 'z' || *cp == 'Z') { /* 'z' is standardized in ISO C 99, but glibc uses 'Z' because the warning facility in gcc-2.95.2 understands only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ if (sizeof (size_t) > sizeof (long)) { /* size_t = unsigned long long */ signed_type = TYPE_LONGLONGINT; unsigned_type = TYPE_ULONGLONGINT; pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; /* For backward compatibility only. */ floatingpoint_type = TYPE_LONGDOUBLE; } else if (sizeof (size_t) > sizeof (int)) { /* size_t = unsigned long */ signed_type = TYPE_LONGINT; unsigned_type = TYPE_ULONGINT; pointer_type = TYPE_COUNT_LONGINT_POINTER; } cp++; } else if (*cp == 't') { if (sizeof (ptrdiff_t) > sizeof (long)) { /* ptrdiff_t = long long */ signed_type = TYPE_LONGLONGINT; unsigned_type = TYPE_ULONGLONGINT; pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; /* For backward compatibility only. */ floatingpoint_type = TYPE_LONGDOUBLE; } else if (sizeof (ptrdiff_t) > sizeof (int)) { /* ptrdiff_t = long */ signed_type = TYPE_LONGINT; unsigned_type = TYPE_ULONGINT; pointer_type = TYPE_COUNT_LONGINT_POINTER; } cp++; } else if (*cp == 'w') { /* wN and wfN are standardized in ISO C 23. */ if (cp[1] == 'f') { if (cp[2] == '8') { signed_type = TYPE_INT_FAST8_T; unsigned_type = TYPE_UINT_FAST8_T; pointer_type = TYPE_COUNT_INT_FAST8_T_POINTER; cp += 3; } else if (cp[2] == '1' && cp[3] == '6') { signed_type = TYPE_INT_FAST16_T; unsigned_type = TYPE_UINT_FAST16_T; pointer_type = TYPE_COUNT_INT_FAST16_T_POINTER; cp += 4; } else if (cp[2] == '3' && cp[3] == '2') { signed_type = TYPE_INT_FAST32_T; unsigned_type = TYPE_UINT_FAST32_T; pointer_type = TYPE_COUNT_INT_FAST32_T_POINTER; cp += 4; } else if (cp[2] == '6' && cp[3] == '4') { signed_type = TYPE_INT_FAST64_T; unsigned_type = TYPE_UINT_FAST64_T; pointer_type = TYPE_COUNT_INT_FAST64_T_POINTER; cp += 4; } } else { if (cp[1] == '8') { signed_type = TYPE_INT8_T; unsigned_type = TYPE_UINT8_T; pointer_type = TYPE_COUNT_INT8_T_POINTER; cp += 2; } else if (cp[1] == '1' && cp[2] == '6') { signed_type = TYPE_INT16_T; unsigned_type = TYPE_UINT16_T; pointer_type = TYPE_COUNT_INT16_T_POINTER; cp += 3; } else if (cp[1] == '3' && cp[2] == '2') { signed_type = TYPE_INT32_T; unsigned_type = TYPE_UINT32_T; pointer_type = TYPE_COUNT_INT32_T_POINTER; cp += 3; } else if (cp[1] == '6' && cp[2] == '4') { signed_type = TYPE_INT64_T; unsigned_type = TYPE_UINT64_T; pointer_type = TYPE_COUNT_INT64_T_POINTER; cp += 3; } } } else if (*cp == 'L') { signed_type = TYPE_LONGLONGINT; unsigned_type = TYPE_ULONGLONGINT; pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; floatingpoint_type = TYPE_LONGDOUBLE; cp++; } #if defined __APPLE__ && defined __MACH__ /* On Mac OS X 10.3, PRIdMAX is defined as "qd". We cannot change it to "lld" because PRIdMAX must also be understood by the system's printf routines. */ else if (*cp == 'q') { if (64 / 8 > sizeof (long)) { /* int64_t = long long */ signed_type = TYPE_LONGLONGINT; unsigned_type = TYPE_ULONGLONGINT; pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; /* For backward compatibility only. */ floatingpoint_type = TYPE_LONGDOUBLE; } else { /* int64_t = long */ signed_type = TYPE_LONGINT; unsigned_type = TYPE_ULONGINT; pointer_type = TYPE_COUNT_LONGINT_POINTER; } cp++; } #endif #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, PRIdMAX is defined as "I64d". We cannot change it to "lld" because PRIdMAX must also be understood by the system's printf routines. */ else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') { if (64 / 8 > sizeof (long)) { /* __int64_t = long long */ signed_type = TYPE_LONGLONGINT; unsigned_type = TYPE_ULONGLONGINT; pointer_type = TYPE_COUNT_LONGLONGINT_POINTER; /* For backward compatibility only. */ floatingpoint_type = TYPE_LONGDOUBLE; } else { /* __int64_t = long */ signed_type = TYPE_LONGINT; unsigned_type = TYPE_ULONGINT; pointer_type = TYPE_COUNT_LONGINT_POINTER; } cp += 3; } #endif /* Read the conversion character. */ c = *cp++; switch (c) { case 'd': case 'i': type = signed_type; break; case 'b': case 'o': case 'u': case 'x': case 'X': #if SUPPORT_GNU_PRINTF_DIRECTIVES \ || (__GLIBC__ + (__GLIBC_MINOR__ >= 35) > 2) case 'B': #endif type = unsigned_type; break; case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': type = floatingpoint_type; break; case 'c': if (signed_type == TYPE_LONGINT /* For backward compatibility only. */ || signed_type == TYPE_LONGLONGINT) #if HAVE_WINT_T type = TYPE_WIDE_CHAR; #else goto error; #endif else type = TYPE_CHAR; break; #if HAVE_WINT_T case 'C': type = TYPE_WIDE_CHAR; c = 'c'; break; #endif case 's': if (signed_type == TYPE_LONGINT /* For backward compatibility only. */ || signed_type == TYPE_LONGLONGINT) #if HAVE_WCHAR_T type = TYPE_WIDE_STRING; #else goto error; #endif else type = TYPE_STRING; break; #if HAVE_WCHAR_T case 'S': type = TYPE_WIDE_STRING; c = 's'; break; #endif case 'p': type = TYPE_POINTER; break; case 'n': type = pointer_type; break; #if ENABLE_UNISTDIO /* The unistdio extensions. */ case 'U': if (signed_type == TYPE_LONGLONGINT) type = TYPE_U32_STRING; else if (signed_type == TYPE_LONGINT) type = TYPE_U16_STRING; else type = TYPE_U8_STRING; break; #endif case '%': type = TYPE_NONE; break; default: /* Unknown conversion character. */ goto error; } if (type != TYPE_NONE) { dp->arg_index = arg_index; if (dp->arg_index == ARG_NONE) { dp->arg_index = arg_posn++; if (dp->arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->arg_index, type); } dp->conversion = c; dp->dir_end = cp; } d->count++; if (d->count >= d_allocated) { size_t memory_size; DIRECTIVE *memory; d_allocated = xtimes (d_allocated, 2); memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ goto out_of_memory; memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir ? realloc (d->dir, memory_size) : malloc (memory_size)); if (memory == NULL) /* Out of memory. */ goto out_of_memory; if (d->dir == d->direct_alloc_dir) memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE)); d->dir = memory; } } #if CHAR_T_ONLY_ASCII else if (!c_isascii (c)) { /* Non-ASCII character. Not supported. */ goto error; } #endif } d->dir[d->count].dir_start = cp; d->max_width_length = max_width_length; d->max_precision_length = max_precision_length; return 0; error: if (a->arg != a->direct_alloc_arg) free (a->arg); if (d->dir != d->direct_alloc_dir) free (d->dir); errno = EINVAL; return -1; out_of_memory: if (a->arg != a->direct_alloc_arg) free (a->arg); if (d->dir != d->direct_alloc_dir) free (d->dir); errno = ENOMEM; return -1; } #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef CHAR_T_ONLY_ASCII #undef CHAR_T �����������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/vasnprintf.c���������������������������������������������������������0000644�0001750�0001750�00001043317�14557510505�014612� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vsprintf with automatic memory allocation. Copyright (C) 1999, 2002-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* This file can be parametrized with the following macros: VASNPRINTF The name of the function being defined. FCHAR_T The element type of the format string. DCHAR_T The element type of the destination (result) string. FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. MUST be set if FCHAR_T and DCHAR_T are not the same type. DIRECTIVE Structure denoting a format directive. Depends on FCHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on FCHAR_T. PRINTF_PARSE Function that parses a format string. Depends on FCHAR_T. DCHAR_CPY memcpy like function for DCHAR_T[] arrays. DCHAR_SET memset like function for DCHAR_T[] arrays. DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. SNPRINTF The system's snprintf (or similar) function. This may be either snprintf or swprintf. TCHAR_T The element type of the argument and result string of the said SNPRINTF function. This may be either char or wchar_t. The code exploits that sizeof (TCHAR_T) | sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. ENABLE_WCHAR_FALLBACK Set to 1 to avoid EILSEQ during conversion of wide characters (wchar_t) and wide character strings (wchar_t[]) to multibyte sequences. The fallback is the hexadecimal escape syntax (\unnnn or \Unnnnnnnn) or, if wchar_t is not Unicode encoded, \wnnnn or \Wnnnnnnnn. */ /* Tell glibc's <stdio.h> to provide a prototype for snprintf(). This must come before <config.h> because <config.h> may include <features.h>, and once <features.h> has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifndef VASNPRINTF # include <config.h> #endif /* As of GCC 11.2.1, gcc -Wanalyzer-too-complex reports that main's use of CHECK macros expands to code that is too complicated for gcc -fanalyzer. Suppress the resulting bogus warnings. */ #if 10 <= __GNUC__ # pragma GCC diagnostic ignored "-Wanalyzer-null-argument" #endif #include <alloca.h> /* Specification. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "vasnwprintf.h" # else # include "vasnprintf.h" # endif #endif #include <locale.h> /* localeconv() */ #include <stdio.h> /* snprintf(), sprintf() */ #include <stdlib.h> /* abort(), malloc(), realloc(), free() */ #include <string.h> /* memcpy(), strlen() */ #include <wchar.h> /* mbstate_t, mbrtowc(), mbrlen(), wcrtomb(), mbszero() */ #include <errno.h> /* errno */ #include <limits.h> /* CHAR_BIT, INT_WIDTH, LONG_WIDTH */ #include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */ #if HAVE_NL_LANGINFO # include <langinfo.h> #endif #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "wprintf-parse.h" # else # include "printf-parse.h" # endif #endif /* Checked size_t computations. */ #include "xsize.h" #include "attribute.h" #if NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) # include <math.h> # include "float+.h" #endif #if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE # include <math.h> # include "isnand-nolibm.h" #endif #if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) # include <math.h> # include "isnanl-nolibm.h" # include "fpucw.h" #endif #if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE # include <math.h> # include "isnand-nolibm.h" # include "printf-frexp.h" #endif #if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) # include <math.h> # include "isnanl-nolibm.h" # include "printf-frexpl.h" # include "fpucw.h" #endif /* Default parameters. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # define VASNPRINTF vasnwprintf # define FCHAR_T wchar_t # define DCHAR_T wchar_t # define DIRECTIVE wchar_t_directive # define DIRECTIVES wchar_t_directives # define PRINTF_PARSE wprintf_parse # define DCHAR_CPY wmemcpy # define DCHAR_SET wmemset # else # define VASNPRINTF vasnprintf # define FCHAR_T char # define DCHAR_T char # define TCHAR_T char # define DCHAR_IS_TCHAR 1 # define DIRECTIVE char_directive # define DIRECTIVES char_directives # define PRINTF_PARSE printf_parse # define DCHAR_CPY memcpy # define DCHAR_SET memset # endif #endif #if WIDE_CHAR_VERSION /* DCHAR_T is wchar_t. */ # if HAVE_DECL__SNWPRINTF || (HAVE_SWPRINTF && HAVE_WORKING_SWPRINTF) # define TCHAR_T wchar_t # define DCHAR_IS_TCHAR 1 # define USE_SNPRINTF 1 # if HAVE_DECL__SNWPRINTF /* On Windows, the function swprintf() has a different signature than on Unix; we use the function _snwprintf() or - on mingw - snwprintf() instead. The mingw function snwprintf() has fewer bugs than the MSVCRT function _snwprintf(), so prefer that. */ # if defined __MINGW32__ # define SNPRINTF snwprintf # else # define SNPRINTF _snwprintf # define USE_MSVC__SNPRINTF 1 # endif # else /* Unix. */ # define SNPRINTF swprintf # endif # else /* Old platforms such as NetBSD 3.0, OpenBSD 3.8, HP-UX 11.00, IRIX 6.5. */ # define TCHAR_T char # endif #endif #if !WIDE_CHAR_VERSION || !DCHAR_IS_TCHAR /* TCHAR_T is char. */ /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. But don't use it on BeOS, since BeOS snprintf produces no output if the size argument is >= 0x3000000. Also don't use it on Linux libc5, since there snprintf with size = 1 writes any output without bounds, like sprintf. */ # if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) # define USE_SNPRINTF 1 # else # define USE_SNPRINTF 0 # endif # if HAVE_DECL__SNPRINTF /* Windows. The mingw function snprintf() has fewer bugs than the MSVCRT function _snprintf(), so prefer that. */ # if defined __MINGW32__ # define SNPRINTF snprintf /* Here we need to call the native snprintf, not rpl_snprintf. */ # undef snprintf # else /* MSVC versions < 14 did not have snprintf, only _snprintf. */ # define SNPRINTF _snprintf # define USE_MSVC__SNPRINTF 1 # endif # else /* Unix. */ # define SNPRINTF snprintf /* Here we need to call the native snprintf, not rpl_snprintf. */ # undef snprintf # endif #endif /* Here we need to call the native sprintf, not rpl_sprintf. */ #undef sprintf /* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" warnings in this file. Use -Dlint to suppress them. */ #if defined GCC_LINT || defined lint # define IF_LINT(Code) Code #else # define IF_LINT(Code) /* empty */ #endif /* Avoid some warnings from "gcc -Wshadow". This file doesn't use the exp() and remainder() functions. */ #undef exp #define exp expo #undef remainder #define remainder rem #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && !WIDE_CHAR_VERSION # if (HAVE_STRNLEN && !defined _AIX) # define local_strnlen strnlen # else # ifndef local_strnlen_defined # define local_strnlen_defined 1 static size_t local_strnlen (const char *string, size_t maxlen) { const char *end = memchr (string, '\0', maxlen); return end ? (size_t) (end - string) : maxlen; } # endif # endif #endif #if (((!USE_SNPRINTF || WIDE_CHAR_VERSION || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_WPRINTF_DIRECTIVE_LC) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_DIRECTIVE_LS) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T # if HAVE_WCSLEN # define local_wcslen wcslen # else /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid a dependency towards this library, here is a local substitute. Define this substitute only once, even if this file is included twice in the same compilation unit. */ # ifndef local_wcslen_defined # define local_wcslen_defined 1 static size_t local_wcslen (const wchar_t *s) { const wchar_t *ptr; for (ptr = s; *ptr != (wchar_t) 0; ptr++) ; return ptr - s; } # endif # endif #endif #if (!USE_SNPRINTF || (WIDE_CHAR_VERSION && DCHAR_IS_TCHAR) || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && HAVE_WCHAR_T && WIDE_CHAR_VERSION # if HAVE_WCSNLEN && HAVE_DECL_WCSNLEN # define local_wcsnlen wcsnlen # else # ifndef local_wcsnlen_defined # define local_wcsnlen_defined 1 static size_t local_wcsnlen (const wchar_t *s, size_t maxlen) { const wchar_t *ptr; for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) ; return ptr - s; } # endif # endif #endif #if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_DIRECTIVE_LS || ENABLE_WCHAR_FALLBACK) && HAVE_WCHAR_T) || ((NEED_PRINTF_DIRECTIVE_LC || ENABLE_WCHAR_FALLBACK) && HAVE_WINT_T)) && !WIDE_CHAR_VERSION # if ENABLE_WCHAR_FALLBACK static size_t wctomb_fallback (char *s, wchar_t wc) { static char const hex[16] = "0123456789ABCDEF"; s[0] = '\\'; if (sizeof (wchar_t) > 2 && wc > 0xffff) { # if __STDC_ISO_10646__ || (__GLIBC__ >= 2) || (defined _WIN32 || defined __CYGWIN__) s[1] = 'U'; # else s[1] = 'W'; # endif s[2] = hex[(wc & 0xf0000000U) >> 28]; s[3] = hex[(wc & 0xf000000U) >> 24]; s[4] = hex[(wc & 0xf00000U) >> 20]; s[5] = hex[(wc & 0xf0000U) >> 16]; s[6] = hex[(wc & 0xf000U) >> 12]; s[7] = hex[(wc & 0xf00U) >> 8]; s[8] = hex[(wc & 0xf0U) >> 4]; s[9] = hex[wc & 0xfU]; return 10; } else { # if __STDC_ISO_10646__ || (__GLIBC__ >= 2) || (defined _WIN32 || defined __CYGWIN__) s[1] = 'u'; # else s[1] = 'w'; # endif s[2] = hex[(wc & 0xf000U) >> 12]; s[3] = hex[(wc & 0xf00U) >> 8]; s[4] = hex[(wc & 0xf0U) >> 4]; s[5] = hex[wc & 0xfU]; return 6; } } # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t static size_t local_wcrtomb (char *s, wchar_t wc, mbstate_t *ps) { size_t count = wcrtomb (s, wc, ps); if (count == (size_t)(-1)) count = wctomb_fallback (s, wc); return count; } # else static int local_wctomb (char *s, wchar_t wc) { int count = wctomb (s, wc); if (count < 0) count = wctomb_fallback (s, wc); return count; } # define local_wcrtomb(S, WC, PS) local_wctomb ((S), (WC)) # endif # else # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t # define local_wcrtomb(S, WC, PS) wcrtomb ((S), (WC), (PS)) # else # define local_wcrtomb(S, WC, PS) wctomb ((S), (WC)) # endif # endif #endif #if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) /* Determine the decimal-point character according to the current locale. */ # ifndef decimal_point_char_defined # define decimal_point_char_defined 1 static char decimal_point_char (void) { const char *point; /* Determine it in a multithread-safe way. We know nl_langinfo is multithread-safe on glibc systems and Mac OS X systems, but is not required to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. localeconv() is rarely multithread-safe. */ # if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) point = nl_langinfo (RADIXCHAR); # elif 1 char pointbuf[5]; sprintf (pointbuf, "%#.0f", 1.0); point = &pointbuf[1]; # else point = localeconv () -> decimal_point; # endif /* The decimal point is always a single byte: either '.' or ','. */ return (point[0] != '\0' ? point[0] : '.'); } # endif #endif #if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ static int is_infinite_or_zero (double x) { return isnand (x) || x + x == x; } #endif #if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ static int is_infinite_or_zerol (long double x) { return isnanl (x) || x + x == x; } #endif #if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE /* Converting 'long double' to decimal without rare rounding bugs requires real bignums. We use the naming conventions of GNU gmp, but vastly simpler (and slower) algorithms. */ typedef unsigned int mp_limb_t; # define GMP_LIMB_BITS 32 static_assert (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS); typedef unsigned long long mp_twolimb_t; # define GMP_TWOLIMB_BITS 64 static_assert (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS); /* Representation of a bignum >= 0. */ typedef struct { size_t nlimbs; mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ } mpn_t; /* Compute the product of two bignums >= 0. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * multiply (mpn_t src1, mpn_t src2, mpn_t *dest) { const mp_limb_t *p1; const mp_limb_t *p2; size_t len1; size_t len2; if (src1.nlimbs <= src2.nlimbs) { len1 = src1.nlimbs; p1 = src1.limbs; len2 = src2.nlimbs; p2 = src2.limbs; } else { len1 = src2.nlimbs; p1 = src2.limbs; len2 = src1.nlimbs; p2 = src1.limbs; } /* Now 0 <= len1 <= len2. */ if (len1 == 0) { /* src1 or src2 is zero. */ dest->nlimbs = 0; dest->limbs = (mp_limb_t *) malloc (1); } else { /* Here 1 <= len1 <= len2. */ size_t dlen; mp_limb_t *dp; size_t k, i, j; dlen = len1 + len2; dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); if (dp == NULL) return NULL; for (k = len2; k > 0; ) dp[--k] = 0; for (i = 0; i < len1; i++) { mp_limb_t digit1 = p1[i]; mp_twolimb_t carry = 0; for (j = 0; j < len2; j++) { mp_limb_t digit2 = p2[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; carry += dp[i + j]; dp[i + j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } dp[i + len2] = (mp_limb_t) carry; } /* Normalise. */ while (dlen > 0 && dp[dlen - 1] == 0) dlen--; dest->nlimbs = dlen; dest->limbs = dp; } return dest->limbs; } /* Compute the quotient of a bignum a >= 0 and a bignum b > 0. a is written as a = q * b + r with 0 <= r < b. q is the quotient, r the remainder. Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, q is incremented. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * divide (mpn_t a, mpn_t b, mpn_t *q) { /* Algorithm: First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). If m<n, then q:=0 and r:=a. If m>=n=1, perform a single-precision division: r:=0, j:=m, while j>0 do {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r<b[0]<beta} j:=j-1, r:=r*beta+a[j], q[j]:=floor(r/b[0]), r:=r-b[0]*q[j]. Normalise [q[m-1],...,q[0]], yields q. If m>=n>1, perform a multiple-precision division: We have a/b < beta^(m-n+1). s:=intDsize-1-(highest bit in b[n-1]), 0<=s<intDsize. Shift a and b left by s bits, copying them. r:=a. r=[r[m],...,r[0]], b=[b[n-1],...,b[0]] with b[n-1]>=beta/2. For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} Compute q* : q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). In case of overflow (q* >= beta) set q* := beta-1. Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] and c3 := b[n-2] * q*. {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow occurred. Furthermore 0 <= c3 < beta^2. If there was overflow and r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, the next test can be skipped.} While c3 > c2, {Here 0 <= c2 < c3 < beta^2} Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. If q* > 0: Put r := r - b * q* * beta^j. In detail: [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. hence: u:=0, for i:=0 to n-1 do u := u + q* * b[i], r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), u:=u div beta (+ 1, if carry in subtraction) r[n+j]:=r[n+j]-u. {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 < q* + 1 <= beta, the carry u does not overflow.} If a negative carry occurs, put q* := q* - 1 and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. Set q[j] := q*. Normalise [q[m-n],..,q[0]]; this yields the quotient q. Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the rest r. The room for q[j] can be allocated at the memory location of r[n+j]. Finally, round-to-even: Shift r left by 1 bit. If r > b or if r = b and q[0] is odd, q := q+1. */ const mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; const mp_limb_t *b_ptr = b.limbs; size_t b_len = b.nlimbs; mp_limb_t *roomptr; mp_limb_t *tmp_roomptr = NULL; mp_limb_t *q_ptr; size_t q_len; mp_limb_t *r_ptr; size_t r_len; /* Allocate room for a_len+2 digits. (Need a_len+1 digits for the real division and 1 more digit for the final rounding of q.) */ roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); if (roomptr == NULL) return NULL; /* Normalise a. */ while (a_len > 0 && a_ptr[a_len - 1] == 0) a_len--; /* Normalise b. */ for (;;) { if (b_len == 0) /* Division by zero. */ abort (); if (b_ptr[b_len - 1] == 0) b_len--; else break; } /* Here m = a_len >= 0 and n = b_len > 0. */ if (a_len < b_len) { /* m<n: trivial case. q=0, r := copy of a. */ r_ptr = roomptr; r_len = a_len; memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); q_ptr = roomptr + a_len; q_len = 0; } else if (b_len == 1) { /* n=1: single precision division. beta^(m-1) <= a < beta^m ==> beta^(m-2) <= a/b < beta^m */ r_ptr = roomptr; q_ptr = roomptr + 1; { mp_limb_t den = b_ptr[0]; mp_limb_t remainder = 0; const mp_limb_t *sourceptr = a_ptr + a_len; mp_limb_t *destptr = q_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; *--destptr = num / den; remainder = num % den; } /* Normalise and store r. */ if (remainder > 0) { r_ptr[0] = remainder; r_len = 1; } else r_len = 0; /* Normalise q. */ q_len = a_len; if (q_ptr[q_len - 1] == 0) q_len--; } } else { /* n>1: multiple precision division. beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> beta^(m-n-1) <= a/b < beta^(m-n+1). */ /* Determine s. */ size_t s; { mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ /* Determine s = GMP_LIMB_BITS - integer_length (msd). Code copied from gnulib's integer_length.c. */ # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) \ || (__clang_major__ >= 4) s = __builtin_clz (msd); # else # if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT if (GMP_LIMB_BITS <= DBL_MANT_BIT) { /* Use 'double' operations. Assumes an IEEE 754 'double' implementation. */ # define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) # define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1) # define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { double value; unsigned int word[NWORDS]; } m; /* Use a single integer to floating-point conversion. */ m.value = msd; s = GMP_LIMB_BITS - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK) - DBL_EXP_BIAS); } else # undef NWORDS # endif { s = 31; if (msd >= 0x10000) { msd = msd >> 16; s -= 16; } if (msd >= 0x100) { msd = msd >> 8; s -= 8; } if (msd >= 0x10) { msd = msd >> 4; s -= 4; } if (msd >= 0x4) { msd = msd >> 2; s -= 2; } if (msd >= 0x2) { msd = msd >> 1; s -= 1; } } # endif } /* 0 <= s < GMP_LIMB_BITS. Copy b, shifting it left by s bits. */ if (s > 0) { tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); if (tmp_roomptr == NULL) { free (roomptr); return NULL; } { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = tmp_roomptr; mp_twolimb_t accu = 0; size_t count; for (count = b_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } /* accu must be zero, since that was how s was determined. */ if (accu != 0) abort (); } b_ptr = tmp_roomptr; } /* Copy a, shifting it left by s bits, yields r. Memory layout: At the beginning: r = roomptr[0..a_len], at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ r_ptr = roomptr; if (s == 0) { memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); r_ptr[a_len] = 0; } else { const mp_limb_t *sourceptr = a_ptr; mp_limb_t *destptr = r_ptr; mp_twolimb_t accu = 0; size_t count; for (count = a_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } *destptr++ = (mp_limb_t) accu; } q_ptr = roomptr + b_len; q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ { size_t j = a_len - b_len; /* m-n */ mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; /* Division loop, traversed m-n+1 times. j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ for (;;) { mp_limb_t q_star; mp_limb_t c1; if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ { /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ mp_twolimb_t num = ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) | r_ptr[j + b_len - 1]; q_star = num / b_msd; c1 = num % b_msd; } else { /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) {<= beta !}. If yes, jump directly to the subtraction loop. (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ if (r_ptr[j + b_len] > b_msd || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) /* r[j+n] >= b[n-1]+1 or r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a carry. */ goto subtract; } /* q_star = q*, c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, <beta). */ { mp_twolimb_t c2 = /* c1*beta+r[j+n-2] */ ((mp_twolimb_t) c1 << GMP_LIMB_BITS) | r_ptr[j + b_len - 2]; mp_twolimb_t c3 = /* b[n-2] * q* */ (mp_twolimb_t) b_2msd * (mp_twolimb_t) q_star; /* While c2 < c3, increase c2 and decrease c3. Consider c3-c2. While it is > 0, decrease it by b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 this can happen only twice. */ if (c3 > c2) { q_star = q_star - 1; /* q* := q* - 1 */ if (c3 - c2 > b_msdd) q_star = q_star - 1; /* q* := q* - 1 */ } } if (q_star > 0) subtract: { /* Subtract r := r - b * q* * beta^j. */ mp_limb_t cr; { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_twolimb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { /* Here 0 <= carry <= q*. */ carry = carry + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ + (mp_limb_t) ~(*destptr); /* Here 0 <= carry <= beta*q* + beta-1. */ *destptr++ = ~(mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; /* <= q* */ } cr = (mp_limb_t) carry; } /* Subtract cr from r_ptr[j + b_len], then forget about r_ptr[j + b_len]. */ if (cr > r_ptr[j + b_len]) { /* Subtraction gave a carry. */ q_star = q_star - 1; /* q* := q* - 1 */ /* Add b back. */ { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_limb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { mp_limb_t source1 = *sourceptr++; mp_limb_t source2 = *destptr; *destptr++ = source1 + source2 + carry; carry = (carry ? source1 >= (mp_limb_t) ~source2 : source1 > (mp_limb_t) ~source2); } } /* Forget about the carry and about r[j+n]. */ } } /* q* is determined. Store it as q[j]. */ q_ptr[j] = q_star; if (j == 0) break; j--; } } r_len = b_len; /* Normalise q. */ if (q_ptr[q_len - 1] == 0) q_len--; # if 0 /* Not needed here, since we need r only to compare it with b/2, and b is shifted left by s bits. */ /* Shift r right by s bits. */ if (s > 0) { mp_limb_t ptr = r_ptr + r_len; mp_twolimb_t accu = 0; size_t count; for (count = r_len; count > 0; count--) { accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); } } # endif /* Normalise r. */ while (r_len > 0 && r_ptr[r_len - 1] == 0) r_len--; } /* Compare r << 1 with b. */ if (r_len > b_len) goto increment_q; { size_t i; for (i = b_len;;) { mp_limb_t r_i = (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) | (i < r_len ? r_ptr[i] << 1 : 0); mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); if (r_i > b_i) goto increment_q; if (r_i < b_i) goto keep_q; if (i == 0) break; i--; } } if (q_len > 0 && ((q_ptr[0] & 1) != 0)) /* q is odd. */ increment_q: { size_t i; for (i = 0; i < q_len; i++) if (++(q_ptr[i]) != 0) goto keep_q; q_ptr[q_len++] = 1; } keep_q: free (tmp_roomptr); q->limbs = q_ptr; q->nlimbs = q_len; return roomptr; } /* Avoid pointless GCC warning "argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807", triggered by the use of xsum as argument of malloc. */ # if __GNUC__ >= 7 # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Walloc-size-larger-than=" # endif /* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal representation. Destroys the contents of a. Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * convert_to_decimal (mpn_t a, size_t extra_zeroes) { mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); /* We need extra_zeroes bytes for zeroes, followed by c_len bytes for the digits of a, followed by 1 byte for the terminating NUL. */ char *c_ptr = (char *) malloc (xsum (xsum (extra_zeroes, c_len), 1)); if (c_ptr != NULL) { char *d_ptr = c_ptr; for (; extra_zeroes > 0; extra_zeroes--) *d_ptr++ = '0'; while (a_len > 0) { /* Divide a by 10^9, in-place. */ mp_limb_t remainder = 0; mp_limb_t *ptr = a_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; *ptr = num / 1000000000; remainder = num % 1000000000; } /* Store the remainder as 9 decimal digits. */ for (count = 9; count > 0; count--) { *d_ptr++ = '0' + (remainder % 10); remainder = remainder / 10; } /* Normalize a. */ if (a_ptr[a_len - 1] == 0) a_len--; } /* Remove leading zeroes. */ while (d_ptr > c_ptr && d_ptr[-1] == '0') d_ptr--; /* But keep at least one zero. */ if (d_ptr == c_ptr) *d_ptr++ = '0'; /* Terminate the string. */ *d_ptr = '\0'; } return c_ptr; } # if __GNUC__ >= 7 # pragma GCC diagnostic pop # endif # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_long_double (long double x, int *ep, mpn_t *mp) { mpn_t m; int exp; long double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'long double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess precision. */ if (!(y == 0.0L)) abort (); # endif /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - LDBL_MANT_BIT; return m.limbs; } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_double (double x, int *ep, mpn_t *mp) { mpn_t m; int exp; double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } if (!(y == 0.0)) abort (); /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - DBL_MANT_BIT; return m.limbs; } # endif /* Assuming x = 2^e * m is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) { int s; size_t extra_zeroes; unsigned int abs_n; unsigned int abs_s; mp_limb_t *pow5_ptr; size_t pow5_len; unsigned int s_limbs; unsigned int s_bits; mpn_t pow5; mpn_t z; void *z_memory; char *digits; /* x = 2^e * m, hence y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) = round (2^s * 5^n * m). */ s = e + n; extra_zeroes = 0; /* Factor out a common power of 10 if possible. */ if (s > 0 && n > 0) { extra_zeroes = (s < n ? s : n); s -= extra_zeroes; n -= extra_zeroes; } /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. Before converting to decimal, we need to compute z = round (2^s * 5^n * m). */ /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same sign. 2.322 is slightly larger than log(5)/log(2). */ abs_n = (n >= 0 ? n : -n); abs_s = (s >= 0 ? s : -s); pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 + abs_s / GMP_LIMB_BITS + 1) * sizeof (mp_limb_t)); if (pow5_ptr == NULL) { free (memory); return NULL; } /* Initialize with 1. */ pow5_ptr[0] = 1; pow5_len = 1; /* Multiply with 5^|n|. */ if (abs_n > 0) { static mp_limb_t const small_pow5[13 + 1] = { 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, 48828125, 244140625, 1220703125 }; unsigned int n13; for (n13 = 0; n13 <= abs_n; n13 += 13) { mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; size_t j; mp_twolimb_t carry = 0; for (j = 0; j < pow5_len; j++) { mp_limb_t digit2 = pow5_ptr[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; pow5_ptr[j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } if (carry > 0) pow5_ptr[pow5_len++] = (mp_limb_t) carry; } } s_limbs = abs_s / GMP_LIMB_BITS; s_bits = abs_s % GMP_LIMB_BITS; if (n >= 0 ? s >= 0 : s <= 0) { /* Multiply with 2^|s|. */ if (s_bits > 0) { mp_limb_t *ptr = pow5_ptr; mp_twolimb_t accu = 0; size_t count; for (count = pow5_len; count > 0; count--) { accu += (mp_twolimb_t) *ptr << s_bits; *ptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) { *ptr = (mp_limb_t) accu; pow5_len++; } } if (s_limbs > 0) { size_t count; for (count = pow5_len; count > 0;) { count--; pow5_ptr[s_limbs + count] = pow5_ptr[count]; } for (count = s_limbs; count > 0;) { count--; pow5_ptr[count] = 0; } pow5_len += s_limbs; } pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* Multiply m with pow5. No division needed. */ z_memory = multiply (m, pow5, &z); } else { /* Divide m by pow5 and round. */ z_memory = divide (m, pow5, &z); } } else { pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* n >= 0, s < 0. Multiply m with pow5, then divide by 2^|s|. */ mpn_t numerator; mpn_t denominator; void *tmp_memory; tmp_memory = multiply (m, pow5, &numerator); if (tmp_memory == NULL) { free (pow5_ptr); free (memory); return NULL; } /* Construct 2^|s|. */ { mp_limb_t *ptr = pow5_ptr + pow5_len; size_t i; for (i = 0; i < s_limbs; i++) ptr[i] = 0; ptr[s_limbs] = (mp_limb_t) 1 << s_bits; denominator.limbs = ptr; denominator.nlimbs = s_limbs + 1; } z_memory = divide (numerator, denominator, &z); free (tmp_memory); } else { /* n < 0, s > 0. Multiply m with 2^s, then divide by pow5. */ mpn_t numerator; mp_limb_t *num_ptr; num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) * sizeof (mp_limb_t)); if (num_ptr == NULL) { free (pow5_ptr); free (memory); return NULL; } { mp_limb_t *destptr = num_ptr; { size_t i; for (i = 0; i < s_limbs; i++) *destptr++ = 0; } if (s_bits > 0) { const mp_limb_t *sourceptr = m.limbs; mp_twolimb_t accu = 0; size_t count; for (count = m.nlimbs; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s_bits; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) *destptr++ = (mp_limb_t) accu; } else { const mp_limb_t *sourceptr = m.limbs; size_t count; for (count = m.nlimbs; count > 0; count--) *destptr++ = *sourceptr++; } numerator.limbs = num_ptr; numerator.nlimbs = destptr - num_ptr; } z_memory = divide (numerator, pow5, &z); free (num_ptr); } } free (pow5_ptr); free (memory); /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ if (z_memory == NULL) return NULL; digits = convert_to_decimal (z, extra_zeroes); free (z_memory); return digits; } # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_long_double (long double x, int n) { int e; mpn_t m; void *memory = decode_long_double (x, &e, &m); if (memory != NULL) return scale10_round_decimal_decoded (e, m, memory, n); else return NULL; } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_double (double x, int n) { int e; mpn_t m; void *memory = decode_double (x, &e, &m); if (memory != NULL) return scale10_round_decimal_decoded (e, m, memory, n); else return NULL; } # endif # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10l (long double x) { int exp; long double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); if (y == 0.0L) return INT_MIN; if (y < 0.5L) { while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0L / (1 << 16))) { y *= 1.0L * (1 << 16); exp -= 16; } if (y < (1.0L / (1 << 8))) { y *= 1.0L * (1 << 8); exp -= 8; } if (y < (1.0L / (1 << 4))) { y *= 1.0L * (1 << 4); exp -= 4; } if (y < (1.0L / (1 << 2))) { y *= 1.0L * (1 << 2); exp -= 2; } if (y < (1.0L / (1 << 1))) { y *= 1.0L * (1 << 1); exp -= 1; } } if (!(y >= 0.5L && y < 1.0L)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) Four terms are enough to get an approximation with error < 10^-7. */ l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10 (double x) { int exp; double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); if (y == 0.0) return INT_MIN; if (y < 0.5) { while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0 / (1 << 16))) { y *= 1.0 * (1 << 16); exp -= 16; } if (y < (1.0 / (1 << 8))) { y *= 1.0 * (1 << 8); exp -= 8; } if (y < (1.0 / (1 << 4))) { y *= 1.0 * (1 << 4); exp -= 4; } if (y < (1.0 / (1 << 2))) { y *= 1.0 * (1 << 2); exp -= 2; } if (y < (1.0 / (1 << 1))) { y *= 1.0 * (1 << 1); exp -= 1; } } if (!(y >= 0.5 && y < 1.0)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) Four terms are enough to get an approximation with error < 10^-7. */ l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif /* Tests whether a string of digits consists of exactly PRECISION zeroes and a single '1' digit. */ static int is_borderline (const char *digits, size_t precision) { for (; precision > 0; precision--, digits++) if (*digits != '0') return 0; if (*digits != '1') return 0; digits++; return *digits == '\0'; } #endif #if !USE_SNPRINTF || (WIDE_CHAR_VERSION && DCHAR_IS_TCHAR) || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF /* Use a different function name, to make it possible that the 'wchar_t' parametrization and the 'char' parametrization get compiled in the same translation unit. */ # if WIDE_CHAR_VERSION # define MAX_ROOM_NEEDED wmax_room_needed # else # define MAX_ROOM_NEEDED max_room_needed # endif /* Returns the number of TCHAR_T units needed as temporary space for the result of sprintf or SNPRINTF of a single conversion directive. */ static size_t MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion, arg_type type, int flags, size_t width, int has_precision, size_t precision, int pad_ourselves) { size_t tmp_length; switch (conversion) { case 'd': case 'i': case 'u': switch (type) { default: tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_LONGINT: tmp_length = (unsigned int) (sizeof (long int) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_ULONGINT: tmp_length = (unsigned int) (sizeof (unsigned long int) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_LONGLONGINT: tmp_length = (unsigned int) (sizeof (long long int) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_ULONGLONGINT: tmp_length = (unsigned int) (sizeof (unsigned long long int) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_INT8_T: tmp_length = (unsigned int) (sizeof (int8_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT8_T: tmp_length = (unsigned int) (sizeof (uint8_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_INT16_T: tmp_length = (unsigned int) (sizeof (int16_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT16_T: tmp_length = (unsigned int) (sizeof (uint16_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_INT32_T: tmp_length = (unsigned int) (sizeof (int32_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT32_T: tmp_length = (unsigned int) (sizeof (uint32_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_INT64_T: tmp_length = (unsigned int) (sizeof (int64_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT64_T: tmp_length = (unsigned int) (sizeof (uint64_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_INT_FAST8_T: tmp_length = (unsigned int) (sizeof (int_fast8_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST8_T: tmp_length = (unsigned int) (sizeof (uint_fast8_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_INT_FAST16_T: tmp_length = (unsigned int) (sizeof (int_fast16_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST16_T: tmp_length = (unsigned int) (sizeof (uint_fast16_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_INT_FAST32_T: tmp_length = (unsigned int) (sizeof (int_fast32_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST32_T: tmp_length = (unsigned int) (sizeof (uint_fast32_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_INT_FAST64_T: tmp_length = (unsigned int) (sizeof (int_fast64_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST64_T: tmp_length = (unsigned int) (sizeof (uint_fast64_t) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ break; } if (tmp_length < precision) tmp_length = precision; /* Multiply by 2, as an estimate for FLAG_GROUP. */ tmp_length = xsum (tmp_length, tmp_length); /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'b': #if SUPPORT_GNU_PRINTF_DIRECTIVES \ || (__GLIBC__ + (__GLIBC_MINOR__ >= 35) > 2) case 'B': #endif switch (type) { default: tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_ULONGINT: tmp_length = (unsigned int) (sizeof (unsigned long int) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_ULONGLONGINT: tmp_length = (unsigned int) (sizeof (unsigned long long int) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT8_T: tmp_length = (unsigned int) (sizeof (uint8_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT16_T: tmp_length = (unsigned int) (sizeof (uint16_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT32_T: tmp_length = (unsigned int) (sizeof (uint32_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT64_T: tmp_length = (unsigned int) (sizeof (uint64_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST8_T: tmp_length = (unsigned int) (sizeof (uint_fast8_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST16_T: tmp_length = (unsigned int) (sizeof (uint_fast16_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST32_T: tmp_length = (unsigned int) (sizeof (uint_fast32_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST64_T: tmp_length = (unsigned int) (sizeof (uint_fast64_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; } if (tmp_length < precision) tmp_length = precision; /* Add 2, to account for a prefix from the alternate form. */ tmp_length = xsum (tmp_length, 2); break; case 'o': switch (type) { default: tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ break; case TYPE_ULONGINT: tmp_length = (unsigned int) (sizeof (unsigned long int) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ break; case TYPE_ULONGLONGINT: tmp_length = (unsigned int) (sizeof (unsigned long long int) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT8_T: tmp_length = (unsigned int) (sizeof (uint8_t) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT16_T: tmp_length = (unsigned int) (sizeof (uint16_t) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT32_T: tmp_length = (unsigned int) (sizeof (uint32_t) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT64_T: tmp_length = (unsigned int) (sizeof (uint64_t) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST8_T: tmp_length = (unsigned int) (sizeof (uint_fast8_t) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST16_T: tmp_length = (unsigned int) (sizeof (uint_fast16_t) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST32_T: tmp_length = (unsigned int) (sizeof (uint_fast32_t) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST64_T: tmp_length = (unsigned int) (sizeof (uint_fast64_t) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ break; } if (tmp_length < precision) tmp_length = precision; /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'x': case 'X': switch (type) { default: tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_ULONGINT: tmp_length = (unsigned int) (sizeof (unsigned long int) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_ULONGLONGINT: tmp_length = (unsigned int) (sizeof (unsigned long long int) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT8_T: tmp_length = (unsigned int) (sizeof (uint8_t) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT16_T: tmp_length = (unsigned int) (sizeof (uint16_t) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT32_T: tmp_length = (unsigned int) (sizeof (uint32_t) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT64_T: tmp_length = (unsigned int) (sizeof (uint64_t) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST8_T: tmp_length = (unsigned int) (sizeof (uint_fast8_t) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST16_T: tmp_length = (unsigned int) (sizeof (uint_fast16_t) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST32_T: tmp_length = (unsigned int) (sizeof (uint_fast32_t) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST64_T: tmp_length = (unsigned int) (sizeof (uint_fast64_t) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ break; } if (tmp_length < precision) tmp_length = precision; /* Add 2, to account for a prefix from the alternate form. */ tmp_length = xsum (tmp_length, 2); break; case 'f': case 'F': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ else tmp_length = (unsigned int) (DBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ tmp_length = xsum (tmp_length, precision); break; case 'e': case 'E': case 'g': case 'G': tmp_length = 12; /* sign, decimal point, exponent etc. */ tmp_length = xsum (tmp_length, precision); break; case 'a': case 'A': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (DBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); break; case 'c': # if HAVE_WINT_T && !WIDE_CHAR_VERSION if (type == TYPE_WIDE_CHAR) { tmp_length = MB_CUR_MAX; # if ENABLE_WCHAR_FALLBACK if (tmp_length < (sizeof (wchar_t) > 2 ? 10 : 6)) tmp_length = (sizeof (wchar_t) > 2 ? 10 : 6); # endif } else # endif tmp_length = 1; break; case 's': # if HAVE_WCHAR_T if (type == TYPE_WIDE_STRING) { # if WIDE_CHAR_VERSION /* ISO C says about %ls in fwprintf: "If the precision is not specified or is greater than the size of the array, the array shall contain a null wide character." So if there is a precision, we must not use wcslen. */ const wchar_t *arg = ap->arg[arg_index].a.a_wide_string; if (has_precision) tmp_length = local_wcsnlen (arg, precision); else tmp_length = local_wcslen (arg); # else /* ISO C says about %ls in fprintf: "If a precision is specified, no more than that many bytes are written (including shift sequences, if any), and the array shall contain a null wide character if, to equal the multibyte character sequence length given by the precision, the function would need to access a wide character one past the end of the array." So if there is a precision, we must not use wcslen. */ /* This case has already been handled separately in VASNPRINTF. */ abort (); # endif } else # endif { # if WIDE_CHAR_VERSION /* ISO C says about %s in fwprintf: "If the precision is not specified or is greater than the size of the converted array, the converted array shall contain a null wide character." So if there is a precision, we must not use strlen. */ /* This case has already been handled separately in VASNPRINTF. */ abort (); # else /* ISO C says about %s in fprintf: "If the precision is not specified or greater than the size of the array, the array shall contain a null character." So if there is a precision, we must not use strlen. */ const char *arg = ap->arg[arg_index].a.a_string; if (has_precision) tmp_length = local_strnlen (arg, precision); else tmp_length = strlen (arg); # endif } break; case 'p': tmp_length = (unsigned int) (sizeof (void *) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1 /* turn floor into ceil */ + 2; /* account for leading 0x */ break; default: abort (); } if (!pad_ourselves) { # if ENABLE_UNISTDIO /* Padding considers the number of characters, therefore the number of elements after padding may be > max (tmp_length, width) but is certainly <= tmp_length + width. */ tmp_length = xsum (tmp_length, width); # else /* Padding considers the number of elements, says POSIX. */ if (tmp_length < width) tmp_length = width; # endif } tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ return tmp_length; } #endif DCHAR_T * VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, const FCHAR_T *format, va_list args) { DIRECTIVES d; arguments a; if (PRINTF_PARSE (format, &d, &a) < 0) /* errno is already set. */ return NULL; /* Frees the memory allocated by this function. Preserves errno. */ #define CLEANUP() \ if (d.dir != d.direct_alloc_dir) \ free (d.dir); \ if (a.arg != a.direct_alloc_arg) \ free (a.arg); if (PRINTF_FETCHARGS (args, &a) < 0) goto fail_1_with_EINVAL; { size_t buf_neededlength; TCHAR_T *buf; TCHAR_T *buf_malloced; const FCHAR_T *cp; size_t i; DIRECTIVE *dp; /* Output string accumulator. */ DCHAR_T *result; size_t allocated; size_t length; /* Allocate a small buffer that will hold a directive passed to sprintf or snprintf. */ buf_neededlength = xsum4 (7, d.max_width_length, d.max_precision_length, 6); #if HAVE_ALLOCA if (buf_neededlength < 4000 / sizeof (TCHAR_T)) { buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); buf_malloced = NULL; } else #endif { size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); if (size_overflow_p (buf_memsize)) goto out_of_memory_1; buf = (TCHAR_T *) malloc (buf_memsize); if (buf == NULL) goto out_of_memory_1; buf_malloced = buf; } result = resultbuf; allocated = (resultbuf != NULL ? *lengthp : 0); length = 0; /* Invariants: result is either == resultbuf or malloc-allocated. If result == NULL, resultbuf is == NULL as well. If length > 0, then result != NULL. */ /* Ensures that allocated >= needed. Aborts through a jump to out_of_memory if needed is SIZE_MAX or otherwise too big. */ #define ENSURE_ALLOCATION_ELSE(needed, oom_statement) \ if ((needed) > allocated) \ { \ size_t memory_size; \ DCHAR_T *memory; \ \ allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ if ((needed) > allocated) \ allocated = (needed); \ memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ if (size_overflow_p (memory_size)) \ oom_statement \ if (result == resultbuf) \ memory = (DCHAR_T *) malloc (memory_size); \ else \ memory = (DCHAR_T *) realloc (result, memory_size); \ if (memory == NULL) \ oom_statement \ if (result == resultbuf && length > 0) \ DCHAR_CPY (memory, result, length); \ result = memory; \ } #define ENSURE_ALLOCATION(needed) \ ENSURE_ALLOCATION_ELSE((needed), goto out_of_memory; ) for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) { if (cp != dp->dir_start) { size_t n = dp->dir_start - cp; size_t augmented_length = xsum (length, n); ENSURE_ALLOCATION (augmented_length); /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we need that the format string contains only ASCII characters if FCHAR_T and DCHAR_T are not the same type. */ if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) { DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); length = augmented_length; } else { do result[length++] = *cp++; while (--n > 0); } } if (i == d.count) break; /* Execute a single directive. */ if (dp->conversion == '%') { size_t augmented_length; if (!(dp->arg_index == ARG_NONE)) abort (); augmented_length = xsum (length, 1); ENSURE_ALLOCATION (augmented_length); result[length] = '%'; length = augmented_length; } else { if (!(dp->arg_index != ARG_NONE)) abort (); if (dp->conversion == 'n') { switch (a.arg[dp->arg_index].type) { case TYPE_COUNT_SCHAR_POINTER: *a.arg[dp->arg_index].a.a_count_schar_pointer = length; break; case TYPE_COUNT_SHORT_POINTER: *a.arg[dp->arg_index].a.a_count_short_pointer = length; break; case TYPE_COUNT_INT_POINTER: *a.arg[dp->arg_index].a.a_count_int_pointer = length; break; case TYPE_COUNT_LONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longint_pointer = length; break; case TYPE_COUNT_LONGLONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; break; case TYPE_COUNT_INT8_T_POINTER: *a.arg[dp->arg_index].a.a_count_int8_t_pointer = length; break; case TYPE_COUNT_INT16_T_POINTER: *a.arg[dp->arg_index].a.a_count_int16_t_pointer = length; break; case TYPE_COUNT_INT32_T_POINTER: *a.arg[dp->arg_index].a.a_count_int32_t_pointer = length; break; case TYPE_COUNT_INT64_T_POINTER: *a.arg[dp->arg_index].a.a_count_int64_t_pointer = length; break; case TYPE_COUNT_INT_FAST8_T_POINTER: *a.arg[dp->arg_index].a.a_count_int_fast8_t_pointer = length; break; case TYPE_COUNT_INT_FAST16_T_POINTER: *a.arg[dp->arg_index].a.a_count_int_fast16_t_pointer = length; break; case TYPE_COUNT_INT_FAST32_T_POINTER: *a.arg[dp->arg_index].a.a_count_int_fast32_t_pointer = length; break; case TYPE_COUNT_INT_FAST64_T_POINTER: *a.arg[dp->arg_index].a.a_count_int_fast64_t_pointer = length; break; default: abort (); } } #if ENABLE_UNISTDIO /* The unistdio extensions. */ else if (dp->conversion == 'U') { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } switch (type) { case TYPE_U8_STRING: { const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; const uint8_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) goto fail_with_EILSEQ; arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) goto fail_with_EILSEQ; arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u8_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT8_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-8 to locale encoding. */ converted = u8_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-8 to UTF-16/UTF-32. */ converted = U8_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) goto fail_with_errno; if (converted != result + length) { ENSURE_ALLOCATION_ELSE (xsum (length, converted_len), { free (converted); goto out_of_memory; }); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U16_STRING: { const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; const uint16_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) goto fail_with_EILSEQ; arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) goto fail_with_EILSEQ; arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u16_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT16_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-16 to locale encoding. */ converted = u16_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-16 to UTF-8/UTF-32. */ converted = U16_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) goto fail_with_errno; if (converted != result + length) { ENSURE_ALLOCATION_ELSE (xsum (length, converted_len), { free (converted); goto out_of_memory; }); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U32_STRING: { const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; const uint32_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) goto fail_with_EILSEQ; arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) goto fail_with_EILSEQ; arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u32_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT32_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-32 to locale encoding. */ converted = u32_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-32 to UTF-8/UTF-16. */ converted = U32_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) goto fail_with_errno; if (converted != result + length) { ENSURE_ALLOCATION_ELSE (xsum (length, converted_len), { free (converted); goto out_of_memory; }); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; default: abort (); } } #endif #if WIDE_CHAR_VERSION && (!DCHAR_IS_TCHAR || NEED_WPRINTF_DIRECTIVE_LC) else if ((dp->conversion == 's' && a.arg[dp->arg_index].type == TYPE_WIDE_STRING) || (dp->conversion == 'c' && a.arg[dp->arg_index].type == TYPE_WIDE_CHAR)) { /* %ls or %lc in vasnwprintf. See the specification of fwprintf. */ /* It would be silly to use snprintf ("%ls", ...) and then convert back the result from a char[] to a wchar_t[]. Instead, just copy the argument wchar_t[] to the result. */ int flags = dp->flags; size_t width; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } { const wchar_t *ls_arg; wchar_t lc_arg[1]; size_t characters; if (dp->conversion == 's') { int has_precision; size_t precision; has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } ls_arg = a.arg[dp->arg_index].a.a_wide_string; if (has_precision) { /* Use only at most PRECISION wide characters, from the left. */ const wchar_t *ls_arg_end; ls_arg_end = ls_arg; characters = 0; for (; precision > 0; precision--) { if (*ls_arg_end == 0) /* Found the terminating null wide character. */ break; ls_arg_end++; characters++; } } else { /* Use the entire string, and count the number of wide characters. */ characters = local_wcslen (ls_arg); } } else /* dp->conversion == 'c' */ { lc_arg[0] = (wchar_t) a.arg[dp->arg_index].a.a_wide_char; ls_arg = lc_arg; characters = 1; } { size_t total = (characters < width ? width : characters); ENSURE_ALLOCATION (xsum (length, total)); if (characters < width && !(flags & FLAG_LEFT)) { size_t n = width - characters; DCHAR_SET (result + length, ' ', n); length += n; } if (characters > 0) { DCHAR_CPY (result + length, ls_arg, characters); length += characters; } if (characters < width && (flags & FLAG_LEFT)) { size_t n = width - characters; DCHAR_SET (result + length, ' ', n); length += n; } } } } #endif #if (!USE_SNPRINTF || WIDE_CHAR_VERSION || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_DIRECTIVE_LS || ENABLE_WCHAR_FALLBACK) && HAVE_WCHAR_T else if (dp->conversion == 's' # if WIDE_CHAR_VERSION && a.arg[dp->arg_index].type != TYPE_WIDE_STRING # else && a.arg[dp->arg_index].type == TYPE_WIDE_STRING # endif ) { /* The normal handling of the 's' directive below requires allocating a temporary buffer. The determination of its length (tmp_length), in the case when a precision is specified, below requires a conversion between a char[] string and a wchar_t[] wide string. It could be done, but we have no guarantee that the implementation of sprintf will use the exactly same algorithm. Without this guarantee, it is possible to have buffer overrun bugs. In order to avoid such bugs, we implement the entire processing of the 's' directive ourselves. */ int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } # if WIDE_CHAR_VERSION /* %s in vasnwprintf. See the specification of fwprintf. */ { const char *arg = a.arg[dp->arg_index].a.a_string; const char *arg_end; size_t characters; if (has_precision) { /* Use only as many bytes as needed to produce PRECISION wide characters, from the left. */ # if HAVE_MBRTOWC mbstate_t state; mbszero (&state); # endif arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count; # if HAVE_MBRTOWC count = mbrlen (arg_end, MB_CUR_MAX, &state); # else count = mblen (arg_end, MB_CUR_MAX); # endif if (count == 0) /* Found the terminating NUL. */ break; if (count < 0) /* Invalid or incomplete multibyte character. */ goto fail_with_EILSEQ; arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of wide characters. */ # if HAVE_MBRTOWC mbstate_t state; mbszero (&state); # endif arg_end = arg; characters = 0; for (;;) { int count; # if HAVE_MBRTOWC count = mbrlen (arg_end, MB_CUR_MAX, &state); # else count = mblen (arg_end, MB_CUR_MAX); # endif if (count == 0) /* Found the terminating NUL. */ break; if (count < 0) /* Invalid or incomplete multibyte character. */ goto fail_with_EILSEQ; arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } if (has_precision || has_width) { /* We know the number of wide characters in advance. */ size_t remaining; # if HAVE_MBRTOWC mbstate_t state; mbszero (&state); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; remaining--) { wchar_t wc; int count; # if HAVE_MBRTOWC count = mbrtowc (&wc, arg, arg_end - arg, &state); # else count = mbtowc (&wc, arg, arg_end - arg); # endif if (count <= 0) /* mbrtowc not consistent with mbrlen, or mbtowc not consistent with mblen. */ abort (); result[length++] = wc; arg += count; } if (!(arg == arg_end)) abort (); } else { # if HAVE_MBRTOWC mbstate_t state; mbszero (&state); # endif while (arg < arg_end) { wchar_t wc; int count; # if HAVE_MBRTOWC count = mbrtowc (&wc, arg, arg_end - arg, &state); # else count = mbtowc (&wc, arg, arg_end - arg); # endif if (count == 0) /* mbrtowc not consistent with strlen. */ abort (); if (count < 0) /* Invalid or incomplete multibyte character. */ goto fail_with_EILSEQ; ENSURE_ALLOCATION (xsum (length, 1)); result[length++] = wc; arg += count; } } if (characters < width && (flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } # else /* %ls in vasnprintf. See the specification of fprintf. */ { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; const wchar_t *arg_end; size_t characters; # if !DCHAR_IS_TCHAR /* This code assumes that TCHAR_T is 'char'. */ static_assert (sizeof (TCHAR_T) == 1); TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t tmpdst_len; # endif size_t w; if (has_precision) { /* Use only as many wide characters as needed to produce at most PRECISION bytes, from the left. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; mbszero (&state); # endif arg_end = arg; characters = 0; while (precision > 0) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg_end == 0) /* Found the terminating null wide character. */ break; count = local_wcrtomb (cbuf, *arg_end, &state); if (count < 0) /* Cannot convert. */ goto fail_with_EILSEQ; if (precision < (unsigned int) count) break; arg_end++; characters += count; precision -= count; } } # if DCHAR_IS_TCHAR else if (has_width) # else else # endif { /* Use the entire string, and count the number of bytes. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; mbszero (&state); # endif arg_end = arg; characters = 0; for (;;) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg_end == 0) /* Found the terminating null wide character. */ break; count = local_wcrtomb (cbuf, *arg_end, &state); if (count < 0) /* Cannot convert. */ goto fail_with_EILSEQ; arg_end++; characters += count; } } # if DCHAR_IS_TCHAR else { /* Use the entire string. */ arg_end = arg + local_wcslen (arg); /* The number of bytes doesn't matter. */ characters = 0; } # endif # if !DCHAR_IS_TCHAR /* Convert the string into a piece of temporary memory. */ tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); if (tmpsrc == NULL) goto out_of_memory; { TCHAR_T *tmpptr = tmpsrc; size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; mbszero (&state); # endif for (remaining = characters; remaining > 0; ) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); count = local_wcrtomb (cbuf, *arg, &state); if (count <= 0) /* Inconsistency. */ abort (); memcpy (tmpptr, cbuf, count); tmpptr += count; arg++; remaining -= count; } if (!(arg == arg_end)) abort (); } /* Convert from TCHAR_T[] to DCHAR_T[]. */ tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, characters, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) { free (tmpsrc); goto fail_with_errno; } free (tmpsrc); # endif if (has_width) { # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, characters); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = characters; # endif } else /* w doesn't matter. */ w = 0; if (w < width && !(flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_TCHAR if (has_precision || has_width) { /* We know the number of bytes in advance. */ size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; mbszero (&state); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; ) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); count = local_wcrtomb (cbuf, *arg, &state); if (count <= 0) /* Inconsistency. */ abort (); memcpy (result + length, cbuf, count); length += count; arg++; remaining -= count; } if (!(arg == arg_end)) abort (); } else { # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; mbszero (&state); # endif while (arg < arg_end) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); count = local_wcrtomb (cbuf, *arg, &state); if (count <= 0) /* Cannot convert. */ goto fail_with_EILSEQ; ENSURE_ALLOCATION (xsum (length, count)); memcpy (result + length, cbuf, count); length += count; arg++; } } # else ENSURE_ALLOCATION_ELSE (xsum (length, tmpdst_len), { free (tmpdst); goto out_of_memory; }); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); length += tmpdst_len; # endif if (w < width && (flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } # endif } #endif #if (NEED_PRINTF_DIRECTIVE_LC || ENABLE_WCHAR_FALLBACK) && HAVE_WINT_T && !WIDE_CHAR_VERSION else if (dp->conversion == 'c' && a.arg[dp->arg_index].type == TYPE_WIDE_CHAR) { /* Implement the 'lc' directive ourselves, in order to provide a correct behaviour for the null wint_t argument and/or the fallback that avoids EILSEQ. */ int flags = dp->flags; int has_width; size_t width; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } /* %lc in vasnprintf. See the specification of fprintf. */ { wchar_t arg = (wchar_t) a.arg[dp->arg_index].a.a_wide_char; size_t characters; # if !DCHAR_IS_TCHAR /* This code assumes that TCHAR_T is 'char'. */ static_assert (sizeof (TCHAR_T) == 1); TCHAR_T tmpsrc[64]; /* Assume MB_CUR_MAX <= 64. */ DCHAR_T *tmpdst; size_t tmpdst_len; # endif size_t w; # if DCHAR_IS_TCHAR if (has_width) # endif { /* Count the number of bytes. */ characters = 0; char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; mbszero (&state); # endif count = local_wcrtomb (cbuf, arg, &state); if (count < 0) /* Cannot convert. */ goto fail_with_EILSEQ; characters = count; } # if DCHAR_IS_TCHAR else { /* The number of bytes doesn't matter. */ characters = 0; } # endif # if !DCHAR_IS_TCHAR /* Convert the string into a piece of temporary memory. */ if (characters > 0) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; mbszero (&state); # endif count = local_wcrtomb (cbuf, arg, &state); if (count <= 0) /* Inconsistency. */ abort (); memcpy (tmpsrc, cbuf, count); } /* Convert from TCHAR_T[] to DCHAR_T[]. */ tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, characters, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) goto fail_with_errno; # endif if (has_width) { # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, characters); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = characters; # endif } else /* w doesn't matter. */ w = 0; if (w < width && !(flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_TCHAR if (has_width) { /* We know the number of bytes in advance. */ ENSURE_ALLOCATION (xsum (length, characters)); if (characters > 0) { int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; mbszero (&state); # endif count = local_wcrtomb (result + length, arg, &state); if (count <= 0) /* Inconsistency. */ abort (); length += count; } } else { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; mbszero (&state); # endif count = local_wcrtomb (cbuf, arg, &state); if (count < 0) /* Cannot convert. */ goto fail_with_EILSEQ; ENSURE_ALLOCATION (xsum (length, count)); memcpy (result + length, cbuf, count); length += count; } # else ENSURE_ALLOCATION_ELSE (xsum (length, tmpdst_len), { free (tmpdst); goto out_of_memory; }); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); length += tmpdst_len; # endif if (w < width && (flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } } #endif #if NEED_WPRINTF_DIRECTIVE_C && WIDE_CHAR_VERSION else if (dp->conversion == 'c' && a.arg[dp->arg_index].type != TYPE_WIDE_CHAR) { /* Implement the 'c' directive ourselves, in order to avoid EILSEQ in the "C" locale. */ int flags = dp->flags; size_t width; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } /* %c in vasnwprintf. See the specification of fwprintf. */ { char arg = (char) a.arg[dp->arg_index].a.a_char; mbstate_t state; wchar_t wc; mbszero (&state); int count = mbrtowc (&wc, &arg, 1, &state); if (count < 0) /* Invalid or incomplete multibyte character. */ goto fail_with_EILSEQ; if (1 < width && !(flags & FLAG_LEFT)) { size_t n = width - 1; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } ENSURE_ALLOCATION (xsum (length, 1)); result[length++] = wc; if (1 < width && (flags & FLAG_LEFT)) { size_t n = width - 1; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } } #endif #if NEED_PRINTF_DIRECTIVE_B || NEED_PRINTF_DIRECTIVE_UPPERCASE_B else if (0 # if NEED_PRINTF_DIRECTIVE_B || (dp->conversion == 'b') # endif # if NEED_PRINTF_DIRECTIVE_UPPERCASE_B || (dp->conversion == 'B') # endif ) { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; size_t tmp_length; size_t count; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *tmp_end; DCHAR_T *tmp_start; DCHAR_T *pad_ptr; DCHAR_T *p; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 1; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* Allocate a temporary buffer of sufficient size. */ switch (type) { default: tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_ULONGINT: tmp_length = (unsigned int) (sizeof (unsigned long int) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_ULONGLONGINT: tmp_length = (unsigned int) (sizeof (unsigned long long int) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT8_T: tmp_length = (unsigned int) (sizeof (uint8_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT16_T: tmp_length = (unsigned int) (sizeof (uint16_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT32_T: tmp_length = (unsigned int) (sizeof (uint32_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT64_T: tmp_length = (unsigned int) (sizeof (uint64_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST8_T: tmp_length = (unsigned int) (sizeof (uint_fast8_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST16_T: tmp_length = (unsigned int) (sizeof (uint_fast16_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST32_T: tmp_length = (unsigned int) (sizeof (uint_fast32_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; case TYPE_UINT_FAST64_T: tmp_length = (unsigned int) (sizeof (uint_fast64_t) * CHAR_BIT) + 1; /* turn floor into ceil */ break; } if (tmp_length < precision) tmp_length = precision; /* Add 2, to account for a prefix from the alternate form. */ tmp_length = xsum (tmp_length, 2); if (tmp_length < width) tmp_length = width; if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } tmp_end = tmp + tmp_length; unsigned long long arg; switch (type) { case TYPE_UCHAR: arg = a.arg[dp->arg_index].a.a_uchar; break; case TYPE_USHORT: arg = a.arg[dp->arg_index].a.a_ushort; break; case TYPE_UINT: arg = a.arg[dp->arg_index].a.a_uint; break; case TYPE_ULONGINT: arg = a.arg[dp->arg_index].a.a_ulongint; break; case TYPE_ULONGLONGINT: arg = a.arg[dp->arg_index].a.a_ulonglongint; break; case TYPE_UINT8_T: arg = a.arg[dp->arg_index].a.a_uint8_t; break; case TYPE_UINT16_T: arg = a.arg[dp->arg_index].a.a_uint16_t; break; case TYPE_UINT32_T: arg = a.arg[dp->arg_index].a.a_uint32_t; break; case TYPE_UINT64_T: arg = a.arg[dp->arg_index].a.a_uint64_t; break; case TYPE_UINT_FAST8_T: arg = a.arg[dp->arg_index].a.a_uint_fast8_t; break; case TYPE_UINT_FAST16_T: arg = a.arg[dp->arg_index].a.a_uint_fast16_t; break; case TYPE_UINT_FAST32_T: arg = a.arg[dp->arg_index].a.a_uint_fast32_t; break; case TYPE_UINT_FAST64_T: arg = a.arg[dp->arg_index].a.a_uint_fast64_t; break; default: abort (); } int need_prefix = ((flags & FLAG_ALT) && arg != 0); p = tmp_end; /* "The result of converting a zero value with a precision of zero is no characters." */ if (!(has_precision && precision == 0 && arg == 0)) { do { *--p = '0' + (arg & 1); arg = arg >> 1; } while (arg != 0); } if (has_precision) { DCHAR_T *digits_start = tmp_end - precision; while (p > digits_start) *--p = '0'; } pad_ptr = p; if (need_prefix) { # if NEED_PRINTF_DIRECTIVE_B && !NEED_PRINTF_DIRECTIVE_UPPERCASE_B *--p = 'b'; # elif NEED_PRINTF_DIRECTIVE_UPPERCASE_B && !NEED_PRINTF_DIRECTIVE_B *--p = 'B'; # else *--p = dp->conversion; # endif *--p = '0'; } tmp_start = p; /* The generated string now extends from tmp_start to tmp_end, with the zero padding insertion point being at pad_ptr, tmp_start <= pad_ptr <= tmp_end. */ count = tmp_end - tmp_start; if (count < width) { size_t pad = width - count; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (p = tmp_start; p < tmp_end; p++) *(p - pad) = *p; for (p = tmp_end - pad; p < tmp_end; p++) *p = ' '; } else if ((flags & FLAG_ZERO) /* Neither ISO C nor POSIX specify that the '0' flag is ignored when a width and a precision are both present. But most implementations do so. */ && !(has_width && has_precision)) { /* Pad with zeroes. */ for (p = tmp_start; p < pad_ptr; p++) *(p - pad) = *p; for (p = pad_ptr - pad; p < pad_ptr; p++) *p = '0'; } else { /* Pad with spaces on the left. */ for (p = tmp_start - pad; p < tmp_start; p++) *p = ' '; } tmp_start = tmp_start - pad; } count = tmp_end - tmp_start; if (count > tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp_start, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } #endif #if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) else if ((dp->conversion == 'a' || dp->conversion == 'A') # if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # endif # if NEED_PRINTF_LONG_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # endif ) # endif ) { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; size_t width; int has_precision; size_t precision; size_t tmp_length; size_t count; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* Allocate a temporary buffer of sufficient size. */ if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) ((LDBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) ((DBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; if (type == TYPE_LONGDOUBLE) { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || (NEED_WPRINTF_DIRECTIVE_LA && WIDE_CHAR_VERSION) long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; long double mantissa; if (arg > 0.0L) mantissa = printf_frexpl (arg, &exponent); else { exponent = 0; mantissa = 0.0L; } if (has_precision && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ long double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5L : tail > 0.5L) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0L; } if (tail != 0.0L) for (q = precision; q > 0; q--) tail *= 0.0625L; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0L || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0L) { mantissa *= 16.0L; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION && DCHAR_IS_TCHAR { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } END_LONG_DOUBLE_ROUNDING (); } # else abort (); # endif } else { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE double arg = a.arg[dp->arg_index].a.a_double; if (isnand (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; double mantissa; if (arg > 0.0) mantissa = printf_frexp (arg, &exponent); else { exponent = 0; mantissa = 0.0; } if (has_precision && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5 : tail > 0.5) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0; } if (tail != 0.0) for (q = precision; q > 0; q--) tail *= 0.0625; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0 || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0) { mantissa *= 16.0; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION && DCHAR_IS_TCHAR { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } } # else abort (); # endif } /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ count = p - tmp; if (count < width) { size_t pad = width - count; DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } #endif #if NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE else if ((dp->conversion == 'f' || dp->conversion == 'F' || dp->conversion == 'e' || dp->conversion == 'E' || dp->conversion == 'g' || dp->conversion == 'G' || dp->conversion == 'a' || dp->conversion == 'A') && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # elif NEED_PRINTF_INFINITE_DOUBLE || (a.arg[dp->arg_index].type == TYPE_DOUBLE /* The systems (mingw) which produce wrong output for Inf, -Inf, and NaN also do so for -0.0. Therefore we treat this case here as well. */ && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) # endif # if NEED_PRINTF_LONG_DOUBLE || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # elif NEED_PRINTF_INFINITE_LONG_DOUBLE || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE /* Some systems produce wrong output for Inf, -Inf, and NaN. Some systems in this category (IRIX 5.3) also do so for -0.0. Therefore we treat this case here as well. */ && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) # endif )) { # if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) arg_type type = a.arg[dp->arg_index].type; # endif int flags = dp->flags; size_t width; size_t count; int has_precision; size_t precision; size_t tmp_length; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* POSIX specifies the default precision to be 6 for %f, %F, %e, %E, but not for %g, %G. Implementations appear to use the same default precision also for %g, %G. But for %a, %A, the default precision is 0. */ if (!has_precision) if (!(dp->conversion == 'a' || dp->conversion == 'A')) precision = 6; /* Allocate a temporary buffer of sufficient size. */ # if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); # elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); # elif NEED_PRINTF_LONG_DOUBLE tmp_length = LDBL_DIG + 1; # elif NEED_PRINTF_DOUBLE tmp_length = DBL_DIG + 1; # else tmp_length = 0; # endif if (tmp_length < precision) tmp_length = precision; # if NEED_PRINTF_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (!(isnanl (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10l (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif # if NEED_PRINTF_DOUBLE # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE if (type == TYPE_DOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { double arg = a.arg[dp->arg_index].a.a_double; if (!(isnand (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10 (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_LONG_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_long_double (arg, precision); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0L) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0L. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)precision - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ if (is_borderline (digits, precision)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_long_double (arg, (int)precision - exponent + 1); if (digits2 == NULL) { free (digits); END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } if (strlen (digits2) == precision + 1) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION && DCHAR_IS_TCHAR { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0L) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0L. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ if (is_borderline (digits, precision - 1)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_long_double (arg, (int)(precision - 1) - exponent + 1); if (digits2 == NULL) { free (digits); END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } if (strlen (digits2) == precision) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t ecount = exponent + 1; /* Note: count <= precision = ndigits. */ for (; ecount > 0; ecount--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t ecount = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; ecount > 0; ecount--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION && DCHAR_IS_TCHAR { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } free (digits); } } else abort (); # else /* arg is finite. */ if (!(arg == 0.0L)) abort (); pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else if (dp->conversion == 'e' || dp->conversion == 'E') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion; /* 'e' or 'E' */ *p++ = '+'; *p++ = '0'; *p++ = '0'; } else if (dp->conversion == 'g' || dp->conversion == 'G') { *p++ = '0'; if (flags & FLAG_ALT) { size_t ndigits = (precision > 0 ? precision - 1 : 0); *p++ = decimal_point_char (); for (; ndigits > 0; --ndigits) *p++ = '0'; } } else if (dp->conversion == 'a' || dp->conversion == 'A') { *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion - 'A' + 'P'; *p++ = '+'; *p++ = '0'; } else abort (); # endif } END_LONG_DOUBLE_ROUNDING (); } } # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE else # endif # endif # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE { double arg = a.arg[dp->arg_index].a.a_double; if (isnand (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_double (arg, precision); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)precision - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ if (is_borderline (digits, precision)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_double (arg, (int)precision - exponent + 1); if (digits2 == NULL) { free (digits); goto out_of_memory; } if (strlen (digits2) == precision + 1) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION && DCHAR_IS_TCHAR { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ if (is_borderline (digits, precision - 1)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_double (arg, (int)(precision - 1) - exponent + 1); if (digits2 == NULL) { free (digits); goto out_of_memory; } if (strlen (digits2) == precision) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t ecount = exponent + 1; /* Note: ecount <= precision = ndigits. */ for (; ecount > 0; ecount--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t ecount = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; ecount > 0; ecount--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION && DCHAR_IS_TCHAR { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } free (digits); } } else abort (); # else /* arg is finite. */ if (!(arg == 0.0)) abort (); pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else if (dp->conversion == 'e' || dp->conversion == 'E') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion; /* 'e' or 'E' */ *p++ = '+'; /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ *p++ = '0'; # endif *p++ = '0'; *p++ = '0'; } else if (dp->conversion == 'g' || dp->conversion == 'G') { *p++ = '0'; if (flags & FLAG_ALT) { size_t ndigits = (precision > 0 ? precision - 1 : 0); *p++ = decimal_point_char (); for (; ndigits > 0; --ndigits) *p++ = '0'; } } else abort (); # endif } } } # endif /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ count = p - tmp; if (count < width) { size_t pad = width - count; DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } #endif else { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; #if (WIDE_CHAR_VERSION && MUSL_LIBC) || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int has_width; #endif #if !USE_SNPRINTF || WIDE_CHAR_VERSION || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION size_t width; #endif #if !USE_SNPRINTF || (WIDE_CHAR_VERSION && DCHAR_IS_TCHAR) || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (WIDE_CHAR_VERSION && MUSL_LIBC) || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int has_precision; size_t precision; #endif #if NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int prec_ourselves; #else # define prec_ourselves 0 #endif #if (WIDE_CHAR_VERSION && MUSL_LIBC) || NEED_PRINTF_FLAG_LEFTADJUST # define pad_ourselves 1 #elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int pad_ourselves; #else # define pad_ourselves 0 #endif TCHAR_T *fbp; unsigned int prefix_count; int prefixes[2] IF_LINT (= { 0 }); int orig_errno; #if !USE_SNPRINTF size_t tmp_length; TCHAR_T tmpbuf[700]; TCHAR_T *tmp; #endif #if (WIDE_CHAR_VERSION && MUSL_LIBC) || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_width = 0; #endif #if !USE_SNPRINTF || WIDE_CHAR_VERSION || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } # if (WIDE_CHAR_VERSION && MUSL_LIBC) || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_width = 1; # endif } #endif #if !USE_SNPRINTF || (WIDE_CHAR_VERSION && DCHAR_IS_TCHAR) || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (WIDE_CHAR_VERSION && MUSL_LIBC) || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } #endif /* Decide whether to handle the precision ourselves. */ #if NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION switch (dp->conversion) { # if NEED_PRINTF_UNBOUNDED_PRECISION case 'd': case 'i': case 'u': case 'b': #if SUPPORT_GNU_PRINTF_DIRECTIVES \ || (__GLIBC__ + (__GLIBC_MINOR__ >= 35) > 2) case 'B': #endif case 'o': prec_ourselves = has_precision && (precision > 0); break; # endif case 'x': case 'X': case 'p': prec_ourselves = has_precision && (0 # if NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || (precision == 0) # endif # if NEED_PRINTF_UNBOUNDED_PRECISION || (precision > 0) # endif ); break; default: prec_ourselves = 0; break; } #endif /* Decide whether to perform the padding ourselves. */ #if !((WIDE_CHAR_VERSION && MUSL_LIBC) || NEED_PRINTF_FLAG_LEFTADJUST) && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) switch (dp->conversion) { # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need to perform the padding after this conversion. Functions with unistdio extensions perform the padding based on character count rather than element count. */ case 'c': case 's': # endif # if NEED_PRINTF_FLAG_ZERO case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': # endif pad_ourselves = 1; break; default: pad_ourselves = prec_ourselves; break; } #endif #if !USE_SNPRINTF /* Allocate a temporary buffer of sufficient size for calling sprintf. */ tmp_length = MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, flags, width, has_precision, precision, pad_ourselves); if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (TCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } #endif /* Construct the format string for calling snprintf or sprintf. */ fbp = buf; *fbp++ = '%'; #if NEED_PRINTF_FLAG_GROUPING /* The underlying implementation doesn't support the ' flag. Produce no grouping characters in this case; this is acceptable because the grouping is locale dependent. */ #else if (flags & FLAG_GROUP) *fbp++ = '\''; #endif if (flags & FLAG_LEFT) *fbp++ = '-'; if (flags & FLAG_SHOWSIGN) *fbp++ = '+'; if (flags & FLAG_SPACE) *fbp++ = ' '; if (flags & FLAG_ALT) *fbp++ = '#'; #if __GLIBC__ >= 2 && !defined __UCLIBC__ if (flags & FLAG_LOCALIZED) *fbp++ = 'I'; #endif if (!pad_ourselves) { if (flags & FLAG_ZERO) *fbp++ = '0'; if (dp->width_start != dp->width_end) { size_t n = dp->width_end - dp->width_start; /* The width specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->width_start; do *fbp++ = *mp++; while (--n > 0); } } } if (!prec_ourselves) { if (dp->precision_start != dp->precision_end) { size_t n = dp->precision_end - dp->precision_start; /* The precision specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->precision_start; do *fbp++ = *mp++; while (--n > 0); } } } switch (type) { case TYPE_LONGLONGINT: case TYPE_ULONGLONGINT: #if INT8_WIDTH > LONG_WIDTH case TYPE_INT8_T: #endif #if UINT8_WIDTH > LONG_WIDTH case TYPE_UINT8_T: #endif #if INT16_WIDTH > LONG_WIDTH case TYPE_INT16_T: #endif #if UINT16_WIDTH > LONG_WIDTH case TYPE_UINT16_T: #endif #if INT32_WIDTH > LONG_WIDTH case TYPE_INT32_T: #endif #if UINT32_WIDTH > LONG_WIDTH case TYPE_UINT32_T: #endif #if INT64_WIDTH > LONG_WIDTH case TYPE_INT64_T: #endif #if UINT64_WIDTH > LONG_WIDTH case TYPE_UINT64_T: #endif #if INT_FAST8_WIDTH > LONG_WIDTH case TYPE_INT_FAST8_T: #endif #if UINT_FAST8_WIDTH > LONG_WIDTH case TYPE_UINT_FAST8_T: #endif #if INT_FAST16_WIDTH > LONG_WIDTH case TYPE_INT_FAST16_T: #endif #if UINT_FAST16_WIDTH > LONG_WIDTH case TYPE_UINT_FAST16_T: #endif #if INT_FAST32_WIDTH > LONG_WIDTH case TYPE_INT3_FAST2_T: #endif #if UINT_FAST32_WIDTH > LONG_WIDTH case TYPE_UINT_FAST32_T: #endif #if INT_FAST64_WIDTH > LONG_WIDTH case TYPE_INT_FAST64_T: #endif #if UINT_FAST64_WIDTH > LONG_WIDTH case TYPE_UINT_FAST64_T: #endif #if defined _WIN32 && ! defined __CYGWIN__ *fbp++ = 'I'; *fbp++ = '6'; *fbp++ = '4'; break; #else *fbp++ = 'l'; #endif FALLTHROUGH; case TYPE_LONGINT: case TYPE_ULONGINT: #if INT8_WIDTH > INT_WIDTH && INT8_WIDTH <= LONG_WIDTH case TYPE_INT8_T: #endif #if UINT8_WIDTH > INT_WIDTH && UINT8_WIDTH <= LONG_WIDTH case TYPE_UINT8_T: #endif #if INT16_WIDTH > INT_WIDTH && INT16_WIDTH <= LONG_WIDTH case TYPE_INT16_T: #endif #if UINT16_WIDTH > INT_WIDTH && UINT16_WIDTH <= LONG_WIDTH case TYPE_UINT16_T: #endif #if INT32_WIDTH > INT_WIDTH && INT32_WIDTH <= LONG_WIDTH case TYPE_INT32_T: #endif #if UINT32_WIDTH > INT_WIDTH && UINT32_WIDTH <= LONG_WIDTH case TYPE_UINT32_T: #endif #if INT64_WIDTH > INT_WIDTH && INT64_WIDTH <= LONG_WIDTH case TYPE_INT64_T: #endif #if UINT64_WIDTH > INT_WIDTH && UINT64_WIDTH <= LONG_WIDTH case TYPE_UINT64_T: #endif #if INT_FAST8_WIDTH > INT_WIDTH && INT_FAST8_WIDTH <= LONG_WIDTH case TYPE_INT_FAST8_T: #endif #if UINT_FAST8_WIDTH > INT_WIDTH && UINT_FAST8_WIDTH <= LONG_WIDTH case TYPE_UINT_FAST8_T: #endif #if INT_FAST16_WIDTH > INT_WIDTH && INT_FAST16_WIDTH <= LONG_WIDTH case TYPE_INT_FAST16_T: #endif #if UINT_FAST16_WIDTH > INT_WIDTH && UINT_FAST16_WIDTH <= LONG_WIDTH case TYPE_UINT_FAST16_T: #endif #if INT_FAST32_WIDTH > INT_WIDTH && INT_FAST32_WIDTH <= LONG_WIDTH case TYPE_INT_FAST32_T: #endif #if UINT_FAST32_WIDTH > INT_WIDTH && UINT_FAST32_WIDTH <= LONG_WIDTH case TYPE_UINT_FAST32_T: #endif #if INT_FAST64_WIDTH > INT_WIDTH && INT_FAST64_WIDTH <= LONG_WIDTH case TYPE_INT_FAST64_T: #endif #if UINT_FAST64_WIDTH > INT_WIDTH && UINT_FAST64_WIDTH <= LONG_WIDTH case TYPE_UINT_FAST64_T: #endif #if HAVE_WINT_T case TYPE_WIDE_CHAR: #endif #if HAVE_WCHAR_T case TYPE_WIDE_STRING: #endif *fbp++ = 'l'; break; case TYPE_LONGDOUBLE: *fbp++ = 'L'; break; default: break; } #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') *fbp = 'f'; else #endif *fbp = dp->conversion; #if USE_SNPRINTF /* Decide whether to pass %n in the format string to SNPRINTF. */ # if (((!WIDE_CHAR_VERSION || !DCHAR_IS_TCHAR) \ && (HAVE_SNPRINTF_RETVAL_C99 && HAVE_SNPRINTF_TRUNCATION_C99)) \ || ((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) \ && !defined __UCLIBC__) \ || (defined __APPLE__ && defined __MACH__) \ || defined __OpenBSD__ \ || defined __ANDROID__ \ || (defined _WIN32 && ! defined __CYGWIN__)) \ || (WIDE_CHAR_VERSION && MUSL_LIBC) /* We can avoid passing %n and instead rely on SNPRINTF's return value if - !WIDE_CHAR_VERSION || !DCHAR_IS_TCHAR, because otherwise, when WIDE_CHAR_VERSION && DCHAR_IS_TCHAR, snwprintf()/_snwprintf() (Windows) and swprintf() (Unix) don't return the needed buffer size, and - we're compiling for a system where we know - that snprintf's return value conforms to ISO C 99 (HAVE_SNPRINTF_RETVAL_C99) and - that snprintf always produces NUL-terminated strings (HAVE_SNPRINTF_TRUNCATION_C99). And it is desirable to do so, because more and more platforms no longer support %n, for "security reasons". */ /* On specific platforms, listed below, we *must* avoid %n. In the case !WIDE_CHAR_VERSION && HAVE_SNPRINTF_RETVAL_C99 && !USE_MSVC__SNPRINTF we can rely on the return value of snprintf instead. Whereas in the opposite case WIDE_CHAR_VERSION || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF we need to make room based on an estimation, computed by MAX_ROOM_NEEDED. */ /* The following platforms forbid %n: - On glibc2 systems from 2004-10-18 or newer, the use of %n in format strings in writable memory may crash the program (if compiled with _FORTIFY_SOURCE=2). - On macOS 10.13 or newer, the use of %n in format strings in writable memory by default crashes the program. - On OpenBSD, since 2021-08-30, the use of %n in format strings produces an abort (see <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/vfprintf.c.diff?r1=1.79&r2=1.80&f=h>, <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/vfwprintf.c.diff?r1=1.20&r2=1.21&f=h>). - On Android, starting on 2018-03-07, the use of %n in format strings produces a fatal error (see <https://android.googlesource.com/platform/bionic/+/41398d03b7e8e0dfb951660ae713e682e9fc0336>). - On native Windows systems (such as mingw) where the OS is Windows Vista, the use of %n in format strings by default crashes the program. See <https://gcc.gnu.org/ml/gcc/2007-06/msg00122.html> and <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/set-printf-count-output> On the first four of these platforms, if !WIDE_CHAR_VERSION, it is not a big deal to avoid %n, because on these platforms, HAVE_SNPRINTF_RETVAL_C99 and HAVE_SNPRINTF_TRUNCATION_C99 are 1. On native Windows, if !WIDE_CHAR_VERSION, it's not a big deal either because: - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, snprintf does not write more than the specified number of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes '4', '5', '6' into buf, not '4', '5', '\0'.) - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf allows us to recognize the case of an insufficient buffer size: it returns -1 in this case. */ /* Additionally, in the WIDE_CHAR_VERSION case, we cannot use %n on musl libc because we would run into an swprintf() bug. See <https://www.openwall.com/lists/musl/2023/03/19/1>. */ fbp[1] = '\0'; # else /* AIX <= 5.1, HP-UX, IRIX, OSF/1, Solaris <= 9, BeOS */ fbp[1] = '%'; fbp[2] = 'n'; fbp[3] = '\0'; # endif #else fbp[1] = '\0'; #endif /* Construct the arguments for calling snprintf or sprintf. */ prefix_count = 0; if (!pad_ourselves && dp->width_arg_index != ARG_NONE) { if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; } if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) { if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; } #if USE_SNPRINTF /* The SNPRINTF result is appended after result[0..length]. The latter is an array of DCHAR_T; SNPRINTF appends an array of TCHAR_T to it. This is possible because sizeof (TCHAR_T) divides sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). */ # define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) /* Ensure that maxlen below will be >= 2. Needed on BeOS, where an snprintf() with maxlen==1 acts like sprintf(). */ ENSURE_ALLOCATION (xsum (length, (2 + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR)); /* Prepare checking whether snprintf returns the count via %n. */ *(TCHAR_T *) (result + length) = '\0'; #endif orig_errno = errno; for (;;) { int count = -1; #if USE_SNPRINTF int retcount = 0; size_t maxlen = allocated - length; /* SNPRINTF can fail if its second argument is > INT_MAX. */ if (maxlen > INT_MAX / TCHARS_PER_DCHAR) maxlen = INT_MAX / TCHARS_PER_DCHAR; maxlen = maxlen * TCHARS_PER_DCHAR; # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ arg, &count); \ break; \ case 1: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], arg, &count); \ break; \ case 2: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], prefixes[1], arg, \ &count); \ break; \ default: \ abort (); \ } #else # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ count = sprintf (tmp, buf, arg); \ break; \ case 1: \ count = sprintf (tmp, buf, prefixes[0], arg); \ break; \ case 2: \ count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ arg); \ break; \ default: \ abort (); \ } #endif errno = 0; switch (type) { case TYPE_SCHAR: { int arg = a.arg[dp->arg_index].a.a_schar; SNPRINTF_BUF (arg); } break; case TYPE_UCHAR: { unsigned int arg = a.arg[dp->arg_index].a.a_uchar; SNPRINTF_BUF (arg); } break; case TYPE_SHORT: { int arg = a.arg[dp->arg_index].a.a_short; SNPRINTF_BUF (arg); } break; case TYPE_USHORT: { unsigned int arg = a.arg[dp->arg_index].a.a_ushort; SNPRINTF_BUF (arg); } break; case TYPE_INT: { int arg = a.arg[dp->arg_index].a.a_int; SNPRINTF_BUF (arg); } break; case TYPE_UINT: { unsigned int arg = a.arg[dp->arg_index].a.a_uint; SNPRINTF_BUF (arg); } break; case TYPE_LONGINT: { long int arg = a.arg[dp->arg_index].a.a_longint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGINT: { unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; SNPRINTF_BUF (arg); } break; case TYPE_LONGLONGINT: { long long int arg = a.arg[dp->arg_index].a.a_longlongint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGLONGINT: { unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; SNPRINTF_BUF (arg); } break; case TYPE_INT8_T: { int8_t arg = a.arg[dp->arg_index].a.a_int8_t; SNPRINTF_BUF (arg); } break; case TYPE_UINT8_T: { uint8_t arg = a.arg[dp->arg_index].a.a_uint8_t; SNPRINTF_BUF (arg); } break; case TYPE_INT16_T: { int16_t arg = a.arg[dp->arg_index].a.a_int16_t; SNPRINTF_BUF (arg); } break; case TYPE_UINT16_T: { uint16_t arg = a.arg[dp->arg_index].a.a_uint16_t; SNPRINTF_BUF (arg); } break; case TYPE_INT32_T: { int32_t arg = a.arg[dp->arg_index].a.a_int32_t; SNPRINTF_BUF (arg); } break; case TYPE_UINT32_T: { uint32_t arg = a.arg[dp->arg_index].a.a_uint32_t; SNPRINTF_BUF (arg); } break; case TYPE_INT64_T: { int64_t arg = a.arg[dp->arg_index].a.a_int64_t; SNPRINTF_BUF (arg); } break; case TYPE_UINT64_T: { uint64_t arg = a.arg[dp->arg_index].a.a_uint64_t; SNPRINTF_BUF (arg); } break; case TYPE_INT_FAST8_T: { int_fast8_t arg = a.arg[dp->arg_index].a.a_int_fast8_t; SNPRINTF_BUF (arg); } break; case TYPE_UINT_FAST8_T: { uint_fast8_t arg = a.arg[dp->arg_index].a.a_uint_fast8_t; SNPRINTF_BUF (arg); } break; case TYPE_INT_FAST16_T: { int_fast16_t arg = a.arg[dp->arg_index].a.a_int_fast16_t; SNPRINTF_BUF (arg); } break; case TYPE_UINT_FAST16_T: { uint_fast16_t arg = a.arg[dp->arg_index].a.a_uint_fast16_t; SNPRINTF_BUF (arg); } break; case TYPE_INT_FAST32_T: { int_fast32_t arg = a.arg[dp->arg_index].a.a_int_fast32_t; SNPRINTF_BUF (arg); } break; case TYPE_UINT_FAST32_T: { uint_fast32_t arg = a.arg[dp->arg_index].a.a_uint_fast32_t; SNPRINTF_BUF (arg); } break; case TYPE_INT_FAST64_T: { int_fast64_t arg = a.arg[dp->arg_index].a.a_int_fast64_t; SNPRINTF_BUF (arg); } break; case TYPE_UINT_FAST64_T: { uint_fast64_t arg = a.arg[dp->arg_index].a.a_uint_fast64_t; SNPRINTF_BUF (arg); } break; case TYPE_DOUBLE: { double arg = a.arg[dp->arg_index].a.a_double; SNPRINTF_BUF (arg); } break; case TYPE_LONGDOUBLE: { long double arg = a.arg[dp->arg_index].a.a_longdouble; SNPRINTF_BUF (arg); } break; case TYPE_CHAR: { int arg = a.arg[dp->arg_index].a.a_char; SNPRINTF_BUF (arg); } break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: { wint_t arg = a.arg[dp->arg_index].a.a_wide_char; SNPRINTF_BUF (arg); } break; #endif case TYPE_STRING: { const char *arg = a.arg[dp->arg_index].a.a_string; SNPRINTF_BUF (arg); } break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; SNPRINTF_BUF (arg); } break; #endif case TYPE_POINTER: { void *arg = a.arg[dp->arg_index].a.a_pointer; SNPRINTF_BUF (arg); } break; default: abort (); } #if USE_SNPRINTF /* Portability: Not all implementations of snprintf() are ISO C 99 compliant. Determine the number of bytes that snprintf() has produced or would have produced. */ if (count >= 0) { /* Verify that snprintf() has NUL-terminated its result. */ if ((unsigned int) count < maxlen && ((TCHAR_T *) (result + length)) [count] != '\0') abort (); /* Portability hack. */ if (retcount > count) count = retcount; } else { /* snprintf() doesn't understand the '%n' directive. */ if (fbp[1] != '\0') { /* Don't use the '%n' directive; instead, look at the snprintf() return value. */ fbp[1] = '\0'; continue; } else { /* Look at the snprintf() return value. */ if (retcount < 0) { # if (WIDE_CHAR_VERSION && DCHAR_IS_TCHAR) || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF /* HP-UX 10.20 snprintf() is doubly deficient: It doesn't understand the '%n' directive, *and* it returns -1 (rather than the length that would have been required) when the buffer is too small. Likewise, in case of WIDE_CHAR_VERSION && DCHAR_IS_TCHAR, the functions snwprintf()/_snwprintf() (Windows) or swprintf() (Unix). But a failure at this point can also come from other reasons than a too small buffer, such as an invalid wide string argument to the %ls directive, or possibly an invalid floating-point argument. */ size_t tmp_length = MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, flags, width, has_precision, precision, pad_ourselves); if (maxlen < tmp_length) { /* Make more room. But try to do through this reallocation only once. */ size_t bigger_need = xsum (length, xsum (tmp_length, TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR); /* And always grow proportionally. (There may be several arguments, each needing a little more room than the previous one.) */ size_t bigger_need2 = xsum (xtimes (allocated, 2), 12); if (bigger_need < bigger_need2) bigger_need = bigger_need2; ENSURE_ALLOCATION (bigger_need); continue; } # endif } else { count = retcount; # if WIDE_CHAR_VERSION && defined __MINGW32__ if (count == 0 && dp->conversion == 'c') /* snwprintf returned 0 instead of 1. But it wrote a null wide character. */ count = 1; # endif } } } #endif /* Attempt to handle failure. */ if (count < 0) { /* SNPRINTF or sprintf failed. Use the errno that it has set, if any. */ if (errno == 0) { if (dp->conversion == 'c' || dp->conversion == 's') errno = EILSEQ; else errno = EINVAL; } goto fail_with_errno; } #if USE_SNPRINTF /* Handle overflow of the allocated buffer. If such an overflow occurs, a C99 compliant snprintf() returns a count >= maxlen. However, a non-compliant snprintf() function returns only count = maxlen - 1. To cover both cases, test whether count >= maxlen - 1. */ if ((unsigned int) count + 1 >= maxlen) { /* If maxlen already has attained its allowed maximum, allocating more memory will not increase maxlen. Instead of looping, bail out. */ if (maxlen == INT_MAX / TCHARS_PER_DCHAR) goto overflow; else { /* Need at least (count + 1) * sizeof (TCHAR_T) bytes. (The +1 is for the trailing NUL.) But ask for (count + 2) * sizeof (TCHAR_T) bytes, so that in the next round, we likely get maxlen > (unsigned int) count + 1 and so we don't get here again. And allocate proportionally, to avoid looping eternally if snprintf() reports a too small count. */ size_t n = xmax (xsum (length, ((unsigned int) count + 2 + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); continue; } } #endif #if NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION if (prec_ourselves) { /* Handle the precision. */ TCHAR_T *prec_ptr = # if USE_SNPRINTF (TCHAR_T *) (result + length); # else tmp; # endif size_t prefix_count; size_t move; prefix_count = 0; /* Put the additional zeroes after the sign. */ if (count >= 1 && (*prec_ptr == '-' || *prec_ptr == '+' || *prec_ptr == ' ')) prefix_count = 1; /* Put the additional zeroes after the 0x prefix if (flags & FLAG_ALT) || (dp->conversion == 'p'). */ else if (count >= 2 && prec_ptr[0] == '0' && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) prefix_count = 2; move = count - prefix_count; if (precision > move) { /* Insert zeroes. */ size_t insert = precision - move; TCHAR_T *prec_end; # if USE_SNPRINTF size_t n = xsum (length, (count + insert + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR); length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; ENSURE_ALLOCATION (n); length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; prec_ptr = (TCHAR_T *) (result + length); # endif prec_end = prec_ptr + count; prec_ptr += prefix_count; while (prec_end > prec_ptr) { prec_end--; prec_end[insert] = prec_end[0]; } prec_end += insert; do *--prec_end = '0'; while (prec_end > prec_ptr); count += insert; } # if NEED_PRINTF_FLAG_ALT_PRECISION_ZERO else if (precision == 0 && move == 1 && prec_ptr[prefix_count] == '0') { /* Replace the "0" result with an empty string. */ count = prefix_count; } # endif } #endif #if !USE_SNPRINTF if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); #endif #if !DCHAR_IS_TCHAR /* Convert from TCHAR_T[] to DCHAR_T[]. */ if (dp->conversion == 'c' || dp->conversion == 's' # if __GLIBC__ >= 2 && !defined __UCLIBC__ || (flags & FLAG_LOCALIZED) # endif ) { /* The result string is not guaranteed to be ASCII. */ const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t tmpdst_len; /* This code assumes that TCHAR_T is 'char'. */ static_assert (sizeof (TCHAR_T) == 1); # if USE_SNPRINTF tmpsrc = (TCHAR_T *) (result + length); # else tmpsrc = tmp; # endif # if WIDE_CHAR_VERSION /* Convert tmpsrc[0..count-1] to a freshly allocated wide character array. */ mbstate_t state; mbszero (&state); tmpdst_len = 0; { const TCHAR_T *src = tmpsrc; size_t srclen = count; for (; srclen > 0; tmpdst_len++) { /* Parse the next multibyte character. */ size_t ret = mbrtowc (NULL, src, srclen, &state); if (ret == (size_t)(-2) || ret == (size_t)(-1)) goto fail_with_EILSEQ; if (ret == 0) ret = 1; src += ret; srclen -= ret; } } tmpdst = (wchar_t *) malloc ((tmpdst_len + 1) * sizeof (wchar_t)); if (tmpdst == NULL) goto out_of_memory; mbszero (&state); { DCHAR_T *destptr = tmpdst; const TCHAR_T *src = tmpsrc; size_t srclen = count; for (; srclen > 0; destptr++) { /* Parse the next multibyte character. */ size_t ret = mbrtowc (destptr, src, srclen, &state); if (ret == (size_t)(-2) || ret == (size_t)(-1)) /* Should already have been caught in the first loop, above. */ abort (); if (ret == 0) ret = 1; src += ret; srclen -= ret; } } # else tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, count, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) goto fail_with_errno; # endif ENSURE_ALLOCATION_ELSE (xsum (length, tmpdst_len), { free (tmpdst); goto out_of_memory; }); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); count = tmpdst_len; } else { /* The result string is ASCII. Simple 1:1 conversion. */ # if USE_SNPRINTF /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a no-op conversion, in-place on the array starting at (result + length). */ if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) # endif { const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t n; # if USE_SNPRINTF if (result == resultbuf) { tmpsrc = (TCHAR_T *) (result + length); /* ENSURE_ALLOCATION will not move tmpsrc (because it's part of resultbuf). */ ENSURE_ALLOCATION (xsum (length, count)); } else { /* ENSURE_ALLOCATION will move the array (because it uses realloc(). */ ENSURE_ALLOCATION (xsum (length, count)); tmpsrc = (TCHAR_T *) (result + length); } # else tmpsrc = tmp; ENSURE_ALLOCATION (xsum (length, count)); # endif tmpdst = result + length; /* Copy backwards, because of overlapping. */ tmpsrc += count; tmpdst += count; for (n = count; n > 0; n--) *--tmpdst = *--tmpsrc; } } #endif #if DCHAR_IS_TCHAR && !USE_SNPRINTF /* Make room for the result. */ if (count > allocated - length) { /* Need at least count elements. But allocate proportionally. */ size_t n = xmax (xsum (length, count), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); } #endif /* Here count <= allocated - length. */ /* Perform padding. */ #if (WIDE_CHAR_VERSION && MUSL_LIBC) || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_FLAG_ALT_PRECISION_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION if (pad_ourselves && has_width) { size_t w; # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, count); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = count; # endif if (w < width) { size_t pad = width - w; /* Make room for the result. */ if (xsum (count, pad) > allocated - length) { /* Need at least count + pad elements. But allocate proportionally. */ size_t n = xmax (xsum3 (length, count, pad), xtimes (allocated, 2)); # if USE_SNPRINTF length += count; ENSURE_ALLOCATION (n); length -= count; # else ENSURE_ALLOCATION (n); # endif } /* Here count + pad <= allocated - length. */ { # if !DCHAR_IS_TCHAR || USE_SNPRINTF DCHAR_T * const rp = result + length; # else DCHAR_T * const rp = tmp; # endif DCHAR_T *p = rp + count; DCHAR_T *end = p + pad; DCHAR_T *pad_ptr; # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO if (dp->conversion == 'c' || dp->conversion == 's') /* No zero-padding for string directives. */ pad_ptr = NULL; else # endif { pad_ptr = (*rp == '-' ? rp + 1 : rp); /* No zero-padding of "inf" and "nan". */ if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) pad_ptr = NULL; else /* Do the zero-padding after the "0x" or "0b" prefix, not before. */ if (p - rp >= 2 && *rp == '0' && (((dp->conversion == 'a' || dp->conversion == 'x') && rp[1] == 'x') || ((dp->conversion == 'A' || dp->conversion == 'X') && rp[1] == 'X') || (dp->conversion == 'b' && rp[1] == 'b') || (dp->conversion == 'B' && rp[1] == 'B'))) pad_ptr += 2; } /* The generated string now extends from rp to p, with the zero padding insertion point being at pad_ptr. */ count = count + pad; /* = end - rp */ if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL /* ISO C says: "For d, i, o, u, x, and X conversions, if a precision is specified, the 0 flag is ignored. */ && !(has_precision && (dp->conversion == 'd' || dp->conversion == 'i' || dp->conversion == 'o' || dp->conversion == 'u' || dp->conversion == 'x' || dp->conversion == 'X' /* Although ISO C does not require it, treat 'b' and 'B' like 'x' and 'X'. */ || dp->conversion == 'b' || dp->conversion == 'B'))) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > rp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } } } } #endif /* Here still count <= allocated - length. */ #if !DCHAR_IS_TCHAR || USE_SNPRINTF /* The snprintf() result did fit. */ #else /* Append the sprintf() result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); #endif #if !USE_SNPRINTF if (tmp != tmpbuf) free (tmp); #endif #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') { /* Convert the %f result to upper case for %F. */ DCHAR_T *rp = result + length; size_t rc; for (rc = count; rc > 0; rc--, rp++) if (*rp >= 'a' && *rp <= 'z') *rp = *rp - 'a' + 'A'; } #endif length += count; break; } errno = orig_errno; #undef pad_ourselves #undef prec_ourselves } } } /* Add the final NUL. */ ENSURE_ALLOCATION (xsum (length, 1)); result[length] = '\0'; if (result != resultbuf && length + 1 < allocated) { /* Shrink the allocated memory if possible. */ DCHAR_T *memory; memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); if (memory != NULL) result = memory; } if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); *lengthp = length; /* Note that we can produce a big string of a length > INT_MAX. POSIX says that snprintf() fails with errno = EOVERFLOW in this case, but that's only because snprintf() returns an 'int'. This function does not have this limitation. */ return result; #if USE_SNPRINTF overflow: errno = EOVERFLOW; goto fail_with_errno; #endif out_of_memory: errno = ENOMEM; goto fail_with_errno; #if ENABLE_UNISTDIO || ((!USE_SNPRINTF || WIDE_CHAR_VERSION || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_DIRECTIVE_LS || ENABLE_WCHAR_FALLBACK) && HAVE_WCHAR_T) || ((NEED_PRINTF_DIRECTIVE_LC || ENABLE_WCHAR_FALLBACK) && HAVE_WINT_T && !WIDE_CHAR_VERSION) || (NEED_WPRINTF_DIRECTIVE_C && WIDE_CHAR_VERSION) fail_with_EILSEQ: errno = EILSEQ; goto fail_with_errno; #endif fail_with_errno: if (result != resultbuf) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } out_of_memory_1: errno = ENOMEM; goto fail_1_with_errno; fail_1_with_EINVAL: errno = EINVAL; goto fail_1_with_errno; fail_1_with_errno: CLEANUP (); return NULL; } #undef MAX_ROOM_NEEDED #undef TCHARS_PER_DCHAR #undef SNPRINTF #undef USE_SNPRINTF #undef DCHAR_SET #undef DCHAR_CPY #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef DCHAR_IS_TCHAR #undef TCHAR_T #undef DCHAR_T #undef FCHAR_T #undef VASNPRINTF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/vsnprintf.c����������������������������������������������������������0000644�0001750�0001750�00000003602�14557510505�014441� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 2004, 2006-2024 Free Software Foundation, Inc. Written by Simon Josefsson and Yoann Vandoorselaere <yoann@prelude-ids.org>. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include <string.h> #include "vasnprintf.h" /* Print formatted output to string STR. Similar to vsprintf, but additional length SIZE limit how much is written into STR. Returns string length of formatted string (which may be larger than SIZE). STR may be NULL, in which case nothing will be written. On error, return a negative value. */ int vsnprintf (char *str, size_t size, const char *format, va_list args) { char *output; size_t len; size_t lenbuf = size; output = vasnprintf (str, &lenbuf, format, args); len = lenbuf; if (!output) return -1; if (output != str) { if (size) { size_t pruned_len = (len < size ? len : size - 1); memcpy (str, output, pruned_len); str[pruned_len] = '\0'; } free (output); } if (len > INT_MAX) { errno = EOVERFLOW; return -1; } return len; } ������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/alloca.in.h����������������������������������������������������������0000644�0001750�0001750�00000004674�14557510504�014266� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocation on the stack. Copyright (C) 1995, 1999, 2001-2004, 2006-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H means there is a real alloca function. */ #ifndef _GL_ALLOCA_H #define _GL_ALLOCA_H /* alloca (N) returns a pointer to N bytes of memory allocated on the stack, which will last until the function returns. Use of alloca should be avoided: - inside arguments of function calls - undefined behaviour, - in inline functions - the allocation may actually last until the calling function returns, - for huge N (say, N >= 65536) - you never know how large (or small) the stack is, and when the stack cannot fulfill the memory allocation request, the program just crashes. */ #ifndef alloca /* Some version of mingw have an <alloca.h> that causes trouble when included after 'alloca' gets defined as a macro. As a workaround, include this <alloca.h> first and define 'alloca' as a macro afterwards if needed. */ # if defined __GNUC__ && (defined _WIN32 && ! defined __CYGWIN__) && @HAVE_ALLOCA_H@ # include_next <alloca.h> # endif #endif #ifndef alloca # if defined __GNUC__ || (__clang_major__ >= 4) # define alloca __builtin_alloca # elif defined _AIX # define alloca __alloca # elif defined _MSC_VER # include <malloc.h> # define alloca _alloca # elif defined __DECC && defined __VMS # define alloca __ALLOCA # elif defined __TANDEM && defined _TNS_E_TARGET # ifdef __cplusplus extern "C" # endif void *_alloca (unsigned short); # pragma intrinsic (_alloca) # define alloca _alloca # elif defined __MVS__ # include <stdlib.h> # else # include <stddef.h> # ifdef __cplusplus extern "C" # endif void *alloca (size_t); # endif #endif #endif /* _GL_ALLOCA_H */ ��������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/assert.in.h����������������������������������������������������������0000644�0001750�0001750�00000002025�14557510504�014320� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <assert.h> Copyright (C) 2011-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Do not guard the include, since <assert.h> is supposed to define the assert macro each time it is included. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #@INCLUDE_NEXT@ @NEXT_ASSERT_H@ /* The definition of static_assert is copied here. */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/verify.h�������������������������������������������������������������0000644�0001750�0001750�00000035765�14557510505�013740� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile-time assert-like macros. Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ #ifndef _GL_VERIFY_H #define _GL_VERIFY_H /* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC) works as per C11. This is supported by GCC 4.6.0+ and by clang 4+. Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as per C23. This is supported by GCC 9.1+. Support compilers claiming conformance to the relevant standard, and also support GCC when not pedantic. If we were willing to slow 'configure' down we could also use it with other compilers, but since this affects only the quality of diagnostics, why bother? */ #ifndef __cplusplus # if (201112 <= __STDC_VERSION__ \ || (!defined __STRICT_ANSI__ \ && (4 < __GNUC__ + (6 <= __GNUC_MINOR__) || 5 <= __clang_major__))) # define _GL_HAVE__STATIC_ASSERT 1 # endif # if (202311 <= __STDC_VERSION__ \ || (!defined __STRICT_ANSI__ && 9 <= __GNUC__)) # define _GL_HAVE__STATIC_ASSERT1 1 # endif #endif /* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other system headers, defines a conflicting _Static_assert that is no better than ours; override it. */ #ifndef _GL_HAVE__STATIC_ASSERT # include <stddef.h> # undef _Static_assert #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. If _Static_assert works, verify (R) uses it directly. Similarly, _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct that is an operand of sizeof. The code below uses several ideas for C++ compilers, and for C compilers that do not support _Static_assert: * The first step is ((R) ? 1 : -1). Given an expression R, of integral or boolean or floating-point type, this yields an expression of integral type, whose value is later verified to be constant and nonnegative. * Next this expression W is wrapped in a type struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: W; }. If W is negative, this yields a compile-time error. No compiler can deal with a bit-field of negative size. One might think that an array size check would have the same effect, that is, that the type struct { unsigned int dummy[W]; } would work as well. However, inside a function, some compilers (such as C++ compilers and GNU C) allow local parameters and variables inside array size expressions. With these compilers, an array size check would not properly diagnose this misuse of the verify macro: void function (int n) { verify (n < 0); } * For the verify macro, the struct _gl_verify_type will need to somehow be embedded into a declaration. To be portable, this declaration must declare an object, a constant, a function, or a typedef name. If the declared entity uses the type directly, such as in struct dummy {...}; typedef struct {...} dummy; extern struct {...} *dummy; extern void dummy (struct {...} *); extern struct {...} *dummy (void); two uses of the verify macro would yield colliding declarations if the entity names are not disambiguated. A workaround is to attach the current line number to the entity name: #define _GL_CONCAT0(x, y) x##y #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) extern struct {...} * _GL_CONCAT (dummy, __LINE__); But this has the problem that two invocations of verify from within the same macro would collide, since the __LINE__ value would be the same for both invocations. (The GCC __COUNTER__ macro solves this problem, but is not portable.) A solution is to use the sizeof operator. It yields a number, getting rid of the identity of the type. Declarations like extern int dummy [sizeof (struct {...})]; extern void dummy (int [sizeof (struct {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; can be repeated. * Should the implementation use a named struct or an unnamed struct? Which of the following alternatives can be used? extern int dummy [sizeof (struct {...})]; extern int dummy [sizeof (struct _gl_verify_type {...})]; extern void dummy (int [sizeof (struct {...})]); extern void dummy (int [sizeof (struct _gl_verify_type {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; In the second and sixth case, the struct type is exported to the outer scope; two such declarations therefore collide. GCC warns about the first, third, and fourth cases. So the only remaining possibility is the fifth case: extern int (*dummy (void)) [sizeof (struct {...})]; * GCC warns about duplicate declarations of the dummy function if -Wredundant-decls is used. GCC 4.3 and later have a builtin __COUNTER__ macro that can let us generate unique identifiers for each dummy function, to suppress this warning. * This implementation exploits the fact that older versions of GCC, which do not support _Static_assert, also do not warn about the last declaration mentioned above. * GCC warns if -Wnested-externs is enabled and 'verify' is used within a function body; but inside a function, you can always arrange to use verify_expr instead. * In C++, any struct definition inside sizeof is invalid. Use a template type to work around the problem. */ /* Concatenate two preprocessor tokens. */ #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) #define _GL_CONCAT0(x, y) x##y /* _GL_COUNTER is an integer, preferably one that changes each time we use it. Use __COUNTER__ if it works, falling back on __LINE__ otherwise. __LINE__ isn't perfect, but it's better than a constant. */ #if defined __COUNTER__ && __COUNTER__ != __COUNTER__ # define _GL_COUNTER __COUNTER__ #else # define _GL_COUNTER __LINE__ #endif /* Generate a symbol with the given prefix, making it unique if possible. */ #define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) /* Verify requirement R at compile-time, as an integer constant expression that returns 1. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. */ #define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) #ifdef __cplusplus # if !GNULIB_defined_struct__gl_verify_type template <int w> struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: w; }; # define GNULIB_defined_struct__gl_verify_type 1 # endif # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ _gl_verify_type<(R) ? 1 : -1> #elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { \ _Static_assert (R, DIAGNOSTIC); \ int _gl_dummy; \ } #else # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } #endif /* Verify requirement R at compile-time, as a declaration without a trailing ';'. If R is false, fail at compile-time. This macro requires three or more arguments but uses at most the first two, so that the _Static_assert macro optionally defined below supports both the C11 two-argument syntax and the C23 one-argument syntax. Unfortunately, unlike C11, this implementation must appear as an ordinary declaration, and cannot appear inside struct { ... }. */ #if 202311 <= __STDC_VERSION__ || 200410 <= __cpp_static_assert # define _GL_VERIFY(R, DIAGNOSTIC, ...) static_assert (R, DIAGNOSTIC) #elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC) #else # define _GL_VERIFY(R, DIAGNOSTIC, ...) \ extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] # if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wnested-externs" # endif #endif /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ #ifdef _GL_STATIC_ASSERT_H /* Define _Static_assert if needed. */ /* With clang ≥ 3.8.0 in C++ mode, _Static_assert already works and accepts 1 or 2 arguments. We better don't override it, because clang's standard C++ library uses static_assert inside classes in several places, and our replacement via _GL_VERIFY does not work in these contexts. */ # if (defined __cplusplus && defined __clang__ \ && (4 <= __clang_major__ + (8 <= __clang_minor__))) # if 5 <= __clang_major__ /* Avoid "warning: 'static_assert' with no message is a C++17 extension". */ # pragma clang diagnostic ignored "-Wc++17-extensions" # else /* Avoid "warning: static_assert with no message is a C++1z extension". */ # pragma clang diagnostic ignored "-Wc++1z-extensions" # endif # elif !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert # if !defined _MSC_VER || defined __clang__ # define _Static_assert(...) \ _GL_VERIFY (__VA_ARGS__, "static assertion failed", -) # else # if defined __cplusplus && _MSC_VER >= 1910 /* In MSVC 14.1 or newer, static_assert accepts one or two arguments, but _Static_assert is not defined. */ # define _Static_assert static_assert # else /* Work around MSVC preprocessor incompatibility with ISO C; see <https://stackoverflow.com/questions/5134523/>. */ # define _Static_assert(R, ...) \ _GL_VERIFY ((R), "static assertion failed", -) # endif # endif # endif /* Define static_assert if needed. */ # if (!defined static_assert \ && __STDC_VERSION__ < 202311 \ && (!defined __cplusplus \ || (__cpp_static_assert < 201411 \ && __GNUG__ < 6 && __clang_major__ < 6 && _MSC_VER < 1910))) # if defined __cplusplus && _MSC_VER >= 1900 && !defined __clang__ /* MSVC 14 in C++ mode supports the two-arguments static_assert but not the one-argument static_assert, and it does not support _Static_assert. We have to play preprocessor tricks to distinguish the two cases. Since the MSVC preprocessor is not ISO C compliant (see above),. the solution is specific to MSVC. */ # define _GL_EXPAND(x) x # define _GL_SA1(a1) static_assert ((a1), "static assertion failed") # define _GL_SA2 static_assert # define _GL_SA3 static_assert # define _GL_SA_PICK(x1,x2,x3,x4,...) x4 # define static_assert(...) _GL_EXPAND(_GL_SA_PICK(__VA_ARGS__,_GL_SA3,_GL_SA2,_GL_SA1)) (__VA_ARGS__) /* Avoid "fatal error C1189: #error: The C++ Standard Library forbids macroizing keywords." */ # define _ALLOW_KEYWORD_MACROS 1 # else # define static_assert _Static_assert /* C11 requires this #define. */ # endif # endif #endif /* @assert.h omit start@ */ #if defined __clang_major__ && __clang_major__ < 5 # define _GL_HAS_BUILTIN_TRAP 0 #elif 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)) # define _GL_HAS_BUILTIN_TRAP 1 #elif defined __has_builtin # define _GL_HAS_BUILTIN_TRAP __has_builtin (__builtin_trap) #else # define _GL_HAS_BUILTIN_TRAP 0 #endif #ifndef _GL_HAS_BUILTIN_UNREACHABLE # if defined __clang_major__ && __clang_major__ < 5 # define _GL_HAS_BUILTIN_UNREACHABLE 0 # elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__) # define _GL_HAS_BUILTIN_UNREACHABLE 1 # elif defined __has_builtin # define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) # else # define _GL_HAS_BUILTIN_UNREACHABLE 0 # endif #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. There are two macros, since no single macro can be used in all contexts in C. verify_expr (R, E) is for scalar contexts, including integer constant expression contexts. verify (R) is for declaration contexts, e.g., the top level. */ /* Verify requirement R at compile-time. Return the value of the expression E. */ #define verify_expr(R, E) \ (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) /* Verify requirement R at compile-time, as a declaration without a trailing ';'. verify (R) acts like static_assert (R) except that it is portable to C11/C++14 and earlier, it can issue better diagnostics, and its name is shorter and may be more convenient. */ #ifdef __PGI /* PGI barfs if R is long. */ # define verify(R) _GL_VERIFY (R, "verify (...)", -) #else # define verify(R) _GL_VERIFY (R, "verify (" #R ")", -) #endif /* Assume that R always holds. Behavior is undefined if R is false, fails to evaluate, or has side effects. 'assume (R)' is a directive from the programmer telling the compiler that R is true so the compiler needn't generate code to test R. This is why 'assume' is in verify.h: it's related to static checking (in this case, static checking done by the programmer), not dynamic checking. 'assume (R)' can affect compilation of all the code, not just code that happens to be executed after the assume (R) is "executed". For example, if the code mistakenly does 'assert (R); assume (R);' the compiler is entitled to optimize away the 'assert (R)'. Although assuming R can help a compiler generate better code or diagnostics, performance can suffer if R uses hard-to-optimize features such as function calls not inlined by the compiler. Avoid Clang's __builtin_assume, as it breaks GNU Emacs master as of 2020-08-23T21:09:49Z!eggert@cs.ucla.edu; see <https://bugs.gnu.org/43152#71>. It's not known whether this breakage is a Clang bug or an Emacs bug; play it safe for now. */ #if _GL_HAS_BUILTIN_UNREACHABLE # define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) #elif 1200 <= _MSC_VER # define assume(R) __assume (R) #elif 202311 <= __STDC_VERSION__ # include <stddef.h> # define assume(R) ((R) ? (void) 0 : unreachable ()) #elif (defined GCC_LINT || defined lint) && _GL_HAS_BUILTIN_TRAP /* Doing it this way helps various packages when configured with --enable-gcc-warnings, which compiles with -Dlint. It's nicer if 'assume' silences warnings with GCC 3.4 through GCC 4.4.7 (2012). */ # define assume(R) ((R) ? (void) 0 : __builtin_trap ()) #else /* Some older tools grok NOTREACHED, e.g., Oracle Studio 12.6 (2017). */ # define assume(R) ((R) ? (void) 0 : /*NOTREACHED*/ (void) 0) #endif /* @assert.h omit end@ */ #endif �����������gnuastro-0.22/bootstrapped/lib/assure.h�������������������������������������������������������������0000644�0001750�0001750�00000003621�14557510504�013717� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Run-time assert-like macros. Copyright (C) 2014-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef _GL_ASSURE_H #define _GL_ASSURE_H #include <assert.h> #include "verify.h" /* Evaluate an assertion E that is guaranteed to be true. If NDEBUG is not defined, abort the program if E is false. If NDEBUG is defined, the compiler can assume E and behavior is undefined if E is false, fails to evaluate, or has side effects. Unlike standard 'assert', this macro evaluates E even when NDEBUG is defined, so as to catch typos, avoid some GCC warnings, and improve performance when E is simple enough. Also see the documentation for 'assume' in verify.h. */ #ifdef NDEBUG # define affirm(E) assume (E) #else # define affirm(E) assert (E) #endif /* Check E's value at runtime, and report an error and abort if not. However, do nothing if NDEBUG is defined. Unlike standard 'assert', this macro compiles E even when NDEBUG is defined, so as to catch typos and avoid some GCC warnings. Unlike 'affirm', it is OK for E to use hard-to-optimize features, since E is not executed if NDEBUG is defined. */ #ifdef NDEBUG # define assure(E) ((void) (0 && (E))) #else # define assure(E) assert (E) #endif #endif ���������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/attribute.h����������������������������������������������������������0000644�0001750�0001750�00000023104�14557510504�014416� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ATTRIBUTE_* macros for using attributes in GCC and similar compilers Copyright 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* Provide public ATTRIBUTE_* names for the private _GL_ATTRIBUTE_* macros used within Gnulib. */ /* These attributes can be placed in two ways: - At the start of a declaration (i.e. even before storage-class specifiers!); then they apply to all entities that are declared by the declaration. - Immediately after the name of an entity being declared by the declaration; then they apply to that entity only. */ #ifndef _GL_ATTRIBUTE_H #define _GL_ATTRIBUTE_H /* This file defines two types of attributes: * C23 standard attributes. These have macro names that do not begin with 'ATTRIBUTE_'. * Selected GCC attributes; see: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html These names begin with 'ATTRIBUTE_' to avoid name clashes. */ /* This file uses _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_ALWAYS_INLINE, _GL_ATTRIBUTE_ARTIFICIAL, _GL_ATTRIBUTE_COLD, _GL_ATTRIBUTE_CONST, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_DEPRECATED, _GL_ATTRIBUTE_ERROR, _GL_ATTRIBUTE_WARNING, _GL_ATTRIBUTE_EXTERNALLY_VISIBLE, _GL_ATTRIBUTE_FALLTHROUGH, _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_LEAF, _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_MAY_ALIAS, _GL_ATTRIBUTE_MAYBE_UNUSED, _GL_ATTRIBUTE_NODISCARD, _GL_ATTRIBUTE_NOINLINE, _GL_ATTRIBUTE_NONNULL, _GL_ATTRIBUTE_NONSTRING, _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PACKED, _GL_ATTRIBUTE_PURE, _GL_ATTRIBUTE_RETURNS_NONNULL, _GL_ATTRIBUTE_SENTINEL. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* =============== Attributes for specific kinds of functions =============== */ /* Attributes for functions that should not be used. */ /* Warn if the entity is used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: namespace, class, template specialization. */ #define DEPRECATED _GL_ATTRIBUTE_DEPRECATED /* If a function call is not optimized way, warn with MSG. */ /* Applies to: functions. */ #define ATTRIBUTE_WARNING(msg) _GL_ATTRIBUTE_WARNING (msg) /* If a function call is not optimized way, report an error with MSG. */ /* Applies to: functions. */ #define ATTRIBUTE_ERROR(msg) _GL_ATTRIBUTE_ERROR (msg) /* Attributes for memory-allocating functions. */ /* The function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #define ATTRIBUTE_MALLOC _GL_ATTRIBUTE_MALLOC /* ATTRIBUTE_ALLOC_SIZE ((N)) - The Nth argument of the function is the size of the returned memory block. ATTRIBUTE_ALLOC_SIZE ((M, N)) - Multiply the Mth and Nth arguments to determine the size of the returned memory block. */ /* Applies to: function, pointer to function, function types. */ #define ATTRIBUTE_ALLOC_SIZE(args) _GL_ATTRIBUTE_ALLOC_SIZE (args) /* ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #define ATTRIBUTE_DEALLOC(f, i) _GL_ATTRIBUTE_DEALLOC(f, i) #define ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC_FREE /* Attributes for variadic functions. */ /* The variadic function expects a trailing NULL argument. ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ /* Applies to: functions. */ #define ATTRIBUTE_SENTINEL(pos) _GL_ATTRIBUTE_SENTINEL (pos) /* ================== Attributes for compiler diagnostics ================== */ /* Attributes that help the compiler diagnose programmer mistakes. Some of them may also help for some compiler optimizations. */ /* ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) - The STRING-INDEXth function argument is a format string of style ARCHETYPE, which is one of: printf, gnu_printf scanf, gnu_scanf, strftime, gnu_strftime, strfmon, or the same thing prefixed and suffixed with '__'. If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK are suitable for the format string. */ /* Applies to: functions. */ #define ATTRIBUTE_FORMAT(spec) _GL_ATTRIBUTE_FORMAT (spec) /* ATTRIBUTE_NONNULL ((N1, N2,...)) - Arguments N1, N2,... must not be NULL. ATTRIBUTE_NONNULL () - All pointer arguments must not be null. */ /* Applies to: functions. */ #define ATTRIBUTE_NONNULL(args) _GL_ATTRIBUTE_NONNULL (args) /* The function's return value is a non-NULL pointer. */ /* Applies to: functions. */ #define ATTRIBUTE_RETURNS_NONNULL _GL_ATTRIBUTE_RETURNS_NONNULL /* Warn if the caller does not use the return value, unless the caller uses something like ignore_value. */ /* Applies to: function, enumeration, class. */ #define NODISCARD _GL_ATTRIBUTE_NODISCARD /* Attributes that disable false alarms when the compiler diagnoses programmer "mistakes". */ /* Do not warn if the entity is not used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: class. */ #define MAYBE_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED /* The contents of a character array is not meant to be NUL-terminated. */ /* Applies to: struct/union members and variables that are arrays of element type '[[un]signed] char'. */ #define ATTRIBUTE_NONSTRING _GL_ATTRIBUTE_NONSTRING /* Do not warn if control flow falls through to the immediately following 'case' or 'default' label. */ /* Applies to: Empty statement (;), inside a 'switch' statement. */ #define FALLTHROUGH _GL_ATTRIBUTE_FALLTHROUGH /* ================== Attributes for debugging information ================== */ /* Attributes regarding debugging information emitted by the compiler. */ /* Omit the function from stack traces when debugging. */ /* Applies to: function. */ #define ATTRIBUTE_ARTIFICIAL _GL_ATTRIBUTE_ARTIFICIAL /* Make the entity visible to debuggers etc., even with '-fwhole-program'. */ /* Applies to: functions, variables. */ #define ATTRIBUTE_EXTERNALLY_VISIBLE _GL_ATTRIBUTE_EXTERNALLY_VISIBLE /* ========== Attributes that mainly direct compiler optimizations ========== */ /* The function does not throw exceptions. */ /* Applies to: functions. */ /* After a function's parameter list, this attribute must come first, before other attributes. */ #define ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_NOTHROW /* Do not inline the function. */ /* Applies to: functions. */ #define ATTRIBUTE_NOINLINE _GL_ATTRIBUTE_NOINLINE /* Always inline the function, and report an error if the compiler cannot inline. */ /* Applies to: function. */ #define ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE /* It is OK for a compiler to omit duplicate calls with the same arguments. This attribute is safe for a function that neither depends on nor affects observable state, and always returns exactly once - e.g., does not loop forever, and does not call longjmp. (This attribute is stricter than ATTRIBUTE_PURE.) */ /* Applies to: functions. */ #define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST /* It is OK for a compiler to omit duplicate calls with the same arguments if observable state is not changed between calls. This attribute is safe for a function that does not affect observable state, and always returns exactly once. (This attribute is looser than ATTRIBUTE_CONST.) */ /* Applies to: functions. */ #define ATTRIBUTE_PURE _GL_ATTRIBUTE_PURE /* The function is rarely executed. */ /* Applies to: functions. */ #define ATTRIBUTE_COLD _GL_ATTRIBUTE_COLD /* If called from some other compilation unit, the function executes code from that unit only by return or by exception handling, letting the compiler optimize that unit more aggressively. */ /* Applies to: functions. */ #define ATTRIBUTE_LEAF _GL_ATTRIBUTE_LEAF /* For struct members: The member has the smallest possible alignment. For struct, union, class: All members have the smallest possible alignment, minimizing the memory required. */ /* Applies to: struct members, struct, union, in C++ also: class. */ #define ATTRIBUTE_PACKED _GL_ATTRIBUTE_PACKED /* ================ Attributes that make invalid code valid ================ */ /* Attributes that prevent fatal compiler optimizations for code that is not fully ISO C compliant. */ /* Pointers to the type may point to the same storage as pointers to other types, thus disabling strict aliasing optimization. */ /* Applies to: types. */ #define ATTRIBUTE_MAY_ALIAS _GL_ATTRIBUTE_MAY_ALIAS #endif /* _GL_ATTRIBUTE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/basename-lgpl.h������������������������������������������������������0000644�0001750�0001750�00000005512�14557510504�015125� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extract the last component (base name) of a file name. Copyright (C) 1998, 2001, 2003-2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _BASENAME_LGPL_H #define _BASENAME_LGPL_H /* This file uses _GL_ATTRIBUTE_PURE. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <stddef.h> #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 #endif #ifdef __cplusplus extern "C" { #endif /* Return the address of the last file name component of FILENAME. If FILENAME has some trailing slash(es), they are considered to be part of the last component. If FILENAME has no relative file name components because it is a file system root, return the empty string. Examples: FILENAME RESULT "foo.c" "foo.c" "foo/bar.c" "bar.c" "/foo/bar.c" "bar.c" "foo/bar/" "bar/" "foo/bar//" "bar//" "/" "" "//" "" "" "" The return value is a tail of the given FILENAME; do NOT free() it! */ /* This function was traditionally called 'basename', but we avoid this function name because * Various platforms have different functions in their libc. In particular, the glibc basename(), defined in <string.h>, does not consider trailing slashes to be part of the component: FILENAME RESULT "foo/bar/" "" "foo/bar//" "" * The 'basename' command eliminates trailing slashes and for a root produces a non-empty result: FILENAME RESULT "foo/bar/" "bar" "foo/bar//" "bar" "/" "/" "//" "/" */ extern char *last_component (char const *filename) _GL_ATTRIBUTE_PURE; /* Return the length of the basename FILENAME. Typically FILENAME is the value returned by base_name or last_component. Act like strlen (FILENAME), except omit all trailing slashes. */ extern size_t base_len (char const *filename) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } /* extern "C" */ #endif #endif /* _BASENAME_LGPL_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32is-impl.h���������������������������������������������������������0000644�0001750�0001750�00000006335�14557510504�014304� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a 32-bit wide character belongs to a specific character class. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2020. */ #include <wchar.h> #include <wctype.h> #ifdef __CYGWIN__ # include <cygwin/version.h> #endif #if GNULIB_defined_mbstate_t # include "localcharset.h" # include "streq.h" #endif #if GL_CHAR32_T_IS_UNICODE # include "lc-charset-unicode.h" #endif #include "unictype.h" #if _GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t _GL_EXTERN_INLINE #endif int FUNC (wint_t wc) { /* The char32_t encoding of a multibyte character is defined by the way mbrtoc32() is defined. */ #if GNULIB_defined_mbstate_t /* AIX, IRIX */ /* mbrtoc32() is defined on top of mbtowc() for the non-UTF-8 locales and directly for the UTF-8 locales. */ if (wc != WEOF) { const char *encoding = locale_charset (); if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) return UCS_FUNC (wc); else return WCHAR_FUNC (wc); } else return 0; #elif HAVE_WORKING_MBRTOC32 /* glibc, Android */ /* mbrtoc32() is essentially defined by the system libc. */ # if _GL_WCHAR_T_IS_UCS4 /* The char32_t encoding of a multibyte character is known to be the same as the wchar_t encoding. */ return WCHAR_FUNC (wc); # else /* The char32_t encoding of a multibyte character is known to be UCS-4, different from the wchar_t encoding. */ if (wc != WEOF) return UCS_FUNC (wc); else return 0; # endif #elif _GL_SMALL_WCHAR_T /* Cygwin, mingw, MSVC */ /* The wchar_t encoding is UTF-16. The char32_t encoding is UCS-4. */ # if defined __CYGWIN__ && CYGWIN_VERSION_DLL_MAJOR >= 1007 /* As an extension to POSIX, the iswalnum() function of Cygwin >= 1.7 supports also wc arguments outside the Unicode BMP, that is, outside the 'wchar_t' range. See <https://lists.gnu.org/archive/html/bug-gnulib/2011-02/msg00019.html> = <https://cygwin.com/ml/cygwin/2011-02/msg00044.html>. */ return WCHAR_FUNC (wc); # else if (wc == WEOF || wc == (wchar_t) wc) /* wc is in the range for the isw* functions. */ return WCHAR_FUNC (wc); else return UCS_FUNC (wc); # endif #else /* macOS, FreeBSD, NetBSD, OpenBSD, HP-UX, Solaris, Minix, Android */ /* char32_t and wchar_t are equivalent. */ static_assert (sizeof (char32_t) == sizeof (wchar_t)); # if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION return UCS_FUNC (wc); # else return WCHAR_FUNC (wc); # endif #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c32to-impl.h���������������������������������������������������������0000644�0001750�0001750�00000005345�14557510505�014314� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case mapping of a 32-bit wide character. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2023. */ #include <wchar.h> #include <wctype.h> #if GNULIB_defined_mbstate_t # include "localcharset.h" # include "streq.h" #endif #if GL_CHAR32_T_IS_UNICODE # include "lc-charset-unicode.h" #endif #include "unicase.h" #if _GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t _GL_EXTERN_INLINE #endif wint_t FUNC (wint_t wc) { /* The char32_t encoding of a multibyte character is defined by the way mbrtoc32() is defined. */ #if GNULIB_defined_mbstate_t /* AIX, IRIX */ /* mbrtoc32() is defined on top of mbtowc() for the non-UTF-8 locales and directly for the UTF-8 locales. */ if (wc != WEOF) { const char *encoding = locale_charset (); if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) return UCS_FUNC (wc); else return WCHAR_FUNC (wc); } else return wc; #elif HAVE_WORKING_MBRTOC32 /* glibc, Android */ /* mbrtoc32() is essentially defined by the system libc. */ # if _GL_WCHAR_T_IS_UCS4 /* The char32_t encoding of a multibyte character is known to be the same as the wchar_t encoding. */ return WCHAR_FUNC (wc); # else /* The char32_t encoding of a multibyte character is known to be UCS-4, different from the wchar_t encoding. */ if (wc != WEOF) return UCS_FUNC (wc); else return wc; # endif #elif _GL_SMALL_WCHAR_T /* Cygwin, mingw, MSVC */ /* The wchar_t encoding is UTF-16. The char32_t encoding is UCS-4. */ if (wc == WEOF || wc == (wchar_t) wc) /* wc is in the range for the tow* functions. */ return WCHAR_FUNC (wc); else return UCS_FUNC (wc); #else /* macOS, FreeBSD, NetBSD, OpenBSD, HP-UX, Solaris, Minix, Android */ /* char32_t and wchar_t are equivalent. */ static_assert (sizeof (char32_t) == sizeof (wchar_t)); # if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION return UCS_FUNC (wc); # else return WCHAR_FUNC (wc); # endif #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/chdir-long.h���������������������������������������������������������0000644�0001750�0001750�00000002070�14557510505�014441� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a chdir function that tries not to fail due to ENAMETOOLONG Copyright (C) 2004-2005, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <unistd.h> #include <limits.h> #include "pathmax.h" /* On systems without PATH_MAX, presume that chdir accepts arbitrarily long directory names. */ #ifndef PATH_MAX # define chdir_long(Dir) chdir (Dir) #else int chdir_long (char *dir); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/cloexec.h������������������������������������������������������������0000644�0001750�0001750�00000002727�14557510505�014046� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* cloexec.c - set or clear the close-on-exec descriptor flag Copyright (C) 2004, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, or clear the flag if VALUE is false. Return 0 on success, or -1 on error with 'errno' set. Note that on MingW, this function does NOT protect DESC from being inherited into spawned children. Instead, either use dup_cloexec followed by closing the original DESC, or use interfaces such as open or pipe2 that accept flags like O_CLOEXEC to create DESC non-inheritable in the first place. */ int set_cloexec_flag (int desc, bool value); /* Duplicates a file handle FD, while marking the copy to be closed prior to exec or spawn. Returns -1 and sets errno if FD could not be duplicated. */ int dup_cloexec (int fd); �����������������������������������������gnuastro-0.22/bootstrapped/lib/dirent.in.h����������������������������������������������������������0000644�0001750�0001750�00000026775�14557510505�014327� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <dirent.h>. Copyright (C) 2006-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_DIRENT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_DIRENT_H@ # @INCLUDE_NEXT@ @NEXT_DIRENT_H@ #endif #ifndef _@GUARD_PREFIX@_DIRENT_H #define _@GUARD_PREFIX@_DIRENT_H /* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Get ino_t. Needed on some systems, including glibc 2.8. */ #include <sys/types.h> #if !@HAVE_DIRENT_H@ /* Define types DIR and 'struct dirent'. */ # if !GNULIB_defined_struct_dirent struct dirent { char d_type; char d_name[1]; }; /* Possible values for 'd_type'. */ # define DT_UNKNOWN 0 # define DT_FIFO 1 /* FIFO */ # define DT_CHR 2 /* character device */ # define DT_DIR 4 /* directory */ # define DT_BLK 6 /* block device */ # define DT_REG 8 /* regular file */ # define DT_LNK 10 /* symbolic link */ # define DT_SOCK 12 /* socket */ # define DT_WHT 14 /* whiteout */ # define GNULIB_defined_struct_dirent 1 # endif #endif #if !@DIR_HAS_FD_MEMBER@ # if !GNULIB_defined_DIR /* struct gl_directory is a type with a field 'int fd_to_close'. It is needed for implementing fdopendir(). */ struct gl_directory; # if @HAVE_DIRENT_H@ # define DIR struct gl_directory # else typedef struct gl_directory DIR; # endif # define GNULIB_defined_DIR 1 # endif #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_CLOSEDIR@ # if @REPLACE_CLOSEDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef closedir # define closedir rpl_closedir # define GNULIB_defined_closedir 1 # endif _GL_FUNCDECL_RPL (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (closedir, int, (DIR *dirp)); # else # if !@HAVE_CLOSEDIR@ _GL_FUNCDECL_SYS (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (closedir, int, (DIR *dirp)); # endif _GL_CXXALIASWARN (closedir); #elif defined GNULIB_POSIXCHECK # undef closedir # if HAVE_RAW_DECL_CLOSEDIR _GL_WARN_ON_USE (closedir, "closedir is not portable - " "use gnulib module closedir for portability"); # endif #endif #if @GNULIB_OPENDIR@ # if @REPLACE_OPENDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef opendir # define opendir rpl_opendir # define GNULIB_defined_opendir 1 # endif _GL_FUNCDECL_RPL (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); _GL_CXXALIAS_RPL (opendir, DIR *, (const char *dir_name)); # else # if !@HAVE_OPENDIR@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); # endif _GL_CXXALIAS_SYS (opendir, DIR *, (const char *dir_name)); # endif _GL_CXXALIASWARN (opendir); #else # if @GNULIB_CLOSEDIR@ && !GNULIB_defined_DIR && __GNUC__ >= 11 && !defined opendir /* For -Wmismatched-dealloc: Associate opendir with closedir or rpl_closedir. */ _GL_FUNCDECL_SYS (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); # endif # if defined GNULIB_POSIXCHECK # undef opendir # if HAVE_RAW_DECL_OPENDIR _GL_WARN_ON_USE (opendir, "opendir is not portable - " "use gnulib module opendir for portability"); # endif # endif #endif #if @GNULIB_READDIR@ # if @REPLACE_READDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef readdir # define readdir rpl_readdir # endif _GL_FUNCDECL_RPL (readdir, struct dirent *, (DIR *dirp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (readdir, struct dirent *, (DIR *dirp)); # else # if !@HAVE_READDIR@ _GL_FUNCDECL_SYS (readdir, struct dirent *, (DIR *dirp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (readdir, struct dirent *, (DIR *dirp)); # endif _GL_CXXALIASWARN (readdir); #elif defined GNULIB_POSIXCHECK # undef readdir # if HAVE_RAW_DECL_READDIR _GL_WARN_ON_USE (readdir, "readdir is not portable - " "use gnulib module readdir for portability"); # endif #endif #if @GNULIB_REWINDDIR@ # if @REPLACE_REWINDDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rewinddir # define rewinddir rpl_rewinddir # endif _GL_FUNCDECL_RPL (rewinddir, void, (DIR *dirp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (rewinddir, void, (DIR *dirp)); # else # if !@HAVE_REWINDDIR@ _GL_FUNCDECL_SYS (rewinddir, void, (DIR *dirp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (rewinddir, void, (DIR *dirp)); # endif _GL_CXXALIASWARN (rewinddir); #elif defined GNULIB_POSIXCHECK # undef rewinddir # if HAVE_RAW_DECL_REWINDDIR _GL_WARN_ON_USE (rewinddir, "rewinddir is not portable - " "use gnulib module rewinddir for portability"); # endif #endif #if @GNULIB_DIRFD@ /* Return the file descriptor associated with the given directory stream, or -1 if none exists. */ # if @REPLACE_DIRFD@ /* On kLIBC, dirfd() is a macro that does not work. Undefine it. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) || defined dirfd # undef dirfd # define dirfd rpl_dirfd # endif _GL_FUNCDECL_RPL (dirfd, int, (DIR *) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (dirfd, int, (DIR *)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined dirfd /* dirfd is defined as a macro and not as a function. Turn it into a function and get rid of the macro. */ static inline int (dirfd) (DIR *dp) { return dirfd (dp); } # undef dirfd # endif # if !(@HAVE_DECL_DIRFD@ || defined dirfd) _GL_FUNCDECL_SYS (dirfd, int, (DIR *) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (dirfd, int, (DIR *)); # endif _GL_CXXALIASWARN (dirfd); #elif defined GNULIB_POSIXCHECK # undef dirfd # if HAVE_RAW_DECL_DIRFD _GL_WARN_ON_USE (dirfd, "dirfd is unportable - " "use gnulib module dirfd for portability"); # endif #endif #if @GNULIB_FDOPENDIR@ /* Open a directory stream visiting the given directory file descriptor. Return NULL and set errno if fd is not visiting a directory. On success, this function consumes fd (it will be implicitly closed either by this function or by a subsequent closedir). */ # if @REPLACE_FDOPENDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopendir # define fdopendir rpl_fdopendir # endif _GL_FUNCDECL_RPL (fdopendir, DIR *, (int fd) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); _GL_CXXALIAS_RPL (fdopendir, DIR *, (int fd)); # else # if !@HAVE_FDOPENDIR@ || !@HAVE_DECL_FDOPENDIR@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (fdopendir, DIR *, (int fd) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); # endif _GL_CXXALIAS_SYS (fdopendir, DIR *, (int fd)); # endif _GL_CXXALIASWARN (fdopendir); #else # if @GNULIB_CLOSEDIR@ && __GNUC__ >= 11 && !defined fdopendir /* For -Wmismatched-dealloc: Associate fdopendir with closedir or rpl_closedir. */ _GL_FUNCDECL_SYS (fdopendir, DIR *, (int fd) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); # endif # if defined GNULIB_POSIXCHECK # undef fdopendir # if HAVE_RAW_DECL_FDOPENDIR _GL_WARN_ON_USE (fdopendir, "fdopendir is unportable - " "use gnulib module fdopendir for portability"); # endif # endif #endif #if @GNULIB_SCANDIR@ /* Scan the directory DIR, calling FILTER on each directory entry. Entries for which FILTER returns nonzero are individually malloc'd, sorted using qsort with CMP, and collected in a malloc'd array in *NAMELIST. Returns the number of entries selected, or -1 on error. */ # if !@HAVE_SCANDIR@ _GL_FUNCDECL_SYS (scandir, int, (const char *dir, struct dirent ***namelist, int (*filter) (const struct dirent *), int (*cmp) (const struct dirent **, const struct dirent **)) _GL_ARG_NONNULL ((1, 2, 4))); # endif /* Need to cast, because on glibc systems, the fourth parameter is int (*cmp) (const void *, const void *). */ _GL_CXXALIAS_SYS_CAST (scandir, int, (const char *dir, struct dirent ***namelist, int (*filter) (const struct dirent *), int (*cmp) (const struct dirent **, const struct dirent **))); _GL_CXXALIASWARN (scandir); #elif defined GNULIB_POSIXCHECK # undef scandir # if HAVE_RAW_DECL_SCANDIR _GL_WARN_ON_USE (scandir, "scandir is unportable - " "use gnulib module scandir for portability"); # endif #endif #if @GNULIB_ALPHASORT@ /* Compare two 'struct dirent' entries alphabetically. */ # if !@HAVE_ALPHASORT@ _GL_FUNCDECL_SYS (alphasort, int, (const struct dirent **, const struct dirent **) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* Need to cast, because on glibc systems, the parameters are (const void *, const void *). */ _GL_CXXALIAS_SYS_CAST (alphasort, int, (const struct dirent **, const struct dirent **)); _GL_CXXALIASWARN (alphasort); #elif defined GNULIB_POSIXCHECK # undef alphasort # if HAVE_RAW_DECL_ALPHASORT _GL_WARN_ON_USE (alphasort, "alphasort is unportable - " "use gnulib module alphasort for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_DIRENT_H */ #endif /* _@GUARD_PREFIX@_DIRENT_H */ ���gnuastro-0.22/bootstrapped/lib/dirent-private.h�����������������������������������������������������0000644�0001750�0001750�00000004160�14557510505�015352� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Private details of the DIR type. Copyright (C) 2011-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _DIRENT_PRIVATE_H #define _DIRENT_PRIVATE_H 1 #if HAVE_DIRENT_H /* mingw */ # undef DIR struct gl_directory { /* File descriptor to close during closedir(). Needed for implementing fdopendir(). */ int fd_to_close; /* Pointer to the real DIR. */ DIR *real_dirp; }; /* Restore definition from dirent.h. */ # define DIR struct gl_directory #else /* MSVC */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Don't assume that UNICODE is not defined. */ # undef WIN32_FIND_DATA # define WIN32_FIND_DATA WIN32_FIND_DATAA struct gl_directory { /* File descriptor to close during closedir(). Needed for implementing fdopendir(). */ int fd_to_close; /* Status, or error code to produce in next readdir() call. -2 means the end of the directory is already reached, -1 means the entry was already filled by FindFirstFile, 0 means the entry needs to be filled using FindNextFile. A positive value is an error code. */ int status; /* Handle, reading the directory, at current position. */ HANDLE current; /* Found directory entry. */ WIN32_FIND_DATA entry; /* Argument to pass to FindFirstFile. It consists of the absolutized directory name, followed by a directory separator and the wildcards. */ char dir_name_mask[1]; }; #endif #endif /* _DIRENT_PRIVATE_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/errno.in.h�����������������������������������������������������������0000644�0001750�0001750�00000016447�14557510505�014162� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX-like <errno.h>. Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_ERRNO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_ERRNO_H@ #ifndef _@GUARD_PREFIX@_ERRNO_H #define _@GUARD_PREFIX@_ERRNO_H /* On native Windows platforms, many macros are not defined. */ # if defined _WIN32 && ! defined __CYGWIN__ /* These are the same values as defined by MSVC 10, for interoperability. */ # ifndef ENOMSG # define ENOMSG 122 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 111 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 121 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 134 # define GNULIB_defined_EPROTO 1 # endif # ifndef EBADMSG # define EBADMSG 104 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 132 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 129 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 117 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 106 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ECANCELED # define ECANCELED 105 # define GNULIB_defined_ECANCELED 1 # endif # ifndef EOWNERDEAD # define EOWNERDEAD 133 # define GNULIB_defined_EOWNERDEAD 1 # endif # ifndef ENOTRECOVERABLE # define ENOTRECOVERABLE 127 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EINPROGRESS # define EINPROGRESS 112 # define EALREADY 103 # define ENOTSOCK 128 # define EDESTADDRREQ 109 # define EMSGSIZE 115 # define EPROTOTYPE 136 # define ENOPROTOOPT 123 # define EPROTONOSUPPORT 135 # define EOPNOTSUPP 130 # define EAFNOSUPPORT 102 # define EADDRINUSE 100 # define EADDRNOTAVAIL 101 # define ENETDOWN 116 # define ENETUNREACH 118 # define ECONNRESET 108 # define ENOBUFS 119 # define EISCONN 113 # define ENOTCONN 126 # define ETIMEDOUT 138 # define ECONNREFUSED 107 # define ELOOP 114 # define EHOSTUNREACH 110 # define EWOULDBLOCK 140 # define GNULIB_defined_ESOCK 1 # endif # ifndef ETXTBSY # define ETXTBSY 139 # define ENODATA 120 /* not required by POSIX */ # define ENOSR 124 /* not required by POSIX */ # define ENOSTR 125 /* not required by POSIX */ # define ETIME 137 /* not required by POSIX */ # define EOTHER 131 /* not required by POSIX */ # define GNULIB_defined_ESTREAMS 1 # endif /* These are intentionally the same values as the WSA* error numbers, defined in <winsock2.h>. */ # define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ # define EPFNOSUPPORT 10046 /* not required by POSIX */ # define ESHUTDOWN 10058 /* not required by POSIX */ # define ETOOMANYREFS 10059 /* not required by POSIX */ # define EHOSTDOWN 10064 /* not required by POSIX */ # define EPROCLIM 10067 /* not required by POSIX */ # define EUSERS 10068 /* not required by POSIX */ # define EDQUOT 10069 # define ESTALE 10070 # define EREMOTE 10071 /* not required by POSIX */ # define GNULIB_defined_EWINSOCK 1 # endif /* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ # if @EMULTIHOP_HIDDEN@ # define EMULTIHOP @EMULTIHOP_VALUE@ # define GNULIB_defined_EMULTIHOP 1 # endif # if @ENOLINK_HIDDEN@ # define ENOLINK @ENOLINK_VALUE@ # define GNULIB_defined_ENOLINK 1 # endif # if @EOVERFLOW_HIDDEN@ # define EOVERFLOW @EOVERFLOW_VALUE@ # define GNULIB_defined_EOVERFLOW 1 # endif /* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. Likewise, on NonStop Kernel, EDQUOT is not defined. Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. Note: When one of these systems defines some of these macros some day, binaries will have to be recompiled so that they recognizes the new errno values from the system. */ # ifndef ENOMSG # define ENOMSG 2000 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 2001 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 2002 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 2003 # define GNULIB_defined_EPROTO 1 # endif # ifndef EMULTIHOP # define EMULTIHOP 2004 # define GNULIB_defined_EMULTIHOP 1 # endif # ifndef EBADMSG # define EBADMSG 2005 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 2006 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 2007 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 2011 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 2012 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ESTALE # define ESTALE 2009 # define GNULIB_defined_ESTALE 1 # endif # ifndef EDQUOT # define EDQUOT 2010 # define GNULIB_defined_EDQUOT 1 # endif # ifndef ECANCELED # define ECANCELED 2008 # define GNULIB_defined_ECANCELED 1 # endif /* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not defined. */ # ifndef EOWNERDEAD # if defined __sun /* Use the same values as defined for Solaris >= 8, for interoperability. */ # define EOWNERDEAD 58 # define ENOTRECOVERABLE 59 # elif defined _WIN32 && ! defined __CYGWIN__ /* We have a conflict here: pthreads-win32 defines these values differently than MSVC 10. It's hairy to decide which one to use. */ # if defined __MINGW32__ && !defined USE_WINDOWS_THREADS /* Use the same values as defined by pthreads-win32, for interoperability. */ # define EOWNERDEAD 43 # define ENOTRECOVERABLE 44 # else /* Use the same values as defined by MSVC 10, for interoperability. */ # define EOWNERDEAD 133 # define ENOTRECOVERABLE 127 # endif # else # define EOWNERDEAD 2013 # define ENOTRECOVERABLE 2014 # endif # define GNULIB_defined_EOWNERDEAD 1 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EILSEQ # define EILSEQ 2015 # define GNULIB_defined_EILSEQ 1 # endif #endif /* _@GUARD_PREFIX@_ERRNO_H */ #endif /* _@GUARD_PREFIX@_ERRNO_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/error.in.h�����������������������������������������������������������0000644�0001750�0001750�00000017751�14557510505�014165� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for error-reporting functions. Copyright (C) 1995-1997, 2003, 2006, 2008-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_ERROR_H /* No @PRAGMA_SYSTEM_HEADER@ here, because it would prevent -Wimplicit-fallthrough warnings for missing FALLTHROUGH after error(...) or error_at_line(...) invocations. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_ERROR_H@ # @INCLUDE_NEXT@ @NEXT_ERROR_H@ #endif #ifndef _@GUARD_PREFIX@_ERROR_H #define _@GUARD_PREFIX@_ERROR_H /* This file uses _GL_ATTRIBUTE_ALWAYS_INLINE, _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_MAYBE_UNUSED. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Get 'unreachable'. */ #include <stddef.h> /* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM. */ #include <stdio.h> /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ #if GNULIB_VFPRINTF_POSIX # define _GL_ATTRIBUTE_SPEC_PRINTF_ERROR _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD #else # define _GL_ATTRIBUTE_SPEC_PRINTF_ERROR _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM #endif /* Helper macro for supporting the compiler's control flow analysis better. It evaluates its arguments only once. Test case: Compile copy-file.c with "gcc -Wimplicit-fallthrough". */ #if defined __GNUC__ || defined __clang__ /* Use 'unreachable' to tell the compiler when the function call does not return. */ # define __gl_error_call1(function, status, ...) \ ((function) (status, __VA_ARGS__), \ (status) != 0 ? unreachable () : (void) 0) /* If STATUS is a not a constant, the function call may or may not return; therefore -Wimplicit-fallthrough will produce a warning. Use a compound statement in order to evaluate STATUS only once. If STATUS is a constant, we don't use a compound statement, because that would trigger a -Wimplicit-fallthrough warning even when STATUS is != 0, when not optimizing. This causes STATUS to be evaluated twice, but that's OK since it does not have side effects. */ # define __gl_error_call(function, status, ...) \ (__builtin_constant_p (status) \ ? __gl_error_call1 (function, status, __VA_ARGS__) \ : __extension__ \ ({ \ int const __errstatus = status; \ __gl_error_call1 (function, __errstatus, __VA_ARGS__); \ })) #else # define __gl_error_call(function, status, ...) \ (function) (status, __VA_ARGS__) #endif #ifdef __cplusplus extern "C" { #endif /* Print a message with 'fprintf (stderr, FORMAT, ...)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ #if @REPLACE_ERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef error # define error rpl_error # endif _GL_FUNCDECL_RPL (error, void, (int __status, int __errnum, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4))); _GL_CXXALIAS_RPL (error, void, (int __status, int __errnum, const char *__format, ...)); # ifndef _GL_NO_INLINE_ERROR # undef error # define error(status, ...) \ __gl_error_call (rpl_error, status, __VA_ARGS__) # endif #else # if ! @HAVE_ERROR@ _GL_FUNCDECL_SYS (error, void, (int __status, int __errnum, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4))); # endif _GL_CXXALIAS_SYS (error, void, (int __status, int __errnum, const char *__format, ...)); # ifndef _GL_NO_INLINE_ERROR # ifdef error /* Only gcc ≥ 4.7 has __builtin_va_arg_pack. */ # if _GL_GNUC_PREREQ (4, 7) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wattributes" _GL_ATTRIBUTE_MAYBE_UNUSED static void _GL_ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4)) _gl_inline_error (int __status, int __errnum, const char *__format, ...) { return error (__status, __errnum, __format, __builtin_va_arg_pack ()); } # pragma GCC diagnostic pop # undef error # define error(status, ...) \ __gl_error_call (_gl_inline_error, status, __VA_ARGS__) # endif # else # define error(status, ...) \ __gl_error_call (error, status, __VA_ARGS__) # endif # endif #endif #if __GLIBC__ >= 2 _GL_CXXALIASWARN (error); #endif /* Likewise. If FILENAME is non-NULL, include FILENAME:LINENO: in the message. */ #if @REPLACE_ERROR_AT_LINE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef error_at_line # define error_at_line rpl_error_at_line # endif _GL_FUNCDECL_RPL (error_at_line, void, (int __status, int __errnum, const char *__filename, unsigned int __lineno, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6))); _GL_CXXALIAS_RPL (error_at_line, void, (int __status, int __errnum, const char *__filename, unsigned int __lineno, const char *__format, ...)); # ifndef _GL_NO_INLINE_ERROR # undef error_at_line # define error_at_line(status, ...) \ __gl_error_call (rpl_error_at_line, status, __VA_ARGS__) # endif #else # if ! @HAVE_ERROR_AT_LINE@ _GL_FUNCDECL_SYS (error_at_line, void, (int __status, int __errnum, const char *__filename, unsigned int __lineno, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6))); # endif _GL_CXXALIAS_SYS (error_at_line, void, (int __status, int __errnum, const char *__filename, unsigned int __lineno, const char *__format, ...)); # ifndef _GL_NO_INLINE_ERROR # ifdef error_at_line /* Only gcc ≥ 4.7 has __builtin_va_arg_pack. */ # if _GL_GNUC_PREREQ (4, 7) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wattributes" _GL_ATTRIBUTE_MAYBE_UNUSED static void _GL_ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6)) _gl_inline_error_at_line (int __status, int __errnum, const char *__filename, unsigned int __lineno, const char *__format, ...) { return error_at_line (__status, __errnum, __filename, __lineno, __format, __builtin_va_arg_pack ()); } # pragma GCC diagnostic pop # undef error_at_line # define error_at_line(status, ...) \ __gl_error_call (_gl_inline_error_at_line, status, __VA_ARGS__) # endif # else # define error_at_line(status, ...) \ __gl_error_call (error_at_line, status, __VA_ARGS__) # endif # endif #endif _GL_CXXALIASWARN (error_at_line); /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ extern void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ extern unsigned int error_message_count; /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ extern int error_one_per_line; #ifdef __cplusplus } #endif #endif /* _@GUARD_PREFIX@_ERROR_H */ #endif /* _@GUARD_PREFIX@_ERROR_H */ �����������������������gnuastro-0.22/bootstrapped/lib/exitfail.h�����������������������������������������������������������0000644�0001750�0001750�00000001424�14557510505�014222� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Failure exit status Copyright (C) 2002, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ extern int volatile exit_failure; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/fcntl.in.h�����������������������������������������������������������0000644�0001750�0001750�00000031537�14557510505�014140� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like <fcntl.h>, but with non-working flags defined to 0. Copyright (C) 2006-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_fcntl_h /* Special invocation convention. */ /* Needed before <sys/stat.h>. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* On some systems other than glibc, <sys/stat.h> is a prerequisite of <fcntl.h>. On glibc systems, we would like to avoid namespace pollution. But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden <sys/stat.h> from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include <sys/stat.h> #endif #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ /* Native Windows platforms declare open(), creat() in <io.h>. */ #if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_FCNTL_H /* Needed before <sys/stat.h>. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* On some systems other than glibc, <sys/stat.h> is a prerequisite of <fcntl.h>. On glibc systems, we would like to avoid namespace pollution. But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden <sys/stat.h> from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include <sys/stat.h> #endif /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ /* Native Windows platforms declare open(), creat() in <io.h>. */ #if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif #ifndef _@GUARD_PREFIX@_FCNTL_H #define _@GUARD_PREFIX@_FCNTL_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ # include <unistd.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_CREAT@ # if @REPLACE_CREAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef creat # define creat rpl_creat # endif _GL_FUNCDECL_RPL (creat, int, (const char *filename, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (creat, int, (const char *filename, mode_t mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef creat # define creat _creat # endif _GL_CXXALIAS_MDA (creat, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (creat); #elif defined GNULIB_POSIXCHECK # undef creat /* Assume creat is always declared. */ _GL_WARN_ON_USE (creat, "creat is not always POSIX compliant - " "use gnulib module creat for portability"); #elif @GNULIB_MDA_CREAT@ /* On native Windows, map 'creat' to '_creat', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::creat always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef creat # define creat _creat # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (creat, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (creat); #endif #if @GNULIB_FCNTL@ # if @REPLACE_FCNTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcntl # define fcntl rpl_fcntl # endif _GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...)); _GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); # if !GNULIB_defined_rpl_fcntl # define GNULIB_defined_rpl_fcntl 1 # endif # else # if !@HAVE_FCNTL@ _GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); # if !GNULIB_defined_fcntl # define GNULIB_defined_fcntl 1 # endif # endif _GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); # endif _GL_CXXALIASWARN (fcntl); #elif defined GNULIB_POSIXCHECK # undef fcntl # if HAVE_RAW_DECL_FCNTL _GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - " "use gnulib module fcntl for portability"); # endif #endif #if @GNULIB_OPEN@ # if @REPLACE_OPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open rpl_open # endif _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open _open # endif _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); # else _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); # endif /* On HP-UX 11, in C++ mode, open() is defined as an inline function with a default argument. _GL_CXXALIASWARN does not work in this case. */ # if !defined __hpux _GL_CXXALIASWARN (open); # endif #elif defined GNULIB_POSIXCHECK # undef open /* Assume open is always declared. */ _GL_WARN_ON_USE (open, "open is not always POSIX compliant - " "use gnulib module open for portability"); #elif @GNULIB_MDA_OPEN@ /* On native Windows, map 'open' to '_open', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::open always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open _open # endif _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); # else _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); # endif # if !defined __hpux _GL_CXXALIASWARN (open); # endif #endif #if @GNULIB_OPENAT@ # if @REPLACE_OPENAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef openat # define openat rpl_openat # endif _GL_FUNCDECL_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # else # if !@HAVE_OPENAT@ _GL_FUNCDECL_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # endif _GL_CXXALIASWARN (openat); #elif defined GNULIB_POSIXCHECK # undef openat # if HAVE_RAW_DECL_OPENAT _GL_WARN_ON_USE (openat, "openat is not portable - " "use gnulib module openat for portability"); # endif #endif /* Fix up the FD_* macros, only known to be missing on mingw. */ #ifndef FD_CLOEXEC # define FD_CLOEXEC 1 #endif /* Fix up the supported F_* macros. Intentionally leave other F_* macros undefined. Only known to be missing on mingw. */ #ifndef F_DUPFD_CLOEXEC # define F_DUPFD_CLOEXEC 0x40000000 /* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */ # define GNULIB_defined_F_DUPFD_CLOEXEC 1 #else # define GNULIB_defined_F_DUPFD_CLOEXEC 0 #endif #ifndef F_DUPFD # define F_DUPFD 1 #endif #ifndef F_GETFD # define F_GETFD 2 #endif /* Fix up the O_* macros. */ /* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT to values outside 'int' range, so omit these misdefinitions. But avoid namespace pollution on non-AIX systems. */ #ifdef _AIX # include <limits.h> # if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX) # undef O_CLOEXEC # endif # if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX) # undef O_NOFOLLOW # endif # if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX) # undef O_TTY_INIT # endif #endif #if !defined O_DIRECT && defined O_DIRECTIO /* Tru64 spells it 'O_DIRECTIO'. */ # define O_DIRECT O_DIRECTIO #endif #if !defined O_CLOEXEC && defined O_NOINHERIT /* Mingw spells it 'O_NOINHERIT'. */ # define O_CLOEXEC O_NOINHERIT #endif #ifndef O_CLOEXEC # define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */ # define GNULIB_defined_O_CLOEXEC 1 #else # define GNULIB_defined_O_CLOEXEC 0 #endif #ifndef O_DIRECT # define O_DIRECT 0 #endif #ifndef O_DIRECTORY # define O_DIRECTORY 0 #endif #ifndef O_DSYNC # define O_DSYNC 0 #endif #ifndef O_EXEC # define O_EXEC O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_IGNORE_CTTY # define O_IGNORE_CTTY 0 #endif #ifndef O_NDELAY # define O_NDELAY 0 #endif #ifndef O_NOATIME # define O_NOATIME 0 #endif #ifndef O_NONBLOCK # define O_NONBLOCK O_NDELAY #endif /* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY or to 0 as fallback. */ #if @GNULIB_NONBLOCKING@ # if O_NONBLOCK # define GNULIB_defined_O_NONBLOCK 0 # else # define GNULIB_defined_O_NONBLOCK 1 # undef O_NONBLOCK # define O_NONBLOCK 0x40000000 # endif #endif #ifndef O_NOCTTY # define O_NOCTTY 0 #endif #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 #endif #ifndef O_NOLINK # define O_NOLINK 0 #endif #ifndef O_NOLINKS # define O_NOLINKS 0 #endif #ifndef O_NOTRANS # define O_NOTRANS 0 #endif #ifndef O_RSYNC # define O_RSYNC 0 #endif #ifndef O_SEARCH # define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_SYNC # define O_SYNC 0 #endif #ifndef O_TTY_INIT # define O_TTY_INIT 0 #endif #if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) # undef O_ACCMODE # define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) #endif /* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in fcntl.h */ #if !defined O_BINARY && defined _O_BINARY /* For MSC-compatible compilers. */ # define O_BINARY _O_BINARY # define O_TEXT _O_TEXT #endif #if defined __BEOS__ || defined __HAIKU__ /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ # undef O_BINARY # undef O_TEXT #endif #ifndef O_BINARY # define O_BINARY 0 # define O_TEXT 0 #endif /* Fix up the AT_* macros. */ /* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its value exceeds INT_MAX, so its use as an int doesn't conform to the C standard, and GCC and Sun C complain in some cases. If the bug is present, undef AT_FDCWD here, so it can be redefined below. */ #if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 # undef AT_FDCWD #endif /* Use the same bit pattern as Solaris 9, but with the proper signedness. The bit pattern is important, in case this actually is Solaris with the above workaround. */ #ifndef AT_FDCWD # define AT_FDCWD (-3041965) #endif /* Use the same values as Solaris 9. This shouldn't matter, but there's no real reason to differ. */ #ifndef AT_SYMLINK_NOFOLLOW # define AT_SYMLINK_NOFOLLOW 4096 #endif #ifndef AT_REMOVEDIR # define AT_REMOVEDIR 1 #endif /* Solaris 9 lacks these two, so just pick unique values. */ #ifndef AT_SYMLINK_FOLLOW # define AT_SYMLINK_FOLLOW 2 #endif #ifndef AT_EACCESS # define AT_EACCESS 4 #endif /* Ignore this flag if not supported. */ #ifndef AT_NO_AUTOMOUNT # define AT_NO_AUTOMOUNT 0 #endif #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/fd-hook.h������������������������������������������������������������0000644�0001750�0001750�00000011364�14557510505�013750� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hook for making file descriptor functions close(), ioctl() extensible. Copyright (C) 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef FD_HOOK_H #define FD_HOOK_H #ifdef __cplusplus extern "C" { #endif /* Currently, this entire code is only needed for the handling of sockets on native Windows platforms. */ #if WINDOWS_SOCKETS /* Type of function that closes FD. */ typedef int (*gl_close_fn) (int fd); /* Type of function that applies a control request to FD. */ typedef int (*gl_ioctl_fn) (int fd, int request, void *arg); /* An element of the list of file descriptor hooks. In CLOS (Common Lisp Object System) speak, it consists of an "around" method for the close() function and an "around" method for the ioctl() function. The fields of this structure are considered private. */ struct fd_hook { /* Doubly linked list. */ struct fd_hook *private_next; struct fd_hook *private_prev; /* Function that treats the types of FD that it knows about and calls execute_close_hooks (REMAINING_LIST, PRIMARY, FD) as a fallback. */ int (*private_close_fn) (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Function that treats the types of FD that it knows about and calls execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) as a fallback. */ int (*private_ioctl_fn) (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); }; /* This type of function closes FD, applying special knowledge for the FD types it knows about, and calls execute_close_hooks (REMAINING_LIST, PRIMARY, FD) for the other FD types. In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, and PRIMARY is the "primary" method for close(). */ typedef int (*close_hook_fn) (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Execute the close hooks in REMAINING_LIST, with PRIMARY as "primary" method. Return 0 or -1, like close() would do. */ extern int execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Execute all close hooks, with PRIMARY as "primary" method. Return 0 or -1, like close() would do. */ extern int execute_all_close_hooks (gl_close_fn primary, int fd); /* This type of function applies a control request to FD, applying special knowledge for the FD types it knows about, and calls execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) for the other FD types. In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, and PRIMARY is the "primary" method for ioctl(). */ typedef int (*ioctl_hook_fn) (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); /* Execute the ioctl hooks in REMAINING_LIST, with PRIMARY as "primary" method. Return 0 or -1, like ioctl() would do. */ extern int execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); /* Execute all ioctl hooks, with PRIMARY as "primary" method. Return 0 or -1, like ioctl() would do. */ extern int execute_all_ioctl_hooks (gl_ioctl_fn primary, int fd, int request, void *arg); /* Add a function pair to the list of file descriptor hooks. CLOSE_HOOK and IOCTL_HOOK may be NULL, indicating no change. The LINK variable points to a piece of memory which is guaranteed to be accessible until the corresponding call to unregister_fd_hook. */ extern void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link); /* Removes a hook from the list of file descriptor hooks. */ extern void unregister_fd_hook (struct fd_hook *link); #endif #ifdef __cplusplus } #endif #endif /* FD_HOOK_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/filename.h�����������������������������������������������������������0000644�0001750�0001750�00000011106�14557510505�014173� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Basic filename support macros. Copyright (C) 2001-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* From Paul Eggert and Jim Meyering. */ #ifndef _FILENAME_H #define _FILENAME_H #include <string.h> #ifdef __cplusplus extern "C" { #endif /* Filename support. ISSLASH(C) tests whether C is a directory separator character. HAS_DEVICE(Filename) tests whether Filename contains a device specification. FILE_SYSTEM_PREFIX_LEN(Filename) length of the device specification at the beginning of Filename, index of the part consisting of alternating components and slashes. FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 when a non-empty device specification can be followed by an empty or relative part, 0 when a non-empty device specification must be followed by a slash, 0 when device specification don't exist. IS_ABSOLUTE_FILE_NAME(Filename) tests whether Filename is independent of any notion of "current directory". IS_RELATIVE_FILE_NAME(Filename) tests whether Filename may be concatenated to a directory filename. Note: On native Windows, OS/2, DOS, "c:" is neither an absolute nor a relative file name! IS_FILE_NAME_WITH_DIR(Filename) tests whether Filename contains a device or directory specification. */ #if defined _WIN32 || defined __CYGWIN__ \ || defined __EMX__ || defined __MSDOS__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') /* Internal macro: Tests whether a character is a drive letter. */ # define _IS_DRIVE_LETTER(C) \ (((C) >= 'A' && (C) <= 'Z') || ((C) >= 'a' && (C) <= 'z')) /* Help the compiler optimizing it. This assumes ASCII. */ # undef _IS_DRIVE_LETTER # define _IS_DRIVE_LETTER(C) \ (((unsigned int) (C) | ('a' - 'A')) - 'a' <= 'z' - 'a') # define HAS_DEVICE(Filename) \ (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':') # define FILE_SYSTEM_PREFIX_LEN(Filename) (HAS_DEVICE (Filename) ? 2 : 0) # ifdef __CYGWIN__ # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 # else /* On native Windows, OS/2, DOS, the system has the notion of a "current directory" on each drive. */ # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 # endif # if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE # define IS_ABSOLUTE_FILE_NAME(Filename) \ ISSLASH ((Filename)[FILE_SYSTEM_PREFIX_LEN (Filename)]) # else # define IS_ABSOLUTE_FILE_NAME(Filename) \ (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename)) # endif # define IS_RELATIVE_FILE_NAME(Filename) \ (! (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename))) # define IS_FILE_NAME_WITH_DIR(Filename) \ (strchr ((Filename), '/') != NULL || strchr ((Filename), '\\') != NULL \ || HAS_DEVICE (Filename)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define HAS_DEVICE(Filename) ((void) (Filename), 0) # define FILE_SYSTEM_PREFIX_LEN(Filename) ((void) (Filename), 0) # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 # define IS_ABSOLUTE_FILE_NAME(Filename) ISSLASH ((Filename)[0]) # define IS_RELATIVE_FILE_NAME(Filename) (! ISSLASH ((Filename)[0])) # define IS_FILE_NAME_WITH_DIR(Filename) (strchr ((Filename), '/') != NULL) #endif /* Deprecated macros. For backward compatibility with old users of the 'filename' module. */ #define IS_ABSOLUTE_PATH IS_ABSOLUTE_FILE_NAME #define IS_PATH_WITH_DIR IS_FILE_NAME_WITH_DIR #ifdef __cplusplus } #endif #endif /* _FILENAME_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/filenamecat.h��������������������������������������������������������0000644�0001750�0001750�00000002546�14557510505�014673� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two arbitrary file names. Copyright (C) 1996-1997, 2003, 2005, 2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ /* This file uses _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <stdlib.h> #if GNULIB_FILENAMECAT char *file_name_concat (char const *dir, char const *base, char **base_in_result) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; #endif char *mfile_name_concat (char const *dir, char const *base, char **base_in_result) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; ����������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/float.in.h�����������������������������������������������������������0000644�0001750�0001750�00000017310�14557510505�014130� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A correct <float.h>. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_FLOAT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_FLOAT_H@ #ifndef _@GUARD_PREFIX@_FLOAT_H #define _@GUARD_PREFIX@_FLOAT_H /* 'long double' properties. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) /* Number of mantissa units, in base FLT_RADIX. */ # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 /* Number of decimal digits that is sufficient for representing a number. */ # undef LDBL_DIG # define LDBL_DIG 18 /* x-1 where x is the smallest representable number > 1. */ # undef LDBL_EPSILON # define LDBL_EPSILON 1.0842021724855044340E-19L /* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) /* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 /* Minimum positive normalized number. */ # undef LDBL_MIN # define LDBL_MIN 3.3621031431120935063E-4932L /* Maximum representable finite number. */ # undef LDBL_MAX # define LDBL_MAX 1.1897314953572317650E+4932L /* Minimum e such that 10^e is in the range of normalized numbers. */ # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP (-4931) /* Maximum e such that 10^e is in the range of representable finite numbers. */ # undef LDBL_MAX_10_EXP # define LDBL_MAX_10_EXP 4932 #endif /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. */ #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) /* Number of mantissa units, in base FLT_RADIX. */ # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 /* Number of decimal digits that is sufficient for representing a number. */ # undef LDBL_DIG # define LDBL_DIG 18 /* x-1 where x is the smallest representable number > 1. */ # undef LDBL_EPSILON # define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */ /* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) /* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 /* Minimum positive normalized number. */ # undef LDBL_MIN # define LDBL_MIN 3.362103143112093506262677817321752E-4932L /* = 0x1p-16382L */ /* Maximum representable finite number. */ # undef LDBL_MAX /* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }. But the largest literal that GCC allows us to write is 0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }. So, define it like this through a reference to an external variable const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }; extern const long double LDBL_MAX; Unfortunately, this is not a constant expression. */ # if !GNULIB_defined_long_double_union union gl_long_double_union { struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd; long double ld; }; # define GNULIB_defined_long_double_union 1 # endif extern const union gl_long_double_union gl_LDBL_MAX; # define LDBL_MAX (gl_LDBL_MAX.ld) /* Minimum e such that 10^e is in the range of normalized numbers. */ # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP (-4931) /* Maximum e such that 10^e is in the range of representable finite numbers. */ # undef LDBL_MAX_10_EXP # define LDBL_MAX_10_EXP 4932 #endif /* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are wrong. On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong. */ #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP DBL_MIN_10_EXP # undef LDBL_MIN # define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ #endif #if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MAX /* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }. It is not easy to define: #define LDBL_MAX 1.79769313486231580793728971405302307166e308L is too small, whereas #define LDBL_MAX 1.79769313486231580793728971405302307167e308L is too large. Apparently a bug in GCC decimal-to-binary conversion. Also, I can't get values larger than #define LDBL63 ((long double) (1ULL << 63)) #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL) which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }. So, define it like this through a reference to an external variable const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }; extern const long double LDBL_MAX; or through a pointer cast #define LDBL_MAX \ (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }) Unfortunately, this is not a constant expression, and the latter expression does not work well when GCC is optimizing.. */ # if !GNULIB_defined_long_double_union union gl_long_double_union { struct { double hi; double lo; } dd; long double ld; }; # define GNULIB_defined_long_double_union 1 # endif extern const union gl_long_double_union gl_LDBL_MAX; # define LDBL_MAX (gl_LDBL_MAX.ld) #endif /* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong. On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON are wrong. */ #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP DBL_MIN_10_EXP # undef LDBL_MIN # define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ # undef LDBL_EPSILON # define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */ # endif #endif #if @REPLACE_ITOLD@ /* Pull in a function that fixes the 'int' to 'long double' conversion of glibc 2.7. */ extern # ifdef __cplusplus "C" # endif void _Qp_itoq (long double *, int); static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq; #endif #endif /* _@GUARD_PREFIX@_FLOAT_H */ #endif /* _@GUARD_PREFIX@_FLOAT_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/stat-w32.h�����������������������������������������������������������0000644�0001750�0001750�00000003107�14557510505�014001� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Core of implementation of fstat and stat for native Windows. Copyright (C) 2017-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _STAT_W32_H #define _STAT_W32_H 1 /* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ #if _GL_WINDOWS_STAT_TIMESPEC extern struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft); #else extern time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft); #endif /* Fill *BUF with information about the file designated by H. PATH is the file name, if known, otherwise NULL. Return 0 if successful, or -1 with errno set upon failure. */ extern int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf); /* Bitmasks for st_mode. */ #define S_IREAD_UGO (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6)) #define S_IWRITE_UGO (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6)) #define S_IEXEC_UGO (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6)) #endif /* _STAT_W32_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getopt-cdefs.in.h����������������������������������������������������0000644�0001750�0001750�00000004174�14557510505�015413� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt-on-non-glibc compatibility macros. Copyright (C) 1989-2024 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_CDEFS_H #define _GETOPT_CDEFS_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* getopt-core.h and getopt-ext.h are shared with GNU libc, and expect a number of the internal macros supplied to GNU libc's headers by sys/cdefs.h. Provide fallback definitions for all of them. */ #if @HAVE_SYS_CDEFS_H@ # include <sys/cdefs.h> #endif #ifndef __BEGIN_DECLS # ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # else # define __BEGIN_DECLS /* nothing */ # endif #endif #ifndef __END_DECLS # ifdef __cplusplus # define __END_DECLS } # else # define __END_DECLS /* nothing */ # endif #endif #ifndef __GNUC_PREREQ # if defined __GNUC__ && defined __GNUC_VERSION__ # define __GNUC_PREREQ(maj, min) \ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) # else # define __GNUC_PREREQ(maj, min) 0 # endif #endif #ifndef __THROW # if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major__ >= 4) # if __cplusplus >= 201103L # define __THROW noexcept (true) # else # define __THROW throw () # endif # else # define __THROW # endif #endif #endif /* _GETOPT_CDEFS_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getopt-core.h��������������������������������������������������������0000644�0001750�0001750�00000007132�14557510505�014647� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt (basic, portable features only). Copyright (C) 1989-2024 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_CORE_H #define _GETOPT_CORE_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. Unlike most bits headers, it does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ __BEGIN_DECLS /* For communication from 'getopt' to the caller. When 'getopt' finds an option that takes an argument, the argument value is returned here. Also, when 'ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to 'getopt'. On entry to 'getopt', zero means this is the first call; initialize. When 'getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, 'optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message 'getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; /* Get definitions and prototypes for functions to process the arguments in ARGV (ARGC of them, minus the program name) for options given in OPTS. Return the option character from OPTS just read. Return -1 when there are no more options. For unrecognized options, or options missing arguments, 'optopt' is set to the option letter, and '?' is returned. The OPTS string is a list of characters which are recognized option letters, optionally followed by colons, specifying that that letter takes an argument, to be placed in 'optarg'. If a letter in OPTS is followed by two colons, its argument is optional. This behavior is specific to the GNU 'getopt'. The argument '--' causes premature termination of argument scanning, explicitly telling 'getopt' that there are no more options. If OPTS begins with '-', then non-option arguments are treated as arguments to the option '\1'. This behavior is specific to the GNU 'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in the environment, then do not permute arguments. For standards compliance, the 'argv' argument has the type char *const *, but this is inaccurate; if argument permutation is enabled, the argv array (not the strings it points to) must be writable. */ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) __THROW _GL_ARG_NONNULL ((2, 3)); __END_DECLS #endif /* _GETOPT_CORE_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getopt-ext.h���������������������������������������������������������0000644�0001750�0001750�00000005753�14557510505�014526� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt (GNU extensions). Copyright (C) 1989-2024 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_EXT_H #define _GETOPT_EXT_H 1 /* This header should not be used directly; include getopt.h instead. Unlike most bits headers, it does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ __BEGIN_DECLS /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of 'struct option' terminated by an element containing a name which is zero. The field 'has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field 'flag' is not NULL, it points to a variable that is set to the value given in the field 'val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an 'int' to a compiled-in constant, such as set a value from 'optarg', set the option's 'flag' field to zero and its 'val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero 'flag' field, 'getopt' returns the contents of the 'val' field. */ struct option { const char *name; /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the 'has_arg' field of 'struct option'. */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); __END_DECLS #endif /* _GETOPT_EXT_H */ ���������������������gnuastro-0.22/bootstrapped/lib/getopt-pfx-core.h����������������������������������������������������0000644�0001750�0001750�00000005022�14557510505�015436� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt (basic, portable features) gnulib wrapper header. Copyright (C) 1989-2024 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_PFX_CORE_H #define _GETOPT_PFX_CORE_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. Systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #ifdef __GETOPT_PREFIX # ifndef __GETOPT_ID # define __GETOPT_CONCAT(x, y) x ## y # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) # endif # undef getopt # undef optarg # undef opterr # undef optind # undef optopt # define getopt __GETOPT_ID (getopt) # define optarg __GETOPT_ID (optarg) # define opterr __GETOPT_ID (opterr) # define optind __GETOPT_ID (optind) # define optopt __GETOPT_ID (optopt) /* Work around a problem on macOS, which declares getopt with a trailing __DARWIN_ALIAS(getopt) that would expand to something like __asm("_" "rpl_getopt" "$UNIX2003") were it not for the following hack to suppress the macOS declaration <https://bugs.gnu.org/40205>. */ # ifdef __APPLE__ # define _GETOPT # endif /* The system's getopt.h may have already included getopt-core.h to declare the unprefixed identifiers. Undef _GETOPT_CORE_H so that getopt-core.h declares them with prefixes. */ # undef _GETOPT_CORE_H #endif #include <getopt-core.h> #endif /* _GETOPT_PFX_CORE_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getopt-pfx-ext.h�����������������������������������������������������0000644�0001750�0001750�00000005365�14557510505�015320� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt (GNU extensions) gnulib wrapper header. Copyright (C) 1989-2024 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_PFX_EXT_H #define _GETOPT_PFX_EXT_H 1 /* This header should not be used directly; include getopt.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. Systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #ifdef __GETOPT_PREFIX # ifndef __GETOPT_ID # define __GETOPT_CONCAT(x, y) x ## y # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) # endif # undef getopt_long # undef getopt_long_only # undef option # undef _getopt_internal # define getopt_long __GETOPT_ID (getopt_long) # define getopt_long_only __GETOPT_ID (getopt_long_only) # define option __GETOPT_ID (option) # define _getopt_internal __GETOPT_ID (getopt_internal) /* The system's getopt.h may have already included getopt-ext.h to declare the unprefixed identifiers. Undef _GETOPT_EXT_H so that getopt-ext.h declares them with prefixes. */ # undef _GETOPT_EXT_H #endif /* Standalone applications get correct prototypes for getopt_long and getopt_long_only; they declare "char **argv". For backward compatibility with old applications, if __GETOPT_PREFIX is not defined, we supply GNU-libc-compatible, but incorrect, prototypes using "char *const *argv". (GNU libc is stuck with the incorrect prototypes, as they are baked into older versions of LSB.) */ #ifndef __getopt_argv_const # if defined __GETOPT_PREFIX # define __getopt_argv_const /* empty */ # else # define __getopt_argv_const const # endif #endif #include <getopt-ext.h> #endif /* _GETOPT_PFX_EXT_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getopt.in.h����������������������������������������������������������0000644�0001750�0001750�00000004121�14557510505�014321� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt. Copyright (C) 1989-2024 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library, which supplies a different version of this file. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_GETOPT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. We must also inform the replacement unistd.h to not recursively use <getopt.h>; our definitions will be present soon enough. */ #if @HAVE_GETOPT_H@ # define _GL_SYSTEM_GETOPT # @INCLUDE_NEXT@ @NEXT_GETOPT_H@ # undef _GL_SYSTEM_GETOPT #endif #define _@GUARD_PREFIX@_GETOPT_H 1 /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. When this happens, include the headers that might declare getopt so that they will not cause confusion if included after this file (if the system had <getopt.h>, we have already included it). */ #if defined __GETOPT_PREFIX # if !@HAVE_GETOPT_H@ # define __need_system_stdlib_h # include <stdlib.h> # undef __need_system_stdlib_h # include <stdio.h> # include <unistd.h> # endif #endif /* The definition of _GL_ARG_NONNULL is copied here. */ #include <getopt-cdefs.h> #include <getopt-pfx-core.h> #include <getopt-pfx-ext.h> #endif /* _@GUARD_PREFIX@_GETOPT_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getopt_int.h���������������������������������������������������������0000644�0001750�0001750�00000010112�14557510505�014563� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internal declarations for getopt. Copyright (C) 1989-2024 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_INT_H #define _GETOPT_INT_H 1 #include <getopt.h> extern int _getopt_internal (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, int __posixly_correct); /* Reentrant versions which can handle parsing multiple argument vectors at the same time. */ /* Describe how to deal with options that follow non-option ARGV-elements. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what POSIX specifies should happen. PERMUTE means permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. The special argument '--' forces an end of option-scanning regardless of the value of 'ordering'. In the case of RETURN_IN_ORDER, only '--' can cause 'getopt' to return -1 with 'optind' != ARGC. */ enum __ord { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER }; /* Data type for reentrant functions. */ struct _getopt_data { /* These have exactly the same meaning as the corresponding global variables, except that they are used for the reentrant versions of getopt. */ int optind; int opterr; int optopt; char *optarg; /* Internal members. */ /* True if the internal members have been initialized. */ int __initialized; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ char *__nextchar; /* See __ord above. */ enum __ord __ordering; /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. 'first_nonopt' is the index in ARGV of the first of them; 'last_nonopt' is the index after the last of them. */ int __first_nonopt; int __last_nonopt; }; /* The initializer is necessary to set OPTIND and OPTERR to their default values and to clear the initialization flag. */ #define _GETOPT_DATA_INITIALIZER { 1, 1 } extern int _getopt_internal_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, struct _getopt_data *__data, int __posixly_correct); extern int _getopt_long_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); extern int _getopt_long_only_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); #endif /* getopt_int.h */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/getprogname.h��������������������������������������������������������0000644�0001750�0001750�00000001710�14557510505�014723� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2016-2024 Free Software Foundation, Inc. This program 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 program 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_GETPROGNAME_H #define _GL_GETPROGNAME_H #include <stdlib.h> #if __GNUC__ || (__clang_major__ >= 4) # warning "The include file getprogname.h is deprecated. Use <stdlib.h> instead." #endif #endif ��������������������������������������������������������gnuastro-0.22/bootstrapped/lib/dynarray.h�����������������������������������������������������������0000644�0001750�0001750�00000022307�14557510505�014251� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Type-safe arrays which grow dynamically. Copyright 2021-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Bruno Haible, 2021. */ #ifndef _GL_DYNARRAY_H #define _GL_DYNARRAY_H /* Before including this file, you need to define: DYNARRAY_STRUCT The struct tag of dynamic array to be defined. DYNARRAY_ELEMENT The type name of the element type. Elements are copied as if by memcpy, and can change address as the dynamic array grows. DYNARRAY_PREFIX The prefix of the functions which are defined. The following parameters are optional: DYNARRAY_ELEMENT_FREE DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the contents of elements. E is of type DYNARRAY_ELEMENT *. DYNARRAY_ELEMENT_INIT DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new element. E is of type DYNARRAY_ELEMENT *. If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is defined, new elements are automatically zero-initialized. Otherwise, new elements have undefined contents. DYNARRAY_INITIAL_SIZE The size of the statically allocated array (default: at least 2, more elements if they fit into 128 bytes). Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0, there is no statically allocated array at, and all non-empty arrays are heap-allocated. DYNARRAY_FINAL_TYPE The name of the type which holds the final array. If not defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE must be a struct type, with members of type DYNARRAY_ELEMENT and size_t at the start (in this order). These macros are undefined after this header file has been included. The following types are provided (their members are private to the dynarray implementation): struct DYNARRAY_STRUCT The following functions are provided: */ /* Initialize a dynamic array object. This must be called before any use of the object. */ #if 0 static void DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *list); #endif /* Deallocate the dynamic array and its elements. */ #if 0 static void DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *list); #endif /* Return true if the dynamic array is in an error state. */ #if 0 static bool DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *list); #endif /* Mark the dynamic array as failed. All elements are deallocated as a side effect. */ #if 0 static void DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *list); #endif /* Return the number of elements which have been added to the dynamic array. */ #if 0 static size_t DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *list); #endif /* Return a pointer to the first array element, if any. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *list); #endif /* Return a pointer one element past the last array element. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *list); #endif /* Return a pointer to the array element at INDEX. Terminate the process if INDEX is out of bounds. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *list, size_t index); #endif /* Add ITEM at the end of the array, enlarging it by one element. Mark *LIST as failed if the dynamic array allocation size cannot be increased. */ #if 0 static void DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item); #endif /* Allocate a place for a new element in *LIST and return a pointer to it. The pointer can be NULL if the dynamic array cannot be enlarged due to a memory allocation failure. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *list); #endif /* Change the size of *LIST to SIZE. If SIZE is larger than the existing size, new elements are added (which can be initialized). Otherwise, the list is truncated, and elements are freed. Return false on memory allocation failure (and mark *LIST as failed). */ #if 0 static bool DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *list, size_t size); #endif /* Remove the last element of LIST if it is present. */ #if 0 static void DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *list); #endif /* Remove all elements from the list. The elements are freed, but the list itself is not. */ #if 0 static void DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *list); #endif #if defined DYNARRAY_FINAL_TYPE /* Transfer the dynamic array to a permanent location at *RESULT. Returns true on success on false on allocation failure. In either case, *LIST is re-initialized and can be reused. A NULL pointer is stored in *RESULT if LIST refers to an empty list. On success, the pointer in *RESULT is heap-allocated and must be deallocated using free. */ #if 0 static bool DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *list, DYNARRAY_FINAL_TYPE *result); #endif #else /* !defined DYNARRAY_FINAL_TYPE */ /* Transfer the dynamic array to a heap-allocated array and return a pointer to it. The pointer is NULL if memory allocation fails, or if the array is empty, so this function should be used only for arrays which are known not be empty (usually because they always have a sentinel at the end). If LENGTHP is not NULL, the array length is written to *LENGTHP. *LIST is re-initialized and can be reused. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *list, size_t *lengthp); #endif #endif /* A minimal example which provides a growing list of integers can be defined like this: struct int_array { // Pointer to result array followed by its length, // as required by DYNARRAY_FINAL_TYPE. int *array; size_t length; }; #define DYNARRAY_STRUCT dynarray_int #define DYNARRAY_ELEMENT int #define DYNARRAY_PREFIX dynarray_int_ #define DYNARRAY_FINAL_TYPE struct int_array #include <malloc/dynarray-skeleton.c> To create a three-element array with elements 1, 2, 3, use this code: struct dynarray_int dyn; dynarray_int_init (&dyn); for (int i = 1; i <= 3; ++i) { int *place = dynarray_int_emplace (&dyn); assert (place != NULL); *place = i; } struct int_array result; bool ok = dynarray_int_finalize (&dyn, &result); assert (ok); assert (result.length == 3); assert (result.array[0] == 1); assert (result.array[1] == 2); assert (result.array[2] == 3); free (result.array); If the elements contain resources which must be freed, define DYNARRAY_ELEMENT_FREE appropriately, like this: struct str_array { char **array; size_t length; }; #define DYNARRAY_STRUCT dynarray_str #define DYNARRAY_ELEMENT char * #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr) #define DYNARRAY_PREFIX dynarray_str_ #define DYNARRAY_FINAL_TYPE struct str_array #include <malloc/dynarray-skeleton.c> */ /* The implementation is imported from glibc. */ /* Avoid possible conflicts with symbols exported by the GNU libc. */ #define __libc_dynarray_at_failure gl_dynarray_at_failure #define __libc_dynarray_emplace_enlarge gl_dynarray_emplace_enlarge #define __libc_dynarray_finalize gl_dynarray_finalize #define __libc_dynarray_resize_clear gl_dynarray_resize_clear #define __libc_dynarray_resize gl_dynarray_resize #if defined DYNARRAY_STRUCT || defined DYNARRAY_ELEMENT || defined DYNARRAY_PREFIX # ifndef _GL_LIKELY /* Rely on __builtin_expect, as provided by the module 'builtin-expect'. */ # define _GL_LIKELY(cond) __builtin_expect ((cond), 1) # define _GL_UNLIKELY(cond) __builtin_expect ((cond), 0) # endif /* Define auxiliary structs and declare auxiliary functions, common to all instantiations of dynarray. */ # include <malloc/dynarray.gl.h> /* Define the instantiation, specified through DYNARRAY_STRUCT DYNARRAY_ELEMENT DYNARRAY_PREFIX etc. */ # include <malloc/dynarray-skeleton.gl.h> #else /* This file is being included from one of the malloc/dynarray_*.c files. */ # include <malloc/dynarray.h> #endif #endif /* _GL_DYNARRAY_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/hard-locale.h��������������������������������������������������������0000644�0001750�0001750�00000002260�14557510505�014567� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether a locale is hard. Copyright (C) 1999, 2003-2004, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef HARD_LOCALE_H_ # define HARD_LOCALE_H_ 1 /* Return true if the specified CATEGORY of the current locale is hard, i.e. different from the C or POSIX locale that has a fixed behavior. CATEGORY must be one of the LC_* values, but not LC_ALL. Note: This function uses the current global locale; it ignores the per-thread locale. */ extern bool hard_locale (int category); #endif /* HARD_LOCALE_H_ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/intprops-internal.h��������������������������������������������������0000644�0001750�0001750�00000043033�14557510505�016107� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* intprops-internal.h -- properties of integer types not visible to users Copyright (C) 2001-2024 Free Software Foundation, Inc. This program 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 program 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_INTPROPS_INTERNAL_H #define _GL_INTPROPS_INTERNAL_H #include <limits.h> /* Pacify GCC 13.2 in some calls to _GL_EXPR_SIGNED. */ #if defined __GNUC__ && 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wtype-limits" #endif /* Return a value with the common real type of E and V and the value of V. Do not evaluate E. */ #define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v)) /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00406.html>. */ #define _GL_INT_NEGATE_CONVERT(e, v) ((1 ? 0 : (e)) - (v)) /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if the real type T is signed. */ #define _GL_TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Return 1 if the real expression E, after promotion, has a signed or floating type. Do not evaluate E. */ #define _GL_EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) /* Minimum and maximum values for integer types and expressions. */ /* The width in bits of the integer type or expression T. Do not evaluate T. T must not be a bit-field expression. Padding bits are not supported; this is checked at compile-time below. */ #define _GL_TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) /* The maximum and minimum values for the type of the expression E, after integer promotion. E is not evaluated. */ #define _GL_INT_MINIMUM(e) \ (_GL_EXPR_SIGNED (e) \ ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_CONVERT (e, 0)) #define _GL_INT_MAXIMUM(e) \ (_GL_EXPR_SIGNED (e) \ ? _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_NEGATE_CONVERT (e, 1)) #define _GL_SIGNED_INT_MAXIMUM(e) \ (((_GL_INT_CONVERT (e, 1) << (_GL_TYPE_WIDTH (+ (e)) - 2)) - 1) * 2 + 1) /* Work around OpenVMS incompatibility with C99. */ #if !defined LLONG_MAX && defined __INT64_MAX # define LLONG_MAX __INT64_MAX # define LLONG_MIN __INT64_MIN #endif /* This include file assumes that signed types are two's complement without padding bits; the above macros have undefined behavior otherwise. If this is a problem for you, please let us know how to fix it for your host. This assumption is tested by the intprops-tests module. */ /* Does the __typeof__ keyword work? This could be done by 'configure', but for now it's easier to do it by hand. */ #if (2 <= __GNUC__ \ || (4 <= __clang_major__) \ || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ || (0x5110 <= __SUNPRO_C && !__STDC__)) # define _GL_HAVE___TYPEOF__ 1 #else # define _GL_HAVE___TYPEOF__ 0 #endif /* Return 1 if the integer type or expression T might be signed. Return 0 if it is definitely unsigned. T must not be a bit-field expression. This macro does not evaluate its argument, and expands to an integer constant expression. */ #if _GL_HAVE___TYPEOF__ # define _GL_SIGNED_TYPE_OR_EXPR(t) _GL_TYPE_SIGNED (__typeof__ (t)) #else # define _GL_SIGNED_TYPE_OR_EXPR(t) 1 #endif /* Return 1 if - A would overflow in [MIN,MAX] arithmetic. A should not have side effects, and A's type should be an integer with minimum value MIN and maximum MAX. */ #define _GL_INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ ((min) < 0 ? (a) < - (max) : 0 < (a)) /* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow (A, B, P) work when P is non-null. */ #ifdef __EDG__ /* EDG-based compilers like nvc 22.1 cannot add 64-bit signed to unsigned <https://bugs.gnu.org/53256>. */ # define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 #elif defined __has_builtin # define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow) /* __builtin_{add,sub}_overflow exists but is not reliable in GCC 5.x and 6.x, see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98269>. */ #elif 7 <= __GNUC__ # define _GL_HAS_BUILTIN_ADD_OVERFLOW 1 #else # define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 #endif /* True if __builtin_mul_overflow (A, B, P) works when P is non-null. */ #if defined __clang_major__ && __clang_major__ < 14 /* Work around Clang bug <https://bugs.llvm.org/show_bug.cgi?id=16404>. */ # define _GL_HAS_BUILTIN_MUL_OVERFLOW 0 #else # define _GL_HAS_BUILTIN_MUL_OVERFLOW _GL_HAS_BUILTIN_ADD_OVERFLOW #endif /* True if __builtin_add_overflow_p (A, B, C) works, and similarly for __builtin_sub_overflow_p and __builtin_mul_overflow_p. */ #ifdef __EDG__ /* In EDG-based compilers like ICC 2021.3 and earlier, __builtin_add_overflow_p etc. are not treated as integral constant expressions even when all arguments are. */ # define _GL_HAS_BUILTIN_OVERFLOW_P 0 #elif defined __has_builtin # define _GL_HAS_BUILTIN_OVERFLOW_P __has_builtin (__builtin_mul_overflow_p) #else # define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__) #endif #if (!defined _GL_STDCKDINT_H && 202311 <= __STDC_VERSION__ \ && ! (_GL_HAS_BUILTIN_ADD_OVERFLOW && _GL_HAS_BUILTIN_MUL_OVERFLOW)) # include <stdckdint.h> #endif /* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. Return 1 if the result overflows. Arguments should not have side effects and A, B and *R can be of any integer type other than char, bool, a bit-precise integer type, or an enumeration type. */ #if _GL_HAS_BUILTIN_ADD_OVERFLOW # define _GL_INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r) # define _GL_INT_SUBTRACT_WRAPV(a, b, r) __builtin_sub_overflow (a, b, r) #elif defined ckd_add && defined ckd_sub && !defined _GL_STDCKDINT_H # define _GL_INT_ADD_WRAPV(a, b, r) ckd_add (r, + (a), + (b)) # define _GL_INT_SUBTRACT_WRAPV(a, b, r) ckd_sub (r, + (a), + (b)) #else # define _GL_INT_ADD_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, +, _GL_INT_ADD_RANGE_OVERFLOW) # define _GL_INT_SUBTRACT_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, -, _GL_INT_SUBTRACT_RANGE_OVERFLOW) #endif #if _GL_HAS_BUILTIN_MUL_OVERFLOW # if ((9 < __GNUC__ + (3 <= __GNUC_MINOR__) \ || (__GNUC__ == 8 && 4 <= __GNUC_MINOR__)) \ && !defined __EDG__) # define _GL_INT_MULTIPLY_WRAPV(a, b, r) __builtin_mul_overflow (a, b, r) # else /* Work around GCC bug 91450. */ # define _GL_INT_MULTIPLY_WRAPV(a, b, r) \ ((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && _GL_EXPR_SIGNED (a) && _GL_EXPR_SIGNED (b) \ && _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \ ? ((void) __builtin_mul_overflow (a, b, r), 1) \ : __builtin_mul_overflow (a, b, r)) # endif #elif defined ckd_mul && !defined _GL_STDCKDINT_H # define _GL_INT_MULTIPLY_WRAPV(a, b, r) ckd_mul (r, + (a), + (b)) #else # define _GL_INT_MULTIPLY_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, *, _GL_INT_MULTIPLY_RANGE_OVERFLOW) #endif /* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 https://llvm.org/bugs/show_bug.cgi?id=25390 For now, assume all versions of GCC-like compilers generate bogus warnings for _Generic. This matters only for compilers that lack relevant builtins. */ #if __GNUC__ || defined __clang__ # define _GL__GENERIC_BOGUS 1 #else # define _GL__GENERIC_BOGUS 0 #endif /* Store the low-order bits of A <op> B into *R, where OP specifies the operation and OVERFLOW the overflow predicate. Return 1 if the result overflows. Arguments should not have side effects, and A, B and *R can be of any integer type other than char, bool, a bit-precise integer type, or an enumeration type. */ #if 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS # define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ (_Generic \ (*(r), \ signed char: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ signed char, SCHAR_MIN, SCHAR_MAX), \ unsigned char: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned char, 0, UCHAR_MAX), \ short int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ short int, SHRT_MIN, SHRT_MAX), \ unsigned short int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned short int, 0, USHRT_MAX), \ int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX), \ unsigned int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned int, 0, UINT_MAX), \ long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX), \ unsigned long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX), \ long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX), \ unsigned long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ unsigned long long int, 0, ULLONG_MAX))) #else /* Store the low-order bits of A <op> B into *R, where OP specifies the operation and OVERFLOW the overflow predicate. If *R is signed, its type is ST with bounds SMIN..SMAX; otherwise its type is UT with bounds U..UMAX. ST and UT are narrower than int. Return 1 if the result overflows. Arguments should not have side effects, and A, B and *R can be of any integer type other than char, bool, a bit-precise integer type, or an enumeration type. */ # if _GL_HAVE___TYPEOF__ # define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ (_GL_TYPE_SIGNED (__typeof__ (*(r))) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, st, smin, smax) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, ut, 0, umax)) # else # define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ (overflow (a, b, smin, smax) \ ? (overflow (a, b, 0, umax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 1) \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) < 0) \ : (overflow (a, b, 0, umax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) >= 0 \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 0))) # endif # define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (signed char) \ ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ signed char, SCHAR_MIN, SCHAR_MAX, \ unsigned char, UCHAR_MAX) \ : sizeof *(r) == sizeof (short int) \ ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ short int, SHRT_MIN, SHRT_MAX, \ unsigned short int, USHRT_MAX) \ : sizeof *(r) == sizeof (int) \ ? (_GL_EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned int, 0, UINT_MAX)) \ : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) # ifdef LLONG_MAX # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (long int) \ ? (_GL_EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX)) \ : (_GL_EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ unsigned long long int, 0, ULLONG_MAX))) # else # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (_GL_EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX)) # endif #endif /* Store the low-order bits of A <op> B into *R, where the operation is given by OP. Use the unsigned type UT for calculation to avoid overflow problems. *R's type is T, with extrema TMIN and TMAX. T can be any signed integer type other than char, bool, a bit-precise integer type, or an enumeration type. Return 1 if the result overflows. */ #define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ (overflow (a, b, tmin, tmax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0)) /* Return 1 if the integer expressions A - B and -A would overflow, respectively. Arguments should not have side effects, and can be any signed integer type other than char, bool, a bit-precise integer type, or an enumeration type. These macros are tuned for their last input argument being a constant. */ #if _GL_HAS_BUILTIN_OVERFLOW_P # define _GL_INT_NEGATE_OVERFLOW(a) \ __builtin_sub_overflow_p (0, a, (__typeof__ (- (a))) 0) #else # define _GL_INT_NEGATE_OVERFLOW(a) \ _GL_INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) #endif /* Return the low-order bits of A <op> B, where the operation is given by OP. Use the unsigned type UT for calculation to avoid undefined behavior on signed integer overflow, and convert the result to type T. UT is at least as wide as T and is no narrower than unsigned int, T is two's complement, and there is no padding or trap representations. Assume that converting UT to T yields the low-order bits, as is done in all known two's-complement C compilers. E.g., see: https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html According to the C standard, converting UT to T yields an implementation-defined result or signal for values outside T's range. However, code that works around this theoretical problem runs afoul of a compiler bug in Oracle Studio 12.3 x86. See: https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html As the compiler bug is real, don't try to work around the theoretical problem. */ #define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \ ((t) ((ut) (a) op (ut) (b))) /* Return true if the numeric values A + B, A - B, A * B fall outside the range TMIN..TMAX. Arguments should not have side effects and can be any integer type other than char, bool, a bit-precise integer type, or an enumeration type. TMIN should be signed and nonpositive. TMAX should be positive, and should be signed unless TMIN is zero. */ #define _GL_INT_ADD_RANGE_OVERFLOW(a, b, tmin, tmax) \ ((b) < 0 \ ? (((tmin) \ ? ((_GL_EXPR_SIGNED (_GL_INT_CONVERT (a, (tmin) - (b))) || (b) < (tmin)) \ && (a) < (tmin) - (b)) \ : (a) <= -1 - (b)) \ || ((_GL_EXPR_SIGNED (a) ? 0 <= (a) : (tmax) < (a)) && (tmax) < (a) + (b))) \ : (a) < 0 \ ? (((tmin) \ ? ((_GL_EXPR_SIGNED (_GL_INT_CONVERT (b, (tmin) - (a))) || (a) < (tmin)) \ && (b) < (tmin) - (a)) \ : (b) <= -1 - (a)) \ || ((_GL_EXPR_SIGNED (_GL_INT_CONVERT (a, b)) || (tmax) < (b)) \ && (tmax) < (a) + (b))) \ : (tmax) < (b) || (tmax) - (b) < (a)) #define _GL_INT_SUBTRACT_RANGE_OVERFLOW(a, b, tmin, tmax) \ (((a) < 0) == ((b) < 0) \ ? ((a) < (b) \ ? !(tmin) || -1 - (tmin) < (b) - (a) - 1 \ : (tmax) < (a) - (b)) \ : (a) < 0 \ ? ((!_GL_EXPR_SIGNED (_GL_INT_CONVERT ((a) - (tmin), b)) && (a) - (tmin) < 0) \ || (a) - (tmin) < (b)) \ : ((! (_GL_EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ && _GL_EXPR_SIGNED (_GL_INT_CONVERT ((tmax) + (b), a))) \ && (tmax) <= -1 - (b)) \ || (tmax) + (b) < (a))) #define _GL_INT_MULTIPLY_RANGE_OVERFLOW(a, b, tmin, tmax) \ ((b) < 0 \ ? ((a) < 0 \ ? (_GL_EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ ? (a) < (tmax) / (b) \ : ((_GL_INT_NEGATE_OVERFLOW (b) \ ? _GL_INT_CONVERT (b, tmax) >> (_GL_TYPE_WIDTH (+ (b)) - 1) \ : (tmax) / -(b)) \ <= -1 - (a))) \ : _GL_INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (b, tmin)) && (b) == -1 \ ? (_GL_EXPR_SIGNED (a) \ ? 0 < (a) + (tmin) \ : 0 < (a) && -1 - (tmin) < (a) - 1) \ : (tmin) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (_GL_INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (a, tmin)) && (a) == -1 \ ? (_GL_EXPR_SIGNED (b) ? 0 < (b) + (tmin) : -1 - (tmin) < (b) - 1) \ : (tmin) / (a) < (b)) \ : (tmax) / (b) < (a))) #endif /* _GL_INTPROPS_INTERNAL_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/intprops.h�����������������������������������������������������������0000644�0001750�0001750�00000036250�14557510505�014300� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* intprops.h -- properties of integer types Copyright (C) 2001-2024 Free Software Foundation, Inc. This program 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 program 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_INTPROPS_H #define _GL_INTPROPS_H #include "intprops-internal.h" /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if the arithmetic type T is an integer type. bool counts as an integer. */ #define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) /* True if the real type T is signed. */ #define TYPE_SIGNED(t) _GL_TYPE_SIGNED (t) /* Return 1 if the real expression E, after promotion, has a signed or floating type. Do not evaluate E. */ #define EXPR_SIGNED(e) _GL_EXPR_SIGNED (e) /* Minimum and maximum values for integer types and expressions. */ /* The width in bits of the integer type or expression T. Do not evaluate T. T must not be a bit-field expression. Padding bits are not supported; this is checked at compile-time below. */ #define TYPE_WIDTH(t) _GL_TYPE_WIDTH (t) /* The maximum and minimum values for the integer type T. */ #define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) /* Bound on length of the string representing an unsigned integer value representable in B bits. log10 (2.0) < 146/485. The smallest value of B where this bound is not tight is 2621. */ #define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) /* Bound on length of the string representing an integer type or expression T. T must not be a bit-field expression. Subtract 1 for the sign bit if T is signed, and then add 1 more for a minus sign if needed. Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 1 when its argument is unsigned, this macro may overestimate the true bound by one byte when applied to unsigned types of size 2, 4, 16, ... bytes. */ #define INT_STRLEN_BOUND(t) \ (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + _GL_SIGNED_TYPE_OR_EXPR (t)) /* Bound on buffer size needed to represent an integer type or expression T, including the terminating null. T must not be a bit-field expression. */ #define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) /* Range overflow checks. The INT_<op>_RANGE_OVERFLOW macros return 1 if the corresponding C operators overflow arithmetically when given the same arguments. These macros do not rely on undefined or implementation-defined behavior. Although their implementations are simple and straightforward, they are harder to use and may be less efficient than the INT_<op>_WRAPV, INT_<op>_OK, and INT_<op>_OVERFLOW macros described below. Example usage: long int i = ...; long int j = ...; if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) printf ("multiply would overflow"); else printf ("product is %ld", i * j); Restrictions on *_RANGE_OVERFLOW macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The arithmetic arguments (including the MIN and MAX arguments) must be of the same integer type after the usual arithmetic conversions, and the type must have minimum value MIN and maximum MAX. Unsigned types should use a zero MIN of the proper type. Because all arguments are subject to integer promotions, these macros typically do not work on types narrower than 'int'. These macros are tuned for constant MIN and MAX. For commutative operations such as A + B, they are also tuned for constant B. */ /* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (a) < (min) - (b) \ : (max) - (b) < (a)) /* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (max) + (b) < (a) \ : (a) < (min) + (b)) /* Return 1 if - A would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ _GL_INT_NEGATE_RANGE_OVERFLOW (a, min, max) /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Avoid && and || as they tickle bugs in Sun C 5.11 2010/08/13 and other compilers; see <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00401.html>. */ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? ((a) < 0 \ ? (a) < (max) / (b) \ : (b) == -1 \ ? 0 \ : (min) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (a) < (min) / (b) \ : (max) / (b) < (a))) /* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. */ #define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ ((min) < 0 && (b) == -1 && (a) < - (max)) /* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. Mathematically, % should never overflow, but on x86-like hosts INT_MIN % -1 traps, and the C standard permits this, so treat this as an overflow too. */ #define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) /* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Here, MIN and MAX are for A only, and B need not be of the same type as the other arguments. The C standard says that behavior is undefined for shifts unless 0 <= B < wordwidth, and that when A is negative then A << B has undefined behavior and A >> B has implementation-defined behavior, but do not check these other restrictions. */ #define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ ((a) < 0 \ ? (a) < (min) >> (b) \ : (max) >> (b) < (a)) /* The _GL*_OVERFLOW macros have the same restrictions as the *_RANGE_OVERFLOW macros, except that they do not assume that operands (e.g., A and B) have the same type as MIN and MAX. Instead, they assume that the result (e.g., A + B) has that type. */ #if _GL_HAS_BUILTIN_OVERFLOW_P # define _GL_ADD_OVERFLOW(a, b, min, max) \ __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) #else # define _GL_ADD_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? (b) <= (a) + (b) \ : (b) < 0 ? (a) <= (a) + (b) \ : (a) + (b) < (b)) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? 1 \ : (b) < 0 ? (a) - (b) <= (a) \ : (a) < (b)) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) #endif #define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (b) <= (a) + (b) - 1 \ : (b) < 0 && (a) + (b) <= (a)) #define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) /* Return a nonzero value if A is a mathematical multiple of B, where A is unsigned, B is negative, and MAX is the maximum value of A's type. A's type must be the same as (A % B)'s type. Normally (A % -B == 0) suffices, but things get tricky if -B would overflow. */ #define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ ? (a) \ : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ : (a) % - (b)) \ == 0) /* Check for integer overflow, and report low order bits of answer. The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. The INT_<op>_WRAPV macros compute the low-order bits of the sum, difference, and product of two C integers, and return 1 if these low-order bits are not numerically correct. These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. Example usage, assuming A and B are long int: if (INT_MULTIPLY_OVERFLOW (a, b)) printf ("result would overflow\n"); else printf ("result is %ld (no overflow)\n", a * b); Example usage with WRAPV flavor: long int result; bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); printf ("result is %ld (%s)\n", result, overflow ? "after overflow" : "no overflow"); Restrictions on these macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The WRAPV macros are not constant expressions. They support only +, binary -, and *. Because the WRAPV macros convert the result, they report overflow in different circumstances than the OVERFLOW macros do. For example, in the typical case with 16-bit 'short' and 32-bit 'int', if A, B and *R are all of type 'short' then INT_ADD_OVERFLOW (A, B) returns false because the addition cannot overflow after A and B are converted to 'int', whereas INT_ADD_WRAPV (A, B, R) returns true or false depending on whether the sum fits into 'short'. These macros are tuned for their last input argument being a constant. A, B, and *R should be integers; they need not be the same type, and they need not be all signed or all unsigned. However, none of the integer types should be bit-precise, and *R's type should not be char, bool, or an enumeration type. Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, A % B, and A << B would overflow, respectively. */ #define INT_ADD_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) #define INT_SUBTRACT_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) #define INT_NEGATE_OVERFLOW(a) _GL_INT_NEGATE_OVERFLOW (a) #define INT_MULTIPLY_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) #define INT_DIVIDE_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) #define INT_REMAINDER_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) #define INT_LEFT_SHIFT_OVERFLOW(a, b) \ INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) /* Return 1 if the expression A <op> B would overflow, where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, assuming MIN and MAX are the minimum and maximum for the result type. Arguments should be free of side effects. */ #define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ op_result_overflow (a, b, \ _GL_INT_MINIMUM (_GL_INT_CONVERT (a, b)), \ _GL_INT_MAXIMUM (_GL_INT_CONVERT (a, b))) /* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. Return 1 if the result overflows. See above for restrictions. */ #define INT_ADD_WRAPV(a, b, r) _GL_INT_ADD_WRAPV (a, b, r) #define INT_SUBTRACT_WRAPV(a, b, r) _GL_INT_SUBTRACT_WRAPV (a, b, r) #define INT_MULTIPLY_WRAPV(a, b, r) _GL_INT_MULTIPLY_WRAPV (a, b, r) /* The following macros compute A + B, A - B, and A * B, respectively. If no overflow occurs, they set *R to the result and return 1; otherwise, they return 0 and may modify *R. Example usage: long int result; if (INT_ADD_OK (a, b, &result)) printf ("result is %ld\n", result); else printf ("overflow\n"); A, B, and *R should be integers; they need not be the same type, and they need not be all signed or all unsigned. However, none of the integer types should be bit-precise, and *R's type should not be char, bool, or an enumeration type. These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. These macros are not constant expressions. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. These macros are tuned for B being a constant. */ #define INT_ADD_OK(a, b, r) (! INT_ADD_WRAPV (a, b, r)) #define INT_SUBTRACT_OK(a, b, r) (! INT_SUBTRACT_WRAPV (a, b, r)) #define INT_MULTIPLY_OK(a, b, r) (! INT_MULTIPLY_WRAPV (a, b, r)) #endif /* _GL_INTPROPS_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/inttypes.in.h��������������������������������������������������������0000644�0001750�0001750�00000053147�14557510505�014712� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2006-2024 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Derek Price. This file is part of gnulib. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* * ISO C 99 <inttypes.h> for platforms that lack it. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html> */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Include the original <inttypes.h> if it exists, and if this file has not been included yet or if this file includes gnulib stdint.h which in turn includes this file. The include_next requires a split double-inclusion guard. */ #if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H # if @HAVE_INTTYPES_H@ /* Some pre-C++11 <stdint.h> implementations need this. */ # if defined __cplusplus && ! defined __STDC_FORMAT_MACROS # define __STDC_FORMAT_MACROS 1 # endif # @INCLUDE_NEXT@ @NEXT_INTTYPES_H@ # define _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H # endif #endif #if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H #define INTTYPES_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Include <stdint.h> or the gnulib replacement. But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include <stdint.h> #endif /* Get CHAR_BIT, INT_MAX, LONG_MAX, etc. */ #include <limits.h> /* On mingw, __USE_MINGW_ANSI_STDIO only works if <stdio.h> is also included */ #if defined _WIN32 && ! defined __CYGWIN__ # include <stdio.h> #endif #if !(INT_MAX == 0x7fffffff && INT_MIN + INT_MAX == -1) # error "This file assumes that 'int' is 32-bit two's complement. Please report your platform and compiler to <bug-gnulib@gnu.org>." #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* 7.8.1 Macros for format specifiers */ #if defined _TNS_R_TARGET /* Tandem NonStop R series and compatible platforms released before July 2005 support %Ld but not %lld. */ # define _LONG_LONG_FORMAT_PREFIX "L" #else # define _LONG_LONG_FORMAT_PREFIX "ll" #endif #if !defined PRId8 # ifdef INT8_MAX # define PRId8 "d" # endif #endif #if !defined PRIi8 # ifdef INT8_MAX # define PRIi8 "i" # endif #endif #if !defined PRIo8 # ifdef UINT8_MAX # define PRIo8 "o" # endif #endif #if !defined PRIu8 # ifdef UINT8_MAX # define PRIu8 "u" # endif #endif #if !defined PRIx8 # ifdef UINT8_MAX # define PRIx8 "x" # endif #endif #if !defined PRIX8 # ifdef UINT8_MAX # define PRIX8 "X" # endif #endif #if !defined PRId16 # ifdef INT16_MAX # define PRId16 "d" # endif #endif #if !defined PRIi16 # ifdef INT16_MAX # define PRIi16 "i" # endif #endif #if !defined PRIo16 # ifdef UINT16_MAX # define PRIo16 "o" # endif #endif #if !defined PRIu16 # ifdef UINT16_MAX # define PRIu16 "u" # endif #endif #if !defined PRIx16 # ifdef UINT16_MAX # define PRIx16 "x" # endif #endif #if !defined PRIX16 # ifdef UINT16_MAX # define PRIX16 "X" # endif #endif #if !defined PRId32 # ifdef INT32_MAX # define PRId32 "d" # endif #endif #if !defined PRIi32 # ifdef INT32_MAX # define PRIi32 "i" # endif #endif #if !defined PRIo32 # ifdef UINT32_MAX # define PRIo32 "o" # endif #endif #if !defined PRIu32 # ifdef UINT32_MAX # define PRIu32 "u" # endif #endif #if !defined PRIx32 # ifdef UINT32_MAX # define PRIx32 "x" # endif #endif #if !defined PRIX32 # ifdef UINT32_MAX # define PRIX32 "X" # endif #endif #ifdef INT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) # define _PRI64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _PRI64_PREFIX "I64" # elif LONG_MAX >> 30 == 1 # define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRId64 # define PRId64 _PRI64_PREFIX "d" # endif # if !defined PRIi64 # define PRIi64 _PRI64_PREFIX "i" # endif #endif #ifdef UINT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) # define _PRIu64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _PRIu64_PREFIX "I64" # elif ULONG_MAX >> 31 == 1 # define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRIo64 # define PRIo64 _PRIu64_PREFIX "o" # endif # if !defined PRIu64 # define PRIu64 _PRIu64_PREFIX "u" # endif # if !defined PRIx64 # define PRIx64 _PRIu64_PREFIX "x" # endif # if !defined PRIX64 # define PRIX64 _PRIu64_PREFIX "X" # endif #endif #if !defined PRIdLEAST8 # define PRIdLEAST8 "d" #endif #if !defined PRIiLEAST8 # define PRIiLEAST8 "i" #endif #if !defined PRIoLEAST8 # define PRIoLEAST8 "o" #endif #if !defined PRIuLEAST8 # define PRIuLEAST8 "u" #endif #if !defined PRIxLEAST8 # define PRIxLEAST8 "x" #endif #if !defined PRIXLEAST8 # define PRIXLEAST8 "X" #endif #if !defined PRIdLEAST16 # define PRIdLEAST16 "d" #endif #if !defined PRIiLEAST16 # define PRIiLEAST16 "i" #endif #if !defined PRIoLEAST16 # define PRIoLEAST16 "o" #endif #if !defined PRIuLEAST16 # define PRIuLEAST16 "u" #endif #if !defined PRIxLEAST16 # define PRIxLEAST16 "x" #endif #if !defined PRIXLEAST16 # define PRIXLEAST16 "X" #endif #if !defined PRIdLEAST32 # define PRIdLEAST32 "d" #endif #if !defined PRIiLEAST32 # define PRIiLEAST32 "i" #endif #if !defined PRIoLEAST32 # define PRIoLEAST32 "o" #endif #if !defined PRIuLEAST32 # define PRIuLEAST32 "u" #endif #if !defined PRIxLEAST32 # define PRIxLEAST32 "x" #endif #if !defined PRIXLEAST32 # define PRIXLEAST32 "X" #endif #ifdef INT64_MAX # if !defined PRIdLEAST64 # define PRIdLEAST64 PRId64 # endif # if !defined PRIiLEAST64 # define PRIiLEAST64 PRIi64 # endif #endif #ifdef UINT64_MAX # if !defined PRIoLEAST64 # define PRIoLEAST64 PRIo64 # endif # if !defined PRIuLEAST64 # define PRIuLEAST64 PRIu64 # endif # if !defined PRIxLEAST64 # define PRIxLEAST64 PRIx64 # endif # if !defined PRIXLEAST64 # define PRIXLEAST64 PRIX64 # endif #endif #if !defined PRIdFAST8 # if INT_FAST8_MAX > INT32_MAX # define PRIdFAST8 PRId64 # else # define PRIdFAST8 "d" # endif #endif #if !defined PRIiFAST8 # if INT_FAST8_MAX > INT32_MAX # define PRIiFAST8 PRIi64 # else # define PRIiFAST8 "i" # endif #endif #if !defined PRIoFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIoFAST8 PRIo64 # else # define PRIoFAST8 "o" # endif #endif #if !defined PRIuFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIuFAST8 PRIu64 # else # define PRIuFAST8 "u" # endif #endif #if !defined PRIxFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIxFAST8 PRIx64 # else # define PRIxFAST8 "x" # endif #endif #if !defined PRIXFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIXFAST8 PRIX64 # else # define PRIXFAST8 "X" # endif #endif #if !defined PRIdFAST16 # if INT_FAST16_MAX > INT32_MAX # define PRIdFAST16 PRId64 # else # define PRIdFAST16 "d" # endif #endif #if !defined PRIiFAST16 # if INT_FAST16_MAX > INT32_MAX # define PRIiFAST16 PRIi64 # else # define PRIiFAST16 "i" # endif #endif #if !defined PRIoFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIoFAST16 PRIo64 # else # define PRIoFAST16 "o" # endif #endif #if !defined PRIuFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIuFAST16 PRIu64 # else # define PRIuFAST16 "u" # endif #endif #if !defined PRIxFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIxFAST16 PRIx64 # else # define PRIxFAST16 "x" # endif #endif #if !defined PRIXFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIXFAST16 PRIX64 # else # define PRIXFAST16 "X" # endif #endif #if !defined PRIdFAST32 # if INT_FAST32_MAX > INT32_MAX # define PRIdFAST32 PRId64 # else # define PRIdFAST32 "d" # endif #endif #if !defined PRIiFAST32 # if INT_FAST32_MAX > INT32_MAX # define PRIiFAST32 PRIi64 # else # define PRIiFAST32 "i" # endif #endif #if !defined PRIoFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIoFAST32 PRIo64 # else # define PRIoFAST32 "o" # endif #endif #if !defined PRIuFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIuFAST32 PRIu64 # else # define PRIuFAST32 "u" # endif #endif #if !defined PRIxFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIxFAST32 PRIx64 # else # define PRIxFAST32 "x" # endif #endif #if !defined PRIXFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIXFAST32 PRIX64 # else # define PRIXFAST32 "X" # endif #endif #ifdef INT64_MAX # if !defined PRIdFAST64 # define PRIdFAST64 PRId64 # endif # if !defined PRIiFAST64 # define PRIiFAST64 PRIi64 # endif #endif #ifdef UINT64_MAX # if !defined PRIoFAST64 # define PRIoFAST64 PRIo64 # endif # if !defined PRIuFAST64 # define PRIuFAST64 PRIu64 # endif # if !defined PRIxFAST64 # define PRIxFAST64 PRIx64 # endif # if !defined PRIXFAST64 # define PRIXFAST64 PRIX64 # endif #endif #if !defined PRIdMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define PRIdMAX PRId64 # else # define PRIdMAX "ld" # endif #endif #if !defined PRIiMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define PRIiMAX PRIi64 # else # define PRIiMAX "li" # endif #endif #if !defined PRIoMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIoMAX PRIo64 # else # define PRIoMAX "lo" # endif #endif #if !defined PRIuMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIuMAX PRIu64 # else # define PRIuMAX "lu" # endif #endif #if !defined PRIxMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIxMAX PRIx64 # else # define PRIxMAX "lx" # endif #endif #if !defined PRIXMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIXMAX PRIX64 # else # define PRIXMAX "lX" # endif #endif #if !defined PRIdPTR # ifdef INTPTR_MAX # define PRIdPTR @PRIPTR_PREFIX@ "d" # endif #endif #if !defined PRIiPTR # ifdef INTPTR_MAX # define PRIiPTR @PRIPTR_PREFIX@ "i" # endif #endif #if !defined PRIoPTR # ifdef UINTPTR_MAX # define PRIoPTR @PRIPTR_PREFIX@ "o" # endif #endif #if !defined PRIuPTR # ifdef UINTPTR_MAX # define PRIuPTR @PRIPTR_PREFIX@ "u" # endif #endif #if !defined PRIxPTR # ifdef UINTPTR_MAX # define PRIxPTR @PRIPTR_PREFIX@ "x" # endif #endif #if !defined PRIXPTR # ifdef UINTPTR_MAX # define PRIXPTR @PRIPTR_PREFIX@ "X" # endif #endif #if !defined SCNd8 # ifdef INT8_MAX # define SCNd8 "hhd" # endif #endif #if !defined SCNi8 # ifdef INT8_MAX # define SCNi8 "hhi" # endif #endif #if !defined SCNo8 # ifdef UINT8_MAX # define SCNo8 "hho" # endif #endif #if !defined SCNu8 # ifdef UINT8_MAX # define SCNu8 "hhu" # endif #endif #if !defined SCNx8 # ifdef UINT8_MAX # define SCNx8 "hhx" # endif #endif #if !defined SCNd16 # ifdef INT16_MAX # define SCNd16 "hd" # endif #endif #if !defined SCNi16 # ifdef INT16_MAX # define SCNi16 "hi" # endif #endif #if !defined SCNo16 # ifdef UINT16_MAX # define SCNo16 "ho" # endif #endif #if !defined SCNu16 # ifdef UINT16_MAX # define SCNu16 "hu" # endif #endif #if !defined SCNx16 # ifdef UINT16_MAX # define SCNx16 "hx" # endif #endif #if !defined SCNd32 # ifdef INT32_MAX # define SCNd32 "d" # endif #endif #if !defined SCNi32 # ifdef INT32_MAX # define SCNi32 "i" # endif #endif #if !defined SCNo32 # ifdef UINT32_MAX # define SCNo32 "o" # endif #endif #if !defined SCNu32 # ifdef UINT32_MAX # define SCNu32 "u" # endif #endif #if !defined SCNx32 # ifdef UINT32_MAX # define SCNx32 "x" # endif #endif #ifdef INT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) # define _SCN64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _SCN64_PREFIX "I64" # elif LONG_MAX >> 30 == 1 # define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNd64 # define SCNd64 _SCN64_PREFIX "d" # endif # if !defined SCNi64 # define SCNi64 _SCN64_PREFIX "i" # endif #endif #ifdef UINT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) # define _SCNu64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _SCNu64_PREFIX "I64" # elif ULONG_MAX >> 31 == 1 # define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNo64 # define SCNo64 _SCNu64_PREFIX "o" # endif # if !defined SCNu64 # define SCNu64 _SCNu64_PREFIX "u" # endif # if !defined SCNx64 # define SCNx64 _SCNu64_PREFIX "x" # endif #endif #if !defined SCNdLEAST8 # define SCNdLEAST8 "hhd" #endif #if !defined SCNiLEAST8 # define SCNiLEAST8 "hhi" #endif #if !defined SCNoLEAST8 # define SCNoLEAST8 "hho" #endif #if !defined SCNuLEAST8 # define SCNuLEAST8 "hhu" #endif #if !defined SCNxLEAST8 # define SCNxLEAST8 "hhx" #endif #if !defined SCNdLEAST16 # define SCNdLEAST16 "hd" #endif #if !defined SCNiLEAST16 # define SCNiLEAST16 "hi" #endif #if !defined SCNoLEAST16 # define SCNoLEAST16 "ho" #endif #if !defined SCNuLEAST16 # define SCNuLEAST16 "hu" #endif #if !defined SCNxLEAST16 # define SCNxLEAST16 "hx" #endif #if !defined SCNdLEAST32 # define SCNdLEAST32 "d" #endif #if !defined SCNiLEAST32 # define SCNiLEAST32 "i" #endif #if !defined SCNoLEAST32 # define SCNoLEAST32 "o" #endif #if !defined SCNuLEAST32 # define SCNuLEAST32 "u" #endif #if !defined SCNxLEAST32 # define SCNxLEAST32 "x" #endif #ifdef INT64_MAX # if !defined SCNdLEAST64 # define SCNdLEAST64 SCNd64 # endif # if !defined SCNiLEAST64 # define SCNiLEAST64 SCNi64 # endif #endif #ifdef UINT64_MAX # if !defined SCNoLEAST64 # define SCNoLEAST64 SCNo64 # endif # if !defined SCNuLEAST64 # define SCNuLEAST64 SCNu64 # endif # if !defined SCNxLEAST64 # define SCNxLEAST64 SCNx64 # endif #endif #if !defined SCNdFAST8 # if INT_FAST8_MAX > INT32_MAX # define SCNdFAST8 SCNd64 # elif INT_FAST8_MAX == 0x7fff # define SCNdFAST8 "hd" # elif INT_FAST8_MAX == 0x7f # define SCNdFAST8 "hhd" # else # define SCNdFAST8 "d" # endif #endif #if !defined SCNiFAST8 # if INT_FAST8_MAX > INT32_MAX # define SCNiFAST8 SCNi64 # elif INT_FAST8_MAX == 0x7fff # define SCNiFAST8 "hi" # elif INT_FAST8_MAX == 0x7f # define SCNiFAST8 "hhi" # else # define SCNiFAST8 "i" # endif #endif #if !defined SCNoFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNoFAST8 SCNo64 # elif UINT_FAST8_MAX == 0xffff # define SCNoFAST8 "ho" # elif UINT_FAST8_MAX == 0xff # define SCNoFAST8 "hho" # else # define SCNoFAST8 "o" # endif #endif #if !defined SCNuFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNuFAST8 SCNu64 # elif UINT_FAST8_MAX == 0xffff # define SCNuFAST8 "hu" # elif UINT_FAST8_MAX == 0xff # define SCNuFAST8 "hhu" # else # define SCNuFAST8 "u" # endif #endif #if !defined SCNxFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNxFAST8 SCNx64 # elif UINT_FAST8_MAX == 0xffff # define SCNxFAST8 "hx" # elif UINT_FAST8_MAX == 0xff # define SCNxFAST8 "hhx" # else # define SCNxFAST8 "x" # endif #endif #if !defined SCNdFAST16 # if INT_FAST16_MAX > INT32_MAX # define SCNdFAST16 SCNd64 # elif INT_FAST16_MAX == 0x7fff # define SCNdFAST16 "hd" # else # define SCNdFAST16 "d" # endif #endif #if !defined SCNiFAST16 # if INT_FAST16_MAX > INT32_MAX # define SCNiFAST16 SCNi64 # elif INT_FAST16_MAX == 0x7fff # define SCNiFAST16 "hi" # else # define SCNiFAST16 "i" # endif #endif #if !defined SCNoFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNoFAST16 SCNo64 # elif UINT_FAST16_MAX == 0xffff # define SCNoFAST16 "ho" # else # define SCNoFAST16 "o" # endif #endif #if !defined SCNuFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNuFAST16 SCNu64 # elif UINT_FAST16_MAX == 0xffff # define SCNuFAST16 "hu" # else # define SCNuFAST16 "u" # endif #endif #if !defined SCNxFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNxFAST16 SCNx64 # elif UINT_FAST16_MAX == 0xffff # define SCNxFAST16 "hx" # else # define SCNxFAST16 "x" # endif #endif #if !defined SCNdFAST32 # if INT_FAST32_MAX > INT32_MAX # define SCNdFAST32 SCNd64 # else # define SCNdFAST32 "d" # endif #endif #if !defined SCNiFAST32 # if INT_FAST32_MAX > INT32_MAX # define SCNiFAST32 SCNi64 # else # define SCNiFAST32 "i" # endif #endif #if !defined SCNoFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNoFAST32 SCNo64 # else # define SCNoFAST32 "o" # endif #endif #if !defined SCNuFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNuFAST32 SCNu64 # else # define SCNuFAST32 "u" # endif #endif #if !defined SCNxFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNxFAST32 SCNx64 # else # define SCNxFAST32 "x" # endif #endif #ifdef INT64_MAX # if !defined SCNdFAST64 # define SCNdFAST64 SCNd64 # endif # if !defined SCNiFAST64 # define SCNiFAST64 SCNi64 # endif #endif #ifdef UINT64_MAX # if !defined SCNoFAST64 # define SCNoFAST64 SCNo64 # endif # if !defined SCNuFAST64 # define SCNuFAST64 SCNu64 # endif # if !defined SCNxFAST64 # define SCNxFAST64 SCNx64 # endif #endif #if !defined SCNdMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define SCNdMAX SCNd64 # else # define SCNdMAX "ld" # endif #endif #if !defined SCNiMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define SCNiMAX SCNi64 # else # define SCNiMAX "li" # endif #endif #if !defined SCNoMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNoMAX SCNo64 # else # define SCNoMAX "lo" # endif #endif #if !defined SCNuMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNuMAX SCNu64 # else # define SCNuMAX "lu" # endif #endif #if !defined SCNxMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNxMAX SCNx64 # else # define SCNxMAX "lx" # endif #endif #if !defined SCNdPTR # ifdef INTPTR_MAX # define SCNdPTR @PRIPTR_PREFIX@ "d" # endif #endif #if !defined SCNiPTR # ifdef INTPTR_MAX # define SCNiPTR @PRIPTR_PREFIX@ "i" # endif #endif #if !defined SCNoPTR # ifdef UINTPTR_MAX # define SCNoPTR @PRIPTR_PREFIX@ "o" # endif #endif #if !defined SCNuPTR # ifdef UINTPTR_MAX # define SCNuPTR @PRIPTR_PREFIX@ "u" # endif #endif #if !defined SCNxPTR # ifdef UINTPTR_MAX # define SCNxPTR @PRIPTR_PREFIX@ "x" # endif #endif /* 7.8.2 Functions for greatest-width integer types */ #ifdef __cplusplus extern "C" { #endif #if @GNULIB_IMAXABS@ # if @REPLACE_IMAXABS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef imaxabs # define imaxabs rpl_imaxabs # endif _GL_FUNCDECL_RPL (imaxabs, intmax_t, (intmax_t x)); _GL_CXXALIAS_RPL (imaxabs, intmax_t, (intmax_t x)); # else # if !@HAVE_DECL_IMAXABS@ _GL_FUNCDECL_SYS (imaxabs, intmax_t, (intmax_t x)); # endif _GL_CXXALIAS_SYS (imaxabs, intmax_t, (intmax_t x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (imaxabs); # endif #elif defined GNULIB_POSIXCHECK # undef imaxabs # if HAVE_RAW_DECL_IMAXABS _GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - " "use gnulib module imaxabs for portability"); # endif #endif #if @GNULIB_IMAXDIV@ # if !@HAVE_IMAXDIV_T@ # if !GNULIB_defined_imaxdiv_t typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; # define GNULIB_defined_imaxdiv_t 1 # endif # endif # if @REPLACE_IMAXDIV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef imaxdiv # define imaxdiv rpl_imaxdiv # endif _GL_FUNCDECL_RPL (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom)); _GL_CXXALIAS_RPL (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom)); # else # if !@HAVE_DECL_IMAXDIV@ _GL_FUNCDECL_SYS (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom)); # endif _GL_CXXALIAS_SYS (imaxdiv, imaxdiv_t, (intmax_t numer, intmax_t denom)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (imaxdiv); # endif #elif defined GNULIB_POSIXCHECK # undef imaxdiv # if HAVE_RAW_DECL_IMAXDIV _GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - " "use gnulib module imaxdiv for portability"); # endif #endif #if @GNULIB_STRTOIMAX@ # if @REPLACE_STRTOIMAX@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtoimax # define strtoimax rpl_strtoimax # endif _GL_FUNCDECL_RPL (strtoimax, intmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *restrict, char **restrict, int)); # else # if !@HAVE_DECL_STRTOIMAX@ # undef strtoimax _GL_FUNCDECL_SYS (strtoimax, intmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *restrict, char **restrict, int)); # endif _GL_CXXALIASWARN (strtoimax); #elif defined GNULIB_POSIXCHECK # undef strtoimax # if HAVE_RAW_DECL_STRTOIMAX _GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - " "use gnulib module strtoimax for portability"); # endif #endif #if @GNULIB_STRTOUMAX@ # if @REPLACE_STRTOUMAX@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtoumax # define strtoumax rpl_strtoumax # endif _GL_FUNCDECL_RPL (strtoumax, uintmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoumax, uintmax_t, (const char *restrict, char **restrict, int)); # else # if !@HAVE_DECL_STRTOUMAX@ # undef strtoumax _GL_FUNCDECL_SYS (strtoumax, uintmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *restrict, char **restrict, int)); # endif _GL_CXXALIASWARN (strtoumax); #elif defined GNULIB_POSIXCHECK # undef strtoumax # if HAVE_RAW_DECL_STRTOUMAX _GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - " "use gnulib module strtoumax for portability"); # endif #endif /* Don't bother defining or declaring wcstoimax and wcstoumax, since wide-character functions like this are hardly ever useful. */ #ifdef __cplusplus } #endif #endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/float+.h�������������������������������������������������������������0000644�0001750�0001750�00000013007�14557510505�013575� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Supplemental information about the floating-point formats. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _FLOATPLUS_H #define _FLOATPLUS_H #include <float.h> #include <limits.h> /* Number of bits in the mantissa of a floating-point number, including the "hidden bit". */ #if FLT_RADIX == 2 # define FLT_MANT_BIT FLT_MANT_DIG # define DBL_MANT_BIT DBL_MANT_DIG # define LDBL_MANT_BIT LDBL_MANT_DIG #elif FLT_RADIX == 4 # define FLT_MANT_BIT (FLT_MANT_DIG * 2) # define DBL_MANT_BIT (DBL_MANT_DIG * 2) # define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) #elif FLT_RADIX == 16 # define FLT_MANT_BIT (FLT_MANT_DIG * 4) # define DBL_MANT_BIT (DBL_MANT_DIG * 4) # define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) #endif /* Bit mask that can be used to mask the exponent, as an unsigned number. */ #define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) #define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) #define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) /* Number of bits used for the exponent of a floating-point number, including the exponent's sign. */ #define FLT_EXP_BIT \ (FLT_EXP_MASK < 0x100 ? 8 : \ FLT_EXP_MASK < 0x200 ? 9 : \ FLT_EXP_MASK < 0x400 ? 10 : \ FLT_EXP_MASK < 0x800 ? 11 : \ FLT_EXP_MASK < 0x1000 ? 12 : \ FLT_EXP_MASK < 0x2000 ? 13 : \ FLT_EXP_MASK < 0x4000 ? 14 : \ FLT_EXP_MASK < 0x8000 ? 15 : \ FLT_EXP_MASK < 0x10000 ? 16 : \ FLT_EXP_MASK < 0x20000 ? 17 : \ FLT_EXP_MASK < 0x40000 ? 18 : \ FLT_EXP_MASK < 0x80000 ? 19 : \ FLT_EXP_MASK < 0x100000 ? 20 : \ FLT_EXP_MASK < 0x200000 ? 21 : \ FLT_EXP_MASK < 0x400000 ? 22 : \ FLT_EXP_MASK < 0x800000 ? 23 : \ FLT_EXP_MASK < 0x1000000 ? 24 : \ FLT_EXP_MASK < 0x2000000 ? 25 : \ FLT_EXP_MASK < 0x4000000 ? 26 : \ FLT_EXP_MASK < 0x8000000 ? 27 : \ FLT_EXP_MASK < 0x10000000 ? 28 : \ FLT_EXP_MASK < 0x20000000 ? 29 : \ FLT_EXP_MASK < 0x40000000 ? 30 : \ FLT_EXP_MASK <= 0x7fffffff ? 31 : \ 32) #define DBL_EXP_BIT \ (DBL_EXP_MASK < 0x100 ? 8 : \ DBL_EXP_MASK < 0x200 ? 9 : \ DBL_EXP_MASK < 0x400 ? 10 : \ DBL_EXP_MASK < 0x800 ? 11 : \ DBL_EXP_MASK < 0x1000 ? 12 : \ DBL_EXP_MASK < 0x2000 ? 13 : \ DBL_EXP_MASK < 0x4000 ? 14 : \ DBL_EXP_MASK < 0x8000 ? 15 : \ DBL_EXP_MASK < 0x10000 ? 16 : \ DBL_EXP_MASK < 0x20000 ? 17 : \ DBL_EXP_MASK < 0x40000 ? 18 : \ DBL_EXP_MASK < 0x80000 ? 19 : \ DBL_EXP_MASK < 0x100000 ? 20 : \ DBL_EXP_MASK < 0x200000 ? 21 : \ DBL_EXP_MASK < 0x400000 ? 22 : \ DBL_EXP_MASK < 0x800000 ? 23 : \ DBL_EXP_MASK < 0x1000000 ? 24 : \ DBL_EXP_MASK < 0x2000000 ? 25 : \ DBL_EXP_MASK < 0x4000000 ? 26 : \ DBL_EXP_MASK < 0x8000000 ? 27 : \ DBL_EXP_MASK < 0x10000000 ? 28 : \ DBL_EXP_MASK < 0x20000000 ? 29 : \ DBL_EXP_MASK < 0x40000000 ? 30 : \ DBL_EXP_MASK <= 0x7fffffff ? 31 : \ 32) #define LDBL_EXP_BIT \ (LDBL_EXP_MASK < 0x100 ? 8 : \ LDBL_EXP_MASK < 0x200 ? 9 : \ LDBL_EXP_MASK < 0x400 ? 10 : \ LDBL_EXP_MASK < 0x800 ? 11 : \ LDBL_EXP_MASK < 0x1000 ? 12 : \ LDBL_EXP_MASK < 0x2000 ? 13 : \ LDBL_EXP_MASK < 0x4000 ? 14 : \ LDBL_EXP_MASK < 0x8000 ? 15 : \ LDBL_EXP_MASK < 0x10000 ? 16 : \ LDBL_EXP_MASK < 0x20000 ? 17 : \ LDBL_EXP_MASK < 0x40000 ? 18 : \ LDBL_EXP_MASK < 0x80000 ? 19 : \ LDBL_EXP_MASK < 0x100000 ? 20 : \ LDBL_EXP_MASK < 0x200000 ? 21 : \ LDBL_EXP_MASK < 0x400000 ? 22 : \ LDBL_EXP_MASK < 0x800000 ? 23 : \ LDBL_EXP_MASK < 0x1000000 ? 24 : \ LDBL_EXP_MASK < 0x2000000 ? 25 : \ LDBL_EXP_MASK < 0x4000000 ? 26 : \ LDBL_EXP_MASK < 0x8000000 ? 27 : \ LDBL_EXP_MASK < 0x10000000 ? 28 : \ LDBL_EXP_MASK < 0x20000000 ? 29 : \ LDBL_EXP_MASK < 0x40000000 ? 30 : \ LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ 32) /* Number of bits used for a floating-point number: the mantissa (not counting the "hidden bit", since it may or may not be explicit), the exponent, and the sign. */ #define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) #define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) #define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) /* Number of bytes used for a floating-point number. This can be smaller than the 'sizeof'. For example, on i386 systems, 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but sizeof (long double) = 12 or = 16. */ #define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) #define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) #define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) /* Verify that SIZEOF_FLT <= sizeof (float) etc. */ typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1]; typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1]; typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1]; #endif /* _FLOATPLUS_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/isnand-nolibm.h������������������������������������������������������0000644�0001750�0001750�00000002475�14557510505�015156� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* This file uses HAVE_ISNAND_IN_LIBC. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if HAVE_ISNAND_IN_LIBC /* Get declaration of isnan macro. */ # include <math.h> # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. */ # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) # else # undef isnand # define isnand(x) isnan ((double)(x)) # endif #else /* Test whether X is a NaN. */ # undef isnand # define isnand rpl_isnand extern int isnand (double x); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/isnanf-nolibm.h������������������������������������������������������0000644�0001750�0001750�00000003263�14557510505�015154� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* This file uses HAVE_ISNANF_IN_LIBC. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if HAVE_ISNANF_IN_LIBC /* Get declaration of isnan macro or (older) isnanf function. */ # include <math.h> # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. GCC >= 4.0 also provides __builtin_isnanf, but clang doesn't. */ # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) # elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) # else /* Get declaration of isnanf(), if not declared in <math.h>. */ # if defined __sgi /* We can't include <ieeefp.h>, because it conflicts with our definition of isnand. Therefore declare isnanf separately. */ extern int isnanf (float x); # endif # endif #else /* Test whether X is a NaN. */ # undef isnanf # define isnanf rpl_isnanf extern int isnanf (float x); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/isnanl-nolibm.h������������������������������������������������������0000644�0001750�0001750�00000002671�14557510505�015164� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* This file uses HAVE_ISNANL_IN_LIBC. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if HAVE_ISNANL_IN_LIBC /* Get declaration of isnan macro or (older) isnanl function. */ # include <math.h> # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. GCC >= 4.0 also provides __builtin_isnanl, but clang doesn't. */ # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) # elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) # endif #else /* Test whether X is a NaN. */ # undef isnanl # define isnanl rpl_isnanl extern int isnanl (long double x); #endif �����������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/iswctype-impl.h������������������������������������������������������0000644�0001750�0001750�00000001624�14557510505�015225� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a wide character has a given property. Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ int iswctype (wint_t wc, wctype_t desc) { return ((int (*) (wint_t)) desc) (wc); } ������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/langinfo.in.h��������������������������������������������������������0000644�0001750�0001750�00000015366�14557510505�014631� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <langinfo.h>. Copyright (C) 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* * POSIX <langinfo.h> for platforms that lack it or have an incomplete one. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/langinfo.h.html> */ #ifndef _@GUARD_PREFIX@_LANGINFO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_LANGINFO_H@ # @INCLUDE_NEXT@ @NEXT_LANGINFO_H@ #endif #ifndef _@GUARD_PREFIX@_LANGINFO_H #define _@GUARD_PREFIX@_LANGINFO_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if !@HAVE_LANGINFO_H@ /* A platform that lacks <langinfo.h>. */ /* Assume that it also lacks <nl_types.h> and the nl_item type. */ # if !GNULIB_defined_nl_item typedef int nl_item; # define GNULIB_defined_nl_item 1 # endif /* nl_langinfo items of the LC_CTYPE category */ # define CODESET 10000 /* nl_langinfo items of the LC_NUMERIC category */ # define RADIXCHAR 10001 # define DECIMAL_POINT RADIXCHAR # define THOUSEP 10002 # define THOUSANDS_SEP THOUSEP # define GROUPING 10114 /* nl_langinfo items of the LC_TIME category */ # define D_T_FMT 10003 # define D_FMT 10004 # define T_FMT 10005 # define T_FMT_AMPM 10006 # define AM_STR 10007 # define PM_STR 10008 # define DAY_1 10009 # define DAY_2 (DAY_1 + 1) # define DAY_3 (DAY_1 + 2) # define DAY_4 (DAY_1 + 3) # define DAY_5 (DAY_1 + 4) # define DAY_6 (DAY_1 + 5) # define DAY_7 (DAY_1 + 6) # define ABDAY_1 10016 # define ABDAY_2 (ABDAY_1 + 1) # define ABDAY_3 (ABDAY_1 + 2) # define ABDAY_4 (ABDAY_1 + 3) # define ABDAY_5 (ABDAY_1 + 4) # define ABDAY_6 (ABDAY_1 + 5) # define ABDAY_7 (ABDAY_1 + 6) # define MON_1 10023 # define MON_2 (MON_1 + 1) # define MON_3 (MON_1 + 2) # define MON_4 (MON_1 + 3) # define MON_5 (MON_1 + 4) # define MON_6 (MON_1 + 5) # define MON_7 (MON_1 + 6) # define MON_8 (MON_1 + 7) # define MON_9 (MON_1 + 8) # define MON_10 (MON_1 + 9) # define MON_11 (MON_1 + 10) # define MON_12 (MON_1 + 11) # define ALTMON_1 10200 # define ALTMON_2 (ALTMON_1 + 1) # define ALTMON_3 (ALTMON_1 + 2) # define ALTMON_4 (ALTMON_1 + 3) # define ALTMON_5 (ALTMON_1 + 4) # define ALTMON_6 (ALTMON_1 + 5) # define ALTMON_7 (ALTMON_1 + 6) # define ALTMON_8 (ALTMON_1 + 7) # define ALTMON_9 (ALTMON_1 + 8) # define ALTMON_10 (ALTMON_1 + 9) # define ALTMON_11 (ALTMON_1 + 10) # define ALTMON_12 (ALTMON_1 + 11) # define ABMON_1 10035 # define ABMON_2 (ABMON_1 + 1) # define ABMON_3 (ABMON_1 + 2) # define ABMON_4 (ABMON_1 + 3) # define ABMON_5 (ABMON_1 + 4) # define ABMON_6 (ABMON_1 + 5) # define ABMON_7 (ABMON_1 + 6) # define ABMON_8 (ABMON_1 + 7) # define ABMON_9 (ABMON_1 + 8) # define ABMON_10 (ABMON_1 + 9) # define ABMON_11 (ABMON_1 + 10) # define ABMON_12 (ABMON_1 + 11) # define ERA 10047 # define ERA_D_FMT 10048 # define ERA_D_T_FMT 10049 # define ERA_T_FMT 10050 # define ALT_DIGITS 10051 /* nl_langinfo items of the LC_MONETARY category */ # define CRNCYSTR 10052 # define CURRENCY_SYMBOL CRNCYSTR # define INT_CURR_SYMBOL 10100 # define MON_DECIMAL_POINT 10101 # define MON_THOUSANDS_SEP 10102 # define MON_GROUPING 10103 # define POSITIVE_SIGN 10104 # define NEGATIVE_SIGN 10105 # define FRAC_DIGITS 10106 # define INT_FRAC_DIGITS 10107 # define P_CS_PRECEDES 10108 # define N_CS_PRECEDES 10109 # define P_SEP_BY_SPACE 10110 # define N_SEP_BY_SPACE 10111 # define P_SIGN_POSN 10112 # define N_SIGN_POSN 10113 /* nl_langinfo items of the LC_MESSAGES category */ # define YESEXPR 10053 # define NOEXPR 10054 #else /* A platform that has <langinfo.h>. */ # if !@HAVE_LANGINFO_CODESET@ # define CODESET 10000 # define GNULIB_defined_CODESET 1 # endif # if !@HAVE_LANGINFO_T_FMT_AMPM@ # define T_FMT_AMPM 10006 # define GNULIB_defined_T_FMT_AMPM 1 # endif # if !@HAVE_LANGINFO_ALTMON@ # define ALTMON_1 10200 # define ALTMON_2 (ALTMON_1 + 1) # define ALTMON_3 (ALTMON_1 + 2) # define ALTMON_4 (ALTMON_1 + 3) # define ALTMON_5 (ALTMON_1 + 4) # define ALTMON_6 (ALTMON_1 + 5) # define ALTMON_7 (ALTMON_1 + 6) # define ALTMON_8 (ALTMON_1 + 7) # define ALTMON_9 (ALTMON_1 + 8) # define ALTMON_10 (ALTMON_1 + 9) # define ALTMON_11 (ALTMON_1 + 10) # define ALTMON_12 (ALTMON_1 + 11) # define GNULIB_defined_ALTMON 1 # endif # if !@HAVE_LANGINFO_ERA@ # define ERA 10047 # define ERA_D_FMT 10048 # define ERA_D_T_FMT 10049 # define ERA_T_FMT 10050 # define ALT_DIGITS 10051 # define GNULIB_defined_ERA 1 # endif # if !@HAVE_LANGINFO_YESEXPR@ # define YESEXPR 10053 # define NOEXPR 10054 # define GNULIB_defined_YESEXPR 1 # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ /* Return a piece of locale dependent information. Note: The difference between nl_langinfo (CODESET) and locale_charset () is that the latter normalizes the encoding names to GNU conventions. */ #if @GNULIB_NL_LANGINFO@ # if @REPLACE_NL_LANGINFO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef nl_langinfo # define nl_langinfo rpl_nl_langinfo # endif _GL_FUNCDECL_RPL (nl_langinfo, char *, (nl_item item)); _GL_CXXALIAS_RPL (nl_langinfo, char *, (nl_item item)); # else # if !@HAVE_NL_LANGINFO@ _GL_FUNCDECL_SYS (nl_langinfo, char *, (nl_item item)); # endif _GL_CXXALIAS_SYS (nl_langinfo, char *, (nl_item item)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (nl_langinfo); # endif #elif defined GNULIB_POSIXCHECK # undef nl_langinfo # if HAVE_RAW_DECL_NL_LANGINFO _GL_WARN_ON_USE (nl_langinfo, "nl_langinfo is not portable - " "use gnulib module nl_langinfo for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_LANGINFO_H */ #endif /* _@GUARD_PREFIX@_LANGINFO_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/cdefs.h��������������������������������������������������������������0000644�0001750�0001750�00000064377�14557510505�013521� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992-2024 Free Software Foundation, Inc. Copyright The GNU Toolchain Authors. This file is part of the GNU C Library. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _SYS_CDEFS_H #define _SYS_CDEFS_H 1 /* We are almost always included from features.h. */ #ifndef _FEATURES_H # include <features.h> #endif /* The GNU libc does not support any K&R compilers or the traditional mode of ISO C compilers anymore. Check for some of the combinations not supported anymore. */ #if defined __GNUC__ && !defined __STDC__ # error "You need a ISO C conforming compiler to use the glibc headers" #endif /* Some user header file might have defined this before. */ #undef __P #undef __PMT /* Compilers that lack __has_attribute may object to #if defined __has_attribute && __has_attribute (...) even though they do not need to evaluate the right-hand side of the &&. Similarly for __has_builtin, etc. */ #if (defined __has_attribute \ && (!defined __clang_minor__ \ || (defined __apple_build_version__ \ ? 7000000 <= __apple_build_version__ \ : 5 <= __clang_major__))) # define __glibc_has_attribute(attr) __has_attribute (attr) #else # define __glibc_has_attribute(attr) 0 #endif #ifdef __has_builtin # define __glibc_has_builtin(name) __has_builtin (name) #else # define __glibc_has_builtin(name) 0 #endif #ifdef __has_extension # define __glibc_has_extension(ext) __has_extension (ext) #else # define __glibc_has_extension(ext) 0 #endif #if defined __GNUC__ || defined __clang__ /* All functions, except those with callbacks or those that synchronize memory, are leaf functions. */ # if __GNUC_PREREQ (4, 6) && !defined _LIBC # define __LEAF , __leaf__ # define __LEAF_ATTR __attribute__ ((__leaf__)) # else # define __LEAF # define __LEAF_ATTR # endif /* GCC can always grok prototypes. For C++ programs we add throw() to help it optimize the function calls. But this only works with gcc 2.8.x and egcs. For gcc 3.4 and up we even mark C functions as non-throwing using a function attribute since programs can use the -fexceptions options for C code as well. */ # if !defined __cplusplus \ && (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__)) # define __THROW __attribute__ ((__nothrow__ __LEAF)) # define __THROWNL __attribute__ ((__nothrow__)) # define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct # define __NTHNL(fct) __attribute__ ((__nothrow__)) fct # else # if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major >= 4) # if __cplusplus >= 201103L # define __THROW noexcept (true) # else # define __THROW throw () # endif # define __THROWNL __THROW # define __NTH(fct) __LEAF_ATTR fct __THROW # define __NTHNL(fct) fct __THROW # else # define __THROW # define __THROWNL # define __NTH(fct) fct # define __NTHNL(fct) fct # endif # endif #else /* Not GCC or clang. */ # if (defined __cplusplus \ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) # define __inline inline # else # define __inline /* No inline functions. */ # endif # define __THROW # define __THROWNL # define __NTH(fct) fct #endif /* GCC || clang. */ /* These two macros are not used in glibc anymore. They are kept here only because some other projects expect the macros to be defined. */ #define __P(args) args #define __PMT(args) args /* For these things, GCC behaves the ANSI way normally, and the non-ANSI way under -traditional. */ #define __CONCAT(x,y) x ## y #define __STRING(x) #x /* This is not a typedef so `const __ptr_t' does the right thing. */ #define __ptr_t void * /* C++ needs to know that types and declarations are C, not C++. */ #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS # define __END_DECLS #endif /* Gnulib avoids these definitions, as they don't work on non-glibc platforms. In particular, __bos and __bos0 are defined differently in the Android libc. */ #ifndef __GNULIB_CDEFS /* Fortify support. */ # define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) # define __bos0(ptr) __builtin_object_size (ptr, 0) /* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available. */ # if __USE_FORTIFY_LEVEL == 3 && (__glibc_clang_prereq (9, 0) \ || __GNUC_PREREQ (12, 0)) # define __glibc_objsize0(__o) __builtin_dynamic_object_size (__o, 0) # define __glibc_objsize(__o) __builtin_dynamic_object_size (__o, 1) # else # define __glibc_objsize0(__o) __bos0 (__o) # define __glibc_objsize(__o) __bos (__o) # endif /* Compile time conditions to choose between the regular, _chk and _chk_warn variants. These conditions should get evaluated to constant and optimized away. */ # define __glibc_safe_len_cond(__l, __s, __osz) ((__l) <= (__osz) / (__s)) # define __glibc_unsigned_or_positive(__l) \ ((__typeof (__l)) 0 < (__typeof (__l)) -1 \ || (__builtin_constant_p (__l) && (__l) > 0)) /* Length is known to be safe at compile time if the __L * __S <= __OBJSZ condition can be folded to a constant and if it is true, or unknown (-1) */ # define __glibc_safe_or_unknown_len(__l, __s, __osz) \ ((__osz) == (__SIZE_TYPE__) -1 \ || (__glibc_unsigned_or_positive (__l) \ && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ (__s), (__osz))) \ && __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), (__s), (__osz)))) /* Conversely, we know at compile time that the length is unsafe if the __L * __S <= __OBJSZ condition can be folded to a constant and if it is false. */ # define __glibc_unsafe_len(__l, __s, __osz) \ (__glibc_unsigned_or_positive (__l) \ && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ __s, __osz)) \ && !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz)) /* Fortify function f. __f_alias, __f_chk and __f_chk_warn must be declared. */ # define __glibc_fortify(f, __l, __s, __osz, ...) \ (__glibc_safe_or_unknown_len (__l, __s, __osz) \ ? __ ## f ## _alias (__VA_ARGS__) \ : (__glibc_unsafe_len (__l, __s, __osz) \ ? __ ## f ## _chk_warn (__VA_ARGS__, __osz) \ : __ ## f ## _chk (__VA_ARGS__, __osz))) \ /* Fortify function f, where object size argument passed to f is the number of elements and not total size. */ # define __glibc_fortify_n(f, __l, __s, __osz, ...) \ (__glibc_safe_or_unknown_len (__l, __s, __osz) \ ? __ ## f ## _alias (__VA_ARGS__) \ : (__glibc_unsafe_len (__l, __s, __osz) \ ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s)) \ : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)))) \ #endif #if __GNUC_PREREQ (4,3) # define __warnattr(msg) __attribute__((__warning__ (msg))) # define __errordecl(name, msg) \ extern void name (void) __attribute__((__error__ (msg))) #else # define __warnattr(msg) # define __errordecl(name, msg) extern void name (void) #endif /* Support for flexible arrays. Headers that should use flexible arrays only if they're "real" (e.g. only if they won't affect sizeof()) should test #if __glibc_c99_flexarr_available. */ #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc # define __flexarr [] # define __glibc_c99_flexarr_available 1 #elif __GNUC_PREREQ (2,97) || defined __clang__ /* GCC 2.97 and clang support C99 flexible array members as an extension, even when in C89 mode or compiling C++ (any version). */ # define __flexarr [] # define __glibc_c99_flexarr_available 1 #elif defined __GNUC__ /* Pre-2.97 GCC did not support C99 flexible arrays but did have an equivalent extension with slightly different notation. */ # define __flexarr [0] # define __glibc_c99_flexarr_available 1 #else /* Some other non-C99 compiler. Approximate with [1]. */ # define __flexarr [1] # define __glibc_c99_flexarr_available 0 #endif /* __asm__ ("xyz") is used throughout the headers to rename functions at the assembly language level. This is wrapped by the __REDIRECT macro, in order to support compilers that can do this some other way. When compilers don't support asm-names at all, we have to do preprocessor tricks instead (which don't have exactly the right semantics, but it's the best we can do). Example: int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */ #if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4) # define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias)) # ifdef __cplusplus # define __REDIRECT_NTH(name, proto, alias) \ name proto __THROW __asm__ (__ASMNAME (#alias)) # define __REDIRECT_NTHNL(name, proto, alias) \ name proto __THROWNL __asm__ (__ASMNAME (#alias)) # else # define __REDIRECT_NTH(name, proto, alias) \ name proto __asm__ (__ASMNAME (#alias)) __THROW # define __REDIRECT_NTHNL(name, proto, alias) \ name proto __asm__ (__ASMNAME (#alias)) __THROWNL # endif # define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname) # define __ASMNAME2(prefix, cname) __STRING (prefix) cname /* #elif __SOME_OTHER_COMPILER__ # define __REDIRECT(name, proto, alias) name proto; \ _Pragma("let " #name " = " #alias) */ #endif /* GCC and clang have various useful declarations that can be made with the '__attribute__' syntax. All of the ways we use this do fine if they are omitted for compilers that don't understand it. */ #if !(defined __GNUC__ || defined __clang__) # define __attribute__(xyz) /* Ignore */ #endif /* At some point during the gcc 2.96 development the `malloc' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__malloc__) # define __attribute_malloc__ __attribute__ ((__malloc__)) #else # define __attribute_malloc__ /* Ignore */ #endif /* Tell the compiler which arguments to an allocation function indicate the size of the allocation. */ #if __GNUC_PREREQ (4, 3) # define __attribute_alloc_size__(params) \ __attribute__ ((__alloc_size__ params)) #else # define __attribute_alloc_size__(params) /* Ignore. */ #endif /* Tell the compiler which argument to an allocation function indicates the alignment of the allocation. */ #if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__alloc_align__) # define __attribute_alloc_align__(param) \ __attribute__ ((__alloc_align__ param)) #else # define __attribute_alloc_align__(param) /* Ignore. */ #endif /* At some point during the gcc 2.96 development the `pure' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__pure__) # define __attribute_pure__ __attribute__ ((__pure__)) #else # define __attribute_pure__ /* Ignore */ #endif /* This declaration tells the compiler that the value is constant. */ #if __GNUC_PREREQ (2,5) || __glibc_has_attribute (__const__) # define __attribute_const__ __attribute__ ((__const__)) #else # define __attribute_const__ /* Ignore */ #endif #if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__) # define __attribute_maybe_unused__ __attribute__ ((__unused__)) #else # define __attribute_maybe_unused__ /* Ignore */ #endif /* At some point during the gcc 3.1 development the `used' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (3,1) || __glibc_has_attribute (__used__) # define __attribute_used__ __attribute__ ((__used__)) # define __attribute_noinline__ __attribute__ ((__noinline__)) #else # define __attribute_used__ __attribute__ ((__unused__)) # define __attribute_noinline__ /* Ignore */ #endif /* Since version 3.2, gcc allows marking deprecated functions. */ #if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__deprecated__) # define __attribute_deprecated__ __attribute__ ((__deprecated__)) #else # define __attribute_deprecated__ /* Ignore */ #endif /* Since version 4.5, gcc also allows one to specify the message printed when a deprecated function is used. clang claims to be gcc 4.2, but may also support this feature. */ #if __GNUC_PREREQ (4,5) \ || __glibc_has_extension (__attribute_deprecated_with_message__) # define __attribute_deprecated_msg__(msg) \ __attribute__ ((__deprecated__ (msg))) #else # define __attribute_deprecated_msg__(msg) __attribute_deprecated__ #endif /* At some point during the gcc 2.8 development the `format_arg' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. If several `format_arg' attributes are given for the same function, in gcc-3.0 and older, all but the last one are ignored. In newer gccs, all designated arguments are considered. */ #if __GNUC_PREREQ (2,8) || __glibc_has_attribute (__format_arg__) # define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) #else # define __attribute_format_arg__(x) /* Ignore */ #endif /* At some point during the gcc 2.97 development the `strfmon' format attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (2,97) || __glibc_has_attribute (__format__) # define __attribute_format_strfmon__(a,b) \ __attribute__ ((__format__ (__strfmon__, a, b))) #else # define __attribute_format_strfmon__(a,b) /* Ignore */ #endif /* The nonnull function attribute marks pointer parameters that must not be NULL. This has the name __nonnull in glibc, and __attribute_nonnull__ in files shared with Gnulib to avoid collision with a different __nonnull in DragonFlyBSD 5.9. */ #ifndef __attribute_nonnull__ # if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__) # define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params)) # else # define __attribute_nonnull__(params) # endif #endif #ifndef __nonnull # define __nonnull(params) __attribute_nonnull__ (params) #endif /* The returns_nonnull function attribute marks the return type of the function as always being non-null. */ #ifndef __returns_nonnull # if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__) # define __returns_nonnull __attribute__ ((__returns_nonnull__)) # else # define __returns_nonnull # endif #endif /* If fortification mode, we warn about unused results of certain function calls which can lead to problems. */ #if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__) # define __attribute_warn_unused_result__ \ __attribute__ ((__warn_unused_result__)) # if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0 # define __wur __attribute_warn_unused_result__ # endif #else # define __attribute_warn_unused_result__ /* empty */ #endif #ifndef __wur # define __wur /* Ignore */ #endif /* Forces a function to be always inlined. */ #if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__always_inline__) /* The Linux kernel defines __always_inline in stddef.h (283d7573), and it conflicts with this definition. Therefore undefine it first to allow either header to be included first. */ # undef __always_inline # define __always_inline __inline __attribute__ ((__always_inline__)) #else # undef __always_inline # define __always_inline __inline #endif /* Associate error messages with the source location of the call site rather than with the source location inside the function. */ #if __GNUC_PREREQ (4,3) || __glibc_has_attribute (__artificial__) # define __attribute_artificial__ __attribute__ ((__artificial__)) #else # define __attribute_artificial__ /* Ignore */ #endif /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__ or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions older than 4.3 may define these macros and still not guarantee GNU inlining semantics. clang++ identifies itself as gcc-4.2, but has support for GNU inlining semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and __GNUC_GNU_INLINE__ macro definitions. */ #if (!defined __cplusplus || __GNUC_PREREQ (4,3) \ || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \ || defined __GNUC_GNU_INLINE__))) # if defined __GNUC_STDC_INLINE__ || defined __cplusplus # define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) # define __extern_always_inline \ extern __always_inline __attribute__ ((__gnu_inline__)) # else # define __extern_inline extern __inline # define __extern_always_inline extern __always_inline # endif #endif #ifdef __extern_always_inline # define __fortify_function __extern_always_inline __attribute_artificial__ #endif /* GCC 4.3 and above allow passing all anonymous arguments of an __extern_always_inline function to some other vararg function. */ #if __GNUC_PREREQ (4,3) # define __va_arg_pack() __builtin_va_arg_pack () # define __va_arg_pack_len() __builtin_va_arg_pack_len () #endif /* It is possible to compile containing GCC extensions even if GCC is run in pedantic mode if the uses are carefully marked using the `__extension__' keyword. But this is not generally available before version 2.8. */ #if !(__GNUC_PREREQ (2,8) || defined __clang__) # define __extension__ /* Ignore */ #endif /* __restrict is known in EGCS 1.2 and above, and in clang. It works also in C++ mode (outside of arrays), but only when spelled as '__restrict', not 'restrict'. */ #if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3) # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L # define __restrict restrict # else # define __restrict /* Ignore */ # endif #endif /* ISO C99 also allows to declare arrays as non-overlapping. The syntax is array_name[restrict] GCC 3.1 and clang support this. This syntax is not usable in C++ mode. */ #if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus # define __restrict_arr __restrict #else # ifdef __GNUC__ # define __restrict_arr /* Not supported in old GCC. */ # else # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L # define __restrict_arr restrict # else /* Some other non-C99 compiler. */ # define __restrict_arr /* Not supported. */ # endif # endif #endif #if (__GNUC__ >= 3) || __glibc_has_builtin (__builtin_expect) # define __glibc_unlikely(cond) __builtin_expect ((cond), 0) # define __glibc_likely(cond) __builtin_expect ((cond), 1) #else # define __glibc_unlikely(cond) (cond) # define __glibc_likely(cond) (cond) #endif #if (!defined _Noreturn \ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ && !(__GNUC_PREREQ (4,7) \ || (3 < __clang_major__ + (5 <= __clang_minor__)))) # if __GNUC_PREREQ (2,8) # define _Noreturn __attribute__ ((__noreturn__)) # else # define _Noreturn # endif #endif #if __GNUC_PREREQ (8, 0) /* Describes a char array whose address can safely be passed as the first argument to strncpy and strncat, as the char array is not necessarily a NUL-terminated string. */ # define __attribute_nonstring__ __attribute__ ((__nonstring__)) #else # define __attribute_nonstring__ #endif /* Undefine (also defined in libc-symbols.h). */ #undef __attribute_copy__ #if __GNUC_PREREQ (9, 0) /* Copies attributes from the declaration or type referenced by the argument. */ # define __attribute_copy__(arg) __attribute__ ((__copy__ (arg))) #else # define __attribute_copy__(arg) #endif #if (!defined _Static_assert && !defined __cplusplus \ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ && (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \ || defined __STRICT_ANSI__)) # define _Static_assert(expr, diagnostic) \ extern int (*__Static_assert_function (void)) \ [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] #endif /* Gnulib avoids including these, as they don't work on non-glibc or older glibc platforms. */ #ifndef __GNULIB_CDEFS # include <bits/wordsize.h> # include <bits/long-double.h> #endif #if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 # ifdef __REDIRECT /* Alias name defined automatically. */ # define __LDBL_REDIR(name, proto) ... unused__ldbl_redir # define __LDBL_REDIR_DECL(name) \ extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128")); /* Alias name defined automatically, with leading underscores. */ # define __LDBL_REDIR2_DECL(name) \ extern __typeof (__##name) __##name \ __asm (__ASMNAME ("__" #name "ieee128")); /* Alias name defined manually. */ # define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1 # define __LDBL_REDIR1_DECL(name, alias) \ extern __typeof (name) name __asm (__ASMNAME (#alias)); # define __LDBL_REDIR1_NTH(name, proto, alias) \ __REDIRECT_NTH (name, proto, alias) # define __REDIRECT_NTH_LDBL(name, proto, alias) \ __LDBL_REDIR1_NTH (name, proto, __##alias##ieee128) /* Unused. */ # define __REDIRECT_LDBL(name, proto, alias) ... unused__redirect_ldbl # define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth # else _Static_assert (0, "IEEE 128-bits long double requires redirection on this platform"); # endif #elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH # define __LDBL_COMPAT 1 # ifdef __REDIRECT # define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias) # define __LDBL_REDIR(name, proto) \ __LDBL_REDIR1 (name, proto, __nldbl_##name) # define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias) # define __LDBL_REDIR_NTH(name, proto) \ __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) # define __LDBL_REDIR2_DECL(name) \ extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" #name)); # define __LDBL_REDIR1_DECL(name, alias) \ extern __typeof (name) name __asm (__ASMNAME (#alias)); # define __LDBL_REDIR_DECL(name) \ extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name)); # define __REDIRECT_LDBL(name, proto, alias) \ __LDBL_REDIR1 (name, proto, __nldbl_##alias) # define __REDIRECT_NTH_LDBL(name, proto, alias) \ __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias) # endif #endif #if (!defined __LDBL_COMPAT && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0) \ || !defined __REDIRECT # define __LDBL_REDIR1(name, proto, alias) name proto # define __LDBL_REDIR(name, proto) name proto # define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW # define __LDBL_REDIR_NTH(name, proto) name proto __THROW # define __LDBL_REDIR2_DECL(name) # define __LDBL_REDIR_DECL(name) # ifdef __REDIRECT # define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias) # define __REDIRECT_NTH_LDBL(name, proto, alias) \ __REDIRECT_NTH (name, proto, alias) # endif #endif /* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is intended for use in preprocessor macros. Note: MESSAGE must be a _single_ string; concatenation of string literals is not supported. */ #if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5) # define __glibc_macro_warning1(message) _Pragma (#message) # define __glibc_macro_warning(message) \ __glibc_macro_warning1 (GCC warning message) #else # define __glibc_macro_warning(msg) #endif /* Generic selection (ISO C11) is a C-only feature, available in GCC since version 4.9. Previous versions do not provide generic selection, even though they might set __STDC_VERSION__ to 201112L, when in -std=c11 mode. Thus, we must check for !defined __GNUC__ when testing __STDC_VERSION__ for generic selection support. On the other hand, Clang also defines __GNUC__, so a clang-specific check is required to enable the use of generic selection. */ #if !defined __cplusplus \ && (__GNUC_PREREQ (4, 9) \ || __glibc_has_extension (c_generic_selections) \ || (!defined __GNUC__ && defined __STDC_VERSION__ \ && __STDC_VERSION__ >= 201112L)) # define __HAVE_GENERIC_SELECTION 1 #else # define __HAVE_GENERIC_SELECTION 0 #endif #if __GNUC_PREREQ (10, 0) /* Designates a 1-based positional argument ref-index of pointer type that can be used to access size-index elements of the pointed-to array according to access mode, or at least one element when size-index is not provided: access (access-mode, <ref-index> [, <size-index>]) */ # define __attr_access(x) __attribute__ ((__access__ x)) /* For _FORTIFY_SOURCE == 3 we use __builtin_dynamic_object_size, which may use the access attribute to get object sizes from function definition arguments, so we can't use them on functions we fortify. Drop the object size hints for such functions. */ # if __USE_FORTIFY_LEVEL == 3 # define __fortified_attr_access(a, o, s) __attribute__ ((__access__ (a, o))) # else # define __fortified_attr_access(a, o, s) __attr_access ((a, o, s)) # endif # if __GNUC_PREREQ (11, 0) # define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno))) # else # define __attr_access_none(argno) # endif #else # define __fortified_attr_access(a, o, s) # define __attr_access(x) # define __attr_access_none(argno) #endif #if __GNUC_PREREQ (11, 0) /* Designates dealloc as a function to call to deallocate objects allocated by the declared function. */ # define __attr_dealloc(dealloc, argno) \ __attribute__ ((__malloc__ (dealloc, argno))) # define __attr_dealloc_free __attr_dealloc (__builtin_free, 1) #else # define __attr_dealloc(dealloc, argno) # define __attr_dealloc_free #endif /* Specify that a function such as setjmp or vfork may return twice. */ #if __GNUC_PREREQ (4, 1) # define __attribute_returns_twice__ __attribute__ ((__returns_twice__)) #else # define __attribute_returns_twice__ /* Ignore. */ #endif #endif /* sys/cdefs.h */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/libc-config.h��������������������������������������������������������0000644�0001750�0001750�00000014150�14557510505�014571� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* System definitions for code taken from the GNU C Library Copyright 2017-2024 Free Software Foundation, Inc. This program 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 program 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 program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* This is intended to be a good-enough substitute for glibc system macros like those defined in <sys/cdefs.h>, so that Gnulib code shared with glibc can do this as the first #include: #ifndef _LIBC # include <libc-config.h> #endif When compiled as part of glibc this is a no-op; when compiled as part of Gnulib this includes Gnulib's <config.h> and defines macros that glibc library code would normally assume. Note: This header file MUST NOT be included by public header files of Gnulib. */ #include <config.h> /* On glibc this includes <features.h> and <sys/cdefs.h> and #defines _FEATURES_H, __WORDSIZE, and __set_errno. On FreeBSD 11 and DragonFlyBSD 5.9 it includes <sys/cdefs.h> which defines __nonnull. Elsewhere it is harmless. */ #include <errno.h> /* From glibc <errno.h>. */ #ifndef __set_errno # define __set_errno(val) (errno = (val)) #endif /* From glibc <features.h>. */ #ifndef __GNUC_PREREQ # if defined __GNUC__ && defined __GNUC_MINOR__ # define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__)) # else # define __GNUC_PREREQ(maj, min) 0 # endif #endif #ifndef __glibc_clang_prereq # if defined __clang_major__ && defined __clang_minor__ # ifdef __apple_build_version__ /* Apple for some reason renumbers __clang_major__ and __clang_minor__. Gnulib code uses only __glibc_clang_prereq (3, 5); map it to 6000000 <= __apple_build_version__. Support for other calls to __glibc_clang_prereq can be added here as needed. */ # define __glibc_clang_prereq(maj, min) \ ((maj) == 3 && (min) == 5 ? 6000000 <= __apple_build_version__ : 0) # else # define __glibc_clang_prereq(maj, min) \ ((maj) < __clang_major__ + ((min) <= __clang_minor__)) # endif # else # define __glibc_clang_prereq(maj, min) 0 # endif #endif #ifndef __attribute_nonnull__ /* <sys/cdefs.h> either does not exist, or is too old for Gnulib. Prepare to include <cdefs.h>, which is Gnulib's version of a more-recent glibc <sys/cdefs.h>. */ /* Define _FEATURES_H so that <cdefs.h> does not include <features.h>. */ # ifndef _FEATURES_H # define _FEATURES_H 1 # endif /* Define __GNULIB_CDEFS so that <cdefs.h> does not attempt to include nonexistent files. */ # define __GNULIB_CDEFS /* Undef the macros unconditionally defined by our copy of glibc <sys/cdefs.h>, so that they do not clash with any system-defined versions. */ # undef _SYS_CDEFS_H # undef __ASMNAME # undef __ASMNAME2 # undef __BEGIN_DECLS # undef __CONCAT # undef __END_DECLS # undef __HAVE_GENERIC_SELECTION # undef __LDBL_COMPAT # undef __LDBL_REDIR # undef __LDBL_REDIR1 # undef __LDBL_REDIR1_DECL # undef __LDBL_REDIR1_NTH # undef __LDBL_REDIR2_DECL # undef __LDBL_REDIR_DECL # undef __LDBL_REDIR_NTH # undef __LEAF # undef __LEAF_ATTR # undef __NTH # undef __NTHNL # undef __REDIRECT # undef __REDIRECT_LDBL # undef __REDIRECT_NTH # undef __REDIRECT_NTHNL # undef __REDIRECT_NTH_LDBL # undef __STRING # undef __THROW # undef __THROWNL # undef __attr_access # undef __attr_access_none # undef __attr_dealloc # undef __attr_dealloc_free # undef __attribute__ # undef __attribute_alloc_align__ # undef __attribute_alloc_size__ # undef __attribute_artificial__ # undef __attribute_const__ # undef __attribute_deprecated__ # undef __attribute_deprecated_msg__ # undef __attribute_format_arg__ # undef __attribute_format_strfmon__ # undef __attribute_malloc__ # undef __attribute_maybe_unused__ # undef __attribute_noinline__ # undef __attribute_nonstring__ # undef __attribute_pure__ # undef __attribute_returns_twice__ # undef __attribute_used__ # undef __attribute_warn_unused_result__ # undef __errordecl # undef __extension__ # undef __extern_always_inline # undef __extern_inline # undef __flexarr # undef __fortified_attr_access # undef __fortify_function # undef __glibc_c99_flexarr_available # undef __glibc_has_attribute # undef __glibc_has_builtin # undef __glibc_has_extension # undef __glibc_likely # undef __glibc_macro_warning # undef __glibc_macro_warning1 # undef __glibc_unlikely # undef __inline # undef __ptr_t # undef __restrict # undef __restrict_arr # undef __va_arg_pack # undef __va_arg_pack_len # undef __warnattr # undef __wur # ifndef __GNULIB_CDEFS # undef __bos # undef __bos0 # undef __glibc_fortify # undef __glibc_fortify_n # undef __glibc_objsize # undef __glibc_objsize0 # undef __glibc_safe_len_cond # undef __glibc_safe_or_unknown_len # undef __glibc_unsafe_len # undef __glibc_unsigned_or_positive # endif /* Include our copy of glibc <sys/cdefs.h>. */ # include <cdefs.h> /* <cdefs.h> __inline is too pessimistic for non-GCC. */ # undef __inline # ifndef HAVE___INLINE # if 199901 <= __STDC_VERSION__ || defined inline # define __inline inline # else # define __inline # endif # endif #endif /* defined __glibc_likely */ /* A substitute for glibc <libc-symbols.h>, good enough for Gnulib. */ #define attribute_hidden #define libc_hidden_proto(name) #define libc_hidden_def(name) #define libc_hidden_weak(name) #define libc_hidden_ver(local, name) #define strong_alias(name, aliasname) #define weak_alias(name, aliasname) /* A substitute for glibc <shlib-compat.h>, good enough for Gnulib. */ #define SHLIB_COMPAT(lib, introduced, obsoleted) 0 #define compat_symbol(lib, local, symbol, version) extern int dummy #define versioned_symbol(lib, local, symbol, version) extern int dummy ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/limits.in.h����������������������������������������������������������0000644�0001750�0001750�00000011702�14557510505�014323� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <limits.h>. Copyright 2016-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_LIMITS_H /* Special invocation convention: On Haiku/x86_64, we have a sequence of nested includes <limits.h> -> <syslimits.h> -> <limits.h>. In this situation, LONG_MAX and INT_MAX are not yet defined, therefore we should not attempt to define LONG_BIT. */ #@INCLUDE_NEXT@ @NEXT_LIMITS_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_LIMITS_H # define _GL_ALREADY_INCLUDING_LIMITS_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_LIMITS_H@ # undef _GL_ALREADY_INCLUDING_LIMITS_H #ifndef _@GUARD_PREFIX@_LIMITS_H #define _@GUARD_PREFIX@_LIMITS_H #ifndef LLONG_MIN # if defined LONG_LONG_MIN /* HP-UX 11.31 */ # define LLONG_MIN LONG_LONG_MIN # elif defined LONGLONG_MIN /* IRIX 6.5 */ # define LLONG_MIN LONGLONG_MIN # elif defined __GNUC__ # define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL) # endif #endif #ifndef LLONG_MAX # if defined LONG_LONG_MAX /* HP-UX 11.31 */ # define LLONG_MAX LONG_LONG_MAX # elif defined LONGLONG_MAX /* IRIX 6.5 */ # define LLONG_MAX LONGLONG_MAX # elif defined __GNUC__ # define LLONG_MAX __LONG_LONG_MAX__ # endif #endif #ifndef ULLONG_MAX # if defined ULONG_LONG_MAX /* HP-UX 11.31 */ # define ULLONG_MAX ULONG_LONG_MAX # elif defined ULONGLONG_MAX /* IRIX 6.5 */ # define ULLONG_MAX ULONGLONG_MAX # elif defined __GNUC__ # define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL) # endif #endif /* The number of usable bits in an unsigned or signed integer type with minimum value MIN and maximum value MAX, as an int expression suitable in #if. Cover all known practical hosts. This implementation exploits the fact that MAX is 1 less than a power of 2, and merely counts the number of 1 bits in MAX; "COBn" means "count the number of 1 bits in the low-order n bits"). */ #define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) #define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) #define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) #define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) #define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) #define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) #define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) #ifndef WORD_BIT /* Assume 'int' is 32 bits wide. */ # define WORD_BIT 32 #endif #ifndef LONG_BIT /* Assume 'long' is 32 or 64 bits wide. */ # if LONG_MAX == INT_MAX # define LONG_BIT 32 # else # define LONG_BIT 64 # endif #endif /* Assume no multibyte character is longer than 16 bytes. */ #ifndef MB_LEN_MAX # define MB_LEN_MAX 16 #endif /* Macros specified by C23 and by ISO/IEC TS 18661-1:2014. */ #if (! defined ULLONG_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__ \ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__))) # define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) # define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) # define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) # define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) # define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) # define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) # define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) # define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) # define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) # define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) # define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) #endif /* Macros specified by C23. */ #if (defined _GNU_SOURCE \ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__)) # if ! defined BOOL_WIDTH # define BOOL_WIDTH 1 # define BOOL_MAX 1 # elif ! defined BOOL_MAX # define BOOL_MAX ((((1U << (BOOL_WIDTH - 1)) - 1) << 1) + 1) # endif #endif /* Macro specified by POSIX. */ /* The maximum ssize_t value. Although it might not be of ssize_t type as it should be, it's too much trouble to fix this minor detail. */ #ifndef SSIZE_MAX # ifdef _WIN64 # define SSIZE_MAX LLONG_MAX # else # define SSIZE_MAX LONG_MAX # endif #endif #endif /* _@GUARD_PREFIX@_LIMITS_H */ #endif /* _@GUARD_PREFIX@_LIMITS_H */ #endif ��������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/localcharset.h�������������������������������������������������������0000644�0001750�0001750�00000014176�14557510505�015071� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2003, 2009-2024 Free Software Foundation, Inc. This file is part of the GNU CHARSET Library. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LOCALCHARSET_H #define _LOCALCHARSET_H #ifdef __cplusplus extern "C" { #endif /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed below. The result must not be freed; it is statically allocated. The result becomes invalid when setlocale() is used to change the global locale, or when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG is changed; threads in multithreaded programs should not do this. If the canonical name cannot be determined, the result is a non-canonical name. */ extern const char * locale_charset (void); /* About GNU canonical names for character encodings: Every canonical name must be supported by GNU libiconv. Support by GNU libc is also desirable. The name is case insensitive. Usually an upper case MIME charset name is preferred. The current list of these GNU canonical names is: name MIME? used by which systems (darwin = Mac OS X, windows = native Windows) ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin minix cygwin ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-3 Y glibc solaris cygwin ISO-8859-4 Y hpux osf solaris freebsd netbsd openbsd darwin ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-6 Y glibc aix hpux solaris cygwin ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-8 Y glibc aix hpux osf solaris cygwin zos ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin zos ISO-8859-13 glibc hpux solaris freebsd netbsd openbsd darwin cygwin ISO-8859-14 glibc cygwin ISO-8859-15 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin KOI8-R Y glibc hpux solaris freebsd netbsd openbsd darwin KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin KOI8-T glibc CP437 dos CP775 dos CP850 aix osf dos CP852 dos CP855 dos CP856 aix CP857 dos CP861 dos CP862 dos CP864 dos CP865 dos CP866 freebsd netbsd openbsd darwin dos CP869 dos CP874 windows dos CP922 aix CP932 aix cygwin windows dos CP943 aix zos CP949 osf darwin windows dos CP950 windows dos CP1046 aix CP1124 aix CP1125 dos CP1129 aix CP1131 freebsd darwin CP1250 windows CP1251 glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows CP1252 aix windows CP1253 windows CP1254 windows CP1255 glibc windows CP1256 windows CP1257 windows GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin zos EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin zos EUC-TW glibc aix hpux irix osf solaris netbsd BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin zos BIG5-HKSCS glibc hpux solaris netbsd darwin GBK glibc aix osf solaris freebsd darwin cygwin windows dos GB18030 glibc hpux solaris freebsd netbsd darwin SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin JOHAB solaris windows TIS-620 glibc aix hpux osf solaris cygwin zos ARMSCII-8 glibc freebsd netbsd darwin GEORGIAN-PS glibc cygwin PT154 glibc netbsd cygwin HP-ROMAN8 hpux HP-ARABIC8 hpux HP-GREEK8 hpux HP-HEBREW8 hpux HP-TURKISH8 hpux HP-KANA8 hpux DEC-KANJI osf DEC-HANYU osf UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin zos Note: Names which are not marked as being a MIME name should not be used in Internet protocols for information interchange (mail, news, etc.). Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications must understand both names and treat them as equivalent. */ #ifdef __cplusplus } #endif #endif /* _LOCALCHARSET_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/locale.in.h����������������������������������������������������������0000644�0001750�0001750�00000024245�14557510505�014267� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX <locale.h>. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (defined _WIN32 && !defined __CYGWIN__ && defined __need_locale_t) \ || defined _GL_ALREADY_INCLUDING_LOCALE_H /* Special invocation convention: - Inside mingw header files, - To handle Solaris header files (through Solaris 10) when combined with gettext's libintl.h. */ #@INCLUDE_NEXT@ @NEXT_LOCALE_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_LOCALE_H #define _GL_ALREADY_INCLUDING_LOCALE_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_LOCALE_H@ #undef _GL_ALREADY_INCLUDING_LOCALE_H #ifndef _@GUARD_PREFIX@_LOCALE_H #define _@GUARD_PREFIX@_LOCALE_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* Mac OS X 10.5 defines the locale_t type in <xlocale.h>. */ #if @HAVE_XLOCALE_H@ # include <xlocale.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C. On systems that don't define it, use the same value as GNU libintl. */ #if !defined LC_MESSAGES # define LC_MESSAGES 1729 #endif /* On native Windows with MSVC, 'struct lconv' lacks the members int_p_* and int_n_*. Instead of overriding 'struct lconv', merely define these member names as macros. This avoids trouble in C++ mode. */ #if defined _MSC_VER # define int_p_cs_precedes p_cs_precedes # define int_p_sign_posn p_sign_posn # define int_p_sep_by_space p_sep_by_space # define int_n_cs_precedes n_cs_precedes # define int_n_sign_posn n_sign_posn # define int_n_sep_by_space n_sep_by_space #endif /* Bionic libc's 'struct lconv' is just a dummy. */ #if @REPLACE_STRUCT_LCONV@ # define lconv rpl_lconv struct lconv { /* All 'char *' are actually 'const char *'. */ /* Members that depend on the LC_NUMERIC category of the locale. See <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_04> */ /* Symbol used as decimal point. */ char *decimal_point; /* Symbol used to separate groups of digits to the left of the decimal point. */ char *thousands_sep; /* Definition of the size of groups of digits to the left of the decimal point. */ char *grouping; /* Members that depend on the LC_MONETARY category of the locale. See <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_03> */ /* Symbol used as decimal point. */ char *mon_decimal_point; /* Symbol used to separate groups of digits to the left of the decimal point. */ char *mon_thousands_sep; /* Definition of the size of groups of digits to the left of the decimal point. */ char *mon_grouping; /* Sign used to indicate a value >= 0. */ char *positive_sign; /* Sign used to indicate a value < 0. */ char *negative_sign; /* For formatting local currency. */ /* Currency symbol (3 characters) followed by separator (1 character). */ char *currency_symbol; /* Number of digits after the decimal point. */ char frac_digits; /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char p_cs_precedes; /* For values >= 0: Position of the sign. */ char p_sign_posn; /* For values >= 0: Placement of spaces between currency symbol, sign, and number. */ char p_sep_by_space; /* For values < 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char n_cs_precedes; /* For values < 0: Position of the sign. */ char n_sign_posn; /* For values < 0: Placement of spaces between currency symbol, sign, and number. */ char n_sep_by_space; /* For formatting international currency. */ /* Currency symbol (3 characters) followed by separator (1 character). */ char *int_curr_symbol; /* Number of digits after the decimal point. */ char int_frac_digits; /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char int_p_cs_precedes; /* For values >= 0: Position of the sign. */ char int_p_sign_posn; /* For values >= 0: Placement of spaces between currency symbol, sign, and number. */ char int_p_sep_by_space; /* For values < 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char int_n_cs_precedes; /* For values < 0: Position of the sign. */ char int_n_sign_posn; /* For values < 0: Placement of spaces between currency symbol, sign, and number. */ char int_n_sep_by_space; }; #endif #if @GNULIB_LOCALECONV@ # if @REPLACE_LOCALECONV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localeconv # define localeconv rpl_localeconv # endif _GL_FUNCDECL_RPL (localeconv, struct lconv *, (void)); _GL_CXXALIAS_RPL (localeconv, struct lconv *, (void)); # else _GL_CXXALIAS_SYS (localeconv, struct lconv *, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (localeconv); # endif #elif @REPLACE_STRUCT_LCONV@ # undef localeconv # define localeconv localeconv_used_without_requesting_gnulib_module_localeconv #elif defined GNULIB_POSIXCHECK # undef localeconv # if HAVE_RAW_DECL_LOCALECONV _GL_WARN_ON_USE (localeconv, "localeconv returns too few information on some platforms - " "use gnulib module localeconv for portability"); # endif #endif #if @GNULIB_SETLOCALE@ # if @REPLACE_SETLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setlocale # define setlocale rpl_setlocale # define GNULIB_defined_setlocale 1 # endif _GL_FUNCDECL_RPL (setlocale, char *, (int category, const char *locale)); _GL_CXXALIAS_RPL (setlocale, char *, (int category, const char *locale)); # else _GL_CXXALIAS_SYS (setlocale, char *, (int category, const char *locale)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (setlocale); # endif #elif defined GNULIB_POSIXCHECK # undef setlocale # if HAVE_RAW_DECL_SETLOCALE _GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - " "use gnulib module setlocale for portability"); # endif #endif #if @GNULIB_SETLOCALE_NULL@ /* Included here for convenience. */ # include "setlocale_null.h" #endif #if /*@GNULIB_NEWLOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_NEWLOCALE@) # if @REPLACE_NEWLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef newlocale # define newlocale rpl_newlocale # define GNULIB_defined_newlocale 1 # endif _GL_FUNCDECL_RPL (newlocale, locale_t, (int category_mask, const char *name, locale_t base) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (newlocale, locale_t, (int category_mask, const char *name, locale_t base)); # else # if @HAVE_NEWLOCALE@ _GL_CXXALIAS_SYS (newlocale, locale_t, (int category_mask, const char *name, locale_t base)); # endif # endif # if __GLIBC__ >= 2 && @HAVE_NEWLOCALE@ _GL_CXXALIASWARN (newlocale); # endif # if @HAVE_NEWLOCALE@ || @REPLACE_NEWLOCALE@ # ifndef HAVE_WORKING_NEWLOCALE # define HAVE_WORKING_NEWLOCALE 1 # endif # endif #elif defined GNULIB_POSIXCHECK # undef newlocale # if HAVE_RAW_DECL_NEWLOCALE _GL_WARN_ON_USE (newlocale, "newlocale is not portable"); # endif #endif #if @GNULIB_DUPLOCALE@ || (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_DUPLOCALE@) # if @HAVE_DUPLOCALE@ /* locale_t may be undefined if !@HAVE_DUPLOCALE@. */ # if @REPLACE_DUPLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef duplocale # define duplocale rpl_duplocale # define GNULIB_defined_duplocale 1 # endif _GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (duplocale, locale_t, (locale_t locale)); # else _GL_CXXALIAS_SYS (duplocale, locale_t, (locale_t locale)); # endif # endif # if __GLIBC__ >= 2 && @HAVE_DUPLOCALE@ _GL_CXXALIASWARN (duplocale); # endif # if @HAVE_DUPLOCALE@ # ifndef HAVE_WORKING_DUPLOCALE # define HAVE_WORKING_DUPLOCALE 1 # endif # endif #elif defined GNULIB_POSIXCHECK # undef duplocale # if HAVE_RAW_DECL_DUPLOCALE _GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - " "use gnulib module duplocale for portability"); # endif #endif #if /*@GNULIB_FREELOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_FREELOCALE@) # if @REPLACE_FREELOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef freelocale # define freelocale rpl_freelocale # define GNULIB_defined_freelocale 1 # endif _GL_FUNCDECL_RPL (freelocale, void, (locale_t locale) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (freelocale, void, (locale_t locale)); # else # if @HAVE_FREELOCALE@ /* Need to cast, because on FreeBSD and Mac OS X 10.13, the return type is int. */ _GL_CXXALIAS_SYS_CAST (freelocale, void, (locale_t locale)); # endif # endif # if __GLIBC__ >= 2 && @HAVE_FREELOCALE@ _GL_CXXALIASWARN (freelocale); # endif #elif defined GNULIB_POSIXCHECK # undef freelocale # if HAVE_RAW_DECL_FREELOCALE _GL_WARN_ON_USE (freelocale, "freelocale is not portable"); # endif #endif #endif /* _@GUARD_PREFIX@_LOCALE_H */ #endif /* _@GUARD_PREFIX@_LOCALE_H */ #endif /* !(__need_locale_t || _GL_ALREADY_INCLUDING_LOCALE_H) */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/malloca.h������������������������������������������������������������0000644�0001750�0001750�00000012622�14557510505�014027� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation. Copyright (C) 2003-2007, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _MALLOCA_H #define _MALLOCA_H /* This file uses _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, HAVE_ALLOCA. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <alloca.h> #include <stddef.h> #include <stdlib.h> #include <stdint.h> #if defined __CHERI_PURE_CAPABILITY__ # include <cheri.h> #endif #include "xalloc-oversized.h" #ifdef __cplusplus extern "C" { #endif /* safe_alloca(N) is equivalent to alloca(N) when it is safe to call alloca(N); otherwise it returns NULL. It either returns N bytes of memory allocated on the stack, that lasts until the function returns, or NULL. Use of safe_alloca should be avoided: - inside arguments of function calls - undefined behaviour, - in inline functions - the allocation may actually last until the calling function returns. */ #if HAVE_ALLOCA /* The OS usually guarantees only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely allocate anything larger than 4096 bytes. Also care for the possibility of a few compiler-allocated temporary stack slots. This must be a macro, not a function. */ # define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL) #else # define safe_alloca(N) ((void) (N), NULL) #endif /* Free a block of memory allocated through malloca(). */ #if HAVE_ALLOCA extern void freea (void *p); #else # define freea free #endif /* malloca(N) is a safe variant of alloca(N). It allocates N bytes of memory allocated on the stack, that must be freed using freea() before the function returns. Upon failure, it returns NULL. */ #if HAVE_ALLOCA # if defined __CHERI_PURE_CAPABILITY__ # define malloca(N) \ ((N) < 4032 - (2 * sa_alignment_max - 1) \ ? cheri_bounds_set ((void *) (((uintptr_t) \ (char *) \ alloca ((N) + 2 * sa_alignment_max - 1) \ + (2 * sa_alignment_max - 1)) \ & ~(uintptr_t)(2 * sa_alignment_max - 1)), \ (N)) \ : mmalloca (N)) # else # define malloca(N) \ ((N) < 4032 - (2 * sa_alignment_max - 1) \ ? (void *) (((uintptr_t) (char *) alloca ((N) + 2 * sa_alignment_max - 1) \ + (2 * sa_alignment_max - 1)) \ & ~(uintptr_t)(2 * sa_alignment_max - 1)) \ : mmalloca (N)) # endif #else # define malloca(N) \ mmalloca (N) #endif extern void *mmalloca (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (freea, 1) _GL_ATTRIBUTE_ALLOC_SIZE ((1)); /* nmalloca(N,S) is an overflow-safe variant of malloca (N * S). It allocates an array of N objects, each with S bytes of memory, on the stack. N and S should be nonnegative and free of side effects. The array must be freed using freea() before the function returns. */ #define nmalloca(n, s) \ (xalloc_oversized (n, s) ? NULL : malloca ((n) * (size_t) (s))) #ifdef __cplusplus } #endif /* ------------------- Auxiliary, non-public definitions ------------------- */ /* Determine the alignment of a type at compile time. */ #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ # define sa_alignof __alignof__ #elif defined __cplusplus template <class type> struct sa_alignof_helper { char __slot1; type __slot2; }; # define sa_alignof(type) offsetof (sa_alignof_helper<type>, __slot2) #elif defined __hpux /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof values. */ # define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) #elif defined _AIX /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof values. */ # define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) #else # define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) #endif enum { /* The desired alignment of memory allocations is the maximum alignment among all elementary types. */ sa_alignment_long = sa_alignof (long), sa_alignment_double = sa_alignof (double), sa_alignment_longlong = sa_alignof (long long), sa_alignment_longdouble = sa_alignof (long double), sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1) | (sa_alignment_longlong - 1) | (sa_alignment_longdouble - 1) ) + 1 }; #endif /* _MALLOCA_H */ ��������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/math.in.h������������������������������������������������������������0000644�0001750�0001750�00000243057�14557510505�013765� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <math.h>. Copyright (C) 2002-2003, 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* On Android, in C++ mode, when /usr/include/c++/v1/math.h is being included and /usr/include/math.h has not yet been included, skip this file, since it would lead to many syntax errors. */ #if !(defined __ANDROID__ && defined _LIBCPP_MATH_H && !defined INFINITY) #ifndef _@GUARD_PREFIX@_MATH_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_INCLUDING_MATH_H /* Special invocation convention: - On FreeBSD 12.2 we have a sequence of nested includes <math.h> -> <stdlib.h> -> <sys/wait.h> -> <sys/types.h> -> <sys/select.h> -> <signal.h> -> <pthread.h> -> <stdlib.h> -> <math.h> In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ #else /* Normal invocation convention. */ /* The include_next requires a split double-inclusion guard. */ #define _GL_INCLUDING_MATH_H #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ #undef _GL_INCLUDING_MATH_H #ifndef _@GUARD_PREFIX@_MATH_H #define _@GUARD_PREFIX@_MATH_H /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_CONST, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* On OpenVMS, NAN, INFINITY, and HUGEVAL macros are defined in <fp.h>. */ #if defined __VMS && ! defined NAN # include <fp.h> #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_MATH_INLINE # define _GL_MATH_INLINE _GL_INLINE #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __const__ was added in gcc 2.95. */ #ifndef _GL_ATTRIBUTE_CONST # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) || defined __clang__ # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) # else # define _GL_ATTRIBUTE_CONST /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #ifdef __cplusplus /* Helper macros to define type-generic function FUNC as overloaded functions, rather than as macros like in C. POSIX declares these with an argument of real-floating (that is, one of float, double, or long double). */ # define _GL_MATH_CXX_REAL_FLOATING_DECL_1(func) \ static inline int \ _gl_cxx_ ## func ## f (float f) \ { \ return func (f); \ } \ static inline int \ _gl_cxx_ ## func ## d (double d) \ { \ return func (d); \ } \ static inline int \ _gl_cxx_ ## func ## l (long double l) \ { \ return func (l); \ } # define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func,rpl_func,rettype) \ _GL_BEGIN_NAMESPACE \ inline rettype \ rpl_func (float f) \ { \ return _gl_cxx_ ## func ## f (f); \ } \ inline rettype \ rpl_func (double d) \ { \ return _gl_cxx_ ## func ## d (d); \ } \ inline rettype \ rpl_func (long double l) \ { \ return _gl_cxx_ ## func ## l (l); \ } \ _GL_END_NAMESPACE #endif /* Helper macros to define a portability warning for the classification macro FUNC called with VALUE. POSIX declares the classification macros with an argument of real-floating (that is, one of float, double, or long double). */ #define _GL_WARN_REAL_FLOATING_DECL(func) \ _GL_MATH_INLINE int \ _GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ "use gnulib module " #func " for portability") \ rpl_ ## func ## f (float f) \ { \ return func (f); \ } \ _GL_MATH_INLINE int \ _GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ "use gnulib module " #func " for portability") \ rpl_ ## func ## d (double d) \ { \ return func (d); \ } \ _GL_MATH_INLINE int \ _GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ "use gnulib module " #func " for portability") \ rpl_ ## func ## l (long double l) \ { \ return func (l); \ } #define _GL_WARN_REAL_FLOATING_IMPL(func, value) \ (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value) \ : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value) \ : rpl_ ## func ## l (value)) #if @REPLACE_ITOLD@ /* Pull in a function that fixes the 'int' to 'long double' conversion of glibc 2.7. */ _GL_EXTERN_C void _Qp_itoq (long double *, int); static void (*_gl_math_fix_itold) (long double *, int) = _Qp_itoq; #endif /* POSIX allows platforms that don't support NAN. But all major machines in the past 15 years have supported something close to IEEE NaN, so we define this unconditionally. We also must define it on platforms like Solaris 10, where NAN is present but defined as a function pointer rather than a floating point constant. */ #if !defined NAN || @REPLACE_NAN@ # if !GNULIB_defined_NAN # undef NAN /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke on the expression 0.0 / 0.0. */ # if defined __DECC || defined _MSC_VER _GL_MATH_INLINE float _NaN () { static float zero = 0.0f; return zero / zero; } # define NAN (_NaN()) # else # define NAN (0.0f / 0.0f) # endif # define GNULIB_defined_NAN 1 # endif #endif /* Solaris 10 defines HUGE_VAL, but as a function pointer rather than a floating point constant. */ #if @REPLACE_HUGE_VAL@ # undef HUGE_VALF # define HUGE_VALF (1.0f / 0.0f) # undef HUGE_VAL # define HUGE_VAL (1.0 / 0.0) # undef HUGE_VALL # define HUGE_VALL (1.0L / 0.0L) #endif /* HUGE_VALF is a 'float' Infinity. */ #ifndef HUGE_VALF # if defined _MSC_VER /* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f. */ # define HUGE_VALF (1e25f * 1e25f) # else # define HUGE_VALF (1.0f / 0.0f) # endif #endif /* HUGE_VAL is a 'double' Infinity. */ #ifndef HUGE_VAL # if defined _MSC_VER /* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0. */ # define HUGE_VAL (1e250 * 1e250) # else # define HUGE_VAL (1.0 / 0.0) # endif #endif /* HUGE_VALL is a 'long double' Infinity. */ #ifndef HUGE_VALL # if defined _MSC_VER /* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L. */ # define HUGE_VALL (1e250L * 1e250L) # else # define HUGE_VALL (1.0L / 0.0L) # endif #endif #if defined FP_ILOGB0 && defined FP_ILOGBNAN /* Ensure FP_ILOGB0 and FP_ILOGBNAN are correct. */ # if defined __HAIKU__ /* Haiku: match what ilogb() does */ # undef FP_ILOGB0 # undef FP_ILOGBNAN # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # endif #else /* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined. */ # if defined __NetBSD__ || defined __sgi /* NetBSD, IRIX 6.5: match what ilogb() does */ # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # elif defined _AIX /* AIX 5.1: match what ilogb() does in AIX >= 5.2 */ # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN 2147483647 /* INT_MAX */ # elif defined __sun /* Solaris 9: match what ilogb() does */ # define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ # define FP_ILOGBNAN 2147483647 /* INT_MAX */ # else /* Gnulib defined values. */ # define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # endif #endif #if @GNULIB_ACOSF@ # if @REPLACE_ACOSF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef acosf # define acosf rpl_acosf # endif _GL_FUNCDECL_RPL (acosf, float, (float x)); _GL_CXXALIAS_RPL (acosf, float, (float x)); # else # if !@HAVE_ACOSF@ # undef acosf _GL_FUNCDECL_SYS (acosf, float, (float x)); # endif _GL_CXXALIAS_SYS (acosf, float, (float x)); # endif _GL_CXXALIASWARN (acosf); #elif defined GNULIB_POSIXCHECK # undef acosf # if HAVE_RAW_DECL_ACOSF _GL_WARN_ON_USE (acosf, "acosf is unportable - " "use gnulib module acosf for portability"); # endif #endif #if @GNULIB_ACOSL@ # if !@HAVE_ACOSL@ || !@HAVE_DECL_ACOSL@ # undef acosl _GL_FUNCDECL_SYS (acosl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (acosl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (acosl); # endif #elif defined GNULIB_POSIXCHECK # undef acosl # if HAVE_RAW_DECL_ACOSL _GL_WARN_ON_USE (acosl, "acosl is unportable - " "use gnulib module acosl for portability"); # endif #endif #if @GNULIB_ASINF@ # if @REPLACE_ASINF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef asinf # define asinf rpl_asinf # endif _GL_FUNCDECL_RPL (asinf, float, (float x)); _GL_CXXALIAS_RPL (asinf, float, (float x)); # else # if !@HAVE_ASINF@ # undef asinf _GL_FUNCDECL_SYS (asinf, float, (float x)); # endif _GL_CXXALIAS_SYS (asinf, float, (float x)); # endif _GL_CXXALIASWARN (asinf); #elif defined GNULIB_POSIXCHECK # undef asinf # if HAVE_RAW_DECL_ASINF _GL_WARN_ON_USE (asinf, "asinf is unportable - " "use gnulib module asinf for portability"); # endif #endif #if @GNULIB_ASINL@ # if !@HAVE_ASINL@ || !@HAVE_DECL_ASINL@ # undef asinl _GL_FUNCDECL_SYS (asinl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (asinl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (asinl); # endif #elif defined GNULIB_POSIXCHECK # undef asinl # if HAVE_RAW_DECL_ASINL _GL_WARN_ON_USE (asinl, "asinl is unportable - " "use gnulib module asinl for portability"); # endif #endif #if @GNULIB_ATANF@ # if @REPLACE_ATANF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef atanf # define atanf rpl_atanf # endif _GL_FUNCDECL_RPL (atanf, float, (float x)); _GL_CXXALIAS_RPL (atanf, float, (float x)); # else # if !@HAVE_ATANF@ # undef atanf _GL_FUNCDECL_SYS (atanf, float, (float x)); # endif _GL_CXXALIAS_SYS (atanf, float, (float x)); # endif _GL_CXXALIASWARN (atanf); #elif defined GNULIB_POSIXCHECK # undef atanf # if HAVE_RAW_DECL_ATANF _GL_WARN_ON_USE (atanf, "atanf is unportable - " "use gnulib module atanf for portability"); # endif #endif #if @GNULIB_ATANL@ # if !@HAVE_ATANL@ || !@HAVE_DECL_ATANL@ # undef atanl _GL_FUNCDECL_SYS (atanl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (atanl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (atanl); # endif #elif defined GNULIB_POSIXCHECK # undef atanl # if HAVE_RAW_DECL_ATANL _GL_WARN_ON_USE (atanl, "atanl is unportable - " "use gnulib module atanl for portability"); # endif #endif #if @GNULIB_ATAN2F@ # if @REPLACE_ATAN2F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef atan2f # define atan2f rpl_atan2f # endif _GL_FUNCDECL_RPL (atan2f, float, (float y, float x)); _GL_CXXALIAS_RPL (atan2f, float, (float y, float x)); # else # if !@HAVE_ATAN2F@ # undef atan2f _GL_FUNCDECL_SYS (atan2f, float, (float y, float x)); # endif _GL_CXXALIAS_SYS (atan2f, float, (float y, float x)); # endif _GL_CXXALIASWARN (atan2f); #elif defined GNULIB_POSIXCHECK # undef atan2f # if HAVE_RAW_DECL_ATAN2F _GL_WARN_ON_USE (atan2f, "atan2f is unportable - " "use gnulib module atan2f for portability"); # endif #endif #if @GNULIB_CBRTF@ # if @REPLACE_CBRTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef cbrtf # define cbrtf rpl_cbrtf # endif _GL_FUNCDECL_RPL (cbrtf, float, (float x)); _GL_CXXALIAS_RPL (cbrtf, float, (float x)); # else # if !@HAVE_DECL_CBRTF@ _GL_FUNCDECL_SYS (cbrtf, float, (float x)); # endif _GL_CXXALIAS_SYS (cbrtf, float, (float x)); # endif _GL_CXXALIASWARN (cbrtf); #elif defined GNULIB_POSIXCHECK # undef cbrtf # if HAVE_RAW_DECL_CBRTF _GL_WARN_ON_USE (cbrtf, "cbrtf is unportable - " "use gnulib module cbrtf for portability"); # endif #endif #if @GNULIB_CBRT@ # if !@HAVE_CBRT@ _GL_FUNCDECL_SYS (cbrt, double, (double x)); # endif _GL_CXXALIAS_SYS (cbrt, double, (double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (cbrt, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef cbrt # if HAVE_RAW_DECL_CBRT _GL_WARN_ON_USE (cbrt, "cbrt is unportable - " "use gnulib module cbrt for portability"); # endif #endif #if @GNULIB_CBRTL@ # if @REPLACE_CBRTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef cbrtl # define cbrtl rpl_cbrtl # endif _GL_FUNCDECL_RPL (cbrtl, long double, (long double x)); _GL_CXXALIAS_RPL (cbrtl, long double, (long double x)); # else # if !@HAVE_DECL_CBRTL@ _GL_FUNCDECL_SYS (cbrtl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (cbrtl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (cbrtl); # endif #elif defined GNULIB_POSIXCHECK # undef cbrtl # if HAVE_RAW_DECL_CBRTL _GL_WARN_ON_USE (cbrtl, "cbrtl is unportable - " "use gnulib module cbrtl for portability"); # endif #endif #if @GNULIB_CEILF@ # if @REPLACE_CEILF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ceilf # define ceilf rpl_ceilf # endif _GL_FUNCDECL_RPL (ceilf, float, (float x)); _GL_CXXALIAS_RPL (ceilf, float, (float x)); # else # if !@HAVE_DECL_CEILF@ # undef ceilf _GL_FUNCDECL_SYS (ceilf, float, (float x)); # endif _GL_CXXALIAS_SYS (ceilf, float, (float x)); # endif _GL_CXXALIASWARN (ceilf); #elif defined GNULIB_POSIXCHECK # undef ceilf # if HAVE_RAW_DECL_CEILF _GL_WARN_ON_USE (ceilf, "ceilf is unportable - " "use gnulib module ceilf for portability"); # endif #endif #if @GNULIB_CEIL@ # if @REPLACE_CEIL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ceil # define ceil rpl_ceil # endif _GL_FUNCDECL_RPL (ceil, double, (double x)); _GL_CXXALIAS_RPL (ceil, double, (double x)); # else _GL_CXXALIAS_SYS (ceil, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (ceil, double, (double x)); # endif #endif #if @GNULIB_CEILL@ # if @REPLACE_CEILL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ceill # define ceill rpl_ceill # endif _GL_FUNCDECL_RPL (ceill, long double, (long double x)); _GL_CXXALIAS_RPL (ceill, long double, (long double x)); # else # if !@HAVE_DECL_CEILL@ # undef ceill _GL_FUNCDECL_SYS (ceill, long double, (long double x)); # endif _GL_CXXALIAS_SYS (ceill, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ceill); # endif #elif defined GNULIB_POSIXCHECK # undef ceill # if HAVE_RAW_DECL_CEILL _GL_WARN_ON_USE (ceill, "ceill is unportable - " "use gnulib module ceill for portability"); # endif #endif #if @GNULIB_COPYSIGNF@ # if !@HAVE_DECL_COPYSIGNF@ # undef copysignf _GL_FUNCDECL_SYS (copysignf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (copysignf, float, (float x, float y)); _GL_CXXALIASWARN (copysignf); #elif defined GNULIB_POSIXCHECK # undef copysignf # if HAVE_RAW_DECL_COPYSIGNF _GL_WARN_ON_USE (copysignf, "copysignf is unportable - " "use gnulib module copysignf for portability"); # endif #endif #if @GNULIB_COPYSIGN@ # if !@HAVE_COPYSIGN@ _GL_FUNCDECL_SYS (copysign, double, (double x, double y)); # endif _GL_CXXALIAS_SYS (copysign, double, (double x, double y)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (copysign, double, (double x, double y)); # endif #elif defined GNULIB_POSIXCHECK # undef copysign # if HAVE_RAW_DECL_COPYSIGN _GL_WARN_ON_USE (copysign, "copysign is unportable - " "use gnulib module copysign for portability"); # endif #endif #if @GNULIB_COPYSIGNL@ # if !@HAVE_COPYSIGNL@ _GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y)); # endif _GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (copysignl); # endif #elif defined GNULIB_POSIXCHECK # undef copysignl # if HAVE_RAW_DECL_COPYSIGNL _GL_WARN_ON_USE (copysign, "copysignl is unportable - " "use gnulib module copysignl for portability"); # endif #endif #if @GNULIB_COSF@ # if @REPLACE_COSF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef cosf # define cosf rpl_cosf # endif _GL_FUNCDECL_RPL (cosf, float, (float x)); _GL_CXXALIAS_RPL (cosf, float, (float x)); # else # if !@HAVE_COSF@ # undef cosf _GL_FUNCDECL_SYS (cosf, float, (float x)); # endif _GL_CXXALIAS_SYS (cosf, float, (float x)); # endif _GL_CXXALIASWARN (cosf); #elif defined GNULIB_POSIXCHECK # undef cosf # if HAVE_RAW_DECL_COSF _GL_WARN_ON_USE (cosf, "cosf is unportable - " "use gnulib module cosf for portability"); # endif #endif #if @GNULIB_COSL@ # if !@HAVE_COSL@ || !@HAVE_DECL_COSL@ # undef cosl _GL_FUNCDECL_SYS (cosl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (cosl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (cosl); # endif #elif defined GNULIB_POSIXCHECK # undef cosl # if HAVE_RAW_DECL_COSL _GL_WARN_ON_USE (cosl, "cosl is unportable - " "use gnulib module cosl for portability"); # endif #endif #if @GNULIB_COSHF@ # if @REPLACE_COSHF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef coshf # define coshf rpl_coshf # endif _GL_FUNCDECL_RPL (coshf, float, (float x)); _GL_CXXALIAS_RPL (coshf, float, (float x)); # else # if !@HAVE_COSHF@ # undef coshf _GL_FUNCDECL_SYS (coshf, float, (float x)); # endif _GL_CXXALIAS_SYS (coshf, float, (float x)); # endif _GL_CXXALIASWARN (coshf); #elif defined GNULIB_POSIXCHECK # undef coshf # if HAVE_RAW_DECL_COSHF _GL_WARN_ON_USE (coshf, "coshf is unportable - " "use gnulib module coshf for portability"); # endif #endif #if @GNULIB_EXPF@ # if @REPLACE_EXPF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expf # define expf rpl_expf # endif _GL_FUNCDECL_RPL (expf, float, (float x)); _GL_CXXALIAS_RPL (expf, float, (float x)); # else # if !@HAVE_EXPF@ # undef expf _GL_FUNCDECL_SYS (expf, float, (float x)); # endif _GL_CXXALIAS_SYS (expf, float, (float x)); # endif _GL_CXXALIASWARN (expf); #elif defined GNULIB_POSIXCHECK # undef expf # if HAVE_RAW_DECL_EXPF _GL_WARN_ON_USE (expf, "expf is unportable - " "use gnulib module expf for portability"); # endif #endif #if @GNULIB_EXPL@ # if @REPLACE_EXPL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expl # define expl rpl_expl # endif _GL_FUNCDECL_RPL (expl, long double, (long double x)); _GL_CXXALIAS_RPL (expl, long double, (long double x)); # else # if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@ # undef expl _GL_FUNCDECL_SYS (expl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (expl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (expl); # endif #elif defined GNULIB_POSIXCHECK # undef expl # if HAVE_RAW_DECL_EXPL _GL_WARN_ON_USE (expl, "expl is unportable - " "use gnulib module expl for portability"); # endif #endif #if @GNULIB_EXP2F@ # if !@HAVE_DECL_EXP2F@ _GL_FUNCDECL_SYS (exp2f, float, (float x)); # endif _GL_CXXALIAS_SYS (exp2f, float, (float x)); _GL_CXXALIASWARN (exp2f); #elif defined GNULIB_POSIXCHECK # undef exp2f # if HAVE_RAW_DECL_EXP2F _GL_WARN_ON_USE (exp2f, "exp2f is unportable - " "use gnulib module exp2f for portability"); # endif #endif #if @GNULIB_EXP2@ # if @REPLACE_EXP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef exp2 # define exp2 rpl_exp2 # endif _GL_FUNCDECL_RPL (exp2, double, (double x)); _GL_CXXALIAS_RPL (exp2, double, (double x)); # else # if !@HAVE_DECL_EXP2@ _GL_FUNCDECL_SYS (exp2, double, (double x)); # endif _GL_CXXALIAS_SYS (exp2, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (exp2, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef exp2 # if HAVE_RAW_DECL_EXP2 _GL_WARN_ON_USE (exp2, "exp2 is unportable - " "use gnulib module exp2 for portability"); # endif #endif #if @GNULIB_EXP2L@ # if @REPLACE_EXP2L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef exp2l # define exp2l rpl_exp2l # endif _GL_FUNCDECL_RPL (exp2l, long double, (long double x)); _GL_CXXALIAS_RPL (exp2l, long double, (long double x)); # else # if !@HAVE_DECL_EXP2L@ # undef exp2l _GL_FUNCDECL_SYS (exp2l, long double, (long double x)); # endif _GL_CXXALIAS_SYS (exp2l, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (exp2l); # endif #elif defined GNULIB_POSIXCHECK # undef exp2l # if HAVE_RAW_DECL_EXP2L _GL_WARN_ON_USE (exp2l, "exp2l is unportable - " "use gnulib module exp2l for portability"); # endif #endif #if @GNULIB_EXPM1F@ # if @REPLACE_EXPM1F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expm1f # define expm1f rpl_expm1f # endif _GL_FUNCDECL_RPL (expm1f, float, (float x)); _GL_CXXALIAS_RPL (expm1f, float, (float x)); # else # if !@HAVE_EXPM1F@ _GL_FUNCDECL_SYS (expm1f, float, (float x)); # endif _GL_CXXALIAS_SYS (expm1f, float, (float x)); # endif _GL_CXXALIASWARN (expm1f); #elif defined GNULIB_POSIXCHECK # undef expm1f # if HAVE_RAW_DECL_EXPM1F _GL_WARN_ON_USE (expm1f, "expm1f is unportable - " "use gnulib module expm1f for portability"); # endif #endif #if @GNULIB_EXPM1@ # if @REPLACE_EXPM1@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expm1 # define expm1 rpl_expm1 # endif _GL_FUNCDECL_RPL (expm1, double, (double x)); _GL_CXXALIAS_RPL (expm1, double, (double x)); # else # if !@HAVE_EXPM1@ _GL_FUNCDECL_SYS (expm1, double, (double x)); # endif _GL_CXXALIAS_SYS (expm1, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (expm1, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef expm1 # if HAVE_RAW_DECL_EXPM1 _GL_WARN_ON_USE (expm1, "expm1 is unportable - " "use gnulib module expm1 for portability"); # endif #endif #if @GNULIB_EXPM1L@ # if @REPLACE_EXPM1L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expm1l # define expm1l rpl_expm1l # endif _GL_FUNCDECL_RPL (expm1l, long double, (long double x)); _GL_CXXALIAS_RPL (expm1l, long double, (long double x)); # else # if !@HAVE_DECL_EXPM1L@ # undef expm1l # if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (expm1l, long double, (long double x)); # endif # endif _GL_CXXALIAS_SYS (expm1l, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (expm1l); # endif #elif defined GNULIB_POSIXCHECK # undef expm1l # if HAVE_RAW_DECL_EXPM1L _GL_WARN_ON_USE (expm1l, "expm1l is unportable - " "use gnulib module expm1l for portability"); # endif #endif #if @GNULIB_FABSF@ # if !@HAVE_FABSF@ # undef fabsf _GL_FUNCDECL_SYS (fabsf, float, (float x)); # endif _GL_CXXALIAS_SYS (fabsf, float, (float x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fabsf); # endif #elif defined GNULIB_POSIXCHECK # undef fabsf # if HAVE_RAW_DECL_FABSF _GL_WARN_ON_USE (fabsf, "fabsf is unportable - " "use gnulib module fabsf for portability"); # endif #endif #if @GNULIB_FABSL@ # if @REPLACE_FABSL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fabsl # define fabsl rpl_fabsl # endif _GL_FUNCDECL_RPL (fabsl, long double, (long double x)); _GL_CXXALIAS_RPL (fabsl, long double, (long double x)); # else # if !@HAVE_FABSL@ # undef fabsl _GL_FUNCDECL_SYS (fabsl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (fabsl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fabsl); # endif #elif defined GNULIB_POSIXCHECK # undef fabsl # if HAVE_RAW_DECL_FABSL _GL_WARN_ON_USE (fabsl, "fabsl is unportable - " "use gnulib module fabsl for portability"); # endif #endif #if @GNULIB_FLOORF@ # if @REPLACE_FLOORF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef floorf # define floorf rpl_floorf # endif _GL_FUNCDECL_RPL (floorf, float, (float x)); _GL_CXXALIAS_RPL (floorf, float, (float x)); # else # if !@HAVE_DECL_FLOORF@ # undef floorf _GL_FUNCDECL_SYS (floorf, float, (float x)); # endif _GL_CXXALIAS_SYS (floorf, float, (float x)); # endif _GL_CXXALIASWARN (floorf); #elif defined GNULIB_POSIXCHECK # undef floorf # if HAVE_RAW_DECL_FLOORF _GL_WARN_ON_USE (floorf, "floorf is unportable - " "use gnulib module floorf for portability"); # endif #endif #if @GNULIB_FLOOR@ # if @REPLACE_FLOOR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef floor # define floor rpl_floor # endif _GL_FUNCDECL_RPL (floor, double, (double x)); _GL_CXXALIAS_RPL (floor, double, (double x)); # else _GL_CXXALIAS_SYS (floor, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (floor, double, (double x)); # endif #endif #if @GNULIB_FLOORL@ # if @REPLACE_FLOORL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef floorl # define floorl rpl_floorl # endif _GL_FUNCDECL_RPL (floorl, long double, (long double x)); _GL_CXXALIAS_RPL (floorl, long double, (long double x)); # else # if !@HAVE_DECL_FLOORL@ # undef floorl _GL_FUNCDECL_SYS (floorl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (floorl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (floorl); # endif #elif defined GNULIB_POSIXCHECK # undef floorl # if HAVE_RAW_DECL_FLOORL _GL_WARN_ON_USE (floorl, "floorl is unportable - " "use gnulib module floorl for portability"); # endif #endif #if @GNULIB_FMAF@ # if @REPLACE_FMAF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmaf # define fmaf rpl_fmaf # endif _GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z)); _GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z)); # else # if !@HAVE_FMAF@ # undef fmaf _GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z)); # endif _GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z)); # endif _GL_CXXALIASWARN (fmaf); #elif defined GNULIB_POSIXCHECK # undef fmaf # if HAVE_RAW_DECL_FMAF _GL_WARN_ON_USE (fmaf, "fmaf is unportable - " "use gnulib module fmaf for portability"); # endif #endif #if @GNULIB_FMA@ # if @REPLACE_FMA@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fma # define fma rpl_fma # endif _GL_FUNCDECL_RPL (fma, double, (double x, double y, double z)); _GL_CXXALIAS_RPL (fma, double, (double x, double y, double z)); # else # if !@HAVE_FMA@ # undef fma _GL_FUNCDECL_SYS (fma, double, (double x, double y, double z)); # endif _GL_CXXALIAS_SYS (fma, double, (double x, double y, double z)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (fma, double, (double x, double y, double z)); # endif #elif defined GNULIB_POSIXCHECK # undef fma # if HAVE_RAW_DECL_FMA _GL_WARN_ON_USE (fma, "fma is unportable - " "use gnulib module fma for portability"); # endif #endif #if @GNULIB_FMAL@ # if @REPLACE_FMAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmal # define fmal rpl_fmal # endif _GL_FUNCDECL_RPL (fmal, long double, (long double x, long double y, long double z)); _GL_CXXALIAS_RPL (fmal, long double, (long double x, long double y, long double z)); # else # if !@HAVE_FMAL@ # undef fmal # if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (fmal, long double, (long double x, long double y, long double z)); # endif # endif _GL_CXXALIAS_SYS (fmal, long double, (long double x, long double y, long double z)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fmal); # endif #elif defined GNULIB_POSIXCHECK # undef fmal # if HAVE_RAW_DECL_FMAL _GL_WARN_ON_USE (fmal, "fmal is unportable - " "use gnulib module fmal for portability"); # endif #endif #if @GNULIB_FMODF@ # if @REPLACE_FMODF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmodf # define fmodf rpl_fmodf # endif _GL_FUNCDECL_RPL (fmodf, float, (float x, float y)); _GL_CXXALIAS_RPL (fmodf, float, (float x, float y)); # else # if !@HAVE_FMODF@ # undef fmodf _GL_FUNCDECL_SYS (fmodf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (fmodf, float, (float x, float y)); # endif _GL_CXXALIASWARN (fmodf); #elif defined GNULIB_POSIXCHECK # undef fmodf # if HAVE_RAW_DECL_FMODF _GL_WARN_ON_USE (fmodf, "fmodf is unportable - " "use gnulib module fmodf for portability"); # endif #endif #if @GNULIB_FMOD@ # if @REPLACE_FMOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmod # define fmod rpl_fmod # endif _GL_FUNCDECL_RPL (fmod, double, (double x, double y)); _GL_CXXALIAS_RPL (fmod, double, (double x, double y)); # else _GL_CXXALIAS_SYS (fmod, double, (double x, double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (fmod, double, (double x, double y)); # endif #elif defined GNULIB_POSIXCHECK # undef fmod # if HAVE_RAW_DECL_FMOD _GL_WARN_ON_USE (fmod, "fmod has portability problems - " "use gnulib module fmod for portability"); # endif #endif #if @GNULIB_FMODL@ # if @REPLACE_FMODL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmodl # define fmodl rpl_fmodl # endif _GL_FUNCDECL_RPL (fmodl, long double, (long double x, long double y)); _GL_CXXALIAS_RPL (fmodl, long double, (long double x, long double y)); # else # if !@HAVE_FMODL@ # undef fmodl _GL_FUNCDECL_SYS (fmodl, long double, (long double x, long double y)); # endif _GL_CXXALIAS_SYS (fmodl, long double, (long double x, long double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fmodl); # endif #elif defined GNULIB_POSIXCHECK # undef fmodl # if HAVE_RAW_DECL_FMODL _GL_WARN_ON_USE (fmodl, "fmodl is unportable - " "use gnulib module fmodl for portability"); # endif #endif /* Write x as x = mantissa * 2^exp where If x finite and nonzero: 0.5 <= |mantissa| < 1.0. If x is zero: mantissa = x, exp = 0. If x is infinite or NaN: mantissa = x, exp unspecified. Store exp in *EXPPTR and return mantissa. */ #if @GNULIB_FREXPF@ # if @REPLACE_FREXPF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef frexpf # define frexpf rpl_frexpf # endif _GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr)); # else # if !@HAVE_FREXPF@ # undef frexpf _GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (frexpf); # endif #elif defined GNULIB_POSIXCHECK # undef frexpf # if HAVE_RAW_DECL_FREXPF _GL_WARN_ON_USE (frexpf, "frexpf is unportable - " "use gnulib module frexpf for portability"); # endif #endif /* Write x as x = mantissa * 2^exp where If x finite and nonzero: 0.5 <= |mantissa| < 1.0. If x is zero: mantissa = x, exp = 0. If x is infinite or NaN: mantissa = x, exp unspecified. Store exp in *EXPPTR and return mantissa. */ #if @GNULIB_FREXP@ # if @REPLACE_FREXP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef frexp # define frexp rpl_frexp # endif _GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr)); # else _GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (frexp, double, (double x, int *expptr)); # endif #elif defined GNULIB_POSIXCHECK # undef frexp /* Assume frexp is always declared. */ _GL_WARN_ON_USE (frexp, "frexp is unportable - " "use gnulib module frexp for portability"); #endif /* Write x as x = mantissa * 2^exp where If x finite and nonzero: 0.5 <= |mantissa| < 1.0. If x is zero: mantissa = x, exp = 0. If x is infinite or NaN: mantissa = x, exp unspecified. Store exp in *EXPPTR and return mantissa. */ #if @GNULIB_FREXPL@ && @REPLACE_FREXPL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef frexpl # define frexpl rpl_frexpl # endif _GL_FUNCDECL_RPL (frexpl, long double, (long double x, int *expptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr)); #else # if !@HAVE_DECL_FREXPL@ _GL_FUNCDECL_SYS (frexpl, long double, (long double x, int *expptr) _GL_ARG_NONNULL ((2))); # endif # if @GNULIB_FREXPL@ _GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr)); # endif #endif #if @GNULIB_FREXPL@ && !(@REPLACE_FREXPL@ && !@HAVE_DECL_FREXPL@) # if __GLIBC__ >= 2 _GL_CXXALIASWARN (frexpl); # endif #endif #if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK # undef frexpl # if HAVE_RAW_DECL_FREXPL _GL_WARN_ON_USE (frexpl, "frexpl is unportable - " "use gnulib module frexpl for portability"); # endif #endif /* Return sqrt(x^2+y^2). */ #if @GNULIB_HYPOTF@ # if @REPLACE_HYPOTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef hypotf # define hypotf rpl_hypotf # endif _GL_FUNCDECL_RPL (hypotf, float, (float x, float y)); _GL_CXXALIAS_RPL (hypotf, float, (float x, float y)); # else # if !@HAVE_HYPOTF@ _GL_FUNCDECL_SYS (hypotf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (hypotf, float, (float x, float y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (hypotf); # endif #elif defined GNULIB_POSIXCHECK # undef hypotf # if HAVE_RAW_DECL_HYPOTF _GL_WARN_ON_USE (hypotf, "hypotf is unportable - " "use gnulib module hypotf for portability"); # endif #endif /* Return sqrt(x^2+y^2). */ #if @GNULIB_HYPOT@ # if @REPLACE_HYPOT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef hypot # define hypot rpl_hypot # endif _GL_FUNCDECL_RPL (hypot, double, (double x, double y)); _GL_CXXALIAS_RPL (hypot, double, (double x, double y)); # else _GL_CXXALIAS_SYS (hypot, double, (double x, double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (hypot, double, (double x, double y)); # endif #elif defined GNULIB_POSIXCHECK # undef hypot # if HAVE_RAW_DECL_HYPOT _GL_WARN_ON_USE (hypotf, "hypot has portability problems - " "use gnulib module hypot for portability"); # endif #endif /* Return sqrt(x^2+y^2). */ #if @GNULIB_HYPOTL@ # if @REPLACE_HYPOTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef hypotl # define hypotl rpl_hypotl # endif _GL_FUNCDECL_RPL (hypotl, long double, (long double x, long double y)); _GL_CXXALIAS_RPL (hypotl, long double, (long double x, long double y)); # else # if !@HAVE_HYPOTL@ _GL_FUNCDECL_SYS (hypotl, long double, (long double x, long double y)); # endif _GL_CXXALIAS_SYS (hypotl, long double, (long double x, long double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (hypotl); # endif #elif defined GNULIB_POSIXCHECK # undef hypotl # if HAVE_RAW_DECL_HYPOTL _GL_WARN_ON_USE (hypotl, "hypotl is unportable - " "use gnulib module hypotl for portability"); # endif #endif #if @GNULIB_ILOGBF@ # if @REPLACE_ILOGBF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ilogbf # define ilogbf rpl_ilogbf # endif _GL_FUNCDECL_RPL (ilogbf, int, (float x)); _GL_CXXALIAS_RPL (ilogbf, int, (float x)); # else # if !@HAVE_ILOGBF@ _GL_FUNCDECL_SYS (ilogbf, int, (float x)); # endif _GL_CXXALIAS_SYS (ilogbf, int, (float x)); # endif _GL_CXXALIASWARN (ilogbf); #elif defined GNULIB_POSIXCHECK # undef ilogbf # if HAVE_RAW_DECL_ILOGBF _GL_WARN_ON_USE (ilogbf, "ilogbf is unportable - " "use gnulib module ilogbf for portability"); # endif #endif #if @GNULIB_ILOGB@ # if @REPLACE_ILOGB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ilogb # define ilogb rpl_ilogb # endif _GL_FUNCDECL_RPL (ilogb, int, (double x)); _GL_CXXALIAS_RPL (ilogb, int, (double x)); # else # if !@HAVE_ILOGB@ _GL_FUNCDECL_SYS (ilogb, int, (double x)); # endif _GL_CXXALIAS_SYS (ilogb, int, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (ilogb, int, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef ilogb # if HAVE_RAW_DECL_ILOGB _GL_WARN_ON_USE (ilogb, "ilogb is unportable - " "use gnulib module ilogb for portability"); # endif #endif #if @GNULIB_ILOGBL@ # if @REPLACE_ILOGBL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ilogbl # define ilogbl rpl_ilogbl # endif _GL_FUNCDECL_RPL (ilogbl, int, (long double x)); _GL_CXXALIAS_RPL (ilogbl, int, (long double x)); # else # if !@HAVE_ILOGBL@ # undef ilogbl _GL_FUNCDECL_SYS (ilogbl, int, (long double x)); # endif _GL_CXXALIAS_SYS (ilogbl, int, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ilogbl); # endif #elif defined GNULIB_POSIXCHECK # undef ilogbl # if HAVE_RAW_DECL_ILOGBL _GL_WARN_ON_USE (ilogbl, "ilogbl is unportable - " "use gnulib module ilogbl for portability"); # endif #endif #if @GNULIB_MDA_J0@ /* On native Windows, map 'j0' to '_j0', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::j0 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef j0 # define j0 _j0 # endif _GL_CXXALIAS_MDA (j0, double, (double x)); # else _GL_CXXALIAS_SYS (j0, double, (double x)); # endif _GL_CXXALIASWARN (j0); #endif #if @GNULIB_MDA_J1@ /* On native Windows, map 'j1' to '_j1', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::j1 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef j1 # define j1 _j1 # endif _GL_CXXALIAS_MDA (j1, double, (double x)); # else _GL_CXXALIAS_SYS (j1, double, (double x)); # endif _GL_CXXALIASWARN (j1); #endif #if @GNULIB_MDA_JN@ /* On native Windows, map 'jn' to '_jn', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::jn always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef jn # define jn _jn # endif _GL_CXXALIAS_MDA (jn, double, (int n, double x)); # else _GL_CXXALIAS_SYS (jn, double, (int n, double x)); # endif _GL_CXXALIASWARN (jn); #endif /* Return x * 2^exp. */ #if @GNULIB_LDEXPF@ # if !@HAVE_LDEXPF@ # undef ldexpf _GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp)); # endif _GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ldexpf); # endif #elif defined GNULIB_POSIXCHECK # undef ldexpf # if HAVE_RAW_DECL_LDEXPF _GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - " "use gnulib module ldexpf for portability"); # endif #endif /* Return x * 2^exp. */ #if @GNULIB_LDEXP@ # if @REPLACE_LDEXP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ldexp # define ldexp rpl_ldexp # endif _GL_FUNCDECL_RPL (ldexp, double, (double x, int exp)); _GL_CXXALIAS_RPL (ldexp, double, (double x, int exp)); # else /* Assume ldexp is always declared. */ _GL_CXXALIAS_SYS (ldexp, double, (double x, int exp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (ldexp, double, (double x, int exp)); # endif #elif defined GNULIB_POSIXCHECK # undef ldexp /* Assume ldexp is always declared. */ _GL_WARN_ON_USE (ldexp, "ldexp is unportable - " "use gnulib module ldexp for portability"); #endif /* Return x * 2^exp. */ #if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ldexpl # define ldexpl rpl_ldexpl # endif _GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp)); _GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp)); #else # if !@HAVE_DECL_LDEXPL@ _GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp)); # endif # if @GNULIB_LDEXPL@ _GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp)); # endif #endif #if @GNULIB_LDEXPL@ # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ldexpl); # endif #endif #if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK # undef ldexpl # if HAVE_RAW_DECL_LDEXPL _GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - " "use gnulib module ldexpl for portability"); # endif #endif #if @GNULIB_LOGF@ # if @REPLACE_LOGF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logf # define logf rpl_logf # endif _GL_FUNCDECL_RPL (logf, float, (float x)); _GL_CXXALIAS_RPL (logf, float, (float x)); # else # if !@HAVE_LOGF@ # undef logf _GL_FUNCDECL_SYS (logf, float, (float x)); # endif _GL_CXXALIAS_SYS (logf, float, (float x)); # endif _GL_CXXALIASWARN (logf); #elif defined GNULIB_POSIXCHECK # undef logf # if HAVE_RAW_DECL_LOGF _GL_WARN_ON_USE (logf, "logf is unportable - " "use gnulib module logf for portability"); # endif #endif #if @GNULIB_LOG@ # if @REPLACE_LOG@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log # define log rpl_log # endif _GL_FUNCDECL_RPL (log, double, (double x)); _GL_CXXALIAS_RPL (log, double, (double x)); # else _GL_CXXALIAS_SYS (log, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (log, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef log # if HAVE_RAW_DECL_LOG _GL_WARN_ON_USE (log, "log has portability problems - " "use gnulib module log for portability"); # endif #endif #if @GNULIB_LOGL@ # if @REPLACE_LOGL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logl # define logl rpl_logl # endif _GL_FUNCDECL_RPL (logl, long double, (long double x)); _GL_CXXALIAS_RPL (logl, long double, (long double x)); # else # if !@HAVE_LOGL@ || !@HAVE_DECL_LOGL@ # undef logl _GL_FUNCDECL_SYS (logl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (logl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (logl); # endif #elif defined GNULIB_POSIXCHECK # undef logl # if HAVE_RAW_DECL_LOGL _GL_WARN_ON_USE (logl, "logl is unportable - " "use gnulib module logl for portability"); # endif #endif #if @GNULIB_LOG10F@ # if @REPLACE_LOG10F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log10f # define log10f rpl_log10f # endif _GL_FUNCDECL_RPL (log10f, float, (float x)); _GL_CXXALIAS_RPL (log10f, float, (float x)); # else # if !@HAVE_LOG10F@ # undef log10f _GL_FUNCDECL_SYS (log10f, float, (float x)); # endif _GL_CXXALIAS_SYS (log10f, float, (float x)); # endif _GL_CXXALIASWARN (log10f); #elif defined GNULIB_POSIXCHECK # undef log10f # if HAVE_RAW_DECL_LOG10F _GL_WARN_ON_USE (log10f, "log10f is unportable - " "use gnulib module log10f for portability"); # endif #endif #if @GNULIB_LOG10@ # if @REPLACE_LOG10@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log10 # define log10 rpl_log10 # endif _GL_FUNCDECL_RPL (log10, double, (double x)); _GL_CXXALIAS_RPL (log10, double, (double x)); # else _GL_CXXALIAS_SYS (log10, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (log10, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef log10 # if HAVE_RAW_DECL_LOG10 _GL_WARN_ON_USE (log10, "log10 has portability problems - " "use gnulib module log10 for portability"); # endif #endif #if @GNULIB_LOG10L@ # if @REPLACE_LOG10L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log10l # define log10l rpl_log10l # endif _GL_FUNCDECL_RPL (log10l, long double, (long double x)); _GL_CXXALIAS_RPL (log10l, long double, (long double x)); # else # if !@HAVE_LOG10L@ || !@HAVE_DECL_LOG10L@ # undef log10l _GL_FUNCDECL_SYS (log10l, long double, (long double x)); # endif _GL_CXXALIAS_SYS (log10l, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (log10l); # endif #elif defined GNULIB_POSIXCHECK # undef log10l # if HAVE_RAW_DECL_LOG10L _GL_WARN_ON_USE (log10l, "log10l is unportable - " "use gnulib module log10l for portability"); # endif #endif #if @GNULIB_LOG1PF@ # if @REPLACE_LOG1PF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log1pf # define log1pf rpl_log1pf # endif _GL_FUNCDECL_RPL (log1pf, float, (float x)); _GL_CXXALIAS_RPL (log1pf, float, (float x)); # else # if !@HAVE_LOG1PF@ _GL_FUNCDECL_SYS (log1pf, float, (float x)); # endif _GL_CXXALIAS_SYS (log1pf, float, (float x)); # endif _GL_CXXALIASWARN (log1pf); #elif defined GNULIB_POSIXCHECK # undef log1pf # if HAVE_RAW_DECL_LOG1PF _GL_WARN_ON_USE (log1pf, "log1pf is unportable - " "use gnulib module log1pf for portability"); # endif #endif #if @GNULIB_LOG1P@ # if @REPLACE_LOG1P@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log1p # define log1p rpl_log1p # endif _GL_FUNCDECL_RPL (log1p, double, (double x)); _GL_CXXALIAS_RPL (log1p, double, (double x)); # else # if !@HAVE_LOG1P@ _GL_FUNCDECL_SYS (log1p, double, (double x)); # endif _GL_CXXALIAS_SYS (log1p, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (log1p, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef log1p # if HAVE_RAW_DECL_LOG1P _GL_WARN_ON_USE (log1p, "log1p has portability problems - " "use gnulib module log1p for portability"); # endif #endif #if @GNULIB_LOG1PL@ # if @REPLACE_LOG1PL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log1pl # define log1pl rpl_log1pl # endif _GL_FUNCDECL_RPL (log1pl, long double, (long double x)); _GL_CXXALIAS_RPL (log1pl, long double, (long double x)); # else # if !@HAVE_LOG1PL@ _GL_FUNCDECL_SYS (log1pl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (log1pl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (log1pl); # endif #elif defined GNULIB_POSIXCHECK # undef log1pl # if HAVE_RAW_DECL_LOG1PL _GL_WARN_ON_USE (log1pl, "log1pl has portability problems - " "use gnulib module log1pl for portability"); # endif #endif #if @GNULIB_LOG2F@ # if @REPLACE_LOG2F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log2f # define log2f rpl_log2f # endif _GL_FUNCDECL_RPL (log2f, float, (float x)); _GL_CXXALIAS_RPL (log2f, float, (float x)); # else # if !@HAVE_DECL_LOG2F@ # undef log2f _GL_FUNCDECL_SYS (log2f, float, (float x)); # endif _GL_CXXALIAS_SYS (log2f, float, (float x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (log2f); # endif #elif defined GNULIB_POSIXCHECK # undef log2f # if HAVE_RAW_DECL_LOG2F _GL_WARN_ON_USE (log2f, "log2f is unportable - " "use gnulib module log2f for portability"); # endif #endif #if @GNULIB_LOG2@ # if @REPLACE_LOG2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log2 # define log2 rpl_log2 # endif _GL_FUNCDECL_RPL (log2, double, (double x)); _GL_CXXALIAS_RPL (log2, double, (double x)); # else # if !@HAVE_DECL_LOG2@ # undef log2 _GL_FUNCDECL_SYS (log2, double, (double x)); # endif _GL_CXXALIAS_SYS (log2, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (log2, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef log2 # if HAVE_RAW_DECL_LOG2 _GL_WARN_ON_USE (log2, "log2 is unportable - " "use gnulib module log2 for portability"); # endif #endif #if @GNULIB_LOG2L@ # if @REPLACE_LOG2L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log2l # define log2l rpl_log2l # endif _GL_FUNCDECL_RPL (log2l, long double, (long double x)); _GL_CXXALIAS_RPL (log2l, long double, (long double x)); # else # if !@HAVE_DECL_LOG2L@ _GL_FUNCDECL_SYS (log2l, long double, (long double x)); # endif _GL_CXXALIAS_SYS (log2l, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (log2l); # endif #elif defined GNULIB_POSIXCHECK # undef log2l # if HAVE_RAW_DECL_LOG2L _GL_WARN_ON_USE (log2l, "log2l is unportable - " "use gnulib module log2l for portability"); # endif #endif #if @GNULIB_LOGBF@ # if @REPLACE_LOGBF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logbf # define logbf rpl_logbf # endif _GL_FUNCDECL_RPL (logbf, float, (float x)); _GL_CXXALIAS_RPL (logbf, float, (float x)); # else # if !@HAVE_LOGBF@ _GL_FUNCDECL_SYS (logbf, float, (float x)); # endif _GL_CXXALIAS_SYS (logbf, float, (float x)); # endif _GL_CXXALIASWARN (logbf); #elif defined GNULIB_POSIXCHECK # undef logbf # if HAVE_RAW_DECL_LOGBF _GL_WARN_ON_USE (logbf, "logbf is unportable - " "use gnulib module logbf for portability"); # endif #endif #if @GNULIB_LOGB@ # if @REPLACE_LOGB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logb # define logb rpl_logb # endif _GL_FUNCDECL_RPL (logb, double, (double x)); _GL_CXXALIAS_RPL (logb, double, (double x)); # else # if !@HAVE_DECL_LOGB@ _GL_FUNCDECL_SYS (logb, double, (double x)); # endif _GL_CXXALIAS_SYS (logb, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (logb, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef logb # if HAVE_RAW_DECL_LOGB _GL_WARN_ON_USE (logb, "logb is unportable - " "use gnulib module logb for portability"); # endif #endif #if @GNULIB_LOGBL@ # if @REPLACE_LOGBL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logbl # define logbl rpl_logbl # endif _GL_FUNCDECL_RPL (logbl, long double, (long double x)); _GL_CXXALIAS_RPL (logbl, long double, (long double x)); # else # if !@HAVE_LOGBL@ _GL_FUNCDECL_SYS (logbl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (logbl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (logbl); # endif #elif defined GNULIB_POSIXCHECK # undef logbl # if HAVE_RAW_DECL_LOGBL _GL_WARN_ON_USE (logbl, "logbl is unportable - " "use gnulib module logbl for portability"); # endif #endif #if @GNULIB_MODFF@ # if @REPLACE_MODFF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef modff # define modff rpl_modff # endif _GL_FUNCDECL_RPL (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (modff, float, (float x, float *iptr)); # else # if !@HAVE_MODFF@ # undef modff _GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (modff, float, (float x, float *iptr)); # endif _GL_CXXALIASWARN (modff); #elif defined GNULIB_POSIXCHECK # undef modff # if HAVE_RAW_DECL_MODFF _GL_WARN_ON_USE (modff, "modff is unportable - " "use gnulib module modff for portability"); # endif #endif #if @GNULIB_MODF@ # if @REPLACE_MODF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef modf # define modf rpl_modf # endif _GL_FUNCDECL_RPL (modf, double, (double x, double *iptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (modf, double, (double x, double *iptr)); # else _GL_CXXALIAS_SYS (modf, double, (double x, double *iptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (modf, double, (double x, double *iptr)); # endif #elif defined GNULIB_POSIXCHECK # undef modf # if HAVE_RAW_DECL_MODF _GL_WARN_ON_USE (modf, "modf has portability problems - " "use gnulib module modf for portability"); # endif #endif #if @GNULIB_MODFL@ # if @REPLACE_MODFL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef modfl # define modfl rpl_modfl # endif _GL_FUNCDECL_RPL (modfl, long double, (long double x, long double *iptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (modfl, long double, (long double x, long double *iptr)); # else # if !@HAVE_MODFL@ # undef modfl _GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (modfl); # endif #elif defined GNULIB_POSIXCHECK # undef modfl # if HAVE_RAW_DECL_MODFL _GL_WARN_ON_USE (modfl, "modfl is unportable - " "use gnulib module modfl for portability"); # endif #endif #if @GNULIB_POWF@ # if !@HAVE_POWF@ # undef powf _GL_FUNCDECL_SYS (powf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (powf, float, (float x, float y)); _GL_CXXALIASWARN (powf); #elif defined GNULIB_POSIXCHECK # undef powf # if HAVE_RAW_DECL_POWF _GL_WARN_ON_USE (powf, "powf is unportable - " "use gnulib module powf for portability"); # endif #endif #if @GNULIB_REMAINDERF@ # if @REPLACE_REMAINDERF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remainderf # define remainderf rpl_remainderf # endif _GL_FUNCDECL_RPL (remainderf, float, (float x, float y)); _GL_CXXALIAS_RPL (remainderf, float, (float x, float y)); # else # if !@HAVE_REMAINDERF@ _GL_FUNCDECL_SYS (remainderf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (remainderf, float, (float x, float y)); # endif _GL_CXXALIASWARN (remainderf); #elif defined GNULIB_POSIXCHECK # undef remainderf # if HAVE_RAW_DECL_REMAINDERF _GL_WARN_ON_USE (remainderf, "remainderf is unportable - " "use gnulib module remainderf for portability"); # endif #endif #if @GNULIB_REMAINDER@ # if @REPLACE_REMAINDER@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remainder # define remainder rpl_remainder # endif _GL_FUNCDECL_RPL (remainder, double, (double x, double y)); _GL_CXXALIAS_RPL (remainder, double, (double x, double y)); # else # if !@HAVE_REMAINDER@ || !@HAVE_DECL_REMAINDER@ _GL_FUNCDECL_SYS (remainder, double, (double x, double y)); # endif _GL_CXXALIAS_SYS (remainder, double, (double x, double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (remainder, double, (double x, double y)); # endif #elif defined GNULIB_POSIXCHECK # undef remainder # if HAVE_RAW_DECL_REMAINDER _GL_WARN_ON_USE (remainder, "remainder is unportable - " "use gnulib module remainder for portability"); # endif #endif #if @GNULIB_REMAINDERL@ # if @REPLACE_REMAINDERL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remainderl # define remainderl rpl_remainderl # endif _GL_FUNCDECL_RPL (remainderl, long double, (long double x, long double y)); _GL_CXXALIAS_RPL (remainderl, long double, (long double x, long double y)); # else # if !@HAVE_DECL_REMAINDERL@ # undef remainderl # if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y)); # endif # endif _GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (remainderl); # endif #elif defined GNULIB_POSIXCHECK # undef remainderl # if HAVE_RAW_DECL_REMAINDERL _GL_WARN_ON_USE (remainderl, "remainderl is unportable - " "use gnulib module remainderl for portability"); # endif #endif #if @GNULIB_RINTF@ # if !@HAVE_DECL_RINTF@ _GL_FUNCDECL_SYS (rintf, float, (float x)); # endif _GL_CXXALIAS_SYS (rintf, float, (float x)); _GL_CXXALIASWARN (rintf); #elif defined GNULIB_POSIXCHECK # undef rintf # if HAVE_RAW_DECL_RINTF _GL_WARN_ON_USE (rintf, "rintf is unportable - " "use gnulib module rintf for portability"); # endif #endif #if @GNULIB_RINT@ # if !@HAVE_RINT@ _GL_FUNCDECL_SYS (rint, double, (double x)); # endif _GL_CXXALIAS_SYS (rint, double, (double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (rint, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef rint # if HAVE_RAW_DECL_RINT _GL_WARN_ON_USE (rint, "rint is unportable - " "use gnulib module rint for portability"); # endif #endif #if @GNULIB_RINTL@ # if @REPLACE_RINTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rintl # define rintl rpl_rintl # endif _GL_FUNCDECL_RPL (rintl, long double, (long double x)); _GL_CXXALIAS_RPL (rintl, long double, (long double x)); # else # if !@HAVE_RINTL@ _GL_FUNCDECL_SYS (rintl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (rintl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (rintl); # endif #elif defined GNULIB_POSIXCHECK # undef rintl # if HAVE_RAW_DECL_RINTL _GL_WARN_ON_USE (rintl, "rintl is unportable - " "use gnulib module rintl for portability"); # endif #endif #if @GNULIB_ROUNDF@ # if @REPLACE_ROUNDF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef roundf # define roundf rpl_roundf # endif _GL_FUNCDECL_RPL (roundf, float, (float x)); _GL_CXXALIAS_RPL (roundf, float, (float x)); # else # if !@HAVE_DECL_ROUNDF@ _GL_FUNCDECL_SYS (roundf, float, (float x)); # endif _GL_CXXALIAS_SYS (roundf, float, (float x)); # endif _GL_CXXALIASWARN (roundf); #elif defined GNULIB_POSIXCHECK # undef roundf # if HAVE_RAW_DECL_ROUNDF _GL_WARN_ON_USE (roundf, "roundf is unportable - " "use gnulib module roundf for portability"); # endif #endif #if @GNULIB_ROUND@ # if @REPLACE_ROUND@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef round # define round rpl_round # endif _GL_FUNCDECL_RPL (round, double, (double x)); _GL_CXXALIAS_RPL (round, double, (double x)); # else # if !@HAVE_DECL_ROUND@ _GL_FUNCDECL_SYS (round, double, (double x)); # endif _GL_CXXALIAS_SYS (round, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (round, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef round # if HAVE_RAW_DECL_ROUND _GL_WARN_ON_USE (round, "round is unportable - " "use gnulib module round for portability"); # endif #endif #if @GNULIB_ROUNDL@ # if @REPLACE_ROUNDL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef roundl # define roundl rpl_roundl # endif _GL_FUNCDECL_RPL (roundl, long double, (long double x)); _GL_CXXALIAS_RPL (roundl, long double, (long double x)); # else # if !@HAVE_DECL_ROUNDL@ # undef roundl # if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (roundl, long double, (long double x)); # endif # endif _GL_CXXALIAS_SYS (roundl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (roundl); # endif #elif defined GNULIB_POSIXCHECK # undef roundl # if HAVE_RAW_DECL_ROUNDL _GL_WARN_ON_USE (roundl, "roundl is unportable - " "use gnulib module roundl for portability"); # endif #endif #if @GNULIB_SINF@ # if @REPLACE_SINF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sinf # define sinf rpl_sinf # endif _GL_FUNCDECL_RPL (sinf, float, (float x)); _GL_CXXALIAS_RPL (sinf, float, (float x)); # else # if !@HAVE_SINF@ # undef sinf _GL_FUNCDECL_SYS (sinf, float, (float x)); # endif _GL_CXXALIAS_SYS (sinf, float, (float x)); # endif _GL_CXXALIASWARN (sinf); #elif defined GNULIB_POSIXCHECK # undef sinf # if HAVE_RAW_DECL_SINF _GL_WARN_ON_USE (sinf, "sinf is unportable - " "use gnulib module sinf for portability"); # endif #endif #if @GNULIB_SINL@ # if !@HAVE_SINL@ || !@HAVE_DECL_SINL@ # undef sinl _GL_FUNCDECL_SYS (sinl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (sinl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sinl); # endif #elif defined GNULIB_POSIXCHECK # undef sinl # if HAVE_RAW_DECL_SINL _GL_WARN_ON_USE (sinl, "sinl is unportable - " "use gnulib module sinl for portability"); # endif #endif #if @GNULIB_SINHF@ # if @REPLACE_SINHF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sinhf # define sinhf rpl_sinhf # endif _GL_FUNCDECL_RPL (sinhf, float, (float x)); _GL_CXXALIAS_RPL (sinhf, float, (float x)); # else # if !@HAVE_SINHF@ # undef sinhf _GL_FUNCDECL_SYS (sinhf, float, (float x)); # endif _GL_CXXALIAS_SYS (sinhf, float, (float x)); # endif _GL_CXXALIASWARN (sinhf); #elif defined GNULIB_POSIXCHECK # undef sinhf # if HAVE_RAW_DECL_SINHF _GL_WARN_ON_USE (sinhf, "sinhf is unportable - " "use gnulib module sinhf for portability"); # endif #endif #if @GNULIB_SQRTF@ # if @REPLACE_SQRTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sqrtf # define sqrtf rpl_sqrtf # endif _GL_FUNCDECL_RPL (sqrtf, float, (float x)); _GL_CXXALIAS_RPL (sqrtf, float, (float x)); # else # if !@HAVE_SQRTF@ # undef sqrtf _GL_FUNCDECL_SYS (sqrtf, float, (float x)); # endif _GL_CXXALIAS_SYS (sqrtf, float, (float x)); # endif _GL_CXXALIASWARN (sqrtf); #elif defined GNULIB_POSIXCHECK # undef sqrtf # if HAVE_RAW_DECL_SQRTF _GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - " "use gnulib module sqrtf for portability"); # endif #endif #if @GNULIB_SQRTL@ # if @REPLACE_SQRTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sqrtl # define sqrtl rpl_sqrtl # endif _GL_FUNCDECL_RPL (sqrtl, long double, (long double x)); _GL_CXXALIAS_RPL (sqrtl, long double, (long double x)); # else # if !@HAVE_SQRTL@ || !@HAVE_DECL_SQRTL@ # undef sqrtl _GL_FUNCDECL_SYS (sqrtl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (sqrtl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sqrtl); # endif #elif defined GNULIB_POSIXCHECK # undef sqrtl # if HAVE_RAW_DECL_SQRTL _GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - " "use gnulib module sqrtl for portability"); # endif #endif #if @GNULIB_TANF@ # if @REPLACE_TANF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tanf # define tanf rpl_tanf # endif _GL_FUNCDECL_RPL (tanf, float, (float x)); _GL_CXXALIAS_RPL (tanf, float, (float x)); # else # if !@HAVE_TANF@ # undef tanf _GL_FUNCDECL_SYS (tanf, float, (float x)); # endif _GL_CXXALIAS_SYS (tanf, float, (float x)); # endif _GL_CXXALIASWARN (tanf); #elif defined GNULIB_POSIXCHECK # undef tanf # if HAVE_RAW_DECL_TANF _GL_WARN_ON_USE (tanf, "tanf is unportable - " "use gnulib module tanf for portability"); # endif #endif #if @GNULIB_TANL@ # if !@HAVE_TANL@ || !@HAVE_DECL_TANL@ # undef tanl _GL_FUNCDECL_SYS (tanl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (tanl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (tanl); # endif #elif defined GNULIB_POSIXCHECK # undef tanl # if HAVE_RAW_DECL_TANL _GL_WARN_ON_USE (tanl, "tanl is unportable - " "use gnulib module tanl for portability"); # endif #endif #if @GNULIB_TANHF@ # if @REPLACE_TANHF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tanhf # define tanhf rpl_tanhf # endif _GL_FUNCDECL_RPL (tanhf, float, (float x)); _GL_CXXALIAS_RPL (tanhf, float, (float x)); # else # if !@HAVE_TANHF@ # undef tanhf _GL_FUNCDECL_SYS (tanhf, float, (float x)); # endif _GL_CXXALIAS_SYS (tanhf, float, (float x)); # endif _GL_CXXALIASWARN (tanhf); #elif defined GNULIB_POSIXCHECK # undef tanhf # if HAVE_RAW_DECL_TANHF _GL_WARN_ON_USE (tanhf, "tanhf is unportable - " "use gnulib module tanhf for portability"); # endif #endif #if @GNULIB_TRUNCF@ # if @REPLACE_TRUNCF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncf # define truncf rpl_truncf # endif _GL_FUNCDECL_RPL (truncf, float, (float x)); _GL_CXXALIAS_RPL (truncf, float, (float x)); # else # if !@HAVE_DECL_TRUNCF@ _GL_FUNCDECL_SYS (truncf, float, (float x)); # endif _GL_CXXALIAS_SYS (truncf, float, (float x)); # endif _GL_CXXALIASWARN (truncf); #elif defined GNULIB_POSIXCHECK # undef truncf # if HAVE_RAW_DECL_TRUNCF _GL_WARN_ON_USE (truncf, "truncf is unportable - " "use gnulib module truncf for portability"); # endif #endif #if @GNULIB_TRUNC@ # if @REPLACE_TRUNC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef trunc # define trunc rpl_trunc # endif _GL_FUNCDECL_RPL (trunc, double, (double x)); _GL_CXXALIAS_RPL (trunc, double, (double x)); # else # if !@HAVE_DECL_TRUNC@ _GL_FUNCDECL_SYS (trunc, double, (double x)); # endif _GL_CXXALIAS_SYS (trunc, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (trunc, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef trunc # if HAVE_RAW_DECL_TRUNC _GL_WARN_ON_USE (trunc, "trunc is unportable - " "use gnulib module trunc for portability"); # endif #endif #if @GNULIB_TRUNCL@ # if @REPLACE_TRUNCL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncl # define truncl rpl_truncl # endif _GL_FUNCDECL_RPL (truncl, long double, (long double x)); _GL_CXXALIAS_RPL (truncl, long double, (long double x)); # else # if !@HAVE_DECL_TRUNCL@ _GL_FUNCDECL_SYS (truncl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (truncl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (truncl); # endif #elif defined GNULIB_POSIXCHECK # undef truncl # if HAVE_RAW_DECL_TRUNCL _GL_WARN_ON_USE (truncl, "truncl is unportable - " "use gnulib module truncl for portability"); # endif #endif #if @GNULIB_MDA_Y0@ /* On native Windows, map 'y0' to '_y0', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::y0 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef y0 # define y0 _y0 # endif _GL_CXXALIAS_MDA (y0, double, (double x)); # else _GL_CXXALIAS_SYS (y0, double, (double x)); # endif _GL_CXXALIASWARN (y0); #endif #if @GNULIB_MDA_Y1@ /* On native Windows, map 'y1' to '_y1', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::y1 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef y1 # define y1 _y1 # endif _GL_CXXALIAS_MDA (y1, double, (double x)); # else _GL_CXXALIAS_SYS (y1, double, (double x)); # endif _GL_CXXALIASWARN (y1); #endif #if @GNULIB_MDA_YN@ /* On native Windows, map 'yn' to '_yn', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::yn always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef yn # define yn _yn # endif _GL_CXXALIAS_MDA (yn, double, (int n, double x)); # else _GL_CXXALIAS_SYS (yn, double, (int n, double x)); # endif _GL_CXXALIASWARN (yn); #endif /* Definitions of function-like macros come here, after the function declarations. */ #if @GNULIB_ISFINITE@ # if @REPLACE_ISFINITE@ _GL_EXTERN_C int gl_isfinitef (float x); _GL_EXTERN_C int gl_isfinited (double x); _GL_EXTERN_C int gl_isfinitel (long double x); # undef isfinite # define isfinite(x) \ (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \ sizeof (x) == sizeof (double) ? gl_isfinited (x) : \ gl_isfinitef (x)) # endif # ifdef __cplusplus # if defined isfinite || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite) # undef isfinite # if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined _AIX || (defined _WIN32 && !defined __CYGWIN__))) /* This platform's <cmath> possibly defines isfinite through a set of inline functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, rpl_isfinite, bool) # define isfinite rpl_isfinite # define GNULIB_NAMESPACE_LACKS_ISFINITE 1 # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, isfinite, bool) # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if defined isfinite _GL_WARN_REAL_FLOATING_DECL (isfinite); # undef isfinite # define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x) # endif #endif #if @GNULIB_ISINF@ # if @REPLACE_ISINF@ _GL_EXTERN_C int gl_isinff (float x); _GL_EXTERN_C int gl_isinfd (double x); _GL_EXTERN_C int gl_isinfl (long double x); # undef isinf # define isinf(x) \ (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \ sizeof (x) == sizeof (double) ? gl_isinfd (x) : \ gl_isinff (x)) # endif # ifdef __cplusplus # if defined isinf || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf) # undef isinf # if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || (defined _WIN32 && !defined __CYGWIN__))) /* This platform's <cmath> possibly defines isinf through a set of inline functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, rpl_isinf, bool) # define isinf rpl_isinf # define GNULIB_NAMESPACE_LACKS_ISINF 1 # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, isinf, bool) # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if defined isinf _GL_WARN_REAL_FLOATING_DECL (isinf); # undef isinf # define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x) # endif #endif #if @GNULIB_ISNANF@ /* Test for NaN for 'float' numbers. */ # if @HAVE_ISNANF@ # if defined __sun || defined __sgi /* Solaris and IRIX have isnanf() and declare it in <ieeefp.h>. We cannot define isnanf as a macro, because that would conflict with <ieeefp.h>. */ _GL_EXTERN_C int isnanf (float x); # else /* The original <math.h> included above provides a declaration of isnan macro or (older) isnanf function. */ # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. GCC >= 4.0 also provides __builtin_isnanf, but clang doesn't. */ # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) # elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) # endif # endif # else /* Test whether X is a NaN. */ # undef isnanf # define isnanf rpl_isnanf _GL_EXTERN_C int isnanf (float x); # endif #endif #if @GNULIB_ISNAND@ /* Test for NaN for 'double' numbers. This function is a gnulib extension, unlike isnan() which applied only to 'double' numbers earlier but now is a type-generic macro. */ # if @HAVE_ISNAND@ # if defined __sun || defined __sgi /* Solaris and IRIX have isnand() and declare it in <ieeefp.h>. We cannot define isnand as a macro, because that would conflict with <ieeefp.h>. */ _GL_EXTERN_C int isnand (double x); # else /* The original <math.h> included above provides a declaration of isnan macro. */ # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. */ # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) # else # undef isnand # define isnand(x) isnan ((double)(x)) # endif # endif # else /* Test whether X is a NaN. */ # undef isnand # define isnand rpl_isnand _GL_EXTERN_C int isnand (double x); # endif #endif #if @GNULIB_ISNANL@ /* Test for NaN for 'long double' numbers. */ # if @HAVE_ISNANL@ /* The original <math.h> included above provides a declaration of isnan macro or (older) isnanl function. */ # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. GCC >= 4.0 also provides __builtin_isnanl, but clang doesn't. */ # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) # elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) # endif # else /* Test whether X is a NaN. */ # undef isnanl # define isnanl rpl_isnanl _GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST; # endif #endif /* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL! */ #if @GNULIB_ISNAN@ # if @REPLACE_ISNAN@ /* We can't just use the isnanf macro (e.g.) as exposed by isnanf.h (e.g.) here, because those may end up being macros that recursively expand back to isnan. So use the gnulib replacements for them directly. */ # if @HAVE_ISNANF@ && (__GNUC__ >= 4) || (__clang_major__ >= 4) # define gl_isnan_f(x) __builtin_isnan ((float)(x)) # else _GL_EXTERN_C int rpl_isnanf (float x); # define gl_isnan_f(x) rpl_isnanf (x) # endif # if @HAVE_ISNAND@ && (__GNUC__ >= 4) || (__clang_major__ >= 4) # define gl_isnan_d(x) __builtin_isnan ((double)(x)) # else _GL_EXTERN_C int rpl_isnand (double x); # define gl_isnan_d(x) rpl_isnand (x) # endif # if @HAVE_ISNANL@ && (__GNUC__ >= 4) || (__clang_major__ >= 4) # define gl_isnan_l(x) __builtin_isnan ((long double)(x)) # else _GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; # define gl_isnan_l(x) rpl_isnanl (x) # endif # undef isnan # define isnan(x) \ (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \ sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \ gl_isnan_f (x)) # elif (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnan # define isnan(x) \ (sizeof (x) == sizeof (long double) ? __builtin_isnan ((long double)(x)) : \ sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \ __builtin_isnan ((float)(x))) # endif # ifdef __cplusplus # if defined isnan || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan) # undef isnan # if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__ && __clang_major__ != 12) || (defined __FreeBSD__ && (__clang_major__ < 7 || __clang_major__ >= 11)) || defined __OpenBSD__ || (defined _WIN32 && !defined __CYGWIN__))) /* This platform's <cmath> possibly defines isnan through a set of inline functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, rpl_isnan, bool) # define isnan rpl_isnan # define GNULIB_NAMESPACE_LACKS_ISNAN 1 # elif (defined __FreeBSD__ && __clang_major__ >= 14) /* Neither of the two possible _GL_MATH_CXX_REAL_FLOATING_DECL_2 invocations works. Inline functions are already present in /usr/include/c++/v1/math.h, which comes from LLVM. */ # define GNULIB_NAMESPACE_LACKS_ISNAN 1 # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, isnan, bool) # endif # endif # else /* Ensure isnan is a macro. */ # ifndef isnan # define isnan isnan # endif # endif #elif defined GNULIB_POSIXCHECK # if defined isnan _GL_WARN_REAL_FLOATING_DECL (isnan); # undef isnan # define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x) # endif #endif #if @GNULIB_SIGNBIT@ # if (@REPLACE_SIGNBIT_USING_BUILTINS@ \ && (!defined __cplusplus || __cplusplus < 201103)) # undef signbit /* GCC >= 4.0 and clang provide three built-ins for signbit. */ # define signbit(x) \ (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ __builtin_signbitf (x)) # endif # if @REPLACE_SIGNBIT@ && !GNULIB_defined_signbit # undef signbit _GL_EXTERN_C int gl_signbitf (float arg); _GL_EXTERN_C int gl_signbitd (double arg); _GL_EXTERN_C int gl_signbitl (long double arg); # if __GNUC__ >= 2 || defined __clang__ # define _GL_NUM_UINT_WORDS(type) \ ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) # if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf # define gl_signbitf_OPTIMIZED_MACRO # define gl_signbitf(arg) \ __extension__ \ ({ union { float _value; \ unsigned int _word[_GL_NUM_UINT_WORDS (float)]; \ } _m; \ _m._value = (arg); \ (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \ }) # endif # if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd # define gl_signbitd_OPTIMIZED_MACRO # define gl_signbitd(arg) \ __extension__ \ ({ union { double _value; \ unsigned int _word[_GL_NUM_UINT_WORDS (double)]; \ } _m; \ _m._value = (arg); \ (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \ }) # endif # if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl # define gl_signbitl_OPTIMIZED_MACRO # define gl_signbitl(arg) \ __extension__ \ ({ union { long double _value; \ unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \ } _m; \ _m._value = (arg); \ (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \ }) # endif # endif # define signbit(x) \ (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \ sizeof (x) == sizeof (double) ? gl_signbitd (x) : \ gl_signbitf (x)) # define GNULIB_defined_signbit 1 # endif # ifdef __cplusplus # if defined signbit || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit) # undef signbit # if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined _AIX || (defined _WIN32 && !defined __CYGWIN__))) /* This platform's <cmath> possibly defines signbit through a set of inline functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, rpl_signbit, bool) # define signbit rpl_signbit # define GNULIB_NAMESPACE_LACKS_SIGNBIT 1 # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, signbit, bool) # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if defined signbit _GL_WARN_REAL_FLOATING_DECL (signbit); # undef signbit # define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x) # endif #endif #if @GNULIB_TOTALORDERF@ # if @REPLACE_TOTALORDERF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef totalorderf # define totalorderf rpl_totalorderf # endif _GL_FUNCDECL_RPL (totalorderf, int, (float const *, float const *)); _GL_CXXALIAS_RPL (totalorderf, int, (float const *, float const *)); # else # if !@HAVE_TOTALORDERF@ _GL_FUNCDECL_SYS (totalorderf, int, (float const *, float const *)); # endif _GL_CXXALIAS_SYS (totalorderf, int, (float const *, float const *)); # endif _GL_CXXALIASWARN (totalorderf); #elif defined GNULIB_POSIXCHECK # undef totalorderf # if HAVE_RAW_DECL_TOTALORDERF _GL_WARN_ON_USE (totalorderf, "totalorderf is unportable - " "use gnulib module totalorderf for portability"); # endif #endif #if @GNULIB_TOTALORDER@ # if @REPLACE_TOTALORDER@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef totalorder # define totalorder rpl_totalorder # endif _GL_FUNCDECL_RPL (totalorder, int, (double const *, double const *)); _GL_CXXALIAS_RPL (totalorder, int, (double const *, double const *)); # else # if !@HAVE_TOTALORDER@ _GL_FUNCDECL_SYS (totalorder, int, (double const *, double const *)); # endif _GL_CXXALIAS_SYS (totalorder, int, (double const *, double const *)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (totalorder, int, (double const *, double const *)); # endif #elif defined GNULIB_POSIXCHECK # undef totalorder # if HAVE_RAW_DECL_TOTALORDER _GL_WARN_ON_USE (totalorder, "totalorder is unportable - " "use gnulib module totalorder for portability"); # endif #endif #if @GNULIB_TOTALORDERL@ # if @REPLACE_TOTALORDERL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef totalorderl # define totalorderl rpl_totalorderl # endif _GL_FUNCDECL_RPL (totalorderl, int, (long double const *, long double const *)); _GL_CXXALIAS_RPL (totalorderl, int, (long double const *, long double const *)); # else # if !@HAVE_TOTALORDERL@ _GL_FUNCDECL_SYS (totalorderl, int, (long double const *, long double const *)); # endif _GL_CXXALIAS_SYS (totalorderl, int, (long double const *, long double const *)); # endif _GL_CXXALIASWARN (totalorderl); #elif defined GNULIB_POSIXCHECK # undef totalorderl # if HAVE_RAW_DECL_TOTALORDERL _GL_WARN_ON_USE (totalorderl, "totalorderl is unportable - " "use gnulib module totalorderl for portability"); # endif #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_MATH_H */ #endif /* _GL_INCLUDING_MATH_H */ #endif /* _@GUARD_PREFIX@_MATH_H */ #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbchar.h�������������������������������������������������������������0000644�0001750�0001750�00000035425�14557510505�013661� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multibyte character data type. Copyright (C) 2001, 2005-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>. */ /* A multibyte character is a short subsequence of a char* string, representing a single 32-bit wide character. We use multibyte characters instead of 32-bit wide characters because of the following goals: 1) correct multibyte handling, i.e. operate according to the LC_CTYPE locale, 2) ease of maintenance, i.e. the maintainer needs not know all details of the ISO C 99 standard, 3) don't fail grossly if the input is not in the encoding set by the locale, because often different encodings are in use in the same countries (ISO-8859-1/UTF-8, EUC-JP/Shift_JIS, ...), 4) fast in the case of ASCII characters. Multibyte characters are only accessed through the mb* macros. mb_ptr (mbc) return a pointer to the beginning of the multibyte sequence. mb_len (mbc) returns the number of bytes occupied by the multibyte sequence. Always > 0. mb_iseq (mbc, sc) returns true if mbc is the standard ASCII character sc. mb_isnul (mbc) returns true if mbc is the nul character. mb_cmp (mbc1, mbc2) returns a positive, zero, or negative value depending on whether mbc1 sorts after, same or before mbc2. mb_casecmp (mbc1, mbc2) returns a positive, zero, or negative value depending on whether mbc1 sorts after, same or before mbc2, modulo upper/lowercase conversion. mb_equal (mbc1, mbc2) returns true if mbc1 and mbc2 are equal. mb_caseequal (mbc1, mbc2) returns true if mbc1 and mbc2 are equal modulo upper/lowercase conversion. mb_isalnum (mbc) returns true if mbc is alphanumeric. mb_isalpha (mbc) returns true if mbc is alphabetic. mb_isascii(mbc) returns true if mbc is plain ASCII. mb_isblank (mbc) returns true if mbc is a blank. mb_iscntrl (mbc) returns true if mbc is a control character. mb_isdigit (mbc) returns true if mbc is a decimal digit. mb_isgraph (mbc) returns true if mbc is a graphic character. mb_islower (mbc) returns true if mbc is lowercase. mb_isprint (mbc) returns true if mbc is a printable character. mb_ispunct (mbc) returns true if mbc is a punctuation character. mb_isspace (mbc) returns true if mbc is a space character. mb_isupper (mbc) returns true if mbc is uppercase. mb_isxdigit (mbc) returns true if mbc is a hexadecimal digit. mb_width (mbc) returns the number of columns on the output device occupied by mbc. Always >= 0. mb_putc (mbc, stream) outputs mbc on stream, a byte oriented FILE stream opened for output. mb_setascii (&mbc, sc) assigns the standard ASCII character sc to mbc. (Only available if the 'mbfile' module is in use.) mb_copy (&destmbc, &srcmbc) copies srcmbc to destmbc. Here are the function prototypes of the macros. extern const char * mb_ptr (const mbchar_t mbc); extern size_t mb_len (const mbchar_t mbc); extern bool mb_iseq (const mbchar_t mbc, char sc); extern bool mb_isnul (const mbchar_t mbc); extern int mb_cmp (const mbchar_t mbc1, const mbchar_t mbc2); extern int mb_casecmp (const mbchar_t mbc1, const mbchar_t mbc2); extern bool mb_equal (const mbchar_t mbc1, const mbchar_t mbc2); extern bool mb_caseequal (const mbchar_t mbc1, const mbchar_t mbc2); extern bool mb_isalnum (const mbchar_t mbc); extern bool mb_isalpha (const mbchar_t mbc); extern bool mb_isascii (const mbchar_t mbc); extern bool mb_isblank (const mbchar_t mbc); extern bool mb_iscntrl (const mbchar_t mbc); extern bool mb_isdigit (const mbchar_t mbc); extern bool mb_isgraph (const mbchar_t mbc); extern bool mb_islower (const mbchar_t mbc); extern bool mb_isprint (const mbchar_t mbc); extern bool mb_ispunct (const mbchar_t mbc); extern bool mb_isspace (const mbchar_t mbc); extern bool mb_isupper (const mbchar_t mbc); extern bool mb_isxdigit (const mbchar_t mbc); extern int mb_width (const mbchar_t mbc); extern void mb_putc (const mbchar_t mbc, FILE *stream); extern void mb_setascii (mbchar_t *new, char sc); extern void mb_copy (mbchar_t *new, const mbchar_t *old); */ #ifndef _MBCHAR_H #define _MBCHAR_H 1 /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <string.h> #include <uchar.h> _GL_INLINE_HEADER_BEGIN #ifndef MBCHAR_INLINE # define MBCHAR_INLINE _GL_INLINE #endif /* The longest multibyte characters, nowadays, are 4 bytes long. Regardless of the values of MB_CUR_MAX and MB_LEN_MAX. */ #define MBCHAR_BUF_SIZE 4 struct mbchar { const char *ptr; /* pointer to current character */ size_t bytes; /* number of bytes of current character, > 0 */ bool wc_valid; /* true if wc is a valid 32-bit wide character */ char32_t wc; /* if wc_valid: the current character */ #if defined GNULIB_MBFILE char buf[MBCHAR_BUF_SIZE]; /* room for the bytes, used for file input only */ #endif }; /* EOF (not a real character) is represented with bytes = 0 and wc_valid = false. */ typedef struct mbchar mbchar_t; /* Access the current character. */ #define mb_ptr(mbc) ((mbc).ptr) #define mb_len(mbc) ((mbc).bytes) /* Comparison of characters. */ #define mb_iseq(mbc, sc) ((mbc).wc_valid && (mbc).wc == (sc)) #define mb_isnul(mbc) ((mbc).wc_valid && (mbc).wc == 0) #define mb_cmp(mbc1, mbc2) \ ((mbc1).wc_valid \ ? ((mbc2).wc_valid \ ? _GL_CMP ((mbc1).wc, (mbc2).wc) \ : -1) \ : ((mbc2).wc_valid \ ? 1 \ : (mbc1).bytes == (mbc2).bytes \ ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ : (mbc1).bytes < (mbc2).bytes \ ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) #define mb_casecmp(mbc1, mbc2) \ ((mbc1).wc_valid \ ? ((mbc2).wc_valid \ ? _GL_CMP (c32tolower ((mbc1).wc), c32tolower ((mbc2).wc)) \ : -1) \ : ((mbc2).wc_valid \ ? 1 \ : (mbc1).bytes == (mbc2).bytes \ ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ : (mbc1).bytes < (mbc2).bytes \ ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) #define mb_equal(mbc1, mbc2) \ ((mbc1).wc_valid && (mbc2).wc_valid \ ? (mbc1).wc == (mbc2).wc \ : (mbc1).bytes == (mbc2).bytes \ && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) #define mb_caseequal(mbc1, mbc2) \ ((mbc1).wc_valid && (mbc2).wc_valid \ ? c32tolower ((mbc1).wc) == c32tolower ((mbc2).wc) \ : (mbc1).bytes == (mbc2).bytes \ && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) /* <ctype.h>, <wctype.h> classification. */ #define mb_isascii(mbc) \ ((mbc).wc_valid && (mbc).wc >= 0 && (mbc).wc <= 127) #define mb_isalnum(mbc) ((mbc).wc_valid && c32isalnum ((mbc).wc)) #define mb_isalpha(mbc) ((mbc).wc_valid && c32isalpha ((mbc).wc)) #define mb_isblank(mbc) ((mbc).wc_valid && c32isblank ((mbc).wc)) #define mb_iscntrl(mbc) ((mbc).wc_valid && c32iscntrl ((mbc).wc)) #define mb_isdigit(mbc) ((mbc).wc_valid && c32isdigit ((mbc).wc)) #define mb_isgraph(mbc) ((mbc).wc_valid && c32isgraph ((mbc).wc)) #define mb_islower(mbc) ((mbc).wc_valid && c32islower ((mbc).wc)) #define mb_isprint(mbc) ((mbc).wc_valid && c32isprint ((mbc).wc)) #define mb_ispunct(mbc) ((mbc).wc_valid && c32ispunct ((mbc).wc)) #define mb_isspace(mbc) ((mbc).wc_valid && c32isspace ((mbc).wc)) #define mb_isupper(mbc) ((mbc).wc_valid && c32isupper ((mbc).wc)) #define mb_isxdigit(mbc) ((mbc).wc_valid && c32isxdigit ((mbc).wc)) /* Extra <wchar.h> function. */ /* Unprintable characters appear as a small box of width 1. */ #define MB_UNPRINTABLE_WIDTH 1 MBCHAR_INLINE int mb_width_aux (char32_t wc) { int w = c32width (wc); /* For unprintable characters, arbitrarily return 0 for control characters and MB_UNPRINTABLE_WIDTH otherwise. */ return (w >= 0 ? w : c32iscntrl (wc) ? 0 : MB_UNPRINTABLE_WIDTH); } #define mb_width(mbc) \ ((mbc).wc_valid ? mb_width_aux ((mbc).wc) : MB_UNPRINTABLE_WIDTH) /* Output. */ #define mb_putc(mbc, stream) fwrite ((mbc).ptr, 1, (mbc).bytes, (stream)) #if defined GNULIB_MBFILE /* Assignment. */ # define mb_setascii(mbc, sc) \ ((mbc)->ptr = (mbc)->buf, (mbc)->bytes = 1, (mbc)->wc_valid = 1, \ (mbc)->wc = (mbc)->buf[0] = (sc)) #endif /* Copying a character. */ MBCHAR_INLINE void mb_copy (mbchar_t *new_mbc, const mbchar_t *old_mbc) { #if defined GNULIB_MBFILE if (old_mbc->ptr == &old_mbc->buf[0]) { memcpy (&new_mbc->buf[0], &old_mbc->buf[0], old_mbc->bytes); new_mbc->ptr = &new_mbc->buf[0]; } else #endif new_mbc->ptr = old_mbc->ptr; new_mbc->bytes = old_mbc->bytes; if ((new_mbc->wc_valid = old_mbc->wc_valid)) new_mbc->wc = old_mbc->wc; } /* is_basic(c) tests whether the single-byte character c is - in the ISO C "basic character set" or is one of '@', '$', and '`' which ISO C 23 § 5.2.1.1.(1) guarantees to be single-byte and in practice are safe to treat as basic in the execution character set, or - in the POSIX "portable character set", which <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap06.html> equally guarantees to be single-byte. This is a convenience function, and is in this file only to share code between mbiter.h, mbuiter.h, and mbfile.h. */ #if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('$' == 36) && ('%' == 37) && ('&' == 38) && ('\'' == 39) \ && ('(' == 40) && (')' == 41) && ('*' == 42) && ('+' == 43) \ && (',' == 44) && ('-' == 45) && ('.' == 46) && ('/' == 47) \ && ('0' == 48) && ('1' == 49) && ('2' == 50) && ('3' == 51) \ && ('4' == 52) && ('5' == 53) && ('6' == 54) && ('7' == 55) \ && ('8' == 56) && ('9' == 57) && (':' == 58) && (';' == 59) \ && ('<' == 60) && ('=' == 61) && ('>' == 62) && ('?' == 63) \ && ('@' == 64) && ('A' == 65) && ('B' == 66) && ('C' == 67) \ && ('D' == 68) && ('E' == 69) && ('F' == 70) && ('G' == 71) \ && ('H' == 72) && ('I' == 73) && ('J' == 74) && ('K' == 75) \ && ('L' == 76) && ('M' == 77) && ('N' == 78) && ('O' == 79) \ && ('P' == 80) && ('Q' == 81) && ('R' == 82) && ('S' == 83) \ && ('T' == 84) && ('U' == 85) && ('V' == 86) && ('W' == 87) \ && ('X' == 88) && ('Y' == 89) && ('Z' == 90) && ('[' == 91) \ && ('\\' == 92) && (']' == 93) && ('^' == 94) && ('_' == 95) \ && ('`' == 96) && ('a' == 97) && ('b' == 98) && ('c' == 99) \ && ('d' == 100) && ('e' == 101) && ('f' == 102) && ('g' == 103) \ && ('h' == 104) && ('i' == 105) && ('j' == 106) && ('k' == 107) \ && ('l' == 108) && ('m' == 109) && ('n' == 110) && ('o' == 111) \ && ('p' == 112) && ('q' == 113) && ('r' == 114) && ('s' == 115) \ && ('t' == 116) && ('u' == 117) && ('v' == 118) && ('w' == 119) \ && ('x' == 120) && ('y' == 121) && ('z' == 122) && ('{' == 123) \ && ('|' == 124) && ('}' == 125) && ('~' == 126) /* The character set is ISO-646, not EBCDIC. */ # define IS_BASIC_ASCII 1 /* All locale encodings (see localcharset.h) map the characters 0x00..0x7F to U+0000..U+007F, like ASCII, except for CP864 different mapping of '%' SHIFT_JIS different mappings of 0x5C, 0x7E JOHAB different mapping of 0x5C However, these characters in the range 0x20..0x7E are in the ISO C "basic character set" and in the POSIX "portable character set", which ISO C and POSIX guarantee to be single-byte. Thus, locales with these encodings are not POSIX compliant. And they are most likely not in use any more (as of 2023). */ # define is_basic(c) ((unsigned char) (c) < 0x80) #else MBCHAR_INLINE bool is_basic (char c) { switch (c) { case '\0': case '\007': case '\010': case '\t': case '\n': case '\v': case '\f': case '\r': case ' ': case '!': case '"': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case '`': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': return 1; default: return 0; } } #endif _GL_INLINE_HEADER_END #endif /* _MBCHAR_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/lc-charset-dispatch.h������������������������������������������������0000644�0001750�0001750�00000002572�14557510505�016244� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dispatching based on the current locale's character encoding. Copyright (C) 2018-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2018. */ #include <wchar.h> #if GNULIB_defined_mbstate_t /* A classification of special values of the encoding of the current locale. */ typedef enum { enc_other, /* other */ enc_utf8, /* UTF-8 */ enc_eucjp, /* EUC-JP */ enc_94, /* EUC-KR, GB2312, BIG5 */ enc_euctw, /* EUC-TW */ enc_gb18030, /* GB18030 */ enc_sjis /* SJIS */ } enc_t; /* Returns a classification of special values of the encoding of the current locale. */ extern enc_t locale_encoding_classification (void); #endif ��������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbrtowc-impl-utf8.h��������������������������������������������������0000644�0001750�0001750�00000012255�14557510505�015721� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ /* This file contains the part of the body of the mbrtowc and mbrtoc32 functions that handles the special case of the UTF-8 encoding. */ /* Cf. unistr/u8-mbtouc.c. */ unsigned char c = (unsigned char) p[0]; if (c < 0x80) { if (pwc != NULL) *pwc = c; res = (c == 0 ? 0 : 1); goto success; } if (c >= 0xc2) { if (c < 0xe0) { if (m == 1) goto incomplete; else /* m >= 2 */ { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40) { if (pwc != NULL) *pwc = ((unsigned int) (c & 0x1f) << 6) | (unsigned int) (c2 ^ 0x80); res = 2; goto success; } } } else if (c < 0xf0) { if (m == 1) goto incomplete; else { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40 && (c >= 0xe1 || c2 >= 0xa0) && (c != 0xed || c2 < 0xa0)) { if (m == 2) goto incomplete; else /* m >= 3 */ { unsigned char c3 = (unsigned char) p[2]; if ((c3 ^ 0x80) < 0x40) { unsigned int wc = (((unsigned int) (c & 0x0f) << 12) | ((unsigned int) (c2 ^ 0x80) << 6) | (unsigned int) (c3 ^ 0x80)); if (FITS_IN_CHAR_TYPE (wc)) { if (pwc != NULL) *pwc = wc; res = 3; goto success; } } } } } } else if (c <= 0xf4) { if (m == 1) goto incomplete; else { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40 && (c >= 0xf1 || c2 >= 0x90) && (c < 0xf4 || (/* c == 0xf4 && */ c2 < 0x90))) { if (m == 2) goto incomplete; else { unsigned char c3 = (unsigned char) p[2]; if ((c3 ^ 0x80) < 0x40) { if (m == 3) goto incomplete; else /* m >= 4 */ { unsigned char c4 = (unsigned char) p[3]; if ((c4 ^ 0x80) < 0x40) { unsigned int wc = (((unsigned int) (c & 0x07) << 18) | ((unsigned int) (c2 ^ 0x80) << 12) | ((unsigned int) (c3 ^ 0x80) << 6) | (unsigned int) (c4 ^ 0x80)); if (FITS_IN_CHAR_TYPE (wc)) { if (pwc != NULL) *pwc = wc; res = 4; goto success; } } } } } } } } } goto invalid; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbrtowc-impl.h�������������������������������������������������������0000644�0001750�0001750�00000016240�14557510505�015033� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ /* This file contains the body of the mbrtowc and mbrtoc32 functions, when GNULIB_defined_mbstate_t is defined. */ char *pstate = (char *)ps; if (s == NULL) { pwc = NULL; s = ""; n = 1; } if (n == 0) return (size_t)(-2); /* Here n > 0. */ if (pstate == NULL) pstate = internal_state; { size_t nstate = pstate[0]; char buf[4]; const char *p; size_t m; enc_t enc; int res; switch (nstate) { case 0: p = s; m = n; break; case 3: buf[2] = pstate[3]; FALLTHROUGH; case 2: buf[1] = pstate[2]; FALLTHROUGH; case 1: buf[0] = pstate[1]; p = buf; m = nstate; buf[m++] = s[0]; if (n >= 2 && m < 4) { buf[m++] = s[1]; if (n >= 3 && m < 4) buf[m++] = s[2]; } break; default: errno = EINVAL; return (size_t)(-1); } /* Here m > 0. */ enc = locale_encoding_classification (); if (enc == enc_utf8) /* UTF-8 */ { /* Achieve - multi-thread safety and - the ability to produce wide character values > WCHAR_MAX by not calling mbtowc() at all. */ #include "mbrtowc-impl-utf8.h" } else { /* The hidden internal state of mbtowc would make this function not multi-thread safe. Achieve multi-thread safety through a lock. */ wchar_t wc; res = mbtowc_with_lock (&wc, p, m); if (res >= 0) { if ((wc == 0) != (res == 0)) abort (); if (pwc != NULL) *pwc = wc; goto success; } /* mbtowc does not distinguish between invalid and incomplete multibyte sequences. But mbrtowc needs to make this distinction. There are two possible approaches: - Use iconv() and its return value. - Use built-in knowledge about the possible encodings. Given the low quality of implementation of iconv() on the systems that lack mbrtowc(), we use the second approach. The possible encodings are: - 8-bit encodings, - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS, - UTF-8 (already handled above). Use specialized code for each. */ if (m >= 4 || m >= MB_CUR_MAX) goto invalid; /* Here MB_CUR_MAX > 1 and 0 < m < 4. */ switch (enc) { /* As a reference for this code, you can use the GNU libiconv implementation. Look for uses of the RET_TOOFEW macro. */ case enc_eucjp: /* EUC-JP */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f) goto incomplete; } if (m == 2) { unsigned char c = (unsigned char) p[0]; if (c == 0x8f) { unsigned char c2 = (unsigned char) p[1]; if (c2 >= 0xa1 && c2 < 0xff) goto incomplete; } } goto invalid; } case enc_94: /* EUC-KR, GB2312, BIG5 */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if (c >= 0xa1 && c < 0xff) goto incomplete; } goto invalid; } case enc_euctw: /* EUC-TW */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0xa1 && c < 0xff) || c == 0x8e) goto incomplete; } else /* m == 2 || m == 3 */ { unsigned char c = (unsigned char) p[0]; if (c == 0x8e) goto incomplete; } goto invalid; } case enc_gb18030: /* GB18030 */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe)) goto incomplete; } else /* m == 2 || m == 3 */ { unsigned char c = (unsigned char) p[0]; if (c >= 0x90 && c <= 0xe3) { unsigned char c2 = (unsigned char) p[1]; if (c2 >= 0x30 && c2 <= 0x39) { if (m == 2) goto incomplete; else /* m == 3 */ { unsigned char c3 = (unsigned char) p[2]; if (c3 >= 0x81 && c3 <= 0xfe) goto incomplete; } } } } goto invalid; } case enc_sjis: /* SJIS */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea) || (c >= 0xf0 && c <= 0xf9)) goto incomplete; } goto invalid; } default: /* An unknown multibyte encoding. */ goto incomplete; } } success: /* res >= 0 is the corrected return value of mbtowc_with_lock (&wc, p, m). */ if (nstate >= (res > 0 ? res : 1)) abort (); res -= nstate; pstate[0] = 0; return res; incomplete: { size_t k = nstate; /* Here 0 <= k < m < 4. */ pstate[++k] = s[0]; if (k < m) { pstate[++k] = s[1]; if (k < m) pstate[++k] = s[2]; } if (k != m) abort (); } pstate[0] = m; return (size_t)(-2); invalid: errno = EILSEQ; /* The conversion state is undefined, says POSIX. */ return (size_t)(-1); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbtowc-lock.h��������������������������������������������������������0000644�0001750�0001750�00000006330�14557510505�014637� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Use the internal lock used by mbrtowc and mbrtoc32. Copyright (C) 2019-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */ /* Use a lock, so that no two threads can invoke mbtowc at the same time. */ static inline int mbtowc_unlocked (wchar_t *pwc, const char *p, size_t m) { /* Put the hidden internal state of mbtowc into an initial state. This is needed at least with glibc, uClibc, and MSVC CRT. See <https://sourceware.org/bugzilla/show_bug.cgi?id=9674>. */ mbtowc (NULL, NULL, 0); return mbtowc (pwc, p, m); } /* Prohibit renaming this symbol. */ #undef gl_get_mbtowc_lock #if AVOID_ANY_THREADS || GNULIB_MBRTOWC_SINGLE_THREAD /* All uses of this function are in a single thread. No locking needed. */ static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { return mbtowc_unlocked (pwc, p, m); } #elif defined _WIN32 && !defined __CYGWIN__ extern __declspec(dllimport) CRITICAL_SECTION *gl_get_mbtowc_lock (void); static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { CRITICAL_SECTION *lock = gl_get_mbtowc_lock (); int ret; EnterCriticalSection (lock); ret = mbtowc_unlocked (pwc, p, m); LeaveCriticalSection (lock); return ret; } #elif HAVE_PTHREAD_API /* AIX, IRIX, Cygwin */ extern # if defined _WIN32 || defined __CYGWIN__ __declspec(dllimport) # endif pthread_mutex_t *gl_get_mbtowc_lock (void); # if HAVE_WEAK_SYMBOLS /* IRIX */ /* Avoid the need to link with '-lpthread'. */ # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock /* Determine whether libpthread is in use. */ # pragma weak pthread_mutexattr_gettype /* See the comments in lock.h. */ # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # else # define pthread_in_use() 1 # endif static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { if (pthread_in_use()) { pthread_mutex_t *lock = gl_get_mbtowc_lock (); int ret; if (pthread_mutex_lock (lock)) abort (); ret = mbtowc_unlocked (pwc, p, m); if (pthread_mutex_unlock (lock)) abort (); return ret; } else return mbtowc_unlocked (pwc, p, m); } #elif HAVE_THREADS_H extern mtx_t *gl_get_mbtowc_lock (void); static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { mtx_t *lock = gl_get_mbtowc_lock (); int ret; if (mtx_lock (lock) != thrd_success) abort (); ret = mbtowc_unlocked (pwc, p, m); if (mtx_unlock (lock) != thrd_success) abort (); return ret; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/windows-initguard.h��������������������������������������������������0000644�0001750�0001750�00000002316�14557510505�016074� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Init guards, somewhat like spinlocks (native Windows implementation). Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_INITGUARD_H #define _WINDOWS_INITGUARD_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> typedef struct { volatile int done; volatile LONG started; } glwthread_initguard_t; #define GLWTHREAD_INITGUARD_INIT { 0, -1 } #endif /* _WINDOWS_INITGUARD_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mbtowc-impl.h��������������������������������������������������������0000644�0001750�0001750�00000002622�14557510505�014650� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* We don't need a static internal state, because the encoding is not state dependent, and when mbrtowc returns (size_t)(-2). we throw the result away. */ int mbtowc (wchar_t *pwc, const char *s, size_t n) { if (s == NULL) return 0; else { mbstate_t state; wchar_t wc; size_t result; mbszero (&state); result = mbrtowc (&wc, s, n, &state); if (result == (size_t)-1 || result == (size_t)-2) { errno = EILSEQ; return -1; } if (pwc != NULL) *pwc = wc; return (wc == 0 ? 0 : result); } } ��������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/memchr.valgrind������������������������������������������������������0000644�0001750�0001750�00000002163�14557510505�015250� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in memchr(). # Copyright (C) 2009-2024 Free Software Foundation, Inc. # # This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. # POSIX states that when the character is found, memchr must not read extra # bytes in an overestimated length (for example, where memchr is used to # implement strnlen). However, we use a safe word read to provide a speedup. { memchr-value4 Memcheck:Value4 fun:rpl_memchr } { memchr-value8 Memcheck:Value8 fun:rpl_memchr } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/mktime-internal.h����������������������������������������������������0000644�0001750�0001750�00000006061�14557510505�015517� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internals of mktime and related functions Copyright 2016-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Eggert <eggert@cs.ucla.edu>. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <time.h> #endif /* mktime_offset_t is a signed type wide enough to hold a UTC offset in seconds, and used as part of the type of the offset-guess argument to mktime_internal. In Glibc, it is always long int. When in Gnulib, use time_t on platforms where time_t is signed, to be compatible with platforms like BeOS that export this implementation detail of mktime. On platforms where time_t is unsigned, GNU and POSIX code can assume 'int' is at least 32 bits which is wide enough for a UTC offset. */ #ifdef _LIBC typedef long int mktime_offset_t; #elif defined TIME_T_IS_SIGNED typedef time_t mktime_offset_t; #else typedef int mktime_offset_t; #endif /* The source code uses identifiers like __time64_t for glibc timestamps that can contain 64-bit values even when time_t is only 32 bits. These are just macros for the ordinary identifiers unless compiling within glibc when time_t is 32 bits. */ #if ! (defined _LIBC && __TIMESIZE != 64) # undef __time64_t # define __time64_t time_t # define __gmtime64_r __gmtime_r # define __localtime64_r __localtime_r # define __mktime64 mktime # define __timegm64 timegm #endif #ifndef _LIBC /* Although glibc source code uses leading underscores, Gnulib wants ordinary names. Portable standalone applications should supply a <time.h> that declares a POSIX-compliant localtime_r, for the benefit of older implementations that lack localtime_r or have a nonstandard one. Similarly for gmtime_r. See the gnulib time_r module for one way to implement this. */ # undef __gmtime_r # undef __localtime_r # define __gmtime_r gmtime_r # define __localtime_r localtime_r # define __mktime_internal mktime_internal #endif /* Subroutine of mktime. Return the time_t representation of TP and normalize TP, given that a struct tm * maps to a time_t as performed by FUNC. Record next guess for localtime-gmtime offset in *OFFSET. */ extern __time64_t __mktime_internal (struct tm *tp, struct tm *(*func) (__time64_t const *, struct tm *), mktime_offset_t *offset) attribute_hidden; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/msvc-inval.h���������������������������������������������������������0000644�0001750�0001750�00000021435�14557510505�014500� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _MSVC_INVAL_H #define _MSVC_INVAL_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines macros that turn such an invalid parameter notification into a non-local exit. An error code can then be produced at the target of this exit. You can thus write code like TRY_MSVC_INVAL { <Code that can trigger an invalid parameter notification but does not do 'return', 'break', 'continue', nor 'goto'.> } CATCH_MSVC_INVAL { <Code that handles an invalid parameter notification but does not do 'return', 'break', 'continue', nor 'goto'.> } DONE_MSVC_INVAL; This entire block expands to a single statement. The handling of invalid parameters can be done in three ways: * The default way, which is reasonable for programs (not libraries): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) * The way for libraries that make "hairy" calls (like close(-1), or fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) * The way for libraries that make no "hairy" calls: AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) */ /* This file uses HAVE_MSVC_INVALID_PARAMETER_HANDLER. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #define DEFAULT_HANDLING 0 #define HAIRY_LIBRARY_HANDLING 1 #define SANE_LIBRARY_HANDLING 2 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* A native Windows platform with the "invalid parameter handler" concept, and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING /* Default handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that just returns. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) # else /* Handling for hairy libraries. */ # include <excpt.h> /* Gnulib can define its own status codes, as described in the page "Raising Software Exceptions" on microsoft.com <https://docs.microsoft.com/en-us/cpp/cpp/raising-software-exceptions>. Our status codes are composed of - 0xE0000000, mandatory for all user-defined status codes, - 0x474E550, a API identifier ("GNU"), - 0, 1, 2, ..., used to distinguish different status codes from the same API. */ # define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) # if defined _MSC_VER /* A compiler that supports __try/__except, as described in the page "try-except statement" on microsoft.com <https://docs.microsoft.com/en-us/cpp/cpp/try-except-statement>. With __try/__except, we can use the multithread-safe exception handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ __try # define CATCH_MSVC_INVAL \ __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ ? EXCEPTION_EXECUTE_HANDLER \ : EXCEPTION_CONTINUE_SEARCH) # define DONE_MSVC_INVAL \ } \ while (0) # else /* Any compiler. We can only use setjmp/longjmp. */ # include <setjmp.h> # ifdef __cplusplus extern "C" { # endif struct gl_msvc_inval_per_thread { /* The restart that will resume execution at the code between CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ jmp_buf restart; /* Tells whether the contents of restart is valid. */ int restart_valid; }; /* Ensure that the invalid parameter handler in installed that passes control to the gl_msvc_inval_restart if it is valid, or raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); /* Return a pointer to the per-thread data for the current thread. */ extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ struct gl_msvc_inval_per_thread *msvc_inval_current; \ gl_msvc_inval_ensure_handler (); \ msvc_inval_current = gl_msvc_inval_current (); \ /* First, initialize gl_msvc_inval_restart. */ \ if (setjmp (msvc_inval_current->restart) == 0) \ { \ /* Then, mark it as valid. */ \ msvc_inval_current->restart_valid = 1; # define CATCH_MSVC_INVAL \ /* Execution completed. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; \ } \ else \ { \ /* Execution triggered an invalid parameter notification. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; # define DONE_MSVC_INVAL \ } \ } \ while (0) # endif # endif #else /* A platform that does not need to the invalid parameter handler, or when SANE_LIBRARY_HANDLING is desired. */ /* The braces here avoid GCC warnings like "warning: suggest explicit braces to avoid ambiguous 'else'". */ # define TRY_MSVC_INVAL \ do \ { \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) #endif #endif /* _MSVC_INVAL_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/msvc-nothrow.h�������������������������������������������������������0000644�0001750�0001750�00000003232�14557510505�015062� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _MSVC_NOTHROW_H #define _MSVC_NOTHROW_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines wrappers that turn such an invalid parameter notification into an error code. */ /* This file uses HAVE_MSVC_INVALID_PARAMETER_HANDLER. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Get original declaration of _get_osfhandle. */ # include <io.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Override _get_osfhandle. */ extern intptr_t _gl_nothrow_get_osfhandle (int fd); # define _get_osfhandle _gl_nothrow_get_osfhandle # endif #endif #endif /* _MSVC_NOTHROW_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/nproc.h��������������������������������������������������������������0000644�0001750�0001750�00000003353�14557510505�013541� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Detect the number of processors. Copyright (C) 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Glen Lenker and Bruno Haible. */ /* Allow the use in C++ code. */ #ifdef __cplusplus extern "C" { #endif /* A "processor" in this context means a thread execution unit, that is either - an execution core in a (possibly multi-core) chip, in a (possibly multi- chip) module, in a single computer, or - a thread execution unit inside a core (hyper-threading, see <https://en.wikipedia.org/wiki/Hyper-threading>). Which of the two definitions is used, is unspecified. */ enum nproc_query { NPROC_ALL, /* total number of processors */ NPROC_CURRENT, /* processors available to the current process */ NPROC_CURRENT_OVERRIDABLE /* likewise, but overridable through the OMP_NUM_THREADS environment variable */ }; /* Return the total number of processors. The result is guaranteed to be at least 1. */ extern unsigned long int num_processors (enum nproc_query query); #ifdef __cplusplus } #endif /* C++ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/openat.h�������������������������������������������������������������0000644�0001750�0001750�00000006163�14557510505�013710� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a replacement openat function Copyright (C) 2004-2006, 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #ifndef _GL_HEADER_OPENAT #define _GL_HEADER_OPENAT /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _Noreturn, _GL_ATTRIBUTE_DEPRECATED, HAVE_OPENAT. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> _GL_INLINE_HEADER_BEGIN #if !HAVE_OPENAT int openat_permissive (int fd, char const *file, int flags, mode_t mode, int *cwd_errno); bool openat_needs_fchdir (void); #else # define openat_permissive(Fd, File, Flags, Mode, Cwd_errno) \ openat (Fd, File, Flags, Mode) # define openat_needs_fchdir() false #endif _Noreturn void openat_restore_fail (int); _Noreturn void openat_save_fail (int); /* Using these function names makes application code slightly more readable than it would be with fchownat (..., 0) or fchownat (..., AT_SYMLINK_NOFOLLOW). */ #if GNULIB_CHOWNAT # ifndef CHOWNAT_INLINE # define CHOWNAT_INLINE _GL_INLINE # endif CHOWNAT_INLINE int chownat (int fd, char const *file, uid_t owner, gid_t group) { return fchownat (fd, file, owner, group, 0); } CHOWNAT_INLINE int lchownat (int fd, char const *file, uid_t owner, gid_t group) { return fchownat (fd, file, owner, group, AT_SYMLINK_NOFOLLOW); } #endif #if GNULIB_CHMODAT # ifndef CHMODAT_INLINE # define CHMODAT_INLINE _GL_INLINE # endif CHMODAT_INLINE int chmodat (int fd, char const *file, mode_t mode) { return fchmodat (fd, file, mode, 0); } CHMODAT_INLINE int lchmodat (int fd, char const *file, mode_t mode) { return fchmodat (fd, file, mode, AT_SYMLINK_NOFOLLOW); } #endif #if GNULIB_STATAT # ifndef STATAT_INLINE # define STATAT_INLINE _GL_INLINE # endif _GL_ATTRIBUTE_DEPRECATED STATAT_INLINE int statat (int fd, char const *name, struct stat *st) { return fstatat (fd, name, st, 0); } _GL_ATTRIBUTE_DEPRECATED STATAT_INLINE int lstatat (int fd, char const *name, struct stat *st) { return fstatat (fd, name, st, AT_SYMLINK_NOFOLLOW); } #endif /* For now, there are no wrappers named laccessat or leuidaccessat, since gnulib doesn't support faccessat(,AT_SYMLINK_NOFOLLOW) and since access rights on symlinks are of limited utility. Likewise, wrappers are not provided for accessat or euidaccessat, so as to avoid dragging in -lgen on some platforms. */ _GL_INLINE_HEADER_END #endif /* _GL_HEADER_OPENAT */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/pathmax.h������������������������������������������������������������0000644�0001750�0001750�00000006017�14557510505�014062� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Define PATH_MAX somehow. Requires sys/types.h. Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _PATHMAX_H # define _PATHMAX_H /* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename, including the terminating NUL byte. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html> PATH_MAX is not defined on systems which have no limit on filename length, such as GNU/Hurd. This file does *not* define PATH_MAX always. Programs that use this file can handle the GNU/Hurd case in several ways: - Either with a package-wide handling, or with a per-file handling, - Either through a #ifdef PATH_MAX or through a fallback like #ifndef PATH_MAX # define PATH_MAX 8192 #endif or through a fallback like #ifndef PATH_MAX # define PATH_MAX pathconf ("/", _PC_PATH_MAX) #endif */ /* This file uses HAVE_SYS_PARAM_H. */ # if !_GL_CONFIG_H_INCLUDED # error "Please include config.h first." # endif # include <unistd.h> # include <limits.h> # ifndef _POSIX_PATH_MAX # define _POSIX_PATH_MAX 256 # endif /* Don't include sys/param.h if it already has been. */ # if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include <sys/param.h> # endif # if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN # endif # ifdef __hpux /* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename, *not* including the terminating NUL byte, and is set to 1023. Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is not defined at all any more. */ # undef PATH_MAX # define PATH_MAX 1024 # endif # if defined _WIN32 && ! defined __CYGWIN__ /* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com, section "Maximum Path Length Limitation", <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation> explains that the maximum size of a filename, including the terminating NUL byte, is 260 = 3 + 256 + 1. This is the same value as - FILENAME_MAX in <stdio.h>, - _MAX_PATH in <stdlib.h>, - MAX_PATH in <windef.h>. Undefine the original value, because mingw's <limits.h> gets it wrong. */ # undef PATH_MAX # define PATH_MAX 260 # endif #endif /* _PATHMAX_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/rawmemchr.valgrind���������������������������������������������������0000644�0001750�0001750�00000001714�14557510505�015763� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in rawmemchr(). # Copyright (C) 2008-2024 Free Software Foundation, Inc. # # This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. # This use is OK because it provides only a speedup. { rawmemchr-value4 Memcheck:Value4 fun:rawmemchr } { rawmemchr-value8 Memcheck:Value8 fun:rawmemchr } ����������������������������������������������������gnuastro-0.22/bootstrapped/lib/regex.h��������������������������������������������������������������0000644�0001750�0001750�00000062460�14557510505�013536� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Definitions for data structures and routines for the regular expression library. Copyright (C) 1985, 1989-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _REGEX_H #define _REGEX_H 1 #include <sys/types.h> /* Allow the use in C++ code. */ #ifdef __cplusplus extern "C" { #endif /* Define __USE_GNU to declare GNU extensions that violate the POSIX name space rules. */ #ifdef _GNU_SOURCE # define __USE_GNU 1 #endif #ifdef _REGEX_LARGE_OFFSETS /* Use types and values that are wide enough to represent signed and unsigned byte offsets in memory. This currently works only when the regex code is used outside of the GNU C library; it is not yet supported within glibc itself, and glibc users should not define _REGEX_LARGE_OFFSETS. */ /* The type of object sizes. */ typedef size_t __re_size_t; /* The type of object sizes, in places where the traditional code uses unsigned long int. */ typedef size_t __re_long_size_t; #else /* The traditional GNU regex implementation mishandles strings longer than INT_MAX. */ typedef unsigned int __re_size_t; typedef unsigned long int __re_long_size_t; #endif /* The following two types have to be signed and unsigned integer type wide enough to hold a value of a pointer. For most ANSI compilers ptrdiff_t and size_t should be likely OK. Still size of these two types is 2 for Microsoft C. Ugh... */ typedef long int s_reg_t; typedef unsigned long int active_reg_t; /* The following bits are used to determine the regexp syntax we recognize. The set/not-set meanings are chosen so that Emacs syntax remains the value 0. The bits are given in alphabetical order, and the definitions shifted by one from the previous bit; thus, when we add or remove a bit, only one other definition need change. */ typedef unsigned long int reg_syntax_t; #ifdef __USE_GNU /* If this bit is not set, then \ inside a bracket expression is literal. If set, then such a \ quotes the following character. */ # define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) /* If this bit is not set, then + and ? are operators, and \+ and \? are literals. If set, then \+ and \? are operators and + and ? are literals. */ # define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) /* If this bit is set, then character classes are supported. They are: [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. If not set, then character classes are not supported. */ # define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) /* If this bit is set, then ^ and $ are always anchors (outside bracket expressions, of course). If this bit is not set, then it depends: ^ is an anchor if it is at the beginning of a regular expression or after an open-group or an alternation operator; $ is an anchor if it is at the end of a regular expression, or before a close-group or an alternation operator. This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because POSIX draft 11.2 says that * etc. in leading positions is undefined. We already implemented a previous draft which made those constructs invalid, though, so we haven't changed the code back. */ # define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) /* If this bit is set, then special characters are always special regardless of where they are in the pattern. If this bit is not set, then special characters are special only in some contexts; otherwise they are ordinary. Specifically, * + ? and intervals are only special when not after the beginning, open-group, or alternation operator. */ # define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) /* If this bit is set, then *, +, ?, and { cannot be first in an re or immediately after an alternation or begin-group operator. */ # define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) /* If this bit is set, then . matches newline. If not set, then it doesn't. */ # define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) /* If this bit is set, then . doesn't match NUL. If not set, then it does. */ # define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) /* If this bit is set, nonmatching lists [^...] do not match newline. If not set, they do. */ # define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) /* If this bit is set, either \{...\} or {...} defines an interval, depending on RE_NO_BK_BRACES. If not set, \{, \}, {, and } are literals. */ # define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) /* If this bit is set, +, ? and | aren't recognized as operators. If not set, they are. */ # define RE_LIMITED_OPS (RE_INTERVALS << 1) /* If this bit is set, newline is an alternation operator. If not set, newline is literal. */ # define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) /* If this bit is set, then '{...}' defines an interval, and \{ and \} are literals. If not set, then '\{...\}' defines an interval. */ # define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) /* If this bit is set, (...) defines a group, and \( and \) are literals. If not set, \(...\) defines a group, and ( and ) are literals. */ # define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) /* If this bit is set, then \<digit> matches <digit>. If not set, then \<digit> is a back-reference. */ # define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) /* If this bit is set, then | is an alternation operator, and \| is literal. If not set, then \| is an alternation operator, and | is literal. */ # define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) /* If this bit is set, then an ending range point collating higher than the starting range point, as in [z-a], is invalid. If not set, then when ending range point collates higher than the starting range point, the range is ignored. */ # define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) /* If this bit is set, then an unmatched ) is ordinary. If not set, then an unmatched ) is invalid. */ # define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) /* If this bit is set, succeed as soon as we match the whole pattern, without further backtracking. */ # define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) /* If this bit is set, do not process the GNU regex operators. If not set, then the GNU regex operators are recognized. */ # define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) /* If this bit is set, turn on internal regex debugging. If not set, and debugging was on, turn it off. This only works if regex.c is compiled -DDEBUG. We define this bit always, so that all that's needed to turn on debugging is to recompile regex.c; the calling code can always have this bit set, and it won't affect anything in the normal case. */ # define RE_DEBUG (RE_NO_GNU_OPS << 1) /* If this bit is set, a syntactically invalid interval is treated as a string of ordinary characters. For example, the ERE 'a{1' is treated as 'a\{1'. */ # define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ # define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1) /* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only for ^, because it is difficult to scan the regex backwards to find whether ^ should be special. */ # define RE_CARET_ANCHORS_HERE (RE_ICASE << 1) /* If this bit is set, then \{ cannot be first in a regex or immediately after an alternation, open-group or \} operator. */ # define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1) /* If this bit is set, then no_sub will be set to 1 during re_compile_pattern. */ # define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1) #endif /* This global variable defines the particular regexp syntax to use (for some interfaces). When a regexp is compiled, the syntax used is stored in the pattern buffer, so changing this does not affect already-compiled regexps. */ extern reg_syntax_t re_syntax_options; #ifdef __USE_GNU /* Define combinations of the above bits for the standard possibilities. (The [[[ comments delimit what gets put into the Texinfo file, so don't delete them!) */ /* [[[begin syntaxes]]] */ # define RE_SYNTAX_EMACS 0 # define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ | RE_CHAR_CLASSES \ | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) # define RE_SYNTAX_GNU_AWK \ ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ | RE_INVALID_INTERVAL_ORD) \ & ~(RE_DOT_NOT_NULL | RE_CONTEXT_INDEP_OPS \ | RE_CONTEXT_INVALID_OPS )) # define RE_SYNTAX_POSIX_AWK \ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ | RE_INTERVALS | RE_NO_GNU_OPS \ | RE_INVALID_INTERVAL_ORD) # define RE_SYNTAX_GREP \ ((RE_SYNTAX_POSIX_BASIC | RE_NEWLINE_ALT) \ & ~(RE_CONTEXT_INVALID_DUP | RE_DOT_NOT_NULL)) # define RE_SYNTAX_EGREP \ ((RE_SYNTAX_POSIX_EXTENDED | RE_INVALID_INTERVAL_ORD | RE_NEWLINE_ALT) \ & ~(RE_CONTEXT_INVALID_OPS | RE_DOT_NOT_NULL)) /* POSIX grep -E behavior is no longer incompatible with GNU. */ # define RE_SYNTAX_POSIX_EGREP \ RE_SYNTAX_EGREP /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ # define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC # define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC /* Syntax bits common to both basic and extended POSIX regex syntax. */ # define _RE_SYNTAX_POSIX_COMMON \ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ | RE_INTERVALS | RE_NO_EMPTY_RANGES) # define RE_SYNTAX_POSIX_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP) /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this isn't minimal, since other operators, such as \`, aren't disabled. */ # define RE_SYNTAX_POSIX_MINIMAL_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) # define RE_SYNTAX_POSIX_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is removed and RE_NO_BK_REFS is added. */ # define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) /* [[[end syntaxes]]] */ /* Maximum number of duplicates an interval can allow. POSIX-conforming systems might define this in <limits.h>, but we want our value, so remove any previous define. */ # ifdef _REGEX_INCLUDE_LIMITS_H # include <limits.h> # endif # ifdef RE_DUP_MAX # undef RE_DUP_MAX # endif /* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored the counter as a 2-byte signed integer. This is no longer true, so RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to ((SIZE_MAX - 9) / 10) if _REGEX_LARGE_OFFSETS is defined. However, there would be a huge performance problem if someone actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains its historical value. */ # define RE_DUP_MAX (0x7fff) #endif /* POSIX 'cflags' bits (i.e., information for 'regcomp'). */ /* If this bit is set, then use extended regular expression syntax. If not set, then use basic regular expression syntax. */ #define REG_EXTENDED 1 /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ #define REG_ICASE (1 << 1) /* If this bit is set, then anchors do not match at newline characters in the string. If not set, then anchors do match at newlines. */ #define REG_NEWLINE (1 << 2) /* If this bit is set, then report only success or fail in regexec. If not set, then returns differ between not matching and errors. */ #define REG_NOSUB (1 << 3) /* POSIX 'eflags' bits (i.e., information for regexec). */ /* If this bit is set, then the beginning-of-line operator doesn't match the beginning of the string (presumably because it's not the beginning of a line). If not set, then the beginning-of-line operator does match the beginning of the string. */ #define REG_NOTBOL 1 /* Like REG_NOTBOL, except for the end-of-line. */ #define REG_NOTEOL (1 << 1) /* Use PMATCH[0] to delimit the start and end of the search in the buffer. */ #define REG_STARTEND (1 << 2) /* If any error codes are removed, changed, or added, update the '__re_error_msgid' table in regcomp.c. */ typedef enum { _REG_ENOSYS = -1, /* This will never happen for this implementation. */ _REG_NOERROR = 0, /* Success. */ _REG_NOMATCH, /* Didn't find a match (for regexec). */ /* POSIX regcomp return error codes. (In the order listed in the standard.) */ _REG_BADPAT, /* Invalid pattern. */ _REG_ECOLLATE, /* Invalid collating element. */ _REG_ECTYPE, /* Invalid character class name. */ _REG_EESCAPE, /* Trailing backslash. */ _REG_ESUBREG, /* Invalid back reference. */ _REG_EBRACK, /* Unmatched left bracket. */ _REG_EPAREN, /* Parenthesis imbalance. */ _REG_EBRACE, /* Unmatched \{. */ _REG_BADBR, /* Invalid contents of \{\}. */ _REG_ERANGE, /* Invalid range end. */ _REG_ESPACE, /* Ran out of memory. */ _REG_BADRPT, /* No preceding re for repetition op. */ /* Error codes we've added. */ _REG_EEND, /* Premature end. */ _REG_ESIZE, /* Too large (e.g., repeat count too large). */ _REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ } reg_errcode_t; #if defined _XOPEN_SOURCE || defined __USE_XOPEN2K # define REG_ENOSYS _REG_ENOSYS #endif #define REG_NOERROR _REG_NOERROR #define REG_NOMATCH _REG_NOMATCH #define REG_BADPAT _REG_BADPAT #define REG_ECOLLATE _REG_ECOLLATE #define REG_ECTYPE _REG_ECTYPE #define REG_EESCAPE _REG_EESCAPE #define REG_ESUBREG _REG_ESUBREG #define REG_EBRACK _REG_EBRACK #define REG_EPAREN _REG_EPAREN #define REG_EBRACE _REG_EBRACE #define REG_BADBR _REG_BADBR #define REG_ERANGE _REG_ERANGE #define REG_ESPACE _REG_ESPACE #define REG_BADRPT _REG_BADRPT #define REG_EEND _REG_EEND #define REG_ESIZE _REG_ESIZE #define REG_ERPAREN _REG_ERPAREN /* This data structure represents a compiled pattern. Before calling the pattern compiler, the fields 'buffer', 'allocated', 'fastmap', and 'translate' can be set. After the pattern has been compiled, the fields 're_nsub', 'not_bol' and 'not_eol' are available. All other fields are private to the regex routines. */ #ifndef RE_TRANSLATE_TYPE # define __RE_TRANSLATE_TYPE unsigned char * # ifdef __USE_GNU # define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE # endif #endif #ifdef __USE_GNU # define __REPB_PREFIX(name) name #else # define __REPB_PREFIX(name) __##name #endif struct re_pattern_buffer { /* Space that holds the compiled pattern. The type 'struct re_dfa_t' is private and is not declared here. */ struct re_dfa_t *__REPB_PREFIX(buffer); /* Number of bytes to which 'buffer' points. */ __re_long_size_t __REPB_PREFIX(allocated); /* Number of bytes actually used in 'buffer'. */ __re_long_size_t __REPB_PREFIX(used); /* Syntax setting with which the pattern was compiled. */ reg_syntax_t __REPB_PREFIX(syntax); /* Pointer to a fastmap, if any, otherwise zero. re_search uses the fastmap, if there is one, to skip over impossible starting points for matches. */ char *__REPB_PREFIX(fastmap); /* Either a translate table to apply to all characters before comparing them, or zero for no translation. The translation is applied to a pattern when it is compiled and to a string when it is matched. */ __RE_TRANSLATE_TYPE __REPB_PREFIX(translate); /* Number of subexpressions found by the compiler. */ size_t re_nsub; /* Zero if this pattern cannot match the empty string, one else. Well, in truth it's used only in 're_search_2', to see whether or not we should use the fastmap, so we don't set this absolutely perfectly; see 're_compile_fastmap' (the "duplicate" case). */ unsigned __REPB_PREFIX(can_be_null) : 1; /* If REGS_UNALLOCATED, allocate space in the 'regs' structure for 'max (RE_NREGS, re_nsub + 1)' groups. If REGS_REALLOCATE, reallocate space if necessary. If REGS_FIXED, use what's there. */ #ifdef __USE_GNU # define REGS_UNALLOCATED 0 # define REGS_REALLOCATE 1 # define REGS_FIXED 2 #endif unsigned __REPB_PREFIX(regs_allocated) : 2; /* Set to zero when 're_compile_pattern' compiles a pattern; set to one by 're_compile_fastmap' if it updates the fastmap. */ unsigned __REPB_PREFIX(fastmap_accurate) : 1; /* If set, 're_match_2' does not return information about subexpressions. */ unsigned __REPB_PREFIX(no_sub) : 1; /* If set, a beginning-of-line anchor doesn't match at the beginning of the string. */ unsigned __REPB_PREFIX(not_bol) : 1; /* Similarly for an end-of-line anchor. */ unsigned __REPB_PREFIX(not_eol) : 1; /* If true, an anchor at a newline matches. */ unsigned __REPB_PREFIX(newline_anchor) : 1; }; typedef struct re_pattern_buffer regex_t; /* Type for byte offsets within the string. POSIX mandates this. */ #ifdef _REGEX_LARGE_OFFSETS /* POSIX 1003.1-2008 requires that regoff_t be at least as wide as ptrdiff_t and ssize_t. We don't know of any hosts where ptrdiff_t is wider than ssize_t, so ssize_t is safe. ptrdiff_t is not visible here, so use ssize_t. */ typedef ssize_t regoff_t; #else /* The traditional GNU regex implementation mishandles strings longer than INT_MAX. */ typedef int regoff_t; #endif #ifdef __USE_GNU /* This is the structure we store register match data in. See regex.texinfo for a full description of what registers match. */ struct re_registers { __re_size_t num_regs; regoff_t *start; regoff_t *end; }; /* If 'regs_allocated' is REGS_UNALLOCATED in the pattern buffer, 're_match_2' returns information about at least this many registers the first time a 'regs' structure is passed. */ # ifndef RE_NREGS # define RE_NREGS 30 # endif #endif /* POSIX specification for registers. Aside from the different names than 're_registers', POSIX uses an array of structures, instead of a structure of arrays. */ typedef struct { regoff_t rm_so; /* Byte offset from string's start to substring's start. */ regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ } regmatch_t; /* Declarations for routines. */ #ifndef _REGEX_NELTS # if (defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \ && !defined __STDC_NO_VLA__) # define _REGEX_NELTS(n) n # else # define _REGEX_NELTS(n) # endif #endif #if defined __GNUC__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wvla" #endif #ifndef _Attr_access_ # ifdef __attr_access # define _Attr_access_(arg) __attr_access (arg) # elif defined __GNUC__ && 10 <= __GNUC__ # define _Attr_access_(x) __attribute__ ((__access__ x)) # else # define _Attr_access_(x) # endif #endif #ifdef __USE_GNU /* Sets the current default syntax to SYNTAX, and return the old syntax. You can also simply assign to the 're_syntax_options' variable. */ extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax); /* Compile the regular expression PATTERN, with length LENGTH and syntax given by the global 're_syntax_options', into the buffer BUFFER. Return NULL if successful, and an error string if not. To free the allocated storage, you must call 'regfree' on BUFFER. Note that the translate table must either have been initialized by 'regcomp', with a malloc'ed value, or set to NULL before calling 'regfree'. */ extern const char *re_compile_pattern (const char *__pattern, size_t __length, struct re_pattern_buffer *__buffer) _Attr_access_ ((__read_only__, 1, 2)); /* Compile a fastmap for the compiled pattern in BUFFER; used to accelerate searches. Return 0 if successful and -2 if was an internal error. */ extern int re_compile_fastmap (struct re_pattern_buffer *__buffer); /* Search in the string STRING (with length LENGTH) for the pattern compiled into BUFFER. Start searching at position START, for RANGE characters. Return the starting position of the match, -1 for no match, or -2 for an internal error. Also return register information in REGS (if REGS and BUFFER->no_sub are nonzero). */ extern regoff_t re_search (struct re_pattern_buffer *__buffer, const char *__String, regoff_t __length, regoff_t __start, regoff_t __range, struct re_registers *__regs) _Attr_access_ ((__read_only__, 2, 3)); /* Like 're_search', but search in the concatenation of STRING1 and STRING2. Also, stop searching at index START + STOP. */ extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer, const char *__string1, regoff_t __length1, const char *__string2, regoff_t __length2, regoff_t __start, regoff_t __range, struct re_registers *__regs, regoff_t __stop) _Attr_access_ ((__read_only__, 2, 3)) _Attr_access_ ((__read_only__, 4, 5)); /* Like 're_search', but return how many characters in STRING the regexp in BUFFER matched, starting at position START. */ extern regoff_t re_match (struct re_pattern_buffer *__buffer, const char *__String, regoff_t __length, regoff_t __start, struct re_registers *__regs) _Attr_access_ ((__read_only__, 2, 3)); /* Relates to 're_match' as 're_search_2' relates to 're_search'. */ extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer, const char *__string1, regoff_t __length1, const char *__string2, regoff_t __length2, regoff_t __start, struct re_registers *__regs, regoff_t __stop) _Attr_access_ ((__read_only__, 2, 3)) _Attr_access_ ((__read_only__, 4, 5)); /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated with malloc, and must each be at least 'NUM_REGS * sizeof (regoff_t)' bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using BUFFER will allocate its own register data, without freeing the old data. */ extern void re_set_registers (struct re_pattern_buffer *__buffer, struct re_registers *__regs, __re_size_t __num_regs, regoff_t *__starts, regoff_t *__ends); #endif /* Use GNU */ #if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC) /* 4.2 bsd compatibility. */ extern char *re_comp (const char *); extern int re_exec (const char *); #endif /* For plain 'restrict', use glibc's __restrict if defined. Otherwise, GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". Other compilers use __restrict, __restrict__, and _Restrict, and 'configure' might #define 'restrict' to those words, so pick a different name. */ #ifndef _Restrict_ # if defined __restrict \ || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3 # define _Restrict_ __restrict # elif 199901L <= __STDC_VERSION__ || defined restrict # define _Restrict_ restrict # else # define _Restrict_ # endif #endif /* For the ISO C99 syntax array_name[restrict] use glibc's __restrict_arr if available. Otherwise, GCC 3.1 and clang support this syntax (but not in C++ mode). Other ISO C99 compilers support it as well. */ #ifndef _Restrict_arr_ # ifdef __restrict_arr # define _Restrict_arr_ __restrict_arr # elif ((199901L <= __STDC_VERSION__ \ || 3 < __GNUC__ + (1 <= __GNUC_MINOR__) \ || __clang_major__ >= 3) \ && !defined __cplusplus) # define _Restrict_arr_ _Restrict_ # else # define _Restrict_arr_ # endif #endif /* POSIX compatibility. */ extern int regcomp (regex_t *_Restrict_ __preg, const char *_Restrict_ __pattern, int __cflags); extern int regexec (const regex_t *_Restrict_ __preg, const char *_Restrict_ __String, size_t __nmatch, regmatch_t __pmatch[_Restrict_arr_ _REGEX_NELTS (__nmatch)], int __eflags); extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, char *_Restrict_ __errbuf, size_t __errbuf_size) _Attr_access_ ((__write_only__, 3, 4)); extern void regfree (regex_t *__preg); #if defined __GNUC__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # pragma GCC diagnostic pop #endif #ifdef __cplusplus } #endif /* C++ */ #endif /* regex.h */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/regex_internal.h�����������������������������������������������������0000644�0001750�0001750�00000055536�14557510505�015440� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _REGEX_INTERNAL_H #define _REGEX_INTERNAL_H 1 #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <langinfo.h> #include <locale.h> #include <wchar.h> #include <wctype.h> #include <stdckdint.h> #include <stdint.h> #ifndef _LIBC # include <dynarray.h> #endif #include <intprops.h> #include <verify.h> #if defined DEBUG && DEBUG != 0 # include <assert.h> # define DEBUG_ASSERT(x) assert (x) #else # define DEBUG_ASSERT(x) assume (x) #endif #ifdef _LIBC # include <libc-lock.h> # define lock_define(name) __libc_lock_define (, name) # define lock_init(lock) (__libc_lock_init (lock), 0) # define lock_fini(lock) ((void) 0) # define lock_lock(lock) __libc_lock_lock (lock) # define lock_unlock(lock) __libc_lock_unlock (lock) #elif defined GNULIB_LOCK && !defined GNULIB_REGEX_SINGLE_THREAD # include "glthread/lock.h" # define lock_define(name) gl_lock_define (, name) # define lock_init(lock) glthread_lock_init (&(lock)) # define lock_fini(lock) glthread_lock_destroy (&(lock)) # define lock_lock(lock) glthread_lock_lock (&(lock)) # define lock_unlock(lock) glthread_lock_unlock (&(lock)) #elif defined GNULIB_PTHREAD && !defined GNULIB_REGEX_SINGLE_THREAD # include <pthread.h> # define lock_define(name) pthread_mutex_t name; # define lock_init(lock) pthread_mutex_init (&(lock), 0) # define lock_fini(lock) pthread_mutex_destroy (&(lock)) # define lock_lock(lock) pthread_mutex_lock (&(lock)) # define lock_unlock(lock) pthread_mutex_unlock (&(lock)) #else # define lock_define(name) # define lock_init(lock) 0 # define lock_fini(lock) ((void) 0) /* The 'dfa' avoids an "unused variable 'dfa'" warning from GCC. */ # define lock_lock(lock) ((void) dfa) # define lock_unlock(lock) ((void) 0) #endif /* In case that the system doesn't have isblank(). */ #if !defined _LIBC && ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) # define isblank(ch) ((ch) == ' ' || (ch) == '\t') #endif /* regex code assumes isascii has its usual numeric meaning, even if the portable character set uses EBCDIC encoding, and even if wint_t is wider than int. */ #ifndef _LIBC # undef isascii # define isascii(c) (((c) & ~0x7f) == 0) #endif #ifdef _LIBC # ifndef _RE_DEFINE_LOCALE_FUNCTIONS # define _RE_DEFINE_LOCALE_FUNCTIONS 1 # include <locale/localeinfo.h> # include <locale/coll-lookup.h> # endif #endif /* This is for other GNU distributions with internationalized messages. */ #if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC # include <libintl.h> # ifdef _LIBC # undef gettext # define gettext(msgid) \ __dcgettext (_libc_intl_domainname, msgid, LC_MESSAGES) # endif #else # undef gettext # define gettext(msgid) (msgid) #endif #ifndef gettext_noop /* This define is so xgettext can find the internationalizable strings. */ # define gettext_noop(String) String #endif /* Number of ASCII characters. */ #define ASCII_CHARS 0x80 /* Number of single byte characters. */ #define SBC_MAX (UCHAR_MAX + 1) #define COLL_ELEM_LEN_MAX 8 /* The character which represents newline. */ #define NEWLINE_CHAR '\n' #define WIDE_NEWLINE_CHAR L'\n' /* Rename to standard API for using out of glibc. */ #ifndef _LIBC # undef __wctype # undef __iswalnum # undef __iswctype # undef __towlower # undef __towupper # define __wctype wctype # define __iswalnum iswalnum # define __iswctype iswctype # define __towlower towlower # define __towupper towupper # define __btowc btowc # define __mbrtowc mbrtowc # define __wcrtomb wcrtomb # define __regfree regfree #endif /* not _LIBC */ /* Types related to integers. Unless protected by #ifdef _LIBC, the regex code should avoid exact-width types like int32_t and uint64_t as some non-GCC platforms lack them, an issue when this code is used in Gnulib. */ #ifndef ULONG_WIDTH # define ULONG_WIDTH REGEX_UINTEGER_WIDTH (ULONG_MAX) /* The number of usable bits in an unsigned integer type with maximum value MAX, as an int expression suitable in #if. Cover all known practical hosts. This implementation exploits the fact that MAX is 1 less than a power of 2, and merely counts the number of 1 bits in MAX; "COBn" means "count the number of 1 bits in the low-order n bits". */ # define REGEX_UINTEGER_WIDTH(max) REGEX_COB128 (max) # define REGEX_COB128(n) (REGEX_COB64 ((n) >> 31 >> 31 >> 2) + REGEX_COB64 (n)) # define REGEX_COB64(n) (REGEX_COB32 ((n) >> 31 >> 1) + REGEX_COB32 (n)) # define REGEX_COB32(n) (REGEX_COB16 ((n) >> 16) + REGEX_COB16 (n)) # define REGEX_COB16(n) (REGEX_COB8 ((n) >> 8) + REGEX_COB8 (n)) # define REGEX_COB8(n) (REGEX_COB4 ((n) >> 4) + REGEX_COB4 (n)) # define REGEX_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + ((n) & 1)) # if ULONG_MAX / 2 + 1 != 1ul << (ULONG_WIDTH - 1) # error "ULONG_MAX out of range" # endif #endif /* The type of indexes into strings. This is signed, not size_t, since the API requires indexes to fit in regoff_t anyway, and using signed integers makes the code a bit smaller and presumably faster. The traditional GNU regex implementation uses int for indexes. The POSIX-compatible implementation uses a possibly-wider type. The name 'Idx' is three letters to minimize the hassle of reindenting a lot of regex code that formerly used 'int'. */ typedef regoff_t Idx; #ifdef _REGEX_LARGE_OFFSETS # define IDX_MAX SSIZE_MAX #else # define IDX_MAX INT_MAX #endif /* A hash value, suitable for computing hash tables. */ typedef __re_size_t re_hashval_t; /* An integer used to represent a set of bits. It must be unsigned, and must be at least as wide as unsigned int. */ typedef unsigned long int bitset_word_t; /* All bits set in a bitset_word_t. */ #define BITSET_WORD_MAX ULONG_MAX /* Number of bits in a bitset_word_t. */ #define BITSET_WORD_BITS ULONG_WIDTH /* Number of bitset_word_t values in a bitset_t. */ #define BITSET_WORDS ((SBC_MAX + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS) typedef bitset_word_t bitset_t[BITSET_WORDS]; typedef bitset_word_t *re_bitset_ptr_t; typedef const bitset_word_t *re_const_bitset_ptr_t; #define PREV_WORD_CONSTRAINT 0x0001 #define PREV_NOTWORD_CONSTRAINT 0x0002 #define NEXT_WORD_CONSTRAINT 0x0004 #define NEXT_NOTWORD_CONSTRAINT 0x0008 #define PREV_NEWLINE_CONSTRAINT 0x0010 #define NEXT_NEWLINE_CONSTRAINT 0x0020 #define PREV_BEGBUF_CONSTRAINT 0x0040 #define NEXT_ENDBUF_CONSTRAINT 0x0080 #define WORD_DELIM_CONSTRAINT 0x0100 #define NOT_WORD_DELIM_CONSTRAINT 0x0200 typedef enum { INSIDE_WORD = PREV_WORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, WORD_FIRST = PREV_NOTWORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, WORD_LAST = PREV_WORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, INSIDE_NOTWORD = PREV_NOTWORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, LINE_FIRST = PREV_NEWLINE_CONSTRAINT, LINE_LAST = NEXT_NEWLINE_CONSTRAINT, BUF_FIRST = PREV_BEGBUF_CONSTRAINT, BUF_LAST = NEXT_ENDBUF_CONSTRAINT, WORD_DELIM = WORD_DELIM_CONSTRAINT, NOT_WORD_DELIM = NOT_WORD_DELIM_CONSTRAINT } re_context_type; typedef struct { Idx alloc; Idx nelem; Idx *elems; } re_node_set; typedef enum { NON_TYPE = 0, /* Node type, These are used by token, node, tree. */ CHARACTER = 1, END_OF_RE = 2, SIMPLE_BRACKET = 3, OP_BACK_REF = 4, OP_PERIOD = 5, COMPLEX_BRACKET = 6, OP_UTF8_PERIOD = 7, /* We define EPSILON_BIT as a macro so that OP_OPEN_SUBEXP is used when the debugger shows values of this enum type. */ #define EPSILON_BIT 8 OP_OPEN_SUBEXP = EPSILON_BIT | 0, OP_CLOSE_SUBEXP = EPSILON_BIT | 1, OP_ALT = EPSILON_BIT | 2, OP_DUP_ASTERISK = EPSILON_BIT | 3, ANCHOR = EPSILON_BIT | 4, /* Tree type, these are used only by tree. */ CONCAT = 16, SUBEXP = 17, /* Token type, these are used only by token. */ OP_DUP_PLUS = 18, OP_DUP_QUESTION, OP_OPEN_BRACKET, OP_CLOSE_BRACKET, OP_CHARSET_RANGE, OP_OPEN_DUP_NUM, OP_CLOSE_DUP_NUM, OP_NON_MATCH_LIST, OP_OPEN_COLL_ELEM, OP_CLOSE_COLL_ELEM, OP_OPEN_EQUIV_CLASS, OP_CLOSE_EQUIV_CLASS, OP_OPEN_CHAR_CLASS, OP_CLOSE_CHAR_CLASS, OP_WORD, OP_NOTWORD, OP_SPACE, OP_NOTSPACE, BACK_SLASH } re_token_type_t; typedef struct { /* Multibyte characters. */ wchar_t *mbchars; #ifdef _LIBC /* Collating symbols. */ int32_t *coll_syms; #endif #ifdef _LIBC /* Equivalence classes. */ int32_t *equiv_classes; #endif /* Range expressions. */ #ifdef _LIBC uint32_t *range_starts; uint32_t *range_ends; #else wchar_t *range_starts; wchar_t *range_ends; #endif /* Character classes. */ wctype_t *char_classes; /* If this character set is the non-matching list. */ unsigned int non_match : 1; /* # of multibyte characters. */ Idx nmbchars; /* # of collating symbols. */ Idx ncoll_syms; /* # of equivalence classes. */ Idx nequiv_classes; /* # of range expressions. */ Idx nranges; /* # of character classes. */ Idx nchar_classes; } re_charset_t; typedef struct { union { unsigned char c; /* for CHARACTER */ re_bitset_ptr_t sbcset; /* for SIMPLE_BRACKET */ re_charset_t *mbcset; /* for COMPLEX_BRACKET */ Idx idx; /* for BACK_REF */ re_context_type ctx_type; /* for ANCHOR */ } opr; #if (__GNUC__ >= 2 || defined __clang__) && !defined __STRICT_ANSI__ re_token_type_t type : 8; #else re_token_type_t type; #endif unsigned int constraint : 10; /* context constraint */ unsigned int duplicated : 1; unsigned int opt_subexp : 1; unsigned int accept_mb : 1; /* These 2 bits can be moved into the union if needed (e.g. if running out of bits; move opr.c to opr.c.c and move the flags to opr.c.flags). */ unsigned int mb_partial : 1; unsigned int word_char : 1; } re_token_t; #define IS_EPSILON_NODE(type) ((type) & EPSILON_BIT) struct re_string_t { /* Indicate the raw buffer which is the original string passed as an argument of regexec(), re_search(), etc.. */ const unsigned char *raw_mbs; /* Store the multibyte string. In case of "case insensitive mode" like REG_ICASE, upper cases of the string are stored, otherwise MBS points the same address that RAW_MBS points. */ unsigned char *mbs; /* Store the wide character string which is corresponding to MBS. */ wint_t *wcs; Idx *offsets; mbstate_t cur_state; /* Index in RAW_MBS. Each character mbs[i] corresponds to raw_mbs[raw_mbs_idx + i]. */ Idx raw_mbs_idx; /* The length of the valid characters in the buffers. */ Idx valid_len; /* The corresponding number of bytes in raw_mbs array. */ Idx valid_raw_len; /* The length of the buffers MBS and WCS. */ Idx bufs_len; /* The index in MBS, which is updated by re_string_fetch_byte. */ Idx cur_idx; /* length of RAW_MBS array. */ Idx raw_len; /* This is RAW_LEN - RAW_MBS_IDX + VALID_LEN - VALID_RAW_LEN. */ Idx len; /* End of the buffer may be shorter than its length in the cases such as re_match_2, re_search_2. Then, we use STOP for end of the buffer instead of LEN. */ Idx raw_stop; /* This is RAW_STOP - RAW_MBS_IDX adjusted through OFFSETS. */ Idx stop; /* The context of mbs[0]. We store the context independently, since the context of mbs[0] may be different from raw_mbs[0], which is the beginning of the input string. */ unsigned int tip_context; /* The translation passed as a part of an argument of re_compile_pattern. */ RE_TRANSLATE_TYPE trans; /* Copy of re_dfa_t's word_char. */ re_const_bitset_ptr_t word_char; /* true if REG_ICASE. */ unsigned char icase; unsigned char is_utf8; unsigned char map_notascii; unsigned char mbs_allocated; unsigned char offsets_needed; unsigned char newline_anchor; unsigned char word_ops_used; int mb_cur_max; }; typedef struct re_string_t re_string_t; struct re_dfa_t; typedef struct re_dfa_t re_dfa_t; #ifndef _LIBC # define IS_IN(libc) false #endif #define re_string_peek_byte(pstr, offset) \ ((pstr)->mbs[(pstr)->cur_idx + offset]) #define re_string_fetch_byte(pstr) \ ((pstr)->mbs[(pstr)->cur_idx++]) #define re_string_first_byte(pstr, idx) \ ((idx) == (pstr)->valid_len || (pstr)->wcs[idx] != WEOF) #define re_string_is_single_byte_char(pstr, idx) \ ((pstr)->wcs[idx] != WEOF && ((pstr)->valid_len == (idx) + 1 \ || (pstr)->wcs[(idx) + 1] != WEOF)) #define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx) #define re_string_cur_idx(pstr) ((pstr)->cur_idx) #define re_string_get_buffer(pstr) ((pstr)->mbs) #define re_string_length(pstr) ((pstr)->len) #define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx]) #define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx)) #define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx)) #ifdef _LIBC # define MALLOC_0_IS_NONNULL 1 #elif !defined MALLOC_0_IS_NONNULL # define MALLOC_0_IS_NONNULL 0 #endif #ifndef MAX # define MAX(a,b) ((a) < (b) ? (b) : (a)) #endif #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t))) #define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t))) #define re_free(p) free (p) struct bin_tree_t { struct bin_tree_t *parent; struct bin_tree_t *left; struct bin_tree_t *right; struct bin_tree_t *first; struct bin_tree_t *next; re_token_t token; /* 'node_idx' is the index in dfa->nodes, if 'type' == 0. Otherwise 'type' indicate the type of this node. */ Idx node_idx; }; typedef struct bin_tree_t bin_tree_t; #define BIN_TREE_STORAGE_SIZE \ ((1024 - sizeof (void *)) / sizeof (bin_tree_t)) struct bin_tree_storage_t { struct bin_tree_storage_t *next; bin_tree_t data[BIN_TREE_STORAGE_SIZE]; }; typedef struct bin_tree_storage_t bin_tree_storage_t; #define CONTEXT_WORD 1 #define CONTEXT_NEWLINE (CONTEXT_WORD << 1) #define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1) #define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1) #define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD) #define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE) #define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF) #define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF) #define IS_ORDINARY_CONTEXT(c) ((c) == 0) #define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_') #define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR) #define IS_WIDE_WORD_CHAR(ch) (__iswalnum (ch) || (ch) == L'_') #define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR) #define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \ ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\ || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context))) #define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \ ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \ || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context))) struct re_dfastate_t { re_hashval_t hash; re_node_set nodes; re_node_set non_eps_nodes; re_node_set inveclosure; re_node_set *entrance_nodes; struct re_dfastate_t **trtable, **word_trtable; unsigned int context : 4; unsigned int halt : 1; /* If this state can accept "multi byte". Note that we refer to multibyte characters, and multi character collating elements as "multi byte". */ unsigned int accept_mb : 1; /* If this state has backreference node(s). */ unsigned int has_backref : 1; unsigned int has_constraint : 1; }; typedef struct re_dfastate_t re_dfastate_t; struct re_state_table_entry { Idx num; Idx alloc; re_dfastate_t **array; }; /* Array type used in re_sub_match_last_t and re_sub_match_top_t. */ typedef struct { Idx next_idx; Idx alloc; re_dfastate_t **array; } state_array_t; /* Store information about the node NODE whose type is OP_CLOSE_SUBEXP. */ typedef struct { Idx node; Idx str_idx; /* The position NODE match at. */ state_array_t path; } re_sub_match_last_t; /* Store information about the node NODE whose type is OP_OPEN_SUBEXP. And information about the node, whose type is OP_CLOSE_SUBEXP, corresponding to NODE is stored in LASTS. */ typedef struct { Idx str_idx; Idx node; state_array_t *path; Idx alasts; /* Allocation size of LASTS. */ Idx nlasts; /* The number of LASTS. */ re_sub_match_last_t **lasts; } re_sub_match_top_t; struct re_backref_cache_entry { Idx node; Idx str_idx; Idx subexp_from; Idx subexp_to; bitset_word_t eps_reachable_subexps_map; char more; }; typedef struct { /* The string object corresponding to the input string. */ re_string_t input; const re_dfa_t *const dfa; /* EFLAGS of the argument of regexec. */ int eflags; /* Where the matching ends. */ Idx match_last; Idx last_node; /* The state log used by the matcher. */ re_dfastate_t **state_log; Idx state_log_top; /* Back reference cache. */ Idx nbkref_ents; Idx abkref_ents; struct re_backref_cache_entry *bkref_ents; int max_mb_elem_len; Idx nsub_tops; Idx asub_tops; re_sub_match_top_t **sub_tops; } re_match_context_t; typedef struct { re_dfastate_t **sifted_states; re_dfastate_t **limited_states; Idx last_node; Idx last_str_idx; re_node_set limits; } re_sift_context_t; struct re_fail_stack_ent_t { Idx idx; Idx node; regmatch_t *regs; re_node_set eps_via_nodes; }; struct re_fail_stack_t { Idx num; Idx alloc; struct re_fail_stack_ent_t *stack; }; struct re_dfa_t { re_token_t *nodes; size_t nodes_alloc; size_t nodes_len; Idx *nexts; Idx *org_indices; re_node_set *edests; re_node_set *eclosures; re_node_set *inveclosures; struct re_state_table_entry *state_table; re_dfastate_t *init_state; re_dfastate_t *init_state_word; re_dfastate_t *init_state_nl; re_dfastate_t *init_state_begbuf; bin_tree_t *str_tree; bin_tree_storage_t *str_tree_storage; re_bitset_ptr_t sb_char; int str_tree_storage_idx; /* number of subexpressions 're_nsub' is in regex_t. */ re_hashval_t state_hash_mask; Idx init_node; Idx nbackref; /* The number of backreference in this dfa. */ /* Bitmap expressing which backreference is used. */ bitset_word_t used_bkref_map; bitset_word_t completed_bkref_map; unsigned int has_plural_match : 1; /* If this dfa has "multibyte node", which is a backreference or a node which can accept multibyte character or multi character collating element. */ unsigned int has_mb_node : 1; unsigned int is_utf8 : 1; unsigned int map_notascii : 1; unsigned int word_ops_used : 1; int mb_cur_max; bitset_t word_char; reg_syntax_t syntax; Idx *subexp_map; #ifdef DEBUG char* re_str; #endif lock_define (lock) }; #define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set)) #define re_node_set_remove(set,id) \ (re_node_set_remove_at (set, re_node_set_contains (set, id) - 1)) #define re_node_set_empty(p) ((p)->nelem = 0) #define re_node_set_free(set) re_free ((set)->elems) typedef enum { SB_CHAR, MB_CHAR, EQUIV_CLASS, COLL_SYM, CHAR_CLASS } bracket_elem_type; typedef struct { bracket_elem_type type; union { unsigned char ch; unsigned char *name; wchar_t wch; } opr; } bracket_elem_t; /* Functions for bitset_t operation. */ static inline void bitset_set (bitset_t set, Idx i) { set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS; } static inline void bitset_clear (bitset_t set, Idx i) { set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS); } static inline bool bitset_contain (const bitset_t set, Idx i) { return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1; } static inline void bitset_empty (bitset_t set) { memset (set, '\0', sizeof (bitset_t)); } static inline void bitset_set_all (bitset_t set) { memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS)); if (SBC_MAX % BITSET_WORD_BITS != 0) set[BITSET_WORDS - 1] = ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1; } static inline void bitset_copy (bitset_t dest, const bitset_t src) { memcpy (dest, src, sizeof (bitset_t)); } static inline void bitset_not (bitset_t set) { int bitset_i; for (bitset_i = 0; bitset_i < SBC_MAX / BITSET_WORD_BITS; ++bitset_i) set[bitset_i] = ~set[bitset_i]; if (SBC_MAX % BITSET_WORD_BITS != 0) set[BITSET_WORDS - 1] = ((((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1) & ~set[BITSET_WORDS - 1]); } static inline void bitset_merge (bitset_t dest, const bitset_t src) { int bitset_i; for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) dest[bitset_i] |= src[bitset_i]; } static inline void bitset_mask (bitset_t dest, const bitset_t src) { int bitset_i; for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) dest[bitset_i] &= src[bitset_i]; } /* Functions for re_string. */ static int __attribute__ ((pure, unused)) re_string_char_size_at (const re_string_t *pstr, Idx idx) { int byte_idx; if (pstr->mb_cur_max == 1) return 1; for (byte_idx = 1; idx + byte_idx < pstr->valid_len; ++byte_idx) if (pstr->wcs[idx + byte_idx] != WEOF) break; return byte_idx; } static wint_t __attribute__ ((pure, unused)) re_string_wchar_at (const re_string_t *pstr, Idx idx) { if (pstr->mb_cur_max == 1) return (wint_t) pstr->mbs[idx]; return (wint_t) pstr->wcs[idx]; } #ifdef _LIBC # include <locale/weight.h> #endif static int __attribute__ ((pure, unused)) re_string_elem_size_at (const re_string_t *pstr, Idx idx) { #ifdef _LIBC const unsigned char *p, *extra; const int32_t *table, *indirect; uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); p = pstr->mbs + idx; findidx (table, indirect, extra, &p, pstr->len - idx); return p - pstr->mbs - idx; } #endif /* _LIBC */ return 1; } #ifdef _LIBC # if __glibc_has_attribute (__fallthrough__) # define FALLTHROUGH __attribute__ ((__fallthrough__)) # else # define FALLTHROUGH ((void) 0) # endif #else # include "attribute.h" #endif #endif /* _REGEX_INTERNAL_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/root-uid.h�����������������������������������������������������������0000644�0001750�0001750�00000002003�14557510505�014151� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The user ID that always has appropriate privileges in the POSIX sense. Copyright 2012-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef ROOT_UID_H_ #define ROOT_UID_H_ /* The user ID that always has appropriate privileges in the POSIX sense. */ #ifdef __TANDEM # define ROOT_UID 65535 #else # define ROOT_UID 0 #endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/save-cwd.h�����������������������������������������������������������0000644�0001750�0001750�00000002046�14557510505�014127� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Save and restore current working directory. Copyright (C) 1995, 1997-1998, 2003, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #ifndef SAVE_CWD_H # define SAVE_CWD_H 1 struct saved_cwd { int desc; char *name; }; int save_cwd (struct saved_cwd *cwd); int restore_cwd (const struct saved_cwd *cwd); void free_cwd (struct saved_cwd *cwd); #endif /* SAVE_CWD_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/setlocale_null.h�����������������������������������������������������0000644�0001750�0001750�00000006664�14557510505�015435� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query the name of the current global locale. Copyright (C) 2019-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #ifndef _SETLOCALE_NULL_H #define _SETLOCALE_NULL_H #include <stddef.h> #include "arg-nonnull.h" #ifdef __cplusplus extern "C" { #endif /* Recommended size of a buffer for a locale name for a single category. On glibc systems, you can have locale names that are relative file names; assume a maximum length 256. In native Windows, in 2018 the longest locale name was of length 58 ("FYRO Macedonian_Former Yugoslav Republic of Macedonia.1251"). */ #define SETLOCALE_NULL_MAX (256+1) /* Recommended size of a buffer for a locale name with all categories. On glibc systems, you can have locale names that are relative file names; assume maximum length 256 for each. There are 12 categories; so, the maximum total length is 148+12*256. In native Windows, there are 5 categories, and the maximum total length is 55+5*58. */ #define SETLOCALE_NULL_ALL_MAX (148+12*256+1) /* setlocale_null_r (CATEGORY, BUF, BUFSIZE) is like setlocale (CATEGORY, NULL), except that - it is guaranteed to be multithread-safe, - it returns the resulting locale category name or locale name in the user-supplied buffer BUF, which must be BUFSIZE bytes long. The recommended minimum buffer size is - SETLOCALE_NULL_MAX for CATEGORY != LC_ALL, and - SETLOCALE_NULL_ALL_MAX for CATEGORY == LC_ALL. The return value is an error code: 0 if the call is successful, EINVAL if CATEGORY is invalid, or ERANGE if BUFSIZE is smaller than the length needed size (including the trailing NUL byte). In the latter case, a truncated result is returned in BUF, but still NUL-terminated if BUFSIZE > 0. For this call to be multithread-safe, *all* calls to setlocale (CATEGORY, NULL) in all other threads must have been converted to use setlocale_null_r or setlocale_null as well, and the other threads must not make other setlocale invocations (since changing the global locale has side effects on all threads). */ extern int setlocale_null_r (int category, char *buf, size_t bufsize) _GL_ARG_NONNULL ((2)); /* setlocale_null (CATEGORY) is like setlocale (CATEGORY, NULL), except that it is guaranteed to be multithread-safe. The return value is NULL if CATEGORY is invalid. For this call to be multithread-safe, *all* calls to setlocale (CATEGORY, NULL) in all other threads must have been converted to use setlocale_null_r or setlocale_null as well, and the other threads must not make other setlocale invocations (since changing the global locale has side effects on all threads). */ extern const char *setlocale_null (int category); #ifdef __cplusplus } #endif #endif /* _SETLOCALE_NULL_H */ ����������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/signal.in.h����������������������������������������������������������0000644�0001750�0001750�00000037055�14557510505�014310� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <signal.h>. Copyright (C) 2006-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T) /* Special invocation convention: - Inside glibc header files. - On glibc systems we have a sequence of nested includes <signal.h> -> <ucontext.h> -> <signal.h>. In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. - On glibc systems with GCC 4.3 we have a sequence of nested includes <csignal> -> </usr/include/signal.h> -> <sys/ucontext.h> -> <signal.h>. In this situation, some of the functions are not yet declared, therefore we cannot provide the C++ aliases. */ # @INCLUDE_NEXT@ @NEXT_SIGNAL_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SIGNAL_H #define _GL_ALREADY_INCLUDING_SIGNAL_H /* Define pid_t, uid_t. Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes us; so include <sys/types.h> now, before the second inclusion guard. */ #include <sys/types.h> /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_SIGNAL_H@ #undef _GL_ALREADY_INCLUDING_SIGNAL_H #ifndef _@GUARD_PREFIX@_SIGNAL_H #define _@GUARD_PREFIX@_SIGNAL_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* For testing the OpenBSD version. */ #if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \ && defined __OpenBSD__ # include <sys/param.h> #endif /* Mac OS X 10.3, FreeBSD < 8.0, OpenBSD < 5.1, OSF/1 4.0, Solaris 2.6, Android, OS/2 kLIBC declare pthread_sigmask in <pthread.h>, not in <signal.h>. But avoid namespace pollution on glibc systems.*/ #if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \ && ((defined __APPLE__ && defined __MACH__) \ || (defined __FreeBSD__ && __FreeBSD__ < 8) \ || (defined __OpenBSD__ && OpenBSD < 201205) \ || defined __osf__ || defined __sun || defined __ANDROID__ \ || defined __KLIBC__) \ && ! defined __GLIBC__ # include <pthread.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* On AIX, sig_atomic_t already includes volatile. C99 requires that 'volatile sig_atomic_t' ignore the extra modifier, but C89 did not. Hence, redefine this to a non-volatile type as needed. */ #if ! @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ # if !GNULIB_defined_sig_atomic_t typedef int rpl_sig_atomic_t; # undef sig_atomic_t # define sig_atomic_t rpl_sig_atomic_t # define GNULIB_defined_sig_atomic_t 1 # endif #endif /* A set or mask of signals. */ #if !@HAVE_SIGSET_T@ # if !GNULIB_defined_sigset_t typedef unsigned int sigset_t; # define GNULIB_defined_sigset_t 1 # endif #endif /* Define sighandler_t, the type of signal handlers. A GNU extension. */ #if !@HAVE_SIGHANDLER_T@ # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_sighandler_t typedef void (*sighandler_t) (int); # define GNULIB_defined_sighandler_t 1 # endif # ifdef __cplusplus } # endif #endif #if @GNULIB_SIGNAL_H_SIGPIPE@ # ifndef SIGPIPE /* Define SIGPIPE to a value that does not overlap with other signals. */ # define SIGPIPE 13 # define GNULIB_defined_SIGPIPE 1 /* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask', 'write', 'stdio'. */ # endif #endif /* Maximum signal number + 1. */ #ifndef NSIG # if defined __TANDEM # define NSIG 32 # endif #endif #if @GNULIB_PTHREAD_SIGMASK@ # if @REPLACE_PTHREAD_SIGMASK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_sigmask # define pthread_sigmask rpl_pthread_sigmask # endif _GL_FUNCDECL_RPL (pthread_sigmask, int, (int how, const sigset_t *restrict new_mask, sigset_t *restrict old_mask)); _GL_CXXALIAS_RPL (pthread_sigmask, int, (int how, const sigset_t *restrict new_mask, sigset_t *restrict old_mask)); # else # if !(@HAVE_PTHREAD_SIGMASK@ || defined pthread_sigmask) _GL_FUNCDECL_SYS (pthread_sigmask, int, (int how, const sigset_t *restrict new_mask, sigset_t *restrict old_mask)); # endif _GL_CXXALIAS_SYS (pthread_sigmask, int, (int how, const sigset_t *restrict new_mask, sigset_t *restrict old_mask)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_sigmask); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_sigmask # if HAVE_RAW_DECL_PTHREAD_SIGMASK _GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - " "use gnulib module pthread_sigmask for portability"); # endif #endif #if @GNULIB_RAISE@ # if @REPLACE_RAISE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef raise # define raise rpl_raise # endif _GL_FUNCDECL_RPL (raise, int, (int sig)); _GL_CXXALIAS_RPL (raise, int, (int sig)); # else # if !@HAVE_RAISE@ _GL_FUNCDECL_SYS (raise, int, (int sig)); # endif _GL_CXXALIAS_SYS (raise, int, (int sig)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (raise); # endif #elif defined GNULIB_POSIXCHECK # undef raise /* Assume raise is always declared. */ _GL_WARN_ON_USE (raise, "raise can crash on native Windows - " "use gnulib module raise for portability"); #endif #if @GNULIB_SIGPROCMASK@ # if !@HAVE_POSIX_SIGNALBLOCKING@ # ifndef GNULIB_defined_signal_blocking # define GNULIB_defined_signal_blocking 1 # endif /* Maximum signal number + 1. */ # ifndef NSIG # define NSIG 32 # endif /* This code supports only 32 signals. */ # if !GNULIB_defined_verify_NSIG_constraint typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1]; # define GNULIB_defined_verify_NSIG_constraint 1 # endif # endif /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && (defined __i386__ || defined __x86_64__)) # undef sigaddset # undef sigdelset # undef sigemptyset # undef sigfillset # undef sigismember #endif /* Test whether a given signal is contained in a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigismember # endif # else _GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig)); _GL_CXXALIASWARN (sigismember); /* Initialize a signal set to the empty set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigemptyset # endif # else _GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set)); _GL_CXXALIASWARN (sigemptyset); /* Add a signal to a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigaddset # endif # else _GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig)); _GL_CXXALIASWARN (sigaddset); /* Remove a signal from a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigdelset # endif # else _GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig)); _GL_CXXALIASWARN (sigdelset); /* Fill a signal set with all possible signals. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigfillset # endif # else _GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set)); _GL_CXXALIASWARN (sigfillset); /* Return the set of those blocked signals that are pending. */ # if !@HAVE_POSIX_SIGNALBLOCKING@ _GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set)); _GL_CXXALIASWARN (sigpending); /* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. Then, if SET is not NULL, affect the current set of blocked signals by combining it with *SET as indicated in OPERATION. In this implementation, you are not allowed to change a signal handler while the signal is blocked. */ # if !@HAVE_POSIX_SIGNALBLOCKING@ # define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ # define SIG_SETMASK 1 /* blocked_set = *set; */ # define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ _GL_FUNCDECL_SYS (sigprocmask, int, (int operation, const sigset_t *restrict set, sigset_t *restrict old_set)); # endif _GL_CXXALIAS_SYS (sigprocmask, int, (int operation, const sigset_t *restrict set, sigset_t *restrict old_set)); _GL_CXXALIASWARN (sigprocmask); /* Install the handler FUNC for signal SIG, and return the previous handler. */ # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_function_taking_int_returning_void_t typedef void (*_gl_function_taking_int_returning_void_t) (int); # define GNULIB_defined_function_taking_int_returning_void_t 1 # endif # ifdef __cplusplus } # endif # if !@HAVE_POSIX_SIGNALBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define signal rpl_signal # endif _GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); _GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # else /* On OpenBSD, the declaration of 'signal' may not be present at this point, because it occurs in <sys/signal.h>, not <signal.h> directly. */ # if defined __OpenBSD__ _GL_FUNCDECL_SYS (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # endif _GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (signal); # endif # if !@HAVE_POSIX_SIGNALBLOCKING@ && GNULIB_defined_SIGPIPE /* Raise signal SIGPIPE. */ _GL_EXTERN_C int _gl_raise_SIGPIPE (void); # endif #elif defined GNULIB_POSIXCHECK # undef sigaddset # if HAVE_RAW_DECL_SIGADDSET _GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigdelset # if HAVE_RAW_DECL_SIGDELSET _GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigemptyset # if HAVE_RAW_DECL_SIGEMPTYSET _GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigfillset # if HAVE_RAW_DECL_SIGFILLSET _GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigismember # if HAVE_RAW_DECL_SIGISMEMBER _GL_WARN_ON_USE (sigismember, "sigismember is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigpending # if HAVE_RAW_DECL_SIGPENDING _GL_WARN_ON_USE (sigpending, "sigpending is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigprocmask # if HAVE_RAW_DECL_SIGPROCMASK _GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - " "use the gnulib module sigprocmask for portability"); # endif #endif /* @GNULIB_SIGPROCMASK@ */ #if @GNULIB_SIGACTION@ # if !@HAVE_SIGACTION@ # if !@HAVE_SIGINFO_T@ # if !GNULIB_defined_siginfo_types /* Present to allow compilation, but unsupported by gnulib. */ union sigval { int sival_int; void *sival_ptr; }; /* Present to allow compilation, but unsupported by gnulib. */ struct siginfo_t { int si_signo; int si_code; int si_errno; pid_t si_pid; uid_t si_uid; void *si_addr; int si_status; long si_band; union sigval si_value; }; typedef struct siginfo_t siginfo_t; # define GNULIB_defined_siginfo_types 1 # endif # endif /* !@HAVE_SIGINFO_T@ */ /* We assume that platforms which lack the sigaction() function also lack the 'struct sigaction' type, and vice versa. */ # if !GNULIB_defined_struct_sigaction struct sigaction { union { void (*_sa_handler) (int); /* Present to allow compilation, but unsupported by gnulib. POSIX says that implementations may, but not must, make sa_sigaction overlap with sa_handler, but we know of no implementation where they do not overlap. */ void (*_sa_sigaction) (int, siginfo_t *, void *); } _sa_func; sigset_t sa_mask; /* Not all POSIX flags are supported. */ int sa_flags; }; # define sa_handler _sa_func._sa_handler # define sa_sigaction _sa_func._sa_sigaction /* Unsupported flags are not present. */ # define SA_RESETHAND 1 # define SA_NODEFER 2 # define SA_RESTART 4 # define GNULIB_defined_struct_sigaction 1 # endif _GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict, struct sigaction *restrict)); # elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ # define sa_sigaction sa_handler # endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */ _GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict, struct sigaction *restrict)); _GL_CXXALIASWARN (sigaction); #elif defined GNULIB_POSIXCHECK # undef sigaction # if HAVE_RAW_DECL_SIGACTION _GL_WARN_ON_USE (sigaction, "sigaction is unportable - " "use the gnulib module sigaction for portability"); # endif #endif /* Some systems don't have SA_NODEFER. */ #ifndef SA_NODEFER # define SA_NODEFER 0 #endif #endif /* _@GUARD_PREFIX@_SIGNAL_H */ #endif /* _@GUARD_PREFIX@_SIGNAL_H */ #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/_Noreturn.h����������������������������������������������������������0000644�0001750�0001750�00000004560�14557510504�014373� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for declaring that a function does not return. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program 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 of the License, or (at your option) any later version. This program 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif (defined __clang__ && __clang_major__ < 16 \ && defined _GL_WORK_AROUND_LLVM_BUG_59792) /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around that rare LLVM bug, though you may get many false-alarm warnings. */ # define _Noreturn # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ && (4 < __GNUC__ + (7 <= __GNUC_MINOR__) \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))))) /* _Noreturn works as-is. */ # elif (2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/arg-nonnull.h��������������������������������������������������������0000644�0001750�0001750�00000002353�14557510504�014652� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for declaring that specific arguments must not be NULL. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program 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 of the License, or (at your option) any later version. This program 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools that the values passed as arguments n, ..., m must be non-NULL pointers. n = 1 stands for the first argument, n = 2 for the second argument etc. */ #ifndef _GL_ARG_NONNULL # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) # else # define _GL_ARG_NONNULL(params) # endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/c++defs.h������������������������������������������������������������0000644�0001750�0001750�00000036154�14557510504�013636� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* C++ compatible function declaration macros. Copyright (C) 2010-2024 Free Software Foundation, Inc. This program 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 of the License, or (at your option) any later version. This program 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_CXXDEFS_H #define _GL_CXXDEFS_H /* Begin/end the GNULIB_NAMESPACE namespace. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { # define _GL_END_NAMESPACE } #else # define _GL_BEGIN_NAMESPACE # define _GL_END_NAMESPACE #endif /* The three most frequent use cases of these macros are: * For providing a substitute for a function that is missing on some platforms, but is declared and works fine on the platforms on which it exists: #if @GNULIB_FOO@ # if !@HAVE_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on all platforms, but is broken/insufficient and needs to be replaced on some platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on some platforms but is broken/insufficient and needs to be replaced on some of them and is additionally either missing or undeclared on some other platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif */ /* _GL_EXTERN_C declaration; performs the declaration with C linkage. */ #if defined __cplusplus # define _GL_EXTERN_C extern "C" #else # define _GL_EXTERN_C extern #endif /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); declares a replacement function, named rpl_func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's because [[...]] extern "C" <declaration>; is invalid syntax in C++.) */ #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype rpl_func parameters_and_attributes /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); declares the system function, named func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype func parameters_and_attributes /* _GL_CXXALIAS_RPL (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to rpl_func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); Wrapping rpl_func in an object with an inline conversion operator avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is actually used in the program. */ #define _GL_CXXALIAS_RPL(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::rpl_func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_MDA (func, rettype, parameters); is to be used when func is a Microsoft deprecated alias, on native Windows. It declares a C++ alias called GNULIB_NAMESPACE::func that redirects to _func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); */ #define _GL_CXXALIAS_MDA(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); except that the C function rpl_func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>(::rpl_func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); is like _GL_CXXALIAS_MDA (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) /* _GL_CXXALIAS_SYS (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to the system provided function func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); Wrapping func in an object with an inline conversion operator avoids a reference to func unless GNULIB_NAMESPACE::func is actually used in the program. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>(::func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function is picked among a set of overloaded functions, namely the one with rettype2 and parameters2. Two consecutive casts are used to silence the "cannot find a match" and "invalid conversion" errors that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE /* The outer cast must be a reinterpret_cast. The inner cast: When the function is defined as a set of overloaded functions, it works as a static_cast<>, choosing the designated variant. When the function is defined as a single variant, it works as a reinterpret_cast<>. The parenthesized cast syntax works both ways. */ # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN (func); causes a warning to be emitted when ::func is used but not when GNULIB_NAMESPACE::func is used. func must be defined without overloaded variants. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN(func) \ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) # define _GL_CXXALIASWARN_1(func,namespace) \ _GL_CXXALIASWARN_2 (func, namespace) /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, we enable the warning only when not optimizing. */ # if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_WARN_ON_USE (func, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN_2(func,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN(func) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); causes a warning to be emitted when the given overloaded variant of ::func is used but not when GNULIB_NAMESPACE::func is used. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ GNULIB_NAMESPACE) # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, we enable the warning only when not optimizing. */ # if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # else # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif #endif /* _GL_CXXDEFS_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/warn-on-use.h��������������������������������������������������������0000644�0001750�0001750�00000015532�14557510505�014575� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for emitting warnings if a function is used. Copyright (C) 2010-2024 Free Software Foundation, Inc. This program 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 of the License, or (at your option) any later version. This program 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* _GL_WARN_ON_USE (function, "literal string") issues a declaration for FUNCTION which will then trigger a compiler warning containing the text of "literal string" anywhere that function is called, if supported by the compiler. If the compiler does not support this feature, the macro expands to an unused extern declaration. _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the attribute used in _GL_WARN_ON_USE. If the compiler does not support this feature, it expands to empty. These macros are useful for marking a function as a potential portability trap, with the intent that "literal string" include instructions on the replacement function that should be used instead. _GL_WARN_ON_USE is for functions with 'extern' linkage. _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' linkage. However, one of the reasons that a function is a portability trap is if it has the wrong signature. Declaring FUNCTION with a different signature in C is a compilation error, so this macro must use the same type as any existing declaration so that programs that avoid the problematic FUNCTION do not fail to compile merely because they included a header that poisoned the function. But this implies that _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already have a declaration. Use of this macro implies that there must not be any other macro hiding the declaration of FUNCTION; but undefining FUNCTION first is part of the poisoning process anyway (although for symbols that are provided only via a macro, the result is a compilation error rather than a warning containing "literal string"). Also note that in C++, it is only safe to use if FUNCTION has no overloads. For an example, it is possible to poison 'getline' by: - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], [getline]) in configure.ac, which potentially defines HAVE_RAW_DECL_GETLINE - adding this code to a header that wraps the system <stdio.h>: #undef getline #if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" "not universally present; use the gnulib module getline"); #endif It is not possible to directly poison global variables. But it is possible to write a wrapper accessor function, and poison that (less common usage, like &environ, will cause a compilation error rather than issue the nice warning, but the end result of informing the developer about their portability problem is still achieved): #if HAVE_RAW_DECL_ENVIRON static char *** rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); # undef environ # define environ (*rpl_environ ()) #endif or better (avoiding contradictory use of 'static' and 'extern'): #if HAVE_RAW_DECL_ENVIRON static char *** _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") rpl_environ (void) { return &environ; } # undef environ # define environ (*rpl_environ ()) #endif */ #ifndef _GL_WARN_ON_USE # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) # define _GL_WARN_ON_USE_ATTRIBUTE(message) \ __attribute__ ((__warning__ (message))) # elif __clang_major__ >= 4 /* Another compiler attribute is available in clang. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C __typeof__ (function) function \ __attribute__ ((__diagnose_if__ (1, message, "warning"))) # define _GL_WARN_ON_USE_ATTRIBUTE(message) \ __attribute__ ((__diagnose_if__ (1, message, "warning"))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C __typeof__ (function) function # define _GL_WARN_ON_USE_ATTRIBUTE(message) # else /* Unsupported. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # define _GL_WARN_ON_USE_ATTRIBUTE(message) # endif #endif /* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the function is declared with the given prototype, consisting of return type, parameters, and attributes. This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does not work in this case. */ #ifndef _GL_WARN_ON_USE_CXX # if !defined __cplusplus # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ _GL_WARN_ON_USE (function, msg) # else # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_gcc function parameters_and_attributes \ __attribute__ ((__warning__ (msg))) # elif __clang_major__ >= 4 /* Another compiler attribute is available in clang. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_clang function parameters_and_attributes \ __attribute__ ((__diagnose_if__ (1, msg, "warning"))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_gcc function parameters_and_attributes # else /* Unsupported. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif # endif #endif /* _GL_WARN_EXTERN_C declaration; performs the declaration with C linkage. */ #ifndef _GL_WARN_EXTERN_C # if defined __cplusplus # define _GL_WARN_EXTERN_C extern "C" # else # define _GL_WARN_EXTERN_C extern # endif #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/w32sock.h������������������������������������������������������������0000644�0001750�0001750�00000006452�14557510505�013716� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* w32sock.h --- internal auxiliary functions for Windows socket functions Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini */ #include <errno.h> /* Get O_RDWR and O_BINARY. */ #include <fcntl.h> /* Get _open_osfhandle(). */ #include <io.h> /* Get _get_osfhandle(). */ #if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" #else # include <io.h> #endif #define FD_TO_SOCKET(fd) ((SOCKET) _get_osfhandle ((fd))) #define SOCKET_TO_FD(fh) (_open_osfhandle ((intptr_t) (fh), O_RDWR | O_BINARY)) static inline void set_winsock_errno (void) { int err = WSAGetLastError (); /* Map some WSAE* errors to the runtime library's error codes. */ switch (err) { case WSA_INVALID_HANDLE: errno = EBADF; break; case WSA_NOT_ENOUGH_MEMORY: errno = ENOMEM; break; case WSA_INVALID_PARAMETER: errno = EINVAL; break; case WSAENAMETOOLONG: errno = ENAMETOOLONG; break; case WSAENOTEMPTY: errno = ENOTEMPTY; break; case WSAEWOULDBLOCK: errno = EWOULDBLOCK; break; case WSAEINPROGRESS: errno = EINPROGRESS; break; case WSAEALREADY: errno = EALREADY; break; case WSAENOTSOCK: errno = ENOTSOCK; break; case WSAEDESTADDRREQ: errno = EDESTADDRREQ; break; case WSAEMSGSIZE: errno = EMSGSIZE; break; case WSAEPROTOTYPE: errno = EPROTOTYPE; break; case WSAENOPROTOOPT: errno = ENOPROTOOPT; break; case WSAEPROTONOSUPPORT: errno = EPROTONOSUPPORT; break; case WSAEOPNOTSUPP: errno = EOPNOTSUPP; break; case WSAEAFNOSUPPORT: errno = EAFNOSUPPORT; break; case WSAEADDRINUSE: errno = EADDRINUSE; break; case WSAEADDRNOTAVAIL: errno = EADDRNOTAVAIL; break; case WSAENETDOWN: errno = ENETDOWN; break; case WSAENETUNREACH: errno = ENETUNREACH; break; case WSAENETRESET: errno = ENETRESET; break; case WSAECONNABORTED: errno = ECONNABORTED; break; case WSAECONNRESET: errno = ECONNRESET; break; case WSAENOBUFS: errno = ENOBUFS; break; case WSAEISCONN: errno = EISCONN; break; case WSAENOTCONN: errno = ENOTCONN; break; case WSAETIMEDOUT: errno = ETIMEDOUT; break; case WSAECONNREFUSED: errno = ECONNREFUSED; break; case WSAELOOP: errno = ELOOP; break; case WSAEHOSTUNREACH: errno = EHOSTUNREACH; break; default: errno = (err > 10000 && err < 10025) ? err - 10000 : err; break; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/stat-time.h����������������������������������������������������������0000644�0001750�0001750�00000017644�14557510505�014337� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stat-related time functions. Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef STAT_TIME_H #define STAT_TIME_H 1 /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_UNUSED, _GL_ATTRIBUTE_PURE, HAVE_STRUCT_STAT_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <errno.h> #include <stdckdint.h> #include <stddef.h> #include <sys/stat.h> #include <time.h> _GL_INLINE_HEADER_BEGIN #ifndef _GL_STAT_TIME_INLINE # define _GL_STAT_TIME_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST, ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST, if available. ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim for access, status change, data modification, or birth (creation) time respectively. These macros are private to stat-time.h. */ #if _GL_WINDOWS_STAT_TIMESPEC || defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC # if _GL_WINDOWS_STAT_TIMESPEC || defined TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC # define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim) # define STAT_TIMESPEC_OFFSETOF(st_xtim) offsetof (struct stat, st_xtim) # else # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec) # endif #elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC # define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec) # define STAT_TIMESPEC_OFFSETOF(st_xtim) offsetof (struct stat, st_xtim##espec) #elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec) #elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec) #endif /* Return the nanosecond component of *ST's access time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_atime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_atim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_atim); # else return 0; # endif } /* Return the nanosecond component of *ST's status change time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_ctime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_ctim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_ctim); # else return 0; # endif } /* Return the nanosecond component of *ST's data modification time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_mtime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_mtim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_mtim); # else return 0; # endif } /* Return the nanosecond component of *ST's birth time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_birthtime_ns (_GL_UNUSED struct stat const *st) { # if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC return STAT_TIMESPEC (st, st_birthtim).tv_nsec; # elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC return STAT_TIMESPEC_NS (st, st_birthtim); # else return 0; # endif } /* Return *ST's access time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_atime (struct stat const *st) { #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_atim); #else return (struct timespec) { .tv_sec = st->st_atime, .tv_nsec = get_stat_atime_ns (st) }; #endif } /* Return *ST's status change time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_ctime (struct stat const *st) { #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_ctim); #else return (struct timespec) { .tv_sec = st->st_ctime, .tv_nsec = get_stat_ctime_ns (st) }; #endif } /* Return *ST's data modification time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_mtime (struct stat const *st) { #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_mtim); #else return (struct timespec) { .tv_sec = st->st_mtime, .tv_nsec = get_stat_mtime_ns (st) }; #endif } /* Return *ST's birth time, if available; otherwise return a value with tv_sec and tv_nsec both equal to -1. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_birthtime (_GL_UNUSED struct stat const *st) { struct timespec t; #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC) t = STAT_TIMESPEC (st, st_birthtim); #elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC t = (struct timespec) { .tv_sec = st->st_birthtime, .tv_nsec = st->st_birthtimensec }; #elif defined _WIN32 && ! defined __CYGWIN__ /* Native Windows platforms (but not Cygwin) put the "file creation time" in st_ctime (!). See <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/stat-functions>. */ # if _GL_WINDOWS_STAT_TIMESPEC t = st->st_ctim; # else t = (struct timespec) { .tv_sec = st->st_ctime }; # endif #else /* Birth time is not supported. */ t = (struct timespec) { .tv_sec = -1, .tv_nsec = -1 }; #endif #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC) /* FreeBSD and NetBSD sometimes signal the absence of knowledge by using zero. Attempt to work around this problem. Alas, this can report failure even for valid timestamps. Also, NetBSD sometimes returns junk in the birth time fields; work around this bug if it is detected. */ if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000)) t = (struct timespec) { .tv_sec = -1, .tv_nsec = -1 }; #endif return t; } /* If a stat-like function returned RESULT, normalize the timestamps in *ST, if this platform suffers from a macOS and Solaris bug where tv_nsec might be negative. Return the adjusted RESULT, setting errno to EOVERFLOW if normalization overflowed. This function is intended to be private to this .h file. */ _GL_STAT_TIME_INLINE int stat_time_normalize (int result, _GL_UNUSED struct stat *st) { #if (((defined __APPLE__ && defined __MACH__) || defined __sun) \ && defined STAT_TIMESPEC_OFFSETOF) if (result == 0) { long int timespec_hz = 1000000000; short int const ts_off[] = { STAT_TIMESPEC_OFFSETOF (st_atim), STAT_TIMESPEC_OFFSETOF (st_mtim), STAT_TIMESPEC_OFFSETOF (st_ctim) }; int i; for (i = 0; i < sizeof ts_off / sizeof *ts_off; i++) { struct timespec *ts = (struct timespec *) ((char *) st + ts_off[i]); long int q = ts->tv_nsec / timespec_hz; long int r = ts->tv_nsec % timespec_hz; if (r < 0) { r += timespec_hz; q--; } ts->tv_nsec = r; /* Overflow is possible, as Solaris 11 stat can yield tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000. */ if (ckd_add (&ts->tv_sec, q, ts->tv_sec)) { errno = EOVERFLOW; return -1; } } } #endif return result; } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif ��������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/stdckdint.in.h�������������������������������������������������������0000644�0001750�0001750�00000002641�14557510505�015013� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stdckdint.h -- checked integer arithmetic Copyright 2022-2024 Free Software Foundation, Inc. This program 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 program 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_STDCKDINT_H #define _GL_STDCKDINT_H #include "intprops-internal.h" /* Store into *R the low-order bits of A + B, A - B, A * B, respectively. Return 1 if the result overflows, 0 otherwise. A, B, and *R can have any integer type other than char, bool, a bit-precise integer type, or an enumeration type. These are like the standard macros introduced in C23, except that arguments should not have side effects. */ #define ckd_add(r, a, b) ((bool) _GL_INT_ADD_WRAPV (a, b, r)) #define ckd_sub(r, a, b) ((bool) _GL_INT_SUBTRACT_WRAPV (a, b, r)) #define ckd_mul(r, a, b) ((bool) _GL_INT_MULTIPLY_WRAPV (a, b, r)) #endif /* _GL_STDCKDINT_H */ �����������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/stddef.in.h����������������������������������������������������������0000644�0001750�0001750�00000015425�14557510505�014301� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues. Copyright (C) 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ /* * POSIX 2008 and ISO C 23 <stddef.h> for platforms that have issues. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html> */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_wchar_t || defined __need_size_t \ || defined __need_ptrdiff_t || defined __need_NULL \ || defined __need_wint_t /* Special invocation convention inside gcc header files. In particular, gcc provides a version of <stddef.h> that blindly redefines NULL even when __need_wint_t was defined, even though wint_t is not normally provided by <stddef.h>. Hence, we must remember if special invocation has ever been used to obtain wint_t, in which case we need to clean up NULL yet again. */ # if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _@GUARD_PREFIX@_STDDEF_WINT_T) # ifdef __need_wint_t # define _@GUARD_PREFIX@_STDDEF_WINT_T # endif # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ /* On TinyCC, make sure that the macros that indicate the special invocation convention get undefined. */ # undef __need_wchar_t # undef __need_size_t # undef __need_ptrdiff_t # undef __need_NULL # undef __need_wint_t # endif #else /* Normal invocation convention. */ # ifndef _@GUARD_PREFIX@_STDDEF_H /* On AIX 7.2, with xlc in 64-bit mode, <stddef.h> defines max_align_t to a type with alignment 4, but 'long' has alignment 8. */ # if defined _AIX && defined __LP64__ && !@HAVE_MAX_ALIGN_T@ # if !GNULIB_defined_max_align_t # ifdef _MAX_ALIGN_T /* /usr/include/stddef.h has already defined max_align_t. Override it. */ typedef long rpl_max_align_t; # define max_align_t rpl_max_align_t # else /* Prevent /usr/include/stddef.h from defining max_align_t. */ typedef long max_align_t; # define _MAX_ALIGN_T # endif # define __CLANG_MAX_ALIGN_T_DEFINED # define GNULIB_defined_max_align_t 1 # endif # endif /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ /* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ # if (@REPLACE_NULL@ \ && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _@GUARD_PREFIX@_STDDEF_WINT_T)) # undef NULL # ifdef __cplusplus /* ISO C++ says that the macro NULL must expand to an integer constant expression, hence '((void *) 0)' is not allowed in C++. */ # if __GNUG__ >= 3 /* GNU C++ has a __null macro that behaves like an integer ('int' or 'long') but has the same size as a pointer. Use that, to avoid warnings. */ # define NULL __null # else # define NULL 0L # endif # else # define NULL ((void *) 0) # endif # endif # ifndef _@GUARD_PREFIX@_STDDEF_H # define _@GUARD_PREFIX@_STDDEF_H /* This file uses _Noreturn, _GL_ATTRIBUTE_NOTHROW. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ #ifndef _GL_ATTRIBUTE_NOTHROW # if defined __cplusplus # if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4 # if __cplusplus >= 201103L # define _GL_ATTRIBUTE_NOTHROW noexcept (true) # else # define _GL_ATTRIBUTE_NOTHROW throw () # endif # else # define _GL_ATTRIBUTE_NOTHROW # endif # else # if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ # define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) # else # define _GL_ATTRIBUTE_NOTHROW # endif # endif #endif /* Some platforms lack wchar_t. */ #if !@HAVE_WCHAR_T@ # define wchar_t int #endif /* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is a hack in case the configure-time test was done with g++ even though we are currently compiling with gcc. On MSVC, max_align_t is defined only in C++ mode, after <cstddef> was included. Its definition is good since it has an alignment of 8 (on x86 and x86_64). Similarly on OS/2 kLIBC. */ #if (defined _MSC_VER || (defined __KLIBC__ && !defined __LIBCN__)) \ && defined __cplusplus # include <cstddef> #else # if ! (@HAVE_MAX_ALIGN_T@ || (defined _GCC_MAX_ALIGN_T && !defined __clang__)) # if !GNULIB_defined_max_align_t /* On the x86, the maximum storage alignment of double, long, etc. is 4, but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8, and the C11 standard allows this. Work around this problem by using __alignof__ (which returns 8 for double) rather than _Alignof (which returns 4), and align each union member accordingly. */ # if defined __GNUC__ || (__clang_major__ >= 4) # define _GL_STDDEF_ALIGNAS(type) \ __attribute__ ((__aligned__ (__alignof__ (type)))) # else # define _GL_STDDEF_ALIGNAS(type) /* */ # endif typedef union { char *__p _GL_STDDEF_ALIGNAS (char *); double __d _GL_STDDEF_ALIGNAS (double); long double __ld _GL_STDDEF_ALIGNAS (long double); long int __i _GL_STDDEF_ALIGNAS (long int); } rpl_max_align_t; # define max_align_t rpl_max_align_t # define __CLANG_MAX_ALIGN_T_DEFINED # define GNULIB_defined_max_align_t 1 # endif # endif #endif /* ISO C 23 § 7.21.1 The unreachable macro */ #ifndef unreachable /* Code borrowed from verify.h. */ # ifndef _GL_HAS_BUILTIN_UNREACHABLE # if defined __clang_major__ && __clang_major__ < 5 # define _GL_HAS_BUILTIN_UNREACHABLE 0 # elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__) # define _GL_HAS_BUILTIN_UNREACHABLE 1 # elif defined __has_builtin # define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) # else # define _GL_HAS_BUILTIN_UNREACHABLE 0 # endif # endif # if _GL_HAS_BUILTIN_UNREACHABLE # define unreachable() __builtin_unreachable () # elif 1200 <= _MSC_VER # define unreachable() __assume (0) # else /* Declare abort(), without including <stdlib.h>. */ extern # if defined __cplusplus "C" # endif _Noreturn void abort (void) # if defined __cplusplus && (__GLIBC__ >= 2) _GL_ATTRIBUTE_NOTHROW # endif ; # define unreachable() abort () # endif #endif # endif /* _@GUARD_PREFIX@_STDDEF_H */ # endif /* _@GUARD_PREFIX@_STDDEF_H */ #endif /* __need_XXX */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/stdint.in.h����������������������������������������������������������0000644�0001750�0001750�00000055143�14557510505�014336� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2001-2002, 2004-2024 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. This file is part of gnulib. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* * ISO C 99 <stdint.h> for platforms that lack it. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html> */ #ifndef _@GUARD_PREFIX@_STDINT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* When including a system file that in turn includes <inttypes.h>, use the system <inttypes.h>, not our substitute. This avoids problems with (for example) VMS, whose <sys/bitypes.h> includes <inttypes.h>. */ #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* On Android (Bionic libc), <sys/types.h> includes this file before having defined 'time_t'. Therefore in this case avoid including other system header files; just include the system's <stdint.h>. Ideally we should test __BIONIC__ here, but it is only defined after <sys/cdefs.h> has been included; hence test __ANDROID__ instead. */ #if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #else /* Get those types that are already defined in other system include files, so that we can "#define int8_t signed char" below without worrying about a later system include file containing a "typedef signed char int8_t;" that will get messed up by our macro. Our macros should all be consistent with the system versions, except for the "fast" types and macros, which we recommend against using in public interfaces due to compiler differences. */ #if @HAVE_STDINT_H@ # if defined __sgi && ! defined __c99 /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users with "This header file is to be used only for c99 mode compilations" diagnostics. */ # define __STDINT_H__ # endif /* Some pre-C++11 <stdint.h> implementations need this. */ # ifdef __cplusplus # ifndef __STDC_CONSTANT_MACROS # define __STDC_CONSTANT_MACROS 1 # endif # ifndef __STDC_LIMIT_MACROS # define __STDC_LIMIT_MACROS 1 # endif # endif /* Other systems may have an incomplete or buggy <stdint.h>. Include it before <inttypes.h>, since any "#include <stdint.h>" in <inttypes.h> would reinclude us, skipping our contents because _@GUARD_PREFIX@_STDINT_H is defined. The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #endif #if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H #define _@GUARD_PREFIX@_STDINT_H /* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ #include <limits.h> /* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides wint_t. */ #if @GNULIBHEADERS_OVERRIDE_WINT_T@ # undef WINT_MIN # undef WINT_MAX # define WINT_MIN 0x0U # define WINT_MAX 0xffffffffU #endif #if ! @HAVE_C99_STDINT_H@ /* <sys/types.h> defines some of the stdint.h types as well, on glibc, IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>). AIX 5.2 <sys/types.h> isn't needed and causes troubles. Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but relies on the system <stdint.h> definitions, so include <sys/types.h> after @NEXT_STDINT_H@. */ # if @HAVE_SYS_TYPES_H@ && ! defined _AIX # include <sys/types.h> # endif # if @HAVE_INTTYPES_H@ /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. <inttypes.h> also defines intptr_t and uintptr_t. */ # include <inttypes.h> # elif @HAVE_SYS_INTTYPES_H@ /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ # include <sys/inttypes.h> # endif # if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is included by <sys/types.h>. */ # include <sys/bitypes.h> # endif # undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* Minimum and maximum values for an integer type under the usual assumption. Return an unspecified value if BITS == 0, adding a check to pacify picky compilers. */ /* These are separate macros, because if you try to merge these macros into a single one, HP-UX cc rejects the resulting expression in constant expressions. */ # define _STDINT_UNSIGNED_MIN(bits, zero) \ (zero) # define _STDINT_SIGNED_MIN(bits, zero) \ (~ _STDINT_MAX (1, bits, zero)) # define _STDINT_MAX(signed, bits, zero) \ (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) #if !GNULIB_defined_stdint_types /* 7.18.1.1. Exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef int8_t # undef uint8_t typedef signed char gl_int8_t; typedef unsigned char gl_uint8_t; # define int8_t gl_int8_t # define uint8_t gl_uint8_t # undef int16_t # undef uint16_t typedef short int gl_int16_t; typedef unsigned short int gl_uint16_t; # define int16_t gl_int16_t # define uint16_t gl_uint16_t # undef int32_t # undef uint32_t typedef int gl_int32_t; typedef unsigned int gl_uint32_t; # define int32_t gl_int32_t # define uint32_t gl_uint32_t /* If the system defines INT64_MAX, assume int64_t works. That way, if the underlying platform defines int64_t to be a 64-bit long long int, the code below won't mistakenly define it to be a 64-bit long int, which would mess up C++ name mangling. We must use #ifdef rather than #if, to avoid an error with HP-UX 10.20 cc. */ # ifdef INT64_MAX # define GL_INT64_T # else /* Do not undefine int64_t if gnulib is not being used with 64-bit types, since otherwise it breaks platforms like Tandem/NSK. */ # if LONG_MAX >> 31 >> 31 == 1 # undef int64_t typedef long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # elif defined _MSC_VER # undef int64_t typedef __int64 gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # else # undef int64_t typedef long long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # endif # endif # ifdef UINT64_MAX # define GL_UINT64_T # else # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # undef uint64_t typedef unsigned long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # elif defined _MSC_VER # undef uint64_t typedef unsigned __int64 gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # else # undef uint64_t typedef unsigned long long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # endif # endif /* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */ # define _UINT8_T # define _UINT32_T # define _UINT64_T /* 7.18.1.2. Minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef int_least8_t # undef uint_least8_t # undef int_least16_t # undef uint_least16_t # undef int_least32_t # undef uint_least32_t # undef int_least64_t # undef uint_least64_t # define int_least8_t int8_t # define uint_least8_t uint8_t # define int_least16_t int16_t # define uint_least16_t uint16_t # define int_least32_t int32_t # define uint_least32_t uint32_t # ifdef GL_INT64_T # define int_least64_t int64_t # endif # ifdef GL_UINT64_T # define uint_least64_t uint64_t # endif /* 7.18.1.3. Fastest minimum-width integer types */ /* Note: Other <stdint.h> substitutes may define these types differently. It is not recommended to use these types in public header files. */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. The following code normally uses types consistent with glibc, as that lessens the chance of incompatibility with older GNU hosts. */ # undef int_fast8_t # undef uint_fast8_t # undef int_fast16_t # undef uint_fast16_t # undef int_fast32_t # undef uint_fast32_t # undef int_fast64_t # undef uint_fast64_t typedef signed char gl_int_fast8_t; typedef unsigned char gl_uint_fast8_t; # ifdef __sun /* Define types compatible with SunOS 5.10, so that code compiled under earlier SunOS versions works with code compiled under SunOS 5.10. */ typedef int gl_int_fast32_t; typedef unsigned int gl_uint_fast32_t; # else typedef long int gl_int_fast32_t; typedef unsigned long int gl_uint_fast32_t; # endif typedef gl_int_fast32_t gl_int_fast16_t; typedef gl_uint_fast32_t gl_uint_fast16_t; # define int_fast8_t gl_int_fast8_t # define uint_fast8_t gl_uint_fast8_t # define int_fast16_t gl_int_fast16_t # define uint_fast16_t gl_uint_fast16_t # define int_fast32_t gl_int_fast32_t # define uint_fast32_t gl_uint_fast32_t # ifdef GL_INT64_T # define int_fast64_t int64_t # endif # ifdef GL_UINT64_T # define uint_fast64_t uint64_t # endif /* 7.18.1.4. Integer types capable of holding object pointers */ /* kLIBC's <stdint.h> defines _INTPTR_T_DECLARED and needs its own definitions of intptr_t and uintptr_t (which use int and unsigned) to avoid clashes with declarations of system functions like sbrk. Similarly, MinGW WSL-5.4.1 <stdint.h> needs its own intptr_t and uintptr_t to avoid conflicting declarations of system functions like _findclose in <io.h>. */ # if !((defined __KLIBC__ && defined _INTPTR_T_DECLARED) \ || (defined __INTPTR_WIDTH__ \ && __INTPTR_WIDTH__ != (defined _WIN64 ? LLONG_WIDTH : LONG_WIDTH)) \ || defined __MINGW32__) # undef intptr_t # undef uintptr_t # ifdef _WIN64 typedef long long int gl_intptr_t; typedef unsigned long long int gl_uintptr_t; # else typedef long int gl_intptr_t; typedef unsigned long int gl_uintptr_t; # endif # define intptr_t gl_intptr_t # define uintptr_t gl_uintptr_t # endif /* 7.18.1.5. Greatest-width integer types */ /* Note: These types are compiler dependent. It may be unwise to use them in public header files. */ /* If the system defines INTMAX_MAX, assume that intmax_t works, and similarly for UINTMAX_MAX and uintmax_t. This avoids problems with assuming one type where another is used by the system. */ # ifndef INTMAX_MAX # undef INTMAX_C # undef intmax_t # if LONG_MAX >> 30 == 1 typedef long long int gl_intmax_t; # define intmax_t gl_intmax_t # elif defined GL_INT64_T # define intmax_t int64_t # else typedef long int gl_intmax_t; # define intmax_t gl_intmax_t # endif # endif # ifndef UINTMAX_MAX # undef UINTMAX_C # undef uintmax_t # if ULONG_MAX >> 31 == 1 typedef unsigned long long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # elif defined GL_UINT64_T # define uintmax_t uint64_t # else typedef unsigned long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # endif # endif /* Verify that intmax_t and uintmax_t have the same size. Too much code breaks if this is not the case. If this check fails, the reason is likely to be found in the autoconf macros. */ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) ? 1 : -1]; # define GNULIB_defined_stdint_types 1 # endif /* !GNULIB_defined_stdint_types */ /* 7.18.2. Limits of specified-width integer types */ /* 7.18.2.1. Limits of exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef INT8_MIN # undef INT8_MAX # undef UINT8_MAX # define INT8_MIN (~ INT8_MAX) # define INT8_MAX 127 # define UINT8_MAX 255 # undef INT16_MIN # undef INT16_MAX # undef UINT16_MAX # define INT16_MIN (~ INT16_MAX) # define INT16_MAX 32767 # define UINT16_MAX 65535 # undef INT32_MIN # undef INT32_MAX # undef UINT32_MAX # define INT32_MIN (~ INT32_MAX) # define INT32_MAX 2147483647 # define UINT32_MAX 4294967295U # if defined GL_INT64_T && ! defined INT64_MAX /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 evaluates the latter incorrectly in preprocessor expressions. */ # define INT64_MIN (- INTMAX_C (1) << 63) # define INT64_MAX INTMAX_C (9223372036854775807) # endif # if defined GL_UINT64_T && ! defined UINT64_MAX # define UINT64_MAX UINTMAX_C (18446744073709551615) # endif /* 7.18.2.2. Limits of minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef INT_LEAST8_MIN # undef INT_LEAST8_MAX # undef UINT_LEAST8_MAX # define INT_LEAST8_MIN INT8_MIN # define INT_LEAST8_MAX INT8_MAX # define UINT_LEAST8_MAX UINT8_MAX # undef INT_LEAST16_MIN # undef INT_LEAST16_MAX # undef UINT_LEAST16_MAX # define INT_LEAST16_MIN INT16_MIN # define INT_LEAST16_MAX INT16_MAX # define UINT_LEAST16_MAX UINT16_MAX # undef INT_LEAST32_MIN # undef INT_LEAST32_MAX # undef UINT_LEAST32_MAX # define INT_LEAST32_MIN INT32_MIN # define INT_LEAST32_MAX INT32_MAX # define UINT_LEAST32_MAX UINT32_MAX # undef INT_LEAST64_MIN # undef INT_LEAST64_MAX # ifdef GL_INT64_T # define INT_LEAST64_MIN INT64_MIN # define INT_LEAST64_MAX INT64_MAX # endif # undef UINT_LEAST64_MAX # ifdef GL_UINT64_T # define UINT_LEAST64_MAX UINT64_MAX # endif /* 7.18.2.3. Limits of fastest minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. */ # undef INT_FAST8_MIN # undef INT_FAST8_MAX # undef UINT_FAST8_MAX # define INT_FAST8_MIN SCHAR_MIN # define INT_FAST8_MAX SCHAR_MAX # define UINT_FAST8_MAX UCHAR_MAX # undef INT_FAST16_MIN # undef INT_FAST16_MAX # undef UINT_FAST16_MAX # define INT_FAST16_MIN INT_FAST32_MIN # define INT_FAST16_MAX INT_FAST32_MAX # define UINT_FAST16_MAX UINT_FAST32_MAX # undef INT_FAST32_MIN # undef INT_FAST32_MAX # undef UINT_FAST32_MAX # ifdef __sun # define INT_FAST32_MIN INT_MIN # define INT_FAST32_MAX INT_MAX # define UINT_FAST32_MAX UINT_MAX # else # define INT_FAST32_MIN LONG_MIN # define INT_FAST32_MAX LONG_MAX # define UINT_FAST32_MAX ULONG_MAX # endif # undef INT_FAST64_MIN # undef INT_FAST64_MAX # ifdef GL_INT64_T # define INT_FAST64_MIN INT64_MIN # define INT_FAST64_MAX INT64_MAX # endif # undef UINT_FAST64_MAX # ifdef GL_UINT64_T # define UINT_FAST64_MAX UINT64_MAX # endif /* 7.18.2.4. Limits of integer types capable of holding object pointers */ # undef INTPTR_MIN # undef INTPTR_MAX # undef UINTPTR_MAX # ifdef _WIN64 # define INTPTR_MIN LLONG_MIN # define INTPTR_MAX LLONG_MAX # define UINTPTR_MAX ULLONG_MAX # else # define INTPTR_MIN LONG_MIN # define INTPTR_MAX LONG_MAX # define UINTPTR_MAX ULONG_MAX # endif /* 7.18.2.5. Limits of greatest-width integer types */ # ifndef INTMAX_MAX # undef INTMAX_MIN # ifdef INT64_MAX # define INTMAX_MIN INT64_MIN # define INTMAX_MAX INT64_MAX # else # define INTMAX_MIN INT32_MIN # define INTMAX_MAX INT32_MAX # endif # endif # ifndef UINTMAX_MAX # ifdef UINT64_MAX # define UINTMAX_MAX UINT64_MAX # else # define UINTMAX_MAX UINT32_MAX # endif # endif /* 7.18.3. Limits of other integer types */ /* ptrdiff_t limits */ # undef PTRDIFF_MIN # undef PTRDIFF_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l) # define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) # else # define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0) # define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) # endif # else # define PTRDIFF_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # define PTRDIFF_MAX \ _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # endif /* sig_atomic_t limits */ # undef SIG_ATOMIC_MIN # undef SIG_ATOMIC_MAX # if @HAVE_SIGNED_SIG_ATOMIC_T@ # define SIG_ATOMIC_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # else # define SIG_ATOMIC_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # endif # define SIG_ATOMIC_MAX \ _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 0@SIG_ATOMIC_T_SUFFIX@) /* size_t limit */ # undef SIZE_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define SIZE_MAX _STDINT_MAX (0, 64, 0ul) # else # define SIZE_MAX _STDINT_MAX (0, 32, 0ul) # endif # else # define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) # endif /* wchar_t limits */ /* Get WCHAR_MIN, WCHAR_MAX. This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested includes <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes <stdint.h> and assumes its types are already defined. */ # if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) # define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # include <wchar.h> # undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # endif # undef WCHAR_MIN # undef WCHAR_MAX # if @HAVE_SIGNED_WCHAR_T@ # define WCHAR_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # else # define WCHAR_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # endif # define WCHAR_MAX \ _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) /* wint_t limits */ /* If gnulib's <wchar.h> or <wctype.h> overrides wint_t, @WINT_T_SUFFIX@ is not accurate, therefore use the definitions from above. */ # if !@GNULIBHEADERS_OVERRIDE_WINT_T@ # undef WINT_MIN # undef WINT_MAX # if @HAVE_SIGNED_WINT_T@ # define WINT_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # else # define WINT_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # endif # define WINT_MAX \ _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # endif /* 7.18.4. Macros for integer constants */ /* 7.18.4.1. Macros for minimum-width integer constants */ /* According to ISO C 99 Technical Corrigendum 1 */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ # undef INT8_C # undef UINT8_C # define INT8_C(x) x # define UINT8_C(x) x # undef INT16_C # undef UINT16_C # define INT16_C(x) x # define UINT16_C(x) x # undef INT32_C # undef UINT32_C # define INT32_C(x) x # define UINT32_C(x) x ## U # undef INT64_C # undef UINT64_C # if LONG_MAX >> 31 >> 31 == 1 # define INT64_C(x) x##L # elif defined _MSC_VER # define INT64_C(x) x##i64 # else # define INT64_C(x) x##LL # endif # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # define UINT64_C(x) x##UL # elif defined _MSC_VER # define UINT64_C(x) x##ui64 # else # define UINT64_C(x) x##ULL # endif /* 7.18.4.2. Macros for greatest-width integer constants */ # ifndef INTMAX_C # if LONG_MAX >> 30 == 1 # define INTMAX_C(x) x##LL # elif defined GL_INT64_T # define INTMAX_C(x) INT64_C(x) # else # define INTMAX_C(x) x##L # endif # endif # ifndef UINTMAX_C # if ULONG_MAX >> 31 == 1 # define UINTMAX_C(x) x##ULL # elif defined GL_UINT64_T # define UINTMAX_C(x) UINT64_C(x) # else # define UINTMAX_C(x) x##UL # endif # endif #endif /* !@HAVE_C99_STDINT_H@ */ /* Macros specified by ISO/IEC TS 18661-1:2014. */ #if (!defined UINTMAX_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) # ifdef INT8_MAX # define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) # endif # ifdef UINT8_MAX # define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) # endif # ifdef INT16_MAX # define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) # endif # ifdef UINT16_MAX # define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) # endif # ifdef INT32_MAX # define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) # endif # ifdef UINT32_MAX # define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) # endif # ifdef INT64_MAX # define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) # endif # ifdef UINT64_MAX # define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) # endif # define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) # define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) # define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) # define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) # define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) # define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) # define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) # define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) # define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) # define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) # define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) # define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) # define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) # define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) # define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) # define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) # define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) # define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) # define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) # define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) # define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) # define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) # define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) # ifdef WINT_MAX # define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) # endif # ifdef SIG_ATOMIC_MAX # define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) # endif #endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ #endif /* _@GUARD_PREFIX@_STDINT_H */ #endif /* !(defined __ANDROID__ && ...) */ #endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/stdio.in.h�����������������������������������������������������������0000644�0001750�0001750�00000202664�14557510505�014155� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <stdio.h>. Copyright (C) 2004, 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H /* Special invocation convention: - Inside glibc header files. - On OSF/1 5.1 we have a sequence of nested includes <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> -> <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>. In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDIO_H /* Suppress macOS deprecation warnings for sprintf and vsprintf. */ #if (defined __APPLE__ && defined __MACH__) && !defined _POSIX_C_SOURCE # ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ # include <AvailabilityMacros.h> # endif # if (defined MAC_OS_X_VERSION_MIN_REQUIRED \ && 130000 <= MAC_OS_X_VERSION_MIN_REQUIRED) # define _POSIX_C_SOURCE 200809L # define _GL_DEFINED__POSIX_C_SOURCE # endif #endif #define _GL_ALREADY_INCLUDING_STDIO_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #undef _GL_ALREADY_INCLUDING_STDIO_H #ifdef _GL_DEFINED__POSIX_C_SOURCE # undef _GL_DEFINED__POSIX_C_SOURCE # undef _POSIX_C_SOURCE #endif #ifndef _@GUARD_PREFIX@_STDIO_H #define _@GUARD_PREFIX@_STDIO_H /* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_FORMAT, _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NOTHROW, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Get va_list. Needed on many systems, including glibc 2.8. */ #include <stdarg.h> #include <stddef.h> /* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 and eglibc 2.11.2. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* Solaris 10 and NetBSD 7.0 declare renameat in <unistd.h>, not in <stdio.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \ && ! defined __GLIBC__ # include <unistd.h> #endif /* Android 4.3 declares renameat in <sys/stat.h>, not in <stdio.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ && ! defined __GLIBC__ # include <sys/stat.h> #endif /* MSVC declares 'perror' in <stdlib.h>, not in <stdio.h>. We must include it before we #define perror rpl_perror. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include <stdlib.h> #endif /* MSVC declares 'remove' in <io.h>, not in <stdio.h>. We must include it before we #define remove rpl_remove. */ /* MSVC declares 'rename' in <io.h>, not in <stdio.h>. We must include it before we #define rename rpl_rename. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include <io.h> #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #ifndef _GL_ATTRIBUTE_FORMAT # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || defined __clang__ # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) # else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ # endif #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ #ifndef _GL_ATTRIBUTE_NOTHROW # if defined __cplusplus # if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4 # if __cplusplus >= 201103L # define _GL_ATTRIBUTE_NOTHROW noexcept (true) # else # define _GL_ATTRIBUTE_NOTHROW throw () # endif # else # define _GL_ATTRIBUTE_NOTHROW # endif # else # if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ # define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) # else # define _GL_ATTRIBUTE_NOTHROW # endif # endif #endif /* An __attribute__ __format__ specifier for a function that takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD */ /* __gnu_printf__ is supported in GCC >= 4.4. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __gnu_printf__ #else # define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __printf__ #endif /* An __attribute__ __format__ specifier for a function that takes a format string and arguments, where the format string directives are the ones of the system printf(), rather than the ones standardized by ISO C99 and POSIX. _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM */ /* On mingw, Gnulib sets __USE_MINGW_ANSI_STDIO in order to get closer to the standards. The macro GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU indicates whether this change is effective. On older mingw, it is not. */ #if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU # define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD #else # define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM __printf__ #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, formatstring_parameter, first_argument)) /* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD, except that it indicates to GCC that the supported format string directives are the ones of the system printf(), rather than the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, formatstring_parameter, first_argument)) /* _GL_ATTRIBUTE_FORMAT_SCANF indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, except that it indicates to GCC that the supported format string directives are the ones of the system scanf(), rather than the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Macros for stringification. */ #define _GL_STDIO_STRINGIZE(token) #token #define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && defined __GNUC__ && defined __STDC__) # undef putc_unlocked #endif /* Maximum number of characters produced by printing a NaN value. */ #ifndef _PRINTF_NAN_LEN_MAX # if defined __FreeBSD__ || defined __DragonFly__ \ || defined __NetBSD__ \ || (defined __APPLE__ && defined __MACH__) /* On BSD systems, a NaN value prints as just "nan", without a sign. */ # define _PRINTF_NAN_LEN_MAX 3 # elif (__GLIBC__ >= 2) || MUSL_LIBC || defined __OpenBSD__ || defined __sun || defined __CYGWIN__ /* glibc, musl libc, OpenBSD, Solaris libc, and Cygwin produce "[-]nan". */ # define _PRINTF_NAN_LEN_MAX 4 # elif defined _AIX /* AIX produces "[-]NaNQ". */ # define _PRINTF_NAN_LEN_MAX 5 # elif defined _WIN32 && !defined __CYGWIN__ /* On native Windows, the output can be: - with MSVC ucrt: "[-]nan" or "[-]nan(ind)" or "[-]nan(snan)", - with mingw: "[-]1.#IND" or "[-]1.#QNAN". */ # define _PRINTF_NAN_LEN_MAX 10 # elif defined __sgi /* On IRIX, the output typically is "[-]nan0xNNNNNNNN" with 8 hexadecimal digits. */ # define _PRINTF_NAN_LEN_MAX 14 # else /* We don't know, but 32 should be a safe maximum. */ # define _PRINTF_NAN_LEN_MAX 32 # endif #endif #if @GNULIB_DPRINTF@ # if @REPLACE_DPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dprintf rpl_dprintf # endif _GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *restrict format, ...)); # else # if !@HAVE_DPRINTF@ _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (dprintf); # endif #elif defined GNULIB_POSIXCHECK # undef dprintf # if HAVE_RAW_DECL_DPRINTF _GL_WARN_ON_USE (dprintf, "dprintf is unportable - " "use gnulib module dprintf for portability"); # endif #endif #if @GNULIB_FCLOSE@ /* Close STREAM and its underlying file descriptor. */ # if @REPLACE_FCLOSE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fclose rpl_fclose # endif _GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fclose); # endif #elif defined GNULIB_POSIXCHECK # undef fclose /* Assume fclose is always declared. */ _GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " "use gnulib module fclose for portable POSIX compliance"); #endif #if @GNULIB_MDA_FCLOSEALL@ /* On native Windows, map 'fcloseall' to '_fcloseall', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fcloseall on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcloseall # define fcloseall _fcloseall # endif _GL_CXXALIAS_MDA (fcloseall, int, (void)); # else # if @HAVE_DECL_FCLOSEALL@ # if defined __FreeBSD__ || defined __DragonFly__ _GL_CXXALIAS_SYS (fcloseall, void, (void)); # else _GL_CXXALIAS_SYS (fcloseall, int, (void)); # endif # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_FCLOSEALL@ _GL_CXXALIASWARN (fcloseall); # endif #endif #if @GNULIB_FDOPEN@ # if @REPLACE_FDOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen rpl_fdopen # endif _GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); _GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen _fdopen # endif _GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (fdopen, FILE *, (int fd, const char *mode) _GL_ATTRIBUTE_NOTHROW _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); # else _GL_FUNCDECL_SYS (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); # endif # endif _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif _GL_CXXALIASWARN (fdopen); #else # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fdopen /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (fdopen, FILE *, (int fd, const char *mode) _GL_ATTRIBUTE_NOTHROW _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); # else _GL_FUNCDECL_SYS (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); # endif # endif # if defined GNULIB_POSIXCHECK # undef fdopen /* Assume fdopen is always declared. */ _GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " "use gnulib module fdopen for portability"); # elif @GNULIB_MDA_FDOPEN@ /* On native Windows, map 'fdopen' to '_fdopen', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fdopen always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen _fdopen # endif _GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode)); # else _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif _GL_CXXALIASWARN (fdopen); # endif #endif #if @GNULIB_FFLUSH@ /* Flush all pending data on STREAM according to POSIX rules. Both output and seekable input streams are supported. Note! LOSS OF DATA can occur if fflush is applied on an input stream that is _not_seekable_ or on an update stream that is _not_seekable_ and in which the most recent operation was input. Seekability can be tested with lseek(fileno(fp),0,SEEK_CUR). */ # if @REPLACE_FFLUSH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fflush rpl_fflush # endif _GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); _GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); # else _GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fflush); # endif #elif defined GNULIB_POSIXCHECK # undef fflush /* Assume fflush is always declared. */ _GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " "use gnulib module fflush for portable POSIX compliance"); #endif #if @GNULIB_FGETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgetc # define fgetc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fgetc); # endif #endif #if @GNULIB_FGETS@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgets # define fgets rpl_fgets # endif _GL_FUNCDECL_RPL (fgets, char *, (char *restrict s, int n, FILE *restrict stream) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (fgets, char *, (char *restrict s, int n, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fgets, char *, (char *restrict s, int n, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fgets); # endif #endif #if @GNULIB_MDA_FILENO@ /* On native Windows, map 'fileno' to '_fileno', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fileno always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fileno # define fileno _fileno # endif _GL_CXXALIAS_MDA (fileno, int, (FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fileno, int, (FILE *restrict stream)); # endif _GL_CXXALIASWARN (fileno); #endif #if @GNULIB_FOPEN@ # if (@GNULIB_FOPEN@ && @REPLACE_FOPEN@) \ || (@GNULIB_FOPEN_GNU@ && @REPLACE_FOPEN_FOR_FOPEN_GNU@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fopen # define fopen rpl_fopen # endif _GL_FUNCDECL_RPL (fopen, FILE *, (const char *restrict filename, const char *restrict mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); _GL_CXXALIAS_RPL (fopen, FILE *, (const char *restrict filename, const char *restrict mode)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fopen, FILE *, (const char *restrict filename, const char *restrict mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif _GL_CXXALIAS_SYS (fopen, FILE *, (const char *restrict filename, const char *restrict mode)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fopen); # endif #else # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fopen /* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fopen, FILE *, (const char *restrict filename, const char *restrict mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif # if defined GNULIB_POSIXCHECK # undef fopen /* Assume fopen is always declared. */ _GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " "use gnulib module fopen for portability"); # endif #endif #if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ # if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fprintf rpl_fprintf # endif # define GNULIB_overrides_fprintf 1 # if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (fprintf, int, (FILE *restrict fp, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (fprintf, int, (FILE *restrict fp, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (fprintf, int, (FILE *restrict fp, const char *restrict format, ...)); # else _GL_CXXALIAS_SYS (fprintf, int, (FILE *restrict fp, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fprintf); # endif #endif #if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_fprintf # undef fprintf # endif /* Assume fprintf is always declared. */ _GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " "use gnulib module fprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_FPURGE@ /* Discard all pending buffered I/O data on STREAM. STREAM must not be wide-character oriented. When discarding pending output, the file position is set back to where it was before the write calls. When discarding pending input, the file position is advanced to match the end of the previously read input. Return 0 if successful. Upon error, return -1 and set errno. */ # if @REPLACE_FPURGE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fpurge rpl_fpurge # endif _GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); # else # if !@HAVE_DECL_FPURGE@ _GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); # endif _GL_CXXALIASWARN (fpurge); #elif defined GNULIB_POSIXCHECK # undef fpurge # if HAVE_RAW_DECL_FPURGE _GL_WARN_ON_USE (fpurge, "fpurge is not always present - " "use gnulib module fpurge for portability"); # endif #endif #if @GNULIB_FPUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputc # define fputc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fputc); # endif #endif #if @GNULIB_FPUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputs # define fputs rpl_fputs # endif _GL_FUNCDECL_RPL (fputs, int, (const char *restrict string, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fputs, int, (const char *restrict string, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fputs, int, (const char *restrict string, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fputs); # endif #endif #if @GNULIB_FREAD@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fread # define fread rpl_fread # endif _GL_FUNCDECL_RPL (fread, size_t, (void *restrict ptr, size_t s, size_t n, FILE *restrict stream) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (fread, size_t, (void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fread, size_t, (void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fread); # endif #endif #if @GNULIB_FREOPEN@ # if @REPLACE_FREOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef freopen # define freopen rpl_freopen # endif _GL_FUNCDECL_RPL (freopen, FILE *, (const char *restrict filename, const char *restrict mode, FILE *restrict stream) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (freopen, FILE *, (const char *restrict filename, const char *restrict mode, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (freopen, FILE *, (const char *restrict filename, const char *restrict mode, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (freopen); # endif #elif defined GNULIB_POSIXCHECK # undef freopen /* Assume freopen is always declared. */ _GL_WARN_ON_USE (freopen, "freopen on native Windows platforms is not POSIX compliant - " "use gnulib module freopen for portability"); #endif #if @GNULIB_FSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fscanf # define fscanf rpl_fscanf # endif _GL_FUNCDECL_RPL (fscanf, int, (FILE *restrict stream, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fscanf, int, (FILE *restrict stream, const char *restrict format, ...)); # else _GL_CXXALIAS_SYS (fscanf, int, (FILE *restrict stream, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fscanf); # endif #endif /* Set up the following warnings, based on which modules are in use. GNU Coding Standards discourage the use of fseek, since it imposes an arbitrary limitation on some 32-bit hosts. Remember that the fseek module depends on the fseeko module, so we only have three cases to consider: 1. The developer is not using either module. Issue a warning under GNULIB_POSIXCHECK for both functions, to remind them that both functions have bugs on some systems. _GL_NO_LARGE_FILES has no impact on this warning. 2. The developer is using both modules. They may be unaware of the arbitrary limitations of fseek, so issue a warning under GNULIB_POSIXCHECK. On the other hand, they may be using both modules intentionally, so the developer can define _GL_NO_LARGE_FILES in the compilation units where the use of fseek is safe, to silence the warning. 3. The developer is using the fseeko module, but not fseek. Gnulib guarantees that fseek will still work around platform bugs in that case, but we presume that the developer is aware of the pitfalls of fseek and was trying to avoid it, so issue a warning even when GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be defined to silence the warning in particular compilation units. In C++ compilations with GNULIB_NAMESPACE, in order to avoid that fseek gets defined as a macro, it is recommended that the developer uses the fseek module, even if he is not calling the fseek function. Most gnulib clients that perform stream operations should fall into category 3. */ #if @GNULIB_FSEEK@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 2, above. */ # undef fseek # endif # if @REPLACE_FSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseek # define fseek rpl_fseek # endif _GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); # else _GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fseek); # endif #endif #if @GNULIB_FSEEKO@ # if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 3, above. */ # undef fseek # endif # if @REPLACE_FSEEKO@ /* Provide an fseeko function that is aware of a preceding fflush(), and which detects pipes. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseeko # define fseeko rpl_fseeko # endif _GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); # else # if ! @HAVE_DECL_FSEEKO@ _GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); # endif _GL_CXXALIASWARN (fseeko); #elif defined GNULIB_POSIXCHECK # define _GL_FSEEK_WARN /* Category 1, above. */ # undef fseek # undef fseeko # if HAVE_RAW_DECL_FSEEKO _GL_WARN_ON_USE (fseeko, "fseeko is unportable - " "use gnulib module fseeko for portability"); # endif #endif #ifdef _GL_FSEEK_WARN # undef _GL_FSEEK_WARN /* Here, either fseek is undefined (but C89 guarantees that it is declared), or it is defined as rpl_fseek (declared above). */ _GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " "on 32-bit platforms - " "use fseeko function for handling of large files"); #endif /* ftell, ftello. See the comments on fseek/fseeko. */ #if @GNULIB_FTELL@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 2, above. */ # undef ftell # endif # if @REPLACE_FTELL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftell # define ftell rpl_ftell # endif _GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); # else _GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ftell); # endif #endif #if @GNULIB_FTELLO@ # if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 3, above. */ # undef ftell # endif # if @REPLACE_FTELLO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftello # define ftello rpl_ftello # endif _GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); # else # if ! @HAVE_DECL_FTELLO@ _GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); # endif _GL_CXXALIASWARN (ftello); #elif defined GNULIB_POSIXCHECK # define _GL_FTELL_WARN /* Category 1, above. */ # undef ftell # undef ftello # if HAVE_RAW_DECL_FTELLO _GL_WARN_ON_USE (ftello, "ftello is unportable - " "use gnulib module ftello for portability"); # endif #endif #ifdef _GL_FTELL_WARN # undef _GL_FTELL_WARN /* Here, either ftell is undefined (but C89 guarantees that it is declared), or it is defined as rpl_ftell (declared above). */ _GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " "on 32-bit platforms - " "use ftello function for handling of large files"); #endif #if @GNULIB_FWRITE@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fwrite # define fwrite rpl_fwrite # endif _GL_FUNCDECL_RPL (fwrite, size_t, (const void *restrict ptr, size_t s, size_t n, FILE *restrict stream) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (fwrite, size_t, (const void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fwrite, size_t, (const void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); /* Work around bug 11959 when fortifying glibc 2.4 through 2.15 <https://sourceware.org/bugzilla/show_bug.cgi?id=11959>, which sometimes causes an unwanted diagnostic for fwrite calls. This affects only function declaration attributes under certain versions of gcc and clang, and is not needed for C++. */ # if (0 < __USE_FORTIFY_LEVEL \ && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ && !defined __cplusplus) # undef fwrite # undef fwrite_unlocked extern size_t __REDIRECT (rpl_fwrite, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite); extern size_t __REDIRECT (rpl_fwrite_unlocked, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite_unlocked); # define fwrite rpl_fwrite # define fwrite_unlocked rpl_fwrite_unlocked # endif # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fwrite); # endif #endif #if @GNULIB_GETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getc # define getc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (getc, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getc); # endif #endif #if @GNULIB_GETCHAR@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getchar # define getchar rpl_getchar # endif _GL_FUNCDECL_RPL (getchar, int, (void)); _GL_CXXALIAS_RPL (getchar, int, (void)); # else _GL_CXXALIAS_SYS (getchar, int, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getchar); # endif #endif #if @GNULIB_GETDELIM@ /* Read input, up to (and including) the next occurrence of DELIMITER, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETDELIM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdelim # define getdelim rpl_getdelim # endif _GL_FUNCDECL_RPL (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 4))); _GL_CXXALIAS_RPL (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream)); # else # if !@HAVE_DECL_GETDELIM@ _GL_FUNCDECL_SYS (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 4))); # endif _GL_CXXALIAS_SYS (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getdelim); # endif #elif defined GNULIB_POSIXCHECK # undef getdelim # if HAVE_RAW_DECL_GETDELIM _GL_WARN_ON_USE (getdelim, "getdelim is unportable - " "use gnulib module getdelim for portability"); # endif #endif #if @GNULIB_GETLINE@ /* Read a line, up to (and including) the next newline, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETLINE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getline # define getline rpl_getline # endif _GL_FUNCDECL_RPL (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream)); # else # if !@HAVE_DECL_GETLINE@ _GL_FUNCDECL_SYS (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 && @HAVE_DECL_GETLINE@ _GL_CXXALIASWARN (getline); # endif #elif defined GNULIB_POSIXCHECK # undef getline # if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is unportable - " "use gnulib module getline for portability"); # endif #endif /* It is very rare that the developer ever has full control of stdin, so any use of gets warrants an unconditional warning; besides, C11 removed it. */ #undef gets #if HAVE_RAW_DECL_GETS && !defined __cplusplus _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); #endif #if @GNULIB_MDA_GETW@ /* On native Windows, map 'getw' to '_getw', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::getw always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getw # define getw _getw # endif _GL_CXXALIAS_MDA (getw, int, (FILE *restrict stream)); # else # if @HAVE_DECL_GETW@ # if defined __APPLE__ && defined __MACH__ /* The presence of the declaration depends on _POSIX_C_SOURCE. */ _GL_FUNCDECL_SYS (getw, int, (FILE *restrict stream)); # endif _GL_CXXALIAS_SYS (getw, int, (FILE *restrict stream)); # endif # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getw); # endif #endif #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ struct obstack; /* Grow an obstack with formatted output. Return the number of bytes added to OBS. No trailing nul byte is added, and the object should be closed with obstack_finish before use. Upon memory allocation error, call obstack_alloc_failed_handler. Upon other error, return -1. */ # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_printf rpl_obstack_printf # endif _GL_FUNCDECL_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # endif _GL_CXXALIASWARN (obstack_printf); # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_vprintf rpl_obstack_vprintf # endif _GL_FUNCDECL_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # endif _GL_CXXALIASWARN (obstack_vprintf); #endif #if @GNULIB_PCLOSE@ # if !@HAVE_PCLOSE@ _GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); _GL_CXXALIASWARN (pclose); #elif defined GNULIB_POSIXCHECK # undef pclose # if HAVE_RAW_DECL_PCLOSE _GL_WARN_ON_USE (pclose, "pclose is unportable - " "use gnulib module pclose for more portability"); # endif #endif #if @GNULIB_PERROR@ /* Print a message to standard error, describing the value of ERRNO, (if STRING is not NULL and not empty) prefixed with STRING and ": ", and terminated with a newline. */ # if @REPLACE_PERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define perror rpl_perror # endif _GL_FUNCDECL_RPL (perror, void, (const char *string)); _GL_CXXALIAS_RPL (perror, void, (const char *string)); # else _GL_CXXALIAS_SYS (perror, void, (const char *string)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (perror); # endif #elif defined GNULIB_POSIXCHECK # undef perror /* Assume perror is always declared. */ _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " "use gnulib module perror for portability"); #endif #if @GNULIB_POPEN@ # if @REPLACE_POPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef popen # define popen rpl_popen # endif _GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) _GL_ATTRIBUTE_MALLOC); _GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); # else # if !@HAVE_POPEN@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) _GL_ATTRIBUTE_MALLOC); # endif _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); # endif _GL_CXXALIASWARN (popen); #else # if @GNULIB_PCLOSE@ && __GNUC__ >= 11 && !defined popen /* For -Wmismatched-dealloc: Associate popen with pclose or rpl_pclose. */ _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) _GL_ATTRIBUTE_MALLOC); # endif # if defined GNULIB_POSIXCHECK # undef popen # if HAVE_RAW_DECL_POPEN _GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " "use gnulib module popen or pipe for more portability"); # endif # endif #endif #if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ # if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if defined __GNUC__ || defined __clang__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) /* Don't break __attribute__((format(printf,M,N))). */ # define printf __printf__ # endif # if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define printf rpl_printf # endif _GL_FUNCDECL_RPL (printf, int, (const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (printf, int, (const char *restrict format, ...)); # endif # define GNULIB_overrides_printf 1 # else _GL_CXXALIAS_SYS (printf, int, (const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (printf); # endif #endif #if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_printf # undef printf # endif /* Assume printf is always declared. */ _GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " "use gnulib module printf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_PUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putc # define putc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (putc); # endif #endif #if @GNULIB_PUTCHAR@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putchar # define putchar rpl_putchar # endif _GL_FUNCDECL_RPL (putchar, int, (int c)); _GL_CXXALIAS_RPL (putchar, int, (int c)); # else _GL_CXXALIAS_SYS (putchar, int, (int c)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (putchar); # endif #endif #if @GNULIB_PUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef puts # define puts rpl_puts # endif _GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (puts, int, (const char *string)); # else _GL_CXXALIAS_SYS (puts, int, (const char *string)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (puts); # endif #endif #if @GNULIB_MDA_PUTW@ /* On native Windows, map 'putw' to '_putw', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::putw always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putw # define putw _putw # endif _GL_CXXALIAS_MDA (putw, int, (int w, FILE *restrict stream)); # else # if @HAVE_DECL_PUTW@ # if defined __APPLE__ && defined __MACH__ /* The presence of the declaration depends on _POSIX_C_SOURCE. */ _GL_FUNCDECL_SYS (putw, int, (int w, FILE *restrict stream)); # endif _GL_CXXALIAS_SYS (putw, int, (int w, FILE *restrict stream)); # endif # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (putw); # endif #endif #if @GNULIB_REMOVE@ # if @REPLACE_REMOVE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remove # define remove rpl_remove # endif _GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (remove, int, (const char *name)); # else _GL_CXXALIAS_SYS (remove, int, (const char *name)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (remove); # endif #elif defined GNULIB_POSIXCHECK # undef remove /* Assume remove is always declared. */ _GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " "use gnulib module remove for more portability"); #endif #if @GNULIB_RENAME@ # if @REPLACE_RENAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rename # define rename rpl_rename # endif _GL_FUNCDECL_RPL (rename, int, (const char *old_filename, const char *new_filename) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (rename, int, (const char *old_filename, const char *new_filename)); # else _GL_CXXALIAS_SYS (rename, int, (const char *old_filename, const char *new_filename)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (rename); # endif #elif defined GNULIB_POSIXCHECK # undef rename /* Assume rename is always declared. */ _GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " "use gnulib module rename for more portability"); #endif #if @GNULIB_RENAMEAT@ # if @REPLACE_RENAMEAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef renameat # define renameat rpl_renameat # endif _GL_FUNCDECL_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # else # if !@HAVE_RENAMEAT@ _GL_FUNCDECL_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # endif _GL_CXXALIASWARN (renameat); #elif defined GNULIB_POSIXCHECK # undef renameat # if HAVE_RAW_DECL_RENAMEAT _GL_WARN_ON_USE (renameat, "renameat is not portable - " "use gnulib module renameat for portability"); # endif #endif #if @GNULIB_SCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if defined __GNUC__ || defined __clang__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf /* Don't break __attribute__((format(scanf,M,N))). */ # define scanf __scanf__ # endif _GL_FUNCDECL_RPL_1 (__scanf__, int, (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *restrict format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf # define scanf rpl_scanf # endif _GL_FUNCDECL_RPL (scanf, int, (const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (scanf, int, (const char *restrict format, ...)); # endif # else _GL_CXXALIAS_SYS (scanf, int, (const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (scanf); # endif #endif #if @GNULIB_SNPRINTF@ # if @REPLACE_SNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define snprintf rpl_snprintf # endif # define GNULIB_overrides_snprintf 1 _GL_FUNCDECL_RPL (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...)); # else # if !@HAVE_DECL_SNPRINTF@ _GL_FUNCDECL_SYS (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (snprintf); # endif #elif defined GNULIB_POSIXCHECK # undef snprintf # if HAVE_RAW_DECL_SNPRINTF _GL_WARN_ON_USE (snprintf, "snprintf is unportable - " "use gnulib module snprintf for portability"); # endif #endif /* Some people would argue that all sprintf uses should be warned about (for example, OpenBSD issues a link warning for it), since it can cause security holes due to buffer overruns. However, we believe that sprintf can be used safely, and is more efficient than snprintf in those safe cases; and as proof of our belief, we use sprintf in several gnulib modules. So this header intentionally avoids adding a warning to sprintf except when GNULIB_POSIXCHECK is defined. */ #if @GNULIB_SPRINTF_POSIX@ # if @REPLACE_SPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define sprintf rpl_sprintf # endif # define GNULIB_overrides_sprintf 1 _GL_FUNCDECL_RPL (sprintf, int, (char *restrict str, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (sprintf, int, (char *restrict str, const char *restrict format, ...)); # else _GL_CXXALIAS_SYS (sprintf, int, (char *restrict str, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sprintf); # endif #elif defined GNULIB_POSIXCHECK # undef sprintf /* Assume sprintf is always declared. */ _GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " "use gnulib module sprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_MDA_TEMPNAM@ /* On native Windows, map 'tempnam' to '_tempnam', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::tempnam always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tempnam # define tempnam _tempnam # endif _GL_CXXALIAS_MDA (tempnam, char *, (const char *dir, const char *prefix)); # else _GL_CXXALIAS_SYS (tempnam, char *, (const char *dir, const char *prefix)); # endif _GL_CXXALIASWARN (tempnam); #endif #if @GNULIB_TMPFILE@ # if @REPLACE_TMPFILE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define tmpfile rpl_tmpfile # endif _GL_FUNCDECL_RPL (tmpfile, FILE *, (void) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); _GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (tmpfile, FILE *, (void) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); # endif _GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (tmpfile); # endif #else # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined tmpfile /* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (tmpfile, FILE *, (void) _GL_ATTRIBUTE_DEALLOC (fclose, 1) _GL_ATTRIBUTE_MALLOC); # endif # if defined GNULIB_POSIXCHECK # undef tmpfile # if HAVE_RAW_DECL_TMPFILE _GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " "use gnulib module tmpfile for portability"); # endif # endif #endif #if @GNULIB_VASPRINTF@ /* Write formatted output to a string dynamically allocated with malloc(). If the memory allocation succeeds, store the address of the string in *RESULT and return the number of resulting bytes, excluding the trailing NUL. Upon memory allocation error, or some other error, return -1. */ # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define asprintf rpl_asprintf # endif # define GNULIB_overrides_asprintf _GL_FUNCDECL_RPL (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (asprintf, int, (char **result, const char *format, ...)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (asprintf, int, (char **result, const char *format, ...)); # endif _GL_CXXALIASWARN (asprintf); # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vasprintf rpl_vasprintf # endif # define GNULIB_overrides_vasprintf 1 _GL_FUNCDECL_RPL (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vasprintf, int, (char **result, const char *format, va_list args)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (vasprintf, int, (char **result, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vasprintf); #endif #if @GNULIB_VDPRINTF@ # if @REPLACE_VDPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vdprintf rpl_vdprintf # endif _GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *restrict format, va_list args)); # else # if !@HAVE_VDPRINTF@ _GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on Solaris, the third parameter will likely be __va_list args. */ _GL_CXXALIAS_SYS_CAST (vdprintf, int, (int fd, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vdprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vdprintf # if HAVE_RAW_DECL_VDPRINTF _GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " "use gnulib module vdprintf for portability"); # endif #endif #if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ # if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vfprintf rpl_vfprintf # endif # define GNULIB_overrides_vfprintf 1 # if @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vfprintf); # endif #endif #if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vfprintf # undef vfprintf # endif /* Assume vfprintf is always declared. */ _GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " "use gnulib module vfprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VFSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vfscanf # define vfscanf rpl_vfscanf # endif _GL_FUNCDECL_RPL (vfscanf, int, (FILE *restrict stream, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vfscanf, int, (FILE *restrict stream, const char *restrict format, va_list args)); # else _GL_CXXALIAS_SYS (vfscanf, int, (FILE *restrict stream, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vfscanf); # endif #endif #if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ # if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vprintf rpl_vprintf # endif # define GNULIB_overrides_vprintf 1 # if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 0) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL (vprintf, int, (const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the second parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vprintf); # endif #endif #if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vprintf # undef vprintf # endif /* Assume vprintf is always declared. */ _GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " "use gnulib module vprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vscanf # define vscanf rpl_vscanf # endif _GL_FUNCDECL_RPL (vscanf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (vscanf, int, (const char *restrict format, va_list args)); # else _GL_CXXALIAS_SYS (vscanf, int, (const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vscanf); # endif #endif #if @GNULIB_VSNPRINTF@ # if @REPLACE_VSNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsnprintf rpl_vsnprintf # endif # define GNULIB_overrides_vsnprintf 1 _GL_FUNCDECL_RPL (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args)); # else # if !@HAVE_DECL_VSNPRINTF@ _GL_FUNCDECL_SYS (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vsnprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vsnprintf # if HAVE_RAW_DECL_VSNPRINTF _GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " "use gnulib module vsnprintf for portability"); # endif #endif #if @GNULIB_VSPRINTF_POSIX@ # if @REPLACE_VSPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsprintf rpl_vsprintf # endif # define GNULIB_overrides_vsprintf 1 _GL_FUNCDECL_RPL (vsprintf, int, (char *restrict str, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vsprintf, int, (char *restrict str, const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vsprintf, int, (char *restrict str, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vsprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vsprintf /* Assume vsprintf is always declared. */ _GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " "use gnulib module vsprintf-posix for portable " "POSIX compliance"); #endif #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif ����������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/stdlib.in.h����������������������������������������������������������0000644�0001750�0001750�00000174663�14557510505�014323� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <stdlib.h>. Copyright (C) 1995, 2001-2004, 2006-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_stdlib_h || defined __need_malloc_and_calloc /* Special invocation conventions inside some gnulib header files, and inside some glibc header files, respectively. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDLIB_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #ifndef _@GUARD_PREFIX@_STDLIB_H #define _@GUARD_PREFIX@_STDLIB_H /* This file uses _Noreturn, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* MirBSD 10 defines WEXITSTATUS in <sys/wait.h>, not in <stdlib.h>. */ #if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS # include <sys/wait.h> #endif /* Solaris declares getloadavg() in <sys/loadavg.h>. */ #if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ /* OpenIndiana has a bug: <sys/time.h> must be included before <sys/loadavg.h>. */ # include <sys/time.h> # include <sys/loadavg.h> #endif /* Native Windows platforms declare _mktemp() in <io.h>. */ #if defined _WIN32 && !defined __CYGWIN__ # include <io.h> #endif #if @GNULIB_RANDOM_R@ /* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included from <stdlib.h> if _REENTRANT is defined. Include it whenever we need 'struct random_data'. */ # if @HAVE_RANDOM_H@ # include <random.h> # endif # include <stdint.h> # if !@HAVE_STRUCT_RANDOM_DATA@ /* Define 'struct random_data'. But allow multiple gnulib generated <stdlib.h> replacements to coexist. */ # if !GNULIB_defined_struct_random_data struct random_data { int32_t *fptr; /* Front pointer. */ int32_t *rptr; /* Rear pointer. */ int32_t *state; /* Array of state values. */ int rand_type; /* Type of random number generator. */ int rand_deg; /* Degree of random number generator. */ int rand_sep; /* Distance between front and rear. */ int32_t *end_ptr; /* Pointer behind state table. */ }; # define GNULIB_defined_struct_random_data 1 # endif # endif #endif #if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_MKOSTEMP@ || @GNULIB_MKOSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__) /* On Mac OS X 10.3, only <unistd.h> declares mkstemp. */ /* On Mac OS X 10.5, only <unistd.h> declares mkstemps. */ /* On Mac OS X 10.13, only <unistd.h> declares mkostemp and mkostemps. */ /* On Cygwin 1.7.1, only <unistd.h> declares getsubopt. */ /* But avoid namespace pollution on glibc systems and native Windows. */ # include <unistd.h> #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ #ifndef _GL_ATTRIBUTE_NOTHROW # if defined __cplusplus # if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4 # if __cplusplus >= 201103L # define _GL_ATTRIBUTE_NOTHROW noexcept (true) # else # define _GL_ATTRIBUTE_NOTHROW throw () # endif # else # define _GL_ATTRIBUTE_NOTHROW # endif # else # if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ # define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) # else # define _GL_ATTRIBUTE_NOTHROW # endif # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definition of _Noreturn is copied here. */ /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Some systems do not define EXIT_*, despite otherwise supporting C89. */ #ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 #endif /* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere with proper operation of xargs. */ #ifndef EXIT_FAILURE # define EXIT_FAILURE 1 #elif EXIT_FAILURE != 1 # undef EXIT_FAILURE # define EXIT_FAILURE 1 #endif #if @GNULIB__EXIT@ /* Terminate the current process with the given return code, without running the 'atexit' handlers. */ # if @REPLACE__EXIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef _Exit # define _Exit rpl__Exit # endif _GL_FUNCDECL_RPL (_Exit, _Noreturn void, (int status)); _GL_CXXALIAS_RPL (_Exit, void, (int status)); # else # if !@HAVE__EXIT@ _GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); # endif _GL_CXXALIAS_SYS (_Exit, void, (int status)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (_Exit); # endif #elif defined GNULIB_POSIXCHECK # undef _Exit # if HAVE_RAW_DECL__EXIT _GL_WARN_ON_USE (_Exit, "_Exit is unportable - " "use gnulib module _Exit for portability"); # endif #endif #if @GNULIB_FREE_POSIX@ # if @REPLACE_FREE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef free # define free rpl_free # endif # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_FUNCDECL_RPL (free, void, (void *ptr) _GL_ATTRIBUTE_NOTHROW); # else _GL_FUNCDECL_RPL (free, void, (void *ptr)); # endif _GL_CXXALIAS_RPL (free, void, (void *ptr)); # else _GL_CXXALIAS_SYS (free, void, (void *ptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (free); # endif #elif defined GNULIB_POSIXCHECK # undef free /* Assume free is always declared. */ _GL_WARN_ON_USE (free, "free is not future POSIX compliant everywhere - " "use gnulib module free for portability"); #endif /* Allocate memory with indefinite extent and specified alignment. */ #if @GNULIB_ALIGNED_ALLOC@ # if @REPLACE_ALIGNED_ALLOC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef aligned_alloc # define aligned_alloc rpl_aligned_alloc # endif _GL_FUNCDECL_RPL (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (aligned_alloc, void *, (size_t alignment, size_t size)); # else # if @HAVE_ALIGNED_ALLOC@ # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2 _GL_FUNCDECL_SYS (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif _GL_CXXALIAS_SYS (aligned_alloc, void *, (size_t alignment, size_t size)); # endif # endif # if (__GLIBC__ >= 2) && @HAVE_ALIGNED_ALLOC@ _GL_CXXALIASWARN (aligned_alloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined aligned_alloc /* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2 _GL_FUNCDECL_SYS (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif # if defined GNULIB_POSIXCHECK # undef aligned_alloc # if HAVE_RAW_DECL_ALIGNED_ALLOC _GL_WARN_ON_USE (aligned_alloc, "aligned_alloc is not portable - " "use gnulib module aligned_alloc for portability"); # endif # endif #endif #if @GNULIB_ATOLL@ /* Parse a signed decimal integer. Returns the value of the integer. Errors are not detected. */ # if !@HAVE_ATOLL@ _GL_FUNCDECL_SYS (atoll, long long, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (atoll, long long, (const char *string)); _GL_CXXALIASWARN (atoll); #elif defined GNULIB_POSIXCHECK # undef atoll # if HAVE_RAW_DECL_ATOLL _GL_WARN_ON_USE (atoll, "atoll is unportable - " "use gnulib module atoll for portability"); # endif #endif #if @GNULIB_CALLOC_POSIX@ # if (@GNULIB_CALLOC_POSIX@ && @REPLACE_CALLOC_FOR_CALLOC_POSIX@) \ || (@GNULIB_CALLOC_GNU@ && @REPLACE_CALLOC_FOR_CALLOC_GNU@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef calloc # define calloc rpl_calloc # endif _GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2 _GL_FUNCDECL_SYS (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif _GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (calloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined calloc /* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2 _GL_FUNCDECL_SYS (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif # if defined GNULIB_POSIXCHECK # undef calloc /* Assume calloc is always declared. */ _GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " "use gnulib module calloc-posix for portability"); # endif #endif #if @GNULIB_CANONICALIZE_FILE_NAME@ # if @REPLACE_CANONICALIZE_FILE_NAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define canonicalize_file_name rpl_canonicalize_file_name # endif _GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); # else # if !@HAVE_CANONICALIZE_FILE_NAME@ || __GNUC__ >= 11 # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ATTRIBUTE_NOTHROW _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif _GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); # endif # ifndef GNULIB_defined_canonicalize_file_name # define GNULIB_defined_canonicalize_file_name \ (!@HAVE_CANONICALIZE_FILE_NAME@ || @REPLACE_CANONICALIZE_FILE_NAME@) # endif _GL_CXXALIASWARN (canonicalize_file_name); #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined canonicalize_file_name /* For -Wmismatched-dealloc: Associate canonicalize_file_name with free or rpl_free. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ATTRIBUTE_NOTHROW _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif # if defined GNULIB_POSIXCHECK # undef canonicalize_file_name # if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME _GL_WARN_ON_USE (canonicalize_file_name, "canonicalize_file_name is unportable - " "use gnulib module canonicalize-lgpl for portability"); # endif # endif #endif #if @GNULIB_MDA_ECVT@ /* On native Windows, map 'ecvt' to '_ecvt', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::ecvt on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ecvt # define ecvt _ecvt # endif _GL_CXXALIAS_MDA (ecvt, char *, (double number, int ndigits, int *decptp, int *signp)); # else # if @HAVE_DECL_ECVT@ _GL_CXXALIAS_SYS (ecvt, char *, (double number, int ndigits, int *decptp, int *signp)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_ECVT@ _GL_CXXALIASWARN (ecvt); # endif #endif #if @GNULIB_MDA_FCVT@ /* On native Windows, map 'fcvt' to '_fcvt', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fcvt on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcvt # define fcvt _fcvt # endif _GL_CXXALIAS_MDA (fcvt, char *, (double number, int ndigits, int *decptp, int *signp)); # else # if @HAVE_DECL_FCVT@ _GL_CXXALIAS_SYS (fcvt, char *, (double number, int ndigits, int *decptp, int *signp)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_FCVT@ _GL_CXXALIASWARN (fcvt); # endif #endif #if @GNULIB_MDA_GCVT@ /* On native Windows, map 'gcvt' to '_gcvt', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::gcvt on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gcvt # define gcvt _gcvt # endif _GL_CXXALIAS_MDA (gcvt, char *, (double number, int ndigits, char *buf)); # else # if @HAVE_DECL_GCVT@ _GL_CXXALIAS_SYS (gcvt, char *, (double number, int ndigits, char *buf)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_GCVT@ _GL_CXXALIASWARN (gcvt); # endif #endif #if @GNULIB_GETLOADAVG@ /* Store max(NELEM,3) load average numbers in LOADAVG[]. The three numbers are the load average of the last 1 minute, the last 5 minutes, and the last 15 minutes, respectively. LOADAVG is an array of NELEM numbers. */ # if @REPLACE_GETLOADAVG@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getloadavg # define getloadavg rpl_getloadavg # endif _GL_FUNCDECL_RPL (getloadavg, int, (double loadavg[], int nelem) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getloadavg, int, (double loadavg[], int nelem)); # else # if !@HAVE_DECL_GETLOADAVG@ _GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getloadavg); # endif #elif defined GNULIB_POSIXCHECK # undef getloadavg # if HAVE_RAW_DECL_GETLOADAVG _GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " "use gnulib module getloadavg for portability"); # endif #endif #if @GNULIB_GETPROGNAME@ /* Return the base name of the executing program. On native Windows this will usually end in ".exe" or ".EXE". */ # if @REPLACE_GETPROGNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getprogname # define getprogname rpl_getprogname # endif # if @HAVE_DECL_PROGRAM_INVOCATION_NAME@ _GL_FUNCDECL_RPL (getprogname, const char *, (void) _GL_ATTRIBUTE_PURE); # else _GL_FUNCDECL_RPL (getprogname, const char *, (void)); # endif _GL_CXXALIAS_RPL (getprogname, const char *, (void)); # else # if !@HAVE_GETPROGNAME@ # if @HAVE_DECL_PROGRAM_INVOCATION_NAME@ _GL_FUNCDECL_SYS (getprogname, const char *, (void) _GL_ATTRIBUTE_PURE); # else _GL_FUNCDECL_SYS (getprogname, const char *, (void)); # endif # endif _GL_CXXALIAS_SYS (getprogname, const char *, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getprogname); # endif #elif defined GNULIB_POSIXCHECK # undef getprogname # if HAVE_RAW_DECL_GETPROGNAME _GL_WARN_ON_USE (getprogname, "getprogname is unportable - " "use gnulib module getprogname for portability"); # endif #endif #if @GNULIB_GETSUBOPT@ /* Assuming *OPTIONP is a comma separated list of elements of the form "token" or "token=value", getsubopt parses the first of these elements. If the first element refers to a "token" that is member of the given NULL-terminated array of tokens: - It replaces the comma with a NUL byte, updates *OPTIONP to point past the first option and the comma, sets *VALUEP to the value of the element (or NULL if it doesn't contain an "=" sign), - It returns the index of the "token" in the given array of tokens. Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. For more details see the POSIX specification. https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsubopt.html */ # if @REPLACE_GETSUBOPT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getsubopt # define getsubopt rpl_getsubopt # endif _GL_FUNCDECL_RPL (getsubopt, int, (char **optionp, char *const *tokens, char **valuep) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (getsubopt, int, (char **optionp, char *const *tokens, char **valuep)); # else # if !@HAVE_GETSUBOPT@ _GL_FUNCDECL_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getsubopt); # endif #elif defined GNULIB_POSIXCHECK # undef getsubopt # if HAVE_RAW_DECL_GETSUBOPT _GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " "use gnulib module getsubopt for portability"); # endif #endif #if @GNULIB_GRANTPT@ /* Change the ownership and access permission of the slave side of the pseudo-terminal whose master side is specified by FD. */ # if !@HAVE_GRANTPT@ _GL_FUNCDECL_SYS (grantpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (grantpt, int, (int fd)); _GL_CXXALIASWARN (grantpt); #elif defined GNULIB_POSIXCHECK # undef grantpt # if HAVE_RAW_DECL_GRANTPT _GL_WARN_ON_USE (grantpt, "grantpt is not portable - " "use gnulib module grantpt for portability"); # endif #endif /* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not rely on GNU or POSIX semantics for malloc and realloc (for example, by never specifying a zero size), so it does not need malloc or realloc to be redefined. */ #if @GNULIB_MALLOC_POSIX@ # if (@GNULIB_MALLOC_POSIX@ && @REPLACE_MALLOC_FOR_MALLOC_POSIX@) \ || (@GNULIB_MALLOC_GNU@ && @REPLACE_MALLOC_FOR_MALLOC_GNU@) # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef malloc # define malloc rpl_malloc # endif _GL_FUNCDECL_RPL (malloc, void *, (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (malloc, void *, (size_t size)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2 _GL_FUNCDECL_SYS (malloc, void *, (size_t size) _GL_ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (malloc, void *, (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif _GL_CXXALIAS_SYS (malloc, void *, (size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (malloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined malloc /* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2 _GL_FUNCDECL_SYS (malloc, void *, (size_t size) _GL_ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (malloc, void *, (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif # if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef malloc /* Assume malloc is always declared. */ _GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " "use gnulib module malloc-posix for portability"); # endif #endif /* Return maximum number of bytes of a multibyte character. */ #if @REPLACE_MB_CUR_MAX@ # if !GNULIB_defined_MB_CUR_MAX static inline int gl_MB_CUR_MAX (void) { /* Turn the value 3 to the value 4, as needed for the UTF-8 encoding. */ return MB_CUR_MAX + (MB_CUR_MAX == 3); } # undef MB_CUR_MAX # define MB_CUR_MAX gl_MB_CUR_MAX () # define GNULIB_defined_MB_CUR_MAX 1 # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSTOWCS@ # if @REPLACE_MBSTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbstowcs # define mbstowcs rpl_mbstowcs # endif _GL_FUNCDECL_RPL (mbstowcs, size_t, (wchar_t *restrict dest, const char *restrict src, size_t len) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbstowcs, size_t, (wchar_t *restrict dest, const char *restrict src, size_t len)); # else _GL_CXXALIAS_SYS (mbstowcs, size_t, (wchar_t *restrict dest, const char *restrict src, size_t len)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbstowcs); # endif #elif defined GNULIB_POSIXCHECK # undef mbstowcs # if HAVE_RAW_DECL_MBSTOWCS _GL_WARN_ON_USE (mbstowcs, "mbstowcs is unportable - " "use gnulib module mbstowcs for portability"); # endif #endif /* Convert a multibyte character to a wide character. */ #if @GNULIB_MBTOWC@ # if @REPLACE_MBTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbtowc # define mbtowc rpl_mbtowc # endif _GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); _GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); # else # if !@HAVE_MBTOWC@ _GL_FUNCDECL_SYS (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); # endif _GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbtowc); # endif #elif defined GNULIB_POSIXCHECK # undef mbtowc # if HAVE_RAW_DECL_MBTOWC _GL_WARN_ON_USE (mbtowc, "mbtowc is not portable - " "use gnulib module mbtowc for portability"); # endif #endif #if @GNULIB_MKDTEMP@ /* Create a unique temporary directory from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the directory name unique. Returns TEMPLATE, or a null pointer if it cannot get a unique name. The directory is created mode 700. */ # if !@HAVE_MKDTEMP@ _GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); _GL_CXXALIASWARN (mkdtemp); #elif defined GNULIB_POSIXCHECK # undef mkdtemp # if HAVE_RAW_DECL_MKDTEMP _GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " "use gnulib module mkdtemp for portability"); # endif #endif #if @GNULIB_MKOSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if @REPLACE_MKOSTEMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkostemp # define mkostemp rpl_mkostemp # endif _GL_FUNCDECL_RPL (mkostemp, int, (char * /*template*/, int /*flags*/) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkostemp, int, (char * /*template*/, int /*flags*/)); # else # if !@HAVE_MKOSTEMP@ _GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mkostemp); # endif #elif defined GNULIB_POSIXCHECK # undef mkostemp # if HAVE_RAW_DECL_MKOSTEMP _GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " "use gnulib module mkostemp for portability"); # endif #endif #if @GNULIB_MKOSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE before a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if @REPLACE_MKOSTEMPS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkostemps # define mkostemps rpl_mkostemps # endif _GL_FUNCDECL_RPL (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/)); # else # if !@HAVE_MKOSTEMPS@ _GL_FUNCDECL_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mkostemps); # endif #elif defined GNULIB_POSIXCHECK # undef mkostemps # if HAVE_RAW_DECL_MKOSTEMPS _GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " "use gnulib module mkostemps for portability"); # endif #endif #if @GNULIB_MKSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if @REPLACE_MKSTEMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mkstemp rpl_mkstemp # endif _GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); # else # if ! @HAVE_MKSTEMP@ _GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); # endif _GL_CXXALIASWARN (mkstemp); #elif defined GNULIB_POSIXCHECK # undef mkstemp # if HAVE_RAW_DECL_MKSTEMP _GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " "use gnulib module mkstemp for portability"); # endif #endif #if @GNULIB_MKSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE prior to a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKSTEMPS@ _GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); _GL_CXXALIASWARN (mkstemps); #elif defined GNULIB_POSIXCHECK # undef mkstemps # if HAVE_RAW_DECL_MKSTEMPS _GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " "use gnulib module mkstemps for portability"); # endif #endif #if @GNULIB_MDA_MKTEMP@ /* On native Windows, map 'mktemp' to '_mktemp', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::mktemp always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mktemp # define mktemp _mktemp # endif _GL_CXXALIAS_MDA (mktemp, char *, (char * /*template*/)); # else _GL_CXXALIAS_SYS (mktemp, char *, (char * /*template*/)); # endif _GL_CXXALIASWARN (mktemp); #endif /* Allocate memory with indefinite extent and specified alignment. */ #if @GNULIB_POSIX_MEMALIGN@ # if @REPLACE_POSIX_MEMALIGN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef posix_memalign # define posix_memalign rpl_posix_memalign # endif _GL_FUNCDECL_RPL (posix_memalign, int, (void **memptr, size_t alignment, size_t size) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_memalign, int, (void **memptr, size_t alignment, size_t size)); # else # if @HAVE_POSIX_MEMALIGN@ _GL_CXXALIAS_SYS (posix_memalign, int, (void **memptr, size_t alignment, size_t size)); # endif # endif # if __GLIBC__ >= 2 && @HAVE_POSIX_MEMALIGN@ _GL_CXXALIASWARN (posix_memalign); # endif #elif defined GNULIB_POSIXCHECK # undef posix_memalign # if HAVE_RAW_DECL_POSIX_MEMALIGN _GL_WARN_ON_USE (posix_memalign, "posix_memalign is not portable - " "use gnulib module posix_memalign for portability"); # endif #endif #if @GNULIB_POSIX_OPENPT@ /* Return an FD open to the master side of a pseudo-terminal. Flags should include O_RDWR, and may also include O_NOCTTY. */ # if @REPLACE_POSIX_OPENPT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef posix_openpt # define posix_openpt rpl_posix_openpt # endif _GL_FUNCDECL_RPL (posix_openpt, int, (int flags)); _GL_CXXALIAS_RPL (posix_openpt, int, (int flags)); # else # if !@HAVE_POSIX_OPENPT@ _GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); # endif _GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_openpt); # endif #elif defined GNULIB_POSIXCHECK # undef posix_openpt # if HAVE_RAW_DECL_POSIX_OPENPT _GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " "use gnulib module posix_openpt for portability"); # endif #endif #if @GNULIB_PTSNAME@ /* Return the pathname of the pseudo-terminal slave associated with the master FD is open on, or NULL on errors. */ # if @REPLACE_PTSNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname # define ptsname rpl_ptsname # endif _GL_FUNCDECL_RPL (ptsname, char *, (int fd)); _GL_CXXALIAS_RPL (ptsname, char *, (int fd)); # else # if !@HAVE_PTSNAME@ _GL_FUNCDECL_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIAS_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIASWARN (ptsname); #elif defined GNULIB_POSIXCHECK # undef ptsname # if HAVE_RAW_DECL_PTSNAME _GL_WARN_ON_USE (ptsname, "ptsname is not portable - " "use gnulib module ptsname for portability"); # endif #endif #if @GNULIB_PTSNAME_R@ /* Set the pathname of the pseudo-terminal slave associated with the master FD is open on and return 0, or set errno and return non-zero on errors. */ # if @REPLACE_PTSNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname_r # define ptsname_r rpl_ptsname_r # endif _GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); _GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); # else # if !@HAVE_PTSNAME_R@ _GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif _GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif # ifndef GNULIB_defined_ptsname_r # define GNULIB_defined_ptsname_r (!@HAVE_PTSNAME_R@ || @REPLACE_PTSNAME_R@) # endif _GL_CXXALIASWARN (ptsname_r); #elif defined GNULIB_POSIXCHECK # undef ptsname_r # if HAVE_RAW_DECL_PTSNAME_R _GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " "use gnulib module ptsname_r for portability"); # endif #endif #if @GNULIB_PUTENV@ # if @REPLACE_PUTENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv rpl_putenv # endif _GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (putenv, int, (char *string)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv _putenv # endif _GL_CXXALIAS_MDA (putenv, int, (char *string)); # elif defined __KLIBC__ /* Need to cast, because on OS/2 kLIBC, the first parameter is const char *string. */ _GL_CXXALIAS_SYS_CAST (putenv, int, (char *string)); # else _GL_CXXALIAS_SYS (putenv, int, (char *string)); # endif _GL_CXXALIASWARN (putenv); #elif @GNULIB_MDA_PUTENV@ /* On native Windows, map 'putenv' to '_putenv', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::putenv always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv _putenv # endif /* Need to cast, because on mingw, the parameter is either 'const char *string' or 'char *string'. */ _GL_CXXALIAS_MDA_CAST (putenv, int, (char *string)); # elif defined __KLIBC__ /* Need to cast, because on OS/2 kLIBC, the first parameter is const char *string. */ _GL_CXXALIAS_SYS_CAST (putenv, int, (char *string)); # else _GL_CXXALIAS_SYS (putenv, int, (char *string)); # endif _GL_CXXALIASWARN (putenv); #endif #if @GNULIB_QSORT_R@ /* Sort an array of NMEMB elements, starting at address BASE, each element occupying SIZE bytes, in ascending order according to the comparison function COMPARE. */ # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_qsort_r_fn_types typedef int (*_gl_qsort_r_compar_fn) (void const *, void const *, void *); # define GNULIB_defined_qsort_r_fn_types 1 # endif # ifdef __cplusplus } # endif # if @REPLACE_QSORT_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef qsort_r # define qsort_r rpl_qsort_r # endif _GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg)); # else # if !@HAVE_QSORT_R@ _GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg) _GL_ARG_NONNULL ((1, 4))); # endif _GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (qsort_r); # endif #elif defined GNULIB_POSIXCHECK # undef qsort_r # if HAVE_RAW_DECL_QSORT_R _GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - " "use gnulib module qsort_r for portability"); # endif #endif #if @GNULIB_RAND@ || (@GNULIB_RANDOM_R@ && !@HAVE_RANDOM_R@) # ifndef RAND_MAX # define RAND_MAX 2147483647 # endif #endif #if @GNULIB_RAND@ # if @REPLACE_RAND@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rand # define rand rpl_rand # endif _GL_FUNCDECL_RPL (rand, int, (void)); _GL_CXXALIAS_RPL (rand, int, (void)); # else _GL_CXXALIAS_SYS (rand, int, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (rand); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_RANDOM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef random # define random rpl_random # endif _GL_FUNCDECL_RPL (random, long, (void)); _GL_CXXALIAS_RPL (random, long, (void)); # else # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (random, long, (void)); # endif /* Need to cast, because on Haiku, the return type is int. */ _GL_CXXALIAS_SYS_CAST (random, long, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (random); # endif #elif defined GNULIB_POSIXCHECK # undef random # if HAVE_RAW_DECL_RANDOM _GL_WARN_ON_USE (random, "random is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_RANDOM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef srandom # define srandom rpl_srandom # endif _GL_FUNCDECL_RPL (srandom, void, (unsigned int seed)); _GL_CXXALIAS_RPL (srandom, void, (unsigned int seed)); # else # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); # endif /* Need to cast, because on FreeBSD, the first parameter is unsigned long seed. */ _GL_CXXALIAS_SYS_CAST (srandom, void, (unsigned int seed)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (srandom); # endif #elif defined GNULIB_POSIXCHECK # undef srandom # if HAVE_RAW_DECL_SRANDOM _GL_WARN_ON_USE (srandom, "srandom is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_INITSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef initstate # define initstate rpl_initstate # endif _GL_FUNCDECL_RPL (initstate, char *, (unsigned int seed, char *buf, size_t buf_size) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (initstate, char *, (unsigned int seed, char *buf, size_t buf_size)); # else # if !@HAVE_INITSTATE@ || !@HAVE_DECL_INITSTATE@ _GL_FUNCDECL_SYS (initstate, char *, (unsigned int seed, char *buf, size_t buf_size) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on FreeBSD, the first parameter is unsigned long seed. */ _GL_CXXALIAS_SYS_CAST (initstate, char *, (unsigned int seed, char *buf, size_t buf_size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (initstate); # endif #elif defined GNULIB_POSIXCHECK # undef initstate # if HAVE_RAW_DECL_INITSTATE _GL_WARN_ON_USE (initstate, "initstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_SETSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setstate # define setstate rpl_setstate # endif _GL_FUNCDECL_RPL (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (setstate, char *, (char *arg_state)); # else # if !@HAVE_SETSTATE@ || !@HAVE_DECL_SETSTATE@ _GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Mac OS X 10.13, HP-UX, Solaris the first parameter is const char *arg_state. */ _GL_CXXALIAS_SYS_CAST (setstate, char *, (char *arg_state)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (setstate); # endif #elif defined GNULIB_POSIXCHECK # undef setstate # if HAVE_RAW_DECL_SETSTATE _GL_WARN_ON_USE (setstate, "setstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef random_r # define random_r rpl_random_r # endif _GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); # endif _GL_CXXALIASWARN (random_r); #elif defined GNULIB_POSIXCHECK # undef random_r # if HAVE_RAW_DECL_RANDOM_R _GL_WARN_ON_USE (random_r, "random_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef srandom_r # define srandom_r rpl_srandom_r # endif _GL_FUNCDECL_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (srandom_r); #elif defined GNULIB_POSIXCHECK # undef srandom_r # if HAVE_RAW_DECL_SRANDOM_R _GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef initstate_r # define initstate_r rpl_initstate_r # endif _GL_FUNCDECL_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); # endif /* Need to cast, because on Haiku, the third parameter is unsigned long buf_size. */ _GL_CXXALIAS_SYS_CAST (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (initstate_r); #elif defined GNULIB_POSIXCHECK # undef initstate_r # if HAVE_RAW_DECL_INITSTATE_R _GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setstate_r # define setstate_r rpl_setstate_r # endif _GL_FUNCDECL_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); # endif /* Need to cast, because on Haiku, the first parameter is void *arg_state. */ _GL_CXXALIAS_SYS_CAST (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (setstate_r); #elif defined GNULIB_POSIXCHECK # undef setstate_r # if HAVE_RAW_DECL_SETSTATE_R _GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_REALLOC_POSIX@ # if (@GNULIB_REALLOC_POSIX@ && @REPLACE_REALLOC_FOR_REALLOC_POSIX@) \ || (@GNULIB_REALLOC_GNU@ && @REPLACE_REALLOC_FOR_REALLOC_GNU@) # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef realloc # define realloc rpl_realloc # endif _GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2 _GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (realloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined realloc /* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2 _GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif # if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef realloc /* Assume realloc is always declared. */ _GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " "use gnulib module realloc-posix for portability"); # endif #endif #if @GNULIB_REALLOCARRAY@ # if @REPLACE_REALLOCARRAY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef reallocarray # define reallocarray rpl_reallocarray # endif _GL_FUNCDECL_RPL (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); _GL_CXXALIAS_RPL (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # else # if ! @HAVE_REALLOCARRAY@ _GL_FUNCDECL_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # endif _GL_CXXALIAS_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (reallocarray); # endif #elif defined GNULIB_POSIXCHECK # undef reallocarray # if HAVE_RAW_DECL_REALLOCARRAY _GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - " "use gnulib module reallocarray for portability"); # endif #endif #if @GNULIB_REALPATH@ # if @REPLACE_REALPATH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define realpath rpl_realpath # endif _GL_FUNCDECL_RPL (realpath, char *, (const char *restrict name, char *restrict resolved) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (realpath, char *, (const char *restrict name, char *restrict resolved)); # else # if !@HAVE_REALPATH@ _GL_FUNCDECL_SYS (realpath, char *, (const char *restrict name, char *restrict resolved) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (realpath, char *, (const char *restrict name, char *restrict resolved)); # endif _GL_CXXALIASWARN (realpath); #elif defined GNULIB_POSIXCHECK # undef realpath # if HAVE_RAW_DECL_REALPATH _GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " "canonicalize or canonicalize-lgpl for portability"); # endif #endif #if @GNULIB_RPMATCH@ /* Test a user response to a question. Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ # if !@HAVE_RPMATCH@ _GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); _GL_CXXALIASWARN (rpmatch); #elif defined GNULIB_POSIXCHECK # undef rpmatch # if HAVE_RAW_DECL_RPMATCH _GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " "use gnulib module rpmatch for portability"); # endif #endif #if @GNULIB_SECURE_GETENV@ /* Look up NAME in the environment, returning 0 in insecure situations. */ # if !@HAVE_SECURE_GETENV@ _GL_FUNCDECL_SYS (secure_getenv, char *, (char const *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); _GL_CXXALIASWARN (secure_getenv); #elif defined GNULIB_POSIXCHECK # undef secure_getenv # if HAVE_RAW_DECL_SECURE_GETENV _GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " "use gnulib module secure_getenv for portability"); # endif #endif #if @GNULIB_SETENV@ /* Set NAME to VALUE in the environment. If REPLACE is nonzero, overwrite an existing value. */ # if @REPLACE_SETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setenv # define setenv rpl_setenv # endif _GL_FUNCDECL_RPL (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (setenv, int, (const char *name, const char *value, int replace)); # else # if !@HAVE_DECL_SETENV@ _GL_FUNCDECL_SYS (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (setenv, int, (const char *name, const char *value, int replace)); # endif # if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@) _GL_CXXALIASWARN (setenv); # endif #elif defined GNULIB_POSIXCHECK # undef setenv # if HAVE_RAW_DECL_SETENV _GL_WARN_ON_USE (setenv, "setenv is unportable - " "use gnulib module setenv for portability"); # endif #endif #if @GNULIB_STRTOD@ /* Parse a double from STRING, updating ENDP if appropriate. */ # if @REPLACE_STRTOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtod rpl_strtod # endif # define GNULIB_defined_strtod_function 1 _GL_FUNCDECL_RPL (strtod, double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtod, double, (const char *restrict str, char **restrict endp)); # else # if !@HAVE_STRTOD@ _GL_FUNCDECL_SYS (strtod, double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtod, double, (const char *restrict str, char **restrict endp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strtod); # endif #elif defined GNULIB_POSIXCHECK # undef strtod # if HAVE_RAW_DECL_STRTOD _GL_WARN_ON_USE (strtod, "strtod is unportable - " "use gnulib module strtod for portability"); # endif #endif #if @GNULIB_STRTOLD@ /* Parse a 'long double' from STRING, updating ENDP if appropriate. */ # if @REPLACE_STRTOLD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtold rpl_strtold # endif # define GNULIB_defined_strtold_function 1 _GL_FUNCDECL_RPL (strtold, long double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtold, long double, (const char *restrict str, char **restrict endp)); # else # if !@HAVE_STRTOLD@ _GL_FUNCDECL_SYS (strtold, long double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtold, long double, (const char *restrict str, char **restrict endp)); # endif _GL_CXXALIASWARN (strtold); #elif defined GNULIB_POSIXCHECK # undef strtold # if HAVE_RAW_DECL_STRTOLD _GL_WARN_ON_USE (strtold, "strtold is unportable - " "use gnulib module strtold for portability"); # endif #endif #if @GNULIB_STRTOL@ /* Parse a signed integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is LONG_MAX or LONG_MIN, and errno is set to ERANGE. */ # if @REPLACE_STRTOL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtol rpl_strtol # endif # define GNULIB_defined_strtol_function 1 _GL_FUNCDECL_RPL (strtol, long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtol, long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOL@ _GL_FUNCDECL_SYS (strtol, long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtol, long, (const char *restrict string, char **restrict endptr, int base)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strtol); # endif #elif defined GNULIB_POSIXCHECK # undef strtol # if HAVE_RAW_DECL_STRTOL _GL_WARN_ON_USE (strtol, "strtol is unportable - " "use gnulib module strtol for portability"); # endif #endif #if @GNULIB_STRTOLL@ /* Parse a signed integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set to ERANGE. */ # if @REPLACE_STRTOLL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtoll rpl_strtoll # endif # define GNULIB_defined_strtoll_function 1 _GL_FUNCDECL_RPL (strtoll, long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoll, long long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOLL@ _GL_FUNCDECL_SYS (strtoll, long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoll, long long, (const char *restrict string, char **restrict endptr, int base)); # endif _GL_CXXALIASWARN (strtoll); #elif defined GNULIB_POSIXCHECK # undef strtoll # if HAVE_RAW_DECL_STRTOLL _GL_WARN_ON_USE (strtoll, "strtoll is unportable - " "use gnulib module strtoll for portability"); # endif #endif #if @GNULIB_STRTOUL@ /* Parse an unsigned integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is ULONG_MAX, and errno is set to ERANGE. */ # if @REPLACE_STRTOUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtoul rpl_strtoul # endif # define GNULIB_defined_strtoul_function 1 _GL_FUNCDECL_RPL (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOUL@ _GL_FUNCDECL_SYS (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strtoul); # endif #elif defined GNULIB_POSIXCHECK # undef strtoul # if HAVE_RAW_DECL_STRTOUL _GL_WARN_ON_USE (strtoul, "strtoul is unportable - " "use gnulib module strtoul for portability"); # endif #endif #if @GNULIB_STRTOULL@ /* Parse an unsigned integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is ULLONG_MAX, and errno is set to ERANGE. */ # if @REPLACE_STRTOULL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtoull rpl_strtoull # endif # define GNULIB_defined_strtoull_function 1 _GL_FUNCDECL_RPL (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOULL@ _GL_FUNCDECL_SYS (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base)); # endif _GL_CXXALIASWARN (strtoull); #elif defined GNULIB_POSIXCHECK # undef strtoull # if HAVE_RAW_DECL_STRTOULL _GL_WARN_ON_USE (strtoull, "strtoull is unportable - " "use gnulib module strtoull for portability"); # endif #endif #if @GNULIB_UNLOCKPT@ /* Unlock the slave side of the pseudo-terminal whose master side is specified by FD, so that it can be opened. */ # if !@HAVE_UNLOCKPT@ _GL_FUNCDECL_SYS (unlockpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (unlockpt, int, (int fd)); _GL_CXXALIASWARN (unlockpt); #elif defined GNULIB_POSIXCHECK # undef unlockpt # if HAVE_RAW_DECL_UNLOCKPT _GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " "use gnulib module unlockpt for portability"); # endif #endif #if @GNULIB_UNSETENV@ /* Remove the variable NAME from the environment. */ # if @REPLACE_UNSETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unsetenv # define unsetenv rpl_unsetenv # endif _GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); # else # if !@HAVE_DECL_UNSETENV@ _GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); # endif # if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@) _GL_CXXALIASWARN (unsetenv); # endif #elif defined GNULIB_POSIXCHECK # undef unsetenv # if HAVE_RAW_DECL_UNSETENV _GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " "use gnulib module unsetenv for portability"); # endif #endif /* Convert a wide character to a multibyte character. */ #if @GNULIB_WCTOMB@ # if @REPLACE_WCTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctomb # define wctomb rpl_wctomb # endif _GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); _GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); # else _GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctomb); # endif #endif #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif �����������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strchrnul.valgrind���������������������������������������������������0000644�0001750�0001750�00000001714�14557510505�016022� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in strchrnul(). # Copyright (C) 2008-2024 Free Software Foundation, Inc. # # This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. # This use is OK because it provides only a speedup. { strchrnul-value4 Memcheck:Value4 fun:strchrnul } { strchrnul-value8 Memcheck:Value8 fun:strchrnul } ����������������������������������������������������gnuastro-0.22/bootstrapped/lib/streq.h��������������������������������������������������������������0000644�0001750�0001750�00000007703�14557510505�013561� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Optimized string comparison. Copyright (C) 2001-2002, 2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>. */ #ifndef _GL_STREQ_H #define _GL_STREQ_H #include <string.h> /* STREQ_OPT allows to optimize string comparison with a small literal string. STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) is semantically equivalent to strcmp (s, "EUC-KR") == 0 just faster. */ /* Help GCC to generate good code for string comparisons with immediate strings. */ #if (defined __GNUC__ || defined __clang__) && defined __OPTIMIZE__ static inline int streq9 (const char *s1, const char *s2) { return strcmp (s1 + 9, s2 + 9) == 0; } static inline int streq8 (const char *s1, const char *s2, char s28) { if (s1[8] == s28) { if (s28 == 0) return 1; else return streq9 (s1, s2); } else return 0; } static inline int streq7 (const char *s1, const char *s2, char s27, char s28) { if (s1[7] == s27) { if (s27 == 0) return 1; else return streq8 (s1, s2, s28); } else return 0; } static inline int streq6 (const char *s1, const char *s2, char s26, char s27, char s28) { if (s1[6] == s26) { if (s26 == 0) return 1; else return streq7 (s1, s2, s27, s28); } else return 0; } static inline int streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) { if (s1[5] == s25) { if (s25 == 0) return 1; else return streq6 (s1, s2, s26, s27, s28); } else return 0; } static inline int streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) { if (s1[4] == s24) { if (s24 == 0) return 1; else return streq5 (s1, s2, s25, s26, s27, s28); } else return 0; } static inline int streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[3] == s23) { if (s23 == 0) return 1; else return streq4 (s1, s2, s24, s25, s26, s27, s28); } else return 0; } static inline int streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[2] == s22) { if (s22 == 0) return 1; else return streq3 (s1, s2, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[1] == s21) { if (s21 == 0) return 1; else return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[0] == s20) { if (s20 == 0) return 1; else return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); } else return 0; } #define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) #else #define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ (strcmp (s1, s2) == 0) #endif #endif /* _GL_STREQ_H */ �������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strerror-override.h��������������������������������������������������0000644�0001750�0001750�00000004242�14557510505�016115� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror-override.h --- POSIX compatible system error routine Copyright (C) 2010-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_STRERROR_OVERRIDE_H # define _GL_STRERROR_OVERRIDE_H /* This file uses _GL_ATTRIBUTE_CONST. */ # if !_GL_CONFIG_H_INCLUDED # error "Please include config.h first." # endif # include <errno.h> # include <stddef.h> /* Reasonable buffer size that should never trigger ERANGE; if this proves too small, we intentionally abort(), to remind us to fix this value. */ # define STACKBUF_LEN 256 /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ # if REPLACE_STRERROR_0 \ || GNULIB_defined_ESOCK \ || GNULIB_defined_ESTREAMS \ || GNULIB_defined_EWINSOCK \ || GNULIB_defined_ENOMSG \ || GNULIB_defined_EIDRM \ || GNULIB_defined_ENOLINK \ || GNULIB_defined_EPROTO \ || GNULIB_defined_EMULTIHOP \ || GNULIB_defined_EBADMSG \ || GNULIB_defined_EOVERFLOW \ || GNULIB_defined_ENOTSUP \ || GNULIB_defined_ENETRESET \ || GNULIB_defined_ECONNABORTED \ || GNULIB_defined_ESTALE \ || GNULIB_defined_EDQUOT \ || GNULIB_defined_ECANCELED \ || GNULIB_defined_EOWNERDEAD \ || GNULIB_defined_ENOTRECOVERABLE \ || GNULIB_defined_EILSEQ extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST; # else # define strerror_override(ignored) NULL # define GNULIB_defined_strerror_override_macro 1 # endif #endif /* _GL_STRERROR_OVERRIDE_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/string.in.h����������������������������������������������������������0000644�0001750�0001750�00000153101�14557510505�014330� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <string.h>. Copyright (C) 1995-1996, 2001-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_STRING_H /* Special invocation convention: - On OS X/NetBSD we have a sequence of nested includes <string.h> -> <strings.h> -> "string.h" In this situation system _chk variants due to -D_FORTIFY_SOURCE might be used after any replacements defined here. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STRING_H #define _GL_ALREADY_INCLUDING_STRING_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #undef _GL_ALREADY_INCLUDING_STRING_H #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_STRING_H /* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* MirBSD defines mbslen as a macro. */ #if @GNULIB_MBSLEN@ && defined __MirBSD__ # include <wchar.h> #endif /* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ && ! defined __GLIBC__ # include <unistd.h> #endif /* AIX 7.2 and Android 13 declare ffsl and ffsll in <strings.h>, not in <string.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if ((@GNULIB_FFSL@ || @GNULIB_FFSLL@ || defined GNULIB_POSIXCHECK) \ && (defined _AIX || defined __ANDROID__)) \ && ! defined __GLIBC__ # include <strings.h> #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # if defined __cplusplus && defined __GNUC__ && !defined __clang__ /* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */ # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1) # else # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC (free, 1) # endif #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ #ifndef _GL_ATTRIBUTE_NOTHROW # if defined __cplusplus # if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4 # if __cplusplus >= 201103L # define _GL_ATTRIBUTE_NOTHROW noexcept (true) # else # define _GL_ATTRIBUTE_NOTHROW throw () # endif # else # define _GL_ATTRIBUTE_NOTHROW # endif # else # if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ # define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) # else # define _GL_ATTRIBUTE_NOTHROW # endif # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have been included yet. */ #if @GNULIB_FREE_POSIX@ # if (@REPLACE_FREE@ && !defined free \ && !(defined __cplusplus && defined GNULIB_NAMESPACE)) /* We can't do '#define free rpl_free' here. */ # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void rpl_free (void *) _GL_ATTRIBUTE_NOTHROW; # else _GL_EXTERN_C void rpl_free (void *); # endif # undef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1) # else # if defined _MSC_VER && !defined free _GL_EXTERN_C # if defined _DLL __declspec (dllimport) # endif void __cdecl free (void *); # else # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW; # else _GL_EXTERN_C void free (void *); # endif # endif # endif #else # if defined _MSC_VER && !defined free _GL_EXTERN_C # if defined _DLL __declspec (dllimport) # endif void __cdecl free (void *); # else # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW; # else _GL_EXTERN_C void free (void *); # endif # endif #endif /* Clear a block of memory. The compiler will not delete a call to this function, even if the block is dead after the call. */ #if @GNULIB_EXPLICIT_BZERO@ # if ! @HAVE_EXPLICIT_BZERO@ _GL_FUNCDECL_SYS (explicit_bzero, void, (void *__dest, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n)); _GL_CXXALIASWARN (explicit_bzero); #elif defined GNULIB_POSIXCHECK # undef explicit_bzero # if HAVE_RAW_DECL_EXPLICIT_BZERO _GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " "use gnulib module explicit_bzero for portability"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ _GL_FUNCDECL_SYS (ffsl, int, (long int i)); # endif _GL_CXXALIAS_SYS (ffsl, int, (long int i)); _GL_CXXALIASWARN (ffsl); #elif defined GNULIB_POSIXCHECK # undef ffsl # if HAVE_RAW_DECL_FFSL _GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSLL@ # if @REPLACE_FFSLL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define ffsll rpl_ffsll # endif _GL_FUNCDECL_RPL (ffsll, int, (long long int i)); _GL_CXXALIAS_RPL (ffsll, int, (long long int i)); # else # if !@HAVE_FFSLL@ _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIASWARN (ffsll); #elif defined GNULIB_POSIXCHECK # undef ffsll # if HAVE_RAW_DECL_FFSLL _GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); # endif #endif #if @GNULIB_MDA_MEMCCPY@ /* On native Windows, map 'memccpy' to '_memccpy', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::memccpy always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef memccpy # define memccpy _memccpy # endif _GL_CXXALIAS_MDA (memccpy, void *, (void *dest, const void *src, int c, size_t n)); # else _GL_CXXALIAS_SYS (memccpy, void *, (void *dest, const void *src, int c, size_t n)); # endif _GL_CXXALIASWARN (memccpy); #endif /* Return the first instance of C within N bytes of S, or NULL. */ #if @GNULIB_MEMCHR@ # if @REPLACE_MEMCHR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef memchr # define memchr rpl_memchr # endif _GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); # else /* On some systems, this function is defined as an overloaded function: extern "C" { const void * std::memchr (const void *, int, size_t); } extern "C++" { void * std::memchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memchr, void *, (void const *__s, int __c, size_t __n), void const *, (void const *__s, int __c, size_t __n)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n) _GL_ATTRIBUTE_NOTHROW); _GL_CXXALIASWARN1 (memchr, void const *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_NOTHROW); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (memchr); # endif #elif defined GNULIB_POSIXCHECK # undef memchr /* Assume memchr is always declared. */ _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " "use gnulib module memchr for portability" ); #endif /* Return the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_MEMMEM@ # if @REPLACE_MEMMEM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memmem rpl_memmem # endif _GL_FUNCDECL_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # else # if ! @HAVE_DECL_MEMMEM@ _GL_FUNCDECL_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # endif _GL_CXXALIASWARN (memmem); #elif defined GNULIB_POSIXCHECK # undef memmem # if HAVE_RAW_DECL_MEMMEM _GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " "use gnulib module memmem-simple for portability, " "and module memmem for speed" ); # endif #endif /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ #if @GNULIB_MEMPCPY@ # if @REPLACE_MEMPCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mempcpy # define mempcpy rpl_mempcpy # endif _GL_FUNCDECL_RPL (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n)); # else # if !@HAVE_MEMPCPY@ _GL_FUNCDECL_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mempcpy); # endif #elif defined GNULIB_POSIXCHECK # undef mempcpy # if HAVE_RAW_DECL_MEMPCPY _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " "use gnulib module mempcpy for portability"); # endif #endif /* Search backwards through a block for a byte (specified as an int). */ #if @GNULIB_MEMRCHR@ # if ! @HAVE_DECL_MEMRCHR@ _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::memrchr (const void *, int, size_t); } extern "C++" { void * std::memrchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memrchr, void *, (void const *, int, size_t), void const *, (void const *, int, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t) _GL_ATTRIBUTE_NOTHROW); _GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t) _GL_ATTRIBUTE_NOTHROW); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (memrchr); # endif #elif defined GNULIB_POSIXCHECK # undef memrchr # if HAVE_RAW_DECL_MEMRCHR _GL_WARN_ON_USE (memrchr, "memrchr is unportable - " "use gnulib module memrchr for portability"); # endif #endif /* Overwrite a block of memory. The compiler will not optimize effects away, even if the block is dead after the call. */ #if @GNULIB_MEMSET_EXPLICIT@ # if @REPLACE_MEMSET_EXPLICIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef memset_explicit # define memset_explicit rpl_memset_explicit # endif _GL_FUNCDECL_RPL (memset_explicit, void *, (void *__dest, int __c, size_t __n) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (memset_explicit, void *, (void *__dest, int __c, size_t __n)); # else # if !@HAVE_MEMSET_EXPLICIT@ _GL_FUNCDECL_SYS (memset_explicit, void *, (void *__dest, int __c, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (memset_explicit, void *, (void *__dest, int __c, size_t __n)); # endif _GL_CXXALIASWARN (memset_explicit); #elif defined GNULIB_POSIXCHECK # undef memset_explicit # if HAVE_RAW_DECL_MEMSET_EXPLICIT _GL_WARN_ON_USE (memset_explicit, "memset_explicit is unportable - " "use gnulib module memset_explicit for portability"); # endif #endif /* Find the first occurrence of C in S. More efficient than memchr(S,C,N), at the expense of undefined behavior if C does not occur within N bytes. */ #if @GNULIB_RAWMEMCHR@ # if ! @HAVE_RAWMEMCHR@ _GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::rawmemchr (const void *, int); } extern "C++" { void * std::rawmemchr (void *, int); } */ _GL_CXXALIAS_SYS_CAST2 (rawmemchr, void *, (void const *__s, int __c_in), void const *, (void const *__s, int __c_in)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in) _GL_ATTRIBUTE_NOTHROW); _GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in) _GL_ATTRIBUTE_NOTHROW); # else _GL_CXXALIASWARN (rawmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef rawmemchr # if HAVE_RAW_DECL_RAWMEMCHR _GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " "use gnulib module rawmemchr for portability"); # endif #endif /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ #if @GNULIB_STPCPY@ # if @REPLACE_STPCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef stpcpy # define stpcpy rpl_stpcpy # endif _GL_FUNCDECL_RPL (stpcpy, char *, (char *restrict __dst, char const *restrict __src) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (stpcpy, char *, (char *restrict __dst, char const *restrict __src)); # else # if !@HAVE_STPCPY@ _GL_FUNCDECL_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (stpcpy); # endif #elif defined GNULIB_POSIXCHECK # undef stpcpy # if HAVE_RAW_DECL_STPCPY _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " "use gnulib module stpcpy for portability"); # endif #endif /* Copy no more than N bytes of SRC to DST, returning a pointer past the last non-NUL byte written into DST. */ #if @GNULIB_STPNCPY@ # if @REPLACE_STPNCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef stpncpy # define stpncpy rpl_stpncpy # endif _GL_FUNCDECL_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # else # if ! @HAVE_STPNCPY@ _GL_FUNCDECL_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (stpncpy); # endif #elif defined GNULIB_POSIXCHECK # undef stpncpy # if HAVE_RAW_DECL_STPNCPY _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " "use gnulib module stpncpy for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strchr /* Assume strchr is always declared. */ _GL_WARN_ON_USE_CXX (strchr, const char *, char *, (const char *, int), "strchr cannot work correctly on character strings " "in some multibyte locales - " "use mbschr if you care about internationalization"); #endif /* Find the first occurrence of C in S or the final NUL byte. */ #if @GNULIB_STRCHRNUL@ # if @REPLACE_STRCHRNUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strchrnul rpl_strchrnul # endif _GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strchrnul, char *, (const char *str, int ch)); # else # if ! @HAVE_STRCHRNUL@ _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * std::strchrnul (const char *, int); } extern "C++" { char * std::strchrnul (char *, int); } */ _GL_CXXALIAS_SYS_CAST2 (strchrnul, char *, (char const *__s, int __c_in), char const *, (char const *__s, int __c_in)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in) _GL_ATTRIBUTE_NOTHROW); _GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in) _GL_ATTRIBUTE_NOTHROW); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strchrnul); # endif #elif defined GNULIB_POSIXCHECK # undef strchrnul # if HAVE_RAW_DECL_STRCHRNUL _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " "use gnulib module strchrnul for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_STRDUP@ # if @REPLACE_STRDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup rpl_strdup # endif _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup _strdup # endif _GL_CXXALIAS_MDA (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup /* strdup exists as a function and as a macro. Get rid of the macro. */ # undef strdup # endif # if (!@HAVE_DECL_STRDUP@ || __GNUC__ >= 11) && !defined strdup # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ATTRIBUTE_NOTHROW _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); #else # if __GNUC__ >= 11 && !defined strdup /* For -Wmismatched-dealloc: Associate strdup with free or rpl_free. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ATTRIBUTE_NOTHROW _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif # if defined GNULIB_POSIXCHECK # undef strdup # if HAVE_RAW_DECL_STRDUP _GL_WARN_ON_USE (strdup, "strdup is unportable - " "use gnulib module strdup for portability"); # endif # elif @GNULIB_MDA_STRDUP@ /* On native Windows, map 'creat' to '_creat', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::strdup always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup _strdup # endif _GL_CXXALIAS_MDA (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup # undef strdup # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); # endif #endif /* Append no more than N characters from SRC onto DEST. */ #if @GNULIB_STRNCAT@ # if @REPLACE_STRNCAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strncat # define strncat rpl_strncat # endif _GL_FUNCDECL_RPL (strncat, char *, (char *restrict dest, const char *restrict src, size_t n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strncat, char *, (char *restrict dest, const char *restrict src, size_t n)); # else _GL_CXXALIAS_SYS (strncat, char *, (char *restrict dest, const char *restrict src, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strncat); # endif #elif defined GNULIB_POSIXCHECK # undef strncat # if HAVE_RAW_DECL_STRNCAT _GL_WARN_ON_USE (strncat, "strncat is unportable - " "use gnulib module strncat for portability"); # endif #endif /* Return a newly allocated copy of at most N bytes of STRING. */ #if @GNULIB_STRNDUP@ # if @REPLACE_STRNDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strndup # define strndup rpl_strndup # endif _GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); # else # if !@HAVE_DECL_STRNDUP@ || (__GNUC__ >= 11 && !defined strndup) # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) _GL_ATTRIBUTE_NOTHROW _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif _GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); # endif _GL_CXXALIASWARN (strndup); #else # if __GNUC__ >= 11 && !defined strndup /* For -Wmismatched-dealloc: Associate strndup with free or rpl_free. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) _GL_ATTRIBUTE_NOTHROW _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif # if defined GNULIB_POSIXCHECK # undef strndup # if HAVE_RAW_DECL_STRNDUP _GL_WARN_ON_USE (strndup, "strndup is unportable - " "use gnulib module strndup for portability"); # endif # endif #endif /* Find the length (number of bytes) of STRING, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many bytes, return MAXLEN. */ #if @GNULIB_STRNLEN@ # if @REPLACE_STRNLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strnlen # define strnlen rpl_strnlen # endif _GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); # else # if ! @HAVE_DECL_STRNLEN@ _GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); # endif _GL_CXXALIASWARN (strnlen); #elif defined GNULIB_POSIXCHECK # undef strnlen # if HAVE_RAW_DECL_STRNLEN _GL_WARN_ON_USE (strnlen, "strnlen is unportable - " "use gnulib module strnlen for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strcspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strcspn /* Assume strcspn is always declared. */ _GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " "in multibyte locales - " "use mbscspn if you care about internationalization"); #endif /* Find the first occurrence in S of any character in ACCEPT. */ #if @GNULIB_STRPBRK@ # if ! @HAVE_STRPBRK@ _GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const char * strpbrk (const char *, const char *); } extern "C++" { char * strpbrk (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strpbrk, char *, (char const *__s, char const *__accept), const char *, (char const *__s, char const *__accept)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept) _GL_ATTRIBUTE_NOTHROW); _GL_CXXALIASWARN1 (strpbrk, char const *, (char const *__s, char const *__accept) _GL_ATTRIBUTE_NOTHROW); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strpbrk); # endif # if defined GNULIB_POSIXCHECK /* strpbrk() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strpbrk _GL_WARN_ON_USE_CXX (strpbrk, const char *, char *, (const char *, const char *), "strpbrk cannot work correctly on character strings " "in multibyte locales - " "use mbspbrk if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strpbrk # if HAVE_RAW_DECL_STRPBRK _GL_WARN_ON_USE_CXX (strpbrk, const char *, char *, (const char *, const char *), "strpbrk is unportable - " "use gnulib module strpbrk for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it cannot work with multibyte strings. */ # undef strspn /* Assume strspn is always declared. */ _GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " "in multibyte locales - " "use mbsspn if you care about internationalization"); #endif #if defined GNULIB_POSIXCHECK /* strrchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strrchr /* Assume strrchr is always declared. */ _GL_WARN_ON_USE_CXX (strrchr, const char *, char *, (const char *, int), "strrchr cannot work correctly on character strings " "in some multibyte locales - " "use mbsrchr if you care about internationalization"); #endif /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next char after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of strtok() that is multithread-safe and supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strtok_r(). */ #if @GNULIB_STRSEP@ # if ! @HAVE_STRSEP@ _GL_FUNCDECL_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim)); _GL_CXXALIASWARN (strsep); # if defined GNULIB_POSIXCHECK # undef strsep _GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " "in multibyte locales - " "use mbssep if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strsep # if HAVE_RAW_DECL_STRSEP _GL_WARN_ON_USE (strsep, "strsep is unportable - " "use gnulib module strsep for portability"); # endif #endif #if @GNULIB_STRSTR@ # if @REPLACE_STRSTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strstr rpl_strstr # endif _GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); # else /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strstr (const char *, const char *); } extern "C++" { char * strstr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strstr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle) _GL_ATTRIBUTE_NOTHROW); _GL_CXXALIASWARN1 (strstr, const char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_NOTHROW); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strstr); # endif #elif defined GNULIB_POSIXCHECK /* strstr() does not work with multibyte strings if the locale encoding is different from UTF-8: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strstr /* Assume strstr is always declared. */ _GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " "work correctly on character strings in most " "multibyte locales - " "use mbsstr if you care about internationalization, " "or use strstr if you care about speed"); #endif /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. */ #if @GNULIB_STRCASESTR@ # if @REPLACE_STRCASESTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strcasestr rpl_strcasestr # endif _GL_FUNCDECL_RPL (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strcasestr, char *, (const char *haystack, const char *needle)); # else # if ! @HAVE_STRCASESTR@ _GL_FUNCDECL_SYS (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strcasestr (const char *, const char *); } extern "C++" { char * strcasestr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strcasestr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle) _GL_ATTRIBUTE_NOTHROW); _GL_CXXALIASWARN1 (strcasestr, const char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_NOTHROW); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strcasestr); # endif #elif defined GNULIB_POSIXCHECK /* strcasestr() does not work with multibyte strings: It is a glibc extension, and glibc implements it only for unibyte locales. */ # undef strcasestr # if HAVE_RAW_DECL_STRCASESTR _GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " "strings in multibyte locales - " "use mbscasestr if you care about " "internationalization, or use c-strcasestr if you want " "a locale independent function"); # endif #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" This is a variant of strtok() that is multithread-safe. For the POSIX documentation for this function, see: https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok.html Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strsep(). */ #if @GNULIB_STRTOK_R@ # if @REPLACE_STRTOK_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtok_r # define strtok_r rpl_strtok_r # endif _GL_FUNCDECL_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # else # if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK # undef strtok_r # endif # if ! @HAVE_DECL_STRTOK_R@ _GL_FUNCDECL_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # endif _GL_CXXALIASWARN (strtok_r); # if defined GNULIB_POSIXCHECK _GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " "strings in multibyte locales - " "use mbstok_r if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strtok_r # if HAVE_RAW_DECL_STRTOK_R _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " "use gnulib module strtok_r for portability"); # endif #endif /* The following functions are not specified by POSIX. They are gnulib extensions. */ #if @GNULIB_MBSLEN@ /* Return the number of multibyte characters in the character string STRING. This considers multibyte characters, unlike strlen, which counts bytes. */ # ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ # undef mbslen # endif # if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbslen rpl_mbslen # endif _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); # else _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbslen); # endif #endif #if @GNULIB_MBSNLEN@ /* Return the number of multibyte characters in the character string starting at STRING and ending at STRING + LEN. */ _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1)); #endif #if @GNULIB_MBSCHR@ /* Locate the first single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbschr); #endif #if @GNULIB_MBSRCHR@ /* Locate the last single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strrchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux || defined __INTERIX # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbsrchr rpl_mbsrchr /* avoid collision with system function */ # endif _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbsrchr); #endif #if @GNULIB_MBSSTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. Unlike strstr(), this function works correctly in multibyte locales with encodings different from UTF-8. */ _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASECMP@ /* Compare the character strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function may, in multibyte locales, return 0 for strings of different lengths! Unlike strcasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSNCASECMP@ /* Compare the initial segment of the character string S1 consisting of at most N characters with the initial segment of the character string S2 consisting of at most N characters, ignoring case, returning less than, equal to or greater than zero if the initial segment of S1 is lexicographically less than, equal to or greater than the initial segment of S2. Note: This function may, in multibyte locales, return 0 for initial segments of different lengths! Unlike strncasecmp(), this function works correctly in multibyte locales. But beware that N is not a byte count but a character count! */ _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPCASECMP@ /* Compare the initial segment of the character string STRING consisting of at most mbslen (PREFIX) characters with the character string PREFIX, ignoring case. If the two match, return a pointer to the first byte after this prefix in STRING. Otherwise, return NULL. Note: This function may, in multibyte locales, return non-NULL if STRING is of smaller length than PREFIX! Unlike strncasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASESTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK, using case-insensitive comparison. Note: This function may, in multibyte locales, return success even if strlen (haystack) < strlen (needle) ! Unlike strcasestr(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCSPN@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strcspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPBRK@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the pointer to it, or NULL if none exists. Unlike strpbrk(), this function works correctly in multibyte locales. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); # else _GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); # endif _GL_CXXALIASWARN (mbspbrk); #endif #if @GNULIB_MBSSPN@ /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSSEP@ /* Search the next delimiter (multibyte character listed in the character string DELIM) starting at the character string *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next multibyte character after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of mbstok_r() that supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbstok_r(). */ _GL_EXTERN_C char * mbssep (char **stringp, const char *delim) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSTOK_R@ /* Parse the character string STRING into tokens separated by characters in the character string DELIM. If STRING is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = mbstok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbssep(). */ _GL_EXTERN_C char * mbstok_r (char *restrict string, const char *delim, char **save_ptr) _GL_ARG_NONNULL ((2, 3)); #endif /* Map any int, typically from errno, into an error message. */ #if @GNULIB_STRERROR@ # if @REPLACE_STRERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror # define strerror rpl_strerror # endif _GL_FUNCDECL_RPL (strerror, char *, (int)); _GL_CXXALIAS_RPL (strerror, char *, (int)); # else _GL_CXXALIAS_SYS (strerror, char *, (int)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strerror); # endif #elif defined GNULIB_POSIXCHECK # undef strerror /* Assume strerror is always declared. */ _GL_WARN_ON_USE (strerror, "strerror is unportable - " "use gnulib module strerror to guarantee non-NULL result"); #endif /* Map any int, typically from errno, into an error message. Multithread-safe. Uses the POSIX declaration, not the glibc declaration. */ #if @GNULIB_STRERROR_R@ # if @REPLACE_STRERROR_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror_r # define strerror_r rpl_strerror_r # endif _GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); # else # if !@HAVE_DECL_STRERROR_R@ _GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); # endif # if __GLIBC__ >= 2 && @HAVE_DECL_STRERROR_R@ _GL_CXXALIASWARN (strerror_r); # endif #elif defined GNULIB_POSIXCHECK # undef strerror_r # if HAVE_RAW_DECL_STRERROR_R _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " "use gnulib module strerror_r-posix for portability"); # endif #endif /* Return the name of the system error code ERRNUM. */ #if @GNULIB_STRERRORNAME_NP@ # if @REPLACE_STRERRORNAME_NP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerrorname_np # define strerrorname_np rpl_strerrorname_np # endif _GL_FUNCDECL_RPL (strerrorname_np, const char *, (int errnum)); _GL_CXXALIAS_RPL (strerrorname_np, const char *, (int errnum)); # else # if !@HAVE_STRERRORNAME_NP@ _GL_FUNCDECL_SYS (strerrorname_np, const char *, (int errnum)); # endif _GL_CXXALIAS_SYS (strerrorname_np, const char *, (int errnum)); # endif _GL_CXXALIASWARN (strerrorname_np); #elif defined GNULIB_POSIXCHECK # undef strerrorname_np # if HAVE_RAW_DECL_STRERRORNAME_NP _GL_WARN_ON_USE (strerrorname_np, "strerrorname_np is unportable - " "use gnulib module strerrorname_np for portability"); # endif #endif /* Return an abbreviation string for the signal number SIG. */ #if @GNULIB_SIGABBREV_NP@ # if ! @HAVE_SIGABBREV_NP@ _GL_FUNCDECL_SYS (sigabbrev_np, const char *, (int sig)); # endif _GL_CXXALIAS_SYS (sigabbrev_np, const char *, (int sig)); _GL_CXXALIASWARN (sigabbrev_np); #elif defined GNULIB_POSIXCHECK # undef sigabbrev_np # if HAVE_RAW_DECL_SIGABBREV_NP _GL_WARN_ON_USE (sigabbrev_np, "sigabbrev_np is unportable - " "use gnulib module sigabbrev_np for portability"); # endif #endif /* Return an English description string for the signal number SIG. */ #if @GNULIB_SIGDESCR_NP@ # if ! @HAVE_SIGDESCR_NP@ _GL_FUNCDECL_SYS (sigdescr_np, const char *, (int sig)); # endif _GL_CXXALIAS_SYS (sigdescr_np, const char *, (int sig)); _GL_CXXALIASWARN (sigdescr_np); #elif defined GNULIB_POSIXCHECK # undef sigdescr_np # if HAVE_RAW_DECL_SIGDESCR_NP _GL_WARN_ON_USE (sigdescr_np, "sigdescr_np is unportable - " "use gnulib module sigdescr_np for portability"); # endif #endif #if @GNULIB_STRSIGNAL@ # if @REPLACE_STRSIGNAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strsignal rpl_strsignal # endif _GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); _GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); # else # if ! @HAVE_DECL_STRSIGNAL@ _GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is 'const char *'. */ _GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); # endif _GL_CXXALIASWARN (strsignal); #elif defined GNULIB_POSIXCHECK # undef strsignal # if HAVE_RAW_DECL_STRSIGNAL _GL_WARN_ON_USE (strsignal, "strsignal is unportable - " "use gnulib module strsignal for portability"); # endif #endif #if @GNULIB_STRVERSCMP@ # if @REPLACE_STRVERSCMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strverscmp rpl_strverscmp # endif _GL_FUNCDECL_RPL (strverscmp, int, (const char *, const char *) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strverscmp, int, (const char *, const char *)); # else # if !@HAVE_STRVERSCMP@ _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); # endif _GL_CXXALIASWARN (strverscmp); #elif defined GNULIB_POSIXCHECK # undef strverscmp # if HAVE_RAW_DECL_STRVERSCMP _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " "use gnulib module strverscmp for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/strings.in.h���������������������������������������������������������0000644�0001750�0001750�00000010126�14557510505�014512� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute <strings.h>. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_STRINGS_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Minix 3.1.8 has a bug: <sys/types.h> must be included before <strings.h>. But avoid namespace pollution on glibc systems. */ #if defined __minix && !defined __GLIBC__ # include <sys/types.h> #endif /* The include_next requires a split double-inclusion guard. */ #if @HAVE_STRINGS_H@ # @INCLUDE_NEXT@ @NEXT_STRINGS_H@ #endif #ifndef _@GUARD_PREFIX@_STRINGS_H #define _@GUARD_PREFIX@_STRINGS_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if ! @HAVE_DECL_STRNCASECMP@ /* Get size_t. */ # include <stddef.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #ifdef __cplusplus extern "C" { #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFS@ # if !@HAVE_FFS@ _GL_FUNCDECL_SYS (ffs, int, (int i)); # endif _GL_CXXALIAS_SYS (ffs, int, (int i)); _GL_CXXALIASWARN (ffs); #elif defined GNULIB_POSIXCHECK # undef ffs # if HAVE_RAW_DECL_FFS _GL_WARN_ON_USE (ffs, "ffs is not portable - use the ffs module"); # endif #endif /* Compare strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function does not work in multibyte locales. */ #if ! @HAVE_STRCASECMP@ extern int strcasecmp (char const *s1, char const *s2) _GL_ARG_NONNULL ((1, 2)); #endif #if defined GNULIB_POSIXCHECK /* strcasecmp() does not work with multibyte strings: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strcasecmp # if HAVE_RAW_DECL_STRCASECMP _GL_WARN_ON_USE (strcasecmp, "strcasecmp cannot work correctly on character " "strings in multibyte locales - " "use mbscasecmp if you care about " "internationalization, or use c_strcasecmp , " "gnulib module c-strcase) if you want a locale " "independent function"); # endif #endif /* Compare no more than N bytes of strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function cannot work correctly in multibyte locales. */ #if ! @HAVE_DECL_STRNCASECMP@ extern int strncasecmp (char const *s1, char const *s2, size_t n) _GL_ARG_NONNULL ((1, 2)); #endif #if defined GNULIB_POSIXCHECK /* strncasecmp() does not work with multibyte strings: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strncasecmp # if HAVE_RAW_DECL_STRNCASECMP _GL_WARN_ON_USE (strncasecmp, "strncasecmp cannot work correctly on character " "strings in multibyte locales - " "use mbsncasecmp or mbspcasecmp if you care about " "internationalization, or use c_strncasecmp , " "gnulib module c-strcase) if you want a locale " "independent function"); # endif #endif #ifdef __cplusplus } #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/sys_select.in.h������������������������������������������������������0000644�0001750�0001750�00000032274�14557510505�015206� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <sys/select.h>. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ # if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ # endif @PRAGMA_COLUMNS@ /* This file uses #include_next of a system file that defines time_t. For the 'year2038' module to work right, <config.h> needs to have been included before. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* On OSF/1 and Solaris 2.6, <sys/types.h> and <sys/time.h> both include <sys/select.h>. On Cygwin and OpenBSD, <sys/time.h> includes <sys/select.h>. Simply delegate to the system's header in this case. */ #if (@HAVE_SYS_SELECT_H@ \ && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H \ && ((defined __osf__ && defined _SYS_TYPES_H_ \ && defined _OSF_SOURCE) \ || (defined __sun && defined _SYS_TYPES_H \ && (! (defined _XOPEN_SOURCE || defined _POSIX_C_SOURCE) \ || defined __EXTENSIONS__)))) # define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TYPES_H # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ #elif (@HAVE_SYS_SELECT_H@ \ && (defined _CYGWIN_SYS_TIME_H \ || (!defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H \ && ((defined __osf__ && defined _SYS_TIME_H_ \ && defined _OSF_SOURCE) \ || (defined __OpenBSD__ && defined _SYS_TIME_H_) \ || (defined __sun && defined _SYS_TIME_H \ && (! (defined _XOPEN_SOURCE \ || defined _POSIX_C_SOURCE) \ || defined __EXTENSIONS__)))))) # define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ /* On IRIX 6.5, <sys/timespec.h> includes <sys/types.h>, which includes <sys/bsd_types.h>, which includes <sys/select.h>. At this point we cannot include <signal.h>, because that includes <internal/signal_core.h>, which gives a syntax error because <sys/timespec.h> has not been completely processed. Simply delegate to the system's header in this case. */ #elif @HAVE_SYS_SELECT_H@ && defined __sgi && (defined _SYS_BSD_TYPES_H && !defined _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_BSD_TYPES_H) # define _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_BSD_TYPES_H # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ /* On OpenBSD 5.0, <pthread.h> includes <sys/types.h>, which includes <sys/select.h>. At this point we cannot include <signal.h>, because that includes gnulib's pthread.h override, which gives a syntax error because /usr/include/pthread.h has not been completely processed. Simply delegate to the system's header in this case. */ #elif @HAVE_SYS_SELECT_H@ && defined __OpenBSD__ && (defined _PTHREAD_H_ && !defined PTHREAD_MUTEX_INITIALIZER) # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ #else #ifndef _@GUARD_PREFIX@_SYS_SELECT_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* On many platforms, <sys/select.h> assumes prior inclusion of <sys/types.h>. Also, mingw defines sigset_t there, instead of in <signal.h> where it belongs. */ #include <sys/types.h> #if @HAVE_SYS_SELECT_H@ /* On OSF/1 4.0, <sys/select.h> provides only a forward declaration of 'struct timeval', and no definition of this type. Also, Mac OS X, AIX, HP-UX, IRIX, Solaris, Interix declare select() in <sys/time.h>. But avoid namespace pollution on glibc systems, a circular include <sys/select.h> -> <sys/time.h> -> <sys/select.h> on FreeBSD 13.1, and "unknown type name" problems on Cygwin. */ # if !(defined __GLIBC__ || defined __FreeBSD__ || defined __CYGWIN__) # include <sys/time.h> # endif /* On AIX 7 and Solaris 10, <sys/select.h> provides an FD_ZERO implementation that relies on memset(), but without including <string.h>. But in any case avoid namespace pollution on glibc systems. */ # if (defined __OpenBSD__ || defined _AIX || defined __sun || defined __osf__ || defined __BEOS__) \ && ! defined __GLIBC__ # include <string.h> # endif /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYS_SELECT_H@ #endif /* Get definition of 'sigset_t'. But avoid namespace pollution on glibc systems and "unknown type name" problems on Cygwin. On OS/2 kLIBC, sigset_t is defined in <sys/select.h>, too. In addition, if <sys/param.h> is included, <types.h> -> <sys/types.h> -> <sys/select.h> are included. Then <signal.h> -> <pthread.h> are included by GNULIB. By the way, <pthread.h> requires PAGE_SIZE defined in <sys/param.h>. However, <sys/param.h> has not been processed, yet. As a result, 'PAGE_SIZE' undeclared error occurs in <pthread.h>. Do this after the include_next (for the sake of OpenBSD 5.0) but before the split double-inclusion guard (for the sake of Solaris). */ #if !((defined __GLIBC__ || defined __CYGWIN__ || defined __KLIBC__) \ && !defined __UCLIBC__) # include <signal.h> #endif #ifndef _@GUARD_PREFIX@_SYS_SELECT_H #define _@GUARD_PREFIX@_SYS_SELECT_H #if !@HAVE_SYS_SELECT_H@ /* A platform that lacks <sys/select.h>. */ /* Get the 'struct timeval' and 'fd_set' types and the FD_* macros on most platforms. */ # include <sys/time.h> /* On HP-UX 11, <sys/time.h> provides an FD_ZERO implementation that relies on memset(), but without including <string.h>. */ # if defined __hpux # include <string.h> # endif /* On native Windows platforms: Get the 'fd_set' type. Get the close() declaration before we override it. */ # if @HAVE_WINSOCK2_H@ # if !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include <winsock2.h> # undef _GL_INCLUDING_WINSOCK2_H # endif # include <io.h> # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Fix some definitions from <winsock2.h>. */ #if @HAVE_WINSOCK2_H@ # if !GNULIB_defined_rpl_fd_isset /* Re-define FD_ISSET to avoid a WSA call while we are not using network sockets. */ static int rpl_fd_isset (SOCKET fd, fd_set * set) { u_int i; if (set == NULL) return 0; for (i = 0; i < set->fd_count; i++) if (set->fd_array[i] == fd) return 1; return 0; } # define GNULIB_defined_rpl_fd_isset 1 # endif # undef FD_ISSET # define FD_ISSET(fd, set) rpl_fd_isset(fd, set) #endif /* Hide some function declarations from <winsock2.h>. */ #if @HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_UNISTD_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close close_used_without_including_unistd_h # elif !defined __clang__ _GL_WARN_ON_USE (close, "close() used without including <unistd.h>"); # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname gethostname_used_without_including_unistd_h # elif !defined __clang__ _GL_WARN_ON_USE (gethostname, "gethostname() used without including <unistd.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # elif !defined __clang__ _GL_WARN_ON_USE (socket, "socket() used without including <sys/socket.h>"); _GL_WARN_ON_USE (connect, "connect() used without including <sys/socket.h>"); _GL_WARN_ON_USE (accept, "accept() used without including <sys/socket.h>"); _GL_WARN_ON_USE (bind, "bind() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getpeername, "getpeername() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockname, "getsockname() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (listen, "listen() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recv, "recv() used without including <sys/socket.h>"); _GL_WARN_ON_USE (send, "send() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including <sys/socket.h>"); _GL_WARN_ON_USE (sendto, "sendto() used without including <sys/socket.h>"); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (shutdown, "shutdown() used without including <sys/socket.h>"); # endif # endif #endif #if @GNULIB_PSELECT@ # if @REPLACE_PSELECT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pselect # define pselect rpl_pselect # endif _GL_FUNCDECL_RPL (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); _GL_CXXALIAS_RPL (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); # else # if !@HAVE_PSELECT@ _GL_FUNCDECL_SYS (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); # endif /* Need to cast, because on AIX 7, the second, third, fourth argument may be void *restrict, void *restrict, void *restrict. */ _GL_CXXALIAS_SYS_CAST (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pselect); # endif #elif defined GNULIB_POSIXCHECK # undef pselect # if HAVE_RAW_DECL_PSELECT _GL_WARN_ON_USE (pselect, "pselect is not portable - " "use gnulib module pselect for portability"); # endif #endif #if @GNULIB_SELECT@ # if @REPLACE_SELECT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select rpl_select # endif _GL_FUNCDECL_RPL (select, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timeval *restrict)); _GL_CXXALIAS_RPL (select, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, timeval *restrict)); # else _GL_CXXALIAS_SYS (select, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, timeval *restrict)); # endif _GL_CXXALIASWARN (select); #elif @HAVE_WINSOCK2_H@ # undef select # define select select_used_without_requesting_gnulib_module_select #elif defined GNULIB_POSIXCHECK # undef select # if HAVE_RAW_DECL_SELECT _GL_WARN_ON_USE (select, "select is not always POSIX compliant - " "use gnulib module select for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_SELECT_H */ #endif /* _@GUARD_PREFIX@_SYS_SELECT_H */ #endif /* OSF/1 */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/sys_socket.in.h������������������������������������������������������0000644�0001750�0001750�00000060072�14557510505�015214� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a sys/socket header file for systems lacking it (read: MinGW) and for systems where it is incomplete. Copyright (C) 2005-2024 Free Software Foundation, Inc. Written by Simon Josefsson. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* This file is supposed to be used on platforms that lack <sys/socket.h>, on platforms where <sys/socket.h> cannot be included standalone, and on platforms where <sys/socket.h> does not provide all necessary definitions. It is intended to provide definitions and prototypes needed by an application. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_SYS_SOCKET_H /* Special invocation convention: - On Cygwin 1.5.x we have a sequence of nested includes <sys/socket.h> -> <cygwin/socket.h> -> <asm/socket.h> -> <cygwin/if.h>, and the latter includes <sys/socket.h>. In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_SOCKET_H #if @HAVE_SYS_SOCKET_H@ # define _GL_ALREADY_INCLUDING_SYS_SOCKET_H /* On many platforms, <sys/socket.h> assumes prior inclusion of <sys/types.h>. */ # include <sys/types.h> /* On FreeBSD 6.4, <sys/socket.h> defines some macros that assume that NULL is defined. */ # include <stddef.h> /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYS_SOCKET_H@ # undef _GL_ALREADY_INCLUDING_SYS_SOCKET_H #endif #ifndef _@GUARD_PREFIX@_SYS_SOCKET_H #define _@GUARD_PREFIX@_SYS_SOCKET_H /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*, alignof. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_SYS_SOCKET_INLINE # define _GL_SYS_SOCKET_INLINE _GL_INLINE #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #if !@HAVE_SA_FAMILY_T@ # if !GNULIB_defined_sa_family_t /* On OS/2 kLIBC, sa_family_t is unsigned char unless TCPV40HDRS is defined. */ # if !defined __KLIBC__ || defined TCPV40HDRS typedef unsigned short sa_family_t; # else typedef unsigned char sa_family_t; # endif # define GNULIB_defined_sa_family_t 1 # endif #endif #if @HAVE_STRUCT_SOCKADDR_STORAGE@ /* Make the 'struct sockaddr_storage' field 'ss_family' visible on AIX 7.1. */ # if !@HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ # ifndef ss_family # define ss_family __ss_family # endif # endif #else /* Code taken from glibc sysdeps/unix/sysv/linux/bits/socket.h on 2009-05-08, licensed under LGPLv2.1+, plus portability fixes. */ # define __ss_aligntype unsigned long int # define _SS_SIZE 256 # define _SS_PADSIZE \ (_SS_SIZE - ((sizeof (sa_family_t) >= alignof (__ss_aligntype) \ ? sizeof (sa_family_t) \ : alignof (__ss_aligntype)) \ + sizeof (__ss_aligntype))) # if !GNULIB_defined_struct_sockaddr_storage struct sockaddr_storage { sa_family_t ss_family; /* Address family, etc. */ __ss_aligntype __ss_align; /* Force desired alignment. */ char __ss_padding[_SS_PADSIZE]; }; # define GNULIB_defined_struct_sockaddr_storage 1 # endif #endif /* Get struct iovec. */ /* But avoid namespace pollution on glibc systems. */ #if ! defined __GLIBC__ # include <sys/uio.h> #endif #if @HAVE_SYS_SOCKET_H@ /* A platform that has <sys/socket.h>. */ /* For shutdown(). */ # if !defined SHUT_RD # define SHUT_RD 0 # endif # if !defined SHUT_WR # define SHUT_WR 1 # endif # if !defined SHUT_RDWR # define SHUT_RDWR 2 # endif # ifdef __VMS /* OpenVMS */ # ifndef CMSG_SPACE # define CMSG_SPACE(length) _CMSG_SPACE(length) # endif # ifndef CMSG_LEN # define CMSG_LEN(length) _CMSG_LEN(length) # endif # endif #else # ifdef __CYGWIN__ # error "Cygwin does have a sys/socket.h, doesn't it?!?" # endif /* A platform that lacks <sys/socket.h>. Currently only MinGW is supported. See the gnulib manual regarding Windows sockets. MinGW has the header files winsock2.h and ws2tcpip.h that declare the sys/socket.h definitions we need. Note that you can influence which definitions you get by setting the WINVER symbol before including these two files. For example, getaddrinfo is only available if _WIN32_WINNT >= 0x0501 (that symbol is set indirectly through WINVER). You can set this by adding AC_DEFINE(WINVER, 0x0501) to configure.ac. Note that your code may not run on older Windows releases then. My Windows 2000 box was not able to run the code, for example. The situation is slightly confusing because <https://docs.microsoft.com/en-us/windows/desktop/api/ws2tcpip/nf-ws2tcpip-getaddrinfo> suggests that getaddrinfo should be available on all Windows releases. */ # if @HAVE_WINSOCK2_H@ # include <winsock2.h> # endif # if @HAVE_WS2TCPIP_H@ # include <ws2tcpip.h> # endif /* For shutdown(). */ # if !defined SHUT_RD && defined SD_RECEIVE # define SHUT_RD SD_RECEIVE # endif # if !defined SHUT_WR && defined SD_SEND # define SHUT_WR SD_SEND # endif # if !defined SHUT_RDWR && defined SD_BOTH # define SHUT_RDWR SD_BOTH # endif # if @HAVE_WINSOCK2_H@ /* Include headers needed by the emulation code. */ # include <sys/types.h> # include <io.h> /* If these headers don't define socklen_t, <config.h> does. */ # endif /* Rudimentary 'struct msghdr'; this works as long as you don't try to access msg_control or msg_controllen. */ struct msghdr { void *msg_name; socklen_t msg_namelen; struct iovec *msg_iov; int msg_iovlen; int msg_flags; }; #endif /* Ensure SO_REUSEPORT is defined. */ /* For the subtle differences between SO_REUSEPORT and SO_REUSEADDR, see https://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t and https://lwn.net/Articles/542629/ */ #ifndef SO_REUSEPORT # define SO_REUSEPORT SO_REUSEADDR #endif /* Fix some definitions from <winsock2.h>. */ #if @HAVE_WINSOCK2_H@ # if !GNULIB_defined_rpl_fd_isset /* Re-define FD_ISSET to avoid a WSA call while we are not using network sockets. */ _GL_SYS_SOCKET_INLINE int rpl_fd_isset (SOCKET fd, fd_set * set) { u_int i; if (set == NULL) return 0; for (i = 0; i < set->fd_count; i++) if (set->fd_array[i] == fd) return 1; return 0; } # define GNULIB_defined_rpl_fd_isset 1 # endif # undef FD_ISSET # define FD_ISSET(fd, set) rpl_fd_isset(fd, set) #endif /* Hide some function declarations from <winsock2.h>. */ #if @HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_UNISTD_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close close_used_without_including_unistd_h # elif !defined __clang__ _GL_WARN_ON_USE (close, "close() used without including <unistd.h>"); # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname gethostname_used_without_including_unistd_h # else _GL_WARN_ON_USE (gethostname, "gethostname() used without including <unistd.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including <sys/select.h>"); # endif # endif #endif /* Wrap everything else to use libc file descriptors for sockets. */ #if @GNULIB_SOCKET@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket rpl_socket # endif _GL_FUNCDECL_RPL (socket, int, (int domain, int type, int protocol)); _GL_CXXALIAS_RPL (socket, int, (int domain, int type, int protocol)); # else _GL_CXXALIAS_SYS (socket, int, (int domain, int type, int protocol)); # endif _GL_CXXALIASWARN (socket); #elif @HAVE_WINSOCK2_H@ # undef socket # define socket socket_used_without_requesting_gnulib_module_socket #elif defined GNULIB_POSIXCHECK # undef socket # if HAVE_RAW_DECL_SOCKET _GL_WARN_ON_USE (socket, "socket is not always POSIX compliant - " "use gnulib module socket for portability"); # endif #endif #if @GNULIB_CONNECT@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef connect # define connect rpl_connect # endif _GL_FUNCDECL_RPL (connect, int, (int fd, const struct sockaddr *addr, socklen_t addrlen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (connect, int, (int fd, const struct sockaddr *addr, socklen_t addrlen)); # else /* Need to cast, because on NonStop Kernel, the third parameter is size_t addrlen. */ _GL_CXXALIAS_SYS_CAST (connect, int, (int fd, const struct sockaddr *addr, socklen_t addrlen)); # endif _GL_CXXALIASWARN (connect); #elif @HAVE_WINSOCK2_H@ # undef connect # define connect socket_used_without_requesting_gnulib_module_connect #elif defined GNULIB_POSIXCHECK # undef connect # if HAVE_RAW_DECL_CONNECT _GL_WARN_ON_USE (connect, "connect is not always POSIX compliant - " "use gnulib module connect for portability"); # endif #endif #if @GNULIB_ACCEPT@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef accept # define accept rpl_accept # endif _GL_FUNCDECL_RPL (accept, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); _GL_CXXALIAS_RPL (accept, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # else /* Need to cast, because on Solaris 10 systems, the third parameter is void *addrlen. */ _GL_CXXALIAS_SYS_CAST (accept, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (accept); # endif #elif @HAVE_WINSOCK2_H@ # undef accept # define accept accept_used_without_requesting_gnulib_module_accept #elif defined GNULIB_POSIXCHECK # undef accept # if HAVE_RAW_DECL_ACCEPT _GL_WARN_ON_USE (accept, "accept is not always POSIX compliant - " "use gnulib module accept for portability"); # endif #endif #if @GNULIB_BIND@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef bind # define bind rpl_bind # endif _GL_FUNCDECL_RPL (bind, int, (int fd, const struct sockaddr *addr, socklen_t addrlen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (bind, int, (int fd, const struct sockaddr *addr, socklen_t addrlen)); # else /* Need to cast, because on NonStop Kernel, the third parameter is size_t addrlen. */ _GL_CXXALIAS_SYS_CAST (bind, int, (int fd, const struct sockaddr *addr, socklen_t addrlen)); # endif _GL_CXXALIASWARN (bind); #elif @HAVE_WINSOCK2_H@ # undef bind # define bind bind_used_without_requesting_gnulib_module_bind #elif defined GNULIB_POSIXCHECK # undef bind # if HAVE_RAW_DECL_BIND _GL_WARN_ON_USE (bind, "bind is not always POSIX compliant - " "use gnulib module bind for portability"); # endif #endif #if @GNULIB_GETPEERNAME@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getpeername # define getpeername rpl_getpeername # endif _GL_FUNCDECL_RPL (getpeername, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (getpeername, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # else /* Need to cast, because on Solaris 10 systems, the third parameter is void *addrlen. */ _GL_CXXALIAS_SYS_CAST (getpeername, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getpeername); # endif #elif @HAVE_WINSOCK2_H@ # undef getpeername # define getpeername getpeername_used_without_requesting_gnulib_module_getpeername #elif defined GNULIB_POSIXCHECK # undef getpeername # if HAVE_RAW_DECL_GETPEERNAME _GL_WARN_ON_USE (getpeername, "getpeername is not always POSIX compliant - " "use gnulib module getpeername for portability"); # endif #endif #if @GNULIB_GETSOCKNAME@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getsockname # define getsockname rpl_getsockname # endif _GL_FUNCDECL_RPL (getsockname, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (getsockname, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # else /* Need to cast, because on Solaris 10 systems, the third parameter is void *addrlen. */ _GL_CXXALIAS_SYS_CAST (getsockname, int, (int fd, struct sockaddr *restrict addr, socklen_t *restrict addrlen)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getsockname); # endif #elif @HAVE_WINSOCK2_H@ # undef getsockname # define getsockname getsockname_used_without_requesting_gnulib_module_getsockname #elif defined GNULIB_POSIXCHECK # undef getsockname # if HAVE_RAW_DECL_GETSOCKNAME _GL_WARN_ON_USE (getsockname, "getsockname is not always POSIX compliant - " "use gnulib module getsockname for portability"); # endif #endif #if @GNULIB_GETSOCKOPT@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getsockopt # define getsockopt rpl_getsockopt # endif _GL_FUNCDECL_RPL (getsockopt, int, (int fd, int level, int optname, void *restrict optval, socklen_t *restrict optlen) _GL_ARG_NONNULL ((4, 5))); _GL_CXXALIAS_RPL (getsockopt, int, (int fd, int level, int optname, void *restrict optval, socklen_t *restrict optlen)); # else /* Need to cast, because on Solaris 10 systems, the fifth parameter is void *optlen. */ _GL_CXXALIAS_SYS_CAST (getsockopt, int, (int fd, int level, int optname, void *restrict optval, socklen_t *restrict optlen)); # endif _GL_CXXALIASWARN (getsockopt); #elif @HAVE_WINSOCK2_H@ # undef getsockopt # define getsockopt getsockopt_used_without_requesting_gnulib_module_getsockopt #elif defined GNULIB_POSIXCHECK # undef getsockopt # if HAVE_RAW_DECL_GETSOCKOPT _GL_WARN_ON_USE (getsockopt, "getsockopt is not always POSIX compliant - " "use gnulib module getsockopt for portability"); # endif #endif #if @GNULIB_LISTEN@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef listen # define listen rpl_listen # endif _GL_FUNCDECL_RPL (listen, int, (int fd, int backlog)); _GL_CXXALIAS_RPL (listen, int, (int fd, int backlog)); # else _GL_CXXALIAS_SYS (listen, int, (int fd, int backlog)); # endif _GL_CXXALIASWARN (listen); #elif @HAVE_WINSOCK2_H@ # undef listen # define listen listen_used_without_requesting_gnulib_module_listen #elif defined GNULIB_POSIXCHECK # undef listen # if HAVE_RAW_DECL_LISTEN _GL_WARN_ON_USE (listen, "listen is not always POSIX compliant - " "use gnulib module listen for portability"); # endif #endif #if @GNULIB_RECV@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef recv # define recv rpl_recv # endif _GL_FUNCDECL_RPL (recv, ssize_t, (int fd, void *buf, size_t len, int flags) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (recv, ssize_t, (int fd, void *buf, size_t len, int flags)); # else /* Need to cast, because on HP-UX 11.31 the return type may be int, depending on compiler options. */ _GL_CXXALIAS_SYS_CAST (recv, ssize_t, (int fd, void *buf, size_t len, int flags)); # endif _GL_CXXALIASWARN (recv); #elif @HAVE_WINSOCK2_H@ # undef recv # define recv recv_used_without_requesting_gnulib_module_recv #elif defined GNULIB_POSIXCHECK # undef recv # if HAVE_RAW_DECL_RECV _GL_WARN_ON_USE (recv, "recv is not always POSIX compliant - " "use gnulib module recv for portability"); # endif #endif #if @GNULIB_SEND@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef send # define send rpl_send # endif _GL_FUNCDECL_RPL (send, ssize_t, (int fd, const void *buf, size_t len, int flags) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (send, ssize_t, (int fd, const void *buf, size_t len, int flags)); # else /* Need to cast, because on HP-UX 11.31 the return type may be int, depending on compiler options. */ _GL_CXXALIAS_SYS_CAST (send, ssize_t, (int fd, const void *buf, size_t len, int flags)); # endif _GL_CXXALIASWARN (send); #elif @HAVE_WINSOCK2_H@ # undef send # define send send_used_without_requesting_gnulib_module_send #elif defined GNULIB_POSIXCHECK # undef send # if HAVE_RAW_DECL_SEND _GL_WARN_ON_USE (send, "send is not always POSIX compliant - " "use gnulib module send for portability"); # endif #endif #if @GNULIB_RECVFROM@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef recvfrom # define recvfrom rpl_recvfrom # endif _GL_FUNCDECL_RPL (recvfrom, ssize_t, (int fd, void *restrict buf, size_t len, int flags, struct sockaddr *restrict from, socklen_t *restrict fromlen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (recvfrom, ssize_t, (int fd, void *restrict buf, size_t len, int flags, struct sockaddr *restrict from, socklen_t *restrict fromlen)); # else /* Need to cast, because on Solaris 10 systems, the sixth parameter is void *fromlen. */ _GL_CXXALIAS_SYS_CAST (recvfrom, ssize_t, (int fd, void *restrict buf, size_t len, int flags, struct sockaddr *restrict from, socklen_t *restrict fromlen)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (recvfrom); # endif #elif @HAVE_WINSOCK2_H@ # undef recvfrom # define recvfrom recvfrom_used_without_requesting_gnulib_module_recvfrom #elif defined GNULIB_POSIXCHECK # undef recvfrom # if HAVE_RAW_DECL_RECVFROM _GL_WARN_ON_USE (recvfrom, "recvfrom is not always POSIX compliant - " "use gnulib module recvfrom for portability"); # endif #endif #if @GNULIB_SENDTO@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sendto # define sendto rpl_sendto # endif _GL_FUNCDECL_RPL (sendto, ssize_t, (int fd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (sendto, ssize_t, (int fd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)); # else /* Need to cast, because on NonStop Kernel, the sixth parameter is size_t tolen. */ _GL_CXXALIAS_SYS_CAST (sendto, ssize_t, (int fd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)); # endif _GL_CXXALIASWARN (sendto); #elif @HAVE_WINSOCK2_H@ # undef sendto # define sendto sendto_used_without_requesting_gnulib_module_sendto #elif defined GNULIB_POSIXCHECK # undef sendto # if HAVE_RAW_DECL_SENDTO _GL_WARN_ON_USE (sendto, "sendto is not always POSIX compliant - " "use gnulib module sendto for portability"); # endif #endif #if @GNULIB_SETSOCKOPT@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setsockopt # define setsockopt rpl_setsockopt # endif _GL_FUNCDECL_RPL (setsockopt, int, (int fd, int level, int optname, const void * optval, socklen_t optlen) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (setsockopt, int, (int fd, int level, int optname, const void * optval, socklen_t optlen)); # else /* Need to cast, because on NonStop Kernel, the fifth parameter is size_t optlen. */ _GL_CXXALIAS_SYS_CAST (setsockopt, int, (int fd, int level, int optname, const void * optval, socklen_t optlen)); # endif _GL_CXXALIASWARN (setsockopt); #elif @HAVE_WINSOCK2_H@ # undef setsockopt # define setsockopt setsockopt_used_without_requesting_gnulib_module_setsockopt #elif defined GNULIB_POSIXCHECK # undef setsockopt # if HAVE_RAW_DECL_SETSOCKOPT _GL_WARN_ON_USE (setsockopt, "setsockopt is not always POSIX compliant - " "use gnulib module setsockopt for portability"); # endif #endif #if @GNULIB_SHUTDOWN@ # if @HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef shutdown # define shutdown rpl_shutdown # endif _GL_FUNCDECL_RPL (shutdown, int, (int fd, int how)); _GL_CXXALIAS_RPL (shutdown, int, (int fd, int how)); # else _GL_CXXALIAS_SYS (shutdown, int, (int fd, int how)); # endif _GL_CXXALIASWARN (shutdown); #elif @HAVE_WINSOCK2_H@ # undef shutdown # define shutdown shutdown_used_without_requesting_gnulib_module_shutdown #elif defined GNULIB_POSIXCHECK # undef shutdown # if HAVE_RAW_DECL_SHUTDOWN _GL_WARN_ON_USE (shutdown, "shutdown is not always POSIX compliant - " "use gnulib module shutdown for portability"); # endif #endif #if @GNULIB_ACCEPT4@ /* Accept a connection on a socket, with specific opening flags. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). See also the Linux man page at <https://www.kernel.org/doc/man-pages/online/pages/man2/accept4.2.html>. */ # if @HAVE_ACCEPT4@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define accept4 rpl_accept4 # endif _GL_FUNCDECL_RPL (accept4, int, (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)); _GL_CXXALIAS_RPL (accept4, int, (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)); # else _GL_FUNCDECL_SYS (accept4, int, (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)); _GL_CXXALIAS_SYS (accept4, int, (int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags)); # endif _GL_CXXALIASWARN (accept4); #elif defined GNULIB_POSIXCHECK # undef accept4 # if HAVE_RAW_DECL_ACCEPT4 _GL_WARN_ON_USE (accept4, "accept4 is unportable - " "use gnulib module accept4 for portability"); # endif #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ #endif /* _@GUARD_PREFIX@_SYS_SOCKET_H */ #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/sys_stat.in.h��������������������������������������������������������0000644�0001750�0001750�00000067042�14557510505�014703� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/stat.h header file. Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ /* This file is supposed to be used on platforms where <sys/stat.h> is incomplete. It is intended to provide definitions and prototypes needed by an application. Start with what the system provides. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* This file uses #include_next of a system file that defines time_t. For the 'year2038' module to work right, <config.h> needs to have been included before. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if defined __need_system_sys_stat_h /* Special invocation convention. */ #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_STAT_H /* Get nlink_t. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* Get struct timespec. */ #include <time.h> /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ #ifndef _@GUARD_PREFIX@_SYS_STAT_H #define _@GUARD_PREFIX@_SYS_STAT_H /* This file uses _GL_ATTRIBUTE_NOTHROW, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ #ifndef _GL_ATTRIBUTE_NOTHROW # if defined __cplusplus # if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4 # if __cplusplus >= 201103L # define _GL_ATTRIBUTE_NOTHROW noexcept (true) # else # define _GL_ATTRIBUTE_NOTHROW throw () # endif # else # define _GL_ATTRIBUTE_NOTHROW # endif # else # if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ # define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) # else # define _GL_ATTRIBUTE_NOTHROW # endif # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Before doing "#define mknod rpl_mknod" below, we need to include all headers that may declare mknod(). OS/2 kLIBC declares mknod() in <unistd.h>, not in <sys/stat.h>. */ #ifdef __KLIBC__ # include <unistd.h> #endif /* Before doing "#define mkdir rpl_mkdir" below, we need to include all headers that may declare mkdir(). Native Windows platforms declare mkdir in <io.h> and/or <direct.h>, not in <sys/stat.h>. */ #if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> /* mingw32, mingw64 */ # include <direct.h> /* mingw64, MSVC 9 */ #endif /* Native Windows platforms declare umask() in <io.h>. */ #if 0 && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif /* Large File Support on native Windows. */ #if @WINDOWS_64_BIT_ST_SIZE@ # define stat _stati64 #endif /* Optionally, override 'struct stat' on native Windows. */ #if @GNULIB_OVERRIDES_STRUCT_STAT@ # undef stat # if @GNULIB_STAT@ # define stat rpl_stat # else /* Provoke a clear link error if stat() is used as a function and module 'stat' is not in use. */ # define stat stat_used_without_requesting_gnulib_module_stat # endif # if !GNULIB_defined_struct_stat struct stat { dev_t st_dev; ino_t st_ino; mode_t st_mode; nlink_t st_nlink; # if 0 uid_t st_uid; # else /* uid_t is not defined by default on native Windows. */ short st_uid; # endif # if 0 gid_t st_gid; # else /* gid_t is not defined by default on native Windows. */ short st_gid; # endif dev_t st_rdev; off_t st_size; # if 0 blksize_t st_blksize; blkcnt_t st_blocks; # endif # if @WINDOWS_STAT_TIMESPEC@ struct timespec st_atim; struct timespec st_mtim; struct timespec st_ctim; # else time_t st_atime; time_t st_mtime; time_t st_ctime; # endif }; # if @WINDOWS_STAT_TIMESPEC@ # define st_atime st_atim.tv_sec # define st_mtime st_mtim.tv_sec # define st_ctime st_ctim.tv_sec /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_STAT_TIMESPEC 1 # endif # define GNULIB_defined_struct_stat 1 # endif /* Other possible values of st_mode. */ # if 0 # define _S_IFBLK 0x6000 # endif # if 0 # define _S_IFLNK 0xA000 # endif # if 0 # define _S_IFSOCK 0xC000 # endif #endif #ifndef S_IFIFO # ifdef _S_IFIFO # define S_IFIFO _S_IFIFO # endif #endif #ifndef S_IFMT # define S_IFMT 0170000 #endif #if STAT_MACROS_BROKEN # undef S_ISBLK # undef S_ISCHR # undef S_ISDIR # undef S_ISFIFO # undef S_ISLNK # undef S_ISNAM # undef S_ISMPB # undef S_ISMPC # undef S_ISNWK # undef S_ISREG # undef S_ISSOCK #endif #ifndef S_ISBLK # ifdef S_IFBLK # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) # else # define S_ISBLK(m) 0 # endif #endif #ifndef S_ISCHR # ifdef S_IFCHR # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) # else # define S_ISCHR(m) 0 # endif #endif #ifndef S_ISDIR # ifdef S_IFDIR # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) # else # define S_ISDIR(m) 0 # endif #endif #ifndef S_ISDOOR /* Solaris 2.5 and up */ # define S_ISDOOR(m) 0 #endif #ifndef S_ISFIFO # ifdef S_IFIFO # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) # else # define S_ISFIFO(m) 0 # endif #endif #ifndef S_ISLNK # ifdef S_IFLNK # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) # else # define S_ISLNK(m) 0 # endif #endif #ifndef S_ISMPB /* V7 */ # ifdef S_IFMPB # define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) # define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) # else # define S_ISMPB(m) 0 # define S_ISMPC(m) 0 # endif #endif #ifndef S_ISMPX /* AIX */ # define S_ISMPX(m) 0 #endif #ifndef S_ISNAM /* Xenix */ # ifdef S_IFNAM # define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) # else # define S_ISNAM(m) 0 # endif #endif #ifndef S_ISNWK /* HP/UX */ # ifdef S_IFNWK # define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) # else # define S_ISNWK(m) 0 # endif #endif #ifndef S_ISPORT /* Solaris 10 and up */ # define S_ISPORT(m) 0 #endif #ifndef S_ISREG # ifdef S_IFREG # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) # else # define S_ISREG(m) 0 # endif #endif #ifndef S_ISSOCK # ifdef S_IFSOCK # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) # else # define S_ISSOCK(m) 0 # endif #endif #ifndef S_TYPEISMQ # define S_TYPEISMQ(p) 0 #endif #ifndef S_TYPEISTMO # define S_TYPEISTMO(p) 0 #endif #ifndef S_TYPEISSEM # ifdef S_INSEM # define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) # else # define S_TYPEISSEM(p) 0 # endif #endif #ifndef S_TYPEISSHM # ifdef S_INSHD # define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) # else # define S_TYPEISSHM(p) 0 # endif #endif /* high performance ("contiguous data") */ #ifndef S_ISCTG # define S_ISCTG(p) 0 #endif /* Cray DMF (data migration facility): off line, with data */ #ifndef S_ISOFD # define S_ISOFD(p) 0 #endif /* Cray DMF (data migration facility): off line, with no data */ #ifndef S_ISOFL # define S_ISOFL(p) 0 #endif /* 4.4BSD whiteout */ #ifndef S_ISWHT # define S_ISWHT(m) 0 #endif /* If any of the following are undefined, define them to their de facto standard values. */ #if !S_ISUID # define S_ISUID 04000 #endif #if !S_ISGID # define S_ISGID 02000 #endif /* S_ISVTX is a common extension to POSIX. */ #ifndef S_ISVTX # define S_ISVTX 01000 #endif #if !S_IRUSR && S_IREAD # define S_IRUSR S_IREAD #endif #if !S_IRUSR # define S_IRUSR 00400 #endif #if !S_IRGRP # define S_IRGRP (S_IRUSR >> 3) #endif #if !S_IROTH # define S_IROTH (S_IRUSR >> 6) #endif #if !S_IWUSR && S_IWRITE # define S_IWUSR S_IWRITE #endif #if !S_IWUSR # define S_IWUSR 00200 #endif #if !S_IWGRP # define S_IWGRP (S_IWUSR >> 3) #endif #if !S_IWOTH # define S_IWOTH (S_IWUSR >> 6) #endif #if !S_IXUSR && S_IEXEC # define S_IXUSR S_IEXEC #endif #if !S_IXUSR # define S_IXUSR 00100 #endif #if !S_IXGRP # define S_IXGRP (S_IXUSR >> 3) #endif #if !S_IXOTH # define S_IXOTH (S_IXUSR >> 6) #endif #if !S_IRWXU # define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) #endif #if !S_IRWXG # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) #endif #if !S_IRWXO # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) #endif /* Although S_IXUGO and S_IRWXUGO are not specified by POSIX and are not implemented in GNU/Linux, some Gnulib-using apps use the macros. */ #if !S_IXUGO # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) #endif #ifndef S_IRWXUGO # define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) #endif /* Macros for futimens and utimensat. */ #ifndef UTIME_NOW # define UTIME_NOW (-1) # define UTIME_OMIT (-2) #endif #if @GNULIB_CHMOD@ # if @REPLACE_CHMOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chmod # define chmod rpl_chmod # endif _GL_FUNCDECL_RPL (chmod, int, (const char *filename, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (chmod, int, (const char *filename, mode_t mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chmod # define chmod _chmod # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (chmod, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (chmod, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (chmod); #elif defined GNULIB_POSIXCHECK # undef chmod # if HAVE_RAW_DECL_CHMOD _GL_WARN_ON_USE (chmod, "chmod has portability problems - " "use gnulib module chmod for portability"); # endif #elif @GNULIB_MDA_CHMOD@ /* On native Windows, map 'chmod' to '_chmod', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::chmod always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chmod # define chmod _chmod # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (chmod, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (chmod, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (chmod); #endif #if @GNULIB_FCHMODAT@ # if @REPLACE_FCHMODAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fchmodat # define fchmodat rpl_fchmodat # endif _GL_FUNCDECL_RPL (fchmodat, int, (int fd, char const *file, mode_t mode, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fchmodat, int, (int fd, char const *file, mode_t mode, int flag)); # else # if !@HAVE_FCHMODAT@ _GL_FUNCDECL_SYS (fchmodat, int, (int fd, char const *file, mode_t mode, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (fchmodat, int, (int fd, char const *file, mode_t mode, int flag)); # endif _GL_CXXALIASWARN (fchmodat); #elif defined GNULIB_POSIXCHECK # undef fchmodat # if HAVE_RAW_DECL_FCHMODAT _GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FSTAT@ # if @REPLACE_FSTAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fstat # define fstat rpl_fstat # endif _GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); # else _GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fstat); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef fstat # define fstat fstat_used_without_requesting_gnulib_module_fstat #elif @WINDOWS_64_BIT_ST_SIZE@ /* Above, we define stat to _stati64. */ # define fstat _fstati64 #elif defined GNULIB_POSIXCHECK # undef fstat # if HAVE_RAW_DECL_FSTAT _GL_WARN_ON_USE (fstat, "fstat has portability problems - " "use gnulib module fstat for portability"); # endif #endif #if @GNULIB_FSTATAT@ # if @REPLACE_FSTATAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fstatat # define fstatat rpl_fstatat # endif _GL_FUNCDECL_RPL (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags)); # else # if !@HAVE_FSTATAT@ _GL_FUNCDECL_SYS (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags)); # endif _GL_CXXALIASWARN (fstatat); #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef fstatat # define fstatat fstatat_used_without_requesting_gnulib_module_fstatat #elif defined GNULIB_POSIXCHECK # undef fstatat # if HAVE_RAW_DECL_FSTATAT _GL_WARN_ON_USE (fstatat, "fstatat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FUTIMENS@ /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens implementation relies on futimesat, which on Solaris 10 makes an invocation to futimens that is meant to invoke the libc's futimens(), not gnulib's futimens(). */ # if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef futimens # define futimens rpl_futimens # endif _GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2])); _GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); # else # if !@HAVE_FUTIMENS@ _GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2])); # endif _GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); # endif # if __GLIBC__ >= 2 && @HAVE_FUTIMENS@ _GL_CXXALIASWARN (futimens); # endif #elif defined GNULIB_POSIXCHECK # undef futimens # if HAVE_RAW_DECL_FUTIMENS _GL_WARN_ON_USE (futimens, "futimens is not portable - " "use gnulib module futimens for portability"); # endif #endif #if @GNULIB_GETUMASK@ # if !@HAVE_GETUMASK@ # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (getumask, mode_t, (void) _GL_ATTRIBUTE_NOTHROW); # else _GL_FUNCDECL_SYS (getumask, mode_t, (void)); # endif # endif _GL_CXXALIAS_SYS (getumask, mode_t, (void)); # if @HAVE_GETUMASK@ _GL_CXXALIASWARN (getumask); # endif #elif defined GNULIB_POSIXCHECK # undef getumask # if HAVE_RAW_DECL_GETUMASK _GL_WARN_ON_USE (getumask, "getumask is not portable - " "use gnulib module getumask for portability"); # endif #endif #if @GNULIB_LCHMOD@ /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME denotes a symbolic link. */ # if !@HAVE_LCHMOD@ || defined __hpux _GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); _GL_CXXALIASWARN (lchmod); #elif defined GNULIB_POSIXCHECK # undef lchmod # if HAVE_RAW_DECL_LCHMOD _GL_WARN_ON_USE (lchmod, "lchmod is unportable - " "use gnulib module lchmod for portability"); # endif #endif #if @GNULIB_MKDIR@ # if @REPLACE_MKDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkdir # define mkdir rpl_mkdir # endif _GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); # elif defined _WIN32 && !defined __CYGWIN__ /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. Additionally, it declares _mkdir (and depending on compile flags, an alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, which are included above. */ # if !GNULIB_defined_rpl_mkdir static int rpl_mkdir (char const *name, mode_t mode) { return _mkdir (name); } # define GNULIB_defined_rpl_mkdir 1 # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkdir # define mkdir rpl_mkdir # endif _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); # else _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); # endif _GL_CXXALIASWARN (mkdir); #elif defined GNULIB_POSIXCHECK # undef mkdir # if HAVE_RAW_DECL_MKDIR _GL_WARN_ON_USE (mkdir, "mkdir does not always support two parameters - " "use gnulib module mkdir for portability"); # endif #elif @GNULIB_MDA_MKDIR@ /* On native Windows, map 'mkdir' to '_mkdir', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::mkdir always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !GNULIB_defined_rpl_mkdir static int rpl_mkdir (char const *name, mode_t mode) { return _mkdir (name); } # define GNULIB_defined_rpl_mkdir 1 # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkdir # define mkdir rpl_mkdir # endif _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); # else _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); # endif _GL_CXXALIASWARN (mkdir); #endif #if @GNULIB_MKDIRAT@ # if !@HAVE_MKDIRAT@ _GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); _GL_CXXALIASWARN (mkdirat); #elif defined GNULIB_POSIXCHECK # undef mkdirat # if HAVE_RAW_DECL_MKDIRAT _GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_MKFIFO@ # if @REPLACE_MKFIFO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkfifo # define mkfifo rpl_mkfifo # endif _GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); # else # if !@HAVE_MKFIFO@ _GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); # endif _GL_CXXALIASWARN (mkfifo); #elif defined GNULIB_POSIXCHECK # undef mkfifo # if HAVE_RAW_DECL_MKFIFO _GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " "use gnulib module mkfifo for portability"); # endif #endif #if @GNULIB_MKFIFOAT@ # if @REPLACE_MKFIFOAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkfifoat # define mkfifoat rpl_mkfifoat # endif _GL_FUNCDECL_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode)); # else # if !@HAVE_MKFIFOAT@ _GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mkfifoat); # endif #elif defined GNULIB_POSIXCHECK # undef mkfifoat # if HAVE_RAW_DECL_MKFIFOAT _GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " "use gnulib module mkfifoat for portability"); # endif #endif #if @GNULIB_MKNOD@ # if @REPLACE_MKNOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mknod # define mknod rpl_mknod # endif _GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); # else # if !@HAVE_MKNOD@ _GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ _GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); # endif _GL_CXXALIASWARN (mknod); #elif defined GNULIB_POSIXCHECK # undef mknod # if HAVE_RAW_DECL_MKNOD _GL_WARN_ON_USE (mknod, "mknod is not portable - " "use gnulib module mknod for portability"); # endif #endif #if @GNULIB_MKNODAT@ # if @REPLACE_MKNODAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mknodat # define mknodat rpl_mknodat # endif _GL_FUNCDECL_RPL (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev)); # else # if !@HAVE_MKNODAT@ _GL_FUNCDECL_SYS (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mknodat); # endif #elif defined GNULIB_POSIXCHECK # undef mknodat # if HAVE_RAW_DECL_MKNODAT _GL_WARN_ON_USE (mknodat, "mknodat is not portable - " "use gnulib module mkfifoat for portability"); # endif #endif #if @GNULIB_STAT@ # if @REPLACE_STAT@ # if !@GNULIB_OVERRIDES_STRUCT_STAT@ /* We can't use the object-like #define stat rpl_stat, because of struct stat. This means that rpl_stat will not be used if the user does (stat)(a,b). Oh well. */ # if defined _AIX && defined stat && defined _LARGE_FILES /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, so we have to replace stat64() instead of stat(). */ # undef stat64 # define stat64(name, st) rpl_stat (name, st) # elif @WINDOWS_64_BIT_ST_SIZE@ /* Above, we define stat to _stati64. */ # if defined __MINGW32__ && defined _stati64 # ifndef _USE_32BIT_TIME_T /* The system headers define _stati64 to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # elif defined _MSC_VER && defined _stati64 # ifdef _USE_32BIT_TIME_T /* The system headers define _stati64 to _stat32i64. */ # undef _stat32i64 # define _stat32i64(name, st) rpl_stat (name, st) # else /* The system headers define _stati64 to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # else # undef _stati64 # define _stati64(name, st) rpl_stat (name, st) # endif # elif defined __MINGW32__ && defined stat # ifdef _USE_32BIT_TIME_T /* The system headers define stat to _stat32i64. */ # undef _stat32i64 # define _stat32i64(name, st) rpl_stat (name, st) # else /* The system headers define stat to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # elif defined _MSC_VER && defined stat # ifdef _USE_32BIT_TIME_T /* The system headers define stat to _stat32. */ # undef _stat32 # define _stat32(name, st) rpl_stat (name, st) # else /* The system headers define stat to _stat64i32. */ # undef _stat64i32 # define _stat64i32(name, st) rpl_stat (name, st) # endif # else /* !(_AIX || __MINGW32__ || _MSC_VER) */ # undef stat # define stat(name, st) rpl_stat (name, st) # endif /* !_LARGE_FILES */ # endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */ _GL_EXTERN_C int stat (const char *restrict name, struct stat *restrict buf) _GL_ARG_NONNULL ((1, 2)); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ /* see above: #define stat stat_used_without_requesting_gnulib_module_stat */ #elif defined GNULIB_POSIXCHECK # undef stat # if HAVE_RAW_DECL_STAT _GL_WARN_ON_USE (stat, "stat is unportable - " "use gnulib module stat for portability"); # endif #endif #if @GNULIB_LSTAT@ # if ! @HAVE_LSTAT@ /* mingw does not support symlinks, therefore it does not have lstat. But without links, stat does just fine. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lstat stat # endif _GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *restrict name, struct stat *restrict buf)); # elif @REPLACE_LSTAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lstat # define lstat rpl_lstat # endif _GL_FUNCDECL_RPL (lstat, int, (const char *restrict name, struct stat *restrict buf) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (lstat, int, (const char *restrict name, struct stat *restrict buf)); # else _GL_CXXALIAS_SYS (lstat, int, (const char *restrict name, struct stat *restrict buf)); # endif # if @HAVE_LSTAT@ _GL_CXXALIASWARN (lstat); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef lstat # define lstat lstat_used_without_requesting_gnulib_module_lstat #elif defined GNULIB_POSIXCHECK # undef lstat # if HAVE_RAW_DECL_LSTAT _GL_WARN_ON_USE (lstat, "lstat is unportable - " "use gnulib module lstat for portability"); # endif #endif #if @GNULIB_MDA_UMASK@ /* On native Windows, map 'umask' to '_umask', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::umask always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef umask # define umask _umask # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (umask, mode_t, (mode_t mask)); # else _GL_CXXALIAS_SYS (umask, mode_t, (mode_t mask)); # endif _GL_CXXALIASWARN (umask); #endif #if @GNULIB_UTIMENSAT@ /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat implementation relies on futimesat, which on Solaris 10 makes an invocation to utimensat that is meant to invoke the libc's utimensat(), not gnulib's utimensat(). */ # if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef utimensat # define utimensat rpl_utimensat # endif _GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag)); # else # if !@HAVE_UTIMENSAT@ _GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag)); # endif # if __GLIBC__ >= 2 && @HAVE_UTIMENSAT@ _GL_CXXALIASWARN (utimensat); # endif #elif defined GNULIB_POSIXCHECK # undef utimensat # if HAVE_RAW_DECL_UTIMENSAT _GL_WARN_ON_USE (utimensat, "utimensat is not portable - " "use gnulib module utimensat for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/sys_time.in.h��������������������������������������������������������0000644�0001750�0001750�00000020242�14557510505�014655� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/time.h. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef _@GUARD_PREFIX@_SYS_TIME_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* This file uses #include_next of a system file that defines time_t. For the 'year2038' module to work right, <config.h> needs to have been included before. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* On Cygwin and on many BSDish systems, <sys/time.h> includes itself recursively via <sys/select.h>. Simply delegate to the system's header in this case; it is a no-op. Without this extra ifdef, the C++ gettimeofday declaration below would be a forward declaration in gnulib's nested <sys/time.h>. */ #if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_ # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ #else /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SYS_TIME_H@ # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_TIME_H #define _@GUARD_PREFIX@_SYS_TIME_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if ! @HAVE_SYS_TIME_H@ # include <time.h> #endif /* On native Windows with MSVC, get the 'struct timeval' type. Also, on native Windows with a 64-bit time_t, where we are overriding the 'struct timeval' type, get all declarations of system functions whose signature contains 'struct timeval'. */ #if (defined _MSC_VER || @REPLACE_STRUCT_TIMEVAL@) && @HAVE_WINSOCK2_H@ && !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include <winsock2.h> # undef _GL_INCLUDING_WINSOCK2_H #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #ifdef __cplusplus extern "C" { #endif #if !@HAVE_STRUCT_TIMEVAL@ || @REPLACE_STRUCT_TIMEVAL@ # if @REPLACE_STRUCT_TIMEVAL@ # define timeval rpl_timeval # endif # if !GNULIB_defined_struct_timeval struct timeval { time_t tv_sec; long int tv_usec; }; # define GNULIB_defined_struct_timeval 1 # endif #endif #ifdef __cplusplus } #endif #if @GNULIB_GETTIMEOFDAY@ # if @REPLACE_GETTIMEOFDAY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gettimeofday # define gettimeofday rpl_gettimeofday # endif _GL_FUNCDECL_RPL (gettimeofday, int, (struct timeval *restrict, void *restrict) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gettimeofday, int, (struct timeval *restrict, void *restrict)); # else # if !@HAVE_GETTIMEOFDAY@ _GL_FUNCDECL_SYS (gettimeofday, int, (struct timeval *restrict, void *restrict) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on glibc systems, by default, the second argument is struct timezone *. */ _GL_CXXALIAS_SYS_CAST (gettimeofday, int, (struct timeval *restrict, void *restrict)); # endif _GL_CXXALIASWARN (gettimeofday); # if defined __cplusplus && defined GNULIB_NAMESPACE namespace GNULIB_NAMESPACE { typedef ::timeval # undef timeval timeval; # if @REPLACE_STRUCT_TIMEVAL@ # define timeval rpl_timeval typedef ::timeval timeval; # endif } # endif #elif defined GNULIB_POSIXCHECK # undef gettimeofday # if HAVE_RAW_DECL_GETTIMEOFDAY _GL_WARN_ON_USE (gettimeofday, "gettimeofday is unportable - " "use gnulib module gettimeofday for portability"); # endif #endif /* Hide some function declarations from <winsock2.h>. */ #if defined _MSC_VER && @HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_UNISTD_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close close_used_without_including_unistd_h # elif !defined __clang__ _GL_WARN_ON_USE (close, "close() used without including <unistd.h>"); # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname gethostname_used_without_including_unistd_h # else _GL_WARN_ON_USE (gethostname, "gethostname() used without including <unistd.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # else _GL_WARN_ON_USE (socket, "socket() used without including <sys/socket.h>"); _GL_WARN_ON_USE (connect, "connect() used without including <sys/socket.h>"); _GL_WARN_ON_USE (accept, "accept() used without including <sys/socket.h>"); _GL_WARN_ON_USE (bind, "bind() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getpeername, "getpeername() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockname, "getsockname() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (listen, "listen() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recv, "recv() used without including <sys/socket.h>"); _GL_WARN_ON_USE (send, "send() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including <sys/socket.h>"); _GL_WARN_ON_USE (sendto, "sendto() used without including <sys/socket.h>"); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (shutdown, "shutdown() used without including <sys/socket.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including <sys/select.h>"); # endif # endif #endif #endif /* _@GUARD_PREFIX@_SYS_TIME_H */ #endif /* _CYGWIN_SYS_TIME_H */ #endif /* _@GUARD_PREFIX@_SYS_TIME_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/sys_types.in.h�������������������������������������������������������0000644�0001750�0001750�00000006555�14557510505�015076� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/types.h. Copyright (C) 2011-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* This file uses #include_next of a system file that defines time_t. For the 'year2038' module to work right, <config.h> needs to have been included before. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if defined _WIN32 && !defined __CYGWIN__ \ && (defined __need_off_t || defined __need___off64_t \ || defined __need_ssize_t || defined __need_time_t) /* Special invocation convention inside mingw header files. */ #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_TYPES_H /* The include_next requires a split double-inclusion guard. */ # define _GL_INCLUDING_SYS_TYPES_H #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ # undef _GL_INCLUDING_SYS_TYPES_H #ifndef _@GUARD_PREFIX@_SYS_TYPES_H #define _@GUARD_PREFIX@_SYS_TYPES_H /* Override off_t if Large File Support is requested on native Windows. */ #if @WINDOWS_64_BIT_OFF_T@ /* Same as int64_t in <stdint.h>. */ # if defined _MSC_VER # define off_t __int64 # else # define off_t long long int # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_64_BIT_OFF_T 1 #endif /* Override dev_t and ino_t if distinguishable inodes support is requested on native Windows. */ #if @WINDOWS_STAT_INODES@ # if @WINDOWS_STAT_INODES@ == 2 /* Experimental, not useful in Windows 10. */ /* Define dev_t to a 64-bit type. */ # if !defined GNULIB_defined_dev_t typedef unsigned long long int rpl_dev_t; # undef dev_t # define dev_t rpl_dev_t # define GNULIB_defined_dev_t 1 # endif /* Define ino_t to a 128-bit type. */ # if !defined GNULIB_defined_ino_t /* MSVC does not have a 128-bit integer type. GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # else /* @WINDOWS_STAT_INODES@ == 1 */ /* Define ino_t to a 64-bit type. */ # if !defined GNULIB_defined_ino_t typedef unsigned long long int rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@ #endif /* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__ # include <stddef.h> #endif #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* __need_XXX */ ���������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/sys_uio.in.h���������������������������������������������������������0000644�0001750�0001750�00000003236�14557510505�014517� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <sys/uio.h>. Copyright (C) 2011-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ # if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ # endif @PRAGMA_COLUMNS@ #ifndef _@GUARD_PREFIX@_SYS_UIO_H #if @HAVE_SYS_UIO_H@ /* On OpenBSD 4.4, <sys/uio.h> assumes prior inclusion of <sys/types.h>. */ # include <sys/types.h> /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYS_UIO_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_UIO_H #define _@GUARD_PREFIX@_SYS_UIO_H #if !@HAVE_SYS_UIO_H@ /* A platform that lacks <sys/uio.h>. */ /* Get 'size_t' and 'ssize_t'. */ # include <sys/types.h> # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_struct_iovec /* All known platforms that lack <sys/uio.h> also lack any declaration of struct iovec in any other header. */ struct iovec { void *iov_base; size_t iov_len; }; # define GNULIB_defined_struct_iovec 1 # endif # ifdef __cplusplus } # endif #endif #endif /* _@GUARD_PREFIX@_SYS_UIO_H */ #endif /* _@GUARD_PREFIX@_SYS_UIO_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/sys_wait.in.h��������������������������������������������������������0000644�0001750�0001750�00000010010�14557510505�014653� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX-like <sys/wait.h>. Copyright (C) 2001-2003, 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_SYS_WAIT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if !(defined _WIN32 && ! defined __CYGWIN__) # @INCLUDE_NEXT@ @NEXT_SYS_WAIT_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_WAIT_H #define _@GUARD_PREFIX@_SYS_WAIT_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Get pid_t. */ #include <sys/types.h> /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #if !(defined _WIN32 && ! defined __CYGWIN__) /* Unix API. */ /* The following macros apply to an argument x, that is a status of a process, as returned by waitpid(). On nearly all systems, including Linux/x86, WEXITSTATUS are bits 15..8 and WTERMSIG are bits 7..0, while BeOS uses the opposite. Therefore programs have to use the abstract macros. */ /* For valid x, exactly one of WIFSIGNALED(x), WIFEXITED(x), WIFSTOPPED(x) is true. */ # ifndef WIFSIGNALED # define WIFSIGNALED(x) (WTERMSIG (x) != 0 && WTERMSIG(x) != 0x7f) # endif # ifndef WIFEXITED # define WIFEXITED(x) (WTERMSIG (x) == 0) # endif # ifndef WIFSTOPPED # define WIFSTOPPED(x) (WTERMSIG (x) == 0x7f) # endif /* The termination signal. Only to be accessed if WIFSIGNALED(x) is true. */ # ifndef WTERMSIG # define WTERMSIG(x) ((x) & 0x7f) # endif /* The exit status. Only to be accessed if WIFEXITED(x) is true. */ # ifndef WEXITSTATUS # define WEXITSTATUS(x) (((x) >> 8) & 0xff) # endif /* The stopping signal. Only to be accessed if WIFSTOPPED(x) is true. */ # ifndef WSTOPSIG # define WSTOPSIG(x) (((x) >> 8) & 0x7f) # endif /* True if the process dumped core. Not standardized by POSIX. */ # ifndef WCOREDUMP # define WCOREDUMP(x) ((x) & 0x80) # endif #else /* Native Windows API. */ # include <signal.h> /* for SIGTERM */ /* The following macros apply to an argument x, that is a status of a process, as returned by waitpid() or, equivalently, _cwait() or GetExitCodeProcess(). This value is simply an 'int', not composed of bit fields. */ /* When an unhandled fatal signal terminates a process, the exit code is 3. */ # define WIFSIGNALED(x) ((x) == 3) # define WIFEXITED(x) ((x) != 3) # define WIFSTOPPED(x) 0 /* The signal that terminated a process is not known posthum. */ # define WTERMSIG(x) SIGTERM # define WEXITSTATUS(x) (x) /* There are no stopping signals. */ # define WSTOPSIG(x) 0 /* There are no core dumps. */ # define WCOREDUMP(x) 0 #endif /* Declarations of functions. */ #if @GNULIB_WAITPID@ # if defined _WIN32 && ! defined __CYGWIN__ _GL_FUNCDECL_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options)); # endif /* Need to cast, because on Cygwin, the second parameter is __wait_status_ptr_t statusp. */ _GL_CXXALIAS_SYS_CAST (waitpid, pid_t, (pid_t pid, int *statusp, int options)); _GL_CXXALIASWARN (waitpid); #elif defined GNULIB_POSIXCHECK # undef waitpid # if HAVE_RAW_DECL_WAITPID _GL_WARN_ON_USE (waitpid, "waitpid is unportable - " "use gnulib module sys_wait for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_WAIT_H */ #endif /* _@GUARD_PREFIX@_SYS_WAIT_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/sysexits.in.h��������������������������������������������������������0000644�0001750�0001750�00000003725�14557510505�014723� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* exit() exit codes for some BSD system programs. Copyright (C) 2003, 2006-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson based on sysexits(3) man page */ #ifndef _@GUARD_PREFIX@_SYSEXITS_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_SYSEXITS_H@ /* IRIX 6.5 has an <unistd.h> that defines a macro EX_OK with a nonzero value. Override it. See <https://lists.gnu.org/r/bug-gnulib/2007-03/msg00361.html> */ # ifdef __sgi # include <unistd.h> # undef EX_OK # endif /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYSEXITS_H@ /* HP-UX 11 <sysexits.h> ends at EX_NOPERM. */ # ifndef EX_CONFIG # define EX_CONFIG 78 # endif #endif #ifndef _@GUARD_PREFIX@_SYSEXITS_H #define _@GUARD_PREFIX@_SYSEXITS_H #if !(@HAVE_SYSEXITS_H@ && defined EX_USAGE) # define EX_OK 0 /* same value as EXIT_SUCCESS */ # define EX_USAGE 64 # define EX_DATAERR 65 # define EX_NOINPUT 66 # define EX_NOUSER 67 # define EX_NOHOST 68 # define EX_UNAVAILABLE 69 # define EX_SOFTWARE 70 # define EX_OSERR 71 # define EX_OSFILE 72 # define EX_CANTCREAT 73 # define EX_IOERR 74 # define EX_TEMPFAIL 75 # define EX_PROTOCOL 76 # define EX_NOPERM 77 # define EX_CONFIG 78 #endif #endif /* _@GUARD_PREFIX@_SYSEXITS_H */ #endif /* _@GUARD_PREFIX@_SYSEXITS_H */ �������������������������������������������gnuastro-0.22/bootstrapped/lib/time.in.h������������������������������������������������������������0000644�0001750�0001750�00000051720�14557510505�013764� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A more-standard <time.h>. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* This file uses #include_next of a system file that defines time_t. For the 'year2038' module to work right, <config.h> needs to have been included before. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Don't get in the way of glibc when it includes time.h merely to declare a few standard symbols, rather than to declare all the symbols. (However, skip this for MinGW as it treats __need_time_t incompatibly.) Also, Solaris 8 <time.h> eventually includes itself recursively; if that is happening, just include the system <time.h> without adding our own declarations. */ #if (((defined __need_time_t || defined __need_clock_t \ || defined __need_timespec) \ && !defined __MINGW32__) \ || defined _@GUARD_PREFIX@_TIME_H) # @INCLUDE_NEXT@ @NEXT_TIME_H@ #else # define _@GUARD_PREFIX@_TIME_H /* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ # if defined __MINGW32__ # include <unistd.h> # endif # @INCLUDE_NEXT@ @NEXT_TIME_H@ /* This file uses _GL_ATTRIBUTE_DEPRECATED, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ # if !_GL_CONFIG_H_INCLUDED # error "Please include config.h first." # endif /* NetBSD 5.0 mis-defines NULL. */ # include <stddef.h> /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Some systems don't define struct timespec (e.g., AIX 4.1). Or they define it with the wrong member names or define it in <sys/time.h> (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, but the pthreads-win32 library defines it in <pthread.h>. */ # if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@ # if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ # include <sys/time.h> # elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ # include <pthread.h> # elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ # include <unistd.h> # else # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_struct_timespec # undef timespec # define timespec rpl_timespec struct timespec { time_t tv_sec; long int tv_nsec; }; # define GNULIB_defined_struct_timespec 1 # endif # ifdef __cplusplus } # endif # endif # endif # if !GNULIB_defined_struct_time_t_must_be_integral /* https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html requires time_t to be an integer type, even though C99 permits floating point. We don't know of any implementation that uses floating point, and it is much easier to write code that doesn't have to worry about that corner case, so we force the issue. */ struct __time_t_must_be_integral { unsigned int __floating_time_t_unsupported : (time_t) 1; }; # define GNULIB_defined_struct_time_t_must_be_integral 1 # endif /* Define TIME_UTC, a positive integer constant used for timespec_get(). */ # if ! @TIME_H_DEFINES_TIME_UTC@ # if !GNULIB_defined_TIME_UTC # define TIME_UTC 1 # define GNULIB_defined_TIME_UTC 1 # endif # endif /* Set *TS to the current time, and return BASE. Upon failure, return 0. */ # if @GNULIB_TIMESPEC_GET@ # if @REPLACE_TIMESPEC_GET@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef timespec_get # define timespec_get rpl_timespec_get # endif _GL_FUNCDECL_RPL (timespec_get, int, (struct timespec *ts, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (timespec_get, int, (struct timespec *ts, int base)); # else # if !@HAVE_TIMESPEC_GET@ _GL_FUNCDECL_SYS (timespec_get, int, (struct timespec *ts, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (timespec_get); # endif # elif defined GNULIB_POSIXCHECK # undef timespec_get # if HAVE_RAW_DECL_TIMESPEC_GET _GL_WARN_ON_USE (timespec_get, "timespec_get is unportable - " "use gnulib module timespec_get for portability"); # endif # endif /* Set *TS to the current time resolution, and return BASE. Upon failure, return 0. */ # if @GNULIB_TIMESPEC_GETRES@ # if @REPLACE_TIMESPEC_GETRES@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef timespec_getres # define timespec_getres rpl_timespec_getres # endif _GL_FUNCDECL_RPL (timespec_getres, int, (struct timespec *ts, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (timespec_getres, int, (struct timespec *ts, int base)); # else # if !@HAVE_TIMESPEC_GETRES@ _GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base)); # endif _GL_CXXALIASWARN (timespec_getres); # elif defined GNULIB_POSIXCHECK # undef timespec_getres # if HAVE_RAW_DECL_TIMESPEC_GETRES _GL_WARN_ON_USE (timespec_getres, "timespec_getres is unportable - " "use gnulib module timespec_getres for portability"); # endif # endif /* Return the number of seconds that have elapsed since the Epoch. */ # if @GNULIB_TIME@ # if @REPLACE_TIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define time rpl_time # endif _GL_FUNCDECL_RPL (time, time_t, (time_t *__tp)); _GL_CXXALIAS_RPL (time, time_t, (time_t *__tp)); # else _GL_CXXALIAS_SYS (time, time_t, (time_t *__tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (time); # endif # elif defined GNULIB_POSIXCHECK # undef time # if HAVE_RAW_DECL_TIME _GL_WARN_ON_USE (time, "time has consistency problems - " "use gnulib module time for portability"); # endif # endif /* Sleep for at least RQTP seconds unless interrupted, If interrupted, return -1 and store the remaining time into RMTP. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html>. */ # if @GNULIB_NANOSLEEP@ # if @REPLACE_NANOSLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define nanosleep rpl_nanosleep # endif _GL_FUNCDECL_RPL (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp)); # else # if ! @HAVE_NANOSLEEP@ _GL_FUNCDECL_SYS (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp)); # endif _GL_CXXALIASWARN (nanosleep); # elif defined GNULIB_POSIXCHECK # undef nanosleep # if HAVE_RAW_DECL_NANOSLEEP _GL_WARN_ON_USE (nanosleep, "nanosleep is unportable - " "use gnulib module nanosleep for portability"); # endif # endif /* Initialize time conversion information. */ # if @GNULIB_TZSET@ # if @REPLACE_TZSET@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tzset # define tzset rpl_tzset # endif _GL_FUNCDECL_RPL (tzset, void, (void)); _GL_CXXALIAS_RPL (tzset, void, (void)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tzset # define tzset _tzset # endif _GL_CXXALIAS_MDA (tzset, void, (void)); # else _GL_CXXALIAS_SYS (tzset, void, (void)); # endif _GL_CXXALIASWARN (tzset); # elif @GNULIB_MDA_TZSET@ /* On native Windows, map 'tzset' to '_tzset', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::tzset always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tzset # define tzset _tzset # endif _GL_CXXALIAS_MDA (tzset, void, (void)); # else _GL_CXXALIAS_SYS (tzset, void, (void)); # endif _GL_CXXALIASWARN (tzset); # elif defined GNULIB_POSIXCHECK # undef tzset # if HAVE_RAW_DECL_TZSET _GL_WARN_ON_USE (tzset, "tzset has portability problems - " "use gnulib module tzset for portability"); # endif # endif /* Return the 'time_t' representation of TP and normalize TP. */ # if @GNULIB_MKTIME@ # if @REPLACE_MKTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mktime rpl_mktime # endif _GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); # else _GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mktime); # endif # elif defined GNULIB_POSIXCHECK # undef mktime # if HAVE_RAW_DECL_MKTIME _GL_WARN_ON_USE (mktime, "mktime has portability problems - " "use gnulib module mktime for portability"); # endif # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime_r.html> and <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime_r.html>. */ # if @GNULIB_TIME_R@ # if @REPLACE_LOCALTIME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localtime_r # define localtime_r rpl_localtime_r # endif _GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # else # if ! @HAVE_DECL_LOCALTIME_R@ _GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # endif # if @HAVE_DECL_LOCALTIME_R@ _GL_CXXALIASWARN (localtime_r); # endif # if @REPLACE_LOCALTIME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gmtime_r # define gmtime_r rpl_gmtime_r # endif _GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # else # if ! @HAVE_DECL_LOCALTIME_R@ _GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # endif # if @HAVE_DECL_LOCALTIME_R@ _GL_CXXALIASWARN (gmtime_r); # endif # elif defined GNULIB_POSIXCHECK # undef localtime_r # if HAVE_RAW_DECL_LOCALTIME_R _GL_WARN_ON_USE (localtime_r, "localtime_r is unportable - " "use gnulib module time_r for portability"); # endif # undef gmtime_r # if HAVE_RAW_DECL_GMTIME_R _GL_WARN_ON_USE (gmtime_r, "gmtime_r is unportable - " "use gnulib module time_r for portability"); # endif # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html> and <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime.html>. */ # if @GNULIB_LOCALTIME@ || @REPLACE_LOCALTIME@ # if @REPLACE_LOCALTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localtime # define localtime rpl_localtime # endif _GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); # else _GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (localtime); # endif # elif defined GNULIB_POSIXCHECK # undef localtime # if HAVE_RAW_DECL_LOCALTIME _GL_WARN_ON_USE (localtime, "localtime has portability problems - " "use gnulib module localtime for portability"); # endif # endif # if 0 || @REPLACE_GMTIME@ # if @REPLACE_GMTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gmtime # define gmtime rpl_gmtime # endif _GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); # else _GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); # endif _GL_CXXALIASWARN (gmtime); # endif /* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store the resulting broken-down time into TM. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html>. */ # if @GNULIB_STRPTIME@ # if ! @HAVE_STRPTIME@ _GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, char const *restrict __format, struct tm *restrict __tm) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, char const *restrict __format, struct tm *restrict __tm)); _GL_CXXALIASWARN (strptime); # elif defined GNULIB_POSIXCHECK # undef strptime # if HAVE_RAW_DECL_STRPTIME _GL_WARN_ON_USE (strptime, "strptime is unportable - " "use gnulib module strptime for portability"); # endif # endif /* Convert *TP to a date and time string. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime.html>. */ # if @GNULIB_CTIME@ # if @REPLACE_CTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define ctime rpl_ctime # endif # ifndef __cplusplus _GL_ATTRIBUTE_DEPRECATED # endif _GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); # else _GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ctime); # endif # elif defined GNULIB_POSIXCHECK # undef ctime # if HAVE_RAW_DECL_CTIME _GL_WARN_ON_USE (ctime, "ctime has portability problems - " "use gnulib module ctime for portability"); # endif # endif /* Convert *TP to a date and time string. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html>. */ # if @GNULIB_STRFTIME@ # if @REPLACE_STRFTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strftime rpl_strftime # endif _GL_FUNCDECL_RPL (strftime, size_t, (char *restrict __buf, size_t __bufsize, const char *restrict __fmt, const struct tm *restrict __tp) _GL_ARG_NONNULL ((1, 3, 4))); _GL_CXXALIAS_RPL (strftime, size_t, (char *restrict __buf, size_t __bufsize, const char *restrict __fmt, const struct tm *restrict __tp)); # else _GL_CXXALIAS_SYS (strftime, size_t, (char *restrict __buf, size_t __bufsize, const char *restrict __fmt, const struct tm *restrict __tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strftime); # endif # elif defined GNULIB_POSIXCHECK # undef strftime # if HAVE_RAW_DECL_STRFTIME _GL_WARN_ON_USE (strftime, "strftime has portability problems - " "use gnulib module strftime-fixes for portability"); # endif # endif # if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@ /* Functions that use a first-class time zone data type, instead of relying on an implicit global time zone. Inspired by NetBSD. */ /* Represents a time zone. (timezone_t) NULL stands for UTC. */ typedef struct tm_zone *timezone_t; /* tzalloc (name) Returns a time zone object for the given time zone NAME. This object represents the time zone that other functions would use it the TZ environment variable was set to NAME. If NAME is NULL, the result represents the time zone that other functions would use it the TZ environment variable was unset. May return NULL if NAME is invalid (this is platform dependent) or upon memory allocation failure. */ _GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name)); _GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name)); /* tzfree (tz) Frees a time zone object. The argument must have been returned by tzalloc(). */ _GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz)); _GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz)); /* localtime_rz (tz, &t, &result) Converts an absolute time T to a broken-down time RESULT, assuming the time zone TZ. This function is like 'localtime_r', but relies on the argument TZ instead of an implicit global time zone. */ _GL_FUNCDECL_SYS (localtime_rz, struct tm *, (timezone_t __tz, time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_SYS (localtime_rz, struct tm *, (timezone_t __tz, time_t const *restrict __timer, struct tm *restrict __result)); /* mktime_z (tz, &tm) Normalizes the broken-down time TM and converts it to an absolute time, assuming the time zone TZ. Returns the absolute time. This function is like 'mktime', but relies on the argument TZ instead of an implicit global time zone. */ _GL_FUNCDECL_SYS (mktime_z, time_t, (timezone_t __tz, struct tm *restrict __tm) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_SYS (mktime_z, time_t, (timezone_t __tz, struct tm *restrict __tm)); /* Time zone abbreviation strings (returned by 'localtime_rz' or 'mktime_z' in the 'tm_zone' member of 'struct tm') are valid as long as - the 'struct tm' argument is not destroyed or overwritten, and - the 'timezone_t' argument is not freed through tzfree(). */ # endif /* Convert TM to a time_t value, assuming UTC. */ # if @GNULIB_TIMEGM@ # if @REPLACE_TIMEGM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef timegm # define timegm rpl_timegm # endif _GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); # else # if ! @HAVE_TIMEGM@ _GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (timegm); # endif # elif defined GNULIB_POSIXCHECK # undef timegm # if HAVE_RAW_DECL_TIMEGM _GL_WARN_ON_USE (timegm, "timegm is unportable - " "use gnulib module timegm for portability"); # endif # endif /* Encourage applications to avoid unsafe functions that can overrun buffers when given outlandish struct tm values. Portable applications should use strftime (or even sprintf) instead. */ # if defined GNULIB_POSIXCHECK # undef asctime # if HAVE_RAW_DECL_ASCTIME _GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # endif # if defined GNULIB_POSIXCHECK # undef asctime_r # if HAVE_RAW_DECL_ASCTIME_R _GL_WARN_ON_USE (asctime_r, "asctime_r can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # endif # if defined GNULIB_POSIXCHECK # undef ctime # if HAVE_RAW_DECL_CTIME _GL_WARN_ON_USE (ctime, "ctime can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # endif # if defined GNULIB_POSIXCHECK # undef ctime_r # if HAVE_RAW_DECL_CTIME_R _GL_WARN_ON_USE (ctime_r, "ctime_r can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # endif #endif ������������������������������������������������gnuastro-0.22/bootstrapped/lib/uchar.in.h�����������������������������������������������������������0000644�0001750�0001750�00000063777�14557510505�014147� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* <uchar.h> substitute - 16-bit and 32-bit wide character types. Copyright (C) 2019-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ /* * ISO C 23 <uchar.h> for platforms that lack it. */ #ifndef _@GUARD_PREFIX@_UCHAR_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_UCHAR_H@ # if defined __HAIKU__ /* Work around <https://dev.haiku-os.org/ticket/17040>. */ # include <stdint.h> # endif /* On AIX 7.2 with xlclang++, /usr/include/uchar.h produces compilation errors because it contains typedef definitions of char16_t and char32_t, however char16_t and char32_t are keywords in this situation. To work around it, define char16_t and char32_t as macros. */ # if defined __cplusplus && defined _AIX && defined __ibmxl__ && defined __clang__ # define char16_t gl_char16_t # define char32_t gl_char32_t # endif # @INCLUDE_NEXT@ @NEXT_UCHAR_H@ #endif #ifndef _@GUARD_PREFIX@_UCHAR_H #define _@GUARD_PREFIX@_UCHAR_H /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_BEGIN_C_LINKAGE, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Get uint_least16_t, uint_least32_t. */ #include <stdint.h> /* Get mbstate_t, size_t. */ #include <wchar.h> /* For the inline functions. */ #include <string.h> #include <wctype.h> /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ _GL_INLINE_HEADER_BEGIN #if !(@HAVE_UCHAR_H@ || (defined __cplusplus && @CXX_HAS_CHAR8_TYPE@)) /* An 8-bit variant of wchar_t. Note: This type is only mandated by ISO C 23 or newer, and it does denote UTF-8 units. */ typedef unsigned char char8_t; #elif @GNULIBHEADERS_OVERRIDE_CHAR8_T@ typedef unsigned char gl_char8_t; # define char8_t gl_char8_t #endif #if !(@HAVE_UCHAR_H@ || (defined __cplusplus && @CXX_HAS_UCHAR_TYPES@)) /* A 16-bit variant of wchar_t. Note: This type is only mandated by ISO C 11 or newer. In ISO C 23 and newer, it denotes UTF-16 units; in older versions of ISO C it did so only on platforms on which __STDC_UTF_16__ was defined. */ typedef uint_least16_t char16_t; #elif @GNULIBHEADERS_OVERRIDE_CHAR16_T@ typedef uint_least16_t gl_char16_t; # define char16_t gl_char16_t #endif #if !(@HAVE_UCHAR_H@ || (defined __cplusplus && @CXX_HAS_UCHAR_TYPES@)) /* A 32-bit variant of wchar_t. Note: This type is only mandated by ISO C 11 or newer. In ISO C 23 and newer, it denotes UTF-32 code points; in older versions of ISO C it did so only on platforms on which __STDC_UTF_32__ was defined. In gnulib, we guarantee that it denotes UTF-32 code points if and only if the module 'uchar-c23' is in use. */ typedef uint_least32_t char32_t; #elif @GNULIBHEADERS_OVERRIDE_CHAR32_T@ typedef uint_least32_t gl_char32_t; # define char32_t gl_char32_t #endif /* Define if a 'char32_t' can hold more characters than a 'wchar_t'. */ #if @SMALL_WCHAR_T@ /* 32-bit AIX, Cygwin, native Windows */ # define _GL_SMALL_WCHAR_T 1 #endif /* Define if 'wchar_t', like 'char32_t', - is a 32-bit type, and - represents Unicode code points. For this test, we can use __STDC_ISO_10646__ (defined by glibc, musl libc, Cygwin) but need to consider _GL_SMALL_WCHAR_T, so as to exclude Cygwin. We cannot use __STDC_UTF_16__ or __STDC_UTF_32__ - because these macros provide info about char16_t and char32_t (not wchar_t!), and - because GCC >= 4.9 defines these macros on all platforms, even on FreeBSD and Solaris. We should better not use __STD_UTF_16__, __STD_UTF_32__ either, because these macros are misspellings, only defined by Android's <uchar.h>. */ #if defined __STDC_ISO_10646__ && !_GL_SMALL_WCHAR_T /* glibc, musl libc */ # define _GL_WCHAR_T_IS_UCS4 1 #endif #if _GL_WCHAR_T_IS_UCS4 static_assert (sizeof (char32_t) == sizeof (wchar_t)); #endif /* Convert a single-byte character to a 32-bit wide character. */ #if @GNULIB_BTOC32@ # if _GL_WCHAR_T_IS_UCS4 && !defined IN_BTOC32 _GL_BEGIN_C_LINKAGE _GL_INLINE _GL_ATTRIBUTE_PURE wint_t btoc32 (int c) { return # if @GNULIB_BTOWC@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif btowc (c); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (btoc32, wint_t, (int c) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (btoc32, wint_t, (int c)); _GL_CXXALIASWARN (btoc32); #endif /* Test a specific property of a 32-bit wide character. */ #if @GNULIB_C32ISALNUM@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISALNUM _GL_BEGIN_C_LINKAGE _GL_INLINE int c32isalnum (wint_t wc) { return # if defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif iswalnum (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32isalnum, int, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32isalnum, int, (wint_t wc)); _GL_CXXALIASWARN (c32isalnum); #endif #if @GNULIB_C32ISALPHA@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISALPHA _GL_BEGIN_C_LINKAGE _GL_INLINE int c32isalpha (wint_t wc) { return # if defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif iswalpha (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32isalpha, int, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32isalpha, int, (wint_t wc)); _GL_CXXALIASWARN (c32isalpha); #endif #if @GNULIB_C32ISBLANK@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISBLANK _GL_BEGIN_C_LINKAGE _GL_INLINE int c32isblank (wint_t wc) { return # if defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif iswblank (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32isblank, int, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32isblank, int, (wint_t wc)); _GL_CXXALIASWARN (c32isblank); #endif #if @GNULIB_C32ISCNTRL@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISCNTRL _GL_BEGIN_C_LINKAGE _GL_INLINE int c32iscntrl (wint_t wc) { return # if defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif iswcntrl (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32iscntrl, int, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32iscntrl, int, (wint_t wc)); _GL_CXXALIASWARN (c32iscntrl); #endif #if @GNULIB_C32ISDIGIT@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISDIGIT _GL_BEGIN_C_LINKAGE _GL_INLINE int c32isdigit (wint_t wc) { return # if @GNULIB_ISWDIGIT@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif iswdigit (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32isdigit, int, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32isdigit, int, (wint_t wc)); _GL_CXXALIASWARN (c32isdigit); #endif #if @GNULIB_C32ISGRAPH@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISGRAPH _GL_BEGIN_C_LINKAGE _GL_INLINE int c32isgraph (wint_t wc) { return # if defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif iswgraph (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32isgraph, int, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32isgraph, int, (wint_t wc)); _GL_CXXALIASWARN (c32isgraph); #endif #if @GNULIB_C32ISLOWER@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISLOWER _GL_BEGIN_C_LINKAGE _GL_INLINE int c32islower (wint_t wc) { return # if defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif iswlower (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32islower, int, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32islower, int, (wint_t wc)); _GL_CXXALIASWARN (c32islower); #endif #if @GNULIB_C32ISPRINT@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISPRINT _GL_BEGIN_C_LINKAGE _GL_INLINE int c32isprint (wint_t wc) { return # if defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif iswprint (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32isprint, int, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32isprint, int, (wint_t wc)); _GL_CXXALIASWARN (c32isprint); #endif #if @GNULIB_C32ISPUNCT@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISPUNCT _GL_BEGIN_C_LINKAGE _GL_INLINE int c32ispunct (wint_t wc) { return # if defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif iswpunct (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32ispunct, int, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32ispunct, int, (wint_t wc)); _GL_CXXALIASWARN (c32ispunct); #endif #if @GNULIB_C32ISSPACE@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISSPACE _GL_BEGIN_C_LINKAGE _GL_INLINE int c32isspace (wint_t wc) { return # if defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif iswspace (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32isspace, int, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32isspace, int, (wint_t wc)); _GL_CXXALIASWARN (c32isspace); #endif #if @GNULIB_C32ISUPPER@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISUPPER _GL_BEGIN_C_LINKAGE _GL_INLINE int c32isupper (wint_t wc) { return # if defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif iswupper (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32isupper, int, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32isupper, int, (wint_t wc)); _GL_CXXALIASWARN (c32isupper); #endif #if @GNULIB_C32ISXDIGIT@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32ISXDIGIT _GL_BEGIN_C_LINKAGE _GL_INLINE int c32isxdigit (wint_t wc) { return # if @GNULIB_ISWXDIGIT@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif iswxdigit (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32isxdigit, int, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32isxdigit, int, (wint_t wc)); _GL_CXXALIASWARN (c32isxdigit); #endif /* Case mapping of a 32-bit wide character. */ #if @GNULIB_C32TOLOWER@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32TOLOWER _GL_BEGIN_C_LINKAGE _GL_INLINE wint_t c32tolower (wint_t wc) { return # if defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif towlower (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32tolower, wint_t, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32tolower, wint_t, (wint_t wc)); _GL_CXXALIASWARN (c32tolower); #endif #if @GNULIB_C32TOUPPER@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32TOUPPER _GL_BEGIN_C_LINKAGE _GL_INLINE wint_t c32toupper (wint_t wc) { return # if defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif towupper (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32toupper, wint_t, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32toupper, wint_t, (wint_t wc)); _GL_CXXALIASWARN (c32toupper); #endif /* Number of screen columns needed for a 32-bit wide character. */ #if @GNULIB_C32WIDTH@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32WIDTH _GL_BEGIN_C_LINKAGE _GL_INLINE int c32width (char32_t wc) { return # if @GNULIB_WCWIDTH@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif wcwidth (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32width, int, (char32_t wc)); # endif _GL_CXXALIAS_SYS (c32width, int, (char32_t wc)); _GL_CXXALIASWARN (c32width); #endif /* Converts a 32-bit wide character to a multibyte character. */ #if @GNULIB_C32RTOMB@ # if @REPLACE_C32RTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef c32rtomb # define c32rtomb rpl_c32rtomb # endif _GL_FUNCDECL_RPL (c32rtomb, size_t, (char *s, char32_t wc, mbstate_t *ps)); _GL_CXXALIAS_RPL (c32rtomb, size_t, (char *s, char32_t wc, mbstate_t *ps)); # else # if !@HAVE_C32RTOMB@ _GL_FUNCDECL_SYS (c32rtomb, size_t, (char *s, char32_t wc, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (c32rtomb, size_t, (char *s, char32_t wc, mbstate_t *ps)); # endif # if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2 _GL_CXXALIASWARN (c32rtomb); # endif #elif defined GNULIB_POSIXCHECK # undef c32rtomb # if HAVE_RAW_DECL_C32RTOMB _GL_WARN_ON_USE (c32rtomb, "c32rtomb is not portable - " "use gnulib module c32rtomb for portability"); # endif #endif /* Convert a 32-bit wide string to a string. */ #if @GNULIB_C32SNRTOMBS@ # if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32SNRTOMBS _GL_BEGIN_C_LINKAGE _GL_INLINE _GL_ARG_NONNULL ((2)) size_t c32snrtombs (char *dest, const char32_t **srcp, size_t srclen, size_t len, mbstate_t *ps) { return # if @GNULIB_WCSNRTOMBS@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif wcsnrtombs (dest, (const wchar_t **) srcp, srclen, len, ps); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32snrtombs, size_t, (char *dest, const char32_t **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (c32snrtombs, size_t, (char *dest, const char32_t **srcp, size_t srclen, size_t len, mbstate_t *ps)); _GL_CXXALIASWARN (c32snrtombs); #endif /* Convert a 32-bit wide string to a string. */ #if @GNULIB_C32SRTOMBS@ # if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32SRTOMBS _GL_BEGIN_C_LINKAGE _GL_INLINE _GL_ARG_NONNULL ((2)) size_t c32srtombs (char *dest, const char32_t **srcp, size_t len, mbstate_t *ps) { return # if @GNULIB_WCSRTOMBS@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif wcsrtombs (dest, (const wchar_t **) srcp, len, ps); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32srtombs, size_t, (char *dest, const char32_t **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (c32srtombs, size_t, (char *dest, const char32_t **srcp, size_t len, mbstate_t *ps)); _GL_CXXALIASWARN (c32srtombs); #endif /* Convert a 32-bit wide string to a string. */ #if @GNULIB_C32STOMBS@ # if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32STOMBS _GL_BEGIN_C_LINKAGE _GL_INLINE _GL_ARG_NONNULL ((2)) size_t c32stombs (char *dest, const char32_t *src, size_t len) { mbstate_t state; mbszero (&state); return c32srtombs (dest, &src, len, &state); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32stombs, size_t, (char *dest, const char32_t *src, size_t len) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (c32stombs, size_t, (char *dest, const char32_t *src, size_t len)); _GL_CXXALIASWARN (c32stombs); #endif /* Number of screen columns needed for a size-bounded 32-bit wide string. */ #if @GNULIB_C32SWIDTH@ # if (_GL_WCHAR_T_IS_UCS4 && !GNULIB_defined_mbstate_t) && !defined IN_C32SWIDTH _GL_BEGIN_C_LINKAGE _GL_INLINE _GL_ARG_NONNULL ((1)) int c32swidth (const char32_t *s, size_t n) { return # if @GNULIB_WCSWIDTH@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif wcswidth ((const wchar_t *) s, n); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32swidth, int, (const char32_t *s, size_t n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (c32swidth, int, (const char32_t *s, size_t n)); _GL_CXXALIASWARN (c32swidth); #endif /* Converts a 32-bit wide character to unibyte character. Returns the single-byte representation of WC if it exists, or EOF otherwise. */ #if @GNULIB_C32TOB@ # if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32TOB _GL_BEGIN_C_LINKAGE _GL_INLINE int c32tob (wint_t wc) { return # if @GNULIB_WCTOB@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif wctob (wc); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32tob, int, (wint_t wc)); # endif _GL_CXXALIAS_SYS (c32tob, int, (wint_t wc)); _GL_CXXALIASWARN (c32tob); #endif /* Converts a multibyte character to a 32-bit wide character. */ #if @GNULIB_MBRTOC32@ # if @REPLACE_MBRTOC32@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrtoc32 # define mbrtoc32 rpl_mbrtoc32 # endif _GL_FUNCDECL_RPL (mbrtoc32, size_t, (char32_t *pc, const char *s, size_t n, mbstate_t *ps)); _GL_CXXALIAS_RPL (mbrtoc32, size_t, (char32_t *pc, const char *s, size_t n, mbstate_t *ps)); # else # if !@HAVE_MBRTOC32@ _GL_FUNCDECL_SYS (mbrtoc32, size_t, (char32_t *pc, const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbrtoc32, size_t, (char32_t *pc, const char *s, size_t n, mbstate_t *ps)); # endif # if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2 _GL_CXXALIASWARN (mbrtoc32); # endif #elif defined GNULIB_POSIXCHECK # undef mbrtoc32 # if HAVE_RAW_DECL_MBRTOC32 _GL_WARN_ON_USE (mbrtoc32, "mbrtoc32 is not portable - " "use gnulib module mbrtoc32 for portability"); # endif #endif /* Converts a multibyte character and returns the next 16-bit wide character. */ #if @GNULIB_MBRTOC16@ # if @REPLACE_MBRTOC16@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrtoc16 # define mbrtoc16 rpl_mbrtoc16 # endif _GL_FUNCDECL_RPL (mbrtoc16, size_t, (char16_t *pc, const char *s, size_t n, mbstate_t *ps)); _GL_CXXALIAS_RPL (mbrtoc16, size_t, (char16_t *pc, const char *s, size_t n, mbstate_t *ps)); # else # if !@HAVE_MBRTOC32@ _GL_FUNCDECL_SYS (mbrtoc16, size_t, (char16_t *pc, const char *s, size_t n, mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbrtoc16, size_t, (char16_t *pc, const char *s, size_t n, mbstate_t *ps)); # endif # if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2 _GL_CXXALIASWARN (mbrtoc16); # endif #elif defined GNULIB_POSIXCHECK # undef mbrtoc16 # if HAVE_RAW_DECL_MBRTOC16 _GL_WARN_ON_USE (mbrtoc16, "mbrtoc16 is not portable - " "use gnulib module mbrtoc16 for portability"); # endif #endif /* Convert a string to a 32-bit wide string. */ #if @GNULIB_MBSNRTOC32S@ # if _GL_WCHAR_T_IS_UCS4 && !defined IN_MBSNRTOC32S _GL_BEGIN_C_LINKAGE _GL_INLINE _GL_ARG_NONNULL ((2)) size_t mbsnrtoc32s (char32_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps) { return # if @GNULIB_MBSNRTOWCS@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif mbsnrtowcs ((wchar_t *) dest, srcp, srclen, len, ps); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (mbsnrtoc32s, size_t, (char32_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsnrtoc32s, size_t, (char32_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps)); _GL_CXXALIASWARN (mbsnrtoc32s); #endif /* Convert a string to a 32-bit wide string. */ #if @GNULIB_MBSRTOC32S@ # if _GL_WCHAR_T_IS_UCS4 && !defined IN_MBSRTOC32S _GL_BEGIN_C_LINKAGE _GL_INLINE _GL_ARG_NONNULL ((2)) size_t mbsrtoc32s (char32_t *dest, const char **srcp, size_t len, mbstate_t *ps) { return # if @GNULIB_MBSRTOWCS@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif mbsrtowcs ((wchar_t *) dest, srcp, len, ps); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (mbsrtoc32s, size_t, (char32_t *dest, const char **srcp, size_t len, mbstate_t *ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsrtoc32s, size_t, (char32_t *dest, const char **srcp, size_t len, mbstate_t *ps)); _GL_CXXALIASWARN (mbsrtoc32s); #endif /* Convert a string to a 32-bit wide string. */ #if @GNULIB_MBSTOC32S@ # if _GL_WCHAR_T_IS_UCS4 && !defined IN_MBSTOC32S _GL_BEGIN_C_LINKAGE _GL_INLINE _GL_ARG_NONNULL ((2)) size_t mbstoc32s (char32_t *dest, const char *src, size_t len) { mbstate_t state; mbszero (&state); return mbsrtoc32s (dest, &src, len, &state); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (mbstoc32s, size_t, (char32_t *dest, const char *src, size_t len) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbstoc32s, size_t, (char32_t *dest, const char *src, size_t len)); _GL_CXXALIASWARN (mbstoc32s); #endif #if @GNULIB_C32_GET_TYPE_TEST@ || @GNULIB_C32_APPLY_TYPE_TEST@ /* A scalar type. Instances of this type, other than (c32_type_test_t) 0, represent a character property, sometimes also viewed as a "character class". It can be applied to 32-bit wide characters. It is the counterpart of type 'wctype_t' for wide characters. To test whether a given character has a certain property, use the function 'c32_apply_type_test'. */ # if _GL_WCHAR_T_IS_UCS4 typedef wctype_t c32_type_test_t; # else typedef /*bool*/int (*c32_type_test_t) (wint_t wc); # endif #endif /* Return a character property with the given name, or (c32_type_test_t) 0 if the designated property does not exist. This function is the counterpart of function 'wctype' for wide characters. */ #if @GNULIB_C32_GET_TYPE_TEST@ # if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32_GET_TYPE_TEST _GL_BEGIN_C_LINKAGE _GL_INLINE _GL_ARG_NONNULL ((1)) c32_type_test_t c32_get_type_test (const char *name) { return # if @GNULIB_WCTYPE@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif wctype (name); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32_get_type_test, c32_type_test_t, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (c32_get_type_test, c32_type_test_t, (const char *name)); _GL_CXXALIASWARN (c32_get_type_test); #endif /* Test whether a given 32-bit wide character has the specified character property. Return non-zero if true, zero if false or if the argument is WEOF. This function is the counterpart of function 'iswctype' for wide characters. */ #if @GNULIB_C32_APPLY_TYPE_TEST@ # if _GL_WCHAR_T_IS_UCS4 # if !defined IN_C32_APPLY_TYPE_TEST _GL_BEGIN_C_LINKAGE _GL_INLINE int c32_apply_type_test (wint_t wc, c32_type_test_t property) { return # if @GNULIB_ISWCTYPE@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif iswctype (wc, property); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32_apply_type_test, int, (wint_t wc, c32_type_test_t property)); # endif # else _GL_FUNCDECL_SYS (c32_apply_type_test, int, (wint_t wc, c32_type_test_t property) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (c32_apply_type_test, int, (wint_t wc, c32_type_test_t property)); _GL_CXXALIASWARN (c32_apply_type_test); #endif #if @GNULIB_C32_GET_MAPPING@ || @GNULIB_C32_APPLY_MAPPING@ /* A scalar type. Instances of this type, other than (c32_mapping_t) 0, represent a character mapping. It can be applied to 32-bit wide characters. It is the counterpart of type 'wctrans_t' for wide characters. To apply a certain mapping to a given character, use the function 'c32_apply_mapping'. */ # if _GL_WCHAR_T_IS_UCS4 typedef wctrans_t c32_mapping_t; # else typedef wint_t (*c32_mapping_t) (wint_t wc); # endif #endif /* Return a character mapping with the given name, or (c32_mapping_t) 0 if the designated mapping does not exist. This function is the counterpart of function 'wctrans' for wide characters. */ #if @GNULIB_C32_GET_MAPPING@ # if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32_GET_MAPPING _GL_BEGIN_C_LINKAGE _GL_INLINE _GL_ARG_NONNULL ((1)) c32_mapping_t c32_get_mapping (const char *name) { return # if @GNULIB_WCTRANS@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif wctrans (name); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32_get_mapping, c32_mapping_t, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (c32_get_mapping, c32_mapping_t, (const char *name)); _GL_CXXALIASWARN (c32_get_mapping); #endif /* Apply the specified character mapping to a given 32-bit wide character. Return the result of this mapping. Return the WC argument unchanged if it is WEOF. This function is the counterpart of function 'towctrans' for wide characters. */ #if @GNULIB_C32_APPLY_MAPPING@ # if _GL_WCHAR_T_IS_UCS4 && !defined IN_C32_APPLY_MAPPING _GL_BEGIN_C_LINKAGE _GL_INLINE _GL_ARG_NONNULL ((2)) wint_t c32_apply_mapping (wint_t wc, c32_mapping_t mapping) { return # if @GNULIB_TOWCTRANS@ && defined __cplusplus && defined GNULIB_NAMESPACE GNULIB_NAMESPACE:: # endif towctrans (wc, mapping); } _GL_END_C_LINKAGE # else _GL_FUNCDECL_SYS (c32_apply_mapping, wint_t, (wint_t wc, c32_mapping_t mapping) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (c32_apply_mapping, wint_t, (wint_t wc, c32_mapping_t mapping)); _GL_CXXALIASWARN (c32_apply_mapping); #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_UCHAR_H */ #endif /* _@GUARD_PREFIX@_UCHAR_H */ �gnuastro-0.22/bootstrapped/lib/unicase.in.h���������������������������������������������������������0000644�0001750�0001750�00000050622�14557510505�014455� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode character case mappings. Copyright (C) 2002, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _UNICASE_H #define _UNICASE_H #include "unitypes.h" /* Get bool. */ #include <stdbool.h> /* Get size_t. */ #include <stddef.h> /* Get uninorm_t. */ #include "uninorm.h" #if @HAVE_UNISTRING_WOE32DLL_H@ # include <unistring/woe32dll.h> #else # define LIBUNISTRING_DLL_VARIABLE #endif #ifdef __cplusplus extern "C" { #endif /* ========================================================================= */ /* Character case mappings. These mappings are locale and context independent. WARNING! These functions are not sufficient for languages such as German. Better use the functions below that treat an entire string at once and are language aware. */ /* Return the uppercase mapping of a Unicode character. */ extern ucs4_t uc_toupper (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Return the lowercase mapping of a Unicode character. */ extern ucs4_t uc_tolower (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Return the titlecase mapping of a Unicode character. */ extern ucs4_t uc_totitle (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* String case mappings. */ /* These functions are locale dependent. The iso639_language argument identifies the language (e.g. "tr" for Turkish). NULL means to use locale independent case mappings. */ /* Return the ISO 639 language code of the current locale. Return "" if it is unknown, or in the "C" locale. */ extern const char * uc_locale_language (void) _UC_ATTRIBUTE_PURE; /* Conventions: All functions prefixed with u8_ operate on UTF-8 encoded strings. Their unit is an uint8_t (1 byte). All functions prefixed with u16_ operate on UTF-16 encoded strings. Their unit is an uint16_t (a 2-byte word). All functions prefixed with u32_ operate on UCS-4 encoded strings. Their unit is an uint32_t (a 4-byte word). All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly n units. Functions returning a string result take a (resultbuf, lengthp) argument pair. If resultbuf is not NULL and the result fits into *lengthp units, it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly allocated string is returned. In both cases, *lengthp is set to the length (number of units) of the returned string. In case of error, NULL is returned and errno is set. */ /* Return the uppercase mapping of a string. The nf argument identifies the normalization form to apply after the case-mapping. It can also be NULL, for no normalization. */ extern uint8_t * u8_toupper (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_toupper (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_toupper (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Return the lowercase mapping of a string. The nf argument identifies the normalization form to apply after the case-mapping. It can also be NULL, for no normalization. */ extern uint8_t * u8_tolower (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_tolower (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_tolower (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Return the titlecase mapping of a string. The nf argument identifies the normalization form to apply after the case-mapping. It can also be NULL, for no normalization. */ extern uint8_t * u8_totitle (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_totitle (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_totitle (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* The case-mapping context given by a prefix string. */ typedef struct casing_prefix_context { /* These fields are private, undocumented. */ uint32_t last_char_except_ignorable; uint32_t last_char_normal_or_above; } casing_prefix_context_t; /* The case-mapping context of the empty prefix string. */ extern @GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ const casing_prefix_context_t unicase_empty_prefix_context; /* Return the case-mapping context of a given prefix string. */ extern casing_prefix_context_t u8_casing_prefix_context (const uint8_t *s, size_t n); extern casing_prefix_context_t u16_casing_prefix_context (const uint16_t *s, size_t n); extern casing_prefix_context_t u32_casing_prefix_context (const uint32_t *s, size_t n); /* Return the case-mapping context of the prefix concat(A, S), given the case-mapping context of the prefix A. */ extern casing_prefix_context_t u8_casing_prefixes_context (const uint8_t *s, size_t n, casing_prefix_context_t a_context); extern casing_prefix_context_t u16_casing_prefixes_context (const uint16_t *s, size_t n, casing_prefix_context_t a_context); extern casing_prefix_context_t u32_casing_prefixes_context (const uint32_t *s, size_t n, casing_prefix_context_t a_context); /* The case-mapping context given by a suffix string. */ typedef struct casing_suffix_context { /* These fields are private, undocumented. */ uint32_t first_char_except_ignorable; uint32_t bits; } casing_suffix_context_t; /* The case-mapping context of the empty suffix string. */ extern @GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ const casing_suffix_context_t unicase_empty_suffix_context; /* Return the case-mapping context of a given suffix string. */ extern casing_suffix_context_t u8_casing_suffix_context (const uint8_t *s, size_t n); extern casing_suffix_context_t u16_casing_suffix_context (const uint16_t *s, size_t n); extern casing_suffix_context_t u32_casing_suffix_context (const uint32_t *s, size_t n); /* Return the case-mapping context of the suffix concat(S, A), given the case-mapping context of the suffix A. */ extern casing_suffix_context_t u8_casing_suffixes_context (const uint8_t *s, size_t n, casing_suffix_context_t a_context); extern casing_suffix_context_t u16_casing_suffixes_context (const uint16_t *s, size_t n, casing_suffix_context_t a_context); extern casing_suffix_context_t u32_casing_suffixes_context (const uint32_t *s, size_t n, casing_suffix_context_t a_context); /* Return the uppercase mapping of a string that is surrounded by a prefix and a suffix. */ extern uint8_t * u8_ct_toupper (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_ct_toupper (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_ct_toupper (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Return the lowercase mapping of a string that is surrounded by a prefix and a suffix. */ extern uint8_t * u8_ct_tolower (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_ct_tolower (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_ct_tolower (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Return the titlecase mapping of a string that is surrounded by a prefix and a suffix. */ extern uint8_t * u8_ct_totitle (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_ct_totitle (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_ct_totitle (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Return the case folded string. Comparing uN_casefold (S1) and uN_casefold (S2) with uN_cmp2() is equivalent to comparing S1 and S2 with uN_casecmp(). The nf argument identifies the normalization form to apply after the case-mapping. It can also be NULL, for no normalization. */ extern uint8_t * u8_casefold (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_casefold (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_casefold (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Likewise, for a string that is surrounded by a prefix and a suffix. */ extern uint8_t * u8_ct_casefold (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_ct_casefold (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_ct_casefold (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Compare S1 and S2, ignoring differences in case and normalization. The nf argument identifies the normalization form to apply after the case-mapping. It can also be NULL, for no normalization. If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and return 0. Upon failure, return -1 with errno set. */ extern int u8_casecmp (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); extern int u16_casecmp (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); extern int u32_casecmp (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); extern int ulc_casecmp (const char *s1, size_t n1, const char *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); /* Convert the string S of length N to a NUL-terminated byte sequence, in such a way that comparing uN_casexfrm (S1) and uN_casexfrm (S2) with the gnulib function memcmp2() is equivalent to comparing S1 and S2 with uN_casecoll(). NF must be either UNINORM_NFC, UNINORM_NFKC, or NULL for no normalization. */ extern char * u8_casexfrm (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, char *_UC_RESTRICT resultbuf, size_t *lengthp); extern char * u16_casexfrm (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, char *_UC_RESTRICT resultbuf, size_t *lengthp); extern char * u32_casexfrm (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, char *_UC_RESTRICT resultbuf, size_t *lengthp); extern char * ulc_casexfrm (const char *s, size_t n, const char *iso639_language, uninorm_t nf, char *_UC_RESTRICT resultbuf, size_t *lengthp); /* Compare S1 and S2, ignoring differences in case and normalization, using the collation rules of the current locale. The nf argument identifies the normalization form to apply after the case-mapping. It must be either UNINORM_NFC or UNINORM_NFKC. It can also be NULL, for no normalization. If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and return 0. Upon failure, return -1 with errno set. */ extern int u8_casecoll (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); extern int u16_casecoll (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); extern int u32_casecoll (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); extern int ulc_casecoll (const char *s1, size_t n1, const char *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp); /* Set *RESULTP to true if mapping NFD(S) to upper case is a no-op, or to false otherwise, and return 0. Upon failure, return -1 with errno set. */ extern int u8_is_uppercase (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u16_is_uppercase (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u32_is_uppercase (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp); /* Set *RESULTP to true if mapping NFD(S) to lower case is a no-op, or to false otherwise, and return 0. Upon failure, return -1 with errno set. */ extern int u8_is_lowercase (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u16_is_lowercase (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u32_is_lowercase (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp); /* Set *RESULTP to true if mapping NFD(S) to title case is a no-op, or to false otherwise, and return 0. Upon failure, return -1 with errno set. */ extern int u8_is_titlecase (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u16_is_titlecase (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u32_is_titlecase (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp); /* Set *RESULTP to true if applying case folding to NFD(S) is a no-op, or to false otherwise, and return 0. Upon failure, return -1 with errno set. */ extern int u8_is_casefolded (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u16_is_casefolded (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u32_is_casefolded (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp); /* Set *RESULTP to true if case matters for S, that is, if mapping NFD(S) to either upper case or lower case or title case is not a no-op. Set *RESULTP to false if NFD(S) maps to itself under the upper case mapping, under the lower case mapping, and under the title case mapping; in other words, when NFD(S) consists entirely of caseless characters. Upon failure, return -1 with errno set. */ extern int u8_is_cased (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u16_is_cased (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp); extern int u32_is_cased (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp); /* ========================================================================= */ #ifdef __cplusplus } #endif #endif /* _UNICASE_H */ ��������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unictype.in.h��������������������������������������������������������0000644�0001750�0001750�00000146364�14557510505�014677� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Unicode character classification and properties. Copyright (C) 2002, 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _UNICTYPE_H #define _UNICTYPE_H #include "unitypes.h" /* Get bool. */ #include <stdbool.h> /* Get size_t. */ #include <stddef.h> #if @HAVE_UNISTRING_WOE32DLL_H@ # include <unistring/woe32dll.h> #else # define LIBUNISTRING_DLL_VARIABLE #endif #ifdef __cplusplus extern "C" { #endif /* ========================================================================= */ /* Field 1 of Unicode Character Database: Character name. See "uniname.h". */ /* ========================================================================= */ /* Field 2 of Unicode Character Database: General category. */ /* Data type denoting a General category value. This is not just a bitmask, but rather a bitmask and a pointer to the lookup table, so that programs that use only the predefined bitmasks (i.e. don't combine bitmasks with & and |) don't have a link-time dependency towards the big general table. */ typedef struct { uint32_t bitmask : 31; /*bool*/ unsigned int generic : 1; union { const void *table; /* when generic is 0 */ bool (*lookup_fn) (ucs4_t uc, uint32_t bitmask); /* when generic is 1 */ } lookup; } uc_general_category_t; /* Bits and bit masks denoting General category values. UnicodeData-3.2.0.html says a 32-bit integer will always suffice to represent them. These bit masks can only be used with the uc_is_general_category_withtable function. */ enum { UC_CATEGORY_MASK_L = 0x0000001f, UC_CATEGORY_MASK_LC = 0x00000007, UC_CATEGORY_MASK_Lu = 0x00000001, UC_CATEGORY_MASK_Ll = 0x00000002, UC_CATEGORY_MASK_Lt = 0x00000004, UC_CATEGORY_MASK_Lm = 0x00000008, UC_CATEGORY_MASK_Lo = 0x00000010, UC_CATEGORY_MASK_M = 0x000000e0, UC_CATEGORY_MASK_Mn = 0x00000020, UC_CATEGORY_MASK_Mc = 0x00000040, UC_CATEGORY_MASK_Me = 0x00000080, UC_CATEGORY_MASK_N = 0x00000700, UC_CATEGORY_MASK_Nd = 0x00000100, UC_CATEGORY_MASK_Nl = 0x00000200, UC_CATEGORY_MASK_No = 0x00000400, UC_CATEGORY_MASK_P = 0x0003f800, UC_CATEGORY_MASK_Pc = 0x00000800, UC_CATEGORY_MASK_Pd = 0x00001000, UC_CATEGORY_MASK_Ps = 0x00002000, UC_CATEGORY_MASK_Pe = 0x00004000, UC_CATEGORY_MASK_Pi = 0x00008000, UC_CATEGORY_MASK_Pf = 0x00010000, UC_CATEGORY_MASK_Po = 0x00020000, UC_CATEGORY_MASK_S = 0x003c0000, UC_CATEGORY_MASK_Sm = 0x00040000, UC_CATEGORY_MASK_Sc = 0x00080000, UC_CATEGORY_MASK_Sk = 0x00100000, UC_CATEGORY_MASK_So = 0x00200000, UC_CATEGORY_MASK_Z = 0x01c00000, UC_CATEGORY_MASK_Zs = 0x00400000, UC_CATEGORY_MASK_Zl = 0x00800000, UC_CATEGORY_MASK_Zp = 0x01000000, UC_CATEGORY_MASK_C = 0x3e000000, UC_CATEGORY_MASK_Cc = 0x02000000, UC_CATEGORY_MASK_Cf = 0x04000000, UC_CATEGORY_MASK_Cs = 0x08000000, UC_CATEGORY_MASK_Co = 0x10000000, UC_CATEGORY_MASK_Cn = 0x20000000 }; /* Predefined General category values. */ extern @GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_L; extern @GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_LC; extern @GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Lu; extern @GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Ll; extern @GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Lt; extern @GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Lm; extern @GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Lo; extern @GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_M; extern @GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Mn; extern @GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Mc; extern @GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Me; extern @GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_N; extern @GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Nd; extern @GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Nl; extern @GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_No; extern @GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_P; extern @GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Pc; extern @GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Pd; extern @GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Ps; extern @GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Pe; extern @GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Pi; extern @GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Pf; extern @GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Po; extern @GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_S; extern @GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Sm; extern @GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Sc; extern @GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Sk; extern @GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_So; extern @GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Z; extern @GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Zs; extern @GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Zl; extern @GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Zp; extern @GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_C; extern @GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Cc; extern @GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Cf; extern @GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Cs; extern @GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Co; extern @GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ const uc_general_category_t UC_CATEGORY_Cn; /* Non-public. */ extern const uc_general_category_t _UC_CATEGORY_NONE; /* Alias names for predefined General category values. */ #define UC_LETTER UC_CATEGORY_L #define UC_CASED_LETTER UC_CATEGORY_LC #define UC_UPPERCASE_LETTER UC_CATEGORY_Lu #define UC_LOWERCASE_LETTER UC_CATEGORY_Ll #define UC_TITLECASE_LETTER UC_CATEGORY_Lt #define UC_MODIFIER_LETTER UC_CATEGORY_Lm #define UC_OTHER_LETTER UC_CATEGORY_Lo #define UC_MARK UC_CATEGORY_M #define UC_NON_SPACING_MARK UC_CATEGORY_Mn #define UC_COMBINING_SPACING_MARK UC_CATEGORY_Mc #define UC_ENCLOSING_MARK UC_CATEGORY_Me #define UC_NUMBER UC_CATEGORY_N #define UC_DECIMAL_DIGIT_NUMBER UC_CATEGORY_Nd #define UC_LETTER_NUMBER UC_CATEGORY_Nl #define UC_OTHER_NUMBER UC_CATEGORY_No #define UC_PUNCTUATION UC_CATEGORY_P #define UC_CONNECTOR_PUNCTUATION UC_CATEGORY_Pc #define UC_DASH_PUNCTUATION UC_CATEGORY_Pd #define UC_OPEN_PUNCTUATION UC_CATEGORY_Ps /* a.k.a. UC_START_PUNCTUATION */ #define UC_CLOSE_PUNCTUATION UC_CATEGORY_Pe /* a.k.a. UC_END_PUNCTUATION */ #define UC_INITIAL_QUOTE_PUNCTUATION UC_CATEGORY_Pi #define UC_FINAL_QUOTE_PUNCTUATION UC_CATEGORY_Pf #define UC_OTHER_PUNCTUATION UC_CATEGORY_Po #define UC_SYMBOL UC_CATEGORY_S #define UC_MATH_SYMBOL UC_CATEGORY_Sm #define UC_CURRENCY_SYMBOL UC_CATEGORY_Sc #define UC_MODIFIER_SYMBOL UC_CATEGORY_Sk #define UC_OTHER_SYMBOL UC_CATEGORY_So #define UC_SEPARATOR UC_CATEGORY_Z #define UC_SPACE_SEPARATOR UC_CATEGORY_Zs #define UC_LINE_SEPARATOR UC_CATEGORY_Zl #define UC_PARAGRAPH_SEPARATOR UC_CATEGORY_Zp #define UC_OTHER UC_CATEGORY_C #define UC_CONTROL UC_CATEGORY_Cc #define UC_FORMAT UC_CATEGORY_Cf #define UC_SURROGATE UC_CATEGORY_Cs /* all of them are invalid characters */ #define UC_PRIVATE_USE UC_CATEGORY_Co #define UC_UNASSIGNED UC_CATEGORY_Cn /* some of them are invalid characters */ /* Return the union of two general categories. This corresponds to the unions of the two sets of characters. */ extern uc_general_category_t uc_general_category_or (uc_general_category_t category1, uc_general_category_t category2); /* Return the intersection of two general categories as bit masks. This *does*not* correspond to the intersection of the two sets of characters. */ extern uc_general_category_t uc_general_category_and (uc_general_category_t category1, uc_general_category_t category2); /* Return the intersection of a general category with the complement of a second general category, as bit masks. This *does*not* correspond to the intersection with complement, when viewing the categories as sets of characters. */ extern uc_general_category_t uc_general_category_and_not (uc_general_category_t category1, uc_general_category_t category2); /* Return the name of a general category. */ extern const char * uc_general_category_name (uc_general_category_t category) _UC_ATTRIBUTE_PURE; /* Return the long name of a general category. */ extern const char * uc_general_category_long_name (uc_general_category_t category) _UC_ATTRIBUTE_PURE; /* Return the general category given by name, e.g. "Lu", or by long name, e.g. "Uppercase Letter". */ extern uc_general_category_t uc_general_category_byname (const char *category_name) _UC_ATTRIBUTE_PURE; /* Return the general category of a Unicode character. */ extern uc_general_category_t uc_general_category (ucs4_t uc) _UC_ATTRIBUTE_PURE; /* Test whether a Unicode character belongs to a given category. The CATEGORY argument can be the combination of several predefined general categories. */ extern bool uc_is_general_category (ucs4_t uc, uc_general_category_t category) _UC_ATTRIBUTE_PURE; /* Likewise. This function uses a big table comprising all categories. */ extern bool uc_is_general_category_withtable (ucs4_t uc, uint32_t bitmask) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Field 3 of Unicode Character Database: Canonical combining class. */ /* The possible results of uc_combining_class (0..255) are described in UCD.html. The list here is not definitive; more values can be added in future versions. */ enum { UC_CCC_NR = 0, /* Not Reordered */ UC_CCC_OV = 1, /* Overlay */ UC_CCC_NK = 7, /* Nukta */ UC_CCC_KV = 8, /* Kana Voicing */ UC_CCC_VR = 9, /* Virama */ UC_CCC_ATBL = 200, /* Attached Below Left */ UC_CCC_ATB = 202, /* Attached Below */ UC_CCC_ATA = 214, /* Attached Above */ UC_CCC_ATAR = 216, /* Attached Above Right */ UC_CCC_BL = 218, /* Below Left */ UC_CCC_B = 220, /* Below */ UC_CCC_BR = 222, /* Below Right */ UC_CCC_L = 224, /* Left */ UC_CCC_R = 226, /* Right */ UC_CCC_AL = 228, /* Above Left */ UC_CCC_A = 230, /* Above */ UC_CCC_AR = 232, /* Above Right */ UC_CCC_DB = 233, /* Double Below */ UC_CCC_DA = 234, /* Double Above */ UC_CCC_IS = 240 /* Iota Subscript */ }; /* Return the canonical combining class of a Unicode character. */ extern int uc_combining_class (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Return the name of a canonical combining class. */ extern const char * uc_combining_class_name (int ccc) _UC_ATTRIBUTE_CONST; /* Return the long name of a canonical combining class. */ extern const char * uc_combining_class_long_name (int ccc) _UC_ATTRIBUTE_CONST; /* Return the canonical combining class given by name, e.g. "BL", or by long name, e.g. "Below Left". */ extern int uc_combining_class_byname (const char *ccc_name) _UC_ATTRIBUTE_PURE; /* ========================================================================= */ /* Field 4 of Unicode Character Database: Bidi class. Before Unicode 4.0, this field was called "Bidirectional category". */ enum { UC_BIDI_L, /* Left-to-Right */ UC_BIDI_LRE, /* Left-to-Right Embedding */ UC_BIDI_LRO, /* Left-to-Right Override */ UC_BIDI_R, /* Right-to-Left */ UC_BIDI_AL, /* Right-to-Left Arabic */ UC_BIDI_RLE, /* Right-to-Left Embedding */ UC_BIDI_RLO, /* Right-to-Left Override */ UC_BIDI_PDF, /* Pop Directional Format */ UC_BIDI_EN, /* European Number */ UC_BIDI_ES, /* European Number Separator */ UC_BIDI_ET, /* European Number Terminator */ UC_BIDI_AN, /* Arabic Number */ UC_BIDI_CS, /* Common Number Separator */ UC_BIDI_NSM, /* Non-Spacing Mark */ UC_BIDI_BN, /* Boundary Neutral */ UC_BIDI_B, /* Paragraph Separator */ UC_BIDI_S, /* Segment Separator */ UC_BIDI_WS, /* Whitespace */ UC_BIDI_ON, /* Other Neutral */ UC_BIDI_LRI, /* Left-to-Right Isolate */ UC_BIDI_RLI, /* Right-to-Left Isolate */ UC_BIDI_FSI, /* First Strong Isolate */ UC_BIDI_PDI /* Pop Directional Isolate */ }; /* Return the name of a bidi class. */ extern const char * uc_bidi_class_name (int bidi_class) _UC_ATTRIBUTE_CONST; /* Same; obsolete function name. */ extern const char * uc_bidi_category_name (int category) _UC_ATTRIBUTE_CONST; /* Return the long name of a bidi class. */ extern const char * uc_bidi_class_long_name (int bidi_class) _UC_ATTRIBUTE_CONST; /* Return the bidi class given by name, e.g. "LRE", or by long name, e.g. "Left-to-Right Embedding". */ extern int uc_bidi_class_byname (const char *bidi_class_name) _UC_ATTRIBUTE_PURE; /* Same; obsolete function name. */ extern int uc_bidi_category_byname (const char *category_name) _UC_ATTRIBUTE_PURE; /* Return the bidi class of a Unicode character. */ extern int uc_bidi_class (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Same; obsolete function name. */ extern int uc_bidi_category (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test whether a Unicode character belongs to a given bidi class. */ extern bool uc_is_bidi_class (ucs4_t uc, int bidi_class) _UC_ATTRIBUTE_CONST; /* Same; obsolete function name. */ extern bool uc_is_bidi_category (ucs4_t uc, int category) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Field 5 of Unicode Character Database: Character decomposition mapping. See "uninorm.h". */ /* ========================================================================= */ /* Field 6 of Unicode Character Database: Decimal digit value. */ /* Return the decimal digit value of a Unicode character. */ extern int uc_decimal_value (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Field 7 of Unicode Character Database: Digit value. */ /* Return the digit value of a Unicode character. */ extern int uc_digit_value (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Field 8 of Unicode Character Database: Numeric value. */ /* Return the numeric value of a Unicode character. */ typedef struct { int numerator; int denominator; } uc_fraction_t; extern uc_fraction_t uc_numeric_value (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Field 9 of Unicode Character Database: Mirrored. */ /* Return the mirrored character of a Unicode character UC in *PUC. */ extern bool uc_mirror_char (ucs4_t uc, ucs4_t *puc); /* ========================================================================= */ /* Field 10 of Unicode Character Database: Unicode 1.0 Name. Not available in this library. */ /* ========================================================================= */ /* Field 11 of Unicode Character Database: ISO 10646 comment. Not available in this library. */ /* ========================================================================= */ /* Field 12, 13, 14 of Unicode Character Database: Uppercase mapping, lowercase mapping, titlecase mapping. See "unicase.h". */ /* ========================================================================= */ /* Field 2 of the file ArabicShaping.txt in the Unicode Character Database. */ /* Possible joining types. */ enum { UC_JOINING_TYPE_U, /* Non_Joining */ UC_JOINING_TYPE_T, /* Transparent */ UC_JOINING_TYPE_C, /* Join_Causing */ UC_JOINING_TYPE_L, /* Left_Joining */ UC_JOINING_TYPE_R, /* Right_Joining */ UC_JOINING_TYPE_D /* Dual_Joining */ }; /* Return the name of a joining type. */ extern const char * uc_joining_type_name (int joining_type) _UC_ATTRIBUTE_CONST; /* Return the long name of a joining type. */ extern const char * uc_joining_type_long_name (int joining_type) _UC_ATTRIBUTE_CONST; /* Return the joining type given by name, e.g. "D", or by long name, e.g. "Dual Joining". */ extern int uc_joining_type_byname (const char *joining_type_name) _UC_ATTRIBUTE_PURE; /* Return the joining type of a Unicode character. */ extern int uc_joining_type (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Field 3 of the file ArabicShaping.txt in the Unicode Character Database. */ /* Possible joining groups. This enumeration may be extended in the future. */ enum { UC_JOINING_GROUP_NONE, /* No_Joining_Group */ UC_JOINING_GROUP_AIN, /* Ain */ UC_JOINING_GROUP_ALAPH, /* Alaph */ UC_JOINING_GROUP_ALEF, /* Alef */ UC_JOINING_GROUP_BEH, /* Beh */ UC_JOINING_GROUP_BETH, /* Beth */ UC_JOINING_GROUP_BURUSHASKI_YEH_BARREE, /* Burushaski_Yeh_Barree */ UC_JOINING_GROUP_DAL, /* Dal */ UC_JOINING_GROUP_DALATH_RISH, /* Dalath_Rish */ UC_JOINING_GROUP_E, /* E */ UC_JOINING_GROUP_FARSI_YEH, /* Farsi_Yeh */ UC_JOINING_GROUP_FE, /* Fe */ UC_JOINING_GROUP_FEH, /* Feh */ UC_JOINING_GROUP_FINAL_SEMKATH, /* Final_Semkath */ UC_JOINING_GROUP_GAF, /* Gaf */ UC_JOINING_GROUP_GAMAL, /* Gamal */ UC_JOINING_GROUP_HAH, /* Hah */ UC_JOINING_GROUP_HE, /* He */ UC_JOINING_GROUP_HEH, /* Heh */ UC_JOINING_GROUP_HEH_GOAL, /* Heh_Goal */ UC_JOINING_GROUP_HETH, /* Heth */ UC_JOINING_GROUP_KAF, /* Kaf */ UC_JOINING_GROUP_KAPH, /* Kaph */ UC_JOINING_GROUP_KHAPH, /* Khaph */ UC_JOINING_GROUP_KNOTTED_HEH, /* Knotted_Heh */ UC_JOINING_GROUP_LAM, /* Lam */ UC_JOINING_GROUP_LAMADH, /* Lamadh */ UC_JOINING_GROUP_MEEM, /* Meem */ UC_JOINING_GROUP_MIM, /* Mim */ UC_JOINING_GROUP_NOON, /* Noon */ UC_JOINING_GROUP_NUN, /* Nun */ UC_JOINING_GROUP_NYA, /* Nya */ UC_JOINING_GROUP_PE, /* Pe */ UC_JOINING_GROUP_QAF, /* Qaf */ UC_JOINING_GROUP_QAPH, /* Qaph */ UC_JOINING_GROUP_REH, /* Reh */ UC_JOINING_GROUP_REVERSED_PE, /* Reversed_Pe */ UC_JOINING_GROUP_SAD, /* Sad */ UC_JOINING_GROUP_SADHE, /* Sadhe */ UC_JOINING_GROUP_SEEN, /* Seen */ UC_JOINING_GROUP_SEMKATH, /* Semkath */ UC_JOINING_GROUP_SHIN, /* Shin */ UC_JOINING_GROUP_SWASH_KAF, /* Swash_Kaf */ UC_JOINING_GROUP_SYRIAC_WAW, /* Syriac_Waw */ UC_JOINING_GROUP_TAH, /* Tah */ UC_JOINING_GROUP_TAW, /* Taw */ UC_JOINING_GROUP_TEH_MARBUTA, /* Teh_Marbuta */ UC_JOINING_GROUP_TEH_MARBUTA_GOAL, /* Teh_Marbuta_Goal */ UC_JOINING_GROUP_TETH, /* Teth */ UC_JOINING_GROUP_WAW, /* Waw */ UC_JOINING_GROUP_YEH, /* Yeh */ UC_JOINING_GROUP_YEH_BARREE, /* Yeh_Barree */ UC_JOINING_GROUP_YEH_WITH_TAIL, /* Yeh_With_Tail */ UC_JOINING_GROUP_YUDH, /* Yudh */ UC_JOINING_GROUP_YUDH_HE, /* Yudh_He */ UC_JOINING_GROUP_ZAIN, /* Zain */ UC_JOINING_GROUP_ZHAIN, /* Zhain */ UC_JOINING_GROUP_ROHINGYA_YEH, /* Rohingya_Yeh */ UC_JOINING_GROUP_STRAIGHT_WAW, /* Straight_Waw */ UC_JOINING_GROUP_MANICHAEAN_ALEPH, /* Manichaean_Aleph */ UC_JOINING_GROUP_MANICHAEAN_BETH, /* Manichaean_Beth */ UC_JOINING_GROUP_MANICHAEAN_GIMEL, /* Manichaean_Gimel */ UC_JOINING_GROUP_MANICHAEAN_DALETH, /* Manichaean_Daleth */ UC_JOINING_GROUP_MANICHAEAN_WAW, /* Manichaean_Waw */ UC_JOINING_GROUP_MANICHAEAN_ZAYIN, /* Manichaean_Zayin */ UC_JOINING_GROUP_MANICHAEAN_HETH, /* Manichaean_Heth */ UC_JOINING_GROUP_MANICHAEAN_TETH, /* Manichaean_Teth */ UC_JOINING_GROUP_MANICHAEAN_YODH, /* Manichaean_Yodh */ UC_JOINING_GROUP_MANICHAEAN_KAPH, /* Manichaean_Kaph */ UC_JOINING_GROUP_MANICHAEAN_LAMEDH, /* Manichaean_Lamedh */ UC_JOINING_GROUP_MANICHAEAN_DHAMEDH, /* Manichaean_Dhamedh */ UC_JOINING_GROUP_MANICHAEAN_THAMEDH, /* Manichaean_Thamedh */ UC_JOINING_GROUP_MANICHAEAN_MEM, /* Manichaean_Mem */ UC_JOINING_GROUP_MANICHAEAN_NUN, /* Manichaean_Nun */ UC_JOINING_GROUP_MANICHAEAN_SAMEKH, /* Manichaean_Aleph */ UC_JOINING_GROUP_MANICHAEAN_AYIN, /* Manichaean_Ayin */ UC_JOINING_GROUP_MANICHAEAN_PE, /* Manichaean_Pe */ UC_JOINING_GROUP_MANICHAEAN_SADHE, /* Manichaean_Sadhe */ UC_JOINING_GROUP_MANICHAEAN_QOPH, /* Manichaean_Qoph */ UC_JOINING_GROUP_MANICHAEAN_RESH, /* Manichaean_Resh */ UC_JOINING_GROUP_MANICHAEAN_TAW, /* Manichaean_Taw */ UC_JOINING_GROUP_MANICHAEAN_ONE, /* Manichaean_One */ UC_JOINING_GROUP_MANICHAEAN_FIVE, /* Manichaean_Five */ UC_JOINING_GROUP_MANICHAEAN_TEN, /* Manichaean_Ten */ UC_JOINING_GROUP_MANICHAEAN_TWENTY, /* Manichaean_Twenty */ UC_JOINING_GROUP_MANICHAEAN_HUNDRED, /* Manichaean_Hundred */ UC_JOINING_GROUP_AFRICAN_FEH, /* African_Feh */ UC_JOINING_GROUP_AFRICAN_QAF, /* African_Qaf */ UC_JOINING_GROUP_AFRICAN_NOON, /* African_Noon */ UC_JOINING_GROUP_MALAYALAM_NGA, /* Malayalam_Nga */ UC_JOINING_GROUP_MALAYALAM_JA, /* Malayalam_Ja */ UC_JOINING_GROUP_MALAYALAM_NYA, /* Malayalam_Nya */ UC_JOINING_GROUP_MALAYALAM_TTA, /* Malayalam_Tta */ UC_JOINING_GROUP_MALAYALAM_NNA, /* Malayalam_Nna */ UC_JOINING_GROUP_MALAYALAM_NNNA, /* Malayalam_Nnna */ UC_JOINING_GROUP_MALAYALAM_BHA, /* Malayalam_Bha */ UC_JOINING_GROUP_MALAYALAM_RA, /* Malayalam_Ra */ UC_JOINING_GROUP_MALAYALAM_LLA, /* Malayalam_Lla */ UC_JOINING_GROUP_MALAYALAM_LLLA, /* Malayalam_Llla */ UC_JOINING_GROUP_MALAYALAM_SSA, /* Malayalam_Ssa */ UC_JOINING_GROUP_HANIFI_ROHINGYA_PA, /* Hanifi_Rohingya_Pa */ UC_JOINING_GROUP_HANIFI_ROHINGYA_KINNA_YA, /* Hanifi_Rohingya_Kinna_Ya */ UC_JOINING_GROUP_THIN_YEH, /* Thin_Yeh */ UC_JOINING_GROUP_VERTICAL_TAIL /* Vertical_Tail */ }; /* Return the name of a joining group. */ extern const char * uc_joining_group_name (int joining_group) _UC_ATTRIBUTE_CONST; /* Return the joining group given by name, e.g. "Teh_Marbuta". */ extern int uc_joining_group_byname (const char *joining_group_name) _UC_ATTRIBUTE_PURE; /* Return the joining group of a Unicode character. */ extern int uc_joining_group (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Common API for properties. */ /* Data type denoting a property. This is not just a number, but rather a pointer to the test functions, so that programs that use only few of the properties don't have a link-time dependency towards all the tables. */ typedef struct { bool (*test_fn) (ucs4_t uc); } uc_property_t; /* Predefined properties. */ /* General. */ extern @GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_WHITE_SPACE; extern @GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_ALPHABETIC; extern @GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_OTHER_ALPHABETIC; extern @GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_NOT_A_CHARACTER; extern @GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT; extern @GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT; extern @GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_DEPRECATED; extern @GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_LOGICAL_ORDER_EXCEPTION; extern @GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_VARIATION_SELECTOR; extern @GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_PRIVATE_USE; extern @GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_UNASSIGNED_CODE_VALUE; /* Case. */ extern @GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_UPPERCASE; extern @GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_OTHER_UPPERCASE; extern @GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_LOWERCASE; extern @GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_OTHER_LOWERCASE; extern @GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_TITLECASE; extern @GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_CASED; extern @GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_CASE_IGNORABLE; extern @GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_CHANGES_WHEN_LOWERCASED; extern @GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_CHANGES_WHEN_UPPERCASED; extern @GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_CHANGES_WHEN_TITLECASED; extern @GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_CHANGES_WHEN_CASEFOLDED; extern @GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_CHANGES_WHEN_CASEMAPPED; extern @GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_SOFT_DOTTED; /* Identifiers. */ extern @GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_ID_START; extern @GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_OTHER_ID_START; extern @GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_ID_CONTINUE; extern @GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_OTHER_ID_CONTINUE; extern @GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_XID_START; extern @GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_XID_CONTINUE; extern @GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_ID_COMPAT_MATH_START; extern @GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_ID_COMPAT_MATH_CONTINUE; extern @GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_PATTERN_WHITE_SPACE; extern @GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_PATTERN_SYNTAX; /* Shaping and rendering. */ extern @GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_JOIN_CONTROL; extern @GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_GRAPHEME_BASE; extern @GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_GRAPHEME_EXTEND; extern @GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_OTHER_GRAPHEME_EXTEND; extern @GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_GRAPHEME_LINK; /* Bidi. */ extern @GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_CONTROL; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_LEFT_TO_RIGHT; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_EUROPEAN_DIGIT; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_ARABIC_DIGIT; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_COMMON_SEPARATOR; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_BLOCK_SEPARATOR; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_SEGMENT_SEPARATOR; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_WHITESPACE; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_NON_SPACING_MARK; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_PDF; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE; extern @GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_BIDI_OTHER_NEUTRAL; /* Numeric. */ extern @GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_HEX_DIGIT; extern @GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_ASCII_HEX_DIGIT; /* CJK. */ extern @GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_IDEOGRAPHIC; extern @GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_UNIFIED_IDEOGRAPH; extern @GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_RADICAL; extern @GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_IDS_UNARY_OPERATOR; extern @GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_IDS_BINARY_OPERATOR; extern @GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_IDS_TRINARY_OPERATOR; /* Emoji. */ extern @GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_EMOJI; extern @GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_EMOJI_PRESENTATION; extern @GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_EMOJI_MODIFIER; extern @GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_EMOJI_MODIFIER_BASE; extern @GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_EMOJI_COMPONENT; extern @GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_EXTENDED_PICTOGRAPHIC; /* Misc. */ extern @GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_ZERO_WIDTH; extern @GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_SPACE; extern @GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_NON_BREAK; extern @GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_ISO_CONTROL; extern @GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_FORMAT_CONTROL; extern @GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_DASH; extern @GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_HYPHEN; extern @GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_PUNCTUATION; extern @GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_LINE_SEPARATOR; extern @GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_PARAGRAPH_SEPARATOR; extern @GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_QUOTATION_MARK; extern @GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_SENTENCE_TERMINAL; extern @GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_TERMINAL_PUNCTUATION; extern @GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_CURRENCY_SYMBOL; extern @GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_MATH; extern @GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_OTHER_MATH; extern @GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_PAIRED_PUNCTUATION; extern @GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_LEFT_OF_PAIR; extern @GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_COMBINING; extern @GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_COMPOSITE; extern @GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_DECIMAL_DIGIT; extern @GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_NUMERIC; extern @GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_DIACRITIC; extern @GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_EXTENDER; extern @GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_IGNORABLE_CONTROL; extern @GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ const uc_property_t UC_PROPERTY_REGIONAL_INDICATOR; /* Return the property given by name, e.g. "White space". */ extern uc_property_t uc_property_byname (const char *property_name); /* Test whether a property is valid. */ #define uc_property_is_valid(property) ((property).test_fn != NULL) /* Test whether a Unicode character has a given property. */ extern bool uc_is_property (ucs4_t uc, uc_property_t property); extern bool uc_is_property_white_space (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_alphabetic (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_alphabetic (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_not_a_character (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_default_ignorable_code_point (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_default_ignorable_code_point (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_deprecated (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_logical_order_exception (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_variation_selector (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_private_use (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_unassigned_code_value (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_uppercase (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_uppercase (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_lowercase (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_lowercase (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_titlecase (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_cased (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_case_ignorable (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_changes_when_lowercased (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_changes_when_uppercased (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_changes_when_titlecased (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_changes_when_casefolded (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_changes_when_casemapped (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_soft_dotted (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_id_start (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_id_start (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_id_continue (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_id_continue (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_xid_start (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_xid_continue (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_id_compat_math_start (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_id_compat_math_continue (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_pattern_white_space (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_pattern_syntax (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_join_control (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_grapheme_base (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_grapheme_extend (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_grapheme_extend (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_grapheme_link (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_control (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_left_to_right (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_hebrew_right_to_left (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_arabic_right_to_left (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_european_digit (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_eur_num_separator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_eur_num_terminator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_arabic_digit (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_common_separator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_block_separator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_segment_separator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_whitespace (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_non_spacing_mark (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_boundary_neutral (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_pdf (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_embedding_or_override (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_bidi_other_neutral (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_hex_digit (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_ascii_hex_digit (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_ideographic (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_unified_ideograph (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_radical (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_ids_unary_operator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_ids_binary_operator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_ids_trinary_operator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_emoji (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_emoji_presentation (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_emoji_modifier (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_emoji_modifier_base (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_emoji_component (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_extended_pictographic (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_zero_width (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_space (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_non_break (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_iso_control (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_format_control (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_dash (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_hyphen (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_punctuation (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_line_separator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_paragraph_separator (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_quotation_mark (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_sentence_terminal (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_terminal_punctuation (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_currency_symbol (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_math (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_other_math (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_paired_punctuation (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_left_of_pair (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_combining (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_composite (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_decimal_digit (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_numeric (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_diacritic (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_extender (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_ignorable_control (ucs4_t uc) _UC_ATTRIBUTE_CONST; extern bool uc_is_property_regional_indicator (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Other attributes. */ /* ------------------------------------------------------------------------- */ /* Indic_Conjunct_Break (InCB): from the file DerivedCoreProperties.txt in the Unicode Character Database. */ /* Possible values of the Indic_Conjunct_Break attribute. This enumeration may be extended in the future. */ enum { UC_INDIC_CONJUNCT_BREAK_NONE, /* None */ UC_INDIC_CONJUNCT_BREAK_CONSONANT, /* Consonant */ UC_INDIC_CONJUNCT_BREAK_LINKER, /* Linker */ UC_INDIC_CONJUNCT_BREAK_EXTEND /* Extend */ }; /* Return the name of an Indic_Conjunct_Break value. */ extern const char * uc_indic_conjunct_break_name (int indic_conjunct_break) _UC_ATTRIBUTE_CONST; /* Return the Indic_Conjunct_Break value given by name, e.g. "Consonant". */ extern int uc_indic_conjunct_break_byname (const char *indic_conjunct_break_name) _UC_ATTRIBUTE_PURE; /* Return the Indic_Conjunct_Break attribute of a Unicode character. */ extern int uc_indic_conjunct_break (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Subdivision of the Unicode characters into scripts. */ typedef struct { unsigned int code : 21; unsigned int start : 1; unsigned int end : 1; } uc_interval_t; typedef struct { unsigned int nintervals; const uc_interval_t *intervals; const char *name; } uc_script_t; /* Return the script of a Unicode character. */ extern const uc_script_t * uc_script (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Return the script given by name, e.g. "HAN". */ extern const uc_script_t * uc_script_byname (const char *script_name) _UC_ATTRIBUTE_PURE; /* Test whether a Unicode character belongs to a given script. */ extern bool uc_is_script (ucs4_t uc, const uc_script_t *script) _UC_ATTRIBUTE_PURE; /* Get the list of all scripts. */ extern void uc_all_scripts (const uc_script_t **scripts, size_t *count); /* ========================================================================= */ /* Subdivision of the Unicode character range into blocks. */ typedef struct { ucs4_t start; ucs4_t end; const char *name; } uc_block_t; /* Return the block a character belongs to. */ extern const uc_block_t * uc_block (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test whether a Unicode character belongs to a given block. */ extern bool uc_is_block (ucs4_t uc, const uc_block_t *block) _UC_ATTRIBUTE_PURE; /* Get the list of all blocks. */ extern void uc_all_blocks (const uc_block_t **blocks, size_t *count); /* ========================================================================= */ /* Properties taken from language standards. */ /* Test whether a Unicode character is considered whitespace in ISO C 99. */ extern bool uc_is_c_whitespace (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test whether a Unicode character is considered whitespace in Java. */ extern bool uc_is_java_whitespace (ucs4_t uc) _UC_ATTRIBUTE_CONST; enum { UC_IDENTIFIER_START, /* valid as first or subsequent character */ UC_IDENTIFIER_VALID, /* valid as subsequent character only */ UC_IDENTIFIER_INVALID, /* not valid */ UC_IDENTIFIER_IGNORABLE /* ignorable (Java only) */ }; /* Return the categorization of a Unicode character w.r.t. the ISO C 99 identifier syntax. */ extern int uc_c_ident_category (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Return the categorization of a Unicode character w.r.t. the Java identifier syntax. */ extern int uc_java_ident_category (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ /* Like ISO C <ctype.h> and <wctype.h>. These functions are deprecated, because this set of functions was designed with ASCII in mind and cannot reflect the more diverse reality of the Unicode character set. But they can be a quick-and-dirty porting aid when migrating from wchar_t APIs to Unicode strings. */ /* Test for any character for which 'uc_is_alpha' or 'uc_is_digit' is true. */ extern bool uc_is_alnum (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character for which 'uc_is_upper' or 'uc_is_lower' is true, or any character that is one of a locale-specific set of characters for which none of 'uc_is_cntrl', 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ extern bool uc_is_alpha (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any control character. */ extern bool uc_is_cntrl (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character that corresponds to a decimal-digit character. */ extern bool uc_is_digit (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character for which 'uc_is_print' is true and 'uc_is_space' is false. */ extern bool uc_is_graph (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character that corresponds to a lowercase letter or is one of a locale-specific set of characters for which none of 'uc_is_cntrl', 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ extern bool uc_is_lower (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any printing character. */ extern bool uc_is_print (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any printing character that is one of a locale-specific set of characters for which neither 'uc_is_space' nor 'uc_is_alnum' is true. */ extern bool uc_is_punct (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character that corresponds to a locale-specific set of characters for which none of 'uc_is_alnum', 'uc_is_graph', or 'uc_is_punct' is true. */ extern bool uc_is_space (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character that corresponds to an uppercase letter or is one of a locale-specific set of character for which none of 'uc_is_cntrl', 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ extern bool uc_is_upper (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* Test for any character that corresponds to a hexadecimal-digit character. */ extern bool uc_is_xdigit (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* GNU extension. */ /* Test for any character that corresponds to a standard blank character or a locale-specific set of characters for which 'uc_is_alnum' is false. */ extern bool uc_is_blank (ucs4_t uc) _UC_ATTRIBUTE_CONST; /* ========================================================================= */ #ifdef __cplusplus } #endif #endif /* _UNICTYPE_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/uninorm.in.h���������������������������������������������������������0000644�0001750�0001750�00000025144�14557510505�014516� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Normalization forms (composition and decomposition) of Unicode strings. Copyright (C) 2001-2002, 2009-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _UNINORM_H #define _UNINORM_H /* Get size_t. */ #include <stddef.h> #include "unitypes.h" #if @HAVE_UNISTRING_WOE32DLL_H@ # include <unistring/woe32dll.h> #else # define LIBUNISTRING_DLL_VARIABLE #endif #ifdef __cplusplus extern "C" { #endif /* Conventions: All functions prefixed with u8_ operate on UTF-8 encoded strings. Their unit is an uint8_t (1 byte). All functions prefixed with u16_ operate on UTF-16 encoded strings. Their unit is an uint16_t (a 2-byte word). All functions prefixed with u32_ operate on UCS-4 encoded strings. Their unit is an uint32_t (a 4-byte word). All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly n units. Functions returning a string result take a (resultbuf, lengthp) argument pair. If resultbuf is not NULL and the result fits into *lengthp units, it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly allocated string is returned. In both cases, *lengthp is set to the length (number of units) of the returned string. In case of error, NULL is returned and errno is set. */ enum { UC_DECOMP_CANONICAL,/* Canonical decomposition. */ UC_DECOMP_FONT, /* <font> A font variant (e.g. a blackletter form). */ UC_DECOMP_NOBREAK, /* <noBreak> A no-break version of a space or hyphen. */ UC_DECOMP_INITIAL, /* <initial> An initial presentation form (Arabic). */ UC_DECOMP_MEDIAL, /* <medial> A medial presentation form (Arabic). */ UC_DECOMP_FINAL, /* <final> A final presentation form (Arabic). */ UC_DECOMP_ISOLATED,/* <isolated> An isolated presentation form (Arabic). */ UC_DECOMP_CIRCLE, /* <circle> An encircled form. */ UC_DECOMP_SUPER, /* <super> A superscript form. */ UC_DECOMP_SUB, /* <sub> A subscript form. */ UC_DECOMP_VERTICAL,/* <vertical> A vertical layout presentation form. */ UC_DECOMP_WIDE, /* <wide> A wide (or zenkaku) compatibility character. */ UC_DECOMP_NARROW, /* <narrow> A narrow (or hankaku) compatibility character. */ UC_DECOMP_SMALL, /* <small> A small variant form (CNS compatibility). */ UC_DECOMP_SQUARE, /* <square> A CJK squared font variant. */ UC_DECOMP_FRACTION,/* <fraction> A vulgar fraction form. */ UC_DECOMP_COMPAT /* <compat> Otherwise unspecified compatibility character. */ }; /* Maximum size of decomposition of a single Unicode character. */ #define UC_DECOMPOSITION_MAX_LENGTH 32 /* Return the character decomposition mapping of a Unicode character. DECOMPOSITION must point to an array of at least UC_DECOMPOSITION_MAX_LENGTH ucs_t elements. When a decomposition exists, DECOMPOSITION[0..N-1] and *DECOMP_TAG are filled and N is returned. Otherwise -1 is returned. */ extern int uc_decomposition (ucs4_t uc, int *decomp_tag, ucs4_t *decomposition); /* Return the canonical character decomposition mapping of a Unicode character. DECOMPOSITION must point to an array of at least UC_DECOMPOSITION_MAX_LENGTH ucs_t elements. When a decomposition exists, DECOMPOSITION[0..N-1] is filled and N is returned. Otherwise -1 is returned. */ extern int uc_canonical_decomposition (ucs4_t uc, ucs4_t *decomposition); /* Attempt to combine the Unicode characters uc1, uc2. uc1 is known to have canonical combining class 0. Return the combination of uc1 and uc2, if it exists. Return 0 otherwise. Not all decompositions can be recombined using this function. See the Unicode file CompositionExclusions.txt for details. */ extern ucs4_t uc_composition (ucs4_t uc1, ucs4_t uc2) _UC_ATTRIBUTE_CONST; /* An object of type uninorm_t denotes a Unicode normalization form. */ struct unicode_normalization_form; typedef const struct unicode_normalization_form *uninorm_t; /* UNINORM_NFD: Normalization form D: canonical decomposition. */ extern @GNULIB_UNINORM_NFD_DLL_VARIABLE@ const struct unicode_normalization_form uninorm_nfd; #define UNINORM_NFD (&uninorm_nfd) /* UNINORM_NFC: Normalization form C: canonical decomposition, then canonical composition. */ extern @GNULIB_UNINORM_NFC_DLL_VARIABLE@ const struct unicode_normalization_form uninorm_nfc; #define UNINORM_NFC (&uninorm_nfc) /* UNINORM_NFKD: Normalization form KD: compatibility decomposition. */ extern @GNULIB_UNINORM_NFKD_DLL_VARIABLE@ const struct unicode_normalization_form uninorm_nfkd; #define UNINORM_NFKD (&uninorm_nfkd) /* UNINORM_NFKC: Normalization form KC: compatibility decomposition, then canonical composition. */ extern @GNULIB_UNINORM_NFKC_DLL_VARIABLE@ const struct unicode_normalization_form uninorm_nfkc; #define UNINORM_NFKC (&uninorm_nfkc) /* Test whether a normalization form does compatibility decomposition. */ #define uninorm_is_compat_decomposing(nf) \ ((* (const unsigned int *) (nf) >> 0) & 1) /* Test whether a normalization form includes canonical composition. */ #define uninorm_is_composing(nf) \ ((* (const unsigned int *) (nf) >> 1) & 1) /* Return the decomposing variant of a normalization form. This maps NFC,NFD -> NFD and NFKC,NFKD -> NFKD. */ extern uninorm_t uninorm_decomposing_form (uninorm_t nf) _UC_ATTRIBUTE_PURE; /* Return the specified normalization form of a string. */ extern uint8_t * u8_normalize (uninorm_t nf, const uint8_t *s, size_t n, uint8_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint16_t * u16_normalize (uninorm_t nf, const uint16_t *s, size_t n, uint16_t *_UC_RESTRICT resultbuf, size_t *lengthp); extern uint32_t * u32_normalize (uninorm_t nf, const uint32_t *s, size_t n, uint32_t *_UC_RESTRICT resultbuf, size_t *lengthp); /* Compare S1 and S2, ignoring differences in normalization. NF must be either UNINORM_NFD or UNINORM_NFKD. If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and return 0. Upon failure, return -1 with errno set. */ extern int u8_normcmp (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, uninorm_t nf, int *resultp); extern int u16_normcmp (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, uninorm_t nf, int *resultp); extern int u32_normcmp (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, uninorm_t nf, int *resultp); /* Converts the string S of length N to a NUL-terminated byte sequence, in such a way that comparing uN_normxfrm (S1) and uN_normxfrm (S2) with uN_cmp2() is equivalent to comparing S1 and S2 with uN_normcoll(). NF must be either UNINORM_NFC or UNINORM_NFKC. */ extern char * u8_normxfrm (const uint8_t *s, size_t n, uninorm_t nf, char *resultbuf, size_t *lengthp); extern char * u16_normxfrm (const uint16_t *s, size_t n, uninorm_t nf, char *resultbuf, size_t *lengthp); extern char * u32_normxfrm (const uint32_t *s, size_t n, uninorm_t nf, char *resultbuf, size_t *lengthp); /* Compare S1 and S2, ignoring differences in normalization, using the collation rules of the current locale. NF must be either UNINORM_NFC or UNINORM_NFKC. If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and return 0. Upon failure, return -1 with errno set. */ extern int u8_normcoll (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, uninorm_t nf, int *resultp); extern int u16_normcoll (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, uninorm_t nf, int *resultp); extern int u32_normcoll (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, uninorm_t nf, int *resultp); /* Normalization of a stream of Unicode characters. A "stream of Unicode characters" is essentially a function that accepts an ucs4_t argument repeatedly, optionally combined with a function that "flushes" the stream. */ /* Data type of a stream of Unicode characters that normalizes its input according to a given normalization form and passes the normalized character sequence to the encapsulated stream of Unicode characters. */ struct uninorm_filter; /* Bring data buffered in the filter to its destination, the encapsulated stream, then close and free the filter. Return 0 if successful, or -1 with errno set upon failure. */ extern int uninorm_filter_free (struct uninorm_filter *filter); /* Create and return a normalization filter for Unicode characters. The pair (stream_func, stream_data) is the encapsulated stream. stream_func (stream_data, uc) receives the Unicode character uc and returns 0 if successful, or -1 with errno set upon failure. Return the new filter, or NULL with errno set upon failure. */ extern struct uninorm_filter * uninorm_filter_create (uninorm_t nf, int (*stream_func) (void *stream_data, ucs4_t uc), void *stream_data) _GL_ATTRIBUTE_DEALLOC (uninorm_filter_free, 1); /* Stuff a Unicode character into a normalizing filter. Return 0 if successful, or -1 with errno set upon failure. */ extern int uninorm_filter_write (struct uninorm_filter *filter, ucs4_t uc); /* Bring data buffered in the filter to its destination, the encapsulated stream. Return 0 if successful, or -1 with errno set upon failure. Note! If after calling this function, additional characters are written into the filter, the resulting character sequence in the encapsulated stream will not necessarily be normalized. */ extern int uninorm_filter_flush (struct uninorm_filter *filter); #ifdef __cplusplus } #endif #endif /* _UNINORM_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unistd.in.h����������������������������������������������������������0000644�0001750�0001750�00000242646�14557510505�014345� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <unistd.h>. Copyright (C) 2003-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_UNISTD_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_UNISTD_H@ && defined _GL_INCLUDING_UNISTD_H /* Special invocation convention: - On Mac OS X 10.3.9 we have a sequence of nested includes <unistd.h> -> <signal.h> -> <pthread.h> -> <unistd.h> In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_UNISTD_H@ #else /* Normal invocation convention. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_UNISTD_H@ # define _GL_INCLUDING_UNISTD_H # @INCLUDE_NEXT@ @NEXT_UNISTD_H@ # undef _GL_INCLUDING_UNISTD_H #endif /* Avoid lseek bugs in FreeBSD, macOS <https://bugs.gnu.org/61386>. This bug is fixed after FreeBSD 13; see <https://bugs.freebsd.org/256205>. Use macOS "9999" to stand for a future fixed macOS version. */ #if defined __FreeBSD__ && __FreeBSD__ < 14 # undef SEEK_DATA # undef SEEK_HOLE #elif defined __APPLE__ && defined __MACH__ && defined SEEK_DATA # ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ # include <AvailabilityMacros.h> # endif # if (!defined MAC_OS_X_VERSION_MIN_REQUIRED \ || MAC_OS_X_VERSION_MIN_REQUIRED < 99990000) # include <sys/fcntl.h> /* It also defines the two macros. */ # undef SEEK_DATA # undef SEEK_HOLE # endif #endif /* Get all possible declarations of gethostname(). */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ && !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include <winsock2.h> # undef _GL_INCLUDING_WINSOCK2_H #endif #if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H #define _@GUARD_PREFIX@_UNISTD_H /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* NetBSD 5.0 mis-defines NULL. Also get size_t. */ /* But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include <stddef.h> #endif /* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */ /* MSVC declares 'unlink' in <stdio.h>, not in <unistd.h>. We must include it before we #define unlink rpl_unlink. */ /* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ || ((@GNULIB_UNLINK@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__)) \ || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ && defined __CYGWIN__)) \ && ! defined __GLIBC__ # include <stdio.h> #endif /* Cygwin 1.7.1 and Android 4.3 declare unlinkat in <fcntl.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) \ && (defined __CYGWIN__ || defined __ANDROID__) \ && ! defined __GLIBC__ # include <fcntl.h> #endif /* mingw fails to declare _exit in <unistd.h>. */ /* mingw, MSVC, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ /* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>. */ /* OSF Tru64 Unix cannot see gnulib rpl_strtod when system <stdlib.h> is included here. */ /* But avoid namespace pollution on glibc systems. */ #if !defined __GLIBC__ && !defined __osf__ # define __need_system_stdlib_h # include <stdlib.h> # undef __need_system_stdlib_h #endif /* Native Windows platforms declare _chdir, _getcwd, _rmdir in <io.h> and/or <direct.h>, not in <unistd.h>. They also declare _access(), _chmod(), _close(), _dup(), _dup2(), _isatty(), _lseek(), _read(), _unlink(), _write() in <io.h>. */ #if defined _WIN32 && !defined __CYGWIN__ # include <io.h> # include <direct.h> #endif /* Native Windows platforms declare _execl*, _execv* in <process.h>. */ #if defined _WIN32 && !defined __CYGWIN__ # include <process.h> #endif /* AIX and OSF/1 5.1 declare getdomainname in <netdb.h>, not in <unistd.h>. NonStop Kernel declares gethostname in <netdb.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ && !defined __GLIBC__ # include <netdb.h> #endif /* Mac OS X 10.13, Solaris 11.4, and Android 9.0 declare getentropy in <sys/random.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_GETENTROPY@ || defined GNULIB_POSIXCHECK) \ && ((defined __APPLE__ && defined __MACH__) || defined __sun \ || defined __ANDROID__) \ && @UNISTD_H_HAVE_SYS_RANDOM_H@ \ && !defined __GLIBC__ # include <sys/random.h> #endif /* Android 4.3 declares fchownat in <sys/stat.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_FCHOWNAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ && !defined __GLIBC__ # include <sys/stat.h> #endif /* MSVC defines off_t in <sys/types.h>. May also define off_t to a 64-bit type on native Windows. */ /* Get off_t, ssize_t, mode_t. */ #include <sys/types.h> /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Get getopt(), optarg, optind, opterr, optopt. */ #if @GNULIB_GETOPT_POSIX@ && @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT # include <getopt-cdefs.h> # include <getopt-pfx-core.h> #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_UNISTD_INLINE # define _GL_UNISTD_INLINE _GL_INLINE #endif /* Hide some function declarations from <winsock2.h>. */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # else _GL_WARN_ON_USE (socket, "socket() used without including <sys/socket.h>"); _GL_WARN_ON_USE (connect, "connect() used without including <sys/socket.h>"); _GL_WARN_ON_USE (accept, "accept() used without including <sys/socket.h>"); _GL_WARN_ON_USE (bind, "bind() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getpeername, "getpeername() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockname, "getsockname() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (listen, "listen() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recv, "recv() used without including <sys/socket.h>"); _GL_WARN_ON_USE (send, "send() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including <sys/socket.h>"); _GL_WARN_ON_USE (sendto, "sendto() used without including <sys/socket.h>"); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (shutdown, "shutdown() used without including <sys/socket.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including <sys/select.h>"); # endif # endif #endif /* OS/2 EMX lacks these macros. */ #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif /* Ensure *_OK macros exist. */ #ifndef F_OK # define F_OK 0 # define X_OK 1 # define W_OK 2 # define R_OK 4 #endif /* Declare overridden functions. */ #if @GNULIB_ACCESS@ # if @REPLACE_ACCESS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef access # define access rpl_access # endif _GL_FUNCDECL_RPL (access, int, (const char *file, int mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (access, int, (const char *file, int mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef access # define access _access # endif _GL_CXXALIAS_MDA (access, int, (const char *file, int mode)); # else _GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); # endif _GL_CXXALIASWARN (access); #elif defined GNULIB_POSIXCHECK # undef access # if HAVE_RAW_DECL_ACCESS /* The access() function is a security risk. */ _GL_WARN_ON_USE (access, "access does not always support X_OK - " "use gnulib module access for portability; " "also, this function is a security risk - " "use the gnulib module faccessat instead"); # endif #elif @GNULIB_MDA_ACCESS@ /* On native Windows, map 'access' to '_access', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::access always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef access # define access _access # endif _GL_CXXALIAS_MDA (access, int, (const char *file, int mode)); # else _GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); # endif _GL_CXXALIASWARN (access); #endif #if @GNULIB_CHDIR@ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chdir # define chdir _chdir # endif _GL_CXXALIAS_MDA (chdir, int, (const char *file)); # else _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIASWARN (chdir); #elif defined GNULIB_POSIXCHECK # undef chdir # if HAVE_RAW_DECL_CHDIR _GL_WARN_ON_USE (chown, "chdir is not always in <unistd.h> - " "use gnulib module chdir for portability"); # endif #elif @GNULIB_MDA_CHDIR@ /* On native Windows, map 'chdir' to '_chdir', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::chdir always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chdir # define chdir _chdir # endif _GL_CXXALIAS_MDA (chdir, int, (const char *file)); # else _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIASWARN (chdir); #endif #if @GNULIB_CHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html. */ # if @REPLACE_CHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chown # define chown rpl_chown # endif _GL_FUNCDECL_RPL (chown, int, (const char *file, uid_t uid, gid_t gid) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (chown, int, (const char *file, uid_t uid, gid_t gid)); # else # if !@HAVE_CHOWN@ _GL_FUNCDECL_SYS (chown, int, (const char *file, uid_t uid, gid_t gid) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (chown, int, (const char *file, uid_t uid, gid_t gid)); # endif _GL_CXXALIASWARN (chown); #elif defined GNULIB_POSIXCHECK # undef chown # if HAVE_RAW_DECL_CHOWN _GL_WARN_ON_USE (chown, "chown fails to follow symlinks on some systems and " "doesn't treat a uid or gid of -1 on some systems - " "use gnulib module chown for portability"); # endif #endif #if @GNULIB_CLOSE@ # if @REPLACE_CLOSE@ /* Automatically included by modules that need a replacement for close. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close rpl_close # endif _GL_FUNCDECL_RPL (close, int, (int fd)); _GL_CXXALIAS_RPL (close, int, (int fd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close _close # endif _GL_CXXALIAS_MDA (close, int, (int fd)); # else _GL_CXXALIAS_SYS (close, int, (int fd)); # endif _GL_CXXALIASWARN (close); #elif @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ # undef close # define close close_used_without_requesting_gnulib_module_close #elif defined GNULIB_POSIXCHECK # undef close /* Assume close is always declared. */ _GL_WARN_ON_USE (close, "close does not portably work on sockets - " "use gnulib module close for portability"); #elif @GNULIB_MDA_CLOSE@ /* On native Windows, map 'close' to '_close', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::close always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close _close # endif _GL_CXXALIAS_MDA (close, int, (int fd)); # else _GL_CXXALIAS_SYS (close, int, (int fd)); # endif _GL_CXXALIASWARN (close); #endif #if @GNULIB_COPY_FILE_RANGE@ # if @REPLACE_COPY_FILE_RANGE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef copy_file_range # define copy_file_range rpl_copy_file_range # endif _GL_FUNCDECL_RPL (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); _GL_CXXALIAS_RPL (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); # else # if !@HAVE_COPY_FILE_RANGE@ _GL_FUNCDECL_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); # endif _GL_CXXALIAS_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); # endif _GL_CXXALIASWARN (copy_file_range); #elif defined GNULIB_POSIXCHECK # undef copy_file_range # if HAVE_RAW_DECL_COPY_FILE_RANGE _GL_WARN_ON_USE (copy_file_range, "copy_file_range is unportable - " "use gnulib module copy_file_range for portability"); # endif #endif #if @GNULIB_DUP@ # if @REPLACE_DUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup rpl_dup # endif _GL_FUNCDECL_RPL (dup, int, (int oldfd)); _GL_CXXALIAS_RPL (dup, int, (int oldfd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup # define dup _dup # endif _GL_CXXALIAS_MDA (dup, int, (int oldfd)); # else _GL_CXXALIAS_SYS (dup, int, (int oldfd)); # endif _GL_CXXALIASWARN (dup); #elif defined GNULIB_POSIXCHECK # undef dup # if HAVE_RAW_DECL_DUP _GL_WARN_ON_USE (dup, "dup is unportable - " "use gnulib module dup for portability"); # endif #elif @GNULIB_MDA_DUP@ /* On native Windows, map 'dup' to '_dup', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::dup always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup # define dup _dup # endif _GL_CXXALIAS_MDA (dup, int, (int oldfd)); # else _GL_CXXALIAS_SYS (dup, int, (int oldfd)); # endif _GL_CXXALIASWARN (dup); #endif #if @GNULIB_DUP2@ /* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if NEWFD = OLDFD, otherwise close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>. */ # if @REPLACE_DUP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup2 rpl_dup2 # endif _GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); _GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup2 # define dup2 _dup2 # endif _GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd)); # else _GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIASWARN (dup2); #elif defined GNULIB_POSIXCHECK # undef dup2 # if HAVE_RAW_DECL_DUP2 _GL_WARN_ON_USE (dup2, "dup2 is unportable - " "use gnulib module dup2 for portability"); # endif #elif @GNULIB_MDA_DUP2@ /* On native Windows, map 'dup2' to '_dup2', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::dup2 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup2 # define dup2 _dup2 # endif _GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd)); # else _GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIASWARN (dup2); #endif #if @GNULIB_DUP3@ /* Copy the file descriptor OLDFD into file descriptor NEWFD, with the specified flags. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). Close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the Linux man page at <https://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>. */ # if @REPLACE_DUP3@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup3 # define dup3 rpl_dup3 # endif _GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); # else # if !@HAVE_DUP3@ _GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); # endif _GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (dup3); # endif #elif defined GNULIB_POSIXCHECK # undef dup3 # if HAVE_RAW_DECL_DUP3 _GL_WARN_ON_USE (dup3, "dup3 is unportable - " "use gnulib module dup3 for portability"); # endif #endif #if @GNULIB_ENVIRON@ # if defined __CYGWIN__ && !defined __i386__ /* The 'environ' variable is defined in a DLL. Therefore its declaration needs the '__declspec(dllimport)' attribute, but the system's <unistd.h> lacks it. This leads to a link error on 64-bit Cygwin when the option -Wl,--disable-auto-import is in use. */ _GL_EXTERN_C __declspec(dllimport) char **environ; # endif # if !@HAVE_DECL_ENVIRON@ /* Set of environment variables and values. An array of strings of the form "VARIABLE=VALUE", terminated with a NULL. */ # if defined __APPLE__ && defined __MACH__ # include <TargetConditionals.h> # if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR # define _GL_USE_CRT_EXTERNS # endif # endif # ifdef _GL_USE_CRT_EXTERNS # include <crt_externs.h> # define environ (*_NSGetEnviron ()) # else # ifdef __cplusplus extern "C" { # endif extern char **environ; # ifdef __cplusplus } # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if HAVE_RAW_DECL_ENVIRON _GL_UNISTD_INLINE char *** _GL_WARN_ON_USE_ATTRIBUTE ("environ is unportable - " "use gnulib module environ for portability") rpl_environ (void) { return &environ; } # undef environ # define environ (*rpl_environ ()) # endif #endif #if @GNULIB_EUIDACCESS@ /* Like access(), except that it uses the effective user id and group id of the current process. */ # if !@HAVE_EUIDACCESS@ _GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); _GL_CXXALIASWARN (euidaccess); # if defined GNULIB_POSIXCHECK /* Like access(), this function is a security risk. */ _GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " "use the gnulib module faccessat instead"); # endif #elif defined GNULIB_POSIXCHECK # undef euidaccess # if HAVE_RAW_DECL_EUIDACCESS _GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " "use gnulib module euidaccess for portability"); # endif #endif #if @GNULIB_EXECL@ # if @REPLACE_EXECL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execl # define execl rpl_execl # endif _GL_FUNCDECL_RPL (execl, int, (const char *program, const char *arg, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (execl, int, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execl); #elif defined GNULIB_POSIXCHECK # undef execl # if HAVE_RAW_DECL_EXECL _GL_WARN_ON_USE (execl, "execl behaves very differently on mingw - " "use gnulib module execl for portability"); # endif #elif @GNULIB_MDA_EXECL@ /* On native Windows, map 'execl' to '_execl', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execl always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execl # define execl _execl # endif _GL_CXXALIAS_MDA (execl, intptr_t, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execl); #endif #if @GNULIB_EXECLE@ # if @REPLACE_EXECLE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execle # define execle rpl_execle # endif _GL_FUNCDECL_RPL (execle, int, (const char *program, const char *arg, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (execle, int, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execle); #elif defined GNULIB_POSIXCHECK # undef execle # if HAVE_RAW_DECL_EXECLE _GL_WARN_ON_USE (execle, "execle behaves very differently on mingw - " "use gnulib module execle for portability"); # endif #elif @GNULIB_MDA_EXECLE@ /* On native Windows, map 'execle' to '_execle', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execle always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execle # define execle _execle # endif _GL_CXXALIAS_MDA (execle, intptr_t, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execle); #endif #if @GNULIB_EXECLP@ # if @REPLACE_EXECLP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execlp # define execlp rpl_execlp # endif _GL_FUNCDECL_RPL (execlp, int, (const char *program, const char *arg, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (execlp, int, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execlp); #elif defined GNULIB_POSIXCHECK # undef execlp # if HAVE_RAW_DECL_EXECLP _GL_WARN_ON_USE (execlp, "execlp behaves very differently on mingw - " "use gnulib module execlp for portability"); # endif #elif @GNULIB_MDA_EXECLP@ /* On native Windows, map 'execlp' to '_execlp', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execlp always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execlp # define execlp _execlp # endif _GL_CXXALIAS_MDA (execlp, intptr_t, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execlp); #endif #if @GNULIB_EXECV@ # if @REPLACE_EXECV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execv # define execv rpl_execv # endif _GL_FUNCDECL_RPL (execv, int, (const char *program, char * const *argv) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execv, int, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execv); #elif defined GNULIB_POSIXCHECK # undef execv # if HAVE_RAW_DECL_EXECV _GL_WARN_ON_USE (execv, "execv behaves very differently on mingw - " "use gnulib module execv for portability"); # endif #elif @GNULIB_MDA_EXECV@ /* On native Windows, map 'execv' to '_execv', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execv always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execv # define execv _execv # endif _GL_CXXALIAS_MDA_CAST (execv, intptr_t, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execv); #endif #if @GNULIB_EXECVE@ # if @REPLACE_EXECVE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execve # define execve rpl_execve # endif _GL_FUNCDECL_RPL (execve, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execve, int, (const char *program, char * const *argv, char * const *env)); # else _GL_CXXALIAS_SYS (execve, int, (const char *program, char * const *argv, char * const *env)); # endif _GL_CXXALIASWARN (execve); #elif defined GNULIB_POSIXCHECK # undef execve # if HAVE_RAW_DECL_EXECVE _GL_WARN_ON_USE (execve, "execve behaves very differently on mingw - " "use gnulib module execve for portability"); # endif #elif @GNULIB_MDA_EXECVE@ /* On native Windows, map 'execve' to '_execve', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execve always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execve # define execve _execve # endif _GL_CXXALIAS_MDA_CAST (execve, intptr_t, (const char *program, char * const *argv, char * const *env)); # else _GL_CXXALIAS_SYS (execve, int, (const char *program, char * const *argv, char * const *env)); # endif _GL_CXXALIASWARN (execve); #endif #if @GNULIB_EXECVP@ # if @REPLACE_EXECVP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvp # define execvp rpl_execvp # endif _GL_FUNCDECL_RPL (execvp, int, (const char *program, char * const *argv) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execvp, int, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execvp); #elif defined GNULIB_POSIXCHECK # undef execvp # if HAVE_RAW_DECL_EXECVP _GL_WARN_ON_USE (execvp, "execvp behaves very differently on mingw - " "use gnulib module execvp for portability"); # endif #elif @GNULIB_MDA_EXECVP@ /* On native Windows, map 'execvp' to '_execvp', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execvp always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvp # define execvp _execvp # endif _GL_CXXALIAS_MDA_CAST (execvp, intptr_t, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execvp); #endif #if @GNULIB_EXECVPE@ # if @REPLACE_EXECVPE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvpe # define execvpe rpl_execvpe # endif _GL_FUNCDECL_RPL (execvpe, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execvpe, int, (const char *program, char * const *argv, char * const *env)); # else # if !@HAVE_DECL_EXECVPE@ _GL_FUNCDECL_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (execvpe); # endif #elif defined GNULIB_POSIXCHECK # undef execvpe # if HAVE_RAW_DECL_EXECVPE _GL_WARN_ON_USE (execvpe, "execvpe behaves very differently on mingw - " "use gnulib module execvpe for portability"); # endif #elif @GNULIB_MDA_EXECVPE@ /* On native Windows, map 'execvpe' to '_execvpe', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execvpe on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvpe # define execvpe _execvpe # endif _GL_CXXALIAS_MDA_CAST (execvpe, intptr_t, (const char *program, char * const *argv, char * const *env)); # elif @HAVE_EXECVPE@ # if !@HAVE_DECL_EXECVPE@ _GL_FUNCDECL_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env)); # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_EXECVPE@ _GL_CXXALIASWARN (execvpe); # endif #endif #if @GNULIB_FACCESSAT@ # if @REPLACE_FACCESSAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef faccessat # define faccessat rpl_faccessat # endif _GL_FUNCDECL_RPL (faccessat, int, (int fd, char const *name, int mode, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (faccessat, int, (int fd, char const *name, int mode, int flag)); # else # if !@HAVE_FACCESSAT@ _GL_FUNCDECL_SYS (faccessat, int, (int fd, char const *file, int mode, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (faccessat, int, (int fd, char const *file, int mode, int flag)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (faccessat); # endif #elif defined GNULIB_POSIXCHECK # undef faccessat # if HAVE_RAW_DECL_FACCESSAT _GL_WARN_ON_USE (faccessat, "faccessat is not portable - " "use gnulib module faccessat for portability"); # endif #endif #if @GNULIB_FCHDIR@ /* Change the process' current working directory to the directory on which the given file descriptor is open. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>. */ # if @REPLACE_FCHDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fchdir # define fchdir rpl_fchdir # endif _GL_FUNCDECL_RPL (fchdir, int, (int /*fd*/)); _GL_CXXALIAS_RPL (fchdir, int, (int /*fd*/)); # else # if !@HAVE_FCHDIR@ || !@HAVE_DECL_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); # endif _GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); # endif _GL_CXXALIASWARN (fchdir); # if @REPLACE_FCHDIR@ || !@HAVE_FCHDIR@ /* Gnulib internal hooks needed to maintain the fchdir metadata. */ _GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) _GL_ARG_NONNULL ((2)); _GL_EXTERN_C void _gl_unregister_fd (int fd); _GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); _GL_EXTERN_C const char *_gl_directory_name (int fd); # endif #elif defined GNULIB_POSIXCHECK # undef fchdir # if HAVE_RAW_DECL_FCHDIR _GL_WARN_ON_USE (fchdir, "fchdir is unportable - " "use gnulib module fchdir for portability"); # endif #endif #if @GNULIB_FCHOWNAT@ # if @REPLACE_FCHOWNAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fchownat # define fchownat rpl_fchownat # endif _GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # else # if !@HAVE_FCHOWNAT@ _GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # endif _GL_CXXALIASWARN (fchownat); #elif defined GNULIB_POSIXCHECK # undef fchownat # if HAVE_RAW_DECL_FCHOWNAT _GL_WARN_ON_USE (fchownat, "fchownat is not portable - " "use gnulib module fchownat for portability"); # endif #endif #if @GNULIB_FDATASYNC@ /* Synchronize changes to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>. */ # if @REPLACE_FDATASYNC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdatasync # define fdatasync rpl_fdatasync # endif _GL_FUNCDECL_RPL (fdatasync, int, (int fd)); _GL_CXXALIAS_RPL (fdatasync, int, (int fd)); # else # if !@HAVE_FDATASYNC@|| !@HAVE_DECL_FDATASYNC@ _GL_FUNCDECL_SYS (fdatasync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fdatasync, int, (int fd)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fdatasync); # endif #elif defined GNULIB_POSIXCHECK # undef fdatasync # if HAVE_RAW_DECL_FDATASYNC _GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " "use gnulib module fdatasync for portability"); # endif #endif #if @GNULIB_FSYNC@ /* Synchronize changes, including metadata, to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>. */ # if !@HAVE_FSYNC@ _GL_FUNCDECL_SYS (fsync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fsync, int, (int fd)); _GL_CXXALIASWARN (fsync); #elif defined GNULIB_POSIXCHECK # undef fsync # if HAVE_RAW_DECL_FSYNC _GL_WARN_ON_USE (fsync, "fsync is unportable - " "use gnulib module fsync for portability"); # endif #endif #if @GNULIB_FTRUNCATE@ /* Change the size of the file to which FD is opened to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>. */ # if @REPLACE_FTRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftruncate # define ftruncate rpl_ftruncate # endif _GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); _GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); # else # if !@HAVE_FTRUNCATE@ _GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ftruncate); # endif #elif defined GNULIB_POSIXCHECK # undef ftruncate # if HAVE_RAW_DECL_FTRUNCATE _GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " "use gnulib module ftruncate for portability"); # endif #endif #if @GNULIB_GETCWD@ /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Return BUF if successful, or NULL if the directory couldn't be determined or SIZE was too small. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>. Additionally, the gnulib module 'getcwd' or 'getcwd-lgpl' guarantees the following GNU extension: If BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ # if @REPLACE_GETCWD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getcwd rpl_getcwd # endif _GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); _GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getcwd # define getcwd _getcwd # endif _GL_CXXALIAS_MDA (getcwd, char *, (char *buf, size_t size)); # else /* Need to cast, because on mingw, the second parameter is int size. */ _GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); # endif _GL_CXXALIASWARN (getcwd); #elif defined GNULIB_POSIXCHECK # undef getcwd # if HAVE_RAW_DECL_GETCWD _GL_WARN_ON_USE (getcwd, "getcwd is unportable - " "use gnulib module getcwd for portability"); # endif #elif @GNULIB_MDA_GETCWD@ /* On native Windows, map 'getcwd' to '_getcwd', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::getcwd always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getcwd # define getcwd _getcwd # endif /* Need to cast, because on mingw, the second parameter is either 'int size' or 'size_t size'. */ _GL_CXXALIAS_MDA_CAST (getcwd, char *, (char *buf, size_t size)); # else _GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); # endif _GL_CXXALIASWARN (getcwd); #endif #if @GNULIB_GETDOMAINNAME@ /* Return the NIS domain name of the machine. WARNING! The NIS domain name is unrelated to the fully qualified host name of the machine. It is also unrelated to email addresses. WARNING! The NIS domain name is usually the empty string or "(none)" when not using NIS. Put up to LEN bytes of the NIS domain name into NAME. Null terminate it if the name is shorter than LEN. If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @REPLACE_GETDOMAINNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdomainname # define getdomainname rpl_getdomainname # endif _GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); # else # if !@HAVE_DECL_GETDOMAINNAME@ _GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getdomainname); # endif #elif defined GNULIB_POSIXCHECK # undef getdomainname # if HAVE_RAW_DECL_GETDOMAINNAME _GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " "use gnulib module getdomainname for portability"); # endif #endif #if @GNULIB_GETDTABLESIZE@ /* Return the maximum number of file descriptors in the current process. In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ # if @REPLACE_GETDTABLESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdtablesize # define getdtablesize rpl_getdtablesize # endif _GL_FUNCDECL_RPL (getdtablesize, int, (void)); _GL_CXXALIAS_RPL (getdtablesize, int, (void)); # else # if !@HAVE_GETDTABLESIZE@ _GL_FUNCDECL_SYS (getdtablesize, int, (void)); # endif /* Need to cast, because on AIX, the parameter list is (...). */ _GL_CXXALIAS_SYS_CAST (getdtablesize, int, (void)); # endif _GL_CXXALIASWARN (getdtablesize); #elif defined GNULIB_POSIXCHECK # undef getdtablesize # if HAVE_RAW_DECL_GETDTABLESIZE _GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " "use gnulib module getdtablesize for portability"); # endif #endif #if @GNULIB_GETENTROPY@ /* Fill a buffer with random bytes. */ # if @REPLACE_GETENTROPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getentropy # define getentropy rpl_getentropy # endif _GL_FUNCDECL_RPL (getentropy, int, (void *buffer, size_t length)); _GL_CXXALIAS_RPL (getentropy, int, (void *buffer, size_t length)); # else # if !@HAVE_GETENTROPY@ _GL_FUNCDECL_SYS (getentropy, int, (void *buffer, size_t length)); # endif _GL_CXXALIAS_SYS (getentropy, int, (void *buffer, size_t length)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getentropy); # endif #elif defined GNULIB_POSIXCHECK # undef getentropy # if HAVE_RAW_DECL_GETENTROPY _GL_WARN_ON_USE (getentropy, "getentropy is unportable - " "use gnulib module getentropy for portability"); # endif #endif #if @GNULIB_GETGROUPS@ /* Return the supplemental groups that the current process belongs to. It is unspecified whether the effective group id is in the list. If N is 0, return the group count; otherwise, N describes how many entries are available in GROUPS. Return -1 and set errno if N is not 0 and not large enough. Fails with ENOSYS on some systems. */ # if @REPLACE_GETGROUPS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getgroups # define getgroups rpl_getgroups # endif _GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); _GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); # else # if !@HAVE_GETGROUPS@ _GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIASWARN (getgroups); #elif defined GNULIB_POSIXCHECK # undef getgroups # if HAVE_RAW_DECL_GETGROUPS _GL_WARN_ON_USE (getgroups, "getgroups is unportable - " "use gnulib module getgroups for portability"); # endif #endif #if @GNULIB_GETHOSTNAME@ /* Return the standard host name of the machine. WARNING! The host name may or may not be fully qualified. Put up to LEN bytes of the host name into NAME. Null terminate it if the name is shorter than LEN. If the host name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @UNISTD_H_HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname rpl_gethostname # endif _GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); # else # if !@HAVE_GETHOSTNAME@ _GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second parameter is int len. */ _GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (gethostname); #elif @UNISTD_H_HAVE_WINSOCK2_H@ # undef gethostname # define gethostname gethostname_used_without_requesting_gnulib_module_gethostname #elif defined GNULIB_POSIXCHECK # undef gethostname # if HAVE_RAW_DECL_GETHOSTNAME _GL_WARN_ON_USE (gethostname, "gethostname is unportable - " "use gnulib module gethostname for portability"); # endif #endif #if @GNULIB_GETLOGIN@ /* Returns the user's login name, or NULL if it cannot be found. Upon error, returns NULL with errno set. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>. Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if !@HAVE_DECL_GETLOGIN@ _GL_FUNCDECL_SYS (getlogin, char *, (void)); # endif _GL_CXXALIAS_SYS (getlogin, char *, (void)); _GL_CXXALIASWARN (getlogin); #elif defined GNULIB_POSIXCHECK # undef getlogin # if HAVE_RAW_DECL_GETLOGIN _GL_WARN_ON_USE (getlogin, "getlogin is unportable - " "use gnulib module getlogin for portability"); # endif #endif #if @GNULIB_GETLOGIN_R@ /* Copies the user's login name to NAME. The array pointed to by NAME has room for SIZE bytes. Returns 0 if successful. Upon error, an error number is returned, or -1 in the case that the login name cannot be found but no specific error is provided (this case is hopefully rare but is left open by the POSIX spec). See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>. Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if @REPLACE_GETLOGIN_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getlogin_r rpl_getlogin_r # endif _GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); # else # if !@HAVE_DECL_GETLOGIN_R@ _GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 systems, the second argument is int size. */ _GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getlogin_r); # endif #elif defined GNULIB_POSIXCHECK # undef getlogin_r # if HAVE_RAW_DECL_GETLOGIN_R _GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " "use gnulib module getlogin_r for portability"); # endif #endif #if @GNULIB_GETPAGESIZE@ # if @REPLACE_GETPAGESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize rpl_getpagesize # endif _GL_FUNCDECL_RPL (getpagesize, int, (void)); _GL_CXXALIAS_RPL (getpagesize, int, (void)); # else /* On HP-UX, getpagesize exists, but it is not declared in <unistd.h> even if the compiler options -D_HPUX_SOURCE -D_XOPEN_SOURCE=600 are used. */ # if defined __hpux _GL_FUNCDECL_SYS (getpagesize, int, (void)); # endif # if !@HAVE_GETPAGESIZE@ # if !defined getpagesize /* This is for POSIX systems. */ # if !defined _gl_getpagesize && defined _SC_PAGESIZE # if ! (defined __VMS && __VMS_VER < 70000000) # define _gl_getpagesize() sysconf (_SC_PAGESIZE) # endif # endif /* This is for older VMS. */ # if !defined _gl_getpagesize && defined __VMS # ifdef __ALPHA # define _gl_getpagesize() 8192 # else # define _gl_getpagesize() 512 # endif # endif /* This is for BeOS. */ # if !defined _gl_getpagesize && @HAVE_OS_H@ # include <OS.h> # if defined B_PAGE_SIZE # define _gl_getpagesize() B_PAGE_SIZE # endif # endif /* This is for AmigaOS4.0. */ # if !defined _gl_getpagesize && defined __amigaos4__ # define _gl_getpagesize() 2048 # endif /* This is for older Unix systems. */ # if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@ # include <sys/param.h> # ifdef EXEC_PAGESIZE # define _gl_getpagesize() EXEC_PAGESIZE # else # ifdef NBPG # ifndef CLSIZE # define CLSIZE 1 # endif # define _gl_getpagesize() (NBPG * CLSIZE) # else # ifdef NBPC # define _gl_getpagesize() NBPC # endif # endif # endif # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize() _gl_getpagesize () # else # if !GNULIB_defined_getpagesize_function _GL_UNISTD_INLINE int getpagesize () { return _gl_getpagesize (); } # define GNULIB_defined_getpagesize_function 1 # endif # endif # endif # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ _GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); # endif # if @HAVE_DECL_GETPAGESIZE@ _GL_CXXALIASWARN (getpagesize); # endif #elif defined GNULIB_POSIXCHECK # undef getpagesize # if HAVE_RAW_DECL_GETPAGESIZE _GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " "use gnulib module getpagesize for portability"); # endif #endif #if @GNULIB_GETPASS@ /* Function getpass() from module 'getpass': Read a password from /dev/tty or stdin. Function getpass() from module 'getpass-gnu': Read a password of arbitrary length from /dev/tty or stdin. */ # if (@GNULIB_GETPASS@ && @REPLACE_GETPASS@) \ || (@GNULIB_GETPASS_GNU@ && @REPLACE_GETPASS_FOR_GETPASS_GNU@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getpass # define getpass rpl_getpass # endif _GL_FUNCDECL_RPL (getpass, char *, (const char *prompt) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getpass, char *, (const char *prompt)); # else # if !@HAVE_GETPASS@ _GL_FUNCDECL_SYS (getpass, char *, (const char *prompt) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getpass, char *, (const char *prompt)); # endif _GL_CXXALIASWARN (getpass); #elif defined GNULIB_POSIXCHECK # undef getpass # if HAVE_RAW_DECL_GETPASS _GL_WARN_ON_USE (getpass, "getpass is unportable - " "use gnulib module getpass or getpass-gnu for portability"); # endif #endif #if @GNULIB_MDA_GETPID@ /* On native Windows, map 'getpid' to '_getpid', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::getpid always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getpid # define getpid _getpid # endif _GL_CXXALIAS_MDA (getpid, int, (void)); # else _GL_CXXALIAS_SYS (getpid, pid_t, (void)); # endif _GL_CXXALIASWARN (getpid); #endif #if @GNULIB_GETUSERSHELL@ /* Return the next valid login shell on the system, or NULL when the end of the list has been reached. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (getusershell, char *, (void)); # endif _GL_CXXALIAS_SYS (getusershell, char *, (void)); _GL_CXXALIASWARN (getusershell); #elif defined GNULIB_POSIXCHECK # undef getusershell # if HAVE_RAW_DECL_GETUSERSHELL _GL_WARN_ON_USE (getusershell, "getusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Rewind to pointer that is advanced at each getusershell() call. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (setusershell, void, (void)); # endif _GL_CXXALIAS_SYS (setusershell, void, (void)); _GL_CXXALIASWARN (setusershell); #elif defined GNULIB_POSIXCHECK # undef setusershell # if HAVE_RAW_DECL_SETUSERSHELL _GL_WARN_ON_USE (setusershell, "setusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Free the pointer that is advanced at each getusershell() call and associated resources. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (endusershell, void, (void)); # endif _GL_CXXALIAS_SYS (endusershell, void, (void)); _GL_CXXALIASWARN (endusershell); #elif defined GNULIB_POSIXCHECK # undef endusershell # if HAVE_RAW_DECL_ENDUSERSHELL _GL_WARN_ON_USE (endusershell, "endusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GROUP_MEMBER@ /* Determine whether group id is in calling user's group list. */ # if !@HAVE_GROUP_MEMBER@ _GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); # endif _GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); _GL_CXXALIASWARN (group_member); #elif defined GNULIB_POSIXCHECK # undef group_member # if HAVE_RAW_DECL_GROUP_MEMBER _GL_WARN_ON_USE (group_member, "group_member is unportable - " "use gnulib module group-member for portability"); # endif #endif #if @GNULIB_ISATTY@ # if @REPLACE_ISATTY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty rpl_isatty # endif # define GNULIB_defined_isatty 1 _GL_FUNCDECL_RPL (isatty, int, (int fd)); _GL_CXXALIAS_RPL (isatty, int, (int fd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty _isatty # endif _GL_CXXALIAS_MDA (isatty, int, (int fd)); # else _GL_CXXALIAS_SYS (isatty, int, (int fd)); # endif _GL_CXXALIASWARN (isatty); #elif defined GNULIB_POSIXCHECK # undef isatty # if HAVE_RAW_DECL_ISATTY _GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " "use gnulib module isatty for portability"); # endif #elif @GNULIB_MDA_ISATTY@ /* On native Windows, map 'isatty' to '_isatty', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::isatty always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty _isatty # endif _GL_CXXALIAS_MDA (isatty, int, (int fd)); # else _GL_CXXALIAS_SYS (isatty, int, (int fd)); # endif _GL_CXXALIASWARN (isatty); #endif #if @GNULIB_LCHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Do not follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>. */ # if @REPLACE_LCHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lchown # define lchown rpl_lchown # endif _GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); # else # if !@HAVE_LCHOWN@ _GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); # endif _GL_CXXALIASWARN (lchown); #elif defined GNULIB_POSIXCHECK # undef lchown # if HAVE_RAW_DECL_LCHOWN _GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " "use gnulib module lchown for portability"); # endif #endif #if @GNULIB_LINK@ /* Create a new hard link for an existing file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>. */ # if @REPLACE_LINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define link rpl_link # endif _GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); # else # if !@HAVE_LINK@ _GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); # endif _GL_CXXALIASWARN (link); #elif defined GNULIB_POSIXCHECK # undef link # if HAVE_RAW_DECL_LINK _GL_WARN_ON_USE (link, "link is unportable - " "use gnulib module link for portability"); # endif #endif #if @GNULIB_LINKAT@ /* Create a new hard link for an existing file, relative to two directories. FLAG controls whether symlinks are followed. Return 0 if successful, otherwise -1 and errno set. */ # if @REPLACE_LINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef linkat # define linkat rpl_linkat # endif _GL_FUNCDECL_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # else # if !@HAVE_LINKAT@ _GL_FUNCDECL_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (linkat); # endif #elif defined GNULIB_POSIXCHECK # undef linkat # if HAVE_RAW_DECL_LINKAT _GL_WARN_ON_USE (linkat, "linkat is unportable - " "use gnulib module linkat for portability"); # endif #endif #if @GNULIB_LSEEK@ /* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. Return the new offset if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>. */ # if @REPLACE_LSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lseek rpl_lseek # endif _GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); _GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lseek # define lseek _lseek # endif _GL_CXXALIAS_MDA (lseek, off_t, (int fd, off_t offset, int whence)); # else _GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); # endif _GL_CXXALIASWARN (lseek); #elif defined GNULIB_POSIXCHECK # undef lseek # if HAVE_RAW_DECL_LSEEK _GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " "systems - use gnulib module lseek for portability"); # endif #elif @GNULIB_MDA_LSEEK@ /* On native Windows, map 'lseek' to '_lseek', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::lseek always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lseek # define lseek _lseek # endif _GL_CXXALIAS_MDA (lseek, long, (int fd, long offset, int whence)); # else _GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); # endif _GL_CXXALIASWARN (lseek); #endif #if @GNULIB_PIPE@ /* Create a pipe, defaulting to O_BINARY mode. Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. */ # if !@HAVE_PIPE@ _GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pipe, int, (int fd[2])); _GL_CXXALIASWARN (pipe); #elif defined GNULIB_POSIXCHECK # undef pipe # if HAVE_RAW_DECL_PIPE _GL_WARN_ON_USE (pipe, "pipe is unportable - " "use gnulib module pipe-posix for portability"); # endif #endif #if @GNULIB_PIPE2@ /* Create a pipe, applying the given flags when opening the read-end of the pipe and the write-end of the pipe. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. See also the Linux man page at <https://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>. */ # if @REPLACE_PIPE2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pipe2 # define pipe2 rpl_pipe2 # endif _GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); # else _GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pipe2); # endif #elif defined GNULIB_POSIXCHECK # undef pipe2 # if HAVE_RAW_DECL_PIPE2 _GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " "use gnulib module pipe2 for portability"); # endif #endif #if @GNULIB_PREAD@ /* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. Return the number of bytes placed into BUF if successful, otherwise set errno and return -1. 0 indicates EOF. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>. */ # if @REPLACE_PREAD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pread # define pread rpl_pread # endif _GL_FUNCDECL_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PREAD@ _GL_FUNCDECL_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pread); # endif #elif defined GNULIB_POSIXCHECK # undef pread # if HAVE_RAW_DECL_PREAD _GL_WARN_ON_USE (pread, "pread is unportable - " "use gnulib module pread for portability"); # endif #endif #if @GNULIB_PWRITE@ /* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. Return the number of bytes written if successful, otherwise set errno and return -1. 0 indicates nothing written. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>. */ # if @REPLACE_PWRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pwrite # define pwrite rpl_pwrite # endif _GL_FUNCDECL_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PWRITE@ _GL_FUNCDECL_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pwrite); # endif #elif defined GNULIB_POSIXCHECK # undef pwrite # if HAVE_RAW_DECL_PWRITE _GL_WARN_ON_USE (pwrite, "pwrite is unportable - " "use gnulib module pwrite for portability"); # endif #endif #if @GNULIB_READ@ /* Read up to COUNT bytes from file descriptor FD into the buffer starting at BUF. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>. */ # if @REPLACE_READ@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read rpl_read # endif _GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read _read # endif _GL_CXXALIAS_MDA (read, ssize_t, (int fd, void *buf, size_t count)); # else _GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count)); # endif _GL_CXXALIASWARN (read); #elif @GNULIB_MDA_READ@ /* On native Windows, map 'read' to '_read', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::read always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read _read # endif # ifdef __MINGW32__ _GL_CXXALIAS_MDA (read, int, (int fd, void *buf, unsigned int count)); # else _GL_CXXALIAS_MDA (read, ssize_t, (int fd, void *buf, unsigned int count)); # endif # else _GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count)); # endif _GL_CXXALIASWARN (read); #endif #if @GNULIB_READLINK@ /* Read the contents of the symbolic link FILE and place the first BUFSIZE bytes of it into BUF. Return the number of bytes placed into BUF if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>. */ # if @REPLACE_READLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlink rpl_readlink # endif _GL_FUNCDECL_RPL (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize)); # else # if !@HAVE_READLINK@ _GL_FUNCDECL_SYS (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize)); # endif _GL_CXXALIASWARN (readlink); #elif defined GNULIB_POSIXCHECK # undef readlink # if HAVE_RAW_DECL_READLINK _GL_WARN_ON_USE (readlink, "readlink is unportable - " "use gnulib module readlink for portability"); # endif #endif #if @GNULIB_READLINKAT@ # if @REPLACE_READLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlinkat rpl_readlinkat # endif _GL_FUNCDECL_RPL (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len)); # else # if !@HAVE_READLINKAT@ _GL_FUNCDECL_SYS (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (readlinkat); # endif #elif defined GNULIB_POSIXCHECK # undef readlinkat # if HAVE_RAW_DECL_READLINKAT _GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " "use gnulib module readlinkat for portability"); # endif #endif #if @GNULIB_RMDIR@ /* Remove the directory DIR. */ # if @REPLACE_RMDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define rmdir rpl_rmdir # endif _GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (rmdir, int, (char const *name)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rmdir # define rmdir _rmdir # endif _GL_CXXALIAS_MDA (rmdir, int, (char const *name)); # else _GL_CXXALIAS_SYS (rmdir, int, (char const *name)); # endif _GL_CXXALIASWARN (rmdir); #elif defined GNULIB_POSIXCHECK # undef rmdir # if HAVE_RAW_DECL_RMDIR _GL_WARN_ON_USE (rmdir, "rmdir is unportable - " "use gnulib module rmdir for portability"); # endif #elif @GNULIB_MDA_RMDIR@ /* On native Windows, map 'rmdir' to '_rmdir', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::rmdir always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rmdir # define rmdir _rmdir # endif _GL_CXXALIAS_MDA (rmdir, int, (char const *name)); # else _GL_CXXALIAS_SYS (rmdir, int, (char const *name)); # endif _GL_CXXALIASWARN (rmdir); #endif #if @GNULIB_SETHOSTNAME@ /* Set the host name of the machine. The host name may or may not be fully qualified. Put LEN bytes of NAME into the host name. Return 0 if successful, otherwise, set errno and return -1. Platforms with no ability to set the hostname return -1 and set errno = ENOSYS. */ # if @REPLACE_SETHOSTNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sethostname # define sethostname rpl_sethostname # endif _GL_FUNCDECL_RPL (sethostname, int, (const char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (sethostname, int, (const char *name, size_t len)); # else # if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@ _GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 and FreeBSD 6.4 the second parameter is int. On Solaris 11 2011-10, the first parameter is not const. */ _GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sethostname); # endif #elif defined GNULIB_POSIXCHECK # undef sethostname # if HAVE_RAW_DECL_SETHOSTNAME _GL_WARN_ON_USE (sethostname, "sethostname is unportable - " "use gnulib module sethostname for portability"); # endif #endif #if @GNULIB_SLEEP@ /* Pause the execution of the current thread for N seconds. Returns the number of seconds left to sleep. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>. */ # if @REPLACE_SLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sleep # define sleep rpl_sleep # endif _GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); _GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); # else # if !@HAVE_SLEEP@ _GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIASWARN (sleep); #elif defined GNULIB_POSIXCHECK # undef sleep # if HAVE_RAW_DECL_SLEEP _GL_WARN_ON_USE (sleep, "sleep is unportable - " "use gnulib module sleep for portability"); # endif #endif #if @GNULIB_MDA_SWAB@ /* On native Windows, map 'swab' to '_swab', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::swab always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef swab # define swab _swab # endif /* Need to cast, because in old mingw the arguments are (const char *from, char *to, size_t n). */ _GL_CXXALIAS_MDA_CAST (swab, void, (char *from, char *to, int n)); # else # if defined __hpux /* HP-UX */ _GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, int n)); # elif defined __sun && (defined __SunOS_5_10 || defined __XOPEN_OR_POSIX) && !defined _XPG4 /* Solaris */ _GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, ssize_t n)); # else _GL_CXXALIAS_SYS (swab, void, (const void *from, void *to, ssize_t n)); # endif # endif _GL_CXXALIASWARN (swab); #endif #if @GNULIB_SYMLINK@ # if @REPLACE_SYMLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlink # define symlink rpl_symlink # endif _GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); # else # if !@HAVE_SYMLINK@ _GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); # endif _GL_CXXALIASWARN (symlink); #elif defined GNULIB_POSIXCHECK # undef symlink # if HAVE_RAW_DECL_SYMLINK _GL_WARN_ON_USE (symlink, "symlink is not portable - " "use gnulib module symlink for portability"); # endif #endif #if @GNULIB_SYMLINKAT@ # if @REPLACE_SYMLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlinkat # define symlinkat rpl_symlinkat # endif _GL_FUNCDECL_RPL (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (symlinkat, int, (char const *contents, int fd, char const *file)); # else # if !@HAVE_SYMLINKAT@ _GL_FUNCDECL_SYS (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (symlinkat, int, (char const *contents, int fd, char const *file)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (symlinkat); # endif #elif defined GNULIB_POSIXCHECK # undef symlinkat # if HAVE_RAW_DECL_SYMLINKAT _GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " "use gnulib module symlinkat for portability"); # endif #endif #if @GNULIB_TRUNCATE@ /* Change the size of the file designated by FILENAME to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html>. */ # if @REPLACE_TRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncate # define truncate rpl_truncate # endif _GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length)); # else # if !@HAVE_DECL_TRUNCATE@ _GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (truncate); # endif #elif defined GNULIB_POSIXCHECK # undef truncate # if HAVE_RAW_DECL_TRUNCATE _GL_WARN_ON_USE (truncate, "truncate is unportable - " "use gnulib module truncate for portability"); # endif #endif #if @GNULIB_TTYNAME_R@ /* Store at most BUFLEN characters of the pathname of the terminal FD is open on in BUF. Return 0 on success, otherwise an error number. */ # if @REPLACE_TTYNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ttyname_r # define ttyname_r rpl_ttyname_r # endif _GL_FUNCDECL_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen)); # else # if !@HAVE_DECL_TTYNAME_R@ _GL_FUNCDECL_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ttyname_r); # endif #elif defined GNULIB_POSIXCHECK # undef ttyname_r # if HAVE_RAW_DECL_TTYNAME_R _GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " "use gnulib module ttyname_r for portability"); # endif #endif #if @GNULIB_UNLINK@ # if @REPLACE_UNLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink rpl_unlink # endif _GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unlink, int, (char const *file)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink _unlink # endif _GL_CXXALIAS_MDA (unlink, int, (char const *file)); # else _GL_CXXALIAS_SYS (unlink, int, (char const *file)); # endif _GL_CXXALIASWARN (unlink); #elif defined GNULIB_POSIXCHECK # undef unlink # if HAVE_RAW_DECL_UNLINK _GL_WARN_ON_USE (unlink, "unlink is not portable - " "use gnulib module unlink for portability"); # endif #elif @GNULIB_MDA_UNLINK@ /* On native Windows, map 'unlink' to '_unlink', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::unlink always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink _unlink # endif _GL_CXXALIAS_MDA (unlink, int, (char const *file)); # else _GL_CXXALIAS_SYS (unlink, int, (char const *file)); # endif _GL_CXXALIASWARN (unlink); #endif #if @GNULIB_UNLINKAT@ # if @REPLACE_UNLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlinkat # define unlinkat rpl_unlinkat # endif _GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); # else # if !@HAVE_UNLINKAT@ _GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); # endif _GL_CXXALIASWARN (unlinkat); #elif defined GNULIB_POSIXCHECK # undef unlinkat # if HAVE_RAW_DECL_UNLINKAT _GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " "use gnulib module unlinkat for portability"); # endif #endif #if @GNULIB_USLEEP@ /* Pause the execution of the current thread for N microseconds. Returns 0 on completion, or -1 on range error. See the POSIX:2001 specification <https://pubs.opengroup.org/onlinepubs/009695399/functions/usleep.html>. */ # if @REPLACE_USLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef usleep # define usleep rpl_usleep # endif _GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); _GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); # else # if !@HAVE_USLEEP@ _GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); # endif /* Need to cast, because on Haiku, the first parameter is unsigned int n. */ _GL_CXXALIAS_SYS_CAST (usleep, int, (useconds_t n)); # endif _GL_CXXALIASWARN (usleep); #elif defined GNULIB_POSIXCHECK # undef usleep # if HAVE_RAW_DECL_USLEEP _GL_WARN_ON_USE (usleep, "usleep is unportable - " "use gnulib module usleep for portability"); # endif #endif #if @GNULIB_WRITE@ /* Write up to COUNT bytes starting at BUF to file descriptor FD. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>. */ # if @REPLACE_WRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write rpl_write # endif _GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write _write # endif _GL_CXXALIAS_MDA (write, ssize_t, (int fd, const void *buf, size_t count)); # else _GL_CXXALIAS_SYS (write, ssize_t, (int fd, const void *buf, size_t count)); # endif _GL_CXXALIASWARN (write); #elif @GNULIB_MDA_WRITE@ /* On native Windows, map 'write' to '_write', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::write always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write _write # endif # ifdef __MINGW32__ _GL_CXXALIAS_MDA (write, int, (int fd, const void *buf, unsigned int count)); # else _GL_CXXALIAS_MDA (write, ssize_t, (int fd, const void *buf, unsigned int count)); # endif # else _GL_CXXALIAS_SYS (write, ssize_t, (int fd, const void *buf, size_t count)); # endif _GL_CXXALIASWARN (write); #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_UNISTD_H */ #endif /* _GL_INCLUDING_UNISTD_H */ #endif /* _@GUARD_PREFIX@_UNISTD_H */ ������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unistd--.h�����������������������������������������������������������0000644�0001750�0001750�00000001744�14557510505�014062� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like unistd.h, but redefine some names to avoid glitches. Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <unistd.h> #include "unistd-safer.h" #undef dup #define dup dup_safer #undef pipe #define pipe pipe_safer #if GNULIB_PIPE2_SAFER # undef pipe2 # define pipe2 pipe2_safer #endif ����������������������������gnuastro-0.22/bootstrapped/lib/unistd-safer.h�������������������������������������������������������0000644�0001750�0001750�00000002035�14557510505�015020� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke unistd-like functions, but avoid some glitches. Copyright (C) 2001, 2003, 2005, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Eric Blake. */ int dup_safer (int); int fd_safer (int); int pipe_safer (int[2]); #if GNULIB_FD_SAFER_FLAG int dup_safer_flag (int, int); int fd_safer_flag (int, int); #endif #if GNULIB_PIPE2_SAFER int pipe2_safer (int[2], int); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/unitypes.in.h��������������������������������������������������������0000644�0001750�0001750�00000004222�14557510505�014701� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Elementary types and macros for the GNU UniString library. Copyright (C) 2002, 2005-2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _UNITYPES_H #define _UNITYPES_H /* Get uint8_t, uint16_t, uint32_t. */ #include <stdint.h> /* Type representing a Unicode character. */ typedef uint32_t ucs4_t; /* Attribute of a function whose result depends only on the arguments (not pointers!) and which has no side effects. */ #ifndef _UC_ATTRIBUTE_CONST # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) || defined __clang__ # define _UC_ATTRIBUTE_CONST __attribute__ ((__const__)) # else # define _UC_ATTRIBUTE_CONST # endif #endif /* Attribute of a function whose result depends only on the arguments (possibly pointers) and global memory, and which has no side effects. */ #ifndef _UC_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _UC_ATTRIBUTE_PURE # endif #endif /* Qualifier in a function declaration, that asserts that the caller must pass a pointer to a different object in the specified pointer argument than in the other pointer arguments. */ #ifndef _UC_RESTRICT # if defined __restrict \ || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3 # define _UC_RESTRICT __restrict # elif 199901L <= __STDC_VERSION__ || defined restrict # define _UC_RESTRICT restrict # else # define _UC_RESTRICT # endif #endif #endif /* _UNITYPES_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/uniwidth.in.h��������������������������������������������������������0000644�0001750�0001750�00000004133�14557510505�014655� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Display width functions. Copyright (C) 2001-2002, 2005, 2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _UNIWIDTH_H #define _UNIWIDTH_H #include "unitypes.h" /* Get size_t. */ #include <stddef.h> /* Get locale_charset() declaration. */ #include "localcharset.h" #ifdef __cplusplus extern "C" { #endif /* Display width. */ /* These functions are locale dependent. The encoding argument identifies the encoding (e.g. "ISO-8859-2" for Polish). */ /* Determine number of column positions required for UC. */ extern int uc_width (ucs4_t uc, const char *encoding) _UC_ATTRIBUTE_PURE; /* Determine number of column positions required for first N units (or fewer if S ends before this) in S. */ extern int u8_width (const uint8_t *s, size_t n, const char *encoding) _UC_ATTRIBUTE_PURE; extern int u16_width (const uint16_t *s, size_t n, const char *encoding) _UC_ATTRIBUTE_PURE; extern int u32_width (const uint32_t *s, size_t n, const char *encoding) _UC_ATTRIBUTE_PURE; /* Determine number of column positions required for S. */ extern int u8_strwidth (const uint8_t *s, const char *encoding) _UC_ATTRIBUTE_PURE; extern int u16_strwidth (const uint16_t *s, const char *encoding) _UC_ATTRIBUTE_PURE; extern int u32_strwidth (const uint32_t *s, const char *encoding) _UC_ATTRIBUTE_PURE; #ifdef __cplusplus } #endif #endif /* _UNIWIDTH_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/printf-args.h��������������������������������������������������������0000644�0001750�0001750�00000013605�14557510505�014655� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _PRINTF_ARGS_H #define _PRINTF_ARGS_H /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be declared. STATIC Set to 'static' to declare the function static. */ /* Default parameters. */ #ifndef PRINTF_FETCHARGS # define PRINTF_FETCHARGS printf_fetchargs #endif /* Get size_t. */ #include <stddef.h> /* Get wchar_t. */ #if HAVE_WCHAR_T # include <stddef.h> #endif /* Get wint_t. */ #if HAVE_WINT_T # include <wchar.h> #endif /* Get intN_t, uintN_t, intN_fast_t, uintN_fast_t. */ #include <stdint.h> /* Get va_list. */ #include <stdarg.h> /* Argument types */ typedef enum { TYPE_NONE, TYPE_SCHAR, TYPE_UCHAR, TYPE_SHORT, TYPE_USHORT, TYPE_INT, TYPE_UINT, TYPE_LONGINT, TYPE_ULONGINT, TYPE_LONGLONGINT, TYPE_ULONGLONGINT, /* According to ISO C 23 § 7.23.6.1, "all exact-width integer types", "all minimum-width integer types", and "all fastest minimum-width integer types" defined in <stdint.h> should be supported. But for portability between platforms, we support only those with N = 8, 16, 32, 64. */ TYPE_INT8_T, TYPE_UINT8_T, TYPE_INT16_T, TYPE_UINT16_T, TYPE_INT32_T, TYPE_UINT32_T, TYPE_INT64_T, TYPE_UINT64_T, TYPE_INT_FAST8_T, TYPE_UINT_FAST8_T, TYPE_INT_FAST16_T, TYPE_UINT_FAST16_T, TYPE_INT_FAST32_T, TYPE_UINT_FAST32_T, TYPE_INT_FAST64_T, TYPE_UINT_FAST64_T, TYPE_DOUBLE, TYPE_LONGDOUBLE, TYPE_CHAR, #if HAVE_WINT_T TYPE_WIDE_CHAR, #endif TYPE_STRING, #if HAVE_WCHAR_T TYPE_WIDE_STRING, #endif TYPE_POINTER, TYPE_COUNT_SCHAR_POINTER, TYPE_COUNT_SHORT_POINTER, TYPE_COUNT_INT_POINTER, TYPE_COUNT_LONGINT_POINTER, TYPE_COUNT_LONGLONGINT_POINTER, TYPE_COUNT_INT8_T_POINTER, TYPE_COUNT_INT16_T_POINTER, TYPE_COUNT_INT32_T_POINTER, TYPE_COUNT_INT64_T_POINTER, TYPE_COUNT_INT_FAST8_T_POINTER, TYPE_COUNT_INT_FAST16_T_POINTER, TYPE_COUNT_INT_FAST32_T_POINTER, TYPE_COUNT_INT_FAST64_T_POINTER #if ENABLE_UNISTDIO /* The unistdio extensions. */ , TYPE_U8_STRING , TYPE_U16_STRING , TYPE_U32_STRING #endif } arg_type; /* Polymorphic argument */ typedef struct { arg_type type; union { signed char a_schar; unsigned char a_uchar; short a_short; unsigned short a_ushort; int a_int; unsigned int a_uint; long int a_longint; unsigned long int a_ulongint; long long int a_longlongint; unsigned long long int a_ulonglongint; int8_t a_int8_t; uint8_t a_uint8_t; int16_t a_int16_t; uint16_t a_uint16_t; int32_t a_int32_t; uint32_t a_uint32_t; int64_t a_int64_t; uint64_t a_uint64_t; int_fast8_t a_int_fast8_t; uint_fast8_t a_uint_fast8_t; int_fast16_t a_int_fast16_t; uint_fast16_t a_uint_fast16_t; int_fast32_t a_int_fast32_t; uint_fast32_t a_uint_fast32_t; int_fast64_t a_int_fast64_t; uint_fast64_t a_uint_fast64_t; float a_float; /* unused */ double a_double; long double a_longdouble; int a_char; #if HAVE_WINT_T wint_t a_wide_char; #endif const char* a_string; #if HAVE_WCHAR_T const wchar_t* a_wide_string; #endif void* a_pointer; signed char * a_count_schar_pointer; short * a_count_short_pointer; int * a_count_int_pointer; long int * a_count_longint_pointer; long long int * a_count_longlongint_pointer; int8_t * a_count_int8_t_pointer; int16_t * a_count_int16_t_pointer; int32_t * a_count_int32_t_pointer; int64_t * a_count_int64_t_pointer; int_fast8_t * a_count_int_fast8_t_pointer; int_fast16_t * a_count_int_fast16_t_pointer; int_fast32_t * a_count_int_fast32_t_pointer; int_fast64_t * a_count_int_fast64_t_pointer; #if ENABLE_UNISTDIO /* The unistdio extensions. */ const uint8_t * a_u8_string; const uint16_t * a_u16_string; const uint32_t * a_u32_string; #endif } a; } argument; /* Number of directly allocated arguments (no malloc() needed). */ #define N_DIRECT_ALLOC_ARGUMENTS 7 typedef struct { size_t count; argument *arg; argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; } arguments; /* Fetch the arguments, putting them into a. */ #ifdef STATIC STATIC #else extern #endif int PRINTF_FETCHARGS (va_list args, arguments *a); #endif /* _PRINTF_ARGS_H */ ���������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/printf-parse.h�������������������������������������������������������0000644�0001750�0001750�00000012245�14557510505�015032� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse printf format string. Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _PRINTF_PARSE_H #define _PRINTF_PARSE_H /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. STATIC Set to 'static' to declare the function static. */ #if HAVE_FEATURES_H # include <features.h> /* for __GLIBC__, __UCLIBC__ */ #endif #include "printf-args.h" /* Flags */ #define FLAG_GROUP 1 /* ' flag */ #define FLAG_LEFT 2 /* - flag */ #define FLAG_SHOWSIGN 4 /* + flag */ #define FLAG_SPACE 8 /* space flag */ #define FLAG_ALT 16 /* # flag */ #define FLAG_ZERO 32 #if __GLIBC__ >= 2 && !defined __UCLIBC__ # define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ #endif /* arg_index value indicating that no argument is consumed. */ #define ARG_NONE (~(size_t)0) /* xxx_directive: A parsed directive. xxx_directives: A parsed format string. */ /* Number of directly allocated directives (no malloc() needed). */ #define N_DIRECT_ALLOC_DIRECTIVES 7 /* A parsed directive. */ typedef struct { const char* dir_start; const char* dir_end; int flags; const char* width_start; const char* width_end; size_t width_arg_index; const char* precision_start; const char* precision_end; size_t precision_arg_index; char conversion; /* d i b B o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } char_directive; /* A parsed format string. */ typedef struct { size_t count; char_directive *dir; size_t max_width_length; size_t max_precision_length; char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } char_directives; #if ENABLE_UNISTDIO /* A parsed directive. */ typedef struct { const uint8_t* dir_start; const uint8_t* dir_end; int flags; const uint8_t* width_start; const uint8_t* width_end; size_t width_arg_index; const uint8_t* precision_start; const uint8_t* precision_end; size_t precision_arg_index; uint8_t conversion; /* d i b B o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u8_directive; /* A parsed format string. */ typedef struct { size_t count; u8_directive *dir; size_t max_width_length; size_t max_precision_length; u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u8_directives; /* A parsed directive. */ typedef struct { const uint16_t* dir_start; const uint16_t* dir_end; int flags; const uint16_t* width_start; const uint16_t* width_end; size_t width_arg_index; const uint16_t* precision_start; const uint16_t* precision_end; size_t precision_arg_index; uint16_t conversion; /* d i b B o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u16_directive; /* A parsed format string. */ typedef struct { size_t count; u16_directive *dir; size_t max_width_length; size_t max_precision_length; u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u16_directives; /* A parsed directive. */ typedef struct { const uint32_t* dir_start; const uint32_t* dir_end; int flags; const uint32_t* width_start; const uint32_t* width_end; size_t width_arg_index; const uint32_t* precision_start; const uint32_t* precision_end; size_t precision_arg_index; uint32_t conversion; /* d i b B o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u32_directive; /* A parsed format string. */ typedef struct { size_t count; u32_directive *dir; size_t max_width_length; size_t max_precision_length; u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u32_directives; #endif /* Parses the format string. Fills in the number N of directives, and fills in directives[0], ..., directives[N-1], and sets directives[N].dir_start to the end of the format string. Also fills in the arg_type fields of the arguments and the needed count of arguments. */ #if ENABLE_UNISTDIO extern int ulc_printf_parse (const char *format, char_directives *d, arguments *a); extern int u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); extern int u16_printf_parse (const uint16_t *format, u16_directives *d, arguments *a); extern int u32_printf_parse (const uint32_t *format, u32_directives *d, arguments *a); #else # ifdef STATIC STATIC # else extern # endif int printf_parse (const char *format, char_directives *d, arguments *a); #endif #endif /* _PRINTF_PARSE_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/vasnprintf.h���������������������������������������������������������0000644�0001750�0001750�00000005221�14557510505�014606� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vsprintf with automatic memory allocation. Copyright (C) 2002-2004, 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _VASNPRINTF_H #define _VASNPRINTF_H /* This file uses _GL_ATTRIBUTE_FORMAT. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Get va_list. */ #include <stdarg.h> /* Get size_t. */ #include <stddef.h> /* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ #include <stdio.h> #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(). You can pass a preallocated buffer for the result in RESULTBUF and its size in *LENGTHP; otherwise you pass RESULTBUF = NULL. If successful, return the address of the string (this may be = RESULTBUF if no dynamic memory allocation was necessary) and set *LENGTHP to the number of resulting bytes, excluding the trailing NUL. Upon error, set errno and return NULL. When dynamic memory allocation occurs, the preallocated buffer is left alone (with possibly modified contents). This makes it possible to use a statically allocated or stack-allocated buffer, like this: char buf[100]; size_t len = sizeof (buf); char *output = vasnprintf (buf, &len, format, args); if (output == NULL) ... error handling ...; else { ... use the output string ...; if (output != buf) free (output); } */ #if REPLACE_VASNPRINTF # define asnprintf rpl_asnprintf # define vasnprintf rpl_vasnprintf #endif extern char * asnprintf (char *restrict resultbuf, size_t *lengthp, const char *format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)); extern char * vasnprintf (char *restrict resultbuf, size_t *lengthp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); #ifdef __cplusplus } #endif #endif /* _VASNPRINTF_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/wchar.in.h�����������������������������������������������������������0000644�0001750�0001750�00000162430�14557510505�014133� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C99 <wchar.h>, for platforms that have issues. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ /* * ISO C 99 <wchar.h> for platforms that have issues. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wchar.h.html> * * For now, this just ensures proper prerequisite inclusion order and * the declaration of wcwidth(). */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (((defined __need_mbstate_t || defined __need_wint_t) \ && !defined __MINGW32__) \ || (defined __hpux \ && ((defined _INTTYPES_INCLUDED \ && !defined _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H) \ || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \ || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \ || defined _GL_ALREADY_INCLUDING_WCHAR_H) /* Special invocation convention: - Inside glibc and uClibc header files, but not MinGW. - On HP-UX 11.00 we have a sequence of nested includes <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>, once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h> and once directly. In both situations 'wint_t' is not yet defined, therefore we cannot provide the function overrides; instead include only the system's <wchar.h>. - With MinGW 3.22, when <string.h> includes <wchar.h>, only some part of <wchar.h> is actually processed, and that doesn't include 'mbstate_t'. - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and the latter includes <wchar.h>. But here, we have no way to detect whether <wctype.h> is completely included or is still being included. */ #@INCLUDE_NEXT@ @NEXT_WCHAR_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_WCHAR_H #define _GL_ALREADY_INCLUDING_WCHAR_H #if @HAVE_FEATURES_H@ # include <features.h> /* for __GLIBC__ */ #endif /* In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined by <stddef.h>. But avoid namespace pollution on glibc systems. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <stddef.h> #endif /* Include the original <wchar.h> if it exists. Some builds of uClibc lack it. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_WCHAR_H@ # @INCLUDE_NEXT@ @NEXT_WCHAR_H@ #endif #undef _GL_ALREADY_INCLUDING_WCHAR_H #ifndef _@GUARD_PREFIX@_WCHAR_H #define _@GUARD_PREFIX@_WCHAR_H /* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # if defined __cplusplus && defined __GNUC__ && !defined __clang__ /* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */ # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1) # else # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC (free, 1) # endif #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ #ifndef _GL_ATTRIBUTE_NOTHROW # if defined __cplusplus # if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4 # if __cplusplus >= 201103L # define _GL_ATTRIBUTE_NOTHROW noexcept (true) # else # define _GL_ATTRIBUTE_NOTHROW throw () # endif # else # define _GL_ATTRIBUTE_NOTHROW # endif # else # if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ # define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) # else # define _GL_ATTRIBUTE_NOTHROW # endif # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Define wint_t and WEOF. (Also done in wctype.in.h.) */ #if !@HAVE_WINT_T@ && !defined wint_t # define wint_t int # ifndef WEOF # define WEOF -1 # endif #else /* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be "unchanged by default argument promotions". Override it. */ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ # if !GNULIB_defined_wint_t # if @HAVE_CRTDEFS_H@ # include <crtdefs.h> # else # include <stddef.h> # endif typedef unsigned int rpl_wint_t; # undef wint_t # define wint_t rpl_wint_t # define GNULIB_defined_wint_t 1 # endif # endif # ifndef WEOF # define WEOF ((wint_t) -1) # endif #endif /* Override mbstate_t if it is too small. On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for implementing mbrtowc for encodings like UTF-8. On AIX and MSVC, mbrtowc needs to be overridden, but mbstate_t exists and is large enough and overriding it would cause problems in C++ mode. */ #if !(((defined _WIN32 && !defined __CYGWIN__) || @HAVE_MBSINIT@) && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ # if !GNULIB_defined_mbstate_t # if !(defined _AIX || defined _MSC_VER) typedef int rpl_mbstate_t; # undef mbstate_t # define mbstate_t rpl_mbstate_t # endif # define GNULIB_defined_mbstate_t 1 # endif #endif /* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have been included yet. */ #if @GNULIB_FREE_POSIX@ # if (@REPLACE_FREE@ && !defined free \ && !(defined __cplusplus && defined GNULIB_NAMESPACE)) /* We can't do '#define free rpl_free' here. */ # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void rpl_free (void *) _GL_ATTRIBUTE_NOTHROW; # else _GL_EXTERN_C void rpl_free (void *); # endif # undef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1) # else # if defined _MSC_VER && !defined free _GL_EXTERN_C # if defined _DLL __declspec (dllimport) # endif void __cdecl free (void *); # else # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW; # else _GL_EXTERN_C void free (void *); # endif # endif # endif #else # if defined _MSC_VER && !defined free _GL_EXTERN_C # if defined _DLL __declspec (dllimport) # endif void __cdecl free (void *); # else # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW; # else _GL_EXTERN_C void free (void *); # endif # endif #endif #if @GNULIB_MBSZERO@ /* Get memset(). */ # include <string.h> #endif /* Convert a single-byte character to a wide character. */ #if @GNULIB_BTOWC@ # if @REPLACE_BTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef btowc # define btowc rpl_btowc # endif _GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (btowc, wint_t, (int c)); # else # if !@HAVE_BTOWC@ _GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); # endif /* Need to cast, because on mingw, the return type is 'unsigned short'. */ _GL_CXXALIAS_SYS_CAST (btowc, wint_t, (int c)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (btowc); # endif #elif defined GNULIB_POSIXCHECK # undef btowc # if HAVE_RAW_DECL_BTOWC _GL_WARN_ON_USE (btowc, "btowc is unportable - " "use gnulib module btowc for portability"); # endif #endif /* Convert a wide character to a single-byte character. */ #if @GNULIB_WCTOB@ # if @REPLACE_WCTOB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctob # define wctob rpl_wctob # endif _GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); # else # if !defined wctob && !@HAVE_DECL_WCTOB@ /* wctob is provided by gnulib, or wctob exists but is not declared. */ _GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctob); # endif #elif defined GNULIB_POSIXCHECK # undef wctob # if HAVE_RAW_DECL_WCTOB _GL_WARN_ON_USE (wctob, "wctob is unportable - " "use gnulib module wctob for portability"); # endif #endif /* Test whether *PS is in an initial state. */ #if @GNULIB_MBSINIT@ # if @REPLACE_MBSINIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsinit # define mbsinit rpl_mbsinit # endif _GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps)); _GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); # else # if !@HAVE_MBSINIT@ _GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbsinit); # endif #elif defined GNULIB_POSIXCHECK # undef mbsinit # if HAVE_RAW_DECL_MBSINIT _GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " "use gnulib module mbsinit for portability"); # endif #endif /* Put *PS into an initial state. */ #if @GNULIB_MBSZERO@ /* ISO C 23 § 7.31.6.(3) says that zeroing an mbstate_t is a way to put the mbstate_t into an initial state. However, on many platforms an mbstate_t is large, and it is possible - as an optimization - to get away with zeroing only part of it. So, instead of mbstate_t state = { 0 }; or mbstate_t state; memset (&state, 0, sizeof (mbstate_t)); we can write this faster code: mbstate_t state; mbszero (&state); */ /* _GL_MBSTATE_INIT_SIZE describes how mbsinit() behaves: It is the number of bytes at the beginning of an mbstate_t that need to be zero, for mbsinit() to return true. _GL_MBSTATE_ZERO_SIZE is the number of bytes at the beginning of an mbstate_t that need to be zero, - for mbsinit() to return true, and - for all other multibyte-aware functions to operate properly. 0 < _GL_MBSTATE_INIT_SIZE <= _GL_MBSTATE_ZERO_SIZE <= sizeof (mbstate_t). These values are determined by source code inspection, where possible, and by running the gnulib unit tests. We need _GL_MBSTATE_INIT_SIZE because if we define _GL_MBSTATE_ZERO_SIZE without considering what mbsinit() does, we get test failures such as assertion "mbsinit (&iter->state)" failed */ # if GNULIB_defined_mbstate_t /* AIX, IRIX */ /* mbstate_t has at least 4 bytes. They are used as coded in gnulib/lib/mbrtowc.c. */ # define _GL_MBSTATE_INIT_SIZE 1 /* define _GL_MBSTATE_ZERO_SIZE 4 does not work: it causes test failures. So, use the safe fallback value, below. */ # elif __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 /* glibc */ /* mbstate_t is defined in <bits/types/__mbstate_t.h>. For more details, see glibc/iconv/skeleton.c. */ # define _GL_MBSTATE_INIT_SIZE 4 /* sizeof (((mbstate_t) {0}).__count) */ # define _GL_MBSTATE_ZERO_SIZE /* 8 */ sizeof (mbstate_t) # elif defined MUSL_LIBC /* musl libc */ /* mbstate_t is defined in <bits/alltypes.h>. It is an opaque aligned 8-byte struct, of which at most the first 4 bytes are used. For more details, see src/multibyte/mbrtowc.c. */ # define _GL_MBSTATE_INIT_SIZE 4 /* sizeof (unsigned) */ # define _GL_MBSTATE_ZERO_SIZE 4 # elif defined __APPLE__ && defined __MACH__ /* macOS */ /* On macOS, mbstate_t is defined in <machine/_types.h>. It is an opaque aligned 128-byte struct, of which at most the first 12 bytes are used. For more details, see the __mbsinit implementations in Libc-<version>/locale/FreeBSD/ {ascii,none,euc,mskanji,big5,gb2312,gbk,gb18030,utf8,utf2}.c. */ /* File INIT_SIZE ZERO_SIZE ascii.c 0 0 none.c 0 0 euc.c 12 12 mskanji.c 4 4 big5.c 4 4 gb2312.c 4 6 gbk.c 4 4 gb18030.c 4 8 utf8.c 8 10 utf2.c 8 12 */ # define _GL_MBSTATE_INIT_SIZE 12 # define _GL_MBSTATE_ZERO_SIZE 12 # elif defined __FreeBSD__ /* FreeBSD */ /* On FreeBSD, mbstate_t is defined in src/sys/sys/_types.h. It is an opaque aligned 128-byte struct, of which at most the first 12 bytes are used. For more details, see the __mbsinit implementations in src/lib/libc/locale/ {ascii,none,euc,mskanji,big5,gb2312,gbk,gb18030,utf8}.c. */ /* File INIT_SIZE ZERO_SIZE ascii.c 0 0 none.c 0 0 euc.c 12 12 mskanji.c 4 4 big5.c 4 4 gb2312.c 4 6 gbk.c 4 4 gb18030.c 4 8 utf8.c 8 12 */ # define _GL_MBSTATE_INIT_SIZE 12 # define _GL_MBSTATE_ZERO_SIZE 12 # elif defined __NetBSD__ /* NetBSD */ /* On NetBSD, mbstate_t is defined in src/sys/sys/ansi.h. It is an opaque aligned 128-byte struct, of which at most the first 28 bytes are used. For more details, see the *State types in src/lib/libc/citrus/modules/citrus_*.c (ignoring citrus_{hz,iso2022,utf7,viqr,zw}.c, since these implement stateful encodings, not usable as locale encodings). */ /* File ZERO_SIZE citrus/citrus_none.c 0 citrus/modules/citrus_euc.c 8 citrus/modules/citrus_euctw.c 8 citrus/modules/citrus_mskanji.c 8 citrus/modules/citrus_big5.c 8 citrus/modules/citrus_gbk2k.c 8 citrus/modules/citrus_dechanyu.c 8 citrus/modules/citrus_johab.c 6 citrus/modules/citrus_utf8.c 12 */ /* But 12 is not the correct value for _GL_MBSTATE_ZERO_SIZE: we get test failures for values < 28. */ # define _GL_MBSTATE_ZERO_SIZE 28 # elif defined __OpenBSD__ /* OpenBSD */ /* On OpenBSD, mbstate_t is defined in src/sys/sys/_types.h. It is an opaque aligned 128-byte struct, of which at most the first 12 bytes are used. For more details, see src/lib/libc/citrus/citrus_*.c. */ /* File INIT_SIZE ZERO_SIZE citrus_none.c 0 0 citrus_utf8.c 12 12 */ # define _GL_MBSTATE_INIT_SIZE 12 # define _GL_MBSTATE_ZERO_SIZE 12 # elif defined __minix /* Minix */ /* On Minix, mbstate_t is defined in sys/sys/ansi.h. It is an opaque aligned 128-byte struct. For more details, see the *State types in lib/libc/citrus/citrus_*.c. */ /* File INIT_SIZE ZERO_SIZE citrus_none.c 0 0 */ /* But 1 is not the correct value for _GL_MBSTATE_ZERO_SIZE: we get test failures for values < 4. */ # define _GL_MBSTATE_ZERO_SIZE 4 # elif defined __sun /* Solaris */ /* On Solaris, mbstate_t is defined in <wchar_impl.h>. It is an opaque aligned 24-byte or 32-byte struct, of which at most the first 20 or 28 bytes are used. For more details on OpenSolaris derivatives, see the *State types in illumos-gate/usr/src/lib/libc/port/locale/ {none,euc,mskanji,big5,gb2312,gbk,gb18030,utf8}.c. */ /* File INIT_SIZE ZERO_SIZE none.c 0 0 euc.c 12 12 mskanji.c 4 4 big5.c 4 4 gb2312.c 4 6 gbk.c 4 4 gb18030.c 4 8 utf8.c 12 12 */ /* But 12 is not the correct value for _GL_MBSTATE_ZERO_SIZE: we get test failures - in OpenIndiana and OmniOS: for values < 16, - in Solaris 10 and 11: for values < 20 (in 32-bit mode) or < 28 (in 64-bit mode). Since we don't have a good way to distinguish the OpenSolaris derivatives from the proprietary Solaris versions, and can't inspect the Solaris source code, use the safe fallback values, below. */ # elif defined __CYGWIN__ /* Cygwin */ /* On Cygwin, mbstate_t is defined in <sys/_types.h>. For more details, see newlib/libc/stdlib/mbtowc_r.c and winsup/cygwin/strfuncs.cc. */ # define _GL_MBSTATE_INIT_SIZE 4 /* sizeof (int) */ # define _GL_MBSTATE_ZERO_SIZE 8 # elif defined _WIN32 && !defined __CYGWIN__ /* Native Windows. */ /* MSVC defines 'mbstate_t' as an aligned 8-byte struct. On mingw, 'mbstate_t' is sometimes defined as 'int', sometimes defined as an aligned 8-byte struct, of which the first 4 bytes matter. Use the safe values, below. */ # elif defined __ANDROID__ /* Android */ /* Android defines 'mbstate_t' in <bits/mbstate_t.h>. It is an opaque 4-byte or 8-byte struct. For more details, see bionic/libc/private/bionic_mbstate.h bionic/libc/bionic/mbrtoc32.cpp bionic/libc/bionic/mbrtoc16.cpp */ # define _GL_MBSTATE_INIT_SIZE 4 # define _GL_MBSTATE_ZERO_SIZE 4 # endif /* Use safe values as defaults. */ # ifndef _GL_MBSTATE_INIT_SIZE # define _GL_MBSTATE_INIT_SIZE sizeof (mbstate_t) # endif # ifndef _GL_MBSTATE_ZERO_SIZE # define _GL_MBSTATE_ZERO_SIZE sizeof (mbstate_t) # endif _GL_BEGIN_C_LINKAGE # if defined IN_MBSZERO _GL_EXTERN_INLINE # else _GL_INLINE # endif _GL_ARG_NONNULL ((1)) void mbszero (mbstate_t *ps) { memset (ps, 0, _GL_MBSTATE_ZERO_SIZE); } _GL_END_C_LINKAGE _GL_CXXALIAS_SYS (mbszero, void, (mbstate_t *ps)); _GL_CXXALIASWARN (mbszero); #endif /* Convert a multibyte character to a wide character. */ #if @GNULIB_MBRTOWC@ # if @REPLACE_MBRTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrtowc # define mbrtowc rpl_mbrtowc # endif _GL_FUNCDECL_RPL (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); _GL_CXXALIAS_RPL (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); # else # if !@HAVE_MBRTOWC@ _GL_FUNCDECL_SYS (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif _GL_CXXALIAS_SYS (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbrtowc); # endif #elif defined GNULIB_POSIXCHECK # undef mbrtowc # if HAVE_RAW_DECL_MBRTOWC _GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " "use gnulib module mbrtowc for portability"); # endif #endif /* Recognize a multibyte character. */ #if @GNULIB_MBRLEN@ # if @REPLACE_MBRLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrlen # define mbrlen rpl_mbrlen # endif _GL_FUNCDECL_RPL (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); _GL_CXXALIAS_RPL (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); # else # if !@HAVE_MBRLEN@ _GL_FUNCDECL_SYS (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif _GL_CXXALIAS_SYS (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbrlen); # endif #elif defined GNULIB_POSIXCHECK # undef mbrlen # if HAVE_RAW_DECL_MBRLEN _GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " "use gnulib module mbrlen for portability"); # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSRTOWCS@ # if @REPLACE_MBSRTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsrtowcs # define mbsrtowcs rpl_mbsrtowcs # endif _GL_FUNCDECL_RPL (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_MBSRTOWCS@ _GL_FUNCDECL_SYS (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbsrtowcs); # endif #elif defined GNULIB_POSIXCHECK # undef mbsrtowcs # if HAVE_RAW_DECL_MBSRTOWCS _GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " "use gnulib module mbsrtowcs for portability"); # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSNRTOWCS@ # if @REPLACE_MBSNRTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsnrtowcs # define mbsnrtowcs rpl_mbsnrtowcs # endif _GL_FUNCDECL_RPL (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_MBSNRTOWCS@ _GL_FUNCDECL_SYS (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbsnrtowcs); # endif #elif defined GNULIB_POSIXCHECK # undef mbsnrtowcs # if HAVE_RAW_DECL_MBSNRTOWCS _GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " "use gnulib module mbsnrtowcs for portability"); # endif #endif /* Convert a wide character to a multibyte character. */ #if @GNULIB_WCRTOMB@ # if @REPLACE_WCRTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcrtomb # define wcrtomb rpl_wcrtomb # endif _GL_FUNCDECL_RPL (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); _GL_CXXALIAS_RPL (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # else # if !@HAVE_WCRTOMB@ _GL_FUNCDECL_SYS (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # endif _GL_CXXALIAS_SYS (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcrtomb); # endif #elif defined GNULIB_POSIXCHECK # undef wcrtomb # if HAVE_RAW_DECL_WCRTOMB _GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " "use gnulib module wcrtomb for portability"); # endif #endif /* Convert a wide string to a string. */ #if @GNULIB_WCSRTOMBS@ # if @REPLACE_WCSRTOMBS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsrtombs # define wcsrtombs rpl_wcsrtombs # endif _GL_FUNCDECL_RPL (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_WCSRTOMBS@ _GL_FUNCDECL_SYS (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsrtombs); # endif #elif defined GNULIB_POSIXCHECK # undef wcsrtombs # if HAVE_RAW_DECL_WCSRTOMBS _GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " "use gnulib module wcsrtombs for portability"); # endif #endif /* Convert a wide string to a string. */ #if @GNULIB_WCSNRTOMBS@ # if @REPLACE_WCSNRTOMBS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsnrtombs # define wcsnrtombs rpl_wcsnrtombs # endif _GL_FUNCDECL_RPL (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_WCSNRTOMBS@ || (defined __cplusplus && defined __sun) _GL_FUNCDECL_SYS (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsnrtombs); # endif #elif defined GNULIB_POSIXCHECK # undef wcsnrtombs # if HAVE_RAW_DECL_WCSNRTOMBS _GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " "use gnulib module wcsnrtombs for portability"); # endif #endif /* Return the number of screen columns needed for WC. */ #if @GNULIB_WCWIDTH@ # if @REPLACE_WCWIDTH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcwidth # define wcwidth rpl_wcwidth # endif _GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); # else # if !@HAVE_DECL_WCWIDTH@ /* wcwidth exists but is not declared. */ _GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcwidth); # endif #elif defined GNULIB_POSIXCHECK # undef wcwidth # if HAVE_RAW_DECL_WCWIDTH _GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " "use gnulib module wcwidth for portability"); # endif #endif /* Search N wide characters of S for C. */ #if @GNULIB_WMEMCHR@ # if !@HAVE_WMEMCHR@ _GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (wmemchr, wchar_t *, (const wchar_t *, wchar_t, size_t), const wchar_t *, (const wchar_t *, wchar_t, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); _GL_CXXALIASWARN1 (wmemchr, const wchar_t *, (const wchar_t *s, wchar_t c, size_t n)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef wmemchr # if HAVE_RAW_DECL_WMEMCHR _GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " "use gnulib module wmemchr for portability"); # endif #endif /* Compare N wide characters of S1 and S2. */ #if @GNULIB_WMEMCMP@ # if @REPLACE_WMEMCMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wmemcmp # define wmemcmp rpl_wmemcmp # endif _GL_FUNCDECL_RPL (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); # else # if !@HAVE_WMEMCMP@ _GL_FUNCDECL_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemcmp); # endif #elif defined GNULIB_POSIXCHECK # undef wmemcmp # if HAVE_RAW_DECL_WMEMCMP _GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " "use gnulib module wmemcmp for portability"); # endif #endif /* Copy N wide characters of SRC to DEST. */ #if @GNULIB_WMEMCPY@ # if !@HAVE_WMEMCPY@ _GL_FUNCDECL_SYS (wmemcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemcpy); # endif #elif defined GNULIB_POSIXCHECK # undef wmemcpy # if HAVE_RAW_DECL_WMEMCPY _GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " "use gnulib module wmemcpy for portability"); # endif #endif /* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for overlapping memory areas. */ #if @GNULIB_WMEMMOVE@ # if !@HAVE_WMEMMOVE@ _GL_FUNCDECL_SYS (wmemmove, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemmove, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemmove); # endif #elif defined GNULIB_POSIXCHECK # undef wmemmove # if HAVE_RAW_DECL_WMEMMOVE _GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " "use gnulib module wmemmove for portability"); # endif #endif /* Copy N wide characters of SRC to DEST. Return pointer to wide characters after the last written wide character. */ #if @GNULIB_WMEMPCPY@ # if @REPLACE_WMEMPCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wmempcpy # define wmempcpy rpl_wmempcpy # endif _GL_FUNCDECL_RPL (wmempcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); _GL_CXXALIAS_RPL (wmempcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # else # if !@HAVE_WMEMPCPY@ _GL_FUNCDECL_SYS (wmempcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wmempcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmempcpy); # endif #elif defined GNULIB_POSIXCHECK # undef wmempcpy # if HAVE_RAW_DECL_WMEMPCPY _GL_WARN_ON_USE (wmempcpy, "wmempcpy is unportable - " "use gnulib module wmempcpy for portability"); # endif #endif /* Set N wide characters of S to C. */ #if @GNULIB_WMEMSET@ # if !@HAVE_WMEMSET@ _GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); # endif _GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemset); # endif #elif defined GNULIB_POSIXCHECK # undef wmemset # if HAVE_RAW_DECL_WMEMSET _GL_WARN_ON_USE (wmemset, "wmemset is unportable - " "use gnulib module wmemset for portability"); # endif #endif /* Return the number of wide characters in S. */ #if @GNULIB_WCSLEN@ # if !@HAVE_WCSLEN@ _GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcslen); # endif #elif defined GNULIB_POSIXCHECK # undef wcslen # if HAVE_RAW_DECL_WCSLEN _GL_WARN_ON_USE (wcslen, "wcslen is unportable - " "use gnulib module wcslen for portability"); # endif #endif /* Return the number of wide characters in S, but at most MAXLEN. */ #if @GNULIB_WCSNLEN@ /* On Solaris 11.3, the header files declare the function in the std:: namespace, not in the global namespace. So, force a declaration in the global namespace. */ # if !@HAVE_WCSNLEN@ || (defined __sun && defined __cplusplus) _GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); _GL_CXXALIASWARN (wcsnlen); #elif defined GNULIB_POSIXCHECK # undef wcsnlen # if HAVE_RAW_DECL_WCSNLEN _GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " "use gnulib module wcsnlen for portability"); # endif #endif /* Copy SRC to DEST. */ #if @GNULIB_WCSCPY@ # if !@HAVE_WCSCPY@ _GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # endif _GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscpy); # endif #elif defined GNULIB_POSIXCHECK # undef wcscpy # if HAVE_RAW_DECL_WCSCPY _GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " "use gnulib module wcscpy for portability"); # endif #endif /* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ #if @GNULIB_WCPCPY@ /* On Solaris 11.3, the header files declare the function in the std:: namespace, not in the global namespace. So, force a declaration in the global namespace. */ # if !@HAVE_WCPCPY@ || (defined __sun && defined __cplusplus) _GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # endif _GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); _GL_CXXALIASWARN (wcpcpy); #elif defined GNULIB_POSIXCHECK # undef wcpcpy # if HAVE_RAW_DECL_WCPCPY _GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " "use gnulib module wcpcpy for portability"); # endif #endif /* Copy no more than N wide characters of SRC to DEST. */ #if @GNULIB_WCSNCPY@ # if !@HAVE_WCSNCPY@ _GL_FUNCDECL_SYS (wcsncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncpy); # endif #elif defined GNULIB_POSIXCHECK # undef wcsncpy # if HAVE_RAW_DECL_WCSNCPY _GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " "use gnulib module wcsncpy for portability"); # endif #endif /* Copy no more than N characters of SRC to DEST, returning the address of the last character written into DEST. */ #if @GNULIB_WCPNCPY@ /* On Solaris 11.3, the header files declare the function in the std:: namespace, not in the global namespace. So, force a declaration in the global namespace. */ # if !@HAVE_WCPNCPY@ || (defined __sun && defined __cplusplus) _GL_FUNCDECL_SYS (wcpncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcpncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); _GL_CXXALIASWARN (wcpncpy); #elif defined GNULIB_POSIXCHECK # undef wcpncpy # if HAVE_RAW_DECL_WCPNCPY _GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " "use gnulib module wcpncpy for portability"); # endif #endif /* Append SRC onto DEST. */ #if @GNULIB_WCSCAT@ # if !@HAVE_WCSCAT@ _GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # endif _GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscat); # endif #elif defined GNULIB_POSIXCHECK # undef wcscat # if HAVE_RAW_DECL_WCSCAT _GL_WARN_ON_USE (wcscat, "wcscat is unportable - " "use gnulib module wcscat for portability"); # endif #endif /* Append no more than N wide characters of SRC onto DEST. */ #if @GNULIB_WCSNCAT@ # if !@HAVE_WCSNCAT@ _GL_FUNCDECL_SYS (wcsncat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncat); # endif #elif defined GNULIB_POSIXCHECK # undef wcsncat # if HAVE_RAW_DECL_WCSNCAT _GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " "use gnulib module wcsncat for portability"); # endif #endif /* Compare S1 and S2. */ #if @GNULIB_WCSCMP@ # if @REPLACE_WCSCMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcscmp # define wcscmp rpl_wcscmp # endif _GL_FUNCDECL_RPL (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); # else # if !@HAVE_WCSCMP@ _GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscmp); # endif #elif defined GNULIB_POSIXCHECK # undef wcscmp # if HAVE_RAW_DECL_WCSCMP _GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " "use gnulib module wcscmp for portability"); # endif #endif /* Compare no more than N wide characters of S1 and S2. */ #if @GNULIB_WCSNCMP@ # if @REPLACE_WCSNCMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsncmp # define wcsncmp rpl_wcsncmp # endif _GL_FUNCDECL_RPL (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); # else # if !@HAVE_WCSNCMP@ _GL_FUNCDECL_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncmp); # endif #elif defined GNULIB_POSIXCHECK # undef wcsncmp # if HAVE_RAW_DECL_WCSNCMP _GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " "use gnulib module wcsncmp for portability"); # endif #endif /* Compare S1 and S2, ignoring case. */ #if @GNULIB_WCSCASECMP@ /* On Solaris 11.3, the header files declare the function in the std:: namespace, not in the global namespace. So, force a declaration in the global namespace. */ # if !@HAVE_WCSCASECMP@ || (defined __sun && defined __cplusplus) _GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); _GL_CXXALIASWARN (wcscasecmp); #elif defined GNULIB_POSIXCHECK # undef wcscasecmp # if HAVE_RAW_DECL_WCSCASECMP _GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " "use gnulib module wcscasecmp for portability"); # endif #endif /* Compare no more than N chars of S1 and S2, ignoring case. */ #if @GNULIB_WCSNCASECMP@ /* On Solaris 11.3, the header files declare the function in the std:: namespace, not in the global namespace. So, force a declaration in the global namespace. */ # if !@HAVE_WCSNCASECMP@ || (defined __sun && defined __cplusplus) _GL_FUNCDECL_SYS (wcsncasecmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsncasecmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wcsncasecmp); #elif defined GNULIB_POSIXCHECK # undef wcsncasecmp # if HAVE_RAW_DECL_WCSNCASECMP _GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " "use gnulib module wcsncasecmp for portability"); # endif #endif /* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE category of the current locale. */ #if @GNULIB_WCSCOLL@ # if !@HAVE_WCSCOLL@ _GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); # endif _GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscoll); # endif #elif defined GNULIB_POSIXCHECK # undef wcscoll # if HAVE_RAW_DECL_WCSCOLL _GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " "use gnulib module wcscoll for portability"); # endif #endif /* Transform S2 into array pointed to by S1 such that if wcscmp is applied to two transformed strings the result is the as applying 'wcscoll' to the original strings. */ #if @GNULIB_WCSXFRM@ # if !@HAVE_WCSXFRM@ _GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); # endif _GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsxfrm); # endif #elif defined GNULIB_POSIXCHECK # undef wcsxfrm # if HAVE_RAW_DECL_WCSXFRM _GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " "use gnulib module wcsxfrm for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_WCSDUP@ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsdup # define wcsdup _wcsdup # endif _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); # else /* On Solaris 11.3, the header files declare the function in the std:: namespace, not in the global namespace. So, force a declaration in the global namespace. */ # if !@HAVE_WCSDUP@ || (defined __sun && defined __cplusplus) || __GNUC__ >= 11 # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); # endif _GL_CXXALIASWARN (wcsdup); #else # if __GNUC__ >= 11 && !defined wcsdup /* For -Wmismatched-dealloc: Associate wcsdup with free or rpl_free. */ # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # endif # if defined GNULIB_POSIXCHECK # undef wcsdup # if HAVE_RAW_DECL_WCSDUP _GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " "use gnulib module wcsdup for portability"); # endif # elif @GNULIB_MDA_WCSDUP@ /* On native Windows, map 'wcsdup' to '_wcsdup', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::wcsdup always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsdup # define wcsdup _wcsdup # endif _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); # else # if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # else _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if @HAVE_DECL_WCSDUP@ _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_WCSDUP@ _GL_CXXALIASWARN (wcsdup); # endif # endif #endif /* Find the first occurrence of WC in WCS. */ #if @GNULIB_WCSCHR@ # if !@HAVE_WCSCHR@ _GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcschr (const wchar_t *, wchar_t); wchar_t * std::wcschr (wchar_t *, wchar_t); } */ _GL_CXXALIAS_SYS_CAST2 (wcschr, wchar_t *, (const wchar_t *, wchar_t), const wchar_t *, (const wchar_t *, wchar_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcschr); # endif #elif defined GNULIB_POSIXCHECK # undef wcschr # if HAVE_RAW_DECL_WCSCHR _GL_WARN_ON_USE (wcschr, "wcschr is unportable - " "use gnulib module wcschr for portability"); # endif #endif /* Find the last occurrence of WC in WCS. */ #if @GNULIB_WCSRCHR@ # if !@HAVE_WCSRCHR@ _GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); wchar_t * std::wcsrchr (wchar_t *, wchar_t); } */ _GL_CXXALIAS_SYS_CAST2 (wcsrchr, wchar_t *, (const wchar_t *, wchar_t), const wchar_t *, (const wchar_t *, wchar_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsrchr); # endif #elif defined GNULIB_POSIXCHECK # undef wcsrchr # if HAVE_RAW_DECL_WCSRCHR _GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " "use gnulib module wcsrchr for portability"); # endif #endif /* Return the length of the initial segment of WCS which consists entirely of wide characters not in REJECT. */ #if @GNULIB_WCSCSPN@ # if !@HAVE_WCSCSPN@ _GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscspn); # endif #elif defined GNULIB_POSIXCHECK # undef wcscspn # if HAVE_RAW_DECL_WCSCSPN _GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " "use gnulib module wcscspn for portability"); # endif #endif /* Return the length of the initial segment of WCS which consists entirely of wide characters in ACCEPT. */ #if @GNULIB_WCSSPN@ # if !@HAVE_WCSSPN@ _GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsspn); # endif #elif defined GNULIB_POSIXCHECK # undef wcsspn # if HAVE_RAW_DECL_WCSSPN _GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " "use gnulib module wcsspn for portability"); # endif #endif /* Find the first occurrence in WCS of any character in ACCEPT. */ #if @GNULIB_WCSPBRK@ # if !@HAVE_WCSPBRK@ _GL_FUNCDECL_SYS (wcspbrk, wchar_t *, (const wchar_t *wcs, const wchar_t *accept) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); } */ _GL_CXXALIAS_SYS_CAST2 (wcspbrk, wchar_t *, (const wchar_t *, const wchar_t *), const wchar_t *, (const wchar_t *, const wchar_t *)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcspbrk, wchar_t *, (wchar_t *wcs, const wchar_t *accept)); _GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, (const wchar_t *wcs, const wchar_t *accept)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcspbrk); # endif #elif defined GNULIB_POSIXCHECK # undef wcspbrk # if HAVE_RAW_DECL_WCSPBRK _GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " "use gnulib module wcspbrk for portability"); # endif #endif /* Find the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_WCSSTR@ # if @REPLACE_WCSSTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsstr # define wcsstr rpl_wcsstr # endif _GL_FUNCDECL_RPL (wcsstr, wchar_t *, (const wchar_t *restrict haystack, const wchar_t *restrict needle) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcsstr, wchar_t *, (const wchar_t *restrict haystack, const wchar_t *restrict needle)); # else # if !@HAVE_WCSSTR@ _GL_FUNCDECL_SYS (wcsstr, wchar_t *, (const wchar_t *restrict haystack, const wchar_t *restrict needle) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); wchar_t * std::wcsstr (wchar_t *, const wchar_t *); } */ _GL_CXXALIAS_SYS_CAST2 (wcsstr, wchar_t *, (const wchar_t *restrict, const wchar_t *restrict), const wchar_t *, (const wchar_t *restrict, const wchar_t *restrict)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsstr, wchar_t *, (wchar_t *restrict haystack, const wchar_t *restrict needle)); _GL_CXXALIASWARN1 (wcsstr, const wchar_t *, (const wchar_t *restrict haystack, const wchar_t *restrict needle)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsstr); # endif #elif defined GNULIB_POSIXCHECK # undef wcsstr # if HAVE_RAW_DECL_WCSSTR _GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " "use gnulib module wcsstr for portability"); # endif #endif /* Divide WCS into tokens separated by characters in DELIM. */ #if @GNULIB_WCSTOK@ # if @REPLACE_WCSTOK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcstok # define wcstok rpl_wcstok # endif _GL_FUNCDECL_RPL (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); _GL_CXXALIAS_RPL (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); # else # if !@HAVE_WCSTOK@ _GL_FUNCDECL_SYS (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); # endif _GL_CXXALIAS_SYS (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcstok); # endif #elif defined GNULIB_POSIXCHECK # undef wcstok # if HAVE_RAW_DECL_WCSTOK _GL_WARN_ON_USE (wcstok, "wcstok is unportable - " "use gnulib module wcstok for portability"); # endif #endif /* Determine number of column positions required for first N wide characters (or fewer if S ends before this) in S. */ #if @GNULIB_WCSWIDTH@ # if @REPLACE_WCSWIDTH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcswidth # define wcswidth rpl_wcswidth # endif _GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); # else # if !@HAVE_WCSWIDTH@ _GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcswidth); # endif #elif defined GNULIB_POSIXCHECK # undef wcswidth # if HAVE_RAW_DECL_WCSWIDTH _GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " "use gnulib module wcswidth for portability"); # endif #endif /* Convert *TP to a date and time wide string. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>. */ #if @GNULIB_WCSFTIME@ # if @REPLACE_WCSFTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsftime # define wcsftime rpl_wcsftime # endif _GL_FUNCDECL_RPL (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp) _GL_ARG_NONNULL ((1, 3, 4))); _GL_CXXALIAS_RPL (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp)); # else # if !@HAVE_WCSFTIME@ _GL_FUNCDECL_SYS (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp) _GL_ARG_NONNULL ((1, 3, 4))); # endif _GL_CXXALIAS_SYS (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsftime); # endif #elif defined GNULIB_POSIXCHECK # undef wcsftime # if HAVE_RAW_DECL_WCSFTIME _GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - " "use gnulib module wcsftime for portability"); # endif #endif #if @GNULIB_WGETCWD@ && (defined _WIN32 && !defined __CYGWIN__) /* Gets the name of the current working directory. (a) If BUF is non-NULL, it is assumed to have room for SIZE wide characters. This function stores the working directory (NUL-terminated) in BUF and returns BUF. (b) If BUF is NULL, an array is allocated with 'malloc'. The array is SIZE wide characters long, unless SIZE == 0, in which case it is as big as necessary. If the directory couldn't be determined or SIZE was too small, this function returns NULL and sets errno. For a directory of length LEN, SIZE should be >= LEN + 3 in case (a) or >= LEN + 1 in case (b). Possible errno values include: - ERANGE if SIZE is too small. - ENOMEM if the memory could no be allocated. */ _GL_FUNCDECL_SYS (wgetcwd, wchar_t *, (wchar_t *buf, size_t size)); #endif #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/wctype-impl.h��������������������������������������������������������0000644�0001750�0001750�00000005104�14557510505�014666� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get descriptor for a wide character property. Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ wctype_t wctype (const char* name) { switch (name[0]) { case 'a': switch (name[1]) { case 'l': switch (name[2]) { case 'n': if (strcmp (name + 3, "um") == 0) return (wctype_t) iswalnum; break; case 'p': if (strcmp (name + 3, "ha") == 0) return (wctype_t) iswalpha; break; default: break; } break; default: break; } break; case 'b': if (strcmp (name + 1, "lank") == 0) return (wctype_t) iswblank; break; case 'c': if (strcmp (name + 1, "ntrl") == 0) return (wctype_t) iswcntrl; break; case 'd': if (strcmp (name + 1, "igit") == 0) return (wctype_t) iswdigit; break; case 'g': if (strcmp (name + 1, "raph") == 0) return (wctype_t) iswgraph; break; case 'l': if (strcmp (name + 1, "ower") == 0) return (wctype_t) iswlower; break; case 'p': switch (name[1]) { case 'r': if (strcmp (name + 2, "int") == 0) return (wctype_t) iswprint; break; case 'u': if (strcmp (name + 2, "nct") == 0) return (wctype_t) iswpunct; break; default: break; } break; case 's': if (strcmp (name + 1, "pace") == 0) return (wctype_t) iswspace; break; case 'u': if (strcmp (name + 1, "pper") == 0) return (wctype_t) iswupper; break; case 'x': if (strcmp (name + 1, "digit") == 0) return (wctype_t) iswxdigit; break; default: break; } return NULL; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/wctype.in.h����������������������������������������������������������0000644�0001750�0001750�00000047274�14557510505�014352� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C99 <wctype.h>, for platforms that lack it. Copyright (C) 2006-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible and Paul Eggert. */ /* * ISO C 99 <wctype.h> for platforms that lack it. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wctype.h.html> * * iswctype, towctrans, towlower, towupper, wctrans, wctype, * wctrans_t, and wctype_t are not yet implemented. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (defined __MINGW32__ && defined __CTYPE_H_SOURCED__) /* Special invocation convention: - With MinGW 3.22, when <ctype.h> includes <wctype.h>, only some part of <wctype.h> is being processed, which doesn't include the idempotency guard. */ #@INCLUDE_NEXT@ @NEXT_WCTYPE_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_WCTYPE_H /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if @HAVE_WINT_T@ /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */ # include <wchar.h> #endif /* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>. Include <ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the declarations. */ #if defined _WIN32 && ! defined __CYGWIN__ # include <ctype.h> # include <wchar.h> #endif /* Include the original <wctype.h> if it exists. BeOS 5 has the functions but no <wctype.h>. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_WCTYPE_H@ # @INCLUDE_NEXT@ @NEXT_WCTYPE_H@ #endif #ifndef _@GUARD_PREFIX@_WCTYPE_H #define _@GUARD_PREFIX@_WCTYPE_H _GL_INLINE_HEADER_BEGIN #ifndef _GL_WCTYPE_INLINE # define _GL_WCTYPE_INLINE _GL_INLINE #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which #defines a number of identifiers in the application namespace. Revert these #defines. */ #ifdef __sun # undef multibyte # undef eucw1 # undef eucw2 # undef eucw3 # undef scrw1 # undef scrw2 # undef scrw3 #endif /* Define wint_t and WEOF. (Also done in wchar.in.h.) */ #if !@HAVE_WINT_T@ && !defined wint_t # define wint_t int # ifndef WEOF # define WEOF -1 # endif #else /* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be "unchanged by default argument promotions". Override it. */ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ # if !GNULIB_defined_wint_t # if @HAVE_CRTDEFS_H@ # include <crtdefs.h> # else # include <stddef.h> # endif typedef unsigned int rpl_wint_t; # undef wint_t # define wint_t rpl_wint_t # define GNULIB_defined_wint_t 1 # endif # endif # ifndef WEOF # define WEOF ((wint_t) -1) # endif #endif #if !GNULIB_defined_wctype_functions /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions. Linux libc5 has <wctype.h> and the functions but they are broken. mingw and MSVC have <wctype.h> and the functions but they take a wchar_t as argument, not an rpl_wint_t. Additionally, the mingw iswprint function and the Android iswpunct function are broken. Assume all 11 functions (all isw* except iswblank) are implemented the same way, or not at all. */ # if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ /* implies @REPLACE_ISWCNTRL@ */ _GL_WCTYPE_INLINE int rpl_iswalnum (wint_t wc) { return ((wchar_t) wc == wc ? iswalnum ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswalpha (wint_t wc) { return ((wchar_t) wc == wc ? iswalpha ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswblank (wint_t wc) { return ((wchar_t) wc == wc ? iswblank ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswcntrl (wint_t wc) { return ((wchar_t) wc == wc ? iswcntrl ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswdigit (wint_t wc) { return ((wchar_t) wc == wc ? wc >= '0' && wc <= '9' : 0); } _GL_WCTYPE_INLINE int rpl_iswgraph (wint_t wc) { return ((wchar_t) wc == wc ? iswgraph ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswlower (wint_t wc) { return ((wchar_t) wc == wc ? iswlower ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswprint (wint_t wc) { # ifdef __MINGW32__ return ((wchar_t) wc == wc ? wc == ' ' || iswgraph ((wchar_t) wc) : 0); # else return ((wchar_t) wc == wc ? iswprint ((wchar_t) wc) : 0); # endif } _GL_WCTYPE_INLINE int rpl_iswpunct (wint_t wc) { return ((wchar_t) wc == wc ? iswpunct ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswspace (wint_t wc) { return ((wchar_t) wc == wc ? iswspace ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswupper (wint_t wc) { return ((wchar_t) wc == wc ? iswupper ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswxdigit (wint_t wc) { return ((wchar_t) wc == wc ? (wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F') : 0); } _GL_WCTYPE_INLINE wint_t rpl_towlower (wint_t wc) { return ((wchar_t) wc == wc ? (wchar_t) towlower ((wchar_t) wc) : wc); } _GL_WCTYPE_INLINE wint_t rpl_towupper (wint_t wc) { return ((wchar_t) wc == wc ? (wchar_t) towupper ((wchar_t) wc) : wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswalnum # undef iswalpha # undef iswblank # undef iswcntrl # undef iswdigit # undef iswgraph # undef iswlower # undef iswprint # undef iswpunct # undef iswspace # undef iswupper # undef iswxdigit # undef towlower # undef towupper # define iswalnum rpl_iswalnum # define iswalpha rpl_iswalpha # define iswblank rpl_iswblank # define iswcntrl rpl_iswcntrl # define iswdigit rpl_iswdigit # define iswgraph rpl_iswgraph # define iswlower rpl_iswlower # define iswprint rpl_iswprint # define iswpunct rpl_iswpunct # define iswspace rpl_iswspace # define iswupper rpl_iswupper # define iswxdigit rpl_iswxdigit # define towlower rpl_towlower # define towupper rpl_towupper # endif # else /* IRIX 5.3 has macros but no functions, its isw* macros refer to an undefined variable _ctmp_ and to <ctype.h> macros like _P, and they refer to system functions like _iswctype that are not in the standard C library. Rather than try to get ancient buggy implementations like this to work, just disable them. */ # undef iswalnum # undef iswalpha # undef iswblank # undef iswcntrl # undef iswdigit # undef iswgraph # undef iswlower # undef iswprint # undef iswpunct # undef iswspace # undef iswupper # undef iswxdigit # undef towlower # undef towupper /* Linux libc5 has <wctype.h> and the functions but they are broken. */ # if @REPLACE_ISWCNTRL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define iswalnum rpl_iswalnum # define iswalpha rpl_iswalpha # define iswblank rpl_iswblank # define iswcntrl rpl_iswcntrl # define iswdigit rpl_iswdigit # define iswgraph rpl_iswgraph # define iswlower rpl_iswlower # define iswprint rpl_iswprint # define iswpunct rpl_iswpunct # define iswspace rpl_iswspace # define iswupper rpl_iswupper # define iswxdigit rpl_iswxdigit # endif # endif # if @REPLACE_TOWLOWER@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towlower rpl_towlower # define towupper rpl_towupper # endif # endif _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswalnum # else iswalnum # endif (wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswalpha # else iswalpha # endif (wint_t wc) { return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswblank # else iswblank # endif (wint_t wc) { return wc == ' ' || wc == '\t'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswcntrl # else iswcntrl # endif (wint_t wc) { return (wc & ~0x1f) == 0 || wc == 0x7f; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWDIGIT@ rpl_iswdigit # else iswdigit # endif (wint_t wc) { return wc >= '0' && wc <= '9'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswgraph # else iswgraph # endif (wint_t wc) { return wc >= '!' && wc <= '~'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswlower # else iswlower # endif (wint_t wc) { return wc >= 'a' && wc <= 'z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswprint # else iswprint # endif (wint_t wc) { return wc >= ' ' && wc <= '~'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswpunct # else iswpunct # endif (wint_t wc) { return (wc >= '!' && wc <= '~' && !((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'))); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswspace # else iswspace # endif (wint_t wc) { return (wc == ' ' || wc == '\t' || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r'); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswupper # else iswupper # endif (wint_t wc) { return wc >= 'A' && wc <= 'Z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWXDIGIT@ rpl_iswxdigit # else iswxdigit # endif (wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); } _GL_WCTYPE_INLINE wint_t # if @REPLACE_TOWLOWER@ rpl_towlower # else towlower # endif (wint_t wc) { return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc); } _GL_WCTYPE_INLINE wint_t # if @REPLACE_TOWLOWER@ rpl_towupper # else towupper # endif (wint_t wc) { return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc); } # endif # else /* Only some of the functions are missing or broken. */ # if @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@) /* Only the iswblank function is missing. */ # if @REPLACE_ISWBLANK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define iswblank rpl_iswblank # endif _GL_FUNCDECL_RPL (iswblank, int, (wint_t wc)); # else _GL_FUNCDECL_SYS (iswblank, int, (wint_t wc)); # endif # endif # if @GNULIB_ISWDIGIT@ # if @REPLACE_ISWDIGIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswdigit # define iswdigit rpl_iswdigit # endif _GL_FUNCDECL_RPL (iswdigit, int, (wint_t wc)); # endif # endif # if @GNULIB_ISWPUNCT@ # if @REPLACE_ISWPUNCT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswpunct # define iswpunct rpl_iswpunct # endif _GL_FUNCDECL_RPL (iswpunct, int, (wint_t wc)); # endif # endif # if @GNULIB_ISWXDIGIT@ # if @REPLACE_ISWXDIGIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswxdigit # define iswxdigit rpl_iswxdigit # endif _GL_FUNCDECL_RPL (iswxdigit, int, (wint_t wc)); # endif # endif # endif # if defined __MINGW32__ && !@GNULIBHEADERS_OVERRIDE_WINT_T@ /* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t. The functions towlower and towupper are implemented in the MSVCRT library to take a wchar_t argument and return a wchar_t result. mingw declares these functions to take a wint_t argument and return a wint_t result. This means that: 1. When the user passes an argument outside the range 0x0000..0xFFFF, the function will look only at the lower 16 bits. This is allowed according to POSIX. 2. The return value is returned in the lower 16 bits of the result register. The upper 16 bits are random: whatever happened to be in that part of the result register. We need to fix this by adding a zero-extend from wchar_t to wint_t after the call. */ _GL_WCTYPE_INLINE wint_t rpl_towlower (wint_t wc) { return (wint_t) (wchar_t) towlower (wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towlower rpl_towlower # endif _GL_WCTYPE_INLINE wint_t rpl_towupper (wint_t wc) { return (wint_t) (wchar_t) towupper (wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towupper rpl_towupper # endif # endif /* __MINGW32__ && !@GNULIBHEADERS_OVERRIDE_WINT_T@ */ # define GNULIB_defined_wctype_functions 1 #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc)); #endif #if @GNULIB_ISWDIGIT@ # if @REPLACE_ISWDIGIT@ _GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc)); # else _GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc)); # endif #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswlower, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswlower, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswprint, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswprint, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswspace, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswspace, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswupper, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswupper, int, (wint_t wc)); #endif #if @GNULIB_ISWXDIGIT@ # if @REPLACE_ISWXDIGIT@ _GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc)); # else _GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc)); # endif #endif #if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswalnum); _GL_CXXALIASWARN (iswalpha); _GL_CXXALIASWARN (iswcntrl); _GL_CXXALIASWARN (iswdigit); _GL_CXXALIASWARN (iswgraph); _GL_CXXALIASWARN (iswlower); _GL_CXXALIASWARN (iswprint); _GL_CXXALIASWARN (iswpunct); _GL_CXXALIASWARN (iswspace); _GL_CXXALIASWARN (iswupper); _GL_CXXALIASWARN (iswxdigit); #endif #if @GNULIB_ISWBLANK@ # if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@ _GL_CXXALIAS_RPL (iswblank, int, (wint_t wc)); # else _GL_CXXALIAS_SYS (iswblank, int, (wint_t wc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswblank); # endif #endif #if !@HAVE_WCTYPE_T@ # if !GNULIB_defined_wctype_t typedef void * wctype_t; # define GNULIB_defined_wctype_t 1 # endif #elif @REPLACE_WCTYPE@ # if !GNULIB_defined_wctype_t typedef void *rpl_wctype_t; # undef wctype_t # define wctype_t rpl_wctype_t # define GNULIB_defined_wctype_t 1 # endif #endif /* Get a descriptor for a wide character property. */ #if @GNULIB_WCTYPE@ # if @REPLACE_WCTYPE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctype # define wctype rpl_wctype # endif _GL_FUNCDECL_RPL (wctype, wctype_t, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (wctype, wctype_t, (const char *name)); # else # if !@HAVE_WCTYPE_T@ _GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctype); # endif #elif defined GNULIB_POSIXCHECK # undef wctype # if HAVE_RAW_DECL_WCTYPE _GL_WARN_ON_USE (wctype, "wctype is unportable - " "use gnulib module wctype for portability"); # endif #endif /* Test whether a wide character has a given property. The argument WC must be either a wchar_t value or WEOF. The argument DESC must have been returned by the wctype() function. */ #if @GNULIB_ISWCTYPE@ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ || @REPLACE_WCTYPE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswctype # define iswctype rpl_iswctype # endif _GL_FUNCDECL_RPL (iswctype, int, (wint_t wc, wctype_t desc)); _GL_CXXALIAS_RPL (iswctype, int, (wint_t wc, wctype_t desc)); # else # if !@HAVE_WCTYPE_T@ _GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc)); # endif _GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswctype); # endif #elif defined GNULIB_POSIXCHECK # undef iswctype # if HAVE_RAW_DECL_ISWCTYPE _GL_WARN_ON_USE (iswctype, "iswctype is unportable - " "use gnulib module iswctype for portability"); # endif #endif #if @REPLACE_TOWLOWER@ || defined __MINGW32__ _GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc)); _GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc)); #else _GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc)); _GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc)); #endif #if __GLIBC__ >= 2 _GL_CXXALIASWARN (towlower); _GL_CXXALIASWARN (towupper); #endif #if !@HAVE_WCTRANS_T@ # if !GNULIB_defined_wctrans_t typedef void * wctrans_t; # define GNULIB_defined_wctrans_t 1 # endif #elif @REPLACE_WCTRANS@ # if !GNULIB_defined_wctrans_t typedef void *rpl_wctrans_t; # undef wctrans_t # define wctrans_t rpl_wctrans_t # define GNULIB_defined_wctrans_t 1 # endif #endif /* Get a descriptor for a wide character case conversion. */ #if @GNULIB_WCTRANS@ # if @REPLACE_WCTRANS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctrans # define wctrans rpl_wctrans # endif _GL_FUNCDECL_RPL (wctrans, wctrans_t, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (wctrans, wctrans_t, (const char *name)); # else # if !@HAVE_WCTRANS_T@ _GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctrans); # endif #elif defined GNULIB_POSIXCHECK # undef wctrans # if HAVE_RAW_DECL_WCTRANS _GL_WARN_ON_USE (wctrans, "wctrans is unportable - " "use gnulib module wctrans for portability"); # endif #endif /* Perform a given case conversion on a wide character. The argument WC must be either a wchar_t value or WEOF. The argument DESC must have been returned by the wctrans() function. */ #if @GNULIB_TOWCTRANS@ # if @REPLACE_WCTRANS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef towctrans # define towctrans rpl_towctrans # endif _GL_FUNCDECL_RPL (towctrans, wint_t, (wint_t wc, wctrans_t desc)); _GL_CXXALIAS_RPL (towctrans, wint_t, (wint_t wc, wctrans_t desc)); # else # if !@HAVE_WCTRANS_T@ _GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); # endif _GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (towctrans); # endif #elif defined GNULIB_POSIXCHECK # undef towctrans # if HAVE_RAW_DECL_TOWCTRANS _GL_WARN_ON_USE (towctrans, "towctrans is unportable - " "use gnulib module towctrans for portability"); # endif #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_WCTYPE_H */ #endif /* _@GUARD_PREFIX@_WCTYPE_H */ #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/windows-mutex.h������������������������������������������������������0000644�0001750�0001750�00000003175�14557510505�015254� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain mutexes (native Windows implementation). Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_MUTEX_H #define _WINDOWS_MUTEX_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include "windows-initguard.h" typedef struct { glwthread_initguard_t guard; /* protects the initialization */ CRITICAL_SECTION lock; } glwthread_mutex_t; #define GLWTHREAD_MUTEX_INIT { GLWTHREAD_INITGUARD_INIT } #ifdef __cplusplus extern "C" { #endif extern void glwthread_mutex_init (glwthread_mutex_t *mutex); extern int glwthread_mutex_lock (glwthread_mutex_t *mutex); extern int glwthread_mutex_trylock (glwthread_mutex_t *mutex); extern int glwthread_mutex_unlock (glwthread_mutex_t *mutex); extern int glwthread_mutex_destroy (glwthread_mutex_t *mutex); #ifdef __cplusplus } #endif #endif /* _WINDOWS_MUTEX_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/windows-once.h�������������������������������������������������������0000644�0001750�0001750�00000002602�14557510505�015030� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Once-only control (native Windows implementation). Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_ONCE_H #define _WINDOWS_ONCE_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> typedef struct { volatile int inited; volatile LONG started; CRITICAL_SECTION lock; } glwthread_once_t; #define GLWTHREAD_ONCE_INIT { -1, -1 } #ifdef __cplusplus extern "C" { #endif extern void glwthread_once (glwthread_once_t *once_control, void (*initfunction) (void)); #ifdef __cplusplus } #endif #endif /* _WINDOWS_ONCE_H */ ������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/windows-recmutex.h���������������������������������������������������0000644�0001750�0001750�00000003675�14557510505�015753� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain recursive mutexes (native Windows implementation). Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_RECMUTEX_H #define _WINDOWS_RECMUTEX_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include "windows-initguard.h" /* The native Windows documentation says that CRITICAL_SECTION already implements a recursive lock. But we need not rely on it: It's easy to implement a recursive lock without this assumption. */ typedef struct { glwthread_initguard_t guard; /* protects the initialization */ DWORD owner; unsigned long depth; CRITICAL_SECTION lock; } glwthread_recmutex_t; #define GLWTHREAD_RECMUTEX_INIT { GLWTHREAD_INITGUARD_INIT, 0, 0 } #ifdef __cplusplus extern "C" { #endif extern void glwthread_recmutex_init (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_lock (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_trylock (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_unlock (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_destroy (glwthread_recmutex_t *mutex); #ifdef __cplusplus } #endif #endif /* _WINDOWS_RECMUTEX_H */ �������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/windows-rwlock.h�����������������������������������������������������0000644�0001750�0001750�00000005134�14557510505�015410� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read-write locks (native Windows implementation). Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_RWLOCK_H #define _WINDOWS_RWLOCK_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include "windows-initguard.h" /* It is impossible to implement read-write locks using plain locks, without introducing an extra thread dedicated to managing read-write locks. Therefore here we need to use the low-level Event type. */ typedef struct { HANDLE *array; /* array of waiting threads, each represented by an event */ unsigned int count; /* number of waiting threads */ unsigned int alloc; /* length of allocated array */ unsigned int offset; /* index of first waiting thread in array */ } glwthread_carray_waitqueue_t; typedef struct { glwthread_initguard_t guard; /* protects the initialization */ CRITICAL_SECTION lock; /* protects the remaining fields */ glwthread_carray_waitqueue_t waiting_readers; /* waiting readers */ glwthread_carray_waitqueue_t waiting_writers; /* waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } glwthread_rwlock_t; #define GLWTHREAD_RWLOCK_INIT { GLWTHREAD_INITGUARD_INIT } #ifdef __cplusplus extern "C" { #endif extern void glwthread_rwlock_init (glwthread_rwlock_t *lock); extern int glwthread_rwlock_rdlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_wrlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_unlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_destroy (glwthread_rwlock_t *lock); #ifdef __cplusplus } #endif #endif /* _WINDOWS_RWLOCK_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/lib/xalloc-oversized.h���������������������������������������������������0000644�0001750�0001750�00000005113�14557510505�015706� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xalloc-oversized.h -- memory allocation size checking Copyright (C) 1990-2000, 2003-2004, 2006-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef XALLOC_OVERSIZED_H_ #define XALLOC_OVERSIZED_H_ #include <stddef.h> #include <stdint.h> /* True if N * S does not fit into both ptrdiff_t and size_t. N and S should be nonnegative and free of side effects. This expands to a constant expression if N and S are both constants. By gnulib convention, SIZE_MAX represents overflow in size_t calculations, so the conservative size_t-based dividend to use here is SIZE_MAX - 1. */ #define __xalloc_oversized(n, s) \ ((s) != 0 \ && ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) \ < (n))) /* Return 1 if and only if an array of N objects, each of size S, cannot exist reliably because its total size in bytes would exceed MIN (PTRDIFF_MAX, SIZE_MAX - 1). N and S should be nonnegative and free of side effects. Warning: (xalloc_oversized (N, S) ? NULL : malloc (N * S)) can misbehave if N and S are both narrower than ptrdiff_t and size_t, and can be rewritten as (xalloc_oversized (N, S) ? NULL : malloc (N * (size_t) S)). This is a macro, not a function, so that it works even if an argument exceeds MAX (PTRDIFF_MAX, SIZE_MAX). */ #if 7 <= __GNUC__ && !defined __clang__ && PTRDIFF_MAX < SIZE_MAX # define xalloc_oversized(n, s) \ __builtin_mul_overflow_p (n, s, (ptrdiff_t) 1) #elif 5 <= __GNUC__ && !defined __ICC && PTRDIFF_MAX < SIZE_MAX # define xalloc_oversized(n, s) \ (__builtin_constant_p (n) && __builtin_constant_p (s) \ ? __xalloc_oversized (n, s) \ : __extension__ \ ({ ptrdiff_t __xalloc_count; \ __builtin_mul_overflow (n, s, &__xalloc_count); })) /* Other compilers use integer division; this may be slower but is more portable. */ #else # define xalloc_oversized(n, s) __xalloc_oversized (n, s) #endif #endif /* !XALLOC_OVERSIZED_H_ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/�������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514200�012713� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/glthread/����������������������������������������������������������0000755�0001750�0001750�00000000000�14557514200�014505� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/glthread/thread.h��������������������������������������������������0000644�0001750�0001750�00000026444�14557510507�016065� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creating and controlling threads. Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ /* This file contains primitives for creating and controlling threads. Thread data type: gl_thread_t. Creating a thread: thread = gl_thread_create (func, arg); Or with control of error handling: err = glthread_create (&thread, func, arg); extern int glthread_create (gl_thread_t *result, void *(*func) (void *), void *arg); Querying and changing the signal mask of a thread (not supported on all platforms): gl_thread_sigmask (how, newmask, oldmask); Or with control of error handling: err = glthread_sigmask (how, newmask, oldmask); extern int glthread_sigmask (int how, const sigset_t *newmask, sigset_t *oldmask); Waiting for termination of another thread: gl_thread_join (thread, &return_value); Or with control of error handling: err = glthread_join (thread, &return_value); extern int glthread_join (gl_thread_t thread, void **return_value_ptr); Getting a reference to the current thread: current = gl_thread_self (); extern gl_thread_t gl_thread_self (void); Getting a reference to the current thread as a pointer, for debugging: ptr = gl_thread_self_pointer (); extern void * gl_thread_self_pointer (void); Terminating the current thread: gl_thread_exit (return_value); extern _Noreturn void gl_thread_exit (void *return_value); Requesting custom code to be executed at fork() time (not supported on all platforms): gl_thread_atfork (prepare_func, parent_func, child_func); Or with control of error handling: err = glthread_atfork (prepare_func, parent_func, child_func); extern int glthread_atfork (void (*prepare_func) (void), void (*parent_func) (void), void (*child_func) (void)); Note that even on platforms where this is supported, use of fork() and threads together is problematic, see <https://lists.gnu.org/r/bug-gnulib/2008-08/msg00062.html> */ #ifndef _GLTHREAD_THREAD_H #define _GLTHREAD_THREAD_H /* This file uses _Noreturn, HAVE_THREADS_H, HAVE_PTHREAD_ATFORK. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <errno.h> #include <stdlib.h> #if !defined c11_threads_in_use # if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC # define c11_threads_in_use() 1 # elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif #endif /* ========================================================================= */ #if USE_ISOC_THREADS /* Use the ISO C threads library. */ # include <threads.h> # ifdef __cplusplus extern "C" { # endif /* -------------------------- gl_thread_t datatype -------------------------- */ typedef struct thrd_with_exitvalue *gl_thread_t; extern int glthread_create (gl_thread_t *threadp, void *(*func) (void *), void *arg); # define glthread_sigmask(HOW, SET, OSET) \ pthread_sigmask (HOW, SET, OSET) extern int glthread_join (gl_thread_t thread, void **return_value_ptr); extern gl_thread_t gl_thread_self (void); # define gl_thread_self_pointer() \ (void *) gl_thread_self () extern _Noreturn void gl_thread_exit (void *return_value); # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the POSIX threads library. */ # include <pthread.h> /* Get intptr_t. */ # include <stdint.h> /* On IRIX, pthread_atfork is declared in <unistd.h>, not in <pthread.h>. */ # if defined __sgi # include <unistd.h> # endif # if USE_POSIX_THREADS_WEAK /* Compilers other than GCC need to see the declaration of pthread_sigmask before the "#pragma weak pthread_sigmask" below. */ # include <signal.h> # endif # ifdef __cplusplus extern "C" { # endif # if PTHREAD_IN_USE_DETECTION_HARD /* The pthread_in_use() detection needs to be done at runtime. */ # define pthread_in_use() \ glthread_in_use () extern int glthread_in_use (void); # endif # if USE_POSIX_THREADS_WEAK /* Use weak references to the POSIX threads library. */ /* Weak references avoid dragging in external libraries if the other parts of the program don't use them. Here we use them, because we don't want every program that uses libintl to depend on libpthread. This assumes that libpthread would not be loaded after libintl; i.e. if libintl is loaded first, by an executable that does not depend on libpthread, and then a module is dynamically loaded that depends on libpthread, libintl will not be multithread-safe. */ /* The way to test at runtime whether libpthread is present is to test whether a function pointer's value, such as &pthread_mutex_init, is non-NULL. However, some versions of GCC have a bug through which, in PIC mode, &foo != NULL always evaluates to true if there is a direct call to foo(...) in the same function. To avoid this, we test the address of a function in libpthread that we don't use. */ # ifndef pthread_sigmask /* Do not declare rpl_pthread_sigmask weak. */ # pragma weak pthread_sigmask # endif # pragma weak pthread_join # ifndef pthread_self # pragma weak pthread_self # endif # pragma weak pthread_exit # if HAVE_PTHREAD_ATFORK # pragma weak pthread_atfork # endif # if !PTHREAD_IN_USE_DETECTION_HARD # pragma weak pthread_mutexattr_gettype # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # endif # else # if !PTHREAD_IN_USE_DETECTION_HARD # define pthread_in_use() 1 # endif # endif /* -------------------------- gl_thread_t datatype -------------------------- */ /* This choice of gl_thread_t assumes that pthread_equal (a, b) is equivalent to ((a) == (b)). This is the case on all platforms in use in 2008. */ typedef pthread_t gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) \ (pthread_in_use () ? pthread_create (THREADP, NULL, FUNC, ARG) : ENOSYS) # define glthread_sigmask(HOW, SET, OSET) \ (pthread_in_use () ? pthread_sigmask (HOW, SET, OSET) : 0) # define glthread_join(THREAD, RETVALP) \ (pthread_in_use () ? pthread_join (THREAD, RETVALP) : 0) # ifdef PTW32_VERSION /* In pthreads-win32, pthread_t is a struct with a pointer field 'p' and other fields. */ # define gl_thread_self() \ (pthread_in_use () ? pthread_self () : gl_null_thread) # define gl_thread_self_pointer() \ (pthread_in_use () ? pthread_self ().p : NULL) extern const gl_thread_t gl_null_thread; # elif defined __MVS__ /* On IBM z/OS, pthread_t is a struct with an 8-byte '__' field. The first three bytes of this field appear to uniquely identify a pthread_t, though not necessarily representing a pointer. */ # define gl_thread_self() \ (pthread_in_use () ? pthread_self () : gl_null_thread) # define gl_thread_self_pointer() \ (pthread_in_use () ? *((void **) pthread_self ().__) : NULL) extern const gl_thread_t gl_null_thread; # else # define gl_thread_self() \ (pthread_in_use () ? pthread_self () : (pthread_t) 0) # define gl_thread_self_pointer() \ (pthread_in_use () ? (void *) (intptr_t) (pthread_t) pthread_self () : NULL) # endif # define gl_thread_exit(RETVAL) \ (void) (pthread_in_use () ? (pthread_exit (RETVAL), 0) : 0) # if HAVE_PTHREAD_ATFORK # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) \ (pthread_in_use () ? pthread_atfork (PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) : 0) # else # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 # endif # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-thread.h" # ifdef __cplusplus extern "C" { # endif /* -------------------------- gl_thread_t datatype -------------------------- */ typedef glwthread_thread_t gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) \ glwthread_thread_create (THREADP, 0, FUNC, ARG) # define glthread_sigmask(HOW, SET, OSET) \ /* unsupported */ 0 # define glthread_join(THREAD, RETVALP) \ glwthread_thread_join (THREAD, RETVALP) # define gl_thread_self() \ glwthread_thread_self () # define gl_thread_self_pointer() \ gl_thread_self () # define gl_thread_exit(RETVAL) \ glwthread_thread_exit (RETVAL) # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ typedef int gl_thread_t; # define glthread_create(THREADP, FUNC, ARG) ENOSYS # define glthread_sigmask(HOW, SET, OSET) 0 # define glthread_join(THREAD, RETVALP) 0 # define gl_thread_self() 0 # define gl_thread_self_pointer() \ ((void *) gl_thread_self ()) # define gl_thread_exit(RETVAL) (void)0 # define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0 #endif /* ========================================================================= */ /* Macros with built-in error handling. */ #ifdef __cplusplus extern "C" { #endif extern gl_thread_t gl_thread_create (void *(*func) (void *arg), void *arg); #define gl_thread_sigmask(HOW, SET, OSET) \ do \ { \ if (glthread_sigmask (HOW, SET, OSET)) \ abort (); \ } \ while (0) #define gl_thread_join(THREAD, RETVAL) \ do \ { \ if (glthread_join (THREAD, RETVAL)) \ abort (); \ } \ while (0) #define gl_thread_atfork(PREPARE, PARENT, CHILD) \ do \ { \ if (glthread_atfork (PREPARE, PARENT, CHILD)) \ abort (); \ } \ while (0) #ifdef __cplusplus } #endif #endif /* _GLTHREAD_THREAD_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/glthread/thread.c��������������������������������������������������0000644�0001750�0001750�00000013245�14557510507�016053� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creating and controlling threads. Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ #include <config.h> /* Specification. */ #include "glthread/thread.h" #include <stdlib.h> #include "glthread/lock.h" /* ========================================================================= */ #if USE_ISOC_THREADS struct thrd_with_exitvalue { thrd_t volatile tid; void * volatile exitvalue; }; /* The Thread-Specific Storage (TSS) key that allows to access each thread's 'struct thrd_with_exitvalue *' pointer. */ static tss_t thrd_with_exitvalue_key; /* Initializes thrd_with_exitvalue_key. This function must only be called once. */ static void do_init_thrd_with_exitvalue_key (void) { if (tss_create (&thrd_with_exitvalue_key, NULL) != thrd_success) abort (); } /* Initializes thrd_with_exitvalue_key. */ static void init_thrd_with_exitvalue_key (void) { static once_flag once = ONCE_FLAG_INIT; call_once (&once, do_init_thrd_with_exitvalue_key); } typedef union { struct thrd_with_exitvalue t; struct { thrd_t tid; /* reserve memory for t.tid */ void *(*mainfunc) (void *); void *arg; } a; } main_arg_t; static int thrd_main_func (void *pmarg) { /* Unpack the object that combines mainfunc and arg. */ main_arg_t *main_arg = (main_arg_t *) pmarg; void *(*mainfunc) (void *) = main_arg->a.mainfunc; void *arg = main_arg->a.arg; if (tss_set (thrd_with_exitvalue_key, &main_arg->t) != thrd_success) abort (); /* Execute mainfunc, with arg as argument. */ { void *exitvalue = mainfunc (arg); /* Store the exitvalue, for use by glthread_join(). */ main_arg->t.exitvalue = exitvalue; return 0; } } int glthread_create (gl_thread_t *threadp, void *(*mainfunc) (void *), void *arg) { init_thrd_with_exitvalue_key (); { /* Combine mainfunc and arg in a single object. A stack-allocated object does not work, because it would be out of existence when thrd_create returns before thrd_main_func is entered. So, allocate it in the heap. */ main_arg_t *main_arg = (main_arg_t *) malloc (sizeof (main_arg_t)); if (main_arg == NULL) return ENOMEM; main_arg->a.mainfunc = mainfunc; main_arg->a.arg = arg; switch (thrd_create ((thrd_t *) &main_arg->t.tid, thrd_main_func, main_arg)) { case thrd_success: break; case thrd_nomem: free (main_arg); return ENOMEM; default: free (main_arg); return EAGAIN; } *threadp = &main_arg->t; return 0; } } gl_thread_t gl_thread_self (void) { init_thrd_with_exitvalue_key (); { gl_thread_t thread = (struct thrd_with_exitvalue *) tss_get (thrd_with_exitvalue_key); if (thread == NULL) { /* This happens only in threads that have not been created through glthread_create(), such as the main thread. */ for (;;) { thread = (struct thrd_with_exitvalue *) malloc (sizeof (struct thrd_with_exitvalue)); if (thread != NULL) break; /* Memory allocation failed. There is not much we can do. Have to busy-loop, waiting for the availability of memory. */ { struct timespec ts = { .tv_sec = 1, .tv_nsec = 0 }; thrd_sleep (&ts, NULL); } } thread->tid = thrd_current (); thread->exitvalue = NULL; /* just to be deterministic */ if (tss_set (thrd_with_exitvalue_key, thread) != thrd_success) abort (); } return thread; } } int glthread_join (gl_thread_t thread, void **return_value_ptr) { /* On Solaris 11.4, thrd_join crashes when the second argument we pass is NULL. */ int dummy; if (thread == gl_thread_self ()) return EINVAL; if (thrd_join (thread->tid, &dummy) != thrd_success) return EINVAL; if (return_value_ptr != NULL) *return_value_ptr = thread->exitvalue; free (thread); return 0; } _Noreturn void gl_thread_exit (void *return_value) { gl_thread_t thread = gl_thread_self (); thread->exitvalue = return_value; thrd_exit (0); } #endif /* ========================================================================= */ #if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS #include <pthread.h> #if defined PTW32_VERSION || defined __MVS__ const gl_thread_t gl_null_thread /* = { .p = NULL } */; #endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS #endif /* ========================================================================= */ gl_thread_t gl_thread_create (void *(*func) (void *arg), void *arg) { gl_thread_t thread; int ret; ret = glthread_create (&thread, func, arg); if (ret != 0) abort (); return thread; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/glthread/yield.h���������������������������������������������������0000644�0001750�0001750�00000004402�14557510507�015712� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Yielding the processor to other threads and processes. Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* This file contains a primitive for yielding the processor to other threads. extern void gl_thread_yield (void); */ #ifndef _GLTHREAD_YIELD_H #define _GLTHREAD_YIELD_H #include <errno.h> /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the ISO C threads library. */ # include <threads.h> # ifdef __cplusplus extern "C" { # endif # define gl_thread_yield() \ thrd_yield () # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include <sched.h> # ifdef __cplusplus extern "C" { # endif # define gl_thread_yield() \ sched_yield () # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # ifdef __cplusplus extern "C" { # endif # define gl_thread_yield() \ Sleep (0) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ # define gl_thread_yield() 0 #endif /* ========================================================================= */ #endif /* _GLTHREAD_YIELD_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unicase/�����������������������������������������������������������0000755�0001750�0001750�00000000000�14557514200�014342� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unicase/test-uc_tolower.c������������������������������������������0000644�0001750�0001750�00000106041�14557510511�017570� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character mapping functions. Copyright (C) 2009-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Generated automatically by gen-uni-tables.c for Unicode 15.1.0. */ #include "test-mapping-part1.h" { 0x0041, 0x0061 }, { 0x0042, 0x0062 }, { 0x0043, 0x0063 }, { 0x0044, 0x0064 }, { 0x0045, 0x0065 }, { 0x0046, 0x0066 }, { 0x0047, 0x0067 }, { 0x0048, 0x0068 }, { 0x0049, 0x0069 }, { 0x004A, 0x006A }, { 0x004B, 0x006B }, { 0x004C, 0x006C }, { 0x004D, 0x006D }, { 0x004E, 0x006E }, { 0x004F, 0x006F }, { 0x0050, 0x0070 }, { 0x0051, 0x0071 }, { 0x0052, 0x0072 }, { 0x0053, 0x0073 }, { 0x0054, 0x0074 }, { 0x0055, 0x0075 }, { 0x0056, 0x0076 }, { 0x0057, 0x0077 }, { 0x0058, 0x0078 }, { 0x0059, 0x0079 }, { 0x005A, 0x007A }, { 0x00C0, 0x00E0 }, { 0x00C1, 0x00E1 }, { 0x00C2, 0x00E2 }, { 0x00C3, 0x00E3 }, { 0x00C4, 0x00E4 }, { 0x00C5, 0x00E5 }, { 0x00C6, 0x00E6 }, { 0x00C7, 0x00E7 }, { 0x00C8, 0x00E8 }, { 0x00C9, 0x00E9 }, { 0x00CA, 0x00EA }, { 0x00CB, 0x00EB }, { 0x00CC, 0x00EC }, { 0x00CD, 0x00ED }, { 0x00CE, 0x00EE }, { 0x00CF, 0x00EF }, { 0x00D0, 0x00F0 }, { 0x00D1, 0x00F1 }, { 0x00D2, 0x00F2 }, { 0x00D3, 0x00F3 }, { 0x00D4, 0x00F4 }, { 0x00D5, 0x00F5 }, { 0x00D6, 0x00F6 }, { 0x00D8, 0x00F8 }, { 0x00D9, 0x00F9 }, { 0x00DA, 0x00FA }, { 0x00DB, 0x00FB }, { 0x00DC, 0x00FC }, { 0x00DD, 0x00FD }, { 0x00DE, 0x00FE }, { 0x0100, 0x0101 }, { 0x0102, 0x0103 }, { 0x0104, 0x0105 }, { 0x0106, 0x0107 }, { 0x0108, 0x0109 }, { 0x010A, 0x010B }, { 0x010C, 0x010D }, { 0x010E, 0x010F }, { 0x0110, 0x0111 }, { 0x0112, 0x0113 }, { 0x0114, 0x0115 }, { 0x0116, 0x0117 }, { 0x0118, 0x0119 }, { 0x011A, 0x011B }, { 0x011C, 0x011D }, { 0x011E, 0x011F }, { 0x0120, 0x0121 }, { 0x0122, 0x0123 }, { 0x0124, 0x0125 }, { 0x0126, 0x0127 }, { 0x0128, 0x0129 }, { 0x012A, 0x012B }, { 0x012C, 0x012D }, { 0x012E, 0x012F }, { 0x0130, 0x0069 }, { 0x0132, 0x0133 }, { 0x0134, 0x0135 }, { 0x0136, 0x0137 }, { 0x0139, 0x013A }, { 0x013B, 0x013C }, { 0x013D, 0x013E }, { 0x013F, 0x0140 }, { 0x0141, 0x0142 }, { 0x0143, 0x0144 }, { 0x0145, 0x0146 }, { 0x0147, 0x0148 }, { 0x014A, 0x014B }, { 0x014C, 0x014D }, { 0x014E, 0x014F }, { 0x0150, 0x0151 }, { 0x0152, 0x0153 }, { 0x0154, 0x0155 }, { 0x0156, 0x0157 }, { 0x0158, 0x0159 }, { 0x015A, 0x015B }, { 0x015C, 0x015D }, { 0x015E, 0x015F }, { 0x0160, 0x0161 }, { 0x0162, 0x0163 }, { 0x0164, 0x0165 }, { 0x0166, 0x0167 }, { 0x0168, 0x0169 }, { 0x016A, 0x016B }, { 0x016C, 0x016D }, { 0x016E, 0x016F }, { 0x0170, 0x0171 }, { 0x0172, 0x0173 }, { 0x0174, 0x0175 }, { 0x0176, 0x0177 }, { 0x0178, 0x00FF }, { 0x0179, 0x017A }, { 0x017B, 0x017C }, { 0x017D, 0x017E }, { 0x0181, 0x0253 }, { 0x0182, 0x0183 }, { 0x0184, 0x0185 }, { 0x0186, 0x0254 }, { 0x0187, 0x0188 }, { 0x0189, 0x0256 }, { 0x018A, 0x0257 }, { 0x018B, 0x018C }, { 0x018E, 0x01DD }, { 0x018F, 0x0259 }, { 0x0190, 0x025B }, { 0x0191, 0x0192 }, { 0x0193, 0x0260 }, { 0x0194, 0x0263 }, { 0x0196, 0x0269 }, { 0x0197, 0x0268 }, { 0x0198, 0x0199 }, { 0x019C, 0x026F }, { 0x019D, 0x0272 }, { 0x019F, 0x0275 }, { 0x01A0, 0x01A1 }, { 0x01A2, 0x01A3 }, { 0x01A4, 0x01A5 }, { 0x01A6, 0x0280 }, { 0x01A7, 0x01A8 }, { 0x01A9, 0x0283 }, { 0x01AC, 0x01AD }, { 0x01AE, 0x0288 }, { 0x01AF, 0x01B0 }, { 0x01B1, 0x028A }, { 0x01B2, 0x028B }, { 0x01B3, 0x01B4 }, { 0x01B5, 0x01B6 }, { 0x01B7, 0x0292 }, { 0x01B8, 0x01B9 }, { 0x01BC, 0x01BD }, { 0x01C4, 0x01C6 }, { 0x01C5, 0x01C6 }, { 0x01C7, 0x01C9 }, { 0x01C8, 0x01C9 }, { 0x01CA, 0x01CC }, { 0x01CB, 0x01CC }, { 0x01CD, 0x01CE }, { 0x01CF, 0x01D0 }, { 0x01D1, 0x01D2 }, { 0x01D3, 0x01D4 }, { 0x01D5, 0x01D6 }, { 0x01D7, 0x01D8 }, { 0x01D9, 0x01DA }, { 0x01DB, 0x01DC }, { 0x01DE, 0x01DF }, { 0x01E0, 0x01E1 }, { 0x01E2, 0x01E3 }, { 0x01E4, 0x01E5 }, { 0x01E6, 0x01E7 }, { 0x01E8, 0x01E9 }, { 0x01EA, 0x01EB }, { 0x01EC, 0x01ED }, { 0x01EE, 0x01EF }, { 0x01F1, 0x01F3 }, { 0x01F2, 0x01F3 }, { 0x01F4, 0x01F5 }, { 0x01F6, 0x0195 }, { 0x01F7, 0x01BF }, { 0x01F8, 0x01F9 }, { 0x01FA, 0x01FB }, { 0x01FC, 0x01FD }, { 0x01FE, 0x01FF }, { 0x0200, 0x0201 }, { 0x0202, 0x0203 }, { 0x0204, 0x0205 }, { 0x0206, 0x0207 }, { 0x0208, 0x0209 }, { 0x020A, 0x020B }, { 0x020C, 0x020D }, { 0x020E, 0x020F }, { 0x0210, 0x0211 }, { 0x0212, 0x0213 }, { 0x0214, 0x0215 }, { 0x0216, 0x0217 }, { 0x0218, 0x0219 }, { 0x021A, 0x021B }, { 0x021C, 0x021D }, { 0x021E, 0x021F }, { 0x0220, 0x019E }, { 0x0222, 0x0223 }, { 0x0224, 0x0225 }, { 0x0226, 0x0227 }, { 0x0228, 0x0229 }, { 0x022A, 0x022B }, { 0x022C, 0x022D }, { 0x022E, 0x022F }, { 0x0230, 0x0231 }, { 0x0232, 0x0233 }, { 0x023A, 0x2C65 }, { 0x023B, 0x023C }, { 0x023D, 0x019A }, { 0x023E, 0x2C66 }, { 0x0241, 0x0242 }, { 0x0243, 0x0180 }, { 0x0244, 0x0289 }, { 0x0245, 0x028C }, { 0x0246, 0x0247 }, { 0x0248, 0x0249 }, { 0x024A, 0x024B }, { 0x024C, 0x024D }, { 0x024E, 0x024F }, { 0x0370, 0x0371 }, { 0x0372, 0x0373 }, { 0x0376, 0x0377 }, { 0x037F, 0x03F3 }, { 0x0386, 0x03AC }, { 0x0388, 0x03AD }, { 0x0389, 0x03AE }, { 0x038A, 0x03AF }, { 0x038C, 0x03CC }, { 0x038E, 0x03CD }, { 0x038F, 0x03CE }, { 0x0391, 0x03B1 }, { 0x0392, 0x03B2 }, { 0x0393, 0x03B3 }, { 0x0394, 0x03B4 }, { 0x0395, 0x03B5 }, { 0x0396, 0x03B6 }, { 0x0397, 0x03B7 }, { 0x0398, 0x03B8 }, { 0x0399, 0x03B9 }, { 0x039A, 0x03BA }, { 0x039B, 0x03BB }, { 0x039C, 0x03BC }, { 0x039D, 0x03BD }, { 0x039E, 0x03BE }, { 0x039F, 0x03BF }, { 0x03A0, 0x03C0 }, { 0x03A1, 0x03C1 }, { 0x03A3, 0x03C3 }, { 0x03A4, 0x03C4 }, { 0x03A5, 0x03C5 }, { 0x03A6, 0x03C6 }, { 0x03A7, 0x03C7 }, { 0x03A8, 0x03C8 }, { 0x03A9, 0x03C9 }, { 0x03AA, 0x03CA }, { 0x03AB, 0x03CB }, { 0x03CF, 0x03D7 }, { 0x03D8, 0x03D9 }, { 0x03DA, 0x03DB }, { 0x03DC, 0x03DD }, { 0x03DE, 0x03DF }, { 0x03E0, 0x03E1 }, { 0x03E2, 0x03E3 }, { 0x03E4, 0x03E5 }, { 0x03E6, 0x03E7 }, { 0x03E8, 0x03E9 }, { 0x03EA, 0x03EB }, { 0x03EC, 0x03ED }, { 0x03EE, 0x03EF }, { 0x03F4, 0x03B8 }, { 0x03F7, 0x03F8 }, { 0x03F9, 0x03F2 }, { 0x03FA, 0x03FB }, { 0x03FD, 0x037B }, { 0x03FE, 0x037C }, { 0x03FF, 0x037D }, { 0x0400, 0x0450 }, { 0x0401, 0x0451 }, { 0x0402, 0x0452 }, { 0x0403, 0x0453 }, { 0x0404, 0x0454 }, { 0x0405, 0x0455 }, { 0x0406, 0x0456 }, { 0x0407, 0x0457 }, { 0x0408, 0x0458 }, { 0x0409, 0x0459 }, { 0x040A, 0x045A }, { 0x040B, 0x045B }, { 0x040C, 0x045C }, { 0x040D, 0x045D }, { 0x040E, 0x045E }, { 0x040F, 0x045F }, { 0x0410, 0x0430 }, { 0x0411, 0x0431 }, { 0x0412, 0x0432 }, { 0x0413, 0x0433 }, { 0x0414, 0x0434 }, { 0x0415, 0x0435 }, { 0x0416, 0x0436 }, { 0x0417, 0x0437 }, { 0x0418, 0x0438 }, { 0x0419, 0x0439 }, { 0x041A, 0x043A }, { 0x041B, 0x043B }, { 0x041C, 0x043C }, { 0x041D, 0x043D }, { 0x041E, 0x043E }, { 0x041F, 0x043F }, { 0x0420, 0x0440 }, { 0x0421, 0x0441 }, { 0x0422, 0x0442 }, { 0x0423, 0x0443 }, { 0x0424, 0x0444 }, { 0x0425, 0x0445 }, { 0x0426, 0x0446 }, { 0x0427, 0x0447 }, { 0x0428, 0x0448 }, { 0x0429, 0x0449 }, { 0x042A, 0x044A }, { 0x042B, 0x044B }, { 0x042C, 0x044C }, { 0x042D, 0x044D }, { 0x042E, 0x044E }, { 0x042F, 0x044F }, { 0x0460, 0x0461 }, { 0x0462, 0x0463 }, { 0x0464, 0x0465 }, { 0x0466, 0x0467 }, { 0x0468, 0x0469 }, { 0x046A, 0x046B }, { 0x046C, 0x046D }, { 0x046E, 0x046F }, { 0x0470, 0x0471 }, { 0x0472, 0x0473 }, { 0x0474, 0x0475 }, { 0x0476, 0x0477 }, { 0x0478, 0x0479 }, { 0x047A, 0x047B }, { 0x047C, 0x047D }, { 0x047E, 0x047F }, { 0x0480, 0x0481 }, { 0x048A, 0x048B }, { 0x048C, 0x048D }, { 0x048E, 0x048F }, { 0x0490, 0x0491 }, { 0x0492, 0x0493 }, { 0x0494, 0x0495 }, { 0x0496, 0x0497 }, { 0x0498, 0x0499 }, { 0x049A, 0x049B }, { 0x049C, 0x049D }, { 0x049E, 0x049F }, { 0x04A0, 0x04A1 }, { 0x04A2, 0x04A3 }, { 0x04A4, 0x04A5 }, { 0x04A6, 0x04A7 }, { 0x04A8, 0x04A9 }, { 0x04AA, 0x04AB }, { 0x04AC, 0x04AD }, { 0x04AE, 0x04AF }, { 0x04B0, 0x04B1 }, { 0x04B2, 0x04B3 }, { 0x04B4, 0x04B5 }, { 0x04B6, 0x04B7 }, { 0x04B8, 0x04B9 }, { 0x04BA, 0x04BB }, { 0x04BC, 0x04BD }, { 0x04BE, 0x04BF }, { 0x04C0, 0x04CF }, { 0x04C1, 0x04C2 }, { 0x04C3, 0x04C4 }, { 0x04C5, 0x04C6 }, { 0x04C7, 0x04C8 }, { 0x04C9, 0x04CA }, { 0x04CB, 0x04CC }, { 0x04CD, 0x04CE }, { 0x04D0, 0x04D1 }, { 0x04D2, 0x04D3 }, { 0x04D4, 0x04D5 }, { 0x04D6, 0x04D7 }, { 0x04D8, 0x04D9 }, { 0x04DA, 0x04DB }, { 0x04DC, 0x04DD }, { 0x04DE, 0x04DF }, { 0x04E0, 0x04E1 }, { 0x04E2, 0x04E3 }, { 0x04E4, 0x04E5 }, { 0x04E6, 0x04E7 }, { 0x04E8, 0x04E9 }, { 0x04EA, 0x04EB }, { 0x04EC, 0x04ED }, { 0x04EE, 0x04EF }, { 0x04F0, 0x04F1 }, { 0x04F2, 0x04F3 }, { 0x04F4, 0x04F5 }, { 0x04F6, 0x04F7 }, { 0x04F8, 0x04F9 }, { 0x04FA, 0x04FB }, { 0x04FC, 0x04FD }, { 0x04FE, 0x04FF }, { 0x0500, 0x0501 }, { 0x0502, 0x0503 }, { 0x0504, 0x0505 }, { 0x0506, 0x0507 }, { 0x0508, 0x0509 }, { 0x050A, 0x050B }, { 0x050C, 0x050D }, { 0x050E, 0x050F }, { 0x0510, 0x0511 }, { 0x0512, 0x0513 }, { 0x0514, 0x0515 }, { 0x0516, 0x0517 }, { 0x0518, 0x0519 }, { 0x051A, 0x051B }, { 0x051C, 0x051D }, { 0x051E, 0x051F }, { 0x0520, 0x0521 }, { 0x0522, 0x0523 }, { 0x0524, 0x0525 }, { 0x0526, 0x0527 }, { 0x0528, 0x0529 }, { 0x052A, 0x052B }, { 0x052C, 0x052D }, { 0x052E, 0x052F }, { 0x0531, 0x0561 }, { 0x0532, 0x0562 }, { 0x0533, 0x0563 }, { 0x0534, 0x0564 }, { 0x0535, 0x0565 }, { 0x0536, 0x0566 }, { 0x0537, 0x0567 }, { 0x0538, 0x0568 }, { 0x0539, 0x0569 }, { 0x053A, 0x056A }, { 0x053B, 0x056B }, { 0x053C, 0x056C }, { 0x053D, 0x056D }, { 0x053E, 0x056E }, { 0x053F, 0x056F }, { 0x0540, 0x0570 }, { 0x0541, 0x0571 }, { 0x0542, 0x0572 }, { 0x0543, 0x0573 }, { 0x0544, 0x0574 }, { 0x0545, 0x0575 }, { 0x0546, 0x0576 }, { 0x0547, 0x0577 }, { 0x0548, 0x0578 }, { 0x0549, 0x0579 }, { 0x054A, 0x057A }, { 0x054B, 0x057B }, { 0x054C, 0x057C }, { 0x054D, 0x057D }, { 0x054E, 0x057E }, { 0x054F, 0x057F }, { 0x0550, 0x0580 }, { 0x0551, 0x0581 }, { 0x0552, 0x0582 }, { 0x0553, 0x0583 }, { 0x0554, 0x0584 }, { 0x0555, 0x0585 }, { 0x0556, 0x0586 }, { 0x10A0, 0x2D00 }, { 0x10A1, 0x2D01 }, { 0x10A2, 0x2D02 }, { 0x10A3, 0x2D03 }, { 0x10A4, 0x2D04 }, { 0x10A5, 0x2D05 }, { 0x10A6, 0x2D06 }, { 0x10A7, 0x2D07 }, { 0x10A8, 0x2D08 }, { 0x10A9, 0x2D09 }, { 0x10AA, 0x2D0A }, { 0x10AB, 0x2D0B }, { 0x10AC, 0x2D0C }, { 0x10AD, 0x2D0D }, { 0x10AE, 0x2D0E }, { 0x10AF, 0x2D0F }, { 0x10B0, 0x2D10 }, { 0x10B1, 0x2D11 }, { 0x10B2, 0x2D12 }, { 0x10B3, 0x2D13 }, { 0x10B4, 0x2D14 }, { 0x10B5, 0x2D15 }, { 0x10B6, 0x2D16 }, { 0x10B7, 0x2D17 }, { 0x10B8, 0x2D18 }, { 0x10B9, 0x2D19 }, { 0x10BA, 0x2D1A }, { 0x10BB, 0x2D1B }, { 0x10BC, 0x2D1C }, { 0x10BD, 0x2D1D }, { 0x10BE, 0x2D1E }, { 0x10BF, 0x2D1F }, { 0x10C0, 0x2D20 }, { 0x10C1, 0x2D21 }, { 0x10C2, 0x2D22 }, { 0x10C3, 0x2D23 }, { 0x10C4, 0x2D24 }, { 0x10C5, 0x2D25 }, { 0x10C7, 0x2D27 }, { 0x10CD, 0x2D2D }, { 0x13A0, 0xAB70 }, { 0x13A1, 0xAB71 }, { 0x13A2, 0xAB72 }, { 0x13A3, 0xAB73 }, { 0x13A4, 0xAB74 }, { 0x13A5, 0xAB75 }, { 0x13A6, 0xAB76 }, { 0x13A7, 0xAB77 }, { 0x13A8, 0xAB78 }, { 0x13A9, 0xAB79 }, { 0x13AA, 0xAB7A }, { 0x13AB, 0xAB7B }, { 0x13AC, 0xAB7C }, { 0x13AD, 0xAB7D }, { 0x13AE, 0xAB7E }, { 0x13AF, 0xAB7F }, { 0x13B0, 0xAB80 }, { 0x13B1, 0xAB81 }, { 0x13B2, 0xAB82 }, { 0x13B3, 0xAB83 }, { 0x13B4, 0xAB84 }, { 0x13B5, 0xAB85 }, { 0x13B6, 0xAB86 }, { 0x13B7, 0xAB87 }, { 0x13B8, 0xAB88 }, { 0x13B9, 0xAB89 }, { 0x13BA, 0xAB8A }, { 0x13BB, 0xAB8B }, { 0x13BC, 0xAB8C }, { 0x13BD, 0xAB8D }, { 0x13BE, 0xAB8E }, { 0x13BF, 0xAB8F }, { 0x13C0, 0xAB90 }, { 0x13C1, 0xAB91 }, { 0x13C2, 0xAB92 }, { 0x13C3, 0xAB93 }, { 0x13C4, 0xAB94 }, { 0x13C5, 0xAB95 }, { 0x13C6, 0xAB96 }, { 0x13C7, 0xAB97 }, { 0x13C8, 0xAB98 }, { 0x13C9, 0xAB99 }, { 0x13CA, 0xAB9A }, { 0x13CB, 0xAB9B }, { 0x13CC, 0xAB9C }, { 0x13CD, 0xAB9D }, { 0x13CE, 0xAB9E }, { 0x13CF, 0xAB9F }, { 0x13D0, 0xABA0 }, { 0x13D1, 0xABA1 }, { 0x13D2, 0xABA2 }, { 0x13D3, 0xABA3 }, { 0x13D4, 0xABA4 }, { 0x13D5, 0xABA5 }, { 0x13D6, 0xABA6 }, { 0x13D7, 0xABA7 }, { 0x13D8, 0xABA8 }, { 0x13D9, 0xABA9 }, { 0x13DA, 0xABAA }, { 0x13DB, 0xABAB }, { 0x13DC, 0xABAC }, { 0x13DD, 0xABAD }, { 0x13DE, 0xABAE }, { 0x13DF, 0xABAF }, { 0x13E0, 0xABB0 }, { 0x13E1, 0xABB1 }, { 0x13E2, 0xABB2 }, { 0x13E3, 0xABB3 }, { 0x13E4, 0xABB4 }, { 0x13E5, 0xABB5 }, { 0x13E6, 0xABB6 }, { 0x13E7, 0xABB7 }, { 0x13E8, 0xABB8 }, { 0x13E9, 0xABB9 }, { 0x13EA, 0xABBA }, { 0x13EB, 0xABBB }, { 0x13EC, 0xABBC }, { 0x13ED, 0xABBD }, { 0x13EE, 0xABBE }, { 0x13EF, 0xABBF }, { 0x13F0, 0x13F8 }, { 0x13F1, 0x13F9 }, { 0x13F2, 0x13FA }, { 0x13F3, 0x13FB }, { 0x13F4, 0x13FC }, { 0x13F5, 0x13FD }, { 0x1C90, 0x10D0 }, { 0x1C91, 0x10D1 }, { 0x1C92, 0x10D2 }, { 0x1C93, 0x10D3 }, { 0x1C94, 0x10D4 }, { 0x1C95, 0x10D5 }, { 0x1C96, 0x10D6 }, { 0x1C97, 0x10D7 }, { 0x1C98, 0x10D8 }, { 0x1C99, 0x10D9 }, { 0x1C9A, 0x10DA }, { 0x1C9B, 0x10DB }, { 0x1C9C, 0x10DC }, { 0x1C9D, 0x10DD }, { 0x1C9E, 0x10DE }, { 0x1C9F, 0x10DF }, { 0x1CA0, 0x10E0 }, { 0x1CA1, 0x10E1 }, { 0x1CA2, 0x10E2 }, { 0x1CA3, 0x10E3 }, { 0x1CA4, 0x10E4 }, { 0x1CA5, 0x10E5 }, { 0x1CA6, 0x10E6 }, { 0x1CA7, 0x10E7 }, { 0x1CA8, 0x10E8 }, { 0x1CA9, 0x10E9 }, { 0x1CAA, 0x10EA }, { 0x1CAB, 0x10EB }, { 0x1CAC, 0x10EC }, { 0x1CAD, 0x10ED }, { 0x1CAE, 0x10EE }, { 0x1CAF, 0x10EF }, { 0x1CB0, 0x10F0 }, { 0x1CB1, 0x10F1 }, { 0x1CB2, 0x10F2 }, { 0x1CB3, 0x10F3 }, { 0x1CB4, 0x10F4 }, { 0x1CB5, 0x10F5 }, { 0x1CB6, 0x10F6 }, { 0x1CB7, 0x10F7 }, { 0x1CB8, 0x10F8 }, { 0x1CB9, 0x10F9 }, { 0x1CBA, 0x10FA }, { 0x1CBD, 0x10FD }, { 0x1CBE, 0x10FE }, { 0x1CBF, 0x10FF }, { 0x1E00, 0x1E01 }, { 0x1E02, 0x1E03 }, { 0x1E04, 0x1E05 }, { 0x1E06, 0x1E07 }, { 0x1E08, 0x1E09 }, { 0x1E0A, 0x1E0B }, { 0x1E0C, 0x1E0D }, { 0x1E0E, 0x1E0F }, { 0x1E10, 0x1E11 }, { 0x1E12, 0x1E13 }, { 0x1E14, 0x1E15 }, { 0x1E16, 0x1E17 }, { 0x1E18, 0x1E19 }, { 0x1E1A, 0x1E1B }, { 0x1E1C, 0x1E1D }, { 0x1E1E, 0x1E1F }, { 0x1E20, 0x1E21 }, { 0x1E22, 0x1E23 }, { 0x1E24, 0x1E25 }, { 0x1E26, 0x1E27 }, { 0x1E28, 0x1E29 }, { 0x1E2A, 0x1E2B }, { 0x1E2C, 0x1E2D }, { 0x1E2E, 0x1E2F }, { 0x1E30, 0x1E31 }, { 0x1E32, 0x1E33 }, { 0x1E34, 0x1E35 }, { 0x1E36, 0x1E37 }, { 0x1E38, 0x1E39 }, { 0x1E3A, 0x1E3B }, { 0x1E3C, 0x1E3D }, { 0x1E3E, 0x1E3F }, { 0x1E40, 0x1E41 }, { 0x1E42, 0x1E43 }, { 0x1E44, 0x1E45 }, { 0x1E46, 0x1E47 }, { 0x1E48, 0x1E49 }, { 0x1E4A, 0x1E4B }, { 0x1E4C, 0x1E4D }, { 0x1E4E, 0x1E4F }, { 0x1E50, 0x1E51 }, { 0x1E52, 0x1E53 }, { 0x1E54, 0x1E55 }, { 0x1E56, 0x1E57 }, { 0x1E58, 0x1E59 }, { 0x1E5A, 0x1E5B }, { 0x1E5C, 0x1E5D }, { 0x1E5E, 0x1E5F }, { 0x1E60, 0x1E61 }, { 0x1E62, 0x1E63 }, { 0x1E64, 0x1E65 }, { 0x1E66, 0x1E67 }, { 0x1E68, 0x1E69 }, { 0x1E6A, 0x1E6B }, { 0x1E6C, 0x1E6D }, { 0x1E6E, 0x1E6F }, { 0x1E70, 0x1E71 }, { 0x1E72, 0x1E73 }, { 0x1E74, 0x1E75 }, { 0x1E76, 0x1E77 }, { 0x1E78, 0x1E79 }, { 0x1E7A, 0x1E7B }, { 0x1E7C, 0x1E7D }, { 0x1E7E, 0x1E7F }, { 0x1E80, 0x1E81 }, { 0x1E82, 0x1E83 }, { 0x1E84, 0x1E85 }, { 0x1E86, 0x1E87 }, { 0x1E88, 0x1E89 }, { 0x1E8A, 0x1E8B }, { 0x1E8C, 0x1E8D }, { 0x1E8E, 0x1E8F }, { 0x1E90, 0x1E91 }, { 0x1E92, 0x1E93 }, { 0x1E94, 0x1E95 }, { 0x1E9E, 0x00DF }, { 0x1EA0, 0x1EA1 }, { 0x1EA2, 0x1EA3 }, { 0x1EA4, 0x1EA5 }, { 0x1EA6, 0x1EA7 }, { 0x1EA8, 0x1EA9 }, { 0x1EAA, 0x1EAB }, { 0x1EAC, 0x1EAD }, { 0x1EAE, 0x1EAF }, { 0x1EB0, 0x1EB1 }, { 0x1EB2, 0x1EB3 }, { 0x1EB4, 0x1EB5 }, { 0x1EB6, 0x1EB7 }, { 0x1EB8, 0x1EB9 }, { 0x1EBA, 0x1EBB }, { 0x1EBC, 0x1EBD }, { 0x1EBE, 0x1EBF }, { 0x1EC0, 0x1EC1 }, { 0x1EC2, 0x1EC3 }, { 0x1EC4, 0x1EC5 }, { 0x1EC6, 0x1EC7 }, { 0x1EC8, 0x1EC9 }, { 0x1ECA, 0x1ECB }, { 0x1ECC, 0x1ECD }, { 0x1ECE, 0x1ECF }, { 0x1ED0, 0x1ED1 }, { 0x1ED2, 0x1ED3 }, { 0x1ED4, 0x1ED5 }, { 0x1ED6, 0x1ED7 }, { 0x1ED8, 0x1ED9 }, { 0x1EDA, 0x1EDB }, { 0x1EDC, 0x1EDD }, { 0x1EDE, 0x1EDF }, { 0x1EE0, 0x1EE1 }, { 0x1EE2, 0x1EE3 }, { 0x1EE4, 0x1EE5 }, { 0x1EE6, 0x1EE7 }, { 0x1EE8, 0x1EE9 }, { 0x1EEA, 0x1EEB }, { 0x1EEC, 0x1EED }, { 0x1EEE, 0x1EEF }, { 0x1EF0, 0x1EF1 }, { 0x1EF2, 0x1EF3 }, { 0x1EF4, 0x1EF5 }, { 0x1EF6, 0x1EF7 }, { 0x1EF8, 0x1EF9 }, { 0x1EFA, 0x1EFB }, { 0x1EFC, 0x1EFD }, { 0x1EFE, 0x1EFF }, { 0x1F08, 0x1F00 }, { 0x1F09, 0x1F01 }, { 0x1F0A, 0x1F02 }, { 0x1F0B, 0x1F03 }, { 0x1F0C, 0x1F04 }, { 0x1F0D, 0x1F05 }, { 0x1F0E, 0x1F06 }, { 0x1F0F, 0x1F07 }, { 0x1F18, 0x1F10 }, { 0x1F19, 0x1F11 }, { 0x1F1A, 0x1F12 }, { 0x1F1B, 0x1F13 }, { 0x1F1C, 0x1F14 }, { 0x1F1D, 0x1F15 }, { 0x1F28, 0x1F20 }, { 0x1F29, 0x1F21 }, { 0x1F2A, 0x1F22 }, { 0x1F2B, 0x1F23 }, { 0x1F2C, 0x1F24 }, { 0x1F2D, 0x1F25 }, { 0x1F2E, 0x1F26 }, { 0x1F2F, 0x1F27 }, { 0x1F38, 0x1F30 }, { 0x1F39, 0x1F31 }, { 0x1F3A, 0x1F32 }, { 0x1F3B, 0x1F33 }, { 0x1F3C, 0x1F34 }, { 0x1F3D, 0x1F35 }, { 0x1F3E, 0x1F36 }, { 0x1F3F, 0x1F37 }, { 0x1F48, 0x1F40 }, { 0x1F49, 0x1F41 }, { 0x1F4A, 0x1F42 }, { 0x1F4B, 0x1F43 }, { 0x1F4C, 0x1F44 }, { 0x1F4D, 0x1F45 }, { 0x1F59, 0x1F51 }, { 0x1F5B, 0x1F53 }, { 0x1F5D, 0x1F55 }, { 0x1F5F, 0x1F57 }, { 0x1F68, 0x1F60 }, { 0x1F69, 0x1F61 }, { 0x1F6A, 0x1F62 }, { 0x1F6B, 0x1F63 }, { 0x1F6C, 0x1F64 }, { 0x1F6D, 0x1F65 }, { 0x1F6E, 0x1F66 }, { 0x1F6F, 0x1F67 }, { 0x1F88, 0x1F80 }, { 0x1F89, 0x1F81 }, { 0x1F8A, 0x1F82 }, { 0x1F8B, 0x1F83 }, { 0x1F8C, 0x1F84 }, { 0x1F8D, 0x1F85 }, { 0x1F8E, 0x1F86 }, { 0x1F8F, 0x1F87 }, { 0x1F98, 0x1F90 }, { 0x1F99, 0x1F91 }, { 0x1F9A, 0x1F92 }, { 0x1F9B, 0x1F93 }, { 0x1F9C, 0x1F94 }, { 0x1F9D, 0x1F95 }, { 0x1F9E, 0x1F96 }, { 0x1F9F, 0x1F97 }, { 0x1FA8, 0x1FA0 }, { 0x1FA9, 0x1FA1 }, { 0x1FAA, 0x1FA2 }, { 0x1FAB, 0x1FA3 }, { 0x1FAC, 0x1FA4 }, { 0x1FAD, 0x1FA5 }, { 0x1FAE, 0x1FA6 }, { 0x1FAF, 0x1FA7 }, { 0x1FB8, 0x1FB0 }, { 0x1FB9, 0x1FB1 }, { 0x1FBA, 0x1F70 }, { 0x1FBB, 0x1F71 }, { 0x1FBC, 0x1FB3 }, { 0x1FC8, 0x1F72 }, { 0x1FC9, 0x1F73 }, { 0x1FCA, 0x1F74 }, { 0x1FCB, 0x1F75 }, { 0x1FCC, 0x1FC3 }, { 0x1FD8, 0x1FD0 }, { 0x1FD9, 0x1FD1 }, { 0x1FDA, 0x1F76 }, { 0x1FDB, 0x1F77 }, { 0x1FE8, 0x1FE0 }, { 0x1FE9, 0x1FE1 }, { 0x1FEA, 0x1F7A }, { 0x1FEB, 0x1F7B }, { 0x1FEC, 0x1FE5 }, { 0x1FF8, 0x1F78 }, { 0x1FF9, 0x1F79 }, { 0x1FFA, 0x1F7C }, { 0x1FFB, 0x1F7D }, { 0x1FFC, 0x1FF3 }, { 0x2126, 0x03C9 }, { 0x212A, 0x006B }, { 0x212B, 0x00E5 }, { 0x2132, 0x214E }, { 0x2160, 0x2170 }, { 0x2161, 0x2171 }, { 0x2162, 0x2172 }, { 0x2163, 0x2173 }, { 0x2164, 0x2174 }, { 0x2165, 0x2175 }, { 0x2166, 0x2176 }, { 0x2167, 0x2177 }, { 0x2168, 0x2178 }, { 0x2169, 0x2179 }, { 0x216A, 0x217A }, { 0x216B, 0x217B }, { 0x216C, 0x217C }, { 0x216D, 0x217D }, { 0x216E, 0x217E }, { 0x216F, 0x217F }, { 0x2183, 0x2184 }, { 0x24B6, 0x24D0 }, { 0x24B7, 0x24D1 }, { 0x24B8, 0x24D2 }, { 0x24B9, 0x24D3 }, { 0x24BA, 0x24D4 }, { 0x24BB, 0x24D5 }, { 0x24BC, 0x24D6 }, { 0x24BD, 0x24D7 }, { 0x24BE, 0x24D8 }, { 0x24BF, 0x24D9 }, { 0x24C0, 0x24DA }, { 0x24C1, 0x24DB }, { 0x24C2, 0x24DC }, { 0x24C3, 0x24DD }, { 0x24C4, 0x24DE }, { 0x24C5, 0x24DF }, { 0x24C6, 0x24E0 }, { 0x24C7, 0x24E1 }, { 0x24C8, 0x24E2 }, { 0x24C9, 0x24E3 }, { 0x24CA, 0x24E4 }, { 0x24CB, 0x24E5 }, { 0x24CC, 0x24E6 }, { 0x24CD, 0x24E7 }, { 0x24CE, 0x24E8 }, { 0x24CF, 0x24E9 }, { 0x2C00, 0x2C30 }, { 0x2C01, 0x2C31 }, { 0x2C02, 0x2C32 }, { 0x2C03, 0x2C33 }, { 0x2C04, 0x2C34 }, { 0x2C05, 0x2C35 }, { 0x2C06, 0x2C36 }, { 0x2C07, 0x2C37 }, { 0x2C08, 0x2C38 }, { 0x2C09, 0x2C39 }, { 0x2C0A, 0x2C3A }, { 0x2C0B, 0x2C3B }, { 0x2C0C, 0x2C3C }, { 0x2C0D, 0x2C3D }, { 0x2C0E, 0x2C3E }, { 0x2C0F, 0x2C3F }, { 0x2C10, 0x2C40 }, { 0x2C11, 0x2C41 }, { 0x2C12, 0x2C42 }, { 0x2C13, 0x2C43 }, { 0x2C14, 0x2C44 }, { 0x2C15, 0x2C45 }, { 0x2C16, 0x2C46 }, { 0x2C17, 0x2C47 }, { 0x2C18, 0x2C48 }, { 0x2C19, 0x2C49 }, { 0x2C1A, 0x2C4A }, { 0x2C1B, 0x2C4B }, { 0x2C1C, 0x2C4C }, { 0x2C1D, 0x2C4D }, { 0x2C1E, 0x2C4E }, { 0x2C1F, 0x2C4F }, { 0x2C20, 0x2C50 }, { 0x2C21, 0x2C51 }, { 0x2C22, 0x2C52 }, { 0x2C23, 0x2C53 }, { 0x2C24, 0x2C54 }, { 0x2C25, 0x2C55 }, { 0x2C26, 0x2C56 }, { 0x2C27, 0x2C57 }, { 0x2C28, 0x2C58 }, { 0x2C29, 0x2C59 }, { 0x2C2A, 0x2C5A }, { 0x2C2B, 0x2C5B }, { 0x2C2C, 0x2C5C }, { 0x2C2D, 0x2C5D }, { 0x2C2E, 0x2C5E }, { 0x2C2F, 0x2C5F }, { 0x2C60, 0x2C61 }, { 0x2C62, 0x026B }, { 0x2C63, 0x1D7D }, { 0x2C64, 0x027D }, { 0x2C67, 0x2C68 }, { 0x2C69, 0x2C6A }, { 0x2C6B, 0x2C6C }, { 0x2C6D, 0x0251 }, { 0x2C6E, 0x0271 }, { 0x2C6F, 0x0250 }, { 0x2C70, 0x0252 }, { 0x2C72, 0x2C73 }, { 0x2C75, 0x2C76 }, { 0x2C7E, 0x023F }, { 0x2C7F, 0x0240 }, { 0x2C80, 0x2C81 }, { 0x2C82, 0x2C83 }, { 0x2C84, 0x2C85 }, { 0x2C86, 0x2C87 }, { 0x2C88, 0x2C89 }, { 0x2C8A, 0x2C8B }, { 0x2C8C, 0x2C8D }, { 0x2C8E, 0x2C8F }, { 0x2C90, 0x2C91 }, { 0x2C92, 0x2C93 }, { 0x2C94, 0x2C95 }, { 0x2C96, 0x2C97 }, { 0x2C98, 0x2C99 }, { 0x2C9A, 0x2C9B }, { 0x2C9C, 0x2C9D }, { 0x2C9E, 0x2C9F }, { 0x2CA0, 0x2CA1 }, { 0x2CA2, 0x2CA3 }, { 0x2CA4, 0x2CA5 }, { 0x2CA6, 0x2CA7 }, { 0x2CA8, 0x2CA9 }, { 0x2CAA, 0x2CAB }, { 0x2CAC, 0x2CAD }, { 0x2CAE, 0x2CAF }, { 0x2CB0, 0x2CB1 }, { 0x2CB2, 0x2CB3 }, { 0x2CB4, 0x2CB5 }, { 0x2CB6, 0x2CB7 }, { 0x2CB8, 0x2CB9 }, { 0x2CBA, 0x2CBB }, { 0x2CBC, 0x2CBD }, { 0x2CBE, 0x2CBF }, { 0x2CC0, 0x2CC1 }, { 0x2CC2, 0x2CC3 }, { 0x2CC4, 0x2CC5 }, { 0x2CC6, 0x2CC7 }, { 0x2CC8, 0x2CC9 }, { 0x2CCA, 0x2CCB }, { 0x2CCC, 0x2CCD }, { 0x2CCE, 0x2CCF }, { 0x2CD0, 0x2CD1 }, { 0x2CD2, 0x2CD3 }, { 0x2CD4, 0x2CD5 }, { 0x2CD6, 0x2CD7 }, { 0x2CD8, 0x2CD9 }, { 0x2CDA, 0x2CDB }, { 0x2CDC, 0x2CDD }, { 0x2CDE, 0x2CDF }, { 0x2CE0, 0x2CE1 }, { 0x2CE2, 0x2CE3 }, { 0x2CEB, 0x2CEC }, { 0x2CED, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0xA640, 0xA641 }, { 0xA642, 0xA643 }, { 0xA644, 0xA645 }, { 0xA646, 0xA647 }, { 0xA648, 0xA649 }, { 0xA64A, 0xA64B }, { 0xA64C, 0xA64D }, { 0xA64E, 0xA64F }, { 0xA650, 0xA651 }, { 0xA652, 0xA653 }, { 0xA654, 0xA655 }, { 0xA656, 0xA657 }, { 0xA658, 0xA659 }, { 0xA65A, 0xA65B }, { 0xA65C, 0xA65D }, { 0xA65E, 0xA65F }, { 0xA660, 0xA661 }, { 0xA662, 0xA663 }, { 0xA664, 0xA665 }, { 0xA666, 0xA667 }, { 0xA668, 0xA669 }, { 0xA66A, 0xA66B }, { 0xA66C, 0xA66D }, { 0xA680, 0xA681 }, { 0xA682, 0xA683 }, { 0xA684, 0xA685 }, { 0xA686, 0xA687 }, { 0xA688, 0xA689 }, { 0xA68A, 0xA68B }, { 0xA68C, 0xA68D }, { 0xA68E, 0xA68F }, { 0xA690, 0xA691 }, { 0xA692, 0xA693 }, { 0xA694, 0xA695 }, { 0xA696, 0xA697 }, { 0xA698, 0xA699 }, { 0xA69A, 0xA69B }, { 0xA722, 0xA723 }, { 0xA724, 0xA725 }, { 0xA726, 0xA727 }, { 0xA728, 0xA729 }, { 0xA72A, 0xA72B }, { 0xA72C, 0xA72D }, { 0xA72E, 0xA72F }, { 0xA732, 0xA733 }, { 0xA734, 0xA735 }, { 0xA736, 0xA737 }, { 0xA738, 0xA739 }, { 0xA73A, 0xA73B }, { 0xA73C, 0xA73D }, { 0xA73E, 0xA73F }, { 0xA740, 0xA741 }, { 0xA742, 0xA743 }, { 0xA744, 0xA745 }, { 0xA746, 0xA747 }, { 0xA748, 0xA749 }, { 0xA74A, 0xA74B }, { 0xA74C, 0xA74D }, { 0xA74E, 0xA74F }, { 0xA750, 0xA751 }, { 0xA752, 0xA753 }, { 0xA754, 0xA755 }, { 0xA756, 0xA757 }, { 0xA758, 0xA759 }, { 0xA75A, 0xA75B }, { 0xA75C, 0xA75D }, { 0xA75E, 0xA75F }, { 0xA760, 0xA761 }, { 0xA762, 0xA763 }, { 0xA764, 0xA765 }, { 0xA766, 0xA767 }, { 0xA768, 0xA769 }, { 0xA76A, 0xA76B }, { 0xA76C, 0xA76D }, { 0xA76E, 0xA76F }, { 0xA779, 0xA77A }, { 0xA77B, 0xA77C }, { 0xA77D, 0x1D79 }, { 0xA77E, 0xA77F }, { 0xA780, 0xA781 }, { 0xA782, 0xA783 }, { 0xA784, 0xA785 }, { 0xA786, 0xA787 }, { 0xA78B, 0xA78C }, { 0xA78D, 0x0265 }, { 0xA790, 0xA791 }, { 0xA792, 0xA793 }, { 0xA796, 0xA797 }, { 0xA798, 0xA799 }, { 0xA79A, 0xA79B }, { 0xA79C, 0xA79D }, { 0xA79E, 0xA79F }, { 0xA7A0, 0xA7A1 }, { 0xA7A2, 0xA7A3 }, { 0xA7A4, 0xA7A5 }, { 0xA7A6, 0xA7A7 }, { 0xA7A8, 0xA7A9 }, { 0xA7AA, 0x0266 }, { 0xA7AB, 0x025C }, { 0xA7AC, 0x0261 }, { 0xA7AD, 0x026C }, { 0xA7AE, 0x026A }, { 0xA7B0, 0x029E }, { 0xA7B1, 0x0287 }, { 0xA7B2, 0x029D }, { 0xA7B3, 0xAB53 }, { 0xA7B4, 0xA7B5 }, { 0xA7B6, 0xA7B7 }, { 0xA7B8, 0xA7B9 }, { 0xA7BA, 0xA7BB }, { 0xA7BC, 0xA7BD }, { 0xA7BE, 0xA7BF }, { 0xA7C0, 0xA7C1 }, { 0xA7C2, 0xA7C3 }, { 0xA7C4, 0xA794 }, { 0xA7C5, 0x0282 }, { 0xA7C6, 0x1D8E }, { 0xA7C7, 0xA7C8 }, { 0xA7C9, 0xA7CA }, { 0xA7D0, 0xA7D1 }, { 0xA7D6, 0xA7D7 }, { 0xA7D8, 0xA7D9 }, { 0xA7F5, 0xA7F6 }, { 0xFF21, 0xFF41 }, { 0xFF22, 0xFF42 }, { 0xFF23, 0xFF43 }, { 0xFF24, 0xFF44 }, { 0xFF25, 0xFF45 }, { 0xFF26, 0xFF46 }, { 0xFF27, 0xFF47 }, { 0xFF28, 0xFF48 }, { 0xFF29, 0xFF49 }, { 0xFF2A, 0xFF4A }, { 0xFF2B, 0xFF4B }, { 0xFF2C, 0xFF4C }, { 0xFF2D, 0xFF4D }, { 0xFF2E, 0xFF4E }, { 0xFF2F, 0xFF4F }, { 0xFF30, 0xFF50 }, { 0xFF31, 0xFF51 }, { 0xFF32, 0xFF52 }, { 0xFF33, 0xFF53 }, { 0xFF34, 0xFF54 }, { 0xFF35, 0xFF55 }, { 0xFF36, 0xFF56 }, { 0xFF37, 0xFF57 }, { 0xFF38, 0xFF58 }, { 0xFF39, 0xFF59 }, { 0xFF3A, 0xFF5A }, { 0x10400, 0x10428 }, { 0x10401, 0x10429 }, { 0x10402, 0x1042A }, { 0x10403, 0x1042B }, { 0x10404, 0x1042C }, { 0x10405, 0x1042D }, { 0x10406, 0x1042E }, { 0x10407, 0x1042F }, { 0x10408, 0x10430 }, { 0x10409, 0x10431 }, { 0x1040A, 0x10432 }, { 0x1040B, 0x10433 }, { 0x1040C, 0x10434 }, { 0x1040D, 0x10435 }, { 0x1040E, 0x10436 }, { 0x1040F, 0x10437 }, { 0x10410, 0x10438 }, { 0x10411, 0x10439 }, { 0x10412, 0x1043A }, { 0x10413, 0x1043B }, { 0x10414, 0x1043C }, { 0x10415, 0x1043D }, { 0x10416, 0x1043E }, { 0x10417, 0x1043F }, { 0x10418, 0x10440 }, { 0x10419, 0x10441 }, { 0x1041A, 0x10442 }, { 0x1041B, 0x10443 }, { 0x1041C, 0x10444 }, { 0x1041D, 0x10445 }, { 0x1041E, 0x10446 }, { 0x1041F, 0x10447 }, { 0x10420, 0x10448 }, { 0x10421, 0x10449 }, { 0x10422, 0x1044A }, { 0x10423, 0x1044B }, { 0x10424, 0x1044C }, { 0x10425, 0x1044D }, { 0x10426, 0x1044E }, { 0x10427, 0x1044F }, { 0x104B0, 0x104D8 }, { 0x104B1, 0x104D9 }, { 0x104B2, 0x104DA }, { 0x104B3, 0x104DB }, { 0x104B4, 0x104DC }, { 0x104B5, 0x104DD }, { 0x104B6, 0x104DE }, { 0x104B7, 0x104DF }, { 0x104B8, 0x104E0 }, { 0x104B9, 0x104E1 }, { 0x104BA, 0x104E2 }, { 0x104BB, 0x104E3 }, { 0x104BC, 0x104E4 }, { 0x104BD, 0x104E5 }, { 0x104BE, 0x104E6 }, { 0x104BF, 0x104E7 }, { 0x104C0, 0x104E8 }, { 0x104C1, 0x104E9 }, { 0x104C2, 0x104EA }, { 0x104C3, 0x104EB }, { 0x104C4, 0x104EC }, { 0x104C5, 0x104ED }, { 0x104C6, 0x104EE }, { 0x104C7, 0x104EF }, { 0x104C8, 0x104F0 }, { 0x104C9, 0x104F1 }, { 0x104CA, 0x104F2 }, { 0x104CB, 0x104F3 }, { 0x104CC, 0x104F4 }, { 0x104CD, 0x104F5 }, { 0x104CE, 0x104F6 }, { 0x104CF, 0x104F7 }, { 0x104D0, 0x104F8 }, { 0x104D1, 0x104F9 }, { 0x104D2, 0x104FA }, { 0x104D3, 0x104FB }, { 0x10570, 0x10597 }, { 0x10571, 0x10598 }, { 0x10572, 0x10599 }, { 0x10573, 0x1059A }, { 0x10574, 0x1059B }, { 0x10575, 0x1059C }, { 0x10576, 0x1059D }, { 0x10577, 0x1059E }, { 0x10578, 0x1059F }, { 0x10579, 0x105A0 }, { 0x1057A, 0x105A1 }, { 0x1057C, 0x105A3 }, { 0x1057D, 0x105A4 }, { 0x1057E, 0x105A5 }, { 0x1057F, 0x105A6 }, { 0x10580, 0x105A7 }, { 0x10581, 0x105A8 }, { 0x10582, 0x105A9 }, { 0x10583, 0x105AA }, { 0x10584, 0x105AB }, { 0x10585, 0x105AC }, { 0x10586, 0x105AD }, { 0x10587, 0x105AE }, { 0x10588, 0x105AF }, { 0x10589, 0x105B0 }, { 0x1058A, 0x105B1 }, { 0x1058C, 0x105B3 }, { 0x1058D, 0x105B4 }, { 0x1058E, 0x105B5 }, { 0x1058F, 0x105B6 }, { 0x10590, 0x105B7 }, { 0x10591, 0x105B8 }, { 0x10592, 0x105B9 }, { 0x10594, 0x105BB }, { 0x10595, 0x105BC }, { 0x10C80, 0x10CC0 }, { 0x10C81, 0x10CC1 }, { 0x10C82, 0x10CC2 }, { 0x10C83, 0x10CC3 }, { 0x10C84, 0x10CC4 }, { 0x10C85, 0x10CC5 }, { 0x10C86, 0x10CC6 }, { 0x10C87, 0x10CC7 }, { 0x10C88, 0x10CC8 }, { 0x10C89, 0x10CC9 }, { 0x10C8A, 0x10CCA }, { 0x10C8B, 0x10CCB }, { 0x10C8C, 0x10CCC }, { 0x10C8D, 0x10CCD }, { 0x10C8E, 0x10CCE }, { 0x10C8F, 0x10CCF }, { 0x10C90, 0x10CD0 }, { 0x10C91, 0x10CD1 }, { 0x10C92, 0x10CD2 }, { 0x10C93, 0x10CD3 }, { 0x10C94, 0x10CD4 }, { 0x10C95, 0x10CD5 }, { 0x10C96, 0x10CD6 }, { 0x10C97, 0x10CD7 }, { 0x10C98, 0x10CD8 }, { 0x10C99, 0x10CD9 }, { 0x10C9A, 0x10CDA }, { 0x10C9B, 0x10CDB }, { 0x10C9C, 0x10CDC }, { 0x10C9D, 0x10CDD }, { 0x10C9E, 0x10CDE }, { 0x10C9F, 0x10CDF }, { 0x10CA0, 0x10CE0 }, { 0x10CA1, 0x10CE1 }, { 0x10CA2, 0x10CE2 }, { 0x10CA3, 0x10CE3 }, { 0x10CA4, 0x10CE4 }, { 0x10CA5, 0x10CE5 }, { 0x10CA6, 0x10CE6 }, { 0x10CA7, 0x10CE7 }, { 0x10CA8, 0x10CE8 }, { 0x10CA9, 0x10CE9 }, { 0x10CAA, 0x10CEA }, { 0x10CAB, 0x10CEB }, { 0x10CAC, 0x10CEC }, { 0x10CAD, 0x10CED }, { 0x10CAE, 0x10CEE }, { 0x10CAF, 0x10CEF }, { 0x10CB0, 0x10CF0 }, { 0x10CB1, 0x10CF1 }, { 0x10CB2, 0x10CF2 }, { 0x118A0, 0x118C0 }, { 0x118A1, 0x118C1 }, { 0x118A2, 0x118C2 }, { 0x118A3, 0x118C3 }, { 0x118A4, 0x118C4 }, { 0x118A5, 0x118C5 }, { 0x118A6, 0x118C6 }, { 0x118A7, 0x118C7 }, { 0x118A8, 0x118C8 }, { 0x118A9, 0x118C9 }, { 0x118AA, 0x118CA }, { 0x118AB, 0x118CB }, { 0x118AC, 0x118CC }, { 0x118AD, 0x118CD }, { 0x118AE, 0x118CE }, { 0x118AF, 0x118CF }, { 0x118B0, 0x118D0 }, { 0x118B1, 0x118D1 }, { 0x118B2, 0x118D2 }, { 0x118B3, 0x118D3 }, { 0x118B4, 0x118D4 }, { 0x118B5, 0x118D5 }, { 0x118B6, 0x118D6 }, { 0x118B7, 0x118D7 }, { 0x118B8, 0x118D8 }, { 0x118B9, 0x118D9 }, { 0x118BA, 0x118DA }, { 0x118BB, 0x118DB }, { 0x118BC, 0x118DC }, { 0x118BD, 0x118DD }, { 0x118BE, 0x118DE }, { 0x118BF, 0x118DF }, { 0x16E40, 0x16E60 }, { 0x16E41, 0x16E61 }, { 0x16E42, 0x16E62 }, { 0x16E43, 0x16E63 }, { 0x16E44, 0x16E64 }, { 0x16E45, 0x16E65 }, { 0x16E46, 0x16E66 }, { 0x16E47, 0x16E67 }, { 0x16E48, 0x16E68 }, { 0x16E49, 0x16E69 }, { 0x16E4A, 0x16E6A }, { 0x16E4B, 0x16E6B }, { 0x16E4C, 0x16E6C }, { 0x16E4D, 0x16E6D }, { 0x16E4E, 0x16E6E }, { 0x16E4F, 0x16E6F }, { 0x16E50, 0x16E70 }, { 0x16E51, 0x16E71 }, { 0x16E52, 0x16E72 }, { 0x16E53, 0x16E73 }, { 0x16E54, 0x16E74 }, { 0x16E55, 0x16E75 }, { 0x16E56, 0x16E76 }, { 0x16E57, 0x16E77 }, { 0x16E58, 0x16E78 }, { 0x16E59, 0x16E79 }, { 0x16E5A, 0x16E7A }, { 0x16E5B, 0x16E7B }, { 0x16E5C, 0x16E7C }, { 0x16E5D, 0x16E7D }, { 0x16E5E, 0x16E7E }, { 0x16E5F, 0x16E7F }, { 0x1E900, 0x1E922 }, { 0x1E901, 0x1E923 }, { 0x1E902, 0x1E924 }, { 0x1E903, 0x1E925 }, { 0x1E904, 0x1E926 }, { 0x1E905, 0x1E927 }, { 0x1E906, 0x1E928 }, { 0x1E907, 0x1E929 }, { 0x1E908, 0x1E92A }, { 0x1E909, 0x1E92B }, { 0x1E90A, 0x1E92C }, { 0x1E90B, 0x1E92D }, { 0x1E90C, 0x1E92E }, { 0x1E90D, 0x1E92F }, { 0x1E90E, 0x1E930 }, { 0x1E90F, 0x1E931 }, { 0x1E910, 0x1E932 }, { 0x1E911, 0x1E933 }, { 0x1E912, 0x1E934 }, { 0x1E913, 0x1E935 }, { 0x1E914, 0x1E936 }, { 0x1E915, 0x1E937 }, { 0x1E916, 0x1E938 }, { 0x1E917, 0x1E939 }, { 0x1E918, 0x1E93A }, { 0x1E919, 0x1E93B }, { 0x1E91A, 0x1E93C }, { 0x1E91B, 0x1E93D }, { 0x1E91C, 0x1E93E }, { 0x1E91D, 0x1E93F }, { 0x1E91E, 0x1E940 }, { 0x1E91F, 0x1E941 }, { 0x1E920, 0x1E942 }, { 0x1E921, 0x1E943 } #define MAP(c) uc_tolower (c) #include "test-mapping-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unicase/test-mapping-part1.h���������������������������������������0000644�0001750�0001750�00000002045�14557510511�020072� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of single character case mapping functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "unicase.h" #include <string.h> #include "macros.h" /* Pair of Unicode characters. */ typedef struct { ucs4_t ch; ucs4_t value; } pair_t; /* Characters and their mapping values, ignoring no-op mappings, in increasing order. */ static const pair_t mapping[] = { �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unicase/test-mapping-part2.h���������������������������������������0000644�0001750�0001750�00000002051�14557510511�020070� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of single character case mapping functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ }; int main () { unsigned int c; size_t i; c = 0; for (i = 0; i < SIZEOF (mapping); i++) { for (; c < mapping[i].ch; c++) ASSERT (MAP (c) == c); ASSERT (MAP (c) == mapping[i].value); c++; } for (; c < 0x110000; c++) ASSERT (MAP (c) == c); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/����������������������������������������������������������0000755�0001750�0001750�00000000000�14557514200�014553� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-ctype_alnum.c����������������������������������������0000644�0001750�0001750�00000044453�14557510511�020147� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0030, 0x0039 }, { 0x0041, 0x005A }, { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00BA, 0x00BA }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x02C1 }, { 0x02C6, 0x02D1 }, { 0x02E0, 0x02E4 }, { 0x02EC, 0x02EC }, { 0x02EE, 0x02EE }, { 0x0345, 0x0345 }, { 0x0370, 0x0374 }, { 0x0376, 0x0377 }, { 0x037A, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x0559 }, { 0x0560, 0x0588 }, { 0x05D0, 0x05EA }, { 0x05EF, 0x05F2 }, { 0x0620, 0x064A }, { 0x0660, 0x0669 }, { 0x066E, 0x066F }, { 0x0671, 0x06D3 }, { 0x06D5, 0x06D5 }, { 0x06E5, 0x06E6 }, { 0x06EE, 0x06FC }, { 0x06FF, 0x06FF }, { 0x0710, 0x0710 }, { 0x0712, 0x072F }, { 0x074D, 0x07A5 }, { 0x07B1, 0x07B1 }, { 0x07C0, 0x07EA }, { 0x07F4, 0x07F5 }, { 0x07FA, 0x07FA }, { 0x0800, 0x0815 }, { 0x081A, 0x081A }, { 0x0824, 0x0824 }, { 0x0828, 0x0828 }, { 0x0840, 0x0858 }, { 0x0860, 0x086A }, { 0x0870, 0x0887 }, { 0x0889, 0x088E }, { 0x08A0, 0x08C9 }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0966, 0x096F }, { 0x0971, 0x0980 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BD, 0x09BD }, { 0x09CE, 0x09CE }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E1 }, { 0x09E6, 0x09F1 }, { 0x09FC, 0x09FC }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A66, 0x0A6F }, { 0x0A72, 0x0A74 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABD, 0x0ABD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE1 }, { 0x0AE6, 0x0AEF }, { 0x0AF9, 0x0AF9 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3D, 0x0B3D }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B61 }, { 0x0B66, 0x0B6F }, { 0x0B71, 0x0B71 }, { 0x0B83, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BD0, 0x0BD0 }, { 0x0BE6, 0x0BEF }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C5A }, { 0x0C5D, 0x0C5D }, { 0x0C60, 0x0C61 }, { 0x0C66, 0x0C6F }, { 0x0C80, 0x0C80 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBD, 0x0CBD }, { 0x0CDD, 0x0CDE }, { 0x0CE0, 0x0CE1 }, { 0x0CE6, 0x0CEF }, { 0x0CF1, 0x0CF2 }, { 0x0D04, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D3D }, { 0x0D4E, 0x0D4E }, { 0x0D54, 0x0D56 }, { 0x0D5F, 0x0D61 }, { 0x0D66, 0x0D6F }, { 0x0D7A, 0x0D7F }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DE6, 0x0DEF }, { 0x0E01, 0x0E2E }, { 0x0E30, 0x0E3A }, { 0x0E40, 0x0E45 }, { 0x0E47, 0x0E4E }, { 0x0E50, 0x0E59 }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E86, 0x0E8A }, { 0x0E8C, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EB0 }, { 0x0EB2, 0x0EB3 }, { 0x0EBD, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0ED0, 0x0ED9 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F00 }, { 0x0F20, 0x0F29 }, { 0x0F40, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F88, 0x0F8C }, { 0x1000, 0x102A }, { 0x103F, 0x1049 }, { 0x1050, 0x1055 }, { 0x105A, 0x105D }, { 0x1061, 0x1061 }, { 0x1065, 0x1066 }, { 0x106E, 0x1070 }, { 0x1075, 0x1081 }, { 0x108E, 0x108E }, { 0x1090, 0x1099 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x10FA }, { 0x10FC, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x1380, 0x138F }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F8 }, { 0x1700, 0x1711 }, { 0x171F, 0x1731 }, { 0x1740, 0x1751 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1780, 0x17B3 }, { 0x17D7, 0x17D7 }, { 0x17DC, 0x17DC }, { 0x17E0, 0x17E9 }, { 0x1810, 0x1819 }, { 0x1820, 0x1878 }, { 0x1880, 0x1884 }, { 0x1887, 0x18A8 }, { 0x18AA, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1946, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x19D0, 0x19D9 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1A80, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1AA7, 0x1AA7 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4C }, { 0x1B50, 0x1B59 }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C40, 0x1C49 }, { 0x1C4D, 0x1C7D }, { 0x1C80, 0x1C88 }, { 0x1C90, 0x1CBA }, { 0x1CBD, 0x1CBF }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF3 }, { 0x1CF5, 0x1CF6 }, { 0x1CFA, 0x1CFA }, { 0x1D00, 0x1DBF }, { 0x1E00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2119, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x212D }, { 0x212F, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214E }, { 0x2160, 0x2188 }, { 0x249C, 0x24E9 }, { 0x2C00, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D6F }, { 0x2D80, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2E2F, 0x2E2F }, { 0x3005, 0x3007 }, { 0x3021, 0x3029 }, { 0x3031, 0x3035 }, { 0x3038, 0x303C }, { 0x3041, 0x3096 }, { 0x309D, 0x309F }, { 0x30A1, 0x30FA }, { 0x30FC, 0x30FF }, { 0x3105, 0x312F }, { 0x3131, 0x318E }, { 0x31A0, 0x31BF }, { 0x31F0, 0x31FF }, { 0x3400, 0x4DBF }, { 0x4E00, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA62B }, { 0xA640, 0xA66E }, { 0xA67F, 0xA69D }, { 0xA6A0, 0xA6EF }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA7CA }, { 0xA7D0, 0xA7D1 }, { 0xA7D3, 0xA7D3 }, { 0xA7D5, 0xA7D9 }, { 0xA7F2, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8D0, 0xA8D9 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA8FD, 0xA8FE }, { 0xA900, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xA9CF, 0xA9D9 }, { 0xA9E0, 0xA9E4 }, { 0xA9E6, 0xA9FE }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA50, 0xAA59 }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA7E, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAAE0, 0xAAEA }, { 0xAAF2, 0xAAF4 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB5A }, { 0xAB5C, 0xAB69 }, { 0xAB70, 0xABE2 }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB1D }, { 0xFB1F, 0xFB28 }, { 0xFB2A, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBB1 }, { 0xFBD3, 0xFD3D }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDFB }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFF10, 0xFF19 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0xFF66, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10140, 0x10174 }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x10300, 0x1031F }, { 0x1032D, 0x1034A }, { 0x10350, 0x10375 }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x10570, 0x1057A }, { 0x1057C, 0x1058A }, { 0x1058C, 0x10592 }, { 0x10594, 0x10595 }, { 0x10597, 0x105A1 }, { 0x105A3, 0x105B1 }, { 0x105B3, 0x105B9 }, { 0x105BB, 0x105BC }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10780, 0x10785 }, { 0x10787, 0x107B0 }, { 0x107B2, 0x107BA }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10860, 0x10876 }, { 0x10880, 0x1089E }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10980, 0x109B7 }, { 0x109BE, 0x109BF }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A35 }, { 0x10A60, 0x10A7C }, { 0x10A80, 0x10A9C }, { 0x10AC0, 0x10AC7 }, { 0x10AC9, 0x10AE4 }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10B80, 0x10B91 }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x10D00, 0x10D23 }, { 0x10D30, 0x10D39 }, { 0x10E80, 0x10EA9 }, { 0x10EB0, 0x10EB1 }, { 0x10F00, 0x10F1C }, { 0x10F27, 0x10F27 }, { 0x10F30, 0x10F45 }, { 0x10F70, 0x10F81 }, { 0x10FB0, 0x10FC4 }, { 0x10FE0, 0x10FF6 }, { 0x11003, 0x11037 }, { 0x11066, 0x1106F }, { 0x11071, 0x11072 }, { 0x11075, 0x11075 }, { 0x11083, 0x110AF }, { 0x110D0, 0x110E8 }, { 0x110F0, 0x110F9 }, { 0x11103, 0x11126 }, { 0x11136, 0x1113F }, { 0x11144, 0x11144 }, { 0x11147, 0x11147 }, { 0x11150, 0x11172 }, { 0x11176, 0x11176 }, { 0x11183, 0x111B2 }, { 0x111C1, 0x111C4 }, { 0x111D0, 0x111DA }, { 0x111DC, 0x111DC }, { 0x11200, 0x11211 }, { 0x11213, 0x1122B }, { 0x1123F, 0x11240 }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A8 }, { 0x112B0, 0x112DE }, { 0x112F0, 0x112F9 }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133D, 0x1133D }, { 0x11350, 0x11350 }, { 0x1135D, 0x11361 }, { 0x11400, 0x11434 }, { 0x11447, 0x1144A }, { 0x11450, 0x11459 }, { 0x1145F, 0x11461 }, { 0x11480, 0x114AF }, { 0x114C4, 0x114C5 }, { 0x114C7, 0x114C7 }, { 0x114D0, 0x114D9 }, { 0x11580, 0x115AE }, { 0x115D8, 0x115DB }, { 0x11600, 0x1162F }, { 0x11644, 0x11644 }, { 0x11650, 0x11659 }, { 0x11680, 0x116AA }, { 0x116B8, 0x116B8 }, { 0x116C0, 0x116C9 }, { 0x11700, 0x1171A }, { 0x11730, 0x11739 }, { 0x11740, 0x11746 }, { 0x11800, 0x1182B }, { 0x118A0, 0x118E9 }, { 0x118FF, 0x11906 }, { 0x11909, 0x11909 }, { 0x1190C, 0x11913 }, { 0x11915, 0x11916 }, { 0x11918, 0x1192F }, { 0x1193F, 0x1193F }, { 0x11941, 0x11941 }, { 0x11950, 0x11959 }, { 0x119A0, 0x119A7 }, { 0x119AA, 0x119D0 }, { 0x119E1, 0x119E1 }, { 0x119E3, 0x119E3 }, { 0x11A00, 0x11A00 }, { 0x11A0B, 0x11A32 }, { 0x11A3A, 0x11A3A }, { 0x11A50, 0x11A50 }, { 0x11A5C, 0x11A89 }, { 0x11A9D, 0x11A9D }, { 0x11AB0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C2E }, { 0x11C40, 0x11C40 }, { 0x11C50, 0x11C59 }, { 0x11C72, 0x11C8F }, { 0x11D00, 0x11D06 }, { 0x11D08, 0x11D09 }, { 0x11D0B, 0x11D30 }, { 0x11D46, 0x11D46 }, { 0x11D50, 0x11D59 }, { 0x11D60, 0x11D65 }, { 0x11D67, 0x11D68 }, { 0x11D6A, 0x11D89 }, { 0x11D98, 0x11D98 }, { 0x11DA0, 0x11DA9 }, { 0x11EE0, 0x11EF2 }, { 0x11F02, 0x11F02 }, { 0x11F04, 0x11F10 }, { 0x11F12, 0x11F33 }, { 0x11F50, 0x11F59 }, { 0x11FB0, 0x11FB0 }, { 0x12000, 0x12399 }, { 0x12400, 0x1246E }, { 0x12480, 0x12543 }, { 0x12F90, 0x12FF0 }, { 0x13000, 0x1342F }, { 0x13441, 0x13446 }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16A60, 0x16A69 }, { 0x16A70, 0x16ABE }, { 0x16AC0, 0x16AC9 }, { 0x16AD0, 0x16AED }, { 0x16B00, 0x16B2F }, { 0x16B40, 0x16B43 }, { 0x16B50, 0x16B59 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16E40, 0x16E7F }, { 0x16F00, 0x16F4A }, { 0x16F50, 0x16F50 }, { 0x16F93, 0x16F9F }, { 0x16FE0, 0x16FE1 }, { 0x16FE3, 0x16FE3 }, { 0x17000, 0x187F7 }, { 0x18800, 0x18CD5 }, { 0x18D00, 0x18D08 }, { 0x1AFF0, 0x1AFF3 }, { 0x1AFF5, 0x1AFFB }, { 0x1AFFD, 0x1AFFE }, { 0x1B000, 0x1B122 }, { 0x1B132, 0x1B132 }, { 0x1B150, 0x1B152 }, { 0x1B155, 0x1B155 }, { 0x1B164, 0x1B167 }, { 0x1B170, 0x1B2FB }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1D7CE, 0x1D7FF }, { 0x1DF00, 0x1DF1E }, { 0x1DF25, 0x1DF2A }, { 0x1E030, 0x1E06D }, { 0x1E100, 0x1E12C }, { 0x1E137, 0x1E13D }, { 0x1E140, 0x1E149 }, { 0x1E14E, 0x1E14E }, { 0x1E290, 0x1E2AD }, { 0x1E2C0, 0x1E2EB }, { 0x1E2F0, 0x1E2F9 }, { 0x1E4D0, 0x1E4EB }, { 0x1E4F0, 0x1E4F9 }, { 0x1E7E0, 0x1E7E6 }, { 0x1E7E8, 0x1E7EB }, { 0x1E7ED, 0x1E7EE }, { 0x1E7F0, 0x1E7FE }, { 0x1E800, 0x1E8C4 }, { 0x1E900, 0x1E943 }, { 0x1E94B, 0x1E94B }, { 0x1E950, 0x1E959 }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x1F110, 0x1F12C }, { 0x1F130, 0x1F149 }, { 0x1F150, 0x1F169 }, { 0x1F170, 0x1F18A }, { 0x1F1A5, 0x1F1A5 }, { 0x1F1E6, 0x1F1FF }, { 0x1FBF0, 0x1FBF9 }, { 0x20000, 0x2A6DF }, { 0x2A700, 0x2B739 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF } #define PREDICATE(c) uc_is_alnum (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-ctype_alpha.c����������������������������������������0000644�0001750�0001750�00000044423�14557510511�020115� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x0061, 0x007A }, { 0x00AA, 0x00AA }, { 0x00B5, 0x00B5 }, { 0x00BA, 0x00BA }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00F6 }, { 0x00F8, 0x02C1 }, { 0x02C6, 0x02D1 }, { 0x02E0, 0x02E4 }, { 0x02EC, 0x02EC }, { 0x02EE, 0x02EE }, { 0x0345, 0x0345 }, { 0x0370, 0x0374 }, { 0x0376, 0x0377 }, { 0x037A, 0x037D }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x03F5 }, { 0x03F7, 0x0481 }, { 0x048A, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x0559 }, { 0x0560, 0x0588 }, { 0x05D0, 0x05EA }, { 0x05EF, 0x05F2 }, { 0x0620, 0x064A }, { 0x0660, 0x0669 }, { 0x066E, 0x066F }, { 0x0671, 0x06D3 }, { 0x06D5, 0x06D5 }, { 0x06E5, 0x06E6 }, { 0x06EE, 0x06FC }, { 0x06FF, 0x06FF }, { 0x0710, 0x0710 }, { 0x0712, 0x072F }, { 0x074D, 0x07A5 }, { 0x07B1, 0x07B1 }, { 0x07C0, 0x07EA }, { 0x07F4, 0x07F5 }, { 0x07FA, 0x07FA }, { 0x0800, 0x0815 }, { 0x081A, 0x081A }, { 0x0824, 0x0824 }, { 0x0828, 0x0828 }, { 0x0840, 0x0858 }, { 0x0860, 0x086A }, { 0x0870, 0x0887 }, { 0x0889, 0x088E }, { 0x08A0, 0x08C9 }, { 0x0904, 0x0939 }, { 0x093D, 0x093D }, { 0x0950, 0x0950 }, { 0x0958, 0x0961 }, { 0x0966, 0x096F }, { 0x0971, 0x0980 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BD, 0x09BD }, { 0x09CE, 0x09CE }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E1 }, { 0x09E6, 0x09F1 }, { 0x09FC, 0x09FC }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A66, 0x0A6F }, { 0x0A72, 0x0A74 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABD, 0x0ABD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE1 }, { 0x0AE6, 0x0AEF }, { 0x0AF9, 0x0AF9 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3D, 0x0B3D }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B61 }, { 0x0B66, 0x0B6F }, { 0x0B71, 0x0B71 }, { 0x0B83, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BD0, 0x0BD0 }, { 0x0BE6, 0x0BEF }, { 0x0C05, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3D, 0x0C3D }, { 0x0C58, 0x0C5A }, { 0x0C5D, 0x0C5D }, { 0x0C60, 0x0C61 }, { 0x0C66, 0x0C6F }, { 0x0C80, 0x0C80 }, { 0x0C85, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBD, 0x0CBD }, { 0x0CDD, 0x0CDE }, { 0x0CE0, 0x0CE1 }, { 0x0CE6, 0x0CEF }, { 0x0CF1, 0x0CF2 }, { 0x0D04, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D3A }, { 0x0D3D, 0x0D3D }, { 0x0D4E, 0x0D4E }, { 0x0D54, 0x0D56 }, { 0x0D5F, 0x0D61 }, { 0x0D66, 0x0D6F }, { 0x0D7A, 0x0D7F }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DE6, 0x0DEF }, { 0x0E01, 0x0E2E }, { 0x0E30, 0x0E3A }, { 0x0E40, 0x0E45 }, { 0x0E47, 0x0E4E }, { 0x0E50, 0x0E59 }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E86, 0x0E8A }, { 0x0E8C, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EB0 }, { 0x0EB2, 0x0EB3 }, { 0x0EBD, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0ED0, 0x0ED9 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F00 }, { 0x0F20, 0x0F29 }, { 0x0F40, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F88, 0x0F8C }, { 0x1000, 0x102A }, { 0x103F, 0x1049 }, { 0x1050, 0x1055 }, { 0x105A, 0x105D }, { 0x1061, 0x1061 }, { 0x1065, 0x1066 }, { 0x106E, 0x1070 }, { 0x1075, 0x1081 }, { 0x108E, 0x108E }, { 0x1090, 0x1099 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x10FA }, { 0x10FC, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x1380, 0x138F }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1401, 0x166C }, { 0x166F, 0x167F }, { 0x1681, 0x169A }, { 0x16A0, 0x16EA }, { 0x16EE, 0x16F8 }, { 0x1700, 0x1711 }, { 0x171F, 0x1731 }, { 0x1740, 0x1751 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1780, 0x17B3 }, { 0x17D7, 0x17D7 }, { 0x17DC, 0x17DC }, { 0x17E0, 0x17E9 }, { 0x1810, 0x1819 }, { 0x1820, 0x1878 }, { 0x1880, 0x1884 }, { 0x1887, 0x18A8 }, { 0x18AA, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1946, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x19D0, 0x19D9 }, { 0x1A00, 0x1A16 }, { 0x1A20, 0x1A54 }, { 0x1A80, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1AA7, 0x1AA7 }, { 0x1B05, 0x1B33 }, { 0x1B45, 0x1B4C }, { 0x1B50, 0x1B59 }, { 0x1B83, 0x1BA0 }, { 0x1BAE, 0x1BE5 }, { 0x1C00, 0x1C23 }, { 0x1C40, 0x1C49 }, { 0x1C4D, 0x1C7D }, { 0x1C80, 0x1C88 }, { 0x1C90, 0x1CBA }, { 0x1CBD, 0x1CBF }, { 0x1CE9, 0x1CEC }, { 0x1CEE, 0x1CF3 }, { 0x1CF5, 0x1CF6 }, { 0x1CFA, 0x1CFA }, { 0x1D00, 0x1DBF }, { 0x1E00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FBC }, { 0x1FBE, 0x1FBE }, { 0x1FC2, 0x1FC4 }, { 0x1FC6, 0x1FCC }, { 0x1FD0, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FE0, 0x1FEC }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFC }, { 0x2071, 0x2071 }, { 0x207F, 0x207F }, { 0x2090, 0x209C }, { 0x2102, 0x2102 }, { 0x2107, 0x2107 }, { 0x210A, 0x2113 }, { 0x2115, 0x2115 }, { 0x2119, 0x211D }, { 0x2124, 0x2124 }, { 0x2126, 0x2126 }, { 0x2128, 0x212D }, { 0x212F, 0x2139 }, { 0x213C, 0x213F }, { 0x2145, 0x2149 }, { 0x214E, 0x214E }, { 0x2160, 0x2188 }, { 0x249C, 0x24E9 }, { 0x2C00, 0x2CE4 }, { 0x2CEB, 0x2CEE }, { 0x2CF2, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D6F }, { 0x2D80, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2E2F, 0x2E2F }, { 0x3005, 0x3007 }, { 0x3021, 0x3029 }, { 0x3031, 0x3035 }, { 0x3038, 0x303C }, { 0x3041, 0x3096 }, { 0x309D, 0x309F }, { 0x30A1, 0x30FA }, { 0x30FC, 0x30FF }, { 0x3105, 0x312F }, { 0x3131, 0x318E }, { 0x31A0, 0x31BF }, { 0x31F0, 0x31FF }, { 0x3400, 0x4DBF }, { 0x4E00, 0xA48C }, { 0xA4D0, 0xA4FD }, { 0xA500, 0xA60C }, { 0xA610, 0xA62B }, { 0xA640, 0xA66E }, { 0xA67F, 0xA69D }, { 0xA6A0, 0xA6EF }, { 0xA717, 0xA71F }, { 0xA722, 0xA788 }, { 0xA78B, 0xA7CA }, { 0xA7D0, 0xA7D1 }, { 0xA7D3, 0xA7D3 }, { 0xA7D5, 0xA7D9 }, { 0xA7F2, 0xA801 }, { 0xA803, 0xA805 }, { 0xA807, 0xA80A }, { 0xA80C, 0xA822 }, { 0xA840, 0xA873 }, { 0xA882, 0xA8B3 }, { 0xA8D0, 0xA8D9 }, { 0xA8F2, 0xA8F7 }, { 0xA8FB, 0xA8FB }, { 0xA8FD, 0xA8FE }, { 0xA900, 0xA925 }, { 0xA930, 0xA946 }, { 0xA960, 0xA97C }, { 0xA984, 0xA9B2 }, { 0xA9CF, 0xA9D9 }, { 0xA9E0, 0xA9E4 }, { 0xA9E6, 0xA9FE }, { 0xAA00, 0xAA28 }, { 0xAA40, 0xAA42 }, { 0xAA44, 0xAA4B }, { 0xAA50, 0xAA59 }, { 0xAA60, 0xAA76 }, { 0xAA7A, 0xAA7A }, { 0xAA7E, 0xAAAF }, { 0xAAB1, 0xAAB1 }, { 0xAAB5, 0xAAB6 }, { 0xAAB9, 0xAABD }, { 0xAAC0, 0xAAC0 }, { 0xAAC2, 0xAAC2 }, { 0xAADB, 0xAADD }, { 0xAAE0, 0xAAEA }, { 0xAAF2, 0xAAF4 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB5A }, { 0xAB5C, 0xAB69 }, { 0xAB70, 0xABE2 }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xF900, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB1D }, { 0xFB1F, 0xFB28 }, { 0xFB2A, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBB1 }, { 0xFBD3, 0xFD3D }, { 0xFD50, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDF0, 0xFDFB }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFF10, 0xFF19 }, { 0xFF21, 0xFF3A }, { 0xFF41, 0xFF5A }, { 0xFF66, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10140, 0x10174 }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x10300, 0x1031F }, { 0x1032D, 0x1034A }, { 0x10350, 0x10375 }, { 0x10380, 0x1039D }, { 0x103A0, 0x103C3 }, { 0x103C8, 0x103CF }, { 0x103D1, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x10570, 0x1057A }, { 0x1057C, 0x1058A }, { 0x1058C, 0x10592 }, { 0x10594, 0x10595 }, { 0x10597, 0x105A1 }, { 0x105A3, 0x105B1 }, { 0x105B3, 0x105B9 }, { 0x105BB, 0x105BC }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10780, 0x10785 }, { 0x10787, 0x107B0 }, { 0x107B2, 0x107BA }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10860, 0x10876 }, { 0x10880, 0x1089E }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x10900, 0x10915 }, { 0x10920, 0x10939 }, { 0x10980, 0x109B7 }, { 0x109BE, 0x109BF }, { 0x10A00, 0x10A00 }, { 0x10A10, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A35 }, { 0x10A60, 0x10A7C }, { 0x10A80, 0x10A9C }, { 0x10AC0, 0x10AC7 }, { 0x10AC9, 0x10AE4 }, { 0x10B00, 0x10B35 }, { 0x10B40, 0x10B55 }, { 0x10B60, 0x10B72 }, { 0x10B80, 0x10B91 }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x10D00, 0x10D23 }, { 0x10D30, 0x10D39 }, { 0x10E80, 0x10EA9 }, { 0x10EB0, 0x10EB1 }, { 0x10F00, 0x10F1C }, { 0x10F27, 0x10F27 }, { 0x10F30, 0x10F45 }, { 0x10F70, 0x10F81 }, { 0x10FB0, 0x10FC4 }, { 0x10FE0, 0x10FF6 }, { 0x11003, 0x11037 }, { 0x11066, 0x1106F }, { 0x11071, 0x11072 }, { 0x11075, 0x11075 }, { 0x11083, 0x110AF }, { 0x110D0, 0x110E8 }, { 0x110F0, 0x110F9 }, { 0x11103, 0x11126 }, { 0x11136, 0x1113F }, { 0x11144, 0x11144 }, { 0x11147, 0x11147 }, { 0x11150, 0x11172 }, { 0x11176, 0x11176 }, { 0x11183, 0x111B2 }, { 0x111C1, 0x111C4 }, { 0x111D0, 0x111DA }, { 0x111DC, 0x111DC }, { 0x11200, 0x11211 }, { 0x11213, 0x1122B }, { 0x1123F, 0x11240 }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A8 }, { 0x112B0, 0x112DE }, { 0x112F0, 0x112F9 }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133D, 0x1133D }, { 0x11350, 0x11350 }, { 0x1135D, 0x11361 }, { 0x11400, 0x11434 }, { 0x11447, 0x1144A }, { 0x11450, 0x11459 }, { 0x1145F, 0x11461 }, { 0x11480, 0x114AF }, { 0x114C4, 0x114C5 }, { 0x114C7, 0x114C7 }, { 0x114D0, 0x114D9 }, { 0x11580, 0x115AE }, { 0x115D8, 0x115DB }, { 0x11600, 0x1162F }, { 0x11644, 0x11644 }, { 0x11650, 0x11659 }, { 0x11680, 0x116AA }, { 0x116B8, 0x116B8 }, { 0x116C0, 0x116C9 }, { 0x11700, 0x1171A }, { 0x11730, 0x11739 }, { 0x11740, 0x11746 }, { 0x11800, 0x1182B }, { 0x118A0, 0x118E9 }, { 0x118FF, 0x11906 }, { 0x11909, 0x11909 }, { 0x1190C, 0x11913 }, { 0x11915, 0x11916 }, { 0x11918, 0x1192F }, { 0x1193F, 0x1193F }, { 0x11941, 0x11941 }, { 0x11950, 0x11959 }, { 0x119A0, 0x119A7 }, { 0x119AA, 0x119D0 }, { 0x119E1, 0x119E1 }, { 0x119E3, 0x119E3 }, { 0x11A00, 0x11A00 }, { 0x11A0B, 0x11A32 }, { 0x11A3A, 0x11A3A }, { 0x11A50, 0x11A50 }, { 0x11A5C, 0x11A89 }, { 0x11A9D, 0x11A9D }, { 0x11AB0, 0x11AF8 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C2E }, { 0x11C40, 0x11C40 }, { 0x11C50, 0x11C59 }, { 0x11C72, 0x11C8F }, { 0x11D00, 0x11D06 }, { 0x11D08, 0x11D09 }, { 0x11D0B, 0x11D30 }, { 0x11D46, 0x11D46 }, { 0x11D50, 0x11D59 }, { 0x11D60, 0x11D65 }, { 0x11D67, 0x11D68 }, { 0x11D6A, 0x11D89 }, { 0x11D98, 0x11D98 }, { 0x11DA0, 0x11DA9 }, { 0x11EE0, 0x11EF2 }, { 0x11F02, 0x11F02 }, { 0x11F04, 0x11F10 }, { 0x11F12, 0x11F33 }, { 0x11F50, 0x11F59 }, { 0x11FB0, 0x11FB0 }, { 0x12000, 0x12399 }, { 0x12400, 0x1246E }, { 0x12480, 0x12543 }, { 0x12F90, 0x12FF0 }, { 0x13000, 0x1342F }, { 0x13441, 0x13446 }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16A60, 0x16A69 }, { 0x16A70, 0x16ABE }, { 0x16AC0, 0x16AC9 }, { 0x16AD0, 0x16AED }, { 0x16B00, 0x16B2F }, { 0x16B40, 0x16B43 }, { 0x16B50, 0x16B59 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16E40, 0x16E7F }, { 0x16F00, 0x16F4A }, { 0x16F50, 0x16F50 }, { 0x16F93, 0x16F9F }, { 0x16FE0, 0x16FE1 }, { 0x16FE3, 0x16FE3 }, { 0x17000, 0x187F7 }, { 0x18800, 0x18CD5 }, { 0x18D00, 0x18D08 }, { 0x1AFF0, 0x1AFF3 }, { 0x1AFF5, 0x1AFFB }, { 0x1AFFD, 0x1AFFE }, { 0x1B000, 0x1B122 }, { 0x1B132, 0x1B132 }, { 0x1B150, 0x1B152 }, { 0x1B155, 0x1B155 }, { 0x1B164, 0x1B167 }, { 0x1B170, 0x1B2FB }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D6C0 }, { 0x1D6C2, 0x1D6DA }, { 0x1D6DC, 0x1D6FA }, { 0x1D6FC, 0x1D714 }, { 0x1D716, 0x1D734 }, { 0x1D736, 0x1D74E }, { 0x1D750, 0x1D76E }, { 0x1D770, 0x1D788 }, { 0x1D78A, 0x1D7A8 }, { 0x1D7AA, 0x1D7C2 }, { 0x1D7C4, 0x1D7CB }, { 0x1D7CE, 0x1D7FF }, { 0x1DF00, 0x1DF1E }, { 0x1DF25, 0x1DF2A }, { 0x1E030, 0x1E06D }, { 0x1E100, 0x1E12C }, { 0x1E137, 0x1E13D }, { 0x1E140, 0x1E149 }, { 0x1E14E, 0x1E14E }, { 0x1E290, 0x1E2AD }, { 0x1E2C0, 0x1E2EB }, { 0x1E2F0, 0x1E2F9 }, { 0x1E4D0, 0x1E4EB }, { 0x1E4F0, 0x1E4F9 }, { 0x1E7E0, 0x1E7E6 }, { 0x1E7E8, 0x1E7EB }, { 0x1E7ED, 0x1E7EE }, { 0x1E7F0, 0x1E7FE }, { 0x1E800, 0x1E8C4 }, { 0x1E900, 0x1E943 }, { 0x1E94B, 0x1E94B }, { 0x1E950, 0x1E959 }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x1F110, 0x1F12C }, { 0x1F130, 0x1F149 }, { 0x1F150, 0x1F169 }, { 0x1F170, 0x1F18A }, { 0x1F1A5, 0x1F1A5 }, { 0x1F1E6, 0x1F1FF }, { 0x1FBF0, 0x1FBF9 }, { 0x20000, 0x2A6DF }, { 0x2A700, 0x2B739 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF } #define PREDICATE(c) uc_is_alpha (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-ctype_blank.c����������������������������������������0000644�0001750�0001750�00000002051�14557510511�020106� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0009, 0x0009 }, { 0x0020, 0x0020 }, { 0x1680, 0x1680 }, { 0x2000, 0x2006 }, { 0x2008, 0x200A }, { 0x205F, 0x205F }, { 0x3000, 0x3000 } #define PREDICATE(c) uc_is_blank (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-ctype_cntrl.c����������������������������������������0000644�0001750�0001750�00000001711�14557510511�020143� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0000, 0x001F }, { 0x007F, 0x009F }, { 0x2028, 0x2029 } #define PREDICATE(c) uc_is_cntrl (c) #include "test-predicate-part2.h" �������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-ctype_digit.c����������������������������������������0000644�0001750�0001750�00000001631�14557510511�020122� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0030, 0x0039 } #define PREDICATE(c) uc_is_digit (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-ctype_graph.c����������������������������������������0000644�0001750�0001750�00000044475�14557510511�020140� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0021, 0x007E }, { 0x00A0, 0x0377 }, { 0x037A, 0x037F }, { 0x0384, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x058A }, { 0x058D, 0x058F }, { 0x0591, 0x05C7 }, { 0x05D0, 0x05EA }, { 0x05EF, 0x05F4 }, { 0x0600, 0x070D }, { 0x070F, 0x074A }, { 0x074D, 0x07B1 }, { 0x07C0, 0x07FA }, { 0x07FD, 0x082D }, { 0x0830, 0x083E }, { 0x0840, 0x085B }, { 0x085E, 0x085E }, { 0x0860, 0x086A }, { 0x0870, 0x088E }, { 0x0890, 0x0891 }, { 0x0898, 0x0983 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BC, 0x09C4 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CE }, { 0x09D7, 0x09D7 }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E3 }, { 0x09E6, 0x09FE }, { 0x0A01, 0x0A03 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A3C, 0x0A3C }, { 0x0A3E, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A66, 0x0A76 }, { 0x0A81, 0x0A83 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABC, 0x0AC5 }, { 0x0AC7, 0x0AC9 }, { 0x0ACB, 0x0ACD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE3 }, { 0x0AE6, 0x0AF1 }, { 0x0AF9, 0x0AFF }, { 0x0B01, 0x0B03 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3C, 0x0B44 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4D }, { 0x0B55, 0x0B57 }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B63 }, { 0x0B66, 0x0B77 }, { 0x0B82, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BBE, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCD }, { 0x0BD0, 0x0BD0 }, { 0x0BD7, 0x0BD7 }, { 0x0BE6, 0x0BFA }, { 0x0C00, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3C, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C58, 0x0C5A }, { 0x0C5D, 0x0C5D }, { 0x0C60, 0x0C63 }, { 0x0C66, 0x0C6F }, { 0x0C77, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBC, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CDD, 0x0CDE }, { 0x0CE0, 0x0CE3 }, { 0x0CE6, 0x0CEF }, { 0x0CF1, 0x0CF3 }, { 0x0D00, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4F }, { 0x0D54, 0x0D63 }, { 0x0D66, 0x0D7F }, { 0x0D81, 0x0D83 }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DCA, 0x0DCA }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 0x0DE6, 0x0DEF }, { 0x0DF2, 0x0DF4 }, { 0x0E01, 0x0E3A }, { 0x0E3F, 0x0E5B }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E86, 0x0E8A }, { 0x0E8C, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0EC8, 0x0ECE }, { 0x0ED0, 0x0ED9 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F71, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FBE, 0x0FCC }, { 0x0FCE, 0x0FDA }, { 0x1000, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x135D, 0x137C }, { 0x1380, 0x1399 }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1400, 0x167F }, { 0x1681, 0x169C }, { 0x16A0, 0x16F8 }, { 0x1700, 0x1715 }, { 0x171F, 0x1736 }, { 0x1740, 0x1753 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1772, 0x1773 }, { 0x1780, 0x17DD }, { 0x17E0, 0x17E9 }, { 0x17F0, 0x17F9 }, { 0x1800, 0x1819 }, { 0x1820, 0x1878 }, { 0x1880, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1920, 0x192B }, { 0x1930, 0x193B }, { 0x1940, 0x1940 }, { 0x1944, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x19D0, 0x19DA }, { 0x19DE, 0x1A1B }, { 0x1A1E, 0x1A5E }, { 0x1A60, 0x1A7C }, { 0x1A7F, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1AA0, 0x1AAD }, { 0x1AB0, 0x1ACE }, { 0x1B00, 0x1B4C }, { 0x1B50, 0x1B7E }, { 0x1B80, 0x1BF3 }, { 0x1BFC, 0x1C37 }, { 0x1C3B, 0x1C49 }, { 0x1C4D, 0x1C88 }, { 0x1C90, 0x1CBA }, { 0x1CBD, 0x1CC7 }, { 0x1CD0, 0x1CFA }, { 0x1D00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FC4 }, { 0x1FC6, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FDD, 0x1FEF }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFE }, { 0x2007, 0x2007 }, { 0x200B, 0x2027 }, { 0x202A, 0x205E }, { 0x2060, 0x2064 }, { 0x2066, 0x2071 }, { 0x2074, 0x208E }, { 0x2090, 0x209C }, { 0x20A0, 0x20C0 }, { 0x20D0, 0x20F0 }, { 0x2100, 0x218B }, { 0x2190, 0x2426 }, { 0x2440, 0x244A }, { 0x2460, 0x2B73 }, { 0x2B76, 0x2B95 }, { 0x2B97, 0x2CF3 }, { 0x2CF9, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D70 }, { 0x2D7F, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2DE0, 0x2E5D }, { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x2FFF }, { 0x3001, 0x303F }, { 0x3041, 0x3096 }, { 0x3099, 0x30FF }, { 0x3105, 0x312F }, { 0x3131, 0x318E }, { 0x3190, 0x31E3 }, { 0x31EF, 0x321E }, { 0x3220, 0xA48C }, { 0xA490, 0xA4C6 }, { 0xA4D0, 0xA62B }, { 0xA640, 0xA6F7 }, { 0xA700, 0xA7CA }, { 0xA7D0, 0xA7D1 }, { 0xA7D3, 0xA7D3 }, { 0xA7D5, 0xA7D9 }, { 0xA7F2, 0xA82C }, { 0xA830, 0xA839 }, { 0xA840, 0xA877 }, { 0xA880, 0xA8C5 }, { 0xA8CE, 0xA8D9 }, { 0xA8E0, 0xA953 }, { 0xA95F, 0xA97C }, { 0xA980, 0xA9CD }, { 0xA9CF, 0xA9D9 }, { 0xA9DE, 0xA9FE }, { 0xAA00, 0xAA36 }, { 0xAA40, 0xAA4D }, { 0xAA50, 0xAA59 }, { 0xAA5C, 0xAAC2 }, { 0xAADB, 0xAAF6 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB6B }, { 0xAB70, 0xABED }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xE000, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBC2 }, { 0xFBD3, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDCF, 0xFDCF }, { 0xFDF0, 0xFE19 }, { 0xFE20, 0xFE52 }, { 0xFE54, 0xFE66 }, { 0xFE68, 0xFE6B }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFEFF, 0xFEFF }, { 0xFF01, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0xFFE0, 0xFFE6 }, { 0xFFE8, 0xFFEE }, { 0xFFF9, 0xFFFD }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10100, 0x10102 }, { 0x10107, 0x10133 }, { 0x10137, 0x1018E }, { 0x10190, 0x1019C }, { 0x101A0, 0x101A0 }, { 0x101D0, 0x101FD }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x102E0, 0x102FB }, { 0x10300, 0x10323 }, { 0x1032D, 0x1034A }, { 0x10350, 0x1037A }, { 0x10380, 0x1039D }, { 0x1039F, 0x103C3 }, { 0x103C8, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x1056F, 0x1057A }, { 0x1057C, 0x1058A }, { 0x1058C, 0x10592 }, { 0x10594, 0x10595 }, { 0x10597, 0x105A1 }, { 0x105A3, 0x105B1 }, { 0x105B3, 0x105B9 }, { 0x105BB, 0x105BC }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10780, 0x10785 }, { 0x10787, 0x107B0 }, { 0x107B2, 0x107BA }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10857, 0x1089E }, { 0x108A7, 0x108AF }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x108FB, 0x1091B }, { 0x1091F, 0x10939 }, { 0x1093F, 0x1093F }, { 0x10980, 0x109B7 }, { 0x109BC, 0x109CF }, { 0x109D2, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A35 }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A48 }, { 0x10A50, 0x10A58 }, { 0x10A60, 0x10A9F }, { 0x10AC0, 0x10AE6 }, { 0x10AEB, 0x10AF6 }, { 0x10B00, 0x10B35 }, { 0x10B39, 0x10B55 }, { 0x10B58, 0x10B72 }, { 0x10B78, 0x10B91 }, { 0x10B99, 0x10B9C }, { 0x10BA9, 0x10BAF }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x10CFA, 0x10D27 }, { 0x10D30, 0x10D39 }, { 0x10E60, 0x10E7E }, { 0x10E80, 0x10EA9 }, { 0x10EAB, 0x10EAD }, { 0x10EB0, 0x10EB1 }, { 0x10EFD, 0x10F27 }, { 0x10F30, 0x10F59 }, { 0x10F70, 0x10F89 }, { 0x10FB0, 0x10FCB }, { 0x10FE0, 0x10FF6 }, { 0x11000, 0x1104D }, { 0x11052, 0x11075 }, { 0x1107F, 0x110C2 }, { 0x110CD, 0x110CD }, { 0x110D0, 0x110E8 }, { 0x110F0, 0x110F9 }, { 0x11100, 0x11134 }, { 0x11136, 0x11147 }, { 0x11150, 0x11176 }, { 0x11180, 0x111DF }, { 0x111E1, 0x111F4 }, { 0x11200, 0x11211 }, { 0x11213, 0x11241 }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A9 }, { 0x112B0, 0x112EA }, { 0x112F0, 0x112F9 }, { 0x11300, 0x11303 }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133B, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134D }, { 0x11350, 0x11350 }, { 0x11357, 0x11357 }, { 0x1135D, 0x11363 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11400, 0x1145B }, { 0x1145D, 0x11461 }, { 0x11480, 0x114C7 }, { 0x114D0, 0x114D9 }, { 0x11580, 0x115B5 }, { 0x115B8, 0x115DD }, { 0x11600, 0x11644 }, { 0x11650, 0x11659 }, { 0x11660, 0x1166C }, { 0x11680, 0x116B9 }, { 0x116C0, 0x116C9 }, { 0x11700, 0x1171A }, { 0x1171D, 0x1172B }, { 0x11730, 0x11746 }, { 0x11800, 0x1183B }, { 0x118A0, 0x118F2 }, { 0x118FF, 0x11906 }, { 0x11909, 0x11909 }, { 0x1190C, 0x11913 }, { 0x11915, 0x11916 }, { 0x11918, 0x11935 }, { 0x11937, 0x11938 }, { 0x1193B, 0x11946 }, { 0x11950, 0x11959 }, { 0x119A0, 0x119A7 }, { 0x119AA, 0x119D7 }, { 0x119DA, 0x119E4 }, { 0x11A00, 0x11A47 }, { 0x11A50, 0x11AA2 }, { 0x11AB0, 0x11AF8 }, { 0x11B00, 0x11B09 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C36 }, { 0x11C38, 0x11C45 }, { 0x11C50, 0x11C6C }, { 0x11C70, 0x11C8F }, { 0x11C92, 0x11CA7 }, { 0x11CA9, 0x11CB6 }, { 0x11D00, 0x11D06 }, { 0x11D08, 0x11D09 }, { 0x11D0B, 0x11D36 }, { 0x11D3A, 0x11D3A }, { 0x11D3C, 0x11D3D }, { 0x11D3F, 0x11D47 }, { 0x11D50, 0x11D59 }, { 0x11D60, 0x11D65 }, { 0x11D67, 0x11D68 }, { 0x11D6A, 0x11D8E }, { 0x11D90, 0x11D91 }, { 0x11D93, 0x11D98 }, { 0x11DA0, 0x11DA9 }, { 0x11EE0, 0x11EF8 }, { 0x11F00, 0x11F10 }, { 0x11F12, 0x11F3A }, { 0x11F3E, 0x11F59 }, { 0x11FB0, 0x11FB0 }, { 0x11FC0, 0x11FF1 }, { 0x11FFF, 0x12399 }, { 0x12400, 0x1246E }, { 0x12470, 0x12474 }, { 0x12480, 0x12543 }, { 0x12F90, 0x12FF2 }, { 0x13000, 0x13455 }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16A60, 0x16A69 }, { 0x16A6E, 0x16ABE }, { 0x16AC0, 0x16AC9 }, { 0x16AD0, 0x16AED }, { 0x16AF0, 0x16AF5 }, { 0x16B00, 0x16B45 }, { 0x16B50, 0x16B59 }, { 0x16B5B, 0x16B61 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16E40, 0x16E9A }, { 0x16F00, 0x16F4A }, { 0x16F4F, 0x16F87 }, { 0x16F8F, 0x16F9F }, { 0x16FE0, 0x16FE4 }, { 0x16FF0, 0x16FF1 }, { 0x17000, 0x187F7 }, { 0x18800, 0x18CD5 }, { 0x18D00, 0x18D08 }, { 0x1AFF0, 0x1AFF3 }, { 0x1AFF5, 0x1AFFB }, { 0x1AFFD, 0x1AFFE }, { 0x1B000, 0x1B122 }, { 0x1B132, 0x1B132 }, { 0x1B150, 0x1B152 }, { 0x1B155, 0x1B155 }, { 0x1B164, 0x1B167 }, { 0x1B170, 0x1B2FB }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1BC9C, 0x1BCA3 }, { 0x1CF00, 0x1CF2D }, { 0x1CF30, 0x1CF46 }, { 0x1CF50, 0x1CFC3 }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D1EA }, { 0x1D200, 0x1D245 }, { 0x1D2C0, 0x1D2D3 }, { 0x1D2E0, 0x1D2F3 }, { 0x1D300, 0x1D356 }, { 0x1D360, 0x1D378 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D7CB }, { 0x1D7CE, 0x1DA8B }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1DF00, 0x1DF1E }, { 0x1DF25, 0x1DF2A }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E030, 0x1E06D }, { 0x1E08F, 0x1E08F }, { 0x1E100, 0x1E12C }, { 0x1E130, 0x1E13D }, { 0x1E140, 0x1E149 }, { 0x1E14E, 0x1E14F }, { 0x1E290, 0x1E2AE }, { 0x1E2C0, 0x1E2F9 }, { 0x1E2FF, 0x1E2FF }, { 0x1E4D0, 0x1E4F9 }, { 0x1E7E0, 0x1E7E6 }, { 0x1E7E8, 0x1E7EB }, { 0x1E7ED, 0x1E7EE }, { 0x1E7F0, 0x1E7FE }, { 0x1E800, 0x1E8C4 }, { 0x1E8C7, 0x1E8D6 }, { 0x1E900, 0x1E94B }, { 0x1E950, 0x1E959 }, { 0x1E95E, 0x1E95F }, { 0x1EC71, 0x1ECB4 }, { 0x1ED01, 0x1ED3D }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x1EEF0, 0x1EEF1 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BF }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0F5 }, { 0x1F100, 0x1F1AD }, { 0x1F1E6, 0x1F202 }, { 0x1F210, 0x1F23B }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F260, 0x1F265 }, { 0x1F300, 0x1F6D7 }, { 0x1F6DC, 0x1F6EC }, { 0x1F6F0, 0x1F6FC }, { 0x1F700, 0x1F776 }, { 0x1F77B, 0x1F7D9 }, { 0x1F7E0, 0x1F7EB }, { 0x1F7F0, 0x1F7F0 }, { 0x1F800, 0x1F80B }, { 0x1F810, 0x1F847 }, { 0x1F850, 0x1F859 }, { 0x1F860, 0x1F887 }, { 0x1F890, 0x1F8AD }, { 0x1F8B0, 0x1F8B1 }, { 0x1F900, 0x1FA53 }, { 0x1FA60, 0x1FA6D }, { 0x1FA70, 0x1FA7C }, { 0x1FA80, 0x1FA88 }, { 0x1FA90, 0x1FABD }, { 0x1FABF, 0x1FAC5 }, { 0x1FACE, 0x1FADB }, { 0x1FAE0, 0x1FAE8 }, { 0x1FAF0, 0x1FAF8 }, { 0x1FB00, 0x1FB92 }, { 0x1FB94, 0x1FBCA }, { 0x1FBF0, 0x1FBF9 }, { 0x20000, 0x2A6DF }, { 0x2A700, 0x2B739 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } #define PREDICATE(c) uc_is_graph (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-ctype_lower.c����������������������������������������0000644�0001750�0001750�00000037135�14557510511�020162� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0061, 0x007A }, { 0x00B5, 0x00B5 }, { 0x00DF, 0x00F6 }, { 0x00F8, 0x00FF }, { 0x0101, 0x0101 }, { 0x0103, 0x0103 }, { 0x0105, 0x0105 }, { 0x0107, 0x0107 }, { 0x0109, 0x0109 }, { 0x010B, 0x010B }, { 0x010D, 0x010D }, { 0x010F, 0x010F }, { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x0115, 0x0115 }, { 0x0117, 0x0117 }, { 0x0119, 0x0119 }, { 0x011B, 0x011B }, { 0x011D, 0x011D }, { 0x011F, 0x011F }, { 0x0121, 0x0121 }, { 0x0123, 0x0123 }, { 0x0125, 0x0125 }, { 0x0127, 0x0127 }, { 0x0129, 0x0129 }, { 0x012B, 0x012B }, { 0x012D, 0x012D }, { 0x012F, 0x012F }, { 0x0131, 0x0131 }, { 0x0133, 0x0133 }, { 0x0135, 0x0135 }, { 0x0137, 0x0137 }, { 0x013A, 0x013A }, { 0x013C, 0x013C }, { 0x013E, 0x013E }, { 0x0140, 0x0140 }, { 0x0142, 0x0142 }, { 0x0144, 0x0144 }, { 0x0146, 0x0146 }, { 0x0148, 0x0148 }, { 0x014B, 0x014B }, { 0x014D, 0x014D }, { 0x014F, 0x014F }, { 0x0151, 0x0151 }, { 0x0153, 0x0153 }, { 0x0155, 0x0155 }, { 0x0157, 0x0157 }, { 0x0159, 0x0159 }, { 0x015B, 0x015B }, { 0x015D, 0x015D }, { 0x015F, 0x015F }, { 0x0161, 0x0161 }, { 0x0163, 0x0163 }, { 0x0165, 0x0165 }, { 0x0167, 0x0167 }, { 0x0169, 0x0169 }, { 0x016B, 0x016B }, { 0x016D, 0x016D }, { 0x016F, 0x016F }, { 0x0171, 0x0171 }, { 0x0173, 0x0173 }, { 0x0175, 0x0175 }, { 0x0177, 0x0177 }, { 0x017A, 0x017A }, { 0x017C, 0x017C }, { 0x017E, 0x0180 }, { 0x0183, 0x0183 }, { 0x0185, 0x0185 }, { 0x0188, 0x0188 }, { 0x018C, 0x018C }, { 0x0192, 0x0192 }, { 0x0195, 0x0195 }, { 0x0199, 0x019A }, { 0x019E, 0x019E }, { 0x01A1, 0x01A1 }, { 0x01A3, 0x01A3 }, { 0x01A5, 0x01A5 }, { 0x01A8, 0x01A8 }, { 0x01AD, 0x01AD }, { 0x01B0, 0x01B0 }, { 0x01B4, 0x01B4 }, { 0x01B6, 0x01B6 }, { 0x01B9, 0x01B9 }, { 0x01BD, 0x01BD }, { 0x01BF, 0x01BF }, { 0x01C5, 0x01C6 }, { 0x01C8, 0x01C9 }, { 0x01CB, 0x01CC }, { 0x01CE, 0x01CE }, { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 }, { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA }, { 0x01DC, 0x01DD }, { 0x01DF, 0x01DF }, { 0x01E1, 0x01E1 }, { 0x01E3, 0x01E3 }, { 0x01E5, 0x01E5 }, { 0x01E7, 0x01E7 }, { 0x01E9, 0x01E9 }, { 0x01EB, 0x01EB }, { 0x01ED, 0x01ED }, { 0x01EF, 0x01EF }, { 0x01F2, 0x01F3 }, { 0x01F5, 0x01F5 }, { 0x01F9, 0x01F9 }, { 0x01FB, 0x01FB }, { 0x01FD, 0x01FD }, { 0x01FF, 0x01FF }, { 0x0201, 0x0201 }, { 0x0203, 0x0203 }, { 0x0205, 0x0205 }, { 0x0207, 0x0207 }, { 0x0209, 0x0209 }, { 0x020B, 0x020B }, { 0x020D, 0x020D }, { 0x020F, 0x020F }, { 0x0211, 0x0211 }, { 0x0213, 0x0213 }, { 0x0215, 0x0215 }, { 0x0217, 0x0217 }, { 0x0219, 0x0219 }, { 0x021B, 0x021B }, { 0x021D, 0x021D }, { 0x021F, 0x021F }, { 0x0223, 0x0223 }, { 0x0225, 0x0225 }, { 0x0227, 0x0227 }, { 0x0229, 0x0229 }, { 0x022B, 0x022B }, { 0x022D, 0x022D }, { 0x022F, 0x022F }, { 0x0231, 0x0231 }, { 0x0233, 0x0233 }, { 0x023C, 0x023C }, { 0x023F, 0x0240 }, { 0x0242, 0x0242 }, { 0x0247, 0x0247 }, { 0x0249, 0x0249 }, { 0x024B, 0x024B }, { 0x024D, 0x024D }, { 0x024F, 0x0254 }, { 0x0256, 0x0257 }, { 0x0259, 0x0259 }, { 0x025B, 0x025C }, { 0x0260, 0x0261 }, { 0x0263, 0x0263 }, { 0x0265, 0x0266 }, { 0x0268, 0x026C }, { 0x026F, 0x026F }, { 0x0271, 0x0272 }, { 0x0275, 0x0275 }, { 0x027D, 0x027D }, { 0x0280, 0x0280 }, { 0x0282, 0x0283 }, { 0x0287, 0x028C }, { 0x0292, 0x0292 }, { 0x029D, 0x029E }, { 0x0345, 0x0345 }, { 0x0371, 0x0371 }, { 0x0373, 0x0373 }, { 0x0377, 0x0377 }, { 0x037B, 0x037D }, { 0x03AC, 0x03AF }, { 0x03B1, 0x03CE }, { 0x03D0, 0x03D1 }, { 0x03D5, 0x03D7 }, { 0x03D9, 0x03D9 }, { 0x03DB, 0x03DB }, { 0x03DD, 0x03DD }, { 0x03DF, 0x03DF }, { 0x03E1, 0x03E1 }, { 0x03E3, 0x03E3 }, { 0x03E5, 0x03E5 }, { 0x03E7, 0x03E7 }, { 0x03E9, 0x03E9 }, { 0x03EB, 0x03EB }, { 0x03ED, 0x03ED }, { 0x03EF, 0x03F3 }, { 0x03F5, 0x03F5 }, { 0x03F8, 0x03F8 }, { 0x03FB, 0x03FB }, { 0x0430, 0x045F }, { 0x0461, 0x0461 }, { 0x0463, 0x0463 }, { 0x0465, 0x0465 }, { 0x0467, 0x0467 }, { 0x0469, 0x0469 }, { 0x046B, 0x046B }, { 0x046D, 0x046D }, { 0x046F, 0x046F }, { 0x0471, 0x0471 }, { 0x0473, 0x0473 }, { 0x0475, 0x0475 }, { 0x0477, 0x0477 }, { 0x0479, 0x0479 }, { 0x047B, 0x047B }, { 0x047D, 0x047D }, { 0x047F, 0x047F }, { 0x0481, 0x0481 }, { 0x048B, 0x048B }, { 0x048D, 0x048D }, { 0x048F, 0x048F }, { 0x0491, 0x0491 }, { 0x0493, 0x0493 }, { 0x0495, 0x0495 }, { 0x0497, 0x0497 }, { 0x0499, 0x0499 }, { 0x049B, 0x049B }, { 0x049D, 0x049D }, { 0x049F, 0x049F }, { 0x04A1, 0x04A1 }, { 0x04A3, 0x04A3 }, { 0x04A5, 0x04A5 }, { 0x04A7, 0x04A7 }, { 0x04A9, 0x04A9 }, { 0x04AB, 0x04AB }, { 0x04AD, 0x04AD }, { 0x04AF, 0x04AF }, { 0x04B1, 0x04B1 }, { 0x04B3, 0x04B3 }, { 0x04B5, 0x04B5 }, { 0x04B7, 0x04B7 }, { 0x04B9, 0x04B9 }, { 0x04BB, 0x04BB }, { 0x04BD, 0x04BD }, { 0x04BF, 0x04BF }, { 0x04C2, 0x04C2 }, { 0x04C4, 0x04C4 }, { 0x04C6, 0x04C6 }, { 0x04C8, 0x04C8 }, { 0x04CA, 0x04CA }, { 0x04CC, 0x04CC }, { 0x04CE, 0x04CF }, { 0x04D1, 0x04D1 }, { 0x04D3, 0x04D3 }, { 0x04D5, 0x04D5 }, { 0x04D7, 0x04D7 }, { 0x04D9, 0x04D9 }, { 0x04DB, 0x04DB }, { 0x04DD, 0x04DD }, { 0x04DF, 0x04DF }, { 0x04E1, 0x04E1 }, { 0x04E3, 0x04E3 }, { 0x04E5, 0x04E5 }, { 0x04E7, 0x04E7 }, { 0x04E9, 0x04E9 }, { 0x04EB, 0x04EB }, { 0x04ED, 0x04ED }, { 0x04EF, 0x04EF }, { 0x04F1, 0x04F1 }, { 0x04F3, 0x04F3 }, { 0x04F5, 0x04F5 }, { 0x04F7, 0x04F7 }, { 0x04F9, 0x04F9 }, { 0x04FB, 0x04FB }, { 0x04FD, 0x04FD }, { 0x04FF, 0x04FF }, { 0x0501, 0x0501 }, { 0x0503, 0x0503 }, { 0x0505, 0x0505 }, { 0x0507, 0x0507 }, { 0x0509, 0x0509 }, { 0x050B, 0x050B }, { 0x050D, 0x050D }, { 0x050F, 0x050F }, { 0x0511, 0x0511 }, { 0x0513, 0x0513 }, { 0x0515, 0x0515 }, { 0x0517, 0x0517 }, { 0x0519, 0x0519 }, { 0x051B, 0x051B }, { 0x051D, 0x051D }, { 0x051F, 0x051F }, { 0x0521, 0x0521 }, { 0x0523, 0x0523 }, { 0x0525, 0x0525 }, { 0x0527, 0x0527 }, { 0x0529, 0x0529 }, { 0x052B, 0x052B }, { 0x052D, 0x052D }, { 0x052F, 0x052F }, { 0x0561, 0x0586 }, { 0x10D0, 0x10FA }, { 0x10FD, 0x10FF }, { 0x13F8, 0x13FD }, { 0x1C80, 0x1C88 }, { 0x1D79, 0x1D79 }, { 0x1D7D, 0x1D7D }, { 0x1D8E, 0x1D8E }, { 0x1E01, 0x1E01 }, { 0x1E03, 0x1E03 }, { 0x1E05, 0x1E05 }, { 0x1E07, 0x1E07 }, { 0x1E09, 0x1E09 }, { 0x1E0B, 0x1E0B }, { 0x1E0D, 0x1E0D }, { 0x1E0F, 0x1E0F }, { 0x1E11, 0x1E11 }, { 0x1E13, 0x1E13 }, { 0x1E15, 0x1E15 }, { 0x1E17, 0x1E17 }, { 0x1E19, 0x1E19 }, { 0x1E1B, 0x1E1B }, { 0x1E1D, 0x1E1D }, { 0x1E1F, 0x1E1F }, { 0x1E21, 0x1E21 }, { 0x1E23, 0x1E23 }, { 0x1E25, 0x1E25 }, { 0x1E27, 0x1E27 }, { 0x1E29, 0x1E29 }, { 0x1E2B, 0x1E2B }, { 0x1E2D, 0x1E2D }, { 0x1E2F, 0x1E2F }, { 0x1E31, 0x1E31 }, { 0x1E33, 0x1E33 }, { 0x1E35, 0x1E35 }, { 0x1E37, 0x1E37 }, { 0x1E39, 0x1E39 }, { 0x1E3B, 0x1E3B }, { 0x1E3D, 0x1E3D }, { 0x1E3F, 0x1E3F }, { 0x1E41, 0x1E41 }, { 0x1E43, 0x1E43 }, { 0x1E45, 0x1E45 }, { 0x1E47, 0x1E47 }, { 0x1E49, 0x1E49 }, { 0x1E4B, 0x1E4B }, { 0x1E4D, 0x1E4D }, { 0x1E4F, 0x1E4F }, { 0x1E51, 0x1E51 }, { 0x1E53, 0x1E53 }, { 0x1E55, 0x1E55 }, { 0x1E57, 0x1E57 }, { 0x1E59, 0x1E59 }, { 0x1E5B, 0x1E5B }, { 0x1E5D, 0x1E5D }, { 0x1E5F, 0x1E5F }, { 0x1E61, 0x1E61 }, { 0x1E63, 0x1E63 }, { 0x1E65, 0x1E65 }, { 0x1E67, 0x1E67 }, { 0x1E69, 0x1E69 }, { 0x1E6B, 0x1E6B }, { 0x1E6D, 0x1E6D }, { 0x1E6F, 0x1E6F }, { 0x1E71, 0x1E71 }, { 0x1E73, 0x1E73 }, { 0x1E75, 0x1E75 }, { 0x1E77, 0x1E77 }, { 0x1E79, 0x1E79 }, { 0x1E7B, 0x1E7B }, { 0x1E7D, 0x1E7D }, { 0x1E7F, 0x1E7F }, { 0x1E81, 0x1E81 }, { 0x1E83, 0x1E83 }, { 0x1E85, 0x1E85 }, { 0x1E87, 0x1E87 }, { 0x1E89, 0x1E89 }, { 0x1E8B, 0x1E8B }, { 0x1E8D, 0x1E8D }, { 0x1E8F, 0x1E8F }, { 0x1E91, 0x1E91 }, { 0x1E93, 0x1E93 }, { 0x1E95, 0x1E95 }, { 0x1E9B, 0x1E9B }, { 0x1EA1, 0x1EA1 }, { 0x1EA3, 0x1EA3 }, { 0x1EA5, 0x1EA5 }, { 0x1EA7, 0x1EA7 }, { 0x1EA9, 0x1EA9 }, { 0x1EAB, 0x1EAB }, { 0x1EAD, 0x1EAD }, { 0x1EAF, 0x1EAF }, { 0x1EB1, 0x1EB1 }, { 0x1EB3, 0x1EB3 }, { 0x1EB5, 0x1EB5 }, { 0x1EB7, 0x1EB7 }, { 0x1EB9, 0x1EB9 }, { 0x1EBB, 0x1EBB }, { 0x1EBD, 0x1EBD }, { 0x1EBF, 0x1EBF }, { 0x1EC1, 0x1EC1 }, { 0x1EC3, 0x1EC3 }, { 0x1EC5, 0x1EC5 }, { 0x1EC7, 0x1EC7 }, { 0x1EC9, 0x1EC9 }, { 0x1ECB, 0x1ECB }, { 0x1ECD, 0x1ECD }, { 0x1ECF, 0x1ECF }, { 0x1ED1, 0x1ED1 }, { 0x1ED3, 0x1ED3 }, { 0x1ED5, 0x1ED5 }, { 0x1ED7, 0x1ED7 }, { 0x1ED9, 0x1ED9 }, { 0x1EDB, 0x1EDB }, { 0x1EDD, 0x1EDD }, { 0x1EDF, 0x1EDF }, { 0x1EE1, 0x1EE1 }, { 0x1EE3, 0x1EE3 }, { 0x1EE5, 0x1EE5 }, { 0x1EE7, 0x1EE7 }, { 0x1EE9, 0x1EE9 }, { 0x1EEB, 0x1EEB }, { 0x1EED, 0x1EED }, { 0x1EEF, 0x1EEF }, { 0x1EF1, 0x1EF1 }, { 0x1EF3, 0x1EF3 }, { 0x1EF5, 0x1EF5 }, { 0x1EF7, 0x1EF7 }, { 0x1EF9, 0x1EF9 }, { 0x1EFB, 0x1EFB }, { 0x1EFD, 0x1EFD }, { 0x1EFF, 0x1F07 }, { 0x1F10, 0x1F15 }, { 0x1F20, 0x1F27 }, { 0x1F30, 0x1F37 }, { 0x1F40, 0x1F45 }, { 0x1F51, 0x1F51 }, { 0x1F53, 0x1F53 }, { 0x1F55, 0x1F55 }, { 0x1F57, 0x1F57 }, { 0x1F60, 0x1F67 }, { 0x1F70, 0x1F7D }, { 0x1F80, 0x1F87 }, { 0x1F90, 0x1F97 }, { 0x1FA0, 0x1FA7 }, { 0x1FB0, 0x1FB1 }, { 0x1FB3, 0x1FB3 }, { 0x1FBE, 0x1FBE }, { 0x1FC3, 0x1FC3 }, { 0x1FD0, 0x1FD1 }, { 0x1FE0, 0x1FE1 }, { 0x1FE5, 0x1FE5 }, { 0x1FF3, 0x1FF3 }, { 0x214E, 0x214E }, { 0x2170, 0x217F }, { 0x2184, 0x2184 }, { 0x24D0, 0x24E9 }, { 0x2C30, 0x2C5F }, { 0x2C61, 0x2C61 }, { 0x2C65, 0x2C66 }, { 0x2C68, 0x2C68 }, { 0x2C6A, 0x2C6A }, { 0x2C6C, 0x2C6C }, { 0x2C73, 0x2C73 }, { 0x2C76, 0x2C76 }, { 0x2C81, 0x2C81 }, { 0x2C83, 0x2C83 }, { 0x2C85, 0x2C85 }, { 0x2C87, 0x2C87 }, { 0x2C89, 0x2C89 }, { 0x2C8B, 0x2C8B }, { 0x2C8D, 0x2C8D }, { 0x2C8F, 0x2C8F }, { 0x2C91, 0x2C91 }, { 0x2C93, 0x2C93 }, { 0x2C95, 0x2C95 }, { 0x2C97, 0x2C97 }, { 0x2C99, 0x2C99 }, { 0x2C9B, 0x2C9B }, { 0x2C9D, 0x2C9D }, { 0x2C9F, 0x2C9F }, { 0x2CA1, 0x2CA1 }, { 0x2CA3, 0x2CA3 }, { 0x2CA5, 0x2CA5 }, { 0x2CA7, 0x2CA7 }, { 0x2CA9, 0x2CA9 }, { 0x2CAB, 0x2CAB }, { 0x2CAD, 0x2CAD }, { 0x2CAF, 0x2CAF }, { 0x2CB1, 0x2CB1 }, { 0x2CB3, 0x2CB3 }, { 0x2CB5, 0x2CB5 }, { 0x2CB7, 0x2CB7 }, { 0x2CB9, 0x2CB9 }, { 0x2CBB, 0x2CBB }, { 0x2CBD, 0x2CBD }, { 0x2CBF, 0x2CBF }, { 0x2CC1, 0x2CC1 }, { 0x2CC3, 0x2CC3 }, { 0x2CC5, 0x2CC5 }, { 0x2CC7, 0x2CC7 }, { 0x2CC9, 0x2CC9 }, { 0x2CCB, 0x2CCB }, { 0x2CCD, 0x2CCD }, { 0x2CCF, 0x2CCF }, { 0x2CD1, 0x2CD1 }, { 0x2CD3, 0x2CD3 }, { 0x2CD5, 0x2CD5 }, { 0x2CD7, 0x2CD7 }, { 0x2CD9, 0x2CD9 }, { 0x2CDB, 0x2CDB }, { 0x2CDD, 0x2CDD }, { 0x2CDF, 0x2CDF }, { 0x2CE1, 0x2CE1 }, { 0x2CE3, 0x2CE3 }, { 0x2CEC, 0x2CEC }, { 0x2CEE, 0x2CEE }, { 0x2CF3, 0x2CF3 }, { 0x2D00, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0xA641, 0xA641 }, { 0xA643, 0xA643 }, { 0xA645, 0xA645 }, { 0xA647, 0xA647 }, { 0xA649, 0xA649 }, { 0xA64B, 0xA64B }, { 0xA64D, 0xA64D }, { 0xA64F, 0xA64F }, { 0xA651, 0xA651 }, { 0xA653, 0xA653 }, { 0xA655, 0xA655 }, { 0xA657, 0xA657 }, { 0xA659, 0xA659 }, { 0xA65B, 0xA65B }, { 0xA65D, 0xA65D }, { 0xA65F, 0xA65F }, { 0xA661, 0xA661 }, { 0xA663, 0xA663 }, { 0xA665, 0xA665 }, { 0xA667, 0xA667 }, { 0xA669, 0xA669 }, { 0xA66B, 0xA66B }, { 0xA66D, 0xA66D }, { 0xA681, 0xA681 }, { 0xA683, 0xA683 }, { 0xA685, 0xA685 }, { 0xA687, 0xA687 }, { 0xA689, 0xA689 }, { 0xA68B, 0xA68B }, { 0xA68D, 0xA68D }, { 0xA68F, 0xA68F }, { 0xA691, 0xA691 }, { 0xA693, 0xA693 }, { 0xA695, 0xA695 }, { 0xA697, 0xA697 }, { 0xA699, 0xA699 }, { 0xA69B, 0xA69B }, { 0xA723, 0xA723 }, { 0xA725, 0xA725 }, { 0xA727, 0xA727 }, { 0xA729, 0xA729 }, { 0xA72B, 0xA72B }, { 0xA72D, 0xA72D }, { 0xA72F, 0xA72F }, { 0xA733, 0xA733 }, { 0xA735, 0xA735 }, { 0xA737, 0xA737 }, { 0xA739, 0xA739 }, { 0xA73B, 0xA73B }, { 0xA73D, 0xA73D }, { 0xA73F, 0xA73F }, { 0xA741, 0xA741 }, { 0xA743, 0xA743 }, { 0xA745, 0xA745 }, { 0xA747, 0xA747 }, { 0xA749, 0xA749 }, { 0xA74B, 0xA74B }, { 0xA74D, 0xA74D }, { 0xA74F, 0xA74F }, { 0xA751, 0xA751 }, { 0xA753, 0xA753 }, { 0xA755, 0xA755 }, { 0xA757, 0xA757 }, { 0xA759, 0xA759 }, { 0xA75B, 0xA75B }, { 0xA75D, 0xA75D }, { 0xA75F, 0xA75F }, { 0xA761, 0xA761 }, { 0xA763, 0xA763 }, { 0xA765, 0xA765 }, { 0xA767, 0xA767 }, { 0xA769, 0xA769 }, { 0xA76B, 0xA76B }, { 0xA76D, 0xA76D }, { 0xA76F, 0xA76F }, { 0xA77A, 0xA77A }, { 0xA77C, 0xA77C }, { 0xA77F, 0xA77F }, { 0xA781, 0xA781 }, { 0xA783, 0xA783 }, { 0xA785, 0xA785 }, { 0xA787, 0xA787 }, { 0xA78C, 0xA78C }, { 0xA791, 0xA791 }, { 0xA793, 0xA794 }, { 0xA797, 0xA797 }, { 0xA799, 0xA799 }, { 0xA79B, 0xA79B }, { 0xA79D, 0xA79D }, { 0xA79F, 0xA79F }, { 0xA7A1, 0xA7A1 }, { 0xA7A3, 0xA7A3 }, { 0xA7A5, 0xA7A5 }, { 0xA7A7, 0xA7A7 }, { 0xA7A9, 0xA7A9 }, { 0xA7B5, 0xA7B5 }, { 0xA7B7, 0xA7B7 }, { 0xA7B9, 0xA7B9 }, { 0xA7BB, 0xA7BB }, { 0xA7BD, 0xA7BD }, { 0xA7BF, 0xA7BF }, { 0xA7C1, 0xA7C1 }, { 0xA7C3, 0xA7C3 }, { 0xA7C8, 0xA7C8 }, { 0xA7CA, 0xA7CA }, { 0xA7D1, 0xA7D1 }, { 0xA7D7, 0xA7D7 }, { 0xA7D9, 0xA7D9 }, { 0xA7F6, 0xA7F6 }, { 0xAB53, 0xAB53 }, { 0xAB70, 0xABBF }, { 0xFF41, 0xFF5A }, { 0x10428, 0x1044F }, { 0x104D8, 0x104FB }, { 0x10597, 0x105A1 }, { 0x105A3, 0x105B1 }, { 0x105B3, 0x105B9 }, { 0x105BB, 0x105BC }, { 0x10CC0, 0x10CF2 }, { 0x118C0, 0x118DF }, { 0x16E60, 0x16E7F }, { 0x1E922, 0x1E943 } #define PREDICATE(c) uc_is_lower (c) #include "test-predicate-part2.h" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-ctype_print.c����������������������������������������0000644�0001750�0001750�00000044335�14557510511�020166� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0020, 0x007E }, { 0x00A0, 0x0377 }, { 0x037A, 0x037F }, { 0x0384, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x03A1 }, { 0x03A3, 0x052F }, { 0x0531, 0x0556 }, { 0x0559, 0x058A }, { 0x058D, 0x058F }, { 0x0591, 0x05C7 }, { 0x05D0, 0x05EA }, { 0x05EF, 0x05F4 }, { 0x0600, 0x070D }, { 0x070F, 0x074A }, { 0x074D, 0x07B1 }, { 0x07C0, 0x07FA }, { 0x07FD, 0x082D }, { 0x0830, 0x083E }, { 0x0840, 0x085B }, { 0x085E, 0x085E }, { 0x0860, 0x086A }, { 0x0870, 0x088E }, { 0x0890, 0x0891 }, { 0x0898, 0x0983 }, { 0x0985, 0x098C }, { 0x098F, 0x0990 }, { 0x0993, 0x09A8 }, { 0x09AA, 0x09B0 }, { 0x09B2, 0x09B2 }, { 0x09B6, 0x09B9 }, { 0x09BC, 0x09C4 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CE }, { 0x09D7, 0x09D7 }, { 0x09DC, 0x09DD }, { 0x09DF, 0x09E3 }, { 0x09E6, 0x09FE }, { 0x0A01, 0x0A03 }, { 0x0A05, 0x0A0A }, { 0x0A0F, 0x0A10 }, { 0x0A13, 0x0A28 }, { 0x0A2A, 0x0A30 }, { 0x0A32, 0x0A33 }, { 0x0A35, 0x0A36 }, { 0x0A38, 0x0A39 }, { 0x0A3C, 0x0A3C }, { 0x0A3E, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A59, 0x0A5C }, { 0x0A5E, 0x0A5E }, { 0x0A66, 0x0A76 }, { 0x0A81, 0x0A83 }, { 0x0A85, 0x0A8D }, { 0x0A8F, 0x0A91 }, { 0x0A93, 0x0AA8 }, { 0x0AAA, 0x0AB0 }, { 0x0AB2, 0x0AB3 }, { 0x0AB5, 0x0AB9 }, { 0x0ABC, 0x0AC5 }, { 0x0AC7, 0x0AC9 }, { 0x0ACB, 0x0ACD }, { 0x0AD0, 0x0AD0 }, { 0x0AE0, 0x0AE3 }, { 0x0AE6, 0x0AF1 }, { 0x0AF9, 0x0AFF }, { 0x0B01, 0x0B03 }, { 0x0B05, 0x0B0C }, { 0x0B0F, 0x0B10 }, { 0x0B13, 0x0B28 }, { 0x0B2A, 0x0B30 }, { 0x0B32, 0x0B33 }, { 0x0B35, 0x0B39 }, { 0x0B3C, 0x0B44 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4D }, { 0x0B55, 0x0B57 }, { 0x0B5C, 0x0B5D }, { 0x0B5F, 0x0B63 }, { 0x0B66, 0x0B77 }, { 0x0B82, 0x0B83 }, { 0x0B85, 0x0B8A }, { 0x0B8E, 0x0B90 }, { 0x0B92, 0x0B95 }, { 0x0B99, 0x0B9A }, { 0x0B9C, 0x0B9C }, { 0x0B9E, 0x0B9F }, { 0x0BA3, 0x0BA4 }, { 0x0BA8, 0x0BAA }, { 0x0BAE, 0x0BB9 }, { 0x0BBE, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCD }, { 0x0BD0, 0x0BD0 }, { 0x0BD7, 0x0BD7 }, { 0x0BE6, 0x0BFA }, { 0x0C00, 0x0C0C }, { 0x0C0E, 0x0C10 }, { 0x0C12, 0x0C28 }, { 0x0C2A, 0x0C39 }, { 0x0C3C, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C58, 0x0C5A }, { 0x0C5D, 0x0C5D }, { 0x0C60, 0x0C63 }, { 0x0C66, 0x0C6F }, { 0x0C77, 0x0C8C }, { 0x0C8E, 0x0C90 }, { 0x0C92, 0x0CA8 }, { 0x0CAA, 0x0CB3 }, { 0x0CB5, 0x0CB9 }, { 0x0CBC, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CDD, 0x0CDE }, { 0x0CE0, 0x0CE3 }, { 0x0CE6, 0x0CEF }, { 0x0CF1, 0x0CF3 }, { 0x0D00, 0x0D0C }, { 0x0D0E, 0x0D10 }, { 0x0D12, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4F }, { 0x0D54, 0x0D63 }, { 0x0D66, 0x0D7F }, { 0x0D81, 0x0D83 }, { 0x0D85, 0x0D96 }, { 0x0D9A, 0x0DB1 }, { 0x0DB3, 0x0DBB }, { 0x0DBD, 0x0DBD }, { 0x0DC0, 0x0DC6 }, { 0x0DCA, 0x0DCA }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 0x0DE6, 0x0DEF }, { 0x0DF2, 0x0DF4 }, { 0x0E01, 0x0E3A }, { 0x0E3F, 0x0E5B }, { 0x0E81, 0x0E82 }, { 0x0E84, 0x0E84 }, { 0x0E86, 0x0E8A }, { 0x0E8C, 0x0EA3 }, { 0x0EA5, 0x0EA5 }, { 0x0EA7, 0x0EBD }, { 0x0EC0, 0x0EC4 }, { 0x0EC6, 0x0EC6 }, { 0x0EC8, 0x0ECE }, { 0x0ED0, 0x0ED9 }, { 0x0EDC, 0x0EDF }, { 0x0F00, 0x0F47 }, { 0x0F49, 0x0F6C }, { 0x0F71, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FBE, 0x0FCC }, { 0x0FCE, 0x0FDA }, { 0x1000, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x10D0, 0x1248 }, { 0x124A, 0x124D }, { 0x1250, 0x1256 }, { 0x1258, 0x1258 }, { 0x125A, 0x125D }, { 0x1260, 0x1288 }, { 0x128A, 0x128D }, { 0x1290, 0x12B0 }, { 0x12B2, 0x12B5 }, { 0x12B8, 0x12BE }, { 0x12C0, 0x12C0 }, { 0x12C2, 0x12C5 }, { 0x12C8, 0x12D6 }, { 0x12D8, 0x1310 }, { 0x1312, 0x1315 }, { 0x1318, 0x135A }, { 0x135D, 0x137C }, { 0x1380, 0x1399 }, { 0x13A0, 0x13F5 }, { 0x13F8, 0x13FD }, { 0x1400, 0x169C }, { 0x16A0, 0x16F8 }, { 0x1700, 0x1715 }, { 0x171F, 0x1736 }, { 0x1740, 0x1753 }, { 0x1760, 0x176C }, { 0x176E, 0x1770 }, { 0x1772, 0x1773 }, { 0x1780, 0x17DD }, { 0x17E0, 0x17E9 }, { 0x17F0, 0x17F9 }, { 0x1800, 0x1819 }, { 0x1820, 0x1878 }, { 0x1880, 0x18AA }, { 0x18B0, 0x18F5 }, { 0x1900, 0x191E }, { 0x1920, 0x192B }, { 0x1930, 0x193B }, { 0x1940, 0x1940 }, { 0x1944, 0x196D }, { 0x1970, 0x1974 }, { 0x1980, 0x19AB }, { 0x19B0, 0x19C9 }, { 0x19D0, 0x19DA }, { 0x19DE, 0x1A1B }, { 0x1A1E, 0x1A5E }, { 0x1A60, 0x1A7C }, { 0x1A7F, 0x1A89 }, { 0x1A90, 0x1A99 }, { 0x1AA0, 0x1AAD }, { 0x1AB0, 0x1ACE }, { 0x1B00, 0x1B4C }, { 0x1B50, 0x1B7E }, { 0x1B80, 0x1BF3 }, { 0x1BFC, 0x1C37 }, { 0x1C3B, 0x1C49 }, { 0x1C4D, 0x1C88 }, { 0x1C90, 0x1CBA }, { 0x1CBD, 0x1CC7 }, { 0x1CD0, 0x1CFA }, { 0x1D00, 0x1F15 }, { 0x1F18, 0x1F1D }, { 0x1F20, 0x1F45 }, { 0x1F48, 0x1F4D }, { 0x1F50, 0x1F57 }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F7D }, { 0x1F80, 0x1FB4 }, { 0x1FB6, 0x1FC4 }, { 0x1FC6, 0x1FD3 }, { 0x1FD6, 0x1FDB }, { 0x1FDD, 0x1FEF }, { 0x1FF2, 0x1FF4 }, { 0x1FF6, 0x1FFE }, { 0x2000, 0x2027 }, { 0x202A, 0x2064 }, { 0x2066, 0x2071 }, { 0x2074, 0x208E }, { 0x2090, 0x209C }, { 0x20A0, 0x20C0 }, { 0x20D0, 0x20F0 }, { 0x2100, 0x218B }, { 0x2190, 0x2426 }, { 0x2440, 0x244A }, { 0x2460, 0x2B73 }, { 0x2B76, 0x2B95 }, { 0x2B97, 0x2CF3 }, { 0x2CF9, 0x2D25 }, { 0x2D27, 0x2D27 }, { 0x2D2D, 0x2D2D }, { 0x2D30, 0x2D67 }, { 0x2D6F, 0x2D70 }, { 0x2D7F, 0x2D96 }, { 0x2DA0, 0x2DA6 }, { 0x2DA8, 0x2DAE }, { 0x2DB0, 0x2DB6 }, { 0x2DB8, 0x2DBE }, { 0x2DC0, 0x2DC6 }, { 0x2DC8, 0x2DCE }, { 0x2DD0, 0x2DD6 }, { 0x2DD8, 0x2DDE }, { 0x2DE0, 0x2E5D }, { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x303F }, { 0x3041, 0x3096 }, { 0x3099, 0x30FF }, { 0x3105, 0x312F }, { 0x3131, 0x318E }, { 0x3190, 0x31E3 }, { 0x31EF, 0x321E }, { 0x3220, 0xA48C }, { 0xA490, 0xA4C6 }, { 0xA4D0, 0xA62B }, { 0xA640, 0xA6F7 }, { 0xA700, 0xA7CA }, { 0xA7D0, 0xA7D1 }, { 0xA7D3, 0xA7D3 }, { 0xA7D5, 0xA7D9 }, { 0xA7F2, 0xA82C }, { 0xA830, 0xA839 }, { 0xA840, 0xA877 }, { 0xA880, 0xA8C5 }, { 0xA8CE, 0xA8D9 }, { 0xA8E0, 0xA953 }, { 0xA95F, 0xA97C }, { 0xA980, 0xA9CD }, { 0xA9CF, 0xA9D9 }, { 0xA9DE, 0xA9FE }, { 0xAA00, 0xAA36 }, { 0xAA40, 0xAA4D }, { 0xAA50, 0xAA59 }, { 0xAA5C, 0xAAC2 }, { 0xAADB, 0xAAF6 }, { 0xAB01, 0xAB06 }, { 0xAB09, 0xAB0E }, { 0xAB11, 0xAB16 }, { 0xAB20, 0xAB26 }, { 0xAB28, 0xAB2E }, { 0xAB30, 0xAB6B }, { 0xAB70, 0xABED }, { 0xABF0, 0xABF9 }, { 0xAC00, 0xD7A3 }, { 0xD7B0, 0xD7C6 }, { 0xD7CB, 0xD7FB }, { 0xE000, 0xFA6D }, { 0xFA70, 0xFAD9 }, { 0xFB00, 0xFB06 }, { 0xFB13, 0xFB17 }, { 0xFB1D, 0xFB36 }, { 0xFB38, 0xFB3C }, { 0xFB3E, 0xFB3E }, { 0xFB40, 0xFB41 }, { 0xFB43, 0xFB44 }, { 0xFB46, 0xFBC2 }, { 0xFBD3, 0xFD8F }, { 0xFD92, 0xFDC7 }, { 0xFDCF, 0xFDCF }, { 0xFDF0, 0xFE19 }, { 0xFE20, 0xFE52 }, { 0xFE54, 0xFE66 }, { 0xFE68, 0xFE6B }, { 0xFE70, 0xFE74 }, { 0xFE76, 0xFEFC }, { 0xFEFF, 0xFEFF }, { 0xFF01, 0xFFBE }, { 0xFFC2, 0xFFC7 }, { 0xFFCA, 0xFFCF }, { 0xFFD2, 0xFFD7 }, { 0xFFDA, 0xFFDC }, { 0xFFE0, 0xFFE6 }, { 0xFFE8, 0xFFEE }, { 0xFFF9, 0xFFFD }, { 0x10000, 0x1000B }, { 0x1000D, 0x10026 }, { 0x10028, 0x1003A }, { 0x1003C, 0x1003D }, { 0x1003F, 0x1004D }, { 0x10050, 0x1005D }, { 0x10080, 0x100FA }, { 0x10100, 0x10102 }, { 0x10107, 0x10133 }, { 0x10137, 0x1018E }, { 0x10190, 0x1019C }, { 0x101A0, 0x101A0 }, { 0x101D0, 0x101FD }, { 0x10280, 0x1029C }, { 0x102A0, 0x102D0 }, { 0x102E0, 0x102FB }, { 0x10300, 0x10323 }, { 0x1032D, 0x1034A }, { 0x10350, 0x1037A }, { 0x10380, 0x1039D }, { 0x1039F, 0x103C3 }, { 0x103C8, 0x103D5 }, { 0x10400, 0x1049D }, { 0x104A0, 0x104A9 }, { 0x104B0, 0x104D3 }, { 0x104D8, 0x104FB }, { 0x10500, 0x10527 }, { 0x10530, 0x10563 }, { 0x1056F, 0x1057A }, { 0x1057C, 0x1058A }, { 0x1058C, 0x10592 }, { 0x10594, 0x10595 }, { 0x10597, 0x105A1 }, { 0x105A3, 0x105B1 }, { 0x105B3, 0x105B9 }, { 0x105BB, 0x105BC }, { 0x10600, 0x10736 }, { 0x10740, 0x10755 }, { 0x10760, 0x10767 }, { 0x10780, 0x10785 }, { 0x10787, 0x107B0 }, { 0x107B2, 0x107BA }, { 0x10800, 0x10805 }, { 0x10808, 0x10808 }, { 0x1080A, 0x10835 }, { 0x10837, 0x10838 }, { 0x1083C, 0x1083C }, { 0x1083F, 0x10855 }, { 0x10857, 0x1089E }, { 0x108A7, 0x108AF }, { 0x108E0, 0x108F2 }, { 0x108F4, 0x108F5 }, { 0x108FB, 0x1091B }, { 0x1091F, 0x10939 }, { 0x1093F, 0x1093F }, { 0x10980, 0x109B7 }, { 0x109BC, 0x109CF }, { 0x109D2, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A13 }, { 0x10A15, 0x10A17 }, { 0x10A19, 0x10A35 }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A48 }, { 0x10A50, 0x10A58 }, { 0x10A60, 0x10A9F }, { 0x10AC0, 0x10AE6 }, { 0x10AEB, 0x10AF6 }, { 0x10B00, 0x10B35 }, { 0x10B39, 0x10B55 }, { 0x10B58, 0x10B72 }, { 0x10B78, 0x10B91 }, { 0x10B99, 0x10B9C }, { 0x10BA9, 0x10BAF }, { 0x10C00, 0x10C48 }, { 0x10C80, 0x10CB2 }, { 0x10CC0, 0x10CF2 }, { 0x10CFA, 0x10D27 }, { 0x10D30, 0x10D39 }, { 0x10E60, 0x10E7E }, { 0x10E80, 0x10EA9 }, { 0x10EAB, 0x10EAD }, { 0x10EB0, 0x10EB1 }, { 0x10EFD, 0x10F27 }, { 0x10F30, 0x10F59 }, { 0x10F70, 0x10F89 }, { 0x10FB0, 0x10FCB }, { 0x10FE0, 0x10FF6 }, { 0x11000, 0x1104D }, { 0x11052, 0x11075 }, { 0x1107F, 0x110C2 }, { 0x110CD, 0x110CD }, { 0x110D0, 0x110E8 }, { 0x110F0, 0x110F9 }, { 0x11100, 0x11134 }, { 0x11136, 0x11147 }, { 0x11150, 0x11176 }, { 0x11180, 0x111DF }, { 0x111E1, 0x111F4 }, { 0x11200, 0x11211 }, { 0x11213, 0x11241 }, { 0x11280, 0x11286 }, { 0x11288, 0x11288 }, { 0x1128A, 0x1128D }, { 0x1128F, 0x1129D }, { 0x1129F, 0x112A9 }, { 0x112B0, 0x112EA }, { 0x112F0, 0x112F9 }, { 0x11300, 0x11303 }, { 0x11305, 0x1130C }, { 0x1130F, 0x11310 }, { 0x11313, 0x11328 }, { 0x1132A, 0x11330 }, { 0x11332, 0x11333 }, { 0x11335, 0x11339 }, { 0x1133B, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134D }, { 0x11350, 0x11350 }, { 0x11357, 0x11357 }, { 0x1135D, 0x11363 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11400, 0x1145B }, { 0x1145D, 0x11461 }, { 0x11480, 0x114C7 }, { 0x114D0, 0x114D9 }, { 0x11580, 0x115B5 }, { 0x115B8, 0x115DD }, { 0x11600, 0x11644 }, { 0x11650, 0x11659 }, { 0x11660, 0x1166C }, { 0x11680, 0x116B9 }, { 0x116C0, 0x116C9 }, { 0x11700, 0x1171A }, { 0x1171D, 0x1172B }, { 0x11730, 0x11746 }, { 0x11800, 0x1183B }, { 0x118A0, 0x118F2 }, { 0x118FF, 0x11906 }, { 0x11909, 0x11909 }, { 0x1190C, 0x11913 }, { 0x11915, 0x11916 }, { 0x11918, 0x11935 }, { 0x11937, 0x11938 }, { 0x1193B, 0x11946 }, { 0x11950, 0x11959 }, { 0x119A0, 0x119A7 }, { 0x119AA, 0x119D7 }, { 0x119DA, 0x119E4 }, { 0x11A00, 0x11A47 }, { 0x11A50, 0x11AA2 }, { 0x11AB0, 0x11AF8 }, { 0x11B00, 0x11B09 }, { 0x11C00, 0x11C08 }, { 0x11C0A, 0x11C36 }, { 0x11C38, 0x11C45 }, { 0x11C50, 0x11C6C }, { 0x11C70, 0x11C8F }, { 0x11C92, 0x11CA7 }, { 0x11CA9, 0x11CB6 }, { 0x11D00, 0x11D06 }, { 0x11D08, 0x11D09 }, { 0x11D0B, 0x11D36 }, { 0x11D3A, 0x11D3A }, { 0x11D3C, 0x11D3D }, { 0x11D3F, 0x11D47 }, { 0x11D50, 0x11D59 }, { 0x11D60, 0x11D65 }, { 0x11D67, 0x11D68 }, { 0x11D6A, 0x11D8E }, { 0x11D90, 0x11D91 }, { 0x11D93, 0x11D98 }, { 0x11DA0, 0x11DA9 }, { 0x11EE0, 0x11EF8 }, { 0x11F00, 0x11F10 }, { 0x11F12, 0x11F3A }, { 0x11F3E, 0x11F59 }, { 0x11FB0, 0x11FB0 }, { 0x11FC0, 0x11FF1 }, { 0x11FFF, 0x12399 }, { 0x12400, 0x1246E }, { 0x12470, 0x12474 }, { 0x12480, 0x12543 }, { 0x12F90, 0x12FF2 }, { 0x13000, 0x13455 }, { 0x14400, 0x14646 }, { 0x16800, 0x16A38 }, { 0x16A40, 0x16A5E }, { 0x16A60, 0x16A69 }, { 0x16A6E, 0x16ABE }, { 0x16AC0, 0x16AC9 }, { 0x16AD0, 0x16AED }, { 0x16AF0, 0x16AF5 }, { 0x16B00, 0x16B45 }, { 0x16B50, 0x16B59 }, { 0x16B5B, 0x16B61 }, { 0x16B63, 0x16B77 }, { 0x16B7D, 0x16B8F }, { 0x16E40, 0x16E9A }, { 0x16F00, 0x16F4A }, { 0x16F4F, 0x16F87 }, { 0x16F8F, 0x16F9F }, { 0x16FE0, 0x16FE4 }, { 0x16FF0, 0x16FF1 }, { 0x17000, 0x187F7 }, { 0x18800, 0x18CD5 }, { 0x18D00, 0x18D08 }, { 0x1AFF0, 0x1AFF3 }, { 0x1AFF5, 0x1AFFB }, { 0x1AFFD, 0x1AFFE }, { 0x1B000, 0x1B122 }, { 0x1B132, 0x1B132 }, { 0x1B150, 0x1B152 }, { 0x1B155, 0x1B155 }, { 0x1B164, 0x1B167 }, { 0x1B170, 0x1B2FB }, { 0x1BC00, 0x1BC6A }, { 0x1BC70, 0x1BC7C }, { 0x1BC80, 0x1BC88 }, { 0x1BC90, 0x1BC99 }, { 0x1BC9C, 0x1BCA3 }, { 0x1CF00, 0x1CF2D }, { 0x1CF30, 0x1CF46 }, { 0x1CF50, 0x1CFC3 }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D1EA }, { 0x1D200, 0x1D245 }, { 0x1D2C0, 0x1D2D3 }, { 0x1D2E0, 0x1D2F3 }, { 0x1D300, 0x1D356 }, { 0x1D360, 0x1D378 }, { 0x1D400, 0x1D454 }, { 0x1D456, 0x1D49C }, { 0x1D49E, 0x1D49F }, { 0x1D4A2, 0x1D4A2 }, { 0x1D4A5, 0x1D4A6 }, { 0x1D4A9, 0x1D4AC }, { 0x1D4AE, 0x1D4B9 }, { 0x1D4BB, 0x1D4BB }, { 0x1D4BD, 0x1D4C3 }, { 0x1D4C5, 0x1D505 }, { 0x1D507, 0x1D50A }, { 0x1D50D, 0x1D514 }, { 0x1D516, 0x1D51C }, { 0x1D51E, 0x1D539 }, { 0x1D53B, 0x1D53E }, { 0x1D540, 0x1D544 }, { 0x1D546, 0x1D546 }, { 0x1D54A, 0x1D550 }, { 0x1D552, 0x1D6A5 }, { 0x1D6A8, 0x1D7CB }, { 0x1D7CE, 0x1DA8B }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1DF00, 0x1DF1E }, { 0x1DF25, 0x1DF2A }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E030, 0x1E06D }, { 0x1E08F, 0x1E08F }, { 0x1E100, 0x1E12C }, { 0x1E130, 0x1E13D }, { 0x1E140, 0x1E149 }, { 0x1E14E, 0x1E14F }, { 0x1E290, 0x1E2AE }, { 0x1E2C0, 0x1E2F9 }, { 0x1E2FF, 0x1E2FF }, { 0x1E4D0, 0x1E4F9 }, { 0x1E7E0, 0x1E7E6 }, { 0x1E7E8, 0x1E7EB }, { 0x1E7ED, 0x1E7EE }, { 0x1E7F0, 0x1E7FE }, { 0x1E800, 0x1E8C4 }, { 0x1E8C7, 0x1E8D6 }, { 0x1E900, 0x1E94B }, { 0x1E950, 0x1E959 }, { 0x1E95E, 0x1E95F }, { 0x1EC71, 0x1ECB4 }, { 0x1ED01, 0x1ED3D }, { 0x1EE00, 0x1EE03 }, { 0x1EE05, 0x1EE1F }, { 0x1EE21, 0x1EE22 }, { 0x1EE24, 0x1EE24 }, { 0x1EE27, 0x1EE27 }, { 0x1EE29, 0x1EE32 }, { 0x1EE34, 0x1EE37 }, { 0x1EE39, 0x1EE39 }, { 0x1EE3B, 0x1EE3B }, { 0x1EE42, 0x1EE42 }, { 0x1EE47, 0x1EE47 }, { 0x1EE49, 0x1EE49 }, { 0x1EE4B, 0x1EE4B }, { 0x1EE4D, 0x1EE4F }, { 0x1EE51, 0x1EE52 }, { 0x1EE54, 0x1EE54 }, { 0x1EE57, 0x1EE57 }, { 0x1EE59, 0x1EE59 }, { 0x1EE5B, 0x1EE5B }, { 0x1EE5D, 0x1EE5D }, { 0x1EE5F, 0x1EE5F }, { 0x1EE61, 0x1EE62 }, { 0x1EE64, 0x1EE64 }, { 0x1EE67, 0x1EE6A }, { 0x1EE6C, 0x1EE72 }, { 0x1EE74, 0x1EE77 }, { 0x1EE79, 0x1EE7C }, { 0x1EE7E, 0x1EE7E }, { 0x1EE80, 0x1EE89 }, { 0x1EE8B, 0x1EE9B }, { 0x1EEA1, 0x1EEA3 }, { 0x1EEA5, 0x1EEA9 }, { 0x1EEAB, 0x1EEBB }, { 0x1EEF0, 0x1EEF1 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BF }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0F5 }, { 0x1F100, 0x1F1AD }, { 0x1F1E6, 0x1F202 }, { 0x1F210, 0x1F23B }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F260, 0x1F265 }, { 0x1F300, 0x1F6D7 }, { 0x1F6DC, 0x1F6EC }, { 0x1F6F0, 0x1F6FC }, { 0x1F700, 0x1F776 }, { 0x1F77B, 0x1F7D9 }, { 0x1F7E0, 0x1F7EB }, { 0x1F7F0, 0x1F7F0 }, { 0x1F800, 0x1F80B }, { 0x1F810, 0x1F847 }, { 0x1F850, 0x1F859 }, { 0x1F860, 0x1F887 }, { 0x1F890, 0x1F8AD }, { 0x1F8B0, 0x1F8B1 }, { 0x1F900, 0x1FA53 }, { 0x1FA60, 0x1FA6D }, { 0x1FA70, 0x1FA7C }, { 0x1FA80, 0x1FA88 }, { 0x1FA90, 0x1FABD }, { 0x1FABF, 0x1FAC5 }, { 0x1FACE, 0x1FADB }, { 0x1FAE0, 0x1FAE8 }, { 0x1FAF0, 0x1FAF8 }, { 0x1FB00, 0x1FB92 }, { 0x1FB94, 0x1FBCA }, { 0x1FBF0, 0x1FBF9 }, { 0x20000, 0x2A6DF }, { 0x2A700, 0x2B739 }, { 0x2B740, 0x2B81D }, { 0x2B820, 0x2CEA1 }, { 0x2CEB0, 0x2EBE0 }, { 0x2EBF0, 0x2EE5D }, { 0x2F800, 0x2FA1D }, { 0x30000, 0x3134A }, { 0x31350, 0x323AF }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } #define PREDICATE(c) uc_is_print (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-ctype_punct.c����������������������������������������0000644�0001750�0001750�00000035213�14557510511�020156� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0021, 0x002F }, { 0x003A, 0x0040 }, { 0x005B, 0x0060 }, { 0x007B, 0x007E }, { 0x00A0, 0x00A9 }, { 0x00AB, 0x00B4 }, { 0x00B6, 0x00B9 }, { 0x00BB, 0x00BF }, { 0x00D7, 0x00D7 }, { 0x00F7, 0x00F7 }, { 0x02C2, 0x02C5 }, { 0x02D2, 0x02DF }, { 0x02E5, 0x02EB }, { 0x02ED, 0x02ED }, { 0x02EF, 0x0344 }, { 0x0346, 0x036F }, { 0x0375, 0x0375 }, { 0x037E, 0x037E }, { 0x0384, 0x0385 }, { 0x0387, 0x0387 }, { 0x03F6, 0x03F6 }, { 0x0482, 0x0489 }, { 0x055A, 0x055F }, { 0x0589, 0x058A }, { 0x058D, 0x058F }, { 0x0591, 0x05C7 }, { 0x05F3, 0x05F4 }, { 0x0600, 0x061F }, { 0x064B, 0x065F }, { 0x066A, 0x066D }, { 0x0670, 0x0670 }, { 0x06D4, 0x06D4 }, { 0x06D6, 0x06E4 }, { 0x06E7, 0x06ED }, { 0x06FD, 0x06FE }, { 0x0700, 0x070D }, { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x07F6, 0x07F9 }, { 0x07FD, 0x07FF }, { 0x0816, 0x0819 }, { 0x081B, 0x0823 }, { 0x0825, 0x0827 }, { 0x0829, 0x082D }, { 0x0830, 0x083E }, { 0x0859, 0x085B }, { 0x085E, 0x085E }, { 0x0888, 0x0888 }, { 0x0890, 0x0891 }, { 0x0898, 0x089F }, { 0x08CA, 0x0903 }, { 0x093A, 0x093C }, { 0x093E, 0x094F }, { 0x0951, 0x0957 }, { 0x0962, 0x0965 }, { 0x0970, 0x0970 }, { 0x0981, 0x0983 }, { 0x09BC, 0x09BC }, { 0x09BE, 0x09C4 }, { 0x09C7, 0x09C8 }, { 0x09CB, 0x09CD }, { 0x09D7, 0x09D7 }, { 0x09E2, 0x09E3 }, { 0x09F2, 0x09FB }, { 0x09FD, 0x09FE }, { 0x0A01, 0x0A03 }, { 0x0A3C, 0x0A3C }, { 0x0A3E, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A51, 0x0A51 }, { 0x0A70, 0x0A71 }, { 0x0A75, 0x0A76 }, { 0x0A81, 0x0A83 }, { 0x0ABC, 0x0ABC }, { 0x0ABE, 0x0AC5 }, { 0x0AC7, 0x0AC9 }, { 0x0ACB, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0AF0, 0x0AF1 }, { 0x0AFA, 0x0AFF }, { 0x0B01, 0x0B03 }, { 0x0B3C, 0x0B3C }, { 0x0B3E, 0x0B44 }, { 0x0B47, 0x0B48 }, { 0x0B4B, 0x0B4D }, { 0x0B55, 0x0B57 }, { 0x0B62, 0x0B63 }, { 0x0B70, 0x0B70 }, { 0x0B72, 0x0B77 }, { 0x0B82, 0x0B82 }, { 0x0BBE, 0x0BC2 }, { 0x0BC6, 0x0BC8 }, { 0x0BCA, 0x0BCD }, { 0x0BD7, 0x0BD7 }, { 0x0BF0, 0x0BFA }, { 0x0C00, 0x0C04 }, { 0x0C3C, 0x0C3C }, { 0x0C3E, 0x0C44 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0C62, 0x0C63 }, { 0x0C77, 0x0C7F }, { 0x0C81, 0x0C84 }, { 0x0CBC, 0x0CBC }, { 0x0CBE, 0x0CC4 }, { 0x0CC6, 0x0CC8 }, { 0x0CCA, 0x0CCD }, { 0x0CD5, 0x0CD6 }, { 0x0CE2, 0x0CE3 }, { 0x0CF3, 0x0CF3 }, { 0x0D00, 0x0D03 }, { 0x0D3B, 0x0D3C }, { 0x0D3E, 0x0D44 }, { 0x0D46, 0x0D48 }, { 0x0D4A, 0x0D4D }, { 0x0D4F, 0x0D4F }, { 0x0D57, 0x0D5E }, { 0x0D62, 0x0D63 }, { 0x0D70, 0x0D79 }, { 0x0D81, 0x0D83 }, { 0x0DCA, 0x0DCA }, { 0x0DCF, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0DD8, 0x0DDF }, { 0x0DF2, 0x0DF4 }, { 0x0E2F, 0x0E2F }, { 0x0E3F, 0x0E3F }, { 0x0E46, 0x0E46 }, { 0x0E4F, 0x0E4F }, { 0x0E5A, 0x0E5B }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EBC }, { 0x0EC8, 0x0ECE }, { 0x0F01, 0x0F1F }, { 0x0F2A, 0x0F3F }, { 0x0F71, 0x0F87 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FBE, 0x0FCC }, { 0x0FCE, 0x0FDA }, { 0x102B, 0x103E }, { 0x104A, 0x104F }, { 0x1056, 0x1059 }, { 0x105E, 0x1060 }, { 0x1062, 0x1064 }, { 0x1067, 0x106D }, { 0x1071, 0x1074 }, { 0x1082, 0x108D }, { 0x108F, 0x108F }, { 0x109A, 0x109F }, { 0x10FB, 0x10FB }, { 0x135D, 0x137C }, { 0x1390, 0x1399 }, { 0x1400, 0x1400 }, { 0x166D, 0x166E }, { 0x169B, 0x169C }, { 0x16EB, 0x16ED }, { 0x1712, 0x1715 }, { 0x1732, 0x1736 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17D6 }, { 0x17D8, 0x17DB }, { 0x17DD, 0x17DD }, { 0x17F0, 0x17F9 }, { 0x1800, 0x180F }, { 0x1885, 0x1886 }, { 0x18A9, 0x18A9 }, { 0x1920, 0x192B }, { 0x1930, 0x193B }, { 0x1940, 0x1940 }, { 0x1944, 0x1945 }, { 0x19DA, 0x19DA }, { 0x19DE, 0x19FF }, { 0x1A17, 0x1A1B }, { 0x1A1E, 0x1A1F }, { 0x1A55, 0x1A5E }, { 0x1A60, 0x1A7C }, { 0x1A7F, 0x1A7F }, { 0x1AA0, 0x1AA6 }, { 0x1AA8, 0x1AAD }, { 0x1AB0, 0x1ACE }, { 0x1B00, 0x1B04 }, { 0x1B34, 0x1B44 }, { 0x1B5A, 0x1B7E }, { 0x1B80, 0x1B82 }, { 0x1BA1, 0x1BAD }, { 0x1BE6, 0x1BF3 }, { 0x1BFC, 0x1BFF }, { 0x1C24, 0x1C37 }, { 0x1C3B, 0x1C3F }, { 0x1C7E, 0x1C7F }, { 0x1CC0, 0x1CC7 }, { 0x1CD0, 0x1CE8 }, { 0x1CED, 0x1CED }, { 0x1CF4, 0x1CF4 }, { 0x1CF7, 0x1CF9 }, { 0x1DC0, 0x1DFF }, { 0x1FBD, 0x1FBD }, { 0x1FBF, 0x1FC1 }, { 0x1FCD, 0x1FCF }, { 0x1FDD, 0x1FDF }, { 0x1FED, 0x1FEF }, { 0x1FFD, 0x1FFE }, { 0x2007, 0x2007 }, { 0x200B, 0x2027 }, { 0x202A, 0x205E }, { 0x2060, 0x2064 }, { 0x2066, 0x2070 }, { 0x2074, 0x207E }, { 0x2080, 0x208E }, { 0x20A0, 0x20C0 }, { 0x20D0, 0x20F0 }, { 0x2100, 0x2101 }, { 0x2103, 0x2106 }, { 0x2108, 0x2109 }, { 0x2114, 0x2114 }, { 0x2116, 0x2118 }, { 0x211E, 0x2123 }, { 0x2125, 0x2125 }, { 0x2127, 0x2127 }, { 0x212E, 0x212E }, { 0x213A, 0x213B }, { 0x2140, 0x2144 }, { 0x214A, 0x214D }, { 0x214F, 0x215F }, { 0x2189, 0x218B }, { 0x2190, 0x2426 }, { 0x2440, 0x244A }, { 0x2460, 0x249B }, { 0x24EA, 0x2B73 }, { 0x2B76, 0x2B95 }, { 0x2B97, 0x2BFF }, { 0x2CE5, 0x2CEA }, { 0x2CEF, 0x2CF1 }, { 0x2CF9, 0x2CFF }, { 0x2D70, 0x2D70 }, { 0x2D7F, 0x2D7F }, { 0x2DE0, 0x2E2E }, { 0x2E30, 0x2E5D }, { 0x2E80, 0x2E99 }, { 0x2E9B, 0x2EF3 }, { 0x2F00, 0x2FD5 }, { 0x2FF0, 0x2FFF }, { 0x3001, 0x3004 }, { 0x3008, 0x3020 }, { 0x302A, 0x3030 }, { 0x3036, 0x3037 }, { 0x303D, 0x303F }, { 0x3099, 0x309C }, { 0x30A0, 0x30A0 }, { 0x30FB, 0x30FB }, { 0x3190, 0x319F }, { 0x31C0, 0x31E3 }, { 0x31EF, 0x31EF }, { 0x3200, 0x321E }, { 0x3220, 0x33FF }, { 0x4DC0, 0x4DFF }, { 0xA490, 0xA4C6 }, { 0xA4FE, 0xA4FF }, { 0xA60D, 0xA60F }, { 0xA66F, 0xA67E }, { 0xA69E, 0xA69F }, { 0xA6F0, 0xA6F7 }, { 0xA700, 0xA716 }, { 0xA720, 0xA721 }, { 0xA789, 0xA78A }, { 0xA802, 0xA802 }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA823, 0xA82C }, { 0xA830, 0xA839 }, { 0xA874, 0xA877 }, { 0xA880, 0xA881 }, { 0xA8B4, 0xA8C5 }, { 0xA8CE, 0xA8CF }, { 0xA8E0, 0xA8F1 }, { 0xA8F8, 0xA8FA }, { 0xA8FC, 0xA8FC }, { 0xA8FF, 0xA8FF }, { 0xA926, 0xA92F }, { 0xA947, 0xA953 }, { 0xA95F, 0xA95F }, { 0xA980, 0xA983 }, { 0xA9B3, 0xA9CD }, { 0xA9DE, 0xA9DF }, { 0xA9E5, 0xA9E5 }, { 0xAA29, 0xAA36 }, { 0xAA43, 0xAA43 }, { 0xAA4C, 0xAA4D }, { 0xAA5C, 0xAA5F }, { 0xAA77, 0xAA79 }, { 0xAA7B, 0xAA7D }, { 0xAAB0, 0xAAB0 }, { 0xAAB2, 0xAAB4 }, { 0xAAB7, 0xAAB8 }, { 0xAABE, 0xAABF }, { 0xAAC1, 0xAAC1 }, { 0xAADE, 0xAADF }, { 0xAAEB, 0xAAF1 }, { 0xAAF5, 0xAAF6 }, { 0xAB5B, 0xAB5B }, { 0xAB6A, 0xAB6B }, { 0xABE3, 0xABED }, { 0xE000, 0xF8FF }, { 0xFB1E, 0xFB1E }, { 0xFB29, 0xFB29 }, { 0xFBB2, 0xFBC2 }, { 0xFD3E, 0xFD4F }, { 0xFDCF, 0xFDCF }, { 0xFDFC, 0xFE19 }, { 0xFE20, 0xFE52 }, { 0xFE54, 0xFE66 }, { 0xFE68, 0xFE6B }, { 0xFEFF, 0xFEFF }, { 0xFF01, 0xFF0F }, { 0xFF1A, 0xFF20 }, { 0xFF3B, 0xFF40 }, { 0xFF5B, 0xFF65 }, { 0xFFE0, 0xFFE6 }, { 0xFFE8, 0xFFEE }, { 0xFFF9, 0xFFFD }, { 0x10100, 0x10102 }, { 0x10107, 0x10133 }, { 0x10137, 0x1013F }, { 0x10175, 0x1018E }, { 0x10190, 0x1019C }, { 0x101A0, 0x101A0 }, { 0x101D0, 0x101FD }, { 0x102E0, 0x102FB }, { 0x10320, 0x10323 }, { 0x10376, 0x1037A }, { 0x1039F, 0x1039F }, { 0x103D0, 0x103D0 }, { 0x1056F, 0x1056F }, { 0x10857, 0x1085F }, { 0x10877, 0x1087F }, { 0x108A7, 0x108AF }, { 0x108FB, 0x108FF }, { 0x10916, 0x1091B }, { 0x1091F, 0x1091F }, { 0x1093F, 0x1093F }, { 0x109BC, 0x109BD }, { 0x109C0, 0x109CF }, { 0x109D2, 0x109FF }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A48 }, { 0x10A50, 0x10A58 }, { 0x10A7D, 0x10A7F }, { 0x10A9D, 0x10A9F }, { 0x10AC8, 0x10AC8 }, { 0x10AE5, 0x10AE6 }, { 0x10AEB, 0x10AF6 }, { 0x10B39, 0x10B3F }, { 0x10B58, 0x10B5F }, { 0x10B78, 0x10B7F }, { 0x10B99, 0x10B9C }, { 0x10BA9, 0x10BAF }, { 0x10CFA, 0x10CFF }, { 0x10D24, 0x10D27 }, { 0x10E60, 0x10E7E }, { 0x10EAB, 0x10EAD }, { 0x10EFD, 0x10EFF }, { 0x10F1D, 0x10F26 }, { 0x10F46, 0x10F59 }, { 0x10F82, 0x10F89 }, { 0x10FC5, 0x10FCB }, { 0x11000, 0x11002 }, { 0x11038, 0x1104D }, { 0x11052, 0x11065 }, { 0x11070, 0x11070 }, { 0x11073, 0x11074 }, { 0x1107F, 0x11082 }, { 0x110B0, 0x110C2 }, { 0x110CD, 0x110CD }, { 0x11100, 0x11102 }, { 0x11127, 0x11134 }, { 0x11140, 0x11143 }, { 0x11145, 0x11146 }, { 0x11173, 0x11175 }, { 0x11180, 0x11182 }, { 0x111B3, 0x111C0 }, { 0x111C5, 0x111CF }, { 0x111DB, 0x111DB }, { 0x111DD, 0x111DF }, { 0x111E1, 0x111F4 }, { 0x1122C, 0x1123E }, { 0x11241, 0x11241 }, { 0x112A9, 0x112A9 }, { 0x112DF, 0x112EA }, { 0x11300, 0x11303 }, { 0x1133B, 0x1133C }, { 0x1133E, 0x11344 }, { 0x11347, 0x11348 }, { 0x1134B, 0x1134D }, { 0x11357, 0x11357 }, { 0x11362, 0x11363 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, { 0x11435, 0x11446 }, { 0x1144B, 0x1144F }, { 0x1145A, 0x1145B }, { 0x1145D, 0x1145E }, { 0x114B0, 0x114C3 }, { 0x114C6, 0x114C6 }, { 0x115AF, 0x115B5 }, { 0x115B8, 0x115D7 }, { 0x115DC, 0x115DD }, { 0x11630, 0x11643 }, { 0x11660, 0x1166C }, { 0x116AB, 0x116B7 }, { 0x116B9, 0x116B9 }, { 0x1171D, 0x1172B }, { 0x1173A, 0x1173F }, { 0x1182C, 0x1183B }, { 0x118EA, 0x118F2 }, { 0x11930, 0x11935 }, { 0x11937, 0x11938 }, { 0x1193B, 0x1193E }, { 0x11940, 0x11940 }, { 0x11942, 0x11946 }, { 0x119D1, 0x119D7 }, { 0x119DA, 0x119E0 }, { 0x119E2, 0x119E2 }, { 0x119E4, 0x119E4 }, { 0x11A01, 0x11A0A }, { 0x11A33, 0x11A39 }, { 0x11A3B, 0x11A47 }, { 0x11A51, 0x11A5B }, { 0x11A8A, 0x11A9C }, { 0x11A9E, 0x11AA2 }, { 0x11B00, 0x11B09 }, { 0x11C2F, 0x11C36 }, { 0x11C38, 0x11C3F }, { 0x11C41, 0x11C45 }, { 0x11C5A, 0x11C6C }, { 0x11C70, 0x11C71 }, { 0x11C92, 0x11CA7 }, { 0x11CA9, 0x11CB6 }, { 0x11D31, 0x11D36 }, { 0x11D3A, 0x11D3A }, { 0x11D3C, 0x11D3D }, { 0x11D3F, 0x11D45 }, { 0x11D47, 0x11D47 }, { 0x11D8A, 0x11D8E }, { 0x11D90, 0x11D91 }, { 0x11D93, 0x11D97 }, { 0x11EF3, 0x11EF8 }, { 0x11F00, 0x11F01 }, { 0x11F03, 0x11F03 }, { 0x11F34, 0x11F3A }, { 0x11F3E, 0x11F4F }, { 0x11FC0, 0x11FF1 }, { 0x11FFF, 0x11FFF }, { 0x12470, 0x12474 }, { 0x12FF1, 0x12FF2 }, { 0x13430, 0x13440 }, { 0x13447, 0x13455 }, { 0x16A6E, 0x16A6F }, { 0x16AF0, 0x16AF5 }, { 0x16B30, 0x16B3F }, { 0x16B44, 0x16B45 }, { 0x16B5B, 0x16B61 }, { 0x16E80, 0x16E9A }, { 0x16F4F, 0x16F4F }, { 0x16F51, 0x16F87 }, { 0x16F8F, 0x16F92 }, { 0x16FE2, 0x16FE2 }, { 0x16FE4, 0x16FE4 }, { 0x16FF0, 0x16FF1 }, { 0x1BC9C, 0x1BCA3 }, { 0x1CF00, 0x1CF2D }, { 0x1CF30, 0x1CF46 }, { 0x1CF50, 0x1CFC3 }, { 0x1D000, 0x1D0F5 }, { 0x1D100, 0x1D126 }, { 0x1D129, 0x1D1EA }, { 0x1D200, 0x1D245 }, { 0x1D2C0, 0x1D2D3 }, { 0x1D2E0, 0x1D2F3 }, { 0x1D300, 0x1D356 }, { 0x1D360, 0x1D378 }, { 0x1D6C1, 0x1D6C1 }, { 0x1D6DB, 0x1D6DB }, { 0x1D6FB, 0x1D6FB }, { 0x1D715, 0x1D715 }, { 0x1D735, 0x1D735 }, { 0x1D74F, 0x1D74F }, { 0x1D76F, 0x1D76F }, { 0x1D789, 0x1D789 }, { 0x1D7A9, 0x1D7A9 }, { 0x1D7C3, 0x1D7C3 }, { 0x1D800, 0x1DA8B }, { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, { 0x1E08F, 0x1E08F }, { 0x1E130, 0x1E136 }, { 0x1E14F, 0x1E14F }, { 0x1E2AE, 0x1E2AE }, { 0x1E2EC, 0x1E2EF }, { 0x1E2FF, 0x1E2FF }, { 0x1E4EC, 0x1E4EF }, { 0x1E8C7, 0x1E8D6 }, { 0x1E944, 0x1E94A }, { 0x1E95E, 0x1E95F }, { 0x1EC71, 0x1ECB4 }, { 0x1ED01, 0x1ED3D }, { 0x1EEF0, 0x1EEF1 }, { 0x1F000, 0x1F02B }, { 0x1F030, 0x1F093 }, { 0x1F0A0, 0x1F0AE }, { 0x1F0B1, 0x1F0BF }, { 0x1F0C1, 0x1F0CF }, { 0x1F0D1, 0x1F0F5 }, { 0x1F100, 0x1F10F }, { 0x1F12D, 0x1F12F }, { 0x1F14A, 0x1F14F }, { 0x1F16A, 0x1F16F }, { 0x1F18B, 0x1F1A4 }, { 0x1F1A6, 0x1F1AD }, { 0x1F200, 0x1F202 }, { 0x1F210, 0x1F23B }, { 0x1F240, 0x1F248 }, { 0x1F250, 0x1F251 }, { 0x1F260, 0x1F265 }, { 0x1F300, 0x1F6D7 }, { 0x1F6DC, 0x1F6EC }, { 0x1F6F0, 0x1F6FC }, { 0x1F700, 0x1F776 }, { 0x1F77B, 0x1F7D9 }, { 0x1F7E0, 0x1F7EB }, { 0x1F7F0, 0x1F7F0 }, { 0x1F800, 0x1F80B }, { 0x1F810, 0x1F847 }, { 0x1F850, 0x1F859 }, { 0x1F860, 0x1F887 }, { 0x1F890, 0x1F8AD }, { 0x1F8B0, 0x1F8B1 }, { 0x1F900, 0x1FA53 }, { 0x1FA60, 0x1FA6D }, { 0x1FA70, 0x1FA7C }, { 0x1FA80, 0x1FA88 }, { 0x1FA90, 0x1FABD }, { 0x1FABF, 0x1FAC5 }, { 0x1FACE, 0x1FADB }, { 0x1FAE0, 0x1FAE8 }, { 0x1FAF0, 0x1FAF8 }, { 0x1FB00, 0x1FB92 }, { 0x1FB94, 0x1FBCA }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } #define PREDICATE(c) uc_is_punct (c) #include "test-predicate-part2.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-ctype_space.c����������������������������������������0000644�0001750�0001750�00000002101�14557510511�020106� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0009, 0x000D }, { 0x0020, 0x0020 }, { 0x1680, 0x1680 }, { 0x2000, 0x2006 }, { 0x2008, 0x200A }, { 0x2028, 0x2029 }, { 0x205F, 0x205F }, { 0x3000, 0x3000 } #define PREDICATE(c) uc_is_space (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-ctype_upper.c����������������������������������������0000644�0001750�0001750�00000036255�14557510511�020167� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0041, 0x005A }, { 0x00C0, 0x00D6 }, { 0x00D8, 0x00DE }, { 0x0100, 0x0100 }, { 0x0102, 0x0102 }, { 0x0104, 0x0104 }, { 0x0106, 0x0106 }, { 0x0108, 0x0108 }, { 0x010A, 0x010A }, { 0x010C, 0x010C }, { 0x010E, 0x010E }, { 0x0110, 0x0110 }, { 0x0112, 0x0112 }, { 0x0114, 0x0114 }, { 0x0116, 0x0116 }, { 0x0118, 0x0118 }, { 0x011A, 0x011A }, { 0x011C, 0x011C }, { 0x011E, 0x011E }, { 0x0120, 0x0120 }, { 0x0122, 0x0122 }, { 0x0124, 0x0124 }, { 0x0126, 0x0126 }, { 0x0128, 0x0128 }, { 0x012A, 0x012A }, { 0x012C, 0x012C }, { 0x012E, 0x012E }, { 0x0130, 0x0130 }, { 0x0132, 0x0132 }, { 0x0134, 0x0134 }, { 0x0136, 0x0136 }, { 0x0139, 0x0139 }, { 0x013B, 0x013B }, { 0x013D, 0x013D }, { 0x013F, 0x013F }, { 0x0141, 0x0141 }, { 0x0143, 0x0143 }, { 0x0145, 0x0145 }, { 0x0147, 0x0147 }, { 0x014A, 0x014A }, { 0x014C, 0x014C }, { 0x014E, 0x014E }, { 0x0150, 0x0150 }, { 0x0152, 0x0152 }, { 0x0154, 0x0154 }, { 0x0156, 0x0156 }, { 0x0158, 0x0158 }, { 0x015A, 0x015A }, { 0x015C, 0x015C }, { 0x015E, 0x015E }, { 0x0160, 0x0160 }, { 0x0162, 0x0162 }, { 0x0164, 0x0164 }, { 0x0166, 0x0166 }, { 0x0168, 0x0168 }, { 0x016A, 0x016A }, { 0x016C, 0x016C }, { 0x016E, 0x016E }, { 0x0170, 0x0170 }, { 0x0172, 0x0172 }, { 0x0174, 0x0174 }, { 0x0176, 0x0176 }, { 0x0178, 0x0179 }, { 0x017B, 0x017B }, { 0x017D, 0x017D }, { 0x0181, 0x0182 }, { 0x0184, 0x0184 }, { 0x0186, 0x0187 }, { 0x0189, 0x018B }, { 0x018E, 0x0191 }, { 0x0193, 0x0194 }, { 0x0196, 0x0198 }, { 0x019C, 0x019D }, { 0x019F, 0x01A0 }, { 0x01A2, 0x01A2 }, { 0x01A4, 0x01A4 }, { 0x01A6, 0x01A7 }, { 0x01A9, 0x01A9 }, { 0x01AC, 0x01AC }, { 0x01AE, 0x01AF }, { 0x01B1, 0x01B3 }, { 0x01B5, 0x01B5 }, { 0x01B7, 0x01B8 }, { 0x01BC, 0x01BC }, { 0x01C4, 0x01C5 }, { 0x01C7, 0x01C8 }, { 0x01CA, 0x01CB }, { 0x01CD, 0x01CD }, { 0x01CF, 0x01CF }, { 0x01D1, 0x01D1 }, { 0x01D3, 0x01D3 }, { 0x01D5, 0x01D5 }, { 0x01D7, 0x01D7 }, { 0x01D9, 0x01D9 }, { 0x01DB, 0x01DB }, { 0x01DE, 0x01DE }, { 0x01E0, 0x01E0 }, { 0x01E2, 0x01E2 }, { 0x01E4, 0x01E4 }, { 0x01E6, 0x01E6 }, { 0x01E8, 0x01E8 }, { 0x01EA, 0x01EA }, { 0x01EC, 0x01EC }, { 0x01EE, 0x01EE }, { 0x01F1, 0x01F2 }, { 0x01F4, 0x01F4 }, { 0x01F6, 0x01F8 }, { 0x01FA, 0x01FA }, { 0x01FC, 0x01FC }, { 0x01FE, 0x01FE }, { 0x0200, 0x0200 }, { 0x0202, 0x0202 }, { 0x0204, 0x0204 }, { 0x0206, 0x0206 }, { 0x0208, 0x0208 }, { 0x020A, 0x020A }, { 0x020C, 0x020C }, { 0x020E, 0x020E }, { 0x0210, 0x0210 }, { 0x0212, 0x0212 }, { 0x0214, 0x0214 }, { 0x0216, 0x0216 }, { 0x0218, 0x0218 }, { 0x021A, 0x021A }, { 0x021C, 0x021C }, { 0x021E, 0x021E }, { 0x0220, 0x0220 }, { 0x0222, 0x0222 }, { 0x0224, 0x0224 }, { 0x0226, 0x0226 }, { 0x0228, 0x0228 }, { 0x022A, 0x022A }, { 0x022C, 0x022C }, { 0x022E, 0x022E }, { 0x0230, 0x0230 }, { 0x0232, 0x0232 }, { 0x023A, 0x023B }, { 0x023D, 0x023E }, { 0x0241, 0x0241 }, { 0x0243, 0x0246 }, { 0x0248, 0x0248 }, { 0x024A, 0x024A }, { 0x024C, 0x024C }, { 0x024E, 0x024E }, { 0x0370, 0x0370 }, { 0x0372, 0x0372 }, { 0x0376, 0x0376 }, { 0x037F, 0x037F }, { 0x0386, 0x0386 }, { 0x0388, 0x038A }, { 0x038C, 0x038C }, { 0x038E, 0x038F }, { 0x0391, 0x03A1 }, { 0x03A3, 0x03AB }, { 0x03CF, 0x03CF }, { 0x03D8, 0x03D8 }, { 0x03DA, 0x03DA }, { 0x03DC, 0x03DC }, { 0x03DE, 0x03DE }, { 0x03E0, 0x03E0 }, { 0x03E2, 0x03E2 }, { 0x03E4, 0x03E4 }, { 0x03E6, 0x03E6 }, { 0x03E8, 0x03E8 }, { 0x03EA, 0x03EA }, { 0x03EC, 0x03EC }, { 0x03EE, 0x03EE }, { 0x03F4, 0x03F4 }, { 0x03F7, 0x03F7 }, { 0x03F9, 0x03FA }, { 0x03FD, 0x042F }, { 0x0460, 0x0460 }, { 0x0462, 0x0462 }, { 0x0464, 0x0464 }, { 0x0466, 0x0466 }, { 0x0468, 0x0468 }, { 0x046A, 0x046A }, { 0x046C, 0x046C }, { 0x046E, 0x046E }, { 0x0470, 0x0470 }, { 0x0472, 0x0472 }, { 0x0474, 0x0474 }, { 0x0476, 0x0476 }, { 0x0478, 0x0478 }, { 0x047A, 0x047A }, { 0x047C, 0x047C }, { 0x047E, 0x047E }, { 0x0480, 0x0480 }, { 0x048A, 0x048A }, { 0x048C, 0x048C }, { 0x048E, 0x048E }, { 0x0490, 0x0490 }, { 0x0492, 0x0492 }, { 0x0494, 0x0494 }, { 0x0496, 0x0496 }, { 0x0498, 0x0498 }, { 0x049A, 0x049A }, { 0x049C, 0x049C }, { 0x049E, 0x049E }, { 0x04A0, 0x04A0 }, { 0x04A2, 0x04A2 }, { 0x04A4, 0x04A4 }, { 0x04A6, 0x04A6 }, { 0x04A8, 0x04A8 }, { 0x04AA, 0x04AA }, { 0x04AC, 0x04AC }, { 0x04AE, 0x04AE }, { 0x04B0, 0x04B0 }, { 0x04B2, 0x04B2 }, { 0x04B4, 0x04B4 }, { 0x04B6, 0x04B6 }, { 0x04B8, 0x04B8 }, { 0x04BA, 0x04BA }, { 0x04BC, 0x04BC }, { 0x04BE, 0x04BE }, { 0x04C0, 0x04C1 }, { 0x04C3, 0x04C3 }, { 0x04C5, 0x04C5 }, { 0x04C7, 0x04C7 }, { 0x04C9, 0x04C9 }, { 0x04CB, 0x04CB }, { 0x04CD, 0x04CD }, { 0x04D0, 0x04D0 }, { 0x04D2, 0x04D2 }, { 0x04D4, 0x04D4 }, { 0x04D6, 0x04D6 }, { 0x04D8, 0x04D8 }, { 0x04DA, 0x04DA }, { 0x04DC, 0x04DC }, { 0x04DE, 0x04DE }, { 0x04E0, 0x04E0 }, { 0x04E2, 0x04E2 }, { 0x04E4, 0x04E4 }, { 0x04E6, 0x04E6 }, { 0x04E8, 0x04E8 }, { 0x04EA, 0x04EA }, { 0x04EC, 0x04EC }, { 0x04EE, 0x04EE }, { 0x04F0, 0x04F0 }, { 0x04F2, 0x04F2 }, { 0x04F4, 0x04F4 }, { 0x04F6, 0x04F6 }, { 0x04F8, 0x04F8 }, { 0x04FA, 0x04FA }, { 0x04FC, 0x04FC }, { 0x04FE, 0x04FE }, { 0x0500, 0x0500 }, { 0x0502, 0x0502 }, { 0x0504, 0x0504 }, { 0x0506, 0x0506 }, { 0x0508, 0x0508 }, { 0x050A, 0x050A }, { 0x050C, 0x050C }, { 0x050E, 0x050E }, { 0x0510, 0x0510 }, { 0x0512, 0x0512 }, { 0x0514, 0x0514 }, { 0x0516, 0x0516 }, { 0x0518, 0x0518 }, { 0x051A, 0x051A }, { 0x051C, 0x051C }, { 0x051E, 0x051E }, { 0x0520, 0x0520 }, { 0x0522, 0x0522 }, { 0x0524, 0x0524 }, { 0x0526, 0x0526 }, { 0x0528, 0x0528 }, { 0x052A, 0x052A }, { 0x052C, 0x052C }, { 0x052E, 0x052E }, { 0x0531, 0x0556 }, { 0x10A0, 0x10C5 }, { 0x10C7, 0x10C7 }, { 0x10CD, 0x10CD }, { 0x13A0, 0x13F5 }, { 0x1C90, 0x1CBA }, { 0x1CBD, 0x1CBF }, { 0x1E00, 0x1E00 }, { 0x1E02, 0x1E02 }, { 0x1E04, 0x1E04 }, { 0x1E06, 0x1E06 }, { 0x1E08, 0x1E08 }, { 0x1E0A, 0x1E0A }, { 0x1E0C, 0x1E0C }, { 0x1E0E, 0x1E0E }, { 0x1E10, 0x1E10 }, { 0x1E12, 0x1E12 }, { 0x1E14, 0x1E14 }, { 0x1E16, 0x1E16 }, { 0x1E18, 0x1E18 }, { 0x1E1A, 0x1E1A }, { 0x1E1C, 0x1E1C }, { 0x1E1E, 0x1E1E }, { 0x1E20, 0x1E20 }, { 0x1E22, 0x1E22 }, { 0x1E24, 0x1E24 }, { 0x1E26, 0x1E26 }, { 0x1E28, 0x1E28 }, { 0x1E2A, 0x1E2A }, { 0x1E2C, 0x1E2C }, { 0x1E2E, 0x1E2E }, { 0x1E30, 0x1E30 }, { 0x1E32, 0x1E32 }, { 0x1E34, 0x1E34 }, { 0x1E36, 0x1E36 }, { 0x1E38, 0x1E38 }, { 0x1E3A, 0x1E3A }, { 0x1E3C, 0x1E3C }, { 0x1E3E, 0x1E3E }, { 0x1E40, 0x1E40 }, { 0x1E42, 0x1E42 }, { 0x1E44, 0x1E44 }, { 0x1E46, 0x1E46 }, { 0x1E48, 0x1E48 }, { 0x1E4A, 0x1E4A }, { 0x1E4C, 0x1E4C }, { 0x1E4E, 0x1E4E }, { 0x1E50, 0x1E50 }, { 0x1E52, 0x1E52 }, { 0x1E54, 0x1E54 }, { 0x1E56, 0x1E56 }, { 0x1E58, 0x1E58 }, { 0x1E5A, 0x1E5A }, { 0x1E5C, 0x1E5C }, { 0x1E5E, 0x1E5E }, { 0x1E60, 0x1E60 }, { 0x1E62, 0x1E62 }, { 0x1E64, 0x1E64 }, { 0x1E66, 0x1E66 }, { 0x1E68, 0x1E68 }, { 0x1E6A, 0x1E6A }, { 0x1E6C, 0x1E6C }, { 0x1E6E, 0x1E6E }, { 0x1E70, 0x1E70 }, { 0x1E72, 0x1E72 }, { 0x1E74, 0x1E74 }, { 0x1E76, 0x1E76 }, { 0x1E78, 0x1E78 }, { 0x1E7A, 0x1E7A }, { 0x1E7C, 0x1E7C }, { 0x1E7E, 0x1E7E }, { 0x1E80, 0x1E80 }, { 0x1E82, 0x1E82 }, { 0x1E84, 0x1E84 }, { 0x1E86, 0x1E86 }, { 0x1E88, 0x1E88 }, { 0x1E8A, 0x1E8A }, { 0x1E8C, 0x1E8C }, { 0x1E8E, 0x1E8E }, { 0x1E90, 0x1E90 }, { 0x1E92, 0x1E92 }, { 0x1E94, 0x1E94 }, { 0x1E9E, 0x1E9E }, { 0x1EA0, 0x1EA0 }, { 0x1EA2, 0x1EA2 }, { 0x1EA4, 0x1EA4 }, { 0x1EA6, 0x1EA6 }, { 0x1EA8, 0x1EA8 }, { 0x1EAA, 0x1EAA }, { 0x1EAC, 0x1EAC }, { 0x1EAE, 0x1EAE }, { 0x1EB0, 0x1EB0 }, { 0x1EB2, 0x1EB2 }, { 0x1EB4, 0x1EB4 }, { 0x1EB6, 0x1EB6 }, { 0x1EB8, 0x1EB8 }, { 0x1EBA, 0x1EBA }, { 0x1EBC, 0x1EBC }, { 0x1EBE, 0x1EBE }, { 0x1EC0, 0x1EC0 }, { 0x1EC2, 0x1EC2 }, { 0x1EC4, 0x1EC4 }, { 0x1EC6, 0x1EC6 }, { 0x1EC8, 0x1EC8 }, { 0x1ECA, 0x1ECA }, { 0x1ECC, 0x1ECC }, { 0x1ECE, 0x1ECE }, { 0x1ED0, 0x1ED0 }, { 0x1ED2, 0x1ED2 }, { 0x1ED4, 0x1ED4 }, { 0x1ED6, 0x1ED6 }, { 0x1ED8, 0x1ED8 }, { 0x1EDA, 0x1EDA }, { 0x1EDC, 0x1EDC }, { 0x1EDE, 0x1EDE }, { 0x1EE0, 0x1EE0 }, { 0x1EE2, 0x1EE2 }, { 0x1EE4, 0x1EE4 }, { 0x1EE6, 0x1EE6 }, { 0x1EE8, 0x1EE8 }, { 0x1EEA, 0x1EEA }, { 0x1EEC, 0x1EEC }, { 0x1EEE, 0x1EEE }, { 0x1EF0, 0x1EF0 }, { 0x1EF2, 0x1EF2 }, { 0x1EF4, 0x1EF4 }, { 0x1EF6, 0x1EF6 }, { 0x1EF8, 0x1EF8 }, { 0x1EFA, 0x1EFA }, { 0x1EFC, 0x1EFC }, { 0x1EFE, 0x1EFE }, { 0x1F08, 0x1F0F }, { 0x1F18, 0x1F1D }, { 0x1F28, 0x1F2F }, { 0x1F38, 0x1F3F }, { 0x1F48, 0x1F4D }, { 0x1F59, 0x1F59 }, { 0x1F5B, 0x1F5B }, { 0x1F5D, 0x1F5D }, { 0x1F5F, 0x1F5F }, { 0x1F68, 0x1F6F }, { 0x1F88, 0x1F8F }, { 0x1F98, 0x1F9F }, { 0x1FA8, 0x1FAF }, { 0x1FB8, 0x1FBC }, { 0x1FC8, 0x1FCC }, { 0x1FD8, 0x1FDB }, { 0x1FE8, 0x1FEC }, { 0x1FF8, 0x1FFC }, { 0x2126, 0x2126 }, { 0x212A, 0x212B }, { 0x2132, 0x2132 }, { 0x2160, 0x216F }, { 0x2183, 0x2183 }, { 0x24B6, 0x24CF }, { 0x2C00, 0x2C2F }, { 0x2C60, 0x2C60 }, { 0x2C62, 0x2C64 }, { 0x2C67, 0x2C67 }, { 0x2C69, 0x2C69 }, { 0x2C6B, 0x2C6B }, { 0x2C6D, 0x2C70 }, { 0x2C72, 0x2C72 }, { 0x2C75, 0x2C75 }, { 0x2C7E, 0x2C80 }, { 0x2C82, 0x2C82 }, { 0x2C84, 0x2C84 }, { 0x2C86, 0x2C86 }, { 0x2C88, 0x2C88 }, { 0x2C8A, 0x2C8A }, { 0x2C8C, 0x2C8C }, { 0x2C8E, 0x2C8E }, { 0x2C90, 0x2C90 }, { 0x2C92, 0x2C92 }, { 0x2C94, 0x2C94 }, { 0x2C96, 0x2C96 }, { 0x2C98, 0x2C98 }, { 0x2C9A, 0x2C9A }, { 0x2C9C, 0x2C9C }, { 0x2C9E, 0x2C9E }, { 0x2CA0, 0x2CA0 }, { 0x2CA2, 0x2CA2 }, { 0x2CA4, 0x2CA4 }, { 0x2CA6, 0x2CA6 }, { 0x2CA8, 0x2CA8 }, { 0x2CAA, 0x2CAA }, { 0x2CAC, 0x2CAC }, { 0x2CAE, 0x2CAE }, { 0x2CB0, 0x2CB0 }, { 0x2CB2, 0x2CB2 }, { 0x2CB4, 0x2CB4 }, { 0x2CB6, 0x2CB6 }, { 0x2CB8, 0x2CB8 }, { 0x2CBA, 0x2CBA }, { 0x2CBC, 0x2CBC }, { 0x2CBE, 0x2CBE }, { 0x2CC0, 0x2CC0 }, { 0x2CC2, 0x2CC2 }, { 0x2CC4, 0x2CC4 }, { 0x2CC6, 0x2CC6 }, { 0x2CC8, 0x2CC8 }, { 0x2CCA, 0x2CCA }, { 0x2CCC, 0x2CCC }, { 0x2CCE, 0x2CCE }, { 0x2CD0, 0x2CD0 }, { 0x2CD2, 0x2CD2 }, { 0x2CD4, 0x2CD4 }, { 0x2CD6, 0x2CD6 }, { 0x2CD8, 0x2CD8 }, { 0x2CDA, 0x2CDA }, { 0x2CDC, 0x2CDC }, { 0x2CDE, 0x2CDE }, { 0x2CE0, 0x2CE0 }, { 0x2CE2, 0x2CE2 }, { 0x2CEB, 0x2CEB }, { 0x2CED, 0x2CED }, { 0x2CF2, 0x2CF2 }, { 0xA640, 0xA640 }, { 0xA642, 0xA642 }, { 0xA644, 0xA644 }, { 0xA646, 0xA646 }, { 0xA648, 0xA648 }, { 0xA64A, 0xA64A }, { 0xA64C, 0xA64C }, { 0xA64E, 0xA64E }, { 0xA650, 0xA650 }, { 0xA652, 0xA652 }, { 0xA654, 0xA654 }, { 0xA656, 0xA656 }, { 0xA658, 0xA658 }, { 0xA65A, 0xA65A }, { 0xA65C, 0xA65C }, { 0xA65E, 0xA65E }, { 0xA660, 0xA660 }, { 0xA662, 0xA662 }, { 0xA664, 0xA664 }, { 0xA666, 0xA666 }, { 0xA668, 0xA668 }, { 0xA66A, 0xA66A }, { 0xA66C, 0xA66C }, { 0xA680, 0xA680 }, { 0xA682, 0xA682 }, { 0xA684, 0xA684 }, { 0xA686, 0xA686 }, { 0xA688, 0xA688 }, { 0xA68A, 0xA68A }, { 0xA68C, 0xA68C }, { 0xA68E, 0xA68E }, { 0xA690, 0xA690 }, { 0xA692, 0xA692 }, { 0xA694, 0xA694 }, { 0xA696, 0xA696 }, { 0xA698, 0xA698 }, { 0xA69A, 0xA69A }, { 0xA722, 0xA722 }, { 0xA724, 0xA724 }, { 0xA726, 0xA726 }, { 0xA728, 0xA728 }, { 0xA72A, 0xA72A }, { 0xA72C, 0xA72C }, { 0xA72E, 0xA72E }, { 0xA732, 0xA732 }, { 0xA734, 0xA734 }, { 0xA736, 0xA736 }, { 0xA738, 0xA738 }, { 0xA73A, 0xA73A }, { 0xA73C, 0xA73C }, { 0xA73E, 0xA73E }, { 0xA740, 0xA740 }, { 0xA742, 0xA742 }, { 0xA744, 0xA744 }, { 0xA746, 0xA746 }, { 0xA748, 0xA748 }, { 0xA74A, 0xA74A }, { 0xA74C, 0xA74C }, { 0xA74E, 0xA74E }, { 0xA750, 0xA750 }, { 0xA752, 0xA752 }, { 0xA754, 0xA754 }, { 0xA756, 0xA756 }, { 0xA758, 0xA758 }, { 0xA75A, 0xA75A }, { 0xA75C, 0xA75C }, { 0xA75E, 0xA75E }, { 0xA760, 0xA760 }, { 0xA762, 0xA762 }, { 0xA764, 0xA764 }, { 0xA766, 0xA766 }, { 0xA768, 0xA768 }, { 0xA76A, 0xA76A }, { 0xA76C, 0xA76C }, { 0xA76E, 0xA76E }, { 0xA779, 0xA779 }, { 0xA77B, 0xA77B }, { 0xA77D, 0xA77E }, { 0xA780, 0xA780 }, { 0xA782, 0xA782 }, { 0xA784, 0xA784 }, { 0xA786, 0xA786 }, { 0xA78B, 0xA78B }, { 0xA78D, 0xA78D }, { 0xA790, 0xA790 }, { 0xA792, 0xA792 }, { 0xA796, 0xA796 }, { 0xA798, 0xA798 }, { 0xA79A, 0xA79A }, { 0xA79C, 0xA79C }, { 0xA79E, 0xA79E }, { 0xA7A0, 0xA7A0 }, { 0xA7A2, 0xA7A2 }, { 0xA7A4, 0xA7A4 }, { 0xA7A6, 0xA7A6 }, { 0xA7A8, 0xA7A8 }, { 0xA7AA, 0xA7AE }, { 0xA7B0, 0xA7B4 }, { 0xA7B6, 0xA7B6 }, { 0xA7B8, 0xA7B8 }, { 0xA7BA, 0xA7BA }, { 0xA7BC, 0xA7BC }, { 0xA7BE, 0xA7BE }, { 0xA7C0, 0xA7C0 }, { 0xA7C2, 0xA7C2 }, { 0xA7C4, 0xA7C7 }, { 0xA7C9, 0xA7C9 }, { 0xA7D0, 0xA7D0 }, { 0xA7D6, 0xA7D6 }, { 0xA7D8, 0xA7D8 }, { 0xA7F5, 0xA7F5 }, { 0xFF21, 0xFF3A }, { 0x10400, 0x10427 }, { 0x104B0, 0x104D3 }, { 0x10570, 0x1057A }, { 0x1057C, 0x1058A }, { 0x1058C, 0x10592 }, { 0x10594, 0x10595 }, { 0x10C80, 0x10CB2 }, { 0x118A0, 0x118BF }, { 0x16E40, 0x16E5F }, { 0x1E900, 0x1E921 } #define PREDICATE(c) uc_is_upper (c) #include "test-predicate-part2.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-ctype_xdigit.c���������������������������������������0000644�0001750�0001750�00000001712�14557510511�020312� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ /* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include "test-predicate-part1.h" { 0x0030, 0x0039 }, { 0x0041, 0x0046 }, { 0x0061, 0x0066 } #define PREDICATE(c) uc_is_xdigit (c) #include "test-predicate-part2.h" ������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-predicate-part1.h������������������������������������0000644�0001750�0001750�00000002046�14557510511�020611� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "unictype.h" #include <string.h> #include "macros.h" /* Interval of Unicode characters. */ typedef struct { ucs4_t start; ucs4_t end; } interval_t; /* Set of Unicode characters, described as list of intervals, in increasing order. */ static const interval_t set[] = { ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unictype/test-predicate-part2.h������������������������������������0000644�0001750�0001750�00000002056�14557510511�020613� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the Unicode character type functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ }; int main () { unsigned int c; size_t i; c = 0; for (i = 0; i < SIZEOF (set); i++) { for (; c < set[i].start; c++) ASSERT (!PREDICATE (c)); for (; c <= set[i].end; c++) ASSERT (PREDICATE (c)); } for (; c < 0x110000; c++) ASSERT (!PREDICATE (c)); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/uniwidth/����������������������������������������������������������0000755�0001750�0001750�00000000000�14557514200�014546� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/uniwidth/test-uc_width.c�������������������������������������������0000644�0001750�0001750�00000003425�14557510511�017422� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uc_width() function. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include "uniwidth.h" #include "macros.h" int main () { ucs4_t uc; /* Test width of ASCII characters. */ for (uc = 0x0020; uc < 0x007F; uc++) ASSERT (uc_width (uc, "ISO-8859-2") == 1); /* Test width of some non-spacing characters. */ ASSERT (uc_width (0x0301, "UTF-8") == 0); ASSERT (uc_width (0x05B0, "UTF-8") == 0); /* Test width of some format control characters. */ ASSERT (uc_width (0x200E, "UTF-8") == 0); ASSERT (uc_width (0x2060, "UTF-8") == 0); ASSERT (uc_width (0xE0001, "UTF-8") == 0); ASSERT (uc_width (0xE0044, "UTF-8") == 0); /* Test width of some zero width characters. */ ASSERT (uc_width (0x200B, "UTF-8") == 0); ASSERT (uc_width (0xFEFF, "UTF-8") == 0); /* Test width of some CJK characters. */ ASSERT (uc_width (0x3000, "UTF-8") == 2); ASSERT (uc_width (0xB250, "UTF-8") == 2); ASSERT (uc_width (0xFF1A, "UTF-8") == 2); ASSERT (uc_width (0x20369, "UTF-8") == 2); ASSERT (uc_width (0x2F876, "UTF-8") == 2); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/uniwidth/test-uc_width2.c������������������������������������������0000644�0001750�0001750�00000004220�14557510511�017476� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of uc_width() function. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include "uniwidth.h" #include <stdio.h> #include "macros.h" /* One of 0, '0', '1', 'A', '2'. */ static char current_width; /* The interval for which the current_width holds. */ static ucs4_t current_start; static ucs4_t current_end; static void finish_interval (void) { if (current_width != 0) { if (current_start == current_end) printf ("%04X\t\t%c\n", (unsigned) current_start, current_width); else printf ("%04X..%04X\t%c\n", (unsigned) current_start, (unsigned) current_end, current_width); current_width = 0; } } static void add_to_interval (ucs4_t uc, char width) { if (current_width == width && uc == current_end + 1) current_end = uc; else { finish_interval (); current_width = width; current_start = current_end = uc; } } int main () { ucs4_t uc; for (uc = 0; uc < 0x110000; uc++) { int w1 = uc_width (uc, "UTF-8"); int w2 = uc_width (uc, "GBK"); char width = (w1 == 0 && w2 == 0 ? '0' : w1 == 1 && w2 == 1 ? '1' : w1 == 1 && w2 == 2 ? 'A' : w1 == 2 && w2 == 2 ? '2' : 0); if (width == 0) { /* uc must be a control character. */ ASSERT (w1 < 0 && w2 < 0); } else add_to_interval (uc, width); } finish_interval (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/uniwidth/test-uc_width2.sh�����������������������������������������0000755�0001750�0001750�00000027061�14557510511�017701� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' HUP INT QUIT TERM tmpfiles="$tmpfiles uc_width.out" ${CHECKER} ./test-uc_width2${EXEEXT} | LC_ALL=C tr -d '\r' > uc_width.out tmpfiles="$tmpfiles uc_width.ok" cat > uc_width.ok <<\EOF 0000 0 0020..007E 1 00A0 1 00A1..00AC A 00AD 0 00AE..02FF A 0300..036F 0 0370..0482 A 0483..0489 0 048A..0590 A 0591..05BD 0 05BE A 05BF 0 05C0 A 05C1..05C2 0 05C3 A 05C4..05C5 0 05C6 A 05C7 0 05C8..05FF A 0600..0605 0 0606..060F A 0610..061A 0 061B A 061C 0 061D..064A A 064B..065F 0 0660..066F A 0670 0 0671..06D5 A 06D6..06DD 0 06DE A 06DF..06E4 0 06E5..06E6 A 06E7..06E8 0 06E9 A 06EA..06ED 0 06EE..070E A 070F 0 0710 A 0711 0 0712..072F A 0730..074A 0 074B..07A5 A 07A6..07B0 0 07B1..07EA A 07EB..07F3 0 07F4..07FC A 07FD 0 07FE..0815 A 0816..0819 0 081A A 081B..0823 0 0824 A 0825..0827 0 0828 A 0829..082D 0 082E..0858 A 0859..085B 0 085C..088F A 0890..0891 0 0892..0897 A 0898..089F 0 08A0..08C9 A 08CA..0902 0 0903..0939 A 093A 0 093B A 093C 0 093D..0940 A 0941..0948 0 0949..094C A 094D 0 094E..0950 A 0951..0957 0 0958..0961 A 0962..0963 0 0964..0980 A 0981 0 0982..09BB A 09BC 0 09BD..09C0 A 09C1..09C4 0 09C5..09CC A 09CD 0 09CE..09E1 A 09E2..09E3 0 09E4..09FD A 09FE 0 09FF..0A00 A 0A01..0A02 0 0A03..0A3B A 0A3C 0 0A3D..0A40 A 0A41..0A42 0 0A43..0A46 A 0A47..0A48 0 0A49..0A4A A 0A4B..0A4D 0 0A4E..0A50 A 0A51 0 0A52..0A6F A 0A70..0A71 0 0A72..0A74 A 0A75 0 0A76..0A80 A 0A81..0A82 0 0A83..0ABB A 0ABC 0 0ABD..0AC0 A 0AC1..0AC5 0 0AC6 A 0AC7..0AC8 0 0AC9..0ACC A 0ACD 0 0ACE..0AE1 A 0AE2..0AE3 0 0AE4..0AF9 A 0AFA..0AFF 0 0B00 A 0B01 0 0B02..0B3B A 0B3C 0 0B3D..0B3E A 0B3F 0 0B40 A 0B41..0B44 0 0B45..0B4C A 0B4D 0 0B4E..0B54 A 0B55..0B56 0 0B57..0B61 A 0B62..0B63 0 0B64..0B81 A 0B82 0 0B83..0BBF A 0BC0 0 0BC1..0BCC A 0BCD 0 0BCE..0BFF A 0C00 0 0C01..0C03 A 0C04 0 0C05..0C3B A 0C3C 0 0C3D A 0C3E..0C40 0 0C41..0C45 A 0C46..0C48 0 0C49 A 0C4A..0C4D 0 0C4E..0C54 A 0C55..0C56 0 0C57..0C61 A 0C62..0C63 0 0C64..0C80 A 0C81 0 0C82..0CBB A 0CBC 0 0CBD..0CCB A 0CCC..0CCD 0 0CCE..0CE1 A 0CE2..0CE3 0 0CE4..0CFF A 0D00..0D01 0 0D02..0D3A A 0D3B..0D3C 0 0D3D..0D40 A 0D41..0D44 0 0D45..0D4C A 0D4D 0 0D4E..0D61 A 0D62..0D63 0 0D64..0D80 A 0D81 0 0D82..0DC9 A 0DCA 0 0DCB..0DD1 A 0DD2..0DD4 0 0DD5 A 0DD6 0 0DD7..0E30 A 0E31 0 0E32..0E33 A 0E34..0E3A 0 0E3B..0E46 A 0E47..0E4E 0 0E4F..0EB0 A 0EB1 0 0EB2..0EB3 A 0EB4..0EBC 0 0EBD..0EC7 A 0EC8..0ECE 0 0ECF..0F17 A 0F18..0F19 0 0F1A..0F34 A 0F35 0 0F36 A 0F37 0 0F38 A 0F39 0 0F3A..0F70 A 0F71..0F7E 0 0F7F A 0F80..0F84 0 0F85 A 0F86..0F87 0 0F88..0F8C A 0F8D..0F97 0 0F98 A 0F99..0FBC 0 0FBD..0FC5 A 0FC6 0 0FC7..102C A 102D..1030 0 1031 A 1032..1037 0 1038 A 1039..103A 0 103B..103C A 103D..103E 0 103F..1057 A 1058..1059 0 105A..105D A 105E..1060 0 1061..1070 A 1071..1074 0 1075..1081 A 1082 0 1083..1084 A 1085..1086 0 1087..108C A 108D 0 108E..109C A 109D 0 109E..10FF A 1100..115F 2 1160..11FF 0 1200..135C A 135D..135F 0 1360..1711 A 1712..1714 0 1715..1731 A 1732..1733 0 1734..1751 A 1752..1753 0 1754..1771 A 1772..1773 0 1774..17B3 A 17B4..17B5 0 17B6 A 17B7..17BD 0 17BE..17C5 A 17C6 0 17C7..17C8 A 17C9..17D3 0 17D4..17DC A 17DD 0 17DE..180A A 180B..180F 0 1810..1884 A 1885..1886 0 1887..18A8 A 18A9 0 18AA..191F A 1920..1922 0 1923..1926 A 1927..1928 0 1929..1931 A 1932 0 1933..1938 A 1939..193B 0 193C..1A16 A 1A17..1A18 0 1A19..1A1A A 1A1B 0 1A1C..1A55 A 1A56 0 1A57 A 1A58..1A5E 0 1A5F A 1A60 0 1A61 A 1A62 0 1A63..1A64 A 1A65..1A6C 0 1A6D..1A72 A 1A73..1A7C 0 1A7D..1A7E A 1A7F 0 1A80..1AAF A 1AB0..1ACE 0 1ACF..1AFF A 1B00..1B03 0 1B04..1B33 A 1B34 0 1B35 A 1B36..1B3A 0 1B3B A 1B3C 0 1B3D..1B41 A 1B42 0 1B43..1B6A A 1B6B..1B73 0 1B74..1B7F A 1B80..1B81 0 1B82..1BA1 A 1BA2..1BA5 0 1BA6..1BA7 A 1BA8..1BA9 0 1BAA A 1BAB..1BAD 0 1BAE..1BE5 A 1BE6 0 1BE7 A 1BE8..1BE9 0 1BEA..1BEC A 1BED 0 1BEE A 1BEF..1BF1 0 1BF2..1C2B A 1C2C..1C33 0 1C34..1C35 A 1C36..1C37 0 1C38..1CCF A 1CD0..1CD2 0 1CD3 A 1CD4..1CE0 0 1CE1 A 1CE2..1CE8 0 1CE9..1CEC A 1CED 0 1CEE..1CF3 A 1CF4 0 1CF5..1CF7 A 1CF8..1CF9 0 1CFA..1DBF A 1DC0..1DFF 0 1E00..200A A 200B..200F 0 2010..2029 A 202A..202E 0 202F..205F A 2060..2064 0 2065 A 2066..206F 0 2070..20A8 A 20A9 1 20AA..20CF A 20D0..20F0 0 20F1..2319 A 231A..231B 2 231C..2328 A 2329..232A 2 232B..23E8 A 23E9..23EC 2 23ED..23EF A 23F0 2 23F1..23F2 A 23F3 2 23F4..25FC A 25FD..25FE 2 25FF..2613 A 2614..2615 2 2616..2647 A 2648..2653 2 2654..267E A 267F 2 2680..2692 A 2693 2 2694..26A0 A 26A1 2 26A2..26A9 A 26AA..26AB 2 26AC..26BC A 26BD..26BE 2 26BF..26C3 A 26C4..26C5 2 26C6..26CD A 26CE 2 26CF..26D3 A 26D4 2 26D5..26E9 A 26EA 2 26EB..26F1 A 26F2..26F3 2 26F4 A 26F5 2 26F6..26F9 A 26FA 2 26FB..26FC A 26FD 2 26FE..2704 A 2705 2 2706..2709 A 270A..270B 2 270C..2727 A 2728 2 2729..274B A 274C 2 274D A 274E 2 274F..2752 A 2753..2755 2 2756 A 2757 2 2758..2794 A 2795..2797 2 2798..27AF A 27B0 2 27B1..27BE A 27BF 2 27C0..2B1A A 2B1B..2B1C 2 2B1D..2B4F A 2B50 2 2B51..2B54 A 2B55 2 2B56..2CEE A 2CEF..2CF1 0 2CF2..2D7E A 2D7F 0 2D80..2DDF A 2DE0..2DFF 0 2E00..2E7F A 2E80..3029 2 302A..302D 0 302E..303E 2 303F A 3040..3098 2 3099..309A 0 309B..3247 2 3248..324F A 3250..4DBF 2 4DC0..4DFF A 4E00..A4CF 2 A4D0..A66E A A66F..A672 0 A673 A A674..A67D 0 A67E..A69D A A69E..A69F 0 A6A0..A6EF A A6F0..A6F1 0 A6F2..A801 A A802 0 A803..A805 A A806 0 A807..A80A A A80B 0 A80C..A824 A A825..A826 0 A827..A82B A A82C 0 A82D..A8C3 A A8C4..A8C5 0 A8C6..A8DF A A8E0..A8F1 0 A8F2..A8FE A A8FF 0 A900..A925 A A926..A92D 0 A92E..A946 A A947..A951 0 A952..A95F A A960..A97C 2 A97D..A97F A A980..A982 0 A983..A9B2 A A9B3 0 A9B4..A9B5 A A9B6..A9B9 0 A9BA..A9BB A A9BC..A9BD 0 A9BE..A9E4 A A9E5 0 A9E6..AA28 A AA29..AA2E 0 AA2F..AA30 A AA31..AA32 0 AA33..AA34 A AA35..AA36 0 AA37..AA42 A AA43 0 AA44..AA4B A AA4C 0 AA4D..AA7B A AA7C 0 AA7D..AAAF A AAB0 0 AAB1 A AAB2..AAB4 0 AAB5..AAB6 A AAB7..AAB8 0 AAB9..AABD A AABE..AABF 0 AAC0 A AAC1 0 AAC2..AAEB A AAEC..AAED 0 AAEE..AAF5 A AAF6 0 AAF7..ABE4 A ABE5 0 ABE6..ABE7 A ABE8 0 ABE9..ABEC A ABED 0 ABEE..ABFF A AC00..D7A3 2 D7A4..D7AF A D7B0..D7C6 0 D7C7..D7CA A D7CB..D7FB 0 D7FC..F8FF A F900..FAFF 2 FB00..FB1D A FB1E 0 FB1F..FDFF A FE00..FE0F 0 FE10..FE1F 2 FE20..FE2F 0 FE30..FE6F 2 FE70..FEFE A FEFF 0 FF00..FF60 2 FF61..FFDF 1 FFE0..FFE6 2 FFE7..FFF8 1 FFF9..FFFB 0 FFFC..101FC 1 101FD 0 101FE..102DF 1 102E0 0 102E1..10375 1 10376..1037A 0 1037B..10A00 1 10A01..10A03 0 10A04 1 10A05..10A06 0 10A07..10A0B 1 10A0C..10A0F 0 10A10..10A37 1 10A38..10A3A 0 10A3B..10A3E 1 10A3F 0 10A40..10AE4 1 10AE5..10AE6 0 10AE7..10D23 1 10D24..10D27 0 10D28..10EAA 1 10EAB..10EAC 0 10EAD..10EFC 1 10EFD..10EFF 0 10F00..10F45 1 10F46..10F50 0 10F51..10F81 1 10F82..10F85 0 10F86..11000 1 11001 0 11002..11037 1 11038..11046 0 11047..1106F 1 11070 0 11071..11072 1 11073..11074 0 11075..1107E 1 1107F..11081 0 11082..110B2 1 110B3..110B6 0 110B7..110B8 1 110B9..110BA 0 110BB..110BC 1 110BD 0 110BE..110C1 1 110C2 0 110C3..110CC 1 110CD 0 110CE..110FF 1 11100..11102 0 11103..11126 1 11127..1112B 0 1112C 1 1112D..11134 0 11135..11172 1 11173 0 11174..1117F 1 11180..11181 0 11182..111B5 1 111B6..111BE 0 111BF..111C8 1 111C9..111CC 0 111CD..111CE 1 111CF 0 111D0..1122E 1 1122F..11231 0 11232..11233 1 11234 0 11235 1 11236..11237 0 11238..1123D 1 1123E 0 1123F..11240 1 11241 0 11242..112DE 1 112DF 0 112E0..112E2 1 112E3..112EA 0 112EB..112FF 1 11300..11301 0 11302..1133A 1 1133B..1133C 0 1133D..1133F 1 11340 0 11341..11365 1 11366..1136C 0 1136D..1136F 1 11370..11374 0 11375..11437 1 11438..1143F 0 11440..11441 1 11442..11444 0 11445 1 11446 0 11447..1145D 1 1145E 0 1145F..114B2 1 114B3..114B8 0 114B9 1 114BA 0 114BB..114BE 1 114BF..114C0 0 114C1 1 114C2..114C3 0 114C4..115B1 1 115B2..115B5 0 115B6..115BB 1 115BC..115BD 0 115BE 1 115BF..115C0 0 115C1..115DB 1 115DC..115DD 0 115DE..11632 1 11633..1163A 0 1163B..1163C 1 1163D 0 1163E 1 1163F..11640 0 11641..116AA 1 116AB 0 116AC 1 116AD 0 116AE..116AF 1 116B0..116B5 0 116B6 1 116B7 0 116B8..1171C 1 1171D..1171F 0 11720..11721 1 11722..11725 0 11726 1 11727..1172B 0 1172C..1182E 1 1182F..11837 0 11838 1 11839..1183A 0 1183B..1193A 1 1193B..1193C 0 1193D 1 1193E 0 1193F..11942 1 11943 0 11944..119D3 1 119D4..119D7 0 119D8..119D9 1 119DA..119DB 0 119DC..119DF 1 119E0 0 119E1..11A00 1 11A01..11A06 0 11A07..11A08 1 11A09..11A0A 0 11A0B..11A32 1 11A33..11A38 0 11A39..11A3A 1 11A3B..11A3E 0 11A3F..11A46 1 11A47 0 11A48..11A50 1 11A51..11A56 0 11A57..11A58 1 11A59..11A5B 0 11A5C..11A89 1 11A8A..11A96 0 11A97 1 11A98..11A99 0 11A9A..11C2F 1 11C30..11C36 0 11C37 1 11C38..11C3D 0 11C3E..11C91 1 11C92..11CA7 0 11CA8..11CA9 1 11CAA..11CB0 0 11CB1 1 11CB2..11CB3 0 11CB4 1 11CB5..11CB6 0 11CB7..11D30 1 11D31..11D36 0 11D37..11D39 1 11D3A 0 11D3B 1 11D3C..11D3D 0 11D3E 1 11D3F..11D45 0 11D46 1 11D47 0 11D48..11D8F 1 11D90..11D91 0 11D92..11D94 1 11D95 0 11D96 1 11D97 0 11D98..11EF2 1 11EF3..11EF4 0 11EF5..11EFF 1 11F00..11F01 0 11F02..11F35 1 11F36..11F3A 0 11F3B..11F3F 1 11F40 0 11F41 1 11F42 0 11F43..1342F 1 13430..13440 0 13441..13446 1 13447..13455 0 13456..16AEF 1 16AF0..16AF4 0 16AF5..16B2F 1 16B30..16B36 0 16B37..16F4E 1 16F4F 0 16F50..16F8E 1 16F8F..16F92 0 16F93..16FDF 1 16FE0..16FE3 2 16FE4 0 16FE5..16FEF 1 16FF0..16FF1 2 16FF2..16FFF 1 17000..187F7 2 187F8..187FF 1 18800..18CD5 2 18CD6..18CFF 1 18D00..18D08 2 18D09..1AFEF 1 1AFF0..1AFF3 2 1AFF4 1 1AFF5..1AFFB 2 1AFFC 1 1AFFD..1AFFE 2 1AFFF 1 1B000..1B122 2 1B123..1B14F 1 1B150..1B152 2 1B153..1B163 1 1B164..1B167 2 1B168..1B16F 1 1B170..1B2FB 2 1B2FC..1BC9C 1 1BC9D..1BC9E 0 1BC9F 1 1BCA0..1BCA3 0 1BCA4..1CEFF 1 1CF00..1CF2D 0 1CF2E..1CF2F 1 1CF30..1CF46 0 1CF47..1D166 1 1D167..1D169 0 1D16A..1D172 1 1D173..1D182 0 1D183..1D184 1 1D185..1D18B 0 1D18C..1D1A9 1 1D1AA..1D1AD 0 1D1AE..1D241 1 1D242..1D244 0 1D245..1D9FF 1 1DA00..1DA36 0 1DA37..1DA3A 1 1DA3B..1DA6C 0 1DA6D..1DA74 1 1DA75 0 1DA76..1DA83 1 1DA84 0 1DA85..1DA9A 1 1DA9B..1DA9F 0 1DAA0 1 1DAA1..1DAAF 0 1DAB0..1DFFF 1 1E000..1E006 0 1E007 1 1E008..1E018 0 1E019..1E01A 1 1E01B..1E021 0 1E022 1 1E023..1E024 0 1E025 1 1E026..1E02A 0 1E02B..1E08E 1 1E08F 0 1E090..1E12F 1 1E130..1E136 0 1E137..1E2AD 1 1E2AE 0 1E2AF..1E2EB 1 1E2EC..1E2EF 0 1E2F0..1E4EB 1 1E4EC..1E4EF 0 1E4F0..1E8CF 1 1E8D0..1E8D6 0 1E8D7..1E943 1 1E944..1E94A 0 1E94B..1F003 1 1F004 2 1F005..1F0CE 1 1F0CF 2 1F0D0..1F18D 1 1F18E 2 1F18F..1F190 1 1F191..1F19A 2 1F19B..1F1FF 1 1F200..1F320 2 1F321..1F32C 1 1F32D..1F335 2 1F336 1 1F337..1F37C 2 1F37D 1 1F37E..1F393 2 1F394..1F39F 1 1F3A0..1F3CA 2 1F3CB..1F3CE 1 1F3CF..1F3D3 2 1F3D4..1F3DF 1 1F3E0..1F3F0 2 1F3F1..1F3F3 1 1F3F4 2 1F3F5..1F3F7 1 1F3F8..1F43E 2 1F43F 1 1F440 2 1F441 1 1F442..1F4FC 2 1F4FD..1F4FE 1 1F4FF..1F53D 2 1F53E..1F54A 1 1F54B..1F54E 2 1F54F 1 1F550..1F567 2 1F568..1F579 1 1F57A 2 1F57B..1F594 1 1F595..1F596 2 1F597..1F5A3 1 1F5A4 2 1F5A5..1F5FA 1 1F5FB..1F64F 2 1F650..1F67F 1 1F680..1F6C5 2 1F6C6..1F6CB 1 1F6CC 2 1F6CD..1F6CF 1 1F6D0..1F6D2 2 1F6D3..1F6D4 1 1F6D5..1F6D7 2 1F6D8..1F6DC 1 1F6DD..1F6DF 2 1F6E0..1F6EA 1 1F6EB..1F6EC 2 1F6ED..1F6F3 1 1F6F4..1F6FC 2 1F6FD..1F7DF 1 1F7E0..1F7EB 2 1F7EC..1F7EF 1 1F7F0 2 1F7F1..1F90B 1 1F90C..1F93A 2 1F93B 1 1F93C..1F945 2 1F946 1 1F947..1F9FF 2 1FA00..1FA6F 1 1FA70..1FA74 2 1FA75..1FA77 1 1FA78..1FA7C 2 1FA7D..1FA7F 1 1FA80..1FA86 2 1FA87..1FA8F 1 1FA90..1FAAC 2 1FAAD..1FAAF 1 1FAB0..1FABA 2 1FABB..1FABF 1 1FAC0..1FAC5 2 1FAC6..1FACF 1 1FAD0..1FAD9 2 1FADA..1FADF 1 1FAE0..1FAE7 2 1FAE8..1FAEF 1 1FAF0..1FAF6 2 1FAF7..1FFFF 1 20000..3FFFF 2 40000..E0000 1 E0001 0 E0002..E001F 1 E0020..E007F 0 E0080..E00FF 1 E0100..E01EF 0 E01F0..10FFFF 1 EOF : "${DIFF=diff}" ${DIFF} uc_width.ok uc_width.out result=$? rm -fr $tmpfiles exit $result �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/Makefile.am��������������������������������������������������������0000644�0001750�0001750�00000234447�14557510555�014716� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2024 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This file 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. AUTOMAKE_OPTIONS = 1.14 foreign subdir-objects SUBDIRS = . TESTS = XFAIL_TESTS = TESTS_ENVIRONMENT = noinst_PROGRAMS = check_PROGRAMS = EXTRA_PROGRAMS = noinst_HEADERS = noinst_LIBRARIES = check_LIBRARIES = libtests.a EXTRA_DIST = BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = CFLAGS = @GL_CFLAG_ALLOW_WARNINGS@ $(GL_CFLAG_GNULIB_WARNINGS) @CFLAGS@ CXXFLAGS = @GL_CXXFLAG_ALLOW_WARNINGS@ @CXXFLAGS@ AM_CPPFLAGS = \ -D@gltests_WITNESS@=1 \ -I. -I$(srcdir) \ -I../.. -I$(srcdir)/../.. \ -I../../bootstrapped/lib -I$(srcdir)/../../bootstrapped/lib LDADD = libtests.a ../../bootstrapped/lib/libgnu.la libtests.a ../../bootstrapped/lib/libgnu.la libtests.a $(LIBTESTS_LIBDEPS) libtests_a_SOURCES = libtests_a_LIBADD = $(gltests_LIBOBJS) libtests_a_DEPENDENCIES = $(gltests_LIBOBJS) EXTRA_libtests_a_SOURCES = AM_LIBTOOLFLAGS = --preserve-dup-deps TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)' ## begin gnulib module accept if GL_COND_OBJ_ACCEPT libtests_a_SOURCES += accept.c endif EXTRA_DIST += w32sock.h ## end gnulib module accept ## begin gnulib module accept-tests TESTS += test-accept check_PROGRAMS += test-accept test_accept_LDADD = $(LDADD) @LIBSOCKET@ EXTRA_DIST += test-accept.c signature.h macros.h ## end gnulib module accept-tests ## begin gnulib module access-tests TESTS += test-access check_PROGRAMS += test-access EXTRA_DIST += test-access.c test-access.h signature.h macros.h ## end gnulib module access-tests ## begin gnulib module alignasof-tests TESTS += test-alignasof check_PROGRAMS += test-alignasof EXTRA_DIST += test-alignasof.c macros.h ## end gnulib module alignasof-tests ## begin gnulib module alloca-opt-tests TESTS += test-alloca-opt check_PROGRAMS += test-alloca-opt EXTRA_DIST += test-alloca-opt.c ## end gnulib module alloca-opt-tests ## begin gnulib module argp-tests TESTS += test-argp test-argp-2.sh check_PROGRAMS += test-argp test_argp_LDADD = $(LDADD) @LIBINTL@ EXTRA_DIST += test-argp.c test-argp-2.sh macros.h ## end gnulib module argp-tests ## begin gnulib module arpa_inet BUILT_SOURCES += arpa/inet.h # We need the following in order to create <arpa/inet.h> when the system # doesn't have one. arpa/inet.h: arpa_inet.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_GEN)$(MKDIR_P) '%reldir%/arpa' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_ARPA_INET_H''@|$(NEXT_ARPA_INET_H)|g' \ -e 's|@''HAVE_ARPA_INET_H''@|$(HAVE_ARPA_INET_H)|g' \ -e 's/@''GNULIB_INET_NTOP''@/$(GL_GNULIB_INET_NTOP)/g' \ -e 's/@''GNULIB_INET_PTON''@/$(GL_GNULIB_INET_PTON)/g' \ -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ -e 's|@''HAVE_DECL_INET_NTOP''@|$(HAVE_DECL_INET_NTOP)|g' \ -e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \ -e 's|@''REPLACE_INET_NTOP''@|$(REPLACE_INET_NTOP)|g' \ -e 's|@''REPLACE_INET_PTON''@|$(REPLACE_INET_PTON)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/arpa_inet.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += arpa/inet.h arpa/inet.h-t MOSTLYCLEANDIRS += arpa EXTRA_DIST += arpa_inet.in.h ## end gnulib module arpa_inet ## begin gnulib module arpa_inet-tests TESTS += test-arpa_inet check_PROGRAMS += test-arpa_inet EXTRA_DIST += test-arpa_inet.c ## end gnulib module arpa_inet-tests ## begin gnulib module assert-h-tests TESTS += test-assert check_PROGRAMS += test-assert EXTRA_DIST += test-assert.c ## end gnulib module assert-h-tests ## begin gnulib module binary-io libtests_a_SOURCES += binary-io.h binary-io.c ## end gnulib module binary-io ## begin gnulib module binary-io-tests TESTS += test-binary-io.sh check_PROGRAMS += test-binary-io EXTRA_DIST += test-binary-io.sh test-binary-io.c macros.h ## end gnulib module binary-io-tests ## begin gnulib module bind if GL_COND_OBJ_BIND libtests_a_SOURCES += bind.c endif EXTRA_DIST += w32sock.h ## end gnulib module bind ## begin gnulib module bind-tests TESTS += test-bind check_PROGRAMS += test-bind test_bind_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) EXTRA_DIST += test-bind.c signature.h macros.h ## end gnulib module bind-tests ## begin gnulib module btoc32 libtests_a_SOURCES += btoc32.c ## end gnulib module btoc32 ## begin gnulib module btoc32-tests TESTS += test-btoc32-1.sh test-btoc32-2.sh test-btoc32-3.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-btoc32 test_btoc32_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(LIBC32CONV) EXTRA_DIST += test-btoc32-1.sh test-btoc32-2.sh test-btoc32-3.sh test-btoc32.c signature.h macros.h ## end gnulib module btoc32-tests ## begin gnulib module btowc-tests TESTS += test-btowc-1.sh test-btowc-2.sh test-btowc-3.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-btowc test_btowc_LDADD = $(LDADD) $(SETLOCALE_LIB) EXTRA_DIST += test-btowc-1.sh test-btowc-2.sh test-btowc-3.sh test-btowc.c signature.h macros.h ## end gnulib module btowc-tests ## begin gnulib module c-ctype-tests TESTS += test-c-ctype check_PROGRAMS += test-c-ctype test_c_ctype_LDADD = $(LDADD) $(SETLOCALE_LIB) EXTRA_DIST += test-c-ctype.c macros.h ## end gnulib module c-ctype-tests ## begin gnulib module c-strcase libtests_a_SOURCES += c-strcase.h c-strcasecmp.c c-strncasecmp.c ## end gnulib module c-strcase ## begin gnulib module c-strcase-tests TESTS += test-c-strcase.sh TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' check_PROGRAMS += test-c-strcasecmp test-c-strncasecmp test_c_strcasecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) test_c_strncasecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) EXTRA_DIST += test-c-strcase.sh test-c-strcasecmp.c test-c-strncasecmp.c macros.h ## end gnulib module c-strcase-tests ## begin gnulib module c-strcasestr libtests_a_SOURCES += c-strcasestr.h c-strcasestr.c EXTRA_DIST += str-two-way.h ## end gnulib module c-strcasestr ## begin gnulib module c-strcasestr-tests TESTS += test-c-strcasestr check_PROGRAMS += test-c-strcasestr EXTRA_DIST += test-c-strcasestr.c macros.h ## end gnulib module c-strcasestr-tests ## begin gnulib module c32isalnum-tests TESTS += test-c32isalnum.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32isalnum test_c32isalnum_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32isalnum.sh test-c32isalnum.c signature.h macros.h ## end gnulib module c32isalnum-tests ## begin gnulib module c32isalpha-tests TESTS += test-c32isalpha.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32isalpha test_c32isalpha_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32isalpha.sh test-c32isalpha.c signature.h macros.h ## end gnulib module c32isalpha-tests ## begin gnulib module c32isblank-tests TESTS += test-c32isblank.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32isblank test_c32isblank_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32isblank.sh test-c32isblank.c signature.h macros.h ## end gnulib module c32isblank-tests ## begin gnulib module c32iscntrl-tests TESTS += test-c32iscntrl.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32iscntrl test_c32iscntrl_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32iscntrl.sh test-c32iscntrl.c signature.h macros.h ## end gnulib module c32iscntrl-tests ## begin gnulib module c32isdigit-tests TESTS += test-c32isdigit.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32isdigit test_c32isdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32isdigit.sh test-c32isdigit.c signature.h macros.h ## end gnulib module c32isdigit-tests ## begin gnulib module c32isgraph-tests TESTS += test-c32isgraph.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32isgraph test_c32isgraph_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32isgraph.sh test-c32isgraph.c signature.h macros.h ## end gnulib module c32isgraph-tests ## begin gnulib module c32islower-tests TESTS += test-c32islower.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32islower test_c32islower_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32islower.sh test-c32islower.c signature.h macros.h ## end gnulib module c32islower-tests ## begin gnulib module c32isprint-tests TESTS += test-c32isprint.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32isprint test_c32isprint_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32isprint.sh test-c32isprint.c signature.h macros.h ## end gnulib module c32isprint-tests ## begin gnulib module c32ispunct-tests TESTS += test-c32ispunct.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32ispunct test_c32ispunct_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32ispunct.sh test-c32ispunct.c signature.h macros.h ## end gnulib module c32ispunct-tests ## begin gnulib module c32isspace-tests TESTS += test-c32isspace.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32isspace test_c32isspace_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32isspace.sh test-c32isspace.c signature.h macros.h ## end gnulib module c32isspace-tests ## begin gnulib module c32isupper-tests TESTS += test-c32isupper.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32isupper test_c32isupper_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32isupper.sh test-c32isupper.c signature.h macros.h ## end gnulib module c32isupper-tests ## begin gnulib module c32isxdigit-tests TESTS += test-c32isxdigit.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32isxdigit test_c32isxdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32isxdigit.sh test-c32isxdigit.c signature.h macros.h ## end gnulib module c32isxdigit-tests ## begin gnulib module c32rtomb if GL_COND_OBJ_C32RTOMB libtests_a_SOURCES += c32rtomb.c endif ## end gnulib module c32rtomb ## begin gnulib module c32rtomb-tests TESTS += \ test-c32rtomb.sh \ test-c32rtomb-w32-2.sh test-c32rtomb-w32-3.sh test-c32rtomb-w32-4.sh \ test-c32rtomb-w32-5.sh test-c32rtomb-w32-6.sh test-c32rtomb-w32-7.sh \ test-c32rtomb-w32-8.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32rtomb test-c32rtomb-w32 test_c32rtomb_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(LIBC32CONV) EXTRA_DIST += test-c32rtomb.sh test-c32rtomb.c test-c32rtomb-w32-2.sh test-c32rtomb-w32-3.sh test-c32rtomb-w32-4.sh test-c32rtomb-w32-5.sh test-c32rtomb-w32-6.sh test-c32rtomb-w32-7.sh test-c32rtomb-w32-8.sh test-c32rtomb-w32.c signature.h macros.h ## end gnulib module c32rtomb-tests ## begin gnulib module c32tob libtests_a_SOURCES += c32tob.c ## end gnulib module c32tob ## begin gnulib module c32tolower-tests TESTS += test-c32tolower.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-c32tolower test_c32tolower_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32tolower.sh test-c32tolower.c signature.h macros.h ## end gnulib module c32tolower-tests ## begin gnulib module c32width-tests TESTS += test-c32width check_PROGRAMS += test-c32width test_c32width_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) $(LIBC32CONV) EXTRA_DIST += test-c32width.c signature.h macros.h ## end gnulib module c32width-tests ## begin gnulib module calloc-gnu EXTRA_DIST += calloc.c EXTRA_libtests_a_SOURCES += calloc.c ## end gnulib module calloc-gnu ## begin gnulib module calloc-gnu-tests TESTS += test-calloc-gnu check_PROGRAMS += test-calloc-gnu EXTRA_DIST += test-calloc-gnu.c macros.h ## end gnulib module calloc-gnu-tests ## begin gnulib module calloc-posix EXTRA_DIST += calloc.c EXTRA_libtests_a_SOURCES += calloc.c ## end gnulib module calloc-posix ## begin gnulib module chdir-tests TESTS += test-chdir check_PROGRAMS += test-chdir EXTRA_DIST += test-chdir.c signature.h macros.h ## end gnulib module chdir-tests ## begin gnulib module cloexec-tests TESTS += test-cloexec check_PROGRAMS += test-cloexec EXTRA_DIST += test-cloexec.c macros.h ## end gnulib module cloexec-tests ## begin gnulib module close-tests TESTS += test-close check_PROGRAMS += test-close EXTRA_DIST += test-close.c signature.h macros.h ## end gnulib module close-tests ## begin gnulib module connect if GL_COND_OBJ_CONNECT libtests_a_SOURCES += connect.c endif EXTRA_DIST += w32sock.h ## end gnulib module connect ## begin gnulib module connect-tests TESTS += test-connect check_PROGRAMS += test-connect test_connect_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) EXTRA_DIST += test-connect.c signature.h macros.h ## end gnulib module connect-tests ## begin gnulib module creat if GL_COND_OBJ_CREAT libtests_a_SOURCES += creat.c endif ## end gnulib module creat ## begin gnulib module creat-tests TESTS += test-creat check_PROGRAMS += test-creat EXTRA_DIST += test-creat.c signature.h macros.h ## end gnulib module creat-tests ## begin gnulib module ctype BUILT_SOURCES += ctype.h # We need the following in order to create <ctype.h> when the system # doesn't have one that works with the given compiler. ctype.h: ctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_CTYPE_H''@|$(NEXT_CTYPE_H)|g' \ -e 's/@''GNULIB_ISBLANK''@/$(GL_GNULIB_ISBLANK)/g' \ -e 's/@''HAVE_ISBLANK''@/$(HAVE_ISBLANK)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/ctype.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += ctype.h ctype.h-t EXTRA_DIST += ctype.in.h ## end gnulib module ctype ## begin gnulib module ctype-tests TESTS += test-ctype check_PROGRAMS += test-ctype EXTRA_DIST += test-ctype.c ## end gnulib module ctype-tests ## begin gnulib module dirent-tests TESTS += test-dirent check_PROGRAMS += test-dirent EXTRA_DIST += test-dirent.c ## end gnulib module dirent-tests ## begin gnulib module dirfd-tests TESTS += test-dirfd check_PROGRAMS += test-dirfd EXTRA_DIST += test-dirfd.c macros.h ## end gnulib module dirfd-tests ## begin gnulib module dup if GL_COND_OBJ_DUP libtests_a_SOURCES += dup.c endif ## end gnulib module dup ## begin gnulib module dup-tests TESTS += test-dup check_PROGRAMS += test-dup EXTRA_DIST += test-dup.c signature.h macros.h ## end gnulib module dup-tests ## begin gnulib module dup2-tests TESTS += test-dup2 check_PROGRAMS += test-dup2 EXTRA_DIST += test-dup2.c signature.h macros.h ## end gnulib module dup2-tests ## begin gnulib module environ-tests TESTS += test-environ check_PROGRAMS += test-environ EXTRA_DIST += test-environ.c ## end gnulib module environ-tests ## begin gnulib module errno-tests TESTS += test-errno check_PROGRAMS += test-errno EXTRA_DIST += test-errno.c ## end gnulib module errno-tests ## begin gnulib module error-tests TESTS += test-error.sh check_PROGRAMS += test-error test_error_LDADD = $(LDADD) $(LIBINTL) EXTRA_DIST += test-error.sh test-error.c macros.h ## end gnulib module error-tests ## begin gnulib module euidaccess-tests TESTS += test-euidaccess check_PROGRAMS += test-euidaccess EXTRA_DIST += test-euidaccess.c test-access.h signature.h macros.h ## end gnulib module euidaccess-tests ## begin gnulib module faccessat-tests TESTS += test-faccessat check_PROGRAMS += test-faccessat test_faccessat_LDADD = $(LDADD) $(EUIDACCESS_LIBGEN) @LIBINTL@ EXTRA_DIST += test-faccessat.c signature.h macros.h ## end gnulib module faccessat-tests ## begin gnulib module fchdir-tests TESTS += test-fchdir check_PROGRAMS += test-fchdir test_fchdir_LDADD = $(LDADD) $(LIBINTL) EXTRA_DIST += test-fchdir.c signature.h macros.h ## end gnulib module fchdir-tests ## begin gnulib module fcntl-h-tests TESTS += test-fcntl-h check_PROGRAMS += test-fcntl-h EXTRA_DIST += test-fcntl-h.c ## end gnulib module fcntl-h-tests ## begin gnulib module fcntl-tests TESTS += test-fcntl check_PROGRAMS += test-fcntl EXTRA_DIST += test-fcntl.c signature.h macros.h ## end gnulib module fcntl-tests ## begin gnulib module fdopen if GL_COND_OBJ_FDOPEN libtests_a_SOURCES += fdopen.c endif ## end gnulib module fdopen ## begin gnulib module fdopen-tests TESTS += test-fdopen check_PROGRAMS += test-fdopen EXTRA_DIST += test-fdopen.c signature.h macros.h ## end gnulib module fdopen-tests ## begin gnulib module fgetc-tests TESTS += test-fgetc check_PROGRAMS += test-fgetc EXTRA_DIST += test-fgetc.c signature.h macros.h ## end gnulib module fgetc-tests ## begin gnulib module flexmember EXTRA_DIST += flexmember.h ## end gnulib module flexmember ## begin gnulib module float-tests TESTS += test-float check_PROGRAMS += test-float EXTRA_DIST += test-float.c macros.h ## end gnulib module float-tests ## begin gnulib module fpucw EXTRA_DIST += fpucw.h ## end gnulib module fpucw ## begin gnulib module fputc-tests TESTS += test-fputc check_PROGRAMS += test-fputc EXTRA_DIST += test-fputc.c signature.h macros.h ## end gnulib module fputc-tests ## begin gnulib module fread-tests TESTS += test-fread check_PROGRAMS += test-fread EXTRA_DIST += test-fread.c signature.h macros.h ## end gnulib module fread-tests ## begin gnulib module free-posix-tests TESTS += test-free check_PROGRAMS += test-free EXTRA_DIST += test-free.c macros.h ## end gnulib module free-posix-tests ## begin gnulib module fstat-tests TESTS += test-fstat check_PROGRAMS += test-fstat EXTRA_DIST += test-fstat.c signature.h macros.h ## end gnulib module fstat-tests ## begin gnulib module fstatat-tests TESTS += test-fstatat check_PROGRAMS += test-fstatat test_fstatat_LDADD = $(LDADD) @LIBINTL@ EXTRA_DIST += test-fstatat.c test-lstat.h test-stat.h signature.h macros.h ## end gnulib module fstatat-tests ## begin gnulib module ftruncate if GL_COND_OBJ_FTRUNCATE libtests_a_SOURCES += ftruncate.c endif ## end gnulib module ftruncate ## begin gnulib module ftruncate-tests TESTS += test-ftruncate.sh check_PROGRAMS += test-ftruncate EXTRA_DIST += test-ftruncate.c test-ftruncate.sh signature.h macros.h ## end gnulib module ftruncate-tests ## begin gnulib module func-tests TESTS += test-func check_PROGRAMS += test-func EXTRA_DIST += test-func.c macros.h ## end gnulib module func-tests ## begin gnulib module fwrite-tests TESTS += test-fwrite check_PROGRAMS += test-fwrite EXTRA_DIST += test-fwrite.c signature.h macros.h ## end gnulib module fwrite-tests ## begin gnulib module gen-header # In 'sed', replace the pattern space with a "DO NOT EDIT" comment. SED_HEADER_NOEDIT = s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */, # '$(SED_HEADER_STDOUT) -e "..."' runs 'sed' but first outputs "DO NOT EDIT". SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G # '$(SED_HEADER_TO_AT_t) FILE' copies FILE to $@-t, prepending a leading # "DO_NOT_EDIT". Although this could be done more simply via: # SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) > $@-t # the -n and 'w' avoid a fork+exec, at least when GNU Make is used. SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t' # Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that gl_V_at = $(AM_V_GEN) ## end gnulib module gen-header ## begin gnulib module getcwd-lgpl-tests TESTS += test-getcwd-lgpl check_PROGRAMS += test-getcwd-lgpl test_getcwd_lgpl_LDADD = $(LDADD) $(LIBINTL) EXTRA_DIST += test-getcwd-lgpl.c signature.h macros.h ## end gnulib module getcwd-lgpl-tests ## begin gnulib module getdelim-tests TESTS += test-getdelim check_PROGRAMS += test-getdelim MOSTLYCLEANFILES += test-getdelim.txt EXTRA_DIST += test-getdelim.c signature.h macros.h ## end gnulib module getdelim-tests ## begin gnulib module getdtablesize-tests TESTS += test-getdtablesize check_PROGRAMS += test-getdtablesize EXTRA_DIST += test-getdtablesize.c signature.h macros.h ## end gnulib module getdtablesize-tests ## begin gnulib module getgroups-tests TESTS += test-getgroups check_PROGRAMS += test-getgroups EXTRA_DIST += test-getgroups.c signature.h macros.h ## end gnulib module getgroups-tests ## begin gnulib module getline-tests TESTS += test-getline check_PROGRAMS += test-getline MOSTLYCLEANFILES += test-getline.txt EXTRA_DIST += test-getline.c signature.h macros.h ## end gnulib module getline-tests ## begin gnulib module getopt-gnu-tests TESTS += test-getopt-gnu check_PROGRAMS += test-getopt-gnu test_getopt_gnu_LDADD = $(LDADD) $(LIBINTL) EXTRA_DIST += macros.h signature.h test-getopt-gnu.c test-getopt-main.h test-getopt.h test-getopt_long.h ## end gnulib module getopt-gnu-tests ## begin gnulib module getopt-posix-tests TESTS += test-getopt-posix check_PROGRAMS += test-getopt-posix test_getopt_posix_LDADD = $(LDADD) $(LIBINTL) EXTRA_DIST += macros.h signature.h test-getopt-posix.c test-getopt-main.h test-getopt.h ## end gnulib module getopt-posix-tests ## begin gnulib module getpagesize if GL_COND_OBJ_GETPAGESIZE libtests_a_SOURCES += getpagesize.c endif ## end gnulib module getpagesize ## begin gnulib module getprogname-tests DEFS += -DEXEEXT=\"@EXEEXT@\" TESTS += test-getprogname check_PROGRAMS += test-getprogname test_getprogname_LDADD = $(LDADD) EXTRA_DIST += test-getprogname.c ## end gnulib module getprogname-tests ## begin gnulib module gettimeofday-tests TESTS += test-gettimeofday check_PROGRAMS += test-gettimeofday EXTRA_DIST += test-gettimeofday.c signature.h macros.h ## end gnulib module gettimeofday-tests ## begin gnulib module glibc-internal/dynarray-tests TESTS += test-dynarray check_PROGRAMS += test-dynarray EXTRA_DIST += test-dynarray.c macros.h ## end gnulib module glibc-internal/dynarray-tests ## begin gnulib module hard-locale-tests TESTS += test-hard-locale check_PROGRAMS += test-hard-locale test_hard_locale_LDADD = $(LDADD) $(SETLOCALE_LIB) @HARD_LOCALE_LIB@ # We cannot call this program 'locale', because the C++ compiler on Mac OS X # would then barf upon '#include <locale>'. So, call it 'current-locale'. noinst_PROGRAMS += current-locale current_locale_SOURCES = locale.c EXTRA_DIST += test-hard-locale.c locale.c ## end gnulib module hard-locale-tests ## begin gnulib module ialloc libtests_a_SOURCES += ialloc.c EXTRA_DIST += ialloc.h ## end gnulib module ialloc ## begin gnulib module ignore-value EXTRA_DIST += ignore-value.h ## end gnulib module ignore-value ## begin gnulib module ignore-value-tests TESTS += test-ignore-value check_PROGRAMS += test-ignore-value EXTRA_DIST += test-ignore-value.c ## end gnulib module ignore-value-tests ## begin gnulib module inet_pton if GL_COND_OBJ_INET_PTON libtests_a_SOURCES += inet_pton.c endif ## end gnulib module inet_pton ## begin gnulib module inet_pton-tests TESTS += test-inet_pton check_PROGRAMS += test-inet_pton test_inet_pton_LDADD = $(LDADD) @INET_PTON_LIB@ EXTRA_DIST += test-inet_pton.c signature.h macros.h ## end gnulib module inet_pton-tests ## begin gnulib module intprops-tests TESTS += test-intprops check_PROGRAMS += test-intprops EXTRA_DIST += test-intprops.c macros.h ## end gnulib module intprops-tests ## begin gnulib module inttypes-tests TESTS += test-inttypes check_PROGRAMS += test-inttypes EXTRA_DIST += test-inttypes.c ## end gnulib module inttypes-tests ## begin gnulib module ioctl if GL_COND_OBJ_IOCTL libtests_a_SOURCES += ioctl.c endif EXTRA_DIST += w32sock.h ## end gnulib module ioctl ## begin gnulib module ioctl-tests TESTS += test-ioctl check_PROGRAMS += test-ioctl EXTRA_DIST += test-ioctl.c signature.h macros.h ## end gnulib module ioctl-tests ## begin gnulib module isblank if GL_COND_OBJ_ISBLANK libtests_a_SOURCES += isblank.c endif ## end gnulib module isblank ## begin gnulib module isblank-tests TESTS += test-isblank check_PROGRAMS += test-isblank EXTRA_DIST += test-isblank.c signature.h macros.h ## end gnulib module isblank-tests ## begin gnulib module isnand-nolibm-tests TESTS += test-isnand-nolibm check_PROGRAMS += test-isnand-nolibm EXTRA_DIST += test-isnand-nolibm.c test-isnand.h minus-zero.h infinity.h macros.h ## end gnulib module isnand-nolibm-tests ## begin gnulib module isnanf-nolibm-tests TESTS += test-isnanf-nolibm check_PROGRAMS += test-isnanf-nolibm EXTRA_DIST += test-isnanf-nolibm.c test-isnanf.h minus-zero.h infinity.h macros.h ## end gnulib module isnanf-nolibm-tests ## begin gnulib module isnanl-nolibm-tests TESTS += test-isnanl-nolibm check_PROGRAMS += test-isnanl-nolibm EXTRA_DIST += test-isnanl-nolibm.c test-isnanl.h minus-zero.h infinity.h macros.h ## end gnulib module isnanl-nolibm-tests ## begin gnulib module iswblank-tests TESTS += test-iswblank check_PROGRAMS += test-iswblank EXTRA_DIST += test-iswblank.c macros.h ## end gnulib module iswblank-tests ## begin gnulib module iswctype-tests TESTS += test-iswctype check_PROGRAMS += test-iswctype EXTRA_DIST += test-iswctype.c signature.h macros.h ## end gnulib module iswctype-tests ## begin gnulib module iswdigit-tests TESTS += test-iswdigit.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-iswdigit test_iswdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) EXTRA_DIST += test-iswdigit.sh test-iswdigit.c signature.h macros.h ## end gnulib module iswdigit-tests ## begin gnulib module iswpunct-tests TESTS += test-iswpunct.sh check_PROGRAMS += test-iswpunct test_iswpunct_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) EXTRA_DIST += test-iswpunct.sh test-iswpunct.c signature.h macros.h ## end gnulib module iswpunct-tests ## begin gnulib module iswxdigit-tests TESTS += test-iswxdigit.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-iswxdigit test_iswxdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) EXTRA_DIST += test-iswxdigit.sh test-iswxdigit.c signature.h macros.h ## end gnulib module iswxdigit-tests ## begin gnulib module langinfo-tests TESTS += test-langinfo check_PROGRAMS += test-langinfo EXTRA_DIST += test-langinfo.c ## end gnulib module langinfo-tests ## begin gnulib module largefile-tests TESTS += test-largefile check_PROGRAMS += test-largefile EXTRA_DIST += test-largefile.c ## end gnulib module largefile-tests ## begin gnulib module limits-h-tests TESTS += test-limits-h check_PROGRAMS += test-limits-h EXTRA_DIST += test-limits-h.c ## end gnulib module limits-h-tests ## begin gnulib module listen if GL_COND_OBJ_LISTEN libtests_a_SOURCES += listen.c endif EXTRA_DIST += w32sock.h ## end gnulib module listen ## begin gnulib module listen-tests TESTS += test-listen check_PROGRAMS += test-listen test_listen_LDADD = $(LDADD) @LIBSOCKET@ EXTRA_DIST += test-listen.c signature.h macros.h ## end gnulib module listen-tests ## begin gnulib module localcharset-tests noinst_PROGRAMS += test-localcharset test_localcharset_LDADD = $(LDADD) $(SETLOCALE_LIB) EXTRA_DIST += test-localcharset.c ## end gnulib module localcharset-tests ## begin gnulib module locale-tests TESTS += test-locale check_PROGRAMS += test-locale EXTRA_DIST += test-locale.c ## end gnulib module locale-tests ## begin gnulib module localeconv-tests TESTS += test-localeconv check_PROGRAMS += test-localeconv EXTRA_DIST += test-localeconv.c signature.h macros.h ## end gnulib module localeconv-tests ## begin gnulib module localename libtests_a_SOURCES += localename.c localename-table.c EXTRA_DIST += localename-table.h localename.h ## end gnulib module localename ## begin gnulib module localename-tests TESTS += test-localename check_PROGRAMS += test-localename test_localename_LDADD = $(LDADD) $(SETLOCALE_LIB) @INTL_MACOSX_LIBS@ $(LIBTHREAD) EXTRA_DIST += test-localename.c macros.h ## end gnulib module localename-tests ## begin gnulib module lock-tests TESTS += test-rwlock1 test-lock test-once1 test-once2 check_PROGRAMS += test-rwlock1 test-lock test-once1 test-once2 test_rwlock1_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ test_lock_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ @LIB_SEMAPHORE@ test_once1_SOURCES = test-once.c test_once1_LDADD = $(LDADD) @LIBTHREAD@ test_once2_SOURCES = test-once.c test_once2_LDADD = $(LDADD) @LIBMULTITHREAD@ EXTRA_DIST += test-rwlock1.c test-lock.c test-once.c atomic-int-gnulib.h macros.h ## end gnulib module lock-tests ## begin gnulib module lstat-tests TESTS += test-lstat check_PROGRAMS += test-lstat EXTRA_DIST += test-lstat.h test-lstat.c signature.h macros.h ## end gnulib module lstat-tests ## begin gnulib module malloc-gnu-tests TESTS += test-malloc-gnu check_PROGRAMS += test-malloc-gnu EXTRA_DIST += test-malloc-gnu.c macros.h ## end gnulib module malloc-gnu-tests ## begin gnulib module malloca-tests TESTS += test-malloca check_PROGRAMS += test-malloca EXTRA_DIST += test-malloca.c ## end gnulib module malloca-tests ## begin gnulib module math-tests TESTS += test-math check_PROGRAMS += test-math EXTRA_DIST += test-math.c macros.h ## end gnulib module math-tests ## begin gnulib module mbrtoc32-tests TESTS += \ test-mbrtoc32-1.sh test-mbrtoc32-2.sh test-mbrtoc32-3.sh test-mbrtoc32-4.sh \ test-mbrtoc32-5.sh \ test-mbrtoc32-w32-2.sh test-mbrtoc32-w32-3.sh test-mbrtoc32-w32-4.sh \ test-mbrtoc32-w32-5.sh test-mbrtoc32-w32-6.sh test-mbrtoc32-w32-7.sh \ test-mbrtoc32-w32-8.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-mbrtoc32 test-mbrtoc32-w32 test_mbrtoc32_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBC32CONV) EXTRA_DIST += test-mbrtoc32-1.sh test-mbrtoc32-2.sh test-mbrtoc32-3.sh test-mbrtoc32-4.sh test-mbrtoc32-5.sh test-mbrtoc32.c test-mbrtoc32-w32-2.sh test-mbrtoc32-w32-3.sh test-mbrtoc32-w32-4.sh test-mbrtoc32-w32-5.sh test-mbrtoc32-w32-6.sh test-mbrtoc32-w32-7.sh test-mbrtoc32-w32-8.sh test-mbrtoc32-w32.c signature.h macros.h ## end gnulib module mbrtoc32-tests ## begin gnulib module mbrtowc-tests TESTS += \ test-mbrtowc-1.sh test-mbrtowc-2.sh test-mbrtowc-3.sh test-mbrtowc-4.sh \ test-mbrtowc-5.sh \ test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh test-mbrtowc-w32-4.sh \ test-mbrtowc-w32-5.sh test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh \ test-mbrtowc-w32-8.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-mbrtowc test-mbrtowc-w32 test_mbrtowc_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) EXTRA_DIST += test-mbrtowc-1.sh test-mbrtowc-2.sh test-mbrtowc-3.sh test-mbrtowc-4.sh test-mbrtowc-5.sh test-mbrtowc.c test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh test-mbrtowc-w32-8.sh test-mbrtowc-w32.c signature.h macros.h ## end gnulib module mbrtowc-tests ## begin gnulib module mbschr-tests TESTS += test-mbschr.sh TESTS_ENVIRONMENT += LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-mbschr test_mbschr_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBC32CONV) EXTRA_DIST += test-mbschr.sh test-mbschr.c macros.h ## end gnulib module mbschr-tests ## begin gnulib module mbsinit-tests TESTS += test-mbsinit.sh TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-mbsinit test_mbsinit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) EXTRA_DIST += test-mbsinit.sh test-mbsinit.c signature.h macros.h ## end gnulib module mbsinit-tests ## begin gnulib module mbspbrk-tests TESTS += test-mbspbrk.sh TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-mbspbrk test_mbspbrk_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBC32CONV) EXTRA_DIST += test-mbspbrk.sh test-mbspbrk.c macros.h ## end gnulib module mbspbrk-tests ## begin gnulib module mbsspn-tests TESTS += test-mbsspn.sh TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-mbsspn test_mbsspn_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBC32CONV) EXTRA_DIST += test-mbsspn.sh test-mbsspn.c macros.h ## end gnulib module mbsspn-tests ## begin gnulib module memchr-tests TESTS += test-memchr check_PROGRAMS += test-memchr EXTRA_DIST += test-memchr.c zerosize-ptr.h signature.h macros.h ## end gnulib module memchr-tests ## begin gnulib module memrchr-tests TESTS += test-memrchr check_PROGRAMS += test-memrchr EXTRA_DIST += test-memrchr.c zerosize-ptr.h signature.h macros.h ## end gnulib module memrchr-tests ## begin gnulib module nan libtests_a_SOURCES += nan.h ## end gnulib module nan ## begin gnulib module nanosleep if GL_COND_OBJ_NANOSLEEP libtests_a_SOURCES += nanosleep.c endif ## end gnulib module nanosleep ## begin gnulib module nanosleep-tests TESTS += test-nanosleep check_PROGRAMS += test-nanosleep test_nanosleep_LDADD = $(LDADD) $(NANOSLEEP_LIB) EXTRA_DIST += test-nanosleep.c signature.h macros.h ## end gnulib module nanosleep-tests ## begin gnulib module netinet_in BUILT_SOURCES += $(NETINET_IN_H) # We need the following in order to create <netinet/in.h> when the system # doesn't have one. if GL_GENERATE_NETINET_IN_H netinet/in.h: netinet_in.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) '%reldir%/netinet' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \ -e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \ $(srcdir)/netinet_in.in.h > $@-t $(AM_V_at)mv $@-t $@ else netinet/in.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += netinet/in.h netinet/in.h-t MOSTLYCLEANDIRS += netinet EXTRA_DIST += netinet_in.in.h ## end gnulib module netinet_in ## begin gnulib module netinet_in-tests TESTS += test-netinet_in check_PROGRAMS += test-netinet_in EXTRA_DIST += test-netinet_in.c ## end gnulib module netinet_in-tests ## begin gnulib module nl_langinfo-tests TESTS += test-nl_langinfo1.sh test-nl_langinfo2.sh test-nl_langinfo-mt TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' check_PROGRAMS += test-nl_langinfo1 test-nl_langinfo2 test-nl_langinfo-mt test_nl_langinfo1_LDADD = $(LDADD) $(SETLOCALE_LIB) test_nl_langinfo2_LDADD = $(LDADD) $(SETLOCALE_LIB) test_nl_langinfo_mt_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBMULTITHREAD) $(NANOSLEEP_LIB) EXTRA_DIST += test-nl_langinfo1.sh test-nl_langinfo2.sh test-nl_langinfo1.c test-nl_langinfo2.c test-nl_langinfo-mt.c signature.h macros.h ## end gnulib module nl_langinfo-tests ## begin gnulib module open-tests TESTS += test-open check_PROGRAMS += test-open EXTRA_DIST += test-open.h test-open.c signature.h macros.h ## end gnulib module open-tests ## begin gnulib module openat-tests TESTS += test-openat check_PROGRAMS += test-openat test_openat_LDADD = $(LDADD) @LIBINTL@ EXTRA_DIST += test-openat.c test-open.h signature.h macros.h ## end gnulib module openat-tests ## begin gnulib module pathmax-tests TESTS += test-pathmax check_PROGRAMS += test-pathmax EXTRA_DIST += test-pathmax.c ## end gnulib module pathmax-tests ## begin gnulib module perror if GL_COND_OBJ_PERROR libtests_a_SOURCES += perror.c endif ## end gnulib module perror ## begin gnulib module perror-tests TESTS += test-perror.sh test-perror2 check_PROGRAMS += test-perror test-perror2 EXTRA_DIST += macros.h signature.h test-perror.c test-perror2.c test-perror.sh ## end gnulib module perror-tests ## begin gnulib module pipe-posix-tests TESTS += test-pipe check_PROGRAMS += test-pipe EXTRA_DIST += test-pipe.c signature.h macros.h ## end gnulib module pipe-posix-tests ## begin gnulib module pselect if GL_COND_OBJ_PSELECT libtests_a_SOURCES += pselect.c endif ## end gnulib module pselect ## begin gnulib module pselect-tests TESTS += test-pselect check_PROGRAMS += test-pselect test_pselect_LDADD = $(LDADD) @SELECT_LIB@ @LIBSOCKET@ @PTHREAD_SIGMASK_LIB@ $(INET_PTON_LIB) EXTRA_DIST += test-pselect.c test-select.h macros.h signature.h ## end gnulib module pselect-tests ## begin gnulib module pthread-h BUILT_SOURCES += pthread.h # We need the following in order to create <pthread.h> when the system # doesn't have one that works with the given compiler. pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_PTHREAD_H''@|$(HAVE_PTHREAD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_PTHREAD_H''@|$(NEXT_PTHREAD_H)|g' \ -e 's/@''GNULIB_PTHREAD_THREAD''@/$(GL_GNULIB_PTHREAD_THREAD)/g' \ -e 's/@''GNULIB_PTHREAD_ONCE''@/$(GL_GNULIB_PTHREAD_ONCE)/g' \ -e 's/@''GNULIB_PTHREAD_MUTEX''@/$(GL_GNULIB_PTHREAD_MUTEX)/g' \ -e 's/@''GNULIB_PTHREAD_RWLOCK''@/$(GL_GNULIB_PTHREAD_RWLOCK)/g' \ -e 's/@''GNULIB_PTHREAD_COND''@/$(GL_GNULIB_PTHREAD_COND)/g' \ -e 's/@''GNULIB_PTHREAD_TSS''@/$(GL_GNULIB_PTHREAD_TSS)/g' \ -e 's/@''GNULIB_PTHREAD_SPIN''@/$(GL_GNULIB_PTHREAD_SPIN)/g' \ -e 's/@''GNULIB_PTHREAD_MUTEX_TIMEDLOCK''@/$(GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK)/g' \ -e 's|@''HAVE_PTHREAD_T''@|$(HAVE_PTHREAD_T)|g' \ -e 's|@''HAVE_PTHREAD_SPINLOCK_T''@|$(HAVE_PTHREAD_SPINLOCK_T)|g' \ -e 's|@''HAVE_PTHREAD_CREATE_DETACHED''@|$(HAVE_PTHREAD_CREATE_DETACHED)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_RECURSIVE''@|$(HAVE_PTHREAD_MUTEX_RECURSIVE)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_ROBUST''@|$(HAVE_PTHREAD_MUTEX_ROBUST)|g' \ -e 's|@''HAVE_PTHREAD_PROCESS_SHARED''@|$(HAVE_PTHREAD_PROCESS_SHARED)|g' \ -e 's|@''HAVE_PTHREAD_CREATE''@|$(HAVE_PTHREAD_CREATE)|g' \ -e 's|@''HAVE_PTHREAD_ATTR_INIT''@|$(HAVE_PTHREAD_ATTR_INIT)|g' \ -e 's|@''HAVE_PTHREAD_ATTR_GETDETACHSTATE''@|$(HAVE_PTHREAD_ATTR_GETDETACHSTATE)|g' \ -e 's|@''HAVE_PTHREAD_ATTR_SETDETACHSTATE''@|$(HAVE_PTHREAD_ATTR_SETDETACHSTATE)|g' \ -e 's|@''HAVE_PTHREAD_ATTR_DESTROY''@|$(HAVE_PTHREAD_ATTR_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_SELF''@|$(HAVE_PTHREAD_SELF)|g' \ -e 's|@''HAVE_PTHREAD_EQUAL''@|$(HAVE_PTHREAD_EQUAL)|g' \ -e 's|@''HAVE_PTHREAD_DETACH''@|$(HAVE_PTHREAD_DETACH)|g' \ -e 's|@''HAVE_PTHREAD_JOIN''@|$(HAVE_PTHREAD_JOIN)|g' \ -e 's|@''HAVE_PTHREAD_EXIT''@|$(HAVE_PTHREAD_EXIT)|g' \ < $(srcdir)/pthread.in.h > $@-t1 $(AM_V_at)sed \ -e 's|@''HAVE_PTHREAD_ONCE''@|$(HAVE_PTHREAD_ONCE)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_INIT''@|$(HAVE_PTHREAD_MUTEX_INIT)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_INIT''@|$(HAVE_PTHREAD_MUTEXATTR_INIT)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_GETTYPE''@|$(HAVE_PTHREAD_MUTEXATTR_GETTYPE)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_SETTYPE''@|$(HAVE_PTHREAD_MUTEXATTR_SETTYPE)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_GETROBUST''@|$(HAVE_PTHREAD_MUTEXATTR_GETROBUST)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_SETROBUST''@|$(HAVE_PTHREAD_MUTEXATTR_SETROBUST)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_DESTROY''@|$(HAVE_PTHREAD_MUTEXATTR_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_LOCK''@|$(HAVE_PTHREAD_MUTEX_LOCK)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_TRYLOCK''@|$(HAVE_PTHREAD_MUTEX_TRYLOCK)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_TIMEDLOCK''@|$(HAVE_PTHREAD_MUTEX_TIMEDLOCK)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_UNLOCK''@|$(HAVE_PTHREAD_MUTEX_UNLOCK)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_DESTROY''@|$(HAVE_PTHREAD_MUTEX_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_INIT''@|$(HAVE_PTHREAD_RWLOCK_INIT)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCKATTR_INIT''@|$(HAVE_PTHREAD_RWLOCKATTR_INIT)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCKATTR_DESTROY''@|$(HAVE_PTHREAD_RWLOCKATTR_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_RDLOCK''@|$(HAVE_PTHREAD_RWLOCK_RDLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_WRLOCK''@|$(HAVE_PTHREAD_RWLOCK_WRLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_TRYRDLOCK''@|$(HAVE_PTHREAD_RWLOCK_TRYRDLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_TRYWRLOCK''@|$(HAVE_PTHREAD_RWLOCK_TRYWRLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK''@|$(HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK''@|$(HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_UNLOCK''@|$(HAVE_PTHREAD_RWLOCK_UNLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_DESTROY''@|$(HAVE_PTHREAD_RWLOCK_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_COND_INIT''@|$(HAVE_PTHREAD_COND_INIT)|g' \ -e 's|@''HAVE_PTHREAD_CONDATTR_INIT''@|$(HAVE_PTHREAD_CONDATTR_INIT)|g' \ -e 's|@''HAVE_PTHREAD_CONDATTR_DESTROY''@|$(HAVE_PTHREAD_CONDATTR_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_COND_WAIT''@|$(HAVE_PTHREAD_COND_WAIT)|g' \ -e 's|@''HAVE_PTHREAD_COND_TIMEDWAIT''@|$(HAVE_PTHREAD_COND_TIMEDWAIT)|g' \ -e 's|@''HAVE_PTHREAD_COND_SIGNAL''@|$(HAVE_PTHREAD_COND_SIGNAL)|g' \ -e 's|@''HAVE_PTHREAD_COND_BROADCAST''@|$(HAVE_PTHREAD_COND_BROADCAST)|g' \ -e 's|@''HAVE_PTHREAD_COND_DESTROY''@|$(HAVE_PTHREAD_COND_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_KEY_CREATE''@|$(HAVE_PTHREAD_KEY_CREATE)|g' \ -e 's|@''HAVE_PTHREAD_SETSPECIFIC''@|$(HAVE_PTHREAD_SETSPECIFIC)|g' \ -e 's|@''HAVE_PTHREAD_GETSPECIFIC''@|$(HAVE_PTHREAD_GETSPECIFIC)|g' \ -e 's|@''HAVE_PTHREAD_KEY_DELETE''@|$(HAVE_PTHREAD_KEY_DELETE)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_INIT''@|$(HAVE_PTHREAD_SPIN_INIT)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_LOCK''@|$(HAVE_PTHREAD_SPIN_LOCK)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_TRYLOCK''@|$(HAVE_PTHREAD_SPIN_TRYLOCK)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_UNLOCK''@|$(HAVE_PTHREAD_SPIN_UNLOCK)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_DESTROY''@|$(HAVE_PTHREAD_SPIN_DESTROY)|g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's|@''REPLACE_PTHREAD_CREATE''@|$(REPLACE_PTHREAD_CREATE)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_INIT''@|$(REPLACE_PTHREAD_ATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_GETDETACHSTATE''@|$(REPLACE_PTHREAD_ATTR_GETDETACHSTATE)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_SETDETACHSTATE''@|$(REPLACE_PTHREAD_ATTR_SETDETACHSTATE)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_DESTROY''@|$(REPLACE_PTHREAD_ATTR_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_SELF''@|$(REPLACE_PTHREAD_SELF)|g' \ -e 's|@''REPLACE_PTHREAD_EQUAL''@|$(REPLACE_PTHREAD_EQUAL)|g' \ -e 's|@''REPLACE_PTHREAD_DETACH''@|$(REPLACE_PTHREAD_DETACH)|g' \ -e 's|@''REPLACE_PTHREAD_JOIN''@|$(REPLACE_PTHREAD_JOIN)|g' \ -e 's|@''REPLACE_PTHREAD_EXIT''@|$(REPLACE_PTHREAD_EXIT)|g' \ -e 's|@''REPLACE_PTHREAD_ONCE''@|$(REPLACE_PTHREAD_ONCE)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_INIT''@|$(REPLACE_PTHREAD_MUTEX_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_INIT''@|$(REPLACE_PTHREAD_MUTEXATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_GETTYPE''@|$(REPLACE_PTHREAD_MUTEXATTR_GETTYPE)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_SETTYPE''@|$(REPLACE_PTHREAD_MUTEXATTR_SETTYPE)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_GETROBUST''@|$(REPLACE_PTHREAD_MUTEXATTR_GETROBUST)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_SETROBUST''@|$(REPLACE_PTHREAD_MUTEXATTR_SETROBUST)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_DESTROY''@|$(REPLACE_PTHREAD_MUTEXATTR_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_LOCK''@|$(REPLACE_PTHREAD_MUTEX_LOCK)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_TRYLOCK''@|$(REPLACE_PTHREAD_MUTEX_TRYLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_TIMEDLOCK''@|$(REPLACE_PTHREAD_MUTEX_TIMEDLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_UNLOCK''@|$(REPLACE_PTHREAD_MUTEX_UNLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_DESTROY''@|$(REPLACE_PTHREAD_MUTEX_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_INIT''@|$(REPLACE_PTHREAD_RWLOCK_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCKATTR_INIT''@|$(REPLACE_PTHREAD_RWLOCKATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCKATTR_DESTROY''@|$(REPLACE_PTHREAD_RWLOCKATTR_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_RDLOCK''@|$(REPLACE_PTHREAD_RWLOCK_RDLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_WRLOCK''@|$(REPLACE_PTHREAD_RWLOCK_WRLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_TRYRDLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TRYRDLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_TRYWRLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TRYWRLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_UNLOCK''@|$(REPLACE_PTHREAD_RWLOCK_UNLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_DESTROY''@|$(REPLACE_PTHREAD_RWLOCK_DESTROY)|g' \ < $@-t2 > $@-t3 $(AM_V_at)sed \ -e 's|@''REPLACE_PTHREAD_COND_INIT''@|$(REPLACE_PTHREAD_COND_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_CONDATTR_INIT''@|$(REPLACE_PTHREAD_CONDATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_CONDATTR_DESTROY''@|$(REPLACE_PTHREAD_CONDATTR_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_COND_WAIT''@|$(REPLACE_PTHREAD_COND_WAIT)|g' \ -e 's|@''REPLACE_PTHREAD_COND_TIMEDWAIT''@|$(REPLACE_PTHREAD_COND_TIMEDWAIT)|g' \ -e 's|@''REPLACE_PTHREAD_COND_SIGNAL''@|$(REPLACE_PTHREAD_COND_SIGNAL)|g' \ -e 's|@''REPLACE_PTHREAD_COND_BROADCAST''@|$(REPLACE_PTHREAD_COND_BROADCAST)|g' \ -e 's|@''REPLACE_PTHREAD_COND_DESTROY''@|$(REPLACE_PTHREAD_COND_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_KEY_CREATE''@|$(REPLACE_PTHREAD_KEY_CREATE)|g' \ -e 's|@''REPLACE_PTHREAD_SETSPECIFIC''@|$(REPLACE_PTHREAD_SETSPECIFIC)|g' \ -e 's|@''REPLACE_PTHREAD_GETSPECIFIC''@|$(REPLACE_PTHREAD_GETSPECIFIC)|g' \ -e 's|@''REPLACE_PTHREAD_KEY_DELETE''@|$(REPLACE_PTHREAD_KEY_DELETE)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_INIT''@|$(REPLACE_PTHREAD_SPIN_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_LOCK''@|$(REPLACE_PTHREAD_SPIN_LOCK)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_TRYLOCK''@|$(REPLACE_PTHREAD_SPIN_TRYLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_UNLOCK''@|$(REPLACE_PTHREAD_SPIN_UNLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_DESTROY''@|$(REPLACE_PTHREAD_SPIN_DESTROY)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t3 > $@-t4 $(AM_V_at)rm -f $@-t1 $@-t2 $@-t3 $(AM_V_at)mv $@-t4 $@ MOSTLYCLEANFILES += pthread.h pthread.h-t1 pthread.h-t2 pthread.h-t3 pthread.h-t4 EXTRA_DIST += pthread.in.h ## end gnulib module pthread-h ## begin gnulib module pthread-h-tests TESTS += test-pthread check_PROGRAMS += test-pthread EXTRA_DIST += test-pthread.c ## end gnulib module pthread-h-tests ## begin gnulib module pthread-thread if GL_COND_OBJ_PTHREAD_THREAD libtests_a_SOURCES += pthread-thread.c endif ## end gnulib module pthread-thread ## begin gnulib module pthread-thread-tests TESTS += test-pthread-thread check_PROGRAMS += test-pthread-thread test_pthread_thread_LDADD = $(LDADD) @LIBPMULTITHREAD@ EXTRA_DIST += test-pthread-thread.c macros.h ## end gnulib module pthread-thread-tests ## begin gnulib module pthread_sigmask if GL_COND_OBJ_PTHREAD_SIGMASK libtests_a_SOURCES += pthread_sigmask.c endif ## end gnulib module pthread_sigmask ## begin gnulib module pthread_sigmask-tests TESTS += test-pthread_sigmask1 test-pthread_sigmask2 check_PROGRAMS += test-pthread_sigmask1 test-pthread_sigmask2 test_pthread_sigmask1_LDADD = $(LDADD) @PTHREAD_SIGMASK_LIB@ test_pthread_sigmask2_LDADD = $(LDADD) @PTHREAD_SIGMASK_LIB@ @LIBMULTITHREAD@ EXTRA_DIST += test-pthread_sigmask1.c test-pthread_sigmask2.c signature.h macros.h ## end gnulib module pthread_sigmask-tests ## begin gnulib module putenv if GL_COND_OBJ_PUTENV libtests_a_SOURCES += putenv.c endif ## end gnulib module putenv ## begin gnulib module raise if GL_COND_OBJ_RAISE libtests_a_SOURCES += raise.c endif ## end gnulib module raise ## begin gnulib module raise-tests TESTS += test-raise check_PROGRAMS += test-raise EXTRA_DIST += test-raise.c signature.h macros.h ## end gnulib module raise-tests ## begin gnulib module random if GL_COND_OBJ_RANDOM libtests_a_SOURCES += random.c endif ## end gnulib module random ## begin gnulib module random-tests TESTS += test-random test-random-mt check_PROGRAMS += test-random test-random-mt test_random_mt_LDADD = $(LDADD) $(LIBINTL) $(LIBMULTITHREAD) $(YIELD_LIB) EXTRA_DIST += test-random.c test-random-mt.c signature.h macros.h ## end gnulib module random-tests ## begin gnulib module random_r if GL_COND_OBJ_RANDOM_R libtests_a_SOURCES += random_r.c endif ## end gnulib module random_r ## begin gnulib module random_r-tests TESTS += test-random_r check_PROGRAMS += test-random_r EXTRA_DIST += test-random_r.c signature.h macros.h ## end gnulib module random_r-tests ## begin gnulib module rawmemchr-tests TESTS += test-rawmemchr check_PROGRAMS += test-rawmemchr EXTRA_DIST += test-rawmemchr.c zerosize-ptr.h signature.h macros.h ## end gnulib module rawmemchr-tests ## begin gnulib module realloc-gnu-tests TESTS += test-realloc-gnu check_PROGRAMS += test-realloc-gnu EXTRA_DIST += test-realloc-gnu.c macros.h ## end gnulib module realloc-gnu-tests ## begin gnulib module reallocarray if GL_COND_OBJ_REALLOCARRAY libtests_a_SOURCES += reallocarray.c endif ## end gnulib module reallocarray ## begin gnulib module reallocarray-tests TESTS += test-reallocarray check_PROGRAMS += test-reallocarray EXTRA_DIST += test-reallocarray.c signature.h macros.h ## end gnulib module reallocarray-tests ## begin gnulib module regex-tests TESTS += test-regex check_PROGRAMS += test-regex test_regex_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) @LIBINTL@ $(LIBTHREAD) EXTRA_DIST += test-regex.c macros.h ## end gnulib module regex-tests ## begin gnulib module same-inode libtests_a_SOURCES += same-inode.h same-inode.c ## end gnulib module same-inode ## begin gnulib module sched BUILT_SOURCES += sched.h # We need the following in order to create a replacement for <sched.h> when # the system doesn't have one. sched.h: sched.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_SCHED_H''@|$(HAVE_SCHED_H)|g' \ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SCHED_H''@|$(NEXT_SCHED_H)|g' \ -e 's|@''HAVE_STRUCT_SCHED_PARAM''@|$(HAVE_STRUCT_SCHED_PARAM)|g' \ -e 's/@''GNULIB_SCHED_YIELD''@/$(GL_GNULIB_SCHED_YIELD)/g' \ -e 's|@''HAVE_SCHED_YIELD''@|$(HAVE_SCHED_YIELD)|g' \ -e 's|@''REPLACE_SCHED_YIELD''@|$(REPLACE_SCHED_YIELD)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sched.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sched.h sched.h-t EXTRA_DIST += sched.in.h ## end gnulib module sched ## begin gnulib module sched-tests TESTS += test-sched check_PROGRAMS += test-sched EXTRA_DIST += test-sched.c ## end gnulib module sched-tests ## begin gnulib module sched_yield if GL_COND_OBJ_SCHED_YIELD libtests_a_SOURCES += sched_yield.c endif ## end gnulib module sched_yield ## begin gnulib module select-tests TESTS += test-select test-select-in.sh test-select-out.sh # test-select-stdin has to be run by hand. check_PROGRAMS += test-select test-select-fd test-select-stdin test_select_LDADD = $(LDADD) @SELECT_LIB@ @LIBSOCKET@ $(INET_PTON_LIB) test_select_fd_LDADD = $(LDADD) @SELECT_LIB@ test_select_stdin_LDADD = $(LDADD) @SELECT_LIB@ EXTRA_DIST += macros.h signature.h test-select.c test-select.h test-select-fd.c test-select-in.sh test-select-out.sh test-select-stdin.c ## end gnulib module select-tests ## begin gnulib module setenv if GL_COND_OBJ_SETENV libtests_a_SOURCES += setenv.c endif ## end gnulib module setenv ## begin gnulib module setenv-tests TESTS += test-setenv check_PROGRAMS += test-setenv EXTRA_DIST += test-setenv.c signature.h macros.h ## end gnulib module setenv-tests ## begin gnulib module setlocale if GL_COND_OBJ_SETLOCALE libtests_a_SOURCES += setlocale.c endif ## end gnulib module setlocale ## begin gnulib module setlocale-null-tests TESTS += \ test-setlocale_null \ test-setlocale_null-mt-one \ test-setlocale_null-mt-all check_PROGRAMS += \ test-setlocale_null \ test-setlocale_null-mt-one \ test-setlocale_null-mt-all test_setlocale_null_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ test_setlocale_null_mt_one_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ $(LIBMULTITHREAD) $(NANOSLEEP_LIB) test_setlocale_null_mt_all_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ $(LIBMULTITHREAD) $(NANOSLEEP_LIB) EXTRA_DIST += test-setlocale_null.c test-setlocale_null-mt-one.c test-setlocale_null-mt-all.c ## end gnulib module setlocale-null-tests ## begin gnulib module setlocale-tests TESTS += test-setlocale1.sh test-setlocale2.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-setlocale1 test-setlocale2 test_setlocale1_LDADD = $(LDADD) @SETLOCALE_LIB@ test_setlocale2_LDADD = $(LDADD) @SETLOCALE_LIB@ EXTRA_DIST += test-setlocale1.sh test-setlocale1.c test-setlocale2.sh test-setlocale2.c signature.h macros.h ## end gnulib module setlocale-tests ## begin gnulib module setsockopt if GL_COND_OBJ_SETSOCKOPT libtests_a_SOURCES += setsockopt.c endif EXTRA_DIST += w32sock.h ## end gnulib module setsockopt ## begin gnulib module setsockopt-tests TESTS += test-setsockopt check_PROGRAMS += test-setsockopt test_setsockopt_LDADD = $(LDADD) @LIBSOCKET@ EXTRA_DIST += test-setsockopt.c signature.h macros.h ## end gnulib module setsockopt-tests ## begin gnulib module signal-h-tests TESTS += test-signal-h check_PROGRAMS += test-signal-h EXTRA_DIST += test-signal-h.c ## end gnulib module signal-h-tests ## begin gnulib module signbit-tests TESTS += test-signbit check_PROGRAMS += test-signbit EXTRA_DIST += test-signbit.c minus-zero.h infinity.h macros.h ## end gnulib module signbit-tests ## begin gnulib module signed-nan libtests_a_SOURCES += signed-nan.h ## end gnulib module signed-nan ## begin gnulib module signed-snan libtests_a_SOURCES += signed-snan.h ## end gnulib module signed-snan ## begin gnulib module sigprocmask if GL_COND_OBJ_SIGPROCMASK libtests_a_SOURCES += sigprocmask.c endif ## end gnulib module sigprocmask ## begin gnulib module sigprocmask-tests TESTS += test-sigprocmask check_PROGRAMS += test-sigprocmask EXTRA_DIST += test-sigprocmask.c signature.h macros.h ## end gnulib module sigprocmask-tests ## begin gnulib module sleep-tests TESTS += test-sleep check_PROGRAMS += test-sleep EXTRA_DIST += test-sleep.c signature.h macros.h ## end gnulib module sleep-tests ## begin gnulib module snan libtests_a_SOURCES += snan.h ## end gnulib module snan ## begin gnulib module snippet/_Noreturn # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H=$(srcdir)/_Noreturn.h EXTRA_DIST += _Noreturn.h ## end gnulib module snippet/_Noreturn ## begin gnulib module snippet/arg-nonnull # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H=$(srcdir)/arg-nonnull.h EXTRA_DIST += arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/c++defs # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H=$(srcdir)/c++defs.h EXTRA_DIST += c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/warn-on-use # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H=$(srcdir)/warn-on-use.h EXTRA_DIST += warn-on-use.h ## end gnulib module snippet/warn-on-use ## begin gnulib module socket if GL_COND_OBJ_SOCKET libtests_a_SOURCES += socket.c endif EXTRA_DIST += w32sock.h ## end gnulib module socket ## begin gnulib module sockets-tests TESTS += test-sockets check_PROGRAMS += test-sockets test_sockets_LDADD = $(LDADD) @LIBSOCKET@ EXTRA_DIST += test-sockets.c ## end gnulib module sockets-tests ## begin gnulib module stat-tests TESTS += test-stat check_PROGRAMS += test-stat test_stat_LDADD = $(LDADD) $(LIBINTL) EXTRA_DIST += test-stat.h test-stat.c signature.h macros.h ## end gnulib module stat-tests ## begin gnulib module stat-time-tests TESTS += test-stat-time check_PROGRAMS += test-stat-time test_stat_time_LDADD = $(LDADD) $(NANOSLEEP_LIB) EXTRA_DIST += test-stat-time.c macros.h nap.h ## end gnulib module stat-time-tests ## begin gnulib module stdbool-tests TESTS += test-stdbool check_PROGRAMS += test-stdbool EXTRA_DIST += test-stdbool.c ## end gnulib module stdbool-tests ## begin gnulib module stdckdint-tests TESTS += test-stdckdint check_PROGRAMS += test-stdckdint EXTRA_DIST += macros.h test-intprops.c test-stdckdint.c ## end gnulib module stdckdint-tests ## begin gnulib module stddef-tests TESTS += test-stddef check_PROGRAMS += test-stddef EXTRA_DIST += test-stddef.c ## end gnulib module stddef-tests ## begin gnulib module stdint-tests TESTS += test-stdint check_PROGRAMS += test-stdint EXTRA_DIST += test-stdint.c ## end gnulib module stdint-tests ## begin gnulib module stdio-tests TESTS += test-stdio check_PROGRAMS += test-stdio EXTRA_DIST += test-stdio.c macros.h ## end gnulib module stdio-tests ## begin gnulib module stdlib-tests TESTS += test-stdlib check_PROGRAMS += test-stdlib EXTRA_DIST += test-stdlib.c test-sys_wait.h ## end gnulib module stdlib-tests ## begin gnulib module strchrnul-tests TESTS += test-strchrnul check_PROGRAMS += test-strchrnul EXTRA_DIST += test-strchrnul.c signature.h macros.h ## end gnulib module strchrnul-tests ## begin gnulib module strerror-tests TESTS += test-strerror check_PROGRAMS += test-strerror EXTRA_DIST += test-strerror.c signature.h macros.h ## end gnulib module strerror-tests ## begin gnulib module strerror_r-posix EXTRA_DIST += strerror_r.c EXTRA_libtests_a_SOURCES += strerror_r.c ## end gnulib module strerror_r-posix ## begin gnulib module strerror_r-posix-tests TESTS += test-strerror_r check_PROGRAMS += test-strerror_r EXTRA_DIST += test-strerror_r.c signature.h macros.h ## end gnulib module strerror_r-posix-tests ## begin gnulib module string-tests TESTS += test-string check_PROGRAMS += test-string EXTRA_DIST += test-string.c ## end gnulib module string-tests ## begin gnulib module strings-tests TESTS += test-strings check_PROGRAMS += test-strings EXTRA_DIST += test-strings.c ## end gnulib module strings-tests ## begin gnulib module strnlen-tests TESTS += test-strnlen check_PROGRAMS += test-strnlen EXTRA_DIST += test-strnlen.c zerosize-ptr.h signature.h macros.h ## end gnulib module strnlen-tests ## begin gnulib module strtod-tests TESTS += test-strtod check_PROGRAMS += test-strtod TESTS += test-strtod1.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LC_NUMERIC_IMPLEMENTED='@LC_NUMERIC_IMPLEMENTED@' check_PROGRAMS += test-strtod1 test_strtod1_LDADD = $(LDADD) $(SETLOCALE_LIB) EXTRA_DIST += test-strtod.c test-strtod1.sh test-strtod1.c signature.h minus-zero.h macros.h ## end gnulib module strtod-tests ## begin gnulib module symlink if GL_COND_OBJ_SYMLINK libtests_a_SOURCES += symlink.c endif ## end gnulib module symlink ## begin gnulib module symlink-tests TESTS += test-symlink check_PROGRAMS += test-symlink EXTRA_DIST += test-symlink.h test-symlink.c signature.h macros.h ## end gnulib module symlink-tests ## begin gnulib module sys_ioctl BUILT_SOURCES += sys/ioctl.h # We need the following in order to create <sys/ioctl.h> when the system # does not have a complete one. sys/ioctl.h: sys_ioctl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_SYS_IOCTL_H''@|$(HAVE_SYS_IOCTL_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_IOCTL_H''@|$(NEXT_SYS_IOCTL_H)|g' \ -e 's/@''GNULIB_IOCTL''@/$(GL_GNULIB_IOCTL)/g' \ -e 's|@''SYS_IOCTL_H_HAVE_WINSOCK2_H''@|$(SYS_IOCTL_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e 's|@''REPLACE_IOCTL''@|$(REPLACE_IOCTL)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_ioctl.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/ioctl.h sys/ioctl.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_ioctl.in.h ## end gnulib module sys_ioctl ## begin gnulib module sys_ioctl-tests TESTS += test-sys_ioctl check_PROGRAMS += test-sys_ioctl EXTRA_DIST += test-sys_ioctl.c ## end gnulib module sys_ioctl-tests ## begin gnulib module sys_select-tests TESTS += test-sys_select check_PROGRAMS += test-sys_select EXTRA_DIST += test-sys_select.c signature.h ## end gnulib module sys_select-tests ## begin gnulib module sys_socket-tests TESTS += test-sys_socket check_PROGRAMS += test-sys_socket EXTRA_DIST += test-sys_socket.c ## end gnulib module sys_socket-tests ## begin gnulib module sys_stat-tests TESTS += test-sys_stat check_PROGRAMS += test-sys_stat EXTRA_DIST += test-sys_stat.c ## end gnulib module sys_stat-tests ## begin gnulib module sys_time-tests TESTS += test-sys_time check_PROGRAMS += test-sys_time EXTRA_DIST += test-sys_time.c ## end gnulib module sys_time-tests ## begin gnulib module sys_types-tests TESTS += test-sys_types check_PROGRAMS += test-sys_types EXTRA_DIST += test-sys_types.c ## end gnulib module sys_types-tests ## begin gnulib module sys_uio-tests TESTS += test-sys_uio check_PROGRAMS += test-sys_uio EXTRA_DIST += test-sys_uio.c ## end gnulib module sys_uio-tests ## begin gnulib module sys_wait-tests TESTS += test-sys_wait check_PROGRAMS += test-sys_wait EXTRA_DIST += test-sys_wait.c test-sys_wait.h ## end gnulib module sys_wait-tests ## begin gnulib module sysexits-tests TESTS += test-sysexits check_PROGRAMS += test-sysexits EXTRA_DIST += test-sysexits.c ## end gnulib module sysexits-tests ## begin gnulib module test-framework-sh-tests TESTS += test-init.sh EXTRA_DIST += init.sh EXTRA_DIST += test-init.sh ## end gnulib module test-framework-sh-tests ## begin gnulib module thread libtests_a_SOURCES += glthread/thread.h glthread/thread.c ## end gnulib module thread ## begin gnulib module thread-optim EXTRA_DIST += thread-optim.h ## end gnulib module thread-optim ## begin gnulib module thread-tests TESTS += test-thread_self test-thread_create check_PROGRAMS += test-thread_self test-thread_create test_thread_self_LDADD = $(LDADD) @LIBTHREAD@ test_thread_create_LDADD = $(LDADD) @LIBMULTITHREAD@ EXTRA_DIST += test-thread_self.c test-thread_create.c macros.h ## end gnulib module thread-tests ## begin gnulib module time-h-tests TESTS += test-time-h check_PROGRAMS += test-time-h EXTRA_DIST += test-time-h.c ## end gnulib module time-h-tests ## begin gnulib module time-tests TESTS += test-time check_PROGRAMS += test-time EXTRA_DIST += test-time.c signature.h macros.h ## end gnulib module time-tests ## begin gnulib module uchar-tests TESTS += test-uchar check_PROGRAMS += test-uchar EXTRA_DIST += test-uchar.c ## end gnulib module uchar-tests ## begin gnulib module unicase/tolower-tests TESTS += test-uc_tolower check_PROGRAMS += test-uc_tolower test_uc_tolower_SOURCES = unicase/test-uc_tolower.c test_uc_tolower_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += unicase/test-uc_tolower.c unicase/test-mapping-part1.h unicase/test-mapping-part2.h macros.h ## end gnulib module unicase/tolower-tests ## begin gnulib module unictype/ctype-alnum-tests TESTS += test-ctype_alnum check_PROGRAMS += test-ctype_alnum test_ctype_alnum_SOURCES = unictype/test-ctype_alnum.c test_ctype_alnum_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += unictype/test-ctype_alnum.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h ## end gnulib module unictype/ctype-alnum-tests ## begin gnulib module unictype/ctype-alpha-tests TESTS += test-ctype_alpha check_PROGRAMS += test-ctype_alpha test_ctype_alpha_SOURCES = unictype/test-ctype_alpha.c test_ctype_alpha_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += unictype/test-ctype_alpha.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h ## end gnulib module unictype/ctype-alpha-tests ## begin gnulib module unictype/ctype-blank-tests TESTS += test-ctype_blank check_PROGRAMS += test-ctype_blank test_ctype_blank_SOURCES = unictype/test-ctype_blank.c test_ctype_blank_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += unictype/test-ctype_blank.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h ## end gnulib module unictype/ctype-blank-tests ## begin gnulib module unictype/ctype-cntrl-tests TESTS += test-ctype_cntrl check_PROGRAMS += test-ctype_cntrl test_ctype_cntrl_SOURCES = unictype/test-ctype_cntrl.c test_ctype_cntrl_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += unictype/test-ctype_cntrl.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h ## end gnulib module unictype/ctype-cntrl-tests ## begin gnulib module unictype/ctype-digit-tests TESTS += test-ctype_digit check_PROGRAMS += test-ctype_digit test_ctype_digit_SOURCES = unictype/test-ctype_digit.c test_ctype_digit_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += unictype/test-ctype_digit.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h ## end gnulib module unictype/ctype-digit-tests ## begin gnulib module unictype/ctype-graph-tests TESTS += test-ctype_graph check_PROGRAMS += test-ctype_graph test_ctype_graph_SOURCES = unictype/test-ctype_graph.c test_ctype_graph_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += unictype/test-ctype_graph.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h ## end gnulib module unictype/ctype-graph-tests ## begin gnulib module unictype/ctype-lower-tests TESTS += test-ctype_lower check_PROGRAMS += test-ctype_lower test_ctype_lower_SOURCES = unictype/test-ctype_lower.c test_ctype_lower_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += unictype/test-ctype_lower.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h ## end gnulib module unictype/ctype-lower-tests ## begin gnulib module unictype/ctype-print-tests TESTS += test-ctype_print check_PROGRAMS += test-ctype_print test_ctype_print_SOURCES = unictype/test-ctype_print.c test_ctype_print_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += unictype/test-ctype_print.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h ## end gnulib module unictype/ctype-print-tests ## begin gnulib module unictype/ctype-punct-tests TESTS += test-ctype_punct check_PROGRAMS += test-ctype_punct test_ctype_punct_SOURCES = unictype/test-ctype_punct.c test_ctype_punct_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += unictype/test-ctype_punct.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h ## end gnulib module unictype/ctype-punct-tests ## begin gnulib module unictype/ctype-space-tests TESTS += test-ctype_space check_PROGRAMS += test-ctype_space test_ctype_space_SOURCES = unictype/test-ctype_space.c test_ctype_space_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += unictype/test-ctype_space.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h ## end gnulib module unictype/ctype-space-tests ## begin gnulib module unictype/ctype-upper-tests TESTS += test-ctype_upper check_PROGRAMS += test-ctype_upper test_ctype_upper_SOURCES = unictype/test-ctype_upper.c test_ctype_upper_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += unictype/test-ctype_upper.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h ## end gnulib module unictype/ctype-upper-tests ## begin gnulib module unictype/ctype-xdigit-tests TESTS += test-ctype_xdigit check_PROGRAMS += test-ctype_xdigit test_ctype_xdigit_SOURCES = unictype/test-ctype_xdigit.c test_ctype_xdigit_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += unictype/test-ctype_xdigit.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h ## end gnulib module unictype/ctype-xdigit-tests ## begin gnulib module unistd-safer-tests TESTS += test-dup-safer check_PROGRAMS += test-dup-safer EXTRA_DIST += test-dup-safer.c macros.h ## end gnulib module unistd-safer-tests ## begin gnulib module unistd-tests TESTS += test-unistd check_PROGRAMS += test-unistd EXTRA_DIST += test-unistd.c ## end gnulib module unistd-tests ## begin gnulib module uniwidth/width-tests TESTS += test-uc_width uniwidth/test-uc_width2.sh check_PROGRAMS += test-uc_width test-uc_width2 test_uc_width_SOURCES = uniwidth/test-uc_width.c test_uc_width_LDADD = $(LDADD) $(LIBUNISTRING) test_uc_width2_SOURCES = uniwidth/test-uc_width2.c test_uc_width2_LDADD = $(LDADD) $(LIBUNISTRING) EXTRA_DIST += uniwidth/test-uc_width.c uniwidth/test-uc_width2.c uniwidth/test-uc_width2.sh macros.h ## end gnulib module uniwidth/width-tests ## begin gnulib module unsetenv if GL_COND_OBJ_UNSETENV libtests_a_SOURCES += unsetenv.c endif ## end gnulib module unsetenv ## begin gnulib module unsetenv-tests TESTS += test-unsetenv check_PROGRAMS += test-unsetenv EXTRA_DIST += test-unsetenv.c signature.h macros.h ## end gnulib module unsetenv-tests ## begin gnulib module usleep if GL_COND_OBJ_USLEEP libtests_a_SOURCES += usleep.c endif ## end gnulib module usleep ## begin gnulib module usleep-tests TESTS += test-usleep check_PROGRAMS += test-usleep EXTRA_DIST += test-usleep.c signature.h macros.h ## end gnulib module usleep-tests ## begin gnulib module vasnprintf-tests TESTS += test-vasnprintf check_PROGRAMS += test-vasnprintf EXTRA_DIST += test-vasnprintf.c macros.h ## end gnulib module vasnprintf-tests ## begin gnulib module verify-tests TESTS_ENVIRONMENT += MAKE='$(MAKE)' TESTS += test-verify test-verify.sh check_PROGRAMS += test-verify # test-verify-try is never built, but test-verify.sh needs a rule to # build test-verify-try.o. EXTRA_PROGRAMS += test-verify-try # This test expects compilation of test-verify-try.c to fail, and # each time it fails, the makefile rule does not perform the usual # "mv -f $name.Tpo $name.po, so tell make clean to remove that file. MOSTLYCLEANFILES += .deps/test-verify-try.Tpo EXTRA_DIST += test-verify.c test-verify-try.c test-verify.sh ## end gnulib module verify-tests ## begin gnulib module vsnprintf-tests TESTS += test-vsnprintf check_PROGRAMS += test-vsnprintf EXTRA_DIST += test-vsnprintf.c signature.h macros.h ## end gnulib module vsnprintf-tests ## begin gnulib module wchar-tests TESTS += test-wchar check_PROGRAMS += test-wchar EXTRA_DIST += test-wchar.c ## end gnulib module wchar-tests ## begin gnulib module wcrtomb-tests TESTS += \ test-wcrtomb.sh \ test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh \ test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh test-wcrtomb-w32-7.sh \ test-wcrtomb-w32-8.sh TESTS_ENVIRONMENT += \ LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' check_PROGRAMS += test-wcrtomb test-wcrtomb-w32 test_wcrtomb_LDADD = $(LDADD) $(SETLOCALE_LIB) EXTRA_DIST += test-wcrtomb.sh test-wcrtomb.c test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh test-wcrtomb-w32-7.sh test-wcrtomb-w32-8.sh test-wcrtomb-w32.c signature.h macros.h ## end gnulib module wcrtomb-tests ## begin gnulib module wctob if GL_COND_OBJ_WCTOB libtests_a_SOURCES += wctob.c endif ## end gnulib module wctob ## begin gnulib module wctomb if GL_COND_OBJ_WCTOMB libtests_a_SOURCES += wctomb.c endif EXTRA_DIST += wctomb-impl.h ## end gnulib module wctomb ## begin gnulib module wctype-h-tests TESTS += test-wctype-h check_PROGRAMS += test-wctype-h EXTRA_DIST += test-wctype-h.c macros.h ## end gnulib module wctype-h-tests ## begin gnulib module wctype-tests TESTS += test-wctype check_PROGRAMS += test-wctype EXTRA_DIST += test-wctype.c signature.h macros.h ## end gnulib module wctype-tests ## begin gnulib module wcwidth-tests TESTS += test-wcwidth check_PROGRAMS += test-wcwidth test_wcwidth_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) EXTRA_DIST += test-wcwidth.c signature.h macros.h ## end gnulib module wcwidth-tests ## begin gnulib module windows-thread if GL_COND_OBJ_WINDOWS_THREAD libtests_a_SOURCES += windows-thread.c endif EXTRA_DIST += windows-thread.h ## end gnulib module windows-thread ## begin gnulib module windows-tls if GL_COND_OBJ_WINDOWS_TLS libtests_a_SOURCES += windows-tls.c endif EXTRA_DIST += windows-tls.h ## end gnulib module windows-tls ## begin gnulib module xalloc libtests_a_SOURCES += xmalloc.c EXTRA_DIST += xalloc.h ## end gnulib module xalloc ## begin gnulib module xalloc-die libtests_a_SOURCES += xalloc-die.c EXTRA_DIST += xalloc.h ## end gnulib module xalloc-die ## begin gnulib module xalloc-die-tests TESTS += test-xalloc-die.sh check_PROGRAMS += test-xalloc-die test_xalloc_die_LDADD = $(LDADD) @LIBINTL@ EXTRA_DIST += test-xalloc-die.c test-xalloc-die.sh ## end gnulib module xalloc-die-tests ## begin gnulib module yield libtests_a_SOURCES += glthread/yield.h ## end gnulib module yield all: all-notice all-notice: @echo '## ---------------------------------------------------- ##' @echo '## ------------------- Gnulib tests ------------------- ##' @echo '## You can ignore compiler warnings in this directory. ##' @echo '## ---------------------------------------------------- ##' check-am: check-notice check-notice: @echo '## ---------------------------------------------------------------------- ##' @echo '## ---------------------------- Gnulib tests ---------------------------- ##' @echo '## Please report test failures in this directory to <bug-gnulib@gnu.org>. ##' @echo '## ---------------------------------------------------------------------- ##' # Clean up after Solaris cc. clean-local: rm -rf SunWS_cache mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/Makefile.in��������������������������������������������������������0000644�0001750�0001750�00001503021�14557513750�014713� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2002-2024 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This file 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ TESTS = test-accept$(EXEEXT) test-access$(EXEEXT) \ test-alignasof$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-argp$(EXEEXT) test-argp-2.sh test-arpa_inet$(EXEEXT) \ test-assert$(EXEEXT) test-binary-io.sh test-bind$(EXEEXT) \ test-btoc32-1.sh test-btoc32-2.sh test-btoc32-3.sh \ test-btowc-1.sh test-btowc-2.sh test-btowc-3.sh \ test-c-ctype$(EXEEXT) test-c-strcase.sh \ test-c-strcasestr$(EXEEXT) test-c32isalnum.sh \ test-c32isalpha.sh test-c32isblank.sh test-c32iscntrl.sh \ test-c32isdigit.sh test-c32isgraph.sh test-c32islower.sh \ test-c32isprint.sh test-c32ispunct.sh test-c32isspace.sh \ test-c32isupper.sh test-c32isxdigit.sh test-c32rtomb.sh \ test-c32rtomb-w32-2.sh test-c32rtomb-w32-3.sh \ test-c32rtomb-w32-4.sh test-c32rtomb-w32-5.sh \ test-c32rtomb-w32-6.sh test-c32rtomb-w32-7.sh \ test-c32rtomb-w32-8.sh test-c32tolower.sh \ test-c32width$(EXEEXT) test-calloc-gnu$(EXEEXT) \ test-chdir$(EXEEXT) test-cloexec$(EXEEXT) test-close$(EXEEXT) \ test-connect$(EXEEXT) test-creat$(EXEEXT) test-ctype$(EXEEXT) \ test-dirent$(EXEEXT) test-dirfd$(EXEEXT) test-dup$(EXEEXT) \ test-dup2$(EXEEXT) test-environ$(EXEEXT) test-errno$(EXEEXT) \ test-error.sh test-euidaccess$(EXEEXT) test-faccessat$(EXEEXT) \ test-fchdir$(EXEEXT) test-fcntl-h$(EXEEXT) test-fcntl$(EXEEXT) \ test-fdopen$(EXEEXT) test-fgetc$(EXEEXT) test-float$(EXEEXT) \ test-fputc$(EXEEXT) test-fread$(EXEEXT) test-free$(EXEEXT) \ test-fstat$(EXEEXT) test-fstatat$(EXEEXT) test-ftruncate.sh \ test-func$(EXEEXT) test-fwrite$(EXEEXT) \ test-getcwd-lgpl$(EXEEXT) test-getdelim$(EXEEXT) \ test-getdtablesize$(EXEEXT) test-getgroups$(EXEEXT) \ test-getline$(EXEEXT) test-getopt-gnu$(EXEEXT) \ test-getopt-posix$(EXEEXT) test-getprogname$(EXEEXT) \ test-gettimeofday$(EXEEXT) test-dynarray$(EXEEXT) \ test-hard-locale$(EXEEXT) test-ignore-value$(EXEEXT) \ test-inet_pton$(EXEEXT) test-intprops$(EXEEXT) \ test-inttypes$(EXEEXT) test-ioctl$(EXEEXT) \ test-isblank$(EXEEXT) test-isnand-nolibm$(EXEEXT) \ test-isnanf-nolibm$(EXEEXT) test-isnanl-nolibm$(EXEEXT) \ test-iswblank$(EXEEXT) test-iswctype$(EXEEXT) test-iswdigit.sh \ test-iswpunct.sh test-iswxdigit.sh test-langinfo$(EXEEXT) \ test-largefile$(EXEEXT) test-limits-h$(EXEEXT) \ test-listen$(EXEEXT) test-locale$(EXEEXT) \ test-localeconv$(EXEEXT) test-localename$(EXEEXT) \ test-rwlock1$(EXEEXT) test-lock$(EXEEXT) test-once1$(EXEEXT) \ test-once2$(EXEEXT) test-lstat$(EXEEXT) \ test-malloc-gnu$(EXEEXT) test-malloca$(EXEEXT) \ test-math$(EXEEXT) test-mbrtoc32-1.sh test-mbrtoc32-2.sh \ test-mbrtoc32-3.sh test-mbrtoc32-4.sh test-mbrtoc32-5.sh \ test-mbrtoc32-w32-2.sh test-mbrtoc32-w32-3.sh \ test-mbrtoc32-w32-4.sh test-mbrtoc32-w32-5.sh \ test-mbrtoc32-w32-6.sh test-mbrtoc32-w32-7.sh \ test-mbrtoc32-w32-8.sh test-mbrtowc-1.sh test-mbrtowc-2.sh \ test-mbrtowc-3.sh test-mbrtowc-4.sh test-mbrtowc-5.sh \ test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh \ test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh \ test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh \ test-mbrtowc-w32-8.sh test-mbschr.sh test-mbsinit.sh \ test-mbspbrk.sh test-mbsspn.sh test-memchr$(EXEEXT) \ test-memrchr$(EXEEXT) test-nanosleep$(EXEEXT) \ test-netinet_in$(EXEEXT) test-nl_langinfo1.sh \ test-nl_langinfo2.sh test-nl_langinfo-mt$(EXEEXT) \ test-open$(EXEEXT) test-openat$(EXEEXT) test-pathmax$(EXEEXT) \ test-perror.sh test-perror2$(EXEEXT) test-pipe$(EXEEXT) \ test-pselect$(EXEEXT) test-pthread$(EXEEXT) \ test-pthread-thread$(EXEEXT) test-pthread_sigmask1$(EXEEXT) \ test-pthread_sigmask2$(EXEEXT) test-raise$(EXEEXT) \ test-random$(EXEEXT) test-random-mt$(EXEEXT) \ test-random_r$(EXEEXT) test-rawmemchr$(EXEEXT) \ test-realloc-gnu$(EXEEXT) test-reallocarray$(EXEEXT) \ test-regex$(EXEEXT) test-sched$(EXEEXT) test-select$(EXEEXT) \ test-select-in.sh test-select-out.sh test-setenv$(EXEEXT) \ test-setlocale_null$(EXEEXT) \ test-setlocale_null-mt-one$(EXEEXT) \ test-setlocale_null-mt-all$(EXEEXT) test-setlocale1.sh \ test-setlocale2.sh test-setsockopt$(EXEEXT) \ test-signal-h$(EXEEXT) test-signbit$(EXEEXT) \ test-sigprocmask$(EXEEXT) test-sleep$(EXEEXT) \ test-sockets$(EXEEXT) test-stat$(EXEEXT) \ test-stat-time$(EXEEXT) test-stdbool$(EXEEXT) \ test-stdckdint$(EXEEXT) test-stddef$(EXEEXT) \ test-stdint$(EXEEXT) test-stdio$(EXEEXT) test-stdlib$(EXEEXT) \ test-strchrnul$(EXEEXT) test-strerror$(EXEEXT) \ test-strerror_r$(EXEEXT) test-string$(EXEEXT) \ test-strings$(EXEEXT) test-strnlen$(EXEEXT) \ test-strtod$(EXEEXT) test-strtod1.sh test-symlink$(EXEEXT) \ test-sys_ioctl$(EXEEXT) test-sys_select$(EXEEXT) \ test-sys_socket$(EXEEXT) test-sys_stat$(EXEEXT) \ test-sys_time$(EXEEXT) test-sys_types$(EXEEXT) \ test-sys_uio$(EXEEXT) test-sys_wait$(EXEEXT) \ test-sysexits$(EXEEXT) test-init.sh test-thread_self$(EXEEXT) \ test-thread_create$(EXEEXT) test-time-h$(EXEEXT) \ test-time$(EXEEXT) test-uchar$(EXEEXT) \ test-uc_tolower$(EXEEXT) test-ctype_alnum$(EXEEXT) \ test-ctype_alpha$(EXEEXT) test-ctype_blank$(EXEEXT) \ test-ctype_cntrl$(EXEEXT) test-ctype_digit$(EXEEXT) \ test-ctype_graph$(EXEEXT) test-ctype_lower$(EXEEXT) \ test-ctype_print$(EXEEXT) test-ctype_punct$(EXEEXT) \ test-ctype_space$(EXEEXT) test-ctype_upper$(EXEEXT) \ test-ctype_xdigit$(EXEEXT) test-dup-safer$(EXEEXT) \ test-unistd$(EXEEXT) test-uc_width$(EXEEXT) \ uniwidth/test-uc_width2.sh test-unsetenv$(EXEEXT) \ test-usleep$(EXEEXT) test-vasnprintf$(EXEEXT) \ test-verify$(EXEEXT) test-verify.sh test-vsnprintf$(EXEEXT) \ test-wchar$(EXEEXT) test-wcrtomb.sh test-wcrtomb-w32-2.sh \ test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh \ test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh \ test-wcrtomb-w32-7.sh test-wcrtomb-w32-8.sh \ test-wctype-h$(EXEEXT) test-wctype$(EXEEXT) \ test-wcwidth$(EXEEXT) test-xalloc-die.sh XFAIL_TESTS = noinst_PROGRAMS = current-locale$(EXEEXT) test-localcharset$(EXEEXT) check_PROGRAMS = test-accept$(EXEEXT) test-access$(EXEEXT) \ test-alignasof$(EXEEXT) test-alloca-opt$(EXEEXT) \ test-argp$(EXEEXT) test-arpa_inet$(EXEEXT) \ test-assert$(EXEEXT) test-binary-io$(EXEEXT) \ test-bind$(EXEEXT) test-btoc32$(EXEEXT) test-btowc$(EXEEXT) \ test-c-ctype$(EXEEXT) test-c-strcasecmp$(EXEEXT) \ test-c-strncasecmp$(EXEEXT) test-c-strcasestr$(EXEEXT) \ test-c32isalnum$(EXEEXT) test-c32isalpha$(EXEEXT) \ test-c32isblank$(EXEEXT) test-c32iscntrl$(EXEEXT) \ test-c32isdigit$(EXEEXT) test-c32isgraph$(EXEEXT) \ test-c32islower$(EXEEXT) test-c32isprint$(EXEEXT) \ test-c32ispunct$(EXEEXT) test-c32isspace$(EXEEXT) \ test-c32isupper$(EXEEXT) test-c32isxdigit$(EXEEXT) \ test-c32rtomb$(EXEEXT) test-c32rtomb-w32$(EXEEXT) \ test-c32tolower$(EXEEXT) test-c32width$(EXEEXT) \ test-calloc-gnu$(EXEEXT) test-chdir$(EXEEXT) \ test-cloexec$(EXEEXT) test-close$(EXEEXT) \ test-connect$(EXEEXT) test-creat$(EXEEXT) test-ctype$(EXEEXT) \ test-dirent$(EXEEXT) test-dirfd$(EXEEXT) test-dup$(EXEEXT) \ test-dup2$(EXEEXT) test-environ$(EXEEXT) test-errno$(EXEEXT) \ test-error$(EXEEXT) test-euidaccess$(EXEEXT) \ test-faccessat$(EXEEXT) test-fchdir$(EXEEXT) \ test-fcntl-h$(EXEEXT) test-fcntl$(EXEEXT) test-fdopen$(EXEEXT) \ test-fgetc$(EXEEXT) test-float$(EXEEXT) test-fputc$(EXEEXT) \ test-fread$(EXEEXT) test-free$(EXEEXT) test-fstat$(EXEEXT) \ test-fstatat$(EXEEXT) test-ftruncate$(EXEEXT) \ test-func$(EXEEXT) test-fwrite$(EXEEXT) \ test-getcwd-lgpl$(EXEEXT) test-getdelim$(EXEEXT) \ test-getdtablesize$(EXEEXT) test-getgroups$(EXEEXT) \ test-getline$(EXEEXT) test-getopt-gnu$(EXEEXT) \ test-getopt-posix$(EXEEXT) test-getprogname$(EXEEXT) \ test-gettimeofday$(EXEEXT) test-dynarray$(EXEEXT) \ test-hard-locale$(EXEEXT) test-ignore-value$(EXEEXT) \ test-inet_pton$(EXEEXT) test-intprops$(EXEEXT) \ test-inttypes$(EXEEXT) test-ioctl$(EXEEXT) \ test-isblank$(EXEEXT) test-isnand-nolibm$(EXEEXT) \ test-isnanf-nolibm$(EXEEXT) test-isnanl-nolibm$(EXEEXT) \ test-iswblank$(EXEEXT) test-iswctype$(EXEEXT) \ test-iswdigit$(EXEEXT) test-iswpunct$(EXEEXT) \ test-iswxdigit$(EXEEXT) test-langinfo$(EXEEXT) \ test-largefile$(EXEEXT) test-limits-h$(EXEEXT) \ test-listen$(EXEEXT) test-locale$(EXEEXT) \ test-localeconv$(EXEEXT) test-localename$(EXEEXT) \ test-rwlock1$(EXEEXT) test-lock$(EXEEXT) test-once1$(EXEEXT) \ test-once2$(EXEEXT) test-lstat$(EXEEXT) \ test-malloc-gnu$(EXEEXT) test-malloca$(EXEEXT) \ test-math$(EXEEXT) test-mbrtoc32$(EXEEXT) \ test-mbrtoc32-w32$(EXEEXT) test-mbrtowc$(EXEEXT) \ test-mbrtowc-w32$(EXEEXT) test-mbschr$(EXEEXT) \ test-mbsinit$(EXEEXT) test-mbspbrk$(EXEEXT) \ test-mbsspn$(EXEEXT) test-memchr$(EXEEXT) \ test-memrchr$(EXEEXT) test-nanosleep$(EXEEXT) \ test-netinet_in$(EXEEXT) test-nl_langinfo1$(EXEEXT) \ test-nl_langinfo2$(EXEEXT) test-nl_langinfo-mt$(EXEEXT) \ test-open$(EXEEXT) test-openat$(EXEEXT) test-pathmax$(EXEEXT) \ test-perror$(EXEEXT) test-perror2$(EXEEXT) test-pipe$(EXEEXT) \ test-pselect$(EXEEXT) test-pthread$(EXEEXT) \ test-pthread-thread$(EXEEXT) test-pthread_sigmask1$(EXEEXT) \ test-pthread_sigmask2$(EXEEXT) test-raise$(EXEEXT) \ test-random$(EXEEXT) test-random-mt$(EXEEXT) \ test-random_r$(EXEEXT) test-rawmemchr$(EXEEXT) \ test-realloc-gnu$(EXEEXT) test-reallocarray$(EXEEXT) \ test-regex$(EXEEXT) test-sched$(EXEEXT) test-select$(EXEEXT) \ test-select-fd$(EXEEXT) test-select-stdin$(EXEEXT) \ test-setenv$(EXEEXT) test-setlocale_null$(EXEEXT) \ test-setlocale_null-mt-one$(EXEEXT) \ test-setlocale_null-mt-all$(EXEEXT) test-setlocale1$(EXEEXT) \ test-setlocale2$(EXEEXT) test-setsockopt$(EXEEXT) \ test-signal-h$(EXEEXT) test-signbit$(EXEEXT) \ test-sigprocmask$(EXEEXT) test-sleep$(EXEEXT) \ test-sockets$(EXEEXT) test-stat$(EXEEXT) \ test-stat-time$(EXEEXT) test-stdbool$(EXEEXT) \ test-stdckdint$(EXEEXT) test-stddef$(EXEEXT) \ test-stdint$(EXEEXT) test-stdio$(EXEEXT) test-stdlib$(EXEEXT) \ test-strchrnul$(EXEEXT) test-strerror$(EXEEXT) \ test-strerror_r$(EXEEXT) test-string$(EXEEXT) \ test-strings$(EXEEXT) test-strnlen$(EXEEXT) \ test-strtod$(EXEEXT) test-strtod1$(EXEEXT) \ test-symlink$(EXEEXT) test-sys_ioctl$(EXEEXT) \ test-sys_select$(EXEEXT) test-sys_socket$(EXEEXT) \ test-sys_stat$(EXEEXT) test-sys_time$(EXEEXT) \ test-sys_types$(EXEEXT) test-sys_uio$(EXEEXT) \ test-sys_wait$(EXEEXT) test-sysexits$(EXEEXT) \ test-thread_self$(EXEEXT) test-thread_create$(EXEEXT) \ test-time-h$(EXEEXT) test-time$(EXEEXT) test-uchar$(EXEEXT) \ test-uc_tolower$(EXEEXT) test-ctype_alnum$(EXEEXT) \ test-ctype_alpha$(EXEEXT) test-ctype_blank$(EXEEXT) \ test-ctype_cntrl$(EXEEXT) test-ctype_digit$(EXEEXT) \ test-ctype_graph$(EXEEXT) test-ctype_lower$(EXEEXT) \ test-ctype_print$(EXEEXT) test-ctype_punct$(EXEEXT) \ test-ctype_space$(EXEEXT) test-ctype_upper$(EXEEXT) \ test-ctype_xdigit$(EXEEXT) test-dup-safer$(EXEEXT) \ test-unistd$(EXEEXT) test-uc_width$(EXEEXT) \ test-uc_width2$(EXEEXT) test-unsetenv$(EXEEXT) \ test-usleep$(EXEEXT) test-vasnprintf$(EXEEXT) \ test-verify$(EXEEXT) test-vsnprintf$(EXEEXT) \ test-wchar$(EXEEXT) test-wcrtomb$(EXEEXT) \ test-wcrtomb-w32$(EXEEXT) test-wctype-h$(EXEEXT) \ test-wctype$(EXEEXT) test-wcwidth$(EXEEXT) \ test-xalloc-die$(EXEEXT) EXTRA_PROGRAMS = test-verify-try$(EXEEXT) @GL_COND_OBJ_ACCEPT_TRUE@am__append_1 = accept.c @GL_COND_OBJ_BIND_TRUE@am__append_2 = bind.c @GL_COND_OBJ_C32RTOMB_TRUE@am__append_3 = c32rtomb.c @GL_COND_OBJ_CONNECT_TRUE@am__append_4 = connect.c @GL_COND_OBJ_CREAT_TRUE@am__append_5 = creat.c @GL_COND_OBJ_DUP_TRUE@am__append_6 = dup.c @GL_COND_OBJ_FDOPEN_TRUE@am__append_7 = fdopen.c @GL_COND_OBJ_FTRUNCATE_TRUE@am__append_8 = ftruncate.c @GL_COND_OBJ_GETPAGESIZE_TRUE@am__append_9 = getpagesize.c @GL_COND_OBJ_INET_PTON_TRUE@am__append_10 = inet_pton.c @GL_COND_OBJ_IOCTL_TRUE@am__append_11 = ioctl.c @GL_COND_OBJ_ISBLANK_TRUE@am__append_12 = isblank.c @GL_COND_OBJ_LISTEN_TRUE@am__append_13 = listen.c @GL_COND_OBJ_NANOSLEEP_TRUE@am__append_14 = nanosleep.c @GL_COND_OBJ_PERROR_TRUE@am__append_15 = perror.c @GL_COND_OBJ_PSELECT_TRUE@am__append_16 = pselect.c @GL_COND_OBJ_PTHREAD_THREAD_TRUE@am__append_17 = pthread-thread.c @GL_COND_OBJ_PTHREAD_SIGMASK_TRUE@am__append_18 = pthread_sigmask.c @GL_COND_OBJ_PUTENV_TRUE@am__append_19 = putenv.c @GL_COND_OBJ_RAISE_TRUE@am__append_20 = raise.c @GL_COND_OBJ_RANDOM_TRUE@am__append_21 = random.c @GL_COND_OBJ_RANDOM_R_TRUE@am__append_22 = random_r.c @GL_COND_OBJ_REALLOCARRAY_TRUE@am__append_23 = reallocarray.c @GL_COND_OBJ_SCHED_YIELD_TRUE@am__append_24 = sched_yield.c @GL_COND_OBJ_SETENV_TRUE@am__append_25 = setenv.c @GL_COND_OBJ_SETLOCALE_TRUE@am__append_26 = setlocale.c @GL_COND_OBJ_SETSOCKOPT_TRUE@am__append_27 = setsockopt.c @GL_COND_OBJ_SIGPROCMASK_TRUE@am__append_28 = sigprocmask.c @GL_COND_OBJ_SOCKET_TRUE@am__append_29 = socket.c @GL_COND_OBJ_SYMLINK_TRUE@am__append_30 = symlink.c @GL_COND_OBJ_UNSETENV_TRUE@am__append_31 = unsetenv.c @GL_COND_OBJ_USLEEP_TRUE@am__append_32 = usleep.c @GL_COND_OBJ_WCTOB_TRUE@am__append_33 = wctob.c @GL_COND_OBJ_WCTOMB_TRUE@am__append_34 = wctomb.c @GL_COND_OBJ_WINDOWS_THREAD_TRUE@am__append_35 = windows-thread.c @GL_COND_OBJ_WINDOWS_TLS_TRUE@am__append_36 = windows-tls.c subdir = bootstrapped/tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) LIBRARIES = $(noinst_LIBRARIES) AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libtests_a_AR = $(AR) $(ARFLAGS) am__DEPENDENCIES_1 = am__libtests_a_SOURCES_DIST = accept.c binary-io.h binary-io.c bind.c \ btoc32.c c-strcase.h c-strcasecmp.c c-strncasecmp.c \ c-strcasestr.h c-strcasestr.c c32rtomb.c c32tob.c connect.c \ creat.c dup.c fdopen.c ftruncate.c getpagesize.c ialloc.c \ inet_pton.c ioctl.c isblank.c listen.c localename.c \ localename-table.c nan.h nanosleep.c perror.c pselect.c \ pthread-thread.c pthread_sigmask.c putenv.c raise.c random.c \ random_r.c reallocarray.c same-inode.h same-inode.c \ sched_yield.c setenv.c setlocale.c setsockopt.c signed-nan.h \ signed-snan.h sigprocmask.c snan.h socket.c symlink.c \ glthread/thread.h glthread/thread.c unsetenv.c usleep.c \ wctob.c wctomb.c windows-thread.c windows-tls.c xmalloc.c \ xalloc-die.c glthread/yield.h @GL_COND_OBJ_ACCEPT_TRUE@am__objects_1 = accept.$(OBJEXT) @GL_COND_OBJ_BIND_TRUE@am__objects_2 = bind.$(OBJEXT) @GL_COND_OBJ_C32RTOMB_TRUE@am__objects_3 = c32rtomb.$(OBJEXT) @GL_COND_OBJ_CONNECT_TRUE@am__objects_4 = connect.$(OBJEXT) @GL_COND_OBJ_CREAT_TRUE@am__objects_5 = creat.$(OBJEXT) @GL_COND_OBJ_DUP_TRUE@am__objects_6 = dup.$(OBJEXT) @GL_COND_OBJ_FDOPEN_TRUE@am__objects_7 = fdopen.$(OBJEXT) @GL_COND_OBJ_FTRUNCATE_TRUE@am__objects_8 = ftruncate.$(OBJEXT) @GL_COND_OBJ_GETPAGESIZE_TRUE@am__objects_9 = getpagesize.$(OBJEXT) @GL_COND_OBJ_INET_PTON_TRUE@am__objects_10 = inet_pton.$(OBJEXT) @GL_COND_OBJ_IOCTL_TRUE@am__objects_11 = ioctl.$(OBJEXT) @GL_COND_OBJ_ISBLANK_TRUE@am__objects_12 = isblank.$(OBJEXT) @GL_COND_OBJ_LISTEN_TRUE@am__objects_13 = listen.$(OBJEXT) @GL_COND_OBJ_NANOSLEEP_TRUE@am__objects_14 = nanosleep.$(OBJEXT) @GL_COND_OBJ_PERROR_TRUE@am__objects_15 = perror.$(OBJEXT) @GL_COND_OBJ_PSELECT_TRUE@am__objects_16 = pselect.$(OBJEXT) @GL_COND_OBJ_PTHREAD_THREAD_TRUE@am__objects_17 = \ @GL_COND_OBJ_PTHREAD_THREAD_TRUE@ pthread-thread.$(OBJEXT) @GL_COND_OBJ_PTHREAD_SIGMASK_TRUE@am__objects_18 = \ @GL_COND_OBJ_PTHREAD_SIGMASK_TRUE@ pthread_sigmask.$(OBJEXT) @GL_COND_OBJ_PUTENV_TRUE@am__objects_19 = putenv.$(OBJEXT) @GL_COND_OBJ_RAISE_TRUE@am__objects_20 = raise.$(OBJEXT) @GL_COND_OBJ_RANDOM_TRUE@am__objects_21 = random.$(OBJEXT) @GL_COND_OBJ_RANDOM_R_TRUE@am__objects_22 = random_r.$(OBJEXT) @GL_COND_OBJ_REALLOCARRAY_TRUE@am__objects_23 = \ @GL_COND_OBJ_REALLOCARRAY_TRUE@ reallocarray.$(OBJEXT) @GL_COND_OBJ_SCHED_YIELD_TRUE@am__objects_24 = sched_yield.$(OBJEXT) @GL_COND_OBJ_SETENV_TRUE@am__objects_25 = setenv.$(OBJEXT) @GL_COND_OBJ_SETLOCALE_TRUE@am__objects_26 = setlocale.$(OBJEXT) @GL_COND_OBJ_SETSOCKOPT_TRUE@am__objects_27 = setsockopt.$(OBJEXT) @GL_COND_OBJ_SIGPROCMASK_TRUE@am__objects_28 = sigprocmask.$(OBJEXT) @GL_COND_OBJ_SOCKET_TRUE@am__objects_29 = socket.$(OBJEXT) @GL_COND_OBJ_SYMLINK_TRUE@am__objects_30 = symlink.$(OBJEXT) am__dirstamp = $(am__leading_dot)dirstamp @GL_COND_OBJ_UNSETENV_TRUE@am__objects_31 = unsetenv.$(OBJEXT) @GL_COND_OBJ_USLEEP_TRUE@am__objects_32 = usleep.$(OBJEXT) @GL_COND_OBJ_WCTOB_TRUE@am__objects_33 = wctob.$(OBJEXT) @GL_COND_OBJ_WCTOMB_TRUE@am__objects_34 = wctomb.$(OBJEXT) @GL_COND_OBJ_WINDOWS_THREAD_TRUE@am__objects_35 = \ @GL_COND_OBJ_WINDOWS_THREAD_TRUE@ windows-thread.$(OBJEXT) @GL_COND_OBJ_WINDOWS_TLS_TRUE@am__objects_36 = windows-tls.$(OBJEXT) am_libtests_a_OBJECTS = $(am__objects_1) binary-io.$(OBJEXT) \ $(am__objects_2) btoc32.$(OBJEXT) c-strcasecmp.$(OBJEXT) \ c-strncasecmp.$(OBJEXT) c-strcasestr.$(OBJEXT) \ $(am__objects_3) c32tob.$(OBJEXT) $(am__objects_4) \ $(am__objects_5) $(am__objects_6) $(am__objects_7) \ $(am__objects_8) $(am__objects_9) ialloc.$(OBJEXT) \ $(am__objects_10) $(am__objects_11) $(am__objects_12) \ $(am__objects_13) localename.$(OBJEXT) \ localename-table.$(OBJEXT) $(am__objects_14) $(am__objects_15) \ $(am__objects_16) $(am__objects_17) $(am__objects_18) \ $(am__objects_19) $(am__objects_20) $(am__objects_21) \ $(am__objects_22) $(am__objects_23) same-inode.$(OBJEXT) \ $(am__objects_24) $(am__objects_25) $(am__objects_26) \ $(am__objects_27) $(am__objects_28) $(am__objects_29) \ $(am__objects_30) glthread/thread.$(OBJEXT) $(am__objects_31) \ $(am__objects_32) $(am__objects_33) $(am__objects_34) \ $(am__objects_35) $(am__objects_36) xmalloc.$(OBJEXT) \ xalloc-die.$(OBJEXT) libtests_a_OBJECTS = $(am_libtests_a_OBJECTS) am_current_locale_OBJECTS = locale.$(OBJEXT) current_locale_OBJECTS = $(am_current_locale_OBJECTS) current_locale_LDADD = $(LDADD) current_locale_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = test_accept_SOURCES = test-accept.c test_accept_OBJECTS = test-accept.$(OBJEXT) am__DEPENDENCIES_2 = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_accept_DEPENDENCIES = $(am__DEPENDENCIES_2) test_access_SOURCES = test-access.c test_access_OBJECTS = test-access.$(OBJEXT) test_access_LDADD = $(LDADD) test_access_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_alignasof_SOURCES = test-alignasof.c test_alignasof_OBJECTS = test-alignasof.$(OBJEXT) test_alignasof_LDADD = $(LDADD) test_alignasof_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_alloca_opt_SOURCES = test-alloca-opt.c test_alloca_opt_OBJECTS = test-alloca-opt.$(OBJEXT) test_alloca_opt_LDADD = $(LDADD) test_alloca_opt_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_argp_SOURCES = test-argp.c test_argp_OBJECTS = test-argp.$(OBJEXT) test_argp_DEPENDENCIES = $(am__DEPENDENCIES_2) test_arpa_inet_SOURCES = test-arpa_inet.c test_arpa_inet_OBJECTS = test-arpa_inet.$(OBJEXT) test_arpa_inet_LDADD = $(LDADD) test_arpa_inet_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_assert_SOURCES = test-assert.c test_assert_OBJECTS = test-assert.$(OBJEXT) test_assert_LDADD = $(LDADD) test_assert_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_binary_io_SOURCES = test-binary-io.c test_binary_io_OBJECTS = test-binary-io.$(OBJEXT) test_binary_io_LDADD = $(LDADD) test_binary_io_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_bind_SOURCES = test-bind.c test_bind_OBJECTS = test-bind.$(OBJEXT) test_bind_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) test_btoc32_SOURCES = test-btoc32.c test_btoc32_OBJECTS = test-btoc32.$(OBJEXT) test_btoc32_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) test_btowc_SOURCES = test-btowc.c test_btowc_OBJECTS = test-btowc.$(OBJEXT) test_btowc_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) test_c_ctype_SOURCES = test-c-ctype.c test_c_ctype_OBJECTS = test-c-ctype.$(OBJEXT) test_c_ctype_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_c_strcasecmp_SOURCES = test-c-strcasecmp.c test_c_strcasecmp_OBJECTS = test-c-strcasecmp.$(OBJEXT) test_c_strcasecmp_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_c_strcasestr_SOURCES = test-c-strcasestr.c test_c_strcasestr_OBJECTS = test-c-strcasestr.$(OBJEXT) test_c_strcasestr_LDADD = $(LDADD) test_c_strcasestr_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_c_strncasecmp_SOURCES = test-c-strncasecmp.c test_c_strncasecmp_OBJECTS = test-c-strncasecmp.$(OBJEXT) test_c_strncasecmp_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_c32isalnum_SOURCES = test-c32isalnum.c test_c32isalnum_OBJECTS = test-c32isalnum.$(OBJEXT) test_c32isalnum_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_c32isalpha_SOURCES = test-c32isalpha.c test_c32isalpha_OBJECTS = test-c32isalpha.$(OBJEXT) test_c32isalpha_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_c32isblank_SOURCES = test-c32isblank.c test_c32isblank_OBJECTS = test-c32isblank.$(OBJEXT) test_c32isblank_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_c32iscntrl_SOURCES = test-c32iscntrl.c test_c32iscntrl_OBJECTS = test-c32iscntrl.$(OBJEXT) test_c32iscntrl_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_c32isdigit_SOURCES = test-c32isdigit.c test_c32isdigit_OBJECTS = test-c32isdigit.$(OBJEXT) test_c32isdigit_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_c32isgraph_SOURCES = test-c32isgraph.c test_c32isgraph_OBJECTS = test-c32isgraph.$(OBJEXT) test_c32isgraph_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_c32islower_SOURCES = test-c32islower.c test_c32islower_OBJECTS = test-c32islower.$(OBJEXT) test_c32islower_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_c32isprint_SOURCES = test-c32isprint.c test_c32isprint_OBJECTS = test-c32isprint.$(OBJEXT) test_c32isprint_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_c32ispunct_SOURCES = test-c32ispunct.c test_c32ispunct_OBJECTS = test-c32ispunct.$(OBJEXT) test_c32ispunct_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_c32isspace_SOURCES = test-c32isspace.c test_c32isspace_OBJECTS = test-c32isspace.$(OBJEXT) test_c32isspace_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_c32isupper_SOURCES = test-c32isupper.c test_c32isupper_OBJECTS = test-c32isupper.$(OBJEXT) test_c32isupper_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_c32isxdigit_SOURCES = test-c32isxdigit.c test_c32isxdigit_OBJECTS = test-c32isxdigit.$(OBJEXT) test_c32isxdigit_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_c32rtomb_SOURCES = test-c32rtomb.c test_c32rtomb_OBJECTS = test-c32rtomb.$(OBJEXT) test_c32rtomb_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_c32rtomb_w32_SOURCES = test-c32rtomb-w32.c test_c32rtomb_w32_OBJECTS = test-c32rtomb-w32.$(OBJEXT) test_c32rtomb_w32_LDADD = $(LDADD) test_c32rtomb_w32_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_c32tolower_SOURCES = test-c32tolower.c test_c32tolower_OBJECTS = test-c32tolower.$(OBJEXT) test_c32tolower_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_c32width_SOURCES = test-c32width.c test_c32width_OBJECTS = test-c32width.$(OBJEXT) test_c32width_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_calloc_gnu_SOURCES = test-calloc-gnu.c test_calloc_gnu_OBJECTS = test-calloc-gnu.$(OBJEXT) test_calloc_gnu_LDADD = $(LDADD) test_calloc_gnu_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_chdir_SOURCES = test-chdir.c test_chdir_OBJECTS = test-chdir.$(OBJEXT) test_chdir_LDADD = $(LDADD) test_chdir_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_cloexec_SOURCES = test-cloexec.c test_cloexec_OBJECTS = test-cloexec.$(OBJEXT) test_cloexec_LDADD = $(LDADD) test_cloexec_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_close_SOURCES = test-close.c test_close_OBJECTS = test-close.$(OBJEXT) test_close_LDADD = $(LDADD) test_close_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_connect_SOURCES = test-connect.c test_connect_OBJECTS = test-connect.$(OBJEXT) test_connect_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_creat_SOURCES = test-creat.c test_creat_OBJECTS = test-creat.$(OBJEXT) test_creat_LDADD = $(LDADD) test_creat_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_ctype_SOURCES = test-ctype.c test_ctype_OBJECTS = test-ctype.$(OBJEXT) test_ctype_LDADD = $(LDADD) test_ctype_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) am_test_ctype_alnum_OBJECTS = unictype/test-ctype_alnum.$(OBJEXT) test_ctype_alnum_OBJECTS = $(am_test_ctype_alnum_OBJECTS) test_ctype_alnum_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_ctype_alpha_OBJECTS = unictype/test-ctype_alpha.$(OBJEXT) test_ctype_alpha_OBJECTS = $(am_test_ctype_alpha_OBJECTS) test_ctype_alpha_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_ctype_blank_OBJECTS = unictype/test-ctype_blank.$(OBJEXT) test_ctype_blank_OBJECTS = $(am_test_ctype_blank_OBJECTS) test_ctype_blank_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_ctype_cntrl_OBJECTS = unictype/test-ctype_cntrl.$(OBJEXT) test_ctype_cntrl_OBJECTS = $(am_test_ctype_cntrl_OBJECTS) test_ctype_cntrl_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_ctype_digit_OBJECTS = unictype/test-ctype_digit.$(OBJEXT) test_ctype_digit_OBJECTS = $(am_test_ctype_digit_OBJECTS) test_ctype_digit_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_ctype_graph_OBJECTS = unictype/test-ctype_graph.$(OBJEXT) test_ctype_graph_OBJECTS = $(am_test_ctype_graph_OBJECTS) test_ctype_graph_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_ctype_lower_OBJECTS = unictype/test-ctype_lower.$(OBJEXT) test_ctype_lower_OBJECTS = $(am_test_ctype_lower_OBJECTS) test_ctype_lower_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_ctype_print_OBJECTS = unictype/test-ctype_print.$(OBJEXT) test_ctype_print_OBJECTS = $(am_test_ctype_print_OBJECTS) test_ctype_print_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_ctype_punct_OBJECTS = unictype/test-ctype_punct.$(OBJEXT) test_ctype_punct_OBJECTS = $(am_test_ctype_punct_OBJECTS) test_ctype_punct_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_ctype_space_OBJECTS = unictype/test-ctype_space.$(OBJEXT) test_ctype_space_OBJECTS = $(am_test_ctype_space_OBJECTS) test_ctype_space_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_ctype_upper_OBJECTS = unictype/test-ctype_upper.$(OBJEXT) test_ctype_upper_OBJECTS = $(am_test_ctype_upper_OBJECTS) test_ctype_upper_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_ctype_xdigit_OBJECTS = unictype/test-ctype_xdigit.$(OBJEXT) test_ctype_xdigit_OBJECTS = $(am_test_ctype_xdigit_OBJECTS) test_ctype_xdigit_DEPENDENCIES = $(am__DEPENDENCIES_2) test_dirent_SOURCES = test-dirent.c test_dirent_OBJECTS = test-dirent.$(OBJEXT) test_dirent_LDADD = $(LDADD) test_dirent_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_dirfd_SOURCES = test-dirfd.c test_dirfd_OBJECTS = test-dirfd.$(OBJEXT) test_dirfd_LDADD = $(LDADD) test_dirfd_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_dup_SOURCES = test-dup.c test_dup_OBJECTS = test-dup.$(OBJEXT) test_dup_LDADD = $(LDADD) test_dup_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_dup_safer_SOURCES = test-dup-safer.c test_dup_safer_OBJECTS = test-dup-safer.$(OBJEXT) test_dup_safer_LDADD = $(LDADD) test_dup_safer_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_dup2_SOURCES = test-dup2.c test_dup2_OBJECTS = test-dup2.$(OBJEXT) test_dup2_LDADD = $(LDADD) test_dup2_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_dynarray_SOURCES = test-dynarray.c test_dynarray_OBJECTS = test-dynarray.$(OBJEXT) test_dynarray_LDADD = $(LDADD) test_dynarray_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_environ_SOURCES = test-environ.c test_environ_OBJECTS = test-environ.$(OBJEXT) test_environ_LDADD = $(LDADD) test_environ_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_errno_SOURCES = test-errno.c test_errno_OBJECTS = test-errno.$(OBJEXT) test_errno_LDADD = $(LDADD) test_errno_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_error_SOURCES = test-error.c test_error_OBJECTS = test-error.$(OBJEXT) test_error_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) test_euidaccess_SOURCES = test-euidaccess.c test_euidaccess_OBJECTS = test-euidaccess.$(OBJEXT) test_euidaccess_LDADD = $(LDADD) test_euidaccess_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_faccessat_SOURCES = test-faccessat.c test_faccessat_OBJECTS = test-faccessat.$(OBJEXT) test_faccessat_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_fchdir_SOURCES = test-fchdir.c test_fchdir_OBJECTS = test-fchdir.$(OBJEXT) test_fchdir_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) test_fcntl_SOURCES = test-fcntl.c test_fcntl_OBJECTS = test-fcntl.$(OBJEXT) test_fcntl_LDADD = $(LDADD) test_fcntl_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_fcntl_h_SOURCES = test-fcntl-h.c test_fcntl_h_OBJECTS = test-fcntl-h.$(OBJEXT) test_fcntl_h_LDADD = $(LDADD) test_fcntl_h_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_fdopen_SOURCES = test-fdopen.c test_fdopen_OBJECTS = test-fdopen.$(OBJEXT) test_fdopen_LDADD = $(LDADD) test_fdopen_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_fgetc_SOURCES = test-fgetc.c test_fgetc_OBJECTS = test-fgetc.$(OBJEXT) test_fgetc_LDADD = $(LDADD) test_fgetc_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_float_SOURCES = test-float.c test_float_OBJECTS = test-float.$(OBJEXT) test_float_LDADD = $(LDADD) test_float_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_fputc_SOURCES = test-fputc.c test_fputc_OBJECTS = test-fputc.$(OBJEXT) test_fputc_LDADD = $(LDADD) test_fputc_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_fread_SOURCES = test-fread.c test_fread_OBJECTS = test-fread.$(OBJEXT) test_fread_LDADD = $(LDADD) test_fread_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_free_SOURCES = test-free.c test_free_OBJECTS = test-free.$(OBJEXT) test_free_LDADD = $(LDADD) test_free_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_fstat_SOURCES = test-fstat.c test_fstat_OBJECTS = test-fstat.$(OBJEXT) test_fstat_LDADD = $(LDADD) test_fstat_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_fstatat_SOURCES = test-fstatat.c test_fstatat_OBJECTS = test-fstatat.$(OBJEXT) test_fstatat_DEPENDENCIES = $(am__DEPENDENCIES_2) test_ftruncate_SOURCES = test-ftruncate.c test_ftruncate_OBJECTS = test-ftruncate.$(OBJEXT) test_ftruncate_LDADD = $(LDADD) test_ftruncate_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_func_SOURCES = test-func.c test_func_OBJECTS = test-func.$(OBJEXT) test_func_LDADD = $(LDADD) test_func_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_fwrite_SOURCES = test-fwrite.c test_fwrite_OBJECTS = test-fwrite.$(OBJEXT) test_fwrite_LDADD = $(LDADD) test_fwrite_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_getcwd_lgpl_SOURCES = test-getcwd-lgpl.c test_getcwd_lgpl_OBJECTS = test-getcwd-lgpl.$(OBJEXT) test_getcwd_lgpl_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_getdelim_SOURCES = test-getdelim.c test_getdelim_OBJECTS = test-getdelim.$(OBJEXT) test_getdelim_LDADD = $(LDADD) test_getdelim_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_getdtablesize_SOURCES = test-getdtablesize.c test_getdtablesize_OBJECTS = test-getdtablesize.$(OBJEXT) test_getdtablesize_LDADD = $(LDADD) test_getdtablesize_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_getgroups_SOURCES = test-getgroups.c test_getgroups_OBJECTS = test-getgroups.$(OBJEXT) test_getgroups_LDADD = $(LDADD) test_getgroups_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_getline_SOURCES = test-getline.c test_getline_OBJECTS = test-getline.$(OBJEXT) test_getline_LDADD = $(LDADD) test_getline_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_getopt_gnu_SOURCES = test-getopt-gnu.c test_getopt_gnu_OBJECTS = test-getopt-gnu.$(OBJEXT) test_getopt_gnu_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_getopt_posix_SOURCES = test-getopt-posix.c test_getopt_posix_OBJECTS = test-getopt-posix.$(OBJEXT) test_getopt_posix_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_getprogname_SOURCES = test-getprogname.c test_getprogname_OBJECTS = test-getprogname.$(OBJEXT) test_getprogname_DEPENDENCIES = $(am__DEPENDENCIES_2) test_gettimeofday_SOURCES = test-gettimeofday.c test_gettimeofday_OBJECTS = test-gettimeofday.$(OBJEXT) test_gettimeofday_LDADD = $(LDADD) test_gettimeofday_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_hard_locale_SOURCES = test-hard-locale.c test_hard_locale_OBJECTS = test-hard-locale.$(OBJEXT) test_hard_locale_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_ignore_value_SOURCES = test-ignore-value.c test_ignore_value_OBJECTS = test-ignore-value.$(OBJEXT) test_ignore_value_LDADD = $(LDADD) test_ignore_value_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_inet_pton_SOURCES = test-inet_pton.c test_inet_pton_OBJECTS = test-inet_pton.$(OBJEXT) test_inet_pton_DEPENDENCIES = $(am__DEPENDENCIES_2) test_intprops_SOURCES = test-intprops.c test_intprops_OBJECTS = test-intprops.$(OBJEXT) test_intprops_LDADD = $(LDADD) test_intprops_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_inttypes_SOURCES = test-inttypes.c test_inttypes_OBJECTS = test-inttypes.$(OBJEXT) test_inttypes_LDADD = $(LDADD) test_inttypes_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_ioctl_SOURCES = test-ioctl.c test_ioctl_OBJECTS = test-ioctl.$(OBJEXT) test_ioctl_LDADD = $(LDADD) test_ioctl_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_isblank_SOURCES = test-isblank.c test_isblank_OBJECTS = test-isblank.$(OBJEXT) test_isblank_LDADD = $(LDADD) test_isblank_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_isnand_nolibm_SOURCES = test-isnand-nolibm.c test_isnand_nolibm_OBJECTS = test-isnand-nolibm.$(OBJEXT) test_isnand_nolibm_LDADD = $(LDADD) test_isnand_nolibm_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_isnanf_nolibm_SOURCES = test-isnanf-nolibm.c test_isnanf_nolibm_OBJECTS = test-isnanf-nolibm.$(OBJEXT) test_isnanf_nolibm_LDADD = $(LDADD) test_isnanf_nolibm_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_isnanl_nolibm_SOURCES = test-isnanl-nolibm.c test_isnanl_nolibm_OBJECTS = test-isnanl-nolibm.$(OBJEXT) test_isnanl_nolibm_LDADD = $(LDADD) test_isnanl_nolibm_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_iswblank_SOURCES = test-iswblank.c test_iswblank_OBJECTS = test-iswblank.$(OBJEXT) test_iswblank_LDADD = $(LDADD) test_iswblank_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_iswctype_SOURCES = test-iswctype.c test_iswctype_OBJECTS = test-iswctype.$(OBJEXT) test_iswctype_LDADD = $(LDADD) test_iswctype_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_iswdigit_SOURCES = test-iswdigit.c test_iswdigit_OBJECTS = test-iswdigit.$(OBJEXT) test_iswdigit_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_iswpunct_SOURCES = test-iswpunct.c test_iswpunct_OBJECTS = test-iswpunct.$(OBJEXT) test_iswpunct_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_iswxdigit_SOURCES = test-iswxdigit.c test_iswxdigit_OBJECTS = test-iswxdigit.$(OBJEXT) test_iswxdigit_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_langinfo_SOURCES = test-langinfo.c test_langinfo_OBJECTS = test-langinfo.$(OBJEXT) test_langinfo_LDADD = $(LDADD) test_langinfo_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_largefile_SOURCES = test-largefile.c test_largefile_OBJECTS = test-largefile.$(OBJEXT) test_largefile_LDADD = $(LDADD) test_largefile_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_limits_h_SOURCES = test-limits-h.c test_limits_h_OBJECTS = test-limits-h.$(OBJEXT) test_limits_h_LDADD = $(LDADD) test_limits_h_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_listen_SOURCES = test-listen.c test_listen_OBJECTS = test-listen.$(OBJEXT) test_listen_DEPENDENCIES = $(am__DEPENDENCIES_2) test_localcharset_SOURCES = test-localcharset.c test_localcharset_OBJECTS = test-localcharset.$(OBJEXT) test_localcharset_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_locale_SOURCES = test-locale.c test_locale_OBJECTS = test-locale.$(OBJEXT) test_locale_LDADD = $(LDADD) test_locale_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_localeconv_SOURCES = test-localeconv.c test_localeconv_OBJECTS = test-localeconv.$(OBJEXT) test_localeconv_LDADD = $(LDADD) test_localeconv_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_localename_SOURCES = test-localename.c test_localename_OBJECTS = test-localename.$(OBJEXT) test_localename_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_lock_SOURCES = test-lock.c test_lock_OBJECTS = test-lock.$(OBJEXT) test_lock_DEPENDENCIES = $(am__DEPENDENCIES_2) test_lstat_SOURCES = test-lstat.c test_lstat_OBJECTS = test-lstat.$(OBJEXT) test_lstat_LDADD = $(LDADD) test_lstat_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_malloc_gnu_SOURCES = test-malloc-gnu.c test_malloc_gnu_OBJECTS = test-malloc-gnu.$(OBJEXT) test_malloc_gnu_LDADD = $(LDADD) test_malloc_gnu_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_malloca_SOURCES = test-malloca.c test_malloca_OBJECTS = test-malloca.$(OBJEXT) test_malloca_LDADD = $(LDADD) test_malloca_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_math_SOURCES = test-math.c test_math_OBJECTS = test-math.$(OBJEXT) test_math_LDADD = $(LDADD) test_math_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_mbrtoc32_SOURCES = test-mbrtoc32.c test_mbrtoc32_OBJECTS = test-mbrtoc32.$(OBJEXT) test_mbrtoc32_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_mbrtoc32_w32_SOURCES = test-mbrtoc32-w32.c test_mbrtoc32_w32_OBJECTS = test-mbrtoc32-w32.$(OBJEXT) test_mbrtoc32_w32_LDADD = $(LDADD) test_mbrtoc32_w32_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_mbrtowc_SOURCES = test-mbrtowc.c test_mbrtowc_OBJECTS = test-mbrtowc.$(OBJEXT) test_mbrtowc_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_mbrtowc_w32_SOURCES = test-mbrtowc-w32.c test_mbrtowc_w32_OBJECTS = test-mbrtowc-w32.$(OBJEXT) test_mbrtowc_w32_LDADD = $(LDADD) test_mbrtowc_w32_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_mbschr_SOURCES = test-mbschr.c test_mbschr_OBJECTS = test-mbschr.$(OBJEXT) test_mbschr_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) test_mbsinit_SOURCES = test-mbsinit.c test_mbsinit_OBJECTS = test-mbsinit.$(OBJEXT) test_mbsinit_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_mbspbrk_SOURCES = test-mbspbrk.c test_mbspbrk_OBJECTS = test-mbspbrk.$(OBJEXT) test_mbspbrk_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_mbsspn_SOURCES = test-mbsspn.c test_mbsspn_OBJECTS = test-mbsspn.$(OBJEXT) test_mbsspn_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) test_memchr_SOURCES = test-memchr.c test_memchr_OBJECTS = test-memchr.$(OBJEXT) test_memchr_LDADD = $(LDADD) test_memchr_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_memrchr_SOURCES = test-memrchr.c test_memrchr_OBJECTS = test-memrchr.$(OBJEXT) test_memrchr_LDADD = $(LDADD) test_memrchr_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_nanosleep_SOURCES = test-nanosleep.c test_nanosleep_OBJECTS = test-nanosleep.$(OBJEXT) test_nanosleep_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_netinet_in_SOURCES = test-netinet_in.c test_netinet_in_OBJECTS = test-netinet_in.$(OBJEXT) test_netinet_in_LDADD = $(LDADD) test_netinet_in_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_nl_langinfo_mt_SOURCES = test-nl_langinfo-mt.c test_nl_langinfo_mt_OBJECTS = test-nl_langinfo-mt.$(OBJEXT) test_nl_langinfo_mt_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) test_nl_langinfo1_SOURCES = test-nl_langinfo1.c test_nl_langinfo1_OBJECTS = test-nl_langinfo1.$(OBJEXT) test_nl_langinfo1_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_nl_langinfo2_SOURCES = test-nl_langinfo2.c test_nl_langinfo2_OBJECTS = test-nl_langinfo2.$(OBJEXT) test_nl_langinfo2_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) am_test_once1_OBJECTS = test-once.$(OBJEXT) test_once1_OBJECTS = $(am_test_once1_OBJECTS) test_once1_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_once2_OBJECTS = test-once.$(OBJEXT) test_once2_OBJECTS = $(am_test_once2_OBJECTS) test_once2_DEPENDENCIES = $(am__DEPENDENCIES_2) test_open_SOURCES = test-open.c test_open_OBJECTS = test-open.$(OBJEXT) test_open_LDADD = $(LDADD) test_open_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_openat_SOURCES = test-openat.c test_openat_OBJECTS = test-openat.$(OBJEXT) test_openat_DEPENDENCIES = $(am__DEPENDENCIES_2) test_pathmax_SOURCES = test-pathmax.c test_pathmax_OBJECTS = test-pathmax.$(OBJEXT) test_pathmax_LDADD = $(LDADD) test_pathmax_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_perror_SOURCES = test-perror.c test_perror_OBJECTS = test-perror.$(OBJEXT) test_perror_LDADD = $(LDADD) test_perror_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_perror2_SOURCES = test-perror2.c test_perror2_OBJECTS = test-perror2.$(OBJEXT) test_perror2_LDADD = $(LDADD) test_perror2_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_pipe_SOURCES = test-pipe.c test_pipe_OBJECTS = test-pipe.$(OBJEXT) test_pipe_LDADD = $(LDADD) test_pipe_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_pselect_SOURCES = test-pselect.c test_pselect_OBJECTS = test-pselect.$(OBJEXT) test_pselect_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_pthread_SOURCES = test-pthread.c test_pthread_OBJECTS = test-pthread.$(OBJEXT) test_pthread_LDADD = $(LDADD) test_pthread_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_pthread_thread_SOURCES = test-pthread-thread.c test_pthread_thread_OBJECTS = test-pthread-thread.$(OBJEXT) test_pthread_thread_DEPENDENCIES = $(am__DEPENDENCIES_2) test_pthread_sigmask1_SOURCES = test-pthread_sigmask1.c test_pthread_sigmask1_OBJECTS = test-pthread_sigmask1.$(OBJEXT) test_pthread_sigmask1_DEPENDENCIES = $(am__DEPENDENCIES_2) test_pthread_sigmask2_SOURCES = test-pthread_sigmask2.c test_pthread_sigmask2_OBJECTS = test-pthread_sigmask2.$(OBJEXT) test_pthread_sigmask2_DEPENDENCIES = $(am__DEPENDENCIES_2) test_raise_SOURCES = test-raise.c test_raise_OBJECTS = test-raise.$(OBJEXT) test_raise_LDADD = $(LDADD) test_raise_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_random_SOURCES = test-random.c test_random_OBJECTS = test-random.$(OBJEXT) test_random_LDADD = $(LDADD) test_random_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_random_mt_SOURCES = test-random-mt.c test_random_mt_OBJECTS = test-random-mt.$(OBJEXT) test_random_mt_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) test_random_r_SOURCES = test-random_r.c test_random_r_OBJECTS = test-random_r.$(OBJEXT) test_random_r_LDADD = $(LDADD) test_random_r_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_rawmemchr_SOURCES = test-rawmemchr.c test_rawmemchr_OBJECTS = test-rawmemchr.$(OBJEXT) test_rawmemchr_LDADD = $(LDADD) test_rawmemchr_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_realloc_gnu_SOURCES = test-realloc-gnu.c test_realloc_gnu_OBJECTS = test-realloc-gnu.$(OBJEXT) test_realloc_gnu_LDADD = $(LDADD) test_realloc_gnu_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_reallocarray_SOURCES = test-reallocarray.c test_reallocarray_OBJECTS = test-reallocarray.$(OBJEXT) test_reallocarray_LDADD = $(LDADD) test_reallocarray_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_regex_SOURCES = test-regex.c test_regex_OBJECTS = test-regex.$(OBJEXT) test_regex_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_rwlock1_SOURCES = test-rwlock1.c test_rwlock1_OBJECTS = test-rwlock1.$(OBJEXT) test_rwlock1_DEPENDENCIES = $(am__DEPENDENCIES_2) test_sched_SOURCES = test-sched.c test_sched_OBJECTS = test-sched.$(OBJEXT) test_sched_LDADD = $(LDADD) test_sched_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_select_SOURCES = test-select.c test_select_OBJECTS = test-select.$(OBJEXT) test_select_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) test_select_fd_SOURCES = test-select-fd.c test_select_fd_OBJECTS = test-select-fd.$(OBJEXT) test_select_fd_DEPENDENCIES = $(am__DEPENDENCIES_2) test_select_stdin_SOURCES = test-select-stdin.c test_select_stdin_OBJECTS = test-select-stdin.$(OBJEXT) test_select_stdin_DEPENDENCIES = $(am__DEPENDENCIES_2) test_setenv_SOURCES = test-setenv.c test_setenv_OBJECTS = test-setenv.$(OBJEXT) test_setenv_LDADD = $(LDADD) test_setenv_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_setlocale1_SOURCES = test-setlocale1.c test_setlocale1_OBJECTS = test-setlocale1.$(OBJEXT) test_setlocale1_DEPENDENCIES = $(am__DEPENDENCIES_2) test_setlocale2_SOURCES = test-setlocale2.c test_setlocale2_OBJECTS = test-setlocale2.$(OBJEXT) test_setlocale2_DEPENDENCIES = $(am__DEPENDENCIES_2) test_setlocale_null_SOURCES = test-setlocale_null.c test_setlocale_null_OBJECTS = test-setlocale_null.$(OBJEXT) test_setlocale_null_DEPENDENCIES = $(am__DEPENDENCIES_2) test_setlocale_null_mt_all_SOURCES = test-setlocale_null-mt-all.c test_setlocale_null_mt_all_OBJECTS = \ test-setlocale_null-mt-all.$(OBJEXT) test_setlocale_null_mt_all_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_setlocale_null_mt_one_SOURCES = test-setlocale_null-mt-one.c test_setlocale_null_mt_one_OBJECTS = \ test-setlocale_null-mt-one.$(OBJEXT) test_setlocale_null_mt_one_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) test_setsockopt_SOURCES = test-setsockopt.c test_setsockopt_OBJECTS = test-setsockopt.$(OBJEXT) test_setsockopt_DEPENDENCIES = $(am__DEPENDENCIES_2) test_signal_h_SOURCES = test-signal-h.c test_signal_h_OBJECTS = test-signal-h.$(OBJEXT) test_signal_h_LDADD = $(LDADD) test_signal_h_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_signbit_SOURCES = test-signbit.c test_signbit_OBJECTS = test-signbit.$(OBJEXT) test_signbit_LDADD = $(LDADD) test_signbit_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sigprocmask_SOURCES = test-sigprocmask.c test_sigprocmask_OBJECTS = test-sigprocmask.$(OBJEXT) test_sigprocmask_LDADD = $(LDADD) test_sigprocmask_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sleep_SOURCES = test-sleep.c test_sleep_OBJECTS = test-sleep.$(OBJEXT) test_sleep_LDADD = $(LDADD) test_sleep_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sockets_SOURCES = test-sockets.c test_sockets_OBJECTS = test-sockets.$(OBJEXT) test_sockets_DEPENDENCIES = $(am__DEPENDENCIES_2) test_stat_SOURCES = test-stat.c test_stat_OBJECTS = test-stat.$(OBJEXT) test_stat_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) test_stat_time_SOURCES = test-stat-time.c test_stat_time_OBJECTS = test-stat-time.$(OBJEXT) test_stat_time_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_stdbool_SOURCES = test-stdbool.c test_stdbool_OBJECTS = test-stdbool.$(OBJEXT) test_stdbool_LDADD = $(LDADD) test_stdbool_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_stdckdint_SOURCES = test-stdckdint.c test_stdckdint_OBJECTS = test-stdckdint.$(OBJEXT) test_stdckdint_LDADD = $(LDADD) test_stdckdint_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_stddef_SOURCES = test-stddef.c test_stddef_OBJECTS = test-stddef.$(OBJEXT) test_stddef_LDADD = $(LDADD) test_stddef_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_stdint_SOURCES = test-stdint.c test_stdint_OBJECTS = test-stdint.$(OBJEXT) test_stdint_LDADD = $(LDADD) test_stdint_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_stdio_SOURCES = test-stdio.c test_stdio_OBJECTS = test-stdio.$(OBJEXT) test_stdio_LDADD = $(LDADD) test_stdio_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_stdlib_SOURCES = test-stdlib.c test_stdlib_OBJECTS = test-stdlib.$(OBJEXT) test_stdlib_LDADD = $(LDADD) test_stdlib_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_strchrnul_SOURCES = test-strchrnul.c test_strchrnul_OBJECTS = test-strchrnul.$(OBJEXT) test_strchrnul_LDADD = $(LDADD) test_strchrnul_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_strerror_SOURCES = test-strerror.c test_strerror_OBJECTS = test-strerror.$(OBJEXT) test_strerror_LDADD = $(LDADD) test_strerror_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_strerror_r_SOURCES = test-strerror_r.c test_strerror_r_OBJECTS = test-strerror_r.$(OBJEXT) test_strerror_r_LDADD = $(LDADD) test_strerror_r_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_string_SOURCES = test-string.c test_string_OBJECTS = test-string.$(OBJEXT) test_string_LDADD = $(LDADD) test_string_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_strings_SOURCES = test-strings.c test_strings_OBJECTS = test-strings.$(OBJEXT) test_strings_LDADD = $(LDADD) test_strings_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_strnlen_SOURCES = test-strnlen.c test_strnlen_OBJECTS = test-strnlen.$(OBJEXT) test_strnlen_LDADD = $(LDADD) test_strnlen_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_strtod_SOURCES = test-strtod.c test_strtod_OBJECTS = test-strtod.$(OBJEXT) test_strtod_LDADD = $(LDADD) test_strtod_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_strtod1_SOURCES = test-strtod1.c test_strtod1_OBJECTS = test-strtod1.$(OBJEXT) test_strtod1_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_symlink_SOURCES = test-symlink.c test_symlink_OBJECTS = test-symlink.$(OBJEXT) test_symlink_LDADD = $(LDADD) test_symlink_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_ioctl_SOURCES = test-sys_ioctl.c test_sys_ioctl_OBJECTS = test-sys_ioctl.$(OBJEXT) test_sys_ioctl_LDADD = $(LDADD) test_sys_ioctl_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_select_SOURCES = test-sys_select.c test_sys_select_OBJECTS = test-sys_select.$(OBJEXT) test_sys_select_LDADD = $(LDADD) test_sys_select_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_socket_SOURCES = test-sys_socket.c test_sys_socket_OBJECTS = test-sys_socket.$(OBJEXT) test_sys_socket_LDADD = $(LDADD) test_sys_socket_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_stat_SOURCES = test-sys_stat.c test_sys_stat_OBJECTS = test-sys_stat.$(OBJEXT) test_sys_stat_LDADD = $(LDADD) test_sys_stat_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_time_SOURCES = test-sys_time.c test_sys_time_OBJECTS = test-sys_time.$(OBJEXT) test_sys_time_LDADD = $(LDADD) test_sys_time_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_types_SOURCES = test-sys_types.c test_sys_types_OBJECTS = test-sys_types.$(OBJEXT) test_sys_types_LDADD = $(LDADD) test_sys_types_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_uio_SOURCES = test-sys_uio.c test_sys_uio_OBJECTS = test-sys_uio.$(OBJEXT) test_sys_uio_LDADD = $(LDADD) test_sys_uio_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sys_wait_SOURCES = test-sys_wait.c test_sys_wait_OBJECTS = test-sys_wait.$(OBJEXT) test_sys_wait_LDADD = $(LDADD) test_sys_wait_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_sysexits_SOURCES = test-sysexits.c test_sysexits_OBJECTS = test-sysexits.$(OBJEXT) test_sysexits_LDADD = $(LDADD) test_sysexits_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_thread_create_SOURCES = test-thread_create.c test_thread_create_OBJECTS = test-thread_create.$(OBJEXT) test_thread_create_DEPENDENCIES = $(am__DEPENDENCIES_2) test_thread_self_SOURCES = test-thread_self.c test_thread_self_OBJECTS = test-thread_self.$(OBJEXT) test_thread_self_DEPENDENCIES = $(am__DEPENDENCIES_2) test_time_SOURCES = test-time.c test_time_OBJECTS = test-time.$(OBJEXT) test_time_LDADD = $(LDADD) test_time_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_time_h_SOURCES = test-time-h.c test_time_h_OBJECTS = test-time-h.$(OBJEXT) test_time_h_LDADD = $(LDADD) test_time_h_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) am_test_uc_tolower_OBJECTS = unicase/test-uc_tolower.$(OBJEXT) test_uc_tolower_OBJECTS = $(am_test_uc_tolower_OBJECTS) test_uc_tolower_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_uc_width_OBJECTS = uniwidth/test-uc_width.$(OBJEXT) test_uc_width_OBJECTS = $(am_test_uc_width_OBJECTS) test_uc_width_DEPENDENCIES = $(am__DEPENDENCIES_2) am_test_uc_width2_OBJECTS = uniwidth/test-uc_width2.$(OBJEXT) test_uc_width2_OBJECTS = $(am_test_uc_width2_OBJECTS) test_uc_width2_DEPENDENCIES = $(am__DEPENDENCIES_2) test_uchar_SOURCES = test-uchar.c test_uchar_OBJECTS = test-uchar.$(OBJEXT) test_uchar_LDADD = $(LDADD) test_uchar_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_unistd_SOURCES = test-unistd.c test_unistd_OBJECTS = test-unistd.$(OBJEXT) test_unistd_LDADD = $(LDADD) test_unistd_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_unsetenv_SOURCES = test-unsetenv.c test_unsetenv_OBJECTS = test-unsetenv.$(OBJEXT) test_unsetenv_LDADD = $(LDADD) test_unsetenv_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_usleep_SOURCES = test-usleep.c test_usleep_OBJECTS = test-usleep.$(OBJEXT) test_usleep_LDADD = $(LDADD) test_usleep_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_vasnprintf_SOURCES = test-vasnprintf.c test_vasnprintf_OBJECTS = test-vasnprintf.$(OBJEXT) test_vasnprintf_LDADD = $(LDADD) test_vasnprintf_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_verify_SOURCES = test-verify.c test_verify_OBJECTS = test-verify.$(OBJEXT) test_verify_LDADD = $(LDADD) test_verify_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_verify_try_SOURCES = test-verify-try.c test_verify_try_OBJECTS = test-verify-try.$(OBJEXT) test_verify_try_LDADD = $(LDADD) test_verify_try_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_vsnprintf_SOURCES = test-vsnprintf.c test_vsnprintf_OBJECTS = test-vsnprintf.$(OBJEXT) test_vsnprintf_LDADD = $(LDADD) test_vsnprintf_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_wchar_SOURCES = test-wchar.c test_wchar_OBJECTS = test-wchar.$(OBJEXT) test_wchar_LDADD = $(LDADD) test_wchar_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_wcrtomb_SOURCES = test-wcrtomb.c test_wcrtomb_OBJECTS = test-wcrtomb.$(OBJEXT) test_wcrtomb_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_wcrtomb_w32_SOURCES = test-wcrtomb-w32.c test_wcrtomb_w32_OBJECTS = test-wcrtomb-w32.$(OBJEXT) test_wcrtomb_w32_LDADD = $(LDADD) test_wcrtomb_w32_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_wctype_SOURCES = test-wctype.c test_wctype_OBJECTS = test-wctype.$(OBJEXT) test_wctype_LDADD = $(LDADD) test_wctype_DEPENDENCIES = libtests.a ../../bootstrapped/lib/libgnu.la \ libtests.a ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_wctype_h_SOURCES = test-wctype-h.c test_wctype_h_OBJECTS = test-wctype-h.$(OBJEXT) test_wctype_h_LDADD = $(LDADD) test_wctype_h_DEPENDENCIES = libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ ../../bootstrapped/lib/libgnu.la libtests.a \ $(am__DEPENDENCIES_1) test_wcwidth_SOURCES = test-wcwidth.c test_wcwidth_OBJECTS = test-wcwidth.$(OBJEXT) test_wcwidth_DEPENDENCIES = $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_1) test_xalloc_die_SOURCES = test-xalloc-die.c test_xalloc_die_OBJECTS = test-xalloc-die.$(OBJEXT) test_xalloc_die_DEPENDENCIES = $(am__DEPENDENCIES_2) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/binary-io.Po \ ./$(DEPDIR)/bind.Po ./$(DEPDIR)/btoc32.Po \ ./$(DEPDIR)/c-strcasecmp.Po ./$(DEPDIR)/c-strcasestr.Po \ ./$(DEPDIR)/c-strncasecmp.Po ./$(DEPDIR)/c32rtomb.Po \ ./$(DEPDIR)/c32tob.Po ./$(DEPDIR)/calloc.Po \ ./$(DEPDIR)/connect.Po ./$(DEPDIR)/creat.Po ./$(DEPDIR)/dup.Po \ ./$(DEPDIR)/fdopen.Po ./$(DEPDIR)/ftruncate.Po \ ./$(DEPDIR)/getpagesize.Po ./$(DEPDIR)/ialloc.Po \ ./$(DEPDIR)/inet_pton.Po ./$(DEPDIR)/ioctl.Po \ ./$(DEPDIR)/isblank.Po ./$(DEPDIR)/listen.Po \ ./$(DEPDIR)/locale.Po ./$(DEPDIR)/localename-table.Po \ ./$(DEPDIR)/localename.Po ./$(DEPDIR)/nanosleep.Po \ ./$(DEPDIR)/perror.Po ./$(DEPDIR)/pselect.Po \ ./$(DEPDIR)/pthread-thread.Po ./$(DEPDIR)/pthread_sigmask.Po \ ./$(DEPDIR)/putenv.Po ./$(DEPDIR)/raise.Po \ ./$(DEPDIR)/random.Po ./$(DEPDIR)/random_r.Po \ ./$(DEPDIR)/reallocarray.Po ./$(DEPDIR)/same-inode.Po \ ./$(DEPDIR)/sched_yield.Po ./$(DEPDIR)/setenv.Po \ ./$(DEPDIR)/setlocale.Po ./$(DEPDIR)/setsockopt.Po \ ./$(DEPDIR)/sigprocmask.Po ./$(DEPDIR)/socket.Po \ ./$(DEPDIR)/strerror_r.Po ./$(DEPDIR)/symlink.Po \ ./$(DEPDIR)/test-accept.Po ./$(DEPDIR)/test-access.Po \ ./$(DEPDIR)/test-alignasof.Po ./$(DEPDIR)/test-alloca-opt.Po \ ./$(DEPDIR)/test-argp.Po ./$(DEPDIR)/test-arpa_inet.Po \ ./$(DEPDIR)/test-assert.Po ./$(DEPDIR)/test-binary-io.Po \ ./$(DEPDIR)/test-bind.Po ./$(DEPDIR)/test-btoc32.Po \ ./$(DEPDIR)/test-btowc.Po ./$(DEPDIR)/test-c-ctype.Po \ ./$(DEPDIR)/test-c-strcasecmp.Po \ ./$(DEPDIR)/test-c-strcasestr.Po \ ./$(DEPDIR)/test-c-strncasecmp.Po \ ./$(DEPDIR)/test-c32isalnum.Po ./$(DEPDIR)/test-c32isalpha.Po \ ./$(DEPDIR)/test-c32isblank.Po ./$(DEPDIR)/test-c32iscntrl.Po \ ./$(DEPDIR)/test-c32isdigit.Po ./$(DEPDIR)/test-c32isgraph.Po \ ./$(DEPDIR)/test-c32islower.Po ./$(DEPDIR)/test-c32isprint.Po \ ./$(DEPDIR)/test-c32ispunct.Po ./$(DEPDIR)/test-c32isspace.Po \ ./$(DEPDIR)/test-c32isupper.Po ./$(DEPDIR)/test-c32isxdigit.Po \ ./$(DEPDIR)/test-c32rtomb-w32.Po ./$(DEPDIR)/test-c32rtomb.Po \ ./$(DEPDIR)/test-c32tolower.Po ./$(DEPDIR)/test-c32width.Po \ ./$(DEPDIR)/test-calloc-gnu.Po ./$(DEPDIR)/test-chdir.Po \ ./$(DEPDIR)/test-cloexec.Po ./$(DEPDIR)/test-close.Po \ ./$(DEPDIR)/test-connect.Po ./$(DEPDIR)/test-creat.Po \ ./$(DEPDIR)/test-ctype.Po ./$(DEPDIR)/test-dirent.Po \ ./$(DEPDIR)/test-dirfd.Po ./$(DEPDIR)/test-dup-safer.Po \ ./$(DEPDIR)/test-dup.Po ./$(DEPDIR)/test-dup2.Po \ ./$(DEPDIR)/test-dynarray.Po ./$(DEPDIR)/test-environ.Po \ ./$(DEPDIR)/test-errno.Po ./$(DEPDIR)/test-error.Po \ ./$(DEPDIR)/test-euidaccess.Po ./$(DEPDIR)/test-faccessat.Po \ ./$(DEPDIR)/test-fchdir.Po ./$(DEPDIR)/test-fcntl-h.Po \ ./$(DEPDIR)/test-fcntl.Po ./$(DEPDIR)/test-fdopen.Po \ ./$(DEPDIR)/test-fgetc.Po ./$(DEPDIR)/test-float.Po \ ./$(DEPDIR)/test-fputc.Po ./$(DEPDIR)/test-fread.Po \ ./$(DEPDIR)/test-free.Po ./$(DEPDIR)/test-fstat.Po \ ./$(DEPDIR)/test-fstatat.Po ./$(DEPDIR)/test-ftruncate.Po \ ./$(DEPDIR)/test-func.Po ./$(DEPDIR)/test-fwrite.Po \ ./$(DEPDIR)/test-getcwd-lgpl.Po ./$(DEPDIR)/test-getdelim.Po \ ./$(DEPDIR)/test-getdtablesize.Po \ ./$(DEPDIR)/test-getgroups.Po ./$(DEPDIR)/test-getline.Po \ ./$(DEPDIR)/test-getopt-gnu.Po \ ./$(DEPDIR)/test-getopt-posix.Po \ ./$(DEPDIR)/test-getprogname.Po \ ./$(DEPDIR)/test-gettimeofday.Po \ ./$(DEPDIR)/test-hard-locale.Po \ ./$(DEPDIR)/test-ignore-value.Po ./$(DEPDIR)/test-inet_pton.Po \ ./$(DEPDIR)/test-intprops.Po ./$(DEPDIR)/test-inttypes.Po \ ./$(DEPDIR)/test-ioctl.Po ./$(DEPDIR)/test-isblank.Po \ ./$(DEPDIR)/test-isnand-nolibm.Po \ ./$(DEPDIR)/test-isnanf-nolibm.Po \ ./$(DEPDIR)/test-isnanl-nolibm.Po ./$(DEPDIR)/test-iswblank.Po \ ./$(DEPDIR)/test-iswctype.Po ./$(DEPDIR)/test-iswdigit.Po \ ./$(DEPDIR)/test-iswpunct.Po ./$(DEPDIR)/test-iswxdigit.Po \ ./$(DEPDIR)/test-langinfo.Po ./$(DEPDIR)/test-largefile.Po \ ./$(DEPDIR)/test-limits-h.Po ./$(DEPDIR)/test-listen.Po \ ./$(DEPDIR)/test-localcharset.Po ./$(DEPDIR)/test-locale.Po \ ./$(DEPDIR)/test-localeconv.Po ./$(DEPDIR)/test-localename.Po \ ./$(DEPDIR)/test-lock.Po ./$(DEPDIR)/test-lstat.Po \ ./$(DEPDIR)/test-malloc-gnu.Po ./$(DEPDIR)/test-malloca.Po \ ./$(DEPDIR)/test-math.Po ./$(DEPDIR)/test-mbrtoc32-w32.Po \ ./$(DEPDIR)/test-mbrtoc32.Po ./$(DEPDIR)/test-mbrtowc-w32.Po \ ./$(DEPDIR)/test-mbrtowc.Po ./$(DEPDIR)/test-mbschr.Po \ ./$(DEPDIR)/test-mbsinit.Po ./$(DEPDIR)/test-mbspbrk.Po \ ./$(DEPDIR)/test-mbsspn.Po ./$(DEPDIR)/test-memchr.Po \ ./$(DEPDIR)/test-memrchr.Po ./$(DEPDIR)/test-nanosleep.Po \ ./$(DEPDIR)/test-netinet_in.Po \ ./$(DEPDIR)/test-nl_langinfo-mt.Po \ ./$(DEPDIR)/test-nl_langinfo1.Po \ ./$(DEPDIR)/test-nl_langinfo2.Po ./$(DEPDIR)/test-once.Po \ ./$(DEPDIR)/test-open.Po ./$(DEPDIR)/test-openat.Po \ ./$(DEPDIR)/test-pathmax.Po ./$(DEPDIR)/test-perror.Po \ ./$(DEPDIR)/test-perror2.Po ./$(DEPDIR)/test-pipe.Po \ ./$(DEPDIR)/test-pselect.Po ./$(DEPDIR)/test-pthread-thread.Po \ ./$(DEPDIR)/test-pthread.Po \ ./$(DEPDIR)/test-pthread_sigmask1.Po \ ./$(DEPDIR)/test-pthread_sigmask2.Po ./$(DEPDIR)/test-raise.Po \ ./$(DEPDIR)/test-random-mt.Po ./$(DEPDIR)/test-random.Po \ ./$(DEPDIR)/test-random_r.Po ./$(DEPDIR)/test-rawmemchr.Po \ ./$(DEPDIR)/test-realloc-gnu.Po \ ./$(DEPDIR)/test-reallocarray.Po ./$(DEPDIR)/test-regex.Po \ ./$(DEPDIR)/test-rwlock1.Po ./$(DEPDIR)/test-sched.Po \ ./$(DEPDIR)/test-select-fd.Po ./$(DEPDIR)/test-select-stdin.Po \ ./$(DEPDIR)/test-select.Po ./$(DEPDIR)/test-setenv.Po \ ./$(DEPDIR)/test-setlocale1.Po ./$(DEPDIR)/test-setlocale2.Po \ ./$(DEPDIR)/test-setlocale_null-mt-all.Po \ ./$(DEPDIR)/test-setlocale_null-mt-one.Po \ ./$(DEPDIR)/test-setlocale_null.Po \ ./$(DEPDIR)/test-setsockopt.Po ./$(DEPDIR)/test-signal-h.Po \ ./$(DEPDIR)/test-signbit.Po ./$(DEPDIR)/test-sigprocmask.Po \ ./$(DEPDIR)/test-sleep.Po ./$(DEPDIR)/test-sockets.Po \ ./$(DEPDIR)/test-stat-time.Po ./$(DEPDIR)/test-stat.Po \ ./$(DEPDIR)/test-stdbool.Po ./$(DEPDIR)/test-stdckdint.Po \ ./$(DEPDIR)/test-stddef.Po ./$(DEPDIR)/test-stdint.Po \ ./$(DEPDIR)/test-stdio.Po ./$(DEPDIR)/test-stdlib.Po \ ./$(DEPDIR)/test-strchrnul.Po ./$(DEPDIR)/test-strerror.Po \ ./$(DEPDIR)/test-strerror_r.Po ./$(DEPDIR)/test-string.Po \ ./$(DEPDIR)/test-strings.Po ./$(DEPDIR)/test-strnlen.Po \ ./$(DEPDIR)/test-strtod.Po ./$(DEPDIR)/test-strtod1.Po \ ./$(DEPDIR)/test-symlink.Po ./$(DEPDIR)/test-sys_ioctl.Po \ ./$(DEPDIR)/test-sys_select.Po ./$(DEPDIR)/test-sys_socket.Po \ ./$(DEPDIR)/test-sys_stat.Po ./$(DEPDIR)/test-sys_time.Po \ ./$(DEPDIR)/test-sys_types.Po ./$(DEPDIR)/test-sys_uio.Po \ ./$(DEPDIR)/test-sys_wait.Po ./$(DEPDIR)/test-sysexits.Po \ ./$(DEPDIR)/test-thread_create.Po \ ./$(DEPDIR)/test-thread_self.Po ./$(DEPDIR)/test-time-h.Po \ ./$(DEPDIR)/test-time.Po ./$(DEPDIR)/test-uchar.Po \ ./$(DEPDIR)/test-unistd.Po ./$(DEPDIR)/test-unsetenv.Po \ ./$(DEPDIR)/test-usleep.Po ./$(DEPDIR)/test-vasnprintf.Po \ ./$(DEPDIR)/test-verify-try.Po ./$(DEPDIR)/test-verify.Po \ ./$(DEPDIR)/test-vsnprintf.Po ./$(DEPDIR)/test-wchar.Po \ ./$(DEPDIR)/test-wcrtomb-w32.Po ./$(DEPDIR)/test-wcrtomb.Po \ ./$(DEPDIR)/test-wctype-h.Po ./$(DEPDIR)/test-wctype.Po \ ./$(DEPDIR)/test-wcwidth.Po ./$(DEPDIR)/test-xalloc-die.Po \ ./$(DEPDIR)/unsetenv.Po ./$(DEPDIR)/usleep.Po \ ./$(DEPDIR)/wctob.Po ./$(DEPDIR)/wctomb.Po \ ./$(DEPDIR)/windows-thread.Po ./$(DEPDIR)/windows-tls.Po \ ./$(DEPDIR)/xalloc-die.Po ./$(DEPDIR)/xmalloc.Po \ glthread/$(DEPDIR)/thread.Po \ unicase/$(DEPDIR)/test-uc_tolower.Po \ unictype/$(DEPDIR)/test-ctype_alnum.Po \ unictype/$(DEPDIR)/test-ctype_alpha.Po \ unictype/$(DEPDIR)/test-ctype_blank.Po \ unictype/$(DEPDIR)/test-ctype_cntrl.Po \ unictype/$(DEPDIR)/test-ctype_digit.Po \ unictype/$(DEPDIR)/test-ctype_graph.Po \ unictype/$(DEPDIR)/test-ctype_lower.Po \ unictype/$(DEPDIR)/test-ctype_print.Po \ unictype/$(DEPDIR)/test-ctype_punct.Po \ unictype/$(DEPDIR)/test-ctype_space.Po \ unictype/$(DEPDIR)/test-ctype_upper.Po \ unictype/$(DEPDIR)/test-ctype_xdigit.Po \ uniwidth/$(DEPDIR)/test-uc_width.Po \ uniwidth/$(DEPDIR)/test-uc_width2.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ $(current_locale_SOURCES) test-accept.c test-access.c \ test-alignasof.c test-alloca-opt.c test-argp.c \ test-arpa_inet.c test-assert.c test-binary-io.c test-bind.c \ test-btoc32.c test-btowc.c test-c-ctype.c test-c-strcasecmp.c \ test-c-strcasestr.c test-c-strncasecmp.c test-c32isalnum.c \ test-c32isalpha.c test-c32isblank.c test-c32iscntrl.c \ test-c32isdigit.c test-c32isgraph.c test-c32islower.c \ test-c32isprint.c test-c32ispunct.c test-c32isspace.c \ test-c32isupper.c test-c32isxdigit.c test-c32rtomb.c \ test-c32rtomb-w32.c test-c32tolower.c test-c32width.c \ test-calloc-gnu.c test-chdir.c test-cloexec.c test-close.c \ test-connect.c test-creat.c test-ctype.c \ $(test_ctype_alnum_SOURCES) $(test_ctype_alpha_SOURCES) \ $(test_ctype_blank_SOURCES) $(test_ctype_cntrl_SOURCES) \ $(test_ctype_digit_SOURCES) $(test_ctype_graph_SOURCES) \ $(test_ctype_lower_SOURCES) $(test_ctype_print_SOURCES) \ $(test_ctype_punct_SOURCES) $(test_ctype_space_SOURCES) \ $(test_ctype_upper_SOURCES) $(test_ctype_xdigit_SOURCES) \ test-dirent.c test-dirfd.c test-dup.c test-dup-safer.c \ test-dup2.c test-dynarray.c test-environ.c test-errno.c \ test-error.c test-euidaccess.c test-faccessat.c test-fchdir.c \ test-fcntl.c test-fcntl-h.c test-fdopen.c test-fgetc.c \ test-float.c test-fputc.c test-fread.c test-free.c \ test-fstat.c test-fstatat.c test-ftruncate.c test-func.c \ test-fwrite.c test-getcwd-lgpl.c test-getdelim.c \ test-getdtablesize.c test-getgroups.c test-getline.c \ test-getopt-gnu.c test-getopt-posix.c test-getprogname.c \ test-gettimeofday.c test-hard-locale.c test-ignore-value.c \ test-inet_pton.c test-intprops.c test-inttypes.c test-ioctl.c \ test-isblank.c test-isnand-nolibm.c test-isnanf-nolibm.c \ test-isnanl-nolibm.c test-iswblank.c test-iswctype.c \ test-iswdigit.c test-iswpunct.c test-iswxdigit.c \ test-langinfo.c test-largefile.c test-limits-h.c test-listen.c \ test-localcharset.c test-locale.c test-localeconv.c \ test-localename.c test-lock.c test-lstat.c test-malloc-gnu.c \ test-malloca.c test-math.c test-mbrtoc32.c test-mbrtoc32-w32.c \ test-mbrtowc.c test-mbrtowc-w32.c test-mbschr.c test-mbsinit.c \ test-mbspbrk.c test-mbsspn.c test-memchr.c test-memrchr.c \ test-nanosleep.c test-netinet_in.c test-nl_langinfo-mt.c \ test-nl_langinfo1.c test-nl_langinfo2.c $(test_once1_SOURCES) \ $(test_once2_SOURCES) test-open.c test-openat.c test-pathmax.c \ test-perror.c test-perror2.c test-pipe.c test-pselect.c \ test-pthread.c test-pthread-thread.c test-pthread_sigmask1.c \ test-pthread_sigmask2.c test-raise.c test-random.c \ test-random-mt.c test-random_r.c test-rawmemchr.c \ test-realloc-gnu.c test-reallocarray.c test-regex.c \ test-rwlock1.c test-sched.c test-select.c test-select-fd.c \ test-select-stdin.c test-setenv.c test-setlocale1.c \ test-setlocale2.c test-setlocale_null.c \ test-setlocale_null-mt-all.c test-setlocale_null-mt-one.c \ test-setsockopt.c test-signal-h.c test-signbit.c \ test-sigprocmask.c test-sleep.c test-sockets.c test-stat.c \ test-stat-time.c test-stdbool.c test-stdckdint.c test-stddef.c \ test-stdint.c test-stdio.c test-stdlib.c test-strchrnul.c \ test-strerror.c test-strerror_r.c test-string.c test-strings.c \ test-strnlen.c test-strtod.c test-strtod1.c test-symlink.c \ test-sys_ioctl.c test-sys_select.c test-sys_socket.c \ test-sys_stat.c test-sys_time.c test-sys_types.c \ test-sys_uio.c test-sys_wait.c test-sysexits.c \ test-thread_create.c test-thread_self.c test-time.c \ test-time-h.c $(test_uc_tolower_SOURCES) \ $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ test-uchar.c test-unistd.c test-unsetenv.c test-usleep.c \ test-vasnprintf.c test-verify.c test-verify-try.c \ test-vsnprintf.c test-wchar.c test-wcrtomb.c \ test-wcrtomb-w32.c test-wctype.c test-wctype-h.c \ test-wcwidth.c test-xalloc-die.c DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \ $(EXTRA_libtests_a_SOURCES) $(current_locale_SOURCES) \ test-accept.c test-access.c test-alignasof.c test-alloca-opt.c \ test-argp.c test-arpa_inet.c test-assert.c test-binary-io.c \ test-bind.c test-btoc32.c test-btowc.c test-c-ctype.c \ test-c-strcasecmp.c test-c-strcasestr.c test-c-strncasecmp.c \ test-c32isalnum.c test-c32isalpha.c test-c32isblank.c \ test-c32iscntrl.c test-c32isdigit.c test-c32isgraph.c \ test-c32islower.c test-c32isprint.c test-c32ispunct.c \ test-c32isspace.c test-c32isupper.c test-c32isxdigit.c \ test-c32rtomb.c test-c32rtomb-w32.c test-c32tolower.c \ test-c32width.c test-calloc-gnu.c test-chdir.c test-cloexec.c \ test-close.c test-connect.c test-creat.c test-ctype.c \ $(test_ctype_alnum_SOURCES) $(test_ctype_alpha_SOURCES) \ $(test_ctype_blank_SOURCES) $(test_ctype_cntrl_SOURCES) \ $(test_ctype_digit_SOURCES) $(test_ctype_graph_SOURCES) \ $(test_ctype_lower_SOURCES) $(test_ctype_print_SOURCES) \ $(test_ctype_punct_SOURCES) $(test_ctype_space_SOURCES) \ $(test_ctype_upper_SOURCES) $(test_ctype_xdigit_SOURCES) \ test-dirent.c test-dirfd.c test-dup.c test-dup-safer.c \ test-dup2.c test-dynarray.c test-environ.c test-errno.c \ test-error.c test-euidaccess.c test-faccessat.c test-fchdir.c \ test-fcntl.c test-fcntl-h.c test-fdopen.c test-fgetc.c \ test-float.c test-fputc.c test-fread.c test-free.c \ test-fstat.c test-fstatat.c test-ftruncate.c test-func.c \ test-fwrite.c test-getcwd-lgpl.c test-getdelim.c \ test-getdtablesize.c test-getgroups.c test-getline.c \ test-getopt-gnu.c test-getopt-posix.c test-getprogname.c \ test-gettimeofday.c test-hard-locale.c test-ignore-value.c \ test-inet_pton.c test-intprops.c test-inttypes.c test-ioctl.c \ test-isblank.c test-isnand-nolibm.c test-isnanf-nolibm.c \ test-isnanl-nolibm.c test-iswblank.c test-iswctype.c \ test-iswdigit.c test-iswpunct.c test-iswxdigit.c \ test-langinfo.c test-largefile.c test-limits-h.c test-listen.c \ test-localcharset.c test-locale.c test-localeconv.c \ test-localename.c test-lock.c test-lstat.c test-malloc-gnu.c \ test-malloca.c test-math.c test-mbrtoc32.c test-mbrtoc32-w32.c \ test-mbrtowc.c test-mbrtowc-w32.c test-mbschr.c test-mbsinit.c \ test-mbspbrk.c test-mbsspn.c test-memchr.c test-memrchr.c \ test-nanosleep.c test-netinet_in.c test-nl_langinfo-mt.c \ test-nl_langinfo1.c test-nl_langinfo2.c $(test_once1_SOURCES) \ $(test_once2_SOURCES) test-open.c test-openat.c test-pathmax.c \ test-perror.c test-perror2.c test-pipe.c test-pselect.c \ test-pthread.c test-pthread-thread.c test-pthread_sigmask1.c \ test-pthread_sigmask2.c test-raise.c test-random.c \ test-random-mt.c test-random_r.c test-rawmemchr.c \ test-realloc-gnu.c test-reallocarray.c test-regex.c \ test-rwlock1.c test-sched.c test-select.c test-select-fd.c \ test-select-stdin.c test-setenv.c test-setlocale1.c \ test-setlocale2.c test-setlocale_null.c \ test-setlocale_null-mt-all.c test-setlocale_null-mt-one.c \ test-setsockopt.c test-signal-h.c test-signbit.c \ test-sigprocmask.c test-sleep.c test-sockets.c test-stat.c \ test-stat-time.c test-stdbool.c test-stdckdint.c test-stddef.c \ test-stdint.c test-stdio.c test-stdlib.c test-strchrnul.c \ test-strerror.c test-strerror_r.c test-string.c test-strings.c \ test-strnlen.c test-strtod.c test-strtod1.c test-symlink.c \ test-sys_ioctl.c test-sys_select.c test-sys_socket.c \ test-sys_stat.c test-sys_time.c test-sys_types.c \ test-sys_uio.c test-sys_wait.c test-sysexits.c \ test-thread_create.c test-thread_self.c test-time.c \ test-time-h.c $(test_uc_tolower_SOURCES) \ $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ test-uchar.c test-unistd.c test-unsetenv.c test-usleep.c \ test-vasnprintf.c test-verify.c test-verify-try.c \ test-vsnprintf.c test-wchar.c test-wcrtomb.c \ test-wcrtomb-w32.c test-wctype.c test-wctype-h.c \ test-wcwidth.c test-xalloc-die.c RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ check recheck distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) \ $(top_srcdir)/bootstrapped/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp \ $(top_srcdir)/bootstrapped/build-aux/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @GL_CFLAG_ALLOW_WARNINGS@ $(GL_CFLAG_GNULIB_WARNINGS) @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @GL_CXXFLAG_ALLOW_WARNINGS@ @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ -DEXEEXT=\"@EXEEXT@\" DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.14 foreign subdir-objects SUBDIRS = . TESTS_ENVIRONMENT = EXEEXT='@EXEEXT@' srcdir='$(srcdir)' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ LC_NUMERIC_IMPLEMENTED='@LC_NUMERIC_IMPLEMENTED@' \ MAKE='$(MAKE)' LOCALE_FR='@LOCALE_FR@' \ LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_JA='@LOCALE_JA@' \ LOCALE_ZH_CN='@LOCALE_ZH_CN@' noinst_HEADERS = noinst_LIBRARIES = check_LIBRARIES = libtests.a EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h \ test-access.c test-access.h signature.h macros.h \ test-alignasof.c macros.h test-alloca-opt.c test-argp.c \ test-argp-2.sh macros.h arpa_inet.in.h test-arpa_inet.c \ test-assert.c test-binary-io.sh test-binary-io.c macros.h \ w32sock.h test-bind.c signature.h macros.h test-btoc32-1.sh \ test-btoc32-2.sh test-btoc32-3.sh test-btoc32.c signature.h \ macros.h test-btowc-1.sh test-btowc-2.sh test-btowc-3.sh \ test-btowc.c signature.h macros.h test-c-ctype.c macros.h \ test-c-strcase.sh test-c-strcasecmp.c test-c-strncasecmp.c \ macros.h str-two-way.h test-c-strcasestr.c macros.h \ test-c32isalnum.sh test-c32isalnum.c signature.h macros.h \ test-c32isalpha.sh test-c32isalpha.c signature.h macros.h \ test-c32isblank.sh test-c32isblank.c signature.h macros.h \ test-c32iscntrl.sh test-c32iscntrl.c signature.h macros.h \ test-c32isdigit.sh test-c32isdigit.c signature.h macros.h \ test-c32isgraph.sh test-c32isgraph.c signature.h macros.h \ test-c32islower.sh test-c32islower.c signature.h macros.h \ test-c32isprint.sh test-c32isprint.c signature.h macros.h \ test-c32ispunct.sh test-c32ispunct.c signature.h macros.h \ test-c32isspace.sh test-c32isspace.c signature.h macros.h \ test-c32isupper.sh test-c32isupper.c signature.h macros.h \ test-c32isxdigit.sh test-c32isxdigit.c signature.h macros.h \ test-c32rtomb.sh test-c32rtomb.c test-c32rtomb-w32-2.sh \ test-c32rtomb-w32-3.sh test-c32rtomb-w32-4.sh \ test-c32rtomb-w32-5.sh test-c32rtomb-w32-6.sh \ test-c32rtomb-w32-7.sh test-c32rtomb-w32-8.sh \ test-c32rtomb-w32.c signature.h macros.h test-c32tolower.sh \ test-c32tolower.c signature.h macros.h test-c32width.c \ signature.h macros.h calloc.c test-calloc-gnu.c macros.h \ calloc.c test-chdir.c signature.h macros.h test-cloexec.c \ macros.h test-close.c signature.h macros.h w32sock.h \ test-connect.c signature.h macros.h test-creat.c signature.h \ macros.h ctype.in.h test-ctype.c test-dirent.c test-dirfd.c \ macros.h test-dup.c signature.h macros.h test-dup2.c \ signature.h macros.h test-environ.c test-errno.c test-error.sh \ test-error.c macros.h test-euidaccess.c test-access.h \ signature.h macros.h test-faccessat.c signature.h macros.h \ test-fchdir.c signature.h macros.h test-fcntl-h.c test-fcntl.c \ signature.h macros.h test-fdopen.c signature.h macros.h \ test-fgetc.c signature.h macros.h flexmember.h test-float.c \ macros.h fpucw.h test-fputc.c signature.h macros.h \ test-fread.c signature.h macros.h test-free.c macros.h \ test-fstat.c signature.h macros.h test-fstatat.c test-lstat.h \ test-stat.h signature.h macros.h test-ftruncate.c \ test-ftruncate.sh signature.h macros.h test-func.c macros.h \ test-fwrite.c signature.h macros.h test-getcwd-lgpl.c \ signature.h macros.h test-getdelim.c signature.h macros.h \ test-getdtablesize.c signature.h macros.h test-getgroups.c \ signature.h macros.h test-getline.c signature.h macros.h \ macros.h signature.h test-getopt-gnu.c test-getopt-main.h \ test-getopt.h test-getopt_long.h macros.h signature.h \ test-getopt-posix.c test-getopt-main.h test-getopt.h \ test-getprogname.c test-gettimeofday.c signature.h macros.h \ test-dynarray.c macros.h test-hard-locale.c locale.c ialloc.h \ ignore-value.h test-ignore-value.c test-inet_pton.c \ signature.h macros.h test-intprops.c macros.h test-inttypes.c \ w32sock.h test-ioctl.c signature.h macros.h test-isblank.c \ signature.h macros.h test-isnand-nolibm.c test-isnand.h \ minus-zero.h infinity.h macros.h test-isnanf-nolibm.c \ test-isnanf.h minus-zero.h infinity.h macros.h \ test-isnanl-nolibm.c test-isnanl.h minus-zero.h infinity.h \ macros.h test-iswblank.c macros.h test-iswctype.c signature.h \ macros.h test-iswdigit.sh test-iswdigit.c signature.h macros.h \ test-iswpunct.sh test-iswpunct.c signature.h macros.h \ test-iswxdigit.sh test-iswxdigit.c signature.h macros.h \ test-langinfo.c test-largefile.c test-limits-h.c w32sock.h \ test-listen.c signature.h macros.h test-localcharset.c \ test-locale.c test-localeconv.c signature.h macros.h \ localename-table.h localename.h test-localename.c macros.h \ test-rwlock1.c test-lock.c test-once.c atomic-int-gnulib.h \ macros.h test-lstat.h test-lstat.c signature.h macros.h \ test-malloc-gnu.c macros.h test-malloca.c test-math.c macros.h \ test-mbrtoc32-1.sh test-mbrtoc32-2.sh test-mbrtoc32-3.sh \ test-mbrtoc32-4.sh test-mbrtoc32-5.sh test-mbrtoc32.c \ test-mbrtoc32-w32-2.sh test-mbrtoc32-w32-3.sh \ test-mbrtoc32-w32-4.sh test-mbrtoc32-w32-5.sh \ test-mbrtoc32-w32-6.sh test-mbrtoc32-w32-7.sh \ test-mbrtoc32-w32-8.sh test-mbrtoc32-w32.c signature.h \ macros.h test-mbrtowc-1.sh test-mbrtowc-2.sh test-mbrtowc-3.sh \ test-mbrtowc-4.sh test-mbrtowc-5.sh test-mbrtowc.c \ test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh \ test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh \ test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh \ test-mbrtowc-w32-8.sh test-mbrtowc-w32.c signature.h macros.h \ test-mbschr.sh test-mbschr.c macros.h test-mbsinit.sh \ test-mbsinit.c signature.h macros.h test-mbspbrk.sh \ test-mbspbrk.c macros.h test-mbsspn.sh test-mbsspn.c macros.h \ test-memchr.c zerosize-ptr.h signature.h macros.h \ test-memrchr.c zerosize-ptr.h signature.h macros.h \ test-nanosleep.c signature.h macros.h netinet_in.in.h \ test-netinet_in.c test-nl_langinfo1.sh test-nl_langinfo2.sh \ test-nl_langinfo1.c test-nl_langinfo2.c test-nl_langinfo-mt.c \ signature.h macros.h test-open.h test-open.c signature.h \ macros.h test-openat.c test-open.h signature.h macros.h \ test-pathmax.c macros.h signature.h test-perror.c \ test-perror2.c test-perror.sh test-pipe.c signature.h macros.h \ test-pselect.c test-select.h macros.h signature.h pthread.in.h \ test-pthread.c test-pthread-thread.c macros.h \ test-pthread_sigmask1.c test-pthread_sigmask2.c signature.h \ macros.h test-raise.c signature.h macros.h test-random.c \ test-random-mt.c signature.h macros.h test-random_r.c \ signature.h macros.h test-rawmemchr.c zerosize-ptr.h \ signature.h macros.h test-realloc-gnu.c macros.h \ test-reallocarray.c signature.h macros.h test-regex.c macros.h \ sched.in.h test-sched.c macros.h signature.h test-select.c \ test-select.h test-select-fd.c test-select-in.sh \ test-select-out.sh test-select-stdin.c test-setenv.c \ signature.h macros.h test-setlocale_null.c \ test-setlocale_null-mt-one.c test-setlocale_null-mt-all.c \ test-setlocale1.sh test-setlocale1.c test-setlocale2.sh \ test-setlocale2.c signature.h macros.h w32sock.h \ test-setsockopt.c signature.h macros.h test-signal-h.c \ test-signbit.c minus-zero.h infinity.h macros.h \ test-sigprocmask.c signature.h macros.h test-sleep.c \ signature.h macros.h _Noreturn.h arg-nonnull.h c++defs.h \ warn-on-use.h w32sock.h test-sockets.c test-stat.h test-stat.c \ signature.h macros.h test-stat-time.c macros.h nap.h \ test-stdbool.c macros.h test-intprops.c test-stdckdint.c \ test-stddef.c test-stdint.c test-stdio.c macros.h \ test-stdlib.c test-sys_wait.h test-strchrnul.c signature.h \ macros.h test-strerror.c signature.h macros.h strerror_r.c \ test-strerror_r.c signature.h macros.h test-string.c \ test-strings.c test-strnlen.c zerosize-ptr.h signature.h \ macros.h test-strtod.c test-strtod1.sh test-strtod1.c \ signature.h minus-zero.h macros.h test-symlink.h \ test-symlink.c signature.h macros.h sys_ioctl.in.h \ test-sys_ioctl.c test-sys_select.c signature.h \ test-sys_socket.c test-sys_stat.c test-sys_time.c \ test-sys_types.c test-sys_uio.c test-sys_wait.c \ test-sys_wait.h test-sysexits.c init.sh test-init.sh \ thread-optim.h test-thread_self.c test-thread_create.c \ macros.h test-time-h.c test-time.c signature.h macros.h \ test-uchar.c unicase/test-uc_tolower.c \ unicase/test-mapping-part1.h unicase/test-mapping-part2.h \ macros.h unictype/test-ctype_alnum.c \ unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ unictype/test-ctype_alpha.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ unictype/test-ctype_blank.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ unictype/test-ctype_cntrl.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ unictype/test-ctype_digit.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ unictype/test-ctype_graph.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ unictype/test-ctype_lower.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ unictype/test-ctype_print.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ unictype/test-ctype_punct.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ unictype/test-ctype_space.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ unictype/test-ctype_upper.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h \ unictype/test-ctype_xdigit.c unictype/test-predicate-part1.h \ unictype/test-predicate-part2.h macros.h test-dup-safer.c \ macros.h test-unistd.c uniwidth/test-uc_width.c \ uniwidth/test-uc_width2.c uniwidth/test-uc_width2.sh macros.h \ test-unsetenv.c signature.h macros.h test-usleep.c signature.h \ macros.h test-vasnprintf.c macros.h test-verify.c \ test-verify-try.c test-verify.sh test-vsnprintf.c signature.h \ macros.h test-wchar.c test-wcrtomb.sh test-wcrtomb.c \ test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh \ test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh \ test-wcrtomb-w32-6.sh test-wcrtomb-w32-7.sh \ test-wcrtomb-w32-8.sh test-wcrtomb-w32.c signature.h macros.h \ wctomb-impl.h test-wctype-h.c macros.h test-wctype.c \ signature.h macros.h test-wcwidth.c signature.h macros.h \ windows-thread.h windows-tls.h xalloc.h xalloc.h \ test-xalloc-die.c test-xalloc-die.sh BUILT_SOURCES = arpa/inet.h ctype.h $(NETINET_IN_H) pthread.h sched.h \ sys/ioctl.h SUFFIXES = # This test expects compilation of test-verify-try.c to fail, and # each time it fails, the makefile rule does not perform the usual # "mv -f $name.Tpo $name.po, so tell make clean to remove that file. MOSTLYCLEANFILES = core *.stackdump arpa/inet.h arpa/inet.h-t ctype.h \ ctype.h-t test-getdelim.txt test-getline.txt netinet/in.h \ netinet/in.h-t pthread.h pthread.h-t1 pthread.h-t2 \ pthread.h-t3 pthread.h-t4 sched.h sched.h-t sys/ioctl.h \ sys/ioctl.h-t .deps/test-verify-try.Tpo MOSTLYCLEANDIRS = arpa netinet sys CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_CPPFLAGS = \ -D@gltests_WITNESS@=1 \ -I. -I$(srcdir) \ -I../.. -I$(srcdir)/../.. \ -I../../bootstrapped/lib -I$(srcdir)/../../bootstrapped/lib LDADD = libtests.a ../../bootstrapped/lib/libgnu.la libtests.a ../../bootstrapped/lib/libgnu.la libtests.a $(LIBTESTS_LIBDEPS) libtests_a_SOURCES = $(am__append_1) binary-io.h binary-io.c \ $(am__append_2) btoc32.c c-strcase.h c-strcasecmp.c \ c-strncasecmp.c c-strcasestr.h c-strcasestr.c $(am__append_3) \ c32tob.c $(am__append_4) $(am__append_5) $(am__append_6) \ $(am__append_7) $(am__append_8) $(am__append_9) ialloc.c \ $(am__append_10) $(am__append_11) $(am__append_12) \ $(am__append_13) localename.c localename-table.c nan.h \ $(am__append_14) $(am__append_15) $(am__append_16) \ $(am__append_17) $(am__append_18) $(am__append_19) \ $(am__append_20) $(am__append_21) $(am__append_22) \ $(am__append_23) same-inode.h same-inode.c $(am__append_24) \ $(am__append_25) $(am__append_26) $(am__append_27) \ signed-nan.h signed-snan.h $(am__append_28) snan.h \ $(am__append_29) $(am__append_30) glthread/thread.h \ glthread/thread.c $(am__append_31) $(am__append_32) \ $(am__append_33) $(am__append_34) $(am__append_35) \ $(am__append_36) xmalloc.c xalloc-die.c glthread/yield.h libtests_a_LIBADD = $(gltests_LIBOBJS) libtests_a_DEPENDENCIES = $(gltests_LIBOBJS) EXTRA_libtests_a_SOURCES = calloc.c calloc.c strerror_r.c AM_LIBTOOLFLAGS = --preserve-dup-deps test_accept_LDADD = $(LDADD) @LIBSOCKET@ test_argp_LDADD = $(LDADD) @LIBINTL@ test_bind_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) test_btoc32_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(LIBC32CONV) test_btowc_LDADD = $(LDADD) $(SETLOCALE_LIB) test_c_ctype_LDADD = $(LDADD) $(SETLOCALE_LIB) test_c_strcasecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) test_c_strncasecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) test_c32isalnum_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_c32isalpha_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_c32isblank_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_c32iscntrl_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_c32isdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_c32isgraph_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_c32islower_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_c32isprint_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_c32ispunct_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_c32isspace_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_c32isupper_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_c32isxdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_c32rtomb_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(LIBC32CONV) test_c32tolower_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_c32width_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) $(LIBC32CONV) test_connect_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) test_error_LDADD = $(LDADD) $(LIBINTL) test_faccessat_LDADD = $(LDADD) $(EUIDACCESS_LIBGEN) @LIBINTL@ test_fchdir_LDADD = $(LDADD) $(LIBINTL) test_fstatat_LDADD = $(LDADD) @LIBINTL@ # In 'sed', replace the pattern space with a "DO NOT EDIT" comment. SED_HEADER_NOEDIT = s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */, # '$(SED_HEADER_STDOUT) -e "..."' runs 'sed' but first outputs "DO NOT EDIT". SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G # '$(SED_HEADER_TO_AT_t) FILE' copies FILE to $@-t, prepending a leading # "DO_NOT_EDIT". Although this could be done more simply via: # SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) > $@-t # the -n and 'w' avoid a fork+exec, at least when GNU Make is used. SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t' # Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that gl_V_at = $(AM_V_GEN) test_getcwd_lgpl_LDADD = $(LDADD) $(LIBINTL) test_getopt_gnu_LDADD = $(LDADD) $(LIBINTL) test_getopt_posix_LDADD = $(LDADD) $(LIBINTL) test_getprogname_LDADD = $(LDADD) test_hard_locale_LDADD = $(LDADD) $(SETLOCALE_LIB) @HARD_LOCALE_LIB@ current_locale_SOURCES = locale.c test_inet_pton_LDADD = $(LDADD) @INET_PTON_LIB@ test_iswdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) test_iswpunct_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) test_iswxdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) test_listen_LDADD = $(LDADD) @LIBSOCKET@ test_localcharset_LDADD = $(LDADD) $(SETLOCALE_LIB) test_localename_LDADD = $(LDADD) $(SETLOCALE_LIB) @INTL_MACOSX_LIBS@ $(LIBTHREAD) test_rwlock1_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ test_lock_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ @LIB_SEMAPHORE@ test_once1_SOURCES = test-once.c test_once1_LDADD = $(LDADD) @LIBTHREAD@ test_once2_SOURCES = test-once.c test_once2_LDADD = $(LDADD) @LIBMULTITHREAD@ test_mbrtoc32_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBC32CONV) test_mbrtowc_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) test_mbschr_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBC32CONV) test_mbsinit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) test_mbspbrk_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBC32CONV) test_mbsspn_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBC32CONV) test_nanosleep_LDADD = $(LDADD) $(NANOSLEEP_LIB) test_nl_langinfo1_LDADD = $(LDADD) $(SETLOCALE_LIB) test_nl_langinfo2_LDADD = $(LDADD) $(SETLOCALE_LIB) test_nl_langinfo_mt_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBMULTITHREAD) $(NANOSLEEP_LIB) test_openat_LDADD = $(LDADD) @LIBINTL@ test_pselect_LDADD = $(LDADD) @SELECT_LIB@ @LIBSOCKET@ @PTHREAD_SIGMASK_LIB@ $(INET_PTON_LIB) test_pthread_thread_LDADD = $(LDADD) @LIBPMULTITHREAD@ test_pthread_sigmask1_LDADD = $(LDADD) @PTHREAD_SIGMASK_LIB@ test_pthread_sigmask2_LDADD = $(LDADD) @PTHREAD_SIGMASK_LIB@ @LIBMULTITHREAD@ test_random_mt_LDADD = $(LDADD) $(LIBINTL) $(LIBMULTITHREAD) $(YIELD_LIB) test_regex_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) @LIBINTL@ $(LIBTHREAD) test_select_LDADD = $(LDADD) @SELECT_LIB@ @LIBSOCKET@ $(INET_PTON_LIB) test_select_fd_LDADD = $(LDADD) @SELECT_LIB@ test_select_stdin_LDADD = $(LDADD) @SELECT_LIB@ test_setlocale_null_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ test_setlocale_null_mt_one_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ $(LIBMULTITHREAD) $(NANOSLEEP_LIB) test_setlocale_null_mt_all_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ $(LIBMULTITHREAD) $(NANOSLEEP_LIB) test_setlocale1_LDADD = $(LDADD) @SETLOCALE_LIB@ test_setlocale2_LDADD = $(LDADD) @SETLOCALE_LIB@ test_setsockopt_LDADD = $(LDADD) @LIBSOCKET@ # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H = $(srcdir)/_Noreturn.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H = $(srcdir)/arg-nonnull.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H = $(srcdir)/c++defs.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H = $(srcdir)/warn-on-use.h test_sockets_LDADD = $(LDADD) @LIBSOCKET@ test_stat_LDADD = $(LDADD) $(LIBINTL) test_stat_time_LDADD = $(LDADD) $(NANOSLEEP_LIB) test_strtod1_LDADD = $(LDADD) $(SETLOCALE_LIB) test_thread_self_LDADD = $(LDADD) @LIBTHREAD@ test_thread_create_LDADD = $(LDADD) @LIBMULTITHREAD@ test_uc_tolower_SOURCES = unicase/test-uc_tolower.c test_uc_tolower_LDADD = $(LDADD) $(LIBUNISTRING) test_ctype_alnum_SOURCES = unictype/test-ctype_alnum.c test_ctype_alnum_LDADD = $(LDADD) $(LIBUNISTRING) test_ctype_alpha_SOURCES = unictype/test-ctype_alpha.c test_ctype_alpha_LDADD = $(LDADD) $(LIBUNISTRING) test_ctype_blank_SOURCES = unictype/test-ctype_blank.c test_ctype_blank_LDADD = $(LDADD) $(LIBUNISTRING) test_ctype_cntrl_SOURCES = unictype/test-ctype_cntrl.c test_ctype_cntrl_LDADD = $(LDADD) $(LIBUNISTRING) test_ctype_digit_SOURCES = unictype/test-ctype_digit.c test_ctype_digit_LDADD = $(LDADD) $(LIBUNISTRING) test_ctype_graph_SOURCES = unictype/test-ctype_graph.c test_ctype_graph_LDADD = $(LDADD) $(LIBUNISTRING) test_ctype_lower_SOURCES = unictype/test-ctype_lower.c test_ctype_lower_LDADD = $(LDADD) $(LIBUNISTRING) test_ctype_print_SOURCES = unictype/test-ctype_print.c test_ctype_print_LDADD = $(LDADD) $(LIBUNISTRING) test_ctype_punct_SOURCES = unictype/test-ctype_punct.c test_ctype_punct_LDADD = $(LDADD) $(LIBUNISTRING) test_ctype_space_SOURCES = unictype/test-ctype_space.c test_ctype_space_LDADD = $(LDADD) $(LIBUNISTRING) test_ctype_upper_SOURCES = unictype/test-ctype_upper.c test_ctype_upper_LDADD = $(LDADD) $(LIBUNISTRING) test_ctype_xdigit_SOURCES = unictype/test-ctype_xdigit.c test_ctype_xdigit_LDADD = $(LDADD) $(LIBUNISTRING) test_uc_width_SOURCES = uniwidth/test-uc_width.c test_uc_width_LDADD = $(LDADD) $(LIBUNISTRING) test_uc_width2_SOURCES = uniwidth/test-uc_width2.c test_uc_width2_LDADD = $(LDADD) $(LIBUNISTRING) test_wcrtomb_LDADD = $(LDADD) $(SETLOCALE_LIB) test_wcwidth_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) test_xalloc_die_LDADD = $(LDADD) @LIBINTL@ all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bootstrapped/tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign bootstrapped/tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-checkLIBRARIES: -test -z "$(check_LIBRARIES)" || rm -f $(check_LIBRARIES) clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) glthread/$(am__dirstamp): @$(MKDIR_P) glthread @: > glthread/$(am__dirstamp) glthread/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) glthread/$(DEPDIR) @: > glthread/$(DEPDIR)/$(am__dirstamp) glthread/thread.$(OBJEXT): glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) libtests.a: $(libtests_a_OBJECTS) $(libtests_a_DEPENDENCIES) $(EXTRA_libtests_a_DEPENDENCIES) $(AM_V_at)-rm -f libtests.a $(AM_V_AR)$(libtests_a_AR) libtests.a $(libtests_a_OBJECTS) $(libtests_a_LIBADD) $(AM_V_at)$(RANLIB) libtests.a current-locale$(EXEEXT): $(current_locale_OBJECTS) $(current_locale_DEPENDENCIES) $(EXTRA_current_locale_DEPENDENCIES) @rm -f current-locale$(EXEEXT) $(AM_V_CCLD)$(LINK) $(current_locale_OBJECTS) $(current_locale_LDADD) $(LIBS) test-accept$(EXEEXT): $(test_accept_OBJECTS) $(test_accept_DEPENDENCIES) $(EXTRA_test_accept_DEPENDENCIES) @rm -f test-accept$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_accept_OBJECTS) $(test_accept_LDADD) $(LIBS) test-access$(EXEEXT): $(test_access_OBJECTS) $(test_access_DEPENDENCIES) $(EXTRA_test_access_DEPENDENCIES) @rm -f test-access$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_access_OBJECTS) $(test_access_LDADD) $(LIBS) test-alignasof$(EXEEXT): $(test_alignasof_OBJECTS) $(test_alignasof_DEPENDENCIES) $(EXTRA_test_alignasof_DEPENDENCIES) @rm -f test-alignasof$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_alignasof_OBJECTS) $(test_alignasof_LDADD) $(LIBS) test-alloca-opt$(EXEEXT): $(test_alloca_opt_OBJECTS) $(test_alloca_opt_DEPENDENCIES) $(EXTRA_test_alloca_opt_DEPENDENCIES) @rm -f test-alloca-opt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_alloca_opt_OBJECTS) $(test_alloca_opt_LDADD) $(LIBS) test-argp$(EXEEXT): $(test_argp_OBJECTS) $(test_argp_DEPENDENCIES) $(EXTRA_test_argp_DEPENDENCIES) @rm -f test-argp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_argp_OBJECTS) $(test_argp_LDADD) $(LIBS) test-arpa_inet$(EXEEXT): $(test_arpa_inet_OBJECTS) $(test_arpa_inet_DEPENDENCIES) $(EXTRA_test_arpa_inet_DEPENDENCIES) @rm -f test-arpa_inet$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_arpa_inet_OBJECTS) $(test_arpa_inet_LDADD) $(LIBS) test-assert$(EXEEXT): $(test_assert_OBJECTS) $(test_assert_DEPENDENCIES) $(EXTRA_test_assert_DEPENDENCIES) @rm -f test-assert$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_assert_OBJECTS) $(test_assert_LDADD) $(LIBS) test-binary-io$(EXEEXT): $(test_binary_io_OBJECTS) $(test_binary_io_DEPENDENCIES) $(EXTRA_test_binary_io_DEPENDENCIES) @rm -f test-binary-io$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_binary_io_OBJECTS) $(test_binary_io_LDADD) $(LIBS) test-bind$(EXEEXT): $(test_bind_OBJECTS) $(test_bind_DEPENDENCIES) $(EXTRA_test_bind_DEPENDENCIES) @rm -f test-bind$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_bind_OBJECTS) $(test_bind_LDADD) $(LIBS) test-btoc32$(EXEEXT): $(test_btoc32_OBJECTS) $(test_btoc32_DEPENDENCIES) $(EXTRA_test_btoc32_DEPENDENCIES) @rm -f test-btoc32$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_btoc32_OBJECTS) $(test_btoc32_LDADD) $(LIBS) test-btowc$(EXEEXT): $(test_btowc_OBJECTS) $(test_btowc_DEPENDENCIES) $(EXTRA_test_btowc_DEPENDENCIES) @rm -f test-btowc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_btowc_OBJECTS) $(test_btowc_LDADD) $(LIBS) test-c-ctype$(EXEEXT): $(test_c_ctype_OBJECTS) $(test_c_ctype_DEPENDENCIES) $(EXTRA_test_c_ctype_DEPENDENCIES) @rm -f test-c-ctype$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c_ctype_OBJECTS) $(test_c_ctype_LDADD) $(LIBS) test-c-strcasecmp$(EXEEXT): $(test_c_strcasecmp_OBJECTS) $(test_c_strcasecmp_DEPENDENCIES) $(EXTRA_test_c_strcasecmp_DEPENDENCIES) @rm -f test-c-strcasecmp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c_strcasecmp_OBJECTS) $(test_c_strcasecmp_LDADD) $(LIBS) test-c-strcasestr$(EXEEXT): $(test_c_strcasestr_OBJECTS) $(test_c_strcasestr_DEPENDENCIES) $(EXTRA_test_c_strcasestr_DEPENDENCIES) @rm -f test-c-strcasestr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c_strcasestr_OBJECTS) $(test_c_strcasestr_LDADD) $(LIBS) test-c-strncasecmp$(EXEEXT): $(test_c_strncasecmp_OBJECTS) $(test_c_strncasecmp_DEPENDENCIES) $(EXTRA_test_c_strncasecmp_DEPENDENCIES) @rm -f test-c-strncasecmp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c_strncasecmp_OBJECTS) $(test_c_strncasecmp_LDADD) $(LIBS) test-c32isalnum$(EXEEXT): $(test_c32isalnum_OBJECTS) $(test_c32isalnum_DEPENDENCIES) $(EXTRA_test_c32isalnum_DEPENDENCIES) @rm -f test-c32isalnum$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32isalnum_OBJECTS) $(test_c32isalnum_LDADD) $(LIBS) test-c32isalpha$(EXEEXT): $(test_c32isalpha_OBJECTS) $(test_c32isalpha_DEPENDENCIES) $(EXTRA_test_c32isalpha_DEPENDENCIES) @rm -f test-c32isalpha$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32isalpha_OBJECTS) $(test_c32isalpha_LDADD) $(LIBS) test-c32isblank$(EXEEXT): $(test_c32isblank_OBJECTS) $(test_c32isblank_DEPENDENCIES) $(EXTRA_test_c32isblank_DEPENDENCIES) @rm -f test-c32isblank$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32isblank_OBJECTS) $(test_c32isblank_LDADD) $(LIBS) test-c32iscntrl$(EXEEXT): $(test_c32iscntrl_OBJECTS) $(test_c32iscntrl_DEPENDENCIES) $(EXTRA_test_c32iscntrl_DEPENDENCIES) @rm -f test-c32iscntrl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32iscntrl_OBJECTS) $(test_c32iscntrl_LDADD) $(LIBS) test-c32isdigit$(EXEEXT): $(test_c32isdigit_OBJECTS) $(test_c32isdigit_DEPENDENCIES) $(EXTRA_test_c32isdigit_DEPENDENCIES) @rm -f test-c32isdigit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32isdigit_OBJECTS) $(test_c32isdigit_LDADD) $(LIBS) test-c32isgraph$(EXEEXT): $(test_c32isgraph_OBJECTS) $(test_c32isgraph_DEPENDENCIES) $(EXTRA_test_c32isgraph_DEPENDENCIES) @rm -f test-c32isgraph$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32isgraph_OBJECTS) $(test_c32isgraph_LDADD) $(LIBS) test-c32islower$(EXEEXT): $(test_c32islower_OBJECTS) $(test_c32islower_DEPENDENCIES) $(EXTRA_test_c32islower_DEPENDENCIES) @rm -f test-c32islower$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32islower_OBJECTS) $(test_c32islower_LDADD) $(LIBS) test-c32isprint$(EXEEXT): $(test_c32isprint_OBJECTS) $(test_c32isprint_DEPENDENCIES) $(EXTRA_test_c32isprint_DEPENDENCIES) @rm -f test-c32isprint$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32isprint_OBJECTS) $(test_c32isprint_LDADD) $(LIBS) test-c32ispunct$(EXEEXT): $(test_c32ispunct_OBJECTS) $(test_c32ispunct_DEPENDENCIES) $(EXTRA_test_c32ispunct_DEPENDENCIES) @rm -f test-c32ispunct$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32ispunct_OBJECTS) $(test_c32ispunct_LDADD) $(LIBS) test-c32isspace$(EXEEXT): $(test_c32isspace_OBJECTS) $(test_c32isspace_DEPENDENCIES) $(EXTRA_test_c32isspace_DEPENDENCIES) @rm -f test-c32isspace$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32isspace_OBJECTS) $(test_c32isspace_LDADD) $(LIBS) test-c32isupper$(EXEEXT): $(test_c32isupper_OBJECTS) $(test_c32isupper_DEPENDENCIES) $(EXTRA_test_c32isupper_DEPENDENCIES) @rm -f test-c32isupper$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32isupper_OBJECTS) $(test_c32isupper_LDADD) $(LIBS) test-c32isxdigit$(EXEEXT): $(test_c32isxdigit_OBJECTS) $(test_c32isxdigit_DEPENDENCIES) $(EXTRA_test_c32isxdigit_DEPENDENCIES) @rm -f test-c32isxdigit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32isxdigit_OBJECTS) $(test_c32isxdigit_LDADD) $(LIBS) test-c32rtomb$(EXEEXT): $(test_c32rtomb_OBJECTS) $(test_c32rtomb_DEPENDENCIES) $(EXTRA_test_c32rtomb_DEPENDENCIES) @rm -f test-c32rtomb$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32rtomb_OBJECTS) $(test_c32rtomb_LDADD) $(LIBS) test-c32rtomb-w32$(EXEEXT): $(test_c32rtomb_w32_OBJECTS) $(test_c32rtomb_w32_DEPENDENCIES) $(EXTRA_test_c32rtomb_w32_DEPENDENCIES) @rm -f test-c32rtomb-w32$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32rtomb_w32_OBJECTS) $(test_c32rtomb_w32_LDADD) $(LIBS) test-c32tolower$(EXEEXT): $(test_c32tolower_OBJECTS) $(test_c32tolower_DEPENDENCIES) $(EXTRA_test_c32tolower_DEPENDENCIES) @rm -f test-c32tolower$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32tolower_OBJECTS) $(test_c32tolower_LDADD) $(LIBS) test-c32width$(EXEEXT): $(test_c32width_OBJECTS) $(test_c32width_DEPENDENCIES) $(EXTRA_test_c32width_DEPENDENCIES) @rm -f test-c32width$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_c32width_OBJECTS) $(test_c32width_LDADD) $(LIBS) test-calloc-gnu$(EXEEXT): $(test_calloc_gnu_OBJECTS) $(test_calloc_gnu_DEPENDENCIES) $(EXTRA_test_calloc_gnu_DEPENDENCIES) @rm -f test-calloc-gnu$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_calloc_gnu_OBJECTS) $(test_calloc_gnu_LDADD) $(LIBS) test-chdir$(EXEEXT): $(test_chdir_OBJECTS) $(test_chdir_DEPENDENCIES) $(EXTRA_test_chdir_DEPENDENCIES) @rm -f test-chdir$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_chdir_OBJECTS) $(test_chdir_LDADD) $(LIBS) test-cloexec$(EXEEXT): $(test_cloexec_OBJECTS) $(test_cloexec_DEPENDENCIES) $(EXTRA_test_cloexec_DEPENDENCIES) @rm -f test-cloexec$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_cloexec_OBJECTS) $(test_cloexec_LDADD) $(LIBS) test-close$(EXEEXT): $(test_close_OBJECTS) $(test_close_DEPENDENCIES) $(EXTRA_test_close_DEPENDENCIES) @rm -f test-close$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_close_OBJECTS) $(test_close_LDADD) $(LIBS) test-connect$(EXEEXT): $(test_connect_OBJECTS) $(test_connect_DEPENDENCIES) $(EXTRA_test_connect_DEPENDENCIES) @rm -f test-connect$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_connect_OBJECTS) $(test_connect_LDADD) $(LIBS) test-creat$(EXEEXT): $(test_creat_OBJECTS) $(test_creat_DEPENDENCIES) $(EXTRA_test_creat_DEPENDENCIES) @rm -f test-creat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_creat_OBJECTS) $(test_creat_LDADD) $(LIBS) test-ctype$(EXEEXT): $(test_ctype_OBJECTS) $(test_ctype_DEPENDENCIES) $(EXTRA_test_ctype_DEPENDENCIES) @rm -f test-ctype$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_OBJECTS) $(test_ctype_LDADD) $(LIBS) unictype/$(am__dirstamp): @$(MKDIR_P) unictype @: > unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) unictype/$(DEPDIR) @: > unictype/$(DEPDIR)/$(am__dirstamp) unictype/test-ctype_alnum.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) test-ctype_alnum$(EXEEXT): $(test_ctype_alnum_OBJECTS) $(test_ctype_alnum_DEPENDENCIES) $(EXTRA_test_ctype_alnum_DEPENDENCIES) @rm -f test-ctype_alnum$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_alnum_OBJECTS) $(test_ctype_alnum_LDADD) $(LIBS) unictype/test-ctype_alpha.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) test-ctype_alpha$(EXEEXT): $(test_ctype_alpha_OBJECTS) $(test_ctype_alpha_DEPENDENCIES) $(EXTRA_test_ctype_alpha_DEPENDENCIES) @rm -f test-ctype_alpha$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_alpha_OBJECTS) $(test_ctype_alpha_LDADD) $(LIBS) unictype/test-ctype_blank.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) test-ctype_blank$(EXEEXT): $(test_ctype_blank_OBJECTS) $(test_ctype_blank_DEPENDENCIES) $(EXTRA_test_ctype_blank_DEPENDENCIES) @rm -f test-ctype_blank$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_blank_OBJECTS) $(test_ctype_blank_LDADD) $(LIBS) unictype/test-ctype_cntrl.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) test-ctype_cntrl$(EXEEXT): $(test_ctype_cntrl_OBJECTS) $(test_ctype_cntrl_DEPENDENCIES) $(EXTRA_test_ctype_cntrl_DEPENDENCIES) @rm -f test-ctype_cntrl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_cntrl_OBJECTS) $(test_ctype_cntrl_LDADD) $(LIBS) unictype/test-ctype_digit.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) test-ctype_digit$(EXEEXT): $(test_ctype_digit_OBJECTS) $(test_ctype_digit_DEPENDENCIES) $(EXTRA_test_ctype_digit_DEPENDENCIES) @rm -f test-ctype_digit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_digit_OBJECTS) $(test_ctype_digit_LDADD) $(LIBS) unictype/test-ctype_graph.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) test-ctype_graph$(EXEEXT): $(test_ctype_graph_OBJECTS) $(test_ctype_graph_DEPENDENCIES) $(EXTRA_test_ctype_graph_DEPENDENCIES) @rm -f test-ctype_graph$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_graph_OBJECTS) $(test_ctype_graph_LDADD) $(LIBS) unictype/test-ctype_lower.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) test-ctype_lower$(EXEEXT): $(test_ctype_lower_OBJECTS) $(test_ctype_lower_DEPENDENCIES) $(EXTRA_test_ctype_lower_DEPENDENCIES) @rm -f test-ctype_lower$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_lower_OBJECTS) $(test_ctype_lower_LDADD) $(LIBS) unictype/test-ctype_print.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) test-ctype_print$(EXEEXT): $(test_ctype_print_OBJECTS) $(test_ctype_print_DEPENDENCIES) $(EXTRA_test_ctype_print_DEPENDENCIES) @rm -f test-ctype_print$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_print_OBJECTS) $(test_ctype_print_LDADD) $(LIBS) unictype/test-ctype_punct.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) test-ctype_punct$(EXEEXT): $(test_ctype_punct_OBJECTS) $(test_ctype_punct_DEPENDENCIES) $(EXTRA_test_ctype_punct_DEPENDENCIES) @rm -f test-ctype_punct$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_punct_OBJECTS) $(test_ctype_punct_LDADD) $(LIBS) unictype/test-ctype_space.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) test-ctype_space$(EXEEXT): $(test_ctype_space_OBJECTS) $(test_ctype_space_DEPENDENCIES) $(EXTRA_test_ctype_space_DEPENDENCIES) @rm -f test-ctype_space$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_space_OBJECTS) $(test_ctype_space_LDADD) $(LIBS) unictype/test-ctype_upper.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) test-ctype_upper$(EXEEXT): $(test_ctype_upper_OBJECTS) $(test_ctype_upper_DEPENDENCIES) $(EXTRA_test_ctype_upper_DEPENDENCIES) @rm -f test-ctype_upper$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_upper_OBJECTS) $(test_ctype_upper_LDADD) $(LIBS) unictype/test-ctype_xdigit.$(OBJEXT): unictype/$(am__dirstamp) \ unictype/$(DEPDIR)/$(am__dirstamp) test-ctype_xdigit$(EXEEXT): $(test_ctype_xdigit_OBJECTS) $(test_ctype_xdigit_DEPENDENCIES) $(EXTRA_test_ctype_xdigit_DEPENDENCIES) @rm -f test-ctype_xdigit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ctype_xdigit_OBJECTS) $(test_ctype_xdigit_LDADD) $(LIBS) test-dirent$(EXEEXT): $(test_dirent_OBJECTS) $(test_dirent_DEPENDENCIES) $(EXTRA_test_dirent_DEPENDENCIES) @rm -f test-dirent$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_dirent_OBJECTS) $(test_dirent_LDADD) $(LIBS) test-dirfd$(EXEEXT): $(test_dirfd_OBJECTS) $(test_dirfd_DEPENDENCIES) $(EXTRA_test_dirfd_DEPENDENCIES) @rm -f test-dirfd$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_dirfd_OBJECTS) $(test_dirfd_LDADD) $(LIBS) test-dup$(EXEEXT): $(test_dup_OBJECTS) $(test_dup_DEPENDENCIES) $(EXTRA_test_dup_DEPENDENCIES) @rm -f test-dup$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_dup_OBJECTS) $(test_dup_LDADD) $(LIBS) test-dup-safer$(EXEEXT): $(test_dup_safer_OBJECTS) $(test_dup_safer_DEPENDENCIES) $(EXTRA_test_dup_safer_DEPENDENCIES) @rm -f test-dup-safer$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_dup_safer_OBJECTS) $(test_dup_safer_LDADD) $(LIBS) test-dup2$(EXEEXT): $(test_dup2_OBJECTS) $(test_dup2_DEPENDENCIES) $(EXTRA_test_dup2_DEPENDENCIES) @rm -f test-dup2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_dup2_OBJECTS) $(test_dup2_LDADD) $(LIBS) test-dynarray$(EXEEXT): $(test_dynarray_OBJECTS) $(test_dynarray_DEPENDENCIES) $(EXTRA_test_dynarray_DEPENDENCIES) @rm -f test-dynarray$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_dynarray_OBJECTS) $(test_dynarray_LDADD) $(LIBS) test-environ$(EXEEXT): $(test_environ_OBJECTS) $(test_environ_DEPENDENCIES) $(EXTRA_test_environ_DEPENDENCIES) @rm -f test-environ$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_environ_OBJECTS) $(test_environ_LDADD) $(LIBS) test-errno$(EXEEXT): $(test_errno_OBJECTS) $(test_errno_DEPENDENCIES) $(EXTRA_test_errno_DEPENDENCIES) @rm -f test-errno$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_errno_OBJECTS) $(test_errno_LDADD) $(LIBS) test-error$(EXEEXT): $(test_error_OBJECTS) $(test_error_DEPENDENCIES) $(EXTRA_test_error_DEPENDENCIES) @rm -f test-error$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_error_OBJECTS) $(test_error_LDADD) $(LIBS) test-euidaccess$(EXEEXT): $(test_euidaccess_OBJECTS) $(test_euidaccess_DEPENDENCIES) $(EXTRA_test_euidaccess_DEPENDENCIES) @rm -f test-euidaccess$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_euidaccess_OBJECTS) $(test_euidaccess_LDADD) $(LIBS) test-faccessat$(EXEEXT): $(test_faccessat_OBJECTS) $(test_faccessat_DEPENDENCIES) $(EXTRA_test_faccessat_DEPENDENCIES) @rm -f test-faccessat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_faccessat_OBJECTS) $(test_faccessat_LDADD) $(LIBS) test-fchdir$(EXEEXT): $(test_fchdir_OBJECTS) $(test_fchdir_DEPENDENCIES) $(EXTRA_test_fchdir_DEPENDENCIES) @rm -f test-fchdir$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fchdir_OBJECTS) $(test_fchdir_LDADD) $(LIBS) test-fcntl$(EXEEXT): $(test_fcntl_OBJECTS) $(test_fcntl_DEPENDENCIES) $(EXTRA_test_fcntl_DEPENDENCIES) @rm -f test-fcntl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fcntl_OBJECTS) $(test_fcntl_LDADD) $(LIBS) test-fcntl-h$(EXEEXT): $(test_fcntl_h_OBJECTS) $(test_fcntl_h_DEPENDENCIES) $(EXTRA_test_fcntl_h_DEPENDENCIES) @rm -f test-fcntl-h$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fcntl_h_OBJECTS) $(test_fcntl_h_LDADD) $(LIBS) test-fdopen$(EXEEXT): $(test_fdopen_OBJECTS) $(test_fdopen_DEPENDENCIES) $(EXTRA_test_fdopen_DEPENDENCIES) @rm -f test-fdopen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fdopen_OBJECTS) $(test_fdopen_LDADD) $(LIBS) test-fgetc$(EXEEXT): $(test_fgetc_OBJECTS) $(test_fgetc_DEPENDENCIES) $(EXTRA_test_fgetc_DEPENDENCIES) @rm -f test-fgetc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fgetc_OBJECTS) $(test_fgetc_LDADD) $(LIBS) test-float$(EXEEXT): $(test_float_OBJECTS) $(test_float_DEPENDENCIES) $(EXTRA_test_float_DEPENDENCIES) @rm -f test-float$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_float_OBJECTS) $(test_float_LDADD) $(LIBS) test-fputc$(EXEEXT): $(test_fputc_OBJECTS) $(test_fputc_DEPENDENCIES) $(EXTRA_test_fputc_DEPENDENCIES) @rm -f test-fputc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fputc_OBJECTS) $(test_fputc_LDADD) $(LIBS) test-fread$(EXEEXT): $(test_fread_OBJECTS) $(test_fread_DEPENDENCIES) $(EXTRA_test_fread_DEPENDENCIES) @rm -f test-fread$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fread_OBJECTS) $(test_fread_LDADD) $(LIBS) test-free$(EXEEXT): $(test_free_OBJECTS) $(test_free_DEPENDENCIES) $(EXTRA_test_free_DEPENDENCIES) @rm -f test-free$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_free_OBJECTS) $(test_free_LDADD) $(LIBS) test-fstat$(EXEEXT): $(test_fstat_OBJECTS) $(test_fstat_DEPENDENCIES) $(EXTRA_test_fstat_DEPENDENCIES) @rm -f test-fstat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fstat_OBJECTS) $(test_fstat_LDADD) $(LIBS) test-fstatat$(EXEEXT): $(test_fstatat_OBJECTS) $(test_fstatat_DEPENDENCIES) $(EXTRA_test_fstatat_DEPENDENCIES) @rm -f test-fstatat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fstatat_OBJECTS) $(test_fstatat_LDADD) $(LIBS) test-ftruncate$(EXEEXT): $(test_ftruncate_OBJECTS) $(test_ftruncate_DEPENDENCIES) $(EXTRA_test_ftruncate_DEPENDENCIES) @rm -f test-ftruncate$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ftruncate_OBJECTS) $(test_ftruncate_LDADD) $(LIBS) test-func$(EXEEXT): $(test_func_OBJECTS) $(test_func_DEPENDENCIES) $(EXTRA_test_func_DEPENDENCIES) @rm -f test-func$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_func_OBJECTS) $(test_func_LDADD) $(LIBS) test-fwrite$(EXEEXT): $(test_fwrite_OBJECTS) $(test_fwrite_DEPENDENCIES) $(EXTRA_test_fwrite_DEPENDENCIES) @rm -f test-fwrite$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fwrite_OBJECTS) $(test_fwrite_LDADD) $(LIBS) test-getcwd-lgpl$(EXEEXT): $(test_getcwd_lgpl_OBJECTS) $(test_getcwd_lgpl_DEPENDENCIES) $(EXTRA_test_getcwd_lgpl_DEPENDENCIES) @rm -f test-getcwd-lgpl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getcwd_lgpl_OBJECTS) $(test_getcwd_lgpl_LDADD) $(LIBS) test-getdelim$(EXEEXT): $(test_getdelim_OBJECTS) $(test_getdelim_DEPENDENCIES) $(EXTRA_test_getdelim_DEPENDENCIES) @rm -f test-getdelim$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getdelim_OBJECTS) $(test_getdelim_LDADD) $(LIBS) test-getdtablesize$(EXEEXT): $(test_getdtablesize_OBJECTS) $(test_getdtablesize_DEPENDENCIES) $(EXTRA_test_getdtablesize_DEPENDENCIES) @rm -f test-getdtablesize$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getdtablesize_OBJECTS) $(test_getdtablesize_LDADD) $(LIBS) test-getgroups$(EXEEXT): $(test_getgroups_OBJECTS) $(test_getgroups_DEPENDENCIES) $(EXTRA_test_getgroups_DEPENDENCIES) @rm -f test-getgroups$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getgroups_OBJECTS) $(test_getgroups_LDADD) $(LIBS) test-getline$(EXEEXT): $(test_getline_OBJECTS) $(test_getline_DEPENDENCIES) $(EXTRA_test_getline_DEPENDENCIES) @rm -f test-getline$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getline_OBJECTS) $(test_getline_LDADD) $(LIBS) test-getopt-gnu$(EXEEXT): $(test_getopt_gnu_OBJECTS) $(test_getopt_gnu_DEPENDENCIES) $(EXTRA_test_getopt_gnu_DEPENDENCIES) @rm -f test-getopt-gnu$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getopt_gnu_OBJECTS) $(test_getopt_gnu_LDADD) $(LIBS) test-getopt-posix$(EXEEXT): $(test_getopt_posix_OBJECTS) $(test_getopt_posix_DEPENDENCIES) $(EXTRA_test_getopt_posix_DEPENDENCIES) @rm -f test-getopt-posix$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getopt_posix_OBJECTS) $(test_getopt_posix_LDADD) $(LIBS) test-getprogname$(EXEEXT): $(test_getprogname_OBJECTS) $(test_getprogname_DEPENDENCIES) $(EXTRA_test_getprogname_DEPENDENCIES) @rm -f test-getprogname$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_getprogname_OBJECTS) $(test_getprogname_LDADD) $(LIBS) test-gettimeofday$(EXEEXT): $(test_gettimeofday_OBJECTS) $(test_gettimeofday_DEPENDENCIES) $(EXTRA_test_gettimeofday_DEPENDENCIES) @rm -f test-gettimeofday$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_gettimeofday_OBJECTS) $(test_gettimeofday_LDADD) $(LIBS) test-hard-locale$(EXEEXT): $(test_hard_locale_OBJECTS) $(test_hard_locale_DEPENDENCIES) $(EXTRA_test_hard_locale_DEPENDENCIES) @rm -f test-hard-locale$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_hard_locale_OBJECTS) $(test_hard_locale_LDADD) $(LIBS) test-ignore-value$(EXEEXT): $(test_ignore_value_OBJECTS) $(test_ignore_value_DEPENDENCIES) $(EXTRA_test_ignore_value_DEPENDENCIES) @rm -f test-ignore-value$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ignore_value_OBJECTS) $(test_ignore_value_LDADD) $(LIBS) test-inet_pton$(EXEEXT): $(test_inet_pton_OBJECTS) $(test_inet_pton_DEPENDENCIES) $(EXTRA_test_inet_pton_DEPENDENCIES) @rm -f test-inet_pton$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_inet_pton_OBJECTS) $(test_inet_pton_LDADD) $(LIBS) test-intprops$(EXEEXT): $(test_intprops_OBJECTS) $(test_intprops_DEPENDENCIES) $(EXTRA_test_intprops_DEPENDENCIES) @rm -f test-intprops$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_intprops_OBJECTS) $(test_intprops_LDADD) $(LIBS) test-inttypes$(EXEEXT): $(test_inttypes_OBJECTS) $(test_inttypes_DEPENDENCIES) $(EXTRA_test_inttypes_DEPENDENCIES) @rm -f test-inttypes$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_inttypes_OBJECTS) $(test_inttypes_LDADD) $(LIBS) test-ioctl$(EXEEXT): $(test_ioctl_OBJECTS) $(test_ioctl_DEPENDENCIES) $(EXTRA_test_ioctl_DEPENDENCIES) @rm -f test-ioctl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ioctl_OBJECTS) $(test_ioctl_LDADD) $(LIBS) test-isblank$(EXEEXT): $(test_isblank_OBJECTS) $(test_isblank_DEPENDENCIES) $(EXTRA_test_isblank_DEPENDENCIES) @rm -f test-isblank$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_isblank_OBJECTS) $(test_isblank_LDADD) $(LIBS) test-isnand-nolibm$(EXEEXT): $(test_isnand_nolibm_OBJECTS) $(test_isnand_nolibm_DEPENDENCIES) $(EXTRA_test_isnand_nolibm_DEPENDENCIES) @rm -f test-isnand-nolibm$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_isnand_nolibm_OBJECTS) $(test_isnand_nolibm_LDADD) $(LIBS) test-isnanf-nolibm$(EXEEXT): $(test_isnanf_nolibm_OBJECTS) $(test_isnanf_nolibm_DEPENDENCIES) $(EXTRA_test_isnanf_nolibm_DEPENDENCIES) @rm -f test-isnanf-nolibm$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_isnanf_nolibm_OBJECTS) $(test_isnanf_nolibm_LDADD) $(LIBS) test-isnanl-nolibm$(EXEEXT): $(test_isnanl_nolibm_OBJECTS) $(test_isnanl_nolibm_DEPENDENCIES) $(EXTRA_test_isnanl_nolibm_DEPENDENCIES) @rm -f test-isnanl-nolibm$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_isnanl_nolibm_OBJECTS) $(test_isnanl_nolibm_LDADD) $(LIBS) test-iswblank$(EXEEXT): $(test_iswblank_OBJECTS) $(test_iswblank_DEPENDENCIES) $(EXTRA_test_iswblank_DEPENDENCIES) @rm -f test-iswblank$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_iswblank_OBJECTS) $(test_iswblank_LDADD) $(LIBS) test-iswctype$(EXEEXT): $(test_iswctype_OBJECTS) $(test_iswctype_DEPENDENCIES) $(EXTRA_test_iswctype_DEPENDENCIES) @rm -f test-iswctype$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_iswctype_OBJECTS) $(test_iswctype_LDADD) $(LIBS) test-iswdigit$(EXEEXT): $(test_iswdigit_OBJECTS) $(test_iswdigit_DEPENDENCIES) $(EXTRA_test_iswdigit_DEPENDENCIES) @rm -f test-iswdigit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_iswdigit_OBJECTS) $(test_iswdigit_LDADD) $(LIBS) test-iswpunct$(EXEEXT): $(test_iswpunct_OBJECTS) $(test_iswpunct_DEPENDENCIES) $(EXTRA_test_iswpunct_DEPENDENCIES) @rm -f test-iswpunct$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_iswpunct_OBJECTS) $(test_iswpunct_LDADD) $(LIBS) test-iswxdigit$(EXEEXT): $(test_iswxdigit_OBJECTS) $(test_iswxdigit_DEPENDENCIES) $(EXTRA_test_iswxdigit_DEPENDENCIES) @rm -f test-iswxdigit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_iswxdigit_OBJECTS) $(test_iswxdigit_LDADD) $(LIBS) test-langinfo$(EXEEXT): $(test_langinfo_OBJECTS) $(test_langinfo_DEPENDENCIES) $(EXTRA_test_langinfo_DEPENDENCIES) @rm -f test-langinfo$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_langinfo_OBJECTS) $(test_langinfo_LDADD) $(LIBS) test-largefile$(EXEEXT): $(test_largefile_OBJECTS) $(test_largefile_DEPENDENCIES) $(EXTRA_test_largefile_DEPENDENCIES) @rm -f test-largefile$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_largefile_OBJECTS) $(test_largefile_LDADD) $(LIBS) test-limits-h$(EXEEXT): $(test_limits_h_OBJECTS) $(test_limits_h_DEPENDENCIES) $(EXTRA_test_limits_h_DEPENDENCIES) @rm -f test-limits-h$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_limits_h_OBJECTS) $(test_limits_h_LDADD) $(LIBS) test-listen$(EXEEXT): $(test_listen_OBJECTS) $(test_listen_DEPENDENCIES) $(EXTRA_test_listen_DEPENDENCIES) @rm -f test-listen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_listen_OBJECTS) $(test_listen_LDADD) $(LIBS) test-localcharset$(EXEEXT): $(test_localcharset_OBJECTS) $(test_localcharset_DEPENDENCIES) $(EXTRA_test_localcharset_DEPENDENCIES) @rm -f test-localcharset$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_localcharset_OBJECTS) $(test_localcharset_LDADD) $(LIBS) test-locale$(EXEEXT): $(test_locale_OBJECTS) $(test_locale_DEPENDENCIES) $(EXTRA_test_locale_DEPENDENCIES) @rm -f test-locale$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_locale_OBJECTS) $(test_locale_LDADD) $(LIBS) test-localeconv$(EXEEXT): $(test_localeconv_OBJECTS) $(test_localeconv_DEPENDENCIES) $(EXTRA_test_localeconv_DEPENDENCIES) @rm -f test-localeconv$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_localeconv_OBJECTS) $(test_localeconv_LDADD) $(LIBS) test-localename$(EXEEXT): $(test_localename_OBJECTS) $(test_localename_DEPENDENCIES) $(EXTRA_test_localename_DEPENDENCIES) @rm -f test-localename$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_localename_OBJECTS) $(test_localename_LDADD) $(LIBS) test-lock$(EXEEXT): $(test_lock_OBJECTS) $(test_lock_DEPENDENCIES) $(EXTRA_test_lock_DEPENDENCIES) @rm -f test-lock$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_lock_OBJECTS) $(test_lock_LDADD) $(LIBS) test-lstat$(EXEEXT): $(test_lstat_OBJECTS) $(test_lstat_DEPENDENCIES) $(EXTRA_test_lstat_DEPENDENCIES) @rm -f test-lstat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_lstat_OBJECTS) $(test_lstat_LDADD) $(LIBS) test-malloc-gnu$(EXEEXT): $(test_malloc_gnu_OBJECTS) $(test_malloc_gnu_DEPENDENCIES) $(EXTRA_test_malloc_gnu_DEPENDENCIES) @rm -f test-malloc-gnu$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_malloc_gnu_OBJECTS) $(test_malloc_gnu_LDADD) $(LIBS) test-malloca$(EXEEXT): $(test_malloca_OBJECTS) $(test_malloca_DEPENDENCIES) $(EXTRA_test_malloca_DEPENDENCIES) @rm -f test-malloca$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_malloca_OBJECTS) $(test_malloca_LDADD) $(LIBS) test-math$(EXEEXT): $(test_math_OBJECTS) $(test_math_DEPENDENCIES) $(EXTRA_test_math_DEPENDENCIES) @rm -f test-math$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_math_OBJECTS) $(test_math_LDADD) $(LIBS) test-mbrtoc32$(EXEEXT): $(test_mbrtoc32_OBJECTS) $(test_mbrtoc32_DEPENDENCIES) $(EXTRA_test_mbrtoc32_DEPENDENCIES) @rm -f test-mbrtoc32$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbrtoc32_OBJECTS) $(test_mbrtoc32_LDADD) $(LIBS) test-mbrtoc32-w32$(EXEEXT): $(test_mbrtoc32_w32_OBJECTS) $(test_mbrtoc32_w32_DEPENDENCIES) $(EXTRA_test_mbrtoc32_w32_DEPENDENCIES) @rm -f test-mbrtoc32-w32$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbrtoc32_w32_OBJECTS) $(test_mbrtoc32_w32_LDADD) $(LIBS) test-mbrtowc$(EXEEXT): $(test_mbrtowc_OBJECTS) $(test_mbrtowc_DEPENDENCIES) $(EXTRA_test_mbrtowc_DEPENDENCIES) @rm -f test-mbrtowc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbrtowc_OBJECTS) $(test_mbrtowc_LDADD) $(LIBS) test-mbrtowc-w32$(EXEEXT): $(test_mbrtowc_w32_OBJECTS) $(test_mbrtowc_w32_DEPENDENCIES) $(EXTRA_test_mbrtowc_w32_DEPENDENCIES) @rm -f test-mbrtowc-w32$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbrtowc_w32_OBJECTS) $(test_mbrtowc_w32_LDADD) $(LIBS) test-mbschr$(EXEEXT): $(test_mbschr_OBJECTS) $(test_mbschr_DEPENDENCIES) $(EXTRA_test_mbschr_DEPENDENCIES) @rm -f test-mbschr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbschr_OBJECTS) $(test_mbschr_LDADD) $(LIBS) test-mbsinit$(EXEEXT): $(test_mbsinit_OBJECTS) $(test_mbsinit_DEPENDENCIES) $(EXTRA_test_mbsinit_DEPENDENCIES) @rm -f test-mbsinit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbsinit_OBJECTS) $(test_mbsinit_LDADD) $(LIBS) test-mbspbrk$(EXEEXT): $(test_mbspbrk_OBJECTS) $(test_mbspbrk_DEPENDENCIES) $(EXTRA_test_mbspbrk_DEPENDENCIES) @rm -f test-mbspbrk$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbspbrk_OBJECTS) $(test_mbspbrk_LDADD) $(LIBS) test-mbsspn$(EXEEXT): $(test_mbsspn_OBJECTS) $(test_mbsspn_DEPENDENCIES) $(EXTRA_test_mbsspn_DEPENDENCIES) @rm -f test-mbsspn$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mbsspn_OBJECTS) $(test_mbsspn_LDADD) $(LIBS) test-memchr$(EXEEXT): $(test_memchr_OBJECTS) $(test_memchr_DEPENDENCIES) $(EXTRA_test_memchr_DEPENDENCIES) @rm -f test-memchr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_memchr_OBJECTS) $(test_memchr_LDADD) $(LIBS) test-memrchr$(EXEEXT): $(test_memrchr_OBJECTS) $(test_memrchr_DEPENDENCIES) $(EXTRA_test_memrchr_DEPENDENCIES) @rm -f test-memrchr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_memrchr_OBJECTS) $(test_memrchr_LDADD) $(LIBS) test-nanosleep$(EXEEXT): $(test_nanosleep_OBJECTS) $(test_nanosleep_DEPENDENCIES) $(EXTRA_test_nanosleep_DEPENDENCIES) @rm -f test-nanosleep$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_nanosleep_OBJECTS) $(test_nanosleep_LDADD) $(LIBS) test-netinet_in$(EXEEXT): $(test_netinet_in_OBJECTS) $(test_netinet_in_DEPENDENCIES) $(EXTRA_test_netinet_in_DEPENDENCIES) @rm -f test-netinet_in$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_netinet_in_OBJECTS) $(test_netinet_in_LDADD) $(LIBS) test-nl_langinfo-mt$(EXEEXT): $(test_nl_langinfo_mt_OBJECTS) $(test_nl_langinfo_mt_DEPENDENCIES) $(EXTRA_test_nl_langinfo_mt_DEPENDENCIES) @rm -f test-nl_langinfo-mt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_nl_langinfo_mt_OBJECTS) $(test_nl_langinfo_mt_LDADD) $(LIBS) test-nl_langinfo1$(EXEEXT): $(test_nl_langinfo1_OBJECTS) $(test_nl_langinfo1_DEPENDENCIES) $(EXTRA_test_nl_langinfo1_DEPENDENCIES) @rm -f test-nl_langinfo1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_nl_langinfo1_OBJECTS) $(test_nl_langinfo1_LDADD) $(LIBS) test-nl_langinfo2$(EXEEXT): $(test_nl_langinfo2_OBJECTS) $(test_nl_langinfo2_DEPENDENCIES) $(EXTRA_test_nl_langinfo2_DEPENDENCIES) @rm -f test-nl_langinfo2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_nl_langinfo2_OBJECTS) $(test_nl_langinfo2_LDADD) $(LIBS) test-once1$(EXEEXT): $(test_once1_OBJECTS) $(test_once1_DEPENDENCIES) $(EXTRA_test_once1_DEPENDENCIES) @rm -f test-once1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_once1_OBJECTS) $(test_once1_LDADD) $(LIBS) test-once2$(EXEEXT): $(test_once2_OBJECTS) $(test_once2_DEPENDENCIES) $(EXTRA_test_once2_DEPENDENCIES) @rm -f test-once2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_once2_OBJECTS) $(test_once2_LDADD) $(LIBS) test-open$(EXEEXT): $(test_open_OBJECTS) $(test_open_DEPENDENCIES) $(EXTRA_test_open_DEPENDENCIES) @rm -f test-open$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_open_OBJECTS) $(test_open_LDADD) $(LIBS) test-openat$(EXEEXT): $(test_openat_OBJECTS) $(test_openat_DEPENDENCIES) $(EXTRA_test_openat_DEPENDENCIES) @rm -f test-openat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_openat_OBJECTS) $(test_openat_LDADD) $(LIBS) test-pathmax$(EXEEXT): $(test_pathmax_OBJECTS) $(test_pathmax_DEPENDENCIES) $(EXTRA_test_pathmax_DEPENDENCIES) @rm -f test-pathmax$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pathmax_OBJECTS) $(test_pathmax_LDADD) $(LIBS) test-perror$(EXEEXT): $(test_perror_OBJECTS) $(test_perror_DEPENDENCIES) $(EXTRA_test_perror_DEPENDENCIES) @rm -f test-perror$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_perror_OBJECTS) $(test_perror_LDADD) $(LIBS) test-perror2$(EXEEXT): $(test_perror2_OBJECTS) $(test_perror2_DEPENDENCIES) $(EXTRA_test_perror2_DEPENDENCIES) @rm -f test-perror2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_perror2_OBJECTS) $(test_perror2_LDADD) $(LIBS) test-pipe$(EXEEXT): $(test_pipe_OBJECTS) $(test_pipe_DEPENDENCIES) $(EXTRA_test_pipe_DEPENDENCIES) @rm -f test-pipe$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pipe_OBJECTS) $(test_pipe_LDADD) $(LIBS) test-pselect$(EXEEXT): $(test_pselect_OBJECTS) $(test_pselect_DEPENDENCIES) $(EXTRA_test_pselect_DEPENDENCIES) @rm -f test-pselect$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pselect_OBJECTS) $(test_pselect_LDADD) $(LIBS) test-pthread$(EXEEXT): $(test_pthread_OBJECTS) $(test_pthread_DEPENDENCIES) $(EXTRA_test_pthread_DEPENDENCIES) @rm -f test-pthread$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pthread_OBJECTS) $(test_pthread_LDADD) $(LIBS) test-pthread-thread$(EXEEXT): $(test_pthread_thread_OBJECTS) $(test_pthread_thread_DEPENDENCIES) $(EXTRA_test_pthread_thread_DEPENDENCIES) @rm -f test-pthread-thread$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pthread_thread_OBJECTS) $(test_pthread_thread_LDADD) $(LIBS) test-pthread_sigmask1$(EXEEXT): $(test_pthread_sigmask1_OBJECTS) $(test_pthread_sigmask1_DEPENDENCIES) $(EXTRA_test_pthread_sigmask1_DEPENDENCIES) @rm -f test-pthread_sigmask1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pthread_sigmask1_OBJECTS) $(test_pthread_sigmask1_LDADD) $(LIBS) test-pthread_sigmask2$(EXEEXT): $(test_pthread_sigmask2_OBJECTS) $(test_pthread_sigmask2_DEPENDENCIES) $(EXTRA_test_pthread_sigmask2_DEPENDENCIES) @rm -f test-pthread_sigmask2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pthread_sigmask2_OBJECTS) $(test_pthread_sigmask2_LDADD) $(LIBS) test-raise$(EXEEXT): $(test_raise_OBJECTS) $(test_raise_DEPENDENCIES) $(EXTRA_test_raise_DEPENDENCIES) @rm -f test-raise$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_raise_OBJECTS) $(test_raise_LDADD) $(LIBS) test-random$(EXEEXT): $(test_random_OBJECTS) $(test_random_DEPENDENCIES) $(EXTRA_test_random_DEPENDENCIES) @rm -f test-random$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_random_OBJECTS) $(test_random_LDADD) $(LIBS) test-random-mt$(EXEEXT): $(test_random_mt_OBJECTS) $(test_random_mt_DEPENDENCIES) $(EXTRA_test_random_mt_DEPENDENCIES) @rm -f test-random-mt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_random_mt_OBJECTS) $(test_random_mt_LDADD) $(LIBS) test-random_r$(EXEEXT): $(test_random_r_OBJECTS) $(test_random_r_DEPENDENCIES) $(EXTRA_test_random_r_DEPENDENCIES) @rm -f test-random_r$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_random_r_OBJECTS) $(test_random_r_LDADD) $(LIBS) test-rawmemchr$(EXEEXT): $(test_rawmemchr_OBJECTS) $(test_rawmemchr_DEPENDENCIES) $(EXTRA_test_rawmemchr_DEPENDENCIES) @rm -f test-rawmemchr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_rawmemchr_OBJECTS) $(test_rawmemchr_LDADD) $(LIBS) test-realloc-gnu$(EXEEXT): $(test_realloc_gnu_OBJECTS) $(test_realloc_gnu_DEPENDENCIES) $(EXTRA_test_realloc_gnu_DEPENDENCIES) @rm -f test-realloc-gnu$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_realloc_gnu_OBJECTS) $(test_realloc_gnu_LDADD) $(LIBS) test-reallocarray$(EXEEXT): $(test_reallocarray_OBJECTS) $(test_reallocarray_DEPENDENCIES) $(EXTRA_test_reallocarray_DEPENDENCIES) @rm -f test-reallocarray$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_reallocarray_OBJECTS) $(test_reallocarray_LDADD) $(LIBS) test-regex$(EXEEXT): $(test_regex_OBJECTS) $(test_regex_DEPENDENCIES) $(EXTRA_test_regex_DEPENDENCIES) @rm -f test-regex$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_regex_OBJECTS) $(test_regex_LDADD) $(LIBS) test-rwlock1$(EXEEXT): $(test_rwlock1_OBJECTS) $(test_rwlock1_DEPENDENCIES) $(EXTRA_test_rwlock1_DEPENDENCIES) @rm -f test-rwlock1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_rwlock1_OBJECTS) $(test_rwlock1_LDADD) $(LIBS) test-sched$(EXEEXT): $(test_sched_OBJECTS) $(test_sched_DEPENDENCIES) $(EXTRA_test_sched_DEPENDENCIES) @rm -f test-sched$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sched_OBJECTS) $(test_sched_LDADD) $(LIBS) test-select$(EXEEXT): $(test_select_OBJECTS) $(test_select_DEPENDENCIES) $(EXTRA_test_select_DEPENDENCIES) @rm -f test-select$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_select_OBJECTS) $(test_select_LDADD) $(LIBS) test-select-fd$(EXEEXT): $(test_select_fd_OBJECTS) $(test_select_fd_DEPENDENCIES) $(EXTRA_test_select_fd_DEPENDENCIES) @rm -f test-select-fd$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_select_fd_OBJECTS) $(test_select_fd_LDADD) $(LIBS) test-select-stdin$(EXEEXT): $(test_select_stdin_OBJECTS) $(test_select_stdin_DEPENDENCIES) $(EXTRA_test_select_stdin_DEPENDENCIES) @rm -f test-select-stdin$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_select_stdin_OBJECTS) $(test_select_stdin_LDADD) $(LIBS) test-setenv$(EXEEXT): $(test_setenv_OBJECTS) $(test_setenv_DEPENDENCIES) $(EXTRA_test_setenv_DEPENDENCIES) @rm -f test-setenv$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_setenv_OBJECTS) $(test_setenv_LDADD) $(LIBS) test-setlocale1$(EXEEXT): $(test_setlocale1_OBJECTS) $(test_setlocale1_DEPENDENCIES) $(EXTRA_test_setlocale1_DEPENDENCIES) @rm -f test-setlocale1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_setlocale1_OBJECTS) $(test_setlocale1_LDADD) $(LIBS) test-setlocale2$(EXEEXT): $(test_setlocale2_OBJECTS) $(test_setlocale2_DEPENDENCIES) $(EXTRA_test_setlocale2_DEPENDENCIES) @rm -f test-setlocale2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_setlocale2_OBJECTS) $(test_setlocale2_LDADD) $(LIBS) test-setlocale_null$(EXEEXT): $(test_setlocale_null_OBJECTS) $(test_setlocale_null_DEPENDENCIES) $(EXTRA_test_setlocale_null_DEPENDENCIES) @rm -f test-setlocale_null$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_setlocale_null_OBJECTS) $(test_setlocale_null_LDADD) $(LIBS) test-setlocale_null-mt-all$(EXEEXT): $(test_setlocale_null_mt_all_OBJECTS) $(test_setlocale_null_mt_all_DEPENDENCIES) $(EXTRA_test_setlocale_null_mt_all_DEPENDENCIES) @rm -f test-setlocale_null-mt-all$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_setlocale_null_mt_all_OBJECTS) $(test_setlocale_null_mt_all_LDADD) $(LIBS) test-setlocale_null-mt-one$(EXEEXT): $(test_setlocale_null_mt_one_OBJECTS) $(test_setlocale_null_mt_one_DEPENDENCIES) $(EXTRA_test_setlocale_null_mt_one_DEPENDENCIES) @rm -f test-setlocale_null-mt-one$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_setlocale_null_mt_one_OBJECTS) $(test_setlocale_null_mt_one_LDADD) $(LIBS) test-setsockopt$(EXEEXT): $(test_setsockopt_OBJECTS) $(test_setsockopt_DEPENDENCIES) $(EXTRA_test_setsockopt_DEPENDENCIES) @rm -f test-setsockopt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_setsockopt_OBJECTS) $(test_setsockopt_LDADD) $(LIBS) test-signal-h$(EXEEXT): $(test_signal_h_OBJECTS) $(test_signal_h_DEPENDENCIES) $(EXTRA_test_signal_h_DEPENDENCIES) @rm -f test-signal-h$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_signal_h_OBJECTS) $(test_signal_h_LDADD) $(LIBS) test-signbit$(EXEEXT): $(test_signbit_OBJECTS) $(test_signbit_DEPENDENCIES) $(EXTRA_test_signbit_DEPENDENCIES) @rm -f test-signbit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_signbit_OBJECTS) $(test_signbit_LDADD) $(LIBS) test-sigprocmask$(EXEEXT): $(test_sigprocmask_OBJECTS) $(test_sigprocmask_DEPENDENCIES) $(EXTRA_test_sigprocmask_DEPENDENCIES) @rm -f test-sigprocmask$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sigprocmask_OBJECTS) $(test_sigprocmask_LDADD) $(LIBS) test-sleep$(EXEEXT): $(test_sleep_OBJECTS) $(test_sleep_DEPENDENCIES) $(EXTRA_test_sleep_DEPENDENCIES) @rm -f test-sleep$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sleep_OBJECTS) $(test_sleep_LDADD) $(LIBS) test-sockets$(EXEEXT): $(test_sockets_OBJECTS) $(test_sockets_DEPENDENCIES) $(EXTRA_test_sockets_DEPENDENCIES) @rm -f test-sockets$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sockets_OBJECTS) $(test_sockets_LDADD) $(LIBS) test-stat$(EXEEXT): $(test_stat_OBJECTS) $(test_stat_DEPENDENCIES) $(EXTRA_test_stat_DEPENDENCIES) @rm -f test-stat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stat_OBJECTS) $(test_stat_LDADD) $(LIBS) test-stat-time$(EXEEXT): $(test_stat_time_OBJECTS) $(test_stat_time_DEPENDENCIES) $(EXTRA_test_stat_time_DEPENDENCIES) @rm -f test-stat-time$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stat_time_OBJECTS) $(test_stat_time_LDADD) $(LIBS) test-stdbool$(EXEEXT): $(test_stdbool_OBJECTS) $(test_stdbool_DEPENDENCIES) $(EXTRA_test_stdbool_DEPENDENCIES) @rm -f test-stdbool$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stdbool_OBJECTS) $(test_stdbool_LDADD) $(LIBS) test-stdckdint$(EXEEXT): $(test_stdckdint_OBJECTS) $(test_stdckdint_DEPENDENCIES) $(EXTRA_test_stdckdint_DEPENDENCIES) @rm -f test-stdckdint$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stdckdint_OBJECTS) $(test_stdckdint_LDADD) $(LIBS) test-stddef$(EXEEXT): $(test_stddef_OBJECTS) $(test_stddef_DEPENDENCIES) $(EXTRA_test_stddef_DEPENDENCIES) @rm -f test-stddef$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stddef_OBJECTS) $(test_stddef_LDADD) $(LIBS) test-stdint$(EXEEXT): $(test_stdint_OBJECTS) $(test_stdint_DEPENDENCIES) $(EXTRA_test_stdint_DEPENDENCIES) @rm -f test-stdint$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stdint_OBJECTS) $(test_stdint_LDADD) $(LIBS) test-stdio$(EXEEXT): $(test_stdio_OBJECTS) $(test_stdio_DEPENDENCIES) $(EXTRA_test_stdio_DEPENDENCIES) @rm -f test-stdio$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stdio_OBJECTS) $(test_stdio_LDADD) $(LIBS) test-stdlib$(EXEEXT): $(test_stdlib_OBJECTS) $(test_stdlib_DEPENDENCIES) $(EXTRA_test_stdlib_DEPENDENCIES) @rm -f test-stdlib$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_stdlib_OBJECTS) $(test_stdlib_LDADD) $(LIBS) test-strchrnul$(EXEEXT): $(test_strchrnul_OBJECTS) $(test_strchrnul_DEPENDENCIES) $(EXTRA_test_strchrnul_DEPENDENCIES) @rm -f test-strchrnul$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strchrnul_OBJECTS) $(test_strchrnul_LDADD) $(LIBS) test-strerror$(EXEEXT): $(test_strerror_OBJECTS) $(test_strerror_DEPENDENCIES) $(EXTRA_test_strerror_DEPENDENCIES) @rm -f test-strerror$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strerror_OBJECTS) $(test_strerror_LDADD) $(LIBS) test-strerror_r$(EXEEXT): $(test_strerror_r_OBJECTS) $(test_strerror_r_DEPENDENCIES) $(EXTRA_test_strerror_r_DEPENDENCIES) @rm -f test-strerror_r$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strerror_r_OBJECTS) $(test_strerror_r_LDADD) $(LIBS) test-string$(EXEEXT): $(test_string_OBJECTS) $(test_string_DEPENDENCIES) $(EXTRA_test_string_DEPENDENCIES) @rm -f test-string$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_string_OBJECTS) $(test_string_LDADD) $(LIBS) test-strings$(EXEEXT): $(test_strings_OBJECTS) $(test_strings_DEPENDENCIES) $(EXTRA_test_strings_DEPENDENCIES) @rm -f test-strings$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strings_OBJECTS) $(test_strings_LDADD) $(LIBS) test-strnlen$(EXEEXT): $(test_strnlen_OBJECTS) $(test_strnlen_DEPENDENCIES) $(EXTRA_test_strnlen_DEPENDENCIES) @rm -f test-strnlen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strnlen_OBJECTS) $(test_strnlen_LDADD) $(LIBS) test-strtod$(EXEEXT): $(test_strtod_OBJECTS) $(test_strtod_DEPENDENCIES) $(EXTRA_test_strtod_DEPENDENCIES) @rm -f test-strtod$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strtod_OBJECTS) $(test_strtod_LDADD) $(LIBS) test-strtod1$(EXEEXT): $(test_strtod1_OBJECTS) $(test_strtod1_DEPENDENCIES) $(EXTRA_test_strtod1_DEPENDENCIES) @rm -f test-strtod1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_strtod1_OBJECTS) $(test_strtod1_LDADD) $(LIBS) test-symlink$(EXEEXT): $(test_symlink_OBJECTS) $(test_symlink_DEPENDENCIES) $(EXTRA_test_symlink_DEPENDENCIES) @rm -f test-symlink$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_symlink_OBJECTS) $(test_symlink_LDADD) $(LIBS) test-sys_ioctl$(EXEEXT): $(test_sys_ioctl_OBJECTS) $(test_sys_ioctl_DEPENDENCIES) $(EXTRA_test_sys_ioctl_DEPENDENCIES) @rm -f test-sys_ioctl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_ioctl_OBJECTS) $(test_sys_ioctl_LDADD) $(LIBS) test-sys_select$(EXEEXT): $(test_sys_select_OBJECTS) $(test_sys_select_DEPENDENCIES) $(EXTRA_test_sys_select_DEPENDENCIES) @rm -f test-sys_select$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_select_OBJECTS) $(test_sys_select_LDADD) $(LIBS) test-sys_socket$(EXEEXT): $(test_sys_socket_OBJECTS) $(test_sys_socket_DEPENDENCIES) $(EXTRA_test_sys_socket_DEPENDENCIES) @rm -f test-sys_socket$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_socket_OBJECTS) $(test_sys_socket_LDADD) $(LIBS) test-sys_stat$(EXEEXT): $(test_sys_stat_OBJECTS) $(test_sys_stat_DEPENDENCIES) $(EXTRA_test_sys_stat_DEPENDENCIES) @rm -f test-sys_stat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_stat_OBJECTS) $(test_sys_stat_LDADD) $(LIBS) test-sys_time$(EXEEXT): $(test_sys_time_OBJECTS) $(test_sys_time_DEPENDENCIES) $(EXTRA_test_sys_time_DEPENDENCIES) @rm -f test-sys_time$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_time_OBJECTS) $(test_sys_time_LDADD) $(LIBS) test-sys_types$(EXEEXT): $(test_sys_types_OBJECTS) $(test_sys_types_DEPENDENCIES) $(EXTRA_test_sys_types_DEPENDENCIES) @rm -f test-sys_types$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_types_OBJECTS) $(test_sys_types_LDADD) $(LIBS) test-sys_uio$(EXEEXT): $(test_sys_uio_OBJECTS) $(test_sys_uio_DEPENDENCIES) $(EXTRA_test_sys_uio_DEPENDENCIES) @rm -f test-sys_uio$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_uio_OBJECTS) $(test_sys_uio_LDADD) $(LIBS) test-sys_wait$(EXEEXT): $(test_sys_wait_OBJECTS) $(test_sys_wait_DEPENDENCIES) $(EXTRA_test_sys_wait_DEPENDENCIES) @rm -f test-sys_wait$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sys_wait_OBJECTS) $(test_sys_wait_LDADD) $(LIBS) test-sysexits$(EXEEXT): $(test_sysexits_OBJECTS) $(test_sysexits_DEPENDENCIES) $(EXTRA_test_sysexits_DEPENDENCIES) @rm -f test-sysexits$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_sysexits_OBJECTS) $(test_sysexits_LDADD) $(LIBS) test-thread_create$(EXEEXT): $(test_thread_create_OBJECTS) $(test_thread_create_DEPENDENCIES) $(EXTRA_test_thread_create_DEPENDENCIES) @rm -f test-thread_create$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_thread_create_OBJECTS) $(test_thread_create_LDADD) $(LIBS) test-thread_self$(EXEEXT): $(test_thread_self_OBJECTS) $(test_thread_self_DEPENDENCIES) $(EXTRA_test_thread_self_DEPENDENCIES) @rm -f test-thread_self$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_thread_self_OBJECTS) $(test_thread_self_LDADD) $(LIBS) test-time$(EXEEXT): $(test_time_OBJECTS) $(test_time_DEPENDENCIES) $(EXTRA_test_time_DEPENDENCIES) @rm -f test-time$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_time_OBJECTS) $(test_time_LDADD) $(LIBS) test-time-h$(EXEEXT): $(test_time_h_OBJECTS) $(test_time_h_DEPENDENCIES) $(EXTRA_test_time_h_DEPENDENCIES) @rm -f test-time-h$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_time_h_OBJECTS) $(test_time_h_LDADD) $(LIBS) unicase/$(am__dirstamp): @$(MKDIR_P) unicase @: > unicase/$(am__dirstamp) unicase/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) unicase/$(DEPDIR) @: > unicase/$(DEPDIR)/$(am__dirstamp) unicase/test-uc_tolower.$(OBJEXT): unicase/$(am__dirstamp) \ unicase/$(DEPDIR)/$(am__dirstamp) test-uc_tolower$(EXEEXT): $(test_uc_tolower_OBJECTS) $(test_uc_tolower_DEPENDENCIES) $(EXTRA_test_uc_tolower_DEPENDENCIES) @rm -f test-uc_tolower$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_uc_tolower_OBJECTS) $(test_uc_tolower_LDADD) $(LIBS) uniwidth/$(am__dirstamp): @$(MKDIR_P) uniwidth @: > uniwidth/$(am__dirstamp) uniwidth/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) uniwidth/$(DEPDIR) @: > uniwidth/$(DEPDIR)/$(am__dirstamp) uniwidth/test-uc_width.$(OBJEXT): uniwidth/$(am__dirstamp) \ uniwidth/$(DEPDIR)/$(am__dirstamp) test-uc_width$(EXEEXT): $(test_uc_width_OBJECTS) $(test_uc_width_DEPENDENCIES) $(EXTRA_test_uc_width_DEPENDENCIES) @rm -f test-uc_width$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_uc_width_OBJECTS) $(test_uc_width_LDADD) $(LIBS) uniwidth/test-uc_width2.$(OBJEXT): uniwidth/$(am__dirstamp) \ uniwidth/$(DEPDIR)/$(am__dirstamp) test-uc_width2$(EXEEXT): $(test_uc_width2_OBJECTS) $(test_uc_width2_DEPENDENCIES) $(EXTRA_test_uc_width2_DEPENDENCIES) @rm -f test-uc_width2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_uc_width2_OBJECTS) $(test_uc_width2_LDADD) $(LIBS) test-uchar$(EXEEXT): $(test_uchar_OBJECTS) $(test_uchar_DEPENDENCIES) $(EXTRA_test_uchar_DEPENDENCIES) @rm -f test-uchar$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_uchar_OBJECTS) $(test_uchar_LDADD) $(LIBS) test-unistd$(EXEEXT): $(test_unistd_OBJECTS) $(test_unistd_DEPENDENCIES) $(EXTRA_test_unistd_DEPENDENCIES) @rm -f test-unistd$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_unistd_OBJECTS) $(test_unistd_LDADD) $(LIBS) test-unsetenv$(EXEEXT): $(test_unsetenv_OBJECTS) $(test_unsetenv_DEPENDENCIES) $(EXTRA_test_unsetenv_DEPENDENCIES) @rm -f test-unsetenv$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_unsetenv_OBJECTS) $(test_unsetenv_LDADD) $(LIBS) test-usleep$(EXEEXT): $(test_usleep_OBJECTS) $(test_usleep_DEPENDENCIES) $(EXTRA_test_usleep_DEPENDENCIES) @rm -f test-usleep$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_usleep_OBJECTS) $(test_usleep_LDADD) $(LIBS) test-vasnprintf$(EXEEXT): $(test_vasnprintf_OBJECTS) $(test_vasnprintf_DEPENDENCIES) $(EXTRA_test_vasnprintf_DEPENDENCIES) @rm -f test-vasnprintf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_vasnprintf_OBJECTS) $(test_vasnprintf_LDADD) $(LIBS) test-verify$(EXEEXT): $(test_verify_OBJECTS) $(test_verify_DEPENDENCIES) $(EXTRA_test_verify_DEPENDENCIES) @rm -f test-verify$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_verify_OBJECTS) $(test_verify_LDADD) $(LIBS) test-verify-try$(EXEEXT): $(test_verify_try_OBJECTS) $(test_verify_try_DEPENDENCIES) $(EXTRA_test_verify_try_DEPENDENCIES) @rm -f test-verify-try$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_verify_try_OBJECTS) $(test_verify_try_LDADD) $(LIBS) test-vsnprintf$(EXEEXT): $(test_vsnprintf_OBJECTS) $(test_vsnprintf_DEPENDENCIES) $(EXTRA_test_vsnprintf_DEPENDENCIES) @rm -f test-vsnprintf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_vsnprintf_OBJECTS) $(test_vsnprintf_LDADD) $(LIBS) test-wchar$(EXEEXT): $(test_wchar_OBJECTS) $(test_wchar_DEPENDENCIES) $(EXTRA_test_wchar_DEPENDENCIES) @rm -f test-wchar$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_wchar_OBJECTS) $(test_wchar_LDADD) $(LIBS) test-wcrtomb$(EXEEXT): $(test_wcrtomb_OBJECTS) $(test_wcrtomb_DEPENDENCIES) $(EXTRA_test_wcrtomb_DEPENDENCIES) @rm -f test-wcrtomb$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_wcrtomb_OBJECTS) $(test_wcrtomb_LDADD) $(LIBS) test-wcrtomb-w32$(EXEEXT): $(test_wcrtomb_w32_OBJECTS) $(test_wcrtomb_w32_DEPENDENCIES) $(EXTRA_test_wcrtomb_w32_DEPENDENCIES) @rm -f test-wcrtomb-w32$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_wcrtomb_w32_OBJECTS) $(test_wcrtomb_w32_LDADD) $(LIBS) test-wctype$(EXEEXT): $(test_wctype_OBJECTS) $(test_wctype_DEPENDENCIES) $(EXTRA_test_wctype_DEPENDENCIES) @rm -f test-wctype$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_wctype_OBJECTS) $(test_wctype_LDADD) $(LIBS) test-wctype-h$(EXEEXT): $(test_wctype_h_OBJECTS) $(test_wctype_h_DEPENDENCIES) $(EXTRA_test_wctype_h_DEPENDENCIES) @rm -f test-wctype-h$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_wctype_h_OBJECTS) $(test_wctype_h_LDADD) $(LIBS) test-wcwidth$(EXEEXT): $(test_wcwidth_OBJECTS) $(test_wcwidth_DEPENDENCIES) $(EXTRA_test_wcwidth_DEPENDENCIES) @rm -f test-wcwidth$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_wcwidth_OBJECTS) $(test_wcwidth_LDADD) $(LIBS) test-xalloc-die$(EXEEXT): $(test_xalloc_die_OBJECTS) $(test_xalloc_die_DEPENDENCIES) $(EXTRA_test_xalloc_die_DEPENDENCIES) @rm -f test-xalloc-die$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_xalloc_die_OBJECTS) $(test_xalloc_die_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f glthread/*.$(OBJEXT) -rm -f unicase/*.$(OBJEXT) -rm -f unictype/*.$(OBJEXT) -rm -f uniwidth/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accept.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binary-io.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bind.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btoc32.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-strcasecmp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-strcasestr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-strncasecmp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c32rtomb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c32tob.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calloc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connect.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/creat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdopen.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftruncate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpagesize.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ialloc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet_pton.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isblank.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listen.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/locale.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localename-table.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localename.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nanosleep.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/perror.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pselect.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pthread-thread.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pthread_sigmask.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/putenv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raise.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random_r.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reallocarray.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/same-inode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sched_yield.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setlocale.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setsockopt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigprocmask.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socket.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror_r.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symlink.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-accept.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-access.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-alignasof.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-alloca-opt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-argp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-arpa_inet.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-assert.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-binary-io.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-bind.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-btoc32.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-btowc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-ctype.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-strcasecmp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-strcasestr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-strncasecmp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isalnum.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isalpha.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isblank.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32iscntrl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isdigit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isgraph.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32islower.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isprint.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32ispunct.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isspace.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isupper.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isxdigit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32rtomb-w32.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32rtomb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32tolower.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32width.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-calloc-gnu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-chdir.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cloexec.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-close.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-connect.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-creat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ctype.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dirent.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dirfd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dup-safer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dup2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dynarray.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-environ.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-errno.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-error.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-euidaccess.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-faccessat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fchdir.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fcntl-h.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fcntl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fdopen.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fgetc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-float.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fputc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fread.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-free.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fstat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fstatat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ftruncate.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-func.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fwrite.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getcwd-lgpl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getdelim.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getdtablesize.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getgroups.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getopt-gnu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getopt-posix.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getprogname.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gettimeofday.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-hard-locale.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ignore-value.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-inet_pton.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-intprops.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-inttypes.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ioctl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isblank.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnand-nolibm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnanf-nolibm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnanl-nolibm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswblank.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswctype.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswdigit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswpunct.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswxdigit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-langinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-largefile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-limits-h.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-listen.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-localcharset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-locale.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-localeconv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-localename.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-lock.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-lstat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-malloc-gnu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-malloca.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-math.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtoc32-w32.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtoc32.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtowc-w32.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtowc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbschr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbsinit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbspbrk.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbsspn.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-memchr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-memrchr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-nanosleep.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-netinet_in.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-nl_langinfo-mt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-nl_langinfo1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-nl_langinfo2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-once.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-open.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-openat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pathmax.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-perror.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-perror2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pipe.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pselect.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pthread-thread.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pthread.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pthread_sigmask1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pthread_sigmask2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-raise.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-random-mt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-random.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-random_r.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-rawmemchr.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-realloc-gnu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-reallocarray.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-regex.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-rwlock1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sched.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-select-fd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-select-stdin.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-select.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setenv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale_null-mt-all.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale_null-mt-one.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale_null.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setsockopt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-signal-h.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-signbit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sigprocmask.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sleep.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sockets.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stat-time.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdbool.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdckdint.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stddef.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdint.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdio.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdlib.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strchrnul.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strerror.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strerror_r.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-string.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strnlen.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strtod.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strtod1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-symlink.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_ioctl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_select.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_socket.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_stat.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_time.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_types.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_uio.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_wait.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sysexits.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-thread_create.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-thread_self.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-time-h.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-time.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-uchar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unistd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unsetenv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-usleep.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-vasnprintf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-verify-try.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-verify.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-vsnprintf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wchar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wcrtomb-w32.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wcrtomb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wctype-h.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wctype.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wcwidth.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-xalloc-die.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usleep.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctob.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctomb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windows-thread.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windows-tls.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xalloc-die.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/thread.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-uc_tolower.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_alnum.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_alpha.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_blank.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_cntrl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_digit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_graph.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_lower.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_print.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_punct.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_space.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_upper.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_xdigit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-uc_width.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-uc_width2.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) $(check_LIBRARIES) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) $(check_LIBRARIES) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test-accept.log: test-accept$(EXEEXT) @p='test-accept$(EXEEXT)'; \ b='test-accept'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-access.log: test-access$(EXEEXT) @p='test-access$(EXEEXT)'; \ b='test-access'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-alignasof.log: test-alignasof$(EXEEXT) @p='test-alignasof$(EXEEXT)'; \ b='test-alignasof'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-alloca-opt.log: test-alloca-opt$(EXEEXT) @p='test-alloca-opt$(EXEEXT)'; \ b='test-alloca-opt'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-argp.log: test-argp$(EXEEXT) @p='test-argp$(EXEEXT)'; \ b='test-argp'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-argp-2.sh.log: test-argp-2.sh @p='test-argp-2.sh'; \ b='test-argp-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-arpa_inet.log: test-arpa_inet$(EXEEXT) @p='test-arpa_inet$(EXEEXT)'; \ b='test-arpa_inet'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-assert.log: test-assert$(EXEEXT) @p='test-assert$(EXEEXT)'; \ b='test-assert'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-binary-io.sh.log: test-binary-io.sh @p='test-binary-io.sh'; \ b='test-binary-io.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-bind.log: test-bind$(EXEEXT) @p='test-bind$(EXEEXT)'; \ b='test-bind'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-btoc32-1.sh.log: test-btoc32-1.sh @p='test-btoc32-1.sh'; \ b='test-btoc32-1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-btoc32-2.sh.log: test-btoc32-2.sh @p='test-btoc32-2.sh'; \ b='test-btoc32-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-btoc32-3.sh.log: test-btoc32-3.sh @p='test-btoc32-3.sh'; \ b='test-btoc32-3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-btowc-1.sh.log: test-btowc-1.sh @p='test-btowc-1.sh'; \ b='test-btowc-1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-btowc-2.sh.log: test-btowc-2.sh @p='test-btowc-2.sh'; \ b='test-btowc-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-btowc-3.sh.log: test-btowc-3.sh @p='test-btowc-3.sh'; \ b='test-btowc-3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c-ctype.log: test-c-ctype$(EXEEXT) @p='test-c-ctype$(EXEEXT)'; \ b='test-c-ctype'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c-strcase.sh.log: test-c-strcase.sh @p='test-c-strcase.sh'; \ b='test-c-strcase.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c-strcasestr.log: test-c-strcasestr$(EXEEXT) @p='test-c-strcasestr$(EXEEXT)'; \ b='test-c-strcasestr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32isalnum.sh.log: test-c32isalnum.sh @p='test-c32isalnum.sh'; \ b='test-c32isalnum.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32isalpha.sh.log: test-c32isalpha.sh @p='test-c32isalpha.sh'; \ b='test-c32isalpha.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32isblank.sh.log: test-c32isblank.sh @p='test-c32isblank.sh'; \ b='test-c32isblank.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32iscntrl.sh.log: test-c32iscntrl.sh @p='test-c32iscntrl.sh'; \ b='test-c32iscntrl.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32isdigit.sh.log: test-c32isdigit.sh @p='test-c32isdigit.sh'; \ b='test-c32isdigit.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32isgraph.sh.log: test-c32isgraph.sh @p='test-c32isgraph.sh'; \ b='test-c32isgraph.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32islower.sh.log: test-c32islower.sh @p='test-c32islower.sh'; \ b='test-c32islower.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32isprint.sh.log: test-c32isprint.sh @p='test-c32isprint.sh'; \ b='test-c32isprint.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32ispunct.sh.log: test-c32ispunct.sh @p='test-c32ispunct.sh'; \ b='test-c32ispunct.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32isspace.sh.log: test-c32isspace.sh @p='test-c32isspace.sh'; \ b='test-c32isspace.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32isupper.sh.log: test-c32isupper.sh @p='test-c32isupper.sh'; \ b='test-c32isupper.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32isxdigit.sh.log: test-c32isxdigit.sh @p='test-c32isxdigit.sh'; \ b='test-c32isxdigit.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32rtomb.sh.log: test-c32rtomb.sh @p='test-c32rtomb.sh'; \ b='test-c32rtomb.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32rtomb-w32-2.sh.log: test-c32rtomb-w32-2.sh @p='test-c32rtomb-w32-2.sh'; \ b='test-c32rtomb-w32-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32rtomb-w32-3.sh.log: test-c32rtomb-w32-3.sh @p='test-c32rtomb-w32-3.sh'; \ b='test-c32rtomb-w32-3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32rtomb-w32-4.sh.log: test-c32rtomb-w32-4.sh @p='test-c32rtomb-w32-4.sh'; \ b='test-c32rtomb-w32-4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32rtomb-w32-5.sh.log: test-c32rtomb-w32-5.sh @p='test-c32rtomb-w32-5.sh'; \ b='test-c32rtomb-w32-5.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32rtomb-w32-6.sh.log: test-c32rtomb-w32-6.sh @p='test-c32rtomb-w32-6.sh'; \ b='test-c32rtomb-w32-6.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32rtomb-w32-7.sh.log: test-c32rtomb-w32-7.sh @p='test-c32rtomb-w32-7.sh'; \ b='test-c32rtomb-w32-7.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32rtomb-w32-8.sh.log: test-c32rtomb-w32-8.sh @p='test-c32rtomb-w32-8.sh'; \ b='test-c32rtomb-w32-8.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32tolower.sh.log: test-c32tolower.sh @p='test-c32tolower.sh'; \ b='test-c32tolower.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-c32width.log: test-c32width$(EXEEXT) @p='test-c32width$(EXEEXT)'; \ b='test-c32width'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-calloc-gnu.log: test-calloc-gnu$(EXEEXT) @p='test-calloc-gnu$(EXEEXT)'; \ b='test-calloc-gnu'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-chdir.log: test-chdir$(EXEEXT) @p='test-chdir$(EXEEXT)'; \ b='test-chdir'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-cloexec.log: test-cloexec$(EXEEXT) @p='test-cloexec$(EXEEXT)'; \ b='test-cloexec'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-close.log: test-close$(EXEEXT) @p='test-close$(EXEEXT)'; \ b='test-close'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-connect.log: test-connect$(EXEEXT) @p='test-connect$(EXEEXT)'; \ b='test-connect'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-creat.log: test-creat$(EXEEXT) @p='test-creat$(EXEEXT)'; \ b='test-creat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype.log: test-ctype$(EXEEXT) @p='test-ctype$(EXEEXT)'; \ b='test-ctype'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-dirent.log: test-dirent$(EXEEXT) @p='test-dirent$(EXEEXT)'; \ b='test-dirent'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-dirfd.log: test-dirfd$(EXEEXT) @p='test-dirfd$(EXEEXT)'; \ b='test-dirfd'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-dup.log: test-dup$(EXEEXT) @p='test-dup$(EXEEXT)'; \ b='test-dup'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-dup2.log: test-dup2$(EXEEXT) @p='test-dup2$(EXEEXT)'; \ b='test-dup2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-environ.log: test-environ$(EXEEXT) @p='test-environ$(EXEEXT)'; \ b='test-environ'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-errno.log: test-errno$(EXEEXT) @p='test-errno$(EXEEXT)'; \ b='test-errno'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-error.sh.log: test-error.sh @p='test-error.sh'; \ b='test-error.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-euidaccess.log: test-euidaccess$(EXEEXT) @p='test-euidaccess$(EXEEXT)'; \ b='test-euidaccess'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-faccessat.log: test-faccessat$(EXEEXT) @p='test-faccessat$(EXEEXT)'; \ b='test-faccessat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fchdir.log: test-fchdir$(EXEEXT) @p='test-fchdir$(EXEEXT)'; \ b='test-fchdir'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fcntl-h.log: test-fcntl-h$(EXEEXT) @p='test-fcntl-h$(EXEEXT)'; \ b='test-fcntl-h'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fcntl.log: test-fcntl$(EXEEXT) @p='test-fcntl$(EXEEXT)'; \ b='test-fcntl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fdopen.log: test-fdopen$(EXEEXT) @p='test-fdopen$(EXEEXT)'; \ b='test-fdopen'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fgetc.log: test-fgetc$(EXEEXT) @p='test-fgetc$(EXEEXT)'; \ b='test-fgetc'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-float.log: test-float$(EXEEXT) @p='test-float$(EXEEXT)'; \ b='test-float'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fputc.log: test-fputc$(EXEEXT) @p='test-fputc$(EXEEXT)'; \ b='test-fputc'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fread.log: test-fread$(EXEEXT) @p='test-fread$(EXEEXT)'; \ b='test-fread'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-free.log: test-free$(EXEEXT) @p='test-free$(EXEEXT)'; \ b='test-free'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fstat.log: test-fstat$(EXEEXT) @p='test-fstat$(EXEEXT)'; \ b='test-fstat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fstatat.log: test-fstatat$(EXEEXT) @p='test-fstatat$(EXEEXT)'; \ b='test-fstatat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ftruncate.sh.log: test-ftruncate.sh @p='test-ftruncate.sh'; \ b='test-ftruncate.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-func.log: test-func$(EXEEXT) @p='test-func$(EXEEXT)'; \ b='test-func'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-fwrite.log: test-fwrite$(EXEEXT) @p='test-fwrite$(EXEEXT)'; \ b='test-fwrite'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getcwd-lgpl.log: test-getcwd-lgpl$(EXEEXT) @p='test-getcwd-lgpl$(EXEEXT)'; \ b='test-getcwd-lgpl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getdelim.log: test-getdelim$(EXEEXT) @p='test-getdelim$(EXEEXT)'; \ b='test-getdelim'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getdtablesize.log: test-getdtablesize$(EXEEXT) @p='test-getdtablesize$(EXEEXT)'; \ b='test-getdtablesize'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getgroups.log: test-getgroups$(EXEEXT) @p='test-getgroups$(EXEEXT)'; \ b='test-getgroups'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getline.log: test-getline$(EXEEXT) @p='test-getline$(EXEEXT)'; \ b='test-getline'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getopt-gnu.log: test-getopt-gnu$(EXEEXT) @p='test-getopt-gnu$(EXEEXT)'; \ b='test-getopt-gnu'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getopt-posix.log: test-getopt-posix$(EXEEXT) @p='test-getopt-posix$(EXEEXT)'; \ b='test-getopt-posix'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-getprogname.log: test-getprogname$(EXEEXT) @p='test-getprogname$(EXEEXT)'; \ b='test-getprogname'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-gettimeofday.log: test-gettimeofday$(EXEEXT) @p='test-gettimeofday$(EXEEXT)'; \ b='test-gettimeofday'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-dynarray.log: test-dynarray$(EXEEXT) @p='test-dynarray$(EXEEXT)'; \ b='test-dynarray'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-hard-locale.log: test-hard-locale$(EXEEXT) @p='test-hard-locale$(EXEEXT)'; \ b='test-hard-locale'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ignore-value.log: test-ignore-value$(EXEEXT) @p='test-ignore-value$(EXEEXT)'; \ b='test-ignore-value'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-inet_pton.log: test-inet_pton$(EXEEXT) @p='test-inet_pton$(EXEEXT)'; \ b='test-inet_pton'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-intprops.log: test-intprops$(EXEEXT) @p='test-intprops$(EXEEXT)'; \ b='test-intprops'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-inttypes.log: test-inttypes$(EXEEXT) @p='test-inttypes$(EXEEXT)'; \ b='test-inttypes'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ioctl.log: test-ioctl$(EXEEXT) @p='test-ioctl$(EXEEXT)'; \ b='test-ioctl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-isblank.log: test-isblank$(EXEEXT) @p='test-isblank$(EXEEXT)'; \ b='test-isblank'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-isnand-nolibm.log: test-isnand-nolibm$(EXEEXT) @p='test-isnand-nolibm$(EXEEXT)'; \ b='test-isnand-nolibm'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-isnanf-nolibm.log: test-isnanf-nolibm$(EXEEXT) @p='test-isnanf-nolibm$(EXEEXT)'; \ b='test-isnanf-nolibm'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-isnanl-nolibm.log: test-isnanl-nolibm$(EXEEXT) @p='test-isnanl-nolibm$(EXEEXT)'; \ b='test-isnanl-nolibm'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-iswblank.log: test-iswblank$(EXEEXT) @p='test-iswblank$(EXEEXT)'; \ b='test-iswblank'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-iswctype.log: test-iswctype$(EXEEXT) @p='test-iswctype$(EXEEXT)'; \ b='test-iswctype'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-iswdigit.sh.log: test-iswdigit.sh @p='test-iswdigit.sh'; \ b='test-iswdigit.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-iswpunct.sh.log: test-iswpunct.sh @p='test-iswpunct.sh'; \ b='test-iswpunct.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-iswxdigit.sh.log: test-iswxdigit.sh @p='test-iswxdigit.sh'; \ b='test-iswxdigit.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-langinfo.log: test-langinfo$(EXEEXT) @p='test-langinfo$(EXEEXT)'; \ b='test-langinfo'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-largefile.log: test-largefile$(EXEEXT) @p='test-largefile$(EXEEXT)'; \ b='test-largefile'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-limits-h.log: test-limits-h$(EXEEXT) @p='test-limits-h$(EXEEXT)'; \ b='test-limits-h'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-listen.log: test-listen$(EXEEXT) @p='test-listen$(EXEEXT)'; \ b='test-listen'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-locale.log: test-locale$(EXEEXT) @p='test-locale$(EXEEXT)'; \ b='test-locale'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-localeconv.log: test-localeconv$(EXEEXT) @p='test-localeconv$(EXEEXT)'; \ b='test-localeconv'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-localename.log: test-localename$(EXEEXT) @p='test-localename$(EXEEXT)'; \ b='test-localename'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-rwlock1.log: test-rwlock1$(EXEEXT) @p='test-rwlock1$(EXEEXT)'; \ b='test-rwlock1'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-lock.log: test-lock$(EXEEXT) @p='test-lock$(EXEEXT)'; \ b='test-lock'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-once1.log: test-once1$(EXEEXT) @p='test-once1$(EXEEXT)'; \ b='test-once1'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-once2.log: test-once2$(EXEEXT) @p='test-once2$(EXEEXT)'; \ b='test-once2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-lstat.log: test-lstat$(EXEEXT) @p='test-lstat$(EXEEXT)'; \ b='test-lstat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-malloc-gnu.log: test-malloc-gnu$(EXEEXT) @p='test-malloc-gnu$(EXEEXT)'; \ b='test-malloc-gnu'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-malloca.log: test-malloca$(EXEEXT) @p='test-malloca$(EXEEXT)'; \ b='test-malloca'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-math.log: test-math$(EXEEXT) @p='test-math$(EXEEXT)'; \ b='test-math'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtoc32-1.sh.log: test-mbrtoc32-1.sh @p='test-mbrtoc32-1.sh'; \ b='test-mbrtoc32-1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtoc32-2.sh.log: test-mbrtoc32-2.sh @p='test-mbrtoc32-2.sh'; \ b='test-mbrtoc32-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtoc32-3.sh.log: test-mbrtoc32-3.sh @p='test-mbrtoc32-3.sh'; \ b='test-mbrtoc32-3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtoc32-4.sh.log: test-mbrtoc32-4.sh @p='test-mbrtoc32-4.sh'; \ b='test-mbrtoc32-4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtoc32-5.sh.log: test-mbrtoc32-5.sh @p='test-mbrtoc32-5.sh'; \ b='test-mbrtoc32-5.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtoc32-w32-2.sh.log: test-mbrtoc32-w32-2.sh @p='test-mbrtoc32-w32-2.sh'; \ b='test-mbrtoc32-w32-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtoc32-w32-3.sh.log: test-mbrtoc32-w32-3.sh @p='test-mbrtoc32-w32-3.sh'; \ b='test-mbrtoc32-w32-3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtoc32-w32-4.sh.log: test-mbrtoc32-w32-4.sh @p='test-mbrtoc32-w32-4.sh'; \ b='test-mbrtoc32-w32-4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtoc32-w32-5.sh.log: test-mbrtoc32-w32-5.sh @p='test-mbrtoc32-w32-5.sh'; \ b='test-mbrtoc32-w32-5.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtoc32-w32-6.sh.log: test-mbrtoc32-w32-6.sh @p='test-mbrtoc32-w32-6.sh'; \ b='test-mbrtoc32-w32-6.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtoc32-w32-7.sh.log: test-mbrtoc32-w32-7.sh @p='test-mbrtoc32-w32-7.sh'; \ b='test-mbrtoc32-w32-7.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtoc32-w32-8.sh.log: test-mbrtoc32-w32-8.sh @p='test-mbrtoc32-w32-8.sh'; \ b='test-mbrtoc32-w32-8.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-1.sh.log: test-mbrtowc-1.sh @p='test-mbrtowc-1.sh'; \ b='test-mbrtowc-1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-2.sh.log: test-mbrtowc-2.sh @p='test-mbrtowc-2.sh'; \ b='test-mbrtowc-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-3.sh.log: test-mbrtowc-3.sh @p='test-mbrtowc-3.sh'; \ b='test-mbrtowc-3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-4.sh.log: test-mbrtowc-4.sh @p='test-mbrtowc-4.sh'; \ b='test-mbrtowc-4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-5.sh.log: test-mbrtowc-5.sh @p='test-mbrtowc-5.sh'; \ b='test-mbrtowc-5.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-w32-2.sh.log: test-mbrtowc-w32-2.sh @p='test-mbrtowc-w32-2.sh'; \ b='test-mbrtowc-w32-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-w32-3.sh.log: test-mbrtowc-w32-3.sh @p='test-mbrtowc-w32-3.sh'; \ b='test-mbrtowc-w32-3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-w32-4.sh.log: test-mbrtowc-w32-4.sh @p='test-mbrtowc-w32-4.sh'; \ b='test-mbrtowc-w32-4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-w32-5.sh.log: test-mbrtowc-w32-5.sh @p='test-mbrtowc-w32-5.sh'; \ b='test-mbrtowc-w32-5.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-w32-6.sh.log: test-mbrtowc-w32-6.sh @p='test-mbrtowc-w32-6.sh'; \ b='test-mbrtowc-w32-6.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-w32-7.sh.log: test-mbrtowc-w32-7.sh @p='test-mbrtowc-w32-7.sh'; \ b='test-mbrtowc-w32-7.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbrtowc-w32-8.sh.log: test-mbrtowc-w32-8.sh @p='test-mbrtowc-w32-8.sh'; \ b='test-mbrtowc-w32-8.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbschr.sh.log: test-mbschr.sh @p='test-mbschr.sh'; \ b='test-mbschr.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbsinit.sh.log: test-mbsinit.sh @p='test-mbsinit.sh'; \ b='test-mbsinit.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbspbrk.sh.log: test-mbspbrk.sh @p='test-mbspbrk.sh'; \ b='test-mbspbrk.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-mbsspn.sh.log: test-mbsspn.sh @p='test-mbsspn.sh'; \ b='test-mbsspn.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-memchr.log: test-memchr$(EXEEXT) @p='test-memchr$(EXEEXT)'; \ b='test-memchr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-memrchr.log: test-memrchr$(EXEEXT) @p='test-memrchr$(EXEEXT)'; \ b='test-memrchr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-nanosleep.log: test-nanosleep$(EXEEXT) @p='test-nanosleep$(EXEEXT)'; \ b='test-nanosleep'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-netinet_in.log: test-netinet_in$(EXEEXT) @p='test-netinet_in$(EXEEXT)'; \ b='test-netinet_in'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-nl_langinfo1.sh.log: test-nl_langinfo1.sh @p='test-nl_langinfo1.sh'; \ b='test-nl_langinfo1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-nl_langinfo2.sh.log: test-nl_langinfo2.sh @p='test-nl_langinfo2.sh'; \ b='test-nl_langinfo2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-nl_langinfo-mt.log: test-nl_langinfo-mt$(EXEEXT) @p='test-nl_langinfo-mt$(EXEEXT)'; \ b='test-nl_langinfo-mt'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-open.log: test-open$(EXEEXT) @p='test-open$(EXEEXT)'; \ b='test-open'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-openat.log: test-openat$(EXEEXT) @p='test-openat$(EXEEXT)'; \ b='test-openat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-pathmax.log: test-pathmax$(EXEEXT) @p='test-pathmax$(EXEEXT)'; \ b='test-pathmax'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-perror.sh.log: test-perror.sh @p='test-perror.sh'; \ b='test-perror.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-perror2.log: test-perror2$(EXEEXT) @p='test-perror2$(EXEEXT)'; \ b='test-perror2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-pipe.log: test-pipe$(EXEEXT) @p='test-pipe$(EXEEXT)'; \ b='test-pipe'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-pselect.log: test-pselect$(EXEEXT) @p='test-pselect$(EXEEXT)'; \ b='test-pselect'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-pthread.log: test-pthread$(EXEEXT) @p='test-pthread$(EXEEXT)'; \ b='test-pthread'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-pthread-thread.log: test-pthread-thread$(EXEEXT) @p='test-pthread-thread$(EXEEXT)'; \ b='test-pthread-thread'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-pthread_sigmask1.log: test-pthread_sigmask1$(EXEEXT) @p='test-pthread_sigmask1$(EXEEXT)'; \ b='test-pthread_sigmask1'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-pthread_sigmask2.log: test-pthread_sigmask2$(EXEEXT) @p='test-pthread_sigmask2$(EXEEXT)'; \ b='test-pthread_sigmask2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-raise.log: test-raise$(EXEEXT) @p='test-raise$(EXEEXT)'; \ b='test-raise'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-random.log: test-random$(EXEEXT) @p='test-random$(EXEEXT)'; \ b='test-random'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-random-mt.log: test-random-mt$(EXEEXT) @p='test-random-mt$(EXEEXT)'; \ b='test-random-mt'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-random_r.log: test-random_r$(EXEEXT) @p='test-random_r$(EXEEXT)'; \ b='test-random_r'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-rawmemchr.log: test-rawmemchr$(EXEEXT) @p='test-rawmemchr$(EXEEXT)'; \ b='test-rawmemchr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-realloc-gnu.log: test-realloc-gnu$(EXEEXT) @p='test-realloc-gnu$(EXEEXT)'; \ b='test-realloc-gnu'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-reallocarray.log: test-reallocarray$(EXEEXT) @p='test-reallocarray$(EXEEXT)'; \ b='test-reallocarray'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-regex.log: test-regex$(EXEEXT) @p='test-regex$(EXEEXT)'; \ b='test-regex'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sched.log: test-sched$(EXEEXT) @p='test-sched$(EXEEXT)'; \ b='test-sched'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-select.log: test-select$(EXEEXT) @p='test-select$(EXEEXT)'; \ b='test-select'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-select-in.sh.log: test-select-in.sh @p='test-select-in.sh'; \ b='test-select-in.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-select-out.sh.log: test-select-out.sh @p='test-select-out.sh'; \ b='test-select-out.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-setenv.log: test-setenv$(EXEEXT) @p='test-setenv$(EXEEXT)'; \ b='test-setenv'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-setlocale_null.log: test-setlocale_null$(EXEEXT) @p='test-setlocale_null$(EXEEXT)'; \ b='test-setlocale_null'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-setlocale_null-mt-one.log: test-setlocale_null-mt-one$(EXEEXT) @p='test-setlocale_null-mt-one$(EXEEXT)'; \ b='test-setlocale_null-mt-one'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-setlocale_null-mt-all.log: test-setlocale_null-mt-all$(EXEEXT) @p='test-setlocale_null-mt-all$(EXEEXT)'; \ b='test-setlocale_null-mt-all'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-setlocale1.sh.log: test-setlocale1.sh @p='test-setlocale1.sh'; \ b='test-setlocale1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-setlocale2.sh.log: test-setlocale2.sh @p='test-setlocale2.sh'; \ b='test-setlocale2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-setsockopt.log: test-setsockopt$(EXEEXT) @p='test-setsockopt$(EXEEXT)'; \ b='test-setsockopt'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-signal-h.log: test-signal-h$(EXEEXT) @p='test-signal-h$(EXEEXT)'; \ b='test-signal-h'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-signbit.log: test-signbit$(EXEEXT) @p='test-signbit$(EXEEXT)'; \ b='test-signbit'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sigprocmask.log: test-sigprocmask$(EXEEXT) @p='test-sigprocmask$(EXEEXT)'; \ b='test-sigprocmask'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sleep.log: test-sleep$(EXEEXT) @p='test-sleep$(EXEEXT)'; \ b='test-sleep'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sockets.log: test-sockets$(EXEEXT) @p='test-sockets$(EXEEXT)'; \ b='test-sockets'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stat.log: test-stat$(EXEEXT) @p='test-stat$(EXEEXT)'; \ b='test-stat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stat-time.log: test-stat-time$(EXEEXT) @p='test-stat-time$(EXEEXT)'; \ b='test-stat-time'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stdbool.log: test-stdbool$(EXEEXT) @p='test-stdbool$(EXEEXT)'; \ b='test-stdbool'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stdckdint.log: test-stdckdint$(EXEEXT) @p='test-stdckdint$(EXEEXT)'; \ b='test-stdckdint'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stddef.log: test-stddef$(EXEEXT) @p='test-stddef$(EXEEXT)'; \ b='test-stddef'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stdint.log: test-stdint$(EXEEXT) @p='test-stdint$(EXEEXT)'; \ b='test-stdint'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stdio.log: test-stdio$(EXEEXT) @p='test-stdio$(EXEEXT)'; \ b='test-stdio'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-stdlib.log: test-stdlib$(EXEEXT) @p='test-stdlib$(EXEEXT)'; \ b='test-stdlib'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-strchrnul.log: test-strchrnul$(EXEEXT) @p='test-strchrnul$(EXEEXT)'; \ b='test-strchrnul'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-strerror.log: test-strerror$(EXEEXT) @p='test-strerror$(EXEEXT)'; \ b='test-strerror'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-strerror_r.log: test-strerror_r$(EXEEXT) @p='test-strerror_r$(EXEEXT)'; \ b='test-strerror_r'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-string.log: test-string$(EXEEXT) @p='test-string$(EXEEXT)'; \ b='test-string'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-strings.log: test-strings$(EXEEXT) @p='test-strings$(EXEEXT)'; \ b='test-strings'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-strnlen.log: test-strnlen$(EXEEXT) @p='test-strnlen$(EXEEXT)'; \ b='test-strnlen'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-strtod.log: test-strtod$(EXEEXT) @p='test-strtod$(EXEEXT)'; \ b='test-strtod'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-strtod1.sh.log: test-strtod1.sh @p='test-strtod1.sh'; \ b='test-strtod1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-symlink.log: test-symlink$(EXEEXT) @p='test-symlink$(EXEEXT)'; \ b='test-symlink'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_ioctl.log: test-sys_ioctl$(EXEEXT) @p='test-sys_ioctl$(EXEEXT)'; \ b='test-sys_ioctl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_select.log: test-sys_select$(EXEEXT) @p='test-sys_select$(EXEEXT)'; \ b='test-sys_select'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_socket.log: test-sys_socket$(EXEEXT) @p='test-sys_socket$(EXEEXT)'; \ b='test-sys_socket'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_stat.log: test-sys_stat$(EXEEXT) @p='test-sys_stat$(EXEEXT)'; \ b='test-sys_stat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_time.log: test-sys_time$(EXEEXT) @p='test-sys_time$(EXEEXT)'; \ b='test-sys_time'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_types.log: test-sys_types$(EXEEXT) @p='test-sys_types$(EXEEXT)'; \ b='test-sys_types'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_uio.log: test-sys_uio$(EXEEXT) @p='test-sys_uio$(EXEEXT)'; \ b='test-sys_uio'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sys_wait.log: test-sys_wait$(EXEEXT) @p='test-sys_wait$(EXEEXT)'; \ b='test-sys_wait'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-sysexits.log: test-sysexits$(EXEEXT) @p='test-sysexits$(EXEEXT)'; \ b='test-sysexits'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-init.sh.log: test-init.sh @p='test-init.sh'; \ b='test-init.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-thread_self.log: test-thread_self$(EXEEXT) @p='test-thread_self$(EXEEXT)'; \ b='test-thread_self'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-thread_create.log: test-thread_create$(EXEEXT) @p='test-thread_create$(EXEEXT)'; \ b='test-thread_create'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-time-h.log: test-time-h$(EXEEXT) @p='test-time-h$(EXEEXT)'; \ b='test-time-h'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-time.log: test-time$(EXEEXT) @p='test-time$(EXEEXT)'; \ b='test-time'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-uchar.log: test-uchar$(EXEEXT) @p='test-uchar$(EXEEXT)'; \ b='test-uchar'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-uc_tolower.log: test-uc_tolower$(EXEEXT) @p='test-uc_tolower$(EXEEXT)'; \ b='test-uc_tolower'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype_alnum.log: test-ctype_alnum$(EXEEXT) @p='test-ctype_alnum$(EXEEXT)'; \ b='test-ctype_alnum'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype_alpha.log: test-ctype_alpha$(EXEEXT) @p='test-ctype_alpha$(EXEEXT)'; \ b='test-ctype_alpha'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype_blank.log: test-ctype_blank$(EXEEXT) @p='test-ctype_blank$(EXEEXT)'; \ b='test-ctype_blank'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype_cntrl.log: test-ctype_cntrl$(EXEEXT) @p='test-ctype_cntrl$(EXEEXT)'; \ b='test-ctype_cntrl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype_digit.log: test-ctype_digit$(EXEEXT) @p='test-ctype_digit$(EXEEXT)'; \ b='test-ctype_digit'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype_graph.log: test-ctype_graph$(EXEEXT) @p='test-ctype_graph$(EXEEXT)'; \ b='test-ctype_graph'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype_lower.log: test-ctype_lower$(EXEEXT) @p='test-ctype_lower$(EXEEXT)'; \ b='test-ctype_lower'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype_print.log: test-ctype_print$(EXEEXT) @p='test-ctype_print$(EXEEXT)'; \ b='test-ctype_print'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype_punct.log: test-ctype_punct$(EXEEXT) @p='test-ctype_punct$(EXEEXT)'; \ b='test-ctype_punct'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype_space.log: test-ctype_space$(EXEEXT) @p='test-ctype_space$(EXEEXT)'; \ b='test-ctype_space'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype_upper.log: test-ctype_upper$(EXEEXT) @p='test-ctype_upper$(EXEEXT)'; \ b='test-ctype_upper'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-ctype_xdigit.log: test-ctype_xdigit$(EXEEXT) @p='test-ctype_xdigit$(EXEEXT)'; \ b='test-ctype_xdigit'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-dup-safer.log: test-dup-safer$(EXEEXT) @p='test-dup-safer$(EXEEXT)'; \ b='test-dup-safer'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-unistd.log: test-unistd$(EXEEXT) @p='test-unistd$(EXEEXT)'; \ b='test-unistd'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-uc_width.log: test-uc_width$(EXEEXT) @p='test-uc_width$(EXEEXT)'; \ b='test-uc_width'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) uniwidth/test-uc_width2.sh.log: uniwidth/test-uc_width2.sh @p='uniwidth/test-uc_width2.sh'; \ b='uniwidth/test-uc_width2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-unsetenv.log: test-unsetenv$(EXEEXT) @p='test-unsetenv$(EXEEXT)'; \ b='test-unsetenv'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-usleep.log: test-usleep$(EXEEXT) @p='test-usleep$(EXEEXT)'; \ b='test-usleep'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-vasnprintf.log: test-vasnprintf$(EXEEXT) @p='test-vasnprintf$(EXEEXT)'; \ b='test-vasnprintf'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-verify.log: test-verify$(EXEEXT) @p='test-verify$(EXEEXT)'; \ b='test-verify'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-verify.sh.log: test-verify.sh @p='test-verify.sh'; \ b='test-verify.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-vsnprintf.log: test-vsnprintf$(EXEEXT) @p='test-vsnprintf$(EXEEXT)'; \ b='test-vsnprintf'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wchar.log: test-wchar$(EXEEXT) @p='test-wchar$(EXEEXT)'; \ b='test-wchar'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb.sh.log: test-wcrtomb.sh @p='test-wcrtomb.sh'; \ b='test-wcrtomb.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb-w32-2.sh.log: test-wcrtomb-w32-2.sh @p='test-wcrtomb-w32-2.sh'; \ b='test-wcrtomb-w32-2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb-w32-3.sh.log: test-wcrtomb-w32-3.sh @p='test-wcrtomb-w32-3.sh'; \ b='test-wcrtomb-w32-3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb-w32-4.sh.log: test-wcrtomb-w32-4.sh @p='test-wcrtomb-w32-4.sh'; \ b='test-wcrtomb-w32-4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb-w32-5.sh.log: test-wcrtomb-w32-5.sh @p='test-wcrtomb-w32-5.sh'; \ b='test-wcrtomb-w32-5.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb-w32-6.sh.log: test-wcrtomb-w32-6.sh @p='test-wcrtomb-w32-6.sh'; \ b='test-wcrtomb-w32-6.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb-w32-7.sh.log: test-wcrtomb-w32-7.sh @p='test-wcrtomb-w32-7.sh'; \ b='test-wcrtomb-w32-7.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcrtomb-w32-8.sh.log: test-wcrtomb-w32-8.sh @p='test-wcrtomb-w32-8.sh'; \ b='test-wcrtomb-w32-8.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wctype-h.log: test-wctype-h$(EXEEXT) @p='test-wctype-h$(EXEEXT)'; \ b='test-wctype-h'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wctype.log: test-wctype$(EXEEXT) @p='test-wctype$(EXEEXT)'; \ b='test-wctype'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-wcwidth.log: test-wcwidth$(EXEEXT) @p='test-wcwidth$(EXEEXT)'; \ b='test-wcwidth'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-xalloc-die.sh.log: test-xalloc-die.sh @p='test-xalloc-die.sh'; \ b='test-xalloc-die.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_LIBRARIES) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(PROGRAMS) $(LIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f glthread/$(DEPDIR)/$(am__dirstamp) -rm -f glthread/$(am__dirstamp) -rm -f unicase/$(DEPDIR)/$(am__dirstamp) -rm -f unicase/$(am__dirstamp) -rm -f unictype/$(DEPDIR)/$(am__dirstamp) -rm -f unictype/$(am__dirstamp) -rm -f uniwidth/$(DEPDIR)/$(am__dirstamp) -rm -f uniwidth/$(am__dirstamp) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \ clean-libtool clean-local clean-noinstLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/accept.Po -rm -f ./$(DEPDIR)/binary-io.Po -rm -f ./$(DEPDIR)/bind.Po -rm -f ./$(DEPDIR)/btoc32.Po -rm -f ./$(DEPDIR)/c-strcasecmp.Po -rm -f ./$(DEPDIR)/c-strcasestr.Po -rm -f ./$(DEPDIR)/c-strncasecmp.Po -rm -f ./$(DEPDIR)/c32rtomb.Po -rm -f ./$(DEPDIR)/c32tob.Po -rm -f ./$(DEPDIR)/calloc.Po -rm -f ./$(DEPDIR)/connect.Po -rm -f ./$(DEPDIR)/creat.Po -rm -f ./$(DEPDIR)/dup.Po -rm -f ./$(DEPDIR)/fdopen.Po -rm -f ./$(DEPDIR)/ftruncate.Po -rm -f ./$(DEPDIR)/getpagesize.Po -rm -f ./$(DEPDIR)/ialloc.Po -rm -f ./$(DEPDIR)/inet_pton.Po -rm -f ./$(DEPDIR)/ioctl.Po -rm -f ./$(DEPDIR)/isblank.Po -rm -f ./$(DEPDIR)/listen.Po -rm -f ./$(DEPDIR)/locale.Po -rm -f ./$(DEPDIR)/localename-table.Po -rm -f ./$(DEPDIR)/localename.Po -rm -f ./$(DEPDIR)/nanosleep.Po -rm -f ./$(DEPDIR)/perror.Po -rm -f ./$(DEPDIR)/pselect.Po -rm -f ./$(DEPDIR)/pthread-thread.Po -rm -f ./$(DEPDIR)/pthread_sigmask.Po -rm -f ./$(DEPDIR)/putenv.Po -rm -f ./$(DEPDIR)/raise.Po -rm -f ./$(DEPDIR)/random.Po -rm -f ./$(DEPDIR)/random_r.Po -rm -f ./$(DEPDIR)/reallocarray.Po -rm -f ./$(DEPDIR)/same-inode.Po -rm -f ./$(DEPDIR)/sched_yield.Po -rm -f ./$(DEPDIR)/setenv.Po -rm -f ./$(DEPDIR)/setlocale.Po -rm -f ./$(DEPDIR)/setsockopt.Po -rm -f ./$(DEPDIR)/sigprocmask.Po -rm -f ./$(DEPDIR)/socket.Po -rm -f ./$(DEPDIR)/strerror_r.Po -rm -f ./$(DEPDIR)/symlink.Po -rm -f ./$(DEPDIR)/test-accept.Po -rm -f ./$(DEPDIR)/test-access.Po -rm -f ./$(DEPDIR)/test-alignasof.Po -rm -f ./$(DEPDIR)/test-alloca-opt.Po -rm -f ./$(DEPDIR)/test-argp.Po -rm -f ./$(DEPDIR)/test-arpa_inet.Po -rm -f ./$(DEPDIR)/test-assert.Po -rm -f ./$(DEPDIR)/test-binary-io.Po -rm -f ./$(DEPDIR)/test-bind.Po -rm -f ./$(DEPDIR)/test-btoc32.Po -rm -f ./$(DEPDIR)/test-btowc.Po -rm -f ./$(DEPDIR)/test-c-ctype.Po -rm -f ./$(DEPDIR)/test-c-strcasecmp.Po -rm -f ./$(DEPDIR)/test-c-strcasestr.Po -rm -f ./$(DEPDIR)/test-c-strncasecmp.Po -rm -f ./$(DEPDIR)/test-c32isalnum.Po -rm -f ./$(DEPDIR)/test-c32isalpha.Po -rm -f ./$(DEPDIR)/test-c32isblank.Po -rm -f ./$(DEPDIR)/test-c32iscntrl.Po -rm -f ./$(DEPDIR)/test-c32isdigit.Po -rm -f ./$(DEPDIR)/test-c32isgraph.Po -rm -f ./$(DEPDIR)/test-c32islower.Po -rm -f ./$(DEPDIR)/test-c32isprint.Po -rm -f ./$(DEPDIR)/test-c32ispunct.Po -rm -f ./$(DEPDIR)/test-c32isspace.Po -rm -f ./$(DEPDIR)/test-c32isupper.Po -rm -f ./$(DEPDIR)/test-c32isxdigit.Po -rm -f ./$(DEPDIR)/test-c32rtomb-w32.Po -rm -f ./$(DEPDIR)/test-c32rtomb.Po -rm -f ./$(DEPDIR)/test-c32tolower.Po -rm -f ./$(DEPDIR)/test-c32width.Po -rm -f ./$(DEPDIR)/test-calloc-gnu.Po -rm -f ./$(DEPDIR)/test-chdir.Po -rm -f ./$(DEPDIR)/test-cloexec.Po -rm -f ./$(DEPDIR)/test-close.Po -rm -f ./$(DEPDIR)/test-connect.Po -rm -f ./$(DEPDIR)/test-creat.Po -rm -f ./$(DEPDIR)/test-ctype.Po -rm -f ./$(DEPDIR)/test-dirent.Po -rm -f ./$(DEPDIR)/test-dirfd.Po -rm -f ./$(DEPDIR)/test-dup-safer.Po -rm -f ./$(DEPDIR)/test-dup.Po -rm -f ./$(DEPDIR)/test-dup2.Po -rm -f ./$(DEPDIR)/test-dynarray.Po -rm -f ./$(DEPDIR)/test-environ.Po -rm -f ./$(DEPDIR)/test-errno.Po -rm -f ./$(DEPDIR)/test-error.Po -rm -f ./$(DEPDIR)/test-euidaccess.Po -rm -f ./$(DEPDIR)/test-faccessat.Po -rm -f ./$(DEPDIR)/test-fchdir.Po -rm -f ./$(DEPDIR)/test-fcntl-h.Po -rm -f ./$(DEPDIR)/test-fcntl.Po -rm -f ./$(DEPDIR)/test-fdopen.Po -rm -f ./$(DEPDIR)/test-fgetc.Po -rm -f ./$(DEPDIR)/test-float.Po -rm -f ./$(DEPDIR)/test-fputc.Po -rm -f ./$(DEPDIR)/test-fread.Po -rm -f ./$(DEPDIR)/test-free.Po -rm -f ./$(DEPDIR)/test-fstat.Po -rm -f ./$(DEPDIR)/test-fstatat.Po -rm -f ./$(DEPDIR)/test-ftruncate.Po -rm -f ./$(DEPDIR)/test-func.Po -rm -f ./$(DEPDIR)/test-fwrite.Po -rm -f ./$(DEPDIR)/test-getcwd-lgpl.Po -rm -f ./$(DEPDIR)/test-getdelim.Po -rm -f ./$(DEPDIR)/test-getdtablesize.Po -rm -f ./$(DEPDIR)/test-getgroups.Po -rm -f ./$(DEPDIR)/test-getline.Po -rm -f ./$(DEPDIR)/test-getopt-gnu.Po -rm -f ./$(DEPDIR)/test-getopt-posix.Po -rm -f ./$(DEPDIR)/test-getprogname.Po -rm -f ./$(DEPDIR)/test-gettimeofday.Po -rm -f ./$(DEPDIR)/test-hard-locale.Po -rm -f ./$(DEPDIR)/test-ignore-value.Po -rm -f ./$(DEPDIR)/test-inet_pton.Po -rm -f ./$(DEPDIR)/test-intprops.Po -rm -f ./$(DEPDIR)/test-inttypes.Po -rm -f ./$(DEPDIR)/test-ioctl.Po -rm -f ./$(DEPDIR)/test-isblank.Po -rm -f ./$(DEPDIR)/test-isnand-nolibm.Po -rm -f ./$(DEPDIR)/test-isnanf-nolibm.Po -rm -f ./$(DEPDIR)/test-isnanl-nolibm.Po -rm -f ./$(DEPDIR)/test-iswblank.Po -rm -f ./$(DEPDIR)/test-iswctype.Po -rm -f ./$(DEPDIR)/test-iswdigit.Po -rm -f ./$(DEPDIR)/test-iswpunct.Po -rm -f ./$(DEPDIR)/test-iswxdigit.Po -rm -f ./$(DEPDIR)/test-langinfo.Po -rm -f ./$(DEPDIR)/test-largefile.Po -rm -f ./$(DEPDIR)/test-limits-h.Po -rm -f ./$(DEPDIR)/test-listen.Po -rm -f ./$(DEPDIR)/test-localcharset.Po -rm -f ./$(DEPDIR)/test-locale.Po -rm -f ./$(DEPDIR)/test-localeconv.Po -rm -f ./$(DEPDIR)/test-localename.Po -rm -f ./$(DEPDIR)/test-lock.Po -rm -f ./$(DEPDIR)/test-lstat.Po -rm -f ./$(DEPDIR)/test-malloc-gnu.Po -rm -f ./$(DEPDIR)/test-malloca.Po -rm -f ./$(DEPDIR)/test-math.Po -rm -f ./$(DEPDIR)/test-mbrtoc32-w32.Po -rm -f ./$(DEPDIR)/test-mbrtoc32.Po -rm -f ./$(DEPDIR)/test-mbrtowc-w32.Po -rm -f ./$(DEPDIR)/test-mbrtowc.Po -rm -f ./$(DEPDIR)/test-mbschr.Po -rm -f ./$(DEPDIR)/test-mbsinit.Po -rm -f ./$(DEPDIR)/test-mbspbrk.Po -rm -f ./$(DEPDIR)/test-mbsspn.Po -rm -f ./$(DEPDIR)/test-memchr.Po -rm -f ./$(DEPDIR)/test-memrchr.Po -rm -f ./$(DEPDIR)/test-nanosleep.Po -rm -f ./$(DEPDIR)/test-netinet_in.Po -rm -f ./$(DEPDIR)/test-nl_langinfo-mt.Po -rm -f ./$(DEPDIR)/test-nl_langinfo1.Po -rm -f ./$(DEPDIR)/test-nl_langinfo2.Po -rm -f ./$(DEPDIR)/test-once.Po -rm -f ./$(DEPDIR)/test-open.Po -rm -f ./$(DEPDIR)/test-openat.Po -rm -f ./$(DEPDIR)/test-pathmax.Po -rm -f ./$(DEPDIR)/test-perror.Po -rm -f ./$(DEPDIR)/test-perror2.Po -rm -f ./$(DEPDIR)/test-pipe.Po -rm -f ./$(DEPDIR)/test-pselect.Po -rm -f ./$(DEPDIR)/test-pthread-thread.Po -rm -f ./$(DEPDIR)/test-pthread.Po -rm -f ./$(DEPDIR)/test-pthread_sigmask1.Po -rm -f ./$(DEPDIR)/test-pthread_sigmask2.Po -rm -f ./$(DEPDIR)/test-raise.Po -rm -f ./$(DEPDIR)/test-random-mt.Po -rm -f ./$(DEPDIR)/test-random.Po -rm -f ./$(DEPDIR)/test-random_r.Po -rm -f ./$(DEPDIR)/test-rawmemchr.Po -rm -f ./$(DEPDIR)/test-realloc-gnu.Po -rm -f ./$(DEPDIR)/test-reallocarray.Po -rm -f ./$(DEPDIR)/test-regex.Po -rm -f ./$(DEPDIR)/test-rwlock1.Po -rm -f ./$(DEPDIR)/test-sched.Po -rm -f ./$(DEPDIR)/test-select-fd.Po -rm -f ./$(DEPDIR)/test-select-stdin.Po -rm -f ./$(DEPDIR)/test-select.Po -rm -f ./$(DEPDIR)/test-setenv.Po -rm -f ./$(DEPDIR)/test-setlocale1.Po -rm -f ./$(DEPDIR)/test-setlocale2.Po -rm -f ./$(DEPDIR)/test-setlocale_null-mt-all.Po -rm -f ./$(DEPDIR)/test-setlocale_null-mt-one.Po -rm -f ./$(DEPDIR)/test-setlocale_null.Po -rm -f ./$(DEPDIR)/test-setsockopt.Po -rm -f ./$(DEPDIR)/test-signal-h.Po -rm -f ./$(DEPDIR)/test-signbit.Po -rm -f ./$(DEPDIR)/test-sigprocmask.Po -rm -f ./$(DEPDIR)/test-sleep.Po -rm -f ./$(DEPDIR)/test-sockets.Po -rm -f ./$(DEPDIR)/test-stat-time.Po -rm -f ./$(DEPDIR)/test-stat.Po -rm -f ./$(DEPDIR)/test-stdbool.Po -rm -f ./$(DEPDIR)/test-stdckdint.Po -rm -f ./$(DEPDIR)/test-stddef.Po -rm -f ./$(DEPDIR)/test-stdint.Po -rm -f ./$(DEPDIR)/test-stdio.Po -rm -f ./$(DEPDIR)/test-stdlib.Po -rm -f ./$(DEPDIR)/test-strchrnul.Po -rm -f ./$(DEPDIR)/test-strerror.Po -rm -f ./$(DEPDIR)/test-strerror_r.Po -rm -f ./$(DEPDIR)/test-string.Po -rm -f ./$(DEPDIR)/test-strings.Po -rm -f ./$(DEPDIR)/test-strnlen.Po -rm -f ./$(DEPDIR)/test-strtod.Po -rm -f ./$(DEPDIR)/test-strtod1.Po -rm -f ./$(DEPDIR)/test-symlink.Po -rm -f ./$(DEPDIR)/test-sys_ioctl.Po -rm -f ./$(DEPDIR)/test-sys_select.Po -rm -f ./$(DEPDIR)/test-sys_socket.Po -rm -f ./$(DEPDIR)/test-sys_stat.Po -rm -f ./$(DEPDIR)/test-sys_time.Po -rm -f ./$(DEPDIR)/test-sys_types.Po -rm -f ./$(DEPDIR)/test-sys_uio.Po -rm -f ./$(DEPDIR)/test-sys_wait.Po -rm -f ./$(DEPDIR)/test-sysexits.Po -rm -f ./$(DEPDIR)/test-thread_create.Po -rm -f ./$(DEPDIR)/test-thread_self.Po -rm -f ./$(DEPDIR)/test-time-h.Po -rm -f ./$(DEPDIR)/test-time.Po -rm -f ./$(DEPDIR)/test-uchar.Po -rm -f ./$(DEPDIR)/test-unistd.Po -rm -f ./$(DEPDIR)/test-unsetenv.Po -rm -f ./$(DEPDIR)/test-usleep.Po -rm -f ./$(DEPDIR)/test-vasnprintf.Po -rm -f ./$(DEPDIR)/test-verify-try.Po -rm -f ./$(DEPDIR)/test-verify.Po -rm -f ./$(DEPDIR)/test-vsnprintf.Po -rm -f ./$(DEPDIR)/test-wchar.Po -rm -f ./$(DEPDIR)/test-wcrtomb-w32.Po -rm -f ./$(DEPDIR)/test-wcrtomb.Po -rm -f ./$(DEPDIR)/test-wctype-h.Po -rm -f ./$(DEPDIR)/test-wctype.Po -rm -f ./$(DEPDIR)/test-wcwidth.Po -rm -f ./$(DEPDIR)/test-xalloc-die.Po -rm -f ./$(DEPDIR)/unsetenv.Po -rm -f ./$(DEPDIR)/usleep.Po -rm -f ./$(DEPDIR)/wctob.Po -rm -f ./$(DEPDIR)/wctomb.Po -rm -f ./$(DEPDIR)/windows-thread.Po -rm -f ./$(DEPDIR)/windows-tls.Po -rm -f ./$(DEPDIR)/xalloc-die.Po -rm -f ./$(DEPDIR)/xmalloc.Po -rm -f glthread/$(DEPDIR)/thread.Po -rm -f unicase/$(DEPDIR)/test-uc_tolower.Po -rm -f unictype/$(DEPDIR)/test-ctype_alnum.Po -rm -f unictype/$(DEPDIR)/test-ctype_alpha.Po -rm -f unictype/$(DEPDIR)/test-ctype_blank.Po -rm -f unictype/$(DEPDIR)/test-ctype_cntrl.Po -rm -f unictype/$(DEPDIR)/test-ctype_digit.Po -rm -f unictype/$(DEPDIR)/test-ctype_graph.Po -rm -f unictype/$(DEPDIR)/test-ctype_lower.Po -rm -f unictype/$(DEPDIR)/test-ctype_print.Po -rm -f unictype/$(DEPDIR)/test-ctype_punct.Po -rm -f unictype/$(DEPDIR)/test-ctype_space.Po -rm -f unictype/$(DEPDIR)/test-ctype_upper.Po -rm -f unictype/$(DEPDIR)/test-ctype_xdigit.Po -rm -f uniwidth/$(DEPDIR)/test-uc_width.Po -rm -f uniwidth/$(DEPDIR)/test-uc_width2.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/accept.Po -rm -f ./$(DEPDIR)/binary-io.Po -rm -f ./$(DEPDIR)/bind.Po -rm -f ./$(DEPDIR)/btoc32.Po -rm -f ./$(DEPDIR)/c-strcasecmp.Po -rm -f ./$(DEPDIR)/c-strcasestr.Po -rm -f ./$(DEPDIR)/c-strncasecmp.Po -rm -f ./$(DEPDIR)/c32rtomb.Po -rm -f ./$(DEPDIR)/c32tob.Po -rm -f ./$(DEPDIR)/calloc.Po -rm -f ./$(DEPDIR)/connect.Po -rm -f ./$(DEPDIR)/creat.Po -rm -f ./$(DEPDIR)/dup.Po -rm -f ./$(DEPDIR)/fdopen.Po -rm -f ./$(DEPDIR)/ftruncate.Po -rm -f ./$(DEPDIR)/getpagesize.Po -rm -f ./$(DEPDIR)/ialloc.Po -rm -f ./$(DEPDIR)/inet_pton.Po -rm -f ./$(DEPDIR)/ioctl.Po -rm -f ./$(DEPDIR)/isblank.Po -rm -f ./$(DEPDIR)/listen.Po -rm -f ./$(DEPDIR)/locale.Po -rm -f ./$(DEPDIR)/localename-table.Po -rm -f ./$(DEPDIR)/localename.Po -rm -f ./$(DEPDIR)/nanosleep.Po -rm -f ./$(DEPDIR)/perror.Po -rm -f ./$(DEPDIR)/pselect.Po -rm -f ./$(DEPDIR)/pthread-thread.Po -rm -f ./$(DEPDIR)/pthread_sigmask.Po -rm -f ./$(DEPDIR)/putenv.Po -rm -f ./$(DEPDIR)/raise.Po -rm -f ./$(DEPDIR)/random.Po -rm -f ./$(DEPDIR)/random_r.Po -rm -f ./$(DEPDIR)/reallocarray.Po -rm -f ./$(DEPDIR)/same-inode.Po -rm -f ./$(DEPDIR)/sched_yield.Po -rm -f ./$(DEPDIR)/setenv.Po -rm -f ./$(DEPDIR)/setlocale.Po -rm -f ./$(DEPDIR)/setsockopt.Po -rm -f ./$(DEPDIR)/sigprocmask.Po -rm -f ./$(DEPDIR)/socket.Po -rm -f ./$(DEPDIR)/strerror_r.Po -rm -f ./$(DEPDIR)/symlink.Po -rm -f ./$(DEPDIR)/test-accept.Po -rm -f ./$(DEPDIR)/test-access.Po -rm -f ./$(DEPDIR)/test-alignasof.Po -rm -f ./$(DEPDIR)/test-alloca-opt.Po -rm -f ./$(DEPDIR)/test-argp.Po -rm -f ./$(DEPDIR)/test-arpa_inet.Po -rm -f ./$(DEPDIR)/test-assert.Po -rm -f ./$(DEPDIR)/test-binary-io.Po -rm -f ./$(DEPDIR)/test-bind.Po -rm -f ./$(DEPDIR)/test-btoc32.Po -rm -f ./$(DEPDIR)/test-btowc.Po -rm -f ./$(DEPDIR)/test-c-ctype.Po -rm -f ./$(DEPDIR)/test-c-strcasecmp.Po -rm -f ./$(DEPDIR)/test-c-strcasestr.Po -rm -f ./$(DEPDIR)/test-c-strncasecmp.Po -rm -f ./$(DEPDIR)/test-c32isalnum.Po -rm -f ./$(DEPDIR)/test-c32isalpha.Po -rm -f ./$(DEPDIR)/test-c32isblank.Po -rm -f ./$(DEPDIR)/test-c32iscntrl.Po -rm -f ./$(DEPDIR)/test-c32isdigit.Po -rm -f ./$(DEPDIR)/test-c32isgraph.Po -rm -f ./$(DEPDIR)/test-c32islower.Po -rm -f ./$(DEPDIR)/test-c32isprint.Po -rm -f ./$(DEPDIR)/test-c32ispunct.Po -rm -f ./$(DEPDIR)/test-c32isspace.Po -rm -f ./$(DEPDIR)/test-c32isupper.Po -rm -f ./$(DEPDIR)/test-c32isxdigit.Po -rm -f ./$(DEPDIR)/test-c32rtomb-w32.Po -rm -f ./$(DEPDIR)/test-c32rtomb.Po -rm -f ./$(DEPDIR)/test-c32tolower.Po -rm -f ./$(DEPDIR)/test-c32width.Po -rm -f ./$(DEPDIR)/test-calloc-gnu.Po -rm -f ./$(DEPDIR)/test-chdir.Po -rm -f ./$(DEPDIR)/test-cloexec.Po -rm -f ./$(DEPDIR)/test-close.Po -rm -f ./$(DEPDIR)/test-connect.Po -rm -f ./$(DEPDIR)/test-creat.Po -rm -f ./$(DEPDIR)/test-ctype.Po -rm -f ./$(DEPDIR)/test-dirent.Po -rm -f ./$(DEPDIR)/test-dirfd.Po -rm -f ./$(DEPDIR)/test-dup-safer.Po -rm -f ./$(DEPDIR)/test-dup.Po -rm -f ./$(DEPDIR)/test-dup2.Po -rm -f ./$(DEPDIR)/test-dynarray.Po -rm -f ./$(DEPDIR)/test-environ.Po -rm -f ./$(DEPDIR)/test-errno.Po -rm -f ./$(DEPDIR)/test-error.Po -rm -f ./$(DEPDIR)/test-euidaccess.Po -rm -f ./$(DEPDIR)/test-faccessat.Po -rm -f ./$(DEPDIR)/test-fchdir.Po -rm -f ./$(DEPDIR)/test-fcntl-h.Po -rm -f ./$(DEPDIR)/test-fcntl.Po -rm -f ./$(DEPDIR)/test-fdopen.Po -rm -f ./$(DEPDIR)/test-fgetc.Po -rm -f ./$(DEPDIR)/test-float.Po -rm -f ./$(DEPDIR)/test-fputc.Po -rm -f ./$(DEPDIR)/test-fread.Po -rm -f ./$(DEPDIR)/test-free.Po -rm -f ./$(DEPDIR)/test-fstat.Po -rm -f ./$(DEPDIR)/test-fstatat.Po -rm -f ./$(DEPDIR)/test-ftruncate.Po -rm -f ./$(DEPDIR)/test-func.Po -rm -f ./$(DEPDIR)/test-fwrite.Po -rm -f ./$(DEPDIR)/test-getcwd-lgpl.Po -rm -f ./$(DEPDIR)/test-getdelim.Po -rm -f ./$(DEPDIR)/test-getdtablesize.Po -rm -f ./$(DEPDIR)/test-getgroups.Po -rm -f ./$(DEPDIR)/test-getline.Po -rm -f ./$(DEPDIR)/test-getopt-gnu.Po -rm -f ./$(DEPDIR)/test-getopt-posix.Po -rm -f ./$(DEPDIR)/test-getprogname.Po -rm -f ./$(DEPDIR)/test-gettimeofday.Po -rm -f ./$(DEPDIR)/test-hard-locale.Po -rm -f ./$(DEPDIR)/test-ignore-value.Po -rm -f ./$(DEPDIR)/test-inet_pton.Po -rm -f ./$(DEPDIR)/test-intprops.Po -rm -f ./$(DEPDIR)/test-inttypes.Po -rm -f ./$(DEPDIR)/test-ioctl.Po -rm -f ./$(DEPDIR)/test-isblank.Po -rm -f ./$(DEPDIR)/test-isnand-nolibm.Po -rm -f ./$(DEPDIR)/test-isnanf-nolibm.Po -rm -f ./$(DEPDIR)/test-isnanl-nolibm.Po -rm -f ./$(DEPDIR)/test-iswblank.Po -rm -f ./$(DEPDIR)/test-iswctype.Po -rm -f ./$(DEPDIR)/test-iswdigit.Po -rm -f ./$(DEPDIR)/test-iswpunct.Po -rm -f ./$(DEPDIR)/test-iswxdigit.Po -rm -f ./$(DEPDIR)/test-langinfo.Po -rm -f ./$(DEPDIR)/test-largefile.Po -rm -f ./$(DEPDIR)/test-limits-h.Po -rm -f ./$(DEPDIR)/test-listen.Po -rm -f ./$(DEPDIR)/test-localcharset.Po -rm -f ./$(DEPDIR)/test-locale.Po -rm -f ./$(DEPDIR)/test-localeconv.Po -rm -f ./$(DEPDIR)/test-localename.Po -rm -f ./$(DEPDIR)/test-lock.Po -rm -f ./$(DEPDIR)/test-lstat.Po -rm -f ./$(DEPDIR)/test-malloc-gnu.Po -rm -f ./$(DEPDIR)/test-malloca.Po -rm -f ./$(DEPDIR)/test-math.Po -rm -f ./$(DEPDIR)/test-mbrtoc32-w32.Po -rm -f ./$(DEPDIR)/test-mbrtoc32.Po -rm -f ./$(DEPDIR)/test-mbrtowc-w32.Po -rm -f ./$(DEPDIR)/test-mbrtowc.Po -rm -f ./$(DEPDIR)/test-mbschr.Po -rm -f ./$(DEPDIR)/test-mbsinit.Po -rm -f ./$(DEPDIR)/test-mbspbrk.Po -rm -f ./$(DEPDIR)/test-mbsspn.Po -rm -f ./$(DEPDIR)/test-memchr.Po -rm -f ./$(DEPDIR)/test-memrchr.Po -rm -f ./$(DEPDIR)/test-nanosleep.Po -rm -f ./$(DEPDIR)/test-netinet_in.Po -rm -f ./$(DEPDIR)/test-nl_langinfo-mt.Po -rm -f ./$(DEPDIR)/test-nl_langinfo1.Po -rm -f ./$(DEPDIR)/test-nl_langinfo2.Po -rm -f ./$(DEPDIR)/test-once.Po -rm -f ./$(DEPDIR)/test-open.Po -rm -f ./$(DEPDIR)/test-openat.Po -rm -f ./$(DEPDIR)/test-pathmax.Po -rm -f ./$(DEPDIR)/test-perror.Po -rm -f ./$(DEPDIR)/test-perror2.Po -rm -f ./$(DEPDIR)/test-pipe.Po -rm -f ./$(DEPDIR)/test-pselect.Po -rm -f ./$(DEPDIR)/test-pthread-thread.Po -rm -f ./$(DEPDIR)/test-pthread.Po -rm -f ./$(DEPDIR)/test-pthread_sigmask1.Po -rm -f ./$(DEPDIR)/test-pthread_sigmask2.Po -rm -f ./$(DEPDIR)/test-raise.Po -rm -f ./$(DEPDIR)/test-random-mt.Po -rm -f ./$(DEPDIR)/test-random.Po -rm -f ./$(DEPDIR)/test-random_r.Po -rm -f ./$(DEPDIR)/test-rawmemchr.Po -rm -f ./$(DEPDIR)/test-realloc-gnu.Po -rm -f ./$(DEPDIR)/test-reallocarray.Po -rm -f ./$(DEPDIR)/test-regex.Po -rm -f ./$(DEPDIR)/test-rwlock1.Po -rm -f ./$(DEPDIR)/test-sched.Po -rm -f ./$(DEPDIR)/test-select-fd.Po -rm -f ./$(DEPDIR)/test-select-stdin.Po -rm -f ./$(DEPDIR)/test-select.Po -rm -f ./$(DEPDIR)/test-setenv.Po -rm -f ./$(DEPDIR)/test-setlocale1.Po -rm -f ./$(DEPDIR)/test-setlocale2.Po -rm -f ./$(DEPDIR)/test-setlocale_null-mt-all.Po -rm -f ./$(DEPDIR)/test-setlocale_null-mt-one.Po -rm -f ./$(DEPDIR)/test-setlocale_null.Po -rm -f ./$(DEPDIR)/test-setsockopt.Po -rm -f ./$(DEPDIR)/test-signal-h.Po -rm -f ./$(DEPDIR)/test-signbit.Po -rm -f ./$(DEPDIR)/test-sigprocmask.Po -rm -f ./$(DEPDIR)/test-sleep.Po -rm -f ./$(DEPDIR)/test-sockets.Po -rm -f ./$(DEPDIR)/test-stat-time.Po -rm -f ./$(DEPDIR)/test-stat.Po -rm -f ./$(DEPDIR)/test-stdbool.Po -rm -f ./$(DEPDIR)/test-stdckdint.Po -rm -f ./$(DEPDIR)/test-stddef.Po -rm -f ./$(DEPDIR)/test-stdint.Po -rm -f ./$(DEPDIR)/test-stdio.Po -rm -f ./$(DEPDIR)/test-stdlib.Po -rm -f ./$(DEPDIR)/test-strchrnul.Po -rm -f ./$(DEPDIR)/test-strerror.Po -rm -f ./$(DEPDIR)/test-strerror_r.Po -rm -f ./$(DEPDIR)/test-string.Po -rm -f ./$(DEPDIR)/test-strings.Po -rm -f ./$(DEPDIR)/test-strnlen.Po -rm -f ./$(DEPDIR)/test-strtod.Po -rm -f ./$(DEPDIR)/test-strtod1.Po -rm -f ./$(DEPDIR)/test-symlink.Po -rm -f ./$(DEPDIR)/test-sys_ioctl.Po -rm -f ./$(DEPDIR)/test-sys_select.Po -rm -f ./$(DEPDIR)/test-sys_socket.Po -rm -f ./$(DEPDIR)/test-sys_stat.Po -rm -f ./$(DEPDIR)/test-sys_time.Po -rm -f ./$(DEPDIR)/test-sys_types.Po -rm -f ./$(DEPDIR)/test-sys_uio.Po -rm -f ./$(DEPDIR)/test-sys_wait.Po -rm -f ./$(DEPDIR)/test-sysexits.Po -rm -f ./$(DEPDIR)/test-thread_create.Po -rm -f ./$(DEPDIR)/test-thread_self.Po -rm -f ./$(DEPDIR)/test-time-h.Po -rm -f ./$(DEPDIR)/test-time.Po -rm -f ./$(DEPDIR)/test-uchar.Po -rm -f ./$(DEPDIR)/test-unistd.Po -rm -f ./$(DEPDIR)/test-unsetenv.Po -rm -f ./$(DEPDIR)/test-usleep.Po -rm -f ./$(DEPDIR)/test-vasnprintf.Po -rm -f ./$(DEPDIR)/test-verify-try.Po -rm -f ./$(DEPDIR)/test-verify.Po -rm -f ./$(DEPDIR)/test-vsnprintf.Po -rm -f ./$(DEPDIR)/test-wchar.Po -rm -f ./$(DEPDIR)/test-wcrtomb-w32.Po -rm -f ./$(DEPDIR)/test-wcrtomb.Po -rm -f ./$(DEPDIR)/test-wctype-h.Po -rm -f ./$(DEPDIR)/test-wctype.Po -rm -f ./$(DEPDIR)/test-wcwidth.Po -rm -f ./$(DEPDIR)/test-xalloc-die.Po -rm -f ./$(DEPDIR)/unsetenv.Po -rm -f ./$(DEPDIR)/usleep.Po -rm -f ./$(DEPDIR)/wctob.Po -rm -f ./$(DEPDIR)/wctomb.Po -rm -f ./$(DEPDIR)/windows-thread.Po -rm -f ./$(DEPDIR)/windows-tls.Po -rm -f ./$(DEPDIR)/xalloc-die.Po -rm -f ./$(DEPDIR)/xmalloc.Po -rm -f glthread/$(DEPDIR)/thread.Po -rm -f unicase/$(DEPDIR)/test-uc_tolower.Po -rm -f unictype/$(DEPDIR)/test-ctype_alnum.Po -rm -f unictype/$(DEPDIR)/test-ctype_alpha.Po -rm -f unictype/$(DEPDIR)/test-ctype_blank.Po -rm -f unictype/$(DEPDIR)/test-ctype_cntrl.Po -rm -f unictype/$(DEPDIR)/test-ctype_digit.Po -rm -f unictype/$(DEPDIR)/test-ctype_graph.Po -rm -f unictype/$(DEPDIR)/test-ctype_lower.Po -rm -f unictype/$(DEPDIR)/test-ctype_print.Po -rm -f unictype/$(DEPDIR)/test-ctype_punct.Po -rm -f unictype/$(DEPDIR)/test-ctype_space.Po -rm -f unictype/$(DEPDIR)/test-ctype_upper.Po -rm -f unictype/$(DEPDIR)/test-ctype_xdigit.Po -rm -f uniwidth/$(DEPDIR)/test-uc_width.Po -rm -f uniwidth/$(DEPDIR)/test-uc_width2.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all check check-am install install-am \ install-exec install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-TESTS check-am clean \ clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \ clean-libtool clean-local clean-noinstLIBRARIES \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # We need the following in order to create <arpa/inet.h> when the system # doesn't have one. arpa/inet.h: arpa_inet.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(AM_V_GEN)$(MKDIR_P) 'arpa' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_ARPA_INET_H''@|$(NEXT_ARPA_INET_H)|g' \ -e 's|@''HAVE_ARPA_INET_H''@|$(HAVE_ARPA_INET_H)|g' \ -e 's/@''GNULIB_INET_NTOP''@/$(GL_GNULIB_INET_NTOP)/g' \ -e 's/@''GNULIB_INET_PTON''@/$(GL_GNULIB_INET_PTON)/g' \ -e 's|@''HAVE_WS2TCPIP_H''@|$(HAVE_WS2TCPIP_H)|g' \ -e 's|@''HAVE_DECL_INET_NTOP''@|$(HAVE_DECL_INET_NTOP)|g' \ -e 's|@''HAVE_DECL_INET_PTON''@|$(HAVE_DECL_INET_PTON)|g' \ -e 's|@''REPLACE_INET_NTOP''@|$(REPLACE_INET_NTOP)|g' \ -e 's|@''REPLACE_INET_PTON''@|$(REPLACE_INET_PTON)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/arpa_inet.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <ctype.h> when the system # doesn't have one that works with the given compiler. ctype.h: ctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_CTYPE_H''@|$(NEXT_CTYPE_H)|g' \ -e 's/@''GNULIB_ISBLANK''@/$(GL_GNULIB_ISBLANK)/g' \ -e 's/@''HAVE_ISBLANK''@/$(HAVE_ISBLANK)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/ctype.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <netinet/in.h> when the system # doesn't have one. @GL_GENERATE_NETINET_IN_H_TRUE@netinet/in.h: netinet_in.in.h $(top_builddir)/config.status @GL_GENERATE_NETINET_IN_H_TRUE@ $(AM_V_GEN)$(MKDIR_P) 'netinet' @GL_GENERATE_NETINET_IN_H_TRUE@ $(AM_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''NEXT_NETINET_IN_H''@|$(NEXT_NETINET_IN_H)|g' \ @GL_GENERATE_NETINET_IN_H_TRUE@ -e 's|@''HAVE_NETINET_IN_H''@|$(HAVE_NETINET_IN_H)|g' \ @GL_GENERATE_NETINET_IN_H_TRUE@ $(srcdir)/netinet_in.in.h > $@-t @GL_GENERATE_NETINET_IN_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_NETINET_IN_H_FALSE@netinet/in.h: $(top_builddir)/config.status @GL_GENERATE_NETINET_IN_H_FALSE@ rm -f $@ # We need the following in order to create <pthread.h> when the system # doesn't have one that works with the given compiler. pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_PTHREAD_H''@|$(HAVE_PTHREAD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_PTHREAD_H''@|$(NEXT_PTHREAD_H)|g' \ -e 's/@''GNULIB_PTHREAD_THREAD''@/$(GL_GNULIB_PTHREAD_THREAD)/g' \ -e 's/@''GNULIB_PTHREAD_ONCE''@/$(GL_GNULIB_PTHREAD_ONCE)/g' \ -e 's/@''GNULIB_PTHREAD_MUTEX''@/$(GL_GNULIB_PTHREAD_MUTEX)/g' \ -e 's/@''GNULIB_PTHREAD_RWLOCK''@/$(GL_GNULIB_PTHREAD_RWLOCK)/g' \ -e 's/@''GNULIB_PTHREAD_COND''@/$(GL_GNULIB_PTHREAD_COND)/g' \ -e 's/@''GNULIB_PTHREAD_TSS''@/$(GL_GNULIB_PTHREAD_TSS)/g' \ -e 's/@''GNULIB_PTHREAD_SPIN''@/$(GL_GNULIB_PTHREAD_SPIN)/g' \ -e 's/@''GNULIB_PTHREAD_MUTEX_TIMEDLOCK''@/$(GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK)/g' \ -e 's|@''HAVE_PTHREAD_T''@|$(HAVE_PTHREAD_T)|g' \ -e 's|@''HAVE_PTHREAD_SPINLOCK_T''@|$(HAVE_PTHREAD_SPINLOCK_T)|g' \ -e 's|@''HAVE_PTHREAD_CREATE_DETACHED''@|$(HAVE_PTHREAD_CREATE_DETACHED)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_RECURSIVE''@|$(HAVE_PTHREAD_MUTEX_RECURSIVE)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_ROBUST''@|$(HAVE_PTHREAD_MUTEX_ROBUST)|g' \ -e 's|@''HAVE_PTHREAD_PROCESS_SHARED''@|$(HAVE_PTHREAD_PROCESS_SHARED)|g' \ -e 's|@''HAVE_PTHREAD_CREATE''@|$(HAVE_PTHREAD_CREATE)|g' \ -e 's|@''HAVE_PTHREAD_ATTR_INIT''@|$(HAVE_PTHREAD_ATTR_INIT)|g' \ -e 's|@''HAVE_PTHREAD_ATTR_GETDETACHSTATE''@|$(HAVE_PTHREAD_ATTR_GETDETACHSTATE)|g' \ -e 's|@''HAVE_PTHREAD_ATTR_SETDETACHSTATE''@|$(HAVE_PTHREAD_ATTR_SETDETACHSTATE)|g' \ -e 's|@''HAVE_PTHREAD_ATTR_DESTROY''@|$(HAVE_PTHREAD_ATTR_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_SELF''@|$(HAVE_PTHREAD_SELF)|g' \ -e 's|@''HAVE_PTHREAD_EQUAL''@|$(HAVE_PTHREAD_EQUAL)|g' \ -e 's|@''HAVE_PTHREAD_DETACH''@|$(HAVE_PTHREAD_DETACH)|g' \ -e 's|@''HAVE_PTHREAD_JOIN''@|$(HAVE_PTHREAD_JOIN)|g' \ -e 's|@''HAVE_PTHREAD_EXIT''@|$(HAVE_PTHREAD_EXIT)|g' \ < $(srcdir)/pthread.in.h > $@-t1 $(AM_V_at)sed \ -e 's|@''HAVE_PTHREAD_ONCE''@|$(HAVE_PTHREAD_ONCE)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_INIT''@|$(HAVE_PTHREAD_MUTEX_INIT)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_INIT''@|$(HAVE_PTHREAD_MUTEXATTR_INIT)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_GETTYPE''@|$(HAVE_PTHREAD_MUTEXATTR_GETTYPE)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_SETTYPE''@|$(HAVE_PTHREAD_MUTEXATTR_SETTYPE)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_GETROBUST''@|$(HAVE_PTHREAD_MUTEXATTR_GETROBUST)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_SETROBUST''@|$(HAVE_PTHREAD_MUTEXATTR_SETROBUST)|g' \ -e 's|@''HAVE_PTHREAD_MUTEXATTR_DESTROY''@|$(HAVE_PTHREAD_MUTEXATTR_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_LOCK''@|$(HAVE_PTHREAD_MUTEX_LOCK)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_TRYLOCK''@|$(HAVE_PTHREAD_MUTEX_TRYLOCK)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_TIMEDLOCK''@|$(HAVE_PTHREAD_MUTEX_TIMEDLOCK)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_UNLOCK''@|$(HAVE_PTHREAD_MUTEX_UNLOCK)|g' \ -e 's|@''HAVE_PTHREAD_MUTEX_DESTROY''@|$(HAVE_PTHREAD_MUTEX_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_INIT''@|$(HAVE_PTHREAD_RWLOCK_INIT)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCKATTR_INIT''@|$(HAVE_PTHREAD_RWLOCKATTR_INIT)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCKATTR_DESTROY''@|$(HAVE_PTHREAD_RWLOCKATTR_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_RDLOCK''@|$(HAVE_PTHREAD_RWLOCK_RDLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_WRLOCK''@|$(HAVE_PTHREAD_RWLOCK_WRLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_TRYRDLOCK''@|$(HAVE_PTHREAD_RWLOCK_TRYRDLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_TRYWRLOCK''@|$(HAVE_PTHREAD_RWLOCK_TRYWRLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK''@|$(HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK''@|$(HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_UNLOCK''@|$(HAVE_PTHREAD_RWLOCK_UNLOCK)|g' \ -e 's|@''HAVE_PTHREAD_RWLOCK_DESTROY''@|$(HAVE_PTHREAD_RWLOCK_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_COND_INIT''@|$(HAVE_PTHREAD_COND_INIT)|g' \ -e 's|@''HAVE_PTHREAD_CONDATTR_INIT''@|$(HAVE_PTHREAD_CONDATTR_INIT)|g' \ -e 's|@''HAVE_PTHREAD_CONDATTR_DESTROY''@|$(HAVE_PTHREAD_CONDATTR_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_COND_WAIT''@|$(HAVE_PTHREAD_COND_WAIT)|g' \ -e 's|@''HAVE_PTHREAD_COND_TIMEDWAIT''@|$(HAVE_PTHREAD_COND_TIMEDWAIT)|g' \ -e 's|@''HAVE_PTHREAD_COND_SIGNAL''@|$(HAVE_PTHREAD_COND_SIGNAL)|g' \ -e 's|@''HAVE_PTHREAD_COND_BROADCAST''@|$(HAVE_PTHREAD_COND_BROADCAST)|g' \ -e 's|@''HAVE_PTHREAD_COND_DESTROY''@|$(HAVE_PTHREAD_COND_DESTROY)|g' \ -e 's|@''HAVE_PTHREAD_KEY_CREATE''@|$(HAVE_PTHREAD_KEY_CREATE)|g' \ -e 's|@''HAVE_PTHREAD_SETSPECIFIC''@|$(HAVE_PTHREAD_SETSPECIFIC)|g' \ -e 's|@''HAVE_PTHREAD_GETSPECIFIC''@|$(HAVE_PTHREAD_GETSPECIFIC)|g' \ -e 's|@''HAVE_PTHREAD_KEY_DELETE''@|$(HAVE_PTHREAD_KEY_DELETE)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_INIT''@|$(HAVE_PTHREAD_SPIN_INIT)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_LOCK''@|$(HAVE_PTHREAD_SPIN_LOCK)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_TRYLOCK''@|$(HAVE_PTHREAD_SPIN_TRYLOCK)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_UNLOCK''@|$(HAVE_PTHREAD_SPIN_UNLOCK)|g' \ -e 's|@''HAVE_PTHREAD_SPIN_DESTROY''@|$(HAVE_PTHREAD_SPIN_DESTROY)|g' \ < $@-t1 > $@-t2 $(AM_V_at)sed \ -e 's|@''REPLACE_PTHREAD_CREATE''@|$(REPLACE_PTHREAD_CREATE)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_INIT''@|$(REPLACE_PTHREAD_ATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_GETDETACHSTATE''@|$(REPLACE_PTHREAD_ATTR_GETDETACHSTATE)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_SETDETACHSTATE''@|$(REPLACE_PTHREAD_ATTR_SETDETACHSTATE)|g' \ -e 's|@''REPLACE_PTHREAD_ATTR_DESTROY''@|$(REPLACE_PTHREAD_ATTR_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_SELF''@|$(REPLACE_PTHREAD_SELF)|g' \ -e 's|@''REPLACE_PTHREAD_EQUAL''@|$(REPLACE_PTHREAD_EQUAL)|g' \ -e 's|@''REPLACE_PTHREAD_DETACH''@|$(REPLACE_PTHREAD_DETACH)|g' \ -e 's|@''REPLACE_PTHREAD_JOIN''@|$(REPLACE_PTHREAD_JOIN)|g' \ -e 's|@''REPLACE_PTHREAD_EXIT''@|$(REPLACE_PTHREAD_EXIT)|g' \ -e 's|@''REPLACE_PTHREAD_ONCE''@|$(REPLACE_PTHREAD_ONCE)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_INIT''@|$(REPLACE_PTHREAD_MUTEX_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_INIT''@|$(REPLACE_PTHREAD_MUTEXATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_GETTYPE''@|$(REPLACE_PTHREAD_MUTEXATTR_GETTYPE)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_SETTYPE''@|$(REPLACE_PTHREAD_MUTEXATTR_SETTYPE)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_GETROBUST''@|$(REPLACE_PTHREAD_MUTEXATTR_GETROBUST)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_SETROBUST''@|$(REPLACE_PTHREAD_MUTEXATTR_SETROBUST)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEXATTR_DESTROY''@|$(REPLACE_PTHREAD_MUTEXATTR_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_LOCK''@|$(REPLACE_PTHREAD_MUTEX_LOCK)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_TRYLOCK''@|$(REPLACE_PTHREAD_MUTEX_TRYLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_TIMEDLOCK''@|$(REPLACE_PTHREAD_MUTEX_TIMEDLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_UNLOCK''@|$(REPLACE_PTHREAD_MUTEX_UNLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_MUTEX_DESTROY''@|$(REPLACE_PTHREAD_MUTEX_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_INIT''@|$(REPLACE_PTHREAD_RWLOCK_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCKATTR_INIT''@|$(REPLACE_PTHREAD_RWLOCKATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCKATTR_DESTROY''@|$(REPLACE_PTHREAD_RWLOCKATTR_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_RDLOCK''@|$(REPLACE_PTHREAD_RWLOCK_RDLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_WRLOCK''@|$(REPLACE_PTHREAD_RWLOCK_WRLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_TRYRDLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TRYRDLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_TRYWRLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TRYWRLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_UNLOCK''@|$(REPLACE_PTHREAD_RWLOCK_UNLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_RWLOCK_DESTROY''@|$(REPLACE_PTHREAD_RWLOCK_DESTROY)|g' \ < $@-t2 > $@-t3 $(AM_V_at)sed \ -e 's|@''REPLACE_PTHREAD_COND_INIT''@|$(REPLACE_PTHREAD_COND_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_CONDATTR_INIT''@|$(REPLACE_PTHREAD_CONDATTR_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_CONDATTR_DESTROY''@|$(REPLACE_PTHREAD_CONDATTR_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_COND_WAIT''@|$(REPLACE_PTHREAD_COND_WAIT)|g' \ -e 's|@''REPLACE_PTHREAD_COND_TIMEDWAIT''@|$(REPLACE_PTHREAD_COND_TIMEDWAIT)|g' \ -e 's|@''REPLACE_PTHREAD_COND_SIGNAL''@|$(REPLACE_PTHREAD_COND_SIGNAL)|g' \ -e 's|@''REPLACE_PTHREAD_COND_BROADCAST''@|$(REPLACE_PTHREAD_COND_BROADCAST)|g' \ -e 's|@''REPLACE_PTHREAD_COND_DESTROY''@|$(REPLACE_PTHREAD_COND_DESTROY)|g' \ -e 's|@''REPLACE_PTHREAD_KEY_CREATE''@|$(REPLACE_PTHREAD_KEY_CREATE)|g' \ -e 's|@''REPLACE_PTHREAD_SETSPECIFIC''@|$(REPLACE_PTHREAD_SETSPECIFIC)|g' \ -e 's|@''REPLACE_PTHREAD_GETSPECIFIC''@|$(REPLACE_PTHREAD_GETSPECIFIC)|g' \ -e 's|@''REPLACE_PTHREAD_KEY_DELETE''@|$(REPLACE_PTHREAD_KEY_DELETE)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_INIT''@|$(REPLACE_PTHREAD_SPIN_INIT)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_LOCK''@|$(REPLACE_PTHREAD_SPIN_LOCK)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_TRYLOCK''@|$(REPLACE_PTHREAD_SPIN_TRYLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_UNLOCK''@|$(REPLACE_PTHREAD_SPIN_UNLOCK)|g' \ -e 's|@''REPLACE_PTHREAD_SPIN_DESTROY''@|$(REPLACE_PTHREAD_SPIN_DESTROY)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ < $@-t3 > $@-t4 $(AM_V_at)rm -f $@-t1 $@-t2 $@-t3 $(AM_V_at)mv $@-t4 $@ # We need the following in order to create a replacement for <sched.h> when # the system doesn't have one. sched.h: sched.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_SCHED_H''@|$(HAVE_SCHED_H)|g' \ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SCHED_H''@|$(NEXT_SCHED_H)|g' \ -e 's|@''HAVE_STRUCT_SCHED_PARAM''@|$(HAVE_STRUCT_SCHED_PARAM)|g' \ -e 's/@''GNULIB_SCHED_YIELD''@/$(GL_GNULIB_SCHED_YIELD)/g' \ -e 's|@''HAVE_SCHED_YIELD''@|$(HAVE_SCHED_YIELD)|g' \ -e 's|@''REPLACE_SCHED_YIELD''@|$(REPLACE_SCHED_YIELD)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sched.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/ioctl.h> when the system # does not have a complete one. sys/ioctl.h: sys_ioctl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_SYS_IOCTL_H''@|$(HAVE_SYS_IOCTL_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_IOCTL_H''@|$(NEXT_SYS_IOCTL_H)|g' \ -e 's/@''GNULIB_IOCTL''@/$(GL_GNULIB_IOCTL)/g' \ -e 's|@''SYS_IOCTL_H_HAVE_WINSOCK2_H''@|$(SYS_IOCTL_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e 's|@''REPLACE_IOCTL''@|$(REPLACE_IOCTL)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_ioctl.in.h > $@-t $(AM_V_at)mv $@-t $@ all: all-notice all-notice: @echo '## ---------------------------------------------------- ##' @echo '## ------------------- Gnulib tests ------------------- ##' @echo '## You can ignore compiler warnings in this directory. ##' @echo '## ---------------------------------------------------- ##' check-am: check-notice check-notice: @echo '## ---------------------------------------------------------------------- ##' @echo '## ---------------------------- Gnulib tests ---------------------------- ##' @echo '## Please report test failures in this directory to <bug-gnulib@gnu.org>. ##' @echo '## ---------------------------------------------------------------------- ##' # Clean up after Solaris cc. clean-local: rm -rf SunWS_cache mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/accept.c�����������������������������������������������������������0000644�0001750�0001750�00000002562�14557510506�014250� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* accept.c --- wrappers for Windows accept function Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef accept int rpl_accept (int fd, struct sockaddr *addr, socklen_t *addrlen) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { SOCKET fh = accept (sock, addr, addrlen); if (fh == INVALID_SOCKET) { set_winsock_errno (); return -1; } else return SOCKET_TO_FD (fh); } } ����������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/binary-io.h��������������������������������������������������������0000644�0001750�0001750�00000004723�14557510507�014711� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Binary mode I/O. Copyright (C) 2001, 2003, 2005, 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _BINARY_H #define _BINARY_H /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_UNUSED. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* For systems that distinguish between text and binary I/O. O_BINARY is guaranteed by the gnulib <fcntl.h>. */ #include <fcntl.h> /* The MSVC7 <stdio.h> doesn't like to be included after '#define fileno ...', so we include it here first. */ #include <stdio.h> _GL_INLINE_HEADER_BEGIN #ifndef BINARY_IO_INLINE # define BINARY_IO_INLINE _GL_INLINE #endif #if O_BINARY # if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__ # include <io.h> /* declares setmode() */ # define __gl_setmode setmode # else # define __gl_setmode _setmode # undef fileno # define fileno _fileno # endif #else /* On reasonable systems, binary I/O is the only choice. */ /* Use a function rather than a macro, to avoid gcc warnings "warning: statement with no effect". */ BINARY_IO_INLINE int __gl_setmode (_GL_UNUSED int fd, _GL_UNUSED int mode) { return O_BINARY; } #endif /* Set FD's mode to MODE, which should be either O_TEXT or O_BINARY. Return the old mode if successful, -1 (setting errno) on failure. Ordinarily this function would be called 'setmode', since that is its old name on MS-Windows, but it is called 'set_binary_mode' here to avoid colliding with a BSD function of another name. */ #if defined __DJGPP__ || defined __EMX__ extern int set_binary_mode (int fd, int mode); #else BINARY_IO_INLINE int set_binary_mode (int fd, int mode) { return __gl_setmode (fd, mode); } #endif /* This macro is obsolescent. */ #define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY)) _GL_INLINE_HEADER_END #endif /* _BINARY_H */ ���������������������������������������������gnuastro-0.22/bootstrapped/tests/binary-io.c��������������������������������������������������������0000644�0001750�0001750�00000002500�14557510507�014673� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Binary mode I/O. Copyright 2017-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define BINARY_IO_INLINE _GL_EXTERN_INLINE #include "binary-io.h" #if defined __DJGPP__ || defined __EMX__ # include <unistd.h> int set_binary_mode (int fd, int mode) { if (isatty (fd)) /* If FD refers to a console (not a pipe, not a regular file), O_TEXT is the only reasonable mode, both on input and on output. Silently ignore the request. If we were to return -1 here, all programs that use xset_binary_mode would fail when run with console input or console output. */ return O_TEXT; else return __gl_setmode (fd, mode); } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/bind.c�������������������������������������������������������������0000644�0001750�0001750�00000002423�14557510507�013722� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* bind.c --- wrappers for Windows bind function Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef bind int rpl_bind (int fd, const struct sockaddr *sockaddr, socklen_t len) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = bind (sock, sockaddr, len); if (r < 0) set_winsock_errno (); return r; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/btoc32.c�����������������������������������������������������������0000644�0001750�0001750�00000003502�14557510507�014101� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert unibyte character to 32-bit wide character. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2020. */ #include <config.h> #define IN_BTOC32 /* Specification. */ #include <uchar.h> #include <stdio.h> #include <string.h> #include <wchar.h> #if GL_CHAR32_T_IS_UNICODE # include "lc-charset-unicode.h" #endif #if _GL_WCHAR_T_IS_UCS4 _GL_EXTERN_INLINE #endif wint_t btoc32 (int c) { #if HAVE_WORKING_MBRTOC32 && !_GL_WCHAR_T_IS_UCS4 /* The char32_t encoding of a multibyte character may be different than its wchar_t encoding. */ if (c != EOF) { mbstate_t state; char s[1]; char32_t wc; mbszero (&state); s[0] = (unsigned char) c; if (mbrtoc32 (&wc, s, 1, &state) <= 1) return wc; } return WEOF; #else /* In all known locale encodings, unibyte characters correspond only to characters in the BMP. */ wint_t wc = btowc (c); # if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION if (wc != WEOF && wc != 0) { wc = locale_encoding_to_unicode (wc); if (wc == 0) return WEOF; } # endif return wc; #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/c-strcase.h��������������������������������������������������������0000644�0001750�0001750�00000004244�14557510507�014702� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison functions in C locale. Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef C_STRCASE_H #define C_STRCASE_H /* This file uses _GL_ATTRIBUTE_PURE. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <stddef.h> /* The functions defined in this file assume the "C" locale and a character set without diacritics (ASCII-US or EBCDIC-US or something like that). Even if the "C" locale on a particular system is an extension of the ASCII character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it is ISO-8859-1), the functions in this file recognize only the ASCII characters. More precisely, one of the string arguments must be an ASCII string; the other one can also contain non-ASCII characters (but then the comparison result will be nonzero). */ #ifdef __cplusplus extern "C" { #endif /* Compare strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. */ extern int c_strcasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE; /* Compare no more than N characters of strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. */ extern int c_strncasecmp (const char *s1, const char *s2, size_t n) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } #endif #endif /* C_STRCASE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/c-strcasecmp.c�����������������������������������������������������0000644�0001750�0001750�00000003066�14557510507�015376� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* c-strcasecmp.c -- case insensitive string comparator in C locale Copyright (C) 1998-1999, 2005-2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "c-strcase.h" #include <limits.h> #include "c-ctype.h" int c_strcasecmp (const char *s1, const char *s2) { register const unsigned char *p1 = (const unsigned char *) s1; register const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2) return 0; do { c1 = c_tolower (*p1); c2 = c_tolower (*p2); if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/c-strncasecmp.c����������������������������������������������������0000644�0001750�0001750�00000003130�14557510507�015544� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* c-strncasecmp.c -- case insensitive string comparator in C locale Copyright (C) 1998-1999, 2005-2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "c-strcase.h" #include <limits.h> #include "c-ctype.h" int c_strncasecmp (const char *s1, const char *s2, size_t n) { register const unsigned char *p1 = (const unsigned char *) s1; register const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2 || n == 0) return 0; do { c1 = c_tolower (*p1); c2 = c_tolower (*p2); if (--n == 0 || c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/c-strcasestr.h�����������������������������������������������������0000644�0001750�0001750�00000002112�14557510507�015423� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive searching in a string in C locale. Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef C_STRCASESTR_H #define C_STRCASESTR_H #ifdef __cplusplus extern "C" { #endif /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. */ extern char *c_strcasestr (const char *haystack, const char *needle); #ifdef __cplusplus } #endif #endif /* C_STRCASESTR_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/c-strcasestr.c�����������������������������������������������������0000644�0001750�0001750�00000005660�14557510507�015431� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* c-strcasestr.c -- case insensitive substring search in C locale Copyright (C) 2005-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "c-strcasestr.h" #include <string.h> #include "c-ctype.h" #include "c-strcase.h" /* Two-Way algorithm. */ #define RETURN_TYPE char * #define AVAILABLE(h, h_l, j, n_l) \ (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l)) \ && ((h_l) = (j) + (n_l))) #define CANON_ELEMENT c_tolower #define CMP_FUNC(p1, p2, l) \ c_strncasecmp ((const char *) (p1), (const char *) (p2), l) #include "str-two-way.h" /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison from the C locale, regardless of the current locale. */ char * c_strcasestr (const char *haystack_start, const char *needle_start) { const char *haystack = haystack_start; const char *needle = needle_start; size_t needle_len; /* Length of NEEDLE. */ size_t haystack_len; /* Known minimum length of HAYSTACK. */ bool ok = true; /* True if NEEDLE is prefix of HAYSTACK. */ /* Determine length of NEEDLE, and in the process, make sure HAYSTACK is at least as long (no point processing all of a long NEEDLE if HAYSTACK is too short). */ while (*haystack && *needle) ok &= (c_tolower ((unsigned char) *haystack++) == c_tolower ((unsigned char) *needle++)); if (*needle) return NULL; if (ok) return (char *) haystack_start; needle_len = needle - needle_start; haystack = haystack_start + 1; haystack_len = needle_len - 1; /* Perform the search. Abstract memory is considered to be an array of 'unsigned char' values, not an array of 'char' values. See ISO C 99 section 6.2.6.1. */ if (needle_len < LONG_NEEDLE_THRESHOLD) return two_way_short_needle ((const unsigned char *) haystack, haystack_len, (const unsigned char *) needle_start, needle_len); return two_way_long_needle ((const unsigned char *) haystack, haystack_len, (const unsigned char *) needle_start, needle_len); } #undef LONG_NEEDLE_THRESHOLD ��������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/c32rtomb.c���������������������������������������������������������0000644�0001750�0001750�00000007075�14557510507�014451� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 32-bit wide character to multibyte character. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2020. */ #include <config.h> /* Specification. */ #include <uchar.h> #include <errno.h> #include <wchar.h> #include "attribute.h" /* FALLTHROUGH */ #include "localcharset.h" #include "streq.h" #if GL_CHAR32_T_IS_UNICODE # include "lc-charset-unicode.h" #endif size_t c32rtomb (char *s, char32_t wc, mbstate_t *ps) #undef c32rtomb { #if HAVE_WORKING_MBRTOC32 # if C32RTOMB_RETVAL_BUG if (s == NULL) /* We know the NUL wide character corresponds to the NUL character. */ return 1; # endif return c32rtomb (s, wc, ps); #elif _GL_SMALL_WCHAR_T if (s == NULL) return wcrtomb (NULL, 0, ps); else { /* Special-case all encodings that may produce wide character values > WCHAR_MAX. */ const char *encoding = locale_charset (); if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) { /* Special-case the UTF-8 encoding. Assume that the wide-character encoding in a UTF-8 locale is UCS-2 or, equivalently, UTF-16. */ if (wc < 0x80) { s[0] = (unsigned char) wc; return 1; } else { int count; if (wc < 0x800) count = 2; else if (wc < 0x10000) { if (wc < 0xd800 || wc >= 0xe000) count = 3; else { errno = EILSEQ; return (size_t)(-1); } } else if (wc < 0x110000) count = 4; else { errno = EILSEQ; return (size_t)(-1); } switch (count) /* note: code falls through cases! */ { case 4: s[3] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x10000; FALLTHROUGH; case 3: s[2] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x800; FALLTHROUGH; case 2: s[1] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0xc0; /*case 1:*/ s[0] = wc; } return count; } } else { if ((wchar_t) wc == wc) return wcrtomb (s, (wchar_t) wc, ps); else { errno = EILSEQ; return (size_t)(-1); } } } #else /* char32_t and wchar_t are equivalent. */ # if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION if (wc != 0) { wc = unicode_to_locale_encoding (wc); if (wc == 0) { errno = EILSEQ; return (size_t)(-1); } } # endif return wcrtomb (s, (wchar_t) wc, ps); #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/c32tob.c�����������������������������������������������������������0000644�0001750�0001750�00000003564�14557510507�014111� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert 32-bit wide character to unibyte character. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2020. */ #include <config.h> #define IN_C32TOB /* Specification. */ #include <uchar.h> #include <stdio.h> #include <string.h> #include <wchar.h> #if GL_CHAR32_T_IS_UNICODE # include "lc-charset-unicode.h" #endif #if _GL_WCHAR_T_IS_UCS4 _GL_EXTERN_INLINE #endif int c32tob (wint_t wc) { #if HAVE_WORKING_MBRTOC32 && !_GL_WCHAR_T_IS_UCS4 /* The char32_t encoding of a multibyte character may be different than its wchar_t encoding. */ if (wc != WEOF) { mbstate_t state; char buf[8]; mbszero (&state); if (c32rtomb (buf, wc, &state) == 1) return (unsigned char) buf[0]; } return EOF; #elif _GL_SMALL_WCHAR_T /* In all known encodings, unibyte characters correspond only to characters in the BMP. */ if (wc != WEOF && (wchar_t) wc == wc) return wctob ((wchar_t) wc); else return EOF; #else # if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION if (wc != 0) { wc = unicode_to_locale_encoding (wc); if (wc == 0) return EOF; } # endif return wctob (wc); #endif } ��������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/connect.c����������������������������������������������������������0000644�0001750�0001750�00000003037�14557510507�014441� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* connect.c --- wrappers for Windows connect function Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef connect int rpl_connect (int fd, const struct sockaddr *sockaddr, socklen_t len) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = connect (sock, sockaddr, len); if (r < 0) { /* EINPROGRESS is not returned by WinSock 2.0; for backwards compatibility, connect(2) uses EWOULDBLOCK. */ if (WSAGetLastError () == WSAEWOULDBLOCK) WSASetLastError (WSAEINPROGRESS); set_winsock_errno (); } return r; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/creat.c������������������������������������������������������������0000644�0001750�0001750�00000005440�14557510507�014106� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a file. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* If the user's config.h happens to include <fcntl.h>, let it include only the system's <fcntl.h> here, so that orig_creat doesn't recurse to rpl_creat. */ #define __need_system_fcntl_h #include <config.h> /* Get the original definition of creat. It might be defined as a macro. */ #include <fcntl.h> #include <sys/types.h> #undef __need_system_fcntl_h static int orig_creat (const char *filename, mode_t mode) { #if defined _WIN32 && !defined __CYGWIN__ return _creat (filename, mode); #else return creat (filename, mode); #endif } /* Specification. */ #ifdef __osf__ /* Write "fcntl.h" here, not <fcntl.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <fcntl.h> above. */ # include "fcntl.h" #else # include <fcntl.h> #endif #include <errno.h> #include <string.h> #include <sys/types.h> int creat (const char *filename, mode_t mode) { #if OPEN_TRAILING_SLASH_BUG /* Fail if the filename ends in a slash, as POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" creat() is defined as being equivalent to open() with flags O_CREAT | O_TRUNC | O_WRONLY. Therefore: If the named file already exists as a directory, then creat() must fail with errno = EISDIR. If the named file does not exist or does not name a directory, then creat() must fail since creat() cannot create directories. */ { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { errno = EISDIR; return -1; } } #endif #if defined _WIN32 && !defined __CYGWIN__ /* Remap the 'x' bits to the 'r' bits. */ mode = (mode & ~0111) | ((mode & 0111) << 2); #endif return orig_creat (filename, mode); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/dup.c��������������������������������������������������������������0000644�0001750�0001750�00000003637�14557510507�013606� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate an open file descriptor. Copyright (C) 2011-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef dup #if defined _WIN32 && !defined __CYGWIN__ # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int dup_nothrow (int fd) { int result; TRY_MSVC_INVAL { result = _dup (fd); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define dup_nothrow _dup # endif #elif defined __KLIBC__ # include <fcntl.h> # include <sys/stat.h> # include <InnoTekLIBC/backend.h> static int dup_nothrow (int fd) { int dupfd; struct stat sbuf; dupfd = dup (fd); if (dupfd == -1 && errno == ENOTSUP \ && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { char path[_MAX_PATH]; /* Get a path from fd */ if (!__libc_Back_ioFHToPath (fd, path, sizeof (path))) dupfd = open (path, O_RDONLY); } return dupfd; } #else # define dup_nothrow dup #endif int rpl_dup (int fd) { int result = dup_nothrow (fd); #if REPLACE_FCHDIR if (result >= 0) result = _gl_register_dup (fd, result); #endif return result; } �������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/fdopen.c�����������������������������������������������������������0000644�0001750�0001750�00000003105�14557510507�014257� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a stream with a given file descriptor. Copyright (C) 2011-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef fdopen #if defined _WIN32 && !defined __CYGWIN__ # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static FILE * fdopen_nothrow (int fd, const char *mode) { FILE *result; TRY_MSVC_INVAL { result = _fdopen (fd, mode); } CATCH_MSVC_INVAL { result = NULL; } DONE_MSVC_INVAL; return result; } # else # define fdopen_nothrow _fdopen # endif #else # define fdopen_nothrow fdopen #endif FILE * rpl_fdopen (int fd, const char *mode) { int saved_errno = errno; FILE *fp; errno = 0; fp = fdopen_nothrow (fd, mode); if (fp == NULL) { if (errno == 0) errno = EBADF; } else errno = saved_errno; return fp; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/ftruncate.c��������������������������������������������������������0000644�0001750�0001750�00000011740�14557510507�015003� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ftruncate emulations for native Windows. Copyright (C) 1992-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if HAVE__CHSIZE /* A native Windows platform. */ # include <errno.h> # if _GL_WINDOWS_64_BIT_OFF_T /* Large File Support: off_t is 64-bit, but _chsize() takes only a 32-bit argument. So, define a 64-bit safe SetFileSize function ourselves. */ /* Ensure that <windows.h> declares GetFileSizeEx. */ # if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN2K) # undef _WIN32_WINNT # define _WIN32_WINNT _WIN32_WINNT_WIN2K # endif /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif static BOOL SetFileSize (HANDLE h, LONGLONG size) { LARGE_INTEGER old_size; if (!GetFileSizeEx (h, &old_size)) return FALSE; if (size != old_size.QuadPart) { /* Duplicate the handle, so we are free to modify its file position. */ HANDLE curr_process = GetCurrentProcess (); HANDLE tmph; if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ h, /* SourceHandle */ curr_process, /* TargetProcessHandle */ (PHANDLE) &tmph, /* TargetHandle */ (DWORD) 0, /* DesiredAccess */ FALSE, /* InheritHandle */ DUPLICATE_SAME_ACCESS)) /* Options */ return FALSE; if (size < old_size.QuadPart) { /* Reduce the size. */ LONG size_hi = (LONG) (size >> 32); if (SetFilePointer (tmph, (LONG) size, &size_hi, FILE_BEGIN) == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) { CloseHandle (tmph); return FALSE; } if (!SetEndOfFile (tmph)) { CloseHandle (tmph); return FALSE; } } else { /* Increase the size by adding zero bytes at the end. */ static char zero_bytes[1024]; LONG pos_hi = 0; LONG pos_lo = SetFilePointer (tmph, (LONG) 0, &pos_hi, FILE_END); LONGLONG pos; if (pos_lo == INVALID_SET_FILE_POINTER && GetLastError() != NO_ERROR) { CloseHandle (tmph); return FALSE; } pos = ((LONGLONG) pos_hi << 32) | (ULONGLONG) (ULONG) pos_lo; while (pos < size) { DWORD written; LONGLONG count = size - pos; if (count > sizeof (zero_bytes)) count = sizeof (zero_bytes); if (!WriteFile (tmph, zero_bytes, (DWORD) count, &written, NULL) || written == 0) { CloseHandle (tmph); return FALSE; } pos += (ULONGLONG) (ULONG) written; } } /* Close the handle. */ CloseHandle (tmph); } return TRUE; } int ftruncate (int fd, off_t length) { HANDLE handle = (HANDLE) _get_osfhandle (fd); if (handle == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } if (length < 0) { errno = EINVAL; return -1; } if (!SetFileSize (handle, length)) { switch (GetLastError ()) { case ERROR_ACCESS_DENIED: errno = EACCES; break; case ERROR_HANDLE_DISK_FULL: case ERROR_DISK_FULL: case ERROR_DISK_TOO_FRAGMENTED: errno = ENOSPC; break; default: errno = EIO; break; } return -1; } return 0; } # else # include <io.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" static int chsize_nothrow (int fd, long length) { int result; TRY_MSVC_INVAL { result = _chsize (fd, length); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define chsize_nothrow _chsize # endif int ftruncate (int fd, off_t length) { return chsize_nothrow (fd, length); } # endif #endif ��������������������������������gnuastro-0.22/bootstrapped/tests/getpagesize.c������������������������������������������������������0000644�0001750�0001750�00000002267�14557510507�015323� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getpagesize emulation for systems where it cannot be done in a C macro. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible and Martin Lambers. */ #include <config.h> /* Specification. */ #include <unistd.h> /* This implementation is only for native Windows systems. */ #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> int getpagesize (void) { SYSTEM_INFO system_info; GetSystemInfo (&system_info); return system_info.dwPageSize; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/ialloc.c�����������������������������������������������������������0000644�0001750�0001750�00000001512�14557510507�014247� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* malloc with idx_t rather than size_t Copyright 2021-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IALLOC_INLINE _GL_EXTERN_INLINE #include "ialloc.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/inet_pton.c��������������������������������������������������������0000644�0001750�0001750�00000015414�14557510507�015011� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* inet_pton.c -- convert IPv4 and IPv6 addresses from text to binary form Copyright (C) 2006, 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* * Copyright (c) 1996,1999 by Internet Software Consortium. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. */ #include <config.h> /* Specification. */ #include <arpa/inet.h> #if HAVE_DECL_INET_PTON # undef inet_pton int rpl_inet_pton (int af, const char *restrict src, void *restrict dst) { return inet_pton (af, src, dst); } #else # include <c-ctype.h> # include <string.h> # include <errno.h> # define NS_INADDRSZ 4 # define NS_IN6ADDRSZ 16 # define NS_INT16SZ 2 /* * WARNING: Don't even consider trying to compile this on a system where * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. */ static int inet_pton4 (const char *src, unsigned char *dst); # if HAVE_IPV6 static int inet_pton6 (const char *src, unsigned char *dst); # endif /* int * inet_pton(af, src, dst) * convert from presentation format (which usually means ASCII printable) * to network format (which is usually some kind of binary format). * return: * 1 if the address was valid for the specified address family * 0 if the address wasn't valid ('dst' is untouched in this case) * -1 if some other error occurred ('dst' is untouched in this case, too) * author: * Paul Vixie, 1996. */ int inet_pton (int af, const char *restrict src, void *restrict dst) { switch (af) { case AF_INET: return (inet_pton4 (src, dst)); # if HAVE_IPV6 case AF_INET6: return (inet_pton6 (src, dst)); # endif default: errno = EAFNOSUPPORT; return (-1); } /* NOTREACHED */ } /* int * inet_pton4(src, dst) * like inet_aton() but without all the hexadecimal, octal (with the * exception of 0) and shorthand. * return: * 1 if 'src' is a valid dotted quad, else 0. * notice: * does not touch 'dst' unless it's returning 1. * author: * Paul Vixie, 1996. */ static int inet_pton4 (const char *restrict src, unsigned char *restrict dst) { int saw_digit, octets, ch; unsigned char tmp[NS_INADDRSZ], *tp; saw_digit = 0; octets = 0; *(tp = tmp) = 0; while ((ch = *src++) != '\0') { if (ch >= '0' && ch <= '9') { unsigned new = *tp * 10 + (ch - '0'); if (saw_digit && *tp == 0) return (0); if (new > 255) return (0); *tp = new; if (!saw_digit) { if (++octets > 4) return (0); saw_digit = 1; } } else if (ch == '.' && saw_digit) { if (octets == 4) return (0); *++tp = 0; saw_digit = 0; } else return (0); } if (octets < 4) return (0); memcpy (dst, tmp, NS_INADDRSZ); return (1); } # if HAVE_IPV6 /* int * inet_pton6(src, dst) * convert presentation level address to network order binary form. * return: * 1 if 'src' is a valid [RFC1884 2.2] address, else 0. * notice: * (1) does not touch 'dst' unless it's returning 1. * (2) :: in a full address is silently ignored. * credit: * inspired by Mark Andrews. * author: * Paul Vixie, 1996. */ static int inet_pton6 (const char *restrict src, unsigned char *restrict dst) { static const char xdigits[] = "0123456789abcdef"; unsigned char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp; const char *curtok; int ch, saw_xdigit; unsigned val; tp = memset (tmp, '\0', NS_IN6ADDRSZ); endp = tp + NS_IN6ADDRSZ; colonp = NULL; /* Leading :: requires some special handling. */ if (*src == ':') if (*++src != ':') return (0); curtok = src; saw_xdigit = 0; val = 0; while ((ch = c_tolower (*src++)) != '\0') { const char *pch; pch = strchr (xdigits, ch); if (pch != NULL) { val <<= 4; val |= (pch - xdigits); if (val > 0xffff) return (0); saw_xdigit = 1; continue; } if (ch == ':') { curtok = src; if (!saw_xdigit) { if (colonp) return (0); colonp = tp; continue; } else if (*src == '\0') { return (0); } if (tp + NS_INT16SZ > endp) return (0); *tp++ = (u_char) (val >> 8) & 0xff; *tp++ = (u_char) val & 0xff; saw_xdigit = 0; val = 0; continue; } if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) && inet_pton4 (curtok, tp) > 0) { tp += NS_INADDRSZ; saw_xdigit = 0; break; /* '\0' was seen by inet_pton4(). */ } return (0); } if (saw_xdigit) { if (tp + NS_INT16SZ > endp) return (0); *tp++ = (u_char) (val >> 8) & 0xff; *tp++ = (u_char) val & 0xff; } if (colonp != NULL) { /* * Since some memmove()'s erroneously fail to handle * overlapping regions, we'll do the shift by hand. */ const int n = tp - colonp; int i; if (tp == endp) return (0); for (i = 1; i <= n; i++) { endp[-i] = colonp[n - i]; colonp[n - i] = 0; } tp = endp; } if (tp != endp) return (0); memcpy (dst, tmp, NS_IN6ADDRSZ); return (1); } # endif #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/ioctl.c������������������������������������������������������������0000644�0001750�0001750�00000004374�14557510507�014127� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ioctl.c --- wrappers for Windows ioctl function Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini */ #include <config.h> #include <sys/ioctl.h> #include <stdarg.h> #if HAVE_IOCTL /* Provide a wrapper with the POSIX prototype. */ # undef ioctl int rpl_ioctl (int fd, int request, ... /* {void *,char *} arg */) { void *buf; va_list args; va_start (args, request); buf = va_arg (args, void *); va_end (args); /* Cast 'request' so that when the system's ioctl function takes a 64-bit request argument, the value gets zero-extended, not sign-extended. */ return ioctl (fd, (unsigned int) request, buf); } #else /* mingw */ # include <errno.h> /* Get HANDLE. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # include "fd-hook.h" /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif static int primary_ioctl (int fd, int request, void *arg) { /* We don't support FIONBIO on pipes here. If you want to make pipe fds non-blocking, use the gnulib 'nonblocking' module, until gnulib implements fcntl F_GETFL / F_SETFL with O_NONBLOCK. */ if ((HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE) errno = ENOSYS; else errno = EBADF; return -1; } int ioctl (int fd, int request, ... /* {void *,char *} arg */) { void *arg; va_list args; va_start (args, request); arg = va_arg (args, void *); va_end (args); # if WINDOWS_SOCKETS return execute_all_ioctl_hooks (primary_ioctl, fd, request, arg); # else return primary_ioctl (fd, request, arg); # endif } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/isblank.c����������������������������������������������������������0000644�0001750�0001750�00000002510�14557510507�014426� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a character is a blank. Copyright (C) 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <ctype.h> int isblank (int c) { /* On all known platforms, in all predefined locales, isblank(c) is likely equivalent with (c == ' ' || c == '\t'). Look at the glibc definition (in glibc/localedata/locales/i18n): The "blank" characters are '\t', ' ', U+1680, U+180E, U+2000..U+2006, U+2008..U+200A, U+205F, U+3000, and none except the first two is present in a common 8-bit encoding. Therefore the substitute for other platforms is not more complicated than this. */ return (c == ' ' || c == '\t'); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/listen.c�����������������������������������������������������������0000644�0001750�0001750�00000002364�14557510507�014310� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* listen.c --- wrappers for Windows listen function Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef listen int rpl_listen (int fd, int backlog) { SOCKET sock = FD_TO_SOCKET (fd); if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { int r = listen (sock, backlog); if (r < 0) set_winsock_errno (); return r; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/localename.c�������������������������������������������������������0000644�0001750�0001750�00000313122�14557510507�015107� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine name of the currently selected locale. Copyright (C) 1995-2024 Free Software Foundation, Inc. This program 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 program 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Ulrich Drepper <drepper@gnu.org>, 1995. */ /* Native Windows code written by Tor Lillqvist <tml@iki.fi>. */ /* Mac OS X code written by Bruno Haible <bruno@clisp.org>. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the locale == NULL tests below in duplocale() and freelocale(), or xlclang reports -Wtautological-pointer-compare warnings for these tests. */ #define _GL_ARG_NONNULL(params) #include <config.h> /* Specification. */ #include "localename.h" #include <limits.h> #include <stddef.h> #include <stdlib.h> #include <locale.h> #include <string.h> #include "flexmember.h" #include "setlocale_null.h" #include "thread-optim.h" #if HAVE_GOOD_USELOCALE /* Mac OS X 10.5 defines the locale_t type in <xlocale.h>. */ # if defined __APPLE__ && defined __MACH__ # include <xlocale.h> # endif # if (__GLIBC__ >= 2 && !defined __UCLIBC__) || (defined __linux__ && HAVE_LANGINFO_H) || defined __CYGWIN__ # include <langinfo.h> # endif # include "glthread/lock.h" # if defined __sun # if HAVE_GETLOCALENAME_L /* Solaris >= 12. */ extern char * getlocalename_l(int, locale_t); # elif HAVE_SOLARIS114_LOCALES # include <sys/localedef.h> # endif # endif # if HAVE_NAMELESS_LOCALES # include "localename-table.h" # endif # if defined __HAIKU__ # include <dlfcn.h> # endif #endif #if HAVE_CFPREFERENCESCOPYAPPVALUE # include <CoreFoundation/CFString.h> # include <CoreFoundation/CFPreferences.h> #endif #if defined _WIN32 && !defined __CYGWIN__ # define WINDOWS_NATIVE # include "glthread/lock.h" #endif #if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # include <winnls.h> /* List of language codes, sorted by value: 0x01 LANG_ARABIC 0x02 LANG_BULGARIAN 0x03 LANG_CATALAN 0x04 LANG_CHINESE 0x05 LANG_CZECH 0x06 LANG_DANISH 0x07 LANG_GERMAN 0x08 LANG_GREEK 0x09 LANG_ENGLISH 0x0a LANG_SPANISH 0x0b LANG_FINNISH 0x0c LANG_FRENCH 0x0d LANG_HEBREW 0x0e LANG_HUNGARIAN 0x0f LANG_ICELANDIC 0x10 LANG_ITALIAN 0x11 LANG_JAPANESE 0x12 LANG_KOREAN 0x13 LANG_DUTCH 0x14 LANG_NORWEGIAN 0x15 LANG_POLISH 0x16 LANG_PORTUGUESE 0x17 LANG_ROMANSH 0x18 LANG_ROMANIAN 0x19 LANG_RUSSIAN 0x1a LANG_CROATIAN == LANG_SERBIAN 0x1b LANG_SLOVAK 0x1c LANG_ALBANIAN 0x1d LANG_SWEDISH 0x1e LANG_THAI 0x1f LANG_TURKISH 0x20 LANG_URDU 0x21 LANG_INDONESIAN 0x22 LANG_UKRAINIAN 0x23 LANG_BELARUSIAN 0x24 LANG_SLOVENIAN 0x25 LANG_ESTONIAN 0x26 LANG_LATVIAN 0x27 LANG_LITHUANIAN 0x28 LANG_TAJIK 0x29 LANG_FARSI 0x2a LANG_VIETNAMESE 0x2b LANG_ARMENIAN 0x2c LANG_AZERI 0x2d LANG_BASQUE 0x2e LANG_SORBIAN 0x2f LANG_MACEDONIAN 0x30 LANG_SUTU 0x31 LANG_TSONGA 0x32 LANG_TSWANA 0x33 LANG_VENDA 0x34 LANG_XHOSA 0x35 LANG_ZULU 0x36 LANG_AFRIKAANS 0x37 LANG_GEORGIAN 0x38 LANG_FAEROESE 0x39 LANG_HINDI 0x3a LANG_MALTESE 0x3b LANG_SAMI 0x3c LANG_GAELIC 0x3d LANG_YIDDISH 0x3e LANG_MALAY 0x3f LANG_KAZAK 0x40 LANG_KYRGYZ 0x41 LANG_SWAHILI 0x42 LANG_TURKMEN 0x43 LANG_UZBEK 0x44 LANG_TATAR 0x45 LANG_BENGALI 0x46 LANG_PUNJABI 0x47 LANG_GUJARATI 0x48 LANG_ORIYA 0x49 LANG_TAMIL 0x4a LANG_TELUGU 0x4b LANG_KANNADA 0x4c LANG_MALAYALAM 0x4d LANG_ASSAMESE 0x4e LANG_MARATHI 0x4f LANG_SANSKRIT 0x50 LANG_MONGOLIAN 0x51 LANG_TIBETAN 0x52 LANG_WELSH 0x53 LANG_CAMBODIAN 0x54 LANG_LAO 0x55 LANG_BURMESE 0x56 LANG_GALICIAN 0x57 LANG_KONKANI 0x58 LANG_MANIPURI 0x59 LANG_SINDHI 0x5a LANG_SYRIAC 0x5b LANG_SINHALESE 0x5c LANG_CHEROKEE 0x5d LANG_INUKTITUT 0x5e LANG_AMHARIC 0x5f LANG_TAMAZIGHT 0x60 LANG_KASHMIRI 0x61 LANG_NEPALI 0x62 LANG_FRISIAN 0x63 LANG_PASHTO 0x64 LANG_TAGALOG 0x65 LANG_DIVEHI 0x66 LANG_EDO 0x67 LANG_FULFULDE 0x68 LANG_HAUSA 0x69 LANG_IBIBIO 0x6a LANG_YORUBA 0x6d LANG_BASHKIR 0x6e LANG_LUXEMBOURGISH 0x6f LANG_GREENLANDIC 0x70 LANG_IGBO 0x71 LANG_KANURI 0x72 LANG_OROMO 0x73 LANG_TIGRINYA 0x74 LANG_GUARANI 0x75 LANG_HAWAIIAN 0x76 LANG_LATIN 0x77 LANG_SOMALI 0x78 LANG_YI 0x79 LANG_PAPIAMENTU 0x7a LANG_MAPUDUNGUN 0x7c LANG_MOHAWK 0x7e LANG_BRETON 0x82 LANG_OCCITAN 0x83 LANG_CORSICAN 0x84 LANG_ALSATIAN 0x85 LANG_YAKUT 0x86 LANG_KICHE 0x87 LANG_KINYARWANDA 0x88 LANG_WOLOF 0x8c LANG_DARI 0x91 LANG_SCOTTISH_GAELIC */ /* Mingw headers don't have latest language and sublanguage codes. */ # ifndef LANG_AFRIKAANS # define LANG_AFRIKAANS 0x36 # endif # ifndef LANG_ALBANIAN # define LANG_ALBANIAN 0x1c # endif # ifndef LANG_ALSATIAN # define LANG_ALSATIAN 0x84 # endif # ifndef LANG_AMHARIC # define LANG_AMHARIC 0x5e # endif # ifndef LANG_ARABIC # define LANG_ARABIC 0x01 # endif # ifndef LANG_ARMENIAN # define LANG_ARMENIAN 0x2b # endif # ifndef LANG_ASSAMESE # define LANG_ASSAMESE 0x4d # endif # ifndef LANG_AZERI # define LANG_AZERI 0x2c # endif # ifndef LANG_BASHKIR # define LANG_BASHKIR 0x6d # endif # ifndef LANG_BASQUE # define LANG_BASQUE 0x2d # endif # ifndef LANG_BELARUSIAN # define LANG_BELARUSIAN 0x23 # endif # ifndef LANG_BENGALI # define LANG_BENGALI 0x45 # endif # ifndef LANG_BRETON # define LANG_BRETON 0x7e # endif # ifndef LANG_BURMESE # define LANG_BURMESE 0x55 # endif # ifndef LANG_CAMBODIAN # define LANG_CAMBODIAN 0x53 # endif # ifndef LANG_CATALAN # define LANG_CATALAN 0x03 # endif # ifndef LANG_CHEROKEE # define LANG_CHEROKEE 0x5c # endif # ifndef LANG_CORSICAN # define LANG_CORSICAN 0x83 # endif # ifndef LANG_DARI # define LANG_DARI 0x8c # endif # ifndef LANG_DIVEHI # define LANG_DIVEHI 0x65 # endif # ifndef LANG_EDO # define LANG_EDO 0x66 # endif # ifndef LANG_ESTONIAN # define LANG_ESTONIAN 0x25 # endif # ifndef LANG_FAEROESE # define LANG_FAEROESE 0x38 # endif # ifndef LANG_FARSI # define LANG_FARSI 0x29 # endif # ifndef LANG_FRISIAN # define LANG_FRISIAN 0x62 # endif # ifndef LANG_FULFULDE # define LANG_FULFULDE 0x67 # endif # ifndef LANG_GAELIC # define LANG_GAELIC 0x3c # endif # ifndef LANG_GALICIAN # define LANG_GALICIAN 0x56 # endif # ifndef LANG_GEORGIAN # define LANG_GEORGIAN 0x37 # endif # ifndef LANG_GREENLANDIC # define LANG_GREENLANDIC 0x6f # endif # ifndef LANG_GUARANI # define LANG_GUARANI 0x74 # endif # ifndef LANG_GUJARATI # define LANG_GUJARATI 0x47 # endif # ifndef LANG_HAUSA # define LANG_HAUSA 0x68 # endif # ifndef LANG_HAWAIIAN # define LANG_HAWAIIAN 0x75 # endif # ifndef LANG_HEBREW # define LANG_HEBREW 0x0d # endif # ifndef LANG_HINDI # define LANG_HINDI 0x39 # endif # ifndef LANG_IBIBIO # define LANG_IBIBIO 0x69 # endif # ifndef LANG_IGBO # define LANG_IGBO 0x70 # endif # ifndef LANG_INDONESIAN # define LANG_INDONESIAN 0x21 # endif # ifndef LANG_INUKTITUT # define LANG_INUKTITUT 0x5d # endif # ifndef LANG_KANNADA # define LANG_KANNADA 0x4b # endif # ifndef LANG_KANURI # define LANG_KANURI 0x71 # endif # ifndef LANG_KASHMIRI # define LANG_KASHMIRI 0x60 # endif # ifndef LANG_KAZAK # define LANG_KAZAK 0x3f # endif # ifndef LANG_KICHE # define LANG_KICHE 0x86 # endif # ifndef LANG_KINYARWANDA # define LANG_KINYARWANDA 0x87 # endif # ifndef LANG_KONKANI # define LANG_KONKANI 0x57 # endif # ifndef LANG_KYRGYZ # define LANG_KYRGYZ 0x40 # endif # ifndef LANG_LAO # define LANG_LAO 0x54 # endif # ifndef LANG_LATIN # define LANG_LATIN 0x76 # endif # ifndef LANG_LATVIAN # define LANG_LATVIAN 0x26 # endif # ifndef LANG_LITHUANIAN # define LANG_LITHUANIAN 0x27 # endif # ifndef LANG_LUXEMBOURGISH # define LANG_LUXEMBOURGISH 0x6e # endif # ifndef LANG_MACEDONIAN # define LANG_MACEDONIAN 0x2f # endif # ifndef LANG_MALAY # define LANG_MALAY 0x3e # endif # ifndef LANG_MALAYALAM # define LANG_MALAYALAM 0x4c # endif # ifndef LANG_MALTESE # define LANG_MALTESE 0x3a # endif # ifndef LANG_MANIPURI # define LANG_MANIPURI 0x58 # endif # ifndef LANG_MAORI # define LANG_MAORI 0x81 # endif # ifndef LANG_MAPUDUNGUN # define LANG_MAPUDUNGUN 0x7a # endif # ifndef LANG_MARATHI # define LANG_MARATHI 0x4e # endif # ifndef LANG_MOHAWK # define LANG_MOHAWK 0x7c # endif # ifndef LANG_MONGOLIAN # define LANG_MONGOLIAN 0x50 # endif # ifndef LANG_NEPALI # define LANG_NEPALI 0x61 # endif # ifndef LANG_OCCITAN # define LANG_OCCITAN 0x82 # endif # ifndef LANG_ORIYA # define LANG_ORIYA 0x48 # endif # ifndef LANG_OROMO # define LANG_OROMO 0x72 # endif # ifndef LANG_PAPIAMENTU # define LANG_PAPIAMENTU 0x79 # endif # ifndef LANG_PASHTO # define LANG_PASHTO 0x63 # endif # ifndef LANG_PUNJABI # define LANG_PUNJABI 0x46 # endif # ifndef LANG_QUECHUA # define LANG_QUECHUA 0x6b # endif # ifndef LANG_ROMANSH # define LANG_ROMANSH 0x17 # endif # ifndef LANG_SAMI # define LANG_SAMI 0x3b # endif # ifndef LANG_SANSKRIT # define LANG_SANSKRIT 0x4f # endif # ifndef LANG_SCOTTISH_GAELIC # define LANG_SCOTTISH_GAELIC 0x91 # endif # ifndef LANG_SERBIAN # define LANG_SERBIAN 0x1a # endif # ifndef LANG_SINDHI # define LANG_SINDHI 0x59 # endif # ifndef LANG_SINHALESE # define LANG_SINHALESE 0x5b # endif # ifndef LANG_SLOVAK # define LANG_SLOVAK 0x1b # endif # ifndef LANG_SOMALI # define LANG_SOMALI 0x77 # endif # ifndef LANG_SORBIAN # define LANG_SORBIAN 0x2e # endif # ifndef LANG_SOTHO # define LANG_SOTHO 0x6c # endif # ifndef LANG_SUTU # define LANG_SUTU 0x30 # endif # ifndef LANG_SWAHILI # define LANG_SWAHILI 0x41 # endif # ifndef LANG_SYRIAC # define LANG_SYRIAC 0x5a # endif # ifndef LANG_TAGALOG # define LANG_TAGALOG 0x64 # endif # ifndef LANG_TAJIK # define LANG_TAJIK 0x28 # endif # ifndef LANG_TAMAZIGHT # define LANG_TAMAZIGHT 0x5f # endif # ifndef LANG_TAMIL # define LANG_TAMIL 0x49 # endif # ifndef LANG_TATAR # define LANG_TATAR 0x44 # endif # ifndef LANG_TELUGU # define LANG_TELUGU 0x4a # endif # ifndef LANG_THAI # define LANG_THAI 0x1e # endif # ifndef LANG_TIBETAN # define LANG_TIBETAN 0x51 # endif # ifndef LANG_TIGRINYA # define LANG_TIGRINYA 0x73 # endif # ifndef LANG_TSONGA # define LANG_TSONGA 0x31 # endif # ifndef LANG_TSWANA # define LANG_TSWANA 0x32 # endif # ifndef LANG_TURKMEN # define LANG_TURKMEN 0x42 # endif # ifndef LANG_UIGHUR # define LANG_UIGHUR 0x80 # endif # ifndef LANG_UKRAINIAN # define LANG_UKRAINIAN 0x22 # endif # ifndef LANG_URDU # define LANG_URDU 0x20 # endif # ifndef LANG_UZBEK # define LANG_UZBEK 0x43 # endif # ifndef LANG_VENDA # define LANG_VENDA 0x33 # endif # ifndef LANG_VIETNAMESE # define LANG_VIETNAMESE 0x2a # endif # ifndef LANG_WELSH # define LANG_WELSH 0x52 # endif # ifndef LANG_WOLOF # define LANG_WOLOF 0x88 # endif # ifndef LANG_XHOSA # define LANG_XHOSA 0x34 # endif # ifndef LANG_YAKUT # define LANG_YAKUT 0x85 # endif # ifndef LANG_YI # define LANG_YI 0x78 # endif # ifndef LANG_YIDDISH # define LANG_YIDDISH 0x3d # endif # ifndef LANG_YORUBA # define LANG_YORUBA 0x6a # endif # ifndef LANG_ZULU # define LANG_ZULU 0x35 # endif # ifndef SUBLANG_AFRIKAANS_SOUTH_AFRICA # define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_ALBANIAN_ALBANIA # define SUBLANG_ALBANIAN_ALBANIA 0x01 # endif # ifndef SUBLANG_ALSATIAN_FRANCE # define SUBLANG_ALSATIAN_FRANCE 0x01 # endif # ifndef SUBLANG_AMHARIC_ETHIOPIA # define SUBLANG_AMHARIC_ETHIOPIA 0x01 # endif # ifndef SUBLANG_ARABIC_SAUDI_ARABIA # define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 # endif # ifndef SUBLANG_ARABIC_IRAQ # define SUBLANG_ARABIC_IRAQ 0x02 # endif # ifndef SUBLANG_ARABIC_EGYPT # define SUBLANG_ARABIC_EGYPT 0x03 # endif # ifndef SUBLANG_ARABIC_LIBYA # define SUBLANG_ARABIC_LIBYA 0x04 # endif # ifndef SUBLANG_ARABIC_ALGERIA # define SUBLANG_ARABIC_ALGERIA 0x05 # endif # ifndef SUBLANG_ARABIC_MOROCCO # define SUBLANG_ARABIC_MOROCCO 0x06 # endif # ifndef SUBLANG_ARABIC_TUNISIA # define SUBLANG_ARABIC_TUNISIA 0x07 # endif # ifndef SUBLANG_ARABIC_OMAN # define SUBLANG_ARABIC_OMAN 0x08 # endif # ifndef SUBLANG_ARABIC_YEMEN # define SUBLANG_ARABIC_YEMEN 0x09 # endif # ifndef SUBLANG_ARABIC_SYRIA # define SUBLANG_ARABIC_SYRIA 0x0a # endif # ifndef SUBLANG_ARABIC_JORDAN # define SUBLANG_ARABIC_JORDAN 0x0b # endif # ifndef SUBLANG_ARABIC_LEBANON # define SUBLANG_ARABIC_LEBANON 0x0c # endif # ifndef SUBLANG_ARABIC_KUWAIT # define SUBLANG_ARABIC_KUWAIT 0x0d # endif # ifndef SUBLANG_ARABIC_UAE # define SUBLANG_ARABIC_UAE 0x0e # endif # ifndef SUBLANG_ARABIC_BAHRAIN # define SUBLANG_ARABIC_BAHRAIN 0x0f # endif # ifndef SUBLANG_ARABIC_QATAR # define SUBLANG_ARABIC_QATAR 0x10 # endif # ifndef SUBLANG_ARMENIAN_ARMENIA # define SUBLANG_ARMENIAN_ARMENIA 0x01 # endif # ifndef SUBLANG_ASSAMESE_INDIA # define SUBLANG_ASSAMESE_INDIA 0x01 # endif # ifndef SUBLANG_AZERI_LATIN # define SUBLANG_AZERI_LATIN 0x01 # endif # ifndef SUBLANG_AZERI_CYRILLIC # define SUBLANG_AZERI_CYRILLIC 0x02 # endif # ifndef SUBLANG_BASHKIR_RUSSIA # define SUBLANG_BASHKIR_RUSSIA 0x01 # endif # ifndef SUBLANG_BASQUE_BASQUE # define SUBLANG_BASQUE_BASQUE 0x01 # endif # ifndef SUBLANG_BELARUSIAN_BELARUS # define SUBLANG_BELARUSIAN_BELARUS 0x01 # endif # ifndef SUBLANG_BENGALI_INDIA # define SUBLANG_BENGALI_INDIA 0x01 # endif # ifndef SUBLANG_BENGALI_BANGLADESH # define SUBLANG_BENGALI_BANGLADESH 0x02 # endif # ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN # define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05 # endif # ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC # define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08 # endif # ifndef SUBLANG_BRETON_FRANCE # define SUBLANG_BRETON_FRANCE 0x01 # endif # ifndef SUBLANG_BULGARIAN_BULGARIA # define SUBLANG_BULGARIAN_BULGARIA 0x01 # endif # ifndef SUBLANG_CAMBODIAN_CAMBODIA # define SUBLANG_CAMBODIAN_CAMBODIA 0x01 # endif # ifndef SUBLANG_CATALAN_SPAIN # define SUBLANG_CATALAN_SPAIN 0x01 # endif # ifndef SUBLANG_CORSICAN_FRANCE # define SUBLANG_CORSICAN_FRANCE 0x01 # endif # ifndef SUBLANG_CROATIAN_CROATIA # define SUBLANG_CROATIAN_CROATIA 0x01 # endif # ifndef SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN # define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04 # endif # ifndef SUBLANG_CHINESE_MACAU # define SUBLANG_CHINESE_MACAU 0x05 # endif # ifndef SUBLANG_CZECH_CZECH_REPUBLIC # define SUBLANG_CZECH_CZECH_REPUBLIC 0x01 # endif # ifndef SUBLANG_DANISH_DENMARK # define SUBLANG_DANISH_DENMARK 0x01 # endif # ifndef SUBLANG_DARI_AFGHANISTAN # define SUBLANG_DARI_AFGHANISTAN 0x01 # endif # ifndef SUBLANG_DIVEHI_MALDIVES # define SUBLANG_DIVEHI_MALDIVES 0x01 # endif # ifndef SUBLANG_DUTCH_SURINAM # define SUBLANG_DUTCH_SURINAM 0x03 # endif # ifndef SUBLANG_ENGLISH_SOUTH_AFRICA # define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 # endif # ifndef SUBLANG_ENGLISH_JAMAICA # define SUBLANG_ENGLISH_JAMAICA 0x08 # endif # ifndef SUBLANG_ENGLISH_CARIBBEAN # define SUBLANG_ENGLISH_CARIBBEAN 0x09 # endif # ifndef SUBLANG_ENGLISH_BELIZE # define SUBLANG_ENGLISH_BELIZE 0x0a # endif # ifndef SUBLANG_ENGLISH_TRINIDAD # define SUBLANG_ENGLISH_TRINIDAD 0x0b # endif # ifndef SUBLANG_ENGLISH_ZIMBABWE # define SUBLANG_ENGLISH_ZIMBABWE 0x0c # endif # ifndef SUBLANG_ENGLISH_PHILIPPINES # define SUBLANG_ENGLISH_PHILIPPINES 0x0d # endif # ifndef SUBLANG_ENGLISH_INDONESIA # define SUBLANG_ENGLISH_INDONESIA 0x0e # endif # ifndef SUBLANG_ENGLISH_HONGKONG # define SUBLANG_ENGLISH_HONGKONG 0x0f # endif # ifndef SUBLANG_ENGLISH_INDIA # define SUBLANG_ENGLISH_INDIA 0x10 # endif # ifndef SUBLANG_ENGLISH_MALAYSIA # define SUBLANG_ENGLISH_MALAYSIA 0x11 # endif # ifndef SUBLANG_ENGLISH_SINGAPORE # define SUBLANG_ENGLISH_SINGAPORE 0x12 # endif # ifndef SUBLANG_ESTONIAN_ESTONIA # define SUBLANG_ESTONIAN_ESTONIA 0x01 # endif # ifndef SUBLANG_FAEROESE_FAROE_ISLANDS # define SUBLANG_FAEROESE_FAROE_ISLANDS 0x01 # endif # ifndef SUBLANG_FARSI_IRAN # define SUBLANG_FARSI_IRAN 0x01 # endif # ifndef SUBLANG_FINNISH_FINLAND # define SUBLANG_FINNISH_FINLAND 0x01 # endif # ifndef SUBLANG_FRENCH_LUXEMBOURG # define SUBLANG_FRENCH_LUXEMBOURG 0x05 # endif # ifndef SUBLANG_FRENCH_MONACO # define SUBLANG_FRENCH_MONACO 0x06 # endif # ifndef SUBLANG_FRENCH_WESTINDIES # define SUBLANG_FRENCH_WESTINDIES 0x07 # endif # ifndef SUBLANG_FRENCH_REUNION # define SUBLANG_FRENCH_REUNION 0x08 # endif # ifndef SUBLANG_FRENCH_CONGO # define SUBLANG_FRENCH_CONGO 0x09 # endif # ifndef SUBLANG_FRENCH_SENEGAL # define SUBLANG_FRENCH_SENEGAL 0x0a # endif # ifndef SUBLANG_FRENCH_CAMEROON # define SUBLANG_FRENCH_CAMEROON 0x0b # endif # ifndef SUBLANG_FRENCH_COTEDIVOIRE # define SUBLANG_FRENCH_COTEDIVOIRE 0x0c # endif # ifndef SUBLANG_FRENCH_MALI # define SUBLANG_FRENCH_MALI 0x0d # endif # ifndef SUBLANG_FRENCH_MOROCCO # define SUBLANG_FRENCH_MOROCCO 0x0e # endif # ifndef SUBLANG_FRENCH_HAITI # define SUBLANG_FRENCH_HAITI 0x0f # endif # ifndef SUBLANG_FRISIAN_NETHERLANDS # define SUBLANG_FRISIAN_NETHERLANDS 0x01 # endif # ifndef SUBLANG_GALICIAN_SPAIN # define SUBLANG_GALICIAN_SPAIN 0x01 # endif # ifndef SUBLANG_GEORGIAN_GEORGIA # define SUBLANG_GEORGIAN_GEORGIA 0x01 # endif # ifndef SUBLANG_GERMAN_LUXEMBOURG # define SUBLANG_GERMAN_LUXEMBOURG 0x04 # endif # ifndef SUBLANG_GERMAN_LIECHTENSTEIN # define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 # endif # ifndef SUBLANG_GREEK_GREECE # define SUBLANG_GREEK_GREECE 0x01 # endif # ifndef SUBLANG_GREENLANDIC_GREENLAND # define SUBLANG_GREENLANDIC_GREENLAND 0x01 # endif # ifndef SUBLANG_GUJARATI_INDIA # define SUBLANG_GUJARATI_INDIA 0x01 # endif # ifndef SUBLANG_HAUSA_NIGERIA_LATIN # define SUBLANG_HAUSA_NIGERIA_LATIN 0x01 # endif # ifndef SUBLANG_HEBREW_ISRAEL # define SUBLANG_HEBREW_ISRAEL 0x01 # endif # ifndef SUBLANG_HINDI_INDIA # define SUBLANG_HINDI_INDIA 0x01 # endif # ifndef SUBLANG_HUNGARIAN_HUNGARY # define SUBLANG_HUNGARIAN_HUNGARY 0x01 # endif # ifndef SUBLANG_ICELANDIC_ICELAND # define SUBLANG_ICELANDIC_ICELAND 0x01 # endif # ifndef SUBLANG_IGBO_NIGERIA # define SUBLANG_IGBO_NIGERIA 0x01 # endif # ifndef SUBLANG_INDONESIAN_INDONESIA # define SUBLANG_INDONESIAN_INDONESIA 0x01 # endif # ifndef SUBLANG_INUKTITUT_CANADA # define SUBLANG_INUKTITUT_CANADA 0x01 # endif # undef SUBLANG_INUKTITUT_CANADA_LATIN # define SUBLANG_INUKTITUT_CANADA_LATIN 0x02 # undef SUBLANG_IRISH_IRELAND # define SUBLANG_IRISH_IRELAND 0x02 # ifndef SUBLANG_JAPANESE_JAPAN # define SUBLANG_JAPANESE_JAPAN 0x01 # endif # ifndef SUBLANG_KANNADA_INDIA # define SUBLANG_KANNADA_INDIA 0x01 # endif # ifndef SUBLANG_KASHMIRI_INDIA # define SUBLANG_KASHMIRI_INDIA 0x02 # endif # ifndef SUBLANG_KAZAK_KAZAKHSTAN # define SUBLANG_KAZAK_KAZAKHSTAN 0x01 # endif # ifndef SUBLANG_KICHE_GUATEMALA # define SUBLANG_KICHE_GUATEMALA 0x01 # endif # ifndef SUBLANG_KINYARWANDA_RWANDA # define SUBLANG_KINYARWANDA_RWANDA 0x01 # endif # ifndef SUBLANG_KONKANI_INDIA # define SUBLANG_KONKANI_INDIA 0x01 # endif # ifndef SUBLANG_KYRGYZ_KYRGYZSTAN # define SUBLANG_KYRGYZ_KYRGYZSTAN 0x01 # endif # ifndef SUBLANG_LAO_LAOS # define SUBLANG_LAO_LAOS 0x01 # endif # ifndef SUBLANG_LATVIAN_LATVIA # define SUBLANG_LATVIAN_LATVIA 0x01 # endif # ifndef SUBLANG_LITHUANIAN_LITHUANIA # define SUBLANG_LITHUANIAN_LITHUANIA 0x01 # endif # undef SUBLANG_LOWER_SORBIAN_GERMANY # define SUBLANG_LOWER_SORBIAN_GERMANY 0x02 # ifndef SUBLANG_LUXEMBOURGISH_LUXEMBOURG # define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x01 # endif # ifndef SUBLANG_MACEDONIAN_MACEDONIA # define SUBLANG_MACEDONIAN_MACEDONIA 0x01 # endif # ifndef SUBLANG_MALAY_MALAYSIA # define SUBLANG_MALAY_MALAYSIA 0x01 # endif # ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM # define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 # endif # ifndef SUBLANG_MALAYALAM_INDIA # define SUBLANG_MALAYALAM_INDIA 0x01 # endif # ifndef SUBLANG_MALTESE_MALTA # define SUBLANG_MALTESE_MALTA 0x01 # endif # ifndef SUBLANG_MAORI_NEW_ZEALAND # define SUBLANG_MAORI_NEW_ZEALAND 0x01 # endif # ifndef SUBLANG_MAPUDUNGUN_CHILE # define SUBLANG_MAPUDUNGUN_CHILE 0x01 # endif # ifndef SUBLANG_MARATHI_INDIA # define SUBLANG_MARATHI_INDIA 0x01 # endif # ifndef SUBLANG_MOHAWK_CANADA # define SUBLANG_MOHAWK_CANADA 0x01 # endif # ifndef SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA # define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01 # endif # ifndef SUBLANG_MONGOLIAN_PRC # define SUBLANG_MONGOLIAN_PRC 0x02 # endif # ifndef SUBLANG_NEPALI_NEPAL # define SUBLANG_NEPALI_NEPAL 0x01 # endif # ifndef SUBLANG_NEPALI_INDIA # define SUBLANG_NEPALI_INDIA 0x02 # endif # ifndef SUBLANG_OCCITAN_FRANCE # define SUBLANG_OCCITAN_FRANCE 0x01 # endif # ifndef SUBLANG_ORIYA_INDIA # define SUBLANG_ORIYA_INDIA 0x01 # endif # ifndef SUBLANG_PASHTO_AFGHANISTAN # define SUBLANG_PASHTO_AFGHANISTAN 0x01 # endif # ifndef SUBLANG_POLISH_POLAND # define SUBLANG_POLISH_POLAND 0x01 # endif # ifndef SUBLANG_PUNJABI_INDIA # define SUBLANG_PUNJABI_INDIA 0x01 # endif # ifndef SUBLANG_PUNJABI_PAKISTAN # define SUBLANG_PUNJABI_PAKISTAN 0x02 # endif # ifndef SUBLANG_QUECHUA_BOLIVIA # define SUBLANG_QUECHUA_BOLIVIA 0x01 # endif # ifndef SUBLANG_QUECHUA_ECUADOR # define SUBLANG_QUECHUA_ECUADOR 0x02 # endif # ifndef SUBLANG_QUECHUA_PERU # define SUBLANG_QUECHUA_PERU 0x03 # endif # ifndef SUBLANG_ROMANIAN_ROMANIA # define SUBLANG_ROMANIAN_ROMANIA 0x01 # endif # ifndef SUBLANG_ROMANIAN_MOLDOVA # define SUBLANG_ROMANIAN_MOLDOVA 0x02 # endif # ifndef SUBLANG_ROMANSH_SWITZERLAND # define SUBLANG_ROMANSH_SWITZERLAND 0x01 # endif # ifndef SUBLANG_RUSSIAN_RUSSIA # define SUBLANG_RUSSIAN_RUSSIA 0x01 # endif # ifndef SUBLANG_RUSSIAN_MOLDAVIA # define SUBLANG_RUSSIAN_MOLDAVIA 0x02 # endif # ifndef SUBLANG_SAMI_NORTHERN_NORWAY # define SUBLANG_SAMI_NORTHERN_NORWAY 0x01 # endif # ifndef SUBLANG_SAMI_NORTHERN_SWEDEN # define SUBLANG_SAMI_NORTHERN_SWEDEN 0x02 # endif # ifndef SUBLANG_SAMI_NORTHERN_FINLAND # define SUBLANG_SAMI_NORTHERN_FINLAND 0x03 # endif # ifndef SUBLANG_SAMI_LULE_NORWAY # define SUBLANG_SAMI_LULE_NORWAY 0x04 # endif # ifndef SUBLANG_SAMI_LULE_SWEDEN # define SUBLANG_SAMI_LULE_SWEDEN 0x05 # endif # ifndef SUBLANG_SAMI_SOUTHERN_NORWAY # define SUBLANG_SAMI_SOUTHERN_NORWAY 0x06 # endif # ifndef SUBLANG_SAMI_SOUTHERN_SWEDEN # define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x07 # endif # undef SUBLANG_SAMI_SKOLT_FINLAND # define SUBLANG_SAMI_SKOLT_FINLAND 0x08 # undef SUBLANG_SAMI_INARI_FINLAND # define SUBLANG_SAMI_INARI_FINLAND 0x09 # ifndef SUBLANG_SANSKRIT_INDIA # define SUBLANG_SANSKRIT_INDIA 0x01 # endif # ifndef SUBLANG_SERBIAN_LATIN # define SUBLANG_SERBIAN_LATIN 0x02 # endif # ifndef SUBLANG_SERBIAN_CYRILLIC # define SUBLANG_SERBIAN_CYRILLIC 0x03 # endif # ifndef SUBLANG_SINDHI_INDIA # define SUBLANG_SINDHI_INDIA 0x01 # endif # undef SUBLANG_SINDHI_PAKISTAN # define SUBLANG_SINDHI_PAKISTAN 0x02 # ifndef SUBLANG_SINDHI_AFGHANISTAN # define SUBLANG_SINDHI_AFGHANISTAN 0x02 # endif # ifndef SUBLANG_SINHALESE_SRI_LANKA # define SUBLANG_SINHALESE_SRI_LANKA 0x01 # endif # ifndef SUBLANG_SLOVAK_SLOVAKIA # define SUBLANG_SLOVAK_SLOVAKIA 0x01 # endif # ifndef SUBLANG_SLOVENIAN_SLOVENIA # define SUBLANG_SLOVENIAN_SLOVENIA 0x01 # endif # ifndef SUBLANG_SOTHO_SOUTH_AFRICA # define SUBLANG_SOTHO_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_SPANISH_GUATEMALA # define SUBLANG_SPANISH_GUATEMALA 0x04 # endif # ifndef SUBLANG_SPANISH_COSTA_RICA # define SUBLANG_SPANISH_COSTA_RICA 0x05 # endif # ifndef SUBLANG_SPANISH_PANAMA # define SUBLANG_SPANISH_PANAMA 0x06 # endif # ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC # define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 # endif # ifndef SUBLANG_SPANISH_VENEZUELA # define SUBLANG_SPANISH_VENEZUELA 0x08 # endif # ifndef SUBLANG_SPANISH_COLOMBIA # define SUBLANG_SPANISH_COLOMBIA 0x09 # endif # ifndef SUBLANG_SPANISH_PERU # define SUBLANG_SPANISH_PERU 0x0a # endif # ifndef SUBLANG_SPANISH_ARGENTINA # define SUBLANG_SPANISH_ARGENTINA 0x0b # endif # ifndef SUBLANG_SPANISH_ECUADOR # define SUBLANG_SPANISH_ECUADOR 0x0c # endif # ifndef SUBLANG_SPANISH_CHILE # define SUBLANG_SPANISH_CHILE 0x0d # endif # ifndef SUBLANG_SPANISH_URUGUAY # define SUBLANG_SPANISH_URUGUAY 0x0e # endif # ifndef SUBLANG_SPANISH_PARAGUAY # define SUBLANG_SPANISH_PARAGUAY 0x0f # endif # ifndef SUBLANG_SPANISH_BOLIVIA # define SUBLANG_SPANISH_BOLIVIA 0x10 # endif # ifndef SUBLANG_SPANISH_EL_SALVADOR # define SUBLANG_SPANISH_EL_SALVADOR 0x11 # endif # ifndef SUBLANG_SPANISH_HONDURAS # define SUBLANG_SPANISH_HONDURAS 0x12 # endif # ifndef SUBLANG_SPANISH_NICARAGUA # define SUBLANG_SPANISH_NICARAGUA 0x13 # endif # ifndef SUBLANG_SPANISH_PUERTO_RICO # define SUBLANG_SPANISH_PUERTO_RICO 0x14 # endif # ifndef SUBLANG_SPANISH_US # define SUBLANG_SPANISH_US 0x15 # endif # ifndef SUBLANG_SWAHILI_KENYA # define SUBLANG_SWAHILI_KENYA 0x01 # endif # ifndef SUBLANG_SWEDISH_SWEDEN # define SUBLANG_SWEDISH_SWEDEN 0x01 # endif # ifndef SUBLANG_SWEDISH_FINLAND # define SUBLANG_SWEDISH_FINLAND 0x02 # endif # ifndef SUBLANG_SYRIAC_SYRIA # define SUBLANG_SYRIAC_SYRIA 0x01 # endif # ifndef SUBLANG_TAGALOG_PHILIPPINES # define SUBLANG_TAGALOG_PHILIPPINES 0x01 # endif # ifndef SUBLANG_TAJIK_TAJIKISTAN # define SUBLANG_TAJIK_TAJIKISTAN 0x01 # endif # ifndef SUBLANG_TAMAZIGHT_ARABIC # define SUBLANG_TAMAZIGHT_ARABIC 0x01 # endif # ifndef SUBLANG_TAMAZIGHT_ALGERIA_LATIN # define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02 # endif # ifndef SUBLANG_TAMIL_INDIA # define SUBLANG_TAMIL_INDIA 0x01 # endif # ifndef SUBLANG_TATAR_RUSSIA # define SUBLANG_TATAR_RUSSIA 0x01 # endif # ifndef SUBLANG_TELUGU_INDIA # define SUBLANG_TELUGU_INDIA 0x01 # endif # ifndef SUBLANG_THAI_THAILAND # define SUBLANG_THAI_THAILAND 0x01 # endif # ifndef SUBLANG_TIBETAN_PRC # define SUBLANG_TIBETAN_PRC 0x01 # endif # undef SUBLANG_TIBETAN_BHUTAN # define SUBLANG_TIBETAN_BHUTAN 0x02 # ifndef SUBLANG_TIGRINYA_ETHIOPIA # define SUBLANG_TIGRINYA_ETHIOPIA 0x01 # endif # ifndef SUBLANG_TIGRINYA_ERITREA # define SUBLANG_TIGRINYA_ERITREA 0x02 # endif # ifndef SUBLANG_TSWANA_SOUTH_AFRICA # define SUBLANG_TSWANA_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_TURKISH_TURKEY # define SUBLANG_TURKISH_TURKEY 0x01 # endif # ifndef SUBLANG_TURKMEN_TURKMENISTAN # define SUBLANG_TURKMEN_TURKMENISTAN 0x01 # endif # ifndef SUBLANG_UIGHUR_PRC # define SUBLANG_UIGHUR_PRC 0x01 # endif # ifndef SUBLANG_UKRAINIAN_UKRAINE # define SUBLANG_UKRAINIAN_UKRAINE 0x01 # endif # ifndef SUBLANG_UPPER_SORBIAN_GERMANY # define SUBLANG_UPPER_SORBIAN_GERMANY 0x01 # endif # ifndef SUBLANG_URDU_PAKISTAN # define SUBLANG_URDU_PAKISTAN 0x01 # endif # ifndef SUBLANG_URDU_INDIA # define SUBLANG_URDU_INDIA 0x02 # endif # ifndef SUBLANG_UZBEK_LATIN # define SUBLANG_UZBEK_LATIN 0x01 # endif # ifndef SUBLANG_UZBEK_CYRILLIC # define SUBLANG_UZBEK_CYRILLIC 0x02 # endif # ifndef SUBLANG_VIETNAMESE_VIETNAM # define SUBLANG_VIETNAMESE_VIETNAM 0x01 # endif # ifndef SUBLANG_WELSH_UNITED_KINGDOM # define SUBLANG_WELSH_UNITED_KINGDOM 0x01 # endif # ifndef SUBLANG_WOLOF_SENEGAL # define SUBLANG_WOLOF_SENEGAL 0x01 # endif # ifndef SUBLANG_XHOSA_SOUTH_AFRICA # define SUBLANG_XHOSA_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_YAKUT_RUSSIA # define SUBLANG_YAKUT_RUSSIA 0x01 # endif # ifndef SUBLANG_YI_PRC # define SUBLANG_YI_PRC 0x01 # endif # ifndef SUBLANG_YORUBA_NIGERIA # define SUBLANG_YORUBA_NIGERIA 0x01 # endif # ifndef SUBLANG_ZULU_SOUTH_AFRICA # define SUBLANG_ZULU_SOUTH_AFRICA 0x01 # endif /* GetLocaleInfoA operations. */ # ifndef LOCALE_SNAME # define LOCALE_SNAME 0x5c # endif # ifndef LOCALE_NAME_MAX_LENGTH # define LOCALE_NAME_MAX_LENGTH 85 # endif /* Don't assume that UNICODE is not defined. */ # undef GetLocaleInfo # define GetLocaleInfo GetLocaleInfoA # undef EnumSystemLocales # define EnumSystemLocales EnumSystemLocalesA #endif /* We want to use the system's setlocale() function here, not the gnulib override. */ #undef setlocale #if HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.4 or newer */ /* Canonicalize a Mac OS X locale name to a Unix locale name. NAME is a sufficiently large buffer. On input, it contains the Mac OS X locale name. On output, it contains the Unix locale name. */ # if !defined IN_LIBINTL static # endif void gl_locale_name_canonicalize (char *name) { /* This conversion is based on a posting by Deborah GoldSmith <goldsmit@apple.com> on 2005-03-08, https://lists.apple.com/archives/carbon-dev/2005/Mar/msg00293.html */ /* Convert legacy (NeXTstep inherited) English names to Unix (ISO 639 and ISO 3166) names. Prior to Mac OS X 10.3, there is no API for doing this. Therefore we do it ourselves, using a table based on the results of the Mac OS X 10.3.8 function CFLocaleCreateCanonicalLocaleIdentifierFromString(). */ typedef struct { const char legacy[21+1]; const char unixy[5+1]; } legacy_entry; static const legacy_entry legacy_table[] = { { "Afrikaans", "af" }, { "Albanian", "sq" }, { "Amharic", "am" }, { "Arabic", "ar" }, { "Armenian", "hy" }, { "Assamese", "as" }, { "Aymara", "ay" }, { "Azerbaijani", "az" }, { "Basque", "eu" }, { "Belarusian", "be" }, { "Belorussian", "be" }, { "Bengali", "bn" }, { "Brazilian Portugese", "pt_BR" }, { "Brazilian Portuguese", "pt_BR" }, { "Breton", "br" }, { "Bulgarian", "bg" }, { "Burmese", "my" }, { "Byelorussian", "be" }, { "Catalan", "ca" }, { "Chewa", "ny" }, { "Chichewa", "ny" }, { "Chinese", "zh" }, { "Chinese, Simplified", "zh_CN" }, { "Chinese, Traditional", "zh_TW" }, { "Chinese, Tradtional", "zh_TW" }, { "Croatian", "hr" }, { "Czech", "cs" }, { "Danish", "da" }, { "Dutch", "nl" }, { "Dzongkha", "dz" }, { "English", "en" }, { "Esperanto", "eo" }, { "Estonian", "et" }, { "Faroese", "fo" }, { "Farsi", "fa" }, { "Finnish", "fi" }, { "Flemish", "nl_BE" }, { "French", "fr" }, { "Galician", "gl" }, { "Gallegan", "gl" }, { "Georgian", "ka" }, { "German", "de" }, { "Greek", "el" }, { "Greenlandic", "kl" }, { "Guarani", "gn" }, { "Gujarati", "gu" }, { "Hawaiian", "haw" }, /* Yes, "haw", not "cpe". */ { "Hebrew", "he" }, { "Hindi", "hi" }, { "Hungarian", "hu" }, { "Icelandic", "is" }, { "Indonesian", "id" }, { "Inuktitut", "iu" }, { "Irish", "ga" }, { "Italian", "it" }, { "Japanese", "ja" }, { "Javanese", "jv" }, { "Kalaallisut", "kl" }, { "Kannada", "kn" }, { "Kashmiri", "ks" }, { "Kazakh", "kk" }, { "Khmer", "km" }, { "Kinyarwanda", "rw" }, { "Kirghiz", "ky" }, { "Korean", "ko" }, { "Kurdish", "ku" }, { "Latin", "la" }, { "Latvian", "lv" }, { "Lithuanian", "lt" }, { "Macedonian", "mk" }, { "Malagasy", "mg" }, { "Malay", "ms" }, { "Malayalam", "ml" }, { "Maltese", "mt" }, { "Manx", "gv" }, { "Marathi", "mr" }, { "Moldavian", "mo" }, { "Mongolian", "mn" }, { "Nepali", "ne" }, { "Norwegian", "nb" }, /* Yes, "nb", not the obsolete "no". */ { "Nyanja", "ny" }, { "Nynorsk", "nn" }, { "Oriya", "or" }, { "Oromo", "om" }, { "Panjabi", "pa" }, { "Pashto", "ps" }, { "Persian", "fa" }, { "Polish", "pl" }, { "Portuguese", "pt" }, { "Portuguese, Brazilian", "pt_BR" }, { "Punjabi", "pa" }, { "Pushto", "ps" }, { "Quechua", "qu" }, { "Romanian", "ro" }, { "Ruanda", "rw" }, { "Rundi", "rn" }, { "Russian", "ru" }, { "Sami", "se_NO" }, /* Not just "se". */ { "Sanskrit", "sa" }, { "Scottish", "gd" }, { "Serbian", "sr" }, { "Simplified Chinese", "zh_CN" }, { "Sindhi", "sd" }, { "Sinhalese", "si" }, { "Slovak", "sk" }, { "Slovenian", "sl" }, { "Somali", "so" }, { "Spanish", "es" }, { "Sundanese", "su" }, { "Swahili", "sw" }, { "Swedish", "sv" }, { "Tagalog", "tl" }, { "Tajik", "tg" }, { "Tajiki", "tg" }, { "Tamil", "ta" }, { "Tatar", "tt" }, { "Telugu", "te" }, { "Thai", "th" }, { "Tibetan", "bo" }, { "Tigrinya", "ti" }, { "Tongan", "to" }, { "Traditional Chinese", "zh_TW" }, { "Turkish", "tr" }, { "Turkmen", "tk" }, { "Uighur", "ug" }, { "Ukrainian", "uk" }, { "Urdu", "ur" }, { "Uzbek", "uz" }, { "Vietnamese", "vi" }, { "Welsh", "cy" }, { "Yiddish", "yi" } }; /* Convert new-style locale names with language tags (ISO 639 and ISO 15924) to Unix (ISO 639 and ISO 3166) names. */ typedef struct { const char langtag[7+1]; const char unixy[12+1]; } langtag_entry; static const langtag_entry langtag_table[] = { /* Mac OS X has "az-Arab", "az-Cyrl", "az-Latn". The default script for az on Unix is Latin. */ { "az-Latn", "az" }, /* Mac OS X has "bs-Cyrl", "bs-Latn". The default script for bs on Unix is Latin. */ { "bs-Latn", "bs" }, /* Mac OS X has "ga-dots". Does not yet exist on Unix. */ { "ga-dots", "ga" }, /* Mac OS X has "kk-Cyrl". The default script for kk on Unix is Cyrillic. */ { "kk-Cyrl", "kk" }, /* Mac OS X has "mn-Cyrl", "mn-Mong". The default script for mn on Unix is Cyrillic. */ { "mn-Cyrl", "mn" }, /* Mac OS X has "ms-Arab", "ms-Latn". The default script for ms on Unix is Latin. */ { "ms-Latn", "ms" }, /* Mac OS X has "pa-Arab", "pa-Guru". Country codes are used to distinguish these on Unix. */ { "pa-Arab", "pa_PK" }, { "pa-Guru", "pa_IN" }, /* Mac OS X has "shi-Latn", "shi-Tfng". Does not yet exist on Unix. */ /* Mac OS X has "sr-Cyrl", "sr-Latn". The default script for sr on Unix is Cyrillic. */ { "sr-Cyrl", "sr" }, /* Mac OS X has "tg-Cyrl". The default script for tg on Unix is Cyrillic. */ { "tg-Cyrl", "tg" }, /* Mac OS X has "tk-Cyrl". The default script for tk on Unix is Cyrillic. */ { "tk-Cyrl", "tk" }, /* Mac OS X has "tt-Cyrl". The default script for tt on Unix is Cyrillic. */ { "tt-Cyrl", "tt" }, /* Mac OS X has "uz-Arab", "uz-Cyrl", "uz-Latn". The default script for uz on Unix is Latin. */ { "uz-Latn", "uz" }, /* Mac OS X has "vai-Latn", "vai-Vaii". Does not yet exist on Unix. */ /* Mac OS X has "yue-Hans", "yue-Hant". The default script for yue on Unix is Simplified Han. */ { "yue-Hans", "yue" }, /* Mac OS X has "zh-Hans", "zh-Hant". Country codes are used to distinguish these on Unix. */ { "zh-Hans", "zh_CN" }, { "zh-Hant", "zh_TW" } }; /* Convert script names (ISO 15924) to Unix conventions. See https://www.unicode.org/iso15924/iso15924-codes.html */ typedef struct { const char script[4+1]; const char unixy[9+1]; } script_entry; static const script_entry script_table[] = { { "Arab", "arabic" }, { "Cyrl", "cyrillic" }, { "Latn", "latin" }, { "Mong", "mongolian" } }; /* Step 1: Convert using legacy_table. */ if (name[0] >= 'A' && name[0] <= 'Z') { unsigned int i1, i2; i1 = 0; i2 = sizeof (legacy_table) / sizeof (legacy_entry); while (i2 - i1 > 1) { /* At this point we know that if name occurs in legacy_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const legacy_entry *p = &legacy_table[i]; if (strcmp (name, p->legacy) < 0) i2 = i; else i1 = i; } if (strcmp (name, legacy_table[i1].legacy) == 0) { strcpy (name, legacy_table[i1].unixy); return; } } /* Step 2: Convert using langtag_table and script_table. */ if (strlen (name) == 7 && name[2] == '-') { unsigned int i1, i2; i1 = 0; i2 = sizeof (langtag_table) / sizeof (langtag_entry); while (i2 - i1 > 1) { /* At this point we know that if name occurs in langtag_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const langtag_entry *p = &langtag_table[i]; if (strcmp (name, p->langtag) < 0) i2 = i; else i1 = i; } if (strcmp (name, langtag_table[i1].langtag) == 0) { strcpy (name, langtag_table[i1].unixy); return; } i1 = 0; i2 = sizeof (script_table) / sizeof (script_entry); while (i2 - i1 > 1) { /* At this point we know that if (name + 3) occurs in script_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const script_entry *p = &script_table[i]; if (strcmp (name + 3, p->script) < 0) i2 = i; else i1 = i; } if (strcmp (name + 3, script_table[i1].script) == 0) { name[2] = '@'; strcpy (name + 3, script_table[i1].unixy); return; } } /* Step 3: Convert new-style dash to Unix underscore. */ { char *p; for (p = name; *p != '\0'; p++) if (*p == '-') *p = '_'; } } #endif #if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ /* Canonicalize a Windows native locale name to a Unix locale name. NAME is a sufficiently large buffer. On input, it contains the Windows locale name. On output, it contains the Unix locale name. */ # if !defined IN_LIBINTL static # endif void gl_locale_name_canonicalize (char *name) { /* FIXME: This is probably incomplete: it does not handle "zh-Hans" and "zh-Hant". */ char *p; for (p = name; *p != '\0'; p++) if (*p == '-') { *p = '_'; p++; for (; *p != '\0'; p++) { if (*p >= 'a' && *p <= 'z') *p += 'A' - 'a'; if (*p == '-') { *p = '\0'; return; } } return; } } # if !defined IN_LIBINTL static # endif const char * gl_locale_name_from_win32_LANGID (LANGID langid) { /* Activate the new code only when the GETTEXT_MUI environment variable is set, for the time being, since the new code is not well tested. */ if (getenv ("GETTEXT_MUI") != NULL) { static char namebuf[256]; /* Query the system's notion of locale name. On Windows95/98/ME, GetLocaleInfoA returns some incorrect results. But we don't need to support systems that are so old. */ if (GetLocaleInfoA (MAKELCID (langid, SORT_DEFAULT), LOCALE_SNAME, namebuf, sizeof (namebuf) - 1)) { /* Convert it to a Unix locale name. */ gl_locale_name_canonicalize (namebuf); return namebuf; } } /* Internet Explorer has an LCID to RFC3066 name mapping stored in HKEY_CLASSES_ROOT\Mime\Database\Rfc1766. But we better don't use that since IE's i18n subsystem is known to be inconsistent with the native Windows base (e.g. they have different character conversion facilities that produce different results). */ /* Use our own table. */ { int primary, sub; /* Split into language and territory part. */ primary = PRIMARYLANGID (langid); sub = SUBLANGID (langid); /* Dispatch on language. See also https://www.unicode.org/unicode/onlinedat/languages.html . For details about languages, see https://www.ethnologue.com/ . */ switch (primary) { case LANG_AFRIKAANS: switch (sub) { case SUBLANG_AFRIKAANS_SOUTH_AFRICA: return "af_ZA"; } return "af"; case LANG_ALBANIAN: switch (sub) { case SUBLANG_ALBANIAN_ALBANIA: return "sq_AL"; } return "sq"; case LANG_ALSATIAN: switch (sub) { case SUBLANG_ALSATIAN_FRANCE: return "gsw_FR"; } return "gsw"; case LANG_AMHARIC: switch (sub) { case SUBLANG_AMHARIC_ETHIOPIA: return "am_ET"; } return "am"; case LANG_ARABIC: switch (sub) { case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA"; case SUBLANG_ARABIC_IRAQ: return "ar_IQ"; case SUBLANG_ARABIC_EGYPT: return "ar_EG"; case SUBLANG_ARABIC_LIBYA: return "ar_LY"; case SUBLANG_ARABIC_ALGERIA: return "ar_DZ"; case SUBLANG_ARABIC_MOROCCO: return "ar_MA"; case SUBLANG_ARABIC_TUNISIA: return "ar_TN"; case SUBLANG_ARABIC_OMAN: return "ar_OM"; case SUBLANG_ARABIC_YEMEN: return "ar_YE"; case SUBLANG_ARABIC_SYRIA: return "ar_SY"; case SUBLANG_ARABIC_JORDAN: return "ar_JO"; case SUBLANG_ARABIC_LEBANON: return "ar_LB"; case SUBLANG_ARABIC_KUWAIT: return "ar_KW"; case SUBLANG_ARABIC_UAE: return "ar_AE"; case SUBLANG_ARABIC_BAHRAIN: return "ar_BH"; case SUBLANG_ARABIC_QATAR: return "ar_QA"; } return "ar"; case LANG_ARMENIAN: switch (sub) { case SUBLANG_ARMENIAN_ARMENIA: return "hy_AM"; } return "hy"; case LANG_ASSAMESE: switch (sub) { case SUBLANG_ASSAMESE_INDIA: return "as_IN"; } return "as"; case LANG_AZERI: switch (sub) { /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */ case 0x1e: return "az@latin"; case SUBLANG_AZERI_LATIN: return "az_AZ@latin"; case 0x1d: return "az@cyrillic"; case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic"; } return "az"; case LANG_BASHKIR: switch (sub) { case SUBLANG_BASHKIR_RUSSIA: return "ba_RU"; } return "ba"; case LANG_BASQUE: switch (sub) { case SUBLANG_BASQUE_BASQUE: return "eu_ES"; } return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */ case LANG_BELARUSIAN: switch (sub) { case SUBLANG_BELARUSIAN_BELARUS: return "be_BY"; } return "be"; case LANG_BENGALI: switch (sub) { case SUBLANG_BENGALI_INDIA: return "bn_IN"; case SUBLANG_BENGALI_BANGLADESH: return "bn_BD"; } return "bn"; case LANG_BRETON: switch (sub) { case SUBLANG_BRETON_FRANCE: return "br_FR"; } return "br"; case LANG_BULGARIAN: switch (sub) { case SUBLANG_BULGARIAN_BULGARIA: return "bg_BG"; } return "bg"; case LANG_BURMESE: switch (sub) { case SUBLANG_DEFAULT: return "my_MM"; } return "my"; case LANG_CAMBODIAN: switch (sub) { case SUBLANG_CAMBODIAN_CAMBODIA: return "km_KH"; } return "km"; case LANG_CATALAN: switch (sub) { case SUBLANG_CATALAN_SPAIN: return "ca_ES"; } return "ca"; case LANG_CHEROKEE: switch (sub) { case SUBLANG_DEFAULT: return "chr_US"; } return "chr"; case LANG_CHINESE: switch (sub) { case SUBLANG_CHINESE_TRADITIONAL: case 0x1f: return "zh_TW"; case SUBLANG_CHINESE_SIMPLIFIED: case 0x00: return "zh_CN"; case SUBLANG_CHINESE_HONGKONG: return "zh_HK"; /* traditional */ case SUBLANG_CHINESE_SINGAPORE: return "zh_SG"; /* simplified */ case SUBLANG_CHINESE_MACAU: return "zh_MO"; /* traditional */ } return "zh"; case LANG_CORSICAN: switch (sub) { case SUBLANG_CORSICAN_FRANCE: return "co_FR"; } return "co"; case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN == LANG_BOSNIAN * What used to be called Serbo-Croatian * should really now be two separate * languages because of political reasons. * (Says tml, who knows nothing about Serbian * or Croatian.) * (I can feel those flames coming already.) */ switch (sub) { /* Croatian */ case 0x00: return "hr"; case SUBLANG_CROATIAN_CROATIA: return "hr_HR"; case SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN: return "hr_BA"; /* Serbian */ case 0x1f: return "sr"; case 0x1c: return "sr"; /* latin */ case SUBLANG_SERBIAN_LATIN: return "sr_CS"; /* latin */ case 0x09: return "sr_RS"; /* latin */ case 0x0b: return "sr_ME"; /* latin */ case 0x06: return "sr_BA"; /* latin */ case 0x1b: return "sr@cyrillic"; case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic"; case 0x0a: return "sr_RS@cyrillic"; case 0x0c: return "sr_ME@cyrillic"; case 0x07: return "sr_BA@cyrillic"; /* Bosnian */ case 0x1e: return "bs"; case 0x1a: return "bs"; /* latin */ case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN: return "bs_BA"; /* latin */ case 0x19: return "bs@cyrillic"; case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC: return "bs_BA@cyrillic"; } return "hr"; case LANG_CZECH: switch (sub) { case SUBLANG_CZECH_CZECH_REPUBLIC: return "cs_CZ"; } return "cs"; case LANG_DANISH: switch (sub) { case SUBLANG_DANISH_DENMARK: return "da_DK"; } return "da"; case LANG_DARI: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_DARI_AFGHANISTAN: return "prs_AF"; } return "prs"; case LANG_DIVEHI: switch (sub) { case SUBLANG_DIVEHI_MALDIVES: return "dv_MV"; } return "dv"; case LANG_DUTCH: switch (sub) { case SUBLANG_DUTCH: return "nl_NL"; case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE"; case SUBLANG_DUTCH_SURINAM: return "nl_SR"; } return "nl"; case LANG_EDO: switch (sub) { case SUBLANG_DEFAULT: return "bin_NG"; } return "bin"; case LANG_ENGLISH: switch (sub) { /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought * English was the language spoken in England. * Oh well. */ case SUBLANG_ENGLISH_US: return "en_US"; case SUBLANG_ENGLISH_UK: return "en_GB"; case SUBLANG_ENGLISH_AUS: return "en_AU"; case SUBLANG_ENGLISH_CAN: return "en_CA"; case SUBLANG_ENGLISH_NZ: return "en_NZ"; case SUBLANG_ENGLISH_EIRE: return "en_IE"; case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA"; case SUBLANG_ENGLISH_JAMAICA: return "en_JM"; case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */ case SUBLANG_ENGLISH_BELIZE: return "en_BZ"; case SUBLANG_ENGLISH_TRINIDAD: return "en_TT"; case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW"; case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH"; case SUBLANG_ENGLISH_INDONESIA: return "en_ID"; case SUBLANG_ENGLISH_HONGKONG: return "en_HK"; case SUBLANG_ENGLISH_INDIA: return "en_IN"; case SUBLANG_ENGLISH_MALAYSIA: return "en_MY"; case SUBLANG_ENGLISH_SINGAPORE: return "en_SG"; } return "en"; case LANG_ESTONIAN: switch (sub) { case SUBLANG_ESTONIAN_ESTONIA: return "et_EE"; } return "et"; case LANG_FAEROESE: switch (sub) { case SUBLANG_FAEROESE_FAROE_ISLANDS: return "fo_FO"; } return "fo"; case LANG_FARSI: switch (sub) { case SUBLANG_FARSI_IRAN: return "fa_IR"; } return "fa"; case LANG_FINNISH: switch (sub) { case SUBLANG_FINNISH_FINLAND: return "fi_FI"; } return "fi"; case LANG_FRENCH: switch (sub) { case SUBLANG_FRENCH: return "fr_FR"; case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE"; case SUBLANG_FRENCH_CANADIAN: return "fr_CA"; case SUBLANG_FRENCH_SWISS: return "fr_CH"; case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU"; case SUBLANG_FRENCH_MONACO: return "fr_MC"; case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */ case SUBLANG_FRENCH_REUNION: return "fr_RE"; case SUBLANG_FRENCH_CONGO: return "fr_CG"; case SUBLANG_FRENCH_SENEGAL: return "fr_SN"; case SUBLANG_FRENCH_CAMEROON: return "fr_CM"; case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI"; case SUBLANG_FRENCH_MALI: return "fr_ML"; case SUBLANG_FRENCH_MOROCCO: return "fr_MA"; case SUBLANG_FRENCH_HAITI: return "fr_HT"; } return "fr"; case LANG_FRISIAN: switch (sub) { case SUBLANG_FRISIAN_NETHERLANDS: return "fy_NL"; } return "fy"; case LANG_FULFULDE: /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */ switch (sub) { case SUBLANG_DEFAULT: return "ff_NG"; } return "ff"; case LANG_GAELIC: switch (sub) { case 0x01: /* SCOTTISH */ /* old, superseded by LANG_SCOTTISH_GAELIC */ return "gd_GB"; case SUBLANG_IRISH_IRELAND: return "ga_IE"; } return "ga"; case LANG_GALICIAN: switch (sub) { case SUBLANG_GALICIAN_SPAIN: return "gl_ES"; } return "gl"; case LANG_GEORGIAN: switch (sub) { case SUBLANG_GEORGIAN_GEORGIA: return "ka_GE"; } return "ka"; case LANG_GERMAN: switch (sub) { case SUBLANG_GERMAN: return "de_DE"; case SUBLANG_GERMAN_SWISS: return "de_CH"; case SUBLANG_GERMAN_AUSTRIAN: return "de_AT"; case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU"; case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI"; } return "de"; case LANG_GREEK: switch (sub) { case SUBLANG_GREEK_GREECE: return "el_GR"; } return "el"; case LANG_GREENLANDIC: switch (sub) { case SUBLANG_GREENLANDIC_GREENLAND: return "kl_GL"; } return "kl"; case LANG_GUARANI: switch (sub) { case SUBLANG_DEFAULT: return "gn_PY"; } return "gn"; case LANG_GUJARATI: switch (sub) { case SUBLANG_GUJARATI_INDIA: return "gu_IN"; } return "gu"; case LANG_HAUSA: switch (sub) { case 0x1f: return "ha"; case SUBLANG_HAUSA_NIGERIA_LATIN: return "ha_NG"; } return "ha"; case LANG_HAWAIIAN: /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers) or Hawaii Creole English ("cpe_US", 600000 speakers)? */ switch (sub) { case SUBLANG_DEFAULT: return "cpe_US"; } return "cpe"; case LANG_HEBREW: switch (sub) { case SUBLANG_HEBREW_ISRAEL: return "he_IL"; } return "he"; case LANG_HINDI: switch (sub) { case SUBLANG_HINDI_INDIA: return "hi_IN"; } return "hi"; case LANG_HUNGARIAN: switch (sub) { case SUBLANG_HUNGARIAN_HUNGARY: return "hu_HU"; } return "hu"; case LANG_IBIBIO: switch (sub) { case SUBLANG_DEFAULT: return "nic_NG"; } return "nic"; case LANG_ICELANDIC: switch (sub) { case SUBLANG_ICELANDIC_ICELAND: return "is_IS"; } return "is"; case LANG_IGBO: switch (sub) { case SUBLANG_IGBO_NIGERIA: return "ig_NG"; } return "ig"; case LANG_INDONESIAN: switch (sub) { case SUBLANG_INDONESIAN_INDONESIA: return "id_ID"; } return "id"; case LANG_INUKTITUT: switch (sub) { case 0x1e: return "iu"; /* syllabic */ case SUBLANG_INUKTITUT_CANADA: return "iu_CA"; /* syllabic */ case 0x1f: return "iu@latin"; case SUBLANG_INUKTITUT_CANADA_LATIN: return "iu_CA@latin"; } return "iu"; case LANG_ITALIAN: switch (sub) { case SUBLANG_ITALIAN: return "it_IT"; case SUBLANG_ITALIAN_SWISS: return "it_CH"; } return "it"; case LANG_JAPANESE: switch (sub) { case SUBLANG_JAPANESE_JAPAN: return "ja_JP"; } return "ja"; case LANG_KANNADA: switch (sub) { case SUBLANG_KANNADA_INDIA: return "kn_IN"; } return "kn"; case LANG_KANURI: switch (sub) { case SUBLANG_DEFAULT: return "kr_NG"; } return "kr"; case LANG_KASHMIRI: switch (sub) { case SUBLANG_DEFAULT: return "ks_PK"; case SUBLANG_KASHMIRI_INDIA: return "ks_IN"; } return "ks"; case LANG_KAZAK: switch (sub) { case SUBLANG_KAZAK_KAZAKHSTAN: return "kk_KZ"; } return "kk"; case LANG_KICHE: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_KICHE_GUATEMALA: return "qut_GT"; } return "qut"; case LANG_KINYARWANDA: switch (sub) { case SUBLANG_KINYARWANDA_RWANDA: return "rw_RW"; } return "rw"; case LANG_KONKANI: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_KONKANI_INDIA: return "kok_IN"; } return "kok"; case LANG_KOREAN: switch (sub) { case SUBLANG_DEFAULT: return "ko_KR"; } return "ko"; case LANG_KYRGYZ: switch (sub) { case SUBLANG_KYRGYZ_KYRGYZSTAN: return "ky_KG"; } return "ky"; case LANG_LAO: switch (sub) { case SUBLANG_LAO_LAOS: return "lo_LA"; } return "lo"; case LANG_LATIN: switch (sub) { case SUBLANG_DEFAULT: return "la_VA"; } return "la"; case LANG_LATVIAN: switch (sub) { case SUBLANG_LATVIAN_LATVIA: return "lv_LV"; } return "lv"; case LANG_LITHUANIAN: switch (sub) { case SUBLANG_LITHUANIAN_LITHUANIA: return "lt_LT"; } return "lt"; case LANG_LUXEMBOURGISH: switch (sub) { case SUBLANG_LUXEMBOURGISH_LUXEMBOURG: return "lb_LU"; } return "lb"; case LANG_MACEDONIAN: switch (sub) { case SUBLANG_MACEDONIAN_MACEDONIA: return "mk_MK"; } return "mk"; case LANG_MALAY: switch (sub) { case SUBLANG_MALAY_MALAYSIA: return "ms_MY"; case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN"; } return "ms"; case LANG_MALAYALAM: switch (sub) { case SUBLANG_MALAYALAM_INDIA: return "ml_IN"; } return "ml"; case LANG_MALTESE: switch (sub) { case SUBLANG_MALTESE_MALTA: return "mt_MT"; } return "mt"; case LANG_MANIPURI: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_DEFAULT: return "mni_IN"; } return "mni"; case LANG_MAORI: switch (sub) { case SUBLANG_MAORI_NEW_ZEALAND: return "mi_NZ"; } return "mi"; case LANG_MAPUDUNGUN: switch (sub) { case SUBLANG_MAPUDUNGUN_CHILE: return "arn_CL"; } return "arn"; case LANG_MARATHI: switch (sub) { case SUBLANG_MARATHI_INDIA: return "mr_IN"; } return "mr"; case LANG_MOHAWK: switch (sub) { case SUBLANG_MOHAWK_CANADA: return "moh_CA"; } return "moh"; case LANG_MONGOLIAN: switch (sub) { case SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA: case 0x1e: return "mn_MN"; case SUBLANG_MONGOLIAN_PRC: case 0x1f: return "mn_CN"; } return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */ case LANG_NEPALI: switch (sub) { case SUBLANG_NEPALI_NEPAL: return "ne_NP"; case SUBLANG_NEPALI_INDIA: return "ne_IN"; } return "ne"; case LANG_NORWEGIAN: switch (sub) { case 0x1f: return "nb"; case SUBLANG_NORWEGIAN_BOKMAL: return "nb_NO"; case 0x1e: return "nn"; case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO"; } return "no"; case LANG_OCCITAN: switch (sub) { case SUBLANG_OCCITAN_FRANCE: return "oc_FR"; } return "oc"; case LANG_ORIYA: switch (sub) { case SUBLANG_ORIYA_INDIA: return "or_IN"; } return "or"; case LANG_OROMO: switch (sub) { case SUBLANG_DEFAULT: return "om_ET"; } return "om"; case LANG_PAPIAMENTU: switch (sub) { case SUBLANG_DEFAULT: return "pap_AN"; } return "pap"; case LANG_PASHTO: switch (sub) { case SUBLANG_PASHTO_AFGHANISTAN: return "ps_AF"; } return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */ case LANG_POLISH: switch (sub) { case SUBLANG_POLISH_POLAND: return "pl_PL"; } return "pl"; case LANG_PORTUGUESE: switch (sub) { /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT. Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */ case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR"; case SUBLANG_PORTUGUESE: return "pt_PT"; } return "pt"; case LANG_PUNJABI: switch (sub) { case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */ case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */ } return "pa"; case LANG_QUECHUA: /* Note: Microsoft uses the non-ISO language code "quz". */ switch (sub) { case SUBLANG_QUECHUA_BOLIVIA: return "qu_BO"; case SUBLANG_QUECHUA_ECUADOR: return "qu_EC"; case SUBLANG_QUECHUA_PERU: return "qu_PE"; } return "qu"; case LANG_ROMANIAN: switch (sub) { case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO"; case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD"; } return "ro"; case LANG_ROMANSH: switch (sub) { case SUBLANG_ROMANSH_SWITZERLAND: return "rm_CH"; } return "rm"; case LANG_RUSSIAN: switch (sub) { case SUBLANG_RUSSIAN_RUSSIA: return "ru_RU"; case SUBLANG_RUSSIAN_MOLDAVIA: return "ru_MD"; } return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */ case LANG_SAMI: switch (sub) { /* Northern Sami */ case 0x00: return "se"; case SUBLANG_SAMI_NORTHERN_NORWAY: return "se_NO"; case SUBLANG_SAMI_NORTHERN_SWEDEN: return "se_SE"; case SUBLANG_SAMI_NORTHERN_FINLAND: return "se_FI"; /* Lule Sami */ case 0x1f: return "smj"; case SUBLANG_SAMI_LULE_NORWAY: return "smj_NO"; case SUBLANG_SAMI_LULE_SWEDEN: return "smj_SE"; /* Southern Sami */ case 0x1e: return "sma"; case SUBLANG_SAMI_SOUTHERN_NORWAY: return "sma_NO"; case SUBLANG_SAMI_SOUTHERN_SWEDEN: return "sma_SE"; /* Skolt Sami */ case 0x1d: return "sms"; case SUBLANG_SAMI_SKOLT_FINLAND: return "sms_FI"; /* Inari Sami */ case 0x1c: return "smn"; case SUBLANG_SAMI_INARI_FINLAND: return "smn_FI"; } return "se"; /* or "smi"? */ case LANG_SANSKRIT: switch (sub) { case SUBLANG_SANSKRIT_INDIA: return "sa_IN"; } return "sa"; case LANG_SCOTTISH_GAELIC: switch (sub) { case SUBLANG_DEFAULT: return "gd_GB"; } return "gd"; case LANG_SINDHI: switch (sub) { case SUBLANG_SINDHI_INDIA: return "sd_IN"; case SUBLANG_SINDHI_PAKISTAN: return "sd_PK"; /*case SUBLANG_SINDHI_AFGHANISTAN: return "sd_AF";*/ } return "sd"; case LANG_SINHALESE: switch (sub) { case SUBLANG_SINHALESE_SRI_LANKA: return "si_LK"; } return "si"; case LANG_SLOVAK: switch (sub) { case SUBLANG_SLOVAK_SLOVAKIA: return "sk_SK"; } return "sk"; case LANG_SLOVENIAN: switch (sub) { case SUBLANG_SLOVENIAN_SLOVENIA: return "sl_SI"; } return "sl"; case LANG_SOMALI: switch (sub) { case SUBLANG_DEFAULT: return "so_SO"; } return "so"; case LANG_SORBIAN: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { /* Upper Sorbian */ case 0x00: return "hsb"; case SUBLANG_UPPER_SORBIAN_GERMANY: return "hsb_DE"; /* Lower Sorbian */ case 0x1f: return "dsb"; case SUBLANG_LOWER_SORBIAN_GERMANY: return "dsb_DE"; } return "wen"; case LANG_SOTHO: /* <https://docs.microsoft.com/en-us/windows/desktop/Intl/language-identifier-constants-and-strings> calls it "Sesotho sa Leboa"; according to <https://www.ethnologue.com/show_language.asp?code=nso> <https://www.ethnologue.com/show_language.asp?code=sot> it's the same as Northern Sotho. */ switch (sub) { case SUBLANG_SOTHO_SOUTH_AFRICA: return "nso_ZA"; } return "nso"; case LANG_SPANISH: switch (sub) { case SUBLANG_SPANISH: return "es_ES"; case SUBLANG_SPANISH_MEXICAN: return "es_MX"; case SUBLANG_SPANISH_MODERN: return "es_ES@modern"; /* not seen on Unix */ case SUBLANG_SPANISH_GUATEMALA: return "es_GT"; case SUBLANG_SPANISH_COSTA_RICA: return "es_CR"; case SUBLANG_SPANISH_PANAMA: return "es_PA"; case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO"; case SUBLANG_SPANISH_VENEZUELA: return "es_VE"; case SUBLANG_SPANISH_COLOMBIA: return "es_CO"; case SUBLANG_SPANISH_PERU: return "es_PE"; case SUBLANG_SPANISH_ARGENTINA: return "es_AR"; case SUBLANG_SPANISH_ECUADOR: return "es_EC"; case SUBLANG_SPANISH_CHILE: return "es_CL"; case SUBLANG_SPANISH_URUGUAY: return "es_UY"; case SUBLANG_SPANISH_PARAGUAY: return "es_PY"; case SUBLANG_SPANISH_BOLIVIA: return "es_BO"; case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV"; case SUBLANG_SPANISH_HONDURAS: return "es_HN"; case SUBLANG_SPANISH_NICARAGUA: return "es_NI"; case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR"; case SUBLANG_SPANISH_US: return "es_US"; } return "es"; case LANG_SUTU: switch (sub) { case SUBLANG_DEFAULT: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */ } return "bnt"; case LANG_SWAHILI: switch (sub) { case SUBLANG_SWAHILI_KENYA: return "sw_KE"; } return "sw"; case LANG_SWEDISH: switch (sub) { case SUBLANG_SWEDISH_SWEDEN: return "sv_SE"; case SUBLANG_SWEDISH_FINLAND: return "sv_FI"; } return "sv"; case LANG_SYRIAC: switch (sub) { case SUBLANG_SYRIAC_SYRIA: return "syr_SY"; /* An extinct language. */ } return "syr"; case LANG_TAGALOG: switch (sub) { case SUBLANG_TAGALOG_PHILIPPINES: return "tl_PH"; /* or "fil_PH"? */ } return "tl"; /* or "fil"? */ case LANG_TAJIK: switch (sub) { case 0x1f: return "tg"; case SUBLANG_TAJIK_TAJIKISTAN: return "tg_TJ"; } return "tg"; case LANG_TAMAZIGHT: /* Note: Microsoft uses the non-ISO language code "tmz". */ switch (sub) { /* FIXME: Adjust this when Tamazight locales appear on Unix. */ case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic"; case 0x1f: return "ber@latin"; case SUBLANG_TAMAZIGHT_ALGERIA_LATIN: return "ber_DZ@latin"; } return "ber"; case LANG_TAMIL: switch (sub) { case SUBLANG_TAMIL_INDIA: return "ta_IN"; } return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */ case LANG_TATAR: switch (sub) { case SUBLANG_TATAR_RUSSIA: return "tt_RU"; } return "tt"; case LANG_TELUGU: switch (sub) { case SUBLANG_TELUGU_INDIA: return "te_IN"; } return "te"; case LANG_THAI: switch (sub) { case SUBLANG_THAI_THAILAND: return "th_TH"; } return "th"; case LANG_TIBETAN: switch (sub) { case SUBLANG_TIBETAN_PRC: /* Most Tibetans would not like "bo_CN". But Tibet does not yet have a country code of its own. */ return "bo"; case SUBLANG_TIBETAN_BHUTAN: return "bo_BT"; } return "bo"; case LANG_TIGRINYA: switch (sub) { case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET"; case SUBLANG_TIGRINYA_ERITREA: return "ti_ER"; } return "ti"; case LANG_TSONGA: switch (sub) { case SUBLANG_DEFAULT: return "ts_ZA"; } return "ts"; case LANG_TSWANA: /* Spoken in South Africa, Botswana. */ switch (sub) { case SUBLANG_TSWANA_SOUTH_AFRICA: return "tn_ZA"; } return "tn"; case LANG_TURKISH: switch (sub) { case SUBLANG_TURKISH_TURKEY: return "tr_TR"; } return "tr"; case LANG_TURKMEN: switch (sub) { case SUBLANG_TURKMEN_TURKMENISTAN: return "tk_TM"; } return "tk"; case LANG_UIGHUR: switch (sub) { case SUBLANG_UIGHUR_PRC: return "ug_CN"; } return "ug"; case LANG_UKRAINIAN: switch (sub) { case SUBLANG_UKRAINIAN_UKRAINE: return "uk_UA"; } return "uk"; case LANG_URDU: switch (sub) { case SUBLANG_URDU_PAKISTAN: return "ur_PK"; case SUBLANG_URDU_INDIA: return "ur_IN"; } return "ur"; case LANG_UZBEK: switch (sub) { case 0x1f: return "uz"; case SUBLANG_UZBEK_LATIN: return "uz_UZ"; case 0x1e: return "uz@cyrillic"; case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic"; } return "uz"; case LANG_VENDA: switch (sub) { case SUBLANG_DEFAULT: return "ve_ZA"; } return "ve"; case LANG_VIETNAMESE: switch (sub) { case SUBLANG_VIETNAMESE_VIETNAM: return "vi_VN"; } return "vi"; case LANG_WELSH: switch (sub) { case SUBLANG_WELSH_UNITED_KINGDOM: return "cy_GB"; } return "cy"; case LANG_WOLOF: switch (sub) { case SUBLANG_WOLOF_SENEGAL: return "wo_SN"; } return "wo"; case LANG_XHOSA: switch (sub) { case SUBLANG_XHOSA_SOUTH_AFRICA: return "xh_ZA"; } return "xh"; case LANG_YAKUT: switch (sub) { case SUBLANG_YAKUT_RUSSIA: return "sah_RU"; } return "sah"; case LANG_YI: switch (sub) { case SUBLANG_YI_PRC: return "ii_CN"; } return "ii"; case LANG_YIDDISH: switch (sub) { case SUBLANG_DEFAULT: return "yi_IL"; } return "yi"; case LANG_YORUBA: switch (sub) { case SUBLANG_YORUBA_NIGERIA: return "yo_NG"; } return "yo"; case LANG_ZULU: switch (sub) { case SUBLANG_ZULU_SOUTH_AFRICA: return "zu_ZA"; } return "zu"; default: return "C"; } } } # if !defined IN_LIBINTL static # endif const char * gl_locale_name_from_win32_LCID (LCID lcid) { LANGID langid; /* Strip off the sorting rules, keep only the language part. */ langid = LANGIDFROMLCID (lcid); return gl_locale_name_from_win32_LANGID (langid); } # ifdef WINDOWS_NATIVE /* Two variables to interface between get_lcid and the EnumLocales callback function below. */ static LCID found_lcid; static char lname[LC_MAX * (LOCALE_NAME_MAX_LENGTH + 1) + 1]; /* Callback function for EnumLocales. */ static BOOL CALLBACK enum_locales_fn (LPSTR locale_num_str) { char *endp; char locval[2 * LOCALE_NAME_MAX_LENGTH + 1 + 1]; LCID try_lcid = strtoul (locale_num_str, &endp, 16); if (GetLocaleInfo (try_lcid, LOCALE_SENGLANGUAGE, locval, LOCALE_NAME_MAX_LENGTH)) { strcat (locval, "_"); if (GetLocaleInfo (try_lcid, LOCALE_SENGCOUNTRY, locval + strlen (locval), LOCALE_NAME_MAX_LENGTH)) { size_t locval_len = strlen (locval); if (strncmp (locval, lname, locval_len) == 0 && (lname[locval_len] == '.' || lname[locval_len] == '\0')) { found_lcid = try_lcid; return FALSE; } } } return TRUE; } /* This lock protects the get_lcid against multiple simultaneous calls. */ gl_lock_define_initialized(static, get_lcid_lock) /* Return the Locale ID (LCID) number given the locale's name, a string, in LOCALE_NAME. This works by enumerating all the locales supported by the system, until we find one whose name matches LOCALE_NAME. */ static LCID get_lcid (const char *locale_name) { /* A simple cache. */ static LCID last_lcid; static char last_locale[1000]; /* Lock while looking for an LCID, to protect access to static variables: last_lcid, last_locale, found_lcid, and lname. */ gl_lock_lock (get_lcid_lock); if (last_lcid > 0 && strcmp (locale_name, last_locale) == 0) { gl_lock_unlock (get_lcid_lock); return last_lcid; } strncpy (lname, locale_name, sizeof (lname) - 1); lname[sizeof (lname) - 1] = '\0'; found_lcid = 0; EnumSystemLocales (enum_locales_fn, LCID_SUPPORTED); if (found_lcid > 0) { last_lcid = found_lcid; strcpy (last_locale, locale_name); } gl_lock_unlock (get_lcid_lock); return found_lcid; } # endif #endif #if HAVE_GOOD_USELOCALE /* glibc, Mac OS X, FreeBSD >= 9.1, Cygwin >= 2.6, Solaris 11 OpenIndiana, or Solaris >= 11.4 */ /* Simple hash set of strings. We don't want to drag in lots of hash table code here. */ # define SIZE_BITS (sizeof (size_t) * CHAR_BIT) /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See https://www.haible.de/bruno/hashfunc.html. */ static size_t _GL_ATTRIBUTE_PURE string_hash (const void *x) { const char *s = (const char *) x; size_t h = 0; for (; *s; s++) h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); return h; } /* A hash table of fixed size. Multiple threads can access it read-only simultaneously, but only one thread can insert into it at the same time. */ /* A node in a hash bucket collision list. */ struct struniq_hash_node { struct struniq_hash_node * volatile next; char contents[FLEXIBLE_ARRAY_MEMBER]; }; # define STRUNIQ_HASH_TABLE_SIZE 257 static struct struniq_hash_node * volatile struniq_hash_table[STRUNIQ_HASH_TABLE_SIZE] /* = { NULL, ..., NULL } */; /* This lock protects the struniq_hash_table against multiple simultaneous insertions. */ gl_lock_define_initialized(static, struniq_lock) /* Store a copy of the given string in a string pool with indefinite extent. Return a pointer to this copy. */ static const char * struniq (const char *string) { size_t hashcode = string_hash (string); size_t slot = hashcode % STRUNIQ_HASH_TABLE_SIZE; size_t size; struct struniq_hash_node *new_node; struct struniq_hash_node *p; for (p = struniq_hash_table[slot]; p != NULL; p = p->next) if (strcmp (p->contents, string) == 0) return p->contents; size = strlen (string) + 1; new_node = (struct struniq_hash_node *) malloc (FLEXSIZEOF (struct struniq_hash_node, contents, size)); if (new_node == NULL) /* Out of memory. Return a statically allocated string. */ return "C"; memcpy (new_node->contents, string, size); { bool mt = gl_multithreaded (); /* Lock while inserting new_node. */ if (mt) gl_lock_lock (struniq_lock); /* Check whether another thread already added the string while we were waiting on the lock. */ for (p = struniq_hash_table[slot]; p != NULL; p = p->next) if (strcmp (p->contents, string) == 0) { free (new_node); new_node = p; goto done; } /* Really insert new_node into the hash table. Fill new_node entirely first, because other threads may be iterating over the linked list. */ new_node->next = struniq_hash_table[slot]; struniq_hash_table[slot] = new_node; done: /* Unlock after new_node is inserted. */ if (mt) gl_lock_unlock (struniq_lock); } return new_node->contents; } #endif #if LOCALENAME_ENHANCE_LOCALE_FUNCS /* The 'locale_t' object does not contain the names of the locale categories. We have to associate them with the object through a hash table. The hash table is defined in localename-table.[hc]. */ /* Returns the name of a given locale category in a given locale_t object, allocated as a string with indefinite extent. */ static const char * get_locale_t_name (int category, locale_t locale) { if (locale == LC_GLOBAL_LOCALE) { /* Query the global locale. */ const char *name = setlocale_null (category); if (name != NULL) return struniq (name); else /* Should normally not happen. */ return ""; } else { /* Look up the names in the hash table. */ size_t hashcode = locale_hash_function (locale); size_t slot = hashcode % LOCALE_HASH_TABLE_SIZE; /* If the locale was not found in the table, return "". This can happen if the application uses the original newlocale()/duplocale() functions instead of the overridden ones. */ const char *name = ""; struct locale_hash_node *p; /* Lock while looking up the hash node. */ gl_rwlock_rdlock (locale_lock); for (p = locale_hash_table[slot]; p != NULL; p = p->next) if (p->locale == locale) { name = p->names.category_name[category]; break; } gl_rwlock_unlock (locale_lock); return name; } } # if !(defined newlocale && defined duplocale && defined freelocale) # error "newlocale, duplocale, freelocale not being replaced as expected!" # endif /* newlocale() override. */ locale_t newlocale (int category_mask, const char *name, locale_t base) #undef newlocale { struct locale_categories_names names; struct locale_hash_node *node; locale_t result; /* Make sure name has indefinite extent. */ if (((LC_CTYPE_MASK | LC_NUMERIC_MASK | LC_TIME_MASK | LC_COLLATE_MASK | LC_MONETARY_MASK | LC_MESSAGES_MASK) & category_mask) != 0) name = struniq (name); /* Determine the category names of the result. */ if (((LC_CTYPE_MASK | LC_NUMERIC_MASK | LC_TIME_MASK | LC_COLLATE_MASK | LC_MONETARY_MASK | LC_MESSAGES_MASK) & ~category_mask) == 0) { /* Use name, ignore base. */ int category; name = struniq (name); for (category = 0; category < 6; category++) names.category_name[category] = name; } else { /* Use base, possibly also name. */ if (base == NULL) { int category; for (category = 0; category < 6; category++) { int mask; switch (category) { case LC_CTYPE: mask = LC_CTYPE_MASK; break; case LC_NUMERIC: mask = LC_NUMERIC_MASK; break; case LC_TIME: mask = LC_TIME_MASK; break; case LC_COLLATE: mask = LC_COLLATE_MASK; break; case LC_MONETARY: mask = LC_MONETARY_MASK; break; case LC_MESSAGES: mask = LC_MESSAGES_MASK; break; default: abort (); } names.category_name[category] = ((mask & category_mask) != 0 ? name : "C"); } } else if (base == LC_GLOBAL_LOCALE) { int category; for (category = 0; category < 6; category++) { int mask; switch (category) { case LC_CTYPE: mask = LC_CTYPE_MASK; break; case LC_NUMERIC: mask = LC_NUMERIC_MASK; break; case LC_TIME: mask = LC_TIME_MASK; break; case LC_COLLATE: mask = LC_COLLATE_MASK; break; case LC_MONETARY: mask = LC_MONETARY_MASK; break; case LC_MESSAGES: mask = LC_MESSAGES_MASK; break; default: abort (); } names.category_name[category] = ((mask & category_mask) != 0 ? name : get_locale_t_name (category, LC_GLOBAL_LOCALE)); } } else { /* Look up the names of base in the hash table. Like multiple calls of get_locale_t_name, but locking only once. */ struct locale_hash_node *p; int category; /* Lock while looking up the hash node. */ gl_rwlock_rdlock (locale_lock); for (p = locale_hash_table[locale_hash_function (base) % LOCALE_HASH_TABLE_SIZE]; p != NULL; p = p->next) if (p->locale == base) break; for (category = 0; category < 6; category++) { int mask; switch (category) { case LC_CTYPE: mask = LC_CTYPE_MASK; break; case LC_NUMERIC: mask = LC_NUMERIC_MASK; break; case LC_TIME: mask = LC_TIME_MASK; break; case LC_COLLATE: mask = LC_COLLATE_MASK; break; case LC_MONETARY: mask = LC_MONETARY_MASK; break; case LC_MESSAGES: mask = LC_MESSAGES_MASK; break; default: abort (); } names.category_name[category] = ((mask & category_mask) != 0 ? name : (p != NULL ? p->names.category_name[category] : "")); } gl_rwlock_unlock (locale_lock); } } node = (struct locale_hash_node *) malloc (sizeof (struct locale_hash_node)); if (node == NULL) /* errno is set to ENOMEM. */ return NULL; result = newlocale (category_mask, name, base); if (result == NULL) { free (node); return NULL; } /* Fill the hash node. */ node->locale = result; node->names = names; /* Insert it in the hash table. */ { size_t hashcode = locale_hash_function (result); size_t slot = hashcode % LOCALE_HASH_TABLE_SIZE; struct locale_hash_node *p; /* Lock while inserting the new node. */ gl_rwlock_wrlock (locale_lock); for (p = locale_hash_table[slot]; p != NULL; p = p->next) if (p->locale == result) { /* This can happen if the application uses the original freelocale() function instead of the overridden one. */ p->names = node->names; break; } if (p == NULL) { node->next = locale_hash_table[slot]; locale_hash_table[slot] = node; } gl_rwlock_unlock (locale_lock); if (p != NULL) free (node); } return result; } /* duplocale() override. */ locale_t duplocale (locale_t locale) #undef duplocale { struct locale_hash_node *node; locale_t result; if (locale == NULL) /* Invalid argument. */ abort (); node = (struct locale_hash_node *) malloc (sizeof (struct locale_hash_node)); if (node == NULL) /* errno is set to ENOMEM. */ return NULL; result = duplocale (locale); if (result == NULL) { free (node); return NULL; } /* Fill the hash node. */ node->locale = result; if (locale == LC_GLOBAL_LOCALE) { int category; for (category = 0; category < 6; category++) node->names.category_name[category] = get_locale_t_name (category, LC_GLOBAL_LOCALE); /* Lock before inserting the new node. */ gl_rwlock_wrlock (locale_lock); } else { struct locale_hash_node *p; /* Lock once, for the lookup and the insertion. */ gl_rwlock_wrlock (locale_lock); for (p = locale_hash_table[locale_hash_function (locale) % LOCALE_HASH_TABLE_SIZE]; p != NULL; p = p->next) if (p->locale == locale) break; if (p != NULL) node->names = p->names; else { /* This can happen if the application uses the original newlocale()/duplocale() functions instead of the overridden ones. */ int category; for (category = 0; category < 6; category++) node->names.category_name[category] = ""; } } /* Insert it in the hash table. */ { size_t hashcode = locale_hash_function (result); size_t slot = hashcode % LOCALE_HASH_TABLE_SIZE; struct locale_hash_node *p; for (p = locale_hash_table[slot]; p != NULL; p = p->next) if (p->locale == result) { /* This can happen if the application uses the original freelocale() function instead of the overridden one. */ p->names = node->names; break; } if (p == NULL) { node->next = locale_hash_table[slot]; locale_hash_table[slot] = node; } gl_rwlock_unlock (locale_lock); if (p != NULL) free (node); } return result; } /* freelocale() override. */ void freelocale (locale_t locale) #undef freelocale { if (locale == NULL || locale == LC_GLOBAL_LOCALE) /* Invalid argument. */ abort (); { size_t hashcode = locale_hash_function (locale); size_t slot = hashcode % LOCALE_HASH_TABLE_SIZE; struct locale_hash_node *found; struct locale_hash_node **p; found = NULL; /* Lock while removing the hash node. */ gl_rwlock_wrlock (locale_lock); for (p = &locale_hash_table[slot]; *p != NULL; p = &(*p)->next) if ((*p)->locale == locale) { found = *p; *p = (*p)->next; break; } gl_rwlock_unlock (locale_lock); free (found); } freelocale (locale); } #endif #if defined IN_LIBINTL || HAVE_GOOD_USELOCALE /* Like gl_locale_name_thread, except that the result is not in storage of indefinite extent. */ # if !defined IN_LIBINTL static # endif const char * gl_locale_name_thread_unsafe (int category, _GL_UNUSED const char *categoryname) { # if HAVE_GOOD_USELOCALE { locale_t thread_locale = uselocale (NULL); if (thread_locale != LC_GLOBAL_LOCALE) { # if __GLIBC__ >= 2 && !defined __UCLIBC__ /* Work around an incorrect definition of the _NL_LOCALE_NAME macro in glibc < 2.12. See <https://sourceware.org/bugzilla/show_bug.cgi?id=10968>. */ const char *name = nl_langinfo (_NL_ITEM ((category), _NL_ITEM_INDEX (-1))); if (name[0] == '\0') /* Fallback code for glibc < 2.4, which did not implement nl_langinfo (_NL_LOCALE_NAME (category)). */ name = thread_locale->__names[category]; return name; # elif defined __linux__ && HAVE_LANGINFO_H && defined NL_LOCALE_NAME /* musl libc */ return nl_langinfo_l (NL_LOCALE_NAME (category), thread_locale); # elif (defined __FreeBSD__ || defined __DragonFly__) || (defined __APPLE__ && defined __MACH__) /* FreeBSD, Mac OS X */ int mask; switch (category) { case LC_CTYPE: mask = LC_CTYPE_MASK; break; case LC_NUMERIC: mask = LC_NUMERIC_MASK; break; case LC_TIME: mask = LC_TIME_MASK; break; case LC_COLLATE: mask = LC_COLLATE_MASK; break; case LC_MONETARY: mask = LC_MONETARY_MASK; break; case LC_MESSAGES: mask = LC_MESSAGES_MASK; break; default: /* We shouldn't get here. */ return ""; } return querylocale (mask, thread_locale); # elif defined __sun # if HAVE_GETLOCALENAME_L /* Solaris >= 12. */ return getlocalename_l (category, thread_locale); # elif HAVE_SOLARIS114_LOCALES /* Solaris >= 11.4. */ void *lcp = (*thread_locale)->core.data->lcp; if (lcp != NULL) switch (category) { case LC_CTYPE: case LC_NUMERIC: case LC_TIME: case LC_COLLATE: case LC_MONETARY: case LC_MESSAGES: return ((const char * const *) lcp)[category]; default: /* We shouldn't get here. */ return ""; } # elif HAVE_NAMELESS_LOCALES return get_locale_t_name (category, thread_locale); # else /* Solaris 11 OpenIndiana. For the internal structure of locale objects, see https://github.com/OpenIndiana/illumos-gate/blob/master/usr/src/lib/libc/port/locale/localeimpl.h */ switch (category) { case LC_CTYPE: case LC_NUMERIC: case LC_TIME: case LC_COLLATE: case LC_MONETARY: case LC_MESSAGES: return ((const char * const *) thread_locale)[category]; default: /* We shouldn't get here. */ return ""; } # endif # elif defined _AIX && HAVE_NAMELESS_LOCALES return get_locale_t_name (category, thread_locale); # elif defined __CYGWIN__ /* Cygwin < 2.6 lacks uselocale and thread-local locales altogether. Cygwin <= 2.6.1 lacks NL_LOCALE_NAME, requiring peeking inside an opaque struct. */ # ifdef NL_LOCALE_NAME return nl_langinfo_l (NL_LOCALE_NAME (category), thread_locale); # else /* FIXME: Remove when we can assume new-enough Cygwin. */ struct __locale_t { char categories[7][32]; }; return ((struct __locale_t *) thread_locale)->categories[category]; # endif # elif defined __HAIKU__ /* Since 2022, Haiku has per-thread locales. locale_t is 'void *', but in fact a 'LocaleBackendData *'. */ struct LocaleBackendData { int magic; void /*BPrivate::Libroot::LocaleBackend*/ *backend; void /*BPrivate::Libroot::LocaleDataBridge*/ *databridge; }; void *thread_locale_backend = ((struct LocaleBackendData *) thread_locale)->backend; if (thread_locale_backend != NULL) { /* The only existing concrete subclass of BPrivate::Libroot::LocaleBackend is BPrivate::Libroot::ICULocaleBackend. Invoke the (non-virtual) method BPrivate::Libroot::ICULocaleBackend::_QueryLocale on it. This method is located in a separate shared library, libroot-addon-icu.so. */ static void * volatile querylocale_method /* = NULL */; static int volatile querylocale_found /* = 0 */; /* Attempt to open this shared library, the first time we get here. */ if (querylocale_found == 0) { void *handle = dlopen ("/boot/system/lib/libroot-addon-icu.so", 0); if (handle != NULL) { void *sym = dlsym (handle, "_ZN8BPrivate7Libroot16ICULocaleBackend12_QueryLocaleEi"); if (sym != NULL) { querylocale_method = sym; querylocale_found = 1; } else /* Could not find the symbol. */ querylocale_found = -1; } else /* Could not open the separate shared library. */ querylocale_found = -1; } if (querylocale_found > 0) { /* The _QueryLocale method is a non-static C++ method with parameters (int category) and return type 'const char *'. See haiku/headers/private/libroot/locale/ICULocaleBackend.h haiku/src/system/libroot/add-ons/icu/ICULocaleBackend.cpp This is the same as a C function with parameters (BPrivate::Libroot::LocaleBackend* this, int category) and return type 'const char *'. Invoke it. */ const char * (*querylocale_func) (void *, int) = (const char * (*) (void *, int)) querylocale_method; return querylocale_func (thread_locale_backend, category); } } else /* It's the "C" or "POSIX" locale. */ return "C"; # elif defined __ANDROID__ return MB_CUR_MAX == 4 ? "C.UTF-8" : "C"; # endif } } # endif return NULL; } #endif const char * gl_locale_name_thread (int category, _GL_UNUSED const char *categoryname) { #if HAVE_GOOD_USELOCALE const char *name = gl_locale_name_thread_unsafe (category, categoryname); if (name != NULL) return struniq (name); #endif /* On WINDOWS_NATIVE, don't use GetThreadLocale() here, because when SetThreadLocale has not been called - which is a very frequent case - the value of GetThreadLocale() ignores past calls to 'setlocale'. */ return NULL; } /* XPG3 defines the result of 'setlocale (category, NULL)' as: "Directs 'setlocale()' to query 'category' and return the current setting of 'local'." However it does not specify the exact format. Neither do SUSV2 and ISO C 99. So we can use this feature only on selected systems (e.g. those using GNU C Library). */ #if defined _LIBC || ((defined __GLIBC__ && __GLIBC__ >= 2) && !defined __UCLIBC__) # define HAVE_LOCALE_NULL #endif const char * gl_locale_name_posix (int category, _GL_UNUSED const char *categoryname) { #if defined WINDOWS_NATIVE if (LC_MIN <= category && category <= LC_MAX) { const char *locname = /* setlocale_null (category) is identical to setlocale (category, NULL) on this platform. */ setlocale (category, NULL); /* Convert locale name to LCID. We don't want to use LocaleNameToLCID because (a) it is only available since Vista, and (b) it doesn't accept locale names returned by 'setlocale'. */ LCID lcid = get_lcid (locname); if (lcid > 0) return gl_locale_name_from_win32_LCID (lcid); } #endif { const char *locname; /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'. On some systems this can be done by the 'setlocale' function itself. */ #if defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL locname = setlocale_null (category); #else /* On other systems we ignore what setlocale reports and instead look at the environment variables directly. This is necessary 1. on systems which have a facility for customizing the default locale (Mac OS X, native Windows, Cygwin) and where the system's setlocale() function ignores this default locale (Mac OS X, Cygwin), in two cases: a. when the user missed to use the setlocale() override from libintl (for example by not including <libintl.h>), b. when setlocale supports only the "C" locale, such as on Cygwin 1.5.x. In this case even the override from libintl cannot help. 2. on all systems where setlocale supports only the "C" locale. */ /* Strictly speaking, it is a POSIX violation to look at the environment variables regardless whether setlocale has been called or not. POSIX says: "For C-language programs, the POSIX locale shall be the default locale when the setlocale() function is not called." But we assume that all programs that use internationalized APIs call setlocale (LC_ALL, ""). */ locname = gl_locale_name_environ (category, categoryname); #endif /* Convert the locale name from the format returned by setlocale() or found in the environment variables to the XPG syntax. */ #if defined WINDOWS_NATIVE if (locname != NULL) { /* Convert locale name to LCID. We don't want to use LocaleNameToLCID because (a) it is only available since Vista, and (b) it doesn't accept locale names returned by 'setlocale'. */ LCID lcid = get_lcid (locname); if (lcid > 0) return gl_locale_name_from_win32_LCID (lcid); } #endif return locname; } } const char * gl_locale_name_environ (_GL_UNUSED int category, const char *categoryname) { const char *retval; /* Setting of LC_ALL overrides all other. */ retval = getenv ("LC_ALL"); if (retval != NULL && retval[0] != '\0') return retval; /* Next comes the name of the desired category. */ retval = getenv (categoryname); if (retval != NULL && retval[0] != '\0') return retval; /* Last possibility is the LANG environment variable. */ retval = getenv ("LANG"); if (retval != NULL && retval[0] != '\0') { #if HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.2 or newer. Ignore invalid LANG value set by the Terminal application. */ if (strcmp (retval, "UTF-8") != 0) #endif #if defined __CYGWIN__ /* Cygwin. Ignore dummy LANG value set by ~/.profile. */ if (strcmp (retval, "C.UTF-8") != 0) #endif return retval; } return NULL; } const char * gl_locale_name_default (void) { /* POSIX:2001 says: "All implementations shall define a locale as the default locale, to be invoked when no environment variables are set, or set to the empty string. This default locale can be the POSIX locale or any other implementation-defined locale. Some implementations may provide facilities for local installation administrators to set the default locale, customizing it for each location. POSIX:2001 does not require such a facility. The systems with such a facility are Mac OS X and Windows: They provide a GUI that allows the user to choose a locale. - On Mac OS X, by default, none of LC_* or LANG are set. Starting with Mac OS X 10.4 or 10.5, LANG is set for processes launched by the 'Terminal' application (but sometimes to an incorrect value "UTF-8"). When no environment variable is set, setlocale (LC_ALL, "") uses the "C" locale. - On native Windows, by default, none of LC_* or LANG are set. When no environment variable is set, setlocale (LC_ALL, "") uses the locale chosen by the user. - On Cygwin 1.5.x, by default, none of LC_* or LANG are set. When no environment variable is set, setlocale (LC_ALL, "") uses the "C" locale. - On Cygwin 1.7, by default, LANG is set to "C.UTF-8" when the default ~/.profile is executed. When no environment variable is set, setlocale (LC_ALL, "") uses the "C.UTF-8" locale, which operates in the same way as the "C" locale. */ #if !(HAVE_CFPREFERENCESCOPYAPPVALUE || defined WINDOWS_NATIVE || defined __CYGWIN__) /* The system does not have a way of setting the locale, other than the POSIX specified environment variables. We use C as default locale. */ return "C"; #else /* Return an XPG style locale name language[_territory][@modifier]. Don't even bother determining the codeset; it's not useful in this context, because message catalogs are not specific to a single codeset. */ # if HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.4 or newer */ /* Don't use the API introduced in Mac OS X 10.5, CFLocaleCopyCurrent, because in macOS 10.13.4 it has the following behaviour: When two or more languages are specified in the "System Preferences > Language & Region > Preferred Languages" panel, it returns en_CC where CC is the territory (even when English is not among the preferred languages!). What we want instead is what CFLocaleCopyCurrent returned in earlier macOS releases and what CFPreferencesCopyAppValue still returns, namely ll_CC where ll is the first among the preferred languages and CC is the territory. */ { /* Cache the locale name, since CoreFoundation calls are expensive. */ static const char *cached_localename; if (cached_localename == NULL) { char namebuf[256]; CFTypeRef value = CFPreferencesCopyAppValue (CFSTR ("AppleLocale"), kCFPreferencesCurrentApplication); if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID ()) { CFStringRef name = (CFStringRef)value; if (CFStringGetCString (name, namebuf, sizeof (namebuf), kCFStringEncodingASCII)) { gl_locale_name_canonicalize (namebuf); cached_localename = strdup (namebuf); } } if (cached_localename == NULL) cached_localename = "C"; } return cached_localename; } # endif # if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ { LCID lcid; /* Use native Windows API locale ID. */ lcid = GetThreadLocale (); return gl_locale_name_from_win32_LCID (lcid); } # endif #endif } /* Determine the current locale's name, and canonicalize it into XPG syntax language[_territory][.codeset][@modifier] The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ const char * gl_locale_name (int category, const char *categoryname) { const char *retval; retval = gl_locale_name_thread (category, categoryname); if (retval != NULL) return retval; retval = gl_locale_name_posix (category, categoryname); if (retval != NULL) return retval; return gl_locale_name_default (); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/localename-table.c�������������������������������������������������0000644�0001750�0001750�00000002726�14557510507�016201� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Table that maps a locale object to the names of the locale categories. Copyright (C) 2018-2024 Free Software Foundation, Inc. This program 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 program 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2018. */ #include <config.h> #if HAVE_WORKING_USELOCALE && HAVE_NAMELESS_LOCALES /* Specification. */ #include "localename-table.h" #include <stdint.h> /* A hash function for pointers. */ size_t _GL_ATTRIBUTE_CONST locale_hash_function (locale_t x) { uintptr_t p = (uintptr_t) x; size_t h = ((p % 4177) << 12) + ((p % 79) << 6) + (p % 61); return h; } struct locale_hash_node * locale_hash_table[LOCALE_HASH_TABLE_SIZE] /* = { NULL, ..., NULL } */; gl_rwlock_define_initialized(, locale_lock) #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ������������������������������������������gnuastro-0.22/bootstrapped/tests/nan.h��������������������������������������������������������������0000644�0001750�0001750�00000005625�14557510507�013576� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macros for quiet not-a-number. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_NAN_H #define _GL_NAN_H /* IBM z/OS supports both hexadecimal and IEEE floating-point formats. The former does not support NaN and its isnan() implementation returns zero for all values. */ #if defined __MVS__ && defined __IBMC__ && !defined __BFP__ # error "NaN is not supported with IBM's hexadecimal floating-point format; please re-compile with -qfloat=ieee" #endif /* NaNf () returns a 'float' not-a-number. */ /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. clang 13 on mips64 does incorrect constant-folding. */ #if (defined __DECC || defined _MSC_VER \ || (defined __MVS__ && defined __IBMC__) \ || defined __PGI \ || defined __mips__) static float NaNf () { static float volatile zero = 0.0f; return zero / zero; } #else # define NaNf() (0.0f / 0.0f) #endif /* NaNd () returns a 'double' not-a-number. */ /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. clang 13 on mips64 does incorrect constant-folding. */ #if (defined __DECC || defined _MSC_VER \ || (defined __MVS__ && defined __IBMC__) \ || defined __PGI \ || defined __mips__) static double NaNd () { static double volatile zero = 0.0; return zero / zero; } #else # define NaNd() (0.0 / 0.0) #endif /* NaNl () returns a 'long double' not-a-number. */ /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the runtime type conversion. The Microsoft MSVC 9 compiler chokes on the expression 0.0L / 0.0L. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. Avoid possible incorrect constant-folding on mips. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } #elif (defined _MSC_VER \ || (defined __MVS__ && defined __IBMC__) \ || defined __PGI \ || defined __mips__) static long double NaNl () { static long double volatile zero = 0.0L; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif #endif /* _GL_NAN_H */ �����������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/nanosleep.c��������������������������������������������������������0000644�0001750�0001750�00000014504�14557510507�014775� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a replacement for the POSIX nanosleep function. Copyright (C) 1999-2000, 2002, 2004-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible for the native Windows part */ #include <config.h> #include <time.h> #include "intprops.h" #include <stdio.h> #include <sys/types.h> #include <sys/select.h> #include <signal.h> #include <errno.h> #include <unistd.h> enum { BILLION = 1000 * 1000 * 1000 }; #if HAVE_BUG_BIG_NANOSLEEP int nanosleep (const struct timespec *requested_delay, struct timespec *remaining_delay) # undef nanosleep { /* nanosleep mishandles large sleeps due to internal overflow problems. The worst known case of this is Linux 2.6.9 with glibc 2.3.4, which can't sleep more than 24.85 days (2^31 milliseconds). Similarly, cygwin 1.5.x, which can't sleep more than 49.7 days (2^32 milliseconds). Solve this by breaking the sleep up into smaller chunks. */ if (requested_delay->tv_nsec < 0 || BILLION <= requested_delay->tv_nsec) { errno = EINVAL; return -1; } { /* Verify that time_t is large enough. */ static_assert (TYPE_MAXIMUM (time_t) / 24 / 24 / 60 / 60); const time_t limit = 24 * 24 * 60 * 60; time_t seconds = requested_delay->tv_sec; struct timespec intermediate = *requested_delay; while (limit < seconds) { int result; intermediate.tv_sec = limit; result = nanosleep (&intermediate, remaining_delay); seconds -= limit; if (result) { if (remaining_delay) remaining_delay->tv_sec += seconds; return result; } intermediate.tv_nsec = 0; } intermediate.tv_sec = seconds; return nanosleep (&intermediate, remaining_delay); } } #elif defined _WIN32 && ! defined __CYGWIN__ /* Native Windows platforms. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* The Windows API function Sleep() has a resolution of about 15 ms and takes at least 5 ms to execute. We use this function for longer time periods. Additionally, we use busy-looping over short time periods, to get a resolution of about 0.01 ms. In order to measure such short timespans, we use the QueryPerformanceCounter() function. */ int nanosleep (const struct timespec *requested_delay, struct timespec *remaining_delay) { static bool initialized; /* Number of performance counter increments per nanosecond, or zero if it could not be determined. */ static double ticks_per_nanosecond; if (requested_delay->tv_nsec < 0 || BILLION <= requested_delay->tv_nsec) { errno = EINVAL; return -1; } /* For requested delays of one second or more, 15ms resolution is sufficient. */ if (requested_delay->tv_sec == 0) { if (!initialized) { /* Initialize ticks_per_nanosecond. */ LARGE_INTEGER ticks_per_second; if (QueryPerformanceFrequency (&ticks_per_second)) ticks_per_nanosecond = (double) ticks_per_second.QuadPart / 1000000000.0; initialized = true; } if (ticks_per_nanosecond) { /* QueryPerformanceFrequency worked. We can use QueryPerformanceCounter. Use a combination of Sleep and busy-looping. */ /* Number of milliseconds to pass to the Sleep function. Since Sleep can take up to 8 ms less or 8 ms more than requested (or maybe more if the system is loaded), we subtract 10 ms. */ int sleep_millis = (int) requested_delay->tv_nsec / 1000000 - 10; /* Determine how many ticks to delay. */ LONGLONG wait_ticks = requested_delay->tv_nsec * ticks_per_nanosecond; /* Start. */ LARGE_INTEGER counter_before; if (QueryPerformanceCounter (&counter_before)) { /* Wait until the performance counter has reached this value. We don't need to worry about overflow, because the performance counter is reset at reboot, and with a frequency of 3.6E6 ticks per second 63 bits suffice for over 80000 years. */ LONGLONG wait_until = counter_before.QuadPart + wait_ticks; /* Use Sleep for the longest part. */ if (sleep_millis > 0) Sleep (sleep_millis); /* Busy-loop for the rest. */ for (;;) { LARGE_INTEGER counter_after; if (!QueryPerformanceCounter (&counter_after)) /* QueryPerformanceCounter failed, but succeeded earlier. Should not happen. */ break; if (counter_after.QuadPart >= wait_until) /* The requested time has elapsed. */ break; } goto done; } } } /* Implementation for long delays and as fallback. */ Sleep (requested_delay->tv_sec * 1000 + requested_delay->tv_nsec / 1000000); done: /* Sleep is not interruptible. So there is no remaining delay. */ if (remaining_delay != NULL) { remaining_delay->tv_sec = 0; remaining_delay->tv_nsec = 0; } return 0; } #else /* Other platforms lacking nanosleep. It's not clear whether these are still practical porting targets. For now, just fall back on pselect. */ /* Suspend execution for at least *REQUESTED_DELAY seconds. The *REMAINING_DELAY part isn't implemented yet. */ int nanosleep (const struct timespec *requested_delay, struct timespec *remaining_delay) { return pselect (0, NULL, NULL, NULL, requested_delay, NULL); } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/perror.c�����������������������������������������������������������0000644�0001750�0001750�00000003005�14557510507�014314� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Print a message describing error code. Copyright (C) 2008-2024 Free Software Foundation, Inc. Written by Bruno Haible and Simon Josefsson. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include "strerror-override.h" /* Use the system functions, not the gnulib overrides in this file. */ #undef fprintf void perror (const char *string) { char stackbuf[STACKBUF_LEN]; int ret; /* Our implementation guarantees that this will be a non-empty string, even if it returns EINVAL; and stackbuf should be sized large enough to avoid ERANGE. */ ret = strerror_r (errno, stackbuf, sizeof stackbuf); if (ret == ERANGE) abort (); if (string != NULL && *string != '\0') fprintf (stderr, "%s: %s\n", string, stackbuf); else fprintf (stderr, "%s\n", stackbuf); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/pselect.c����������������������������������������������������������0000644�0001750�0001750�00000006075�14557510507�014454� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* pselect - synchronous I/O multiplexing Copyright 2011-2024 Free Software Foundation, Inc. This file is part of gnulib. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ #include <config.h> #include <sys/select.h> #include <errno.h> #include <signal.h> /* Examine the size-NFDS file descriptor sets in RFDS, WFDS, and XFDS to see whether some of their descriptors are ready for reading, ready for writing, or have exceptions pending. Wait for at most TIMEOUT seconds, and use signal mask SIGMASK while waiting. A null pointer parameter stands for no descriptors, an infinite timeout, or an unaffected signal mask. */ #if !HAVE_PSELECT int pselect (int nfds, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restrict xfds, struct timespec const *restrict timeout, sigset_t const *restrict sigmask) { int select_result; sigset_t origmask; struct timeval tv, *tvp; if (nfds < 0 || nfds > FD_SETSIZE) { errno = EINVAL; return -1; } if (timeout) { if (! (0 <= timeout->tv_nsec && timeout->tv_nsec < 1000000000)) { errno = EINVAL; return -1; } tv = (struct timeval) { .tv_sec = timeout->tv_sec, .tv_usec = (timeout->tv_nsec + 999) / 1000 }; tvp = &tv; } else tvp = NULL; /* Signal mask munging should be atomic, but this is the best we can do in this emulation. */ if (sigmask) pthread_sigmask (SIG_SETMASK, sigmask, &origmask); select_result = select (nfds, rfds, wfds, xfds, tvp); if (sigmask) { int select_errno = errno; pthread_sigmask (SIG_SETMASK, &origmask, NULL); errno = select_errno; } return select_result; } #else /* HAVE_PSELECT */ # include <unistd.h> # undef pselect int rpl_pselect (int nfds, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restrict xfds, struct timespec const *restrict timeout, sigset_t const *restrict sigmask) { int i; /* FreeBSD 8.2 has a bug: it does not always detect invalid fds. */ if (nfds < 0 || nfds > FD_SETSIZE) { errno = EINVAL; return -1; } for (i = 0; i < nfds; i++) { if (((rfds && FD_ISSET (i, rfds)) || (wfds && FD_ISSET (i, wfds)) || (xfds && FD_ISSET (i, xfds))) && dup2 (i, i) != i) return -1; } return pselect (nfds, rfds, wfds, xfds, timeout, sigmask); } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/pthread-thread.c���������������������������������������������������0000644�0001750�0001750�00000007614�14557510507�015711� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creating and controlling POSIX threads. Copyright (C) 2010-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert, 2010, and Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* Specification. */ #include <pthread.h> #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # include "windows-thread.h" #else # include <stdlib.h> #endif typedef void * (* pthread_main_function_t) (void *); #if ((defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS) || !HAVE_PTHREAD_H int pthread_attr_init (pthread_attr_t *attr) { *attr = PTHREAD_CREATE_JOINABLE; return 0; } int pthread_attr_getdetachstate (const pthread_attr_t *attr, int *detachstatep) { *detachstatep = *attr & (PTHREAD_CREATE_JOINABLE | PTHREAD_CREATE_DETACHED); return 0; } int pthread_attr_setdetachstate (pthread_attr_t *attr, int detachstate) { if (!(detachstate == PTHREAD_CREATE_JOINABLE || detachstate == PTHREAD_CREATE_DETACHED)) return EINVAL; *attr ^= (*attr ^ detachstate) & (PTHREAD_CREATE_JOINABLE | PTHREAD_CREATE_DETACHED); return 0; } int pthread_attr_destroy (_GL_UNUSED pthread_attr_t *attr) { return 0; } #endif #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS /* Use Windows threads. */ int pthread_create (pthread_t *threadp, const pthread_attr_t *attr, pthread_main_function_t mainfunc, void *arg) { unsigned int glwthread_attr = (attr != NULL && (*attr & (PTHREAD_CREATE_JOINABLE | PTHREAD_CREATE_DETACHED)) != PTHREAD_CREATE_JOINABLE ? GLWTHREAD_ATTR_DETACHED : 0); return glwthread_thread_create (threadp, glwthread_attr, mainfunc, arg); } pthread_t pthread_self (void) { return glwthread_thread_self (); } int pthread_equal (pthread_t thread1, pthread_t thread2) { return thread1 == thread2; } int pthread_detach (pthread_t thread) { return glwthread_thread_detach (thread); } int pthread_join (pthread_t thread, void **valuep) { return glwthread_thread_join (thread, valuep); } void pthread_exit (void *value) { glwthread_thread_exit (value); } #elif HAVE_PTHREAD_H /* Provide workarounds for POSIX threads. */ # if PTHREAD_CREATE_IS_INLINE int pthread_create (pthread_t *threadp, const pthread_attr_t *attr, pthread_main_function_t mainfunc, void *arg) # undef pthread_create { return pthread_create (threadp, attr, mainfunc, arg); } int pthread_attr_init (pthread_attr_t *attr) # undef pthread_attr_init { return pthread_attr_init (attr); } # endif #else /* Provide a dummy implementation for single-threaded applications. */ int pthread_create (pthread_t *threadp, const pthread_attr_t *attr, pthread_main_function_t mainfunc, void *arg) { /* The maximum number of threads is reached. Do not create a thread. */ return EAGAIN; } pthread_t pthread_self (void) { return 42; } int pthread_equal (pthread_t thread1, pthread_t thread2) { return thread1 == thread2; } int pthread_detach (pthread_t thread) { /* There are no joinable threads. */ return EINVAL; } int pthread_join (pthread_t thread, void **valuep) { /* There are no joinable threads. */ return EINVAL; } void pthread_exit (void *value) { /* There is just one thread, so the process exits. */ exit (0); } #endif ��������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/pthread_sigmask.c��������������������������������������������������0000644�0001750�0001750�00000005361�14557510507�016157� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible signal blocking for threads. Copyright (C) 2011-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <signal.h> #include <errno.h> #include <stddef.h> #if PTHREAD_SIGMASK_INEFFECTIVE # include <string.h> #endif #if PTHREAD_SIGMASK_UNBLOCK_BUG # include <unistd.h> #endif int pthread_sigmask (int how, const sigset_t *new_mask, sigset_t *old_mask) #undef pthread_sigmask { #if HAVE_PTHREAD_SIGMASK int ret; # if PTHREAD_SIGMASK_INEFFECTIVE sigset_t omask, omask_copy; sigset_t *old_mask_ptr = &omask; sigemptyset (&omask); /* Add a signal unlikely to be blocked, so that OMASK_COPY is unlikely to match the actual mask. */ sigaddset (&omask, SIGILL); memcpy (&omask_copy, &omask, sizeof omask); # else sigset_t *old_mask_ptr = old_mask; # endif ret = pthread_sigmask (how, new_mask, old_mask_ptr); # if PTHREAD_SIGMASK_INEFFECTIVE if (ret == 0) { /* Detect whether pthread_sigmask is currently ineffective. Don't cache the information: libpthread.so could be dynamically loaded after the program started and after pthread_sigmask was called for the first time. */ if (memcmp (&omask_copy, &omask, sizeof omask) == 0 && pthread_sigmask (1729, &omask_copy, NULL) == 0) { /* pthread_sigmask is currently ineffective. The program is not linked to -lpthread. So use sigprocmask instead. */ return (sigprocmask (how, new_mask, old_mask) < 0 ? errno : 0); } if (old_mask) memcpy (old_mask, &omask, sizeof omask); } # endif # if PTHREAD_SIGMASK_FAILS_WITH_ERRNO if (ret == -1) return errno; # endif # if PTHREAD_SIGMASK_UNBLOCK_BUG if (ret == 0 && new_mask != NULL && (how == SIG_UNBLOCK || how == SIG_SETMASK)) { /* Give the OS the opportunity to raise signals that were pending before the pthread_sigmask call and have now been unblocked. */ usleep (1); } # endif return ret; #else int ret = sigprocmask (how, new_mask, old_mask); return (ret < 0 ? errno : 0); #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/putenv.c�����������������������������������������������������������0000644�0001750�0001750�00000012006�14557510507�014325� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2024 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <stddef.h> /* Include errno.h *after* sys/types.h to work around header problems on AIX 3.2.5. */ #include <errno.h> #ifndef __set_errno # define __set_errno(ev) ((errno) = (ev)) #endif #include <string.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif #if _LIBC # if HAVE_GNU_LD # define environ __environ # else extern char **environ; # endif #endif #if _LIBC /* This lock protects against simultaneous modifications of 'environ'. */ # include <bits/libc-lock.h> __libc_lock_define_initialized (static, envlock) # define LOCK __libc_lock_lock (envlock) # define UNLOCK __libc_lock_unlock (envlock) #else # define LOCK # define UNLOCK #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Don't assume that UNICODE is not defined. */ # undef SetEnvironmentVariable # define SetEnvironmentVariable SetEnvironmentVariableA #endif static int _unsetenv (const char *name) { size_t len; #if !HAVE_DECL__PUTENV char **ep; #endif if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) { __set_errno (EINVAL); return -1; } len = strlen (name); #if HAVE_DECL__PUTENV { int putenv_result; char *name_ = malloc (len + 2); memcpy (name_, name, len); name_[len] = '='; name_[len + 1] = 0; putenv_result = _putenv (name_); free (name_); return putenv_result; } #else LOCK; ep = environ; while (*ep != NULL) if (!strncmp (*ep, name, len) && (*ep)[len] == '=') { /* Found it. Remove this pointer by moving later ones back. */ char **dp = ep; do dp[0] = dp[1]; while (*dp++); /* Continue the loop in case NAME appears again. */ } else ++ep; UNLOCK; return 0; #endif } /* Put STRING, which is of the form "NAME=VALUE", in the environment. If STRING contains no '=', then remove STRING from the environment. */ int putenv (char *string) { const char *name_end = strchr (string, '='); char **ep; if (name_end == NULL) { /* Remove the variable from the environment. */ return _unsetenv (string); } #if HAVE_DECL__PUTENV /* Rely on _putenv to allocate the new environment. If other parts of the application use _putenv, the !HAVE_DECL__PUTENV code would fight over who owns the environ vector, causing a crash. */ if (name_end[1]) return _putenv (string); else { /* _putenv ("NAME=") unsets NAME, so invoke _putenv ("NAME= ") to allocate the environ vector and then replace the new entry with "NAME=". */ int putenv_result; char *name_x = malloc (name_end - string + sizeof "= "); if (!name_x) return -1; memcpy (name_x, string, name_end - string + 1); name_x[name_end - string + 1] = ' '; name_x[name_end - string + 2] = 0; putenv_result = _putenv (name_x); for (ep = environ; *ep; ep++) if (strcmp (*ep, name_x) == 0) { *ep = string; break; } # if defined _WIN32 && ! defined __CYGWIN__ if (putenv_result == 0) { /* _putenv propagated "NAME= " into the subprocess environment; fix that by calling SetEnvironmentVariable directly. */ name_x[name_end - string] = 0; putenv_result = SetEnvironmentVariable (name_x, "") ? 0 : -1; errno = ENOMEM; /* ENOMEM is the only way to fail. */ } # endif free (name_x); return putenv_result; } #else for (ep = environ; *ep; ep++) if (strncmp (*ep, string, name_end - string) == 0 && (*ep)[name_end - string] == '=') break; if (*ep) *ep = string; else { static char **last_environ = NULL; size_t size = ep - environ; char **new_environ = malloc ((size + 2) * sizeof *new_environ); if (! new_environ) return -1; new_environ[0] = string; memcpy (new_environ + 1, environ, (size + 1) * sizeof *new_environ); free (last_environ); last_environ = new_environ; environ = new_environ; } return 0; #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/raise.c������������������������������������������������������������0000644�0001750�0001750�00000003435�14557510507�014115� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a non-threads replacement for the POSIX raise function. Copyright (C) 2002-2003, 2005-2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ #include <config.h> /* Specification. */ #include <signal.h> #if HAVE_RAISE /* Native Windows platform. */ # include <errno.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Forward declaration. */ static int raise_nothrow (int sig); # else # define raise_nothrow raise # endif #else /* An old Unix platform. */ # include <unistd.h> #endif int raise (int sig) #undef raise { #if GNULIB_defined_signal_blocking && GNULIB_defined_SIGPIPE if (sig == SIGPIPE) return _gl_raise_SIGPIPE (); #endif #if HAVE_RAISE return raise_nothrow (sig); #else return kill (getpid (), sig); #endif } #if HAVE_RAISE && HAVE_MSVC_INVALID_PARAMETER_HANDLER static int raise_nothrow (int sig) { int result; TRY_MSVC_INVAL { result = raise (sig); } CATCH_MSVC_INVAL { result = -1; errno = EINVAL; } DONE_MSVC_INVAL; return result; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/random.c�����������������������������������������������������������0000644�0001750�0001750�00000031262�14557510507�014271� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1995-2024 Free Software Foundation, Inc. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* * This is derived from the Berkeley source: * @(#)random.c 5.5 (Berkeley) 7/6/88 * It was reworked for the GNU C Library by Roland McGrath. * Rewritten to use reentrant functions by Ulrich Drepper, 1995. */ /* Copyright (C) 1983 Regents of the University of California. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 4. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/ #ifndef _LIBC # include <libc-config.h> # define __srandom srandom # define __initstate initstate # define __setstate setstate # define __random random # define __srandom_r srandom_r # define __initstate_r initstate_r # define __setstate_r setstate_r # define __random_r random_r #endif /* Specification. */ #include <stdlib.h> #ifdef _LIBC # include <libc-lock.h> #else # include "glthread/lock.h" # define __libc_lock_define_initialized gl_lock_define_initialized # define __libc_lock_lock gl_lock_lock # define __libc_lock_unlock gl_lock_unlock #endif /* An improved random number generation package. In addition to the standard rand()/srand() like interface, this package also has a special state info interface. The initstate() routine is called with a seed, an array of bytes, and a count of how many bytes are being passed in; this array is then initialized to contain information for random number generation with that much state information. Good sizes for the amount of state information are 32, 64, 128, and 256 bytes. The state can be switched by calling the setstate() function with the same array as was initialized with initstate(). By default, the package runs with 128 bytes of state information and generates far better random numbers than a linear congruential generator. If the amount of state information is less than 32 bytes, a simple linear congruential R.N.G. is used. Internally, the state information is treated as an array of longs; the zeroth element of the array is the type of R.N.G. being used (small integer); the remainder of the array is the state information for the R.N.G. Thus, 32 bytes of state information will give 7 longs worth of state information, which will allow a degree seven polynomial. (Note: The zeroth word of state information also has some other information stored in it; see setstate for details). The random number generation technique is a linear feedback shift register approach, employing trinomials (since there are fewer terms to sum up that way). In this approach, the least significant bit of all the numbers in the state table will act as a linear feedback shift register, and will have period 2^deg - 1 (where deg is the degree of the polynomial being used, assuming that the polynomial is irreducible and primitive). The higher order bits will have longer periods, since their values are also influenced by pseudo-random carries out of the lower bits. The total period of the generator is approximately deg*(2**deg - 1); thus doubling the amount of state information has a vast influence on the period of the generator. Note: The deg*(2**deg - 1) is an approximation only good for large deg, when the period of the shift register is the dominant factor. With deg equal to seven, the period is actually much longer than the 7*(2**7 - 1) predicted by this formula. */ /* For each of the currently supported random number generators, we have a break value on the amount of state information (you need at least this many bytes of state info to support this random number generator), a degree for the polynomial (actually a trinomial) that the R.N.G. is based on, and separation between the two lower order coefficients of the trinomial. */ /* Linear congruential. */ #define TYPE_0 0 #define BREAK_0 8 #define DEG_0 0 #define SEP_0 0 /* x**7 + x**3 + 1. */ #define TYPE_1 1 #define BREAK_1 32 #define DEG_1 7 #define SEP_1 3 /* x**15 + x + 1. */ #define TYPE_2 2 #define BREAK_2 64 #define DEG_2 15 #define SEP_2 1 /* x**31 + x**3 + 1. */ #define TYPE_3 3 #define BREAK_3 128 #define DEG_3 31 #define SEP_3 3 /* x**63 + x + 1. */ #define TYPE_4 4 #define BREAK_4 256 #define DEG_4 63 #define SEP_4 1 /* Array versions of the above information to make code run faster. Relies on fact that TYPE_i == i. */ #define MAX_TYPES 5 /* Max number of types above. */ /* Initially, everything is set up as if from: initstate(1, randtbl, 128); Note that this initialization takes advantage of the fact that srandom advances the front and rear pointers 10*rand_deg times, and hence the rear pointer which starts at 0 will also end up at zero; thus the zeroth element of the state information, which contains info about the current position of the rear pointer is just (MAX_TYPES * (rptr - state)) + TYPE_3 == TYPE_3. */ static int32_t randtbl[DEG_3 + 1] = { TYPE_3, -1726662223, 379960547, 1735697613, 1040273694, 1313901226, 1627687941, -179304937, -2073333483, 1780058412, -1989503057, -615974602, 344556628, 939512070, -1249116260, 1507946756, -812545463, 154635395, 1388815473, -1926676823, 525320961, -1009028674, 968117788, -123449607, 1284210865, 435012392, -2017506339, -911064859, -370259173, 1132637927, 1398500161, -205601318, }; static struct random_data unsafe_state = { /* FPTR and RPTR are two pointers into the state info, a front and a rear pointer. These two pointers are always rand_sep places apart, as they cycle through the state information. (Yes, this does mean we could get away with just one pointer, but the code for random is more efficient this way). The pointers are left positioned as they would be from the call: initstate(1, randtbl, 128); (The position of the rear pointer, rptr, is really 0 (as explained above in the initialization of randtbl) because the state table pointer is set to point to randtbl[1] (as explained below).) */ .fptr = &randtbl[SEP_3 + 1], .rptr = &randtbl[1], /* The following things are the pointer to the state information table, the type of the current generator, the degree of the current polynomial being used, and the separation between the two pointers. Note that for efficiency of random, we remember the first location of the state information, not the zeroth. Hence it is valid to access state[-1], which is used to store the type of the R.N.G. Also, we remember the last location, since this is more efficient than indexing every time to find the address of the last element to see if the front and rear pointers have wrapped. */ .state = &randtbl[1], .rand_type = TYPE_3, .rand_deg = DEG_3, .rand_sep = SEP_3, .end_ptr = &randtbl[sizeof (randtbl) / sizeof (randtbl[0])] }; /* POSIX.1c requires that there is mutual exclusion for the 'rand' and 'srand' functions to prevent concurrent calls from modifying common data. */ __libc_lock_define_initialized (static, lock) /* Initialize the random number generator based on the given seed. If the type is the trivial no-state-information type, just remember the seed. Otherwise, initializes state[] based on the given "seed" via a linear congruential generator. Then, the pointers are set to known locations that are exactly rand_sep places apart. Lastly, it cycles the state information a given number of times to get rid of any initial dependencies introduced by the L.C.R.N.G. Note that the initialization of randtbl[] for default usage relies on values produced by this routine. */ void __srandom (unsigned int x) { __libc_lock_lock (lock); (void) __srandom_r (x, &unsafe_state); __libc_lock_unlock (lock); } weak_alias (__srandom, srandom) weak_alias (__srandom, srand) /* Initialize the state information in the given array of N bytes for future random number generation. Based on the number of bytes we are given, and the break values for the different R.N.G.'s, we choose the best (largest) one we can and set things up for it. srandom is then called to initialize the state information. Note that on return from srandom, we set state[-1] to be the type multiplexed with the current value of the rear pointer; this is so successive calls to initstate won't lose this information and will be able to restart with setstate. Note: The first thing we do is save the current state, if any, just like setstate so that it doesn't matter when initstate is called. Returns a pointer to the old state. */ char * __initstate (unsigned int seed, char *arg_state, size_t n) { int32_t *ostate; int ret; __libc_lock_lock (lock); ostate = &unsafe_state.state[-1]; ret = __initstate_r (seed, arg_state, n, &unsafe_state); __libc_lock_unlock (lock); return ret == -1 ? NULL : (char *) ostate; } weak_alias (__initstate, initstate) /* Restore the state from the given state array. Note: It is important that we also remember the locations of the pointers in the current state information, and restore the locations of the pointers from the old state information. This is done by multiplexing the pointer location into the zeroth word of the state information. Note that due to the order in which things are done, it is OK to call setstate with the same state as the current state Returns a pointer to the old state information. */ char * __setstate (char *arg_state) { int32_t *ostate; __libc_lock_lock (lock); ostate = &unsafe_state.state[-1]; if (__setstate_r (arg_state, &unsafe_state) < 0) ostate = NULL; __libc_lock_unlock (lock); return (char *) ostate; } weak_alias (__setstate, setstate) /* If we are using the trivial TYPE_0 R.N.G., just do the old linear congruential bit. Otherwise, we do our fancy trinomial stuff, which is the same in all the other cases due to all the global variables that have been set up. The basic operation is to add the number at the rear pointer into the one at the front pointer. Then both pointers are advanced to the next location cyclically in the table. The value returned is the sum generated, reduced to 31 bits by throwing away the "least random" low bit. Note: The code takes advantage of the fact that both the front and rear pointers can't wrap on the same call by not testing the rear pointer if the front one has wrapped. Returns a 31-bit random number. */ long int __random (void) { int32_t retval; __libc_lock_lock (lock); (void) __random_r (&unsafe_state, &retval); __libc_lock_unlock (lock); return retval; } weak_alias (__random, random) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/random_r.c���������������������������������������������������������0000644�0001750�0001750�00000033657�14557510507�014624� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1995-2024 Free Software Foundation, Inc. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* Copyright (C) 1983 Regents of the University of California. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 4. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/ /* * This is derived from the Berkeley source: * @(#)random.c 5.5 (Berkeley) 7/6/88 * It was reworked for the GNU C Library by Roland McGrath. * Rewritten to be reentrant by Ulrich Drepper, 1995 */ #ifndef _LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the buf == NULL, arg_state == NULL, result == NULL tests below. */ # define _GL_ARG_NONNULL(params) # include <libc-config.h> # define __srandom_r srandom_r # define __initstate_r initstate_r # define __setstate_r setstate_r # define __random_r random_r #endif /* Specification. */ #include <stdlib.h> #include <errno.h> #include <stddef.h> #include <string.h> /* An improved random number generation package. In addition to the standard rand()/srand() like interface, this package also has a special state info interface. The initstate() routine is called with a seed, an array of bytes, and a count of how many bytes are being passed in; this array is then initialized to contain information for random number generation with that much state information. Good sizes for the amount of state information are 32, 64, 128, and 256 bytes. The state can be switched by calling the setstate() function with the same array as was initialized with initstate(). By default, the package runs with 128 bytes of state information and generates far better random numbers than a linear congruential generator. If the amount of state information is less than 32 bytes, a simple linear congruential R.N.G. is used. Internally, the state information is treated as an array of longs; the zeroth element of the array is the type of R.N.G. being used (small integer); the remainder of the array is the state information for the R.N.G. Thus, 32 bytes of state information will give 7 longs worth of state information, which will allow a degree seven polynomial. (Note: The zeroth word of state information also has some other information stored in it; see setstate for details). The random number generation technique is a linear feedback shift register approach, employing trinomials (since there are fewer terms to sum up that way). In this approach, the least significant bit of all the numbers in the state table will act as a linear feedback shift register, and will have period 2^deg - 1 (where deg is the degree of the polynomial being used, assuming that the polynomial is irreducible and primitive). The higher order bits will have longer periods, since their values are also influenced by pseudo-random carries out of the lower bits. The total period of the generator is approximately deg*(2**deg - 1); thus doubling the amount of state information has a vast influence on the period of the generator. Note: The deg*(2**deg - 1) is an approximation only good for large deg, when the period of the shift register is the dominant factor. With deg equal to seven, the period is actually much longer than the 7*(2**7 - 1) predicted by this formula. */ /* For each of the currently supported random number generators, we have a break value on the amount of state information (you need at least this many bytes of state info to support this random number generator), a degree for the polynomial (actually a trinomial) that the R.N.G. is based on, and separation between the two lower order coefficients of the trinomial. */ /* Linear congruential. */ #define TYPE_0 0 #define BREAK_0 8 #define DEG_0 0 #define SEP_0 0 /* x**7 + x**3 + 1. */ #define TYPE_1 1 #define BREAK_1 32 #define DEG_1 7 #define SEP_1 3 /* x**15 + x + 1. */ #define TYPE_2 2 #define BREAK_2 64 #define DEG_2 15 #define SEP_2 1 /* x**31 + x**3 + 1. */ #define TYPE_3 3 #define BREAK_3 128 #define DEG_3 31 #define SEP_3 3 /* x**63 + x + 1. */ #define TYPE_4 4 #define BREAK_4 256 #define DEG_4 63 #define SEP_4 1 /* Array versions of the above information to make code run faster. Relies on fact that TYPE_i == i. */ #define MAX_TYPES 5 /* Max number of types above. */ struct random_poly_info { int seps[MAX_TYPES]; int degrees[MAX_TYPES]; }; static const struct random_poly_info random_poly_info = { { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 }, { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 } }; static int32_t get_int32 (void *p) { int32_t v; memcpy (&v, p, sizeof v); return v; } static void set_int32 (void *p, int32_t v) { memcpy (p, &v, sizeof v); } /* Initialize the random number generator based on the given seed. If the type is the trivial no-state-information type, just remember the seed. Otherwise, initializes state[] based on the given "seed" via a linear congruential generator. Then, the pointers are set to known locations that are exactly rand_sep places apart. Lastly, it cycles the state information a given number of times to get rid of any initial dependencies introduced by the L.C.R.N.G. Note that the initialization of randtbl[] for default usage relies on values produced by this routine. */ int __srandom_r (unsigned int seed, struct random_data *buf) { int type; int32_t *state; long int i; int32_t word; int32_t *dst; int kc; if (buf == NULL) goto fail; type = buf->rand_type; if ((unsigned int) type >= MAX_TYPES) goto fail; state = buf->state; /* We must make sure the seed is not 0. Take arbitrarily 1 in this case. */ if (seed == 0) seed = 1; set_int32 (&state[0], seed); if (type == TYPE_0) goto done; dst = state; word = seed; kc = buf->rand_deg; for (i = 1; i < kc; ++i) { /* This does: state[i] = (16807 * state[i - 1]) % 2147483647; but avoids overflowing 31 bits. */ long int hi = word / 127773; long int lo = word % 127773; word = 16807 * lo - 2836 * hi; if (word < 0) word += 2147483647; set_int32 (++dst, word); } buf->fptr = &state[buf->rand_sep]; buf->rptr = &state[0]; kc *= 10; while (--kc >= 0) { int32_t discard; (void) __random_r (buf, &discard); } done: return 0; fail: return -1; } weak_alias (__srandom_r, srandom_r) /* Initialize the state information in the given array of N bytes for future random number generation. Based on the number of bytes we are given, and the break values for the different R.N.G.'s, we choose the best (largest) one we can and set things up for it. srandom is then called to initialize the state information. Note that on return from srandom, we set state[-1] to be the type multiplexed with the current value of the rear pointer; this is so successive calls to initstate won't lose this information and will be able to restart with setstate. Note: The first thing we do is save the current state, if any, just like setstate so that it doesn't matter when initstate is called. Returns 0 on success, non-zero on failure. */ int __initstate_r (unsigned int seed, char *arg_state, size_t n, struct random_data *buf) { if (buf == NULL) goto fail; int32_t *old_state = buf->state; if (old_state != NULL) { int old_type = buf->rand_type; set_int32 (&old_state[-1], (old_type == TYPE_0 ? TYPE_0 : (MAX_TYPES * (buf->rptr - old_state)) + old_type)); } int type; if (n >= BREAK_3) type = n < BREAK_4 ? TYPE_3 : TYPE_4; else if (n < BREAK_1) { if (n < BREAK_0) goto fail; type = TYPE_0; } else type = n < BREAK_2 ? TYPE_1 : TYPE_2; int degree = random_poly_info.degrees[type]; int separation = random_poly_info.seps[type]; buf->rand_type = type; buf->rand_sep = separation; buf->rand_deg = degree; int32_t *state = &((int32_t *) arg_state)[1]; /* First location. */ /* Must set END_PTR before srandom. */ buf->end_ptr = &state[degree]; buf->state = state; __srandom_r (seed, buf); set_int32 (&state[-1], type == TYPE_0 ? TYPE_0 : (buf->rptr - state) * MAX_TYPES + type); return 0; fail: __set_errno (EINVAL); return -1; } weak_alias (__initstate_r, initstate_r) /* Restore the state from the given state array. Note: It is important that we also remember the locations of the pointers in the current state information, and restore the locations of the pointers from the old state information. This is done by multiplexing the pointer location into the zeroth word of the state information. Note that due to the order in which things are done, it is OK to call setstate with the same state as the current state Returns 0 on success, non-zero on failure. */ int __setstate_r (char *arg_state, struct random_data *buf) { int32_t *new_state = 1 + (int32_t *) arg_state; int type; int old_type; int32_t *old_state; int degree; int separation; if (arg_state == NULL || buf == NULL) goto fail; old_type = buf->rand_type; old_state = buf->state; set_int32 (&old_state[-1], (old_type == TYPE_0 ? TYPE_0 : (MAX_TYPES * (buf->rptr - old_state)) + old_type)); type = get_int32 (&new_state[-1]) % MAX_TYPES; if (type < TYPE_0 || type > TYPE_4) goto fail; buf->rand_deg = degree = random_poly_info.degrees[type]; buf->rand_sep = separation = random_poly_info.seps[type]; buf->rand_type = type; if (type != TYPE_0) { int rear = get_int32 (&new_state[-1]) / MAX_TYPES; buf->rptr = &new_state[rear]; buf->fptr = &new_state[(rear + separation) % degree]; } buf->state = new_state; /* Set end_ptr too. */ buf->end_ptr = &new_state[degree]; return 0; fail: __set_errno (EINVAL); return -1; } weak_alias (__setstate_r, setstate_r) /* If we are using the trivial TYPE_0 R.N.G., just do the old linear congruential bit. Otherwise, we do our fancy trinomial stuff, which is the same in all the other cases due to all the global variables that have been set up. The basic operation is to add the number at the rear pointer into the one at the front pointer. Then both pointers are advanced to the next location cyclically in the table. The value returned is the sum generated, reduced to 31 bits by throwing away the "least random" low bit. Note: The code takes advantage of the fact that both the front and rear pointers can't wrap on the same call by not testing the rear pointer if the front one has wrapped. Returns a 31-bit random number. */ int __random_r (struct random_data *buf, int32_t *result) { int32_t *state; if (buf == NULL || result == NULL) goto fail; state = buf->state; if (buf->rand_type == TYPE_0) { int32_t val = (((get_int32 (&state[0]) * 1103515245U) + 12345U) & 0x7fffffff); set_int32 (&state[0], val); *result = val; } else { int32_t *fptr = buf->fptr; int32_t *rptr = buf->rptr; int32_t *end_ptr = buf->end_ptr; /* F and R are unsigned int, not uint32_t, to avoid undefined overflow behavior on platforms where INT_MAX == UINT32_MAX. */ unsigned int f = get_int32 (fptr); unsigned int r = get_int32 (rptr); uint32_t val = f + r; set_int32 (fptr, val); /* Chucking least random bit. */ *result = val >> 1; ++fptr; if (fptr >= end_ptr) { fptr = state; ++rptr; } else { ++rptr; if (rptr >= end_ptr) rptr = state; } buf->fptr = fptr; buf->rptr = rptr; } return 0; fail: __set_errno (EINVAL); return -1; } weak_alias (__random_r, random_r) ���������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/reallocarray.c�����������������������������������������������������0000644�0001750�0001750�00000002166�14557510507�015472� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* reallocarray function that is glibc compatible. Copyright (C) 2017-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Darshit Shah */ #include <config.h> #include <stdckdint.h> #include <stdlib.h> #include <errno.h> void * reallocarray (void *ptr, size_t nmemb, size_t size) { size_t nbytes; if (ckd_mul (&nbytes, nmemb, size)) { errno = ENOMEM; return NULL; } /* Rely on the semantics of GNU realloc. */ return realloc (ptr, nbytes); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/same-inode.h�������������������������������������������������������0000644�0001750�0001750�00000005724�14557510507�015043� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether two stat buffers are known to refer to the same file. Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef SAME_INODE_H #define SAME_INODE_H 1 /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <sys/stat.h> _GL_INLINE_HEADER_BEGIN #ifndef SAME_INODE_INLINE # define SAME_INODE_INLINE _GL_INLINE #endif /* True if A and B point to structs with st_dev and st_ino members that are known to represent the same file. Use | and ^ to shorten generated code, and to lessen the probability of screwups if st_ino is an array. */ #if defined __VMS && __CRTL_VER < 80200000 # define PSAME_INODE(a, b) (! (((a)->st_dev ^ (b)->st_dev) \ | ((a)->st_ino[0] ^ (b)->st_ino[0]) \ | ((a)->st_ino[1] ^ (b)->st_ino[1]) \ | ((a)->st_ino[2] ^ (b)->st_ino[2]))) #elif defined _WIN32 && ! defined __CYGWIN__ /* Native Windows. */ # if _GL_WINDOWS_STAT_INODES /* stat() and fstat() set st_dev and st_ino to 0 if information about the inode is not available. */ # if _GL_WINDOWS_STAT_INODES == 2 # define PSAME_INODE(a, b) \ (! (! ((a)->st_dev | (a)->st_ino._gl_ino[0] | (a)->st_ino._gl_ino[1]) \ | ((a)->st_dev ^ (b)->st_dev) \ | ((a)->st_ino._gl_ino[0] ^ (b)->st_ino._gl_ino[0]) \ | ((a)->st_ino._gl_ino[1] ^ (b)->st_ino._gl_ino[1]))) # else # define PSAME_INODE(a, b) (! (! ((a)->st_dev | (a)->st_ino) \ | ((a)->st_dev ^ (b)->st_dev) \ | ((a)->st_ino ^ (b)->st_ino))) # endif # else /* stat() and fstat() set st_ino to 0 always. */ # define PSAME_INODE(a, b) 0 # endif #else /* POSIX. */ # define PSAME_INODE(a, b) (! (((a)->st_dev ^ (b)->st_dev) \ | ((a)->st_ino ^ (b)->st_ino))) #endif /* True if struct objects A and B are known to represent the same file. */ #define SAME_INODE(a, b) PSAME_INODE (&(a), &(b)) /* True if *A and *B represent the same file. Unlike PSAME_INODE, args are evaluated once and must point to struct stat. */ SAME_INODE_INLINE bool psame_inode (struct stat const *a, struct stat const *b) { return PSAME_INODE (a, b); } _GL_INLINE_HEADER_END #endif ��������������������������������������������gnuastro-0.22/bootstrapped/tests/same-inode.c�������������������������������������������������������0000644�0001750�0001750�00000000130�14557510507�015020� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <config.h> #define SAME_INODE_INLINE _GL_EXTERN_INLINE #include "same-inode.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/sched_yield.c������������������������������������������������������0000644�0001750�0001750�00000002550�14557510507�015263� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Schedule other threads to run. Copyright (C) 2019-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* Specification. */ #include <sched.h> #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS /* Use Windows threads. */ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> int sched_yield (void) { Sleep (0); return 0; } #elif defined __KLIBC__ /* OS/2 kLIBC implementation */ # define INCL_DOS # include <os2.h> int sched_yield (void) { DosSleep (0); return 0; } #else /* Provide a dummy implementation for single-threaded applications. */ int sched_yield (void) { return 0; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/setenv.c�����������������������������������������������������������0000644�0001750�0001750�00000025375�14557510507�014325� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992, 1995-2003, 2005-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #if !_LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ # define _GL_ARG_NONNULL(params) # define _GL_USE_STDLIB_ALLOC 1 # include <config.h> #endif #include <alloca.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #ifndef __set_errno # define __set_errno(ev) ((errno) = (ev)) #endif #include <string.h> #if _LIBC || HAVE_UNISTD_H # include <unistd.h> #endif #if !_LIBC # include "malloca.h" #endif #if _LIBC || !HAVE_SETENV #if !_LIBC # define __environ environ #endif #if _LIBC /* This lock protects against simultaneous modifications of 'environ'. */ # include <bits/libc-lock.h> __libc_lock_define_initialized (static, envlock) # define LOCK __libc_lock_lock (envlock) # define UNLOCK __libc_lock_unlock (envlock) #else # define LOCK # define UNLOCK #endif /* In the GNU C library we must keep the namespace clean. */ #ifdef _LIBC # define setenv __setenv # define clearenv __clearenv # define tfind __tfind # define tsearch __tsearch #endif /* In the GNU C library implementation we try to be more clever and allow arbitrarily many changes of the environment given that the used values are from a small set. Outside glibc this will eat up all memory after a while. */ #if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \ && (defined __GNUC__ || defined __clang__)) # define USE_TSEARCH 1 # include <search.h> typedef int (*compar_fn_t) (const void *, const void *); /* This is a pointer to the root of the search tree with the known values. */ static void *known_values; # define KNOWN_VALUE(Str) \ __extension__ \ ({ \ void *value = tfind (Str, &known_values, (compar_fn_t) strcmp); \ value != NULL ? *(char **) value : NULL; \ }) # define STORE_VALUE(Str) \ tsearch (Str, &known_values, (compar_fn_t) strcmp) #else # undef USE_TSEARCH # define KNOWN_VALUE(Str) NULL # define STORE_VALUE(Str) do { } while (0) #endif /* If this variable is not a null pointer we allocated the current environment. */ static char **last_environ; /* This function is used by 'setenv' and 'putenv'. The difference between the two functions is that for the former must create a new string which is then placed in the environment, while the argument of 'putenv' must be used directly. This is all complicated by the fact that we try to reuse values once generated for a 'setenv' call since we can never free the strings. */ int __add_to_environ (const char *name, const char *value, const char *combined, int replace) { char **ep; size_t size; const size_t namelen = strlen (name); const size_t vallen = value != NULL ? strlen (value) + 1 : 0; LOCK; /* We have to get the pointer now that we have the lock and not earlier since another thread might have created a new environment. */ ep = __environ; size = 0; if (ep != NULL) { for (; *ep != NULL; ++ep) if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') break; else ++size; } if (ep == NULL || *ep == NULL) { char **new_environ; #ifdef USE_TSEARCH char *new_value; #endif /* We allocated this space; we can extend it. */ new_environ = (char **) (last_environ == NULL ? malloc ((size + 2) * sizeof (char *)) : realloc (last_environ, (size + 2) * sizeof (char *))); if (new_environ == NULL) { /* It's easier to set errno to ENOMEM than to rely on the 'malloc-posix' and 'realloc-posix' gnulib modules. */ __set_errno (ENOMEM); UNLOCK; return -1; } /* If the whole entry is given add it. */ if (combined != NULL) /* We must not add the string to the search tree since it belongs to the user. */ new_environ[size] = (char *) combined; else { /* See whether the value is already known. */ #ifdef USE_TSEARCH # ifdef _LIBC new_value = (char *) alloca (namelen + 1 + vallen); __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), value, vallen); # else new_value = (char *) malloca (namelen + 1 + vallen); if (new_value == NULL) { __set_errno (ENOMEM); UNLOCK; return -1; } memcpy (new_value, name, namelen); new_value[namelen] = '='; memcpy (&new_value[namelen + 1], value, vallen); # endif new_environ[size] = KNOWN_VALUE (new_value); if (new_environ[size] == NULL) #endif { new_environ[size] = (char *) malloc (namelen + 1 + vallen); if (new_environ[size] == NULL) { #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif __set_errno (ENOMEM); UNLOCK; return -1; } #ifdef USE_TSEARCH memcpy (new_environ[size], new_value, namelen + 1 + vallen); #else memcpy (new_environ[size], name, namelen); new_environ[size][namelen] = '='; memcpy (&new_environ[size][namelen + 1], value, vallen); #endif /* And save the value now. We cannot do this when we remove the string since then we cannot decide whether it is a user string or not. */ STORE_VALUE (new_environ[size]); } #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif } if (__environ != last_environ) memcpy ((char *) new_environ, (char *) __environ, size * sizeof (char *)); new_environ[size + 1] = NULL; last_environ = __environ = new_environ; } else if (replace) { char *np; /* Use the user string if given. */ if (combined != NULL) np = (char *) combined; else { #ifdef USE_TSEARCH char *new_value; # ifdef _LIBC new_value = alloca (namelen + 1 + vallen); __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), value, vallen); # else new_value = malloca (namelen + 1 + vallen); if (new_value == NULL) { __set_errno (ENOMEM); UNLOCK; return -1; } memcpy (new_value, name, namelen); new_value[namelen] = '='; memcpy (&new_value[namelen + 1], value, vallen); # endif np = KNOWN_VALUE (new_value); if (np == NULL) #endif { np = (char *) malloc (namelen + 1 + vallen); if (np == NULL) { #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif __set_errno (ENOMEM); UNLOCK; return -1; } #ifdef USE_TSEARCH memcpy (np, new_value, namelen + 1 + vallen); #else memcpy (np, name, namelen); np[namelen] = '='; memcpy (&np[namelen + 1], value, vallen); #endif /* And remember the value. */ STORE_VALUE (np); } #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif } *ep = np; } UNLOCK; return 0; } int setenv (const char *name, const char *value, int replace) { if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) { __set_errno (EINVAL); return -1; } return __add_to_environ (name, value, NULL, replace); } /* The 'clearenv' was planned to be added to POSIX.1 but probably never made it. Nevertheless the POSIX.9 standard (POSIX bindings for Fortran 77) requires this function. */ int clearenv (void) { LOCK; if (__environ == last_environ && __environ != NULL) { /* We allocated this environment so we can free it. */ free (__environ); last_environ = NULL; } /* Clear the environment pointer removes the whole environment. */ __environ = NULL; UNLOCK; return 0; } #ifdef _LIBC static void free_mem (void) { /* Remove all traces. */ clearenv (); /* Now remove the search tree. */ __tdestroy (known_values, free); known_values = NULL; } text_set_element (__libc_subfreeres, free_mem); # undef setenv # undef clearenv weak_alias (__setenv, setenv) weak_alias (__clearenv, clearenv) #endif #endif /* _LIBC || !HAVE_SETENV */ /* The rest of this file is called into use when replacing an existing but buggy setenv. Known bugs include failure to diagnose invalid name, and consuming a leading '=' from value. */ #if HAVE_SETENV # undef setenv # if !HAVE_DECL_SETENV extern int setenv (const char *, const char *, int); # endif # define STREQ(a, b) (strcmp (a, b) == 0) int rpl_setenv (const char *name, const char *value, int replace) { int result; if (!name || !*name || strchr (name, '=')) { errno = EINVAL; return -1; } /* Call the real setenv even if replace is 0, in case implementation has underlying data to update, such as when environ changes. */ result = setenv (name, value, replace); if (result == 0 && replace && *value == '=') { char *tmp = getenv (name); if (!STREQ (tmp, value)) { int saved_errno; size_t len = strlen (value); tmp = malloca (len + 2); if (tmp == NULL) { errno = ENOMEM; return -1; } /* Since leading '=' is eaten, double it up. */ *tmp = '='; memcpy (tmp + 1, value, len + 1); result = setenv (name, tmp, replace); saved_errno = errno; freea (tmp); errno = saved_errno; } } return result; } #endif /* HAVE_SETENV */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/setlocale.c��������������������������������������������������������0000644�0001750�0001750�00000162675�14557510507�015001� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set the current locale. -*- coding: utf-8 -*- Copyright (C) 2009, 2011-2024 Free Software Foundation, Inc. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ #include <config.h> /* Override setlocale() so that when the default locale is requested (locale = ""), the environment variables LC_ALL, LC_*, and LANG are considered. Also include all the functionality from libintl's setlocale() override. */ /* Please keep this file in sync with gettext/gettext-runtime/intl/setlocale.c ! */ /* Specification. */ #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "localename.h" #if HAVE_CFLOCALECOPYPREFERREDLANGUAGES || HAVE_CFPREFERENCESCOPYAPPVALUE # if HAVE_CFLOCALECOPYPREFERREDLANGUAGES # include <CoreFoundation/CFLocale.h> # elif HAVE_CFPREFERENCESCOPYAPPVALUE # include <CoreFoundation/CFPreferences.h> # endif # include <CoreFoundation/CFPropertyList.h> # include <CoreFoundation/CFArray.h> # include <CoreFoundation/CFString.h> extern void gl_locale_name_canonicalize (char *name); #endif #if 1 # undef setlocale /* Which of the replacements to activate? */ # if NEED_SETLOCALE_IMPROVED # define setlocale_improved rpl_setlocale # elif NEED_SETLOCALE_MTSAFE # define setlocale_mtsafe rpl_setlocale # else # error "This file should only be compiled if NEED_SETLOCALE_IMPROVED || NEED_SETLOCALE_MTSAFE." # endif /* Like setlocale, but guaranteed to be multithread-safe if LOCALE == NULL. */ # if !SETLOCALE_NULL_ALL_MTSAFE || !SETLOCALE_NULL_ONE_MTSAFE /* i.e. if NEED_SETLOCALE_MTSAFE */ # if NEED_SETLOCALE_IMPROVED static # endif char * setlocale_mtsafe (int category, const char *locale) { if (locale == NULL) return (char *) setlocale_null (category); else return setlocale (category, locale); } # else /* !NEED_SETLOCALE_MTSAFE */ # define setlocale_mtsafe setlocale # endif /* NEED_SETLOCALE_MTSAFE */ # if NEED_SETLOCALE_IMPROVED /* Return string representation of locale category CATEGORY. */ static const char * category_to_name (int category) { const char *retval; switch (category) { case LC_COLLATE: retval = "LC_COLLATE"; break; case LC_CTYPE: retval = "LC_CTYPE"; break; case LC_MONETARY: retval = "LC_MONETARY"; break; case LC_NUMERIC: retval = "LC_NUMERIC"; break; case LC_TIME: retval = "LC_TIME"; break; case LC_MESSAGES: retval = "LC_MESSAGES"; break; default: /* If you have a better idea for a default value let me know. */ retval = "LC_XXX"; } return retval; } # if defined _WIN32 && ! defined __CYGWIN__ /* The native Windows setlocale() function expects locale names of the form "German" or "German_Germany" or "DEU", but not "de" or "de_DE". We need to convert the names from the form with ISO 639 language code and ISO 3166 country code to the form with English names or with three-letter identifier. The three-letter identifiers known by a Windows XP SP2 or SP3 are: AFK Afrikaans_South Africa.1252 ARA Arabic_Saudi Arabia.1256 ARB Arabic_Lebanon.1256 ARE Arabic_Egypt.1256 ARG Arabic_Algeria.1256 ARH Arabic_Bahrain.1256 ARI Arabic_Iraq.1256 ARJ Arabic_Jordan.1256 ARK Arabic_Kuwait.1256 ARL Arabic_Libya.1256 ARM Arabic_Morocco.1256 ARO Arabic_Oman.1256 ARQ Arabic_Qatar.1256 ARS Arabic_Syria.1256 ART Arabic_Tunisia.1256 ARU Arabic_U.A.E..1256 ARY Arabic_Yemen.1256 AZE Azeri (Latin)_Azerbaijan.1254 BEL Belarusian_Belarus.1251 BGR Bulgarian_Bulgaria.1251 BSB Bosnian_Bosnia and Herzegovina.1250 BSC Bosnian (Cyrillic)_Bosnia and Herzegovina.1250 (wrong encoding!) CAT Catalan_Spain.1252 CHH Chinese_Hong Kong S.A.R..950 CHI Chinese_Singapore.936 CHS Chinese_People's Republic of China.936 CHT Chinese_Taiwan.950 CSY Czech_Czech Republic.1250 CYM Welsh_United Kingdom.1252 DAN Danish_Denmark.1252 DEA German_Austria.1252 DEC German_Liechtenstein.1252 DEL German_Luxembourg.1252 DES German_Switzerland.1252 DEU German_Germany.1252 ELL Greek_Greece.1253 ENA English_Australia.1252 ENB English_Caribbean.1252 ENC English_Canada.1252 ENG English_United Kingdom.1252 ENI English_Ireland.1252 ENJ English_Jamaica.1252 ENL English_Belize.1252 ENP English_Republic of the Philippines.1252 ENS English_South Africa.1252 ENT English_Trinidad and Tobago.1252 ENU English_United States.1252 ENW English_Zimbabwe.1252 ENZ English_New Zealand.1252 ESA Spanish_Panama.1252 ESB Spanish_Bolivia.1252 ESC Spanish_Costa Rica.1252 ESD Spanish_Dominican Republic.1252 ESE Spanish_El Salvador.1252 ESF Spanish_Ecuador.1252 ESG Spanish_Guatemala.1252 ESH Spanish_Honduras.1252 ESI Spanish_Nicaragua.1252 ESL Spanish_Chile.1252 ESM Spanish_Mexico.1252 ESN Spanish_Spain.1252 ESO Spanish_Colombia.1252 ESP Spanish_Spain.1252 ESR Spanish_Peru.1252 ESS Spanish_Argentina.1252 ESU Spanish_Puerto Rico.1252 ESV Spanish_Venezuela.1252 ESY Spanish_Uruguay.1252 ESZ Spanish_Paraguay.1252 ETI Estonian_Estonia.1257 EUQ Basque_Spain.1252 FAR Farsi_Iran.1256 FIN Finnish_Finland.1252 FOS Faroese_Faroe Islands.1252 FPO Filipino_Philippines.1252 FRA French_France.1252 FRB French_Belgium.1252 FRC French_Canada.1252 FRL French_Luxembourg.1252 FRM French_Principality of Monaco.1252 FRS French_Switzerland.1252 FYN Frisian_Netherlands.1252 GLC Galician_Spain.1252 HEB Hebrew_Israel.1255 HRB Croatian_Bosnia and Herzegovina.1250 HRV Croatian_Croatia.1250 HUN Hungarian_Hungary.1250 IND Indonesian_Indonesia.1252 IRE Irish_Ireland.1252 ISL Icelandic_Iceland.1252 ITA Italian_Italy.1252 ITS Italian_Switzerland.1252 IUK Inuktitut (Latin)_Canada.1252 JPN Japanese_Japan.932 KKZ Kazakh_Kazakhstan.1251 KOR Korean_Korea.949 KYR Kyrgyz_Kyrgyzstan.1251 LBX Luxembourgish_Luxembourg.1252 LTH Lithuanian_Lithuania.1257 LVI Latvian_Latvia.1257 MKI FYRO Macedonian_Former Yugoslav Republic of Macedonia.1251 MON Mongolian_Mongolia.1251 MPD Mapudungun_Chile.1252 MSB Malay_Brunei Darussalam.1252 MSL Malay_Malaysia.1252 MWK Mohawk_Canada.1252 NLB Dutch_Belgium.1252 NLD Dutch_Netherlands.1252 NON Norwegian-Nynorsk_Norway.1252 NOR Norwegian (Bokmål)_Norway.1252 NSO Northern Sotho_South Africa.1252 PLK Polish_Poland.1250 PTB Portuguese_Brazil.1252 PTG Portuguese_Portugal.1252 QUB Quechua_Bolivia.1252 QUE Quechua_Ecuador.1252 QUP Quechua_Peru.1252 RMC Romansh_Switzerland.1252 ROM Romanian_Romania.1250 RUS Russian_Russia.1251 SKY Slovak_Slovakia.1250 SLV Slovenian_Slovenia.1250 SMA Sami (Southern)_Norway.1252 SMB Sami (Southern)_Sweden.1252 SME Sami (Northern)_Norway.1252 SMF Sami (Northern)_Sweden.1252 SMG Sami (Northern)_Finland.1252 SMJ Sami (Lule)_Norway.1252 SMK Sami (Lule)_Sweden.1252 SMN Sami (Inari)_Finland.1252 SMS Sami (Skolt)_Finland.1252 SQI Albanian_Albania.1250 SRB Serbian (Cyrillic)_Serbia and Montenegro.1251 SRL Serbian (Latin)_Serbia and Montenegro.1250 SRN Serbian (Cyrillic)_Bosnia and Herzegovina.1251 SRS Serbian (Latin)_Bosnia and Herzegovina.1250 SVE Swedish_Sweden.1252 SVF Swedish_Finland.1252 SWK Swahili_Kenya.1252 THA Thai_Thailand.874 TRK Turkish_Turkey.1254 TSN Tswana_South Africa.1252 TTT Tatar_Russia.1251 UKR Ukrainian_Ukraine.1251 URD Urdu_Islamic Republic of Pakistan.1256 USA English_United States.1252 UZB Uzbek (Latin)_Uzbekistan.1254 VIT Vietnamese_Viet Nam.1258 XHO Xhosa_South Africa.1252 ZHH Chinese_Hong Kong S.A.R..950 ZHI Chinese_Singapore.936 ZHM Chinese_Macau S.A.R..950 ZUL Zulu_South Africa.1252 */ /* Table from ISO 639 language code, optionally with country or script suffix, to English name. Keep in sync with the gl_locale_name_from_win32_LANGID function in localename.c! */ struct table_entry { const char *code; const char *english; }; static const struct table_entry language_table[] = { { "af", "Afrikaans" }, { "am", "Amharic" }, { "ar", "Arabic" }, { "arn", "Mapudungun" }, { "as", "Assamese" }, { "az@cyrillic", "Azeri (Cyrillic)" }, { "az@latin", "Azeri (Latin)" }, { "ba", "Bashkir" }, { "be", "Belarusian" }, { "ber", "Tamazight" }, { "ber@arabic", "Tamazight (Arabic)" }, { "ber@latin", "Tamazight (Latin)" }, { "bg", "Bulgarian" }, { "bin", "Edo" }, { "bn", "Bengali" }, { "bn_BD", "Bengali (Bangladesh)" }, { "bn_IN", "Bengali (India)" }, { "bnt", "Sutu" }, { "bo", "Tibetan" }, { "br", "Breton" }, { "bs", "BSB" }, /* "Bosnian (Latin)" */ { "bs@cyrillic", "BSC" }, /* Bosnian (Cyrillic) */ { "ca", "Catalan" }, { "chr", "Cherokee" }, { "co", "Corsican" }, { "cpe", "Hawaiian" }, { "cs", "Czech" }, { "cy", "Welsh" }, { "da", "Danish" }, { "de", "German" }, { "dsb", "Lower Sorbian" }, { "dv", "Divehi" }, { "el", "Greek" }, { "en", "English" }, { "es", "Spanish" }, { "et", "Estonian" }, { "eu", "Basque" }, { "fa", "Farsi" }, { "ff", "Fulfulde" }, { "fi", "Finnish" }, { "fo", "Faroese" }, /* "Faeroese" does not work */ { "fr", "French" }, { "fy", "Frisian" }, { "ga", "IRE" }, /* Gaelic (Ireland) */ { "gd", "Gaelic (Scotland)" }, { "gd", "Scottish Gaelic" }, { "gl", "Galician" }, { "gn", "Guarani" }, { "gsw", "Alsatian" }, { "gu", "Gujarati" }, { "ha", "Hausa" }, { "he", "Hebrew" }, { "hi", "Hindi" }, { "hr", "Croatian" }, { "hsb", "Upper Sorbian" }, { "hu", "Hungarian" }, { "hy", "Armenian" }, { "id", "Indonesian" }, { "ig", "Igbo" }, { "ii", "Yi" }, { "is", "Icelandic" }, { "it", "Italian" }, { "iu", "IUK" }, /* Inuktitut */ { "ja", "Japanese" }, { "ka", "Georgian" }, { "kk", "Kazakh" }, { "kl", "Greenlandic" }, { "km", "Cambodian" }, { "km", "Khmer" }, { "kn", "Kannada" }, { "ko", "Korean" }, { "kok", "Konkani" }, { "kr", "Kanuri" }, { "ks", "Kashmiri" }, { "ks_IN", "Kashmiri_India" }, { "ks_PK", "Kashmiri (Arabic)_Pakistan" }, { "ky", "Kyrgyz" }, { "la", "Latin" }, { "lb", "Luxembourgish" }, { "lo", "Lao" }, { "lt", "Lithuanian" }, { "lv", "Latvian" }, { "mi", "Maori" }, { "mk", "FYRO Macedonian" }, { "mk", "Macedonian" }, { "ml", "Malayalam" }, { "mn", "Mongolian" }, { "mni", "Manipuri" }, { "moh", "Mohawk" }, { "mr", "Marathi" }, { "ms", "Malay" }, { "mt", "Maltese" }, { "my", "Burmese" }, { "nb", "NOR" }, /* Norwegian Bokmål */ { "ne", "Nepali" }, { "nic", "Ibibio" }, { "nl", "Dutch" }, { "nn", "NON" }, /* Norwegian Nynorsk */ { "no", "Norwegian" }, { "nso", "Northern Sotho" }, { "nso", "Sepedi" }, { "oc", "Occitan" }, { "om", "Oromo" }, { "or", "Oriya" }, { "pa", "Punjabi" }, { "pap", "Papiamentu" }, { "pl", "Polish" }, { "prs", "Dari" }, { "ps", "Pashto" }, { "pt", "Portuguese" }, { "qu", "Quechua" }, { "qut", "K'iche'" }, { "rm", "Romansh" }, { "ro", "Romanian" }, { "ru", "Russian" }, { "rw", "Kinyarwanda" }, { "sa", "Sanskrit" }, { "sah", "Yakut" }, { "sd", "Sindhi" }, { "se", "Sami (Northern)" }, { "se", "Northern Sami" }, { "si", "Sinhalese" }, { "sk", "Slovak" }, { "sl", "Slovenian" }, { "sma", "Sami (Southern)" }, { "sma", "Southern Sami" }, { "smj", "Sami (Lule)" }, { "smj", "Lule Sami" }, { "smn", "Sami (Inari)" }, { "smn", "Inari Sami" }, { "sms", "Sami (Skolt)" }, { "sms", "Skolt Sami" }, { "so", "Somali" }, { "sq", "Albanian" }, { "sr", "Serbian (Latin)" }, { "sr@cyrillic", "SRB" }, /* Serbian (Cyrillic) */ { "sv", "Swedish" }, { "sw", "Swahili" }, { "syr", "Syriac" }, { "ta", "Tamil" }, { "te", "Telugu" }, { "tg", "Tajik" }, { "th", "Thai" }, { "ti", "Tigrinya" }, { "tk", "Turkmen" }, { "tl", "Filipino" }, { "tn", "Tswana" }, { "tr", "Turkish" }, { "ts", "Tsonga" }, { "tt", "Tatar" }, { "ug", "Uighur" }, { "uk", "Ukrainian" }, { "ur", "Urdu" }, { "uz", "Uzbek" }, { "uz", "Uzbek (Latin)" }, { "uz@cyrillic", "Uzbek (Cyrillic)" }, { "ve", "Venda" }, { "vi", "Vietnamese" }, { "wen", "Sorbian" }, { "wo", "Wolof" }, { "xh", "Xhosa" }, { "yi", "Yiddish" }, { "yo", "Yoruba" }, { "zh", "Chinese" }, { "zu", "Zulu" } }; /* Table from ISO 3166 country code to English name. Keep in sync with the gl_locale_name_from_win32_LANGID function in localename.c! */ static const struct table_entry country_table[] = { { "AE", "U.A.E." }, { "AF", "Afghanistan" }, { "AL", "Albania" }, { "AM", "Armenia" }, { "AN", "Netherlands Antilles" }, { "AR", "Argentina" }, { "AT", "Austria" }, { "AU", "Australia" }, { "AZ", "Azerbaijan" }, { "BA", "Bosnia and Herzegovina" }, { "BD", "Bangladesh" }, { "BE", "Belgium" }, { "BG", "Bulgaria" }, { "BH", "Bahrain" }, { "BN", "Brunei Darussalam" }, { "BO", "Bolivia" }, { "BR", "Brazil" }, { "BT", "Bhutan" }, { "BY", "Belarus" }, { "BZ", "Belize" }, { "CA", "Canada" }, { "CG", "Congo" }, { "CH", "Switzerland" }, { "CI", "Cote d'Ivoire" }, { "CL", "Chile" }, { "CM", "Cameroon" }, { "CN", "People's Republic of China" }, { "CO", "Colombia" }, { "CR", "Costa Rica" }, { "CS", "Serbia and Montenegro" }, { "CZ", "Czech Republic" }, { "DE", "Germany" }, { "DK", "Denmark" }, { "DO", "Dominican Republic" }, { "DZ", "Algeria" }, { "EC", "Ecuador" }, { "EE", "Estonia" }, { "EG", "Egypt" }, { "ER", "Eritrea" }, { "ES", "Spain" }, { "ET", "Ethiopia" }, { "FI", "Finland" }, { "FO", "Faroe Islands" }, { "FR", "France" }, { "GB", "United Kingdom" }, { "GD", "Caribbean" }, { "GE", "Georgia" }, { "GL", "Greenland" }, { "GR", "Greece" }, { "GT", "Guatemala" }, { "HK", "Hong Kong" }, { "HK", "Hong Kong S.A.R." }, { "HN", "Honduras" }, { "HR", "Croatia" }, { "HT", "Haiti" }, { "HU", "Hungary" }, { "ID", "Indonesia" }, { "IE", "Ireland" }, { "IL", "Israel" }, { "IN", "India" }, { "IQ", "Iraq" }, { "IR", "Iran" }, { "IS", "Iceland" }, { "IT", "Italy" }, { "JM", "Jamaica" }, { "JO", "Jordan" }, { "JP", "Japan" }, { "KE", "Kenya" }, { "KG", "Kyrgyzstan" }, { "KH", "Cambodia" }, { "KR", "South Korea" }, { "KW", "Kuwait" }, { "KZ", "Kazakhstan" }, { "LA", "Laos" }, { "LB", "Lebanon" }, { "LI", "Liechtenstein" }, { "LK", "Sri Lanka" }, { "LT", "Lithuania" }, { "LU", "Luxembourg" }, { "LV", "Latvia" }, { "LY", "Libya" }, { "MA", "Morocco" }, { "MC", "Principality of Monaco" }, { "MD", "Moldava" }, { "MD", "Moldova" }, { "ME", "Montenegro" }, { "MK", "Former Yugoslav Republic of Macedonia" }, { "ML", "Mali" }, { "MM", "Myanmar" }, { "MN", "Mongolia" }, { "MO", "Macau S.A.R." }, { "MT", "Malta" }, { "MV", "Maldives" }, { "MX", "Mexico" }, { "MY", "Malaysia" }, { "NG", "Nigeria" }, { "NI", "Nicaragua" }, { "NL", "Netherlands" }, { "NO", "Norway" }, { "NP", "Nepal" }, { "NZ", "New Zealand" }, { "OM", "Oman" }, { "PA", "Panama" }, { "PE", "Peru" }, { "PH", "Philippines" }, { "PK", "Islamic Republic of Pakistan" }, { "PL", "Poland" }, { "PR", "Puerto Rico" }, { "PT", "Portugal" }, { "PY", "Paraguay" }, { "QA", "Qatar" }, { "RE", "Reunion" }, { "RO", "Romania" }, { "RS", "Serbia" }, { "RU", "Russia" }, { "RW", "Rwanda" }, { "SA", "Saudi Arabia" }, { "SE", "Sweden" }, { "SG", "Singapore" }, { "SI", "Slovenia" }, { "SK", "Slovak" }, { "SN", "Senegal" }, { "SO", "Somalia" }, { "SR", "Suriname" }, { "SV", "El Salvador" }, { "SY", "Syria" }, { "TH", "Thailand" }, { "TJ", "Tajikistan" }, { "TM", "Turkmenistan" }, { "TN", "Tunisia" }, { "TR", "Turkey" }, { "TT", "Trinidad and Tobago" }, { "TW", "Taiwan" }, { "TZ", "Tanzania" }, { "UA", "Ukraine" }, { "US", "United States" }, { "UY", "Uruguay" }, { "VA", "Vatican" }, { "VE", "Venezuela" }, { "VN", "Viet Nam" }, { "YE", "Yemen" }, { "ZA", "South Africa" }, { "ZW", "Zimbabwe" } }; /* Given a string STRING, find the set of indices i such that TABLE[i].code is the given STRING. It is a range [lo,hi-1]. */ typedef struct { size_t lo; size_t hi; } range_t; static void search (const struct table_entry *table, size_t table_size, const char *string, range_t *result) { /* The table is sorted. Perform a binary search. */ size_t hi = table_size; size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, strcmp (table[i].code, string) < 0, for i >= hi, strcmp (table[i].code, string) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = strcmp (table[mid].code, string); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with strcmp (language_table[i].code, string) == 0. Find the entire interval of such i. */ { size_t i; for (i = mid; i > lo; ) { i--; if (strcmp (table[i].code, string) < 0) { lo = i + 1; break; } } } { size_t i; for (i = mid + 1; i < hi; i++) { if (strcmp (table[i].code, string) > 0) { hi = i; break; } } } /* The set of i with strcmp (language_table[i].code, string) == 0 is the interval [lo, hi-1]. */ break; } } result->lo = lo; result->hi = hi; } /* Like setlocale, but accept also locale names in the form ll or ll_CC, where ll is an ISO 639 language code and CC is an ISO 3166 country code. */ static char * setlocale_unixlike (int category, const char *locale) { char *result; char llCC_buf[64]; char ll_buf[64]; char CC_buf[64]; /* The native Windows implementation of setlocale understands the special locale name "C", but not "POSIX". Therefore map "POSIX" to "C". */ if (locale != NULL && strcmp (locale, "POSIX") == 0) locale = "C"; /* First, try setlocale with the original argument unchanged. */ result = setlocale_mtsafe (category, locale); if (result != NULL) return result; /* Otherwise, assume the argument is in the form language[_territory][.codeset][@modifier] and try to map it using the tables. */ if (strlen (locale) < sizeof (llCC_buf)) { /* Second try: Remove the codeset part. */ { const char *p = locale; char *q = llCC_buf; /* Copy the part before the dot. */ for (; *p != '\0' && *p != '.'; p++, q++) *q = *p; if (*p == '.') /* Skip the part up to the '@', if any. */ for (; *p != '\0' && *p != '@'; p++) ; /* Copy the part starting with '@', if any. */ for (; *p != '\0'; p++, q++) *q = *p; *q = '\0'; } /* llCC_buf now contains language[_territory][@modifier] */ if (strcmp (llCC_buf, locale) != 0) { result = setlocale (category, llCC_buf); if (result != NULL) return result; } /* Look it up in language_table. */ { range_t range; size_t i; search (language_table, sizeof (language_table) / sizeof (language_table[0]), llCC_buf, &range); for (i = range.lo; i < range.hi; i++) { /* Try the replacement in language_table[i]. */ result = setlocale (category, language_table[i].english); if (result != NULL) return result; } } /* Split language[_territory][@modifier] into ll_buf = language[@modifier] and CC_buf = territory */ { const char *underscore = strchr (llCC_buf, '_'); if (underscore != NULL) { const char *territory_start = underscore + 1; const char *territory_end = strchr (territory_start, '@'); if (territory_end == NULL) territory_end = territory_start + strlen (territory_start); memcpy (ll_buf, llCC_buf, underscore - llCC_buf); strcpy (ll_buf + (underscore - llCC_buf), territory_end); memcpy (CC_buf, territory_start, territory_end - territory_start); CC_buf[territory_end - territory_start] = '\0'; { /* Look up ll_buf in language_table and CC_buf in country_table. */ range_t language_range; search (language_table, sizeof (language_table) / sizeof (language_table[0]), ll_buf, &language_range); if (language_range.lo < language_range.hi) { range_t country_range; search (country_table, sizeof (country_table) / sizeof (country_table[0]), CC_buf, &country_range); if (country_range.lo < country_range.hi) { size_t i; size_t j; for (i = language_range.lo; i < language_range.hi; i++) for (j = country_range.lo; j < country_range.hi; j++) { /* Concatenate the replacements. */ const char *part1 = language_table[i].english; size_t part1_len = strlen (part1); const char *part2 = country_table[j].english; size_t part2_len = strlen (part2) + 1; char buf[64+64]; if (!(part1_len + 1 + part2_len <= sizeof (buf))) abort (); memcpy (buf, part1, part1_len); buf[part1_len] = '_'; memcpy (buf + part1_len + 1, part2, part2_len); /* Try the concatenated replacements. */ result = setlocale (category, buf); if (result != NULL) return result; } } /* Try omitting the country entirely. This may set a locale corresponding to the wrong country, but is better than failing entirely. */ { size_t i; for (i = language_range.lo; i < language_range.hi; i++) { /* Try only the language replacement. */ result = setlocale (category, language_table[i].english); if (result != NULL) return result; } } } } } } } /* Failed. */ return NULL; } # elif defined __ANDROID__ /* Like setlocale, but accept also the locale names "C" and "POSIX". */ static char * setlocale_unixlike (int category, const char *locale) { char *result = setlocale_mtsafe (category, locale); if (result == NULL) switch (category) { case LC_CTYPE: case LC_NUMERIC: case LC_TIME: case LC_COLLATE: case LC_MONETARY: case LC_MESSAGES: case LC_ALL: case LC_PAPER: case LC_NAME: case LC_ADDRESS: case LC_TELEPHONE: case LC_MEASUREMENT: if (locale == NULL || strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0) result = (char *) "C"; break; default: break; } return result; } # define setlocale setlocale_unixlike # else # define setlocale_unixlike setlocale_mtsafe # endif # if LC_MESSAGES == 1729 /* The system does not store an LC_MESSAGES locale category. Do it here. */ static char lc_messages_name[64] = "C"; /* Like setlocale, but support also LC_MESSAGES. */ static char * setlocale_single (int category, const char *locale) { if (category == LC_MESSAGES) { if (locale != NULL) { lc_messages_name[sizeof (lc_messages_name) - 1] = '\0'; strncpy (lc_messages_name, locale, sizeof (lc_messages_name) - 1); } return lc_messages_name; } else return setlocale_unixlike (category, locale); } # else # define setlocale_single setlocale_unixlike # endif # if defined __APPLE__ && defined __MACH__ /* Mapping from language to main territory where that language is spoken. */ static char const locales_with_principal_territory[][6 + 1] = { /* Language Main territory */ "ace_ID", /* Achinese Indonesia */ "af_ZA", /* Afrikaans South Africa */ "ak_GH", /* Akan Ghana */ "am_ET", /* Amharic Ethiopia */ "an_ES", /* Aragonese Spain */ "ang_GB", /* Old English Britain */ "arn_CL", /* Mapudungun Chile */ "as_IN", /* Assamese India */ "ast_ES", /* Asturian Spain */ "av_RU", /* Avaric Russia */ "awa_IN", /* Awadhi India */ "az_AZ", /* Azerbaijani Azerbaijan */ "ban_ID", /* Balinese Indonesia */ "be_BY", /* Belarusian Belarus */ "bej_SD", /* Beja Sudan */ "bem_ZM", /* Bemba Zambia */ "bg_BG", /* Bulgarian Bulgaria */ "bho_IN", /* Bhojpuri India */ "bi_VU", /* Bislama Vanuatu */ "bik_PH", /* Bikol Philippines */ "bin_NG", /* Bini Nigeria */ "bm_ML", /* Bambara Mali */ "bn_IN", /* Bengali India */ "bo_CN", /* Tibetan China */ "br_FR", /* Breton France */ "bs_BA", /* Bosnian Bosnia */ "bug_ID", /* Buginese Indonesia */ "ca_ES", /* Catalan Spain */ "ce_RU", /* Chechen Russia */ "ceb_PH", /* Cebuano Philippines */ "co_FR", /* Corsican France */ "cr_CA", /* Cree Canada */ /* Don't put "crh_UZ" or "crh_UA" here. That would be asking for fruitless political discussion. */ "cs_CZ", /* Czech Czech Republic */ "csb_PL", /* Kashubian Poland */ "cy_GB", /* Welsh Britain */ "da_DK", /* Danish Denmark */ "de_DE", /* German Germany */ "din_SD", /* Dinka Sudan */ "doi_IN", /* Dogri India */ "dsb_DE", /* Lower Sorbian Germany */ "dv_MV", /* Divehi Maldives */ "dz_BT", /* Dzongkha Bhutan */ "ee_GH", /* Éwé Ghana */ "el_GR", /* Greek Greece */ /* Don't put "en_GB" or "en_US" here. That would be asking for fruitless political discussion. */ "es_ES", /* Spanish Spain */ "et_EE", /* Estonian Estonia */ "fa_IR", /* Persian Iran */ "fi_FI", /* Finnish Finland */ "fil_PH", /* Filipino Philippines */ "fj_FJ", /* Fijian Fiji */ "fo_FO", /* Faroese Faeroe Islands */ "fon_BJ", /* Fon Benin */ "fr_FR", /* French France */ "fur_IT", /* Friulian Italy */ "fy_NL", /* Western Frisian Netherlands */ "ga_IE", /* Irish Ireland */ "gd_GB", /* Scottish Gaelic Britain */ "gon_IN", /* Gondi India */ "gsw_CH", /* Swiss German Switzerland */ "gu_IN", /* Gujarati India */ "he_IL", /* Hebrew Israel */ "hi_IN", /* Hindi India */ "hil_PH", /* Hiligaynon Philippines */ "hr_HR", /* Croatian Croatia */ "hsb_DE", /* Upper Sorbian Germany */ "ht_HT", /* Haitian Haiti */ "hu_HU", /* Hungarian Hungary */ "hy_AM", /* Armenian Armenia */ "id_ID", /* Indonesian Indonesia */ "ig_NG", /* Igbo Nigeria */ "ii_CN", /* Sichuan Yi China */ "ilo_PH", /* Iloko Philippines */ "is_IS", /* Icelandic Iceland */ "it_IT", /* Italian Italy */ "ja_JP", /* Japanese Japan */ "jab_NG", /* Hyam Nigeria */ "jv_ID", /* Javanese Indonesia */ "ka_GE", /* Georgian Georgia */ "kab_DZ", /* Kabyle Algeria */ "kaj_NG", /* Jju Nigeria */ "kam_KE", /* Kamba Kenya */ "kmb_AO", /* Kimbundu Angola */ "kcg_NG", /* Tyap Nigeria */ "kdm_NG", /* Kagoma Nigeria */ "kg_CD", /* Kongo Democratic Republic of Congo */ "kk_KZ", /* Kazakh Kazakhstan */ "kl_GL", /* Kalaallisut Greenland */ "km_KH", /* Central Khmer Cambodia */ "kn_IN", /* Kannada India */ "ko_KR", /* Korean Korea (South) */ "kok_IN", /* Konkani India */ "kr_NG", /* Kanuri Nigeria */ "kru_IN", /* Kurukh India */ "ky_KG", /* Kyrgyz Kyrgyzstan */ "lg_UG", /* Ganda Uganda */ "li_BE", /* Limburgish Belgium */ "lo_LA", /* Laotian Laos */ "lt_LT", /* Lithuanian Lithuania */ "lu_CD", /* Luba-Katanga Democratic Republic of Congo */ "lua_CD", /* Luba-Lulua Democratic Republic of Congo */ "luo_KE", /* Luo Kenya */ "lv_LV", /* Latvian Latvia */ "mad_ID", /* Madurese Indonesia */ "mag_IN", /* Magahi India */ "mai_IN", /* Maithili India */ "mak_ID", /* Makasar Indonesia */ "man_ML", /* Mandingo Mali */ "men_SL", /* Mende Sierra Leone */ "mfe_MU", /* Mauritian Creole Mauritius */ "mg_MG", /* Malagasy Madagascar */ "mi_NZ", /* Maori New Zealand */ "min_ID", /* Minangkabau Indonesia */ "mk_MK", /* Macedonian North Macedonia */ "ml_IN", /* Malayalam India */ "mn_MN", /* Mongolian Mongolia */ "mni_IN", /* Manipuri India */ "mos_BF", /* Mossi Burkina Faso */ "mr_IN", /* Marathi India */ "ms_MY", /* Malay Malaysia */ "mt_MT", /* Maltese Malta */ "mwr_IN", /* Marwari India */ "my_MM", /* Burmese Myanmar */ "na_NR", /* Nauru Nauru */ "nah_MX", /* Nahuatl Mexico */ "nap_IT", /* Neapolitan Italy */ "nb_NO", /* Norwegian Bokmål Norway */ "nds_DE", /* Low Saxon Germany */ "ne_NP", /* Nepali Nepal */ "nl_NL", /* Dutch Netherlands */ "nn_NO", /* Norwegian Nynorsk Norway */ "no_NO", /* Norwegian Norway */ "nr_ZA", /* South Ndebele South Africa */ "nso_ZA", /* Northern Sotho South Africa */ "ny_MW", /* Chichewa Malawi */ "nym_TZ", /* Nyamwezi Tanzania */ "nyn_UG", /* Nyankole Uganda */ "oc_FR", /* Occitan France */ "oj_CA", /* Ojibwa Canada */ "or_IN", /* Oriya India */ "pa_IN", /* Punjabi India */ "pag_PH", /* Pangasinan Philippines */ "pam_PH", /* Pampanga Philippines */ "pap_AN", /* Papiamento Netherlands Antilles - this line can be removed in 2018 */ "pbb_CO", /* Páez Colombia */ "pl_PL", /* Polish Poland */ "ps_AF", /* Pashto Afghanistan */ "pt_PT", /* Portuguese Portugal */ "raj_IN", /* Rajasthani India */ "rm_CH", /* Romansh Switzerland */ "rn_BI", /* Kirundi Burundi */ "ro_RO", /* Romanian Romania */ "ru_RU", /* Russian Russia */ "rw_RW", /* Kinyarwanda Rwanda */ "sa_IN", /* Sanskrit India */ "sah_RU", /* Yakut Russia */ "sas_ID", /* Sasak Indonesia */ "sat_IN", /* Santali India */ "sc_IT", /* Sardinian Italy */ "scn_IT", /* Sicilian Italy */ "sg_CF", /* Sango Central African Republic */ "shn_MM", /* Shan Myanmar */ "si_LK", /* Sinhala Sri Lanka */ "sid_ET", /* Sidamo Ethiopia */ "sk_SK", /* Slovak Slovakia */ "sl_SI", /* Slovenian Slovenia */ "sm_WS", /* Samoan Samoa */ "smn_FI", /* Inari Sami Finland */ "sms_FI", /* Skolt Sami Finland */ "so_SO", /* Somali Somalia */ "sq_AL", /* Albanian Albania */ "sr_RS", /* Serbian Serbia */ "srr_SN", /* Serer Senegal */ "suk_TZ", /* Sukuma Tanzania */ "sus_GN", /* Susu Guinea */ "sv_SE", /* Swedish Sweden */ "te_IN", /* Telugu India */ "tem_SL", /* Timne Sierra Leone */ "tet_ID", /* Tetum Indonesia */ "tg_TJ", /* Tajik Tajikistan */ "th_TH", /* Thai Thailand */ "ti_ER", /* Tigrinya Eritrea */ "tiv_NG", /* Tiv Nigeria */ "tk_TM", /* Turkmen Turkmenistan */ "tl_PH", /* Tagalog Philippines */ "to_TO", /* Tonga Tonga */ "tpi_PG", /* Tok Pisin Papua New Guinea */ "tr_TR", /* Turkish Türkiye */ "tum_MW", /* Tumbuka Malawi */ "ug_CN", /* Uighur China */ "uk_UA", /* Ukrainian Ukraine */ "umb_AO", /* Umbundu Angola */ "ur_PK", /* Urdu Pakistan */ "uz_UZ", /* Uzbek Uzbekistan */ "ve_ZA", /* Venda South Africa */ "vi_VN", /* Vietnamese Vietnam */ "wa_BE", /* Walloon Belgium */ "wal_ET", /* Walamo Ethiopia */ "war_PH", /* Waray Philippines */ "wen_DE", /* Sorbian Germany */ "yao_MW", /* Yao Malawi */ "zap_MX" /* Zapotec Mexico */ }; /* Compare just the language part of two locale names. */ static int langcmp (const char *locale1, const char *locale2) { size_t locale1_len; size_t locale2_len; int cmp; { const char *locale1_end = strchr (locale1, '_'); if (locale1_end != NULL) locale1_len = locale1_end - locale1; else locale1_len = strlen (locale1); } { const char *locale2_end = strchr (locale2, '_'); if (locale2_end != NULL) locale2_len = locale2_end - locale2; else locale2_len = strlen (locale2); } if (locale1_len < locale2_len) { cmp = memcmp (locale1, locale2, locale1_len); if (cmp == 0) cmp = -1; } else { cmp = memcmp (locale1, locale2, locale2_len); if (locale1_len > locale2_len && cmp == 0) cmp = 1; } return cmp; } /* Given a locale name, return the main locale with the same language, or NULL if not found. For example: "fr_DE" -> "fr_FR". */ static const char * get_main_locale_with_same_language (const char *locale) { # define table locales_with_principal_territory /* The table is sorted. Perform a binary search. */ size_t hi = sizeof (table) / sizeof (table[0]); size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, langcmp (table[i], locale) < 0, for i >= hi, langcmp (table[i], locale) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = langcmp (table[mid], locale); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with langcmp (language_table[i], locale) == 0. Verify that it is the only such i. */ if (mid > lo && langcmp (table[mid - 1], locale) >= 0) abort (); if (mid + 1 < hi && langcmp (table[mid + 1], locale) <= 0) abort (); return table[mid]; } } # undef table return NULL; } /* Mapping from territory to main language that is spoken in that territory. */ static char const locales_with_principal_language[][6 + 1] = { /* This is based on the set of existing locales in glibc, with duplicates removed, and on the Wikipedia pages named "Languages of <territory>". If in doubt, use the locale that exists in macOS. For example, the only "*_IN" locale in macOS 10.13 is "hi_IN", so use that. */ /* A useful shell function for producing a line of this table is: func_line () { # Usage: func_line ll_CC ll=`echo "$1" | sed -e 's|_.*||'` cc=`echo "$1" | sed -e 's|^.*_||'` llx=`sed -n -e "s|^${ll} ||p" < gettext-tools/doc/ISO_639` ccx=`expand gettext-tools/doc/ISO_3166 | sed -n -e "s|^${cc} *||p"` echo " \"$1\", /$X* ${llx} ${ccx} *$X/" } */ /* Main language Territory */ "ca_AD", /* Catalan Andorra */ "ar_AE", /* Arabic United Arab Emirates */ "ps_AF", /* Pashto Afghanistan */ "en_AG", /* English Antigua and Barbuda */ "sq_AL", /* Albanian Albania */ "hy_AM", /* Armenian Armenia */ "pap_AN", /* Papiamento Netherlands Antilles - this line can be removed in 2018 */ "pt_AO", /* Portuguese Angola */ "es_AR", /* Spanish Argentina */ "de_AT", /* German Austria */ "en_AU", /* English Australia */ /* Aruba has two official languages: "nl_AW", "pap_AW". */ "az_AZ", /* Azerbaijani Azerbaijan */ "bs_BA", /* Bosnian Bosnia */ "bn_BD", /* Bengali Bangladesh */ "nl_BE", /* Dutch Belgium */ "fr_BF", /* French Burkina Faso */ "bg_BG", /* Bulgarian Bulgaria */ "ar_BH", /* Arabic Bahrain */ "rn_BI", /* Kirundi Burundi */ "fr_BJ", /* French Benin */ "es_BO", /* Spanish Bolivia */ "pt_BR", /* Portuguese Brazil */ "dz_BT", /* Dzongkha Bhutan */ "en_BW", /* English Botswana */ "be_BY", /* Belarusian Belarus */ "en_CA", /* English Canada */ "fr_CD", /* French Democratic Republic of Congo */ "sg_CF", /* Sango Central African Republic */ "de_CH", /* German Switzerland */ "es_CL", /* Spanish Chile */ "zh_CN", /* Chinese China */ "es_CO", /* Spanish Colombia */ "es_CR", /* Spanish Costa Rica */ "es_CU", /* Spanish Cuba */ /* Curaçao has three official languages: "nl_CW", "pap_CW", "en_CW". */ "el_CY", /* Greek Cyprus */ "cs_CZ", /* Czech Czech Republic */ "de_DE", /* German Germany */ /* Djibouti has two official languages: "ar_DJ" and "fr_DJ". */ "da_DK", /* Danish Denmark */ "es_DO", /* Spanish Dominican Republic */ "ar_DZ", /* Arabic Algeria */ "es_EC", /* Spanish Ecuador */ "et_EE", /* Estonian Estonia */ "ar_EG", /* Arabic Egypt */ "ti_ER", /* Tigrinya Eritrea */ "es_ES", /* Spanish Spain */ "am_ET", /* Amharic Ethiopia */ "fi_FI", /* Finnish Finland */ /* Fiji has three official languages: "en_FJ", "fj_FJ", "hif_FJ". */ "fo_FO", /* Faroese Faeroe Islands */ "fr_FR", /* French France */ "en_GB", /* English Britain */ "ka_GE", /* Georgian Georgia */ "en_GH", /* English Ghana */ "kl_GL", /* Kalaallisut Greenland */ "fr_GN", /* French Guinea */ "el_GR", /* Greek Greece */ "es_GT", /* Spanish Guatemala */ "zh_HK", /* Chinese Hong Kong */ "es_HN", /* Spanish Honduras */ "hr_HR", /* Croatian Croatia */ "ht_HT", /* Haitian Haiti */ "hu_HU", /* Hungarian Hungary */ "id_ID", /* Indonesian Indonesia */ "en_IE", /* English Ireland */ "he_IL", /* Hebrew Israel */ "hi_IN", /* Hindi India */ "ar_IQ", /* Arabic Iraq */ "fa_IR", /* Persian Iran */ "is_IS", /* Icelandic Iceland */ "it_IT", /* Italian Italy */ "ar_JO", /* Arabic Jordan */ "ja_JP", /* Japanese Japan */ "sw_KE", /* Swahili Kenya */ "ky_KG", /* Kyrgyz Kyrgyzstan */ "km_KH", /* Central Khmer Cambodia */ "ko_KR", /* Korean Korea (South) */ "ar_KW", /* Arabic Kuwait */ "kk_KZ", /* Kazakh Kazakhstan */ "lo_LA", /* Laotian Laos */ "ar_LB", /* Arabic Lebanon */ "de_LI", /* German Liechtenstein */ "si_LK", /* Sinhala Sri Lanka */ "lt_LT", /* Lithuanian Lithuania */ /* Luxembourg has three official languages: "lb_LU", "fr_LU", "de_LU". */ "lv_LV", /* Latvian Latvia */ "ar_LY", /* Arabic Libya */ "ar_MA", /* Arabic Morocco */ "sr_ME", /* Serbian Montenegro */ "mg_MG", /* Malagasy Madagascar */ "mk_MK", /* Macedonian North Macedonia */ "fr_ML", /* French Mali */ "my_MM", /* Burmese Myanmar */ "mn_MN", /* Mongolian Mongolia */ "mt_MT", /* Maltese Malta */ "mfe_MU", /* Mauritian Creole Mauritius */ "dv_MV", /* Divehi Maldives */ "ny_MW", /* Chichewa Malawi */ "es_MX", /* Spanish Mexico */ "ms_MY", /* Malay Malaysia */ "en_NG", /* English Nigeria */ "es_NI", /* Spanish Nicaragua */ "nl_NL", /* Dutch Netherlands */ "no_NO", /* Norwegian Norway */ "ne_NP", /* Nepali Nepal */ "na_NR", /* Nauru Nauru */ "niu_NU", /* Niuean Niue */ "en_NZ", /* English New Zealand */ "ar_OM", /* Arabic Oman */ "es_PA", /* Spanish Panama */ "es_PE", /* Spanish Peru */ "tpi_PG", /* Tok Pisin Papua New Guinea */ "fil_PH", /* Filipino Philippines */ "pa_PK", /* Punjabi Pakistan */ "pl_PL", /* Polish Poland */ "es_PR", /* Spanish Puerto Rico */ "pt_PT", /* Portuguese Portugal */ "es_PY", /* Spanish Paraguay */ "ar_QA", /* Arabic Qatar */ "ro_RO", /* Romanian Romania */ "sr_RS", /* Serbian Serbia */ "ru_RU", /* Russian Russia */ "rw_RW", /* Kinyarwanda Rwanda */ "ar_SA", /* Arabic Saudi Arabia */ "en_SC", /* English Seychelles */ "ar_SD", /* Arabic Sudan */ "sv_SE", /* Swedish Sweden */ "en_SG", /* English Singapore */ "sl_SI", /* Slovenian Slovenia */ "sk_SK", /* Slovak Slovakia */ "en_SL", /* English Sierra Leone */ "fr_SN", /* French Senegal */ "so_SO", /* Somali Somalia */ "ar_SS", /* Arabic South Sudan */ "es_SV", /* Spanish El Salvador */ "ar_SY", /* Arabic Syria */ "th_TH", /* Thai Thailand */ "tg_TJ", /* Tajik Tajikistan */ "tk_TM", /* Turkmen Turkmenistan */ "ar_TN", /* Arabic Tunisia */ "to_TO", /* Tonga Tonga */ "tr_TR", /* Turkish Türkiye */ "zh_TW", /* Chinese Taiwan */ "sw_TZ", /* Swahili Tanzania */ "uk_UA", /* Ukrainian Ukraine */ "lg_UG", /* Ganda Uganda */ "en_US", /* English United States of America */ "es_UY", /* Spanish Uruguay */ "uz_UZ", /* Uzbek Uzbekistan */ "es_VE", /* Spanish Venezuela */ "vi_VN", /* Vietnamese Vietnam */ "bi_VU", /* Bislama Vanuatu */ "sm_WS", /* Samoan Samoa */ "ar_YE", /* Arabic Yemen */ "en_ZA", /* English South Africa */ "en_ZM", /* English Zambia */ "en_ZW" /* English Zimbabwe */ }; /* Compare just the territory part of two locale names. */ static int terrcmp (const char *locale1, const char *locale2) { const char *territory1 = strrchr (locale1, '_') + 1; const char *territory2 = strrchr (locale2, '_') + 1; return strcmp (territory1, territory2); } /* Given a locale name, return the locale corresponding to the main language with the same territory, or NULL if not found. For example: "fr_DE" -> "de_DE". */ static const char * get_main_locale_with_same_territory (const char *locale) { if (strrchr (locale, '_') != NULL) { # define table locales_with_principal_language /* The table is sorted. Perform a binary search. */ size_t hi = sizeof (table) / sizeof (table[0]); size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, terrcmp (table[i], locale) < 0, for i >= hi, terrcmp (table[i], locale) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = terrcmp (table[mid], locale); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with terrcmp (language_table[i], locale) == 0. Verify that it is the only such i. */ if (mid > lo && terrcmp (table[mid - 1], locale) >= 0) abort (); if (mid + 1 < hi && terrcmp (table[mid + 1], locale) <= 0) abort (); return table[mid]; } } # undef table } return NULL; } # endif char * setlocale_improved (int category, const char *locale) { if (locale != NULL && locale[0] == '\0') { /* A request to the set the current locale to the default locale. */ if (category == LC_ALL) { /* Set LC_CTYPE first. Then the other categories. */ static int const categories[] = { LC_CTYPE, LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES }; char *saved_locale; const char *base_name; unsigned int i; /* Back up the old locale, in case one of the steps fails. */ saved_locale = setlocale (LC_ALL, NULL); if (saved_locale == NULL) return NULL; saved_locale = strdup (saved_locale); if (saved_locale == NULL) return NULL; /* Set LC_CTYPE category. Set all other categories (except possibly LC_MESSAGES) to the same value in the same call; this is likely to save calls. */ base_name = gl_locale_name_environ (LC_CTYPE, category_to_name (LC_CTYPE)); if (base_name == NULL) base_name = gl_locale_name_default (); if (setlocale_unixlike (LC_ALL, base_name) != NULL) { /* LC_CTYPE category already set. */ i = 1; } else { /* On Mac OS X, "UTF-8" is a valid locale name for LC_CTYPE but not for LC_ALL. Therefore this call may fail. So, try another base_name. */ base_name = "C"; if (setlocale_unixlike (LC_ALL, base_name) == NULL) goto fail; i = 0; } # if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, setlocale(LC_ALL,...) may succeed but set the LC_CTYPE category to an invalid value ("C") when it does not support the specified encoding. Report a failure instead. */ if (strchr (base_name, '.') != NULL && strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) goto fail; # endif for (; i < sizeof (categories) / sizeof (categories[0]); i++) { int cat = categories[i]; const char *name; name = gl_locale_name_environ (cat, category_to_name (cat)); if (name == NULL) name = gl_locale_name_default (); /* If name is the same as base_name, it has already been set through the setlocale call before the loop. */ if (strcmp (name, base_name) != 0 # if LC_MESSAGES == 1729 || cat == LC_MESSAGES # endif ) if (setlocale_single (cat, name) == NULL) # if defined __APPLE__ && defined __MACH__ { /* On Mac OS X 10.13, some locales can be set through System Preferences > Language & Region, that are not supported by libc. The system's setlocale() falls back to "C" for these locale categories. We can do better, by trying an existing locale with the same language or an existing locale with the same territory. If we can't, print a warning, to limit user expectations. */ int warn = 0; if (cat == LC_CTYPE) warn = (setlocale_single (cat, "UTF-8") == NULL); else if (cat == LC_MESSAGES) { # if HAVE_CFLOCALECOPYPREFERREDLANGUAGES || HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.4 or newer */ /* Take the primary language preference. */ # if HAVE_CFLOCALECOPYPREFERREDLANGUAGES /* MacOS X 10.5 or newer */ CFArrayRef prefArray = CFLocaleCopyPreferredLanguages (); # elif HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.4 or newer */ CFTypeRef preferences = CFPreferencesCopyAppValue (CFSTR ("AppleLanguages"), kCFPreferencesCurrentApplication); if (preferences != NULL && CFGetTypeID (preferences) == CFArrayGetTypeID ()) { CFArrayRef prefArray = (CFArrayRef)preferences; # endif int n = CFArrayGetCount (prefArray); if (n > 0) { char buf[256]; CFTypeRef element = CFArrayGetValueAtIndex (prefArray, 0); if (element != NULL && CFGetTypeID (element) == CFStringGetTypeID () && CFStringGetCString ((CFStringRef)element, buf, sizeof (buf), kCFStringEncodingASCII)) { /* Remove the country. E.g. "zh-Hans-DE" -> "zh-Hans". */ char *last_minus = strrchr (buf, '-'); if (last_minus != NULL) *last_minus = '\0'; /* Convert to Unix locale name. E.g. "zh-Hans" -> "zh_CN". */ gl_locale_name_canonicalize (buf); /* Try setlocale with this value. */ if (setlocale_single (cat, buf) == NULL) { const char *last_try = get_main_locale_with_same_language (buf); if (last_try == NULL || setlocale_single (cat, last_try) == NULL) warn = 1; } } } # if HAVE_CFLOCALECOPYPREFERREDLANGUAGES /* MacOS X 10.5 or newer */ CFRelease (prefArray); # elif HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.4 or newer */ } # endif # else const char *last_try = get_main_locale_with_same_language (name); if (last_try == NULL || setlocale_single (cat, last_try) == NULL) warn = 1; # endif } else { /* For LC_NUMERIC, the application should use the locale properties kCFLocaleDecimalSeparator, kCFLocaleGroupingSeparator. For LC_TIME, the application should use the locale property kCFLocaleCalendarIdentifier. For LC_COLLATE, the application should use the locale properties kCFLocaleCollationIdentifier, kCFLocaleCollatorIdentifier. For LC_MONETARY, the application should use the locale properties kCFLocaleCurrencySymbol, kCFLocaleCurrencyCode. But since most applications don't have macOS specific code like this, try an existing locale with the same territory. */ const char *last_try = get_main_locale_with_same_territory (name); if (last_try == NULL || setlocale_single (cat, last_try) == NULL) warn = 1; } if (warn) { /* Warn only if the environment variable SETLOCALE_VERBOSE is set. Otherwise these warnings are just annoyances, since normal users won't invoke 'localedef'. */ const char *verbose = getenv ("SETLOCALE_VERBOSE"); if (verbose != NULL && verbose[0] != '\0') fprintf (stderr, "Warning: Failed to set locale category %s to %s.\n", category_to_name (cat), name); } } # else goto fail; # endif } /* All steps were successful. */ free (saved_locale); return setlocale (LC_ALL, NULL); fail: if (saved_locale[0] != '\0') /* don't risk an endless recursion */ setlocale (LC_ALL, saved_locale); free (saved_locale); return NULL; } else { const char *name = gl_locale_name_environ (category, category_to_name (category)); if (name == NULL) name = gl_locale_name_default (); return setlocale_single (category, name); } } else { # if defined _WIN32 && ! defined __CYGWIN__ if (category == LC_ALL && locale != NULL && strchr (locale, '.') != NULL) { char *saved_locale; /* Back up the old locale. */ saved_locale = setlocale (LC_ALL, NULL); if (saved_locale == NULL) return NULL; saved_locale = strdup (saved_locale); if (saved_locale == NULL) return NULL; if (setlocale_unixlike (LC_ALL, locale) == NULL) { free (saved_locale); return NULL; } /* On native Windows, setlocale(LC_ALL,...) may succeed but set the LC_CTYPE category to an invalid value ("C") when it does not support the specified encoding. Report a failure instead. */ if (strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) { if (saved_locale[0] != '\0') /* don't risk an endless recursion */ setlocale (LC_ALL, saved_locale); free (saved_locale); return NULL; } /* It was really successful. */ free (saved_locale); return setlocale (LC_ALL, NULL); } else # endif return setlocale_single (category, locale); } } # endif /* NEED_SETLOCALE_IMPROVED */ #endif �������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/setsockopt.c�������������������������������������������������������0000644�0001750�0001750�00000003370�14557510507�015206� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* setsockopt.c --- wrappers for Windows setsockopt function Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get struct timeval. */ #include <sys/time.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #undef setsockopt int rpl_setsockopt (int fd, int level, int optname, const void *optval, socklen_t optlen) { SOCKET sock = FD_TO_SOCKET (fd); int r; if (sock == INVALID_SOCKET) { errno = EBADF; return -1; } else { if (level == SOL_SOCKET && (optname == SO_RCVTIMEO || optname == SO_SNDTIMEO)) { const struct timeval *tv = optval; int milliseconds = tv->tv_sec * 1000 + tv->tv_usec / 1000; optval = &milliseconds; r = setsockopt (sock, level, optname, optval, sizeof (int)); } else { r = setsockopt (sock, level, optname, optval, optlen); } if (r < 0) set_winsock_errno (); return r; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/signed-nan.h�������������������������������������������������������0000644�0001750�0001750�00000004770�14557510507�015045� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macros for quiet not-a-number. Copyright (C) 2023-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _SIGNED_NAN_H #define _SIGNED_NAN_H #include <math.h> #include "nan.h" /* Returns a quiet 'float' NaN with sign bit == 0. */ _GL_UNUSED static float positive_NaNf () { /* 'volatile' works around a GCC bug: <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655> */ float volatile nan = NaNf (); return (signbit (nan) ? - nan : nan); } /* Returns a quiet 'float' NaN with sign bit == 1. */ _GL_UNUSED static float negative_NaNf () { /* 'volatile' works around a GCC bug: <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655> */ float volatile nan = NaNf (); return (signbit (nan) ? nan : - nan); } /* Returns a quiet 'double' NaN with sign bit == 0. */ _GL_UNUSED static double positive_NaNd () { /* 'volatile' works around a GCC bug: <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655> */ double volatile nan = NaNd (); return (signbit (nan) ? - nan : nan); } /* Returns a quiet 'double' NaN with sign bit == 1. */ _GL_UNUSED static double negative_NaNd () { /* 'volatile' works around a GCC bug: <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655> */ double volatile nan = NaNd (); return (signbit (nan) ? nan : - nan); } /* Returns a quiet 'long double' NaN with sign bit == 0. */ _GL_UNUSED static long double positive_NaNl () { /* 'volatile' works around a GCC bug: <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655> */ long double volatile nan = NaNl (); return (signbit (nan) ? - nan : nan); } /* Returns a quiet 'long double' NaN with sign bit == 1. */ _GL_UNUSED static long double negative_NaNl () { /* 'volatile' works around a GCC bug: <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655> */ long double volatile nan = NaNl (); return (signbit (nan) ? nan : - nan); } #endif /* _SIGNED_NAN_H */ ��������gnuastro-0.22/bootstrapped/tests/signed-snan.h������������������������������������������������������0000644�0001750�0001750�00000007634�14557510507�015232� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macros for signalling not-a-number. Copyright (C) 2023-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _SIGNED_SNAN_H #define _SIGNED_SNAN_H #include "signed-nan.h" #include "snan.h" #if HAVE_SNANF /* Returns a signalling 'float' NaN with sign bit == 0 in memory. */ _GL_UNUSED static memory_float memory_positive_SNaNf () { return construct_memory_SNaNf (positive_NaNf ()); } /* Returns a signalling 'float' NaN with sign bit == 1 in memory. */ _GL_UNUSED static memory_float memory_negative_SNaNf () { return construct_memory_SNaNf (negative_NaNf ()); } /* Note: On 32-bit x86 processors, as well as on x86_64 processors with CC="gcc -mfpmath=387", the following functions may return a quiet NaN instead. Use the functions with 'memory_' prefix if you need to avoid this. See <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> for details. */ /* Returns a signalling 'float' NaN with sign bit == 0. */ _GL_UNUSED static float positive_SNaNf () { return memory_positive_SNaNf ().value; } /* Returns a signalling 'float' NaN with sign bit == 1. */ _GL_UNUSED static float negative_SNaNf () { return memory_negative_SNaNf ().value; } #endif #if HAVE_SNAND /* Returns a signalling 'double' NaN with sign bit == 0 in memory. */ _GL_UNUSED static memory_double memory_positive_SNaNd () { return construct_memory_SNaNd (positive_NaNd ()); } /* Returns a signalling 'double' NaN with sign bit == 1 in memory. */ _GL_UNUSED static memory_double memory_negative_SNaNd () { return construct_memory_SNaNd (negative_NaNd ()); } /* Note: On 32-bit x86 processors, as well as on x86_64 processors with CC="gcc -mfpmath=387", the following functions may return a quiet NaN instead. Use the functions with 'memory_' prefix if you need to avoid this. See <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> for details. */ /* Returns a signalling 'double' NaN with sign bit == 0. */ _GL_UNUSED static double positive_SNaNd () { return memory_positive_SNaNd ().value; } /* Returns a signalling 'double' NaN with sign bit == 1. */ _GL_UNUSED static double negative_SNaNd () { return memory_negative_SNaNd ().value; } #endif #if HAVE_SNANL /* Returns a signalling 'long double' NaN with sign bit == 0 in memory. */ _GL_UNUSED static memory_long_double memory_positive_SNaNl () { return construct_memory_SNaNl (positive_NaNl ()); } /* Returns a signalling 'long double' NaN with sign bit == 1 in memory. */ _GL_UNUSED static memory_long_double memory_negative_SNaNl () { return construct_memory_SNaNl (negative_NaNl ()); } /* Note: On 32-bit x86 processors, as well as on x86_64 processors with CC="gcc -mfpmath=387", if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE is 1, the following functions may return a quiet NaN instead. Use the functions with 'memory_' prefix if you need to avoid this. See <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> for details. */ /* Returns a signalling 'long double' NaN with sign bit == 0. */ _GL_UNUSED static long double positive_SNaNl () { return memory_positive_SNaNl ().value; } /* Returns a signalling 'long double' NaN with sign bit == 1. */ _GL_UNUSED static long double negative_SNaNl () { return memory_negative_SNaNl ().value; } #endif #endif /* _SIGNED_SNAN_H */ ����������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/sigprocmask.c������������������������������������������������������0000644�0001750�0001750�00000020622�14557510507�015331� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible signal blocking. Copyright (C) 2006-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <signal.h> #include <errno.h> #include <stdint.h> #include <stdlib.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif /* We assume that a platform without POSIX signal blocking functions also does not have the POSIX sigaction() function, only the signal() function. We also assume signal() has SysV semantics, where any handler is uninstalled prior to being invoked. This is true for native Windows platforms. */ /* We use raw signal(), but also provide a wrapper rpl_signal() so that applications can query or change a blocked signal. */ #undef signal /* Provide invalid signal numbers as fallbacks if the uncatchable signals are not defined. */ #ifndef SIGKILL # define SIGKILL (-1) #endif #ifndef SIGSTOP # define SIGSTOP (-1) #endif /* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias for the signal SIGABRT. Only one signal handler is stored for both SIGABRT and SIGABRT_COMPAT. SIGABRT_COMPAT is not a signal of its own. */ #if defined _WIN32 && ! defined __CYGWIN__ # undef SIGABRT_COMPAT # define SIGABRT_COMPAT 6 #endif #ifdef SIGABRT_COMPAT # define SIGABRT_COMPAT_MASK (1U << SIGABRT_COMPAT) #else # define SIGABRT_COMPAT_MASK 0 #endif typedef void (*handler_t) (int); #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static handler_t signal_nothrow (int sig, handler_t handler) { handler_t result; TRY_MSVC_INVAL { result = signal (sig, handler); } CATCH_MSVC_INVAL { result = SIG_ERR; errno = EINVAL; } DONE_MSVC_INVAL; return result; } # define signal signal_nothrow #endif /* Handling of gnulib defined signals. */ #if GNULIB_defined_SIGPIPE static handler_t SIGPIPE_handler = SIG_DFL; #endif #if GNULIB_defined_SIGPIPE static handler_t ext_signal (int sig, handler_t handler) { switch (sig) { case SIGPIPE: { handler_t old_handler = SIGPIPE_handler; SIGPIPE_handler = handler; return old_handler; } default: /* System defined signal */ return signal (sig, handler); } } # undef signal # define signal ext_signal #endif int sigismember (const sigset_t *set, int sig) { if (sig >= 0 && sig < NSIG) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif return (*set >> sig) & 1; } else return 0; } int sigemptyset (sigset_t *set) { *set = 0; return 0; } int sigaddset (sigset_t *set, int sig) { if (sig >= 0 && sig < NSIG) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif *set |= 1U << sig; return 0; } else { errno = EINVAL; return -1; } } int sigdelset (sigset_t *set, int sig) { if (sig >= 0 && sig < NSIG) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif *set &= ~(1U << sig); return 0; } else { errno = EINVAL; return -1; } } int sigfillset (sigset_t *set) { *set = ((2U << (NSIG - 1)) - 1) & ~ SIGABRT_COMPAT_MASK; return 0; } /* Set of currently blocked signals. */ static volatile sigset_t blocked_set /* = 0 */; /* Set of currently blocked and pending signals. */ static volatile sig_atomic_t pending_array[NSIG] /* = { 0 } */; /* Signal handler that is installed for blocked signals. */ static void blocked_handler (int sig) { /* Reinstall the handler, in case the signal occurs multiple times while blocked. There is an inherent race where an asynchronous signal in between when the kernel uninstalled the handler and when we reinstall it will trigger the default handler; oh well. */ signal (sig, blocked_handler); if (sig >= 0 && sig < NSIG) pending_array[sig] = 1; } int sigpending (sigset_t *set) { sigset_t pending = 0; int sig; for (sig = 0; sig < NSIG; sig++) if (pending_array[sig]) pending |= 1U << sig; *set = pending; return 0; } /* The previous signal handlers. Only the array elements corresponding to blocked signals are relevant. */ static volatile handler_t old_handlers[NSIG]; int sigprocmask (int operation, const sigset_t *set, sigset_t *old_set) { if (old_set != NULL) *old_set = blocked_set; if (set != NULL) { sigset_t new_blocked_set; sigset_t to_unblock; sigset_t to_block; switch (operation) { case SIG_BLOCK: new_blocked_set = blocked_set | *set; break; case SIG_SETMASK: new_blocked_set = *set; break; case SIG_UNBLOCK: new_blocked_set = blocked_set & ~*set; break; default: errno = EINVAL; return -1; } to_unblock = blocked_set & ~new_blocked_set; to_block = new_blocked_set & ~blocked_set; if (to_block != 0) { int sig; for (sig = 0; sig < NSIG; sig++) if ((to_block >> sig) & 1) { pending_array[sig] = 0; if ((old_handlers[sig] = signal (sig, blocked_handler)) != SIG_ERR) blocked_set |= 1U << sig; } } if (to_unblock != 0) { sig_atomic_t received[NSIG]; int sig; for (sig = 0; sig < NSIG; sig++) if ((to_unblock >> sig) & 1) { if (signal (sig, old_handlers[sig]) != blocked_handler) /* The application changed a signal handler while the signal was blocked, bypassing our rpl_signal replacement. We don't support this. */ abort (); received[sig] = pending_array[sig]; blocked_set &= ~(1U << sig); pending_array[sig] = 0; } else received[sig] = 0; for (sig = 0; sig < NSIG; sig++) if (received[sig]) raise (sig); } } return 0; } /* Install the handler FUNC for signal SIG, and return the previous handler. */ handler_t rpl_signal (int sig, handler_t handler) { /* We must provide a wrapper, so that a user can query what handler they installed even if that signal is currently blocked. */ if (sig >= 0 && sig < NSIG && sig != SIGKILL && sig != SIGSTOP && handler != SIG_ERR) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif if (blocked_set & (1U << sig)) { /* POSIX states that sigprocmask and signal are both async-signal-safe. This is not true of our implementation - there is a slight data race where an asynchronous interrupt on signal A can occur after we install blocked_handler but before we have updated old_handlers for signal B, such that handler A can see stale information if it calls signal(B). Oh well - signal handlers really shouldn't try to manipulate the installed handlers of unrelated signals. */ handler_t result = old_handlers[sig]; old_handlers[sig] = handler; return result; } else return signal (sig, handler); } else { errno = EINVAL; return SIG_ERR; } } #if GNULIB_defined_SIGPIPE /* Raise the signal SIGPIPE. */ int _gl_raise_SIGPIPE (void) { if (blocked_set & (1U << SIGPIPE)) pending_array[SIGPIPE] = 1; else { handler_t handler = SIGPIPE_handler; if (handler == SIG_DFL) exit (128 + SIGPIPE); else if (handler != SIG_IGN) (*handler) (SIGPIPE); } return 0; } #endif ��������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/snan.h�������������������������������������������������������������0000644�0001750�0001750�00000022541�14557510507�013755� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macros for signalling not-a-number. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _SNAN_H #define _SNAN_H #include <float.h> #include <limits.h> #include <math.h> #include "nan.h" /* The bit that distinguishes a quiet NaN from a signalling NaN is, according to <https://en.wikipedia.org/wiki/NaN#Encoding>, the most significant bit of the mantissa field. According to <https://en.wikipedia.org/wiki/IEEE_754#Formats>, this is the next bit, right below the bit 0 of the exponent. This bit is * == 0 to indicate a quiet NaN or Infinity, == 1 to indicate a signalling NaN, on these CPUs: hppa, mips (*), sh4. * == 1 to indicate a quiet NaN, == 0 to indicate a signalling NaN or Infinity, on all other CPUs. On these platforms, additionally a signalling NaN must have some other mantissa bit == 1, because when all exponent bits are == 1 and all mantissa bits are == 0, the number denotes ±Infinity. This NaN encoding is specified by IEEE 754-2008 § 6.2.1. (*) On mips CPUs, it depends on the CPU model. The classical behaviour is as indicated above. On some newer models, it's like on the other CPUs. On some (but not all!) models this meta-info can be determined from two special CPU registers: If the "Floating Point Implementation Register" (fir) bit 23, also known as Has2008 bit, is set, the "Floating Point Control and Status Register" (fcsr) bit 18, also known as the NAN2008 bit, has the value - 0 for the classical behaviour, - 1 for like on the other CPUs. Both of these bits are read-only. This module has determined the behaviour at configure time and defines the C macros MIPS_NAN2008_FLOAT, MIPS_NAN2008_DOUBLE, MIPS_NAN2008_LONG_DOUBLE accordingly. */ /* 'float' = IEEE 754 single-precision <https://en.wikipedia.org/wiki/Single-precision_floating-point_format> */ #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT # define HAVE_SNANF 1 _GL_UNUSED static memory_float construct_memory_SNaNf (float quiet_value) { memory_float m; m.value = quiet_value; /* Turn the quiet NaN into a signalling NaN. */ #if FLT_EXPBIT0_BIT > 0 m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); #else m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); #endif /* Set some arbitrary mantissa bit. */ if (FLT_EXPBIT0_WORD < NWORDS / 2) /* NWORDS > 1 and big endian */ m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; else /* NWORDS == 1 or little endian */ m.word[0] |= (unsigned int) 1; return m; } /* Returns a signalling 'float' NaN in memory. */ _GL_UNUSED static memory_float memory_SNaNf () { return construct_memory_SNaNf (NaNf ()); } _GL_UNUSED static float construct_SNaNf (float quiet_value) { return construct_memory_SNaNf (quiet_value).value; } /* Returns a signalling 'float' NaN. Note: On 32-bit x86 processors, as well as on x86_64 processors with CC="gcc -mfpmath=387", this function may return a quiet NaN instead. Use memory_SNaNf() if you need to avoid this. See <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> for details. */ _GL_UNUSED static float SNaNf () { return memory_SNaNf ().value; } #endif #undef NWORDS /* 'double' = IEEE 754 double-precision <https://en.wikipedia.org/wiki/Double-precision_floating-point_format> */ #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; #if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT # define HAVE_SNAND 1 _GL_UNUSED static memory_double construct_memory_SNaNd (double quiet_value) { memory_double m; m.value = quiet_value; /* Turn the quiet NaN into a signalling NaN. */ #if DBL_EXPBIT0_BIT > 0 m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); #else m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); #endif /* Set some arbitrary mantissa bit. */ m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] |= (unsigned int) 1 << DBL_EXPBIT0_BIT; return m; } /* Returns a signalling 'double' NaN in memory. */ _GL_UNUSED static memory_double memory_SNaNd () { return construct_memory_SNaNd (NaNd ()); } _GL_UNUSED static double construct_SNaNd (double quiet_value) { return construct_memory_SNaNd (quiet_value).value; } /* Returns a signalling 'double' NaN. Note: On 32-bit x86 processors, as well as on x86_64 processors with CC="gcc -mfpmath=387", this function may return a quiet NaN instead. Use memory_SNaNf() if you need to avoid this. See <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> for details. */ _GL_UNUSED static double SNaNd () { return memory_SNaNd ().value; } #endif #undef NWORDS /* 'long double' = * if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE: IEEE 754 double-precision <https://en.wikipedia.org/wiki/Double-precision_floating-point_format> * Otherwise: - On i386, x86_64, ia64: 80-bits extended-precision <https://en.wikipedia.org/wiki/Extended_precision#x86_extended_precision_format> - On alpha, arm64, loongarch64, mips64, riscv64, s390x, sparc64: IEEE 754 quadruple-precision <https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format#IEEE_754_quadruple-precision_binary_floating-point_format:_binary128> - On powerpc, powerpc64, powerpc64le: 2x64-bits double-double <https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format#Double-double_arithmetic> - On m68k: 80-bits extended-precision, padded to 96 bits, with non-IEEE exponent */ #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; #if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT # define HAVE_SNANL 1 _GL_UNUSED static memory_long_double construct_memory_SNaNl (long double quiet_value) { memory_long_double m; m.value = quiet_value; #if defined __powerpc__ && LDBL_MANT_DIG == 106 /* This is PowerPC "double double", a pair of two doubles. Inf and NaN are represented as the corresponding 64-bit IEEE values in the first double; the second is ignored. Manipulate only the first double. */ #define HNWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) #else #define HNWORDS NWORDS #endif /* Turn the quiet NaN into a signalling NaN. */ #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* In this representation, the leading 1 of the mantissa is explicitly stored. */ #if LDBL_EXPBIT0_BIT > 1 m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 2); #else m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < HNWORDS / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 2); #endif #else /* In this representation, the leading 1 of the mantissa is implicit. */ #if LDBL_EXPBIT0_BIT > 0 m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); #else m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < HNWORDS / 2 ? 1 : - 1)] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); #endif #endif /* Set some arbitrary mantissa bit. */ m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < HNWORDS / 2 ? 1 : - 1)] |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; #undef HNWORDS return m; } /* Returns a signalling 'long double' NaN in memory. */ _GL_UNUSED static memory_long_double memory_SNaNl () { return construct_memory_SNaNl (NaNl ()); } _GL_UNUSED static long double construct_SNaNl (long double quiet_value) { return construct_memory_SNaNl (quiet_value).value; } /* Returns a signalling 'long double' NaN. Note: On 32-bit x86 processors, as well as on x86_64 processors with CC="gcc -mfpmath=387", if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE is 1, this function may return a quiet NaN instead. Use memory_SNaNf() if you need to avoid this. See <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> for details. */ _GL_UNUSED static long double SNaNl () { return memory_SNaNl ().value; } #endif #undef NWORDS #endif /* _SNAN_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/socket.c�����������������������������������������������������������0000644�0001750�0001750�00000002742�14557510507�014302� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* socket.c --- wrappers for Windows socket function Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini */ #include <config.h> #define WIN32_LEAN_AND_MEAN /* Get winsock2.h. */ #include <sys/socket.h> /* Get set_winsock_errno, FD_TO_SOCKET etc. */ #include "w32sock.h" #include "sockets.h" /* Don't assume that UNICODE is defined. */ #undef WSASocket #define WSASocket WSASocketW int rpl_socket (int domain, int type, int protocol) { SOCKET fh; gl_sockets_startup (SOCKETS_1_1); /* We have to use WSASocket() to create non-overlapped IO sockets. Overlapped IO sockets cannot be used with read/write. */ fh = WSASocket (domain, type, protocol, NULL, 0, 0); if (fh == INVALID_SOCKET) { set_winsock_errno (); return -1; } else return SOCKET_TO_FD (fh); } ������������������������������gnuastro-0.22/bootstrapped/tests/symlink.c����������������������������������������������������������0000644�0001750�0001750�00000002677�14557510507�014507� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stub for symlink(). Copyright (C) 2009-2024 Free Software Foundation, Inc. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/stat.h> #if HAVE_SYMLINK # undef symlink /* Create a symlink, but reject trailing slash. */ int rpl_symlink (char const *contents, char const *name) { size_t len = strlen (name); if (len && name[len - 1] == '/') { struct stat st; if (lstat (name, &st) == 0 || errno == EOVERFLOW) errno = EEXIST; return -1; } return symlink (contents, name); } #else /* !HAVE_SYMLINK */ /* The system does not support symlinks. */ int symlink (_GL_UNUSED char const *contents, _GL_UNUSED char const *name) { errno = ENOSYS; return -1; } #endif /* !HAVE_SYMLINK */ �����������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/unsetenv.c���������������������������������������������������������0000644�0001750�0001750�00000005514�14557510511�014654� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992, 1995-2002, 2005-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ #define _GL_ARG_NONNULL(params) #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #if !_LIBC # define __set_errno(ev) ((errno) = (ev)) #endif #include <string.h> #include <unistd.h> #if !_LIBC # define __environ environ #endif #if _LIBC /* This lock protects against simultaneous modifications of 'environ'. */ # include <bits/libc-lock.h> __libc_lock_define_initialized (static, envlock) # define LOCK __libc_lock_lock (envlock) # define UNLOCK __libc_lock_unlock (envlock) #else # define LOCK # define UNLOCK #endif /* In the GNU C library we must keep the namespace clean. */ #ifdef _LIBC # define unsetenv __unsetenv #endif #if _LIBC || !HAVE_UNSETENV int unsetenv (const char *name) { size_t len; char **ep; if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) { __set_errno (EINVAL); return -1; } len = strlen (name); LOCK; ep = __environ; while (*ep != NULL) if (!strncmp (*ep, name, len) && (*ep)[len] == '=') { /* Found it. Remove this pointer by moving later ones back. */ char **dp = ep; do dp[0] = dp[1]; while (*dp++); /* Continue the loop in case NAME appears again. */ } else ++ep; UNLOCK; return 0; } #ifdef _LIBC # undef unsetenv weak_alias (__unsetenv, unsetenv) #endif #else /* HAVE_UNSETENV */ # undef unsetenv # if !HAVE_DECL_UNSETENV # if VOID_UNSETENV extern void unsetenv (const char *); # else extern int unsetenv (const char *); # endif # endif /* Call the underlying unsetenv, in case there is hidden bookkeeping that needs updating beyond just modifying environ. */ int rpl_unsetenv (const char *name) { int result = 0; if (!name || !*name || strchr (name, '=')) { errno = EINVAL; return -1; } while (getenv (name)) # if !VOID_UNSETENV result = # endif unsetenv (name); return result; } #endif /* HAVE_UNSETENV */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/usleep.c�����������������������������������������������������������0000644�0001750�0001750�00000004406�14557510511�014301� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Pausing execution of the current thread. Copyright (C) 2009-2024 Free Software Foundation, Inc. Written by Eric Blake <ebb9@byu.net>, 2009. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* This file is _intentionally_ light-weight. Rather than using select or nanosleep, both of which drag in external libraries on some platforms, this merely rounds up to the nearest second if usleep() does not exist. If sub-second resolution is important, then use a more powerful interface to begin with. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> #endif #ifndef HAVE_USLEEP # define HAVE_USLEEP 0 #endif /* Sleep for MICRO microseconds, which can be greater than 1 second. Return -1 and set errno to EINVAL on range error (about 4295 seconds), or 0 on success. Interaction with SIGALARM is unspecified. */ int usleep (useconds_t micro) #undef usleep { #if defined _WIN32 && ! defined __CYGWIN__ unsigned int milliseconds = micro / 1000; if (sizeof milliseconds < sizeof micro && micro / 1000 != milliseconds) { errno = EINVAL; return -1; } if (micro % 1000) milliseconds++; Sleep (milliseconds); return 0; #else unsigned int seconds = micro / 1000000; if (sizeof seconds < sizeof micro && micro / 1000000 != seconds) { errno = EINVAL; return -1; } if (!HAVE_USLEEP && micro % 1000000) seconds++; while ((seconds = sleep (seconds)) != 0); # if !HAVE_USLEEP # define usleep(x) 0 # endif return usleep (micro % 1000000); #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/wctob.c������������������������������������������������������������0000644�0001750�0001750�00000002304�14557510511�014115� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to unibyte character. Copyright (C) 2008, 2010-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This 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 3 of the License, or (at your option) any later version. This file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <stdio.h> #include <stdlib.h> int wctob (wint_t wc) { char buf[64]; if (!(MB_CUR_MAX <= sizeof (buf))) abort (); /* Handle the case where WEOF is a value that does not fit in a wchar_t. */ if (wc == (wchar_t)wc) if (wctomb (buf, (wchar_t)wc) == 1) return (unsigned char) buf[0]; return EOF; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/wctomb.c�����������������������������������������������������������0000644�0001750�0001750�00000001645�14557510511�014301� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to multibyte character. Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "wctomb-impl.h" �������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/windows-thread.c���������������������������������������������������0000644�0001750�0001750�00000015132�14557510511�015741� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creating and controlling threads (native Windows implementation). Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-thread.h" #include <errno.h> #include <process.h> #include <stdlib.h> #include "windows-once.h" #include "windows-tls.h" /* The Thread-Local Storage (TLS) key that allows to access each thread's 'struct glwthread_thread_struct *' pointer. */ static DWORD self_key = (DWORD)-1; /* Initializes self_key. This function must only be called once. */ static void do_init_self_key (void) { self_key = TlsAlloc (); /* If this fails, we're hosed. */ if (self_key == (DWORD)-1) abort (); } /* Initializes self_key. */ static void init_self_key (void) { static glwthread_once_t once = GLWTHREAD_ONCE_INIT; glwthread_once (&once, do_init_self_key); } /* This structure contains information about a thread. It is stored in TLS under key self_key. */ struct glwthread_thread_struct { /* Fields for managing the handle. */ HANDLE volatile handle; CRITICAL_SECTION handle_lock; /* Fields for managing the exit value. */ BOOL volatile detached; void * volatile result; /* Fields for managing the thread start. */ void * (*func) (void *); void *arg; }; /* Return a real HANDLE object for the current thread. */ static HANDLE get_current_thread_handle (void) { HANDLE this_handle; /* GetCurrentThread() returns a pseudo-handle, i.e. only a symbolic identifier, not a real handle. */ if (!DuplicateHandle (GetCurrentProcess (), GetCurrentThread (), GetCurrentProcess (), &this_handle, 0, FALSE, DUPLICATE_SAME_ACCESS)) abort (); return this_handle; } glwthread_thread_t glwthread_thread_self (void) { glwthread_thread_t thread; if (self_key == (DWORD)-1) init_self_key (); thread = TlsGetValue (self_key); if (thread == NULL) { /* This happens only in threads that have not been created through glthread_create(), such as the main thread. */ for (;;) { thread = (struct glwthread_thread_struct *) malloc (sizeof (struct glwthread_thread_struct)); if (thread != NULL) break; /* Memory allocation failed. There is not much we can do. Have to busy-loop, waiting for the availability of memory. */ Sleep (1); } thread->handle = get_current_thread_handle (); InitializeCriticalSection (&thread->handle_lock); thread->detached = FALSE; /* This can lead to a memory leak. */ thread->result = NULL; /* just to be deterministic */ TlsSetValue (self_key, thread); } return thread; } /* The main function of a freshly creating thread. It's a wrapper around the FUNC and ARG arguments passed to glthread_create_func. */ static unsigned int WINAPI wrapper_func (void *varg) { struct glwthread_thread_struct *thread = (struct glwthread_thread_struct *) varg; EnterCriticalSection (&thread->handle_lock); /* Create a new handle for the thread only if the parent thread did not yet fill in the handle. */ if (thread->handle == NULL) thread->handle = get_current_thread_handle (); LeaveCriticalSection (&thread->handle_lock); if (self_key == (DWORD)-1) init_self_key (); TlsSetValue (self_key, thread); /* Run the thread. Store the exit value if the thread was not terminated otherwise. */ thread->result = thread->func (thread->arg); /* Process the TLS destructors. */ glwthread_tls_process_destructors (); if (thread->detached) { /* Clean up the thread, like thrd_join would do. */ DeleteCriticalSection (&thread->handle_lock); CloseHandle (thread->handle); free (thread); } return 0; } int glwthread_thread_create (glwthread_thread_t *threadp, unsigned int attr, void * (*func) (void *), void *arg) { struct glwthread_thread_struct *thread = (struct glwthread_thread_struct *) malloc (sizeof (struct glwthread_thread_struct)); if (thread == NULL) return ENOMEM; thread->handle = NULL; InitializeCriticalSection (&thread->handle_lock); thread->detached = (attr & GLWTHREAD_ATTR_DETACHED ? TRUE : FALSE); thread->result = NULL; /* just to be deterministic */ thread->func = func; thread->arg = arg; { unsigned int thread_id; HANDLE thread_handle; thread_handle = (HANDLE) _beginthreadex (NULL, 100000, wrapper_func, thread, 0, &thread_id); /* calls CreateThread with the same arguments */ if (thread_handle == NULL) { DeleteCriticalSection (&thread->handle_lock); free (thread); return EAGAIN; } EnterCriticalSection (&thread->handle_lock); if (thread->handle == NULL) thread->handle = thread_handle; else /* thread->handle was already set by the thread itself. */ CloseHandle (thread_handle); LeaveCriticalSection (&thread->handle_lock); *threadp = thread; return 0; } } int glwthread_thread_join (glwthread_thread_t thread, void **retvalp) { if (thread == NULL) return EINVAL; if (thread == glwthread_thread_self ()) return EDEADLK; if (thread->detached) return EINVAL; if (WaitForSingleObject (thread->handle, INFINITE) == WAIT_FAILED) return EINVAL; if (retvalp != NULL) *retvalp = thread->result; DeleteCriticalSection (&thread->handle_lock); CloseHandle (thread->handle); free (thread); return 0; } int glwthread_thread_detach (glwthread_thread_t thread) { if (thread == NULL) return EINVAL; if (thread->detached) return EINVAL; thread->detached = TRUE; return 0; } void glwthread_thread_exit (void *retval) { glwthread_thread_t thread = glwthread_thread_self (); thread->result = retval; glwthread_tls_process_destructors (); _endthreadex (0); /* calls ExitThread (0) */ abort (); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/windows-tls.c������������������������������������������������������0000644�0001750�0001750�00000024610�14557510511�015275� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Thread-local storage (native Windows implementation). Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #include <config.h> /* Specification. */ #include "windows-tls.h" #include <errno.h> #include <limits.h> #include <stdlib.h> #include "windows-once.h" void * glwthread_tls_get (glwthread_tls_key_t key) { return TlsGetValue (key); } int glwthread_tls_set (glwthread_tls_key_t key, void *value) { if (!TlsSetValue (key, value)) return EINVAL; return 0; } /* The following variables keep track of TLS keys with non-NULL destructor. */ static glwthread_once_t dtor_table_init_once = GLWTHREAD_ONCE_INIT; static CRITICAL_SECTION dtor_table_lock; struct dtor { glwthread_tls_key_t key; void (*destructor) (void *); }; /* The table of dtors. */ static struct dtor *dtor_table; /* Number of active entries in the dtor_table. */ static unsigned int dtors_count; /* Valid indices into dtor_table are 0..dtors_used-1. */ static unsigned int dtors_used; /* Allocation size of dtor_table. */ static unsigned int dtors_allocated; /* Invariant: 0 <= dtors_count <= dtors_used <= dtors_allocated. */ /* Number of threads that are currently processing destructors. */ static unsigned int dtor_processing_threads; static void dtor_table_initialize (void) { InitializeCriticalSection (&dtor_table_lock); /* The other variables are already initialized to NULL or 0, respectively. */ } static void dtor_table_ensure_initialized (void) { glwthread_once (&dtor_table_init_once, dtor_table_initialize); } /* Shrinks dtors_used down to dtors_count, by replacing inactive entries with active ones. */ static void dtor_table_shrink_used (void) { unsigned int i = 0; unsigned int j = dtors_used; for (;;) { BOOL i_found = FALSE; BOOL j_found = FALSE; /* Find the next inactive entry, from the left. */ for (; i < dtors_count;) { if (dtor_table[i].destructor == NULL) { i_found = TRUE; break; } i++; } /* Find the next active entry, from the right. */ for (; j > dtors_count;) { j--; if (dtor_table[j].destructor != NULL) { j_found = TRUE; break; } } if (i_found != j_found) /* dtors_count was apparently wrong. */ abort (); if (!i_found) break; /* i_found and j_found are TRUE. Swap the two entries. */ dtor_table[i] = dtor_table[j]; i++; } dtors_used = dtors_count; } void glwthread_tls_process_destructors (void) { unsigned int repeat; dtor_table_ensure_initialized (); EnterCriticalSection (&dtor_table_lock); if (dtor_processing_threads == 0) { /* Now it's the appropriate time for shrinking dtors_used. */ if (dtors_used > dtors_count) dtor_table_shrink_used (); } dtor_processing_threads++; for (repeat = GLWTHREAD_DESTRUCTOR_ITERATIONS; repeat > 0; repeat--) { unsigned int destructors_run = 0; /* Iterate across dtor_table. We don't need to make a copy of dtor_table, because * When another thread calls glwthread_tls_key_create with a non-NULL destructor argument, this will possibly reallocate the dtor_table array and increase dtors_allocated as well as dtors_used and dtors_count, but it will not change dtors_used nor the contents of the first dtors_used entries of dtor_table. * When another thread calls glwthread_tls_key_delete, this will possibly set some 'destructor' member to NULL, thus marking an entry as inactive, but it will not otherwise change dtors_used nor the contents of the first dtors_used entries of dtor_table. */ unsigned int i_limit = dtors_used; unsigned int i; for (i = 0; i < i_limit; i++) { struct dtor current = dtor_table[i]; if (current.destructor != NULL) { /* The current dtor has not been deleted yet. */ void *current_value = glwthread_tls_get (current.key); if (current_value != NULL) { /* The current value is non-NULL. Run the destructor. */ glwthread_tls_set (current.key, NULL); LeaveCriticalSection (&dtor_table_lock); current.destructor (current_value); EnterCriticalSection (&dtor_table_lock); destructors_run++; } } } /* When all TLS values were already NULL, no further iterations are needed. */ if (destructors_run == 0) break; } dtor_processing_threads--; LeaveCriticalSection (&dtor_table_lock); } int glwthread_tls_key_create (glwthread_tls_key_t *keyp, void (*destructor) (void *)) { if (destructor != NULL) { dtor_table_ensure_initialized (); EnterCriticalSection (&dtor_table_lock); if (dtor_processing_threads == 0) { /* Now it's the appropriate time for shrinking dtors_used. */ if (dtors_used > dtors_count) dtor_table_shrink_used (); } while (dtors_used == dtors_allocated) { /* Need to grow the dtor_table. */ unsigned int new_allocated = 2 * dtors_allocated + 1; if (new_allocated < 7) new_allocated = 7; if (new_allocated <= dtors_allocated) /* overflow? */ new_allocated = UINT_MAX; LeaveCriticalSection (&dtor_table_lock); { struct dtor *new_table = (struct dtor *) malloc (new_allocated * sizeof (struct dtor)); if (new_table == NULL) return ENOMEM; EnterCriticalSection (&dtor_table_lock); /* Attention! dtors_used, dtors_allocated may have changed! */ if (dtors_used < new_allocated) { if (dtors_allocated < new_allocated) { /* The new_table is useful. */ memcpy (new_table, dtor_table, dtors_used * sizeof (struct dtor)); dtor_table = new_table; dtors_allocated = new_allocated; } else { /* The new_table is not useful, since another thread meanwhile allocated a drop_table that is at least as large. */ free (new_table); } break; } /* The new_table is not useful, since other threads increased dtors_used. Free it any retry. */ free (new_table); } } /* Here dtors_used < dtors_allocated. */ { /* Allocate a new key. */ glwthread_tls_key_t key = TlsAlloc (); if (key == (DWORD)-1) { LeaveCriticalSection (&dtor_table_lock); return EAGAIN; } /* Store the new dtor in the dtor_table, after all used entries. Do not overwrite inactive entries with indices < dtors_used, in order not to disturb glwthread_tls_process_destructors invocations that may be executing in other threads. */ dtor_table[dtors_used].key = key; dtor_table[dtors_used].destructor = destructor; dtors_used++; dtors_count++; LeaveCriticalSection (&dtor_table_lock); *keyp = key; } } else { /* Allocate a new key. */ glwthread_tls_key_t key = TlsAlloc (); if (key == (DWORD)-1) return EAGAIN; *keyp = key; } return 0; } int glwthread_tls_key_delete (glwthread_tls_key_t key) { /* Should the destructor be called for all threads that are currently running? Probably not, because - ISO C does not specify when the destructor is to be invoked at all. - In POSIX, the destructor functions specified with pthread_key_create() are invoked at thread exit. - It would be hard to implement, because there are no primitives for accessing thread-specific values from a different thread. */ dtor_table_ensure_initialized (); EnterCriticalSection (&dtor_table_lock); if (dtor_processing_threads == 0) { /* Now it's the appropriate time for shrinking dtors_used. */ if (dtors_used > dtors_count) dtor_table_shrink_used (); /* Here dtors_used == dtors_count. */ /* Find the key in dtor_table. */ { unsigned int i_limit = dtors_used; unsigned int i; for (i = 0; i < i_limit; i++) if (dtor_table[i].key == key) { if (i < dtors_used - 1) /* Swap the entries i and dtors_used - 1. */ dtor_table[i] = dtor_table[dtors_used - 1]; dtors_count = dtors_used = dtors_used - 1; break; } } } else { /* Be careful not to disturb the glwthread_tls_process_destructors invocations that are executing in other threads. */ unsigned int i_limit = dtors_used; unsigned int i; for (i = 0; i < i_limit; i++) if (dtor_table[i].destructor != NULL /* skip inactive entries */ && dtor_table[i].key == key) { /* Mark this entry as inactive. */ dtor_table[i].destructor = NULL; dtors_count = dtors_count - 1; break; } } LeaveCriticalSection (&dtor_table_lock); /* Now we have ensured that glwthread_tls_process_destructors will no longer use this key. */ if (!TlsFree (key)) return EINVAL; return 0; } ������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/xmalloc.c����������������������������������������������������������0000644�0001750�0001750�00000020272�14557510511�014442� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xmalloc.c -- malloc with out of memory checking Copyright (C) 1990-2000, 2002-2006, 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define XALLOC_INLINE _GL_EXTERN_INLINE #include "xalloc.h" #include "ialloc.h" #include "minmax.h" #include <stdckdint.h> #include <stdlib.h> #include <stdint.h> #include <string.h> static void * _GL_ATTRIBUTE_PURE nonnull (void *p) { if (!p) xalloc_die (); return p; } /* Allocate S bytes of memory dynamically, with error checking. */ void * xmalloc (size_t s) { return nonnull (malloc (s)); } void * ximalloc (idx_t s) { return nonnull (imalloc (s)); } char * xcharalloc (size_t n) { return XNMALLOC (n, char); } /* Change the size of an allocated block of memory P to S bytes, with error checking. */ void * xrealloc (void *p, size_t s) { void *r = realloc (p, s); if (!r && (!p || s)) xalloc_die (); return r; } void * xirealloc (void *p, idx_t s) { return nonnull (irealloc (p, s)); } /* Change the size of an allocated block of memory P to an array of N objects each of S bytes, with error checking. */ void * xreallocarray (void *p, size_t n, size_t s) { void *r = reallocarray (p, n, s); if (!r && (!p || (n && s))) xalloc_die (); return r; } void * xireallocarray (void *p, idx_t n, idx_t s) { return nonnull (ireallocarray (p, n, s)); } /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. */ void * xnmalloc (size_t n, size_t s) { return xreallocarray (NULL, n, s); } void * xinmalloc (idx_t n, idx_t s) { return xireallocarray (NULL, n, s); } /* If P is null, allocate a block of at least *PS bytes; otherwise, reallocate P so that it contains more than *PS bytes. *PS must be nonzero unless P is null. Set *PS to the new block's size, and return the pointer to the new block. *PS is never set to zero, and the returned pointer is never null. */ void * x2realloc (void *p, size_t *ps) { return x2nrealloc (p, ps, 1); } /* If P is null, allocate a block of at least *PN such objects; otherwise, reallocate P so that it contains more than *PN objects each of S bytes. S must be nonzero. Set *PN to the new number of objects, and return the pointer to the new block. *PN is never set to zero, and the returned pointer is never null. Repeated reallocations are guaranteed to make progress, either by allocating an initial block with a nonzero size, or by allocating a larger block. In the following implementation, nonzero sizes are increased by a factor of approximately 1.5 so that repeated reallocations have O(N) overall cost rather than O(N**2) cost, but the specification for this function does not guarantee that rate. Here is an example of use: int *p = NULL; size_t used = 0; size_t allocated = 0; void append_int (int value) { if (used == allocated) p = x2nrealloc (p, &allocated, sizeof *p); p[used++] = value; } This causes x2nrealloc to allocate a block of some nonzero size the first time it is called. To have finer-grained control over the initial size, set *PN to a nonzero value before calling this function with P == NULL. For example: int *p = NULL; size_t used = 0; size_t allocated = 0; size_t allocated1 = 1000; void append_int (int value) { if (used == allocated) { p = x2nrealloc (p, &allocated1, sizeof *p); allocated = allocated1; } p[used++] = value; } */ void * x2nrealloc (void *p, size_t *pn, size_t s) { size_t n = *pn; if (! p) { if (! n) { /* The approximate size to use for initial small allocation requests, when the invoking code specifies an old size of zero. This is the largest "small" request for the GNU C library malloc. */ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; n = DEFAULT_MXFAST / s; n += !n; } } else { /* Set N = floor (1.5 * N) + 1 to make progress even if N == 0. */ if (ckd_add (&n, n, (n >> 1) + 1)) xalloc_die (); } p = xreallocarray (p, n, s); *pn = n; return p; } /* Grow PA, which points to an array of *PN items, and return the location of the reallocated array, updating *PN to reflect its new size. The new array will contain at least N_INCR_MIN more items, but will not contain more than N_MAX items total. S is the size of each item, in bytes. S and N_INCR_MIN must be positive. *PN must be nonnegative. If N_MAX is -1, it is treated as if it were infinity. If PA is null, then allocate a new array instead of reallocating the old one. Thus, to grow an array A without saving its old contents, do { free (A); A = xpalloc (NULL, &AITEMS, ...); }. */ void * xpalloc (void *pa, idx_t *pn, idx_t n_incr_min, ptrdiff_t n_max, idx_t s) { idx_t n0 = *pn; /* The approximate size to use for initial small allocation requests. This is the largest "small" request for the GNU C library malloc. */ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; /* If the array is tiny, grow it to about (but no greater than) DEFAULT_MXFAST bytes. Otherwise, grow it by about 50%. Adjust the growth according to three constraints: N_INCR_MIN, N_MAX, and what the C language can represent safely. */ idx_t n; if (ckd_add (&n, n0, n0 >> 1)) n = IDX_MAX; if (0 <= n_max && n_max < n) n = n_max; /* NBYTES is of a type suitable for holding the count of bytes in an object. This is typically idx_t, but it should be size_t on (theoretical?) platforms where SIZE_MAX < IDX_MAX so xpalloc does not pass values greater than SIZE_MAX to xrealloc. */ #if IDX_MAX <= SIZE_MAX idx_t nbytes; #else size_t nbytes; #endif idx_t adjusted_nbytes = (ckd_mul (&nbytes, n, s) ? MIN (IDX_MAX, SIZE_MAX) : nbytes < DEFAULT_MXFAST ? DEFAULT_MXFAST : 0); if (adjusted_nbytes) { n = adjusted_nbytes / s; nbytes = adjusted_nbytes - adjusted_nbytes % s; } if (! pa) *pn = 0; if (n - n0 < n_incr_min && (ckd_add (&n, n0, n_incr_min) || (0 <= n_max && n_max < n) || ckd_mul (&nbytes, n, s))) xalloc_die (); pa = xrealloc (pa, nbytes); *pn = n; return pa; } /* Allocate S bytes of zeroed memory dynamically, with error checking. There's no need for xnzalloc (N, S), since it would be equivalent to xcalloc (N, S). */ void * xzalloc (size_t s) { return xcalloc (s, 1); } void * xizalloc (idx_t s) { return xicalloc (s, 1); } /* Allocate zeroed memory for N elements of S bytes, with error checking. S must be nonzero. */ void * xcalloc (size_t n, size_t s) { return nonnull (calloc (n, s)); } void * xicalloc (idx_t n, idx_t s) { return nonnull (icalloc (n, s)); } /* Clone an object P of size S, with error checking. There's no need for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any need for an arithmetic overflow check. */ void * xmemdup (void const *p, size_t s) { return memcpy (xmalloc (s), p, s); } void * ximemdup (void const *p, idx_t s) { return memcpy (ximalloc (s), p, s); } /* Clone an object P of size S, with error checking. Append a terminating NUL byte. */ char * ximemdup0 (void const *p, idx_t s) { char *result = ximalloc (s + 1); result[s] = 0; return memcpy (result, p, s); } /* Clone STRING. */ char * xstrdup (char const *string) { return xmemdup (string, strlen (string) + 1); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/xalloc-die.c�������������������������������������������������������0000644�0001750�0001750�00000002435�14557510511�015025� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report a memory allocation failure and exit. Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "xalloc.h" #include <stdlib.h> #include <error.h> #include "exitfail.h" #include "gettext.h" #define _(msgid) gettext (msgid) void xalloc_die (void) { error (exit_failure, 0, "%s", _("memory exhausted")); /* _Noreturn cannot be given to error, since it may return if its first argument is 0. To help compilers understand the xalloc_die does not return, call abort. Also, the abort is a safety feature if exit_failure is 0 (which shouldn't happen). */ abort (); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/calloc.c�����������������������������������������������������������0000644�0001750�0001750�00000002672�14557510507�014251� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* calloc() function that is glibc compatible. This wrapper function is required at least on Tru64 UNIX 5.1 and mingw. Copyright (C) 2004-2007, 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #include "xalloc-oversized.h" /* Call the system's calloc below. */ #undef calloc /* Allocate and zero-fill an NxS-byte block of memory from the heap, even if N or S is zero. */ void * rpl_calloc (size_t n, size_t s) { if (n == 0 || s == 0) n = s = 1; if (xalloc_oversized (n, s)) { errno = ENOMEM; return NULL; } void *result = calloc (n, s); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ����������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/strerror_r.c�������������������������������������������������������0000644�0001750�0001750�00000032501�14557510507�015211� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror_r.c --- POSIX compatible system error routine Copyright (C) 2010-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2010. */ #include <config.h> /* Enable declaration of sys_nerr and sys_errlist in <errno.h> on NetBSD. */ #define _NETBSD_SOURCE 1 /* Specification. */ #include <string.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #if !HAVE_SNPRINTF # include <stdarg.h> #endif #include "strerror-override.h" #if STRERROR_R_CHAR_P # if HAVE___XPG_STRERROR_R _GL_EXTERN_C int __xpg_strerror_r (int errnum, char *buf, size_t buflen); # endif #elif HAVE_DECL_STRERROR_R /* The system's strerror_r function's API is OK, except that its third argument is 'int', not 'size_t', or its return type is wrong. */ # include <limits.h> #else /* Use the system's strerror(). Exclude glibc and cygwin because the system strerror_r has the wrong return type, and cygwin 1.7.9 strerror_r clobbers strerror. */ # undef strerror # if defined __NetBSD__ || defined __hpux || (defined _WIN32 && !defined __CYGWIN__) || defined __sgi || (defined __sun && !defined _LP64) || defined __CYGWIN__ /* No locking needed. */ /* Get catgets internationalization functions. */ # if HAVE_CATGETS # include <nl_types.h> # endif #ifdef __cplusplus extern "C" { #endif /* Get sys_nerr, sys_errlist on HP-UX (otherwise only declared in C++ mode). Get sys_nerr, sys_errlist on IRIX (otherwise only declared with _SGIAPI). */ # if defined __hpux || defined __sgi extern int sys_nerr; extern char *sys_errlist[]; # endif /* Get sys_nerr on Solaris. */ # if defined __sun && !defined _LP64 extern int sys_nerr; # endif #ifdef __cplusplus } #endif # else # include "glthread/lock.h" /* This lock protects the buffer returned by strerror(). We assume that no other uses of strerror() exist in the program. */ gl_lock_define_initialized(static, strerror_lock) # endif #endif /* On MSVC, there is no snprintf() function, just a _snprintf(). It is of lower quality, but sufficient for the simple use here. We only have to make sure to NUL terminate the result (_snprintf does not NUL terminate, like strncpy). */ #if !HAVE_SNPRINTF static int local_snprintf (char *buf, size_t buflen, const char *format, ...) { va_list args; int result; va_start (args, format); result = _vsnprintf (buf, buflen, format, args); va_end (args); if (buflen > 0 && (result < 0 || result >= buflen)) buf[buflen - 1] = '\0'; return result; } # undef snprintf # define snprintf local_snprintf #endif /* Copy as much of MSG into BUF as possible, without corrupting errno. Return 0 if MSG fit in BUFLEN, otherwise return ERANGE. */ static int safe_copy (char *buf, size_t buflen, const char *msg) { size_t len = strlen (msg); size_t moved = len < buflen ? len : buflen - 1; /* Although POSIX lets memmove corrupt errno, we don't know of any implementation where this is a real problem. */ memmove (buf, msg, moved); buf[moved] = '\0'; return len < buflen ? 0 : ERANGE; } int strerror_r (int errnum, char *buf, size_t buflen) #undef strerror_r { /* Filter this out now, so that rest of this replacement knows that there is room for a non-empty message and trailing NUL. */ if (buflen <= 1) { if (buflen) *buf = '\0'; return ERANGE; } *buf = '\0'; /* Check for gnulib overrides. */ { char const *msg = strerror_override (errnum); if (msg) return safe_copy (buf, buflen, msg); } { int ret; int saved_errno = errno; #if STRERROR_R_CHAR_P { ret = 0; # if HAVE___XPG_STRERROR_R ret = __xpg_strerror_r (errnum, buf, buflen); /* ret is 0 upon success, or EINVAL or ERANGE upon failure. */ # endif if (!*buf) { /* glibc 2.13 ... 2.34 (at least) don't touch buf upon failure. Therefore we have to fall back to strerror_r which, for valid errnum, returns a thread-safe untruncated string. For invalid errnum, though, it returns a truncated string, which does not allow us to determine whether to return ERANGE or 0. Thus we need to pass a sufficiently large buffer. */ char stackbuf[80]; char *errstring = strerror_r (errnum, stackbuf, sizeof stackbuf); ret = errstring ? safe_copy (buf, buflen, errstring) : errno; } } #elif HAVE_DECL_STRERROR_R if (buflen > INT_MAX) buflen = INT_MAX; # ifdef __hpux /* On HP-UX 11.31, strerror_r always fails when buflen < 80; it also fails to change buf on EINVAL. */ { char stackbuf[80]; if (buflen < sizeof stackbuf) { ret = strerror_r (errnum, stackbuf, sizeof stackbuf); if (ret == 0) ret = safe_copy (buf, buflen, stackbuf); } else ret = strerror_r (errnum, buf, buflen); } # else ret = strerror_r (errnum, buf, buflen); /* Some old implementations may return (-1, EINVAL) instead of EINVAL. But on Haiku, valid error numbers are negative. */ # if !defined __HAIKU__ if (ret < 0) ret = errno; # endif # endif # if defined _AIX || defined __HAIKU__ /* AIX and Haiku return 0 rather than ERANGE when truncating strings; try again until we are sure we got the entire string. */ if (!ret && strlen (buf) == buflen - 1) { char stackbuf[STACKBUF_LEN]; size_t len; strerror_r (errnum, stackbuf, sizeof stackbuf); len = strlen (stackbuf); /* STACKBUF_LEN should have been large enough. */ if (len + 1 == sizeof stackbuf) abort (); if (buflen <= len) ret = ERANGE; } # else /* Solaris 10 does not populate buf on ERANGE. OpenBSD 4.7 truncates early on ERANGE rather than return a partial integer. We prefer the maximal string. We set buf[0] earlier, and we know of no implementation that modifies buf to be an unterminated string, so this strlen should be portable in practice (rather than pulling in a safer strnlen). */ if (ret == ERANGE && strlen (buf) < buflen - 1) { char stackbuf[STACKBUF_LEN]; /* STACKBUF_LEN should have been large enough. */ if (strerror_r (errnum, stackbuf, sizeof stackbuf) == ERANGE) abort (); safe_copy (buf, buflen, stackbuf); } # endif #else /* strerror_r is not declared. */ /* Try to do what strerror (errnum) does, but without clobbering the buffer used by strerror(). */ # if defined __NetBSD__ || defined __hpux || (defined _WIN32 && !defined __CYGWIN__) || defined __CYGWIN__ /* NetBSD, HP-UX, native Windows, Cygwin */ /* NetBSD: sys_nerr, sys_errlist are declared through _NETBSD_SOURCE and <errno.h> above. HP-UX: sys_nerr, sys_errlist are declared explicitly above. native Windows: sys_nerr, sys_errlist are declared in <stdlib.h>. Cygwin: sys_nerr, sys_errlist are declared in <errno.h>. */ if (errnum >= 0 && errnum < sys_nerr) { # if HAVE_CATGETS && (defined __NetBSD__ || defined __hpux) # if defined __NetBSD__ nl_catd catd = catopen ("libc", NL_CAT_LOCALE); const char *errmsg = (catd != (nl_catd)-1 ? catgets (catd, 1, errnum, sys_errlist[errnum]) : sys_errlist[errnum]); # endif # if defined __hpux nl_catd catd = catopen ("perror", NL_CAT_LOCALE); const char *errmsg = (catd != (nl_catd)-1 ? catgets (catd, 1, 1 + errnum, sys_errlist[errnum]) : sys_errlist[errnum]); # endif # else const char *errmsg = sys_errlist[errnum]; # endif if (errmsg == NULL || *errmsg == '\0') ret = EINVAL; else ret = safe_copy (buf, buflen, errmsg); # if HAVE_CATGETS && (defined __NetBSD__ || defined __hpux) if (catd != (nl_catd)-1) catclose (catd); # endif } else ret = EINVAL; # elif defined __sgi || (defined __sun && !defined _LP64) /* IRIX, Solaris <= 9 32-bit */ /* For a valid error number, the system's strerror() function returns a pointer to a not copied string, not to a buffer. */ if (errnum >= 0 && errnum < sys_nerr) { char *errmsg = strerror (errnum); if (errmsg == NULL || *errmsg == '\0') ret = EINVAL; else ret = safe_copy (buf, buflen, errmsg); } else ret = EINVAL; # else gl_lock_lock (strerror_lock); { char *errmsg = strerror (errnum); /* For invalid error numbers, strerror() on - IRIX 6.5 returns NULL, - HP-UX 11 returns an empty string. */ if (errmsg == NULL || *errmsg == '\0') ret = EINVAL; else ret = safe_copy (buf, buflen, errmsg); } gl_lock_unlock (strerror_lock); # endif #endif #if defined _WIN32 && !defined __CYGWIN__ /* MSVC 14 defines names for many error codes in the range 100..140, but _sys_errlist contains strings only for the error codes < _sys_nerr = 43. */ if (ret == EINVAL) { const char *errmsg; switch (errnum) { case 100 /* EADDRINUSE */: errmsg = "Address already in use"; break; case 101 /* EADDRNOTAVAIL */: errmsg = "Cannot assign requested address"; break; case 102 /* EAFNOSUPPORT */: errmsg = "Address family not supported by protocol"; break; case 103 /* EALREADY */: errmsg = "Operation already in progress"; break; case 105 /* ECANCELED */: errmsg = "Operation canceled"; break; case 106 /* ECONNABORTED */: errmsg = "Software caused connection abort"; break; case 107 /* ECONNREFUSED */: errmsg = "Connection refused"; break; case 108 /* ECONNRESET */: errmsg = "Connection reset by peer"; break; case 109 /* EDESTADDRREQ */: errmsg = "Destination address required"; break; case 110 /* EHOSTUNREACH */: errmsg = "No route to host"; break; case 112 /* EINPROGRESS */: errmsg = "Operation now in progress"; break; case 113 /* EISCONN */: errmsg = "Transport endpoint is already connected"; break; case 114 /* ELOOP */: errmsg = "Too many levels of symbolic links"; break; case 115 /* EMSGSIZE */: errmsg = "Message too long"; break; case 116 /* ENETDOWN */: errmsg = "Network is down"; break; case 117 /* ENETRESET */: errmsg = "Network dropped connection on reset"; break; case 118 /* ENETUNREACH */: errmsg = "Network is unreachable"; break; case 119 /* ENOBUFS */: errmsg = "No buffer space available"; break; case 123 /* ENOPROTOOPT */: errmsg = "Protocol not available"; break; case 126 /* ENOTCONN */: errmsg = "Transport endpoint is not connected"; break; case 128 /* ENOTSOCK */: errmsg = "Socket operation on non-socket"; break; case 129 /* ENOTSUP */: errmsg = "Not supported"; break; case 130 /* EOPNOTSUPP */: errmsg = "Operation not supported"; break; case 132 /* EOVERFLOW */: errmsg = "Value too large for defined data type"; break; case 133 /* EOWNERDEAD */: errmsg = "Owner died"; break; case 134 /* EPROTO */: errmsg = "Protocol error"; break; case 135 /* EPROTONOSUPPORT */: errmsg = "Protocol not supported"; break; case 136 /* EPROTOTYPE */: errmsg = "Protocol wrong type for socket"; break; case 138 /* ETIMEDOUT */: errmsg = "Connection timed out"; break; case 140 /* EWOULDBLOCK */: errmsg = "Operation would block"; break; default: errmsg = NULL; break; } if (errmsg != NULL) ret = safe_copy (buf, buflen, errmsg); } #endif if (ret == EINVAL && !*buf) { #if defined __HAIKU__ /* For consistency with perror(). */ snprintf (buf, buflen, "Unknown Application Error (%d)", errnum); #else snprintf (buf, buflen, "Unknown error %d", errnum); #endif } errno = saved_errno; return ret; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/locale.c�����������������������������������������������������������0000644�0001750�0001750�00000005051�14557510507�014245� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program that prints the names of the categories of the current locale. Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> /* We want to use the system's setlocale() function here, not the gnulib override. */ #undef setlocale /* Specification: <https://pubs.opengroup.org/onlinepubs/9699919799/utilities/locale.html> Here we implement only the invocation without any command-line options. */ static const char * defaulted_getenv (const char *variable) { const char *value = getenv (variable); return (value != NULL ? value : ""); } static void print_category (int category, const char *variable) { const char *value = defaulted_getenv (variable); if (value[0] != '\0' && defaulted_getenv ("LC_ALL")[0] == '\0') /* The variable is set in the environment and not overridden by LC_ALL. */ printf ("%s=%s\n", variable, value); else printf ("%s=\"%s\"\n", variable, setlocale (category, NULL)); } int main (void) { setlocale (LC_ALL, ""); printf ("LANG=%s\n", defaulted_getenv ("LANG")); print_category (LC_CTYPE, "LC_CTYPE"); print_category (LC_NUMERIC, "LC_NUMERIC"); print_category (LC_TIME, "LC_TIME"); print_category (LC_COLLATE, "LC_COLLATE"); print_category (LC_MONETARY, "LC_MONETARY"); print_category (LC_MESSAGES, "LC_MESSAGES"); #ifdef LC_PAPER print_category (LC_PAPER, "LC_PAPER"); #endif #ifdef LC_NAME print_category (LC_NAME, "LC_NAME"); #endif #ifdef LC_ADDRESS print_category (LC_ADDRESS, "LC_ADDRESS"); #endif #ifdef LC_TELEPHONE print_category (LC_TELEPHONE, "LC_TELEPHONE"); #endif #ifdef LC_MEASUREMENT print_category (LC_MEASUREMENT, "LC_MEASUREMENT"); #endif #ifdef LC_IDENTIFICATION print_category (LC_IDENTIFICATION, "LC_IDENTIFICATION"); #endif printf ("LC_ALL=%s\n", defaulted_getenv ("LC_ALL")); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-accept.c������������������������������������������������������0000644�0001750�0001750�00000002773�14557510507�015232� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test accepting a connection to a server socket. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (accept, int, (int, struct sockaddr *, socklen_t *)); #include <errno.h> #include <netinet/in.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); errno = 0; ASSERT (accept (-1, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } { struct sockaddr_in addr; socklen_t addrlen = sizeof (addr); close (99); errno = 0; ASSERT (accept (99, (struct sockaddr *) &addr, &addrlen) == -1); ASSERT (errno == EBADF); } return 0; } �����gnuastro-0.22/bootstrapped/tests/test-access.c������������������������������������������������������0000644�0001750�0001750�00000002041�14557510507�015220� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of access. Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (access, int, (const char *, int)); #include <errno.h> #include <fcntl.h> #include <sys/stat.h> #include "root-uid.h" #include "macros.h" #define BASE "test-access.t" #include "test-access.h" int main () { test_access (access); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-alignasof.c���������������������������������������������������0000644�0001750�0001750�00000006360�14557510507�015732� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of alignasof module. Copyright 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert, inspired by Bruno Haible's test-alignof.c. */ #include <config.h> #include <stddef.h> #include <stdint.h> #include "macros.h" typedef long double longdouble; typedef struct { char a[1]; } struct1; typedef struct { char a[2]; } struct2; typedef struct { char a[3]; } struct3; typedef struct { char a[4]; } struct4; #if (202311 <= __STDC_VERSION__ || __alignas_is_defined \ || 201103 <= __cplusplus) /* mingw can go up only to 8. 8 is all that GNU Emacs needs, so let's limit the test to 8 for now. */ # define TEST_ALIGNMENT 8 #else # undef alignas # define alignas(alignment) # define TEST_ALIGNMENT 1 #endif #define CHECK_STATIC(type) \ typedef struct { char slot1; type slot2; } type##_helper; \ static_assert (alignof (type) == offsetof (type##_helper, slot2)); \ const int type##_alignment = alignof (type); \ type alignas (TEST_ALIGNMENT) static_##type##_alignas #define CHECK_ALIGNED(var) ASSERT ((uintptr_t) &(var) % TEST_ALIGNMENT == 0) CHECK_STATIC (char); CHECK_STATIC (short); CHECK_STATIC (int); CHECK_STATIC (long); #ifdef INT64_MAX CHECK_STATIC (int64_t); #endif CHECK_STATIC (float); CHECK_STATIC (double); /* CHECK_STATIC (longdouble); */ CHECK_STATIC (struct1); CHECK_STATIC (struct2); CHECK_STATIC (struct3); CHECK_STATIC (struct4); int main () { #if defined __SUNPRO_C && __SUNPRO_C < 0x5150 /* Avoid a test failure due to Sun Studio Developer Bug Report #2125432. */ fputs ("Skipping test: known Sun C compiler bug\n", stderr); return 77; #elif defined __HP_cc && __ia64 /* Avoid a test failure due to HP-UX Itanium cc bug; see: https://lists.gnu.org/r/bug-gnulib/2017-03/msg00078.html */ fputs ("Skipping test: known HP-UX Itanium cc compiler bug\n", stderr); return 77; #elif defined __clang__ && defined __ibmxl__ /* Avoid a test failure with IBM xlc 16.1. It ignores alignas (8), _Alignas (8), and __attribute__ ((__aligned__ (8))). */ fputs ("Skipping test: known AIX XL C compiler deficiency\n", stderr); return 77; #else CHECK_ALIGNED (static_char_alignas); CHECK_ALIGNED (static_short_alignas); CHECK_ALIGNED (static_int_alignas); CHECK_ALIGNED (static_long_alignas); # ifdef INT64_MAX CHECK_ALIGNED (static_int64_t_alignas); # endif CHECK_ALIGNED (static_float_alignas); CHECK_ALIGNED (static_double_alignas); /* CHECK_ALIGNED (static_longdouble_alignas); */ CHECK_ALIGNED (static_struct1_alignas); CHECK_ALIGNED (static_struct2_alignas); CHECK_ALIGNED (static_struct3_alignas); CHECK_ALIGNED (static_struct4_alignas); return 0; #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-alloca-opt.c��������������������������������������������������0000644�0001750�0001750�00000002774�14557510507�016027� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of optional automatic memory allocation. Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <alloca.h> #if HAVE_ALLOCA static void do_allocation (int n) { void *volatile ptr = alloca (n); (void) ptr; } void (*func) (int) = do_allocation; #endif int main () { #if HAVE_ALLOCA int i; /* Repeat a lot of times, to make sure there's no memory leak. */ for (i = 0; i < 100000; i++) { /* Try various values. n = 0 gave a crash on Alpha with gcc-2.5.8. Some versions of Mac OS X have a stack size limit of 512 KB. */ func (34); func (134); func (399); func (510823); func (129321); func (0); func (4070); func (4095); func (1); func (16582); } #endif return 0; } ����gnuastro-0.22/bootstrapped/tests/test-argp.c��������������������������������������������������������0000644�0001750�0001750�00000024501�14557510507�014715� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test suite for argp. Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. This file is part of the GNUlib Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "argp.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #if HAVE_STRINGS_H # include <strings.h> #endif #include "macros.h" struct test_args { int test; int verbose; char *file; int read; char *hidden; int opt; char *optional; int optional_set; int group_2_1_option; int group_1_1_option; }; static struct argp_option group1_option[] = { { NULL, 0, NULL, 0, "Option Group 1", 0 }, { "verbose", 'v', NULL, 0, "Simple option without arguments", 1 }, { "file", 'f', "FILE", 0, "Option with a mandatory argument", 1 }, { "input", 0, NULL, OPTION_ALIAS, NULL, 1 }, { "read", 'r', NULL, OPTION_ALIAS, NULL, 1 }, { "hidden", 'H', "FILE", OPTION_HIDDEN, "Hidden option", 1 }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t group1_parser (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; switch (key) { case 'v': args->verbose++; break; case 'r': args->read = 1; FALLTHROUGH; case 'f': args->file = arg; break; case 'H': args->hidden = arg; break; default: return ARGP_ERR_UNKNOWN; } return 0; } struct argp group1_argp = { group1_option, group1_parser }; struct argp_child group1_child = { &group1_argp, 0, "", 1 }; static struct argp_option group1_1_option[] = { { NULL, 0, NULL, 0, "Option Group 1.1", 0 }, { "cantiga", 'C', NULL, 0, "create a cantiga" }, { "sonet", 'S', NULL, 0, "create a sonet" }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t group1_1_parser (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; switch (key) { case 'C': case 'S': args->group_1_1_option = key; break; default: return ARGP_ERR_UNKNOWN; } return 0; } struct argp group1_1_argp = { group1_1_option, group1_1_parser }; struct argp_child group1_1_child = { &group1_1_argp, 0, "", 2 }; static struct argp_option group2_option[] = { { NULL, 0, NULL, 0, "Option Group 2", 0 }, { "option", 'O', NULL, 0, "An option", 1 }, { "optional", 'o', "ARG", OPTION_ARG_OPTIONAL, "Option with an optional argument. ARG is one of the following:", 2 }, { "one", 0, NULL, OPTION_DOC | OPTION_NO_TRANS, "one unit", 3 }, { "two", 0, NULL, OPTION_DOC | OPTION_NO_TRANS, "two units", 3 }, { "many", 0, NULL, OPTION_DOC | OPTION_NO_TRANS, "many units", 3 }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t group2_parser (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; switch (key) { case 'O': args->opt = 1; break; case 'o': args->optional_set = 1; args->optional = arg; break; default: return ARGP_ERR_UNKNOWN; } return 0; } struct argp group2_argp = { group2_option, group2_parser }; struct argp_child group2_child = { &group2_argp, 0, "", 2 }; static struct argp_option group2_1_option[] = { { NULL, 0, NULL, 0, "Option Group 2.1", 0 }, { "poem", 'p', NULL, 0, "create a poem" }, { "limerick", 'l', NULL, 0, "create a limerick" }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t group2_1_parser (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; switch (key) { case 'p': case 'e': args->group_2_1_option = key; break; default: return ARGP_ERR_UNKNOWN; } return 0; } struct argp group2_1_argp = { group2_1_option, group2_1_parser }; struct argp_child group2_1_child = { &group2_1_argp, 0, "", 2 }; static struct argp_option main_options[] = { { NULL, 0, NULL, 0, "Main options", 0 }, { "test", 't', NULL, 0, NULL, 1 }, { NULL, 0, NULL, 0, NULL, 0 } }; static error_t parse_opt (int key, char *arg, struct argp_state *state) { struct test_args *args = state->input; int i; switch (key) { case ARGP_KEY_INIT: for (i = 0; state->root_argp->children[i].argp; i++) state->child_inputs[i] = args; break; case 't': args->test = 1; break; default: return ARGP_ERR_UNKNOWN; } return 0; } const char *argp_program_version = "test_argp (" PACKAGE_NAME ") " VERSION; const char *argp_program_bug_address = "<" PACKAGE_BUGREPORT ">"; static char doc[] = "documentation string"; struct argp test_argp = { main_options, parse_opt, "ARGS...", doc, NULL, NULL, NULL }; #define NARGS(a) (sizeof(a) / sizeof((a)[0]) - 1) #define ARGV0 "test-argp" #define init_args(a) memset (&(a), 0, sizeof (a)); #define INIT_TEST_COMMON(n) \ int argc = NARGS (argv); \ struct test_args test_args; \ init_args (test_args); \ test_number = n; #define INIT_TEST1(n, arg1) \ char *argv[] = { ARGV0, arg1, NULL }; \ INIT_TEST_COMMON (n) #define INIT_TEST2(n, arg1, arg2) \ char *argv[] = { ARGV0, arg1, arg2, NULL }; \ INIT_TEST_COMMON (n) #define INIT_TEST3(n, arg1, arg2, arg3) \ char *argv[] = { ARGV0, arg1, arg2, arg3, NULL }; \ INIT_TEST_COMMON (n) int test_number; unsigned failure_count = 0; static void fail (const char *msg) { fprintf (stderr, "Test %d: %s\n", test_number, msg); failure_count++; } static void test1 (struct argp *argp) { INIT_TEST1 (1, "--test"); if (argp_parse (argp, argc, argv, 0, NULL, &test_args)) fail ("argp_parse failed"); else if (test_args.test != 1) fail ("option not processed"); } static void test2 (struct argp *argp) { INIT_TEST1 (2, "-t"); if (argp_parse (argp, argc, argv, 0, NULL, &test_args)) fail ("argp_parse failed"); else if (test_args.test != 1) fail ("option not processed"); } static void test_file (struct argp *argp, int argc, char **argv, struct test_args *args) { if (argp_parse (argp, argc, argv, 0, NULL, args)) fail ("argp_parse failed"); else if (!args->file) fail ("option not processed"); else if (strcmp (args->file, "FILE")) fail ("option processed incorrectly"); } static void test3 (struct argp *argp) { INIT_TEST1 (3, "--file=FILE"); test_file (argp, argc, argv, &test_args); } static void test4 (struct argp *argp) { INIT_TEST2 (4, "--file", "FILE"); test_file (argp, argc, argv, &test_args); } static void test5 (struct argp *argp) { INIT_TEST1 (5, "--input=FILE"); test_file (argp, argc, argv, &test_args); } static void test6 (struct argp *argp) { INIT_TEST2 (6, "--input", "FILE"); test_file (argp, argc, argv, &test_args); } static void test_optional (struct argp *argp, int argc, char **argv, struct test_args *args, const char *val, const char *a) { int index; if (argp_parse (argp, argc, argv, 0, &index, args)) fail ("argp_parse failed"); else if (!args->optional_set) fail ("option not processed"); if (!val) { if (args->optional) fail ("option processed incorrectly"); } else if (strcmp (args->optional, val)) fail ("option processed incorrectly"); if (a) { if (index == argc) fail ("expected command line argument not found"); else if (strcmp (argv[index], a)) fail ("expected command line argument does not match"); } } static void test7 (struct argp *argp) { INIT_TEST1 (7, "-oARG"); test_optional (argp, argc, argv, &test_args, "ARG", NULL); } static void test8 (struct argp *argp) { INIT_TEST2 (8, "-o", "ARG"); test_optional (argp, argc, argv, &test_args, NULL, "ARG"); } static void test9 (struct argp *argp) { INIT_TEST1 (9, "--optional=ARG"); test_optional (argp, argc, argv, &test_args, "ARG", NULL); } static void test10 (struct argp *argp) { INIT_TEST2 (10, "--optional", "ARG"); test_optional (argp, argc, argv, &test_args, NULL, "ARG"); } static void test11 (struct argp *argp) { INIT_TEST1 (11, "--optiona=ARG"); test_optional (argp, argc, argv, &test_args, "ARG", NULL); } static void test12 (struct argp *argp) { INIT_TEST3 (12, "--option", "--optional=OPT", "FILE"); test_optional (argp, argc, argv, &test_args, "OPT", "FILE"); } static void test13 (struct argp *argp) { INIT_TEST1 (1, "--cantiga"); if (argp_parse (argp, argc, argv, 0, NULL, &test_args)) fail ("argp_parse failed"); else if (test_args.group_1_1_option != 'C') fail ("option not processed"); } static void test14 (struct argp *argp) { INIT_TEST1 (1, "--limerick"); if (argp_parse (argp, argc, argv, 0, NULL, &test_args)) fail ("argp_parse failed"); else if (test_args.group_2_1_option != 'l') fail ("option not processed"); } static void test15 (struct argp *argp) { INIT_TEST2 (1, "-r", "FILE"); test_file (argp, argc, argv, &test_args); if (!test_args.read) fail ("short alias not recognized properly"); } typedef void (*test_fp) (struct argp *argp); static test_fp test_fun[] = { test1, test2, test3, test4, test5, test6, test7, test8, test9, test10, test11, test12, test13, test14, test15, NULL }; int main (int argc, char **argv) { struct argp_child argp_children[3], group1_children[2], group2_children[2]; test_fp *fun; group1_children[0] = group1_1_child; group1_children[1].argp = NULL; group1_argp.children = group1_children; group2_children[0] = group2_1_child; group2_children[1].argp = NULL; group2_argp.children = group2_children; argp_children[0] = group1_child; argp_children[1] = group2_child; argp_children[2].argp = NULL; test_argp.children = argp_children; if (argc > 0) { struct test_args test_args; init_args (test_args); return argp_parse (&test_argp, argc, argv, 0, NULL, &test_args); } for (fun = test_fun; *fun; fun++) (*fun) (&test_argp); if (failure_count) return 1; return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-arpa_inet.c���������������������������������������������������0000644�0001750�0001750�00000001564�14557510507�015732� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <arpa/inet.h> substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <arpa/inet.h> int main (void) { return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-assert.c������������������������������������������������������0000644�0001750�0001750�00000002740�14557510507�015266� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test assert.h and static_assert. Copyright 2022-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #define STATIC_ASSERT_TESTS \ static_assert (2 + 2 == 4, "arithmetic does not work"); \ static_assert (2 + 2 == 4); \ static_assert (sizeof (char) == 1, "sizeof does not work"); \ static_assert (sizeof (char) == 1) STATIC_ASSERT_TESTS; static char const * assert (char const *p, int i) { return p + i; } static char const * f (char const *p) { return assert (p, 0); } #include <assert.h> STATIC_ASSERT_TESTS; static int g (void) { assert (f ("this should work")); return 0; } #define NDEBUG 1 #include <assert.h> STATIC_ASSERT_TESTS; static int h (void) { assert (f ("this should work")); return 0; } int main (void) { STATIC_ASSERT_TESTS; f (""); g (); h (); return 0; } ��������������������������������gnuastro-0.22/bootstrapped/tests/test-binary-io.c���������������������������������������������������0000644�0001750�0001750�00000003067�14557510507�015661� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of binary mode I/O. Copyright (C) 2005, 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #include <config.h> #include "binary-io.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "macros.h" int main (_GL_UNUSED int argc, char *argv[]) { /* Test the O_BINARY macro. */ { int fd = open ("t-bin-out0.tmp", O_CREAT | O_TRUNC | O_RDWR | O_BINARY, 0600); if (write (fd, "Hello\n", 6) < 0) exit (1); close (fd); } { struct stat statbuf; if (stat ("t-bin-out0.tmp", &statbuf) < 0) exit (1); ASSERT (statbuf.st_size == 6); } switch (argv[1][0]) { case '1': /* Test the set_binary_mode() function. */ set_binary_mode (1, O_BINARY); fputs ("Hello\n", stdout); break; default: break; } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-bind.c��������������������������������������������������������0000644�0001750�0001750�00000003105�14557510507�014675� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test binding a server socket to a port. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (bind, int, (int, const struct sockaddr *, socklen_t)); #include <errno.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { struct sockaddr_in addr; addr.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &addr.sin_addr); addr.sin_port = htons (80); { errno = 0; ASSERT (bind (-1, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (bind (99, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-btoc32.c������������������������������������������������������0000644�0001750�0001750�00000005725�14557510507�015067� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of unibyte character to 32-bit wide character. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (btoc32, wint_t, (int)); #include <locale.h> #include <stdio.h> #include <wchar.h> #include "macros.h" int main (int argc, char *argv[]) { int c; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ASSERT (btoc32 (EOF) == WEOF); #ifdef __ANDROID__ /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the "C" locale. Furthermore, when you attempt to set the "C" or "POSIX" locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, that is, effectively the "C.UTF-8" locale. */ if (argc > 1 && strcmp (argv[1], "1") == 0 && MB_CUR_MAX > 1) argv[1] = "3"; #endif if (argc > 1) switch (argv[1][0]) { case '1': /* C or POSIX locale. */ for (c = 0; c < 0x100; c++) if (c != 0) { /* We are testing all nonnull bytes. */ wint_t wc = btoc32 (c); /* POSIX:2018 says regarding btowc: "In the POSIX locale, btowc() shall not return WEOF if c has a value in the range 0 to 255 inclusive." It is reasonable to expect btoc32 to behave in the same way. */ if (c < 0x80) /* c is an ASCII character. */ ASSERT (wc == c); else /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF. */ ASSERT (wc == c || wc == 0xDF00 + c); } return 0; case '2': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ for (c = 0; c < 0x80; c++) ASSERT (btoc32 (c) == c); for (c = 0xA0; c < 0x100; c++) ASSERT (btoc32 (c) != WEOF); return 0; case '3': /* Locale encoding is UTF-8. */ for (c = 0; c < 0x80; c++) ASSERT (btoc32 (c) == c); for (c = 0x80; c < 0x100; c++) ASSERT (btoc32 (c) == WEOF); return 0; } return 1; } �������������������������������������������gnuastro-0.22/bootstrapped/tests/test-btowc.c�������������������������������������������������������0000644�0001750�0001750�00000005504�14557510507�015104� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of unibyte character to wide character. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <wchar.h> #include "signature.h" SIGNATURE_CHECK (btowc, wint_t, (int)); #include <locale.h> #include <stdio.h> #include "macros.h" int main (int argc, char *argv[]) { int c; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ASSERT (btowc (EOF) == WEOF); #ifdef __ANDROID__ /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the "C" locale. Furthermore, when you attempt to set the "C" or "POSIX" locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, that is, effectively the "C.UTF-8" locale. */ if (argc > 1 && strcmp (argv[1], "1") == 0 && MB_CUR_MAX > 1) argv[1] = "3"; #endif if (argc > 1) switch (argv[1][0]) { case '1': /* C or POSIX locale. */ for (c = 0; c < 0x100; c++) if (c != 0) { /* We are testing all nonnull bytes. */ wint_t wc = btowc (c); /* POSIX:2018 says: "In the POSIX locale, btowc() shall not return WEOF if c has a value in the range 0 to 255 inclusive." */ if (c < 0x80) /* c is an ASCII character. */ ASSERT (wc == c); else /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF. */ ASSERT (wc == c || wc == 0xDF00 + c); } return 0; case '2': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ for (c = 0; c < 0x80; c++) ASSERT (btowc (c) == c); for (c = 0xA0; c < 0x100; c++) ASSERT (btowc (c) != WEOF); return 0; case '3': /* Locale encoding is UTF-8. */ for (c = 0; c < 0x80; c++) ASSERT (btowc (c) == c); for (c = 0x80; c < 0x100; c++) ASSERT (btowc (c) == WEOF); return 0; } return 1; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c-ctype.c�����������������������������������������������������0000644�0001750�0001750�00000014644�14557510507�015337� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of character handling in C locale. Copyright (C) 2005, 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #include <config.h> #include "c-ctype.h" #include <ctype.h> #include <limits.h> #include <locale.h> #include "macros.h" static void test_agree_with_C_locale (void) { int c; for (c = 0; c <= UCHAR_MAX; c++) { ASSERT (c_isascii (c) == (isascii (c) != 0)); if (c_isascii (c)) { ASSERT (c_isalnum (c) == (isalnum (c) != 0)); ASSERT (c_isalpha (c) == (isalpha (c) != 0)); ASSERT (c_isblank (c) == (isblank (c) != 0)); ASSERT (c_iscntrl (c) == (iscntrl (c) != 0)); ASSERT (c_isdigit (c) == (isdigit (c) != 0)); ASSERT (c_islower (c) == (islower (c) != 0)); ASSERT (c_isgraph (c) == (isgraph (c) != 0)); ASSERT (c_isprint (c) == (isprint (c) != 0)); ASSERT (c_ispunct (c) == (ispunct (c) != 0)); ASSERT (c_isspace (c) == (isspace (c) != 0)); ASSERT (c_isupper (c) == (isupper (c) != 0)); ASSERT (c_isxdigit (c) == (isxdigit (c) != 0)); ASSERT (c_tolower (c) == tolower (c)); ASSERT (c_toupper (c) == toupper (c)); } } } static void test_all (void) { int c; int n_isascii = 0; for (c = CHAR_MIN; c <= UCHAR_MAX; c++) { if (! (0 <= c && c <= CHAR_MAX)) { ASSERT (! c_isascii (c)); ASSERT (! c_isalnum (c)); ASSERT (! c_isalpha (c)); ASSERT (! c_isblank (c)); ASSERT (! c_iscntrl (c)); ASSERT (! c_isdigit (c)); ASSERT (! c_islower (c)); ASSERT (! c_isgraph (c)); ASSERT (! c_isprint (c)); ASSERT (! c_ispunct (c)); ASSERT (! c_isspace (c)); ASSERT (! c_isupper (c)); ASSERT (! c_isxdigit (c)); ASSERT (c_tolower (c) == c); ASSERT (c_toupper (c) == c); } n_isascii += c_isascii (c); #ifdef C_CTYPE_ASCII ASSERT (c_isascii (c) == (0 <= c && c <= 0x7f)); #endif ASSERT (c_isascii (c) == (c_isprint (c) || c_iscntrl (c))); ASSERT (c_isalnum (c) == (c_isalpha (c) || c_isdigit (c))); ASSERT (c_isalpha (c) == (c_islower (c) || c_isupper (c))); switch (c) { case '\t': case ' ': ASSERT (c_isblank (c) == 1); break; default: ASSERT (c_isblank (c) == 0); break; } #ifdef C_CTYPE_ASCII ASSERT (c_iscntrl (c) == ((c >= 0 && c < 0x20) || c == 0x7f)); #endif switch (c) { case '\a': case '\b': case '\f': case '\n': case '\r': case '\t': case '\v': ASSERT (c_iscntrl (c)); break; } ASSERT (! (c_iscntrl (c) && c_isprint (c))); switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ASSERT (c_isdigit (c) == 1); break; default: ASSERT (c_isdigit (c) == 0); break; } switch (c) { case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': ASSERT (c_islower (c) == 1); ASSERT (c_toupper (c) == c - 'a' + 'A'); break; default: ASSERT (c_islower (c) == 0); ASSERT (c_toupper (c) == c); break; } #ifdef C_CTYPE_ASCII ASSERT (c_isgraph (c) == ((c >= 0x20 && c < 0x7f) && c != ' ')); ASSERT (c_isprint (c) == (c >= 0x20 && c < 0x7f)); #endif ASSERT (c_isgraph (c) == (c_isalnum (c) || c_ispunct (c))); ASSERT (c_isprint (c) == (c_isgraph (c) || c == ' ')); switch (c) { case '!': case '"': case '#': case '$': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case ':': case ';': case '<': case '=': case '>': case '?': case '@': case '[': case'\\': case ']': case '^': case '_': case '`': case '{': case '|': case '}': case '~': ASSERT (c_ispunct (c) == 1); break; default: ASSERT (c_ispunct (c) == 0); break; } switch (c) { case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': ASSERT (c_isspace (c) == 1); break; default: ASSERT (c_isspace (c) == 0); break; } switch (c) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': ASSERT (c_isupper (c) == 1); ASSERT (c_tolower (c) == c - 'A' + 'a'); break; default: ASSERT (c_isupper (c) == 0); ASSERT (c_tolower (c) == c); break; } switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': ASSERT (c_isxdigit (c) == 1); break; default: ASSERT (c_isxdigit (c) == 0); break; } } ASSERT (n_isascii == 128); } int main () { test_agree_with_C_locale (); test_all (); setlocale (LC_ALL, "de_DE"); test_all (); setlocale (LC_ALL, "ja_JP.EUC-JP"); test_all (); return 0; } ��������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c-strcasecmp.c������������������������������������������������0000644�0001750�0001750�00000004223�14557510507�016347� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive string comparison function. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include "c-strcase.h" #include "c-ctype.h" #include <locale.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { if (argc > 1) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; } ASSERT (c_strcasecmp ("paragraph", "Paragraph") == 0); ASSERT (c_strcasecmp ("paragrapH", "parAgRaph") == 0); ASSERT (c_strcasecmp ("paragraph", "paraLyzed") < 0); ASSERT (c_strcasecmp ("paraLyzed", "paragraph") > 0); ASSERT (c_strcasecmp ("para", "paragraph") < 0); ASSERT (c_strcasecmp ("paragraph", "para") > 0); /* The following tests shows how c_strcasecmp() is different from strcasecmp(). */ ASSERT (c_strcasecmp ("\311mile", "\351mile") < 0); ASSERT (c_strcasecmp ("\351mile", "\311mile") > 0); /* The following tests shows how c_strcasecmp() is different from mbscasecmp(). */ ASSERT (c_strcasecmp ("\303\266zg\303\274r", "\303\226ZG\303\234R") > 0); /* özgür */ ASSERT (c_strcasecmp ("\303\226ZG\303\234R", "\303\266zg\303\274r") < 0); /* özgür */ #if C_CTYPE_ASCII /* This test shows how strings of different size cannot compare equal. */ ASSERT (c_strcasecmp ("turkish", "TURK\304\260SH") < 0); ASSERT (c_strcasecmp ("TURK\304\260SH", "turkish") > 0); #endif return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c-strcasestr.c������������������������������������������������0000644�0001750�0001750�00000017633�14557510507�016411� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive searching in a string. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include "c-strcasestr.h" #include <stdlib.h> #include <string.h> #include "macros.h" int main () { { const char input[] = "foo"; const char *result = c_strcasestr (input, ""); ASSERT (result == input); } { const char input[] = "foo"; const char *result = c_strcasestr (input, "O"); ASSERT (result == input + 1); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = c_strcasestr (input, "ABCDaBD"); ASSERT (result == input + 15); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = c_strcasestr (input, "ABCDaBE"); ASSERT (result == NULL); } { const char input[] = "ABC ABCDAB ABCDABCDABDE"; const char *result = c_strcasestr (input, "ABCDaBCD"); ASSERT (result == input + 11); } /* Check that a long periodic needle does not cause false positives. */ { const char input[] = "F_BD_CE_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_88_20_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_A7_20_EF_BF_BD"; const char need[] = "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char *result = c_strcasestr (input, need); ASSERT (result == NULL); } { const char input[] = "F_BD_CE_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_88_20_EF_BF_BD_EF_BF_BD_EF_BF_BD" "_C3_A7_20_EF_BF_BD_DA_B5_C2_A6_20" "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char need[] = "_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD_EF_BF_BD"; const char *result = c_strcasestr (input, need); ASSERT (result == input + 115); } /* Check that a very long haystack is handled quickly if the needle is short and occurs near the beginning. */ { size_t repeat = 10000; size_t m = 1000000; const char *needle = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaAAAAaaaaaaa" "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; char *haystack = (char *) malloc (m + 1); if (haystack != NULL) { memset (haystack, 'A', m); haystack[0] = 'B'; haystack[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (c_strcasestr (haystack, needle) == haystack + 1); } free (haystack); } } /* Check that a very long needle is discarded quickly if the haystack is short. */ { size_t repeat = 10000; size_t m = 1000000; const char *haystack = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" "ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB"; char *needle = (char *) malloc (m + 1); if (needle != NULL) { memset (needle, 'A', m); needle[m] = '\0'; for (; repeat > 0; repeat--) { ASSERT (c_strcasestr (haystack, needle) == NULL); } free (needle); } } /* Check that the asymptotic worst-case complexity is not quadratic. */ { size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 2); char *needle = (char *) malloc (m + 2); if (haystack != NULL && needle != NULL) { const char *result; memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; haystack[2 * m + 1] = '\0'; memset (needle, 'a', m); needle[m] = 'B'; needle[m + 1] = '\0'; result = c_strcasestr (haystack, needle); ASSERT (result == haystack + m); } free (needle); free (haystack); } { /* Ensure that with a barely periodic "short" needle, c_strcasestr's search does not mistakenly skip just past the match point. This use of c_strcasestr would mistakenly return NULL before gnulib v0.0-4927. */ const char *haystack = "\n" "with_build_libsubdir\n" "with_local_prefix\n" "with_gxx_include_dir\n" "with_cpp_install_dir\n" "enable_generated_files_in_srcdir\n" "with_gnu_ld\n" "with_ld\n" "with_demangler_in_ld\n" "with_gnu_as\n" "with_as\n" "enable_largefile\n" "enable_werror_always\n" "enable_checking\n" "enable_coverage\n" "enable_gather_detailed_mem_stats\n" "enable_build_with_cxx\n" "with_stabs\n" "enable_multilib\n" "enable___cxa_atexit\n" "enable_decimal_float\n" "enable_fixed_point\n" "enable_threads\n" "enable_tls\n" "enable_objc_gc\n" "with_dwarf2\n" "enable_shared\n" "with_build_sysroot\n" "with_sysroot\n" "with_specs\n" "with_pkgversion\n" "with_bugurl\n" "enable_languages\n" "with_multilib_list\n"; const char *needle = "\n" "with_GNU_ld\n"; const char* p = c_strcasestr (haystack, needle); ASSERT (p - haystack == 114); } { /* Same bug, shorter trigger. */ const char *haystack = "..wi.D."; const char *needle = ".d."; const char* p = c_strcasestr (haystack, needle); ASSERT (p - haystack == 4); } { /* Like the above, but trigger the flaw in two_way_long_needle by using a needle of length LONG_NEEDLE_THRESHOLD (32) or greater. Rather than trying to find the right alignment manually, I've arbitrarily chosen the following needle and template for the haystack, and ensure that for each placement of the needle in that haystack, c_strcasestr finds it. */ const char *needle = "\nwith_gnu_ld-extend-to-len-32-b\n"; const char *h = "\n" "with_build_libsubdir\n" "with_local_prefix\n" "with_gxx_include_dir\n" "with_cpp_install_dir\n" "with_e_\n" "..............................\n" "with_FGHIJKLMNOPQRSTUVWXYZ\n" "with_567890123456789\n" "with_multilib_list\n"; size_t h_len = strlen (h); char *haystack = malloc (h_len + 1); size_t i; ASSERT (haystack); for (i = 0; i < h_len - strlen (needle); i++) { const char *p; memcpy (haystack, h, h_len + 1); memcpy (haystack + i, needle, strlen (needle) + 1); p = c_strcasestr (haystack, needle); ASSERT (p); ASSERT (p - haystack == i); } free (haystack); } /* Test case from Yves Bastide. <https://www.openwall.com/lists/musl/2014/04/18/2> */ { const char input[] = "playing PLAY play PLAY always"; const char *result = c_strcasestr (input, "play PLAY play"); ASSERT (result == input + 8); } /* Test long needles. */ { size_t m = 1024; char *haystack = (char *) malloc (2 * m + 1); char *needle = (char *) malloc (m + 1); if (haystack != NULL && needle != NULL) { const char *p; haystack[0] = 'x'; memset (haystack + 1, ' ', m - 1); memset (haystack + m, 'x', m); haystack[2 * m] = '\0'; memset (needle, 'X', m); needle[m] = '\0'; p = c_strcasestr (haystack, needle); ASSERT (p); ASSERT (p - haystack == m); } free (needle); free (haystack); } return 0; } �����������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c-strncasecmp.c�����������������������������������������������0000644�0001750�0001750�00000006011�14557510507�016522� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of case-insensitive string comparison function. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include "c-strcase.h" #include "c-ctype.h" #include <locale.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { if (argc > 1) { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; } ASSERT (c_strncasecmp ("paragraph", "Paragraph", 1000000) == 0); ASSERT (c_strncasecmp ("paragraph", "Paragraph", 9) == 0); ASSERT (c_strncasecmp ("paragrapH", "parAgRaph", 1000000) == 0); ASSERT (c_strncasecmp ("paragrapH", "parAgRaph", 9) == 0); ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 10) < 0); ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 9) < 0); ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 5) < 0); ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 4) == 0); ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 10) > 0); ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 9) > 0); ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 5) > 0); ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 4) == 0); ASSERT (c_strncasecmp ("para", "paragraph", 10) < 0); ASSERT (c_strncasecmp ("para", "paragraph", 9) < 0); ASSERT (c_strncasecmp ("para", "paragraph", 5) < 0); ASSERT (c_strncasecmp ("para", "paragraph", 4) == 0); ASSERT (c_strncasecmp ("paragraph", "para", 10) > 0); ASSERT (c_strncasecmp ("paragraph", "para", 9) > 0); ASSERT (c_strncasecmp ("paragraph", "para", 5) > 0); ASSERT (c_strncasecmp ("paragraph", "para", 4) == 0); /* The following tests shows how c_strncasecmp() is different from strncasecmp(). */ ASSERT (c_strncasecmp ("\311mily", "\351mile", 4) < 0); ASSERT (c_strncasecmp ("\351mile", "\311mily", 4) > 0); /* The following tests shows how c_strncasecmp() is different from mbsncasecmp(). */ ASSERT (c_strncasecmp ("\303\266zg\303\274r", "\303\226ZG\303\234R", 99) > 0); /* özgür */ ASSERT (c_strncasecmp ("\303\226ZG\303\234R", "\303\266zg\303\274r", 99) < 0); /* özgür */ #if C_CTYPE_ASCII /* This test shows how strings of different size cannot compare equal. */ ASSERT (c_strncasecmp ("turkish", "TURK\304\260SH", 7) < 0); ASSERT (c_strncasecmp ("TURK\304\260SH", "turkish", 7) > 0); #endif return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32isalnum.c��������������������������������������������������0000644�0001750�0001750�00000022343�14557510507�015746� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isalnum() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32isalnum, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of c32isalnum for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; char32_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, s, n, &state); ASSERT (ret == n); return c32isalnum (wc); } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = c32isalnum (WEOF); ASSERT (is == 0); /* Test single-byte characters. POSIX specifies in <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> that - in all locales, the alphanumeric characters include the uppercase and lowercase characters and digits and, consequently, include the A ... Z and a ... z and 0 ... 9 characters. - in the "POSIX" locale (which is usually the same as the "C" locale), the alphanumeric characters include only the ASCII A ... Z and a ... z and 0 ... 9 characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': ASSERT (is != 0); break; default: ASSERT (is == 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { /* U+00D7 MULTIPLICATION SIGN */ is = for_character ("\327", 1); ASSERT (is == 0); /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ is = for_character ("\330", 1); ASSERT (is != 0); } return 0; case '2': /* Locale encoding is EUC-JP. */ { /* U+00D7 MULTIPLICATION SIGN */ is = for_character ("\241\337", 2); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__) /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ is = for_character ("\217\251\254", 3); ASSERT (is != 0); /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\217\251\250", 3); ASSERT (is != 0); #endif /* U+3001 IDEOGRAPHIC COMMA */ is = for_character ("\241\242", 2); ASSERT (is == 0); #if defined __GLIBC__ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is != 0); #endif #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ is = for_character ("\243\355", 2); ASSERT (is != 0); #endif } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+00D7 MULTIPLICATION SIGN */ is = for_character ("\303\227", 2); ASSERT (is == 0); /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ is = for_character ("\303\230", 2); ASSERT (is != 0); /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\305\201", 2); ASSERT (is != 0); /* U+3001 IDEOGRAPHIC COMMA */ is = for_character ("\343\200\201", 3); ASSERT (is == 0); #if defined __GLIBC__ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\357\274\221", 3); ASSERT (is != 0); #endif /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ is = for_character ("\357\275\215", 3); ASSERT (is != 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) /* U+10330 GOTHIC LETTER AHSA */ is = for_character ("\360\220\214\260", 4); ASSERT (is != 0); #endif /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ is = for_character ("\360\235\204\200", 4); ASSERT (is == 0); /* U+E0061 TAG LATIN SMALL LETTER A */ is = for_character ("\363\240\201\241", 4); ASSERT (is == 0); } return 0; case '4': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { /* U+00D7 MULTIPLICATION SIGN */ is = for_character ("\241\301", 2); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ is = for_character ("\201\060\211\061", 4); ASSERT (is != 0); /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\201\060\221\071", 4); ASSERT (is != 0); #endif /* U+3001 IDEOGRAPHIC COMMA */ is = for_character ("\241\242", 2); ASSERT (is == 0); #if defined __GLIBC__ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is != 0); #endif #if !defined __DragonFly__ /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ is = for_character ("\243\355", 2); ASSERT (is != 0); #endif #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) /* U+10330 GOTHIC LETTER AHSA */ is = for_character ("\220\060\322\066", 4); ASSERT (is != 0); #endif /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ is = for_character ("\224\062\273\064", 4); ASSERT (is == 0); /* U+E0061 TAG LATIN SMALL LETTER A */ is = for_character ("\323\066\237\065", 4); ASSERT (is == 0); } return 0; } return 1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32isalpha.c��������������������������������������������������0000644�0001750�0001750�00000022656�14557510507�015726� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isalpha() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32isalpha, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of c32isalpha for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; char32_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, s, n, &state); ASSERT (ret == n); return c32isalpha (wc); } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = c32isalpha (WEOF); ASSERT (is == 0); /* Test single-byte characters. POSIX specifies in <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> that - in all locales, the alphabetic characters include the uppercase and lowercase characters and, consequently, include the A ... Z and a ... z characters. - in the "POSIX" locale (which is usually the same as the "C" locale), the alphabetic characters include only the ASCII A ... Z and a ... z characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': ASSERT (is != 0); break; default: ASSERT (is == 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { /* U+00D7 MULTIPLICATION SIGN */ is = for_character ("\327", 1); ASSERT (is == 0); /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ is = for_character ("\330", 1); ASSERT (is != 0); } return 0; case '2': /* Locale encoding is EUC-JP. */ { /* U+00D7 MULTIPLICATION SIGN */ is = for_character ("\241\337", 2); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__) /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ is = for_character ("\217\251\254", 3); ASSERT (is != 0); /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\217\251\250", 3); ASSERT (is != 0); #endif /* U+3001 IDEOGRAPHIC COMMA */ is = for_character ("\241\242", 2); ASSERT (is == 0); #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined __sun || defined __CYGWIN__) /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is == 0); #endif #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ is = for_character ("\243\355", 2); ASSERT (is != 0); #endif } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+00D7 MULTIPLICATION SIGN */ is = for_character ("\303\227", 2); ASSERT (is == 0); /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ is = for_character ("\303\230", 2); ASSERT (is != 0); /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\305\201", 2); ASSERT (is != 0); /* U+3001 IDEOGRAPHIC COMMA */ is = for_character ("\343\200\201", 3); ASSERT (is == 0); #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\357\274\221", 3); ASSERT (is == 0); #endif /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ is = for_character ("\357\275\215", 3); ASSERT (is != 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) /* U+10330 GOTHIC LETTER AHSA */ is = for_character ("\360\220\214\260", 4); ASSERT (is != 0); #endif /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ is = for_character ("\360\235\204\200", 4); ASSERT (is == 0); /* U+E0061 TAG LATIN SMALL LETTER A */ is = for_character ("\363\240\201\241", 4); ASSERT (is == 0); } return 0; case '4': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { /* U+00D7 MULTIPLICATION SIGN */ is = for_character ("\241\301", 2); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ is = for_character ("\201\060\211\061", 4); ASSERT (is != 0); /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\201\060\221\071", 4); ASSERT (is != 0); #endif /* U+3001 IDEOGRAPHIC COMMA */ is = for_character ("\241\242", 2); ASSERT (is == 0); #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is == 0); #endif #if !defined __DragonFly__ /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ is = for_character ("\243\355", 2); ASSERT (is != 0); #endif #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) /* U+10330 GOTHIC LETTER AHSA */ is = for_character ("\220\060\322\066", 4); ASSERT (is != 0); #endif /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ is = for_character ("\224\062\273\064", 4); ASSERT (is == 0); /* U+E0061 TAG LATIN SMALL LETTER A */ is = for_character ("\323\066\237\065", 4); ASSERT (is == 0); } return 0; } return 1; } ����������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32isblank.c��������������������������������������������������0000644�0001750�0001750�00000014416�14557510507�015723� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isblank() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32isblank, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of c32isblank for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; char32_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, s, n, &state); ASSERT (ret == n); return c32isblank (wc); } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = c32isblank (WEOF); ASSERT (is == 0); /* Test single-byte characters. POSIX specifies in <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> that - in all locales, the blank characters include the <space> and <tab> characters, - in the "POSIX" locale (which is usually the same as the "C" locale), the blank characters include only the ASCII <space> and <tab> characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': #if !(defined __FreeBSD__ || defined __NetBSD__) case '\v': #endif case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); if (c == '\t' || c == ' ') ASSERT (is != 0); else ASSERT (is == 0); break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { #if defined __GLIBC__ /* U+00A0 NO-BREAK SPACE */ is = for_character ("\240", 1); ASSERT (is == 0); #endif /* U+00B7 MIDDLE DOT */ is = for_character ("\267", 1); ASSERT (is == 0); } return 0; case '2': /* Locale encoding is EUC-JP. */ { /* U+3002 IDEOGRAPHIC FULL STOP */ is = for_character ("\241\243", 2); ASSERT (is == 0); } return 0; case '3': /* Locale encoding is UTF-8. */ { #if defined __GLIBC__ /* U+00A0 NO-BREAK SPACE */ is = for_character ("\302\240", 2); ASSERT (is == 0); #endif /* U+00B7 MIDDLE DOT */ is = for_character ("\302\267", 2); ASSERT (is == 0); #if defined __GLIBC__ /* U+202F NARROW NO-BREAK SPACE */ is = for_character ("\342\200\257", 3); ASSERT (is == 0); #endif /* U+3002 IDEOGRAPHIC FULL STOP */ is = for_character ("\343\200\202", 3); ASSERT (is == 0); /* U+1D13D MUSICAL SYMBOL QUARTER REST */ is = for_character ("\360\235\204\275", 4); ASSERT (is == 0); /* U+E0020 TAG SPACE */ is = for_character ("\363\240\200\240", 4); ASSERT (is == 0); } return 0; case '4': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { #if defined __GLIBC__ /* U+00A0 NO-BREAK SPACE */ is = for_character ("\201\060\204\062", 4); ASSERT (is == 0); #endif /* U+00B7 MIDDLE DOT */ is = for_character ("\241\244", 2); ASSERT (is == 0); #if defined __GLIBC__ /* U+202F NARROW NO-BREAK SPACE */ is = for_character ("\201\066\247\062", 4); ASSERT (is == 0); #endif /* U+3002 IDEOGRAPHIC FULL STOP */ is = for_character ("\241\243", 2); ASSERT (is == 0); /* U+1D13D MUSICAL SYMBOL QUARTER REST */ is = for_character ("\224\062\301\065", 4); ASSERT (is == 0); /* U+E0020 TAG SPACE */ is = for_character ("\323\066\231\060", 4); ASSERT (is == 0); } return 0; } return 1; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32iscntrl.c��������������������������������������������������0000644�0001750�0001750�00000016570�14557510507�015761� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32iscntrl() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32iscntrl, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of c32iscntrl for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; char32_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, s, n, &state); ASSERT (ret == n); return c32iscntrl (wc); } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = c32iscntrl (WEOF); ASSERT (is == 0); /* Test single-byte characters. POSIX specifies in <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> no explicit list of control characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case '\t': case '\v': case '\f': ASSERT (is != 0); break; default: ASSERT (is == 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { /* U+007F <control> */ is = for_character ("\177", 1); ASSERT (is != 0); /* U+00A0 NO-BREAK SPACE */ is = for_character ("\240", 1); ASSERT (is == 0); } return 0; case '2': /* Locale encoding is EUC-JP. */ { /* U+007F <control> */ is = for_character ("\177", 1); ASSERT (is != 0); /* U+3000 IDEOGRAPHIC SPACE */ is = for_character ("\241\241", 2); ASSERT (is == 0); } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+007F <control> */ is = for_character ("\177", 1); ASSERT (is != 0); /* U+00A0 NO-BREAK SPACE */ is = for_character ("\302\240", 2); ASSERT (is == 0); #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) /* U+202E RIGHT-TO-LEFT OVERRIDE */ is = for_character ("\342\200\256", 3); ASSERT (is != 0); #endif /* U+3000 IDEOGRAPHIC SPACE */ is = for_character ("\343\200\200", 3); ASSERT (is == 0); #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ is = for_character ("\357\273\277", 3); ASSERT (is != 0); #endif /* U+20000 <CJK Ideograph> */ is = for_character ("\360\240\200\200", 4); ASSERT (is == 0); #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) /* U+E0001 LANGUAGE TAG */ is = for_character ("\363\240\200\201", 4); ASSERT (is != 0); #endif } return 0; case '4': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { /* U+007F <control> */ is = for_character ("\177", 1); ASSERT (is != 0); /* U+00A0 NO-BREAK SPACE */ is = for_character ("\201\060\204\062", 4); ASSERT (is == 0); #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+202E RIGHT-TO-LEFT OVERRIDE */ is = for_character ("\201\066\247\061", 4); ASSERT (is != 0); #endif /* U+3000 IDEOGRAPHIC SPACE */ is = for_character ("\241\241", 2); ASSERT (is == 0); #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ is = for_character ("\204\061\225\063", 4); ASSERT (is != 0); #endif /* U+20000 <CJK Ideograph> */ is = for_character ("\225\062\202\066", 4); ASSERT (is == 0); #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) /* U+E0001 LANGUAGE TAG */ is = for_character ("\323\066\225\071", 4); ASSERT (is != 0); #endif } return 0; } return 1; } ����������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32isdigit.c��������������������������������������������������0000644�0001750�0001750�00000017557�14557510507�015745� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isdigit() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32isdigit, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of c32isdigit for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; char32_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, s, n, &state); ASSERT (ret == n); return c32isdigit (wc); } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = c32isdigit (WEOF); ASSERT (is == 0); /* Test single-byte characters. ISO C 99 sections 7.25.2.1.5 and 5.2.1 specify that the decimal digits include only the ASCII 0 ... 9 characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ASSERT (is != 0); break; default: ASSERT (is == 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\262", 1); ASSERT (is == 0); /* U+00B3 SUPERSCRIPT THREE */ is = for_character ("\263", 1); ASSERT (is == 0); /* U+00B9 SUPERSCRIPT ONE */ is = for_character ("\271", 1); ASSERT (is == 0); } return 0; case '2': /* Locale encoding is EUC-JP. */ { /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is == 0); } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\302\262", 2); ASSERT (is == 0); /* U+00B3 SUPERSCRIPT THREE */ is = for_character ("\302\263", 2); ASSERT (is == 0); /* U+00B9 SUPERSCRIPT ONE */ is = for_character ("\302\271", 2); ASSERT (is == 0); /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\331\243", 2); ASSERT (is == 0); /* U+2070 SUPERSCRIPT ZERO */ is = for_character ("\342\201\260", 3); ASSERT (is == 0); /* U+2079 SUPERSCRIPT NINE */ is = for_character ("\342\201\271", 3); ASSERT (is == 0); /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\357\274\221", 3); ASSERT (is == 0); /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ is = for_character ("\360\235\237\221", 4); ASSERT (is == 0); /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ is = for_character ("\360\235\237\233", 4); ASSERT (is == 0); /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ is = for_character ("\360\235\237\245", 4); ASSERT (is == 0); /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ is = for_character ("\360\235\237\257", 4); ASSERT (is == 0); /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ is = for_character ("\360\235\237\271", 4); ASSERT (is == 0); /* U+E0033 TAG DIGIT THREE */ is = for_character ("\363\240\200\263", 4); ASSERT (is == 0); } return 0; case '4': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\201\060\205\065", 4); ASSERT (is == 0); /* U+00B3 SUPERSCRIPT THREE */ is = for_character ("\201\060\205\066", 4); ASSERT (is == 0); /* U+00B9 SUPERSCRIPT ONE */ is = for_character ("\201\060\206\061", 4); ASSERT (is == 0); /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\201\061\211\071", 4); ASSERT (is == 0); /* U+2070 SUPERSCRIPT ZERO */ is = for_character ("\201\066\255\062", 4); ASSERT (is == 0); /* U+2079 SUPERSCRIPT NINE */ is = for_character ("\201\066\256\061", 4); ASSERT (is == 0); /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is == 0); /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ is = for_character ("\224\063\353\071", 4); ASSERT (is == 0); /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ is = for_character ("\224\063\354\071", 4); ASSERT (is == 0); /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ is = for_character ("\224\063\355\071", 4); ASSERT (is == 0); /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ is = for_character ("\224\063\356\071", 4); ASSERT (is == 0); /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ is = for_character ("\224\063\357\071", 4); ASSERT (is == 0); /* U+E0033 TAG DIGIT THREE */ is = for_character ("\323\066\232\071", 4); ASSERT (is == 0); } return 0; } return 1; } �������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32isgraph.c��������������������������������������������������0000644�0001750�0001750�00000021562�14557510507�015735� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isgraph() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32isgraph, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of c32isgraph for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; char32_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, s, n, &state); ASSERT (ret == n); return c32isgraph (wc); } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = c32isgraph (WEOF); ASSERT (is == 0); /* Test single-byte characters. POSIX specifies in <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> no explicit list of graphic characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case '\t': case '\v': case '\f': case ' ': ASSERT (is == 0); break; default: ASSERT (is != 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { /* U+007F <control> */ is = for_character ("\177", 1); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sgi || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) /* U+00A0 NO-BREAK SPACE */ is = for_character ("\240", 1); ASSERT (is != 0); #endif #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+00B8 CEDILLA */ is = for_character ("\270", 1); ASSERT (is != 0); #endif } return 0; case '2': /* Locale encoding is EUC-JP. */ { /* U+007F <control> */ is = for_character ("\177", 1); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__) /* U+00B8 CEDILLA */ is = for_character ("\217\242\261", 3); ASSERT (is != 0); #endif /* U+3000 IDEOGRAPHIC SPACE */ is = for_character ("\241\241", 2); ASSERT (is == 0); } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+007F <control> */ is = for_character ("\177", 1); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) /* U+00A0 NO-BREAK SPACE */ is = for_character ("\302\240", 2); ASSERT (is != 0); #endif /* U+00B8 CEDILLA */ is = for_character ("\302\270", 2); ASSERT (is != 0); /* U+2002 EN SPACE */ is = for_character ("\342\200\202", 3); ASSERT (is == 0); #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) /* U+202E RIGHT-TO-LEFT OVERRIDE */ is = for_character ("\342\200\256", 3); ASSERT (is == 0); #endif /* U+3000 IDEOGRAPHIC SPACE */ is = for_character ("\343\200\200", 3); ASSERT (is == 0); #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ is = for_character ("\357\273\277", 3); ASSERT (is == 0); #endif #if !defined __sun /* U+20000 <CJK Ideograph> */ is = for_character ("\360\240\200\200", 4); ASSERT (is != 0); #endif #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) /* U+E0001 LANGUAGE TAG */ is = for_character ("\363\240\200\201", 4); ASSERT (is == 0); #endif } return 0; case '4': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { /* U+007F <control> */ is = for_character ("\177", 1); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) /* U+00A0 NO-BREAK SPACE */ is = for_character ("\201\060\204\062", 4); ASSERT (is != 0); #endif #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+00B8 CEDILLA */ is = for_character ("\201\060\206\060", 4); ASSERT (is != 0); #endif /* U+2002 EN SPACE */ is = for_character ("\201\066\243\070", 4); ASSERT (is == 0); #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) /* U+202E RIGHT-TO-LEFT OVERRIDE */ is = for_character ("\201\066\247\061", 4); ASSERT (is == 0); #endif /* U+3000 IDEOGRAPHIC SPACE */ is = for_character ("\241\241", 2); ASSERT (is == 0); #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ is = for_character ("\204\061\225\063", 4); ASSERT (is == 0); #endif #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) /* U+20000 <CJK Ideograph> */ is = for_character ("\225\062\202\066", 4); ASSERT (is != 0); #endif #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) /* U+E0001 LANGUAGE TAG */ is = for_character ("\323\066\225\071", 4); ASSERT (is == 0); #endif } return 0; } return 1; } ����������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32islower.c��������������������������������������������������0000644�0001750�0001750�00000032371�14557510507�015764� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32islower() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32islower, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of c32islower for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; char32_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, s, n, &state); ASSERT (ret == n); return c32islower (wc); } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = c32islower (WEOF); ASSERT (is == 0); /* Test single-byte characters. POSIX specifies in <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> that - in all locales, the lowercase characters include the a ... z characters, - in the "POSIX" locale (which is usually the same as the "C" locale), the lowercase characters include only the ASCII a ... z characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': ASSERT (is != 0); break; default: ASSERT (is == 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\262", 1); ASSERT (is == 0); #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) /* U+00B5 MICRO SIGN */ is = for_character ("\265", 1); ASSERT (is == 0); #endif /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ is = for_character ("\311", 1); ASSERT (is == 0); #if !defined __CYGWIN__ /* U+00DF LATIN SMALL LETTER SHARP S */ is = for_character ("\337", 1); ASSERT (is != 0); #endif /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ is = for_character ("\351", 1); ASSERT (is != 0); /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ is = for_character ("\377", 1); ASSERT (is != 0); } return 0; case '2': /* Locale encoding is EUC-JP. */ { /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ is = for_character ("\217\252\261", 3); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __CYGWIN__) /* U+00DF LATIN SMALL LETTER SHARP S */ is = for_character ("\217\251\316", 3); ASSERT (is != 0); #endif #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ is = for_character ("\217\253\261", 3); ASSERT (is != 0); /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ is = for_character ("\217\253\363", 3); ASSERT (is != 0); #endif /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\217\251\250", 3); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) /* U+0142 LATIN SMALL LETTER L WITH STROKE */ is = for_character ("\217\251\310", 3); ASSERT (is != 0); #endif /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ is = for_character ("\247\273", 2); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+0449 CYRILLIC SMALL LETTER SHCHA */ is = for_character ("\247\353", 2); ASSERT (is != 0); #endif /* U+3073 HIRAGANA LETTER BI */ is = for_character ("\244\323", 2); ASSERT (is == 0); #if !defined __DragonFly__ /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ is = for_character ("\243\347", 2); ASSERT (is != 0); #endif } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\302\262", 2); ASSERT (is == 0); #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) /* U+00B5 MICRO SIGN */ is = for_character ("\302\265", 2); ASSERT (is == 0); #endif /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ is = for_character ("\303\211", 2); ASSERT (is == 0); #if !defined __CYGWIN__ /* U+00DF LATIN SMALL LETTER SHARP S */ is = for_character ("\303\237", 2); ASSERT (is != 0); #endif /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ is = for_character ("\303\251", 2); ASSERT (is != 0); /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ is = for_character ("\303\277", 2); ASSERT (is != 0); /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\305\201", 2); ASSERT (is == 0); /* U+0142 LATIN SMALL LETTER L WITH STROKE */ is = for_character ("\305\202", 2); ASSERT (is != 0); /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ is = for_character ("\320\251", 2); ASSERT (is == 0); /* U+0449 CYRILLIC SMALL LETTER SHCHA */ is = for_character ("\321\211", 2); ASSERT (is != 0); /* U+05D5 HEBREW LETTER VAV */ is = for_character ("\327\225", 2); ASSERT (is == 0); /* U+3073 HIRAGANA LETTER BI */ is = for_character ("\343\201\263", 3); ASSERT (is == 0); /* U+3162 HANGUL LETTER YI */ is = for_character ("\343\205\242", 3); ASSERT (is == 0); /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ is = for_character ("\357\275\207", 3); ASSERT (is != 0); /* U+FFDB HALFWIDTH HANGUL LETTER YI */ is = for_character ("\357\277\233", 3); ASSERT (is == 0); /* U+10419 DESERET CAPITAL LETTER EF */ is = for_character ("\360\220\220\231", 4); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+10441 DESERET SMALL LETTER EF */ is = for_character ("\360\220\221\201", 4); ASSERT (is != 0); #endif /* U+E0041 TAG LATIN CAPITAL LETTER A */ is = for_character ("\363\240\201\201", 4); ASSERT (is == 0); /* U+E0061 TAG LATIN SMALL LETTER A */ is = for_character ("\363\240\201\241", 4); ASSERT (is == 0); } return 0; case '4': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\201\060\205\065", 4); ASSERT (is == 0); #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__) /* U+00B5 MICRO SIGN */ is = for_character ("\201\060\205\070", 4); ASSERT (is == 0); #endif /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ is = for_character ("\201\060\207\067", 4); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+00DF LATIN SMALL LETTER SHARP S */ is = for_character ("\201\060\211\070", 4); ASSERT (is != 0); #endif #if !defined __DragonFly__ /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ is = for_character ("\250\246", 2); ASSERT (is != 0); #endif #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ is = for_character ("\201\060\213\067", 4); ASSERT (is != 0); #endif /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\201\060\221\071", 4); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+0142 LATIN SMALL LETTER L WITH STROKE */ is = for_character ("\201\060\222\060", 4); ASSERT (is != 0); #endif /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ is = for_character ("\247\273", 2); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+0449 CYRILLIC SMALL LETTER SHCHA */ is = for_character ("\247\353", 2); ASSERT (is != 0); #endif /* U+05D5 HEBREW LETTER VAV */ is = for_character ("\201\060\371\067", 4); ASSERT (is == 0); /* U+3073 HIRAGANA LETTER BI */ is = for_character ("\244\323", 2); ASSERT (is == 0); /* U+3162 HANGUL LETTER YI */ is = for_character ("\201\071\256\062", 4); ASSERT (is == 0); #if !defined __DragonFly__ /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ is = for_character ("\243\347", 2); ASSERT (is != 0); #endif /* U+FFDB HALFWIDTH HANGUL LETTER YI */ is = for_character ("\204\061\241\071", 4); ASSERT (is == 0); /* U+10419 DESERET CAPITAL LETTER EF */ is = for_character ("\220\060\351\071", 4); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) /* U+10441 DESERET SMALL LETTER EF */ is = for_character ("\220\060\355\071", 4); ASSERT (is != 0); #endif /* U+E0041 TAG LATIN CAPITAL LETTER A */ is = for_character ("\323\066\234\063", 4); ASSERT (is == 0); /* U+E0061 TAG LATIN SMALL LETTER A */ is = for_character ("\323\066\237\065", 4); ASSERT (is == 0); } return 0; } return 1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32isprint.c��������������������������������������������������0000644�0001750�0001750�00000021533�14557510507�015766� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isprint() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32isprint, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of c32isprint for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; char32_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, s, n, &state); ASSERT (ret == n); return c32isprint (wc); } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = c32isprint (WEOF); ASSERT (is == 0); /* Test single-byte characters. POSIX specifies in <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> no explicit list of printable characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case '\t': case '\v': case '\f': ASSERT (is == 0); break; default: ASSERT (is != 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { /* U+007F <control> */ is = for_character ("\177", 1); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sgi || (defined _WIN32 && !defined __CYGWIN__)) /* U+00A0 NO-BREAK SPACE */ is = for_character ("\240", 1); ASSERT (is != 0); #endif #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+00B8 CEDILLA */ is = for_character ("\270", 1); ASSERT (is != 0); #endif } return 0; case '2': /* Locale encoding is EUC-JP. */ { /* U+007F <control> */ is = for_character ("\177", 1); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__) /* U+00B8 CEDILLA */ is = for_character ("\217\242\261", 3); ASSERT (is != 0); /* U+3000 IDEOGRAPHIC SPACE */ is = for_character ("\241\241", 2); ASSERT (is != 0); #endif } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+007F <control> */ is = for_character ("\177", 1); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun || (defined _WIN32 && !defined __CYGWIN__)) /* U+00A0 NO-BREAK SPACE */ is = for_character ("\302\240", 2); ASSERT (is != 0); #endif /* U+00B8 CEDILLA */ is = for_character ("\302\270", 2); ASSERT (is != 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun || (defined _WIN32 && !defined __CYGWIN__)) /* U+2002 EN SPACE */ is = for_character ("\342\200\202", 3); ASSERT (is != 0); #endif #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) /* U+202E RIGHT-TO-LEFT OVERRIDE */ is = for_character ("\342\200\256", 3); ASSERT (is == 0); #endif #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+3000 IDEOGRAPHIC SPACE */ is = for_character ("\343\200\200", 3); ASSERT (is != 0); #endif #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ is = for_character ("\357\273\277", 3); ASSERT (is == 0); #endif #if !defined __sun /* U+20000 <CJK Ideograph> */ is = for_character ("\360\240\200\200", 4); ASSERT (is != 0); #endif #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) /* U+E0001 LANGUAGE TAG */ is = for_character ("\363\240\200\201", 4); ASSERT (is == 0); #endif } return 0; case '4': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { /* U+007F <control> */ is = for_character ("\177", 1); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+00A0 NO-BREAK SPACE */ is = for_character ("\201\060\204\062", 4); ASSERT (is != 0); /* U+00B8 CEDILLA */ is = for_character ("\201\060\206\060", 4); ASSERT (is != 0); /* U+2002 EN SPACE */ is = for_character ("\201\066\243\070", 4); ASSERT (is != 0); #endif #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) /* U+202E RIGHT-TO-LEFT OVERRIDE */ is = for_character ("\201\066\247\061", 4); ASSERT (is == 0); #endif #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+3000 IDEOGRAPHIC SPACE */ is = for_character ("\241\241", 2); ASSERT (is != 0); #endif #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ is = for_character ("\204\061\225\063", 4); ASSERT (is == 0); #endif #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) /* U+20000 <CJK Ideograph> */ is = for_character ("\225\062\202\066", 4); ASSERT (is != 0); #endif #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) /* U+E0001 LANGUAGE TAG */ is = for_character ("\323\066\225\071", 4); ASSERT (is == 0); #endif } return 0; } return 1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32ispunct.c��������������������������������������������������0000644�0001750�0001750�00000030417�14557510507�015764� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32ispunct() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32ispunct, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of c32ispunct for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; char32_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, s, n, &state); ASSERT (ret == n); return c32ispunct (wc); } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = c32ispunct (WEOF); ASSERT (is == 0); /* Test single-byte characters. POSIX specifies in <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> no explicit list of punctuation or symbol characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case ' ': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': /* c is an alphanumeric or space character. */ ASSERT (is == 0); break; case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case ':': case ';': case '<': case '=': case '>': case '?': case '[': case '\\': case ']': case '^': case '_': case '{': case '|': case '}': case '~': /* These characters are usually expected to be punctuation or symbol characters. */ ASSERT (is != 0); break; default: ASSERT (is == 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ /* These characters are not in the ISO C "basic character set", but are nevertheless usually expected to be punctuation or symbol characters. */ is = for_character ("$", 1); ASSERT (is != 0); is = for_character ("@", 1); ASSERT (is != 0); is = for_character ("`", 1); ASSERT (is != 0); return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+00BF INVERTED QUESTION MARK */ is = for_character ("\277", 1); ASSERT (is != 0); #endif #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+00D7 MULTIPLICATION SIGN */ is = for_character ("\327", 1); ASSERT (is != 0); #endif /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ is = for_character ("\330", 1); ASSERT (is == 0); /* U+00DF LATIN SMALL LETTER SHARP S */ is = for_character ("\337", 1); ASSERT (is == 0); } return 0; case '2': /* Locale encoding is EUC-JP. */ { #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) /* U+00BF INVERTED QUESTION MARK */ is = for_character ("\217\242\304", 3); ASSERT (is != 0); #endif #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+00D7 MULTIPLICATION SIGN */ is = for_character ("\241\337", 2); ASSERT (is != 0); #endif /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ is = for_character ("\217\251\254", 3); ASSERT (is == 0); /* U+00DF LATIN SMALL LETTER SHARP S */ is = for_character ("\217\251\316", 3); ASSERT (is == 0); /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\217\251\250", 3); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) /* U+2192 RIGHTWARDS ARROW */ is = for_character ("\242\252", 2); ASSERT (is != 0); #endif #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+3001 IDEOGRAPHIC COMMA */ is = for_character ("\241\242", 2); ASSERT (is != 0); #endif /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is == 0); /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ is = for_character ("\243\355", 2); ASSERT (is == 0); } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+00BF INVERTED QUESTION MARK */ is = for_character ("\302\277", 2); ASSERT (is != 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+00D7 MULTIPLICATION SIGN */ is = for_character ("\303\227", 2); ASSERT (is != 0); #endif /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ is = for_character ("\303\230", 2); ASSERT (is == 0); /* U+00DF LATIN SMALL LETTER SHARP S */ is = for_character ("\303\237", 2); ASSERT (is == 0); /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\305\201", 2); ASSERT (is == 0); /* U+05F3 HEBREW PUNCTUATION GERESH */ is = for_character ("\327\263", 2); ASSERT (is != 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun || (defined _WIN32 && !defined __CYGWIN__)) /* U+2192 RIGHTWARDS ARROW */ is = for_character ("\342\206\222", 3); ASSERT (is != 0); #endif /* U+3001 IDEOGRAPHIC COMMA */ is = for_character ("\343\200\201", 3); ASSERT (is != 0); /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\357\274\221", 3); ASSERT (is == 0); /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ is = for_character ("\357\275\215", 3); ASSERT (is == 0); /* U+10330 GOTHIC LETTER AHSA */ is = for_character ("\360\220\214\260", 4); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ is = for_character ("\360\235\204\200", 4); ASSERT (is != 0); #endif #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) /* U+E003A TAG COLON */ is = for_character ("\363\240\200\272", 4); ASSERT (is == 0); #endif } return 0; case '4': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+00BF INVERTED QUESTION MARK */ is = for_character ("\201\060\206\067", 4); ASSERT (is != 0); #endif #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+00D7 MULTIPLICATION SIGN */ is = for_character ("\241\301", 2); ASSERT (is != 0); #endif /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ is = for_character ("\201\060\211\061", 4); ASSERT (is == 0); /* U+00DF LATIN SMALL LETTER SHARP S */ is = for_character ("\201\060\211\070", 4); ASSERT (is == 0); /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\201\060\221\071", 4); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+05F3 HEBREW PUNCTUATION GERESH */ is = for_character ("\201\060\374\067", 4); ASSERT (is != 0); #endif #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+2192 RIGHTWARDS ARROW */ is = for_character ("\241\372", 2); ASSERT (is != 0); /* U+3001 IDEOGRAPHIC COMMA */ is = for_character ("\241\242", 2); ASSERT (is != 0); #endif /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is == 0); /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ is = for_character ("\243\355", 2); ASSERT (is == 0); /* U+10330 GOTHIC LETTER AHSA */ is = for_character ("\220\060\322\066", 4); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ is = for_character ("\224\062\273\064", 4); ASSERT (is != 0); #endif #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) /* U+E003A TAG COLON */ is = for_character ("\323\066\233\066", 4); ASSERT (is == 0); #endif } return 0; } return 1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32isspace.c��������������������������������������������������0000644�0001750�0001750�00000014415�14557510507�015726� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isspace() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32isspace, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of c32isspace for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; char32_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, s, n, &state); ASSERT (ret == n); return c32isspace (wc); } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = c32isspace (WEOF); ASSERT (is == 0); /* Test single-byte characters. POSIX specifies in <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> that - in all locales, the white-space characters include the <space>, <form-feed>, <newline>, <carriage-return>, <tab>, <vertical-tab> characters, - in the "POSIX" locale (which is usually the same as the "C" locale), the white-space characters include only the ASCII <space>, <form-feed>, <newline>, <carriage-return>, <tab>, <vertical-tab> characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\f': case '\n': case '\r': case '\t': case '\v': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set" or one of the explicitly mentioned white-space characters. */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case ' ': case '\f': case '\n': case '\r': case '\t': case '\v': ASSERT (is != 0); break; default: ASSERT (is == 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { /* U+00B7 MIDDLE DOT */ is = for_character ("\267", 1); ASSERT (is == 0); } return 0; case '2': /* Locale encoding is EUC-JP. */ { #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+3000 IDEOGRAPHIC SPACE */ is = for_character ("\241\241", 2); ASSERT (is != 0); #endif /* U+3001 IDEOGRAPHIC COMMA */ is = for_character ("\241\242", 2); ASSERT (is == 0); } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+00B7 MIDDLE DOT */ is = for_character ("\302\267", 2); ASSERT (is == 0); /* U+2002 EN SPACE */ is = for_character ("\342\200\202", 3); ASSERT (is != 0); /* U+3000 IDEOGRAPHIC SPACE */ is = for_character ("\343\200\200", 3); ASSERT (is != 0); /* U+3001 IDEOGRAPHIC COMMA */ is = for_character ("\343\200\201", 3); ASSERT (is == 0); /* U+E0020 TAG SPACE */ is = for_character ("\363\240\200\240", 4); ASSERT (is == 0); } return 0; case '4': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { /* U+00B7 MIDDLE DOT */ is = for_character ("\241\244", 2); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+2002 EN SPACE */ is = for_character ("\201\066\243\070", 4); ASSERT (is != 0); #endif #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+3000 IDEOGRAPHIC SPACE */ is = for_character ("\241\241", 2); ASSERT (is != 0); #endif /* U+3001 IDEOGRAPHIC COMMA */ is = for_character ("\241\242", 2); ASSERT (is == 0); /* U+E0020 TAG SPACE */ is = for_character ("\323\066\231\060", 4); ASSERT (is == 0); } return 0; } return 1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32isupper.c��������������������������������������������������0000644�0001750�0001750�00000030442�14557510507�015764� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isupper() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32isupper, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of c32isupper for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; char32_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, s, n, &state); ASSERT (ret == n); return c32isupper (wc); } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = c32isupper (WEOF); ASSERT (is == 0); /* Test single-byte characters. POSIX specifies in <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> that - in all locales, the uppercase characters include the A ... Z characters, - in the "POSIX" locale (which is usually the same as the "C" locale), the uppercase characters include only the ASCII A ... Z characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': ASSERT (is != 0); break; default: ASSERT (is == 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\262", 1); ASSERT (is == 0); /* U+00B5 MICRO SIGN */ is = for_character ("\265", 1); ASSERT (is == 0); /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ is = for_character ("\311", 1); ASSERT (is != 0); #if !defined __hpux /* U+00DF LATIN SMALL LETTER SHARP S */ is = for_character ("\337", 1); ASSERT (is == 0); #endif /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ is = for_character ("\351", 1); ASSERT (is == 0); /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ is = for_character ("\377", 1); ASSERT (is == 0); } return 0; case '2': /* Locale encoding is EUC-JP. */ { #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ is = for_character ("\217\252\261", 3); ASSERT (is != 0); #endif /* U+00DF LATIN SMALL LETTER SHARP S */ is = for_character ("\217\251\316", 3); ASSERT (is == 0); /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ is = for_character ("\217\253\261", 3); ASSERT (is == 0); /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ is = for_character ("\217\253\363", 3); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\217\251\250", 3); ASSERT (is != 0); #endif /* U+0142 LATIN SMALL LETTER L WITH STROKE */ is = for_character ("\217\251\310", 3); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ is = for_character ("\247\273", 2); ASSERT (is != 0); #endif /* U+0449 CYRILLIC SMALL LETTER SHCHA */ is = for_character ("\247\353", 2); ASSERT (is == 0); /* U+3073 HIRAGANA LETTER BI */ is = for_character ("\244\323", 2); ASSERT (is == 0); #if !defined __DragonFly__ /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ is = for_character ("\243\307", 2); ASSERT (is != 0); #endif } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\302\262", 2); ASSERT (is == 0); /* U+00B5 MICRO SIGN */ is = for_character ("\302\265", 2); ASSERT (is == 0); /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ is = for_character ("\303\211", 2); ASSERT (is != 0); /* U+00DF LATIN SMALL LETTER SHARP S */ is = for_character ("\303\237", 2); ASSERT (is == 0); /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ is = for_character ("\303\251", 2); ASSERT (is == 0); /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ is = for_character ("\303\277", 2); ASSERT (is == 0); /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\305\201", 2); ASSERT (is != 0); /* U+0142 LATIN SMALL LETTER L WITH STROKE */ is = for_character ("\305\202", 2); ASSERT (is == 0); /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ is = for_character ("\320\251", 2); ASSERT (is != 0); /* U+0449 CYRILLIC SMALL LETTER SHCHA */ is = for_character ("\321\211", 2); ASSERT (is == 0); /* U+05D5 HEBREW LETTER VAV */ is = for_character ("\327\225", 2); ASSERT (is == 0); /* U+3073 HIRAGANA LETTER BI */ is = for_character ("\343\201\263", 3); ASSERT (is == 0); /* U+3162 HANGUL LETTER YI */ is = for_character ("\343\205\242", 3); ASSERT (is == 0); /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ is = for_character ("\357\274\247", 3); ASSERT (is != 0); /* U+FFDB HALFWIDTH HANGUL LETTER YI */ is = for_character ("\357\277\233", 3); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+10419 DESERET CAPITAL LETTER EF */ is = for_character ("\360\220\220\231", 4); ASSERT (is != 0); #endif /* U+10441 DESERET SMALL LETTER EF */ is = for_character ("\360\220\221\201", 4); ASSERT (is == 0); /* U+E0041 TAG LATIN CAPITAL LETTER A */ is = for_character ("\363\240\201\201", 4); ASSERT (is == 0); /* U+E0061 TAG LATIN SMALL LETTER A */ is = for_character ("\363\240\201\241", 4); ASSERT (is == 0); } return 0; case '4': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\201\060\205\065", 4); ASSERT (is == 0); /* U+00B5 MICRO SIGN */ is = for_character ("\201\060\205\070", 4); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ is = for_character ("\201\060\207\067", 4); ASSERT (is != 0); #endif /* U+00DF LATIN SMALL LETTER SHARP S */ is = for_character ("\201\060\211\070", 4); ASSERT (is == 0); /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ is = for_character ("\250\246", 2); ASSERT (is == 0); /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ is = for_character ("\201\060\213\067", 4); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ is = for_character ("\201\060\221\071", 4); ASSERT (is != 0); #endif /* U+0142 LATIN SMALL LETTER L WITH STROKE */ is = for_character ("\201\060\222\060", 4); ASSERT (is == 0); #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ is = for_character ("\247\273", 2); ASSERT (is != 0); #endif /* U+0449 CYRILLIC SMALL LETTER SHCHA */ is = for_character ("\247\353", 2); ASSERT (is == 0); /* U+05D5 HEBREW LETTER VAV */ is = for_character ("\201\060\371\067", 4); ASSERT (is == 0); /* U+3073 HIRAGANA LETTER BI */ is = for_character ("\244\323", 2); ASSERT (is == 0); /* U+3162 HANGUL LETTER YI */ is = for_character ("\201\071\256\062", 4); ASSERT (is == 0); #if !defined __DragonFly__ /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ is = for_character ("\243\307", 2); ASSERT (is != 0); #endif /* U+FFDB HALFWIDTH HANGUL LETTER YI */ is = for_character ("\204\061\241\071", 4); ASSERT (is == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) /* U+10419 DESERET CAPITAL LETTER EF */ is = for_character ("\220\060\351\071", 4); ASSERT (is != 0); #endif /* U+10441 DESERET SMALL LETTER EF */ is = for_character ("\220\060\355\071", 4); ASSERT (is == 0); /* U+E0041 TAG LATIN CAPITAL LETTER A */ is = for_character ("\323\066\234\063", 4); ASSERT (is == 0); /* U+E0061 TAG LATIN SMALL LETTER A */ is = for_character ("\323\066\237\065", 4); ASSERT (is == 0); } return 0; } return 1; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32isxdigit.c�������������������������������������������������0000644�0001750�0001750�00000022063�14557510507�016121� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32isxdigit() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32isxdigit, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of c32isxdigit for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; char32_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, s, n, &state); ASSERT (ret == n); return c32isxdigit (wc); } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = c32isxdigit (WEOF); ASSERT (is == 0); /* Test single-byte characters. ISO C 99 sections 7.25.2.1.12 and 6.4.4.1 specify that the hexadecimal digits include only the ASCII 0 ... 9 A ... F a ... f characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': ASSERT (is != 0); break; default: ASSERT (is == 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\262", 1); ASSERT (is == 0); /* U+00B3 SUPERSCRIPT THREE */ is = for_character ("\263", 1); ASSERT (is == 0); /* U+00B9 SUPERSCRIPT ONE */ is = for_character ("\271", 1); ASSERT (is == 0); } return 0; case '2': /* Locale encoding is EUC-JP. */ { /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is == 0); /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ is = for_character ("\243\301", 2); ASSERT (is == 0); /* U+FF41 FULLWIDTH LATIN SMALL LETTER A */ is = for_character ("\243\341", 2); ASSERT (is == 0); } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\302\262", 2); ASSERT (is == 0); /* U+00B3 SUPERSCRIPT THREE */ is = for_character ("\302\263", 2); ASSERT (is == 0); /* U+00B9 SUPERSCRIPT ONE */ is = for_character ("\302\271", 2); ASSERT (is == 0); /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\331\243", 2); ASSERT (is == 0); /* U+2070 SUPERSCRIPT ZERO */ is = for_character ("\342\201\260", 3); ASSERT (is == 0); /* U+2079 SUPERSCRIPT NINE */ is = for_character ("\342\201\271", 3); ASSERT (is == 0); /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\357\274\221", 3); ASSERT (is == 0); /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ is = for_character ("\357\274\241", 3); ASSERT (is == 0); /* U+FF41 FULLWIDTH LATIN SMALL LETTER A */ is = for_character ("\357\275\201", 3); ASSERT (is == 0); /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ is = for_character ("\360\235\237\221", 4); ASSERT (is == 0); /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ is = for_character ("\360\235\237\233", 4); ASSERT (is == 0); /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ is = for_character ("\360\235\237\245", 4); ASSERT (is == 0); /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ is = for_character ("\360\235\237\257", 4); ASSERT (is == 0); /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ is = for_character ("\360\235\237\271", 4); ASSERT (is == 0); /* U+E0033 TAG DIGIT THREE */ is = for_character ("\363\240\200\263", 4); ASSERT (is == 0); /* U+E0041 TAG LATIN CAPITAL LETTER A */ is = for_character ("\363\240\201\201", 4); ASSERT (is == 0); } return 0; case '4': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\201\060\205\065", 4); ASSERT (is == 0); /* U+00B3 SUPERSCRIPT THREE */ is = for_character ("\201\060\205\066", 4); ASSERT (is == 0); /* U+00B9 SUPERSCRIPT ONE */ is = for_character ("\201\060\206\061", 4); ASSERT (is == 0); /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\201\061\211\071", 4); ASSERT (is == 0); /* U+2070 SUPERSCRIPT ZERO */ is = for_character ("\201\066\255\062", 4); ASSERT (is == 0); /* U+2079 SUPERSCRIPT NINE */ is = for_character ("\201\066\256\061", 4); ASSERT (is == 0); /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is == 0); /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ is = for_character ("\243\301", 2); ASSERT (is == 0); /* U+FF41 FULLWIDTH LATIN SMALL LETTER A */ is = for_character ("\243\341", 2); ASSERT (is == 0); /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ is = for_character ("\224\063\353\071", 4); ASSERT (is == 0); /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ is = for_character ("\224\063\354\071", 4); ASSERT (is == 0); /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ is = for_character ("\224\063\355\071", 4); ASSERT (is == 0); /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ is = for_character ("\224\063\356\071", 4); ASSERT (is == 0); /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ is = for_character ("\224\063\357\071", 4); ASSERT (is == 0); /* U+E0033 TAG DIGIT THREE */ is = for_character ("\323\066\232\071", 4); ASSERT (is == 0); /* U+E0041 TAG LATIN CAPITAL LETTER A */ is = for_character ("\323\066\234\063", 4); ASSERT (is == 0); } return 0; } return 1; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32rtomb.c����������������������������������������������������0000644�0001750�0001750�00000012155�14557510507�015421� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide character to multibyte character. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32rtomb, size_t, (char *, char32_t, mbstate_t *)); #include <locale.h> #include <stdlib.h> #include <string.h> #include "macros.h" /* Check the multibyte character s[0..n-1]. */ static void check_character (const char *s, size_t n) { mbstate_t state; char32_t wc; char buf[64]; int iret; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; iret = mbrtoc32 (&wc, s, n, &state); ASSERT (iret == n); ret = c32rtomb (buf, wc, NULL); ASSERT (ret == n); ASSERT (memcmp (buf, s, n) == 0); /* Test special calling convention, passing a NULL pointer. */ ret = c32rtomb (NULL, wc, NULL); ASSERT (ret == 1); } int main (int argc, char *argv[]) { char buf[64]; size_t ret; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test NUL character. */ { buf[0] = 'x'; ret = c32rtomb (buf, 0, NULL); ASSERT (ret == 1); ASSERT (buf[0] == '\0'); } /* Test single bytes. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ ret = c32rtomb (buf, btoc32 (c), NULL); ASSERT (ret == 1); ASSERT (buf[0] == (char) c); break; } } /* Test special calling convention, passing a NULL pointer. */ { ret = c32rtomb (NULL, '\0', NULL); ASSERT (ret == 1); ret = c32rtomb (NULL, btoc32 ('x'), NULL); ASSERT (ret == 1); } if (argc > 1) switch (argv[1][0]) { case '1': /* C locale; tested above. */ return 0; case '2': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { const char input[] = "B\374\337er"; /* "Büßer" */ check_character (input + 1, 1); check_character (input + 2, 1); } return 0; case '3': /* Locale encoding is UTF-8. */ { const char input[] = "s\303\274\303\237\360\237\230\213!"; /* "süß😋!" */ check_character (input + 1, 2); check_character (input + 3, 2); check_character (input + 5, 4); } return 0; case '4': /* Locale encoding is EUC-JP. */ { const char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ check_character (input + 1, 2); check_character (input + 3, 2); check_character (input + 5, 2); } return 0; case '5': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { const char input[] = "s\250\271\201\060\211\070\224\071\375\067!"; /* "süß😋!" */ check_character (input + 1, 2); check_character (input + 3, 4); check_character (input + 7, 4); } return 0; } return 1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32rtomb-w32.c������������������������������������������������0000644�0001750�0001750�00000023041�14557510507�016026� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide character to multibyte character. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "localcharset.h" #include "macros.h" #if defined _WIN32 && !defined __CYGWIN__ static int test_one_locale (const char *name, int codepage) { char buf[64]; size_t ret; # if 1 /* Portable code to set the locale. */ { char name_with_codepage[1024]; sprintf (name_with_codepage, "%s.%d", name, codepage); /* Set the locale. */ if (setlocale (LC_ALL, name_with_codepage) == NULL) return 77; } # else /* Hacky way to set a locale.codepage combination that setlocale() refuses to set. */ { /* Codepage of the current locale, set with setlocale(). Not necessarily the same as GetACP(). */ extern __declspec(dllimport) unsigned int __lc_codepage; /* Set the locale. */ if (setlocale (LC_ALL, name) == NULL) return 77; /* Clobber the codepage and MB_CUR_MAX, both set by setlocale(). */ __lc_codepage = codepage; switch (codepage) { case 1252: case 1256: MB_CUR_MAX = 1; break; case 932: case 950: case 936: MB_CUR_MAX = 2; break; case 54936: case 65001: MB_CUR_MAX = 4; break; } /* Test whether the codepage is really available. */ { mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, " ", 1, &state) == (size_t)(-1)) return 77; } } # endif /* Test NUL character. */ { buf[0] = 'x'; ret = c32rtomb (buf, 0, NULL); ASSERT (ret == 1); ASSERT (buf[0] == '\0'); } /* Test single bytes. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ ret = c32rtomb (buf, btoc32 (c), NULL); ASSERT (ret == 1); ASSERT (buf[0] == (char) c); break; } } /* Test special calling convention, passing a NULL pointer. */ { ret = c32rtomb (NULL, '\0', NULL); ASSERT (ret == 1); ret = c32rtomb (NULL, btoc32 ('x'), NULL); ASSERT (ret == 1); } switch (codepage) { case 1252: /* Locale encoding is CP1252, an extension of ISO-8859-1. */ { /* Convert "B\374\337er": "Büßer" */ memset (buf, 'x', 8); ret = c32rtomb (buf, 0x00FC, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\374", 1) == 0); ASSERT (buf[1] == 'x'); memset (buf, 'x', 8); ret = c32rtomb (buf, 0x00DF, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\337", 1) == 0); ASSERT (buf[1] == 'x'); } return 0; case 1256: /* Locale encoding is CP1256, not the same as ISO-8859-6. */ { /* Convert "x\302\341\346y": "xآلوy" */ memset (buf, 'x', 8); ret = c32rtomb (buf, 0x0622, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\302", 1) == 0); ASSERT (buf[1] == 'x'); memset (buf, 'x', 8); ret = c32rtomb (buf, 0x0644, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\341", 1) == 0); ASSERT (buf[1] == 'x'); memset (buf, 'x', 8); ret = c32rtomb (buf, 0x0648, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\346", 1) == 0); ASSERT (buf[1] == 'x'); } return 0; case 65001: /* Locale encoding is CP65001 = UTF-8. */ if (strcmp (locale_charset (), "UTF-8") != 0) return 77; { /* Convert "s\303\274\303\237\360\237\230\213!"; "süß😋!" */ memset (buf, 'x', 8); ret = c32rtomb (buf, 0x00FC, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\303\274", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = c32rtomb (buf, 0x00DF, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\303\237", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = c32rtomb (buf, 0x1F60B, NULL); ASSERT (ret == 4); ASSERT (memcmp (buf, "\360\237\230\213", 4) == 0); ASSERT (buf[4] == 'x'); } return 0; case 932: /* Locale encoding is CP932, similar to Shift_JIS. */ { /* Convert "<\223\372\226\173\214\352>": "<日本語>" */ memset (buf, 'x', 8); ret = c32rtomb (buf, 0x65E5, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\223\372", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = c32rtomb (buf, 0x672C, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\226\173", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = c32rtomb (buf, 0x8A9E, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\214\352", 2) == 0); ASSERT (buf[2] == 'x'); } return 0; case 950: /* Locale encoding is CP950, similar to Big5. */ { /* Convert "<\244\351\245\273\273\171>": "<日本語>" */ memset (buf, 'x', 8); ret = c32rtomb (buf, 0x65E5, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\244\351", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = c32rtomb (buf, 0x672C, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\245\273", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = c32rtomb (buf, 0x8A9E, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\273\171", 2) == 0); ASSERT (buf[2] == 'x'); } return 0; case 936: /* Locale encoding is CP936 = GBK, an extension of GB2312. */ { /* Convert "<\310\325\261\276\325\132>": "<日本語>" */ memset (buf, 'x', 8); ret = c32rtomb (buf, 0x65E5, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\310\325", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = c32rtomb (buf, 0x672C, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\261\276", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = c32rtomb (buf, 0x8A9E, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\325\132", 2) == 0); ASSERT (buf[2] == 'x'); } return 0; case 54936: /* Locale encoding is CP54936 = GB18030. */ if (strcmp (locale_charset (), "GB18030") != 0) return 77; { /* Convert "s\250\271\201\060\211\070\224\071\375\067!"; "süß😋!" */ memset (buf, 'x', 8); ret = c32rtomb (buf, 0x00FC, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\250\271", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = c32rtomb (buf, 0x00DF, NULL); ASSERT (ret == 4); ASSERT (memcmp (buf, "\201\060\211\070", 4) == 0); ASSERT (buf[4] == 'x'); memset (buf, 'x', 8); ret = c32rtomb (buf, 0x1F60B, NULL); ASSERT (ret == 4); ASSERT (memcmp (buf, "\224\071\375\067", 4) == 0); ASSERT (buf[4] == 'x'); } return 0; default: return 1; } } int main (int argc, char *argv[]) { int codepage = atoi (argv[argc - 1]); int result; int i; result = 77; for (i = 1; i < argc - 1; i++) { int ret = test_one_locale (argv[i], codepage); if (ret != 77) result = ret; } if (result == 77) { fprintf (stderr, "Skipping test: found no locale with codepage %d\n", codepage); } return result; } #else int main (int argc, char *argv[]) { fputs ("Skipping test: not a native Windows system\n", stderr); return 77; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32tolower.c��������������������������������������������������0000644�0001750�0001750�00000042602�14557510507�015771� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32tolower() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32tolower, wint_t, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Representation of a multibyte character. */ #define MBCHAR_BUF_SIZE 6 struct multibyte { size_t nbytes; /* number of bytes of current character, > 0 */ char buf[MBCHAR_BUF_SIZE]; /* room for the bytes */ }; /* Returns the value of c32tolower for the multibyte character s[0..n-1], as a multibyte character. */ static struct multibyte for_character (const char *s, size_t n) { mbstate_t state; char32_t wc; size_t ret; struct multibyte result; memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, s, n, &state); ASSERT (ret == n); wc = c32tolower (wc); ASSERT (wc != WEOF); memset (&state, '\0', sizeof (mbstate_t)); ret = c32rtomb (result.buf, wc, &state); ASSERT (ret != 0); if (ret == (size_t)(-1)) /* wc cannot be converted back to multibyte. */ result.nbytes = 0; else { ASSERT (ret <= MBCHAR_BUF_SIZE); result.nbytes = ret; } return result; } int main (int argc, char *argv[]) { wint_t wc; struct multibyte mb; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ wc = c32tolower (WEOF); ASSERT (wc == WEOF); /* Test single-byte characters. POSIX specifies in <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> that - in all locales, the uppercase characters include the A ... Z characters, and the corresponding characters a ... z (if not in a Turkish locale) are lowercase, - in the "POSIX" locale (which is usually the same as the "C" locale), the uppercase characters include only the ASCII A ... Z characters, and the corresponding characters a ... z are lowercase. */ #if defined __NetBSD__ /* towlower is broken in the zh_CN.GB18030 locale on NetBSD 9.0. See <https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=57339>. */ if (!(argc > 1 && argv[1][0] == '4')) #endif { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; mb = for_character (buf, 1); switch (c) { case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': ASSERT (mb.nbytes == 1); ASSERT ((unsigned char) mb.buf[0] == (unsigned char) c - 'A' + 'a'); break; default: ASSERT (mb.nbytes == 1); ASSERT ((unsigned char) mb.buf[0] == c); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { /* U+00B2 SUPERSCRIPT TWO */ mb = for_character ("\262", 1); ASSERT (mb.nbytes == 1); ASSERT (memcmp (mb.buf, "\262", 1) == 0); /* U+00B5 MICRO SIGN */ mb = for_character ("\265", 1); ASSERT (mb.nbytes == 1); ASSERT (memcmp (mb.buf, "\265", 1) == 0); /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ mb = for_character ("\311", 1); ASSERT (mb.nbytes == 1); ASSERT (memcmp (mb.buf, "\351", 1) == 0); /* U+00DF LATIN SMALL LETTER SHARP S */ mb = for_character ("\337", 1); ASSERT (mb.nbytes == 1); ASSERT (memcmp (mb.buf, "\337", 1) == 0); /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ mb = for_character ("\351", 1); ASSERT (mb.nbytes == 1); ASSERT (memcmp (mb.buf, "\351", 1) == 0); /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ mb = for_character ("\377", 1); ASSERT (mb.nbytes == 1); ASSERT (memcmp (mb.buf, "\377", 1) == 0); } return 0; case '2': /* Locale encoding is EUC-JP. */ { #if !((defined __APPLE__ && defined __MACH__) || defined __DragonFly__) /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ mb = for_character ("\217\252\261", 3); ASSERT (mb.nbytes == 3); ASSERT (memcmp (mb.buf, "\217\253\261", 3) == 0); #endif /* U+00DF LATIN SMALL LETTER SHARP S */ mb = for_character ("\217\251\316", 3); ASSERT (mb.nbytes == 3); ASSERT (memcmp (mb.buf, "\217\251\316", 3) == 0); /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ mb = for_character ("\217\253\261", 3); ASSERT (mb.nbytes == 3); ASSERT (memcmp (mb.buf, "\217\253\261", 3) == 0); /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ mb = for_character ("\217\253\363", 3); ASSERT (mb.nbytes == 3); ASSERT (memcmp (mb.buf, "\217\253\363", 3) == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __DragonFly__) /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ mb = for_character ("\217\251\250", 3); ASSERT (mb.nbytes == 3); ASSERT (memcmp (mb.buf, "\217\251\310", 3) == 0); #endif /* U+0142 LATIN SMALL LETTER L WITH STROKE */ mb = for_character ("\217\251\310", 3); ASSERT (mb.nbytes == 3); ASSERT (memcmp (mb.buf, "\217\251\310", 3) == 0); #if !defined __DragonFly__ /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ mb = for_character ("\247\273", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\247\353", 2) == 0); #endif /* U+0449 CYRILLIC SMALL LETTER SHCHA */ mb = for_character ("\247\353", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\247\353", 2) == 0); /* U+3073 HIRAGANA LETTER BI */ mb = for_character ("\244\323", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\244\323", 2) == 0); #if !defined __DragonFly__ /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ mb = for_character ("\243\307", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\243\347", 2) == 0); #endif /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ mb = for_character ("\243\347", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\243\347", 2) == 0); } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+00B2 SUPERSCRIPT TWO */ mb = for_character ("\302\262", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\302\262", 2) == 0); /* U+00B5 MICRO SIGN */ mb = for_character ("\302\265", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\302\265", 2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__) /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ mb = for_character ("\303\211", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\303\251", 2) == 0); #endif /* U+00DF LATIN SMALL LETTER SHARP S */ mb = for_character ("\303\237", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\303\237", 2) == 0); /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ mb = for_character ("\303\251", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\303\251", 2) == 0); /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ mb = for_character ("\303\277", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\303\277", 2) == 0); /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ mb = for_character ("\305\201", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\305\202", 2) == 0); /* U+0142 LATIN SMALL LETTER L WITH STROKE */ mb = for_character ("\305\202", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\305\202", 2) == 0); /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ mb = for_character ("\320\251", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\321\211", 2) == 0); /* U+0449 CYRILLIC SMALL LETTER SHCHA */ mb = for_character ("\321\211", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\321\211", 2) == 0); /* U+05D5 HEBREW LETTER VAV */ mb = for_character ("\327\225", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\327\225", 2) == 0); /* U+3073 HIRAGANA LETTER BI */ mb = for_character ("\343\201\263", 3); ASSERT (mb.nbytes == 3); ASSERT (memcmp (mb.buf, "\343\201\263", 3) == 0); /* U+3162 HANGUL LETTER YI */ mb = for_character ("\343\205\242", 3); ASSERT (mb.nbytes == 3); ASSERT (memcmp (mb.buf, "\343\205\242", 3) == 0); /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ mb = for_character ("\357\274\247", 3); ASSERT (mb.nbytes == 3); ASSERT (memcmp (mb.buf, "\357\275\207", 3) == 0); /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ mb = for_character ("\357\275\207", 3); ASSERT (mb.nbytes == 3); ASSERT (memcmp (mb.buf, "\357\275\207", 3) == 0); /* U+FFDB HALFWIDTH HANGUL LETTER YI */ mb = for_character ("\357\277\233", 3); ASSERT (mb.nbytes == 3); ASSERT (memcmp (mb.buf, "\357\277\233", 3) == 0); #if !(defined __DragonFly__ || defined __sun) /* U+10419 DESERET CAPITAL LETTER EF */ mb = for_character ("\360\220\220\231", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\360\220\221\201", 4) == 0); #endif /* U+10441 DESERET SMALL LETTER EF */ mb = for_character ("\360\220\221\201", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\360\220\221\201", 4) == 0); /* U+E0041 TAG LATIN CAPITAL LETTER A */ mb = for_character ("\363\240\201\201", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\363\240\201\201", 4) == 0); /* U+E0061 TAG LATIN SMALL LETTER A */ mb = for_character ("\363\240\201\241", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\363\240\201\241", 4) == 0); } return 0; case '4': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { /* U+00B2 SUPERSCRIPT TWO */ mb = for_character ("\201\060\205\065", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\201\060\205\065", 4) == 0); /* U+00B5 MICRO SIGN */ mb = for_character ("\201\060\205\070", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\201\060\205\070", 4) == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ mb = for_character ("\201\060\207\067", 4); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\250\246", 2) == 0); #endif /* U+00DF LATIN SMALL LETTER SHARP S */ mb = for_character ("\201\060\211\070", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\201\060\211\070", 4) == 0); /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ mb = for_character ("\250\246", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\250\246", 2) == 0); /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ mb = for_character ("\201\060\213\067", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\201\060\213\067", 4) == 0); #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ mb = for_character ("\201\060\221\071", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\201\060\222\060", 4) == 0); #endif /* U+0142 LATIN SMALL LETTER L WITH STROKE */ mb = for_character ("\201\060\222\060", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\201\060\222\060", 4) == 0); #if !(defined __FreeBSD__ || defined __DragonFly__) /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ mb = for_character ("\247\273", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\247\353", 2) == 0); #endif /* U+0449 CYRILLIC SMALL LETTER SHCHA */ mb = for_character ("\247\353", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\247\353", 2) == 0); /* U+05D5 HEBREW LETTER VAV */ mb = for_character ("\201\060\371\067", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\201\060\371\067", 4) == 0); /* U+3073 HIRAGANA LETTER BI */ mb = for_character ("\244\323", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\244\323", 2) == 0); /* U+3162 HANGUL LETTER YI */ mb = for_character ("\201\071\256\062", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\201\071\256\062", 4) == 0); #if !defined __DragonFly__ /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ mb = for_character ("\243\307", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\243\347", 2) == 0); #endif /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ mb = for_character ("\243\347", 2); ASSERT (mb.nbytes == 2); ASSERT (memcmp (mb.buf, "\243\347", 2) == 0); /* U+FFDB HALFWIDTH HANGUL LETTER YI */ mb = for_character ("\204\061\241\071", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\204\061\241\071", 4) == 0); #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) /* U+10419 DESERET CAPITAL LETTER EF */ mb = for_character ("\220\060\351\071", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\220\060\355\071", 4) == 0); #endif /* U+10441 DESERET SMALL LETTER EF */ mb = for_character ("\220\060\355\071", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\220\060\355\071", 4) == 0); /* U+E0041 TAG LATIN CAPITAL LETTER A */ mb = for_character ("\323\066\234\063", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\323\066\234\063", 4) == 0); /* U+E0061 TAG LATIN SMALL LETTER A */ mb = for_character ("\323\066\237\065", 4); ASSERT (mb.nbytes == 4); ASSERT (memcmp (mb.buf, "\323\066\237\065", 4) == 0); } return 0; } return 1; } ������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32width.c����������������������������������������������������0000644�0001750�0001750�00000007454�14557510507�015423� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of c32width() function. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (c32width, int, (char32_t)); #include <locale.h> #include <string.h> #include "c-ctype.h" #include "localcharset.h" #include "macros.h" int main () { char32_t wc; #if !GNULIB_WCHAR_SINGLE_LOCALE # ifdef C_CTYPE_ASCII /* Test width of ASCII characters. */ for (wc = 0x20; wc < 0x7F; wc++) ASSERT (c32width (wc) == 1); # endif #endif /* Switch to an UTF-8 locale. */ if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL /* Check whether it's really an UTF-8 locale. On OpenBSD 4.0, the setlocale call succeeds only for the LC_CTYPE category and therefore returns "C/fr_FR.UTF-8/C/C/C/C", but the LC_CTYPE category is effectively set to an ASCII LC_CTYPE category; in particular, locale_charset() returns "ASCII". */ && strcmp (locale_charset (), "UTF-8") == 0) { /* Test width of ASCII characters. */ for (wc = 0x20; wc < 0x7F; wc++) ASSERT (c32width (wc) == 1); /* Test width of some non-spacing characters. */ ASSERT (c32width (0x0301) == 0); ASSERT (c32width (0x05B0) == 0); /* Test width of some format control characters. */ ASSERT (c32width (0x200E) <= 0); ASSERT (c32width (0x2060) <= 0); ASSERT (c32width (0xE0001) <= 0); ASSERT (c32width (0xE0044) <= 0); /* Test width of some zero width characters. */ /* While it is desirable that U+200B, U+200C, U+200D have width 0, because this makes wcswidth work better on strings that contain these characters, it is acceptable if an implementation treats these characters like control characters. */ ASSERT (c32width (0x200B) <= 0); ASSERT (c32width (0xFEFF) <= 0); /* Test width of some math symbols. U+2202 is marked as having ambiguous width (A) in EastAsianWidth.txt (see <https://www.unicode.org/Public/12.0.0/ucd/EastAsianWidth.txt>). The Unicode Standard Annex 11 <https://www.unicode.org/reports/tr11/tr11-36.html> says "Ambiguous characters behave like wide or narrow characters depending on the context (language tag, script identification, associated font, source of data, or explicit markup; all can provide the context). If the context cannot be established reliably, they should be treated as narrow characters by default." For c32width(), the only available context information is the locale. "fr_FR.UTF-8" is a Western locale, not an East Asian locale, therefore U+2202 should be treated like a narrow character. */ ASSERT (c32width (0x2202) == 1); /* Test width of some CJK characters. */ ASSERT (c32width (0x3000) == 2); ASSERT (c32width (0xB250) == 2); ASSERT (c32width (0xFF1A) == 2); #if !(defined __FreeBSD__ && __FreeBSD__ < 13 && !defined __GLIBC__) ASSERT (c32width (0x20369) == 2); ASSERT (c32width (0x2F876) == 2); #endif } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-calloc-gnu.c��������������������������������������������������0000644�0001750�0001750�00000004000�14557510507�016000� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of calloc function. Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #include <stdint.h> #include "macros.h" /* Return N. Usual compilers are not able to infer something about the return value. */ static size_t identity (size_t n) { unsigned int x = rand (); unsigned int y = x * x * x * x; x++; y |= x * x * x * x; x++; y |= x * x * x * x; x++; y |= x * x * x * x; y = y >> 1; y &= -y; y -= 8; /* At this point Y is zero but GCC doesn't infer this. */ return n + y; } int main () { /* Check that calloc (0, 0) is not a NULL pointer. */ { void * volatile p = calloc (0, 0); ASSERT (p != NULL); free (p); } /* Check that calloc fails when requested to allocate a block of memory larger than PTRDIFF_MAX or SIZE_MAX bytes. Use 'identity' to avoid a compiler warning from GCC 7. 'volatile' is needed to defeat an incorrect optimization by clang 10, see <https://bugs.llvm.org/show_bug.cgi?id=46055>. */ { for (size_t n = 2; n != 0; n <<= 1) { void *volatile p = calloc (PTRDIFF_MAX / n + 1, identity (n)); ASSERT (p == NULL); ASSERT (errno == ENOMEM); p = calloc (SIZE_MAX / n + 1, identity (n)); ASSERT (p == NULL); ASSERT (errno == ENOMEM); } } return 0; } gnuastro-0.22/bootstrapped/tests/test-chdir.c�������������������������������������������������������0000644�0001750�0001750�00000001675�14557510507�015064� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test changing to a directory. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (chdir, int, (const char *)); #include "macros.h" int main (void) { ASSERT (chdir ("/") == 0); return 0; } �������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-cloexec.c�����������������������������������������������������0000644�0001750�0001750�00000010064�14557510507�015405� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test duplicating non-inheritable file descriptors. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include "cloexec.h" #include <errno.h> #include <fcntl.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif #include "binary-io.h" #include "macros.h" /* Return non-zero if FD is open and inheritable across exec/spawn. */ static int is_inheritable (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; if (h == INVALID_HANDLE_VALUE || GetHandleInformation (h, &flags) == 0) return 0; return (flags & HANDLE_FLAG_INHERIT) != 0; #else # ifndef F_GETFD # error Please port fcntl to your platform # endif int i = fcntl (fd, F_GETFD); return 0 <= i && (i & FD_CLOEXEC) == 0; #endif } #if !O_BINARY # define set_binary_mode my_set_binary_mode static int set_binary_mode (_GL_UNUSED int fd, _GL_UNUSED int mode) { return 0; } #endif /* Return non-zero if FD is open in the given MODE, which is either O_TEXT or O_BINARY. */ static int is_mode (int fd, int mode) { int value = set_binary_mode (fd, O_BINARY); set_binary_mode (fd, value); return mode == value; } int main (void) { const char *file = "test-cloexec.tmp"; int fd = creat (file, 0600); int fd2; int bad_fd = getdtablesize (); /* Assume std descriptors were provided by invoker. */ ASSERT (STDERR_FILENO < fd); ASSERT (is_inheritable (fd)); /* Normal use of set_cloexec_flag. */ ASSERT (set_cloexec_flag (fd, true) == 0); #if !(defined _WIN32 && ! defined __CYGWIN__) ASSERT (!is_inheritable (fd)); #endif ASSERT (set_cloexec_flag (fd, false) == 0); ASSERT (is_inheritable (fd)); /* Normal use of dup_cloexec. */ fd2 = dup_cloexec (fd); ASSERT (fd < fd2); ASSERT (!is_inheritable (fd2)); ASSERT (close (fd) == 0); ASSERT (dup_cloexec (fd2) == fd); ASSERT (!is_inheritable (fd)); ASSERT (close (fd2) == 0); /* On systems that distinguish between text and binary mode, dup_cloexec reuses the mode of the source. */ set_binary_mode (fd, O_BINARY); ASSERT (is_mode (fd, O_BINARY)); fd2 = dup_cloexec (fd); ASSERT (fd < fd2); ASSERT (is_mode (fd2, O_BINARY)); ASSERT (close (fd2) == 0); set_binary_mode (fd, O_TEXT); ASSERT (is_mode (fd, O_TEXT)); fd2 = dup_cloexec (fd); ASSERT (fd < fd2); ASSERT (is_mode (fd2, O_TEXT)); ASSERT (close (fd2) == 0); /* Test error handling. */ errno = 0; ASSERT (set_cloexec_flag (-1, false) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (set_cloexec_flag (bad_fd, false) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (set_cloexec_flag (fd2, false) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup_cloexec (-1) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup_cloexec (bad_fd) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup_cloexec (fd2) == -1); ASSERT (errno == EBADF); /* Clean up. */ ASSERT (close (fd) == 0); ASSERT (unlink (file) == 0); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-close.c�������������������������������������������������������0000644�0001750�0001750�00000002202�14557510507�015063� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test closing a file or socket. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (close, int, (int)); #include <errno.h> #include "macros.h" int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (close (-1) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (close (99) == -1); ASSERT (errno == EBADF); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-connect.c�����������������������������������������������������0000644�0001750�0001750�00000003143�14557510507�015414� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test connecting a client socket. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (connect, int, (int, const struct sockaddr *, socklen_t)); #include <errno.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { struct sockaddr_in addr; addr.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &addr.sin_addr); addr.sin_port = htons (80); { errno = 0; ASSERT (connect (-1, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (connect (99, (const struct sockaddr *) &addr, sizeof (addr)) == -1); ASSERT (errno == EBADF); } } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-creat.c�������������������������������������������������������0000644�0001750�0001750�00000003144�14557510507�015062� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of creating a file. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <fcntl.h> #include "signature.h" SIGNATURE_CHECK (creat, int, (const char *, mode_t)); #include <errno.h> #include <stdio.h> #include <unistd.h> #include "macros.h" #define BASE "test-creat.t" int main (void) { int fd; /* Remove anything from prior partial run. */ unlink (BASE "file"); unlink (BASE "e.exe"); /* Cannot create directory. */ errno = 0; ASSERT (creat ("nonexist.ent/", 0600) == -1); ASSERT (errno == ENOTDIR || errno == EISDIR || errno == ENOENT || errno == EINVAL); /* Create a regular file. */ fd = creat (BASE "file", 0600); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* Create an executable regular file. */ fd = creat (BASE "e.exe", 0700); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "e.exe") == 0); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-ctype.c�������������������������������������������������������0000644�0001750�0001750�00000001541�14557510507�015107� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <ctype.h> substitute. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <ctype.h> int main (void) { return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-dirent.c������������������������������������������������������0000644�0001750�0001750�00000001744�14557510507�015255� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <dirent.h> substitute. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <dirent.h> /* Check for existence of required types. */ _GL_UNUSED static DIR *dir; static struct dirent d; static ino_t i; int main (void) { return d.d_name[0] + i; } ����������������������������gnuastro-0.22/bootstrapped/tests/test-dirfd.c�������������������������������������������������������0000644�0001750�0001750�00000002662�14557510507�015060� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of dirfd() function. Copyright (C) 2023-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2023. */ #include <config.h> #include <dirent.h> #include <stdio.h> #include "macros.h" int main () { #if defined _WIN32 && !defined __CYGWIN__ fprintf (stderr, "Skipping test: The DIR type does not contain a file descriptor.\n"); return 77; #else /* On all other platforms, we expect to have either - a dirfd() function, or - a dirfd macro, or - a DIR struct with a d_fd member, or - a DIR struct with a dd_fd member. If we don't have this, dirfd.c produces a function that always returns -1. Check here that this does not happen. */ DIR *d = opendir ("."); int fd = dirfd (d); ASSERT (fd >= 0); return 0; #endif } ������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-dup.c���������������������������������������������������������0000644�0001750�0001750�00000002201�14557510507�014545� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test duplicating a file descriptor. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (dup, int, (int)); #include <errno.h> #include "macros.h" int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (dup (-1) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (dup (99) == -1); ASSERT (errno == EBADF); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-dup-safer.c���������������������������������������������������0000644�0001750�0001750�00000011705�14557510507�015654� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that dup_safer leaves standard fds alone. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include "unistd--.h" #include <fcntl.h> #include <errno.h> #include <stdio.h> #include <unistd.h> #include "binary-io.h" #include "cloexec.h" #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif #if !O_BINARY # define set_binary_mode my_set_binary_mode static int set_binary_mode (_GL_UNUSED int fd, _GL_UNUSED int mode) { return 0; } #endif /* This test intentionally closes stderr. So, we arrange to have fd 10 (outside the range of interesting fd's during the test) set up to duplicate the original stderr. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; /* Return true if FD is open. */ static bool is_open (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } /* Return true if FD is open and inheritable across exec/spawn. */ static bool is_inheritable (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; if (h == INVALID_HANDLE_VALUE || GetHandleInformation (h, &flags) == 0) return 0; return (flags & HANDLE_FLAG_INHERIT) != 0; #else # ifndef F_GETFD # error Please port fcntl to your platform # endif int i = fcntl (fd, F_GETFD); return 0 <= i && (i & FD_CLOEXEC) == 0; #endif } /* Return true if FD is open in the given MODE, which is either O_TEXT or O_BINARY. */ static bool is_mode (int fd, int mode) { int value = set_binary_mode (fd, O_BINARY); set_binary_mode (fd, value); return mode == value; } #define witness "test-dup-safer.txt" int main (void) { int i; int fd; int bad_fd = getdtablesize (); /* We close fd 2 later, so save it in fd 10. */ if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) return 2; /* Create file for later checks. */ fd = creat (witness, 0600); ASSERT (STDERR_FILENO < fd); /* Four iterations, with progressively more standard descriptors closed. */ for (i = -1; i <= STDERR_FILENO; i++) { if (0 <= i) ASSERT (close (i) == 0); /* Detect errors. */ errno = 0; ASSERT (dup (-1) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup (bad_fd) == -1); ASSERT (errno == EBADF); close (fd + 1); errno = 0; ASSERT (dup (fd + 1) == -1); ASSERT (errno == EBADF); /* Preserve text vs. binary. */ set_binary_mode (fd, O_BINARY); ASSERT (dup (fd) == fd + 1); ASSERT (is_open (fd + 1)); ASSERT (is_inheritable (fd + 1)); ASSERT (is_mode (fd + 1, O_BINARY)); ASSERT (close (fd + 1) == 0); set_binary_mode (fd, O_TEXT); ASSERT (dup (fd) == fd + 1); ASSERT (is_open (fd + 1)); ASSERT (is_inheritable (fd + 1)); ASSERT (is_mode (fd + 1, O_TEXT)); /* Create cloexec copy. */ ASSERT (close (fd + 1) == 0); ASSERT (fd_safer_flag (dup_cloexec (fd), O_CLOEXEC) == fd + 1); ASSERT (set_cloexec_flag (fd + 1, true) == 0); ASSERT (is_open (fd + 1)); ASSERT (!is_inheritable (fd + 1)); ASSERT (close (fd) == 0); /* dup always creates inheritable copies. Also, check that earliest slot past std fds is used. */ ASSERT (dup (fd + 1) == fd); ASSERT (is_open (fd)); ASSERT (is_inheritable (fd)); ASSERT (close (fd + 1) == 0); } /* Cleanup. */ ASSERT (close (fd) == 0); ASSERT (unlink (witness) == 0); return 0; } �����������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-dup2.c��������������������������������������������������������0000644�0001750�0001750�00000014443�14557510507�014642� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test duplicating file descriptors. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (dup2, int, (int, int)); #include <errno.h> #include <fcntl.h> #if HAVE_SYS_RESOURCE_H # include <sys/resource.h> #endif #include "binary-io.h" #if GNULIB_TEST_CLOEXEC # include "cloexec.h" #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif #include "macros.h" /* Tell GCC not to warn about the specific edge cases tested here. */ #if __GNUC__ >= 13 # pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" # pragma GCC diagnostic ignored "-Wanalyzer-fd-use-without-check" #endif /* Return non-zero if FD is open. */ static int is_open (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } #if GNULIB_TEST_CLOEXEC /* Return non-zero if FD is open and inheritable across exec/spawn. */ static int is_inheritable (int fd) { # if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; if (h == INVALID_HANDLE_VALUE || GetHandleInformation (h, &flags) == 0) return 0; return (flags & HANDLE_FLAG_INHERIT) != 0; # else # ifndef F_GETFD # error Please port fcntl to your platform # endif int i = fcntl (fd, F_GETFD); return 0 <= i && (i & FD_CLOEXEC) == 0; # endif } #endif /* GNULIB_TEST_CLOEXEC */ #if !O_BINARY # define set_binary_mode my_set_binary_mode static int set_binary_mode (_GL_UNUSED int fd, _GL_UNUSED int mode) { return 0; } #endif /* Return non-zero if FD is open in the given MODE, which is either O_TEXT or O_BINARY. */ static int is_mode (int fd, int mode) { int value = set_binary_mode (fd, O_BINARY); set_binary_mode (fd, value); return mode == value; } int main (void) { const char *file = "test-dup2.tmp"; char buffer[1]; int bad_fd = getdtablesize (); int fd = open (file, O_CREAT | O_TRUNC | O_RDWR, 0600); /* Assume std descriptors were provided by invoker. */ ASSERT (STDERR_FILENO < fd); ASSERT (is_open (fd)); /* Ignore any other fd's leaked into this process. */ close (fd + 1); close (fd + 2); ASSERT (!is_open (fd + 1)); ASSERT (!is_open (fd + 2)); /* Assigning to self must be a no-op. */ ASSERT (dup2 (fd, fd) == fd); ASSERT (is_open (fd)); /* The source must be valid. */ errno = 0; ASSERT (dup2 (-1, fd) == -1); ASSERT (errno == EBADF); close (99); errno = 0; ASSERT (dup2 (99, fd) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (dup2 (AT_FDCWD, fd) == -1); ASSERT (errno == EBADF); ASSERT (is_open (fd)); /* If the source is not open, then the destination is unaffected. */ errno = 0; ASSERT (dup2 (fd + 1, fd + 1) == -1); ASSERT (errno == EBADF); ASSERT (!is_open (fd + 1)); errno = 0; ASSERT (dup2 (fd + 1, fd) == -1); ASSERT (errno == EBADF); ASSERT (is_open (fd)); /* The destination must be valid. */ errno = 0; ASSERT (dup2 (fd, -2) == -1); ASSERT (errno == EBADF); if (bad_fd > 256) { ASSERT (dup2 (fd, 255) == 255); ASSERT (dup2 (fd, 256) == 256); ASSERT (close (255) == 0); ASSERT (close (256) == 0); } ASSERT (dup2 (fd, bad_fd - 1) == bad_fd - 1); ASSERT (close (bad_fd - 1) == 0); errno = 0; ASSERT (dup2 (fd, bad_fd) == -1); ASSERT (errno == EBADF); /* Using dup2 can skip fds. */ ASSERT (dup2 (fd, fd + 2) == fd + 2); ASSERT (is_open (fd)); ASSERT (!is_open (fd + 1)); ASSERT (is_open (fd + 2)); /* Verify that dup2 closes the previous occupant of a fd. */ ASSERT (open ("/dev/null", O_WRONLY, 0600) == fd + 1); ASSERT (dup2 (fd + 1, fd) == fd); ASSERT (close (fd + 1) == 0); ASSERT (write (fd, "1", 1) == 1); ASSERT (dup2 (fd + 2, fd) == fd); ASSERT (lseek (fd, 0, SEEK_END) == 0); ASSERT (write (fd + 2, "2", 1) == 1); ASSERT (lseek (fd, 0, SEEK_SET) == 0); ASSERT (read (fd, buffer, 1) == 1); ASSERT (*buffer == '2'); #if GNULIB_TEST_CLOEXEC /* Any new fd created by dup2 must not be cloexec. */ ASSERT (close (fd + 2) == 0); ASSERT (dup_cloexec (fd) == fd + 1); ASSERT (!is_inheritable (fd + 1)); ASSERT (dup2 (fd + 1, fd + 1) == fd + 1); ASSERT (!is_inheritable (fd + 1)); ASSERT (dup2 (fd + 1, fd + 2) == fd + 2); ASSERT (!is_inheritable (fd + 1)); ASSERT (is_inheritable (fd + 2)); errno = 0; ASSERT (dup2 (fd + 1, -1) == -1); ASSERT (errno == EBADF); ASSERT (!is_inheritable (fd + 1)); #endif /* On systems that distinguish between text and binary mode, dup2 reuses the mode of the source. */ set_binary_mode (fd, O_BINARY); ASSERT (is_mode (fd, O_BINARY)); ASSERT (dup2 (fd, fd + 1) == fd + 1); ASSERT (is_mode (fd + 1, O_BINARY)); set_binary_mode (fd, O_TEXT); ASSERT (is_mode (fd, O_TEXT)); ASSERT (dup2 (fd, fd + 1) == fd + 1); ASSERT (is_mode (fd + 1, O_TEXT)); /* Clean up. */ ASSERT (close (fd + 2) == 0); ASSERT (close (fd + 1) == 0); ASSERT (close (fd) == 0); ASSERT (unlink (file) == 0); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-dynarray.c����������������������������������������������������0000644�0001750�0001750�00000002513�14557510507�015614� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of type-safe arrays that grow dynamically. Copyright (C) 2021-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2021. */ #include <config.h> #define DYNARRAY_STRUCT int_sequence #define DYNARRAY_ELEMENT int #define DYNARRAY_PREFIX intseq_ #include "dynarray.h" #include "macros.h" #define N 100000 static int value_at (long long int i) { return (i % 13) + ((i * i) % 251); } int main () { struct int_sequence s; int i; intseq_init (&s); for (i = 0; i < N; i++) intseq_add (&s, value_at (i)); for (i = N - 1; i >= N / 2; i--) { ASSERT (* intseq_at (&s, i) == value_at (i)); intseq_remove_last (&s); } intseq_free (&s); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-environ.c�����������������������������������������������������0000644�0001750�0001750�00000002730�14557510507�015444� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of environ variable. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <unistd.h> #include <string.h> int main () { /* The environment variables that are set even in the weirdest situations are HOME and PATH. POSIX says that HOME is initialized by the system, and that PATH may be unset. But in practice it's more frequent to see HOME unset and PATH set. So we test the presence of PATH. */ char **remaining_variables = environ; char *string; for (; (string = *remaining_variables) != NULL; remaining_variables++) { if (strncmp (string, "PATH=", 5) == 0) /* Found the PATH environment variable. */ return 0; } /* Failed to find the PATH environment variable. */ return 1; } ����������������������������������������gnuastro-0.22/bootstrapped/tests/test-errno.c�������������������������������������������������������0000644�0001750�0001750�00000005555�14557510507�015121� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <errno.h> substitute. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <errno.h> /* Verify that the POSIX mandated errno values exist and can be used as initializers outside of a function. The variable names happen to match the Linux/x86 error numbers. */ int e1 = EPERM; int e2 = ENOENT; int e3 = ESRCH; int e4 = EINTR; int e5 = EIO; int e6 = ENXIO; int e7 = E2BIG; int e8 = ENOEXEC; int e9 = EBADF; int e10 = ECHILD; int e11 = EAGAIN; int e11a = EWOULDBLOCK; int e12 = ENOMEM; int e13 = EACCES; int e14 = EFAULT; int e16 = EBUSY; int e17 = EEXIST; int e18 = EXDEV; int e19 = ENODEV; int e20 = ENOTDIR; int e21 = EISDIR; int e22 = EINVAL; int e23 = ENFILE; int e24 = EMFILE; int e25 = ENOTTY; int e26 = ETXTBSY; int e27 = EFBIG; int e28 = ENOSPC; int e29 = ESPIPE; int e30 = EROFS; int e31 = EMLINK; int e32 = EPIPE; int e33 = EDOM; int e34 = ERANGE; int e35 = EDEADLK; int e36 = ENAMETOOLONG; int e37 = ENOLCK; int e38 = ENOSYS; int e39 = ENOTEMPTY; int e40 = ELOOP; int e42 = ENOMSG; int e43 = EIDRM; int e67 = ENOLINK; int e71 = EPROTO; int e72 = EMULTIHOP; int e74 = EBADMSG; int e75 = EOVERFLOW; int e84 = EILSEQ; int e88 = ENOTSOCK; int e89 = EDESTADDRREQ; int e90 = EMSGSIZE; int e91 = EPROTOTYPE; int e92 = ENOPROTOOPT; int e93 = EPROTONOSUPPORT; int e95 = EOPNOTSUPP; int e95a = ENOTSUP; int e97 = EAFNOSUPPORT; int e98 = EADDRINUSE; int e99 = EADDRNOTAVAIL; int e100 = ENETDOWN; int e101 = ENETUNREACH; int e102 = ENETRESET; int e103 = ECONNABORTED; int e104 = ECONNRESET; int e105 = ENOBUFS; int e106 = EISCONN; int e107 = ENOTCONN; int e110 = ETIMEDOUT; int e111 = ECONNREFUSED; int e113 = EHOSTUNREACH; int e114 = EALREADY; int e115 = EINPROGRESS; int e116 = ESTALE; int e122 = EDQUOT; int e125 = ECANCELED; int e130 = EOWNERDEAD; int e131 = ENOTRECOVERABLE; /* Don't verify that these errno values are all different, except for possibly EWOULDBLOCK == EAGAIN. Even Linux/x86 does not pass this check: it has ENOTSUP == EOPNOTSUPP. */ int main () { /* Verify that errno can be assigned. */ errno = EOVERFLOW; /* snprintf() callers want to distinguish EINVAL and EOVERFLOW. */ if (errno == EINVAL) return 1; return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-error.c�������������������������������������������������������0000644�0001750�0001750�00000005620�14557510507�015116� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of error.h functions. Copyright (C) 2023-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2023. */ #include <config.h> /* Specification. */ #include <error.h> #include <errno.h> #include "macros.h" /* Custom function to not show the program name in error messages. */ static void print_no_progname (void) { } int main () { /* Test error() function with zero STATUS and zero ERRNUM. */ error (0, 0, "bummer"); /* With format string arguments. */ errno = EINVAL; /* should be ignored */ error (0, 0, "Zonk %d%d%d is too large", 1, 2, 3); /* With non-ASCII characters. */ error (0, 0, "Pokémon started"); /* Verify error_message_count. */ ASSERT (error_message_count == 3); /* Test error_at_line() function with zero STATUS and zero ERRNUM. */ error_at_line (0, 0, "d1/foo.c", 10, "invalid blub"); error_at_line (0, 0, "d1/foo.c", 10, "invalid blarn"); /* Verify error_message_count. */ ASSERT (error_message_count == 5); /* Test error_one_per_line. */ error_one_per_line = 1; error_at_line (0, 0, "d1/foo.c", 10, "unsupported glink"); /* Another line number. */ error_at_line (0, 0, "d1/foo.c", 13, "invalid brump"); /* Another file name. */ error_at_line (0, 0, "d2/foo.c", 13, "unsupported flinge"); /* Same file name and same line number => message not shown. */ error_at_line (0, 0, "d2/foo.c", 13, "invalid bark"); /* Verify error_message_count. */ ASSERT (error_message_count == 8); error_one_per_line = 0; /* Test error_print_progname. */ error_print_progname = print_no_progname; error (0, 0, "hammer"); error (0, 0, "boing %d%d%d is too large", 1, 2, 3); #if 0 /* The documentation does not describe the output if the file name is NULL. */ error_at_line (0, 0, NULL, 42, "drummer too loud"); #endif error_at_line (0, 0, "d2/bar.c", 11, "bark too loud"); /* Verify error_message_count. */ ASSERT (error_message_count == 11); error_print_progname = NULL; /* Test error() function with nonzero ERRNUM. */ errno = EINVAL; /* should be ignored */ error (0, EACCES, "can't steal"); /* Verify error_message_count. */ ASSERT (error_message_count == 12); /* Test error() function with nonzero STATUS. */ error (4, 0, "fatal error"); return 0; } ����������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-euidaccess.c��������������������������������������������������0000644�0001750�0001750�00000002061�14557510507�016071� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of euidaccess. Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (euidaccess, int, (const char *, int)); #include <errno.h> #include <fcntl.h> #include <sys/stat.h> #include "root-uid.h" #include "macros.h" #define BASE "test-euidaccess.t" #include "test-access.h" int main () { test_access (euidaccess); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-faccessat.c���������������������������������������������������0000644�0001750�0001750�00000006600�14557510507�015720� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test checking user's permissions for a file. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (faccessat, int, (int, const char *, int, int)); #include <errno.h> #include <fcntl.h> #include "macros.h" #define BASE "test-faccessat.t" int main (void) { /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (faccessat (-1, "foo", F_OK, 0) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (faccessat (99, "foo", F_OK, 0) == -1); ASSERT (errno == EBADF); } /* Test behavior with trailing slash. */ unlink (BASE "file"); ASSERT (faccessat (AT_FDCWD, ".", X_OK, 0) == 0); ASSERT (faccessat (AT_FDCWD, "./", X_OK, 0) == 0); ASSERT (close (open (BASE "file", O_CREAT | O_WRONLY, 0)) == 0); ASSERT (faccessat (AT_FDCWD, BASE "file", F_OK, 0) == 0); ASSERT (faccessat (AT_FDCWD, BASE "file/", F_OK, 0) != 0); ASSERT (errno == ENOTDIR); ASSERT (faccessat (AT_FDCWD, BASE "file/", R_OK, 0) != 0); ASSERT (errno == ENOTDIR); ASSERT (faccessat (AT_FDCWD, BASE "file/", W_OK, 0) != 0); ASSERT (errno == ENOTDIR); ASSERT (faccessat (AT_FDCWD, BASE "file/", X_OK, 0) != 0); ASSERT (errno == ENOTDIR); unlink (BASE "link1"); if (symlink (".", BASE "link1") == 0) { ASSERT (faccessat (AT_FDCWD, BASE "link1", X_OK, 0) == 0); ASSERT (faccessat (AT_FDCWD, BASE "link1/", X_OK, 0) == 0); unlink (BASE "link2"); ASSERT (symlink (BASE "file", BASE "link2") == 0); ASSERT (faccessat (AT_FDCWD, BASE "link2", F_OK, 0) == 0); ASSERT (faccessat (AT_FDCWD, BASE "link2/", F_OK, 0) != 0); ASSERT (errno == ENOTDIR); ASSERT (faccessat (AT_FDCWD, BASE "link2/", R_OK, 0) != 0); ASSERT (errno == ENOTDIR || errno == EACCES); ASSERT (faccessat (AT_FDCWD, BASE "link2/", W_OK, 0) != 0); ASSERT (errno == ENOTDIR || errno == EACCES); ASSERT (faccessat (AT_FDCWD, BASE "link2/", X_OK, 0) != 0); ASSERT (errno == ENOTDIR || errno == EACCES); unlink (BASE "link2"); unlink (BASE "link3"); ASSERT (symlink (BASE "no-such-file", BASE "link3") == 0); ASSERT (faccessat (AT_FDCWD, BASE "link3", F_OK, 0) != 0); ASSERT (errno == ENOENT); ASSERT (faccessat (AT_FDCWD, BASE "link3/", F_OK, 0) != 0); ASSERT (errno == ENOENT); ASSERT (faccessat (AT_FDCWD, BASE "link3/", R_OK, 0) != 0); ASSERT (errno == ENOENT); ASSERT (faccessat (AT_FDCWD, BASE "link3/", W_OK, 0) != 0); ASSERT (errno == ENOENT); ASSERT (faccessat (AT_FDCWD, BASE "link3/", X_OK, 0) != 0); ASSERT (errno == ENOENT); unlink (BASE "link3"); } unlink (BASE "link1"); unlink (BASE "file"); return 0; } ��������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-fchdir.c������������������������������������������������������0000644�0001750�0001750�00000005612�14557510507�015225� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test changing to a directory named by a file descriptor. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (fchdir, int, (int)); #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #include "cloexec.h" #include "macros.h" int main (void) { char *cwd; int fd; int i; cwd = getcwd (NULL, 0); ASSERT (cwd); fd = open (".", O_RDONLY); ASSERT (0 <= fd); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (fchdir (-1) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (fchdir (99) == -1); ASSERT (errno == EBADF); } /* Check for other failure cases. */ { int bad_fd = open ("/dev/null", O_RDONLY); ASSERT (0 <= bad_fd); errno = 0; ASSERT (fchdir (bad_fd) == -1); ASSERT (errno == ENOTDIR); ASSERT (close (bad_fd) == 0); } /* Repeat test twice, once in '.' and once in '..'. */ for (i = 0; i < 2; i++) { ASSERT (chdir (&".."[1 - i]) == 0); ASSERT (fchdir (fd) == 0); { size_t len = strlen (cwd) + 1; char *new_dir = malloc (len); ASSERT (new_dir); ASSERT (getcwd (new_dir, len) == new_dir); ASSERT (strcmp (cwd, new_dir) == 0); free (new_dir); } /* For second iteration, use a cloned fd, to ensure that dup remembers whether an fd was associated with a directory. */ if (!i) { int new_fd = dup (fd); ASSERT (0 <= new_fd); ASSERT (close (fd) == 0); ASSERT (dup2 (new_fd, fd) == fd); ASSERT (close (new_fd) == 0); ASSERT (dup_cloexec (fd) == new_fd); ASSERT (dup2 (new_fd, fd) == fd); ASSERT (close (new_fd) == 0); ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, new_fd) == new_fd); ASSERT (close (fd) == 0); ASSERT (fcntl (new_fd, F_DUPFD, fd) == fd); ASSERT (close (new_fd) == 0); #if GNULIB_TEST_DUP3 ASSERT (dup3 (fd, new_fd, 0) == new_fd); ASSERT (dup3 (new_fd, fd, 0) == fd); ASSERT (close (new_fd) == 0); #endif } } free (cwd); return 0; } ����������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-fcntl.c�������������������������������������������������������0000644�0001750�0001750�00000025524�14557510507�015100� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fcntl(2). Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> /* Specification. */ #include <fcntl.h> #include "signature.h" SIGNATURE_CHECK (fcntl, int, (int, int, ...)); /* Helpers. */ #include <errno.h> #include <stdarg.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif #include "binary-io.h" #include "macros.h" /* Tell GCC not to warn about the specific edge cases tested here. */ #if __GNUC__ >= 13 # pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" # pragma GCC diagnostic ignored "-Wanalyzer-va-arg-type-mismatch" #endif #if !O_BINARY # define set_binary_mode my_set_binary_mode static int set_binary_mode (_GL_UNUSED int fd, _GL_UNUSED int mode) { return 0; } #endif /* Return true if FD is open. */ static bool is_open (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } /* Return true if FD is open and inheritable across exec/spawn. */ static bool is_inheritable (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; if (h == INVALID_HANDLE_VALUE || GetHandleInformation (h, &flags) == 0) return false; return (flags & HANDLE_FLAG_INHERIT) != 0; #else # ifndef F_GETFD # error Please port fcntl to your platform # endif int i = fcntl (fd, F_GETFD); return 0 <= i && (i & FD_CLOEXEC) == 0; #endif } /* Return non-zero if FD is open in the given MODE, which is either O_TEXT or O_BINARY. */ static bool is_mode (int fd, int mode) { int value = set_binary_mode (fd, O_BINARY); set_binary_mode (fd, value); return mode == value; } /* Since native fcntl can have more supported operations than our replacement is aware of, and since various operations assign different types to the vararg argument, a wrapper around fcntl must be able to pass a vararg of unknown type on through to the original fcntl. Make sure that this works properly: func1 behaves like the original fcntl interpreting the vararg as an int or a pointer to a struct, and func2 behaves like rpl_fcntl that doesn't know what type to forward. */ struct dummy_struct { long filler; int value; }; static int func1 (int a, ...) { va_list arg; int i; va_start (arg, a); if (a < 4) i = va_arg (arg, int); else { struct dummy_struct *s = va_arg (arg, struct dummy_struct *); i = s->value; } va_end (arg); return i; } static int func2 (int a, ...) { va_list arg; void *p; va_start (arg, a); p = va_arg (arg, void *); va_end (arg); return func1 (a, p); } /* Ensure that all supported fcntl actions are distinct, and usable in preprocessor expressions. */ static void check_flags (void) { switch (0) { case F_DUPFD: #if F_DUPFD #endif case F_DUPFD_CLOEXEC: #if F_DUPFD_CLOEXEC #endif case F_GETFD: #if F_GETFD #endif #ifdef F_SETFD case F_SETFD: # if F_SETFD # endif #endif #ifdef F_GETFL case F_GETFL: # if F_GETFL # endif #endif #ifdef F_SETFL case F_SETFL: # if F_SETFL # endif #endif #ifdef F_GETOWN case F_GETOWN: # if F_GETOWN # endif #endif #ifdef F_SETOWN case F_SETOWN: # if F_SETOWN # endif #endif #ifdef F_GETLK case F_GETLK: # if F_GETLK # endif #endif #ifdef F_SETLK case F_SETLK: # if F_SETLK # endif #endif #ifdef F_SETLKW case F_SETLKW: # if F_SETLKW # endif #endif default: ; } } int main (int argc, _GL_UNUSED char *argv[]) { if (argc > 1) /* child process */ return (is_open (10) ? 42 : 0); const char *file = "test-fcntl.tmp"; int fd; int bad_fd = getdtablesize (); /* Sanity check that rpl_fcntl is likely to work. */ ASSERT (func2 (1, 2) == 2); ASSERT (func2 (2, -2) == -2); ASSERT (func2 (3, 0x80000000) == 0x80000000); { struct dummy_struct s = { 0L, 4 }; ASSERT (func2 (4, &s) == 4); } check_flags (); /* Assume std descriptors were provided by invoker, and ignore fds that might have been inherited. */ fd = creat (file, 0600); ASSERT (STDERR_FILENO < fd); close (fd + 1); close (fd + 2); /* For F_DUPFD*, the source must be valid. */ errno = 0; ASSERT (fcntl (-1, F_DUPFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_DUPFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_DUPFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (-1, F_DUPFD_CLOEXEC, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_DUPFD_CLOEXEC, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_DUPFD_CLOEXEC, 0) == -1); ASSERT (errno == EBADF); /* For F_DUPFD*, the destination must be valid. */ errno = 0; ASSERT (fcntl (fd, F_DUPFD, -1) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (fcntl (fd, F_DUPFD, bad_fd) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, -1) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, bad_fd) == -1); ASSERT (errno == EINVAL || errno == EMFILE /* WSL */); /* For F_DUPFD*, check for correct inheritance, as well as preservation of text vs. binary. */ set_binary_mode (fd, O_BINARY); ASSERT (is_open (fd)); ASSERT (!is_open (fd + 1)); ASSERT (!is_open (fd + 2)); ASSERT (is_inheritable (fd)); ASSERT (is_mode (fd, O_BINARY)); ASSERT (fcntl (fd, F_DUPFD, fd) == fd + 1); ASSERT (is_open (fd)); ASSERT (is_open (fd + 1)); ASSERT (!is_open (fd + 2)); ASSERT (is_inheritable (fd + 1)); ASSERT (is_mode (fd, O_BINARY)); ASSERT (is_mode (fd + 1, O_BINARY)); ASSERT (close (fd + 1) == 0); ASSERT (fcntl (fd, F_DUPFD_CLOEXEC, fd + 2) == fd + 2); ASSERT (is_open (fd)); ASSERT (!is_open (fd + 1)); ASSERT (is_open (fd + 2)); ASSERT (is_inheritable (fd)); ASSERT (!is_inheritable (fd + 2)); ASSERT (is_mode (fd, O_BINARY)); ASSERT (is_mode (fd + 2, O_BINARY)); ASSERT (close (fd) == 0); set_binary_mode (fd + 2, O_TEXT); ASSERT (fcntl (fd + 2, F_DUPFD, fd + 1) == fd + 1); ASSERT (!is_open (fd)); ASSERT (is_open (fd + 1)); ASSERT (is_open (fd + 2)); ASSERT (is_inheritable (fd + 1)); ASSERT (!is_inheritable (fd + 2)); ASSERT (is_mode (fd + 1, O_TEXT)); ASSERT (is_mode (fd + 2, O_TEXT)); ASSERT (close (fd + 1) == 0); ASSERT (fcntl (fd + 2, F_DUPFD_CLOEXEC, 0) == fd); ASSERT (is_open (fd)); ASSERT (!is_open (fd + 1)); ASSERT (is_open (fd + 2)); ASSERT (!is_inheritable (fd)); ASSERT (!is_inheritable (fd + 2)); ASSERT (is_mode (fd, O_TEXT)); ASSERT (is_mode (fd + 2, O_TEXT)); ASSERT (close (fd + 2) == 0); /* Test F_GETFD on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_GETFD) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_GETFD) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_GETFD) == -1); ASSERT (errno == EBADF); /* Test F_GETFD, the FD_CLOEXEC bit. */ { int result = fcntl (fd, F_GETFD); ASSERT (0 <= result); ASSERT ((result & FD_CLOEXEC) == FD_CLOEXEC); ASSERT (dup (fd) == fd + 1); result = fcntl (fd + 1, F_GETFD); ASSERT (0 <= result); ASSERT ((result & FD_CLOEXEC) == 0); ASSERT (close (fd + 1) == 0); } #ifdef F_SETFD /* Test F_SETFD on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_SETFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_SETFD, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_SETFD, 0) == -1); ASSERT (errno == EBADF); #endif #ifdef F_GETFL /* Test F_GETFL on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_GETFL) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_GETFL) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_GETFL) == -1); ASSERT (errno == EBADF); #endif #ifdef F_SETFL /* Test F_SETFL on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_SETFL, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_SETFL, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_SETFL, 0) == -1); ASSERT (errno == EBADF); #endif #ifdef F_GETOWN /* Test F_GETOWN on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_GETOWN) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_GETOWN) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_GETOWN) == -1); ASSERT (errno == EBADF); #endif #ifdef F_SETOWN /* Test F_SETFL on invalid file descriptors. */ errno = 0; ASSERT (fcntl (-1, F_SETOWN, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (fd + 1, F_SETOWN, 0) == -1); ASSERT (errno == EBADF); errno = 0; ASSERT (fcntl (bad_fd, F_SETOWN, 0) == -1); ASSERT (errno == EBADF); #endif /* Cleanup. */ ASSERT (close (fd) == 0); ASSERT (unlink (file) == 0); /* Close file descriptors that may have been inherited from the parent process and that would cause failures below. Such file descriptors have been seen: - with GNU make, when invoked as 'make -j N' with j > 1, - in some versions of the KDE desktop environment, - on NetBSD, - in MacPorts with the "trace mode" enabled. */ (void) close (10); /* Test whether F_DUPFD_CLOEXEC is effective. */ ASSERT (fcntl (1, F_DUPFD_CLOEXEC, 10) >= 0); #if defined _WIN32 && !defined __CYGWIN__ return _execl ("./test-fcntl", "./test-fcntl", "child", NULL); #else return execl ("./test-fcntl", "./test-fcntl", "child", NULL); #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-fcntl-h.c�����������������������������������������������������0000644�0001750�0001750�00000005543�14557510507�015324� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <fcntl.h> substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <fcntl.h> /* Check that the various O_* macros are defined. */ int o = (O_DIRECT | O_DIRECTORY | O_DSYNC | O_IGNORE_CTTY | O_NDELAY | O_NOATIME | O_NONBLOCK | O_NOCTTY | O_NOFOLLOW | O_NOLINK | O_NOLINKS | O_NOTRANS | O_RSYNC | O_SYNC | O_TTY_INIT | O_BINARY | O_TEXT); /* Check that the various SEEK_* macros are defined. */ int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; /* Check that the FD_* macros are defined. */ int i = FD_CLOEXEC; /* Check that the types are all defined. */ pid_t t1; off_t t2; mode_t t3; int main (void) { /* Ensure no overlap in SEEK_*. */ switch (0) { case SEEK_CUR: case SEEK_END: case SEEK_SET: ; } /* Ensure no dangerous overlap in non-zero gnulib-defined replacements. */ switch (O_RDONLY) { /* Access modes */ case O_RDONLY: case O_WRONLY: case O_RDWR: #if O_EXEC && O_EXEC != O_RDONLY case O_EXEC: #endif #if O_SEARCH && O_EXEC != O_SEARCH && O_SEARCH != O_RDONLY case O_SEARCH: #endif i = ! (~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH)); break; /* Everyone should have these */ case O_CREAT: case O_EXCL: case O_TRUNC: case O_APPEND: break; /* These might be 0 or O_RDONLY, only test non-zero versions. */ #if O_CLOEXEC case O_CLOEXEC: #endif #if O_DIRECT case O_DIRECT: #endif #if O_DIRECTORY case O_DIRECTORY: #endif #if O_DSYNC case O_DSYNC: #endif #if O_IGNORE_CTTY case O_IGNORE_CTTY: #endif #if O_NOATIME case O_NOATIME: #endif #if O_NONBLOCK case O_NONBLOCK: #endif #if O_NOCTTY case O_NOCTTY: #endif #if O_NOFOLLOW case O_NOFOLLOW: #endif #if O_NOLINK case O_NOLINK: #endif #if O_NOLINKS case O_NOLINKS: #endif #if O_NOTRANS case O_NOTRANS: #endif #if O_RSYNC && O_RSYNC != O_DSYNC case O_RSYNC: #endif #if O_SYNC && O_SYNC != O_DSYNC && O_SYNC != O_RSYNC case O_SYNC: #endif #if O_TTY_INIT case O_TTY_INIT: #endif #if O_BINARY case O_BINARY: #endif #if O_TEXT case O_TEXT: #endif ; } return !i; } �������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-fdopen.c������������������������������������������������������0000644�0001750�0001750�00000002722�14557510507�015240� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test opening a stream with a file descriptor. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (fdopen, FILE *, (int, const char *)); #include <errno.h> #include <unistd.h> #include "macros.h" int main (void) { /* Test behavior on failure. POSIX makes it hard to check for failure, since the behavior is not well-defined on invalid file descriptors, so try fdopen 1000 times and if that's not enough to fail due to EMFILE, so be it. */ #if defined __ANDROID__ /* fdsan */ #define COUNT 1 #else #define COUNT 1000 #endif int i; for (i = 0; i < COUNT; i++) { errno = 0; if (! fdopen (STDOUT_FILENO, "w")) { ASSERT (errno != 0); break; } } return 0; } ����������������������������������������������gnuastro-0.22/bootstrapped/tests/test-fgetc.c�������������������������������������������������������0000644�0001750�0001750�00000005020�14557510507�015047� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fgetc() function. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (fgetc, int, (FILE *)); #include <errno.h> #include <fcntl.h> #include <unistd.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #include "macros.h" int main () { const char *filename = "test-fgetc.txt"; /* We don't have an fgetc() function that installs an invalid parameter handler so far. So install that handler here, explicitly. */ #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING gl_msvc_inval_ensure_handler (); #endif /* Prepare a file. */ { const char text[] = "hello world"; int fd = open (filename, O_RDWR | O_CREAT | O_TRUNC, 0600); ASSERT (fd >= 0); ASSERT (write (fd, text, sizeof (text)) == sizeof (text)); ASSERT (close (fd) == 0); } /* Test that fgetc() sets errno if someone else closes the stream fd behind the back of stdio. */ #if !defined __ANDROID__ /* fdsan */ { FILE *fp = fopen (filename, "r"); ASSERT (fp != NULL); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fgetc (fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } #endif /* Test that fgetc() sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "r"); if (fp != NULL) { errno = 0; ASSERT (fgetc (fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "r"); if (fp != NULL) { errno = 0; ASSERT (fgetc (fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } /* Clean up. */ unlink (filename); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-float.c�������������������������������������������������������0000644�0001750�0001750�00000022327�14557510507�015075� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <float.h> substitute. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2011. */ #include <config.h> #include <float.h> /* Check that FLT_RADIX is a constant expression. */ int a[] = { FLT_RADIX }; /* ----------------------- Check macros for 'float' ----------------------- */ /* Check that the FLT_* macros expand to constant expressions. */ int fb[] = { FLT_MANT_DIG, FLT_MIN_EXP, FLT_MAX_EXP, FLT_DIG, FLT_MIN_10_EXP, FLT_MAX_10_EXP }; float fc[] = { FLT_EPSILON, FLT_MIN, FLT_MAX }; /* ----------------------- Check macros for 'double' ----------------------- */ /* Check that the DBL_* macros expand to constant expressions. */ int db[] = { DBL_MANT_DIG, DBL_MIN_EXP, DBL_MAX_EXP, DBL_DIG, DBL_MIN_10_EXP, DBL_MAX_10_EXP }; double dc[] = { DBL_EPSILON, DBL_MIN, DBL_MAX }; /* -------------------- Check macros for 'long double' -------------------- */ /* Check that the LDBL_* macros expand to constant expressions. */ int lb[] = { LDBL_MANT_DIG, LDBL_MIN_EXP, LDBL_MAX_EXP, LDBL_DIG, LDBL_MIN_10_EXP, LDBL_MAX_10_EXP }; long double lc1 = LDBL_EPSILON; long double lc2 = LDBL_MIN; #if 0 /* LDBL_MAX is not a constant expression on some platforms. */ long double lc3 = LDBL_MAX; #endif /* ------------------------------------------------------------------------- */ #include "fpucw.h" #include "macros.h" #if FLT_RADIX == 2 /* Return 2^n. */ static float pow2f (int n) { int k = n; volatile float x = 1; volatile float y = 2; /* Invariant: 2^n == x * y^k. */ if (k < 0) { y = 0.5f; k = - k; } while (k > 0) { if (k != 2 * (k / 2)) { x = x * y; k = k - 1; } if (k == 0) break; y = y * y; k = k / 2; } /* Now k == 0, hence x == 2^n. */ return x; } /* Return 2^n. */ static double pow2d (int n) { int k = n; volatile double x = 1; volatile double y = 2; /* Invariant: 2^n == x * y^k. */ if (k < 0) { y = 0.5; k = - k; } while (k > 0) { if (k != 2 * (k / 2)) { x = x * y; k = k - 1; } if (k == 0) break; y = y * y; k = k / 2; } /* Now k == 0, hence x == 2^n. */ return x; } /* Return 2^n. */ static long double pow2l (int n) { int k = n; volatile long double x = 1; volatile long double y = 2; /* Invariant: 2^n == x * y^k. */ if (k < 0) { y = 0.5L; k = - k; } while (k > 0) { if (k != 2 * (k / 2)) { x = x * y; k = k - 1; } if (k == 0) break; y = y * y; k = k / 2; } /* Now k == 0, hence x == 2^n. */ return x; } /* ----------------------- Check macros for 'float' ----------------------- */ static void test_float (void) { /* Check that the value of FLT_MIN_EXP is well parenthesized. */ ASSERT ((FLT_MIN_EXP % 101111) == (FLT_MIN_EXP) % 101111); /* Check that the value of DBL_MIN_10_EXP is well parenthesized. */ ASSERT ((FLT_MIN_10_EXP % 101111) == (FLT_MIN_10_EXP) % 101111); /* Check that 'float' is as specified in IEEE 754. */ ASSERT (FLT_MANT_DIG == 24); ASSERT (FLT_MIN_EXP == -125); ASSERT (FLT_MAX_EXP == 128); /* Check the value of FLT_MIN_10_EXP. */ ASSERT (FLT_MIN_10_EXP == - (int) (- (FLT_MIN_EXP - 1) * 0.30103)); /* Check the value of FLT_DIG. */ ASSERT (FLT_DIG == (int) ((FLT_MANT_DIG - 1) * 0.30103)); /* Check the value of FLT_MIN_10_EXP. */ ASSERT (FLT_MIN_10_EXP == - (int) (- (FLT_MIN_EXP - 1) * 0.30103)); /* Check the value of FLT_MAX_10_EXP. */ ASSERT (FLT_MAX_10_EXP == (int) (FLT_MAX_EXP * 0.30103)); /* Check the value of FLT_MAX. */ { volatile float m = FLT_MAX; int n; ASSERT (m + m > m); for (n = 0; n <= 2 * FLT_MANT_DIG; n++) { volatile float pow2_n = pow2f (n); /* 2^n */ volatile float x = m + (m / pow2_n); if (x > m) ASSERT (x + x == x); else ASSERT (!(x + x == x)); } } /* Check the value of FLT_MIN. */ { volatile float m = FLT_MIN; volatile float x = pow2f (FLT_MIN_EXP - 1); ASSERT (m == x); } /* Check the value of FLT_EPSILON. */ { volatile float e = FLT_EPSILON; volatile float me; int n; me = 1.0f + e; ASSERT (me > 1.0f); ASSERT (me - 1.0f == e); for (n = 0; n <= 2 * FLT_MANT_DIG; n++) { volatile float half_n = pow2f (- n); /* 2^-n */ volatile float x = me - half_n; if (x < me) ASSERT (x <= 1.0f); } } } /* ----------------------- Check macros for 'double' ----------------------- */ static void test_double (void) { /* Check that the value of DBL_MIN_EXP is well parenthesized. */ ASSERT ((DBL_MIN_EXP % 101111) == (DBL_MIN_EXP) % 101111); /* Check that the value of DBL_MIN_10_EXP is well parenthesized. */ ASSERT ((DBL_MIN_10_EXP % 101111) == (DBL_MIN_10_EXP) % 101111); /* Check that 'double' is as specified in IEEE 754. */ ASSERT (DBL_MANT_DIG == 53); ASSERT (DBL_MIN_EXP == -1021); ASSERT (DBL_MAX_EXP == 1024); /* Check the value of DBL_MIN_10_EXP. */ ASSERT (DBL_MIN_10_EXP == - (int) (- (DBL_MIN_EXP - 1) * 0.30103)); /* Check the value of DBL_DIG. */ ASSERT (DBL_DIG == (int) ((DBL_MANT_DIG - 1) * 0.30103)); /* Check the value of DBL_MIN_10_EXP. */ ASSERT (DBL_MIN_10_EXP == - (int) (- (DBL_MIN_EXP - 1) * 0.30103)); /* Check the value of DBL_MAX_10_EXP. */ ASSERT (DBL_MAX_10_EXP == (int) (DBL_MAX_EXP * 0.30103)); /* Check the value of DBL_MAX. */ { volatile double m = DBL_MAX; int n; ASSERT (m + m > m); for (n = 0; n <= 2 * DBL_MANT_DIG; n++) { volatile double pow2_n = pow2d (n); /* 2^n */ volatile double x = m + (m / pow2_n); if (x > m) ASSERT (x + x == x); else ASSERT (!(x + x == x)); } } /* Check the value of DBL_MIN. */ { volatile double m = DBL_MIN; volatile double x = pow2d (DBL_MIN_EXP - 1); ASSERT (m == x); } /* Check the value of DBL_EPSILON. */ { volatile double e = DBL_EPSILON; volatile double me; int n; me = 1.0 + e; ASSERT (me > 1.0); ASSERT (me - 1.0 == e); for (n = 0; n <= 2 * DBL_MANT_DIG; n++) { volatile double half_n = pow2d (- n); /* 2^-n */ volatile double x = me - half_n; if (x < me) ASSERT (x <= 1.0); } } } /* -------------------- Check macros for 'long double' -------------------- */ static void test_long_double (void) { /* Check that the value of LDBL_MIN_EXP is well parenthesized. */ ASSERT ((LDBL_MIN_EXP % 101111) == (LDBL_MIN_EXP) % 101111); /* Check that the value of LDBL_MIN_10_EXP is well parenthesized. */ ASSERT ((LDBL_MIN_10_EXP % 101111) == (LDBL_MIN_10_EXP) % 101111); /* Check that 'long double' is at least as wide as 'double'. */ ASSERT (LDBL_MANT_DIG >= DBL_MANT_DIG); ASSERT (LDBL_MIN_EXP - LDBL_MANT_DIG <= DBL_MIN_EXP - DBL_MANT_DIG); ASSERT (LDBL_MAX_EXP >= DBL_MAX_EXP); /* Check the value of LDBL_DIG. */ ASSERT (LDBL_DIG == (int)((LDBL_MANT_DIG - 1) * 0.30103)); /* Check the value of LDBL_MIN_10_EXP. */ ASSERT (LDBL_MIN_10_EXP == - (int) (- (LDBL_MIN_EXP - 1) * 0.30103)); /* Check the value of LDBL_MAX_10_EXP. */ ASSERT (LDBL_MAX_10_EXP == (int) (LDBL_MAX_EXP * 0.30103)); /* Check the value of LDBL_MAX. */ { volatile long double m = LDBL_MAX; int n; ASSERT (m + m > m); for (n = 0; n <= 2 * LDBL_MANT_DIG; n++) { volatile long double pow2_n = pow2l (n); /* 2^n */ volatile long double x = m + (m / pow2_n); if (x > m) ASSERT (x + x == x); else ASSERT (!(x + x == x)); } } /* Check the value of LDBL_MIN. */ { volatile long double m = LDBL_MIN; volatile long double x = pow2l (LDBL_MIN_EXP - 1); ASSERT (m == x); } /* Check the value of LDBL_EPSILON. */ { volatile long double e = LDBL_EPSILON; volatile long double me; int n; me = 1.0L + e; ASSERT (me > 1.0L); ASSERT (me - 1.0L == e); for (n = 0; n <= 2 * LDBL_MANT_DIG; n++) { volatile long double half_n = pow2l (- n); /* 2^-n */ volatile long double x = me - half_n; if (x < me) ASSERT (x <= 1.0L); } } } int main () { test_float (); test_double (); { DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); test_long_double (); END_LONG_DOUBLE_ROUNDING (); } return 0; } #else int main () { fprintf (stderr, "Skipping test: FLT_RADIX is not 2.\n"); return 77; } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-fputc.c�������������������������������������������������������0000644�0001750�0001750�00000004711�14557510507�015106� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fputc() function. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (fputc, int, (int, FILE *)); #include <errno.h> #include <fcntl.h> #include <unistd.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #include "macros.h" int main () { const char *filename = "test-fputc.txt"; /* We don't have an fputc() function that installs an invalid parameter handler so far. So install that handler here, explicitly. */ #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING gl_msvc_inval_ensure_handler (); #endif /* Test that fputc() on an unbuffered stream sets errno if someone else closes the stream fd behind the back of stdio. */ #if !defined __ANDROID__ /* fdsan */ { FILE *fp = fopen (filename, "w"); ASSERT (fp != NULL); setvbuf (fp, NULL, _IONBF, 0); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fputc ('x', fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } #endif /* Test that fputc() on an unbuffered stream sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "w"); if (fp != NULL) { setvbuf (fp, NULL, _IONBF, 0); errno = 0; ASSERT (fputc ('x', fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "w"); if (fp != NULL) { setvbuf (fp, NULL, _IONBF, 0); errno = 0; ASSERT (fputc ('x', fp) == EOF); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } /* Clean up. */ unlink (filename); return 0; } �������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-fread.c�������������������������������������������������������0000644�0001750�0001750�00000005214�14557510507�015045� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fread() function. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (fread, size_t, (void *, size_t, size_t, FILE *)); #include <errno.h> #include <fcntl.h> #include <unistd.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #include "macros.h" int main () { const char *filename = "test-fread.txt"; /* We don't have an fread() function that installs an invalid parameter handler so far. So install that handler here, explicitly. */ #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING gl_msvc_inval_ensure_handler (); #endif /* Prepare a file. */ { const char text[] = "hello world"; int fd = open (filename, O_RDWR | O_CREAT | O_TRUNC, 0600); ASSERT (fd >= 0); ASSERT (write (fd, text, sizeof (text)) == sizeof (text)); ASSERT (close (fd) == 0); } /* Test that fread() sets errno if someone else closes the stream fd behind the back of stdio. */ #if !defined __ANDROID__ /* fdsan */ { FILE *fp = fopen (filename, "r"); char buf[5]; ASSERT (fp != NULL); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fread (buf, 1, sizeof (buf), fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } #endif /* Test that fread() sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "r"); if (fp != NULL) { char buf[1]; errno = 0; ASSERT (fread (buf, 1, 1, fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "r"); if (fp != NULL) { char buf[1]; errno = 0; ASSERT (fread (buf, 1, 1, fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } /* Clean up. */ unlink (filename); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-free.c��������������������������������������������������������0000644�0001750�0001750�00000013760�14557510507�014712� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of free() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2020. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #include <string.h> #include <unistd.h> #if defined __linux__ # include <fcntl.h> # include <stdint.h> # include <string.h> # include <sys/mman.h> #endif #include "macros.h" /* The indirection through a volatile function pointer is necessary to prevent a GCC optimization. Without it, when optimizing, GCC would "know" that errno is unchanged by calling free(ptr), when ptr was the result of a malloc(...) call in the same function. */ static int get_errno (void) { volatile int err = errno; return err; } static int (* volatile get_errno_func) (void) = get_errno; int main () { /* Check that free() preserves errno. */ { errno = 1789; /* Liberté, égalité, fraternité. */ free (NULL); ASSERT_NO_STDIO (get_errno_func () == 1789); } { /* Small memory allocations. */ #define N 10000 void * volatile ptrs[N]; size_t i; for (i = 0; i < N; i++) ptrs[i] = malloc (15); for (i = 0; i < N; i++) { errno = 1789; free (ptrs[i]); ASSERT_NO_STDIO (get_errno_func () == 1789); } #undef N } { /* Medium memory allocations. */ #define N 1000 void * volatile ptrs[N]; size_t i; for (i = 0; i < N; i++) ptrs[i] = malloc (729); for (i = 0; i < N; i++) { errno = 1789; free (ptrs[i]); ASSERT_NO_STDIO (get_errno_func () == 1789); } #undef N } { /* Large memory allocations. */ #define N 10 void * volatile ptrs[N]; size_t i; for (i = 0; i < N; i++) ptrs[i] = malloc (5318153); for (i = 0; i < N; i++) { errno = 1789; free (ptrs[i]); ASSERT_NO_STDIO (get_errno_func () == 1789); } #undef N } /* Test a less common code path. When malloc() is based on mmap(), free() can sometimes call munmap(). munmap() usually succeeds, but fails in a particular situation: when - it has to unmap the middle part of a VMA, and - the number of VMAs of a process is limited and the limit is already reached. The latter condition is fulfilled on Linux, when the file /proc/sys/vm/max_map_count exists. This file contains the limit - for Linux >= 2.4.19: 65536 (DEFAULT_MAX_MAP_COUNT in linux/include/linux/sched.h) - for Linux >= 2.6.31: 65530 (DEFAULT_MAX_MAP_COUNT in linux/include/linux/mm.h). But do not test it with glibc < 2.15, since that triggers a glibc internal abort: "malloc.c:3551: munmap_chunk: Assertion `ret == 0' failed." */ #if defined __linux__ && !(__GLIBC__ == 2 && __GLIBC_MINOR__ < 15) if (open ("/proc/sys/vm/max_map_count", O_RDONLY) >= 0) { /* Preparations. */ size_t pagesize = getpagesize (); void *firstpage_backup = malloc (pagesize); void *lastpage_backup = malloc (pagesize); /* Allocate a large memory area, as a bumper, so that the MAP_FIXED allocation later will not overwrite parts of the memory areas allocated to ld.so or libc.so. */ void *bumper_region = mmap (NULL, 0x1000000, PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); /* A file descriptor pointing to a regular file. */ int fd = open ("test-free", O_RDONLY); if (firstpage_backup != NULL && lastpage_backup != NULL && bumper_region != (void *)(-1) && fd >= 0) { /* Do a large memory allocation. */ size_t big_size = 0x1000000; void * volatile ptr = malloc (big_size - 0x100); char *ptr_aligned = (char *) ((uintptr_t) ptr & ~(pagesize - 1)); /* This large memory allocation allocated a memory area from ptr_aligned to ptr_aligned + big_size. Enlarge this memory area by adding a page before and a page after it. */ memcpy (firstpage_backup, ptr_aligned, pagesize); memcpy (lastpage_backup, ptr_aligned + big_size - pagesize, pagesize); if (mmap (ptr_aligned - pagesize, pagesize + big_size + pagesize, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE | MAP_FIXED, -1, 0) != (void *)(-1)) { memcpy (ptr_aligned, firstpage_backup, pagesize); memcpy (ptr_aligned + big_size - pagesize, lastpage_backup, pagesize); /* Now add as many mappings as we can. Stop at 65536, in order not to crash the machine (in case the limit has been increased by the system administrator). */ size_t i; for (i = 0; i < 65536; i++) if (mmap (NULL, pagesize, PROT_READ, MAP_FILE | MAP_PRIVATE, fd, 0) == (void *)(-1)) break; /* Now the number of VMAs of this process has hopefully attained its limit. */ errno = 1789; /* This call to free() is supposed to call munmap (ptr_aligned, big_size); which increases the number of VMAs by 1, which is supposed to fail. */ free (ptr); ASSERT_NO_STDIO (get_errno_func () == 1789); } } } #endif return 0; } ����������������gnuastro-0.22/bootstrapped/tests/test-fstat.c�������������������������������������������������������0000644�0001750�0001750�00000002347�14557510507�015111� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of fstat() function. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (fstat, int, (int, struct stat *)); #include <errno.h> #include <unistd.h> #include "macros.h" int main () { /* Test behaviour for invalid file descriptors. */ { struct stat statbuf; errno = 0; ASSERT (fstat (-1, &statbuf) == -1); ASSERT (errno == EBADF); } { struct stat statbuf; close (99); errno = 0; ASSERT (fstat (99, &statbuf) == -1); ASSERT (errno == EBADF); } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-fstatat.c�����������������������������������������������������0000644�0001750�0001750�00000005211�14557510507�015427� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of fstatat. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/stat.h> #include "signature.h" SIGNATURE_CHECK (fstatat, int, (int, char const *, struct stat *, int)); #include <fcntl.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "openat.h" #include "same-inode.h" #include "ignore-value.h" #include "macros.h" #ifndef BASE # define BASE "test-fstatat.t" #endif #include "test-lstat.h" #include "test-stat.h" static int dfd = AT_FDCWD; /* Wrapper around fstatat to test stat behavior. */ static int do_stat (char const *name, struct stat *st) { #ifdef TEST_STATAT return statat (dfd, name, st); #else return fstatat (dfd, name, st, 0); #endif } /* Wrapper around fstatat to test lstat behavior. */ static int do_lstat (char const *name, struct stat *st) { #ifdef TEST_STATAT return lstatat (dfd, name, st); #else return fstatat (dfd, name, st, AT_SYMLINK_NOFOLLOW); #endif } int main (_GL_UNUSED int argc, _GL_UNUSED char *argv[]) { int result; /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); /* Test behaviour for invalid file descriptors. */ { struct stat statbuf; errno = 0; ASSERT (fstatat (-1, "foo", &statbuf, 0) == -1); ASSERT (errno == EBADF); } { struct stat statbuf; close (99); errno = 0; ASSERT (fstatat (99, "foo", &statbuf, 0) == -1); ASSERT (errno == EBADF); } result = test_stat_func (do_stat, false); ASSERT (test_lstat_func (do_lstat, false) == result); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (test_stat_func (do_stat, false) == result); ASSERT (test_lstat_func (do_lstat, false) == result); ASSERT (close (dfd) == 0); /* FIXME - add additional tests of dfd not at current directory. */ if (result == 77) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return result; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-ftruncate.c���������������������������������������������������0000644�0001750�0001750�00000003032�14557510507�015753� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test truncating a file. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (ftruncate, int, (int, off_t)); #include <errno.h> #include <fcntl.h> #include "macros.h" int main (_GL_UNUSED int argc, char *argv[]) { const char *filename = argv[1]; /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (ftruncate (-1, 0) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (ftruncate (99, 0) == -1); ASSERT (errno == EBADF); } /* Test behaviour for read-only file descriptors. */ { int fd = open (filename, O_RDONLY); ASSERT (fd >= 0); errno = 0; ASSERT (ftruncate (fd, 0) == -1); ASSERT (errno == EBADF || errno == EINVAL || errno == EACCES /* seen on mingw */ ); close (fd); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-func.c��������������������������������������������������������0000644�0001750�0001750�00000002351�14557510507�014716� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether __func__ is available Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <string.h> #include "macros.h" int main () { ASSERT (strlen (__func__) > 0); /* On Oracle Developer Studio 12.6 and earlier, sizeof __func__ yields 0. The compiler warns: "warning: null dimension: sizeof()". */ #if !defined __SUNPRO_C ASSERT (strlen (__func__) + 1 == sizeof __func__); #endif ASSERT (strcmp (__func__, "main") == 0 || strcmp (__func__, "<unknown function>") == 0); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-fwrite.c������������������������������������������������������0000644�0001750�0001750�00000005164�14557510507�015270� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of fwrite() function. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (fwrite, size_t, (const void *, size_t, size_t, FILE *)); #include <errno.h> #include <fcntl.h> #include <unistd.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #include "macros.h" int main () { const char *filename = "test-fwrite.txt"; /* We don't have an fwrite() function that installs an invalid parameter handler so far. So install that handler here, explicitly. */ #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING gl_msvc_inval_ensure_handler (); #endif /* Test that fwrite() on an unbuffered stream sets errno if someone else closes the stream fd behind the back of stdio. */ #if !defined __ANDROID__ /* fdsan */ { FILE *fp = fopen (filename, "w"); char buf[5] = "world"; ASSERT (fp != NULL); setvbuf (fp, NULL, _IONBF, 0); ASSERT (close (fileno (fp)) == 0); errno = 0; ASSERT (fwrite (buf, 1, sizeof (buf), fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } #endif /* Test that fwrite() on an unbuffered stream sets errno if the stream was constructed with an invalid file descriptor. */ { FILE *fp = fdopen (-1, "w"); if (fp != NULL) { char buf[5] = "world"; setvbuf (fp, NULL, _IONBF, 0); errno = 0; ASSERT (fwrite (buf, 1, sizeof (buf), fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } { FILE *fp; close (99); fp = fdopen (99, "w"); if (fp != NULL) { char buf[5] = "world"; setvbuf (fp, NULL, _IONBF, 0); errno = 0; ASSERT (fwrite (buf, 1, sizeof (buf), fp) == 0); ASSERT (errno == EBADF); ASSERT (ferror (fp)); fclose (fp); } } /* Clean up. */ unlink (filename); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-getcwd-lgpl.c�������������������������������������������������0000644�0001750�0001750�00000005107�14557510507�016176� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getcwd() function. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (getcwd, char *, (char *, size_t)); #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main (int argc, char **argv) { char *pwd1; char *pwd2; /* If the user provides an argument, attempt to chdir there first. */ if (1 < argc) { if (chdir (argv[1]) == 0) printf ("changed to directory %s\n", argv[1]); } pwd1 = getcwd (NULL, 0); ASSERT (pwd1 && *pwd1); if (1 < argc) printf ("cwd=%s\n", pwd1); /* Make sure the result is usable. */ ASSERT (chdir (pwd1) == 0); ASSERT (chdir (".//./.") == 0); /* Make sure that result is normalized. */ pwd2 = getcwd (NULL, 0); ASSERT (pwd2); ASSERT (strcmp (pwd1, pwd2) == 0); free (pwd2); { size_t len = strlen (pwd1); ssize_t i = len - 10; if (i < 1) i = 1; pwd2 = getcwd (NULL, len + 1); ASSERT (pwd2); free (pwd2); pwd2 = malloc (len + 2); for ( ; i <= len; i++) { char *tmp; errno = 0; ASSERT (getcwd (pwd2, i) == NULL); ASSERT (errno == ERANGE); /* Allow either glibc or BSD behavior, since POSIX allows both. */ errno = 0; tmp = getcwd (NULL, i); if (tmp) { ASSERT (strcmp (pwd1, tmp) == 0); free (tmp); } else { ASSERT (errno == ERANGE); } } ASSERT (getcwd (pwd2, len + 1) == pwd2); pwd2[len] = '/'; pwd2[len + 1] = '\0'; } ASSERT (strstr (pwd2, "/./") == NULL); ASSERT (strstr (pwd2, "/../") == NULL); ASSERT (strstr (pwd2 + 1 + (pwd2[1] == '/'), "//") == NULL); /* Validate a POSIX requirement on size. */ errno = 0; ASSERT (getcwd (pwd2, 0) == NULL); ASSERT (errno == EINVAL); free (pwd1); free (pwd2); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-getdelim.c����������������������������������������������������0000644�0001750�0001750�00000004655�14557510507�015566� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getdelim() function. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2007. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (getdelim, ssize_t, (char **, size_t *, int, FILE *)); #include <stdlib.h> #include <string.h> #include "macros.h" int main (void) { FILE *f; char *line; size_t len; ssize_t result; /* Create test file. */ f = fopen ("test-getdelim.txt", "wb"); if (!f || fwrite ("anAnbcnd\0f", 1, 10, f) != 10 || fclose (f) != 0) { fputs ("Failed to create sample file.\n", stderr); remove ("test-getdelim.txt"); return 1; } f = fopen ("test-getdelim.txt", "rb"); if (!f) { fputs ("Failed to reopen sample file.\n", stderr); remove ("test-getdelim.txt"); return 1; } /* Test initial allocation, which must include trailing NUL. */ line = NULL; len = 0; result = getdelim (&line, &len, 'n', f); ASSERT (result == 2); ASSERT (strcmp (line, "an") == 0); ASSERT (2 < len); free (line); /* Test initial allocation again, with line = NULL and len != 0. */ line = NULL; len = (size_t)(~0) / 4; result = getdelim (&line, &len, 'n', f); ASSERT (result == 2); ASSERT (strcmp (line, "An") == 0); ASSERT (2 < len); free (line); /* Test growth of buffer. */ line = malloc (1); len = 1; result = getdelim (&line, &len, 'n', f); ASSERT (result == 3); ASSERT (strcmp (line, "bcn") == 0); ASSERT (3 < len); /* Test embedded NULs and EOF behavior. */ result = getdelim (&line, &len, 'n', f); ASSERT (result == 3); ASSERT (memcmp (line, "d\0f", 4) == 0); ASSERT (3 < len); result = getdelim (&line, &len, 'n', f); ASSERT (result == -1); free (line); fclose (f); remove ("test-getdelim.txt"); return 0; } �����������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-getdtablesize.c�����������������������������������������������0000644�0001750�0001750�00000002352�14557510507�016612� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getdtablesize() function. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (getdtablesize, int, (void)); #include "macros.h" /* Tell GCC not to warn about the specific edge cases tested here. */ #if __GNUC__ >= 13 # pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" #endif int main () { ASSERT (getdtablesize () >= 3); ASSERT (dup2 (0, getdtablesize() - 1) == getdtablesize () - 1); ASSERT (dup2 (0, getdtablesize()) == -1); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-getgroups.c���������������������������������������������������0000644�0001750�0001750�00000005217�14557510507�016006� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of getgroups. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (getgroups, int, (int, gid_t[])); #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include "macros.h" /* Tell GCC not to warn about the specific edge cases tested here. GCC >= 10 with glibc >= 2.32 would otherwise trigger warnings, even without any -W options, because getgroups() is declared with __attribute__ ((__access__ (__write_only__, 2, 1))) */ #if __GNUC__ >= 7 # pragma GCC diagnostic ignored "-Wstringop-overflow" #endif int main (int argc, _GL_UNUSED char **argv) { int result; gid_t *groups; errno = 0; result = getgroups (0, NULL); if (result == -1 && errno == ENOSYS) { fputs ("skipping test: no support for groups\n", stderr); return 77; } ASSERT (0 <= result); ASSERT (result + 1 < SIZE_MAX / sizeof *groups); groups = malloc ((result + 1) * sizeof *groups); ASSERT (groups); groups[result] = -1; /* Check for EINVAL handling. Not all processes have supplemental groups, and getgroups does not have to return the effective gid, so a result of 0 is reasonable. Also, we can't test for EINVAL if result is 1, because of how getgroups treats 0. */ if (1 < result) { errno = 0; ASSERT (getgroups (result - 1, groups) == -1); ASSERT (errno == EINVAL); } ASSERT (getgroups (result, groups) == result); ASSERT (getgroups (result + 1, groups) == result); ASSERT (groups[result] == -1); errno = 0; ASSERT (getgroups (-1, NULL) == -1); ASSERT (errno == EINVAL); /* The automated unit test, with no arguments, ends here. However, for debugging purposes, you can pass a command-line argument to list the returned groups. */ if (1 < argc) { int i; for (i = 0; i < result; i++) printf ("%d\n", (int) groups[i]); } free (groups); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-getline.c�����������������������������������������������������0000644�0001750�0001750�00000004632�14557510507�015416� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getline() function. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2007. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (getline, ssize_t, (char **, size_t *, FILE *)); #include <stdlib.h> #include <string.h> #include "macros.h" int main (void) { FILE *f; char *line; size_t len; ssize_t result; /* Create test file. */ f = fopen ("test-getline.txt", "wb"); if (!f || fwrite ("a\nA\nbc\nd\0f", 1, 10, f) != 10 || fclose (f) != 0) { fputs ("Failed to create sample file.\n", stderr); remove ("test-getline.txt"); return 1; } f = fopen ("test-getline.txt", "rb"); if (!f) { fputs ("Failed to reopen sample file.\n", stderr); remove ("test-getline.txt"); return 1; } /* Test initial allocation, which must include trailing NUL. */ line = NULL; len = 0; result = getline (&line, &len, f); ASSERT (result == 2); ASSERT (strcmp (line, "a\n") == 0); ASSERT (2 < len); free (line); /* Test initial allocation again, with line = NULL and len != 0. */ line = NULL; len = (size_t)(~0) / 4; result = getline (&line, &len, f); ASSERT (result == 2); ASSERT (strcmp (line, "A\n") == 0); ASSERT (2 < len); free (line); /* Test growth of buffer, must not leak. */ len = 1; line = malloc (len); result = getline (&line, &len, f); ASSERT (result == 3); ASSERT (strcmp (line, "bc\n") == 0); ASSERT (3 < len); /* Test embedded NULs and EOF behavior. */ result = getline (&line, &len, f); ASSERT (result == 3); ASSERT (memcmp (line, "d\0f", 4) == 0); ASSERT (3 < len); result = getline (&line, &len, f); ASSERT (result == -1); free (line); fclose (f); remove ("test-getline.txt"); return 0; } ������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-getopt-gnu.c��������������������������������������������������0000644�0001750�0001750�00000003631�14557510507�016056� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of command line argument processing. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ #include <config.h> /* None of the files accessed by this test are large, so disable the ftell link warning if we are not using the gnulib ftell module. */ #define _GL_NO_LARGE_FILES /* POSIX and glibc provide the getopt() function in <unistd.h>, see https://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html https://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html But gnulib provides the getopt() function in <getopt.h>, not in <unistd.h>. This is what we are testing here. */ #include <getopt.h> #ifndef __getopt_argv_const # define __getopt_argv_const const #endif #include "signature.h" SIGNATURE_CHECK (getopt_long, int, (int, char *__getopt_argv_const *, char const *, struct option const *, int *)); SIGNATURE_CHECK (getopt_long_only, int, (int, char *__getopt_argv_const *, char const *, struct option const *, int *)); #define TEST_GETOPT_GNU 1 #define TEST_GETOPT_TMP_NAME "test-getopt-gnu.tmp" #include "test-getopt-main.h" �������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-getopt-posix.c������������������������������������������������0000644�0001750�0001750�00000002733�14557510507�016431� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of command line argument processing. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ #include <config.h> /* None of the files accessed by this test are large, so disable the ftell link warning if we are not using the gnulib ftell module. */ #define _GL_NO_LARGE_FILES /* POSIX and glibc provide the getopt() function in <unistd.h>, see https://pubs.opengroup.org/onlinepubs/9699919799/functions/getopt.html https://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html But gnulib provides the getopt() function in <getopt.h>, not in <unistd.h>. Nevertheless the getopt() function should also be found in <unistd.h>. */ #include <unistd.h> #define TEST_GETOPT_GNU 0 #define TEST_GETOPT_TMP_NAME "test-getopt-posix.tmp" #include "test-getopt-main.h" �������������������������������������gnuastro-0.22/bootstrapped/tests/test-getprogname.c�������������������������������������������������0000644�0001750�0001750�00000004003�14557510507�016267� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the gnulib getprogname module. Copyright (C) 2016-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <assert.h> #ifdef __hpux # define STREQ(a, b) (strncmp (a, b, 14) == 0) #else # define STREQ(a, b) (strcmp (a, b) == 0) #endif int main (void) { char const *p = getprogname (); /* libtool creates a temporary executable whose name is sometimes prefixed with "lt-" (depends on the platform). But the name of the temporary executable is a detail that should not be visible to the end user and to the test suite. Remove this "lt-" prefix here. */ if (strncmp (p, "lt-", 3) == 0) p += 3; /* Note: You can make this test fail a) by running it on a case-insensitive file system (such as on Windows, Cygwin, or on Mac OS X with a case-insensitive HFS+ file system), with an invocation that contains upper case characters, e.g. test-GETPROGNAME, b) by hardlinking or symlinking it to a different name (e.g. test-foo) and invoking it through that name. That's not the intended use. The Makefile always invokes it as 'test-getprogname${EXEEXT}'. */ #if defined __CYGWIN__ /* The Cygwin getprogname() function strips the ".exe" suffix. */ assert (STREQ (p, "test-getprogname")); #else assert (STREQ (p, "test-getprogname" EXEEXT)); #endif return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-gettimeofday.c������������������������������������������������0000644�0001750�0001750�00000004372�14557510510�016443� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering and Bruno Haible. */ #include <config.h> #include <sys/time.h> #include "signature.h" SIGNATURE_CHECK (gettimeofday, int, (struct timeval *, GETTIMEOFDAY_TIMEZONE *)); #include <time.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" static void test_clobber () { time_t t = 0; struct tm *lt; struct tm saved_lt; struct timeval tv; lt = localtime (&t); saved_lt = *lt; gettimeofday (&tv, NULL); if (memcmp (lt, &saved_lt, sizeof (struct tm)) != 0) { fprintf (stderr, "gettimeofday still clobbers the localtime buffer!\n"); exit (1); } } static void test_consistency () { struct timeval tv1; time_t tt2; struct timeval tv3; time_t tt4; ASSERT (gettimeofday (&tv1, NULL) == 0); tt2 = time (NULL); ASSERT (gettimeofday (&tv3, NULL) == 0); tt4 = time (NULL); /* Verify monotonicity of gettimeofday(). */ ASSERT (tv1.tv_sec < tv3.tv_sec || (tv1.tv_sec == tv3.tv_sec && tv1.tv_usec <= tv3.tv_usec)); /* Verify monotonicity of time(). */ ASSERT (tt2 <= tt4); /* Verify that the tv_sec field of the result is the same as time(NULL). */ /* Note: It's here that the dependency to the 'time' module is needed. Without it, this assertion would sometimes fail on glibc systems, see https://sourceware.org/bugzilla/show_bug.cgi?id=30200 */ ASSERT (tv1.tv_sec <= tt2); ASSERT (tt2 <= tv3.tv_sec); ASSERT (tv3.tv_sec <= tt4); } int main (void) { test_clobber (); test_consistency (); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-hard-locale.c�������������������������������������������������0000644�0001750�0001750�00000010011�14557510510�016120� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of determination whether a locale is different from the "C" locale. Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> #include "hard-locale.h" #include <locale.h> #include <stdio.h> #include <string.h> /* True if all locale names are accepted and all locales are trivial. This is the case e.g. on OpenBSD 3.8. */ static bool all_trivial; static int test_one (const char *name, int failure_bitmask) { if (setlocale (LC_ALL, name) != NULL) { bool expected; /* musl libc has special code for the C.UTF-8 locale; other than that, all locale names are accepted and all locales are trivial. OpenBSD returns the locale name that was set, but we don't know how it behaves under the hood. Likewise for Haiku. On Android >= 5.0, the "C" locale may have UTF-8 encoding, and we don't know how it will behave in the future. */ #if defined MUSL_LIBC || defined __OpenBSD__ || defined __HAIKU__ || defined __ANDROID__ expected = true; #else expected = !all_trivial; #endif if (hard_locale (LC_CTYPE) != expected) { if (expected) fprintf (stderr, "Unexpected: The category LC_CTYPE of the locale '%s' is not equivalent to C or POSIX.\n", name); else fprintf (stderr, "Unexpected: The category LC_CTYPE of the locale '%s' is equivalent to C or POSIX.\n", name); return failure_bitmask; } /* On NetBSD 7.0, some locales such as de_DE.ISO8859-1 and de_DE.UTF-8 have the LC_COLLATE category set to "C". Similarly, on musl libc, with the C.UTF-8 locale. On Android >= 5.0, the "C" locale may have UTF-8 encoding, and we don't know how it will behave in the future. */ #if defined __NetBSD__ expected = false; #elif defined MUSL_LIBC expected = strcmp (name, "C.UTF-8") != 0; #elif (defined __OpenBSD__ && HAVE_DUPLOCALE) || defined __HAIKU__ || defined __ANDROID__ /* OpenBSD >= 6.2, Haiku, Android */ expected = true; #else expected = !all_trivial; #endif if (hard_locale (LC_COLLATE) != expected) { if (expected) fprintf (stderr, "Unexpected: The category LC_COLLATE of the locale '%s' is not equivalent to C or POSIX.\n", name); else fprintf (stderr, "Unexpected: The category LC_COLLATE of the locale '%s' is equivalent to C or POSIX.\n", name); return failure_bitmask; } } return 0; } int main () { int fail = 0; /* The initial locale is the "C" or "POSIX" locale. On Android >= 5.0, it is equivalent to the "C.UTF-8" locale, cf. <https://lists.gnu.org/archive/html/bug-gnulib/2023-01/msg00141.html>. */ #if ! defined __ANDROID__ if (hard_locale (LC_CTYPE) || hard_locale (LC_COLLATE)) { fprintf (stderr, "The initial locale should not be hard!\n"); fail |= 1; } #endif all_trivial = (setlocale (LC_ALL, "foobar") != NULL); fail |= test_one ("de", 2); fail |= test_one ("de_DE", 4); fail |= test_one ("de_DE.ISO8859-1", 8); fail |= test_one ("de_DE.iso88591", 8); fail |= test_one ("de_DE.UTF-8", 16); fail |= test_one ("de_DE.utf8", 16); fail |= test_one ("german", 32); fail |= test_one ("C.UTF-8", 64); return fail; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-ignore-value.c������������������������������������������������0000644�0001750�0001750�00000003206�14557510510�016352� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the "ignore-value" module. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ #include <config.h> #include "ignore-value.h" #include <stdio.h> #include "attribute.h" struct s { int i; }; NODISCARD static char doChar (void); NODISCARD static int doInt (void); NODISCARD static off_t doOff (void); NODISCARD static void *doPtr (void); NODISCARD static struct s doStruct (void); static char doChar (void) { return 0; } static int doInt (void) { return 0; } static off_t doOff (void) { return 0; } static void * doPtr (void) { return NULL; } static struct s doStruct (void) { static struct s s1; return s1; } int main (void) { /* If this test can compile with -Werror and the same warnings as the rest of the project, then we are properly silencing warnings about ignored return values. */ ignore_value (doChar ()); ignore_value (doInt ()); ignore_value (doOff ()); ignore_value (doPtr ()); ignore_value (doStruct ()); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-inet_pton.c���������������������������������������������������0000644�0001750�0001750�00000003330�14557510510�015752� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of inet_pton function. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ #include <config.h> #include <arpa/inet.h> #include "signature.h" SIGNATURE_CHECK (inet_pton, int, (int, const char *, void *)); #include <netinet/in.h> #include <sys/socket.h> #include "macros.h" int main (void) { #if defined AF_INET /* HAVE_IPV4 */ { /* This machine was for a long time known as ma2s2.mathematik.uni-karlsruhe.de. */ const char printable[] = "129.13.115.2"; struct in_addr internal; int ret; ret = inet_pton (AF_INET, printable, &internal); ASSERT (ret == 1); /* Verify that internal is filled in network byte order. */ ASSERT (((unsigned char *) &internal)[0] == 0x81); ASSERT (((unsigned char *) &internal)[1] == 0x0D); ASSERT (((unsigned char *) &internal)[2] == 0x73); ASSERT (((unsigned char *) &internal)[3] == 0x02); # ifdef WORDS_BIGENDIAN ASSERT (internal.s_addr == 0x810D7302); # else ASSERT (internal.s_addr == 0x02730D81); # endif } #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-intprops.c����������������������������������������������������0000644�0001750�0001750�00000050425�14557510510�015640� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test intprops.h. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* Tell gcc not to warn about the long expressions that the overflow macros expand to, or about the (X < 0) expressions. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Woverlength-strings" # pragma GCC diagnostic ignored "-Wtype-limits" /* Work around a bug in GCC 6.1 and earlier; see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68971 */ # pragma GCC diagnostic ignored "-Woverflow" #endif #include <config.h> #ifdef TEST_STDCKDINT # include <stdckdint.h> #else # include "intprops.h" #endif #include <inttypes.h> #include <limits.h> #include "macros.h" /* Compile-time verification of expression X. In this file, we need it as a statement, rather than as a declaration. */ #define verify_stmt(x) do { static_assert (x); } while (0) /* VERIFY (X) uses a static assertion for compilers that are known to work, and falls back on a dynamic assertion for other compilers. But it ignores X if testing stdckdint.h. These tests should be checkable via 'verify' rather than 'ASSERT', but using 'verify' would run into a bug with HP-UX 11.23 cc; see <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00401.html>. */ #ifdef TEST_STDCKDINT # define VERIFY(x) ((void) 0) #elif __GNUC__ || __clang__ || __SUNPRO_C # define VERIFY(x) verify_stmt (x) #else # define VERIFY(x) ASSERT (x) #endif #define DONTCARE __LINE__ int int_minus_2 = -2; int int_1 = 1; int main (void) { /* Use VERIFY for tests that must be integer constant expressions, ASSERT otherwise. */ #ifndef TEST_STDCKDINT /* TYPE_IS_INTEGER. */ ASSERT (TYPE_IS_INTEGER (bool)); ASSERT (TYPE_IS_INTEGER (char)); ASSERT (TYPE_IS_INTEGER (signed char)); ASSERT (TYPE_IS_INTEGER (unsigned char)); ASSERT (TYPE_IS_INTEGER (short int)); ASSERT (TYPE_IS_INTEGER (unsigned short int)); ASSERT (TYPE_IS_INTEGER (int)); ASSERT (TYPE_IS_INTEGER (unsigned int)); ASSERT (TYPE_IS_INTEGER (long int)); ASSERT (TYPE_IS_INTEGER (unsigned long int)); ASSERT (TYPE_IS_INTEGER (intmax_t)); ASSERT (TYPE_IS_INTEGER (uintmax_t)); ASSERT (! TYPE_IS_INTEGER (float)); ASSERT (! TYPE_IS_INTEGER (double)); ASSERT (! TYPE_IS_INTEGER (long double)); /* TYPE_SIGNED. */ /* VERIFY (! TYPE_SIGNED (bool)); // not guaranteed by gnulib substitute */ VERIFY (TYPE_SIGNED (signed char)); VERIFY (! TYPE_SIGNED (unsigned char)); VERIFY (TYPE_SIGNED (short int)); VERIFY (! TYPE_SIGNED (unsigned short int)); VERIFY (TYPE_SIGNED (int)); VERIFY (! TYPE_SIGNED (unsigned int)); VERIFY (TYPE_SIGNED (long int)); VERIFY (! TYPE_SIGNED (unsigned long int)); VERIFY (TYPE_SIGNED (intmax_t)); VERIFY (! TYPE_SIGNED (uintmax_t)); ASSERT (TYPE_SIGNED (float)); ASSERT (TYPE_SIGNED (double)); ASSERT (TYPE_SIGNED (long double)); /* Integer representation. Check that it is two's complement. */ VERIFY (INT_MIN + INT_MAX < 0); /* TYPE_MINIMUM, TYPE_MAXIMUM. */ VERIFY (TYPE_MINIMUM (char) == CHAR_MIN); VERIFY (TYPE_MAXIMUM (char) == CHAR_MAX); VERIFY (TYPE_MINIMUM (unsigned char) == 0); VERIFY (TYPE_MAXIMUM (unsigned char) == UCHAR_MAX); VERIFY (TYPE_MINIMUM (signed char) == SCHAR_MIN); VERIFY (TYPE_MAXIMUM (signed char) == SCHAR_MAX); VERIFY (TYPE_MINIMUM (short int) == SHRT_MIN); VERIFY (TYPE_MAXIMUM (short int) == SHRT_MAX); VERIFY (TYPE_MINIMUM (unsigned short int) == 0); VERIFY (TYPE_MAXIMUM (unsigned short int) == USHRT_MAX); VERIFY (TYPE_MINIMUM (int) == INT_MIN); VERIFY (TYPE_MAXIMUM (int) == INT_MAX); VERIFY (TYPE_MINIMUM (unsigned int) == 0); VERIFY (TYPE_MAXIMUM (unsigned int) == UINT_MAX); VERIFY (TYPE_MINIMUM (long int) == LONG_MIN); VERIFY (TYPE_MAXIMUM (long int) == LONG_MAX); VERIFY (TYPE_MINIMUM (unsigned long int) == 0); VERIFY (TYPE_MAXIMUM (unsigned long int) == ULONG_MAX); #ifdef LLONG_MAX verify_stmt (TYPE_MINIMUM (long long int) == LLONG_MIN); verify_stmt (TYPE_MAXIMUM (long long int) == LLONG_MAX); verify_stmt (TYPE_MINIMUM (unsigned long long int) == 0); verify_stmt (TYPE_MAXIMUM (unsigned long long int) == ULLONG_MAX); #endif VERIFY (TYPE_MINIMUM (intmax_t) == INTMAX_MIN); VERIFY (TYPE_MAXIMUM (intmax_t) == INTMAX_MAX); VERIFY (TYPE_MINIMUM (uintmax_t) == 0); VERIFY (TYPE_MAXIMUM (uintmax_t) == UINTMAX_MAX); /* TYPE_WIDTH. */ #ifdef CHAR_WIDTH verify_stmt (TYPE_WIDTH (char) == CHAR_WIDTH); verify_stmt (TYPE_WIDTH (signed char) == SCHAR_WIDTH); verify_stmt (TYPE_WIDTH (unsigned char) == UCHAR_WIDTH); verify_stmt (TYPE_WIDTH (short int) == SHRT_WIDTH); verify_stmt (TYPE_WIDTH (unsigned short int) == USHRT_WIDTH); verify_stmt (TYPE_WIDTH (int) == INT_WIDTH); verify_stmt (TYPE_WIDTH (unsigned int) == UINT_WIDTH); verify_stmt (TYPE_WIDTH (long int) == LONG_WIDTH); verify_stmt (TYPE_WIDTH (unsigned long int) == ULONG_WIDTH); #ifdef LLONG_WIDTH verify_stmt (TYPE_WIDTH (long long int) == LLONG_WIDTH); verify_stmt (TYPE_WIDTH (unsigned long long int) == ULLONG_WIDTH); #endif #endif /* INT_BITS_STRLEN_BOUND. */ VERIFY (INT_BITS_STRLEN_BOUND (1) == 1); VERIFY (INT_BITS_STRLEN_BOUND (2620) == 789); /* INT_STRLEN_BOUND, INT_BUFSIZE_BOUND. */ #ifdef INT32_MAX /* POSIX guarantees int32_t; this ports to non-POSIX. */ VERIFY (INT_STRLEN_BOUND (int32_t) == sizeof ("-2147483648") - 1); VERIFY (INT_BUFSIZE_BOUND (int32_t) == sizeof ("-2147483648")); #endif #ifdef INT64_MAX VERIFY (INT_STRLEN_BOUND (int64_t) == sizeof ("-9223372036854775808") - 1); VERIFY (INT_BUFSIZE_BOUND (int64_t) == sizeof ("-9223372036854775808")); #endif #endif /* All the INT_<op>_RANGE_OVERFLOW tests are equally valid as INT_<op>_OVERFLOW tests, so define macros to do both. OP is the operation, OPNAME its symbolic name, A and B its operands, T the result type, V the overflow flag, and VRES the result if V and if two's complement. CHECK_BINOP is for most binary operations, CHECK_SBINOP for binary +, -, * when the result type is signed, and CHECK_UNOP for unary operations. */ #define CHECK_BINOP(op, opname, a, b, t, v, vres) \ VERIFY (INT_##opname##_RANGE_OVERFLOW (a, b, TYPE_MINIMUM (t), \ TYPE_MAXIMUM (t)) \ == (v)); \ VERIFY (INT_##opname##_OVERFLOW (a, b) == (v)) #define CHECK_SBINOP(op, opname, a, b, t, v, vres) \ CHECK_BINOP(op, opname, a, b, t, v, vres); \ { \ t result; \ ASSERT (INT_##opname##_WRAPV (a, b, &result) == (v)); \ ASSERT (result == ((v) ? (vres) : ((a) op (b)))); \ } #define CHECK_UNOP(op, opname, a, t, v) \ VERIFY (INT_##opname##_RANGE_OVERFLOW (a, TYPE_MINIMUM (t), \ TYPE_MAXIMUM (t)) \ == (v)); \ VERIFY (INT_##opname##_OVERFLOW (a) == (v)) /* INT_<op>_RANGE_OVERFLOW, INT_<op>_OVERFLOW. */ VERIFY (INT_ADD_RANGE_OVERFLOW (INT_MAX, 1, INT_MIN, INT_MAX)); VERIFY (INT_ADD_OVERFLOW (INT_MAX, 1)); CHECK_SBINOP (+, ADD, INT_MAX, 1, int, true, INT_MIN); CHECK_SBINOP (+, ADD, INT_MAX, -1, int, false, INT_MAX - 1); CHECK_SBINOP (+, ADD, INT_MIN, 1, int, false, INT_MIN + 1); CHECK_SBINOP (+, ADD, INT_MIN, -1, int, true, INT_MAX); CHECK_BINOP (+, ADD, UINT_MAX, 1u, unsigned int, true, 0u); CHECK_BINOP (+, ADD, 0u, 1u, unsigned int, false, 1u); CHECK_SBINOP (-, SUBTRACT, INT_MAX, 1, int, false, INT_MAX - 1); CHECK_SBINOP (-, SUBTRACT, INT_MAX, -1, int, true, INT_MIN); CHECK_SBINOP (-, SUBTRACT, INT_MIN, 1, int, true, INT_MAX); CHECK_SBINOP (-, SUBTRACT, INT_MIN, -1, int, false, INT_MIN - -1); CHECK_BINOP (-, SUBTRACT, UINT_MAX, 1u, unsigned int, false, UINT_MAX - 1u); CHECK_BINOP (-, SUBTRACT, 0u, 1u, unsigned int, true, 0u - 1u); CHECK_UNOP (-, NEGATE, INT_MIN, int, true); CHECK_UNOP (-, NEGATE, 0, int, false); CHECK_UNOP (-, NEGATE, INT_MAX, int, false); CHECK_UNOP (-, NEGATE, 0u, unsigned int, false); CHECK_UNOP (-, NEGATE, 1u, unsigned int, true); CHECK_UNOP (-, NEGATE, UINT_MAX, unsigned int, true); CHECK_SBINOP (*, MULTIPLY, INT_MAX, INT_MAX, int, true, 1); CHECK_SBINOP (*, MULTIPLY, INT_MAX, INT_MIN, int, true, INT_MIN); CHECK_SBINOP (*, MULTIPLY, INT_MIN, INT_MAX, int, true, INT_MIN); CHECK_SBINOP (*, MULTIPLY, INT_MIN, INT_MIN, int, true, 0); CHECK_SBINOP (*, MULTIPLY, -1, INT_MIN, int, INT_NEGATE_OVERFLOW (INT_MIN), INT_MIN); #if !defined __HP_cc CHECK_SBINOP (*, MULTIPLY, LONG_MIN / INT_MAX, (long int) INT_MAX, long int, false, LONG_MIN - LONG_MIN % INT_MAX); #endif CHECK_BINOP (/, DIVIDE, INT_MIN, -1, int, INT_NEGATE_OVERFLOW (INT_MIN), INT_MIN); CHECK_BINOP (/, DIVIDE, INT_MAX, 1, int, false, INT_MAX); CHECK_BINOP (/, DIVIDE, (unsigned int) INT_MIN, -1u, unsigned int, false, INT_MIN / -1u); CHECK_BINOP (%, REMAINDER, INT_MIN, -1, int, INT_NEGATE_OVERFLOW (INT_MIN), 0); CHECK_BINOP (%, REMAINDER, INT_MAX, 1, int, false, 0); CHECK_BINOP (%, REMAINDER, (unsigned int) INT_MIN, -1u, unsigned int, false, INT_MIN % -1u); CHECK_BINOP (<<, LEFT_SHIFT, UINT_MAX, 1, unsigned int, true, UINT_MAX << 1); CHECK_BINOP (<<, LEFT_SHIFT, UINT_MAX / 2 + 1, 1, unsigned int, true, (UINT_MAX / 2 + 1) << 1); CHECK_BINOP (<<, LEFT_SHIFT, UINT_MAX / 2, 1, unsigned int, false, (UINT_MAX / 2) << 1); /* INT_<op>_OVERFLOW and INT_<op>_WRAPV with mixed types. */ #define CHECK_SUM(a, b, t, v, vres) \ CHECK_SUM1 (a, b, t, v, vres); \ CHECK_SUM1 (b, a, t, v, vres) #define CHECK_SUM_WRAPV(a, b, t, v, vres, okres) \ CHECK_SUM_WRAPV1 (a, b, t, v, vres, okres); \ CHECK_SUM_WRAPV1 (b, a, t, v, vres, okres) #define CHECK_SUM1(a, b, t, v, vres) \ VERIFY (INT_ADD_OVERFLOW (a, b) == (v)); \ CHECK_SUM_WRAPV1 (a, b, t, v, vres, (a) + (b)) #define CHECK_SUM_WRAPV1(a, b, t, v, vres, okres) \ { \ t result; \ ASSERT (INT_ADD_WRAPV (a, b, &result) == (v)); \ ASSERT (result == ((v) ? (vres) : (okres))); \ } CHECK_SUM (-1, LONG_MIN, long int, true, LONG_MAX); CHECK_SUM (-1, UINT_MAX, unsigned int, false, DONTCARE); CHECK_SUM (-1L, INT_MIN, long int, INT_MIN == LONG_MIN, INT_MIN == LONG_MIN ? INT_MAX : DONTCARE); CHECK_SUM (0u, -1, unsigned int, true, 0u + -1); CHECK_SUM (0u, 0, unsigned int, false, DONTCARE); CHECK_SUM (0u, 1, unsigned int, false, DONTCARE); CHECK_SUM (1, LONG_MAX, long int, true, LONG_MIN); CHECK_SUM (1, UINT_MAX, unsigned int, true, 0u); CHECK_SUM (1L, INT_MAX, long int, INT_MAX == LONG_MAX, INT_MAX == LONG_MAX ? INT_MIN : DONTCARE); CHECK_SUM (1u, INT_MAX, unsigned int, INT_MAX == UINT_MAX, 1u + INT_MAX); CHECK_SUM (1u, INT_MIN, unsigned int, true, 1u + INT_MIN); CHECK_SUM_WRAPV (-1, 1u, int, false, DONTCARE, 0); CHECK_SUM_WRAPV (-1, 1ul, int, false, DONTCARE, 0); CHECK_SUM_WRAPV (-1l, 1u, int, false, DONTCARE, 0); CHECK_SUM_WRAPV (-100, 1000u, int, false, DONTCARE, 900); CHECK_SUM_WRAPV (INT_MIN, UINT_MAX, int, false, DONTCARE, INT_MAX); CHECK_SUM_WRAPV (1u, INT_MAX, int, true, INT_MIN, DONTCARE); CHECK_SUM_WRAPV (INT_MAX, 1, long int, LONG_MAX <= INT_MAX, INT_MIN, INT_MAX + 1L); CHECK_SUM_WRAPV (UINT_MAX, 1, long int, LONG_MAX <= UINT_MAX, 0, UINT_MAX + 1L); CHECK_SUM_WRAPV (INT_MAX, 1, unsigned long int, ULONG_MAX <= INT_MAX, 0, INT_MAX + 1uL); CHECK_SUM_WRAPV (UINT_MAX, 1, unsigned long int, ULONG_MAX <= UINT_MAX, 0, UINT_MAX + 1uL); { long int result; ASSERT (INT_ADD_WRAPV (1, INT_MAX, &result) == (INT_MAX == LONG_MAX)); ASSERT (INT_ADD_WRAPV (-1, INT_MIN, &result) == (INT_MIN == LONG_MIN)); } #define CHECK_DIFFERENCE(a, b, t, v, vres) \ VERIFY (INT_SUBTRACT_OVERFLOW (a, b) == (v)) #define CHECK_SDIFFERENCE(a, b, t, v, vres) \ CHECK_DIFFERENCE (a, b, t, v, vres); \ CHECK_SDIFFERENCE_WRAPV (a, b, t, v, vres) #define CHECK_SDIFFERENCE_WRAPV(a, b, t, v, vres) \ { \ t result; \ ASSERT (INT_SUBTRACT_WRAPV (a, b, &result) == (v)); \ ASSERT (result == ((v) ? (vres) : ((a) - (b)))); \ } CHECK_DIFFERENCE (INT_MAX, 1u, unsigned int, UINT_MAX < INT_MAX - 1, INT_MAX - 1u); CHECK_DIFFERENCE (UINT_MAX, 1, unsigned int, false, UINT_MAX - 1); CHECK_DIFFERENCE (0u, -1, unsigned int, false, 0u - -1); CHECK_DIFFERENCE (UINT_MAX, -1, unsigned int, true, UINT_MAX - -1); CHECK_DIFFERENCE (INT_MIN, 1u, unsigned int, true, INT_MIN - 1u); CHECK_DIFFERENCE (-1, 0u, unsigned int, true, -1 - 0u); CHECK_SDIFFERENCE (-1, INT_MIN, int, false, -1 - INT_MIN); CHECK_SDIFFERENCE (-1, INT_MAX, int, false, -1 - INT_MAX); CHECK_SDIFFERENCE (0, INT_MIN, int, INT_MIN < -INT_MAX, INT_MIN); CHECK_SDIFFERENCE (0, INT_MAX, int, false, 0 - INT_MAX); CHECK_SDIFFERENCE_WRAPV (-1, 1u, int, false, DONTCARE); CHECK_SDIFFERENCE_WRAPV (-1, 1ul, int, false, DONTCARE); CHECK_SDIFFERENCE_WRAPV (-1l, 1u, int, false, DONTCARE); CHECK_SDIFFERENCE_WRAPV (0u, INT_MAX, int, false, DONTCARE); CHECK_SDIFFERENCE_WRAPV (1u, INT_MIN, int, true, 1u - INT_MIN); { long int result; ASSERT (INT_SUBTRACT_WRAPV (INT_MAX, -1, &result) == (INT_MAX == LONG_MAX)); ASSERT (INT_SUBTRACT_WRAPV (INT_MIN, 1, &result) == (INT_MAX == LONG_MAX)); } #define CHECK_PRODUCT(a, b, t, v, vres) \ CHECK_PRODUCT1 (a, b, t, v, vres); \ CHECK_PRODUCT1 (b, a, t, v, vres) #define CHECK_SPRODUCT(a, b, t, v, vres) \ CHECK_SPRODUCT1 (a, b, t, v, vres); \ CHECK_SPRODUCT1 (b, a, t, v, vres) #define CHECK_SPRODUCT_WRAPV(a, b, t, v, vres) \ CHECK_SPRODUCT_WRAPV1 (a, b, t, v, vres); \ CHECK_SPRODUCT_WRAPV1 (b, a, t, v, vres) #define CHECK_PRODUCT1(a, b, t, v, vres) \ VERIFY (INT_MULTIPLY_OVERFLOW (a, b) == (v)) #define CHECK_SPRODUCT1(a, b, t, v, vres) \ CHECK_PRODUCT1 (a, b, t, v, vres); \ CHECK_SPRODUCT_WRAPV1 (a, b, t, v, vres) #define CHECK_SPRODUCT_WRAPV1(a, b, t, v, vres) \ { \ t result; \ ASSERT (INT_MULTIPLY_WRAPV (a, b, &result) == (v)); \ ASSERT (result == ((v) ? (vres) : ((a) * (b)))); \ } CHECK_PRODUCT (-1, 1u, unsigned int, true, -1 * 1u); CHECK_SPRODUCT (-1, INT_MIN, int, INT_NEGATE_OVERFLOW (INT_MIN), INT_MIN); CHECK_PRODUCT (-1, UINT_MAX, unsigned int, true, -1 * UINT_MAX); CHECK_SPRODUCT (-32768, LONG_MAX / -32768 - 1, long int, true, LONG_MIN); CHECK_SPRODUCT (-12345, LONG_MAX / -12345, long int, false, DONTCARE); CHECK_SPRODUCT (0, -1, int, false, DONTCARE); CHECK_SPRODUCT (0, 0, int, false, DONTCARE); CHECK_PRODUCT (0, 0u, unsigned int, false, DONTCARE); CHECK_SPRODUCT (0, 1, int, false, DONTCARE); CHECK_SPRODUCT (0, INT_MAX, int, false, DONTCARE); CHECK_SPRODUCT (0, INT_MIN, int, false, DONTCARE); CHECK_PRODUCT (0, UINT_MAX, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, -1, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, 0, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, 0u, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, 1, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, INT_MAX, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, INT_MIN, unsigned int, false, DONTCARE); CHECK_PRODUCT (0u, UINT_MAX, unsigned int, false, DONTCARE); CHECK_SPRODUCT (1, INT_MAX, int, false, DONTCARE); CHECK_SPRODUCT (1, INT_MIN, int, false, DONTCARE); CHECK_PRODUCT (1, UINT_MAX, unsigned int, false, DONTCARE); CHECK_PRODUCT (1u, INT_MIN, unsigned int, true, 1u * INT_MIN); CHECK_PRODUCT (1u, INT_MAX, unsigned int, UINT_MAX < INT_MAX, 1u * INT_MAX); CHECK_PRODUCT (INT_MAX, UINT_MAX, unsigned int, true, INT_MAX * UINT_MAX); CHECK_PRODUCT (INT_MAX, ULONG_MAX, unsigned long int, true, INT_MAX * ULONG_MAX); #if !defined __HP_cc CHECK_SPRODUCT (INT_MIN, LONG_MAX / INT_MIN - 1, long int, true, LONG_MIN); CHECK_SPRODUCT (INT_MIN, LONG_MAX / INT_MIN, long int, false, DONTCARE); #endif CHECK_PRODUCT (INT_MIN, UINT_MAX, unsigned int, true, INT_MIN * UINT_MAX); CHECK_PRODUCT (INT_MIN, ULONG_MAX, unsigned long int, true, INT_MIN * ULONG_MAX); CHECK_SPRODUCT_WRAPV (-1, INT_MAX + 1u, int, false, DONTCARE); CHECK_SPRODUCT_WRAPV (-1, 1u, int, false, DONTCARE); CHECK_SPRODUCT (0, ULONG_MAX, int, false, DONTCARE); CHECK_SPRODUCT (0u, LONG_MIN, int, false, DONTCARE); { long int result; ASSERT (INT_MULTIPLY_WRAPV (INT_MAX, INT_MAX, &result) == (LONG_MAX / INT_MAX < INT_MAX)); ASSERT (INT_MULTIPLY_WRAPV (INT_MAX, INT_MAX, &result) || result == INT_MAX * (long int) INT_MAX); ASSERT (INT_MULTIPLY_WRAPV (INT_MIN, INT_MIN, &result) || result == INT_MIN * (long int) INT_MIN); } # ifdef LLONG_MAX { long long int result; ASSERT (INT_MULTIPLY_WRAPV (LONG_MAX, LONG_MAX, &result) == (LLONG_MAX / LONG_MAX < LONG_MAX)); ASSERT (INT_MULTIPLY_WRAPV (LONG_MAX, LONG_MAX, &result) || result == LONG_MAX * (long long int) LONG_MAX); ASSERT (INT_MULTIPLY_WRAPV (LONG_MIN, LONG_MIN, &result) || result == LONG_MIN * (long long int) LONG_MIN); } # endif /* Check for GCC bug 91450. */ { unsigned long long result; ASSERT (INT_MULTIPLY_WRAPV (int_minus_2, int_1, &result) && result == -2); } #define CHECK_QUOTIENT(a, b, v) VERIFY (INT_DIVIDE_OVERFLOW (a, b) == (v)) CHECK_QUOTIENT (INT_MIN, -1L, INT_MIN == LONG_MIN); CHECK_QUOTIENT (INT_MIN, UINT_MAX, false); CHECK_QUOTIENT (INTMAX_MIN, UINTMAX_MAX, false); CHECK_QUOTIENT (INTMAX_MIN, UINT_MAX, false); CHECK_QUOTIENT (-11, 10u, true); CHECK_QUOTIENT (-10, 10u, true); CHECK_QUOTIENT (-9, 10u, false); CHECK_QUOTIENT (11u, -10, true); CHECK_QUOTIENT (10u, -10, true); CHECK_QUOTIENT (9u, -10, false); #define CHECK_REMAINDER(a, b, v) VERIFY (INT_REMAINDER_OVERFLOW (a, b) == (v)) CHECK_REMAINDER (INT_MIN, -1L, INT_MIN == LONG_MIN); CHECK_REMAINDER (-1, UINT_MAX, true); CHECK_REMAINDER ((intmax_t) -1, UINTMAX_MAX, true); CHECK_REMAINDER (INTMAX_MIN, UINT_MAX, (INTMAX_MAX < UINT_MAX && - (unsigned int) INTMAX_MIN % UINT_MAX != 0)); CHECK_REMAINDER (INT_MIN, ULONG_MAX, INT_MIN % ULONG_MAX != 1); CHECK_REMAINDER (1u, -1, false); CHECK_REMAINDER (37*39u, -39, false); CHECK_REMAINDER (37*39u + 1, -39, true); CHECK_REMAINDER (37*39u - 1, -39, true); CHECK_REMAINDER (LONG_MAX, -INT_MAX, false); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-inttypes.c����������������������������������������������������0000644�0001750�0001750�00000006034�14557510510�015636� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <inttypes.h> substitute. Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <inttypes.h> /* Tests for macros supposed to be defined in inttypes.h. */ const char *k = /* implicit string concatenation */ #ifdef INT8_MAX PRId8 PRIi8 #endif #ifdef UINT8_MAX PRIo8 PRIu8 PRIx8 PRIX8 #endif #ifdef INT16_MAX PRId16 PRIi16 #endif #ifdef UINT16_MAX PRIo16 PRIu16 PRIx16 PRIX16 #endif #ifdef INT32_MAX PRId32 PRIi32 #endif #ifdef UINT32_MAX PRIo32 PRIu32 PRIx32 PRIX32 #endif #ifdef INT64_MAX PRId64 PRIi64 #endif #ifdef UINT64_MAX PRIo64 PRIu64 PRIx64 PRIX64 #endif PRIdLEAST8 PRIiLEAST8 PRIoLEAST8 PRIuLEAST8 PRIxLEAST8 PRIXLEAST8 PRIdLEAST16 PRIiLEAST16 PRIoLEAST16 PRIuLEAST16 PRIxLEAST16 PRIXLEAST16 PRIdLEAST32 PRIiLEAST32 PRIoLEAST32 PRIuLEAST32 PRIxLEAST32 PRIXLEAST32 PRIdLEAST64 PRIiLEAST64 PRIoLEAST64 PRIuLEAST64 PRIxLEAST64 PRIXLEAST64 PRIdFAST8 PRIiFAST8 PRIoFAST8 PRIuFAST8 PRIxFAST8 PRIXFAST8 PRIdFAST16 PRIiFAST16 PRIoFAST16 PRIuFAST16 PRIxFAST16 PRIXFAST16 PRIdFAST32 PRIiFAST32 PRIoFAST32 PRIuFAST32 PRIxFAST32 PRIXFAST32 PRIdFAST64 PRIiFAST64 PRIoFAST64 PRIuFAST64 PRIxFAST64 PRIXFAST64 PRIdMAX PRIiMAX PRIoMAX PRIuMAX PRIxMAX PRIXMAX #ifdef INTPTR_MAX PRIdPTR PRIiPTR #endif #ifdef UINTPTR_MAX PRIoPTR PRIuPTR PRIxPTR PRIXPTR #endif ; const char *l = /* implicit string concatenation */ #ifdef INT8_MAX SCNd8 SCNi8 #endif #ifdef UINT8_MAX SCNo8 SCNu8 SCNx8 #endif #ifdef INT16_MAX SCNd16 SCNi16 #endif #ifdef UINT16_MAX SCNo16 SCNu16 SCNx16 #endif #ifdef INT32_MAX SCNd32 SCNi32 #endif #ifdef UINT32_MAX SCNo32 SCNu32 SCNx32 #endif #ifdef INT64_MAX SCNd64 SCNi64 #endif #ifdef UINT64_MAX SCNo64 SCNu64 SCNx64 #endif SCNdLEAST8 SCNiLEAST8 SCNoLEAST8 SCNuLEAST8 SCNxLEAST8 SCNdLEAST16 SCNiLEAST16 SCNoLEAST16 SCNuLEAST16 SCNxLEAST16 SCNdLEAST32 SCNiLEAST32 SCNoLEAST32 SCNuLEAST32 SCNxLEAST32 SCNdLEAST64 SCNiLEAST64 SCNoLEAST64 SCNuLEAST64 SCNxLEAST64 SCNdFAST8 SCNiFAST8 SCNoFAST8 SCNuFAST8 SCNxFAST8 SCNdFAST16 SCNiFAST16 SCNoFAST16 SCNuFAST16 SCNxFAST16 SCNdFAST32 SCNiFAST32 SCNoFAST32 SCNuFAST32 SCNxFAST32 SCNdFAST64 SCNiFAST64 SCNoFAST64 SCNuFAST64 SCNxFAST64 SCNdMAX SCNiMAX SCNoMAX SCNuMAX SCNxMAX #ifdef INTPTR_MAX SCNdPTR SCNiPTR #endif #ifdef UINTPTR_MAX SCNoPTR SCNuPTR SCNxPTR #endif ; int main (void) { return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-ioctl.c�������������������������������������������������������0000644�0001750�0001750�00000002415�14557510510�015070� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of ioctl() function. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <sys/ioctl.h> #include "signature.h" SIGNATURE_CHECK (ioctl, int, (int, int, ...)); #include <errno.h> #include <unistd.h> #include "macros.h" int main (void) { #ifdef FIONREAD /* Test behaviour for invalid file descriptors. */ { int value; errno = 0; ASSERT (ioctl (-1, FIONREAD, &value) == -1); ASSERT (errno == EBADF); } { int value; close (99); errno = 0; ASSERT (ioctl (99, FIONREAD, &value) == -1); ASSERT (errno == EBADF); } #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-isblank.c�����������������������������������������������������0000644�0001750�0001750�00000003024�14557510510�015376� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isblank() function. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ #include <config.h> #include <ctype.h> #include "signature.h" SIGNATURE_CHECK (isblank, int, (int)); #include <limits.h> #include <stdio.h> #include "macros.h" int main () { unsigned int c; /* Verify the property in the "C" locale. POSIX specifies in <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> that - in all locales, the blank characters include the <space> and <tab> characters, - in the "POSIX" locale (which is usually the same as the "C" locale), the blank characters include only the ASCII <space> and <tab> characters. */ for (c = 0; c <= UCHAR_MAX; c++) ASSERT (!isblank (c) == !(c == ' ' || c == '\t')); ASSERT (!isblank (EOF)); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-isnand-nolibm.c�����������������������������������������������0000644�0001750�0001750�00000001455�14557510510�016513� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnand() substitute. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "isnand-nolibm.h" #include "test-isnand.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-isnanf-nolibm.c�����������������������������������������������0000644�0001750�0001750�00000001455�14557510510�016515� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanf() substitute. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "isnanf-nolibm.h" #include "test-isnanf.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-isnanl-nolibm.c�����������������������������������������������0000644�0001750�0001750�00000001554�14557510510�016523� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanl() substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include "isnanl-nolibm.h" #include "test-isnanl.h" ����������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-iswblank.c����������������������������������������������������0000644�0001750�0001750�00000002254�14557510510�015571� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of iswblank() function. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <wctype.h> #include "macros.h" /* Check that WEOF is defined. */ wint_t e = WEOF; int main (void) { /* Check that the function exist as a function or as a macro. */ (void) iswblank (0); /* Check that the isw* functions map WEOF to 0. */ ASSERT (!iswblank (e)); /* Sanity check for the iswblank function. */ ASSERT (iswblank (L' ')); ASSERT (iswblank (L'\t')); ASSERT (!iswblank (L'\n')); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-iswctype.c����������������������������������������������������0000644�0001750�0001750�00000014024�14557510510�015624� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of wide character properties. Copyright (C) 2023-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2023. */ #include <config.h> #include <wctype.h> #include "signature.h" SIGNATURE_CHECK (iswctype, int, (wint_t, wctype_t)); #include "macros.h" int main (int argc, char *argv[]) { wctype_t desc; desc = wctype ("any"); ASSERT (desc == (wctype_t) 0); desc = wctype ("blank"); ASSERT (desc != (wctype_t) 0); ASSERT (iswctype (L' ', desc)); ASSERT (iswctype (L'\t', desc)); ASSERT (! iswctype (L'\n', desc)); ASSERT (! iswctype (L'a', desc)); ASSERT (! iswctype (L'_', desc)); ASSERT (! iswctype (WEOF, desc)); desc = wctype ("space"); ASSERT (desc != (wctype_t) 0); ASSERT (iswctype (L' ', desc)); ASSERT (iswctype (L'\t', desc)); ASSERT (iswctype (L'\n', desc)); ASSERT (! iswctype (L'a', desc)); ASSERT (! iswctype (L'_', desc)); ASSERT (! iswctype (WEOF, desc)); desc = wctype ("punct"); ASSERT (desc != (wctype_t) 0); ASSERT (iswctype (L'!', desc)); ASSERT (iswctype (L'"', desc)); ASSERT (iswctype (L'#', desc)); ASSERT (iswctype (L'$', desc)); ASSERT (iswctype (L'%', desc)); ASSERT (iswctype (L'&', desc)); ASSERT (iswctype (L'\'', desc)); ASSERT (iswctype (L'(', desc)); ASSERT (iswctype (L')', desc)); ASSERT (iswctype (L'*', desc)); ASSERT (iswctype (L'+', desc)); ASSERT (iswctype (L',', desc)); ASSERT (iswctype (L'-', desc)); ASSERT (iswctype (L'.', desc)); ASSERT (iswctype (L'/', desc)); ASSERT (iswctype (L':', desc)); ASSERT (iswctype (L';', desc)); ASSERT (iswctype (L'<', desc)); ASSERT (iswctype (L'=', desc)); ASSERT (iswctype (L'>', desc)); ASSERT (iswctype (L'?', desc)); ASSERT (iswctype (L'@', desc)); ASSERT (iswctype (L'[', desc)); ASSERT (iswctype (L'\\', desc)); ASSERT (iswctype (L']', desc)); ASSERT (iswctype (L'^', desc)); ASSERT (iswctype (L'_', desc)); ASSERT (iswctype (L'`', desc)); ASSERT (iswctype (L'{', desc)); ASSERT (iswctype (L'|', desc)); ASSERT (iswctype (L'}', desc)); ASSERT (iswctype (L'~', desc)); ASSERT (! iswctype (L' ', desc)); ASSERT (! iswctype (L'a', desc)); ASSERT (! iswctype (L'1', desc)); ASSERT (! iswctype (WEOF, desc)); desc = wctype ("lower"); ASSERT (desc != (wctype_t) 0); ASSERT (iswctype (L'a', desc)); ASSERT (iswctype (L'z', desc)); ASSERT (! iswctype (L'A', desc)); ASSERT (! iswctype (L'Z', desc)); ASSERT (! iswctype (L'1', desc)); ASSERT (! iswctype (L'_', desc)); ASSERT (! iswctype (WEOF, desc)); desc = wctype ("upper"); ASSERT (desc != (wctype_t) 0); ASSERT (iswctype (L'A', desc)); ASSERT (iswctype (L'Z', desc)); ASSERT (! iswctype (L'a', desc)); ASSERT (! iswctype (L'z', desc)); ASSERT (! iswctype (L'1', desc)); ASSERT (! iswctype (L'_', desc)); ASSERT (! iswctype (WEOF, desc)); desc = wctype ("alpha"); ASSERT (desc != (wctype_t) 0); ASSERT (iswctype (L'a', desc)); ASSERT (iswctype (L'z', desc)); ASSERT (iswctype (L'A', desc)); ASSERT (iswctype (L'Z', desc)); ASSERT (! iswctype (L'1', desc)); ASSERT (! iswctype (L'$', desc)); ASSERT (! iswctype (WEOF, desc)); desc = wctype ("digit"); ASSERT (desc != (wctype_t) 0); ASSERT (iswctype (L'0', desc)); ASSERT (iswctype (L'9', desc)); ASSERT (! iswctype (L'a', desc)); ASSERT (! iswctype (L'f', desc)); ASSERT (! iswctype (L'A', desc)); ASSERT (! iswctype (L'F', desc)); ASSERT (! iswctype (WEOF, desc)); desc = wctype ("xdigit"); ASSERT (desc != (wctype_t) 0); ASSERT (iswctype (L'0', desc)); ASSERT (iswctype (L'9', desc)); ASSERT (iswctype (L'a', desc)); ASSERT (iswctype (L'f', desc)); ASSERT (iswctype (L'A', desc)); ASSERT (iswctype (L'F', desc)); ASSERT (! iswctype (L'g', desc)); ASSERT (! iswctype (L'G', desc)); ASSERT (! iswctype (WEOF, desc)); desc = wctype ("alnum"); ASSERT (desc != (wctype_t) 0); ASSERT (iswctype (L'a', desc)); ASSERT (iswctype (L'z', desc)); ASSERT (iswctype (L'A', desc)); ASSERT (iswctype (L'Z', desc)); ASSERT (iswctype (L'0', desc)); ASSERT (iswctype (L'9', desc)); ASSERT (! iswctype (L' ', desc)); ASSERT (! iswctype (L'_', desc)); ASSERT (! iswctype (WEOF, desc)); desc = wctype ("cntrl"); ASSERT (desc != (wctype_t) 0); ASSERT (iswctype (L'\0', desc)); ASSERT (iswctype (L'\n', desc)); ASSERT (iswctype (L'\t', desc)); ASSERT (! iswctype (L' ', desc)); ASSERT (! iswctype (L'a', desc)); ASSERT (! iswctype (L'\\', desc)); ASSERT (! iswctype (WEOF, desc)); desc = wctype ("graph"); ASSERT (desc != (wctype_t) 0); ASSERT (iswctype (L'a', desc)); ASSERT (iswctype (L'z', desc)); ASSERT (iswctype (L'A', desc)); ASSERT (iswctype (L'Z', desc)); ASSERT (iswctype (L'0', desc)); ASSERT (iswctype (L'9', desc)); ASSERT (iswctype (L'$', desc)); ASSERT (! iswctype (L' ', desc)); ASSERT (! iswctype (L'\t', desc)); ASSERT (! iswctype (L'\n', desc)); ASSERT (! iswctype (L'\0', desc)); ASSERT (! iswctype (WEOF, desc)); desc = wctype ("print"); ASSERT (desc != (wctype_t) 0); ASSERT (iswctype (L'a', desc)); ASSERT (iswctype (L'z', desc)); ASSERT (iswctype (L'A', desc)); ASSERT (iswctype (L'Z', desc)); ASSERT (iswctype (L'0', desc)); ASSERT (iswctype (L'9', desc)); ASSERT (iswctype (L'$', desc)); ASSERT (iswctype (L' ', desc)); ASSERT (! iswctype (L'\t', desc)); ASSERT (! iswctype (L'\n', desc)); ASSERT (! iswctype (L'\0', desc)); ASSERT (! iswctype (WEOF, desc)); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-iswdigit.c����������������������������������������������������0000644�0001750�0001750�00000017056�14557510510�015610� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of iswdigit() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <wctype.h> #include "signature.h" SIGNATURE_CHECK (iswdigit, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of iswdigit for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, s, n, &state); if (ret == n) return iswdigit (wc); else return 0; } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = iswdigit (WEOF); ASSERT (is == 0); /* Test single-byte characters. ISO C 99 sections 7.25.2.1.5 and 5.2.1 specify that the decimal digits include only the ASCII 0 ... 9 characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': ASSERT (is != 0); break; default: ASSERT (is == 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\262", 1); ASSERT (is == 0); /* U+00B3 SUPERSCRIPT THREE */ is = for_character ("\263", 1); ASSERT (is == 0); /* U+00B9 SUPERSCRIPT ONE */ is = for_character ("\271", 1); ASSERT (is == 0); } return 0; case '2': /* Locale encoding is EUC-JP. */ { /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is == 0); } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\302\262", 2); ASSERT (is == 0); /* U+00B3 SUPERSCRIPT THREE */ is = for_character ("\302\263", 2); ASSERT (is == 0); /* U+00B9 SUPERSCRIPT ONE */ is = for_character ("\302\271", 2); ASSERT (is == 0); /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\331\243", 2); ASSERT (is == 0); /* U+2070 SUPERSCRIPT ZERO */ is = for_character ("\342\201\260", 3); ASSERT (is == 0); /* U+2079 SUPERSCRIPT NINE */ is = for_character ("\342\201\271", 3); ASSERT (is == 0); /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\357\274\221", 3); ASSERT (is == 0); /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ is = for_character ("\360\235\237\221", 4); ASSERT (is == 0); /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ is = for_character ("\360\235\237\233", 4); ASSERT (is == 0); /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ is = for_character ("\360\235\237\245", 4); ASSERT (is == 0); /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ is = for_character ("\360\235\237\257", 4); ASSERT (is == 0); /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ is = for_character ("\360\235\237\271", 4); ASSERT (is == 0); /* U+E0033 TAG DIGIT THREE */ is = for_character ("\363\240\200\263", 4); ASSERT (is == 0); } return 0; case '4': /* Locale encoding is GB18030. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\201\060\205\065", 4); ASSERT (is == 0); /* U+00B3 SUPERSCRIPT THREE */ is = for_character ("\201\060\205\066", 4); ASSERT (is == 0); /* U+00B9 SUPERSCRIPT ONE */ is = for_character ("\201\060\206\061", 4); ASSERT (is == 0); /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\201\061\211\071", 4); ASSERT (is == 0); /* U+2070 SUPERSCRIPT ZERO */ is = for_character ("\201\066\255\062", 4); ASSERT (is == 0); /* U+2079 SUPERSCRIPT NINE */ is = for_character ("\201\066\256\061", 4); ASSERT (is == 0); /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is == 0); /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ is = for_character ("\224\063\353\071", 4); ASSERT (is == 0); /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ is = for_character ("\224\063\354\071", 4); ASSERT (is == 0); /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ is = for_character ("\224\063\355\071", 4); ASSERT (is == 0); /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ is = for_character ("\224\063\356\071", 4); ASSERT (is == 0); /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ is = for_character ("\224\063\357\071", 4); ASSERT (is == 0); /* U+E0033 TAG DIGIT THREE */ is = for_character ("\323\066\232\071", 4); ASSERT (is == 0); } return 0; } return 1; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-iswpunct.c����������������������������������������������������0000644�0001750�0001750�00000012155�14557510510�015634� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of iswpunct() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <wctype.h> #include "signature.h" SIGNATURE_CHECK (iswpunct, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of iswpunct for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, s, n, &state); if (ret == n) return iswpunct (wc); else return 0; } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = iswpunct (WEOF); ASSERT (is == 0); /* Test single-byte characters. POSIX specifies in <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> no explicit list of punctuation or symbol characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case ' ': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': /* c is an alphanumeric or space character. */ ASSERT (is == 0); break; case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case ':': case ';': case '<': case '=': case '>': case '?': case '[': case '\\': case ']': case '^': case '_': case '{': case '|': case '}': case '~': /* These characters are usually expected to be punctuation or symbol characters. */ ASSERT (is != 0); break; default: ASSERT (is == 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ /* These characters are not in the ISO C "basic character set", but are nevertheless usually expected to be punctuation or symbol characters. */ is = for_character ("$", 1); ASSERT (is != 0); is = for_character ("@", 1); ASSERT (is != 0); is = for_character ("`", 1); ASSERT (is != 0); return 0; } return 1; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-iswxdigit.c���������������������������������������������������0000644�0001750�0001750�00000021362�14557510510�015773� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of iswxdigit() function. Copyright (C) 2020-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <wctype.h> #include "signature.h" SIGNATURE_CHECK (iswxdigit, int, (wint_t)); #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" /* Returns the value of iswxdigit for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, s, n, &state); if (ret == n) return iswxdigit (wc); else return 0; } int main (int argc, char *argv[]) { int is; char buf[4]; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test WEOF. */ is = iswxdigit (WEOF); ASSERT (is == 0); /* Test single-byte characters. ISO C 99 sections 7.25.2.1.12 and 6.4.4.1 specify that the hexadecimal digits include only the ASCII 0 ... 9 A ... F a ... f characters. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = (unsigned char) c; is = for_character (buf, 1); switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': ASSERT (is != 0); break; default: ASSERT (is == 0); break; } break; } } if (argc > 1) switch (argv[1][0]) { case '0': /* C locale; tested above. */ return 0; case '1': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\262", 1); ASSERT (is == 0); /* U+00B3 SUPERSCRIPT THREE */ is = for_character ("\263", 1); ASSERT (is == 0); /* U+00B9 SUPERSCRIPT ONE */ is = for_character ("\271", 1); ASSERT (is == 0); } return 0; case '2': /* Locale encoding is EUC-JP. */ { /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is == 0); /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ is = for_character ("\243\301", 2); ASSERT (is == 0); /* U+FF41 FULLWIDTH LATIN SMALL LETTER A */ is = for_character ("\243\341", 2); ASSERT (is == 0); } return 0; case '3': /* Locale encoding is UTF-8. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\302\262", 2); ASSERT (is == 0); /* U+00B3 SUPERSCRIPT THREE */ is = for_character ("\302\263", 2); ASSERT (is == 0); /* U+00B9 SUPERSCRIPT ONE */ is = for_character ("\302\271", 2); ASSERT (is == 0); /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\331\243", 2); ASSERT (is == 0); /* U+2070 SUPERSCRIPT ZERO */ is = for_character ("\342\201\260", 3); ASSERT (is == 0); /* U+2079 SUPERSCRIPT NINE */ is = for_character ("\342\201\271", 3); ASSERT (is == 0); /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\357\274\221", 3); ASSERT (is == 0); /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ is = for_character ("\357\274\241", 3); ASSERT (is == 0); /* U+FF41 FULLWIDTH LATIN SMALL LETTER A */ is = for_character ("\357\275\201", 3); ASSERT (is == 0); /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ is = for_character ("\360\235\237\221", 4); ASSERT (is == 0); /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ is = for_character ("\360\235\237\233", 4); ASSERT (is == 0); /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ is = for_character ("\360\235\237\245", 4); ASSERT (is == 0); /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ is = for_character ("\360\235\237\257", 4); ASSERT (is == 0); /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ is = for_character ("\360\235\237\271", 4); ASSERT (is == 0); /* U+E0033 TAG DIGIT THREE */ is = for_character ("\363\240\200\263", 4); ASSERT (is == 0); /* U+E0041 TAG LATIN CAPITAL LETTER A */ is = for_character ("\363\240\201\201", 4); ASSERT (is == 0); } return 0; case '4': /* Locale encoding is GB18030. */ { /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\201\060\205\065", 4); ASSERT (is == 0); /* U+00B3 SUPERSCRIPT THREE */ is = for_character ("\201\060\205\066", 4); ASSERT (is == 0); /* U+00B9 SUPERSCRIPT ONE */ is = for_character ("\201\060\206\061", 4); ASSERT (is == 0); /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\201\061\211\071", 4); ASSERT (is == 0); /* U+2070 SUPERSCRIPT ZERO */ is = for_character ("\201\066\255\062", 4); ASSERT (is == 0); /* U+2079 SUPERSCRIPT NINE */ is = for_character ("\201\066\256\061", 4); ASSERT (is == 0); /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); ASSERT (is == 0); /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ is = for_character ("\243\301", 2); ASSERT (is == 0); /* U+FF41 FULLWIDTH LATIN SMALL LETTER A */ is = for_character ("\243\341", 2); ASSERT (is == 0); /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ is = for_character ("\224\063\353\071", 4); ASSERT (is == 0); /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ is = for_character ("\224\063\354\071", 4); ASSERT (is == 0); /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ is = for_character ("\224\063\355\071", 4); ASSERT (is == 0); /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ is = for_character ("\224\063\356\071", 4); ASSERT (is == 0); /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ is = for_character ("\224\063\357\071", 4); ASSERT (is == 0); /* U+E0033 TAG DIGIT THREE */ is = for_character ("\323\066\232\071", 4); ASSERT (is == 0); /* U+E0041 TAG LATIN CAPITAL LETTER A */ is = for_character ("\323\066\234\063", 4); ASSERT (is == 0); } return 0; } return 1; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-langinfo.c����������������������������������������������������0000644�0001750�0001750�00000003572�14557510510�015560� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <langinfo.h> substitute. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ #include <config.h> #include <langinfo.h> /* Check that all the nl_item values are defined. */ int items[] = { /* nl_langinfo items of the LC_CTYPE category */ CODESET, /* nl_langinfo items of the LC_NUMERIC category */ RADIXCHAR, THOUSEP, /* nl_langinfo items of the LC_TIME category */ D_T_FMT, D_FMT, T_FMT, T_FMT_AMPM, AM_STR, PM_STR, DAY_1, DAY_2, DAY_3, DAY_4, DAY_5, DAY_6, DAY_7, ABDAY_1, ABDAY_2, ABDAY_3, ABDAY_4, ABDAY_5, ABDAY_6, ABDAY_7, MON_1, MON_2, MON_3, MON_4, MON_5, MON_6, MON_7, MON_8, MON_9, MON_10, MON_11, MON_12, ABMON_1, ABMON_2, ABMON_3, ABMON_4, ABMON_5, ABMON_6, ABMON_7, ABMON_8, ABMON_9, ABMON_10, ABMON_11, ABMON_12, ERA, ERA_D_FMT, ERA_D_T_FMT, ERA_T_FMT, ALT_DIGITS, /* nl_langinfo items of the LC_MONETARY category */ CRNCYSTR, /* nl_langinfo items of the LC_MESSAGES category */ YESEXPR, NOEXPR }; int main (void) { return 0; } ��������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-largefile.c���������������������������������������������������0000644�0001750�0001750�00000003145�14557510510�015711� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of largefile module. Copyright (C) 2023-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2023. */ /* This test may fail if AC_SYS_LARGEFILE could not arrange for a 64-bit off_t. This should be rare, though: only very old systems don't have support for files larger than 2 GiB. */ #include <config.h> #include <sys/types.h> #include <sys/stat.h> #include "intprops.h" /* Although these tests could be done with static_assert, the test harness prefers dynamic checking. */ int main (void) { int result = 0; /* Check the range of off_t. With MSVC, this test succeeds only thanks to the 'sys_types' module. */ if (TYPE_MAXIMUM (off_t) >> 31 >> 31 == 0) result |= 1; /* Check the size of the 'struct stat' field 'st_size'. With MSVC, this test succeeds only thanks to the 'sys_stat' module. */ { struct stat st; if (sizeof st.st_size != sizeof (off_t)) result |= 2; } return result; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-limits-h.c����������������������������������������������������0000644�0001750�0001750�00000011013�14557510510�015476� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <limits.h> substitute. Copyright 2016-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include <limits.h> #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Woverlength-strings" #endif #define verify_width(width, min, max) \ static_assert ((max) >> ((width) - 1 - ((min) < 0)) == 1) /* Macros borrowed from intprops.h. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) #define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) #define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) /* Type width macros. */ int type_bits[] = { CHAR_BIT, WORD_BIT, LONG_BIT }; verify_width (CHAR_BIT, CHAR_MIN, CHAR_MAX); verify_width (WORD_BIT, INT_MIN, INT_MAX); verify_width (LONG_BIT, LONG_MIN, LONG_MAX); /* Numerical limit macros. */ char limits1[] = { CHAR_MIN, CHAR_MAX }; static_assert (TYPE_MINIMUM (char) == CHAR_MIN); static_assert (TYPE_MAXIMUM (char) == CHAR_MAX); signed char limits2[] = { SCHAR_MIN, SCHAR_MAX }; static_assert (TYPE_MINIMUM (signed char) == SCHAR_MIN); static_assert (TYPE_MAXIMUM (signed char) == SCHAR_MAX); unsigned char limits3[] = { UCHAR_MAX }; static_assert (TYPE_MINIMUM (unsigned char) == 0); static_assert (TYPE_MAXIMUM (unsigned char) == UCHAR_MAX); short limits4[] = { SHRT_MIN, SHRT_MAX }; static_assert (TYPE_MINIMUM (short int) == SHRT_MIN); static_assert (TYPE_MAXIMUM (short int) == SHRT_MAX); unsigned short limits5[] = { USHRT_MAX }; static_assert (TYPE_MINIMUM (unsigned short int) == 0); static_assert (TYPE_MAXIMUM (unsigned short int) == USHRT_MAX); int limits6[] = { INT_MIN, INT_MAX }; static_assert (TYPE_MINIMUM (int) == INT_MIN); static_assert (TYPE_MAXIMUM (int) == INT_MAX); unsigned int limits7[] = { UINT_MAX }; static_assert (TYPE_MINIMUM (unsigned int) == 0); static_assert (TYPE_MAXIMUM (unsigned int) == UINT_MAX); long limits8[] = { LONG_MIN, LONG_MAX }; static_assert (TYPE_MINIMUM (long int) == LONG_MIN); static_assert (TYPE_MAXIMUM (long int) == LONG_MAX); unsigned long limits9[] = { ULONG_MAX }; static_assert (TYPE_MINIMUM (unsigned long int) == 0); static_assert (TYPE_MAXIMUM (unsigned long int) == ULONG_MAX); long long limits10[] = { LLONG_MIN, LLONG_MAX }; static_assert (TYPE_MINIMUM (long long int) == LLONG_MIN); static_assert (TYPE_MAXIMUM (long long int) == LLONG_MAX); unsigned long long limits11[] = { ULLONG_MAX }; static_assert (TYPE_MINIMUM (unsigned long long int) == 0); static_assert (TYPE_MAXIMUM (unsigned long long int) == ULLONG_MAX); /* Specified by POSIX, not by ISO C. */ long long limits12[] = { SSIZE_MAX }; /* Macros specified by C23 and by ISO/IEC TS 18661-1:2014. */ verify_width (CHAR_WIDTH, CHAR_MIN, CHAR_MAX); verify_width (SCHAR_WIDTH, SCHAR_MIN, SCHAR_MAX); verify_width (UCHAR_WIDTH, 0, UCHAR_MAX); verify_width (SHRT_WIDTH, SHRT_MIN, SHRT_MAX); verify_width (USHRT_WIDTH, 0, USHRT_MAX); verify_width (INT_WIDTH, INT_MIN, INT_MAX); verify_width (UINT_WIDTH, 0, UINT_MAX); verify_width (LONG_WIDTH, LONG_MIN, LONG_MAX); verify_width (ULONG_WIDTH, 0, ULONG_MAX); verify_width (LLONG_WIDTH, LLONG_MIN, LLONG_MAX); verify_width (ULLONG_WIDTH, 0, ULLONG_MAX); /* Macros specified by C23. */ int bool_attrs[] = { BOOL_MAX, BOOL_WIDTH }; static_assert (BOOL_MAX == (((1U << (BOOL_WIDTH - 1)) - 1) * 2) + 1); static_assert (0 < MB_LEN_MAX); /* Get ssize_t, size_t. */ #include <sys/types.h> static_assert (TYPE_MAXIMUM (ssize_t) == SSIZE_MAX); /* Verify that ssize_t has the same width as size_t. */ static_assert (TYPE_MAXIMUM (size_t) / 2 == SSIZE_MAX); int main (void) { return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-listen.c������������������������������������������������������0000644�0001750�0001750�00000002606�14557510510�015256� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test listen() function. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (listen, int, (int, int)); #include <errno.h> #include <unistd.h> #include "sockets.h" #include "macros.h" /* Tell GCC not to warn about the specific edge cases tested here. */ #if __GNUC__ >= 13 # pragma GCC diagnostic ignored "-Wanalyzer-fd-use-without-check" #endif int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (listen (-1, 1) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (listen (99 ,1) == -1); ASSERT (errno == EBADF); } return 0; } ��������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-localcharset.c������������������������������������������������0000644�0001750�0001750�00000002224�14557510510�016420� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Manual test of localcharset() function. Copyright (C) 2018-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* This program prints the result of locale_charset in the current locale. One way to use it is: $ for l in `locale -a`; do echo -n "$l "; LANG=$l ./test-localcharset; done \ | sort -k 2 */ #include <config.h> #include "localcharset.h" #include <locale.h> #include <stdio.h> int main (void) { setlocale (LC_ALL, ""); printf ("%s\n", locale_charset ()); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-locale.c������������������������������������������������������0000644�0001750�0001750�00000004406�14557510510�015217� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <locale.h> substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <locale.h> int a[] = { LC_ALL, LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME }; /* Check that the 'struct lconv' type is defined. */ struct lconv l; int ls; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ static_assert (sizeof NULL == sizeof (void *)); int main () { #if HAVE_WORKING_NEWLOCALE /* Check that the locale_t type and the LC_GLOBAL_LOCALE macro are defined. */ locale_t b = LC_GLOBAL_LOCALE; (void) b; #endif /* Check that 'struct lconv' has the ISO C and POSIX specified members. */ ls += sizeof (*l.decimal_point); ls += sizeof (*l.thousands_sep); ls += sizeof (*l.grouping); ls += sizeof (*l.mon_decimal_point); ls += sizeof (*l.mon_thousands_sep); ls += sizeof (*l.mon_grouping); ls += sizeof (*l.positive_sign); ls += sizeof (*l.negative_sign); ls += sizeof (*l.currency_symbol); ls += sizeof (l.frac_digits); ls += sizeof (l.p_cs_precedes); ls += sizeof (l.p_sign_posn); ls += sizeof (l.p_sep_by_space); ls += sizeof (l.n_cs_precedes); ls += sizeof (l.n_sign_posn); ls += sizeof (l.n_sep_by_space); ls += sizeof (*l.int_curr_symbol); ls += sizeof (l.int_frac_digits); ls += sizeof (l.int_p_cs_precedes); ls += sizeof (l.int_p_sign_posn); ls += sizeof (l.int_p_sep_by_space); ls += sizeof (l.int_n_cs_precedes); ls += sizeof (l.int_n_sign_posn); ls += sizeof (l.int_n_sep_by_space); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-localeconv.c��������������������������������������������������0000644�0001750�0001750�00000004502�14557510510�016102� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of localeconv() function. Copyright (C) 2012-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2012. */ #include <config.h> #include <locale.h> #include "signature.h" SIGNATURE_CHECK (localeconv, struct lconv *, (void)); #include <limits.h> #include <string.h> #include "macros.h" int main () { /* Test localeconv() result in the "C" locale. */ { struct lconv *l = localeconv (); ASSERT (STREQ (l->decimal_point, ".")); ASSERT (STREQ (l->thousands_sep, "")); #if !((defined __FreeBSD__ || defined __DragonFly__) || defined __sun || defined __CYGWIN__) ASSERT (STREQ (l->grouping, "")); #endif ASSERT (STREQ (l->mon_decimal_point, "")); ASSERT (STREQ (l->mon_thousands_sep, "")); #if !((defined __FreeBSD__ || defined __DragonFly__) || defined __sun || defined __CYGWIN__) ASSERT (STREQ (l->mon_grouping, "")); #endif ASSERT (STREQ (l->positive_sign, "")); ASSERT (STREQ (l->negative_sign, "")); ASSERT (STREQ (l->currency_symbol, "")); ASSERT (l->frac_digits == CHAR_MAX); ASSERT (l->p_cs_precedes == CHAR_MAX); ASSERT (l->p_sign_posn == CHAR_MAX); ASSERT (l->p_sep_by_space == CHAR_MAX); ASSERT (l->n_cs_precedes == CHAR_MAX); ASSERT (l->n_sign_posn == CHAR_MAX); ASSERT (l->n_sep_by_space == CHAR_MAX); ASSERT (STREQ (l->int_curr_symbol, "")); ASSERT (l->int_frac_digits == CHAR_MAX); ASSERT (l->int_p_cs_precedes == CHAR_MAX); ASSERT (l->int_p_sign_posn == CHAR_MAX); ASSERT (l->int_p_sep_by_space == CHAR_MAX); ASSERT (l->int_n_cs_precedes == CHAR_MAX); ASSERT (l->int_n_sign_posn == CHAR_MAX); ASSERT (l->int_n_sep_by_space == CHAR_MAX); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-localename.c��������������������������������������������������0000644�0001750�0001750�00000060476�14557510510�016071� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of gl_locale_name function and its variants. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include "localename.h" #include <locale.h> #include <stdlib.h> #include <string.h> #include "macros.h" #if HAVE_WORKING_NEWLOCALE && HAVE_WORKING_USELOCALE && !HAVE_FAKE_LOCALES # define HAVE_GOOD_USELOCALE 1 #endif #ifdef __HAIKU__ /* Work around Haiku bug <https://dev.haiku-os.org/ticket/18344>. */ # define freelocale(loc) ((void) (loc)) #endif /* Suppress GCC false positive. */ #if __GNUC__ >= 12 # pragma GCC diagnostic ignored "-Wanalyzer-use-of-uninitialized-value" #endif #if HAVE_GOOD_USELOCALE static struct { int cat; int mask; const char *string; } const categories[] = { { LC_CTYPE, LC_CTYPE_MASK, "LC_CTYPE" }, { LC_NUMERIC, LC_NUMERIC_MASK, "LC_NUMERIC" }, { LC_TIME, LC_TIME_MASK, "LC_TIME" }, { LC_COLLATE, LC_COLLATE_MASK, "LC_COLLATE" }, { LC_MONETARY, LC_MONETARY_MASK, "LC_MONETARY" }, { LC_MESSAGES, LC_MESSAGES_MASK, "LC_MESSAGES" } # ifdef LC_PAPER , { LC_PAPER, LC_PAPER_MASK, "LC_PAPER" } # endif # ifdef LC_NAME , { LC_NAME, LC_NAME_MASK, "LC_NAME" } # endif # ifdef LC_ADDRESS , { LC_ADDRESS, LC_ADDRESS_MASK, "LC_ADDRESS" } # endif # ifdef LC_TELEPHONE , { LC_TELEPHONE, LC_TELEPHONE_MASK, "LC_TELEPHONE" } # endif # ifdef LC_MEASUREMENT , { LC_MEASUREMENT, LC_MEASUREMENT_MASK, "LC_MEASUREMENT" } # endif # ifdef LC_IDENTIFICATION , { LC_IDENTIFICATION, LC_IDENTIFICATION_MASK, "LC_IDENTIFICATION" } # endif }; #endif /* Test the gl_locale_name() function. */ static void test_locale_name (void) { const char *ret; const char *name; /* Check that gl_locale_name returns non-NULL. */ ASSERT (gl_locale_name (LC_MESSAGES, "LC_MESSAGES") != NULL); /* Get into a defined state, */ setlocale (LC_ALL, "en_US.UTF-8"); #if HAVE_GOOD_USELOCALE uselocale (LC_GLOBAL_LOCALE); #endif /* Check that when all environment variables are unset, gl_locale_name returns the default locale. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LC_NUMERIC"); unsetenv ("LANG"); /* Need also to unset all environment variables that specify standard or non-standard locale categories. Otherwise, on glibc systems, when some of these variables are set and reference a nonexistent locale, the setlocale (LC_ALL, "") call below would fail. */ unsetenv ("LC_COLLATE"); unsetenv ("LC_MONETARY"); unsetenv ("LC_TIME"); unsetenv ("LC_ADDRESS"); unsetenv ("LC_IDENTIFICATION"); unsetenv ("LC_MEASUREMENT"); unsetenv ("LC_NAME"); unsetenv ("LC_PAPER"); unsetenv ("LC_TELEPHONE"); ret = setlocale (LC_ALL, ""); ASSERT (ret != NULL); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), gl_locale_name_default ()) == 0); ASSERT (strcmp (gl_locale_name (LC_NUMERIC, "LC_NUMERIC"), gl_locale_name_default ()) == 0); /* Check that an empty environment variable is treated like an unset environment variable. */ setenv ("LC_ALL", "", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "", 1); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "", 1); unsetenv ("LANG"); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "", 1); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), gl_locale_name_default ()) == 0); /* Check that LC_ALL overrides the others, and LANG is overridden by the others. */ setenv ("LC_ALL", "C", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "C", 1); setenv ("LC_MESSAGES", "C", 1); unsetenv ("LANG"); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); setlocale (LC_ALL, ""); ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); /* Check mixed situations. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); setenv ("LANG", "de_DE.UTF-8", 1); if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name (LC_CTYPE, "LC_CTYPE"); #if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, here, gl_locale_name_thread (LC_CTYPE, "LC_CTYPE") returns NULL and gl_locale_name_posix (LC_CTYPE, "LC_CTYPE") returns either "de_DE" or "de_DE.UTF-8". */ ASSERT (strcmp (name, "de_DE") == 0 || strcmp (name, "de_DE.UTF-8") == 0); #else ASSERT (strcmp (name, "de_DE.UTF-8") == 0); #endif name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); unsetenv ("LANG"); if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, gl_locale_name_default ()) == 0); name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } #if HAVE_GOOD_USELOCALE /* Check that gl_locale_name considers the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { uselocale (locale); name = gl_locale_name (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } /* Check that gl_locale_name distinguishes different categories of the thread locale, and that the name is the right one for each. */ { unsigned int i; for (i = 0; i < SIZEOF (categories); i++) { int category_mask = categories[i].mask; locale_t loc = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (loc != NULL) { locale_t locale = newlocale (category_mask, "de_DE.UTF-8", loc); if (locale == NULL) freelocale (loc); else { unsigned int j; uselocale (locale); for (j = 0; j < SIZEOF (categories); j++) { const char *name_j = gl_locale_name (categories[j].cat, categories[j].string); if (j == i) ASSERT (strcmp (name_j, "de_DE.UTF-8") == 0); else ASSERT (strcmp (name_j, "fr_FR.UTF-8") == 0); } uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } } } #endif } /* Test the gl_locale_name_thread() function. */ static void test_locale_name_thread (void) { /* Get into a defined state, */ setlocale (LC_ALL, "en_US.UTF-8"); #if HAVE_GOOD_USELOCALE /* Check that gl_locale_name_thread returns NULL when no thread locale is set. */ uselocale (LC_GLOBAL_LOCALE); ASSERT (gl_locale_name_thread (LC_CTYPE, "LC_CTYPE") == NULL); ASSERT (gl_locale_name_thread (LC_MESSAGES, "LC_MESSAGES") == NULL); /* Check that gl_locale_name_thread considers the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { const char *name; uselocale (locale); name = gl_locale_name_thread (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); name = gl_locale_name_thread (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } /* Check that gl_locale_name_thread distinguishes different categories of the thread locale, and that the name is the right one for each. */ { unsigned int i; for (i = 0; i < SIZEOF (categories); i++) { int category_mask = categories[i].mask; locale_t loc = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (loc != NULL) { locale_t locale = newlocale (category_mask, "de_DE.UTF-8", loc); if (locale == NULL) freelocale (loc); else { unsigned int j; uselocale (locale); for (j = 0; j < SIZEOF (categories); j++) { const char *name_j = gl_locale_name_thread (categories[j].cat, categories[j].string); if (j == i) ASSERT (strcmp (name_j, "de_DE.UTF-8") == 0); else ASSERT (strcmp (name_j, "fr_FR.UTF-8") == 0); } uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } } } /* Check that gl_locale_name_thread returns a string that is allocated with indefinite extent. */ { /* Try many locale names in turn, in order to defeat possible caches. */ static const char * const choices[] = { "C", "POSIX", "af_ZA", "af_ZA.UTF-8", "am_ET", "am_ET.UTF-8", "be_BY", "be_BY.UTF-8", "bg_BG", "bg_BG.UTF-8", "ca_ES", "ca_ES.UTF-8", "cs_CZ", "cs_CZ.UTF-8", "da_DK", "da_DK.UTF-8", "de_AT", "de_AT.UTF-8", "de_CH", "de_CH.UTF-8", "de_DE", "de_DE.UTF-8", "el_GR", "el_GR.UTF-8", "en_AU", "en_AU.UTF-8", "en_CA", "en_CA.UTF-8", "en_GB", "en_GB.UTF-8", "en_IE", "en_IE.UTF-8", "en_NZ", "en_NZ.UTF-8", "en_US", "en_US.UTF-8", "es_ES", "es_ES.UTF-8", "et_EE", "et_EE.UTF-8", "eu_ES", "eu_ES.UTF-8", "fi_FI", "fi_FI.UTF-8", "fr_BE", "fr_BE.UTF-8", "fr_CA", "fr_CA.UTF-8", "fr_CH", "fr_CH.UTF-8", "fr_FR", "fr_FR.UTF-8", "he_IL", "he_IL.UTF-8", "hr_HR", "hr_HR.UTF-8", "hu_HU", "hu_HU.UTF-8", "hy_AM", "is_IS", "is_IS.UTF-8", "it_CH", "it_CH.UTF-8", "it_IT", "it_IT.UTF-8", "ja_JP.UTF-8", "kk_KZ", "kk_KZ.UTF-8", "ko_KR.UTF-8", "lt_LT", "lt_LT.UTF-8", "nl_BE", "nl_BE.UTF-8", "nl_NL", "nl_NL.UTF-8", "no_NO", "no_NO.UTF-8", "pl_PL", "pl_PL.UTF-8", "pt_BR", "pt_BR.UTF-8", "pt_PT", "pt_PT.UTF-8", "ro_RO", "ro_RO.UTF-8", "ru_RU", "ru_RU.UTF-8", "sk_SK", "sk_SK.UTF-8", "sl_SI", "sl_SI.UTF-8", "sv_SE", "sv_SE.UTF-8", "tr_TR", "tr_TR.UTF-8", "uk_UA", "uk_UA.UTF-8", "zh_CN", "zh_CN.UTF-8", "zh_HK", "zh_HK.UTF-8", "zh_TW", "zh_TW.UTF-8" }; /* Remember which locales are available. */ unsigned char /* bool */ available[SIZEOF (choices)]; /* Array of remembered results of gl_locale_name_thread. */ const char *unsaved_names[SIZEOF (choices)][SIZEOF (categories)]; /* Array of remembered results of gl_locale_name_thread, stored in safe memory. */ char *saved_names[SIZEOF (choices)][SIZEOF (categories)]; unsigned int j; for (j = 0; j < SIZEOF (choices); j++) { locale_t locale = newlocale (LC_ALL_MASK, choices[j], NULL); available[j] = (locale != NULL); if (locale != NULL) { unsigned int i; uselocale (locale); for (i = 0; i < SIZEOF (categories); i++) { unsaved_names[j][i] = gl_locale_name_thread (categories[i].cat, categories[i].string); saved_names[j][i] = strdup (unsaved_names[j][i]); } uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } /* Verify the unsaved_names are still valid. */ for (j = 0; j < SIZEOF (choices); j++) if (available[j]) { unsigned int i; for (i = 0; i < SIZEOF (categories); i++) ASSERT (strcmp (unsaved_names[j][i], saved_names[j][i]) == 0); } /* Allocate many locales, without freeing them. This is an attempt at overwriting as much of the previously allocated memory as possible. */ for (j = SIZEOF (choices); j > 0; ) { j--; if (available[j]) { locale_t locale = newlocale (LC_ALL_MASK, choices[j], NULL); unsigned int i; ASSERT (locale != NULL); uselocale (locale); for (i = 0; i < SIZEOF (categories); i++) { const char *name = gl_locale_name_thread (categories[i].cat, categories[i].string); ASSERT (strcmp (unsaved_names[j][i], name) == 0); } uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } /* Verify the unsaved_names are still valid. */ for (j = 0; j < SIZEOF (choices); j++) if (available[j]) { unsigned int i; for (i = 0; i < SIZEOF (categories); i++) { ASSERT (strcmp (unsaved_names[j][i], saved_names[j][i]) == 0); free (saved_names[j][i]); } } } #else /* Check that gl_locale_name_thread always returns NULL. */ ASSERT (gl_locale_name_thread (LC_CTYPE, "LC_CTYPE") == NULL); ASSERT (gl_locale_name_thread (LC_MESSAGES, "LC_MESSAGES") == NULL); #endif } /* Test the gl_locale_name_posix() function. */ static void test_locale_name_posix (void) { const char *ret; const char *name; /* Get into a defined state, */ setlocale (LC_ALL, "en_US.UTF-8"); #if HAVE_GOOD_USELOCALE uselocale (LC_GLOBAL_LOCALE); #endif /* Check that when all environment variables are unset, gl_locale_name_posix returns either NULL or the default locale. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LC_NUMERIC"); unsetenv ("LANG"); /* Need also to unset all environment variables that specify standard or non-standard locale categories. Otherwise, on glibc systems, when some of these variables are set and reference a nonexistent locale, the setlocale (LC_ALL, "") call below would fail. */ unsetenv ("LC_COLLATE"); unsetenv ("LC_MONETARY"); unsetenv ("LC_TIME"); unsetenv ("LC_ADDRESS"); unsetenv ("LC_IDENTIFICATION"); unsetenv ("LC_MEASUREMENT"); unsetenv ("LC_NAME"); unsetenv ("LC_PAPER"); unsetenv ("LC_TELEPHONE"); ret = setlocale (LC_ALL, ""); ASSERT (ret != NULL); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); name = gl_locale_name_posix (LC_NUMERIC, "LC_NUMERIC"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); /* Check that an empty environment variable is treated like an unset environment variable. */ setenv ("LC_ALL", "", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "", 1); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "", 1); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "", 1); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); /* Check that LC_ALL overrides the others, and LANG is overridden by the others. */ setenv ("LC_ALL", "C", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "C", 1); setenv ("LC_MESSAGES", "C", 1); unsetenv ("LANG"); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); setlocale (LC_ALL, ""); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); /* Check mixed situations. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); setenv ("LANG", "de_DE.UTF-8", 1); if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name_posix (LC_CTYPE, "LC_CTYPE"); #if defined _WIN32 && !defined __CYGWIN__ ASSERT (strcmp (name, "de_DE") == 0 || strcmp (name, "de_DE.UTF-8") == 0); #else ASSERT (strcmp (name, "de_DE.UTF-8") == 0); #endif name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); unsetenv ("LANG"); if (setlocale (LC_ALL, "") != NULL) { name = gl_locale_name_posix (LC_CTYPE, "LC_CTYPE"); ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); } #if HAVE_GOOD_USELOCALE /* Check that gl_locale_name_posix ignores the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); setlocale (LC_ALL, ""); uselocale (locale); name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } #endif } /* Test the gl_locale_name_environ() function. */ static void test_locale_name_environ (void) { const char *name; /* Get into a defined state, */ setlocale (LC_ALL, "en_US.UTF-8"); #if HAVE_GOOD_USELOCALE uselocale (LC_GLOBAL_LOCALE); #endif /* Check that when all environment variables are unset, gl_locale_name_environ returns NULL. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LC_NUMERIC"); unsetenv ("LANG"); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); ASSERT (gl_locale_name_environ (LC_NUMERIC, "LC_NUMERIC") == NULL); /* Check that an empty environment variable is treated like an unset environment variable. */ setenv ("LC_ALL", "", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "", 1); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "", 1); unsetenv ("LANG"); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "", 1); ASSERT (gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES") == NULL); /* Check that LC_ALL overrides the others, and LANG is overridden by the others. */ setenv ("LC_ALL", "C", 1); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); unsetenv ("LANG"); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); unsetenv ("LC_ALL"); setenv ("LC_CTYPE", "C", 1); setenv ("LC_MESSAGES", "C", 1); unsetenv ("LANG"); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); /* Check mixed situations. */ unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); setenv ("LANG", "de_DE.UTF-8", 1); name = gl_locale_name_environ (LC_CTYPE, "LC_CTYPE"); ASSERT (strcmp (name, "de_DE.UTF-8") == 0); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); setenv ("LC_MESSAGES", "fr_FR.UTF-8", 1); unsetenv ("LANG"); name = gl_locale_name_environ (LC_CTYPE, "LC_CTYPE"); ASSERT (name == NULL); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "fr_FR.UTF-8") == 0); #if HAVE_GOOD_USELOCALE /* Check that gl_locale_name_environ ignores the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { unsetenv ("LC_ALL"); unsetenv ("LC_CTYPE"); unsetenv ("LC_MESSAGES"); setenv ("LANG", "C", 1); setlocale (LC_ALL, ""); uselocale (locale); name = gl_locale_name_environ (LC_MESSAGES, "LC_MESSAGES"); ASSERT (strcmp (name, "C") == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } #endif } /* Test the gl_locale_name_default() function. */ static void test_locale_name_default (void) { const char *name = gl_locale_name_default (); ASSERT (name != NULL); /* Only Mac OS X and Windows have a facility for the user to set the default locale. */ #if !((defined __APPLE__ && defined __MACH__) || (defined _WIN32 || defined __CYGWIN__)) ASSERT (strcmp (name, "C") == 0); #endif #if HAVE_GOOD_USELOCALE /* Check that gl_locale_name_default ignores the thread locale. */ { locale_t locale = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", NULL); if (locale != NULL) { uselocale (locale); ASSERT (strcmp (gl_locale_name_default (), name) == 0); uselocale (LC_GLOBAL_LOCALE); freelocale (locale); } } #endif } int main () { test_locale_name (); test_locale_name_thread (); test_locale_name_posix (); test_locale_name_environ (); test_locale_name_default (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-lock.c��������������������������������������������������������0000644�0001750�0001750�00000037730�14557510510�014716� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of locking in multithreaded situations. Copyright (C) 2005, 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #include <config.h> #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS #if USE_ISOC_THREADS # define TEST_ISOC_THREADS 1 #endif #if USE_POSIX_THREADS # define TEST_POSIX_THREADS 1 #endif #if USE_ISOC_AND_POSIX_THREADS # define TEST_ISOC_AND_POSIX_THREADS 1 #endif #if USE_WINDOWS_THREADS # define TEST_WINDOWS_THREADS 1 #endif /* Whether to enable locking. Uncomment this to get a test program without locking, to verify that it crashes. */ #define ENABLE_LOCKING 1 /* Which tests to perform. Uncomment some of these, to verify that all tests crash if no locking is enabled. */ #define DO_TEST_LOCK 1 #define DO_TEST_RWLOCK 1 #define DO_TEST_RECURSIVE_LOCK 1 #define DO_TEST_ONCE 1 /* Whether to help the scheduler through explicit yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Whether to print debugging messages. */ #define ENABLE_DEBUGGING 0 /* Number of simultaneous threads. */ #define THREAD_COUNT 10 /* Number of operations performed in each thread. This is quite high, because with a smaller count, say 5000, we often get an "OK" result even without ENABLE_LOCKING (on Linux/x86). */ #define REPEAT_COUNT 50000 #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if !ENABLE_LOCKING # undef USE_ISOC_THREADS # undef USE_POSIX_THREADS # undef USE_ISOC_AND_POSIX_THREADS # undef USE_WINDOWS_THREADS #endif #include "glthread/lock.h" #if !ENABLE_LOCKING # if TEST_ISOC_THREADS # define USE_ISOC_THREADS 1 # endif # if TEST_POSIX_THREADS # define USE_POSIX_THREADS 1 # endif # if TEST_ISOC_AND_POSIX_THREADS # define USE_ISOC_AND_POSIX_THREADS 1 # endif # if TEST_WINDOWS_THREADS # define USE_WINDOWS_THREADS 1 # endif #endif #include "glthread/thread.h" #include "glthread/yield.h" #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #include "atomic-int-gnulib.h" #if ENABLE_DEBUGGING # define dbgprintf printf #else # define dbgprintf if (0) printf #endif #if EXPLICIT_YIELD # define yield() gl_thread_yield () #else # define yield() #endif #define ACCOUNT_COUNT 4 static int account[ACCOUNT_COUNT]; static int random_account (void) { return ((unsigned long) random () >> 3) % ACCOUNT_COUNT; } static void check_accounts (void) { int i, sum; sum = 0; for (i = 0; i < ACCOUNT_COUNT; i++) sum += account[i]; if (sum != ACCOUNT_COUNT * 1000) abort (); } /* ------------------- Test normal (non-recursive) locks ------------------- */ /* Test normal locks by having several bank accounts and several threads which shuffle around money between the accounts and another thread checking that all the money is still there. */ gl_lock_define_initialized(static, my_lock) static void * lock_mutator_thread (_GL_UNUSED void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { int i1, i2, value; dbgprintf ("Mutator %p before lock\n", gl_thread_self_pointer ()); gl_lock_lock (my_lock); dbgprintf ("Mutator %p after lock\n", gl_thread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned long) random () >> 3) % 10; account[i1] += value; account[i2] -= value; dbgprintf ("Mutator %p before unlock\n", gl_thread_self_pointer ()); gl_lock_unlock (my_lock); dbgprintf ("Mutator %p after unlock\n", gl_thread_self_pointer ()); dbgprintf ("Mutator %p before check lock\n", gl_thread_self_pointer ()); gl_lock_lock (my_lock); check_accounts (); gl_lock_unlock (my_lock); dbgprintf ("Mutator %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", gl_thread_self_pointer ()); return NULL; } static struct atomic_int lock_checker_done; static void * lock_checker_thread (_GL_UNUSED void *arg) { while (get_atomic_int_value (&lock_checker_done) == 0) { dbgprintf ("Checker %p before check lock\n", gl_thread_self_pointer ()); gl_lock_lock (my_lock); check_accounts (); gl_lock_unlock (my_lock); dbgprintf ("Checker %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", gl_thread_self_pointer ()); return NULL; } static void test_lock (void) { int i; gl_thread_t checkerthread; gl_thread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&lock_checker_done); set_atomic_int_value (&lock_checker_done, 0); /* Spawn the threads. */ checkerthread = gl_thread_create (lock_checker_thread, NULL); for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (lock_mutator_thread, NULL); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); set_atomic_int_value (&lock_checker_done, 1); gl_thread_join (checkerthread, NULL); check_accounts (); } /* ----------------- Test read-write (non-recursive) locks ----------------- */ /* Test read-write locks by having several bank accounts and several threads which shuffle around money between the accounts and several other threads that check that all the money is still there. */ gl_rwlock_define_initialized(static, my_rwlock) static void * rwlock_mutator_thread (_GL_UNUSED void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { int i1, i2, value; dbgprintf ("Mutator %p before wrlock\n", gl_thread_self_pointer ()); gl_rwlock_wrlock (my_rwlock); dbgprintf ("Mutator %p after wrlock\n", gl_thread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned long) random () >> 3) % 10; account[i1] += value; account[i2] -= value; dbgprintf ("Mutator %p before unlock\n", gl_thread_self_pointer ()); gl_rwlock_unlock (my_rwlock); dbgprintf ("Mutator %p after unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", gl_thread_self_pointer ()); return NULL; } static struct atomic_int rwlock_checker_done; static void * rwlock_checker_thread (_GL_UNUSED void *arg) { while (get_atomic_int_value (&rwlock_checker_done) == 0) { dbgprintf ("Checker %p before check rdlock\n", gl_thread_self_pointer ()); gl_rwlock_rdlock (my_rwlock); check_accounts (); gl_rwlock_unlock (my_rwlock); dbgprintf ("Checker %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", gl_thread_self_pointer ()); return NULL; } static void test_rwlock (void) { int i; gl_thread_t checkerthreads[THREAD_COUNT]; gl_thread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&rwlock_checker_done); set_atomic_int_value (&rwlock_checker_done, 0); /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) checkerthreads[i] = gl_thread_create (rwlock_checker_thread, NULL); for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (rwlock_mutator_thread, NULL); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); set_atomic_int_value (&rwlock_checker_done, 1); for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (checkerthreads[i], NULL); check_accounts (); } /* -------------------------- Test recursive locks -------------------------- */ /* Test recursive locks by having several bank accounts and several threads which shuffle around money between the accounts (recursively) and another thread checking that all the money is still there. */ gl_recursive_lock_define_initialized(static, my_reclock) static void recshuffle (void) { int i1, i2, value; dbgprintf ("Mutator %p before lock\n", gl_thread_self_pointer ()); gl_recursive_lock_lock (my_reclock); dbgprintf ("Mutator %p after lock\n", gl_thread_self_pointer ()); i1 = random_account (); i2 = random_account (); value = ((unsigned long) random () >> 3) % 10; account[i1] += value; account[i2] -= value; /* Recursive with probability 0.5. */ if (((unsigned long) random () >> 3) % 2) recshuffle (); dbgprintf ("Mutator %p before unlock\n", gl_thread_self_pointer ()); gl_recursive_lock_unlock (my_reclock); dbgprintf ("Mutator %p after unlock\n", gl_thread_self_pointer ()); } static void * reclock_mutator_thread (_GL_UNUSED void *arg) { int repeat; for (repeat = REPEAT_COUNT; repeat > 0; repeat--) { recshuffle (); dbgprintf ("Mutator %p before check lock\n", gl_thread_self_pointer ()); gl_recursive_lock_lock (my_reclock); check_accounts (); gl_recursive_lock_unlock (my_reclock); dbgprintf ("Mutator %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Mutator %p dying.\n", gl_thread_self_pointer ()); return NULL; } static struct atomic_int reclock_checker_done; static void * reclock_checker_thread (_GL_UNUSED void *arg) { while (get_atomic_int_value (&reclock_checker_done) == 0) { dbgprintf ("Checker %p before check lock\n", gl_thread_self_pointer ()); gl_recursive_lock_lock (my_reclock); check_accounts (); gl_recursive_lock_unlock (my_reclock); dbgprintf ("Checker %p after check unlock\n", gl_thread_self_pointer ()); yield (); } dbgprintf ("Checker %p dying.\n", gl_thread_self_pointer ()); return NULL; } static void test_recursive_lock (void) { int i; gl_thread_t checkerthread; gl_thread_t threads[THREAD_COUNT]; /* Initialization. */ for (i = 0; i < ACCOUNT_COUNT; i++) account[i] = 1000; init_atomic_int (&reclock_checker_done); set_atomic_int_value (&reclock_checker_done, 0); /* Spawn the threads. */ checkerthread = gl_thread_create (reclock_checker_thread, NULL); for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (reclock_mutator_thread, NULL); /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); set_atomic_int_value (&reclock_checker_done, 1); gl_thread_join (checkerthread, NULL); check_accounts (); } /* ------------------------ Test once-only execution ------------------------ */ /* Test once-only execution by having several threads attempt to grab a once-only task simultaneously (triggered by releasing a read-write lock). */ gl_once_define(static, fresh_once) static int ready[THREAD_COUNT]; static gl_lock_t ready_lock[THREAD_COUNT]; #if ENABLE_LOCKING static gl_rwlock_t fire_signal[REPEAT_COUNT]; #else static volatile int fire_signal_state; #endif static gl_once_t once_control; static int performed; gl_lock_define_initialized(static, performed_lock) static void once_execute (void) { gl_lock_lock (performed_lock); performed++; gl_lock_unlock (performed_lock); } static void * once_contender_thread (void *arg) { int id = (int) (intptr_t) arg; int repeat; for (repeat = 0; repeat <= REPEAT_COUNT; repeat++) { /* Tell the main thread that we're ready. */ gl_lock_lock (ready_lock[id]); ready[id] = 1; gl_lock_unlock (ready_lock[id]); if (repeat == REPEAT_COUNT) break; dbgprintf ("Contender %p waiting for signal for round %d\n", gl_thread_self_pointer (), repeat); #if ENABLE_LOCKING /* Wait for the signal to go. */ gl_rwlock_rdlock (fire_signal[repeat]); /* And don't hinder the others (if the scheduler is unfair). */ gl_rwlock_unlock (fire_signal[repeat]); #else /* Wait for the signal to go. */ while (fire_signal_state <= repeat) yield (); #endif dbgprintf ("Contender %p got the signal for round %d\n", gl_thread_self_pointer (), repeat); /* Contend for execution. */ gl_once (once_control, once_execute); } return NULL; } static void test_once (void) { int i, repeat; gl_thread_t threads[THREAD_COUNT]; /* Initialize all variables. */ for (i = 0; i < THREAD_COUNT; i++) { ready[i] = 0; gl_lock_init (ready_lock[i]); } #if ENABLE_LOCKING for (i = 0; i < REPEAT_COUNT; i++) gl_rwlock_init (fire_signal[i]); #else fire_signal_state = 0; #endif #if ENABLE_LOCKING /* Block all fire_signals. */ for (i = REPEAT_COUNT-1; i >= 0; i--) gl_rwlock_wrlock (fire_signal[i]); #endif /* Spawn the threads. */ for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (once_contender_thread, (void *) (intptr_t) i); for (repeat = 0; repeat <= REPEAT_COUNT; repeat++) { /* Wait until every thread is ready. */ dbgprintf ("Main thread before synchronizing for round %d\n", repeat); for (;;) { int ready_count = 0; for (i = 0; i < THREAD_COUNT; i++) { gl_lock_lock (ready_lock[i]); ready_count += ready[i]; gl_lock_unlock (ready_lock[i]); } if (ready_count == THREAD_COUNT) break; yield (); } dbgprintf ("Main thread after synchronizing for round %d\n", repeat); if (repeat > 0) { /* Check that exactly one thread executed the once_execute() function. */ if (performed != 1) abort (); } if (repeat == REPEAT_COUNT) break; /* Preparation for the next round: Initialize once_control. */ memcpy (&once_control, &fresh_once, sizeof (gl_once_t)); /* Preparation for the next round: Reset the performed counter. */ performed = 0; /* Preparation for the next round: Reset the ready flags. */ for (i = 0; i < THREAD_COUNT; i++) { gl_lock_lock (ready_lock[i]); ready[i] = 0; gl_lock_unlock (ready_lock[i]); } /* Signal all threads simultaneously. */ dbgprintf ("Main thread giving signal for round %d\n", repeat); #if ENABLE_LOCKING gl_rwlock_unlock (fire_signal[repeat]); #else fire_signal_state = repeat + 1; #endif } /* Wait for the threads to terminate. */ for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); } /* -------------------------------------------------------------------------- */ int main () { #if HAVE_DECL_ALARM /* Declare failure if test takes too long, by using default abort caused by SIGALRM. */ int alarm_value = 600; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif #if DO_TEST_LOCK printf ("Starting test_lock ..."); fflush (stdout); test_lock (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_RWLOCK printf ("Starting test_rwlock ..."); fflush (stdout); test_rwlock (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_RECURSIVE_LOCK printf ("Starting test_recursive_lock ..."); fflush (stdout); test_recursive_lock (); printf (" OK\n"); fflush (stdout); #endif #if DO_TEST_ONCE printf ("Starting test_once ..."); fflush (stdout); test_once (); printf (" OK\n"); fflush (stdout); #endif return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif ����������������������������������������gnuastro-0.22/bootstrapped/tests/test-lstat.c�������������������������������������������������������0000644�0001750�0001750�00000003361�14557510510�015106� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lstat() function. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson, 2008; and Eric Blake, 2009. */ #include <config.h> #include <sys/stat.h> /* Caution: lstat may be a function-like macro. Although this signature check must pass, it may be the signature of the real (and broken) lstat rather than rpl_lstat. Most code should not use the address of lstat. */ #include "signature.h" SIGNATURE_CHECK (lstat, int, (char const *, struct stat *)); #include <fcntl.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "same-inode.h" #include "ignore-value.h" #include "macros.h" #define BASE "test-lstat.t" #include "test-lstat.h" /* Wrapper around lstat, which works even if lstat is a function-like macro, where test_lstat_func(lstat) would do the wrong thing. */ static int do_lstat (char const *name, struct stat *st) { return lstat (name, st); } int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_lstat_func (do_lstat, true); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-malloc-gnu.c��������������������������������������������������0000644�0001750�0001750�00000002400�14557510510�016006� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of malloc function. Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #include <stdint.h> #include "macros.h" int main (int argc, _GL_UNUSED char **argv) { /* Check that malloc (0) is not a NULL pointer. */ void *volatile p = malloc (0); ASSERT (p != NULL); free (p); /* Check that malloc (n) fails when n exceeds PTRDIFF_MAX. */ if (PTRDIFF_MAX < SIZE_MAX) { size_t one = argc != 12345; p = malloc (PTRDIFF_MAX + one); ASSERT (p == NULL); ASSERT (errno == ENOMEM); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-malloca.c�����������������������������������������������������0000644�0001750�0001750�00000003072�14557510510�015366� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of safe automatic memory allocation. Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #include <config.h> #include "malloca.h" #include <stdlib.h> static void do_allocation (int n) { void *volatile ptr = malloca (n); freea (ptr); safe_alloca (n); } void (*func) (int) = do_allocation; int main () { int i; /* This slows down malloc a lot. */ unsetenv ("MALLOC_PERTURB_"); /* Repeat a lot of times, to make sure there's no memory leak. */ for (i = 0; i < 50000; i++) { /* Try various values. n = 0 gave a crash on Alpha with gcc-2.5.8. Some versions of Mac OS X have a stack size limit of 512 KB. */ func (34); func (134); func (399); func (510823); func (129321); func (0); func (4070); func (4095); func (1); func (16582); } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-math.c��������������������������������������������������������0000644�0001750�0001750�00000004351�14557510510�014710� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <math.h> substitute. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <math.h> #ifndef NAN # error NAN should be defined choke me #endif #ifndef HUGE_VALF # error HUGE_VALF should be defined choke me #endif #ifndef HUGE_VAL # error HUGE_VAL should be defined choke me #endif #ifndef HUGE_VALL # error HUGE_VALL should be defined choke me #endif #ifndef FP_ILOGB0 # error FP_ILOGB0 should be defined choke me #endif #ifndef FP_ILOGBNAN # error FP_ILOGBNAN should be defined choke me #endif #if 0 /* Check that NAN expands into a constant expression. */ static float n = NAN; #endif #include <limits.h> #include "macros.h" /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equalf (float x, float y) { return x == y; } static int numeric_equald (double x, double y) { return x == y; } static int numeric_equall (long double x, long double y) { return x == y; } int main (void) { double d = NAN; double zero = 0.0; ASSERT (!numeric_equald (d, d)); d = HUGE_VAL; ASSERT (numeric_equald (d, 1.0 / zero)); ASSERT (numeric_equalf (HUGE_VALF, HUGE_VALF + HUGE_VALF)); ASSERT (numeric_equald (HUGE_VAL, HUGE_VAL + HUGE_VAL)); ASSERT (numeric_equall (HUGE_VALL, HUGE_VALL + HUGE_VALL)); /* Check the value of FP_ILOGB0. */ ASSERT (FP_ILOGB0 == INT_MIN || FP_ILOGB0 == - INT_MAX); /* Check the value of FP_ILOGBNAN. */ ASSERT (FP_ILOGBNAN == INT_MIN || FP_ILOGBNAN == INT_MAX); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32.c����������������������������������������������������0000644�0001750�0001750�00000034400�14557510510�015410� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of multibyte character to 32-bit wide character. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <uchar.h> #include "signature.h" SIGNATURE_CHECK (mbrtoc32, size_t, (char32_t *, const char *, size_t, mbstate_t *)); #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "macros.h" int main (int argc, char *argv[]) { mbstate_t state; char32_t wc; size_t ret; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test zero-length input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "x", 0, &state); ASSERT (ret == (size_t)(-2)); ASSERT (mbsinit (&state)); } /* Test NUL byte input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "", 1, &state); ASSERT (ret == 0); ASSERT (wc == 0); ASSERT (mbsinit (&state)); ret = mbrtoc32 (NULL, "", 1, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); } /* Test single-byte input. */ { int c; char buf[1]; memset (&state, '\0', sizeof (mbstate_t)); for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ ASSERT (c < 0x80); /* c is an ASCII character. */ buf[0] = c; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, buf, 1, &state); ASSERT (ret == 1); ASSERT (wc == c); ASSERT (mbsinit (&state)); ret = mbrtoc32 (NULL, buf, 1, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); break; default: break; } } /* Test special calling convention, passing a NULL pointer. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, NULL, 5, &state); ASSERT (ret == 0); ASSERT (wc == (char32_t) 0xBADFACE); ASSERT (mbsinit (&state)); } #ifdef __ANDROID__ /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the "C" locale. Furthermore, when you attempt to set the "C" or "POSIX" locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, that is, effectively the "C.UTF-8" locale. */ if (argc > 1 && strcmp (argv[1], "1") == 0 && MB_CUR_MAX > 1) argv[1] = "3"; #endif if (argc > 1) switch (argv[1][0]) { case '1': /* C or POSIX locale. */ { int c; char buf[1]; memset (&state, '\0', sizeof (mbstate_t)); for (c = 0; c < 0x100; c++) if (c != 0) { /* We are testing all nonnull bytes. */ buf[0] = c; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, buf, 1, &state); /* POSIX:2018 says regarding mbrtowc: "In the POSIX locale an [EILSEQ] error cannot occur since all byte values are valid characters." It is reasonable to expect mbrtoc32 to behave in the same way. */ ASSERT (ret == 1); if (c < 0x80) /* c is an ASCII character. */ ASSERT (wc == c); else /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF. */ ASSERT (wc == (btoc32 (c) == 0xDF00 + c ? btoc32 (c) : c)); ASSERT (mbsinit (&state)); ret = mbrtoc32 (NULL, buf, 1, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); } } return 0; case '2': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { char input[] = "B\374\337er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 1, 1, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == (unsigned char) '\374'); #if GL_CHAR32_T_IS_UNICODE ASSERT (wc == 0x00FC); /* expect Unicode encoding */ #endif ASSERT (mbsinit (&state)); input[1] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == (unsigned char) '\337'); #if GL_CHAR32_T_IS_UNICODE ASSERT (wc == 0x00DF); /* expect Unicode encoding */ #endif ASSERT (mbsinit (&state)); input[2] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 3, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[3] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 4, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); } return 0; case '3': /* Locale encoding is UTF-8. */ { char input[] = "s\303\274\303\237\360\237\230\213!"; /* "süß😋!" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 's'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (char32_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[1] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 2, 7, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x00FC); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[2] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 3, 6, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 3, 6, &state); ASSERT (ret == 2); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x00DF); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 5, 4, &state); ASSERT (ret == 4); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 5, 4, &state); ASSERT (ret == 4); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x1F60B); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; input[7] = '\0'; input[8] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 9, 1, &state); ASSERT (ret == 1); ASSERT (wc == '!'); ASSERT (mbsinit (&state)); } return 0; case '4': /* Locale encoding is EUC-JP. */ { char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (c32tob (wc) == EOF); #if GL_CHAR32_T_IS_UNICODE ASSERT (wc == 0x65E5); /* expect Unicode encoding */ #endif ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (char32_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == EOF); #if GL_CHAR32_T_IS_UNICODE ASSERT (wc == 0x672C); /* expect Unicode encoding */ #endif ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (c32tob (wc) == EOF); #if GL_CHAR32_T_IS_UNICODE ASSERT (wc == 0x8A9E); /* expect Unicode encoding */ #endif ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); ASSERT (mbsinit (&state)); } return 0; case '5': /* Locale encoding is GB18030. */ #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); return 77; #endif { char input[] = "s\250\271\201\060\211\070\224\071\375\067!"; /* "süß😋!" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 's'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (char32_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[1] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 2, 9, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == EOF); #if GL_CHAR32_T_IS_UNICODE ASSERT (wc == 0x00FC); /* expect Unicode encoding */ #endif ASSERT (mbsinit (&state)); input[2] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 3, 8, &state); ASSERT (ret == 4); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 3, 8, &state); ASSERT (ret == 4); ASSERT (c32tob (wc) == EOF); #if GL_CHAR32_T_IS_UNICODE ASSERT (wc == 0x00DF); /* expect Unicode encoding */ #endif ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; input[5] = '\0'; input[6] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 7, 4, &state); ASSERT (ret == 4); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 7, 4, &state); ASSERT (ret == 4); ASSERT (c32tob (wc) == EOF); #if GL_CHAR32_T_IS_UNICODE ASSERT (wc == 0x1F60B); /* expect Unicode encoding */ #endif ASSERT (mbsinit (&state)); input[7] = '\0'; input[8] = '\0'; input[9] = '\0'; input[10] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 11, 1, &state); ASSERT (ret == 1); ASSERT (wc == '!'); ASSERT (mbsinit (&state)); } return 0; } return 1; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32-w32.c������������������������������������������������0000644�0001750�0001750�00000056740�14557510510�016034� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of multibyte character to 32-bit wide character. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <uchar.h> #include <errno.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "localcharset.h" #include "macros.h" #if defined _WIN32 && !defined __CYGWIN__ static int test_one_locale (const char *name, int codepage) { mbstate_t state; char32_t wc; size_t ret; # if 1 /* Portable code to set the locale. */ { char name_with_codepage[1024]; sprintf (name_with_codepage, "%s.%d", name, codepage); /* Set the locale. */ if (setlocale (LC_ALL, name_with_codepage) == NULL) return 77; } # else /* Hacky way to set a locale.codepage combination that setlocale() refuses to set. */ { /* Codepage of the current locale, set with setlocale(). Not necessarily the same as GetACP(). */ extern __declspec(dllimport) unsigned int __lc_codepage; /* Set the locale. */ if (setlocale (LC_ALL, name) == NULL) return 77; /* Clobber the codepage and MB_CUR_MAX, both set by setlocale(). */ __lc_codepage = codepage; switch (codepage) { case 1252: case 1256: MB_CUR_MAX = 1; break; case 932: case 950: case 936: MB_CUR_MAX = 2; break; case 54936: case 65001: MB_CUR_MAX = 4; break; } /* Test whether the codepage is really available. */ memset (&state, '\0', sizeof (mbstate_t)); if (mbrtoc32 (&wc, " ", 1, &state) == (size_t)(-1)) return 77; } # endif /* Test zero-length input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "x", 0, &state); ASSERT (ret == (size_t)(-2)); ASSERT (mbsinit (&state)); } /* Test NUL byte input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "", 1, &state); ASSERT (ret == 0); ASSERT (wc == 0); ASSERT (mbsinit (&state)); ret = mbrtoc32 (NULL, "", 1, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); } /* Test single-byte input. */ { int c; char buf[1]; memset (&state, '\0', sizeof (mbstate_t)); for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = c; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, buf, 1, &state); ASSERT (ret == 1); ASSERT (wc == c); ASSERT (mbsinit (&state)); ret = mbrtoc32 (NULL, buf, 1, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); break; } } /* Test special calling convention, passing a NULL pointer. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, NULL, 5, &state); ASSERT (ret == 0); ASSERT (wc == (char32_t) 0xBADFACE); ASSERT (mbsinit (&state)); } switch (codepage) { case 1252: /* Locale encoding is CP1252, an extension of ISO-8859-1. */ { char input[] = "B\374\337er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 1, 1, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == (unsigned char) '\374'); ASSERT (wc == 0x00FC); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[1] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == (unsigned char) '\337'); ASSERT (wc == 0x00DF); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[2] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 3, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[3] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 4, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); } return 0; case 1256: /* Locale encoding is CP1256, not the same as ISO-8859-6. */ { char input[] = "x\302\341\346y"; /* "xآلوy" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'x'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 1, 1, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == (unsigned char) '\302'); ASSERT (wc == 0x0622); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[1] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == (unsigned char) '\341'); ASSERT (wc == 0x0644); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[2] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 3, 2, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == (unsigned char) '\346'); ASSERT (wc == 0x0648); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[3] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 4, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'y'); ASSERT (mbsinit (&state)); } return 0; case 65001: /* Locale encoding is CP65001 = UTF-8. */ if (strcmp (locale_charset (), "UTF-8") != 0) return 77; { char input[] = "s\303\274\303\237\360\237\230\213!"; /* "süß😋!" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 's'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (char32_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[1] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 2, 7, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x00FC); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[2] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 3, 6, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 3, 6, &state); ASSERT (ret == 2); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x00DF); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 5, 4, &state); ASSERT (ret == 4); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 5, 4, &state); ASSERT (ret == 4); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x1F60B); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; input[7] = '\0'; input[8] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 9, 1, &state); ASSERT (ret == 1); ASSERT (wc == '!'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\303\300", 2, &state); /* 0xC3 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\343\300", 2, &state); /* 0xE3 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\343\300\200", 3, &state); /* 0xE3 0xC0 0x80 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\343\200\300", 3, &state); /* 0xE3 0x80 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\363\300", 2, &state); /* 0xF3 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\363\300\200\200", 4, &state); /* 0xF3 0xC0 0x80 0x80 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\363\200\300", 3, &state); /* 0xF3 0x80 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\363\200\300\200", 4, &state); /* 0xF3 0x80 0xC0 0x80 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\363\200\200\300", 4, &state); /* 0xF3 0x80 0x80 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); } return 0; case 932: /* Locale encoding is CP932, similar to Shift_JIS. */ { char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x65E5); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (char32_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x672C); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x8A9E); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == 0x30FB)); } return 0; case 950: /* Locale encoding is CP950, similar to Big5. */ { char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x65E5); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (char32_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x672C); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x8A9E); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == '?')); } return 0; case 936: /* Locale encoding is CP936 = GBK, an extension of GB2312. */ { char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x65E5); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (char32_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x672C); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x8A9E); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == '?')); } return 0; case 54936: /* Locale encoding is CP54936 = GB18030. */ if (strcmp (locale_charset (), "GB18030") != 0) return 77; { char input[] = "s\250\271\201\060\211\070\224\071\375\067!"; /* "süß😋!" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 's'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (char32_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[1] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 2, 9, &state); ASSERT (ret == 1); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x00FC); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[2] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 3, 8, &state); ASSERT (ret == 4); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 3, 8, &state); ASSERT (ret == 4); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x00DF); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; input[5] = '\0'; input[6] = '\0'; /* Test support of NULL first argument. */ ret = mbrtoc32 (NULL, input + 7, 4, &state); ASSERT (ret == 4); ASSERT (mbsinit (&state)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 7, 4, &state); ASSERT (ret == 4); ASSERT (c32tob (wc) == EOF); ASSERT (wc == 0x1F60B); /* expect Unicode encoding */ ASSERT (mbsinit (&state)); input[7] = '\0'; input[8] = '\0'; input[9] = '\0'; input[10] = '\0'; wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, input + 11, 1, &state); ASSERT (ret == 1); ASSERT (wc == '!'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\201\045", 2, &state); /* 0x81 0x25 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\201\060\377", 3, &state); /* 0x81 0x30 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\201\060\377\064", 4, &state); /* 0x81 0x30 0xFF 0x34 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (char32_t) 0xBADFACE; ret = mbrtoc32 (&wc, "\201\060\211\072", 4, &state); /* 0x81 0x30 0x89 0x3A */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); } return 0; default: return 1; } } int main (int argc, char *argv[]) { int codepage = atoi (argv[argc - 1]); int result; int i; result = 77; for (i = 1; i < argc - 1; i++) { int ret = test_one_locale (argv[i], codepage); if (ret != 77) result = ret; } if (result == 77) { fprintf (stderr, "Skipping test: found no locale with codepage %d\n", codepage); } return result; } #else int main (int argc, char *argv[]) { fputs ("Skipping test: not a native Windows system\n", stderr); return 77; } #endif ��������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc.c�����������������������������������������������������0000644�0001750�0001750�00000030110�14557510510�015424� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of multibyte character to wide character. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <wchar.h> #include "signature.h" SIGNATURE_CHECK (mbrtowc, size_t, (wchar_t *, char const *, size_t, mbstate_t *)); #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { mbstate_t state; wchar_t wc; size_t ret; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test zero-length input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "x", 0, &state); ASSERT (ret == (size_t)(-2)); ASSERT (mbsinit (&state)); } /* Test NUL byte input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "", 1, &state); ASSERT (ret == 0); ASSERT (wc == 0); ASSERT (mbsinit (&state)); ret = mbrtowc (NULL, "", 1, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); } /* Test single-byte input. */ { int c; char buf[1]; memset (&state, '\0', sizeof (mbstate_t)); for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ ASSERT (c < 0x80); /* c is an ASCII character. */ buf[0] = c; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, buf, 1, &state); ASSERT (ret == 1); ASSERT (wc == c); ASSERT (mbsinit (&state)); ret = mbrtowc (NULL, buf, 1, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); break; default: break; } } /* Test special calling convention, passing a NULL pointer. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, NULL, 5, &state); ASSERT (ret == 0); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } #ifdef __ANDROID__ /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the "C" locale. Furthermore, when you attempt to set the "C" or "POSIX" locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, that is, effectively the "C.UTF-8" locale. */ if (argc > 1 && strcmp (argv[1], "1") == 0 && MB_CUR_MAX > 1) argv[1] = "3"; #endif if (argc > 1) switch (argv[1][0]) { case '1': /* C or POSIX locale. */ { int c; char buf[1]; memset (&state, '\0', sizeof (mbstate_t)); for (c = 0; c < 0x100; c++) if (c != 0) { /* We are testing all nonnull bytes. */ buf[0] = c; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, buf, 1, &state); /* POSIX:2018 says: "In the POSIX locale an [EILSEQ] error cannot occur since all byte values are valid characters." */ ASSERT (ret == 1); if (c < 0x80) /* c is an ASCII character. */ ASSERT (wc == c); else /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF. */ ASSERT (wc == (btowc (c) == 0xDF00 + c ? btowc (c) : c)); ASSERT (mbsinit (&state)); ret = mbrtowc (NULL, buf, 1, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); } } return 0; case '2': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { char input[] = "B\374\337er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\374'); ASSERT (mbsinit (&state)); input[1] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\337'); ASSERT (mbsinit (&state)); input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); } return 0; case '3': /* Locale encoding is UTF-8. */ { char input[] = "B\303\274\303\237er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[1] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 5, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[2] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 3, 4, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 4, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[5] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 6, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); } return 0; case '4': /* Locale encoding is EUC-JP. */ { char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); ASSERT (mbsinit (&state)); } return 0; case '5': /* Locale encoding is GB18030. */ { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[1] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 7, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[2] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 3, 6, &state); ASSERT (ret == 4); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 6, &state); ASSERT (ret == 4); ASSERT (wctob (wc) == EOF); ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[7] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 8, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); } return 0; } return 1; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc-w32.c�������������������������������������������������0000644�0001750�0001750�00000054446�14557510510�016057� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of multibyte character to wide character. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <wchar.h> #include <errno.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "localcharset.h" #include "macros.h" #if defined _WIN32 && !defined __CYGWIN__ static int test_one_locale (const char *name, int codepage) { mbstate_t state; wchar_t wc; size_t ret; # if 1 /* Portable code to set the locale. */ { char name_with_codepage[1024]; sprintf (name_with_codepage, "%s.%d", name, codepage); /* Set the locale. */ if (setlocale (LC_ALL, name_with_codepage) == NULL) return 77; } # else /* Hacky way to set a locale.codepage combination that setlocale() refuses to set. */ { /* Codepage of the current locale, set with setlocale(). Not necessarily the same as GetACP(). */ extern __declspec(dllimport) unsigned int __lc_codepage; /* Set the locale. */ if (setlocale (LC_ALL, name) == NULL) return 77; /* Clobber the codepage and MB_CUR_MAX, both set by setlocale(). */ __lc_codepage = codepage; switch (codepage) { case 1252: case 1256: MB_CUR_MAX = 1; break; case 932: case 950: case 936: MB_CUR_MAX = 2; break; case 54936: case 65001: MB_CUR_MAX = 4; break; } /* Test whether the codepage is really available. */ memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, " ", 1, &state) == (size_t)(-1)) return 77; } # endif /* Test zero-length input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "x", 0, &state); /* gnulib's implementation returns (size_t)(-2). The AIX 5.1 implementation returns (size_t)(-1). glibc's implementation returns 0. */ ASSERT (ret == (size_t)(-2) || ret == (size_t)(-1) || ret == 0); ASSERT (mbsinit (&state)); } /* Test NUL byte input. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "", 1, &state); ASSERT (ret == 0); ASSERT (wc == 0); ASSERT (mbsinit (&state)); ret = mbrtowc (NULL, "", 1, &state); ASSERT (ret == 0); ASSERT (mbsinit (&state)); } /* Test single-byte input. */ { int c; char buf[1]; memset (&state, '\0', sizeof (mbstate_t)); for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ buf[0] = c; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, buf, 1, &state); ASSERT (ret == 1); ASSERT (wc == c); ASSERT (mbsinit (&state)); ret = mbrtowc (NULL, buf, 1, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); break; } } /* Test special calling convention, passing a NULL pointer. */ { memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, NULL, 5, &state); ASSERT (ret == 0); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (mbsinit (&state)); } switch (codepage) { case 1252: /* Locale encoding is CP1252, an extension of ISO-8859-1. */ { char input[] = "B\374\337er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\374'); ASSERT (wc == 0x00FC); ASSERT (mbsinit (&state)); input[1] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\337'); ASSERT (wc == 0x00DF); ASSERT (mbsinit (&state)); input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); } return 0; case 1256: /* Locale encoding is CP1256, not the same as ISO-8859-6. */ { char input[] = "x\302\341\346y"; /* "xآلوy" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'x'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\302'); ASSERT (wc == 0x0622); ASSERT (mbsinit (&state)); input[1] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 3, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\341'); ASSERT (wc == 0x0644); ASSERT (mbsinit (&state)); input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 2, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == (unsigned char) '\346'); ASSERT (wc == 0x0648); ASSERT (mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'y'); ASSERT (mbsinit (&state)); } return 0; case 65001: /* Locale encoding is CP65001 = UTF-8. */ if (strcmp (locale_charset (), "UTF-8") != 0) return 77; { char input[] = "B\303\274\303\237er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[1] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 5, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x00FC); ASSERT (mbsinit (&state)); input[2] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 3, 4, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 4, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x00DF); ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[5] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 6, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\303\300", 2, &state); /* 0xC3 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\343\300", 2, &state); /* 0xE3 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\343\300\200", 3, &state); /* 0xE3 0xC0 0x80 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\343\200\300", 3, &state); /* 0xE3 0x80 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\363\300", 2, &state); /* 0xF3 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\363\300\200\200", 4, &state); /* 0xF3 0xC0 0x80 0x80 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\363\200\300", 3, &state); /* 0xF3 0x80 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\363\200\300\200", 4, &state); /* 0xF3 0x80 0xC0 0x80 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\363\200\200\300", 4, &state); /* 0xF3 0x80 0x80 0xC0 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); } return 0; case 932: /* Locale encoding is CP932, similar to Shift_JIS. */ { char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x65E5); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x672C); ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x8A9E); ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == 0x30FB)); } return 0; case 950: /* Locale encoding is CP950, similar to Big5. */ { char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x65E5); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x672C); ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x8A9E); ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == '?')); } return 0; case 936: /* Locale encoding is CP936 = GBK, an extension of GB2312. */ { char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == '<'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 2, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x65E5); ASSERT (mbsinit (&state)); input[1] = '\0'; input[2] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[3] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 4, 4, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x672C); ASSERT (mbsinit (&state)); input[4] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 5, 3, &state); ASSERT (ret == 2); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x8A9E); ASSERT (mbsinit (&state)); input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 1, &state); ASSERT (ret == 1); ASSERT (wc == '>'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == '?')); } return 0; case 54936: /* Locale encoding is CP54936 = GB18030. */ if (strcmp (locale_charset (), "GB18030") != 0) return 77; { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'B'); ASSERT (mbsinit (&state)); input[0] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 1, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (wc == (wchar_t) 0xBADFACE); ASSERT (!mbsinit (&state)); input[1] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 2, 7, &state); ASSERT (ret == 1); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x00FC); ASSERT (mbsinit (&state)); input[2] = '\0'; /* Test support of NULL first argument. */ ret = mbrtowc (NULL, input + 3, 6, &state); ASSERT (ret == 4); ASSERT (mbsinit (&state)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 3, 6, &state); ASSERT (ret == 4); ASSERT (wctob (wc) == EOF); ASSERT (wc == 0x00DF); ASSERT (mbsinit (&state)); input[3] = '\0'; input[4] = '\0'; input[5] = '\0'; input[6] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 7, 2, &state); ASSERT (ret == 1); ASSERT (wc == 'e'); ASSERT (mbsinit (&state)); input[7] = '\0'; wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input + 8, 1, &state); ASSERT (ret == 1); ASSERT (wc == 'r'); ASSERT (mbsinit (&state)); /* Test some invalid input. */ memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\201\045", 2, &state); /* 0x81 0x25 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\201\060\377", 3, &state); /* 0x81 0x30 0xFF */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\201\060\377\064", 4, &state); /* 0x81 0x30 0xFF 0x34 */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, "\201\060\211\072", 4, &state); /* 0x81 0x30 0x89 0x3A */ ASSERT (ret == (size_t)-1); ASSERT (errno == EILSEQ); } return 0; default: return 1; } } int main (int argc, char *argv[]) { int codepage = atoi (argv[argc - 1]); int result; int i; result = 77; for (i = 1; i < argc - 1; i++) { int ret = test_one_locale (argv[i], codepage); if (ret != 77) result = ret; } if (result == 77) { fprintf (stderr, "Skipping test: found no locale with codepage %d\n", codepage); } return result; } #else int main (int argc, char *argv[]) { fputs ("Skipping test: not a native Windows system\n", stderr); return 77; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbschr.c������������������������������������������������������0000644�0001750�0001750�00000004040�14557510510�015230� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching a string for a character. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Tests with a character < 0x30. */ { const char input[] = "\312\276\300\375 \312\276\300\375 \312\276\300\375"; /* "示例 示例 示例" */ const char *result = mbschr (input, ' '); ASSERT (result == input + 4); } { const char input[] = "\312\276\300\375"; /* "示例" */ const char *result = mbschr (input, ' '); ASSERT (result == NULL); } /* Tests with a character >= 0x30. */ { const char input[] = "\272\305123\324\313\320\320\241\243"; /* "å·123è¿è¡Œã€‚" */ const char *result = mbschr (input, '2'); ASSERT (result == input + 3); } /* This test shows how mbschr() is different from strchr(). */ { const char input[] = "\203\062\332\066123\324\313\320\320\241\243"; /* "씋123è¿è¡Œã€‚" */ const char *result = mbschr (input, '2'); ASSERT (result == input + 5); } { const char input[] = "\312\300\275\347\304\343\272\303\243\241"; /* "世界你好ï¼" */ const char *result = mbschr (input, '!'); ASSERT (result == NULL); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbsinit.c�����������������������������������������������������0000644�0001750�0001750�00000002677�14557510510�015435� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of test for initial conversion state. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <wchar.h> #include "signature.h" SIGNATURE_CHECK (mbsinit, int, (const mbstate_t *)); #include <locale.h> #include "macros.h" int main (int argc, char *argv[]) { static mbstate_t state; ASSERT (mbsinit (NULL)); ASSERT (mbsinit (&state)); if (argc > 1) { static const char input[1] = "\303"; wchar_t wc; size_t ret; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ret = mbrtowc (&wc, input, 1, &state); ASSERT (ret == (size_t)(-2)); ASSERT (!mbsinit (&state)); } return 0; } �����������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbspbrk.c�����������������������������������������������������0000644�0001750�0001750�00000003231�14557510510�015413� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching a string for a character among a given set of characters. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ASSERT (mbspbrk ("Some text", "") == NULL); { const char input[] = "A long sentence"; ASSERT (mbspbrk (input, "aeiou") == input + 3); ASSERT (mbspbrk (input, "iI") == NULL); } /* The following tests shows how mbspbrk() is different from strpbrk(). */ { const char input[] = "B\303\266se B\303\274bchen"; /* "Böse Bübchen" */ ASSERT (mbspbrk (input, "\303\244\303\274") == input + 7); /* "äü" */ } { const char input[] = "B\303\266se B\303\274bchen"; /* "Böse Bübchen" */ ASSERT (mbspbrk (input, "\303") == NULL); /* invalid multibyte sequence */ } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbsspn.c������������������������������������������������������0000644�0001750�0001750�00000003511�14557510510�015256� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of searching a string for a character outside a given set of characters. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <string.h> #include <locale.h> #include "macros.h" int main () { /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; ASSERT (mbsspn ("Some text", "") == 0); ASSERT (mbsspn ("A long sentence", " ") == 0); ASSERT (mbsspn (" xy", "aei ou") == 2); ASSERT (mbsspn ("eau", "aeiou") == 3); /* The following tests shows how mbsspn() is different from strspn(). */ { const char input[] = "\303\266\303\274"; /* "öü" */ ASSERT (mbsspn (input, "\303\266") == 2); /* "ö" */ ASSERT (mbsspn (input, "\303\244") == 0); /* "ä" */ ASSERT (mbsspn (input, "\303\274\303\266") == 4); /* "üö" */ ASSERT (mbsspn (input, "\303\244\303\274") == 0); /* "äü" */ ASSERT (mbsspn (input, "\303\244\303\266") == 2); /* "äö" */ } { const char input[] = "\303\266\303\274"; /* "öü" */ ASSERT (mbsspn (input, "\303") == 0); /* invalid multibyte sequence */ } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-memchr.c������������������������������������������������������0000644�0001750�0001750�00000007431�14557510510�015234� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2024 Free Software Foundation, Inc. * Written by Eric Blake and Bruno Haible * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (memchr, void *, (void const *, int, size_t)); #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" /* Calculating void * + int is not portable, so this wrapper converts to char * to make the tests easier to write. */ #define MEMCHR (char *) memchr int main (void) { size_t n = 0x100000; char *input = malloc (n); ASSERT (input); input[0] = 'a'; input[1] = 'b'; memset (input + 2, 'c', 1024); memset (input + 1026, 'd', n - 1028); input[n - 2] = 'e'; input[n - 1] = 'a'; /* Basic behavior tests. */ ASSERT (MEMCHR (input, 'a', n) == input); ASSERT (MEMCHR (input, 'a', 0) == NULL); { void *page_boundary = zerosize_ptr (); if (page_boundary) ASSERT (MEMCHR (page_boundary, 'a', 0) == NULL); } ASSERT (MEMCHR (input, 'b', n) == input + 1); ASSERT (MEMCHR (input, 'c', n) == input + 2); ASSERT (MEMCHR (input, 'd', n) == input + 1026); ASSERT (MEMCHR (input + 1, 'a', n - 1) == input + n - 1); ASSERT (MEMCHR (input + 1, 'e', n - 1) == input + n - 2); ASSERT (MEMCHR (input + 1, 0x789abc00 | 'e', n - 1) == input + n - 2); ASSERT (MEMCHR (input, 'f', n) == NULL); ASSERT (MEMCHR (input, '\0', n) == NULL); /* Check that a very long haystack is handled quickly if the byte is found near the beginning. */ { size_t repeat = 10000; for (; repeat > 0; repeat--) { ASSERT (MEMCHR (input, 'c', n) == input + 2); } } /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 256; j++) input[i + j] = j; for (j = 0; j < 256; j++) { ASSERT (MEMCHR (input + i, j, 256) == input + i + j); } } } /* Check that memchr() does not read past the first occurrence of the byte being searched. See the Austin Group's clarification <https://www.opengroup.org/austin/docs/austin_454.txt>. Test both '\0' and something else, since some implementations special-case searching for NUL. */ { char *page_boundary = (char *) zerosize_ptr (); /* Too small, and we miss cache line boundary tests; too large, and the test takes cubically longer to complete. */ int limit = 257; if (page_boundary != NULL) { for (n = 1; n <= limit; n++) { char *mem = page_boundary - n; memset (mem, 'X', n); ASSERT (MEMCHR (mem, 'U', n) == NULL); ASSERT (MEMCHR (mem, 0, n) == NULL); { size_t i; size_t k; for (i = 0; i < n; i++) { mem[i] = 'U'; for (k = i + 1; k < n + limit; k++) ASSERT (MEMCHR (mem, 'U', k) == mem + i); mem[i] = 0; for (k = i + 1; k < n + limit; k++) ASSERT (MEMCHR (mem, 0, k) == mem + i); mem[i] = 'X'; } } } } } free (input); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-memrchr.c�����������������������������������������������������0000644�0001750�0001750�00000005161�14557510510�015414� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2024 Free Software Foundation, Inc. * Written by Eric Blake and Bruno Haible * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (memrchr, void *, (void const *, int, size_t)); #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" /* Work around GCC bug 101494. */ #if 4 < __GNUC__ + (7 <= __GNUC_MINOR__) && __GNUC__ < 12 # pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #endif /* Calculating void * + int is not portable, so this wrapper converts to char * to make the tests easier to write. */ #define MEMRCHR (char *) memrchr int main (void) { size_t n = 0x100000; char *input = malloc (n); ASSERT (input); input[n - 1] = 'a'; input[n - 2] = 'b'; memset (input + n - 1026, 'c', 1024); memset (input + 2, 'd', n - 1028); input[1] = 'e'; input[0] = 'a'; /* Basic behavior tests. */ ASSERT (MEMRCHR (input, 'a', n) == input + n - 1); ASSERT (MEMRCHR (input, 'a', 0) == NULL); void *page_boundary = zerosize_ptr (); if (page_boundary) ASSERT (MEMRCHR (page_boundary, 'a', 0) == NULL); ASSERT (MEMRCHR (input, 'b', n) == input + n - 2); ASSERT (MEMRCHR (input, 'c', n) == input + n - 3); ASSERT (MEMRCHR (input, 'd', n) == input + n - 1027); ASSERT (MEMRCHR (input, 'a', n - 1) == input); ASSERT (MEMRCHR (input, 'e', n - 1) == input + 1); ASSERT (MEMRCHR (input, 'f', n) == NULL); ASSERT (MEMRCHR (input, '\0', n) == NULL); /* Check that a very long haystack is handled quickly if the byte is found near the end. */ { size_t repeat = 10000; for (; repeat > 0; repeat--) { ASSERT (MEMRCHR (input, 'c', n) == input + n - 3); } } /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 256; j++) input[i + j] = j; for (j = 0; j < 256; j++) { ASSERT (MEMRCHR (input + i, j, 256) == input + i + j); } } } free (input); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-nanosleep.c���������������������������������������������������0000644�0001750�0001750�00000004733�14557510510�015747� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of nanosleep() function. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <time.h> #include "signature.h" SIGNATURE_CHECK (nanosleep, int, (struct timespec const *, struct timespec *)); #include <errno.h> #include <signal.h> #include <unistd.h> #include "macros.h" #if HAVE_DECL_ALARM static void handle_alarm (int sig) { if (sig != SIGALRM) _exit (1); } #endif int main (void) { struct timespec ts; /* Check that negative nanosecond values cause failure. */ ts.tv_sec = 1; ts.tv_nsec = -1; errno = 0; ASSERT (nanosleep (&ts, NULL) == -1); ASSERT (errno == EINVAL); ts.tv_sec = 1000; ts.tv_nsec = -1; errno = 0; ASSERT (nanosleep (&ts, NULL) == -1); ASSERT (errno == EINVAL); /* Check that too large nanosecond values cause failure. */ ts.tv_sec = 1000; ts.tv_nsec = 1000000000; errno = 0; ASSERT (nanosleep (&ts, NULL) == -1); ASSERT (errno == EINVAL); /* Check successful call. */ ts.tv_sec = 0; ts.tv_nsec = 1; ASSERT (nanosleep (&ts, &ts) == 0); /* Remaining time is only defined on EINTR failure; but on success, it is typically either 0 or unchanged from input. At any rate, it shouldn't be randomly changed to unrelated values. */ ASSERT (ts.tv_sec == 0); ASSERT (ts.tv_nsec == 0 || ts.tv_nsec == 1); ts.tv_nsec = 0; ASSERT (nanosleep (&ts, NULL) == 0); #if HAVE_DECL_ALARM { const time_t pentecost = 50 * 24 * 60 * 60; /* 50 days. */ signal (SIGALRM, handle_alarm); alarm (1); ts.tv_sec = pentecost; ts.tv_nsec = 999999999; errno = 0; ASSERT (nanosleep (&ts, &ts) == -1); ASSERT (errno == EINTR); ASSERT (pentecost - 10 < ts.tv_sec && ts.tv_sec <= pentecost); ASSERT (0 <= ts.tv_nsec && ts.tv_nsec <= 999999999); } #endif return 0; } �������������������������������������gnuastro-0.22/bootstrapped/tests/test-netinet_in.c��������������������������������������������������0000644�0001750�0001750�00000001566�14557510510�016120� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <netinet/in.h> substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <netinet/in.h> int main (void) { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-nl_langinfo-mt.c����������������������������������������������0000644�0001750�0001750�00000013631�14557510510�016664� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multithread-safety test for nl_langinfo(). Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* Work around GCC bug 44511. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wreturn-type" #endif #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Specification. */ #include <langinfo.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "glthread/thread.h" /* Some common locale names. */ #if defined _WIN32 && !defined __CYGWIN__ # define ENGLISH "English_United States" # define FRENCH "French_France" # define GERMAN "German_Germany" # define ENCODING ".1252" #else # define ENGLISH "en_US" # define FRENCH "fr_FR" # define GERMAN "de_DE" # if defined __sgi # define ENCODING ".ISO8859-15" # elif defined __hpux # define ENCODING ".utf8" # else # define ENCODING ".UTF-8" # endif #endif static const char LOCALE1[] = ENGLISH ENCODING; static const char LOCALE2[] = FRENCH ENCODING; static const char LOCALE3[] = GERMAN ENCODING; static char *expected1; static void * thread1_func (void *arg) { for (;;) { const char *value = nl_langinfo (CODESET); if (strcmp (expected1, value) != 0) { fprintf (stderr, "thread1 disturbed by threadN!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static char *expected2; static void * thread2_func (void *arg) { for (;;) { const char *value = nl_langinfo (PM_STR); if (strcmp (expected2, value) != 0) { fprintf (stderr, "thread2 disturbed by threadN!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static char *expected3; static void * thread3_func (void *arg) { for (;;) { const char *value = nl_langinfo (DAY_2); if (strcmp (expected3, value) != 0) { fprintf (stderr, "thread3 disturbed by threadN!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static char *expected4; static void * thread4_func (void *arg) { for (;;) { const char *value = nl_langinfo (ALTMON_2); if (strcmp (expected4, value) != 0) { fprintf (stderr, "thread4 disturbed by threadN!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static char *expected5; static void * thread5_func (void *arg) { for (;;) { const char *value = nl_langinfo (CRNCYSTR); if (strcmp (expected5, value) != 0) { fprintf (stderr, "thread5 disturbed by threadN!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static char *expected6; static void * thread6_func (void *arg) { for (;;) { const char *value = nl_langinfo (RADIXCHAR); if (strcmp (expected6, value) != 0) { fprintf (stderr, "thread6 disturbed by threadN!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static void * threadN_func (void *arg) { for (;;) { nl_langinfo (CODESET); /* LC_CTYPE */ /* locale charmap */ nl_langinfo (AM_STR); /* LC_TIME */ /* locale -k am_pm */ nl_langinfo (PM_STR); /* LC_TIME */ /* locale -k am_pm */ nl_langinfo (DAY_2); /* LC_TIME */ /* locale -k day */ nl_langinfo (DAY_5); /* LC_TIME */ /* locale -k day */ nl_langinfo (ALTMON_2); /* LC_TIME */ /* locale -k alt_mon */ nl_langinfo (ALTMON_9); /* LC_TIME */ /* locale -k alt_mon */ nl_langinfo (CRNCYSTR); /* LC_MONETARY */ /* locale -k currency_symbol */ nl_langinfo (RADIXCHAR); /* LC_NUMERIC */ /* locale -k decimal_point */ nl_langinfo (THOUSEP); /* LC_NUMERIC */ /* locale -k thousands_sep */ } /*NOTREACHED*/ } int main (int argc, char *argv[]) { if (setlocale (LC_ALL, LOCALE1) == NULL) { fprintf (stderr, "Skipping test: LOCALE1 not recognized\n"); return 77; } if (setlocale (LC_MONETARY, LOCALE2) == NULL) { fprintf (stderr, "Skipping test: LOCALE2 not recognized\n"); return 77; } if (setlocale (LC_NUMERIC, LOCALE3) == NULL) { fprintf (stderr, "Skipping test: LOCALE3 not recognized\n"); return 77; } expected1 = strdup (nl_langinfo (CODESET)); expected2 = strdup (nl_langinfo (PM_STR)); expected3 = strdup (nl_langinfo (DAY_2)); expected4 = strdup (nl_langinfo (ALTMON_2)); expected5 = strdup (nl_langinfo (CRNCYSTR)); expected6 = strdup (nl_langinfo (RADIXCHAR)); /* Create the checker threads. */ gl_thread_create (thread1_func, NULL); gl_thread_create (thread2_func, NULL); gl_thread_create (thread3_func, NULL); gl_thread_create (thread4_func, NULL); gl_thread_create (thread5_func, NULL); gl_thread_create (thread6_func, NULL); /* Create the disturber thread. */ gl_thread_create (threadN_func, NULL); /* Let them run for 2 seconds. */ { struct timespec duration; duration.tv_sec = (argc > 1 ? atoi (argv[1]) : 2); duration.tv_nsec = 0; nanosleep (&duration, NULL); } return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif �������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-nl_langinfo1.c������������������������������������������������0000644�0001750�0001750�00000014112�14557510510�016322� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of nl_langinfo replacement. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ #include <config.h> #include <langinfo.h> #include "signature.h" SIGNATURE_CHECK (nl_langinfo, char *, (nl_item)); #include <locale.h> #include <stdlib.h> #include <string.h> #include "c-strcase.h" #include "macros.h" /* For GCC >= 4.3, silence the warnings "comparison of unsigned expression >= 0 is always true" in this file. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) # pragma GCC diagnostic ignored "-Wtype-limits" #endif int main (int argc, char *argv[]) { int pass = atoi (argv[1]); /* pass locale 0 C 1 traditional French locale 2 French UTF-8 locale */ setlocale (LC_ALL, ""); /* nl_langinfo items of the LC_CTYPE category */ ASSERT (strlen (nl_langinfo (CODESET)) > 0); if (pass == 2) { const char *codeset = nl_langinfo (CODESET); ASSERT (c_strcasecmp (codeset, "UTF-8") == 0 || c_strcasecmp (codeset, "UTF8") == 0); } /* nl_langinfo items of the LC_NUMERIC category */ ASSERT (strlen (nl_langinfo (RADIXCHAR)) > 0); ASSERT (strlen (nl_langinfo (THOUSEP)) >= 0); /* nl_langinfo items of the LC_TIME category */ ASSERT (strlen (nl_langinfo (D_T_FMT)) > 0); ASSERT (strlen (nl_langinfo (D_FMT)) > 0); ASSERT (strlen (nl_langinfo (T_FMT)) > 0); ASSERT (strlen (nl_langinfo (T_FMT_AMPM)) >= (pass == 0 ? 1 : 0)); ASSERT (strlen (nl_langinfo (AM_STR)) >= (pass == 0 ? 1 : 0)); ASSERT (strlen (nl_langinfo (PM_STR)) >= (pass == 0 ? 1 : 0)); ASSERT (strlen (nl_langinfo (DAY_1)) > 0); ASSERT (strlen (nl_langinfo (DAY_2)) > 0); ASSERT (strlen (nl_langinfo (DAY_3)) > 0); ASSERT (strlen (nl_langinfo (DAY_4)) > 0); ASSERT (strlen (nl_langinfo (DAY_5)) > 0); ASSERT (strlen (nl_langinfo (DAY_6)) > 0); ASSERT (strlen (nl_langinfo (DAY_7)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_1)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_2)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_3)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_4)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_5)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_6)) > 0); ASSERT (strlen (nl_langinfo (ABDAY_7)) > 0); ASSERT (strlen (nl_langinfo (MON_1)) > 0); ASSERT (strlen (nl_langinfo (MON_2)) > 0); ASSERT (strlen (nl_langinfo (MON_3)) > 0); ASSERT (strlen (nl_langinfo (MON_4)) > 0); ASSERT (strlen (nl_langinfo (MON_5)) > 0); ASSERT (strlen (nl_langinfo (MON_6)) > 0); ASSERT (strlen (nl_langinfo (MON_7)) > 0); ASSERT (strlen (nl_langinfo (MON_8)) > 0); ASSERT (strlen (nl_langinfo (MON_9)) > 0); ASSERT (strlen (nl_langinfo (MON_10)) > 0); ASSERT (strlen (nl_langinfo (MON_11)) > 0); ASSERT (strlen (nl_langinfo (MON_12)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_1)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_2)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_3)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_4)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_5)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_6)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_7)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_8)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_9)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_10)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_11)) > 0); ASSERT (strlen (nl_langinfo (ALTMON_12)) > 0); /* In the tested locales, alternate month names and month names ought to be the same. */ ASSERT (strcmp (nl_langinfo (ALTMON_1), nl_langinfo (MON_1)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_2), nl_langinfo (MON_2)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_3), nl_langinfo (MON_3)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_4), nl_langinfo (MON_4)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_5), nl_langinfo (MON_5)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_6), nl_langinfo (MON_6)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_7), nl_langinfo (MON_7)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_8), nl_langinfo (MON_8)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_9), nl_langinfo (MON_9)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_10), nl_langinfo (MON_10)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_11), nl_langinfo (MON_11)) == 0); ASSERT (strcmp (nl_langinfo (ALTMON_12), nl_langinfo (MON_12)) == 0); ASSERT (strlen (nl_langinfo (ABMON_1)) > 0); ASSERT (strlen (nl_langinfo (ABMON_2)) > 0); ASSERT (strlen (nl_langinfo (ABMON_3)) > 0); ASSERT (strlen (nl_langinfo (ABMON_4)) > 0); ASSERT (strlen (nl_langinfo (ABMON_5)) > 0); ASSERT (strlen (nl_langinfo (ABMON_6)) > 0); ASSERT (strlen (nl_langinfo (ABMON_7)) > 0); ASSERT (strlen (nl_langinfo (ABMON_8)) > 0); ASSERT (strlen (nl_langinfo (ABMON_9)) > 0); ASSERT (strlen (nl_langinfo (ABMON_10)) > 0); ASSERT (strlen (nl_langinfo (ABMON_11)) > 0); ASSERT (strlen (nl_langinfo (ABMON_12)) > 0); ASSERT (strlen (nl_langinfo (ERA)) >= 0); ASSERT (strlen (nl_langinfo (ERA_D_FMT)) >= 0); ASSERT (strlen (nl_langinfo (ERA_D_T_FMT)) >= 0); ASSERT (strlen (nl_langinfo (ERA_T_FMT)) >= 0); ASSERT (nl_langinfo (ALT_DIGITS) != NULL); /* nl_langinfo items of the LC_MONETARY category */ { const char *currency = nl_langinfo (CRNCYSTR); ASSERT (strlen (currency) >= 0); #if !(defined MUSL_LIBC || defined __NetBSD__) if (pass > 0) ASSERT (strlen (currency) >= 1); #endif } /* nl_langinfo items of the LC_MESSAGES category */ ASSERT (strlen (nl_langinfo (YESEXPR)) > 0); ASSERT (strlen (nl_langinfo (NOEXPR)) > 0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-nl_langinfo2.c������������������������������������������������0000644�0001750�0001750�00000012255�14557510510�016331� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of nl_langinfo replacement. Copyright (C) 2023-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2023. */ #include <config.h> #include <langinfo.h> #include <locale.h> #include <stdlib.h> #include <string.h> #include "c-strcase.h" #include "c-strcasestr.h" #include "macros.h" int main (int argc, char *argv[]) { #if HAVE_WORKING_USELOCALE /* Check that nl_langinfo() uses the per-thread locale. */ int pass; bool skipped_all = true; /* Extract a few items from the C locale. */ /* nl_langinfo items of the LC_CTYPE category */ const char *c_CODESET = nl_langinfo (CODESET); /* nl_langinfo items of the LC_NUMERIC category */ const char *c_RADIXCHAR = nl_langinfo (RADIXCHAR); /* nl_langinfo items of the LC_TIME category */ const char *c_T_FMT_AMPM = nl_langinfo (T_FMT_AMPM); const char *c_AM_STR = nl_langinfo (AM_STR); const char *c_PM_STR = nl_langinfo (PM_STR); /* nl_langinfo items of the LC_MONETARY category */ const char *c_CRNCYSTR = nl_langinfo (CRNCYSTR); /* nl_langinfo items of the LC_MESSAGES category */ const char *c_YESEXPR = nl_langinfo (YESEXPR); /* Sanity checks. */ (void) c_CODESET; ASSERT (strcmp (c_RADIXCHAR, ".") == 0); ASSERT (strlen (c_T_FMT_AMPM) > 0); ASSERT (strlen (c_AM_STR) > 0); ASSERT (strlen (c_PM_STR) > 0); ASSERT (strlen (c_CRNCYSTR) <= 1); /* "-", "+", ".", or "" */ ASSERT (c_strcasestr (c_YESEXPR, "y" /* from "yes" */) != NULL); for (pass = 1; pass <= 2; pass++) { /* pass locale 1 traditional French locale 2 French UTF-8 locale */ const char *fr_locale_name = getenv (pass == 1 ? "LOCALE_FR" : "LOCALE_FR_UTF8"); if (strcmp (fr_locale_name, "none") != 0) { /* Use a per-thread locale. */ locale_t fr_locale = newlocale (LC_ALL_MASK, fr_locale_name, NULL); if (fr_locale != NULL) { uselocale (fr_locale); /* Extract a few items from the current locale, and check the values. */ /* nl_langinfo items of the LC_CTYPE category */ const char *fr_CODESET = nl_langinfo (CODESET); if (pass == 1) ASSERT (strstr (fr_CODESET, "8859") != NULL); else if (pass == 2) ASSERT (c_strcasecmp (fr_CODESET, "UTF-8") == 0 || c_strcasecmp (fr_CODESET, "UTF8") == 0); /* In musl libc, locales differ at most in the LC_MESSAGES category. */ #if !defined MUSL_LIBC /* nl_langinfo items of the LC_NUMERIC category */ const char *fr_RADIXCHAR = nl_langinfo (RADIXCHAR); ASSERT (strcmp (fr_RADIXCHAR, ",") == 0); /* nl_langinfo items of the LC_TIME category */ /* macOS and Solaris 11 don't get the LC_TIME values right. Poor. */ #if !((defined __APPLE__ && defined __MACH__) || defined __sun) const char *fr_T_FMT_AMPM = nl_langinfo (T_FMT_AMPM); const char *fr_AM_STR = nl_langinfo (AM_STR); const char *fr_PM_STR = nl_langinfo (PM_STR); ASSERT (strlen (fr_T_FMT_AMPM) == 0 || strcmp (fr_T_FMT_AMPM, "%I:%M:%S") == 0); ASSERT (strlen (fr_AM_STR) == 0); ASSERT (strlen (fr_PM_STR) == 0); #endif /* nl_langinfo items of the LC_MONETARY category */ /* macOS doesn't get the EUR currency symbol or abbreviation right. Very poor. */ #if !(defined __APPLE__ && defined __MACH__) const char *fr_CRNCYSTR = nl_langinfo (CRNCYSTR); if (pass == 2) ASSERT (strlen (fr_CRNCYSTR) >= 1 && strcmp (fr_CRNCYSTR + 1, "€") == 0); #endif #endif /* nl_langinfo items of the LC_MESSAGES category */ /* In musl libc, this works only if the package 'musl-locales' is installed. */ #if !defined MUSL_LIBC const char *fr_YESEXPR = nl_langinfo (YESEXPR); ASSERT (c_strcasestr (fr_YESEXPR, "o" /* from "oui" */) != NULL); #endif skipped_all = false; } } } if (skipped_all) { fputs ("Skipping test: French locale is not installed\n", stderr); return 77; } return 0; #else fputs ("Skipping test: uselocale() not available\n", stderr); return 77; #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-once.c��������������������������������������������������������0000644�0001750�0001750�00000002044�14557510510�014700� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of once-only execution in multithreaded situations. Copyright (C) 2018-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2018. */ #include <config.h> #include "glthread/lock.h" #include "macros.h" gl_once_define(static, a_once) static int a; static void a_init (void) { a = 42; } int main () { gl_once (a_once, a_init); ASSERT (a == 42); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-open.c��������������������������������������������������������0000644�0001750�0001750�00000002123�14557510510�014713� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file descriptor. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <fcntl.h> #include "signature.h" SIGNATURE_CHECK (open, int, (char const *, int, ...)); #include <errno.h> #include <stdio.h> #include <unistd.h> #include "macros.h" #define BASE "test-open.t" #include "test-open.h" int main (void) { return test_open (open, true); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-openat.c������������������������������������������������������0000644�0001750�0001750�00000005056�14557510510�015250� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test that openat works. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <fcntl.h> #include "signature.h" SIGNATURE_CHECK (openat, int, (int, char const *, int, ...)); #include <errno.h> #include <stdarg.h> #include <stdio.h> #include <unistd.h> #include "macros.h" #define BASE "test-openat.t" #include "test-open.h" static int dfd = AT_FDCWD; /* Wrapper around openat to test open behavior. */ static int do_open (char const *name, int flags, ...) { if (flags & O_CREAT) { mode_t mode = 0; va_list arg; va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); return openat (dfd, name, flags, mode); } return openat (dfd, name, flags); } int main () { int result; /* Test behaviour for invalid file descriptors. */ { errno = 0; ASSERT (openat (-1, "foo", O_RDONLY) == -1); ASSERT (errno == EBADF); } { close (99); errno = 0; ASSERT (openat (99, "foo", O_RDONLY) == -1); ASSERT (errno == EBADF); } /* Basic checks. */ result = test_open (do_open, false); dfd = open (".", O_RDONLY); ASSERT (0 <= dfd); ASSERT (test_open (do_open, false) == result); ASSERT (close (dfd) == 0); /* Check that even when *-safer modules are in use, plain openat can land in fd 0. Do this test last, since it is destructive to stdin. */ ASSERT (close (STDIN_FILENO) == 0); ASSERT (openat (AT_FDCWD, ".", O_RDONLY) == STDIN_FILENO); { dfd = open (".", O_RDONLY); ASSERT (STDIN_FILENO < dfd); ASSERT (chdir ("..") == 0); ASSERT (close (STDIN_FILENO) == 0); ASSERT (openat (dfd, ".", O_RDONLY) == STDIN_FILENO); ASSERT (close (dfd) == 0); } return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-pathmax.c�����������������������������������������������������0000644�0001750�0001750�00000001704�14557510510�015420� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of "pathmax.h". Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2011. */ #include <config.h> #include "pathmax.h" /* Check that PATH_MAX is a constant if it is defined. */ #ifdef PATH_MAX int a = PATH_MAX; #endif int main (void) { return 0; } ������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-perror.c������������������������������������������������������0000644�0001750�0001750�00000002057�14557510510�015271� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of perror() function. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (perror, void, (char const *)); #include <errno.h> int main (int argc, char **argv) { const char *prefix = (argc > 1 ? argv[1] : NULL); errno = EACCES; perror (prefix); errno = ETIMEDOUT; perror (prefix); errno = EOVERFLOW; perror (prefix); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-perror2.c�����������������������������������������������������0000644�0001750�0001750�00000006727�14557510510�015363� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of perror() function. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <unistd.h> /* Tell GCC not to warn about myerr being leaked. */ #if __GNUC__ >= 13 # pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" #endif /* This test intentionally parses stderr. So, we arrange to have fd 10 (outside the range of interesting fd's during the test) set up to duplicate the original stderr. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; #define BASE "test-perror2" int main (void) { /* We change fd 2 later, so save it in fd 10. */ if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) return 2; ASSERT (freopen (BASE ".tmp", "w+", stderr) == stderr); /* Test that perror does not clobber strerror buffer. */ { const char *msg1; const char *msg2; const char *msg3; const char *msg4; char *str1; char *str2; char *str3; char *str4; msg1 = strerror (ENOENT); ASSERT (msg1); str1 = strdup (msg1); ASSERT (str1); msg2 = strerror (ERANGE); ASSERT (msg2); str2 = strdup (msg2); ASSERT (str2); msg3 = strerror (-4); ASSERT (msg3); str3 = strdup (msg3); ASSERT (str3); msg4 = strerror (1729576); ASSERT (msg4); str4 = strdup (msg4); ASSERT (str4); errno = EACCES; perror (""); errno = -5; perror (""); ASSERT (!ferror (stderr)); ASSERT (STREQ (msg4, str4)); free (str1); free (str2); free (str3); free (str4); } /* Test that perror uses the same message as strerror. */ { int errs[] = { EACCES, 0, -3, }; int i; for (i = 0; i < SIZEOF (errs); i++) { char buf[256]; const char *err = strerror (errs[i]); ASSERT (err); ASSERT (strlen (err) < sizeof buf); rewind (stderr); ASSERT (ftruncate (fileno (stderr), 0) == 0); errno = errs[i]; perror (NULL); ASSERT (!ferror (stderr)); rewind (stderr); ASSERT (fgets (buf, sizeof buf, stderr) == buf); ASSERT (strstr (buf, err)); } } /* Test that perror reports write failure. */ { ASSERT (freopen (BASE ".tmp", "r", stderr) == stderr); ASSERT (setvbuf (stderr, NULL, _IONBF, BUFSIZ) == 0); errno = -1; ASSERT (!ferror (stderr)); perror (NULL); #if 0 /* Commented out until cygwin behaves: https://sourceware.org/ml/newlib/2011/msg00228.html */ ASSERT (errno > 0); /* Commented out until glibc behaves: https://sourceware.org/bugzilla/show_bug.cgi?id=12792 */ ASSERT (ferror (stderr)); #endif } ASSERT (fclose (stderr) == 0); ASSERT (remove (BASE ".tmp") == 0); return 0; } �����������������������������������������gnuastro-0.22/bootstrapped/tests/test-pipe.c��������������������������������������������������������0000644�0001750�0001750�00000005216�14557510510�014715� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pipe. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (pipe, int, (int[2])); #include <fcntl.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif #include "binary-io.h" #include "macros.h" /* Return true if FD is open. */ static bool is_open (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, the initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE, and there is no fcntl. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; #else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); #endif } /* Return true if FD is not inherited to child processes. */ static bool is_cloexec (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD flags; ASSERT (GetHandleInformation (h, &flags)); return (flags & HANDLE_FLAG_INHERIT) == 0; #else int flags; ASSERT ((flags = fcntl (fd, F_GETFD)) >= 0); return (flags & FD_CLOEXEC) != 0; #endif } /* Return true if FD is in non-blocking mode. */ static bool is_nonblocking (int fd) { #if defined _WIN32 && ! defined __CYGWIN__ /* We don't use the non-blocking mode for sockets here. */ return 0; #else int flags; ASSERT ((flags = fcntl (fd, F_GETFL)) >= 0); return (flags & O_NONBLOCK) != 0; #endif } int main () { int fd[2]; fd[0] = -1; fd[1] = -1; ASSERT (pipe (fd) >= 0); ASSERT (fd[0] >= 0); ASSERT (fd[1] >= 0); ASSERT (fd[0] != fd[1]); ASSERT (is_open (fd[0])); ASSERT (is_open (fd[1])); ASSERT (!is_cloexec (fd[0])); ASSERT (!is_cloexec (fd[1])); ASSERT (!is_nonblocking (fd[0])); ASSERT (!is_nonblocking (fd[1])); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-pselect.c�����������������������������������������������������0000644�0001750�0001750�00000002701�14557510510�015413� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pselect() substitute. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <sys/select.h> #include "signature.h" SIGNATURE_CHECK (pselect, int, (int, fd_set *restrict, fd_set *restrict, fd_set *restrict, struct timespec const *restrict, const sigset_t *restrict)); #define TEST_PORT 12347 #include "test-select.h" static int my_select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { struct timespec ts; struct timespec *pts = NULL; if (timeout) { ts.tv_sec = timeout->tv_sec; ts.tv_nsec = timeout->tv_usec * 1000; pts = &ts; } return pselect (nfds, readfds, writefds, exceptfds, pts, NULL); } int main (void) { return test_function (my_select); } ���������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-pthread.c�����������������������������������������������������0000644�0001750�0001750�00000004521�14557510510�015405� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <pthread.h> substitute. Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> #include <pthread.h> /* Check that the types are all defined. */ pthread_t t1; pthread_attr_t t2; pthread_once_t t3 = PTHREAD_ONCE_INIT; pthread_mutex_t t4 = PTHREAD_MUTEX_INITIALIZER; pthread_mutexattr_t t5; pthread_rwlock_t t6 = PTHREAD_RWLOCK_INITIALIZER; pthread_rwlockattr_t t7; pthread_cond_t t8 = PTHREAD_COND_INITIALIZER; pthread_condattr_t t9; pthread_key_t t10; pthread_spinlock_t t11; #ifdef TODO /* Not implemented in gnulib yet */ pthread_barrier_t t12; pthread_barrierattr_t t13; #endif /* Check that the various macros are defined. */ /* Constants for pthread_attr_setdetachstate(). */ int ds[] = { PTHREAD_CREATE_JOINABLE, PTHREAD_CREATE_DETACHED }; /* Constants for pthread_exit(). */ void *canceled = PTHREAD_CANCELED; /* Constants for pthread_mutexattr_settype(). */ int mt[] = { PTHREAD_MUTEX_DEFAULT, PTHREAD_MUTEX_NORMAL, PTHREAD_MUTEX_RECURSIVE, PTHREAD_MUTEX_ERRORCHECK }; #ifdef TODO /* Not implemented in gnulib yet */ /* Constants for pthread_mutexattr_setrobust(). */ int mr[] = { PTHREAD_MUTEX_ROBUST, PTHREAD_MUTEX_STALLED }; /* Constants for pthread_barrierattr_setpshared(). */ int bp[] = { PTHREAD_PROCESS_SHARED, PTHREAD_PROCESS_PRIVATE }; /* Constants for pthread_barrier_wait(). */ int bw[] = { PTHREAD_BARRIER_SERIAL_THREAD }; /* Constants for pthread_setcancelstate(). */ int cs[] = { PTHREAD_CANCEL_ENABLE, PTHREAD_CANCEL_DISABLE }; /* Constants for pthread_setcanceltype(). */ int ct[] = { PTHREAD_CANCEL_DEFERRED, PTHREAD_CANCEL_ASYNCHRONOUS }; #endif int main (void) { return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-pthread-thread.c����������������������������������������������0000644�0001750�0001750�00000003656�14557510510�016662� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pthread_create () function. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2011. */ #include <config.h> #include <pthread.h> #include <stdio.h> #include <string.h> #include "macros.h" static pthread_t main_thread_before; static pthread_t main_thread_after; static pthread_t worker_thread; #define MAGIC ((void *) 1266074729) static volatile int work_done; static void * worker_thread_func (_GL_UNUSED void *arg) { work_done = 1; return MAGIC; } int main () { main_thread_before = pthread_self (); if (pthread_create (&worker_thread, NULL, worker_thread_func, NULL) == 0) { void *ret; /* Check that pthread_self () has the same value before than after the first call to pthread_create (). */ main_thread_after = pthread_self (); ASSERT (memcmp (&main_thread_before, &main_thread_after, sizeof (pthread_t)) == 0); ASSERT (pthread_join (worker_thread, &ret) == 0); /* Check the return value of the thread. */ ASSERT (ret == MAGIC); /* Check that worker_thread_func () has finished executing. */ ASSERT (work_done); return 0; } else { fputs ("pthread_create failed\n", stderr); return 1; } } ����������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-pthread_sigmask1.c��������������������������������������������0000644�0001750�0001750�00000004717�14557510510�017213� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pthread_sigmask in a single-threaded program. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2011. */ #include <config.h> #include <signal.h> #include "signature.h" SIGNATURE_CHECK (pthread_sigmask, int, (int, const sigset_t *, sigset_t *)); #include <errno.h> #include <inttypes.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "macros.h" #if !(defined _WIN32 && !defined __CYGWIN__) static volatile int sigint_occurred; static void sigint_handler (_GL_UNUSED int sig) { sigint_occurred++; } int main () { sigset_t set; intmax_t pid = getpid (); char command[80]; signal (SIGINT, sigint_handler); sigemptyset (&set); sigaddset (&set, SIGINT); /* Check error handling. */ ASSERT (pthread_sigmask (1729, &set, NULL) == EINVAL); /* Block SIGINT. */ ASSERT (pthread_sigmask (SIG_BLOCK, &set, NULL) == 0); /* Request a SIGINT signal from outside. */ sprintf (command, "sh -c 'sleep 1; kill -INT %"PRIdMAX"' &", pid); ASSERT (system (command) == 0); /* Wait. */ sleep (2); /* The signal should not have arrived yet, because it is blocked. */ ASSERT (sigint_occurred == 0); /* Unblock SIGINT. */ ASSERT (pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0); /* The signal should have arrived now, because POSIX says "If there are any pending unblocked signals after the call to pthread_sigmask(), at least one of those signals shall be delivered before the call to pthread_sigmask() returns." */ ASSERT (sigint_occurred == 1); return 0; } #else /* On native Windows, getpid() values and the arguments that are passed to the (Cygwin?) 'kill' program are not necessarily related. */ int main () { fputs ("Skipping test: native Windows platform\n", stderr); return 77; } #endif �������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-pthread_sigmask2.c��������������������������������������������0000644�0001750�0001750�00000005146�14557510510�017211� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of pthread_sigmask in a multi-threaded program. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2011. */ #include <config.h> #include <signal.h> #include <errno.h> #include <pthread.h> #include <stdio.h> #include <unistd.h> #include "macros.h" #if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS static pthread_t main_thread; static pthread_t killer_thread; static void * killer_thread_func (_GL_UNUSED void *arg) { sleep (1); pthread_kill (main_thread, SIGINT); return NULL; } static volatile int sigint_occurred; static void sigint_handler (_GL_UNUSED int sig) { sigint_occurred++; } int main () { sigset_t set; signal (SIGINT, sigint_handler); sigemptyset (&set); sigaddset (&set, SIGINT); /* Check error handling. */ /* This call returns 0 on NetBSD 8.0. */ #if !defined __NetBSD__ ASSERT (pthread_sigmask (1729, &set, NULL) == EINVAL); #endif /* Block SIGINT. */ ASSERT (pthread_sigmask (SIG_BLOCK, &set, NULL) == 0); /* Request a SIGINT signal from another thread. */ main_thread = pthread_self (); ASSERT (pthread_create (&killer_thread, NULL, killer_thread_func, NULL) == 0); /* Wait. */ sleep (2); /* The signal should not have arrived yet, because it is blocked. */ ASSERT (sigint_occurred == 0); /* Unblock SIGINT. */ ASSERT (pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0); /* The signal should have arrived now, because POSIX says "If there are any pending unblocked signals after the call to pthread_sigmask(), at least one of those signals shall be delivered before the call to pthread_sigmask() returns." */ ASSERT (sigint_occurred == 1); /* Clean up the thread. This avoid a "ThreadSanitizer: thread leak" warning from "gcc -fsanitize=thread". */ ASSERT (pthread_join (killer_thread, NULL) == 0); return 0; } #else int main () { fputs ("Skipping test: POSIX threads not enabled\n", stderr); return 77; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-raise.c�������������������������������������������������������0000644�0001750�0001750�00000002703�14557510510�015061� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test raising a signal. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <signal.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (raise, int, (int)); #include <stdlib.h> #include "macros.h" /* It is safe to use _Noreturn here: _exit() never returns, and GCC knows that _exit() is a non-returning function, even on platforms where its declaration in <unistd.h> does not have the 'noreturn' attribute. */ static _Noreturn void handler (_GL_UNUSED int sig) { _exit (0); } int main (void) { /* Test behaviour for invalid argument. */ ASSERT (raise (-1) != 0); /* Test behaviour for SIGINT. */ ASSERT (signal (SIGINT, handler) != SIG_ERR); raise (SIGINT); /* We should not get here, because the handler takes away the control. */ exit (1); } �������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-random.c������������������������������������������������������0000644�0001750�0001750�00000002540�14557510510�015235� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test random. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include "signature.h" SIGNATURE_CHECK (srandom, void, (unsigned int)); SIGNATURE_CHECK (initstate, char *, (unsigned int, char *, size_t)); SIGNATURE_CHECK (setstate, char *, (char *)); SIGNATURE_CHECK (random, long, (void)); #include <time.h> #include "macros.h" int main () { char buf[128]; unsigned int i; unsigned int n_big = 0; initstate (time (NULL), buf, sizeof buf); for (i = 0; i < 1000; i++) { long r = random (); ASSERT (0 <= r); if (RAND_MAX / 2 < r) ++n_big; } /* Fail if none of the numbers were larger than RAND_MAX / 2. */ return !n_big; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-random-mt.c���������������������������������������������������0000644�0001750�0001750�00000010732�14557510510�015655� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multithread-safety test for random(). Copyright (C) 2023-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2023. */ #include <config.h> #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Whether to help the scheduler through explicit yield(). Uncomment this to see if the operating system has a fair scheduler. */ #define EXPLICIT_YIELD 1 /* Number of simultaneous threads. */ #define THREAD_COUNT 4 /* Number of random() invocations operations performed in each thread. This value is chosen so that the unit test terminates quickly. To reliably determine whether a random() implementation is multithread-safe, set REPEAT_COUNT to 1000000 and run the test 100 times: $ for i in `seq 100`; do ./test-random-mt; done */ #define REPEAT_COUNT 100000 /* Specification. */ #include <stdlib.h> #include <stdio.h> #if EXPLICIT_YIELD # include <sched.h> #endif #include "glthread/thread.h" #include "xalloc.h" #if EXPLICIT_YIELD # define yield() sched_yield () #else # define yield() #endif /* This test runs REPEAT_COUNT invocations of random() in each thread and stores the result, then compares the first REPEAT_COUNT among these THREAD_COUNT * REPEAT_COUNT random numbers against a precomputed sequence with the same seed. */ static void * random_invocator_thread (void *arg) { long *storage = (long *) arg; int repeat; for (repeat = 0; repeat < REPEAT_COUNT; repeat++) { storage[repeat] = random (); yield (); } return NULL; } int main () { unsigned int seed = 19891109; /* First, get the expected sequence of random() results. */ srandom (seed); long *expected = XNMALLOC (REPEAT_COUNT, long); { int repeat; for (repeat = 0; repeat < REPEAT_COUNT; repeat++) expected[repeat] = random (); } /* Then, run REPEAT_COUNT invocations of random() each, in THREAD_COUNT separate threads. */ gl_thread_t threads[THREAD_COUNT]; long *thread_results[THREAD_COUNT]; srandom (seed); { int i; for (i = 0; i < THREAD_COUNT; i++) thread_results[i] = XNMALLOC (REPEAT_COUNT, long); for (i = 0; i < THREAD_COUNT; i++) threads[i] = gl_thread_create (random_invocator_thread, thread_results[i]); } /* Wait for the threads to terminate. */ { int i; for (i = 0; i < THREAD_COUNT; i++) gl_thread_join (threads[i], NULL); } /* Finally, determine whether the threads produced the same sequence of random() results. */ { int expected_index; int result_index[THREAD_COUNT]; int i; for (i = 0; i < THREAD_COUNT; i++) result_index[i] = 0; for (expected_index = 0; expected_index < REPEAT_COUNT; expected_index++) { long expected_value = expected[expected_index]; for (i = 0; i < THREAD_COUNT; i++) { if (thread_results[i][result_index[i]] == expected_value) { result_index[i]++; break; } } if (i == THREAD_COUNT) { if (expected_index == 0) { /* This occurs on platforms like OpenBSD, where srandom() has no effect and random() always return non-deterministic values. Mark the test as SKIP. */ fprintf (stderr, "Skipping test: random() is non-deterministic.\n"); return 77; } else { fprintf (stderr, "Expected value #%d not found in multithreaded results.\n", expected_index); return 1; } } } } return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif ��������������������������������������gnuastro-0.22/bootstrapped/tests/test-random_r.c����������������������������������������������������0000644�0001750�0001750�00000003740�14557510510�015561� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test random_r. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include "signature.h" SIGNATURE_CHECK (srandom_r, int, (unsigned int, struct random_data *)); SIGNATURE_CHECK (initstate_r, int, (unsigned int, char *, size_t, struct random_data *)); SIGNATURE_CHECK (setstate_r, int, (char *, struct random_data *)); SIGNATURE_CHECK (random_r, int, (struct random_data *, int32_t *)); #include <time.h> #include "macros.h" /* Note: This test crashes on glibc/SPARC systems. Reported at <https://sourceware.org/bugzilla/show_bug.cgi?id=30584>. */ static int test_failed (int alignment) { struct random_data rand_state; char buf[128 + sizeof (int32_t)]; unsigned int i; unsigned int n_big = 0; rand_state.state = NULL; if (initstate_r (time (NULL), buf + alignment, sizeof buf - alignment, &rand_state)) return 1; for (i = 0; i < 1000; i++) { int32_t r; ASSERT (random_r (&rand_state, &r) == 0); ASSERT (0 <= r); if (RAND_MAX / 2 < r) ++n_big; } /* Fail if none of the numbers were larger than RAND_MAX / 2. */ return !n_big; } int main () { int alignment; for (alignment = 0; alignment < sizeof (int32_t); alignment++) if (test_failed (alignment)) return 1; return 0; } ��������������������������������gnuastro-0.22/bootstrapped/tests/test-rawmemchr.c���������������������������������������������������0000644�0001750�0001750�00000005660�14557510510�015750� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2024 Free Software Foundation, Inc. * Written by Eric Blake and Bruno Haible * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (rawmemchr, void *, (void const *, int)); #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" /* Calculating void * + int is not portable, so this wrapper converts to char * to make the tests easier to write. */ #define RAWMEMCHR (char *) rawmemchr int main (void) { size_t n = 0x100000; char *input = malloc (n + 1); ASSERT (input); input[0] = 'a'; input[1] = 'b'; memset (input + 2, 'c', 1024); memset (input + 1026, 'd', n - 1028); input[n - 2] = 'e'; input[n - 1] = 'a'; input[n] = '\0'; /* Basic behavior tests. */ ASSERT (RAWMEMCHR (input, 'a') == input); ASSERT (RAWMEMCHR (input, 'b') == input + 1); ASSERT (RAWMEMCHR (input, 'c') == input + 2); ASSERT (RAWMEMCHR (input, 'd') == input + 1026); ASSERT (RAWMEMCHR (input + 1, 'a') == input + n - 1); ASSERT (RAWMEMCHR (input + 1, 'e') == input + n - 2); ASSERT (RAWMEMCHR (input + 1, 0x789abc00 | 'e') == input + n - 2); ASSERT (RAWMEMCHR (input, '\0') == input + n); /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 256; j++) input[i + j] = j; for (j = 0; j < 256; j++) { ASSERT (RAWMEMCHR (input + i, j) == input + i + j); } } } /* Ensure that no unaligned oversized reads occur. */ { char *page_boundary = (char *) zerosize_ptr (); size_t i; if (!page_boundary) page_boundary = input + 4096; memset (page_boundary - 512, '1', 511); page_boundary[-1] = '2'; for (i = 1; i <= 512; i++) ASSERT (RAWMEMCHR (page_boundary - i, (i * 0x01010100) | '2') == page_boundary - 1); } free (input); /* Test aligned oversized reads, which are allowed on most architectures but not on CHERI. */ { input = malloc (5); memcpy (input, "abcde", 5); ASSERT (RAWMEMCHR (input, 'e') == input + 4); ASSERT (RAWMEMCHR (input + 1, 'e') == input + 4); ASSERT (RAWMEMCHR (input + 2, 'e') == input + 4); ASSERT (RAWMEMCHR (input + 3, 'e') == input + 4); ASSERT (RAWMEMCHR (input + 4, 'e') == input + 4); free (input); } return 0; } ��������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-realloc-gnu.c�������������������������������������������������0000644�0001750�0001750�00000002712�14557510510�016166� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of realloc function. Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #include <stdint.h> #include "macros.h" int main (int argc, _GL_UNUSED char **argv) { /* Check that realloc (NULL, 0) is not a NULL pointer. */ void *volatile p = realloc (NULL, 0); ASSERT (p != NULL); /* Check that realloc (p, n) fails when p is non-null and n exceeds PTRDIFF_MAX. */ if (PTRDIFF_MAX < SIZE_MAX) { size_t one = argc != 12345; p = realloc (p, PTRDIFF_MAX + one); ASSERT (p == NULL); /* Avoid a test failure due to glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=27870>. */ if (!getenv ("MALLOC_CHECK_")) ASSERT (errno == ENOMEM); } free (p); return 0; } ������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-reallocarray.c������������������������������������������������0000644�0001750�0001750�00000003226�14557510510�016437� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of reallocarray function. Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #include <stdint.h> #include "signature.h" SIGNATURE_CHECK (reallocarray, void *, (void *, size_t, size_t)); #include "macros.h" int main () { /* Check that reallocarray fails when requested to allocate a block of memory larger than PTRDIFF_MAX or SIZE_MAX bytes. */ for (size_t n = 2; n != 0; n <<= 1) { void *volatile p = NULL; if (PTRDIFF_MAX / n + 1 <= SIZE_MAX) { p = reallocarray (p, PTRDIFF_MAX / n + 1, n); ASSERT (p == NULL); ASSERT (errno == ENOMEM); } p = reallocarray (p, SIZE_MAX / n + 1, n); ASSERT (p == NULL); ASSERT (errno == ENOMEM || errno == EOVERFLOW /* NetBSD */); /* Reallocarray should not crash with zero sizes. */ p = reallocarray (p, 0, n); p = reallocarray (p, n, 0); free (p); } return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-regex.c�������������������������������������������������������0000644�0001750�0001750�00000043124�14557510510�015072� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test regular expressions Copyright 1996-2001, 2003-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "regex.h" #include <locale.h> #include <limits.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <wctype.h> #if HAVE_DECL_ALARM # include <unistd.h> # include <signal.h> #endif #include "localcharset.h" static int exit_status; static void report_error (char const *format, ...) { va_list args; va_start (args, format); fprintf (stderr, "test-regex: "); vfprintf (stderr, format, args); fprintf (stderr, "\n"); va_end (args); exit_status = 1; } /* Check whether it's really a UTF-8 locale. On mingw, setlocale (LC_ALL, "en_US.UTF-8") succeeds but returns "English_United States.1252", with locale_charset () returning "CP1252". */ static int really_utf8 (void) { return strcmp (locale_charset (), "UTF-8") == 0; } /* Tests supposed to match; copied from glibc posix/bug-regex11.c. */ static struct { const char *pattern; const char *string; int flags, nmatch; regmatch_t rm[5]; } const tests[] = { /* Test for newline handling in regex. */ { "[^~]*~", "\nx~y", 0, 2, { { 0, 3 }, { -1, -1 } } }, /* Other tests. */ { "a(.*)b", "a b", REG_EXTENDED, 2, { { 0, 3 }, { 1, 2 } } }, { ".*|\\([KIO]\\)\\([^|]*\\).*|?[KIO]", "10~.~|P|K0|I10|O16|?KSb", 0, 3, { { 0, 21 }, { 15, 16 }, { 16, 18 } } }, { ".*|\\([KIO]\\)\\([^|]*\\).*|?\\1", "10~.~|P|K0|I10|O16|?KSb", 0, 3, { { 0, 21 }, { 8, 9 }, { 9, 10 } } }, { "^\\(a*\\)\\1\\{9\\}\\(a\\{0,9\\}\\)\\([0-9]*;.*[^a]\\2\\([0-9]\\)\\)", "a1;;0a1aa2aaa3aaaa4aaaaa5aaaaaa6aaaaaaa7aaaaaaaa8aaaaaaaaa9aa2aa1a0", 0, 5, { { 0, 67 }, { 0, 0 }, { 0, 1 }, { 1, 67 }, { 66, 67 } } }, /* Test for BRE expression anchoring. POSIX says just that this may match; in glibc regex it always matched, so avoid changing it. */ { "\\(^\\|foo\\)bar", "bar", 0, 2, { { 0, 3 }, { -1, -1 } } }, { "\\(foo\\|^\\)bar", "bar", 0, 2, { { 0, 3 }, { -1, -1 } } }, /* In ERE this must be treated as an anchor. */ { "(^|foo)bar", "bar", REG_EXTENDED, 2, { { 0, 3 }, { -1, -1 } } }, { "(foo|^)bar", "bar", REG_EXTENDED, 2, { { 0, 3 }, { -1, -1 } } }, /* Here ^ cannot be treated as an anchor according to POSIX. */ { "(^|foo)bar", "(^|foo)bar", 0, 2, { { 0, 10 }, { -1, -1 } } }, { "(foo|^)bar", "(foo|^)bar", 0, 2, { { 0, 10 }, { -1, -1 } } }, /* More tests on backreferences. */ { "()\\1", "x", REG_EXTENDED, 2, { { 0, 0 }, { 0, 0 } } }, { "()x\\1", "x", REG_EXTENDED, 2, { { 0, 1 }, { 0, 0 } } }, { "()\\1*\\1*", "", REG_EXTENDED, 2, { { 0, 0 }, { 0, 0 } } }, { "([0-9]).*\\1(a*)", "7;7a6", REG_EXTENDED, 3, { { 0, 4 }, { 0, 1 }, { 3, 4 } } }, { "([0-9]).*\\1(a*)", "7;7a", REG_EXTENDED, 3, { { 0, 4 }, { 0, 1 }, { 3, 4 } } }, { "(b)()c\\1", "bcb", REG_EXTENDED, 3, { { 0, 3 }, { 0, 1 }, { 1, 1 } } }, { "()(b)c\\2", "bcb", REG_EXTENDED, 3, { { 0, 3 }, { 0, 0 }, { 0, 1 } } }, { "a(b)()c\\1", "abcb", REG_EXTENDED, 3, { { 0, 4 }, { 1, 2 }, { 2, 2 } } }, { "a()(b)c\\2", "abcb", REG_EXTENDED, 3, { { 0, 4 }, { 1, 1 }, { 1, 2 } } }, { "()(b)\\1c\\2", "bcb", REG_EXTENDED, 3, { { 0, 3 }, { 0, 0 }, { 0, 1 } } }, { "(b())\\2\\1", "bbbb", REG_EXTENDED, 3, { { 0, 2 }, { 0, 1 }, { 1, 1 } } }, { "a()(b)\\1c\\2", "abcb", REG_EXTENDED, 3, { { 0, 4 }, { 1, 1 }, { 1, 2 } } }, { "a()d(b)\\1c\\2", "adbcb", REG_EXTENDED, 3, { { 0, 5 }, { 1, 1 }, { 2, 3 } } }, { "a(b())\\2\\1", "abbbb", REG_EXTENDED, 3, { { 0, 3 }, { 1, 2 }, { 2, 2 } } }, { "(bb())\\2\\1", "bbbb", REG_EXTENDED, 3, { { 0, 4 }, { 0, 2 }, { 2, 2 } } }, { "^([^,]*),\\1,\\1$", "a,a,a", REG_EXTENDED, 2, { { 0, 5 }, { 0, 1 } } }, { "^([^,]*),\\1,\\1$", "ab,ab,ab", REG_EXTENDED, 2, { { 0, 8 }, { 0, 2 } } }, { "^([^,]*),\\1,\\1,\\1$", "abc,abc,abc,abc", REG_EXTENDED, 2, { { 0, 15 }, { 0, 3 } } }, { "^(.?)(.?)(.?)(.?)(.?).?\\5\\4\\3\\2\\1$", "level", REG_NOSUB | REG_EXTENDED, 0, { { -1, -1 } } }, { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$|^.?$", "level", REG_NOSUB | REG_EXTENDED, 0, { { -1, -1 } } }, { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$|^.?$", "abcdedcba", REG_EXTENDED, 1, { { 0, 9 } } }, { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$|^.?$", "ababababa", REG_EXTENDED, 1, { { 0, 9 } } }, { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$", "level", REG_NOSUB | REG_EXTENDED, 0, { { -1, -1 } } }, { "^(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?)(.?).?\\9\\8\\7\\6\\5\\4\\3\\2\\1$", "ababababa", REG_EXTENDED, 1, { { 0, 9 } } }, /* Test for *+ match. */ { "^a*+(.)", "ab", REG_EXTENDED, 2, { { 0, 2 }, { 1, 2 } } }, /* Test for ** match. */ { "^(a*)*(.)", "ab", REG_EXTENDED, 3, { { 0, 2 }, { 0, 1 }, { 1, 2 } } }, }; static void bug_regex11 (void) { regex_t re; regmatch_t rm[5]; size_t i; int n; for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i) { n = regcomp (&re, tests[i].pattern, tests[i].flags); if (n != 0) { char buf[500]; regerror (n, &re, buf, sizeof (buf)); report_error ("%s: regcomp %zd failed: %s", tests[i].pattern, i, buf); continue; } if (regexec (&re, tests[i].string, tests[i].nmatch, rm, 0)) { report_error ("%s: regexec %zd failed", tests[i].pattern, i); regfree (&re); continue; } for (n = 0; n < tests[i].nmatch; ++n) if (rm[n].rm_so != tests[i].rm[n].rm_so || rm[n].rm_eo != tests[i].rm[n].rm_eo) { if (tests[i].rm[n].rm_so == -1 && tests[i].rm[n].rm_eo == -1) break; report_error ("%s: regexec %zd match failure rm[%d] %d..%d", tests[i].pattern, i, n, (int) rm[n].rm_so, (int) rm[n].rm_eo); break; } regfree (&re); } } int main (void) { static struct re_pattern_buffer regex; unsigned char folded_chars[UCHAR_MAX + 1]; int i; const char *s; struct re_registers regs; #if HAVE_DECL_ALARM /* In case a bug causes glibc to go into an infinite loop. The tests should take less than 10 s on a reasonably modern CPU. */ int alarm_value = 1000; signal (SIGALRM, SIG_DFL); alarm (alarm_value); #endif bug_regex11 (); if (setlocale (LC_ALL, "en_US.UTF-8")) { { /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html This test needs valgrind to catch the bug on Debian GNU/Linux 3.1 x86, but it might catch the bug better on other platforms and it shouldn't hurt to try the test here. */ static char const pat[] = "insert into"; static char const data[] = "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) report_error ("%s: %s", pat, s); else { memset (®s, 0, sizeof regs); i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s); if (i != -1) report_error ("re_search '%s' on '%s' returned %d", pat, data, i); regfree (®ex); free (regs.start); free (regs.end); } } if (really_utf8 ()) { /* This test is from glibc bug 15078. The test case is from Andreas Schwab in <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. */ static char const pat[] = "[^x]x"; static char const data[] = /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ "\xe1\x80\x80" "\xe1\x80\xbb" "\xe1\x80\xbd" "\xe1\x80\x94" "\xe1\x80\xba" "\xe1\x80\xaf" "\xe1\x80\x95" "\xe1\x80\xba" "x"; re_set_syntax (0); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) report_error ("%s: %s", pat, s); else { memset (®s, 0, sizeof regs); i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, 0); if (i != 0 && i != 21) report_error ("re_search '%s' on '%s' returned %d", pat, data, i); regfree (®ex); free (regs.start); free (regs.end); } } if (! setlocale (LC_ALL, "C")) { report_error ("setlocale \"C\" failed"); return exit_status; } } if (setlocale (LC_ALL, "tr_TR.UTF-8")) { if (really_utf8 () && towupper (L'i') == 0x0130 /* U+0130; see below. */) { re_set_syntax (RE_SYNTAX_GREP | RE_ICASE); memset (®ex, 0, sizeof regex); static char const pat[] = "i"; s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) report_error ("%s: %s", pat, s); else { /* UTF-8 encoding of U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE. In Turkish, this is the upper-case equivalent of ASCII "i". Older versions of Gnulib failed to match "i" to U+0130 when ignoring case in Turkish <https://bugs.gnu.org/43577>. */ static char const data[] = "\xc4\xb0"; memset (®s, 0, sizeof regs); i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s); if (i != 0) report_error ("re_search '%s' on '%s' returned %d", pat, data, i); regfree (®ex); free (regs.start); free (regs.end); } } if (! setlocale (LC_ALL, "C")) { report_error ("setlocale \"C\" failed"); return exit_status; } } /* This test is from glibc bug 3957, reported by Andrew Mackey. */ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); memset (®ex, 0, sizeof regex); static char const pat_3957[] = "a[^x]b"; s = re_compile_pattern (pat_3957, sizeof pat_3957 - 1, ®ex); if (s) report_error ("%s: %s", pat_3957, s); else { /* This should fail, but succeeds for glibc-2.5. */ memset (®s, 0, sizeof regs); static char const data[] = "a\nb"; i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s); if (i != -1) report_error ("re_search '%s' on '%s' returned %d", pat_3957, data, i); regfree (®ex); free (regs.start); free (regs.end); } /* This regular expression is from Spencer ere test number 75 in grep-2.3. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); for (i = 0; i <= UCHAR_MAX; i++) folded_chars[i] = i; regex.translate = folded_chars; static char const pat75[] = "a[[:@:>@:]]b\n"; s = re_compile_pattern (pat75, sizeof pat75 - 1, ®ex); /* This should fail with _Invalid character class name_ error. */ if (!s) { report_error ("re_compile_pattern: failed to reject '%s'", pat75); regfree (®ex); } /* Ensure that [b-a] is diagnosed as invalid, when using RE_NO_EMPTY_RANGES. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); static char const pat_b_a[] = "a[b-a]"; s = re_compile_pattern (pat_b_a, sizeof pat_b_a - 1, ®ex); if (s == 0) { report_error ("re_compile_pattern: failed to reject '%s'", pat_b_a); regfree (®ex); } /* This should succeed, but does not for glibc-2.1.3. */ memset (®ex, 0, sizeof regex); static char const pat_213[] = "{1"; s = re_compile_pattern (pat_213, sizeof pat_213 - 1, ®ex); if (s) report_error ("%s: %s", pat_213, s); else regfree (®ex); /* The following example is derived from a problem report against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ memset (®ex, 0, sizeof regex); static char const pat_stolfi[] = "[an\371]*n"; s = re_compile_pattern (pat_stolfi, sizeof pat_stolfi - 1, ®ex); if (s) report_error ("%s: %s", pat_stolfi, s); /* This should match, but does not for glibc-2.2.1. */ else { memset (®s, 0, sizeof regs); static char const data[] = "an"; i = re_match (®ex, data, sizeof data - 1, 0, ®s); if (i != 2) report_error ("re_match '%s' on '%s' at 2 returned %d", pat_stolfi, data, i); regfree (®ex); free (regs.start); free (regs.end); } memset (®ex, 0, sizeof regex); static char const pat_x[] = "x"; s = re_compile_pattern (pat_x, sizeof pat_x - 1, ®ex); if (s) report_error ("%s: %s", pat_x, s); /* glibc-2.2.93 does not work with a negative RANGE argument. */ else { memset (®s, 0, sizeof regs); static char const data[] = "wxy"; i = re_search (®ex, data, sizeof data - 1, 2, -2, ®s); if (i != 1) report_error ("re_search '%s' on '%s' returned %d", pat_x, data, i); regfree (®ex); free (regs.start); free (regs.end); } /* The version of regex.c in older versions of gnulib ignored RE_ICASE. Detect that problem too. */ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat_x, 1, ®ex); if (s) report_error ("%s: %s", pat_x, s); else { memset (®s, 0, sizeof regs); static char const data[] = "WXY"; i = re_search (®ex, data, sizeof data - 1, 0, 3, ®s); if (i < 0) report_error ("re_search '%s' on '%s' returned %d", pat_x, data, i); regfree (®ex); free (regs.start); free (regs.end); } /* glibc bug 11053. */ re_set_syntax (RE_SYNTAX_POSIX_BASIC); memset (®ex, 0, sizeof regex); static char const pat_sub2[] = "\\(a*\\)*a*\\1"; s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, ®ex); if (s) report_error ("%s: %s", pat_sub2, s); else { memset (®s, 0, sizeof regs); static char const data[] = "a"; int datalen = sizeof data - 1; i = re_search (®ex, data, datalen, 0, datalen, ®s); if (i != 0) report_error ("re_search '%s' on '%s' returned %d", pat_sub2, data, i); else if (regs.num_regs < 2) report_error ("re_search '%s' on '%s' returned only %d registers", pat_sub2, data, (int) regs.num_regs); else if (! (regs.start[0] == 0 && regs.end[0] == 1)) report_error ("re_search '%s' on '%s' returned wrong match [%d,%d)", pat_sub2, data, (int) regs.start[0], (int) regs.end[0]); else if (! (regs.start[1] == 0 && regs.end[1] == 0)) report_error ("re_search '%s' on '%s' returned wrong submatch [%d,%d)", pat_sub2, data, (int) regs.start[1], (int) regs.end[1]); regfree (®ex); free (regs.start); free (regs.end); } /* Catch a bug reported by Vin Shelton in https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html */ re_set_syntax (RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES); static char const pat_shelton[] = "[[:alnum:]_-]\\\\+$"; s = re_compile_pattern (pat_shelton, sizeof pat_shelton - 1, ®ex); if (s) report_error ("%s: %s", pat_shelton, s); else regfree (®ex); /* REG_STARTEND was added to glibc on 2004-01-15. Reject older versions. */ if (REG_STARTEND == 0) report_error ("REG_STARTEND is zero"); /* Matching with the compiled form of this regexp would provoke an assertion failure prior to glibc-2.28: regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed With glibc-2.28, compilation fails and reports the invalid back reference. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); static char const pat_badback[] = "0|()0|\\1|0"; s = re_compile_pattern (pat_badback, sizeof pat_badback, ®ex); if (!s && re_search (®ex, "x", 1, 0, 1, ®s) != -1) s = "mishandled invalid back reference"; if (s && strcmp (s, "Invalid back reference") != 0) report_error ("%s: %s", pat_badback, s); #if 0 /* It would be nice to reject hosts whose regoff_t values are too narrow (including glibc on hosts with 64-bit ptrdiff_t and 32-bit int), but we should wait until glibc implements this feature. Otherwise, support for equivalence classes and multibyte collation symbols would always be broken except when compiling --without-included-regex. */ if (sizeof (regoff_t) < sizeof (ptrdiff_t) || sizeof (regoff_t) < sizeof (ssize_t)) report_error ("regoff_t values are too narrow"); #endif return exit_status; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-rwlock1.c�����������������������������������������������������0000644�0001750�0001750�00000012653�14557510510�015345� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of glthread_rwlock_rdlock function. Copyright (C) 2017-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Inspired by https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_rdlock/2-2.c by Intel Corporation. */ #include <config.h> #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS #include "glthread/lock.h" #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "glthread/thread.h" /* Verify that in a situation where - an rwlock is taken by a reader and has a writer waiting, - an additional reader requests the lock, - the waiting writer and the requesting reader threads have the same priority, the requesting reader thread gets blocked, so that at some point the waiting writer can acquire the lock. Without such a guarantee, when there a N readers and each of the readers spends more than 1/Nth of the time with the lock held, there is a high probability that the waiting writer will not get the lock in a given finite time, a phenomenon called "writer starvation". Without such a guarantee, applications have a hard time avoiding writer starvation. POSIX:2008 makes this requirement only for implementations that support TPS (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO and SCHED_RR, see https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html but test verifies the guarantee regardless of TPS and regardless of scheduling policy. */ #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (fprintf (stderr, "Unexpected outcome %d\n", n), abort ()) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static gl_rwlock_t lock; static gl_thread_t reader1; static gl_thread_t writer; static gl_thread_t reader2; static gl_thread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static gl_lock_t baton; static void * timer_func (_GL_UNUSED void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (glthread_lock_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (_GL_UNUSED void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (glthread_lock_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9 omitted. */ /* Step 10: Launch a timer, to test whether the next call blocks. */ if (glthread_create (&timer, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (glthread_lock_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = glthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (_GL_UNUSED void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (glthread_lock_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (glthread_create (&reader2, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (glthread_lock_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (glthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = gl_thread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (glthread_rwlock_init (&lock)) UNEXPECTED (1); if (glthread_lock_init (&baton)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (glthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (glthread_create (&writer, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { sleep (1); } } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif �������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-sched.c�������������������������������������������������������0000644�0001750�0001750�00000002274�14557510510�015047� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sched.h> substitute. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <sched.h> /* Check that 'struct sched_param' is defined. */ static struct sched_param a; /* Check that the SCHED_* macros are defined and compile-time constants. */ int b[] = { SCHED_FIFO, SCHED_RR, SCHED_OTHER }; /* Check that the types are all defined. */ pid_t t1; int f1; int main () { /* Check fields of 'struct sched_param'. */ f1 = a.sched_priority; return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-select.c������������������������������������������������������0000644�0001750�0001750�00000002056�14557510510�015236� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of select() substitute. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini, 2008. */ #include <config.h> #include <sys/select.h> #include "signature.h" SIGNATURE_CHECK (select, int, (int, fd_set *, fd_set *, fd_set *, struct timeval *)); #define TEST_PORT 12346 #include "test-select.h" int main (void) { return test_function (select); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-select-fd.c���������������������������������������������������0000644�0001750�0001750�00000004426�14557510510�015630� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of select() substitute, reading or writing from a given file descriptor. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <sys/select.h> int main (int argc, char *argv[]) { if (argc == 4) { char mode = argv[1][0]; if (mode == 'r' || mode == 'w') { int fd = atoi (argv[2]); if (fd >= 0) { const char *result_file_name = argv[3]; FILE *result_file = fopen (result_file_name, "wb"); if (result_file != NULL) { fd_set fds; struct timeval timeout; int ret; FD_ZERO (&fds); FD_SET (fd, &fds); timeout.tv_sec = 0; timeout.tv_usec = 10000; ret = (mode == 'r' ? select (fd + 1, &fds, NULL, NULL, &timeout) : select (fd + 1, NULL, &fds, NULL, &timeout)); if (ret < 0) { perror ("select failed"); exit (1); } if ((ret == 0) != ! FD_ISSET (fd, &fds)) { fprintf (stderr, "incorrect return value\n"); exit (1); } fprintf (result_file, "%d\n", ret); exit (0); } } } } fprintf (stderr, "Usage: test-select-fd mode fd result-file-name\n"); exit (1); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-select-stdin.c������������������������������������������������0000644�0001750�0001750�00000004333�14557510510�016355� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of select() substitute, reading from stdin. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <sys/select.h> #include <sys/time.h> #include <unistd.h> #include "macros.h" int main (void) { printf ("Applying select() from standard input. Press Ctrl-C to abort.\n"); for (;;) { struct timeval before; struct timeval after; unsigned long spent_usec; fd_set readfds; struct timeval timeout; int ret; gettimeofday (&before, NULL); FD_ZERO (&readfds); FD_SET (0, &readfds); timeout.tv_sec = 0; timeout.tv_usec = 500000; ret = select (1, &readfds, NULL, NULL, &timeout); gettimeofday (&after, NULL); spent_usec = (after.tv_sec - before.tv_sec) * 1000000 + after.tv_usec - before.tv_usec; if (ret < 0) { perror ("select failed"); exit (1); } if ((ret == 0) != ! FD_ISSET (0, &readfds)) { fprintf (stderr, "incorrect return value\n"); exit (1); } if (ret == 0) { if (spent_usec < 250000) { fprintf (stderr, "returned too early\n"); exit (1); } /* Timeout */ printf ("."); ASSERT (fflush (stdout) == 0); } else { char c; printf ("Input available! Trying to read 1 byte...\n"); ASSERT (read (0, &c, 1) == 1); } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-setenv.c������������������������������������������������������0000644�0001750�0001750�00000003107�14557510510�015261� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of setenv. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <stdlib.h> #include "signature.h" SIGNATURE_CHECK (setenv, int, (char const *, char const *, int)); #include <errno.h> #include <string.h> #include <unistd.h> #include "macros.h" int main (void) { /* Test overwriting. */ ASSERT (setenv ("a", "==", -1) == 0); ASSERT (setenv ("a", "2", 0) == 0); ASSERT (strcmp (getenv ("a"), "==") == 0); /* Required to fail with EINVAL. */ errno = 0; ASSERT (setenv ("", "", 1) == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (setenv ("a=b", "", 0) == -1); ASSERT (errno == EINVAL); #if 0 /* glibc and gnulib's implementation guarantee this, but POSIX no longer requires it: http://austingroupbugs.net/view.php?id=185 */ errno = 0; ASSERT (setenv (NULL, "", 0) == -1); ASSERT (errno == EINVAL); #endif return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-setlocale1.c��������������������������������������������������0000644�0001750�0001750�00000003407�14557510510�016014� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of setting the current locale. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <locale.h> #include "signature.h" SIGNATURE_CHECK (setlocale, char *, (int, const char *)); #include <stdlib.h> #include <string.h> #include "macros.h" int main (int argc, char *argv[]) { char *name1; char *name2; /* Try to set the locale by implicitly looking at the LC_ALL environment variable. configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; name1 = strdup (setlocale (LC_ALL, NULL)); /* Reset the locale. */ if (setlocale (LC_ALL, "C") == NULL) return 1; /* Try to set the locale by explicitly looking at the LC_ALL environment variable. configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL) return 1; name2 = strdup (setlocale (LC_ALL, NULL)); ASSERT (name1); ASSERT (name2); /* Test that the two results are the same. */ ASSERT (strcmp (name1, name2) == 0); free (name1); free (name2); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-setlocale2.c��������������������������������������������������0000644�0001750�0001750�00000003350�14557510510�016012� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of setting the current locale. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main () { /* Try to set the locale by implicitly looking at the LC_ALL environment variable. */ if (setlocale (LC_ALL, "") != NULL) /* It was successful. Check whether LC_CTYPE is non-trivial. */ if (strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) { fprintf (stderr, "setlocale did not fail for implicit %s\n", getenv ("LC_ALL")); return 1; } /* Reset the locale. */ if (setlocale (LC_ALL, "C") == NULL) return 1; /* Try to set the locale by explicitly looking at the LC_ALL environment variable. */ if (setlocale (LC_ALL, getenv ("LC_ALL")) != NULL) /* It was successful. Check whether LC_CTYPE is non-trivial. */ if (strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) { fprintf (stderr, "setlocale did not fail for explicit %s\n", getenv ("LC_ALL")); return 1; } return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-setlocale_null.c����������������������������������������������0000644�0001750�0001750�00000002152�14557510510�016761� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of setlocale_null_r function. Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* Specification. */ #include <locale.h> /* Check that SETLOCALE_NULL_ALL_MAX is a constant expression. */ static char buf[SETLOCALE_NULL_ALL_MAX]; int main () { /* Check that setlocale_null_r() can be used with $(SETLOCALE_NULL_LIB). */ return setlocale_null_r (LC_ALL, buf, sizeof (buf)) != 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-setlocale_null-mt-all.c���������������������������������������0000644�0001750�0001750�00000007775�14557510510�020165� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multithread-safety test for setlocale_null_r (LC_ALL, ...). Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* Work around GCC bug 44511. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wreturn-type" #endif #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Specification. */ #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "glthread/thread.h" /* We want to use the system's setlocale() function here, not the gnulib override. */ #undef setlocale /* Some common locale names. */ #if defined _WIN32 && !defined __CYGWIN__ # define ENGLISH "English_United States" # define GERMAN "German_Germany" # define FRENCH "French_France" # define ENCODING ".1252" #else # define ENGLISH "en_US" # define GERMAN "de_DE" # define FRENCH "fr_FR" # if defined __sgi # define ENCODING ".ISO8859-15" # elif defined __hpux # define ENCODING ".utf8" # else # define ENCODING ".UTF-8" # endif #endif static const char LOCALE1[] = ENGLISH ENCODING; static const char LOCALE2[] = GERMAN ENCODING; static const char LOCALE3[] = FRENCH ENCODING; static char *expected; static void * thread1_func (void *arg) { for (;;) { char buf[SETLOCALE_NULL_ALL_MAX]; if (setlocale_null_r (LC_ALL, buf, sizeof (buf))) abort (); if (strcmp (expected, buf) != 0) { fprintf (stderr, "thread1 disturbed by thread2!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static void * thread2_func (void *arg) { for (;;) { char buf[SETLOCALE_NULL_ALL_MAX]; setlocale_null_r (LC_NUMERIC, buf, sizeof (buf)); setlocale_null_r (LC_ALL, buf, sizeof (buf)); } /*NOTREACHED*/ } int main (int argc, char *argv[]) { if (setlocale (LC_ALL, LOCALE1) == NULL) { fprintf (stderr, "Skipping test: LOCALE1 not recognized\n"); return 77; } if (setlocale (LC_NUMERIC, LOCALE2) == NULL) { fprintf (stderr, "Skipping test: LOCALE2 not recognized\n"); return 77; } if (setlocale (LC_TIME, LOCALE3) == NULL) { fprintf (stderr, "Skipping test: LOCALE3 not recognized\n"); return 77; } expected = strdup (setlocale (LC_ALL, NULL)); /* Create the two threads. */ gl_thread_create (thread1_func, NULL); gl_thread_create (thread2_func, NULL); /* Let them run for 5 seconds. */ { struct timespec duration; duration.tv_sec = 5; duration.tv_nsec = 0; nanosleep (&duration, NULL); } return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif /* Without locking, the results of this test would be: glibc OK musl libc crash < 10 sec macOS crash < 1 sec FreeBSD crash < 1 sec NetBSD crash < 2 sec OpenBSD crash < 1 sec AIX crash < 2 sec HP-UX OK IRIX OK Solaris 10 OK Solaris 11.0 OK Solaris 11.4 OK Solaris OpenIndiana OK Haiku crash < 1 sec Cygwin < 3.4.6 crash < 1 sec mingw OK MSVC OK (assuming compiler option /MD !) */ ���gnuastro-0.22/bootstrapped/tests/test-setlocale_null-mt-one.c���������������������������������������0000644�0001750�0001750�00000007673�14557510510�020173� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multithread-safety test for setlocale_null_r (LC_xxx, ...). Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* Work around GCC bug 44511. */ #if 4 < __GNUC__ + (3 <= __GNUC_MINOR__) # pragma GCC diagnostic ignored "-Wreturn-type" #endif #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS /* Specification. */ #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "glthread/thread.h" /* We want to use the system's setlocale() function here, not the gnulib override. */ #undef setlocale /* Some common locale names. */ #if defined _WIN32 && !defined __CYGWIN__ # define ENGLISH "English_United States" # define GERMAN "German_Germany" # define FRENCH "French_France" # define ENCODING ".1252" #else # define ENGLISH "en_US" # define GERMAN "de_DE" # define FRENCH "fr_FR" # if defined __sgi # define ENCODING ".ISO8859-15" # elif defined __hpux # define ENCODING ".utf8" # else # define ENCODING ".UTF-8" # endif #endif static const char LOCALE1[] = ENGLISH ENCODING; static const char LOCALE2[] = GERMAN ENCODING; static const char LOCALE3[] = FRENCH ENCODING; static char *expected; static void * thread1_func (void *arg) { for (;;) { char buf[SETLOCALE_NULL_MAX]; if (setlocale_null_r (LC_NUMERIC, buf, sizeof (buf))) abort (); if (strcmp (expected, buf) != 0) { fprintf (stderr, "thread1 disturbed by thread2!\n"); fflush (stderr); abort (); } } /*NOTREACHED*/ } static void * thread2_func (void *arg) { for (;;) { char buf[SETLOCALE_NULL_MAX]; setlocale_null_r (LC_NUMERIC, buf, sizeof (buf)); setlocale_null_r (LC_TIME, buf, sizeof (buf)); } /*NOTREACHED*/ } int main (int argc, char *argv[]) { if (setlocale (LC_ALL, LOCALE1) == NULL) { fprintf (stderr, "Skipping test: LOCALE1 not recognized\n"); return 77; } if (setlocale (LC_NUMERIC, LOCALE2) == NULL) { fprintf (stderr, "Skipping test: LOCALE2 not recognized\n"); return 77; } if (setlocale (LC_TIME, LOCALE3) == NULL) { fprintf (stderr, "Skipping test: LOCALE3 not recognized\n"); return 77; } expected = strdup (setlocale (LC_NUMERIC, NULL)); /* Create the two threads. */ gl_thread_create (thread1_func, NULL); gl_thread_create (thread2_func, NULL); /* Let them run for 2 seconds. */ { struct timespec duration; duration.tv_sec = 2; duration.tv_nsec = 0; nanosleep (&duration, NULL); } return 0; } #else /* No multithreading available. */ #include <stdio.h> int main () { fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; } #endif /* Without locking, the results of this test would be: glibc OK musl libc OK macOS OK FreeBSD OK NetBSD OK OpenBSD crash < 1 sec AIX crash < 2 sec HP-UX OK IRIX OK Solaris 10 OK Solaris 11.0 OK Solaris 11.4 OK Solaris OpenIndiana OK Haiku OK Cygwin OK mingw OK MSVC OK (assuming compiler option /MD !) */ ���������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-setsockopt.c��������������������������������������������������0000644�0001750�0001750�00000002656�14557510510�016163� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test setsockopt() function. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <sys/socket.h> #include "signature.h" SIGNATURE_CHECK (setsockopt, int, (int, int, int, const void *, socklen_t)); #include <errno.h> #include <unistd.h> #include "sockets.h" #include "macros.h" int main (void) { (void) gl_sockets_startup (SOCKETS_1_1); /* Test behaviour for invalid file descriptors. */ { int value = 1; errno = 0; ASSERT (setsockopt (-1, SOL_SOCKET, SO_REUSEADDR, &value, sizeof (value)) == -1); ASSERT (errno == EBADF); } { int value = 1; close (99); errno = 0; ASSERT (setsockopt (99, SOL_SOCKET, SO_REUSEADDR, &value, sizeof (value)) == -1); ASSERT (errno == EBADF); } return 0; } ����������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-signal-h.c����������������������������������������������������0000644�0001750�0001750�00000004753�14557510510�015467� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <signal.h> substitute. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <signal.h> /* Check for required types. */ struct { size_t a; uid_t b; volatile sig_atomic_t c; sigset_t d; pid_t e; #if 0 /* Not guaranteed by gnulib. */ pthread_t f; struct timespec g; #endif } s; /* Check that NSIG is defined. */ int nsig = NSIG; int main (void) { switch (0) { /* The following are guaranteed by C. */ case 0: case SIGABRT: case SIGFPE: case SIGILL: case SIGINT: case SIGSEGV: case SIGTERM: /* The following is guaranteed by gnulib. */ #if GNULIB_SIGPIPE || defined SIGPIPE case SIGPIPE: #endif /* Ensure no conflict with other standardized names. */ #ifdef SIGALRM case SIGALRM: #endif /* On Haiku, SIGBUS is mistakenly equal to SIGSEGV. */ #if defined SIGBUS && SIGBUS != SIGSEGV case SIGBUS: #endif #ifdef SIGCHLD case SIGCHLD: #endif #ifdef SIGCONT case SIGCONT: #endif #ifdef SIGHUP case SIGHUP: #endif #ifdef SIGKILL case SIGKILL: #endif #ifdef SIGQUIT case SIGQUIT: #endif #ifdef SIGSTOP case SIGSTOP: #endif #ifdef SIGTSTP case SIGTSTP: #endif #ifdef SIGTTIN case SIGTTIN: #endif #ifdef SIGTTOU case SIGTTOU: #endif #ifdef SIGUSR1 case SIGUSR1: #endif #ifdef SIGUSR2 case SIGUSR2: #endif #ifdef SIGSYS case SIGSYS: #endif #ifdef SIGTRAP case SIGTRAP: #endif #ifdef SIGURG case SIGURG: #endif #ifdef SIGVTALRM case SIGVTALRM: #endif #ifdef SIGXCPU case SIGXCPU: #endif #ifdef SIGXFSZ case SIGXFSZ: #endif /* SIGRTMIN and SIGRTMAX need not be compile-time constants. */ #if 0 # ifdef SIGRTMIN case SIGRTMIN: # endif # ifdef SIGRTMAX case SIGRTMAX: # endif #endif ; } return s.a + s.b + s.c + s.e; } ���������������������gnuastro-0.22/bootstrapped/tests/test-signbit.c�����������������������������������������������������0000644�0001750�0001750�00000006534�14557510510�015423� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of signbit() substitute. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <math.h> /* signbit must be a macro. */ #ifndef signbit # error missing declaration #endif #include <float.h> #include <limits.h> #include "minus-zero.h" #include "infinity.h" #include "signed-nan.h" #include "signed-snan.h" #include "macros.h" float zerof = 0.0f; double zerod = 0.0; long double zerol = 0.0L; static void test_signbitf () { /* Finite values. */ ASSERT (!signbit (3.141f)); ASSERT (!signbit (3.141e30f)); ASSERT (!signbit (3.141e-30f)); ASSERT (signbit (-2.718f)); ASSERT (signbit (-2.718e30f)); ASSERT (signbit (-2.718e-30f)); /* Zeros. */ ASSERT (!signbit (0.0f)); if (1.0f / minus_zerof < 0) ASSERT (signbit (minus_zerof)); else ASSERT (!signbit (minus_zerof)); /* Infinite values. */ ASSERT (!signbit (Infinityf ())); ASSERT (signbit (- Infinityf ())); /* Quiet NaN. */ ASSERT (!signbit (positive_NaNf ())); ASSERT (signbit (negative_NaNf ())); #if HAVE_SNANF /* Signalling NaN. */ ASSERT (!signbit (positive_SNaNf ())); ASSERT (signbit (negative_SNaNf ())); #endif } static void test_signbitd () { /* Finite values. */ ASSERT (!signbit (3.141)); ASSERT (!signbit (3.141e30)); ASSERT (!signbit (3.141e-30)); ASSERT (signbit (-2.718)); ASSERT (signbit (-2.718e30)); ASSERT (signbit (-2.718e-30)); /* Zeros. */ ASSERT (!signbit (0.0)); if (1.0 / minus_zerod < 0) ASSERT (signbit (minus_zerod)); else ASSERT (!signbit (minus_zerod)); /* Infinite values. */ ASSERT (!signbit (Infinityd ())); ASSERT (signbit (- Infinityd ())); /* Quiet NaN. */ ASSERT (!signbit (positive_NaNd ())); ASSERT (signbit (negative_NaNd ())); #if HAVE_SNAND /* Signalling NaN. */ ASSERT (!signbit (positive_SNaNd ())); ASSERT (signbit (negative_SNaNd ())); #endif } static void test_signbitl () { /* Finite values. */ ASSERT (!signbit (3.141L)); ASSERT (!signbit (3.141e30L)); ASSERT (!signbit (3.141e-30L)); ASSERT (signbit (-2.718L)); ASSERT (signbit (-2.718e30L)); ASSERT (signbit (-2.718e-30L)); /* Zeros. */ ASSERT (!signbit (0.0L)); if (1.0L / minus_zerol < 0) ASSERT (signbit (minus_zerol)); else ASSERT (!signbit (minus_zerol)); /* Infinite values. */ ASSERT (!signbit (Infinityl ())); ASSERT (signbit (- Infinityl ())); /* Quiet NaN. */ ASSERT (!signbit (positive_NaNl ())); ASSERT (signbit (negative_NaNl ())); #if HAVE_SNANL /* Signalling NaN. */ ASSERT (!signbit (positive_SNaNl ())); ASSERT (signbit (negative_SNaNl ())); #endif } int main () { test_signbitf (); test_signbitd (); test_signbitl (); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-sigprocmask.c�������������������������������������������������0000644�0001750�0001750�00000004656�14557510510�016311� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sigprocmask. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2011. */ #include <config.h> #include <signal.h> #include "signature.h" SIGNATURE_CHECK (sigprocmask, int, (int, const sigset_t *, sigset_t *)); #include <errno.h> #include <inttypes.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "macros.h" #if !(defined _WIN32 && !defined __CYGWIN__) static volatile int sigint_occurred; static void sigint_handler (_GL_UNUSED int sig) { sigint_occurred++; } int main () { sigset_t set; intmax_t pid = getpid (); char command[80]; signal (SIGINT, sigint_handler); sigemptyset (&set); sigaddset (&set, SIGINT); /* Check error handling. */ ASSERT (sigprocmask (1729, &set, NULL) == -1); ASSERT (errno == EINVAL); /* Block SIGINT. */ ASSERT (sigprocmask (SIG_BLOCK, &set, NULL) == 0); /* Request a SIGINT signal from outside. */ sprintf (command, "sh -c 'sleep 1; kill -INT %"PRIdMAX"' &", pid); ASSERT (system (command) == 0); /* Wait. */ sleep (2); /* The signal should not have arrived yet, because it is blocked. */ ASSERT (sigint_occurred == 0); /* Unblock SIGINT. */ ASSERT (sigprocmask (SIG_UNBLOCK, &set, NULL) == 0); /* The signal should have arrived now, because POSIX says "If there are any pending unblocked signals after the call to sigprocmask(), at least one of those signals shall be delivered before the call to sigprocmask() returns." */ ASSERT (sigint_occurred == 1); return 0; } #else /* On native Windows, getpid() values and the arguments that are passed to the (Cygwin?) 'kill' program are not necessarily related. */ int main () { fputs ("Skipping test: native Windows platform\n", stderr); return 77; } #endif ����������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-sleep.c�������������������������������������������������������0000644�0001750�0001750�00000002633�14557510510�015070� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of sleep() function. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (sleep, unsigned int, (unsigned int)); #include <signal.h> #include "macros.h" #if HAVE_DECL_ALARM static void handle_alarm (int sig) { if (sig != SIGALRM) _exit (1); } #endif int main (void) { ASSERT (sleep (1) <= 1); ASSERT (sleep (0) == 0); #if HAVE_DECL_ALARM { const unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ unsigned int remaining; signal (SIGALRM, handle_alarm); alarm (1); remaining = sleep (pentecost); ASSERT (pentecost - 10 < remaining && remaining <= pentecost); } #endif return 0; } �����������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-sockets.c�����������������������������������������������������0000644�0001750�0001750�00000002164�14557510510�015432� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2024 Free Software Foundation, Inc. * Written by Simon Josefsson. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include "sockets.h" int main (void) { int err; err = gl_sockets_startup (SOCKETS_1_1); if (err != 0) { printf ("wsastartup failed %d\n", err); return 1; } err = gl_sockets_cleanup (); if (err != 0) { printf ("wsacleanup failed %d\n", err); return 1; } (void) gl_fd_to_handle (0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-stat.c��������������������������������������������������������0000644�0001750�0001750�00000003107�14557510510�014730� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of stat. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/stat.h> /* Caution: stat may be a function-like macro. Although this signature check must pass, it may be the signature of the real (and broken) stat rather than rpl_stat. Most code should not use the address of stat. */ #include "signature.h" SIGNATURE_CHECK (stat, int, (char const *, struct stat *)); #include <fcntl.h> #include <errno.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include "same-inode.h" #include "macros.h" #define BASE "test-stat.t" #include "test-stat.h" /* Wrapper around stat, which works even if stat is a function-like macro, where test_stat_func(stat) would do the wrong thing. */ static int do_stat (char const *name, struct stat *st) { return stat (name, st); } int main (void) { return test_stat_func (do_stat, true); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-stat-time.c���������������������������������������������������0000644�0001750�0001750�00000015241�14557510510�015666� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stat-time.h>. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by James Youngman <jay@gnu.org>, 2007. */ #include <config.h> #include "stat-time.h" #include <fcntl.h> #include <signal.h> #include <stdio.h> #include <sys/stat.h> #include <unistd.h> #include <time.h> #include "macros.h" #define BASE "test-stat-time.t" #include "nap.h" enum { NFILES = 4 }; static char filename_stamp1[50]; static char filename_testfile[50]; static char filename_stamp2[50]; static char filename_stamp3[50]; /* Use file names that are different at each run. This is necessary for test_birthtime() to pass on native Windows: On this platform, the file system apparently remembers the creation time of a file even after it is removed and created anew. See "Windows NT Contains File System Tunneling Capabilities" <https://support.microsoft.com/en-us/help/172190/> */ static void initialize_filenames (void) { long t = (long) time (NULL); sprintf (filename_stamp1, "t-stt-%ld-stamp1", t); sprintf (filename_testfile, "t-stt-%ld-testfile", t); sprintf (filename_stamp2, "t-stt-%ld-stamp2", t); sprintf (filename_stamp3, "t-stt-%ld-stamp3", t); } static int force_unlink (const char *filename) { /* This chmod is necessary on mingw, where unlink() of a read-only file fails with EPERM. */ chmod (filename, 0600); return unlink (filename); } static void cleanup (int sig) { /* Remove temporary files. */ force_unlink (filename_stamp1); force_unlink (filename_testfile); force_unlink (filename_stamp2); force_unlink (filename_stamp3); if (sig != 0) _exit (1); } static int open_file (const char *filename, int flags) { int fd = open (filename, flags | O_WRONLY, 0500); if (fd >= 0) { close (fd); return 1; } else { return 0; } } static void create_file (const char *filename) { ASSERT (open_file (filename, O_CREAT | O_EXCL)); } static void do_stat (const char *filename, struct stat *p) { ASSERT (stat (filename, p) == 0); } static void prepare_test (struct stat *statinfo, struct timespec *modtimes) { int i; create_file (filename_stamp1); nap (); create_file (filename_testfile); nap (); create_file (filename_stamp2); nap (); ASSERT (chmod (filename_testfile, 0400) == 0); nap (); create_file (filename_stamp3); do_stat (filename_stamp1, &statinfo[0]); do_stat (filename_testfile, &statinfo[1]); do_stat (filename_stamp2, &statinfo[2]); do_stat (filename_stamp3, &statinfo[3]); /* Now use our access functions. */ for (i = 0; i < NFILES; ++i) { modtimes[i] = get_stat_mtime (&statinfo[i]); } } static void test_mtime (const struct stat *statinfo, struct timespec *modtimes) { int i; /* Use the struct stat fields directly. */ /* mtime(stamp1) < mtime(stamp2) */ ASSERT (statinfo[0].st_mtime < statinfo[2].st_mtime || (statinfo[0].st_mtime == statinfo[2].st_mtime && (get_stat_mtime_ns (&statinfo[0]) < get_stat_mtime_ns (&statinfo[2])))); /* mtime(stamp2) < mtime(stamp3) */ ASSERT (statinfo[2].st_mtime < statinfo[3].st_mtime || (statinfo[2].st_mtime == statinfo[3].st_mtime && (get_stat_mtime_ns (&statinfo[2]) < get_stat_mtime_ns (&statinfo[3])))); /* Now check the result of the access functions. */ /* mtime(stamp1) < mtime(stamp2) */ ASSERT (modtimes[0].tv_sec < modtimes[2].tv_sec || (modtimes[0].tv_sec == modtimes[2].tv_sec && modtimes[0].tv_nsec < modtimes[2].tv_nsec)); /* mtime(stamp2) < mtime(stamp3) */ ASSERT (modtimes[2].tv_sec < modtimes[3].tv_sec || (modtimes[2].tv_sec == modtimes[3].tv_sec && modtimes[2].tv_nsec < modtimes[3].tv_nsec)); /* verify equivalence */ for (i = 0; i < NFILES; ++i) { struct timespec ts; ts = get_stat_mtime (&statinfo[i]); ASSERT (ts.tv_sec == statinfo[i].st_mtime); } } #if defined _WIN32 && !defined __CYGWIN__ /* Skip the ctime tests on native Windows platforms, because their st_ctime is either the same as st_mtime (plus or minus an offset) or set to the file _creation_ time, and is not influenced by rename or chmod. */ # define test_ctime(ignored) ((void) 0) #else static void test_ctime (const struct stat *statinfo) { /* On some buggy NFS clients, mtime and ctime are disproportionately skewed from one another. Skip this test in that case. */ if (statinfo[0].st_mtime != statinfo[0].st_ctime) return; /* mtime(stamp2) < ctime(testfile) */ ASSERT (statinfo[2].st_mtime < statinfo[1].st_ctime || (statinfo[2].st_mtime == statinfo[1].st_ctime && (get_stat_mtime_ns (&statinfo[2]) < get_stat_ctime_ns (&statinfo[1])))); } #endif static void test_birthtime (const struct stat *statinfo, const struct timespec *modtimes, struct timespec *birthtimes) { int i; /* Collect the birth times. */ for (i = 0; i < NFILES; ++i) { birthtimes[i] = get_stat_birthtime (&statinfo[i]); if (birthtimes[i].tv_nsec < 0) return; } /* mtime(stamp1) < birthtime(testfile) */ ASSERT (modtimes[0].tv_sec < birthtimes[1].tv_sec || (modtimes[0].tv_sec == birthtimes[1].tv_sec && modtimes[0].tv_nsec < birthtimes[1].tv_nsec)); /* birthtime(testfile) < mtime(stamp2) */ ASSERT (birthtimes[1].tv_sec < modtimes[2].tv_sec || (birthtimes[1].tv_sec == modtimes[2].tv_sec && birthtimes[1].tv_nsec < modtimes[2].tv_nsec)); } int main (void) { struct stat statinfo[NFILES]; struct timespec modtimes[NFILES]; struct timespec birthtimes[NFILES]; initialize_filenames (); #ifdef SIGHUP signal (SIGHUP, cleanup); #endif #ifdef SIGINT signal (SIGINT, cleanup); #endif #ifdef SIGQUIT signal (SIGQUIT, cleanup); #endif #ifdef SIGTERM signal (SIGTERM, cleanup); #endif cleanup (0); prepare_test (statinfo, modtimes); test_mtime (statinfo, modtimes); test_ctime (statinfo); test_birthtime (statinfo, modtimes, birthtimes); cleanup (0); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-stdbool.c�����������������������������������������������������0000644�0001750�0001750�00000006645�14557510510�015435� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test bool. Copyright (C) 2002-2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ /* Define ADDRESS_CHECK_OKAY if it is OK to assign an address to a 'bool' and this does not generate a warning (because we want this test to succeed even when using gcc's -Werror). */ #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) \ || (__clang_major__ >= 4) /* We can silence the warning. */ # pragma GCC diagnostic ignored "-Waddress" # define ADDRESS_CHECK_OKAY #elif defined __GNUC__ || defined __clang__ /* There may be a warning. */ #else /* Ignore warnings from other compilers. */ # define ADDRESS_CHECK_OKAY #endif #include <config.h> #ifdef TEST_STDBOOL_H # include <stdbool.h> #endif #if false "error: false is not 0" #endif #if true != 1 "error: true is not 1" #endif /* Several tests cannot be guaranteed with gnulib's <stdbool.h>, at least, not for all compilers and compiler options. */ #if ((HAVE_C_BOOL || defined __cplusplus \ || HAVE_STDBOOL_H || 3 <= __GNUC__ || 4 <= __clang_major__) \ && !(defined _MSC_VER || defined __SUNPRO_C)) # define WORKING_BOOL 1 #else # define WORKING_BOOL 0 #endif #if WORKING_BOOL struct s { bool s: 1; bool t; } s; #endif char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; #if WORKING_BOOL char d[(bool) 0.5 == true ? 1 : -1]; # ifdef ADDRESS_CHECK_OKAY /* Avoid gcc warning. */ /* C99 may plausibly be interpreted as not requiring support for a cast from a variable's address to bool in a static initializer. So treat it like a GCC extension. */ # if defined __GNUC__ || defined __clang__ bool e = &s; # endif # endif char f[(bool) 0.0 == false ? 1 : -1]; #endif char g[true]; char h[sizeof (bool)]; #if WORKING_BOOL char i[sizeof s.t]; #endif enum { j = false, k = true, l = false * true, m = true * 256 }; bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ bool q = true; bool *pq = &q; int main () { int error = 0; #if WORKING_BOOL # ifdef ADDRESS_CHECK_OKAY /* Avoid gcc warning. */ /* A cast from a variable's address to bool is valid in expressions. */ { bool e1 = &s; if (!e1) error = 1; } # endif #endif /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 reported by James Lemley on 2005-10-05; see https://lists.gnu.org/r/bug-coreutils/2005-10/msg00086.html This is a runtime test, since a corresponding compile-time test would rely on initializer extensions. */ { char digs[] = "0123456789"; if (&(digs + 5)[-2 + (bool) 1] != &digs[4]) error = 1; } return error; } �������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-stdckdint.c���������������������������������������������������0000644�0001750�0001750�00000002220�14557510510�015737� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test <stdckdint.h>. Copyright 2022-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* Tell test-intprops.c to test <stdckdint.h> instead of <intprops.h>. */ #define TEST_STDCKDINT 1 #define INT_ADD_WRAPV(a, b, r) ckd_add (r, a, b) #define INT_SUBTRACT_WRAPV(a, b, r) ckd_sub (r, a, b) #define INT_MULTIPLY_WRAPV(a, b, r) ckd_mul (r, a, b) /* Luckily, test-intprops.c uses INT_NEGATE_OVERFLOW only on INT_MIN. */ #define INT_NEGATE_OVERFLOW(a) ((a) < -INT_MAX) #include "test-intprops.c" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-stddef.c������������������������������������������������������0000644�0001750�0001750�00000007040�14557510510�015226� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stddef.h> substitute. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <stddef.h> /* Check that appropriate types are defined. */ wchar_t a = 'c'; ptrdiff_t b = 1; size_t c = 2; max_align_t mat; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ static_assert (sizeof NULL == sizeof (void *)); /* Check that offsetof produces integer constants with correct type. */ struct d { char e; char f; }; /* Solaris 10 has a bug where offsetof is under-parenthesized, and cannot be used as an arbitrary expression. However, since it is unlikely to bite real code, we ignore that short-coming. */ /* static_assert (sizeof offsetof (struct d, e) == sizeof (size_t)); */ static_assert (sizeof (offsetof (struct d, e)) == sizeof (size_t)); static_assert (offsetof (struct d, f) == 1); /* Check max_align_t's alignment. */ static_assert (alignof (double) <= alignof (max_align_t)); static_assert (alignof (int) <= alignof (max_align_t)); static_assert (alignof (long double) <= alignof (max_align_t)); static_assert (alignof (long int) <= alignof (max_align_t)); static_assert (alignof (ptrdiff_t) <= alignof (max_align_t)); static_assert (alignof (size_t) <= alignof (max_align_t)); static_assert (alignof (wchar_t) <= alignof (max_align_t)); static_assert (alignof (struct d) <= alignof (max_align_t)); #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ static_assert (__alignof__ (double) <= __alignof__ (max_align_t)); static_assert (__alignof__ (int) <= __alignof__ (max_align_t)); static_assert (__alignof__ (long double) <= __alignof__ (max_align_t)); static_assert (__alignof__ (long int) <= __alignof__ (max_align_t)); static_assert (__alignof__ (ptrdiff_t) <= __alignof__ (max_align_t)); static_assert (__alignof__ (size_t) <= __alignof__ (max_align_t)); static_assert (__alignof__ (wchar_t) <= __alignof__ (max_align_t)); static_assert (__alignof__ (struct d) <= __alignof__ (max_align_t)); #endif int test_unreachable_optimization (int x); _Noreturn void test_unreachable_noreturn (void); int test_unreachable_optimization (int x) { /* Check that the compiler uses 'unreachable' for optimization. This function, when compiled with optimization, should have code equivalent to return x + 3; Use 'objdump --disassemble test-stddef.o' to verify this. */ if (x < 4) unreachable (); return (x > 1 ? x + 3 : 2 * x + 10); } _Noreturn void test_unreachable_noreturn (void) { /* Check that the compiler's data-flow analysis recognizes 'unreachable ()'. This function should not elicit a warning. */ unreachable (); } #include <limits.h> /* INT_MAX */ /* offsetof promotes to an unsigned integer if and only if sizes do not fit in int. */ static_assert ((offsetof (struct d, e) < -1) == (INT_MAX < (size_t) -1)); int main (void) { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-stdint.c������������������������������������������������������0000644�0001750�0001750�00000034003�14557510510�015261� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdint.h> substitute. Copyright (C) 2006-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2006. */ #include <config.h> /* Whether to enable pedantic checks. */ #define DO_PEDANTIC 0 #include <stdint.h> #include "verify.h" #include "intprops.h" #if ((__GNUC__ >= 2) || (__clang_major__ >= 4)) && DO_PEDANTIC # define verify_same_types(expr1,expr2) \ extern void _verify_func(__LINE__) (__typeof__ (expr1) *); \ extern void _verify_func(__LINE__) (__typeof__ (expr2) *); # define _verify_func(line) _verify_func2(line) # define _verify_func2(line) verify_func_ ## line #else # define verify_same_types(expr1,expr2) extern void verify_func (int) #endif /* 7.18.1.1. Exact-width integer types */ /* 7.18.2.1. Limits of exact-width integer types */ int8_t a1[3] = { INT8_C (17), INT8_MIN, INT8_MAX }; verify (TYPE_MINIMUM (int8_t) == INT8_MIN); verify (TYPE_MAXIMUM (int8_t) == INT8_MAX); verify_same_types (INT8_MIN, (int8_t) 0 + 0); verify_same_types (INT8_MAX, (int8_t) 0 + 0); int16_t a2[3] = { INT16_C (17), INT16_MIN, INT16_MAX }; verify (TYPE_MINIMUM (int16_t) == INT16_MIN); verify (TYPE_MAXIMUM (int16_t) == INT16_MAX); verify_same_types (INT16_MIN, (int16_t) 0 + 0); verify_same_types (INT16_MAX, (int16_t) 0 + 0); int32_t a3[3] = { INT32_C (17), INT32_MIN, INT32_MAX }; verify (TYPE_MINIMUM (int32_t) == INT32_MIN); verify (TYPE_MAXIMUM (int32_t) == INT32_MAX); verify_same_types (INT32_MIN, (int32_t) 0 + 0); verify_same_types (INT32_MAX, (int32_t) 0 + 0); #ifdef INT64_MAX int64_t a4[3] = { INT64_C (17), INT64_MIN, INT64_MAX }; verify (TYPE_MINIMUM (int64_t) == INT64_MIN); verify (TYPE_MAXIMUM (int64_t) == INT64_MAX); verify_same_types (INT64_MIN, (int64_t) 0 + 0); verify_same_types (INT64_MAX, (int64_t) 0 + 0); #endif uint8_t b1[2] = { UINT8_C (17), UINT8_MAX }; verify (TYPE_MAXIMUM (uint8_t) == UINT8_MAX); verify_same_types (UINT8_MAX, (uint8_t) 0 + 0); uint16_t b2[2] = { UINT16_C (17), UINT16_MAX }; verify (TYPE_MAXIMUM (uint16_t) == UINT16_MAX); verify_same_types (UINT16_MAX, (uint16_t) 0 + 0); uint32_t b3[2] = { UINT32_C (17), UINT32_MAX }; verify (TYPE_MAXIMUM (uint32_t) == UINT32_MAX); verify_same_types (UINT32_MAX, (uint32_t) 0 + 0); #ifdef UINT64_MAX uint64_t b4[2] = { UINT64_C (17), UINT64_MAX }; verify (TYPE_MAXIMUM (uint64_t) == UINT64_MAX); verify_same_types (UINT64_MAX, (uint64_t) 0 + 0); #endif #if INT8_MIN && INT8_MAX && INT16_MIN && INT16_MAX && INT32_MIN && INT32_MAX /* ok */ #else err or; #endif #if UINT8_MAX && UINT16_MAX && UINT32_MAX /* ok */ #else err or; #endif /* 7.18.1.2. Minimum-width integer types */ /* 7.18.2.2. Limits of minimum-width integer types */ int_least8_t c1[3] = { 17, INT_LEAST8_MIN, INT_LEAST8_MAX }; verify (TYPE_MINIMUM (int_least8_t) == INT_LEAST8_MIN); verify (TYPE_MAXIMUM (int_least8_t) == INT_LEAST8_MAX); verify_same_types (INT_LEAST8_MIN, (int_least8_t) 0 + 0); verify_same_types (INT_LEAST8_MAX, (int_least8_t) 0 + 0); int_least16_t c2[3] = { 17, INT_LEAST16_MIN, INT_LEAST16_MAX }; verify (TYPE_MINIMUM (int_least16_t) == INT_LEAST16_MIN); verify (TYPE_MAXIMUM (int_least16_t) == INT_LEAST16_MAX); verify_same_types (INT_LEAST16_MIN, (int_least16_t) 0 + 0); verify_same_types (INT_LEAST16_MAX, (int_least16_t) 0 + 0); int_least32_t c3[3] = { 17, INT_LEAST32_MIN, INT_LEAST32_MAX }; verify (TYPE_MINIMUM (int_least32_t) == INT_LEAST32_MIN); verify (TYPE_MAXIMUM (int_least32_t) == INT_LEAST32_MAX); verify_same_types (INT_LEAST32_MIN, (int_least32_t) 0 + 0); verify_same_types (INT_LEAST32_MAX, (int_least32_t) 0 + 0); #ifdef INT_LEAST64_MAX int_least64_t c4[3] = { 17, INT_LEAST64_MIN, INT_LEAST64_MAX }; verify (TYPE_MINIMUM (int_least64_t) == INT_LEAST64_MIN); verify (TYPE_MAXIMUM (int_least64_t) == INT_LEAST64_MAX); verify_same_types (INT_LEAST64_MIN, (int_least64_t) 0 + 0); verify_same_types (INT_LEAST64_MAX, (int_least64_t) 0 + 0); #endif uint_least8_t d1[2] = { 17, UINT_LEAST8_MAX }; verify (TYPE_MAXIMUM (uint_least8_t) == UINT_LEAST8_MAX); verify_same_types (UINT_LEAST8_MAX, (uint_least8_t) 0 + 0); uint_least16_t d2[2] = { 17, UINT_LEAST16_MAX }; verify (TYPE_MAXIMUM (uint_least16_t) == UINT_LEAST16_MAX); verify_same_types (UINT_LEAST16_MAX, (uint_least16_t) 0 + 0); uint_least32_t d3[2] = { 17, UINT_LEAST32_MAX }; verify (TYPE_MAXIMUM (uint_least32_t) == UINT_LEAST32_MAX); verify_same_types (UINT_LEAST32_MAX, (uint_least32_t) 0 + 0); #ifdef UINT_LEAST64_MAX uint_least64_t d4[2] = { 17, UINT_LEAST64_MAX }; verify (TYPE_MAXIMUM (uint_least64_t) == UINT_LEAST64_MAX); verify_same_types (UINT_LEAST64_MAX, (uint_least64_t) 0 + 0); #endif #if INT_LEAST8_MIN && INT_LEAST8_MAX && INT_LEAST16_MIN && INT_LEAST16_MAX && INT_LEAST32_MIN && INT_LEAST32_MAX /* ok */ #else err or; #endif #if UINT_LEAST8_MAX && UINT_LEAST16_MAX && UINT_LEAST32_MAX /* ok */ #else err or; #endif /* 7.18.1.3. Fastest minimum-width integer types */ /* 7.18.2.3. Limits of fastest minimum-width integer types */ int_fast8_t e1[3] = { 17, INT_FAST8_MIN, INT_FAST8_MAX }; verify (TYPE_MINIMUM (int_fast8_t) == INT_FAST8_MIN); verify (TYPE_MAXIMUM (int_fast8_t) == INT_FAST8_MAX); verify_same_types (INT_FAST8_MIN, (int_fast8_t) 0 + 0); verify_same_types (INT_FAST8_MAX, (int_fast8_t) 0 + 0); int_fast16_t e2[3] = { 17, INT_FAST16_MIN, INT_FAST16_MAX }; verify (TYPE_MINIMUM (int_fast16_t) == INT_FAST16_MIN); verify (TYPE_MAXIMUM (int_fast16_t) == INT_FAST16_MAX); verify_same_types (INT_FAST16_MIN, (int_fast16_t) 0 + 0); verify_same_types (INT_FAST16_MAX, (int_fast16_t) 0 + 0); int_fast32_t e3[3] = { 17, INT_FAST32_MIN, INT_FAST32_MAX }; verify (TYPE_MINIMUM (int_fast32_t) == INT_FAST32_MIN); verify (TYPE_MAXIMUM (int_fast32_t) == INT_FAST32_MAX); verify_same_types (INT_FAST32_MIN, (int_fast32_t) 0 + 0); verify_same_types (INT_FAST32_MAX, (int_fast32_t) 0 + 0); #ifdef INT_FAST64_MAX int_fast64_t e4[3] = { 17, INT_FAST64_MIN, INT_FAST64_MAX }; verify (TYPE_MINIMUM (int_fast64_t) == INT_FAST64_MIN); verify (TYPE_MAXIMUM (int_fast64_t) == INT_FAST64_MAX); verify_same_types (INT_FAST64_MIN, (int_fast64_t) 0 + 0); verify_same_types (INT_FAST64_MAX, (int_fast64_t) 0 + 0); #endif uint_fast8_t f1[2] = { 17, UINT_FAST8_MAX }; verify (TYPE_MAXIMUM (uint_fast8_t) == UINT_FAST8_MAX); verify_same_types (UINT_FAST8_MAX, (uint_fast8_t) 0 + 0); uint_fast16_t f2[2] = { 17, UINT_FAST16_MAX }; verify (TYPE_MAXIMUM (uint_fast16_t) == UINT_FAST16_MAX); verify_same_types (UINT_FAST16_MAX, (uint_fast16_t) 0 + 0); uint_fast32_t f3[2] = { 17, UINT_FAST32_MAX }; verify (TYPE_MAXIMUM (uint_fast32_t) == UINT_FAST32_MAX); verify_same_types (UINT_FAST32_MAX, (uint_fast32_t) 0 + 0); #ifdef UINT_FAST64_MAX uint_fast64_t f4[2] = { 17, UINT_FAST64_MAX }; verify (TYPE_MAXIMUM (uint_fast64_t) == UINT_FAST64_MAX); verify_same_types (UINT_FAST64_MAX, (uint_fast64_t) 0 + 0); #endif #if INT_FAST8_MIN && INT_FAST8_MAX && INT_FAST16_MIN && INT_FAST16_MAX && INT_FAST32_MIN && INT_FAST32_MAX /* ok */ #else err or; #endif #if UINT_FAST8_MAX && UINT_FAST16_MAX && UINT_FAST32_MAX /* ok */ #else err or; #endif /* 7.18.1.4. Integer types capable of holding object pointers */ /* 7.18.2.4. Limits of integer types capable of holding object pointers */ #ifdef INTPTR_MAX intptr_t g[3] = { 17, INTPTR_MIN, INTPTR_MAX }; verify (sizeof (void *) <= sizeof (intptr_t)); # ifndef __CHERI_PURE_CAPABILITY__ verify (TYPE_MINIMUM (intptr_t) == INTPTR_MIN); verify (TYPE_MAXIMUM (intptr_t) == INTPTR_MAX); # endif verify_same_types (INTPTR_MIN, (intptr_t) 0 + 0); verify_same_types (INTPTR_MAX, (intptr_t) 0 + 0); #endif #ifdef UINTPTR_MAX uintptr_t h[2] = { 17, UINTPTR_MAX }; verify (sizeof (void *) <= sizeof (uintptr_t)); # ifndef __CHERI_PURE_CAPABILITY__ verify (TYPE_MAXIMUM (uintptr_t) == UINTPTR_MAX); # endif verify_same_types (UINTPTR_MAX, (uintptr_t) 0 + 0); #endif /* 7.18.1.5. Greatest-width integer types */ /* 7.18.2.5. Limits of greatest-width integer types */ intmax_t i[3] = { INTMAX_C (17), INTMAX_MIN, INTMAX_MAX }; verify (TYPE_MINIMUM (intmax_t) == INTMAX_MIN); verify (TYPE_MAXIMUM (intmax_t) == INTMAX_MAX); verify_same_types (INTMAX_MIN, (intmax_t) 0 + 0); verify_same_types (INTMAX_MAX, (intmax_t) 0 + 0); uintmax_t j[2] = { UINTMAX_C (17), UINTMAX_MAX }; verify (TYPE_MAXIMUM (uintmax_t) == UINTMAX_MAX); verify_same_types (UINTMAX_MAX, (uintmax_t) 0 + 0); /* Older Sun C and HP-UX 10.20 cc don't support 'long long' constants in the preprocessor. */ #if !((defined __SUNPRO_C && __SUNPRO_C < 0x5150) \ || (defined __hpux && !defined __GNUC__)) #if INTMAX_MIN && INTMAX_MAX && UINTMAX_MAX /* ok */ #else err or; #endif #endif /* 7.18.3. Limits of other integer types */ #include <stddef.h> verify (TYPE_MINIMUM (ptrdiff_t) == PTRDIFF_MIN); verify (TYPE_MAXIMUM (ptrdiff_t) == PTRDIFF_MAX); verify_same_types (PTRDIFF_MIN, (ptrdiff_t) 0 + 0); verify_same_types (PTRDIFF_MAX, (ptrdiff_t) 0 + 0); #if PTRDIFF_MIN && PTRDIFF_MAX /* ok */ #else err or; #endif #include <signal.h> verify (TYPE_MINIMUM (sig_atomic_t) == SIG_ATOMIC_MIN); verify (TYPE_MAXIMUM (sig_atomic_t) == SIG_ATOMIC_MAX); verify_same_types (SIG_ATOMIC_MIN, (sig_atomic_t) 0 + 0); verify_same_types (SIG_ATOMIC_MAX, (sig_atomic_t) 0 + 0); #if SIG_ATOMIC_MIN != 17 && SIG_ATOMIC_MAX /* ok */ #else err or; #endif verify (TYPE_MAXIMUM (size_t) == SIZE_MAX); verify_same_types (SIZE_MAX, (size_t) 0 + 0); #if SIZE_MAX /* ok */ #else err or; #endif #if HAVE_WCHAR_T verify (TYPE_MINIMUM (wchar_t) == WCHAR_MIN); verify (TYPE_MAXIMUM (wchar_t) == WCHAR_MAX); verify_same_types (WCHAR_MIN, (wchar_t) 0 + 0); verify_same_types (WCHAR_MAX, (wchar_t) 0 + 0); # if WCHAR_MIN != 17 && WCHAR_MAX /* ok */ # else err or; # endif #endif #if HAVE_WINT_T # include <wchar.h> verify (TYPE_MINIMUM (wint_t) == WINT_MIN); verify (TYPE_MAXIMUM (wint_t) == WINT_MAX); verify_same_types (WINT_MIN, (wint_t) 0 + 0); verify_same_types (WINT_MAX, (wint_t) 0 + 0); # if WINT_MIN != 17 && WINT_MAX /* ok */ # else err or; # endif #endif /* 7.18.4. Macros for integer constants */ verify (INT8_C (17) == 17); verify_same_types (INT8_C (17), (int_least8_t)0 + 0); verify (UINT8_C (17) == 17); verify_same_types (UINT8_C (17), (uint_least8_t)0 + 0); verify (INT16_C (17) == 17); verify_same_types (INT16_C (17), (int_least16_t)0 + 0); verify (UINT16_C (17) == 17); verify_same_types (UINT16_C (17), (uint_least16_t)0 + 0); verify (INT32_C (17) == 17); verify_same_types (INT32_C (17), (int_least32_t)0 + 0); verify (UINT32_C (17) == 17); verify_same_types (UINT32_C (17), (uint_least32_t)0 + 0); #ifdef INT64_C verify (INT64_C (17) == 17); verify_same_types (INT64_C (17), (int_least64_t)0 + 0); #endif #ifdef UINT64_C verify (UINT64_C (17) == 17); verify_same_types (UINT64_C (17), (uint_least64_t)0 + 0); #endif verify (INTMAX_C (17) == 17); verify_same_types (INTMAX_C (17), (intmax_t)0 + 0); verify (UINTMAX_C (17) == 17); verify_same_types (UINTMAX_C (17), (uintmax_t)0 + 0); /* Use _GL_VERIFY (with a fixed-length diagnostic string) rather than verify, because the latter would require forming each stringified expression, and many of these would be so long as to trigger a warning/error like this: test-stdint.c:407:1: error: string length '6980' is greater than the \ length '4095' ISO C99 compilers are required to support \ [-Werror=overlength-strings] */ #define verify_width(width, min, max) \ _GL_VERIFY ((max) >> ((width) - 1 - ((min) < 0)) == 1, \ "verify_width check", -) /* Macros specified by ISO/IEC TS 18661-1:2014. */ #ifdef INT8_MAX verify_width (INT8_WIDTH, INT8_MIN, INT8_MAX); #endif #ifdef UINT8_MAX verify_width (UINT8_WIDTH, 0, UINT8_MAX); #endif #ifdef INT16_MAX verify_width (INT16_WIDTH, INT16_MIN, INT16_MAX); #endif #ifdef UINT16_MAX verify_width (UINT16_WIDTH, 0, UINT16_MAX); #endif #ifdef INT32_MAX verify_width (INT32_WIDTH, INT32_MIN, INT32_MAX); #endif #ifdef UINT32_MAX verify_width (UINT32_WIDTH, 0, UINT32_MAX); #endif #ifdef INT64_MAX verify_width (INT64_WIDTH, INT64_MIN, INT64_MAX); #endif #ifdef UINT64_MAX verify_width (UINT64_WIDTH, 0, UINT64_MAX); #endif verify_width (INT_LEAST8_WIDTH, INT_LEAST8_MIN, INT_LEAST8_MAX); verify_width (UINT_LEAST8_WIDTH, 0, UINT_LEAST8_MAX); verify_width (INT_LEAST16_WIDTH, INT_LEAST16_MIN, INT_LEAST16_MAX); verify_width (UINT_LEAST16_WIDTH, 0, UINT_LEAST16_MAX); verify_width (INT_LEAST32_WIDTH, INT_LEAST32_MIN, INT_LEAST32_MAX); verify_width (UINT_LEAST32_WIDTH, 0, UINT_LEAST32_MAX); verify_width (INT_LEAST64_WIDTH, INT_LEAST64_MIN, INT_LEAST64_MAX); verify_width (UINT_LEAST64_WIDTH, 0, UINT_LEAST64_MAX); verify_width (INT_FAST8_WIDTH, INT_FAST8_MIN, INT_FAST8_MAX); verify_width (UINT_FAST8_WIDTH, 0, UINT_FAST8_MAX); verify_width (INT_FAST16_WIDTH, INT_FAST16_MIN, INT_FAST16_MAX); verify_width (UINT_FAST16_WIDTH, 0, UINT_FAST16_MAX); verify_width (INT_FAST32_WIDTH, INT_FAST32_MIN, INT_FAST32_MAX); verify_width (UINT_FAST32_WIDTH, 0, UINT_FAST32_MAX); verify_width (INT_FAST64_WIDTH, INT_FAST64_MIN, INT_FAST64_MAX); verify_width (UINT_FAST64_WIDTH, 0, UINT_FAST64_MAX); #ifndef __CHERI_PURE_CAPABILITY__ # ifdef INTPTR_WIDTH verify_width (INTPTR_WIDTH, INTPTR_MIN, INTPTR_MAX); # endif # ifdef UINTPTR_WIDTH verify_width (UINTPTR_WIDTH, 0, UINTPTR_MAX); # endif #endif verify_width (INTMAX_WIDTH, INTMAX_MIN, INTMAX_MAX); verify_width (UINTMAX_WIDTH, 0, UINTMAX_MAX); verify_width (PTRDIFF_WIDTH, PTRDIFF_MIN, PTRDIFF_MAX); verify_width (SIZE_WIDTH, 0, SIZE_MAX); verify_width (WCHAR_WIDTH, WCHAR_MIN, WCHAR_MAX); #ifdef WINT_MAX verify_width (WINT_WIDTH, WINT_MIN, WINT_MAX); #endif #ifdef SIG_ATOMIC_MAX verify_width (SIG_ATOMIC_WIDTH, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX); #endif int main (void) { return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-stdio.c�������������������������������������������������������0000644�0001750�0001750�00000004736�14557510510�015110� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdio.h> substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <stdio.h> /* Check that the various SEEK_* macros are defined. */ int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; /* Check that the _PRINTF_NAN_LEN_MAX macro is defined. */ int pnlm[] = { _PRINTF_NAN_LEN_MAX }; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ static_assert (sizeof NULL == sizeof (void *)); /* Check that the types are all defined. */ fpos_t t1; off_t t2; size_t t3; ssize_t t4; va_list t5; #include <string.h> #include "signed-nan.h" #include "signed-snan.h" #include "macros.h" int main (void) { { double value1; char buf[64]; value1 = positive_NaNd(); sprintf (buf, "%g", value1); ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); value1 = negative_NaNd(); sprintf (buf, "%g", value1); ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); } #if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT /* Check the value of _PRINTF_NAN_LEN_MAX. */ { double value1; memory_double value2; char buf[64]; value1 = positive_SNaNd(); sprintf (buf, "%g", value1); ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); value1 = negative_SNaNd(); sprintf (buf, "%g", value1); ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); value2.value = positive_NaNd (); #if DBL_EXPBIT0_BIT == 20 value2.word[DBL_EXPBIT0_WORD] ^= 0x54321; #endif sprintf (buf, "%g", value2.value); ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); value2.value = negative_NaNd (); #if DBL_EXPBIT0_BIT == 20 value2.word[DBL_EXPBIT0_WORD] ^= 0x54321; #endif sprintf (buf, "%g", value2.value); ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); } #endif return 0; } ����������������������������������gnuastro-0.22/bootstrapped/tests/test-stdlib.c������������������������������������������������������0000644�0001750�0001750�00000003473�14557510510�015244� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <stdlib.h> substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <stdlib.h> /* Check that EXIT_SUCCESS is 0, per POSIX. */ static int exitcode = EXIT_SUCCESS; #if EXIT_SUCCESS "oops" #endif /* Check for GNU value (not guaranteed by POSIX, but is guaranteed by gnulib). */ #if EXIT_FAILURE != 1 "oops" #endif /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ static_assert (sizeof NULL == sizeof (void *)); #if GNULIB_TEST_SYSTEM_POSIX # include "test-sys_wait.h" #else # define test_sys_wait_macros() 0 #endif int main (void) { /* POSIX:2018 says: "In the POSIX locale the value of MB_CUR_MAX shall be 1." */ /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the "C" locale. Furthermore, when you attempt to set the "C" or "POSIX" locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, that is, effectively the "C.UTF-8" locale. */ #ifndef __ANDROID__ if (MB_CUR_MAX != 1) return 1; #endif if (test_sys_wait_macros ()) return 2; return exitcode; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-strchrnul.c���������������������������������������������������0000644�0001750�0001750�00000004447�14557510510�016011� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2024 Free Software Foundation, Inc. * Written by Eric Blake and Bruno Haible * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (strchrnul, char *, (char const *, int)); #include <stdlib.h> #include "macros.h" int main (void) { size_t n = 0x100000; char *input = malloc (n + 1); ASSERT (input); input[0] = 'a'; input[1] = 'b'; memset (input + 2, 'c', 1024); memset (input + 1026, 'd', n - 1028); input[n - 2] = 'e'; input[n - 1] = 'a'; input[n] = '\0'; /* Basic behavior tests. */ ASSERT (strchrnul (input, 'a') == input); ASSERT (strchrnul (input, 'b') == input + 1); ASSERT (strchrnul (input, 'c') == input + 2); ASSERT (strchrnul (input, 'd') == input + 1026); ASSERT (strchrnul (input + 1, 'a') == input + n - 1); ASSERT (strchrnul (input + 1, 'e') == input + n - 2); ASSERT (strchrnul (input, 'f') == input + n); ASSERT (strchrnul (input, '\0') == input + n); /* Check that a very long haystack is handled quickly if the byte is found near the beginning. */ { size_t repeat = 10000; for (; repeat > 0; repeat--) { ASSERT (strchrnul (input, 'c') == input + 2); } } /* Alignment tests. */ { int i, j; for (i = 0; i < 32; i++) { for (j = 0; j < 256; j++) input[i + j] = (j + 1) & 0xff; for (j = 1; j < 256; j++) { ASSERT (strchrnul (input + i, j) == input + i + j - 1); input[i + j - 1] = (j == 1 ? 2 : 1); ASSERT (strchrnul (input + i, j) == input + i + 255); input[i + j - 1] = j; } } } free (input); return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-strerror.c����������������������������������������������������0000644�0001750�0001750�00000003710�14557510510�015637� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strerror() function. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2007. */ #include <config.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (strerror, char *, (int)); #include <errno.h> #include "macros.h" int main (void) { char *str; errno = 0; str = strerror (EACCES); ASSERT (str); ASSERT (*str); ASSERT (errno == 0); errno = 0; str = strerror (ETIMEDOUT); ASSERT (str); ASSERT (*str); ASSERT (errno == 0); errno = 0; str = strerror (EOVERFLOW); ASSERT (str); ASSERT (*str); ASSERT (errno == 0); /* POSIX requires strerror (0) to succeed. Reject use of "Unknown error", but allow "Success", "No error", or even Solaris' "Error 0" which are distinct patterns from true out-of-range strings. http://austingroupbugs.net/view.php?id=382 */ errno = 0; str = strerror (0); ASSERT (str); ASSERT (*str); ASSERT (errno == 0); ASSERT (strstr (str, "nknown") == NULL); ASSERT (strstr (str, "ndefined") == NULL); /* POSIX requires strerror to produce a non-NULL result for all inputs; as an extension, we also guarantee a non-empty result. Reporting EINVAL is optional. */ errno = 0; str = strerror (-3); ASSERT (str); ASSERT (*str); ASSERT (errno == 0 || errno == EINVAL); return 0; } ��������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-strerror_r.c��������������������������������������������������0000644�0001750�0001750�00000011464�14557510510�016165� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strerror_r() function. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (strerror_r, int, (int, char *, size_t)); #include <errno.h> #include "macros.h" int main (void) { char buf[100]; int ret; /* Test results with valid errnum and enough room. */ errno = 0; buf[0] = '\0'; ASSERT (strerror_r (EACCES, buf, sizeof buf) == 0); ASSERT (buf[0] != '\0'); ASSERT (errno == 0); ASSERT (strlen (buf) < sizeof buf); errno = 0; buf[0] = '\0'; ASSERT (strerror_r (ETIMEDOUT, buf, sizeof buf) == 0); ASSERT (buf[0] != '\0'); ASSERT (errno == 0); ASSERT (strlen (buf) < sizeof buf); errno = 0; buf[0] = '\0'; ASSERT (strerror_r (EOVERFLOW, buf, sizeof buf) == 0); ASSERT (buf[0] != '\0'); ASSERT (errno == 0); ASSERT (strlen (buf) < sizeof buf); /* POSIX requires strerror (0) to succeed. Reject use of "Unknown error", but allow "Success", "No error", or even Solaris' "Error 0" which are distinct patterns from true out-of-range strings. http://austingroupbugs.net/view.php?id=382 */ errno = 0; buf[0] = '\0'; ret = strerror_r (0, buf, sizeof buf); ASSERT (ret == 0); ASSERT (buf[0]); ASSERT (errno == 0); ASSERT (strstr (buf, "nknown") == NULL); ASSERT (strstr (buf, "ndefined") == NULL); /* Test results with out-of-range errnum and enough room. POSIX allows an empty string on success, and allows an unchanged buf on error, but these are not useful, so we guarantee contents. */ errno = 0; buf[0] = '^'; ret = strerror_r (-3, buf, sizeof buf); ASSERT (ret == 0 || ret == EINVAL); ASSERT (buf[0] != '^'); ASSERT (*buf); ASSERT (errno == 0); ASSERT (strlen (buf) < sizeof buf); /* Test results with a too small buffer. POSIX requires an error; only ERANGE for 0 and valid errors, and a choice of ERANGE or EINVAL for out-of-range values. On error, POSIX permits buf to be empty, unchanged, or unterminated, but these are not useful, so we guarantee NUL-terminated truncated contents for all but size 0. http://austingroupbugs.net/view.php?id=398. Also ensure that no out-of-bounds writes occur. */ { int errs[] = { EACCES, 0, -3, }; int j; buf[sizeof buf - 1] = '\0'; for (j = 0; j < SIZEOF (errs); j++) { int err = errs[j]; char buf2[sizeof buf] = ""; size_t len; size_t i; strerror_r (err, buf2, sizeof buf2); len = strlen (buf2); ASSERT (len < sizeof buf); for (i = 0; i <= len; i++) { memset (buf, '^', sizeof buf - 1); errno = 0; ret = strerror_r (err, buf, i); ASSERT (errno == 0); if (j == 2) ASSERT (ret == ERANGE || ret == EINVAL); else ASSERT (ret == ERANGE); if (i) { ASSERT (strncmp (buf, buf2, i - 1) == 0); ASSERT (buf[i - 1] == '\0'); } ASSERT (strspn (buf + i, "^") == sizeof buf - 1 - i); } strcpy (buf, "BADFACE"); errno = 0; ret = strerror_r (err, buf, len + 1); ASSERT (ret != ERANGE); ASSERT (errno == 0); ASSERT (strcmp (buf, buf2) == 0); } } #if GNULIB_STRERROR /* Test that strerror_r does not clobber strerror buffer. On some platforms, this test can only succeed if gnulib also replaces strerror. */ { const char *msg1; const char *msg2; const char *msg3; const char *msg4; char *str1; char *str2; char *str3; char *str4; msg1 = strerror (ENOENT); ASSERT (msg1); str1 = strdup (msg1); ASSERT (str1); msg2 = strerror (ERANGE); ASSERT (msg2); str2 = strdup (msg2); ASSERT (str2); msg3 = strerror (-4); ASSERT (msg3); str3 = strdup (msg3); ASSERT (str3); msg4 = strerror (1729576); ASSERT (msg4); str4 = strdup (msg4); ASSERT (str4); strerror_r (EACCES, buf, sizeof buf); strerror_r (-5, buf, sizeof buf); ASSERT (STREQ (msg4, str4)); free (str1); free (str2); free (str3); free (str4); } #endif return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-string.c������������������������������������������������������0000644�0001750�0001750�00000001772�14557510510�015271� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <string.h> substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <string.h> /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ static_assert (sizeof NULL == sizeof (void *)); int main (void) { return 0; } ������gnuastro-0.22/bootstrapped/tests/test-strings.c�����������������������������������������������������0000644�0001750�0001750�00000001554�14557510510�015452� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <strings.h> substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <strings.h> int main () { return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-strnlen.c�����������������������������������������������������0000644�0001750�0001750�00000003362�14557510510�015445� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2010-2024 Free Software Foundation, Inc. * Written by Eric Blake * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include "signature.h" SIGNATURE_CHECK (strnlen, size_t, (char const *, size_t)); #include <stdlib.h> #include "zerosize-ptr.h" #include "macros.h" int main (void) { size_t i; char *page_boundary = (char *) zerosize_ptr (); if (!page_boundary) { page_boundary = malloc (0x1000); ASSERT (page_boundary); page_boundary += 0x1000; } /* Basic behavior tests. */ ASSERT (strnlen ("a", 0) == 0); ASSERT (strnlen ("a", 1) == 1); ASSERT (strnlen ("a", 2) == 1); ASSERT (strnlen ("", 0x100000) == 0); /* Memory fence and alignment testing. */ for (i = 0; i < 512; i++) { char *start = page_boundary - i; size_t j = i; memset (start, 'x', i); do { if (i != j) { start[j] = 0; ASSERT (strnlen (start, i + j) == j); } ASSERT (strnlen (start, i) == j); ASSERT (strnlen (start, j) == j); } while (j--); } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-strtod.c������������������������������������������������������0000644�0001750�0001750�00000067755�14557510510�015317� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * Copyright (C) 2008-2024 Free Software Foundation, Inc. * Written by Eric Blake * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include "signature.h" SIGNATURE_CHECK (strtod, double, (char const *, char **)); #include <errno.h> #include <float.h> #include <math.h> #include <string.h> #include "isnand-nolibm.h" #include "minus-zero.h" #include "macros.h" /* Avoid requiring -lm just for fabs. */ #define FABS(d) ((d) < 0.0 ? -(d) : (d)) int main (void) { int status = 0; /* Subject sequence empty or invalid. */ { const char input[] = ""; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " "; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " ."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " .e0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); /* IRIX 6.5, OSF/1 5.1 */ ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " +.e-0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); /* IRIX 6.5, OSF/1 5.1 */ ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " in"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } { const char input[] = " na"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); } /* Simple floating point values. */ { const char input[] = "1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = ".5"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.5); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = " 1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == -1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "1e0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "1e+0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "1e-0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 4); ASSERT (errno == 0); } { const char input[] = "1e1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 10.0); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "5e-1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.5); ASSERT (ptr == input + 4); ASSERT (errno == 0); } /* Zero. */ { const char input[] = "0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = ".0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "0e0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "0e+9999999"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "0e-9999999"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 10); ASSERT (errno == 0); } { const char input[] = "-0"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!!signbit (result) == !!signbit (minus_zerod)); /* IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 2); ASSERT (errno == 0); } /* Suffixes. */ { const char input[] = "1f"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1.f"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "1e"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1e+"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1e-"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1E 2"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* HP-UX 11.11, IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 1); /* HP-UX 11.11, IRIX 6.5 */ ASSERT (errno == 0); } { const char input[] = "0x"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "00x1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "-0x"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!!signbit (result) == !!signbit (minus_zerod)); /* Mac OS X 10.3, FreeBSD 6.2, IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 2); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0xg"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0xp"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0XP"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0x."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0xp+"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0xp+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "0x.p+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input + 1); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, AIX 7.1 */ ASSERT (errno == 0); } { const char input[] = "1p+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } { const char input[] = "1P+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 1); ASSERT (errno == 0); } /* Overflow/underflow. */ { const char input[] = "1E1000000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); ASSERT (ptr == input + 9); /* OSF/1 5.1 */ ASSERT (errno == ERANGE); } { const char input[] = "-1E1000000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == -HUGE_VAL); ASSERT (ptr == input + 10); ASSERT (errno == ERANGE); } { const char input[] = "1E-100000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (0.0 <= result && result <= DBL_MIN); ASSERT (!signbit (result)); ASSERT (ptr == input + 9); ASSERT (errno == ERANGE); } { const char input[] = "-1E-100000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (-DBL_MIN <= result && result <= 0.0); #if 0 /* FIXME - this is glibc bug 5995; POSIX allows returning positive 0 on negative underflow, even though quality of implementation demands preserving the sign. Disable this test until fixed glibc is more prevalent. */ ASSERT (!!signbit (result) == !!signbit (minus_zerod)); /* glibc-2.3.6, mingw */ #endif ASSERT (ptr == input + 10); ASSERT (errno == ERANGE); } { const char input[] = "1E 1000000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* HP-UX 11.11, IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + 1); /* HP-UX 11.11, IRIX 6.5 */ ASSERT (errno == 0); } { const char input[] = "0x1P 1000000"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } /* Infinity. */ { const char input[] = "iNf"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 3); /* OpenBSD 4.0, HP-UX 11.00, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw */ ASSERT (errno == 0); /* HP-UX 11.11, OSF/1 4.0 */ } { const char input[] = "-InF"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == -HUGE_VAL); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 4); /* OpenBSD 4.0, HP-UX 11.00, IRIX 6.5, OSF/1 4.0, Solaris 9, mingw */ ASSERT (errno == 0); /* HP-UX 11.11, OSF/1 4.0 */ } { const char input[] = "infinite"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 3); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); /* OSF/1 4.0 */ } { const char input[] = "infinitY"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 8); /* OpenBSD 4.0, HP-UX 11.00, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw */ ASSERT (errno == 0); /* HP-UX 11.11, OSF/1 4.0 */ } { const char input[] = "infinitY."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 8); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); /* OSF/1 4.0 */ } /* NaN. Some processors set the sign bit of the default NaN, so all we check is that using a sign changes the result. */ { const char input[] = "-nan"; char *ptr1; char *ptr2; double result1; double result2; errno = 0; result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result1)); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (isnand (result2)); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ ASSERT (!!signbit (result1) != !!signbit (result2)); /* glibc-2.3.6, IRIX 6.5, OSF/1 5.1, mingw */ # endif ASSERT (ptr1 == input + 4); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ ASSERT (ptr2 == input + 4); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ ASSERT (errno == 0); /* HP-UX 11.11 */ #else ASSERT (result1 == 0.0); ASSERT (result2 == 0.0); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } { const char input[] = "+nan("; char *ptr1; char *ptr2; double result1; double result2; errno = 0; result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (!!signbit (result1) == !!signbit (result2)); ASSERT (ptr1 == input + 4); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ ASSERT (ptr2 == input + 4); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ ASSERT (errno == 0); #else ASSERT (result1 == 0.0); ASSERT (result2 == 0.0); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } { const char input[] = "-nan()"; char *ptr1; char *ptr2; double result1; double result2; errno = 0; result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ ASSERT (!!signbit (result1) != !!signbit (result2)); /* glibc-2.3.6, IRIX 6.5, OSF/1 5.1, mingw */ # endif ASSERT (ptr1 == input + 6); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr2 == input + 6); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); #else ASSERT (result1 == 0.0); ASSERT (result2 == 0.0); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } { const char input[] = " nan()."; char *ptr; double result; errno = 0; result = strtod (input, &ptr); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + 6); /* glibc-2.3.6, Mac OS X 10.3, FreeBSD 6.2, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); #else ASSERT (result == 0.0); ASSERT (!signbit (result)); ASSERT (ptr == input); ASSERT (errno == 0 || errno == EINVAL); #endif } { /* The behavior of nan(0) is implementation-defined, but all implementations we know of which handle optional n-char-sequences handle nan(0) the same as nan(). */ const char input[] = "-nan(0)."; char *ptr1; char *ptr2; double result1; double result2; errno = 0; result1 = strtod (input, &ptr1); result2 = strtod (input + 1, &ptr2); #if 1 /* All known CPUs support NaNs. */ ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ # if 0 /* Sign bits of NaN is a portability sticking point, not worth worrying about. */ ASSERT (!!signbit (result1) != !!signbit (result2)); /* glibc-2.3.6, IRIX 6.5, OSF/1 5.1, mingw */ # endif ASSERT (ptr1 == input + 7); /* glibc-2.3.6, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr2 == input + 7); /* glibc-2.3.6, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (errno == 0); #else ASSERT (result1 == 0.0); ASSERT (result2 == 0.0); ASSERT (!signbit (result1)); ASSERT (!signbit (result2)); ASSERT (ptr1 == input); ASSERT (ptr2 == input + 1); ASSERT (errno == 0 || errno == EINVAL); #endif } /* Hex. */ { const char input[] = "0xa"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 10.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0XA"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 10.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p+"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1P+"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 2.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 6); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0X1P+1"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 2.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 6); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p+1a"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 2.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 6); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } { const char input[] = "0x1p 2"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 7.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ ASSERT (errno == 0); } /* Large buffers. */ { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; memset (input, '\t', m - 1); input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + m); ASSERT (errno == 0); } free (input); } { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; memset (input, '0', m - 1); input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + m); ASSERT (errno == 0); } free (input); } #if 0 /* Newlib has an artificial limit of 20000 for the exponent. TODO - gnulib should fix this. */ { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; input[0] = '.'; memset (input + 1, '0', m - 10); input[m - 9] = '1'; input[m - 8] = 'e'; input[m - 7] = '+'; input[m - 6] = '9'; input[m - 5] = '9'; input[m - 4] = '9'; input[m - 3] = '9'; input[m - 2] = '9'; input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* Mac OS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + m); /* OSF/1 5.1 */ ASSERT (errno == 0); /* Mac OS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ } free (input); } { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; input[0] = '1'; memset (input + 1, '0', m - 9); input[m - 8] = 'e'; input[m - 7] = '-'; input[m - 6] = '9'; input[m - 5] = '9'; input[m - 4] = '9'; input[m - 3] = '9'; input[m - 2] = '9'; input[m - 1] = '1'; input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); /* Mac OS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ ASSERT (ptr == input + m); ASSERT (errno == 0); /* Mac OS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ } free (input); } #endif { size_t m = 1000000; char *input = malloc (m + 1); if (input) { char *ptr; double result; input[0] = '-'; input[1] = '0'; input[2] = 'e'; input[3] = '1'; memset (input + 4, '0', m - 3); input[m] = '\0'; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.0); ASSERT (!!signbit (result) == !!signbit (minus_zerod)); /* IRIX 6.5, OSF/1 4.0 */ ASSERT (ptr == input + m); ASSERT (errno == 0); } free (input); } /* Rounding. */ /* TODO - is it worth some tests of rounding for typical IEEE corner cases, such as .5 ULP rounding up to the smallest denormal and not causing underflow, or DBL_MIN - .5 ULP not causing an infinite loop? */ return status; } �������������������gnuastro-0.22/bootstrapped/tests/test-strtod1.c�����������������������������������������������������0000644�0001750�0001750�00000005235�14557510510�015361� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of strtod() in a French locale. Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <errno.h> #include <locale.h> #include "macros.h" int main (int argc, char *argv[]) { /* Try to set the locale by implicitly looking at the LC_ALL environment variable. configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; { const char input[] = "1,"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.0); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = ",5"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 0.5); ASSERT (ptr == input + 2); ASSERT (errno == 0); } { const char input[] = "1,5"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result == 1.5); ASSERT (ptr == input + 3); ASSERT (errno == 0); } { const char input[] = "1.5"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); /* On AIX 7.2, in the French locale, '.' is recognized as an alternate radix character. */ ASSERT ((ptr == input + 1 && result == 1.0) || (ptr == input + 3 && result == 1.5)); ASSERT (errno == 0); } { const char input[] = "123.456,789"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); /* On AIX 7.2, in the French locale, '.' is recognized as an alternate radix character. */ ASSERT ((ptr == input + 3 && result == 123.0) || (ptr == input + 7 && result > 123.45 && result < 123.46)); ASSERT (errno == 0); } { const char input[] = "123,456.789"; char *ptr; double result; errno = 0; result = strtod (input, &ptr); ASSERT (result > 123.45 && result < 123.46); ASSERT (ptr == input + 7); ASSERT (errno == 0); } return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-symlink.c�����������������������������������������������������0000644�0001750�0001750�00000002376�14557510510�015452� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of symlink. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (symlink, int, (char const *, char const *)); #include <fcntl.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include "ignore-value.h" #include "macros.h" #define BASE "test-symlink.t" #include "test-symlink.h" int main (void) { /* Remove any leftovers from a previous partial run. */ ignore_value (system ("rm -rf " BASE "*")); return test_symlink (symlink, true); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-sys_ioctl.c���������������������������������������������������0000644�0001750�0001750�00000001551�14557510510�015766� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/ioctl.h> substitute. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/ioctl.h> int main (void) { return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-sys_select.c��������������������������������������������������0000644�0001750�0001750�00000003362�14557510510�016135� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/select.h> substitute. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <sys/select.h> /* Check that the 'struct timeval' type is defined. */ struct timeval a; /* Check that a.tv_sec is wide enough to hold a time_t, ignoring signedness issues. */ typedef int verify_tv_sec_type[sizeof (time_t) <= sizeof (a.tv_sec) ? 1 : -1]; /* Check that sigset_t is defined. */ sigset_t t2; #include "signature.h" /* The following may be macros without underlying functions, so only check signature if they are not macros. */ #ifndef FD_CLR SIGNATURE_CHECK (FD_CLR, void, (int, fd_set *)); #endif #ifndef FD_ISSET SIGNATURE_CHECK (FD_ISSET, void, (int, fd_set *)); #endif #ifndef FD_SET SIGNATURE_CHECK (FD_SET, int, (int, fd_set *)); #endif #ifndef FD_ZERO SIGNATURE_CHECK (FD_ZERO, void, (fd_set *)); #endif int main (void) { /* Check that FD_ZERO can be used. This should not yield a warning such as "warning: implicit declaration of function 'memset'". */ fd_set fds; FD_ZERO (&fds); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-sys_socket.c��������������������������������������������������0000644�0001750�0001750�00000003301�14557510510�016137� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/socket.h> substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <sys/socket.h> #if HAVE_SHUTDOWN /* Check some integer constant expressions. */ int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR }; #endif /* Check that the 'socklen_t' type is defined. */ socklen_t t1; /* Check that the 'size_t' and 'ssize_t' types are defined. */ size_t t2; ssize_t t3; /* Check that 'struct iovec' is defined. */ struct iovec io; /* Check that a minimal set of 'struct msghdr' is defined. */ struct msghdr msg; #include <errno.h> int main (void) { struct sockaddr_storage x; sa_family_t i; /* Check some errno values. */ switch (ENOTSOCK) { case ENOTSOCK: case EADDRINUSE: case ENETRESET: case ECONNABORTED: case ECONNRESET: case ENOTCONN: case ESHUTDOWN: break; } x.ss_family = 42; i = 42; msg.msg_iov = &io; return (x.ss_family - i + msg.msg_namelen + msg.msg_iov->iov_len + msg.msg_iovlen); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-sys_stat.c����������������������������������������������������0000644�0001750�0001750�00000020140�14557510510�015622� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/stat.h> substitute. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <sys/stat.h> /* Check the existence of some macros. */ int a[] = { S_IFMT, #ifdef S_IFBLK /* missing on MSVC */ S_IFBLK, #endif S_IFCHR, S_IFDIR, S_IFIFO, S_IFREG, #ifdef S_IFLNK /* missing on native Windows and DJGPP */ S_IFLNK, #endif #ifdef S_IFSOCK /* missing on native Windows and DJGPP */ S_IFSOCK, #endif S_IRWXU, S_IRUSR, S_IWUSR, S_IXUSR, S_IRWXG, S_IRGRP, S_IWGRP, S_IXGRP, S_IRWXO, S_IROTH, S_IWOTH, S_IXOTH, S_ISUID, S_ISGID, S_ISVTX, S_ISBLK (S_IFREG), S_ISCHR (S_IFREG), S_ISDIR (S_IFREG), S_ISFIFO (S_IFREG), S_ISREG (S_IFREG), S_ISLNK (S_IFREG), S_ISSOCK (S_IFREG), S_ISDOOR (S_IFREG), S_ISMPB (S_IFREG), S_ISMPX (S_IFREG), S_ISNAM (S_IFREG), S_ISNWK (S_IFREG), S_ISPORT (S_IFREG), S_ISCTG (S_IFREG), S_ISOFD (S_IFREG), S_ISOFL (S_IFREG), S_ISWHT (S_IFREG) }; /* Sanity checks. */ static_assert (S_IRWXU == (S_IRUSR | S_IWUSR | S_IXUSR)); static_assert (S_IRWXG == (S_IRGRP | S_IWGRP | S_IXGRP)); static_assert (S_IRWXO == (S_IROTH | S_IWOTH | S_IXOTH)); #ifdef S_IFBLK static_assert (S_ISBLK (S_IFBLK)); #endif static_assert (!S_ISBLK (S_IFCHR)); static_assert (!S_ISBLK (S_IFDIR)); static_assert (!S_ISBLK (S_IFIFO)); static_assert (!S_ISBLK (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISBLK (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISBLK (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISCHR (S_IFBLK)); #endif static_assert (S_ISCHR (S_IFCHR)); static_assert (!S_ISCHR (S_IFDIR)); static_assert (!S_ISCHR (S_IFIFO)); static_assert (!S_ISCHR (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISCHR (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISCHR (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISDIR (S_IFBLK)); #endif static_assert (!S_ISDIR (S_IFCHR)); static_assert (S_ISDIR (S_IFDIR)); static_assert (!S_ISDIR (S_IFIFO)); static_assert (!S_ISDIR (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISDIR (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISDIR (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISFIFO (S_IFBLK)); #endif static_assert (!S_ISFIFO (S_IFCHR)); static_assert (!S_ISFIFO (S_IFDIR)); static_assert (S_ISFIFO (S_IFIFO)); static_assert (!S_ISFIFO (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISFIFO (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISFIFO (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISREG (S_IFBLK)); #endif static_assert (!S_ISREG (S_IFCHR)); static_assert (!S_ISREG (S_IFDIR)); static_assert (!S_ISREG (S_IFIFO)); static_assert (S_ISREG (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISREG (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISREG (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISLNK (S_IFBLK)); #endif static_assert (!S_ISLNK (S_IFCHR)); static_assert (!S_ISLNK (S_IFDIR)); static_assert (!S_ISLNK (S_IFIFO)); static_assert (!S_ISLNK (S_IFREG)); #ifdef S_IFLNK static_assert (S_ISLNK (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISLNK (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISSOCK (S_IFBLK)); #endif static_assert (!S_ISSOCK (S_IFCHR)); static_assert (!S_ISSOCK (S_IFDIR)); static_assert (!S_ISSOCK (S_IFIFO)); static_assert (!S_ISSOCK (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISSOCK (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (S_ISSOCK (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISDOOR (S_IFBLK)); #endif static_assert (!S_ISDOOR (S_IFCHR)); static_assert (!S_ISDOOR (S_IFDIR)); static_assert (!S_ISDOOR (S_IFIFO)); static_assert (!S_ISDOOR (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISDOOR (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISDOOR (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISMPB (S_IFBLK)); #endif static_assert (!S_ISMPB (S_IFCHR)); static_assert (!S_ISMPB (S_IFDIR)); static_assert (!S_ISMPB (S_IFIFO)); static_assert (!S_ISMPB (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISMPB (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISMPB (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISMPX (S_IFBLK)); #endif static_assert (!S_ISMPX (S_IFCHR)); static_assert (!S_ISMPX (S_IFDIR)); static_assert (!S_ISMPX (S_IFIFO)); static_assert (!S_ISMPX (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISMPX (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISMPX (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISNAM (S_IFBLK)); #endif static_assert (!S_ISNAM (S_IFCHR)); static_assert (!S_ISNAM (S_IFDIR)); static_assert (!S_ISNAM (S_IFIFO)); static_assert (!S_ISNAM (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISNAM (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISNAM (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISNWK (S_IFBLK)); #endif static_assert (!S_ISNWK (S_IFCHR)); static_assert (!S_ISNWK (S_IFDIR)); static_assert (!S_ISNWK (S_IFIFO)); static_assert (!S_ISNWK (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISNWK (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISNWK (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISPORT (S_IFBLK)); #endif static_assert (!S_ISPORT (S_IFCHR)); static_assert (!S_ISPORT (S_IFDIR)); static_assert (!S_ISPORT (S_IFIFO)); static_assert (!S_ISPORT (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISPORT (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISPORT (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISCTG (S_IFBLK)); #endif static_assert (!S_ISCTG (S_IFCHR)); static_assert (!S_ISCTG (S_IFDIR)); static_assert (!S_ISCTG (S_IFIFO)); static_assert (!S_ISCTG (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISCTG (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISCTG (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISOFD (S_IFBLK)); #endif static_assert (!S_ISOFD (S_IFCHR)); static_assert (!S_ISOFD (S_IFDIR)); static_assert (!S_ISOFD (S_IFIFO)); static_assert (!S_ISOFD (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISOFD (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISOFD (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISOFL (S_IFBLK)); #endif static_assert (!S_ISOFL (S_IFCHR)); static_assert (!S_ISOFL (S_IFDIR)); static_assert (!S_ISOFL (S_IFIFO)); static_assert (!S_ISOFL (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISOFL (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISOFL (S_IFSOCK)); #endif #ifdef S_IFBLK static_assert (!S_ISWHT (S_IFBLK)); #endif static_assert (!S_ISWHT (S_IFCHR)); static_assert (!S_ISWHT (S_IFDIR)); static_assert (!S_ISWHT (S_IFIFO)); static_assert (!S_ISWHT (S_IFREG)); #ifdef S_IFLNK static_assert (!S_ISWHT (S_IFLNK)); #endif #ifdef S_IFSOCK static_assert (!S_ISWHT (S_IFSOCK)); #endif /* POSIX 2008 requires traditional encoding of permission constants. */ static_assert (S_IRWXU == 00700); static_assert (S_IRUSR == 00400); static_assert (S_IWUSR == 00200); static_assert (S_IXUSR == 00100); static_assert (S_IRWXG == 00070); static_assert (S_IRGRP == 00040); static_assert (S_IWGRP == 00020); static_assert (S_IXGRP == 00010); static_assert (S_IRWXO == 00007); static_assert (S_IROTH == 00004); static_assert (S_IWOTH == 00002); static_assert (S_IXOTH == 00001); static_assert (S_ISUID == 04000); static_assert (S_ISGID == 02000); static_assert (S_ISVTX == 01000); #if ((0 <= UTIME_NOW && UTIME_NOW < 1000000000) \ || (0 <= UTIME_OMIT && UTIME_OMIT < 1000000000) \ || UTIME_NOW == UTIME_OMIT) invalid UTIME macros #endif /* Check the existence of some types. */ nlink_t t1; off_t t2; mode_t t3; struct timespec st; int main (void) { return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-sys_time.c����������������������������������������������������0000644�0001750�0001750�00000002150�14557510510�015606� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/time.h> substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <sys/time.h> /* Check that the 'struct timeval' type is defined. */ struct timeval a; /* Check that a.tv_sec is wide enough to hold a time_t, ignoring signedness issues. */ typedef int verify_tv_sec_type[sizeof (time_t) <= sizeof (a.tv_sec) ? 1 : -1]; int main (void) { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-sys_types.c���������������������������������������������������0000644�0001750�0001750�00000001722�14557510510�016020� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/types.h> substitute. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2011. */ #include <config.h> #include <sys/types.h> /* Check that the types are all defined. */ pid_t t1; size_t t2; ssize_t t3; off_t t4; mode_t t5; int main (void) { return 0; } ����������������������������������������������gnuastro-0.22/bootstrapped/tests/test-sys_uio.c�����������������������������������������������������0000644�0001750�0001750�00000001736�14557510510�015455� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/uio.h> substitute. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <eblake@redhat.com>, 2011. */ #include <config.h> #include <sys/uio.h> /* Check that necessary types are defined. */ size_t a; ssize_t b; struct iovec c; int main (void) { return a + b + !!c.iov_base + c.iov_len; } ����������������������������������gnuastro-0.22/bootstrapped/tests/test-sys_wait.c����������������������������������������������������0000644�0001750�0001750�00000002257�14557510510�015624� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sys/wait.h> substitute. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <sys/wait.h> /* Check for existence of required types. */ static pid_t a; #include "test-sys_wait.h" int main (void) { if (test_sys_wait_macros ()) return 1; #if 0 switch (WCONTINUED) { /* Gnulib doesn't guarantee these, yet. */ case WCONTINUED: case WEXITED: case WNOWAIT: case WSTOPPED: break; } #endif return a ? 1 : 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-sysexits.c����������������������������������������������������0000644�0001750�0001750�00000002552�14557510510�015653� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <sysexits.h> substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <sysexits.h> int exitcode; int main () { /* Check that all EX_* symbols are defined to integer constant expressions with mutually different values. */ switch (exitcode) { case EX_OK: case EX_USAGE: case EX_DATAERR: case EX_NOINPUT: case EX_NOUSER: case EX_NOHOST: case EX_UNAVAILABLE: case EX_SOFTWARE: case EX_OSERR: case EX_OSFILE: case EX_CANTCREAT: case EX_IOERR: case EX_TEMPFAIL: case EX_PROTOCOL: case EX_NOPERM: case EX_CONFIG: break; } return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-thread_create.c�����������������������������������������������0000644�0001750�0001750�00000004147�14557510510�016554� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of gl_thread_create () macro. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2011. */ #include <config.h> #include "glthread/thread.h" #include <stdio.h> #include <string.h> #include "macros.h" static gl_thread_t main_thread_before; static gl_thread_t main_thread_after; static gl_thread_t worker_thread; static int dummy; static volatile int work_done; static void * worker_thread_func (_GL_UNUSED void *arg) { work_done = 1; return &dummy; } int main () { main_thread_before = gl_thread_self (); if (glthread_create (&worker_thread, worker_thread_func, NULL) == 0) { void *ret; /* Check that gl_thread_self () has the same value before than after the first call to gl_thread_create (). */ main_thread_after = gl_thread_self (); ASSERT (memcmp (&main_thread_before, &main_thread_after, sizeof (gl_thread_t)) == 0); gl_thread_join (worker_thread, &ret); /* Check the return value of the thread. */ ASSERT (ret == &dummy); /* Check that worker_thread_func () has finished executing. */ ASSERT (work_done); return 0; } else { #if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS fputs ("glthread_create failed\n", stderr); return 1; #else fputs ("Skipping test: multithreading not enabled\n", stderr); return 77; #endif } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-thread_self.c�������������������������������������������������0000644�0001750�0001750�00000002446�14557510510�016242� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of gl_thread_self () macro. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2011. */ #include <config.h> #include "glthread/thread.h" gl_thread_t main_thread; int main () { /* Check that gl_thread_self () can be used with just $(LIBTHREAD), not $(LIBMULTITHREAD), i.e. in libraries that are multithread-safe but don't create threads themselves. */ /* This is not the case on AIX with --enable-threads=isoc+posix, because in this case, $(LIBTHREAD) is empty whereas $(LIBMULTITHREAD) is '-lpthread'. */ #if !defined _AIX main_thread = gl_thread_self (); #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-time.c��������������������������������������������������������0000644�0001750�0001750�00000002643�14557510510�014717� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of time() function. Copyright (C) 2023-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible. */ #include <config.h> #include <time.h> #include "signature.h" SIGNATURE_CHECK (time, time_t, (time_t *)); #include <sys/time.h> #include "macros.h" int main (void) { /* Check consistency of time() with gettimeofday().tv_sec. */ struct timeval tv1; struct timeval tv2; time_t tt3; /* Wait until gettimeofday() reports an increase in tv_sec. */ ASSERT (gettimeofday (&tv1, NULL) == 0); do ASSERT (gettimeofday (&tv2, NULL) == 0); while (tv2.tv_sec == tv1.tv_sec); /* We are now at the beginning of a second. Test whether time() reports the new second or the previous one. */ tt3 = time (NULL); ASSERT (tt3 >= tv2.tv_sec); return 0; } ���������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-time-h.c������������������������������������������������������0000644�0001750�0001750�00000002523�14557510510�015141� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <time.h> substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <time.h> /* Check that the types are all defined. */ struct timespec t1; #if 0 /* POSIX:2008 does not require pid_t in <time.h> unconditionally, and indeed it's missing on Mac OS X 10.5, FreeBSD 6.4, OpenBSD 4.9, mingw. */ pid_t t2; #endif /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ static_assert (sizeof NULL == sizeof (void *)); /* Check that TIME_UTC is defined and a positive integer. */ int t3 = TIME_UTC; static_assert (TIME_UTC > 0); int main (void) { return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-uchar.c�������������������������������������������������������0000644�0001750�0001750�00000003310�14557510510�015053� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <uchar.h> substitute. Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> #include <uchar.h> /* Check that the types are defined. */ mbstate_t a = { 0 }; size_t b = 5; char8_t c = 'x'; char16_t d = 'y'; char32_t e = 'z'; /* Check that char8_t, char16_t, and char32_t are unsigned types. */ static_assert ((char8_t)(-1) >= 0); static_assert ((char16_t)(-1) >= 0); #if !defined __HP_cc static_assert ((char32_t)(-1) >= 0); #endif /* Check that char8_t is at least 8 bits wide. */ static_assert ((char8_t)0xFF != (char8_t)0x7F); /* Check that char16_t is at least 16 bits wide. */ static_assert ((char16_t)0xFFFF != (char16_t)0x7FFF); /* Check that char32_t is at least 31 bits wide. */ static_assert ((char32_t)0x7FFFFFFF != (char32_t)0x3FFFFFFF); /* Check that _GL_SMALL_WCHAR_T is correctly defined. */ #if _GL_SMALL_WCHAR_T static_assert (sizeof (wchar_t) < sizeof (char32_t)); #else static_assert (sizeof (wchar_t) == sizeof (char32_t)); #endif int main (void) { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-unistd.c������������������������������������������������������0000644�0001750�0001750�00000003032�14557510510�015260� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <unistd.h> substitute. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <unistd.h> /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ static_assert (sizeof NULL == sizeof (void *)); /* Check that the various SEEK_* macros are defined. */ int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; /* Check that the various *_FILENO macros are defined. */ #if ! (defined STDIN_FILENO \ && (STDIN_FILENO + STDOUT_FILENO + STDERR_FILENO == 3)) missing or broken *_FILENO macros #endif /* Check that the types are all defined. */ size_t t1; ssize_t t2; #ifdef TODO /* Not implemented in gnulib yet */ uid_t t3; gid_t t4; #endif off_t t5; pid_t t6; #ifdef TODO useconds_t t7; intptr_t t8; #endif int main (void) { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-unsetenv.c����������������������������������������������������0000644�0001750�0001750�00000003502�14557510510�015623� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of unsetenv. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <stdlib.h> #include "signature.h" SIGNATURE_CHECK (unsetenv, int, (char const *)); #include <errno.h> #include <string.h> #include <unistd.h> #include "macros.h" int main (void) { /* Static to pacify gcc -Wanalyzer-putenv-of-auto-var. */ static char entry[] = "b=2"; /* Test removal when multiple entries present. */ ASSERT (putenv ((char *) "a=1") == 0); ASSERT (putenv (entry) == 0); entry[0] = 'a'; /* Unspecified what getenv("a") would be at this point. */ ASSERT (unsetenv ("a") == 0); /* Both entries will be removed. */ ASSERT (getenv ("a") == NULL); ASSERT (unsetenv ("a") == 0); /* Required to fail with EINVAL. */ errno = 0; ASSERT (unsetenv ("") == -1); ASSERT (errno == EINVAL); errno = 0; ASSERT (unsetenv ("a=b") == -1); ASSERT (errno == EINVAL); #if 0 /* glibc and gnulib's implementation guarantee this, but POSIX no longer requires it: http://austingroupbugs.net/view.php?id=185 */ errno = 0; ASSERT (unsetenv (NULL) == -1); ASSERT (errno == EINVAL); #endif return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-usleep.c������������������������������������������������������0000644�0001750�0001750�00000002112�14557510510�015245� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of usleep() function. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #include <config.h> #include <unistd.h> #include "signature.h" SIGNATURE_CHECK (usleep, int, (useconds_t)); #include <time.h> #include "macros.h" int main (void) { time_t start = time (NULL); ASSERT (usleep (1000000) == 0); ASSERT (start < time (NULL)); ASSERT (usleep (0) == 0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-vasnprintf.c��������������������������������������������������0000644�0001750�0001750�00000006611�14557510510�016152� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of vasnprintf() and asnprintf() functions. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include "vasnprintf.h" #include <stdarg.h> #include <stdlib.h> #include <string.h> #include "macros.h" static void test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) { char buf[8]; int size; for (size = 0; size <= 8; size++) { size_t length = size; char *result = my_asnprintf (NULL, &length, "%d", 12345); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); ASSERT (length == 5); free (result); } for (size = 0; size <= 8; size++) { size_t length; char *result; memcpy (buf, "DEADBEEF", 8); length = size; result = my_asnprintf (buf, &length, "%d", 12345); ASSERT (result != NULL); ASSERT (strcmp (result, "12345") == 0); ASSERT (length == 5); if (size < 5 + 1) ASSERT (result != buf); ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); if (result != buf) free (result); } /* Note: This test assumes IEEE 754 representation of 'double' floats. */ for (size = 0; size <= 8; size++) { size_t length; char *result; memcpy (buf, "DEADBEEF", 8); length = size; result = my_asnprintf (buf, &length, "%2.0f", 1.6314159265358979e+125); ASSERT (result != NULL); /* The exact result and the result on glibc systems is 163141592653589790215729350939528493057529598899734151772468186268423257777068536614838678161083520756952076273094236944990208 On Cygwin, the result is 163141592653589790215729350939528493057529600000000000000000000000000000000000000000000000000000000000000000000000000000000000 On HP-UX 11.31 / hppa and IRIX 6.5, the result is 163141592653589790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 */ ASSERT (strlen (result) == 126); ASSERT (memcmp (result, "163141592653589790", 18) == 0); ASSERT (length == 126); if (size < 126 + 1) ASSERT (result != buf); ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); if (result != buf) free (result); } } static char * my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; char *ret; va_start (args, format); ret = vasnprintf (resultbuf, lengthp, format, args); va_end (args); return ret; } static void test_vasnprintf () { test_function (my_asnprintf); } static void test_asnprintf () { test_function (asnprintf); } int main () { test_vasnprintf (); test_asnprintf (); return 0; } �����������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-verify.c������������������������������������������������������0000644�0001750�0001750�00000006166�14557510510�015271� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the "verify" module. Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible. */ #include <config.h> #include "verify.h" #ifndef EXP_FAIL # define EXP_FAIL 0 #endif /* ======================= Test verify, verify_expr ======================= */ int gx; enum { A, B, C }; #if EXP_FAIL == 1 verify (gx >= 0); /* should give ERROR: non-constant expression */ #endif verify (C == 2); /* should be ok */ #if EXP_FAIL == 2 verify (1 + 1 == 3); /* should give ERROR */ #endif verify (1 == 1); verify (1 == 1); /* should be ok */ enum { item = verify_expr (1 == 1, 10 * 0 + 17) /* should be ok */ }; static int function (int n) { #if EXP_FAIL == 3 verify (n >= 0); /* should give ERROR: non-constant expression */ #endif verify (C == 2); /* should be ok */ #if EXP_FAIL == 4 verify (1 + 1 == 3); /* should give ERROR */ #endif verify (1 == 1); verify (1 == 1); /* should be ok */ if (n) return ((void) verify_expr (1 == 1, 1), verify_expr (1 == 1, 8)); /* should be ok */ #if EXP_FAIL == 5 return verify_expr (1 == 2, 5); /* should give ERROR */ #endif return 0; } /* ============================== Test assume ============================== */ static int f (int a) { return a; } typedef struct { unsigned int context : 4; unsigned int halt : 1; } state; void test_assume_expressions (state *s); int test_assume_optimization (int x); _Noreturn void test_assume_noreturn (void); void test_assume_expressions (state *s) { /* Check that 'assume' accepts a function call, even of a non-const function. */ assume (f (1)); /* Check that 'assume' accepts a bit-field expression. */ assume (s->halt); } int test_assume_optimization (int x) { /* Check that the compiler uses 'assume' for optimization. This function, when compiled with optimization, should have code equivalent to return x + 3; Use 'objdump --disassemble test-verify.o' to verify this. */ assume (x >= 4); return (x > 1 ? x + 3 : 2 * x + 10); } _Noreturn void test_assume_noreturn (void) { /* Check that the compiler's data-flow analysis recognizes 'assume (0)'. This function should not elicit a warning. */ assume (0); } /* ============================== Main ===================================== */ int main (void) { state s = { 0, 1 }; test_assume_expressions (&s); test_assume_optimization (5); return !(function (0) == 0 && function (1) == 8); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-verify-try.c��������������������������������������������������0000644�0001750�0001750�00000001620�14557510510�016073� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the "verify" module. Copyright (C) 2017-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* This is a separate source file, so that the execution of test-verify.sh does not interfere with the building of the 'test-verify' program. */ #include "test-verify.c" ����������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-vsnprintf.c���������������������������������������������������0000644�0001750�0001750�00000004305�14557510510�016007� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of vsnprintf() function. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <stdio.h> #include "signature.h" SIGNATURE_CHECK (vsnprintf, int, (char *, size_t, char const *, va_list)); #include <stdarg.h> #include <string.h> #include "macros.h" static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } int main (int argc, char *argv[]) { char buf[8]; int size; int retval; retval = my_snprintf (NULL, 0, "%d", 12345); ASSERT (retval == 5); for (size = 0; size <= 8; size++) { memcpy (buf, "DEADBEEF", 8); retval = my_snprintf (buf, size, "%d", 12345); ASSERT (retval == 5); if (size < 6) { if (size > 0) { ASSERT (memcmp (buf, "12345", size - 1) == 0); ASSERT (buf[size - 1] == '\0' || buf[size - 1] == '0' + size); } #if !CHECK_VSNPRINTF_POSIX if (size > 0) #endif ASSERT (memcmp (buf + size, &"DEADBEEF"[size], 8 - size) == 0); } else { ASSERT (memcmp (buf, "12345\0EF", 8) == 0); } } /* Test the support of the POSIX/XSI format strings with positions. */ { char result[100]; retval = my_snprintf (result, sizeof (result), "%2$d %1$d", 33, 55); ASSERT (strcmp (result, "55 33") == 0); ASSERT (retval == strlen (result)); } return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wchar.c�������������������������������������������������������0000644�0001750�0001750�00000002120�14557510510�015053� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <wchar.h> substitute. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <wchar.h> /* Check that the types wchar_t and wint_t are defined. */ wchar_t a = 'c'; wint_t b = 'x'; /* Check that NULL can be passed through varargs as a pointer type, per POSIX 2008. */ static_assert (sizeof NULL == sizeof (void *)); int main (void) { return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wcrtomb.c�����������������������������������������������������0000644�0001750�0001750�00000011131�14557510511�015427� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide character to multibyte character. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include <config.h> #include <wchar.h> #include "signature.h" SIGNATURE_CHECK (wcrtomb, size_t, (char *, wchar_t, mbstate_t *)); #include <locale.h> #include <stdlib.h> #include <string.h> #include "macros.h" /* Check the multibyte character s[0..n-1]. */ static void check_character (const char *s, size_t n) { wchar_t wc; char buf[64]; int iret; size_t ret; wc = (wchar_t) 0xBADFACE; iret = mbtowc (&wc, s, n); ASSERT (iret == n); ret = wcrtomb (buf, wc, NULL); ASSERT (ret == n); ASSERT (memcmp (buf, s, n) == 0); /* Test special calling convention, passing a NULL pointer. */ ret = wcrtomb (NULL, wc, NULL); ASSERT (ret == 1); } int main (int argc, char *argv[]) { char buf[64]; size_t ret; /* configure should already have checked that the locale is supported. */ if (setlocale (LC_ALL, "") == NULL) return 1; /* Test NUL character. */ { buf[0] = 'x'; ret = wcrtomb (buf, 0, NULL); ASSERT (ret == 1); ASSERT (buf[0] == '\0'); } /* Test single bytes. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ ret = wcrtomb (buf, btowc (c), NULL); ASSERT (ret == 1); ASSERT (buf[0] == (char) c); break; } } /* Test special calling convention, passing a NULL pointer. */ { ret = wcrtomb (NULL, '\0', NULL); ASSERT (ret == 1); ret = wcrtomb (NULL, btowc ('x'), NULL); ASSERT (ret == 1); } if (argc > 1) switch (argv[1][0]) { case '1': /* C locale; tested above. */ return 0; case '2': /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ { const char input[] = "B\374\337er"; /* "Büßer" */ check_character (input + 1, 1); check_character (input + 2, 1); } return 0; case '3': /* Locale encoding is UTF-8. */ { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ check_character (input + 1, 2); check_character (input + 3, 2); } return 0; case '4': /* Locale encoding is EUC-JP. */ { const char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ check_character (input + 1, 2); check_character (input + 3, 2); check_character (input + 5, 2); } return 0; case '5': /* Locale encoding is GB18030. */ { const char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ check_character (input + 1, 2); check_character (input + 3, 4); } return 0; } return 1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wcrtomb-w32.c�������������������������������������������������0000644�0001750�0001750�00000022141�14557510511�016043� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of conversion of wide character to multibyte character. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <wchar.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "localcharset.h" #include "macros.h" #if defined _WIN32 && !defined __CYGWIN__ static int test_one_locale (const char *name, int codepage) { char buf[64]; size_t ret; # if 1 /* Portable code to set the locale. */ { char name_with_codepage[1024]; sprintf (name_with_codepage, "%s.%d", name, codepage); /* Set the locale. */ if (setlocale (LC_ALL, name_with_codepage) == NULL) return 77; } # else /* Hacky way to set a locale.codepage combination that setlocale() refuses to set. */ { /* Codepage of the current locale, set with setlocale(). Not necessarily the same as GetACP(). */ extern __declspec(dllimport) unsigned int __lc_codepage; /* Set the locale. */ if (setlocale (LC_ALL, name) == NULL) return 77; /* Clobber the codepage and MB_CUR_MAX, both set by setlocale(). */ __lc_codepage = codepage; switch (codepage) { case 1252: case 1256: MB_CUR_MAX = 1; break; case 932: case 950: case 936: MB_CUR_MAX = 2; break; case 54936: case 65001: MB_CUR_MAX = 4; break; } /* Test whether the codepage is really available. */ { mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, " ", 1, &state) == (size_t)(-1)) return 77; } } # endif /* Test NUL character. */ { buf[0] = 'x'; ret = wcrtomb (buf, 0, NULL); ASSERT (ret == 1); ASSERT (buf[0] == '\0'); } /* Test single bytes. */ { int c; for (c = 0; c < 0x100; c++) switch (c) { case '\t': case '\v': case '\f': case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* c is in the ISO C "basic character set". */ ret = wcrtomb (buf, btowc (c), NULL); ASSERT (ret == 1); ASSERT (buf[0] == (char) c); break; } } /* Test special calling convention, passing a NULL pointer. */ { ret = wcrtomb (NULL, '\0', NULL); ASSERT (ret == 1); ret = wcrtomb (NULL, btowc ('x'), NULL); ASSERT (ret == 1); } switch (codepage) { case 1252: /* Locale encoding is CP1252, an extension of ISO-8859-1. */ { /* Convert "B\374\337er": "Büßer" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00FC, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\374", 1) == 0); ASSERT (buf[1] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00DF, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\337", 1) == 0); ASSERT (buf[1] == 'x'); } return 0; case 1256: /* Locale encoding is CP1256, not the same as ISO-8859-6. */ { /* Convert "x\302\341\346y": "xآلوy" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x0622, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\302", 1) == 0); ASSERT (buf[1] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x0644, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\341", 1) == 0); ASSERT (buf[1] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x0648, NULL); ASSERT (ret == 1); ASSERT (memcmp (buf, "\346", 1) == 0); ASSERT (buf[1] == 'x'); } return 0; case 65001: /* Locale encoding is CP65001 = UTF-8. */ if (strcmp (locale_charset (), "UTF-8") != 0) return 77; { /* Convert "B\303\274\303\237er": "Büßer" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00FC, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\303\274", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00DF, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\303\237", 2) == 0); ASSERT (buf[2] == 'x'); } return 0; case 932: /* Locale encoding is CP932, similar to Shift_JIS. */ { /* Convert "<\223\372\226\173\214\352>": "<日本語>" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x65E5, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\223\372", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x672C, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\226\173", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x8A9E, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\214\352", 2) == 0); ASSERT (buf[2] == 'x'); } return 0; case 950: /* Locale encoding is CP950, similar to Big5. */ { /* Convert "<\244\351\245\273\273\171>": "<日本語>" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x65E5, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\244\351", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x672C, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\245\273", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x8A9E, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\273\171", 2) == 0); ASSERT (buf[2] == 'x'); } return 0; case 936: /* Locale encoding is CP936 = GBK, an extension of GB2312. */ { /* Convert "<\310\325\261\276\325\132>": "<日本語>" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x65E5, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\310\325", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x672C, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\261\276", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x8A9E, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\325\132", 2) == 0); ASSERT (buf[2] == 'x'); } return 0; case 54936: /* Locale encoding is CP54936 = GB18030. */ if (strcmp (locale_charset (), "GB18030") != 0) return 77; { /* Convert "B\250\271\201\060\211\070er": "Büßer" */ memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00FC, NULL); ASSERT (ret == 2); ASSERT (memcmp (buf, "\250\271", 2) == 0); ASSERT (buf[2] == 'x'); memset (buf, 'x', 8); ret = wcrtomb (buf, 0x00DF, NULL); ASSERT (ret == 4); ASSERT (memcmp (buf, "\201\060\211\070", 4) == 0); ASSERT (buf[4] == 'x'); } return 0; default: return 1; } } int main (int argc, char *argv[]) { int codepage = atoi (argv[argc - 1]); int result; int i; result = 77; for (i = 1; i < argc - 1; i++) { int ret = test_one_locale (argv[i], codepage); if (ret != 77) result = ret; } if (result == 77) { fprintf (stderr, "Skipping test: found no locale with codepage %d\n", codepage); } return result; } #else int main (int argc, char *argv[]) { fputs ("Skipping test: not a native Windows system\n", stderr); return 77; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wctype.c������������������������������������������������������0000644�0001750�0001750�00000003440�14557510511�015271� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of getting descriptor for a wide character property. Copyright (C) 2023-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2023. */ #include <config.h> #include <wctype.h> #include "signature.h" SIGNATURE_CHECK (wctype, wctype_t, (const char *)); #include "macros.h" int main (int argc, char *argv[]) { wctype_t desc; desc = wctype ("any"); ASSERT (desc == (wctype_t) 0); desc = wctype ("blank"); ASSERT (desc != (wctype_t) 0); desc = wctype ("space"); ASSERT (desc != (wctype_t) 0); desc = wctype ("punct"); ASSERT (desc != (wctype_t) 0); desc = wctype ("lower"); ASSERT (desc != (wctype_t) 0); desc = wctype ("upper"); ASSERT (desc != (wctype_t) 0); desc = wctype ("alpha"); ASSERT (desc != (wctype_t) 0); desc = wctype ("digit"); ASSERT (desc != (wctype_t) 0); desc = wctype ("xdigit"); ASSERT (desc != (wctype_t) 0); desc = wctype ("alnum"); ASSERT (desc != (wctype_t) 0); desc = wctype ("cntrl"); ASSERT (desc != (wctype_t) 0); desc = wctype ("graph"); ASSERT (desc != (wctype_t) 0); desc = wctype ("print"); ASSERT (desc != (wctype_t) 0); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wctype-h.c����������������������������������������������������0000644�0001750�0001750�00000006043�14557510511�015520� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of <wctype.h> substitute. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <wctype.h> /* Check that the type wint_t is defined. */ wint_t a = 'x'; /* Check that WEOF is defined. */ wint_t e = WEOF; /* Check that the type wctype_t is defined. */ wctype_t p; /* Check that the type wctrans_t is defined. */ wctrans_t q; #include "macros.h" int main (void) { /* Check that the isw* functions exist as functions or as macros. */ (void) iswalnum (0); (void) iswalpha (0); (void) iswcntrl (0); (void) iswdigit (0); (void) iswgraph (0); (void) iswlower (0); (void) iswprint (0); (void) iswpunct (0); (void) iswspace (0); (void) iswupper (0); (void) iswxdigit (0); /* Check that the isw* functions map WEOF to 0. */ ASSERT (!iswalnum (e)); ASSERT (!iswalpha (e)); ASSERT (!iswcntrl (e)); ASSERT (!iswdigit (e)); ASSERT (!iswgraph (e)); ASSERT (!iswlower (e)); ASSERT (!iswprint (e)); ASSERT (!iswpunct (e)); ASSERT (!iswspace (e)); ASSERT (!iswupper (e)); ASSERT (!iswxdigit (e)); /* Sanity check for the iswprint function. */ ASSERT (iswprint (L' ')); ASSERT (!iswprint (L'\t')); ASSERT (!iswprint (L'\n')); /* Sanity check for the iswpunct function. These characters are usually expected to be punctuation or symbol characters. */ ASSERT (iswpunct (L'!')); ASSERT (iswpunct (L'"')); ASSERT (iswpunct (L'#')); ASSERT (iswpunct (L'%')); ASSERT (iswpunct (L'&')); ASSERT (iswpunct (L'\'')); ASSERT (iswpunct (L'(')); ASSERT (iswpunct (L')')); ASSERT (iswpunct (L'*')); ASSERT (iswpunct (L',')); ASSERT (iswpunct (L'-')); ASSERT (iswpunct (L'.')); ASSERT (iswpunct (L'/')); ASSERT (iswpunct (L':')); ASSERT (iswpunct (L';')); ASSERT (iswpunct (L'?')); ASSERT (iswpunct (L'@')); ASSERT (iswpunct (L'[')); ASSERT (iswpunct (L'\\')); ASSERT (iswpunct (L']')); ASSERT (iswpunct (L'_')); ASSERT (iswpunct (L'{')); ASSERT (iswpunct (L'}')); ASSERT (!iswpunct (L'5')); ASSERT (!iswpunct (L'F')); ASSERT (!iswpunct (L' ')); ASSERT (!iswpunct (L'\t')); ASSERT (!iswpunct (L'\n')); /* Check that the tow* functions exist as functions or as macros. */ (void) towlower (0); (void) towupper (0); /* Check that the tow* functions map WEOF to WEOF. */ ASSERT (towlower (e) == e); ASSERT (towupper (e) == e); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wcwidth.c�����������������������������������������������������0000644�0001750�0001750�00000007443�14557510511�015436� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of wcwidth() function. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> #include <wchar.h> #include "signature.h" SIGNATURE_CHECK (wcwidth, int, (wchar_t)); #include <locale.h> #include <string.h> #include "c-ctype.h" #include "localcharset.h" #include "macros.h" int main () { wchar_t wc; #if !GNULIB_WCHAR_SINGLE_LOCALE # ifdef C_CTYPE_ASCII /* Test width of ASCII characters. */ for (wc = 0x20; wc < 0x7F; wc++) ASSERT (wcwidth (wc) == 1); # endif #endif /* Switch to an UTF-8 locale. */ if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL /* Check whether it's really an UTF-8 locale. On OpenBSD 4.0, the setlocale call succeeds only for the LC_CTYPE category and therefore returns "C/fr_FR.UTF-8/C/C/C/C", but the LC_CTYPE category is effectively set to an ASCII LC_CTYPE category; in particular, locale_charset() returns "ASCII". */ && strcmp (locale_charset (), "UTF-8") == 0) { /* Test width of ASCII characters. */ for (wc = 0x20; wc < 0x7F; wc++) ASSERT (wcwidth (wc) == 1); /* Test width of some non-spacing characters. */ ASSERT (wcwidth (0x0301) == 0); ASSERT (wcwidth (0x05B0) == 0); /* Test width of some format control characters. */ ASSERT (wcwidth (0x200E) <= 0); ASSERT (wcwidth (0x2060) <= 0); #if 0 /* wchar_t may be only 16 bits. */ ASSERT (wcwidth (0xE0001) <= 0); ASSERT (wcwidth (0xE0044) <= 0); #endif /* Test width of some zero width characters. */ /* While it is desirable that U+200B, U+200C, U+200D have width 0, because this makes wcswidth work better on strings that contain these characters, it is acceptable if an implementation treats these characters like control characters. */ ASSERT (wcwidth (0x200B) <= 0); ASSERT (wcwidth (0xFEFF) <= 0); /* Test width of some math symbols. U+2202 is marked as having ambiguous width (A) in EastAsianWidth.txt (see <https://www.unicode.org/Public/12.0.0/ucd/EastAsianWidth.txt>). The Unicode Standard Annex 11 <https://www.unicode.org/reports/tr11/tr11-36.html> says "Ambiguous characters behave like wide or narrow characters depending on the context (language tag, script identification, associated font, source of data, or explicit markup; all can provide the context). If the context cannot be established reliably, they should be treated as narrow characters by default." For wcwidth(), the only available context information is the locale. "fr_FR.UTF-8" is a Western locale, not an East Asian locale, therefore U+2202 should be treated like a narrow character. */ ASSERT (wcwidth (0x2202) == 1); /* Test width of some CJK characters. */ ASSERT (wcwidth (0x3000) == 2); ASSERT (wcwidth (0xB250) == 2); ASSERT (wcwidth (0xFF1A) == 2); #if 0 /* wchar_t may be only 16 bits. */ ASSERT (wcwidth (0x20369) == 2); ASSERT (wcwidth (0x2F876) == 2); #endif } return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-xalloc-die.c��������������������������������������������������0000644�0001750�0001750�00000001574�14557510511�016005� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of xalloc_die() function. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson <simon@josefsson.org>, 2009. */ #include <config.h> #include "xalloc.h" int main () { xalloc_die (); return 0; } ������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/w32sock.h����������������������������������������������������������0000644�0001750�0001750�00000006452�14557510511�014307� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* w32sock.h --- internal auxiliary functions for Windows socket functions Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini */ #include <errno.h> /* Get O_RDWR and O_BINARY. */ #include <fcntl.h> /* Get _open_osfhandle(). */ #include <io.h> /* Get _get_osfhandle(). */ #if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" #else # include <io.h> #endif #define FD_TO_SOCKET(fd) ((SOCKET) _get_osfhandle ((fd))) #define SOCKET_TO_FD(fh) (_open_osfhandle ((intptr_t) (fh), O_RDWR | O_BINARY)) static inline void set_winsock_errno (void) { int err = WSAGetLastError (); /* Map some WSAE* errors to the runtime library's error codes. */ switch (err) { case WSA_INVALID_HANDLE: errno = EBADF; break; case WSA_NOT_ENOUGH_MEMORY: errno = ENOMEM; break; case WSA_INVALID_PARAMETER: errno = EINVAL; break; case WSAENAMETOOLONG: errno = ENAMETOOLONG; break; case WSAENOTEMPTY: errno = ENOTEMPTY; break; case WSAEWOULDBLOCK: errno = EWOULDBLOCK; break; case WSAEINPROGRESS: errno = EINPROGRESS; break; case WSAEALREADY: errno = EALREADY; break; case WSAENOTSOCK: errno = ENOTSOCK; break; case WSAEDESTADDRREQ: errno = EDESTADDRREQ; break; case WSAEMSGSIZE: errno = EMSGSIZE; break; case WSAEPROTOTYPE: errno = EPROTOTYPE; break; case WSAENOPROTOOPT: errno = ENOPROTOOPT; break; case WSAEPROTONOSUPPORT: errno = EPROTONOSUPPORT; break; case WSAEOPNOTSUPP: errno = EOPNOTSUPP; break; case WSAEAFNOSUPPORT: errno = EAFNOSUPPORT; break; case WSAEADDRINUSE: errno = EADDRINUSE; break; case WSAEADDRNOTAVAIL: errno = EADDRNOTAVAIL; break; case WSAENETDOWN: errno = ENETDOWN; break; case WSAENETUNREACH: errno = ENETUNREACH; break; case WSAENETRESET: errno = ENETRESET; break; case WSAECONNABORTED: errno = ECONNABORTED; break; case WSAECONNRESET: errno = ECONNRESET; break; case WSAENOBUFS: errno = ENOBUFS; break; case WSAEISCONN: errno = EISCONN; break; case WSAENOTCONN: errno = ENOTCONN; break; case WSAETIMEDOUT: errno = ETIMEDOUT; break; case WSAECONNREFUSED: errno = ECONNREFUSED; break; case WSAELOOP: errno = ELOOP; break; case WSAEHOSTUNREACH: errno = EHOSTUNREACH; break; default: errno = (err > 10000 && err < 10025) ? err - 10000 : err; break; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/signature.h��������������������������������������������������������0000644�0001750�0001750�00000003676�14557510507�015027� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macro for checking that a function declaration is compliant. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef SIGNATURE_CHECK /* Check that the function FN takes the specified arguments ARGS with a return type of RET. This header is designed to be included after <config.h> and the one system header that is supposed to contain the function being checked, but prior to any other system headers that are necessary for the unit test. Therefore, this file does not include any system headers, nor reference anything outside of the macro arguments. For an example, if foo.h should provide: extern int foo (char, float); then the unit test named test-foo.c would start out with: #include <config.h> #include <foo.h> #include "signature.h" SIGNATURE_CHECK (foo, int, (char, float)); #include <other.h> ... */ # define SIGNATURE_CHECK(fn, ret, args) \ SIGNATURE_CHECK1 (fn, ret, args, __LINE__) /* Necessary to allow multiple SIGNATURE_CHECK lines in a unit test. Note that the checks must not occupy the same line. */ # define SIGNATURE_CHECK1(fn, ret, args, id) \ SIGNATURE_CHECK2 (fn, ret, args, id) /* macroexpand line */ # define SIGNATURE_CHECK2(fn, ret, args, id) \ _GL_UNUSED static ret (*signature_check ## id) args = fn #endif /* SIGNATURE_CHECK */ ������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/macros.h�����������������������������������������������������������0000644�0001750�0001750�00000011471�14557510507�014302� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Common macros used by gnulib tests. Copyright (C) 2006-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* This file contains macros that are used by many gnulib tests. Put here only frequently used macros, say, used by 10 tests or more. */ #include <stdio.h> #include <stdlib.h> #ifndef FALLTHROUGH # if (__GNUC__ >= 7) || (__clang_major__ >= 10) # define FALLTHROUGH __attribute__ ((__fallthrough__)) # else # define FALLTHROUGH ((void) 0) # endif #endif /* Define ASSERT_STREAM before including this file if ASSERT must target a stream other than stderr. */ #ifndef ASSERT_STREAM # define ASSERT_STREAM stderr #endif /* ASSERT (condition); verifies that the specified condition is fulfilled. If not, a message is printed to ASSERT_STREAM if defined (defaulting to stderr if undefined) and the program is terminated with an error code. This macro has the following properties: - The programmer specifies the expected condition, not the failure condition. This simplifies thinking. - The condition is tested always, regardless of compilation flags. (Unlike the macro from <assert.h>.) - On Unix platforms, the tester can debug the test program with a debugger (provided core dumps are enabled: "ulimit -c unlimited"). - For the sake of platforms where no debugger is available (such as some mingw systems), an error message is printed on the error stream that includes the source location of the ASSERT invocation. */ #define ASSERT(expr) \ do \ { \ if (!(expr)) \ { \ fprintf (ASSERT_STREAM, "%s:%d: assertion '%s' failed\n", \ __FILE__, __LINE__, #expr); \ fflush (ASSERT_STREAM); \ abort (); \ } \ } \ while (0) /* Like ASSERT, except that it uses no stdio. Requires #include <string.h> and #include <unistd.h>. */ #define ASSERT_NO_STDIO(expr) \ do \ { \ if (!(expr)) \ { \ WRITE_TO_STDERR (__FILE__); \ WRITE_TO_STDERR (":"); \ WRITE_MACROEXPANDED_INTEGER_TO_STDERR (__LINE__); \ WRITE_TO_STDERR (": assertion '"); \ WRITE_TO_STDERR (#expr); \ WRITE_TO_STDERR ("' failed\n"); \ abort (); \ } \ } \ while (0) #define WRITE_MACROEXPANDED_INTEGER_TO_STDERR(integer) \ WRITE_INTEGER_TO_STDERR(integer) #define WRITE_INTEGER_TO_STDERR(integer) \ WRITE_TO_STDERR (#integer) #define WRITE_TO_STDERR(string_literal) \ { \ const char *s = string_literal; \ int ret = write (2, s, strlen (s)); \ (void) ret; \ } /* SIZEOF (array) returns the number of elements of an array. It works for arrays that are declared outside functions and for local variables of array type. It does *not* work for function parameters of array type, because they are actually parameters of pointer type. */ #define SIZEOF(array) (sizeof (array) / sizeof (array[0])) /* STREQ (str1, str2) Return true if two strings compare equal. */ #define STREQ(a, b) (strcmp (a, b) == 0) /* Some numbers in the interval [0,1). */ extern const float randomf[1000]; extern const double randomd[1000]; extern const long double randoml[1000]; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-access.h������������������������������������������������������0000644�0001750�0001750�00000005623�14557510507�015236� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of access and euidaccess. Copyright (C) 2019-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* mingw and MSVC 9 lack geteuid, so setup a dummy value. */ #if !HAVE_GETEUID # define geteuid() ROOT_UID #endif static void test_access (int (*func) (const char * /*file*/, int /*mode*/)) { /* Remove anything from prior partial run. */ unlink (BASE "f"); unlink (BASE "f1"); chmod (BASE "f2", 0600); unlink (BASE "f2"); unlink (BASE "sl"); { errno = 0; ASSERT (func (BASE "f", R_OK) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "f", W_OK) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "f", X_OK) == -1); ASSERT (errno == ENOENT); } { ASSERT (close (creat (BASE "f1", 0700)) == 0); ASSERT (func (BASE "f1", F_OK) == 0); ASSERT (func (BASE "f1", R_OK) == 0); ASSERT (func (BASE "f1", W_OK) == 0); ASSERT (func (BASE "f1", X_OK) == 0); ASSERT (func (BASE "f1/", F_OK) == -1); ASSERT (errno == ENOTDIR); ASSERT (func (BASE "f1/", R_OK) == -1); ASSERT (errno == ENOTDIR); ASSERT (func (BASE "f1/", W_OK) == -1); ASSERT (errno == ENOTDIR); ASSERT (func (BASE "f1/", X_OK) == -1); ASSERT (errno == ENOTDIR); if (symlink (BASE "f1", BASE "sl") == 0) { ASSERT (func (BASE "sl/", F_OK) == -1); ASSERT (errno == ENOTDIR); ASSERT (func (BASE "sl/", R_OK) == -1); ASSERT (errno == ENOTDIR); ASSERT (func (BASE "sl/", W_OK) == -1); ASSERT (errno == ENOTDIR); ASSERT (func (BASE "sl/", X_OK) == -1); ASSERT (errno == ENOTDIR); } } { ASSERT (close (creat (BASE "f2", 0600)) == 0); ASSERT (chmod (BASE "f2", 0400) == 0); ASSERT (func (BASE "f2", R_OK) == 0); if (geteuid () != ROOT_UID) { errno = 0; ASSERT (func (BASE "f2", W_OK) == -1); ASSERT (errno == EACCES); } #if defined _WIN32 && !defined __CYGWIN__ /* X_OK works like R_OK. */ ASSERT (func (BASE "f2", X_OK) == 0); #else errno = 0; ASSERT (func (BASE "f2", X_OK) == -1); ASSERT (errno == EACCES); #endif } /* Cleanup. */ ASSERT (unlink (BASE "f1") == 0); ASSERT (chmod (BASE "f2", 0600) == 0); ASSERT (unlink (BASE "f2") == 0); unlink (BASE "sl"); } �������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-argp-2.sh�����������������������������������������������������0000755�0001750�0001750�00000006660�14557510507�015255� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Test suite for argp. # Copyright (C) 2006-2024 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. */ . "${srcdir=.}/init.sh"; path_prepend_ . ERR=0 unset ARGP_HELP_FMT func_compare() { # If argp was compiled without base_name, it will display full program name. # If run on mingw, it will display the program name with a .exe suffix. sed '1{ s,: [^ ]*/test-argp,: test-argp, s,: test-argp\.exe,: test-argp, }' | LC_ALL=C tr -d '\r' > out compare expected out } #### # Test --usage output cat > expected <<EOT Usage: test-argp [-tvCSOlp?V] [-f FILE] [-r FILE] [-o[ARG]] [--test] [--file=FILE] [--input=FILE] [--read=FILE] [--verbose] [--cantiga] [--sonet] [--option] [--optional[=ARG]] [--many] [--one] [--two] [--limerick] [--poem] [--help] [--usage] [--version] ARGS... EOT ${CHECKER} test-argp${EXEEXT} --usage | func_compare || ERR=1 #### # Test working usage-indent format cat > expected <<EOT Usage: test-argp [-tvCSOlp?V] [-f FILE] [-r FILE] [-o[ARG]] [--test] [--file=FILE] [--input=FILE] [--read=FILE] [--verbose] [--cantiga] [--sonet] [--option] [--optional[=ARG]] [--many] [--one] [--two] [--limerick] [--poem] [--help] [--usage] [--version] ARGS... EOT ARGP_HELP_FMT='usage-indent=0' ${CHECKER} test-argp${EXEEXT} --usage | func_compare || ERR=1 #### # Test --help output cat >expected <<EOT Usage: test-argp [OPTION...] ARGS... documentation string Main options -t, --test Option Group 1 -f, -r, --file=FILE, --input=FILE, --read=FILE Option with a mandatory argument -v, --verbose Simple option without arguments Option Group 1.1 -C, --cantiga create a cantiga -S, --sonet create a sonet Option Group 2 -O, --option An option -o, --optional[=ARG] Option with an optional argument. ARG is one of the following: many many units one one unit two two units Option Group 2.1 -l, --limerick create a limerick -p, --poem create a poem -?, --help give this help list --usage give a short usage message -V, --version print program version Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. Report bugs to <>. EOT # Compare --help output, but filter out any bug-reporting email address. ${CHECKER} test-argp${EXEEXT} --help \ | sed 's/^\(Report bugs to \)<[^>]*>.$/\1<>./' | func_compare || ERR=1 #### # Test ambiguous option handling ${CHECKER} test-argp${EXEEXT} --optio 2>/dev/null && ERR=1 #### # Run built-in tests ${CHECKER} test-argp${EXEEXT} || ERR=1 Exit $ERR ��������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/arpa_inet.in.h�����������������������������������������������������0000644�0001750�0001750�00000012337�14557510507�015367� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <arpa/inet.h>. Copyright (C) 2005-2006, 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_ARPA_INET_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_FEATURES_H@ # include <features.h> /* for __GLIBC__ */ #endif /* Gnulib's sys/socket.h is responsible for defining socklen_t (used below) and for pulling in winsock2.h etc. under MinGW. But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include <sys/socket.h> #endif /* On NonStop Kernel, inet_ntop and inet_pton are declared in <netdb.h>. But avoid namespace pollution on glibc systems. */ #if defined __TANDEM && !defined __GLIBC__ # include <netdb.h> #endif #if @HAVE_ARPA_INET_H@ /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_ARPA_INET_H@ #endif #ifndef _@GUARD_PREFIX@_ARPA_INET_H #define _@GUARD_PREFIX@_ARPA_INET_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Get all possible declarations of inet_ntop() and inet_pton(). */ #if (@GNULIB_INET_NTOP@ || @GNULIB_INET_PTON@ || defined GNULIB_POSIXCHECK) \ && @HAVE_WS2TCPIP_H@ # include <ws2tcpip.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #if @GNULIB_INET_NTOP@ /* Converts an internet address from internal format to a printable, presentable format. AF is an internet address family, such as AF_INET or AF_INET6. SRC points to a 'struct in_addr' (for AF_INET) or 'struct in6_addr' (for AF_INET6). DST points to a buffer having room for CNT bytes. The printable representation of the address (in numeric form, not surrounded by [...], no reverse DNS is done) is placed in DST, and DST is returned. If an error occurs, the return value is NULL and errno is set. If CNT bytes are not sufficient to hold the result, the return value is NULL and errno is set to ENOSPC. A good value for CNT is 46. For more details, see the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/inet_ntop.html>. */ # if @REPLACE_INET_NTOP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef inet_ntop # define inet_ntop rpl_inet_ntop # endif _GL_FUNCDECL_RPL (inet_ntop, const char *, (int af, const void *restrict src, char *restrict dst, socklen_t cnt) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (inet_ntop, const char *, (int af, const void *restrict src, char *restrict dst, socklen_t cnt)); # else # if !@HAVE_DECL_INET_NTOP@ _GL_FUNCDECL_SYS (inet_ntop, const char *, (int af, const void *restrict src, char *restrict dst, socklen_t cnt) _GL_ARG_NONNULL ((2, 3))); # endif /* Need to cast, because on NonStop Kernel, the fourth parameter is size_t cnt. */ _GL_CXXALIAS_SYS_CAST (inet_ntop, const char *, (int af, const void *restrict src, char *restrict dst, socklen_t cnt)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (inet_ntop); # endif #elif defined GNULIB_POSIXCHECK # undef inet_ntop # if HAVE_RAW_DECL_INET_NTOP _GL_WARN_ON_USE (inet_ntop, "inet_ntop is unportable - " "use gnulib module inet_ntop for portability"); # endif #endif #if @GNULIB_INET_PTON@ # if @REPLACE_INET_PTON@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef inet_pton # define inet_pton rpl_inet_pton # endif _GL_FUNCDECL_RPL (inet_pton, int, (int af, const char *restrict src, void *restrict dst) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (inet_pton, int, (int af, const char *restrict src, void *restrict dst)); # else # if !@HAVE_DECL_INET_PTON@ _GL_FUNCDECL_SYS (inet_pton, int, (int af, const char *restrict src, void *restrict dst) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (inet_pton, int, (int af, const char *restrict src, void *restrict dst)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (inet_pton); # endif #elif defined GNULIB_POSIXCHECK # undef inet_pton # if HAVE_RAW_DECL_INET_PTON _GL_WARN_ON_USE (inet_pton, "inet_pton is unportable - " "use gnulib module inet_pton for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_ARPA_INET_H */ #endif /* _@GUARD_PREFIX@_ARPA_INET_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-binary-io.sh��������������������������������������������������0000755�0001750�0001750�00000000411�14557510507�016042� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh tmpfiles="" trap 'rm -fr $tmpfiles' HUP INT QUIT TERM tmpfiles="$tmpfiles t-bin-out0.tmp t-bin-out1.tmp" ${CHECKER} ./test-binary-io${EXEEXT} 1 > t-bin-out1.tmp || exit 1 cmp t-bin-out0.tmp t-bin-out1.tmp > /dev/null || exit 1 rm -fr $tmpfiles exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-btoc32-1.sh���������������������������������������������������0000755�0001750�0001750�00000000276�14557510507�015414� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether the POSIX locale has encoding errors. LC_ALL=C \ ${CHECKER} ./test-btoc32${EXEEXT} 1 || exit 1 LC_ALL=POSIX \ ${CHECKER} ./test-btoc32${EXEEXT} 1 || exit 1 exit 0 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-btoc32-2.sh���������������������������������������������������0000755�0001750�0001750�00000000561�14557510507�015412� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no traditional french locale is installed" else echo "Skipping test: no traditional french locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-btoc32${EXEEXT} 2 �����������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-btoc32-3.sh���������������������������������������������������0000755�0001750�0001750�00000000604�14557510507�015411� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no french Unicode locale is installed" else echo "Skipping test: no french Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-btoc32${EXEEXT} 3 ����������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-btowc-1.sh����������������������������������������������������0000755�0001750�0001750�00000000274�14557510507�015434� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether the POSIX locale has encoding errors. LC_ALL=C \ ${CHECKER} ./test-btowc${EXEEXT} 1 || exit 1 LC_ALL=POSIX \ ${CHECKER} ./test-btowc${EXEEXT} 1 || exit 1 exit 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-btowc-2.sh����������������������������������������������������0000755�0001750�0001750�00000000560�14557510507�015433� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no traditional french locale is installed" else echo "Skipping test: no traditional french locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-btowc${EXEEXT} 2 ������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-btowc-3.sh����������������������������������������������������0000755�0001750�0001750�00000000603�14557510507�015432� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no french Unicode locale is installed" else echo "Skipping test: no french Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-btowc${EXEEXT} 3 �����������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c-strcase.sh��������������������������������������������������0000755�0001750�0001750�00000001251�14557510507�016040� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the C locale. ${CHECKER} ./test-c-strcasecmp${EXEEXT} || exit 1 ${CHECKER} ./test-c-strncasecmp${EXEEXT} || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR ${CHECKER} ./test-c-strcasecmp${EXEEXT} locale || exit 1 LC_ALL=$LOCALE_FR ${CHECKER} ./test-c-strncasecmp${EXEEXT} locale || exit 1 fi # Test in a Turkish UTF-8 locale. : "${LOCALE_TR_UTF8=tr_TR.UTF-8}" if test $LOCALE_TR_UTF8 != none; then LC_ALL=$LOCALE_TR_UTF8 ${CHECKER} ./test-c-strcasecmp${EXEEXT} locale || exit 1 LC_ALL=$LOCALE_TR_UTF8 ${CHECKER} ./test-c-strncasecmp${EXEEXT} locale || exit 1 fi exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/str-two-way.h������������������������������������������������������0000644�0001750�0001750�00000042300�14557510507�015226� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Byte-wise substring search, using the Two-Way algorithm. Copyright (C) 2008-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Eric Blake <ebb9@byu.net>, 2008. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Before including this file, you need to include <config.h> and <string.h>, and define: RETURN_TYPE A macro that expands to the return type. AVAILABLE(h, h_l, j, n_l) A macro that returns nonzero if there are at least N_L bytes left starting at H[J]. H is 'unsigned char *', H_L, J, and N_L are 'size_t'; H_L is an lvalue. For NUL-terminated searches, H_L can be modified each iteration to avoid having to compute the end of H up front. For case-insensitivity, you may optionally define: CMP_FUNC(p1, p2, l) A macro that returns 0 iff the first L characters of P1 and P2 are equal. CANON_ELEMENT(c) A macro that canonicalizes an element right after it has been fetched from one of the two strings. The argument is an 'unsigned char'; the result must be an 'unsigned char' as well. This file undefines the macros documented above, and defines LONG_NEEDLE_THRESHOLD. */ #include <limits.h> #include <stdint.h> /* We use the Two-Way string matching algorithm (also known as Chrochemore-Perrin), which guarantees linear complexity with constant space. Additionally, for long needles, we also use a bad character shift table similar to the Boyer-Moore algorithm to achieve improved (potentially sub-linear) performance. See https://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260, https://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.34.6641&rep=rep1&type=pdf */ /* Point at which computing a bad-byte shift table is likely to be worthwhile. Small needles should not compute a table, since it adds (1 << CHAR_BIT) + NEEDLE_LEN computations of preparation for a speedup no greater than a factor of NEEDLE_LEN. The larger the needle, the better the potential performance gain. On the other hand, on non-POSIX systems with CHAR_BIT larger than eight, the memory required for the table is prohibitive. */ #if CHAR_BIT < 10 # define LONG_NEEDLE_THRESHOLD 32U #else # define LONG_NEEDLE_THRESHOLD SIZE_MAX #endif #ifndef MAX # define MAX(a, b) ((a < b) ? (b) : (a)) #endif #ifndef CANON_ELEMENT # define CANON_ELEMENT(c) c #endif #ifndef CMP_FUNC # define CMP_FUNC memcmp #endif /* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN. Return the index of the first byte in the right half, and set *PERIOD to the global period of the right half. The global period of a string is the smallest index (possibly its length) at which all remaining bytes in the string are repetitions of the prefix (the last repetition may be a subset of the prefix). When NEEDLE is factored into two halves, a local period is the length of the smallest word that shares a suffix with the left half and shares a prefix with the right half. All factorizations of a non-empty NEEDLE have a local period of at least 1 and no greater than NEEDLE_LEN. A critical factorization has the property that the local period equals the global period. All strings have at least one critical factorization with the left half smaller than the global period. And while some strings have more than one critical factorization, it is provable that with an ordered alphabet, at least one of the critical factorizations corresponds to a maximal suffix. Given an ordered alphabet, a critical factorization can be computed in linear time, with 2 * NEEDLE_LEN comparisons, by computing the shorter of two ordered maximal suffixes. The ordered maximal suffixes are determined by lexicographic comparison while tracking periodicity. */ static size_t critical_factorization (const unsigned char *needle, size_t needle_len, size_t *period) { /* Index of last byte of left half, or SIZE_MAX. */ size_t max_suffix, max_suffix_rev; size_t j; /* Index into NEEDLE for current candidate suffix. */ size_t k; /* Offset into current period. */ size_t p; /* Intermediate period. */ unsigned char a, b; /* Current comparison bytes. */ /* Special case NEEDLE_LEN of 1 or 2 (all callers already filtered out 0-length needles. */ if (needle_len < 3) { *period = 1; return needle_len - 1; } /* Invariants: 0 <= j < NEEDLE_LEN - 1 -1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed) min(max_suffix, max_suffix_rev) < global period of NEEDLE 1 <= p <= global period of NEEDLE p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j] 1 <= k <= p */ /* Perform lexicographic search. */ max_suffix = SIZE_MAX; j = 0; k = p = 1; while (j + k < needle_len) { a = CANON_ELEMENT (needle[j + k]); b = CANON_ELEMENT (needle[max_suffix + k]); if (a < b) { /* Suffix is smaller, period is entire prefix so far. */ j += k; k = 1; p = j - max_suffix; } else if (a == b) { /* Advance through repetition of the current period. */ if (k != p) ++k; else { j += p; k = 1; } } else /* b < a */ { /* Suffix is larger, start over from current location. */ max_suffix = j++; k = p = 1; } } *period = p; /* Perform reverse lexicographic search. */ max_suffix_rev = SIZE_MAX; j = 0; k = p = 1; while (j + k < needle_len) { a = CANON_ELEMENT (needle[j + k]); b = CANON_ELEMENT (needle[max_suffix_rev + k]); if (b < a) { /* Suffix is smaller, period is entire prefix so far. */ j += k; k = 1; p = j - max_suffix_rev; } else if (a == b) { /* Advance through repetition of the current period. */ if (k != p) ++k; else { j += p; k = 1; } } else /* a < b */ { /* Suffix is larger, start over from current location. */ max_suffix_rev = j++; k = p = 1; } } /* Choose the shorter suffix. Return the index of the first byte of the right half, rather than the last byte of the left half. For some examples, 'banana' has two critical factorizations, both exposed by the two lexicographic extreme suffixes of 'anana' and 'nana', where both suffixes have a period of 2. On the other hand, with 'aab' and 'bba', both strings have a single critical factorization of the last byte, with the suffix having a period of 1. While the maximal lexicographic suffix of 'aab' is 'b', the maximal lexicographic suffix of 'bba' is 'ba', which is not a critical factorization. Conversely, the maximal reverse lexicographic suffix of 'a' works for 'bba', but not 'ab' for 'aab'. The shorter suffix of the two will always be a critical factorization. */ if (max_suffix_rev + 1 < max_suffix + 1) return max_suffix + 1; *period = p; return max_suffix_rev + 1; } /* Return the first location of non-empty NEEDLE within HAYSTACK, or NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD. Performance is guaranteed to be linear, with an initialization cost of 2 * NEEDLE_LEN comparisons. If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. */ static RETURN_TYPE _GL_ATTRIBUTE_PURE two_way_short_needle (const unsigned char *haystack, size_t haystack_len, const unsigned char *needle, size_t needle_len) { size_t i; /* Index into current byte of NEEDLE. */ size_t j; /* Index into current window of HAYSTACK. */ size_t period; /* The period of the right half of needle. */ size_t suffix; /* The index of the right half of needle. */ /* Factor the needle into two halves, such that the left half is smaller than the global period, and the right half is periodic (with a period as large as NEEDLE_LEN - suffix). */ suffix = critical_factorization (needle, needle_len, &period); /* Perform the search. Each iteration compares the right half first. */ if (CMP_FUNC (needle, needle + period, suffix) == 0) { /* Entire needle is periodic; a mismatch in the left half can only advance by the period, so use memory to avoid rescanning known occurrences of the period in the right half. */ size_t memory = 0; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Scan for matches in right half. */ i = MAX (suffix, memory); while (i < needle_len && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (memory < i + 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i + 1 < memory + 1) return (RETURN_TYPE) (haystack + j); /* No match, so remember how many repetitions of period on the right half were scanned. */ j += period; memory = needle_len - period; } else { j += i - suffix + 1; memory = 0; } } } else { /* The two halves of needle are distinct; no extra memory is required, and any mismatch results in a maximal shift. */ period = MAX (suffix, needle_len - suffix) + 1; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Scan for matches in right half. */ i = suffix; while (i < needle_len && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i == SIZE_MAX) return (RETURN_TYPE) (haystack + j); j += period; } else j += i - suffix + 1; } } return NULL; } /* Return the first location of non-empty NEEDLE within HAYSTACK, or NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This method is optimized for LONG_NEEDLE_THRESHOLD <= NEEDLE_LEN. Performance is guaranteed to be linear, with an initialization cost of 3 * NEEDLE_LEN + (1 << CHAR_BIT) operations. If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and sublinear performance O(HAYSTACK_LEN / NEEDLE_LEN) is possible. If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and sublinear performance is not possible. */ static RETURN_TYPE _GL_ATTRIBUTE_PURE two_way_long_needle (const unsigned char *haystack, size_t haystack_len, const unsigned char *needle, size_t needle_len) { size_t i; /* Index into current byte of NEEDLE. */ size_t j; /* Index into current window of HAYSTACK. */ size_t period; /* The period of the right half of needle. */ size_t suffix; /* The index of the right half of needle. */ size_t shift_table[1U << CHAR_BIT]; /* See below. */ /* Factor the needle into two halves, such that the left half is smaller than the global period, and the right half is periodic (with a period as large as NEEDLE_LEN - suffix). */ suffix = critical_factorization (needle, needle_len, &period); /* Populate shift_table. For each possible byte value c, shift_table[c] is the distance from the last occurrence of c to the end of NEEDLE, or NEEDLE_LEN if c is absent from the NEEDLE. shift_table[NEEDLE[NEEDLE_LEN - 1]] contains the only 0. */ for (i = 0; i < 1U << CHAR_BIT; i++) shift_table[i] = needle_len; for (i = 0; i < needle_len; i++) shift_table[CANON_ELEMENT (needle[i])] = needle_len - i - 1; /* Perform the search. Each iteration compares the right half first. */ if (CMP_FUNC (needle, needle + period, suffix) == 0) { /* Entire needle is periodic; a mismatch in the left half can only advance by the period, so use memory to avoid rescanning known occurrences of the period in the right half. */ size_t memory = 0; size_t shift; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Check the last byte first; if it does not match, then shift to the next possible match location. */ shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; if (0 < shift) { if (memory && shift < period) { /* Since needle is periodic, but the last period has a byte out of place, there can be no match until after the mismatch. */ shift = needle_len - period; } memory = 0; j += shift; continue; } /* Scan for matches in right half. The last byte has already been matched, by virtue of the shift table. */ i = MAX (suffix, memory); while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len - 1 <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (memory < i + 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i + 1 < memory + 1) return (RETURN_TYPE) (haystack + j); /* No match, so remember how many repetitions of period on the right half were scanned. */ j += period; memory = needle_len - period; } else { j += i - suffix + 1; memory = 0; } } } else { /* The two halves of needle are distinct; no extra memory is required, and any mismatch results in a maximal shift. */ size_t shift; period = MAX (suffix, needle_len - suffix) + 1; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Check the last byte first; if it does not match, then shift to the next possible match location. */ shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; if (0 < shift) { j += shift; continue; } /* Scan for matches in right half. The last byte has already been matched, by virtue of the shift table. */ i = suffix; while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len - 1 <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i == SIZE_MAX) return (RETURN_TYPE) (haystack + j); j += period; } else j += i - suffix + 1; } } return NULL; } #undef AVAILABLE #undef CANON_ELEMENT #undef CMP_FUNC #undef MAX #undef RETURN_TYPE ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32isalnum.sh�������������������������������������������������0000755�0001750�0001750�00000001762�14557510507�016143� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32isalnum${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32isalnum${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32isalnum${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32isalnum${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32isalnum${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32isalnum${EXEEXT} 4 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ��������������gnuastro-0.22/bootstrapped/tests/test-c32isalpha.sh�������������������������������������������������0000755�0001750�0001750�00000001762�14557510507�016114� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32isalpha${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32isalpha${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32isalpha${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32isalpha${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32isalpha${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32isalpha${EXEEXT} 4 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ��������������gnuastro-0.22/bootstrapped/tests/test-c32isblank.sh�������������������������������������������������0000755�0001750�0001750�00000001762�14557510507�016116� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32isblank${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32isblank${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32isblank${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32isblank${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32isblank${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32isblank${EXEEXT} 4 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ��������������gnuastro-0.22/bootstrapped/tests/test-c32iscntrl.sh�������������������������������������������������0000755�0001750�0001750�00000001762�14557510507�016151� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32iscntrl${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32iscntrl${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32iscntrl${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32iscntrl${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32iscntrl${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32iscntrl${EXEEXT} 4 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ��������������gnuastro-0.22/bootstrapped/tests/test-c32isdigit.sh�������������������������������������������������0000755�0001750�0001750�00000001762�14557510507�016127� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32isdigit${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32isdigit${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32isdigit${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32isdigit${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32isdigit${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32isdigit${EXEEXT} 4 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ��������������gnuastro-0.22/bootstrapped/tests/test-c32isgraph.sh�������������������������������������������������0000755�0001750�0001750�00000001762�14557510507�016130� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32isgraph${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32isgraph${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32isgraph${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32isgraph${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32isgraph${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32isgraph${EXEEXT} 4 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ��������������gnuastro-0.22/bootstrapped/tests/test-c32islower.sh�������������������������������������������������0000755�0001750�0001750�00000001762�14557510507�016157� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32islower${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32islower${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32islower${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32islower${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32islower${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32islower${EXEEXT} 4 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ��������������gnuastro-0.22/bootstrapped/tests/test-c32isprint.sh�������������������������������������������������0000755�0001750�0001750�00000001762�14557510507�016163� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32isprint${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32isprint${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32isprint${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32isprint${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32isprint${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32isprint${EXEEXT} 4 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ��������������gnuastro-0.22/bootstrapped/tests/test-c32ispunct.sh�������������������������������������������������0000755�0001750�0001750�00000001762�14557510507�016160� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32ispunct${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32ispunct${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32ispunct${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32ispunct${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32ispunct${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32ispunct${EXEEXT} 4 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ��������������gnuastro-0.22/bootstrapped/tests/test-c32isspace.sh�������������������������������������������������0000755�0001750�0001750�00000001762�14557510507�016122� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32isspace${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32isspace${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32isspace${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32isspace${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32isspace${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32isspace${EXEEXT} 4 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ��������������gnuastro-0.22/bootstrapped/tests/test-c32isupper.sh�������������������������������������������������0000755�0001750�0001750�00000001762�14557510507�016162� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32isupper${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32isupper${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32isupper${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32isupper${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32isupper${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32isupper${EXEEXT} 4 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ��������������gnuastro-0.22/bootstrapped/tests/test-c32isxdigit.sh������������������������������������������������0000755�0001750�0001750�00000001770�14557510507�016316� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32isxdigit${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32isxdigit${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32isxdigit${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32isxdigit${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32isxdigit${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32isxdigit${EXEEXT} 4 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ��������gnuastro-0.22/bootstrapped/tests/test-c32rtomb.sh���������������������������������������������������0000755�0001750�0001750�00000001746�14557510507�015620� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32rtomb${EXEEXT} 1 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32rtomb${EXEEXT} 1 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32rtomb${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32rtomb${EXEEXT} 3 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32rtomb${EXEEXT} 4 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32rtomb${EXEEXT} 5 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ��������������������������gnuastro-0.22/bootstrapped/tests/test-c32rtomb-w32-2.sh���������������������������������������������0000755�0001750�0001750�00000000136�14557510507�016360� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1252 locale. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} French_France 1252 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32rtomb-w32-3.sh���������������������������������������������0000755�0001750�0001750�00000000146�14557510507�016362� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1256 locale. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32rtomb-w32-4.sh���������������������������������������������0000755�0001750�0001750�00000000216�14557510507�016361� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test some UTF-8 locales. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32rtomb-w32-5.sh���������������������������������������������0000755�0001750�0001750�00000000135�14557510507�016362� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP932 locale. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} Japanese_Japan 932 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32rtomb-w32-6.sh���������������������������������������������0000755�0001750�0001750�00000000135�14557510507�016363� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP950 locale. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} Chinese_Taiwan 950 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32rtomb-w32-7.sh���������������������������������������������0000755�0001750�0001750�00000000134�14557510507�016363� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP936 locale. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} Chinese_China 936 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32rtomb-w32-8.sh���������������������������������������������0000755�0001750�0001750�00000000140�14557510507�016361� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a GB18030 locale. ${CHECKER} ./test-c32rtomb-w32${EXEEXT} Chinese_China 54936 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-c32tolower.sh�������������������������������������������������0000755�0001750�0001750�00000002073�14557510507�016162� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Allow distinguishing the various invocations in the .log file. set -x # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-c32tolower${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-c32tolower${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-c32tolower${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-c32tolower${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-c32tolower${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-c32tolower${EXEEXT} 4 case $? in 0 | 77) ;; *) exit 1 ;; esac fi exit 0 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/ctype.in.h���������������������������������������������������������0000644�0001750�0001750�00000003673�14557510507�014554� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C99 <ctype.h>, for platforms on which it is incomplete. Copyright (C) 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible. */ /* * ISO C 99 <ctype.h> for platforms on which it is incomplete. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/ctype.h.html> */ #ifndef _@GUARD_PREFIX@_CTYPE_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Include the original <ctype.h>. */ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_CTYPE_H@ #ifndef _@GUARD_PREFIX@_CTYPE_H #define _@GUARD_PREFIX@_CTYPE_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Return non-zero if c is a blank, i.e. a space or tab character. */ #if @GNULIB_ISBLANK@ # if !@HAVE_ISBLANK@ _GL_EXTERN_C int isblank (int c); # endif #elif defined GNULIB_POSIXCHECK # undef isblank # if HAVE_RAW_DECL_ISBLANK _GL_WARN_ON_USE (isblank, "isblank is unportable - " "use gnulib module isblank for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_CTYPE_H */ #endif /* _@GUARD_PREFIX@_CTYPE_H */ ���������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-error.sh������������������������������������������������������0000755�0001750�0001750�00000001521�14557510507�015305� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test of the 'error' module. . "${srcdir=.}/init.sh"; path_prepend_ . ${CHECKER} test-error${EXEEXT} > out 2> err # Verify the exit code. case $? in 4) ;; *) Exit 1;; esac # Normalize the stderr output on Windows platforms. tr -d '\015' < err | sed 's,.*test-error[.ex]*:,test-error:,' > err2 || Exit 1 # Verify the stderr output. compare - err2 <<\EOF || Exit 1 test-error: bummer test-error: Zonk 123 is too large test-error: Pokémon started test-error:d1/foo.c:10: invalid blub test-error:d1/foo.c:10: invalid blarn test-error:d1/foo.c:10: unsupported glink test-error:d1/foo.c:13: invalid brump test-error:d2/foo.c:13: unsupported flinge hammer boing 123 is too large d2/bar.c:11: bark too loud test-error: can't steal: Permission denied test-error: fatal error EOF # Verify the stdout output. test -s out && Exit 1 Exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/flexmember.h�������������������������������������������������������0000644�0001750�0001750�00000006133�14557510507�015143� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sizes of structs with flexible array members. Copyright 2016-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library 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. The GNU C Library 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 the GNU C Library; if not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert. */ /* This file uses _Alignof. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <stddef.h> /* Nonzero multiple of alignment of TYPE, suitable for FLEXSIZEOF below. On older platforms without _Alignof, use a pessimistic bound that is safe in practice even if FLEXIBLE_ARRAY_MEMBER is 1. On newer platforms, use _Alignof to get a tighter bound. */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 # define FLEXALIGNOF(type) (sizeof (type) & ~ (sizeof (type) - 1)) #else # define FLEXALIGNOF(type) _Alignof (type) #endif /* Yield a properly aligned upper bound on the size of a struct of type TYPE with a flexible array member named MEMBER that is followed by N bytes of other data. The result is suitable as an argument to malloc. For example: struct s { int a; char d[FLEXIBLE_ARRAY_MEMBER]; }; struct s *p = malloc (FLEXSIZEOF (struct s, d, n * sizeof (char))); FLEXSIZEOF (TYPE, MEMBER, N) is not simply (sizeof (TYPE) + N), since FLEXIBLE_ARRAY_MEMBER may be 1 on pre-C11 platforms. Nor is it simply (offsetof (TYPE, MEMBER) + N), as that might yield a size that causes malloc to yield a pointer that is not properly aligned for TYPE; for example, if sizeof (int) == alignof (int) == 4, malloc (offsetof (struct s, d) + 3 * sizeof (char)) is equivalent to malloc (7) and might yield a pointer that is not a multiple of 4 (which means the pointer is not properly aligned for struct s), whereas malloc (FLEXSIZEOF (struct s, d, 3 * sizeof (char))) is equivalent to malloc (8) and must yield a pointer that is a multiple of 4. Yield a value less than N if and only if arithmetic overflow occurs. */ #define FLEXSIZEOF(type, member, n) \ ((offsetof (type, member) + FLEXALIGNOF (type) - 1 + (n)) \ & ~ (FLEXALIGNOF (type) - 1)) /* Yield a properly aligned upper bound on the size of a struct of type TYPE with a flexible array member named MEMBER that has N elements. The result is suitable as an argument to malloc. For example: struct s { int a; double d[FLEXIBLE_ARRAY_MEMBER]; }; struct s *p = malloc (FLEXNSIZEOF (struct s, d, n)); */ #define FLEXNSIZEOF(type, member, n) \ FLEXSIZEOF (type, member, (n) * sizeof (((type *) 0)->member[0])) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/fpucw.h������������������������������������������������������������0000644�0001750�0001750�00000011365�14557510507�014144� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Manipulating the FPU control word. -*- coding: utf-8 -*- Copyright (C) 2007-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _FPUCW_H #define _FPUCW_H /* The i386 floating point hardware (the 387 compatible FPU, not the modern SSE/SSE2 hardware) has a controllable rounding precision. It is specified through the 'PC' bits in the FPU control word ('fctrl' register). (See the GNU libc i386 <fpu_control.h> header for details.) On some platforms, such as Linux or Solaris, the default precision setting is set to "extended precision". This means that 'long double' instructions operate correctly, but 'double' computations often produce slightly different results as on strictly IEEE 754 conforming systems. On some platforms, such as NetBSD, the default precision is set to "double precision". This means that 'long double' instructions will operate only as 'double', i.e. lead to wrong results. Similarly on FreeBSD 6.4, at least for the division of 'long double' numbers. The FPU control word is under control of the application, i.e. it is not required to be set either way by the ABI. (In fact, the i386 ABI https://www.linux-mips.org/pub/linux/mips/doc/ABI/abi386-4.pdf page 3-12 = page 38 is not clear about it. But in any case, gcc treats the control word like a "preserved" register: it emits code that assumes that the control word is preserved across calls, and it restores the control word at the end of functions that modify it.) See Vincent Lefèvre's page https://www.vinc17.net/research/extended.en.html for a good explanation. See https://web.archive.org/web/20060905133417/http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html some argumentation which setting should be the default. */ /* This header file provides the following facilities: fpucw_t integral type holding the value of 'fctrl' FPU_PC_MASK bit mask denoting the precision control FPU_PC_DOUBLE precision control for 53 bits mantissa FPU_PC_EXTENDED precision control for 64 bits mantissa GET_FPUCW () yields the current FPU control word SET_FPUCW (word) sets the FPU control word DECL_LONG_DOUBLE_ROUNDING variable declaration for BEGIN/END_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING () starts a sequence of instructions with 'long double' safe operation precision END_LONG_DOUBLE_ROUNDING () ends a sequence of instructions with 'long double' safe operation precision */ /* Inline assembler like this works only with GNU C and clang. */ #if (defined __i386__ || defined __x86_64__) && (defined __GNUC__ || defined __clang__) typedef unsigned short fpucw_t; /* glibc calls this fpu_control_t */ # define FPU_PC_MASK 0x0300 # define FPU_PC_DOUBLE 0x200 /* glibc calls this _FPU_DOUBLE */ # define FPU_PC_EXTENDED 0x300 /* glibc calls this _FPU_EXTENDED */ # define GET_FPUCW() __extension__ \ ({ fpucw_t _cw; \ __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw)); \ _cw; \ }) # define SET_FPUCW(word) __extension__ \ (void)({ fpucw_t _ncw = (word); \ __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw)); \ }) # define DECL_LONG_DOUBLE_ROUNDING \ fpucw_t oldcw; # define BEGIN_LONG_DOUBLE_ROUNDING() \ (void)(oldcw = GET_FPUCW (), \ SET_FPUCW ((oldcw & ~FPU_PC_MASK) | FPU_PC_EXTENDED)) # define END_LONG_DOUBLE_ROUNDING() \ SET_FPUCW (oldcw) #else typedef unsigned int fpucw_t; # define FPU_PC_MASK 0 # define FPU_PC_DOUBLE 0 # define FPU_PC_EXTENDED 0 # define GET_FPUCW() 0 # define SET_FPUCW(word) (void)(word) # define DECL_LONG_DOUBLE_ROUNDING # define BEGIN_LONG_DOUBLE_ROUNDING() # define END_LONG_DOUBLE_ROUNDING() #endif #endif /* _FPUCW_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-lstat.h�������������������������������������������������������0000644�0001750�0001750�00000007662�14557510510�015123� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of lstat() function. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson, 2008; and Eric Blake, 2009. */ /* This file is designed to test both lstat(n,buf) and fstatat(AT_FDCWD,n,buf,AT_SYMLINK_NOFOLLOW). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_lstat_func (int (*func) (char const *, struct stat *), bool print) { struct stat st1; struct stat st2; /* Test for common directories. */ ASSERT (func (".", &st1) == 0); ASSERT (func ("./", &st2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) ASSERT (psame_inode (&st1, &st2)); #endif ASSERT (S_ISDIR (st1.st_mode)); ASSERT (S_ISDIR (st2.st_mode)); ASSERT (func ("/", &st1) == 0); ASSERT (func ("///", &st2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) ASSERT (psame_inode (&st1, &st2)); #endif ASSERT (S_ISDIR (st1.st_mode)); ASSERT (S_ISDIR (st2.st_mode)); ASSERT (func ("..", &st1) == 0); ASSERT (S_ISDIR (st1.st_mode)); /* Test for error conditions. */ errno = 0; ASSERT (func ("", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nosuch", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nosuch/", &st1) == -1); ASSERT (errno == ENOENT); ASSERT (close (creat (BASE "file", 0600)) == 0); ASSERT (func (BASE "file", &st1) == 0); ASSERT (S_ISREG (st1.st_mode)); errno = 0; ASSERT (func (BASE "file/", &st1) == -1); ASSERT (errno == ENOTDIR); /* Now for some symlink tests, where supported. We set up: link1 -> directory link2 -> file link3 -> dangling link4 -> loop then test behavior both with and without trailing slash. */ if (symlink (".", BASE "link1") != 0) { ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (symlink (BASE "file", BASE "link2") == 0); ASSERT (symlink (BASE "nosuch", BASE "link3") == 0); ASSERT (symlink (BASE "link4", BASE "link4") == 0); ASSERT (func (BASE "link1", &st1) == 0); ASSERT (S_ISLNK (st1.st_mode)); ASSERT (func (BASE "link1/", &st1) == 0); ASSERT (stat (BASE "link1", &st2) == 0); ASSERT (S_ISDIR (st1.st_mode)); ASSERT (S_ISDIR (st2.st_mode)); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) ASSERT (psame_inode (&st1, &st2)); #endif ASSERT (func (BASE "link2", &st1) == 0); ASSERT (S_ISLNK (st1.st_mode)); errno = 0; ASSERT (func (BASE "link2/", &st1) == -1); ASSERT (errno == ENOTDIR); ASSERT (func (BASE "link3", &st1) == 0); ASSERT (S_ISLNK (st1.st_mode)); errno = 0; ASSERT (func (BASE "link3/", &st1) == -1); ASSERT (errno == ENOENT); ASSERT (func (BASE "link4", &st1) == 0); ASSERT (S_ISLNK (st1.st_mode)); errno = 0; ASSERT (func (BASE "link4/", &st1) == -1); ASSERT (errno == ELOOP); /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "link1") == 0); ASSERT (unlink (BASE "link2") == 0); ASSERT (unlink (BASE "link3") == 0); ASSERT (unlink (BASE "link4") == 0); return 0; } ������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-stat.h��������������������������������������������������������0000644�0001750�0001750�00000006434�14557510510�014743� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of stat. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ /* This file is designed to test both stat(n,buf) and fstatat(AT_FDCWD,n,buf,0). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_stat_func (int (*func) (char const *, struct stat *), bool print) { struct stat st1; struct stat st2; char *cwd = getcwd (NULL, 0); ASSERT (cwd); ASSERT (func (".", &st1) == 0); ASSERT (func ("./", &st2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) ASSERT (psame_inode (&st1, &st2)); #endif ASSERT (func (cwd, &st2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) ASSERT (psame_inode (&st1, &st2)); #endif ASSERT (func ("/", &st1) == 0); ASSERT (func ("///", &st2) == 0); #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) ASSERT (psame_inode (&st1, &st2)); #endif errno = 0; ASSERT (func ("", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nosuch", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nosuch/", &st1) == -1); ASSERT (errno == ENOENT); ASSERT (close (creat (BASE "file", 0600)) == 0); ASSERT (func (BASE "file", &st1) == 0); errno = 0; ASSERT (func (BASE "file/", &st1) == -1); ASSERT (errno == ENOTDIR); /* Now for some symlink tests, where supported. We set up: link1 -> directory link2 -> file link3 -> dangling link4 -> loop then test behavior with trailing slash. */ if (symlink (".", BASE "link1") != 0) { ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } ASSERT (symlink (BASE "file", BASE "link2") == 0); ASSERT (symlink (BASE "nosuch", BASE "link3") == 0); ASSERT (symlink (BASE "link4", BASE "link4") == 0); ASSERT (func (BASE "link1/", &st1) == 0); ASSERT (S_ISDIR (st1.st_mode)); errno = 0; ASSERT (func (BASE "link2/", &st1) == -1); ASSERT (errno == ENOTDIR); errno = 0; ASSERT (func (BASE "link3/", &st1) == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func (BASE "link4/", &st1) == -1); ASSERT (errno == ELOOP); /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "link1") == 0); ASSERT (unlink (BASE "link2") == 0); ASSERT (unlink (BASE "link3") == 0); ASSERT (unlink (BASE "link4") == 0); free (cwd); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-ftruncate.sh��������������������������������������������������0000755�0001750�0001750�00000000121�14557510507�016142� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh exec ${CHECKER} ./test-ftruncate${EXEEXT} "$srcdir/test-ftruncate.sh" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-getopt-main.h�������������������������������������������������0000644�0001750�0001750�00000004114�14557510507�016213� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of command line argument processing. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ #include "signature.h" SIGNATURE_CHECK (getopt, int, (int, char * const[], char const *)); #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /* This test intentionally remaps stderr. So, we arrange to have fd 10 (outside the range of interesting fd's during the test) set up to duplicate the original stderr. */ #define BACKUP_STDERR_FILENO 10 #define ASSERT_STREAM myerr #include "macros.h" static FILE *myerr; #include "test-getopt.h" #if TEST_GETOPT_GNU # include "test-getopt_long.h" #endif int main (void) { /* This test validates that stderr is used correctly, so move the original into fd 10. */ if (dup2 (STDERR_FILENO, BACKUP_STDERR_FILENO) != BACKUP_STDERR_FILENO || (myerr = fdopen (BACKUP_STDERR_FILENO, "w")) == NULL) return 2; ASSERT (freopen (TEST_GETOPT_TMP_NAME, "w", stderr) == stderr); /* These default values are required by POSIX. */ ASSERT (optind == 1); ASSERT (opterr != 0); setenv ("POSIXLY_CORRECT", "1", 1); test_getopt (); #if TEST_GETOPT_GNU test_getopt_long_posix (); #endif unsetenv ("POSIXLY_CORRECT"); test_getopt (); #if TEST_GETOPT_GNU test_getopt_long (); test_getopt_long_only (); #endif ASSERT (fclose (stderr) == 0); ASSERT (remove (TEST_GETOPT_TMP_NAME) == 0); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-getopt.h������������������������������������������������������0000644�0001750�0001750�00000125630�14557510507�015300� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of command line argument processing. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ /* The glibc/gnulib implementation of getopt supports setting optind = 0, but not all other implementations do. This matters for getopt. But for getopt_long, we require GNU compatibility. */ #if defined __GETOPT_PREFIX || (__GLIBC__ >= 2 && !defined __UCLIBC__) # define OPTIND_MIN 0 #elif HAVE_DECL_OPTRESET # define OPTIND_MIN (optreset = 1) #else # define OPTIND_MIN 1 #endif static void getopt_loop (int argc, const char **argv, const char *options, int *a_seen, int *b_seen, const char **p_value, const char **q_value, int *non_options_count, const char **non_options, int *unrecognized, bool *message_issued) { int c; int pos = ftell (stderr); while ((c = getopt (argc, (char **) argv, options)) != -1) { switch (c) { case 'a': (*a_seen)++; break; case 'b': (*b_seen)++; break; case 'p': *p_value = optarg; break; case 'q': *q_value = optarg; break; case '\1': /* Must only happen with option '-' at the beginning. */ ASSERT (options[0] == '-'); non_options[(*non_options_count)++] = optarg; break; case ':': /* Must only happen with option ':' at the beginning. */ ASSERT (options[0] == ':' || ((options[0] == '-' || options[0] == '+') && options[1] == ':')); FALLTHROUGH; case '?': *unrecognized = optopt; break; default: *unrecognized = c; break; } } *message_issued = pos < ftell (stderr); } static void test_getopt (void) { int start; bool posixly = !!getenv ("POSIXLY_CORRECT"); /* See comment in getopt.c: glibc gets a LSB-compliant getopt. Standalone applications get a POSIX-compliant getopt. */ #if defined __GETOPT_PREFIX || !(__GLIBC__ >= 2 || defined __MINGW32__) /* Using getopt from gnulib or from a non-glibc system. */ posixly = true; #endif /* Test processing of boolean options. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "ab", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-b"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "ab", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ba"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "ab", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "ab", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 2); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); ASSERT (!output); } /* Test processing of options with arguments. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "p:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "p:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-q"; argv[argc++] = "baz"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); ASSERT (!output); } #if GNULIB_TEST_GETOPT_GNU /* Test processing of options with optional arguments. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "p::q::", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "p::q::", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp::q::", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); ASSERT (!output); } #endif /* GNULIB_TEST_GETOPT_GNU */ /* Check that invalid options are recognized; and that both opterr and leading ':' can silence output. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-x"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 42; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'x'); ASSERT (optind == 5); ASSERT (output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-x"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 0; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'x'); ASSERT (optind == 5); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-x"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, ":abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'x'); ASSERT (optind == 5); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-:"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 42; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == ':'); ASSERT (optind == 5); ASSERT (output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-:"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 0; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == ':'); ASSERT (optind == 5); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-:"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, ":abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == ':'); ASSERT (optind == 5); ASSERT (!output); } /* Check for missing argument behavior. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ap"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 2); ASSERT (output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ap"; argv[argc] = NULL; optind = start; opterr = 0; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-ap"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, ":abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 2); ASSERT (!output); } /* Check that by default, non-options arguments are moved to the end. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); if (posixly) { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } else { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); ASSERT (!output); } } /* Check that '--' ends the argument processing. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[20]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); if (posixly) { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } else { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "--") == 0); ASSERT (strcmp (argv[5], "donald") == 0); ASSERT (strcmp (argv[6], "duck") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); ASSERT (!output); } } #if GNULIB_TEST_GETOPT_GNU /* Check that the '-' flag causes non-options to be returned in order. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "-abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 3); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (strcmp (non_options[2], "bar") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 7); ASSERT (!output); } /* Check that '--' ends the argument processing. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[20]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "-abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (!output); if (non_options_count == 2) { /* glibc behaviour. */ ASSERT (non_options_count == 2); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 7); } else { /* Another valid behaviour. */ ASSERT (non_options_count == 7); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (strcmp (non_options[2], "-b") == 0); ASSERT (strcmp (non_options[3], "foo") == 0); ASSERT (strcmp (non_options[4], "-q") == 0); ASSERT (strcmp (non_options[5], "johnny") == 0); ASSERT (strcmp (non_options[6], "bar") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 12); } } /* Check that the '-' flag has to come first. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:-", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); if (posixly) { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } else { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); ASSERT (!output); } } /* Check that the '+' flag causes the first non-option to terminate the loop. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "+abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-+"; argv[argc] = NULL; optind = start; getopt_loop (argc, argv, "+abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == '+'); ASSERT (optind == 2); ASSERT (output); } /* Check that '--' ends the argument processing. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[20]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "+abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } #endif /* GNULIB_TEST_GETOPT_GNU */ /* Check that the '+' flag has to come first. */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "abp:q:+", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); if (posixly) { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } else { ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); ASSERT (!output); } } #if GNULIB_TEST_GETOPT_GNU /* If GNU extensions are supported, require compliance with POSIX interpretation on leading '+' behavior. http://austingroupbugs.net/view.php?id=191 */ for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; opterr = 1; getopt_loop (argc, argv, "+:abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc] = NULL; optind = start; getopt_loop (argc, argv, "+:abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 2); ASSERT (!output); } for (start = OPTIND_MIN; start <= 1; start++) { int a_seen = 0; int b_seen = 0; const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; bool output; int argc = 0; const char *argv[10]; argv[argc++] = "program"; argv[argc++] = "-b"; argv[argc++] = "-p"; argv[argc] = NULL; optind = start; getopt_loop (argc, argv, "+:abp:q:", &a_seen, &b_seen, &p_value, &q_value, &non_options_count, non_options, &unrecognized, &output); ASSERT (a_seen == 0); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'p'); ASSERT (optind == 3); ASSERT (!output); } /* Check that 'W' does not dump core: https://sourceware.org/bugzilla/show_bug.cgi?id=12922 Technically, POSIX says the presence of ';' in the opt-string gives unspecified behavior, so we only test this when GNU compliance is desired. */ for (start = OPTIND_MIN; start <= 1; start++) { int argc = 0; const char *argv[10]; int pos = ftell (stderr); argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "dummy"; argv[argc] = NULL; optind = start; opterr = 1; ASSERT (getopt (argc, (char **) argv, "W;") == 'W'); ASSERT (ftell (stderr) == pos); ASSERT (optind == 2); } #endif /* GNULIB_TEST_GETOPT_GNU */ } ��������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-getopt_long.h�������������������������������������������������0000644�0001750�0001750�00000175506�14557510507�016326� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of command line argument processing. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2009. */ static int a_seen; static int b_seen; static int q_seen; static const struct option long_options_required[] = { { "alpha", no_argument, NULL, 'a' }, { "beta", no_argument, &b_seen, 1 }, { "prune", required_argument, NULL, 'p' }, { "quetsche", required_argument, &q_seen, 1 }, { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; static const struct option long_options_optional[] = { { "alpha", no_argument, NULL, 'a' }, { "beta", no_argument, &b_seen, 1 }, { "prune", optional_argument, NULL, 'p' }, { "quetsche", optional_argument, &q_seen, 1 }, { NULL, 0, NULL, 0 } }; static void getopt_long_loop (int argc, const char **argv, const char *options, const struct option *long_options, const char **p_value, const char **q_value, int *non_options_count, const char **non_options, int *unrecognized) { int option_index = -1; int c; opterr = 0; q_seen = 0; while ((c = getopt_long (argc, (char **) argv, options, long_options, &option_index)) != -1) { switch (c) { case 0: /* An option with a non-NULL flag pointer was processed. */ if (q_seen) *q_value = optarg; break; case 'a': a_seen++; break; case 'b': b_seen = 1; break; case 'p': *p_value = optarg; break; case 'q': *q_value = optarg; break; case '\1': /* Must only happen with option '-' at the beginning. */ ASSERT (options[0] == '-'); non_options[(*non_options_count)++] = optarg; break; case ':': /* Must only happen with option ':' at the beginning. */ ASSERT (options[0] == ':' || ((options[0] == '-' || options[0] == '+') && options[1] == ':')); FALLTHROUGH; case '?': *unrecognized = optopt; break; default: *unrecognized = c; break; } } } /* Reduce casting, so we can use string literals elsewhere. getopt_long takes an array of char*, but luckily does not modify those elements, so we can pass const char*. */ static int do_getopt_long (int argc, const char **argv, const char *shortopts, const struct option *longopts, int *longind) { return getopt_long (argc, (char **) argv, shortopts, longopts, longind); } static void test_getopt_long (void) { int start; /* Test disambiguation of options. */ { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--x"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xt"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtr"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtra"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1001); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtre"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtrem"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtreme"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1002); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtremel"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1003); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--xtremely"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1003); } /* Check that -W handles unknown options. */ { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "W;", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 'W'); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-Wunknown"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "W;", long_options_required, &option_index); /* glibc and BSD behave differently here, but for now, we allow both behaviors since W support is not frequently used. */ if (c == '?') { ASSERT (optopt == 0); ASSERT (optarg == NULL); } else { ASSERT (c == 'W'); ASSERT (strcmp (optarg, "unknown") == 0); } } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "unknown"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "W;", long_options_required, &option_index); /* glibc and BSD behave differently here, but for now, we allow both behaviors since W support is not frequently used. */ if (c == '?') { ASSERT (optopt == 0); ASSERT (optarg == NULL); } else { ASSERT (c == 'W'); ASSERT (strcmp (optarg, "unknown") == 0); } } /* Test that 'W' does not dump core: https://sourceware.org/bugzilla/show_bug.cgi?id=12922 */ { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "dummy"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long (argc, argv, "W;", NULL, &option_index); ASSERT (c == 'W'); ASSERT (optind == 2); } /* Test processing of boolean short options. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-b"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ba"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-a"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 2); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } /* Test processing of boolean long options. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--alpha"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--beta"; argv[argc++] = "--alpha"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--alpha"; argv[argc++] = "--beta"; argv[argc++] = "--alpha"; argv[argc++] = "--beta"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 2); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Test processing of boolean long options via -W. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Walpha"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abW;", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "beta"; argv[argc++] = "-W"; argv[argc++] = "alpha"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "aW;b", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Walpha"; argv[argc++] = "-Wbeta"; argv[argc++] = "-Walpha"; argv[argc++] = "-Wbeta"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 2); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Test processing of short options with arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-q"; argv[argc++] = "baz"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Test processing of long options with arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "--q"; argv[argc++] = "baz"; argv[argc++] = "--p=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Test processing of long options with arguments via -W. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Wp=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:q:W;", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p:W;q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-ab"; argv[argc++] = "-Wq"; argv[argc++] = "baz"; argv[argc++] = "-W"; argv[argc++] = "p=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value != NULL && strcmp (q_value, "baz") == 0); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 6); } /* Test processing of short options with optional arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-pfoo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } /* Test processing of long options with optional arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p="; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && *p_value == '\0'); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "--p"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } /* Test processing of long options with optional arguments via -W. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Wp=foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::W;", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Wp"; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::q::W;", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-Wp="; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && *p_value == '\0'); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "p="; argv[argc++] = "foo"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;p::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && *p_value == '\0'); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 3); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-W"; argv[argc++] = "p"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "W;abp::q::", long_options_optional, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); /* ASSERT (p_value == NULL); */ ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } /* Check that invalid options are recognized. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-x"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'x'); ASSERT (optind == 5); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "-:"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == ':'); ASSERT (optind == 5); } /* Check that unexpected arguments are recognized. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "--a="; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 'a'); ASSERT (optind == 4); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "foo"; argv[argc++] = "--b="; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "foo") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); /* When flag is non-zero, glibc sets optopt anyway, but BSD leaves optopt unchanged. */ ASSERT (unrecognized == 1 || unrecognized == 0); ASSERT (optind == 4); } /* Check that by default, non-options arguments are moved to the end. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } /* Check that '--' ends the argument processing. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[20]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "--") == 0); ASSERT (strcmp (argv[5], "donald") == 0); ASSERT (strcmp (argv[6], "duck") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 5); } /* Check that the '-' flag causes non-options to be returned in order. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "-abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 3); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (strcmp (non_options[2], "bar") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 7); } /* Check that '--' ends the argument processing. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[20]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "-abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); if (non_options_count == 2) { /* glibc behaviour. */ ASSERT (non_options_count == 2); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 7); } else { /* Another valid behaviour. */ ASSERT (non_options_count == 7); ASSERT (strcmp (non_options[0], "donald") == 0); ASSERT (strcmp (non_options[1], "duck") == 0); ASSERT (strcmp (non_options[2], "-b") == 0); ASSERT (strcmp (non_options[3], "foo") == 0); ASSERT (strcmp (non_options[4], "-q") == 0); ASSERT (strcmp (non_options[5], "johnny") == 0); ASSERT (strcmp (non_options[6], "bar") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 12); } } /* Check that the '-' flag has to come first. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:-", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } /* Check that the '+' flag causes the first non-option to terminate the loop. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "+abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); } for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-+"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "+abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == '+'); ASSERT (optind == 2); } /* Check that '--' ends the argument processing. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[20]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "--"; argv[argc++] = "-b"; argv[argc++] = "foo"; argv[argc++] = "-q"; argv[argc++] = "johnny"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "+abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "--") == 0); ASSERT (strcmp (argv[7], "-b") == 0); ASSERT (strcmp (argv[8], "foo") == 0); ASSERT (strcmp (argv[9], "-q") == 0); ASSERT (strcmp (argv[10], "johnny") == 0); ASSERT (strcmp (argv[11], "bar") == 0); ASSERT (argv[12] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); } /* Check that the '+' flag has to come first. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:+", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "-p") == 0); ASSERT (strcmp (argv[2], "billy") == 0); ASSERT (strcmp (argv[3], "-a") == 0); ASSERT (strcmp (argv[4], "donald") == 0); ASSERT (strcmp (argv[5], "duck") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 1); ASSERT (b_seen == 0); ASSERT (p_value != NULL && strcmp (p_value, "billy") == 0); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } } /* Test behavior of getopt_long when POSIXLY_CORRECT is set in the environment. Options with optional arguments should not change behavior just because of an environment variable. https://lists.gnu.org/r/bug-m4/2006-09/msg00028.html */ static void test_getopt_long_posix (void) { int start; /* Check that POSIXLY_CORRECT stops parsing the same as leading '+'. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "donald"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc++] = "duck"; argv[argc++] = "-a"; argv[argc++] = "bar"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "abp:q:", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (strcmp (argv[0], "program") == 0); ASSERT (strcmp (argv[1], "donald") == 0); ASSERT (strcmp (argv[2], "-p") == 0); ASSERT (strcmp (argv[3], "billy") == 0); ASSERT (strcmp (argv[4], "duck") == 0); ASSERT (strcmp (argv[5], "-a") == 0); ASSERT (strcmp (argv[6], "bar") == 0); ASSERT (argv[7] == NULL); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 1); } /* Check that POSIXLY_CORRECT doesn't change optional arguments. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-p"; argv[argc++] = "billy"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "p::", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 0); ASSERT (b_seen == 0); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 0); ASSERT (unrecognized == 0); ASSERT (optind == 2); } /* Check that leading - still sees options after non-options. */ for (start = 0; start <= 1; start++) { const char *p_value = NULL; const char *q_value = NULL; int non_options_count = 0; const char *non_options[10]; int unrecognized = 0; int argc = 0; const char *argv[10]; a_seen = 0; b_seen = 0; argv[argc++] = "program"; argv[argc++] = "-a"; argv[argc++] = "billy"; argv[argc++] = "-b"; argv[argc] = NULL; optind = start; getopt_long_loop (argc, argv, "-ab", long_options_required, &p_value, &q_value, &non_options_count, non_options, &unrecognized); ASSERT (a_seen == 1); ASSERT (b_seen == 1); ASSERT (p_value == NULL); ASSERT (q_value == NULL); ASSERT (non_options_count == 1); ASSERT (strcmp (non_options[0], "billy") == 0); ASSERT (unrecognized == 0); ASSERT (optind == 4); } } /* Reduce casting, so we can use string literals elsewhere. getopt_long_only takes an array of char*, but luckily does not modify those elements, so we can pass const char*. */ static int do_getopt_long_only (int argc, const char **argv, const char *shortopts, const struct option *longopts, int *longind) { return getopt_long_only (argc, (char **) argv, shortopts, longopts, longind); } static void test_getopt_long_only (void) { /* Test disambiguation of options. */ { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-x"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-x"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == 'x'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--x"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-b"; argv[argc] = NULL; optind = 1; opterr = 0; b_seen = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == 'b'); ASSERT (b_seen == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "--b"; argv[argc] = NULL; optind = 1; opterr = 0; b_seen = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == 0); ASSERT (b_seen == 1); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xt"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xt"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx", long_options_required, &option_index); ASSERT (c == '?'); ASSERT (optopt == 0); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtra"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "ab", long_options_required, &option_index); ASSERT (c == 1001); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtreme"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx:", long_options_required, &option_index); ASSERT (c == 1002); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtremel"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "ab", long_options_required, &option_index); /* glibc getopt_long_only is intentionally different from getopt_long when handling a prefix that is common to two spellings, when both spellings have the same option directives. BSD getopt_long_only treats both cases the same. */ ASSERT (c == 1003 || c == '?'); ASSERT (optind == 2); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtremel"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx::", long_options_required, &option_index); /* glibc getopt_long_only is intentionally different from getopt_long when handling a prefix that is common to two spellings, when both spellings have the same option directives. BSD getopt_long_only treats both cases the same. */ ASSERT (c == 1003 || c == '?'); ASSERT (optind == 2); ASSERT (optarg == NULL); } { int argc = 0; const char *argv[10]; int option_index; int c; argv[argc++] = "program"; argv[argc++] = "-xtras"; argv[argc] = NULL; optind = 1; opterr = 0; c = do_getopt_long_only (argc, argv, "abx::", long_options_required, &option_index); ASSERT (c == 'x'); ASSERT (strcmp (optarg, "tras") == 0); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/ialloc.h�����������������������������������������������������������0000644�0001750�0001750�00000007013�14557510507�014256� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ialloc.h -- malloc with idx_t rather than size_t Copyright 2021-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef IALLOC_H_ #define IALLOC_H_ /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_COLD, _GL_ATTRIBUTE_MALLOC. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include "idx.h" #include <errno.h> #include <stdint.h> #include <stdlib.h> #if defined __CHERI_PURE_CAPABILITY__ # include <cheri.h> #endif _GL_INLINE_HEADER_BEGIN #ifndef IALLOC_INLINE # define IALLOC_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif IALLOC_INLINE void * _GL_ATTRIBUTE_COLD _gl_alloc_nomem (void) { errno = ENOMEM; return NULL; } /* imalloc (size) is like malloc (size). It returns a non-NULL pointer to size bytes of memory. Upon failure, it returns NULL with errno set. */ IALLOC_INLINE _GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * imalloc (idx_t s) { return s <= SIZE_MAX ? malloc (s) : _gl_alloc_nomem (); } /* irealloc (ptr, size) is like realloc (ptr, size). It returns a non-NULL pointer to size bytes of memory. Upon failure, it returns NULL with errno set. */ IALLOC_INLINE /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * irealloc (void *p, idx_t s) { if (s <= SIZE_MAX) { /* Work around GNU realloc glitch by treating a zero size as if it were 1, so that returning NULL is equivalent to failing. */ p = realloc (p, s | !s); #if defined __CHERI_PURE_CAPABILITY__ if (p != NULL) p = cheri_bounds_set (p, s); #endif return p; } else return _gl_alloc_nomem (); } /* icalloc (num, size) is like calloc (num, size). It returns a non-NULL pointer to num * size bytes of memory. Upon failure, it returns NULL with errno set. */ IALLOC_INLINE _GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * icalloc (idx_t n, idx_t s) { if (SIZE_MAX < n) { if (s != 0) return _gl_alloc_nomem (); n = 0; } if (SIZE_MAX < s) { if (n != 0) return _gl_alloc_nomem (); s = 0; } return calloc (n, s); } /* ireallocarray (ptr, num, size) is like reallocarray (ptr, num, size). It returns a non-NULL pointer to num * size bytes of memory. Upon failure, it returns NULL with errno set. */ IALLOC_INLINE void * ireallocarray (void *p, idx_t n, idx_t s) { if (n <= SIZE_MAX && s <= SIZE_MAX) { /* Work around GNU reallocarray glitch by treating a zero size as if it were 1, so that returning NULL is equivalent to failing. */ size_t nx = n; size_t sx = s; if (n == 0 || s == 0) nx = sx = 1; p = reallocarray (p, nx, sx); #if defined __CHERI_PURE_CAPABILITY__ if (p != NULL && (n == 0 || s == 0)) p = cheri_bounds_set (p, 0); #endif return p; } else return _gl_alloc_nomem (); } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/ignore-value.h�����������������������������������������������������0000644�0001750�0001750�00000004362�14557510507�015414� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ignore a function return without a compiler warning. -*- coding: utf-8 -*- Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering, Eric Blake and Pádraig Brady. */ /* Use "ignore_value" to avoid a warning when using a function declared with gcc's warn_unused_result attribute, but for which you really do want to ignore the result. Traditionally, people have used a "(void)" cast to indicate that a function's return value is deliberately unused. However, if the function is declared with __attribute__((warn_unused_result)), gcc issues a warning even with the cast. Caution: most of the time, you really should heed gcc's warning, and check the return value. However, in those exceptional cases in which you're sure you know what you're doing, use this function. For the record, here's one of the ignorable warnings: "copy.c:233: warning: ignoring return value of 'fchown', declared with attribute warn_unused_result". */ #ifndef _GL_IGNORE_VALUE_H #define _GL_IGNORE_VALUE_H /* Normally casting an expression to void discards its value, but GCC versions 3.4 and newer have __attribute__ ((__warn_unused_result__)) which may cause unwanted diagnostics in that case. Use __typeof__ and __extension__ to work around the problem, if the workaround is known to be needed. The workaround is not needed with clang. */ #if (3 < __GNUC__ + (4 <= __GNUC_MINOR__)) && !defined __clang__ # define ignore_value(x) \ (__extension__ ({ __typeof__ (x) __x = (x); (void) __x; })) #else # define ignore_value(x) ((void) (x)) #endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-isnand.h������������������������������������������������������0000644�0001750�0001750�00000002640�14557510510�015237� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnand() substitute. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <limits.h> #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "snan.h" #include "macros.h" int main () { /* Finite values. */ ASSERT (!isnand (3.141)); ASSERT (!isnand (3.141e30)); ASSERT (!isnand (3.141e-30)); ASSERT (!isnand (-2.718)); ASSERT (!isnand (-2.718e30)); ASSERT (!isnand (-2.718e-30)); ASSERT (!isnand (0.0)); ASSERT (!isnand (minus_zerod)); /* Infinite values. */ ASSERT (!isnand (Infinityd ())); ASSERT (!isnand (- Infinityd ())); /* Quiet NaN. */ ASSERT (isnand (NaNd ())); #if HAVE_SNAND /* Signalling NaN. */ ASSERT (isnand (SNaNd ())); #endif return 0; } ������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/minus-zero.h�������������������������������������������������������0000644�0001750�0001750�00000004526�14557510507�015131� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macros for floating-point negative zero. Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Keep in sync with m4/minus-zero.m4! */ #include <float.h> /* minus_zerof represents the value -0.0f. */ /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. ICC 10.0 has a bug when optimizing the expression -zero. The expression -FLT_MIN * FLT_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static float compute_minus_zerof (void) { return -FLT_MIN * FLT_MIN; } # define minus_zerof compute_minus_zerof () #else float minus_zerof = -0.0f; #endif /* minus_zerod represents the value -0.0. */ /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. ICC 10.0 has a bug when optimizing the expression -zero. The expression -DBL_MIN * DBL_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static double compute_minus_zerod (void) { return -DBL_MIN * DBL_MIN; } # define minus_zerod compute_minus_zerod () #else double minus_zerod = -0.0; #endif /* minus_zerol represents the value -0.0L. */ /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0L. IRIX cc can't put -0.0L into .data, but can compute at runtime. ICC 10.0 has a bug when optimizing the expression -zero. The expression -LDBL_MIN * LDBL_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static long double compute_minus_zerol (void) { return -LDBL_MIN * LDBL_MIN; } # define minus_zerol compute_minus_zerol () #else long double minus_zerol = -0.0L; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/infinity.h���������������������������������������������������������0000644�0001750�0001750�00000003637�14557510507�014654� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Macros for infinity. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Infinityf () returns a 'float' +Infinity. */ /* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. */ #if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI static float Infinityf () { static float zero = 0.0f; return 1.0f / zero; } #else # define Infinityf() (1.0f / 0.0f) #endif /* Infinityd () returns a 'double' +Infinity. */ /* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. */ #if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI static double Infinityd () { static double zero = 0.0; return 1.0 / zero; } #else # define Infinityd() (1.0 / 0.0) #endif /* Infinityl () returns a 'long double' +Infinity. */ /* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L. The IBM XL C compiler on z/OS complains. PGI 16.10 complains. */ #if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI static long double Infinityl () { static long double zero = 0.0L; return 1.0L / zero; } #else # define Infinityl() (1.0L / 0.0L) #endif �������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-isnanf.h������������������������������������������������������0000644�0001750�0001750�00000002647�14557510510�015250� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanf() substitute. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <limits.h> #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "snan.h" #include "macros.h" int main () { /* Finite values. */ ASSERT (!isnanf (3.141f)); ASSERT (!isnanf (3.141e30f)); ASSERT (!isnanf (3.141e-30f)); ASSERT (!isnanf (-2.718f)); ASSERT (!isnanf (-2.718e30f)); ASSERT (!isnanf (-2.718e-30f)); ASSERT (!isnanf (0.0f)); ASSERT (!isnanf (minus_zerof)); /* Infinite values. */ ASSERT (!isnanf (Infinityf ())); ASSERT (!isnanf (- Infinityf ())); /* Quiet NaN. */ ASSERT (isnanf (NaNf ())); #if HAVE_SNANF /* Signalling NaN. */ ASSERT (isnanf (SNaNf ())); #endif return 0; } �����������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-isnanl.h������������������������������������������������������0000644�0001750�0001750�00000006711�14557510510�015252� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of isnanl() substitute. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <float.h> #include <limits.h> #include "minus-zero.h" #include "infinity.h" #include "nan.h" #include "snan.h" #include "macros.h" int main () { /* Finite values. */ ASSERT (!isnanl (3.141L)); ASSERT (!isnanl (3.141e30L)); ASSERT (!isnanl (3.141e-30L)); ASSERT (!isnanl (-2.718L)); ASSERT (!isnanl (-2.718e30L)); ASSERT (!isnanl (-2.718e-30L)); ASSERT (!isnanl (0.0L)); ASSERT (!isnanl (minus_zerol)); /* Infinite values. */ ASSERT (!isnanl (Infinityl ())); ASSERT (!isnanl (- Infinityl ())); /* Quiet NaN. */ ASSERT (isnanl (NaNl ())); #if HAVE_SNANL /* Signalling NaN. */ ASSERT (isnanl (SNaNl ())); #endif #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { .word = LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; ASSERT (isnanl (x.value)); } { /* Signalling NaN. */ static memory_long_double x = { .word = LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; ASSERT (isnanl (x.value)); } /* isnanl should return something for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { .word = LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Pseudo-Infinity. */ static memory_long_double x = { .word = LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Pseudo-Zero. */ static memory_long_double x = { .word = LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Unnormalized number. */ static memory_long_double x = { .word = LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } { /* Pseudo-Denormal. */ static memory_long_double x = { .word = LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; ASSERT (isnanl (x.value) || !isnanl (x.value)); } #undef NWORDS #endif return 0; } �������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-iswdigit.sh���������������������������������������������������0000755�0001750�0001750�00000001700�14557510510�015770� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-iswdigit${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-iswdigit${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-iswdigit${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-iswdigit${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-iswdigit${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-iswdigit${EXEEXT} 4 \ || exit 1 fi exit 0 ����������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-iswpunct.sh���������������������������������������������������0000755�0001750�0001750�00000000251�14557510510�016021� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-iswpunct${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-iswpunct${EXEEXT} 0 || exit 1 exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-iswxdigit.sh��������������������������������������������������0000755�0001750�0001750�00000001706�14557510510�016166� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-iswxdigit${EXEEXT} 0 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-iswxdigit${EXEEXT} 0 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-iswxdigit${EXEEXT} 1 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-iswxdigit${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-iswxdigit${EXEEXT} 3 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-iswxdigit${EXEEXT} 4 \ || exit 1 fi exit 0 ����������������������������������������������������������gnuastro-0.22/bootstrapped/tests/localename-table.h�������������������������������������������������0000644�0001750�0001750�00000005476�14557510507�016213� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Table that maps a locale object to the names of the locale categories. Copyright (C) 2018-2024 Free Software Foundation, Inc. This program 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 program 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2018. */ #if HAVE_WORKING_USELOCALE && HAVE_NAMELESS_LOCALES # include <stddef.h> # include <locale.h> # include "glthread/lock.h" struct locale_categories_names { /* Locale category -> name (allocated with indefinite extent). */ const char *category_name[6]; }; /* A hash table of fixed size. Multiple threads can access it read-only simultaneously, but only one thread can insert into it or remove from it at the same time. This hash table has global scope, so that when an application uses both GNU libintl and gnulib, the application sees only one hash table. (When linking statically with libintl, the fact that localename-table.c is a separate compilation unit resolves the duplicate symbol conflict. When linking with libintl as a shared library, we rely on ELF and the symbol conflict resolution implemented in the ELF dynamic loader here.) Both the libintl overrides and the gnulib overrides of the functions newlocale, duplocale, freelocale see the same hash table (and the same lock). For this reason, the internal layout of the hash table and the hash function MUST NEVER CHANGE. If you need to change the internal layout or the hash function, introduce versioning by appending a version suffix to the symbols at the linker level. */ # define locale_hash_function libintl_locale_hash_function # define locale_hash_table libintl_locale_hash_table # define locale_lock libintl_locale_lock extern size_t _GL_ATTRIBUTE_CONST locale_hash_function (locale_t x); /* A node in a hash bucket collision list. */ struct locale_hash_node { struct locale_hash_node *next; locale_t locale; struct locale_categories_names names; }; # define LOCALE_HASH_TABLE_SIZE 101 extern struct locale_hash_node * locale_hash_table[LOCALE_HASH_TABLE_SIZE]; /* This lock protects the locale_hash_table against multiple simultaneous accesses (except that multiple simultaneous read accesses are allowed). */ gl_rwlock_define(extern, locale_lock) #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/localename.h�������������������������������������������������������0000644�0001750�0001750�00000011215�14557510507�015112� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine name of the currently selected locale. Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. This program 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 program 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_LOCALENAME_H #define _GL_LOCALENAME_H /* This file uses _GL_ATTRIBUTE_CONST, HAVE_CFPREFERENCESCOPYAPPVALUE. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #ifdef __cplusplus extern "C" { #endif /* Determine the current locale's name. It considers both the POSIX notion of locale name (see functions gl_locale_name_thread and gl_locale_name_posix) and the system notion of locale name (see function gl_locale_name_default). CATEGORY is a locale category abbreviation, as defined in <locale.h>, but not LC_ALL. E.g. LC_MESSAGES. CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". Return the locale category's name, canonicalized into XPG syntax language[_territory][.codeset][@modifier] The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name (int category, const char *categoryname); /* Determine the current per-thread locale's name, as specified by uselocale() calls. CATEGORY is a locale category abbreviation, as defined in <locale.h>, but not LC_ALL. E.g. LC_MESSAGES. CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". Return the locale category's name, canonicalized into XPG syntax language[_territory][.codeset][@modifier] or NULL if no locale has been specified for the current thread. The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name_thread (int category, const char *categoryname); /* Determine the thread-independent current locale's name, as specified by setlocale() calls or by environment variables. CATEGORY is a locale category abbreviation, as defined in <locale.h>, but not LC_ALL. E.g. LC_MESSAGES. CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". Return the locale category's name, canonicalized into XPG syntax language[_territory][.codeset][@modifier] or NULL if no locale has been specified to setlocale() or by environment variables. The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name_posix (int category, const char *categoryname); /* Determine the default locale's name, as specified by environment variables. Return the locale category's name, or NULL if no locale has been specified by environment variables. The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name_environ (int category, const char *categoryname); /* Determine the default locale's name. This is the current locale's name, if not specified by uselocale() calls, by setlocale() calls, or by environment variables. This locale name is usually determined by systems settings that the user can manipulate through a GUI. Quoting POSIX:2001: "All implementations shall define a locale as the default locale, to be invoked when no environment variables are set, or set to the empty string. This default locale can be the C locale or any other implementation-defined locale. Some implementations may provide facilities for local installation administrators to set the default locale, customizing it for each location. IEEE Std 1003.1-2001 does not require such a facility." The result must not be freed; it is statically allocated. */ extern const char * gl_locale_name_default (void) #if !(HAVE_CFPREFERENCESCOPYAPPVALUE || defined _WIN32 || defined __CYGWIN__) _GL_ATTRIBUTE_CONST #endif ; #ifdef __cplusplus } #endif #endif /* _GL_LOCALENAME_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/atomic-int-gnulib.h������������������������������������������������0000644�0001750�0001750�00000011371�14557510507�016337� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Atomic integers. Useful for testing multithreaded locking primitives. Copyright (C) 2005, 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Whether to use 'volatile' on some variables that communicate information between threads. If set to 0, a semaphore or a lock is used to protect these variables. If set to 1, 'volatile' is used; this is theoretically equivalent but can lead to much slower execution (e.g. 30x slower total run time on a 40-core machine), because 'volatile' does not imply any synchronization/communication between different CPUs. */ #define USE_VOLATILE 0 #if USE_POSIX_THREADS && HAVE_SEMAPHORE_H /* Whether to use a semaphore to communicate information between threads. If set to 0, a lock is used. If set to 1, a semaphore is used. Uncomment this to reduce the dependencies of this test. */ # define USE_SEMAPHORE 1 /* Mac OS X provides only named semaphores (sem_open); its facility for unnamed semaphores (sem_init) does not work. */ # if defined __APPLE__ && defined __MACH__ # define USE_NAMED_SEMAPHORE 1 # else # define USE_UNNAMED_SEMAPHORE 1 # endif #endif #if USE_SEMAPHORE # include <errno.h> # include <fcntl.h> # include <semaphore.h> # include <unistd.h> #endif #if USE_VOLATILE struct atomic_int { volatile int value; }; static void init_atomic_int (struct atomic_int *ai) { } static int get_atomic_int_value (struct atomic_int *ai) { return ai->value; } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { ai->value = new_value; } #elif USE_SEMAPHORE /* This atomic_int implementation can only support the values 0 and 1. It is initially 0 and can be set to 1 only once. */ # if USE_UNNAMED_SEMAPHORE struct atomic_int { sem_t semaphore; }; #define atomic_int_semaphore(ai) (&(ai)->semaphore) static void init_atomic_int (struct atomic_int *ai) { sem_init (&ai->semaphore, 0, 0); } # endif # if USE_NAMED_SEMAPHORE struct atomic_int { sem_t *semaphore; }; #define atomic_int_semaphore(ai) ((ai)->semaphore) static void init_atomic_int (struct atomic_int *ai) { sem_t *s; unsigned int count; for (count = 0; ; count++) { char name[80]; /* Use getpid() in the name, so that different processes running at the same time will not interfere. Use ai in the name, so that different atomic_int in the same process will not interfere. Use a count in the name, so that even in the (unlikely) case that a semaphore with the specified name already exists, we can try a different name. */ sprintf (name, "test-lock-%lu-%p-%u", (unsigned long) getpid (), ai, count); s = sem_open (name, O_CREAT | O_EXCL, 0600, 0); if (s == SEM_FAILED) { if (errno == EEXIST) /* Retry with a different name. */ continue; else { perror ("sem_open failed"); fflush (stderr); abort (); } } else { /* Try not to leave a semaphore hanging around on the file system eternally, if we can avoid it. */ sem_unlink (name); break; } } ai->semaphore = s; } # endif static int get_atomic_int_value (struct atomic_int *ai) { if (sem_trywait (atomic_int_semaphore (ai)) == 0) { if (sem_post (atomic_int_semaphore (ai))) abort (); return 1; } else if (errno == EAGAIN) return 0; else abort (); } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { if (new_value == 0) /* It's already initialized with 0. */ return; /* To set the value 1: */ if (sem_post (atomic_int_semaphore (ai))) abort (); } #else struct atomic_int { gl_lock_define (, lock) int value; }; static void init_atomic_int (struct atomic_int *ai) { gl_lock_init (ai->lock); } static int get_atomic_int_value (struct atomic_int *ai) { gl_lock_lock (ai->lock); int ret = ai->value; gl_lock_unlock (ai->lock); return ret; } static void set_atomic_int_value (struct atomic_int *ai, int new_value) { gl_lock_lock (ai->lock); ai->value = new_value; gl_lock_unlock (ai->lock); } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32-1.sh�������������������������������������������������0000755�0001750�0001750�00000000302�14557510510�015733� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether the POSIX locale has encoding errors. LC_ALL=C \ ${CHECKER} ./test-mbrtoc32${EXEEXT} 1 || exit 1 LC_ALL=POSIX \ ${CHECKER} ./test-mbrtoc32${EXEEXT} 1 || exit 1 exit 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32-2.sh�������������������������������������������������0000755�0001750�0001750�00000000563�14557510510�015745� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no traditional french locale is installed" else echo "Skipping test: no traditional french locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-mbrtoc32${EXEEXT} 2 ���������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32-3.sh�������������������������������������������������0000755�0001750�0001750�00000000606�14557510510�015744� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no french Unicode locale is installed" else echo "Skipping test: no french Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-mbrtoc32${EXEEXT} 3 ��������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32-4.sh�������������������������������������������������0000755�0001750�0001750�00000000576�14557510510�015753� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no traditional japanese locale is installed" else echo "Skipping test: no traditional japanese locale is supported" fi exit 77 fi LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-mbrtoc32${EXEEXT} 4 ����������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32-5.sh�������������������������������������������������0000755�0001750�0001750�00000000620�14557510510�015742� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no transitional chinese locale is installed" else echo "Skipping test: no transitional chinese locale is supported" fi exit 77 fi LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-mbrtoc32${EXEEXT} 5 ����������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32-w32-2.sh���������������������������������������������0000755�0001750�0001750�00000000136�14557510510�016352� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1252 locale. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} French_France 1252 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32-w32-3.sh���������������������������������������������0000755�0001750�0001750�00000000146�14557510510�016354� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1256 locale. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32-w32-4.sh���������������������������������������������0000755�0001750�0001750�00000000216�14557510510�016353� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test some UTF-8 locales. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32-w32-5.sh���������������������������������������������0000755�0001750�0001750�00000000135�14557510510�016354� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP932 locale. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Japanese_Japan 932 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32-w32-6.sh���������������������������������������������0000755�0001750�0001750�00000000135�14557510510�016355� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP950 locale. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Chinese_Taiwan 950 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32-w32-7.sh���������������������������������������������0000755�0001750�0001750�00000000134�14557510510�016355� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP936 locale. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Chinese_China 936 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtoc32-w32-8.sh���������������������������������������������0000755�0001750�0001750�00000000140�14557510510�016353� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a GB18030 locale. ${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Chinese_China 54936 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc-1.sh��������������������������������������������������0000755�0001750�0001750�00000000300�14557510510�015753� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether the POSIX locale has encoding errors. LC_ALL=C \ ${CHECKER} ./test-mbrtowc${EXEEXT} 1 || exit 1 LC_ALL=POSIX \ ${CHECKER} ./test-mbrtowc${EXEEXT} 1 || exit 1 exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc-2.sh��������������������������������������������������0000755�0001750�0001750�00000000562�14557510510�015766� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no traditional french locale is installed" else echo "Skipping test: no traditional french locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-mbrtowc${EXEEXT} 2 ����������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc-3.sh��������������������������������������������������0000755�0001750�0001750�00000000605�14557510510�015765� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no french Unicode locale is installed" else echo "Skipping test: no french Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-mbrtowc${EXEEXT} 3 ���������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc-4.sh��������������������������������������������������0000755�0001750�0001750�00000000575�14557510510�015774� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no traditional japanese locale is installed" else echo "Skipping test: no traditional japanese locale is supported" fi exit 77 fi LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-mbrtowc${EXEEXT} 4 �����������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc-5.sh��������������������������������������������������0000755�0001750�0001750�00000000617�14557510510�015772� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no transitional chinese locale is installed" else echo "Skipping test: no transitional chinese locale is supported" fi exit 77 fi LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-mbrtowc${EXEEXT} 5 �����������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc-w32-2.sh����������������������������������������������0000755�0001750�0001750�00000000135�14557510510�016373� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1252 locale. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} French_France 1252 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc-w32-3.sh����������������������������������������������0000755�0001750�0001750�00000000145�14557510510�016375� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1256 locale. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc-w32-4.sh����������������������������������������������0000755�0001750�0001750�00000000215�14557510510�016374� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test some UTF-8 locales. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc-w32-5.sh����������������������������������������������0000755�0001750�0001750�00000000134�14557510510�016375� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP932 locale. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} Japanese_Japan 932 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc-w32-6.sh����������������������������������������������0000755�0001750�0001750�00000000134�14557510510�016376� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP950 locale. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_Taiwan 950 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc-w32-7.sh����������������������������������������������0000755�0001750�0001750�00000000133�14557510510�016376� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP936 locale. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_China 936 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbrtowc-w32-8.sh����������������������������������������������0000755�0001750�0001750�00000000137�14557510510�016403� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a GB18030 locale. ${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_China 54936 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbschr.sh�����������������������������������������������������0000755�0001750�0001750�00000000602�14557510510�015423� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no chinese GB18030 locale is installed" else echo "Skipping test: no chinese GB18030 locale is supported" fi exit 77 fi LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-mbschr${EXEEXT} ������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbsinit.sh����������������������������������������������������0000755�0001750�0001750�00000000603�14557510510�015613� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no french Unicode locale is installed" else echo "Skipping test: no french Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-mbsinit${EXEEXT} �����������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbspbrk.sh����������������������������������������������������0000755�0001750�0001750�00000000603�14557510510�015606� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no french Unicode locale is installed" else echo "Skipping test: no french Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-mbspbrk${EXEEXT} �����������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-mbsspn.sh�����������������������������������������������������0000755�0001750�0001750�00000000602�14557510510�015447� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no french Unicode locale is installed" else echo "Skipping test: no french Unicode locale is supported" fi exit 77 fi LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-mbsspn${EXEEXT} ������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/zerosize-ptr.h�����������������������������������������������������0000644�0001750�0001750�00000006104�14557510511�015463� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return a pointer to a zero-size object in memory. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* ISO C 99 does not allow memcmp(), memchr() etc. to be invoked with a NULL argument. Therefore this file produces a non-NULL pointer which cannot be dereferenced, if possible. */ /* On Android, when targeting Android 4.4 or older with a GCC toolchain, prevent a compilation error "error: call to 'mmap' declared with attribute error: mmap is not available with _FILE_OFFSET_BITS=64 when using GCC until android-21. Either raise your minSdkVersion, disable _FILE_OFFSET_BITS=64, or switch to Clang." The files that we access in this compilation unit are less than 2 GB large. */ #if defined __ANDROID__ # undef _FILE_OFFSET_BITS # undef __USE_FILE_OFFSET64 #endif #include <stdlib.h> /* Test whether mmap() and mprotect() are available. We don't use HAVE_MMAP, because AC_FUNC_MMAP would not define it on HP-UX. HAVE_MPROTECT is not enough, because mingw does not have mmap() but has an mprotect() function in libgcc.a. And OS/2 kLIBC has <sys/mman.h> and mprotect(), but not mmap(). */ #if HAVE_SYS_MMAN_H && HAVE_MPROTECT && !defined __KLIBC__ # include <fcntl.h> # include <unistd.h> # include <sys/types.h> # include <sys/mman.h> /* Define MAP_FILE when it isn't otherwise. */ # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif /* Return a pointer to a zero-size object in memory (that is, actually, a pointer to a page boundary where the previous page is readable and writable and the next page is neither readable not writable), if possible. Return NULL otherwise. */ static void * zerosize_ptr (void) { /* Use mmap and mprotect when they exist. Don't test HAVE_MMAP, because it is not defined on HP-UX 11 (since it does not support MAP_FIXED). */ #if HAVE_SYS_MMAN_H && HAVE_MPROTECT && !defined __KLIBC__ # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) return two_pages + pagesize; } #endif return NULL; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/netinet_in.in.h����������������������������������������������������0000644�0001750�0001750�00000002536�14557510507�015561� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <netinet/in.h>. Copyright (C) 2007-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_NETINET_IN_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_NETINET_IN_H@ /* On many platforms, <netinet/in.h> assumes prior inclusion of <sys/types.h>. */ # include <sys/types.h> /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_NETINET_IN_H@ #endif #ifndef _@GUARD_PREFIX@_NETINET_IN_H #define _@GUARD_PREFIX@_NETINET_IN_H #if !@HAVE_NETINET_IN_H@ /* A platform that lacks <netinet/in.h>. */ # include <sys/socket.h> #endif #endif /* _@GUARD_PREFIX@_NETINET_IN_H */ #endif /* _@GUARD_PREFIX@_NETINET_IN_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-nl_langinfo1.sh�����������������������������������������������0000755�0001750�0001750�00000000735�14557510510�016523� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh LC_ALL=C ${CHECKER} ./test-nl_langinfo1${EXEEXT} 0 || exit 1 # Test whether a specific traditional locale is installed. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR ${CHECKER} ./test-nl_langinfo1${EXEEXT} 1 || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 ${CHECKER} ./test-nl_langinfo1${EXEEXT} 2 || exit 1 fi exit 0 �����������������������������������gnuastro-0.22/bootstrapped/tests/test-nl_langinfo2.sh�����������������������������������������������0000755�0001750�0001750�00000000424�14557510510�016517� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # The name of a specific traditional locale. : "${LOCALE_FR=fr_FR}" # The name of a specific UTF-8 locale. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" # Make them accessible as environment variables. export LOCALE_FR LOCALE_FR_UTF8 ${CHECKER} ./test-nl_langinfo2${EXEEXT} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-open.h��������������������������������������������������������0000644�0001750�0001750�00000010266�14557510510�014727� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of opening a file descriptor. Copyright (C) 2007-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ /* Tell GCC not to warn about the specific edge cases tested here. */ #if __GNUC__ >= 13 # pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" #endif /* Make test_open always inline if we're using Fortify, which defines __always_inline to do that. Do nothing otherwise. This works around a glibc bug whereby 'open' cannot be used as a function pointer when _FORTIFY_SOURCE is positive. */ #if __GLIBC__ && defined __always_inline # define ALWAYS_INLINE __always_inline #else # define ALWAYS_INLINE #endif /* This file is designed to test both open(n,buf[,mode]) and openat(AT_FDCWD,n,buf[,mode]). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static ALWAYS_INLINE int test_open (int (*func) (char const *, int, ...), bool print) { int fd; /* Remove anything from prior partial run. */ unlink (BASE "file"); unlink (BASE "e.exe"); unlink (BASE "link"); /* Cannot create directory. */ errno = 0; ASSERT (func ("nonexist.ent/", O_CREAT | O_RDONLY, 0600) == -1); ASSERT (errno == ENOTDIR || errno == EISDIR || errno == ENOENT || errno == EINVAL); /* Create a regular file. */ fd = func (BASE "file", O_CREAT | O_RDONLY, 0600); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* Create an executable regular file. */ fd = func (BASE "e.exe", O_CREAT | O_RDONLY, 0700); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* Trailing slash handling. */ errno = 0; ASSERT (func (BASE "file/", O_RDONLY) == -1); ASSERT (errno == ENOTDIR || errno == EISDIR || errno == EINVAL); /* Directories cannot be opened for writing. */ errno = 0; ASSERT (func (".", O_WRONLY) == -1); ASSERT (errno == EISDIR || errno == EACCES); /* /dev/null must exist, and be writable. */ fd = func ("/dev/null", O_RDONLY); ASSERT (0 <= fd); { char c; ASSERT (read (fd, &c, 1) == 0); } ASSERT (close (fd) == 0); fd = func ("/dev/null", O_WRONLY); ASSERT (0 <= fd); ASSERT (write (fd, "c", 1) == 1); ASSERT (close (fd) == 0); /* Although O_NONBLOCK on regular files can be ignored, it must not cause a failure. */ fd = func (BASE "file", O_NONBLOCK | O_RDONLY); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* O_CLOEXEC must be honoured. */ if (O_CLOEXEC) { /* Since the O_CLOEXEC handling goes through a special code path at its first invocation, test it twice. */ int i; for (i = 0; i < 2; i++) { int flags; fd = func (BASE "file", O_CLOEXEC | O_RDONLY); ASSERT (0 <= fd); flags = fcntl (fd, F_GETFD); ASSERT (flags >= 0); ASSERT ((flags & FD_CLOEXEC) != 0); ASSERT (close (fd) == 0); } } /* Symlink handling, where supported. */ if (symlink (BASE "file", BASE "link") != 0) { ASSERT (unlink (BASE "file") == 0); if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } errno = 0; ASSERT (func (BASE "link/", O_RDONLY) == -1); ASSERT (errno == ENOTDIR); fd = func (BASE "link", O_RDONLY); ASSERT (0 <= fd); ASSERT (close (fd) == 0); /* Cleanup. */ ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "e.exe") == 0); ASSERT (unlink (BASE "link") == 0); return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-perror.sh�����������������������������������������������������0000755�0001750�0001750�00000001761�14557510510�015465� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : "${srcdir=.}" . "$srcdir/init.sh"; path_prepend_ . # Test NULL prefix. Result should not contain a number, except in lines that # start with 'EDC' (IBM z/OS libc produces an error identifier before the # error message). ${CHECKER} test-perror 2>&1 >/dev/null | LC_ALL=C tr -d '\r' > t-perror.tmp grep -v '^EDC' t-perror.tmp | grep '[0-9]' > /dev/null \ && fail_ "result should not contain a number" # Test empty prefix. Result should be the same. ${CHECKER} test-perror '' 2>&1 >/dev/null | LC_ALL=C tr -d '\r' > t-perror1.tmp diff t-perror.tmp t-perror1.tmp \ || fail_ "empty prefix should behave like NULL argument" # Test non-empty prefix. ${CHECKER} test-perror foo 2>&1 >/dev/null | LC_ALL=C tr -d '\r' > t-perror3.tmp sed -e 's/^/foo: /' < t-perror.tmp > t-perror2.tmp diff t-perror2.tmp t-perror3.tmp || fail_ "prefix applied incorrectly" # Test exit status. ${CHECKER} test-perror >out 2>/dev/null || fail_ "unexpected exit status" test -s out && fail_ "unexpected output" Exit 0 ���������������gnuastro-0.22/bootstrapped/tests/test-select.h������������������������������������������������������0000644�0001750�0001750�00000026570�14557510510�015252� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of select() substitute. Copyright (C) 2008-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini, 2008. */ #include <stdio.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <fcntl.h> #include <stdlib.h> #include <sys/ioctl.h> #include <errno.h> #include "macros.h" #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #ifdef HAVE_SYS_WAIT_H # include <sys/wait.h> #endif /* Tell GCC not to warn about the specific edge cases tested here. */ #if __GNUC__ >= 13 # pragma GCC diagnostic ignored "-Wanalyzer-fd-use-without-check" #endif typedef int (*select_fn) (int, fd_set *, fd_set *, fd_set *, struct timeval *); /* Minimal testing infrastructure. */ static int failures; static void failed (const char *reason) { if (++failures > 1) printf (" "); printf ("failed (%s)\n", reason); } static int test (void (*fn) (select_fn), select_fn my_select, const char *msg) { failures = 0; printf ("%s... ", msg); fflush (stdout); fn (my_select); if (!failures) printf ("passed\n"); return failures; } /* Funny socket code. */ static int open_server_socket (void) { int s, x; struct sockaddr_in ia; s = socket (AF_INET, SOCK_STREAM, 0); x = 1; setsockopt (s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof (x)); memset (&ia, 0, sizeof (ia)); ia.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &ia.sin_addr); ia.sin_port = htons (TEST_PORT); if (bind (s, (struct sockaddr *) &ia, sizeof (ia)) < 0) { perror ("bind"); exit (77); } if (listen (s, 1) < 0) { perror ("listen"); exit (77); } return s; } static int connect_to_socket (bool blocking) { int s; struct sockaddr_in ia; s = socket (AF_INET, SOCK_STREAM, 0); memset (&ia, 0, sizeof (ia)); ia.sin_family = AF_INET; inet_pton (AF_INET, "127.0.0.1", &ia.sin_addr); ia.sin_port = htons (TEST_PORT); if (!blocking) { #ifdef WINDOWS_NATIVE unsigned long iMode = 1; ioctl (s, FIONBIO, (char *) &iMode); #elif defined F_GETFL int oldflags = fcntl (s, F_GETFL, NULL); if (!(oldflags & O_NONBLOCK)) fcntl (s, F_SETFL, oldflags | O_NONBLOCK); #endif } if (connect (s, (struct sockaddr *) &ia, sizeof (ia)) < 0 && (blocking || errno != EINPROGRESS)) { perror ("connect"); exit (77); } return s; } /* A slightly more convenient interface to select(2). Waits until a specific event occurs on a file descriptor FD. EV is a bit mask of events to look for: SEL_IN - input can be polled without blocking, SEL_OUT - output can be provided without blocking, SEL_EXC - an exception occurred, A maximum wait time is specified by TIMEOUT. *TIMEOUT = { 0, 0 } means to return immediately, TIMEOUT = NULL means to wait indefinitely. */ enum { SEL_IN = 1, SEL_OUT = 2, SEL_EXC = 4 }; static int do_select (int fd, int ev, struct timeval *timeout, select_fn my_select) { fd_set rfds, wfds, xfds; int r, rev; FD_ZERO (&rfds); FD_ZERO (&wfds); FD_ZERO (&xfds); if (ev & SEL_IN) FD_SET (fd, &rfds); if (ev & SEL_OUT) FD_SET (fd, &wfds); if (ev & SEL_EXC) FD_SET (fd, &xfds); r = my_select (fd + 1, &rfds, &wfds, &xfds, timeout); if (r < 0) return r; rev = 0; if (FD_ISSET (fd, &rfds)) rev |= SEL_IN; if (FD_ISSET (fd, &wfds)) rev |= SEL_OUT; if (FD_ISSET (fd, &xfds)) rev |= SEL_EXC; if (rev && r == 0) failed ("select returned 0"); if (rev & ~ev) failed ("select returned unrequested events"); return rev; } static int do_select_nowait (int fd, int ev, select_fn my_select) { struct timeval tv0; tv0.tv_sec = 0; tv0.tv_usec = 0; return do_select (fd, ev, &tv0, my_select); } static int do_select_wait (int fd, int ev, select_fn my_select) { return do_select (fd, ev, NULL, my_select); } /* Test select(2) for TTYs. */ #ifdef INTERACTIVE static void test_tty (select_fn my_select) { if (do_select_nowait (0, SEL_IN, my_select) != 0) failed ("can read"); if (do_select_nowait (0, SEL_OUT, my_select) == 0) failed ("cannot write"); if (do_select_wait (0, SEL_IN, my_select) == 0) failed ("return with infinite timeout"); getchar (); if (do_select_nowait (0, SEL_IN, my_select) != 0) failed ("can read after getc"); } #endif static int do_select_bad_nfd_nowait (int nfd, select_fn my_select) { struct timeval tv0; tv0.tv_sec = 0; tv0.tv_usec = 0; errno = 0; return my_select (nfd, NULL, NULL, NULL, &tv0); } static void test_bad_nfd (select_fn my_select) { if (do_select_bad_nfd_nowait (-1, my_select) != -1 || errno != EINVAL) failed ("invalid errno after negative nfds"); /* Can't test FD_SETSIZE + 1 for EINVAL, since some systems allow dynamically larger set size by redefining FD_SETSIZE anywhere up to the actual maximum fd. */ #if 0 if (do_select_bad_nfd_nowait (FD_SETSIZE + 1, my_select) != -1 || errno != EINVAL) failed ("invalid errno after bogus nfds"); #endif } /* Test select(2) on invalid file descriptors. */ static int do_select_bad_fd (int fd, int ev, struct timeval *timeout, select_fn my_select) { fd_set rfds, wfds, xfds; FD_ZERO (&rfds); FD_ZERO (&wfds); FD_ZERO (&xfds); if (ev & SEL_IN) FD_SET (fd, &rfds); if (ev & SEL_OUT) FD_SET (fd, &wfds); if (ev & SEL_EXC) FD_SET (fd, &xfds); errno = 0; return my_select (fd + 1, &rfds, &wfds, &xfds, timeout); /* In this case, when fd is invalid, on some platforms, the bit for fd is left alone in the fd_set, whereas on other platforms it is cleared. So, don't check the bit for fd here. */ } static int do_select_bad_fd_nowait (int fd, int ev, select_fn my_select) { struct timeval tv0; tv0.tv_sec = 0; tv0.tv_usec = 0; return do_select_bad_fd (fd, ev, &tv0, my_select); } static void test_bad_fd (select_fn my_select) { /* This tests fails on OSF/1 and native Windows, even with fd = 16. */ #if !(defined __osf__ || defined WINDOWS_NATIVE) int fd; /* On Linux, Mac OS X, *BSD, values of fd like 99 or 399 are discarded by the kernel early and therefore do *not* lead to EBADF, as required by POSIX. */ # if defined __linux__ || (defined __APPLE__ && defined __MACH__) || (defined __FreeBSD__ || defined __DragonFly__) || defined __OpenBSD__ || defined __NetBSD__ fd = 14; # else fd = 99; # endif /* Even on the best POSIX compliant platforms, values of fd >= FD_SETSIZE require an nfds argument that is > FD_SETSIZE and thus may lead to EINVAL, not EBADF. */ if (fd >= FD_SETSIZE) fd = FD_SETSIZE - 1; close (fd); if (do_select_bad_fd_nowait (fd, SEL_IN, my_select) == 0 || errno != EBADF) failed ("invalid fd among rfds"); if (do_select_bad_fd_nowait (fd, SEL_OUT, my_select) == 0 || errno != EBADF) failed ("invalid fd among wfds"); if (do_select_bad_fd_nowait (fd, SEL_EXC, my_select) == 0 || errno != EBADF) failed ("invalid fd among xfds"); #endif } /* Test select(2) for unconnected nonblocking sockets. */ static void test_connect_first (select_fn my_select) { int s = open_server_socket (); struct sockaddr_in ia; socklen_t addrlen; int c1, c2; if (do_select_nowait (s, SEL_IN | SEL_EXC, my_select) != 0) failed ("can read, socket not connected"); c1 = connect_to_socket (false); if (do_select_wait (s, SEL_IN | SEL_EXC, my_select) != SEL_IN) failed ("expecting readability on passive socket"); if (do_select_nowait (s, SEL_IN | SEL_EXC, my_select) != SEL_IN) failed ("expecting readability on passive socket"); addrlen = sizeof (ia); c2 = accept (s, (struct sockaddr *) &ia, &addrlen); ASSERT (close (s) == 0); ASSERT (close (c1) == 0); ASSERT (close (c2) == 0); } /* Test select(2) for unconnected blocking sockets. */ static void test_accept_first (select_fn my_select) { #ifndef WINDOWS_NATIVE int s = open_server_socket (); struct sockaddr_in ia; socklen_t addrlen; char buf[3]; int c, pid; pid = fork (); if (pid < 0) return; if (pid == 0) { addrlen = sizeof (ia); c = accept (s, (struct sockaddr *) &ia, &addrlen); ASSERT (close (s) == 0); ASSERT (write (c, "foo", 3) == 3); ASSERT (read (c, buf, 3) == 3); shutdown (c, SHUT_RD); ASSERT (close (c) == 0); exit (0); } else { ASSERT (close (s) == 0); c = connect_to_socket (true); if (do_select_nowait (c, SEL_OUT, my_select) != SEL_OUT) failed ("cannot write after blocking connect"); ASSERT (write (c, "foo", 3) == 3); wait (&pid); if (do_select_wait (c, SEL_IN, my_select) != SEL_IN) failed ("cannot read data left in the socket by closed process"); ASSERT (read (c, buf, 3) == 3); ASSERT (write (c, "foo", 3) == 3); (void) close (c); /* may fail with errno = ECONNRESET */ } #endif } /* Common code for pipes and connected sockets. */ static void test_pair (int rd, int wd, select_fn my_select) { char buf[3]; if (do_select_wait (wd, SEL_IN | SEL_OUT | SEL_EXC, my_select) != SEL_OUT) failed ("expecting writability before writing"); if (do_select_nowait (wd, SEL_IN | SEL_OUT | SEL_EXC, my_select) != SEL_OUT) failed ("expecting writability before writing"); ASSERT (write (wd, "foo", 3) == 3); if (do_select_wait (rd, SEL_IN, my_select) != SEL_IN) failed ("expecting readability after writing"); if (do_select_nowait (rd, SEL_IN, my_select) != SEL_IN) failed ("expecting readability after writing"); ASSERT (read (rd, buf, 3) == 3); } /* Test select(2) on connected sockets. */ static void test_socket_pair (select_fn my_select) { struct sockaddr_in ia; socklen_t addrlen = sizeof (ia); int s = open_server_socket (); int c1 = connect_to_socket (false); int c2 = accept (s, (struct sockaddr *) &ia, &addrlen); ASSERT (close (s) == 0); test_pair (c1, c2, my_select); ASSERT (close (c1) == 0); ASSERT (write (c2, "foo", 3) == 3); (void) close (c2); /* may fail with errno = ECONNRESET */ } /* Test select(2) on pipes. */ static void test_pipe (select_fn my_select) { int fd[2]; ASSERT (pipe (fd) == 0); test_pair (fd[0], fd[1], my_select); ASSERT (close (fd[0]) == 0); ASSERT (close (fd[1]) == 0); } /* Do them all. */ static int test_function (select_fn my_select) { int result = 0; #ifdef INTERACTIVE printf ("Please press Enter\n"); test (test_tty, "TTY", my_select); #endif result += test (test_bad_nfd, my_select, "Invalid nfd test"); result += test (test_bad_fd, my_select, "Invalid fd test"); result += test (test_connect_first, my_select, "Unconnected socket test"); result += test (test_socket_pair, my_select, "Connected sockets test"); result += test (test_accept_first, my_select, "General socket test with fork"); result += test (test_pipe, my_select, "Pipe test"); return result; } ����������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/pthread.in.h�������������������������������������������������������0000644�0001750�0001750�00000217013�14557510507�015052� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Implement the most essential subset of POSIX 1003.1-2008 pthread.h. Copyright (C) 2009-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert, Glen Lenker, and Bruno Haible. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_PTHREAD_H /* Special invocation convention: On Android, we have a sequence of nested includes <pthread.h> -> <time.h> -> <sys/time.h> -> <sys/select.h> -> <signal.h> -> <pthread.h>. In this situation, PTHREAD_COND_INITIALIZER is not yet defined, therefore we should not attempt to define PTHREAD_MUTEX_NORMAL etc. */ #@INCLUDE_NEXT@ @NEXT_PTHREAD_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_PTHREAD_H_ #if @HAVE_PTHREAD_H@ # define _GL_ALREADY_INCLUDING_PTHREAD_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_PTHREAD_H@ # undef _GL_ALREADY_INCLUDING_PTHREAD_H #endif #ifndef _@GUARD_PREFIX@_PTHREAD_H_ #define _@GUARD_PREFIX@_PTHREAD_H_ /* This file uses _Noreturn, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #define __need_system_stdlib_h #include <stdlib.h> #undef __need_system_stdlib_h /* The pthreads-win32 <pthread.h> defines a couple of broken macros. */ #undef asctime_r #undef ctime_r #undef gmtime_r #undef localtime_r #undef rand_r #undef strtok_r #include <errno.h> #include <sched.h> #include <sys/types.h> #include <time.h> /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _Noreturn is copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* =========== Thread types and macros =========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_THREAD@ # include "windows-thread.h" # if @HAVE_PTHREAD_T@ # define pthread_t rpl_pthread_t # define pthread_attr_t rpl_pthread_attr_t # endif # if !GNULIB_defined_pthread_thread_types typedef glwthread_thread_t pthread_t; typedef unsigned int pthread_attr_t; # define GNULIB_defined_pthread_thread_types 1 # endif # else # if @HAVE_PTHREAD_T@ # define pthread_t rpl_pthread_t # define pthread_attr_t rpl_pthread_attr_t # endif # if !GNULIB_defined_pthread_thread_types typedef int pthread_t; typedef unsigned int pthread_attr_t; # define GNULIB_defined_pthread_thread_types 1 # endif # endif # undef PTHREAD_CREATE_JOINABLE # undef PTHREAD_CREATE_DETACHED # define PTHREAD_CREATE_JOINABLE 0 # define PTHREAD_CREATE_DETACHED 1 #else # if !@HAVE_PTHREAD_T@ # if !GNULIB_defined_pthread_thread_types typedef int pthread_t; typedef unsigned int pthread_attr_t; # define GNULIB_defined_pthread_thread_types 1 # endif # endif # if !@HAVE_PTHREAD_CREATE_DETACHED@ # define PTHREAD_CREATE_JOINABLE 0 # define PTHREAD_CREATE_DETACHED 1 # endif #endif /* =========== Once-only control (initialization) types and macros ========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_ONCE@ # include "windows-once.h" # if @HAVE_PTHREAD_T@ # define pthread_once_t rpl_pthread_once_t # endif # if !GNULIB_defined_pthread_once_types typedef glwthread_once_t pthread_once_t; # define GNULIB_defined_pthread_once_types 1 # endif # undef PTHREAD_ONCE_INIT # define PTHREAD_ONCE_INIT GLWTHREAD_ONCE_INIT # else # if @HAVE_PTHREAD_T@ # define pthread_once_t rpl_pthread_once_t # endif # if !GNULIB_defined_pthread_once_types typedef int pthread_once_t; # define GNULIB_defined_pthread_once_types 1 # endif # undef PTHREAD_ONCE_INIT # define PTHREAD_ONCE_INIT { 0 } # endif #else # if !@HAVE_PTHREAD_T@ # if !GNULIB_defined_pthread_once_types typedef int pthread_once_t; # define GNULIB_defined_pthread_once_types 1 # endif # undef PTHREAD_ONCE_INIT # define PTHREAD_ONCE_INIT { 0 } # endif #endif /* =========== Mutex types and macros =========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_MUTEX@ # include "windows-timedmutex.h" # include "windows-timedrecmutex.h" # if @HAVE_PTHREAD_T@ # define pthread_mutex_t rpl_pthread_mutex_t # define pthread_mutexattr_t rpl_pthread_mutexattr_t # endif # if !GNULIB_defined_pthread_mutex_types typedef struct { int type; union { glwthread_timedmutex_t u_timedmutex; glwthread_timedrecmutex_t u_timedrecmutex; } u; } pthread_mutex_t; typedef unsigned int pthread_mutexattr_t; # define GNULIB_defined_pthread_mutex_types 1 # endif # undef PTHREAD_MUTEX_INITIALIZER # define PTHREAD_MUTEX_INITIALIZER { 1, { GLWTHREAD_TIMEDMUTEX_INIT } } # else # if @HAVE_PTHREAD_T@ # define pthread_mutex_t rpl_pthread_mutex_t # define pthread_mutexattr_t rpl_pthread_mutexattr_t # endif # if !GNULIB_defined_pthread_mutex_types typedef int pthread_mutex_t; typedef unsigned int pthread_mutexattr_t; # define GNULIB_defined_pthread_mutex_types 1 # endif # undef PTHREAD_MUTEX_INITIALIZER # define PTHREAD_MUTEX_INITIALIZER { 0 } # endif # undef PTHREAD_MUTEX_DEFAULT # undef PTHREAD_MUTEX_NORMAL # undef PTHREAD_MUTEX_ERRORCHECK # undef PTHREAD_MUTEX_RECURSIVE # define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL # define PTHREAD_MUTEX_NORMAL 0 # define PTHREAD_MUTEX_ERRORCHECK 1 # define PTHREAD_MUTEX_RECURSIVE 2 # undef PTHREAD_MUTEX_STALLED # undef PTHREAD_MUTEX_ROBUST # define PTHREAD_MUTEX_STALLED 0 # define PTHREAD_MUTEX_ROBUST 1 #else # if !@HAVE_PTHREAD_T@ # if !GNULIB_defined_pthread_mutex_types typedef int pthread_mutex_t; typedef unsigned int pthread_mutexattr_t; # define GNULIB_defined_pthread_mutex_types 1 # endif # undef PTHREAD_MUTEX_INITIALIZER # define PTHREAD_MUTEX_INITIALIZER { 0 } # endif # if !@HAVE_PTHREAD_MUTEX_RECURSIVE@ # define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL # define PTHREAD_MUTEX_NORMAL 0 # define PTHREAD_MUTEX_ERRORCHECK 1 # define PTHREAD_MUTEX_RECURSIVE 2 # endif # if !@HAVE_PTHREAD_MUTEX_ROBUST@ # define PTHREAD_MUTEX_STALLED 0 # define PTHREAD_MUTEX_ROBUST 1 # endif #endif /* =========== Read-write lock types and macros =========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_RWLOCK@ # include "windows-timedrwlock.h" # if @HAVE_PTHREAD_T@ # define pthread_rwlock_t rpl_pthread_rwlock_t # define pthread_rwlockattr_t rpl_pthread_rwlockattr_t # endif # if !GNULIB_defined_pthread_rwlock_types typedef glwthread_timedrwlock_t pthread_rwlock_t; typedef unsigned int pthread_rwlockattr_t; # define GNULIB_defined_pthread_rwlock_types 1 # endif # undef PTHREAD_RWLOCK_INITIALIZER # define PTHREAD_RWLOCK_INITIALIZER GLWTHREAD_TIMEDRWLOCK_INIT # else # if @HAVE_PTHREAD_T@ # define pthread_rwlock_t rpl_pthread_rwlock_t # define pthread_rwlockattr_t rpl_pthread_rwlockattr_t # endif # if !GNULIB_defined_pthread_rwlock_types typedef int pthread_rwlock_t; typedef unsigned int pthread_rwlockattr_t; # define GNULIB_defined_pthread_rwlock_types 1 # endif # undef PTHREAD_RWLOCK_INITIALIZER # define PTHREAD_RWLOCK_INITIALIZER { 0 } # endif #elif @GNULIB_PTHREAD_RWLOCK@ && @REPLACE_PTHREAD_RWLOCK_INIT@ /* i.e. PTHREAD_RWLOCK_UNIMPLEMENTED */ # if @HAVE_PTHREAD_T@ # define pthread_rwlock_t rpl_pthread_rwlock_t # define pthread_rwlockattr_t rpl_pthread_rwlockattr_t # endif # if !GNULIB_defined_pthread_rwlock_types typedef struct { pthread_mutex_t lock; /* protects the remaining fields */ pthread_cond_t waiting_readers; /* waiting readers */ pthread_cond_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } pthread_rwlock_t; typedef unsigned int pthread_rwlockattr_t; # define GNULIB_defined_pthread_rwlock_types 1 # endif # undef PTHREAD_RWLOCK_INITIALIZER # define PTHREAD_RWLOCK_INITIALIZER \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } #else # if @HAVE_PTHREAD_T@ # if !defined PTHREAD_RWLOCK_INITIALIZER && defined PTHREAD_RWLOCK_INITIALIZER_NP /* z/OS */ # define PTHREAD_RWLOCK_INITIALIZER PTHREAD_RWLOCK_INITIALIZER_NP # endif # else # if !GNULIB_defined_pthread_rwlock_types typedef int pthread_rwlock_t; typedef unsigned int pthread_rwlockattr_t; # define GNULIB_defined_pthread_rwlock_types 1 # endif # undef PTHREAD_RWLOCK_INITIALIZER # define PTHREAD_RWLOCK_INITIALIZER { 0 } # endif #endif /* =========== Condition variable types and macros =========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_COND@ # include "windows-cond.h" # if @HAVE_PTHREAD_T@ # define pthread_cond_t rpl_pthread_cond_t # define pthread_condattr_t rpl_pthread_condattr_t # endif # if !GNULIB_defined_pthread_cond_types typedef glwthread_cond_t pthread_cond_t; typedef unsigned int pthread_condattr_t; # define GNULIB_defined_pthread_cond_types 1 # endif # undef PTHREAD_COND_INITIALIZER # define PTHREAD_COND_INITIALIZER GLWTHREAD_COND_INIT # else # if @HAVE_PTHREAD_T@ # define pthread_cond_t rpl_pthread_cond_t # define pthread_condattr_t rpl_pthread_condattr_t # endif # if !GNULIB_defined_pthread_cond_types typedef int pthread_cond_t; typedef unsigned int pthread_condattr_t; # define GNULIB_defined_pthread_cond_types 1 # endif # undef PTHREAD_COND_INITIALIZER # define PTHREAD_COND_INITIALIZER { 0 } # endif #else # if !@HAVE_PTHREAD_T@ # if !GNULIB_defined_pthread_cond_types typedef int pthread_cond_t; typedef unsigned int pthread_condattr_t; # define GNULIB_defined_pthread_cond_types 1 # endif # undef PTHREAD_COND_INITIALIZER # define PTHREAD_COND_INITIALIZER { 0 } # endif #endif /* =========== Thread-specific storage types and macros =========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_TSS@ # include "windows-tls.h" # if @HAVE_PTHREAD_T@ # define pthread_key_t rpl_pthread_key_t # endif # if !GNULIB_defined_pthread_tss_types typedef glwthread_tls_key_t pthread_key_t; # define GNULIB_defined_pthread_tss_types 1 # endif # undef PTHREAD_DESTRUCTOR_ITERATIONS # define PTHREAD_DESTRUCTOR_ITERATIONS GLWTHREAD_DESTRUCTOR_ITERATIONS # else # if @HAVE_PTHREAD_T@ # define pthread_key_t rpl_pthread_key_t # endif # if !GNULIB_defined_pthread_tss_types typedef void ** pthread_key_t; # define GNULIB_defined_pthread_tss_types 1 # endif # undef PTHREAD_DESTRUCTOR_ITERATIONS # define PTHREAD_DESTRUCTOR_ITERATIONS 0 # endif #else # if !@HAVE_PTHREAD_T@ # if !GNULIB_defined_pthread_tss_types typedef void ** pthread_key_t; # define GNULIB_defined_pthread_tss_types 1 # endif # undef PTHREAD_DESTRUCTOR_ITERATIONS # define PTHREAD_DESTRUCTOR_ITERATIONS 0 # endif #endif /* =========== Spinlock types and macros =========== */ #if (defined _WIN32 && ! defined __CYGWIN__) && USE_WINDOWS_THREADS # if @GNULIB_PTHREAD_SPIN@ # include "windows-spin.h" # if @HAVE_PTHREAD_T@ # define pthread_spinlock_t rpl_pthread_spinlock_t # endif # if !GNULIB_defined_pthread_spin_types typedef glwthread_spinlock_t pthread_spinlock_t; # define GNULIB_defined_pthread_spin_types 1 # endif # else # if @HAVE_PTHREAD_T@ # define pthread_spinlock_t rpl_pthread_spinlock_t # endif # if !GNULIB_defined_pthread_spin_types typedef pthread_mutex_t pthread_spinlock_t; # define GNULIB_defined_pthread_spin_types 1 # endif # endif # undef PTHREAD_PROCESS_PRIVATE # undef PTHREAD_PROCESS_SHARED # define PTHREAD_PROCESS_PRIVATE 0 # define PTHREAD_PROCESS_SHARED 1 #else # if @HAVE_PTHREAD_SPINLOCK_T@ /* <pthread.h> exists and defines pthread_spinlock_t. */ # if !(((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) \ || __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) \ || (((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) \ && !defined __ANDROID__) \ || __clang_major__ >= 3)) \ && !defined __ibmxl__) /* We can't use GCC built-ins. Approximate spinlocks with mutexes. */ # if !GNULIB_defined_pthread_spin_types # define pthread_spinlock_t pthread_mutex_t # define GNULIB_defined_pthread_spin_types 1 # endif # endif # else /* Approximate spinlocks with mutexes. */ # if !GNULIB_defined_pthread_spin_types typedef pthread_mutex_t pthread_spinlock_t; # define GNULIB_defined_pthread_spin_types 1 # endif # endif # if !@HAVE_PTHREAD_PROCESS_SHARED@ # define PTHREAD_PROCESS_PRIVATE 0 # define PTHREAD_PROCESS_SHARED 1 # endif #endif /* =========== Other types and macros =========== */ #if !@HAVE_PTHREAD_T@ # if !GNULIB_defined_other_pthread_types typedef int pthread_barrier_t; typedef unsigned int pthread_barrierattr_t; # define GNULIB_defined_other_pthread_types 1 # endif #endif #if !defined PTHREAD_CANCELED # define PTHREAD_BARRIER_SERIAL_THREAD (-1) # define PTHREAD_CANCEL_DEFERRED 0 # define PTHREAD_CANCEL_ASYNCHRONOUS 1 # define PTHREAD_CANCEL_ENABLE 0 # define PTHREAD_CANCEL_DISABLE 1 # define PTHREAD_CANCELED ((void *) -1) # define PTHREAD_INHERIT_SCHED 0 # define PTHREAD_EXPLICIT_SCHED 1 # define PTHREAD_PRIO_NONE 0 # define PTHREAD_PRIO_INHERIT 1 # define PTHREAD_PRIO_PROTECT 2 # define PTHREAD_SCOPE_SYSTEM 0 # define PTHREAD_SCOPE_PROCESS 1 #endif /* =========== Thread functions =========== */ #if @GNULIB_PTHREAD_THREAD@ /* The 'restrict' qualifier on ARG is nonsense, but POSIX specifies it this way. Sigh. */ # if @REPLACE_PTHREAD_CREATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_create # define pthread_create rpl_pthread_create # endif _GL_FUNCDECL_RPL (pthread_create, int, (pthread_t *restrict threadp, const pthread_attr_t *restrict attr, void * (*mainfunc) (void *), void *restrict arg) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (pthread_create, int, (pthread_t *restrict threadp, const pthread_attr_t *restrict attr, void * (*mainfunc) (void *), void *restrict arg)); # else # if !@HAVE_PTHREAD_CREATE@ _GL_FUNCDECL_SYS (pthread_create, int, (pthread_t *restrict threadp, const pthread_attr_t *restrict attr, void * (*mainfunc) (void *), void *restrict arg) _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS_CAST (pthread_create, int, (pthread_t *restrict threadp, const pthread_attr_t *restrict attr, void * (*mainfunc) (void *), void *restrict arg)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_create); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_create # if HAVE_RAW_DECL_PTHREAD_CREATE _GL_WARN_ON_USE (pthread_create, "pthread_create is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_ATTR_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_attr_init # define pthread_attr_init rpl_pthread_attr_init # endif _GL_FUNCDECL_RPL (pthread_attr_init, int, (pthread_attr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_attr_init, int, (pthread_attr_t *attr)); # else # if !@HAVE_PTHREAD_ATTR_INIT@ _GL_FUNCDECL_SYS (pthread_attr_init, int, (pthread_attr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_attr_init, int, (pthread_attr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_attr_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_attr_init # if HAVE_RAW_DECL_PTHREAD_ATTR_INIT _GL_WARN_ON_USE (pthread_attr_init, "pthread_attr_init is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_attr_getdetachstate # define pthread_attr_getdetachstate rpl_pthread_attr_getdetachstate # endif _GL_FUNCDECL_RPL (pthread_attr_getdetachstate, int, (const pthread_attr_t *attr, int *detachstatep) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_attr_getdetachstate, int, (const pthread_attr_t *attr, int *detachstatep)); # else # if !@HAVE_PTHREAD_ATTR_GETDETACHSTATE@ _GL_FUNCDECL_SYS (pthread_attr_getdetachstate, int, (const pthread_attr_t *attr, int *detachstatep) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (pthread_attr_getdetachstate, int, (const pthread_attr_t *attr, int *detachstatep)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_attr_getdetachstate); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_attr_getdetachstate # if HAVE_RAW_DECL_PTHREAD_ATTR_GETDETACHSTATE _GL_WARN_ON_USE (pthread_attr_getdetachstate, "pthread_attr_getdetachstate is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_attr_setdetachstate # define pthread_attr_setdetachstate rpl_pthread_attr_setdetachstate # endif _GL_FUNCDECL_RPL (pthread_attr_setdetachstate, int, (pthread_attr_t *attr, int detachstate) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_attr_setdetachstate, int, (pthread_attr_t *attr, int detachstate)); # else # if !@HAVE_PTHREAD_ATTR_SETDETACHSTATE@ _GL_FUNCDECL_SYS (pthread_attr_setdetachstate, int, (pthread_attr_t *attr, int detachstate) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_attr_setdetachstate, int, (pthread_attr_t *attr, int detachstate)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_attr_setdetachstate); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_attr_setdetachstate # if HAVE_RAW_DECL_PTHREAD_ATTR_SETDETACHSTATE _GL_WARN_ON_USE (pthread_attr_setdetachstate, "pthread_attr_setdetachstate is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_ATTR_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_attr_destroy # define pthread_attr_destroy rpl_pthread_attr_destroy # endif _GL_FUNCDECL_RPL (pthread_attr_destroy, int, (pthread_attr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_attr_destroy, int, (pthread_attr_t *attr)); # else # if !@HAVE_PTHREAD_ATTR_DESTROY@ _GL_FUNCDECL_SYS (pthread_attr_destroy, int, (pthread_attr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_attr_destroy, int, (pthread_attr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_attr_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_attr_destroy # if HAVE_RAW_DECL_PTHREAD_ATTR_DESTROY _GL_WARN_ON_USE (pthread_attr_destroy, "pthread_attr_destroy is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_SELF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_self # define pthread_self rpl_pthread_self # endif _GL_FUNCDECL_RPL (pthread_self, pthread_t, (void) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (pthread_self, pthread_t, (void)); # else # if !@HAVE_PTHREAD_SELF@ _GL_FUNCDECL_SYS (pthread_self, pthread_t, (void) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (pthread_self, pthread_t, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_self); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_self # if HAVE_RAW_DECL_PTHREAD_SELF _GL_WARN_ON_USE (pthread_self, "pthread_self is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_EQUAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_equal # define pthread_equal rpl_pthread_equal # endif _GL_FUNCDECL_RPL (pthread_equal, int, (pthread_t thread1, pthread_t thread2)); _GL_CXXALIAS_RPL (pthread_equal, int, (pthread_t thread1, pthread_t thread2)); # else # if !@HAVE_PTHREAD_EQUAL@ _GL_FUNCDECL_SYS (pthread_equal, int, (pthread_t thread1, pthread_t thread2)); # endif _GL_CXXALIAS_SYS (pthread_equal, int, (pthread_t thread1, pthread_t thread2)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_equal); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_equal # if HAVE_RAW_DECL_PTHREAD_EQUAL _GL_WARN_ON_USE (pthread_equal, "pthread_equal is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_DETACH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_detach # define pthread_detach rpl_pthread_detach # endif _GL_FUNCDECL_RPL (pthread_detach, int, (pthread_t thread)); _GL_CXXALIAS_RPL (pthread_detach, int, (pthread_t thread)); # else # if !@HAVE_PTHREAD_DETACH@ _GL_FUNCDECL_SYS (pthread_detach, int, (pthread_t thread)); # endif _GL_CXXALIAS_SYS (pthread_detach, int, (pthread_t thread)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_detach); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_detach # if HAVE_RAW_DECL_PTHREAD_DETACH _GL_WARN_ON_USE (pthread_detach, "pthread_detach is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_JOIN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_join # define pthread_join rpl_pthread_join # endif _GL_FUNCDECL_RPL (pthread_join, int, (pthread_t thread, void **valuep)); _GL_CXXALIAS_RPL (pthread_join, int, (pthread_t thread, void **valuep)); # else # if !@HAVE_PTHREAD_JOIN@ _GL_FUNCDECL_SYS (pthread_join, int, (pthread_t thread, void **valuep)); # endif _GL_CXXALIAS_SYS (pthread_join, int, (pthread_t thread, void **valuep)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_join); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_join # if HAVE_RAW_DECL_PTHREAD_JOIN _GL_WARN_ON_USE (pthread_join, "pthread_join is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif #if @GNULIB_PTHREAD_THREAD@ # if @REPLACE_PTHREAD_EXIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_exit # define pthread_exit rpl_pthread_exit # endif _GL_FUNCDECL_RPL (pthread_exit, _Noreturn void, (void *value)); _GL_CXXALIAS_RPL (pthread_exit, void, (void *value)); # else # if !@HAVE_PTHREAD_EXIT@ _GL_FUNCDECL_SYS (pthread_exit, _Noreturn void, (void *value)); # endif /* Need to cast because of AIX with xlclang++. */ _GL_CXXALIAS_SYS_CAST (pthread_exit, void, (void *value)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_exit); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_exit # if HAVE_RAW_DECL_PTHREAD_EXIT _GL_WARN_ON_USE (pthread_exit, "pthread_exit is not portable - " "use gnulib module pthread-thread for portability"); # endif #endif /* =========== Once-only control (initialization) functions =========== */ #if @GNULIB_PTHREAD_ONCE@ # if @REPLACE_PTHREAD_ONCE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_once # define pthread_once rpl_pthread_once # endif _GL_FUNCDECL_RPL (pthread_once, int, (pthread_once_t *once_control, void (*initfunction) (void)) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_once, int, (pthread_once_t *once_control, void (*initfunction) (void))); # else # if !@HAVE_PTHREAD_ONCE@ _GL_FUNCDECL_SYS (pthread_once, int, (pthread_once_t *once_control, void (*initfunction) (void)) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS_CAST (pthread_once, int, (pthread_once_t *once_control, void (*initfunction) (void))); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_once); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_once # if HAVE_RAW_DECL_PTHREAD_ONCE _GL_WARN_ON_USE (pthread_once, "pthread_once is not portable - " "use gnulib module pthread-once for portability"); # endif #endif /* =========== Mutex functions =========== */ #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEX_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutex_init # define pthread_mutex_init rpl_pthread_mutex_init # endif _GL_FUNCDECL_RPL (pthread_mutex_init, int, (pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutex_init, int, (pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr)); # else # if !@HAVE_PTHREAD_MUTEX_INIT@ _GL_FUNCDECL_SYS (pthread_mutex_init, int, (pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutex_init, int, (pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutex_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutex_init # if HAVE_RAW_DECL_PTHREAD_MUTEX_INIT _GL_WARN_ON_USE (pthread_mutex_init, "pthread_mutex_init is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEXATTR_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutexattr_init # define pthread_mutexattr_init rpl_pthread_mutexattr_init # endif _GL_FUNCDECL_RPL (pthread_mutexattr_init, int, (pthread_mutexattr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutexattr_init, int, (pthread_mutexattr_t *attr)); # else # if !@HAVE_PTHREAD_MUTEXATTR_INIT@ _GL_FUNCDECL_SYS (pthread_mutexattr_init, int, (pthread_mutexattr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutexattr_init, int, (pthread_mutexattr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutexattr_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutexattr_init # if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_INIT _GL_WARN_ON_USE (pthread_mutexattr_init, "pthread_mutexattr_init is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutexattr_gettype # define pthread_mutexattr_gettype rpl_pthread_mutexattr_gettype # endif _GL_FUNCDECL_RPL (pthread_mutexattr_gettype, int, (const pthread_mutexattr_t *restrict attr, int *restrict typep) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_mutexattr_gettype, int, (const pthread_mutexattr_t *restrict attr, int *restrict typep)); # else # if !@HAVE_PTHREAD_MUTEXATTR_GETTYPE@ _GL_FUNCDECL_SYS (pthread_mutexattr_gettype, int, (const pthread_mutexattr_t *restrict attr, int *restrict typep) _GL_ARG_NONNULL ((1, 2))); # endif /* Need to cast, because on FreeBSD the first parameter is pthread_mutexattr_t *attr. */ _GL_CXXALIAS_SYS_CAST (pthread_mutexattr_gettype, int, (const pthread_mutexattr_t *restrict attr, int *restrict typep)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutexattr_gettype); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutexattr_gettype # if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_GETTYPE _GL_WARN_ON_USE (pthread_mutexattr_gettype, "pthread_mutexattr_gettype is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutexattr_settype # define pthread_mutexattr_settype rpl_pthread_mutexattr_settype # endif _GL_FUNCDECL_RPL (pthread_mutexattr_settype, int, (pthread_mutexattr_t *attr, int type) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutexattr_settype, int, (pthread_mutexattr_t *attr, int type)); # else # if !@HAVE_PTHREAD_MUTEXATTR_SETTYPE@ _GL_FUNCDECL_SYS (pthread_mutexattr_settype, int, (pthread_mutexattr_t *attr, int type) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutexattr_settype, int, (pthread_mutexattr_t *attr, int type)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutexattr_settype); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutexattr_settype # if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_SETTYPE _GL_WARN_ON_USE (pthread_mutexattr_settype, "pthread_mutexattr_settype is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutexattr_getrobust # define pthread_mutexattr_getrobust rpl_pthread_mutexattr_getrobust # endif _GL_FUNCDECL_RPL (pthread_mutexattr_getrobust, int, (const pthread_mutexattr_t *restrict attr, int *restrict robustp) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_mutexattr_getrobust, int, (const pthread_mutexattr_t *restrict attr, int *restrict robustp)); # else # if !@HAVE_PTHREAD_MUTEXATTR_GETROBUST@ _GL_FUNCDECL_SYS (pthread_mutexattr_getrobust, int, (const pthread_mutexattr_t *restrict attr, int *restrict robustp) _GL_ARG_NONNULL ((1, 2))); # endif /* Need to cast, because on FreeBSD the first parameter is pthread_mutexattr_t *attr. */ _GL_CXXALIAS_SYS_CAST (pthread_mutexattr_getrobust, int, (const pthread_mutexattr_t *restrict attr, int *restrict robustp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutexattr_getrobust); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutexattr_getrobust # if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_GETROBUST _GL_WARN_ON_USE (pthread_mutexattr_getrobust, "pthread_mutexattr_getrobust is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutexattr_setrobust # define pthread_mutexattr_setrobust rpl_pthread_mutexattr_setrobust # endif _GL_FUNCDECL_RPL (pthread_mutexattr_setrobust, int, (pthread_mutexattr_t *attr, int robust) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutexattr_setrobust, int, (pthread_mutexattr_t *attr, int robust)); # else # if !@HAVE_PTHREAD_MUTEXATTR_SETROBUST@ _GL_FUNCDECL_SYS (pthread_mutexattr_setrobust, int, (pthread_mutexattr_t *attr, int robust) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutexattr_setrobust, int, (pthread_mutexattr_t *attr, int robust)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutexattr_setrobust); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutexattr_setrobust # if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_SETROBUST _GL_WARN_ON_USE (pthread_mutexattr_setrobust, "pthread_mutexattr_setrobust is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutexattr_destroy # define pthread_mutexattr_destroy rpl_pthread_mutexattr_destroy # endif _GL_FUNCDECL_RPL (pthread_mutexattr_destroy, int, (pthread_mutexattr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutexattr_destroy, int, (pthread_mutexattr_t *attr)); # else # if !@HAVE_PTHREAD_MUTEXATTR_DESTROY@ _GL_FUNCDECL_SYS (pthread_mutexattr_destroy, int, (pthread_mutexattr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutexattr_destroy, int, (pthread_mutexattr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutexattr_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutexattr_destroy # if HAVE_RAW_DECL_PTHREAD_MUTEXATTR_DESTROY _GL_WARN_ON_USE (pthread_mutexattr_destroy, "pthread_mutexattr_destroy is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEX_LOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutex_lock # define pthread_mutex_lock rpl_pthread_mutex_lock # endif _GL_FUNCDECL_RPL (pthread_mutex_lock, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutex_lock, int, (pthread_mutex_t *mutex)); # else # if !@HAVE_PTHREAD_MUTEX_LOCK@ _GL_FUNCDECL_SYS (pthread_mutex_lock, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutex_lock, int, (pthread_mutex_t *mutex)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutex_lock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutex_lock # if HAVE_RAW_DECL_PTHREAD_MUTEX_LOCK _GL_WARN_ON_USE (pthread_mutex_lock, "pthread_mutex_lock is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEX_TRYLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutex_trylock # define pthread_mutex_trylock rpl_pthread_mutex_trylock # endif _GL_FUNCDECL_RPL (pthread_mutex_trylock, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutex_trylock, int, (pthread_mutex_t *mutex)); # else # if !@HAVE_PTHREAD_MUTEX_TRYLOCK@ _GL_FUNCDECL_SYS (pthread_mutex_trylock, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutex_trylock, int, (pthread_mutex_t *mutex)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutex_trylock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutex_trylock # if HAVE_RAW_DECL_PTHREAD_MUTEX_TRYLOCK _GL_WARN_ON_USE (pthread_mutex_trylock, "pthread_mutex_trylock is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ # if @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutex_timedlock # define pthread_mutex_timedlock rpl_pthread_mutex_timedlock # endif _GL_FUNCDECL_RPL (pthread_mutex_timedlock, int, (pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_mutex_timedlock, int, (pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime)); # else # if !@HAVE_PTHREAD_MUTEX_TIMEDLOCK@ _GL_FUNCDECL_SYS (pthread_mutex_timedlock, int, (pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (pthread_mutex_timedlock, int, (pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutex_timedlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutex_timedlock # if HAVE_RAW_DECL_PTHREAD_MUTEX_TIMEDLOCK _GL_WARN_ON_USE (pthread_mutex_timedlock, "pthread_mutex_timedlock is not portable - " "use gnulib module pthread_mutex_timedlock for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEX_UNLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutex_unlock # define pthread_mutex_unlock rpl_pthread_mutex_unlock # endif _GL_FUNCDECL_RPL (pthread_mutex_unlock, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutex_unlock, int, (pthread_mutex_t *mutex)); # else # if !@HAVE_PTHREAD_MUTEX_UNLOCK@ _GL_FUNCDECL_SYS (pthread_mutex_unlock, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutex_unlock, int, (pthread_mutex_t *mutex)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutex_unlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutex_unlock # if HAVE_RAW_DECL_PTHREAD_MUTEX_UNLOCK _GL_WARN_ON_USE (pthread_mutex_unlock, "pthread_mutex_unlock is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif #if @GNULIB_PTHREAD_MUTEX@ # if @REPLACE_PTHREAD_MUTEX_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_mutex_destroy # define pthread_mutex_destroy rpl_pthread_mutex_destroy # endif _GL_FUNCDECL_RPL (pthread_mutex_destroy, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_mutex_destroy, int, (pthread_mutex_t *mutex)); # else # if !@HAVE_PTHREAD_MUTEX_DESTROY@ _GL_FUNCDECL_SYS (pthread_mutex_destroy, int, (pthread_mutex_t *mutex) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_mutex_destroy, int, (pthread_mutex_t *mutex)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_mutex_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_mutex_destroy # if HAVE_RAW_DECL_PTHREAD_MUTEX_DESTROY _GL_WARN_ON_USE (pthread_mutex_destroy, "pthread_mutex_destroy is not portable - " "use gnulib module pthread-mutex for portability"); # endif #endif /* =========== Read-write lock functions =========== */ #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_init # define pthread_rwlock_init rpl_pthread_rwlock_init # endif _GL_FUNCDECL_RPL (pthread_rwlock_init, int, (pthread_rwlock_t *restrict lock, const pthread_rwlockattr_t *restrict attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_init, int, (pthread_rwlock_t *restrict lock, const pthread_rwlockattr_t *restrict attr)); # else # if !@HAVE_PTHREAD_RWLOCK_INIT@ _GL_FUNCDECL_SYS (pthread_rwlock_init, int, (pthread_rwlock_t *restrict lock, const pthread_rwlockattr_t *restrict attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_init, int, (pthread_rwlock_t *restrict lock, const pthread_rwlockattr_t *restrict attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_init # if HAVE_RAW_DECL_PTHREAD_RWLOCK_INIT _GL_WARN_ON_USE (pthread_rwlock_init, "pthread_rwlock_init is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCKATTR_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlockattr_init # define pthread_rwlockattr_init rpl_pthread_rwlockattr_init # endif _GL_FUNCDECL_RPL (pthread_rwlockattr_init, int, (pthread_rwlockattr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlockattr_init, int, (pthread_rwlockattr_t *attr)); # else # if !@HAVE_PTHREAD_RWLOCKATTR_INIT@ _GL_FUNCDECL_SYS (pthread_rwlockattr_init, int, (pthread_rwlockattr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlockattr_init, int, (pthread_rwlockattr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlockattr_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlockattr_init # if HAVE_RAW_DECL_PTHREAD_RWLOCKATTR_INIT _GL_WARN_ON_USE (pthread_rwlockattr_init, "pthread_rwlockattr_init is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlockattr_destroy # define pthread_rwlockattr_destroy rpl_pthread_rwlockattr_destroy # endif _GL_FUNCDECL_RPL (pthread_rwlockattr_destroy, int, (pthread_rwlockattr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlockattr_destroy, int, (pthread_rwlockattr_t *attr)); # else # if !@HAVE_PTHREAD_RWLOCKATTR_DESTROY@ _GL_FUNCDECL_SYS (pthread_rwlockattr_destroy, int, (pthread_rwlockattr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlockattr_destroy, int, (pthread_rwlockattr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlockattr_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlockattr_destroy # if HAVE_RAW_DECL_PTHREAD_RWLOCKATTR_DESTROY _GL_WARN_ON_USE (pthread_rwlockattr_destroy, "pthread_rwlockattr_destroy is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_RDLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_rdlock # define pthread_rwlock_rdlock rpl_pthread_rwlock_rdlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_rdlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_rdlock, int, (pthread_rwlock_t *lock)); # else # if !@HAVE_PTHREAD_RWLOCK_RDLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_rdlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_rdlock, int, (pthread_rwlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_rdlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_rdlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_RDLOCK _GL_WARN_ON_USE (pthread_rwlock_rdlock, "pthread_rwlock_rdlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_WRLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_wrlock # define pthread_rwlock_wrlock rpl_pthread_rwlock_wrlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_wrlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_wrlock, int, (pthread_rwlock_t *lock)); # else # if !@HAVE_PTHREAD_RWLOCK_WRLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_wrlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_wrlock, int, (pthread_rwlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_wrlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_wrlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_WRLOCK _GL_WARN_ON_USE (pthread_rwlock_wrlock, "pthread_rwlock_wrlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_tryrdlock # define pthread_rwlock_tryrdlock rpl_pthread_rwlock_tryrdlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_tryrdlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_tryrdlock, int, (pthread_rwlock_t *lock)); # else # if !@HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_tryrdlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_tryrdlock, int, (pthread_rwlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_tryrdlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_tryrdlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_TRYRDLOCK _GL_WARN_ON_USE (pthread_rwlock_tryrdlock, "pthread_rwlock_tryrdlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_trywrlock # define pthread_rwlock_trywrlock rpl_pthread_rwlock_trywrlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_trywrlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_trywrlock, int, (pthread_rwlock_t *lock)); # else # if !@HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_trywrlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_trywrlock, int, (pthread_rwlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_trywrlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_trywrlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_TRYWRLOCK _GL_WARN_ON_USE (pthread_rwlock_trywrlock, "pthread_rwlock_trywrlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_timedrdlock # define pthread_rwlock_timedrdlock rpl_pthread_rwlock_timedrdlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_timedrdlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_rwlock_timedrdlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime)); # else # if !@HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_timedrdlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_timedrdlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_timedrdlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_timedrdlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_TIMEDRDLOCK _GL_WARN_ON_USE (pthread_rwlock_timedrdlock, "pthread_rwlock_timedrdlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_timedwrlock # define pthread_rwlock_timedwrlock rpl_pthread_rwlock_timedwrlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_timedwrlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_rwlock_timedwrlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime)); # else # if !@HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_timedwrlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_timedwrlock, int, (pthread_rwlock_t *restrict lock, const struct timespec *restrict abstime)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_timedwrlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_timedwrlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_TIMEDWRLOCK _GL_WARN_ON_USE (pthread_rwlock_timedwrlock, "pthread_rwlock_timedwrlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_UNLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_unlock # define pthread_rwlock_unlock rpl_pthread_rwlock_unlock # endif _GL_FUNCDECL_RPL (pthread_rwlock_unlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_unlock, int, (pthread_rwlock_t *lock)); # else # if !@HAVE_PTHREAD_RWLOCK_UNLOCK@ _GL_FUNCDECL_SYS (pthread_rwlock_unlock, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_unlock, int, (pthread_rwlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_unlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_unlock # if HAVE_RAW_DECL_PTHREAD_RWLOCK_UNLOCK _GL_WARN_ON_USE (pthread_rwlock_unlock, "pthread_rwlock_unlock is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif #if @GNULIB_PTHREAD_RWLOCK@ # if @REPLACE_PTHREAD_RWLOCK_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_rwlock_destroy # define pthread_rwlock_destroy rpl_pthread_rwlock_destroy # endif _GL_FUNCDECL_RPL (pthread_rwlock_destroy, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_rwlock_destroy, int, (pthread_rwlock_t *lock)); # else # if !@HAVE_PTHREAD_RWLOCK_DESTROY@ _GL_FUNCDECL_SYS (pthread_rwlock_destroy, int, (pthread_rwlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_rwlock_destroy, int, (pthread_rwlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_rwlock_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_rwlock_destroy # if HAVE_RAW_DECL_PTHREAD_RWLOCK_DESTROY _GL_WARN_ON_USE (pthread_rwlock_destroy, "pthread_rwlock_destroy is not portable - " "use gnulib module pthread-rwlock for portability"); # endif #endif /* =========== Condition variable functions =========== */ #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_COND_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_cond_init # define pthread_cond_init rpl_pthread_cond_init # endif _GL_FUNCDECL_RPL (pthread_cond_init, int, (pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_cond_init, int, (pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr)); # else # if !@HAVE_PTHREAD_COND_INIT@ _GL_FUNCDECL_SYS (pthread_cond_init, int, (pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_cond_init, int, (pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_cond_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_cond_init # if HAVE_RAW_DECL_PTHREAD_COND_INIT _GL_WARN_ON_USE (pthread_cond_init, "pthread_cond_init is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_CONDATTR_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_condattr_init # define pthread_condattr_init rpl_pthread_condattr_init # endif _GL_FUNCDECL_RPL (pthread_condattr_init, int, (pthread_condattr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_condattr_init, int, (pthread_condattr_t *attr)); # else # if !@HAVE_PTHREAD_CONDATTR_INIT@ _GL_FUNCDECL_SYS (pthread_condattr_init, int, (pthread_condattr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_condattr_init, int, (pthread_condattr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_condattr_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_condattr_init # if HAVE_RAW_DECL_PTHREAD_CONDATTR_INIT _GL_WARN_ON_USE (pthread_condattr_init, "pthread_condattr_init is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_CONDATTR_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_condattr_destroy # define pthread_condattr_destroy rpl_pthread_condattr_destroy # endif _GL_FUNCDECL_RPL (pthread_condattr_destroy, int, (pthread_condattr_t *attr) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_condattr_destroy, int, (pthread_condattr_t *attr)); # else # if !@HAVE_PTHREAD_CONDATTR_DESTROY@ _GL_FUNCDECL_SYS (pthread_condattr_destroy, int, (pthread_condattr_t *attr) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_condattr_destroy, int, (pthread_condattr_t *attr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_condattr_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_condattr_destroy # if HAVE_RAW_DECL_PTHREAD_CONDATTR_DESTROY _GL_WARN_ON_USE (pthread_condattr_destroy, "pthread_condattr_destroy is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_COND_WAIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_cond_wait # define pthread_cond_wait rpl_pthread_cond_wait # endif _GL_FUNCDECL_RPL (pthread_cond_wait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (pthread_cond_wait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex)); # else # if !@HAVE_PTHREAD_COND_WAIT@ _GL_FUNCDECL_SYS (pthread_cond_wait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (pthread_cond_wait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_cond_wait); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_cond_wait # if HAVE_RAW_DECL_PTHREAD_COND_WAIT _GL_WARN_ON_USE (pthread_cond_wait, "pthread_cond_wait is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_COND_TIMEDWAIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_cond_timedwait # define pthread_cond_timedwait rpl_pthread_cond_timedwait # endif _GL_FUNCDECL_RPL (pthread_cond_timedwait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (pthread_cond_timedwait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime)); # else # if !@HAVE_PTHREAD_COND_TIMEDWAIT@ _GL_FUNCDECL_SYS (pthread_cond_timedwait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (pthread_cond_timedwait, int, (pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_cond_timedwait); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_cond_timedwait # if HAVE_RAW_DECL_PTHREAD_COND_TIMEDWAIT _GL_WARN_ON_USE (pthread_cond_timedwait, "pthread_cond_timedwait is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_COND_SIGNAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_cond_signal # define pthread_cond_signal rpl_pthread_cond_signal # endif _GL_FUNCDECL_RPL (pthread_cond_signal, int, (pthread_cond_t *cond) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_cond_signal, int, (pthread_cond_t *cond)); # else # if !@HAVE_PTHREAD_COND_SIGNAL@ _GL_FUNCDECL_SYS (pthread_cond_signal, int, (pthread_cond_t *cond) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_cond_signal, int, (pthread_cond_t *cond)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_cond_signal); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_cond_signal # if HAVE_RAW_DECL_PTHREAD_COND_SIGNAL _GL_WARN_ON_USE (pthread_cond_signal, "pthread_cond_signal is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_COND_BROADCAST@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_cond_broadcast # define pthread_cond_broadcast rpl_pthread_cond_broadcast # endif _GL_FUNCDECL_RPL (pthread_cond_broadcast, int, (pthread_cond_t *cond) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_cond_broadcast, int, (pthread_cond_t *cond)); # else # if !@HAVE_PTHREAD_COND_BROADCAST@ _GL_FUNCDECL_SYS (pthread_cond_broadcast, int, (pthread_cond_t *cond) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_cond_broadcast, int, (pthread_cond_t *cond)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_cond_broadcast); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_cond_broadcast # if HAVE_RAW_DECL_PTHREAD_COND_BROADCAST _GL_WARN_ON_USE (pthread_cond_broadcast, "pthread_cond_broadcast is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif #if @GNULIB_PTHREAD_COND@ # if @REPLACE_PTHREAD_COND_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_cond_destroy # define pthread_cond_destroy rpl_pthread_cond_destroy # endif _GL_FUNCDECL_RPL (pthread_cond_destroy, int, (pthread_cond_t *cond) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_cond_destroy, int, (pthread_cond_t *cond)); # else # if !@HAVE_PTHREAD_COND_DESTROY@ _GL_FUNCDECL_SYS (pthread_cond_destroy, int, (pthread_cond_t *cond) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_cond_destroy, int, (pthread_cond_t *cond)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_cond_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_cond_destroy # if HAVE_RAW_DECL_PTHREAD_COND_DESTROY _GL_WARN_ON_USE (pthread_cond_destroy, "pthread_cond_destroy is not portable - " "use gnulib module pthread-cond for portability"); # endif #endif /* =========== Thread-specific storage functions =========== */ #if @GNULIB_PTHREAD_TSS@ # if @REPLACE_PTHREAD_KEY_CREATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_key_create # define pthread_key_create rpl_pthread_key_create # endif _GL_FUNCDECL_RPL (pthread_key_create, int, (pthread_key_t *keyp, void (*destructor) (void *)) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_key_create, int, (pthread_key_t *keyp, void (*destructor) (void *))); # else # if !@HAVE_PTHREAD_KEY_CREATE@ _GL_FUNCDECL_SYS (pthread_key_create, int, (pthread_key_t *keyp, void (*destructor) (void *)) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS_CAST (pthread_key_create, int, (pthread_key_t *keyp, void (*destructor) (void *))); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_key_create); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_key_create # if HAVE_RAW_DECL_PTHREAD_KEY_CREATE _GL_WARN_ON_USE (pthread_key_create, "pthread_key_create is not portable - " "use gnulib module pthread-tss for portability"); # endif #endif #if @GNULIB_PTHREAD_TSS@ # if @REPLACE_PTHREAD_SETSPECIFIC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_setspecific # define pthread_setspecific rpl_pthread_setspecific # endif _GL_FUNCDECL_RPL (pthread_setspecific, int, (pthread_key_t key, const void *value)); _GL_CXXALIAS_RPL (pthread_setspecific, int, (pthread_key_t key, const void *value)); # else # if !@HAVE_PTHREAD_SETSPECIFIC@ _GL_FUNCDECL_SYS (pthread_setspecific, int, (pthread_key_t key, const void *value)); # endif _GL_CXXALIAS_SYS (pthread_setspecific, int, (pthread_key_t key, const void *value)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_setspecific); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_setspecific # if HAVE_RAW_DECL_PTHREAD_SETSPECIFIC _GL_WARN_ON_USE (pthread_setspecific, "pthread_setspecific is not portable - " "use gnulib module pthread-tss for portability"); # endif #endif #if @GNULIB_PTHREAD_TSS@ # if @REPLACE_PTHREAD_GETSPECIFIC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_getspecific # define pthread_getspecific rpl_pthread_getspecific # endif _GL_FUNCDECL_RPL (pthread_getspecific, void *, (pthread_key_t key)); _GL_CXXALIAS_RPL (pthread_getspecific, void *, (pthread_key_t key)); # else # if !@HAVE_PTHREAD_GETSPECIFIC@ _GL_FUNCDECL_SYS (pthread_getspecific, void *, (pthread_key_t key)); # endif _GL_CXXALIAS_SYS (pthread_getspecific, void *, (pthread_key_t key)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_getspecific); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_getspecific # if HAVE_RAW_DECL_PTHREAD_GETSPECIFIC _GL_WARN_ON_USE (pthread_getspecific, "pthread_getspecific is not portable - " "use gnulib module pthread-tss for portability"); # endif #endif #if @GNULIB_PTHREAD_TSS@ # if @REPLACE_PTHREAD_KEY_DELETE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_key_delete # define pthread_key_delete rpl_pthread_key_delete # endif _GL_FUNCDECL_RPL (pthread_key_delete, int, (pthread_key_t key)); _GL_CXXALIAS_RPL (pthread_key_delete, int, (pthread_key_t key)); # else # if !@HAVE_PTHREAD_KEY_DELETE@ _GL_FUNCDECL_SYS (pthread_key_delete, int, (pthread_key_t key)); # endif _GL_CXXALIAS_SYS (pthread_key_delete, int, (pthread_key_t key)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_key_delete); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_key_delete # if HAVE_RAW_DECL_PTHREAD_KEY_DELETE _GL_WARN_ON_USE (pthread_key_delete, "pthread_key_delete is not portable - " "use gnulib module pthread-tss for portability"); # endif #endif /* =========== Spinlock functions =========== */ #if @GNULIB_PTHREAD_SPIN@ # if @REPLACE_PTHREAD_SPIN_INIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_spin_init # define pthread_spin_init rpl_pthread_spin_init # endif _GL_FUNCDECL_RPL (pthread_spin_init, int, (pthread_spinlock_t *lock, int shared_across_processes) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_spin_init, int, (pthread_spinlock_t *lock, int shared_across_processes)); # else # if !@HAVE_PTHREAD_SPIN_INIT@ _GL_FUNCDECL_SYS (pthread_spin_init, int, (pthread_spinlock_t *lock, int shared_across_processes) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_spin_init, int, (pthread_spinlock_t *lock, int shared_across_processes)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_spin_init); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_spin_init # if HAVE_RAW_DECL_PTHREAD_SPIN_INIT _GL_WARN_ON_USE (pthread_spin_init, "pthread_spin_init is not portable - " "use gnulib module pthread-spin for portability"); # endif #endif #if @GNULIB_PTHREAD_SPIN@ # if @REPLACE_PTHREAD_SPIN_LOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_spin_lock # define pthread_spin_lock rpl_pthread_spin_lock # endif _GL_FUNCDECL_RPL (pthread_spin_lock, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_spin_lock, int, (pthread_spinlock_t *lock)); # else # if !@HAVE_PTHREAD_SPIN_LOCK@ _GL_FUNCDECL_SYS (pthread_spin_lock, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_spin_lock, int, (pthread_spinlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_spin_lock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_spin_lock # if HAVE_RAW_DECL_PTHREAD_SPIN_LOCK _GL_WARN_ON_USE (pthread_spin_lock, "pthread_spin_lock is not portable - " "use gnulib module pthread-spin for portability"); # endif #endif #if @GNULIB_PTHREAD_SPIN@ # if @REPLACE_PTHREAD_SPIN_TRYLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_spin_trylock # define pthread_spin_trylock rpl_pthread_spin_trylock # endif _GL_FUNCDECL_RPL (pthread_spin_trylock, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_spin_trylock, int, (pthread_spinlock_t *lock)); # else # if !@HAVE_PTHREAD_SPIN_TRYLOCK@ _GL_FUNCDECL_SYS (pthread_spin_trylock, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_spin_trylock, int, (pthread_spinlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_spin_trylock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_spin_trylock # if HAVE_RAW_DECL_PTHREAD_SPIN_TRYLOCK _GL_WARN_ON_USE (pthread_spin_trylock, "pthread_spin_trylock is not portable - " "use gnulib module pthread-spin for portability"); # endif #endif #if @GNULIB_PTHREAD_SPIN@ # if @REPLACE_PTHREAD_SPIN_UNLOCK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_spin_unlock # define pthread_spin_unlock rpl_pthread_spin_unlock # endif _GL_FUNCDECL_RPL (pthread_spin_unlock, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_spin_unlock, int, (pthread_spinlock_t *lock)); # else # if !@HAVE_PTHREAD_SPIN_UNLOCK@ _GL_FUNCDECL_SYS (pthread_spin_unlock, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_spin_unlock, int, (pthread_spinlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_spin_unlock); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_spin_unlock # if HAVE_RAW_DECL_PTHREAD_SPIN_UNLOCK _GL_WARN_ON_USE (pthread_spin_unlock, "pthread_spin_unlock is not portable - " "use gnulib module pthread-spin for portability"); # endif #endif #if @GNULIB_PTHREAD_SPIN@ # if @REPLACE_PTHREAD_SPIN_DESTROY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_spin_destroy # define pthread_spin_destroy rpl_pthread_spin_destroy # endif _GL_FUNCDECL_RPL (pthread_spin_destroy, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pthread_spin_destroy, int, (pthread_spinlock_t *lock)); # else # if !@HAVE_PTHREAD_SPIN_DESTROY@ _GL_FUNCDECL_SYS (pthread_spin_destroy, int, (pthread_spinlock_t *lock) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pthread_spin_destroy, int, (pthread_spinlock_t *lock)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_spin_destroy); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_spin_destroy # if HAVE_RAW_DECL_PTHREAD_SPIN_DESTROY _GL_WARN_ON_USE (pthread_spin_destroy, "pthread_spin_destroy is not portable - " "use gnulib module pthread-spin for portability"); # endif #endif #if defined __cplusplus && defined GNULIB_NAMESPACE && !@HAVE_PTHREAD_H@ && defined __MINGW32__ /* Provide the symbols required by mingw's <bits/gthr-default.h>. */ using GNULIB_NAMESPACE::pthread_create; using GNULIB_NAMESPACE::pthread_self; using GNULIB_NAMESPACE::pthread_equal; using GNULIB_NAMESPACE::pthread_detach; using GNULIB_NAMESPACE::pthread_join; using GNULIB_NAMESPACE::pthread_once; using GNULIB_NAMESPACE::pthread_mutex_init; using GNULIB_NAMESPACE::pthread_mutexattr_init; using GNULIB_NAMESPACE::pthread_mutexattr_settype; using GNULIB_NAMESPACE::pthread_mutexattr_destroy; using GNULIB_NAMESPACE::pthread_mutex_lock; using GNULIB_NAMESPACE::pthread_mutex_trylock; using GNULIB_NAMESPACE::pthread_mutex_timedlock; using GNULIB_NAMESPACE::pthread_mutex_unlock; using GNULIB_NAMESPACE::pthread_mutex_destroy; using GNULIB_NAMESPACE::pthread_cond_wait; using GNULIB_NAMESPACE::pthread_cond_timedwait; using GNULIB_NAMESPACE::pthread_cond_signal; using GNULIB_NAMESPACE::pthread_cond_broadcast; using GNULIB_NAMESPACE::pthread_cond_destroy; using GNULIB_NAMESPACE::pthread_key_create; using GNULIB_NAMESPACE::pthread_setspecific; using GNULIB_NAMESPACE::pthread_getspecific; using GNULIB_NAMESPACE::pthread_key_delete; #endif #endif /* _@GUARD_PREFIX@_PTHREAD_H_ */ #endif /* _@GUARD_PREFIX@_PTHREAD_H_ */ #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/sched.in.h���������������������������������������������������������0000644�0001750�0001750�00000005776�14557510507�014524� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <sched.h>. Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_SCHED_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* This file uses #include_next of a system file that defines time_t. For the 'year2038' module to work right, <config.h> needs to have been included before. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SCHED_H@ # if @HAVE_SYS_CDEFS_H@ # include <sys/cdefs.h> # endif # @INCLUDE_NEXT@ @NEXT_SCHED_H@ #endif #ifndef _@GUARD_PREFIX@_SCHED_H #define _@GUARD_PREFIX@_SCHED_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* Get pid_t. This is needed on glibc 2.11 (see glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=13198>) and Mac OS X 10.5. */ #include <sys/types.h> #ifdef __KLIBC__ /* On OS/2 kLIBC, struct sched_param is in spawn.h. */ # include <spawn.h> #endif #ifdef __VMS /* On OpenVMS, struct sched_param is in <pthread.h>. */ # include <pthread.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #if !@HAVE_STRUCT_SCHED_PARAM@ # if !GNULIB_defined_struct_sched_param struct sched_param { int sched_priority; }; # define GNULIB_defined_struct_sched_param 1 # endif #endif #if !(defined SCHED_FIFO && defined SCHED_RR && defined SCHED_OTHER) # define SCHED_FIFO 1 # define SCHED_RR 2 # define SCHED_OTHER 0 #endif #if @GNULIB_SCHED_YIELD@ # if @REPLACE_SCHED_YIELD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sched_yield # define sched_yield rpl_sched_yield # endif _GL_FUNCDECL_RPL (sched_yield, int, (void)); _GL_CXXALIAS_RPL (sched_yield, int, (void)); # else # if !@HAVE_SCHED_YIELD@ _GL_FUNCDECL_SYS (sched_yield, int, (void)); # endif _GL_CXXALIAS_SYS (sched_yield, int, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sched_yield); # endif #elif defined GNULIB_POSIXCHECK # undef sched_yield # if HAVE_RAW_DECL_SCHED_YIELD _GL_WARN_ON_USE (sched_yield, "sched_yield is not portable - " "use gnulib module sched_yield for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SCHED_H */ #endif /* _@GUARD_PREFIX@_SCHED_H */ ��gnuastro-0.22/bootstrapped/tests/test-select-in.sh��������������������������������������������������0000755�0001750�0001750�00000001746�14557510510�016042� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test select() on file descriptors opened for reading. # This test is known to fail on Solaris 2.6 and older, due to its handling # of /dev/null. tmpfiles="" trap 'rm -fr $tmpfiles' HUP INT QUIT TERM tmpfiles="$tmpfiles t-select-in.tmp" # Regular files. rm -f t-select-in.tmp ${CHECKER} ./test-select-fd${EXEEXT} r 0 t-select-in.tmp < ./test-select-fd${EXEEXT} test `cat t-select-in.tmp` = "1" || exit 1 # Pipes. rm -f t-select-in.tmp { sleep 1; echo abc; } | \ { ${CHECKER} ./test-select-fd${EXEEXT} r 0 t-select-in.tmp; cat > /dev/null; } test `cat t-select-in.tmp` = "0" || exit 1 rm -f t-select-in.tmp echo abc | { sleep 1; ${CHECKER} ./test-select-fd${EXEEXT} r 0 t-select-in.tmp; } test `cat t-select-in.tmp` = "1" || exit 1 # Special files. # This part of the test is known to fail on Solaris 2.6 and older. rm -f t-select-in.tmp ${CHECKER} ./test-select-fd${EXEEXT} r 0 t-select-in.tmp < /dev/null test `cat t-select-in.tmp` = "1" || exit 1 rm -fr $tmpfiles exit 0 ��������������������������gnuastro-0.22/bootstrapped/tests/test-select-out.sh�������������������������������������������������0000755�0001750�0001750�00000001655�14557510510�016242� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test select() on file descriptors opened for writing. tmpfiles="" trap 'rm -fr $tmpfiles' HUP INT QUIT TERM tmpfiles="$tmpfiles t-select-out.out t-select-out.tmp" # Regular files. rm -f t-select-out.tmp ${CHECKER} ./test-select-fd${EXEEXT} w 1 t-select-out.tmp > t-select-out.out test `cat t-select-out.tmp` = "1" || exit 1 # Pipes. if false; then # This test fails on some platforms. rm -f t-select-out.tmp ( { echo abc; ${CHECKER} ./test-select-fd${EXEEXT} w 1 t-select-out.tmp; } | { sleep 1; cat; } ) > /dev/null test `cat t-select-out.tmp` = "0" || exit 1 fi rm -f t-select-out.tmp ( { sleep 1; echo abc; ${CHECKER} ./test-select-fd${EXEEXT} w 1 t-select-out.tmp; } | cat) > /dev/null test `cat t-select-out.tmp` = "1" || exit 1 # Special files. rm -f t-select-out.tmp ${CHECKER} ./test-select-fd${EXEEXT} w 1 t-select-out.tmp > /dev/null test `cat t-select-out.tmp` = "1" || exit 1 rm -fr $tmpfiles exit 0 �����������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-setlocale1.sh�������������������������������������������������0000755�0001750�0001750�00000001572�14557510510�016210� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : "${LOCALE_FR=fr_FR}" : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" : "${LOCALE_JA=ja_JP}" : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_FR = none && test $LOCALE_FR_UTF8 = none \ && test $LOCALE_JA = none && test $LOCALE_ZH_CN = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no locale for testing is installed" else echo "Skipping test: no locale for testing is supported" fi exit 77 fi if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR ${CHECKER} ./test-setlocale1${EXEEXT} || exit 1 fi if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 ${CHECKER} ./test-setlocale1${EXEEXT} || exit 1 fi if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA ${CHECKER} ./test-setlocale1${EXEEXT} || exit 1 fi if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN ${CHECKER} ./test-setlocale1${EXEEXT} || exit 1 fi exit 0 ��������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-setlocale2.sh�������������������������������������������������0000755�0001750�0001750�00000001365�14557510510�016211� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test locale names with likely unsupported encoding in Unix syntax. for name in ar_SA.ISO-8859-1 fr_FR.CP1251 zh_TW.GB18030 zh_CN.BIG5; do env LC_ALL=$name ${CHECKER} ./test-setlocale2${EXEEXT} 1 || exit 1 done # Test locale names with likely unsupported encoding in native Windows syntax. for name in "Arabic_Saudi Arabia.1252" "Arabic_Saudi Arabia.65001" \ French_France.65001 Japanese_Japan.65001 Turkish_Turkey.65001 \ Chinese_Taiwan.65001 Chinese_China.54936 Chinese_China.65001; do # Here we use 'env' to set the LC_ALL environment variable, because on # Solaris 11.0, the /bin/sh refuses to do it for Turkish_Turkey.65001. env LC_ALL="$name" ${CHECKER} ./test-setlocale2${EXEEXT} 1 || exit 1 done exit 0 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/_Noreturn.h��������������������������������������������������������0000644�0001750�0001750�00000004560�14557510506�014771� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for declaring that a function does not return. Copyright (C) 2011-2024 Free Software Foundation, Inc. This program 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 of the License, or (at your option) any later version. This program 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif (defined __clang__ && __clang_major__ < 16 \ && defined _GL_WORK_AROUND_LLVM_BUG_59792) /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around that rare LLVM bug, though you may get many false-alarm warnings. */ # define _Noreturn # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ && (4 < __GNUC__ + (7 <= __GNUC_MINOR__) \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))))) /* _Noreturn works as-is. */ # elif (2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/arg-nonnull.h������������������������������������������������������0000644�0001750�0001750�00000002353�14557510507�015251� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for declaring that specific arguments must not be NULL. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program 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 of the License, or (at your option) any later version. This program 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools that the values passed as arguments n, ..., m must be non-NULL pointers. n = 1 stands for the first argument, n = 2 for the second argument etc. */ #ifndef _GL_ARG_NONNULL # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) # else # define _GL_ARG_NONNULL(params) # endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/c++defs.h����������������������������������������������������������0000644�0001750�0001750�00000036154�14557510507�014235� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* C++ compatible function declaration macros. Copyright (C) 2010-2024 Free Software Foundation, Inc. This program 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 of the License, or (at your option) any later version. This program 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_CXXDEFS_H #define _GL_CXXDEFS_H /* Begin/end the GNULIB_NAMESPACE namespace. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { # define _GL_END_NAMESPACE } #else # define _GL_BEGIN_NAMESPACE # define _GL_END_NAMESPACE #endif /* The three most frequent use cases of these macros are: * For providing a substitute for a function that is missing on some platforms, but is declared and works fine on the platforms on which it exists: #if @GNULIB_FOO@ # if !@HAVE_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on all platforms, but is broken/insufficient and needs to be replaced on some platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on some platforms but is broken/insufficient and needs to be replaced on some of them and is additionally either missing or undeclared on some other platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif */ /* _GL_EXTERN_C declaration; performs the declaration with C linkage. */ #if defined __cplusplus # define _GL_EXTERN_C extern "C" #else # define _GL_EXTERN_C extern #endif /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); declares a replacement function, named rpl_func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode. (That's because [[...]] extern "C" <declaration>; is invalid syntax in C++.) */ #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype rpl_func parameters_and_attributes /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); declares the system function, named func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype func parameters_and_attributes /* _GL_CXXALIAS_RPL (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to rpl_func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); Wrapping rpl_func in an object with an inline conversion operator avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is actually used in the program. */ #define _GL_CXXALIAS_RPL(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::rpl_func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_MDA (func, rettype, parameters); is to be used when func is a Microsoft deprecated alias, on native Windows. It declares a C++ alias called GNULIB_NAMESPACE::func that redirects to _func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); */ #define _GL_CXXALIAS_MDA(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); except that the C function rpl_func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>(::rpl_func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); is like _GL_CXXALIAS_MDA (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) /* _GL_CXXALIAS_SYS (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to the system provided function func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); Wrapping func in an object with an inline conversion operator avoids a reference to func unless GNULIB_NAMESPACE::func is actually used in the program. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>(::func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function is picked among a set of overloaded functions, namely the one with rettype2 and parameters2. Two consecutive casts are used to silence the "cannot find a match" and "invalid conversion" errors that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE /* The outer cast must be a reinterpret_cast. The inner cast: When the function is defined as a set of overloaded functions, it works as a static_cast<>, choosing the designated variant. When the function is defined as a single variant, it works as a reinterpret_cast<>. The parenthesized cast syntax works both ways. */ # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN (func); causes a warning to be emitted when ::func is used but not when GNULIB_NAMESPACE::func is used. func must be defined without overloaded variants. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN(func) \ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) # define _GL_CXXALIASWARN_1(func,namespace) \ _GL_CXXALIASWARN_2 (func, namespace) /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, we enable the warning only when not optimizing. */ # if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_WARN_ON_USE (func, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN_2(func,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN(func) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); causes a warning to be emitted when the given overloaded variant of ::func is used but not when GNULIB_NAMESPACE::func is used. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ GNULIB_NAMESPACE) # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, we enable the warning only when not optimizing. */ # if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # else # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif #endif /* _GL_CXXDEFS_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/warn-on-use.h������������������������������������������������������0000644�0001750�0001750�00000015532�14557510511�015166� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for emitting warnings if a function is used. Copyright (C) 2010-2024 Free Software Foundation, Inc. This program 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 of the License, or (at your option) any later version. This program 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* _GL_WARN_ON_USE (function, "literal string") issues a declaration for FUNCTION which will then trigger a compiler warning containing the text of "literal string" anywhere that function is called, if supported by the compiler. If the compiler does not support this feature, the macro expands to an unused extern declaration. _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the attribute used in _GL_WARN_ON_USE. If the compiler does not support this feature, it expands to empty. These macros are useful for marking a function as a potential portability trap, with the intent that "literal string" include instructions on the replacement function that should be used instead. _GL_WARN_ON_USE is for functions with 'extern' linkage. _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' linkage. However, one of the reasons that a function is a portability trap is if it has the wrong signature. Declaring FUNCTION with a different signature in C is a compilation error, so this macro must use the same type as any existing declaration so that programs that avoid the problematic FUNCTION do not fail to compile merely because they included a header that poisoned the function. But this implies that _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already have a declaration. Use of this macro implies that there must not be any other macro hiding the declaration of FUNCTION; but undefining FUNCTION first is part of the poisoning process anyway (although for symbols that are provided only via a macro, the result is a compilation error rather than a warning containing "literal string"). Also note that in C++, it is only safe to use if FUNCTION has no overloads. For an example, it is possible to poison 'getline' by: - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], [getline]) in configure.ac, which potentially defines HAVE_RAW_DECL_GETLINE - adding this code to a header that wraps the system <stdio.h>: #undef getline #if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" "not universally present; use the gnulib module getline"); #endif It is not possible to directly poison global variables. But it is possible to write a wrapper accessor function, and poison that (less common usage, like &environ, will cause a compilation error rather than issue the nice warning, but the end result of informing the developer about their portability problem is still achieved): #if HAVE_RAW_DECL_ENVIRON static char *** rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); # undef environ # define environ (*rpl_environ ()) #endif or better (avoiding contradictory use of 'static' and 'extern'): #if HAVE_RAW_DECL_ENVIRON static char *** _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") rpl_environ (void) { return &environ; } # undef environ # define environ (*rpl_environ ()) #endif */ #ifndef _GL_WARN_ON_USE # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) # define _GL_WARN_ON_USE_ATTRIBUTE(message) \ __attribute__ ((__warning__ (message))) # elif __clang_major__ >= 4 /* Another compiler attribute is available in clang. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C __typeof__ (function) function \ __attribute__ ((__diagnose_if__ (1, message, "warning"))) # define _GL_WARN_ON_USE_ATTRIBUTE(message) \ __attribute__ ((__diagnose_if__ (1, message, "warning"))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C __typeof__ (function) function # define _GL_WARN_ON_USE_ATTRIBUTE(message) # else /* Unsupported. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # define _GL_WARN_ON_USE_ATTRIBUTE(message) # endif #endif /* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the function is declared with the given prototype, consisting of return type, parameters, and attributes. This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does not work in this case. */ #ifndef _GL_WARN_ON_USE_CXX # if !defined __cplusplus # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ _GL_WARN_ON_USE (function, msg) # else # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_gcc function parameters_and_attributes \ __attribute__ ((__warning__ (msg))) # elif __clang_major__ >= 4 /* Another compiler attribute is available in clang. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_clang function parameters_and_attributes \ __attribute__ ((__diagnose_if__ (1, msg, "warning"))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_gcc function parameters_and_attributes # else /* Unsupported. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif # endif #endif /* _GL_WARN_EXTERN_C declaration; performs the declaration with C linkage. */ #ifndef _GL_WARN_EXTERN_C # if defined __cplusplus # define _GL_WARN_EXTERN_C extern "C" # else # define _GL_WARN_EXTERN_C extern # endif #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/nap.h��������������������������������������������������������������0000644�0001750�0001750�00000010502�14557510507�013566� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Assist in file system timestamp tests. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ #ifndef GLTEST_NAP_H # define GLTEST_NAP_H # include <limits.h> # include <stdckdint.h> /* Avoid a conflict with a function called nap() on UnixWare. */ # if defined _SCO_DS || (defined __SCO_VERSION__ || defined __sysv5__) /* OpenServer, UnixWare */ # include <unistd.h> # undef nap # define nap gl_nap # endif /* Name of the witness file. */ #define TEMPFILE BASE "nap.tmp" /* File descriptor used for the witness file. */ static int nap_fd = -1; /* Return A - B, in ns. Return 0 if the true result would be negative. Return INT_MAX if the true result would be greater than INT_MAX. */ static int diff_timespec (struct timespec a, struct timespec b) { time_t as = a.tv_sec; time_t bs = b.tv_sec; int ans = a.tv_nsec; int bns = b.tv_nsec; int sdiff; ASSERT (0 <= ans && ans < 2000000000); ASSERT (0 <= bns && bns < 2000000000); if (! (bs < as || (bs == as && bns < ans))) return 0; if (ckd_sub (&sdiff, as, bs) || ckd_mul (&sdiff, sdiff, 1000000000) || ckd_add (&sdiff, sdiff, ans - bns)) return INT_MAX; return sdiff; } /* If DO_WRITE, bump the modification time of the file designated by NAP_FD. Then fetch the new STAT information of NAP_FD. */ static void nap_get_stat (struct stat *st, int do_write) { if (do_write) { ASSERT (write (nap_fd, "\n", 1) == 1); #if defined _WIN32 || defined __CYGWIN__ /* On Windows, the modification times are not changed until NAP_FD is closed. See <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-writefile> */ close (nap_fd); nap_fd = open (TEMPFILE, O_RDWR, 0600); ASSERT (nap_fd != -1); lseek (nap_fd, 0, SEEK_END); #endif } ASSERT (fstat (nap_fd, st) == 0); } /* Given a file whose descriptor is FD, see whether delaying by DELAY nanoseconds causes a change in a file's mtime. OLD_ST is the file's status, recently gotten. */ static bool nap_works (int delay, struct stat old_st) { struct stat st; struct timespec delay_spec; delay_spec.tv_sec = delay / 1000000000; delay_spec.tv_nsec = delay % 1000000000; ASSERT (nanosleep (&delay_spec, 0) == 0); nap_get_stat (&st, 1); if (diff_timespec (get_stat_mtime (&st), get_stat_mtime (&old_st))) return true; return false; } static void clear_temp_file (void) { if (0 <= nap_fd) { ASSERT (close (nap_fd) != -1); ASSERT (unlink (TEMPFILE) != -1); } } /* Sleep long enough to notice a timestamp difference on the file system in the current directory. Use an adaptive approach, trying to find the smallest delay which works on the current file system to make the timestamp difference appear. Assert a maximum delay of ~2 seconds, more precisely sum(2^n) from 0 to 30 = 2^31 - 1 = 2.1s. Assumes that BASE is defined, and requires that the test module depends on nanosleep. */ static void nap (void) { struct stat old_st; static int delay = 1; if (-1 == nap_fd) { atexit (clear_temp_file); ASSERT ((nap_fd = creat (TEMPFILE, 0600)) != -1); nap_get_stat (&old_st, 0); } else { ASSERT (0 <= nap_fd); nap_get_stat (&old_st, 1); } if (1 < delay) delay = delay / 2; /* Try half of the previous delay. */ ASSERT (0 < delay); for (;;) { if (nap_works (delay, old_st)) return; if (delay <= (2147483647 - 1) / 2) { delay = delay * 2 + 1; continue; } else break; } /* Bummer: even the highest nap delay didn't work. */ ASSERT (0); } #endif /* GLTEST_NAP_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-sys_wait.h����������������������������������������������������0000644�0001750�0001750�00000003616�14557510510�015631� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test of macros shared between <sys/wait.h> and <stdlib.h>. Copyright (C) 2010-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2010. */ static int test_sys_wait_macros (void) { /* Check subset of <sys/wait.h> macros that must be visible here. Note that some of these macros are only portable when operating on an lvalue. */ int i; for (i = 0; i < 0x8000; i = (i ? i << 1 : 1)) { /* POSIX requires that for all valid process statuses, that exactly one of these three macros is true. But not all possible 16-bit values map to valid process status. Traditionally, 8 of the bits are for WIFEXITED, 7 of the bits to tell between WIFSIGNALED and WIFSTOPPED, and either 0x80 or 0x8000 to flag that core was also dumped. Since we don't know which byte is WIFEXITED, we skip the both possible bits that can signal core dump. */ if (i == 0x80) continue; if (!!WIFSIGNALED (i) + !!WIFEXITED (i) + !!WIFSTOPPED (i) != 1) return 1; } i = WEXITSTATUS (i) + WSTOPSIG (i) + WTERMSIG (i); #if 0 switch (i) { /* Gnulib doesn't guarantee these, yet. */ case WNOHANG: case WUNTRACED: break; } #endif return 0; } ������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-strtod1.sh����������������������������������������������������0000755�0001750�0001750�00000001242�14557510510�015546� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh : "${LOCALE_FR=fr_FR}" : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR = none && test $LOCALE_FR_UTF8 = none; then if test -f /usr/bin/localedef; then echo "Skipping test: no locale for testing is installed" else echo "Skipping test: no locale for testing is supported" fi exit 77 fi if $LC_NUMERIC_IMPLEMENTED; then : else echo "Skipping test: LC_NUMERIC category of locales is not implemented" exit 77 fi if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR ${CHECKER} ./test-strtod1${EXEEXT} || exit 1 fi if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 ${CHECKER} ./test-strtod1${EXEEXT} || exit 1 fi exit 0 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-symlink.h�����������������������������������������������������0000644�0001750�0001750�00000006157�14557510510�015460� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Tests of symlink. Copyright (C) 2009-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>, 2009. */ /* This file is designed to test both symlink(a,b) and symlinkat(a,AT_FDCWD,b). FUNC is the function to test. Assumes that BASE and ASSERT are already defined, and that appropriate headers are already included. If PRINT, warn before skipping symlink tests with status 77. */ static int test_symlink (int (*func) (char const *, char const *), bool print) { if (func ("nowhere", BASE "link1")) { if (print) fputs ("skipping test: symlinks not supported on this file system\n", stderr); return 77; } /* Some systems allow the creation of 0-length symlinks as a synonym for "."; but most reject it. */ { int status; errno = 0; status = func ("", BASE "link2"); if (status == -1) ASSERT (errno == ENOENT || errno == EINVAL); else { ASSERT (status == 0); ASSERT (unlink (BASE "link2") == 0); } } /* Sanity checks of failures. */ errno = 0; ASSERT (func ("nowhere", "") == -1); ASSERT (errno == ENOENT); errno = 0; ASSERT (func ("nowhere", ".") == -1); ASSERT (errno == EEXIST || errno == EINVAL); errno = 0; ASSERT (func ("somewhere", BASE "link1") == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func ("nowhere", BASE "link2/") == -1); ASSERT (errno == ENOTDIR || errno == ENOENT); ASSERT (mkdir (BASE "dir", 0700) == 0); errno = 0; ASSERT (func ("nowhere", BASE "dir") == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func ("nowhere", BASE "dir/") == -1); ASSERT (errno == EEXIST || errno == EINVAL || errno == ENOENT /* Lustre FS on Linux */); ASSERT (close (creat (BASE "file", 0600)) == 0); errno = 0; ASSERT (func ("nowhere", BASE "file") == -1); ASSERT (errno == EEXIST); errno = 0; ASSERT (func ("nowhere", BASE "file/") == -1); ASSERT (errno == EEXIST || errno == ENOTDIR || errno == ENOENT); /* Trailing slash must always be rejected. */ ASSERT (unlink (BASE "link1") == 0); ASSERT (func (BASE "link2", BASE "link1") == 0); errno = 0; ASSERT (func (BASE "nowhere", BASE "link1/") == -1); ASSERT (errno == EEXIST || errno == ENOTDIR || errno == ENOENT); errno = 0; ASSERT (unlink (BASE "link2") == -1); ASSERT (errno == ENOENT); /* Cleanup. */ ASSERT (rmdir (BASE "dir") == 0); ASSERT (unlink (BASE "file") == 0); ASSERT (unlink (BASE "link1") == 0); return 0; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/sys_ioctl.in.h�����������������������������������������������������0000644�0001750�0001750�00000005316�14557510507�015434� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <sys/ioctl.h>. Copyright (C) 2008-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_SYS_IOCTL_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SYS_IOCTL_H@ # @INCLUDE_NEXT@ @NEXT_SYS_IOCTL_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_IOCTL_H #define _@GUARD_PREFIX@_SYS_IOCTL_H /* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif /* AIX 5.1 and Solaris 10 declare ioctl() in <unistd.h> and in <stropts.h>, but not in <sys/ioctl.h>. Haiku declares ioctl() in <unistd.h>, but not in <sys/ioctl.h>. But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include <unistd.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_IOCTL@ # if @REPLACE_IOCTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ioctl # define ioctl rpl_ioctl # endif _GL_FUNCDECL_RPL (ioctl, int, (int fd, int request, ... /* {void *,char *} arg */)); _GL_CXXALIAS_RPL (ioctl, int, (int fd, int request, ... /* {void *,char *} arg */)); # else # if @SYS_IOCTL_H_HAVE_WINSOCK2_H@ || 1 _GL_FUNCDECL_SYS (ioctl, int, (int fd, int request, ... /* {void *,char *} arg */)); # endif _GL_CXXALIAS_SYS (ioctl, int, (int fd, int request, ... /* {void *,char *} arg */)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ioctl); # endif #elif @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ # undef ioctl # define ioctl ioctl_used_without_requesting_gnulib_module_ioctl #elif defined GNULIB_POSIXCHECK # undef ioctl # if HAVE_RAW_DECL_IOCTL _GL_WARN_ON_USE (ioctl, "ioctl does not portably work on sockets - " "use gnulib module ioctl for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_IOCTL_H */ #endif /* _@GUARD_PREFIX@_SYS_IOCTL_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/init.sh������������������������������������������������������������0000644�0001750�0001750�00000055736�14557510507�014160� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# source this file; set up for tests # Copyright (C) 2009-2024 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program 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 General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # Using this file in a test # ========================= # # The typical skeleton of a test looks like this: # # #!/bin/sh # . "${srcdir=.}/init.sh"; path_prepend_ . # Execute some commands. # Note that these commands are executed in a subdirectory, therefore you # need to prepend "../" to relative filenames in the build directory. # Note that the "path_prepend_ ." is useful only if the body of your # test invokes programs residing in the initial directory. # For example, if the programs you want to test are in src/, and this test # script is named tests/test-1, then you would use "path_prepend_ ../src", # or perhaps export PATH='$(abs_top_builddir)/src$(PATH_SEPARATOR)'"$$PATH" # to all tests via automake's TESTS_ENVIRONMENT. # Set the exit code 0 for success, 77 for skipped, or 1 or other for failure. # Use the skip_ and fail_ functions to print a diagnostic and then exit # with the corresponding exit code. # Exit $? # Executing a test that uses this file # ==================================== # # Running a single test: # $ make check TESTS=test-foo.sh # # Running a single test, with verbose output: # $ make check TESTS=test-foo.sh VERBOSE=yes # # Running a single test, keeping the temporary directory: # $ make check TESTS=test-foo.sh KEEP=yes # # Running a single test, with single-stepping: # 1. Go into a sub-shell: # $ bash # 2. Set relevant environment variables from TESTS_ENVIRONMENT in the # Makefile: # $ export srcdir=../../tests # this is an example # 3. Execute the commands from the test, copy&pasting them one by one: # $ . "$srcdir/init.sh"; path_prepend_ . # ... # 4. Finally # $ exit # ============================================================================= # Elementary diagnostics ME_=`expr "./$0" : '.*/\(.*\)$'` # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # We use a trap below for cleanup. This requires us to go through # hoops to get the right exit status transported through the handler. # So use 'Exit STATUS' instead of 'exit STATUS' inside of the tests. # Turn off errexit here so that we don't trip the bug with OSF1/Tru64 # sh inside this function. Exit () { set +e; (exit $1); exit $1; } # Print warnings (e.g., about skipped and failed tests) to this file number. # Override by defining to say, 9, in init.cfg, and putting say, # export ...ENVVAR_SETTINGS...; $(SHELL) 9>&2 # in the definition of TESTS_ENVIRONMENT in your tests/Makefile.am file. # This is useful when using automake's parallel tests mode, to print # the reason for skip/failure to console, rather than to the .log files. : ${stderr_fileno_=2} # Note that correct expansion of "$*" depends on IFS starting with ' '. # Always write the full diagnostic to stderr. # When stderr_fileno_ is not 2, also emit the first line of the # diagnostic to that file descriptor. warn_ () { # If IFS does not start with ' ', set it and emit the warning in a subshell. case $IFS in ' '*) printf '%s\n' "$*" >&2 test $stderr_fileno_ = 2 \ || { printf '%s\n' "$*" | sed 1q >&$stderr_fileno_ ; } ;; *) (IFS=' '; warn_ "$@");; esac } fail_ () { warn_ "$ME_: failed test: $@"; Exit 1; } skip_ () { warn_ "$ME_: skipped test: $@"; Exit 77; } fatal_ () { warn_ "$ME_: hard error: $@"; Exit 99; } framework_failure_ () { warn_ "$ME_: set-up failure: $@"; Exit 99; } # ============================================================================= # Ensure the shell supports modern syntax. # Sanitize this shell to POSIX mode, if possible. DUALCASE=1; export DUALCASE if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # We require $(...) support unconditionally. # We require that the printf built-in work correctly regarding octal escapes; # this eliminates /bin/sh on AIX 7.2. # We require non-surprising "local" semantics (this eliminates dash). # This takes the admittedly draconian step of eliminating dash, because the # assignment tab=$(printf '\t') works fine, yet preceding it with "local " # transforms it into an assignment that sets the variable to the empty string. # That is too counter-intuitive, and can lead to subtle run-time malfunction. # The example below is less subtle in that with dash, it evokes the run-time # exception "dash: 1: local: 1: bad variable name". # We require a few additional shell features only when $EXEEXT is nonempty, # in order to support automatic $EXEEXT emulation: # - hyphen-containing alias names # - we prefer to use ${var#...} substitution, rather than having # to work around lack of support for that feature. # The following code attempts to find a shell with support for these features. # If the current shell passes the test, we're done. Otherwise, test other # shells until we find one that passes. If one is found, re-exec it. # If no acceptable shell is found, skip the current test. # # The "...set -x; P=1 true 2>err..." test is to disqualify any shell that # emits "P=1" into err, as /bin/sh from SunOS 5.11 and OpenBSD 4.7 do. # # Use "9" to indicate success (rather than 0), in case some shell acts # like Solaris 10's /bin/sh but exits successfully instead of with status 2. # Eval this code in a subshell to determine a shell's suitability. # 10 - passes all tests; ok to use # 9 - ok, but enabling "set -x" corrupts app stderr; prefer higher score # ? - not ok gl_shell_test_script_=' test $(echo y) = y || exit 1 LC_ALL=en_US.UTF-8 printf "\\351" 2>/dev/null \ | LC_ALL=C tr "\\351" x | LC_ALL=C grep "^x$" > /dev/null \ || exit 1 printf "\\351" 2>/dev/null \ | LC_ALL=C tr "\\351" x | LC_ALL=C grep "^x$" > /dev/null \ || exit 1 f_local_() { local v=1; }; f_local_ || exit 1 f_dash_local_fail_() { local t=$(printf " 1"); }; f_dash_local_fail_ score_=10 if test "$VERBOSE" = yes; then test -n "$( (exec 3>&1; set -x; P=1 true 2>&3) 2> /dev/null)" && score_=9 fi test -z "$EXEEXT" && exit $score_ shopt -s expand_aliases alias a-b="echo zoo" v=abx test ${v%x} = ab \ && test ${v#a} = bx \ && test $(a-b) = zoo \ && exit $score_ ' if test "x$1" = "x--no-reexec"; then shift else # Assume a working shell. Export to subshells (setup_ needs this). gl_set_x_corrupts_stderr_=false export gl_set_x_corrupts_stderr_ # Record the first marginally acceptable shell. marginal_= # Search for a shell that meets our requirements. for re_shell_ in __current__ "${CONFIG_SHELL:-no_shell}" \ /bin/sh bash dash zsh pdksh fail do test "$re_shell_" = no_shell && continue # If we've made it all the way to the sentinel, "fail" without # finding even a marginal shell, skip this test. if test "$re_shell_" = fail; then test -z "$marginal_" && skip_ failed to find an adequate shell re_shell_=$marginal_ break fi # When testing the current shell, simply "eval" the test code. # Otherwise, run it via $re_shell_ -c ... if test "$re_shell_" = __current__; then # 'eval'ing this code makes Solaris 10's /bin/sh exit with # $? set to 2. It does not evaluate any of the code after the # "unexpected" first '('. Thus, we must run it in a subshell. ( eval "$gl_shell_test_script_" ) > /dev/null 2>&1 else "$re_shell_" -c "$gl_shell_test_script_" 2>/dev/null fi st_=$? # $re_shell_ works just fine. Use it. if test $st_ = 10; then gl_set_x_corrupts_stderr_=false break fi # If this is our first marginally acceptable shell, remember it. if test "$st_:$marginal_" = 9: ; then marginal_="$re_shell_" gl_set_x_corrupts_stderr_=true fi done if test "$re_shell_" != __current__; then # Found a usable shell. Preserve -v and -x. case $- in *v*x* | *x*v*) opts_=-vx ;; *v*) opts_=-v ;; *x*) opts_=-x ;; *) opts_= ;; esac re_shell=$re_shell_ export re_shell exec "$re_shell_" $opts_ "$0" --no-reexec "$@" echo "$ME_: exec failed" 1>&2 exit 127 fi fi # ============================================================================= # Ensure the shell behaves reasonably. # If this is bash, turn off all aliases. test -n "$BASH_VERSION" && unalias -a # Note that when supporting $EXEEXT (transparently mapping from PROG_NAME to # PROG_NAME.exe), we want to support hyphen-containing names like test-acos. # That is part of the shell-selection test above. Why use aliases rather # than functions? Because support for hyphen-containing aliases is more # widespread than that for hyphen-containing function names. test -n "$EXEEXT" && test -n "$BASH_VERSION" && shopt -s expand_aliases # ============================================================================= # Creating a temporary directory (needed by the core test framework) # Create a temporary directory, much like mktemp -d does. # Written by Jim Meyering. # # Usage: mktempd_ /tmp phoey.XXXXXXXXXX # # First, try to use the mktemp program. # Failing that, we'll roll our own mktemp-like function: # - try to get random bytes from /dev/urandom, mapping them to file-name bytes # - failing that, generate output from a combination of quickly-varying # sources and awk. # - try to create the desired directory. # - make only $MAX_TRIES_ attempts # Helper function. Print $N pseudo-random bytes from a-zA-Z0-9. rand_bytes_ () { n_=$1 # Maybe try openssl rand -base64 $n_prime_|tr '+/=\012' abcd first? # But if they have openssl, they probably have mktemp, too. chars_=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 dev_rand_=/dev/urandom if test -r "$dev_rand_"; then # Note: 256-length($chars_) == 194; 3 copies of $chars_ is 186 + 8 = 194. dd ibs=$n_ count=1 if=$dev_rand_ 2>/dev/null \ | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_ return fi # Fall back on quickly-varying sources + awk. # Limit awk program to 7th Edition Unix so that it works even on Solaris 10. (date; date +%N; free; who -a; w; ps auxww; ps -ef) 2>&1 | awk ' BEGIN { n = '"$n_"' for (i = 0; i < 256; i++) ordinal[sprintf ("%c", i)] = i } { for (i = 1; i <= length; i++) a[ai++ % n] += ordinal[substr ($0, i, 1)] } END { chars = "'"$chars_"'" charslen = length (chars) for (i = 0; i < n; i++) printf "%s", substr (chars, a[i] % charslen + 1, 1) printf "\n" } ' } mktempd_ () { case $# in 2);; *) fail_ "Usage: mktempd_ DIR TEMPLATE";; esac destdir_=$1 template_=$2 MAX_TRIES_=4 # Disallow any trailing slash on specified destdir: # it would subvert the post-mktemp "case"-based destdir test. case $destdir_ in / | //) destdir_slash_=$destdir;; */) fail_ "invalid destination dir: remove trailing slash(es)";; *) destdir_slash_=$destdir_/;; esac case $template_ in *XXXX) ;; *) fail_ \ "invalid template: $template_ (must have a suffix of at least 4 X's)";; esac # First, try to use mktemp. d=`unset TMPDIR; { mktemp -d -t -p "$destdir_" "$template_"; } 2>/dev/null` && # The resulting name must be in the specified directory. case $d in "$destdir_slash_"*) :;; *) false;; esac && # It must have created the directory. test -d "$d" && # It must have 0700 permissions. Handle sticky "S" bits. perms=`ls -dgo "$d" 2>/dev/null` && case $perms in drwx--[-S]---*) :;; *) false;; esac && { echo "$d" return } # If we reach this point, we'll have to create a directory manually. # Get a copy of the template without its suffix of X's. base_template_=`echo "$template_"|sed 's/XX*$//'` # Calculate how many X's we've just removed. template_length_=`echo "$template_" | wc -c` nx_=`echo "$base_template_" | wc -c` nx_=`expr $template_length_ - $nx_` err_= i_=1 while :; do X_=`rand_bytes_ $nx_` candidate_dir_="$destdir_slash_$base_template_$X_" err_=`mkdir -m 0700 "$candidate_dir_" 2>&1` \ && { echo "$candidate_dir_"; return; } test $MAX_TRIES_ -le $i_ && break; i_=`expr $i_ + 1` done fail_ "$err_" } # ============================================================================= # Core test framework # An arbitrary prefix to help distinguish test directories. testdir_prefix_ () { printf gt; } # Set up the environment for the test to run in. setup_ () { if test "$VERBOSE" = yes; then # Test whether set -x may cause the selected shell to corrupt an # application's stderr. Many do, including zsh-4.3.10 and the /bin/sh # from SunOS 5.11, OpenBSD 4.7 and Irix 6.5. # If enabling verbose output this way would cause trouble, simply # issue a warning and refrain. if $gl_set_x_corrupts_stderr_; then warn_ "using SHELL=$SHELL with 'set -x' corrupts stderr" else set -x fi fi initial_cwd_=$PWD # Create and enter the temporary directory. pfx_=`testdir_prefix_` test_dir_=`mktempd_ "$initial_cwd_" "$pfx_-$ME_.XXXX"` \ || fail_ "failed to create temporary directory in $initial_cwd_" cd "$test_dir_" || fail_ "failed to cd to temporary directory" # Set variables srcdir, builddir, for the convenience of the test. case $srcdir in /* | ?:*) ;; *) srcdir="../$srcdir" ;; esac builddir=".." export srcdir builddir # As autoconf-generated configure scripts do, ensure that IFS # is defined initially, so that saving and restoring $IFS works. gl_init_sh_nl_=' ' IFS=" "" $gl_init_sh_nl_" # This trap statement, along with a trap on 0 below, ensure that the # temporary directory, $test_dir_, is removed upon exit as well as # upon receipt of any of the listed signals. for sig_ in 1 2 3 13 15; do eval "trap 'Exit $(expr $sig_ + 128)' $sig_" done # Remove relative and non-accessible directories from PATH, including '.' # and Zero-length entries. saved_IFS="$IFS"; IFS="$PATH_SEPARATOR" new_PATH= for dir in $PATH; do IFS="$saved_IFS" case "$dir" in [\\/]* | ?:[\\/]*) test -d "$dir/." || continue new_PATH="${new_PATH}${new_PATH:+$PATH_SEPARATOR}${dir}" ;; esac done IFS="$saved_IFS" PATH="$new_PATH" export PATH } # This is a stub function that is run upon trap (upon regular exit and # interrupt). Override it with a per-test function, e.g., to unmount # a partition, or to undo any other global state changes. cleanup_ () { :; } # Run the user-overridable cleanup_ function, remove the temporary # directory and exit with the incoming value of $?. remove_tmp_ () { __st=$? cleanup_ if test "$KEEP" = yes; then echo "Not removing temporary directory $test_dir_" else # cd out of the directory we're about to remove cd "$initial_cwd_" || cd / || cd /tmp chmod -R u+rwx "$test_dir_" # If removal fails and exit status was to be 0, then change it to 1. rm -rf "$test_dir_" || { test $__st = 0 && __st=1; } fi exit $__st } # ============================================================================= # Prepending directories to PATH # Given a directory name, DIR, if every entry in it that matches *.exe # contains only the specified bytes (see the case stmt below), then print # a space-separated list of those names and return 0. Otherwise, don't # print anything and return 1. Naming constraints apply also to DIR. find_exe_basenames_ () { feb_dir_=$1 feb_fail_=0 feb_result_= feb_sp_= for feb_file_ in $feb_dir_/*.exe; do # If there was no *.exe file, or there existed a file named "*.exe" that # was deleted between the above glob expansion and the existence test # below, just skip it. test "x$feb_file_" = "x$feb_dir_/*.exe" && test ! -f "$feb_file_" \ && continue # Exempt [.exe, since we can't create a function by that name, yet # we can't invoke [ by PATH search anyways due to shell builtins. test "x$feb_file_" = "x$feb_dir_/[.exe" && continue case $feb_file_ in *[!-a-zA-Z/0-9_.+]*) feb_fail_=1; break;; *) # Remove leading file name components as well as the .exe suffix. feb_file_=${feb_file_##*/} feb_file_=${feb_file_%.exe} feb_result_="$feb_result_$feb_sp_$feb_file_";; esac feb_sp_=' ' done test $feb_fail_ = 0 && printf %s "$feb_result_" return $feb_fail_ } # Consider the files in directory, $1. # For each file name of the form PROG.exe, create an alias named # PROG that simply invokes PROG.exe, then return 0. If any selected # file name or the directory name, $1, contains an unexpected character, # define no alias and return 1. create_exe_shims_ () { case $EXEEXT in '') return 0 ;; .exe) ;; *) echo "$0: unexpected \$EXEEXT value: $EXEEXT" 1>&2; return 1 ;; esac base_names_=`find_exe_basenames_ $1` \ || { echo "$0 (exe_shim): skipping directory: $1" 1>&2; return 0; } if test -n "$base_names_"; then for base_ in $base_names_; do alias "$base_"="$base_$EXEEXT" done fi return 0 } # Use this function to prepend to PATH an absolute name for each # specified, possibly-$initial_cwd_-relative, directory. path_prepend_ () { while test $# != 0; do path_dir_=$1 case $path_dir_ in '') fail_ "invalid path dir: '$1'";; /* | ?:*) abs_path_dir_=$path_dir_;; *) abs_path_dir_=$initial_cwd_/$path_dir_;; esac case $abs_path_dir_ in *$PATH_SEPARATOR*) fail_ "invalid path dir: '$abs_path_dir_'";; esac PATH="$abs_path_dir_$PATH_SEPARATOR$PATH" # Create an alias, FOO, for each FOO.exe in this directory. create_exe_shims_ "$abs_path_dir_" \ || fail_ "something failed (above): $abs_path_dir_" shift done export PATH } # ============================================================================= # Convenience environment variables for the tests # ----------------------------------------------------------------------------- # Enable glibc's malloc-perturbing option. # This is useful for exposing code that depends on the fact that # malloc-related functions often return memory that is mostly zeroed. # If you have the time and cycles, use valgrind to do an even better job. : ${MALLOC_PERTURB_=87} export MALLOC_PERTURB_ # ----------------------------------------------------------------------------- # The interpreter for Bourne-shell scripts. # No special standards compatibility requirements. # Some environments, such as Android, don't have /bin/sh. if test -f /bin/sh$EXEEXT; then BOURNE_SHELL=/bin/sh else BOURNE_SHELL=sh fi # ============================================================================= # Convenience functions for the tests # ----------------------------------------------------------------------------- # Return value checking # This is used to simplify checking of the return value # which is useful when ensuring a command fails as desired. # I.e., just doing `command ... &&fail=1` will not catch # a segfault in command for example. With this helper you # instead check an explicit exit code like # returns_ 1 command ... || fail returns_ () { # Disable tracing so it doesn't interfere with stderr of the wrapped command { set +x; } 2>/dev/null local exp_exit="$1" shift "$@" test $? -eq $exp_exit && ret_=0 || ret_=1 if test "$VERBOSE" = yes && test "$gl_set_x_corrupts_stderr_" = false; then set -x fi { return $ret_; } 2>/dev/null } # ----------------------------------------------------------------------------- # Text file comparison # Emit a header similar to that from diff -u; Print the simulated "diff" # command so that the order of arguments is clear. Don't bother with @@ lines. emit_diff_u_header_ () { printf '%s\n' "diff -u $*" \ "--- $1 1970-01-01" \ "+++ $2 1970-01-01" } # Arrange not to let diff or cmp operate on /dev/null, # since on some systems (at least OSF/1 5.1), that doesn't work. # When there are not two arguments, or no argument is /dev/null, return 2. # When one argument is /dev/null and the other is not empty, # cat the nonempty file to stderr and return 1. # Otherwise, return 0. compare_dev_null_ () { test $# = 2 || return 2 if test "x$1" = x/dev/null; then test -s "$2" || return 0 emit_diff_u_header_ "$@"; sed 's/^/+/' "$2" return 1 fi if test "x$2" = x/dev/null; then test -s "$1" || return 0 emit_diff_u_header_ "$@"; sed 's/^/-/' "$1" return 1 fi return 2 } for diff_opt_ in -u -U3 -c '' no; do test "$diff_opt_" != no && diff_out_=`exec 2>/dev/null LC_ALL=C diff $diff_opt_ "$0" "$0" < /dev/null` && break done if test "$diff_opt_" != no; then if test -z "$diff_out_"; then compare_ () { LC_ALL=C diff $diff_opt_ "$@"; } else compare_ () { # If no differences were found, AIX and HP-UX 'diff' produce output # like "No differences encountered". Hide this output. LC_ALL=C diff $diff_opt_ "$@" > diff.out diff_status_=$? test $diff_status_ -eq 0 || cat diff.out || diff_status_=2 rm -f diff.out || diff_status_=2 return $diff_status_ } fi elif cmp -s /dev/null /dev/null 2>/dev/null; then compare_ () { cmp -s "$@"; } else compare_ () { cmp "$@"; } fi # Usage: compare EXPECTED ACTUAL # # Given compare_dev_null_'s preprocessing, defer to compare_ if 2 or more. # Otherwise, propagate $? to caller: any diffs have already been printed. compare () { # This looks like it can be factored to use a simple "case $?" # after unchecked compare_dev_null_ invocation, but that would # fail in a "set -e" environment. if compare_dev_null_ "$@"; then return 0 else case $? in 1) return 1;; *) compare_ "$@";; esac fi } # ----------------------------------------------------------------------------- # If you want to override the testdir_prefix_ function, # or to add more utility functions, use this file. test -f "$srcdir/init.cfg" \ && . "$srcdir/init.cfg" # ============================================================================= # Set up the environment for the test to run in. setup_ "$@" # This trap is here, rather than in the setup_ function, because some # shells run the exit trap at shell function exit, rather than script exit. trap remove_tmp_ EXIT ����������������������������������gnuastro-0.22/bootstrapped/tests/test-init.sh�������������������������������������������������������0000755�0001750�0001750�00000004636�14557510510�015123� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Unit tests for init.sh # Copyright (C) 2011-2024 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. */ : "${srcdir=.}" . "$srcdir/init.sh"; path_prepend_ . fail=0 test_compare() { touch empty || fail=1 echo xyz > in || fail=1 compare /dev/null /dev/null >out 2>err || fail=1 test -s out && fail_ "out not empty: $(cat out)" # "err" should be empty, too, but has "set -x" output when VERBOSE=yes case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac compare /dev/null empty >out 2>err || fail=1 test -s out && fail_ "out not empty: $(cat out)" case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac compare in in >out 2>err || fail=1 test -s out && fail_ "out not empty: $(cat out)" case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac compare /dev/null in >out 2>err && fail=1 cat <<\EOF > exp diff -u /dev/null in --- /dev/null 1970-01-01 +++ in 1970-01-01 +xyz EOF compare exp out || fail=1 case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac compare empty in >out 2>err && fail=1 # Compare against expected output only if compare is using diff -u. if grep @ out >/dev/null; then # Remove the TAB-date suffix on each --- and +++ line, # for both the expected and the actual output files. # Also remove the @@ line, since Solaris 5.10 and GNU diff formats differ: # -@@ -0,0 +1 @@ # +@@ -1,0 +1,1 @@ # Also, remove space after leading '+', since AIX 7.1 diff outputs a space. sed 's/ .*//;/^@@/d;s/^+ /+/' out > k && mv k out cat <<\EOF > exp --- empty +++ in +xyz EOF compare exp out || fail=1 fi case $- in *x*) ;; *) test -s err && fail_ "err not empty: $(cat err)";; esac } test_compare Exit $fail ��������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/thread-optim.h�����������������������������������������������������0000644�0001750�0001750�00000004441�14557510511�015405� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Optimization of multithreaded code. Copyright (C) 2020-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2020. */ #ifndef _THREAD_OPTIM_H #define _THREAD_OPTIM_H /* This file defines a way to optimize multithreaded code for the single-thread case, based on the variable '__libc_single_threaded', defined in glibc >= 2.32. */ /* Typical use: In a block or function, use bool mt = gl_multithreaded (); ... if (mt) if (pthread_mutex_lock (&lock)) abort (); ... if (mt) if (pthread_mutex_unlock (&lock)) abort (); The gl_multithreaded () invocation determines whether the program currently is multithreaded. if (mt) STATEMENT executes STATEMENT in the multithreaded case, and skips it in the single-threaded case. The code between the gl_multithreaded () invocation and any use of the variable 'mt' must not create threads or invoke functions that may indirectly create threads (e.g. 'dlopen' may, indirectly through C++ initializers of global variables in the shared library being opened, create threads). The lock here is meant to synchronize threads in the same process. The same optimization cannot be applied to locks that synchronize different processes (e.g. through shared memory mappings). */ /* This file uses HAVE_SYS_SINGLE_THREADED_H. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #if HAVE_SYS_SINGLE_THREADED_H /* glibc >= 2.32 */ # include <sys/single_threaded.h> # define gl_multithreaded() (!__libc_single_threaded) #else # define gl_multithreaded() 1 #endif #endif /* _THREAD_OPTIM_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-verify.sh�����������������������������������������������������0000755�0001750�0001750�00000001325�14557510510�015454� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh . "${srcdir=.}/init.sh" # We are not interested in triggering bugs in the compilers and tools # (such as gcc 4.3.1 on openSUSE 11.0). unset MALLOC_PERTURB_ # Rather than figure out how to invoke the compiler with the right # include path ourselves, we let make do it: (cd "$initial_cwd_" \ && rm -f test-verify-try.o \ && $MAKE test-verify-try.o >/dev/null 2>&1) \ || skip_ "cannot compile error-free" # Now, prove that we encounter all expected compilation failures: : >out : >err for i in 1 2 3 4 5; do (cd "$initial_cwd_" rm -f test-verify-try.o $MAKE CFLAGS=-DEXP_FAIL=$i test-verify-try.o) >>out 2>>err \ && { warn_ "compiler didn't detect verification failure $i"; fail=1; } done Exit $fail �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wcrtomb.sh����������������������������������������������������0000755�0001750�0001750�00000001672�14557510511�015633� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test in the POSIX locale. LC_ALL=C ${CHECKER} ./test-wcrtomb${EXEEXT} 1 || exit 1 LC_ALL=POSIX ${CHECKER} ./test-wcrtomb${EXEEXT} 1 || exit 1 # Test in an ISO-8859-1 or ISO-8859-15 locale. : "${LOCALE_FR=fr_FR}" if test $LOCALE_FR != none; then LC_ALL=$LOCALE_FR \ ${CHECKER} ./test-wcrtomb${EXEEXT} 2 \ || exit 1 fi # Test whether a specific UTF-8 locale is installed. : "${LOCALE_FR_UTF8=fr_FR.UTF-8}" if test $LOCALE_FR_UTF8 != none; then LC_ALL=$LOCALE_FR_UTF8 \ ${CHECKER} ./test-wcrtomb${EXEEXT} 3 \ || exit 1 fi # Test whether a specific EUC-JP locale is installed. : "${LOCALE_JA=ja_JP}" if test $LOCALE_JA != none; then LC_ALL=$LOCALE_JA \ ${CHECKER} ./test-wcrtomb${EXEEXT} 4 \ || exit 1 fi # Test whether a specific GB18030 locale is installed. : "${LOCALE_ZH_CN=zh_CN.GB18030}" if test $LOCALE_ZH_CN != none; then LC_ALL=$LOCALE_ZH_CN \ ${CHECKER} ./test-wcrtomb${EXEEXT} 5 \ || exit 1 fi exit 0 ����������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wcrtomb-w32-2.sh����������������������������������������������0000755�0001750�0001750�00000000135�14557510510�016373� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1252 locale. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} French_France 1252 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wcrtomb-w32-3.sh����������������������������������������������0000755�0001750�0001750�00000000145�14557510510�016375� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP1256 locale. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wcrtomb-w32-4.sh����������������������������������������������0000755�0001750�0001750�00000000215�14557510510�016374� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test some UTF-8 locales. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wcrtomb-w32-5.sh����������������������������������������������0000755�0001750�0001750�00000000134�14557510510�016375� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP932 locale. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} Japanese_Japan 932 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wcrtomb-w32-6.sh����������������������������������������������0000755�0001750�0001750�00000000134�14557510510�016376� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP950 locale. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_Taiwan 950 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wcrtomb-w32-7.sh����������������������������������������������0000755�0001750�0001750�00000000133�14557510511�016377� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a CP936 locale. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_China 936 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-wcrtomb-w32-8.sh����������������������������������������������0000755�0001750�0001750�00000000137�14557510511�016404� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test a GB18030 locale. ${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_China 54936 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/wctomb-impl.h������������������������������������������������������0000644�0001750�0001750�00000002106�14557510511�015236� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to multibyte character. Copyright (C) 2011-2024 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ int wctomb (char *s, wchar_t wc) { if (s == NULL) return 0; else { mbstate_t state; size_t result; mbszero (&state); result = wcrtomb (s, wc, &state); if (result == (size_t)-1) return -1; return result; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/windows-thread.h���������������������������������������������������0000644�0001750�0001750�00000004542�14557510511�015751� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creating and controlling threads (native Windows implementation). Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_THREAD_H #define _WINDOWS_THREAD_H /* This file uses _Noreturn. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> /* The glwthread_thread_t is a pointer to a structure in memory. Why not the thread handle? If it were the thread handle, it would be hard to implement glwthread_thread_self() (since GetCurrentThread () returns a pseudo-handle, DuplicateHandle (GetCurrentThread ()) returns a handle that must be closed afterwards, and there is no function for quickly retrieving a thread handle from its id). Why not the thread id? I tried it. It did not work: Sometimes ids appeared that did not belong to running threads, and glthread_join failed with ESRCH. */ typedef struct glwthread_thread_struct *glwthread_thread_t; #ifdef __cplusplus extern "C" { #endif /* attr is a bit mask, consisting of the following bits: */ #define GLWTHREAD_ATTR_DETACHED 1 extern int glwthread_thread_create (glwthread_thread_t *threadp, unsigned int attr, void * (*func) (void *), void *arg); extern int glwthread_thread_join (glwthread_thread_t thread, void **retvalp); extern int glwthread_thread_detach (glwthread_thread_t thread); extern glwthread_thread_t glwthread_thread_self (void); extern _Noreturn void glwthread_thread_exit (void *retval); #ifdef __cplusplus } #endif #endif /* _WINDOWS_THREAD_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/windows-tls.h������������������������������������������������������0000644�0001750�0001750�00000002705�14557510511�015303� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Thread-local storage (native Windows implementation). Copyright (C) 2005-2024 Free Software Foundation, Inc. This 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 file 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 program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #ifndef _WINDOWS_TLS_H #define _WINDOWS_TLS_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> typedef DWORD glwthread_tls_key_t; #ifdef __cplusplus extern "C" { #endif extern int glwthread_tls_key_create (glwthread_tls_key_t *keyp, void (*destructor) (void *)); extern void *glwthread_tls_get (glwthread_tls_key_t key); extern int glwthread_tls_set (glwthread_tls_key_t key, void *value); extern int glwthread_tls_key_delete (glwthread_tls_key_t key); extern void glwthread_tls_process_destructors (void); #define GLWTHREAD_DESTRUCTOR_ITERATIONS 4 #ifdef __cplusplus } #endif #endif /* _WINDOWS_TLS_H */ �����������������������������������������������������������gnuastro-0.22/bootstrapped/tests/xalloc.h�����������������������������������������������������������0000644�0001750�0001750�00000015456�14557510511�014302� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xalloc.h -- malloc with out-of-memory checking Copyright (C) 1990-2000, 2003-2004, 2006-2024 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef XALLOC_H_ #define XALLOC_H_ /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _Noreturn, _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_RETURNS_NONNULL. */ #if !_GL_CONFIG_H_INCLUDED #error "Please include config.h first." #endif #include <stddef.h> #include <stdlib.h> #if GNULIB_XALLOC # include "idx.h" #endif _GL_INLINE_HEADER_BEGIN #ifndef XALLOC_INLINE # define XALLOC_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif #if GNULIB_XALLOC_DIE /* This function is always triggered when memory is exhausted. It must be defined by the application, either explicitly or by using gnulib's xalloc-die module. This is the function to call when one wants the program to die because of a memory allocation failure. */ _Noreturn void xalloc_die (void); #endif /* GNULIB_XALLOC_DIE */ #if GNULIB_XALLOC void *xmalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *ximalloc (idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xinmalloc (idx_t n, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xzalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xizalloc (idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xcalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xicalloc (idx_t n, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xrealloc (void *p, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2)); void *xirealloc (void *p, idx_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xreallocarray (void *p, size_t n, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); void *xireallocarray (void *p, idx_t n, idx_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *x2realloc (void *p, size_t *ps) /* superseded by xpalloc */ _GL_ATTRIBUTE_RETURNS_NONNULL; void *x2nrealloc (void *p, size_t *pn, size_t s) /* superseded by xpalloc */ _GL_ATTRIBUTE_RETURNS_NONNULL; void *xpalloc (void *pa, idx_t *pn, idx_t n_incr_min, ptrdiff_t n_max, idx_t s) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xmemdup (void const *p, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *ximemdup (void const *p, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; char *ximemdup0 (void const *p, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; char *xstrdup (char const *str) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* In the following macros, T must be an elementary or structure/union or typedef'ed type, or a pointer to such a type. To apply one of the following macros to a function pointer or array type, you need to typedef it first and use the typedef name. */ /* Allocate an object of type T dynamically, with error checking. */ /* extern t *XMALLOC (typename t); */ # define XMALLOC(t) ((t *) xmalloc (sizeof (t))) /* Allocate memory for N elements of type T, with error checking. */ /* extern t *XNMALLOC (size_t n, typename t); */ # define XNMALLOC(n, t) \ ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t)))) /* Allocate an object of type T dynamically, with error checking, and zero it. */ /* extern t *XZALLOC (typename t); */ # define XZALLOC(t) ((t *) xzalloc (sizeof (t))) /* Allocate memory for N elements of type T, with error checking, and zero it. */ /* extern t *XCALLOC (size_t n, typename t); */ # define XCALLOC(n, t) \ ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t)))) /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. */ void *xnmalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; /* FIXME: Deprecate this in favor of xreallocarray? */ /* Change the size of an allocated block of memory P to an array of N objects each of S bytes, with error checking. S must be nonzero. */ XALLOC_INLINE void *xnrealloc (void *p, size_t n, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); XALLOC_INLINE void * xnrealloc (void *p, size_t n, size_t s) { return xreallocarray (p, n, s); } /* Return a pointer to a new buffer of N bytes. This is like xmalloc, except it returns char *. */ char *xcharalloc (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; #endif /* GNULIB_XALLOC */ #ifdef __cplusplus } #endif #if GNULIB_XALLOC && defined __cplusplus /* C++ does not allow conversions from void * to other pointer types without a cast. Use templates to work around the problem when possible. */ template <typename T> inline T * xrealloc (T *p, size_t s) { return (T *) xrealloc ((void *) p, s); } template <typename T> inline T * xreallocarray (T *p, size_t n, size_t s) { return (T *) xreallocarray ((void *) p, n, s); } /* FIXME: Deprecate this in favor of xreallocarray? */ template <typename T> inline T * xnrealloc (T *p, size_t n, size_t s) { return xreallocarray (p, n, s); } template <typename T> inline T * x2realloc (T *p, size_t *pn) { return (T *) x2realloc ((void *) p, pn); } template <typename T> inline T * x2nrealloc (T *p, size_t *pn, size_t s) { return (T *) x2nrealloc ((void *) p, pn, s); } template <typename T> inline T * xmemdup (T const *p, size_t s) { return (T *) xmemdup ((void const *) p, s); } #endif /* GNULIB_XALLOC && C++ */ _GL_INLINE_HEADER_END #endif /* !XALLOC_H_ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/tests/test-xalloc-die.sh�������������������������������������������������0000755�0001750�0001750�00000002122�14557510511�016166� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Test suite for xalloc_die. # Copyright (C) 2009-2024 Free Software Foundation, Inc. # This file is part of the GNUlib Library. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. . "${srcdir=.}/init.sh"; path_prepend_ . ${CHECKER} test-xalloc-die${EXEEXT} > out 2> err case $? in 1) ;; *) Exit 1;; esac tr -d '\015' < err \ | sed 's,.*test-xalloc-die[.ex]*:,test-xalloc-die:,' > err2 || Exit 1 compare - err2 <<\EOF || Exit 1 test-xalloc-die: memory exhausted EOF test -s out && Exit 1 Exit $fail ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/doc/���������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�012321� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/bootstrapped/doc/gpl-3.0.texi���������������������������������������������������������0000644�0001750�0001750�00000104421�14557510504�014216� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@c The GNU General Public License. @center Version 3, 29 June 2007 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{https://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @heading Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program---to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. @heading TERMS AND CONDITIONS @enumerate 0 @item Definitions. ``This License'' refers to version 3 of the GNU General Public License. ``Copyright'' also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. ``The Program'' refers to any copyrightable work licensed under this License. Each licensee is addressed as ``you''. ``Licensees'' and ``recipients'' may be individuals or organizations. To ``modify'' a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a ``modified version'' of the earlier work or a work ``based on'' the earlier work. A ``covered work'' means either the unmodified Program or a work based on the Program. To ``propagate'' a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To ``convey'' a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays ``Appropriate Legal Notices'' to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. @item Source Code. The ``source code'' for a work means the preferred form of the work for making modifications to it. ``Object code'' means any non-source form of a work. A ``Standard Interface'' means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The ``System Libraries'' of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A ``Major Component'', in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The ``Corresponding Source'' for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. @item Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. @item Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. @item Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. @item Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: @enumerate a @item The work must carry prominent notices stating that you modified it, and giving a relevant date. @item The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to ``keep intact all notices''. @item You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. @item If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. @end enumerate A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. @item Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: @enumerate a @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. @item Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. @item Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. @item Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. @end enumerate A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A ``User Product'' is either (1) a ``consumer product'', which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, ``normally used'' refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. ``Installation Information'' for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. @item Additional Terms. ``Additional permissions'' are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: @enumerate a @item Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or @item Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or @item Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or @item Limiting the use for publicity purposes of names of licensors or authors of the material; or @item Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or @item Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. @end enumerate All other non-permissive additional terms are considered ``further restrictions'' within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. @item Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. @item Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. @item Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An ``entity transaction'' is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. @item Patents. A ``contributor'' is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's ``contributor version''. A contributor's ``essential patent claims'' are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, ``control'' includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a ``patent license'' is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To ``grant'' such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. ``Knowingly relying'' means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is ``discriminatory'' if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. @item No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. @item Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. @item Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. @item Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW@. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE@. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU@. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. @item Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @item Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. @end enumerate @heading END OF TERMS AND CONDITIONS @heading How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. @smallexample @var{one line to give the program's name and a brief idea of what it does.} Copyright (C) @var{year} @var{name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see @url{https://www.gnu.org/licenses/}. @end smallexample Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: @smallexample @var{program} Copyright (C) @var{year} @var{name of author} This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. This is free software, and you are welcome to redistribute it under certain conditions; type @samp{show c} for details. @end smallexample The hypothetical commands @samp{show w} and @samp{show c} should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an ``about box''. You should also get your employer (if you work as a programmer) or school, if any, to sign a ``copyright disclaimer'' for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see @url{https://www.gnu.org/licenses/}. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read @url{https://www.gnu.org/licenses/why-not-lgpl.html}. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/Makefile.am���������������������������������������������������������������������������0000644�0001750�0001750�00000055333�14551337306�011034� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.in ## ## Hand written file: used as input into Autotools. ## This is part of GNU Astronomy Utilities (gnuastro). ## ## Original author: ## Mohammad Akhlaghi <mohammad@akhlaghi.org> ## Contributing author(s): ## Copyright (C) 2015-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Sources to be created before everything else ## ============================================ ## ## These target(s) will be created before anything else when running ## 'make', 'make check', or 'make install', see the "Built sources" section ## of the AUTOMAKE manual and the git-version-gen script comments for more ## information. Note that AUTHORS depends on '$(top_srcdir)/.version', and ## '$(top_srcdir)/.version' depends on $(top_srcdir)/configure'. So any ## time the version is updated, both of these will be re-built. But during ## usual utility and library development, '$(top_srcdir)/configure' is not ## commonly updated, so this will not slow down the process. BUILT_SOURCES = $(top_srcdir)/AUTHORS ## Directories to check: ## ===================== ## ## Gnulib is intentionally compiled and tested prior to the gnuastro ## progams. With this configuration, the user can confirm if the ## problem is internal to gnulib or still persists after all the ## Gnulib tests have been done. if COND_ARITHMETIC MAYBE_ARITHMETIC = bin/arithmetic MAYBE_COMPLETE_ARITHMETIC = bin/arithmetic/astarithmetic-complete.bash endif if COND_BUILDPROG MAYBE_BUILDPROG = bin/buildprog MAYBE_COMPLETE_BUILDPROG = bin/buildprog/astbuildprog-complete.bash endif if COND_CONVERTT MAYBE_CONVERTT = bin/convertt MAYBE_COMPLETE_CONVERTT = bin/convertt/astconvertt-complete.bash endif if COND_CONVOLVE MAYBE_CONVOLVE = bin/convolve MAYBE_COMPLETE_CONVOLVE = bin/convolve/astconvolve-complete.bash endif if COND_COSMICCAL MAYBE_COSMICCAL = bin/cosmiccal MAYBE_COMPLETE_COSMICCAL = bin/cosmiccal/astcosmiccal-complete.bash endif if COND_CROP MAYBE_CROP = bin/crop MAYBE_COMPLETE_CROP = bin/crop/astcrop-complete.bash endif if COND_FITS MAYBE_FITS = bin/fits MAYBE_COMPLETE_FITS = bin/fits/astfits-complete.bash endif if COND_MATCH MAYBE_MATCH = bin/match endif if COND_MKCATALOG MAYBE_MKCATALOG = bin/mkcatalog endif if COND_MKPROF MAYBE_MKPROF = bin/mkprof endif if COND_NOISECHISEL MAYBE_NOISECHISEL = bin/noisechisel endif if COND_QUERY MAYBE_QUERY = bin/query endif if COND_SEGMENT MAYBE_SEGMENT = bin/segment endif if COND_STATISTICS MAYBE_STATISTICS = bin/statistics endif if COND_TABLE MAYBE_TABLE = bin/table MAYBE_COMPLETE_TABLE = bin/table/asttable-complete.bash endif #if COND_TEMPLATE # MAYBE_TEMPLATE = bin/TEMPLATE #endif if COND_WARP MAYBE_WARP = bin/warp endif if COND_GNULIBCHECK MAYBE_GNULIBCHECK = bootstrapped/tests endif ## Subdirectories to build ## ======================= ## In the list below, ORDER MATTERS: ## 1. Build Gnulib (and its tests if requested) ## 2. Build Gnuastro's library. ## 3. Build the programs (order doesn't matter within the programs, so ## they are sorted alphabetically). ## 4. Build the installed scripts. ## 5. Build the documentation. ## 6. Build the tests. # ## Note that by default 'COND_TEMPLATE' is not set in configure, it is ## commented, and exists only as a template for you to copy and paste to ## name your new utility. The same rule is applied here (in the 'if' ## conditions above). When 'MAYBE_TEMPLATE' is not defined, then Make will ## see it as a blank string and igonore it, so there is no problem with ## having an uncommented 'MAYBE_TEMPLATE' as a value in 'SUBDIRS'. SUBDIRS = bootstrapped/lib \ $(MAYBE_GNULIBCHECK) \ lib \ $(MAYBE_ARITHMETIC) \ $(MAYBE_BUILDPROG) \ $(MAYBE_CONVERTT) \ $(MAYBE_CONVOLVE) \ $(MAYBE_COSMICCAL) \ $(MAYBE_CROP) \ $(MAYBE_FITS) \ $(MAYBE_MATCH) \ $(MAYBE_MKCATALOG) \ $(MAYBE_MKPROF) \ $(MAYBE_NOISECHISEL) \ $(MAYBE_QUERY) \ $(MAYBE_SEGMENT) \ $(MAYBE_STATISTICS) \ $(MAYBE_TABLE) \ $(MAYBE_TEMPLATE) \ $(MAYBE_WARP) \ bin/script \ doc \ tests ## Add m4/ to the list of directories to search for m4 files ## ========================================================= ACLOCAL_AMFLAGS = -I bootstrapped/m4 ## Files that are installed (and distributed) ## ========================================= dist_doc_DATA = README # Installed system configuration files # ==================================== dist_sysconf_DATA = bin/gnuastro.conf ## Files that are only distributed ## =============================== ## ## Note that 'COPYING' (containing the GNU GPL) is included in the ## distribution tarball by default in Automake, but not other license ## files, so we have to manually add 'COPYING.FDL'. ## ## The completion files for each program ('*-complete.bash') are added to ## EXTRA_DIST within each program's directory. EXTRA_DIST = COPYING.FDL genauthors .dir-locals.el .version \ developer-build bootstrapped/README .autom4te.cfg \ bin/completion.bash.in # Files that must be cleaned # ========================== # # When the user runs 'make clean' no built products should remain. Since # the Bash TAB completion feature is not a standard C program, we need to # specify the files to clean manually. CLEANFILES = bin/completion.bash bin/completion.bash.built ## Bash auto-completion ## ==================== ## ## Besides the default '.bash.in' files, for some programs (like ## Arithmetic), its necessary to parse the source (for list of all ## operators). pkgdata_DATA = bin/completion.bash bin/completion.bash: $(top_srcdir)/bin/completion.bash.in # Delete any existing output file. rm -f $@ $@.built $@.tmp # Extract the arithmetic library operators into a '.built' file. echo "" >> $@.built for op in $$($(AWK) '/^gal_arithmetic_operator_string/{parse=1} \ /^\}/{parse=0} \ parse==1 && /GAL_ARITHMETIC_OP/{print $$NF}' \ $(top_srcdir)/lib/arithmetic.c \ | $(SED) -e's|"||g' -e's|;||'); do \ ops="$$ops $$op"; \ done; \ echo "_gnuastro_autocomplete_compreply_arithmetic_lib(){" >> $@.built; \ echo "arithmetic_lib_operators=\"$$ops\"" >> $@.built; \ echo "}" >> $@.built # Extract the arithmetic program operators into the '.built' file. echo "" >> $@.built for op in $$($(AWK) '/^arithmetic_set_operator/{parse=1} \ /^\}/{parse=0} \ parse==1 && /strcmp\(string/{print $$NF}' \ $(top_srcdir)/bin/arithmetic/arithmetic.c \ | $(SED) -e's|"||g' -e's|))||'); do \ ops="$$ops $$op"; \ done; \ echo "_gnuastro_autocomplete_compreply_arithmetic_prog(){" >> $@.built; \ echo "arithmetic_prog_operators=\"$$ops\"" >> $@.built; \ echo "}" >> $@.built # Extract recognized file-format suffixes. for form in jpeg tiff; do \ sufs=""; \ echo "" >> $@.built; \ for suf in $$($(AWK) '/^gal_'$$form'_name_is_'$$form'/{parse=1} \ /^\}/{parse=0} \ parse==1 && /strcmp\(&name/{ \ for(i=1;i<=NF;++i) if($$i ~ /^"/) print $$i; \ }' $(top_srcdir)/lib/$$form.c \ | $(SED) -e's|"||g' -e's|)||g'); do \ sufs="$$sufs $$suf"; \ done; \ echo "_gnuastro_autocomplete_compreply_suffixes_$$form(){" >> $@.built; \ echo "suffixes_$$form=\"$$sufs\"" >> $@.built; \ echo "}" >> $@.built; \ done # Extract color-map values for ConvertType. vals="" echo "" >> $@.built for val in $$($(AWK) '/^ui_colormap_sanity_check/{parse=1} \ /^\}/{parse=0} \ parse==1 && /strcmp\(strarr/{ \ for(i=1;i<=NF;++i) if($$i ~ /^"/) { \ print $$i; break} \ }' $(top_srcdir)/bin/convertt/ui.c \ | $(SED) -e's|"||g' -e's|)\+||'); do \ vals="$$vals $$val"; \ done; \ echo "_gnuastro_autocomplete_compreply_convertt_colormap(){" >> $@.built; \ echo "convertt_colormaps=\"$$vals\"" >> $@.built; \ echo "}" >> $@.built # Extract the spectral line names for CosmicCalculator. names="" echo "" >> $@.built for name in $$($(AWK) '/GAL_SPECLINES_NAME/{print $$NF}' \ $(top_srcdir)/lib/gnuastro/speclines.h \ | $(SED) -e's|"||g'); do \ names="$$names $$name"; \ done; \ echo "_gnuastro_autocomplete_compreply_specline_names(){" >> $@.built; \ echo "specline_names=\"$$names\"" >> $@.built; \ echo "}" >> $@.built # Extract the WCS coordinate system strings for Fits. vals="" echo "" >> $@.built for val in $$($(AWK) '/^gal_wcs_coordsys_from_string/{parse=1} \ /^\}/{parse=0} \ parse==1 && /strcmp\(coordsys/{ \ for(i=1;i<=NF;++i) if($$i ~ /"/) { \ print $$i; break} \ }' $(top_srcdir)/lib/wcs.c \ | $(SED) -e's|"||g' -e's|)||' \ | $(AWK) 'BEGIN{FS=","} {print $$NF}' ); do \ vals="$$vals $$val"; \ done; \ echo "_gnuastro_autocomplete_compreply_wcs_coordsys(){" >> $@.built; \ echo "wcs_coordsys=\"$$vals\"" >> $@.built; \ echo "}" >> $@.built # Copy the low-level common functions to all programs, then put the # arithmetic functions inside of it. We are keeping the arithmetic # operators separate to help in debugging when necessary (they can # be 'source'd into each program's completion script). cat $(top_srcdir)/bin/completion.bash.in $@.built > $@.tmp # Copy each program's source. for f in $(MAYBE_COMPLETE_ARITHMETIC) \ $(MAYBE_COMPLETE_BUILDPROG) \ $(MAYBE_COMPLETE_CONVERTT) \ $(MAYBE_COMPLETE_CONVOLVE) \ $(MAYBE_COMPLETE_COSMICCAL) \ $(MAYBE_COMPLETE_CROP) \ $(MAYBE_COMPLETE_FITS) \ $(MAYBE_COMPLETE_TABLE); do \ $(SED) -e 's|@PREFIX[@]|$(bindir)|g' $(top_srcdir)/$$f >> $@.tmp; \ done chmod a-w $@.tmp mv $@.tmp $@ ## Print the completion messages ## ============================= ## ## After the jobs in all the subdirectories are done, print the following ## messages to confirm that everything is complete and guide the users on ## what they should do next. ## ## When running ./configure, the user can opt-out of these messages using ## the GUIDEMESSAGE variable that is set when they run ./configure with the ## '--distable-guide-message' option. ## ## Note that all-local is a prerequisite of 'make check' too, so we will ## only print its message when 'make' was called with no options. Make will ## set MAKECMDGOALS to blank if there are no arguments, however, the way ## Automake works, its value is set to "all-am". ## ## 'bin/completion.bash' has been set as a pre-requisite of this because if ## we don't do this, the completion script will be created after printing ## the message (making the message hard to notice for a user). all-local: bin/completion.bash # If we are in static linking mode, correct the 'dependency_libs' # variable of 'libgnuastro.la'. Because by default it will not # include static libraries! @if [ "X$(MAKECMDGOALS)" = "Xall-am" ] && [ "X$(ENABLE_SHARED)" = "Xno" ]; then \ $(AWK) '/^dependency_libs/{print "dependency_libs='\''$(CONFIG_LDADD)'\''"} \ !/^dependency_libs/{print}' $(top_builddir)/lib/libgnuastro.la \ > $(top_builddir)/lib/libgnuastro_tmp.la; \ mv $(top_builddir)/lib/libgnuastro_tmp.la \ $(top_builddir)/lib/libgnuastro.la; \ fi # Print a message if requested. @if [ "X$(MAKECMDGOALS)" = "Xall-am" ] && [ x$(GUIDEMESSAGE) = xyes ]; then \ echo; \ echo "==================================================================="; \ echo "==================================================================="; \ echo "Gnuastro $(VERSION), was successfully built."; \ echo "Please check the build on your system by running:"; \ echo; \ echo " make check -j$(SUGGESTEDJOBS)"; \ echo; \ echo "(You can change the $(SUGGESTEDJOBS) to any number of CPU threads.)"; \ echo "(The following \"Leaving directory\" notices can be ignored.)"; \ echo "==================================================================="; \ echo "==================================================================="; \ echo; \ fi ## We cannot do the writing persmission test at configure time. Here is a ## quote from the generated ./configure script: The prefix variables... ## ## "... are left unexpanded so users can "make install exec_prefix=/foo" ## and all the variables that are supposed to be based on exec_prefix by ## default will actually change." ## ## So actually, they can also do that after 'make check'. Usually ## professional users would want to do such a thing, so they can ignore the ## NOTE. This note is mostly for beginners and it is not written to convey ## that this is the ONLY solution. check-local: @if [ x$(GUIDEMESSAGE) = xyes ]; then \ echo; \ echo "==================================================================="; \ echo "==================================================================="; \ echo "Your build of Gnuastro $(VERSION) didn't fail on any tests."; \ echo "To install Gnuastro, please run the command(s) below:"; \ echo; \ if [ ! -w $(prefix) ] ; then \ echo "(NOTE: As the user $$USER, you don't have writing permissions"; \ echo "in \"$(prefix)\". To install Gnuastro there, you must get "; \ echo "privileges first, as described below. If you can't, configure "; \ echo "Gnuastro again, for example: \"./configure --prefix ~/.local\".)"; \ echo; \ echo " sudo make install"; \ echo "or"; \ echo " su"; \ fi; \ echo " make install"; \ if [ ! -w $(prefix) ] ; then \ echo " exit"; \ fi; \ echo; \ echo "(The following \"Leaving directory\" notices can be ignored.)"; \ echo "==================================================================="; \ echo "==================================================================="; \ echo; \ fi ## Note that the '\' characters in the GNU head here are not printed on the ## command line. So we have to consider them. The ASCII GNU head is taken ## from: https://www.gnu.org/graphics/gnu-ascii.html install-data-hook: @if [ x$(GUIDEMESSAGE) = xyes ]; then \ echo; \ echo "==================================================================="; \ echo "==================================================================="; \ echo " , , "; \ echo " / \ "; \ echo " ((__-^^-,-^^-__)) Congratulations!"; \ echo " \`-_---' \`---_-' GNU Astronomy Utilities (Gnuastro),"; \ echo " \`--|o\` 'o|--' Version $(VERSION)"; \ echo " \ \` / "; \ echo " ): :( Successfully installed on this system."; \ echo " :o_o: "; \ echo " \"-\" "; \ echo; \ echo "More information Command to run "; \ echo "---------------- -------------- "; \ echo "Complete official Gnuastro book: ' info gnuastro '"; \ echo "Entertaining tutorials: ' info gnuastro Tutorials '"; \ echo "Dedicated help mailing list: ' info help-gnuastro '"; \ echo "Instructions for reporting bugs: ' info bug-gnuastro '"; \ echo "Effectively use Info: ' info info '"; \ echo; \ echo; \ echo "Environment variables to check: "; \ echo " - '$(prefix)/bin' in PATH."; \ echo " - '$(prefix)/lib' in LD_LIBRARY_PATH."; \ echo "(for an intro, run 'info gnuastro \"Installation directory\"')"; \ echo; \ echo; \ echo "Customization scripts for manual installation:"; \ echo " - Open FITS files in DS9 or TOPCAT depending on contents by "; \ echo " double-clicking on the selected file(s), usable in GNOME, KDE, "; \ echo " or Xfce (freedesktop.org standards):"; \ echo " - ln -sf $(pkgdatadir)/astscript-fits-view.desktop ~/.local/share/applications/";\ echo " - Right-click on a FITS file, and follow these menus:"; \ echo " --> Open with other application"; \ echo " --> View all applications"; \ echo " --> astscript-fits-view"; \ echo; \ echo; \ echo "To stay up to date with future releases, please subscribe to: "; \ echo " https://lists.gnu.org/mailman/listinfo/info-gnuastro"; \ echo; \ echo; \ echo "(Any lines following this message can be ignored.)"; \ echo "==================================================================="; \ echo "==================================================================="; \ echo; \ fi # Ignored from 'install-data-hook' to avoid confusing users (due to # https://savannah.gnu.org/bugs/?60618 ) # echo " - Bash completion (auto-fill arguments and options with TAB):"; # echo " 'source $(pkgdatadir)/completion.bash' in '~/.bashrc':"; ## $(top_srcdir)/.version ## ====================== ## ## This file is created from the $(VERSION) variable which was defined by ## the 'git-version-gen' script (located at address below), which is run ## when the '$(top_srcdir)/configure' script is being built by Autoconf. ## ## $(top_srcdir)/bootstrapped/build-aux/git-version-gen ## ## Note that contrary to what is proposed by 'git-version-gen', here the ## creation of '$(top_srcdir)/.version' depends on the ## '$(top_srcdir)/configure' script. Therefore, anytime a the VERSION ## variable is updated there, '$(top_srcdir)/.version' is also ## updated. During development, of the main functionality of Gnuastro ## (utilities and libraries), the '$(top_srcdir/configure' script is rarely ## updated, so '$(top_srcdir)/.version' will not be rebuilt and thus it ## won't harm the speed of tests during development. $(top_srcdir)/.version: $(top_srcdir)/configure echo $(VERSION) > $@-t && mv $@-t $@ ## $(top_srcdir)/AUTHORS ## ===================== ## ## This file is generated automatically from the version controlled ## history. Note the following: ## ## - '$(top_srcdir)/AUTHORS' is defined as a BUILT_SOURCES variable, so ## it is the first thing that is built (even in multi-threaded runs). ## ## - '$(top_srcdir)/AUTHORS' is updated only when ## '$(top_srcdir)/.version' is updated. '$(top_srcdir)/.version' its ## self is only updated when '$(top_srcdir)/configure' is updated. But ## generally, the '$(top_srcdir)/configure' script is not updated ## regularly during development and outside of version control. ## ## - The '$(top_srcdir)/genauthors' script will not do anything ## (make/update the '$(top_srcdir)AUTHORS' file) when there is no git ## repository. '$(top_srcdir)/AUTHORS' is only necessary when building ## a tarball distribution. $(top_srcdir)/AUTHORS: $(top_srcdir)/.version $(top_srcdir)/genauthors $(top_srcdir) ## Run when building a distribution ## ================================ ## ## These targets will be created when building a (tarball) ## distribution. Note that AUTHORS depends on '.version'. dist-hook: $(top_srcdir)/AUTHORS echo $(VERSION) > $(distdir)/.tarball-version ## Nice joke ## ========= ## ## This joke is taken from the "The art of unix programming", and a quote ## by Stuart Feldman (creator of Make): "One of the older Unix jokes is ## "Make love" which results in "Don’t know how to make love"." love: @echo "Don't know how to make love!" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/configure�����������������������������������������������������������������������������0000755�0001750�0001750�00007736755�14557513745�010745� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.72 for GNU Astronomy Utilities 0.22. # # Report bugs to <bug-gnuastro@gnu.org>. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in #( e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else case e in #( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in #( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: bug-gnuastro@gnu.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi ;; esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' t clear :clear s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 </dev/null exec 6>&1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU Astronomy Utilities' PACKAGE_TARNAME='gnuastro' PACKAGE_VERSION='0.22' PACKAGE_STRING='GNU Astronomy Utilities 0.22' PACKAGE_BUGREPORT='bug-gnuastro@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gnuastro/' ac_unique_file="lib/fits.c" # Factoring default headers for most tests. ac_includes_default="\ #include <stddef.h> #ifdef HAVE_STDIO_H # include <stdio.h> #endif #ifdef HAVE_STDLIB_H # include <stdlib.h> #endif #ifdef HAVE_STRING_H # include <string.h> #endif #ifdef HAVE_INTTYPES_H # include <inttypes.h> #endif #ifdef HAVE_STDINT_H # include <stdint.h> #endif #ifdef HAVE_STRINGS_H # include <strings.h> #endif #ifdef HAVE_SYS_TYPES_H # include <sys/types.h> #endif #ifdef HAVE_SYS_STAT_H # include <sys/stat.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" ac_header_c_list= gl_use_threads_default= gl_use_winpthreads_default=no ac_config_libobj_dir=bootstrapped/lib ac_func_c_list= gl_getopt_required=POSIX enable_year2038=no ac_subst_vars='gltests_LIBOBJDEPS gltests_LTLIBOBJS gltests_LIBOBJS gl_LIBOBJDEPS gl_LTLIBOBJS gl_LIBOBJS am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS GUIDEMESSAGE ENABLE_SHARED CONFIG_LDADD COND_WARP_FALSE COND_WARP_TRUE COND_TABLE_FALSE COND_TABLE_TRUE COND_STATISTICS_FALSE COND_STATISTICS_TRUE COND_SEGMENT_FALSE COND_SEGMENT_TRUE COND_QUERY_FALSE COND_QUERY_TRUE COND_NOISECHISEL_FALSE COND_NOISECHISEL_TRUE COND_MKPROF_FALSE COND_MKPROF_TRUE COND_MKCATALOG_FALSE COND_MKCATALOG_TRUE COND_MATCH_FALSE COND_MATCH_TRUE COND_FITS_FALSE COND_FITS_TRUE COND_CROP_FALSE COND_CROP_TRUE COND_COSMICCAL_FALSE COND_COSMICCAL_TRUE COND_CONVOLVE_FALSE COND_CONVOLVE_TRUE COND_CONVERTT_FALSE COND_CONVERTT_TRUE COND_BUILDPROG_FALSE COND_BUILDPROG_TRUE COND_ARITHMETIC_FALSE COND_ARITHMETIC_TRUE RESTRICT_REPLACEMENT COND_GNULIBCHECK_FALSE COND_GNULIBCHECK_TRUE LIBTESTS_LIBDEPS GL_CFLAG_GNULIB_WARNINGS YIELD_LIB GL_COND_OBJ_WINDOWS_TLS_FALSE GL_COND_OBJ_WINDOWS_TLS_TRUE GL_COND_OBJ_WINDOWS_THREAD_FALSE GL_COND_OBJ_WINDOWS_THREAD_TRUE GL_COND_OBJ_WCTOMB_FALSE GL_COND_OBJ_WCTOMB_TRUE GL_COND_OBJ_WCTOB_FALSE GL_COND_OBJ_WCTOB_TRUE GL_COND_OBJ_USLEEP_FALSE GL_COND_OBJ_USLEEP_TRUE GL_COND_OBJ_UNSETENV_FALSE GL_COND_OBJ_UNSETENV_TRUE NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H NEXT_SYS_IOCTL_H HAVE_SYS_IOCTL_H GL_COND_OBJ_SYMLINK_FALSE GL_COND_OBJ_SYMLINK_TRUE GL_COND_OBJ_SOCKET_FALSE GL_COND_OBJ_SOCKET_TRUE GL_COND_OBJ_SIGPROCMASK_FALSE GL_COND_OBJ_SIGPROCMASK_TRUE GL_COND_OBJ_SETSOCKOPT_FALSE GL_COND_OBJ_SETSOCKOPT_TRUE GL_COND_OBJ_SETLOCALE_FALSE GL_COND_OBJ_SETLOCALE_TRUE LIB_SETLOCALE SETLOCALE_LIB GL_COND_OBJ_SETENV_FALSE GL_COND_OBJ_SETENV_TRUE GL_COND_OBJ_SCHED_YIELD_FALSE GL_COND_OBJ_SCHED_YIELD_TRUE GL_GNULIB_SCHED_YIELD HAVE_STRUCT_SCHED_PARAM HAVE_SCHED_H NEXT_AS_FIRST_DIRECTIVE_SCHED_H NEXT_SCHED_H REPLACE_SCHED_YIELD HAVE_SCHED_YIELD GL_COND_OBJ_REALLOCARRAY_FALSE GL_COND_OBJ_REALLOCARRAY_TRUE GL_COND_OBJ_RANDOM_R_FALSE GL_COND_OBJ_RANDOM_R_TRUE GL_COND_OBJ_RANDOM_FALSE GL_COND_OBJ_RANDOM_TRUE GL_COND_OBJ_RAISE_FALSE GL_COND_OBJ_RAISE_TRUE GL_COND_OBJ_PUTENV_FALSE GL_COND_OBJ_PUTENV_TRUE GL_COND_OBJ_PTHREAD_SIGMASK_FALSE GL_COND_OBJ_PTHREAD_SIGMASK_TRUE LIB_PTHREAD_SIGMASK PTHREAD_SIGMASK_LIB GL_COND_OBJ_PTHREAD_THREAD_FALSE GL_COND_OBJ_PTHREAD_THREAD_TRUE GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK GL_GNULIB_PTHREAD_SPIN GL_GNULIB_PTHREAD_TSS GL_GNULIB_PTHREAD_COND GL_GNULIB_PTHREAD_RWLOCK GL_GNULIB_PTHREAD_MUTEX GL_GNULIB_PTHREAD_ONCE GL_GNULIB_PTHREAD_THREAD LIB_PTHREAD HAVE_PTHREAD_H NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H NEXT_PTHREAD_H REPLACE_PTHREAD_SPIN_DESTROY REPLACE_PTHREAD_SPIN_UNLOCK REPLACE_PTHREAD_SPIN_TRYLOCK REPLACE_PTHREAD_SPIN_LOCK REPLACE_PTHREAD_SPIN_INIT REPLACE_PTHREAD_KEY_DELETE REPLACE_PTHREAD_GETSPECIFIC REPLACE_PTHREAD_SETSPECIFIC REPLACE_PTHREAD_KEY_CREATE REPLACE_PTHREAD_COND_DESTROY REPLACE_PTHREAD_COND_BROADCAST REPLACE_PTHREAD_COND_SIGNAL REPLACE_PTHREAD_COND_TIMEDWAIT REPLACE_PTHREAD_COND_WAIT REPLACE_PTHREAD_CONDATTR_DESTROY REPLACE_PTHREAD_CONDATTR_INIT REPLACE_PTHREAD_COND_INIT REPLACE_PTHREAD_RWLOCK_DESTROY REPLACE_PTHREAD_RWLOCK_UNLOCK REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK REPLACE_PTHREAD_RWLOCK_TRYWRLOCK REPLACE_PTHREAD_RWLOCK_TRYRDLOCK REPLACE_PTHREAD_RWLOCK_WRLOCK REPLACE_PTHREAD_RWLOCK_RDLOCK REPLACE_PTHREAD_RWLOCKATTR_DESTROY REPLACE_PTHREAD_RWLOCKATTR_INIT REPLACE_PTHREAD_RWLOCK_INIT REPLACE_PTHREAD_MUTEX_DESTROY REPLACE_PTHREAD_MUTEX_UNLOCK REPLACE_PTHREAD_MUTEX_TIMEDLOCK REPLACE_PTHREAD_MUTEX_TRYLOCK REPLACE_PTHREAD_MUTEX_LOCK REPLACE_PTHREAD_MUTEXATTR_DESTROY REPLACE_PTHREAD_MUTEXATTR_SETROBUST REPLACE_PTHREAD_MUTEXATTR_GETROBUST REPLACE_PTHREAD_MUTEXATTR_SETTYPE REPLACE_PTHREAD_MUTEXATTR_GETTYPE REPLACE_PTHREAD_MUTEXATTR_INIT REPLACE_PTHREAD_MUTEX_INIT REPLACE_PTHREAD_ONCE REPLACE_PTHREAD_EXIT REPLACE_PTHREAD_JOIN REPLACE_PTHREAD_DETACH REPLACE_PTHREAD_EQUAL REPLACE_PTHREAD_SELF REPLACE_PTHREAD_ATTR_DESTROY REPLACE_PTHREAD_ATTR_SETDETACHSTATE REPLACE_PTHREAD_ATTR_GETDETACHSTATE REPLACE_PTHREAD_ATTR_INIT REPLACE_PTHREAD_CREATE HAVE_PTHREAD_SPIN_DESTROY HAVE_PTHREAD_SPIN_UNLOCK HAVE_PTHREAD_SPIN_TRYLOCK HAVE_PTHREAD_SPIN_LOCK HAVE_PTHREAD_SPIN_INIT HAVE_PTHREAD_KEY_DELETE HAVE_PTHREAD_GETSPECIFIC HAVE_PTHREAD_SETSPECIFIC HAVE_PTHREAD_KEY_CREATE HAVE_PTHREAD_COND_DESTROY HAVE_PTHREAD_COND_BROADCAST HAVE_PTHREAD_COND_SIGNAL HAVE_PTHREAD_COND_TIMEDWAIT HAVE_PTHREAD_COND_WAIT HAVE_PTHREAD_CONDATTR_DESTROY HAVE_PTHREAD_CONDATTR_INIT HAVE_PTHREAD_COND_INIT HAVE_PTHREAD_RWLOCK_DESTROY HAVE_PTHREAD_RWLOCK_UNLOCK HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK HAVE_PTHREAD_RWLOCK_TRYWRLOCK HAVE_PTHREAD_RWLOCK_TRYRDLOCK HAVE_PTHREAD_RWLOCK_WRLOCK HAVE_PTHREAD_RWLOCK_RDLOCK HAVE_PTHREAD_RWLOCKATTR_DESTROY HAVE_PTHREAD_RWLOCKATTR_INIT HAVE_PTHREAD_RWLOCK_INIT HAVE_PTHREAD_MUTEX_DESTROY HAVE_PTHREAD_MUTEX_UNLOCK HAVE_PTHREAD_MUTEX_TIMEDLOCK HAVE_PTHREAD_MUTEX_TRYLOCK HAVE_PTHREAD_MUTEX_LOCK HAVE_PTHREAD_MUTEXATTR_DESTROY HAVE_PTHREAD_MUTEXATTR_SETROBUST HAVE_PTHREAD_MUTEXATTR_GETROBUST HAVE_PTHREAD_MUTEXATTR_SETTYPE HAVE_PTHREAD_MUTEXATTR_GETTYPE HAVE_PTHREAD_MUTEXATTR_INIT HAVE_PTHREAD_MUTEX_INIT HAVE_PTHREAD_ONCE HAVE_PTHREAD_EXIT HAVE_PTHREAD_JOIN HAVE_PTHREAD_DETACH HAVE_PTHREAD_EQUAL HAVE_PTHREAD_SELF HAVE_PTHREAD_ATTR_DESTROY HAVE_PTHREAD_ATTR_SETDETACHSTATE HAVE_PTHREAD_ATTR_GETDETACHSTATE HAVE_PTHREAD_ATTR_INIT HAVE_PTHREAD_CREATE HAVE_PTHREAD_PROCESS_SHARED HAVE_PTHREAD_MUTEX_ROBUST HAVE_PTHREAD_MUTEX_RECURSIVE HAVE_PTHREAD_CREATE_DETACHED HAVE_PTHREAD_SPINLOCK_T HAVE_PTHREAD_T GL_COND_OBJ_PSELECT_FALSE GL_COND_OBJ_PSELECT_TRUE GL_COND_OBJ_PERROR_FALSE GL_COND_OBJ_PERROR_TRUE GL_GENERATE_NETINET_IN_H_FALSE GL_GENERATE_NETINET_IN_H_TRUE NETINET_IN_H HAVE_NETINET_IN_H NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H NEXT_NETINET_IN_H GL_COND_OBJ_NANOSLEEP_FALSE GL_COND_OBJ_NANOSLEEP_TRUE LIB_NANOSLEEP NANOSLEEP_LIB LIB_SEMAPHORE INTL_MACOSX_LIBS GL_COND_OBJ_LISTEN_FALSE GL_COND_OBJ_LISTEN_TRUE GL_COND_OBJ_ISBLANK_FALSE GL_COND_OBJ_ISBLANK_TRUE GL_GNULIB_IOCTL GL_COND_OBJ_IOCTL_FALSE GL_COND_OBJ_IOCTL_TRUE GL_COND_OBJ_INET_PTON_FALSE GL_COND_OBJ_INET_PTON_TRUE INET_PTON_LIB GL_COND_OBJ_GETPAGESIZE_FALSE GL_COND_OBJ_GETPAGESIZE_TRUE GL_COND_OBJ_FTRUNCATE_FALSE GL_COND_OBJ_FTRUNCATE_TRUE GL_COND_OBJ_FDOPEN_FALSE GL_COND_OBJ_FDOPEN_TRUE GL_COND_OBJ_DUP_FALSE GL_COND_OBJ_DUP_TRUE GL_GNULIB_ISBLANK NEXT_AS_FIRST_DIRECTIVE_CTYPE_H NEXT_CTYPE_H HAVE_ISBLANK GL_COND_OBJ_CREAT_FALSE GL_COND_OBJ_CREAT_TRUE GL_COND_OBJ_CONNECT_FALSE GL_COND_OBJ_CONNECT_TRUE GL_COND_OBJ_C32RTOMB_FALSE GL_COND_OBJ_C32RTOMB_TRUE LOCALE_TR_UTF8 GL_COND_OBJ_BIND_FALSE GL_COND_OBJ_BIND_TRUE GL_GNULIB_INET_PTON GL_GNULIB_INET_NTOP NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H NEXT_ARPA_INET_H HAVE_ARPA_INET_H REPLACE_INET_PTON REPLACE_INET_NTOP HAVE_DECL_INET_PTON HAVE_DECL_INET_NTOP GL_COND_OBJ_ACCEPT_FALSE GL_COND_OBJ_ACCEPT_TRUE gltests_WITNESS GL_CXXFLAG_ALLOW_WARNINGS GL_CFLAG_ALLOW_WARNINGS GL_COND_OBJ_WINDOWS_RWLOCK_FALSE GL_COND_OBJ_WINDOWS_RWLOCK_TRUE GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE GL_COND_OBJ_WINDOWS_ONCE_FALSE GL_COND_OBJ_WINDOWS_ONCE_TRUE GL_COND_OBJ_WINDOWS_MUTEX_FALSE GL_COND_OBJ_WINDOWS_MUTEX_TRUE GL_COND_OBJ_WCWIDTH_FALSE GL_COND_OBJ_WCWIDTH_TRUE GL_COND_OBJ_WCTYPE_FALSE GL_COND_OBJ_WCTYPE_TRUE GL_COND_OBJ_WCRTOMB_FALSE GL_COND_OBJ_WCRTOMB_TRUE NEXT_AS_FIRST_DIRECTIVE_WCHAR_H NEXT_WCHAR_H HAVE_FEATURES_H LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE LIBUNISTRING_UNIWIDTH_H LIBUNISTRING_UNITYPES_H HAVE_UNISTD_H NEXT_AS_FIRST_DIRECTIVE_UNISTD_H NEXT_UNISTD_H GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE GL_GNULIB_UNINORM_NFC_DLL_VARIABLE GL_GNULIB_UNINORM_NFD_DLL_VARIABLE LIBUNISTRING_UNINORM_H LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT_FALSE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT_TRUE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER_FALSE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER_TRUE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE_FALSE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE_TRUE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT_FALSE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT_TRUE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT_FALSE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT_TRUE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER_FALSE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER_TRUE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH_FALSE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH_TRUE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT_FALSE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT_TRUE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL_FALSE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL_TRUE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK_FALSE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK_TRUE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA_FALSE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA_TRUE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM_FALSE LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM_TRUE GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE LIBUNISTRING_UNICTYPE_H LIBUNISTRING_COMPILE_UNICASE_TOLOWER_FALSE LIBUNISTRING_COMPILE_UNICASE_TOLOWER_TRUE GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE LIBUNISTRING_UNICASE_H HAVE_UNISTRING_WOE32DLL_H GL_COND_OBJ_TIME_R_FALSE GL_COND_OBJ_TIME_R_TRUE TIME_H_DEFINES_TIME_UTC UNISTD_H_DEFINES_STRUCT_TIMESPEC PTHREAD_H_DEFINES_STRUCT_TIMESPEC SYS_TIME_H_DEFINES_STRUCT_TIMESPEC TIME_H_DEFINES_STRUCT_TIMESPEC NEXT_AS_FIRST_DIRECTIVE_TIME_H NEXT_TIME_H GL_COND_OBJ_TIME_FALSE GL_COND_OBJ_TIME_TRUE GL_GENERATE_SYSEXITS_H_FALSE GL_GENERATE_SYSEXITS_H_TRUE SYSEXITS_H HAVE_SYSEXITS_H NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H NEXT_SYSEXITS_H GL_GNULIB_WAITPID NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H NEXT_SYS_WAIT_H HAVE_SYS_UIO_H NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H NEXT_SYS_UIO_H WINDOWS_STAT_INODES WINDOWS_64_BIT_OFF_T NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H NEXT_SYS_TYPES_H GL_GNULIB_ACCEPT4 GL_GNULIB_SHUTDOWN GL_GNULIB_SETSOCKOPT GL_GNULIB_SENDTO GL_GNULIB_RECVFROM GL_GNULIB_SEND GL_GNULIB_RECV GL_GNULIB_LISTEN GL_GNULIB_GETSOCKOPT GL_GNULIB_GETSOCKNAME GL_GNULIB_GETPEERNAME GL_GNULIB_BIND GL_GNULIB_ACCEPT GL_GNULIB_CONNECT GL_GNULIB_SOCKET HAVE_WS2TCPIP_H HAVE_SYS_SOCKET_H NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H NEXT_SYS_SOCKET_H HAVE_ACCEPT4 HAVE_SA_FAMILY_T HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY HAVE_STRUCT_SOCKADDR_STORAGE GL_COND_OBJ_STRTOK_R_FALSE GL_COND_OBJ_STRTOK_R_TRUE GL_COND_OBJ_STRTOD_FALSE GL_COND_OBJ_STRTOD_TRUE GL_COND_OBJ_STRPTIME_FALSE GL_COND_OBJ_STRPTIME_TRUE GL_COND_OBJ_STRNLEN_FALSE GL_COND_OBJ_STRNLEN_TRUE GL_COND_OBJ_STRNDUP_FALSE GL_COND_OBJ_STRNDUP_TRUE GL_GNULIB_FFS HAVE_STRINGS_H NEXT_AS_FIRST_DIRECTIVE_STRINGS_H NEXT_STRINGS_H NEXT_AS_FIRST_DIRECTIVE_STRING_H NEXT_STRING_H GL_COND_OBJ_STRERROR_OVERRIDE_FALSE GL_COND_OBJ_STRERROR_OVERRIDE_TRUE GL_COND_OBJ_STRERROR_FALSE GL_COND_OBJ_STRERROR_TRUE GL_COND_OBJ_STRDUP_FALSE GL_COND_OBJ_STRDUP_TRUE GL_COND_OBJ_STRCHRNUL_FALSE GL_COND_OBJ_STRCHRNUL_TRUE GL_COND_OBJ_STRNCASECMP_FALSE GL_COND_OBJ_STRNCASECMP_TRUE GL_COND_OBJ_STRCASECMP_FALSE GL_COND_OBJ_STRCASECMP_TRUE HAVE_DECL_STRNCASECMP HAVE_STRCASECMP HAVE_FFS NEXT_AS_FIRST_DIRECTIVE_STDLIB_H NEXT_STDLIB_H GL_COND_OBJ_STDIO_WRITE_FALSE GL_COND_OBJ_STDIO_WRITE_TRUE GL_COND_OBJ_STDIO_READ_FALSE GL_COND_OBJ_STDIO_READ_TRUE NEXT_AS_FIRST_DIRECTIVE_STDIO_H NEXT_STDIO_H GL_GENERATE_STDINT_H_FALSE GL_GENERATE_STDINT_H_TRUE STDINT_H GL_GENERATE_STDDEF_H_FALSE GL_GENERATE_STDDEF_H_TRUE STDDEF_H GL_GENERATE_STDCKDINT_H_FALSE GL_GENERATE_STDCKDINT_H_TRUE STDCKDINT_H GL_COND_OBJ_STAT_FALSE GL_COND_OBJ_STAT_TRUE GL_COND_OBJ_SLEEP_FALSE GL_COND_OBJ_SLEEP_TRUE GL_COND_OBJ_SIGNBIT3_FALSE GL_COND_OBJ_SIGNBIT3_TRUE GL_GNULIB_SIGACTION GL_GNULIB_SIGPROCMASK GL_GNULIB_SIGNAL_H_SIGPIPE GL_GNULIB_RAISE GL_GNULIB_PTHREAD_SIGMASK NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H NEXT_SIGNAL_H REPLACE_RAISE REPLACE_PTHREAD_SIGMASK HAVE_SIGHANDLER_T HAVE_TYPE_VOLATILE_SIG_ATOMIC_T HAVE_STRUCT_SIGACTION_SA_SIGACTION HAVE_SIGACTION HAVE_SIGINFO_T HAVE_SIGSET_T HAVE_RAISE HAVE_PTHREAD_SIGMASK HAVE_POSIX_SIGNALBLOCKING GL_COND_OBJ_SETLOCALE_LOCK_FALSE GL_COND_OBJ_SETLOCALE_LOCK_TRUE GL_GNULIB_SELECT GL_GNULIB_PSELECT GL_COND_OBJ_SELECT_FALSE GL_COND_OBJ_SELECT_TRUE LIB_SELECT SELECT_LIB LIBSOCKET HAVE_SYS_SELECT_H NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H NEXT_SYS_SELECT_H REPLACE_SELECT REPLACE_PSELECT HAVE_PSELECT GL_COND_OBJ_SECURE_GETENV_FALSE GL_COND_OBJ_SECURE_GETENV_TRUE GL_COND_OBJ_REGEX_FALSE GL_COND_OBJ_REGEX_TRUE GL_COND_OBJ_RAWMEMCHR_FALSE GL_COND_OBJ_RAWMEMCHR_TRUE GL_COND_OBJ_PIPE_FALSE GL_COND_OBJ_PIPE_TRUE GL_COND_OBJ_OPENAT_FALSE GL_COND_OBJ_OPENAT_TRUE GL_COND_OBJ_OPEN_FALSE GL_COND_OBJ_OPEN_TRUE GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE GL_COND_OBJ_NL_LANGINFO_FALSE GL_COND_OBJ_NL_LANGINFO_TRUE LIB_NL_LANGINFO GL_COND_OBJ_MSVC_NOTHROW_FALSE GL_COND_OBJ_MSVC_NOTHROW_TRUE GL_COND_OBJ_MSVC_INVAL_FALSE GL_COND_OBJ_MSVC_INVAL_TRUE GL_GNULIB_MDA_TZSET GL_GNULIB_TZSET GL_GNULIB_TIME_RZ GL_GNULIB_TIME_R GL_GNULIB_TIMESPEC_GETRES GL_GNULIB_TIMESPEC_GET GL_GNULIB_TIMEGM GL_GNULIB_TIME GL_GNULIB_STRPTIME GL_GNULIB_STRFTIME GL_GNULIB_NANOSLEEP GL_GNULIB_LOCALTIME GL_GNULIB_MKTIME GL_GNULIB_CTIME REPLACE_TZSET REPLACE_TIMESPEC_GETRES REPLACE_TIMESPEC_GET REPLACE_TIMEGM REPLACE_TIME REPLACE_STRFTIME REPLACE_NANOSLEEP REPLACE_MKTIME REPLACE_LOCALTIME_R REPLACE_LOCALTIME REPLACE_GMTIME REPLACE_CTIME HAVE_TIMEZONE_T HAVE_TIMESPEC_GETRES HAVE_TIMESPEC_GET HAVE_TIMEGM HAVE_STRPTIME HAVE_NANOSLEEP HAVE_DECL_LOCALTIME_R GL_COND_OBJ_MEMRCHR_FALSE GL_COND_OBJ_MEMRCHR_TRUE GL_COND_OBJ_MEMPCPY_FALSE GL_COND_OBJ_MEMPCPY_TRUE GL_COND_OBJ_MEMMOVE_FALSE GL_COND_OBJ_MEMMOVE_TRUE GL_COND_OBJ_MEMCHR_FALSE GL_COND_OBJ_MEMCHR_TRUE GL_COND_OBJ_MBTOWC_FALSE GL_COND_OBJ_MBTOWC_TRUE GL_COND_OBJ_MBSINIT_FALSE GL_COND_OBJ_MBSINIT_TRUE UNDEFINE_STRTOK_R REPLACE_STRVERSCMP REPLACE_STRSIGNAL REPLACE_STRERRORNAME_NP REPLACE_STRERROR_R REPLACE_STRERROR REPLACE_STRTOK_R REPLACE_STRCASESTR REPLACE_STRSTR REPLACE_STRNLEN REPLACE_STRNDUP REPLACE_STRNCAT REPLACE_STRDUP REPLACE_STRCHRNUL REPLACE_STPNCPY REPLACE_STPCPY REPLACE_MEMSET_EXPLICIT REPLACE_MEMPCPY REPLACE_MEMMEM REPLACE_MEMCHR REPLACE_FFSLL HAVE_STRVERSCMP HAVE_DECL_STRSIGNAL HAVE_SIGDESCR_NP HAVE_SIGABBREV_NP HAVE_STRERRORNAME_NP HAVE_DECL_STRERROR_R HAVE_DECL_STRTOK_R HAVE_STRCASESTR HAVE_STRSEP HAVE_STRPBRK HAVE_DECL_STRNLEN HAVE_DECL_STRNDUP HAVE_DECL_STRDUP HAVE_STRCHRNUL HAVE_STPNCPY HAVE_STPCPY HAVE_RAWMEMCHR HAVE_DECL_MEMRCHR HAVE_MEMSET_EXPLICIT HAVE_MEMPCPY HAVE_DECL_MEMMEM HAVE_FFSLL HAVE_FFSL HAVE_EXPLICIT_BZERO HAVE_MBSLEN GL_GNULIB_MDA_STRDUP GL_GNULIB_MDA_MEMCCPY GL_GNULIB_STRVERSCMP GL_GNULIB_STRSIGNAL GL_GNULIB_SIGDESCR_NP GL_GNULIB_SIGABBREV_NP GL_GNULIB_STRERRORNAME_NP GL_GNULIB_STRERROR_R GL_GNULIB_STRERROR GL_GNULIB_MBSTOK_R GL_GNULIB_MBSSEP GL_GNULIB_MBSSPN GL_GNULIB_MBSPBRK GL_GNULIB_MBSCSPN GL_GNULIB_MBSCASESTR GL_GNULIB_MBSPCASECMP GL_GNULIB_MBSNCASECMP GL_GNULIB_MBSCASECMP GL_GNULIB_MBSSTR GL_GNULIB_MBSRCHR GL_GNULIB_MBSCHR GL_GNULIB_MBSNLEN GL_GNULIB_MBSLEN GL_GNULIB_STRTOK_R GL_GNULIB_STRCASESTR GL_GNULIB_STRSTR GL_GNULIB_STRSEP GL_GNULIB_STRPBRK GL_GNULIB_STRNLEN GL_GNULIB_STRNDUP GL_GNULIB_STRNCAT GL_GNULIB_STRDUP GL_GNULIB_STRCHRNUL GL_GNULIB_STPNCPY GL_GNULIB_STPCPY GL_GNULIB_RAWMEMCHR GL_GNULIB_MEMSET_EXPLICIT GL_GNULIB_MEMRCHR GL_GNULIB_MEMPCPY GL_GNULIB_MEMMEM GL_GNULIB_MEMCHR GL_GNULIB_FFSLL GL_GNULIB_FFSL GL_GNULIB_EXPLICIT_BZERO GL_COND_OBJ_MBRTOWC_FALSE GL_COND_OBJ_MBRTOWC_TRUE LIB_MBRTOWC MBRTOWC_LIB HAVE_VISIBILITY CFLAG_VISIBILITY GL_COND_OBJ_MBRTOC32_FALSE GL_COND_OBJ_MBRTOC32_TRUE GL_GNULIB_MDA_YN GL_GNULIB_MDA_Y1 GL_GNULIB_MDA_Y0 GL_GNULIB_MDA_JN GL_GNULIB_MDA_J1 GL_GNULIB_MDA_J0 GL_GNULIB_TRUNCL GL_GNULIB_TRUNCF GL_GNULIB_TRUNC GL_GNULIB_TOTALORDERL GL_GNULIB_TOTALORDERF GL_GNULIB_TOTALORDER GL_GNULIB_TANHF GL_GNULIB_TANL GL_GNULIB_TANF GL_GNULIB_SQRTL GL_GNULIB_SQRTF GL_GNULIB_SINHF GL_GNULIB_SINL GL_GNULIB_SINF GL_GNULIB_SIGNBIT GL_GNULIB_ROUNDL GL_GNULIB_ROUNDF GL_GNULIB_ROUND GL_GNULIB_RINTL GL_GNULIB_RINTF GL_GNULIB_RINT GL_GNULIB_REMAINDERL GL_GNULIB_REMAINDERF GL_GNULIB_REMAINDER GL_GNULIB_POWF GL_GNULIB_MODFL GL_GNULIB_MODFF GL_GNULIB_MODF GL_GNULIB_LOGBL GL_GNULIB_LOGBF GL_GNULIB_LOGB GL_GNULIB_LOG2L GL_GNULIB_LOG2F GL_GNULIB_LOG2 GL_GNULIB_LOG1PL GL_GNULIB_LOG1PF GL_GNULIB_LOG1P GL_GNULIB_LOG10L GL_GNULIB_LOG10F GL_GNULIB_LOG10 GL_GNULIB_LOGL GL_GNULIB_LOGF GL_GNULIB_LOG GL_GNULIB_LDEXPL GL_GNULIB_LDEXPF GL_GNULIB_LDEXP GL_GNULIB_ISNANL GL_GNULIB_ISNAND GL_GNULIB_ISNANF GL_GNULIB_ISNAN GL_GNULIB_ISINF GL_GNULIB_ISFINITE GL_GNULIB_ILOGBL GL_GNULIB_ILOGBF GL_GNULIB_ILOGB GL_GNULIB_HYPOTL GL_GNULIB_HYPOTF GL_GNULIB_HYPOT GL_GNULIB_FREXPL GL_GNULIB_FREXP GL_GNULIB_FREXPF GL_GNULIB_FMODL GL_GNULIB_FMODF GL_GNULIB_FMOD GL_GNULIB_FMAL GL_GNULIB_FMAF GL_GNULIB_FMA GL_GNULIB_FLOORL GL_GNULIB_FLOORF GL_GNULIB_FLOOR GL_GNULIB_FABSL GL_GNULIB_FABSF GL_GNULIB_EXPM1L GL_GNULIB_EXPM1F GL_GNULIB_EXPM1 GL_GNULIB_EXP2L GL_GNULIB_EXP2F GL_GNULIB_EXP2 GL_GNULIB_EXPL GL_GNULIB_EXPF GL_GNULIB_COSHF GL_GNULIB_COSL GL_GNULIB_COSF GL_GNULIB_COPYSIGNL GL_GNULIB_COPYSIGNF GL_GNULIB_COPYSIGN GL_GNULIB_CEILL GL_GNULIB_CEILF GL_GNULIB_CEIL GL_GNULIB_CBRTL GL_GNULIB_CBRTF GL_GNULIB_CBRT GL_GNULIB_ATAN2F GL_GNULIB_ATANL GL_GNULIB_ATANF GL_GNULIB_ASINL GL_GNULIB_ASINF GL_GNULIB_ACOSL GL_GNULIB_ACOSF NEXT_AS_FIRST_DIRECTIVE_MATH_H NEXT_MATH_H REPLACE_TRUNCL REPLACE_TRUNCF REPLACE_TRUNC REPLACE_TOTALORDERL REPLACE_TOTALORDERF REPLACE_TOTALORDER REPLACE_TANHF REPLACE_TANF REPLACE_SQRTL REPLACE_SQRTF REPLACE_SINHF REPLACE_SINF REPLACE_SIGNBIT_USING_BUILTINS REPLACE_SIGNBIT REPLACE_ROUNDL REPLACE_ROUNDF REPLACE_ROUND REPLACE_RINTL REPLACE_REMAINDERL REPLACE_REMAINDERF REPLACE_REMAINDER REPLACE_NAN REPLACE_MODFL REPLACE_MODFF REPLACE_MODF REPLACE_LOGBL REPLACE_LOGBF REPLACE_LOGB REPLACE_LOG2L REPLACE_LOG2F REPLACE_LOG2 REPLACE_LOG1PL REPLACE_LOG1PF REPLACE_LOG1P REPLACE_LOG10L REPLACE_LOG10F REPLACE_LOG10 REPLACE_LOGL REPLACE_LOGF REPLACE_LOG REPLACE_LDEXPL REPLACE_LDEXP REPLACE_ISNAN REPLACE_ISINF REPLACE_ISFINITE REPLACE_ILOGBL REPLACE_ILOGBF REPLACE_ILOGB REPLACE_HYPOTL REPLACE_HYPOTF REPLACE_HYPOT REPLACE_HUGE_VAL REPLACE_FREXPL REPLACE_FREXP REPLACE_FREXPF REPLACE_FMODL REPLACE_FMODF REPLACE_FMOD REPLACE_FMAL REPLACE_FMAF REPLACE_FMA REPLACE_FLOORL REPLACE_FLOORF REPLACE_FLOOR REPLACE_FABSL REPLACE_EXP2L REPLACE_EXP2 REPLACE_EXPM1L REPLACE_EXPM1F REPLACE_EXPM1 REPLACE_EXPL REPLACE_EXPF REPLACE_COSHF REPLACE_COSF REPLACE_CEILL REPLACE_CEILF REPLACE_CEIL REPLACE_CBRTL REPLACE_CBRTF REPLACE_ATAN2F REPLACE_ATANF REPLACE_ASINF REPLACE_ACOSF HAVE_DECL_TRUNCL HAVE_DECL_TRUNCF HAVE_DECL_TRUNC HAVE_DECL_TANL HAVE_DECL_SQRTL HAVE_DECL_SINL HAVE_DECL_ROUNDL HAVE_DECL_ROUNDF HAVE_DECL_ROUND HAVE_DECL_RINTF HAVE_DECL_REMAINDERL HAVE_DECL_REMAINDER HAVE_DECL_LOGB HAVE_DECL_LOG2L HAVE_DECL_LOG2F HAVE_DECL_LOG2 HAVE_DECL_LOG10L HAVE_DECL_LOGL HAVE_DECL_LDEXPL HAVE_DECL_FREXPL HAVE_DECL_FLOORL HAVE_DECL_FLOORF HAVE_DECL_EXPM1L HAVE_DECL_EXP2L HAVE_DECL_EXP2F HAVE_DECL_EXP2 HAVE_DECL_EXPL HAVE_DECL_COSL HAVE_DECL_COPYSIGNF HAVE_DECL_CEILL HAVE_DECL_CEILF HAVE_DECL_CBRTL HAVE_DECL_CBRTF HAVE_DECL_ATANL HAVE_DECL_ASINL HAVE_DECL_ACOSL HAVE_TOTALORDERL HAVE_TOTALORDERF HAVE_TOTALORDER HAVE_TANHF HAVE_TANL HAVE_TANF HAVE_SQRTL HAVE_SQRTF HAVE_SINHF HAVE_SINL HAVE_SINF HAVE_RINTL HAVE_RINT HAVE_REMAINDERF HAVE_REMAINDER HAVE_POWF HAVE_MODFL HAVE_MODFF HAVE_LOGBL HAVE_LOGBF HAVE_LOG1PL HAVE_LOG1PF HAVE_LOG1P HAVE_LOG10L HAVE_LOG10F HAVE_LOGL HAVE_LOGF HAVE_LDEXPF HAVE_ISNANL HAVE_ISNAND HAVE_ISNANF HAVE_ILOGBL HAVE_ILOGBF HAVE_ILOGB HAVE_HYPOTL HAVE_HYPOTF HAVE_FREXPF HAVE_FMODL HAVE_FMODF HAVE_FMAL HAVE_FMAF HAVE_FMA HAVE_FABSL HAVE_FABSF HAVE_EXPM1F HAVE_EXPM1 HAVE_EXPL HAVE_EXPF HAVE_COSHF HAVE_COSL HAVE_COSF HAVE_COPYSIGNL HAVE_COPYSIGN HAVE_CBRTL HAVE_CBRTF HAVE_CBRT HAVE_ATAN2F HAVE_ATANL HAVE_ATANF HAVE_ASINL HAVE_ASINF HAVE_ACOSL HAVE_ACOSF GL_COND_OBJ_LSTAT_FALSE GL_COND_OBJ_LSTAT_TRUE LTLIBMULTITHREAD LIBMULTITHREAD LTLIBTHREAD LIBTHREAD LIBSTDTHREAD GL_COND_OBJ_LOCALECONV_FALSE GL_COND_OBJ_LOCALECONV_TRUE GL_GNULIB_LOCALENAME GL_GNULIB_DUPLOCALE GL_GNULIB_SETLOCALE_NULL GL_GNULIB_SETLOCALE GL_GNULIB_LOCALECONV NEXT_AS_FIRST_DIRECTIVE_LOCALE_H NEXT_LOCALE_H HAVE_XLOCALE_H NEXT_AS_FIRST_DIRECTIVE_STDDEF_H NEXT_STDDEF_H HAVE_WCHAR_T HAVE_MAX_ALIGN_T REPLACE_NULL LOCALENAME_ENHANCE_LOCALE_FUNCS REPLACE_STRUCT_LCONV REPLACE_FREELOCALE REPLACE_DUPLOCALE REPLACE_NEWLOCALE REPLACE_SETLOCALE REPLACE_LOCALECONV HAVE_FREELOCALE HAVE_DUPLOCALE HAVE_NEWLOCALE LOCALCHARSET_TESTS_ENVIRONMENT GL_GENERATE_LIMITS_H_FALSE GL_GENERATE_LIMITS_H_TRUE LIMITS_H GL_GNULIB_NL_LANGINFO HAVE_LANGINFO_YESEXPR HAVE_LANGINFO_ERA HAVE_LANGINFO_ALTMON HAVE_LANGINFO_T_FMT_AMPM HAVE_LANGINFO_CODESET HAVE_LANGINFO_H NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H NEXT_LANGINFO_H REPLACE_NL_LANGINFO HAVE_NL_LANGINFO GL_COND_OBJ_ISWXDIGIT_FALSE GL_COND_OBJ_ISWXDIGIT_TRUE GL_COND_OBJ_ISWPUNCT_FALSE GL_COND_OBJ_ISWPUNCT_TRUE GL_COND_OBJ_ISWDIGIT_FALSE GL_COND_OBJ_ISWDIGIT_TRUE GL_COND_OBJ_ISWCTYPE_FALSE GL_COND_OBJ_ISWCTYPE_TRUE GL_GNULIB_TOWCTRANS GL_GNULIB_WCTRANS GL_GNULIB_ISWCTYPE GL_GNULIB_WCTYPE GL_GNULIB_ISWXDIGIT GL_GNULIB_ISWPUNCT GL_GNULIB_ISWDIGIT GL_GNULIB_ISWBLANK GL_COND_OBJ_ISWBLANK_FALSE GL_COND_OBJ_ISWBLANK_TRUE REPLACE_TOWLOWER REPLACE_ISWCNTRL HAVE_WCTYPE_H NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H NEXT_WCTYPE_H HAVE_CRTDEFS_H HAVE_WINT_T HAVE_ISWCNTRL REPLACE_WCTYPE REPLACE_WCTRANS REPLACE_ISWXDIGIT REPLACE_ISWPUNCT REPLACE_ISWDIGIT REPLACE_ISWBLANK HAVE_WCTRANS_T HAVE_WCTYPE_T HAVE_ISWBLANK HAVE_SAME_LONG_DOUBLE_AS_DOUBLE GL_GNULIB_STRTOUMAX GL_GNULIB_STRTOIMAX GL_GNULIB_IMAXDIV GL_GNULIB_IMAXABS NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H NEXT_INTTYPES_H UINT64_MAX_EQ_ULONG_MAX UINT32_MAX_LT_UINTMAX_MAX PRIPTR_PREFIX INT64_MAX_EQ_LONG_MAX INT32_MAX_LT_INTMAX_MAX REPLACE_STRTOUMAX REPLACE_STRTOIMAX REPLACE_IMAXDIV REPLACE_IMAXABS HAVE_IMAXDIV HAVE_IMAXABS HAVE_IMAXDIV_T HAVE_DECL_STRTOUMAX HAVE_DECL_STRTOIMAX HAVE_DECL_IMAXDIV HAVE_DECL_IMAXABS HAVE_SYS_INTTYPES_H HAVE_SYS_BITYPES_H HAVE_C99_STDINT_H WINT_T_SUFFIX WCHAR_T_SUFFIX SIG_ATOMIC_T_SUFFIX SIZE_T_SUFFIX PTRDIFF_T_SUFFIX HAVE_SIGNED_WINT_T HAVE_SIGNED_WCHAR_T HAVE_SIGNED_SIG_ATOMIC_T BITSIZEOF_WINT_T BITSIZEOF_SIG_ATOMIC_T BITSIZEOF_SIZE_T BITSIZEOF_PTRDIFF_T APPLE_UNIVERSAL_BUILD HAVE_STDINT_H NEXT_AS_FIRST_DIRECTIVE_STDINT_H NEXT_STDINT_H HAVE_SYS_TYPES_H HAVE_INTTYPES_H HAVE_WCHAR_H GNULIBHEADERS_OVERRIDE_WINT_T NEXT_AS_FIRST_DIRECTIVE_LIMITS_H NEXT_LIMITS_H LIB_HARD_LOCALE HARD_LOCALE_LIB LIB_SETLOCALE_NULL SETLOCALE_NULL_LIB LIB_SCHED_YIELD SCHED_YIELD_LIB LIBPMULTITHREAD LIBPTHREAD GL_COND_OBJ_GROUP_MEMBER_FALSE GL_COND_OBJ_GROUP_MEMBER_TRUE GL_GNULIB_GETTIMEOFDAY GL_COND_OBJ_GETTIMEOFDAY_FALSE GL_COND_OBJ_GETTIMEOFDAY_TRUE NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H NEXT_SYS_TIME_H REPLACE_STRUCT_TIMEVAL REPLACE_GETTIMEOFDAY HAVE_SYS_TIME_H HAVE_STRUCT_TIMEVAL HAVE_GETTIMEOFDAY LTLIBINTL LIBINTL GL_COND_OBJ_GETPROGNAME_FALSE GL_COND_OBJ_GETPROGNAME_TRUE GL_COND_OBJ_GETOPT_FALSE GL_COND_OBJ_GETOPT_TRUE GL_GENERATE_GETOPT_CDEFS_H_FALSE GL_GENERATE_GETOPT_CDEFS_H_TRUE GETOPT_CDEFS_H GL_GENERATE_GETOPT_H_FALSE GL_GENERATE_GETOPT_H_TRUE GETOPT_H HAVE_SYS_CDEFS_H HAVE_GETOPT_H NEXT_AS_FIRST_DIRECTIVE_GETOPT_H NEXT_GETOPT_H GL_COND_OBJ_GETLINE_FALSE GL_COND_OBJ_GETLINE_TRUE GL_COND_OBJ_GETGROUPS_FALSE GL_COND_OBJ_GETGROUPS_TRUE GL_COND_OBJ_GETDTABLESIZE_FALSE GL_COND_OBJ_GETDTABLESIZE_TRUE GL_GNULIB_MDA_TEMPNAM GL_GNULIB_MDA_PUTW GL_GNULIB_MDA_GETW GL_GNULIB_MDA_FILENO GL_GNULIB_MDA_FDOPEN GL_GNULIB_MDA_FCLOSEALL GL_GNULIB_VSPRINTF_POSIX GL_GNULIB_VSNPRINTF GL_GNULIB_VPRINTF_POSIX GL_GNULIB_VPRINTF GL_GNULIB_VFPRINTF_POSIX GL_GNULIB_VFPRINTF GL_GNULIB_VDPRINTF GL_GNULIB_VSCANF GL_GNULIB_VFSCANF GL_GNULIB_VASPRINTF GL_GNULIB_TMPFILE GL_GNULIB_STDIO_H_SIGPIPE GL_GNULIB_STDIO_H_NONBLOCKING GL_GNULIB_SPRINTF_POSIX GL_GNULIB_SNPRINTF GL_GNULIB_SCANF GL_GNULIB_RENAMEAT GL_GNULIB_RENAME GL_GNULIB_REMOVE GL_GNULIB_PUTS GL_GNULIB_PUTCHAR GL_GNULIB_PUTC GL_GNULIB_PRINTF_POSIX GL_GNULIB_PRINTF GL_GNULIB_POPEN GL_GNULIB_PERROR GL_GNULIB_PCLOSE GL_GNULIB_OBSTACK_PRINTF_POSIX GL_GNULIB_OBSTACK_PRINTF GL_GNULIB_GETLINE GL_GNULIB_GETDELIM GL_GNULIB_GETCHAR GL_GNULIB_GETC GL_GNULIB_FWRITE GL_GNULIB_FTELLO GL_GNULIB_FTELL GL_GNULIB_FSEEKO GL_GNULIB_FSEEK GL_GNULIB_FSCANF GL_GNULIB_FREOPEN GL_GNULIB_FREAD GL_GNULIB_FPUTS GL_GNULIB_FPUTC GL_GNULIB_FPURGE GL_GNULIB_FPRINTF_POSIX GL_GNULIB_FPRINTF GL_GNULIB_FOPEN_GNU GL_GNULIB_FOPEN GL_GNULIB_FGETS GL_GNULIB_FGETC GL_GNULIB_FFLUSH GL_GNULIB_FDOPEN GL_GNULIB_FCLOSE GL_GNULIB_DPRINTF GL_COND_OBJ_GETDELIM_FALSE GL_COND_OBJ_GETDELIM_TRUE REPLACE_VSPRINTF REPLACE_VSNPRINTF REPLACE_VPRINTF REPLACE_VFPRINTF REPLACE_VDPRINTF REPLACE_VASPRINTF REPLACE_TMPFILE REPLACE_STDIO_WRITE_FUNCS REPLACE_STDIO_READ_FUNCS REPLACE_SPRINTF REPLACE_SNPRINTF REPLACE_RENAMEAT REPLACE_RENAME REPLACE_REMOVE REPLACE_PRINTF REPLACE_POPEN REPLACE_PERROR REPLACE_OBSTACK_PRINTF REPLACE_GETLINE REPLACE_GETDELIM REPLACE_FTELLO REPLACE_FTELL REPLACE_FSEEKO REPLACE_FSEEK REPLACE_FREOPEN REPLACE_FPURGE REPLACE_FPRINTF REPLACE_FOPEN_FOR_FOPEN_GNU REPLACE_FOPEN REPLACE_FFLUSH REPLACE_FDOPEN REPLACE_FCLOSE REPLACE_DPRINTF HAVE_VDPRINTF HAVE_VASPRINTF HAVE_RENAMEAT HAVE_POPEN HAVE_PCLOSE HAVE_FTELLO HAVE_FSEEKO HAVE_DPRINTF HAVE_DECL_VSNPRINTF HAVE_DECL_SNPRINTF HAVE_DECL_PUTW HAVE_DECL_OBSTACK_PRINTF HAVE_DECL_GETW HAVE_DECL_GETLINE HAVE_DECL_GETDELIM HAVE_DECL_FTELLO HAVE_DECL_FSEEKO HAVE_DECL_FPURGE HAVE_DECL_FCLOSEALL GL_COND_OBJ_GETCWD_LGPL_FALSE GL_COND_OBJ_GETCWD_LGPL_TRUE GL_COND_OBJ_FSTATAT_FALSE GL_COND_OBJ_FSTATAT_TRUE GL_GNULIB_MDA_UMASK GL_GNULIB_MDA_MKDIR GL_GNULIB_MDA_CHMOD GL_GNULIB_OVERRIDES_STRUCT_STAT GL_GNULIB_UTIMENSAT GL_GNULIB_STAT GL_GNULIB_MKNODAT GL_GNULIB_MKNOD GL_GNULIB_MKFIFOAT GL_GNULIB_MKFIFO GL_GNULIB_MKDIRAT GL_GNULIB_MKDIR GL_GNULIB_LSTAT GL_GNULIB_LCHMOD GL_GNULIB_GETUMASK GL_GNULIB_FUTIMENS GL_GNULIB_FSTATAT GL_GNULIB_FSTAT GL_GNULIB_FCHMODAT GL_GNULIB_CHMOD WINDOWS_64_BIT_ST_SIZE WINDOWS_STAT_TIMESPEC NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H NEXT_SYS_STAT_H GL_COND_OBJ_FSTAT_FALSE GL_COND_OBJ_FSTAT_TRUE REPLACE_UTIMENSAT REPLACE_STAT REPLACE_MKNODAT REPLACE_MKNOD REPLACE_MKFIFOAT REPLACE_MKFIFO REPLACE_MKDIR REPLACE_LSTAT REPLACE_FUTIMENS REPLACE_FSTATAT REPLACE_FSTAT REPLACE_FCHMODAT REPLACE_CHMOD HAVE_UTIMENSAT HAVE_MKNODAT HAVE_MKNOD HAVE_MKFIFOAT HAVE_MKFIFO HAVE_MKDIRAT HAVE_LSTAT HAVE_LCHMOD HAVE_GETUMASK HAVE_FUTIMENS HAVE_FSTATAT HAVE_FCHMODAT GL_COND_OBJ_FREE_FALSE GL_COND_OBJ_FREE_TRUE GL_COND_OBJ_ITOLD_FALSE GL_COND_OBJ_ITOLD_TRUE GL_COND_OBJ_FLOAT_FALSE GL_COND_OBJ_FLOAT_TRUE GL_GENERATE_FLOAT_H_FALSE GL_GENERATE_FLOAT_H_TRUE FLOAT_H REPLACE_ITOLD NEXT_AS_FIRST_DIRECTIVE_FLOAT_H NEXT_FLOAT_H NEXT_AS_FIRST_DIRECTIVE_FCNTL_H NEXT_FCNTL_H GL_GNULIB_MDA_OPEN GL_GNULIB_MDA_CREAT GL_GNULIB_OPENAT GL_GNULIB_OPEN GL_GNULIB_NONBLOCKING GL_GNULIB_FCNTL GL_GNULIB_CREAT GL_COND_OBJ_FCNTL_FALSE GL_COND_OBJ_FCNTL_TRUE REPLACE_OPENAT REPLACE_OPEN REPLACE_FCNTL REPLACE_CREAT HAVE_OPENAT HAVE_FCNTL GL_COND_OBJ_FCHDIR_FALSE GL_COND_OBJ_FCHDIR_TRUE GL_COND_OBJ_FACCESSAT_FALSE GL_COND_OBJ_FACCESSAT_TRUE LIB_EACCESS EUIDACCESS_LIBGEN GL_COND_OBJ_EUIDACCESS_FALSE GL_COND_OBJ_EUIDACCESS_TRUE GL_COND_OBJ_ERROR_FALSE GL_COND_OBJ_ERROR_TRUE REPLACE_ERROR_AT_LINE REPLACE_ERROR HAVE_ERROR_AT_LINE HAVE_ERROR HAVE_ERROR_H NEXT_AS_FIRST_DIRECTIVE_ERROR_H NEXT_ERROR_H GL_GENERATE_ERRNO_H_FALSE GL_GENERATE_ERRNO_H_TRUE ERRNO_H EOVERFLOW_VALUE EOVERFLOW_HIDDEN ENOLINK_VALUE ENOLINK_HIDDEN EMULTIHOP_VALUE EMULTIHOP_HIDDEN NEXT_AS_FIRST_DIRECTIVE_ERRNO_H NEXT_ERRNO_H GL_COND_OBJ_DUP2_FALSE GL_COND_OBJ_DUP2_TRUE GL_COND_OBJ_DIRFD_FALSE GL_COND_OBJ_DIRFD_TRUE GL_GNULIB_ALPHASORT GL_GNULIB_SCANDIR GL_GNULIB_FDOPENDIR GL_GNULIB_DIRFD GL_GNULIB_CLOSEDIR GL_GNULIB_REWINDDIR GL_GNULIB_READDIR GL_GNULIB_OPENDIR DIR_HAS_FD_MEMBER HAVE_DIRENT_H NEXT_AS_FIRST_DIRECTIVE_DIRENT_H NEXT_DIRENT_H REPLACE_FDOPENDIR REPLACE_DIRFD REPLACE_CLOSEDIR REPLACE_REWINDDIR REPLACE_READDIR REPLACE_OPENDIR HAVE_ALPHASORT HAVE_SCANDIR HAVE_FDOPENDIR HAVE_DECL_FDOPENDIR HAVE_DECL_DIRFD HAVE_CLOSEDIR HAVE_REWINDDIR HAVE_READDIR HAVE_OPENDIR GL_COND_OBJ_CLOSE_FALSE GL_COND_OBJ_CLOSE_TRUE HAVE_WINSOCK2_H REPLACE_IOCTL SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS SYS_IOCTL_H_HAVE_WINSOCK2_H HAVE_MSVC_INVALID_PARAMETER_HANDLER GL_COND_OBJ_CHDIR_LONG_FALSE GL_COND_OBJ_CHDIR_LONG_TRUE GL_GNULIB_MBSTOC32S GL_GNULIB_MBSRTOC32S GL_GNULIB_MBSNRTOC32S GL_GNULIB_MBRTOC32 GL_GNULIB_MBRTOC16 GL_GNULIB_C32_GET_TYPE_TEST GL_GNULIB_C32_GET_MAPPING GL_GNULIB_C32_APPLY_TYPE_TEST GL_GNULIB_C32_APPLY_MAPPING GL_GNULIB_C32TOB GL_GNULIB_C32SWIDTH GL_GNULIB_C32STOMBS GL_GNULIB_C32SRTOMBS GL_GNULIB_C32SNRTOMBS GL_GNULIB_C32RTOMB GL_GNULIB_C32WIDTH GL_GNULIB_C32TOUPPER GL_GNULIB_C32TOLOWER GL_GNULIB_C32ISXDIGIT GL_GNULIB_C32ISUPPER GL_GNULIB_C32ISSPACE GL_GNULIB_C32ISPUNCT GL_GNULIB_C32ISPRINT GL_GNULIB_C32ISLOWER GL_GNULIB_C32ISGRAPH GL_GNULIB_C32ISDIGIT GL_GNULIB_C32ISCNTRL GL_GNULIB_C32ISBLANK GL_GNULIB_C32ISALPHA GL_GNULIB_C32ISALNUM GL_GNULIB_BTOC32 HAVE_WORKING_MBRTOC32 LOCALE_ZH_CN LC_MONETARY_IMPLEMENTED LC_TIME_IMPLEMENTED LC_NUMERIC_IMPLEMENTED LC_COLLATE_IMPLEMENTED LOCALE_FR_UTF8 LOCALE_JA SMALL_WCHAR_T BITSIZEOF_WCHAR_T CXX_HAS_CHAR8_TYPE CXX_HAS_UCHAR_TYPES GNULIBHEADERS_OVERRIDE_CHAR32_T GNULIBHEADERS_OVERRIDE_CHAR16_T GNULIBHEADERS_OVERRIDE_CHAR8_T HAVE_UCHAR_H NEXT_AS_FIRST_DIRECTIVE_UCHAR_H NEXT_UCHAR_H REPLACE_MBRTOC32 REPLACE_MBRTOC16 REPLACE_C32RTOMB HAVE_MBRTOC32 HAVE_MBRTOC16 HAVE_C32RTOMB REPLACE_WCTOMB REPLACE_UNSETENV REPLACE_STRTOULL REPLACE_STRTOUL REPLACE_STRTOLL REPLACE_STRTOLD REPLACE_STRTOL REPLACE_STRTOD REPLACE_SETSTATE REPLACE_SETENV REPLACE_REALPATH REPLACE_REALLOCARRAY REPLACE_REALLOC_FOR_REALLOC_POSIX REPLACE_REALLOC_FOR_REALLOC_GNU REPLACE_RANDOM_R REPLACE_RANDOM REPLACE_RAND REPLACE_QSORT_R REPLACE_PUTENV REPLACE_PTSNAME_R REPLACE_PTSNAME REPLACE_POSIX_OPENPT REPLACE_POSIX_MEMALIGN REPLACE_MKSTEMP REPLACE_MKOSTEMPS REPLACE_MKOSTEMP REPLACE_MBTOWC REPLACE_MBSTOWCS REPLACE_MB_CUR_MAX REPLACE_MALLOC_FOR_MALLOC_POSIX REPLACE_MALLOC_FOR_MALLOC_GNU REPLACE_INITSTATE REPLACE_GETSUBOPT REPLACE_GETPROGNAME REPLACE_GETLOADAVG REPLACE_FREE REPLACE_CANONICALIZE_FILE_NAME REPLACE_CALLOC_FOR_CALLOC_POSIX REPLACE_CALLOC_FOR_CALLOC_GNU REPLACE_ALIGNED_ALLOC REPLACE__EXIT HAVE_DECL_UNSETENV HAVE_UNLOCKPT HAVE_SYS_LOADAVG_H HAVE_STRUCT_RANDOM_DATA HAVE_STRTOULL HAVE_STRTOUL HAVE_STRTOLL HAVE_STRTOLD HAVE_STRTOL HAVE_STRTOD HAVE_DECL_SETSTATE HAVE_SETSTATE HAVE_DECL_SETENV HAVE_SETENV HAVE_SECURE_GETENV HAVE_RPMATCH HAVE_REALPATH HAVE_REALLOCARRAY HAVE_RANDOM_R HAVE_RANDOM_H HAVE_RANDOM HAVE_QSORT_R HAVE_PTSNAME_R HAVE_PTSNAME HAVE_POSIX_OPENPT HAVE_POSIX_MEMALIGN HAVE_MKSTEMPS HAVE_MKSTEMP HAVE_MKOSTEMPS HAVE_MKOSTEMP HAVE_MKDTEMP HAVE_MBTOWC HAVE_DECL_INITSTATE HAVE_INITSTATE HAVE_GRANTPT HAVE_GETSUBOPT HAVE_GETPROGNAME HAVE_DECL_PROGRAM_INVOCATION_NAME HAVE_DECL_GETLOADAVG HAVE_DECL_GCVT HAVE_DECL_FCVT HAVE_DECL_ECVT HAVE_CANONICALIZE_FILE_NAME HAVE_ATOLL HAVE_ALIGNED_ALLOC HAVE__EXIT GL_GNULIB_MDA_PUTENV GL_GNULIB_MDA_MKTEMP GL_GNULIB_MDA_GCVT GL_GNULIB_MDA_FCVT GL_GNULIB_MDA_ECVT GL_GNULIB_WCTOMB GL_GNULIB_UNSETENV GL_GNULIB_UNLOCKPT GL_GNULIB_SYSTEM_POSIX GL_GNULIB_STRTOULL GL_GNULIB_STRTOUL GL_GNULIB_STRTOLL GL_GNULIB_STRTOLD GL_GNULIB_STRTOL GL_GNULIB_STRTOD GL_GNULIB_SETENV GL_GNULIB_SECURE_GETENV GL_GNULIB_RPMATCH GL_GNULIB_REALPATH GL_GNULIB_REALLOC_POSIX GL_GNULIB_REALLOC_GNU GL_GNULIB_REALLOCARRAY GL_GNULIB_RANDOM_R GL_GNULIB_RANDOM GL_GNULIB_RAND GL_GNULIB_QSORT_R GL_GNULIB_PUTENV GL_GNULIB_PTSNAME_R GL_GNULIB_PTSNAME GL_GNULIB_POSIX_OPENPT GL_GNULIB_POSIX_MEMALIGN GL_GNULIB_MKSTEMPS GL_GNULIB_MKSTEMP GL_GNULIB_MKOSTEMPS GL_GNULIB_MKOSTEMP GL_GNULIB_MKDTEMP GL_GNULIB_MBTOWC GL_GNULIB_MBSTOWCS GL_GNULIB_MALLOC_POSIX GL_GNULIB_MALLOC_GNU GL_GNULIB_GRANTPT GL_GNULIB_GETSUBOPT GL_GNULIB_GETPROGNAME GL_GNULIB_GETLOADAVG GL_GNULIB_FREE_POSIX GL_GNULIB_CANONICALIZE_FILE_NAME GL_GNULIB_CALLOC_POSIX GL_GNULIB_CALLOC_GNU GL_GNULIB_ATOLL GL_GNULIB_ALIGNED_ALLOC GL_GNULIB__EXIT GL_GNULIB_MDA_WCSDUP GL_GNULIB_WGETCWD GL_GNULIB_WCSFTIME GL_GNULIB_WCSWIDTH GL_GNULIB_WCSTOK GL_GNULIB_WCSSTR GL_GNULIB_WCSPBRK GL_GNULIB_WCSSPN GL_GNULIB_WCSCSPN GL_GNULIB_WCSRCHR GL_GNULIB_WCSCHR GL_GNULIB_WCSDUP GL_GNULIB_WCSXFRM GL_GNULIB_WCSCOLL GL_GNULIB_WCSNCASECMP GL_GNULIB_WCSCASECMP GL_GNULIB_WCSNCMP GL_GNULIB_WCSCMP GL_GNULIB_WCSNCAT GL_GNULIB_WCSCAT GL_GNULIB_WCPNCPY GL_GNULIB_WCSNCPY GL_GNULIB_WCPCPY GL_GNULIB_WCSCPY GL_GNULIB_WCSNLEN GL_GNULIB_WCSLEN GL_GNULIB_WMEMSET GL_GNULIB_WMEMPCPY GL_GNULIB_WMEMMOVE GL_GNULIB_WMEMCPY GL_GNULIB_WMEMCMP GL_GNULIB_WMEMCHR GL_GNULIB_WCWIDTH GL_GNULIB_WCSNRTOMBS GL_GNULIB_WCSRTOMBS GL_GNULIB_WCRTOMB GL_GNULIB_MBSNRTOWCS GL_GNULIB_MBSRTOWCS GL_GNULIB_MBRLEN GL_GNULIB_MBRTOWC GL_GNULIB_MBSZERO GL_GNULIB_MBSINIT GL_GNULIB_WCTOB GL_GNULIB_BTOWC GL_COND_OBJ_BTOWC_FALSE GL_COND_OBJ_BTOWC_TRUE LOCALE_FR REPLACE_WMEMPCPY REPLACE_WMEMCMP REPLACE_WCSTOK REPLACE_WCSSTR REPLACE_WCSNCMP REPLACE_WCSCMP REPLACE_WCSFTIME REPLACE_WCSWIDTH REPLACE_WCWIDTH REPLACE_WCSNRTOMBS REPLACE_WCSRTOMBS REPLACE_WCRTOMB REPLACE_MBSNRTOWCS REPLACE_MBSRTOWCS REPLACE_MBRLEN REPLACE_MBRTOWC REPLACE_MBSINIT REPLACE_WCTOB REPLACE_BTOWC REPLACE_MBSTATE_T HAVE_DECL_WCWIDTH HAVE_DECL_WCSDUP HAVE_DECL_WCTOB HAVE_WCSFTIME HAVE_WCSWIDTH HAVE_WCSTOK HAVE_WCSSTR HAVE_WCSPBRK HAVE_WCSSPN HAVE_WCSCSPN HAVE_WCSRCHR HAVE_WCSCHR HAVE_WCSDUP HAVE_WCSXFRM HAVE_WCSCOLL HAVE_WCSNCASECMP HAVE_WCSCASECMP HAVE_WCSNCMP HAVE_WCSCMP HAVE_WCSNCAT HAVE_WCSCAT HAVE_WCPNCPY HAVE_WCSNCPY HAVE_WCPCPY HAVE_WCSCPY HAVE_WCSNLEN HAVE_WCSLEN HAVE_WMEMSET HAVE_WMEMPCPY HAVE_WMEMMOVE HAVE_WMEMCPY HAVE_WMEMCMP HAVE_WMEMCHR HAVE_WCSNRTOMBS HAVE_WCSRTOMBS HAVE_WCRTOMB HAVE_MBSNRTOWCS HAVE_MBSRTOWCS HAVE_MBRLEN HAVE_MBRTOWC HAVE_MBSINIT HAVE_BTOWC GL_GENERATE_ASSERT_H_FALSE GL_GENERATE_ASSERT_H_TRUE ASSERT_H NEXT_AS_FIRST_DIRECTIVE_ASSERT_H NEXT_ASSERT_H PRAGMA_COLUMNS PRAGMA_SYSTEM_HEADER INCLUDE_NEXT_AS_FIRST_DIRECTIVE INCLUDE_NEXT GL_GENERATE_ALLOCA_H_FALSE GL_GENERATE_ALLOCA_H_TRUE ALLOCA_H HAVE_ALLOCA_H ALLOCA LTALLOCA GL_GNULIB_MDA_WRITE GL_GNULIB_MDA_UNLINK GL_GNULIB_MDA_SWAB GL_GNULIB_MDA_RMDIR GL_GNULIB_MDA_READ GL_GNULIB_MDA_LSEEK GL_GNULIB_MDA_ISATTY GL_GNULIB_MDA_GETPID GL_GNULIB_MDA_GETCWD GL_GNULIB_MDA_EXECVPE GL_GNULIB_MDA_EXECVP GL_GNULIB_MDA_EXECVE GL_GNULIB_MDA_EXECV GL_GNULIB_MDA_EXECLP GL_GNULIB_MDA_EXECLE GL_GNULIB_MDA_EXECL GL_GNULIB_MDA_DUP2 GL_GNULIB_MDA_DUP GL_GNULIB_MDA_CLOSE GL_GNULIB_MDA_CHDIR GL_GNULIB_MDA_ACCESS GL_GNULIB_WRITE GL_GNULIB_USLEEP GL_GNULIB_UNLINKAT GL_GNULIB_UNLINK GL_GNULIB_UNISTD_H_SIGPIPE GL_GNULIB_UNISTD_H_NONBLOCKING GL_GNULIB_UNISTD_H_GETOPT GL_GNULIB_TTYNAME_R GL_GNULIB_TRUNCATE GL_GNULIB_SYMLINKAT GL_GNULIB_SYMLINK GL_GNULIB_SLEEP GL_GNULIB_SETHOSTNAME GL_GNULIB_RMDIR GL_GNULIB_READLINKAT GL_GNULIB_READLINK GL_GNULIB_READ GL_GNULIB_PWRITE GL_GNULIB_PREAD GL_GNULIB_PIPE2 GL_GNULIB_PIPE GL_GNULIB_LSEEK GL_GNULIB_LINKAT GL_GNULIB_LINK GL_GNULIB_LCHOWN GL_GNULIB_ISATTY GL_GNULIB_GROUP_MEMBER GL_GNULIB_GETUSERSHELL GL_GNULIB_GETPASS_GNU GL_GNULIB_GETPASS GL_GNULIB_GETPAGESIZE GL_GNULIB_GETOPT_POSIX GL_GNULIB_GETLOGIN_R GL_GNULIB_GETLOGIN GL_GNULIB_GETHOSTNAME GL_GNULIB_GETGROUPS GL_GNULIB_GETENTROPY GL_GNULIB_GETDTABLESIZE GL_GNULIB_GETDOMAINNAME GL_GNULIB_GETCWD GL_GNULIB_FTRUNCATE GL_GNULIB_FSYNC GL_GNULIB_FDATASYNC GL_GNULIB_FCHOWNAT GL_GNULIB_FCHDIR GL_GNULIB_FACCESSAT GL_GNULIB_EXECVPE GL_GNULIB_EXECVP GL_GNULIB_EXECVE GL_GNULIB_EXECV GL_GNULIB_EXECLP GL_GNULIB_EXECLE GL_GNULIB_EXECL GL_GNULIB_EUIDACCESS GL_GNULIB_ENVIRON GL_GNULIB_DUP3 GL_GNULIB_DUP2 GL_GNULIB_DUP GL_GNULIB_COPY_FILE_RANGE GL_GNULIB_CLOSE GL_GNULIB_CHOWN GL_GNULIB_CHDIR GL_GNULIB_ACCESS GL_COND_OBJ_ACCESS_FALSE GL_COND_OBJ_ACCESS_TRUE UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS UNISTD_H_HAVE_WINSOCK2_H UNISTD_H_HAVE_SYS_RANDOM_H REPLACE_WRITE REPLACE_USLEEP REPLACE_UNLINKAT REPLACE_UNLINK REPLACE_TTYNAME_R REPLACE_TRUNCATE REPLACE_SYMLINKAT REPLACE_SYMLINK REPLACE_SLEEP REPLACE_SETHOSTNAME REPLACE_RMDIR REPLACE_READLINKAT REPLACE_READLINK REPLACE_READ REPLACE_PWRITE REPLACE_PREAD REPLACE_PIPE2 REPLACE_LSEEK REPLACE_LINKAT REPLACE_LINK REPLACE_LCHOWN REPLACE_ISATTY REPLACE_GETPASS_FOR_GETPASS_GNU REPLACE_GETPASS REPLACE_GETPAGESIZE REPLACE_GETGROUPS REPLACE_GETLOGIN_R REPLACE_GETENTROPY REPLACE_GETDTABLESIZE REPLACE_GETDOMAINNAME REPLACE_GETCWD REPLACE_FTRUNCATE REPLACE_FDATASYNC REPLACE_FCHOWNAT REPLACE_FCHDIR REPLACE_FACCESSAT REPLACE_EXECVPE REPLACE_EXECVP REPLACE_EXECVE REPLACE_EXECV REPLACE_EXECLP REPLACE_EXECLE REPLACE_EXECL REPLACE_DUP3 REPLACE_DUP2 REPLACE_DUP REPLACE_COPY_FILE_RANGE REPLACE_CLOSE REPLACE_CHOWN REPLACE_ACCESS HAVE_SYS_PARAM_H HAVE_OS_H HAVE_DECL_TTYNAME_R HAVE_DECL_TRUNCATE HAVE_DECL_SETHOSTNAME HAVE_DECL_GETUSERSHELL HAVE_DECL_GETPAGESIZE HAVE_DECL_GETLOGIN_R HAVE_DECL_GETLOGIN HAVE_DECL_GETDOMAINNAME HAVE_DECL_FDATASYNC HAVE_DECL_FCHDIR HAVE_DECL_EXECVPE HAVE_DECL_ENVIRON HAVE_USLEEP HAVE_UNLINKAT HAVE_SYMLINKAT HAVE_SYMLINK HAVE_SLEEP HAVE_SETHOSTNAME HAVE_READLINKAT HAVE_READLINK HAVE_PWRITE HAVE_PREAD HAVE_PIPE2 HAVE_PIPE HAVE_LINKAT HAVE_LINK HAVE_LCHOWN HAVE_GROUP_MEMBER HAVE_GETPASS HAVE_GETPAGESIZE HAVE_GETLOGIN HAVE_GETHOSTNAME HAVE_GETGROUPS HAVE_GETENTROPY HAVE_GETDTABLESIZE HAVE_FTRUNCATE HAVE_FSYNC HAVE_FDATASYNC HAVE_FCHOWNAT HAVE_FCHDIR HAVE_FACCESSAT HAVE_EXECVPE HAVE_EUIDACCESS HAVE_DUP3 HAVE_COPY_FILE_RANGE HAVE_CHOWN GL_COND_LIBTOOL_FALSE GL_COND_LIBTOOL_TRUE COND_NUMPY_FALSE COND_NUMPY_TRUE HAVE_PYTHON PYTHON_INCLUDE_DIR NUMPY_INCLUDE_DIR pkgpyexecdir pyexecdir pkgpythondir pythondir PYTHON_EXEC_PREFIX PYTHON_PREFIX PYTHON_PLATFORM PYTHON_VERSION PYTHON has_topcat has_ds9 COND_HASGHOSTSCRIPT_FALSE COND_HASGHOSTSCRIPT_TRUE has_ghostscript has_glibtool has_zsh has_bash has_libtool has_curl COND_HASHELP2MAN_FALSE COND_HASHELP2MAN_TRUE has_help2man COND_HASGNUMAKE_H_FALSE COND_HASGNUMAKE_H_TRUE HAVE_GNUMAKE_H HAVE_PTHREAD_BARRIER HAVE_WCSLIB_WCSCCS HAVE_WCSLIB_OBSFIX HAVE_WCSLIB_MJDREF COND_HASWCSDIS_H_FALSE COND_HASWCSDIS_H_TRUE HAVE_WCSLIB_DIS_H HAVE_WCSLIB_VERSION HAVE_FITS_IS_REENTRANT HAVE_GSL_STEFFEN HAVE_LIBGIT2_FOR_CONF LIBGIT2_PREFIX LTLIBGIT2 LIBGIT2 HAVE_LIBGIT2 COND_HASLIBTIFF_FALSE COND_HASLIBTIFF_TRUE LIBTIFF_PREFIX LTLIBTIFF LIBTIFF HAVE_LIBTIFF LIBLZMA_PREFIX LTLIBLZMA LIBLZMA HAVE_LIBLZMA COND_HASLIBJPEG_FALSE COND_HASLIBJPEG_TRUE LIBJPEG_PREFIX LTLIBJPEG LIBJPEG HAVE_LIBJPEG LIBWCS_PREFIX LTLIBWCS LIBWCS HAVE_LIBWCS LIBCFITSIO_PREFIX LTLIBCFITSIO LIBCFITSIO HAVE_LIBCFITSIO LIBCURL_PREFIX LTLIBCURL LIBCURL HAVE_LIBCURL LIBBZ2_PREFIX LTLIBBZ2 LIBBZ2 HAVE_LIBBZ2 LIBZ_PREFIX LTLIBZ LIBZ HAVE_LIBZ LIBGSL_PREFIX LTLIBGSL LIBGSL HAVE_LIBGSL LIBM_PREFIX LTLIBM LIBM HAVE_LIBM SIZEOF_INT SIZEOF_LONG SIZEOF_SIZE_T LIBOBJS PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CXX PTHREAD_CC ax_pthread_config COND_HASCXX_FALSE COND_HASCXX_TRUE has_cxx COND_CHECK_WITH_VALGRIND_FALSE COND_CHECK_WITH_VALGRIND_TRUE has_valgrind SUGGESTEDJOBS has_sysctl has_nproc CXXCPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL DLLTOOL OBJDUMP FILECMD LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP LIBTOOL RANLIB ARFLAGS ac_ct_AR AR CPP host_os host_vendor host_cpu host build_os build_vendor build_cpu build SED am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC GAL_LT_VERSION AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_largefile enable_threads enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock enable_check_with_valgrind enable_debug enable_rpath with_libm_prefix with_libgsl_prefix with_libz_prefix with_libbz2_prefix with_libcurl_prefix with_libcfitsio_prefix with_libwcs_prefix with_libjpeg with_libjpeg_prefix with_libtiff with_liblzma_prefix with_libtiff_prefix with_libgit2 with_libgit2_prefix with_python with_python_sys_prefix with_python_prefix with_python_exec_prefix enable_cross_guesses with_included_regex enable_gnulibcheck enable_arithmetic enable_buildprog enable_convertt enable_convolve enable_cosmiccal enable_crop enable_fits enable_match enable_mkcatalog enable_mkprof enable_noisechisel enable_query enable_segment enable_statistics enable_table enable_warp enable_guide_message enable_year2038 ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC CPP LT_SYS_LIBRARY_PATH CXXCPP PYTHON' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: '$ac_option' Try '$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures GNU Astronomy Utilities 0.22 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/gnuastro] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of GNU Astronomy Utilities 0.22:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-largefile omit support for large files --enable-threads={isoc|posix|isoc+posix|windows} specify multithreading API --disable-threads build without multithread safety --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-check-with-valgrind Run 'make check' programs within Valgrind --enable-debug No optimization, debug flags, no shared lib. --disable-rpath do not hardcode runtime library paths --enable-cross-guesses={conservative|risky} specify policy for cross-compilation guesses --enable-gnulibcheck In 'make check', also test GNU Gnulib. --enable-arithmetic Install Arithmetic and other enabled programs. --enable-buildprog Install BuildProgram and other enabled programs. --enable-convertt Install ConvertType and other enabled programs. --enable-convolve Install Convolve and other enabled programs. --enable-cosmiccal Install CosmicCalculator and other enabled programs. --enable-crop Install Crop and other enabled programs. --enable-fits Install Fits and other enabled programs. --enable-match Install Match and other enabled programs. --enable-mkcatalog Install MakeCatalog and other enabled programs. --enable-mkprof Install MakeProfile and other enabled programs. --enable-noisechisel Install NoiseChisel and other enabled programs. --enable-query Install query and other enabled packages. --enable-segment Install Segment and other enabled programs. --enable-statistics Install Statistics and other enabled programs. --enable-table Install Table and other enabled programs. --enable-warp Install Warp and other enabled programs. --disable-guide-message No messages after each build step. --enable-year2038 support timestamps after 2038 Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-libm-prefix[=DIR] search for libm in DIR/include and DIR/lib --without-libm-prefix don't search for libm in includedir and libdir --with-libgsl-prefix[=DIR] search for libgsl in DIR/include and DIR/lib --without-libgsl-prefix don't search for libgsl in includedir and libdir --with-libz-prefix[=DIR] search for libz in DIR/include and DIR/lib --without-libz-prefix don't search for libz in includedir and libdir --with-libbz2-prefix[=DIR] search for libbz2 in DIR/include and DIR/lib --without-libbz2-prefix don't search for libbz2 in includedir and libdir --with-libcurl-prefix[=DIR] search for libcurl in DIR/include and DIR/lib --without-libcurl-prefix don't search for libcurl in includedir and libdir --with-libcfitsio-prefix[=DIR] search for libcfitsio in DIR/include and DIR/lib --without-libcfitsio-prefix don't search for libcfitsio in includedir and libdir --with-libwcs-prefix[=DIR] search for libwcs in DIR/include and DIR/lib --without-libwcs-prefix don't search for libwcs in includedir and libdir --without-libjpeg disable support for libjpeg --with-libjpeg-prefix[=DIR] search for libjpeg in DIR/include and DIR/lib --without-libjpeg-prefix don't search for libjpeg in includedir and libdir --without-libtiff disable support for libtiff --with-liblzma-prefix[=DIR] search for liblzma in DIR/include and DIR/lib --without-liblzma-prefix don't search for liblzma in includedir and libdir --with-libtiff-prefix[=DIR] search for libtiff in DIR/include and DIR/lib --without-libtiff-prefix don't search for libtiff in includedir and libdir --without-libgit2 disable support for libgit2 --with-libgit2-prefix[=DIR] search for libgit2 in DIR/include and DIR/lib --without-libgit2-prefix don't search for libgit2 in includedir and libdir --with-python enable support for python --with-python-sys-prefix use Python's sys.prefix and sys.exec_prefix values --with-python_prefix override the default PYTHON_PREFIX --with-python_exec_prefix override the default PYTHON_EXEC_PREFIX --without-included-regex don't compile regex; this is the default on systems with recent-enough versions of the GNU C Library (use with caution on other systems). Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor LT_SYS_LIBRARY_PATH User-defined run-time library search path. CXXCPP C++ preprocessor PYTHON the Python interpreter Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to <bug-gnuastro@gnu.org>. GNU Astronomy Utilities home page: <http://www.gnu.org/software/gnuastro/>. General help using GNU software: <https://www.gnu.org/gethelp/>. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF GNU Astronomy Utilities configure 0.22 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case <limits.h> declares $2. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (void); below. */ #include <limits.h> #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (void); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err } then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_try_run LINENO # ---------------------- # Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that # executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status ;; esac fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid; break else case e in #( e) as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_lo=$ac_mid; break else case e in #( e) as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done else case e in #( e) ac_lo= ac_hi= ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid else case e in #( e) as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval (void) { return $2; } static unsigned long int ulongval (void) { return $2; } #include <stdio.h> #include <stdlib.h> int main (void) { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo >>conftest.val; read $3 <conftest.val; ac_retval=0 else case e in #( e) ac_retval=1 ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext rm -f conftest.val fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_compute_int # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 printf %s "checking for $2.$3... " >&6; } if eval test \${$4+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main (void) { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main (void) { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" else case e in #( e) eval "$4=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$4 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member # ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR # ------------------------------------------------------------------ # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. ac_fn_check_decl () { ac_saved_ac_compile="$ac_compile" if test -n "$ac_compile_for_check_decl"; then ac_compile="$ac_compile_for_check_decl" fi as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 printf %s "checking whether $as_decl_name is declared... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` eval ac_save_FLAGS=\$$6 as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval $6=\$ac_save_FLAGS ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno ac_compile="$ac_saved_ac_compile" } # ac_fn_check_decl # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) eval "$3=yes" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by GNU Astronomy Utilities $as_me 0.22, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See 'config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include <stddef.h> #include <stdarg.h> struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (char **p, int i) { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* C89 style stringification. */ #define noexpand_stringify(a) #a const char *stringified = noexpand_stringify(arbitrary+token=sequence); /* C89 style token pasting. Exercises some of the corner cases that e.g. old MSVC gets wrong, but not very hard. */ #define noexpand_concat(a,b) a##b #define expand_concat(a,b) noexpand_concat(a,b) extern int vA; extern int vbee; #define aye A #define bee B int *pvA = &expand_concat(v,aye); int *pvbee = &noexpand_concat(v,bee); /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' /* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif // See if C++-style comments work. #include <stdbool.h> extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Work around memory leak warnings. free (ia); // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' /* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " # Test code for whether the C++ compiler supports C++98 (global declarations) ac_cxx_conftest_cxx98_globals=' // Does the compiler advertise C++98 conformance? #if !defined __cplusplus || __cplusplus < 199711L # error "Compiler does not advertise C++98 conformance" #endif // These inclusions are to reject old compilers that // lack the unsuffixed header files. #include <cstdlib> #include <exception> // <cassert> and <cstring> are *not* freestanding headers in C++98. extern void assert (int); namespace std { extern int strcmp (const char *, const char *); } // Namespaces, exceptions, and templates were all added after "C++ 2.0". using std::exception; using std::strcmp; namespace { void test_exception_syntax() { try { throw "test"; } catch (const char *s) { // Extra parentheses suppress a warning when building autoconf itself, // due to lint rules shared with more typical C programs. assert (!(strcmp) (s, "test")); } } template <typename T> struct test_template { T const val; explicit test_template(T t) : val(t) {} template <typename U> T add(U u) { return static_cast<T>(u) + val; } }; } // anonymous namespace ' # Test code for whether the C++ compiler supports C++98 (body of main) ac_cxx_conftest_cxx98_main=' assert (argc); assert (! argv[0]); { test_exception_syntax (); test_template<double> tt (2.0); assert (tt.add (4) == 6.0); assert (true && !false); } ' # Test code for whether the C++ compiler supports C++11 (global declarations) ac_cxx_conftest_cxx11_globals=' // Does the compiler advertise C++ 2011 conformance? #if !defined __cplusplus || __cplusplus < 201103L # error "Compiler does not advertise C++11 conformance" #endif namespace cxx11test { constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; // for testing lambda expressions template <typename Ret, typename Fn> Ret eval(Fn f, Ret v) { return f(v); } // for testing variadic templates and trailing return types template <typename V> auto sum(V first) -> V { return first; } template <typename V, typename... Args> auto sum(V first, Args... rest) -> V { return first + sum(rest...); } } ' # Test code for whether the C++ compiler supports C++11 (body of main) ac_cxx_conftest_cxx11_main=' { // Test auto and decltype auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; int total = 0; for (auto i = a3; *i; ++i) { total += *i; } decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (auto &x : array) { x += 23; } } { // Test lambda expressions using cxx11test::eval; assert (eval ([](int x) { return x*2; }, 21) == 42); double d = 2.0; assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); assert (d == 5.0); assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); assert (d == 5.0); } { // Test use of variadic templates using cxx11test::sum; auto a = sum(1); auto b = sum(1, 2); auto c = sum(1.0, 2.0, 3.0); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets test_template<::test_template<int>> v(test_template<int>(12)); } { // Unicode literals char const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-8 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } ' # Test code for whether the C compiler supports C++11 (complete). ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} ${ac_cxx_conftest_cxx11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} ${ac_cxx_conftest_cxx11_main} return ok; } " # Test code for whether the C compiler supports C++98 (complete). ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" as_fn_append ac_func_c_list " lstat HAVE_LSTAT" as_fn_append ac_func_c_list " flockfile HAVE_FLOCKFILE" as_fn_append ac_func_c_list " funlockfile HAVE_FUNLOCKFILE" as_fn_append ac_header_c_list " features.h features_h HAVE_FEATURES_H" as_fn_append ac_header_c_list " linewrap.h linewrap_h HAVE_LINEWRAP_H" as_fn_append ac_func_c_list " btowc HAVE_BTOWC" as_fn_append ac_func_c_list " mbrtowc HAVE_MBRTOWC" as_fn_append ac_header_c_list " uchar.h uchar_h HAVE_UCHAR_H" as_fn_append ac_func_c_list " mbsinit HAVE_MBSINIT" as_fn_append ac_header_c_list " sys/param.h sys_param_h HAVE_SYS_PARAM_H" as_fn_append ac_func_c_list " _set_invalid_parameter_handler HAVE__SET_INVALID_PARAMETER_HANDLER" as_fn_append ac_header_c_list " sys/socket.h sys_socket_h HAVE_SYS_SOCKET_H" as_fn_append ac_func_c_list " fchdir HAVE_FCHDIR" as_fn_append ac_header_c_list " dirent.h dirent_h HAVE_DIRENT_H" as_fn_append ac_header_c_list " error.h error_h HAVE_ERROR_H" as_fn_append ac_func_c_list " fcntl HAVE_FCNTL" as_fn_append ac_func_c_list " symlink HAVE_SYMLINK" as_fn_append ac_func_c_list " fstatat HAVE_FSTATAT" as_fn_append ac_func_c_list " getdtablesize HAVE_GETDTABLESIZE" gl_getopt_required=GNU as_fn_append ac_header_c_list " getopt.h getopt_h HAVE_GETOPT_H" as_fn_append ac_header_c_list " sys/cdefs.h sys_cdefs_h HAVE_SYS_CDEFS_H" as_fn_append ac_func_c_list " getexecname HAVE_GETEXECNAME" as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H" as_fn_append ac_func_c_list " gettimeofday HAVE_GETTIMEOFDAY" as_fn_append ac_header_c_list " threads.h threads_h HAVE_THREADS_H" as_fn_append ac_header_c_list " limits.h limits_h HAVE_LIMITS_H" as_fn_append ac_func_c_list " iswcntrl HAVE_ISWCNTRL" as_fn_append ac_header_c_list " crtdefs.h crtdefs_h HAVE_CRTDEFS_H" as_fn_append ac_header_c_list " wctype.h wctype_h HAVE_WCTYPE_H" as_fn_append ac_header_c_list " langinfo.h langinfo_h HAVE_LANGINFO_H" as_fn_append ac_header_c_list " xlocale.h xlocale_h HAVE_XLOCALE_H" as_fn_append ac_header_c_list " math.h math_h HAVE_MATH_H" as_fn_append ac_header_c_list " sys/mman.h sys_mman_h HAVE_SYS_MMAN_H" as_fn_append ac_func_c_list " mprotect HAVE_MPROTECT" as_fn_append ac_func_c_list " openat HAVE_OPENAT" as_fn_append ac_func_c_list " pipe HAVE_PIPE" as_fn_append ac_header_c_list " malloc.h malloc_h HAVE_MALLOC_H" as_fn_append ac_func_c_list " isblank HAVE_ISBLANK" as_fn_append ac_func_c_list " iswctype HAVE_ISWCTYPE" as_fn_append ac_func_c_list " secure_getenv HAVE_SECURE_GETENV" as_fn_append ac_func_c_list " getuid HAVE_GETUID" as_fn_append ac_func_c_list " geteuid HAVE_GETEUID" as_fn_append ac_func_c_list " getgid HAVE_GETGID" as_fn_append ac_func_c_list " getegid HAVE_GETEGID" as_fn_append ac_header_c_list " sys/select.h sys_select_h HAVE_SYS_SELECT_H" as_fn_append ac_func_c_list " sleep HAVE_SLEEP" as_fn_append ac_header_c_list " stdbool.h stdbool_h HAVE_STDBOOL_H" as_fn_append ac_header_c_list " stdckdint.h stdckdint_h HAVE_STDCKDINT_H" as_fn_append ac_func_c_list " __xpg_strerror_r HAVE___XPG_STRERROR_R" as_fn_append ac_func_c_list " strndup HAVE_STRNDUP" as_fn_append ac_func_c_list " strptime HAVE_STRPTIME" as_fn_append ac_header_c_list " sys/uio.h sys_uio_h HAVE_SYS_UIO_H" as_fn_append ac_header_c_list " sys/wait.h sys_wait_h HAVE_SYS_WAIT_H" as_fn_append ac_header_c_list " sysexits.h sysexits_h HAVE_SYSEXITS_H" as_fn_append ac_func_c_list " localtime_r HAVE_LOCALTIME_R" as_fn_append ac_func_c_list " vasnprintf HAVE_VASNPRINTF" as_fn_append ac_func_c_list " snprintf HAVE_SNPRINTF" as_fn_append ac_func_c_list " wcrtomb HAVE_WCRTOMB" as_fn_append ac_func_c_list " wcwidth HAVE_WCWIDTH" as_fn_append ac_header_c_list " arpa/inet.h arpa_inet_h HAVE_ARPA_INET_H" as_fn_append ac_header_c_list " netdb.h netdb_h HAVE_NETDB_H" as_fn_append ac_header_c_list " netinet/in.h netinet_in_h HAVE_NETINET_IN_H" as_fn_append ac_header_c_list " semaphore.h semaphore_h HAVE_SEMAPHORE_H" as_fn_append ac_func_c_list " pselect HAVE_PSELECT" as_fn_append ac_header_c_list " pthread.h pthread_h HAVE_PTHREAD_H" as_fn_append ac_func_c_list " pthread_sigmask HAVE_PTHREAD_SIGMASK" as_fn_append ac_func_c_list " setenv HAVE_SETENV" as_fn_append ac_header_c_list " sys/ioctl.h sys_ioctl_h HAVE_SYS_IOCTL_H" as_fn_append ac_func_c_list " shutdown HAVE_SHUTDOWN" as_fn_append ac_func_c_list " usleep HAVE_USLEEP" as_fn_append ac_func_c_list " wctob HAVE_WCTOB" # Auxiliary files required by this configure script. ac_aux_files="config.rpath ltmain.sh ar-lib config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}/bootstrapped/build-aux" # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir ;; esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS ;; esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use plain mkdir -p, # in the hope it doesn't have the bugs of ancient mkdir. MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in #( e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in #( e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='gnuastro' VERSION='0.22' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: <https://www.gnu.org/software/coreutils/>. If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_config_headers="$ac_config_headers config.h" # Library version, see the GNU Libtool manual ("Library interface versions" # section for the exact definition of each) for GAL_CURRENT=20 GAL_REVISION=0 GAL_AGE=0 GAL_LT_VERSION="${GAL_CURRENT}:${GAL_REVISION}:${GAL_AGE}" # Checks for programs. : ${CFLAGS=""} : ${CXXFLAGS=""} ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. # So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in #( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) # catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will # work properly (i.e., refer to 'conftest.exe'), while it won't with # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in #( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler is clang" >&5 printf %s "checking whether the compiler is clang... " >&6; } if test ${gl_cv_compiler_clang+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __clang__ barfbarf #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_compiler_clang=no else case e in #( e) gl_cv_compiler_clang=yes ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_compiler_clang" >&5 printf "%s\n" "$gl_cv_compiler_clang" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compiler option needed when checking for declarations" >&5 printf %s "checking for compiler option needed when checking for declarations... " >&6; } if test ${gl_cv_compiler_check_decl_option+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $gl_cv_compiler_clang = yes; then saved_ac_compile="$ac_compile" ac_compile="$ac_compile -Werror=implicit-function-declaration" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_compiler_check_decl_option='-Werror=implicit-function-declaration' else case e in #( e) gl_cv_compiler_check_decl_option=none ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_compile="$saved_ac_compile" else gl_cv_compiler_check_decl_option=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_compiler_check_decl_option" >&5 printf "%s\n" "$gl_cv_compiler_check_decl_option" >&6; } if test "x$gl_cv_compiler_check_decl_option" != xnone; then ac_compile_for_check_decl="$ac_compile $gl_cv_compiler_check_decl_option" else ac_compile_for_check_decl="$ac_compile" fi DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 printf "%s\n" "$CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 printf "%s\n" "$ac_ct_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes else case e in #( e) CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else case e in #( e) ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_prog_cxx_stdcxx=no if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX ;; esac fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx11" ;; esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_prog_cxx_stdcxx=cxx11 ;; esac fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx98_program _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX ;; esac fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx98" ;; esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 ac_prog_cxx_stdcxx=cxx98 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CXX_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes else case e in #( e) ac_cv_safe_to_define___extensions__=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include <wchar.h> mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h if test $ac_cv_header_minix_config_h = yes then : MINIX=yes printf "%s\n" "#define _MINIX 1" >>confdefs.h printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h else case e in #( e) MINIX= ;; esac fi if test $ac_cv_safe_to_define___extensions__ = yes then : printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h fi if test $ac_cv_should_define__xopen_source = yes then : printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h fi # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac case "$host_os" in openbsd*) printf "%s\n" "#define _ISOC11_SOURCE 1" >>confdefs.h ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 printf %s "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test ${ac_cv_prog_CPP+y} then : printf %s "(cached) " >&6 else case e in #( e) # Double quotes because $CC needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else case e in #( e) # Broken: fails on valid input. continue ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else case e in #( e) # Passes both tests. ac_preproc_ok=: break ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CPP=$CPP ;; esac fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 printf "%s\n" "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO" then : else case e in #( e) # Broken: fails on valid input. continue ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else case e in #( e) # Passes both tests. ac_preproc_ok=: break ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See 'config.log' for more details" "$LINENO" 5; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep -e" >&5 printf %s "checking for egrep -e... " >&6; } if test ${ac_cv_path_EGREP_TRADITIONAL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$EGREP_TRADITIONAL"; then ac_path_EGREP_TRADITIONAL_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue # Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. # Check for GNU $ac_path_EGREP_TRADITIONAL case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( *GNU*) ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" "$ac_path_EGREP_TRADITIONAL" -E 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_TRADITIONAL_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then : fi else ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL fi if test "$ac_cv_path_EGREP_TRADITIONAL" then : ac_cv_path_EGREP_TRADITIONAL="$ac_cv_path_EGREP_TRADITIONAL -E" else case e in #( e) if test -z "$EGREP_TRADITIONAL"; then ac_path_EGREP_TRADITIONAL_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP_TRADITIONAL="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP_TRADITIONAL" || continue # Check for GNU ac_path_EGREP_TRADITIONAL and select it if it is found. # Check for GNU $ac_path_EGREP_TRADITIONAL case `"$ac_path_EGREP_TRADITIONAL" --version 2>&1` in #( *GNU*) ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP_TRADITIONAL' >> "conftest.nl" "$ac_path_EGREP_TRADITIONAL" 'EGR(EP|AC)_TRADITIONAL$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_TRADITIONAL_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP_TRADITIONAL="$ac_path_EGREP_TRADITIONAL" ac_path_EGREP_TRADITIONAL_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_TRADITIONAL_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP_TRADITIONAL"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP_TRADITIONAL=$EGREP_TRADITIONAL fi ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP_TRADITIONAL" >&5 printf "%s\n" "$ac_cv_path_EGREP_TRADITIONAL" >&6; } EGREP_TRADITIONAL=$ac_cv_path_EGREP_TRADITIONAL { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5 printf %s "checking for Minix Amsterdam compiler... " >&6; } if test ${gl_cv_c_amsterdam_compiler+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ACK__ Amsterdam #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Amsterdam" >/dev/null 2>&1 then : gl_cv_c_amsterdam_compiler=yes else case e in #( e) gl_cv_c_amsterdam_compiler=no ;; esac fi rm -rf conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5 printf "%s\n" "$gl_cv_c_amsterdam_compiler" >&6; } if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AR=$ac_cv_prog_AR if test -n "$AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf "%s\n" "$AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 printf "%s\n" "$ac_ct_AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 printf %s "checking the archiver ($AR) interface... " >&6; } if test ${am_cv_ar_interface+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO" then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 printf "%s\n" "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AR=$ac_cv_prog_AR if test -n "$AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf "%s\n" "$AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 printf "%s\n" "$ac_ct_AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="ar" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi if test -z "$ARFLAGS"; then ARFLAGS='cr' fi if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 printf "%s\n" "$RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 printf "%s\n" "$ac_ct_RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi fi fi # IEEE behaviour is the default on all CPUs except Alpha and SH # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 # and the GCC 4.1.2 manual). case "$host_cpu" in alpha*) # On Alpha systems, a compiler option provides the behaviour. # See the ieee(3) manual page, also available at # <https://backdrift.org/man/tru64/man3/ieee.3.html> if test -n "$GCC"; then # GCC has the option -mieee. # For full IEEE compliance (rarely needed), use option -mieee-with-inexact. CPPFLAGS="$CPPFLAGS -mieee" else # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact. # For full IEEE compliance (rarely needed), use option -ieee_with_inexact. CPPFLAGS="$CPPFLAGS -ieee" fi ;; sh*) if test -n "$GCC"; then # GCC has the option -mieee. CPPFLAGS="$CPPFLAGS -mieee" fi ;; esac # Check whether --enable-largefile was given. if test ${enable_largefile+y} then : enableval=$enable_largefile; fi if test "$enable_largefile,$enable_year2038" != no,no then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable large file support" >&5 printf %s "checking for $CC option to enable large file support... " >&6; } if test ${ac_cv_sys_largefile_opts+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CC="$CC" ac_opt_found=no for ac_opt in "none needed" "-D_FILE_OFFSET_BITS=64" "-D_LARGE_FILES=1" "-n32"; do if test x"$ac_opt" != x"none needed" then : CC="$ac_save_CC $ac_opt" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #ifndef FTYPE # define FTYPE off_t #endif /* Check that FTYPE can represent 2**63 - 1 correctly. We can't simply define LARGE_FTYPE to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_FTYPE (((FTYPE) 1 << 31 << 31) - 1 + ((FTYPE) 1 << 31 << 31)) int FTYPE_is_large[(LARGE_FTYPE % 2147483629 == 721 && LARGE_FTYPE % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test x"$ac_opt" = x"none needed" then : # GNU/Linux s390x and alpha need _FILE_OFFSET_BITS=64 for wide ino_t. CC="$CC -DFTYPE=ino_t" if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) CC="$CC -D_FILE_OFFSET_BITS=64" if ac_fn_c_try_compile "$LINENO" then : ac_opt='-D_FILE_OFFSET_BITS=64' fi rm -f core conftest.err conftest.$ac_objext conftest.beam ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam fi ac_cv_sys_largefile_opts=$ac_opt ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test $ac_opt_found = no || break done CC="$ac_save_CC" if test $ac_opt_found != yes; then case $host_os in #( mingw* | windows*) : ac_cv_sys_largefile_opts="supported through gnulib" ac_opt_found=yes ;; #( *) : ;; esac fi test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_opts" >&5 printf "%s\n" "$ac_cv_sys_largefile_opts" >&6; } ac_have_largefile=yes case $ac_cv_sys_largefile_opts in #( "none needed") : ;; #( "supported through gnulib") : ;; #( "support not detected") : ac_have_largefile=no ;; #( "-D_FILE_OFFSET_BITS=64") : printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h ;; #( "-D_LARGE_FILES=1") : printf "%s\n" "#define _LARGE_FILES 1" >>confdefs.h ;; #( "-n32") : CC="$CC -n32" ;; #( *) : as_fn_error $? "internal error: bad value for \$ac_cv_sys_largefile_opts" "$LINENO" 5 ;; esac if test "$enable_year2038" != no then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option for timestamps after 2038" >&5 printf %s "checking for $CC option for timestamps after 2038... " >&6; } if test ${ac_cv_sys_year2038_opts+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CPPFLAGS="$CPPFLAGS" ac_opt_found=no for ac_opt in "none needed" "-D_TIME_BITS=64" "-D__MINGW_USE_VC2005_COMPAT" "-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"; do if test x"$ac_opt" != x"none needed" then : CPPFLAGS="$ac_save_CPPFLAGS $ac_opt" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> /* Check that time_t can represent 2**32 - 1 correctly. */ #define LARGE_TIME_T \\ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 && LARGE_TIME_T % 65537 == 0) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_year2038_opts="$ac_opt" ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test $ac_opt_found = no || break done CPPFLAGS="$ac_save_CPPFLAGS" test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_year2038_opts" >&5 printf "%s\n" "$ac_cv_sys_year2038_opts" >&6; } ac_have_year2038=yes case $ac_cv_sys_year2038_opts in #( "none needed") : ;; #( "support not detected") : ac_have_year2038=no ;; #( "-D_TIME_BITS=64") : printf "%s\n" "#define _TIME_BITS 64" >>confdefs.h ;; #( "-D__MINGW_USE_VC2005_COMPAT") : printf "%s\n" "#define __MINGW_USE_VC2005_COMPAT 1" >>confdefs.h ;; #( "-U_USE_32_BIT_TIME_T"*) : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "the 'time_t' type is currently forced to be 32-bit. It will stop working after mid-January 2038. Remove _USE_32BIT_TIME_T from the compiler flags. See 'config.log' for more details" "$LINENO" 5; } ;; #( *) : as_fn_error $? "internal error: bad value for \$ac_cv_sys_year2038_opts" "$LINENO" 5 ;; esac fi fi # Check whether --enable-threads was given. if test ${enable_threads+y} then : enableval=$enable_threads; gl_use_threads=$enableval else case e in #( e) if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else case "$host_os" in osf*) gl_use_threads=no ;; cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; mingw* | windows*) case "$gl_use_winpthreads_default" in yes) gl_use_threads=posix ;; no) gl_use_threads=windows ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac fi ;; esac fi if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = isoc \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then # For using <threads.h> or <pthread.h>: if test -z "$gl_anythreadlib_early_done"; then case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks <pthread.h>. cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in <errno.h>. case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac gl_anythreadlib_early_done=done fi fi # Pre-early section. # Code from module absolute-header: # Code from module accept: # Code from module accept-tests: # Code from module access: # Code from module access-tests: # Code from module alignasof: # Code from module alignasof-tests: # Code from module alloca: # Code from module alloca-opt: # Code from module alloca-opt-tests: # Code from module argp: # Code from module argp-tests: # Code from module arpa_inet: # Code from module arpa_inet-tests: # Code from module assert-h: # Code from module assert-h-tests: # Code from module assure: # Code from module at-internal: # Code from module attribute: # Code from module basename-lgpl: # Code from module binary-io: # Code from module binary-io-tests: # Code from module bind: # Code from module bind-tests: # Code from module btoc32: # Code from module btoc32-tests: # Code from module btowc: # Code from module btowc-tests: # Code from module builtin-expect: # Code from module c-ctype: # Code from module c-ctype-tests: # Code from module c-strcase: # Code from module c-strcase-tests: # Code from module c-strcasestr: # Code from module c-strcasestr-tests: # Code from module c32isalnum: # Code from module c32isalnum-tests: # Code from module c32isalpha: # Code from module c32isalpha-tests: # Code from module c32isblank: # Code from module c32isblank-tests: # Code from module c32iscntrl: # Code from module c32iscntrl-tests: # Code from module c32isdigit: # Code from module c32isdigit-tests: # Code from module c32isgraph: # Code from module c32isgraph-tests: # Code from module c32islower: # Code from module c32islower-tests: # Code from module c32isprint: # Code from module c32isprint-tests: # Code from module c32ispunct: # Code from module c32ispunct-tests: # Code from module c32isspace: # Code from module c32isspace-tests: # Code from module c32isupper: # Code from module c32isupper-tests: # Code from module c32isxdigit: # Code from module c32isxdigit-tests: # Code from module c32rtomb: # Code from module c32rtomb-tests: # Code from module c32tob: # Code from module c32tolower: # Code from module c32tolower-tests: # Code from module c32width: # Code from module c32width-tests: # Code from module c99: # Code from module calloc-gnu: # Code from module calloc-gnu-tests: # Code from module calloc-posix: # Code from module chdir: # Code from module chdir-long: # Code from module chdir-tests: # Code from module cloexec: # Code from module cloexec-tests: # Code from module close: # Code from module close-tests: # Code from module connect: # Code from module connect-tests: # Code from module creat: # Code from module creat-tests: # Code from module ctype: # Code from module ctype-tests: # Code from module dirent: # Code from module dirent-tests: # Code from module dirfd: # Code from module dirfd-tests: # Code from module double-slash-root: # Code from module dup: # Code from module dup-tests: # Code from module dup2: # Code from module dup2-tests: # Code from module environ: # Code from module environ-tests: # Code from module errno: # Code from module errno-tests: # Code from module error: # Code from module error-h: # Code from module error-tests: # Code from module euidaccess: # Code from module euidaccess-tests: # Code from module exitfail: # Code from module extensions: # Code from module extern-inline: # Code from module faccessat: # Code from module faccessat-tests: # Code from module fchdir: # Code from module fchdir-tests: # Code from module fcntl: # Code from module fcntl-h: # Code from module fcntl-h-tests: # Code from module fcntl-tests: # Code from module fd-hook: # Code from module fd-safer-flag: # Code from module fdopen: # Code from module fdopen-tests: # Code from module fgetc-tests: # Code from module filename: # Code from module filenamecat-lgpl: # Code from module flexmember: # Code from module float: # Code from module float-tests: # Code from module fpieee: # Code from module fpucw: # Code from module fputc-tests: # Code from module fread-tests: # Code from module free-posix: # Code from module free-posix-tests: # Code from module fstat: # Code from module fstat-tests: # Code from module fstatat: # Code from module fstatat-tests: # Code from module ftruncate: # Code from module ftruncate-tests: # Code from module func: # Code from module func-tests: # Code from module fwrite-tests: # Code from module gen-header: # Code from module gendocs: # Code from module getcwd-lgpl: # Code from module getcwd-lgpl-tests: # Code from module getdelim: # Code from module getdelim-tests: # Code from module getdtablesize: # Code from module getdtablesize-tests: # Code from module getgroups: # Code from module getgroups-tests: # Code from module getline: # Code from module getline-tests: # Code from module getopt-gnu: # Code from module getopt-gnu-tests: # Code from module getopt-posix: # Code from module getopt-posix-tests: # Code from module getpagesize: # Code from module getprogname: # Code from module getprogname-tests: # Code from module gettext-h: # Code from module gettimeofday: # Code from module gettimeofday-tests: # Code from module git-version-gen: # Code from module glibc-internal/dynarray: # Code from module glibc-internal/dynarray-tests: # Code from module gpl-3.0: # Code from module group-member: # Code from module hard-locale: # Code from module hard-locale-tests: # Code from module havelib: # Code from module ialloc: # Code from module idx: # Code from module ignore-value: # Code from module ignore-value-tests: # Code from module include_next: # Code from module inet_pton: # Code from module inet_pton-tests: # Code from module intprops: # Code from module intprops-tests: # Code from module inttypes: # Code from module inttypes-incomplete: # Code from module inttypes-tests: # Code from module ioctl: # Code from module ioctl-tests: # Code from module isblank: # Code from module isblank-tests: # Code from module isnand-nolibm: # Code from module isnand-nolibm-tests: # Code from module isnanf-nolibm: # Code from module isnanf-nolibm-tests: # Code from module isnanl-nolibm: # Code from module isnanl-nolibm-tests: # Code from module iswblank: # Code from module iswblank-tests: # Code from module iswctype: # Code from module iswctype-tests: # Code from module iswdigit: # Code from module iswdigit-tests: # Code from module iswpunct: # Code from module iswpunct-tests: # Code from module iswxdigit: # Code from module iswxdigit-tests: # Code from module langinfo: # Code from module langinfo-tests: # Code from module largefile: # Code from module largefile-tests: # Code from module libc-config: # Code from module limits-h: # Code from module limits-h-tests: # Code from module listen: # Code from module listen-tests: # Code from module localcharset: # Code from module localcharset-tests: # Code from module locale: # Code from module locale-tests: # Code from module localeconv: # Code from module localeconv-tests: # Code from module localename: # Code from module localename-tests: # Code from module lock: # Code from module lock-tests: # Code from module lstat: # Code from module lstat-tests: # Code from module malloc-gnu: # Code from module malloc-gnu-tests: # Code from module malloc-posix: # Code from module malloca: # Code from module malloca-tests: # Code from module math: # Code from module math-tests: # Code from module mbchar: # Code from module mbrtoc32: # Code from module mbrtoc32-tests: # Code from module mbrtowc: # Code from module mbrtowc-tests: # Code from module mbschr: # Code from module mbschr-tests: # Code from module mbsinit: # Code from module mbsinit-tests: # Code from module mbspbrk: # Code from module mbspbrk-tests: # Code from module mbsspn: # Code from module mbsspn-tests: # Code from module mbstok_r: # Code from module mbszero: # Code from module mbtowc: # Code from module mbuiterf: # Code from module memchr: # Code from module memchr-tests: # Code from module memmove: # Code from module mempcpy: # Code from module memrchr: # Code from module memrchr-tests: # Code from module minmax: # Code from module mktime: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module multiarch: # Code from module nan: # Code from module nanosleep: # Code from module nanosleep-tests: # Code from module netinet_in: # Code from module netinet_in-tests: # Code from module nl_langinfo: # Code from module nl_langinfo-tests: # Code from module nocrash: # Code from module nproc: # Code from module open: # Code from module open-tests: # Code from module openat: # Code from module openat-die: # Code from module openat-h: # Code from module openat-tests: # Code from module pathmax: # Code from module pathmax-tests: # Code from module perror: # Code from module perror-tests: # Code from module pipe-posix: # Code from module pipe-posix-tests: # Code from module pselect: # Code from module pselect-tests: # Code from module pthread-h: if test -z "$gl_anythreadlib_early_done"; then case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks <pthread.h>. cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in <errno.h>. case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac gl_anythreadlib_early_done=done fi # Code from module pthread-h-tests: # Code from module pthread-thread: # Code from module pthread-thread-tests: # Code from module pthread_sigmask: # Code from module pthread_sigmask-tests: # Code from module putenv: # Code from module raise: # Code from module raise-tests: # Code from module random: # Code from module random-tests: # Code from module random_r: # Code from module random_r-tests: # Code from module rawmemchr: # Code from module rawmemchr-tests: # Code from module realloc-gnu: # Code from module realloc-gnu-tests: # Code from module realloc-posix: # Code from module reallocarray: # Code from module reallocarray-tests: # Code from module regex: # Code from module regex-tests: # Code from module root-uid: # Code from module same-inode: # Code from module save-cwd: # Code from module sched: # Code from module sched-tests: # Code from module sched_yield: # Code from module secure_getenv: # Code from module select: # Code from module select-tests: # Code from module setenv: # Code from module setenv-tests: # Code from module setlocale: # Code from module setlocale-null: # Code from module setlocale-null-tests: # Code from module setlocale-tests: # Code from module setsockopt: # Code from module setsockopt-tests: # Code from module signal-h: # Code from module signal-h-tests: # Code from module signbit: # Code from module signbit-tests: # Code from module signed-nan: # Code from module signed-snan: # Code from module sigprocmask: # Code from module sigprocmask-tests: # Code from module size_max: # Code from module sleep: # Code from module sleep-tests: # Code from module snan: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module socket: # Code from module socketlib: # Code from module sockets: # Code from module sockets-tests: # Code from module socklen: # Code from module ssize_t: # Code from module stat: # Code from module stat-tests: # Code from module stat-time: # Code from module stat-time-tests: # Code from module std-gnu11: # Code from module stdbool: # Code from module stdbool-tests: # Code from module stdckdint: # Code from module stdckdint-tests: # Code from module stddef: # Code from module stddef-tests: # Code from module stdint: # Code from module stdint-tests: # Code from module stdio: printf "%s\n" "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h # Code from module stdio-tests: # Code from module stdlib: # Code from module stdlib-tests: # Code from module strcase: # Code from module strchrnul: # Code from module strchrnul-tests: # Code from module strdup-posix: # Code from module streq: # Code from module strerror: # Code from module strerror-override: # Code from module strerror-tests: # Code from module strerror_r-posix: # Code from module strerror_r-posix-tests: # Code from module string: # Code from module string-tests: # Code from module strings: # Code from module strings-tests: # Code from module strndup: # Code from module strnlen: # Code from module strnlen-tests: # Code from module strnlen1: # Code from module strptime: # Code from module strtod: # Code from module strtod-tests: # Code from module strtok_r: # Code from module symlink: # Code from module symlink-tests: # Code from module sys_ioctl: # Code from module sys_ioctl-tests: # Code from module sys_select: # Code from module sys_select-tests: # Code from module sys_socket: # Code from module sys_socket-tests: # Code from module sys_stat: # Code from module sys_stat-tests: # Code from module sys_time: # Code from module sys_time-tests: # Code from module sys_types: # Code from module sys_types-tests: # Code from module sys_uio: # Code from module sys_uio-tests: # Code from module sys_wait: # Code from module sys_wait-tests: # Code from module sysexits: # Code from module sysexits-tests: # Code from module system-posix: # Code from module test-framework-sh: # Code from module test-framework-sh-tests: # Code from module thread: # Code from module thread-optim: # Code from module thread-tests: # Code from module threadlib: # Code from module time: # Code from module time-h: # Code from module time-h-tests: # Code from module time-tests: # Code from module time_r: # Code from module uchar: # Code from module uchar-tests: # Code from module unicase/base: # Code from module unicase/tolower: # Code from module unicase/tolower-tests: # Code from module unictype/base: # Code from module unictype/ctype-alnum: # Code from module unictype/ctype-alnum-tests: # Code from module unictype/ctype-alpha: # Code from module unictype/ctype-alpha-tests: # Code from module unictype/ctype-blank: # Code from module unictype/ctype-blank-tests: # Code from module unictype/ctype-cntrl: # Code from module unictype/ctype-cntrl-tests: # Code from module unictype/ctype-digit: # Code from module unictype/ctype-digit-tests: # Code from module unictype/ctype-graph: # Code from module unictype/ctype-graph-tests: # Code from module unictype/ctype-lower: # Code from module unictype/ctype-lower-tests: # Code from module unictype/ctype-print: # Code from module unictype/ctype-print-tests: # Code from module unictype/ctype-punct: # Code from module unictype/ctype-punct-tests: # Code from module unictype/ctype-space: # Code from module unictype/ctype-space-tests: # Code from module unictype/ctype-upper: # Code from module unictype/ctype-upper-tests: # Code from module unictype/ctype-xdigit: # Code from module unictype/ctype-xdigit-tests: # Code from module uninorm/base: # Code from module unistd: # Code from module unistd-safer: # Code from module unistd-safer-tests: # Code from module unistd-tests: # Code from module unitypes: # Code from module uniwidth/base: # Code from module uniwidth/width: # Code from module uniwidth/width-tests: # Code from module unsetenv: # Code from module unsetenv-tests: # Code from module usleep: # Code from module usleep-tests: # Code from module vararrays: # Code from module vasnprintf: # Code from module vasnprintf-tests: # Code from module verify: # Code from module verify-tests: # Code from module vsnprintf: # Code from module vsnprintf-tests: # Code from module wchar: # Code from module wchar-tests: # Code from module wcrtomb: # Code from module wcrtomb-tests: # Code from module wctob: # Code from module wctomb: # Code from module wctype: # Code from module wctype-h: # Code from module wctype-h-tests: # Code from module wctype-tests: # Code from module wcwidth: # Code from module wcwidth-tests: # Code from module windows-mutex: # Code from module windows-once: # Code from module windows-recmutex: # Code from module windows-rwlock: # Code from module windows-thread: # Code from module windows-tls: # Code from module xalloc: # Code from module xalloc-die: # Code from module xalloc-die-tests: # Code from module xalloc-oversized: # Code from module xsize: # Code from module yield: if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AR=$ac_cv_prog_AR if test -n "$AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf "%s\n" "$AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 printf "%s\n" "$ac_ct_AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 printf %s "checking the archiver ($AR) interface... " >&6; } if test ${am_cv_ar_interface+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO" then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 printf "%s\n" "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac case `pwd` in *\ * | *\ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.7.4-1ec8f-dirty' macro_revision='2.4.7.4' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 printf "%s\n" "printf" >&6; } ;; print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 printf "%s\n" "print -r" >&6; } ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 printf "%s\n" "cat" >&6; } ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in #( *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else case e in #( e) if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in #( *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" EGREP_TRADITIONAL=$EGREP ac_cv_path_EGREP_TRADITIONAL=$EGREP { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 else case e in #( e) if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in fgrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in #( *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else case e in #( e) with_gnu_ld=no ;; esac fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test no != "$with_gnu_ld" && break ;; *) test yes != "$with_gnu_ld" && break ;; esac fi done IFS=$lt_save_ifs else lt_cv_path_LD=$LD # Let the user override the test with a path. fi ;; esac fi LD=$lt_cv_path_LD if test -n "$LD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else case e in #( e) # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test ${lt_cv_path_NM+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 printf "%s\n" "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DUMPBIN+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 printf "%s\n" "$DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DUMPBIN+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 printf %s "checking the name lister ($NM) interface... " >&6; } if test ${lt_cv_nm_interface+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 printf "%s\n" "$lt_cv_nm_interface" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 printf "%s\n" "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 printf %s "checking the maximum length of command line arguments... " >&6; } if test ${lt_cv_sys_max_cmd_len+y} then : printf %s "(cached) " >&6 else case e in #( e) i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 printf %s "checking how to convert $build file names to $host format... " >&6; } if test ${lt_cv_to_host_file_cmd+y} then : printf %s "(cached) " >&6 else case e in #( e) case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 printf %s "checking how to convert $build file names to toolchain format... " >&6; } if test ${lt_cv_to_tool_file_cmd+y} then : printf %s "(cached) " >&6 else case e in #( e) #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 printf %s "checking for $LD option to reload object files... " >&6; } if test ${lt_cv_ld_reload_flag+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_ld_reload_flag='-r' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args. set dummy ${ac_tool_prefix}file; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FILECMD+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$FILECMD"; then ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FILECMD="${ac_tool_prefix}file" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FILECMD=$ac_cv_prog_FILECMD if test -n "$FILECMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5 printf "%s\n" "$FILECMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_FILECMD"; then ac_ct_FILECMD=$FILECMD # Extract the first word of "file", so it can be a program name with args. set dummy file; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FILECMD+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_FILECMD"; then ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FILECMD="file" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD if test -n "$ac_ct_FILECMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5 printf "%s\n" "$ac_ct_FILECMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_FILECMD" = x; then FILECMD=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FILECMD=$ac_ct_FILECMD fi else FILECMD="$ac_cv_prog_FILECMD" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 printf "%s\n" "$OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 printf %s "checking how to recognize dependent libraries... " >&6; } if test ${lt_cv_deplibs_check_method+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 printf "%s\n" "$DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 printf %s "checking how to associate runtime and link libraries... " >&6; } if test ${lt_cv_sharedlib_from_linklib_cmd+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AR=$ac_cv_prog_AR if test -n "$AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf "%s\n" "$AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 printf "%s\n" "$ac_ct_AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because thats what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 printf %s "checking for archiver @FILE support... " >&6; } if test ${lt_cv_ar_at_file+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 printf "%s\n" "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 printf "%s\n" "$RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 printf "%s\n" "$ac_ct_RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 printf %s "checking command to parse $NM output from $compiler object... " >&6; } if test ${lt_cv_sys_global_symbol_pipe+y} then : printf %s "(cached) " >&6 else case e in #( e) # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ;; esac fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 printf "%s\n" "failed" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 printf "%s\n" "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test ${with_sysroot+y} then : withval=$with_sysroot; else case e in #( e) with_sysroot=no ;; esac fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 printf "%s\n" "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 printf "%s\n" "${lt_sysroot:-no}" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 printf %s "checking for a working dd... " >&6; } if test ${ac_cv_path_lt_DD+y} then : printf %s "(cached) " >&6 else case e in #( e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in dd do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 printf "%s\n" "$ac_cv_path_lt_DD" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 printf %s "checking how to truncate binary pipes... " >&6; } if test ${lt_cv_truncate_bin+y} then : printf %s "(cached) " >&6 else case e in #( e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 printf "%s\n" "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test ${enable_libtool_lock+y} then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 printf %s "checking whether the C compiler needs -belf... " >&6; } if test ${lt_cv_cc_needs_belf+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_cc_needs_belf=yes else case e in #( e) lt_cv_cc_needs_belf=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 printf "%s\n" "$MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if test ${lt_cv_path_mainfest_tool+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DSYMUTIL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 printf "%s\n" "$DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NMEDIT+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 printf "%s\n" "$NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_NMEDIT+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 printf "%s\n" "$ac_ct_NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LIPO+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 printf "%s\n" "$LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_LIPO+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 printf "%s\n" "$ac_ct_LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 printf "%s\n" "$OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 printf "%s\n" "$ac_ct_OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL64+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 printf "%s\n" "$OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL64+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 printf "%s\n" "$ac_ct_OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 printf %s "checking for -single_module linker flag... " >&6; } if test ${lt_cv_apple_cc_single_mod+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_ld_exported_symbols_list=yes else case e in #( e) lt_cv_ld_exported_symbols_list=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 printf %s "checking for -force_load linker flag... " >&6; } if test ${lt_cv_ld_force_load+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5 $AR $AR_FLAGS libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 printf "%s\n" "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) case $MACOSX_DEPLOYMENT_TARGET,$host in 10.[012],*|,*powerpc*-darwin[5-8]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes then : printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi func_stripname_cnf () { case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;; esac } # func_stripname_cnf # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test ${enable_shared+y} then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else case e in #( e) enable_shared=yes ;; esac fi # Check whether --enable-static was given. if test ${enable_static+y} then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else case e in #( e) enable_static=yes ;; esac fi # Check whether --with-pic was given. if test ${with_pic+y} then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else case e in #( e) pic_mode=default ;; esac fi # Check whether --enable-fast-install was given. if test ${enable_fast_install+y} then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else case e in #( e) enable_fast_install=yes ;; esac fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 printf %s "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test ${with_aix_soname+y} then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else case e in #( e) if test ${lt_cv_with_aix_soname+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_with_aix_soname=aix ;; esac fi with_aix_soname=$lt_cv_with_aix_soname ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 printf %s "checking for objdir... " >&6; } if test ${lt_cv_objdir+y} then : printf %s "(cached) " >&6 else case e in #( e) rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC and # ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 printf %s "checking for ${ac_tool_prefix}file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else case e in #( e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 printf %s "checking for file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else case e in #( e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test ${lt_cv_prog_compiler_rtti_exceptions+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic=$lt_prog_compiler_pic ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test ${lt_cv_prog_compiler_pic_works+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi ;; esac fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi ;; esac fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 printf %s "checking if $CC understands -b... " >&6; } if test ${lt_cv_prog_compiler__b+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 else case e in #( e) save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes else case e in #( e) lt_cv_irix_exported_symbol=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 printf "%s\n" "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc+y} then : printf %s "(cached) " >&6 else case e in #( e) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir ;; esac fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 printf "%s\n" "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dlopen (void); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else case e in #( e) ac_cv_lib_dl_dlopen=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else case e in #( e) lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; esac fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes then : lt_cv_dlopen=shl_load else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 printf %s "checking for shl_load in -ldld... " >&6; } if test ${ac_cv_lib_dld_shl_load+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char shl_load (void); int main (void) { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_shl_load=yes else case e in #( e) ac_cv_lib_dld_shl_load=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else case e in #( e) ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes then : lt_cv_dlopen=dlopen else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dlopen (void); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else case e in #( e) ac_cv_lib_dl_dlopen=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 printf %s "checking for dlopen in -lsvld... " >&6; } if test ${ac_cv_lib_svld_dlopen+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dlopen (void); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_svld_dlopen=yes else case e in #( e) ac_cv_lib_svld_dlopen=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 printf %s "checking for dld_link in -ldld... " >&6; } if test ${ac_cv_lib_dld_dld_link+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dld_link (void); int main (void) { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_dld_link=yes else case e in #( e) ac_cv_lib_dld_dld_link=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi ;; esac fi ;; esac fi ;; esac fi ;; esac fi ;; esac fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 printf %s "checking whether a program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self+y} then : printf %s "(cached) " >&6 else case e in #( e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 printf "%s\n" "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 printf %s "checking whether a statically linked program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self_static+y} then : printf %s "(cached) " >&6 else case e in #( e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 printf %s "checking whether stripping libraries is possible... " >&6; } if test -z "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi fi # Report what library types will actually be built { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 printf %s "checking if libtool supports shared libraries... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 printf "%s\n" "$can_build_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 printf "%s\n" "$enable_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 printf "%s\n" "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC=$lt_save_CC if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 printf %s "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if test ${ac_cv_prog_CXXCPP+y} then : printf %s "(cached) " >&6 else case e in #( e) # Double quotes because $CXX needs to be expanded for CXXCPP in "$CXX -E" cpp /lib/cpp do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else case e in #( e) # Broken: fails on valid input. continue ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else case e in #( e) # Passes both tests. ac_preproc_ok=: break ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : break fi done ac_cv_prog_CXXCPP=$CXXCPP ;; esac fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 printf "%s\n" "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : else case e in #( e) # Broken: fails on valid input. continue ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_cxx_try_cpp "$LINENO" then : # Broken: success on invalid input. continue else case e in #( e) # Passes both tests. ac_preproc_ok=: break ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of 'break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok then : else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See 'config.log' for more details" "$LINENO" 5; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC func_cc_basename $compiler cc_basename=$func_cc_basename_result if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else case e in #( e) with_gnu_ld=no ;; esac fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test no != "$with_gnu_ld" && break ;; *) test yes != "$with_gnu_ld" && break ;; esac fi done IFS=$lt_save_ifs else lt_cv_path_LD=$LD # Let the user override the test with a path. fi ;; esac fi LD=$lt_cv_path_LD if test -n "$LD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else case e in #( e) # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec_CXX='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. no_undefined_flag_CXX='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath__CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi ;; esac fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath__CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=/usr/lib:/lib fi ;; esac fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' $wl-bernotok' allow_undefined_flag_CXX=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl* | ,icl* | no,icl*) # Native MSVC or ICC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='$wl--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds_CXX='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds_CXX="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" if test yes != "$lt_cv_apple_cc_single_mod"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi else ld_shlibs_CXX=no fi ;; os2*) hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_minus_L_CXX=yes allow_undefined_flag_CXX=unsupported shrext_cmds=.dll archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes_CXX=yes file_list_spec_CXX='@' ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='$wl-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' export_dynamic_flag_spec_CXX='$wl--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='$wl-E' whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then no_undefined_flag_CXX=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='$wl-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='$wl-z,text' allow_undefined_flag_CXX='$wl-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='$wl-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 printf "%s\n" "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no GCC_CXX=$GXX LD_CXX=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX=$prev$p else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX=$prev$p else postdeps_CXX="${postdeps_CXX} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$predep_objects_CXX"; then predep_objects_CXX=$p else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX=$p else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi lt_prog_compiler_pic_CXX='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static_CXX='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if test ${lt_cv_prog_compiler_pic_works_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then : else lt_prog_compiler_static_CXX= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl* | icl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 printf "%s\n" "$ld_shlibs_CXX" >&6; } test no = "$ld_shlibs_CXX" && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec_CXX='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO" then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir ;; esac fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test yes = "$hardcode_automatic_CXX"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct_CXX" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" && test no != "$hardcode_minus_L_CXX"; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 printf "%s\n" "$hardcode_action_CXX" >&6; } if test relink = "$hardcode_action_CXX" || test yes = "$inherit_rpath_CXX"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: # Check the number of jobs. Depending on the operative system (GNU/Linux or # macOS), the way of getting the number of cores is different. If the # number of cores can not be obtained, set it to 8. # Extract the first word of "nproc", so it can be a program name with args. set dummy nproc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_has_nproc+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$has_nproc"; then ac_cv_prog_has_nproc="$has_nproc" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_has_nproc="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_nproc" && ac_cv_prog_has_nproc="no" fi ;; esac fi has_nproc=$ac_cv_prog_has_nproc if test -n "$has_nproc"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_nproc" >&5 printf "%s\n" "$has_nproc" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test $has_nproc = yes then : jobs=$(nproc --all) else case e in #( e) # Extract the first word of "sysctl", so it can be a program name with args. set dummy sysctl; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_has_sysctl+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$has_sysctl"; then ac_cv_prog_has_sysctl="$has_sysctl" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_has_sysctl="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_sysctl" && ac_cv_prog_has_sysctl="no" fi ;; esac fi has_sysctl=$ac_cv_prog_has_sysctl if test -n "$has_sysctl"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_sysctl" >&5 printf "%s\n" "$has_sysctl" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test $has_sysctl = yes then : jobs=$(sysctl -a | awk '/^hw\.ncpu/{print $2}') else case e in #( e) jobs=8 ;; esac fi ;; esac fi SUGGESTEDJOBS=$jobs # This macro will let the libraries know that we are now in the Gnuastro # build system, not on the user's system. While we are building Gnuastro, # we have the important installation information in 'config.h'. But in the # user's own programs, this information is defined in # 'gnuastro/config.h'. With this macro, the installed headers can decide # if the latter should be included or not. Note that 'gnuastro/config.h' # is only built at installation time and doesn't exist when building # Gnuastro. Therefore, this macro must not be defined in a user's program. printf "%s\n" "#define IN_GNUASTRO_BUILD 1" >>confdefs.h # See if 'make check' should be made with Valgrind. This should be done # before checking the compilation flags because it can re-write # 'enable-debug'). # Check whether --enable-check-with-valgrind was given. if test ${enable_check_with_valgrind+y} then : enableval=$enable_check_with_valgrind; if test "x$enable_check_with_valgrind" != xno then : enable_check_with_valgrind=yes fi else case e in #( e) enable_check_with_valgrind=no ;; esac fi if test "x$enable_check_with_valgrind" = "xyes" then : enable_debug=yes; # Extract the first word of "valgrind", so it can be a program name with args. set dummy valgrind; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_has_valgrind+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$has_valgrind"; then ac_cv_prog_has_valgrind="$has_valgrind" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_has_valgrind="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_valgrind" && ac_cv_prog_has_valgrind="no" fi ;; esac fi has_valgrind=$ac_cv_prog_has_valgrind if test -n "$has_valgrind"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_valgrind" >&5 printf "%s\n" "$has_valgrind" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$has_valgrind" = "xno" then : as_fn_error $? "Valgrind not found. Please install it or don't use '--enable-check-with-valgrind'" "$LINENO" 5 fi fi if test "x$enable_check_with_valgrind" = "xyes"; then COND_CHECK_WITH_VALGRIND_TRUE= COND_CHECK_WITH_VALGRIND_FALSE='#' else COND_CHECK_WITH_VALGRIND_TRUE='#' COND_CHECK_WITH_VALGRIND_FALSE= fi # Set the compilation flags. # Check whether --enable-debug was given. if test ${enable_debug+y} then : enableval=$enable_debug; if test "x$enable_debug" != xno then : enable_debug=yes fi else case e in #( e) enable_debug=no ;; esac fi if test "x$enable_debug" = "xyes" then : cflags_add="-g -O0"; enable_shared=no else case e in #( e) cflags_add="-O3" ;; esac fi CFLAGS="-Wall $cflags_add $CFLAGS" CXXFLAGS="-Wall $cflags_add $CXXFLAGS" # See if the C++ compiler was present. 'CXX' has already been set by # 'AC_PROG_CXX' (above). According to the Autoconf manual: "if none of the # [AC_PROG_CXX] checks succeed, then as a last resort [it will] set 'CXX' # to 'g++'". Therefore, we can't rely on it to see if the compiler # executable is actually usable. Therefore tests that rely on it will # fail. Unfortunately some OSs (like Fedora), don't install 'g++' with # 'gcc', so it may not always be present. To fix this, here we are just # using 'AC_CHECK_PROG' to see if the 'CXX' executable is reachable in the # search path and if it isn't, we'll disable the C++ check during 'make # check' with an Automake conditional. # Extract the first word of "$CXX", so it can be a program name with args. set dummy $CXX; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_has_cxx+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$has_cxx"; then ac_cv_prog_has_cxx="$has_cxx" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_has_cxx=""yes"" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_cxx" && ac_cv_prog_has_cxx=""no"" fi ;; esac fi has_cxx=$ac_cv_prog_has_cxx if test -n "$has_cxx"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_cxx" >&5 printf "%s\n" "$has_cxx" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$has_cxx" = "xyes"; then COND_HASCXX_TRUE= COND_HASCXX_FALSE='#' else COND_HASCXX_TRUE='#' COND_HASCXX_FALSE= fi # Check for pthreads and add the appropriate compilation flags. AX_PTHREAD # comes from the GNU Autoconf Archive's ax_pthread.m4, see there for the # documentation. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on Tru64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then ax_pthread_save_CC="$CC" ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" if test "x$PTHREAD_CC" != "x" then : CC="$PTHREAD_CC" fi if test "x$PTHREAD_CXX" != "x" then : CXX="$PTHREAD_CXX" fi CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5 printf %s "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_join (void); int main (void) { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 printf "%s\n" "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = "xno"; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi CC="$ax_pthread_save_CC" CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items with a "," contain both # C compiler flags (before ",") and linker flags (after ","). Other items # starting with a "-" are C compiler flags, and remaining items are # library names, except for "none" which indicates that we try without # any flags at all, and "pthread-config" which is a program returning # the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 # (Note: HP C rejects this with "bad form for `-t' option") # -pthreads: Solaris/gcc (Note: HP C also rejects) # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads and # -D_REENTRANT too), HP C (must be checked before -lpthread, which # is present but should not be used directly; and before -mthreads, # because the compiler interprets this as "-mt" + "-hreads") # -mthreads: Mingw32/gcc, Lynx/gcc # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case $host_os in freebsd*) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) ax_pthread_flags="-kthread lthread $ax_pthread_flags" ;; hpux*) # From the cc(1) man page: "[-mt] Sets various -D flags to enable # multi-threading and also sets -lpthread." ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" ;; openedition*) # IBM z/OS requires a feature-test macro to be defined in order to # enable POSIX threads at all, so give the user a hint if this is # not set. (We don't define these ourselves, as they can affect # other portions of the system API in unpredictable ways.) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) AX_PTHREAD_ZOS_MISSING # endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1 then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5 printf "%s\n" "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;} fi rm -rf conftest* ;; solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (N.B.: The stubs are missing # pthread_cleanup_push, or rather a function called by this macro, # so we could check for that, but who knows whether they'll stub # that too in a future libc.) So we'll check first for the # standard Solaris way of linking pthreads (-mt -lpthread). ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags" ;; esac # Are we compiling with Clang? { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5 printf %s "checking whether $CC is Clang... " >&6; } if test ${ax_cv_PTHREAD_CLANG+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Note: Clang 2.7 lacks __clang_[a-z]+__ */ # if defined(__clang__) && defined(__llvm__) AX_PTHREAD_CC_IS_CLANG # endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1 then : ax_cv_PTHREAD_CLANG=yes fi rm -rf conftest* fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5 printf "%s\n" "$ax_cv_PTHREAD_CLANG" >&6; } ax_pthread_clang="$ax_cv_PTHREAD_CLANG" # GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) # Note that for GCC and Clang -pthread generally implies -lpthread, # except when -nostdlib is passed. # This is problematic using libtool to build C++ shared libraries with pthread: # [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460 # [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333 # [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555 # To solve this, first try -pthread together with -lpthread for GCC if test "x$GCC" = "xyes" then : ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags" fi # Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first if test "x$ax_pthread_clang" = "xyes" then : ax_pthread_flags="-pthread,-lpthread -pthread" fi # The presence of a feature test macro requesting re-entrant function # definitions is, on some systems, a strong hint that pthreads support is # correctly enabled case $host_os in darwin* | hpux* | linux* | osf* | solaris*) ax_pthread_check_macro="_REENTRANT" ;; aix*) ax_pthread_check_macro="_THREAD_SAFE" ;; *) ax_pthread_check_macro="--" ;; esac if test "x$ax_pthread_check_macro" = "x--" then : ax_pthread_check_cond=0 else case e in #( e) ax_pthread_check_cond="!defined($ax_pthread_check_macro)" ;; esac fi if test "x$ax_pthread_ok" = "xno"; then for ax_pthread_try_flag in $ax_pthread_flags; do case $ax_pthread_try_flag in none) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 printf %s "checking whether pthreads work without any flags... " >&6; } ;; *,*) PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"` PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"" >&5 printf %s "checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"... " >&6; } ;; -*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5 printf %s "checking whether pthreads work with $ax_pthread_try_flag... " >&6; } PTHREAD_CFLAGS="$ax_pthread_try_flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ax_pthread_config+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ax_pthread_config="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" fi ;; esac fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 printf "%s\n" "$ax_pthread_config" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ax_pthread_config" = "xno" then : continue fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5 printf %s "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; } PTHREAD_LIBS="-l$ax_pthread_try_flag" ;; esac ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> # if $ax_pthread_check_cond # error "$ax_pthread_check_macro must be defined" # endif static void *some_global = NULL; static void routine(void *a) { /* To avoid any unused-parameter or unused-but-set-parameter warning. */ some_global = a; } static void *start_routine(void *a) { return a; } int main (void) { pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 printf "%s\n" "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = "xyes" then : break fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Clang needs special handling, because older versions handle the -pthread # option in a rather... idiosyncratic way if test "x$ax_pthread_clang" = "xyes"; then # Clang takes -pthread; it has never supported any other flag # (Note 1: This will need to be revisited if a system that Clang # supports has POSIX threads in a separate library. This tends not # to be the way of modern systems, but it's conceivable.) # (Note 2: On some systems, notably Darwin, -pthread is not needed # to get POSIX threads support; the API is always present and # active. We could reasonably leave PTHREAD_CFLAGS empty. But # -pthread does define _REENTRANT, and while the Darwin headers # ignore this macro, third-party headers might not.) # However, older versions of Clang make a point of warning the user # that, in an invocation where only linking and no compilation is # taking place, the -pthread option has no effect ("argument unused # during compilation"). They expect -pthread to be passed in only # when source code is being compiled. # # Problem is, this is at odds with the way Automake and most other # C build frameworks function, which is that the same flags used in # compilation (CFLAGS) are also used in linking. Many systems # supported by AX_PTHREAD require exactly this for POSIX threads # support, and in fact it is often not straightforward to specify a # flag that is used only in the compilation phase and not in # linking. Such a scenario is extremely rare in practice. # # Even though use of the -pthread flag in linking would only print # a warning, this can be a nuisance for well-run software projects # that build with -Werror. So if the active version of Clang has # this misfeature, we search for an option to squash it. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5 printf %s "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; } if test ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one # (.c -> exe), because the warning occurs only in the second # step ax_pthread_save_ac_link="$ac_link" ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' ax_pthread_link_step=`printf "%s\n" "$ac_link" | sed "$ax_pthread_sed"` ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do if test "x$ax_pthread_try" = "xunknown" then : break fi CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" ac_link="$ax_pthread_save_ac_link" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void){return 0;} _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_link="$ax_pthread_2step_ac_link" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void){return 0;} _ACEOF if ac_fn_c_try_link "$LINENO" then : break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_link="$ax_pthread_save_ac_link" CFLAGS="$ax_pthread_save_CFLAGS" if test "x$ax_pthread_try" = "x" then : ax_pthread_try=no fi ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5 printf "%s\n" "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; } case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in no | unknown) ;; *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; esac fi # $ax_pthread_clang = yes # Various other checks: if test "x$ax_pthread_ok" = "xyes"; then ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 printf %s "checking for joinable pthread attribute... " >&6; } if test ${ax_cv_PTHREAD_JOINABLE_ATTR+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> int main (void) { int attr = $ax_pthread_attr; return attr /* ; */ ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5 printf "%s\n" "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; } if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ test "x$ax_pthread_joinable_attr_defined" != "xyes" then : printf "%s\n" "#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR" >>confdefs.h ax_pthread_joinable_attr_defined=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5 printf %s "checking whether more special flags are required for pthreads... " >&6; } if test ${ax_cv_PTHREAD_SPECIAL_FLAGS+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_cv_PTHREAD_SPECIAL_FLAGS=no case $host_os in solaris*) ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5 printf "%s\n" "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; } if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ test "x$ax_pthread_special_flags_added" != "xyes" then : PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" ax_pthread_special_flags_added=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5 printf %s "checking for PTHREAD_PRIO_INHERIT... " >&6; } if test ${ax_cv_PTHREAD_PRIO_INHERIT+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> int main (void) { int i = PTHREAD_PRIO_INHERIT; return i; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ax_cv_PTHREAD_PRIO_INHERIT=yes else case e in #( e) ax_cv_PTHREAD_PRIO_INHERIT=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5 printf "%s\n" "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; } if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ test "x$ax_pthread_prio_inherit_defined" != "xyes" then : printf "%s\n" "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h ax_pthread_prio_inherit_defined=yes fi CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" # More AIX lossage: compile with *_r variant if test "x$GCC" != "xyes"; then case $host_os in aix*) case "x/$CC" in #( x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) : #handle absolute path differently from PATH based program lookup case "x$CC" in #( x/*) : if as_fn_executable_p ${CC}_r then : PTHREAD_CC="${CC}_r" fi if test "x${CXX}" != "x" then : if as_fn_executable_p ${CXX}_r then : PTHREAD_CXX="${CXX}_r" fi fi ;; #( *) : for ac_prog in ${CC}_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PTHREAD_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 printf "%s\n" "$PTHREAD_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" if test "x${CXX}" != "x" then : for ac_prog in ${CXX}_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PTHREAD_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$PTHREAD_CXX"; then ac_cv_prog_PTHREAD_CXX="$PTHREAD_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PTHREAD_CXX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi PTHREAD_CXX=$ac_cv_prog_PTHREAD_CXX if test -n "$PTHREAD_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CXX" >&5 printf "%s\n" "$PTHREAD_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$PTHREAD_CXX" && break done test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" fi ;; esac ;; #( *) : ;; esac ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test "x$ax_pthread_ok" = "xyes"; then printf "%s\n" "#define HAVE_PTHREAD 1" >>confdefs.h : else ax_pthread_ok=no as_fn_error $? "GNU Astronomy Utilities Needs POSIX Threads (pthread)" "$LINENO" 5 fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CC="$PTHREAD_CC" # See if the C++ compiler understands '-Qunused-arguments'. AX_PTHREAD adds # puts this option in 'PTHREAD_CFLAGS' when the C compiler knows this # option. We then pass it to CFLAGS and CXXFLAGS above. But as reported in # bug #52490, it can happen that sometimes, the C++ compiler doesn't # recognize it. So we need to do a separate check for C++. cxxflags_tmp= for flg in $CXXFLAGS do if test "$flg" = \-Qunused-arguments then : ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C++ compiler accepts -Qunused-arguments" >&5 printf %s "checking whether C++ compiler accepts -Qunused-arguments... " >&6; } if test ${ax_cv_check_cxxflags___Qunused_arguments+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_check_save_flags=$CXXFLAGS CXXFLAGS="$CXXFLAGS -Qunused-arguments" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ax_cv_check_cxxflags___Qunused_arguments=yes else case e in #( e) ax_cv_check_cxxflags___Qunused_arguments=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CXXFLAGS=$ax_check_save_flags ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cxxflags___Qunused_arguments" >&5 printf "%s\n" "$ax_cv_check_cxxflags___Qunused_arguments" >&6; } if test "x$ax_cv_check_cxxflags___Qunused_arguments" = xyes then : cxx_Qunused_arguments=yes; cxxflags_tmp="$cxxflags_tmp $flg" else case e in #( e) cxx_Qunused_arguments=no ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else case e in #( e) cxxflags_tmp="$cxxflags_tmp $flg" ;; esac fi done CXXFLAGS="$cxxflags_tmp" # Check if 'malloc(0)' returns valid pointer { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc (0) returns nonnull" >&5 printf %s "checking whether malloc (0) returns nonnull... " >&6; } if test ${ac_cv_func_malloc_0_nonnull+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midipix* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | windows* | msys* ) ac_cv_func_malloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = malloc (0); void * volatile vp = p; int result = !vp; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_malloc_0_nonnull=yes else case e in #( e) ac_cv_func_malloc_0_nonnull=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } case $ac_cv_func_malloc_0_nonnull in #( *yes) : printf "%s\n" "#define HAVE_MALLOC 1" >>confdefs.h ;; #( *) : printf "%s\n" "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac printf "%s\n" "#define malloc rpl_malloc" >>confdefs.h ;; esac # Check the size of necessary system specific types. # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 printf %s "checking size of size_t... " >&6; } if test ${ac_cv_sizeof_size_t+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default" then : else case e in #( e) if test "$ac_cv_type_size_t" = yes; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (size_t) See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_size_t=0 fi ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 printf "%s\n" "$ac_cv_sizeof_size_t" >&6; } printf "%s\n" "#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t" >>confdefs.h SIZEOF_SIZE_T=$ac_cv_sizeof_size_t printf "%s\n" "#define GAL_CONFIG_SIZEOF_SIZE_T $ac_cv_sizeof_size_t" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 printf %s "checking size of long... " >&6; } if test ${ac_cv_sizeof_long+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default" then : else case e in #( e) if test "$ac_cv_type_long" = yes; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 printf "%s\n" "$ac_cv_sizeof_long" >&6; } printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h SIZEOF_LONG=$ac_cv_sizeof_long printf "%s\n" "#define GAL_CONFIG_SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like 'int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 printf %s "checking size of int... " >&6; } if test ${ac_cv_sizeof_int+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" then : else case e in #( e) if test "$ac_cv_type_int" = yes; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (int) See 'config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_int=0 fi ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 printf "%s\n" "$ac_cv_sizeof_int" >&6; } printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h SIZEOF_INT=$ac_cv_sizeof_int printf "%s\n" "#define GAL_CONFIG_SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h # By default we assume no warnings anywarnings=no # Remove any occurance of the current directory './', '.', or the full # address of the current directory in PATH. The main problem is the # 'libtool' executable which Gnuastro builds internally in the top build # directory. However, we also need to know if the system has libtool or # not. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if PATH contains current directory" >&5 printf %s "checking if PATH contains current directory... " >&6; } oldPATH=$PATH currpwd=$(pwd) # The first call to SED will remove any occurance of the current directory: # './', '.', or the full address. # # NOTE 1: We cannot simply remove all '.'s, because hidden directories # (like the '~/.local' that is suggested for local # installations) will also be altered. # # NOTE 2: An empty string in the list of strings (separated by ':') # means the current directory. This includes cases like: '::', # or a leading and trailing ':'. So after all the removals of # the current directory, we will remove all such cases. # # NOTE 3: The SED separator can be any character immediately after 's', # it doesn't just have to be the commonly used '/'. Since '$pwd' # will possibly contain many '/'s, it is much more easier to use # a differen separator ('|' in this call to SED). PATH=$(printf "%s\n" $PATH | $SED -e 's|'"$currpwd"'||g' \ -e 's|\.\.*//*||g' \ -e 's|:\.\.*:|:|g' \ -e 's|\.*$||' \ -e 's|^\.*||' \ -e 's|::*|:|g' \ -e 's|^:||' \ -e 's|:$||' ) if test $oldPATH = $PATH then : path_warning=no else case e in #( e) path_warning=yes; anywarnings=yes ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $path_warning " >&5 printf "%s\n" "$path_warning " >&6; } # Libraries # --------- # # After each library is found, AC_SEARCH_LIBS adds the -lLIBRARY flag to # the LIBS variable which is then given to all the Makefiles. Each new flag # is added to the left of the old one so order matters here. Note that the # LIBS variable is also used in checking the next libraries, so the linking # with their dependent libraries is done automatically with this order, and # we don't have to explicitly set the dependency flags. has_gsl=yes has_libgit2=1 has_cmath=yes has_wcslib=yes has_cfitsio=yes has_libtiff=yes has_libjpeg=yes has_gslcblas=yes missing_mandatory=no missing_optional_lib=no # Keep the original LIBS to re-set in the end. orig_LIBS="$LIBS" # Basics of the library linking checks # ------------------------------------ # # Outputs of 'AC_LIB_HAVE_LINKFLAGS' (which checks for libraries): # # - LIB<NAME>: contains the raw 'libNAME.so' or 'libNAME.a' file for some # libraries. This is necessary for static libraries, but is problematic # for shared libraries (they will not be linked to the produced # library: when you run 'ldd libgnuastro.so', you don't see those that # were linked with a '.so' file here). # # To make things worse, when linking Gnuastro's programs with # Gnuastro's library, libtool will put raw files ('.a' or '.so' files, # not '-lNAME') before 'libgnuastro.la' (which depends on them). As a # result, building shared programs with Gnuastro's library will # fail. But this is desired for static libraries. # # - LTLIB<NAME>: has '-lNAME', along with any necessary RPATH flags for # the local operating system. # # Major environment variables: # # - LIBS: is primarily used in the compilation checks of the configure # script where the host's compiler has full control. # # - LDADD: is passed to the rules that build Gnuastro's library and # programs through the 'CONFIG_LDADD' variable. # # Since nothing complex is built during the configure script, we'll just # populate 'LIBS' with 'LTLIB<NAME>'. However, building the programs and # library is very complex and we have an even more complex BuildProgram in # Gnaustro. So we fill 'LDADD' conditionally: 1) for building static # library/programs, we'll use 'LIB<NAME>'. 2) for building shared # libraries, we'll use 'LTLIB<NAME>'. # Why C math library (for things like 'log')? Even though '-lm' is also # found for GSL below, on some systems (reported on Ubuntu), if we don't # add it explicitly here, the build will crash because of a failure to link # with the math functions. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_saved_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_saved_prefix" # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else case e in #( e) with_gnu_ld=no ;; esac fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi if test -n "$LD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 printf %s "checking for ld... " >&6; } elif test "$GCC" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } elif test "$with_gnu_ld" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test -n "$LD"; then # Let the user override the test with a path. : else if test ${acl_cv_path_LD+y} then : printf %s "(cached) " >&6 else case e in #( e) acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. case $host in *-*-mingw* | windows*) # gcc leaves a trailing carriage return which upsets mingw acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) acl_output=`($CC -print-prog-name=ld) 2>&5` ;; esac case $acl_output in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` done # Got the pathname. No search in PATH is needed. acl_cv_path_LD="$acl_output" ac_prog= ;; "") # If it fails, then pretend we aren't using GCC. ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac fi if test -n "$ac_prog"; then # Search for $ac_prog in $PATH. acl_saved_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_saved_IFS" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$acl_saved_IFS" fi case $host in *-*-aix*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : # The compiler produces 64-bit code. Add option '-b64' so that the # linker groks 64-bit object files. case "$acl_cv_path_LD " in *" -b64 "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; sparc64-*-netbsd*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) # The compiler produces 32-bit code. Add option '-m elf32_sparc' # so that the linker groks 32-bit object files. case "$acl_cv_path_LD " in *" -m elf32_sparc "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; esac ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac ;; esac fi LD="$acl_cv_path_LD" fi if test -n "$LD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${acl_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else case e in #( e) # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) acl_cv_prog_gnu_ld=yes ;; *) acl_cv_prog_gnu_ld=no ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 printf %s "checking for shared library run path origin... " >&6; } if test ${acl_cv_rpath+y} then : printf %s "(cached) " >&6 else case e in #( e) CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 printf "%s\n" "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test ${enable_rpath+y} then : enableval=$enable_rpath; : else case e in #( e) enable_rpath=yes ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5 printf %s "checking 32-bit host C ABI... " >&6; } if test ${gl_cv_host_cpu_c_abi_32bit+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_cpu" in # CPUs that only support a 32-bit ABI. arc \ | bfin \ | cris* \ | csky \ | epiphany \ | ft32 \ | h8300 \ | m68k \ | microblaze | microblazeel \ | nds32 | nds32le | nds32be \ | nios2 | nios2eb | nios2el \ | or1k* \ | or32 \ | sh | sh1234 | sh1234elb \ | tic6x \ | xtensa* ) gl_cv_host_cpu_c_abi_32bit=yes ;; # CPUs that only support a 64-bit ABI. alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ | mmix ) gl_cv_host_cpu_c_abi_32bit=no ;; *) if test -n "$gl_cv_host_cpu_c_abi"; then case "$gl_cv_host_cpu_c_abi" in i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 | alpha | arm64 | aarch64c | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) gl_cv_host_cpu_c_abi_32bit=no ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac else gl_cv_host_cpu_c_abi_32bit=unknown fi if test $gl_cv_host_cpu_c_abi_32bit = unknown; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int test_pointer_size[sizeof (void *) - 5]; _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else case e in #( e) gl_cv_host_cpu_c_abi_32bit=yes ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5 printf "%s\n" "$gl_cv_host_cpu_c_abi_32bit" >&6; } HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ELF binary format" >&5 printf %s "checking for ELF binary format... " >&6; } if test ${gl_cv_elf+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __ELF__ || (defined __linux__ && defined __EDG__) Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_elf=yes else case e in #( e) gl_cv_elf=no ;; esac fi rm -rf conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_elf" >&5 printf "%s\n" "$gl_cv_elf" >&6; } if test $gl_cv_elf = yes; then # Extract the ELF class of a file (5th byte) in decimal. # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header if od -A x < /dev/null >/dev/null 2>/dev/null; then # Use POSIX od. func_elfclass () { od -A n -t d1 -j 4 -N 1 } else # Use BSD hexdump. func_elfclass () { dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' echo } fi # Use 'expr', not 'test', to compare the values of func_elfclass, because on # Solaris 11 OpenIndiana and Solaris 11 OmniOS, the result is 001 or 002, # not 1 or 2. case $HOST_CPU_C_ABI_32BIT in yes) # 32-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 1 > /dev/null } ;; no) # 64-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 2 > /dev/null } ;; *) # Unknown. acl_is_expected_elfclass () { : } ;; esac else acl_is_expected_elfclass () { : } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 printf %s "checking for the common suffixes of directories in the library search path... " >&6; } if test ${acl_cv_libdirstems+y} then : printf %s "(cached) " >&6 else case e in #( e) acl_libdirstem=lib acl_libdirstem2= acl_libdirstem3= case "$host_os" in solaris*) if test $HOST_CPU_C_ABI_32BIT = no; then acl_libdirstem2=lib/64 case "$host_cpu" in sparc*) acl_libdirstem3=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test $HOST_CPU_C_ABI_32BIT != no; then # 32-bit or unknown ABI. if test -d /usr/lib32; then acl_libdirstem2=lib32 fi fi if test $HOST_CPU_C_ABI_32BIT != yes; then # 64-bit or unknown ABI. if test -d /usr/lib64; then acl_libdirstem3=lib64 fi fi if test -n "$searchpath"; then acl_saved_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib32 ) acl_libdirstem2=lib32 ;; */lib64 ) acl_libdirstem3=lib64 ;; esac ;; esac fi done IFS="$acl_saved_IFS" if test $HOST_CPU_C_ABI_32BIT = yes; then # 32-bit ABI. acl_libdirstem3= fi if test $HOST_CPU_C_ABI_32BIT = no; then # 64-bit ABI. acl_libdirstem2= fi fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 printf "%s\n" "$acl_cv_libdirstems" >&6; } acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` use_additional=yes acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" # Check whether --with-libm-prefix was given. if test ${with_libm_prefix+y} then : withval=$with_libm_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBM= LTLIBM= INCM= LIBM_PREFIX= HAVE_LIBM= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='m ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBM="${LIBM}${LIBM:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBM="${LTLIBM}${LTLIBM:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBM; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBM="${LTLIBM}${LTLIBM:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBM="${LIBM}${LIBM:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBM="${LIBM}${LIBM:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBM="${LIBM}${LIBM:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBM; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBM="${LIBM}${LIBM:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBM="${LIBM}${LIBM:+ }$found_so" else LIBM="${LIBM}${LIBM:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBM="${LIBM}${LIBM:+ }$found_a" else LIBM="${LIBM}${LIBM:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'm'; then LIBM_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'm'; then LIBM_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'm'; then LIBM_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCM; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCM="${INCM}${INCM:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then saved_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$saved_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBM; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBM="${LIBM}${LIBM:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBM; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBM="${LTLIBM}${LTLIBM:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBM="${LIBM}${LIBM:+ }$dep" LTLIBM="${LTLIBM}${LTLIBM:+ }$dep" ;; esac done fi else LIBM="${LIBM}${LIBM:+ }-l$name" LTLIBM="${LTLIBM}${LTLIBM:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_saved_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBM="${LIBM}${LIBM:+ }$flag" else for found_dir in $rpathdirs; do acl_saved_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBM="${LIBM}${LIBM:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBM="${LTLIBM}${LTLIBM:+ }-R$found_dir" done fi acl_saved_CPPFLAGS="$CPPFLAGS" for element in $INCM; do haveit= for x in $CPPFLAGS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libm" >&5 printf %s "checking for libm... " >&6; } if test ${ac_cv_libm+y} then : printf %s "(cached) " >&6 else case e in #( e) acl_saved_LIBS="$LIBS" case " $LIBM" in *" -l"*) LIBS="$LIBS $LIBM" ;; *) LIBS="$LIBM $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_libm=yes else case e in #( e) ac_cv_libm='no' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$acl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libm" >&5 printf "%s\n" "$ac_cv_libm" >&6; } if test "$ac_cv_libm" = yes; then HAVE_LIBM=yes printf "%s\n" "#define HAVE_LIBM 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libm" >&5 printf %s "checking how to link with libm... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBM" >&5 printf "%s\n" "$LIBM" >&6; } else HAVE_LIBM=no CPPFLAGS="$acl_saved_CPPFLAGS" LIBM= LTLIBM= LIBM_PREFIX= fi if test "x$LIBM" = x then : else case e in #( e) LIBS="$LIBM $LIBS" if test "x$enable_shared" = "xno" then : LDADD="$LIBM $LDADD" else case e in #( e) LDADD="$LTLIBM $LDADD" ;; esac fi ;; esac fi use_additional=yes acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" # Check whether --with-libgsl-prefix was given. if test ${with_libgsl_prefix+y} then : withval=$with_libgsl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBGSL= LTLIBGSL= INCGSL= LIBGSL_PREFIX= HAVE_LIBGSL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='gsl gslcblas' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBGSL="${LIBGSL}${LIBGSL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBGSL="${LTLIBGSL}${LTLIBGSL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBGSL; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBGSL="${LTLIBGSL}${LTLIBGSL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBGSL="${LIBGSL}${LIBGSL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBGSL="${LIBGSL}${LIBGSL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBGSL="${LIBGSL}${LIBGSL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBGSL; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBGSL="${LIBGSL}${LIBGSL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBGSL="${LIBGSL}${LIBGSL:+ }$found_so" else LIBGSL="${LIBGSL}${LIBGSL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBGSL="${LIBGSL}${LIBGSL:+ }$found_a" else LIBGSL="${LIBGSL}${LIBGSL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'gsl'; then LIBGSL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'gsl'; then LIBGSL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'gsl'; then LIBGSL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCGSL; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCGSL="${INCGSL}${INCGSL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then saved_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$saved_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBGSL; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBGSL="${LIBGSL}${LIBGSL:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBGSL; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBGSL="${LTLIBGSL}${LTLIBGSL:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBGSL="${LIBGSL}${LIBGSL:+ }$dep" LTLIBGSL="${LTLIBGSL}${LTLIBGSL:+ }$dep" ;; esac done fi else LIBGSL="${LIBGSL}${LIBGSL:+ }-l$name" LTLIBGSL="${LTLIBGSL}${LTLIBGSL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_saved_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBGSL="${LIBGSL}${LIBGSL:+ }$flag" else for found_dir in $rpathdirs; do acl_saved_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBGSL="${LIBGSL}${LIBGSL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBGSL="${LTLIBGSL}${LTLIBGSL:+ }-R$found_dir" done fi acl_saved_CPPFLAGS="$CPPFLAGS" for element in $INCGSL; do haveit= for x in $CPPFLAGS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libgsl" >&5 printf %s "checking for libgsl... " >&6; } if test ${ac_cv_libgsl+y} then : printf %s "(cached) " >&6 else case e in #( e) acl_saved_LIBS="$LIBS" case " $LIBGSL" in *" -l"*) LIBS="$LIBS $LIBGSL" ;; *) LIBS="$LIBGSL $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <gsl/gsl_rng.h> void junk(void) { gsl_rng_env_setup(); } int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_libgsl=yes else case e in #( e) ac_cv_libgsl='no' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$acl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libgsl" >&5 printf "%s\n" "$ac_cv_libgsl" >&6; } if test "$ac_cv_libgsl" = yes; then HAVE_LIBGSL=yes printf "%s\n" "#define HAVE_LIBGSL 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libgsl" >&5 printf %s "checking how to link with libgsl... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBGSL" >&5 printf "%s\n" "$LIBGSL" >&6; } else HAVE_LIBGSL=no CPPFLAGS="$acl_saved_CPPFLAGS" LIBGSL= LTLIBGSL= LIBGSL_PREFIX= fi if test "x$LIBGSL" = x then : missing_mandatory=yes; has_gsl=no; has_gslcblas=no else case e in #( e) LIBS="$LIBGSL $LIBS" if test "x$enable_shared" = "xno" then : LDADD="$LIBGSL $LDADD" else case e in #( e) LDADD="$LTLIBGSL $LDADD" ;; esac fi ;; esac fi # Since version 0.42, if 'libcurl' is installed, CFITSIO will link with it # and thus it will be necessary to explicitly link with libcurl also. If it # doesn't exist on the system, then CFITSIO won't link with it and there is # no problem for Gnuastro either. So there is no need to stop the configure # script if libcurl isn't found. # # For static builds, linking libcurl (also built in static-only mode) will # depend on linking with zlib. So we'll need to also search for that # also. But if libcurl isn't built in static-only mode, then it will have # undefined symbols for many libraries (for example libpsl, libidn2, # librtmp, libldap). So if you intend to make Gnuastro statically, then # build Libcurl in static-only mode so you won't have to check for all # these extra libraries here. # # Similarly, if the Bzip2 library was activated when building CFITSIO, it # will be necessary in a static build to CFITSIO. use_additional=yes acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" # Check whether --with-libz-prefix was given. if test ${with_libz_prefix+y} then : withval=$with_libz_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBZ= LTLIBZ= INCZ= LIBZ_PREFIX= HAVE_LIBZ= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='z ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBZ="${LIBZ}${LIBZ:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBZ="${LTLIBZ}${LTLIBZ:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBZ; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBZ="${LTLIBZ}${LTLIBZ:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBZ="${LIBZ}${LIBZ:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBZ="${LIBZ}${LIBZ:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBZ="${LIBZ}${LIBZ:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBZ; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBZ="${LIBZ}${LIBZ:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBZ="${LIBZ}${LIBZ:+ }$found_so" else LIBZ="${LIBZ}${LIBZ:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBZ="${LIBZ}${LIBZ:+ }$found_a" else LIBZ="${LIBZ}${LIBZ:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'z'; then LIBZ_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'z'; then LIBZ_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'z'; then LIBZ_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCZ; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCZ="${INCZ}${INCZ:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then saved_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$saved_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBZ; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBZ="${LIBZ}${LIBZ:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBZ; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBZ="${LTLIBZ}${LTLIBZ:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBZ="${LIBZ}${LIBZ:+ }$dep" LTLIBZ="${LTLIBZ}${LTLIBZ:+ }$dep" ;; esac done fi else LIBZ="${LIBZ}${LIBZ:+ }-l$name" LTLIBZ="${LTLIBZ}${LTLIBZ:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_saved_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBZ="${LIBZ}${LIBZ:+ }$flag" else for found_dir in $rpathdirs; do acl_saved_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBZ="${LIBZ}${LIBZ:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBZ="${LTLIBZ}${LTLIBZ:+ }-R$found_dir" done fi acl_saved_CPPFLAGS="$CPPFLAGS" for element in $INCZ; do haveit= for x in $CPPFLAGS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libz" >&5 printf %s "checking for libz... " >&6; } if test ${ac_cv_libz+y} then : printf %s "(cached) " >&6 else case e in #( e) acl_saved_LIBS="$LIBS" case " $LIBZ" in *" -l"*) LIBS="$LIBS $LIBZ" ;; *) LIBS="$LIBZ $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <zlib.h> int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_libz=yes else case e in #( e) ac_cv_libz='no' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$acl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libz" >&5 printf "%s\n" "$ac_cv_libz" >&6; } if test "$ac_cv_libz" = yes; then HAVE_LIBZ=yes printf "%s\n" "#define HAVE_LIBZ 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libz" >&5 printf %s "checking how to link with libz... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBZ" >&5 printf "%s\n" "$LIBZ" >&6; } else HAVE_LIBZ=no CPPFLAGS="$acl_saved_CPPFLAGS" LIBZ= LTLIBZ= LIBZ_PREFIX= fi if test "x$LIBZ" = x then : else case e in #( e) LIBS="$LIBZ $LIBS" if test "x$enable_shared" = "xno" then : LDADD="$LIBZ $LDADD" else case e in #( e) LDADD="$LTLIBZ $LDADD" ;; esac fi ;; esac fi use_additional=yes acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" # Check whether --with-libbz2-prefix was given. if test ${with_libbz2_prefix+y} then : withval=$with_libbz2_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBBZ2= LTLIBBZ2= INCBZ2= LIBBZ2_PREFIX= HAVE_LIBBZ2= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='bz2 ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBBZ2="${LIBBZ2}${LIBBZ2:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBBZ2="${LTLIBBZ2}${LTLIBBZ2:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBBZ2; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBBZ2="${LTLIBBZ2}${LTLIBBZ2:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBBZ2="${LIBBZ2}${LIBBZ2:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBBZ2="${LIBBZ2}${LIBBZ2:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBBZ2="${LIBBZ2}${LIBBZ2:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBBZ2; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBBZ2="${LIBBZ2}${LIBBZ2:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBBZ2="${LIBBZ2}${LIBBZ2:+ }$found_so" else LIBBZ2="${LIBBZ2}${LIBBZ2:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBBZ2="${LIBBZ2}${LIBBZ2:+ }$found_a" else LIBBZ2="${LIBBZ2}${LIBBZ2:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'bz2'; then LIBBZ2_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'bz2'; then LIBBZ2_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'bz2'; then LIBBZ2_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCBZ2; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCBZ2="${INCBZ2}${INCBZ2:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then saved_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$saved_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBBZ2; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBBZ2="${LIBBZ2}${LIBBZ2:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBBZ2; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBBZ2="${LTLIBBZ2}${LTLIBBZ2:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBBZ2="${LIBBZ2}${LIBBZ2:+ }$dep" LTLIBBZ2="${LTLIBBZ2}${LTLIBBZ2:+ }$dep" ;; esac done fi else LIBBZ2="${LIBBZ2}${LIBBZ2:+ }-l$name" LTLIBBZ2="${LTLIBBZ2}${LTLIBBZ2:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_saved_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBBZ2="${LIBBZ2}${LIBBZ2:+ }$flag" else for found_dir in $rpathdirs; do acl_saved_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBBZ2="${LIBBZ2}${LIBBZ2:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBBZ2="${LTLIBBZ2}${LTLIBBZ2:+ }-R$found_dir" done fi acl_saved_CPPFLAGS="$CPPFLAGS" for element in $INCBZ2; do haveit= for x in $CPPFLAGS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libbz2" >&5 printf %s "checking for libbz2... " >&6; } if test ${ac_cv_libbz2+y} then : printf %s "(cached) " >&6 else case e in #( e) acl_saved_LIBS="$LIBS" case " $LIBBZ2" in *" -l"*) LIBS="$LIBS $LIBBZ2" ;; *) LIBS="$LIBBZ2 $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <bzlib.h> int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_libbz2=yes else case e in #( e) ac_cv_libbz2='no' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$acl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libbz2" >&5 printf "%s\n" "$ac_cv_libbz2" >&6; } if test "$ac_cv_libbz2" = yes; then HAVE_LIBBZ2=yes printf "%s\n" "#define HAVE_LIBBZ2 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libbz2" >&5 printf %s "checking how to link with libbz2... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBBZ2" >&5 printf "%s\n" "$LIBBZ2" >&6; } else HAVE_LIBBZ2=no CPPFLAGS="$acl_saved_CPPFLAGS" LIBBZ2= LTLIBBZ2= LIBBZ2_PREFIX= fi if test "x$LIBBZ2" = x then : else case e in #( e) LIBS="$LIBBZ2 $LIBS" if test "x$enable_shared" = "xno" then : LDADD="$LIBBZ2 $LDADD" else case e in #( e) LDADD="$LTLIBBZ2 $LDADD" ;; esac fi ;; esac fi use_additional=yes acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" # Check whether --with-libcurl-prefix was given. if test ${with_libcurl_prefix+y} then : withval=$with_libcurl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBCURL= LTLIBCURL= INCCURL= LIBCURL_PREFIX= HAVE_LIBCURL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='curl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBCURL="${LIBCURL}${LIBCURL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBCURL="${LTLIBCURL}${LTLIBCURL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBCURL; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBCURL="${LTLIBCURL}${LTLIBCURL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBCURL="${LIBCURL}${LIBCURL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBCURL="${LIBCURL}${LIBCURL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBCURL="${LIBCURL}${LIBCURL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBCURL; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBCURL="${LIBCURL}${LIBCURL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBCURL="${LIBCURL}${LIBCURL:+ }$found_so" else LIBCURL="${LIBCURL}${LIBCURL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBCURL="${LIBCURL}${LIBCURL:+ }$found_a" else LIBCURL="${LIBCURL}${LIBCURL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'curl'; then LIBCURL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'curl'; then LIBCURL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'curl'; then LIBCURL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCCURL; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCCURL="${INCCURL}${INCCURL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then saved_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$saved_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBCURL; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBCURL="${LIBCURL}${LIBCURL:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBCURL; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBCURL="${LTLIBCURL}${LTLIBCURL:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBCURL="${LIBCURL}${LIBCURL:+ }$dep" LTLIBCURL="${LTLIBCURL}${LTLIBCURL:+ }$dep" ;; esac done fi else LIBCURL="${LIBCURL}${LIBCURL:+ }-l$name" LTLIBCURL="${LTLIBCURL}${LTLIBCURL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_saved_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBCURL="${LIBCURL}${LIBCURL:+ }$flag" else for found_dir in $rpathdirs; do acl_saved_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBCURL="${LIBCURL}${LIBCURL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBCURL="${LTLIBCURL}${LTLIBCURL:+ }-R$found_dir" done fi acl_saved_CPPFLAGS="$CPPFLAGS" for element in $INCCURL; do haveit= for x in $CPPFLAGS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libcurl" >&5 printf %s "checking for libcurl... " >&6; } if test ${ac_cv_libcurl+y} then : printf %s "(cached) " >&6 else case e in #( e) acl_saved_LIBS="$LIBS" case " $LIBCURL" in *" -l"*) LIBS="$LIBS $LIBCURL" ;; *) LIBS="$LIBCURL $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <curl/curl.h> int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_libcurl=yes else case e in #( e) ac_cv_libcurl='no' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$acl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libcurl" >&5 printf "%s\n" "$ac_cv_libcurl" >&6; } if test "$ac_cv_libcurl" = yes; then HAVE_LIBCURL=yes printf "%s\n" "#define HAVE_LIBCURL 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libcurl" >&5 printf %s "checking how to link with libcurl... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBCURL" >&5 printf "%s\n" "$LIBCURL" >&6; } else HAVE_LIBCURL=no CPPFLAGS="$acl_saved_CPPFLAGS" LIBCURL= LTLIBCURL= LIBCURL_PREFIX= fi if test "x$LIBCURL" = x then : else case e in #( e) LIBS="$LIBCURL $LIBS" if test "x$enable_shared" = "xno" then : LDADD="$LIBCURL $LDADD" else case e in #( e) LDADD="$LTLIBCURL $LDADD" ;; esac fi ;; esac fi use_additional=yes acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" # Check whether --with-libcfitsio-prefix was given. if test ${with_libcfitsio_prefix+y} then : withval=$with_libcfitsio_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBCFITSIO= LTLIBCFITSIO= INCCFITSIO= LIBCFITSIO_PREFIX= HAVE_LIBCFITSIO= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='cfitsio ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBCFITSIO="${LTLIBCFITSIO}${LTLIBCFITSIO:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBCFITSIO; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBCFITSIO="${LTLIBCFITSIO}${LTLIBCFITSIO:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBCFITSIO; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }$found_so" else LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }$found_a" else LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'cfitsio'; then LIBCFITSIO_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'cfitsio'; then LIBCFITSIO_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'cfitsio'; then LIBCFITSIO_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCCFITSIO; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCCFITSIO="${INCCFITSIO}${INCCFITSIO:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then saved_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$saved_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBCFITSIO; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBCFITSIO; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBCFITSIO="${LTLIBCFITSIO}${LTLIBCFITSIO:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }$dep" LTLIBCFITSIO="${LTLIBCFITSIO}${LTLIBCFITSIO:+ }$dep" ;; esac done fi else LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }-l$name" LTLIBCFITSIO="${LTLIBCFITSIO}${LTLIBCFITSIO:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_saved_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }$flag" else for found_dir in $rpathdirs; do acl_saved_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBCFITSIO="${LIBCFITSIO}${LIBCFITSIO:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBCFITSIO="${LTLIBCFITSIO}${LTLIBCFITSIO:+ }-R$found_dir" done fi acl_saved_CPPFLAGS="$CPPFLAGS" for element in $INCCFITSIO; do haveit= for x in $CPPFLAGS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libcfitsio" >&5 printf %s "checking for libcfitsio... " >&6; } if test ${ac_cv_libcfitsio+y} then : printf %s "(cached) " >&6 else case e in #( e) acl_saved_LIBS="$LIBS" case " $LIBCFITSIO" in *" -l"*) LIBS="$LIBS $LIBCFITSIO" ;; *) LIBS="$LIBCFITSIO $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fitsio.h> void junk(void) { int status; fitsfile *f; ffopen(&f, "junk", READONLY, &status);} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_libcfitsio=yes else case e in #( e) ac_cv_libcfitsio='no' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$acl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libcfitsio" >&5 printf "%s\n" "$ac_cv_libcfitsio" >&6; } if test "$ac_cv_libcfitsio" = yes; then HAVE_LIBCFITSIO=yes printf "%s\n" "#define HAVE_LIBCFITSIO 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libcfitsio" >&5 printf %s "checking how to link with libcfitsio... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBCFITSIO" >&5 printf "%s\n" "$LIBCFITSIO" >&6; } else HAVE_LIBCFITSIO=no CPPFLAGS="$acl_saved_CPPFLAGS" LIBCFITSIO= LTLIBCFITSIO= LIBCFITSIO_PREFIX= fi if test "x$LIBCFITSIO" = x then : missing_mandatory=yes; has_cfitsio=no else case e in #( e) LIBS="$LIBCFITSIO $LIBS" if test "x$enable_shared" = "xno" then : LDADD="$LIBCFITSIO $LDADD" else case e in #( e) LDADD="$LTLIBCFITSIO $LDADD" ;; esac fi ;; esac fi use_additional=yes acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" # Check whether --with-libwcs-prefix was given. if test ${with_libwcs_prefix+y} then : withval=$with_libwcs_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBWCS= LTLIBWCS= INCWCS= LIBWCS_PREFIX= HAVE_LIBWCS= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='wcs ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBWCS="${LIBWCS}${LIBWCS:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBWCS="${LTLIBWCS}${LTLIBWCS:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBWCS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBWCS="${LTLIBWCS}${LTLIBWCS:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBWCS="${LIBWCS}${LIBWCS:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBWCS="${LIBWCS}${LIBWCS:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBWCS="${LIBWCS}${LIBWCS:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBWCS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBWCS="${LIBWCS}${LIBWCS:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBWCS="${LIBWCS}${LIBWCS:+ }$found_so" else LIBWCS="${LIBWCS}${LIBWCS:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBWCS="${LIBWCS}${LIBWCS:+ }$found_a" else LIBWCS="${LIBWCS}${LIBWCS:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'wcs'; then LIBWCS_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'wcs'; then LIBWCS_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'wcs'; then LIBWCS_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCWCS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCWCS="${INCWCS}${INCWCS:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then saved_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$saved_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBWCS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBWCS="${LIBWCS}${LIBWCS:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBWCS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBWCS="${LTLIBWCS}${LTLIBWCS:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBWCS="${LIBWCS}${LIBWCS:+ }$dep" LTLIBWCS="${LTLIBWCS}${LTLIBWCS:+ }$dep" ;; esac done fi else LIBWCS="${LIBWCS}${LIBWCS:+ }-l$name" LTLIBWCS="${LTLIBWCS}${LTLIBWCS:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_saved_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBWCS="${LIBWCS}${LIBWCS:+ }$flag" else for found_dir in $rpathdirs; do acl_saved_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBWCS="${LIBWCS}${LIBWCS:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBWCS="${LTLIBWCS}${LTLIBWCS:+ }-R$found_dir" done fi acl_saved_CPPFLAGS="$CPPFLAGS" for element in $INCWCS; do haveit= for x in $CPPFLAGS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libwcs" >&5 printf %s "checking for libwcs... " >&6; } if test ${ac_cv_libwcs+y} then : printf %s "(cached) " >&6 else case e in #( e) acl_saved_LIBS="$LIBS" case " $LIBWCS" in *" -l"*) LIBS="$LIBS $LIBWCS" ;; *) LIBS="$LIBWCS $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wcslib/wcshdr.h> void junk(void) { int nreject, nwcs; struct wcsprm *wcs; char *header="JUNK"; wcspih(header, 1, 0, 0, &nreject, &nwcs, &wcs); } int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_libwcs=yes else case e in #( e) ac_cv_libwcs='no' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$acl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libwcs" >&5 printf "%s\n" "$ac_cv_libwcs" >&6; } if test "$ac_cv_libwcs" = yes; then HAVE_LIBWCS=yes printf "%s\n" "#define HAVE_LIBWCS 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libwcs" >&5 printf %s "checking how to link with libwcs... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBWCS" >&5 printf "%s\n" "$LIBWCS" >&6; } else HAVE_LIBWCS=no CPPFLAGS="$acl_saved_CPPFLAGS" LIBWCS= LTLIBWCS= LIBWCS_PREFIX= fi if test "x$LIBWCS" = x then : missing_mandatory=yes; has_wcslib=no else case e in #( e) LIBS="$LIBWCS $LIBS" if test "x$enable_shared" = "xno" then : LDADD="$LIBWCS $LDADD" else case e in #( e) LDADD="$LTLIBWCS $LDADD" ;; esac fi ;; esac fi # Check whether --with-libjpeg was given. if test ${with_libjpeg+y} then : withval=$with_libjpeg; else case e in #( e) with_libjpeg=yes ;; esac fi if test "x$with_libjpeg" != xno then : use_additional=yes acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" # Check whether --with-libjpeg-prefix was given. if test ${with_libjpeg_prefix+y} then : withval=$with_libjpeg_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBJPEG= LTLIBJPEG= INCJPEG= LIBJPEG_PREFIX= HAVE_LIBJPEG= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='jpeg ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBJPEG="${LIBJPEG}${LIBJPEG:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBJPEG="${LTLIBJPEG}${LTLIBJPEG:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBJPEG; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBJPEG="${LTLIBJPEG}${LTLIBJPEG:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBJPEG="${LIBJPEG}${LIBJPEG:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBJPEG="${LIBJPEG}${LIBJPEG:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBJPEG="${LIBJPEG}${LIBJPEG:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBJPEG; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBJPEG="${LIBJPEG}${LIBJPEG:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBJPEG="${LIBJPEG}${LIBJPEG:+ }$found_so" else LIBJPEG="${LIBJPEG}${LIBJPEG:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBJPEG="${LIBJPEG}${LIBJPEG:+ }$found_a" else LIBJPEG="${LIBJPEG}${LIBJPEG:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'jpeg'; then LIBJPEG_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'jpeg'; then LIBJPEG_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'jpeg'; then LIBJPEG_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCJPEG; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCJPEG="${INCJPEG}${INCJPEG:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then saved_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$saved_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBJPEG; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBJPEG="${LIBJPEG}${LIBJPEG:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBJPEG; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBJPEG="${LTLIBJPEG}${LTLIBJPEG:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBJPEG="${LIBJPEG}${LIBJPEG:+ }$dep" LTLIBJPEG="${LTLIBJPEG}${LTLIBJPEG:+ }$dep" ;; esac done fi else LIBJPEG="${LIBJPEG}${LIBJPEG:+ }-l$name" LTLIBJPEG="${LTLIBJPEG}${LTLIBJPEG:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_saved_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBJPEG="${LIBJPEG}${LIBJPEG:+ }$flag" else for found_dir in $rpathdirs; do acl_saved_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBJPEG="${LIBJPEG}${LIBJPEG:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBJPEG="${LTLIBJPEG}${LTLIBJPEG:+ }-R$found_dir" done fi acl_saved_CPPFLAGS="$CPPFLAGS" for element in $INCJPEG; do haveit= for x in $CPPFLAGS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libjpeg" >&5 printf %s "checking for libjpeg... " >&6; } if test ${ac_cv_libjpeg+y} then : printf %s "(cached) " >&6 else case e in #( e) acl_saved_LIBS="$LIBS" case " $LIBJPEG" in *" -l"*) LIBS="$LIBS $LIBJPEG" ;; *) LIBS="$LIBJPEG $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <stdlib.h> #include <jpeglib.h> void junk(void) { struct jpeg_decompress_struct cinfo; jpeg_create_decompress(&cinfo); } int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_libjpeg=yes else case e in #( e) ac_cv_libjpeg='no' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$acl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libjpeg" >&5 printf "%s\n" "$ac_cv_libjpeg" >&6; } if test "$ac_cv_libjpeg" = yes; then HAVE_LIBJPEG=yes printf "%s\n" "#define HAVE_LIBJPEG 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libjpeg" >&5 printf %s "checking how to link with libjpeg... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBJPEG" >&5 printf "%s\n" "$LIBJPEG" >&6; } else HAVE_LIBJPEG=no CPPFLAGS="$acl_saved_CPPFLAGS" LIBJPEG= LTLIBJPEG= LIBJPEG_PREFIX= fi fi if test "x$LIBJPEG" = x then : missing_optional_lib=yes; has_libjpeg=no; anywarnings=yes else case e in #( e) LIBS="$LIBJPEG $LIBS" if test "x$enable_shared" = "xno" then : LDADD="$LIBJPEG $LDADD" else case e in #( e) LDADD="$LTLIBJPEG $LDADD" ;; esac fi ;; esac fi if test "x$has_libjpeg" = "xyes"; then COND_HASLIBJPEG_TRUE= COND_HASLIBJPEG_FALSE='#' else COND_HASLIBJPEG_TRUE='#' COND_HASLIBJPEG_FALSE= fi # Check whether --with-libtiff was given. if test ${with_libtiff+y} then : withval=$with_libtiff; else case e in #( e) with_libtiff=yes ;; esac fi if test "x$with_libtiff" != xno then : use_additional=yes acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" # Check whether --with-liblzma-prefix was given. if test ${with_liblzma_prefix+y} then : withval=$with_liblzma_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBLZMA= LTLIBLZMA= INCLZMA= LIBLZMA_PREFIX= HAVE_LIBLZMA= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='lzma ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBLZMA="${LIBLZMA}${LIBLZMA:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBLZMA="${LTLIBLZMA}${LTLIBLZMA:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBLZMA; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBLZMA="${LTLIBLZMA}${LTLIBLZMA:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBLZMA="${LIBLZMA}${LIBLZMA:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBLZMA="${LIBLZMA}${LIBLZMA:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBLZMA="${LIBLZMA}${LIBLZMA:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBLZMA; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBLZMA="${LIBLZMA}${LIBLZMA:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBLZMA="${LIBLZMA}${LIBLZMA:+ }$found_so" else LIBLZMA="${LIBLZMA}${LIBLZMA:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBLZMA="${LIBLZMA}${LIBLZMA:+ }$found_a" else LIBLZMA="${LIBLZMA}${LIBLZMA:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'lzma'; then LIBLZMA_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'lzma'; then LIBLZMA_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'lzma'; then LIBLZMA_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCLZMA; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCLZMA="${INCLZMA}${INCLZMA:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then saved_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$saved_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBLZMA; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBLZMA="${LIBLZMA}${LIBLZMA:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBLZMA; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBLZMA="${LTLIBLZMA}${LTLIBLZMA:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBLZMA="${LIBLZMA}${LIBLZMA:+ }$dep" LTLIBLZMA="${LTLIBLZMA}${LTLIBLZMA:+ }$dep" ;; esac done fi else LIBLZMA="${LIBLZMA}${LIBLZMA:+ }-l$name" LTLIBLZMA="${LTLIBLZMA}${LTLIBLZMA:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_saved_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBLZMA="${LIBLZMA}${LIBLZMA:+ }$flag" else for found_dir in $rpathdirs; do acl_saved_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBLZMA="${LIBLZMA}${LIBLZMA:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBLZMA="${LTLIBLZMA}${LTLIBLZMA:+ }-R$found_dir" done fi acl_saved_CPPFLAGS="$CPPFLAGS" for element in $INCLZMA; do haveit= for x in $CPPFLAGS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for liblzma" >&5 printf %s "checking for liblzma... " >&6; } if test ${ac_cv_liblzma+y} then : printf %s "(cached) " >&6 else case e in #( e) acl_saved_LIBS="$LIBS" case " $LIBLZMA" in *" -l"*) LIBS="$LIBS $LIBLZMA" ;; *) LIBS="$LIBLZMA $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <lzma.h> int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_liblzma=yes else case e in #( e) ac_cv_liblzma='no' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$acl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_liblzma" >&5 printf "%s\n" "$ac_cv_liblzma" >&6; } if test "$ac_cv_liblzma" = yes; then HAVE_LIBLZMA=yes printf "%s\n" "#define HAVE_LIBLZMA 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with liblzma" >&5 printf %s "checking how to link with liblzma... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBLZMA" >&5 printf "%s\n" "$LIBLZMA" >&6; } else HAVE_LIBLZMA=no CPPFLAGS="$acl_saved_CPPFLAGS" LIBLZMA= LTLIBLZMA= LIBLZMA_PREFIX= fi use_additional=yes acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" # Check whether --with-libtiff-prefix was given. if test ${with_libtiff_prefix+y} then : withval=$with_libtiff_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBTIFF= LTLIBTIFF= INCTIFF= LIBTIFF_PREFIX= HAVE_LIBTIFF= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='tiff ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBTIFF="${LIBTIFF}${LIBTIFF:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBTIFF="${LTLIBTIFF}${LTLIBTIFF:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBTIFF; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBTIFF="${LTLIBTIFF}${LTLIBTIFF:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBTIFF="${LIBTIFF}${LIBTIFF:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBTIFF="${LIBTIFF}${LIBTIFF:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBTIFF="${LIBTIFF}${LIBTIFF:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBTIFF; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBTIFF="${LIBTIFF}${LIBTIFF:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBTIFF="${LIBTIFF}${LIBTIFF:+ }$found_so" else LIBTIFF="${LIBTIFF}${LIBTIFF:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBTIFF="${LIBTIFF}${LIBTIFF:+ }$found_a" else LIBTIFF="${LIBTIFF}${LIBTIFF:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'tiff'; then LIBTIFF_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'tiff'; then LIBTIFF_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'tiff'; then LIBTIFF_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCTIFF; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCTIFF="${INCTIFF}${INCTIFF:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then saved_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$saved_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBTIFF; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBTIFF="${LIBTIFF}${LIBTIFF:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBTIFF; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBTIFF="${LTLIBTIFF}${LTLIBTIFF:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBTIFF="${LIBTIFF}${LIBTIFF:+ }$dep" LTLIBTIFF="${LTLIBTIFF}${LTLIBTIFF:+ }$dep" ;; esac done fi else LIBTIFF="${LIBTIFF}${LIBTIFF:+ }-l$name" LTLIBTIFF="${LTLIBTIFF}${LTLIBTIFF:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_saved_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBTIFF="${LIBTIFF}${LIBTIFF:+ }$flag" else for found_dir in $rpathdirs; do acl_saved_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBTIFF="${LIBTIFF}${LIBTIFF:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBTIFF="${LTLIBTIFF}${LTLIBTIFF:+ }-R$found_dir" done fi acl_saved_CPPFLAGS="$CPPFLAGS" for element in $INCTIFF; do haveit= for x in $CPPFLAGS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libtiff" >&5 printf %s "checking for libtiff... " >&6; } if test ${ac_cv_libtiff+y} then : printf %s "(cached) " >&6 else case e in #( e) acl_saved_LIBS="$LIBS" case " $LIBTIFF" in *" -l"*) LIBS="$LIBS $LIBTIFF" ;; *) LIBS="$LIBTIFF $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <tiffio.h> void junk(void) {TIFF *tif=TIFFOpen("junk", "r");} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_libtiff=yes else case e in #( e) ac_cv_libtiff='no' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$acl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libtiff" >&5 printf "%s\n" "$ac_cv_libtiff" >&6; } if test "$ac_cv_libtiff" = yes; then HAVE_LIBTIFF=yes printf "%s\n" "#define HAVE_LIBTIFF 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libtiff" >&5 printf %s "checking how to link with libtiff... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBTIFF" >&5 printf "%s\n" "$LIBTIFF" >&6; } else HAVE_LIBTIFF=no CPPFLAGS="$acl_saved_CPPFLAGS" LIBTIFF= LTLIBTIFF= LIBTIFF_PREFIX= fi fi if test "x$LIBTIFF" = x then : missing_optional_lib=yes; has_libtiff=no; anywarnings=yes else case e in #( e) LIBS="$LIBTIFF $LIBS" if test "x$enable_shared" = "xno" then : LDADD="$LIBTIFF $LDADD" else case e in #( e) LDADD="$LTLIBTIFF $LDADD" ;; esac fi ;; esac fi if test "x$has_libtiff" = "xyes"; then COND_HASLIBTIFF_TRUE= COND_HASLIBTIFF_FALSE='#' else COND_HASLIBTIFF_TRUE='#' COND_HASLIBTIFF_FALSE= fi # libgit2 (very old versions of libgit2 don't have the 'git_libgit2_init'). # Check whether --with-libgit2 was given. if test ${with_libgit2+y} then : withval=$with_libgit2; else case e in #( e) with_libgit2=yes ;; esac fi if test "x$with_libgit2" != xno then : use_additional=yes acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" # Check whether --with-libgit2-prefix was given. if test ${with_libgit2_prefix+y} then : withval=$with_libgit2_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBGIT2= LTLIBGIT2= INCGIT2= LIBGIT2_PREFIX= HAVE_LIBGIT2= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='git2 ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBGIT2="${LIBGIT2}${LIBGIT2:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBGIT2="${LTLIBGIT2}${LTLIBGIT2:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBGIT2; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext" -a "X$enable_shared" = "Xyes"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBGIT2="${LTLIBGIT2}${LTLIBGIT2:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBGIT2="${LIBGIT2}${LIBGIT2:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBGIT2="${LIBGIT2}${LIBGIT2:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBGIT2="${LIBGIT2}${LIBGIT2:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBGIT2; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBGIT2="${LIBGIT2}${LIBGIT2:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBGIT2="${LIBGIT2}${LIBGIT2:+ }$found_so" else LIBGIT2="${LIBGIT2}${LIBGIT2:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBGIT2="${LIBGIT2}${LIBGIT2:+ }$found_a" else LIBGIT2="${LIBGIT2}${LIBGIT2:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'git2'; then LIBGIT2_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'git2'; then LIBGIT2_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'git2'; then LIBGIT2_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCGIT2; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCGIT2="${INCGIT2}${INCGIT2:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then saved_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$saved_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBGIT2; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBGIT2="${LIBGIT2}${LIBGIT2:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBGIT2; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBGIT2="${LTLIBGIT2}${LTLIBGIT2:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBGIT2="${LIBGIT2}${LIBGIT2:+ }$dep" LTLIBGIT2="${LTLIBGIT2}${LTLIBGIT2:+ }$dep" ;; esac done fi else LIBGIT2="${LIBGIT2}${LIBGIT2:+ }-l$name" LTLIBGIT2="${LTLIBGIT2}${LTLIBGIT2:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_saved_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBGIT2="${LIBGIT2}${LIBGIT2:+ }$flag" else for found_dir in $rpathdirs; do acl_saved_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_saved_libdir" LIBGIT2="${LIBGIT2}${LIBGIT2:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBGIT2="${LTLIBGIT2}${LTLIBGIT2:+ }-R$found_dir" done fi acl_saved_CPPFLAGS="$CPPFLAGS" for element in $INCGIT2; do haveit= for x in $CPPFLAGS; do acl_saved_prefix="$prefix" prefix="$acl_final_prefix" acl_saved_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_saved_exec_prefix" prefix="$acl_saved_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libgit2" >&5 printf %s "checking for libgit2... " >&6; } if test ${ac_cv_libgit2+y} then : printf %s "(cached) " >&6 else case e in #( e) acl_saved_LIBS="$LIBS" case " $LIBGIT2" in *" -l"*) LIBS="$LIBS $LIBGIT2" ;; *) LIBS="$LIBGIT2 $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <git2.h> void junk(void) {git_libgit2_init();} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_libgit2=yes else case e in #( e) ac_cv_libgit2='no' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$acl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libgit2" >&5 printf "%s\n" "$ac_cv_libgit2" >&6; } if test "$ac_cv_libgit2" = yes; then HAVE_LIBGIT2=yes printf "%s\n" "#define HAVE_LIBGIT2 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libgit2" >&5 printf %s "checking how to link with libgit2... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBGIT2" >&5 printf "%s\n" "$LIBGIT2" >&6; } else HAVE_LIBGIT2=no CPPFLAGS="$acl_saved_CPPFLAGS" LIBGIT2= LTLIBGIT2= LIBGIT2_PREFIX= fi fi if test "x$LIBGIT2" = x then : missing_optional_lib=yes; has_libgit2=0 else case e in #( e) LIBS="$LIBGIT2 $LIBS" if test "x$enable_shared" = "xno" then : LDADD="$LIBGIT2 $LDADD" else case e in #( e) LDADD="$LTLIBGIT2 $LDADD" ;; esac fi ;; esac fi HAVE_LIBGIT2_FOR_CONF=$has_libgit2 printf "%s\n" "#define GAL_CONFIG_HAVE_LIBGIT2 $has_libgit2" >>confdefs.h if test "x$has_libgit2" = "x1" then : else case e in #( e) anywarnings=yes ;; esac fi # Check if the compiler works with static linking if test "$lt_cv_prog_compiler_static_works" = no then : if test "$enable_shared" = no then : anywarnings=yes; enable_shared_disabled=yes fi enable_shared=yes fi # End of library linking list # --------------------------- # # If we are in static mode, convert any string ending in 'libpthread.a' to # '-lpthread' (because pthread is part of the C library and atleast in # Gnuastro's usage so far, can't be statically linked (gives errors on # undefined symbols like '_dl_pagesize' or '_dl_init_static_tls'). if test "x$enable_shared" = "xno" then : LDADD=$(printf "%s\n" "$LDADD" \ | $AWK '{for(i=1; i<=NF; ++i) { \ if( $i ~ /libpthread.a/ ) \ $i="-lpthread" } \ print $0}') fi # Higher-level library tests # -------------------------- # # Once we know that a library exsits, we need to check if it has some # features or not. This must be done _after_ checking the existance of # _all_ the libraries, because they may add elements to 'LIBS'/'LDADD' that # causes possibly different versions of the libraries to be read. # GSL's 'gsl_interp_steffen' isn't a function. So we'll need to use # 'AC_LINK_IFELSE'. However, AC_LINK_IFELSE doesn't use 'LDADD', so we'll # have to temporarily add 'LDADD' to LIBS, then set it back to the # original. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if GSL supports Steffen splines" >&5 printf %s "checking if GSL supports Steffen splines... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <gsl/gsl_interp.h> int main (void) { const gsl_interp_type *itype=gsl_interp_steffen; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } gsl_version_old=no; has_gsl_steffen=1; else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } gsl_version_old=yes; has_gsl_steffen=0; anywarnings=yes; ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext printf "%s\n" "#define GAL_CONFIG_HAVE_GSL_INTERP_STEFFEN $has_gsl_steffen" >>confdefs.h HAVE_GSL_STEFFEN=$has_gsl_steffen # If the CFITSIO library has the 'fits_is_reentrant' function (it was added # since version 3.30 of April 2012). { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fits_is_reentrant in -lcfitsio" >&5 printf %s "checking for fits_is_reentrant in -lcfitsio... " >&6; } if test ${ac_cv_lib_cfitsio_fits_is_reentrant+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lcfitsio -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char fits_is_reentrant (void); int main (void) { return fits_is_reentrant (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_cfitsio_fits_is_reentrant=yes else case e in #( e) ac_cv_lib_cfitsio_fits_is_reentrant=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cfitsio_fits_is_reentrant" >&5 printf "%s\n" "$ac_cv_lib_cfitsio_fits_is_reentrant" >&6; } if test "x$ac_cv_lib_cfitsio_fits_is_reentrant" = xyes then : has_fits_is_reentrant=1 else case e in #( e) has_fits_is_reentrant=0; anywarnings=yes ;; esac fi printf "%s\n" "#define GAL_CONFIG_HAVE_FITS_IS_REENTRANT $has_fits_is_reentrant" >>confdefs.h HAVE_FITS_IS_REENTRANT=$has_fits_is_reentrant # If the WCS library has the 'wcslib_version' function. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wcslib_version in -lwcs" >&5 printf %s "checking for wcslib_version in -lwcs... " >&6; } if test ${ac_cv_lib_wcs_wcslib_version+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lwcs -lcfitsio -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char wcslib_version (void); int main (void) { return wcslib_version (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_wcs_wcslib_version=yes else case e in #( e) ac_cv_lib_wcs_wcslib_version=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_wcs_wcslib_version" >&5 printf "%s\n" "$ac_cv_lib_wcs_wcslib_version" >&6; } if test "x$ac_cv_lib_wcs_wcslib_version" = xyes then : has_wcslib_version=1 else case e in #( e) has_wcslib_version=0; anywarnings=yes ;; esac fi printf "%s\n" "#define GAL_CONFIG_HAVE_WCSLIB_VERSION $has_wcslib_version" >>confdefs.h HAVE_WCSLIB_VERSION=$has_wcslib_version # If the WCS library supports distortion ac_fn_c_check_header_compile "$LINENO" "wcslib/dis.h" "ac_cv_header_wcslib_dis_h" "$ac_includes_default" if test "x$ac_cv_header_wcslib_dis_h" = xyes then : has_wcslib_dis_h=1 else case e in #( e) has_wcslib_dis_h=0; anywarnings=yes ;; esac fi printf "%s\n" "#define GAL_CONFIG_HAVE_WCSLIB_DIS_H $has_wcslib_dis_h" >>confdefs.h HAVE_WCSLIB_DIS_H=$has_wcslib_dis_h if test "x$has_wcslib_dis_h" = "x1"; then COND_HASWCSDIS_H_TRUE= COND_HASWCSDIS_H_FALSE='#' else COND_HASWCSDIS_H_TRUE='#' COND_HASWCSDIS_H_FALSE= fi # If the WCS library has the 'mjdref' element. ac_fn_c_check_member "$LINENO" "struct wcsprm" "mjdref" "ac_cv_member_struct_wcsprm_mjdref" "#include <wcslib/wcs.h> " if test "x$ac_cv_member_struct_wcsprm_mjdref" = xyes then : has_wcslib_mjdref=1 else case e in #( e) has_wcslib_mjdref=0 ;; esac fi printf "%s\n" "#define GAL_CONFIG_HAVE_WCSLIB_MJDREF $has_wcslib_mjdref" >>confdefs.h HAVE_WCSLIB_MJDREF=$has_wcslib_mjdref # If the WCS library has the OBSFIX macro. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } if test ${ac_cv_c_undeclared_builtin_options+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CFLAGS=$CFLAGS ac_cv_c_undeclared_builtin_options='cannot detect' for ac_arg in '' -fno-builtin; do CFLAGS="$ac_save_CFLAGS $ac_arg" # This test program should *not* compile successfully. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { (void) strchr; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) # This test program should compile successfully. # No library function is consistently available on # freestanding implementations, so test against a dummy # declaration. Include always-available headers on the # off chance that they somehow elicit warnings. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <limits.h> #include <stdarg.h> #include <stddef.h> extern void ac_decl (int, char *); int main (void) { (void) ac_decl (0, (char *) 0); (void) ac_decl; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test x"$ac_arg" = x then : ac_cv_c_undeclared_builtin_options='none needed' else case e in #( e) ac_cv_c_undeclared_builtin_options=$ac_arg ;; esac fi break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done CFLAGS=$ac_save_CFLAGS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } case $ac_cv_c_undeclared_builtin_options in #( 'cannot detect') : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot make $CC report undeclared builtins See 'config.log' for more details" "$LINENO" 5; } ;; #( 'none needed') : ac_c_undeclared_builtin_options='' ;; #( *) : ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; esac ac_fn_check_decl "$LINENO" "OBSFIX" "ac_cv_have_decl_OBSFIX" "#include <wcslib/wcsfix.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_OBSFIX" = xyes then : has_wcslib_obsfix=1 else case e in #( e) has_wcslib_obsfix=0 ;; esac fi printf "%s\n" "#define GAL_CONFIG_HAVE_WCSLIB_OBSFIX $has_wcslib_obsfix" >>confdefs.h HAVE_WCSLIB_OBSFIX=$has_wcslib_obsfix # If the WCS library has the 'wcsccs' function. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wcsccs in -lwcs" >&5 printf %s "checking for wcsccs in -lwcs... " >&6; } if test ${ac_cv_lib_wcs_wcsccs+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lwcs -lcfitsio -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char wcsccs (void); int main (void) { return wcsccs (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_wcs_wcsccs=yes else case e in #( e) ac_cv_lib_wcs_wcsccs=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_wcs_wcsccs" >&5 printf "%s\n" "$ac_cv_lib_wcs_wcsccs" >&6; } if test "x$ac_cv_lib_wcs_wcsccs" = xyes then : has_wcslib_wcsccs=1 else case e in #( e) has_wcslib_wcsccs=0; anywarnings=yes ;; esac fi printf "%s\n" "#define GAL_CONFIG_HAVE_WCSLIB_WCSCCS $has_wcslib_wcsccs" >>confdefs.h HAVE_WCSLIB_WCSCCS=$has_wcslib_wcsccs # If the pthreads library has 'pthread_barrier_wait'. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_barrier_wait in -lpthread" >&5 printf %s "checking for pthread_barrier_wait in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_barrier_wait+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_barrier_wait (void); int main (void) { return pthread_barrier_wait (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_barrier_wait=yes else case e in #( e) ac_cv_lib_pthread_pthread_barrier_wait=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_barrier_wait" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_barrier_wait" >&6; } if test "x$ac_cv_lib_pthread_pthread_barrier_wait" = xyes then : has_pthread_barrier=1 else case e in #( e) has_pthread_barrier=0 ;; esac fi printf "%s\n" "#define GAL_CONFIG_HAVE_PTHREAD_BARRIER $has_pthread_barrier" >>confdefs.h HAVE_PTHREAD_BARRIER=$has_pthread_barrier # If a GNU Make header can be found (for Gnuastro's GNU Make extensions) ac_fn_c_check_header_compile "$LINENO" "gnumake.h" "ac_cv_header_gnumake_h" "$ac_includes_default" if test "x$ac_cv_header_gnumake_h" = xyes then : has_gnumake_h=1 else case e in #( e) has_gnumake_h=0; anywarnings=yes ;; esac fi printf "%s\n" "#define GAL_CONFIG_HAVE_GNUMAKE_H $has_gnumake_h" >>confdefs.h HAVE_GNUMAKE_H=$has_gnumake_h if test "x$has_gnumake_h" = "x1"; then COND_HASGNUMAKE_H_TRUE= COND_HASGNUMAKE_H_FALSE='#' else COND_HASGNUMAKE_H_TRUE='#' COND_HASGNUMAKE_H_FALSE= fi # Programs # -------- # Help2man: # Extract the first word of "help2man", so it can be a program name with args. set dummy help2man; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_has_help2man+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$has_help2man"; then ac_cv_prog_has_help2man="$has_help2man" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_has_help2man="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_help2man" && ac_cv_prog_has_help2man="no" fi ;; esac fi has_help2man=$ac_cv_prog_has_help2man if test -n "$has_help2man"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_help2man" >&5 printf "%s\n" "$has_help2man" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$has_help2man" = "xyes"; then COND_HASHELP2MAN_TRUE= COND_HASHELP2MAN_FALSE='#' else COND_HASHELP2MAN_TRUE='#' COND_HASHELP2MAN_FALSE= fi # cURL: # Extract the first word of "curl", so it can be a program name with args. set dummy curl; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_has_curl+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$has_curl"; then ac_cv_prog_has_curl="$has_curl" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_has_curl="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_curl" && ac_cv_prog_has_curl="no" fi ;; esac fi has_curl=$ac_cv_prog_has_curl if test -n "$has_curl"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_curl" >&5 printf "%s\n" "$has_curl" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$has_curl" = "xno" then : anywarnings=yes fi # Check the libtool executable on the system. Note that Gnuastro also ships # with a version of Libtool. We don't want Gnuastro's Libtool, here we want # to see if the system has libtool independent of Gnuastro so BuildProgram # can use it later. We also need to check some shells to run libtool within # them. # Extract the first word of "libtool", so it can be a program name with args. set dummy libtool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_has_libtool+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$has_libtool"; then ac_cv_prog_has_libtool="$has_libtool" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_has_libtool="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_libtool" && ac_cv_prog_has_libtool="no" fi ;; esac fi has_libtool=$ac_cv_prog_has_libtool if test -n "$has_libtool"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_libtool" >&5 printf "%s\n" "$has_libtool" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "bash", so it can be a program name with args. set dummy bash; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_has_bash+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$has_bash"; then ac_cv_prog_has_bash="$has_bash" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_has_bash="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_bash" && ac_cv_prog_has_bash="no" fi ;; esac fi has_bash=$ac_cv_prog_has_bash if test -n "$has_bash"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_bash" >&5 printf "%s\n" "$has_bash" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "zsh", so it can be a program name with args. set dummy zsh; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_has_zsh+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$has_zsh"; then ac_cv_prog_has_zsh="$has_zsh" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_has_zsh="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_zsh" && ac_cv_prog_has_zsh="no" fi ;; esac fi has_zsh=$ac_cv_prog_has_zsh if test -n "$has_zsh"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_zsh" >&5 printf "%s\n" "$has_zsh" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # If Libtool is present, make sure it is GNU Libtool if test "x$has_libtool" = "xyes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool executable is GNU" >&5 printf %s "checking if libtool executable is GNU... " >&6; } if libtool --version 2> /dev/null | grep GNU 2>&1 > /dev/null then : has_gnulibtool=yes else case e in #( e) has_gnulibtool=no ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_gnulibtool " >&5 printf "%s\n" "$has_gnulibtool " >&6; } else case e in #( e) has_gnulibtool=no ;; esac fi # When either the 'libtool' executable isn't GNU or it doesn't exist, then # look for 'glibtool'. if test "x$has_gnulibtool" = "xyes" then : gnulibtool_exec=libtool else case e in #( e) # Extract the first word of "glibtool", so it can be a program name with args. set dummy glibtool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_has_glibtool+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$has_glibtool"; then ac_cv_prog_has_glibtool="$has_glibtool" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_has_glibtool="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_glibtool" && ac_cv_prog_has_glibtool="no" fi ;; esac fi has_glibtool=$ac_cv_prog_has_glibtool if test -n "$has_glibtool"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_glibtool" >&5 printf "%s\n" "$has_glibtool" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$has_glibtool" = "xyes" then : has_gnulibtool=yes; gnulibtool_exec=glibtool else case e in #( e) has_gnulibtool=no; anywarnings=yes ;; esac fi ;; esac fi # Older versions of GNU Libtool have problems with the 'dash' shell (a # minimalist shell) and will crash (due to not having the '+=' operator), # see bug #54430. So we need to check if the system's libtool and shell # (called by 'sh' as in C's 'system' function within BuildProgram) can work # with each other. If not, we need to search for Bash and tell BuildProgram # to use Bash instead of the default. But older versions of Bash also don't # support this operator, so we'll have to check with Bash is well. libtool_shell="none" if test "x$has_gnulibtool" = "xyes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shell to use with libtool" >&5 printf %s "checking for shell to use with libtool... " >&6; } # Make a C source file and run Libtool on it with the specified # shells. outname=libtool_shell_test cprog=libtool_shell_test.c printf "%s\n" "#include <stdio.h>" > $cprog printf "%s\n" "int main(void){printf(\"success\\n\"); return 0;}" >> $cprog ltargs="--quiet --tag=CC --mode=link $CC $cprog -O3 -o $outname" # Check the shells, starting with known shells and ultimately # trying with 'sh' (can be any shell). if test "x$has_bash" = "xyes" then : if bash -c "$gnulibtool_exec $ltargs" > /dev/null 2>&1 then : libtool_shell="bash" else case e in #( e) bash_version=$BASH_VERSION ;; esac fi else case e in #( e) if test "x$has_zsh" = "xyes" then : if zsh -c "$gnulibtool_exec $ltargs" > /dev/null 2>&1 then : libtool_shell="zsh" fi else case e in #( e) if sh -c "$gnulibtool_exec $ltargs" > /dev/null 2>&1 then : libtool_shell="sh" fi ;; esac fi ;; esac fi # Clean up: note that no output might have been generated (when no # proper shell was found). Therefore, for deleting the output file, # we'll call 'rm' with '-f' so it doesn't complain with an error in # such cases. rm $cprog rm -f $outname { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libtool_shell" >&5 printf "%s\n" "$libtool_shell" >&6; } fi # If a good shell to call Libtool could be found, then Libtool is usable # within a program (BuildProgram in this case). if test "x$libtool_shell" = "xnone" then : anywarnings=yes; usable_libtool=no; if test "x$bash_version" = x then : junk=1 else case e in #( e) printf "%s\n" "GNU Bash was found but not a suitable version: $bash_version" ;; esac fi else case e in #( e) usable_libtool=yes printf "%s\n" "#define GAL_CONFIG_GNULIBTOOL_SHELL \"$libtool_shell\"" >>confdefs.h printf "%s\n" "#define GAL_CONFIG_GNULIBTOOL_EXEC \"$gnulibtool_exec\"" >>confdefs.h ;; esac fi # Check Ghostscript: "-dPDFFitPage" option to Ghostscript, used by the # library to convert from EPS to PDF, has been introduced in Ghostscript # 9.10. Make sure we have at least that version. # # Below, only when Ghostscript exists, we check its version and only if its # version is larger than 9.10, does Gnuastro finally assume the existence # of Ghostscript. AX_COMPARE_VERSION comes from the GNU Autoconf Archive's # ax_compare_version.m4. # Extract the first word of "gs", so it can be a program name with args. set dummy gs; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_has_ghostscript+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$has_ghostscript"; then ac_cv_prog_has_ghostscript="$has_ghostscript" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_has_ghostscript="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_ghostscript" && ac_cv_prog_has_ghostscript="no" fi ;; esac fi has_ghostscript=$ac_cv_prog_has_ghostscript if test -n "$has_ghostscript"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_ghostscript" >&5 printf "%s\n" "$has_ghostscript" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$has_ghostscript" = "xyes" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking Ghostscript version" >&5 printf %s "checking Ghostscript version... " >&6; } gsversion=$(gs --version) # Used to indicate true or false condition ax_compare_version=false # Convert the two version strings to be compared into a format that # allows a simple string comparison. The end result is that a version # string of the form 1.12.5-r617 will be converted to the form # 0001001200050617. In other words, each number is zero padded to four # digits, and non digits are removed. ax_compare_version_A=`echo "9.10" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ -e 's/[^0-9]//g'` ax_compare_version_B=`echo "$gsversion" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ -e 's/[^0-9]//g'` ax_compare_version=`echo "x$ax_compare_version_A x$ax_compare_version_B" | sed 's/^ *//' | sort | sed "s/x${ax_compare_version_A}/false/;s/x${ax_compare_version_B}/true/;1q"` if test "$ax_compare_version" = "true" ; then has_ghostscript=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gsversion " >&5 printf "%s\n" "$gsversion " >&6; } fi # Note: 'has_ghostscript' can be set to 'no' within the AS_IF above, so # 'anywarnings' cannot be an [RUN-IF-FALSE] argument to the AS_IF above. if test "x$has_ghostscript" = "xno" then : anywarnings=yes fi if test "x$has_ghostscript" = "xyes"; then COND_HASGHOSTSCRIPT_TRUE= COND_HASGHOSTSCRIPT_FALSE='#' else COND_HASGHOSTSCRIPT_TRUE='#' COND_HASGHOSTSCRIPT_FALSE= fi # Check DS9 and TOPCAT # Extract the first word of "ds9", so it can be a program name with args. set dummy ds9; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_has_ds9+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$has_ds9"; then ac_cv_prog_has_ds9="$has_ds9" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_has_ds9="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_ds9" && ac_cv_prog_has_ds9="no" fi ;; esac fi has_ds9=$ac_cv_prog_has_ds9 if test -n "$has_ds9"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_ds9" >&5 printf "%s\n" "$has_ds9" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$has_ds9" = "xno" then : anywarnings=yes fi # Extract the first word of "topcat", so it can be a program name with args. set dummy topcat; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_has_topcat+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$has_topcat"; then ac_cv_prog_has_topcat="$has_topcat" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_has_topcat="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_has_topcat" && ac_cv_prog_has_topcat="no" fi ;; esac fi has_topcat=$ac_cv_prog_has_topcat if test -n "$has_topcat"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $has_topcat" >&5 printf "%s\n" "$has_topcat" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$has_topcat" = "xno" then : anywarnings=yes fi # Check Python3 and NumPy (in that order): and gets their include path if # they do. This is done using two python scripts: # py_check_cmd: Uses the sysconfig package's get_paths method # to get the include path for Python.h header. # np_check_cmd: Uses numpy's get_include method to get the # include path for NumPy's core C-API. # # NOTE: If using a venv then set the $PYTHON variable to point to the # python3 command of the venv before running ./configure to perform # all the following checks in the venv. # Check whether --with-python was given. if test ${with_python+y} then : withval=$with_python; else case e in #( e) with_python=no ;; esac fi if test "x$with_python" == xyes then : # Variables to simplify commands below. py_check_cmd='from sysconfig import get_paths; \ print(get_paths().get("include"))' np_check_cmd='from numpy import get_include; \ print(get_include())' # Checks if user has a Python version>=3.0 if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version is >= 3.0" >&5 printf %s "checking whether $PYTHON version is >= 3.0... " >&6; } prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '3.0'.split('.'))) + [0, 0, 0] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex)" if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5 ($PYTHON -c "$prog") >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "Python interpreter is too old" "$LINENO" 5 ;; esac fi am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 3.0" >&5 printf %s "checking for a Python interpreter with version >= 3.0... " >&6; } if test ${am_cv_pathless_PYTHON+y} then : printf %s "(cached) " >&6 else case e in #( e) for am_cv_pathless_PYTHON in python python2 python3 python3.9 python3.8 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do test "$am_cv_pathless_PYTHON" = none && break prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '3.0'.split('.'))) + [0, 0, 0] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] sys.exit(sys.hexversion < minverhex)" if { echo "$as_me:$LINENO: $am_cv_pathless_PYTHON -c "$prog"" >&5 ($am_cv_pathless_PYTHON -c "$prog") >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then : break fi done ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_pathless_PYTHON" >&5 printf "%s\n" "$am_cv_pathless_PYTHON" >&6; } # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else # Extract the first word of "$am_cv_pathless_PYTHON", so it can be a program name with args. set dummy $am_cv_pathless_PYTHON; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PYTHON+y} then : printf %s "(cached) " >&6 else case e in #( e) case $PYTHON in [\\/]* | ?:[\\/]*) ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PYTHON="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PYTHON=$ac_cv_path_PYTHON if test -n "$PYTHON"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 printf "%s\n" "$PYTHON" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi am_display_PYTHON=$am_cv_pathless_PYTHON fi if test "$PYTHON" = :; then : else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 printf %s "checking for $am_display_PYTHON version... " >&6; } if test ${am_cv_python_version+y} then : printf %s "(cached) " >&6 else case e in #( e) am_cv_python_version=`$PYTHON -c "import sys; print ('%u.%u' % sys.version_info[:2])"` ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 printf "%s\n" "$am_cv_python_version" >&6; } PYTHON_VERSION=$am_cv_python_version { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 printf %s "checking for $am_display_PYTHON platform... " >&6; } if test ${am_cv_python_platform+y} then : printf %s "(cached) " >&6 else case e in #( e) am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 printf "%s\n" "$am_cv_python_platform" >&6; } PYTHON_PLATFORM=$am_cv_python_platform if test "x$prefix" = xNONE; then am__usable_prefix=$ac_default_prefix else am__usable_prefix=$prefix fi # Allow user to request using sys.* values from Python, # instead of the GNU $prefix values. # Check whether --with-python-sys-prefix was given. if test ${with_python_sys_prefix+y} then : withval=$with_python_sys_prefix; am_use_python_sys=: else case e in #( e) am_use_python_sys=false ;; esac fi # Allow user to override whatever the default Python prefix is. # Check whether --with-python_prefix was given. if test ${with_python_prefix+y} then : withval=$with_python_prefix; am_python_prefix_subst=$withval am_cv_python_prefix=$withval { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for explicit $am_display_PYTHON prefix" >&5 printf %s "checking for explicit $am_display_PYTHON prefix... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_prefix" >&5 printf "%s\n" "$am_cv_python_prefix" >&6; } else case e in #( e) if $am_use_python_sys; then # using python sys.prefix value, not GNU { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python default $am_display_PYTHON prefix" >&5 printf %s "checking for python default $am_display_PYTHON prefix... " >&6; } if test ${am_cv_python_prefix+y} then : printf %s "(cached) " >&6 else case e in #( e) am_cv_python_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"` ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_prefix" >&5 printf "%s\n" "$am_cv_python_prefix" >&6; } case $am_cv_python_prefix in $am__usable_prefix*) am__strip_prefix=`echo "$am__usable_prefix" | sed 's|.|.|g'` am_python_prefix_subst=`echo "$am_cv_python_prefix" | sed "s,^$am__strip_prefix,\\${prefix},"` ;; *) am_python_prefix_subst=$am_cv_python_prefix ;; esac else # using GNU prefix value, not python sys.prefix am_python_prefix_subst='${prefix}' am_python_prefix=$am_python_prefix_subst { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU default $am_display_PYTHON prefix" >&5 printf %s "checking for GNU default $am_display_PYTHON prefix... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_python_prefix" >&5 printf "%s\n" "$am_python_prefix" >&6; } fi ;; esac fi # Substituting python_prefix_subst value. PYTHON_PREFIX=$am_python_prefix_subst # emacs-page Now do it all over again for Python exec_prefix, but with yet # another conditional: fall back to regular prefix if that was specified. # Check whether --with-python_exec_prefix was given. if test ${with_python_exec_prefix+y} then : withval=$with_python_exec_prefix; am_python_exec_prefix_subst=$withval am_cv_python_exec_prefix=$withval { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for explicit $am_display_PYTHON exec_prefix" >&5 printf %s "checking for explicit $am_display_PYTHON exec_prefix... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_exec_prefix" >&5 printf "%s\n" "$am_cv_python_exec_prefix" >&6; } else case e in #( e) # no explicit --with-python_exec_prefix, but if # --with-python_prefix was given, use its value for python_exec_prefix too. if test -n "$with_python_prefix" then : am_python_exec_prefix_subst=$with_python_prefix am_cv_python_exec_prefix=$with_python_prefix { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python_prefix-given $am_display_PYTHON exec_prefix" >&5 printf %s "checking for python_prefix-given $am_display_PYTHON exec_prefix... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_exec_prefix" >&5 printf "%s\n" "$am_cv_python_exec_prefix" >&6; } else case e in #( e) # Set am__usable_exec_prefix whether using GNU or Python values, # since we use that variable for pyexecdir. if test "x$exec_prefix" = xNONE; then am__usable_exec_prefix=$am__usable_prefix else am__usable_exec_prefix=$exec_prefix fi # if $am_use_python_sys; then # using python sys.exec_prefix, not GNU { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for python default $am_display_PYTHON exec_prefix" >&5 printf %s "checking for python default $am_display_PYTHON exec_prefix... " >&6; } if test ${am_cv_python_exec_prefix+y} then : printf %s "(cached) " >&6 else case e in #( e) am_cv_python_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix)"` ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_exec_prefix" >&5 printf "%s\n" "$am_cv_python_exec_prefix" >&6; } case $am_cv_python_exec_prefix in $am__usable_exec_prefix*) am__strip_prefix=`echo "$am__usable_exec_prefix" | sed 's|.|.|g'` am_python_exec_prefix_subst=`echo "$am_cv_python_exec_prefix" | sed "s,^$am__strip_prefix,\\${exec_prefix},"` ;; *) am_python_exec_prefix_subst=$am_cv_python_exec_prefix ;; esac else # using GNU $exec_prefix, not python sys.exec_prefix am_python_exec_prefix_subst='${exec_prefix}' am_python_exec_prefix=$am_python_exec_prefix_subst { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU default $am_display_PYTHON exec_prefix" >&5 printf %s "checking for GNU default $am_display_PYTHON exec_prefix... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_python_exec_prefix" >&5 printf "%s\n" "$am_python_exec_prefix" >&6; } fi ;; esac fi ;; esac fi # Substituting python_exec_prefix_subst. PYTHON_EXEC_PREFIX=$am_python_exec_prefix_subst # Factor out some code duplication into this shell variable. am_python_setup_sysconfig="\ import sys # Prefer sysconfig over distutils.sysconfig, for better compatibility # with python 3.x. See automake bug#10227. try: import sysconfig except ImportError: can_use_sysconfig = 0 else: can_use_sysconfig = 1 # Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: # <https://github.com/pypa/virtualenv/issues/118> try: from platform import python_implementation if python_implementation() == 'CPython' and sys.version[:3] == '2.7': can_use_sysconfig = 0 except ImportError: pass" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory (pythondir)" >&5 printf %s "checking for $am_display_PYTHON script directory (pythondir)... " >&6; } if test ${am_cv_python_pythondir+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$am_cv_python_prefix" = x; then am_py_prefix=$am__usable_prefix else am_py_prefix=$am_cv_python_prefix fi am_cv_python_pythondir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` # case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,\\${PYTHON_PREFIX},"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir="\${PYTHON_PREFIX}/lib/python$PYTHON_VERSION/site-packages" ;; esac ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 printf "%s\n" "$am_cv_python_pythondir" >&6; } pythondir=$am_cv_python_pythondir pkgpythondir=\${pythondir}/$PACKAGE { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory (pyexecdir)" >&5 printf %s "checking for $am_display_PYTHON extension module directory (pyexecdir)... " >&6; } if test ${am_cv_python_pyexecdir+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$am_cv_python_exec_prefix" = x; then am_py_exec_prefix=$am__usable_exec_prefix else am_py_exec_prefix=$am_cv_python_exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_exec_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_exec_prefix') sys.stdout.write(sitedir)"` # case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,\\${PYTHON_EXEC_PREFIX},"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir="\${PYTHON_EXEC_PREFIX}/lib/python$PYTHON_VERSION/site-packages" ;; esac ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 printf "%s\n" "$am_cv_python_pyexecdir" >&6; } pyexecdir=$am_cv_python_pyexecdir pkgpyexecdir=\${pyexecdir}/$PACKAGE fi if test "$PYTHON" != : then : printf "%s\n" "#define HAVE_PYTHON 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if Numpy is available in the $PYTHON installation" >&5 printf %s "checking if Numpy is available in the $PYTHON installation... " >&6; } if $PYTHON -c "$py_check_cmd" &> /dev/null then : python_includedir="$($PYTHON -c "$py_check_cmd")" if $PYTHON -c "$np_check_cmd" &> /dev/null then : numpy_includedir="$($PYTHON -c "$np_check_cmd")" fi fi if test "x$numpy_includedir" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi fi NUMPY_INCLUDE_DIR=$numpy_includedir PYTHON_INCLUDE_DIR=$python_includedir fi if test "x$numpy_includedir" = x then : has_numpy=0 else case e in #( e) has_numpy=1; ;; esac fi HAVE_PYTHON=$has_numpy if test "x$numpy_includedir" != x; then COND_NUMPY_TRUE= COND_NUMPY_FALSE='#' else COND_NUMPY_TRUE='#' COND_NUMPY_FALSE= fi # If any necessary dependency is missing inform the user and abort. if test "x$missing_mandatory" = "xyes" then : # List missing packages: print the GSL CBLAS message only if GSL is # present. Otherwise, it is just confusing for the users (CBLAS # will be installed with GSL). The CBLAS message is only # interesting if the GSL test has passed. printf "%s\n" "" printf "%s\n" "Missing MANDATORY dependencies (necessary to continue):" if test "x$has_cmath" = "xno" then : printf "%s\n" " - C library (math): This may be the cause of all other failures." fi if test "x$has_gsl" = "xno" then : printf "%s\n" " - GNU Scientific Library (GSL): https://www.gnu.org/software/gsl" else case e in #( e) if test "x$has_gslcblas" = "xno" then : printf "%s\n" " - The BLAS support of GNU Scientific Library (GSL). This should have" printf "%s\n" " been installed along with GSL. Try re-installing GSL." fi ;; esac fi if test "x$has_cfitsio" = "xno" then : printf "%s\n" " - CFITSIO: https://heasarc.gsfc.nasa.gov/fitsio" fi if test "x$has_wcslib" = "xno" then : printf "%s\n" " - WCSLIB: http://www.atnf.csiro.au/people/mcalabre/WCS" fi # Optional dependencies: if test "x$anywarnings" = xyes then : printf "%s\n" "" printf "%s\n" "OPTIONAL warnings/dependencies (for improved functionality):" if test "x$gsl_version_old" = "xyes" then : printf "%s\n" " - Old GSL version: https://www.gnu.org/s/gsl" fi if test "x$has_libjpeg" = "xno" then : printf "%s\n" " - Missing Libjpeg (JPEG files): http://ijg.org" fi if test "x$has_libtiff" = "xno" then : printf "%s\n" " - Missing Libtiff (TIFF files): http://libtiff.maptools.org" fi if test "x$has_libgit2" = "x0" then : printf "%s\n" " - Missing Libgit2: https://libgit2.org" fi if test "x$has_curl" = "x0" then : printf "%s\n" " - Missing cURL: https://curl.haxx.se" fi if test "x$has_ds9" = "xno" then : printf "%s\n" " - Missing SAO DS9: https://sites.google.com/cfa.harvard.edu/saoimageds9" fi if test "x$has_topcat" = "xno" then : printf "%s\n" " - Missing TOPCAT: http://www.star.bris.ac.uk/~mbt/topcat/" fi if test "x$usable_libtool" = "xno" then : printf "%s\n" " - Unusable GNU Libtool: https://www.gnu.org/s/libtool" if test "x$has_gnulibtool" = "xyes" then : printf "%s\n" " -- GNU Libtool is present, tested shells not supported." fi if test "x$has_libtool" = "xyes" then : printf "%s\n" " -- A libtool implementation was found, but it isn't GNU." fi fi if test "x$has_ghostscript" = "xno" then : printf "%s\n" " - Missing GPL Ghostscript (v9.10 or later): https://www.ghostscript.com" fi fi # Suggestions on fixing the problem. printf "%s\n" "" printf "%s\n" "You can use your package manager for easy and fast installation of all" printf "%s\n" "dependencies in one command. See the link below:" printf "%s\n" " https://www.gnu.org/s/gnuastro/manual/html_node/Dependencies-from-package-managers.html" printf "%s\n" "" printf "%s\n" "If you have already installed a dependency (for example in '/install/path')," printf "%s\n" "but this script can't link with it, add the path to the LDFLAGS, CPPFLAGS and" printf "%s\n" "LD_LIBRARY_PATH environment variables before running configure. For example" printf "%s\n" "with the following commands (just correct the '/install/path' part)." printf "%s\n" " $ export LDFLAGS=\"\$LDFLAGS -L/install/path/lib\"" printf "%s\n" " $ export CPPFLAGS=\"\$CPPFLAGS -I/install/path/include\"" printf "%s\n" " $ export LD_LIBRARY_PATH=\"\$LD_LIBRARY_PATH:/install/path/lib\"" printf "%s\n" "" printf "%s\n" "TIP: Put these commands in your startup file (for example '~/.bashrc') to" printf "%s\n" "avoid similar problems later. See the link below to learn more:" printf "%s\n" " https://www.gnu.org/s/gnuastro/manual/html_node/Installation-directory.html" printf "%s\n" "" printf "%s\n" "" as_fn_error $? "Mandatory dependency(s) missing, === SEE MESSAGE ABOVE ===." "$LINENO" 5 fi # Gnulib checks (which are many!). We are doing these after the main # Gnuastro dependencies so the configure script crashes early if the # mandatory dependencies aren't present. However, the Gnulib checks are # very low-level, and the changes in envornment that we made above (in # particular 'LIBS') can cause conflicts with Gnulib's checks (in # particular with WCSLIB, because on some systems, WCSLIB's library name: # 'libwcs' can cause conflicts with the standard wide-character-string # library: 'libwcs'). new_LIBS="$LIBS" LIBS="$orig_LIBS" # Check whether --enable-cross-guesses was given. if test ${enable_cross_guesses+y} then : enableval=$enable_cross_guesses; if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-cross-guesses" >&5 printf "%s\n" "$as_me: WARNING: invalid argument supplied to --enable-cross-guesses" >&2;} enableval=conservative fi gl_cross_guesses="$enableval" else case e in #( e) gl_cross_guesses=conservative ;; esac fi if test $gl_cross_guesses = risky; then gl_cross_guess_normal="guessing yes" gl_cross_guess_inverted="guessing no" else gl_cross_guess_normal="guessing no" gl_cross_guess_inverted="guessing yes" fi LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ HAVE_CHOWN=1; HAVE_COPY_FILE_RANGE=1; HAVE_DUP3=1; HAVE_EUIDACCESS=1; HAVE_EXECVPE=1; HAVE_FACCESSAT=1; HAVE_FCHDIR=1; HAVE_FCHOWNAT=1; HAVE_FDATASYNC=1; HAVE_FSYNC=1; HAVE_FTRUNCATE=1; HAVE_GETDTABLESIZE=1; HAVE_GETENTROPY=1; HAVE_GETGROUPS=1; HAVE_GETHOSTNAME=1; HAVE_GETLOGIN=1; HAVE_GETPAGESIZE=1; HAVE_GETPASS=1; HAVE_GROUP_MEMBER=1; HAVE_LCHOWN=1; HAVE_LINK=1; HAVE_LINKAT=1; HAVE_PIPE=1; HAVE_PIPE2=1; HAVE_PREAD=1; HAVE_PWRITE=1; HAVE_READLINK=1; HAVE_READLINKAT=1; HAVE_SETHOSTNAME=1; HAVE_SLEEP=1; HAVE_SYMLINK=1; HAVE_SYMLINKAT=1; HAVE_UNLINKAT=1; HAVE_USLEEP=1; HAVE_DECL_ENVIRON=1; HAVE_DECL_EXECVPE=1; HAVE_DECL_FCHDIR=1; HAVE_DECL_FDATASYNC=1; HAVE_DECL_GETDOMAINNAME=1; HAVE_DECL_GETLOGIN=1; HAVE_DECL_GETLOGIN_R=1; HAVE_DECL_GETPAGESIZE=1; HAVE_DECL_GETUSERSHELL=1; HAVE_DECL_SETHOSTNAME=1; HAVE_DECL_TRUNCATE=1; HAVE_DECL_TTYNAME_R=1; HAVE_OS_H=0; HAVE_SYS_PARAM_H=0; REPLACE_ACCESS=0; REPLACE_CHOWN=0; REPLACE_CLOSE=0; REPLACE_COPY_FILE_RANGE=0; REPLACE_DUP=0; REPLACE_DUP2=0; REPLACE_DUP3=0; REPLACE_EXECL=0; REPLACE_EXECLE=0; REPLACE_EXECLP=0; REPLACE_EXECV=0; REPLACE_EXECVE=0; REPLACE_EXECVP=0; REPLACE_EXECVPE=0; REPLACE_FACCESSAT=0; REPLACE_FCHDIR=0; REPLACE_FCHOWNAT=0; REPLACE_FDATASYNC=0; REPLACE_FTRUNCATE=0; REPLACE_GETCWD=0; REPLACE_GETDOMAINNAME=0; REPLACE_GETDTABLESIZE=0; REPLACE_GETENTROPY=0; REPLACE_GETLOGIN_R=0; REPLACE_GETGROUPS=0; REPLACE_GETPAGESIZE=0; REPLACE_GETPASS=0; REPLACE_GETPASS_FOR_GETPASS_GNU=0; REPLACE_ISATTY=0; REPLACE_LCHOWN=0; REPLACE_LINK=0; REPLACE_LINKAT=0; REPLACE_LSEEK=0; REPLACE_PIPE2=0; REPLACE_PREAD=0; REPLACE_PWRITE=0; REPLACE_READ=0; REPLACE_READLINK=0; REPLACE_READLINKAT=0; REPLACE_RMDIR=0; REPLACE_SETHOSTNAME=0; REPLACE_SLEEP=0; REPLACE_SYMLINK=0; REPLACE_SYMLINKAT=0; REPLACE_TRUNCATE=0; REPLACE_TTYNAME_R=0; REPLACE_UNLINK=0; REPLACE_UNLINKAT=0; REPLACE_USLEEP=0; REPLACE_WRITE=0; UNISTD_H_HAVE_SYS_RANDOM_H=0; UNISTD_H_HAVE_WINSOCK2_H=0; UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; ac_func= for ac_item in $ac_func_c_list do if test $ac_func; then ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then echo "#define $ac_item 1" >> confdefs.h fi ac_func= else ac_func=$ac_item fi done GL_GNULIB_ACCESS=0 GL_GNULIB_CHDIR=0 GL_GNULIB_CHOWN=0 GL_GNULIB_CLOSE=0 GL_GNULIB_COPY_FILE_RANGE=0 GL_GNULIB_DUP=0 GL_GNULIB_DUP2=0 GL_GNULIB_DUP3=0 GL_GNULIB_ENVIRON=0 GL_GNULIB_EUIDACCESS=0 GL_GNULIB_EXECL=0 GL_GNULIB_EXECLE=0 GL_GNULIB_EXECLP=0 GL_GNULIB_EXECV=0 GL_GNULIB_EXECVE=0 GL_GNULIB_EXECVP=0 GL_GNULIB_EXECVPE=0 GL_GNULIB_FACCESSAT=0 GL_GNULIB_FCHDIR=0 GL_GNULIB_FCHOWNAT=0 GL_GNULIB_FDATASYNC=0 GL_GNULIB_FSYNC=0 GL_GNULIB_FTRUNCATE=0 GL_GNULIB_GETCWD=0 GL_GNULIB_GETDOMAINNAME=0 GL_GNULIB_GETDTABLESIZE=0 GL_GNULIB_GETENTROPY=0 GL_GNULIB_GETGROUPS=0 GL_GNULIB_GETHOSTNAME=0 GL_GNULIB_GETLOGIN=0 GL_GNULIB_GETLOGIN_R=0 GL_GNULIB_GETOPT_POSIX=0 GL_GNULIB_GETPAGESIZE=0 GL_GNULIB_GETPASS=0 GL_GNULIB_GETPASS_GNU=0 GL_GNULIB_GETUSERSHELL=0 GL_GNULIB_GROUP_MEMBER=0 GL_GNULIB_ISATTY=0 GL_GNULIB_LCHOWN=0 GL_GNULIB_LINK=0 GL_GNULIB_LINKAT=0 GL_GNULIB_LSEEK=0 GL_GNULIB_PIPE=0 GL_GNULIB_PIPE2=0 GL_GNULIB_PREAD=0 GL_GNULIB_PWRITE=0 GL_GNULIB_READ=0 GL_GNULIB_READLINK=0 GL_GNULIB_READLINKAT=0 GL_GNULIB_RMDIR=0 GL_GNULIB_SETHOSTNAME=0 GL_GNULIB_SLEEP=0 GL_GNULIB_SYMLINK=0 GL_GNULIB_SYMLINKAT=0 GL_GNULIB_TRUNCATE=0 GL_GNULIB_TTYNAME_R=0 GL_GNULIB_UNISTD_H_GETOPT=0 GL_GNULIB_UNISTD_H_NONBLOCKING=0 GL_GNULIB_UNISTD_H_SIGPIPE=0 GL_GNULIB_UNLINK=0 GL_GNULIB_UNLINKAT=0 GL_GNULIB_USLEEP=0 GL_GNULIB_WRITE=0 GL_GNULIB_MDA_ACCESS=1 GL_GNULIB_MDA_CHDIR=1 GL_GNULIB_MDA_CLOSE=1 GL_GNULIB_MDA_DUP=1 GL_GNULIB_MDA_DUP2=1 GL_GNULIB_MDA_EXECL=1 GL_GNULIB_MDA_EXECLE=1 GL_GNULIB_MDA_EXECLP=1 GL_GNULIB_MDA_EXECV=1 GL_GNULIB_MDA_EXECVE=1 GL_GNULIB_MDA_EXECVP=1 GL_GNULIB_MDA_EXECVPE=1 GL_GNULIB_MDA_GETCWD=1 GL_GNULIB_MDA_GETPID=1 GL_GNULIB_MDA_ISATTY=1 GL_GNULIB_MDA_LSEEK=1 GL_GNULIB_MDA_READ=1 GL_GNULIB_MDA_RMDIR=1 GL_GNULIB_MDA_SWAB=1 GL_GNULIB_MDA_UNLINK=1 GL_GNULIB_MDA_WRITE=1 ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : else case e in #( e) printf "%s\n" "#define size_t unsigned int" >>confdefs.h ;; esac fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 printf %s "checking for working alloca.h... " >&6; } if test ${ac_cv_working_alloca_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <alloca.h> int main (void) { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_working_alloca_h=yes else case e in #( e) ac_cv_working_alloca_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 printf "%s\n" "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 printf %s "checking for alloca... " >&6; } if test ${ac_cv_func_alloca_works+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_func_alloca_works=$ac_cv_working_alloca_h if test "$ac_cv_func_alloca_works" != yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <stddef.h> #ifndef alloca # ifdef __GNUC__ # define alloca __builtin_alloca # elif defined _MSC_VER # include <malloc.h> # define alloca _alloca # else # ifdef __cplusplus extern "C" # endif void *alloca (size_t); # endif #endif int main (void) { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_func_alloca_works=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 printf "%s\n" "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext printf "%s\n" "#define C_ALLOCA 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 printf %s "checking stack direction for C alloca... " >&6; } if test ${ac_cv_c_stack_direction+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : ac_cv_c_stack_direction=0 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_stack_direction=1 else case e in #( e) ac_cv_c_stack_direction=-1 ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 printf "%s\n" "$ac_cv_c_stack_direction" >&6; } printf "%s\n" "#define STACK_DIRECTION $ac_cv_c_stack_direction" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 printf %s "checking for inline... " >&6; } if test ${ac_cv_c_inline+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo (void) {return 0; } $ac_kw foo_t foo (void) {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_inline" != no && break done ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 printf "%s\n" "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 printf %s "checking for C/C++ restrict keyword... " >&6; } if test ${ac_cv_c_restrict+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_c_restrict=no # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see: # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html # Put 'restrict' last, because C++ lacks it. for ac_kw in __restrict__ __restrict _Restrict restrict; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } int main (void) { int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_restrict=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_restrict" != no && break done ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 printf "%s\n" "$ac_cv_c_restrict" >&6; } case $ac_cv_c_restrict in restrict) ;; no) printf "%s\n" "#define restrict /**/" >>confdefs.h ;; *) printf "%s\n" "#define restrict $ac_cv_c_restrict" >>confdefs.h ;; esac ac_fn_check_decl "$LINENO" "clearerr_unlocked" "ac_cv_have_decl_clearerr_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_clearerr_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_CLEARERR_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_feof_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "ferror_unlocked" "ac_cv_have_decl_ferror_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_ferror_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_FERROR_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fflush_unlocked" "ac_cv_have_decl_fflush_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fflush_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_FFLUSH_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fgets_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fputc_unlocked" "ac_cv_have_decl_fputc_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fputc_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_FPUTC_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fputs_unlocked" "ac_cv_have_decl_fputs_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fputs_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_FPUTS_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fread_unlocked" "ac_cv_have_decl_fread_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fread_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_FREAD_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fwrite_unlocked" "ac_cv_have_decl_fwrite_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fwrite_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_FWRITE_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getc_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "getchar_unlocked" "ac_cv_have_decl_getchar_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getchar_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_GETCHAR_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "putc_unlocked" "ac_cv_have_decl_putc_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_putc_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_PUTC_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "putchar_unlocked" "ac_cv_have_decl_putchar_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_putchar_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_PUTCHAR_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_strerror_r" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_STRERROR_R $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_strerror_r = yes; then # For backward compatibility's sake, define HAVE_STRERROR_R. # (We used to run AC_CHECK_FUNCS_ONCE for strerror_r, as well # as AC_CHECK_DECLS_ONCE.) printf "%s\n" "#define HAVE_STRERROR_R 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 printf %s "checking whether strerror_r returns char *... " >&6; } if test ${ac_cv_func_strerror_r_char_p+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_func_strerror_r_char_p=no if test $ac_cv_have_decl_strerror_r = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> int main (void) { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); char *p = strerror_r (0, buf, sizeof buf); return !p || x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_func_strerror_r_char_p=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 printf "%s\n" "$ac_cv_func_strerror_r_char_p" >&6; } if test $ac_cv_func_strerror_r_char_p = yes; then printf "%s\n" "#define STRERROR_R_CHAR_P 1" >>confdefs.h fi XGETTEXT_EXTRA_OPTIONS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5 printf %s "checking whether the preprocessor supports include_next... " >&6; } if test ${gl_cv_have_include_next+y} then : printf %s "(cached) " >&6 else case e in #( e) rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 cat <<EOF > conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include <stdio.h> #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_saved_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_saved_CPPFLAGS -Iconftestd1b -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <conftest.h> _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_have_include_next=yes else case e in #( e) CPPFLAGS="$gl_saved_CPPFLAGS -Iconftestd1a -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <conftest.h> _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_have_include_next=buggy else case e in #( e) gl_cv_have_include_next=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CPPFLAGS="$gl_saved_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5 printf "%s\n" "$gl_cv_have_include_next" >&6; } PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether source code line length is unlimited" >&5 printf %s "checking whether source code line length is unlimited... " >&6; } if test ${gl_cv_source_line_length_unlimited+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __TANDEM choke me #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "choke me" >/dev/null 2>&1 then : gl_cv_source_line_length_unlimited=no else case e in #( e) gl_cv_source_line_length_unlimited=yes ;; esac fi rm -rf conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_source_line_length_unlimited" >&5 printf "%s\n" "$gl_cv_source_line_length_unlimited" >&6; } if test $gl_cv_source_line_length_unlimited = no; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi HAVE_BTOWC=1; HAVE_MBSINIT=1; HAVE_MBRTOWC=1; HAVE_MBRLEN=1; HAVE_MBSRTOWCS=1; HAVE_MBSNRTOWCS=1; HAVE_WCRTOMB=1; HAVE_WCSRTOMBS=1; HAVE_WCSNRTOMBS=1; HAVE_WMEMCHR=1; HAVE_WMEMCMP=1; HAVE_WMEMCPY=1; HAVE_WMEMMOVE=1; HAVE_WMEMPCPY=1; HAVE_WMEMSET=1; HAVE_WCSLEN=1; HAVE_WCSNLEN=1; HAVE_WCSCPY=1; HAVE_WCPCPY=1; HAVE_WCSNCPY=1; HAVE_WCPNCPY=1; HAVE_WCSCAT=1; HAVE_WCSNCAT=1; HAVE_WCSCMP=1; HAVE_WCSNCMP=1; HAVE_WCSCASECMP=1; HAVE_WCSNCASECMP=1; HAVE_WCSCOLL=1; HAVE_WCSXFRM=1; HAVE_WCSDUP=1; HAVE_WCSCHR=1; HAVE_WCSRCHR=1; HAVE_WCSCSPN=1; HAVE_WCSSPN=1; HAVE_WCSPBRK=1; HAVE_WCSSTR=1; HAVE_WCSTOK=1; HAVE_WCSWIDTH=1; HAVE_WCSFTIME=1; HAVE_DECL_WCTOB=1; HAVE_DECL_WCSDUP=1; HAVE_DECL_WCWIDTH=1; REPLACE_MBSTATE_T=0; REPLACE_BTOWC=0; REPLACE_WCTOB=0; REPLACE_MBSINIT=0; REPLACE_MBRTOWC=0; REPLACE_MBRLEN=0; REPLACE_MBSRTOWCS=0; REPLACE_MBSNRTOWCS=0; REPLACE_WCRTOMB=0; REPLACE_WCSRTOMBS=0; REPLACE_WCSNRTOMBS=0; REPLACE_WCWIDTH=0; REPLACE_WCSWIDTH=0; REPLACE_WCSFTIME=0; REPLACE_WCSCMP=0; REPLACE_WCSNCMP=0; REPLACE_WCSSTR=0; REPLACE_WCSTOK=0; REPLACE_WMEMCMP=0; REPLACE_WMEMPCPY=0; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5 printf %s "checking whether <wchar.h> uses 'inline' correctly... " >&6; } if test ${gl_cv_header_wchar_h_correct_inline+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_cv_header_wchar_h_correct_inline=yes case "$host_os" in *-gnu* | gnu*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define wcstod renamed_wcstod #include <wchar.h> extern int zero (void); int main () { return zero(); } _ACEOF saved_ac_compile="$ac_compile" ac_compile=`echo "$saved_ac_compile" | sed s/conftest/conftest1/` if echo '#include "conftest.c"' >conftest1.c \ && { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define wcstod renamed_wcstod #include <wchar.h> int zero (void) { return 0; } _ACEOF ac_compile=`echo "$saved_ac_compile" | sed s/conftest/conftest2/` if echo '#include "conftest.c"' >conftest2.c \ && { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then : else gl_cv_header_wchar_h_correct_inline=no fi fi fi ac_compile="$saved_ac_compile" rm -f conftest12.c conftest12.$ac_objext conftest$ac_exeext ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5 printf "%s\n" "$gl_cv_header_wchar_h_correct_inline" >&6; } if test $gl_cv_header_wchar_h_correct_inline = no; then as_fn_error $? "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in C99 mode. You have four options: - Add the flag -fgnu89-inline to CC and reconfigure, or - Fix your include files, using parts of <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or - Use a gcc version older than 4.3, or - Don't use the flags -std=c99 or -std=gnu99. Configuration aborted." "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 printf %s "checking for nl_langinfo and CODESET... " >&6; } if test ${am_cv_langinfo_codeset+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int main (void) { char* cs = nl_langinfo(CODESET); return !cs; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : am_cv_langinfo_codeset=yes else case e in #( e) am_cv_langinfo_codeset=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 printf "%s\n" "$am_cv_langinfo_codeset" >&6; } if test $am_cv_langinfo_codeset = yes; then printf "%s\n" "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 printf %s "checking for a traditional french locale... " >&6; } if test ${gt_cv_locale_fr+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw* | windows*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 printf "%s\n" "$gt_cv_locale_fr" >&6; } LOCALE_FR=$gt_cv_locale_fr case $LOCALE_FR in #( '' | *[[:space:]\"\$\'*[]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: invalid locale \"$LOCALE_FR\"; assuming \"none\"" >&5 printf "%s\n" "$as_me: WARNING: invalid locale \"$LOCALE_FR\"; assuming \"none\"" >&2;} LOCALE_FR=none;; esac GL_GNULIB_BTOWC=0 GL_GNULIB_WCTOB=0 GL_GNULIB_MBSINIT=0 GL_GNULIB_MBSZERO=0 GL_GNULIB_MBRTOWC=0 GL_GNULIB_MBRLEN=0 GL_GNULIB_MBSRTOWCS=0 GL_GNULIB_MBSNRTOWCS=0 GL_GNULIB_WCRTOMB=0 GL_GNULIB_WCSRTOMBS=0 GL_GNULIB_WCSNRTOMBS=0 GL_GNULIB_WCWIDTH=0 GL_GNULIB_WMEMCHR=0 GL_GNULIB_WMEMCMP=0 GL_GNULIB_WMEMCPY=0 GL_GNULIB_WMEMMOVE=0 GL_GNULIB_WMEMPCPY=0 GL_GNULIB_WMEMSET=0 GL_GNULIB_WCSLEN=0 GL_GNULIB_WCSNLEN=0 GL_GNULIB_WCSCPY=0 GL_GNULIB_WCPCPY=0 GL_GNULIB_WCSNCPY=0 GL_GNULIB_WCPNCPY=0 GL_GNULIB_WCSCAT=0 GL_GNULIB_WCSNCAT=0 GL_GNULIB_WCSCMP=0 GL_GNULIB_WCSNCMP=0 GL_GNULIB_WCSCASECMP=0 GL_GNULIB_WCSNCASECMP=0 GL_GNULIB_WCSCOLL=0 GL_GNULIB_WCSXFRM=0 GL_GNULIB_WCSDUP=0 GL_GNULIB_WCSCHR=0 GL_GNULIB_WCSRCHR=0 GL_GNULIB_WCSCSPN=0 GL_GNULIB_WCSSPN=0 GL_GNULIB_WCSPBRK=0 GL_GNULIB_WCSSTR=0 GL_GNULIB_WCSTOK=0 GL_GNULIB_WCSWIDTH=0 GL_GNULIB_WCSFTIME=0 GL_GNULIB_WGETCWD=0 GL_GNULIB_MDA_WCSDUP=1 GL_GNULIB__EXIT=0 GL_GNULIB_ALIGNED_ALLOC=0 GL_GNULIB_ATOLL=0 GL_GNULIB_CALLOC_GNU=0 GL_GNULIB_CALLOC_POSIX=0 GL_GNULIB_CANONICALIZE_FILE_NAME=0 GL_GNULIB_FREE_POSIX=0 GL_GNULIB_GETLOADAVG=0 GL_GNULIB_GETPROGNAME=0 GL_GNULIB_GETSUBOPT=0 GL_GNULIB_GRANTPT=0 GL_GNULIB_MALLOC_GNU=0 GL_GNULIB_MALLOC_POSIX=0 GL_GNULIB_MBSTOWCS=0 GL_GNULIB_MBTOWC=0 GL_GNULIB_MKDTEMP=0 GL_GNULIB_MKOSTEMP=0 GL_GNULIB_MKOSTEMPS=0 GL_GNULIB_MKSTEMP=0 GL_GNULIB_MKSTEMPS=0 GL_GNULIB_POSIX_MEMALIGN=0 GL_GNULIB_POSIX_OPENPT=0 GL_GNULIB_PTSNAME=0 GL_GNULIB_PTSNAME_R=0 GL_GNULIB_PUTENV=0 GL_GNULIB_QSORT_R=0 GL_GNULIB_RAND=0 GL_GNULIB_RANDOM=0 GL_GNULIB_RANDOM_R=0 GL_GNULIB_REALLOCARRAY=0 GL_GNULIB_REALLOC_GNU=0 GL_GNULIB_REALLOC_POSIX=0 GL_GNULIB_REALPATH=0 GL_GNULIB_RPMATCH=0 GL_GNULIB_SECURE_GETENV=0 GL_GNULIB_SETENV=0 GL_GNULIB_STRTOD=0 GL_GNULIB_STRTOL=0 GL_GNULIB_STRTOLD=0 GL_GNULIB_STRTOLL=0 GL_GNULIB_STRTOUL=0 GL_GNULIB_STRTOULL=0 GL_GNULIB_SYSTEM_POSIX=0 GL_GNULIB_UNLOCKPT=0 GL_GNULIB_UNSETENV=0 GL_GNULIB_WCTOMB=0 GL_GNULIB_MDA_ECVT=1 GL_GNULIB_MDA_FCVT=1 GL_GNULIB_MDA_GCVT=1 GL_GNULIB_MDA_MKTEMP=1 GL_GNULIB_MDA_PUTENV=1 HAVE__EXIT=1; HAVE_ALIGNED_ALLOC=1; HAVE_ATOLL=1; HAVE_CANONICALIZE_FILE_NAME=1; HAVE_DECL_ECVT=1; HAVE_DECL_FCVT=1; HAVE_DECL_GCVT=1; HAVE_DECL_GETLOADAVG=1; HAVE_DECL_PROGRAM_INVOCATION_NAME=1; HAVE_GETPROGNAME=1; HAVE_GETSUBOPT=1; HAVE_GRANTPT=1; HAVE_INITSTATE=1; HAVE_DECL_INITSTATE=1; HAVE_MBTOWC=1; HAVE_MKDTEMP=1; HAVE_MKOSTEMP=1; HAVE_MKOSTEMPS=1; HAVE_MKSTEMP=1; HAVE_MKSTEMPS=1; HAVE_POSIX_MEMALIGN=1; HAVE_POSIX_OPENPT=1; HAVE_PTSNAME=1; HAVE_PTSNAME_R=1; HAVE_QSORT_R=1; HAVE_RANDOM=1; HAVE_RANDOM_H=1; HAVE_RANDOM_R=1; HAVE_REALLOCARRAY=1; HAVE_REALPATH=1; HAVE_RPMATCH=1; HAVE_SECURE_GETENV=1; HAVE_SETENV=1; HAVE_DECL_SETENV=1; HAVE_SETSTATE=1; HAVE_DECL_SETSTATE=1; HAVE_STRTOD=1; HAVE_STRTOL=1; HAVE_STRTOLD=1; HAVE_STRTOLL=1; HAVE_STRTOUL=1; HAVE_STRTOULL=1; HAVE_STRUCT_RANDOM_DATA=1; HAVE_SYS_LOADAVG_H=0; HAVE_UNLOCKPT=1; HAVE_DECL_UNSETENV=1; REPLACE__EXIT=0; REPLACE_ALIGNED_ALLOC=0; REPLACE_CALLOC_FOR_CALLOC_GNU=0; REPLACE_CALLOC_FOR_CALLOC_POSIX=0; REPLACE_CANONICALIZE_FILE_NAME=0; REPLACE_FREE=0; REPLACE_GETLOADAVG=0; REPLACE_GETPROGNAME=0; REPLACE_GETSUBOPT=0; REPLACE_INITSTATE=0; REPLACE_MALLOC_FOR_MALLOC_GNU=0; REPLACE_MALLOC_FOR_MALLOC_POSIX=0; REPLACE_MB_CUR_MAX=0; REPLACE_MBSTOWCS=0; REPLACE_MBTOWC=0; REPLACE_MKOSTEMP=0; REPLACE_MKOSTEMPS=0; REPLACE_MKSTEMP=0; REPLACE_POSIX_MEMALIGN=0; REPLACE_POSIX_OPENPT=0; REPLACE_PTSNAME=0; REPLACE_PTSNAME_R=0; REPLACE_PUTENV=0; REPLACE_QSORT_R=0; REPLACE_RAND=0; REPLACE_RANDOM=0; REPLACE_RANDOM_R=0; REPLACE_REALLOC_FOR_REALLOC_GNU=0; REPLACE_REALLOC_FOR_REALLOC_POSIX=0; REPLACE_REALLOCARRAY=0; REPLACE_REALPATH=0; REPLACE_SETENV=0; REPLACE_SETSTATE=0; REPLACE_STRTOD=0; REPLACE_STRTOL=0; REPLACE_STRTOLD=0; REPLACE_STRTOLL=0; REPLACE_STRTOUL=0; REPLACE_STRTOULL=0; REPLACE_UNSETENV=0; REPLACE_WCTOMB=0; HAVE_C32RTOMB=1; HAVE_MBRTOC16=1; HAVE_MBRTOC32=1; REPLACE_C32RTOMB=0; REPLACE_MBRTOC16=0; REPLACE_MBRTOC32=0; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether char8_t is correctly defined" >&5 printf %s "checking whether char8_t is correctly defined... " >&6; } if test ${gl_cv_type_char8_t_works+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> int verify[(char8_t)(-1) >= 0 && sizeof (char8_t) == sizeof (unsigned char) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_char8_t_works=yes else case e in #( e) gl_cv_type_char8_t_works=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_char8_t_works" >&5 printf "%s\n" "$gl_cv_type_char8_t_works" >&6; } if test $gl_cv_type_char8_t_works = no; then GNULIBHEADERS_OVERRIDE_CHAR8_T=1 else GNULIBHEADERS_OVERRIDE_CHAR8_T=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether char16_t is correctly defined" >&5 printf %s "checking whether char16_t is correctly defined... " >&6; } if test ${gl_cv_type_char16_t_works+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> /* For simplicity, assume that uint16_least_t is equivalent to 'unsigned short'. */ int verify[(char16_t)(-1) >= 0 && sizeof (char16_t) == sizeof (unsigned short) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_char16_t_works=yes else case e in #( e) gl_cv_type_char16_t_works=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_char16_t_works" >&5 printf "%s\n" "$gl_cv_type_char16_t_works" >&6; } if test $gl_cv_type_char16_t_works = no; then GNULIBHEADERS_OVERRIDE_CHAR16_T=1 else GNULIBHEADERS_OVERRIDE_CHAR16_T=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether char32_t is correctly defined" >&5 printf %s "checking whether char32_t is correctly defined... " >&6; } if test ${gl_cv_type_char32_t_works+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> /* For simplicity, assume that uint32_least_t is equivalent to 'unsigned int'. */ int verify[(char32_t)(-1) >= 0 && sizeof (char32_t) == sizeof (unsigned int) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_char32_t_works=yes else case e in #( e) gl_cv_type_char32_t_works=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_char32_t_works" >&5 printf "%s\n" "$gl_cv_type_char32_t_works" >&6; } if test $gl_cv_type_char32_t_works = no; then GNULIBHEADERS_OVERRIDE_CHAR32_T=1 else GNULIBHEADERS_OVERRIDE_CHAR32_T=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_uchar_h='<'uchar.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <uchar.h>" >&5 printf %s "checking absolute name of <uchar.h>... " >&6; } if test ${gl_cv_next_uchar_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_uchar_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <uchar.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'uchar.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_uchar_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_uchar_h gl_cv_next_uchar_h='"'$gl_header'"' else gl_cv_next_uchar_h='<'uchar.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_uchar_h" >&5 printf "%s\n" "$gl_cv_next_uchar_h" >&6; } fi NEXT_UCHAR_H=$gl_cv_next_uchar_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'uchar.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_uchar_h fi NEXT_AS_FIRST_DIRECTIVE_UCHAR_H=$gl_next_as_first_directive if test $ac_cv_header_uchar_h = yes; then HAVE_UCHAR_H=1 else HAVE_UCHAR_H=0 fi CXX_HAS_UCHAR_TYPES=0 if test $HAVE_UCHAR_H = 0; then if test "$CXX" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler predefines the <uchar.h> types" >&5 printf %s "checking whether the C++ compiler predefines the <uchar.h> types... " >&6; } if test ${gl_cv_cxx_has_uchar_types+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.cpp <<\EOF #include <stddef.h> char16_t a; char32_t b; EOF gl_command="$CXX $CXXFLAGS $CPPFLAGS -c conftest.cpp" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gl_command\""; } >&5 (eval $gl_command) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then gl_cv_cxx_has_uchar_types=yes else gl_cv_cxx_has_uchar_types=no fi rm -fr conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cxx_has_uchar_types" >&5 printf "%s\n" "$gl_cv_cxx_has_uchar_types" >&6; } if test $gl_cv_cxx_has_uchar_types = yes; then CXX_HAS_UCHAR_TYPES=1 fi fi fi CXX_HAS_CHAR8_TYPE=0 if test $HAVE_UCHAR_H = 0; then if test "$CXX" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler predefines the char8_t types" >&5 printf %s "checking whether the C++ compiler predefines the char8_t types... " >&6; } if test ${gl_cv_cxx_has_char8_type+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.cpp <<\EOF #include <stddef.h> char8_t a; EOF gl_command="$CXX $CXXFLAGS $CPPFLAGS -c conftest.cpp" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gl_command\""; } >&5 (eval $gl_command) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then gl_cv_cxx_has_char8_type=yes else gl_cv_cxx_has_char8_type=no fi rm -fr conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cxx_has_char8_type" >&5 printf "%s\n" "$gl_cv_cxx_has_char8_type" >&6; } if test $gl_cv_cxx_has_char8_type = yes; then CXX_HAS_CHAR8_TYPE=1 fi fi fi for gltype in wchar_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 printf %s "checking for bit size of $gltype... " >&6; } if eval test \${gl_cv_bitsizeof_${gltype}+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif #include <limits.h>" then : else case e in #( e) result=unknown ;; esac fi eval gl_cv_bitsizeof_${gltype}=\$result ;; esac fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` printf "%s\n" "#define BITSIZEOF_${GLTYPE} $result" >>confdefs.h eval BITSIZEOF_${GLTYPE}=\$result done if test $BITSIZEOF_WCHAR_T -lt 32; then SMALL_WCHAR_T=1 else SMALL_WCHAR_T=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 printf %s "checking for mbstate_t... " >&6; } if test ${ac_cv_type_mbstate_t+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include <wchar.h> int main (void) { mbstate_t x; return sizeof x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_type_mbstate_t=yes else case e in #( e) ac_cv_type_mbstate_t=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5 printf "%s\n" "$ac_cv_type_mbstate_t" >&6; } if test $ac_cv_type_mbstate_t = yes; then printf "%s\n" "#define HAVE_MBSTATE_T 1" >>confdefs.h else printf "%s\n" "#define mbstate_t int" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 printf %s "checking for a traditional japanese locale... " >&6; } if test ${gt_cv_locale_ja+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales on Cygwin 1.5.x. */ if (MB_CUR_MAX == 1) return 1; /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw* | windows*) # Note that on native Windows, the Japanese locale is # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we # cannot use it here. gt_cv_locale_ja=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the AIX locale name. if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP else # Test for the locale name with explicit encoding suffix. if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC-JP else # Test for the HP-UX, OSF/1, NetBSD locale name. if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.eucJP else # Test for the IRIX, FreeBSD locale name. if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC else # Test for the Solaris 7 locale name. if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja else # Special test for NetBSD 1.6. if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then gt_cv_locale_ja=ja_JP.eucJP else # None found. gt_cv_locale_ja=none fi fi fi fi fi fi ;; esac fi rm -fr conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 printf "%s\n" "$gt_cv_locale_ja" >&6; } LOCALE_JA=$gt_cv_locale_ja case $LOCALE_JA in #( '' | *[[:space:]\"\$\'*[]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: invalid locale \"$LOCALE_JA\"; assuming \"none\"" >&5 printf "%s\n" "$as_me: WARNING: invalid locale \"$LOCALE_JA\"; assuming \"none\"" >&2;} LOCALE_JA=none;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 printf %s "checking for a french Unicode locale... " >&6; } if test ${gt_cv_locale_fr_utf8+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in *-musl* | midipix*) gt_cv_locale_fr_utf8=fr_FR.UTF-8 ;; *) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw* | windows*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 printf "%s\n" "$gt_cv_locale_fr_utf8" >&6; } LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 case $LOCALE_FR_UTF8 in #( '' | *[[:space:]\"\$\'*[]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: invalid locale \"$LOCALE_FR_UTF8\"; assuming \"none\"" >&5 printf "%s\n" "$as_me: WARNING: invalid locale \"$LOCALE_FR_UTF8\"; assuming \"none\"" >&2;} LOCALE_FR_UTF8=none;; esac case "$host_os" in *-musl* | midipix*) LC_COLLATE_IMPLEMENTED=false LC_NUMERIC_IMPLEMENTED=false LC_TIME_IMPLEMENTED=false LC_MONETARY_IMPLEMENTED=false ;; *) LC_COLLATE_IMPLEMENTED=true LC_NUMERIC_IMPLEMENTED=true LC_TIME_IMPLEMENTED=true LC_MONETARY_IMPLEMENTED=true ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 printf %s "checking for a transitional chinese locale... " >&6; } if test ${gt_cv_locale_zh_CN+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw* | windows*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=Chinese_China.54936 else # None found. gt_cv_locale_zh_CN=none fi ;; solaris2.8) # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. gt_cv_locale_zh_CN=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the locale name without encoding suffix. if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN else # Test for the locale name with explicit encoding suffix. if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN.GB18030 else # None found. gt_cv_locale_zh_CN=none fi fi ;; esac else # If there was a link error, due to mblen(), the system is so old that # it certainly doesn't have a chinese locale. gt_cv_locale_zh_CN=none fi rm -fr conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 printf "%s\n" "$gt_cv_locale_zh_CN" >&6; } LOCALE_ZH_CN=$gt_cv_locale_zh_CN case $LOCALE_ZH_CN in #( '' | *[[:space:]\"\$\'*[]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: invalid locale \"$LOCALE_ZH_CN\"; assuming \"none\"" >&5 printf "%s\n" "$as_me: WARNING: invalid locale \"$LOCALE_ZH_CN\"; assuming \"none\"" >&2;} LOCALE_ZH_CN=none;; esac if case "$host_os" in mingw* | windows*) true ;; *) test $ac_cv_func_mbsinit = yes ;; esac \ && test $ac_cv_func_mbrtowc = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 printf %s "checking whether mbrtowc handles incomplete characters... " >&6; } if test ${gl_cv_func_mbrtowc_incomplete_state+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac if test $LOCALE_JA != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_incomplete_state=yes else case e in #( e) gl_cv_func_mbrtowc_incomplete_state=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi else if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_incomplete_state=yes else case e in #( e) gl_cv_func_mbrtowc_incomplete_state=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_incomplete_state" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 printf %s "checking whether mbrtowc works as well as mbtowc... " >&6; } if test ${gl_cv_func_mbrtowc_sanitycheck+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_sanitycheck=yes else case e in #( e) gl_cv_func_mbrtowc_sanitycheck=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_sanitycheck" >&6; } REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi ac_fn_check_decl "$LINENO" "mbrtoc32" "ac_cv_have_decl_mbrtoc32" "#ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_mbrtoc32" = xyes then : fi if test $ac_cv_have_decl_mbrtoc32 = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mbrtoc32" >&5 printf %s "checking for mbrtoc32... " >&6; } if test ${gl_cv_func_mbrtoc32+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> int main (void) { char32_t c; return mbrtoc32 (&c, "", 1, NULL) == 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_mbrtoc32=yes else case e in #( e) gl_cv_func_mbrtoc32=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtoc32" >&5 printf "%s\n" "$gl_cv_func_mbrtoc32" >&6; } else gl_cv_func_mbrtoc32=no fi if test $GNULIBHEADERS_OVERRIDE_CHAR32_T = 1 || test $gl_cv_func_mbrtoc32 = no; then HAVE_WORKING_MBRTOC32=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtoc32 works as well as mbrtowc" >&5 printf %s "checking whether mbrtoc32 works as well as mbrtowc... " >&6; } if test ${gl_cv_func_mbrtoc32_sanitycheck+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on FreeBSD, Solaris, native Windows. freebsd* | midnightbsd* | solaris* | mingw* | windows*) gl_cv_func_mbrtoc32_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtoc32_sanitycheck="guessing yes" ;; esac if test $LOCALE_FR != none || test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> int main () { int result = 0; /* This fails on native Windows: mbrtoc32 returns (size_t)-1. mbrtowc returns 1 (correct). */ if (strcmp ("$LOCALE_FR", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR") != NULL) { mbstate_t state; wchar_t wc = (wchar_t) 0xBADFACE; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\374", 1, &state) == 1) { char32_t c32 = (wchar_t) 0xBADFACE; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtoc32 (&c32, "\374", 1, &state) != 1) result |= 1; } } /* This fails on FreeBSD 13.0 and Solaris 11.4: mbrtoc32 returns (size_t)-2 or (size_t)-1. mbrtowc returns 4 (correct). */ if (strcmp ("$LOCALE_ZH_CN", "none") != 0 && setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; wchar_t wc = (wchar_t) 0xBADFACE; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\224\071\375\067", 4, &state) == 4) { char32_t c32 = (wchar_t) 0xBADFACE; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtoc32 (&c32, "\224\071\375\067", 4, &state) != 4) result |= 2; } } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtoc32_sanitycheck=yes else case e in #( e) gl_cv_func_mbrtoc32_sanitycheck=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtoc32_sanitycheck" >&5 printf "%s\n" "$gl_cv_func_mbrtoc32_sanitycheck" >&6; } case "$gl_cv_func_mbrtoc32_sanitycheck" in *yes) HAVE_WORKING_MBRTOC32=1 printf "%s\n" "#define HAVE_WORKING_MBRTOC32 1" >>confdefs.h ;; *) HAVE_WORKING_MBRTOC32=0 ;; esac fi GL_GNULIB_BTOC32=0 GL_GNULIB_C32ISALNUM=0 GL_GNULIB_C32ISALPHA=0 GL_GNULIB_C32ISBLANK=0 GL_GNULIB_C32ISCNTRL=0 GL_GNULIB_C32ISDIGIT=0 GL_GNULIB_C32ISGRAPH=0 GL_GNULIB_C32ISLOWER=0 GL_GNULIB_C32ISPRINT=0 GL_GNULIB_C32ISPUNCT=0 GL_GNULIB_C32ISSPACE=0 GL_GNULIB_C32ISUPPER=0 GL_GNULIB_C32ISXDIGIT=0 GL_GNULIB_C32TOLOWER=0 GL_GNULIB_C32TOUPPER=0 GL_GNULIB_C32WIDTH=0 GL_GNULIB_C32RTOMB=0 GL_GNULIB_C32SNRTOMBS=0 GL_GNULIB_C32SRTOMBS=0 GL_GNULIB_C32STOMBS=0 GL_GNULIB_C32SWIDTH=0 GL_GNULIB_C32TOB=0 GL_GNULIB_C32_APPLY_MAPPING=0 GL_GNULIB_C32_APPLY_TYPE_TEST=0 GL_GNULIB_C32_GET_MAPPING=0 GL_GNULIB_C32_GET_TYPE_TEST=0 GL_GNULIB_MBRTOC16=0 GL_GNULIB_MBRTOC32=0 GL_GNULIB_MBSNRTOC32S=0 GL_GNULIB_MBSRTOC32S=0 GL_GNULIB_MBSTOC32S=0 if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 printf "%s\n" "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi SYS_IOCTL_H_HAVE_WINSOCK2_H=0; SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; REPLACE_IOCTL=0; if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_CLOSE=1 fi if test $ac_cv_header_sys_socket_h != yes; then ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes then : printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h fi fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then REPLACE_CLOSE=1 fi if test $REPLACE_CLOSE = 0; then if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then REPLACE_CLOSE=1 fi fi HAVE_OPENDIR=1; HAVE_READDIR=1; HAVE_REWINDDIR=1; HAVE_CLOSEDIR=1; HAVE_DECL_DIRFD=1; HAVE_DECL_FDOPENDIR=1; HAVE_FDOPENDIR=1; HAVE_SCANDIR=1; HAVE_ALPHASORT=1; REPLACE_OPENDIR=0; REPLACE_READDIR=0; REPLACE_REWINDDIR=0; REPLACE_CLOSEDIR=0; REPLACE_DIRFD=0; REPLACE_FDOPENDIR=0; case "$host_os" in mingw* | windows* | os2*) DIR_HAS_FD_MEMBER=0 ;; *) DIR_HAS_FD_MEMBER=1 ;; esac if test $gl_cv_have_include_next = yes; then gl_cv_next_dirent_h='<'dirent.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <dirent.h>" >&5 printf %s "checking absolute name of <dirent.h>... " >&6; } if test ${gl_cv_next_dirent_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_dirent_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <dirent.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'dirent.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_dirent_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_dirent_h gl_cv_next_dirent_h='"'$gl_header'"' else gl_cv_next_dirent_h='<'dirent.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_dirent_h" >&5 printf "%s\n" "$gl_cv_next_dirent_h" >&6; } fi NEXT_DIRENT_H=$gl_cv_next_dirent_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'dirent.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_dirent_h fi NEXT_AS_FIRST_DIRECTIVE_DIRENT_H=$gl_next_as_first_directive if test $ac_cv_header_dirent_h = yes; then HAVE_DIRENT_H=1 else HAVE_DIRENT_H=0 fi GL_GNULIB_OPENDIR=0 GL_GNULIB_READDIR=0 GL_GNULIB_REWINDDIR=0 GL_GNULIB_CLOSEDIR=0 GL_GNULIB_DIRFD=0 GL_GNULIB_FDOPENDIR=0 GL_GNULIB_SCANDIR=0 GL_GNULIB_ALPHASORT=0 gl_mda_defines=' #if defined _WIN32 && !defined __CYGWIN__ #define access _access #define chdir _chdir #define chmod _chmod #define close _close #define creat _creat #define dup _dup #define dup2 _dup2 #define ecvt _ecvt #define execl _execl #define execle _execle #define execlp _execlp #define execv _execv #define execve _execve #define execvp _execvp #define execvpe _execvpe #define fcloseall _fcloseall #define fcvt _fcvt #define fdopen _fdopen #define fileno _fileno #define gcvt _gcvt #define getcwd _getcwd #define getpid _getpid #define getw _getw #define isatty _isatty #define j0 _j0 #define j1 _j1 #define jn _jn #define lfind _lfind #define lsearch _lsearch #define lseek _lseek #define memccpy _memccpy #define mkdir _mkdir #define mktemp _mktemp #define open _open #define putenv _putenv #define putw _putw #define read _read #define rmdir _rmdir #define strdup _strdup #define swab _swab #define tempnam _tempnam #define tzset _tzset #define umask _umask #define unlink _unlink #define utime _utime #define wcsdup _wcsdup #define write _write #define y0 _y0 #define y1 _y1 #define yn _yn #endif ' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5 printf %s "checking for complete errno.h... " >&6; } if test ${gl_cv_header_errno_h_complete+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "booboo" >/dev/null 2>&1 then : gl_cv_header_errno_h_complete=no else case e in #( e) gl_cv_header_errno_h_complete=yes ;; esac fi rm -rf conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5 printf "%s\n" "$gl_cv_header_errno_h_complete" >&6; } if test $gl_cv_header_errno_h_complete = yes; then GL_GENERATE_ERRNO_H=false else if test $gl_cv_have_include_next = yes; then gl_cv_next_errno_h='<'errno.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <errno.h>" >&5 printf %s "checking absolute name of <errno.h>... " >&6; } if test ${gl_cv_next_errno_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'errno.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_errno_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_errno_h gl_cv_next_errno_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5 printf "%s\n" "$gl_cv_next_errno_h" >&6; } fi NEXT_ERRNO_H=$gl_cv_next_errno_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'errno.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_errno_h fi NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive GL_GENERATE_ERRNO_H=true fi if $GL_GENERATE_ERRNO_H; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5 printf %s "checking for EMULTIHOP value... " >&6; } if test ${gl_cv_header_errno_h_EMULTIHOP+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_EMULTIHOP=yes else case e in #( e) gl_cv_header_errno_h_EMULTIHOP=no ;; esac fi rm -rf conftest* if test $gl_cv_header_errno_h_EMULTIHOP = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_EMULTIHOP=hidden fi rm -rf conftest* if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP" " #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> " then : fi fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5 printf "%s\n" "$gl_cv_header_errno_h_EMULTIHOP" >&6; } case $gl_cv_header_errno_h_EMULTIHOP in yes | no) EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE= ;; *) EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP" ;; esac fi if $GL_GENERATE_ERRNO_H; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5 printf %s "checking for ENOLINK value... " >&6; } if test ${gl_cv_header_errno_h_ENOLINK+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_ENOLINK=yes else case e in #( e) gl_cv_header_errno_h_ENOLINK=no ;; esac fi rm -rf conftest* if test $gl_cv_header_errno_h_ENOLINK = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_ENOLINK=hidden fi rm -rf conftest* if test $gl_cv_header_errno_h_ENOLINK = hidden; then if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK" " #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> " then : fi fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5 printf "%s\n" "$gl_cv_header_errno_h_ENOLINK" >&6; } case $gl_cv_header_errno_h_ENOLINK in yes | no) ENOLINK_HIDDEN=0; ENOLINK_VALUE= ;; *) ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK" ;; esac fi if $GL_GENERATE_ERRNO_H; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5 printf %s "checking for EOVERFLOW value... " >&6; } if test ${gl_cv_header_errno_h_EOVERFLOW+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_EOVERFLOW=yes else case e in #( e) gl_cv_header_errno_h_EOVERFLOW=no ;; esac fi rm -rf conftest* if test $gl_cv_header_errno_h_EOVERFLOW = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_EOVERFLOW=hidden fi rm -rf conftest* if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW" " #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> " then : fi fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5 printf "%s\n" "$gl_cv_header_errno_h_EOVERFLOW" >&6; } case $gl_cv_header_errno_h_EOVERFLOW in yes | no) EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE= ;; *) EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW" ;; esac fi if test $gl_cv_have_include_next = yes; then gl_cv_next_error_h='<'error.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <error.h>" >&5 printf %s "checking absolute name of <error.h>... " >&6; } if test ${gl_cv_next_error_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_error_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <error.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'error.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_error_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_error_h gl_cv_next_error_h='"'$gl_header'"' else gl_cv_next_error_h='<'error.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_error_h" >&5 printf "%s\n" "$gl_cv_next_error_h" >&6; } fi NEXT_ERROR_H=$gl_cv_next_error_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'error.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_error_h fi NEXT_AS_FIRST_DIRECTIVE_ERROR_H=$gl_next_as_first_directive if test $ac_cv_header_error_h = yes; then HAVE_ERROR_H=1 else HAVE_ERROR_H=0 fi REPLACE_ERROR=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for error" >&5 printf %s "checking for error... " >&6; } if test ${gl_cv_onwards_func_error+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "error" "ac_cv_have_decl_error" "#include <error.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_error" = xyes then : fi if test $ac_cv_have_decl_error = yes; then ac_fn_c_check_func "$LINENO" "error" "ac_cv_func_error" if test "x$ac_cv_func_error" = xyes then : fi if test $ac_cv_func_error = yes; then gl_cv_onwards_func_error=yes else gl_cv_onwards_func_error='future OS version' fi else gl_cv_onwards_func_error='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "error" "ac_cv_func_error" if test "x$ac_cv_func_error" = xyes then : fi gl_cv_onwards_func_error=$ac_cv_func_error ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_error" >&5 printf "%s\n" "$gl_cv_onwards_func_error" >&6; } case "$gl_cv_onwards_func_error" in future*) ac_cv_func_error=no ;; *) ac_cv_func_error=$gl_cv_onwards_func_error ;; esac if test $ac_cv_func_error = yes; then printf "%s\n" "#define HAVE_ERROR 1" >>confdefs.h fi if test $ac_cv_func_error = yes; then HAVE_ERROR=1 else HAVE_ERROR=0 case "$gl_cv_onwards_func_error" in future*) REPLACE_ERROR=1 ;; esac fi ac_fn_check_decl "$LINENO" "error_at_line" "ac_cv_have_decl_error_at_line" "#include <error.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_error_at_line" = xyes then : fi if test $ac_cv_have_decl_error_at_line = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 printf %s "checking for error_at_line... " >&6; } if test ${ac_cv_lib_error_at_line+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <error.h> int main (void) { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_error_at_line=yes else case e in #( e) ac_cv_lib_error_at_line=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 printf "%s\n" "$ac_cv_lib_error_at_line" >&6; } else ac_cv_lib_error_at_line=no fi if test $ac_cv_lib_error_at_line = yes; then HAVE_ERROR_AT_LINE=1 else HAVE_ERROR_AT_LINE=0 fi REPLACE_ERROR_AT_LINE=0 if test $ac_cv_func_error = yes && test $ac_cv_lib_error_at_line = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working error function" >&5 printf %s "checking for working error function... " >&6; } if test ${gl_cv_func_working_error+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $cross_compiling != yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <error.h> static void print_no_progname (void) {} int main (void) { error_print_progname = print_no_progname; error (0, 0, "foo"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : rm -f conftest.out if test -s conftest$ac_exeext \ && ./conftest$ac_exeext 2> conftest.out; then if grep ' ' conftest.out >/dev/null; then gl_cv_func_working_error=no else gl_cv_func_working_error=yes fi else gl_cv_func_working_error=no fi rm -f conftest.out else case e in #( e) gl_cv_func_working_error=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <error.h> int main (void) { error (0, 0, "foo"); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_error="guessing yes" ;; # Guess no on Android. linux*-android*) gl_cv_func_working_error="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_error="$gl_cross_guess_normal" ;; esac else case e in #( e) gl_cv_func_working_error=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_error" >&5 printf "%s\n" "$gl_cv_func_working_error" >&6; } case "$gl_cv_func_working_error" in *no) REPLACE_ERROR=1 REPLACE_ERROR_AT_LINE=1 ;; esac fi if test $HAVE_ERROR = 0 || test $REPLACE_ERROR = 1 \ || test $HAVE_ERROR_AT_LINE = 0 || test $REPLACE_ERROR_AT_LINE = 1; then COMPILE_ERROR_C=1 else COMPILE_ERROR_C=0 fi ac_fn_c_check_type "$LINENO" "uid_t" "ac_cv_type_uid_t" "$ac_includes_default" if test "x$ac_cv_type_uid_t" = xyes then : else case e in #( e) printf "%s\n" "#define uid_t int" >>confdefs.h ;; esac fi ac_fn_c_check_type "$LINENO" "gid_t" "ac_cv_type_gid_t" "$ac_includes_default" if test "x$ac_cv_type_gid_t" = xyes then : else case e in #( e) printf "%s\n" "#define gid_t int" >>confdefs.h ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5 printf %s "checking type of array argument to getgroups... " >&6; } if test ${ac_cv_type_getgroups+y} then : printf %s "(cached) " >&6 else case e in #( e) # If AC_TYPE_UID_T says there isn't any gid_t typedef, then we can skip # everything below. if test $ac_cv_type_gid_t = no then : ac_cv_type_getgroups=int else case e in #( e) # Test programs below rely on strict type checking of extern declarations: # 'extern int getgroups(int, int *); extern int getgroups(int, pid_t *);' # is valid in C89 if and only if pid_t is a typedef for int. Unlike # anything involving either an assignment or a function call, compilers # tend to make this kind of type mismatch a hard error, not just an # "incompatible pointer types" warning. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default extern int getgroups(int, gid_t *); int main (void) { return !(getgroups(0, 0) >= 0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_getgroups_gidarray=yes else case e in #( e) ac_getgroups_gidarray=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default extern int getgroups(int, int *); int main (void) { return !(getgroups(0, 0) >= 0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_getgroups_intarray=yes else case e in #( e) ac_getgroups_intarray=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext case int:$ac_getgroups_intarray,gid:$ac_getgroups_gidarray in #( int:yes,gid:no) : ac_cv_type_getgroups=int ;; #( int:no,gid:yes) : ac_cv_type_getgroups=gid_t ;; #( int:yes,gid:yes) : # Both programs compiled - this means *either* that getgroups # was declared with no prototype, in which case we should use int, # or that it was declared prototyped but gid_t is a typedef for int, # in which case we should use gid_t. Distinguish the two cases # by testing if the compiler catches a blatantly incorrect function # signature for getgroups. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default extern int getgroups(int, float); int main (void) { return !(getgroups(0, 0) >= 0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : # Compiler did not catch incorrect argument list; # getgroups is unprototyped. ac_cv_type_getgroups=int else case e in #( e) # Compiler caught incorrect argument list; # gid_t is a typedef for int. ac_cv_type_getgroups=gid_t ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; #( *) : # Both programs failed to compile - this probably means getgroups # wasn't declared at all. Use 'int', as this is probably a very # old system where the type _would have been_ int. ac_cv_type_getgroups=int ;; esac ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5 printf "%s\n" "$ac_cv_type_getgroups" >&6; } printf "%s\n" "#define GETGROUPS_T $ac_cv_type_getgroups" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ctype.h defines __header_inline" >&5 printf %s "checking whether ctype.h defines __header_inline... " >&6; } if test ${gl_cv_have___header_inline+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ctype.h> #ifndef __header_inline #error "<ctype.h> does not define __header_inline" #endif _ACEOF if ac_fn_c_try_cpp "$LINENO" then : gl_cv_have___header_inline=yes else case e in #( e) gl_cv_have___header_inline=no ;; esac fi rm -f conftest.err conftest.i conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have___header_inline" >&5 printf "%s\n" "$gl_cv_have___header_inline" >&6; } if test "$gl_cv_have___header_inline" = yes; then printf "%s\n" "#define HAVE___HEADER_INLINE 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 printf %s "checking whether lstat correctly handles trailing slash... " >&6; } if test ${gl_cv_func_lstat_dereferences_slashed_symlink+y} then : printf %s "(cached) " >&6 else case e in #( e) rm -f conftest.sym conftest.file echo >conftest.file if test "$cross_compiling" = yes then : case "$host_os" in linux-* | linux) # Guess yes on Linux systems. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; midipix*) # Guess yes on systems that emulate the Linux system calls. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; *-gnu* | gnu*) # Guess yes on glibc systems. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; mingw* | windows*) # Guess no on native Windows. gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; *) # If we don't know, obey --enable-cross-guesses. gl_cv_func_lstat_dereferences_slashed_symlink="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { struct stat sbuf; if (symlink ("conftest.file", "conftest.sym") != 0) return 1; /* Linux will dereference the symlink and fail, as required by POSIX. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_lstat_dereferences_slashed_symlink=yes else case e in #( e) gl_cv_func_lstat_dereferences_slashed_symlink=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f conftest.sym conftest.file ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lstat_dereferences_slashed_symlink" >&5 printf "%s\n" "$gl_cv_func_lstat_dereferences_slashed_symlink" >&6; } case "$gl_cv_func_lstat_dereferences_slashed_symlink" in *yes) printf "%s\n" "#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1" >>confdefs.h ;; esac ac_fn_check_decl "$LINENO" "fchdir" "ac_cv_have_decl_fchdir" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fchdir" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_FCHDIR $ac_have_decl" >>confdefs.h HAVE_FCNTL=1; HAVE_OPENAT=1; REPLACE_CREAT=0; REPLACE_FCNTL=0; REPLACE_OPEN=0; REPLACE_OPENAT=0; GL_GNULIB_CREAT=0 GL_GNULIB_FCNTL=0 GL_GNULIB_NONBLOCKING=0 GL_GNULIB_OPEN=0 GL_GNULIB_OPENAT=0 GL_GNULIB_MDA_CREAT=1 GL_GNULIB_MDA_OPEN=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5 printf %s "checking for working fcntl.h... " >&6; } if test ${gl_cv_header_working_fcntl_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess 'no' on native Windows. mingw* | windows*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/stat.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> # include <stdlib.h> # defined sleep(n) _sleep ((n) * 1000) #endif #include <fcntl.h> $gl_mda_defines #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; int main (void) { int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_header_working_fcntl_h=yes else case e in #( e) case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5 printf "%s\n" "$gl_cv_header_working_fcntl_h" >&6; } case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac printf "%s\n" "#define HAVE_WORKING_O_NOATIME $ac_val" >>confdefs.h case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac printf "%s\n" "#define HAVE_WORKING_O_NOFOLLOW $ac_val" >>confdefs.h ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default " if test "x$ac_cv_type_pid_t" = xyes then : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _WIN64 && !defined __CYGWIN__ LLP64 #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_pid_type='int' else case e in #( e) ac_pid_type='__int64' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h ;; esac fi ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes then : else case e in #( e) printf "%s\n" "#define mode_t int" >>confdefs.h ;; esac fi if test $gl_cv_have_include_next = yes; then gl_cv_next_fcntl_h='<'fcntl.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <fcntl.h>" >&5 printf %s "checking absolute name of <fcntl.h>... " >&6; } if test ${gl_cv_next_fcntl_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'fcntl.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_fcntl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_fcntl_h gl_cv_next_fcntl_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5 printf "%s\n" "$gl_cv_next_fcntl_h" >&6; } fi NEXT_FCNTL_H=$gl_cv_next_fcntl_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'fcntl.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_fcntl_h fi NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive HAVE_FCHMODAT=1; HAVE_FSTATAT=1; HAVE_FUTIMENS=1; HAVE_GETUMASK=1; HAVE_LCHMOD=1; HAVE_LSTAT=1; HAVE_MKDIRAT=1; HAVE_MKFIFO=1; HAVE_MKFIFOAT=1; HAVE_MKNOD=1; HAVE_MKNODAT=1; HAVE_UTIMENSAT=1; REPLACE_CHMOD=0; REPLACE_FCHMODAT=0; REPLACE_FSTAT=0; REPLACE_FSTATAT=0; REPLACE_FUTIMENS=0; REPLACE_LSTAT=0; REPLACE_MKDIR=0; REPLACE_MKFIFO=0; REPLACE_MKFIFOAT=0; REPLACE_MKNOD=0; REPLACE_MKNODAT=0; REPLACE_STAT=0; REPLACE_UTIMENSAT=0; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 printf %s "checking whether stat file-mode macros are broken... " >&6; } if test ${ac_cv_header_stat_broken+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/stat.h> #if defined S_ISBLK && defined S_IFDIR extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; #endif #if defined S_ISBLK && defined S_IFCHR extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; #endif #if defined S_ISLNK && defined S_IFREG extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; #endif #if defined S_ISSOCK && defined S_IFREG extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_header_stat_broken=no else case e in #( e) ac_cv_header_stat_broken=yes ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 printf "%s\n" "$ac_cv_header_stat_broken" >&6; } if test $ac_cv_header_stat_broken = yes; then printf "%s\n" "#define STAT_MACROS_BROKEN 1" >>confdefs.h fi case "$host_os" in mingw* | windows*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit off_t" >&5 printf %s "checking for 64-bit off_t... " >&6; } if test ${gl_cv_type_off_t_64+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_off_t_64=yes else case e in #( e) gl_cv_type_off_t_64=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_off_t_64" >&5 printf "%s\n" "$gl_cv_type_off_t_64" >&6; } if test $gl_cv_type_off_t_64 = no; then WINDOWS_64_BIT_OFF_T=1 else WINDOWS_64_BIT_OFF_T=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit st_size" >&5 printf %s "checking for 64-bit st_size... " >&6; } if test ${gl_cv_member_st_size_64+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> struct stat buf; int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_member_st_size_64=yes else case e in #( e) gl_cv_member_st_size_64=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_member_st_size_64" >&5 printf "%s\n" "$gl_cv_member_st_size_64" >&6; } if test $gl_cv_member_st_size_64 = no; then WINDOWS_64_BIT_ST_SIZE=1 else WINDOWS_64_BIT_ST_SIZE=0 fi ;; *) WINDOWS_64_BIT_OFF_T=0 WINDOWS_64_BIT_ST_SIZE=0 ;; esac if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_stat_h='<'sys/stat.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/stat.h>" >&5 printf %s "checking absolute name of <sys/stat.h>... " >&6; } if test ${gl_cv_next_sys_stat_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_sys_stat_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/stat.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/stat.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_stat_h gl_cv_next_sys_stat_h='"'$gl_header'"' else gl_cv_next_sys_stat_h='<'sys/stat.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5 printf "%s\n" "$gl_cv_next_sys_stat_h" >&6; } fi NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/stat.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_stat_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive WINDOWS_STAT_TIMESPEC=0 ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_type_nlink_t" = xyes then : else case e in #( e) printf "%s\n" "#define nlink_t int" >>confdefs.h ;; esac fi case "$host_os" in mingw* | windows*) ac_fn_c_check_header_compile "$LINENO" "sdkddkver.h" "ac_cv_header_sdkddkver_h" "$ac_includes_default" if test "x$ac_cv_header_sdkddkver_h" = xyes then : printf "%s\n" "#define HAVE_SDKDDKVER_H 1" >>confdefs.h fi ;; esac GL_GNULIB_CHMOD=0 GL_GNULIB_FCHMODAT=0 GL_GNULIB_FSTAT=0 GL_GNULIB_FSTATAT=0 GL_GNULIB_FUTIMENS=0 GL_GNULIB_GETUMASK=0 GL_GNULIB_LCHMOD=0 GL_GNULIB_LSTAT=0 GL_GNULIB_MKDIR=0 GL_GNULIB_MKDIRAT=0 GL_GNULIB_MKFIFO=0 GL_GNULIB_MKFIFOAT=0 GL_GNULIB_MKNOD=0 GL_GNULIB_MKNODAT=0 GL_GNULIB_STAT=0 GL_GNULIB_UTIMENSAT=0 GL_GNULIB_OVERRIDES_STRUCT_STAT=0 GL_GNULIB_MDA_CHMOD=1 GL_GNULIB_MDA_MKDIR=1 GL_GNULIB_MDA_UMASK=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getcwd (NULL, 0) allocates memory for result" >&5 printf %s "checking whether getcwd (NULL, 0) allocates memory for result... " >&6; } if test ${gl_cv_func_getcwd_null+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on Cygwin. cygwin*) gl_cv_func_getcwd_null="guessing yes";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_getcwd_null="$gl_cross_guess_normal";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include <stdlib.h> # if HAVE_UNISTD_H # include <unistd.h> # else /* on Windows with MSVC */ # include <direct.h> # endif $gl_mda_defines # ifndef getcwd char *getcwd (); # endif int main (void) { #if defined _WIN32 && ! defined __CYGWIN__ /* mingw cwd does not start with '/', but _getcwd does allocate. However, mingw fails to honor non-zero size. */ #else if (chdir ("/") != 0) return 1; else { char *f = getcwd (NULL, 0); if (! f) return 2; if (f[0] != '/') { free (f); return 3; } if (f[1] != '\0') { free (f); return 4; } free (f); return 0; } #endif ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getcwd_null=yes else case e in #( e) gl_cv_func_getcwd_null=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getcwd_null" >&5 printf "%s\n" "$gl_cv_func_getcwd_null" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getcwd with POSIX signature" >&5 printf %s "checking for getcwd with POSIX signature... " >&6; } if test ${gl_cv_func_getcwd_posix_signature+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> $gl_mda_defines int main (void) { extern #ifdef __cplusplus "C" #endif char *getcwd (char *, size_t); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_getcwd_posix_signature=yes else case e in #( e) gl_cv_func_getcwd_posix_signature=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getcwd_posix_signature" >&5 printf "%s\n" "$gl_cv_func_getcwd_posix_signature" >&6; } HAVE_DECL_FCLOSEALL=1; HAVE_DECL_FPURGE=1; HAVE_DECL_FSEEKO=1; HAVE_DECL_FTELLO=1; HAVE_DECL_GETDELIM=1; HAVE_DECL_GETLINE=1; HAVE_DECL_GETW=1; HAVE_DECL_OBSTACK_PRINTF=1; HAVE_DECL_PUTW=1; HAVE_DECL_SNPRINTF=1; HAVE_DECL_VSNPRINTF=1; HAVE_DPRINTF=1; HAVE_FSEEKO=1; HAVE_FTELLO=1; HAVE_PCLOSE=1; HAVE_POPEN=1; HAVE_RENAMEAT=1; HAVE_VASPRINTF=1; HAVE_VDPRINTF=1; REPLACE_DPRINTF=0; REPLACE_FCLOSE=0; REPLACE_FDOPEN=0; REPLACE_FFLUSH=0; REPLACE_FOPEN=0; REPLACE_FOPEN_FOR_FOPEN_GNU=0; REPLACE_FPRINTF=0; REPLACE_FPURGE=0; REPLACE_FREOPEN=0; REPLACE_FSEEK=0; REPLACE_FSEEKO=0; REPLACE_FTELL=0; REPLACE_FTELLO=0; REPLACE_GETDELIM=0; REPLACE_GETLINE=0; REPLACE_OBSTACK_PRINTF=0; REPLACE_PERROR=0; REPLACE_POPEN=0; REPLACE_PRINTF=0; REPLACE_REMOVE=0; REPLACE_RENAME=0; REPLACE_RENAMEAT=0; REPLACE_SNPRINTF=0; REPLACE_SPRINTF=0; REPLACE_STDIO_READ_FUNCS=0; REPLACE_STDIO_WRITE_FUNCS=0; REPLACE_TMPFILE=0; REPLACE_VASPRINTF=0; REPLACE_VDPRINTF=0; REPLACE_VFPRINTF=0; REPLACE_VPRINTF=0; REPLACE_VSNPRINTF=0; REPLACE_VSPRINTF=0; ac_fn_check_decl "$LINENO" "getdelim" "ac_cv_have_decl_getdelim" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getdelim" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_GETDELIM $ac_have_decl" >>confdefs.h GL_GNULIB_DPRINTF=0 GL_GNULIB_FCLOSE=0 GL_GNULIB_FDOPEN=0 GL_GNULIB_FFLUSH=0 GL_GNULIB_FGETC=0 GL_GNULIB_FGETS=0 GL_GNULIB_FOPEN=0 GL_GNULIB_FOPEN_GNU=0 GL_GNULIB_FPRINTF=0 GL_GNULIB_FPRINTF_POSIX=0 GL_GNULIB_FPURGE=0 GL_GNULIB_FPUTC=0 GL_GNULIB_FPUTS=0 GL_GNULIB_FREAD=0 GL_GNULIB_FREOPEN=0 GL_GNULIB_FSCANF=0 GL_GNULIB_FSEEK=0 GL_GNULIB_FSEEKO=0 GL_GNULIB_FTELL=0 GL_GNULIB_FTELLO=0 GL_GNULIB_FWRITE=0 GL_GNULIB_GETC=0 GL_GNULIB_GETCHAR=0 GL_GNULIB_GETDELIM=0 GL_GNULIB_GETLINE=0 GL_GNULIB_OBSTACK_PRINTF=0 GL_GNULIB_OBSTACK_PRINTF_POSIX=0 GL_GNULIB_PCLOSE=0 GL_GNULIB_PERROR=0 GL_GNULIB_POPEN=0 GL_GNULIB_PRINTF=0 GL_GNULIB_PRINTF_POSIX=0 GL_GNULIB_PUTC=0 GL_GNULIB_PUTCHAR=0 GL_GNULIB_PUTS=0 GL_GNULIB_REMOVE=0 GL_GNULIB_RENAME=0 GL_GNULIB_RENAMEAT=0 GL_GNULIB_SCANF=0 GL_GNULIB_SNPRINTF=0 GL_GNULIB_SPRINTF_POSIX=0 GL_GNULIB_STDIO_H_NONBLOCKING=0 GL_GNULIB_STDIO_H_SIGPIPE=0 GL_GNULIB_TMPFILE=0 GL_GNULIB_VASPRINTF=0 GL_GNULIB_VFSCANF=0 GL_GNULIB_VSCANF=0 GL_GNULIB_VDPRINTF=0 GL_GNULIB_VFPRINTF=0 GL_GNULIB_VFPRINTF_POSIX=0 GL_GNULIB_VPRINTF=0 GL_GNULIB_VPRINTF_POSIX=0 GL_GNULIB_VSNPRINTF=0 GL_GNULIB_VSPRINTF_POSIX=0 GL_GNULIB_MDA_FCLOSEALL=1 GL_GNULIB_MDA_FDOPEN=1 GL_GNULIB_MDA_FILENO=1 GL_GNULIB_MDA_GETW=1 GL_GNULIB_MDA_PUTW=1 GL_GNULIB_MDA_TEMPNAM=1 ac_fn_check_decl "$LINENO" "getdtablesize" "ac_cv_have_decl_getdtablesize" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getdtablesize" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_GETDTABLESIZE $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "getline" "ac_cv_have_decl_getline" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getline" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_GETLINE $ac_have_decl" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_getopt_h='<'getopt.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <getopt.h>" >&5 printf %s "checking absolute name of <getopt.h>... " >&6; } if test ${gl_cv_next_getopt_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_getopt_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <getopt.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'getopt.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_getopt_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_getopt_h gl_cv_next_getopt_h='"'$gl_header'"' else gl_cv_next_getopt_h='<'getopt.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_getopt_h" >&5 printf "%s\n" "$gl_cv_next_getopt_h" >&6; } fi NEXT_GETOPT_H=$gl_cv_next_getopt_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'getopt.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_getopt_h fi NEXT_AS_FIRST_DIRECTIVE_GETOPT_H=$gl_next_as_first_directive if test $ac_cv_header_getopt_h = yes; then HAVE_GETOPT_H=1 else HAVE_GETOPT_H=0 fi gl_replace_getopt= if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then for ac_header in getopt.h do : ac_fn_c_check_header_compile "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" if test "x$ac_cv_header_getopt_h" = xyes then : printf "%s\n" "#define HAVE_GETOPT_H 1" >>confdefs.h else case e in #( e) gl_replace_getopt=yes ;; esac fi done fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then for ac_func in getopt_long_only do : ac_fn_c_check_func "$LINENO" "getopt_long_only" "ac_cv_func_getopt_long_only" if test "x$ac_cv_func_getopt_long_only" = xyes then : printf "%s\n" "#define HAVE_GETOPT_LONG_ONLY 1" >>confdefs.h else case e in #( e) gl_replace_getopt=yes ;; esac fi done fi if test -z "$gl_replace_getopt"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getopt is POSIX compatible" >&5 printf %s "checking whether getopt is POSIX compatible... " >&6; } if test ${gl_cv_func_getopt_posix+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $cross_compiling = no; then if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See 'config.log' for more details" "$LINENO" 5; } else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_posix=maybe else case e in #( e) gl_cv_func_getopt_posix=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi if test $gl_cv_func_getopt_posix = maybe; then if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See 'config.log' for more details" "$LINENO" 5; } else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; c = getopt (7, argv, "+abp:q:"); if (!(c == -1)) return 4; if (!(strcmp (argv[0], "program") == 0)) return 5; if (!(strcmp (argv[1], "donald") == 0)) return 6; if (!(strcmp (argv[2], "-p") == 0)) return 7; if (!(strcmp (argv[3], "billy") == 0)) return 8; if (!(strcmp (argv[4], "duck") == 0)) return 9; if (!(strcmp (argv[5], "-a") == 0)) return 10; if (!(strcmp (argv[6], "bar") == 0)) return 11; if (!(optind == 1)) return 12; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_posix=maybe else case e in #( e) gl_cv_func_getopt_posix=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi if test $gl_cv_func_getopt_posix = maybe; then if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See 'config.log' for more details" "$LINENO" 5; } else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; if (getopt (2, argv, "ab:") != 'a') return 13; if (getopt (2, argv, "ab:") != '?') return 14; if (optopt != 'b') return 15; if (optind != 2) return 16; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_posix=yes else case e in #( e) gl_cv_func_getopt_posix=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi else case "$host_os" in darwin* | aix* | mingw* | windows*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_posix" >&5 printf "%s\n" "$gl_cv_func_getopt_posix" >&6; } case "$gl_cv_func_getopt_posix" in *no) gl_replace_getopt=yes ;; esac fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt function" >&5 printf %s "checking for working GNU getopt function... " >&6; } if test ${gl_cv_func_getopt_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) # Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the # optstring is necessary for programs like m4 that have POSIX-mandated # semantics for supporting options interspersed with files. # Also, since getopt_long is a GNU extension, we require optind=0. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in xx) gl_had_POSIXLY_CORRECT=exported ;; x) gl_had_POSIXLY_CORRECT=yes ;; *) gl_had_POSIXLY_CORRECT= ;; esac POSIXLY_CORRECT=1 export POSIXLY_CORRECT if test "$cross_compiling" = yes then : gl_cv_func_getopt_gnu="$gl_cross_guess_normal" else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <getopt.h> #include <stddef.h> #include <string.h> #include <stdlib.h> #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include <mach/mach.h> #include <mach/mach_error.h> #include <mach/thread_status.h> #include <mach/exception.h> #include <mach/task.h> #include <pthread.h> /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif defined _WIN32 && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winerror.h> static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include <signal.h> #include <unistd.h> /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif int main (void) { int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 16; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 32; else if (getopt (3, argv, "+:a:b") != ':') result |= 32; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 64; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_gnu=yes else case e in #( e) gl_cv_func_getopt_gnu=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi case $gl_had_POSIXLY_CORRECT in exported) ;; yes) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}; POSIXLY_CORRECT=1 ;; *) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_gnu" >&5 printf "%s\n" "$gl_cv_func_getopt_gnu" >&6; } if test "$gl_cv_func_getopt_gnu" != yes; then gl_replace_getopt=yes else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt_long function" >&5 printf %s "checking for working GNU getopt_long function... " >&6; } if test ${gl_cv_func_getopt_long_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; *) gl_cv_func_getopt_long_gnu="guessing yes";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <getopt.h> #include <stddef.h> #include <string.h> int main (void) { static const struct option long_options[] = { { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; /* This code fails on OpenBSD 5.0. */ { static char program[] = "program"; static char xtremel[] = "--xtremel"; char *argv[] = { program, xtremel, NULL }; int option_index; optind = 1; opterr = 0; if (getopt_long (2, argv, "", long_options, &option_index) != 1003) return 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_long_gnu=yes else case e in #( e) gl_cv_func_getopt_long_gnu=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_long_gnu" >&5 printf "%s\n" "$gl_cv_func_getopt_long_gnu" >&6; } case "$gl_cv_func_getopt_long_gnu" in *yes) ;; *) gl_replace_getopt=yes ;; esac fi fi HAVE_GETTIMEOFDAY=1; HAVE_STRUCT_TIMEVAL=1; HAVE_SYS_TIME_H=1; REPLACE_GETTIMEOFDAY=0; REPLACE_STRUCT_TIMEVAL=0; if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_time_h='<'sys/time.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/time.h>" >&5 printf %s "checking absolute name of <sys/time.h>... " >&6; } if test ${gl_cv_next_sys_time_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_sys_time_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/time.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/time.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_time_h gl_cv_next_sys_time_h='"'$gl_header'"' else gl_cv_next_sys_time_h='<'sys/time.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_time_h" >&5 printf "%s\n" "$gl_cv_next_sys_time_h" >&6; } fi NEXT_SYS_TIME_H=$gl_cv_next_sys_time_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/time.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_time_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H=$gl_next_as_first_directive if test $ac_cv_header_sys_time_h != yes; then HAVE_SYS_TIME_H=0 fi if test $ac_cv_header_sys_socket_h != yes; then ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes then : printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h fi fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timeval" >&5 printf %s "checking for struct timeval... " >&6; } if test ${gl_cv_sys_struct_timeval+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_SYS_TIME_H #include <sys/time.h> #endif #include <time.h> #if HAVE_WINSOCK2_H # include <winsock2.h> #endif int main (void) { static struct timeval x; x.tv_sec = x.tv_usec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timeval=yes else case e in #( e) gl_cv_sys_struct_timeval=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timeval" >&5 printf "%s\n" "$gl_cv_sys_struct_timeval" >&6; } if test $gl_cv_sys_struct_timeval != yes; then HAVE_STRUCT_TIMEVAL=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wide-enough struct timeval.tv_sec member" >&5 printf %s "checking for wide-enough struct timeval.tv_sec member... " >&6; } if test ${gl_cv_sys_struct_timeval_tv_sec+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_SYS_TIME_H #include <sys/time.h> #endif #include <time.h> #if HAVE_WINSOCK2_H # include <winsock2.h> #endif int main (void) { static struct timeval x; typedef int verify_tv_sec_type[ sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 ]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timeval_tv_sec=yes else case e in #( e) gl_cv_sys_struct_timeval_tv_sec=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timeval_tv_sec" >&5 printf "%s\n" "$gl_cv_sys_struct_timeval_tv_sec" >&6; } if test $gl_cv_sys_struct_timeval_tv_sec != yes; then REPLACE_STRUCT_TIMEVAL=1 fi fi GL_GNULIB_GETTIMEOFDAY=0 if test -z "$gl_pthreadlib_body_done"; then gl_pthread_api=no LIBPTHREAD= LIBPMULTITHREAD= # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes then : gl_have_pthread_h=yes else case e in #( e) gl_have_pthread_h=no ;; esac fi if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html saved_LIBS="$LIBS" for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> pthread_mutex_t m; pthread_mutexattr_t ma; int main (void) { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_pthread_api=yes LIBPTHREAD=$gl_pthread LIBPMULTITHREAD=$gl_pthread fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$saved_LIBS" test $gl_pthread_api = yes && break done echo "$as_me:38835: gl_pthread_api=$gl_pthread_api" >&5 echo "$as_me:38836: LIBPTHREAD=$LIBPTHREAD" >&5 gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional # pthread functions. case "$host_os" in linux*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Lucky user" >/dev/null 2>&1 then : gl_pthread_in_glibc=yes fi rm -rf conftest* ;; esac echo "$as_me:38862: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_kill (void); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else case e in #( e) ac_cv_lib_pthread_pthread_kill=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac fi else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lthr" >&5 printf %s "checking for pthread_kill in -lthr... " >&6; } if test ${ac_cv_lib_thr_pthread_kill+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lthr $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_kill (void); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_thr_pthread_kill=yes else case e in #( e) ac_cv_lib_thr_pthread_kill=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_thr_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_thr_pthread_kill" >&6; } if test "x$ac_cv_lib_thr_pthread_kill" = xyes then : if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lthr fi fi ;; esac fi elif test $gl_pthread_api != yes; then # Some library is needed. Try libpthread and libc_r. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_kill (void); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else case e in #( e) ac_cv_lib_pthread_pthread_kill=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lpthread LIBPMULTITHREAD=-lpthread fi if test $gl_pthread_api != yes; then # For FreeBSD 4. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 printf %s "checking for pthread_kill in -lc_r... " >&6; } if test ${ac_cv_lib_c_r_pthread_kill+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_kill (void); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_c_r_pthread_kill=yes else case e in #( e) ac_cv_lib_c_r_pthread_kill=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; } if test "x$ac_cv_lib_c_r_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lc_r LIBPMULTITHREAD=-lc_r fi fi fi echo "$as_me:39096: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 printf %s "checking whether POSIX threads API is available... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 printf "%s\n" "$gl_pthread_api" >&6; } if test $gl_pthread_api = yes; then printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sched.h> int main (void) { sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : SCHED_YIELD_LIB= else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 printf %s "checking for sched_yield in -lrt... " >&6; } if test ${ac_cv_lib_rt_sched_yield+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char sched_yield (void); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_rt_sched_yield=yes else case e in #( e) ac_cv_lib_rt_sched_yield=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; } if test "x$ac_cv_lib_rt_sched_yield" = xyes then : SCHED_YIELD_LIB=-lrt else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 printf %s "checking for sched_yield in -lposix4... " >&6; } if test ${ac_cv_lib_posix4_sched_yield+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lposix4 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char sched_yield (void); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_posix4_sched_yield=yes else case e in #( e) ac_cv_lib_posix4_sched_yield=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; } if test "x$ac_cv_lib_posix4_sched_yield" = xyes then : SCHED_YIELD_LIB=-lposix4 fi ;; esac fi ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIB_SCHED_YIELD="$SCHED_YIELD_LIB" gl_pthreadlib_body_done=done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (LC_ALL, NULL) is multithread-safe" >&5 printf %s "checking whether setlocale (LC_ALL, NULL) is multithread-safe... " >&6; } if test ${gl_cv_func_setlocale_null_all_mtsafe+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku. *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku*) gl_cv_func_setlocale_null_all_mtsafe=no ;; # Guess no on Cygwin < 3.4.6. cygwin*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED >= CYGWIN_VERSION_DLL_MAKE_COMBINED (3004, 6) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Lucky user" >/dev/null 2>&1 then : gl_cv_func_setlocale_null_all_mtsafe=yes else case e in #( e) gl_cv_func_setlocale_null_all_mtsafe=no ;; esac fi rm -rf conftest* ;; # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows. *-gnu* | gnu* | hpux* | irix* | solaris* | mingw* | windows*) gl_cv_func_setlocale_null_all_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_all_mtsafe" >&5 printf "%s\n" "$gl_cv_func_setlocale_null_all_mtsafe" >&6; } case "$host_os" in mingw* | windows*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_all_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_all_mtsafe" in *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;; *) SETLOCALE_NULL_ALL_MTSAFE=0 ;; esac printf "%s\n" "#define SETLOCALE_NULL_ALL_MTSAFE $SETLOCALE_NULL_ALL_MTSAFE" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (category, NULL) is multithread-safe" >&5 printf %s "checking whether setlocale (category, NULL) is multithread-safe... " >&6; } if test ${gl_cv_func_setlocale_null_one_mtsafe+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on OpenBSD, AIX. openbsd* | aix*) gl_cv_func_setlocale_null_one_mtsafe=no ;; # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows. *-gnu* | gnu* | *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw* | windows*) gl_cv_func_setlocale_null_one_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_one_mtsafe" >&5 printf "%s\n" "$gl_cv_func_setlocale_null_one_mtsafe" >&6; } case "$host_os" in mingw* | windows*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_one_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_one_mtsafe" in *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;; *) SETLOCALE_NULL_ONE_MTSAFE=0 ;; esac printf "%s\n" "#define SETLOCALE_NULL_ONE_MTSAFE $SETLOCALE_NULL_ONE_MTSAFE" >>confdefs.h if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then case "$host_os" in mingw* | windows*) SETLOCALE_NULL_LIB= ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 printf %s "checking whether imported symbols can be declared weak... " >&6; } if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in cygwin* | mingw* | windows*) gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main (void) { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_have_weak="guessing yes" else case e in #( e) gl_cv_have_weak="guessing no" ;; esac fi rm -rf conftest* else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_have_weak=yes else case e in #( e) gl_cv_have_weak=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 printf "%s\n" "$gl_cv_have_weak" >&6; } case "$gl_cv_have_weak" in *yes) printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h ;; esac case "$gl_cv_have_weak" in *yes) SETLOCALE_NULL_LIB= ;; *) SETLOCALE_NULL_LIB="$LIBPTHREAD" ;; esac ;; esac else SETLOCALE_NULL_LIB= fi LIB_SETLOCALE_NULL="$SETLOCALE_NULL_LIB" if test $gl_cv_have_include_next = yes; then gl_cv_next_limits_h='<'limits.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <limits.h>" >&5 printf %s "checking absolute name of <limits.h>... " >&6; } if test ${gl_cv_next_limits_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_limits_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'limits.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_limits_h gl_cv_next_limits_h='"'$gl_header'"' else gl_cv_next_limits_h='<'limits.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_limits_h" >&5 printf "%s\n" "$gl_cv_next_limits_h" >&6; } fi NEXT_LIMITS_H=$gl_cv_next_limits_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'limits.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_limits_h fi NEXT_AS_FIRST_DIRECTIVE_LIMITS_H=$gl_next_as_first_directive { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether limits.h has WORD_BIT, BOOL_WIDTH etc." >&5 printf %s "checking whether limits.h has WORD_BIT, BOOL_WIDTH etc.... " >&6; } if test ${gl_cv_header_limits_width+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <limits.h> long long llm = LLONG_MAX; int wb = WORD_BIT; int ullw = ULLONG_WIDTH; int bw = BOOL_WIDTH; int bm = BOOL_MAX; int mblm = MB_LEN_MAX; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_limits_width=yes else case e in #( e) gl_cv_header_limits_width=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_width" >&5 printf "%s\n" "$gl_cv_header_limits_width" >&6; } GL_GENERATE_LIMITS_H=true if test "$gl_cv_header_limits_width" = yes then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether limits.h has SSIZE_MAX" >&5 printf %s "checking whether limits.h has SSIZE_MAX... " >&6; } if test ${gl_cv_header_limits_ssize_max+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #ifndef SSIZE_MAX #error "SSIZE_MAX is not defined" #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_limits_ssize_max=yes else case e in #( e) gl_cv_header_limits_ssize_max=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_ssize_max" >&5 printf "%s\n" "$gl_cv_header_limits_ssize_max" >&6; } if test "$gl_cv_header_limits_ssize_max" = yes; then GL_GENERATE_LIMITS_H=false fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 printf %s "checking for wint_t... " >&6; } if test ${gt_cv_c_wint_t+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> wint_t foo = (wchar_t)'\0'; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_c_wint_t=yes else case e in #( e) gt_cv_c_wint_t=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 printf "%s\n" "$gt_cv_c_wint_t" >&6; } if test $gt_cv_c_wint_t = yes; then printf "%s\n" "#define HAVE_WINT_T 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wint_t is large enough" >&5 printf %s "checking whether wint_t is large enough... " >&6; } if test ${gl_cv_type_wint_t_large_enough+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_wint_t_large_enough=yes else case e in #( e) gl_cv_type_wint_t_large_enough=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_large_enough" >&5 printf "%s\n" "$gl_cv_type_wint_t_large_enough" >&6; } if test $gl_cv_type_wint_t_large_enough = no; then GNULIBHEADERS_OVERRIDE_WINT_T=1 else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler produces multi-arch binaries" >&5 printf %s "checking whether the compiler produces multi-arch binaries... " >&6; } if test ${gl_cv_c_multiarch+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_cv_c_multiarch=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO" then : arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64 | arm | arm64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_multiarch" >&5 printf "%s\n" "$gl_cv_c_multiarch" >&6; } if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi printf "%s\n" "#define HAVE_LONG_LONG_INT 1" >>confdefs.h printf "%s\n" "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_stdint_h='<'stdint.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5 printf %s "checking absolute name of <stdint.h>... " >&6; } if test ${gl_cv_next_stdint_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_stdint_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdint.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdint.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdint_h gl_cv_next_stdint_h='"'$gl_header'"' else gl_cv_next_stdint_h='<'stdint.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5 printf "%s\n" "$gl_cv_next_stdint_h" >&6; } fi NEXT_STDINT_H=$gl_cv_next_stdint_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdint.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdint_h fi NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi if test $ac_cv_header_stdint_h = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5 printf %s "checking whether stdint.h conforms to C99... " >&6; } if test ${gl_cv_header_working_stdint_h+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_cv_header_working_stdint_h=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" #endif #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ /* ISO C 11 mandates _Generic, but GCC versions < 4.9 lack it. */ #if 201112 <= __STDC_VERSION__ \ && (!defined __GNUC__ || 4 < __GNUC__ + (9 <= __GNUC_MINOR__) \ || defined __clang__) int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || 4 <= __clang_major__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include <limits.h> /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0/ia64 and FreeBSD 13.0/arm64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on native Windows. mingw* | windows*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif #include <stdio.h> #include <string.h> #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; int main (void) { const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_header_working_stdint_h=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5 printf "%s\n" "$gl_cv_header_working_stdint_h" >&6; } fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 GL_GENERATE_STDINT_H=true case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stdint.h works without ISO C predefines" >&5 printf %s "checking whether stdint.h works without ISO C predefines... " >&6; } if test ${gl_cv_header_stdint_without_STDC_macros+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_cv_header_stdint_without_STDC_macros=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include <stdint.h> #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_stdint_without_STDC_macros=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_without_STDC_macros" >&5 printf "%s\n" "$gl_cv_header_stdint_without_STDC_macros" >&6; } if test $gl_cv_header_stdint_without_STDC_macros = no; then printf "%s\n" "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h printf "%s\n" "#define __STDC_LIMIT_MACROS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stdint.h has UINTMAX_WIDTH etc." >&5 printf %s "checking whether stdint.h has UINTMAX_WIDTH etc.... " >&6; } if test ${gl_cv_header_stdint_width+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_cv_header_stdint_width=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <stdint.h> #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif int iw = UINTMAX_WIDTH; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_stdint_width=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_width" >&5 printf "%s\n" "$gl_cv_header_stdint_width" >&6; } if test "$gl_cv_header_stdint_width" = yes; then GL_GENERATE_STDINT_H=false fi ;; *) ac_fn_c_check_header_compile "$LINENO" "sys/inttypes.h" "ac_cv_header_sys_inttypes_h" "$ac_includes_default" if test "x$ac_cv_header_sys_inttypes_h" = xyes then : printf "%s\n" "#define HAVE_SYS_INTTYPES_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/bitypes.h" "ac_cv_header_sys_bitypes_h" "$ac_includes_default" if test "x$ac_cv_header_sys_bitypes_h" = xyes then : printf "%s\n" "#define HAVE_SYS_BITYPES_H 1" >>confdefs.h fi if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 printf %s "checking for bit size of $gltype... " >&6; } if eval test \${gl_cv_bitsizeof_${gltype}+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif #include <limits.h>" then : else case e in #( e) result=unknown ;; esac fi eval gl_cv_bitsizeof_${gltype}=\$result ;; esac fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` printf "%s\n" "#define BITSIZEOF_${GLTYPE} $result" >>confdefs.h eval BITSIZEOF_${GLTYPE}=\$result done fi for gltype in sig_atomic_t wchar_t wint_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 printf %s "checking for bit size of $gltype... " >&6; } if eval test \${gl_cv_bitsizeof_${gltype}+y} then : printf %s "(cached) " >&6 else case e in #( e) if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif #include <limits.h>" then : else case e in #( e) result=unknown ;; esac fi eval gl_cv_bitsizeof_${gltype}=\$result ;; esac fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` printf "%s\n" "#define BITSIZEOF_${GLTYPE} $result" >>confdefs.h eval BITSIZEOF_${GLTYPE}=\$result done for gltype in sig_atomic_t wchar_t wint_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5 printf %s "checking whether $gltype is signed... " >&6; } if eval test \${gl_cv_type_${gltype}_signed+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif int verify[2 * (($gltype) -1 < ($gltype) 0) - 1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : result=yes else case e in #( e) result=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval gl_cv_type_${gltype}_signed=\$result ;; esac fi eval ac_res=\$gl_cv_type_${gltype}_signed { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then printf "%s\n" "#define HAVE_SIGNED_${GLTYPE} 1" >>confdefs.h eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 printf %s "checking for $gltype integer literal suffix... " >&6; } if eval test \${gl_cv_type_${gltype}_suffix+y} then : printf %s "(cached) " >&6 else case e in #( e) eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif extern $gltype foo; extern $gltype1 foo; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done ;; esac fi eval ac_res=\$gl_cv_type_${gltype}_suffix { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result printf "%s\n" "#define ${GLTYPE}_SUFFIX $result" >>confdefs.h done fi for gltype in sig_atomic_t wchar_t wint_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 printf %s "checking for $gltype integer literal suffix... " >&6; } if eval test \${gl_cv_type_${gltype}_suffix+y} then : printf %s "(cached) " >&6 else case e in #( e) eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif extern $gltype foo; extern $gltype1 foo; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done ;; esac fi eval ac_res=\$gl_cv_type_${gltype}_suffix { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result printf "%s\n" "#define ${GLTYPE}_SUFFIX $result" >>confdefs.h done if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ;; esac GL_GENERATE_LIMITS_H=true HAVE_DECL_IMAXABS=1; HAVE_DECL_IMAXDIV=1; HAVE_DECL_STRTOIMAX=1; HAVE_DECL_STRTOUMAX=1; HAVE_IMAXDIV_T=1; HAVE_IMAXABS=1; HAVE_IMAXDIV=1; REPLACE_IMAXABS=0; REPLACE_IMAXDIV=0; REPLACE_STRTOIMAX=0; REPLACE_STRTOUMAX=0; INT32_MAX_LT_INTMAX_MAX=1; INT64_MAX_EQ_LONG_MAX='defined _LP64'; PRIPTR_PREFIX=__PRIPTR_PREFIX; UINT32_MAX_LT_UINTMAX_MAX=1; UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; if test $gl_cv_have_include_next = yes; then gl_cv_next_inttypes_h='<'inttypes.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <inttypes.h>" >&5 printf %s "checking absolute name of <inttypes.h>... " >&6; } if test ${gl_cv_next_inttypes_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_inttypes_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <inttypes.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'inttypes.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_inttypes_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_inttypes_h gl_cv_next_inttypes_h='"'$gl_header'"' else gl_cv_next_inttypes_h='<'inttypes.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_inttypes_h" >&5 printf "%s\n" "$gl_cv_next_inttypes_h" >&6; } fi NEXT_INTTYPES_H=$gl_cv_next_inttypes_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'inttypes.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_inttypes_h fi NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H=$gl_next_as_first_directive PRIPTR_PREFIX= if $GL_GENERATE_STDINT_H; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _WIN64 LLP64 #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : PRIPTR_PREFIX='"l"' else case e in #( e) PRIPTR_PREFIX='"ll"' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext else for glpfx in '' l ll I64; do case $glpfx in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; I64) gltype1='__int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdint.h> extern intptr_t foo; extern $gltype1 foo; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : PRIPTR_PREFIX='"'$glpfx'"' fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test -n "$PRIPTR_PREFIX" && break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether INT32_MAX < INTMAX_MAX" >&5 printf %s "checking whether INT32_MAX < INTMAX_MAX... " >&6; } if test ${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #if defined INT32_MAX && defined INTMAX_MAX #define CONDITION (INT32_MAX < INTMAX_MAX) #else #define CONDITION (sizeof (int) < sizeof (long long int)) #endif int test[CONDITION ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes else case e in #( e) gl_cv_test_INT32_MAX_LT_INTMAX_MAX=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&5 printf "%s\n" "$gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&6; } if test $gl_cv_test_INT32_MAX_LT_INTMAX_MAX = yes; then INT32_MAX_LT_INTMAX_MAX=1; else INT32_MAX_LT_INTMAX_MAX=0; fi if test $APPLE_UNIVERSAL_BUILD = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether INT64_MAX == LONG_MAX" >&5 printf %s "checking whether INT64_MAX == LONG_MAX... " >&6; } if test ${gl_cv_test_INT64_MAX_EQ_LONG_MAX+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #if defined INT64_MAX #define CONDITION (INT64_MAX == LONG_MAX) #else #define CONDITION (sizeof (long long int) == sizeof (long int)) #endif int test[CONDITION ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_test_INT64_MAX_EQ_LONG_MAX=yes else case e in #( e) gl_cv_test_INT64_MAX_EQ_LONG_MAX=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&5 printf "%s\n" "$gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&6; } if test $gl_cv_test_INT64_MAX_EQ_LONG_MAX = yes; then INT64_MAX_EQ_LONG_MAX=1; else INT64_MAX_EQ_LONG_MAX=0; fi else INT64_MAX_EQ_LONG_MAX=-1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UINT32_MAX < UINTMAX_MAX" >&5 printf %s "checking whether UINT32_MAX < UINTMAX_MAX... " >&6; } if test ${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #if defined UINT32_MAX && defined UINTMAX_MAX #define CONDITION (UINT32_MAX < UINTMAX_MAX) #else #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int)) #endif int test[CONDITION ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes else case e in #( e) gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&5 printf "%s\n" "$gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&6; } if test $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX = yes; then UINT32_MAX_LT_UINTMAX_MAX=1; else UINT32_MAX_LT_UINTMAX_MAX=0; fi if test $APPLE_UNIVERSAL_BUILD = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UINT64_MAX == ULONG_MAX" >&5 printf %s "checking whether UINT64_MAX == ULONG_MAX... " >&6; } if test ${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #if defined UINT64_MAX #define CONDITION (UINT64_MAX == ULONG_MAX) #else #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int)) #endif int test[CONDITION ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=yes else case e in #( e) gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&5 printf "%s\n" "$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; } if test $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX = yes; then UINT64_MAX_EQ_ULONG_MAX=1; else UINT64_MAX_EQ_ULONG_MAX=0; fi else UINT64_MAX_EQ_ULONG_MAX=-1 fi GL_GNULIB_IMAXABS=0 GL_GNULIB_IMAXDIV=0 GL_GNULIB_STRTOIMAX=0 GL_GNULIB_STRTOUMAX=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5 printf %s "checking where to find the exponent in a 'double'... " >&6; } if test ${gl_cv_cc_double_expbit0+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined arm || defined __arm || defined __arm__ mixed_endianness #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "mixed_endianness" >/dev/null 2>&1 then : gl_cv_cc_double_expbit0="unknown" else case e in #( e) : if test ${ac_cv_c_bigendian+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO" then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/param.h> int main (void) { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \\ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \\ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/param.h> int main (void) { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes else case e in #( e) ac_cv_c_bigendian=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> int main (void) { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> int main (void) { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes else case e in #( e) ac_cv_c_bigendian=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ unsigned short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; unsigned short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } unsigned short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; unsigned short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } int main (int argc, char **argv) { /* Intimidate the compiler so that it does not optimize the arrays away. */ char *p = argv[0]; ascii_mm[1] = *p++; ebcdic_mm[1] = *p++; ascii_ii[1] = *p++; ebcdic_ii[1] = *p++; return use_ascii (argc) == use_ebcdic (*p); } _ACEOF if ac_fn_c_try_link "$LINENO" then : if grep BIGenDianSyS conftest$ac_exeext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest$ac_exeext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_bigendian=no else case e in #( e) ac_cv_c_bigendian=yes ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi : case $ac_cv_c_bigendian in #( yes) gl_cv_cc_double_expbit0="word 0 bit 20";; #( no) gl_cv_cc_double_expbit0="word 1 bit 20" ;; #( universal) printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) gl_cv_cc_double_expbit0="unknown" ;; esac ;; esac fi rm -rf conftest* else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (double x) { memory_double m; size_t i; /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ memset (&m, 0, sizeof (memory_double)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25); add_to_ored_words (0.5); add_to_ored_words (1.0); add_to_ored_words (2.0); add_to_ored_words (4.0); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_cc_double_expbit0=`cat conftest.out` else case e in #( e) gl_cv_cc_double_expbit0="unknown" ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f conftest.out ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_expbit0" >&5 printf "%s\n" "$gl_cv_cc_double_expbit0" >&6; } case "$gl_cv_cc_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` printf "%s\n" "#define DBL_EXPBIT0_WORD $word" >>confdefs.h printf "%s\n" "#define DBL_EXPBIT0_BIT $bit" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5 printf %s "checking where to find the exponent in a 'float'... " >&6; } if test ${gl_cv_cc_float_expbit0+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : gl_cv_cc_float_expbit0="word 0 bit 23" else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (float x) { memory_float m; size_t i; /* Clear it first, in case sizeof (float) < sizeof (memory_float). */ memset (&m, 0, sizeof (memory_float)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25f); add_to_ored_words (0.5f); add_to_ored_words (1.0f); add_to_ored_words (2.0f); add_to_ored_words (4.0f); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_cc_float_expbit0=`cat conftest.out` else case e in #( e) gl_cv_cc_float_expbit0="unknown" ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f conftest.out ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5 printf "%s\n" "$gl_cv_cc_float_expbit0" >&6; } case "$gl_cv_cc_float_expbit0" in word*bit*) word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` printf "%s\n" "#define FLT_EXPBIT0_WORD $word" >>confdefs.h printf "%s\n" "#define FLT_EXPBIT0_BIT $bit" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 printf %s "checking whether byte ordering is bigendian... " >&6; } if test ${ac_cv_c_bigendian+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO" then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/param.h> int main (void) { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \\ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \\ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/param.h> int main (void) { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes else case e in #( e) ac_cv_c_bigendian=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> int main (void) { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> int main (void) { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes else case e in #( e) ac_cv_c_bigendian=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ unsigned short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; unsigned short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } unsigned short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; unsigned short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } int main (int argc, char **argv) { /* Intimidate the compiler so that it does not optimize the arrays away. */ char *p = argv[0]; ascii_mm[1] = *p++; ebcdic_mm[1] = *p++; ascii_ii[1] = *p++; ebcdic_ii[1] = *p++; return use_ascii (argc) == use_ebcdic (*p); } _ACEOF if ac_fn_c_try_link "$LINENO" then : if grep BIGenDianSyS conftest$ac_exeext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest$ac_exeext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_bigendian=no else case e in #( e) ac_cv_c_bigendian=yes ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 printf "%s\n" "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether long double and double are the same" >&5 printf %s "checking whether long double and double are the same... " >&6; } if test ${gl_cv_long_double_equals_double+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> int main (void) { typedef int check[sizeof (long double) == sizeof (double) && LDBL_MANT_DIG == DBL_MANT_DIG && LDBL_MAX_EXP == DBL_MAX_EXP && LDBL_MIN_EXP == DBL_MIN_EXP ? 1 : -1]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_long_double_equals_double=yes else case e in #( e) gl_cv_long_double_equals_double=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_long_double_equals_double" >&5 printf "%s\n" "$gl_cv_long_double_equals_double" >&6; } if test $gl_cv_long_double_equals_double = yes; then printf "%s\n" "#define HAVE_SAME_LONG_DOUBLE_AS_DOUBLE 1" >>confdefs.h HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 else HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5 printf %s "checking where to find the exponent in a 'long double'... " >&6; } if test ${gl_cv_cc_long_double_expbit0+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : gl_cv_cc_long_double_expbit0="unknown" case "$host_os" in mingw* | windows*) # On native Windows (little-endian), we know the result # in two cases: mingw, MSVC. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __MINGW32__ Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Known" >/dev/null 2>&1 then : gl_cv_cc_long_double_expbit0="word 2 bit 0" fi rm -rf conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Known" >/dev/null 2>&1 then : gl_cv_cc_long_double_expbit0="word 1 bit 20" fi rm -rf conftest* ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (long double *x) { memory_long_double m; size_t i; /* Clear it first, in case sizeof (long double) < sizeof (memory_long_double). */ memset (&m, 0, sizeof (memory_long_double)); m.value = *x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { static long double samples[5] = { 0.25L, 0.5L, 1.0L, 2.0L, 4.0L }; size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; for (j = 0; j < 5; j++) add_to_ored_words (&samples[j]); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_cc_long_double_expbit0=`cat conftest.out` else case e in #( e) gl_cv_cc_long_double_expbit0="unknown" ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f conftest.out ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_expbit0" >&5 printf "%s\n" "$gl_cv_cc_long_double_expbit0" >&6; } case "$gl_cv_cc_long_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` printf "%s\n" "#define LDBL_EXPBIT0_WORD $word" >>confdefs.h printf "%s\n" "#define LDBL_EXPBIT0_BIT $bit" >>confdefs.h ;; esac HAVE_ISWBLANK=1; HAVE_WCTYPE_T=1; HAVE_WCTRANS_T=1; REPLACE_ISWBLANK=0; REPLACE_ISWDIGIT=0; REPLACE_ISWPUNCT=0; REPLACE_ISWXDIGIT=0; REPLACE_WCTRANS=0; REPLACE_WCTYPE=0; if test $ac_cv_header_crtdefs_h = yes; then HAVE_CRTDEFS_H=1 else HAVE_CRTDEFS_H=0 fi if test $ac_cv_func_iswcntrl = yes; then HAVE_ISWCNTRL=1 else HAVE_ISWCNTRL=0 fi if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_wctype_h='<'wctype.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5 printf %s "checking absolute name of <wctype.h>... " >&6; } if test ${gl_cv_next_wctype_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_wctype_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wctype.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'wctype.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_wctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_wctype_h gl_cv_next_wctype_h='"'$gl_header'"' else gl_cv_next_wctype_h='<'wctype.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5 printf "%s\n" "$gl_cv_next_wctype_h" >&6; } fi NEXT_WCTYPE_H=$gl_cv_next_wctype_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'wctype.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_wctype_h fi NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive if test $ac_cv_header_wctype_h = yes; then if test $ac_cv_func_iswcntrl = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5 printf %s "checking whether iswcntrl works... " >&6; } if test ${gl_cv_func_iswcntrl_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #if __GNU_LIBRARY__ == 1 Linux libc5 i18n is broken. #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_iswcntrl_works="guessing yes" else case e in #( e) gl_cv_func_iswcntrl_works="guessing no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> #include <wctype.h> int main () { return iswprint ('x') == 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_iswcntrl_works=yes else case e in #( e) gl_cv_func_iswcntrl_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5 printf "%s\n" "$gl_cv_func_iswcntrl_works" >&6; } fi HAVE_WCTYPE_H=1 else HAVE_WCTYPE_H=0 fi if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then REPLACE_ISWCNTRL=1 else case "$gl_cv_func_iswcntrl_works" in *yes) REPLACE_ISWCNTRL=0 ;; *) REPLACE_ISWCNTRL=1 ;; esac fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then : fi if test $REPLACE_ISWCNTRL = 1; then REPLACE_TOWLOWER=1 else ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower" if test "x$ac_cv_func_towlower" = xyes then : printf "%s\n" "#define HAVE_TOWLOWER 1" >>confdefs.h fi if test $ac_cv_func_towlower = yes; then REPLACE_TOWLOWER=0 else ac_fn_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "#include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_towlower" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_TOWLOWER $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_towlower = yes; then REPLACE_TOWLOWER=1 else REPLACE_TOWLOWER=0 fi fi fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then : fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5 printf %s "checking for wctype_t... " >&6; } if test ${gl_cv_type_wctype_t+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif wctype_t a; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_wctype_t=yes else case e in #( e) gl_cv_type_wctype_t=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5 printf "%s\n" "$gl_cv_type_wctype_t" >&6; } if test $gl_cv_type_wctype_t = no; then HAVE_WCTYPE_T=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5 printf %s "checking for wctrans_t... " >&6; } if test ${gl_cv_type_wctrans_t+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> #include <wctype.h> wctrans_t a; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_wctrans_t=yes else case e in #( e) gl_cv_type_wctrans_t=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5 printf "%s\n" "$gl_cv_type_wctrans_t" >&6; } if test $gl_cv_type_wctrans_t = no; then HAVE_WCTRANS_T=0 fi GL_GNULIB_ISWBLANK=0 GL_GNULIB_ISWDIGIT=0 GL_GNULIB_ISWPUNCT=0 GL_GNULIB_ISWXDIGIT=0 GL_GNULIB_WCTYPE=0 GL_GNULIB_ISWCTYPE=0 GL_GNULIB_WCTRANS=0 GL_GNULIB_TOWCTRANS=0 HAVE_WCTYPE=$HAVE_WCTYPE_T if test $HAVE_WCTYPE = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wctype supports the \"blank\" and \"punct\" character classes" >&5 printf %s "checking whether wctype supports the \"blank\" and \"punct\" character classes... " >&6; } if test ${gl_cv_func_wctype_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on native Windows. mingw* | windows*) gl_cv_func_wctype_works="guessing no" ;; # Guess no on Android. android*) gl_cv_func_wctype_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wctype_works="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ctype.h> #include <wchar.h> #include <wctype.h> int main () { /* This test fails on mingw. */ if (wctype ("blank") == (wctype_t)0) return 1; /* This test fails on MSVC 14. */ if ((! iswctype ('\t', wctype ("blank"))) != (! iswblank ('\t'))) return 2; /* This test fails on Android 11. */ if ((! iswctype ('\`', wctype ("punct"))) != (! ispunct ('\`'))) return 4; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_wctype_works=yes else case e in #( e) gl_cv_func_wctype_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wctype_works" >&5 printf "%s\n" "$gl_cv_func_wctype_works" >&6; } case "$gl_cv_func_wctype_works" in *yes) ;; *) REPLACE_WCTYPE=1 ;; esac fi HAVE_NL_LANGINFO=1; REPLACE_NL_LANGINFO=0; if test $gl_cv_have_include_next = yes; then gl_cv_next_langinfo_h='<'langinfo.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <langinfo.h>" >&5 printf %s "checking absolute name of <langinfo.h>... " >&6; } if test ${gl_cv_next_langinfo_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_langinfo_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'langinfo.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_langinfo_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_langinfo_h gl_cv_next_langinfo_h='"'$gl_header'"' else gl_cv_next_langinfo_h='<'langinfo.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_langinfo_h" >&5 printf "%s\n" "$gl_cv_next_langinfo_h" >&6; } fi NEXT_LANGINFO_H=$gl_cv_next_langinfo_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'langinfo.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_langinfo_h fi NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H=$gl_next_as_first_directive HAVE_LANGINFO_CODESET=0 HAVE_LANGINFO_T_FMT_AMPM=0 HAVE_LANGINFO_ALTMON=0 HAVE_LANGINFO_ERA=0 HAVE_LANGINFO_YESEXPR=0 if test $ac_cv_header_langinfo_h = yes; then HAVE_LANGINFO_H=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines CODESET" >&5 printf %s "checking whether langinfo.h defines CODESET... " >&6; } if test ${gl_cv_header_langinfo_codeset+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = CODESET; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_codeset=yes else case e in #( e) gl_cv_header_langinfo_codeset=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_codeset" >&5 printf "%s\n" "$gl_cv_header_langinfo_codeset" >&6; } if test $gl_cv_header_langinfo_codeset = yes; then HAVE_LANGINFO_CODESET=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines T_FMT_AMPM" >&5 printf %s "checking whether langinfo.h defines T_FMT_AMPM... " >&6; } if test ${gl_cv_header_langinfo_t_fmt_ampm+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = T_FMT_AMPM; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_t_fmt_ampm=yes else case e in #( e) gl_cv_header_langinfo_t_fmt_ampm=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_t_fmt_ampm" >&5 printf "%s\n" "$gl_cv_header_langinfo_t_fmt_ampm" >&6; } if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then HAVE_LANGINFO_T_FMT_AMPM=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines ALTMON_1" >&5 printf %s "checking whether langinfo.h defines ALTMON_1... " >&6; } if test ${gl_cv_header_langinfo_altmon+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = ALTMON_1; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_altmon=yes else case e in #( e) gl_cv_header_langinfo_altmon=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_altmon" >&5 printf "%s\n" "$gl_cv_header_langinfo_altmon" >&6; } if test $gl_cv_header_langinfo_altmon = yes; then HAVE_LANGINFO_ALTMON=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines ERA" >&5 printf %s "checking whether langinfo.h defines ERA... " >&6; } if test ${gl_cv_header_langinfo_era+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = ERA; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_era=yes else case e in #( e) gl_cv_header_langinfo_era=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_era" >&5 printf "%s\n" "$gl_cv_header_langinfo_era" >&6; } if test $gl_cv_header_langinfo_era = yes; then HAVE_LANGINFO_ERA=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines YESEXPR" >&5 printf %s "checking whether langinfo.h defines YESEXPR... " >&6; } if test ${gl_cv_header_langinfo_yesexpr+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = YESEXPR; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_yesexpr=yes else case e in #( e) gl_cv_header_langinfo_yesexpr=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_langinfo_yesexpr" >&5 printf "%s\n" "$gl_cv_header_langinfo_yesexpr" >&6; } if test $gl_cv_header_langinfo_yesexpr = yes; then HAVE_LANGINFO_YESEXPR=1 fi else HAVE_LANGINFO_H=0 fi GL_GNULIB_NL_LANGINFO=0 HAVE_NEWLOCALE=1; HAVE_DUPLOCALE=1; HAVE_FREELOCALE=1; REPLACE_LOCALECONV=0; REPLACE_SETLOCALE=0; REPLACE_NEWLOCALE=0; REPLACE_DUPLOCALE=0; REPLACE_FREELOCALE=0; REPLACE_STRUCT_LCONV=0; LOCALENAME_ENHANCE_LOCALE_FUNCS=0; REPLACE_NULL=0; HAVE_MAX_ALIGN_T=1; HAVE_WCHAR_T=1; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 printf %s "checking for wchar_t... " >&6; } if test ${gt_cv_c_wchar_t+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> wchar_t foo = (wchar_t)'\0'; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_c_wchar_t=yes else case e in #( e) gt_cv_c_wchar_t=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 printf "%s\n" "$gt_cv_c_wchar_t" >&6; } if test $gt_cv_c_wchar_t = yes; then printf "%s\n" "#define HAVE_WCHAR_T 1" >>confdefs.h fi GL_GENERATE_STDDEF_H=false { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5 printf %s "checking for good max_align_t... " >&6; } if test ${gl_cv_type_max_align_t+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* On FreeBSD 12.0/x86, max_align_t defined by <stddef.h> has the correct alignment with the default (wrong) definition of _Alignof, but a wrong alignment as soon as we activate an ISO C compliant _Alignof definition. */ #if ((defined __GNUC__ && 4 <= __GNUC__) || defined __clang__) && !defined __cplusplus #define _Alignof(type) __builtin_offsetof (struct { char __a; type __b; }, __b) #endif #include <stddef.h> unsigned int s = sizeof (max_align_t); #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; #endif typedef struct { char a; max_align_t b; } max_helper; typedef struct { char a; long b; } long_helper; typedef struct { char a; double b; } double_helper; typedef struct { char a; long double b; } long_double_helper; int check3[2 * (offsetof (long_helper, b) <= offsetof (max_helper, b)) - 1]; int check4[2 * (offsetof (double_helper, b) <= offsetof (max_helper, b)) - 1]; int check5[2 * (offsetof (long_double_helper, b) <= offsetof (max_helper, b)) - 1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_max_align_t=yes else case e in #( e) gl_cv_type_max_align_t=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_max_align_t" >&5 printf "%s\n" "$gl_cv_type_max_align_t" >&6; } if test $gl_cv_type_max_align_t = no; then HAVE_MAX_ALIGN_T=0 GL_GENERATE_STDDEF_H=true fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 GL_GENERATE_STDDEF_H=true fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 printf %s "checking whether NULL can be used in arbitrary expressions... " >&6; } if test ${gl_cv_decl_null_works+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> int test[2 * (sizeof NULL == sizeof (void *)) -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_decl_null_works=yes else case e in #( e) gl_cv_decl_null_works=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5 printf "%s\n" "$gl_cv_decl_null_works" >&6; } if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 GL_GENERATE_STDDEF_H=true fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unreachable" >&5 printf %s "checking for unreachable... " >&6; } if test ${gl_cv_func_unreachable+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> int main (void) { unreachable (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_unreachable=yes else case e in #( e) gl_cv_func_unreachable=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unreachable" >&5 printf "%s\n" "$gl_cv_func_unreachable" >&6; } if test $gl_cv_func_unreachable = no; then GL_GENERATE_STDDEF_H=true fi if $GL_GENERATE_STDDEF_H; then if test $gl_cv_have_include_next = yes; then gl_cv_next_stddef_h='<'stddef.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5 printf %s "checking absolute name of <stddef.h>... " >&6; } if test ${gl_cv_next_stddef_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stddef.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stddef_h gl_cv_next_stddef_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 printf "%s\n" "$gl_cv_next_stddef_h" >&6; } fi NEXT_STDDEF_H=$gl_cv_next_stddef_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stddef.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stddef_h fi NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether locale.h defines locale_t" >&5 printf %s "checking whether locale.h defines locale_t... " >&6; } if test ${gl_cv_header_locale_has_locale_t+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> locale_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_locale_has_locale_t=yes else case e in #( e) gl_cv_header_locale_has_locale_t=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_has_locale_t" >&5 printf "%s\n" "$gl_cv_header_locale_has_locale_t" >&6; } if test $ac_cv_header_xlocale_h = yes; then HAVE_XLOCALE_H=1 if test $gl_cv_header_locale_has_locale_t = yes; then gl_cv_header_locale_h_needs_xlocale_h=no else gl_cv_header_locale_h_needs_xlocale_h=yes fi HAVE_LOCALE_T=1 else HAVE_XLOCALE_H=0 gl_cv_header_locale_h_needs_xlocale_h=no if test $gl_cv_header_locale_has_locale_t = yes; then HAVE_LOCALE_T=1 else HAVE_LOCALE_T=0 fi fi case "$host_os" in solaris*) printf "%s\n" "#define _LCONV_C99 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether locale.h conforms to POSIX:2001" >&5 printf %s "checking whether locale.h conforms to POSIX:2001... " >&6; } if test ${gl_cv_header_locale_h_posix2001+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> int x = LC_MESSAGES; int y = sizeof (((struct lconv *) 0)->decimal_point); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_locale_h_posix2001=yes else case e in #( e) gl_cv_header_locale_h_posix2001=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_locale_h_posix2001" >&5 printf "%s\n" "$gl_cv_header_locale_h_posix2001" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct lconv is properly defined" >&5 printf %s "checking whether struct lconv is properly defined... " >&6; } if test ${gl_cv_sys_struct_lconv_ok+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> struct lconv l; int x = sizeof (l.decimal_point); int y = sizeof (l.int_p_cs_precedes); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_lconv_ok=yes else case e in #( e) gl_cv_sys_struct_lconv_ok=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_lconv_ok" >&5 printf "%s\n" "$gl_cv_sys_struct_lconv_ok" >&6; } if test $gl_cv_sys_struct_lconv_ok = no; then case "$host_os" in windows*-msvc*) ;; mingw* | windows*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Special #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Special" >/dev/null 2>&1 then : else case e in #( e) REPLACE_STRUCT_LCONV=1 ;; esac fi rm -rf conftest* ;; *) REPLACE_STRUCT_LCONV=1 ;; esac fi if test $gl_cv_have_include_next = yes; then gl_cv_next_locale_h='<'locale.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <locale.h>" >&5 printf %s "checking absolute name of <locale.h>... " >&6; } if test ${gl_cv_next_locale_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'locale.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_locale_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_locale_h gl_cv_next_locale_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_locale_h" >&5 printf "%s\n" "$gl_cv_next_locale_h" >&6; } fi NEXT_LOCALE_H=$gl_cv_next_locale_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'locale.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_locale_h fi NEXT_AS_FIRST_DIRECTIVE_LOCALE_H=$gl_next_as_first_directive GL_GNULIB_LOCALECONV=0 GL_GNULIB_SETLOCALE=0 GL_GNULIB_SETLOCALE_NULL=0 GL_GNULIB_DUPLOCALE=0 GL_GNULIB_LOCALENAME=0 gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 printf %s "checking whether imported symbols can be declared weak... " >&6; } if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in cygwin* | mingw* | windows*) gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main (void) { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_have_weak="guessing yes" else case e in #( e) gl_cv_have_weak="guessing no" ;; esac fi rm -rf conftest* else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_have_weak=yes else case e in #( e) gl_cv_have_weak=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 printf "%s\n" "$gl_cv_have_weak" >&6; } case "$gl_cv_have_weak" in *yes) printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h ;; esac if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then : fi if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then gl_have_isoc_threads="$ac_cv_header_threads_h" fi if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then if test -z "$gl_pthreadlib_body_done"; then gl_pthread_api=no LIBPTHREAD= LIBPMULTITHREAD= # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes then : gl_have_pthread_h=yes else case e in #( e) gl_have_pthread_h=no ;; esac fi if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html saved_LIBS="$LIBS" for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> pthread_mutex_t m; pthread_mutexattr_t ma; int main (void) { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_pthread_api=yes LIBPTHREAD=$gl_pthread LIBPMULTITHREAD=$gl_pthread fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$saved_LIBS" test $gl_pthread_api = yes && break done echo "$as_me:43375: gl_pthread_api=$gl_pthread_api" >&5 echo "$as_me:43376: LIBPTHREAD=$LIBPTHREAD" >&5 gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional # pthread functions. case "$host_os" in linux*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Lucky user" >/dev/null 2>&1 then : gl_pthread_in_glibc=yes fi rm -rf conftest* ;; esac echo "$as_me:43402: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_kill (void); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else case e in #( e) ac_cv_lib_pthread_pthread_kill=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac fi else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lthr" >&5 printf %s "checking for pthread_kill in -lthr... " >&6; } if test ${ac_cv_lib_thr_pthread_kill+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lthr $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_kill (void); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_thr_pthread_kill=yes else case e in #( e) ac_cv_lib_thr_pthread_kill=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_thr_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_thr_pthread_kill" >&6; } if test "x$ac_cv_lib_thr_pthread_kill" = xyes then : if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lthr fi fi ;; esac fi elif test $gl_pthread_api != yes; then # Some library is needed. Try libpthread and libc_r. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_kill (void); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else case e in #( e) ac_cv_lib_pthread_pthread_kill=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lpthread LIBPMULTITHREAD=-lpthread fi if test $gl_pthread_api != yes; then # For FreeBSD 4. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 printf %s "checking for pthread_kill in -lc_r... " >&6; } if test ${ac_cv_lib_c_r_pthread_kill+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_kill (void); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_c_r_pthread_kill=yes else case e in #( e) ac_cv_lib_c_r_pthread_kill=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; } if test "x$ac_cv_lib_c_r_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lc_r LIBPMULTITHREAD=-lc_r fi fi fi echo "$as_me:43636: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 printf %s "checking whether POSIX threads API is available... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 printf "%s\n" "$gl_pthread_api" >&6; } if test $gl_pthread_api = yes; then printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sched.h> int main (void) { sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : SCHED_YIELD_LIB= else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 printf %s "checking for sched_yield in -lrt... " >&6; } if test ${ac_cv_lib_rt_sched_yield+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char sched_yield (void); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_rt_sched_yield=yes else case e in #( e) ac_cv_lib_rt_sched_yield=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; } if test "x$ac_cv_lib_rt_sched_yield" = xyes then : SCHED_YIELD_LIB=-lrt else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 printf %s "checking for sched_yield in -lposix4... " >&6; } if test ${ac_cv_lib_posix4_sched_yield+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lposix4 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char sched_yield (void); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_posix4_sched_yield=yes else case e in #( e) ac_cv_lib_posix4_sched_yield=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; } if test "x$ac_cv_lib_posix4_sched_yield" = xyes then : SCHED_YIELD_LIB=-lposix4 fi ;; esac fi ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIB_SCHED_YIELD="$SCHED_YIELD_LIB" gl_pthreadlib_body_done=done fi LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD if test $gl_pthread_api = yes; then if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then gl_threads_api='isoc+posix' printf "%s\n" "#define USE_ISOC_AND_POSIX_THREADS 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= else gl_threads_api=posix printf "%s\n" "#define USE_POSIX_THREADS 1" >>confdefs.h if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then printf "%s\n" "#define USE_POSIX_THREADS_FROM_LIBC 1" >>confdefs.h else if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then printf "%s\n" "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= else case "$host_os" in freebsd* | dragonfly* | midnightbsd*) if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h fi ;; esac fi fi fi fi fi if test $gl_threads_api = none; then if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then if test -z "$gl_stdthreadlib_body_done"; then case "$host_os" in mingw* | windows*) LIBSTDTHREAD= ;; *) if test -z "$gl_pthreadlib_body_done"; then gl_pthread_api=no LIBPTHREAD= LIBPMULTITHREAD= # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes then : gl_have_pthread_h=yes else case e in #( e) gl_have_pthread_h=no ;; esac fi if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html saved_LIBS="$LIBS" for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> pthread_mutex_t m; pthread_mutexattr_t ma; int main (void) { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_pthread_api=yes LIBPTHREAD=$gl_pthread LIBPMULTITHREAD=$gl_pthread fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$saved_LIBS" test $gl_pthread_api = yes && break done echo "$as_me:43885: gl_pthread_api=$gl_pthread_api" >&5 echo "$as_me:43886: LIBPTHREAD=$LIBPTHREAD" >&5 gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional # pthread functions. case "$host_os" in linux*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Lucky user" >/dev/null 2>&1 then : gl_pthread_in_glibc=yes fi rm -rf conftest* ;; esac echo "$as_me:43912: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_kill (void); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else case e in #( e) ac_cv_lib_pthread_pthread_kill=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac fi else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lthr" >&5 printf %s "checking for pthread_kill in -lthr... " >&6; } if test ${ac_cv_lib_thr_pthread_kill+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lthr $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_kill (void); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_thr_pthread_kill=yes else case e in #( e) ac_cv_lib_thr_pthread_kill=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_thr_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_thr_pthread_kill" >&6; } if test "x$ac_cv_lib_thr_pthread_kill" = xyes then : if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lthr fi fi ;; esac fi elif test $gl_pthread_api != yes; then # Some library is needed. Try libpthread and libc_r. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_kill (void); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else case e in #( e) ac_cv_lib_pthread_pthread_kill=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lpthread LIBPMULTITHREAD=-lpthread fi if test $gl_pthread_api != yes; then # For FreeBSD 4. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 printf %s "checking for pthread_kill in -lc_r... " >&6; } if test ${ac_cv_lib_c_r_pthread_kill+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char pthread_kill (void); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_c_r_pthread_kill=yes else case e in #( e) ac_cv_lib_c_r_pthread_kill=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; } if test "x$ac_cv_lib_c_r_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lc_r LIBPMULTITHREAD=-lc_r fi fi fi echo "$as_me:44146: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 printf %s "checking whether POSIX threads API is available... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 printf "%s\n" "$gl_pthread_api" >&6; } if test $gl_pthread_api = yes; then printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sched.h> int main (void) { sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : SCHED_YIELD_LIB= else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 printf %s "checking for sched_yield in -lrt... " >&6; } if test ${ac_cv_lib_rt_sched_yield+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char sched_yield (void); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_rt_sched_yield=yes else case e in #( e) ac_cv_lib_rt_sched_yield=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; } if test "x$ac_cv_lib_rt_sched_yield" = xyes then : SCHED_YIELD_LIB=-lrt else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 printf %s "checking for sched_yield in -lposix4... " >&6; } if test ${ac_cv_lib_posix4_sched_yield+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lposix4 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char sched_yield (void); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_posix4_sched_yield=yes else case e in #( e) ac_cv_lib_posix4_sched_yield=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; } if test "x$ac_cv_lib_posix4_sched_yield" = xyes then : SCHED_YIELD_LIB=-lposix4 fi ;; esac fi ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIB_SCHED_YIELD="$SCHED_YIELD_LIB" gl_pthreadlib_body_done=done fi if test $ac_cv_header_threads_h = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for thrd_create" >&5 printf %s "checking for thrd_create... " >&6; } if test ${gl_cv_onwards_func_thrd_create+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "thrd_create" "ac_cv_have_decl_thrd_create" "#include <threads.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_thrd_create" = xyes then : fi if test $ac_cv_have_decl_thrd_create = yes; then ac_fn_c_check_func "$LINENO" "thrd_create" "ac_cv_func_thrd_create" if test "x$ac_cv_func_thrd_create" = xyes then : fi if test $ac_cv_func_thrd_create = yes; then gl_cv_onwards_func_thrd_create=yes else gl_cv_onwards_func_thrd_create='future OS version' fi else gl_cv_onwards_func_thrd_create='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "thrd_create" "ac_cv_func_thrd_create" if test "x$ac_cv_func_thrd_create" = xyes then : fi gl_cv_onwards_func_thrd_create=$ac_cv_func_thrd_create ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_thrd_create" >&5 printf "%s\n" "$gl_cv_onwards_func_thrd_create" >&6; } case "$gl_cv_onwards_func_thrd_create" in future*) ac_cv_func_thrd_create=no ;; *) ac_cv_func_thrd_create=$gl_cv_onwards_func_thrd_create ;; esac if test $ac_cv_func_thrd_create = yes; then printf "%s\n" "#define HAVE_THRD_CREATE 1" >>confdefs.h fi if test $ac_cv_func_thrd_create = yes; then LIBSTDTHREAD= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for thrd_create in -lstdthreads" >&5 printf %s "checking for thrd_create in -lstdthreads... " >&6; } if test ${ac_cv_lib_stdthreads_thrd_create+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lstdthreads $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char thrd_create (void); int main (void) { return thrd_create (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_stdthreads_thrd_create=yes else case e in #( e) ac_cv_lib_stdthreads_thrd_create=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_stdthreads_thrd_create" >&5 printf "%s\n" "$ac_cv_lib_stdthreads_thrd_create" >&6; } if test "x$ac_cv_lib_stdthreads_thrd_create" = xyes then : LIBSTDTHREAD='-lstdthreads -lpthread' else case e in #( e) LIBSTDTHREAD="$LIBPMULTITHREAD" ;; esac fi fi else LIBSTDTHREAD="$LIBPMULTITHREAD $SCHED_YIELD_LIB" fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ISO C threads API is available" >&5 printf %s "checking whether ISO C threads API is available... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_threads_h" >&5 printf "%s\n" "$ac_cv_header_threads_h" >&6; } gl_stdthreadlib_body_done=done fi LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD gl_threads_api=isoc printf "%s\n" "#define USE_ISOC_THREADS 1" >>confdefs.h fi fi if test $gl_threads_api = none; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in mingw* | windows*) true;; *) false;; esac }; then gl_threads_api=windows printf "%s\n" "#define USE_WINDOWS_THREADS 1" >>confdefs.h fi ;; esac fi else printf "%s\n" "#define AVOID_ANY_THREADS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 printf %s "checking for multithread API to use... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 printf "%s\n" "$gl_threads_api" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc is ptrdiff_t safe" >&5 printf %s "checking whether malloc is ptrdiff_t safe... " >&6; } if test ${gl_cv_malloc_ptrdiff+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdint.h> int main (void) { /* 64-bit ptrdiff_t is so wide that no practical platform can exceed it. */ #define WIDE_PTRDIFF (PTRDIFF_MAX >> 31 >> 31 != 0) /* On rare machines where size_t fits in ptrdiff_t there is no problem. */ #define NARROW_SIZE (SIZE_MAX <= PTRDIFF_MAX) /* glibc 2.30 and later malloc refuses to exceed ptrdiff_t bounds even on 32-bit platforms. We don't know which non-glibc systems are safe. */ #define KNOWN_SAFE (2 < __GLIBC__ + (30 <= __GLIBC_MINOR__)) #if WIDE_PTRDIFF || NARROW_SIZE || KNOWN_SAFE return 0; #else #error "malloc might not be ptrdiff_t safe" syntax error #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_malloc_ptrdiff=yes else case e in #( e) gl_cv_malloc_ptrdiff=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_malloc_ptrdiff" >&5 printf "%s\n" "$gl_cv_malloc_ptrdiff" >&6; } test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC_FOR_MALLOC_POSIX=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc set errno on failure" >&5 printf %s "checking whether malloc, realloc, calloc set errno on failure... " >&6; } if test ${gl_cv_func_malloc_posix+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in mingw* | windows*) gl_cv_func_malloc_posix=no ;; irix* | solaris*) gl_cv_func_malloc_posix=no ;; *) gl_cv_func_malloc_posix=yes ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5 printf "%s\n" "$gl_cv_func_malloc_posix" >&6; } if test "$gl_cv_func_malloc_posix" = yes; then printf "%s\n" "#define HAVE_MALLOC_POSIX 1" >>confdefs.h else REPLACE_MALLOC_FOR_MALLOC_POSIX=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc (0) returns nonnull" >&5 printf %s "checking whether malloc (0) returns nonnull... " >&6; } if test ${ac_cv_func_malloc_0_nonnull+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midipix* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | windows* | msys* ) ac_cv_func_malloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = malloc (0); void * volatile vp = p; int result = !vp; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_malloc_0_nonnull=yes else case e in #( e) ac_cv_func_malloc_0_nonnull=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } case $ac_cv_func_malloc_0_nonnull in #( *yes) : gl_cv_func_malloc_0_nonnull=1 ;; #( *) : gl_cv_func_malloc_0_nonnull=0 ;; esac printf "%s\n" "#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull" >>confdefs.h HAVE_ACOSF=1; HAVE_ACOSL=1; HAVE_ASINF=1; HAVE_ASINL=1; HAVE_ATANF=1; HAVE_ATANL=1; HAVE_ATAN2F=1; HAVE_CBRT=1; HAVE_CBRTF=1; HAVE_CBRTL=1; HAVE_COPYSIGN=1; HAVE_COPYSIGNL=1; HAVE_COSF=1; HAVE_COSL=1; HAVE_COSHF=1; HAVE_EXPF=1; HAVE_EXPL=1; HAVE_EXPM1=1; HAVE_EXPM1F=1; HAVE_FABSF=1; HAVE_FABSL=1; HAVE_FMA=1; HAVE_FMAF=1; HAVE_FMAL=1; HAVE_FMODF=1; HAVE_FMODL=1; HAVE_FREXPF=1; HAVE_HYPOTF=1; HAVE_HYPOTL=1; HAVE_ILOGB=1; HAVE_ILOGBF=1; HAVE_ILOGBL=1; HAVE_ISNANF=1; HAVE_ISNAND=1; HAVE_ISNANL=1; HAVE_LDEXPF=1; HAVE_LOGF=1; HAVE_LOGL=1; HAVE_LOG10F=1; HAVE_LOG10L=1; HAVE_LOG1P=1; HAVE_LOG1PF=1; HAVE_LOG1PL=1; HAVE_LOGBF=1; HAVE_LOGBL=1; HAVE_MODFF=1; HAVE_MODFL=1; HAVE_POWF=1; HAVE_REMAINDER=1; HAVE_REMAINDERF=1; HAVE_RINT=1; HAVE_RINTL=1; HAVE_SINF=1; HAVE_SINL=1; HAVE_SINHF=1; HAVE_SQRTF=1; HAVE_SQRTL=1; HAVE_TANF=1; HAVE_TANL=1; HAVE_TANHF=1; HAVE_TOTALORDER=1; HAVE_TOTALORDERF=1; HAVE_TOTALORDERL=1; HAVE_DECL_ACOSL=1; HAVE_DECL_ASINL=1; HAVE_DECL_ATANL=1; HAVE_DECL_CBRTF=1; HAVE_DECL_CBRTL=1; HAVE_DECL_CEILF=1; HAVE_DECL_CEILL=1; HAVE_DECL_COPYSIGNF=1; HAVE_DECL_COSL=1; HAVE_DECL_EXPL=1; HAVE_DECL_EXP2=1; HAVE_DECL_EXP2F=1; HAVE_DECL_EXP2L=1; HAVE_DECL_EXPM1L=1; HAVE_DECL_FLOORF=1; HAVE_DECL_FLOORL=1; HAVE_DECL_FREXPL=1; HAVE_DECL_LDEXPL=1; HAVE_DECL_LOGL=1; HAVE_DECL_LOG10L=1; HAVE_DECL_LOG2=1; HAVE_DECL_LOG2F=1; HAVE_DECL_LOG2L=1; HAVE_DECL_LOGB=1; HAVE_DECL_REMAINDER=1; HAVE_DECL_REMAINDERL=1; HAVE_DECL_RINTF=1; HAVE_DECL_ROUND=1; HAVE_DECL_ROUNDF=1; HAVE_DECL_ROUNDL=1; HAVE_DECL_SINL=1; HAVE_DECL_SQRTL=1; HAVE_DECL_TANL=1; HAVE_DECL_TRUNC=1; HAVE_DECL_TRUNCF=1; HAVE_DECL_TRUNCL=1; REPLACE_ACOSF=0; REPLACE_ASINF=0; REPLACE_ATANF=0; REPLACE_ATAN2F=0; REPLACE_CBRTF=0; REPLACE_CBRTL=0; REPLACE_CEIL=0; REPLACE_CEILF=0; REPLACE_CEILL=0; REPLACE_COSF=0; REPLACE_COSHF=0; REPLACE_EXPF=0; REPLACE_EXPL=0; REPLACE_EXPM1=0; REPLACE_EXPM1F=0; REPLACE_EXPM1L=0; REPLACE_EXP2=0; REPLACE_EXP2L=0; REPLACE_FABSL=0; REPLACE_FLOOR=0; REPLACE_FLOORF=0; REPLACE_FLOORL=0; REPLACE_FMA=0; REPLACE_FMAF=0; REPLACE_FMAL=0; REPLACE_FMOD=0; REPLACE_FMODF=0; REPLACE_FMODL=0; REPLACE_FREXPF=0; REPLACE_FREXP=0; REPLACE_FREXPL=0; REPLACE_HUGE_VAL=0; REPLACE_HYPOT=0; REPLACE_HYPOTF=0; REPLACE_HYPOTL=0; REPLACE_ILOGB=0; REPLACE_ILOGBF=0; REPLACE_ILOGBL=0; REPLACE_ISFINITE=0; REPLACE_ISINF=0; REPLACE_ISNAN=0; REPLACE_LDEXP=0; REPLACE_LDEXPL=0; REPLACE_LOG=0; REPLACE_LOGF=0; REPLACE_LOGL=0; REPLACE_LOG10=0; REPLACE_LOG10F=0; REPLACE_LOG10L=0; REPLACE_LOG1P=0; REPLACE_LOG1PF=0; REPLACE_LOG1PL=0; REPLACE_LOG2=0; REPLACE_LOG2F=0; REPLACE_LOG2L=0; REPLACE_LOGB=0; REPLACE_LOGBF=0; REPLACE_LOGBL=0; REPLACE_MODF=0; REPLACE_MODFF=0; REPLACE_MODFL=0; REPLACE_NAN=0; REPLACE_REMAINDER=0; REPLACE_REMAINDERF=0; REPLACE_REMAINDERL=0; REPLACE_RINTL=0; REPLACE_ROUND=0; REPLACE_ROUNDF=0; REPLACE_ROUNDL=0; REPLACE_SIGNBIT=0; REPLACE_SIGNBIT_USING_BUILTINS=0; REPLACE_SINF=0; REPLACE_SINHF=0; REPLACE_SQRTF=0; REPLACE_SQRTL=0; REPLACE_TANF=0; REPLACE_TANHF=0; REPLACE_TOTALORDER=0; REPLACE_TOTALORDERF=0; REPLACE_TOTALORDERL=0; REPLACE_TRUNC=0; REPLACE_TRUNCF=0; REPLACE_TRUNCL=0; if test $gl_cv_have_include_next = yes; then gl_cv_next_math_h='<'math.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <math.h>" >&5 printf %s "checking absolute name of <math.h>... " >&6; } if test ${gl_cv_next_math_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_math_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'math.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_math_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_math_h gl_cv_next_math_h='"'$gl_header'"' else gl_cv_next_math_h='<'math.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_math_h" >&5 printf "%s\n" "$gl_cv_next_math_h" >&6; } fi NEXT_MATH_H=$gl_cv_next_math_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'math.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_math_h fi NEXT_AS_FIRST_DIRECTIVE_MATH_H=$gl_next_as_first_directive { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NAN macro works" >&5 printf %s "checking whether NAN macro works... " >&6; } if test ${gl_cv_header_math_nan_works+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> int main (void) { /* Solaris 10 has a broken definition of NAN. Other platforms fail to provide NAN, or provide it only in C99 mode; this test only needs to fail when NAN is provided but wrong. */ float f = 1.0f; #ifdef NAN f = NAN; #endif return f == 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_math_nan_works=yes else case e in #( e) gl_cv_header_math_nan_works=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_nan_works" >&5 printf "%s\n" "$gl_cv_header_math_nan_works" >&6; } if test $gl_cv_header_math_nan_works = no; then REPLACE_NAN=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether HUGE_VAL works" >&5 printf %s "checking whether HUGE_VAL works... " >&6; } if test ${gl_cv_header_math_huge_val_works+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> int main (void) { /* Solaris 10 has a broken definition of HUGE_VAL. */ double d = HUGE_VAL; return d == 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_math_huge_val_works=yes else case e in #( e) gl_cv_header_math_huge_val_works=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_huge_val_works" >&5 printf "%s\n" "$gl_cv_header_math_huge_val_works" >&6; } if test $gl_cv_header_math_huge_val_works = no; then REPLACE_HUGE_VAL=1 fi GL_GNULIB_ACOSF=0 GL_GNULIB_ACOSL=0 GL_GNULIB_ASINF=0 GL_GNULIB_ASINL=0 GL_GNULIB_ATANF=0 GL_GNULIB_ATANL=0 GL_GNULIB_ATAN2F=0 GL_GNULIB_CBRT=0 GL_GNULIB_CBRTF=0 GL_GNULIB_CBRTL=0 GL_GNULIB_CEIL=0 GL_GNULIB_CEILF=0 GL_GNULIB_CEILL=0 GL_GNULIB_COPYSIGN=0 GL_GNULIB_COPYSIGNF=0 GL_GNULIB_COPYSIGNL=0 GL_GNULIB_COSF=0 GL_GNULIB_COSL=0 GL_GNULIB_COSHF=0 GL_GNULIB_EXPF=0 GL_GNULIB_EXPL=0 GL_GNULIB_EXP2=0 GL_GNULIB_EXP2F=0 GL_GNULIB_EXP2L=0 GL_GNULIB_EXPM1=0 GL_GNULIB_EXPM1F=0 GL_GNULIB_EXPM1L=0 GL_GNULIB_FABSF=0 GL_GNULIB_FABSL=0 GL_GNULIB_FLOOR=0 GL_GNULIB_FLOORF=0 GL_GNULIB_FLOORL=0 GL_GNULIB_FMA=0 GL_GNULIB_FMAF=0 GL_GNULIB_FMAL=0 GL_GNULIB_FMOD=0 GL_GNULIB_FMODF=0 GL_GNULIB_FMODL=0 GL_GNULIB_FREXPF=0 GL_GNULIB_FREXP=0 GL_GNULIB_FREXPL=0 GL_GNULIB_HYPOT=0 GL_GNULIB_HYPOTF=0 GL_GNULIB_HYPOTL=0 GL_GNULIB_ILOGB=0 GL_GNULIB_ILOGBF=0 GL_GNULIB_ILOGBL=0 GL_GNULIB_ISFINITE=0 GL_GNULIB_ISINF=0 GL_GNULIB_ISNAN=0 GL_GNULIB_ISNANF=0 GL_GNULIB_ISNAND=0 GL_GNULIB_ISNANL=0 GL_GNULIB_LDEXP=0 GL_GNULIB_LDEXPF=0 GL_GNULIB_LDEXPL=0 GL_GNULIB_LOG=0 GL_GNULIB_LOGF=0 GL_GNULIB_LOGL=0 GL_GNULIB_LOG10=0 GL_GNULIB_LOG10F=0 GL_GNULIB_LOG10L=0 GL_GNULIB_LOG1P=0 GL_GNULIB_LOG1PF=0 GL_GNULIB_LOG1PL=0 GL_GNULIB_LOG2=0 GL_GNULIB_LOG2F=0 GL_GNULIB_LOG2L=0 GL_GNULIB_LOGB=0 GL_GNULIB_LOGBF=0 GL_GNULIB_LOGBL=0 GL_GNULIB_MODF=0 GL_GNULIB_MODFF=0 GL_GNULIB_MODFL=0 GL_GNULIB_POWF=0 GL_GNULIB_REMAINDER=0 GL_GNULIB_REMAINDERF=0 GL_GNULIB_REMAINDERL=0 GL_GNULIB_RINT=0 GL_GNULIB_RINTF=0 GL_GNULIB_RINTL=0 GL_GNULIB_ROUND=0 GL_GNULIB_ROUNDF=0 GL_GNULIB_ROUNDL=0 GL_GNULIB_SIGNBIT=0 GL_GNULIB_SINF=0 GL_GNULIB_SINL=0 GL_GNULIB_SINHF=0 GL_GNULIB_SQRTF=0 GL_GNULIB_SQRTL=0 GL_GNULIB_TANF=0 GL_GNULIB_TANL=0 GL_GNULIB_TANHF=0 GL_GNULIB_TOTALORDER=0 GL_GNULIB_TOTALORDERF=0 GL_GNULIB_TOTALORDERL=0 GL_GNULIB_TRUNC=0 GL_GNULIB_TRUNCF=0 GL_GNULIB_TRUNCL=0 GL_GNULIB_MDA_J0=1 GL_GNULIB_MDA_J1=1 GL_GNULIB_MDA_JN=1 GL_GNULIB_MDA_Y0=1 GL_GNULIB_MDA_Y1=1 GL_GNULIB_MDA_YN=1 GL_GNULIB_EXPLICIT_BZERO=0 GL_GNULIB_FFSL=0 GL_GNULIB_FFSLL=0 GL_GNULIB_MEMCHR=0 GL_GNULIB_MEMMEM=0 GL_GNULIB_MEMPCPY=0 GL_GNULIB_MEMRCHR=0 GL_GNULIB_MEMSET_EXPLICIT=0 GL_GNULIB_RAWMEMCHR=0 GL_GNULIB_STPCPY=0 GL_GNULIB_STPNCPY=0 GL_GNULIB_STRCHRNUL=0 GL_GNULIB_STRDUP=0 GL_GNULIB_STRNCAT=0 GL_GNULIB_STRNDUP=0 GL_GNULIB_STRNLEN=0 GL_GNULIB_STRPBRK=0 GL_GNULIB_STRSEP=0 GL_GNULIB_STRSTR=0 GL_GNULIB_STRCASESTR=0 GL_GNULIB_STRTOK_R=0 GL_GNULIB_MBSLEN=0 GL_GNULIB_MBSNLEN=0 GL_GNULIB_MBSCHR=0 GL_GNULIB_MBSRCHR=0 GL_GNULIB_MBSSTR=0 GL_GNULIB_MBSCASECMP=0 GL_GNULIB_MBSNCASECMP=0 GL_GNULIB_MBSPCASECMP=0 GL_GNULIB_MBSCASESTR=0 GL_GNULIB_MBSCSPN=0 GL_GNULIB_MBSPBRK=0 GL_GNULIB_MBSSPN=0 GL_GNULIB_MBSSEP=0 GL_GNULIB_MBSTOK_R=0 GL_GNULIB_STRERROR=0 GL_GNULIB_STRERROR_R=0 GL_GNULIB_STRERRORNAME_NP=0 GL_GNULIB_SIGABBREV_NP=0 GL_GNULIB_SIGDESCR_NP=0 GL_GNULIB_STRSIGNAL=0 GL_GNULIB_STRVERSCMP=0 GL_GNULIB_MDA_MEMCCPY=1 GL_GNULIB_MDA_STRDUP=1 HAVE_MBSLEN=0; HAVE_EXPLICIT_BZERO=1; HAVE_FFSL=1; HAVE_FFSLL=1; HAVE_DECL_MEMMEM=1; HAVE_MEMPCPY=1; HAVE_MEMSET_EXPLICIT=1; HAVE_DECL_MEMRCHR=1; HAVE_RAWMEMCHR=1; HAVE_STPCPY=1; HAVE_STPNCPY=1; HAVE_STRCHRNUL=1; HAVE_DECL_STRDUP=1; HAVE_DECL_STRNDUP=1; HAVE_DECL_STRNLEN=1; HAVE_STRPBRK=1; HAVE_STRSEP=1; HAVE_STRCASESTR=1; HAVE_DECL_STRTOK_R=1; HAVE_DECL_STRERROR_R=1; HAVE_STRERRORNAME_NP=1; HAVE_SIGABBREV_NP=1; HAVE_SIGDESCR_NP=1; HAVE_DECL_STRSIGNAL=1; HAVE_STRVERSCMP=1; REPLACE_FFSLL=0; REPLACE_MEMCHR=0; REPLACE_MEMMEM=0; REPLACE_MEMPCPY=0; REPLACE_MEMSET_EXPLICIT=0; REPLACE_STPCPY=0; REPLACE_STPNCPY=0; REPLACE_STRCHRNUL=0; REPLACE_STRDUP=0; REPLACE_STRNCAT=0; REPLACE_STRNDUP=0; REPLACE_STRNLEN=0; REPLACE_STRSTR=0; REPLACE_STRCASESTR=0; REPLACE_STRTOK_R=0; REPLACE_STRERROR=0; REPLACE_STRERROR_R=0; REPLACE_STRERRORNAME_NP=0; REPLACE_STRSIGNAL=0; REPLACE_STRVERSCMP=0; UNDEFINE_STRTOK_R=0; case "$host_os" in *-musl* | midipix*) printf "%s\n" "#define MUSL_LIBC 1" >>confdefs.h ;; esac # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" if test "x$ac_cv_func_mmap" = xyes then : gl_have_mmap=yes else case e in #( e) gl_have_mmap=no ;; esac fi # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5 printf %s "checking for MAP_ANONYMOUS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/mman.h> #ifdef MAP_ANONYMOUS I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "I cannot identify this map" >/dev/null 2>&1 then : gl_have_mmap_anonymous=yes fi rm -rf conftest* if test $gl_have_mmap_anonymous != yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/mman.h> #ifdef MAP_ANON I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "I cannot identify this map" >/dev/null 2>&1 then : printf "%s\n" "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h gl_have_mmap_anonymous=yes fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5 printf "%s\n" "$gl_have_mmap_anonymous" >&6; } if test $gl_have_mmap_anonymous = yes; then printf "%s\n" "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h fi fi # Detect platform-specific bugs in some versions of glibc: # memchr should not dereference anything with length 0 # https://bugzilla.redhat.com/show_bug.cgi?id=499689 # memchr should not dereference overestimated length after a match # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 # https://sourceware.org/bugzilla/show_bug.cgi?id=10162 # memchr should cast the second argument to 'unsigned char'. # This bug exists in Android 4.3. # Assume that memchr works on platforms that lack mprotect. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5 printf %s "checking whether memchr works... " >&6; } if test ${gl_cv_func_memchr_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_memchr_works="guessing no" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_memchr_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_memchr_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> #if HAVE_SYS_MMAN_H # include <fcntl.h> # include <unistd.h> # include <sys/types.h> # include <sys/mman.h> # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif int main (void) { int result = 0; char *fence = NULL; #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) fence = two_pages + pagesize; } #endif if (fence) { /* Test against bugs on glibc systems. */ if (memchr (fence, 0, 0)) result |= 1; strcpy (fence - 9, "12345678"); if (memchr (fence - 9, 0, 79) != fence - 1) result |= 2; if (memchr (fence - 1, 0, 3) != fence - 1) result |= 4; /* Test against bug on AIX 7.2. */ if (memchr (fence - 4, '6', 16) != fence - 4) result |= 8; } /* Test against bug on Android 4.3. */ { char input[3]; input[0] = 'a'; input[1] = 'b'; input[2] = 'c'; if (memchr (input, 0x789abc00 | 'b', 3) != input + 1) result |= 16; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_memchr_works=yes else case e in #( e) gl_cv_func_memchr_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memchr_works" >&5 printf "%s\n" "$gl_cv_func_memchr_works" >&6; } case "$gl_cv_func_memchr_works" in *yes) ;; *) REPLACE_MEMCHR=1 ;; esac ac_fn_check_decl "$LINENO" "memrchr" "ac_cv_have_decl_memrchr" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_memrchr" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_MEMRCHR $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <limits.h> defines MIN and MAX" >&5 printf %s "checking whether <limits.h> defines MIN and MAX... " >&6; } if test ${gl_cv_minmax_in_limits_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> int x = MIN (42, 17); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_minmax_in_limits_h=yes else case e in #( e) gl_cv_minmax_in_limits_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_limits_h" >&5 printf "%s\n" "$gl_cv_minmax_in_limits_h" >&6; } if test $gl_cv_minmax_in_limits_h = yes; then printf "%s\n" "#define HAVE_MINMAX_IN_LIMITS_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <sys/param.h> defines MIN and MAX" >&5 printf %s "checking whether <sys/param.h> defines MIN and MAX... " >&6; } if test ${gl_cv_minmax_in_sys_param_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/param.h> int x = MIN (42, 17); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_minmax_in_sys_param_h=yes else case e in #( e) gl_cv_minmax_in_sys_param_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_minmax_in_sys_param_h" >&5 printf "%s\n" "$gl_cv_minmax_in_sys_param_h" >&6; } if test $gl_cv_minmax_in_sys_param_h = yes; then printf "%s\n" "#define HAVE_MINMAX_IN_SYS_PARAM_H 1" >>confdefs.h fi HAVE_DECL_LOCALTIME_R=1; HAVE_NANOSLEEP=1; HAVE_STRPTIME=1; HAVE_TIMEGM=1; HAVE_TIMESPEC_GET=1; HAVE_TIMESPEC_GETRES=1; HAVE_TIMEZONE_T=0; REPLACE_CTIME=0; REPLACE_GMTIME=0; REPLACE_LOCALTIME=0; REPLACE_LOCALTIME_R=0; REPLACE_MKTIME=0; REPLACE_NANOSLEEP=0; REPLACE_STRFTIME=0; REPLACE_TIME=0; REPLACE_TIMEGM=0; REPLACE_TIMESPEC_GET=0; REPLACE_TIMESPEC_GETRES=0; REPLACE_TZSET=0; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether time_t is signed" >&5 printf %s "checking whether time_t is signed... " >&6; } if test ${gl_cv_time_t_is_signed+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> char time_t_signed[(time_t) -1 < 0 ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_time_t_is_signed=yes else case e in #( e) gl_cv_time_t_is_signed=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_time_t_is_signed" >&5 printf "%s\n" "$gl_cv_time_t_is_signed" >&6; } if test $gl_cv_time_t_is_signed = yes; then printf "%s\n" "#define TIME_T_IS_SIGNED 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_alarm" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_ALARM $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mktime" >&5 printf %s "checking for working mktime... " >&6; } if test ${gl_cv_func_working_mktime+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $APPLE_UNIVERSAL_BUILD = 1; then # A universal build on Apple Mac OS X platforms. # The test result would be 'yes' in 32-bit mode and 'no' in 64-bit mode. # But we need a configuration result that is valid in both modes. gl_cv_func_working_mktime="guessing no" else if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on native Windows. mingw* | windows*) gl_cv_func_working_mktime="guessing no" ;; *) gl_cv_func_working_mktime="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test program from Paul Eggert and Tony Leneis. */ #include <limits.h> #include <stdlib.h> #include <time.h> #ifdef HAVE_UNISTD_H # include <unistd.h> #endif #if HAVE_DECL_ALARM # include <signal.h> #endif $gl_mda_defines #ifndef TIME_T_IS_SIGNED # define TIME_T_IS_SIGNED 0 #endif static time_t time_t_max; static time_t time_t_min; /* Values we'll use to set the TZ environment variable. */ static char *tz_strings[] = { (char *) 0, "TZ=GMT0", "TZ=JST-9", "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00" }; #define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0])) /* Return 0 if mktime fails to convert a date in the spring-forward gap. Based on a problem report from Andreas Jaeger. */ static int spring_forward_gap () { /* glibc (up to about 1998-10-07) failed this test. */ struct tm tm; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ if (putenv ("TZ=PST8PDT,M4.1.0,M10.5.0") != 0) return -1; tm.tm_year = 98; tm.tm_mon = 3; tm.tm_mday = 5; tm.tm_hour = 2; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; return mktime (&tm) != (time_t) -1; } static int mktime_test1 (time_t now) { struct tm *lt; return ! (lt = localtime (&now)) || mktime (lt) == now; } static int mktime_test (time_t now) { return (mktime_test1 (now) && mktime_test1 ((time_t) (time_t_max - now)) && mktime_test1 ((time_t) (time_t_min + now))); } static int irix_6_4_bug () { /* Based on code from Ariel Faigon. */ struct tm tm; tm.tm_year = 96; tm.tm_mon = 3; tm.tm_mday = 0; tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; mktime (&tm); return tm.tm_mon == 2 && tm.tm_mday == 31; } static int bigtime_test (int j) { struct tm tm; time_t now; tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j; now = mktime (&tm); if (now != (time_t) -1) { struct tm *lt = localtime (&now); if (! (lt && lt->tm_year == tm.tm_year && lt->tm_mon == tm.tm_mon && lt->tm_mday == tm.tm_mday && lt->tm_hour == tm.tm_hour && lt->tm_min == tm.tm_min && lt->tm_sec == tm.tm_sec && lt->tm_yday == tm.tm_yday && lt->tm_wday == tm.tm_wday && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst) == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst)))) return 0; } return 1; } static int year_2050_test () { /* The correct answer for 2050-02-01 00:00:00 in Pacific time, ignoring leap seconds. */ unsigned long int answer = 2527315200UL; struct tm tm; time_t t; tm.tm_year = 2050 - 1900; tm.tm_mon = 2 - 1; tm.tm_mday = 1; tm.tm_hour = tm.tm_min = tm.tm_sec = 0; tm.tm_isdst = -1; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ if (putenv ("TZ=PST8PDT,M4.1.0,M10.5.0") != 0) return -1; t = mktime (&tm); /* Check that the result is either a failure, or close enough to the correct answer that we can assume the discrepancy is due to leap seconds. */ return (t == (time_t) -1 || (0 < t && answer - 120 <= t && t <= answer + 120)); } static int indiana_test () { if (putenv ("TZ=America/Indiana/Indianapolis") != 0) return -1; struct tm tm; tm.tm_year = 1986 - 1900; tm.tm_mon = 4 - 1; tm.tm_mday = 28; tm.tm_hour = 16; tm.tm_min = 24; tm.tm_sec = 50; tm.tm_isdst = 0; time_t std = mktime (&tm); if (! (std == 515107490 || std == 515107503)) return 1; /* This platform supports TZDB, either without or with leap seconds. Return true if GNU Bug#48085 is absent. */ tm.tm_isdst = 1; time_t dst = mktime (&tm); return std - dst == 60 * 60; } int main () { int result = 0; time_t t, delta; int i, j; int time_t_signed_magnitude = (time_t) ~ (time_t) 0 < (time_t) -1; #if HAVE_DECL_ALARM /* This test makes some buggy mktime implementations loop. Give up after 60 seconds; a mktime slower than that isn't worth using anyway. */ signal (SIGALRM, SIG_DFL); alarm (60); #endif time_t_max = (! TIME_T_IS_SIGNED ? (time_t) -1 : ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1) * 2 + 1)); time_t_min = (! TIME_T_IS_SIGNED ? (time_t) 0 : time_t_signed_magnitude ? ~ (time_t) 0 : ~ time_t_max); delta = time_t_max / 997; /* a suitable prime number */ for (i = 0; i < N_STRINGS; i++) { if (tz_strings[i]) putenv (tz_strings[i]); for (t = 0; t <= time_t_max - delta && (result & 1) == 0; t += delta) if (! mktime_test (t)) result |= 1; if ((result & 2) == 0 && ! (mktime_test ((time_t) 1) && mktime_test ((time_t) (60 * 60)) && mktime_test ((time_t) (60 * 60 * 24)))) result |= 2; for (j = 1; (result & 4) == 0; j <<= 1) { if (! bigtime_test (j)) result |= 4; if (INT_MAX / 2 < j) break; } if ((result & 8) == 0 && ! bigtime_test (INT_MAX)) result |= 8; } if (! irix_6_4_bug ()) result |= 16; if (! spring_forward_gap ()) result |= 32; if (! year_2050_test () || ! indiana_test ()) result |= 64; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_working_mktime=yes else case e in #( e) gl_cv_func_working_mktime=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_mktime" >&5 printf "%s\n" "$gl_cv_func_working_mktime" >&6; } GL_GNULIB_CTIME=0 GL_GNULIB_MKTIME=0 GL_GNULIB_LOCALTIME=0 GL_GNULIB_NANOSLEEP=0 GL_GNULIB_STRFTIME=0 GL_GNULIB_STRPTIME=0 GL_GNULIB_TIME=0 GL_GNULIB_TIMEGM=0 GL_GNULIB_TIMESPEC_GET=0 GL_GNULIB_TIMESPEC_GETRES=0 GL_GNULIB_TIME_R=0 GL_GNULIB_TIME_RZ=0 GL_GNULIB_TZSET=0 GL_GNULIB_MDA_TZSET=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for O_CLOEXEC" >&5 printf %s "checking for O_CLOEXEC... " >&6; } if test ${gl_cv_macro_O_CLOEXEC+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> #ifndef O_CLOEXEC choke me; #endif int main (void) { return O_CLOEXEC; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_macro_O_CLOEXEC=yes else case e in #( e) gl_cv_macro_O_CLOEXEC=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_macro_O_CLOEXEC" >&5 printf "%s\n" "$gl_cv_macro_O_CLOEXEC" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for promoted mode_t type" >&5 printf %s "checking for promoted mode_t type... " >&6; } if test ${gl_cv_promoted_mode_t+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> int main (void) { typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_promoted_mode_t='int' else case e in #( e) gl_cv_promoted_mode_t='mode_t' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_promoted_mode_t" >&5 printf "%s\n" "$gl_cv_promoted_mode_t" >&6; } printf "%s\n" "#define PROMOTED_MODE_T $gl_cv_promoted_mode_t" >>confdefs.h if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_REALLOC_FOR_REALLOC_POSIX=1 fi HAVE_PSELECT=1; REPLACE_PSELECT=0; REPLACE_SELECT=0; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <sys/select.h> is self-contained" >&5 printf %s "checking whether <sys/select.h> is self-contained... " >&6; } if test ${gl_cv_header_sys_select_h_selfcontained+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/select.h> int main (void) { struct timeval b; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_sys_select_h_selfcontained=yes else case e in #( e) gl_cv_header_sys_select_h_selfcontained=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test $gl_cv_header_sys_select_h_selfcontained = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/select.h> int main (void) { int memset; int bzero; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/select.h> int main (void) { #undef memset #define memset nonexistent_memset extern #ifdef __cplusplus "C" #endif void *memset (void *, int, unsigned long); #undef bzero #define bzero nonexistent_bzero extern #ifdef __cplusplus "C" #endif void bzero (void *, unsigned long); fd_set fds; FD_ZERO (&fds); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else case e in #( e) gl_cv_header_sys_select_h_selfcontained=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_select_h_selfcontained" >&5 printf "%s\n" "$gl_cv_header_sys_select_h_selfcontained" >&6; } if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_select_h='<'sys/select.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/select.h>" >&5 printf %s "checking absolute name of <sys/select.h>... " >&6; } if test ${gl_cv_next_sys_select_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_sys_select_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/select.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/select.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_select_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_select_h gl_cv_next_sys_select_h='"'$gl_header'"' else gl_cv_next_sys_select_h='<'sys/select.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_select_h" >&5 printf "%s\n" "$gl_cv_next_sys_select_h" >&6; } fi NEXT_SYS_SELECT_H=$gl_cv_next_sys_select_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/select.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_select_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H=$gl_next_as_first_directive if test $ac_cv_header_sys_select_h = yes; then HAVE_SYS_SELECT_H=1 else HAVE_SYS_SELECT_H=0 fi if test $ac_cv_header_sys_socket_h != yes; then ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes then : printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h fi fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi if test $ac_cv_header_sys_socket_h != yes; then ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes then : printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h fi fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi LIBSOCKET= if test $HAVE_WINSOCK2_H = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for WSAStartup" >&5 printf %s "checking for WSAStartup... " >&6; } if test ${gl_cv_func_wsastartup+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_LIBS="$LIBS" LIBS="$LIBS -lws2_32" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_WINSOCK2_H # include <winsock2.h> #endif int main (void) { WORD wVersionRequested = MAKEWORD(1, 1); WSADATA wsaData; int err = WSAStartup(wVersionRequested, &wsaData); WSACleanup (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_wsastartup=yes else case e in #( e) gl_cv_func_wsastartup=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wsastartup" >&5 printf "%s\n" "$gl_cv_func_wsastartup" >&6; } if test "$gl_cv_func_wsastartup" = "yes"; then printf "%s\n" "#define WINDOWS_SOCKETS 1" >>confdefs.h LIBSOCKET='-lws2_32' fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5 printf %s "checking for library containing setsockopt... " >&6; } if test ${gl_cv_lib_socket+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_cv_lib_socket= cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern #ifdef __cplusplus "C" #endif char setsockopt(); int main (void) { setsockopt(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else case e in #( e) gl_saved_LIBS="$LIBS" LIBS="$gl_saved_LIBS -lsocket" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern #ifdef __cplusplus "C" #endif char setsockopt(); int main (void) { setsockopt(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_lib_socket="-lsocket" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$gl_cv_lib_socket"; then LIBS="$gl_saved_LIBS -lnetwork" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern #ifdef __cplusplus "C" #endif char setsockopt(); int main (void) { setsockopt(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_lib_socket="-lnetwork" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$gl_cv_lib_socket"; then LIBS="$gl_saved_LIBS -lnet" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern #ifdef __cplusplus "C" #endif char setsockopt(); int main (void) { setsockopt(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_lib_socket="-lnet" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi fi LIBS="$gl_saved_LIBS" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$gl_cv_lib_socket"; then gl_cv_lib_socket="none needed" fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_lib_socket" >&5 printf "%s\n" "$gl_cv_lib_socket" >&6; } if test "$gl_cv_lib_socket" != "none needed"; then LIBSOCKET="$gl_cv_lib_socket" fi fi : GL_GNULIB_PSELECT=0 GL_GNULIB_SELECT=0 HAVE_POSIX_SIGNALBLOCKING=1; HAVE_PTHREAD_SIGMASK=1; HAVE_RAISE=1; HAVE_SIGSET_T=1; HAVE_SIGINFO_T=1; HAVE_SIGACTION=1; HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; HAVE_SIGHANDLER_T=1; REPLACE_PTHREAD_SIGMASK=0; REPLACE_RAISE=0; ac_fn_c_check_type "$LINENO" "sigset_t" "ac_cv_type_sigset_t" " #include <signal.h> /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */ #include <sys/types.h> " if test "x$ac_cv_type_sigset_t" = xyes then : printf "%s\n" "#define HAVE_SIGSET_T 1" >>confdefs.h gl_cv_type_sigset_t=yes else case e in #( e) gl_cv_type_sigset_t=no ;; esac fi if test $gl_cv_type_sigset_t != yes; then HAVE_SIGSET_T=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_signal_h='<'signal.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <signal.h>" >&5 printf %s "checking absolute name of <signal.h>... " >&6; } if test ${gl_cv_next_signal_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <signal.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'signal.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_signal_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_signal_h gl_cv_next_signal_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_signal_h" >&5 printf "%s\n" "$gl_cv_next_signal_h" >&6; } fi NEXT_SIGNAL_H=$gl_cv_next_signal_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'signal.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_signal_h fi NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H=$gl_next_as_first_directive # AIX declares sig_atomic_t to already include volatile, and C89 compilers # then choke on 'volatile sig_atomic_t'. C99 requires that it compile. ac_fn_c_check_type "$LINENO" "volatile sig_atomic_t" "ac_cv_type_volatile_sig_atomic_t" " #include <signal.h> " if test "x$ac_cv_type_volatile_sig_atomic_t" = xyes then : else case e in #( e) HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0 ;; esac fi ac_fn_c_check_type "$LINENO" "sighandler_t" "ac_cv_type_sighandler_t" " #include <signal.h> " if test "x$ac_cv_type_sighandler_t" = xyes then : else case e in #( e) HAVE_SIGHANDLER_T=0 ;; esac fi GL_GNULIB_PTHREAD_SIGMASK=0 GL_GNULIB_RAISE=0 GL_GNULIB_SIGNAL_H_SIGPIPE=0 GL_GNULIB_SIGPROCMASK=0 GL_GNULIB_SIGACTION=0 if test $ac_cv_header_sys_socket_h = no; then ac_fn_c_check_header_compile "$LINENO" "ws2tcpip.h" "ac_cv_header_ws2tcpip_h" "$ac_includes_default" if test "x$ac_cv_header_ws2tcpip_h" = xyes then : printf "%s\n" "#define HAVE_WS2TCPIP_H 1" >>confdefs.h fi fi ac_fn_check_decl "$LINENO" "fcloseall" "ac_cv_have_decl_fcloseall" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fcloseall" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_FCLOSEALL $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "getw" "ac_cv_have_decl_getw" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getw" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_GETW $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "putw" "ac_cv_have_decl_putw" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_putw" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_PUTW $ac_have_decl" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_stdio_h='<'stdio.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdio.h>" >&5 printf %s "checking absolute name of <stdio.h>... " >&6; } if test ${gl_cv_next_stdio_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdio.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdio_h gl_cv_next_stdio_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5 printf "%s\n" "$gl_cv_next_stdio_h" >&6; } fi NEXT_STDIO_H=$gl_cv_next_stdio_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdio.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdio_h fi NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which flavor of printf attribute matches inttypes macros" >&5 printf %s "checking which flavor of printf attribute matches inttypes macros... " >&6; } if test ${gl_cv_func_printf_attribute_flavor+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define __STDC_FORMAT_MACROS 1 #include <stdio.h> #include <inttypes.h> /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ #if (defined _WIN32 && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_printf_attribute_flavor=system else case e in #( e) gl_cv_func_printf_attribute_flavor=gnu ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_attribute_flavor" >&5 printf "%s\n" "$gl_cv_func_printf_attribute_flavor" >&6; } if test "$gl_cv_func_printf_attribute_flavor" = gnu; then printf "%s\n" "#define GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU 1" >>confdefs.h fi if test $ac_cv_have_decl_fcloseall = no; then HAVE_DECL_FCLOSEALL=0 fi if test $ac_cv_have_decl_getw = no; then HAVE_DECL_GETW=0 fi if test $ac_cv_have_decl_putw = no; then HAVE_DECL_PUTW=0 fi ac_fn_check_decl "$LINENO" "ecvt" "ac_cv_have_decl_ecvt" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_ecvt" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_ECVT $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fcvt" "ac_cv_have_decl_fcvt" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fcvt" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_FCVT $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "gcvt" "ac_cv_have_decl_gcvt" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_gcvt" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_GCVT $ac_have_decl" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_stdlib_h='<'stdlib.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdlib.h>" >&5 printf %s "checking absolute name of <stdlib.h>... " >&6; } if test ${gl_cv_next_stdlib_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdlib.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdlib_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdlib_h gl_cv_next_stdlib_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5 printf "%s\n" "$gl_cv_next_stdlib_h" >&6; } fi NEXT_STDLIB_H=$gl_cv_next_stdlib_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdlib.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdlib_h fi NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether MB_CUR_MAX is correct" >&5 printf %s "checking whether MB_CUR_MAX is correct... " >&6; } if test ${gl_cv_macro_MB_CUR_MAX_good+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_macro_MB_CUR_MAX_good="guessing no" ;; # Guess yes otherwise. *) gl_cv_macro_MB_CUR_MAX_good="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { if (MB_CUR_MAX < 4) result |= 1; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_macro_MB_CUR_MAX_good=yes else case e in #( e) gl_cv_macro_MB_CUR_MAX_good=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_macro_MB_CUR_MAX_good" >&5 printf "%s\n" "$gl_cv_macro_MB_CUR_MAX_good" >&6; } case "$gl_cv_macro_MB_CUR_MAX_good" in *yes) ;; *) REPLACE_MB_CUR_MAX=1 ;; esac if test $ac_cv_have_decl_ecvt = no; then HAVE_DECL_ECVT=0 fi if test $ac_cv_have_decl_fcvt = no; then HAVE_DECL_FCVT=0 fi if test $ac_cv_have_decl_gcvt = no; then HAVE_DECL_GCVT=0 fi HAVE_FFS=1; HAVE_STRCASECMP=1; HAVE_DECL_STRNCASECMP=1; ac_fn_check_decl "$LINENO" "strdup" "ac_cv_have_decl_strdup" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_strdup" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_STRDUP $ac_have_decl" >>confdefs.h REPLACE_STRERROR_0=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5 printf %s "checking whether strerror(0) succeeds... " >&6; } if test ${gl_cv_func_strerror_0_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> #include <errno.h> int main (void) { int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_strerror_0_works=yes else case e in #( e) gl_cv_func_strerror_0_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_0_works" >&5 printf "%s\n" "$gl_cv_func_strerror_0_works" >&6; } case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 printf "%s\n" "#define REPLACE_STRERROR_0 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for strerror_r" >&5 printf %s "checking for strerror_r... " >&6; } if test ${gl_cv_onwards_func_strerror_r+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "#include <string.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_strerror_r" = xyes then : fi if test $ac_cv_have_decl_strerror_r = yes; then ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" if test "x$ac_cv_func_strerror_r" = xyes then : fi if test $ac_cv_func_strerror_r = yes; then gl_cv_onwards_func_strerror_r=yes else gl_cv_onwards_func_strerror_r='future OS version' fi else gl_cv_onwards_func_strerror_r='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" if test "x$ac_cv_func_strerror_r" = xyes then : fi gl_cv_onwards_func_strerror_r=$ac_cv_func_strerror_r ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_strerror_r" >&5 printf "%s\n" "$gl_cv_onwards_func_strerror_r" >&6; } case "$gl_cv_onwards_func_strerror_r" in future*) ac_cv_func_strerror_r=no ;; *) ac_cv_func_strerror_r=$gl_cv_onwards_func_strerror_r ;; esac if test $ac_cv_func_strerror_r = yes; then printf "%s\n" "#define HAVE_STRERROR_R 1" >>confdefs.h fi if test $ac_cv_func_strerror_r = yes; then if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for strerror_r with POSIX signature" >&5 printf %s "checking for strerror_r with POSIX signature... " >&6; } if test ${gl_cv_func_strerror_r_posix_signature+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> int strerror_r (int, char *, size_t); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_strerror_r_posix_signature=yes else case e in #( e) gl_cv_func_strerror_r_posix_signature=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_posix_signature" >&5 printf "%s\n" "$gl_cv_func_strerror_r_posix_signature" >&6; } if test $gl_cv_func_strerror_r_posix_signature = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strerror_r works" >&5 printf %s "checking whether strerror_r works... " >&6; } if test ${gl_cv_func_strerror_r_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on AIX. aix*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on HP-UX. hpux*) gl_cv_func_strerror_r_works="guessing no";; # Guess no on BSD variants. *bsd*) gl_cv_func_strerror_r_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_strerror_r_works="guessing yes";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <string.h> int main (void) { int result = 0; char buf[79]; if (strerror_r (EACCES, buf, 0) < 0) result |= 1; errno = 0; if (strerror_r (EACCES, buf, sizeof buf) != 0) result |= 2; strcpy (buf, "Unknown"); if (strerror_r (0, buf, sizeof buf) != 0) result |= 4; if (errno) result |= 8; if (strstr (buf, "nknown") || strstr (buf, "ndefined")) result |= 0x10; errno = 0; *buf = 0; if (strerror_r (-3, buf, sizeof buf) < 0) result |= 0x20; if (errno) result |= 0x40; if (!*buf) result |= 0x80; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_strerror_r_works=yes else case e in #( e) gl_cv_func_strerror_r_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_works" >&5 printf "%s\n" "$gl_cv_func_strerror_r_works" >&6; } else if test $ac_cv_func___xpg_strerror_r = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether __xpg_strerror_r works" >&5 printf %s "checking whether __xpg_strerror_r works... " >&6; } if test ${gl_cv_func_strerror_r_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : gl_cv_func_strerror_r_works="$gl_cross_guess_normal" else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <string.h> extern #ifdef __cplusplus "C" #endif int __xpg_strerror_r(int, char *, size_t); int main (void) { int result = 0; char buf[256] = "^"; char copy[256]; char *str = strerror (-1); strcpy (copy, str); if (__xpg_strerror_r (-2, buf, 1) == 0) result |= 1; if (*buf) result |= 2; __xpg_strerror_r (-2, buf, 256); if (strcmp (str, copy)) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_strerror_r_works=yes else case e in #( e) gl_cv_func_strerror_r_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strerror_r_works" >&5 printf "%s\n" "$gl_cv_func_strerror_r_works" >&6; } fi fi fi else case "$gl_cv_onwards_func_strerror_r" in future*) REPLACE_STRERROR_R=1 ;; esac fi if test $gl_cv_have_include_next = yes; then gl_cv_next_string_h='<'string.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <string.h>" >&5 printf %s "checking absolute name of <string.h>... " >&6; } if test ${gl_cv_next_string_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'string.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_string_h gl_cv_next_string_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5 printf "%s\n" "$gl_cv_next_string_h" >&6; } fi NEXT_STRING_H=$gl_cv_next_string_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'string.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_string_h fi NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive if test $gl_cv_have_include_next = yes; then gl_cv_next_strings_h='<'strings.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <strings.h>" >&5 printf %s "checking absolute name of <strings.h>... " >&6; } if test ${gl_cv_next_strings_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_strings_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <strings.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'strings.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_strings_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_strings_h gl_cv_next_strings_h='"'$gl_header'"' else gl_cv_next_strings_h='<'strings.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_strings_h" >&5 printf "%s\n" "$gl_cv_next_strings_h" >&6; } fi NEXT_STRINGS_H=$gl_cv_next_strings_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'strings.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_strings_h fi NEXT_AS_FIRST_DIRECTIVE_STRINGS_H=$gl_next_as_first_directive if test $ac_cv_header_strings_h = yes; then HAVE_STRINGS_H=1 else HAVE_STRINGS_H=0 fi GL_GNULIB_FFS=0 ac_fn_check_decl "$LINENO" "strndup" "ac_cv_have_decl_strndup" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_strndup" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_STRNDUP $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_strnlen" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_STRNLEN $ac_have_decl" >>confdefs.h ac_fn_c_check_member "$LINENO" "struct tm" "tm_gmtoff" "ac_cv_member_struct_tm_tm_gmtoff" "#include <time.h> " if test "x$ac_cv_member_struct_tm_tm_gmtoff" = xyes then : printf "%s\n" "#define HAVE_TM_GMTOFF 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ldexp() can be used without linking with libm" >&5 printf %s "checking whether ldexp() can be used without linking with libm... " >&6; } if test ${gl_cv_func_ldexp_no_libm+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double, int) = ldexp; double x; int main (void) { return ldexp (x, -1) > 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_ldexp_no_libm=yes else case e in #( e) gl_cv_func_ldexp_no_libm=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexp_no_libm" >&5 printf "%s\n" "$gl_cv_func_ldexp_no_libm" >&6; } ac_fn_check_decl "$LINENO" "strtok_r" "ac_cv_have_decl_strtok_r" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_strtok_r" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_STRTOK_R $ac_have_decl" >>confdefs.h HAVE_STRUCT_SOCKADDR_STORAGE=1; HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; HAVE_SA_FAMILY_T=1; HAVE_ACCEPT4=1; case "$host_os" in osf*) printf "%s\n" "#define _POSIX_PII_SOCKET 1" >>confdefs.h ;; esac GL_GENERATE_SYS_SOCKET_H=false { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <sys/socket.h> is self-contained" >&5 printf %s "checking whether <sys/socket.h> is self-contained... " >&6; } if test ${gl_cv_header_sys_socket_h_selfcontained+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/socket.h> int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_sys_socket_h_selfcontained=yes else case e in #( e) gl_cv_header_sys_socket_h_selfcontained=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_socket_h_selfcontained" >&5 printf "%s\n" "$gl_cv_header_sys_socket_h_selfcontained" >&6; } if test $gl_cv_header_sys_socket_h_selfcontained = yes; then ac_fn_c_check_func "$LINENO" "shutdown" "ac_cv_func_shutdown" if test "x$ac_cv_func_shutdown" = xyes then : printf "%s\n" "#define HAVE_SHUTDOWN 1" >>confdefs.h fi if test $ac_cv_func_shutdown = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <sys/socket.h> defines the SHUT_* macros" >&5 printf %s "checking whether <sys/socket.h> defines the SHUT_* macros... " >&6; } if test ${gl_cv_header_sys_socket_h_shut+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/socket.h> int main (void) { int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR }; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_sys_socket_h_shut=yes else case e in #( e) gl_cv_header_sys_socket_h_shut=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_sys_socket_h_shut" >&5 printf "%s\n" "$gl_cv_header_sys_socket_h_shut" >&6; } if test $gl_cv_header_sys_socket_h_shut = no; then GL_GENERATE_SYS_SOCKET_H=true fi fi fi # We need to check for ws2tcpip.h now. if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_socket_h='<'sys/socket.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/socket.h>" >&5 printf %s "checking absolute name of <sys/socket.h>... " >&6; } if test ${gl_cv_next_sys_socket_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_sys_socket_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/socket.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/socket.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_socket_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_socket_h gl_cv_next_sys_socket_h='"'$gl_header'"' else gl_cv_next_sys_socket_h='<'sys/socket.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_socket_h" >&5 printf "%s\n" "$gl_cv_next_sys_socket_h" >&6; } fi NEXT_SYS_SOCKET_H=$gl_cv_next_sys_socket_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/socket.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_socket_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H=$gl_next_as_first_directive if test $ac_cv_header_sys_socket_h = yes; then HAVE_SYS_SOCKET_H=1 else HAVE_SYS_SOCKET_H=0 fi if test $ac_cv_header_sys_socket_h = yes; then HAVE_WS2TCPIP_H=0 else if test $ac_cv_header_ws2tcpip_h = yes; then HAVE_WS2TCPIP_H=1 else HAVE_WS2TCPIP_H=0 fi fi ac_fn_c_check_type "$LINENO" "struct sockaddr_storage" "ac_cv_type_struct_sockaddr_storage" " /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif " if test "x$ac_cv_type_struct_sockaddr_storage" = xyes then : printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_STORAGE 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "sa_family_t" "ac_cv_type_sa_family_t" " /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif " if test "x$ac_cv_type_sa_family_t" = xyes then : printf "%s\n" "#define HAVE_SA_FAMILY_T 1" >>confdefs.h fi if test $ac_cv_type_struct_sockaddr_storage = no; then HAVE_STRUCT_SOCKADDR_STORAGE=0 fi if test $ac_cv_type_sa_family_t = no; then HAVE_SA_FAMILY_T=0 fi if test $ac_cv_type_struct_sockaddr_storage != no; then ac_fn_c_check_member "$LINENO" "struct sockaddr_storage" "ss_family" "ac_cv_member_struct_sockaddr_storage_ss_family" "#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif " if test "x$ac_cv_member_struct_sockaddr_storage_ss_family" = xyes then : printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1" >>confdefs.h else case e in #( e) HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0 ;; esac fi fi if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then GL_GENERATE_SYS_SOCKET_H=true fi if test $ac_cv_header_sys_socket_h != yes; then ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes then : printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h fi fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi GL_GNULIB_SOCKET=0 GL_GNULIB_CONNECT=0 GL_GNULIB_ACCEPT=0 GL_GNULIB_BIND=0 GL_GNULIB_GETPEERNAME=0 GL_GNULIB_GETSOCKNAME=0 GL_GNULIB_GETSOCKOPT=0 GL_GNULIB_LISTEN=0 GL_GNULIB_RECV=0 GL_GNULIB_SEND=0 GL_GNULIB_RECVFROM=0 GL_GNULIB_SENDTO=0 GL_GNULIB_SETSOCKOPT=0 GL_GNULIB_SHUTDOWN=0 GL_GNULIB_ACCEPT4=0 printf "%s\n" "#define _USE_STD_STAT 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_types_h='<'sys/types.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/types.h>" >&5 printf %s "checking absolute name of <sys/types.h>... " >&6; } if test ${gl_cv_next_sys_types_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/types.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_types_h gl_cv_next_sys_types_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5 printf "%s\n" "$gl_cv_next_sys_types_h" >&6; } fi NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/types.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_types_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive WINDOWS_STAT_INODES=0 if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_uio_h='<'sys/uio.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/uio.h>" >&5 printf %s "checking absolute name of <sys/uio.h>... " >&6; } if test ${gl_cv_next_sys_uio_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_sys_uio_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/uio.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/uio.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_uio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_uio_h gl_cv_next_sys_uio_h='"'$gl_header'"' else gl_cv_next_sys_uio_h='<'sys/uio.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_uio_h" >&5 printf "%s\n" "$gl_cv_next_sys_uio_h" >&6; } fi NEXT_SYS_UIO_H=$gl_cv_next_sys_uio_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/uio.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_uio_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H=$gl_next_as_first_directive if test $ac_cv_header_sys_uio_h = yes; then HAVE_SYS_UIO_H=1 else HAVE_SYS_UIO_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_wait_h='<'sys/wait.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/wait.h>" >&5 printf %s "checking absolute name of <sys/wait.h>... " >&6; } if test ${gl_cv_next_sys_wait_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_sys_wait_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/wait.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/wait.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_wait_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_wait_h gl_cv_next_sys_wait_h='"'$gl_header'"' else gl_cv_next_sys_wait_h='<'sys/wait.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_wait_h" >&5 printf "%s\n" "$gl_cv_next_sys_wait_h" >&6; } fi NEXT_SYS_WAIT_H=$gl_cv_next_sys_wait_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/wait.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_wait_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H=$gl_next_as_first_directive GL_GNULIB_WAITPID=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <time.h>" >&5 printf %s "checking for struct timespec in <time.h>... " >&6; } if test ${gl_cv_sys_struct_timespec_in_time_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> int main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timespec_in_time_h=yes else case e in #( e) gl_cv_sys_struct_timespec_in_time_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_time_h" >&5 printf "%s\n" "$gl_cv_sys_struct_timespec_in_time_h" >&6; } TIME_H_DEFINES_STRUCT_TIMESPEC=0 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 if test $gl_cv_sys_struct_timespec_in_time_h = yes; then TIME_H_DEFINES_STRUCT_TIMESPEC=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <sys/time.h>" >&5 printf %s "checking for struct timespec in <sys/time.h>... " >&6; } if test ${gl_cv_sys_struct_timespec_in_sys_time_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/time.h> int main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timespec_in_sys_time_h=yes else case e in #( e) gl_cv_sys_struct_timespec_in_sys_time_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_sys_time_h" >&5 printf "%s\n" "$gl_cv_sys_struct_timespec_in_sys_time_h" >&6; } if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <pthread.h>" >&5 printf %s "checking for struct timespec in <pthread.h>... " >&6; } if test ${gl_cv_sys_struct_timespec_in_pthread_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> int main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timespec_in_pthread_h=yes else case e in #( e) gl_cv_sys_struct_timespec_in_pthread_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_pthread_h" >&5 printf "%s\n" "$gl_cv_sys_struct_timespec_in_pthread_h" >&6; } if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <unistd.h>" >&5 printf %s "checking for struct timespec in <unistd.h>... " >&6; } if test ${gl_cv_sys_struct_timespec_in_unistd_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> int main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timespec_in_unistd_h=yes else case e in #( e) gl_cv_sys_struct_timespec_in_unistd_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timespec_in_unistd_h" >&5 printf "%s\n" "$gl_cv_sys_struct_timespec_in_unistd_h" >&6; } if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 fi fi fi fi if test $gl_cv_have_include_next = yes; then gl_cv_next_time_h='<'time.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <time.h>" >&5 printf %s "checking absolute name of <time.h>... " >&6; } if test ${gl_cv_next_time_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'time.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_time_h gl_cv_next_time_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_time_h" >&5 printf "%s\n" "$gl_cv_next_time_h" >&6; } fi NEXT_TIME_H=$gl_cv_next_time_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'time.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_time_h fi NEXT_AS_FIRST_DIRECTIVE_TIME_H=$gl_next_as_first_directive { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for TIME_UTC in <time.h>" >&5 printf %s "checking for TIME_UTC in <time.h>... " >&6; } if test ${gl_cv_time_h_has_TIME_UTC+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> int main (void) { static int x = TIME_UTC; x++; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_time_h_has_TIME_UTC=yes else case e in #( e) gl_cv_time_h_has_TIME_UTC=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_time_h_has_TIME_UTC" >&5 printf "%s\n" "$gl_cv_time_h_has_TIME_UTC" >&6; } if test $gl_cv_time_h_has_TIME_UTC = yes; then TIME_H_DEFINES_TIME_UTC=1 else TIME_H_DEFINES_TIME_UTC=0 fi gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;} i\ 0 q ' gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;} i\ 0 q ' gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;} i\ 0 q ' if test "$HAVE_LIBUNISTRING" = yes; then LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"` LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"` LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"` fi if test "$HAVE_LIBUNISTRING" = yes; then for ac_header in unistring/woe32dll.h do : ac_fn_c_check_header_compile "$LINENO" "unistring/woe32dll.h" "ac_cv_header_unistring_woe32dll_h" "$ac_includes_default" if test "x$ac_cv_header_unistring_woe32dll_h" = xyes then : printf "%s\n" "#define HAVE_UNISTRING_WOE32DLL_H 1" >>confdefs.h HAVE_UNISTRING_WOE32DLL_H=1 else case e in #( e) HAVE_UNISTRING_WOE32DLL_H=0 ;; esac fi done else HAVE_UNISTRING_WOE32DLL_H=0 fi GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNINORM_NFD_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNINORM_NFC_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE='LIBUNISTRING_DLL_VARIABLE' ac_fn_check_decl "$LINENO" "execvpe" "ac_cv_have_decl_execvpe" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_execvpe" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_EXECVPE $ac_have_decl" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_unistd_h='<'unistd.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <unistd.h>" >&5 printf %s "checking absolute name of <unistd.h>... " >&6; } if test ${gl_cv_next_unistd_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_unistd_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'unistd.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_unistd_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_unistd_h gl_cv_next_unistd_h='"'$gl_header'"' else gl_cv_next_unistd_h='<'unistd.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5 printf "%s\n" "$gl_cv_next_unistd_h" >&6; } fi NEXT_UNISTD_H=$gl_cv_next_unistd_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'unistd.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_unistd_h fi NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi if test $ac_cv_have_decl_execvpe = no; then HAVE_DECL_EXECVPE=0 fi if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 printf %s "checking for inttypes.h... " >&6; } if test ${gl_cv_header_inttypes_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <inttypes.h> int main (void) { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_inttypes_h=yes else case e in #( e) gl_cv_header_inttypes_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5 printf "%s\n" "$gl_cv_header_inttypes_h" >&6; } if test $gl_cv_header_inttypes_h = yes; then printf "%s\n" "#define HAVE_INTTYPES_H_WITH_UINTMAX 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5 printf %s "checking for stdint.h... " >&6; } if test ${gl_cv_header_stdint_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <stdint.h> int main (void) { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_stdint_h=yes else case e in #( e) gl_cv_header_stdint_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5 printf "%s\n" "$gl_cv_header_stdint_h" >&6; } if test $gl_cv_header_stdint_h = yes; then printf "%s\n" "#define HAVE_STDINT_H_WITH_UINTMAX 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 printf %s "checking for intmax_t... " >&6; } if test ${gt_cv_c_intmax_t+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <stdlib.h> #if HAVE_STDINT_H_WITH_UINTMAX #include <stdint.h> #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include <inttypes.h> #endif int main (void) { intmax_t x = -1; return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_c_intmax_t=yes else case e in #( e) gt_cv_c_intmax_t=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5 printf "%s\n" "$gt_cv_c_intmax_t" >&6; } if test $gt_cv_c_intmax_t = yes; then printf "%s\n" "#define HAVE_INTMAX_T 1" >>confdefs.h else printf "%s\n" "#define intmax_t long long" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether snprintf returns a byte count as in C99" >&5 printf %s "checking whether snprintf returns a byte count as in C99... " >&6; } if test ${gl_cv_func_snprintf_retval_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; midnightbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_retval_c99="guessing no";; openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_retval_c99="guessing no";; netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on MSVC, no on mingw. windows*-msvc*) gl_cv_func_snprintf_retval_c99="guessing yes" ;; mingw* | windows*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Known" >/dev/null 2>&1 then : gl_cv_func_snprintf_retval_c99="guessing yes" else case e in #( e) gl_cv_func_snprintf_retval_c99="guessing no" ;; esac fi rm -rf conftest* ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_snprintf_retval_c99="$gl_cross_guess_normal";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) return 1; if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) return 2; if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) return 3; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_snprintf_retval_c99=yes else case e in #( e) gl_cv_func_snprintf_retval_c99=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_retval_c99" >&5 printf "%s\n" "$gl_cv_func_snprintf_retval_c99" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether snprintf truncates the result as in C99" >&5 printf %s "checking whether snprintf truncates the result as in C99... " >&6; } if test ${gl_cv_func_snprintf_truncation_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_truncation_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; midnightbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_truncation_c99="guessing no";; openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_snprintf_truncation_c99="guessing no";; solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OSF/1 >= 5. osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_truncation_c99="guessing no";; netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess no on native Windows. mingw* | windows*) gl_cv_func_snprintf_truncation_c99="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_snprintf_truncation_c99="$gl_cross_guess_normal";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); my_snprintf (buf, 3, "%d %d", 4567, 89); if (memcmp (buf, "45\0DEF", 6) != 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_snprintf_truncation_c99=yes else case e in #( e) gl_cv_func_snprintf_truncation_c99=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_truncation_c99" >&5 printf "%s\n" "$gl_cv_func_snprintf_truncation_c99" >&6; } ac_fn_c_check_func "$LINENO" "wcslen" "ac_cv_func_wcslen" if test "x$ac_cv_func_wcslen" = xyes then : printf "%s\n" "#define HAVE_WCSLEN 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" if test "x$ac_cv_func_snprintf" = xyes then : printf "%s\n" "#define HAVE_SNPRINTF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strnlen" "ac_cv_func_strnlen" if test "x$ac_cv_func_strnlen" = xyes then : printf "%s\n" "#define HAVE_STRNLEN 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcrtomb" "ac_cv_func_wcrtomb" if test "x$ac_cv_func_wcrtomb" = xyes then : printf "%s\n" "#define HAVE_WCRTOMB 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include <stdio.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl__snprintf" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL__SNPRINTF $ac_have_decl" >>confdefs.h case "$gl_cv_func_snprintf_retval_c99" in *yes) printf "%s\n" "#define HAVE_SNPRINTF_RETVAL_C99 1" >>confdefs.h ;; esac case "$gl_cv_func_snprintf_truncation_c99" in *yes) printf "%s\n" "#define HAVE_SNPRINTF_TRUNCATION_C99 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports POSIX/XSI format strings with positions" >&5 printf %s "checking whether printf supports POSIX/XSI format strings with positions... " >&6; } if test ${gl_cv_func_printf_positions+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) gl_cv_func_printf_positions="guessing no";; beos*) gl_cv_func_printf_positions="guessing no";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_positions="guessing yes";; # Guess no on native Windows. mingw* | windows* | pw*) gl_cv_func_printf_positions="guessing no";; *) gl_cv_func_printf_positions="guessing yes";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_positions=yes else case e in #( e) gl_cv_func_printf_positions=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_positions" >&5 printf "%s\n" "$gl_cv_func_printf_positions" >&6; } ac_fn_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_vsnprintf" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_VSNPRINTF $ac_have_decl" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_wchar_h='<'wchar.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5 printf %s "checking absolute name of <wchar.h>... " >&6; } if test ${gl_cv_next_wchar_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_wchar_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'wchar.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_wchar_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_wchar_h gl_cv_next_wchar_h='"'$gl_header'"' else gl_cv_next_wchar_h='<'wchar.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5 printf "%s\n" "$gl_cv_next_wchar_h" >&6; } fi NEXT_WCHAR_H=$gl_cv_next_wchar_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'wchar.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_wchar_h fi NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi ac_fn_check_decl "$LINENO" "wcsdup" "ac_cv_have_decl_wcsdup" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_wcsdup" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_WCSDUP $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_wcsdup = no; then HAVE_DECL_WCSDUP=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler option to allow warnings" >&5 printf %s "checking for C compiler option to allow warnings... " >&6; } if test ${gl_cv_cc_wallow+y} then : printf %s "(cached) " >&6 else case e in #( e) rm -f conftest* echo 'int dummy;' > conftest.c { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -Wno-error -c conftest.c 2>conftest2.err' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then gl_cv_cc_wallow='-Wno-error' else gl_cv_cc_wallow=none fi rm -f conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_wallow" >&5 printf "%s\n" "$gl_cv_cc_wallow" >&6; } case "$gl_cv_cc_wallow" in none) GL_CFLAG_ALLOW_WARNINGS='' ;; *) GL_CFLAG_ALLOW_WARNINGS="$gl_cv_cc_wallow" ;; esac if test -n "$CXX" && test "$CXX" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler option to allow warnings" >&5 printf %s "checking for C++ compiler option to allow warnings... " >&6; } if test ${gl_cv_cxx_wallow+y} then : printf %s "(cached) " >&6 else case e in #( e) rm -f conftest* echo 'int dummy;' > conftest.cc { ac_try='${CXX-c++} $CXXFLAGS $CPPFLAGS -c conftest.cc 2>conftest1.err' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null { ac_try='${CXX-c++} $CXXFLAGS $CPPFLAGS -Wno-error -c conftest.cc 2>conftest2.err' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } >/dev/null if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then gl_cv_cxx_wallow='-Wno-error' else gl_cv_cxx_wallow=none fi rm -f conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cxx_wallow" >&5 printf "%s\n" "$gl_cv_cxx_wallow" >&6; } case "$gl_cv_cxx_wallow" in none) GL_CXXFLAG_ALLOW_WARNINGS='' ;; *) GL_CXXFLAG_ALLOW_WARNINGS="$gl_cv_cxx_wallow" ;; esac else GL_CXXFLAG_ALLOW_WARNINGS='' fi HAVE_DECL_INET_NTOP=1; HAVE_DECL_INET_PTON=1; REPLACE_INET_NTOP=0; REPLACE_INET_PTON=0; if test $ac_cv_header_arpa_inet_h = yes; then HAVE_ARPA_INET_H=1 else HAVE_ARPA_INET_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_arpa_inet_h='<'arpa/inet.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <arpa/inet.h>" >&5 printf %s "checking absolute name of <arpa/inet.h>... " >&6; } if test ${gl_cv_next_arpa_inet_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_arpa_inet_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <arpa/inet.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'arpa/inet.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_arpa_inet_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_arpa_inet_h gl_cv_next_arpa_inet_h='"'$gl_header'"' else gl_cv_next_arpa_inet_h='<'arpa/inet.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_arpa_inet_h" >&5 printf "%s\n" "$gl_cv_next_arpa_inet_h" >&6; } fi NEXT_ARPA_INET_H=$gl_cv_next_arpa_inet_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'arpa/inet.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_arpa_inet_h fi NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H=$gl_next_as_first_directive if test $ac_cv_header_sys_socket_h = yes; then HAVE_WS2TCPIP_H=0 else if test $ac_cv_header_ws2tcpip_h = yes; then HAVE_WS2TCPIP_H=1 else HAVE_WS2TCPIP_H=0 fi fi GL_GNULIB_INET_NTOP=0 GL_GNULIB_INET_PTON=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a turkish Unicode locale" >&5 printf %s "checking for a turkish Unicode locale... " >&6; } if test ${gt_cv_locale_tr_utf8+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> #include <wctype.h> struct tm t; char buf[16]; int main () { /* On BeOS, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. But BeOS does not implement the Turkish upper-/lowercase mappings. Therefore, let this program return 1 on BeOS. */ /* Check whether the given locale name is recognized by the system. */ #if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; #else if (setlocale (LC_ALL, "") == NULL) return 1; #endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the tr_TR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ #if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } #endif #ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; #endif /* Check whether in the abbreviation of the eighth month, the second character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f) return 1; /* Check whether the upper-/lowercase mappings are as expected for Turkish. */ if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i' || towupper(0x0131) != 'I' || towlower ('I') != 0x0131) return 1; return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw* | windows*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Turkish_Turkey.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=Turkish_Turkey.65001 else # None found. gt_cv_locale_tr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr_TR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr_TR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_tr_utf8=tr.UTF-8 else # None found. gt_cv_locale_tr_utf8=none fi fi fi ;; esac else gt_cv_locale_tr_utf8=none fi rm -fr conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_tr_utf8" >&5 printf "%s\n" "$gt_cv_locale_tr_utf8" >&6; } LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8 case $LOCALE_TR_UTF8 in #( '' | *[[:space:]\"\$\'*[]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: invalid locale \"$LOCALE_TR_UTF8\"; assuming \"none\"" >&5 printf "%s\n" "$as_me: WARNING: invalid locale \"$LOCALE_TR_UTF8\"; assuming \"none\"" >&2;} LOCALE_TR_UTF8=none;; esac if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_CALLOC_FOR_CALLOC_POSIX=1 fi HAVE_ISBLANK=1; if test $gl_cv_have_include_next = yes; then gl_cv_next_ctype_h='<'ctype.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <ctype.h>" >&5 printf %s "checking absolute name of <ctype.h>... " >&6; } if test ${gl_cv_next_ctype_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ctype.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'ctype.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_ctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_ctype_h gl_cv_next_ctype_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_ctype_h" >&5 printf "%s\n" "$gl_cv_next_ctype_h" >&6; } fi NEXT_CTYPE_H=$gl_cv_next_ctype_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'ctype.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_ctype_h fi NEXT_AS_FIRST_DIRECTIVE_CTYPE_H=$gl_next_as_first_directive GL_GNULIB_ISBLANK=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if environ is properly declared" >&5 printf %s "checking if environ is properly declared... " >&6; } if test ${gt_cv_var_environ_declaration+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_UNISTD_H #include <unistd.h> #endif /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ #include <stdlib.h> typedef struct { int foo; } foo_t; extern foo_t environ; int main (void) { environ.foo = 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_var_environ_declaration=no else case e in #( e) gt_cv_var_environ_declaration=yes ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_var_environ_declaration" >&5 printf "%s\n" "$gt_cv_var_environ_declaration" >&6; } if test $gt_cv_var_environ_declaration = yes; then printf "%s\n" "#define HAVE_ENVIRON_DECL 1" >>confdefs.h fi if test $gt_cv_var_environ_declaration != yes; then HAVE_DECL_ENVIRON=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for IPv4 sockets" >&5 printf %s "checking for IPv4 sockets... " >&6; } if test ${gl_cv_socket_ipv4+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETINET_IN_H #include <netinet/in.h> #endif #ifdef HAVE_WINSOCK2_H #include <winsock2.h> #endif int main (void) { int x = AF_INET; struct in_addr y; struct sockaddr_in z; if (&x && &y && &z) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_socket_ipv4=yes else case e in #( e) gl_cv_socket_ipv4=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socket_ipv4" >&5 printf "%s\n" "$gl_cv_socket_ipv4" >&6; } if test $gl_cv_socket_ipv4 = yes; then printf "%s\n" "#define HAVE_IPV4 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for IPv6 sockets" >&5 printf %s "checking for IPv6 sockets... " >&6; } if test ${gl_cv_socket_ipv6+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_NETINET_IN_H #include <netinet/in.h> #endif #ifdef HAVE_WINSOCK2_H #include <winsock2.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif int main (void) { int x = AF_INET6; struct in6_addr y; struct sockaddr_in6 z; if (&x && &y && &z) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_socket_ipv6=yes else case e in #( e) gl_cv_socket_ipv6=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socket_ipv6" >&5 printf "%s\n" "$gl_cv_socket_ipv6" >&6; } if test $gl_cv_socket_ipv6 = yes; then printf "%s\n" "#define HAVE_IPV6 1" >>confdefs.h fi GL_GNULIB_IOCTL=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 printf %s "checking for LC_MESSAGES... " >&6; } if test ${gt_cv_val_LC_MESSAGES+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> int main (void) { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gt_cv_val_LC_MESSAGES=yes else case e in #( e) gt_cv_val_LC_MESSAGES=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_val_LC_MESSAGES" >&5 printf "%s\n" "$gt_cv_val_LC_MESSAGES" >&6; } if test $gt_cv_val_LC_MESSAGES = yes; then printf "%s\n" "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uselocale" >&5 printf %s "checking for uselocale... " >&6; } if test ${gl_cv_onwards_func_uselocale+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "uselocale" "ac_cv_have_decl_uselocale" "#include <locale.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_uselocale" = xyes then : fi if test $ac_cv_have_decl_uselocale = yes; then ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale" if test "x$ac_cv_func_uselocale" = xyes then : fi if test $ac_cv_func_uselocale = yes; then gl_cv_onwards_func_uselocale=yes else gl_cv_onwards_func_uselocale='future OS version' fi else gl_cv_onwards_func_uselocale='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale" if test "x$ac_cv_func_uselocale" = xyes then : fi gl_cv_onwards_func_uselocale=$ac_cv_func_uselocale ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_uselocale" >&5 printf "%s\n" "$gl_cv_onwards_func_uselocale" >&6; } case "$gl_cv_onwards_func_uselocale" in future*) ac_cv_func_uselocale=no ;; *) ac_cv_func_uselocale=$gl_cv_onwards_func_uselocale ;; esac if test $ac_cv_func_uselocale = yes; then printf "%s\n" "#define HAVE_USELOCALE 1" >>confdefs.h fi if test $ac_cv_func_uselocale = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether uselocale works" >&5 printf %s "checking whether uselocale works... " >&6; } if test ${gt_cv_func_uselocale_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : # Guess no on AIX and z/OS, yes otherwise. case "$host_os" in aix* | openedition*) gt_cv_func_uselocale_works="guessing no" ;; *) gt_cv_func_uselocale_works="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #if HAVE_XLOCALE_H # include <xlocale.h> #endif locale_t loc1; int main () { uselocale (NULL); setlocale (LC_ALL, "en_US.UTF-8"); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gt_cv_func_uselocale_works=yes else case e in #( e) gt_cv_func_uselocale_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_uselocale_works" >&5 printf "%s\n" "$gt_cv_func_uselocale_works" >&6; } else gt_cv_func_uselocale_works=no fi case "$gt_cv_func_uselocale_works" in *yes) gt_working_uselocale=yes printf "%s\n" "#define HAVE_WORKING_USELOCALE 1" >>confdefs.h ;; *) gt_working_uselocale=no ;; esac case "$gt_cv_func_uselocale_works" in *yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fake locale system (OpenBSD)" >&5 printf %s "checking for fake locale system (OpenBSD)... " >&6; } if test ${gt_cv_locale_fake+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in openbsd*) gt_cv_locale_fake="guessing yes" ;; *) gt_cv_locale_fake="guessing no" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #if HAVE_XLOCALE_H # include <xlocale.h> #endif int main () { locale_t loc1, loc2; if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL) return 1; if (setlocale (LC_ALL, "fr_FR.UTF-8") == NULL) return 1; loc1 = newlocale (LC_ALL_MASK, "de_DE.UTF-8", (locale_t)0); loc2 = newlocale (LC_ALL_MASK, "fr_FR.UTF-8", (locale_t)0); return !(loc1 == loc2); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gt_cv_locale_fake=yes else case e in #( e) gt_cv_locale_fake=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fake" >&5 printf "%s\n" "$gt_cv_locale_fake" >&6; } ;; *) gt_cv_locale_fake=no ;; esac case "$gt_cv_locale_fake" in *yes) gt_fake_locales=yes printf "%s\n" "#define HAVE_FAKE_LOCALES 1" >>confdefs.h ;; *) gt_fake_locales=no ;; esac case "$gt_cv_func_uselocale_works" in *yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Solaris 11.4 locale system" >&5 printf %s "checking for Solaris 11.4 locale system... " >&6; } if test ${gt_cv_locale_solaris114+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in solaris*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> struct _LC_locale_t *x; locale_t y; int main (void) { *y = x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_locale_solaris114=yes else case e in #( e) gt_cv_locale_solaris114=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; *) gt_cv_locale_solaris114=no ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_solaris114" >&5 printf "%s\n" "$gt_cv_locale_solaris114" >&6; } ;; *) gt_cv_locale_solaris114=no ;; esac if test $gt_cv_locale_solaris114 = yes; then printf "%s\n" "#define HAVE_SOLARIS114_LOCALES 1" >>confdefs.h fi case "$gt_cv_func_uselocale_works" in *yes) ac_fn_c_check_func "$LINENO" "getlocalename_l" "ac_cv_func_getlocalename_l" if test "x$ac_cv_func_getlocalename_l" = xyes then : printf "%s\n" "#define HAVE_GETLOCALENAME_L 1" >>confdefs.h fi ;; esac gt_nameless_locales=no case "$host_os" in aix*) gt_nameless_locales=yes printf "%s\n" "#define HAVE_NAMELESS_LOCALES 1" >>confdefs.h ;; esac if test $gt_working_uselocale = yes && test $gt_fake_locales = no; then gt_good_uselocale=yes printf "%s\n" "#define HAVE_GOOD_USELOCALE 1" >>confdefs.h else gt_good_uselocale=no fi if test $gt_good_uselocale = yes && test $gt_nameless_locales = yes; then gt_localename_enhances_locale_funcs=yes LOCALENAME_ENHANCE_LOCALE_FUNCS=1 printf "%s\n" "#define LOCALENAME_ENHANCE_LOCALE_FUNCS 1" >>confdefs.h else gt_localename_enhances_locale_funcs=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 printf %s "checking for CFPreferencesCopyAppValue... " >&6; } if test ${gt_cv_func_CFPreferencesCopyAppValue+y} then : printf %s "(cached) " >&6 else case e in #( e) gt_saved_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <CoreFoundation/CFPreferences.h> int main (void) { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gt_cv_func_CFPreferencesCopyAppValue=yes else case e in #( e) gt_cv_func_CFPreferencesCopyAppValue=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5 printf %s "checking for CFLocaleCopyPreferredLanguages... " >&6; } if test ${gt_cv_func_CFLocaleCopyPreferredLanguages+y} then : printf %s "(cached) " >&6 else case e in #( e) gt_saved_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <CoreFoundation/CFLocale.h> int main (void) { CFLocaleCopyPreferredLanguages(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gt_cv_func_CFLocaleCopyPreferredLanguages=yes else case e in #( e) gt_cv_func_CFLocaleCopyPreferredLanguages=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5 printf "%s\n" "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; } if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then printf "%s\n" "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes \ || test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation -Wl,-framework -Wl,CoreServices" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library needed for semaphore functions" >&5 printf %s "checking for library needed for semaphore functions... " >&6; } if test ${gl_cv_semaphore_lib+y} then : printf %s "(cached) " >&6 else case e in #( e) saved_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <semaphore.h> int main (void) { sem_post ((sem_t *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_semaphore_lib=none else case e in #( e) LIBS="$LIBS -lrt" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <semaphore.h> int main (void) { sem_post ((sem_t *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_semaphore_lib='-lrt' else case e in #( e) gl_cv_semaphore_lib=none ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_semaphore_lib" >&5 printf "%s\n" "$gl_cv_semaphore_lib" >&6; } if test "x$gl_cv_semaphore_lib" = xnone; then LIB_SEMAPHORE= else LIB_SEMAPHORE="$gl_cv_semaphore_lib" fi if test $ac_cv_have_decl_strerror_r = no; then HAVE_DECL_STRERROR_R=0 fi if test $ac_cv_func_strerror_r = yes; then if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then if test $gl_cv_func_strerror_r_posix_signature = yes; then case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR_R=1 ;; esac else REPLACE_STRERROR_R=1 fi else REPLACE_STRERROR_R=1 fi fi HAVE_PTHREAD_T=1; HAVE_PTHREAD_SPINLOCK_T=1; HAVE_PTHREAD_CREATE_DETACHED=1; HAVE_PTHREAD_MUTEX_RECURSIVE=1; HAVE_PTHREAD_MUTEX_ROBUST=1; HAVE_PTHREAD_PROCESS_SHARED=1; HAVE_PTHREAD_CREATE=1; HAVE_PTHREAD_ATTR_INIT=1; HAVE_PTHREAD_ATTR_GETDETACHSTATE=1; HAVE_PTHREAD_ATTR_SETDETACHSTATE=1; HAVE_PTHREAD_ATTR_DESTROY=1; HAVE_PTHREAD_SELF=1; HAVE_PTHREAD_EQUAL=1; HAVE_PTHREAD_DETACH=1; HAVE_PTHREAD_JOIN=1; HAVE_PTHREAD_EXIT=1; HAVE_PTHREAD_ONCE=1; HAVE_PTHREAD_MUTEX_INIT=1; HAVE_PTHREAD_MUTEXATTR_INIT=1; HAVE_PTHREAD_MUTEXATTR_GETTYPE=1; HAVE_PTHREAD_MUTEXATTR_SETTYPE=1; HAVE_PTHREAD_MUTEXATTR_GETROBUST=1; HAVE_PTHREAD_MUTEXATTR_SETROBUST=1; HAVE_PTHREAD_MUTEXATTR_DESTROY=1; HAVE_PTHREAD_MUTEX_LOCK=1; HAVE_PTHREAD_MUTEX_TRYLOCK=1; HAVE_PTHREAD_MUTEX_TIMEDLOCK=1; HAVE_PTHREAD_MUTEX_UNLOCK=1; HAVE_PTHREAD_MUTEX_DESTROY=1; HAVE_PTHREAD_RWLOCK_INIT=1; HAVE_PTHREAD_RWLOCKATTR_INIT=1; HAVE_PTHREAD_RWLOCKATTR_DESTROY=1; HAVE_PTHREAD_RWLOCK_RDLOCK=1; HAVE_PTHREAD_RWLOCK_WRLOCK=1; HAVE_PTHREAD_RWLOCK_TRYRDLOCK=1; HAVE_PTHREAD_RWLOCK_TRYWRLOCK=1; HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK=1; HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK=1; HAVE_PTHREAD_RWLOCK_UNLOCK=1; HAVE_PTHREAD_RWLOCK_DESTROY=1; HAVE_PTHREAD_COND_INIT=1; HAVE_PTHREAD_CONDATTR_INIT=1; HAVE_PTHREAD_CONDATTR_DESTROY=1; HAVE_PTHREAD_COND_WAIT=1; HAVE_PTHREAD_COND_TIMEDWAIT=1; HAVE_PTHREAD_COND_SIGNAL=1; HAVE_PTHREAD_COND_BROADCAST=1; HAVE_PTHREAD_COND_DESTROY=1; HAVE_PTHREAD_KEY_CREATE=1; HAVE_PTHREAD_SETSPECIFIC=1; HAVE_PTHREAD_GETSPECIFIC=1; HAVE_PTHREAD_KEY_DELETE=1; HAVE_PTHREAD_SPIN_INIT=1; HAVE_PTHREAD_SPIN_LOCK=1; HAVE_PTHREAD_SPIN_TRYLOCK=1; HAVE_PTHREAD_SPIN_UNLOCK=1; HAVE_PTHREAD_SPIN_DESTROY=1; REPLACE_PTHREAD_CREATE=0; REPLACE_PTHREAD_ATTR_INIT=0; REPLACE_PTHREAD_ATTR_GETDETACHSTATE=0; REPLACE_PTHREAD_ATTR_SETDETACHSTATE=0; REPLACE_PTHREAD_ATTR_DESTROY=0; REPLACE_PTHREAD_SELF=0; REPLACE_PTHREAD_EQUAL=0; REPLACE_PTHREAD_DETACH=0; REPLACE_PTHREAD_JOIN=0; REPLACE_PTHREAD_EXIT=0; REPLACE_PTHREAD_ONCE=0; REPLACE_PTHREAD_MUTEX_INIT=0; REPLACE_PTHREAD_MUTEXATTR_INIT=0; REPLACE_PTHREAD_MUTEXATTR_GETTYPE=0; REPLACE_PTHREAD_MUTEXATTR_SETTYPE=0; REPLACE_PTHREAD_MUTEXATTR_GETROBUST=0; REPLACE_PTHREAD_MUTEXATTR_SETROBUST=0; REPLACE_PTHREAD_MUTEXATTR_DESTROY=0; REPLACE_PTHREAD_MUTEX_LOCK=0; REPLACE_PTHREAD_MUTEX_TRYLOCK=0; REPLACE_PTHREAD_MUTEX_TIMEDLOCK=0; REPLACE_PTHREAD_MUTEX_UNLOCK=0; REPLACE_PTHREAD_MUTEX_DESTROY=0; REPLACE_PTHREAD_RWLOCK_INIT=0; REPLACE_PTHREAD_RWLOCKATTR_INIT=0; REPLACE_PTHREAD_RWLOCKATTR_DESTROY=0; REPLACE_PTHREAD_RWLOCK_RDLOCK=0; REPLACE_PTHREAD_RWLOCK_WRLOCK=0; REPLACE_PTHREAD_RWLOCK_TRYRDLOCK=0; REPLACE_PTHREAD_RWLOCK_TRYWRLOCK=0; REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK=0; REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK=0; REPLACE_PTHREAD_RWLOCK_UNLOCK=0; REPLACE_PTHREAD_RWLOCK_DESTROY=0; REPLACE_PTHREAD_COND_INIT=0; REPLACE_PTHREAD_CONDATTR_INIT=0; REPLACE_PTHREAD_CONDATTR_DESTROY=0; REPLACE_PTHREAD_COND_WAIT=0; REPLACE_PTHREAD_COND_TIMEDWAIT=0; REPLACE_PTHREAD_COND_SIGNAL=0; REPLACE_PTHREAD_COND_BROADCAST=0; REPLACE_PTHREAD_COND_DESTROY=0; REPLACE_PTHREAD_KEY_CREATE=0; REPLACE_PTHREAD_SETSPECIFIC=0; REPLACE_PTHREAD_GETSPECIFIC=0; REPLACE_PTHREAD_KEY_DELETE=0; REPLACE_PTHREAD_SPIN_INIT=0; REPLACE_PTHREAD_SPIN_LOCK=0; REPLACE_PTHREAD_SPIN_TRYLOCK=0; REPLACE_PTHREAD_SPIN_UNLOCK=0; REPLACE_PTHREAD_SPIN_DESTROY=0; if test $gl_cv_have_include_next = yes; then gl_cv_next_pthread_h='<'pthread.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <pthread.h>" >&5 printf %s "checking absolute name of <pthread.h>... " >&6; } if test ${gl_cv_next_pthread_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_pthread_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'pthread.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_pthread_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_pthread_h gl_cv_next_pthread_h='"'$gl_header'"' else gl_cv_next_pthread_h='<'pthread.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_pthread_h" >&5 printf "%s\n" "$gl_cv_next_pthread_h" >&6; } fi NEXT_PTHREAD_H=$gl_cv_next_pthread_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'pthread.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_pthread_h fi NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H=$gl_next_as_first_directive if test $ac_cv_header_pthread_h = yes; then HAVE_PTHREAD_H=1 if { case "$host_os" in mingw* | windows*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then HAVE_PTHREAD_H=0 fi else HAVE_PTHREAD_H=0 fi ac_fn_c_check_type "$LINENO" "pthread_t" "ac_cv_type_pthread_t" "$ac_includes_default #if HAVE_PTHREAD_H #include <pthread.h> #endif " if test "x$ac_cv_type_pthread_t" = xyes then : printf "%s\n" "#define HAVE_PTHREAD_T 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "pthread_spinlock_t" "ac_cv_type_pthread_spinlock_t" "$ac_includes_default #if HAVE_PTHREAD_H #include <pthread.h> #endif " if test "x$ac_cv_type_pthread_spinlock_t" = xyes then : printf "%s\n" "#define HAVE_PTHREAD_SPINLOCK_T 1" >>confdefs.h fi if test $ac_cv_type_pthread_t != yes; then HAVE_PTHREAD_T=0 fi if test $ac_cv_type_pthread_spinlock_t != yes; then HAVE_PTHREAD_SPINLOCK_T=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_CREATE_DETACHED" >&5 printf %s "checking for PTHREAD_CREATE_DETACHED... " >&6; } if test ${gl_cv_const_PTHREAD_CREATE_DETACHED+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> int x = PTHREAD_CREATE_DETACHED; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_const_PTHREAD_CREATE_DETACHED=yes else case e in #( e) gl_cv_const_PTHREAD_CREATE_DETACHED=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_const_PTHREAD_CREATE_DETACHED" >&5 printf "%s\n" "$gl_cv_const_PTHREAD_CREATE_DETACHED" >&6; } if test $gl_cv_const_PTHREAD_CREATE_DETACHED != yes; then HAVE_PTHREAD_CREATE_DETACHED=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_MUTEX_RECURSIVE" >&5 printf %s "checking for PTHREAD_MUTEX_RECURSIVE... " >&6; } if test ${gl_cv_const_PTHREAD_MUTEX_RECURSIVE+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> int x = PTHREAD_MUTEX_RECURSIVE; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_const_PTHREAD_MUTEX_RECURSIVE=yes else case e in #( e) gl_cv_const_PTHREAD_MUTEX_RECURSIVE=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_const_PTHREAD_MUTEX_RECURSIVE" >&5 printf "%s\n" "$gl_cv_const_PTHREAD_MUTEX_RECURSIVE" >&6; } if test $gl_cv_const_PTHREAD_MUTEX_RECURSIVE != yes; then HAVE_PTHREAD_MUTEX_RECURSIVE=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_MUTEX_ROBUST" >&5 printf %s "checking for PTHREAD_MUTEX_ROBUST... " >&6; } if test ${gl_cv_const_PTHREAD_MUTEX_ROBUST+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> int x = PTHREAD_MUTEX_ROBUST; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_const_PTHREAD_MUTEX_ROBUST=yes else case e in #( e) gl_cv_const_PTHREAD_MUTEX_ROBUST=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_const_PTHREAD_MUTEX_ROBUST" >&5 printf "%s\n" "$gl_cv_const_PTHREAD_MUTEX_ROBUST" >&6; } if test $gl_cv_const_PTHREAD_MUTEX_ROBUST != yes; then HAVE_PTHREAD_MUTEX_ROBUST=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PROCESS_SHARED" >&5 printf %s "checking for PTHREAD_PROCESS_SHARED... " >&6; } if test ${gl_cv_const_PTHREAD_PROCESS_SHARED+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> int x = PTHREAD_PROCESS_SHARED; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_const_PTHREAD_PROCESS_SHARED=yes else case e in #( e) gl_cv_const_PTHREAD_PROCESS_SHARED=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_const_PTHREAD_PROCESS_SHARED" >&5 printf "%s\n" "$gl_cv_const_PTHREAD_PROCESS_SHARED" >&6; } if test $gl_cv_const_PTHREAD_PROCESS_SHARED != yes; then HAVE_PTHREAD_PROCESS_SHARED=0 fi LIB_PTHREAD="$LIBPMULTITHREAD" GL_GNULIB_PTHREAD_THREAD=0 GL_GNULIB_PTHREAD_ONCE=0 GL_GNULIB_PTHREAD_MUTEX=0 GL_GNULIB_PTHREAD_RWLOCK=0 GL_GNULIB_PTHREAD_COND=0 GL_GNULIB_PTHREAD_TSS=0 GL_GNULIB_PTHREAD_SPIN=0 GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK=0 ac_fn_check_decl "$LINENO" "initstate" "ac_cv_have_decl_initstate" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_initstate" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_INITSTATE $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "setstate" "ac_cv_have_decl_setstate" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_setstate" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_SETSTATE $ac_have_decl" >>confdefs.h HAVE_SCHED_YIELD=1; REPLACE_SCHED_YIELD=0; ac_fn_c_check_header_compile "$LINENO" "sched.h" "ac_cv_header_sched_h" "#if HAVE_SYS_CDEFS_H #include <sys/cdefs.h> #endif " if test "x$ac_cv_header_sched_h" = xyes then : printf "%s\n" "#define HAVE_SCHED_H 1" >>confdefs.h fi if test $gl_cv_have_include_next = yes; then gl_cv_next_sched_h='<'sched.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sched.h>" >&5 printf %s "checking absolute name of <sched.h>... " >&6; } if test ${gl_cv_next_sched_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sched.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sched.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sched_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sched_h gl_cv_next_sched_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sched_h" >&5 printf "%s\n" "$gl_cv_next_sched_h" >&6; } fi NEXT_SCHED_H=$gl_cv_next_sched_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sched.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sched_h fi NEXT_AS_FIRST_DIRECTIVE_SCHED_H=$gl_next_as_first_directive if test "$ac_cv_header_sched_h" = yes; then HAVE_SCHED_H=1 else HAVE_SCHED_H=0 fi if test "$HAVE_SCHED_H" = 1; then ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#if HAVE_SYS_CDEFS_H #include <sys/cdefs.h> #endif #include <sched.h> " if test "x$ac_cv_type_struct_sched_param" = xyes then : HAVE_STRUCT_SCHED_PARAM=1 else case e in #( e) HAVE_STRUCT_SCHED_PARAM=0 ;; esac fi else HAVE_STRUCT_SCHED_PARAM=0 case "$host_os" in os2*) ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#include <spawn.h> " if test "x$ac_cv_type_struct_sched_param" = xyes then : HAVE_STRUCT_SCHED_PARAM=1 fi ;; vms) ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#include <pthread.h> " if test "x$ac_cv_type_struct_sched_param" = xyes then : HAVE_STRUCT_SCHED_PARAM=1 fi ;; esac fi if test "$ac_cv_header_sys_cdefs_h" = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi GL_GNULIB_SCHED_YIELD=0 ac_fn_check_decl "$LINENO" "setenv" "ac_cv_have_decl_setenv" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_setenv" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_SETENV $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_setenv = no; then HAVE_DECL_SETENV=0 fi ac_fn_c_check_header_compile "$LINENO" "search.h" "ac_cv_header_search_h" "$ac_includes_default" if test "x$ac_cv_header_search_h" = xyes then : printf "%s\n" "#define HAVE_SEARCH_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tsearch" >&5 printf %s "checking for tsearch... " >&6; } if test ${gl_cv_onwards_func_tsearch+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "tsearch" "ac_cv_have_decl_tsearch" "#include <search.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_tsearch" = xyes then : fi if test $ac_cv_have_decl_tsearch = yes; then ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch" if test "x$ac_cv_func_tsearch" = xyes then : fi if test $ac_cv_func_tsearch = yes; then gl_cv_onwards_func_tsearch=yes else gl_cv_onwards_func_tsearch='future OS version' fi else gl_cv_onwards_func_tsearch='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch" if test "x$ac_cv_func_tsearch" = xyes then : fi gl_cv_onwards_func_tsearch=$ac_cv_func_tsearch ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_tsearch" >&5 printf "%s\n" "$gl_cv_onwards_func_tsearch" >&6; } case "$gl_cv_onwards_func_tsearch" in future*) ac_cv_func_tsearch=no ;; *) ac_cv_func_tsearch=$gl_cv_onwards_func_tsearch ;; esac if test $ac_cv_func_tsearch = yes; then printf "%s\n" "#define HAVE_TSEARCH 1" >>confdefs.h fi case "$host_cpu" in mips*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the NaN float encoding is IEEE 754-2008 compliant" >&5 printf %s "checking whether the NaN float encoding is IEEE 754-2008 compliant... " >&6; } if test ${gl_cv_nan2008_f+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : gl_cv_nan2008_f="guessing no" else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ float volatile zero; /* Assume 'float' has 32 bits, i.e. IEEE single-float. */ union { float value; unsigned int word; } qnan; int main (void) { qnan.value = zero / zero; return !((qnan.word >> 22) & 1); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_nan2008_f=yes else case e in #( e) gl_cv_nan2008_f=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_nan2008_f" >&5 printf "%s\n" "$gl_cv_nan2008_f" >&6; } case "$gl_cv_nan2008_f" in *yes) gl_mips_nan2008_f=1 ;; *) gl_mips_nan2008_f=0 ;; esac printf "%s\n" "#define MIPS_NAN2008_FLOAT $gl_mips_nan2008_f" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the NaN double encoding is IEEE 754-2008 compliant" >&5 printf %s "checking whether the NaN double encoding is IEEE 754-2008 compliant... " >&6; } if test ${gl_cv_nan2008_d+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : gl_cv_nan2008_d="guessing no" else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ double volatile zero; /* Assume 'double' has 64 bits, i.e. IEEE double-float. */ union { double value; unsigned long long word; } qnan; int main (void) { qnan.value = zero / zero; return !((qnan.word >> 51) & 1); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_nan2008_d=yes else case e in #( e) gl_cv_nan2008_d=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_nan2008_d" >&5 printf "%s\n" "$gl_cv_nan2008_d" >&6; } case "$gl_cv_nan2008_d" in *yes) gl_mips_nan2008_d=1 ;; *) gl_mips_nan2008_d=0 ;; esac printf "%s\n" "#define MIPS_NAN2008_DOUBLE $gl_mips_nan2008_d" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the NaN long double encoding is IEEE 754-2008 compliant" >&5 printf %s "checking whether the NaN long double encoding is IEEE 754-2008 compliant... " >&6; } if test ${gl_cv_nan2008_l+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : gl_cv_nan2008_l="guessing no" else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> long double volatile zero; #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { long double value; unsigned int word[NWORDS]; } qnan; int main (void) { qnan.value = zero / zero; #if defined _MIPSEB /* equivalent: __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ */ return !((qnan.word[0] >> ((LDBL_MANT_DIG - 2) % 32)) & 1); #else return !((qnan.word[NWORDS - 1] >> ((LDBL_MANT_DIG - 2) % 32)) & 1); #endif ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_nan2008_l=yes else case e in #( e) gl_cv_nan2008_l=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_nan2008_l" >&5 printf "%s\n" "$gl_cv_nan2008_l" >&6; } case "$gl_cv_nan2008_l" in *yes) gl_mips_nan2008_l=1 ;; *) gl_mips_nan2008_l=0 ;; esac printf "%s\n" "#define MIPS_NAN2008_LONG_DOUBLE $gl_mips_nan2008_l" >>confdefs.h ;; esac if test $ac_cv_header_sys_ioctl_h = yes; then HAVE_SYS_IOCTL_H=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <sys/ioctl.h> declares ioctl" >&5 printf %s "checking whether <sys/ioctl.h> declares ioctl... " >&6; } if test ${gl_cv_decl_ioctl_in_sys_ioctl_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/ioctl.h> int main (void) { (void) ioctl; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_decl_ioctl_in_sys_ioctl_h=yes else case e in #( e) gl_cv_decl_ioctl_in_sys_ioctl_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_ioctl_in_sys_ioctl_h" >&5 printf "%s\n" "$gl_cv_decl_ioctl_in_sys_ioctl_h" >&6; } else HAVE_SYS_IOCTL_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_ioctl_h='<'sys/ioctl.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/ioctl.h>" >&5 printf %s "checking absolute name of <sys/ioctl.h>... " >&6; } if test ${gl_cv_next_sys_ioctl_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_sys_ioctl_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/ioctl.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/ioctl.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_ioctl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_ioctl_h gl_cv_next_sys_ioctl_h='"'$gl_header'"' else gl_cv_next_sys_ioctl_h='<'sys/ioctl.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_ioctl_h" >&5 printf "%s\n" "$gl_cv_next_sys_ioctl_h" >&6; } fi NEXT_SYS_IOCTL_H=$gl_cv_next_sys_ioctl_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/ioctl.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_ioctl_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H=$gl_next_as_first_directive ac_fn_check_decl "$LINENO" "unsetenv" "ac_cv_have_decl_unsetenv" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_unsetenv" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_UNSETENV $ac_have_decl" >>confdefs.h if test $gl_threads_api = posix; then YIELD_LIB="$SCHED_YIELD_LIB" else YIELD_LIB= fi GL_CFLAG_GNULIB_WARNINGS='' if test -n "$GL_CFLAG_ALLOW_WARNINGS"; then cat > conftest.c <<\EOF #if __GNUC__ >= 3 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter #endif #if __GNUC__ + (__GNUC_MINOR__ >= 9) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-float-conversion #endif #if __GNUC__ >= 7 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wimplicit-fallthrough #endif #if __GNUC__ + (__GNUC_MINOR__ >= 8) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-pedantic #endif #if 3 < __clang_major__ + (9 <= __clang_minor__) -Wno-tautological-constant-out-of-range-compare #endif #if __GNUC__ + (__GNUC_MINOR__ >= 3) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-sign-conversion -Wno-type-limits #endif #if __GNUC__ + (__GNUC_MINOR__ >= 5) > 4 -Wno-unsuffixed-float-constants #endif EOF gl_command="$CC $CFLAGS $CPPFLAGS -E conftest.c > conftest.out" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gl_command\""; } >&5 (eval $gl_command) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then gl_options=`grep -v '#' conftest.out` for word in $gl_options; do GL_CFLAG_GNULIB_WARNINGS="$GL_CFLAG_GNULIB_WARNINGS $word" done fi rm -f conftest.c conftest.out fi if true; then GL_COND_LIBTOOL_TRUE= GL_COND_LIBTOOL_FALSE='#' else GL_COND_LIBTOOL_TRUE='#' GL_COND_LIBTOOL_FALSE= fi gl_cond_libtool=true gl_m4_base='bootstrapped/m4' gl_source_base='bootstrapped/lib' gl_source_base_prefix= case "$host_os" in mingw* | windows*) REPLACE_ACCESS=1 ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether access honors trailing slash" >&5 printf %s "checking whether access honors trailing slash... " >&6; } if test ${gl_cv_func_access_slash_works+y} then : printf %s "(cached) " >&6 else case e in #( e) # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then rm -rf conftest.f conftest.lnk touch conftest.f || as_fn_error $? "cannot create temporary files" "$LINENO" 5 ln -s conftest.f conftest.lnk if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_access_slash_works="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_access_slash_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_access_slash_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_access_slash_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> int main (void) { int result = 0; if (access ("conftest.lnk/", R_OK) == 0) result |= 1; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_access_slash_works=yes else case e in #( e) gl_cv_func_access_slash_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -rf conftest.f conftest.lnk else gl_cv_func_access_slash_works="guessing yes" fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_access_slash_works" >&5 printf "%s\n" "$gl_cv_func_access_slash_works" >&6; } case "$gl_cv_func_access_slash_works" in *yes) ;; *) REPLACE_ACCESS=1 printf "%s\n" "#define ACCESS_TRAILING_SLASH_BUG 1" >>confdefs.h ;; esac ;; esac if test $REPLACE_ACCESS = 1; then GL_COND_OBJ_ACCESS_TRUE= GL_COND_OBJ_ACCESS_FALSE='#' else GL_COND_OBJ_ACCESS_TRUE='#' GL_COND_OBJ_ACCESS_FALSE= fi : if test -z "${GL_COND_OBJ_ACCESS_TRUE}" && test -z "${GL_COND_OBJ_ACCESS_FALSE}"; then GL_COND_OBJ_ACCESS_TRUE='#' GL_COND_OBJ_ACCESS_FALSE='#' fi GL_GNULIB_ACCESS=1 printf "%s\n" "#define GNULIB_TEST_ACCESS 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alignas and alignof" >&5 printf %s "checking for alignas and alignof... " >&6; } if test ${gl_cv_header_working_stdalign_h+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_CFLAGS=$CFLAGS for gl_working in "yes, keywords" "yes, <stdalign.h> macros"; do case $gl_working in #( *stdalign.h*) : CFLAGS="$gl_saved_CFLAGS -DINCLUDE_STDALIGN_H" ;; #( *) : ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdint.h> #ifdef INCLUDE_STDALIGN_H #include <stdalign.h> #endif #include <stddef.h> /* Test that alignof yields a result consistent with offsetof. This catches GCC bug 52023 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */ #ifdef __cplusplus template <class t> struct alignof_helper { char a; t b; }; # define ao(type) offsetof (alignof_helper<type>, b) #else # define ao(type) offsetof (struct { char a; type b; }, b) #endif char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1]; char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1]; char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1]; /* Test alignas only on platforms where gnulib can help. */ #if \ ((defined __cplusplus && 201103 <= __cplusplus) \ || (__TINYC__ && defined __attribute__) \ || (defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ : __GNUC__) \ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \ || 1300 <= _MSC_VER) struct alignas_test { char c; char alignas (8) alignas_8; }; char test_alignas[offsetof (struct alignas_test, alignas_8) == 8 ? 1 : -1]; #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_working_stdalign_h=$gl_working else case e in #( e) gl_cv_header_working_stdalign_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$gl_saved_CFLAGS test "$gl_cv_header_working_stdalign_h" != no && break done ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdalign_h" >&5 printf "%s\n" "$gl_cv_header_working_stdalign_h" >&6; } case $gl_cv_header_working_stdalign_h in #( yes*keyword*) : printf "%s\n" "#define HAVE_C_ALIGNASOF 1" >>confdefs.h ;; #( *) : ;; esac LTALLOCA=`echo "$ALLOCA" | sed -e 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'` if test $ac_cv_func_alloca_works = no; then : fi # Define an additional variable used in the Makefile substitution. if test $ac_cv_working_alloca_h = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5 printf %s "checking for alloca as a compiler built-in... " >&6; } if test ${gl_cv_rpl_alloca+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __GNUC__ || defined _AIX || defined _MSC_VER Need own alloca #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Need own alloca" >/dev/null 2>&1 then : gl_cv_rpl_alloca=yes else case e in #( e) gl_cv_rpl_alloca=no ;; esac fi rm -rf conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5 printf "%s\n" "$gl_cv_rpl_alloca" >&6; } if test $gl_cv_rpl_alloca = yes; then printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h GL_GENERATE_ALLOCA_H=true else GL_GENERATE_ALLOCA_H=false fi else GL_GENERATE_ALLOCA_H=true fi if test $ac_cv_working_alloca_h = yes; then HAVE_ALLOCA_H=1 else HAVE_ALLOCA_H=0 fi case "$GL_GENERATE_ALLOCA_H" in false) ALLOCA_H='' ;; true) if test -z "$ALLOCA_H"; then ALLOCA_H="${gl_source_base_prefix}alloca.h" fi ;; *) echo "*** GL_GENERATE_ALLOCA_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_ALLOCA_H; then GL_GENERATE_ALLOCA_H_TRUE= GL_GENERATE_ALLOCA_H_FALSE='#' else GL_GENERATE_ALLOCA_H_TRUE='#' GL_GENERATE_ALLOCA_H_FALSE= fi : if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then GL_GENERATE_ALLOCA_H_TRUE='#' GL_GENERATE_ALLOCA_H_FALSE='#' fi ac_fn_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include <errno.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_program_invocation_name" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : else case e in #( e) printf "%s\n" "#define GNULIB_PROGRAM_INVOCATION_NAME 1" >>confdefs.h ;; esac fi ac_fn_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include <errno.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : else case e in #( e) printf "%s\n" "#define GNULIB_PROGRAM_INVOCATION_SHORT_NAME 1" >>confdefs.h ;; esac fi # Check if program_invocation_name and program_invocation_short_name # are defined elsewhere. It is improbable that only one of them will # be defined and other not, I prefer to stay on the safe side and to # test each one separately. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether program_invocation_name is defined" >&5 printf %s "checking whether program_invocation_name is defined... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern char *program_invocation_name; int main (void) { program_invocation_name = "test"; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define HAVE_PROGRAM_INVOCATION_NAME 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether program_invocation_short_name is defined" >&5 printf %s "checking whether program_invocation_short_name is defined... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern char *program_invocation_short_name; int main (void) { program_invocation_short_name = "test"; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : printf "%s\n" "#define HAVE_PROGRAM_INVOCATION_SHORT_NAME 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=argp_error:2:c-format" XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=argp_failure:4:c-format" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for static_assert" >&5 printf %s "checking for static_assert... " >&6; } if test ${gl_cv_static_assert+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_CFLAGS=$CFLAGS for gl_working in "yes, a keyword" "yes, an <assert.h> macro"; do case $gl_working in #( *assert.h*) : CFLAGS="$gl_saved_CFLAGS -DINCLUDE_ASSERT_H" ;; #( *) : ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __clang__ && __STDC_VERSION__ < 202311 #pragma clang diagnostic error "-Wc2x-extensions" #pragma clang diagnostic error "-Wc++1z-extensions" #endif #ifdef INCLUDE_ASSERT_H #include <assert.h> #endif static_assert (2 + 2 == 4, "arithmetic does not work"); static_assert (2 + 2 == 4); int main (void) { static_assert (sizeof (char) == 1, "sizeof does not work"); static_assert (sizeof (char) == 1); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_static_assert=$gl_working else case e in #( e) gl_cv_static_assert=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$gl_saved_CFLAGS test "$gl_cv_static_assert" != no && break done ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_static_assert" >&5 printf "%s\n" "$gl_cv_static_assert" >&6; } GL_GENERATE_ASSERT_H=false case $gl_cv_static_assert in #( yes*keyword*) : printf "%s\n" "#define HAVE_C_STATIC_ASSERT 1" >>confdefs.h ;; #( no) : GL_GENERATE_ASSERT_H=true if test $gl_cv_have_include_next = yes; then gl_cv_next_assert_h='<'assert.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <assert.h>" >&5 printf %s "checking absolute name of <assert.h>... " >&6; } if test ${gl_cv_next_assert_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <assert.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'assert.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_assert_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_assert_h gl_cv_next_assert_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_assert_h" >&5 printf "%s\n" "$gl_cv_next_assert_h" >&6; } fi NEXT_ASSERT_H=$gl_cv_next_assert_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'assert.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_assert_h fi NEXT_AS_FIRST_DIRECTIVE_ASSERT_H=$gl_next_as_first_directive ;; #( *) : ;; esac case "$GL_GENERATE_ASSERT_H" in false) ASSERT_H='' ;; true) if test -z "$ASSERT_H"; then ASSERT_H="${gl_source_base_prefix}assert.h" fi ;; *) echo "*** GL_GENERATE_ASSERT_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_ASSERT_H; then GL_GENERATE_ASSERT_H_TRUE= GL_GENERATE_ASSERT_H_FALSE='#' else GL_GENERATE_ASSERT_H_TRUE='#' GL_GENERATE_ASSERT_H_FALSE= fi : if test -z "${GL_GENERATE_ASSERT_H_TRUE}" && test -z "${GL_GENERATE_ASSERT_H_FALSE}"; then GL_GENERATE_ASSERT_H_TRUE='#' GL_GENERATE_ASSERT_H_FALSE='#' fi if test $ac_cv_func_btowc = no; then HAVE_BTOWC=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether btowc(0) is correct" >&5 printf %s "checking whether btowc(0) is correct... " >&6; } if test ${gl_cv_func_btowc_nul+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on Cygwin. cygwin*) gl_cv_func_btowc_nul="guessing no" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_btowc_nul="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_nul="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> int main () { if (btowc ('\0') != 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_btowc_nul=yes else case e in #( e) gl_cv_func_btowc_nul=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_nul" >&5 printf "%s\n" "$gl_cv_func_btowc_nul" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether btowc(EOF) is correct" >&5 printf %s "checking whether btowc(EOF) is correct... " >&6; } if test ${gl_cv_func_btowc_eof+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on IRIX. irix*) gl_cv_func_btowc_eof="guessing no" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_btowc_eof="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_eof="guessing yes" ;; esac if test $LOCALE_FR != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdio.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (btowc (EOF) != WEOF) return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_btowc_eof=yes else case e in #( e) gl_cv_func_btowc_eof=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_eof" >&5 printf "%s\n" "$gl_cv_func_btowc_eof" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether btowc is consistent with mbrtowc in the C locale" >&5 printf %s "checking whether btowc is consistent with mbrtowc in the C locale... " >&6; } if test ${gl_cv_func_btowc_consistent+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on mingw. mingw* | windows*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __MINGW32__ Problem #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Problem" >/dev/null 2>&1 then : gl_cv_func_btowc_consistent="guessing no" else case e in #( e) gl_cv_func_btowc_consistent="guessing yes" ;; esac fi rm -rf conftest* ;; # Guess yes otherwise. *) gl_cv_func_btowc_consistent="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { #if HAVE_MBRTOWC wint_t wc1 = btowc (0x80); wchar_t wc2 = (wchar_t) 0xbadface; char buf[1] = { 0x80 }; mbstate_t state; memset (&state, 0, sizeof (mbstate_t)); if (mbrtowc (&wc2, buf, 1, &state) != 1 || wc1 != wc2) return 1; #endif return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_btowc_consistent=yes else case e in #( e) gl_cv_func_btowc_consistent=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_consistent" >&5 printf "%s\n" "$gl_cv_func_btowc_consistent" >&6; } case "$gl_cv_func_btowc_nul" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac case "$gl_cv_func_btowc_eof" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac case "$gl_cv_func_btowc_consistent" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac if test $REPLACE_BTOWC = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5 printf %s "checking whether the C locale is free of encoding errors... " >&6; } if test ${gl_cv_func_mbrtowc_C_locale_sans_EILSEQ+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on native Windows. mingw* | windows*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;; *) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #include <locale.h> #include <wchar.h> int main (void) { int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; wchar_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtowc (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes else case e in #( e) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&6; } case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac fi fi if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then GL_COND_OBJ_BTOWC_TRUE= GL_COND_OBJ_BTOWC_FALSE='#' else GL_COND_OBJ_BTOWC_TRUE='#' GL_COND_OBJ_BTOWC_FALSE= fi : if test -z "${GL_COND_OBJ_BTOWC_TRUE}" && test -z "${GL_COND_OBJ_BTOWC_FALSE}"; then GL_COND_OBJ_BTOWC_TRUE='#' GL_COND_OBJ_BTOWC_FALSE='#' fi if test -z "$GL_COND_OBJ_BTOWC_TRUE"; then : : fi GL_GNULIB_BTOWC=1 printf "%s\n" "#define GNULIB_TEST_BTOWC 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __builtin_expect" >&5 printf %s "checking for __builtin_expect... " >&6; } if test ${gl_cv___builtin_expect+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv___builtin_expect=yes else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <builtins.h> int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv___builtin_expect="in <builtins.h>" else case e in #( e) gl_cv___builtin_expect=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv___builtin_expect" >&5 printf "%s\n" "$gl_cv___builtin_expect" >&6; } if test "$gl_cv___builtin_expect" = yes; then printf "%s\n" "#define HAVE___BUILTIN_EXPECT 1" >>confdefs.h elif test "$gl_cv___builtin_expect" = "in <builtins.h>"; then printf "%s\n" "#define HAVE___BUILTIN_EXPECT 2" >>confdefs.h fi GL_GNULIB_C32ISALNUM=1 printf "%s\n" "#define GNULIB_TEST_C32ISALNUM 1" >>confdefs.h GL_GNULIB_C32ISALPHA=1 printf "%s\n" "#define GNULIB_TEST_C32ISALPHA 1" >>confdefs.h GL_GNULIB_C32ISBLANK=1 printf "%s\n" "#define GNULIB_TEST_C32ISBLANK 1" >>confdefs.h GL_GNULIB_C32ISCNTRL=1 printf "%s\n" "#define GNULIB_TEST_C32ISCNTRL 1" >>confdefs.h GL_GNULIB_C32ISDIGIT=1 printf "%s\n" "#define GNULIB_TEST_C32ISDIGIT 1" >>confdefs.h GL_GNULIB_C32ISGRAPH=1 printf "%s\n" "#define GNULIB_TEST_C32ISGRAPH 1" >>confdefs.h GL_GNULIB_C32ISLOWER=1 printf "%s\n" "#define GNULIB_TEST_C32ISLOWER 1" >>confdefs.h GL_GNULIB_C32ISPRINT=1 printf "%s\n" "#define GNULIB_TEST_C32ISPRINT 1" >>confdefs.h GL_GNULIB_C32ISPUNCT=1 printf "%s\n" "#define GNULIB_TEST_C32ISPUNCT 1" >>confdefs.h GL_GNULIB_C32ISSPACE=1 printf "%s\n" "#define GNULIB_TEST_C32ISSPACE 1" >>confdefs.h GL_GNULIB_C32ISUPPER=1 printf "%s\n" "#define GNULIB_TEST_C32ISUPPER 1" >>confdefs.h GL_GNULIB_C32ISXDIGIT=1 printf "%s\n" "#define GNULIB_TEST_C32ISXDIGIT 1" >>confdefs.h GL_GNULIB_C32TOLOWER=1 printf "%s\n" "#define GNULIB_TEST_C32TOLOWER 1" >>confdefs.h GL_GNULIB_C32WIDTH=1 printf "%s\n" "#define GNULIB_TEST_C32WIDTH 1" >>confdefs.h GL_GNULIB_CHDIR=1 printf "%s\n" "#define GNULIB_TEST_CHDIR 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether this system supports file names of any length" >&5 printf %s "checking whether this system supports file names of any length... " >&6; } if test ${gl_cv_have_unlimited_file_name_length+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Arrange to define PATH_MAX, like "pathmax.h" does. */ #if HAVE_UNISTD_H # include <unistd.h> #endif #include <limits.h> #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include <sys/param.h> #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifdef __hpux # undef PATH_MAX # define PATH_MAX 1024 #endif #if defined _WIN32 && ! defined __CYGWIN__ # undef PATH_MAX # define PATH_MAX 260 #endif #ifdef PATH_MAX have_arbitrary_file_name_length_limit #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "have_arbitrary_file_name_length_limit" >/dev/null 2>&1 then : gl_cv_have_unlimited_file_name_length=no else case e in #( e) gl_cv_have_unlimited_file_name_length=yes ;; esac fi rm -rf conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_unlimited_file_name_length" >&5 printf "%s\n" "$gl_cv_have_unlimited_file_name_length" >&6; } if test $gl_cv_have_unlimited_file_name_length = no; then GL_COND_OBJ_CHDIR_LONG_TRUE= GL_COND_OBJ_CHDIR_LONG_FALSE='#' else GL_COND_OBJ_CHDIR_LONG_TRUE='#' GL_COND_OBJ_CHDIR_LONG_FALSE= fi : if test -z "${GL_COND_OBJ_CHDIR_LONG_TRUE}" && test -z "${GL_COND_OBJ_CHDIR_LONG_FALSE}"; then GL_COND_OBJ_CHDIR_LONG_TRUE='#' GL_COND_OBJ_CHDIR_LONG_FALSE='#' fi if test -z "$GL_COND_OBJ_CHDIR_LONG_TRUE"; then : : fi printf "%s\n" "#define GNULIB_TEST_CLOEXEC 1" >>confdefs.h if test $REPLACE_CLOSE = 1; then GL_COND_OBJ_CLOSE_TRUE= GL_COND_OBJ_CLOSE_FALSE='#' else GL_COND_OBJ_CLOSE_TRUE='#' GL_COND_OBJ_CLOSE_FALSE= fi : if test -z "${GL_COND_OBJ_CLOSE_TRUE}" && test -z "${GL_COND_OBJ_CLOSE_FALSE}"; then GL_COND_OBJ_CLOSE_TRUE='#' GL_COND_OBJ_CLOSE_FALSE='#' fi GL_GNULIB_CLOSE=1 printf "%s\n" "#define GNULIB_TEST_CLOSE 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "dirfd" "ac_cv_func_dirfd" if test "x$ac_cv_func_dirfd" = xyes then : printf "%s\n" "#define HAVE_DIRFD 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "dirfd" "ac_cv_have_decl_dirfd" "#include <sys/types.h> #include <dirent.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_dirfd" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_DIRFD $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_dirfd = no; then HAVE_DECL_DIRFD=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether dirfd is a macro" >&5 printf %s "checking whether dirfd is a macro... " >&6; } if test ${gl_cv_func_dirfd_macro+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <dirent.h> #ifdef dirfd dirent_header_defines_dirfd #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "dirent_header_defines_dirfd" >/dev/null 2>&1 then : gl_cv_func_dirfd_macro=yes else case e in #( e) gl_cv_func_dirfd_macro=no ;; esac fi rm -rf conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dirfd_macro" >&5 printf "%s\n" "$gl_cv_func_dirfd_macro" >&6; } if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no; then HAVE_DIRFD=0 else HAVE_DIRFD=1 if test $DIR_HAS_FD_MEMBER = 0; then REPLACE_DIRFD=1 fi fi if test $HAVE_DIRFD = 0 || test $REPLACE_DIRFD = 1; then GL_COND_OBJ_DIRFD_TRUE= GL_COND_OBJ_DIRFD_FALSE='#' else GL_COND_OBJ_DIRFD_TRUE='#' GL_COND_OBJ_DIRFD_FALSE= fi : if test -z "${GL_COND_OBJ_DIRFD_TRUE}" && test -z "${GL_COND_OBJ_DIRFD_FALSE}"; then GL_COND_OBJ_DIRFD_TRUE='#' GL_COND_OBJ_DIRFD_FALSE='#' fi if test -z "$GL_COND_OBJ_DIRFD_TRUE"; then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get the file descriptor associated with an open DIR*" >&5 printf %s "checking how to get the file descriptor associated with an open DIR*... " >&6; } if test ${gl_cv_sys_dir_fd_member_name+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_CFLAGS=$CFLAGS for ac_expr in d_fd dd_fd; do CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <dirent.h> int main (void) { DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : dir_fd_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$gl_saved_CFLAGS test "$dir_fd_found" = yes && break done test "$dir_fd_found" = yes || ac_expr=no_such_member gl_cv_sys_dir_fd_member_name=$ac_expr ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_dir_fd_member_name" >&5 printf "%s\n" "$gl_cv_sys_dir_fd_member_name" >&6; } if test $gl_cv_sys_dir_fd_member_name != no_such_member; then printf "%s\n" "#define DIR_FD_MEMBER_NAME $gl_cv_sys_dir_fd_member_name" >>confdefs.h fi fi GL_GNULIB_DIRFD=1 printf "%s\n" "#define GNULIB_TEST_DIRFD 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 printf %s "checking whether // is distinct from /... " >&6; } if test ${gl_cv_double_slash_root+y} then : printf %s "(cached) " >&6 else case e in #( e) if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # <bug-gnulib@gnu.org>. case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 printf "%s\n" "$gl_cv_double_slash_root" >&6; } if test "$gl_cv_double_slash_root" = yes; then printf "%s\n" "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether dup2 works" >&5 printf %s "checking whether dup2 works... " >&6; } if test ${gl_cv_func_dup2_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in mingw* | windows*) # on this platform, dup2 always returns 0 for success gl_cv_func_dup2_works="guessing no" ;; cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 gl_cv_func_dup2_works="guessing no" ;; aix* | freebsd*) # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, # not EBADF. gl_cv_func_dup2_works="guessing no" ;; haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. gl_cv_func_dup2_works="guessing no" ;; *-android*) # implemented using dup3(), which fails if oldfd == newfd gl_cv_func_dup2_works="guessing no" ;; os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. gl_cv_func_dup2_works="guessing no" ;; *) gl_cv_func_dup2_works="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> $gl_mda_defines #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif int main (void) { int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; #ifdef FD_CLOEXEC if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) result |= 1; #endif if (dup2 (1, 1) != 1) result |= 2; #ifdef FD_CLOEXEC if (fcntl (1, F_GETFD) != FD_CLOEXEC) result |= 4; #endif close (0); if (dup2 (0, 0) != -1) result |= 8; /* Many gnulib modules require POSIX conformance of EBADF. */ if (dup2 (2, bad_fd) == -1 && errno != EBADF) result |= 16; /* Flush out some cygwin core dumps. */ if (dup2 (2, -1) != -1 || errno != EBADF) result |= 32; dup2 (2, 255); dup2 (2, 256); /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ { int fd = open (".", O_RDONLY); if (fd == -1) result |= 64; else if (dup2 (fd, fd + 1) == -1) result |= 128; close (fd); } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_dup2_works=yes else case e in #( e) gl_cv_func_dup2_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dup2_works" >&5 printf "%s\n" "$gl_cv_func_dup2_works" >&6; } case "$gl_cv_func_dup2_works" in *yes) ;; *) REPLACE_DUP2=1 ac_fn_c_check_func "$LINENO" "setdtablesize" "ac_cv_func_setdtablesize" if test "x$ac_cv_func_setdtablesize" = xyes then : printf "%s\n" "#define HAVE_SETDTABLESIZE 1" >>confdefs.h fi ;; esac if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then REPLACE_DUP2=1 fi if test $REPLACE_DUP2 = 1; then GL_COND_OBJ_DUP2_TRUE= GL_COND_OBJ_DUP2_FALSE='#' else GL_COND_OBJ_DUP2_TRUE='#' GL_COND_OBJ_DUP2_FALSE= fi : if test -z "${GL_COND_OBJ_DUP2_TRUE}" && test -z "${GL_COND_OBJ_DUP2_FALSE}"; then GL_COND_OBJ_DUP2_TRUE='#' GL_COND_OBJ_DUP2_FALSE='#' fi if test -z "$GL_COND_OBJ_DUP2_TRUE"; then : fi GL_GNULIB_DUP2=1 printf "%s\n" "#define GNULIB_TEST_DUP2 1" >>confdefs.h case "$GL_GENERATE_ERRNO_H" in false) ERRNO_H='' ;; true) if test -z "$ERRNO_H"; then ERRNO_H="${gl_source_base_prefix}errno.h" fi ;; *) echo "*** GL_GENERATE_ERRNO_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_ERRNO_H; then GL_GENERATE_ERRNO_H_TRUE= GL_GENERATE_ERRNO_H_FALSE='#' else GL_GENERATE_ERRNO_H_TRUE='#' GL_GENERATE_ERRNO_H_FALSE= fi : if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then GL_GENERATE_ERRNO_H_TRUE='#' GL_GENERATE_ERRNO_H_FALSE='#' fi if test $COMPILE_ERROR_C = 1; then GL_COND_OBJ_ERROR_TRUE= GL_COND_OBJ_ERROR_FALSE='#' else GL_COND_OBJ_ERROR_TRUE='#' GL_COND_OBJ_ERROR_FALSE= fi : if test -z "${GL_COND_OBJ_ERROR_TRUE}" && test -z "${GL_COND_OBJ_ERROR_FALSE}"; then GL_COND_OBJ_ERROR_TRUE='#' GL_COND_OBJ_ERROR_FALSE='#' fi if test -z "$GL_COND_OBJ_ERROR_TRUE"; then : : fi XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format" XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format" ac_fn_c_check_func "$LINENO" "euidaccess" "ac_cv_func_euidaccess" if test "x$ac_cv_func_euidaccess" = xyes then : printf "%s\n" "#define HAVE_EUIDACCESS 1" >>confdefs.h fi if test $ac_cv_func_euidaccess = no; then HAVE_EUIDACCESS=0 fi if test $HAVE_EUIDACCESS = 0; then GL_COND_OBJ_EUIDACCESS_TRUE= GL_COND_OBJ_EUIDACCESS_FALSE='#' else GL_COND_OBJ_EUIDACCESS_TRUE='#' GL_COND_OBJ_EUIDACCESS_FALSE= fi : if test -z "${GL_COND_OBJ_EUIDACCESS_TRUE}" && test -z "${GL_COND_OBJ_EUIDACCESS_FALSE}"; then GL_COND_OBJ_EUIDACCESS_TRUE='#' GL_COND_OBJ_EUIDACCESS_FALSE='#' fi if test -z "$GL_COND_OBJ_EUIDACCESS_TRUE"; then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for faccessat" >&5 printf %s "checking for faccessat... " >&6; } if test ${gl_cv_onwards_func_faccessat+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "faccessat" "ac_cv_have_decl_faccessat" "#include <unistd.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_faccessat" = xyes then : fi if test $ac_cv_have_decl_faccessat = yes; then ac_fn_c_check_func "$LINENO" "faccessat" "ac_cv_func_faccessat" if test "x$ac_cv_func_faccessat" = xyes then : fi if test $ac_cv_func_faccessat = yes; then gl_cv_onwards_func_faccessat=yes else gl_cv_onwards_func_faccessat='future OS version' fi else gl_cv_onwards_func_faccessat='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "faccessat" "ac_cv_func_faccessat" if test "x$ac_cv_func_faccessat" = xyes then : fi gl_cv_onwards_func_faccessat=$ac_cv_func_faccessat ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_faccessat" >&5 printf "%s\n" "$gl_cv_onwards_func_faccessat" >&6; } case "$gl_cv_onwards_func_faccessat" in future*) ac_cv_func_faccessat=no ;; *) ac_cv_func_faccessat=$gl_cv_onwards_func_faccessat ;; esac if test $ac_cv_func_faccessat = yes; then printf "%s\n" "#define HAVE_FACCESSAT 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "libgen.h" "ac_cv_header_libgen_h" "$ac_includes_default" if test "x$ac_cv_header_libgen_h" = xyes then : printf "%s\n" "#define HAVE_LIBGEN_H 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups" if test "x$ac_cv_func_getgroups" = xyes then : fi # If we don't yet have getgroups, see if it's in -lbsd. # This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1. gl_saved_LIBS=$LIBS if test $ac_cv_func_getgroups = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getgroups in -lbsd" >&5 printf %s "checking for getgroups in -lbsd... " >&6; } if test ${ac_cv_lib_bsd_getgroups+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char getgroups (void); int main (void) { return getgroups (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_bsd_getgroups=yes else case e in #( e) ac_cv_lib_bsd_getgroups=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_getgroups" >&5 printf "%s\n" "$ac_cv_lib_bsd_getgroups" >&6; } if test "x$ac_cv_lib_bsd_getgroups" = xyes then : GETGROUPS_LIB=-lbsd fi fi # Run the program to test the functionality of the system-supplied # getgroups function only if there is such a function. if test $ac_cv_func_getgroups = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working getgroups" >&5 printf %s "checking for working getgroups... " >&6; } if test ${ac_cv_func_getgroups_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_getgroups_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) ac_cv_func_getgroups_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_getgroups_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { /* On NeXTstep 3.2, getgroups (0, 0) always fails. */ return getgroups (0, 0) == -1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_getgroups_works=yes else case e in #( e) ac_cv_func_getgroups_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getgroups_works" >&5 printf "%s\n" "$ac_cv_func_getgroups_works" >&6; } else ac_cv_func_getgroups_works=no fi case "$ac_cv_func_getgroups_works" in *yes) printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h ;; esac LIBS=$gl_saved_LIBS # Solaris 9 and 10 need -lgen to get the eaccess function. # Save and restore LIBS so -lgen isn't added to it. Otherwise, *all* # programs in the package would end up linked with that potentially-shared # library, inducing unnecessary run-time overhead. EUIDACCESS_LIBGEN= gl_saved_libs=$LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing eaccess" >&5 printf %s "checking for library containing eaccess... " >&6; } if test ${ac_cv_search_eaccess+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char eaccess (void); int main (void) { return eaccess (); ; return 0; } _ACEOF for ac_lib in '' gen do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_eaccess=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_eaccess+y} then : break fi done if test ${ac_cv_search_eaccess+y} then : else case e in #( e) ac_cv_search_eaccess=no ;; esac fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_eaccess" >&5 printf "%s\n" "$ac_cv_search_eaccess" >&6; } ac_res=$ac_cv_search_eaccess if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" test "$ac_cv_search_eaccess" = "none required" || EUIDACCESS_LIBGEN=$ac_cv_search_eaccess fi ac_fn_c_check_func "$LINENO" "eaccess" "ac_cv_func_eaccess" if test "x$ac_cv_func_eaccess" = xyes then : printf "%s\n" "#define HAVE_EACCESS 1" >>confdefs.h fi LIBS=$gl_saved_libs # For backward compatibility. LIB_EACCESS="$EUIDACCESS_LIBGEN" fi GL_GNULIB_EUIDACCESS=1 printf "%s\n" "#define GNULIB_TEST_EUIDACCESS 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for faccessat" >&5 printf %s "checking for faccessat... " >&6; } if test ${gl_cv_onwards_func_faccessat+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "faccessat" "ac_cv_have_decl_faccessat" "#include <unistd.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_faccessat" = xyes then : fi if test $ac_cv_have_decl_faccessat = yes; then ac_fn_c_check_func "$LINENO" "faccessat" "ac_cv_func_faccessat" if test "x$ac_cv_func_faccessat" = xyes then : fi if test $ac_cv_func_faccessat = yes; then gl_cv_onwards_func_faccessat=yes else gl_cv_onwards_func_faccessat='future OS version' fi else gl_cv_onwards_func_faccessat='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "faccessat" "ac_cv_func_faccessat" if test "x$ac_cv_func_faccessat" = xyes then : fi gl_cv_onwards_func_faccessat=$ac_cv_func_faccessat ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_faccessat" >&5 printf "%s\n" "$gl_cv_onwards_func_faccessat" >&6; } case "$gl_cv_onwards_func_faccessat" in future*) ac_cv_func_faccessat=no ;; *) ac_cv_func_faccessat=$gl_cv_onwards_func_faccessat ;; esac if test $ac_cv_func_faccessat = yes; then printf "%s\n" "#define HAVE_FACCESSAT 1" >>confdefs.h fi if test $ac_cv_func_faccessat = no; then HAVE_FACCESSAT=0 case "$gl_cv_onwards_func_faccessat" in future*) REPLACE_FACCESSAT=1 ;; esac else case $gl_cv_func_lstat_dereferences_slashed_symlink in *yes) ;; *) REPLACE_FACCESSAT=1 ;; esac fi if test $HAVE_FACCESSAT = 0 || test $REPLACE_FACCESSAT = 1; then GL_COND_OBJ_FACCESSAT_TRUE= GL_COND_OBJ_FACCESSAT_FALSE='#' else GL_COND_OBJ_FACCESSAT_TRUE='#' GL_COND_OBJ_FACCESSAT_FALSE= fi : if test -z "${GL_COND_OBJ_FACCESSAT_TRUE}" && test -z "${GL_COND_OBJ_FACCESSAT_FALSE}"; then GL_COND_OBJ_FACCESSAT_TRUE='#' GL_COND_OBJ_FACCESSAT_FALSE='#' fi if test -z "$GL_COND_OBJ_FACCESSAT_TRUE"; then : ac_fn_c_check_func "$LINENO" "access" "ac_cv_func_access" if test "x$ac_cv_func_access" = xyes then : printf "%s\n" "#define HAVE_ACCESS 1" >>confdefs.h fi fi printf "%s\n" "#define GNULIB_FACCESSAT 1" >>confdefs.h GL_GNULIB_FACCESSAT=1 printf "%s\n" "#define GNULIB_TEST_FACCESSAT 1" >>confdefs.h if test $ac_cv_have_decl_fchdir = no; then HAVE_DECL_FCHDIR=0 fi if test $HAVE_FCHDIR = 1; then if test $DIR_HAS_FD_MEMBER = 0; then REPLACE_FCHDIR=1 fi fi if test $HAVE_FCHDIR = 0 || test $REPLACE_FCHDIR = 1; then printf "%s\n" "#define REPLACE_FCHDIR 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether open can visit directories" >&5 printf %s "checking whether open can visit directories... " >&6; } if test ${gl_cv_func_open_directory_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_open_directory_works="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_open_directory_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_open_directory_works="guessing yes" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_open_directory_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_open_directory_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> $gl_mda_defines int main (void) { return open(".", O_RDONLY) < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_open_directory_works=yes else case e in #( e) gl_cv_func_open_directory_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_open_directory_works" >&5 printf "%s\n" "$gl_cv_func_open_directory_works" >&6; } case "$gl_cv_func_open_directory_works" in *yes) ;; *) printf "%s\n" "#define REPLACE_OPEN_DIRECTORY 1" >>confdefs.h ;; esac fi if test $HAVE_FCHDIR = 0 || test $REPLACE_FCHDIR = 1; then GL_COND_OBJ_FCHDIR_TRUE= GL_COND_OBJ_FCHDIR_FALSE='#' else GL_COND_OBJ_FCHDIR_TRUE='#' GL_COND_OBJ_FCHDIR_FALSE= fi : if test -z "${GL_COND_OBJ_FCHDIR_TRUE}" && test -z "${GL_COND_OBJ_FCHDIR_FALSE}"; then GL_COND_OBJ_FCHDIR_TRUE='#' GL_COND_OBJ_FCHDIR_FALSE='#' fi if test -z "$GL_COND_OBJ_FCHDIR_TRUE"; then : : fi GL_GNULIB_FCHDIR=1 printf "%s\n" "#define GNULIB_TEST_FCHDIR 1" >>confdefs.h if test $ac_cv_func_fcntl = no; then if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fcntl handles F_DUPFD correctly" >&5 printf %s "checking whether fcntl handles F_DUPFD correctly... " >&6; } if test ${gl_cv_func_fcntl_f_dupfd_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case $host_os in aix* | cygwin* | haiku*) gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> $gl_mda_defines #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif int main (void) { int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; if (errno != EINVAL) result |= 2; if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; if (errno != EINVAL) result |= 8; /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ { int fd; fd = open (".", O_RDONLY); if (fd == -1) result |= 16; else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) result |= 32; close (fd); } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_fcntl_f_dupfd_works=yes else case e in #( e) gl_cv_func_fcntl_f_dupfd_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_works" >&5 printf "%s\n" "$gl_cv_func_fcntl_f_dupfd_works" >&6; } case $gl_cv_func_fcntl_f_dupfd_works in *yes) ;; *) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi printf "%s\n" "#define FCNTL_DUPFD_BUGGY 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fcntl understands F_DUPFD_CLOEXEC" >&5 printf %s "checking whether fcntl understands F_DUPFD_CLOEXEC... " >&6; } if test ${gl_cv_func_fcntl_f_dupfd_cloexec+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on NetBSD. netbsd*) gl_cv_func_fcntl_f_dupfd_cloexec="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_cloexec="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> #include <unistd.h> int main (int argc, char *argv[]) { if (argc == 1) /* parent process */ { if (fcntl (1, F_DUPFD_CLOEXEC, 10) < 0) return 1; return execl ("./conftest", "./conftest", "child", NULL); } else /* child process */ return (fcntl (10, F_GETFL) < 0 ? 0 : 42); } _ACEOF if ac_fn_c_try_run "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __linux__ /* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace it to support the semantics on older kernels that failed with EINVAL. */ choke me #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_fcntl_f_dupfd_cloexec=yes else case e in #( e) gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext else case e in #( e) gl_cv_func_fcntl_f_dupfd_cloexec=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fcntl_f_dupfd_cloexec" >&5 printf "%s\n" "$gl_cv_func_fcntl_f_dupfd_cloexec" >&6; } case "$gl_cv_func_fcntl_f_dupfd_cloexec" in *yes) ;; *) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi ;; esac fi if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi fi if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then GL_COND_OBJ_FCNTL_TRUE= GL_COND_OBJ_FCNTL_FALSE='#' else GL_COND_OBJ_FCNTL_TRUE='#' GL_COND_OBJ_FCNTL_FALSE= fi : if test -z "${GL_COND_OBJ_FCNTL_TRUE}" && test -z "${GL_COND_OBJ_FCNTL_FALSE}"; then GL_COND_OBJ_FCNTL_TRUE='#' GL_COND_OBJ_FCNTL_FALSE='#' fi GL_GNULIB_FCNTL=1 printf "%s\n" "#define GNULIB_TEST_FCNTL 1" >>confdefs.h printf "%s\n" "#define GNULIB_FD_SAFER_FLAG 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mempcpy" >&5 printf %s "checking for mempcpy... " >&6; } if test ${gl_cv_onwards_func_mempcpy+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "mempcpy" "ac_cv_have_decl_mempcpy" "#include <string.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_mempcpy" = xyes then : fi if test $ac_cv_have_decl_mempcpy = yes; then ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy" if test "x$ac_cv_func_mempcpy" = xyes then : fi if test $ac_cv_func_mempcpy = yes; then gl_cv_onwards_func_mempcpy=yes else gl_cv_onwards_func_mempcpy='future OS version' fi else gl_cv_onwards_func_mempcpy='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy" if test "x$ac_cv_func_mempcpy" = xyes then : fi gl_cv_onwards_func_mempcpy=$ac_cv_func_mempcpy ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_mempcpy" >&5 printf "%s\n" "$gl_cv_onwards_func_mempcpy" >&6; } case "$gl_cv_onwards_func_mempcpy" in future*) ac_cv_func_mempcpy=no ;; *) ac_cv_func_mempcpy=$gl_cv_onwards_func_mempcpy ;; esac if test $ac_cv_func_mempcpy = yes; then printf "%s\n" "#define HAVE_MEMPCPY 1" >>confdefs.h fi GL_GENERATE_FLOAT_H=false REPLACE_FLOAT_LDBL=0 case "$host_os" in aix* | beos* | openbsd* | mirbsd* | irix*) GL_GENERATE_FLOAT_H=true ;; freebsd* | dragonfly*) case "$host_cpu" in i[34567]86 ) GL_GENERATE_FLOAT_H=true ;; x86_64 ) # On x86_64 systems, the C compiler may still be generating # 32-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __x86_64__ || defined __amd64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) GL_GENERATE_FLOAT_H=true ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac ;; linux*) case "$host_cpu" in powerpc*) GL_GENERATE_FLOAT_H=true ;; esac ;; esac case "$host_os" in aix* | freebsd* | dragonfly* | linux*) if $GL_GENERATE_FLOAT_H; then REPLACE_FLOAT_LDBL=1 fi ;; esac REPLACE_ITOLD=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether conversion from 'int' to 'long double' works" >&5 printf %s "checking whether conversion from 'int' to 'long double' works... " >&6; } if test ${gl_cv_func_itold_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host" in sparc*-*-linux*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_itold_works="guessing no" else case e in #( e) gl_cv_func_itold_works="guessing yes" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_itold_works="guessing yes" ;; *) gl_cv_func_itold_works="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i = -1; volatile long double ld; int main () { ld += i * 1.0L; if (ld > 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_itold_works=yes else case e in #( e) gl_cv_func_itold_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_itold_works" >&5 printf "%s\n" "$gl_cv_func_itold_works" >&6; } case "$gl_cv_func_itold_works" in *no) REPLACE_ITOLD=1 GL_GENERATE_FLOAT_H=true ;; esac if $GL_GENERATE_FLOAT_H; then if test $gl_cv_have_include_next = yes; then gl_cv_next_float_h='<'float.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <float.h>" >&5 printf %s "checking absolute name of <float.h>... " >&6; } if test ${gl_cv_next_float_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'float.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_float_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_float_h gl_cv_next_float_h='"'$gl_header'"' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_float_h" >&5 printf "%s\n" "$gl_cv_next_float_h" >&6; } fi NEXT_FLOAT_H=$gl_cv_next_float_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'float.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_float_h fi NEXT_AS_FIRST_DIRECTIVE_FLOAT_H=$gl_next_as_first_directive fi case "$GL_GENERATE_FLOAT_H" in false) FLOAT_H='' ;; true) if test -z "$FLOAT_H"; then FLOAT_H="${gl_source_base_prefix}float.h" fi ;; *) echo "*** GL_GENERATE_FLOAT_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_FLOAT_H; then GL_GENERATE_FLOAT_H_TRUE= GL_GENERATE_FLOAT_H_FALSE='#' else GL_GENERATE_FLOAT_H_TRUE='#' GL_GENERATE_FLOAT_H_FALSE= fi : if test -z "${GL_GENERATE_FLOAT_H_TRUE}" && test -z "${GL_GENERATE_FLOAT_H_FALSE}"; then GL_GENERATE_FLOAT_H_TRUE='#' GL_GENERATE_FLOAT_H_FALSE='#' fi if test $REPLACE_FLOAT_LDBL = 1; then GL_COND_OBJ_FLOAT_TRUE= GL_COND_OBJ_FLOAT_FALSE='#' else GL_COND_OBJ_FLOAT_TRUE='#' GL_COND_OBJ_FLOAT_FALSE= fi : if test -z "${GL_COND_OBJ_FLOAT_TRUE}" && test -z "${GL_COND_OBJ_FLOAT_FALSE}"; then GL_COND_OBJ_FLOAT_TRUE='#' GL_COND_OBJ_FLOAT_FALSE='#' fi if test $REPLACE_ITOLD = 1; then GL_COND_OBJ_ITOLD_TRUE= GL_COND_OBJ_ITOLD_FALSE='#' else GL_COND_OBJ_ITOLD_TRUE='#' GL_COND_OBJ_ITOLD_FALSE= fi : if test -z "${GL_COND_OBJ_ITOLD_TRUE}" && test -z "${GL_COND_OBJ_ITOLD_FALSE}"; then GL_COND_OBJ_ITOLD_TRUE='#' GL_COND_OBJ_ITOLD_FALSE='#' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether free is known to preserve errno" >&5 printf %s "checking whether free is known to preserve errno... " >&6; } if test ${gl_cv_func_free_preserves_errno+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { #if 2 < __GLIBC__ + (33 <= __GLIBC_MINOR__) #elif defined __OpenBSD__ #elif defined __sun #else #error "'free' is not known to preserve errno" #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_free_preserves_errno=yes else case e in #( e) gl_cv_func_free_preserves_errno=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_free_preserves_errno" >&5 printf "%s\n" "$gl_cv_func_free_preserves_errno" >&6; } case $gl_cv_func_free_preserves_errno in *yes) printf "%s\n" "#define HAVE_FREE_POSIX 1" >>confdefs.h ;; *) REPLACE_FREE=1 ;; esac if test $REPLACE_FREE = 1; then GL_COND_OBJ_FREE_TRUE= GL_COND_OBJ_FREE_FALSE='#' else GL_COND_OBJ_FREE_TRUE='#' GL_COND_OBJ_FREE_FALSE= fi : if test -z "${GL_COND_OBJ_FREE_TRUE}" && test -z "${GL_COND_OBJ_FREE_FALSE}"; then GL_COND_OBJ_FREE_TRUE='#' GL_COND_OBJ_FREE_FALSE='#' fi if test -z "$GL_COND_OBJ_FREE_TRUE"; then : : fi GL_GNULIB_FREE_POSIX=1 printf "%s\n" "#define GNULIB_TEST_FREE_POSIX 1" >>confdefs.h case "$host_os" in darwin* | mingw* | windows* | solaris*) REPLACE_FSTAT=1 ;; esac if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then case "$gl_cv_func_open_directory_works" in *yes) ;; *) REPLACE_FSTAT=1 ;; esac fi if test $REPLACE_FSTAT = 1; then GL_COND_OBJ_FSTAT_TRUE= GL_COND_OBJ_FSTAT_FALSE='#' else GL_COND_OBJ_FSTAT_TRUE='#' GL_COND_OBJ_FSTAT_FALSE= fi : if test -z "${GL_COND_OBJ_FSTAT_TRUE}" && test -z "${GL_COND_OBJ_FSTAT_FALSE}"; then GL_COND_OBJ_FSTAT_TRUE='#' GL_COND_OBJ_FSTAT_FALSE='#' fi if test -z "$GL_COND_OBJ_FSTAT_TRUE"; then : case "$host_os" in mingw* | windows*) gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext" ;; esac : fi GL_GNULIB_FSTAT=1 printf "%s\n" "#define GNULIB_TEST_FSTAT 1" >>confdefs.h if test $ac_cv_func_fstatat = no; then HAVE_FSTATAT=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fstatat (..., 0) works" >&5 printf %s "checking whether fstatat (..., 0) works... " >&6; } if test ${gl_cv_func_fstatat_zero_flag+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in aix*) gl_cv_func_fstatat_zero_flag="guessing no";; *) gl_cv_func_fstatat_zero_flag="guessing yes";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> #include <sys/stat.h> int main (void) { struct stat a; return fstatat (AT_FDCWD, ".", &a, 0) != 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_fstatat_zero_flag=yes else case e in #( e) gl_cv_func_fstatat_zero_flag=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fstatat_zero_flag" >&5 printf "%s\n" "$gl_cv_func_fstatat_zero_flag" >&6; } case $gl_cv_func_fstatat_zero_flag+$gl_cv_func_lstat_dereferences_slashed_symlink in *yes+*yes) ;; *) REPLACE_FSTATAT=1 ;; esac case $host_os in darwin* | solaris*) REPLACE_FSTATAT=1 ;; esac case $REPLACE_FSTATAT,$gl_cv_func_fstatat_zero_flag in 1,*yes) printf "%s\n" "#define HAVE_WORKING_FSTATAT_ZERO_FLAG 1" >>confdefs.h ;; esac fi if test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1; then GL_COND_OBJ_FSTATAT_TRUE= GL_COND_OBJ_FSTATAT_FALSE='#' else GL_COND_OBJ_FSTATAT_TRUE='#' GL_COND_OBJ_FSTATAT_FALSE= fi : if test -z "${GL_COND_OBJ_FSTATAT_TRUE}" && test -z "${GL_COND_OBJ_FSTATAT_FALSE}"; then GL_COND_OBJ_FSTATAT_TRUE='#' GL_COND_OBJ_FSTATAT_FALSE='#' fi GL_GNULIB_FSTATAT=1 printf "%s\n" "#define GNULIB_TEST_FSTATAT 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether __func__ is available" >&5 printf %s "checking whether __func__ is available... " >&6; } if test ${gl_cv_var_func+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { const char *str = __func__; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_var_func=yes else case e in #( e) gl_cv_var_func=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_var_func" >&5 printf "%s\n" "$gl_cv_var_func" >&6; } if test "$gl_cv_var_func" != yes; then printf "%s\n" "#define __func__ \"<unknown function>\"" >>confdefs.h fi case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_posix_signature in *yes,yes) ;; *) REPLACE_GETCWD=1 ;; esac if test $REPLACE_GETCWD = 1; then GL_COND_OBJ_GETCWD_LGPL_TRUE= GL_COND_OBJ_GETCWD_LGPL_FALSE='#' else GL_COND_OBJ_GETCWD_LGPL_TRUE='#' GL_COND_OBJ_GETCWD_LGPL_FALSE= fi : if test -z "${GL_COND_OBJ_GETCWD_LGPL_TRUE}" && test -z "${GL_COND_OBJ_GETCWD_LGPL_FALSE}"; then GL_COND_OBJ_GETCWD_LGPL_TRUE='#' GL_COND_OBJ_GETCWD_LGPL_FALSE='#' fi GL_GNULIB_GETCWD=1 printf "%s\n" "#define GNULIB_TEST_GETCWD 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getdelim" >&5 printf %s "checking for getdelim... " >&6; } if test ${gl_cv_onwards_func_getdelim+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "getdelim" "ac_cv_have_decl_getdelim" "#include <stdio.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getdelim" = xyes then : fi if test $ac_cv_have_decl_getdelim = yes; then ac_fn_c_check_func "$LINENO" "getdelim" "ac_cv_func_getdelim" if test "x$ac_cv_func_getdelim" = xyes then : fi if test $ac_cv_func_getdelim = yes; then gl_cv_onwards_func_getdelim=yes else gl_cv_onwards_func_getdelim='future OS version' fi else gl_cv_onwards_func_getdelim='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "getdelim" "ac_cv_func_getdelim" if test "x$ac_cv_func_getdelim" = xyes then : fi gl_cv_onwards_func_getdelim=$ac_cv_func_getdelim ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_getdelim" >&5 printf "%s\n" "$gl_cv_onwards_func_getdelim" >&6; } case "$gl_cv_onwards_func_getdelim" in future*) ac_cv_func_getdelim=no ;; *) ac_cv_func_getdelim=$gl_cv_onwards_func_getdelim ;; esac if test $ac_cv_func_getdelim = yes; then printf "%s\n" "#define HAVE_GETDELIM 1" >>confdefs.h fi if test $ac_cv_func_getdelim = yes; then HAVE_GETDELIM=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working getdelim function" >&5 printf %s "checking for working getdelim function... " >&6; } if test ${gl_cv_func_working_getdelim+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in darwin*) gl_cv_func_working_getdelim=no ;; *) echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Lucky GNU user" >/dev/null 2>&1 then : gl_cv_func_working_getdelim="guessing yes" else case e in #( e) case "$host_os" in *-musl* | midipix*) gl_cv_func_working_getdelim="guessing yes" ;; *) gl_cv_func_working_getdelim="$gl_cross_guess_normal" ;; esac ;; esac fi rm -rf conftest* else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getdelim (&line, &siz, '\n', in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getdelim (&line, &siz, '\n', in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_working_getdelim=yes else case e in #( e) gl_cv_func_working_getdelim=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_getdelim" >&5 printf "%s\n" "$gl_cv_func_working_getdelim" >&6; } case "$gl_cv_func_working_getdelim" in *yes) ;; *) REPLACE_GETDELIM=1 ;; esac else HAVE_GETDELIM=0 case "$gl_cv_onwards_func_getdelim" in future*) REPLACE_GETDELIM=1 ;; esac fi if test $ac_cv_have_decl_getdelim = no; then HAVE_DECL_GETDELIM=0 fi if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then GL_COND_OBJ_GETDELIM_TRUE= GL_COND_OBJ_GETDELIM_FALSE='#' else GL_COND_OBJ_GETDELIM_TRUE='#' GL_COND_OBJ_GETDELIM_FALSE= fi : if test -z "${GL_COND_OBJ_GETDELIM_TRUE}" && test -z "${GL_COND_OBJ_GETDELIM_FALSE}"; then GL_COND_OBJ_GETDELIM_TRUE='#' GL_COND_OBJ_GETDELIM_FALSE='#' fi if test -z "$GL_COND_OBJ_GETDELIM_TRUE"; then : ac_fn_c_check_func "$LINENO" "flockfile" "ac_cv_func_flockfile" if test "x$ac_cv_func_flockfile" = xyes then : printf "%s\n" "#define HAVE_FLOCKFILE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "funlockfile" "ac_cv_func_funlockfile" if test "x$ac_cv_func_funlockfile" = xyes then : printf "%s\n" "#define HAVE_FUNLOCKFILE 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getc_unlocked" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl" >>confdefs.h fi GL_GNULIB_GETDELIM=1 printf "%s\n" "#define GNULIB_TEST_GETDELIM 1" >>confdefs.h if test $ac_cv_func_getdtablesize = yes && test $ac_cv_have_decl_getdtablesize = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getdtablesize works" >&5 printf %s "checking whether getdtablesize works... " >&6; } if test ${gl_cv_func_getdtablesize_works+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; *) if test "$cross_compiling" = yes then : case "$host_os" in cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows gl_cv_func_getdtablesize_works="guessing no" ;; *) gl_cv_func_getdtablesize_works="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> $gl_mda_defines int main (void) { int size = getdtablesize(); if (dup2 (0, getdtablesize()) != -1) return 1; if (size != getdtablesize()) return 2; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getdtablesize_works=yes else case e in #( e) gl_cv_func_getdtablesize_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getdtablesize_works" >&5 printf "%s\n" "$gl_cv_func_getdtablesize_works" >&6; } case "$gl_cv_func_getdtablesize_works" in *yes | "no (limitation)") ;; *) REPLACE_GETDTABLESIZE=1 ;; esac else HAVE_GETDTABLESIZE=0 fi if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then GL_COND_OBJ_GETDTABLESIZE_TRUE= GL_COND_OBJ_GETDTABLESIZE_FALSE='#' else GL_COND_OBJ_GETDTABLESIZE_TRUE='#' GL_COND_OBJ_GETDTABLESIZE_FALSE= fi : if test -z "${GL_COND_OBJ_GETDTABLESIZE_TRUE}" && test -z "${GL_COND_OBJ_GETDTABLESIZE_FALSE}"; then GL_COND_OBJ_GETDTABLESIZE_TRUE='#' GL_COND_OBJ_GETDTABLESIZE_FALSE='#' fi if test -z "$GL_COND_OBJ_GETDTABLESIZE_TRUE"; then : : fi GL_GNULIB_GETDTABLESIZE=1 printf "%s\n" "#define GNULIB_TEST_GETDTABLESIZE 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups" if test "x$ac_cv_func_getgroups" = xyes then : fi # If we don't yet have getgroups, see if it's in -lbsd. # This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1. gl_saved_LIBS=$LIBS if test $ac_cv_func_getgroups = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getgroups in -lbsd" >&5 printf %s "checking for getgroups in -lbsd... " >&6; } if test ${ac_cv_lib_bsd_getgroups+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char getgroups (void); int main (void) { return getgroups (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_bsd_getgroups=yes else case e in #( e) ac_cv_lib_bsd_getgroups=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_getgroups" >&5 printf "%s\n" "$ac_cv_lib_bsd_getgroups" >&6; } if test "x$ac_cv_lib_bsd_getgroups" = xyes then : GETGROUPS_LIB=-lbsd fi fi # Run the program to test the functionality of the system-supplied # getgroups function only if there is such a function. if test $ac_cv_func_getgroups = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working getgroups" >&5 printf %s "checking for working getgroups... " >&6; } if test ${ac_cv_func_getgroups_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_getgroups_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) ac_cv_func_getgroups_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_getgroups_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { /* On NeXTstep 3.2, getgroups (0, 0) always fails. */ return getgroups (0, 0) == -1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_getgroups_works=yes else case e in #( e) ac_cv_func_getgroups_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getgroups_works" >&5 printf "%s\n" "$ac_cv_func_getgroups_works" >&6; } else ac_cv_func_getgroups_works=no fi case "$ac_cv_func_getgroups_works" in *yes) printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h ;; esac LIBS=$gl_saved_LIBS if test $ac_cv_func_getgroups != yes; then HAVE_GETGROUPS=0 else if test "$ac_cv_type_getgroups" != gid_t \ || { case "$ac_cv_func_getgroups_works" in *yes) false;; *) true;; esac }; then REPLACE_GETGROUPS=1 printf "%s\n" "#define GETGROUPS_ZERO_BUG 1" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getgroups handles negative values" >&5 printf %s "checking whether getgroups handles negative values... " >&6; } if test ${gl_cv_func_getgroups_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_getgroups_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_getgroups_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_getgroups_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { int size = getgroups (0, 0); gid_t *list = malloc (size * sizeof *list); int result = getgroups (-1, list) != -1; free (list); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getgroups_works=yes else case e in #( e) gl_cv_func_getgroups_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getgroups_works" >&5 printf "%s\n" "$gl_cv_func_getgroups_works" >&6; } case "$gl_cv_func_getgroups_works" in *yes) ;; *) REPLACE_GETGROUPS=1 ;; esac fi fi test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS" if test $HAVE_GETGROUPS = 0 || test $REPLACE_GETGROUPS = 1; then GL_COND_OBJ_GETGROUPS_TRUE= GL_COND_OBJ_GETGROUPS_FALSE='#' else GL_COND_OBJ_GETGROUPS_TRUE='#' GL_COND_OBJ_GETGROUPS_FALSE= fi : if test -z "${GL_COND_OBJ_GETGROUPS_TRUE}" && test -z "${GL_COND_OBJ_GETGROUPS_FALSE}"; then GL_COND_OBJ_GETGROUPS_TRUE='#' GL_COND_OBJ_GETGROUPS_FALSE='#' fi GL_GNULIB_GETGROUPS=1 printf "%s\n" "#define GNULIB_TEST_GETGROUPS 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getline" >&5 printf %s "checking for getline... " >&6; } if test ${gl_cv_onwards_func_getline+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "getline" "ac_cv_have_decl_getline" "#include <stdio.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getline" = xyes then : fi if test $ac_cv_have_decl_getline = yes; then ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline" if test "x$ac_cv_func_getline" = xyes then : fi if test $ac_cv_func_getline = yes; then gl_cv_onwards_func_getline=yes else gl_cv_onwards_func_getline='future OS version' fi else gl_cv_onwards_func_getline='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline" if test "x$ac_cv_func_getline" = xyes then : fi gl_cv_onwards_func_getline=$ac_cv_func_getline ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_getline" >&5 printf "%s\n" "$gl_cv_onwards_func_getline" >&6; } case "$gl_cv_onwards_func_getline" in future*) ac_cv_func_getline=no ;; *) ac_cv_func_getline=$gl_cv_onwards_func_getline ;; esac if test $ac_cv_func_getline = yes; then printf "%s\n" "#define HAVE_GETLINE 1" >>confdefs.h fi if test $ac_cv_func_getline = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working getline function" >&5 printf %s "checking for working getline function... " >&6; } if test ${am_cv_func_working_getline+y} then : printf %s "(cached) " >&6 else case e in #( e) echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Lucky GNU user" >/dev/null 2>&1 then : am_cv_func_working_getline="guessing yes" else case e in #( e) case "$host_os" in *-musl* | midipix*) am_cv_func_working_getline="guessing yes" ;; *) am_cv_func_working_getline="$gl_cross_guess_normal" ;; esac ;; esac fi rm -rf conftest* else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getline (&line, &siz, in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getline (&line, &siz, in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : am_cv_func_working_getline=yes else case e in #( e) am_cv_func_working_getline=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_working_getline" >&5 printf "%s\n" "$am_cv_func_working_getline" >&6; } else am_cv_func_working_getline=no case "$gl_cv_onwards_func_getline" in future*) REPLACE_GETLINE=1 ;; esac fi if test $ac_cv_have_decl_getline = no; then HAVE_DECL_GETLINE=0 fi case "$am_cv_func_working_getline" in *yes) ;; *) REPLACE_GETLINE=1 ;; esac if test $REPLACE_GETLINE = 1; then GL_COND_OBJ_GETLINE_TRUE= GL_COND_OBJ_GETLINE_FALSE='#' else GL_COND_OBJ_GETLINE_TRUE='#' GL_COND_OBJ_GETLINE_FALSE= fi : if test -z "${GL_COND_OBJ_GETLINE_TRUE}" && test -z "${GL_COND_OBJ_GETLINE_FALSE}"; then GL_COND_OBJ_GETLINE_TRUE='#' GL_COND_OBJ_GETLINE_FALSE='#' fi if test -z "$GL_COND_OBJ_GETLINE_TRUE"; then : : fi GL_GNULIB_GETLINE=1 printf "%s\n" "#define GNULIB_TEST_GETLINE 1" >>confdefs.h REPLACE_GETOPT=1 GL_GENERATE_GETOPT_H=false GL_GENERATE_GETOPT_CDEFS_H=false if test $REPLACE_GETOPT = 1; then if test $ac_cv_header_sys_cdefs_h = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi printf "%s\n" "#define __GETOPT_PREFIX rpl_" >>confdefs.h GL_GENERATE_GETOPT_H=true GL_GENERATE_GETOPT_CDEFS_H=true fi case "$GL_GENERATE_GETOPT_H" in false) GETOPT_H='' ;; true) if test -z "$GETOPT_H"; then GETOPT_H="${gl_source_base_prefix}getopt.h" fi ;; *) echo "*** GL_GENERATE_GETOPT_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_GETOPT_H; then GL_GENERATE_GETOPT_H_TRUE= GL_GENERATE_GETOPT_H_FALSE='#' else GL_GENERATE_GETOPT_H_TRUE='#' GL_GENERATE_GETOPT_H_FALSE= fi : if test -z "${GL_GENERATE_GETOPT_H_TRUE}" && test -z "${GL_GENERATE_GETOPT_H_FALSE}"; then GL_GENERATE_GETOPT_H_TRUE='#' GL_GENERATE_GETOPT_H_FALSE='#' fi case "$GL_GENERATE_GETOPT_CDEFS_H" in false) GETOPT_CDEFS_H='' ;; true) if test -z "$GETOPT_CDEFS_H"; then GETOPT_CDEFS_H="${gl_source_base_prefix}getopt-cdefs.h" fi ;; *) echo "*** GL_GENERATE_GETOPT_CDEFS_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_GETOPT_CDEFS_H; then GL_GENERATE_GETOPT_CDEFS_H_TRUE= GL_GENERATE_GETOPT_CDEFS_H_FALSE='#' else GL_GENERATE_GETOPT_CDEFS_H_TRUE='#' GL_GENERATE_GETOPT_CDEFS_H_FALSE= fi : if test -z "${GL_GENERATE_GETOPT_CDEFS_H_TRUE}" && test -z "${GL_GENERATE_GETOPT_CDEFS_H_FALSE}"; then GL_GENERATE_GETOPT_CDEFS_H_TRUE='#' GL_GENERATE_GETOPT_CDEFS_H_FALSE='#' fi if test $REPLACE_GETOPT = 1; then GL_COND_OBJ_GETOPT_TRUE= GL_COND_OBJ_GETOPT_FALSE='#' else GL_COND_OBJ_GETOPT_TRUE='#' GL_COND_OBJ_GETOPT_FALSE= fi : if test -z "${GL_COND_OBJ_GETOPT_TRUE}" && test -z "${GL_COND_OBJ_GETOPT_FALSE}"; then GL_COND_OBJ_GETOPT_TRUE='#' GL_COND_OBJ_GETOPT_FALSE='#' fi if test -z "$GL_COND_OBJ_GETOPT_TRUE"; then : GL_GNULIB_UNISTD_H_GETOPT=1 fi GL_GNULIB_GETOPT_POSIX=1 printf "%s\n" "#define GNULIB_TEST_GETOPT_POSIX 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getprogname" >&5 printf %s "checking for getprogname... " >&6; } if test ${gl_cv_onwards_func_getprogname+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "getprogname" "ac_cv_have_decl_getprogname" "#include <stdlib.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getprogname" = xyes then : fi if test $ac_cv_have_decl_getprogname = yes; then ac_fn_c_check_func "$LINENO" "getprogname" "ac_cv_func_getprogname" if test "x$ac_cv_func_getprogname" = xyes then : fi if test $ac_cv_func_getprogname = yes; then gl_cv_onwards_func_getprogname=yes else gl_cv_onwards_func_getprogname='future OS version' fi else gl_cv_onwards_func_getprogname='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "getprogname" "ac_cv_func_getprogname" if test "x$ac_cv_func_getprogname" = xyes then : fi gl_cv_onwards_func_getprogname=$ac_cv_func_getprogname ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_getprogname" >&5 printf "%s\n" "$gl_cv_onwards_func_getprogname" >&6; } case "$gl_cv_onwards_func_getprogname" in future*) ac_cv_func_getprogname=no ;; *) ac_cv_func_getprogname=$gl_cv_onwards_func_getprogname ;; esac if test $ac_cv_func_getprogname = yes; then printf "%s\n" "#define HAVE_GETPROGNAME 1" >>confdefs.h fi if test $ac_cv_func_getprogname = no; then HAVE_GETPROGNAME=0 case "$gl_cv_onwards_func_getprogname" in future*) REPLACE_GETPROGNAME=1 ;; esac fi ac_fn_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include <errno.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_program_invocation_name" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : else case e in #( e) HAVE_DECL_PROGRAM_INVOCATION_NAME=0 ;; esac fi if test $HAVE_GETPROGNAME = 0 || test $REPLACE_GETPROGNAME = 1; then GL_COND_OBJ_GETPROGNAME_TRUE= GL_COND_OBJ_GETPROGNAME_FALSE='#' else GL_COND_OBJ_GETPROGNAME_TRUE='#' GL_COND_OBJ_GETPROGNAME_FALSE= fi : if test -z "${GL_COND_OBJ_GETPROGNAME_TRUE}" && test -z "${GL_COND_OBJ_GETPROGNAME_FALSE}"; then GL_COND_OBJ_GETPROGNAME_TRUE='#' GL_COND_OBJ_GETPROGNAME_FALSE='#' fi if test -z "$GL_COND_OBJ_GETPROGNAME_TRUE"; then : ac_found=0 ac_fn_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include <errno.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_program_invocation_name" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : ac_found=1 fi ac_fn_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include <errno.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : ac_found=1 fi ac_fn_check_decl "$LINENO" "__argv" "ac_cv_have_decl___argv" "#include <stdlib.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl___argv" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL___ARGV $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : ac_found=1 fi # Incur the cost of this test only if none of the above worked. if test $ac_found = 0; then # On OpenBSD 5.1, using the global __progname variable appears to be # the only way to implement getprogname. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether __progname is defined in default libraries" >&5 printf %s "checking whether __progname is defined in default libraries... " >&6; } if test ${gl_cv_var___progname+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_cv_var___progname= cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern char *__progname; int main (void) { return *__progname; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_var___progname=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_var___progname" >&5 printf "%s\n" "$gl_cv_var___progname" >&6; } if test "$gl_cv_var___progname" = yes; then printf "%s\n" "#define HAVE_VAR___PROGNAME 1" >>confdefs.h fi fi fi GL_GNULIB_GETPROGNAME=1 printf "%s\n" "#define GNULIB_TEST_GETPROGNAME 1" >>confdefs.h gl_gettimeofday_timezone=void if test $ac_cv_func_gettimeofday != yes; then HAVE_GETTIMEOFDAY=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gettimeofday with POSIX signature" >&5 printf %s "checking for gettimeofday with POSIX signature... " >&6; } if test ${gl_cv_func_gettimeofday_posix_signature+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/time.h> struct timeval c; int gettimeofday (struct timeval *restrict, void *restrict); int main (void) { /* glibc uses struct timezone * rather than the POSIX void * if _GNU_SOURCE is defined. However, since the only portable use of gettimeofday uses NULL as the second parameter, and since the glibc definition is actually more typesafe, it is not worth wrapping this to get a compliant signature. */ int (*f) (struct timeval *restrict, void *restrict) = gettimeofday; int x = f (&c, 0); return !(x | c.tv_sec | c.tv_usec); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_gettimeofday_posix_signature=yes else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/time.h> int gettimeofday (struct timeval *restrict, struct timezone *restrict); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_gettimeofday_posix_signature=almost else case e in #( e) gl_cv_func_gettimeofday_posix_signature=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_gettimeofday_posix_signature" >&5 printf "%s\n" "$gl_cv_func_gettimeofday_posix_signature" >&6; } if test $gl_cv_func_gettimeofday_posix_signature = almost; then gl_gettimeofday_timezone='struct timezone' elif test $gl_cv_func_gettimeofday_posix_signature != yes; then REPLACE_GETTIMEOFDAY=1 fi if test $REPLACE_STRUCT_TIMEVAL = 1; then REPLACE_GETTIMEOFDAY=1 fi case "$host_os" in mingw* | windows*) REPLACE_GETTIMEOFDAY=1 ;; esac fi printf "%s\n" "#define GETTIMEOFDAY_TIMEZONE $gl_gettimeofday_timezone" >>confdefs.h if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then GL_COND_OBJ_GETTIMEOFDAY_TRUE= GL_COND_OBJ_GETTIMEOFDAY_FALSE='#' else GL_COND_OBJ_GETTIMEOFDAY_TRUE='#' GL_COND_OBJ_GETTIMEOFDAY_FALSE= fi : if test -z "${GL_COND_OBJ_GETTIMEOFDAY_TRUE}" && test -z "${GL_COND_OBJ_GETTIMEOFDAY_FALSE}"; then GL_COND_OBJ_GETTIMEOFDAY_TRUE='#' GL_COND_OBJ_GETTIMEOFDAY_FALSE='#' fi if test -z "$GL_COND_OBJ_GETTIMEOFDAY_TRUE"; then : : fi GL_GNULIB_GETTIMEOFDAY=1 printf "%s\n" "#define GNULIB_TEST_GETTIMEOFDAY 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "group_member" "ac_cv_func_group_member" if test "x$ac_cv_func_group_member" = xyes then : else case e in #( e) HAVE_GROUP_MEMBER=0 ;; esac fi if test $HAVE_GROUP_MEMBER = 0; then GL_COND_OBJ_GROUP_MEMBER_TRUE= GL_COND_OBJ_GROUP_MEMBER_FALSE='#' else GL_COND_OBJ_GROUP_MEMBER_TRUE='#' GL_COND_OBJ_GROUP_MEMBER_FALSE= fi : if test -z "${GL_COND_OBJ_GROUP_MEMBER_TRUE}" && test -z "${GL_COND_OBJ_GROUP_MEMBER_FALSE}"; then GL_COND_OBJ_GROUP_MEMBER_TRUE='#' GL_COND_OBJ_GROUP_MEMBER_FALSE='#' fi if test -z "$GL_COND_OBJ_GROUP_MEMBER_TRUE"; then : fi GL_GNULIB_GROUP_MEMBER=1 printf "%s\n" "#define GNULIB_TEST_GROUP_MEMBER 1" >>confdefs.h HARD_LOCALE_LIB="$SETLOCALE_NULL_LIB" LIB_HARD_LOCALE="$HARD_LOCALE_LIB" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether isnan(double) can be used without linking with libm" >&5 printf %s "checking whether isnan(double) can be used without linking with libm... " >&6; } if test ${gl_cv_func_isnand_no_libm+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) #else # undef isnand # define isnand(x) isnan ((double)(x)) #endif double x; int main (void) { return isnand (x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_isnand_no_libm=yes else case e in #( e) gl_cv_func_isnand_no_libm=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnand_no_libm" >&5 printf "%s\n" "$gl_cv_func_isnand_no_libm" >&6; } gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm if test $gl_cv_func_isnand_no_libm = yes; then printf "%s\n" "#define HAVE_ISNAND_IN_LIBC 1" >>confdefs.h fi if test $gl_func_isnand_no_libm != yes; then gl_LIBOBJS="$gl_LIBOBJS isnand.$ac_objext" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) can be used without linking with libm" >&5 printf %s "checking whether isnan(float) can be used without linking with libm... " >&6; } if test ${gl_cv_func_isnanf_no_libm+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif float x; int main (void) { return isnanf (x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_isnanf_no_libm=yes else case e in #( e) gl_cv_func_isnanf_no_libm=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_no_libm" >&5 printf "%s\n" "$gl_cv_func_isnanf_no_libm" >&6; } if test $gl_cv_func_isnanf_no_libm = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) works" >&5 printf %s "checking whether isnan(float) works... " >&6; } if test ${gl_cv_func_isnanf_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;; mingw* | windows*) # Guess yes on mingw, no on MSVC. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __MINGW32__ Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Known" >/dev/null 2>&1 then : gl_cv_func_isnanf_works="guessing yes" else case e in #( e) gl_cv_func_isnanf_works="guessing no" ;; esac fi rm -rf conftest* ;; *) gl_cv_func_isnanf_works="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif /* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ #ifdef __DECC static float NaN () { static float zero = 0.0f; return zero / zero; } #else # define NaN() (0.0f / 0.0f) #endif #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; float value; } memory_float; int main() { int result = 0; if (isnanf (1.0f / 0.0f)) result |= 1; if (!isnanf (NaN ())) result |= 2; #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* The isnanf function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit. */ if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) { memory_float m; m.value = NaN (); /* Set the bits below the exponent to 01111...111. */ m.word[0] &= -1U << FLT_EXPBIT0_BIT; m.word[0] |= (1U << (FLT_EXPBIT0_BIT - 1)) - 1; if (!isnanf (m.value)) result |= 4; } #endif return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_isnanf_works=yes else case e in #( e) gl_cv_func_isnanf_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_works" >&5 printf "%s\n" "$gl_cv_func_isnanf_works" >&6; } fi if test $gl_cv_func_isnanf_no_libm = yes \ && { case "$gl_cv_func_isnanf_works" in *yes) true;; *) false;; esac }; then gl_func_isnanf_no_libm=yes printf "%s\n" "#define HAVE_ISNANF_IN_LIBC 1" >>confdefs.h else gl_func_isnanf_no_libm=no fi if test $gl_func_isnanf_no_libm != yes; then gl_LIBOBJS="$gl_LIBOBJS isnanf.$ac_objext" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether isnan(long double) can be used without linking with libm" >&5 printf %s "checking whether isnan(long double) can be used without linking with libm... " >&6; } if test ${gl_cv_func_isnanl_no_libm+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif long double x; int main (void) { return isnanl (x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_isnanl_no_libm=yes else case e in #( e) gl_cv_func_isnanl_no_libm=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_no_libm" >&5 printf "%s\n" "$gl_cv_func_isnanl_no_libm" >&6; } gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm if test $gl_func_isnanl_no_libm = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether isnanl works" >&5 printf %s "checking whether isnanl works... " >&6; } if test ${gl_cv_func_isnanl_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in mingw* | windows*) # Guess yes on mingw, no on MSVC. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __MINGW32__ Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Known" >/dev/null 2>&1 then : gl_cv_func_isnanl_works="guessing yes" else case e in #( e) gl_cv_func_isnanl_works="guessing no" ;; esac fi rm -rf conftest* ;; *) gl_cv_func_isnanl_works="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <limits.h> #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; long double value; } memory_long_double; /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the runtime type conversion. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif int main () { int result = 0; if (!isnanl (NaNl ())) result |= 1; { memory_long_double m; unsigned int i; /* The isnanl function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit (since the exponent never extends to bit 31). */ m.value = NaNl (); m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); for (i = 0; i < NWORDS; i++) m.word[i] |= 1; if (!isnanl (m.value)) result |= 1; } #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } { /* Signalling NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } /* isnanl should return something even for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 4; } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 8; } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 16; } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 32; } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 64; } #endif return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_isnanl_works=yes else case e in #( e) gl_cv_func_isnanl_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_works" >&5 printf "%s\n" "$gl_cv_func_isnanl_works" >&6; } case "$gl_cv_func_isnanl_works" in *yes) ;; *) gl_func_isnanl_no_libm=no ;; esac fi if test $gl_func_isnanl_no_libm = yes; then printf "%s\n" "#define HAVE_ISNANL_IN_LIBC 1" >>confdefs.h fi if test $gl_func_isnanl_no_libm != yes; then gl_LIBOBJS="$gl_LIBOBJS isnanl.$ac_objext" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iswblank" >&5 printf %s "checking for iswblank... " >&6; } if test ${gl_cv_onwards_func_iswblank+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "iswblank" "ac_cv_have_decl_iswblank" "#include <wctype.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_iswblank" = xyes then : fi if test $ac_cv_have_decl_iswblank = yes; then ac_fn_c_check_func "$LINENO" "iswblank" "ac_cv_func_iswblank" if test "x$ac_cv_func_iswblank" = xyes then : fi if test $ac_cv_func_iswblank = yes; then gl_cv_onwards_func_iswblank=yes else gl_cv_onwards_func_iswblank='future OS version' fi else gl_cv_onwards_func_iswblank='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "iswblank" "ac_cv_func_iswblank" if test "x$ac_cv_func_iswblank" = xyes then : fi gl_cv_onwards_func_iswblank=$ac_cv_func_iswblank ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_iswblank" >&5 printf "%s\n" "$gl_cv_onwards_func_iswblank" >&6; } case "$gl_cv_onwards_func_iswblank" in future*) ac_cv_func_iswblank=no ;; *) ac_cv_func_iswblank=$gl_cv_onwards_func_iswblank ;; esac if test $ac_cv_func_iswblank = yes; then printf "%s\n" "#define HAVE_ISWBLANK 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "iswblank" "ac_cv_have_decl_iswblank" " #include <wchar.h> #include <wctype.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_iswblank" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_ISWBLANK $ac_have_decl" >>confdefs.h if test $ac_cv_func_iswblank = no; then HAVE_ISWBLANK=0 if test $ac_cv_have_decl_iswblank = yes \ || case "$gl_cv_onwards_func_iswblank" in \ future*) true ;; \ *) false ;; \ esac; then REPLACE_ISWBLANK=1 fi fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then : else if test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; then : fi fi if ! { test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; } && { test $HAVE_ISWBLANK = 0 || test $REPLACE_ISWBLANK = 1; }; then GL_COND_OBJ_ISWBLANK_TRUE= GL_COND_OBJ_ISWBLANK_FALSE='#' else GL_COND_OBJ_ISWBLANK_TRUE='#' GL_COND_OBJ_ISWBLANK_FALSE= fi : if test -z "${GL_COND_OBJ_ISWBLANK_TRUE}" && test -z "${GL_COND_OBJ_ISWBLANK_FALSE}"; then GL_COND_OBJ_ISWBLANK_TRUE='#' GL_COND_OBJ_ISWBLANK_FALSE='#' fi GL_GNULIB_ISWBLANK=1 printf "%s\n" "#define GNULIB_TEST_ISWBLANK 1" >>confdefs.h if test $HAVE_WCTYPE_T = 0 || test $GNULIBHEADERS_OVERRIDE_WINT_T = 1 || test $REPLACE_WCTYPE = 1; then GL_COND_OBJ_ISWCTYPE_TRUE= GL_COND_OBJ_ISWCTYPE_FALSE='#' else GL_COND_OBJ_ISWCTYPE_TRUE='#' GL_COND_OBJ_ISWCTYPE_FALSE= fi : if test -z "${GL_COND_OBJ_ISWCTYPE_TRUE}" && test -z "${GL_COND_OBJ_ISWCTYPE_FALSE}"; then GL_COND_OBJ_ISWCTYPE_TRUE='#' GL_COND_OBJ_ISWCTYPE_FALSE='#' fi GL_GNULIB_ISWCTYPE=1 printf "%s\n" "#define GNULIB_TEST_ISWCTYPE 1" >>confdefs.h if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then REPLACE_ISWDIGIT="$REPLACE_ISWCNTRL" else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether iswdigit is ISO C compliant" >&5 printf %s "checking whether iswdigit is ISO C compliant... " >&6; } if test ${gl_cv_func_iswdigit_works+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on FreeBSD, NetBSD, Solaris, native Windows. freebsd* | dragonfly* | netbsd* | solaris* | mingw* | windows*) gl_cv_func_iswdigit_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_iswdigit_works="guessing yes" ;; esac if test $LOCALE_FR != none || test $LOCALE_JA != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include <wctype.h> /* Returns the value of iswdigit for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, s, n, &state); if (ret != n) abort (); return iswdigit (wc); } int main (int argc, char *argv[]) { int is; int result = 0; if (strcmp ("$LOCALE_FR", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR") != NULL) { /* This fails on mingw, MSVC 14. */ /* U+00B2 SUPERSCRIPT TWO */ is = for_character ("\262", 1); if (!(is == 0)) result |= 1; } if (strcmp ("$LOCALE_JA", "none") != 0 && setlocale (LC_ALL, "$LOCALE_JA") != NULL) { /* This fails on NetBSD 8.0. */ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); if (!(is == 0)) result |= 2; } if (strcmp ("$LOCALE_FR_UTF8", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { /* This fails on FreeBSD 13.0, NetBSD 8.0, MSVC 14. */ /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\331\243", 2); if (!(is == 0)) result |= 4; /* This fails on FreeBSD 13.0, NetBSD 8.0, MSVC 14. */ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\357\274\221", 3); if (!(is == 0)) result |= 8; } if (strcmp ("$LOCALE_ZH_CN", "none") != 0 && setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { /* This fails on NetBSD 8.0, Solaris 10, Solaris 11.4. */ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); if (!(is == 0)) result |= 16; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_iswdigit_works=yes else case e in #( e) gl_cv_func_iswdigit_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswdigit_works" >&5 printf "%s\n" "$gl_cv_func_iswdigit_works" >&6; } case "$gl_cv_func_iswdigit_works" in *yes) ;; *) REPLACE_ISWDIGIT=1 ;; esac fi if ! { test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; } && test $REPLACE_ISWDIGIT = 1; then GL_COND_OBJ_ISWDIGIT_TRUE= GL_COND_OBJ_ISWDIGIT_FALSE='#' else GL_COND_OBJ_ISWDIGIT_TRUE='#' GL_COND_OBJ_ISWDIGIT_FALSE= fi : if test -z "${GL_COND_OBJ_ISWDIGIT_TRUE}" && test -z "${GL_COND_OBJ_ISWDIGIT_FALSE}"; then GL_COND_OBJ_ISWDIGIT_TRUE='#' GL_COND_OBJ_ISWDIGIT_FALSE='#' fi GL_GNULIB_ISWDIGIT=1 printf "%s\n" "#define GNULIB_TEST_ISWDIGIT 1" >>confdefs.h if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then REPLACE_ISWPUNCT="$REPLACE_ISWCNTRL" else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether iswpunct is consistent with ispunct" >&5 printf %s "checking whether iswpunct is consistent with ispunct... " >&6; } if test ${gl_cv_func_iswpunct_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on Android. android*) gl_cv_func_iswpunct_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_iswpunct_works="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ctype.h> #include <wchar.h> #include <wctype.h> int main (int argc, char *argv[]) { int result = 0; /* This fails on Android 11. */ if ((! iswpunct ('\`')) != (! ispunct ('\`'))) result |= 1; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_iswpunct_works=yes else case e in #( e) gl_cv_func_iswpunct_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswpunct_works" >&5 printf "%s\n" "$gl_cv_func_iswpunct_works" >&6; } case "$gl_cv_func_iswpunct_works" in *yes) ;; *) REPLACE_ISWPUNCT=1 ;; esac fi if ! { test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; } && test $REPLACE_ISWPUNCT = 1; then GL_COND_OBJ_ISWPUNCT_TRUE= GL_COND_OBJ_ISWPUNCT_FALSE='#' else GL_COND_OBJ_ISWPUNCT_TRUE='#' GL_COND_OBJ_ISWPUNCT_FALSE= fi : if test -z "${GL_COND_OBJ_ISWPUNCT_TRUE}" && test -z "${GL_COND_OBJ_ISWPUNCT_FALSE}"; then GL_COND_OBJ_ISWPUNCT_TRUE='#' GL_COND_OBJ_ISWPUNCT_FALSE='#' fi GL_GNULIB_ISWPUNCT=1 printf "%s\n" "#define GNULIB_TEST_ISWPUNCT 1" >>confdefs.h if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then REPLACE_ISWXDIGIT="$REPLACE_ISWCNTRL" else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether iswxdigit is ISO C compliant" >&5 printf %s "checking whether iswxdigit is ISO C compliant... " >&6; } if test ${gl_cv_func_iswxdigit_works+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on FreeBSD, NetBSD, Solaris, native Windows. freebsd* | dragonfly* | netbsd* | solaris* | mingw* | windows*) gl_cv_func_iswxdigit_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_iswxdigit_works="guessing yes" ;; esac if test $LOCALE_JA != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include <wctype.h> /* Returns the value of iswxdigit for the multibyte character s[0..n-1]. */ static int for_character (const char *s, size_t n) { mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, s, n, &state); if (ret != n) abort (); return iswxdigit (wc); } int main (int argc, char *argv[]) { int is; int result = 0; if (strcmp ("$LOCALE_JA", "none") != 0 && setlocale (LC_ALL, "$LOCALE_JA") != NULL) { /* This fails on NetBSD 8.0. */ /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ is = for_character ("\243\301", 2); if (!(is == 0)) result |= 1; } if (strcmp ("$LOCALE_FR_UTF8", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { /* This fails on FreeBSD 13.0. */ /* U+0663 ARABIC-INDIC DIGIT THREE */ is = for_character ("\331\243", 2); if (!(is == 0)) result |= 2; /* This fails on MSVC 14. */ /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ is = for_character ("\357\274\241", 3); if (!(is == 0)) result |= 4; } if (strcmp ("$LOCALE_ZH_CN", "none") != 0 && setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { /* This fails on Solaris 10, Solaris 11.4. */ /* U+FF11 FULLWIDTH DIGIT ONE */ is = for_character ("\243\261", 2); if (!(is == 0)) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_iswxdigit_works=yes else case e in #( e) gl_cv_func_iswxdigit_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswxdigit_works" >&5 printf "%s\n" "$gl_cv_func_iswxdigit_works" >&6; } case "$gl_cv_func_iswxdigit_works" in *yes) ;; *) REPLACE_ISWXDIGIT=1 ;; esac fi if ! { test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; } && test $REPLACE_ISWXDIGIT = 1; then GL_COND_OBJ_ISWXDIGIT_TRUE= GL_COND_OBJ_ISWXDIGIT_FALSE='#' else GL_COND_OBJ_ISWXDIGIT_TRUE='#' GL_COND_OBJ_ISWXDIGIT_FALSE= fi : if test -z "${GL_COND_OBJ_ISWXDIGIT_TRUE}" && test -z "${GL_COND_OBJ_ISWXDIGIT_FALSE}"; then GL_COND_OBJ_ISWXDIGIT_TRUE='#' GL_COND_OBJ_ISWXDIGIT_FALSE='#' fi GL_GNULIB_ISWXDIGIT=1 printf "%s\n" "#define GNULIB_TEST_ISWXDIGIT 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the __inline keyword" >&5 printf %s "checking whether the compiler supports the __inline keyword... " >&6; } if test ${gl_cv_c___inline+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int foo_t; static __inline foo_t foo (void) { return 0; } int main (void) { return foo (); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_c___inline=yes else case e in #( e) gl_cv_c___inline=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c___inline" >&5 printf "%s\n" "$gl_cv_c___inline" >&6; } if test $gl_cv_c___inline = yes; then printf "%s\n" "#define HAVE___INLINE 1" >>confdefs.h fi case "$GL_GENERATE_LIMITS_H" in false) LIMITS_H='' ;; true) if test -z "$LIMITS_H"; then LIMITS_H="${gl_source_base_prefix}limits.h" fi ;; *) echo "*** GL_GENERATE_LIMITS_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_LIMITS_H; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi : if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE='#' fi LOCALCHARSET_TESTS_ENVIRONMENT= if test $REPLACE_STRUCT_LCONV = 1; then REPLACE_LOCALECONV=1 fi if test $REPLACE_LOCALECONV = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether localeconv works" >&5 printf %s "checking whether localeconv works... " >&6; } if test ${gl_cv_func_localeconv_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_localeconv_works="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_localeconv_works="guessing yes" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_localeconv_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_localeconv_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <limits.h> int main () { struct lconv *l = localeconv (); return l->frac_digits != CHAR_MAX && l->frac_digits < 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_localeconv_works=yes else case e in #( e) gl_cv_func_localeconv_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_localeconv_works" >&5 printf "%s\n" "$gl_cv_func_localeconv_works" >&6; } case "$gl_cv_func_localeconv_works" in *yes) ;; *) REPLACE_LOCALECONV=1 ;; esac fi if test $REPLACE_LOCALECONV = 1; then GL_COND_OBJ_LOCALECONV_TRUE= GL_COND_OBJ_LOCALECONV_FALSE='#' else GL_COND_OBJ_LOCALECONV_TRUE='#' GL_COND_OBJ_LOCALECONV_FALSE= fi : if test -z "${GL_COND_OBJ_LOCALECONV_TRUE}" && test -z "${GL_COND_OBJ_LOCALECONV_FALSE}"; then GL_COND_OBJ_LOCALECONV_TRUE='#' GL_COND_OBJ_LOCALECONV_FALSE='#' fi if test -z "$GL_COND_OBJ_LOCALECONV_TRUE"; then : ac_fn_c_check_member "$LINENO" "struct lconv" "decimal_point" "ac_cv_member_struct_lconv_decimal_point" "#include <locale.h> " if test "x$ac_cv_member_struct_lconv_decimal_point" = xyes then : printf "%s\n" "#define HAVE_STRUCT_LCONV_DECIMAL_POINT 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct lconv" "int_p_cs_precedes" "ac_cv_member_struct_lconv_int_p_cs_precedes" "#include <locale.h> " if test "x$ac_cv_member_struct_lconv_int_p_cs_precedes" = xyes then : printf "%s\n" "#define HAVE_STRUCT_LCONV_INT_P_CS_PRECEDES 1" >>confdefs.h fi fi GL_GNULIB_LOCALECONV=1 printf "%s\n" "#define GNULIB_TEST_LOCALECONV 1" >>confdefs.h if test "$gl_threads_api" = posix; then # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. has_rwlock=false ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include <pthread.h> " if test "x$ac_cv_type_pthread_rwlock_t" = xyes then : has_rwlock=true printf "%s\n" "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h fi if $has_rwlock; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5 printf %s "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; } if test ${gl_cv_pthread_rwlock_rdlock_prefer_writer+y} then : printf %s "(cached) " >&6 else case e in #( e) saved_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on musl systems. *-musl* | midipix*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on bionic systems. *-android*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess yes on native Windows with the mingw-w64 winpthreads library. # Guess no on native Windows with the gnulib windows-rwlock module. mingw* | windows*) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" else gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" fi ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (exit (10 + (n))) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static pthread_rwlock_t lock; static pthread_t reader1; static pthread_t writer; static pthread_t reader2; static pthread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static pthread_mutex_t baton; static void * timer_func (void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9: The second reader thread requests the lock. */ err = pthread_rwlock_tryrdlock (&lock); if (err == 0) FAILURE (); else if (err != EBUSY) UNEXPECTED (9); /* Step 10: Launch a timer, to test whether the next call blocks. */ if (pthread_create (&timer, NULL, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = pthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (pthread_create (&reader2, NULL, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (pthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = pthread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (pthread_rwlock_init (&lock, NULL)) UNEXPECTED (1); if (pthread_mutex_init (&baton, NULL)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (pthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (pthread_create (&writer, NULL, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { sleep (1); } } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_pthread_rwlock_rdlock_prefer_writer=yes else case e in #( e) gl_cv_pthread_rwlock_rdlock_prefer_writer=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi LIBS="$saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5 printf "%s\n" "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; } case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in *yes) printf "%s\n" "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h ;; esac fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> int main (void) { #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi : printf "%s\n" "#define GNULIB_LOCK 1" >>confdefs.h if test $ac_cv_func_lstat = yes; then case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in darwin* | solaris* | *no) REPLACE_LSTAT=1 ;; esac else HAVE_LSTAT=0 fi if test $REPLACE_LSTAT = 1; then GL_COND_OBJ_LSTAT_TRUE= GL_COND_OBJ_LSTAT_FALSE='#' else GL_COND_OBJ_LSTAT_TRUE='#' GL_COND_OBJ_LSTAT_FALSE= fi : if test -z "${GL_COND_OBJ_LSTAT_TRUE}" && test -z "${GL_COND_OBJ_LSTAT_FALSE}"; then GL_COND_OBJ_LSTAT_TRUE='#' GL_COND_OBJ_LSTAT_FALSE='#' fi if test -z "$GL_COND_OBJ_LSTAT_TRUE"; then : : fi GL_GNULIB_LSTAT=1 printf "%s\n" "#define GNULIB_TEST_LSTAT 1" >>confdefs.h REPLACE_MALLOC_FOR_MALLOC_GNU="$REPLACE_MALLOC_FOR_MALLOC_POSIX" if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc (0) returns nonnull" >&5 printf %s "checking whether malloc (0) returns nonnull... " >&6; } if test ${ac_cv_func_malloc_0_nonnull+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midipix* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | windows* | msys* ) ac_cv_func_malloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = malloc (0); void * volatile vp = p; int result = !vp; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_malloc_0_nonnull=yes else case e in #( e) ac_cv_func_malloc_0_nonnull=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } case $ac_cv_func_malloc_0_nonnull in #( *yes) : ;; #( *) : REPLACE_MALLOC_FOR_MALLOC_GNU=1 ;; esac fi if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 1; then gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" fi GL_GNULIB_MALLOC_GNU=1 printf "%s\n" "#define GNULIB_TEST_MALLOC_GNU 1" >>confdefs.h if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" fi GL_GNULIB_MALLOC_POSIX=1 printf "%s\n" "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h if test $gl_cv_func_mbrtoc32 = no; then HAVE_MBRTOC32=0 else if test $GNULIBHEADERS_OVERRIDE_CHAR32_T = 1 || test $REPLACE_MBSTATE_T = 1; then REPLACE_MBRTOC32=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtoc32 works on empty input" >&5 printf %s "checking whether mbrtoc32 works on empty input... " >&6; } if test ${gl_cv_func_mbrtoc32_empty_input+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_func_mbrtoc32_empty_input="guessing no" ;; # Guess no on Android. linux*-android*) gl_cv_func_mbrtoc32_empty_input="guessing no" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_mbrtoc32_empty_input="guessing no" ;; *) gl_cv_func_mbrtoc32_empty_input="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> static char32_t wc; static mbstate_t mbs; int main (void) { return mbrtoc32 (&wc, "", 0, &mbs) != (size_t) -2; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtoc32_empty_input=yes else case e in #( e) gl_cv_func_mbrtoc32_empty_input=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtoc32_empty_input" >&5 printf "%s\n" "$gl_cv_func_mbrtoc32_empty_input" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5 printf %s "checking whether the C locale is free of encoding errors... " >&6; } if test ${gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on native Windows. mingw* | windows*) gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ="guessing yes" ;; *) gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #include <locale.h> #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> int main (void) { int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; char32_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtoc32 (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ=yes else case e in #( e) gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ" >&5 printf "%s\n" "$gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ" >&6; } case "$gl_cv_func_mbrtoc32_empty_input" in *yes) ;; *) printf "%s\n" "#define MBRTOC32_EMPTY_INPUT_BUG 1" >>confdefs.h REPLACE_MBRTOC32=1 ;; esac case "$gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ" in *yes) ;; *) printf "%s\n" "#define MBRTOC32_IN_C_LOCALE_MAYBE_EILSEQ 1" >>confdefs.h REPLACE_MBRTOC32=1 ;; esac fi if test $HAVE_WORKING_MBRTOC32 = 0; then REPLACE_MBRTOC32=1 fi fi if test $HAVE_MBRTOC32 = 0 || test $REPLACE_MBRTOC32 = 1; then GL_COND_OBJ_MBRTOC32_TRUE= GL_COND_OBJ_MBRTOC32_FALSE='#' else GL_COND_OBJ_MBRTOC32_TRUE='#' GL_COND_OBJ_MBRTOC32_FALSE= fi : if test -z "${GL_COND_OBJ_MBRTOC32_TRUE}" && test -z "${GL_COND_OBJ_MBRTOC32_FALSE}"; then GL_COND_OBJ_MBRTOC32_TRUE='#' GL_COND_OBJ_MBRTOC32_FALSE='#' fi if test -z "$GL_COND_OBJ_MBRTOC32_TRUE"; then : if test $REPLACE_MBSTATE_T = 1; then gl_LIBOBJS="$gl_LIBOBJS lc-charset-dispatch.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS mbtowc-lock.$ac_objext" CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 printf %s "checking whether the -Werror option is usable... " >&6; } if test ${gl_cv_cc_vis_werror+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_vis_werror=yes else case e in #( e) gl_cv_cc_vis_werror=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_saved_CFLAGS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 printf %s "checking for simple visibility declarations... " >&6; } if test ${gl_cv_cc_visibility+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_visibility=yes else case e in #( e) gl_cv_cc_visibility=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_saved_CFLAGS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 printf "%s\n" "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h fi : fi GL_GNULIB_MBRTOC32=1 printf "%s\n" "#define GNULIB_TEST_MBRTOC32 1" >>confdefs.h if test $ac_cv_func_mbrtowc = no; then HAVE_MBRTOWC=0 ac_fn_check_decl "$LINENO" "mbrtowc" "ac_cv_have_decl_mbrtowc" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_mbrtowc" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_MBRTOWC $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_mbrtowc = yes; then REPLACE_MBRTOWC=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBRTOWC=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL pwc argument" >&5 printf %s "checking whether mbrtowc handles a NULL pwc argument... " >&6; } if test ${gl_cv_func_mbrtowc_null_arg1+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "\303\237er"; mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 5, &state); if (ret != 2) result |= 1; if (!mbsinit (&state)) result |= 2; memset (&state, '\0', sizeof (mbstate_t)); ret = mbrtowc (NULL, input, 5, &state); if (ret != 2) /* Solaris 7 fails here: ret is -1. */ result |= 4; if (!mbsinit (&state)) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_null_arg1=yes else case e in #( e) gl_cv_func_mbrtowc_null_arg1=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg1" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_null_arg1" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL string argument" >&5 printf %s "checking whether mbrtowc handles a NULL string argument... " >&6; } if test ${gl_cv_func_mbrtowc_null_arg2+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on OSF/1. osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { mbstate_t state; wchar_t wc; int ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; mbrtowc (&wc, NULL, 5, &state); /* Check that wc was not modified. */ if (wc != (wchar_t) 0xBADFACE) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_null_arg2=yes else case e in #( e) gl_cv_func_mbrtowc_null_arg2=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg2" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_null_arg2" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc has a correct return value" >&5 printf %s "checking whether mbrtowc has a correct return value... " >&6; } if test ${gl_cv_func_mbrtowc_retval+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on HP-UX, Solaris, native Windows. hpux* | solaris* | mingw* | windows*) gl_cv_func_mbrtowc_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_retval="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ || { case "$host_os" in mingw* | windows*) true;; *) false;; esac; }; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; int found_some_locale = 0; /* This fails on Solaris. */ if (strcmp ("$LOCALE_FR_UTF8", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 1) result |= 1; } found_some_locale = 1; } /* This fails on HP-UX 11.11. */ if (strcmp ("$LOCALE_JA", "none") != 0 && setlocale (LC_ALL, "$LOCALE_JA") != NULL) { char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 2) result |= 2; } found_some_locale = 1; } /* This fails on native Windows. */ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 4; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 8; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 16; } found_some_locale = 1; } return (found_some_locale ? result : 77); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_retval=yes else case e in #( e) if test $? != 77; then gl_cv_func_mbrtowc_retval=no fi ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_retval" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_retval" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5 printf %s "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; } if test ${gl_cv_func_mbrtowc_nul_retval+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on Solaris 8 and 9. solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8 and 9. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "", 1, &state) != 0) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_nul_retval=yes else case e in #( e) gl_cv_func_mbrtowc_nul_retval=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_nul_retval" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc stores incomplete characters" >&5 printf %s "checking whether mbrtowc stores incomplete characters... " >&6; } if test ${gl_cv_func_mbrtowc_stores_incomplete+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess yes on native Windows. mingw* | windows*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" ;; *) gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;; esac case "$host_os" in mingw* | windows*) if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "French_France.65001") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 1; } if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\226", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 2; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\245", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 4; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\261", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_stores_incomplete=no else case e in #( e) gl_cv_func_mbrtowc_stores_incomplete=yes ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; *) if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_stores_incomplete=no else case e in #( e) gl_cv_func_mbrtowc_stores_incomplete=yes ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_stores_incomplete" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_stores_incomplete" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works on empty input" >&5 printf %s "checking whether mbrtowc works on empty input... " >&6; } if test ${gl_cv_func_mbrtowc_empty_input+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on AIX and glibc systems. aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; # Guess no on Android. linux*-android*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> static wchar_t wc; static mbstate_t mbs; int main (void) { return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_empty_input=yes else case e in #( e) gl_cv_func_mbrtowc_empty_input=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_empty_input" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_empty_input" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5 printf %s "checking whether the C locale is free of encoding errors... " >&6; } if test ${gl_cv_func_mbrtowc_C_locale_sans_EILSEQ+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on native Windows. mingw* | windows*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;; *) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #include <locale.h> #include <wchar.h> int main (void) { int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; wchar_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtowc (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes else case e in #( e) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&6; } case "$gl_cv_func_mbrtowc_null_arg1" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_NULL_ARG1_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_null_arg2" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_NULL_ARG2_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_retval" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_nul_retval" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_stores_incomplete" in *no) ;; *) printf "%s\n" "#define MBRTOWC_STORES_INCOMPLETE_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_empty_input" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_EMPTY_INPUT_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac fi fi if test $REPLACE_MBSTATE_T = 1; then case "$host_os" in mingw* | windows*) MBRTOWC_LIB= ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 printf %s "checking whether imported symbols can be declared weak... " >&6; } if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in cygwin* | mingw* | windows*) gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main (void) { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_have_weak="guessing yes" else case e in #( e) gl_cv_have_weak="guessing no" ;; esac fi rm -rf conftest* else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_have_weak=yes else case e in #( e) gl_cv_have_weak=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 printf "%s\n" "$gl_cv_have_weak" >&6; } case "$gl_cv_have_weak" in *yes) printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h ;; esac case "$gl_cv_have_weak" in *yes) MBRTOWC_LIB= ;; *) MBRTOWC_LIB="$LIBPTHREAD" ;; esac ;; esac else MBRTOWC_LIB= fi LIB_MBRTOWC="$MBRTOWC_LIB" if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then GL_COND_OBJ_MBRTOWC_TRUE= GL_COND_OBJ_MBRTOWC_FALSE='#' else GL_COND_OBJ_MBRTOWC_TRUE='#' GL_COND_OBJ_MBRTOWC_FALSE= fi : if test -z "${GL_COND_OBJ_MBRTOWC_TRUE}" && test -z "${GL_COND_OBJ_MBRTOWC_FALSE}"; then GL_COND_OBJ_MBRTOWC_TRUE='#' GL_COND_OBJ_MBRTOWC_FALSE='#' fi if test -z "$GL_COND_OBJ_MBRTOWC_TRUE"; then : if test $REPLACE_MBSTATE_T = 1; then gl_LIBOBJS="$gl_LIBOBJS lc-charset-dispatch.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS mbtowc-lock.$ac_objext" CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 printf %s "checking whether the -Werror option is usable... " >&6; } if test ${gl_cv_cc_vis_werror+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_vis_werror=yes else case e in #( e) gl_cv_cc_vis_werror=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_saved_CFLAGS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 printf %s "checking for simple visibility declarations... " >&6; } if test ${gl_cv_cc_visibility+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_visibility=yes else case e in #( e) gl_cv_cc_visibility=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_saved_CFLAGS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 printf "%s\n" "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h fi : fi GL_GNULIB_MBRTOWC=1 printf "%s\n" "#define GNULIB_TEST_MBRTOWC 1" >>confdefs.h GL_GNULIB_MBSCHR=1 printf "%s\n" "#define GNULIB_TEST_MBSCHR 1" >>confdefs.h if test $ac_cv_func_mbsinit = no; then HAVE_MBSINIT=0 ac_fn_check_decl "$LINENO" "mbsinit" "ac_cv_have_decl_mbsinit" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_mbsinit" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_MBSINIT $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_mbsinit = yes; then REPLACE_MBSINIT=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBSINIT=1 else case "$host_os" in mingw* | windows*) REPLACE_MBSINIT=1 ;; esac fi fi if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then GL_COND_OBJ_MBSINIT_TRUE= GL_COND_OBJ_MBSINIT_FALSE='#' else GL_COND_OBJ_MBSINIT_TRUE='#' GL_COND_OBJ_MBSINIT_FALSE= fi : if test -z "${GL_COND_OBJ_MBSINIT_TRUE}" && test -z "${GL_COND_OBJ_MBSINIT_FALSE}"; then GL_COND_OBJ_MBSINIT_TRUE='#' GL_COND_OBJ_MBSINIT_FALSE='#' fi if test -z "$GL_COND_OBJ_MBSINIT_TRUE"; then : : fi GL_GNULIB_MBSINIT=1 printf "%s\n" "#define GNULIB_TEST_MBSINIT 1" >>confdefs.h GL_GNULIB_MBSPBRK=1 printf "%s\n" "#define GNULIB_TEST_MBSPBRK 1" >>confdefs.h GL_GNULIB_MBSSPN=1 printf "%s\n" "#define GNULIB_TEST_MBSSPN 1" >>confdefs.h GL_GNULIB_MBSTOK_R=1 printf "%s\n" "#define GNULIB_TEST_MBSTOK_R 1" >>confdefs.h GL_GNULIB_MBSZERO=1 printf "%s\n" "#define GNULIB_TEST_MBSZERO 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mbtowc" >&5 printf %s "checking for mbtowc... " >&6; } if test ${gl_cv_onwards_func_mbtowc+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "mbtowc" "ac_cv_have_decl_mbtowc" "#include <stdlib.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_mbtowc" = xyes then : fi if test $ac_cv_have_decl_mbtowc = yes; then ac_fn_c_check_func "$LINENO" "mbtowc" "ac_cv_func_mbtowc" if test "x$ac_cv_func_mbtowc" = xyes then : fi if test $ac_cv_func_mbtowc = yes; then gl_cv_onwards_func_mbtowc=yes else gl_cv_onwards_func_mbtowc='future OS version' fi else gl_cv_onwards_func_mbtowc='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "mbtowc" "ac_cv_func_mbtowc" if test "x$ac_cv_func_mbtowc" = xyes then : fi gl_cv_onwards_func_mbtowc=$ac_cv_func_mbtowc ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_mbtowc" >&5 printf "%s\n" "$gl_cv_onwards_func_mbtowc" >&6; } case "$gl_cv_onwards_func_mbtowc" in future*) ac_cv_func_mbtowc=no ;; *) ac_cv_func_mbtowc=$gl_cv_onwards_func_mbtowc ;; esac if test $ac_cv_func_mbtowc = yes; then printf "%s\n" "#define HAVE_MBTOWC 1" >>confdefs.h fi if test $ac_cv_func_mbtowc = no; then HAVE_MBTOWC=0 case "$gl_cv_onwards_func_mbtowc" in future*) REPLACE_MBTOWC=1 ;; esac else if false; then REPLACE_MBTOWC=1 fi fi if test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1; then GL_COND_OBJ_MBTOWC_TRUE= GL_COND_OBJ_MBTOWC_FALSE='#' else GL_COND_OBJ_MBTOWC_TRUE='#' GL_COND_OBJ_MBTOWC_FALSE= fi : if test -z "${GL_COND_OBJ_MBTOWC_TRUE}" && test -z "${GL_COND_OBJ_MBTOWC_FALSE}"; then GL_COND_OBJ_MBTOWC_TRUE='#' GL_COND_OBJ_MBTOWC_FALSE='#' fi if test -z "$GL_COND_OBJ_MBTOWC_TRUE"; then : : fi GL_GNULIB_MBTOWC=1 printf "%s\n" "#define GNULIB_TEST_MBTOWC 1" >>confdefs.h : if test $REPLACE_MEMCHR = 1; then GL_COND_OBJ_MEMCHR_TRUE= GL_COND_OBJ_MEMCHR_FALSE='#' else GL_COND_OBJ_MEMCHR_TRUE='#' GL_COND_OBJ_MEMCHR_FALSE= fi : if test -z "${GL_COND_OBJ_MEMCHR_TRUE}" && test -z "${GL_COND_OBJ_MEMCHR_FALSE}"; then GL_COND_OBJ_MEMCHR_TRUE='#' GL_COND_OBJ_MEMCHR_FALSE='#' fi if test -z "$GL_COND_OBJ_MEMCHR_TRUE"; then : ac_fn_c_check_header_compile "$LINENO" "bp-sym.h" "ac_cv_header_bp_sym_h" "$ac_includes_default" if test "x$ac_cv_header_bp_sym_h" = xyes then : printf "%s\n" "#define HAVE_BP_SYM_H 1" >>confdefs.h fi fi GL_GNULIB_MEMCHR=1 printf "%s\n" "#define GNULIB_TEST_MEMCHR 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove" if test "x$ac_cv_func_memmove" = xyes then : printf "%s\n" "#define HAVE_MEMMOVE 1" >>confdefs.h fi if test $ac_cv_func_memmove = no; then GL_COND_OBJ_MEMMOVE_TRUE= GL_COND_OBJ_MEMMOVE_FALSE='#' else GL_COND_OBJ_MEMMOVE_TRUE='#' GL_COND_OBJ_MEMMOVE_FALSE= fi : if test -z "${GL_COND_OBJ_MEMMOVE_TRUE}" && test -z "${GL_COND_OBJ_MEMMOVE_FALSE}"; then GL_COND_OBJ_MEMMOVE_TRUE='#' GL_COND_OBJ_MEMMOVE_FALSE='#' fi if test -z "$GL_COND_OBJ_MEMMOVE_TRUE"; then : : fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mempcpy" >&5 printf %s "checking for mempcpy... " >&6; } if test ${gl_cv_onwards_func_mempcpy+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "mempcpy" "ac_cv_have_decl_mempcpy" "#include <string.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_mempcpy" = xyes then : fi if test $ac_cv_have_decl_mempcpy = yes; then ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy" if test "x$ac_cv_func_mempcpy" = xyes then : fi if test $ac_cv_func_mempcpy = yes; then gl_cv_onwards_func_mempcpy=yes else gl_cv_onwards_func_mempcpy='future OS version' fi else gl_cv_onwards_func_mempcpy='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy" if test "x$ac_cv_func_mempcpy" = xyes then : fi gl_cv_onwards_func_mempcpy=$ac_cv_func_mempcpy ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_mempcpy" >&5 printf "%s\n" "$gl_cv_onwards_func_mempcpy" >&6; } case "$gl_cv_onwards_func_mempcpy" in future*) ac_cv_func_mempcpy=no ;; *) ac_cv_func_mempcpy=$gl_cv_onwards_func_mempcpy ;; esac if test $ac_cv_func_mempcpy = yes; then printf "%s\n" "#define HAVE_MEMPCPY 1" >>confdefs.h fi if test $ac_cv_func_mempcpy = no; then HAVE_MEMPCPY=0 case "$gl_cv_onwards_func_mempcpy" in future*) REPLACE_MEMPCPY=1 ;; esac fi if test $HAVE_MEMPCPY = 0 || test $REPLACE_MEMPCPY = 1; then GL_COND_OBJ_MEMPCPY_TRUE= GL_COND_OBJ_MEMPCPY_FALSE='#' else GL_COND_OBJ_MEMPCPY_TRUE='#' GL_COND_OBJ_MEMPCPY_FALSE= fi : if test -z "${GL_COND_OBJ_MEMPCPY_TRUE}" && test -z "${GL_COND_OBJ_MEMPCPY_FALSE}"; then GL_COND_OBJ_MEMPCPY_TRUE='#' GL_COND_OBJ_MEMPCPY_FALSE='#' fi if test -z "$GL_COND_OBJ_MEMPCPY_TRUE"; then : : fi GL_GNULIB_MEMPCPY=1 printf "%s\n" "#define GNULIB_TEST_MEMPCPY 1" >>confdefs.h if test $ac_cv_have_decl_memrchr = no; then HAVE_DECL_MEMRCHR=0 fi ac_fn_c_check_func "$LINENO" "memrchr" "ac_cv_func_memrchr" if test "x$ac_cv_func_memrchr" = xyes then : printf "%s\n" "#define HAVE_MEMRCHR 1" >>confdefs.h fi if test $ac_cv_func_memrchr = no; then GL_COND_OBJ_MEMRCHR_TRUE= GL_COND_OBJ_MEMRCHR_FALSE='#' else GL_COND_OBJ_MEMRCHR_TRUE='#' GL_COND_OBJ_MEMRCHR_FALSE= fi : if test -z "${GL_COND_OBJ_MEMRCHR_TRUE}" && test -z "${GL_COND_OBJ_MEMRCHR_FALSE}"; then GL_COND_OBJ_MEMRCHR_TRUE='#' GL_COND_OBJ_MEMRCHR_FALSE='#' fi if test -z "$GL_COND_OBJ_MEMRCHR_TRUE"; then : : fi GL_GNULIB_MEMRCHR=1 printf "%s\n" "#define GNULIB_TEST_MEMRCHR 1" >>confdefs.h if test "$gl_cv_func_working_mktime" != yes; then REPLACE_MKTIME=1 printf "%s\n" "#define NEED_MKTIME_WORKING 1" >>confdefs.h fi case "$host_os" in mingw* | windows*) REPLACE_MKTIME=1 printf "%s\n" "#define NEED_MKTIME_WINDOWS 1" >>confdefs.h ;; esac if test $REPLACE_MKTIME = 1; then gl_LIBOBJS="$gl_LIBOBJS mktime.$ac_objext" : fi GL_GNULIB_MKTIME=1 printf "%s\n" "#define GNULIB_TEST_MKTIME 1" >>confdefs.h if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then GL_COND_OBJ_MSVC_INVAL_TRUE= GL_COND_OBJ_MSVC_INVAL_FALSE='#' else GL_COND_OBJ_MSVC_INVAL_TRUE='#' GL_COND_OBJ_MSVC_INVAL_FALSE= fi : if test -z "${GL_COND_OBJ_MSVC_INVAL_TRUE}" && test -z "${GL_COND_OBJ_MSVC_INVAL_FALSE}"; then GL_COND_OBJ_MSVC_INVAL_TRUE='#' GL_COND_OBJ_MSVC_INVAL_FALSE='#' fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then GL_COND_OBJ_MSVC_NOTHROW_TRUE= GL_COND_OBJ_MSVC_NOTHROW_FALSE='#' else GL_COND_OBJ_MSVC_NOTHROW_TRUE='#' GL_COND_OBJ_MSVC_NOTHROW_FALSE= fi : if test -z "${GL_COND_OBJ_MSVC_NOTHROW_TRUE}" && test -z "${GL_COND_OBJ_MSVC_NOTHROW_FALSE}"; then GL_COND_OBJ_MSVC_NOTHROW_TRUE='#' GL_COND_OBJ_MSVC_NOTHROW_FALSE='#' fi printf "%s\n" "#define GNULIB_MSVC_NOTHROW 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo" >&5 printf %s "checking for nl_langinfo... " >&6; } if test ${gl_cv_onwards_func_nl_langinfo+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "nl_langinfo" "ac_cv_have_decl_nl_langinfo" "#include <langinfo.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_nl_langinfo" = xyes then : fi if test $ac_cv_have_decl_nl_langinfo = yes; then ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" if test "x$ac_cv_func_nl_langinfo" = xyes then : fi if test $ac_cv_func_nl_langinfo = yes; then gl_cv_onwards_func_nl_langinfo=yes else gl_cv_onwards_func_nl_langinfo='future OS version' fi else gl_cv_onwards_func_nl_langinfo='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" if test "x$ac_cv_func_nl_langinfo" = xyes then : fi gl_cv_onwards_func_nl_langinfo=$ac_cv_func_nl_langinfo ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_nl_langinfo" >&5 printf "%s\n" "$gl_cv_onwards_func_nl_langinfo" >&6; } case "$gl_cv_onwards_func_nl_langinfo" in future*) ac_cv_func_nl_langinfo=no ;; *) ac_cv_func_nl_langinfo=$gl_cv_onwards_func_nl_langinfo ;; esac if test $ac_cv_func_nl_langinfo = yes; then printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h fi if test $ac_cv_func_nl_langinfo = yes; then # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether YESEXPR works" >&5 printf %s "checking whether YESEXPR works... " >&6; } if test ${gl_cv_func_nl_langinfo_yesexpr_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on irix systems. irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";; # Guess yes elsewhere. *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int main (void) { return !*nl_langinfo(YESEXPR); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_nl_langinfo_yesexpr_works=yes else case e in #( e) gl_cv_func_nl_langinfo_yesexpr_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_nl_langinfo_yesexpr_works" >&5 printf "%s\n" "$gl_cv_func_nl_langinfo_yesexpr_works" >&6; } case $gl_cv_func_nl_langinfo_yesexpr_works in *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;; *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;; esac printf "%s\n" "#define FUNC_NL_LANGINFO_YESEXPR_WORKS $FUNC_NL_LANGINFO_YESEXPR_WORKS" >>confdefs.h # On Solaris 10 and Solaris 11.3, nl_langinfo is not multithread-safe. case "$host_os" in solaris*) NL_LANGINFO_MTSAFE=0 ;; *) NL_LANGINFO_MTSAFE=1 ;; esac printf "%s\n" "#define NL_LANGINFO_MTSAFE $NL_LANGINFO_MTSAFE" >>confdefs.h if test $HAVE_LANGINFO_CODESET = 1 \ && test $HAVE_LANGINFO_T_FMT_AMPM = 1 \ && test $HAVE_LANGINFO_ALTMON = 1 \ && test $HAVE_LANGINFO_ERA = 1 \ && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1 \ && test $NL_LANGINFO_MTSAFE = 1; then : else REPLACE_NL_LANGINFO=1 printf "%s\n" "#define REPLACE_NL_LANGINFO 1" >>confdefs.h fi else HAVE_NL_LANGINFO=0 case "$gl_cv_onwards_func_nl_langinfo" in future*) REPLACE_NL_LANGINFO=1 ;; esac fi if test $HAVE_NL_LANGINFO = 0 || test $HAVE_LANGINFO_CODESET = 0; then LIB_NL_LANGINFO="$SETLOCALE_NULL_LIB" else LIB_NL_LANGINFO= fi if test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1; then GL_COND_OBJ_NL_LANGINFO_TRUE= GL_COND_OBJ_NL_LANGINFO_FALSE='#' else GL_COND_OBJ_NL_LANGINFO_TRUE='#' GL_COND_OBJ_NL_LANGINFO_FALSE= fi : if test -z "${GL_COND_OBJ_NL_LANGINFO_TRUE}" && test -z "${GL_COND_OBJ_NL_LANGINFO_FALSE}"; then GL_COND_OBJ_NL_LANGINFO_TRUE='#' GL_COND_OBJ_NL_LANGINFO_FALSE='#' fi if test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0; then GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE= GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE='#' else GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE='#' GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE= fi : if test -z "${GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE}" && test -z "${GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE}"; then GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE='#' GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE='#' fi if test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0; then CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 printf %s "checking whether the -Werror option is usable... " >&6; } if test ${gl_cv_cc_vis_werror+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_vis_werror=yes else case e in #( e) gl_cv_cc_vis_werror=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_saved_CFLAGS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 printf %s "checking for simple visibility declarations... " >&6; } if test ${gl_cv_cc_visibility+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_visibility=yes else case e in #( e) gl_cv_cc_visibility=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_saved_CFLAGS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 printf "%s\n" "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h fi GL_GNULIB_NL_LANGINFO=1 printf "%s\n" "#define GNULIB_TEST_NL_LANGINFO 1" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "sys/pstat.h" "ac_cv_header_sys_pstat_h" "$ac_includes_default " if test "x$ac_cv_header_sys_pstat_h" = xyes then : printf "%s\n" "#define HAVE_SYS_PSTAT_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/sysmp.h" "ac_cv_header_sys_sysmp_h" "$ac_includes_default " if test "x$ac_cv_header_sys_sysmp_h" = xyes then : printf "%s\n" "#define HAVE_SYS_SYSMP_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default " if test "x$ac_cv_header_sys_param_h" = xyes then : printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/sysctl.h" "ac_cv_header_sys_sysctl_h" "$ac_includes_default #if HAVE_SYS_PARAM_H # include <sys/param.h> #endif " if test "x$ac_cv_header_sys_sysctl_h" = xyes then : printf "%s\n" "#define HAVE_SYS_SYSCTL_H 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "sched_getaffinity_np" "ac_cv_func_sched_getaffinity_np" if test "x$ac_cv_func_sched_getaffinity_np" = xyes then : printf "%s\n" "#define HAVE_SCHED_GETAFFINITY_NP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "pstat_getdynamic" "ac_cv_func_pstat_getdynamic" if test "x$ac_cv_func_pstat_getdynamic" = xyes then : printf "%s\n" "#define HAVE_PSTAT_GETDYNAMIC 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "sysmp" "ac_cv_func_sysmp" if test "x$ac_cv_func_sysmp" = xyes then : printf "%s\n" "#define HAVE_SYSMP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "sysctl" "ac_cv_func_sysctl" if test "x$ac_cv_func_sysctl" = xyes then : printf "%s\n" "#define HAVE_SYSCTL 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_getaffinity" >&5 printf %s "checking for sched_getaffinity... " >&6; } if test ${gl_cv_onwards_func_sched_getaffinity+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "sched_getaffinity" "ac_cv_have_decl_sched_getaffinity" "#include <sched.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_sched_getaffinity" = xyes then : fi if test $ac_cv_have_decl_sched_getaffinity = yes; then ac_fn_c_check_func "$LINENO" "sched_getaffinity" "ac_cv_func_sched_getaffinity" if test "x$ac_cv_func_sched_getaffinity" = xyes then : fi if test $ac_cv_func_sched_getaffinity = yes; then gl_cv_onwards_func_sched_getaffinity=yes else gl_cv_onwards_func_sched_getaffinity='future OS version' fi else gl_cv_onwards_func_sched_getaffinity='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "sched_getaffinity" "ac_cv_func_sched_getaffinity" if test "x$ac_cv_func_sched_getaffinity" = xyes then : fi gl_cv_onwards_func_sched_getaffinity=$ac_cv_func_sched_getaffinity ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_sched_getaffinity" >&5 printf "%s\n" "$gl_cv_onwards_func_sched_getaffinity" >&6; } case "$gl_cv_onwards_func_sched_getaffinity" in future*) ac_cv_func_sched_getaffinity=no ;; *) ac_cv_func_sched_getaffinity=$gl_cv_onwards_func_sched_getaffinity ;; esac if test $ac_cv_func_sched_getaffinity = yes; then printf "%s\n" "#define HAVE_SCHED_GETAFFINITY 1" >>confdefs.h fi if test $ac_cv_func_sched_getaffinity = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glibc compatible sched_getaffinity" >&5 printf %s "checking for glibc compatible sched_getaffinity... " >&6; } if test ${gl_cv_func_sched_getaffinity3+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <sched.h> int main (void) { sched_getaffinity (0, 0, (cpu_set_t *) 0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_sched_getaffinity3=yes else case e in #( e) gl_cv_func_sched_getaffinity3=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_sched_getaffinity3" >&5 printf "%s\n" "$gl_cv_func_sched_getaffinity3" >&6; } if test $gl_cv_func_sched_getaffinity3 = yes; then printf "%s\n" "#define HAVE_SCHED_GETAFFINITY_LIKE_GLIBC 1" >>confdefs.h fi fi case "$host_os" in mingw* | windows* | pw*) REPLACE_OPEN=1 ;; *) if test "$gl_cv_macro_O_CLOEXEC" != yes; then REPLACE_OPEN=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether open recognizes a trailing slash" >&5 printf %s "checking whether open recognizes a trailing slash... " >&6; } if test ${gl_cv_func_open_slash+y} then : printf %s "(cached) " >&6 else case e in #( e) # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then touch conftest.tmp ln -s conftest.tmp conftest.lnk fi if test "$cross_compiling" = yes then : case "$host_os" in freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) gl_cv_func_open_slash="guessing no" ;; *) gl_cv_func_open_slash="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> #if HAVE_UNISTD_H # include <unistd.h> #endif $gl_mda_defines int main () { int result = 0; #if HAVE_LSTAT if (open ("conftest.lnk/", O_RDONLY) != -1) result |= 1; #endif if (open ("conftest.sl/", O_CREAT, 0600) >= 0) result |= 2; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_open_slash=yes else case e in #( e) gl_cv_func_open_slash=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f conftest.sl conftest.tmp conftest.lnk ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_open_slash" >&5 printf "%s\n" "$gl_cv_func_open_slash" >&6; } case "$gl_cv_func_open_slash" in *no) printf "%s\n" "#define OPEN_TRAILING_SLASH_BUG 1" >>confdefs.h ;; esac case "$gl_cv_func_open_slash" in *no) REPLACE_OPEN=1 ;; esac ;; esac if test $REPLACE_OPEN = 0; then if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then REPLACE_OPEN=1 fi fi if test $REPLACE_OPEN = 1; then GL_COND_OBJ_OPEN_TRUE= GL_COND_OBJ_OPEN_FALSE='#' else GL_COND_OBJ_OPEN_TRUE='#' GL_COND_OBJ_OPEN_FALSE= fi : if test -z "${GL_COND_OBJ_OPEN_TRUE}" && test -z "${GL_COND_OBJ_OPEN_FALSE}"; then GL_COND_OBJ_OPEN_TRUE='#' GL_COND_OBJ_OPEN_FALSE='#' fi if test -z "$GL_COND_OBJ_OPEN_TRUE"; then : : fi GL_GNULIB_OPEN=1 printf "%s\n" "#define GNULIB_TEST_OPEN 1" >>confdefs.h case $ac_cv_func_openat+$gl_cv_func_lstat_dereferences_slashed_symlink+$gl_cv_macro_O_CLOEXEC in yes+*yes+yes) ;; yes+*) # Solaris 10 lacks O_CLOEXEC. # Solaris 9 has *at functions, but uniformly mishandles trailing # slash in all of them. REPLACE_OPENAT=1 ;; *) HAVE_OPENAT=0 ;; esac if test $HAVE_OPENAT = 0 || test $REPLACE_OPENAT = 1; then GL_COND_OBJ_OPENAT_TRUE= GL_COND_OBJ_OPENAT_FALSE='#' else GL_COND_OBJ_OPENAT_TRUE='#' GL_COND_OBJ_OPENAT_FALSE= fi : if test -z "${GL_COND_OBJ_OPENAT_TRUE}" && test -z "${GL_COND_OBJ_OPENAT_FALSE}"; then GL_COND_OBJ_OPENAT_TRUE='#' GL_COND_OBJ_OPENAT_FALSE='#' fi if test -z "$GL_COND_OBJ_OPENAT_TRUE"; then : : fi printf "%s\n" "#define GNULIB_OPENAT 1" >>confdefs.h GL_GNULIB_OPENAT=1 printf "%s\n" "#define GNULIB_TEST_OPENAT 1" >>confdefs.h if test $ac_cv_func_pipe != yes; then HAVE_PIPE=0 fi if test $HAVE_PIPE = 0; then GL_COND_OBJ_PIPE_TRUE= GL_COND_OBJ_PIPE_FALSE='#' else GL_COND_OBJ_PIPE_TRUE='#' GL_COND_OBJ_PIPE_FALSE= fi : if test -z "${GL_COND_OBJ_PIPE_TRUE}" && test -z "${GL_COND_OBJ_PIPE_FALSE}"; then GL_COND_OBJ_PIPE_TRUE='#' GL_COND_OBJ_PIPE_FALSE='#' fi GL_GNULIB_PIPE=1 printf "%s\n" "#define GNULIB_TEST_PIPE 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "rawmemchr" "ac_cv_func_rawmemchr" if test "x$ac_cv_func_rawmemchr" = xyes then : printf "%s\n" "#define HAVE_RAWMEMCHR 1" >>confdefs.h fi if test $ac_cv_func_rawmemchr = no; then HAVE_RAWMEMCHR=0 fi if test $HAVE_RAWMEMCHR = 0; then GL_COND_OBJ_RAWMEMCHR_TRUE= GL_COND_OBJ_RAWMEMCHR_FALSE='#' else GL_COND_OBJ_RAWMEMCHR_TRUE='#' GL_COND_OBJ_RAWMEMCHR_FALSE= fi : if test -z "${GL_COND_OBJ_RAWMEMCHR_TRUE}" && test -z "${GL_COND_OBJ_RAWMEMCHR_FALSE}"; then GL_COND_OBJ_RAWMEMCHR_TRUE='#' GL_COND_OBJ_RAWMEMCHR_FALSE='#' fi if test -z "$GL_COND_OBJ_RAWMEMCHR_TRUE"; then : : fi GL_GNULIB_RAWMEMCHR=1 printf "%s\n" "#define GNULIB_TEST_RAWMEMCHR 1" >>confdefs.h if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether realloc (0, 0) returns nonnull" >&5 printf %s "checking whether realloc (0, 0) returns nonnull... " >&6; } if test ${ac_cv_func_realloc_0_nonnull+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midipix* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | windows* | msys* ) ac_cv_func_realloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = realloc (0, 0); void * volatile vp = p; int result = !vp; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_realloc_0_nonnull=yes else case e in #( e) ac_cv_func_realloc_0_nonnull=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_realloc_0_nonnull" >&6; } case $ac_cv_func_realloc_0_nonnull in #( *yes) : ;; #( *) : REPLACE_REALLOC_FOR_REALLOC_GNU=1 ;; esac fi if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then gl_LIBOBJS="$gl_LIBOBJS realloc.$ac_objext" fi GL_GNULIB_REALLOC_GNU=1 printf "%s\n" "#define GNULIB_TEST_REALLOC_GNU 1" >>confdefs.h if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_REALLOC_FOR_REALLOC_POSIX=1 fi if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then gl_LIBOBJS="$gl_LIBOBJS realloc.$ac_objext" fi GL_GNULIB_REALLOC_POSIX=1 printf "%s\n" "#define GNULIB_TEST_REALLOC_POSIX 1" >>confdefs.h # Check whether --with-included-regex was given. if test ${with_included_regex+y} then : withval=$with_included_regex; fi case $with_included_regex in #( yes|no) ac_use_included_regex=$with_included_regex ;; '') # If the system regex support is good enough that it passes the # following run test, then default to *not* using the included regex.c. # If cross compiling, assume the test would fail and use the included # regex.c. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working re_compile_pattern" >&5 printf %s "checking for working re_compile_pattern... " >&6; } if test ${gl_cv_func_re_compile_pattern_working+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on native Windows. mingw* | windows*) gl_cv_func_re_compile_pattern_working="guessing no" ;; # Otherwise obey --enable-cross-guesses. *) gl_cv_func_re_compile_pattern_working="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <regex.h> #include <locale.h> #include <limits.h> #include <string.h> #if defined M_CHECK_ACTION || HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #if HAVE_MALLOC_H # include <malloc.h> #endif #ifdef M_CHECK_ACTION /* Exit with distinguishable exit code. */ static void sigabrt_no_core (int sig) { raise (SIGTERM); } #endif int main (void) { int result = 0; static struct re_pattern_buffer regex; unsigned char folded_chars[UCHAR_MAX + 1]; int i; const char *s; struct re_registers regs; /* Some builds of glibc go into an infinite loop on this test. Use alarm to force death, and mallopt to avoid malloc recursion in diagnosing the corrupted heap. */ #if HAVE_DECL_ALARM signal (SIGALRM, SIG_DFL); alarm (2); #endif #ifdef M_CHECK_ACTION signal (SIGABRT, sigabrt_no_core); mallopt (M_CHECK_ACTION, 2); #endif if (setlocale (LC_ALL, "en_US.UTF-8")) { { /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html This test needs valgrind to catch the bug on Debian GNU/Linux 3.1 x86, but it might catch the bug better on other platforms and it shouldn't hurt to try the test here. */ static char const pat[] = "insert into"; static char const data[] = "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { if (re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s) != -1) result |= 1; regfree (®ex); } } { /* This test is from glibc bug 15078. The test case is from Andreas Schwab in <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. */ static char const pat[] = "[^x]x"; static char const data[] = /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ "\xe1\x80\x80" "\xe1\x80\xbb" "\xe1\x80\xbd" "\xe1\x80\x94" "\xe1\x80\xba" "\xe1\x80\xaf" "\xe1\x80\x95" "\xe1\x80\xba" "x"; re_set_syntax (0); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, 0); if (i != 0 && i != 21) result |= 1; regfree (®ex); } } if (! setlocale (LC_ALL, "C")) return 1; } /* This test is from glibc bug 3957, reported by Andrew Mackey. */ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[^x]b", 6, ®ex); if (s) result |= 2; else { /* This should fail, but succeeds for glibc-2.5. */ if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) result |= 2; regfree (®ex); } /* This regular expression is from Spencer ere test number 75 in grep-2.3. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); for (i = 0; i <= UCHAR_MAX; i++) folded_chars[i] = i; regex.translate = folded_chars; s = re_compile_pattern ("a[[:]:]]b\n", 11, ®ex); /* This should fail with _Invalid character class name_ error. */ if (!s) { result |= 4; regfree (®ex); } /* Ensure that [b-a] is diagnosed as invalid, when using RE_NO_EMPTY_RANGES. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[b-a]", 6, ®ex); if (s == 0) { result |= 8; regfree (®ex); } /* This should succeed, but does not for glibc-2.1.3. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("{1", 2, ®ex); if (s) result |= 8; else regfree (®ex); /* The following example is derived from a problem report against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[an\371]*n", 7, ®ex); if (s) result |= 8; else { /* This should match, but does not for glibc-2.2.1. */ if (re_match (®ex, "an", 2, 0, ®s) != 2) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 8; else { /* glibc-2.2.93 does not work with a negative RANGE argument. */ if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } /* The version of regex.c in older versions of gnulib ignored RE_ICASE. Detect that problem too. */ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 16; else { if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) result |= 16; else { free (regs.start); free (regs.end); } regfree (®ex); } /* Catch a bug reported by Vin Shelton in https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html */ re_set_syntax (RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[[:alnum:]_-]\\\\+\$", 16, ®ex); if (s) result |= 32; else regfree (®ex); /* REG_STARTEND was added to glibc on 2004-01-15. Reject older versions. */ if (! REG_STARTEND) result |= 64; /* Matching with the compiled form of this regexp would provoke an assertion failure prior to glibc-2.28: regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed With glibc-2.28, compilation fails and reports the invalid back reference. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("0|()0|\\\\1|0", 10, ®ex); if (!s) { memset (®s, 0, sizeof regs); i = re_search (®ex, "x", 1, 0, 1, ®s); if (i != -1) result |= 64; if (0 <= i) { free (regs.start); free (regs.end); } regfree (®ex); } else { if (strcmp (s, "Invalid back reference")) result |= 64; } /* glibc bug 11053. */ re_set_syntax (RE_SYNTAX_POSIX_BASIC); memset (®ex, 0, sizeof regex); static char const pat_sub2[] = "\\\\(a*\\\\)*a*\\\\1"; s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, ®ex); if (s) result |= 64; else { memset (®s, 0, sizeof regs); static char const data[] = "a"; int datalen = sizeof data - 1; i = re_search (®ex, data, datalen, 0, datalen, ®s); if (i != 0) result |= 64; else if (regs.num_regs < 2) result |= 64; else if (! (regs.start[0] == 0 && regs.end[0] == 1)) result |= 64; else if (! (regs.start[1] == 0 && regs.end[1] == 0)) result |= 64; regfree (®ex); free (regs.start); free (regs.end); } #if 0 /* It would be nice to reject hosts whose regoff_t values are too narrow (including glibc on hosts with 64-bit ptrdiff_t and 32-bit int), but we should wait until glibc implements this feature. Otherwise, support for equivalence classes and multibyte collation symbols would always be broken except when compiling --without-included-regex. */ if (sizeof (regoff_t) < sizeof (ptrdiff_t) || sizeof (regoff_t) < sizeof (ssize_t)) result |= 64; #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_re_compile_pattern_working=yes else case e in #( e) gl_cv_func_re_compile_pattern_working=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_re_compile_pattern_working" >&5 printf "%s\n" "$gl_cv_func_re_compile_pattern_working" >&6; } case "$gl_cv_func_re_compile_pattern_working" in #( *yes) ac_use_included_regex=no;; #( *no) ac_use_included_regex=yes;; esac ;; *) as_fn_error $? "Invalid value for --with-included-regex: $with_included_regex" "$LINENO" 5 ;; esac if test $ac_use_included_regex = yes; then printf "%s\n" "#define _REGEX_INCLUDE_LIMITS_H 1" >>confdefs.h printf "%s\n" "#define _REGEX_LARGE_OFFSETS 1" >>confdefs.h printf "%s\n" "#define re_syntax_options rpl_re_syntax_options" >>confdefs.h printf "%s\n" "#define re_set_syntax rpl_re_set_syntax" >>confdefs.h printf "%s\n" "#define re_compile_pattern rpl_re_compile_pattern" >>confdefs.h printf "%s\n" "#define re_compile_fastmap rpl_re_compile_fastmap" >>confdefs.h printf "%s\n" "#define re_search rpl_re_search" >>confdefs.h printf "%s\n" "#define re_search_2 rpl_re_search_2" >>confdefs.h printf "%s\n" "#define re_match rpl_re_match" >>confdefs.h printf "%s\n" "#define re_match_2 rpl_re_match_2" >>confdefs.h printf "%s\n" "#define re_set_registers rpl_re_set_registers" >>confdefs.h printf "%s\n" "#define re_comp rpl_re_comp" >>confdefs.h printf "%s\n" "#define re_exec rpl_re_exec" >>confdefs.h printf "%s\n" "#define regcomp rpl_regcomp" >>confdefs.h printf "%s\n" "#define regexec rpl_regexec" >>confdefs.h printf "%s\n" "#define regerror rpl_regerror" >>confdefs.h printf "%s\n" "#define regfree rpl_regfree" >>confdefs.h fi if test $ac_use_included_regex = yes; then GL_COND_OBJ_REGEX_TRUE= GL_COND_OBJ_REGEX_FALSE='#' else GL_COND_OBJ_REGEX_TRUE='#' GL_COND_OBJ_REGEX_FALSE= fi : if test -z "${GL_COND_OBJ_REGEX_TRUE}" && test -z "${GL_COND_OBJ_REGEX_FALSE}"; then GL_COND_OBJ_REGEX_TRUE='#' GL_COND_OBJ_REGEX_FALSE='#' fi if test -z "$GL_COND_OBJ_REGEX_TRUE"; then : ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes then : printf "%s\n" "#define HAVE_LIBINTL_H 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include <ctype.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_isblank" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_ISBLANK $ac_have_decl" >>confdefs.h fi if test $ac_cv_func_secure_getenv = no; then HAVE_SECURE_GETENV=0 fi if test $HAVE_SECURE_GETENV = 0; then GL_COND_OBJ_SECURE_GETENV_TRUE= GL_COND_OBJ_SECURE_GETENV_FALSE='#' else GL_COND_OBJ_SECURE_GETENV_TRUE='#' GL_COND_OBJ_SECURE_GETENV_FALSE= fi : if test -z "${GL_COND_OBJ_SECURE_GETENV_TRUE}" && test -z "${GL_COND_OBJ_SECURE_GETENV_FALSE}"; then GL_COND_OBJ_SECURE_GETENV_TRUE='#' GL_COND_OBJ_SECURE_GETENV_FALSE='#' fi if test -z "$GL_COND_OBJ_SECURE_GETENV_TRUE"; then : ac_fn_c_check_func "$LINENO" "__secure_getenv" "ac_cv_func___secure_getenv" if test "x$ac_cv_func___secure_getenv" = xyes then : printf "%s\n" "#define HAVE___SECURE_GETENV 1" >>confdefs.h fi if test $ac_cv_func___secure_getenv = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for issetugid" >&5 printf %s "checking for issetugid... " >&6; } if test ${gl_cv_onwards_func_issetugid+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "issetugid" "ac_cv_have_decl_issetugid" "#include <unistd.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_issetugid" = xyes then : fi if test $ac_cv_have_decl_issetugid = yes; then ac_fn_c_check_func "$LINENO" "issetugid" "ac_cv_func_issetugid" if test "x$ac_cv_func_issetugid" = xyes then : fi if test $ac_cv_func_issetugid = yes; then gl_cv_onwards_func_issetugid=yes else gl_cv_onwards_func_issetugid='future OS version' fi else gl_cv_onwards_func_issetugid='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "issetugid" "ac_cv_func_issetugid" if test "x$ac_cv_func_issetugid" = xyes then : fi gl_cv_onwards_func_issetugid=$ac_cv_func_issetugid ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_issetugid" >&5 printf "%s\n" "$gl_cv_onwards_func_issetugid" >&6; } case "$gl_cv_onwards_func_issetugid" in future*) ac_cv_func_issetugid=no ;; *) ac_cv_func_issetugid=$gl_cv_onwards_func_issetugid ;; esac if test $ac_cv_func_issetugid = yes; then printf "%s\n" "#define HAVE_ISSETUGID 1" >>confdefs.h fi fi fi GL_GNULIB_SECURE_GETENV=1 printf "%s\n" "#define GNULIB_TEST_SECURE_GETENV 1" >>confdefs.h if test "$ac_cv_header_winsock2_h" = yes; then REPLACE_SELECT=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether select supports a 0 argument" >&5 printf %s "checking whether select supports a 0 argument... " >&6; } if test ${gl_cv_func_select_supports0+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on Interix. interix*) gl_cv_func_select_supports0="guessing no";; # Guess yes otherwise. *) gl_cv_func_select_supports0="guessing yes";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/time.h> #if HAVE_SYS_SELECT_H #include <sys/select.h> #endif int main () { struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 5; return select (0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &timeout) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_select_supports0=yes else case e in #( e) gl_cv_func_select_supports0=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_select_supports0" >&5 printf "%s\n" "$gl_cv_func_select_supports0" >&6; } case "$gl_cv_func_select_supports0" in *yes) ;; *) REPLACE_SELECT=1 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether select detects invalid fds" >&5 printf %s "checking whether select detects invalid fds... " >&6; } if test ${gl_cv_func_select_detects_ebadf+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_select_detects_ebadf="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_select_detects_ebadf="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_select_detects_ebadf="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_select_detects_ebadf="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/time.h> #if HAVE_SYS_SELECT_H # include <sys/select.h> #endif #include <unistd.h> #include <errno.h> $gl_mda_defines int main (void) { fd_set set; dup2(0, 16); FD_ZERO(&set); FD_SET(16, &set); close(16); struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 5; return select (17, &set, NULL, NULL, &timeout) != -1 || errno != EBADF; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_select_detects_ebadf=yes else case e in #( e) gl_cv_func_select_detects_ebadf=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_select_detects_ebadf" >&5 printf "%s\n" "$gl_cv_func_select_detects_ebadf" >&6; } case $gl_cv_func_select_detects_ebadf in *yes) ;; *) REPLACE_SELECT=1 ;; esac fi SELECT_LIB="$LIBSOCKET" if test $REPLACE_SELECT = 1; then case "$host_os" in mingw* | windows*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> int main () { MsgWaitForMultipleObjects (0, NULL, 0, 0, 0); return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : else case e in #( e) SELECT_LIB="$SELECT_LIB -luser32" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi LIB_SELECT="$LIB_SELECT" if test $REPLACE_SELECT = 1; then GL_COND_OBJ_SELECT_TRUE= GL_COND_OBJ_SELECT_FALSE='#' else GL_COND_OBJ_SELECT_TRUE='#' GL_COND_OBJ_SELECT_FALSE= fi : if test -z "${GL_COND_OBJ_SELECT_TRUE}" && test -z "${GL_COND_OBJ_SELECT_FALSE}"; then GL_COND_OBJ_SELECT_TRUE='#' GL_COND_OBJ_SELECT_FALSE='#' fi GL_GNULIB_SELECT=1 printf "%s\n" "#define GNULIB_TEST_SELECT 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (LC_ALL, NULL) is multithread-safe" >&5 printf %s "checking whether setlocale (LC_ALL, NULL) is multithread-safe... " >&6; } if test ${gl_cv_func_setlocale_null_all_mtsafe+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku. *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku*) gl_cv_func_setlocale_null_all_mtsafe=no ;; # Guess no on Cygwin < 3.4.6. cygwin*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED >= CYGWIN_VERSION_DLL_MAKE_COMBINED (3004, 6) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Lucky user" >/dev/null 2>&1 then : gl_cv_func_setlocale_null_all_mtsafe=yes else case e in #( e) gl_cv_func_setlocale_null_all_mtsafe=no ;; esac fi rm -rf conftest* ;; # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows. *-gnu* | gnu* | hpux* | irix* | solaris* | mingw* | windows*) gl_cv_func_setlocale_null_all_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_all_mtsafe" >&5 printf "%s\n" "$gl_cv_func_setlocale_null_all_mtsafe" >&6; } case "$host_os" in mingw* | windows*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_all_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_all_mtsafe" in *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;; *) SETLOCALE_NULL_ALL_MTSAFE=0 ;; esac printf "%s\n" "#define SETLOCALE_NULL_ALL_MTSAFE $SETLOCALE_NULL_ALL_MTSAFE" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (category, NULL) is multithread-safe" >&5 printf %s "checking whether setlocale (category, NULL) is multithread-safe... " >&6; } if test ${gl_cv_func_setlocale_null_one_mtsafe+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on OpenBSD, AIX. openbsd* | aix*) gl_cv_func_setlocale_null_one_mtsafe=no ;; # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows. *-gnu* | gnu* | *-musl* | midipix* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw* | windows*) gl_cv_func_setlocale_null_one_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_one_mtsafe" >&5 printf "%s\n" "$gl_cv_func_setlocale_null_one_mtsafe" >&6; } case "$host_os" in mingw* | windows*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_one_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_one_mtsafe" in *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;; *) SETLOCALE_NULL_ONE_MTSAFE=0 ;; esac printf "%s\n" "#define SETLOCALE_NULL_ONE_MTSAFE $SETLOCALE_NULL_ONE_MTSAFE" >>confdefs.h if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then case "$host_os" in mingw* | windows*) SETLOCALE_NULL_LIB= ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 printf %s "checking whether imported symbols can be declared weak... " >&6; } if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in cygwin* | mingw* | windows*) gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main (void) { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_have_weak="guessing yes" else case e in #( e) gl_cv_have_weak="guessing no" ;; esac fi rm -rf conftest* else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_have_weak=yes else case e in #( e) gl_cv_have_weak=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 printf "%s\n" "$gl_cv_have_weak" >&6; } case "$gl_cv_have_weak" in *yes) printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h ;; esac case "$gl_cv_have_weak" in *yes) SETLOCALE_NULL_LIB= ;; *) SETLOCALE_NULL_LIB="$LIBPTHREAD" ;; esac ;; esac else SETLOCALE_NULL_LIB= fi LIB_SETLOCALE_NULL="$SETLOCALE_NULL_LIB" if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then GL_COND_OBJ_SETLOCALE_LOCK_TRUE= GL_COND_OBJ_SETLOCALE_LOCK_FALSE='#' else GL_COND_OBJ_SETLOCALE_LOCK_TRUE='#' GL_COND_OBJ_SETLOCALE_LOCK_FALSE= fi : if test -z "${GL_COND_OBJ_SETLOCALE_LOCK_TRUE}" && test -z "${GL_COND_OBJ_SETLOCALE_LOCK_FALSE}"; then GL_COND_OBJ_SETLOCALE_LOCK_TRUE='#' GL_COND_OBJ_SETLOCALE_LOCK_FALSE='#' fi if test -z "$GL_COND_OBJ_SETLOCALE_LOCK_TRUE"; then : CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 printf %s "checking whether the -Werror option is usable... " >&6; } if test ${gl_cv_cc_vis_werror+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_vis_werror=yes else case e in #( e) gl_cv_cc_vis_werror=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_saved_CFLAGS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 printf %s "checking for simple visibility declarations... " >&6; } if test ${gl_cv_cc_visibility+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_visibility=yes else case e in #( e) gl_cv_cc_visibility=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_saved_CFLAGS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 printf "%s\n" "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h fi GL_GNULIB_SETLOCALE_NULL=1 printf "%s\n" "#define GNULIB_TEST_SETLOCALE_NULL 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for signbit macro" >&5 printf %s "checking for signbit macro... " >&6; } if test ${gl_cv_func_signbit+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_signbit="guessing yes" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_signbit="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_signbit="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> /* If signbit is defined as a function, don't use it, since calling it for 'float' or 'long double' arguments would involve conversions. If signbit is not declared at all but exists as a library function, don't use it, since the prototype may not match. If signbit is not declared at all but exists as a compiler built-in, don't use it, since it's preferable to use __builtin_signbit* (no warnings, no conversions). */ #ifndef signbit # error "signbit should be a macro" #endif #include <string.h> /* Global variables. Needed because GCC 4 constant-folds __builtin_signbitl (literal) but cannot constant-fold __builtin_signbitl (variable). */ float vf; double vd; long double vl; int main () { /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. So we use -p0f and -p0d instead. */ float p0f = 0.0f; float m0f = -p0f; double p0d = 0.0; double m0d = -p0d; /* On HP-UX 10.20, negating 0.0L does not yield -0.0L. So we use another constant expression instead. But that expression does not work on other platforms, such as when cross-compiling to PowerPC on Mac OS X 10.5. */ long double p0l = 0.0L; #if defined __hpux || defined __sgi long double m0l = -LDBL_MIN * LDBL_MIN; #else long double m0l = -p0l; #endif int result = 0; if (signbit (vf)) /* link check */ vf++; { float plus_inf = 1.0f / p0f; float minus_inf = -1.0f / p0f; if (!(!signbit (255.0f) && signbit (-255.0f) && !signbit (p0f) && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 1; } if (signbit (vd)) /* link check */ vd++; { double plus_inf = 1.0 / p0d; double minus_inf = -1.0 / p0d; if (!(!signbit (255.0) && signbit (-255.0) && !signbit (p0d) && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 2; } if (signbit (vl)) /* link check */ vl++; { long double plus_inf = 1.0L / p0l; long double minus_inf = -1.0L / p0l; if (signbit (255.0L)) result |= 4; if (!signbit (-255.0L)) result |= 4; if (signbit (p0l)) result |= 8; if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) result |= 16; if (signbit (plus_inf)) result |= 32; if (!signbit (minus_inf)) result |= 64; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_signbit=yes else case e in #( e) gl_cv_func_signbit=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_signbit" >&5 printf "%s\n" "$gl_cv_func_signbit" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for signbit compiler built-ins" >&5 printf %s "checking for signbit compiler built-ins... " >&6; } if test ${gl_cv_func_signbit_builtins+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_signbit_builtins="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_signbit_builtins="guessing yes" ;; # Guess yes on mingw, no on MSVC. mingw* | windows*) if test -n "$GCC"; then gl_cv_func_signbit_builtins="guessing yes" else gl_cv_func_signbit_builtins="guessing no" fi ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_signbit_builtins="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # define signbit(x) \ (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ __builtin_signbitf (x)) #else # error "signbit should be three compiler built-ins" #endif #include <string.h> /* Global variables. Needed because GCC 4 constant-folds __builtin_signbitl (literal) but cannot constant-fold __builtin_signbitl (variable). */ float vf; double vd; long double vl; int main () { /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. So we use -p0f and -p0d instead. */ float p0f = 0.0f; float m0f = -p0f; double p0d = 0.0; double m0d = -p0d; /* On HP-UX 10.20, negating 0.0L does not yield -0.0L. So we use another constant expression instead. But that expression does not work on other platforms, such as when cross-compiling to PowerPC on Mac OS X 10.5. */ long double p0l = 0.0L; #if defined __hpux || defined __sgi long double m0l = -LDBL_MIN * LDBL_MIN; #else long double m0l = -p0l; #endif int result = 0; if (signbit (vf)) /* link check */ vf++; { float plus_inf = 1.0f / p0f; float minus_inf = -1.0f / p0f; if (!(!signbit (255.0f) && signbit (-255.0f) && !signbit (p0f) && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 1; } if (signbit (vd)) /* link check */ vd++; { double plus_inf = 1.0 / p0d; double minus_inf = -1.0 / p0d; if (!(!signbit (255.0) && signbit (-255.0) && !signbit (p0d) && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 2; } if (signbit (vl)) /* link check */ vl++; { long double plus_inf = 1.0L / p0l; long double minus_inf = -1.0L / p0l; if (signbit (255.0L)) result |= 4; if (!signbit (-255.0L)) result |= 4; if (signbit (p0l)) result |= 8; if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) result |= 16; if (signbit (plus_inf)) result |= 32; if (!signbit (minus_inf)) result |= 64; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_signbit_builtins=yes else case e in #( e) gl_cv_func_signbit_builtins=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_signbit_builtins" >&5 printf "%s\n" "$gl_cv_func_signbit_builtins" >&6; } case "$gl_cv_func_signbit_builtins" in *yes) REPLACE_SIGNBIT_USING_BUILTINS=1 ;; *) case "$gl_cv_func_signbit" in *yes) ;; *) REPLACE_SIGNBIT=1 ;; esac ;; esac case "$host_os" in solaris*) REPLACE_SIGNBIT=1 ;; esac if test $REPLACE_SIGNBIT = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'float'" >&5 printf %s "checking where to find the sign bit in a 'float'... " >&6; } if test ${gl_cv_cc_float_signbit+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : gl_cv_cc_float_signbit="unknown" else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <stdio.h> #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; static memory_float plus = { 1.0f }; static memory_float minus = { -1.0f }; int main () { size_t j, k, i; unsigned int m; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; /* Find the different bit. */ k = 0; m = 0; for (j = 0; j < NWORDS; j++) { unsigned int x = plus.word[j] ^ minus.word[j]; if ((x & (x - 1)) || (x && m)) { /* More than one bit difference. */ fprintf (fp, "unknown"); fclose (fp); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); fclose (fp); return 3; } /* Now m = plus.word[k] ^ ~minus.word[k]. */ if (plus.word[k] & ~minus.word[k]) { /* Oh? The sign bit is set in the positive and cleared in the negative numbers? */ fprintf (fp, "unknown"); fclose (fp); return 4; } for (i = 0; ; i++) if ((m >> i) & 1) break; fprintf (fp, "word %d bit %d", (int) k, (int) i); if (fclose (fp) != 0) return 5; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_cc_float_signbit=`cat conftest.out` else case e in #( e) gl_cv_cc_float_signbit="unknown" ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f conftest.out ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_signbit" >&5 printf "%s\n" "$gl_cv_cc_float_signbit" >&6; } case "$gl_cv_cc_float_signbit" in word*bit*) word=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word.*bit //'` printf "%s\n" "#define FLT_SIGNBIT_WORD $word" >>confdefs.h printf "%s\n" "#define FLT_SIGNBIT_BIT $bit" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'double'" >&5 printf %s "checking where to find the sign bit in a 'double'... " >&6; } if test ${gl_cv_cc_double_signbit+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : gl_cv_cc_double_signbit="unknown" else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <stdio.h> #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_float; static memory_float plus = { 1.0 }; static memory_float minus = { -1.0 }; int main () { size_t j, k, i; unsigned int m; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; /* Find the different bit. */ k = 0; m = 0; for (j = 0; j < NWORDS; j++) { unsigned int x = plus.word[j] ^ minus.word[j]; if ((x & (x - 1)) || (x && m)) { /* More than one bit difference. */ fprintf (fp, "unknown"); fclose (fp); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); fclose (fp); return 3; } /* Now m = plus.word[k] ^ ~minus.word[k]. */ if (plus.word[k] & ~minus.word[k]) { /* Oh? The sign bit is set in the positive and cleared in the negative numbers? */ fprintf (fp, "unknown"); fclose (fp); return 4; } for (i = 0; ; i++) if ((m >> i) & 1) break; fprintf (fp, "word %d bit %d", (int) k, (int) i); if (fclose (fp) != 0) return 5; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_cc_double_signbit=`cat conftest.out` else case e in #( e) gl_cv_cc_double_signbit="unknown" ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f conftest.out ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_signbit" >&5 printf "%s\n" "$gl_cv_cc_double_signbit" >&6; } case "$gl_cv_cc_double_signbit" in word*bit*) word=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word.*bit //'` printf "%s\n" "#define DBL_SIGNBIT_WORD $word" >>confdefs.h printf "%s\n" "#define DBL_SIGNBIT_BIT $bit" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'long double'" >&5 printf %s "checking where to find the sign bit in a 'long double'... " >&6; } if test ${gl_cv_cc_long_double_signbit+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : gl_cv_cc_long_double_signbit="unknown" else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <stdio.h> #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { long double value; unsigned int word[NWORDS]; } memory_float; static memory_float plus = { 1.0L }; static memory_float minus = { -1.0L }; int main () { size_t j, k, i; unsigned int m; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; /* Find the different bit. */ k = 0; m = 0; for (j = 0; j < NWORDS; j++) { unsigned int x = plus.word[j] ^ minus.word[j]; if ((x & (x - 1)) || (x && m)) { /* More than one bit difference. */ fprintf (fp, "unknown"); fclose (fp); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); fclose (fp); return 3; } /* Now m = plus.word[k] ^ ~minus.word[k]. */ if (plus.word[k] & ~minus.word[k]) { /* Oh? The sign bit is set in the positive and cleared in the negative numbers? */ fprintf (fp, "unknown"); fclose (fp); return 4; } for (i = 0; ; i++) if ((m >> i) & 1) break; fprintf (fp, "word %d bit %d", (int) k, (int) i); if (fclose (fp) != 0) return 5; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_cc_long_double_signbit=`cat conftest.out` else case e in #( e) gl_cv_cc_long_double_signbit="unknown" ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f conftest.out ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_signbit" >&5 printf "%s\n" "$gl_cv_cc_long_double_signbit" >&6; } case "$gl_cv_cc_long_double_signbit" in word*bit*) word=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word.*bit //'` printf "%s\n" "#define LDBL_SIGNBIT_WORD $word" >>confdefs.h printf "%s\n" "#define LDBL_SIGNBIT_BIT $bit" >>confdefs.h ;; esac if test "$gl_cv_cc_float_signbit" = unknown; then ac_fn_check_decl "$LINENO" "copysignf" "ac_cv_have_decl_copysignf" "#include <math.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_copysignf" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_COPYSIGNF $ac_have_decl" >>confdefs.h if test "$ac_cv_have_decl_copysignf" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether copysignf can be used without linking with libm" >&5 printf %s "checking whether copysignf can be used without linking with libm... " >&6; } if test ${gl_cv_func_copysignf_no_libm+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> float x, y; int main (void) { return copysignf (x, y) < 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_copysignf_no_libm=yes else case e in #( e) gl_cv_func_copysignf_no_libm=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysignf_no_libm" >&5 printf "%s\n" "$gl_cv_func_copysignf_no_libm" >&6; } if test $gl_cv_func_copysignf_no_libm = yes; then printf "%s\n" "#define HAVE_COPYSIGNF_IN_LIBC 1" >>confdefs.h fi fi fi if test "$gl_cv_cc_double_signbit" = unknown; then ac_fn_check_decl "$LINENO" "copysign" "ac_cv_have_decl_copysign" "#include <math.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_copysign" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_COPYSIGN $ac_have_decl" >>confdefs.h if test "$ac_cv_have_decl_copysign" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether copysign can be used without linking with libm" >&5 printf %s "checking whether copysign can be used without linking with libm... " >&6; } if test ${gl_cv_func_copysign_no_libm+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> double x, y; int main (void) { return copysign (x, y) < 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_copysign_no_libm=yes else case e in #( e) gl_cv_func_copysign_no_libm=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysign_no_libm" >&5 printf "%s\n" "$gl_cv_func_copysign_no_libm" >&6; } if test $gl_cv_func_copysign_no_libm = yes; then printf "%s\n" "#define HAVE_COPYSIGN_IN_LIBC 1" >>confdefs.h fi fi fi if test "$gl_cv_cc_long_double_signbit" = unknown; then ac_fn_check_decl "$LINENO" "copysignl" "ac_cv_have_decl_copysignl" "#include <math.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_copysignl" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_COPYSIGNL $ac_have_decl" >>confdefs.h if test "$ac_cv_have_decl_copysignl" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether copysignl can be used without linking with libm" >&5 printf %s "checking whether copysignl can be used without linking with libm... " >&6; } if test ${gl_cv_func_copysignl_no_libm+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> long double x, y; int main (void) { return copysignl (x, y) < 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_copysignl_no_libm=yes else case e in #( e) gl_cv_func_copysignl_no_libm=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysignl_no_libm" >&5 printf "%s\n" "$gl_cv_func_copysignl_no_libm" >&6; } if test $gl_cv_func_copysignl_no_libm = yes; then printf "%s\n" "#define HAVE_COPYSIGNL_IN_LIBC 1" >>confdefs.h fi fi fi fi if test $REPLACE_SIGNBIT = 1; then GL_COND_OBJ_SIGNBIT3_TRUE= GL_COND_OBJ_SIGNBIT3_FALSE='#' else GL_COND_OBJ_SIGNBIT3_TRUE='#' GL_COND_OBJ_SIGNBIT3_FALSE= fi : if test -z "${GL_COND_OBJ_SIGNBIT3_TRUE}" && test -z "${GL_COND_OBJ_SIGNBIT3_FALSE}"; then GL_COND_OBJ_SIGNBIT3_TRUE='#' GL_COND_OBJ_SIGNBIT3_FALSE='#' fi GL_GNULIB_SIGNBIT=1 printf "%s\n" "#define GNULIB_TEST_SIGNBIT 1" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes then : printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5 printf %s "checking for SIZE_MAX... " >&6; } if test ${gl_cv_size_max+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_cv_size_max=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #ifdef SIZE_MAX Found it #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Found it" >/dev/null 2>&1 then : gl_cv_size_max=yes fi rm -rf conftest* if test $gl_cv_size_max != yes; then if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1" "#include <stddef.h> #include <limits.h>" then : else case e in #( e) size_t_bits_minus_1= ;; esac fi if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include <stddef.h>" then : else case e in #( e) fits_in_uint= ;; esac fi if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then if test $fits_in_uint = 1; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> extern size_t foo; extern unsigned long foo; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : fits_in_uint=0 fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" else gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" fi else gl_cv_size_max='((size_t)~(size_t)0)' fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5 printf "%s\n" "$gl_cv_size_max" >&6; } if test "$gl_cv_size_max" != yes; then printf "%s\n" "#define SIZE_MAX $gl_cv_size_max" >>confdefs.h fi ac_fn_check_decl "$LINENO" "sleep" "ac_cv_have_decl_sleep" "#include <unistd.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_sleep" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_SLEEP $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_sleep != yes; then HAVE_SLEEP=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working sleep" >&5 printf %s "checking for working sleep... " >&6; } if test ${gl_cv_func_sleep_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_sleep_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_sleep_works="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_sleep_works="guessing yes" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_sleep_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_sleep_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <unistd.h> #include <signal.h> static void handle_alarm (int sig) { if (sig != SIGALRM) _exit (2); } int main (void) { /* Failure to compile this test due to missing alarm is okay, since all such platforms (mingw) also lack sleep. */ unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */ unsigned int remaining; signal (SIGALRM, handle_alarm); alarm (1); remaining = sleep (pentecost); if (remaining > pentecost) return 3; if (remaining <= pentecost - 10) return 4; return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_sleep_works=yes else case e in #( e) gl_cv_func_sleep_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_sleep_works" >&5 printf "%s\n" "$gl_cv_func_sleep_works" >&6; } case "$gl_cv_func_sleep_works" in *yes) ;; *) REPLACE_SLEEP=1 ;; esac fi if test $HAVE_SLEEP = 0 || test $REPLACE_SLEEP = 1; then GL_COND_OBJ_SLEEP_TRUE= GL_COND_OBJ_SLEEP_FALSE='#' else GL_COND_OBJ_SLEEP_TRUE='#' GL_COND_OBJ_SLEEP_FALSE= fi : if test -z "${GL_COND_OBJ_SLEEP_TRUE}" && test -z "${GL_COND_OBJ_SLEEP_FALSE}"; then GL_COND_OBJ_SLEEP_TRUE='#' GL_COND_OBJ_SLEEP_FALSE='#' fi GL_GNULIB_SLEEP=1 printf "%s\n" "#define GNULIB_TEST_SLEEP 1" >>confdefs.h ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" " /* <sys/types.h> is not needed according to POSIX, but the <sys/socket.h> in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include <sys/types.h> #if HAVE_SYS_SOCKET_H # include <sys/socket.h> #elif HAVE_WS2TCPIP_H # include <ws2tcpip.h> #endif " if test "x$ac_cv_type_socklen_t" = xyes then : else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socklen_t equivalent" >&5 printf %s "checking for socklen_t equivalent... " >&6; } if test ${gl_cv_socklen_t_equiv+y} then : printf %s "(cached) " >&6 else case e in #( e) # Systems have either "struct sockaddr *" or # "void *" as the second argument to getpeername gl_cv_socklen_t_equiv= for arg2 in "struct sockaddr" void; do for t in int size_t "unsigned int" "long int" "unsigned long int"; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/socket.h> int getpeername (int, $arg2 *, $t *); int main (void) { $t len; getpeername (0, 0, &len); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_socklen_t_equiv="$t" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$gl_cv_socklen_t_equiv" != "" && break done test "$gl_cv_socklen_t_equiv" != "" && break done if test "$gl_cv_socklen_t_equiv" = ""; then as_fn_error $? "Cannot find a type to use in place of socklen_t" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_socklen_t_equiv" >&5 printf "%s\n" "$gl_cv_socklen_t_equiv" >&6; } printf "%s\n" "#define socklen_t $gl_cv_socklen_t_equiv" >>confdefs.h ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 printf %s "checking for ssize_t... " >&6; } if test ${gl_cv_ssize_t+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> int main (void) { int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_ssize_t=yes else case e in #( e) gl_cv_ssize_t=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_ssize_t" >&5 printf "%s\n" "$gl_cv_ssize_t" >&6; } if test $gl_cv_ssize_t = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether size_t is wider than 'long'" >&5 printf %s "checking whether size_t is wider than 'long'... " >&6; } if test ${gl_cv_size_t_large+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> typedef int array [2 * (sizeof (size_t) > sizeof (long)) - 1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_size_t_large=yes else case e in #( e) gl_cv_size_t_large=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_t_large" >&5 printf "%s\n" "$gl_cv_size_t_large" >&6; } if test $gl_cv_size_t_large = yes; then gl_def_ssize_t='long long' else gl_def_ssize_t='long' fi printf "%s\n" "#define ssize_t $gl_def_ssize_t" >>confdefs.h fi case "$host_os" in mingw* | windows*) REPLACE_STAT=1 ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat handles trailing slashes on files" >&5 printf %s "checking whether stat handles trailing slashes on files... " >&6; } if test ${gl_cv_func_stat_file_slash+y} then : printf %s "(cached) " >&6 else case e in #( e) touch conftest.tmp # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.tmp conftest.lnk fi if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_stat_file_slash="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_stat_file_slash="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/stat.h> int main (void) { int result = 0; struct stat st; if (!stat ("conftest.tmp/", &st)) result |= 1; #if HAVE_LSTAT if (!stat ("conftest.lnk/", &st)) result |= 2; #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_stat_file_slash=yes else case e in #( e) gl_cv_func_stat_file_slash=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f conftest.tmp conftest.lnk ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_stat_file_slash" >&5 printf "%s\n" "$gl_cv_func_stat_file_slash" >&6; } case $gl_cv_func_stat_file_slash in *no) REPLACE_STAT=1 printf "%s\n" "#define REPLACE_FUNC_STAT_FILE 1" >>confdefs.h ;; esac case $host_os in darwin* | solaris*) REPLACE_FSTAT=1 ;; esac ;; esac if test $REPLACE_STAT = 1; then GL_COND_OBJ_STAT_TRUE= GL_COND_OBJ_STAT_FALSE='#' else GL_COND_OBJ_STAT_TRUE='#' GL_COND_OBJ_STAT_FALSE= fi : if test -z "${GL_COND_OBJ_STAT_TRUE}" && test -z "${GL_COND_OBJ_STAT_FALSE}"; then GL_COND_OBJ_STAT_TRUE='#' GL_COND_OBJ_STAT_FALSE='#' fi if test -z "$GL_COND_OBJ_STAT_TRUE"; then : case "$host_os" in mingw* | windows*) gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext" ;; esac : fi GL_GNULIB_STAT=1 printf "%s\n" "#define GNULIB_TEST_STAT 1" >>confdefs.h ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct stat.st_atim is of type struct timespec" >&5 printf %s "checking whether struct stat.st_atim is of type struct timespec... " >&6; } if test ${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/stat.h> #if HAVE_SYS_TIME_H # include <sys/time.h> #endif #include <time.h> struct timespec ts; struct stat st; int main (void) { st.st_atim = ts; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes else case e in #( e) ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5 printf "%s\n" "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; } if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then printf "%s\n" "#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1" >>confdefs.h fi else case e in #( e) ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1" >>confdefs.h else case e in #( e) ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1" >>confdefs.h else case e in #( e) ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1" >>confdefs.h fi ;; esac fi ;; esac fi ;; esac fi ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimespec.tv_nsec" "ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC 1" >>confdefs.h else case e in #( e) ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimensec" "ac_cv_member_struct_stat_st_birthtimensec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_birthtimensec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC 1" >>confdefs.h else case e in #( e) ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtim.tv_nsec" "ac_cv_member_struct_stat_st_birthtim_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_birthtim_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC 1" >>confdefs.h fi ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bool, true, false" >&5 printf %s "checking for bool, true, false... " >&6; } if test ${gl_cv_c_bool+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if true == false #error "true == false" #endif extern bool b; bool b = true == false; _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_c_bool=yes else case e in #( e) gl_cv_c_bool=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_bool" >&5 printf "%s\n" "$gl_cv_c_bool" >&6; } if test "$gl_cv_c_bool" = yes; then printf "%s\n" "#define HAVE_C_BOOL 1" >>confdefs.h fi if test $ac_cv_header_stdckdint_h = yes; then GL_GENERATE_STDCKDINT_H=false else GL_GENERATE_STDCKDINT_H=true fi case "$GL_GENERATE_STDCKDINT_H" in false) STDCKDINT_H='' ;; true) if test -z "$STDCKDINT_H"; then STDCKDINT_H="${gl_source_base_prefix}stdckdint.h" fi ;; *) echo "*** GL_GENERATE_STDCKDINT_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_STDCKDINT_H; then GL_GENERATE_STDCKDINT_H_TRUE= GL_GENERATE_STDCKDINT_H_FALSE='#' else GL_GENERATE_STDCKDINT_H_TRUE='#' GL_GENERATE_STDCKDINT_H_FALSE= fi : if test -z "${GL_GENERATE_STDCKDINT_H_TRUE}" && test -z "${GL_GENERATE_STDCKDINT_H_FALSE}"; then GL_GENERATE_STDCKDINT_H_TRUE='#' GL_GENERATE_STDCKDINT_H_FALSE='#' fi case "$GL_GENERATE_STDDEF_H" in false) STDDEF_H='' ;; true) if test -z "$STDDEF_H"; then STDDEF_H="${gl_source_base_prefix}stddef.h" fi ;; *) echo "*** GL_GENERATE_STDDEF_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_STDDEF_H; then GL_GENERATE_STDDEF_H_TRUE= GL_GENERATE_STDDEF_H_FALSE='#' else GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE= fi : if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE='#' fi case "$GL_GENERATE_STDINT_H" in false) STDINT_H='' ;; true) if test -z "$STDINT_H"; then STDINT_H="${gl_source_base_prefix}stdint.h" fi ;; *) echo "*** GL_GENERATE_STDINT_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_STDINT_H; then GL_GENERATE_STDINT_H_TRUE= GL_GENERATE_STDINT_H_FALSE='#' else GL_GENERATE_STDINT_H_TRUE='#' GL_GENERATE_STDINT_H_FALSE= fi : if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then GL_GENERATE_STDINT_H_TRUE='#' GL_GENERATE_STDINT_H_FALSE='#' fi case "$GL_GENERATE_LIMITS_H" in false) LIMITS_H='' ;; true) if test -z "$LIMITS_H"; then LIMITS_H="${gl_source_base_prefix}limits.h" fi ;; *) echo "*** GL_GENERATE_LIMITS_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_LIMITS_H; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi : if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE='#' fi if test $REPLACE_STDIO_READ_FUNCS = 1; then GL_COND_OBJ_STDIO_READ_TRUE= GL_COND_OBJ_STDIO_READ_FALSE='#' else GL_COND_OBJ_STDIO_READ_TRUE='#' GL_COND_OBJ_STDIO_READ_FALSE= fi : if test -z "${GL_COND_OBJ_STDIO_READ_TRUE}" && test -z "${GL_COND_OBJ_STDIO_READ_FALSE}"; then GL_COND_OBJ_STDIO_READ_TRUE='#' GL_COND_OBJ_STDIO_READ_FALSE='#' fi if test $REPLACE_STDIO_WRITE_FUNCS = 1; then GL_COND_OBJ_STDIO_WRITE_TRUE= GL_COND_OBJ_STDIO_WRITE_FALSE='#' else GL_COND_OBJ_STDIO_WRITE_TRUE='#' GL_COND_OBJ_STDIO_WRITE_FALSE= fi : if test -z "${GL_COND_OBJ_STDIO_WRITE_TRUE}" && test -z "${GL_COND_OBJ_STDIO_WRITE_FALSE}"; then GL_COND_OBJ_STDIO_WRITE_TRUE='#' GL_COND_OBJ_STDIO_WRITE_FALSE='#' fi GL_GNULIB_FSCANF=1 printf "%s\n" "#define GNULIB_TEST_FSCANF 1" >>confdefs.h printf "%s\n" "#define GNULIB_FSCANF 1" >>confdefs.h GL_GNULIB_SCANF=1 printf "%s\n" "#define GNULIB_TEST_SCANF 1" >>confdefs.h printf "%s\n" "#define GNULIB_SCANF 1" >>confdefs.h GL_GNULIB_FGETC=1 printf "%s\n" "#define GNULIB_TEST_FGETC 1" >>confdefs.h GL_GNULIB_GETC=1 printf "%s\n" "#define GNULIB_TEST_GETC 1" >>confdefs.h GL_GNULIB_GETCHAR=1 printf "%s\n" "#define GNULIB_TEST_GETCHAR 1" >>confdefs.h GL_GNULIB_FGETS=1 printf "%s\n" "#define GNULIB_TEST_FGETS 1" >>confdefs.h GL_GNULIB_FREAD=1 printf "%s\n" "#define GNULIB_TEST_FREAD 1" >>confdefs.h GL_GNULIB_FPRINTF=1 printf "%s\n" "#define GNULIB_TEST_FPRINTF 1" >>confdefs.h GL_GNULIB_PRINTF=1 printf "%s\n" "#define GNULIB_TEST_PRINTF 1" >>confdefs.h GL_GNULIB_VFPRINTF=1 printf "%s\n" "#define GNULIB_TEST_VFPRINTF 1" >>confdefs.h GL_GNULIB_VPRINTF=1 printf "%s\n" "#define GNULIB_TEST_VPRINTF 1" >>confdefs.h GL_GNULIB_FPUTC=1 printf "%s\n" "#define GNULIB_TEST_FPUTC 1" >>confdefs.h GL_GNULIB_PUTC=1 printf "%s\n" "#define GNULIB_TEST_PUTC 1" >>confdefs.h GL_GNULIB_PUTCHAR=1 printf "%s\n" "#define GNULIB_TEST_PUTCHAR 1" >>confdefs.h GL_GNULIB_FPUTS=1 printf "%s\n" "#define GNULIB_TEST_FPUTS 1" >>confdefs.h GL_GNULIB_PUTS=1 printf "%s\n" "#define GNULIB_TEST_PUTS 1" >>confdefs.h GL_GNULIB_FWRITE=1 printf "%s\n" "#define GNULIB_TEST_FWRITE 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" if test "x$ac_cv_func_strcasecmp" = xyes then : printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h fi if test $ac_cv_func_strcasecmp = no; then HAVE_STRCASECMP=0 fi ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp" if test "x$ac_cv_func_strncasecmp" = xyes then : printf "%s\n" "#define HAVE_STRNCASECMP 1" >>confdefs.h fi if test $ac_cv_func_strncasecmp = yes; then HAVE_STRNCASECMP=1 else HAVE_STRNCASECMP=0 fi ac_fn_check_decl "$LINENO" "strncasecmp" "ac_cv_have_decl_strncasecmp" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_strncasecmp" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_STRNCASECMP $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_strncasecmp = no; then HAVE_DECL_STRNCASECMP=0 fi if test $HAVE_STRCASECMP = 0; then GL_COND_OBJ_STRCASECMP_TRUE= GL_COND_OBJ_STRCASECMP_FALSE='#' else GL_COND_OBJ_STRCASECMP_TRUE='#' GL_COND_OBJ_STRCASECMP_FALSE= fi : if test -z "${GL_COND_OBJ_STRCASECMP_TRUE}" && test -z "${GL_COND_OBJ_STRCASECMP_FALSE}"; then GL_COND_OBJ_STRCASECMP_TRUE='#' GL_COND_OBJ_STRCASECMP_FALSE='#' fi if test -z "$GL_COND_OBJ_STRCASECMP_TRUE"; then : : fi if test $HAVE_STRNCASECMP = 0; then GL_COND_OBJ_STRNCASECMP_TRUE= GL_COND_OBJ_STRNCASECMP_FALSE='#' else GL_COND_OBJ_STRNCASECMP_TRUE='#' GL_COND_OBJ_STRNCASECMP_FALSE= fi : if test -z "${GL_COND_OBJ_STRNCASECMP_TRUE}" && test -z "${GL_COND_OBJ_STRNCASECMP_FALSE}"; then GL_COND_OBJ_STRNCASECMP_TRUE='#' GL_COND_OBJ_STRNCASECMP_FALSE='#' fi if test -z "$GL_COND_OBJ_STRNCASECMP_TRUE"; then : : fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for strchrnul" >&5 printf %s "checking for strchrnul... " >&6; } if test ${gl_cv_onwards_func_strchrnul+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "strchrnul" "ac_cv_have_decl_strchrnul" "#include <string.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_strchrnul" = xyes then : fi if test $ac_cv_have_decl_strchrnul = yes; then ac_fn_c_check_func "$LINENO" "strchrnul" "ac_cv_func_strchrnul" if test "x$ac_cv_func_strchrnul" = xyes then : fi if test $ac_cv_func_strchrnul = yes; then gl_cv_onwards_func_strchrnul=yes else gl_cv_onwards_func_strchrnul='future OS version' fi else gl_cv_onwards_func_strchrnul='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "strchrnul" "ac_cv_func_strchrnul" if test "x$ac_cv_func_strchrnul" = xyes then : fi gl_cv_onwards_func_strchrnul=$ac_cv_func_strchrnul ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_strchrnul" >&5 printf "%s\n" "$gl_cv_onwards_func_strchrnul" >&6; } case "$gl_cv_onwards_func_strchrnul" in future*) ac_cv_func_strchrnul=no ;; *) ac_cv_func_strchrnul=$gl_cv_onwards_func_strchrnul ;; esac if test $ac_cv_func_strchrnul = yes; then printf "%s\n" "#define HAVE_STRCHRNUL 1" >>confdefs.h fi if test $ac_cv_func_strchrnul = no; then HAVE_STRCHRNUL=0 case "$gl_cv_onwards_func_strchrnul" in future*) REPLACE_STRCHRNUL=1 ;; esac else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strchrnul works" >&5 printf %s "checking whether strchrnul works... " >&6; } if test ${gl_cv_func_strchrnul_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 9) Lucky user #endif #else Lucky user #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Lucky user" >/dev/null 2>&1 then : gl_cv_func_strchrnul_works="guessing yes" else case e in #( e) gl_cv_func_strchrnul_works="guessing no" ;; esac fi rm -rf conftest* else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> /* for strchrnul */ int main (void) { const char *buf = "a"; return strchrnul (buf, 'b') != buf + 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_strchrnul_works=yes else case e in #( e) gl_cv_func_strchrnul_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strchrnul_works" >&5 printf "%s\n" "$gl_cv_func_strchrnul_works" >&6; } case "$gl_cv_func_strchrnul_works" in *yes) ;; *) REPLACE_STRCHRNUL=1 ;; esac fi if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then GL_COND_OBJ_STRCHRNUL_TRUE= GL_COND_OBJ_STRCHRNUL_FALSE='#' else GL_COND_OBJ_STRCHRNUL_TRUE='#' GL_COND_OBJ_STRCHRNUL_FALSE= fi : if test -z "${GL_COND_OBJ_STRCHRNUL_TRUE}" && test -z "${GL_COND_OBJ_STRCHRNUL_FALSE}"; then GL_COND_OBJ_STRCHRNUL_TRUE='#' GL_COND_OBJ_STRCHRNUL_FALSE='#' fi if test -z "$GL_COND_OBJ_STRCHRNUL_TRUE"; then : : fi GL_GNULIB_STRCHRNUL=1 printf "%s\n" "#define GNULIB_TEST_STRCHRNUL 1" >>confdefs.h if test $gl_cv_func_malloc_posix != yes; then REPLACE_STRDUP=1 fi if test $ac_cv_have_decl_strdup = no; then HAVE_DECL_STRDUP=0 fi if test $REPLACE_STRDUP = 1; then GL_COND_OBJ_STRDUP_TRUE= GL_COND_OBJ_STRDUP_FALSE='#' else GL_COND_OBJ_STRDUP_TRUE='#' GL_COND_OBJ_STRDUP_FALSE= fi : if test -z "${GL_COND_OBJ_STRDUP_TRUE}" && test -z "${GL_COND_OBJ_STRDUP_FALSE}"; then GL_COND_OBJ_STRDUP_TRUE='#' GL_COND_OBJ_STRDUP_FALSE='#' fi if test -z "$GL_COND_OBJ_STRDUP_TRUE"; then : : fi GL_GNULIB_STRDUP=1 printf "%s\n" "#define GNULIB_TEST_STRDUP 1" >>confdefs.h if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5 printf %s "checking for working strerror function... " >&6; } if test ${gl_cv_func_working_strerror+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_strerror="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> int main (void) { if (!*strerror (-2)) return 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_working_strerror=yes else case e in #( e) gl_cv_func_working_strerror=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_strerror" >&5 printf "%s\n" "$gl_cv_func_working_strerror" >&6; } case "$gl_cv_func_working_strerror" in *yes) ;; *) REPLACE_STRERROR=1 ;; esac case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR=1 ;; esac else REPLACE_STRERROR=1 fi if test $REPLACE_STRERROR = 1; then GL_COND_OBJ_STRERROR_TRUE= GL_COND_OBJ_STRERROR_FALSE='#' else GL_COND_OBJ_STRERROR_TRUE='#' GL_COND_OBJ_STRERROR_FALSE= fi : if test -z "${GL_COND_OBJ_STRERROR_TRUE}" && test -z "${GL_COND_OBJ_STRERROR_FALSE}"; then GL_COND_OBJ_STRERROR_TRUE='#' GL_COND_OBJ_STRERROR_FALSE='#' fi printf "%s\n" "#define GNULIB_STRERROR 1" >>confdefs.h GL_GNULIB_STRERROR=1 printf "%s\n" "#define GNULIB_TEST_STRERROR 1" >>confdefs.h if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then GL_COND_OBJ_STRERROR_OVERRIDE_TRUE= GL_COND_OBJ_STRERROR_OVERRIDE_FALSE='#' else GL_COND_OBJ_STRERROR_OVERRIDE_TRUE='#' GL_COND_OBJ_STRERROR_OVERRIDE_FALSE= fi : if test -z "${GL_COND_OBJ_STRERROR_OVERRIDE_TRUE}" && test -z "${GL_COND_OBJ_STRERROR_OVERRIDE_FALSE}"; then GL_COND_OBJ_STRERROR_OVERRIDE_TRUE='#' GL_COND_OBJ_STRERROR_OVERRIDE_FALSE='#' fi if test -z "$GL_COND_OBJ_STRERROR_OVERRIDE_TRUE"; then : if test $ac_cv_header_sys_socket_h != yes; then ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes then : printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h fi fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi fi if test $ac_cv_have_decl_strndup = no; then HAVE_DECL_STRNDUP=0 fi if test $ac_cv_func_strndup = yes; then HAVE_STRNDUP=1 # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working strndup" >&5 printf %s "checking for working strndup... " >&6; } if test ${gl_cv_func_strndup_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case $host_os in aix | aix[3-6]*) gl_cv_func_strndup_works="guessing no";; *) gl_cv_func_strndup_works="guessing yes";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> #include <stdlib.h> int main (void) { #if !HAVE_DECL_STRNDUP extern #ifdef __cplusplus "C" #endif char *strndup (const char *, size_t); #endif int result; char *s; s = strndup ("some longer string", 15); free (s); s = strndup ("shorter string", 13); result = s[13] != '\0'; free (s); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_strndup_works=yes else case e in #( e) gl_cv_func_strndup_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strndup_works" >&5 printf "%s\n" "$gl_cv_func_strndup_works" >&6; } case $gl_cv_func_strndup_works in *no) REPLACE_STRNDUP=1 ;; esac else HAVE_STRNDUP=0 fi if test $HAVE_STRNDUP = 0 || test $REPLACE_STRNDUP = 1; then GL_COND_OBJ_STRNDUP_TRUE= GL_COND_OBJ_STRNDUP_FALSE='#' else GL_COND_OBJ_STRNDUP_TRUE='#' GL_COND_OBJ_STRNDUP_FALSE= fi : if test -z "${GL_COND_OBJ_STRNDUP_TRUE}" && test -z "${GL_COND_OBJ_STRNDUP_FALSE}"; then GL_COND_OBJ_STRNDUP_TRUE='#' GL_COND_OBJ_STRNDUP_FALSE='#' fi GL_GNULIB_STRNDUP=1 printf "%s\n" "#define GNULIB_TEST_STRNDUP 1" >>confdefs.h if test $ac_cv_have_decl_strnlen = no; then HAVE_DECL_STRNLEN=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working strnlen" >&5 printf %s "checking for working strnlen... " >&6; } if test ${ac_cv_func_strnlen_working+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : # Guess no on AIX systems, yes otherwise. case "$host_os" in aix*) ac_cv_func_strnlen_working=no;; *) ac_cv_func_strnlen_working=yes;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { #define S "foobar" #define S_LEN (sizeof S - 1) /* At least one implementation is buggy: that of AIX 4.3 would give strnlen (S, 1) == 3. */ int i; for (i = 0; i < S_LEN + 1; ++i) { int expected = i <= S_LEN ? i : S_LEN; if (strnlen (S, i) != expected) return 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_strnlen_working=yes else case e in #( e) ac_cv_func_strnlen_working=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strnlen_working" >&5 printf "%s\n" "$ac_cv_func_strnlen_working" >&6; } test $ac_cv_func_strnlen_working = no && : if test $ac_cv_func_strnlen_working = no; then REPLACE_STRNLEN=1 fi fi if test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1; then GL_COND_OBJ_STRNLEN_TRUE= GL_COND_OBJ_STRNLEN_FALSE='#' else GL_COND_OBJ_STRNLEN_TRUE='#' GL_COND_OBJ_STRNLEN_FALSE= fi : if test -z "${GL_COND_OBJ_STRNLEN_TRUE}" && test -z "${GL_COND_OBJ_STRNLEN_FALSE}"; then GL_COND_OBJ_STRNLEN_TRUE='#' GL_COND_OBJ_STRNLEN_FALSE='#' fi if test -z "$GL_COND_OBJ_STRNLEN_TRUE"; then : : fi GL_GNULIB_STRNLEN=1 printf "%s\n" "#define GNULIB_TEST_STRNLEN 1" >>confdefs.h if test $ac_cv_func_strptime != yes; then HAVE_STRPTIME=0 fi if test $HAVE_STRPTIME = 0; then GL_COND_OBJ_STRPTIME_TRUE= GL_COND_OBJ_STRPTIME_FALSE='#' else GL_COND_OBJ_STRPTIME_TRUE='#' GL_COND_OBJ_STRPTIME_FALSE= fi : if test -z "${GL_COND_OBJ_STRPTIME_TRUE}" && test -z "${GL_COND_OBJ_STRPTIME_FALSE}"; then GL_COND_OBJ_STRPTIME_TRUE='#' GL_COND_OBJ_STRPTIME_FALSE='#' fi if test -z "$GL_COND_OBJ_STRPTIME_TRUE"; then : : fi GL_GNULIB_STRPTIME=1 printf "%s\n" "#define GNULIB_TEST_STRPTIME 1" >>confdefs.h if test $HAVE_STRTOD = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strtod obeys C99" >&5 printf %s "checking whether strtod obeys C99... " >&6; } if test ${gl_cv_func_strtod_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8) || (__GLIBC__ > 2)) \ && !defined __UCLIBC__ Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Lucky user" >/dev/null 2>&1 then : gl_cv_func_strtod_works="guessing yes" else case e in #( e) case "$host_os" in # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_strtod_works="guessing yes" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_strtod_works="guessing yes" ;; *) gl_cv_func_strtod_works="$gl_cross_guess_normal" ;; esac ;; esac fi rm -rf conftest* else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <math.h> #include <errno.h> /* Compare two numbers with ==. This is a separate function because IRIX 6.5 "cc -O" miscompiles an 'x == x' test. */ static int numeric_equal (double x, double y) { return x == y; } int main (void) { int result = 0; { /* In some old versions of Linux (2000 or before), strtod mis-parses strings with leading '+'. */ const char *string = " +69"; char *term; double value = strtod (string, &term); if (value != 69 || term != (string + 4)) result |= 1; } { /* Under Solaris 2.4, strtod returns the wrong value for the terminating character under some conditions. */ const char *string = "NaN"; char *term; strtod (string, &term); if (term != string && *(term - 1) == 0) result |= 2; } { /* Older glibc and Cygwin mis-parse "-0x". */ const char *string = "-0x"; char *term; double value = strtod (string, &term); double zero = 0.0; if (1.0 / value != -1.0 / zero || term != (string + 2)) result |= 4; } { /* Many platforms do not parse hex floats. */ const char *string = "0XaP+1"; char *term; double value = strtod (string, &term); if (value != 20.0 || term != (string + 6)) result |= 8; } { /* Many platforms do not parse infinities. HP-UX 11.31 parses inf, but mistakenly sets errno. */ const char *string = "inf"; char *term; double value; errno = 0; value = strtod (string, &term); if (value != HUGE_VAL || term != (string + 3) || errno) result |= 16; } { /* glibc 2.7 and cygwin 1.5.24 misparse "nan()". */ const char *string = "nan()"; char *term; double value = strtod (string, &term); if (numeric_equal (value, value) || term != (string + 5)) result |= 32; } { /* darwin 10.6.1 misparses "nan(". */ const char *string = "nan("; char *term; double value = strtod (string, &term); if (numeric_equal (value, value) || term != (string + 3)) result |= 64; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_strtod_works=yes else case e in #( e) gl_cv_func_strtod_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strtod_works" >&5 printf "%s\n" "$gl_cv_func_strtod_works" >&6; } case "$gl_cv_func_strtod_works" in *yes) ;; *) REPLACE_STRTOD=1 ;; esac fi if test $HAVE_STRTOD = 0 || test $REPLACE_STRTOD = 1; then GL_COND_OBJ_STRTOD_TRUE= GL_COND_OBJ_STRTOD_FALSE='#' else GL_COND_OBJ_STRTOD_TRUE='#' GL_COND_OBJ_STRTOD_FALSE= fi : if test -z "${GL_COND_OBJ_STRTOD_TRUE}" && test -z "${GL_COND_OBJ_STRTOD_FALSE}"; then GL_COND_OBJ_STRTOD_TRUE='#' GL_COND_OBJ_STRTOD_FALSE='#' fi if test -z "$GL_COND_OBJ_STRTOD_TRUE"; then : if test $gl_cv_func_ldexp_no_libm = yes; then printf "%s\n" "#define HAVE_LDEXP_IN_LIBC 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo" >&5 printf %s "checking for nl_langinfo... " >&6; } if test ${gl_cv_onwards_func_nl_langinfo+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "nl_langinfo" "ac_cv_have_decl_nl_langinfo" "#include <langinfo.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_nl_langinfo" = xyes then : fi if test $ac_cv_have_decl_nl_langinfo = yes; then ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" if test "x$ac_cv_func_nl_langinfo" = xyes then : fi if test $ac_cv_func_nl_langinfo = yes; then gl_cv_onwards_func_nl_langinfo=yes else gl_cv_onwards_func_nl_langinfo='future OS version' fi else gl_cv_onwards_func_nl_langinfo='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" if test "x$ac_cv_func_nl_langinfo" = xyes then : fi gl_cv_onwards_func_nl_langinfo=$ac_cv_func_nl_langinfo ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_nl_langinfo" >&5 printf "%s\n" "$gl_cv_onwards_func_nl_langinfo" >&6; } case "$gl_cv_onwards_func_nl_langinfo" in future*) ac_cv_func_nl_langinfo=no ;; *) ac_cv_func_nl_langinfo=$gl_cv_onwards_func_nl_langinfo ;; esac if test $ac_cv_func_nl_langinfo = yes; then printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h fi fi GL_GNULIB_STRTOD=1 printf "%s\n" "#define GNULIB_TEST_STRTOD 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "strtok_r" "ac_cv_func_strtok_r" if test "x$ac_cv_func_strtok_r" = xyes then : printf "%s\n" "#define HAVE_STRTOK_R 1" >>confdefs.h fi if test $ac_cv_func_strtok_r = yes; then HAVE_STRTOK_R=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strtok_r works" >&5 printf %s "checking whether strtok_r works... " >&6; } if test ${gl_cv_func_strtok_r_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_func_strtok_r_works="guessing no" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_strtok_r_works="guessing yes" ;; *) gl_cv_func_strtok_r_works="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __OPTIMIZE__ # define __OPTIMIZE__ 1 #endif #undef __OPTIMIZE_SIZE__ #undef __NO_INLINE__ #include <stdlib.h> #include <string.h> int main (void) { static const char dummy[] = "\177\01a"; char delimiters[] = "xxxxxxxx"; char *save_ptr = (char *) dummy; strtok_r (delimiters, "x", &save_ptr); strtok_r (NULL, "x", &save_ptr); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_strtok_r_works=yes else case e in #( e) gl_cv_func_strtok_r_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strtok_r_works" >&5 printf "%s\n" "$gl_cv_func_strtok_r_works" >&6; } case "$gl_cv_func_strtok_r_works" in *no) UNDEFINE_STRTOK_R=1 ;; esac else HAVE_STRTOK_R=0 fi if test $ac_cv_have_decl_strtok_r = no; then HAVE_DECL_STRTOK_R=0 fi if test $HAVE_STRTOK_R = 0 || test $REPLACE_STRTOK_R = 1; then GL_COND_OBJ_STRTOK_R_TRUE= GL_COND_OBJ_STRTOK_R_FALSE='#' else GL_COND_OBJ_STRTOK_R_TRUE='#' GL_COND_OBJ_STRTOK_R_FALSE= fi : if test -z "${GL_COND_OBJ_STRTOK_R_TRUE}" && test -z "${GL_COND_OBJ_STRTOK_R_FALSE}"; then GL_COND_OBJ_STRTOK_R_TRUE='#' GL_COND_OBJ_STRTOK_R_FALSE='#' fi if test -z "$GL_COND_OBJ_STRTOK_R_TRUE"; then : : fi GL_GNULIB_STRTOK_R=1 printf "%s\n" "#define GNULIB_TEST_STRTOK_R 1" >>confdefs.h if test $ac_cv_header_sysexits_h = yes; then HAVE_SYSEXITS_H=1 if test $gl_cv_have_include_next = yes; then gl_cv_next_sysexits_h='<'sysexits.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sysexits.h>" >&5 printf %s "checking absolute name of <sysexits.h>... " >&6; } if test ${gl_cv_next_sysexits_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_sysexits_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sysexits.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sysexits.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sysexits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sysexits_h gl_cv_next_sysexits_h='"'$gl_header'"' else gl_cv_next_sysexits_h='<'sysexits.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sysexits_h" >&5 printf "%s\n" "$gl_cv_next_sysexits_h" >&6; } fi NEXT_SYSEXITS_H=$gl_cv_next_sysexits_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sysexits.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sysexits_h fi NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H=$gl_next_as_first_directive cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sysexits.h> int main (void) { switch (0) { case EX_OK: case EX_USAGE: case EX_DATAERR: case EX_NOINPUT: case EX_NOUSER: case EX_NOHOST: case EX_UNAVAILABLE: case EX_SOFTWARE: case EX_OSERR: case EX_OSFILE: case EX_CANTCREAT: case EX_IOERR: case EX_TEMPFAIL: case EX_PROTOCOL: case EX_NOPERM: case EX_CONFIG: break; } ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : GL_GENERATE_SYSEXITS_H=false else case e in #( e) GL_GENERATE_SYSEXITS_H=true ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext else HAVE_SYSEXITS_H=0 GL_GENERATE_SYSEXITS_H=true fi case "$GL_GENERATE_SYSEXITS_H" in false) SYSEXITS_H='' ;; true) if test -z "$SYSEXITS_H"; then SYSEXITS_H="${gl_source_base_prefix}sysexits.h" fi ;; *) echo "*** GL_GENERATE_SYSEXITS_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_SYSEXITS_H; then GL_GENERATE_SYSEXITS_H_TRUE= GL_GENERATE_SYSEXITS_H_FALSE='#' else GL_GENERATE_SYSEXITS_H_TRUE='#' GL_GENERATE_SYSEXITS_H_FALSE= fi : if test -z "${GL_GENERATE_SYSEXITS_H_TRUE}" && test -z "${GL_GENERATE_SYSEXITS_H_FALSE}"; then GL_GENERATE_SYSEXITS_H_TRUE='#' GL_GENERATE_SYSEXITS_H_FALSE='#' fi GL_GNULIB_SYSTEM_POSIX=1 printf "%s\n" "#define GNULIB_TEST_SYSTEM_POSIX 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether time() works" >&5 printf %s "checking whether time() works... " >&6; } if test ${gl_cv_func_time_works+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in linux*-gnu*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if __GLIBC__ == 2 Unlucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "Unlucky" >/dev/null 2>&1 then : gl_cv_func_time_works="guessing no" else case e in #( e) gl_cv_func_time_works="guessing yes" ;; esac fi rm -rf conftest* ;; freebsd*) case "$host_cpu" in sparc*) gl_cv_func_time_works="guessing no";; *) gl_cv_func_time_works="guessing yes";; esac ;; aix*) gl_cv_func_time_works="guessing no";; mingw* | windows*) gl_cv_func_time_works="guessing no";; *) gl_cv_func_time_works="guessing yes";; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_time_works" >&5 printf "%s\n" "$gl_cv_func_time_works" >&6; } case "$gl_cv_func_time_works" in *no) REPLACE_TIME=1 ;; esac if test $REPLACE_TIME = 1; then GL_COND_OBJ_TIME_TRUE= GL_COND_OBJ_TIME_FALSE='#' else GL_COND_OBJ_TIME_TRUE='#' GL_COND_OBJ_TIME_FALSE= fi : if test -z "${GL_COND_OBJ_TIME_TRUE}" && test -z "${GL_COND_OBJ_TIME_FALSE}"; then GL_COND_OBJ_TIME_TRUE='#' GL_COND_OBJ_TIME_FALSE='#' fi if test -z "$GL_COND_OBJ_TIME_TRUE"; then : : fi GL_GNULIB_TIME=1 printf "%s\n" "#define GNULIB_TEST_TIME 1" >>confdefs.h ac_fn_check_decl "$LINENO" "localtime_r" "ac_cv_have_decl_localtime_r" "/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_localtime_r" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_LOCALTIME_R $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_localtime_r = no; then HAVE_DECL_LOCALTIME_R=0 fi if test $ac_cv_func_localtime_r = yes; then HAVE_LOCALTIME_R=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether localtime_r is compatible with its POSIX signature" >&5 printf %s "checking whether localtime_r is compatible with its POSIX signature... " >&6; } if test ${gl_cv_time_r_posix+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> int main (void) { /* We don't need to append 'restrict's to the argument types, even though the POSIX signature has the 'restrict's, since C99 says they can't affect type compatibility. */ struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r; if (ptr) return 0; /* Check the return type is a pointer. On HP-UX 10 it is 'int'. */ *localtime_r (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_time_r_posix=yes else case e in #( e) gl_cv_time_r_posix=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_time_r_posix" >&5 printf "%s\n" "$gl_cv_time_r_posix" >&6; } if test $gl_cv_time_r_posix != yes; then REPLACE_LOCALTIME_R=1 fi else HAVE_LOCALTIME_R=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether localtime_r exists as an inline function" >&5 printf %s "checking whether localtime_r exists as an inline function... " >&6; } if test ${gl_cv_func_localtime_r_inline+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> int main (void) { time_t a; struct tm r; localtime_r (&a, &r); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_localtime_r_inline=yes else case e in #( e) gl_cv_func_localtime_r_inline=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_localtime_r_inline" >&5 printf "%s\n" "$gl_cv_func_localtime_r_inline" >&6; } if test $gl_cv_func_localtime_r_inline = yes; then REPLACE_LOCALTIME_R=1 fi fi if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then GL_COND_OBJ_TIME_R_TRUE= GL_COND_OBJ_TIME_R_FALSE='#' else GL_COND_OBJ_TIME_R_TRUE='#' GL_COND_OBJ_TIME_R_FALSE= fi : if test -z "${GL_COND_OBJ_TIME_R_TRUE}" && test -z "${GL_COND_OBJ_TIME_R_FALSE}"; then GL_COND_OBJ_TIME_R_TRUE='#' GL_COND_OBJ_TIME_R_FALSE='#' fi if test -z "$GL_COND_OBJ_TIME_R_TRUE"; then : : fi GL_GNULIB_TIME_R=1 printf "%s\n" "#define GNULIB_TEST_TIME_R 1" >>confdefs.h if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 1 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 1 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 2 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 2 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0 } } } } }; then if test -z "$LIBUNISTRING_UNICASE_H"; then LIBUNISTRING_UNICASE_H="${gl_source_base_prefix}unicase.h" fi else LIBUNISTRING_UNICASE_H= fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 11 } } } } }; then LIBUNISTRING_COMPILE_UNICASE_TOLOWER_TRUE= LIBUNISTRING_COMPILE_UNICASE_TOLOWER_FALSE='#' else LIBUNISTRING_COMPILE_UNICASE_TOLOWER_TRUE='#' LIBUNISTRING_COMPILE_UNICASE_TOLOWER_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNICASE_TOLOWER_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNICASE_TOLOWER_FALSE}"; then LIBUNISTRING_COMPILE_UNICASE_TOLOWER_TRUE='#' LIBUNISTRING_COMPILE_UNICASE_TOLOWER_FALSE='#' fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 1 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 1 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 2 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 2 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0 } } } } }; then if test -z "$LIBUNISTRING_UNICTYPE_H"; then LIBUNISTRING_UNICTYPE_H="${gl_source_base_prefix}unictype.h" fi else LIBUNISTRING_UNICTYPE_H= fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 1 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 1 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 2 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 2 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0 } } } } }; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM_TRUE= LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM_FALSE='#' else LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM_FALSE}"; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALNUM_FALSE='#' fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 1 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 1 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 2 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 2 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0 } } } } }; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA_TRUE= LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA_FALSE='#' else LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA_FALSE}"; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_ALPHA_FALSE='#' fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 8 } } } } }; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK_TRUE= LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK_FALSE='#' else LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK_FALSE}"; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_BLANK_FALSE='#' fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 8 } } } } }; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL_TRUE= LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL_FALSE='#' else LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL_FALSE}"; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_CNTRL_FALSE='#' fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 8 } } } } }; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT_TRUE= LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT_FALSE='#' else LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT_FALSE}"; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_DIGIT_FALSE='#' fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 1 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 1 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 2 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 2 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0 } } } } }; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH_TRUE= LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH_FALSE='#' else LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH_FALSE}"; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_GRAPH_FALSE='#' fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 11 } } } } }; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER_TRUE= LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER_FALSE='#' else LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER_FALSE}"; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_LOWER_FALSE='#' fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 1 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 1 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 2 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 2 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0 } } } } }; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT_TRUE= LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT_FALSE='#' else LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT_FALSE}"; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PRINT_FALSE='#' fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 1 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 1 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 2 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 2 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0 } } } } }; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT_TRUE= LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT_FALSE='#' else LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT_FALSE}"; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_PUNCT_FALSE='#' fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 8 } } } } }; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE_TRUE= LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE_FALSE='#' else LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE_FALSE}"; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_SPACE_FALSE='#' fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 11 } } } } }; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER_TRUE= LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER_FALSE='#' else LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER_FALSE}"; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_UPPER_FALSE='#' fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 8 } } } } }; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT_TRUE= LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT_FALSE='#' else LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT_FALSE}"; then LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT_TRUE='#' LIBUNISTRING_COMPILE_UNICTYPE_CTYPE_XDIGIT_FALSE='#' fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 1 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 1 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 2 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 2 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0 } } } } }; then if test -z "$LIBUNISTRING_UNINORM_H"; then LIBUNISTRING_UNINORM_H="${gl_source_base_prefix}uninorm.h" fi else LIBUNISTRING_UNINORM_H= fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 11 } } } } }; then if test -z "$LIBUNISTRING_UNITYPES_H"; then LIBUNISTRING_UNITYPES_H="${gl_source_base_prefix}unitypes.h" fi else LIBUNISTRING_UNITYPES_H= fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 0 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 11 } } } } }; then if test -z "$LIBUNISTRING_UNIWIDTH_H"; then LIBUNISTRING_UNIWIDTH_H="${gl_source_base_prefix}uniwidth.h" fi else LIBUNISTRING_UNIWIDTH_H= fi if { test "$HAVE_LIBUNISTRING" != yes \ || { test $LIBUNISTRING_VERSION_MAJOR -lt 1 \ || { test $LIBUNISTRING_VERSION_MAJOR -eq 1 \ && { test $LIBUNISTRING_VERSION_MINOR -lt 1 \ || { test $LIBUNISTRING_VERSION_MINOR -eq 1 \ && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0 } } } } }; then LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE= LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE='#' else LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE='#' LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE= fi : if test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE}"; then LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE='#' LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE='#' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for variable-length arrays" >&5 printf %s "checking for variable-length arrays... " >&6; } if test ${ac_cv_c_vararrays+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __STDC_NO_VLA__ #error __STDC_NO_VLA__ not defined #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_vararrays='no: __STDC_NO_VLA__ is defined' else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test for VLA support. This test is partly inspired from examples in the C standard. Use at least two VLA functions to detect the GCC 3.4.3 bug described in: https://lists.gnu.org/archive/html/bug-gnulib/2014-08/msg00014.html */ #ifdef __STDC_NO_VLA__ syntax error; #else extern int n; int B[100]; int fvla (int m, int C[m][m]); int simple (int count, int all[static count]) { return all[count - 1]; } int fvla (int m, int C[m][m]) { typedef int VLA[m][m]; VLA x; int D[m]; static int (*q)[m] = &B; int (*s)[n] = q; return C && &x[0][0] == &D[0] && &D[0] == s[0]; } #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_vararrays=yes else case e in #( e) ac_cv_c_vararrays=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_vararrays" >&5 printf "%s\n" "$ac_cv_c_vararrays" >&6; } if test "$ac_cv_c_vararrays" = yes; then printf "%s\n" "#define HAVE_C_VARARRAYS 1" >>confdefs.h elif test "$ac_cv_c_vararrays" = no; then printf "%s\n" "#define __STDC_NO_VLA__ 1" >>confdefs.h fi if test $ac_cv_func_vasnprintf = no; then gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" if test $ac_cv_func_vasnprintf = yes; then printf "%s\n" "#define REPLACE_VASNPRINTF 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes then : else case e in #( e) printf "%s\n" "#define ptrdiff_t long" >>confdefs.h ;; esac fi fi gl_cv_func_vsnprintf_usable=no ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf" if test "x$ac_cv_func_vsnprintf" = xyes then : printf "%s\n" "#define HAVE_VSNPRINTF 1" >>confdefs.h fi if test $ac_cv_func_vsnprintf = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether snprintf respects a size of 1" >&5 printf %s "checking whether snprintf respects a size of 1... " >&6; } if test ${gl_cv_func_snprintf_size1+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_size1="guessing yes" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_snprintf_size1="guessing yes" ;; *) gl_cv_func_snprintf_size1="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif int main() { static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; my_snprintf (buf, 1, "%d", 12345); return buf[1] != 'E'; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_snprintf_size1=yes else case e in #( e) gl_cv_func_snprintf_size1=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_size1" >&5 printf "%s\n" "$gl_cv_func_snprintf_size1" >&6; } case "$gl_cv_func_snprintf_size1" in *yes) case "$gl_cv_func_snprintf_retval_c99" in *yes) case "$gl_cv_func_printf_positions" in *yes) gl_cv_func_vsnprintf_usable=yes ;; esac ;; esac ;; esac fi if test $gl_cv_func_vsnprintf_usable = no; then gl_LIBOBJS="$gl_LIBOBJS vsnprintf.$ac_objext" if test $ac_cv_func_vsnprintf = yes; then REPLACE_VSNPRINTF=1 else if test $ac_cv_have_decl_vsnprintf = yes; then REPLACE_VSNPRINTF=1 fi fi : fi if test $ac_cv_have_decl_vsnprintf = no; then HAVE_DECL_VSNPRINTF=0 fi GL_GNULIB_VSNPRINTF=1 printf "%s\n" "#define GNULIB_TEST_VSNPRINTF 1" >>confdefs.h if test $ac_cv_func_wcrtomb = no; then HAVE_WCRTOMB=0 ac_fn_check_decl "$LINENO" "wcrtomb" "ac_cv_have_decl_wcrtomb" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_wcrtomb" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_WCRTOMB $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_wcrtomb = yes; then REPLACE_WCRTOMB=1 fi else if test $REPLACE_WCRTOMB = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wcrtomb works in the C locale" >&5 printf %s "checking whether wcrtomb works in the C locale... " >&6; } if test ${gl_cv_func_wcrtomb_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_wcrtomb_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_wcrtomb_works="guessing yes";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> #include <stdlib.h> #include <wchar.h> int main () { mbstate_t state; char out[64]; int count; memset (&state, 0, sizeof (state)); out[0] = 'x'; count = wcrtomb (out, L'a', &state); return !(count == 1 && out[0] == 'a'); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_wcrtomb_works=yes else case e in #( e) gl_cv_func_wcrtomb_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcrtomb_works" >&5 printf "%s\n" "$gl_cv_func_wcrtomb_works" >&6; } case "$gl_cv_func_wcrtomb_works" in *yes) ;; *) printf "%s\n" "#define WCRTOMB_C_LOCALE_BUG 1" >>confdefs.h REPLACE_WCRTOMB=1 ;; esac fi if test $REPLACE_WCRTOMB = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wcrtomb return value is correct" >&5 printf %s "checking whether wcrtomb return value is correct... " >&6; } if test ${gl_cv_func_wcrtomb_retval+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on AIX 4, OSF/1, Solaris, native Windows. aix4* | osf* | solaris* | mingw* | windows*) gl_cv_func_wcrtomb_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wcrtomb_retval="guessing yes" ;; esac if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> #include <stdlib.h> int main () { int result = 0; if (strcmp ("$LOCALE_FR", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 1; } if (strcmp ("$LOCALE_FR_UTF8", "none") != 0 && setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 2; { wchar_t wc = (wchar_t) 0xBADFACE; if (mbtowc (&wc, "\303\274", 2) == 2) if (wcrtomb (NULL, wc, NULL) != 1) result |= 2; } } if (strcmp ("$LOCALE_JA", "none") != 0 && setlocale (LC_ALL, "$LOCALE_JA") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 4; } if (strcmp ("$LOCALE_ZH_CN", "none") != 0 && setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_wcrtomb_retval=yes else case e in #( e) gl_cv_func_wcrtomb_retval=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcrtomb_retval" >&5 printf "%s\n" "$gl_cv_func_wcrtomb_retval" >&6; } case "$gl_cv_func_wcrtomb_retval" in *yes) ;; *) printf "%s\n" "#define WCRTOMB_RETVAL_BUG 1" >>confdefs.h REPLACE_WCRTOMB=1 ;; esac fi fi if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then GL_COND_OBJ_WCRTOMB_TRUE= GL_COND_OBJ_WCRTOMB_FALSE='#' else GL_COND_OBJ_WCRTOMB_TRUE='#' GL_COND_OBJ_WCRTOMB_FALSE= fi : if test -z "${GL_COND_OBJ_WCRTOMB_TRUE}" && test -z "${GL_COND_OBJ_WCRTOMB_FALSE}"; then GL_COND_OBJ_WCRTOMB_TRUE='#' GL_COND_OBJ_WCRTOMB_FALSE='#' fi if test -z "$GL_COND_OBJ_WCRTOMB_TRUE"; then : : fi GL_GNULIB_WCRTOMB=1 printf "%s\n" "#define GNULIB_TEST_WCRTOMB 1" >>confdefs.h if test $HAVE_WCTYPE = 0 || test $REPLACE_WCTYPE = 1; then GL_COND_OBJ_WCTYPE_TRUE= GL_COND_OBJ_WCTYPE_FALSE='#' else GL_COND_OBJ_WCTYPE_TRUE='#' GL_COND_OBJ_WCTYPE_FALSE= fi : if test -z "${GL_COND_OBJ_WCTYPE_TRUE}" && test -z "${GL_COND_OBJ_WCTYPE_FALSE}"; then GL_COND_OBJ_WCTYPE_TRUE='#' GL_COND_OBJ_WCTYPE_FALSE='#' fi GL_GNULIB_WCTYPE=1 printf "%s\n" "#define GNULIB_TEST_WCTYPE 1" >>confdefs.h ac_fn_check_decl "$LINENO" "wcwidth" "ac_cv_have_decl_wcwidth" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_wcwidth" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_WCWIDTH $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_wcwidth != yes; then HAVE_DECL_WCWIDTH=0 fi if test $ac_cv_func_wcwidth != yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wcwidth is a macro" >&5 printf %s "checking whether wcwidth is a macro... " >&6; } if test ${gl_cv_func_wcwidth_macro+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> #ifdef wcwidth wchar_header_defines_wcwidth #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "wchar_header_defines_wcwidth" >/dev/null 2>&1 then : gl_cv_func_wcwidth_macro=yes else case e in #( e) gl_cv_func_wcwidth_macro=no ;; esac fi rm -rf conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcwidth_macro" >&5 printf "%s\n" "$gl_cv_func_wcwidth_macro" >&6; } fi if test $ac_cv_func_wcwidth = yes || test $gl_cv_func_wcwidth_macro = yes; then HAVE_WCWIDTH=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wcwidth works reasonably in UTF-8 locales" >&5 printf %s "checking whether wcwidth works reasonably in UTF-8 locales... " >&6; } if test ${gl_cv_func_wcwidth_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_wcwidth_works="guessing yes";; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_wcwidth_works="guessing yes";; # Guess yes on AIX 7 systems. aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";; *) gl_cv_func_wcwidth_works="$gl_cross_guess_normal";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <wchar.h> #if !HAVE_DECL_WCWIDTH extern # ifdef __cplusplus "C" # endif int wcwidth (int); #endif int main () { int result = 0; if (setlocale (LC_ALL, "en_US.UTF-8") != NULL) { if (wcwidth (0x0301) > 0) result |= 1; if (wcwidth (0x05B0) > 0) result |= 2; if (wcwidth (0x200B) > 0) result |= 4; if (wcwidth (0xFF1A) == 0) result |= 8; if (wcwidth (0x2202) > 1) result |= 16; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_wcwidth_works=yes else case e in #( e) gl_cv_func_wcwidth_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcwidth_works" >&5 printf "%s\n" "$gl_cv_func_wcwidth_works" >&6; } case "$gl_cv_func_wcwidth_works" in *yes) ;; *no) REPLACE_WCWIDTH=1 ;; esac else HAVE_WCWIDTH=0 fi if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then GL_COND_OBJ_WCWIDTH_TRUE= GL_COND_OBJ_WCWIDTH_FALSE='#' else GL_COND_OBJ_WCWIDTH_TRUE='#' GL_COND_OBJ_WCWIDTH_FALSE= fi : if test -z "${GL_COND_OBJ_WCWIDTH_TRUE}" && test -z "${GL_COND_OBJ_WCWIDTH_FALSE}"; then GL_COND_OBJ_WCWIDTH_TRUE='#' GL_COND_OBJ_WCWIDTH_FALSE='#' fi if test -z "$GL_COND_OBJ_WCWIDTH_TRUE"; then : : fi GL_GNULIB_WCWIDTH=1 printf "%s\n" "#define GNULIB_TEST_WCWIDTH 1" >>confdefs.h if case "$host_os" in mingw* | windows*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_MUTEX_TRUE= GL_COND_OBJ_WINDOWS_MUTEX_FALSE='#' else GL_COND_OBJ_WINDOWS_MUTEX_TRUE='#' GL_COND_OBJ_WINDOWS_MUTEX_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_MUTEX_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_MUTEX_FALSE}"; then GL_COND_OBJ_WINDOWS_MUTEX_TRUE='#' GL_COND_OBJ_WINDOWS_MUTEX_FALSE='#' fi if case "$host_os" in mingw* | windows*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_ONCE_TRUE= GL_COND_OBJ_WINDOWS_ONCE_FALSE='#' else GL_COND_OBJ_WINDOWS_ONCE_TRUE='#' GL_COND_OBJ_WINDOWS_ONCE_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_ONCE_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_ONCE_FALSE}"; then GL_COND_OBJ_WINDOWS_ONCE_TRUE='#' GL_COND_OBJ_WINDOWS_ONCE_FALSE='#' fi if case "$host_os" in mingw* | windows*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE= GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE='#' else GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE='#' GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE}"; then GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE='#' GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE='#' fi if case "$host_os" in mingw* | windows*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_RWLOCK_TRUE= GL_COND_OBJ_WINDOWS_RWLOCK_FALSE='#' else GL_COND_OBJ_WINDOWS_RWLOCK_TRUE='#' GL_COND_OBJ_WINDOWS_RWLOCK_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_RWLOCK_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_RWLOCK_FALSE}"; then GL_COND_OBJ_WINDOWS_RWLOCK_TRUE='#' GL_COND_OBJ_WINDOWS_RWLOCK_FALSE='#' fi ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes then : printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h fi # End of code from modules gltests_libdeps= gltests_ltlibdeps= gl_source_base='bootstrapped/tests' gl_source_base_prefix= gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS gl_module_indicator_condition=$gltests_WITNESS if test "$ac_cv_header_winsock2_h" = yes; then GL_COND_OBJ_ACCEPT_TRUE= GL_COND_OBJ_ACCEPT_FALSE='#' else GL_COND_OBJ_ACCEPT_TRUE='#' GL_COND_OBJ_ACCEPT_FALSE= fi : if test -z "${GL_COND_OBJ_ACCEPT_TRUE}" && test -z "${GL_COND_OBJ_ACCEPT_FALSE}"; then GL_COND_OBJ_ACCEPT_TRUE='#' GL_COND_OBJ_ACCEPT_FALSE='#' fi if test "$GL_GNULIB_ACCEPT" != 1; then if test "$GL_GNULIB_ACCEPT" = 0; then GL_GNULIB_ACCEPT=$gl_module_indicator_condition else GL_GNULIB_ACCEPT="($GL_GNULIB_ACCEPT || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_ACCEPT 1" >>confdefs.h if test "$ac_cv_header_winsock2_h" = yes; then GL_COND_OBJ_BIND_TRUE= GL_COND_OBJ_BIND_FALSE='#' else GL_COND_OBJ_BIND_TRUE='#' GL_COND_OBJ_BIND_FALSE= fi : if test -z "${GL_COND_OBJ_BIND_TRUE}" && test -z "${GL_COND_OBJ_BIND_FALSE}"; then GL_COND_OBJ_BIND_TRUE='#' GL_COND_OBJ_BIND_FALSE='#' fi if test "$GL_GNULIB_BIND" != 1; then if test "$GL_GNULIB_BIND" = 0; then GL_GNULIB_BIND=$gl_module_indicator_condition else GL_GNULIB_BIND="($GL_GNULIB_BIND || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_BIND 1" >>confdefs.h if test "$GL_GNULIB_BTOC32" != 1; then if test "$GL_GNULIB_BTOC32" = 0; then GL_GNULIB_BTOC32=$gl_module_indicator_condition else GL_GNULIB_BTOC32="($GL_GNULIB_BTOC32 || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_BTOC32 1" >>confdefs.h ac_fn_check_decl "$LINENO" "c32rtomb" "ac_cv_have_decl_c32rtomb" "#ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_c32rtomb" = xyes then : fi if test $ac_cv_have_decl_c32rtomb = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for c32rtomb" >&5 printf %s "checking for c32rtomb... " >&6; } if test ${gl_cv_func_c32rtomb+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> int main (void) { char buf[8]; return c32rtomb (buf, 0, NULL) == 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_c32rtomb=yes else case e in #( e) gl_cv_func_c32rtomb=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_c32rtomb" >&5 printf "%s\n" "$gl_cv_func_c32rtomb" >&6; } else gl_cv_func_c32rtomb=no fi if test $gl_cv_func_c32rtomb = no; then HAVE_C32RTOMB=0 else if test $HAVE_WORKING_MBRTOC32 = 0; then REPLACE_C32RTOMB=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether c32rtomb return value is correct" >&5 printf %s "checking whether c32rtomb return value is correct... " >&6; } if test ${gl_cv_func_c32rtomb_retval+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on AIX. aix*) gl_cv_func_c32rtomb_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_c32rtomb_retval="guessing yes" ;; esac if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #ifdef __HAIKU__ #include <stdint.h> #endif #include <uchar.h> int main () { int result = 0; if (c32rtomb (NULL, 0, NULL) != 1) result |= 1; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_c32rtomb_retval=yes else case e in #( e) gl_cv_func_c32rtomb_retval=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_c32rtomb_retval" >&5 printf "%s\n" "$gl_cv_func_c32rtomb_retval" >&6; } case "$gl_cv_func_c32rtomb_retval" in *yes) ;; *) printf "%s\n" "#define C32RTOMB_RETVAL_BUG 1" >>confdefs.h REPLACE_C32RTOMB=1 ;; esac fi if test $HAVE_C32RTOMB = 0 || test $REPLACE_C32RTOMB = 1; then GL_COND_OBJ_C32RTOMB_TRUE= GL_COND_OBJ_C32RTOMB_FALSE='#' else GL_COND_OBJ_C32RTOMB_TRUE='#' GL_COND_OBJ_C32RTOMB_FALSE= fi : if test -z "${GL_COND_OBJ_C32RTOMB_TRUE}" && test -z "${GL_COND_OBJ_C32RTOMB_FALSE}"; then GL_COND_OBJ_C32RTOMB_TRUE='#' GL_COND_OBJ_C32RTOMB_FALSE='#' fi if test "$GL_GNULIB_C32RTOMB" != 1; then if test "$GL_GNULIB_C32RTOMB" = 0; then GL_GNULIB_C32RTOMB=$gl_module_indicator_condition else GL_GNULIB_C32RTOMB="($GL_GNULIB_C32RTOMB || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_C32RTOMB 1" >>confdefs.h if test "$GL_GNULIB_C32TOB" != 1; then if test "$GL_GNULIB_C32TOB" = 0; then GL_GNULIB_C32TOB=$gl_module_indicator_condition else GL_GNULIB_C32TOB="($GL_GNULIB_C32TOB || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_C32TOB 1" >>confdefs.h REPLACE_CALLOC_FOR_CALLOC_GNU="$REPLACE_CALLOC_FOR_CALLOC_POSIX" if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether calloc (0, n) and calloc (n, 0) return nonnull" >&5 printf %s "checking whether calloc (0, n) and calloc (n, 0) return nonnull... " >&6; } if test ${ac_cv_func_calloc_0_nonnull+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $cross_compiling != yes; then ac_cv_func_calloc_0_nonnull=yes if test "$cross_compiling" = yes then : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See 'config.log' for more details" "$LINENO" 5; } else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { int result = 0; char * volatile p = calloc (0, 0); if (!p) result |= 1; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : else case e in #( e) ac_cv_func_calloc_0_nonnull=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi else case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on native Windows. mingw* | windows*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_calloc_0_nonnull="$gl_cross_guess_normal" ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_calloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_calloc_0_nonnull" >&6; } case $ac_cv_func_calloc_0_nonnull in #( *yes) : ;; #( *) : REPLACE_CALLOC_FOR_CALLOC_GNU=1 ;; esac fi if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 1; then gltests_LIBOBJS="$gltests_LIBOBJS calloc.$ac_objext" fi if test "$GL_GNULIB_CALLOC_GNU" != 1; then if test "$GL_GNULIB_CALLOC_GNU" = 0; then GL_GNULIB_CALLOC_GNU=$gl_module_indicator_condition else GL_GNULIB_CALLOC_GNU="($GL_GNULIB_CALLOC_GNU || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_CALLOC_GNU 1" >>confdefs.h if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_CALLOC_FOR_CALLOC_POSIX=1 fi if test $REPLACE_CALLOC_FOR_CALLOC_POSIX = 1; then gltests_LIBOBJS="$gltests_LIBOBJS calloc.$ac_objext" fi if test "$GL_GNULIB_CALLOC_POSIX" != 1; then if test "$GL_GNULIB_CALLOC_POSIX" = 0; then GL_GNULIB_CALLOC_POSIX=$gl_module_indicator_condition else GL_GNULIB_CALLOC_POSIX="($GL_GNULIB_CALLOC_POSIX || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_CALLOC_POSIX 1" >>confdefs.h if test "$ac_cv_header_winsock2_h" = yes; then GL_COND_OBJ_CONNECT_TRUE= GL_COND_OBJ_CONNECT_FALSE='#' else GL_COND_OBJ_CONNECT_TRUE='#' GL_COND_OBJ_CONNECT_FALSE= fi : if test -z "${GL_COND_OBJ_CONNECT_TRUE}" && test -z "${GL_COND_OBJ_CONNECT_FALSE}"; then GL_COND_OBJ_CONNECT_TRUE='#' GL_COND_OBJ_CONNECT_FALSE='#' fi if test "$GL_GNULIB_CONNECT" != 1; then if test "$GL_GNULIB_CONNECT" = 0; then GL_GNULIB_CONNECT=$gl_module_indicator_condition else GL_GNULIB_CONNECT="($GL_GNULIB_CONNECT || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_CONNECT 1" >>confdefs.h case "$host_os" in mingw* | windows*) REPLACE_CREAT=1 ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether open recognizes a trailing slash" >&5 printf %s "checking whether open recognizes a trailing slash... " >&6; } if test ${gl_cv_func_open_slash+y} then : printf %s "(cached) " >&6 else case e in #( e) # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then touch conftest.tmp ln -s conftest.tmp conftest.lnk fi if test "$cross_compiling" = yes then : case "$host_os" in freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) gl_cv_func_open_slash="guessing no" ;; *) gl_cv_func_open_slash="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> #if HAVE_UNISTD_H # include <unistd.h> #endif $gl_mda_defines int main () { int result = 0; #if HAVE_LSTAT if (open ("conftest.lnk/", O_RDONLY) != -1) result |= 1; #endif if (open ("conftest.sl/", O_CREAT, 0600) >= 0) result |= 2; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_open_slash=yes else case e in #( e) gl_cv_func_open_slash=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f conftest.sl conftest.tmp conftest.lnk ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_open_slash" >&5 printf "%s\n" "$gl_cv_func_open_slash" >&6; } case "$gl_cv_func_open_slash" in *no) printf "%s\n" "#define OPEN_TRAILING_SLASH_BUG 1" >>confdefs.h ;; esac case "$gl_cv_func_open_slash" in *no) REPLACE_CREAT=1 ;; esac ;; esac if test $REPLACE_CREAT = 1; then GL_COND_OBJ_CREAT_TRUE= GL_COND_OBJ_CREAT_FALSE='#' else GL_COND_OBJ_CREAT_TRUE='#' GL_COND_OBJ_CREAT_FALSE= fi : if test -z "${GL_COND_OBJ_CREAT_TRUE}" && test -z "${GL_COND_OBJ_CREAT_FALSE}"; then GL_COND_OBJ_CREAT_TRUE='#' GL_COND_OBJ_CREAT_FALSE='#' fi if test "$GL_GNULIB_CREAT" != 1; then if test "$GL_GNULIB_CREAT" = 0; then GL_GNULIB_CREAT=$gl_module_indicator_condition else GL_GNULIB_CREAT="($GL_GNULIB_CREAT || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_CREAT 1" >>confdefs.h if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_DUP=1 fi if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then REPLACE_DUP=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether dup works" >&5 printf %s "checking whether dup works... " >&6; } if test ${gl_cv_func_dup_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on native Windows. mingw* | windows*) gl_cv_func_dup_works="guessing no" ;; *) gl_cv_func_dup_works="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> #include <fcntl.h> #include <errno.h> $gl_mda_defines int main (void) { /* On OS/2 kLIBC, dup does not work on a directory fd. */ int fd = open (".", O_RDONLY); return fd < 0 ? 1 : dup (fd) < 0 ? 2 : 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_dup_works=yes else case e in #( e) gl_cv_func_dup_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dup_works" >&5 printf "%s\n" "$gl_cv_func_dup_works" >&6; } case "$gl_cv_func_dup_works" in *yes) ;; *) REPLACE_DUP=1 ;; esac if test $REPLACE_DUP = 1; then GL_COND_OBJ_DUP_TRUE= GL_COND_OBJ_DUP_FALSE='#' else GL_COND_OBJ_DUP_TRUE='#' GL_COND_OBJ_DUP_FALSE= fi : if test -z "${GL_COND_OBJ_DUP_TRUE}" && test -z "${GL_COND_OBJ_DUP_FALSE}"; then GL_COND_OBJ_DUP_TRUE='#' GL_COND_OBJ_DUP_FALSE='#' fi if test -z "$GL_COND_OBJ_DUP_TRUE"; then : : fi if test "$GL_GNULIB_DUP" != 1; then if test "$GL_GNULIB_DUP" = 0; then GL_GNULIB_DUP=$gl_module_indicator_condition else GL_GNULIB_DUP="($GL_GNULIB_DUP || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_DUP 1" >>confdefs.h if test "$GL_GNULIB_ENVIRON" != 1; then if test "$GL_GNULIB_ENVIRON" = 0; then GL_GNULIB_ENVIRON=$gl_module_indicator_condition else GL_GNULIB_ENVIRON="($GL_GNULIB_ENVIRON || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_ENVIRON 1" >>confdefs.h if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_FDOPEN=1 fi if test $REPLACE_FDOPEN = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fdopen sets errno" >&5 printf %s "checking whether fdopen sets errno... " >&6; } if test ${gl_cv_func_fdopen_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in mingw* | windows*) gl_cv_func_fdopen_works="guessing no" ;; *) gl_cv_func_fdopen_works="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <errno.h> $gl_mda_defines int main (void) { FILE *fp; errno = 0; fp = fdopen (-1, "r"); if (fp == NULL && errno == 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_fdopen_works=yes else case e in #( e) gl_cv_func_fdopen_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fdopen_works" >&5 printf "%s\n" "$gl_cv_func_fdopen_works" >&6; } case "$gl_cv_func_fdopen_works" in *no) REPLACE_FDOPEN=1 ;; esac fi if test $REPLACE_FDOPEN = 1; then GL_COND_OBJ_FDOPEN_TRUE= GL_COND_OBJ_FDOPEN_FALSE='#' else GL_COND_OBJ_FDOPEN_TRUE='#' GL_COND_OBJ_FDOPEN_FALSE= fi : if test -z "${GL_COND_OBJ_FDOPEN_TRUE}" && test -z "${GL_COND_OBJ_FDOPEN_FALSE}"; then GL_COND_OBJ_FDOPEN_TRUE='#' GL_COND_OBJ_FDOPEN_FALSE='#' fi if test -z "$GL_COND_OBJ_FDOPEN_TRUE"; then : fi if test "$GL_GNULIB_FDOPEN" != 1; then if test "$GL_GNULIB_FDOPEN" = 0; then GL_GNULIB_FDOPEN=$gl_module_indicator_condition else GL_GNULIB_FDOPEN="($GL_GNULIB_FDOPEN || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_FDOPEN 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flexible array member" >&5 printf %s "checking for flexible array member... " >&6; } if test ${ac_cv_c_flexmember+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <stdio.h> #include <stddef.h> struct m { struct m *next, **list; char name[]; }; struct s { struct s *p; struct m *m; int n; double d[]; }; int main (void) { int m = getchar (); size_t nbytes = offsetof (struct s, d) + m * sizeof (double); nbytes += sizeof (struct s) - 1; nbytes -= nbytes % sizeof (struct s); struct s *p = malloc (nbytes); p->p = p; p->m = NULL; p->d[0] = 0.0; return p->d != (double *) NULL; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_flexmember=yes else case e in #( e) ac_cv_c_flexmember=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5 printf "%s\n" "$ac_cv_c_flexmember" >&6; } if test $ac_cv_c_flexmember = yes; then printf "%s\n" "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h else printf "%s\n" "#define FLEXIBLE_ARRAY_MEMBER 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ftruncate" >&5 printf %s "checking for ftruncate... " >&6; } if test ${gl_cv_onwards_func_ftruncate+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "ftruncate" "ac_cv_have_decl_ftruncate" "#include <unistd.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_ftruncate" = xyes then : fi if test $ac_cv_have_decl_ftruncate = yes; then ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate" if test "x$ac_cv_func_ftruncate" = xyes then : fi if test $ac_cv_func_ftruncate = yes; then gl_cv_onwards_func_ftruncate=yes else gl_cv_onwards_func_ftruncate='future OS version' fi else gl_cv_onwards_func_ftruncate='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "ftruncate" "ac_cv_func_ftruncate" if test "x$ac_cv_func_ftruncate" = xyes then : fi gl_cv_onwards_func_ftruncate=$ac_cv_func_ftruncate ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_ftruncate" >&5 printf "%s\n" "$gl_cv_onwards_func_ftruncate" >&6; } case "$gl_cv_onwards_func_ftruncate" in future*) ac_cv_func_ftruncate=no ;; *) ac_cv_func_ftruncate=$gl_cv_onwards_func_ftruncate ;; esac if test $ac_cv_func_ftruncate = yes; then printf "%s\n" "#define HAVE_FTRUNCATE 1" >>confdefs.h fi if test $ac_cv_func_ftruncate = yes; then case "$host_os" in mingw* | windows*) REPLACE_FTRUNCATE=1 ;; esac else HAVE_FTRUNCATE=0 case "$gl_cv_onwards_func_ftruncate" in future*) REPLACE_FTRUNCATE=1 ;; esac fi if test $HAVE_FTRUNCATE = 0 || test $REPLACE_FTRUNCATE = 1; then GL_COND_OBJ_FTRUNCATE_TRUE= GL_COND_OBJ_FTRUNCATE_FALSE='#' else GL_COND_OBJ_FTRUNCATE_TRUE='#' GL_COND_OBJ_FTRUNCATE_FALSE= fi : if test -z "${GL_COND_OBJ_FTRUNCATE_TRUE}" && test -z "${GL_COND_OBJ_FTRUNCATE_FALSE}"; then GL_COND_OBJ_FTRUNCATE_TRUE='#' GL_COND_OBJ_FTRUNCATE_FALSE='#' fi if test -z "$GL_COND_OBJ_FTRUNCATE_TRUE"; then : ac_fn_c_check_func "$LINENO" "_chsize" "ac_cv_func__chsize" if test "x$ac_cv_func__chsize" = xyes then : printf "%s\n" "#define HAVE__CHSIZE 1" >>confdefs.h fi fi if test "$GL_GNULIB_FTRUNCATE" != 1; then if test "$GL_GNULIB_FTRUNCATE" = 0; then GL_GNULIB_FTRUNCATE=$gl_module_indicator_condition else GL_GNULIB_FTRUNCATE="($GL_GNULIB_FTRUNCATE || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_FTRUNCATE 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpagesize" >&5 printf %s "checking for getpagesize... " >&6; } if test ${gl_cv_func_getpagesize+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> int main (void) { return getpagesize(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_getpagesize=yes else case e in #( e) gl_cv_func_getpagesize=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getpagesize" >&5 printf "%s\n" "$gl_cv_func_getpagesize" >&6; } if test $gl_cv_func_getpagesize = no; then HAVE_GETPAGESIZE=0 ac_fn_c_check_header_compile "$LINENO" "OS.h" "ac_cv_header_OS_h" "$ac_includes_default" if test "x$ac_cv_header_OS_h" = xyes then : printf "%s\n" "#define HAVE_OS_H 1" >>confdefs.h fi if test $ac_cv_header_OS_h = yes; then HAVE_OS_H=1 fi ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" if test "x$ac_cv_header_sys_param_h" = xyes then : printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h fi if test $ac_cv_header_sys_param_h = yes; then HAVE_SYS_PARAM_H=1 fi fi case "$host_os" in mingw* | windows*) REPLACE_GETPAGESIZE=1 ;; esac ac_fn_check_decl "$LINENO" "getpagesize" "ac_cv_have_decl_getpagesize" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getpagesize" = xyes then : else case e in #( e) HAVE_DECL_GETPAGESIZE=0 ;; esac fi if test $REPLACE_GETPAGESIZE = 1; then GL_COND_OBJ_GETPAGESIZE_TRUE= GL_COND_OBJ_GETPAGESIZE_FALSE='#' else GL_COND_OBJ_GETPAGESIZE_TRUE='#' GL_COND_OBJ_GETPAGESIZE_FALSE= fi : if test -z "${GL_COND_OBJ_GETPAGESIZE_TRUE}" && test -z "${GL_COND_OBJ_GETPAGESIZE_FALSE}"; then GL_COND_OBJ_GETPAGESIZE_TRUE='#' GL_COND_OBJ_GETPAGESIZE_FALSE='#' fi if test "$GL_GNULIB_GETPAGESIZE" != 1; then if test "$GL_GNULIB_GETPAGESIZE" = 0; then GL_GNULIB_GETPAGESIZE=$gl_module_indicator_condition else GL_GNULIB_GETPAGESIZE="($GL_GNULIB_GETPAGESIZE || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_GETPAGESIZE 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for duplocale" >&5 printf %s "checking for duplocale... " >&6; } if test ${gl_cv_onwards_func_duplocale+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "duplocale" "ac_cv_have_decl_duplocale" "#include <locale.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_duplocale" = xyes then : fi if test $ac_cv_have_decl_duplocale = yes; then ac_fn_c_check_func "$LINENO" "duplocale" "ac_cv_func_duplocale" if test "x$ac_cv_func_duplocale" = xyes then : fi if test $ac_cv_func_duplocale = yes; then gl_cv_onwards_func_duplocale=yes else gl_cv_onwards_func_duplocale='future OS version' fi else gl_cv_onwards_func_duplocale='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "duplocale" "ac_cv_func_duplocale" if test "x$ac_cv_func_duplocale" = xyes then : fi gl_cv_onwards_func_duplocale=$ac_cv_func_duplocale ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_duplocale" >&5 printf "%s\n" "$gl_cv_onwards_func_duplocale" >&6; } case "$gl_cv_onwards_func_duplocale" in future*) ac_cv_func_duplocale=no ;; *) ac_cv_func_duplocale=$gl_cv_onwards_func_duplocale ;; esac if test $ac_cv_func_duplocale = yes; then printf "%s\n" "#define HAVE_DUPLOCALE 1" >>confdefs.h fi HAVE_INET_PTON=1 INET_PTON_LIB= if test $ac_cv_header_sys_socket_h != yes; then ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes then : printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h fi fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi if test $HAVE_WINSOCK2_H = 1; then REPLACE_INET_PTON=1 ac_fn_check_decl "$LINENO" "inet_pton" "ac_cv_have_decl_inet_pton" "#include <ws2tcpip.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_inet_pton" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_INET_PTON $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_inet_pton = yes; then INET_PTON_LIB="-lws2_32" else HAVE_DECL_INET_PTON=0 fi else gl_saved_LIBS=$LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing inet_pton" >&5 printf %s "checking for library containing inet_pton... " >&6; } if test ${ac_cv_search_inet_pton+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char inet_pton (void); int main (void) { return inet_pton (); ; return 0; } _ACEOF for ac_lib in '' nsl resolv network do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_inet_pton=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_inet_pton+y} then : break fi done if test ${ac_cv_search_inet_pton+y} then : else case e in #( e) ac_cv_search_inet_pton=no ;; esac fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_pton" >&5 printf "%s\n" "$ac_cv_search_inet_pton" >&6; } ac_res=$ac_cv_search_inet_pton if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else case e in #( e) ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton" if test "x$ac_cv_func_inet_pton" = xyes then : printf "%s\n" "#define HAVE_INET_PTON 1" >>confdefs.h fi if test $ac_cv_func_inet_pton = no; then HAVE_INET_PTON=0 fi ;; esac fi LIBS=$gl_saved_LIBS if test "$ac_cv_search_inet_pton" != "no" \ && test "$ac_cv_search_inet_pton" != "none required"; then INET_PTON_LIB="$ac_cv_search_inet_pton" fi ac_fn_check_decl "$LINENO" "inet_pton" "ac_cv_have_decl_inet_pton" "#include <arpa/inet.h> #if HAVE_NETDB_H # include <netdb.h> #endif " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_inet_pton" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_INET_PTON $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_inet_pton = no; then HAVE_DECL_INET_PTON=0 fi fi if test $HAVE_INET_PTON = 0 || test $REPLACE_INET_PTON = 1; then GL_COND_OBJ_INET_PTON_TRUE= GL_COND_OBJ_INET_PTON_FALSE='#' else GL_COND_OBJ_INET_PTON_TRUE='#' GL_COND_OBJ_INET_PTON_FALSE= fi : if test -z "${GL_COND_OBJ_INET_PTON_TRUE}" && test -z "${GL_COND_OBJ_INET_PTON_FALSE}"; then GL_COND_OBJ_INET_PTON_TRUE='#' GL_COND_OBJ_INET_PTON_FALSE='#' fi if test -z "$GL_COND_OBJ_INET_PTON_TRUE"; then : fi if test "$GL_GNULIB_INET_PTON" != 1; then if test "$GL_GNULIB_INET_PTON" = 0; then GL_GNULIB_INET_PTON=$gl_module_indicator_condition else GL_GNULIB_INET_PTON="($GL_GNULIB_INET_PTON || $gl_module_indicator_condition)" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 printf %s "checking whether byte ordering is bigendian... " >&6; } if test ${ac_cv_c_bigendian+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO" then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/param.h> int main (void) { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \\ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \\ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/param.h> int main (void) { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes else case e in #( e) ac_cv_c_bigendian=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> int main (void) { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> int main (void) { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes else case e in #( e) ac_cv_c_bigendian=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ unsigned short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; unsigned short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } unsigned short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; unsigned short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } int main (int argc, char **argv) { /* Intimidate the compiler so that it does not optimize the arrays away. */ char *p = argv[0]; ascii_mm[1] = *p++; ebcdic_mm[1] = *p++; ascii_ii[1] = *p++; ebcdic_ii[1] = *p++; return use_ascii (argc) == use_ebcdic (*p); } _ACEOF if ac_fn_c_try_link "$LINENO" then : if grep BIGenDianSyS conftest$ac_exeext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest$ac_exeext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_bigendian=no else case e in #( e) ac_cv_c_bigendian=yes ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 printf "%s\n" "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac HAVE_IOCTL=1 if test "$ac_cv_header_winsock2_h" = yes; then HAVE_IOCTL=0 else ac_fn_c_check_func "$LINENO" "ioctl" "ac_cv_func_ioctl" if test "x$ac_cv_func_ioctl" = xyes then : printf "%s\n" "#define HAVE_IOCTL 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ioctl with POSIX signature" >&5 printf %s "checking for ioctl with POSIX signature... " >&6; } if test ${gl_cv_func_ioctl_posix_signature+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/ioctl.h> /* On some platforms, ioctl() is declared in <unistd.h>. */ #include <unistd.h> int main (void) { extern #ifdef __cplusplus "C" #endif int ioctl (int, int, ...); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_ioctl_posix_signature=yes else case e in #( e) gl_cv_func_ioctl_posix_signature=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ioctl_posix_signature" >&5 printf "%s\n" "$gl_cv_func_ioctl_posix_signature" >&6; } if test $gl_cv_func_ioctl_posix_signature != yes; then REPLACE_IOCTL=1 fi fi if test $HAVE_IOCTL = 0 || test $REPLACE_IOCTL = 1; then GL_COND_OBJ_IOCTL_TRUE= GL_COND_OBJ_IOCTL_FALSE='#' else GL_COND_OBJ_IOCTL_TRUE='#' GL_COND_OBJ_IOCTL_FALSE= fi : if test -z "${GL_COND_OBJ_IOCTL_TRUE}" && test -z "${GL_COND_OBJ_IOCTL_FALSE}"; then GL_COND_OBJ_IOCTL_TRUE='#' GL_COND_OBJ_IOCTL_FALSE='#' fi if test "$GL_GNULIB_IOCTL" != 1; then if test "$GL_GNULIB_IOCTL" = 0; then GL_GNULIB_IOCTL=$gl_module_indicator_condition else GL_GNULIB_IOCTL="($GL_GNULIB_IOCTL || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_IOCTL 1" >>confdefs.h if test $ac_cv_func_isblank = no; then HAVE_ISBLANK=0 fi if test $HAVE_ISBLANK = 0; then GL_COND_OBJ_ISBLANK_TRUE= GL_COND_OBJ_ISBLANK_FALSE='#' else GL_COND_OBJ_ISBLANK_TRUE='#' GL_COND_OBJ_ISBLANK_FALSE= fi : if test -z "${GL_COND_OBJ_ISBLANK_TRUE}" && test -z "${GL_COND_OBJ_ISBLANK_FALSE}"; then GL_COND_OBJ_ISBLANK_TRUE='#' GL_COND_OBJ_ISBLANK_FALSE='#' fi printf "%s\n" "#define GNULIB_ISBLANK $gl_module_indicator_condition" >>confdefs.h if test "$GL_GNULIB_ISBLANK" != 1; then if test "$GL_GNULIB_ISBLANK" = 0; then GL_GNULIB_ISBLANK=$gl_module_indicator_condition else GL_GNULIB_ISBLANK="($GL_GNULIB_ISBLANK || $gl_module_indicator_condition)" fi fi if test "$ac_cv_header_winsock2_h" = yes; then GL_COND_OBJ_LISTEN_TRUE= GL_COND_OBJ_LISTEN_FALSE='#' else GL_COND_OBJ_LISTEN_TRUE='#' GL_COND_OBJ_LISTEN_FALSE= fi : if test -z "${GL_COND_OBJ_LISTEN_TRUE}" && test -z "${GL_COND_OBJ_LISTEN_FALSE}"; then GL_COND_OBJ_LISTEN_TRUE='#' GL_COND_OBJ_LISTEN_FALSE='#' fi if test "$GL_GNULIB_LISTEN" != 1; then if test "$GL_GNULIB_LISTEN" = 0; then GL_GNULIB_LISTEN=$gl_module_indicator_condition else GL_GNULIB_LISTEN="($GL_GNULIB_LISTEN || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_LISTEN 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for newlocale" >&5 printf %s "checking for newlocale... " >&6; } if test ${gl_cv_onwards_func_newlocale+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "newlocale" "ac_cv_have_decl_newlocale" "#include <locale.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_newlocale" = xyes then : fi if test $ac_cv_have_decl_newlocale = yes; then ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" if test "x$ac_cv_func_newlocale" = xyes then : fi if test $ac_cv_func_newlocale = yes; then gl_cv_onwards_func_newlocale=yes else gl_cv_onwards_func_newlocale='future OS version' fi else gl_cv_onwards_func_newlocale='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" if test "x$ac_cv_func_newlocale" = xyes then : fi gl_cv_onwards_func_newlocale=$ac_cv_func_newlocale ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_newlocale" >&5 printf "%s\n" "$gl_cv_onwards_func_newlocale" >&6; } case "$gl_cv_onwards_func_newlocale" in future*) ac_cv_func_newlocale=no ;; *) ac_cv_func_newlocale=$gl_cv_onwards_func_newlocale ;; esac if test $ac_cv_func_newlocale = yes; then printf "%s\n" "#define HAVE_NEWLOCALE 1" >>confdefs.h fi if test $HAVE_LOCALE_T = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for newlocale" >&5 printf %s "checking for newlocale... " >&6; } if test ${gl_cv_onwards_func_newlocale+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "newlocale" "ac_cv_have_decl_newlocale" "#include <locale.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_newlocale" = xyes then : fi if test $ac_cv_have_decl_newlocale = yes; then ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" if test "x$ac_cv_func_newlocale" = xyes then : fi if test $ac_cv_func_newlocale = yes; then gl_cv_onwards_func_newlocale=yes else gl_cv_onwards_func_newlocale='future OS version' fi else gl_cv_onwards_func_newlocale='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" if test "x$ac_cv_func_newlocale" = xyes then : fi gl_cv_onwards_func_newlocale=$ac_cv_func_newlocale ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_newlocale" >&5 printf "%s\n" "$gl_cv_onwards_func_newlocale" >&6; } case "$gl_cv_onwards_func_newlocale" in future*) ac_cv_func_newlocale=no ;; *) ac_cv_func_newlocale=$gl_cv_onwards_func_newlocale ;; esac if test $ac_cv_func_newlocale = yes; then printf "%s\n" "#define HAVE_NEWLOCALE 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for duplocale" >&5 printf %s "checking for duplocale... " >&6; } if test ${gl_cv_onwards_func_duplocale+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "duplocale" "ac_cv_have_decl_duplocale" "#include <locale.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_duplocale" = xyes then : fi if test $ac_cv_have_decl_duplocale = yes; then ac_fn_c_check_func "$LINENO" "duplocale" "ac_cv_func_duplocale" if test "x$ac_cv_func_duplocale" = xyes then : fi if test $ac_cv_func_duplocale = yes; then gl_cv_onwards_func_duplocale=yes else gl_cv_onwards_func_duplocale='future OS version' fi else gl_cv_onwards_func_duplocale='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "duplocale" "ac_cv_func_duplocale" if test "x$ac_cv_func_duplocale" = xyes then : fi gl_cv_onwards_func_duplocale=$ac_cv_func_duplocale ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_duplocale" >&5 printf "%s\n" "$gl_cv_onwards_func_duplocale" >&6; } case "$gl_cv_onwards_func_duplocale" in future*) ac_cv_func_duplocale=no ;; *) ac_cv_func_duplocale=$gl_cv_onwards_func_duplocale ;; esac if test $ac_cv_func_duplocale = yes; then printf "%s\n" "#define HAVE_DUPLOCALE 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for freelocale" >&5 printf %s "checking for freelocale... " >&6; } if test ${gl_cv_onwards_func_freelocale+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "freelocale" "ac_cv_have_decl_freelocale" "#include <locale.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_freelocale" = xyes then : fi if test $ac_cv_have_decl_freelocale = yes; then ac_fn_c_check_func "$LINENO" "freelocale" "ac_cv_func_freelocale" if test "x$ac_cv_func_freelocale" = xyes then : fi if test $ac_cv_func_freelocale = yes; then gl_cv_onwards_func_freelocale=yes else gl_cv_onwards_func_freelocale='future OS version' fi else gl_cv_onwards_func_freelocale='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "freelocale" "ac_cv_func_freelocale" if test "x$ac_cv_func_freelocale" = xyes then : fi gl_cv_onwards_func_freelocale=$ac_cv_func_freelocale ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_freelocale" >&5 printf "%s\n" "$gl_cv_onwards_func_freelocale" >&6; } case "$gl_cv_onwards_func_freelocale" in future*) ac_cv_func_freelocale=no ;; *) ac_cv_func_freelocale=$gl_cv_onwards_func_freelocale ;; esac if test $ac_cv_func_freelocale = yes; then printf "%s\n" "#define HAVE_FREELOCALE 1" >>confdefs.h fi gl_func_newlocale="$ac_cv_func_newlocale" gl_func_duplocale="$ac_cv_func_duplocale" gl_func_freelocale="$ac_cv_func_freelocale" else gl_cv_onwards_func_newlocale='future OS version' gl_cv_onwards_func_duplocale='future OS version' gl_cv_onwards_func_freelocale='future OS version' gl_func_newlocale=no gl_func_duplocale=no gl_func_freelocale=no fi if test $gl_func_newlocale != yes; then HAVE_NEWLOCALE=0 case "$gl_cv_onwards_func_newlocale" in future*) REPLACE_NEWLOCALE=1 ;; esac fi if test $gl_func_duplocale != yes; then HAVE_DUPLOCALE=0 case "$gl_cv_onwards_func_duplocale" in future*) REPLACE_DUPLOCALE=1 ;; esac fi if test $gl_func_freelocale != yes; then HAVE_FREELOCALE=0 case "$gl_cv_onwards_func_freelocale" in future*) REPLACE_FREELOCALE=1 ;; esac fi if test $gt_localename_enhances_locale_funcs = yes; then REPLACE_NEWLOCALE=1 REPLACE_DUPLOCALE=1 REPLACE_FREELOCALE=1 fi if test "$GL_GNULIB_LOCALENAME" != 1; then if test "$GL_GNULIB_LOCALENAME" = 0; then GL_GNULIB_LOCALENAME=$gl_module_indicator_condition else GL_GNULIB_LOCALENAME="($GL_GNULIB_LOCALENAME || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_LOCALENAME 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for newlocale" >&5 printf %s "checking for newlocale... " >&6; } if test ${gl_cv_onwards_func_newlocale+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "newlocale" "ac_cv_have_decl_newlocale" "#include <locale.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_newlocale" = xyes then : fi if test $ac_cv_have_decl_newlocale = yes; then ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" if test "x$ac_cv_func_newlocale" = xyes then : fi if test $ac_cv_func_newlocale = yes; then gl_cv_onwards_func_newlocale=yes else gl_cv_onwards_func_newlocale='future OS version' fi else gl_cv_onwards_func_newlocale='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" if test "x$ac_cv_func_newlocale" = xyes then : fi gl_cv_onwards_func_newlocale=$ac_cv_func_newlocale ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_newlocale" >&5 printf "%s\n" "$gl_cv_onwards_func_newlocale" >&6; } case "$gl_cv_onwards_func_newlocale" in future*) ac_cv_func_newlocale=no ;; *) ac_cv_func_newlocale=$gl_cv_onwards_func_newlocale ;; esac if test $ac_cv_func_newlocale = yes; then printf "%s\n" "#define HAVE_NEWLOCALE 1" >>confdefs.h fi gl_saved_LIBS=$LIBS # Solaris 2.5.1 needs -lposix4 to get the nanosleep function. # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. NANOSLEEP_LIB= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing nanosleep" >&5 printf %s "checking for library containing nanosleep... " >&6; } if test ${ac_cv_search_nanosleep+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char nanosleep (void); int main (void) { return nanosleep (); ; return 0; } _ACEOF for ac_lib in '' rt posix4 do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO" then : ac_cv_search_nanosleep=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_nanosleep+y} then : break fi done if test ${ac_cv_search_nanosleep+y} then : else case e in #( e) ac_cv_search_nanosleep=no ;; esac fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_nanosleep" >&5 printf "%s\n" "$ac_cv_search_nanosleep" >&6; } ac_res=$ac_cv_search_nanosleep if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" test "$ac_cv_search_nanosleep" = "none required" || NANOSLEEP_LIB=$ac_cv_search_nanosleep fi if test "x$ac_cv_search_nanosleep" != xno; then if test $APPLE_UNIVERSAL_BUILD = 1; then # A universal build on Apple Mac OS X platforms. # The test result would be 'no (mishandles large arguments)' in 64-bit # mode but 'yes' in 32-bit mode. But we need a configuration result that # is valid in both modes. gl_cv_func_nanosleep='no (mishandles large arguments)' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working nanosleep" >&5 printf %s "checking for working nanosleep... " >&6; } if test ${gl_cv_func_nanosleep+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess it halfway works when the kernel is Linux. linux*) gl_cv_func_nanosleep='guessing no (mishandles large arguments)' ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_nanosleep='guessing no' ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_nanosleep="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <limits.h> #include <signal.h> #include <time.h> #include <unistd.h> #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) #if HAVE_DECL_ALARM static void check_for_SIGALRM (int sig) { if (sig != SIGALRM) _exit (1); } #endif int main () { static struct timespec ts_sleep; static struct timespec ts_remaining; /* Test for major problems first. */ if (! nanosleep) return 2; ts_sleep.tv_sec = 0; ts_sleep.tv_nsec = 1; #if HAVE_DECL_ALARM { static struct sigaction act; act.sa_handler = check_for_SIGALRM; sigemptyset (&act.sa_mask); sigaction (SIGALRM, &act, NULL); alarm (1); if (nanosleep (&ts_sleep, NULL) != 0) return 3; /* Test for a minor problem: the handling of large arguments. */ ts_sleep.tv_sec = TYPE_MAXIMUM (time_t); ts_sleep.tv_nsec = 999999999; alarm (1); if (nanosleep (&ts_sleep, &ts_remaining) != -1) return 4; if (errno != EINTR) return 5; if (ts_remaining.tv_sec <= TYPE_MAXIMUM (time_t) - 10) return 6; } #else /* A simpler test for native Windows. */ if (nanosleep (&ts_sleep, &ts_remaining) < 0) return 3; /* Test for 32-bit mingw bug: negative nanosecond values do not cause failure. */ ts_sleep.tv_sec = 1; ts_sleep.tv_nsec = -1; if (nanosleep (&ts_sleep, &ts_remaining) != -1) return 7; #endif return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_nanosleep=yes else case e in #( e) case $? in 4|5|6) gl_cv_func_nanosleep='no (mishandles large arguments)' ;; 7) gl_cv_func_nanosleep='no (mishandles negative tv_nsec)' ;; *) gl_cv_func_nanosleep=no ;; esac ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_nanosleep" >&5 printf "%s\n" "$gl_cv_func_nanosleep" >&6; } case "$gl_cv_func_nanosleep" in *yes) ;; *) REPLACE_NANOSLEEP=1 case "$gl_cv_func_nanosleep" in *"mishandles large arguments"*) printf "%s\n" "#define HAVE_BUG_BIG_NANOSLEEP 1" >>confdefs.h ;; esac ;; esac else HAVE_NANOSLEEP=0 fi LIBS=$gl_saved_LIBS # For backward compatibility. LIB_NANOSLEEP="$NANOSLEEP_LIB" if test $HAVE_NANOSLEEP = 0 || test $REPLACE_NANOSLEEP = 1; then GL_COND_OBJ_NANOSLEEP_TRUE= GL_COND_OBJ_NANOSLEEP_FALSE='#' else GL_COND_OBJ_NANOSLEEP_TRUE='#' GL_COND_OBJ_NANOSLEEP_FALSE= fi : if test -z "${GL_COND_OBJ_NANOSLEEP_TRUE}" && test -z "${GL_COND_OBJ_NANOSLEEP_FALSE}"; then GL_COND_OBJ_NANOSLEEP_TRUE='#' GL_COND_OBJ_NANOSLEEP_FALSE='#' fi if test "$GL_GNULIB_NANOSLEEP" != 1; then if test "$GL_GNULIB_NANOSLEEP" = 0; then GL_GNULIB_NANOSLEEP=$gl_module_indicator_condition else GL_GNULIB_NANOSLEEP="($GL_GNULIB_NANOSLEEP || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_NANOSLEEP 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <netinet/in.h> is self-contained" >&5 printf %s "checking whether <netinet/in.h> is self-contained... " >&6; } if test ${gl_cv_header_netinet_in_h_selfcontained+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <netinet/in.h> int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_netinet_in_h_selfcontained=yes else case e in #( e) gl_cv_header_netinet_in_h_selfcontained=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_netinet_in_h_selfcontained" >&5 printf "%s\n" "$gl_cv_header_netinet_in_h_selfcontained" >&6; } if test $gl_cv_header_netinet_in_h_selfcontained = yes; then GL_GENERATE_NETINET_IN_H=false else GL_GENERATE_NETINET_IN_H=true ac_fn_c_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" if test "x$ac_cv_header_netinet_in_h" = xyes then : printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h fi if test $gl_cv_have_include_next = yes; then gl_cv_next_netinet_in_h='<'netinet/in.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <netinet/in.h>" >&5 printf %s "checking absolute name of <netinet/in.h>... " >&6; } if test ${gl_cv_next_netinet_in_h+y} then : printf %s "(cached) " >&6 else case e in #( e) if test $ac_cv_header_netinet_in_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <netinet/in.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw* | windows*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'netinet/in.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_netinet_in_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_netinet_in_h gl_cv_next_netinet_in_h='"'$gl_header'"' else gl_cv_next_netinet_in_h='<'netinet/in.h'>' fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_netinet_in_h" >&5 printf "%s\n" "$gl_cv_next_netinet_in_h" >&6; } fi NEXT_NETINET_IN_H=$gl_cv_next_netinet_in_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'netinet/in.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_netinet_in_h fi NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H=$gl_next_as_first_directive if test $ac_cv_header_netinet_in_h = yes; then HAVE_NETINET_IN_H=1 else HAVE_NETINET_IN_H=0 fi fi case "$GL_GENERATE_NETINET_IN_H" in false) NETINET_IN_H='' ;; true) if test -z "$NETINET_IN_H"; then NETINET_IN_H="${gl_source_base_prefix}netinet/in.h" fi ;; *) echo "*** GL_GENERATE_NETINET_IN_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_NETINET_IN_H; then GL_GENERATE_NETINET_IN_H_TRUE= GL_GENERATE_NETINET_IN_H_FALSE='#' else GL_GENERATE_NETINET_IN_H_TRUE='#' GL_GENERATE_NETINET_IN_H_FALSE= fi : if test -z "${GL_GENERATE_NETINET_IN_H_TRUE}" && test -z "${GL_GENERATE_NETINET_IN_H_FALSE}"; then GL_GENERATE_NETINET_IN_H_TRUE='#' GL_GENERATE_NETINET_IN_H_FALSE='#' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uselocale" >&5 printf %s "checking for uselocale... " >&6; } if test ${gl_cv_onwards_func_uselocale+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "uselocale" "ac_cv_have_decl_uselocale" "#include <locale.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_uselocale" = xyes then : fi if test $ac_cv_have_decl_uselocale = yes; then ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale" if test "x$ac_cv_func_uselocale" = xyes then : fi if test $ac_cv_func_uselocale = yes; then gl_cv_onwards_func_uselocale=yes else gl_cv_onwards_func_uselocale='future OS version' fi else gl_cv_onwards_func_uselocale='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale" if test "x$ac_cv_func_uselocale" = xyes then : fi gl_cv_onwards_func_uselocale=$ac_cv_func_uselocale ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_uselocale" >&5 printf "%s\n" "$gl_cv_onwards_func_uselocale" >&6; } case "$gl_cv_onwards_func_uselocale" in future*) ac_cv_func_uselocale=no ;; *) ac_cv_func_uselocale=$gl_cv_onwards_func_uselocale ;; esac if test $ac_cv_func_uselocale = yes; then printf "%s\n" "#define HAVE_USELOCALE 1" >>confdefs.h fi if test $ac_cv_func_uselocale = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether uselocale works" >&5 printf %s "checking whether uselocale works... " >&6; } if test ${gt_cv_func_uselocale_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : # Guess no on AIX and z/OS, yes otherwise. case "$host_os" in aix* | openedition*) gt_cv_func_uselocale_works="guessing no" ;; *) gt_cv_func_uselocale_works="guessing yes" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #if HAVE_XLOCALE_H # include <xlocale.h> #endif locale_t loc1; int main () { uselocale (NULL); setlocale (LC_ALL, "en_US.UTF-8"); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gt_cv_func_uselocale_works=yes else case e in #( e) gt_cv_func_uselocale_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_uselocale_works" >&5 printf "%s\n" "$gt_cv_func_uselocale_works" >&6; } else gt_cv_func_uselocale_works=no fi case "$gt_cv_func_uselocale_works" in *yes) gt_working_uselocale=yes printf "%s\n" "#define HAVE_WORKING_USELOCALE 1" >>confdefs.h ;; *) gt_working_uselocale=no ;; esac if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" != false:0; then REPLACE_PERROR=1 fi case ${gl_cv_func_strerror_r_works-unset} in unset|*yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether perror matches strerror" >&5 printf %s "checking whether perror matches strerror... " >&6; } if test ${gl_cv_func_perror_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_perror_works="guessing yes" ;; # Guess yes on native Windows. mingw* | windows*) gl_cv_func_perror_works="guessing yes" ;; # Otherwise obey --enable-cross-guesses. *) gl_cv_func_perror_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main (void) { char *str = strerror (-1); if (!getenv("CONFTEST_OUTPUT")) return 0; if (!str) str = ""; puts (str); errno = -1; perror (""); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : if CONFTEST_OUTPUT=1 ./conftest$EXEEXT >conftest.txt1 2>conftest.txt2 \ && cmp conftest.txt1 conftest.txt2 >/dev/null; then gl_cv_func_perror_works=yes else gl_cv_func_perror_works=no fi rm -rf conftest.txt1 conftest.txt2 else case e in #( e) gl_cv_func_perror_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_perror_works" >&5 printf "%s\n" "$gl_cv_func_perror_works" >&6; } case "$gl_cv_func_perror_works" in *yes) ;; *) REPLACE_PERROR=1 ;; esac ;; *) REPLACE_PERROR=1 ;; esac case "$host_os" in # Yes on Android 11. linux*-android*) REPLACE_PERROR=1 ;; esac if test $REPLACE_PERROR = 1; then GL_COND_OBJ_PERROR_TRUE= GL_COND_OBJ_PERROR_FALSE='#' else GL_COND_OBJ_PERROR_TRUE='#' GL_COND_OBJ_PERROR_FALSE= fi : if test -z "${GL_COND_OBJ_PERROR_TRUE}" && test -z "${GL_COND_OBJ_PERROR_FALSE}"; then GL_COND_OBJ_PERROR_TRUE='#' GL_COND_OBJ_PERROR_FALSE='#' fi if test "$GL_GNULIB_PERROR" != 1; then if test "$GL_GNULIB_PERROR" = 0; then GL_GNULIB_PERROR=$gl_module_indicator_condition else GL_GNULIB_PERROR="($GL_GNULIB_PERROR || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_PERROR 1" >>confdefs.h if test $ac_cv_func_pselect = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether signature of pselect conforms to POSIX" >&5 printf %s "checking whether signature of pselect conforms to POSIX... " >&6; } if test ${gl_cv_sig_pselect+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/select.h> int main (void) { int (*p) (int, fd_set *, fd_set *, fd_set *restrict, struct timespec const *restrict, sigset_t const *restrict) = pselect; return !p; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_sig_pselect=yes else case e in #( e) gl_cv_sig_pselect=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sig_pselect" >&5 printf "%s\n" "$gl_cv_sig_pselect" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pselect detects invalid fds" >&5 printf %s "checking whether pselect detects invalid fds... " >&6; } if test ${gl_cv_func_pselect_detects_ebadf+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_pselect_detects_ebadf="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_pselect_detects_ebadf="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_pselect_detects_ebadf="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_pselect_detects_ebadf="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/time.h> #if HAVE_SYS_SELECT_H # include <sys/select.h> #endif #include <unistd.h> #include <errno.h> $gl_mda_defines int main (void) { fd_set set; dup2(0, 16); FD_ZERO(&set); FD_SET(16, &set); close(16); struct timespec timeout; timeout.tv_sec = 0; timeout.tv_nsec = 5000; return pselect (17, &set, NULL, NULL, &timeout, NULL) != -1 || errno != EBADF; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_pselect_detects_ebadf=yes else case e in #( e) gl_cv_func_pselect_detects_ebadf=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pselect_detects_ebadf" >&5 printf "%s\n" "$gl_cv_func_pselect_detects_ebadf" >&6; } case $gl_cv_func_pselect_detects_ebadf in *yes) ;; *) REPLACE_PSELECT=1 ;; esac fi if test $ac_cv_func_pselect = no || test $gl_cv_sig_pselect = no; then REPLACE_PSELECT=1 fi if test $HAVE_PSELECT = 0 || test $REPLACE_PSELECT = 1; then GL_COND_OBJ_PSELECT_TRUE= GL_COND_OBJ_PSELECT_FALSE='#' else GL_COND_OBJ_PSELECT_TRUE='#' GL_COND_OBJ_PSELECT_FALSE= fi : if test -z "${GL_COND_OBJ_PSELECT_TRUE}" && test -z "${GL_COND_OBJ_PSELECT_FALSE}"; then GL_COND_OBJ_PSELECT_TRUE='#' GL_COND_OBJ_PSELECT_FALSE='#' fi if test "$GL_GNULIB_PSELECT" != 1; then if test "$GL_GNULIB_PSELECT" = 0; then GL_GNULIB_PSELECT=$gl_module_indicator_condition else GL_GNULIB_PSELECT="($GL_GNULIB_PSELECT || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_PSELECT 1" >>confdefs.h if { case "$host_os" in mingw* | windows*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then REPLACE_PTHREAD_CREATE=1 REPLACE_PTHREAD_ATTR_INIT=1 REPLACE_PTHREAD_ATTR_GETDETACHSTATE=1 REPLACE_PTHREAD_ATTR_SETDETACHSTATE=1 REPLACE_PTHREAD_ATTR_DESTROY=1 REPLACE_PTHREAD_SELF=1 REPLACE_PTHREAD_EQUAL=1 REPLACE_PTHREAD_DETACH=1 REPLACE_PTHREAD_JOIN=1 REPLACE_PTHREAD_EXIT=1 else if test $HAVE_PTHREAD_H = 0; then HAVE_PTHREAD_CREATE=0 HAVE_PTHREAD_ATTR_INIT=0 HAVE_PTHREAD_ATTR_GETDETACHSTATE=0 HAVE_PTHREAD_ATTR_SETDETACHSTATE=0 HAVE_PTHREAD_ATTR_DESTROY=0 HAVE_PTHREAD_SELF=0 HAVE_PTHREAD_EQUAL=0 HAVE_PTHREAD_DETACH=0 HAVE_PTHREAD_JOIN=0 HAVE_PTHREAD_EXIT=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_create exists as a global function" >&5 printf %s "checking whether pthread_create exists as a global function... " >&6; } if test ${gl_cv_func_pthread_create+y} then : printf %s "(cached) " >&6 else case e in #( e) saved_LIBS="$LIBS" LIBS="$LIBS $LIBPMULTITHREAD" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern #ifdef __cplusplus "C" #endif int pthread_create (void); int main () { return pthread_create (); } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_pthread_create=yes else case e in #( e) gl_cv_func_pthread_create=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_create" >&5 printf "%s\n" "$gl_cv_func_pthread_create" >&6; } if test $gl_cv_func_pthread_create = no; then REPLACE_PTHREAD_CREATE=1 REPLACE_PTHREAD_ATTR_INIT=1 printf "%s\n" "#define PTHREAD_CREATE_IS_INLINE 1" >>confdefs.h fi fi fi if test $HAVE_PTHREAD_CREATE = 0 || test $REPLACE_PTHREAD_CREATE = 1; then GL_COND_OBJ_PTHREAD_THREAD_TRUE= GL_COND_OBJ_PTHREAD_THREAD_FALSE='#' else GL_COND_OBJ_PTHREAD_THREAD_TRUE='#' GL_COND_OBJ_PTHREAD_THREAD_FALSE= fi : if test -z "${GL_COND_OBJ_PTHREAD_THREAD_TRUE}" && test -z "${GL_COND_OBJ_PTHREAD_THREAD_FALSE}"; then GL_COND_OBJ_PTHREAD_THREAD_TRUE='#' GL_COND_OBJ_PTHREAD_THREAD_FALSE='#' fi if test "$GL_GNULIB_PTHREAD_THREAD" != 1; then if test "$GL_GNULIB_PTHREAD_THREAD" = 0; then GL_GNULIB_PTHREAD_THREAD=$gl_module_indicator_condition else GL_GNULIB_PTHREAD_THREAD="($GL_GNULIB_PTHREAD_THREAD || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_PTHREAD_THREAD 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_sigmask is a macro" >&5 printf %s "checking whether pthread_sigmask is a macro... " >&6; } if test ${gl_cv_func_pthread_sigmask_macro+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> #include <signal.h> #ifdef pthread_sigmask headers_define_pthread_sigmask #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP_TRADITIONAL "headers_define_pthread_sigmask" >/dev/null 2>&1 then : gl_cv_func_pthread_sigmask_macro=yes else case e in #( e) gl_cv_func_pthread_sigmask_macro=no ;; esac fi rm -rf conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_macro" >&5 printf "%s\n" "$gl_cv_func_pthread_sigmask_macro" >&6; } PTHREAD_SIGMASK_LIB= if test $gl_cv_func_pthread_sigmask_macro = yes; then HAVE_PTHREAD_SIGMASK=0 REPLACE_PTHREAD_SIGMASK=1 else if test "$gl_threads_api" = posix; then if test $ac_cv_func_pthread_sigmask = yes; then : else if test -n "$LIBMULTITHREAD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_sigmask in $LIBMULTITHREAD" >&5 printf %s "checking for pthread_sigmask in $LIBMULTITHREAD... " >&6; } if test ${gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> #include <signal.h> int main (void) { return pthread_sigmask (0, (sigset_t *) 0, (sigset_t *) 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=yes else case e in #( e) gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD" >&5 printf "%s\n" "$gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD" >&6; } if test $gl_cv_func_pthread_sigmask_in_LIBMULTITHREAD = yes; then PTHREAD_SIGMASK_LIB="$LIBMULTITHREAD" else HAVE_PTHREAD_SIGMASK=0 fi else HAVE_PTHREAD_SIGMASK=0 fi fi else if test $ac_cv_func_pthread_sigmask = yes; then REPLACE_PTHREAD_SIGMASK=1 else HAVE_PTHREAD_SIGMASK=0 fi fi fi LIB_PTHREAD_SIGMASK="$PTHREAD_SIGMASK_LIB" if test $HAVE_PTHREAD_SIGMASK = 1; then if test -z "$PTHREAD_SIGMASK_LIB"; then case " $LIBS " in *' -pthread '*) ;; *' -lpthread '*) ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_sigmask works without -lpthread" >&5 printf %s "checking whether pthread_sigmask works without -lpthread... " >&6; } if test ${gl_cv_func_pthread_sigmask_in_libc_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in freebsd* | midnightbsd* | hpux* | solaris | solaris2.[2-9]*) gl_cv_func_pthread_sigmask_in_libc_works="guessing no";; *) gl_cv_func_pthread_sigmask_in_libc_works="guessing yes";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> #include <signal.h> #include <stddef.h> int main () { sigset_t set; sigemptyset (&set); return pthread_sigmask (1729, &set, NULL) != 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_pthread_sigmask_in_libc_works=no else case e in #( e) gl_cv_func_pthread_sigmask_in_libc_works=yes ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_in_libc_works" >&5 printf "%s\n" "$gl_cv_func_pthread_sigmask_in_libc_works" >&6; } case "$gl_cv_func_pthread_sigmask_in_libc_works" in *no) REPLACE_PTHREAD_SIGMASK=1 printf "%s\n" "#define PTHREAD_SIGMASK_INEFFECTIVE 1" >>confdefs.h ;; esac;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_sigmask returns error numbers" >&5 printf %s "checking whether pthread_sigmask returns error numbers... " >&6; } if test ${gl_cv_func_pthread_sigmask_return_works+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_saved_LIBS="$LIBS" LIBS="$LIBS $PTHREAD_SIGMASK_LIB" if test "$cross_compiling" = yes then : case "$host_os" in cygwin*) gl_cv_func_pthread_sigmask_return_works="guessing no";; *) gl_cv_func_pthread_sigmask_return_works="guessing yes";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> #include <signal.h> #include <stddef.h> int main () { sigset_t set; sigemptyset (&set); if (pthread_sigmask (1729, &set, NULL) == -1) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_pthread_sigmask_return_works=yes else case e in #( e) gl_cv_func_pthread_sigmask_return_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi LIBS="$gl_saved_LIBS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_return_works" >&5 printf "%s\n" "$gl_cv_func_pthread_sigmask_return_works" >&6; } case "$gl_cv_func_pthread_sigmask_return_works" in *no) REPLACE_PTHREAD_SIGMASK=1 printf "%s\n" "#define PTHREAD_SIGMASK_FAILS_WITH_ERRNO 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_sigmask unblocks signals correctly" >&5 printf %s "checking whether pthread_sigmask unblocks signals correctly... " >&6; } if test ${gl_cv_func_pthread_sigmask_unblock_works+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in irix*) gl_cv_func_pthread_sigmask_unblock_works="guessing no";; *) gl_cv_func_pthread_sigmask_unblock_works="guessing yes";; esac gl_saved_LIBS=$LIBS LIBS="$LIBS $LIBMULTITHREAD" if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #include <pthread.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> $gl_mda_defines static volatile int sigint_occurred; static void sigint_handler (int sig) { sigint_occurred++; } int main () { sigset_t set; pid_t pid = getpid (); char command[80]; if (LONG_MAX < pid) return 6; signal (SIGINT, sigint_handler); sigemptyset (&set); sigaddset (&set, SIGINT); if (!(pthread_sigmask (SIG_BLOCK, &set, NULL) == 0)) return 1; sprintf (command, "sh -c 'sleep 1; kill -INT %ld' &", (long) pid); if (!(system (command) == 0)) return 2; sleep (2); if (!(sigint_occurred == 0)) return 3; if (!(pthread_sigmask (SIG_UNBLOCK, &set, NULL) == 0)) return 4; if (!(sigint_occurred == 1)) /* This fails on IRIX. */ return 5; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : : else case e in #( e) gl_cv_func_pthread_sigmask_unblock_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi LIBS=$gl_saved_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_pthread_sigmask_unblock_works" >&5 printf "%s\n" "$gl_cv_func_pthread_sigmask_unblock_works" >&6; } case "$gl_cv_func_pthread_sigmask_unblock_works" in *no) REPLACE_PTHREAD_SIGMASK=1 printf "%s\n" "#define PTHREAD_SIGMASK_UNBLOCK_BUG 1" >>confdefs.h ;; esac fi if test $HAVE_PTHREAD_SIGMASK = 0 || test $REPLACE_PTHREAD_SIGMASK = 1; then GL_COND_OBJ_PTHREAD_SIGMASK_TRUE= GL_COND_OBJ_PTHREAD_SIGMASK_FALSE='#' else GL_COND_OBJ_PTHREAD_SIGMASK_TRUE='#' GL_COND_OBJ_PTHREAD_SIGMASK_FALSE= fi : if test -z "${GL_COND_OBJ_PTHREAD_SIGMASK_TRUE}" && test -z "${GL_COND_OBJ_PTHREAD_SIGMASK_FALSE}"; then GL_COND_OBJ_PTHREAD_SIGMASK_TRUE='#' GL_COND_OBJ_PTHREAD_SIGMASK_FALSE='#' fi if test -z "$GL_COND_OBJ_PTHREAD_SIGMASK_TRUE"; then : if test $HAVE_PTHREAD_SIGMASK = 1; then printf "%s\n" "#define HAVE_PTHREAD_SIGMASK 1" >>confdefs.h fi fi if test "$GL_GNULIB_PTHREAD_SIGMASK" != 1; then if test "$GL_GNULIB_PTHREAD_SIGMASK" = 0; then GL_GNULIB_PTHREAD_SIGMASK=$gl_module_indicator_condition else GL_GNULIB_PTHREAD_SIGMASK="($GL_GNULIB_PTHREAD_SIGMASK || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_PTHREAD_SIGMASK 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for putenv compatible with GNU and SVID" >&5 printf %s "checking for putenv compatible with GNU and SVID... " >&6; } if test ${gl_cv_func_svid_putenv+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_svid_putenv="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_svid_putenv="guessing yes" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_svid_putenv="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_svid_putenv="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default $gl_mda_defines int main (void) { /* Put it in env. */ if (putenv ("CONFTEST_putenv=val")) return 1; /* Try to remove it. */ if (putenv ("CONFTEST_putenv")) return 2; /* Make sure it was deleted. */ if (getenv ("CONFTEST_putenv") != 0) return 3; return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_svid_putenv=yes else case e in #( e) gl_cv_func_svid_putenv=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_svid_putenv" >&5 printf "%s\n" "$gl_cv_func_svid_putenv" >&6; } case "$gl_cv_func_svid_putenv" in *yes) ;; *) REPLACE_PUTENV=1 ;; esac if test $REPLACE_PUTENV = 1; then GL_COND_OBJ_PUTENV_TRUE= GL_COND_OBJ_PUTENV_FALSE='#' else GL_COND_OBJ_PUTENV_TRUE='#' GL_COND_OBJ_PUTENV_FALSE= fi : if test -z "${GL_COND_OBJ_PUTENV_TRUE}" && test -z "${GL_COND_OBJ_PUTENV_FALSE}"; then GL_COND_OBJ_PUTENV_TRUE='#' GL_COND_OBJ_PUTENV_FALSE='#' fi if test -z "$GL_COND_OBJ_PUTENV_TRUE"; then : ac_fn_check_decl "$LINENO" "_putenv" "ac_cv_have_decl__putenv" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl__putenv" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL__PUTENV $ac_have_decl" >>confdefs.h fi if test "$GL_GNULIB_PUTENV" != 1; then if test "$GL_GNULIB_PUTENV" = 0; then GL_GNULIB_PUTENV=$gl_module_indicator_condition else GL_GNULIB_PUTENV="($GL_GNULIB_PUTENV || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_PUTENV 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "raise" "ac_cv_func_raise" if test "x$ac_cv_func_raise" = xyes then : printf "%s\n" "#define HAVE_RAISE 1" >>confdefs.h fi if test $ac_cv_func_raise = no; then HAVE_RAISE=0 else if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_RAISE=1 fi HAVE_POSIX_SIGNALBLOCKING=0 if test "$gl_cv_type_sigset_t" = yes; then ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" if test "x$ac_cv_func_sigprocmask" = xyes then : HAVE_POSIX_SIGNALBLOCKING=1 fi fi if test $HAVE_POSIX_SIGNALBLOCKING = 0; then : fi fi if test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1; then GL_COND_OBJ_RAISE_TRUE= GL_COND_OBJ_RAISE_FALSE='#' else GL_COND_OBJ_RAISE_TRUE='#' GL_COND_OBJ_RAISE_FALSE= fi : if test -z "${GL_COND_OBJ_RAISE_TRUE}" && test -z "${GL_COND_OBJ_RAISE_FALSE}"; then GL_COND_OBJ_RAISE_TRUE='#' GL_COND_OBJ_RAISE_FALSE='#' fi if test -z "$GL_COND_OBJ_RAISE_TRUE"; then : : fi if test "$GL_GNULIB_RAISE" != 1; then if test "$GL_GNULIB_RAISE" = 0; then GL_GNULIB_RAISE=$gl_module_indicator_condition else GL_GNULIB_RAISE="($GL_GNULIB_RAISE || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_RAISE 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for random" >&5 printf %s "checking for random... " >&6; } if test ${gl_cv_func_random+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { return random() == 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_random=yes else case e in #( e) gl_cv_func_random=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_random" >&5 printf "%s\n" "$gl_cv_func_random" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for initstate" >&5 printf %s "checking for initstate... " >&6; } if test ${gl_cv_onwards_func_initstate+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "initstate" "ac_cv_have_decl_initstate" "#include <stdlib.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_initstate" = xyes then : fi if test $ac_cv_have_decl_initstate = yes; then ac_fn_c_check_func "$LINENO" "initstate" "ac_cv_func_initstate" if test "x$ac_cv_func_initstate" = xyes then : fi if test $ac_cv_func_initstate = yes; then gl_cv_onwards_func_initstate=yes else gl_cv_onwards_func_initstate='future OS version' fi else gl_cv_onwards_func_initstate='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "initstate" "ac_cv_func_initstate" if test "x$ac_cv_func_initstate" = xyes then : fi gl_cv_onwards_func_initstate=$ac_cv_func_initstate ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_initstate" >&5 printf "%s\n" "$gl_cv_onwards_func_initstate" >&6; } case "$gl_cv_onwards_func_initstate" in future*) ac_cv_func_initstate=no ;; *) ac_cv_func_initstate=$gl_cv_onwards_func_initstate ;; esac if test $ac_cv_func_initstate = yes; then printf "%s\n" "#define HAVE_INITSTATE 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setstate" >&5 printf %s "checking for setstate... " >&6; } if test ${gl_cv_onwards_func_setstate+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "setstate" "ac_cv_have_decl_setstate" "#include <stdlib.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_setstate" = xyes then : fi if test $ac_cv_have_decl_setstate = yes; then ac_fn_c_check_func "$LINENO" "setstate" "ac_cv_func_setstate" if test "x$ac_cv_func_setstate" = xyes then : fi if test $ac_cv_func_setstate = yes; then gl_cv_onwards_func_setstate=yes else gl_cv_onwards_func_setstate='future OS version' fi else gl_cv_onwards_func_setstate='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "setstate" "ac_cv_func_setstate" if test "x$ac_cv_func_setstate" = xyes then : fi gl_cv_onwards_func_setstate=$ac_cv_func_setstate ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_setstate" >&5 printf "%s\n" "$gl_cv_onwards_func_setstate" >&6; } case "$gl_cv_onwards_func_setstate" in future*) ac_cv_func_setstate=no ;; *) ac_cv_func_setstate=$gl_cv_onwards_func_setstate ;; esac if test $ac_cv_func_setstate = yes; then printf "%s\n" "#define HAVE_SETSTATE 1" >>confdefs.h fi if test $gl_cv_func_random = no; then HAVE_RANDOM=0 HAVE_INITSTATE=0 HAVE_SETSTATE=0 else if test $ac_cv_func_initstate = no; then HAVE_INITSTATE=0 fi if test $ac_cv_func_setstate = no; then HAVE_SETSTATE=0 fi fi if test $HAVE_INITSTATE = 0; then case "$gl_cv_onwards_func_initstate" in future*) REPLACE_INITSTATE=1 ;; esac fi if test $HAVE_SETSTATE = 0; then case "$gl_cv_onwards_func_setstate" in future*) REPLACE_SETSTATE=1 ;; esac fi if test $ac_cv_func_initstate = no || test $ac_cv_func_setstate = no \ || case "$host_os" in \ darwin* | freebsd* | solaris* | cygwin* | haiku*) true ;; \ *) false ;; \ esac then REPLACE_RANDOM=1 if test $ac_cv_func_initstate = yes; then REPLACE_INITSTATE=1 fi if test $ac_cv_func_setstate = yes; then REPLACE_SETSTATE=1 fi fi if test $ac_cv_have_decl_initstate = no; then HAVE_DECL_INITSTATE=0 fi if test $ac_cv_have_decl_setstate = no; then HAVE_DECL_SETSTATE=0 fi if test $HAVE_RANDOM = 0 || test $REPLACE_RANDOM = 1 || test $REPLACE_INITSTATE = 1 || test $REPLACE_SETSTATE = 1; then GL_COND_OBJ_RANDOM_TRUE= GL_COND_OBJ_RANDOM_FALSE='#' else GL_COND_OBJ_RANDOM_TRUE='#' GL_COND_OBJ_RANDOM_FALSE= fi : if test -z "${GL_COND_OBJ_RANDOM_TRUE}" && test -z "${GL_COND_OBJ_RANDOM_FALSE}"; then GL_COND_OBJ_RANDOM_TRUE='#' GL_COND_OBJ_RANDOM_FALSE='#' fi if test -z "$GL_COND_OBJ_RANDOM_TRUE"; then : : fi if test "$GL_GNULIB_RANDOM" != 1; then if test "$GL_GNULIB_RANDOM" = 0; then GL_GNULIB_RANDOM=$gl_module_indicator_condition else GL_GNULIB_RANDOM="($GL_GNULIB_RANDOM || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_RANDOM 1" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "random.h" "ac_cv_header_random_h" "$ac_includes_default " if test "x$ac_cv_header_random_h" = xyes then : printf "%s\n" "#define HAVE_RANDOM_H 1" >>confdefs.h fi if test $ac_cv_header_random_h = no; then HAVE_RANDOM_H=0 fi ac_fn_c_check_type "$LINENO" "struct random_data" "ac_cv_type_struct_random_data" "#include <stdlib.h> #if HAVE_RANDOM_H # include <random.h> #endif " if test "x$ac_cv_type_struct_random_data" = xyes then : printf "%s\n" "#define HAVE_STRUCT_RANDOM_DATA 1" >>confdefs.h else case e in #( e) HAVE_STRUCT_RANDOM_DATA=0 ;; esac fi case "$host_os" in aix* | osf*) REPLACE_RANDOM_R=1 ;; *) ac_fn_c_check_func "$LINENO" "random_r" "ac_cv_func_random_r" if test "x$ac_cv_func_random_r" = xyes then : printf "%s\n" "#define HAVE_RANDOM_R 1" >>confdefs.h fi if test $ac_cv_func_random_r = no; then HAVE_RANDOM_R=0 fi ;; esac if test $HAVE_RANDOM_R = 0 || test $REPLACE_RANDOM_R = 1; then GL_COND_OBJ_RANDOM_R_TRUE= GL_COND_OBJ_RANDOM_R_FALSE='#' else GL_COND_OBJ_RANDOM_R_TRUE='#' GL_COND_OBJ_RANDOM_R_FALSE= fi : if test -z "${GL_COND_OBJ_RANDOM_R_TRUE}" && test -z "${GL_COND_OBJ_RANDOM_R_FALSE}"; then GL_COND_OBJ_RANDOM_R_TRUE='#' GL_COND_OBJ_RANDOM_R_FALSE='#' fi if test -z "$GL_COND_OBJ_RANDOM_R_TRUE"; then : : fi if test "$GL_GNULIB_RANDOM_R" != 1; then if test "$GL_GNULIB_RANDOM_R" = 0; then GL_GNULIB_RANDOM_R=$gl_module_indicator_condition else GL_GNULIB_RANDOM_R="($GL_GNULIB_RANDOM_R || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_RANDOM_R 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for reallocarray" >&5 printf %s "checking for reallocarray... " >&6; } if test ${gl_cv_onwards_func_reallocarray+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "reallocarray" "ac_cv_have_decl_reallocarray" "#include <stdlib.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_reallocarray" = xyes then : fi if test $ac_cv_have_decl_reallocarray = yes; then ac_fn_c_check_func "$LINENO" "reallocarray" "ac_cv_func_reallocarray" if test "x$ac_cv_func_reallocarray" = xyes then : fi if test $ac_cv_func_reallocarray = yes; then gl_cv_onwards_func_reallocarray=yes else gl_cv_onwards_func_reallocarray='future OS version' fi else gl_cv_onwards_func_reallocarray='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "reallocarray" "ac_cv_func_reallocarray" if test "x$ac_cv_func_reallocarray" = xyes then : fi gl_cv_onwards_func_reallocarray=$ac_cv_func_reallocarray ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_reallocarray" >&5 printf "%s\n" "$gl_cv_onwards_func_reallocarray" >&6; } case "$gl_cv_onwards_func_reallocarray" in future*) ac_cv_func_reallocarray=no ;; *) ac_cv_func_reallocarray=$gl_cv_onwards_func_reallocarray ;; esac if test $ac_cv_func_reallocarray = yes; then printf "%s\n" "#define HAVE_REALLOCARRAY 1" >>confdefs.h fi if test "$ac_cv_func_reallocarray" = no; then HAVE_REALLOCARRAY=0 case "$gl_cv_onwards_func_reallocarray" in future*) REPLACE_REALLOCARRAY=1 ;; esac elif test "$gl_cv_malloc_ptrdiff" = no; then REPLACE_REALLOCARRAY=1 fi if test $HAVE_REALLOCARRAY = 0 || test $REPLACE_REALLOCARRAY = 1; then GL_COND_OBJ_REALLOCARRAY_TRUE= GL_COND_OBJ_REALLOCARRAY_FALSE='#' else GL_COND_OBJ_REALLOCARRAY_TRUE='#' GL_COND_OBJ_REALLOCARRAY_FALSE= fi : if test -z "${GL_COND_OBJ_REALLOCARRAY_TRUE}" && test -z "${GL_COND_OBJ_REALLOCARRAY_FALSE}"; then GL_COND_OBJ_REALLOCARRAY_TRUE='#' GL_COND_OBJ_REALLOCARRAY_FALSE='#' fi if test -z "$GL_COND_OBJ_REALLOCARRAY_TRUE"; then : : fi printf "%s\n" "#define GNULIB_REALLOCARRAY $gl_module_indicator_condition" >>confdefs.h if test "$GL_GNULIB_REALLOCARRAY" != 1; then if test "$GL_GNULIB_REALLOCARRAY" = 0; then GL_GNULIB_REALLOCARRAY=$gl_module_indicator_condition else GL_GNULIB_REALLOCARRAY="($GL_GNULIB_REALLOCARRAY || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_REALLOCARRAY 1" >>confdefs.h if { case "$host_os" in mingw* | windows*) true;; *) false;; esac; } \ && test $gl_threads_api = windows; then REPLACE_SCHED_YIELD=1 else ac_fn_check_decl "$LINENO" "sched_yield" "ac_cv_have_decl_sched_yield" "#include <sched.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_sched_yield" = xyes then : else case e in #( e) HAVE_SCHED_YIELD=0 ;; esac fi fi if test $HAVE_SCHED_YIELD = 0 || test $REPLACE_SCHED_YIELD = 1; then GL_COND_OBJ_SCHED_YIELD_TRUE= GL_COND_OBJ_SCHED_YIELD_FALSE='#' else GL_COND_OBJ_SCHED_YIELD_TRUE='#' GL_COND_OBJ_SCHED_YIELD_FALSE= fi : if test -z "${GL_COND_OBJ_SCHED_YIELD_TRUE}" && test -z "${GL_COND_OBJ_SCHED_YIELD_FALSE}"; then GL_COND_OBJ_SCHED_YIELD_TRUE='#' GL_COND_OBJ_SCHED_YIELD_FALSE='#' fi if test "$GL_GNULIB_SCHED_YIELD" != 1; then if test "$GL_GNULIB_SCHED_YIELD" = 0; then GL_GNULIB_SCHED_YIELD=$gl_module_indicator_condition else GL_GNULIB_SCHED_YIELD="($GL_GNULIB_SCHED_YIELD || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_SCHED_YIELD 1" >>confdefs.h if test $ac_cv_func_setenv = no; then HAVE_SETENV=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setenv validates arguments" >&5 printf %s "checking whether setenv validates arguments... " >&6; } if test ${gl_cv_func_setenv_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;; # Guess yes on musl systems. *-musl* | midipix*) gl_cv_func_setenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setenv_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <errno.h> #include <string.h> int main (void) { int result = 0; { if (setenv ("", "", 0) != -1) result |= 1; else if (errno != EINVAL) result |= 2; } { if (setenv ("a", "=", 1) != 0) result |= 4; else if (strcmp (getenv ("a"), "=") != 0) result |= 8; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_setenv_works=yes else case e in #( e) gl_cv_func_setenv_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setenv_works" >&5 printf "%s\n" "$gl_cv_func_setenv_works" >&6; } case "$gl_cv_func_setenv_works" in *yes) ;; *) REPLACE_SETENV=1 ;; esac fi if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then GL_COND_OBJ_SETENV_TRUE= GL_COND_OBJ_SETENV_FALSE='#' else GL_COND_OBJ_SETENV_TRUE='#' GL_COND_OBJ_SETENV_FALSE= fi : if test -z "${GL_COND_OBJ_SETENV_TRUE}" && test -z "${GL_COND_OBJ_SETENV_FALSE}"; then GL_COND_OBJ_SETENV_TRUE='#' GL_COND_OBJ_SETENV_FALSE='#' fi if test "$GL_GNULIB_SETENV" != 1; then if test "$GL_GNULIB_SETENV" = 0; then GL_GNULIB_SETENV=$gl_module_indicator_condition else GL_GNULIB_SETENV="($GL_GNULIB_SETENV || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_SETENV 1" >>confdefs.h NEED_SETLOCALE_IMPROVED=0 case "$host_os" in mingw* | windows*) NEED_SETLOCALE_IMPROVED=1 ;; cygwin*) case `uname -r` in 1.5.*) NEED_SETLOCALE_IMPROVED=1 ;; esac ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale supports the C locale" >&5 printf %s "checking whether setlocale supports the C locale... " >&6; } if test ${gl_cv_func_setlocale_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_setlocale_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_setlocale_works="guessing yes";; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> int main () { return setlocale (LC_ALL, "C") == NULL; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_setlocale_works=yes else case e in #( e) gl_cv_func_setlocale_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_works" >&5 printf "%s\n" "$gl_cv_func_setlocale_works" >&6; } case "$gl_cv_func_setlocale_works" in *yes) ;; *) NEED_SETLOCALE_IMPROVED=1 ;; esac ;; esac printf "%s\n" "#define NEED_SETLOCALE_IMPROVED $NEED_SETLOCALE_IMPROVED" >>confdefs.h NEED_SETLOCALE_MTSAFE=0 if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then NEED_SETLOCALE_MTSAFE=1 fi printf "%s\n" "#define NEED_SETLOCALE_MTSAFE $NEED_SETLOCALE_MTSAFE" >>confdefs.h if test $NEED_SETLOCALE_IMPROVED = 1 || test $NEED_SETLOCALE_MTSAFE = 1; then REPLACE_SETLOCALE=1 fi if test $NEED_SETLOCALE_MTSAFE = 1; then SETLOCALE_LIB="$SETLOCALE_NULL_LIB" else SETLOCALE_LIB= fi LIB_SETLOCALE="$SETLOCALE_LIB" if test $REPLACE_SETLOCALE = 1; then GL_COND_OBJ_SETLOCALE_TRUE= GL_COND_OBJ_SETLOCALE_FALSE='#' else GL_COND_OBJ_SETLOCALE_TRUE='#' GL_COND_OBJ_SETLOCALE_FALSE= fi : if test -z "${GL_COND_OBJ_SETLOCALE_TRUE}" && test -z "${GL_COND_OBJ_SETLOCALE_FALSE}"; then GL_COND_OBJ_SETLOCALE_TRUE='#' GL_COND_OBJ_SETLOCALE_FALSE='#' fi if test -z "$GL_COND_OBJ_SETLOCALE_TRUE"; then : : fi if test "$GL_GNULIB_SETLOCALE" != 1; then if test "$GL_GNULIB_SETLOCALE" = 0; then GL_GNULIB_SETLOCALE=$gl_module_indicator_condition else GL_GNULIB_SETLOCALE="($GL_GNULIB_SETLOCALE || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_SETLOCALE 1" >>confdefs.h if test "$ac_cv_header_winsock2_h" = yes; then GL_COND_OBJ_SETSOCKOPT_TRUE= GL_COND_OBJ_SETSOCKOPT_FALSE='#' else GL_COND_OBJ_SETSOCKOPT_TRUE='#' GL_COND_OBJ_SETSOCKOPT_FALSE= fi : if test -z "${GL_COND_OBJ_SETSOCKOPT_TRUE}" && test -z "${GL_COND_OBJ_SETSOCKOPT_FALSE}"; then GL_COND_OBJ_SETSOCKOPT_TRUE='#' GL_COND_OBJ_SETSOCKOPT_FALSE='#' fi if test "$GL_GNULIB_SETSOCKOPT" != 1; then if test "$GL_GNULIB_SETSOCKOPT" = 0; then GL_GNULIB_SETSOCKOPT=$gl_module_indicator_condition else GL_GNULIB_SETSOCKOPT="($GL_GNULIB_SETSOCKOPT || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_SETSOCKOPT 1" >>confdefs.h HAVE_POSIX_SIGNALBLOCKING=0 if test "$gl_cv_type_sigset_t" = yes; then ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" if test "x$ac_cv_func_sigprocmask" = xyes then : HAVE_POSIX_SIGNALBLOCKING=1 fi fi if test $HAVE_POSIX_SIGNALBLOCKING = 0; then GL_COND_OBJ_SIGPROCMASK_TRUE= GL_COND_OBJ_SIGPROCMASK_FALSE='#' else GL_COND_OBJ_SIGPROCMASK_TRUE='#' GL_COND_OBJ_SIGPROCMASK_FALSE= fi : if test -z "${GL_COND_OBJ_SIGPROCMASK_TRUE}" && test -z "${GL_COND_OBJ_SIGPROCMASK_FALSE}"; then GL_COND_OBJ_SIGPROCMASK_TRUE='#' GL_COND_OBJ_SIGPROCMASK_FALSE='#' fi if test -z "$GL_COND_OBJ_SIGPROCMASK_TRUE"; then : : fi if test "$GL_GNULIB_SIGPROCMASK" != 1; then if test "$GL_GNULIB_SIGPROCMASK" = 0; then GL_GNULIB_SIGPROCMASK=$gl_module_indicator_condition else GL_GNULIB_SIGPROCMASK="($GL_GNULIB_SIGPROCMASK || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_SIGPROCMASK 1" >>confdefs.h if test "$ac_cv_header_winsock2_h" = yes; then GL_COND_OBJ_SOCKET_TRUE= GL_COND_OBJ_SOCKET_FALSE='#' else GL_COND_OBJ_SOCKET_TRUE='#' GL_COND_OBJ_SOCKET_FALSE= fi : if test -z "${GL_COND_OBJ_SOCKET_TRUE}" && test -z "${GL_COND_OBJ_SOCKET_FALSE}"; then GL_COND_OBJ_SOCKET_TRUE='#' GL_COND_OBJ_SOCKET_FALSE='#' fi # When this module is used, sockets may actually occur as file descriptors, # hence it is worth warning if the modules 'close' and 'ioctl' are not used. if test "$ac_cv_header_winsock2_h" = yes; then UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 fi if test "$GL_GNULIB_SOCKET" != 1; then if test "$GL_GNULIB_SOCKET" = 0; then GL_GNULIB_SOCKET=$gl_module_indicator_condition else GL_GNULIB_SOCKET="($GL_GNULIB_SOCKET || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_SOCKET 1" >>confdefs.h if test $ac_cv_have_decl_strerror_r = no; then HAVE_DECL_STRERROR_R=0 fi if test $ac_cv_func_strerror_r = yes; then if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then if test $gl_cv_func_strerror_r_posix_signature = yes; then case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR_R=1 ;; esac else REPLACE_STRERROR_R=1 fi else REPLACE_STRERROR_R=1 fi fi if test $HAVE_DECL_STRERROR_R = 0 || test $REPLACE_STRERROR_R = 1 then : gltests_LIBOBJS="$gltests_LIBOBJS strerror_r.$ac_objext" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for catgets" >&5 printf %s "checking for catgets... " >&6; } if test ${gl_cv_onwards_func_catgets+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "catgets" "ac_cv_have_decl_catgets" "#include <nl_types.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_catgets" = xyes then : fi if test $ac_cv_have_decl_catgets = yes; then ac_fn_c_check_func "$LINENO" "catgets" "ac_cv_func_catgets" if test "x$ac_cv_func_catgets" = xyes then : fi if test $ac_cv_func_catgets = yes; then gl_cv_onwards_func_catgets=yes else gl_cv_onwards_func_catgets='future OS version' fi else gl_cv_onwards_func_catgets='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "catgets" "ac_cv_func_catgets" if test "x$ac_cv_func_catgets" = xyes then : fi gl_cv_onwards_func_catgets=$ac_cv_func_catgets ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_catgets" >&5 printf "%s\n" "$gl_cv_onwards_func_catgets" >&6; } case "$gl_cv_onwards_func_catgets" in future*) ac_cv_func_catgets=no ;; *) ac_cv_func_catgets=$gl_cv_onwards_func_catgets ;; esac if test $ac_cv_func_catgets = yes; then printf "%s\n" "#define HAVE_CATGETS 1" >>confdefs.h fi fi if test "$GL_GNULIB_STRERROR_R" != 1; then if test "$GL_GNULIB_STRERROR_R" = 0; then GL_GNULIB_STRERROR_R=$gl_module_indicator_condition else GL_GNULIB_STRERROR_R="($GL_GNULIB_STRERROR_R || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_STRERROR_R 1" >>confdefs.h printf "%s\n" "#define GNULIB_STRERROR_R_POSIX $gl_module_indicator_condition" >>confdefs.h if test $ac_cv_func_symlink = no; then HAVE_SYMLINK=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether symlink handles trailing slash correctly" >&5 printf %s "checking whether symlink handles trailing slash correctly... " >&6; } if test ${gl_cv_func_symlink_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_symlink_works="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_symlink_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_symlink_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_symlink_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> int main (void) { int result = 0; if (!symlink ("a", "conftest.link/")) result |= 1; if (symlink ("conftest.f", "conftest.lnk2")) result |= 2; else if (!symlink ("a", "conftest.lnk2/")) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_symlink_works=yes else case e in #( e) gl_cv_func_symlink_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f conftest.f conftest.link conftest.lnk2 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_symlink_works" >&5 printf "%s\n" "$gl_cv_func_symlink_works" >&6; } case "$gl_cv_func_symlink_works" in *yes) ;; *) REPLACE_SYMLINK=1 ;; esac fi if test $HAVE_SYMLINK = 0 || test $REPLACE_SYMLINK = 1; then GL_COND_OBJ_SYMLINK_TRUE= GL_COND_OBJ_SYMLINK_FALSE='#' else GL_COND_OBJ_SYMLINK_TRUE='#' GL_COND_OBJ_SYMLINK_FALSE= fi : if test -z "${GL_COND_OBJ_SYMLINK_TRUE}" && test -z "${GL_COND_OBJ_SYMLINK_FALSE}"; then GL_COND_OBJ_SYMLINK_TRUE='#' GL_COND_OBJ_SYMLINK_FALSE='#' fi if test "$GL_GNULIB_SYMLINK" != 1; then if test "$GL_GNULIB_SYMLINK" = 0; then GL_GNULIB_SYMLINK=$gl_module_indicator_condition else GL_GNULIB_SYMLINK="($GL_GNULIB_SYMLINK || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_SYMLINK 1" >>confdefs.h if test $gl_threads_api = posix; then gl_saved_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_atfork" >&5 printf %s "checking for pthread_atfork... " >&6; } if test ${gl_cv_onwards_func_pthread_atfork+y} then : printf %s "(cached) " >&6 else case e in #( e) exec 9>&6 6>/dev/null case "$host_os" in linux*-android*) ac_fn_check_decl "$LINENO" "pthread_atfork" "ac_cv_have_decl_pthread_atfork" "#include <pthread.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_pthread_atfork" = xyes then : fi if test $ac_cv_have_decl_pthread_atfork = yes; then ac_fn_c_check_func "$LINENO" "pthread_atfork" "ac_cv_func_pthread_atfork" if test "x$ac_cv_func_pthread_atfork" = xyes then : fi if test $ac_cv_func_pthread_atfork = yes; then gl_cv_onwards_func_pthread_atfork=yes else gl_cv_onwards_func_pthread_atfork='future OS version' fi else gl_cv_onwards_func_pthread_atfork='future OS version' fi ;; *) ac_fn_c_check_func "$LINENO" "pthread_atfork" "ac_cv_func_pthread_atfork" if test "x$ac_cv_func_pthread_atfork" = xyes then : fi gl_cv_onwards_func_pthread_atfork=$ac_cv_func_pthread_atfork ;; esac exec 6>&9 9>&- ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_onwards_func_pthread_atfork" >&5 printf "%s\n" "$gl_cv_onwards_func_pthread_atfork" >&6; } case "$gl_cv_onwards_func_pthread_atfork" in future*) ac_cv_func_pthread_atfork=no ;; *) ac_cv_func_pthread_atfork=$gl_cv_onwards_func_pthread_atfork ;; esac if test $ac_cv_func_pthread_atfork = yes; then printf "%s\n" "#define HAVE_PTHREAD_ATFORK 1" >>confdefs.h fi LIBS="$gl_saved_LIBS" fi ac_fn_c_check_header_compile "$LINENO" "sys/single_threaded.h" "ac_cv_header_sys_single_threaded_h" "$ac_includes_default" if test "x$ac_cv_header_sys_single_threaded_h" = xyes then : printf "%s\n" "#define HAVE_SYS_SINGLE_THREADED_H 1" >>confdefs.h fi if test $ac_cv_have_decl_unsetenv = no; then HAVE_DECL_UNSETENV=0 fi ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" if test "x$ac_cv_func_unsetenv" = xyes then : printf "%s\n" "#define HAVE_UNSETENV 1" >>confdefs.h fi if test $ac_cv_func_unsetenv = no; then HAVE_UNSETENV=0 else HAVE_UNSETENV=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unsetenv() return type" >&5 printf %s "checking for unsetenv() return type... " >&6; } if test ${gt_cv_func_unsetenv_ret+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #undef _BSD #define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */ #include <stdlib.h> extern #ifdef __cplusplus "C" #endif int unsetenv (const char *name); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_func_unsetenv_ret='int' else case e in #( e) gt_cv_func_unsetenv_ret='void' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_unsetenv_ret" >&5 printf "%s\n" "$gt_cv_func_unsetenv_ret" >&6; } if test $gt_cv_func_unsetenv_ret = 'void'; then printf "%s\n" "#define VOID_UNSETENV 1" >>confdefs.h REPLACE_UNSETENV=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether unsetenv obeys POSIX" >&5 printf %s "checking whether unsetenv obeys POSIX... " >&6; } if test ${gl_cv_func_unsetenv_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_unsetenv_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <errno.h> extern char **environ; $gl_mda_defines int main (void) { char entry1[] = "a=1"; char entry2[] = "b=2"; char *env[] = { entry1, entry2, NULL }; if (putenv ((char *) "a=1")) return 1; if (putenv (entry2)) return 2; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 3; if (!unsetenv ("") || errno != EINVAL) return 4; entry2[0] = 'b'; environ = env; if (!getenv ("a")) return 5; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 6; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_unsetenv_works=yes else case e in #( e) gl_cv_func_unsetenv_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unsetenv_works" >&5 printf "%s\n" "$gl_cv_func_unsetenv_works" >&6; } case "$gl_cv_func_unsetenv_works" in *yes) ;; *) REPLACE_UNSETENV=1 ;; esac fi if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then GL_COND_OBJ_UNSETENV_TRUE= GL_COND_OBJ_UNSETENV_FALSE='#' else GL_COND_OBJ_UNSETENV_TRUE='#' GL_COND_OBJ_UNSETENV_FALSE= fi : if test -z "${GL_COND_OBJ_UNSETENV_TRUE}" && test -z "${GL_COND_OBJ_UNSETENV_FALSE}"; then GL_COND_OBJ_UNSETENV_TRUE='#' GL_COND_OBJ_UNSETENV_FALSE='#' fi if test -z "$GL_COND_OBJ_UNSETENV_TRUE"; then : fi if test "$GL_GNULIB_UNSETENV" != 1; then if test "$GL_GNULIB_UNSETENV" = 0; then GL_GNULIB_UNSETENV=$gl_module_indicator_condition else GL_GNULIB_UNSETENV="($GL_GNULIB_UNSETENV || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_UNSETENV 1" >>confdefs.h ac_fn_c_check_type "$LINENO" "useconds_t" "ac_cv_type_useconds_t" "$ac_includes_default" if test "x$ac_cv_type_useconds_t" = xyes then : else case e in #( e) printf "%s\n" "#define useconds_t unsigned int" >>confdefs.h ;; esac fi if test $ac_cv_func_usleep = no; then HAVE_USLEEP=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether usleep allows large arguments" >&5 printf %s "checking whether usleep allows large arguments... " >&6; } if test ${gl_cv_func_usleep_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_usleep_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_usleep_works="guessing yes" ;; # Guess yes on systems that emulate the Linux system calls. midipix*) gl_cv_func_usleep_works="guessing yes" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_usleep_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_usleep_works="$gl_cross_guess_normal" ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> int main (void) { return !!usleep (1000000); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_usleep_works=yes else case e in #( e) gl_cv_func_usleep_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_usleep_works" >&5 printf "%s\n" "$gl_cv_func_usleep_works" >&6; } case "$gl_cv_func_usleep_works" in *yes) ;; *) REPLACE_USLEEP=1 ;; esac fi if test $HAVE_USLEEP = 0 || test $REPLACE_USLEEP = 1; then GL_COND_OBJ_USLEEP_TRUE= GL_COND_OBJ_USLEEP_FALSE='#' else GL_COND_OBJ_USLEEP_TRUE='#' GL_COND_OBJ_USLEEP_FALSE= fi : if test -z "${GL_COND_OBJ_USLEEP_TRUE}" && test -z "${GL_COND_OBJ_USLEEP_FALSE}"; then GL_COND_OBJ_USLEEP_TRUE='#' GL_COND_OBJ_USLEEP_FALSE='#' fi if test "$GL_GNULIB_USLEEP" != 1; then if test "$GL_GNULIB_USLEEP" = 0; then GL_GNULIB_USLEEP=$gl_module_indicator_condition else GL_GNULIB_USLEEP="($GL_GNULIB_USLEEP || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_USLEEP 1" >>confdefs.h if test $ac_cv_func_wctob = no; then HAVE_WCTOB=0 HAVE_DECL_WCTOB=0 else HAVE_WCTOB=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wctob works" >&5 printf %s "checking whether wctob works... " >&6; } if test ${gl_cv_func_wctob_works+y} then : printf %s "(cached) " >&6 else case e in #( e) case "$host_os" in # Guess no on Solaris <= 9 and Cygwin. solaris2.[1-9] | solaris2.[1-9].* | cygwin*) gl_cv_func_wctob_works="guessing no" ;; # Guess no on native Windows. mingw* | windows*) gl_cv_func_wctob_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wctob_works="guessing yes" ;; esac case "$host_os" in cygwin*) if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <wchar.h> register long global __asm__ ("%ebx"); int main () { setlocale (LC_ALL, "en_US.UTF-8"); global = 0x12345678; if (wctob (0x00FC) != -1) return 1; if (global != 0x12345678) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : : else case e in #( e) gl_cv_func_wctob_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac if test "$gl_cv_func_wctob_works" != no && test $LOCALE_FR != none; then if test "$cross_compiling" = yes then : : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { wchar_t wc; if (mbtowc (&wc, "\374", 1) == 1) if (wctob (wc) != (unsigned char) '\374') return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_wctob_works=yes else case e in #( e) gl_cv_func_wctob_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wctob_works" >&5 printf "%s\n" "$gl_cv_func_wctob_works" >&6; } case "$gl_cv_func_wctob_works" in *yes) ;; *) REPLACE_WCTOB=1 ;; esac if test $REPLACE_WCTOB = 0; then ac_fn_check_decl "$LINENO" "wctob" "ac_cv_have_decl_wctob" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_wctob" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_WCTOB $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_wctob != yes; then HAVE_DECL_WCTOB=0 fi fi fi if test $HAVE_WCTOB = 0 || test $REPLACE_WCTOB = 1; then GL_COND_OBJ_WCTOB_TRUE= GL_COND_OBJ_WCTOB_FALSE='#' else GL_COND_OBJ_WCTOB_TRUE='#' GL_COND_OBJ_WCTOB_FALSE= fi : if test -z "${GL_COND_OBJ_WCTOB_TRUE}" && test -z "${GL_COND_OBJ_WCTOB_FALSE}"; then GL_COND_OBJ_WCTOB_TRUE='#' GL_COND_OBJ_WCTOB_FALSE='#' fi if test -z "$GL_COND_OBJ_WCTOB_TRUE"; then : : fi if test "$GL_GNULIB_WCTOB" != 1; then if test "$GL_GNULIB_WCTOB" = 0; then GL_GNULIB_WCTOB=$gl_module_indicator_condition else GL_GNULIB_WCTOB="($GL_GNULIB_WCTOB || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_WCTOB 1" >>confdefs.h if false; then REPLACE_WCTOMB=1 fi if test $REPLACE_WCTOMB = 1; then GL_COND_OBJ_WCTOMB_TRUE= GL_COND_OBJ_WCTOMB_FALSE='#' else GL_COND_OBJ_WCTOMB_TRUE='#' GL_COND_OBJ_WCTOMB_FALSE= fi : if test -z "${GL_COND_OBJ_WCTOMB_TRUE}" && test -z "${GL_COND_OBJ_WCTOMB_FALSE}"; then GL_COND_OBJ_WCTOMB_TRUE='#' GL_COND_OBJ_WCTOMB_FALSE='#' fi if test -z "$GL_COND_OBJ_WCTOMB_TRUE"; then : : fi if test "$GL_GNULIB_WCTOMB" != 1; then if test "$GL_GNULIB_WCTOMB" = 0; then GL_GNULIB_WCTOMB=$gl_module_indicator_condition else GL_GNULIB_WCTOMB="($GL_GNULIB_WCTOMB || $gl_module_indicator_condition)" fi fi printf "%s\n" "#define GNULIB_TEST_WCTOMB 1" >>confdefs.h if case "$host_os" in mingw* | windows*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_THREAD_TRUE= GL_COND_OBJ_WINDOWS_THREAD_FALSE='#' else GL_COND_OBJ_WINDOWS_THREAD_TRUE='#' GL_COND_OBJ_WINDOWS_THREAD_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_THREAD_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_THREAD_FALSE}"; then GL_COND_OBJ_WINDOWS_THREAD_TRUE='#' GL_COND_OBJ_WINDOWS_THREAD_FALSE='#' fi if case "$host_os" in mingw* | windows*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_TLS_TRUE= GL_COND_OBJ_WINDOWS_TLS_FALSE='#' else GL_COND_OBJ_WINDOWS_TLS_TRUE='#' GL_COND_OBJ_WINDOWS_TLS_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_TLS_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_TLS_FALSE}"; then GL_COND_OBJ_WINDOWS_TLS_TRUE='#' GL_COND_OBJ_WINDOWS_TLS_FALSE='#' fi : printf "%s\n" "#define GNULIB_XALLOC $gl_module_indicator_condition" >>confdefs.h printf "%s\n" "#define GNULIB_XALLOC_DIE $gl_module_indicator_condition" >>confdefs.h LIBTESTS_LIBDEPS="$gltests_libdeps" LIBS="$new_LIBS" # Check if Gnulib tests should be done: # Check whether --enable-gnulibcheck was given. if test ${enable_gnulibcheck+y} then : enableval=$enable_gnulibcheck; enable_gnulibcheck=yes else case e in #( e) enable_gnulibcheck=no ;; esac fi if test $enable_gnulibcheck = yes; then COND_GNULIBCHECK_TRUE= COND_GNULIBCHECK_FALSE='#' else COND_GNULIBCHECK_TRUE='#' COND_GNULIBCHECK_FALSE= fi # Gnulib checks for the proper name for the C99 equivalent 'restrict' # keyword and puts it in the 'ac_cv_c_restrict' variable. If none exists, # it will put a 'no' inside of this variable. As described in the output # 'bootstrapped/m4/gnulib-common.m4', this is only necessary until Autoconf # 2.70 is released. Afterwards, we can use AC_C_RESTRICT. if test "x$ac_cv_c_restrict" = "xno" then : gal_restrict_replace= else case e in #( e) gal_restrict_replace=$ac_cv_c_restrict ;; esac fi RESTRICT_REPLACEMENT=$gal_restrict_replace # Set the one general parameters: printf "%s\n" "#define CONF_POSTFIX \".conf\"" >>confdefs.h printf "%s\n" "#define USERCONFIG_DIR \".local/etc\"" >>confdefs.h printf "%s\n" "#define CONF_SHOWFMT \" %-20s\"" >>confdefs.h # Read arguments about which programs to install. After checking if # the argument was actually called, remove any value the user might # have given by setting them to "yes" if they are not "no". These # options don't accept arguments. ayes=false # Check whether --enable-arithmetic was given. if test ${enable_arithmetic+y} then : enableval=$enable_arithmetic; if test "x$enable_arithmetic" != xno then : enable_arithmetic=yes; ayes=true fi else case e in #( e) enable_arithmetic=notset ;; esac fi # Check whether --enable-buildprog was given. if test ${enable_buildprog+y} then : enableval=$enable_buildprog; if test "x$enable_buildprog" != xno then : enable_buildprog=yes; ayes=true fi else case e in #( e) enable_buildprog=notset ;; esac fi # Check whether --enable-convertt was given. if test ${enable_convertt+y} then : enableval=$enable_convertt; if test "x$enable_convertt" != xno then : enable_convertt=yes; ayes=true fi else case e in #( e) enable_convertt=notset ;; esac fi # Check whether --enable-convolve was given. if test ${enable_convolve+y} then : enableval=$enable_convolve; if test "x$enable_convolve" != xno then : enable_cognvolve=yes; ayes=true fi else case e in #( e) enable_convolve=notset ;; esac fi # Check whether --enable-cosmiccal was given. if test ${enable_cosmiccal+y} then : enableval=$enable_cosmiccal; if test "x$enable_cosmiccal" != xno then : enable_cosmiccal=yes; ayes=true fi else case e in #( e) enable_cosmiccal=notset ;; esac fi # Check whether --enable-crop was given. if test ${enable_crop+y} then : enableval=$enable_crop; if test "x$enable_crop" != xno then : enable_crop=yes; ayes=true fi else case e in #( e) enable_crop=notset ;; esac fi # Check whether --enable-fits was given. if test ${enable_fits+y} then : enableval=$enable_fits; if test "x$enable_fits" != xno then : enable_fits=yes; ayes=true fi else case e in #( e) enable_fits=notset ;; esac fi # Check whether --enable-match was given. if test ${enable_match+y} then : enableval=$enable_match; if test "x$enable_match" != xno then : enable_match=yes; ayes=true fi else case e in #( e) enable_match=notset ;; esac fi # Check whether --enable-mkcatalog was given. if test ${enable_mkcatalog+y} then : enableval=$enable_mkcatalog; if test "x$enable_mkcatalog" != xno then : enable_mkcatalog=yes; ayes=true fi else case e in #( e) enable_mkcatalog=notset ;; esac fi # Check whether --enable-mkprof was given. if test ${enable_mkprof+y} then : enableval=$enable_mkprof; if test "x$enable_mkprof" != xno then : enable_mkprof=yes; ayes=true fi else case e in #( e) enable_mkprof=notset ;; esac fi # Check whether --enable-noisechisel was given. if test ${enable_noisechisel+y} then : enableval=$enable_noisechisel; if test "x$enable_noisechisel" != xno then : enable_noisechisel=yes; ayes=true fi else case e in #( e) enable_noisechisel=notset ;; esac fi # Check whether --enable-query was given. if test ${enable_query+y} then : enableval=$enable_query; if test "x$enable_query" != xno then : enable_query=yes; ayes=true fi else case e in #( e) enable_query=notset ;; esac fi # Check whether --enable-segment was given. if test ${enable_segment+y} then : enableval=$enable_segment; if test "x$enable_segment" != xno then : enable_segment=yes; ayes=true fi else case e in #( e) enable_segment=notset ;; esac fi # Check whether --enable-statistics was given. if test ${enable_statistics+y} then : enableval=$enable_statistics; if test "x$enable_statistics" != xno then : enable_statistics=yes; ayes=true fi else case e in #( e) enable_statistics=notset ;; esac fi # Check whether --enable-table was given. if test ${enable_table+y} then : enableval=$enable_table; if test "x$enable_table" != xno then : enable_table=yes; ayes=true fi else case e in #( e) enable_table=notset ;; esac fi #AC_ARG_ENABLE([TEMPLATE], # [AS_HELP_STRING([--enable-TEMPLATE], # [Install TEMPLATE and other enabled packages.])], # [AS_IF([test "x$enable_TEMPLATE" != xno], # [enable_TEMPLATE=yes; ayes=true])], # [enable_TEMPLATE=notset]) # Check whether --enable-warp was given. if test ${enable_warp+y} then : enableval=$enable_warp; if test "x$enable_warp" != xno then : enable_warp=yes; ayes=true fi else case e in #( e) enable_warp=notset ;; esac fi # If we had a "ayes" variable to be "true" if there was a 'yes'. So any # program that is not explicitly requested must be ignored and vice versa # (if no programs were explicitly requested, then enable all that weren't # disabled). if test $ayes = true then : if test $enable_arithmetic = notset then : enable_arithmetic=no fi if test $enable_buildprog = notset then : enable_buildprog=no fi if test $enable_convertt = notset then : enable_convertt=no fi if test $enable_convolve = notset then : enable_convolve=no fi if test $enable_cosmiccal = notset then : enable_cosmiccal=no fi if test $enable_crop = notset then : enable_crop=no fi if test $enable_fits = notset then : enable_fits=no fi if test $enable_match = notset then : enable_match=no fi if test $enable_mkcatalog = notset then : enable_mkcatalog=no fi if test $enable_mkprof = notset then : enable_mkprof=no fi if test $enable_noisechisel = notset then : enable_noisechisel=no fi if test $enable_query = notset then : enable_query=no fi if test $enable_segment = notset then : enable_segment=no fi if test $enable_statistics = notset then : enable_statistics=no fi if test $enable_table = notset then : enable_table=no fi # AS_IF([test $enable_TEMPLATE = notset], [enable_TEMPLATE=no]) if test $enable_warp = notset then : enable_warp=no fi else case e in #( e) if test $enable_arithmetic = notset then : enable_arithmetic=yes fi if test $enable_buildprog = notset then : enable_buildprog=yes fi if test $enable_convertt = notset then : enable_convertt=yes fi if test $enable_convolve = notset then : enable_convolve=yes fi if test $enable_cosmiccal = notset then : enable_cosmiccal=yes fi if test $enable_crop = notset then : enable_crop=yes fi if test $enable_fits = notset then : enable_fits=yes fi if test $enable_match = notset then : enable_match=yes fi if test $enable_mkcatalog = notset then : enable_mkcatalog=yes fi if test $enable_mkprof = notset then : enable_mkprof=yes fi if test $enable_noisechisel = notset then : enable_noisechisel=yes fi if test $enable_query = notset then : enable_query=yes fi if test $enable_segment = notset then : enable_segment=yes fi if test $enable_statistics = notset then : enable_statistics=yes fi if test $enable_table = notset then : enable_table=yes fi # AS_IF([test $enable_TEMPLATE = notset], [enable_TEMPLATE=yes]) if test $enable_warp = notset then : enable_warp=yes fi ;; esac fi # BuildProgram depends on the presence of GNU Libtool, if it isn't present, # then don't build it. if test "x$usable_libtool" = "xno" then : enable_buildprog=no fi # Make the enable_package values available for the Makefile: if test $enable_arithmetic = yes; then COND_ARITHMETIC_TRUE= COND_ARITHMETIC_FALSE='#' else COND_ARITHMETIC_TRUE='#' COND_ARITHMETIC_FALSE= fi if test $enable_buildprog = yes; then COND_BUILDPROG_TRUE= COND_BUILDPROG_FALSE='#' else COND_BUILDPROG_TRUE='#' COND_BUILDPROG_FALSE= fi if test $enable_convertt = yes; then COND_CONVERTT_TRUE= COND_CONVERTT_FALSE='#' else COND_CONVERTT_TRUE='#' COND_CONVERTT_FALSE= fi if test $enable_convolve = yes; then COND_CONVOLVE_TRUE= COND_CONVOLVE_FALSE='#' else COND_CONVOLVE_TRUE='#' COND_CONVOLVE_FALSE= fi if test $enable_cosmiccal = yes; then COND_COSMICCAL_TRUE= COND_COSMICCAL_FALSE='#' else COND_COSMICCAL_TRUE='#' COND_COSMICCAL_FALSE= fi if test $enable_crop = yes; then COND_CROP_TRUE= COND_CROP_FALSE='#' else COND_CROP_TRUE='#' COND_CROP_FALSE= fi if test $enable_fits = yes; then COND_FITS_TRUE= COND_FITS_FALSE='#' else COND_FITS_TRUE='#' COND_FITS_FALSE= fi if test $enable_match = yes; then COND_MATCH_TRUE= COND_MATCH_FALSE='#' else COND_MATCH_TRUE='#' COND_MATCH_FALSE= fi if test $enable_mkcatalog = yes; then COND_MKCATALOG_TRUE= COND_MKCATALOG_FALSE='#' else COND_MKCATALOG_TRUE='#' COND_MKCATALOG_FALSE= fi if test $enable_mkprof = yes; then COND_MKPROF_TRUE= COND_MKPROF_FALSE='#' else COND_MKPROF_TRUE='#' COND_MKPROF_FALSE= fi if test $enable_noisechisel = yes; then COND_NOISECHISEL_TRUE= COND_NOISECHISEL_FALSE='#' else COND_NOISECHISEL_TRUE='#' COND_NOISECHISEL_FALSE= fi if test $enable_query = yes; then COND_QUERY_TRUE= COND_QUERY_FALSE='#' else COND_QUERY_TRUE='#' COND_QUERY_FALSE= fi if test $enable_segment = yes; then COND_SEGMENT_TRUE= COND_SEGMENT_FALSE='#' else COND_SEGMENT_TRUE='#' COND_SEGMENT_FALSE= fi if test $enable_statistics = yes; then COND_STATISTICS_TRUE= COND_STATISTICS_FALSE='#' else COND_STATISTICS_TRUE='#' COND_STATISTICS_FALSE= fi if test $enable_table = yes; then COND_TABLE_TRUE= COND_TABLE_FALSE='#' else COND_TABLE_TRUE='#' COND_TABLE_FALSE= fi #AM_CONDITIONAL([COND_TEMPLATE], [test $enable_TEMPLATE = yes]) if test $enable_warp = yes; then COND_WARP_TRUE= COND_WARP_FALSE='#' else COND_WARP_TRUE='#' COND_WARP_FALSE= fi # Reset LIBS to the initial value BEFORE generating the Makefiles (so the # modified value doesn't get written into them). Then report the final # linking flags and put them in the Makefiles. LIBS="$orig_LIBS" CONFIG_LDADD=$LDADD ENABLE_SHARED=$enable_shared printf "%s\n" "linking flags (LDADD) ... $LDADD" printf "%s\n" "#define CONFIG_GNUASTRO_LDADD \"$LDADD\"" >>confdefs.h # Tell autoconf what to work on: # 1. Order does NOT matter here. # 2. TEMPLATE cannot be put and then commented here like the cases above, # so don't forget to add your new utility name here. ac_config_files="$ac_config_files Makefile doc/Makefile lib/Makefile tests/Makefile bin/crop/Makefile bin/fits/Makefile bin/warp/Makefile bin/table/Makefile bin/match/Makefile bin/query/Makefile bin/mkprof/Makefile bin/script/Makefile bin/segment/Makefile bin/convertt/Makefile bin/convolve/Makefile bin/buildprog/Makefile bin/cosmiccal/Makefile bin/mkcatalog/Makefile bin/arithmetic/Makefile bin/statistics/Makefile bin/noisechisel/Makefile bootstrapped/lib/Makefile bootstrapped/tests/Makefile" # Printing guiding messages. Autoconf will make the variable # enable_guide_message from the first argument to AC_ARG_ENABLE. It will # also give it a value. From the Autoconf manual, we see that # '--disable-guide-message' is equivalent to a value of 'no', while with no # argument, the value will default to 'yes'. In the last argument to # AC_ARG_ENABLE, we also specify the default behavior (when it isn't given # at all), here we want the default to be 'yes'. # Check whether --enable-guide-message was given. if test ${enable_guide_message+y} then : enableval=$enable_guide_message; else case e in #( e) enable_guide_message=yes ;; esac fi GUIDEMESSAGE=$enable_guide_message # Build the man page directory. Note that this is the cleanest and most # portable way of building this directory. We don't want to do it in any of # the Makefiles. ac_config_commands="$ac_config_commands man page directory" # Prepare the Makefiles. cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # 'ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi # Check whether --enable-year2038 was given. if test ${enable_year2038+y} then : enableval=$enable_year2038; fi if test -z "${COND_CHECK_WITH_VALGRIND_TRUE}" && test -z "${COND_CHECK_WITH_VALGRIND_FALSE}"; then as_fn_error $? "conditional \"COND_CHECK_WITH_VALGRIND\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_HASCXX_TRUE}" && test -z "${COND_HASCXX_FALSE}"; then as_fn_error $? "conditional \"COND_HASCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_HASLIBJPEG_TRUE}" && test -z "${COND_HASLIBJPEG_FALSE}"; then as_fn_error $? "conditional \"COND_HASLIBJPEG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_HASLIBTIFF_TRUE}" && test -z "${COND_HASLIBTIFF_FALSE}"; then as_fn_error $? "conditional \"COND_HASLIBTIFF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_HASWCSDIS_H_TRUE}" && test -z "${COND_HASWCSDIS_H_FALSE}"; then as_fn_error $? "conditional \"COND_HASWCSDIS_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_HASGNUMAKE_H_TRUE}" && test -z "${COND_HASGNUMAKE_H_FALSE}"; then as_fn_error $? "conditional \"COND_HASGNUMAKE_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_HASHELP2MAN_TRUE}" && test -z "${COND_HASHELP2MAN_FALSE}"; then as_fn_error $? "conditional \"COND_HASHELP2MAN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_HASGHOSTSCRIPT_TRUE}" && test -z "${COND_HASGHOSTSCRIPT_FALSE}"; then as_fn_error $? "conditional \"COND_HASGHOSTSCRIPT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_NUMPY_TRUE}" && test -z "${COND_NUMPY_FALSE}"; then as_fn_error $? "conditional \"COND_NUMPY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi gl_libobjs= gl_ltlibobjs= gl_libobjdeps= if test -n "$gl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' sed_dirname1='s,//*,/,g' sed_dirname2='s,\(.\)/$,\1,' sed_dirname3='s,^[^/]*$,.,' sed_dirname4='s,\(.\)/[^/]*$,\1,' sed_basename1='s,.*/,,' for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"` i_base=`echo "$i" | sed -e "$sed_basename1"` gl_libobjdeps="$gl_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Plo" done fi gl_LIBOBJS=$gl_libobjs gl_LTLIBOBJS=$gl_ltlibobjs gl_LIBOBJDEPS=$gl_libobjdeps gltests_libobjs= gltests_ltlibobjs= gltests_libobjdeps= if test -n "$gltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' sed_dirname1='s,//*,/,g' sed_dirname2='s,\(.\)/$,\1,' sed_dirname3='s,^[^/]*$,.,' sed_dirname4='s,\(.\)/[^/]*$,\1,' sed_basename1='s,.*/,,' for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"` i_base=`echo "$i" | sed -e "$sed_basename1"` gltests_libobjdeps="$gltests_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Plo" done fi gltests_LIBOBJS=$gltests_libobjs gltests_LTLIBOBJS=$gltests_ltlibobjs gltests_LIBOBJDEPS=$gltests_libobjdeps if test -z "${COND_GNULIBCHECK_TRUE}" && test -z "${COND_GNULIBCHECK_FALSE}"; then as_fn_error $? "conditional \"COND_GNULIBCHECK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_ARITHMETIC_TRUE}" && test -z "${COND_ARITHMETIC_FALSE}"; then as_fn_error $? "conditional \"COND_ARITHMETIC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_BUILDPROG_TRUE}" && test -z "${COND_BUILDPROG_FALSE}"; then as_fn_error $? "conditional \"COND_BUILDPROG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_CONVERTT_TRUE}" && test -z "${COND_CONVERTT_FALSE}"; then as_fn_error $? "conditional \"COND_CONVERTT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_CONVOLVE_TRUE}" && test -z "${COND_CONVOLVE_FALSE}"; then as_fn_error $? "conditional \"COND_CONVOLVE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_COSMICCAL_TRUE}" && test -z "${COND_COSMICCAL_FALSE}"; then as_fn_error $? "conditional \"COND_COSMICCAL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_CROP_TRUE}" && test -z "${COND_CROP_FALSE}"; then as_fn_error $? "conditional \"COND_CROP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_FITS_TRUE}" && test -z "${COND_FITS_FALSE}"; then as_fn_error $? "conditional \"COND_FITS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_MATCH_TRUE}" && test -z "${COND_MATCH_FALSE}"; then as_fn_error $? "conditional \"COND_MATCH\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_MKCATALOG_TRUE}" && test -z "${COND_MKCATALOG_FALSE}"; then as_fn_error $? "conditional \"COND_MKCATALOG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_MKPROF_TRUE}" && test -z "${COND_MKPROF_FALSE}"; then as_fn_error $? "conditional \"COND_MKPROF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_NOISECHISEL_TRUE}" && test -z "${COND_NOISECHISEL_FALSE}"; then as_fn_error $? "conditional \"COND_NOISECHISEL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_QUERY_TRUE}" && test -z "${COND_QUERY_FALSE}"; then as_fn_error $? "conditional \"COND_QUERY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_SEGMENT_TRUE}" && test -z "${COND_SEGMENT_FALSE}"; then as_fn_error $? "conditional \"COND_SEGMENT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_STATISTICS_TRUE}" && test -z "${COND_STATISTICS_FALSE}"; then as_fn_error $? "conditional \"COND_STATISTICS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_TABLE_TRUE}" && test -z "${COND_TABLE_FALSE}"; then as_fn_error $? "conditional \"COND_TABLE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COND_WARP_TRUE}" && test -z "${COND_WARP_FALSE}"; then as_fn_error $? "conditional \"COND_WARP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by GNU Astronomy Utilities $as_me 0.22, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ '$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to <bug-gnuastro@gnu.org>. GNU Astronomy Utilities home page: <http://www.gnu.org/software/gnuastro/>. General help using GNU software: <https://www.gnu.org/gethelp/>." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ GNU Astronomy Utilities config.status 0.22 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: '$1' Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ FILECMD \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "bin/crop/Makefile") CONFIG_FILES="$CONFIG_FILES bin/crop/Makefile" ;; "bin/fits/Makefile") CONFIG_FILES="$CONFIG_FILES bin/fits/Makefile" ;; "bin/warp/Makefile") CONFIG_FILES="$CONFIG_FILES bin/warp/Makefile" ;; "bin/table/Makefile") CONFIG_FILES="$CONFIG_FILES bin/table/Makefile" ;; "bin/match/Makefile") CONFIG_FILES="$CONFIG_FILES bin/match/Makefile" ;; "bin/query/Makefile") CONFIG_FILES="$CONFIG_FILES bin/query/Makefile" ;; "bin/mkprof/Makefile") CONFIG_FILES="$CONFIG_FILES bin/mkprof/Makefile" ;; "bin/script/Makefile") CONFIG_FILES="$CONFIG_FILES bin/script/Makefile" ;; "bin/segment/Makefile") CONFIG_FILES="$CONFIG_FILES bin/segment/Makefile" ;; "bin/convertt/Makefile") CONFIG_FILES="$CONFIG_FILES bin/convertt/Makefile" ;; "bin/convolve/Makefile") CONFIG_FILES="$CONFIG_FILES bin/convolve/Makefile" ;; "bin/buildprog/Makefile") CONFIG_FILES="$CONFIG_FILES bin/buildprog/Makefile" ;; "bin/cosmiccal/Makefile") CONFIG_FILES="$CONFIG_FILES bin/cosmiccal/Makefile" ;; "bin/mkcatalog/Makefile") CONFIG_FILES="$CONFIG_FILES bin/mkcatalog/Makefile" ;; "bin/arithmetic/Makefile") CONFIG_FILES="$CONFIG_FILES bin/arithmetic/Makefile" ;; "bin/statistics/Makefile") CONFIG_FILES="$CONFIG_FILES bin/statistics/Makefile" ;; "bin/noisechisel/Makefile") CONFIG_FILES="$CONFIG_FILES bin/noisechisel/Makefile" ;; "bootstrapped/lib/Makefile") CONFIG_FILES="$CONFIG_FILES bootstrapped/lib/Makefile" ;; "bootstrapped/tests/Makefile") CONFIG_FILES="$CONFIG_FILES bootstrapped/tests/Makefile" ;; "man") CONFIG_COMMANDS="$CONFIG_COMMANDS man" ;; "page") CONFIG_COMMANDS="$CONFIG_COMMANDS page" ;; "directory") CONFIG_COMMANDS="$CONFIG_COMMANDS directory" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' <conf$$subs.awk | sed ' /^[^""]/{ N s/\n// } ' >>$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' <confdefs.h | sed ' s/'"$ac_delim"'/"\\\ "/g' >>$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See 'config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # The names of the tagged configurations supported by this script. available_tags='CXX ' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # A file(cmd) program that detects file types. FILECMD=$lt_FILECMD # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive (by configure). lt_ar_flags=$lt_ar_flags # Flags to create an archive. AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"} # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; "man":C) $MKDIR_P doc/man ;; "page":C) $MKDIR_P doc/man ;; "directory":C) $MKDIR_P doc/man ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi # Print a message if necessary if test x$enable_guide_message = xyes then : printf "%s\n" printf "%s\n" ======================================================================= printf "%s\n" ======================================================================= printf "%s\n" "$PACKAGE_NAME (Gnuastro) $PACKAGE_VERSION is successfully" printf "%s\n" "configured for this machine." printf "%s\n" if test "x$anywarnings" = xyes then : printf "%s\n" "Configuration warning(s):" printf "%s\n" if test "x$gsl_version_old" = "xyes" then : dependency_notice=yes printf "%s\n" " - GNU Scientific Library (GSL: https://www.gnu.org/s/gsl) version" printf "%s\n" " on this system doesn't have some features that can be useful in" printf "%s\n" " some parts of Gnuastro. This build won't crash, but Gnuastro will" printf "%s\n" " have less functionality afterwards. We thus recommend building" printf "%s\n" " and installing a more recent version of GSL (version >= 2.0," printf "%s\n" " released in October 2015)." printf "%s\n" fi if test "x$has_fits_is_reentrant" = "x0" then : dependency_notice=yes printf "%s\n" " - CFITSIO (https://heasarc.gsfc.nasa.gov/fitsio/) version on" printf "%s\n" " this computer doesn't have the 'fits_is_reentrant' function" printf "%s\n" " which is used to see if FITS files can be read in parallel" printf "%s\n" " or not (it was introduced in version 3.30 released in April" printf "%s\n" " 2012). This won't affect the outputs of the programs, but" printf "%s\n" " can slow them down." printf "%s\n" fi if test "x$has_wcslib_version" = "x0" then : dependency_notice=yes printf "%s\n" " - WCSLIB (https://www.atnf.csiro.au/people/mcalabre/WCS) version" printf "%s\n" " on this system doesn't report its own version (through the " printf "%s\n" " function 'wcslib_version'). Therefore Gnuastro can't report " printf "%s\n" " the version of WCSLIB in its outputs (which is just metadata, " printf "%s\n" " it won't affect the operation of any of Gnuastro's programs). " printf "%s\n" " This function was introduced in WCSLIB version 5.0 (released " printf "%s\n" " in April 2015)." printf "%s\n" fi if test "x$has_wcslib_dis_h" = "x0" then : dependency_notice=yes printf "%s\n" " - WCSLIB (https://www.atnf.csiro.au/people/mcalabre/WCS) version" printf "%s\n" " on this system doesn't support distortions (i.e., it doesn't" printf "%s\n" " have 'dis.h'. This build won't crash but Gnuastro will not be able" printf "%s\n" " to do distortion-related operations. If you don't need such" printf "%s\n" " operations you can ignore this warning." printf "%s\n" fi if test "x$has_wcslib_wcsccs" = "x0" then : dependency_notice=yes printf "%s\n" " - WCSLIB (https://www.atnf.csiro.au/people/mcalabre/WCS) version" printf "%s\n" " on this system doesn't support conversion of coordinate systems" printf "%s\n" " (through the 'wcsccs' function that was introduced in WCSLIB 7.5, " printf "%s\n" " March 2021). For example converting from equatorial J2000 to" printf "%s\n" " Galactic coordinates). This build won't crash but the related" printf "%s\n" " functionalities in Gnuastro will be disabled. If you don't need" printf "%s\n" " such operations you can ignore this warning." printf "%s\n" fi if test "x$has_libjpeg" = "xno" then : dependency_notice=yes printf "%s\n" " - libjpeg (http://ijg.org), could not be linked with in your library" printf "%s\n" " search path, or is manually disabled. If JPEG inputs/outputs are" printf "%s\n" " requested, the respective tool will inform you and abort with an" printf "%s\n" " error." printf "%s\n" fi if test "x$has_libtiff" = "xno" then : dependency_notice=yes printf "%s\n" " - libtiff (http://libtiff.maptools.org), could not be linked with in" printf "%s\n" " your library search path, or is manually disabled. If TIFF" printf "%s\n" " inputs/outputs are requested, the respective tool will inform" printf "%s\n" " you and abort with an error." printf "%s\n" fi if test "x$has_libgit2" = "x0" then : dependency_notice=yes printf "%s\n" " - libgit2 (https://libgit2.org), could not be linked with in your" printf "%s\n" " library search path, or is manually disabled. When present, Git's" printf "%s\n" " describe output will be stored in the output files if Gnuastro's" printf "%s\n" " programs were called within a Gitversion controlled directory to" printf "%s\n" " help in reproducibility." printf "%s\n" fi if test "x$usable_libtool" = "xno" then : dependency_notice=yes printf "%s\n" " - GNU Libtool (https://www.gnu.org/s/libtool) can't be used on this" printf "%s\n" " system (see below). Gnuastro's BuildProgram uses GNU libtool to" printf "%s\n" " link your source code with the various libraries (Gnuastro's" printf "%s\n" " dependencies). Therefore BuildProgram will not be built or installed." printf "%s\n" " Please note that not having GNU libtool in your search path will not" printf "%s\n" " harm the rest of Gnuastro's building and installation. Gnuastro has" printf "%s\n" " its own internal implementation of GNU Libtool to build its self. This" printf "%s\n" " warning is only to let you know that BuildProgram will not be" printf "%s\n" " part of this build. The executable names searched were 'libtool'" printf "%s\n" " and 'glibtool'. The shells searched were 'sh', 'bash' and 'zsh'." printf "%s\n" if test "x$has_gnulibtool" = "xyes" then : printf "%s\n" " -- GNU Libtool is present, but couldn't be run in tested shells." if test "x$bash_version" = x then : junk=1 else case e in #( e) printf "%s\n" " (GNU Bash was found but not a suitable version: $bash_version)" ;; esac fi printf "%s\n" else case e in #( e) if test "x$has_libtool" = "xyes" then : printf "%s\n" " -- A libtool implementation was found, but it isn't GNU." printf "%s\n" fi ;; esac fi fi if test "x$has_ghostscript" = "xno" then : dependency_notice=yes printf "%s\n" " - GPL GhostScript (https://www.ghostscript.com) version 9.10 or later," printf "%s\n" " with the executable name 'gs', was not found in your PATH environment" printf "%s\n" " variable. If PDF outputs are desired, the respective tool it will abort" printf "%s\n" " with an EPS output which you can convert to PDF by other means." printf "%s\n" fi if test "x$has_curl" = "xno" then : dependency_notice=yes printf "%s\n" " - cURL (https://curl.haxx.se) with the executable name 'curl' was not" printf "%s\n" " found in your PATH environment variable. 'astquery' uses it to access" printf "%s\n" " remote databases at run-time. So not having 'curl' won't affect this" printf "%s\n" " build of Gnuastro, you can continue for now. But to use 'astquery'," printf "%s\n" " don't forget to install cURL later (before using 'astquery' for the" printf "%s\n" " first time)." printf "%s\n" fi if test "x$has_gnumake_h" = "x0" then : dependency_notice=yes printf "%s\n" " - GNU Make (https://www.gnu.org/software/make) extension headers " printf "%s\n" " 'gnumake.h' couldn't be found by the C compiler. If available, " printf "%s\n" " Gnuastro can use those headers to add custom GNU Make functions " printf "%s\n" " to improve your Makefiles for data analysis workflows." printf "%s\n" fi if test "x$has_ds9" = "xno" then : dependency_notice=yes printf "%s\n" " - (GUI only) SAO ds9 (https://sites.google.com/cfa.harvard.edu/saoimageds9)" printf "%s\n" " couldn't be found. DS9 is called by 'astscript-fits-view' to visually" printf "%s\n" " inspect FITS images. This doesn't affect the building of Gnuastro. So you" printf "%s\n" " can safely install it later (after building and installing Gnuasro)." printf "%s\n" fi if test "x$has_topcat" = "xno" then : dependency_notice=yes printf "%s\n" " - (GUI only) TOPCAT (http://www.star.bris.ac.uk/~mbt/topcat) couldn't be" printf "%s\n" " found. TOPCAT is called by 'astscript-fits-view' to visually inspect" printf "%s\n" " astronomical tables. This doesn't affect the building of Gnuastro. So " printf "%s\n" " you can safely install it later (after building and installing Gnuasro)." printf "%s\n" fi if test "x$enable_shared_disabled" = "xyes" then : dependency_notice=yes printf "%s\n" " - Eventhough you have asked to enable the shared libraries, maybe using" printf "%s\n" " the '--enable-debug' option, the compiler does not support it. So, we" printf "%s\n" " are intentionally disabling this option." printf "%s\n" fi # Notice for obtaining the optional dependencies using a package # manager. if test "x$dependency_notice" = "xyes" then : printf "%s\n" " You can use your package manager for easy and fast installation of all" printf "%s\n" " the mandatory and optional dependencies in one command. See the link" printf "%s\n" " below:" printf "%s\n" " https://www.gnu.org/s/gnuastro/manual/html_node/Dependencies-from-package-managers.html" printf "%s\n" printf "%s\n" " All checks related to the warning(s) above will be skipped." printf "%s\n" fi # Notice about PATH: The last two scenarios described below are # taken from # https://unix.stackexchange.com/questions/65700/is-it-safe-to-add-to-my-path-how-come if test "x$path_warning" = "xyes" then : printf "%s\n" " - Your PATH contains the current directory. This does not affect" printf "%s\n" " this build and installation of Gnuastro in any way, it is just to" printf "%s\n" " to remind you that this is a security risk." printf "%s\n" " It is a very serious security risk if it is closer to the start" printf "%s\n" " of your PATH: a malicious/wrong program might be run instead of" printf "%s\n" " a desired program, someone might find out you frequently mistype" printf "%s\n" " a command and install a matching one, someone might install a" printf "%s\n" " fake command with the name of one that is not installed. You can" printf "%s\n" " always run a program in the current directory by explicity adding" printf "%s\n" " a './' before it's name. Run the following command after" printf "%s\n" " installing Gnuastro to learn more about PATH:" printf "%s\n" " $ info gnuastro \"Installation directory\"" printf "%s\n" fi fi printf "%s\n" "To build Gnuastro $PACKAGE_VERSION, please run:" printf "%s\n" printf "%s\n" " make -j$jobs" printf "%s\n" printf "%s\n" "(You can change the $jobs to any number of CPU threads.)" printf "%s\n" "(Configure with '--disable-guide-message' for no messages.)" printf "%s\n" "(Please be patient, some libraries can take a few minutes to compile.)" printf "%s\n" ======================================================================= printf "%s\n" ======================================================================= printf "%s\n" fi �������������������gnuastro-0.22/configure.ac��������������������������������������������������������������������������0000644�0001750�0001750�00000171047�14551337306�011267� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Process this file with autoconf to produce a configure script. # # Hand written file: used as input into GNU Autotools (autoconf). # This is part of GNU Astronomy Utilities (gnuastro) package. # # We use some macros that are distributed as part of the GNU Autoconf # Archive here. Those macros are all placed in the bootstrapped/m4/ # directory along with those that were imported from Gnulib. The # ./bootstrap script includes that directory while its running Autoconf so # we don't need to explicitly call that directory here. # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Pedram Ashofteh-Ardakani <pedramardakani@pm.me> # Jash Shah <jash28582@gmail.com> # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Gnuastro 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. # Definitions: AC_PREREQ([2.69]) AC_INIT([GNU Astronomy Utilities], m4_esyscmd([bootstrapped/build-aux/git-version-gen \ .tarball-version --prefix "gnuastro_v"]), [bug-gnuastro@gnu.org], [gnuastro], [http://www.gnu.org/software/gnuastro/]) AC_CONFIG_AUX_DIR([bootstrapped/build-aux]) AM_INIT_AUTOMAKE([-Wall subdir-objects gnu]) AC_CONFIG_SRCDIR([lib/fits.c]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIRS([bootstrapped/m4]) # Library version, see the GNU Libtool manual ("Library interface versions" # section for the exact definition of each) for GAL_CURRENT=20 GAL_REVISION=0 GAL_AGE=0 GAL_LT_VERSION="${GAL_CURRENT}:${GAL_REVISION}:${GAL_AGE}" AC_SUBST(GAL_LT_VERSION) # Checks for programs. : ${CFLAGS=""} : ${CXXFLAGS=""} AC_PROG_CC AC_PROG_CXX AC_PROG_AWK AC_PROG_SED gl_EARLY AM_PROG_AR LT_INIT # Check the number of jobs. Depending on the operative system (GNU/Linux or # macOS), the way of getting the number of cores is different. If the # number of cores can not be obtained, set it to 8. AC_CHECK_PROG(has_nproc, nproc, [yes], [no]) AS_IF([test $has_nproc = yes], [jobs=$(nproc --all)], [ AC_CHECK_PROG(has_sysctl, sysctl, [yes], [no]) AS_IF([test $has_sysctl = yes], [jobs=$(sysctl -a | awk '/^hw\.ncpu/{print $2}')], [jobs=8]) ]) AC_SUBST(SUGGESTEDJOBS, [$jobs]) # This macro will let the libraries know that we are now in the Gnuastro # build system, not on the user's system. While we are building Gnuastro, # we have the important installation information in 'config.h'. But in the # user's own programs, this information is defined in # 'gnuastro/config.h'. With this macro, the installed headers can decide # if the latter should be included or not. Note that 'gnuastro/config.h' # is only built at installation time and doesn't exist when building # Gnuastro. Therefore, this macro must not be defined in a user's program. AC_DEFINE([IN_GNUASTRO_BUILD], [1], [In building, not usage]) # See if 'make check' should be made with Valgrind. This should be done # before checking the compilation flags because it can re-write # 'enable-debug'). AC_ARG_ENABLE(check-with-valgrind, [AS_HELP_STRING([--enable-check-with-valgrind], [Run 'make check' programs within Valgrind])], [AS_IF([test "x$enable_check_with_valgrind" != xno], [enable_check_with_valgrind=yes])], [enable_check_with_valgrind=no]) AS_IF([test "x$enable_check_with_valgrind" = "xyes"], [ enable_debug=yes; AC_CHECK_PROG(has_valgrind, valgrind, [yes], [no]) AS_IF([test "x$has_valgrind" = "xno"], [AC_MSG_ERROR([Valgrind not found. Please install it or don't use '--enable-check-with-valgrind'])]) ]) AM_CONDITIONAL([COND_CHECK_WITH_VALGRIND], [test "x$enable_check_with_valgrind" = "xyes"]) # Set the compilation flags. AC_ARG_ENABLE(debug, [AS_HELP_STRING([--enable-debug], [No optimization, debug flags, no shared lib.])], [AS_IF([test "x$enable_debug" != xno], [enable_debug=yes])], [enable_debug=no]) AS_IF([test "x$enable_debug" = "xyes"], [cflags_add="-g -O0"; enable_shared=no], [cflags_add="-O3"]) CFLAGS="-Wall $cflags_add $CFLAGS" CXXFLAGS="-Wall $cflags_add $CXXFLAGS" # See if the C++ compiler was present. 'CXX' has already been set by # 'AC_PROG_CXX' (above). According to the Autoconf manual: "if none of the # [AC_PROG_CXX] checks succeed, then as a last resort [it will] set 'CXX' # to 'g++'". Therefore, we can't rely on it to see if the compiler # executable is actually usable. Therefore tests that rely on it will # fail. Unfortunately some OSs (like Fedora), don't install 'g++' with # 'gcc', so it may not always be present. To fix this, here we are just # using 'AC_CHECK_PROG' to see if the 'CXX' executable is reachable in the # search path and if it isn't, we'll disable the C++ check during 'make # check' with an Automake conditional. AC_CHECK_PROG(has_cxx, $CXX, "yes", "no") AM_CONDITIONAL([COND_HASCXX], [test "x$has_cxx" = "xyes"]) # Check for pthreads and add the appropriate compilation flags. AX_PTHREAD # comes from the GNU Autoconf Archive's ax_pthread.m4, see there for the # documentation. AX_PTHREAD([],[AC_MSG_ERROR([AC_PACKAGE_NAME Needs POSIX Threads (pthread)])]) CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CC="$PTHREAD_CC" # See if the C++ compiler understands '-Qunused-arguments'. AX_PTHREAD adds # puts this option in 'PTHREAD_CFLAGS' when the C compiler knows this # option. We then pass it to CFLAGS and CXXFLAGS above. But as reported in # bug #52490, it can happen that sometimes, the C++ compiler doesn't # recognize it. So we need to do a separate check for C++. cxxflags_tmp= for flg in $CXXFLAGS do AS_IF([test "$flg" = \-Qunused-arguments], [ AC_LANG(C++) AX_CHECK_COMPILE_FLAG([-Qunused-arguments], [cxx_Qunused_arguments=yes; cxxflags_tmp="$cxxflags_tmp $flg"], [cxx_Qunused_arguments=no]) AC_LANG(C) ], [ cxxflags_tmp="$cxxflags_tmp $flg"]) done CXXFLAGS="$cxxflags_tmp" # Check if 'malloc(0)' returns valid pointer AC_FUNC_MALLOC # Check the size of necessary system specific types. AC_CHECK_SIZEOF([size_t]) AC_SUBST(SIZEOF_SIZE_T, [$ac_cv_sizeof_size_t]) AC_DEFINE_UNQUOTED([GAL_CONFIG_SIZEOF_SIZE_T], [$ac_cv_sizeof_size_t], [On 32bit will be 4, on 64 bit, will be 8]) AC_CHECK_SIZEOF([long]) AC_SUBST(SIZEOF_LONG, [$ac_cv_sizeof_long]) AC_DEFINE_UNQUOTED([GAL_CONFIG_SIZEOF_LONG], [$ac_cv_sizeof_long], [On 32bit will be 4, on 64 bit, will be 8]) AC_CHECK_SIZEOF([int]) AC_SUBST(SIZEOF_INT, [$ac_cv_sizeof_int]) AC_DEFINE_UNQUOTED([GAL_CONFIG_SIZEOF_INT], [$ac_cv_sizeof_int], [It may be 16bit or 32bit]) # By default we assume no warnings anywarnings=no # Remove any occurance of the current directory './', '.', or the full # address of the current directory in PATH. The main problem is the # 'libtool' executable which Gnuastro builds internally in the top build # directory. However, we also need to know if the system has libtool or # not. AC_MSG_CHECKING(if PATH contains current directory) oldPATH=$PATH currpwd=$(pwd) # The first call to SED will remove any occurance of the current directory: # './', '.', or the full address. # # NOTE 1: We cannot simply remove all '.'s, because hidden directories # (like the '~/.local' that is suggested for local # installations) will also be altered. # # NOTE 2: An empty string in the list of strings (separated by ':') # means the current directory. This includes cases like: '::', # or a leading and trailing ':'. So after all the removals of # the current directory, we will remove all such cases. # # NOTE 3: The SED separator can be any character immediately after 's', # it doesn't just have to be the commonly used '/'. Since '$pwd' # will possibly contain many '/'s, it is much more easier to use # a differen separator ('|' in this call to SED). PATH=$(AS_ECHO([$PATH]) | $SED -e 's|'"$currpwd"'||g' \ -e 's|\.\.*//*||g' \ -e 's|:\.\.*:|:|g' \ -e 's|\.*$||' \ -e 's|^\.*||' \ -e 's|::*|:|g' \ -e 's|^:||' \ -e 's|:$||' ) AS_IF([test $oldPATH = $PATH], [ path_warning=no ], [ path_warning=yes; anywarnings=yes ]) AC_MSG_RESULT( $path_warning ) # Libraries # --------- # # After each library is found, AC_SEARCH_LIBS adds the -lLIBRARY flag to # the LIBS variable which is then given to all the Makefiles. Each new flag # is added to the left of the old one so order matters here. Note that the # LIBS variable is also used in checking the next libraries, so the linking # with their dependent libraries is done automatically with this order, and # we don't have to explicitly set the dependency flags. has_gsl=yes has_libgit2=1 has_cmath=yes has_wcslib=yes has_cfitsio=yes has_libtiff=yes has_libjpeg=yes has_gslcblas=yes missing_mandatory=no missing_optional_lib=no # Keep the original LIBS to re-set in the end. orig_LIBS="$LIBS" # Basics of the library linking checks # ------------------------------------ # # Outputs of 'AC_LIB_HAVE_LINKFLAGS' (which checks for libraries): # # - LIB<NAME>: contains the raw 'libNAME.so' or 'libNAME.a' file for some # libraries. This is necessary for static libraries, but is problematic # for shared libraries (they will not be linked to the produced # library: when you run 'ldd libgnuastro.so', you don't see those that # were linked with a '.so' file here). # # To make things worse, when linking Gnuastro's programs with # Gnuastro's library, libtool will put raw files ('.a' or '.so' files, # not '-lNAME') before 'libgnuastro.la' (which depends on them). As a # result, building shared programs with Gnuastro's library will # fail. But this is desired for static libraries. # # - LTLIB<NAME>: has '-lNAME', along with any necessary RPATH flags for # the local operating system. # # Major environment variables: # # - LIBS: is primarily used in the compilation checks of the configure # script where the host's compiler has full control. # # - LDADD: is passed to the rules that build Gnuastro's library and # programs through the 'CONFIG_LDADD' variable. # # Since nothing complex is built during the configure script, we'll just # populate 'LIBS' with 'LTLIB<NAME>'. However, building the programs and # library is very complex and we have an even more complex BuildProgram in # Gnaustro. So we fill 'LDADD' conditionally: 1) for building static # library/programs, we'll use 'LIB<NAME>'. 2) for building shared # libraries, we'll use 'LTLIB<NAME>'. # Why C math library (for things like 'log')? Even though '-lm' is also # found for GSL below, on some systems (reported on Ubuntu), if we don't # add it explicitly here, the build will crash because of a failure to link # with the math functions. AC_LIB_HAVE_LINKFLAGS([m], [], [#include <math.h>]) AS_IF([test "x$LIBM" = x], [], [LIBS="$LIBM $LIBS" AS_IF([ test "x$enable_shared" = "xno" ], [LDADD="$LIBM $LDADD"], [LDADD="$LTLIBM $LDADD"]) ]) AC_LIB_HAVE_LINKFLAGS([gsl], [gslcblas], [ #include <gsl/gsl_rng.h> void junk(void) { gsl_rng_env_setup(); } ]) AS_IF([test "x$LIBGSL" = x], [missing_mandatory=yes; has_gsl=no; has_gslcblas=no], [LIBS="$LIBGSL $LIBS" AS_IF([ test "x$enable_shared" = "xno" ], [LDADD="$LIBGSL $LDADD"], [LDADD="$LTLIBGSL $LDADD"]) ]) # Since version 0.42, if 'libcurl' is installed, CFITSIO will link with it # and thus it will be necessary to explicitly link with libcurl also. If it # doesn't exist on the system, then CFITSIO won't link with it and there is # no problem for Gnuastro either. So there is no need to stop the configure # script if libcurl isn't found. # # For static builds, linking libcurl (also built in static-only mode) will # depend on linking with zlib. So we'll need to also search for that # also. But if libcurl isn't built in static-only mode, then it will have # undefined symbols for many libraries (for example libpsl, libidn2, # librtmp, libldap). So if you intend to make Gnuastro statically, then # build Libcurl in static-only mode so you won't have to check for all # these extra libraries here. # # Similarly, if the Bzip2 library was activated when building CFITSIO, it # will be necessary in a static build to CFITSIO. AC_LIB_HAVE_LINKFLAGS([z], [], [#include <zlib.h>]) AS_IF([test "x$LIBZ" = x], [], [LIBS="$LIBZ $LIBS" AS_IF([ test "x$enable_shared" = "xno" ], [LDADD="$LIBZ $LDADD"], [LDADD="$LTLIBZ $LDADD"]) ]) AC_LIB_HAVE_LINKFLAGS([bz2], [], [#include <bzlib.h>]) AS_IF([test "x$LIBBZ2" = x], [], [LIBS="$LIBBZ2 $LIBS" AS_IF([ test "x$enable_shared" = "xno" ], [LDADD="$LIBBZ2 $LDADD"], [LDADD="$LTLIBBZ2 $LDADD"]) ]) AC_LIB_HAVE_LINKFLAGS([curl], [], [#include <curl/curl.h>]) AS_IF([test "x$LIBCURL" = x], [], [LIBS="$LIBCURL $LIBS" AS_IF([ test "x$enable_shared" = "xno" ], [LDADD="$LIBCURL $LDADD"], [LDADD="$LTLIBCURL $LDADD"]) ]) AC_LIB_HAVE_LINKFLAGS([cfitsio], [], [ #include <fitsio.h> void junk(void) { int status; fitsfile *f; ffopen(&f, "junk", READONLY, &status);} ]) AS_IF([test "x$LIBCFITSIO" = x], [missing_mandatory=yes; has_cfitsio=no], [LIBS="$LIBCFITSIO $LIBS" AS_IF([ test "x$enable_shared" = "xno" ], [LDADD="$LIBCFITSIO $LDADD"], [LDADD="$LTLIBCFITSIO $LDADD"]) ]) AC_LIB_HAVE_LINKFLAGS([wcs], [], [ #include <wcslib/wcshdr.h> void junk(void) { int nreject, nwcs; struct wcsprm *wcs; char *header="JUNK"; wcspih(header, 1, 0, 0, &nreject, &nwcs, &wcs); } ]) AS_IF([test "x$LIBWCS" = x], [missing_mandatory=yes; has_wcslib=no], [LIBS="$LIBWCS $LIBS" AS_IF([ test "x$enable_shared" = "xno" ], [LDADD="$LIBWCS $LDADD"], [LDADD="$LTLIBWCS $LDADD"]) ]) AC_ARG_WITH([libjpeg], [AS_HELP_STRING([--without-libjpeg], [disable support for libjpeg])], [], [with_libjpeg=yes]) AS_IF([test "x$with_libjpeg" != xno], [ AC_LIB_HAVE_LINKFLAGS([jpeg], [], [ #include <stdio.h> #include <stdlib.h> #include <jpeglib.h> void junk(void) { struct jpeg_decompress_struct cinfo; jpeg_create_decompress(&cinfo); } ]) ]) AS_IF([test "x$LIBJPEG" = x], [missing_optional_lib=yes; has_libjpeg=no; anywarnings=yes], [LIBS="$LIBJPEG $LIBS" AS_IF([ test "x$enable_shared" = "xno" ], [LDADD="$LIBJPEG $LDADD"], [LDADD="$LTLIBJPEG $LDADD"]) ]) AM_CONDITIONAL([COND_HASLIBJPEG], [test "x$has_libjpeg" = "xyes"]) AC_ARG_WITH([libtiff], [AS_HELP_STRING([--without-libtiff], [disable support for libtiff])], [], [with_libtiff=yes]) AS_IF([test "x$with_libtiff" != xno], [ AC_LIB_HAVE_LINKFLAGS([lzma], [], [#include <lzma.h>]) AC_LIB_HAVE_LINKFLAGS([tiff], [], [ #include <tiffio.h> void junk(void) {TIFF *tif=TIFFOpen("junk", "r");} ]) ]) AS_IF([test "x$LIBTIFF" = x], [missing_optional_lib=yes; has_libtiff=no; anywarnings=yes], [LIBS="$LIBTIFF $LIBS" AS_IF([ test "x$enable_shared" = "xno" ], [LDADD="$LIBTIFF $LDADD"], [LDADD="$LTLIBTIFF $LDADD"]) ]) AM_CONDITIONAL([COND_HASLIBTIFF], [test "x$has_libtiff" = "xyes"]) # libgit2 (very old versions of libgit2 don't have the 'git_libgit2_init'). AC_ARG_WITH([libgit2], [AS_HELP_STRING([--without-libgit2], [disable support for libgit2])], [], [with_libgit2=yes]) AS_IF([test "x$with_libgit2" != xno], [ AC_LIB_HAVE_LINKFLAGS([git2], [], [ #include <git2.h> void junk(void) {git_libgit2_init();} ]) ]) AS_IF([test "x$LIBGIT2" = x], [missing_optional_lib=yes; has_libgit2=0], [LIBS="$LIBGIT2 $LIBS" AS_IF([ test "x$enable_shared" = "xno" ], [LDADD="$LIBGIT2 $LDADD"], [LDADD="$LTLIBGIT2 $LDADD"]) ]) AC_SUBST(HAVE_LIBGIT2_FOR_CONF, [$has_libgit2]) AC_DEFINE_UNQUOTED([GAL_CONFIG_HAVE_LIBGIT2], [$has_libgit2], [libgit2 is installed on the system]) AS_IF([test "x$has_libgit2" = "x1"], [], [anywarnings=yes]) # Check if the compiler works with static linking AS_IF([test "$lt_cv_prog_compiler_static_works" = no ], [ AS_IF([test "$enable_shared" = no ], [ anywarnings=yes; enable_shared_disabled=yes ]) enable_shared=yes ]) # End of library linking list # --------------------------- # # If we are in static mode, convert any string ending in 'libpthread.a' to # '-lpthread' (because pthread is part of the C library and atleast in # Gnuastro's usage so far, can't be statically linked (gives errors on # undefined symbols like '_dl_pagesize' or '_dl_init_static_tls'). AS_IF([test "x$enable_shared" = "xno"], [ LDADD=$(AS_ECHO(["$LDADD"]) \ | $AWK '{for(i=1; i<=NF; ++i) { \ if( $i ~ /libpthread.a/ ) \ $i="-lpthread" } \ print $0}') ]) # Higher-level library tests # -------------------------- # # Once we know that a library exsits, we need to check if it has some # features or not. This must be done _after_ checking the existance of # _all_ the libraries, because they may add elements to 'LIBS'/'LDADD' that # causes possibly different versions of the libraries to be read. # GSL's 'gsl_interp_steffen' isn't a function. So we'll need to use # 'AC_LINK_IFELSE'. However, AC_LINK_IFELSE doesn't use 'LDADD', so we'll # have to temporarily add 'LDADD' to LIBS, then set it back to the # original. AC_MSG_CHECKING(if GSL supports Steffen splines) AC_LINK_IFELSE([AC_LANG_PROGRAM( [[#include <gsl/gsl_interp.h>]], [[const gsl_interp_type *itype=gsl_interp_steffen;]])], [AC_MSG_RESULT(yes) gsl_version_old=no; has_gsl_steffen=1;], [AC_MSG_RESULT(no) gsl_version_old=yes; has_gsl_steffen=0; anywarnings=yes;]) AC_DEFINE_UNQUOTED([GAL_CONFIG_HAVE_GSL_INTERP_STEFFEN], [$has_gsl_steffen], [GSL has the Steffen interpolation]) AC_SUBST(HAVE_GSL_STEFFEN, [$has_gsl_steffen]) # If the CFITSIO library has the 'fits_is_reentrant' function (it was added # since version 3.30 of April 2012). AC_CHECK_LIB([cfitsio], [fits_is_reentrant], [has_fits_is_reentrant=1], [has_fits_is_reentrant=0; anywarnings=yes], [-lm]) AC_DEFINE_UNQUOTED([GAL_CONFIG_HAVE_FITS_IS_REENTRANT], [$has_fits_is_reentrant], [CFITSIO has the fits_is_reentrant function]) AC_SUBST(HAVE_FITS_IS_REENTRANT, [$has_fits_is_reentrant]) # If the WCS library has the 'wcslib_version' function. AC_CHECK_LIB([wcs], [wcslib_version], [has_wcslib_version=1], [has_wcslib_version=0; anywarnings=yes], [-lcfitsio -lm]) AC_DEFINE_UNQUOTED([GAL_CONFIG_HAVE_WCSLIB_VERSION], [$has_wcslib_version], [WCSLIB comes with wcslib_version]) AC_SUBST(HAVE_WCSLIB_VERSION, [$has_wcslib_version]) # If the WCS library supports distortion AC_CHECK_HEADER([wcslib/dis.h], [has_wcslib_dis_h=1], [has_wcslib_dis_h=0; anywarnings=yes]) AC_DEFINE_UNQUOTED([GAL_CONFIG_HAVE_WCSLIB_DIS_H], [$has_wcslib_dis_h], [WCSLIB has distortion header in dis.h]) AC_SUBST(HAVE_WCSLIB_DIS_H, [$has_wcslib_dis_h]) AM_CONDITIONAL([COND_HASWCSDIS_H], [test "x$has_wcslib_dis_h" = "x1"]) # If the WCS library has the 'mjdref' element. AC_CHECK_MEMBER([struct wcsprm.mjdref], [has_wcslib_mjdref=1], [has_wcslib_mjdref=0], [[#include <wcslib/wcs.h>]]) AC_DEFINE_UNQUOTED([GAL_CONFIG_HAVE_WCSLIB_MJDREF], [$has_wcslib_mjdref], [WCSLIB comes with wcsprm.mjdref]) AC_SUBST(HAVE_WCSLIB_MJDREF, [$has_wcslib_mjdref]) # If the WCS library has the OBSFIX macro. AC_CHECK_DECL(OBSFIX, [has_wcslib_obsfix=1], [has_wcslib_obsfix=0], [[#include <wcslib/wcsfix.h>]]) AC_DEFINE_UNQUOTED([GAL_CONFIG_HAVE_WCSLIB_OBSFIX], [$has_wcslib_obsfix], [WCSLIB comes with OBSFIX macro]) AC_SUBST(HAVE_WCSLIB_OBSFIX, [$has_wcslib_obsfix]) # If the WCS library has the 'wcsccs' function. AC_CHECK_LIB([wcs], [wcsccs], [has_wcslib_wcsccs=1], [has_wcslib_wcsccs=0; anywarnings=yes], [-lcfitsio -lm]) AC_DEFINE_UNQUOTED([GAL_CONFIG_HAVE_WCSLIB_WCSCCS], [$has_wcslib_wcsccs], [WCSLIB comes with wcsccs]) AC_SUBST(HAVE_WCSLIB_WCSCCS, [$has_wcslib_wcsccs]) # If the pthreads library has 'pthread_barrier_wait'. AC_CHECK_LIB([pthread], [pthread_barrier_wait], [has_pthread_barrier=1], [has_pthread_barrier=0]) AC_DEFINE_UNQUOTED([GAL_CONFIG_HAVE_PTHREAD_BARRIER], [$has_pthread_barrier], [System has pthread_barrier]) AC_SUBST(HAVE_PTHREAD_BARRIER, [$has_pthread_barrier]) # If a GNU Make header can be found (for Gnuastro's GNU Make extensions) AC_CHECK_HEADER([gnumake.h], [has_gnumake_h=1], [has_gnumake_h=0; anywarnings=yes]) AC_DEFINE_UNQUOTED([GAL_CONFIG_HAVE_GNUMAKE_H], [$has_gnumake_h], [GNU Make's extension header is present.]) AC_SUBST(HAVE_GNUMAKE_H, [$has_gnumake_h]) AM_CONDITIONAL([COND_HASGNUMAKE_H], [test "x$has_gnumake_h" = "x1"]) # Programs # -------- # Help2man: AC_CHECK_PROG(has_help2man, help2man, [yes], [no]) AM_CONDITIONAL([COND_HASHELP2MAN], [test "x$has_help2man" = "xyes"]) # cURL: AC_CHECK_PROG(has_curl, curl, [yes], [no]) AS_IF([test "x$has_curl" = "xno"], [anywarnings=yes]) # Check the libtool executable on the system. Note that Gnuastro also ships # with a version of Libtool. We don't want Gnuastro's Libtool, here we want # to see if the system has libtool independent of Gnuastro so BuildProgram # can use it later. We also need to check some shells to run libtool within # them. AC_CHECK_PROG(has_libtool, libtool, [yes], [no]) AC_CHECK_PROG(has_bash, bash, [yes], [no]) AC_CHECK_PROG(has_zsh, zsh, [yes], [no]) # If Libtool is present, make sure it is GNU Libtool AS_IF([test "x$has_libtool" = "xyes"], [ AC_MSG_CHECKING(if libtool executable is GNU) AS_IF( libtool --version 2> /dev/null | grep GNU 2>&1 > /dev/null, [has_gnulibtool=yes], [has_gnulibtool=no]) AC_MSG_RESULT( $has_gnulibtool )], [ has_gnulibtool=no ]) # When either the 'libtool' executable isn't GNU or it doesn't exist, then # look for 'glibtool'. AS_IF([test "x$has_gnulibtool" = "xyes"], [ gnulibtool_exec=libtool ], [ AC_CHECK_PROG(has_glibtool, glibtool, [yes], [no]) AS_IF( [test "x$has_glibtool" = "xyes"], [has_gnulibtool=yes; gnulibtool_exec=glibtool], [has_gnulibtool=no; anywarnings=yes] ) ]) # Older versions of GNU Libtool have problems with the 'dash' shell (a # minimalist shell) and will crash (due to not having the '+=' operator), # see bug #54430. So we need to check if the system's libtool and shell # (called by 'sh' as in C's 'system' function within BuildProgram) can work # with each other. If not, we need to search for Bash and tell BuildProgram # to use Bash instead of the default. But older versions of Bash also don't # support this operator, so we'll have to check with Bash is well. libtool_shell="none" AS_IF([test "x$has_gnulibtool" = "xyes"], [ AC_MSG_CHECKING(for shell to use with libtool) # Make a C source file and run Libtool on it with the specified # shells. outname=libtool_shell_test cprog=libtool_shell_test.c AS_ECHO(["#include <stdio.h>"]) > $cprog AS_ECHO(["int main(void){printf(\"success\\n\"); return 0;}"]) >> $cprog ltargs="--quiet --tag=CC --mode=link $CC $cprog -O3 -o $outname" # Check the shells, starting with known shells and ultimately # trying with 'sh' (can be any shell). AS_IF([test "x$has_bash" = "xyes"], [AS_IF(bash -c "$gnulibtool_exec $ltargs" > /dev/null 2>&1, [libtool_shell="bash"], [bash_version=$BASH_VERSION]) ], [AS_IF([test "x$has_zsh" = "xyes"], [AS_IF(zsh -c "$gnulibtool_exec $ltargs" > /dev/null 2>&1, [libtool_shell="zsh"]) ], [AS_IF(sh -c "$gnulibtool_exec $ltargs" > /dev/null 2>&1, [libtool_shell="sh"]) ]) ]) # Clean up: note that no output might have been generated (when no # proper shell was found). Therefore, for deleting the output file, # we'll call 'rm' with '-f' so it doesn't complain with an error in # such cases. rm $cprog rm -f $outname AC_MSG_RESULT($libtool_shell) ]) # If a good shell to call Libtool could be found, then Libtool is usable # within a program (BuildProgram in this case). AS_IF([test "x$libtool_shell" = "xnone"], [ anywarnings=yes; usable_libtool=no; AS_IF([test "x$bash_version" = x], [junk=1], [AS_ECHO(["GNU Bash was found but not a suitable version: $bash_version"]) ]) ], [ usable_libtool=yes AC_DEFINE_UNQUOTED([GAL_CONFIG_GNULIBTOOL_SHELL], ["$libtool_shell"], [Shell program to use with GNU Libtool]) AC_DEFINE_UNQUOTED([GAL_CONFIG_GNULIBTOOL_EXEC], ["$gnulibtool_exec"], [The executable to call GNU Libtool]) ]) # Check Ghostscript: "-dPDFFitPage" option to Ghostscript, used by the # library to convert from EPS to PDF, has been introduced in Ghostscript # 9.10. Make sure we have at least that version. # # Below, only when Ghostscript exists, we check its version and only if its # version is larger than 9.10, does Gnuastro finally assume the existence # of Ghostscript. AX_COMPARE_VERSION comes from the GNU Autoconf Archive's # ax_compare_version.m4. AC_CHECK_PROG(has_ghostscript, gs, [yes], [no]) AS_IF([test "x$has_ghostscript" = "xyes"], [AC_MSG_CHECKING(Ghostscript version) gsversion=$(gs --version) AX_COMPARE_VERSION([9.10], [gt], [$gsversion], [has_ghostscript=no]) AC_MSG_RESULT( $gsversion )]) # Note: 'has_ghostscript' can be set to 'no' within the AS_IF above, so # 'anywarnings' cannot be an [RUN-IF-FALSE] argument to the AS_IF above. AS_IF([test "x$has_ghostscript" = "xno"], [anywarnings=yes]) AM_CONDITIONAL([COND_HASGHOSTSCRIPT], [test "x$has_ghostscript" = "xyes"]) # Check DS9 and TOPCAT AC_CHECK_PROG(has_ds9, ds9, [yes], [no]) AS_IF([test "x$has_ds9" = "xno"], [anywarnings=yes]) AC_CHECK_PROG(has_topcat, topcat, [yes], [no]) AS_IF([test "x$has_topcat" = "xno"], [anywarnings=yes]) # Check Python3 and NumPy (in that order): and gets their include path if # they do. This is done using two python scripts: # py_check_cmd: Uses the sysconfig package's get_paths method # to get the include path for Python.h header. # np_check_cmd: Uses numpy's get_include method to get the # include path for NumPy's core C-API. # # NOTE: If using a venv then set the $PYTHON variable to point to the # python3 command of the venv before running ./configure to perform # all the following checks in the venv. AC_ARG_WITH([python], [AS_HELP_STRING([--with-python], [enable support for python])], [], [with_python=no]) AS_IF([test "x$with_python" == xyes], [ # Variables to simplify commands below. py_check_cmd='from sysconfig import get_paths; \ print(get_paths().get("include"))' np_check_cmd='from numpy import get_include; \ print(get_include())' # Checks if user has a Python version>=3.0 AM_PATH_PYTHON(3.0,,[:]) AS_IF([test "$PYTHON" != :], [ AC_DEFINE(HAVE_PYTHON, [1], [Define to 1 if you have Python3.]) AC_MSG_CHECKING(if Numpy is available in the $PYTHON installation) AS_IF([$PYTHON -c "$py_check_cmd" &> /dev/null], [python_includedir="$($PYTHON -c "$py_check_cmd")" AS_IF([$PYTHON -c "$np_check_cmd" &> /dev/null], [numpy_includedir="$($PYTHON -c "$np_check_cmd")"])]) AS_IF([test "x$numpy_includedir" = x], [AC_MSG_RESULT([no])], [AC_MSG_RESULT([yes])]) ]) AC_SUBST(NUMPY_INCLUDE_DIR, [$numpy_includedir]) AC_SUBST(PYTHON_INCLUDE_DIR, [$python_includedir]) ]) AS_IF([test "x$numpy_includedir" = x], [has_numpy=0], [has_numpy=1;]) AC_SUBST(HAVE_PYTHON, [$has_numpy]) AM_CONDITIONAL([COND_NUMPY], [test "x$numpy_includedir" != x]) # If any necessary dependency is missing inform the user and abort. AS_IF([test "x$missing_mandatory" = "xyes"], [ # List missing packages: print the GSL CBLAS message only if GSL is # present. Otherwise, it is just confusing for the users (CBLAS # will be installed with GSL). The CBLAS message is only # interesting if the GSL test has passed. AS_ECHO([""]) AS_ECHO(["Missing MANDATORY dependencies (necessary to continue):"]) AS_IF([test "x$has_cmath" = "xno"], [ AS_ECHO([" - C library (math): This may be the cause of all other failures."]) ]) AS_IF([test "x$has_gsl" = "xno"], [ AS_ECHO([" - GNU Scientific Library (GSL): https://www.gnu.org/software/gsl"]) ], [ AS_IF([test "x$has_gslcblas" = "xno"], [ AS_ECHO([" - The BLAS support of GNU Scientific Library (GSL). This should have"]) AS_ECHO([" been installed along with GSL. Try re-installing GSL."]) ]) ]) AS_IF([test "x$has_cfitsio" = "xno"], [ AS_ECHO([" - CFITSIO: https://heasarc.gsfc.nasa.gov/fitsio"]) ]) AS_IF([test "x$has_wcslib" = "xno"], [ AS_ECHO([" - WCSLIB: http://www.atnf.csiro.au/people/mcalabre/WCS"]) ]) # Optional dependencies: AS_IF([test "x$anywarnings" = xyes], [ AS_ECHO([""]) AS_ECHO(["OPTIONAL warnings/dependencies (for improved functionality):"]) AS_IF([test "x$gsl_version_old" = "xyes"], [ AS_ECHO([" - Old GSL version: https://www.gnu.org/s/gsl"]) ]) AS_IF([test "x$has_libjpeg" = "xno"], [ AS_ECHO([" - Missing Libjpeg (JPEG files): http://ijg.org"]) ]) AS_IF([test "x$has_libtiff" = "xno"], [ AS_ECHO([" - Missing Libtiff (TIFF files): http://libtiff.maptools.org"]) ]) AS_IF([test "x$has_libgit2" = "x0"], [ AS_ECHO([" - Missing Libgit2: https://libgit2.org"]) ]) AS_IF([test "x$has_curl" = "x0"], [ AS_ECHO([" - Missing cURL: https://curl.haxx.se"]) ]) dnl AS_IF([test "x$has_numpy" = "x0"], dnl [ AS_ECHO([" - Missing Numpy (for Python wrappers): https://numpy.org"]) ]) AS_IF([test "x$has_ds9" = "xno"], [ AS_ECHO([" - Missing SAO DS9: https://sites.google.com/cfa.harvard.edu/saoimageds9"]) ]) AS_IF([test "x$has_topcat" = "xno"], [ AS_ECHO([" - Missing TOPCAT: http://www.star.bris.ac.uk/~mbt/topcat/"]) ]) AS_IF([test "x$usable_libtool" = "xno"], [ AS_ECHO([" - Unusable GNU Libtool: https://www.gnu.org/s/libtool"]) AS_IF([test "x$has_gnulibtool" = "xyes"], [ AS_ECHO([" -- GNU Libtool is present, tested shells not supported."]) ]) AS_IF([test "x$has_libtool" = "xyes"], [ AS_ECHO([" -- A libtool implementation was found, but it isn't GNU."]) ]) ]) AS_IF([test "x$has_ghostscript" = "xno"], [ AS_ECHO([" - Missing GPL Ghostscript (v9.10 or later): https://www.ghostscript.com"])]) ]) # Suggestions on fixing the problem. AS_ECHO([""]) AS_ECHO(["You can use your package manager for easy and fast installation of all"]) AS_ECHO(["dependencies in one command. See the link below:"]) AS_ECHO([" https://www.gnu.org/s/gnuastro/manual/html_node/Dependencies-from-package-managers.html"]) AS_ECHO([""]) AS_ECHO(["If you have already installed a dependency (for example in '/install/path'),"]) AS_ECHO(["but this script can't link with it, add the path to the LDFLAGS, CPPFLAGS and"]) AS_ECHO(["LD_LIBRARY_PATH environment variables before running configure. For example"]) AS_ECHO(["with the following commands (just correct the '/install/path' part)."]) AS_ECHO([" $ export LDFLAGS=\"\$LDFLAGS -L/install/path/lib\""]) AS_ECHO([" $ export CPPFLAGS=\"\$CPPFLAGS -I/install/path/include\""]) AS_ECHO([" $ export LD_LIBRARY_PATH=\"\$LD_LIBRARY_PATH:/install/path/lib\""]) AS_ECHO([""]) AS_ECHO(["[TIP:] Put these commands in your startup file (for example '~/.bashrc') to"]) AS_ECHO(["avoid similar problems later. See the link below to learn more:"]) AS_ECHO([" https://www.gnu.org/s/gnuastro/manual/html_node/Installation-directory.html"]) AS_ECHO([""]) AS_ECHO([""]) AC_MSG_ERROR([Mandatory dependency(s) missing, === SEE MESSAGE ABOVE ===.]) ]) # Gnulib checks (which are many!). We are doing these after the main # Gnuastro dependencies so the configure script crashes early if the # mandatory dependencies aren't present. However, the Gnulib checks are # very low-level, and the changes in envornment that we made above (in # particular 'LIBS') can cause conflicts with Gnulib's checks (in # particular with WCSLIB, because on some systems, WCSLIB's library name: # 'libwcs' can cause conflicts with the standard wide-character-string # library: 'libwcs'). new_LIBS="$LIBS" LIBS="$orig_LIBS" gl_INIT LIBS="$new_LIBS" # Check if Gnulib tests should be done: AC_ARG_ENABLE([gnulibcheck], [AS_HELP_STRING([--enable-gnulibcheck], [In 'make check', also test GNU Gnulib.])], [enable_gnulibcheck=yes], [enable_gnulibcheck=no]) AM_CONDITIONAL([COND_GNULIBCHECK], [test $enable_gnulibcheck = yes]) # Gnulib checks for the proper name for the C99 equivalent 'restrict' # keyword and puts it in the 'ac_cv_c_restrict' variable. If none exists, # it will put a 'no' inside of this variable. As described in the output # 'bootstrapped/m4/gnulib-common.m4', this is only necessary until Autoconf # 2.70 is released. Afterwards, we can use AC_C_RESTRICT. AS_IF([test "x$ac_cv_c_restrict" = "xno"], [gal_restrict_replace=], [gal_restrict_replace=$ac_cv_c_restrict]) AC_SUBST(RESTRICT_REPLACEMENT, [$gal_restrict_replace]) # Set the one general parameters: AC_DEFINE_UNQUOTED([CONF_POSTFIX], [".conf"], [Configuration file post fix.]) AC_DEFINE_UNQUOTED([USERCONFIG_DIR], [".local/etc"], [User data dir.]) AC_DEFINE_UNQUOTED([CONF_SHOWFMT], [" %-20s"], [Configuration file name format.]) # Read arguments about which programs to install. After checking if # the argument was actually called, remove any value the user might # have given by setting them to "yes" if they are not "no". These # options don't accept arguments. ayes=false AC_ARG_ENABLE([arithmetic], [AS_HELP_STRING([--enable-arithmetic], [Install Arithmetic and other enabled programs.])], [AS_IF([test "x$enable_arithmetic" != xno], [enable_arithmetic=yes; ayes=true])], [enable_arithmetic=notset]) AC_ARG_ENABLE([buildprog], [AS_HELP_STRING([--enable-buildprog], [Install BuildProgram and other enabled programs.])], [AS_IF([test "x$enable_buildprog" != xno], [enable_buildprog=yes; ayes=true])], [enable_buildprog=notset]) AC_ARG_ENABLE([convertt], [AS_HELP_STRING([--enable-convertt], [Install ConvertType and other enabled programs.])], [AS_IF([test "x$enable_convertt" != xno], [enable_convertt=yes; ayes=true])], [enable_convertt=notset]) AC_ARG_ENABLE([convolve], [AS_HELP_STRING([--enable-convolve], [Install Convolve and other enabled programs.])], [AS_IF([test "x$enable_convolve" != xno], [enable_cognvolve=yes; ayes=true])], [enable_convolve=notset]) AC_ARG_ENABLE([cosmiccal], [AS_HELP_STRING([--enable-cosmiccal], [Install CosmicCalculator and other enabled programs.])], [AS_IF([test "x$enable_cosmiccal" != xno], [enable_cosmiccal=yes; ayes=true])], [enable_cosmiccal=notset]) AC_ARG_ENABLE([crop], [AS_HELP_STRING([--enable-crop], [Install Crop and other enabled programs.])], [AS_IF([test "x$enable_crop" != xno], [enable_crop=yes; ayes=true])], [enable_crop=notset]) AC_ARG_ENABLE([fits], [AS_HELP_STRING([--enable-fits], [Install Fits and other enabled programs.])], [AS_IF([test "x$enable_fits" != xno], [enable_fits=yes; ayes=true])], [enable_fits=notset]) AC_ARG_ENABLE([match], [AS_HELP_STRING([--enable-match], [Install Match and other enabled programs.])], [AS_IF([test "x$enable_match" != xno], [enable_match=yes; ayes=true])], [enable_match=notset]) AC_ARG_ENABLE([mkcatalog], [AS_HELP_STRING([--enable-mkcatalog], [Install MakeCatalog and other enabled programs.])], [AS_IF([test "x$enable_mkcatalog" != xno], [enable_mkcatalog=yes; ayes=true])], [enable_mkcatalog=notset]) AC_ARG_ENABLE([mkprof], [AS_HELP_STRING([--enable-mkprof], [Install MakeProfile and other enabled programs.])], [AS_IF([test "x$enable_mkprof" != xno], [enable_mkprof=yes; ayes=true])], [enable_mkprof=notset]) AC_ARG_ENABLE([noisechisel], [AS_HELP_STRING([--enable-noisechisel], [Install NoiseChisel and other enabled programs.])], [AS_IF([test "x$enable_noisechisel" != xno], [enable_noisechisel=yes; ayes=true])], [enable_noisechisel=notset]) AC_ARG_ENABLE([query], [AS_HELP_STRING([--enable-query], [Install query and other enabled packages.])], [AS_IF([test "x$enable_query" != xno], [enable_query=yes; ayes=true])], [enable_query=notset]) AC_ARG_ENABLE([segment], [AS_HELP_STRING([--enable-segment], [Install Segment and other enabled programs.])], [AS_IF([test "x$enable_segment" != xno], [enable_segment=yes; ayes=true])], [enable_segment=notset]) AC_ARG_ENABLE([statistics], [AS_HELP_STRING([--enable-statistics], [Install Statistics and other enabled programs.])], [AS_IF([test "x$enable_statistics" != xno], [enable_statistics=yes; ayes=true])], [enable_statistics=notset]) AC_ARG_ENABLE([table], [AS_HELP_STRING([--enable-table], [Install Table and other enabled programs.])], [AS_IF([test "x$enable_table" != xno], [enable_table=yes; ayes=true])], [enable_table=notset]) #AC_ARG_ENABLE([TEMPLATE], # [AS_HELP_STRING([--enable-TEMPLATE], # [Install TEMPLATE and other enabled packages.])], # [AS_IF([test "x$enable_TEMPLATE" != xno], # [enable_TEMPLATE=yes; ayes=true])], # [enable_TEMPLATE=notset]) AC_ARG_ENABLE([warp], [AS_HELP_STRING([--enable-warp], [Install Warp and other enabled programs.])], [AS_IF([test "x$enable_warp" != xno], [enable_warp=yes; ayes=true])], [enable_warp=notset]) # If we had a "ayes" variable to be "true" if there was a 'yes'. So any # program that is not explicitly requested must be ignored and vice versa # (if no programs were explicitly requested, then enable all that weren't # disabled). AS_IF([test $ayes = true ], [ AS_IF([test $enable_arithmetic = notset], [enable_arithmetic=no]) AS_IF([test $enable_buildprog = notset], [enable_buildprog=no]) AS_IF([test $enable_convertt = notset], [enable_convertt=no]) AS_IF([test $enable_convolve = notset], [enable_convolve=no]) AS_IF([test $enable_cosmiccal = notset], [enable_cosmiccal=no]) AS_IF([test $enable_crop = notset], [enable_crop=no]) AS_IF([test $enable_fits = notset], [enable_fits=no]) AS_IF([test $enable_match = notset], [enable_match=no]) AS_IF([test $enable_mkcatalog = notset], [enable_mkcatalog=no]) AS_IF([test $enable_mkprof = notset], [enable_mkprof=no]) AS_IF([test $enable_noisechisel = notset], [enable_noisechisel=no]) AS_IF([test $enable_query = notset], [enable_query=no]) AS_IF([test $enable_segment = notset], [enable_segment=no]) AS_IF([test $enable_statistics = notset], [enable_statistics=no]) AS_IF([test $enable_table = notset], [enable_table=no]) # AS_IF([test $enable_TEMPLATE = notset], [enable_TEMPLATE=no]) AS_IF([test $enable_warp = notset], [enable_warp=no]) ], [ AS_IF([test $enable_arithmetic = notset], [enable_arithmetic=yes]) AS_IF([test $enable_buildprog = notset], [enable_buildprog=yes]) AS_IF([test $enable_convertt = notset], [enable_convertt=yes]) AS_IF([test $enable_convolve = notset], [enable_convolve=yes]) AS_IF([test $enable_cosmiccal = notset], [enable_cosmiccal=yes]) AS_IF([test $enable_crop = notset], [enable_crop=yes]) AS_IF([test $enable_fits = notset], [enable_fits=yes]) AS_IF([test $enable_match = notset], [enable_match=yes]) AS_IF([test $enable_mkcatalog = notset], [enable_mkcatalog=yes]) AS_IF([test $enable_mkprof = notset], [enable_mkprof=yes]) AS_IF([test $enable_noisechisel = notset], [enable_noisechisel=yes]) AS_IF([test $enable_query = notset], [enable_query=yes]) AS_IF([test $enable_segment = notset], [enable_segment=yes]) AS_IF([test $enable_statistics = notset], [enable_statistics=yes]) AS_IF([test $enable_table = notset], [enable_table=yes]) # AS_IF([test $enable_TEMPLATE = notset], [enable_TEMPLATE=yes]) AS_IF([test $enable_warp = notset], [enable_warp=yes]) ] ) # BuildProgram depends on the presence of GNU Libtool, if it isn't present, # then don't build it. AS_IF([test "x$usable_libtool" = "xno"], [enable_buildprog=no]) # Make the enable_package values available for the Makefile: AM_CONDITIONAL([COND_ARITHMETIC], [test $enable_arithmetic = yes]) AM_CONDITIONAL([COND_BUILDPROG], [test $enable_buildprog = yes]) AM_CONDITIONAL([COND_CONVERTT], [test $enable_convertt = yes]) AM_CONDITIONAL([COND_CONVOLVE], [test $enable_convolve = yes]) AM_CONDITIONAL([COND_COSMICCAL], [test $enable_cosmiccal = yes]) AM_CONDITIONAL([COND_CROP], [test $enable_crop = yes]) AM_CONDITIONAL([COND_FITS], [test $enable_fits = yes]) AM_CONDITIONAL([COND_MATCH], [test $enable_match = yes]) AM_CONDITIONAL([COND_MKCATALOG], [test $enable_mkcatalog = yes]) AM_CONDITIONAL([COND_MKPROF], [test $enable_mkprof = yes]) AM_CONDITIONAL([COND_NOISECHISEL], [test $enable_noisechisel = yes]) AM_CONDITIONAL([COND_QUERY], [test $enable_query = yes]) AM_CONDITIONAL([COND_SEGMENT], [test $enable_segment = yes]) AM_CONDITIONAL([COND_STATISTICS], [test $enable_statistics = yes]) AM_CONDITIONAL([COND_TABLE], [test $enable_table = yes]) #AM_CONDITIONAL([COND_TEMPLATE], [test $enable_TEMPLATE = yes]) AM_CONDITIONAL([COND_WARP], [test $enable_warp = yes]) # Reset LIBS to the initial value BEFORE generating the Makefiles (so the # modified value doesn't get written into them). Then report the final # linking flags and put them in the Makefiles. LIBS="$orig_LIBS" AC_SUBST(CONFIG_LDADD, [$LDADD]) AC_SUBST(ENABLE_SHARED, [$enable_shared]) AS_ECHO(["linking flags (LDADD) ... $LDADD"]) AC_DEFINE_UNQUOTED([CONFIG_GNUASTRO_LDADD], ["$LDADD"], [Linking options for Gnuastro's library]) # Tell autoconf what to work on: # 1. Order does NOT matter here. # 2. TEMPLATE cannot be put and then commented here like the cases above, # so don't forget to add your new utility name here. AC_CONFIG_FILES([Makefile doc/Makefile lib/Makefile tests/Makefile bin/crop/Makefile bin/fits/Makefile bin/warp/Makefile bin/table/Makefile bin/match/Makefile bin/query/Makefile bin/mkprof/Makefile bin/script/Makefile bin/segment/Makefile bin/convertt/Makefile bin/convolve/Makefile bin/buildprog/Makefile bin/cosmiccal/Makefile bin/mkcatalog/Makefile bin/arithmetic/Makefile bin/statistics/Makefile bin/noisechisel/Makefile bootstrapped/lib/Makefile bootstrapped/tests/Makefile ]) # Printing guiding messages. Autoconf will make the variable # enable_guide_message from the first argument to AC_ARG_ENABLE. It will # also give it a value. From the Autoconf manual, we see that # '--disable-guide-message' is equivalent to a value of 'no', while with no # argument, the value will default to 'yes'. In the last argument to # AC_ARG_ENABLE, we also specify the default behavior (when it isn't given # at all), here we want the default to be 'yes'. AC_ARG_ENABLE([guide-message], [AS_HELP_STRING([--disable-guide-message], [No messages after each build step.])], [], [enable_guide_message=yes]) AC_SUBST(GUIDEMESSAGE, [$enable_guide_message]) # Build the man page directory. Note that this is the cleanest and most # portable way of building this directory. We don't want to do it in any of # the Makefiles. AC_CONFIG_COMMANDS([man page directory], [$MKDIR_P doc/man]) # Prepare the Makefiles. AC_OUTPUT # Print a message if necessary AS_IF([test x$enable_guide_message = xyes], [ AS_ECHO([]) AS_ECHO([=======================================================================]) AS_ECHO([=======================================================================]) AS_ECHO(["$PACKAGE_NAME (Gnuastro) $PACKAGE_VERSION is successfully"]) AS_ECHO(["configured for this machine."]) AS_ECHO([]) AS_IF([test "x$anywarnings" = xyes], [ AS_ECHO(["Configuration warning(s):"]) AS_ECHO([]) AS_IF([test "x$gsl_version_old" = "xyes"], [dependency_notice=yes AS_ECHO([" - GNU Scientific Library (GSL: https://www.gnu.org/s/gsl) version"]) AS_ECHO([" on this system doesn't have some features that can be useful in"]) AS_ECHO([" some parts of Gnuastro. This build won't crash, but Gnuastro will"]) AS_ECHO([" have less functionality afterwards. We thus recommend building"]) AS_ECHO([" and installing a more recent version of GSL (version >= 2.0,"]) AS_ECHO([" released in October 2015)."]) AS_ECHO([]) ]) AS_IF([test "x$has_fits_is_reentrant" = "x0"], [dependency_notice=yes AS_ECHO([" - CFITSIO (https://heasarc.gsfc.nasa.gov/fitsio/) version on"]) AS_ECHO([" this computer doesn't have the 'fits_is_reentrant' function"]) AS_ECHO([" which is used to see if FITS files can be read in parallel"]) AS_ECHO([" or not (it was introduced in version 3.30 released in April"]) AS_ECHO([" 2012). This won't affect the outputs of the programs, but"]) AS_ECHO([" can slow them down."]) AS_ECHO([]) ]) AS_IF([test "x$has_wcslib_version" = "x0"], [dependency_notice=yes AS_ECHO([" - WCSLIB (https://www.atnf.csiro.au/people/mcalabre/WCS) version"]) AS_ECHO([" on this system doesn't report its own version (through the "]) AS_ECHO([" function 'wcslib_version'). Therefore Gnuastro can't report "]) AS_ECHO([" the version of WCSLIB in its outputs (which is just metadata, "]) AS_ECHO([" it won't affect the operation of any of Gnuastro's programs). "]) AS_ECHO([" This function was introduced in WCSLIB version 5.0 (released "]) AS_ECHO([" in April 2015)."]) AS_ECHO([]) ]) AS_IF([test "x$has_wcslib_dis_h" = "x0"], [dependency_notice=yes AS_ECHO([" - WCSLIB (https://www.atnf.csiro.au/people/mcalabre/WCS) version"]) AS_ECHO([" on this system doesn't support distortions (i.e., it doesn't"]) AS_ECHO([" have 'dis.h'. This build won't crash but Gnuastro will not be able"]) AS_ECHO([" to do distortion-related operations. If you don't need such"]) AS_ECHO([" operations you can ignore this warning."]) AS_ECHO([]) ]) AS_IF([test "x$has_wcslib_wcsccs" = "x0"], [dependency_notice=yes AS_ECHO([" - WCSLIB (https://www.atnf.csiro.au/people/mcalabre/WCS) version"]) AS_ECHO([" on this system doesn't support conversion of coordinate systems"]) AS_ECHO([" (through the 'wcsccs' function that was introduced in WCSLIB 7.5, "]) AS_ECHO([" March 2021). For example converting from equatorial J2000 to"]) AS_ECHO([" Galactic coordinates). This build won't crash but the related"]) AS_ECHO([" functionalities in Gnuastro will be disabled. If you don't need"]) AS_ECHO([" such operations you can ignore this warning."]) AS_ECHO([]) ]) AS_IF([test "x$has_libjpeg" = "xno"], [dependency_notice=yes AS_ECHO([" - libjpeg (http://ijg.org), could not be linked with in your library"]) AS_ECHO([" search path, or is manually disabled. If JPEG inputs/outputs are"]) AS_ECHO([" requested, the respective tool will inform you and abort with an"]) AS_ECHO([" error."]) AS_ECHO([]) ]) AS_IF([test "x$has_libtiff" = "xno"], [dependency_notice=yes AS_ECHO([" - libtiff (http://libtiff.maptools.org), could not be linked with in"]) AS_ECHO([" your library search path, or is manually disabled. If TIFF"]) AS_ECHO([" inputs/outputs are requested, the respective tool will inform"]) AS_ECHO([" you and abort with an error."]) AS_ECHO([]) ]) AS_IF([test "x$has_libgit2" = "x0"], [dependency_notice=yes AS_ECHO([" - libgit2 (https://libgit2.org), could not be linked with in your"]) AS_ECHO([" library search path, or is manually disabled. When present, Git's"]) AS_ECHO([" describe output will be stored in the output files if Gnuastro's"]) AS_ECHO([" programs were called within a Gitversion controlled directory to"]) AS_ECHO([" help in reproducibility."]) AS_ECHO([]) ]) AS_IF([test "x$usable_libtool" = "xno"], [dependency_notice=yes AS_ECHO([" - GNU Libtool (https://www.gnu.org/s/libtool) can't be used on this"]) AS_ECHO([" system (see below). Gnuastro's BuildProgram uses GNU libtool to"]) AS_ECHO([" link your source code with the various libraries (Gnuastro's"]) AS_ECHO([" dependencies). Therefore BuildProgram will not be built or installed."]) AS_ECHO([" Please note that not having GNU libtool in your search path will not"]) AS_ECHO([" harm the rest of Gnuastro's building and installation. Gnuastro has"]) AS_ECHO([" its own internal implementation of GNU Libtool to build its self. This"]) AS_ECHO([" warning is only to let you know that BuildProgram will not be"]) AS_ECHO([" part of this build. The executable names searched were 'libtool'"]) AS_ECHO([" and 'glibtool'. The shells searched were 'sh', 'bash' and 'zsh'."]) AS_ECHO([]) AS_IF([test "x$has_gnulibtool" = "xyes"], [AS_ECHO([" -- GNU Libtool is present, but couldn't be run in tested shells."]) AS_IF([test "x$bash_version" = x], [junk=1], [AS_ECHO([" (GNU Bash was found but not a suitable version: $bash_version)"]) ]) AS_ECHO([])], [AS_IF([test "x$has_libtool" = "xyes"], [AS_ECHO([" -- A libtool implementation was found, but it isn't GNU."]) AS_ECHO([]) ]) ]) ]) AS_IF([test "x$has_ghostscript" = "xno"], [dependency_notice=yes AS_ECHO([" - GPL GhostScript (https://www.ghostscript.com) version 9.10 or later,"]) AS_ECHO([" with the executable name 'gs', was not found in your PATH environment"]) AS_ECHO([" variable. If PDF outputs are desired, the respective tool it will abort"]) AS_ECHO([" with an EPS output which you can convert to PDF by other means."]) AS_ECHO([]) ]) AS_IF([test "x$has_curl" = "xno"], [dependency_notice=yes AS_ECHO([" - cURL (https://curl.haxx.se) with the executable name 'curl' was not"]) AS_ECHO([" found in your PATH environment variable. 'astquery' uses it to access"]) AS_ECHO([" remote databases at run-time. So not having 'curl' won't affect this"]) AS_ECHO([" build of Gnuastro, you can continue for now. But to use 'astquery',"]) AS_ECHO([" don't forget to install cURL later (before using 'astquery' for the"]) AS_ECHO([" first time)."]) AS_ECHO([]) ]) AS_IF([test "x$has_gnumake_h" = "x0"], [dependency_notice=yes AS_ECHO([" - GNU Make (https://www.gnu.org/software/make) extension headers "]) AS_ECHO([" 'gnumake.h' couldn't be found by the C compiler. If available, "]) AS_ECHO([" Gnuastro can use those headers to add custom GNU Make functions "]) AS_ECHO([" to improve your Makefiles for data analysis workflows."]) AS_ECHO([]) ]) dnl AS_IF([test "x$has_numpy" = "x0"], dnl [dependency_notice=yes dnl AS_ECHO([" - Numpy (https://numpy.org) headers couldn't be found within a "]) dnl AS_ECHO([" Python3 installation. If available, Gnuastro's library will be "]) dnl AS_ECHO([" installed with some functions that can help Python wrappers "]) dnl AS_ECHO([" communicate with Gnuastro's library (for example pyGnuastro)."]) dnl AS_ECHO([" If you are within a virtual environment, and Python3 is"]) dnl AS_ECHO([" available there, please set the 'PYTHON' environment variable"]) dnl AS_ECHO([" to the Python3 executable's absolute location."]) dnl AS_ECHO([]) ]) AS_IF([test "x$has_ds9" = "xno"], [dependency_notice=yes AS_ECHO([" - (GUI only) SAO ds9 (https://sites.google.com/cfa.harvard.edu/saoimageds9)"]) AS_ECHO([" couldn't be found. DS9 is called by 'astscript-fits-view' to visually"]) AS_ECHO([" inspect FITS images. This doesn't affect the building of Gnuastro. So you"]) AS_ECHO([" can safely install it later (after building and installing Gnuasro)."]) AS_ECHO([]) ]) AS_IF([test "x$has_topcat" = "xno"], [dependency_notice=yes AS_ECHO([" - (GUI only) TOPCAT (http://www.star.bris.ac.uk/~mbt/topcat) couldn't be"]) AS_ECHO([" found. TOPCAT is called by 'astscript-fits-view' to visually inspect"]) AS_ECHO([" astronomical tables. This doesn't affect the building of Gnuastro. So "]) AS_ECHO([" you can safely install it later (after building and installing Gnuasro)."]) AS_ECHO([]) ]) AS_IF([test "x$enable_shared_disabled" = "xyes"], [dependency_notice=yes AS_ECHO([" - Eventhough you have asked to enable the shared libraries, maybe using"]) AS_ECHO([" the '--enable-debug' option, the compiler does not support it. So, we"]) AS_ECHO([" are intentionally disabling this option."]) AS_ECHO([]) ]) # Notice for obtaining the optional dependencies using a package # manager. AS_IF([test "x$dependency_notice" = "xyes"], [AS_ECHO([" You can use your package manager for easy and fast installation of all"]) AS_ECHO([" the mandatory and optional dependencies in one command. See the link"]) AS_ECHO([" below:"]) AS_ECHO([" https://www.gnu.org/s/gnuastro/manual/html_node/Dependencies-from-package-managers.html"]) AS_ECHO([]) AS_ECHO([" All checks related to the warning(s) above will be skipped."]) AS_ECHO([]) ]) # Notice about PATH: The last two scenarios described below are # taken from # https://unix.stackexchange.com/questions/65700/is-it-safe-to-add-to-my-path-how-come AS_IF([test "x$path_warning" = "xyes"], [AS_ECHO([" - Your PATH contains the current directory. This does not affect"]) AS_ECHO([" this build and installation of Gnuastro in any way, it is just to"]) AS_ECHO([" to remind you that this is a security risk."]) AS_ECHO([" It is a very serious security risk if it is closer to the start"]) AS_ECHO([" of your PATH: a malicious/wrong program might be run instead of"]) AS_ECHO([" a desired program, someone might find out you frequently mistype"]) AS_ECHO([" a command and install a matching one, someone might install a"]) AS_ECHO([" fake command with the name of one that is not installed. You can"]) AS_ECHO([" always run a program in the current directory by explicity adding"]) AS_ECHO([" a './' before it's name. Run the following command after"]) AS_ECHO([" installing Gnuastro to learn more about PATH:"]) AS_ECHO([" $ info gnuastro \"Installation directory\""]) AS_ECHO([]) ]) ] ) AS_ECHO(["To build Gnuastro $PACKAGE_VERSION, please run:"]) AS_ECHO([]) AS_ECHO([" make -j$jobs"]) AS_ECHO([]) AS_ECHO(["(You can change the $jobs to any number of CPU threads.)"]) AS_ECHO(["(Configure with '--disable-guide-message' for no messages.)"]) AS_ECHO(["(Please be patient, some libraries can take a few minutes to compile.)"]) AS_ECHO([=======================================================================]) AS_ECHO([=======================================================================]) AS_ECHO([]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/aclocal.m4����������������������������������������������������������������������������0000644�0001750�0001750�00000253653�14557513742�010653� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.72],, [m4_warning([this file was generated for autoconf 2.72. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # po.m4 serial 32 (gettext-0.21.1) dnl Copyright (C) 1995-2014, 2016, 2018-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Lesser General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Lesser General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.20]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Test whether it is GNU msgmerge >= 0.20. if LC_ALL=C $MSGMERGE --help | grep ' --for-msgfmt ' >/dev/null; then MSGMERGE_FOR_MSGFMT_OPTION='--for-msgfmt' else dnl Test whether it is GNU msgmerge >= 0.12. if LC_ALL=C $MSGMERGE --help | grep ' --no-fuzzy-matching ' >/dev/null; then MSGMERGE_FOR_MSGFMT_OPTION='--no-fuzzy-matching --no-location --quiet' else dnl With these old versions, $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) is dnl slow. But this is not a big problem, as such old gettext versions are dnl hardly in use any more. MSGMERGE_FOR_MSGFMT_OPTION='--no-location --quiet' fi fi AC_SUBST([MSGMERGE_FOR_MSGFMT_OPTION]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. ALL_LINGUAS=$OBSOLETE_ALL_LINGUAS fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang" | "$presentlang"_* | "$presentlang".* | "$presentlang"@*) useit=yes ;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. OBSOLETE_ALL_LINGUAS="$ALL_LINGUAS" # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat <<EOT $* EOT } gt_echo='echo_func' fi fi # A sed script that extracts the value of VARIABLE from a Makefile. tab=`printf '\t'` sed_x_variable=' # Test if the hold space is empty. x s/P/P/ x ta # Yes it was empty. Look if we have the expected variable definition. /^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{ # Seen the first line of the variable definition. s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=// ba } bd :a # Here we are processing a line from the variable definition. # Remove comment, more precisely replace it with a space. s/#.*$/ / # See if the line ends in a backslash. tb :b s/\\$// # Print the line, without the trailing backslash. p tc # There was no trailing backslash. The end of the variable definition is # reached. Clear the hold space. s/^.*$// x bd :c # A trailing backslash means that the variable definition continues in the # next line. Put a nonempty string into the hold space to indicate this. s/^.*$/P/ x :d ' changequote([,])dnl # Set POTFILES to the value of the Makefile variable POTFILES. sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'` POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"` # Compute POTFILES_DEPS as # $(foreach file, $(POTFILES), $(top_srcdir)/$(file)) POTFILES_DEPS= for file in $POTFILES; do POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file" done POMAKEFILEDEPS="" if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. ALL_LINGUAS=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS. sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'` ALL_LINGUAS=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"` fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) # Compute PROPERTIESFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).properties) # Compute CLASSFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(DOMAIN)_$(lang).class) # Compute QMFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm) # Compute MSGFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg) # Compute RESOURCESDLLFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= PROPERTIESFILES= CLASSFILES= QMFILES= MSGFILES= RESOURCESDLLFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" PROPERTIESFILES="$PROPERTIESFILES \$(srcdir)/\$(DOMAIN)_$lang.properties" CLASSFILES="$CLASSFILES \$(srcdir)/\$(DOMAIN)_$lang.class" QMFILES="$QMFILES $srcdirpre$lang.qm" frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg" frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang" | "$presentlang"_* | "$presentlang".* | "$presentlang"@*) useit=yes ;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= JAVACATALOGS= QTCATALOGS= TCLCATALOGS= CSHARPCATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties" QTCATALOGS="$QTCATALOGS $lang.qm" frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg" frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll" done fi sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp" tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" <<EOF $frobbedlang.msg: $lang.po ${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \ ${tab}\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } EOF done fi if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <<EOF $frobbedlang/\$(DOMAIN).resources.dll: $lang.po ${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \ ${tab}\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } EOF done fi if test -n "$POMAKEFILEDEPS"; then cat >> "$ac_file.tmp" <<EOF Makefile: $POMAKEFILEDEPS EOF fi mv "$ac_file.tmp" "$ac_file" ]) dnl Initializes the accumulator used by AM_XGETTEXT_OPTION. AC_DEFUN([AM_XGETTEXT_OPTION_INIT], [ XGETTEXT_EXTRA_OPTIONS= ]) dnl Registers an option to be passed to xgettext in the po subdirectory. AC_DEFUN([AM_XGETTEXT_OPTION], [ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT]) XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1" ]) # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_AR([ACT-IF-FAIL]) # ------------------------- # Try to determine the archiver interface, and trigger the ar-lib wrapper # if it is needed. If the detection of archiver interface fails, run # ACT-IF-FAIL (default is to abort configure with a proper error message). AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([ar-lib])dnl AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) : ${AR=ar} AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], [AC_LANG_PUSH([C]) am_cv_ar_interface=ar AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a ]) AC_LANG_POP([C])]) case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) m4_default([$1], [AC_MSG_ERROR([could not determine $AR interface])]) ;; esac AC_SUBST([AR])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_COND_IF -*- Autoconf -*- # Copyright (C) 2008-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_COND_IF # _AM_COND_ELSE # _AM_COND_ENDIF # -------------- # These macros are only used for tracing. m4_define([_AM_COND_IF]) m4_define([_AM_COND_ELSE]) m4_define([_AM_COND_ENDIF]) # AM_COND_IF(COND, [IF-TRUE], [IF-FALSE]) # --------------------------------------- # If the shell condition COND is true, execute IF-TRUE, otherwise execute # IF-FALSE. Allow automake to learn about conditional instantiating macros # (the AC_CONFIG_FOOS). AC_DEFUN([AM_COND_IF], [m4_ifndef([_AM_COND_VALUE_$1], [m4_fatal([$0: no such condition "$1"])])dnl _AM_COND_IF([$1])dnl if test -z "$$1_TRUE"; then : m4_n([$2])[]dnl m4_ifval([$3], [_AM_COND_ELSE([$1])dnl else $3 ])dnl _AM_COND_ENDIF([$1])dnl fi[]dnl ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: <https://www.gnu.org/software/coreutils/>. If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------------- # Adds support for distributing Python modules and packages. To # install modules, copy them to $(pythondir), using the python_PYTHON # automake variable. To install a package with the same name as the # automake package, install to $(pkgpythondir), or use the # pkgpython_PYTHON automake variable. # # The variables $(pyexecdir) and $(pkgpyexecdir) are provided as # locations to install python extension modules (shared libraries). # Another macro is required to find the appropriate flags to compile # extension modules. # # If your package is configured with a different prefix to python, # users will have to add the install directory to the PYTHONPATH # environment variable, or create a .pth file (see the python # documentation for details). # # If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will # cause an error if the version of python installed on the system # doesn't meet the requirement. MINIMUM-VERSION should consist of # numbers and dots only. AC_DEFUN([AM_PATH_PYTHON], [ dnl Find a Python interpreter. Python versions prior to 2.0 are not dnl supported. (2.0 was released on October 16, 2000). m4_define_default([_AM_PYTHON_INTERPRETER_LIST], [python python2 python3 dnl python3.9 python3.8 python3.7 python3.6 python3.5 python3.4 python3.3 dnl python3.2 python3.1 python3.0 dnl python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 dnl python2.0]) AC_ARG_VAR([PYTHON], [the Python interpreter]) m4_if([$1],[],[ dnl No version check is needed. # Find any Python interpreter. if test -z "$PYTHON"; then AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) fi am_display_PYTHON=python ], [ dnl A version check is needed. if test -n "$PYTHON"; then # If the user set $PYTHON, use it and don't search something else. AC_MSG_CHECKING([whether $PYTHON version is >= $1]) AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) AC_MSG_ERROR([Python interpreter is too old])]) am_display_PYTHON=$PYTHON else # Otherwise, try each interpreter until we find one that satisfies # VERSION. AC_CACHE_CHECK([for a Python interpreter with version >= $1], [am_cv_pathless_PYTHON],[ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do test "$am_cv_pathless_PYTHON" = none && break AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) done]) # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. if test "$am_cv_pathless_PYTHON" = none; then PYTHON=: else AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) fi am_display_PYTHON=$am_cv_pathless_PYTHON fi ]) if test "$PYTHON" = :; then dnl Run any user-specified action, or abort. m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) else dnl Query Python for its version number. Although site.py simply uses dnl sys.version[:3], printing that failed with Python 3.10, since the dnl trailing zero was eliminated. So now we output just the major dnl and minor version numbers, as numbers. Apparently the tertiary dnl version is not of interest. dnl AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], [am_cv_python_version=`$PYTHON -c "import sys; print ('%u.%u' % sys.version_info[[:2]])"`]) AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) dnl At times, e.g., when building shared libraries, you may want dnl to know which OS platform Python thinks this is. dnl AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) dnl emacs-page dnl If --with-python-sys-prefix is given, use the values of sys.prefix dnl and sys.exec_prefix for the corresponding values of PYTHON_PREFIX dnl and PYTHON_EXEC_PREFIX. Otherwise, use the GNU ${prefix} and dnl ${exec_prefix} variables. dnl dnl The two are made distinct variables so they can be overridden if dnl need be, although general consensus is that you shouldn't need dnl this separation. dnl dnl Also allow directly setting the prefixes via configure options, dnl overriding any default. dnl if test "x$prefix" = xNONE; then am__usable_prefix=$ac_default_prefix else am__usable_prefix=$prefix fi # Allow user to request using sys.* values from Python, # instead of the GNU $prefix values. AC_ARG_WITH([python-sys-prefix], [AS_HELP_STRING([--with-python-sys-prefix], [use Python's sys.prefix and sys.exec_prefix values])], [am_use_python_sys=:], [am_use_python_sys=false]) # Allow user to override whatever the default Python prefix is. AC_ARG_WITH([python_prefix], [AS_HELP_STRING([--with-python_prefix], [override the default PYTHON_PREFIX])], [am_python_prefix_subst=$withval am_cv_python_prefix=$withval AC_MSG_CHECKING([for explicit $am_display_PYTHON prefix]) AC_MSG_RESULT([$am_cv_python_prefix])], [ if $am_use_python_sys; then # using python sys.prefix value, not GNU AC_CACHE_CHECK([for python default $am_display_PYTHON prefix], [am_cv_python_prefix], [am_cv_python_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"`]) dnl If sys.prefix is a subdir of $prefix, replace the literal value of dnl $prefix with a variable reference so it can be overridden. case $am_cv_python_prefix in $am__usable_prefix*) am__strip_prefix=`echo "$am__usable_prefix" | sed 's|.|.|g'` am_python_prefix_subst=`echo "$am_cv_python_prefix" | sed "s,^$am__strip_prefix,\\${prefix},"` ;; *) am_python_prefix_subst=$am_cv_python_prefix ;; esac else # using GNU prefix value, not python sys.prefix am_python_prefix_subst='${prefix}' am_python_prefix=$am_python_prefix_subst AC_MSG_CHECKING([for GNU default $am_display_PYTHON prefix]) AC_MSG_RESULT([$am_python_prefix]) fi]) # Substituting python_prefix_subst value. AC_SUBST([PYTHON_PREFIX], [$am_python_prefix_subst]) # emacs-page Now do it all over again for Python exec_prefix, but with yet # another conditional: fall back to regular prefix if that was specified. AC_ARG_WITH([python_exec_prefix], [AS_HELP_STRING([--with-python_exec_prefix], [override the default PYTHON_EXEC_PREFIX])], [am_python_exec_prefix_subst=$withval am_cv_python_exec_prefix=$withval AC_MSG_CHECKING([for explicit $am_display_PYTHON exec_prefix]) AC_MSG_RESULT([$am_cv_python_exec_prefix])], [ # no explicit --with-python_exec_prefix, but if # --with-python_prefix was given, use its value for python_exec_prefix too. AS_IF([test -n "$with_python_prefix"], [am_python_exec_prefix_subst=$with_python_prefix am_cv_python_exec_prefix=$with_python_prefix AC_MSG_CHECKING([for python_prefix-given $am_display_PYTHON exec_prefix]) AC_MSG_RESULT([$am_cv_python_exec_prefix])], [ # Set am__usable_exec_prefix whether using GNU or Python values, # since we use that variable for pyexecdir. if test "x$exec_prefix" = xNONE; then am__usable_exec_prefix=$am__usable_prefix else am__usable_exec_prefix=$exec_prefix fi # if $am_use_python_sys; then # using python sys.exec_prefix, not GNU AC_CACHE_CHECK([for python default $am_display_PYTHON exec_prefix], [am_cv_python_exec_prefix], [am_cv_python_exec_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.exec_prefix)"`]) dnl If sys.exec_prefix is a subdir of $exec_prefix, replace the dnl literal value of $exec_prefix with a variable reference so it can dnl be overridden. case $am_cv_python_exec_prefix in $am__usable_exec_prefix*) am__strip_prefix=`echo "$am__usable_exec_prefix" | sed 's|.|.|g'` am_python_exec_prefix_subst=`echo "$am_cv_python_exec_prefix" | sed "s,^$am__strip_prefix,\\${exec_prefix},"` ;; *) am_python_exec_prefix_subst=$am_cv_python_exec_prefix ;; esac else # using GNU $exec_prefix, not python sys.exec_prefix am_python_exec_prefix_subst='${exec_prefix}' am_python_exec_prefix=$am_python_exec_prefix_subst AC_MSG_CHECKING([for GNU default $am_display_PYTHON exec_prefix]) AC_MSG_RESULT([$am_python_exec_prefix]) fi])]) # Substituting python_exec_prefix_subst. AC_SUBST([PYTHON_EXEC_PREFIX], [$am_python_exec_prefix_subst]) # Factor out some code duplication into this shell variable. am_python_setup_sysconfig="\ import sys # Prefer sysconfig over distutils.sysconfig, for better compatibility # with python 3.x. See automake bug#10227. try: import sysconfig except ImportError: can_use_sysconfig = 0 else: can_use_sysconfig = 1 # Can't use sysconfig in CPython 2.7, since it's broken in virtualenvs: # <https://github.com/pypa/virtualenv/issues/118> try: from platform import python_implementation if python_implementation() == 'CPython' and sys.version[[:3]] == '2.7': can_use_sysconfig = 0 except ImportError: pass" dnl emacs-page Set up 4 directories: dnl 1. pythondir: where to install python scripts. This is the dnl site-packages directory, not the python standard library dnl directory like in previous automake betas. This behavior dnl is more consistent with lispdir.m4 for example. dnl Query distutils for this directory. dnl AC_CACHE_CHECK([for $am_display_PYTHON script directory (pythondir)], [am_cv_python_pythondir], [if test "x$am_cv_python_prefix" = x; then am_py_prefix=$am__usable_prefix else am_py_prefix=$am_cv_python_prefix fi am_cv_python_pythondir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('purelib', vars={'base':'$am_py_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(0, 0, prefix='$am_py_prefix') sys.stdout.write(sitedir)"` # case $am_cv_python_pythondir in $am_py_prefix*) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,\\${PYTHON_PREFIX},"` ;; *) case $am_py_prefix in /usr|/System*) ;; *) am_cv_python_pythondir="\${PYTHON_PREFIX}/lib/python$PYTHON_VERSION/site-packages" ;; esac ;; esac ]) AC_SUBST([pythondir], [$am_cv_python_pythondir]) dnl 2. pkgpythondir: $PACKAGE directory under pythondir. Was dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is dnl more consistent with the rest of automake. dnl AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) dnl 3. pyexecdir: directory for installing python extension modules dnl (shared libraries). dnl Query distutils for this directory. dnl AC_CACHE_CHECK([for $am_display_PYTHON extension module directory (pyexecdir)], [am_cv_python_pyexecdir], [if test "x$am_cv_python_exec_prefix" = x; then am_py_exec_prefix=$am__usable_exec_prefix else am_py_exec_prefix=$am_cv_python_exec_prefix fi am_cv_python_pyexecdir=`$PYTHON -c " $am_python_setup_sysconfig if can_use_sysconfig: sitedir = sysconfig.get_path('platlib', vars={'platbase':'$am_py_exec_prefix'}) else: from distutils import sysconfig sitedir = sysconfig.get_python_lib(1, 0, prefix='$am_py_exec_prefix') sys.stdout.write(sitedir)"` # case $am_cv_python_pyexecdir in $am_py_exec_prefix*) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,\\${PYTHON_EXEC_PREFIX},"` ;; *) case $am_py_exec_prefix in /usr|/System*) ;; *) am_cv_python_pyexecdir="\${PYTHON_EXEC_PREFIX}/lib/python$PYTHON_VERSION/site-packages" ;; esac ;; esac ]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) dnl 4. pkgpyexecdir: $(pyexecdir)/$(PACKAGE) dnl AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) dnl Run any user-specified action. $2 fi ]) # AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) # --------------------------------------------------------------------------- # Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. # Run ACTION-IF-FALSE otherwise. # This test uses sys.hexversion instead of the string equivalent (first # word of sys.version), in order to cope with versions such as 2.2c1. # This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys # split strings by '.' and convert to numeric. Append some zeros # because we need at least 4 digits for the hex conversion. # map returns an iterator in Python 3.0 and a list in 2.x minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] minverhex = 0 # xrange is not present in Python 3.0 and range returns an iterator for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] sys.exit(sys.hexversion < minverhex)" AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar <conftest.tar]) AM_RUN_LOG([cat conftest.dir/file]) grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([bootstrapped/m4/00gnulib.m4]) m4_include([bootstrapped/m4/__inline.m4]) m4_include([bootstrapped/m4/absolute-header.m4]) m4_include([bootstrapped/m4/access.m4]) m4_include([bootstrapped/m4/alloca.m4]) m4_include([bootstrapped/m4/argp.m4]) m4_include([bootstrapped/m4/arpa_inet_h.m4]) m4_include([bootstrapped/m4/assert_h.m4]) m4_include([bootstrapped/m4/ax_check_compile_flag.m4]) m4_include([bootstrapped/m4/ax_compare_version.m4]) m4_include([bootstrapped/m4/ax_pthread.m4]) m4_include([bootstrapped/m4/btowc.m4]) m4_include([bootstrapped/m4/builtin-expect.m4]) m4_include([bootstrapped/m4/c-bool.m4]) m4_include([bootstrapped/m4/c32rtomb.m4]) m4_include([bootstrapped/m4/calloc.m4]) m4_include([bootstrapped/m4/chdir-long.m4]) m4_include([bootstrapped/m4/close.m4]) m4_include([bootstrapped/m4/codeset.m4]) m4_include([bootstrapped/m4/creat.m4]) m4_include([bootstrapped/m4/ctype_h.m4]) m4_include([bootstrapped/m4/dirent_h.m4]) m4_include([bootstrapped/m4/dirfd.m4]) m4_include([bootstrapped/m4/double-slash-root.m4]) m4_include([bootstrapped/m4/dup.m4]) m4_include([bootstrapped/m4/dup2.m4]) m4_include([bootstrapped/m4/eealloc.m4]) m4_include([bootstrapped/m4/environ.m4]) m4_include([bootstrapped/m4/errno_h.m4]) m4_include([bootstrapped/m4/error.m4]) m4_include([bootstrapped/m4/error_h.m4]) m4_include([bootstrapped/m4/euidaccess.m4]) m4_include([bootstrapped/m4/exponentd.m4]) m4_include([bootstrapped/m4/exponentf.m4]) m4_include([bootstrapped/m4/exponentl.m4]) m4_include([bootstrapped/m4/extensions.m4]) m4_include([bootstrapped/m4/extern-inline.m4]) m4_include([bootstrapped/m4/faccessat.m4]) m4_include([bootstrapped/m4/fchdir.m4]) m4_include([bootstrapped/m4/fcntl-o.m4]) m4_include([bootstrapped/m4/fcntl.m4]) m4_include([bootstrapped/m4/fcntl_h.m4]) m4_include([bootstrapped/m4/fdopen.m4]) m4_include([bootstrapped/m4/filenamecat.m4]) m4_include([bootstrapped/m4/flexmember.m4]) m4_include([bootstrapped/m4/float_h.m4]) m4_include([bootstrapped/m4/fpieee.m4]) m4_include([bootstrapped/m4/free.m4]) m4_include([bootstrapped/m4/fstat.m4]) m4_include([bootstrapped/m4/fstatat.m4]) m4_include([bootstrapped/m4/ftruncate.m4]) m4_include([bootstrapped/m4/func.m4]) m4_include([bootstrapped/m4/getcwd.m4]) m4_include([bootstrapped/m4/getdelim.m4]) m4_include([bootstrapped/m4/getdtablesize.m4]) m4_include([bootstrapped/m4/getgroups.m4]) m4_include([bootstrapped/m4/getline.m4]) m4_include([bootstrapped/m4/getopt.m4]) m4_include([bootstrapped/m4/getpagesize.m4]) m4_include([bootstrapped/m4/getprogname.m4]) m4_include([bootstrapped/m4/gettimeofday.m4]) m4_include([bootstrapped/m4/gnulib-common.m4]) m4_include([bootstrapped/m4/gnulib-comp.m4]) m4_include([bootstrapped/m4/group-member.m4]) m4_include([bootstrapped/m4/host-cpu-c-abi.m4]) m4_include([bootstrapped/m4/include_next.m4]) m4_include([bootstrapped/m4/inet_pton.m4]) m4_include([bootstrapped/m4/intl-thread-locale.m4]) m4_include([bootstrapped/m4/intlmacosx.m4]) m4_include([bootstrapped/m4/intmax_t.m4]) m4_include([bootstrapped/m4/inttypes.m4]) m4_include([bootstrapped/m4/inttypes_h.m4]) m4_include([bootstrapped/m4/ioctl.m4]) m4_include([bootstrapped/m4/isblank.m4]) m4_include([bootstrapped/m4/isnand.m4]) m4_include([bootstrapped/m4/isnanf.m4]) m4_include([bootstrapped/m4/isnanl.m4]) m4_include([bootstrapped/m4/iswblank.m4]) m4_include([bootstrapped/m4/iswctype.m4]) m4_include([bootstrapped/m4/iswdigit.m4]) m4_include([bootstrapped/m4/iswpunct.m4]) m4_include([bootstrapped/m4/iswxdigit.m4]) m4_include([bootstrapped/m4/langinfo_h.m4]) m4_include([bootstrapped/m4/largefile.m4]) m4_include([bootstrapped/m4/lcmessage.m4]) m4_include([bootstrapped/m4/ldexp.m4]) m4_include([bootstrapped/m4/lib-ld.m4]) m4_include([bootstrapped/m4/lib-link.m4]) m4_include([bootstrapped/m4/lib-prefix.m4]) m4_include([bootstrapped/m4/libtool.m4]) m4_include([bootstrapped/m4/libunistring-base.m4]) m4_include([bootstrapped/m4/limits-h.m4]) m4_include([bootstrapped/m4/localcharset.m4]) m4_include([bootstrapped/m4/locale-fr.m4]) m4_include([bootstrapped/m4/locale-ja.m4]) m4_include([bootstrapped/m4/locale-tr.m4]) m4_include([bootstrapped/m4/locale-zh.m4]) m4_include([bootstrapped/m4/locale_h.m4]) m4_include([bootstrapped/m4/localeconv.m4]) m4_include([bootstrapped/m4/localename.m4]) m4_include([bootstrapped/m4/lock.m4]) m4_include([bootstrapped/m4/lstat.m4]) m4_include([bootstrapped/m4/ltoptions.m4]) m4_include([bootstrapped/m4/ltsugar.m4]) m4_include([bootstrapped/m4/ltversion.m4]) m4_include([bootstrapped/m4/lt~obsolete.m4]) m4_include([bootstrapped/m4/malloc.m4]) m4_include([bootstrapped/m4/malloca.m4]) m4_include([bootstrapped/m4/math_h.m4]) m4_include([bootstrapped/m4/mbchar.m4]) m4_include([bootstrapped/m4/mbiter.m4]) m4_include([bootstrapped/m4/mbrtoc32.m4]) m4_include([bootstrapped/m4/mbrtowc.m4]) m4_include([bootstrapped/m4/mbsinit.m4]) m4_include([bootstrapped/m4/mbstate_t.m4]) m4_include([bootstrapped/m4/mbtowc.m4]) m4_include([bootstrapped/m4/memchr.m4]) m4_include([bootstrapped/m4/memmove.m4]) m4_include([bootstrapped/m4/mempcpy.m4]) m4_include([bootstrapped/m4/memrchr.m4]) m4_include([bootstrapped/m4/minmax.m4]) m4_include([bootstrapped/m4/mktime.m4]) m4_include([bootstrapped/m4/mmap-anon.m4]) m4_include([bootstrapped/m4/mode_t.m4]) m4_include([bootstrapped/m4/msvc-inval.m4]) m4_include([bootstrapped/m4/msvc-nothrow.m4]) m4_include([bootstrapped/m4/multiarch.m4]) m4_include([bootstrapped/m4/musl.m4]) m4_include([bootstrapped/m4/nan-mips.m4]) m4_include([bootstrapped/m4/nanosleep.m4]) m4_include([bootstrapped/m4/netinet_in_h.m4]) m4_include([bootstrapped/m4/nl_langinfo.m4]) m4_include([bootstrapped/m4/nocrash.m4]) m4_include([bootstrapped/m4/nproc.m4]) m4_include([bootstrapped/m4/off_t.m4]) m4_include([bootstrapped/m4/open-cloexec.m4]) m4_include([bootstrapped/m4/open-slash.m4]) m4_include([bootstrapped/m4/open.m4]) m4_include([bootstrapped/m4/openat.m4]) m4_include([bootstrapped/m4/pathmax.m4]) m4_include([bootstrapped/m4/perror.m4]) m4_include([bootstrapped/m4/pipe.m4]) m4_include([bootstrapped/m4/printf.m4]) m4_include([bootstrapped/m4/pselect.m4]) m4_include([bootstrapped/m4/pthread-thread.m4]) m4_include([bootstrapped/m4/pthread_h.m4]) m4_include([bootstrapped/m4/pthread_rwlock_rdlock.m4]) m4_include([bootstrapped/m4/pthread_sigmask.m4]) m4_include([bootstrapped/m4/putenv.m4]) m4_include([bootstrapped/m4/raise.m4]) m4_include([bootstrapped/m4/random.m4]) m4_include([bootstrapped/m4/random_r.m4]) m4_include([bootstrapped/m4/rawmemchr.m4]) m4_include([bootstrapped/m4/realloc.m4]) m4_include([bootstrapped/m4/reallocarray.m4]) m4_include([bootstrapped/m4/regex.m4]) m4_include([bootstrapped/m4/save-cwd.m4]) m4_include([bootstrapped/m4/sched_h.m4]) m4_include([bootstrapped/m4/sched_yield.m4]) m4_include([bootstrapped/m4/secure_getenv.m4]) m4_include([bootstrapped/m4/select.m4]) m4_include([bootstrapped/m4/semaphore.m4]) m4_include([bootstrapped/m4/setenv.m4]) m4_include([bootstrapped/m4/setlocale.m4]) m4_include([bootstrapped/m4/setlocale_null.m4]) m4_include([bootstrapped/m4/signal_h.m4]) m4_include([bootstrapped/m4/signalblocking.m4]) m4_include([bootstrapped/m4/signbit.m4]) m4_include([bootstrapped/m4/size_max.m4]) m4_include([bootstrapped/m4/sleep.m4]) m4_include([bootstrapped/m4/snan.m4]) m4_include([bootstrapped/m4/socketlib.m4]) m4_include([bootstrapped/m4/sockets.m4]) m4_include([bootstrapped/m4/socklen.m4]) m4_include([bootstrapped/m4/sockpfaf.m4]) m4_include([bootstrapped/m4/ssize_t.m4]) m4_include([bootstrapped/m4/stat-time.m4]) m4_include([bootstrapped/m4/stat.m4]) m4_include([bootstrapped/m4/stdalign.m4]) m4_include([bootstrapped/m4/stddef_h.m4]) m4_include([bootstrapped/m4/stdint.m4]) m4_include([bootstrapped/m4/stdint_h.m4]) m4_include([bootstrapped/m4/stdio_h.m4]) m4_include([bootstrapped/m4/stdlib_h.m4]) m4_include([bootstrapped/m4/strcase.m4]) m4_include([bootstrapped/m4/strchrnul.m4]) m4_include([bootstrapped/m4/strdup.m4]) m4_include([bootstrapped/m4/strerror.m4]) m4_include([bootstrapped/m4/strerror_r.m4]) m4_include([bootstrapped/m4/string_h.m4]) m4_include([bootstrapped/m4/strings_h.m4]) m4_include([bootstrapped/m4/strndup.m4]) m4_include([bootstrapped/m4/strnlen.m4]) m4_include([bootstrapped/m4/strptime.m4]) m4_include([bootstrapped/m4/strtod.m4]) m4_include([bootstrapped/m4/strtok_r.m4]) m4_include([bootstrapped/m4/symlink.m4]) m4_include([bootstrapped/m4/sys_ioctl_h.m4]) m4_include([bootstrapped/m4/sys_select_h.m4]) m4_include([bootstrapped/m4/sys_socket_h.m4]) m4_include([bootstrapped/m4/sys_stat_h.m4]) m4_include([bootstrapped/m4/sys_time_h.m4]) m4_include([bootstrapped/m4/sys_types_h.m4]) m4_include([bootstrapped/m4/sys_uio_h.m4]) m4_include([bootstrapped/m4/sys_wait_h.m4]) m4_include([bootstrapped/m4/sysexits.m4]) m4_include([bootstrapped/m4/thread.m4]) m4_include([bootstrapped/m4/threadlib.m4]) m4_include([bootstrapped/m4/time.m4]) m4_include([bootstrapped/m4/time_h.m4]) m4_include([bootstrapped/m4/time_r.m4]) m4_include([bootstrapped/m4/tm_gmtoff.m4]) m4_include([bootstrapped/m4/uchar_h.m4]) m4_include([bootstrapped/m4/unicase_h.m4]) m4_include([bootstrapped/m4/unictype_h.m4]) m4_include([bootstrapped/m4/uninorm_h.m4]) m4_include([bootstrapped/m4/unistd-safer.m4]) m4_include([bootstrapped/m4/unistd_h.m4]) m4_include([bootstrapped/m4/usleep.m4]) m4_include([bootstrapped/m4/vasnprintf.m4]) m4_include([bootstrapped/m4/visibility.m4]) m4_include([bootstrapped/m4/vsnprintf.m4]) m4_include([bootstrapped/m4/warn-on-use.m4]) m4_include([bootstrapped/m4/wchar_h.m4]) m4_include([bootstrapped/m4/wchar_t.m4]) m4_include([bootstrapped/m4/wcrtomb.m4]) m4_include([bootstrapped/m4/wctob.m4]) m4_include([bootstrapped/m4/wctomb.m4]) m4_include([bootstrapped/m4/wctype.m4]) m4_include([bootstrapped/m4/wctype_h.m4]) m4_include([bootstrapped/m4/wcwidth.m4]) m4_include([bootstrapped/m4/wint_t.m4]) m4_include([bootstrapped/m4/xalloc.m4]) m4_include([bootstrapped/m4/xsize.m4]) m4_include([bootstrapped/m4/yield.m4]) m4_include([bootstrapped/m4/zzgnulib.m4]) �������������������������������������������������������������������������������������gnuastro-0.22/README��������������������������������������������������������������������������������0000644�0001750�0001750�00000034212�14551337306�007651� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GNU Astronomy Utilities ======================= Copyright (C) 2015-2024 Free Software Foundation, Inc. See the end of the file for license conditions. GNU Astronomy Utilities (Gnuastro) is an official GNU package of programs and a library functions for astronomical data manipulation and analysis. The programs are run directory on the operating system's command-line enabling easy and efficient operation combined with other installed programs in shell scripts or Makefiles. The libraries are also usable in C and C++ programs. The full package comes with a comprehensive book or documentation in various formats (plain text, info, PDF and HTML): http://www.gnu.org/software/gnuastro/manual/ The Gnuastro book explains all the mathematical, physical and even historical concepts (when necessary) for effective usage of all the programs and libraries along with short examples for each program and full descriptions of all their options (in the "Invoking ProgramName' sections). There is also a separate chapter devoted to tutorials for effectively use Gnuastro combined with other software already available on your Unix-like operating system (see Chapter 2). To install Gnuastro, follow the instructions in the "Install Gnuastro" section below. If you have already installed gnuastro, you can read the full book by running the following command. You can go through the whole book by pressing the 'SPACE' key, and leave the Info environment at any time by pressing 'q' key. See the "Getting help" section below (in this file) or in the book for more. info gnuastro Gnuastro's programs are listed below followed by their executable name in parenthesis and a short description. This list is ordered alphabetically. In the book, they are grouped and ordered by context under categories/chapters. - Arithmetic (astarithmetic): For arithmetic operations on multiple (theoretically unlimited) number of datasets (images). It has a large and growing set of arithmetic, mathematical, and even statistical operators (for example +, -, *, /, sqrt, log, min, average, median). - BuildProgram (astbuildprog): Compile, link and run programs that depend on the Gnuastro library. BuildProgram will automatically link with the libraries that Gnuastro depends on, so there is no need to explicily mention them every time you are compiling a Gnuastro library dependent program. - ConvertType (astconvertt): Convert astronomical data files (FITS or IMH) to and from several other standard image and data formats, for example TXT, JPEG, EPS or PDF. - Convolve (astconvolve): Convolve (blur or smooth) data with a given kernel in spatial and frequency domain on multiple threads. Convolve can also do de-convolution to find the appropriate kernel to PSF-match two images. - CosmicCalculator (astconvolve): Do cosmological calculations, for example the luminosity distance, distance modulus, comoving volume and many more. - Crop (astcrop): Crop region(s) from an image and stitch several images if necessary. Inputs can be in pixel coordinates or world coordinates. - Fits (astfits): View and manipulate FITS file HDUs/extensions and header keywords. - MakeCatalog (astmkcatalog): Make catalog of labeled image (output of NoiseChisel). The catalogs are highly customizable and adding new calculations/columns is very streightforward. - MakeProfiles (astmkprof): Make mock 2D profiles in an image. The central regions of radial profiles are made with a configurable 2D Monte Carlo integration. It can also build the profiles on an over-sampled image. - Match (astmatch): Given two input catalogs, find the rows that match with each other within a given aperture (may be an ellipse). - NoiseChisel (astnoisechisel): Detect and signal in noise. It uses a technique to detect very faint and diffuse, irregularly shaped signal in noise (galaxies in the sky), using thresholds that are below the Sky value (see arXiv:1505.01664). - Query (astquery): High-level interface to query pre-defined remote, or external, databases and directly download the required sub-tables on the command-line. - Segment (astsegment): Segment a detection based on the structure of signal within it. - Statistics (aststatistics): Get pixel statistics and save histogram and cumulative frequency plots. - Table (asttable): convert FITS binary and ASCII tables into other such tables, or print them on the command-line, or save them in a plain text file. Output columns can also be determined by number or regular expression matching of column names. - Warp (astwarp): Warp image to new pixel grid. By default it will align the pixel and WCS coordinates, removing any non-linear WCS distortions. Any linear warp (projective transformation or Homography) can also be applied to the input images by explicitly calling the respective operation. The programs listed above are designed to be highly modular and generic. For higher-level operations (combining multiple programs, or running a program in a special way), Gnuastro also installs Bash scripts (all prefixed with 'astscript-'). They can be run like a program and behave very similarly (with minor differences, as explained in the book). - astscript-color-faint-gray: Given three images for the Red-Green-Blue (RGB) channels, this script will use the bright pixels for color and will show the faint/diffuse regions in grayscale. This greatly helps in visualizing the full dynamic range of astronical data. - astscript-ds9-region: Given a table (either as a file or from standard input), create an SAO DS9 region file from the requested positional columns (WCS or image coordinates). - astscript-fits-view Given any number of FITS files, this script will either open SAO DS9 (for images or cubes) or TOPCAT (for tables) to view them in a graphic user interface (GUI). - astscript-pointing-simulate: Given a table of pointings on the sky, create and a reference image that contain's your camera's distortions and properties, generate a stacked exposure map. This is very useful in testing the coverage of dither patterns when planning your observing strategy and it is highly customizable. - astscript-radial-profile: Calculate the radial profile of an object within an image. The object can be at any location in the image, using various measures (median, sigma-clipped mean and etc), and the radial distance can also be measured on any general ellipse. - astscript-sort-by-night: Given a list of FITS files, and a HDU and keyword name for a date, this script separates the files in the same night (possibly over two calendar days). - astscript-psf-select-stars: Find all the stars within an image that are suitable for constructing an extended PSF. If the image has WCS, this script can automatically query Gaia to find the good stars. - astscript-psf-stamp: build a crop (stamp) of a certain width around a star at a certain coordinate in a larger image. This script will do sub-pixel re-positioning to make sure the star is centered and can optionally mask all other background sources). - astscript-psf-scale-factor: Given a PSF model, and the central coordinates of a star in an image, find the scale factor that has to be multiplied by the PSF to scale it to that star. - astscript-psf-unite: Unite the various components of a PSF into one. Because of saturation and non-linearity, to get a good estimate of the extended PSF, its necessary to construct various parts from different magnitude ranges. - astscript-psf-subtract: Given the model of a PSF and the central coordinates of a star in the image, do sub-pixel re-positioning of the PSF, scale it to the star and subtract it from the image. - astscript-zeropoint: Estimate the zero point (to calibrate pixel values) of an input image using a reference image or a reference catalog. All the programs share the same basic command-line user interface and a set of common options for the comfort of both the users and developers. Gnuastro is written to comply fully with the GNU coding standards so it integrates finely with the GNU/Linux operating system and Unix-like operating systems in general. This also enables astronomers to expect a fully familiar experience in the source code, building, installing and command line user interaction that they have seen in all the other GNU software that they use. Behind the scenes, Gnuastro comes with a very robust infra-structure enabling easy addition of new programs and new features to existing programs and a full chapter devoted to explaining how to develop most effectively (see the "Developing" chapter). Please join us in developing this comprehensive and low level set of tools for astronomical data manipulation and analysis. The copyright owner of Gnuastro is the Free Software Foundation to guarantee its freedom in the future, and not any particular astronomer or astronomical project, or astronomical institution, so please join us and feel free to use it in your research. Gnuastro's library can also be directly accessed within Makefiles (when run with GNU Make) to offer workflow organization features that are useful in data analysis with FITS files. See the "Makefile extensions" section of the Gnuastro manual for more. Installing Gnuastro ------------------- The mandatory dependencies which are required to install Gnuastro from the tarball are listed below. - GNU Scientific Library (GSL): https://www.gnu.org/software/gsl/ - CFITSIO: http://heasarc.gsfc.nasa.gov/fitsio/ - WCSLIB: http://www.atnf.csiro.au/people/mcalabre/WCS/ The optional dependencies are: - GNU Libtool: https://www.gnu.org/software/libtool/ - Git library (libgit2): https://libgit2.github.com/ - JPEG library (libjpeg): http://ijg.org/ - TIFF library (libtiff): http://simplesystems.org/libtiff/ - Ghostscript: https://www.ghostscript.com/ See the "Dependencies" section of the book for their detailed installation guides and optional dependencies to enable extra features. Prior to installation, you can find it in the 'doc/gnuastro.texi' file (source of the book), or on the web: https://www.gnu.org/software/gnuastro/manual/html_node/Dependencies.html If you have just cloned Gnuastro and want to install from the version controlled source, please read the 'README-hacking' file (not available in the tarball) or the "Bootstrapping dependencies" subsection of the manual before continuing. The most recent stable Gnuastro release can be downloaded from the following link. Please see the "Downloading the source" section of the Gnuastro book for a more complete discussion of your download options. http://ftp.gnu.org/gnu/gnuastro/gnuastro-latest.tar.gz Unpacking, configuring, building, checking and installing Gnuastro follows the standard GNU Build system as shown below. After the './configure' command, Gnuastro will print messages upon the successful completion of each step, giving further information and suggestions for the next steps. tar xf gnuastro-latest.tar.lz # Also works for 'tar.gz' files cd gnuastro-X.X ./configure make make check sudo make install See the "Build and install" section of the book for more information. Also, see the 'INSTALL' file which is distributed with this file for a standard (very comprehensive and general) review of the GNU build and install methods. The 'INSTALL' file is shared in many software packages, so reading it once in any package is enough to help you greatly customize your build of a very large collection of Free and Open Source (FOSS) software. Getting help ------------ To access the appropriate section of the Gnuastro book/documentation from your command-line (in the middle of your work, without distracting your self by having to move your hand off the keyboard), please run any of the following two commands. Note that you can leave the Info environment by pressing the key 'q'. info ProgramName # For example 'info NoiseChisel' info astprogname # For example 'info astnoisechisel' The Info environment is great for easily reading of the complete documentation of many software packages, not just Gnuastro. It can greatly enhance your life/work in the Unix-like operating systems. If you are not familiar with it, please run the following command and read through it (it is short and only takes about an hour, so we strongly recommend it): info info To immediately get a short list of each programs's options and a short explanation of each, please run: astprogname --help # For example 'astnoisechisel --help' Ultimately you can send a mail to 'help-gnuastro@gnu.org' to get help in installing or using Gnuastro. Some Gnuastro developers and active users are subscribed to this list and are ready to help you in using these programs. Reporting bugs -------------- The most effective way to report bugs is explained in the "Report a bug" section of the documentation, after installation, you can read it by running (leave the Info environment by pressing the 'q' key afterwards): info bug-gnuastro In short, you can send a mail to 'bug-gnuastro@gnu.org', or submit a report in the link below (the latter is recommended): https://savannah.gnu.org/support/?func=additem&group=gnuastro In any case, please be very descriptive and give the exact command that produced the bug, we will be able to solve it faster and more effectively if we can reproduce it after your first report. The list of previous bugs along with their status can be seen here https://savannah.gnu.org/bugs/?group=gnuastro Have a look in the link above to see if your problem has already been addressed. Click on "Display Criteria" and choose the "Category" of your bug for a shorter and more relevant list to look into. Copyright information --------------------- Copyright (C) 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/Makefile.in���������������������������������������������������������������������������0000644�0001750�0001750�00000417136�14557513746�011062� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(dist_doc_DATA) $(dist_sysconf_DATA) \ $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(docdir)" "$(DESTDIR)$(sysconfdir)" \ "$(DESTDIR)$(pkgdatadir)" DATA = $(dist_doc_DATA) $(dist_sysconf_DATA) $(pkgdata_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = bootstrapped/lib bootstrapped/tests lib bin/arithmetic \ bin/buildprog bin/convertt bin/convolve bin/cosmiccal bin/crop \ bin/fits bin/match bin/mkcatalog bin/mkprof bin/noisechisel \ bin/query bin/segment bin/statistics bin/table bin/warp \ bin/script doc tests am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/bootstrapped/build-aux/ar-lib \ $(top_srcdir)/bootstrapped/build-aux/compile \ $(top_srcdir)/bootstrapped/build-aux/config.guess \ $(top_srcdir)/bootstrapped/build-aux/config.rpath \ $(top_srcdir)/bootstrapped/build-aux/config.sub \ $(top_srcdir)/bootstrapped/build-aux/install-sh \ $(top_srcdir)/bootstrapped/build-aux/ltmain.sh \ $(top_srcdir)/bootstrapped/build-aux/missing AUTHORS COPYING \ ChangeLog INSTALL NEWS README THANKS \ bootstrapped/build-aux/ar-lib bootstrapped/build-aux/compile \ bootstrapped/build-aux/config.guess \ bootstrapped/build-aux/config.rpath \ bootstrapped/build-aux/config.sub \ bootstrapped/build-aux/depcomp \ bootstrapped/build-aux/install-sh \ bootstrapped/build-aux/ltmain.sh \ bootstrapped/build-aux/mdate-sh bootstrapped/build-aux/missing \ bootstrapped/build-aux/texinfo.tex DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ BUILT_SOURCES = $(top_srcdir)/AUTHORS @COND_ARITHMETIC_TRUE@MAYBE_ARITHMETIC = bin/arithmetic @COND_ARITHMETIC_TRUE@MAYBE_COMPLETE_ARITHMETIC = bin/arithmetic/astarithmetic-complete.bash @COND_BUILDPROG_TRUE@MAYBE_BUILDPROG = bin/buildprog @COND_BUILDPROG_TRUE@MAYBE_COMPLETE_BUILDPROG = bin/buildprog/astbuildprog-complete.bash @COND_CONVERTT_TRUE@MAYBE_CONVERTT = bin/convertt @COND_CONVERTT_TRUE@MAYBE_COMPLETE_CONVERTT = bin/convertt/astconvertt-complete.bash @COND_CONVOLVE_TRUE@MAYBE_CONVOLVE = bin/convolve @COND_CONVOLVE_TRUE@MAYBE_COMPLETE_CONVOLVE = bin/convolve/astconvolve-complete.bash @COND_COSMICCAL_TRUE@MAYBE_COSMICCAL = bin/cosmiccal @COND_COSMICCAL_TRUE@MAYBE_COMPLETE_COSMICCAL = bin/cosmiccal/astcosmiccal-complete.bash @COND_CROP_TRUE@MAYBE_CROP = bin/crop @COND_CROP_TRUE@MAYBE_COMPLETE_CROP = bin/crop/astcrop-complete.bash @COND_FITS_TRUE@MAYBE_FITS = bin/fits @COND_FITS_TRUE@MAYBE_COMPLETE_FITS = bin/fits/astfits-complete.bash @COND_MATCH_TRUE@MAYBE_MATCH = bin/match @COND_MKCATALOG_TRUE@MAYBE_MKCATALOG = bin/mkcatalog @COND_MKPROF_TRUE@MAYBE_MKPROF = bin/mkprof @COND_NOISECHISEL_TRUE@MAYBE_NOISECHISEL = bin/noisechisel @COND_QUERY_TRUE@MAYBE_QUERY = bin/query @COND_SEGMENT_TRUE@MAYBE_SEGMENT = bin/segment @COND_STATISTICS_TRUE@MAYBE_STATISTICS = bin/statistics @COND_TABLE_TRUE@MAYBE_TABLE = bin/table @COND_TABLE_TRUE@MAYBE_COMPLETE_TABLE = bin/table/asttable-complete.bash #if COND_TEMPLATE # MAYBE_TEMPLATE = bin/TEMPLATE #endif @COND_WARP_TRUE@MAYBE_WARP = bin/warp @COND_GNULIBCHECK_TRUE@MAYBE_GNULIBCHECK = bootstrapped/tests # SUBDIRS = bootstrapped/lib \ $(MAYBE_GNULIBCHECK) \ lib \ $(MAYBE_ARITHMETIC) \ $(MAYBE_BUILDPROG) \ $(MAYBE_CONVERTT) \ $(MAYBE_CONVOLVE) \ $(MAYBE_COSMICCAL) \ $(MAYBE_CROP) \ $(MAYBE_FITS) \ $(MAYBE_MATCH) \ $(MAYBE_MKCATALOG) \ $(MAYBE_MKPROF) \ $(MAYBE_NOISECHISEL) \ $(MAYBE_QUERY) \ $(MAYBE_SEGMENT) \ $(MAYBE_STATISTICS) \ $(MAYBE_TABLE) \ $(MAYBE_TEMPLATE) \ $(MAYBE_WARP) \ bin/script \ doc \ tests ACLOCAL_AMFLAGS = -I bootstrapped/m4 dist_doc_DATA = README # Installed system configuration files # ==================================== dist_sysconf_DATA = bin/gnuastro.conf EXTRA_DIST = COPYING.FDL genauthors .dir-locals.el .version \ developer-build bootstrapped/README .autom4te.cfg \ bin/completion.bash.in # Files that must be cleaned # ========================== # # When the user runs 'make clean' no built products should remain. Since # the Bash TAB completion feature is not a standard C program, we need to # specify the files to clean manually. CLEANFILES = bin/completion.bash bin/completion.bash.built pkgdata_DATA = bin/completion.bash vals = "" all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-dist_docDATA: $(dist_doc_DATA) @$(NORMAL_INSTALL) @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-dist_docDATA: @$(NORMAL_UNINSTALL) @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-dist_sysconfDATA: $(dist_sysconf_DATA) @$(NORMAL_INSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ done uninstall-dist_sysconfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(DATA) config.h all-local installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(docdir)" "$(DESTDIR)$(sysconfdir)" "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dist_docDATA install-pkgdataDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-dist_sysconfDATA install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-dist_docDATA uninstall-dist_sysconfDATA \ uninstall-pkgdataDATA .MAKE: $(am__recursive_targets) all check check-am install install-am \ install-data-am install-exec install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ am--refresh check check-am check-local clean clean-cscope \ clean-generic clean-libtool cscope cscopelist-am ctags \ ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \ dist-lzip dist-shar dist-tarZ dist-xz dist-zip dist-zstd \ distcheck distclean distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-data-hook install-dist_docDATA \ install-dist_sysconfDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkgdataDATA install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dist_docDATA uninstall-dist_sysconfDATA \ uninstall-pkgdataDATA .PRECIOUS: Makefile bin/completion.bash: $(top_srcdir)/bin/completion.bash.in # Delete any existing output file. rm -f $@ $@.built $@.tmp # Extract the arithmetic library operators into a '.built' file. echo "" >> $@.built for op in $$($(AWK) '/^gal_arithmetic_operator_string/{parse=1} \ /^\}/{parse=0} \ parse==1 && /GAL_ARITHMETIC_OP/{print $$NF}' \ $(top_srcdir)/lib/arithmetic.c \ | $(SED) -e's|"||g' -e's|;||'); do \ ops="$$ops $$op"; \ done; \ echo "_gnuastro_autocomplete_compreply_arithmetic_lib(){" >> $@.built; \ echo "arithmetic_lib_operators=\"$$ops\"" >> $@.built; \ echo "}" >> $@.built # Extract the arithmetic program operators into the '.built' file. echo "" >> $@.built for op in $$($(AWK) '/^arithmetic_set_operator/{parse=1} \ /^\}/{parse=0} \ parse==1 && /strcmp\(string/{print $$NF}' \ $(top_srcdir)/bin/arithmetic/arithmetic.c \ | $(SED) -e's|"||g' -e's|))||'); do \ ops="$$ops $$op"; \ done; \ echo "_gnuastro_autocomplete_compreply_arithmetic_prog(){" >> $@.built; \ echo "arithmetic_prog_operators=\"$$ops\"" >> $@.built; \ echo "}" >> $@.built # Extract recognized file-format suffixes. for form in jpeg tiff; do \ sufs=""; \ echo "" >> $@.built; \ for suf in $$($(AWK) '/^gal_'$$form'_name_is_'$$form'/{parse=1} \ /^\}/{parse=0} \ parse==1 && /strcmp\(&name/{ \ for(i=1;i<=NF;++i) if($$i ~ /^"/) print $$i; \ }' $(top_srcdir)/lib/$$form.c \ | $(SED) -e's|"||g' -e's|)||g'); do \ sufs="$$sufs $$suf"; \ done; \ echo "_gnuastro_autocomplete_compreply_suffixes_$$form(){" >> $@.built; \ echo "suffixes_$$form=\"$$sufs\"" >> $@.built; \ echo "}" >> $@.built; \ done # Extract color-map values for ConvertType. echo "" >> $@.built for val in $$($(AWK) '/^ui_colormap_sanity_check/{parse=1} \ /^\}/{parse=0} \ parse==1 && /strcmp\(strarr/{ \ for(i=1;i<=NF;++i) if($$i ~ /^"/) { \ print $$i; break} \ }' $(top_srcdir)/bin/convertt/ui.c \ | $(SED) -e's|"||g' -e's|)\+||'); do \ vals="$$vals $$val"; \ done; \ echo "_gnuastro_autocomplete_compreply_convertt_colormap(){" >> $@.built; \ echo "convertt_colormaps=\"$$vals\"" >> $@.built; \ echo "}" >> $@.built # Extract the spectral line names for CosmicCalculator. names="" echo "" >> $@.built for name in $$($(AWK) '/GAL_SPECLINES_NAME/{print $$NF}' \ $(top_srcdir)/lib/gnuastro/speclines.h \ | $(SED) -e's|"||g'); do \ names="$$names $$name"; \ done; \ echo "_gnuastro_autocomplete_compreply_specline_names(){" >> $@.built; \ echo "specline_names=\"$$names\"" >> $@.built; \ echo "}" >> $@.built # Extract the WCS coordinate system strings for Fits. vals="" echo "" >> $@.built for val in $$($(AWK) '/^gal_wcs_coordsys_from_string/{parse=1} \ /^\}/{parse=0} \ parse==1 && /strcmp\(coordsys/{ \ for(i=1;i<=NF;++i) if($$i ~ /"/) { \ print $$i; break} \ }' $(top_srcdir)/lib/wcs.c \ | $(SED) -e's|"||g' -e's|)||' \ | $(AWK) 'BEGIN{FS=","} {print $$NF}' ); do \ vals="$$vals $$val"; \ done; \ echo "_gnuastro_autocomplete_compreply_wcs_coordsys(){" >> $@.built; \ echo "wcs_coordsys=\"$$vals\"" >> $@.built; \ echo "}" >> $@.built # Copy the low-level common functions to all programs, then put the # arithmetic functions inside of it. We are keeping the arithmetic # operators separate to help in debugging when necessary (they can # be 'source'd into each program's completion script). cat $(top_srcdir)/bin/completion.bash.in $@.built > $@.tmp # Copy each program's source. for f in $(MAYBE_COMPLETE_ARITHMETIC) \ $(MAYBE_COMPLETE_BUILDPROG) \ $(MAYBE_COMPLETE_CONVERTT) \ $(MAYBE_COMPLETE_CONVOLVE) \ $(MAYBE_COMPLETE_COSMICCAL) \ $(MAYBE_COMPLETE_CROP) \ $(MAYBE_COMPLETE_FITS) \ $(MAYBE_COMPLETE_TABLE); do \ $(SED) -e 's|@PREFIX[@]|$(bindir)|g' $(top_srcdir)/$$f >> $@.tmp; \ done chmod a-w $@.tmp mv $@.tmp $@ all-local: bin/completion.bash # If we are in static linking mode, correct the 'dependency_libs' # variable of 'libgnuastro.la'. Because by default it will not # include static libraries! @if [ "X$(MAKECMDGOALS)" = "Xall-am" ] && [ "X$(ENABLE_SHARED)" = "Xno" ]; then \ $(AWK) '/^dependency_libs/{print "dependency_libs='\''$(CONFIG_LDADD)'\''"} \ !/^dependency_libs/{print}' $(top_builddir)/lib/libgnuastro.la \ > $(top_builddir)/lib/libgnuastro_tmp.la; \ mv $(top_builddir)/lib/libgnuastro_tmp.la \ $(top_builddir)/lib/libgnuastro.la; \ fi # Print a message if requested. @if [ "X$(MAKECMDGOALS)" = "Xall-am" ] && [ x$(GUIDEMESSAGE) = xyes ]; then \ echo; \ echo "==================================================================="; \ echo "==================================================================="; \ echo "Gnuastro $(VERSION), was successfully built."; \ echo "Please check the build on your system by running:"; \ echo; \ echo " make check -j$(SUGGESTEDJOBS)"; \ echo; \ echo "(You can change the $(SUGGESTEDJOBS) to any number of CPU threads.)"; \ echo "(The following \"Leaving directory\" notices can be ignored.)"; \ echo "==================================================================="; \ echo "==================================================================="; \ echo; \ fi check-local: @if [ x$(GUIDEMESSAGE) = xyes ]; then \ echo; \ echo "==================================================================="; \ echo "==================================================================="; \ echo "Your build of Gnuastro $(VERSION) didn't fail on any tests."; \ echo "To install Gnuastro, please run the command(s) below:"; \ echo; \ if [ ! -w $(prefix) ] ; then \ echo "(NOTE: As the user $$USER, you don't have writing permissions"; \ echo "in \"$(prefix)\". To install Gnuastro there, you must get "; \ echo "privileges first, as described below. If you can't, configure "; \ echo "Gnuastro again, for example: \"./configure --prefix ~/.local\".)"; \ echo; \ echo " sudo make install"; \ echo "or"; \ echo " su"; \ fi; \ echo " make install"; \ if [ ! -w $(prefix) ] ; then \ echo " exit"; \ fi; \ echo; \ echo "(The following \"Leaving directory\" notices can be ignored.)"; \ echo "==================================================================="; \ echo "==================================================================="; \ echo; \ fi install-data-hook: @if [ x$(GUIDEMESSAGE) = xyes ]; then \ echo; \ echo "==================================================================="; \ echo "==================================================================="; \ echo " , , "; \ echo " / \ "; \ echo " ((__-^^-,-^^-__)) Congratulations!"; \ echo " \`-_---' \`---_-' GNU Astronomy Utilities (Gnuastro),"; \ echo " \`--|o\` 'o|--' Version $(VERSION)"; \ echo " \ \` / "; \ echo " ): :( Successfully installed on this system."; \ echo " :o_o: "; \ echo " \"-\" "; \ echo; \ echo "More information Command to run "; \ echo "---------------- -------------- "; \ echo "Complete official Gnuastro book: ' info gnuastro '"; \ echo "Entertaining tutorials: ' info gnuastro Tutorials '"; \ echo "Dedicated help mailing list: ' info help-gnuastro '"; \ echo "Instructions for reporting bugs: ' info bug-gnuastro '"; \ echo "Effectively use Info: ' info info '"; \ echo; \ echo; \ echo "Environment variables to check: "; \ echo " - '$(prefix)/bin' in PATH."; \ echo " - '$(prefix)/lib' in LD_LIBRARY_PATH."; \ echo "(for an intro, run 'info gnuastro \"Installation directory\"')"; \ echo; \ echo; \ echo "Customization scripts for manual installation:"; \ echo " - Open FITS files in DS9 or TOPCAT depending on contents by "; \ echo " double-clicking on the selected file(s), usable in GNOME, KDE, "; \ echo " or Xfce (freedesktop.org standards):"; \ echo " - ln -sf $(pkgdatadir)/astscript-fits-view.desktop ~/.local/share/applications/";\ echo " - Right-click on a FITS file, and follow these menus:"; \ echo " --> Open with other application"; \ echo " --> View all applications"; \ echo " --> astscript-fits-view"; \ echo; \ echo; \ echo "To stay up to date with future releases, please subscribe to: "; \ echo " https://lists.gnu.org/mailman/listinfo/info-gnuastro"; \ echo; \ echo; \ echo "(Any lines following this message can be ignored.)"; \ echo "==================================================================="; \ echo "==================================================================="; \ echo; \ fi # Ignored from 'install-data-hook' to avoid confusing users (due to # https://savannah.gnu.org/bugs/?60618 ) # echo " - Bash completion (auto-fill arguments and options with TAB):"; # echo " 'source $(pkgdatadir)/completion.bash' in '~/.bashrc':"; $(top_srcdir)/.version: $(top_srcdir)/configure echo $(VERSION) > $@-t && mv $@-t $@ $(top_srcdir)/AUTHORS: $(top_srcdir)/.version $(top_srcdir)/genauthors $(top_srcdir) dist-hook: $(top_srcdir)/AUTHORS echo $(VERSION) > $(distdir)/.tarball-version love: @echo "Don't know how to make love!" # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/config.h.in���������������������������������������������������������������������������0000644�0001750�0001750�00000302610�14557513746�011026� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* config.h.in. Generated from configure.ac by autoheader. */ /* Witness that <config.h> has been included. */ #define _GL_CONFIG_H_INCLUDED 1 /* Define if access does not correctly handle trailing slashes. */ #undef ACCESS_TRAILING_SLASH_BUG /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define if no multithread safety and no multithreading is desired. */ #undef AVOID_ANY_THREADS /* Define to the number of bits in type 'ptrdiff_t'. */ #undef BITSIZEOF_PTRDIFF_T /* Define to the number of bits in type 'sig_atomic_t'. */ #undef BITSIZEOF_SIG_ATOMIC_T /* Define to the number of bits in type 'size_t'. */ #undef BITSIZEOF_SIZE_T /* Define to the number of bits in type 'wchar_t'. */ #undef BITSIZEOF_WCHAR_T /* Define to the number of bits in type 'wint_t'. */ #undef BITSIZEOF_WINT_T /* Define if the c32rtomb function has an incorrect return value. */ #undef C32RTOMB_RETVAL_BUG /* Linking options for Gnuastro's library */ #undef CONFIG_GNUASTRO_LDADD /* Configuration file post fix. */ #undef CONF_POSTFIX /* Configuration file name format. */ #undef CONF_SHOWFMT /* Define to 1 if using 'alloca.c'. */ #undef C_ALLOCA /* Define as the bit index in the word where to find bit 0 of the exponent of 'double'. */ #undef DBL_EXPBIT0_BIT /* Define as the word index where to find the exponent of 'double'. */ #undef DBL_EXPBIT0_WORD /* Define as the bit index in the word where to find the sign of 'double'. */ #undef DBL_SIGNBIT_BIT /* Define as the word index where to find the sign of 'double'. */ #undef DBL_SIGNBIT_WORD /* the name of the file descriptor member of DIR */ #undef DIR_FD_MEMBER_NAME #ifdef DIR_FD_MEMBER_NAME # define DIR_TO_FD(Dir_p) ((Dir_p)->DIR_FD_MEMBER_NAME) #else # define DIR_TO_FD(Dir_p) -1 #endif /* Define to 1 if // is a file system root distinct from /. */ #undef DOUBLE_SLASH_IS_DISTINCT_ROOT /* Define this to 1 if F_DUPFD behavior does not match POSIX */ #undef FCNTL_DUPFD_BUGGY /* Define to nothing if C supports flexible array members, and to 1 if it does not. That way, with a declaration like 'struct s { int n; short d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99 compilers. Use 'FLEXSIZEOF (struct s, d, N * sizeof (short))' to calculate the size in bytes of such a struct containing an N-element array. */ #undef FLEXIBLE_ARRAY_MEMBER /* Define as the bit index in the word where to find bit 0 of the exponent of 'float'. */ #undef FLT_EXPBIT0_BIT /* Define as the word index where to find the exponent of 'float'. */ #undef FLT_EXPBIT0_WORD /* Define as the bit index in the word where to find the sign of 'float'. */ #undef FLT_SIGNBIT_BIT /* Define as the word index where to find the sign of 'float'. */ #undef FLT_SIGNBIT_WORD /* Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string. */ #undef FUNC_NL_LANGINFO_YESEXPR_WORKS /* The executable to call GNU Libtool */ #undef GAL_CONFIG_GNULIBTOOL_EXEC /* Shell program to use with GNU Libtool */ #undef GAL_CONFIG_GNULIBTOOL_SHELL /* CFITSIO has the fits_is_reentrant function */ #undef GAL_CONFIG_HAVE_FITS_IS_REENTRANT /* GNU Make's extension header is present. */ #undef GAL_CONFIG_HAVE_GNUMAKE_H /* GSL has the Steffen interpolation */ #undef GAL_CONFIG_HAVE_GSL_INTERP_STEFFEN /* libgit2 is installed on the system */ #undef GAL_CONFIG_HAVE_LIBGIT2 /* System has pthread_barrier */ #undef GAL_CONFIG_HAVE_PTHREAD_BARRIER /* WCSLIB has distortion header in dis.h */ #undef GAL_CONFIG_HAVE_WCSLIB_DIS_H /* WCSLIB comes with wcsprm.mjdref */ #undef GAL_CONFIG_HAVE_WCSLIB_MJDREF /* WCSLIB comes with OBSFIX macro */ #undef GAL_CONFIG_HAVE_WCSLIB_OBSFIX /* WCSLIB comes with wcslib_version */ #undef GAL_CONFIG_HAVE_WCSLIB_VERSION /* WCSLIB comes with wcsccs */ #undef GAL_CONFIG_HAVE_WCSLIB_WCSCCS /* It may be 16bit or 32bit */ #undef GAL_CONFIG_SIZEOF_INT /* On 32bit will be 4, on 64 bit, will be 8 */ #undef GAL_CONFIG_SIZEOF_LONG /* On 32bit will be 4, on 64 bit, will be 8 */ #undef GAL_CONFIG_SIZEOF_SIZE_T /* Define to the type of elements in the array argument to 'getgroups'. Usually this is either 'int' or 'gid_t'. */ #undef GETGROUPS_T /* Define this to 1 if getgroups(0,NULL) does not return the number of groups. */ #undef GETGROUPS_ZERO_BUG /* Define this to 'void' or 'struct timezone' to match the system's declaration of the second argument to gettimeofday. */ #undef GETTIMEOFDAY_TIMEZONE /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module faccessat shall be considered present. */ #undef GNULIB_FACCESSAT /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module fd-safer-flag shall be considered present. */ #undef GNULIB_FD_SAFER_FLAG /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module fscanf shall be considered present. */ #undef GNULIB_FSCANF /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module isblank shall be considered present. */ #undef GNULIB_ISBLANK /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module lock shall be considered present. */ #undef GNULIB_LOCK /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module msvc-nothrow shall be considered present. */ #undef GNULIB_MSVC_NOTHROW /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module openat shall be considered present. */ #undef GNULIB_OPENAT /* Define to 1 if printf and friends should be labeled with attribute "__gnu_printf__" instead of "__printf__" */ #undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU /* Define to 1 to add extern declaration of program_invocation_name to argp.h */ #undef GNULIB_PROGRAM_INVOCATION_NAME /* Define to 1 to add extern declaration of program_invocation_short_name to argp.h */ #undef GNULIB_PROGRAM_INVOCATION_SHORT_NAME /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module reallocarray shall be considered present. */ #undef GNULIB_REALLOCARRAY /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module scanf shall be considered present. */ #undef GNULIB_SCANF /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module strerror shall be considered present. */ #undef GNULIB_STRERROR /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module strerror_r-posix shall be considered present. */ #undef GNULIB_STRERROR_R_POSIX /* Define to 1 when the gnulib module accept should be tested. */ #undef GNULIB_TEST_ACCEPT /* Define to 1 when the gnulib module access should be tested. */ #undef GNULIB_TEST_ACCESS /* Define to 1 when the gnulib module bind should be tested. */ #undef GNULIB_TEST_BIND /* Define to 1 when the gnulib module btoc32 should be tested. */ #undef GNULIB_TEST_BTOC32 /* Define to 1 when the gnulib module btowc should be tested. */ #undef GNULIB_TEST_BTOWC /* Define to 1 when the gnulib module c32isalnum should be tested. */ #undef GNULIB_TEST_C32ISALNUM /* Define to 1 when the gnulib module c32isalpha should be tested. */ #undef GNULIB_TEST_C32ISALPHA /* Define to 1 when the gnulib module c32isblank should be tested. */ #undef GNULIB_TEST_C32ISBLANK /* Define to 1 when the gnulib module c32iscntrl should be tested. */ #undef GNULIB_TEST_C32ISCNTRL /* Define to 1 when the gnulib module c32isdigit should be tested. */ #undef GNULIB_TEST_C32ISDIGIT /* Define to 1 when the gnulib module c32isgraph should be tested. */ #undef GNULIB_TEST_C32ISGRAPH /* Define to 1 when the gnulib module c32islower should be tested. */ #undef GNULIB_TEST_C32ISLOWER /* Define to 1 when the gnulib module c32isprint should be tested. */ #undef GNULIB_TEST_C32ISPRINT /* Define to 1 when the gnulib module c32ispunct should be tested. */ #undef GNULIB_TEST_C32ISPUNCT /* Define to 1 when the gnulib module c32isspace should be tested. */ #undef GNULIB_TEST_C32ISSPACE /* Define to 1 when the gnulib module c32isupper should be tested. */ #undef GNULIB_TEST_C32ISUPPER /* Define to 1 when the gnulib module c32isxdigit should be tested. */ #undef GNULIB_TEST_C32ISXDIGIT /* Define to 1 when the gnulib module c32rtomb should be tested. */ #undef GNULIB_TEST_C32RTOMB /* Define to 1 when the gnulib module c32tob should be tested. */ #undef GNULIB_TEST_C32TOB /* Define to 1 when the gnulib module c32tolower should be tested. */ #undef GNULIB_TEST_C32TOLOWER /* Define to 1 when the gnulib module c32width should be tested. */ #undef GNULIB_TEST_C32WIDTH /* Define to 1 when the gnulib module calloc-gnu should be tested. */ #undef GNULIB_TEST_CALLOC_GNU /* Define to 1 when the gnulib module calloc-posix should be tested. */ #undef GNULIB_TEST_CALLOC_POSIX /* Define to 1 when the gnulib module chdir should be tested. */ #undef GNULIB_TEST_CHDIR /* Define to 1 when the gnulib module cloexec should be tested. */ #undef GNULIB_TEST_CLOEXEC /* Define to 1 when the gnulib module close should be tested. */ #undef GNULIB_TEST_CLOSE /* Define to 1 when the gnulib module connect should be tested. */ #undef GNULIB_TEST_CONNECT /* Define to 1 when the gnulib module creat should be tested. */ #undef GNULIB_TEST_CREAT /* Define to 1 when the gnulib module dirfd should be tested. */ #undef GNULIB_TEST_DIRFD /* Define to 1 when the gnulib module dup should be tested. */ #undef GNULIB_TEST_DUP /* Define to 1 when the gnulib module dup2 should be tested. */ #undef GNULIB_TEST_DUP2 /* Define to 1 when the gnulib module environ should be tested. */ #undef GNULIB_TEST_ENVIRON /* Define to 1 when the gnulib module euidaccess should be tested. */ #undef GNULIB_TEST_EUIDACCESS /* Define to 1 when the gnulib module faccessat should be tested. */ #undef GNULIB_TEST_FACCESSAT /* Define to 1 when the gnulib module fchdir should be tested. */ #undef GNULIB_TEST_FCHDIR /* Define to 1 when the gnulib module fcntl should be tested. */ #undef GNULIB_TEST_FCNTL /* Define to 1 when the gnulib module fdopen should be tested. */ #undef GNULIB_TEST_FDOPEN /* Define to 1 when the gnulib module fgetc should be tested. */ #undef GNULIB_TEST_FGETC /* Define to 1 when the gnulib module fgets should be tested. */ #undef GNULIB_TEST_FGETS /* Define to 1 when the gnulib module fprintf should be tested. */ #undef GNULIB_TEST_FPRINTF /* Define to 1 when the gnulib module fputc should be tested. */ #undef GNULIB_TEST_FPUTC /* Define to 1 when the gnulib module fputs should be tested. */ #undef GNULIB_TEST_FPUTS /* Define to 1 when the gnulib module fread should be tested. */ #undef GNULIB_TEST_FREAD /* Define to 1 when the gnulib module free-posix should be tested. */ #undef GNULIB_TEST_FREE_POSIX /* Define to 1 when the gnulib module fscanf should be tested. */ #undef GNULIB_TEST_FSCANF /* Define to 1 when the gnulib module fstat should be tested. */ #undef GNULIB_TEST_FSTAT /* Define to 1 when the gnulib module fstatat should be tested. */ #undef GNULIB_TEST_FSTATAT /* Define to 1 when the gnulib module ftruncate should be tested. */ #undef GNULIB_TEST_FTRUNCATE /* Define to 1 when the gnulib module fwrite should be tested. */ #undef GNULIB_TEST_FWRITE /* Define to 1 when the gnulib module getc should be tested. */ #undef GNULIB_TEST_GETC /* Define to 1 when the gnulib module getchar should be tested. */ #undef GNULIB_TEST_GETCHAR /* Define to 1 when the gnulib module getcwd should be tested. */ #undef GNULIB_TEST_GETCWD /* Define to 1 when the gnulib module getdelim should be tested. */ #undef GNULIB_TEST_GETDELIM /* Define to 1 when the gnulib module getdtablesize should be tested. */ #undef GNULIB_TEST_GETDTABLESIZE /* Define to 1 when the gnulib module getgroups should be tested. */ #undef GNULIB_TEST_GETGROUPS /* Define to 1 when the gnulib module getline should be tested. */ #undef GNULIB_TEST_GETLINE /* Define to 1 when the gnulib module getopt-posix should be tested. */ #undef GNULIB_TEST_GETOPT_POSIX /* Define to 1 when the gnulib module getpagesize should be tested. */ #undef GNULIB_TEST_GETPAGESIZE /* Define to 1 when the gnulib module getprogname should be tested. */ #undef GNULIB_TEST_GETPROGNAME /* Define to 1 when the gnulib module gettimeofday should be tested. */ #undef GNULIB_TEST_GETTIMEOFDAY /* Define to 1 when the gnulib module group-member should be tested. */ #undef GNULIB_TEST_GROUP_MEMBER /* Define to 1 when the gnulib module ioctl should be tested. */ #undef GNULIB_TEST_IOCTL /* Define to 1 when the gnulib module iswblank should be tested. */ #undef GNULIB_TEST_ISWBLANK /* Define to 1 when the gnulib module iswctype should be tested. */ #undef GNULIB_TEST_ISWCTYPE /* Define to 1 when the gnulib module iswdigit should be tested. */ #undef GNULIB_TEST_ISWDIGIT /* Define to 1 when the gnulib module iswpunct should be tested. */ #undef GNULIB_TEST_ISWPUNCT /* Define to 1 when the gnulib module iswxdigit should be tested. */ #undef GNULIB_TEST_ISWXDIGIT /* Define to 1 when the gnulib module listen should be tested. */ #undef GNULIB_TEST_LISTEN /* Define to 1 when the gnulib module localeconv should be tested. */ #undef GNULIB_TEST_LOCALECONV /* Define to 1 when the gnulib module localename should be tested. */ #undef GNULIB_TEST_LOCALENAME /* Define to 1 when the gnulib module lstat should be tested. */ #undef GNULIB_TEST_LSTAT /* Define to 1 when the gnulib module malloc-gnu should be tested. */ #undef GNULIB_TEST_MALLOC_GNU /* Define to 1 when the gnulib module malloc-posix should be tested. */ #undef GNULIB_TEST_MALLOC_POSIX /* Define to 1 when the gnulib module mbrtoc32 should be tested. */ #undef GNULIB_TEST_MBRTOC32 /* Define to 1 when the gnulib module mbrtowc should be tested. */ #undef GNULIB_TEST_MBRTOWC /* Define to 1 when the gnulib module mbschr should be tested. */ #undef GNULIB_TEST_MBSCHR /* Define to 1 when the gnulib module mbsinit should be tested. */ #undef GNULIB_TEST_MBSINIT /* Define to 1 when the gnulib module mbspbrk should be tested. */ #undef GNULIB_TEST_MBSPBRK /* Define to 1 when the gnulib module mbsspn should be tested. */ #undef GNULIB_TEST_MBSSPN /* Define to 1 when the gnulib module mbstok_r should be tested. */ #undef GNULIB_TEST_MBSTOK_R /* Define to 1 when the gnulib module mbszero should be tested. */ #undef GNULIB_TEST_MBSZERO /* Define to 1 when the gnulib module mbtowc should be tested. */ #undef GNULIB_TEST_MBTOWC /* Define to 1 when the gnulib module memchr should be tested. */ #undef GNULIB_TEST_MEMCHR /* Define to 1 when the gnulib module mempcpy should be tested. */ #undef GNULIB_TEST_MEMPCPY /* Define to 1 when the gnulib module memrchr should be tested. */ #undef GNULIB_TEST_MEMRCHR /* Define to 1 when the gnulib module mktime should be tested. */ #undef GNULIB_TEST_MKTIME /* Define to 1 when the gnulib module nanosleep should be tested. */ #undef GNULIB_TEST_NANOSLEEP /* Define to 1 when the gnulib module nl_langinfo should be tested. */ #undef GNULIB_TEST_NL_LANGINFO /* Define to 1 when the gnulib module open should be tested. */ #undef GNULIB_TEST_OPEN /* Define to 1 when the gnulib module openat should be tested. */ #undef GNULIB_TEST_OPENAT /* Define to 1 when the gnulib module perror should be tested. */ #undef GNULIB_TEST_PERROR /* Define to 1 when the gnulib module pipe should be tested. */ #undef GNULIB_TEST_PIPE /* Define to 1 when the gnulib module printf should be tested. */ #undef GNULIB_TEST_PRINTF /* Define to 1 when the gnulib module pselect should be tested. */ #undef GNULIB_TEST_PSELECT /* Define to 1 when the gnulib module pthread_sigmask should be tested. */ #undef GNULIB_TEST_PTHREAD_SIGMASK /* Define to 1 when the gnulib module pthread-thread should be tested. */ #undef GNULIB_TEST_PTHREAD_THREAD /* Define to 1 when the gnulib module putc should be tested. */ #undef GNULIB_TEST_PUTC /* Define to 1 when the gnulib module putchar should be tested. */ #undef GNULIB_TEST_PUTCHAR /* Define to 1 when the gnulib module putenv should be tested. */ #undef GNULIB_TEST_PUTENV /* Define to 1 when the gnulib module puts should be tested. */ #undef GNULIB_TEST_PUTS /* Define to 1 when the gnulib module raise should be tested. */ #undef GNULIB_TEST_RAISE /* Define to 1 when the gnulib module random should be tested. */ #undef GNULIB_TEST_RANDOM /* Define to 1 when the gnulib module random_r should be tested. */ #undef GNULIB_TEST_RANDOM_R /* Define to 1 when the gnulib module rawmemchr should be tested. */ #undef GNULIB_TEST_RAWMEMCHR /* Define to 1 when the gnulib module reallocarray should be tested. */ #undef GNULIB_TEST_REALLOCARRAY /* Define to 1 when the gnulib module realloc-gnu should be tested. */ #undef GNULIB_TEST_REALLOC_GNU /* Define to 1 when the gnulib module realloc-posix should be tested. */ #undef GNULIB_TEST_REALLOC_POSIX /* Define to 1 when the gnulib module scanf should be tested. */ #undef GNULIB_TEST_SCANF /* Define to 1 when the gnulib module sched_yield should be tested. */ #undef GNULIB_TEST_SCHED_YIELD /* Define to 1 when the gnulib module secure_getenv should be tested. */ #undef GNULIB_TEST_SECURE_GETENV /* Define to 1 when the gnulib module select should be tested. */ #undef GNULIB_TEST_SELECT /* Define to 1 when the gnulib module setenv should be tested. */ #undef GNULIB_TEST_SETENV /* Define to 1 when the gnulib module setlocale should be tested. */ #undef GNULIB_TEST_SETLOCALE /* Define to 1 when the gnulib module setlocale_null should be tested. */ #undef GNULIB_TEST_SETLOCALE_NULL /* Define to 1 when the gnulib module setsockopt should be tested. */ #undef GNULIB_TEST_SETSOCKOPT /* Define to 1 when the gnulib module signbit should be tested. */ #undef GNULIB_TEST_SIGNBIT /* Define to 1 when the gnulib module sigprocmask should be tested. */ #undef GNULIB_TEST_SIGPROCMASK /* Define to 1 when the gnulib module sleep should be tested. */ #undef GNULIB_TEST_SLEEP /* Define to 1 when the gnulib module socket should be tested. */ #undef GNULIB_TEST_SOCKET /* Define to 1 when the gnulib module stat should be tested. */ #undef GNULIB_TEST_STAT /* Define to 1 when the gnulib module strchrnul should be tested. */ #undef GNULIB_TEST_STRCHRNUL /* Define to 1 when the gnulib module strdup should be tested. */ #undef GNULIB_TEST_STRDUP /* Define to 1 when the gnulib module strerror should be tested. */ #undef GNULIB_TEST_STRERROR /* Define to 1 when the gnulib module strerror_r should be tested. */ #undef GNULIB_TEST_STRERROR_R /* Define to 1 when the gnulib module strndup should be tested. */ #undef GNULIB_TEST_STRNDUP /* Define to 1 when the gnulib module strnlen should be tested. */ #undef GNULIB_TEST_STRNLEN /* Define to 1 when the gnulib module strptime should be tested. */ #undef GNULIB_TEST_STRPTIME /* Define to 1 when the gnulib module strtod should be tested. */ #undef GNULIB_TEST_STRTOD /* Define to 1 when the gnulib module strtok_r should be tested. */ #undef GNULIB_TEST_STRTOK_R /* Define to 1 when the gnulib module symlink should be tested. */ #undef GNULIB_TEST_SYMLINK /* Define to 1 when the gnulib module system-posix should be tested. */ #undef GNULIB_TEST_SYSTEM_POSIX /* Define to 1 when the gnulib module time should be tested. */ #undef GNULIB_TEST_TIME /* Define to 1 when the gnulib module time_r should be tested. */ #undef GNULIB_TEST_TIME_R /* Define to 1 when the gnulib module unsetenv should be tested. */ #undef GNULIB_TEST_UNSETENV /* Define to 1 when the gnulib module usleep should be tested. */ #undef GNULIB_TEST_USLEEP /* Define to 1 when the gnulib module vfprintf should be tested. */ #undef GNULIB_TEST_VFPRINTF /* Define to 1 when the gnulib module vprintf should be tested. */ #undef GNULIB_TEST_VPRINTF /* Define to 1 when the gnulib module vsnprintf should be tested. */ #undef GNULIB_TEST_VSNPRINTF /* Define to 1 when the gnulib module wcrtomb should be tested. */ #undef GNULIB_TEST_WCRTOMB /* Define to 1 when the gnulib module wctob should be tested. */ #undef GNULIB_TEST_WCTOB /* Define to 1 when the gnulib module wctomb should be tested. */ #undef GNULIB_TEST_WCTOMB /* Define to 1 when the gnulib module wctype should be tested. */ #undef GNULIB_TEST_WCTYPE /* Define to 1 when the gnulib module wcwidth should be tested. */ #undef GNULIB_TEST_WCWIDTH /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module xalloc shall be considered present. */ #undef GNULIB_XALLOC /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module xalloc-die shall be considered present. */ #undef GNULIB_XALLOC_DIE /* Define to 1 if you have the 'access' function. */ #undef HAVE_ACCESS /* Define to 1 if you have 'alloca' after including <alloca.h>, a header that may be supplied by this distribution. */ #undef HAVE_ALLOCA /* Define to 1 if <alloca.h> works. */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the <arpa/inet.h> header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the <bp-sym.h> header file. */ #undef HAVE_BP_SYM_H /* Define to 1 if you have the 'btowc' function. */ #undef HAVE_BTOWC /* Define to 1 if nanosleep mishandles large arguments. */ #undef HAVE_BUG_BIG_NANOSLEEP /* Define to 1 if you have the `catgets' function. */ #undef HAVE_CATGETS /* Define to 1 if you have the Mac OS X function CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define if the copysignf function is declared in <math.h> and available in libc. */ #undef HAVE_COPYSIGNF_IN_LIBC /* Define if the copysignl function is declared in <math.h> and available in libc. */ #undef HAVE_COPYSIGNL_IN_LIBC /* Define if the copysign function is declared in <math.h> and available in libc. */ #undef HAVE_COPYSIGN_IN_LIBC /* Define to 1 if you have the <crtdefs.h> header file. */ #undef HAVE_CRTDEFS_H /* Define to 1 if the alignas and alignof keywords work. */ #undef HAVE_C_ALIGNASOF /* Define to 1 if bool, true and false work as per C2023. */ #undef HAVE_C_BOOL /* Define to 1 if the static_assert keyword works. */ #undef HAVE_C_STATIC_ASSERT /* Define to 1 if C supports variable-length arrays. */ #undef HAVE_C_VARARRAYS /* Define to 1 if you have the declaration of 'alarm', and to 0 if you don't. */ #undef HAVE_DECL_ALARM /* Define to 1 if you have the declaration of 'clearerr_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_CLEARERR_UNLOCKED /* Define to 1 if you have the declaration of 'copysign', and to 0 if you don't. */ #undef HAVE_DECL_COPYSIGN /* Define to 1 if you have the declaration of 'copysignf', and to 0 if you don't. */ #undef HAVE_DECL_COPYSIGNF /* Define to 1 if you have the declaration of 'copysignl', and to 0 if you don't. */ #undef HAVE_DECL_COPYSIGNL /* Define to 1 if you have the declaration of 'dirfd', and to 0 if you don't. */ #undef HAVE_DECL_DIRFD /* Define to 1 if you have the declaration of 'ecvt', and to 0 if you don't. */ #undef HAVE_DECL_ECVT /* Define to 1 if you have the declaration of 'execvpe', and to 0 if you don't. */ #undef HAVE_DECL_EXECVPE /* Define to 1 if you have the declaration of 'fchdir', and to 0 if you don't. */ #undef HAVE_DECL_FCHDIR /* Define to 1 if you have the declaration of 'fcloseall', and to 0 if you don't. */ #undef HAVE_DECL_FCLOSEALL /* Define to 1 if you have the declaration of 'fcvt', and to 0 if you don't. */ #undef HAVE_DECL_FCVT /* Define to 1 if you have the declaration of 'feof_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FEOF_UNLOCKED /* Define to 1 if you have the declaration of 'ferror_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FERROR_UNLOCKED /* Define to 1 if you have the declaration of 'fflush_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FFLUSH_UNLOCKED /* Define to 1 if you have the declaration of 'fgets_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FGETS_UNLOCKED /* Define to 1 if you have the declaration of 'fputc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FPUTC_UNLOCKED /* Define to 1 if you have the declaration of 'fputs_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FPUTS_UNLOCKED /* Define to 1 if you have the declaration of 'fread_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FREAD_UNLOCKED /* Define to 1 if you have the declaration of 'fwrite_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FWRITE_UNLOCKED /* Define to 1 if you have the declaration of 'gcvt', and to 0 if you don't. */ #undef HAVE_DECL_GCVT /* Define to 1 if you have the declaration of 'getchar_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_GETCHAR_UNLOCKED /* Define to 1 if you have the declaration of 'getc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_GETC_UNLOCKED /* Define to 1 if you have the declaration of 'getdelim', and to 0 if you don't. */ #undef HAVE_DECL_GETDELIM /* Define to 1 if you have the declaration of 'getdtablesize', and to 0 if you don't. */ #undef HAVE_DECL_GETDTABLESIZE /* Define to 1 if you have the declaration of 'getline', and to 0 if you don't. */ #undef HAVE_DECL_GETLINE /* Define to 1 if you have the declaration of 'getw', and to 0 if you don't. */ #undef HAVE_DECL_GETW /* Define to 1 if you have the declaration of 'inet_pton', and to 0 if you don't. */ #undef HAVE_DECL_INET_PTON /* Define to 1 if you have the declaration of 'initstate', and to 0 if you don't. */ #undef HAVE_DECL_INITSTATE /* Define to 1 if you have the declaration of 'isblank', and to 0 if you don't. */ #undef HAVE_DECL_ISBLANK /* Define to 1 if you have the declaration of 'iswblank', and to 0 if you don't. */ #undef HAVE_DECL_ISWBLANK /* Define to 1 if you have the declaration of 'localtime_r', and to 0 if you don't. */ #undef HAVE_DECL_LOCALTIME_R /* Define to 1 if you have the declaration of 'mbrtowc', and to 0 if you don't. */ #undef HAVE_DECL_MBRTOWC /* Define to 1 if you have the declaration of 'mbsinit', and to 0 if you don't. */ #undef HAVE_DECL_MBSINIT /* Define to 1 if you have the declaration of 'memrchr', and to 0 if you don't. */ #undef HAVE_DECL_MEMRCHR /* Define to 1 if you have the declaration of 'program_invocation_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_NAME /* Define to 1 if you have the declaration of 'program_invocation_short_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* Define to 1 if you have the declaration of 'putchar_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_PUTCHAR_UNLOCKED /* Define to 1 if you have the declaration of 'putc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_PUTC_UNLOCKED /* Define to 1 if you have the declaration of 'putw', and to 0 if you don't. */ #undef HAVE_DECL_PUTW /* Define to 1 if you have the declaration of 'setenv', and to 0 if you don't. */ #undef HAVE_DECL_SETENV /* Define to 1 if you have the declaration of 'setstate', and to 0 if you don't. */ #undef HAVE_DECL_SETSTATE /* Define to 1 if you have the declaration of 'sleep', and to 0 if you don't. */ #undef HAVE_DECL_SLEEP /* Define to 1 if you have the declaration of 'strdup', and to 0 if you don't. */ #undef HAVE_DECL_STRDUP /* Define to 1 if you have the declaration of 'strerror_r', and to 0 if you don't. */ #undef HAVE_DECL_STRERROR_R /* Define to 1 if you have the declaration of 'strncasecmp', and to 0 if you don't. */ #undef HAVE_DECL_STRNCASECMP /* Define to 1 if you have the declaration of 'strndup', and to 0 if you don't. */ #undef HAVE_DECL_STRNDUP /* Define to 1 if you have the declaration of 'strnlen', and to 0 if you don't. */ #undef HAVE_DECL_STRNLEN /* Define to 1 if you have the declaration of 'strtok_r', and to 0 if you don't. */ #undef HAVE_DECL_STRTOK_R /* Define to 1 if you have the declaration of 'towlower', and to 0 if you don't. */ #undef HAVE_DECL_TOWLOWER /* Define to 1 if you have the declaration of 'unsetenv', and to 0 if you don't. */ #undef HAVE_DECL_UNSETENV /* Define to 1 if you have the declaration of 'vsnprintf', and to 0 if you don't. */ #undef HAVE_DECL_VSNPRINTF /* Define to 1 if you have the declaration of 'wcrtomb', and to 0 if you don't. */ #undef HAVE_DECL_WCRTOMB /* Define to 1 if you have the declaration of 'wcsdup', and to 0 if you don't. */ #undef HAVE_DECL_WCSDUP /* Define to 1 if you have the declaration of 'wctob', and to 0 if you don't. */ #undef HAVE_DECL_WCTOB /* Define to 1 if you have the declaration of 'wcwidth', and to 0 if you don't. */ #undef HAVE_DECL_WCWIDTH /* Define to 1 if you have the declaration of '_putenv', and to 0 if you don't. */ #undef HAVE_DECL__PUTENV /* Define to 1 if you have the declaration of '_snprintf', and to 0 if you don't. */ #undef HAVE_DECL__SNPRINTF /* Define to 1 if you have the declaration of '__argv', and to 0 if you don't. */ #undef HAVE_DECL___ARGV /* Define to 1 if you have the <dirent.h> header file. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the 'dirfd' function. */ #undef HAVE_DIRFD /* Define to 1 if you have the <dlfcn.h> header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `duplocale' function. */ #undef HAVE_DUPLOCALE /* Define to 1 if you have the 'eaccess' function. */ #undef HAVE_EACCESS /* Define if you have the declaration of environ. */ #undef HAVE_ENVIRON_DECL /* Define to 1 if you have the `error' function. */ #undef HAVE_ERROR /* Define to 1 if you have the <error.h> header file. */ #undef HAVE_ERROR_H /* Define to 1 if you have the 'euidaccess' function. */ #undef HAVE_EUIDACCESS /* Define to 1 if you have the `faccessat' function. */ #undef HAVE_FACCESSAT /* Define if the locale_t type contains insufficient information, as on OpenBSD. */ #undef HAVE_FAKE_LOCALES /* Define to 1 if you have the 'fchdir' function. */ #undef HAVE_FCHDIR /* Define to 1 if you have the 'fcntl' function. */ #undef HAVE_FCNTL /* Define to 1 if you have the <features.h> header file. */ #undef HAVE_FEATURES_H /* Define to 1 if you have the 'flockfile' function. */ #undef HAVE_FLOCKFILE /* Define to 1 if you have the `freelocale' function. */ #undef HAVE_FREELOCALE /* Define if the 'free' function is guaranteed to preserve errno. */ #undef HAVE_FREE_POSIX /* Define to 1 if you have the 'fstatat' function. */ #undef HAVE_FSTATAT /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* Define to 1 if you have the 'funlockfile' function. */ #undef HAVE_FUNLOCKFILE /* Define to 1 if you have the `getdelim' function. */ #undef HAVE_GETDELIM /* Define to 1 if you have the 'getdtablesize' function. */ #undef HAVE_GETDTABLESIZE /* Define to 1 if you have the 'getegid' function. */ #undef HAVE_GETEGID /* Define to 1 if you have the 'geteuid' function. */ #undef HAVE_GETEUID /* Define to 1 if you have the 'getexecname' function. */ #undef HAVE_GETEXECNAME /* Define to 1 if you have the 'getgid' function. */ #undef HAVE_GETGID /* Define to 1 if your system has a working `getgroups' function. */ #undef HAVE_GETGROUPS /* Define to 1 if you have the `getline' function. */ #undef HAVE_GETLINE /* Define to 1 if you have the 'getlocalename_l' function. */ #undef HAVE_GETLOCALENAME_L /* Define to 1 if you have the <getopt.h> header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the 'getopt_long_only' function. */ #undef HAVE_GETOPT_LONG_ONLY /* Define to 1 if you have the `getprogname' function. */ #undef HAVE_GETPROGNAME /* Define to 1 if you have the 'gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the 'getuid' function. */ #undef HAVE_GETUID /* Define if the uselocale exists, may be safely called, and returns sufficient information. */ #undef HAVE_GOOD_USELOCALE /* Define to 1 if you have the 'inet_pton' function. */ #undef HAVE_INET_PTON /* Define to 1 if you have the `initstate' function. */ #undef HAVE_INITSTATE /* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */ #undef HAVE_INTMAX_T /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H /* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and declares uintmax_t. */ #undef HAVE_INTTYPES_H_WITH_UINTMAX /* Define to 1 if you have the 'ioctl' function. */ #undef HAVE_IOCTL /* Define to 1 if <sys/socket.h> defines AF_INET. */ #undef HAVE_IPV4 /* Define to 1 if <sys/socket.h> defines AF_INET6. */ #undef HAVE_IPV6 /* Define to 1 if you have the 'isblank' function. */ #undef HAVE_ISBLANK /* Define if the isnan(double) function is available in libc. */ #undef HAVE_ISNAND_IN_LIBC /* Define if the isnan(float) function is available in libc. */ #undef HAVE_ISNANF_IN_LIBC /* Define if the isnan(long double) function is available in libc. */ #undef HAVE_ISNANL_IN_LIBC /* Define to 1 if you have the `issetugid' function. */ #undef HAVE_ISSETUGID /* Define to 1 if you have the `iswblank' function. */ #undef HAVE_ISWBLANK /* Define to 1 if you have the 'iswcntrl' function. */ #undef HAVE_ISWCNTRL /* Define to 1 if you have the 'iswctype' function. */ #undef HAVE_ISWCTYPE /* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define to 1 if you have the <langinfo.h> header file. */ #undef HAVE_LANGINFO_H /* Define if your <locale.h> file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define if the ldexp function is available in libc. */ #undef HAVE_LDEXP_IN_LIBC /* Define if you have the libbz2 library. */ #undef HAVE_LIBBZ2 /* Define if you have the libcfitsio library. */ #undef HAVE_LIBCFITSIO /* Define if you have the libcurl library. */ #undef HAVE_LIBCURL /* Define to 1 if you have the <libgen.h> header file. */ #undef HAVE_LIBGEN_H /* Define if you have the libgit2 library. */ #undef HAVE_LIBGIT2 /* Define if you have the libgsl library. */ #undef HAVE_LIBGSL /* Define to 1 if you have the <libintl.h> header file. */ #undef HAVE_LIBINTL_H /* Define if you have the libjpeg library. */ #undef HAVE_LIBJPEG /* Define if you have the liblzma library. */ #undef HAVE_LIBLZMA /* Define if you have the libm library. */ #undef HAVE_LIBM /* Define if you have the libtiff library. */ #undef HAVE_LIBTIFF /* Define if you have the libwcs library. */ #undef HAVE_LIBWCS /* Define if you have the libz library. */ #undef HAVE_LIBZ /* Define to 1 if you have the <limits.h> header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the <linewrap.h> header file. */ #undef HAVE_LINEWRAP_H /* Define to 1 if you have the 'localtime_r' function. */ #undef HAVE_LOCALTIME_R /* Define to 1 if the system has the type 'long long int'. */ #undef HAVE_LONG_LONG_INT /* Define to 1 if you have the 'lstat' function. */ #undef HAVE_LSTAT /* Define to 1 if your system has a GNU libc compatible 'malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the <malloc.h> header file. */ #undef HAVE_MALLOC_H /* Define if malloc, realloc, and calloc set errno on allocation failure. */ #undef HAVE_MALLOC_POSIX /* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including config.h and <sys/mman.h>. */ #undef HAVE_MAP_ANONYMOUS /* Define to 1 if you have the <math.h> header file. */ #undef HAVE_MATH_H /* Define to 1 if you have the 'mbrtowc' function. */ #undef HAVE_MBRTOWC /* Define to 1 if you have the 'mbsinit' function. */ #undef HAVE_MBSINIT /* Define to 1 if <wchar.h> declares mbstate_t. */ #undef HAVE_MBSTATE_T /* Define to 1 if you have the `mbtowc' function. */ #undef HAVE_MBTOWC /* Define to 1 if you have the 'memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the `mempcpy' function. */ #undef HAVE_MEMPCPY /* Define to 1 if you have the 'memrchr' function. */ #undef HAVE_MEMRCHR /* Define to 1 if you have the <minix/config.h> header file. */ #undef HAVE_MINIX_CONFIG_H /* Define to 1 if <limits.h> defines the MIN and MAX macros. */ #undef HAVE_MINMAX_IN_LIMITS_H /* Define to 1 if <sys/param.h> defines the MIN and MAX macros. */ #undef HAVE_MINMAX_IN_SYS_PARAM_H /* Define to 1 if you have the 'mprotect' function. */ #undef HAVE_MPROTECT /* Define to 1 on MSVC platforms that have the "invalid parameter handler" concept. */ #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Define if the locale_t type does not contain the name of each locale category. */ #undef HAVE_NAMELESS_LOCALES /* Define to 1 if you have the <netdb.h> header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the <netinet/in.h> header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if you have the `newlocale' function. */ #undef HAVE_NEWLOCALE /* Define to 1 if you have the `nl_langinfo' function. */ #undef HAVE_NL_LANGINFO /* Define to 1 if you have the 'openat' function. */ #undef HAVE_OPENAT /* Define to 1 if you have the <OS.h> header file. */ #undef HAVE_OS_H /* Define to 1 if you have the 'pipe' function. */ #undef HAVE_PIPE /* Define if program_invocation_name is defined */ #undef HAVE_PROGRAM_INVOCATION_NAME /* Define if program_invocation_short_name is defined */ #undef HAVE_PROGRAM_INVOCATION_SHORT_NAME /* Define to 1 if you have the 'pselect' function. */ #undef HAVE_PSELECT /* Define to 1 if you have the 'pstat_getdynamic' function. */ #undef HAVE_PSTAT_GETDYNAMIC /* Define if you have POSIX threads libraries and header files. */ #undef HAVE_PTHREAD /* Define if you have the <pthread.h> header and the POSIX threads API. */ #undef HAVE_PTHREAD_API /* Define to 1 if you have the `pthread_atfork' function. */ #undef HAVE_PTHREAD_ATFORK /* Define to 1 if you have the <pthread.h> header file. */ #undef HAVE_PTHREAD_H /* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */ #undef HAVE_PTHREAD_MUTEX_RECURSIVE /* Have PTHREAD_PRIO_INHERIT. */ #undef HAVE_PTHREAD_PRIO_INHERIT /* Define if the POSIX multithreading library has read/write locks. */ #undef HAVE_PTHREAD_RWLOCK /* Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader. */ #undef HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER /* Define to 1 if the pthread_sigmask function can be used (despite bugs). */ #undef HAVE_PTHREAD_SIGMASK /* Define to 1 if the system has the type 'pthread_spinlock_t'. */ #undef HAVE_PTHREAD_SPINLOCK_T /* Define to 1 if the system has the type 'pthread_t'. */ #undef HAVE_PTHREAD_T /* Define to 1 if you have Python3. */ #undef HAVE_PYTHON /* Define to 1 if you have the 'raise' function. */ #undef HAVE_RAISE /* Define to 1 if you have the <random.h> header file. */ #undef HAVE_RANDOM_H /* Define to 1 if you have the 'random_r' function. */ #undef HAVE_RANDOM_R /* Define to 1 if you have the 'rawmemchr' function. */ #undef HAVE_RAWMEMCHR /* Define to 1 if you have the `reallocarray' function. */ #undef HAVE_REALLOCARRAY /* Define to 1 if 'long double' and 'double' have the same representation. */ #undef HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Define to 1 if the system has the type 'sa_family_t'. */ #undef HAVE_SA_FAMILY_T /* Define to 1 if you have the `sched_getaffinity' function. */ #undef HAVE_SCHED_GETAFFINITY /* Define to 1 if sched_getaffinity has a glibc compatible declaration. */ #undef HAVE_SCHED_GETAFFINITY_LIKE_GLIBC /* Define to 1 if you have the 'sched_getaffinity_np' function. */ #undef HAVE_SCHED_GETAFFINITY_NP /* Define to 1 if you have the <sched.h> header file. */ #undef HAVE_SCHED_H /* Define to 1 if you have the <sdkddkver.h> header file. */ #undef HAVE_SDKDDKVER_H /* Define to 1 if you have the <search.h> header file. */ #undef HAVE_SEARCH_H /* Define to 1 if you have the 'secure_getenv' function. */ #undef HAVE_SECURE_GETENV /* Define to 1 if you have the <semaphore.h> header file. */ #undef HAVE_SEMAPHORE_H /* Define to 1 if you have the 'setdtablesize' function. */ #undef HAVE_SETDTABLESIZE /* Define to 1 if you have the 'setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the `setstate' function. */ #undef HAVE_SETSTATE /* Define to 1 if you have the 'shutdown' function. */ #undef HAVE_SHUTDOWN /* Define to 1 if 'sig_atomic_t' is a signed integer type. */ #undef HAVE_SIGNED_SIG_ATOMIC_T /* Define to 1 if 'wchar_t' is a signed integer type. */ #undef HAVE_SIGNED_WCHAR_T /* Define to 1 if 'wint_t' is a signed integer type. */ #undef HAVE_SIGNED_WINT_T /* Define to 1 if the system has the type 'sigset_t'. */ #undef HAVE_SIGSET_T /* Define to 1 if you have the 'sleep' function. */ #undef HAVE_SLEEP /* Define to 1 if you have the 'snprintf' function. */ #undef HAVE_SNPRINTF /* Define if the return value of the snprintf function is the number of of bytes (excluding the terminating NUL) that would have been produced if the buffer had been large enough. */ #undef HAVE_SNPRINTF_RETVAL_C99 /* Define if the string produced by the snprintf function is always NUL terminated. */ #undef HAVE_SNPRINTF_TRUNCATION_C99 /* Define if the locale_t type is as on Solaris 11.4. */ #undef HAVE_SOLARIS114_LOCALES /* Define to 1 if you have the <stdbool.h> header file. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the <stdckdint.h> header file. */ #undef HAVE_STDCKDINT_H /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H /* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares uintmax_t. */ #undef HAVE_STDINT_H_WITH_UINTMAX /* Define to 1 if you have the <stdio.h> header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the 'strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strchrnul' function. */ #undef HAVE_STRCHRNUL /* Define to 1 if you have the `strerror_r' function. */ #undef HAVE_STRERROR_R /* Define to 1 if you have the <strings.h> header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the 'strncasecmp' function. */ #undef HAVE_STRNCASECMP /* Define to 1 if you have the 'strndup' function. */ #undef HAVE_STRNDUP /* Define to 1 if you have the 'strnlen' function. */ #undef HAVE_STRNLEN /* Define to 1 if you have the 'strptime' function. */ #undef HAVE_STRPTIME /* Define to 1 if you have the 'strtok_r' function. */ #undef HAVE_STRTOK_R /* Define to 1 if 'decimal_point' is a member of 'struct lconv'. */ #undef HAVE_STRUCT_LCONV_DECIMAL_POINT /* Define to 1 if 'int_p_cs_precedes' is a member of 'struct lconv'. */ #undef HAVE_STRUCT_LCONV_INT_P_CS_PRECEDES /* Define to 1 if the system has the type 'struct random_data'. */ #undef HAVE_STRUCT_RANDOM_DATA /* Define to 1 if the system has the type 'struct sockaddr_storage'. */ #undef HAVE_STRUCT_SOCKADDR_STORAGE /* Define to 1 if 'ss_family' is a member of 'struct sockaddr_storage'. */ #undef HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY /* Define to 1 if 'st_atimensec' is a member of 'struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIMENSEC /* Define to 1 if 'st_atimespec.tv_nsec' is a member of 'struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC /* Define to 1 if 'st_atim.st__tim.tv_nsec' is a member of 'struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC /* Define to 1 if 'st_atim.tv_nsec' is a member of 'struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC /* Define to 1 if 'st_birthtimensec' is a member of 'struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC /* Define to 1 if 'st_birthtimespec.tv_nsec' is a member of 'struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC /* Define to 1 if 'st_birthtim.tv_nsec' is a member of 'struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC /* Define to 1 if you have the 'symlink' function. */ #undef HAVE_SYMLINK /* Define to 1 if you have the 'sysctl' function. */ #undef HAVE_SYSCTL /* Define to 1 if you have the <sysexits.h> header file. */ #undef HAVE_SYSEXITS_H /* Define to 1 if you have the 'sysmp' function. */ #undef HAVE_SYSMP /* Define to 1 if you have the <sys/bitypes.h> header file. */ #undef HAVE_SYS_BITYPES_H /* Define to 1 if you have the <sys/cdefs.h> header file. */ #undef HAVE_SYS_CDEFS_H /* Define to 1 if you have the <sys/inttypes.h> header file. */ #undef HAVE_SYS_INTTYPES_H /* Define to 1 if you have the <sys/ioctl.h> header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the <sys/mman.h> header file. */ #undef HAVE_SYS_MMAN_H /* Define to 1 if you have the <sys/param.h> header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the <sys/pstat.h> header file. */ #undef HAVE_SYS_PSTAT_H /* Define to 1 if you have the <sys/select.h> header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the <sys/single_threaded.h> header file. */ #undef HAVE_SYS_SINGLE_THREADED_H /* Define to 1 if you have the <sys/socket.h> header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the <sys/sysctl.h> header file. */ #undef HAVE_SYS_SYSCTL_H /* Define to 1 if you have the <sys/sysmp.h> header file. */ #undef HAVE_SYS_SYSMP_H /* Define to 1 if you have the <sys/time.h> header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the <sys/types.h> header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the <sys/uio.h> header file. */ #undef HAVE_SYS_UIO_H /* Define to 1 if you have the <sys/wait.h> header file. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the `thrd_create' function. */ #undef HAVE_THRD_CREATE /* Define to 1 if you have the <threads.h> header file. */ #undef HAVE_THREADS_H /* Define if struct tm has the tm_gmtoff member. */ #undef HAVE_TM_GMTOFF /* Define to 1 if you have the 'towlower' function. */ #undef HAVE_TOWLOWER /* Define to 1 if you have the `tsearch' function. */ #undef HAVE_TSEARCH /* Define to 1 if you have the <uchar.h> header file. */ #undef HAVE_UCHAR_H /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the <unistring/woe32dll.h> header file. */ #undef HAVE_UNISTRING_WOE32DLL_H /* Define to 1 if you have the 'unsetenv' function. */ #undef HAVE_UNSETENV /* Define to 1 if the system has the type 'unsigned long long int'. */ #undef HAVE_UNSIGNED_LONG_LONG_INT /* Define to 1 if you have the `uselocale' function. */ #undef HAVE_USELOCALE /* Define to 1 if you have the 'usleep' function. */ #undef HAVE_USLEEP /* Define if you have a global __progname variable */ #undef HAVE_VAR___PROGNAME /* Define to 1 if you have the 'vasnprintf' function. */ #undef HAVE_VASNPRINTF /* Define to 1 or 0, depending whether the compiler supports simple visibility declarations. */ #undef HAVE_VISIBILITY /* Define to 1 if you have the 'vsnprintf' function. */ #undef HAVE_VSNPRINTF /* Define to 1 if you have the <wchar.h> header file. */ #undef HAVE_WCHAR_H /* Define if you have the 'wchar_t' type. */ #undef HAVE_WCHAR_T /* Define to 1 if you have the 'wcrtomb' function. */ #undef HAVE_WCRTOMB /* Define to 1 if you have the 'wcslen' function. */ #undef HAVE_WCSLEN /* Define to 1 if you have the 'wctob' function. */ #undef HAVE_WCTOB /* Define to 1 if you have the <wctype.h> header file. */ #undef HAVE_WCTYPE_H /* Define to 1 if you have the 'wcwidth' function. */ #undef HAVE_WCWIDTH /* Define to 1 if the compiler and linker support weak declarations of symbols. */ #undef HAVE_WEAK_SYMBOLS /* Define to 1 if you have the <winsock2.h> header file. */ #undef HAVE_WINSOCK2_H /* Define if you have the 'wint_t' type. */ #undef HAVE_WINT_T /* Define to 1 if fstatat (..., 0) works. For example, it does not work in AIX 7.1. */ #undef HAVE_WORKING_FSTATAT_ZERO_FLAG /* Define if the mbrtoc32 function basically works. */ #undef HAVE_WORKING_MBRTOC32 /* Define to 1 if O_NOATIME works. */ #undef HAVE_WORKING_O_NOATIME /* Define to 1 if O_NOFOLLOW works. */ #undef HAVE_WORKING_O_NOFOLLOW /* Define if the uselocale function exists and may safely be called. */ #undef HAVE_WORKING_USELOCALE /* Define to 1 if you have the <ws2tcpip.h> header file. */ #undef HAVE_WS2TCPIP_H /* Define to 1 if you have the <xlocale.h> header file. */ #undef HAVE_XLOCALE_H /* Define to 1 if you have the '_chsize' function. */ #undef HAVE__CHSIZE /* Define to 1 if you have the '_set_invalid_parameter_handler' function. */ #undef HAVE__SET_INVALID_PARAMETER_HANDLER /* Define to 1 if the compiler supports __builtin_expect, and to 2 if <builtins.h> does. */ #undef HAVE___BUILTIN_EXPECT #ifndef HAVE___BUILTIN_EXPECT # define __builtin_expect(e, c) (e) #elif HAVE___BUILTIN_EXPECT == 2 # include <builtins.h> #endif /* Define to 1 if ctype.h defines __header_inline. */ #undef HAVE___HEADER_INLINE /* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>. Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Oracle Developer Studio 12.6 (Sun C 5.15 SunOS_sparc 2017/05/30). Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like <ctype.h>. For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions (ISO C 99 section 6.7.4.(3). This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see <https://trac.macports.org/ticket/41033>. Assume DragonFly and FreeBSD will be similar. GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. It defines a macro __GNUC_STDC_INLINE__ to indicate this situation or a macro __GNUC_GNU_INLINE__ to indicate the opposite situation. GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline semantics but warns, unless -fgnu89-inline is used: warning: C99 inline functions are not supported; using GNU89 warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined HAVE___HEADER_INLINE \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? (defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ && !defined __PCC__) \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined __PCC__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE _GL_UNUSED static # define _GL_EXTERN_INLINE _GL_UNUSED static #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif /* Define to 1 if the compiler supports the keyword '__inline'. */ #undef HAVE___INLINE /* Define to 1 if you have the '__secure_getenv' function. */ #undef HAVE___SECURE_GETENV /* Define to 1 if you have the '__xpg_strerror_r' function. */ #undef HAVE___XPG_STRERROR_R /* In building, not usage */ #undef IN_GNUASTRO_BUILD /* Define as the bit index in the word where to find bit 0 of the exponent of 'long double'. */ #undef LDBL_EXPBIT0_BIT /* Define as the word index where to find the exponent of 'long double'. */ #undef LDBL_EXPBIT0_WORD /* Define as the bit index in the word where to find the sign of 'long double'. */ #undef LDBL_SIGNBIT_BIT /* Define as the word index where to find the sign of 'long double'. */ #undef LDBL_SIGNBIT_WORD /* Define if localename.c overrides newlocale(), duplocale(), freelocale(). */ #undef LOCALENAME_ENHANCE_LOCALE_FUNCS /* Define to 1 if 'lstat' dereferences a symlink specified with a trailing slash. */ #undef LSTAT_FOLLOWS_SLASHED_SYMLINK /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */ #undef MALLOC_0_IS_NONNULL /* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */ #undef MAP_ANONYMOUS /* Define if the mbrtoc32 function does not return (size_t) -2 for empty input. */ #undef MBRTOC32_EMPTY_INPUT_BUG /* Define if the mbrtoc32 function may signal encoding errors in the C locale. */ #undef MBRTOC32_IN_C_LOCALE_MAYBE_EILSEQ /* Define if the mbrtowc function does not return (size_t) -2 for empty input. */ #undef MBRTOWC_EMPTY_INPUT_BUG /* Define if the mbrtowc function may signal encoding errors in the C locale. */ #undef MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ /* Define if the mbrtowc function has the NULL pwc argument bug. */ #undef MBRTOWC_NULL_ARG1_BUG /* Define if the mbrtowc function has the NULL string argument bug. */ #undef MBRTOWC_NULL_ARG2_BUG /* Define if the mbrtowc function does not return 0 for a NUL character. */ #undef MBRTOWC_NUL_RETVAL_BUG /* Define if the mbrtowc function returns a wrong return value. */ #undef MBRTOWC_RETVAL_BUG /* Define if the mbrtowc function stores a wide character when reporting incomplete input. */ #undef MBRTOWC_STORES_INCOMPLETE_BUG /* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO #endif /* Define to 1 if the encoding of NaN 'double's is as in IEEE 754-2008 § 6.2.1. */ #undef MIPS_NAN2008_DOUBLE /* Define to 1 if the encoding of NaN 'float's is as in IEEE 754-2008 § 6.2.1. */ #undef MIPS_NAN2008_FLOAT /* Define to 1 if the encoding of NaN 'long double's is as in IEEE 754-2008 § 6.2.1. */ #undef MIPS_NAN2008_LONG_DOUBLE /* Define to 1 on musl libc. */ #undef MUSL_LIBC /* Define if the compilation of mktime.c should define 'mktime' with the native Windows TZ workaround. */ #undef NEED_MKTIME_WINDOWS /* Define if the compilation of mktime.c should define 'mktime' with the algorithmic workarounds. */ #undef NEED_MKTIME_WORKING /* Define to 1 to enable general improvements of setlocale. */ #undef NEED_SETLOCALE_IMPROVED /* Define to 1 to enable a multithread-safety fix of setlocale. */ #undef NEED_SETLOCALE_MTSAFE /* Define to 1 if nl_langinfo is multithread-safe. */ #undef NL_LANGINFO_MTSAFE /* Define to 1 if open() fails to recognize a trailing slash. */ #undef OPEN_TRAILING_SLASH_BUG /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to the type that is the result of default argument promotions of type mode_t. */ #undef PROMOTED_MODE_T /* Define if pthread_create is an inline function. */ #undef PTHREAD_CREATE_IS_INLINE /* Define to necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE /* Define if the pthread_in_use() detection is hard. */ #undef PTHREAD_IN_USE_DETECTION_HARD /* Define to 1 if pthread_sigmask(), when it fails, returns -1 and sets errno. */ #undef PTHREAD_SIGMASK_FAILS_WITH_ERRNO /* Define to 1 if pthread_sigmask may return 0 and have no effect. */ #undef PTHREAD_SIGMASK_INEFFECTIVE /* Define to 1 if pthread_sigmask() unblocks signals incorrectly. */ #undef PTHREAD_SIGMASK_UNBLOCK_BUG /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'ptrdiff_t'. */ #undef PTRDIFF_T_SUFFIX /* Define to 1 if gnulib's fchdir() replacement is used. */ #undef REPLACE_FCHDIR /* Define to 1 if stat needs help when passed a file name with a trailing slash */ #undef REPLACE_FUNC_STAT_FILE /* Define if nl_langinfo exists but is overridden by gnulib. */ #undef REPLACE_NL_LANGINFO /* Define to 1 if open() should work around the inability to open a directory. */ #undef REPLACE_OPEN_DIRECTORY /* Define to 1 if strerror(0) does not return a message implying success. */ #undef REPLACE_STRERROR_0 /* Define if vasnprintf exists but is overridden by gnulib. */ #undef REPLACE_VASNPRINTF /* Define to 1 if setlocale (LC_ALL, NULL) is multithread-safe. */ #undef SETLOCALE_NULL_ALL_MTSAFE /* Define to 1 if setlocale (category, NULL) is multithread-safe. */ #undef SETLOCALE_NULL_ONE_MTSAFE /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'sig_atomic_t'. */ #undef SIG_ATOMIC_T_SUFFIX /* The size of 'int', as computed by sizeof. */ #undef SIZEOF_INT /* The size of 'long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of 'size_t', as computed by sizeof. */ #undef SIZEOF_SIZE_T /* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #ifndef SIZE_MAX # undef SIZE_MAX #endif /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'size_t'. */ #undef SIZE_T_SUFFIX /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if the 'S_IS*' macros in <sys/stat.h> do not work properly. */ #undef STAT_MACROS_BROKEN /* Define to 1 if all of the C89 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Define to 1 if strerror_r returns char *. */ #undef STRERROR_R_CHAR_P /* Define to 1 if time_t is signed. */ #undef TIME_T_IS_SIGNED /* Define to 1 if the type of the st_atim member of a struct stat is struct timespec. */ #undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC /* User data dir. */ #undef USERCONFIG_DIR /* Define if the combination of the ISO C and POSIX multithreading APIs can be used. */ #undef USE_ISOC_AND_POSIX_THREADS /* Define if the ISO C multithreading library can be used. */ #undef USE_ISOC_THREADS /* Define if the POSIX multithreading library can be used. */ #undef USE_POSIX_THREADS /* Define if references to the POSIX multithreading library are satisfied by libc. */ #undef USE_POSIX_THREADS_FROM_LIBC /* Define if references to the POSIX multithreading library should be made weak. */ #undef USE_POSIX_THREADS_WEAK /* Enable extensions on AIX, Interix, z/OS. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Identify the host operating system as Minix. This macro does not affect the system headers' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX # undef _MINIX #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE # undef _POSIX_SOURCE #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE # undef _POSIX_1_SOURCE #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by C23 Annex F. */ #ifndef __STDC_WANT_IEC_60559_EXT__ # undef __STDC_WANT_IEC_60559_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Define if the native Windows multithreading API can be used. */ #undef USE_WINDOWS_THREADS /* Version number of package */ #undef VERSION /* Define to 1 if unsetenv returns void instead of int. */ #undef VOID_UNSETENV /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wchar_t'. */ #undef WCHAR_T_SUFFIX /* Define if the wcrtomb function does not work in the C locale. */ #undef WCRTOMB_C_LOCALE_BUG /* Define if the wcrtomb function has an incorrect return value. */ #undef WCRTOMB_RETVAL_BUG /* Define if WSAStartup is needed. */ #undef WINDOWS_SOCKETS /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wint_t'. */ #undef WINT_T_SUFFIX /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* True if the compiler says it groks GNU C version MAJOR.MINOR. */ #if defined __GNUC__ && defined __GNUC_MINOR__ # define _GL_GNUC_PREREQ(major, minor) \ ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__)) #else # define _GL_GNUC_PREREQ(major, minor) 0 #endif /* Define to enable the declarations of ISO C 11 types and functions. */ #undef _ISOC11_SOURCE /* Define to 1 on platforms where this makes off_t a 64-bit type. */ #undef _LARGE_FILES /* Define to 1 on Solaris. */ #undef _LCONV_C99 /* The _Noreturn keyword of C11. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif (defined __clang__ && __clang_major__ < 16 \ && defined _GL_WORK_AROUND_LLVM_BUG_59792) /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around that rare LLVM bug, though you may get many false-alarm warnings. */ # define _Noreturn # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ && (_GL_GNUC_PREREQ (4, 7) \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))))) /* _Noreturn works as-is. */ # elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif /* Define to 1 in order to get the POSIX compatible declarations of socket functions. */ #undef _POSIX_PII_SOCKET /* Define if you want <regex.h> to include <limits.h>, so that it consistently overrides <limits.h>'s RE_DUP_MAX. */ #undef _REGEX_INCLUDE_LIMITS_H /* Define if you want regoff_t to be at least as wide POSIX requires. */ #undef _REGEX_LARGE_OFFSETS /* Number of bits in time_t, on hosts where this is settable. */ #undef _TIME_BITS /* For standard stat data types on VMS. */ #undef _USE_STD_STAT /* Define to rpl_ if the getopt replacement functions and variables should be used. */ #undef __GETOPT_PREFIX /* Define to 1 on platforms where this makes time_t a 64-bit type. */ #undef __MINGW_USE_VC2005_COMPAT /* Define to 1 if the system <stdint.h> predates C++11. */ #undef __STDC_CONSTANT_MACROS /* Define to 1 if the system <stdint.h> predates C++11. */ #undef __STDC_LIMIT_MACROS /* Define to 1 if C does not support variable-length arrays, and if the compiler does not already define this. */ #undef __STDC_NO_VLA__ /* Define as a replacement for the ISO C99 __func__ variable. */ #undef __func__ /* The _GL_ASYNC_SAFE marker should be attached to functions that are signal handlers (for signals other than SIGABRT, SIGPIPE) or can be invoked from such signal handlers. Such functions have some restrictions: * All functions that it calls should be marked _GL_ASYNC_SAFE as well, or should be listed as async-signal-safe in POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04> section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in particular, are NOT async-signal-safe. * All memory locations (variables and struct fields) that these functions access must be marked 'volatile'. This holds for both read and write accesses. Otherwise the compiler might optimize away stores to and reads from such locations that occur in the program, depending on its data flow analysis. For example, when the program contains a loop that is intended to inspect a variable set from within a signal handler while (!signal_occurred) ; the compiler is allowed to transform this into an endless loop if the variable 'signal_occurred' is not declared 'volatile'. Additionally, recall that: * A signal handler should not modify errno (except if it is a handler for a fatal signal and ends by raising the same signal again, thus provoking the termination of the process). If it invokes a function that may clobber errno, it needs to save and restore the value of errno. */ #define _GL_ASYNC_SAFE /* Attributes. */ #if (defined __has_attribute \ && (!defined __clang_minor__ \ || (defined __apple_build_version__ \ ? 7000000 <= __apple_build_version__ \ : 5 <= __clang_major__))) # define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__) #else # define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr # define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2) # define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95) # define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_diagnose_if 0 # define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1) # define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0) # define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6) # define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0) # ifdef _ICC # define _GL_ATTR_may_alias 0 # else # define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3) # endif # define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0) # define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96) # define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9) # define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0) # define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4) #endif /* Use __has_c_attribute if available. However, do not use with pre-C23 GCC, which can issue false positives if -Wpedantic. */ #if (defined __has_c_attribute \ && ! (_GL_GNUC_PREREQ (4, 6) \ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) <= 201710)) # define _GL_HAVE___HAS_C_ATTRIBUTE 1 #else # define _GL_HAVE___HAS_C_ATTRIBUTE 0 #endif /* Define if, in a function declaration, the attributes in bracket syntax [[...]] must come before the attributes in __attribute__((...)) syntax. If this is defined, it is best to avoid the bracket syntax, so that the various _GL_ATTRIBUTE_* can be cumulated on the same declaration in any order. */ #ifdef __cplusplus # if defined __clang__ # define _GL_BRACKET_BEFORE_ATTRIBUTE 1 # endif #else # if defined __GNUC__ && !defined __clang__ # define _GL_BRACKET_BEFORE_ATTRIBUTE 1 # endif #endif /* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function is the size of the returned memory block. _GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied by the Nth argument of the function is the size of the returned memory block. */ /* Applies to: function, pointer to function, function types. */ #ifndef _GL_ATTRIBUTE_ALLOC_SIZE # if _GL_HAS_ATTRIBUTE (alloc_size) # define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) # else # define _GL_ATTRIBUTE_ALLOC_SIZE(args) # endif #endif /* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the function and report an error if it cannot do so. */ /* Applies to: function. */ #ifndef _GL_ATTRIBUTE_ALWAYS_INLINE # if _GL_HAS_ATTRIBUTE (always_inline) # define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__)) # else # define _GL_ATTRIBUTE_ALWAYS_INLINE # endif #endif /* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show in stack traces when debugging. The compiler should omit the function from stack traces. */ /* Applies to: function. */ #ifndef _GL_ATTRIBUTE_ARTIFICIAL # if _GL_HAS_ATTRIBUTE (artificial) # define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__)) # else # define _GL_ATTRIBUTE_ARTIFICIAL # endif #endif /* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */ /* Applies to: functions. */ /* Avoid __attribute__ ((cold)) on MinGW; see thread starting at <https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>. Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */ #ifndef _GL_ATTRIBUTE_COLD # if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__ # ifndef __SUNPRO_C # define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__)) # else # define _GL_ATTRIBUTE_COLD __attribute__ ((cold)) # endif # else # define _GL_ATTRIBUTE_COLD # endif #endif /* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate calls to the function with the same arguments. This attribute is safe for a function that neither depends on nor affects observable state, and always returns exactly once - e.g., does not loop forever, and does not call longjmp. (This attribute is stricter than _GL_ATTRIBUTE_PURE.) */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_CONST # if _GL_HAS_ATTRIBUTE (const) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) # else # define _GL_ATTRIBUTE_CONST # endif #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if _GL_GNUC_PREREQ (11, 0) # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* If gnulib's <string.h> or <wchar.h> has already defined this macro, continue to use this earlier definition, since <stdlib.h> may not have been included yet. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # if defined __cplusplus && defined __GNUC__ && !defined __clang__ /* Work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108231> */ # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC ((void (*) (void *)) free, 1) # else # define _GL_ATTRIBUTE_DEALLOC_FREE \ _GL_ATTRIBUTE_DEALLOC (free, 1) # endif #endif /* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated. The compiler may warn if the entity is used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: namespace, class, template specialization. */ #ifndef _GL_ATTRIBUTE_DEPRECATED # ifndef _GL_BRACKET_BEFORE_ATTRIBUTE # if _GL_HAVE___HAS_C_ATTRIBUTE # if __has_c_attribute (__deprecated__) # define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]] # endif # endif # endif # if !defined _GL_ATTRIBUTE_DEPRECATED && _GL_HAS_ATTRIBUTE (deprecated) # define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) # endif # ifndef _GL_ATTRIBUTE_DEPRECATED # define _GL_ATTRIBUTE_DEPRECATED # endif #endif /* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and the function call is not optimized away. _GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and the function call is not optimized away. */ /* Applies to: functions. */ #if !(defined _GL_ATTRIBUTE_ERROR && defined _GL_ATTRIBUTE_WARNING) # if _GL_HAS_ATTRIBUTE (error) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg))) # elif _GL_HAS_ATTRIBUTE (diagnose_if) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__diagnose_if__ (1, msg, "error"))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__diagnose_if__ (1, msg, "warning"))) # else # define _GL_ATTRIBUTE_ERROR(msg) # define _GL_ATTRIBUTE_WARNING(msg) # endif #endif /* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain visible to debuggers etc., even with '-fwhole-program'. */ /* Applies to: functions, variables. */ #ifndef _GL_ATTRIBUTE_EXTERNALLY_VISIBLE # if _GL_HAS_ATTRIBUTE (externally_visible) # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible)) # else # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE # endif #endif /* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if the control flow falls through to the immediately following 'case' or 'default' label. The compiler should not warn in this case. */ /* Applies to: Empty statement (;), inside a 'switch' statement. */ /* Always expands to something. */ #ifndef _GL_ATTRIBUTE_FALLTHROUGH # if _GL_HAVE___HAS_C_ATTRIBUTE # if __has_c_attribute (__fallthrough__) # define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]] # endif # endif # if !defined _GL_ATTRIBUTE_FALLTHROUGH && _GL_HAS_ATTRIBUTE (fallthrough) # define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__)) # endif # ifndef _GL_ATTRIBUTE_FALLTHROUGH # define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0) # endif #endif /* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) declares that the STRING-INDEXth function argument is a format string of style ARCHETYPE, which is one of: printf, gnu_printf scanf, gnu_scanf, strftime, gnu_strftime, strfmon, or the same thing prefixed and suffixed with '__'. If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK are suitable for the format string. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_FORMAT # if _GL_HAS_ATTRIBUTE (format) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) # else # define _GL_ATTRIBUTE_FORMAT(spec) # endif #endif /* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other compilation unit, it executes code from that unit only by return or by exception handling. This declaration lets the compiler optimize that unit more aggressively. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_LEAF # if _GL_HAS_ATTRIBUTE (leaf) # define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__)) # else # define _GL_ATTRIBUTE_LEAF # endif #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if _GL_HAS_ATTRIBUTE (malloc) # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the same storage as pointers to other types. Thus this declaration disables strict aliasing optimization. */ /* Applies to: types. */ /* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */ #ifndef _GL_ATTRIBUTE_MAY_ALIAS # if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C # define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__)) # else # define _GL_ATTRIBUTE_MAY_ALIAS # endif #endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: class. */ /* In C++ and C23, this is spelled [[__maybe_unused__]]. GCC's syntax is __attribute__ ((__unused__)). clang supports both syntaxes. Except that with clang ≥ 6, < 10, in C++ mode, __has_c_attribute (__maybe_unused__) yields true but the use of [[__maybe_unused__]] nevertheless produces a warning. */ #ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # ifndef _GL_BRACKET_BEFORE_ATTRIBUTE # if defined __clang__ && defined __cplusplus # if !defined __apple_build_version__ && __clang_major__ >= 10 # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # endif # elif _GL_HAVE___HAS_C_ATTRIBUTE # if __has_c_attribute (__maybe_unused__) # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # endif # endif # endif # ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED # endif #endif /* Alternative spelling of this macro, for convenience and for compatibility with glibc/include/libc-symbols.h. */ #define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED /* Earlier spellings of this macro. */ #define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED /* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not discard the return value. The compiler may warn if the caller does not use the return value, unless the caller uses something like ignore_value. */ /* Applies to: function, enumeration, class. */ #ifndef _GL_ATTRIBUTE_NODISCARD # ifndef _GL_BRACKET_BEFORE_ATTRIBUTE # if defined __clang__ && defined __cplusplus /* With clang up to 15.0.6 (at least), in C++ mode, [[__nodiscard__]] produces a warning. The 1000 below means a yet unknown threshold. When clang++ version X starts supporting [[__nodiscard__]] without warning about it, you can replace the 1000 with X. */ # if __clang_major__ >= 1000 # define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] # endif # elif _GL_HAVE___HAS_C_ATTRIBUTE # if __has_c_attribute (__nodiscard__) # define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] # endif # endif # endif # if !defined _GL_ATTRIBUTE_NODISCARD && _GL_HAS_ATTRIBUTE (warn_unused_result) # define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__)) # endif # ifndef _GL_ATTRIBUTE_NODISCARD # define _GL_ATTRIBUTE_NODISCARD # endif #endif /* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the function. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_NOINLINE # if _GL_HAS_ATTRIBUTE (noinline) # define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__)) # else # define _GL_ATTRIBUTE_NOINLINE # endif #endif /* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,... must not be NULL. _GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be null. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_NONNULL # if _GL_HAS_ATTRIBUTE (nonnull) # define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args)) # else # define _GL_ATTRIBUTE_NONNULL(args) # endif #endif /* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is not meant to be NUL-terminated. */ /* Applies to: struct/union members and variables that are arrays of element type '[[un]signed] char'. */ #ifndef _GL_ATTRIBUTE_NONSTRING # if _GL_HAS_ATTRIBUTE (nonstring) # define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__)) # else # define _GL_ATTRIBUTE_NONSTRING # endif #endif /* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */ /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ /* Applies to: functions. */ /* After a function's parameter list, this attribute must come first, before other attributes. */ #ifndef _GL_ATTRIBUTE_NOTHROW # if defined __cplusplus # if _GL_GNUC_PREREQ (2, 8) || __clang_major >= 4 # if __cplusplus >= 201103L # define _GL_ATTRIBUTE_NOTHROW noexcept (true) # else # define _GL_ATTRIBUTE_NOTHROW throw () # endif # else # define _GL_ATTRIBUTE_NOTHROW # endif # else # if _GL_HAS_ATTRIBUTE (nothrow) # define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) # else # define _GL_ATTRIBUTE_NOTHROW # endif # endif #endif /* _GL_ATTRIBUTE_PACKED declares: For struct members: The member has the smallest possible alignment. For struct, union, class: All members have the smallest possible alignment, minimizing the memory required. */ /* Applies to: struct members, struct, union, in C++ also: class. */ #ifndef _GL_ATTRIBUTE_PACKED # if _GL_HAS_ATTRIBUTE (packed) # define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__)) # else # define _GL_ATTRIBUTE_PACKED # endif #endif /* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate calls to the function with the same arguments if observable state is not changed between calls. This attribute is safe for a function that does not affect observable state, and always returns exactly once. (This attribute is looser than _GL_ATTRIBUTE_CONST.) */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_PURE # if _GL_HAS_ATTRIBUTE (pure) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE # endif #endif /* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is a non-NULL pointer. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_RETURNS_NONNULL # if _GL_HAS_ATTRIBUTE (returns_nonnull) # define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) # else # define _GL_ATTRIBUTE_RETURNS_NONNULL # endif #endif /* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a trailing NULL argument. _GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). _GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_SENTINEL # if _GL_HAS_ATTRIBUTE (sentinel) # define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos)) # else # define _GL_ATTRIBUTE_SENTINEL(pos) # endif #endif /* A helper macro. Don't use it directly. */ #ifndef _GL_ATTRIBUTE_UNUSED # if _GL_HAS_ATTRIBUTE (unused) # define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else # define _GL_ATTRIBUTE_UNUSED # endif #endif /* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the immediately preceding label is not used. The compiler should not warn if the label is not used. */ /* Applies to: label (both in C and C++). */ /* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;' syntax. But clang does. */ #ifndef _GL_UNUSED_LABEL # if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__ # define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED # else # define _GL_UNUSED_LABEL # endif #endif /* In C++, there is the concept of "language linkage", that encompasses name mangling and function calling conventions. The following macros start and end a block of "C" linkage. */ #ifdef __cplusplus # define _GL_BEGIN_C_LINKAGE extern "C" { # define _GL_END_C_LINKAGE } #else # define _GL_BEGIN_C_LINKAGE # define _GL_END_C_LINKAGE #endif /* Define as 'int' if <sys/types.h> doesn't define. */ #undef gid_t /* Define to '__inline__' or '__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to long or long long if <stdint.h> and <inttypes.h> don't define. */ #undef intmax_t /* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to a type if <wchar.h> does not define. */ #undef mbstate_t /* _GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where n1 and n2 are expressions without side effects, that evaluate to real numbers (excluding NaN). It returns 1 if n1 > n2 0 if n1 == n2 -1 if n1 < n2 The naïve code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional jump with nearly all GCC versions up to GCC 10. This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many GCC versions up to GCC 9. The better code (n1 > n2) - (n1 < n2) from Hacker's Delight § 2-9 avoids conditional jumps in all GCC versions >= 3.4. */ #define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2))) /* Define to 'int' if <sys/types.h> does not define. */ #undef mode_t /* Define to the type of st_nlink in struct stat, or a supertype. */ #undef nlink_t /* Define as a signed integer type capable of holding a process identifier. */ #undef pid_t /* Define as the type of the result of subtracting two pointers, if the system doesn't define it. */ #undef ptrdiff_t /* Define to rpl_re_comp if the replacement should be used. */ #undef re_comp /* Define to rpl_re_compile_fastmap if the replacement should be used. */ #undef re_compile_fastmap /* Define to rpl_re_compile_pattern if the replacement should be used. */ #undef re_compile_pattern /* Define to rpl_re_exec if the replacement should be used. */ #undef re_exec /* Define to rpl_re_match if the replacement should be used. */ #undef re_match /* Define to rpl_re_match_2 if the replacement should be used. */ #undef re_match_2 /* Define to rpl_re_search if the replacement should be used. */ #undef re_search /* Define to rpl_re_search_2 if the replacement should be used. */ #undef re_search_2 /* Define to rpl_re_set_registers if the replacement should be used. */ #undef re_set_registers /* Define to rpl_re_set_syntax if the replacement should be used. */ #undef re_set_syntax /* Define to rpl_re_syntax_options if the replacement should be used. */ #undef re_syntax_options /* Define to rpl_regcomp if the replacement should be used. */ #undef regcomp /* Define to rpl_regerror if the replacement should be used. */ #undef regerror /* Define to rpl_regexec if the replacement should be used. */ #undef regexec /* Define to rpl_regfree if the replacement should be used. */ #undef regfree /* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported only directly. */ #undef restrict /* Work around a bug in older versions of Sun C++, which did not #define __restrict__ or support _Restrict or __restrict__ even though the corresponding Sun C compiler ended up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. This workaround can be removed once we assume Oracle Developer Studio 12.5 (2016) or later. */ #if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ # define _Restrict # define __restrict__ #endif /* Define as 'unsigned int' if <stddef.h> doesn't define. */ #undef size_t /* type to use in place of socklen_t if not defined */ #undef socklen_t /* Define as a signed type of the same size as size_t. */ #undef ssize_t /* Define as 'int' if <sys/types.h> doesn't define. */ #undef uid_t /* This definition is a duplicate of the one in unitypes.h. It is here so that we can cope with an older version of unitypes.h that does not contain this definition and that is pre-installed among the public header files. */ # if defined __restrict \ || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3 # define _UC_RESTRICT __restrict # elif 199901L <= __STDC_VERSION__ || defined restrict # define _UC_RESTRICT restrict # else # define _UC_RESTRICT # endif /* Define to an unsigned 32-bit type if <sys/types.h> lacks this type. */ #undef useconds_t #if !defined HAVE_C_ALIGNASOF \ && !(defined __cplusplus && 201103 <= __cplusplus) \ && !defined alignof # if defined HAVE_STDALIGN_H # include <stdalign.h> # endif /* ISO C23 alignas and alignof for platforms that lack it. References: ISO C23 (latest free draft <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf>) sections 6.5.3.4, 6.7.5, 7.15. C++11 (latest free draft <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf>) section 18.10. */ /* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment requirement of a structure member (i.e., slot or field) that is of type TYPE, as an integer constant expression. This differs from GCC's and clang's __alignof__ operator, which can yield a better-performing alignment for an object of that type. For example, on x86 with GCC and on Linux/x86 with clang, __alignof__ (double) and __alignof__ (long long) are 8, whereas alignof (double) and alignof (long long) are 4 unless the option '-malign-double' is used. The result cannot be used as a value for an 'enum' constant, if you want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. */ /* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. clang versions < 8.0.0 have the same bug. */ # if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \ || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9) \ && !defined __clang__) \ || (defined __clang__ && __clang_major__ < 8)) # undef/**/_Alignof # ifdef __cplusplus # if (201103 <= __cplusplus || defined _MSC_VER) # define _Alignof(type) alignof (type) # else template <class __t> struct __alignof_helper { char __a; __t __b; }; # if (defined __GNUC__ && 4 <= __GNUC__) || defined __clang__ # define _Alignof(type) __builtin_offsetof (__alignof_helper<type>, __b) # else # define _Alignof(type) offsetof (__alignof_helper<type>, __b) # endif # define _GL_STDALIGN_NEEDS_STDDEF 1 # endif # else # if (defined __GNUC__ && 4 <= __GNUC__) || defined __clang__ # define _Alignof(type) __builtin_offsetof (struct { char __a; type __b; }, __b) # else # define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) # define _GL_STDALIGN_NEEDS_STDDEF 1 # endif # endif # endif # if ! (defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER)) # undef/**/alignof # define alignof _Alignof # endif /* alignas (A), also known as _Alignas (A), aligns a variable or type to the alignment A, where A is an integer constant expression. For example: int alignas (8) foo; struct s { int a; int alignas (8) bar; }; aligns the address of FOO and the offset of BAR to be multiples of 8. A should be a power of two that is at least the type's alignment and at most the implementation's alignment limit. This limit is 2**28 on typical GNUish hosts, and 2**13 on MSVC. To be portable to MSVC through at least version 10.0, A should be an integer constant, as MSVC does not support expressions such as 1 << 3. To be portable to Sun C 5.11, do not align auto variables to anything stricter than their default alignment. The following C23 requirements are not supported here: - If A is zero, alignas has no effect. - alignas can be used multiple times; the strictest one wins. - alignas (TYPE) is equivalent to alignas (alignof (TYPE)). */ # if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 # if defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER) # define _Alignas(a) alignas (a) # elif (!defined __attribute__ \ && ((defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ : __GNUC__ && !defined __ibmxl__) \ || (4 <= __clang_major__) \ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__)) # define _Alignas(a) __attribute__ ((__aligned__ (a))) # elif 1300 <= _MSC_VER # define _Alignas(a) __declspec (align (a)) # endif # endif # if !defined HAVE_STDALIGN_H # if ((defined _Alignas \ && !(defined __cplusplus \ && (201103 <= __cplusplus || defined _MSC_VER))) \ || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) # define alignas _Alignas # endif # endif # if defined _GL_STDALIGN_NEEDS_STDDEF # include <stddef.h> # endif #endif #ifndef HAVE_C_BOOL # if !defined __cplusplus && !defined __bool_true_false_are_defined # if HAVE_STDBOOL_H # include <stdbool.h> # else # if defined __SUNPRO_C # error "<stdbool.h> is not usable with this configuration. To make it usable, add -D_STDC_C99= to $CC." # else # error "<stdbool.h> does not exist on this platform. Use gnulib module 'stdbool-c99' instead of gnulib module 'stdbool'." # endif # endif # endif # if !true # define true (!false) # endif #endif #if (!defined HAVE_C_STATIC_ASSERT && !defined assert \ && (!defined __cplusplus \ || (__cpp_static_assert < 201411 \ && __GNUG__ < 6 && __clang_major__ < 6))) #include <assert.h> #undef/**/assert #ifdef __sgi #undef/**/__ASSERT_H__ #endif /* Solaris 11.4 <assert.h> defines static_assert as a macro with 2 arguments. We need it also to be invocable with a single argument. */ #if defined __sun && (__STDC_VERSION__ - 0 >= 201112L) && !defined __cplusplus #undef/**/static_assert #define static_assert _Static_assert #endif #endif ������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/AUTHORS�������������������������������������������������������������������������������0000644�0001750�0001750�00000004664�14557514005�010050� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GNU Astronomy Utilities (Gnuastro) authors ========================================== Generated for Gnuastro 0.22. Ordered by number of commits in the Git project history. 1327 Mohammad Akhlaghi <mohammad@akhlaghi.org> 865 Mohammad Akhlaghi <akhlaghi@gnu.org> 142 Raul Infante-Sainz <infantesainz@gmail.com> 83 Sepideh Eskandarlou <sepideh.eskandarlou@gmail.com> 72 Pedram Ashofteh Ardakani <pedramardakani@pm.me> 29 Mosè Giordano <mose@gnu.org> 24 Faezeh Bidjarchian <fbidjarchian@gmail.com> 23 Mohammad Akhlaghi <makhlaghi@gmail.com> 20 Vladimir Markelov <vmatroskin@gmail.com> 18 Elham Saremi <saremi_elham@yahoo.com> 18 Sachin Kumar Singh <sachinkumarsingh092@gmail.com> 13 Zahra Sharbaf <zahra.sharbaf2@gmail.com> 8 Natáli D. Anzanello <natali.anzanello@ufrgs.br> 6 Boud Roukema <boud@cosmo.torun.pl> 5 Jash Shah <jash28582@gmail.com> 3 Marjan Akbari <mrjakbari@gmail.com> 3 Pedram Ashofteh-Ardakani <pedramardakani@pm.me> 3 Thorsten Alteholz <thorsten@alteholz.dev> 3 Thérèse Godefroy <godef.th@free.fr> 3 boud <boud@cosmo.torun.pl> 2 Carlos Morales Socorro <cmorsoc@gmail.com> 2 Faezeh Bijarchian <fbidjarchian@gmail.com> 2 Fathma Mehnoor <fathmamehnoor@gmail.com> 2 Joseph Putko <josephputko@gmail.com> 2 Samane Raji <samaneraji@gmail.com> 2 Samane Raji <samaneraji@protonmail.com> 1 Alexey Dokuchaev <danfe@freebsd.org> 1 Andreas Stieger <astieger@suse.com> 1 Bharat Bhandari <bharatbhandari1024@gmail.com> 1 Carlos Morales-Socorro <cmorsoc@gmail.com> 1 Elham <saremi_elham@yahoo.com> 1 Faezeh Bidjarchian <fbidjarchian@gamil.com> 1 François Ochsenbein <francois.ochsenbein@gmail.com> 1 Giulia Golini <giulia.golini@gmail.com> 1 Kartik Ohri <kartikohri13@gmail.com> 1 Labeeb Asari <asari.r.labeeb7@gmail.com> 1 Leindert Boogaard <leindertboogaard@gmail.com> 1 Lucas <macquarrielucas@gmail.com> 1 Madhav Bansal <madhavbansal.cse18@itbhu.ac.in> 1 Miguel de Val-Borro <miguel.deval@gmail.com> 1 Nafise Sedighi <sedighinafise94@gmail.com> 1 Rashid Yaaqib <r.yaaqib@gmail.com> 1 S. Zahra Hosseini Shahisavandi <2hs.zahra@gmail.com> 1 Zahra Hosseini Shahisavandi <2hs.zahra@gmail.com> 1 Zohreh Ghaffari <zoh.ghaffari@gmail.com> 1 Zohreh-Ghaffari <zoh.ghaffari@gmail.com> 1 Zohreh_2021 <zoh.ghaffari@gmail.com> 1 saremi_elham <saremi.elham@yahoo.com> ����������������������������������������������������������������������������gnuastro-0.22/COPYING�������������������������������������������������������������������������������0000644�0001750�0001750�00000104513�14356055355�010032� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/ChangeLog�����������������������������������������������������������������������������0000644�0001750�0001750�00000121546�14551337306�010552� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2016-05-27 Mohammad Akhlaghi <akhlaghi@gnu.org> Following the discussions in task #13779, the ChangeLog has not been updated since 2015-11-05 (previous log). Instead, the commit messages are very descriptive. Git's blame tool can be used to check the history of any part of the code very effectively. Gnulib has scripts to generate a ChangeLog from the commit history so building this file automatically is possible and will be implemented (task #14007). Once this ChangeLog is automatically generated, it will be removed from the version controlled source. Until then this file will remain unchanged. There is also a discussion for adopting the ChangeLog format in the commit messages in task #14008. * ChangeLog: no longer updated. 2015-11-05 Mohammad Akhlaghi <akhlaghi@gnu.org> * doc/gnuastro.texi (Why C): Clarified explanations. 2015-11-04 Mosè Giordano <mose@gnu.org> * .gitignore: Add new regexps to the list of ignored files. * doc/gnuastro.texi (Arguments): Mention new accepted extension. * lib/fitsarrayvv.c (nameisfits): Add "fits.fz" to the list of accepted extensions. Fixes task#13767. (nameisfitssuffix): Ditto. 2015-10-18 Mosè Giordano <mose@gnu.org> * bin/imgcrop/imgcrop.c (imgcrop): Do not use modefunction to set the function, run the functions manually instead. Fixes bug#45380. 2015-10-16 Mosè Giordano <mose@gnu.org> * ./*: Change in many files the name of the package from "gnuastro" to "Gnuastro". Fixes bug#46212. * doc/forwebpage.sh: Use canonical path for bash shell. * doc/plotbin/conversions.sh: Ditto. 2015-10-02 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/noisechisel/noisechisel.c (makeoutput): Added a "raw" term in the comments of the noise statistics so emphasize that this is from the raw mesh grid and not the interpolated and smoothed grid. * bin/mkcatalog/mkcatalog.c (makeoutput): As explained below. * doc/gnuastro.texi (Depth and limiting magnitude): Changed the sigma which representes depth from the maximum to the median. The maximum has a strong scatter and even one mesh can completely push to unreasonable values. But the median is not affected by such minor mesh variations, so it is a more robust measure of the dispersion. 2015-10-01 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/imgcrop/ui.c (checkifset): Removed the hstartwcs and hendwcs options as mandatory arguments. * lib/fitsarrayvv.c (readfitswcs): Now applies the hstartwcs and hendwcs options. * include/fitsarrayvv.h: readfitswcs now takes the hstartwcs and hendwcs values as arguments. This was done so all programs could take in these options. 2015-09-23 Mohammad Akhlaghi <akhlaghi@gnu.org> * doc/gnuastro.texi (Depth and limiting magnitude): Updated explanations in for the depth and limiting magnitude to be more realistic. * bin/mkcatalog/mkcatalog.c (makeoutput): Removed the limiting magnitude calculation that was previously defined since it's physical meaning is very unclear (it was mainly put as a test). Also changed the surface brightness limit to a per-pixel basis (independent of the projected area of the pixel) as explained in the manual. 2015-09-17 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mkprof/mkprof.c (mkprof): Only print a log file if the '--nolog' option is not called. * bin/imgcrop/imgcrop.c (imgcrop): Only print a log file if the '--nolog' option is not called. * bin/mkprof/main.h (mkprofparams): Removed the p->dir0file1 parameter from the main structure. * tests/mkprof/mosaic1.sh: Corrected the name of the first output for the new individual name configuration (where the output file name is suffixed to the row number). * bin/mkprof/ui.c (sanitycheck): Now everything based on the situation the basic information for the next steps is set here. * bin/mkprof/mkprof.c (saveindividual): Removed the name checking here. All the necessary information is now set in ui.c. 2015-09-13 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/imgwarp/imgwarp.c (imgwarponthread): Now calculates the fraction of area that is blank (NaN) and if that fraction is larger than a user defined value, then the output pixel will be blank. Before the blank fraction was ignored. * bin/imgstat/imgstat.c (reportsimplestats): Now uses the value to the '--mirrordist' option instead of the fixed value of 1.5. (reportsimplestats): Report the 'NOT ACCURATE' warning in a separate line to make reading by AWK easier, also removed comma between outputs for the same reason. * bin/*/ui.c (readconfig): Now uses macros for common options. (printvalues): Similarly uses macros for common options. * lib/statistics.c (sigmaclip_converge): Removed commas between the outputs to make reading by AWK easier. (sigmaclip_certainnum): Similar to above. * include/fixedstringmacros.h (GNUASTROBIBTEX): New name from ASTRUTILSBIBTEX. Also the content was updated to the full ADS BibTeX output after the paper was published. * include/configfiles.h (CHECKSETCONFIG): Now checks for the version of the program and also has a more cleaner/readable path for reading/writing to the user configuration directory and reading from the system configuration directory. 2015-08-16 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/noisechisel/thresh.c (snthresh): The check on the number of objects in finding the S/N threshold is now done before sorting the S/N table. * bin/convolve/convolve.c (removepaddingcorrectroundoff): When the maximum radius is smaller than the input images, then the final kernel will be shrinked to have no only-zero column or row. 2015-08-05 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/convolve/convolve.c (frequencyconvolve): Divide the arrays when the kernel should be made, multiply them when convolution is to be done. (frequencyconvolve): When in deconvolution mode, it will go to another function to make the final product. 2015-07-31 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/convolve/convolve.c (makepaddedcomplex): Added a check to make the padded image size an even number in both dimensions by adding one pixel if it is odd. This was done because FFT operations work much faster on even sized arrays. 2015-07-22 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/noisechisel/thresh.c (snthresh): Had mistakenly used 'p->detquant', for both detection and segmentation! This is now corrected. * bin/mkcatalog/mkcatalog.c (secondpass): Sets the river flux to Sky for when the grown clumps are used, see the explanation bellow. * bin/mkcatalog/columns.c (brightnessmag): Corrected the definition of brightness. It was incorrectly dividing the total brightness by the area when the user asked for brightness. (sncol): Can now work accurately when grown clumps are also included. In a grown clump image, full detections that aren't harmed by deblending are are fully labeled. So there is no river pixels there and the S/N equations had to incorporate this. 2015-07-18 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/noisechisel/segmentation.c (nextavailablelabel): Now accounts for the '--grownclumps' option. * bin/noisechisel/args.h (options): Corrected the type of output for '--gthresh'. I had forgot to include any for it! 2015-07-17 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/fitsarrayvv.c (pixelareaarcsec2): Previously called pixelsteradians. Changed the units to arcsec^2 because it is more useful. * bin/noisechisel/detection.c (detlabelsn): Now using a new sum of pixel values for flux weighted center of profile. The values are stored as one column in the 2015-07-07 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mkcatalog/mkcatalog.c (firstpass): Use only positive (after subtracting sky) fluxes as weights for the flux weighted center. Also calculate the geometric center (irrespective of flux), so in case there are no positive pixels, the geometric center is output instead (after all, the object should be represented by some position and the NaN values that were used before are not useful). (secondpass): Similar to the above. Also I had simply replaced the getclumpinfo method of NoiseChisel's clumps.c here. But I had forgot that over there, all the neighboring clumps were within one detection. But here, two clumps could be one river pixel appart but belong to separate objects. So the wngb array has to have two values for each clump, not one, see the comments for more. Also I had to check the object IDs from the neighbors, not the river pixel. (setcpscorr): Removed. The minimum and maximum Standard deviations are now stored by NoiseChisel into the header of the standard deviation image. MakeProfiles then gets the value from those header parameters, so there was no need for this function. (makeoutput): The magnitude and S/N information is printed even if the user has not asked for magnitudes and S/Ns. * bin/mkcatalog/columns.c (sncol): Renamed variables to fit the clumpsntable function in bin/noisechisel/clumps.c. Also, the river flux is subtracted here, not before. * lib/fitsarrayvv.c: The numblank variable did not actually store the 'number' of blank pixels, it was only a 0 or 1 value to specify if there are any blank pixels or not. It is now changed to 'anyblank' to be more clear and not confuse the readers. All the Gnuastro programs that used this variable, were also corrected. 2015-07-06 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/noisechisel/noisechisel.c (noisechisel): After dilation, 4 connectivity was used to find the labels of the connected components. However, when we are looking around the river pixels in the segmentation process, we are looking in their 8-connected neighbors. So when two 4-connected labeled regions are separate, they can still be 8-connected and this will mess up the river flux association functions where the flux of a river is given to the clump that is touching it. It took me several frustrating hours to find this very simple bug! * bin/noisechisel/clumps.c (oversegment): NaN (masked) pixels are no longer fed into this function. So the conditions to check for them, especially in setting the top index are removed. (getclumpinfo): Now uses a different number for the sum of flux when trying to find the flux weighted center of the clump. This sum is made of only positive values. Negative values cannot act as weights and will mess up the center calculations. The new number for each column is stored in a third column to the xys array. Also, the xys array is no longer needed outside this function. 2015-07-05 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mkcatalog/columns.c (brightnessfluxmag): Previously fluxmag. Now this function gives the brightness, flux and magnitude depending on its input parameters. * bin/mkcatalog/args.h (options): Corrected all usage of "flux" and "brightness". * doc/gnuastro.texi: Corrected all usage of "flux" and "brightness". * doc/forwebpage.sh (thismonth): Removed type=\"text/javascript\"" from the string since it seemed to be interfering with LibreJS. 2015-07-03 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/fitsarrayvv.c (readkeywords): Now reads multiple keywords. 2015-07-02 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mkcatalog/mkcatalog.c (firstpass): Now accounts for blank labeled pixels. (setcpscorr): Now finds both the minimum and maximum of the STD, maximum for finding the 5sigma magnitude. * bin/mkcatalog/main.h (CATUNITMAG): Changed unit for magnitudes. 2015-06-26 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/noisechisel/thresh.c (qthreshonmesh): Only sort and find the quantile if there actually is any pixels! (applydetectionthresholdskysub): Now accounts for blank pixels. * bin/noisechisel/segmentation.c (segmentation): Now only works on non-blank pixels. * bin/noisechisel/label.c (BF_concmp): Now accounts for blank pixels in both unsigned char and long arrays. (labareas): Accounts for blank pixels. (removesmallarea_relabel): Accounts for blank pixels. (labindexs): Accounts for blank pixels. * bin/noisechisel/detection.c (detlabelsn): Now also removes detections in the sky area that cover a detection after filling holes. (removefalsedetections): Changed to applydetsn. (detsnthreshonmesh): Changed to detectpsedos. Practically this function just fills the holes in each large mesh and opens the binary result then puts the field back into the main p->dbyt array. It does not calculate anything any more. Such calculations have now become full image wide to find one S/N value over the full image. (detsnthreshongrid): Changed to detsnthresh. This function now does the image-wide calculations that were previously done by detsnthreshonmesh. (dbytolaboverlap): Now accounts for masked unsigned char and long arrays. * bin/noisechisel/clumps.c (clumpsntableonmesh): Previously clumpsnthreshonmesh. Moved all the countings and conditionals to another function to find the S/N threshold from one distribution over the image and not in the large meshs. (findclumpsn): Previously clumpsngrid. Now it collects all the S/N values from all the meshs into one array and uses that to find the S/N threshold using a fixed function for both detection and segmentation (snthresh in thresh.c). * bin/noisechisel/binary.c: The fixed value of 2 is changed BINARYNAN which is defined in binary.h. This makes managing the special values to use more easy, especially now that FITSBYTEBLANK is also being used from fitsarrayvv.h. (fh_makeinv): Replaced the old functions to fill the inverse array with new ones that don't use an index variable but pointers. It is much more cleaner, faster and easier to read now. It also now accounts for blank pixels and completely ignores them. (fillboundedholes): Similar to fh_makeinv. * bin/noisechisel/: The mesh based signal to noise calculations are now gone and one value is calculated for the full image. This allows for much better accuracy. Most of the steps in NoiseChisel were modified to take this into account. Also blank pixels are now included in the binary and labeled images too. * lib/fitsarrayvv.c (arraytofitsimg): Moved the BLANK keyword before EXTNAME. 2015-06-25 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/imgcrop/args.h (options): Changed inpolygon to outpolygon. Everywhere that inpolygon appeared, it is now outpolygon. * bin/imgcrop/wcsmode.c (wcscheckprepare): Check for both axises having the same pixel scale now incorporates floating point errors. * bin/imgcrop/crop.c (imgpolygonflpixel): Now gets the vertices and their number instead of the cropparams structure. This was done to make it be more general and use it in both Image mode and WCS mode. (onecrop): Allocation of the crp->ipolygon array was moved to the cropflpixel function. 2015-06-13 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/fitsarrayvv.c (fileorextname): New name for the setmaskname function. This was done to be a generic check, for all kinds of input, not just the mask. * bin/ : All the functions to make a copy of an input and print string values were changed. These were mainly in ui.c and args.h for each program. Until now, for each option, I would allocate, check and set the proper values, but now, I wrote a small function in checkset.c (allocatecopyset) which does the job. This makes reading the code significantly more easy and less bugy. 2015-06-12 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/subtractsky/args.h (options): Removed the --checkinterpolation option. * bin/subtractsky/subtractsky.c (subtractsky): Similar to below. * bin/noisechisel/thresh.c (findapplyqthreshold): Similar to below. * bin/noisechisel/sky.c (findavestdongrid): Similar to below. * bin/noisechisel/detection.c (findsnthreshongrid): Now using meshvaluefile from mesh.h instead of checking its self. Once the --meshbasedcheck was added, doing all the checks in each function was too long and repetative. So I just made this function to do the job with one call and not distract the readers. 2015-06-11 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/noisechisel/args.h (options): 'minbfrac' and 'minnumfalse' options moved under the 'Input' category from the detections category. This move was because these two options are used by both the detection and segmentation steps and thus keeping them under detection would be confusing. Also 'checkthresh' was changed to 'checkthreshold'. Also, the option 'numerosion' was changed to 'erode' to be consistent with the opening and dilate options. 2015-06-10 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mknoise/astmknoise.conf: Default background magnitude changed to -10 and zeropoint to 0.0. 2015-06-09 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/noisechisel/clumps.c: All functions now use the clumpsthreadparams structure as input instead of a list of arguments. (oversegment): ctp->topinds now keeps a good value when the clump has NaN pixels over it. * lib/mesh.c (imgindextomeshid): Corrected to work correctly when the pixel might be lying on the last mesh that might be larger. 2015-06-08 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/noisechisel/thresh.c (applydetectionthresholdskysub): Similar to below, uses p->imgss for sky subtracted image. * bin/noisechisel/sky.c (subtractskyimg): Does not touch the input image, puts the sky subtracted value in p->imgss. * bin/noisechisel/noisechisel.c (noisechisel): Removed the allocation of the mesh structures to ui.c * bin/noisechisel/detection.c (detlabelsn): Uses p->imgss for the sky subtracted image. 2015-06-07 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mkprof/oneprofile.c (randompoints): The random number generator is now allocated (cloned) with the build thread and for every profile the seed is independently set once. Before each pixel would allocate and seed the random number generator individually! * bin/mkprof/astmkprof.conf: Changed default zeropoint magnitude to 0.00. * bin/mknoise/mknoise.c (mknoise): moved the random number generator to ui.c to make things faster and more easier to understand. * bin/mknoise/args.h (argp_option): Removed the 'backgroundinmean' option, because I couldn't figure out what use it would have. If it is needed we can add it again later! * bin/imgstat/args.h (argp_option): Changed 'binonzero' option to the more general 'onebinvalue' option. * bin/convolve/convolve.c (removepaddingcorrectroundoff): Corrected bug: would return *d in both cases! It is corrected now. 2015-06-06 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/mesh.c (chbasedidfromgid): Chaged the old setmeshid to chbasedidfromgid along with a new function (gidfromchbasedid). The explanations on top of the first clearly explain everything extensively. The old function (my understanding) was not yet mature enough but now it seems to be very nicely working. All the functions that used this were also changed. * bin/noisechisel/astnoisechisel.conf: Changed default lastmeshfrac to 0.51 from 0.6. 2015-06-04 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/subtractsky/subtractsky.c (avestdonthread): No more need for setnan. Since all the meshes are initialized to NaN anyway. * lib/mesh.c: Previously, the garrays would be allocated and freed on every set of operations that were done on the mesh grid. I made some modifications so there is no more need to allocate and free them every time. A new prameter was added (ngarrays) so that on each use of the garrays, the number of garrays that are needed are kept here. All checks to work on the second garray are now done through this parameter. In this fashion, when multiple operations are to done on each mesh, there is no need to repeatedly free and allocate the garrays. Nearly all the functions in mesh.c were corrected to account for this. 2015-06-03 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/noisechisel/astnoisechisel.conf: Changed default dthresh to -0.1. * lib/statistics.c (histogram): Corrected the function. Until now, there was a problem when an element was on the last bin: it would go onto the next bin and thus would not be counted. This issue is now corrected. (cumulativefp): Same as above. 2015-06-02 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/mesh.c (operateonmesh): mp->indexs is now allocated in makemesh. Because all the programs that will need threads on meshs will need it, so it is best to set mp->indexs once and for all in makemesh. (meshinterponthread): Removed the naninds array, a new option was added to interpolate only on blank pixels when needed. (preparemeshinterparrays): Similar to the above. 2015-06-01 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/statistics.c: Removed all isnan checks in the comparison functions for the minimum and maximum values. NaN values will automatically fail all comparisons. * lib/timing.c (reporttiming): Removed the 'in' from reporting seconds. * include/timing.h (VERBMSGLENGTH_V): Changed to 45 from 40. 2015-05-27 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/convolve/args.h (options): Remove the 'noedgecorrection' option. Since it was useless. Also changed the old short option for spatial ('s') to 'p'. Because 's' is now needed for the mesh size option. Also changed the old short option for khdu ('H') to 'U', to make it similar to all the other programs that do convolution. * include/mesh.h (meshparams): the garrays are now only pointers. The allocated arrays are either cgarrays or fgarrays and based on the user's will, garray will be set equal to one of these two options. All the functions in mesh.c were changed to accomodate this change. 2015-05-25 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/mesh.c (operateonmesh): New name for 'fillmesh'. Now the function that will be spinned off from each thread can be specified from the outside. 2015-05-24 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/imgcrop/crop.c (sectionparser): When only a '*' was given with no positive or negative following number, a segmentation fault would happen. This bug is now fixed. * lib/spatialconvolve.c (sconvonthread): No convolution will be attempted for a NaN pixel. 2015-05-23 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/mode.c (modesymmetricity): Corrrected topi to account for the case when 2*mi is larger than size. * bin/subtractsky/args.h: --numnearest and --kernelwidth moved to the 'Mesh grid' part of the help output. --checksmoothing and --checkinterpolation also moved to the 'Mesh grid' part. * lib/mesh.c (checkgarray): Modified to show both the full, or contiguous over full image, garray and the default one which is contiguous only over each channel. 2015-05-20 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/mode.c (modesymmetricity): Corrected topi to the end of the mirror distribution. (modesymmetricity): If no diff point is found, the end of the mirror distribution is used. Before it was the end of the data! (valuefromsym): af set to the quantile of the mirror distribution. 2015-05-18 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/convolve/convolve.c (complextoreal): Changed the two states to three to add only conerting the real part of an array. 2015-05-15 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/convolve/convolve.c (removepaddingcorrectroundoff): The limit to check for floating point errors is now set by a macro and changed to 1e-10 instead of 1e-17. * lib/statistics.c (sigmaclip_converge): Now, there is a limit on the number of times to try for convergence. * lib/mode.c (makemirrorplots): All the output paramters are now given as arguments so the output can be fully configured from the outside. Also, the method that it sets the plot ranges is now better configurable. * include/mode.h (MODESYMGOOD): Changed to 0.2 from 0.15 based on new simulation tests. 2015-05-11 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/statistics.c (setbins): Changed method to find the bin that has the value zero within it. Before it would just choose the first bin with a positive value. But now, it will check the signs of the two interval sides of the bin and when ever the multiplication becomes negative, that bin is chosen. (histogram): Changed so the last bin is a closed bin, not half open like the rest of the histogram bins. This also includes floating point rounding error. (cumulativefp): Same as the histogram function. (sigmaclip_certainnum): Printing is now an option. (sigmaclip_converge): Printing is now an option. * lib/mode.c (makemirrorplots): New name for the old savemodeplots. * include/mode.h: Changed input arguments to modeindexinsorted. Plots can now be made through the separate makemirrorpolots function. 2015-05-05 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/subtractsky/ui.c (preparearrays): Moved the function that reads any input as float and incorporates the mask into it. * include/fixedstringmacros.h (MOREHELPINFO): Removed long explanation about help-gnuastro. Instead an info link to the part of the manual that introduces it was included. 2015-05-03 Mohammad Akhlaghi <akhlaghi@gnu.org> * include/fixedstringmacros.h (MOREHELPINFO): Corrected to include help-gnuastro mailing list. * doc/style.css (a:hover): Changed to bright orange color. (a:active): Changed to dark orange. 2015-04-24 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mkprof/oneprofile.c (makepixbypix): When in circumference mode, if the truncation radius is reached, it is filled with the profile value. This is done so very elongated profiles can at least show a one pixel circumference. * bin/mkprof/main.h (MINCIRCUMWIDTH): Changed to 0.5f. * lib/checkset.c (doublelvalue): Corrected bad value report when options are called. 2015-04-21 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mkprof/ui.c (freeandreport): Avoided double-free by only freeing mergeedimgname when it is not equal to output. * bin/mkprof/oneprofile.c (makepixbypix): Will only do monte carlo integration when the profile is not a constant value. (setprofparams): Changed the function of point to 'Fixed'. * bin/mkprof/mkprof.c (write): Changed to replace and read from an image and add profiles on that. * lib/statistics.c: All float and double functions can now work with NaN too. * bin/mkprof/ui.c (setparams): Catalog is always given, no need to check. * doc/gnuastro.texi: Removed all "Future updates ..." subsections in the manual. They are now managed in the Gnuastro project webpage on Savannah. 2015-04-13 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/fitsarrayvv.c (updatekeys): When no value is given, it will use fits_update_key_null. (readwcs): Uses fits_free_memory instead of clib's free. 2015-04-06 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mkprof/mkprof.c: Corrected condition when a thread would finish 'build' profiles but the last set of its profiles wouldn't pass onto 'write'. * bin/mknoise/: Changed background flux unit to magnitudes, not flux. * THANKS: Added institutions which also helped. 2015-04-03 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/fitsarrayvv.c: Changed all occurences of 'nul' or 'NUL' to 'blank' or 'BLANK'. The FITS standard defines a BLANK keyword for integer types. (copyrightandend): Will now right extra headers. (arraytofitsimg): Can now accept header to write to output. * include/fitsarrayvv.h: Changed all 'NUL' macros to 'BLANK'. 2015-04-02 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/fitsarrayvv.c (changetype): Round floating point input types for integer output types. (arraytofitsimg): Added numblank as a variable, to deal with blank pixels. * bin/imgwarp/imgwarp.c (imgwarppreparations): Coorected the point (1.0f, 1.0f) to be center of the first pixel, not zero. * lib/fitsarrayvv.c (copyrightandend): Removed the Copyright notice of Gnuastro from the output image header. Since it might be confused with a copyright on the data its self. 2015-04-01 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/imgwarp/args.h: Temporarily removed the wrap option. Will be added later. 2015-03-24 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/imgcrop/ui.c (preparearrays): Aborts if in WCS mode and the wcsprm structure could not be started. * bin/imgcrop/crop.c (firstcropmakearray): Only adds WCS headers if the wcsprm structure is defined. * lib/fitsarrayvv.c (readwcs): If any error occurs, a warning message will be printed and the returned pointer will be NULL. 2015-03-17 Mohammad Akhlaghi <akhlaghi@gnu.org> * tests/convertt/: If libjpeg is not present, the tests will be skipped. * bin/convertt/: libjpeg is now optional. * configure.ac: Changed libjpeg to an optional requirement. So if it is not available, Gnuastro can still be built. 2015-03-16 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/convolve/ui.c (preparearrays): The flip parts was missing a -1. * doc/gnuastro.texi: Changed all 'gnuastro' occurrences in the text to 'Gnuastro'. 2015-03-14 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/convolve/convolve.c: Added frequency domain convolution. 2015-03-12 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mkprof/ui.c (setparams): Added condition for no output given. * bin/mkprof/astmkprof.conf: Removed output. * bin/imgcrop/ui.c (sanitycheck): Moved check of reentrancy in cfitsio to the end so if numthreads is set to 1, there is no problem. * bin/convertt/ui.c (sanitycheck): Added check if output is not set. * bin/convertt/astconvertt.conf: Removed output. * lib/spatialconvolve.c: First version complete. * configure.ac: Removed sqrt and pthread tests (they are done by Gnulib). Added the AX_PTHREAD macro from Autoconf archives. 2015-03-11 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/convolve/: Adding new functions and steps. * ./: Copyright transferred to the FSF. Copyright notices in all files changed. 2015-03-10 Mohammad Akhlaghi <akhlaghi@gnu.org> * tests/imgcrop/*.sh: Set --numthreads=1 for all the tests so if CFITSIO is not installed with reentrancy, there is no failures. * tests/Makefile.am: Made the fitstopdf result conditional on if GPL GhostScript is installed. * include/astrthreads.c: Removed the old function and structure for replacing the pthread_barrier type and functions that was copy and pasted from another webpage and replaced it with my own implementation. * configure.ac: bug report email set. pthread_barrier checked. GPL GhostScript checked. 2015-03-09 Mohammad Akhlaghi <akhlaghi@gnu.org> * include/astrthreads.h: Added a temporary function so the pthread_barrier type and functions can be run on systems that don't support it. I have contacted the author and it will only remain if he clarifies the license. I have also asked the Gnulib people to try to include it so this issue can be completely fixed. * configure.ac: Added checks for nproc and gs along with warnings. 2015-03-02 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/convolve/: Work started on Convolve. * lib/fitsarrayvv.c: Changed array types from intXX_t to short, long and LONGLONG. Unfortuantely this is how CFITSIO works. 2015-02-22 Mohammad Akhlaghi <akhlaghi@gnu.org> * doc/gnuastro.texi: Added index, changed "Science and its software". 2015-02-20 Mohammad Akhlaghi <akhlaghi@gnu.org> * doc/gnuastro.texi: Removed list of programs at first, added a programs index. Added an examples chapter along with some one line examples of each program. Moved the Why C and design philosophy subsections to the Developing chapters. * src: All 'error' functions are now called with a string literal and not a string variable. Also all 'system' function calls now check the return value. * lib: Similar to above. * include: similar to above. 2015-02-18 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/Makefile.am: Changed all static libraries to libtool static libraries. * doc/gnuastro.texi: Updated. * configure.ac: Added Libtool checks. Corrected cfitsio and wcslib dependencies and removed FFTW as a dependency. 2015-02-17 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/convertt/eps.c: Functions for binary image added. * lib/fitsarrayvv.c (nameisfits): Check length. * doc/gnuastro.texi (Internal libraries): Removed details of libraries. * README: Details removed. 2015-02-16 Mohammad Akhlaghi <akhlaghi@gnu.org> * lib/statistics.c (dminmax): Works with NAN values too. (fminmax): Similar to dminmax. * doc/gnuastro.texi (ConvertType): Updated. 2015-02-13 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/convertt/args.h (argp_options): 'convert' changed to 'change'. Since the program name is also convert this could cause confusions. * doc/gnuastro.texi (Invoking astconvertt): Option explanations. * bin/convertt/jpeg.c (savejpeg): Corrected the pixel ordering. * bin/convertt/convertt.c (doubleto8bit): Find minimum and maximum for all colors to set the scale, not just one color. * lib/fitsarrayvv.c (arraytofitsimg): Will not remove comments. * include/fixedstringmacros.h (SHORTCOPYRIGHT): Corrected year. * lib/fitsarrayvv.c (nameisfits): Dot no longer included. (nameisfitssuffix): Added. (changetype): Corrected input and output pointers. * doc/gnuastro.texi (ConvertType): Added explanations. (Future updates): Chapter removed. 2015-02-11 Mohammad Akhlaghi <mohammad@akbari> * bin/convertt/ui.c (preparearrays): Added. * bin/convertt/jpeg.c (preparejpeg): Added. * doc/gnuastro.texi (Files): Added chapter (ConvertType): Added section (FileInfo): Added section 2015-02-08 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/convertt: Started working on ConvertType. * lib/checkset.c (intsmallerequalto): Function Added. * include/fixedstringmacros.h (ASTRUTILSBIBTEX): Corrected article name * include/checkset.h: Added intsmallerequalto. 2015-01-25 Mohammad Akhlaghi <akhlaghi@gnu.org> * ./*: In all files, the name 'AstrUtils' was changed to 'gnuastro' and the 'astr' prefix was changed to 'ast'. 2015-01-20 Mohammad Akhlaghi <akhlaghi@gnu.org> * tests/imgcrop/makerandomcat.py: Removed, because now the points are very specific. * tests/imgcrop/*.sh: Corrected the inputs to the outputs of MakeProfiles tests. * tests/Makefile.am (TESTS): Added tests for MakeProfiles. * Makefile.am (EXTRA_DIST): Moved the distribution files for each folder to the Makefile.am in that folder. 2015-01-19 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mkprof/ui.c: Steps for reading and checking WCS parameters added. * bin/mkprof/oneprofile.c (ispsf): Added for a fixed place to check if a profile is a PSF. (makeoneprofile): Finding mkp->xc and mkp->yc moved here. * bin/mkprof/mkprof.c (preparewcs): Added. (build): Removed finding mkp->xc and mkp->yc. * bin/mkprof/args.h (argp_option): Added WCS related options. * bin/imgcrop/imgcrop.c (imgcrop): Number of barriers, corrected for when the number of jobs was less than the number of threads. * lib/fitsarrayvv.c (addwcstoheader): Changed the WCS structure to the WCS header string as input. (arraytofitsimg): Convert the WCS structure and remove the comments CFITSIO in here. (atofcorrectwcs): Added. * doc/astrutils.texi: Updated. 2015-01-18 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mkprof/mkprof.c (writelog): Added. (write): Completed. * bin/mkprof/args.h (arg_option): Added '--nomerged'. * lib/txtarrayvv.c (doformatting): Added option to use 'f' in printf or 'g'. 2015-01-16 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mkprof/mkprof.c (builtqueue_addempty): Added. (saveindividual): Added. (build): Is working until the profile is built. * bin/mkprof/ellipse.h: Function taken to 'box.h'. * bin/mkprof/ellipse.c: Function taken to 'box.c'. * bin/mkprof/args.h (argp_option): added '--numrandom', changed 'mginimg' to 'psfinimg'. * bin/imgcrop/main.h (imgcropparams): iwidth is now a 2 element array. * bin/imgcrop/crop.c: Removed 'borderfromcenter' and 'correctflpixels' to 'lib/box.c'. * lib/stats.h: Changed to 'statistics.h', all non-used functions removed. * lib/arraymanip.c: Removed all non-used functions. * include/stats.h: Changed to 'statistics.h' and all non-used functions removed. * include/fixedstringmacros.h (ASTRUTILSBIBTEX): Added. * include/commonargs.h (argp_option): Added '--cite' option and added the 'main.h' and 'cite.h' header for each program to use their names. * include/checkset.h: function name 'nameiswritable' is changed to dir0file1 which is much more descriptive. * include/arraymanip.h: Removed all the non-used functions from the past. New functions will be added as they are needed. * doc/astrutils.texi: Updated. 2015-01-13 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mkprof/ui.c (preparearrays): Added. (setparams): numthreads initialized to configured value. * bin/mkprof/mkprof.c (build): Added. (write): Added. (mkprof): Parallel jobs configured. * bin/mkprof/ellipse.c: Added * bin/mkprof/args.h (argp_option): Changed psfprofsinimg to mginimg. * bin/imgcrop/imgcrop.c (imgcrop): Used attrbarrierinit. * lib/astrthreads.c (attrbarrierinit): Added. * doc/astrutils.texi: Updated. 2015-01-12 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/imgcrop/imgcrop.c: Using pthread_barrier_wait for synchronizing threads instead of the mutexes and conditional variables before. * lib/txtarrayvv.c: When the value couldn't be read as a number, it would be saved as the lowest possible double value. Now it will be saved as a NaN. * lib/fitsarrayvv.c (nultovalue): Convert blank values in images to a given values. (changetype): Change the type of an image. * lib/checkset.c (nameisawritablefile): Corrected to accurately check if the given name is usable as output. * lib/arraymanip.c (converttofloat): Removed conversion functions. These were mainly for converting a FITS image type to the desired type. Now there is one function in fitsarrayvv.c which will do the conversion. * include/checkset.h (CHECKCOLINCAT): Added to check column number and all values within a column. * doc/astrutils.texi: Updated the text, changing names and explanations. * configure.ac: Changed MockGals, mockgals, name to MakeProfiles, mkprof. * Makefile.am (EXTRA_DIST): Moved the library header files to the Makefile.am in lib/. 2015-01-06 Mohammad Akhlaghi <akhlaghi@gnu.org> * bin/mockgals/args.h (parse_opt): Removed the check below. * bin/imgcrop/args.h (parse_opt): Removed the check below. * include/commonargs.h (cparse_opt): Added check for not calling '--setdirconf' and '--setusrconf' together. 2015-01-05 Mohammad Akhlaghi <akhlaghi@gnu.org> * doc/formath.texi: Added. A set of macros to write equations nicely in TeX, HTML (using MathJax). * bin/imgcrop/astrimgcrop.def: renamed to bin/imgcrop/astrimgcrop.conf. * lib/defaults.c: renamed to include/configfiles.c. * lib/checkset.c (stringhasspace): Function added. * include/fixedstringmacros.h (SHORTCOPYRIGHT): 2015 added. (MOREHELPINFO): Corrected info explanation in help output. * include/defaults.h: renamed to include/configfiles.h * include/commonparams.h (commonparams): Similar to the change in commonargs.h. * include/commonargs.h (argp_option): '--dirdefaults' and '--userdefaults' changed to '--setdirconf' and '--setusrconf'. * doc/astrutils.texi: Included formath.texi to display math equations, updates to the text. * doc/Makefile.am (headers): Used a shell '*' instead of calling each program separately. This was enabled with the new file structure. * configure.ac: Changed all default names to configure for a configuration file, not a default file (only name). * Makefile.am: MockGals conditional compilation added. 2014-12-30 Mohammad Akhlaghi <akhlaghi@gnu.org> * tests/basicchecks.sh: New file (common tests for all tests). * tests/Makefile.am (AM_TESTS_ENVIRONMENT): Corrected test environment. * bin/imgcrop/ui.c (setparams): Moved all similar actions to the CHECKSETDEFAULTS macro in defaults.h * bin/imgcrop/Makefile.am (AM_CPPFLAGS): New (previously in AM_CFLAGS). * lib/defaults.c (addhomedir): Now returns char *. (writelocaldefaultstop): Informs the user of how to make the needed directory with 'make -p'. * include/defaults.h (SAVE_LOCAL_DEFAULTS): changed addhomedir. (CHECKSETDEFAULTS): A new macro to read defaults. (END_OF_NOTSET_REPORT): Added some extra information. * doc/astrutils.texi: A lot of updates in the text! Listing them all would be too much! * configure.ac: '--with-numthreads' and '--enable-progname' were created along with all their necessary checks. * Makefile.am: Set conditional subdirectories. Added 'basicchecks.sh' to the files to be distributed. 2014-12-28 Mohammad Akhlaghi <akhlaghi@gnu.org> GNU Astronomical Utilities created with the ImageCrop as the first package. Other packages will be added in the next few days. ;; Local Variables: ;; coding: utf-8 ;; End: Copyright (C) 2015-2024 Free Software Foundation, Inc. This file is part of GNU Astronomy Utitlies (Gnuastro). Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ����������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/INSTALL�������������������������������������������������������������������������������0000644�0001750�0001750�00000037771�14557510362�010040� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Installation Instructions ************************* Basic Installation ================== The following shell commands: test -f configure || ./bootstrap ./configure make make install should configure, build, and install this package. The first line, which bootstraps, is intended for developers; when building from distribution tarballs it does nothing and can be skipped. The following more-detailed instructions are generic; see the ‘README’ file for instructions specific to this package. Some packages provide this ‘INSTALL’ file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in the GNU Coding Standards. Many packages have scripts meant for developers instead of ordinary builders, as they may use developer tools that are less commonly installed, or they may access the network, which has privacy implications. If the ‘bootstrap’ shell script exists, it attempts to build the ‘configure’ shell script and related files, possibly using developer tools or the network. Because the output of ‘bootstrap’ is system-independent, it is normally run by a package developer so that its output can be put into the distribution tarball and ordinary builders and users need not run ‘bootstrap’. Some packages have commands like ‘./autopull.sh’ and ‘./autogen.sh’ that you can run instead of ‘./bootstrap’, for more fine-grained control over bootstrapping. The ‘configure’ shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a ‘Makefile’ in each directory of the package. It may also create one or more ‘.h’ files containing system-dependent definitions. Finally, it creates a shell script ‘config.status’ that you can run in the future to recreate the current configuration, and a file ‘config.log’ containing output useful for debugging ‘configure’. It can also use an optional file (typically called ‘config.cache’ and enabled with ‘--cache-file=config.cache’ or simply ‘-C’) that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how ‘configure’ could check whether to do them, and mail diffs or instructions to the address given in the ‘README’ so they can be considered for the next release. If you are using the cache, and at some point ‘config.cache’ contains results you don’t want to keep, you may remove or edit it. The ‘autoconf’ program generates ‘configure’ from the file ‘configure.ac’. Normally you should edit ‘configure.ac’ instead of editing ‘configure’ directly. The simplest way to compile this package is: 1. ‘cd’ to the directory containing the package’s source code. 2. If this is a developer checkout and file ‘configure’ does not yet exist, type ‘./bootstrap’ to create it. You may need special developer tools and network access to bootstrap, and the network access may have privacy implications. 3. Type ‘./configure’ to configure the package for your system. This might take a while. While running, ‘configure’ prints messages telling which features it is checking for. 4. Type ‘make’ to compile the package. 5. Optionally, type ‘make check’ to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 6. Type ‘make install’ to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the ‘make install’ phase executed with root privileges. 7. Optionally, type ‘make installcheck’ to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior ‘make install’ required root privileges, verifies that the installation completed correctly. 8. You can remove the program binaries and object files from the source code directory by typing ‘make clean’. To also remove the files that ‘configure’ created (so you can compile the package for a different kind of computer), type ‘make distclean’. There is also a ‘make maintainer-clean’ target, but that is intended mainly for the package’s developers. If you use it, you may have to bootstrap again. 9. If the package follows the GNU Coding Standards, you can type ‘make uninstall’ to remove the installed files. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the ‘configure’ script does not know about. Run ‘./configure --help’ for details on some of the pertinent environment variables. You can give ‘configure’ initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=gcc CFLAGS=-g LIBS=-lposix See “Defining Variables†for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each system in their own directory. To do this, you can use GNU ‘make’. ‘cd’ to the directory where you want the object files and executables to go and run the ‘configure’ script. ‘configure’ automatically checks for the source code in the directory that ‘configure’ is in and in ‘..’. This is known as a “VPATH†build. With a non-GNU ‘make’, it is safer to compile the package for one system at a time in the source code directory. After you have installed the package for one system, use ‘make distclean’ before reconfiguring for another system. Some platforms, notably macOS, support “fat†or “universal†binaries, where a single binary can execute on different architectures. On these platforms you can configure and compile just once, with options specific to that platform. Installation Names ================== By default, ‘make install’ installs the package’s commands under ‘/usr/local/bin’, include files under ‘/usr/local/include’, etc. You can specify an installation prefix other than ‘/usr/local’ by giving ‘configure’ the option ‘--prefix=PREFIX’, where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option ‘--exec-prefix=PREFIX’ to ‘configure’, the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like ‘--bindir=DIR’ to specify different values for particular kinds of files. Run ‘configure --help’ for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of ‘${prefix}’, so that specifying just ‘--prefix’ will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to ‘configure’; however, many packages provide one or both of the following shortcuts of passing variable assignments to the ‘make install’ command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, ‘make install prefix=/alternate/directory’ will choose an alternate location for all directory configuration variables that were expressed in terms of ‘${prefix}’. Any directories that were specified during ‘configure’, but not in terms of ‘${prefix}’, must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the ‘DESTDIR’ variable. For example, ‘make install DESTDIR=/alternate/directory’ will prepend ‘/alternate/directory’ before all installation names. The approach of ‘DESTDIR’ overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of ‘${prefix}’ at ‘configure’ time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving ‘configure’ the option ‘--program-prefix=PREFIX’ or ‘--program-suffix=SUFFIX’. Some packages pay attention to ‘--enable-FEATURE’ and ‘--disable-FEATURE’ options to ‘configure’, where FEATURE indicates an optional part of the package. They may also pay attention to ‘--with-PACKAGE’ and ‘--without-PACKAGE’ options, where PACKAGE is something like ‘gnu-ld’. ‘./configure --help’ should mention the ‘--enable-...’ and ‘--with-...’ options that the package recognizes. Some packages offer the ability to configure how verbose the execution of ‘make’ will be. For these packages, running ‘./configure --enable-silent-rules’ sets the default to minimal output, which can be overridden with ‘make V=1’; while running ‘./configure --disable-silent-rules’ sets the default to verbose, which can be overridden with ‘make V=0’. Specifying a System Type ======================== By default ‘configure’ builds for the current system. To create binaries that can run on a different system type, specify a ‘--host=TYPE’ option along with compiler variables that specify how to generate object code for TYPE. For example, to create binaries intended to run on a 64-bit ARM processor: ./configure --host=aarch64-linux-gnu \ CC=aarch64-linux-gnu-gcc \ CXX=aarch64-linux-gnu-g++ If done on a machine that can execute these binaries (e.g., via ‘qemu-aarch64’, ‘$QEMU_LD_PREFIX’, and Linux’s ‘binfmt_misc’ capability), the build behaves like a native build. Otherwise it is a cross-build: ‘configure’ will make cross-compilation guesses instead of running test programs, and ‘make check’ will not work. A system type can either be a short name like ‘mingw64’, or a canonical name like ‘x86_64-pc-linux-gnu’. Canonical names have the form CPU-COMPANY-SYSTEM where SYSTEM is either OS or KERNEL-OS. To canonicalize and validate a system type, you can run the command ‘config.sub’, which is often squirreled away in a subdirectory like ‘build-aux’. For example: $ build-aux/config.sub arm64-linux aarch64-unknown-linux-gnu $ build-aux/config.sub riscv-lnx Invalid configuration 'riscv-lnx': OS 'lnx' not recognized You can look at the ‘config.sub’ file to see which types are recognized. If the file is absent, this package does not need the system type. If ‘configure’ fails with the diagnostic “cannot guess build typeâ€. ‘config.sub’ did not recognize your system’s type. In this case, first fetch the newest versions of these files from the GNU config package (https://savannah.gnu.org/projects/config). If that fixes things, please report it to the maintainers of the package containing ‘configure’. Otherwise, you can try the configure option ‘--build=TYPE’ where TYPE comes close to your system type; also, please report the problem to <config-patches@gnu.org>. For more details about configuring system types, see the Autoconf documentation. Sharing Defaults ================ If you want to set default values for ‘configure’ scripts to share, you can create a site shell script called ‘config.site’ that gives default values for variables like ‘CC’, ‘cache_file’, and ‘prefix’. ‘configure’ looks for ‘PREFIX/share/config.site’ if it exists, then ‘PREFIX/etc/config.site’ if it exists. Or, you can set the ‘CONFIG_SITE’ environment variable to the location of the site script. A warning: not all ‘configure’ scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to ‘configure’. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the ‘configure’ command line, using ‘VAR=value’. For example: ./configure CC=/usr/local2/bin/gcc causes the specified ‘gcc’ to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for ‘CONFIG_SHELL’ due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash ‘configure’ Invocation ====================== ‘configure’ recognizes the following options to control how it operates. ‘--help’ ‘-h’ Print a summary of all of the options to ‘configure’, and exit. ‘--help=short’ ‘--help=recursive’ Print a summary of the options unique to this package’s ‘configure’, and exit. The ‘short’ variant lists options used only in the top level, while the ‘recursive’ variant lists options also present in any nested packages. ‘--version’ ‘-V’ Print the version of Autoconf used to generate the ‘configure’ script, and exit. ‘--cache-file=FILE’ Enable the cache: use and save the results of the tests in FILE, traditionally ‘config.cache’. FILE defaults to ‘/dev/null’ to disable caching. ‘--config-cache’ ‘-C’ Alias for ‘--cache-file=config.cache’. ‘--srcdir=DIR’ Look for the package’s source code in directory DIR. Usually ‘configure’ can determine that directory automatically. ‘--prefix=DIR’ Use DIR as the installation prefix. See “Installation Names†for more details, including other options available for fine-tuning the installation locations. ‘--host=TYPE’ Build binaries for system TYPE. See “Specifying a System Typeâ€. ‘--enable-FEATURE’ ‘--disable-FEATURE’ Enable or disable the optional FEATURE. See “Optional Featuresâ€. ‘--with-PACKAGE’ ‘--without-PACKAGE’ Use or omit PACKAGE when building. See “Optional Featuresâ€. ‘--quiet’ ‘--silent’ ‘-q’ Do not print messages saying which checks are being made. To suppress all normal output, redirect it to ‘/dev/null’ (any error messages will still be shown). ‘--no-create’ ‘-n’ Run the configure checks, but stop before creating any output files. ‘configure’ also recognizes several environment variables, and accepts some other, less widely useful, options. Run ‘configure --help’ for more details. Copyright notice ================ Copyright © 1994–1996, 1999–2002, 2004–2017, 2020–2024 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. �������gnuastro-0.22/NEWS����������������������������������������������������������������������������������0000644�0001750�0001750�00000735046�14557512133�007504� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GNU Astronomy Utilities NEWS -*- outline -*- Copyright (C) 2015-2024 Free Software Foundation, Inc. See the end of the file for license conditions. * Noteworthy changes in release 0.22 (library 20.0.0) (2024-02-03) ** New publications - https://ui.adsabs.harvard.edu/abs/2023RNAAS...7..269E by Eskandarlou et al. on Gnuastro's zero point measurement script for calibration of astronomical images ('astscript-zeropoint'). - https://ui.adsabs.harvard.edu/abs/2024RNAAS...8...10I by Infante-Sainz & Akhlaghi on Gnuastro's script to visualize the full dynamic range of astronomical images ('astscript-color-faint-gray'). - https://ui.adsabs.harvard.edu/abs/2024RNAAS...8...22I by Infante-Sainz et al. on Gnuastro's script to measure the radial profile of a given source ('astscript-radial-profile'). ** New features *** New program - 'astscript-color-faint-gray': a new installed script to maximize the visualization of the contents within your astronomical images. It does this by showing the brighter parts of the image as color, intermediate regions as black and the noisy/faint regions as gray/white. *** All programs - The following options are now available in all programs to allow customization of which metadata is printed in the 0-th HDU of the FITS output of all Gnuastro programs. Also see the "Changed features" list for an important change in this regard to all Gnuastro output FITS files. --outfitsnoconfig: do not print any metadata in the 0-th HDU (including the used options and their values, the date, the versions and git commit of running directory). --outfitsnodate: do not write the 'DATE' keyword. --outfitsnoversions: do not write the versions of Gnuastro and mandatory dependencies. --outfitsnocommit: do not write the Git commit. *** Arithmetic --arguments: takes the name of plain-text file that contains the list of arguments to the program. This option is critical if you have very long (thousands) of operands and operators (which happen in large pipelines where the arguments are constructed automatically). Without this option, the shell is going to abort with an "Argument list too long" error message. - New operators: - rotate-coord: given a 2D point's coordinates, return the coordinates after it has been rotated by your requested angle around your requested center (see documentation for example). - mad: Median Absolute Deviation (MAD) stacking. - madclip-mad: MAD after MAD-clipping stacking. - madclip-std: Standard deviation after MAD-clipping stacking. - madclip-mean: Mean after MAD-clipping stacking. - madclip-median: Median after MAD-clipping stacking. - madclip-number: Number of elements after MAD-clipping stacking. - madclip-fill-mad: MAD after filled MAD-clipping stacking: this involves a two-phase clipping: after the first clipping, Arithmetic will "fill" the unclipped holes in each input and masks them for a second round. This is critical for clipping more diffuse outliers: where a pixel may not be clipped individually and will produce biased results, but due to proximity with many nearby clipped pixels, it can be discarded and thus its effect on the final stack be removed. - madclip-fill-std: Standard deviation after filled MAD-clipping stacking. - madclip-fill-mean: Mean after filled MAD-clipping stacking. - madclip-fill-median: Median after filled MAD-clipping stacking. - madclip-fill-number: Num. of elements after filled MAD-clipping stacking. - sigclip-fill-mad: MAD after filled MAD-clipping stacking. - sigclip-fill-std: Standard deviation after filled MAD-clipping stacking. - sigclip-fill-mean: Mean after filled MAD-clipping stacking. - sigclip-fill-median: Median after filled MAD-clipping stacking. - sigclip-fill-number: Num. of elements after filled MAD-clipping stacking. - sigclip-mad: MAD after sigma-clipping stacking. - collapse-madclip-mad: Collapse dim. by MAD-clipped MAD. - collapse-madclip-std: Collapse dim. by MAD-clipped STD. - collapse-madclip-mean: Collapse dim. by MAD-clipped mean. - collapse-madclip-median: Collapse dim. by MAD-clipped median. - collapse-madclip-number: Collapse dim. by MAD-clipped number. - collapse-madclip-fill-mad: Collapse dim. by filled MAD-clipped MAD. - collapse-madclip-fill-std: Collapse dim. by filled MAD-clipped STD. - collapse-madclip-fill-mean: Collapse dim. by filled MAD-clipped mean. - collapse-madclip-fill-median: Collapse dim. by filled MAD-clipped median. - collapse-madclip-fill-number: Collapse dim. by filled MAD-clipped num. - collapse-sigclip-mad: Collapse dim. by sigma-clipped MAD. - collapse-sigclip-fill-mad: Collapse dim. by filled sigma-clipped MAD. - collapse-sigclip-fill-std: Collapse dim. by filled sigma-clipped STD. - collapse-sigclip-fill-mean: Collapse dim. by filled sigma-clipped mean. - collapse-sigclip-fill-median: Collapse dim. by filled sigma-clip. median. - collapse-sigclip-fill-number: Collapse dim. by filled sigma-clipped num. *** Fits --arguments: takes the name of plain-text file that contains the list of arguments to the program. Currently this only works with '--keyvalue' and is necessary when you want to get the keywords of a very long list of files (~thousands!). Without this option, the shell is going to abort with an "Argument list too long" error message. --datasum-encoded: new option that will return an ASCII encoded 16-character string for the value of the 'DATASUM' concept in FITS data verification. *** Statistics --checkskynointerp: similar to '--checksky', but stop as soon as the good tiles are found (do not continue to interpolation and smoothing of the tiles which can be time consuming if not needed). --mad: Median Absolute Deviation (MAD) of input dataset. --madclip: MAD-clipping, showing intermediate results. --sigclip-mad: MAD of input after sigma-clipping. --madclip-number: Number of input elements after MAD-clipping. --madclip-median: Median of input elements after MAD-clipping. --madclip-mean: Mean of input elements after MAD-clipping. --madclip-std: Standard deviation of input elements after MAD-clipping. --madclip-mad: MAD of input elements after MAD-clipping. --mclipparams: Parameters of MAD-clipping, similar to sigma-clipping. Note that in a Gaussian distribution, MAD = 0.67 sigma, so if you want something similar to 3-sigma (the default), you should set the MAD multiple to 5 (the default). *** Makefile extension - 'ast-text-to-upper': convert input string to upper-case. - 'ast-text-to-lower': convert input string to lower-case. *** Library **** Functions - gal_dimension_collapse_mclip_mad: MAD-clipped MAD. - gal_dimension_collapse_mclip_fill_mad: filled MAD-clipped MAD. - gal_dimension_collapse_mclip_std: MAD-clipped STD. - gal_dimension_collapse_mclip_fill_std: filled MAD-clipped STD. - gal_dimension_collapse_mclip_mean: MAD-clipped mean. - gal_dimension_collapse_mclip_fill_mean: filled MAD-clipped mean - gal_dimension_collapse_mclip_median: MAD-clipped median. - gal_dimension_collapse_mclip_fill_median: filled MAD-clipped median. - gal_dimension_collapse_mclip_number: MAD-clipped number. - gal_dimension_collapse_mclip_fill_number: filled MAD-clipped number. - gal_dimension_collapse_sclip_mad: sigma-clipped MAD - gal_dimension_collapse_sclip_fill_mad: filled sigma-clipped MAD. - gal_dimension_collapse_sclip_fill_std: filled sigma-clipped STD. - gal_dimension_collapse_sclip_fill_mean: filled sigma-clipped mean - gal_dimension_collapse_sclip_fill_median: filled sigma-clipped median. - gal_dimension_collapse_sclip_fill_number: filled sigma-clipped number. - gal_fits_hdu_datasum_encoded: the 16-character encoded sting datasum. - gal_fits_key_list_add_date: add 'DATE' to current list of keywords. - gal_fits_key_list_add_git_commit: add the Git commit information of the running directory to the input list of keywords (if built with libgit2). - gal_fits_key_list_add_software_versions: add versions of Gnustro and its mandatory dependencies to the input list of keywords. - gal_statistics_clip_mad: MAD clipping of given input. - gal_statistics_mad: return median absolute deviation (MAD). - gal_statistics_median_mad: return median and MAD. - gal_txt_read_to_list: read all the space-separated words of the input plain-text file as a separate node in a linked list of strings. **** Macros - Used by 'gal_arithmetic': - GAL_ARITHMETIC_OP_SIGCLIP_MAD: Sigma-clipped MAD. - GAL_ARITHMETIC_OP_SIGCLIP_MAD: Sigma-clipped STD. - GAL_ARITHMETIC_OP_SIGCLIP_FILL_NUMBER: MAD-clipped num. of arrays. - GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEAN: MAD-clipped mean of arrays. - GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEDIAN: MAD-clipped median of arrays. - GAL_ARITHMETIC_OP_SIGCLIP_FILL_STD: MAD-clipped STD of arrays. - GAL_ARITHMETIC_OP_SIGCLIP_FILL_MAD: MAD-clipped STD of arrays. - GAL_ARITHMETIC_OP_MADCLIP_NUMBER: MAD-clipped number of mult. arrays. - GAL_ARITHMETIC_OP_MADCLIP_MEAN: MAD-clipped mean of multiple arrays. - GAL_ARITHMETIC_OP_MADCLIP_MEDIAN: MAD-clipped median of mult. arrays. - GAL_ARITHMETIC_OP_MADCLIP_STD: MAD-clipped STD of multiple arrays. - GAL_ARITHMETIC_OP_MADCLIP_MAD: MAD-clipped STD of multiple arrays. - GAL_ARITHMETIC_OP_MADCLIP_FILL_NUMBER: MAD-clipped num. of arrays. - GAL_ARITHMETIC_OP_MADCLIP_FILL_MEAN: MAD-clipped mean of arrays. - GAL_ARITHMETIC_OP_MADCLIP_FILL_MEDIAN: MAD-clipped median of arrays. - GAL_ARITHMETIC_OP_MADCLIP_FILL_STD: MAD-clipped STD of arrays. - GAL_ARITHMETIC_OP_MADCLIP_FILL_MAD: MAD-clipped STD of arrays. - Used by 'gal_statistics_clip_sigma' and 'gal_statistics_clip_mad': - GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED: index of final number in output. - GAL_STATISTICS_CLIP_OUTCOL_MEAN: index of clipped mean in output. - GAL_STATISTICS_CLIP_OUTCOL_STD: index of clipped STD in output. - GAL_STATISTICS_CLIP_OUTCOL_MEDIAN: index of clipped median in output. - GAL_STATISTICS_CLIP_OUTCOL_MAD: index of clipped MAD in output. - GAL_STATISTICS_CLIP_OUTCOL_NUMBER_CLIPS: index of clipped number in output. - GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN: bit flag for measuring mean. - GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD: bit flag for measuring STD. - GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MAD: bit flag for measuring MAD. ** Removed features *** Library - gal_fits_key_write_version: redundant with the new 'gal_fits_key_list_add_software_versions'. - gal_fits_key_write_version_in_ptr: as in gal_fits_key_write_version. - gal_fits_key_write_config: redundant since all configuration (options) are stored as generic keys. ** Changed features *** All programs - Date and versions FITS keywords are only written in the 0-th HDU of output FITS files (along with the options names and values), not the HDU(s) containing data. Until now, the data and versions metadata were written in the data HDU. However, ultimately, these are also metadata and are better suited for the 0-th HDU. For example when everything else is identical, you expect an exactly reproducible HDU (to verify with the FITS 'CHECKSUM' for example), but every time you run, 'DATE' will be different! Similarly for the versions of the software or Git commit (they may change, while your dataset doesn't). To disable these in the 0-th HDU also, see the newly added '--outfitsno*' options in the new features. *** Arithmetic - Binary operators (like '+' or 'x') that are given two integers will crash with an error if the input operands have the same width but different signs. Until now, they would just report a warning and print the output. However, in large scripts, users could miss the warning and not be aware of a possibly wrong result. Therefore it is more robust to crash with an error rather than print a warning. This was suggested by Sepideh Eskandarlou and implemented by Faezeh Bidjarchian after a poll on Gnuastro's Matrix chat channel (#gnuastro:openastronomy.org). *** CosmicCalculator - In a non-FLRW model (when the sum of the densities is not 1.0), CosmicCalculator no longer crashes with an error since calculations like the radial comoving distance ('--properdistance') are still valid in a curved cosmology. Instead a warning is printed informing the user that with Gnuastro's current implementation angular diameter based calculations will be wrong. This was implemented by Boud Roukema. --angulardiamdist is the new name for the old '--angulardimdist' option. This was necessary to avoid confusion of 'dim' in the old name with "dimension"; 'diam' makes it clear that this is a "diameter", not 'dimension'. This was suggested by Boud Roukema. *** Crop - The 'ICF*' keywords are now written in the 0-th HDU of Crop's outputs (the extension with no data, only metadata). Therefore, the WCS is now the only metadata in the HDU containing data. *** astscript-psf-stamp - When no name is given to the temporary directory, the default name will contain the center coordinates as a suffix (to avoid being confused with other calls for other centers), and the contents of the temporary directy will have the same filename. Until now, the temporary directory name would be the same for different calls, and the coordinates suffix would be in the temporary file names. This could cause confusions and bugs (for example one call to this script could delete the temporary directory that was being used by a later call). *** Library - gal_cosmology_age: a 'quiet' argument is added to disable warnings. - gal_cosmology_proper_distance: similar 'gal_cosmology_age'. - gal_cosmology_comoving_volume: similar 'gal_cosmology_age'. - gal_cosmology_critical_density: similar 'gal_cosmology_age'. - gal_cosmology_angular_distance: similar 'gal_cosmology_age'. - gal_cosmology_luminosity_distance: similar 'gal_cosmology_age'. - gal_cosmology_distance_modulus: similar 'gal_cosmology_age'. - gal_cosmology_to_absolute_mag: similar 'gal_cosmology_age'. - gal_fits_key_write: to generalize, the "title" argument has been removed (because it is a keyword). It can also create the file if it doesn't exist and can optionally free the list of keywords (until now, it would always free them). - gal_fits_key_write_in_ptr: similar to 'gal_fits_key_write'. - gal_fits_img_write: no more 'program_name'; it is a keyword title; added 'freekeys' argument to optionally free the input keyword list. - gal_fits_img_write_to_type: as in 'gal_fits_img_write'. - gal_fits_img_write_corr_wcs_str: as in 'gal_fits_img_write'. - gal_fits_tab_write: as in 'gal_fits_img_write'. - GAL_STATISTICS_CLIP_MAX_CONVERGE: new name for the old 'GAL_STATISTICS_SIG_CLIP_MAX_CONVERGE'. Since we now also have MAD-clipping. - gal_statistics_clip_sigma: new name for 'gal_statistics_sigma_clip'. - gal_table_write: as in 'gal_fits_img_write'. - gal_tile_full_values_write: as in 'gal_fits_img_write'. - gal_wcs_write: as in 'gal_fits_img_write'. ** Bugs fixed - bug #46225: Programs don't depend on libs in Makefiles; reported by Mosè Giordano and fixed by Thorsten Alteholz. - bug #52295: Cosmology library integrals crash for high z; fixed by Thorsten Alteholz. - bug #52674: Correcting Clang warnings on macOS during compilation; fixed with help of Thorsten Alteholz and Raul Infante-Sainz. - bug #61476: astscript-ds9-region: output created when input file does not exist; reported by Sepideh Eskandarlou, fixed by Thorsten Alteholz. - bug #64825: astscript-fits-view only takes the last HDU provided; reported by Teet Kuumta and fixed by Raul Infante-Sainz. - bug #64852: astscript-zeropoint: crash when input is in 0-th HDU; reported in https://savannah.gnu.org/support/?110952; fixed by Sepideh Eskandarlou. - bug #64915: Segment's SKY_STD output HDU does not have WCS; reported by Sepideh Eskandarlou. - bug #64952: Table error message for incorrect column name was not complete; reported by Sepideh Eskandarlou. - bug #65005: astscript-psf-unit not accounting for --innerhdu; reported by Ignacio Ruiz Cejudo. - bug #65050: Use --libtool option in the TEMPLATE usage; found and fixed by Faezeh Bidjarchian. - bug #65055: Columns of empty FITS tables (with no rows) read in reverse. - bug #65084: Fits program's --skycoverage prints connected numbers for cubes; found with help of Rahna Payyasseri Thanduparackal. - bug #65106: Necessity of --oversample with astscript-radial-profile when a 2D profile is to be created with '--customtable' of MakeProfile; reported by Sepideh Eskandarlou. - bug #65141: MakeCatalog crash when labled image is all blank; reported by Sepideh Eskandarlou. - bug #65149: MakeCatalog '--frac-max*-*' measurements done without '--frac-max'; reported by Helena Domínguez Sánchez. - bug #65194: --quiet does not disable the warning for un-given minmapsize; reported by Boud Roukema. - bug #65195: CosmicCalculator prevents non-flat FLRW models and angular diameter distance only correct in flat models. Found and fixed by Boud Roukema. * Noteworthy changes in release 0.21 (library 19.0.0) (2023-10-20) ** New features *** New program - 'astscript-pointing-simulate': a new installed script that will simplify the process of designing a pointing pattern for your observing strategy. It takes into account the distortion of the camera, runs in parallel and allows customizations (for example to account for vignetting, or large blobs of bad pixels) through hooks at relevant steps. A new tutorial has been added in the Tutorials chapter of the book on how to use this new script. The following research note has also been published for this script: https://ui.adsabs.harvard.edu/abs/2023RNAAS...7..211A *** Book - New tutorial on a low surface brightness optimized design of a pointing pattern using the newly added installed script in Gnuastro for simulating the exposure map of a pointing pattern stack (it is called as 'astscript-pointing-simulate' on the command-line). - Smaller tutorials that were distributed within the documentation of different programs are brought into the "Tutorials" chapter. - New "Standard deviation vs. error" sub-section added under the MakeCatalog section. It uses real examples to clearly show the fundamental difference between the two (which are sometimes confused with each other). This was written with the help of Raul Infante-Sainz. *** Configuration files - To separate the option name and value, you can now also use the '=' character. This allows your custom configuration files to also be loaded into a shell (with 'source') or Make (with 'include'). Until now, only white-space characters were allowed as separators of option names and values. --config-prefix=STR: Given string can be a prefix of options in configuration files. Added with the point above, this allows loading the different configuration files of different instances of the same program without overwriting them. See the example in the book. *** Arithmetic - New operators (see book for a full description): - pool-min: Min-pooling to reduce the size of the input by calculating the minimum of a the pixels within the pooling window (accounting for a stride). See the new "Pooling operators" section of the book for more. The pooling operators were all implemented by Faezeh Bidjarchian. - pool-max: Similar to 'pool-min' but using maximum. - pool-sum: Similar to 'pool-min' but using sum. - pool-mean: Similar to 'pool-min' but using mean. - pool-median: Similar to 'pool-min' but using median. - to-1d: convert the input operand into a 1D array, no matter how many dimensions it has. Suggested by Faezeh Bidjarchian. - trim: remove all fully-blank outer regions of the input dataset. - eq-b1950-to-eq-j2000: Convert input equatorial coordinates (RA and Dec) in the B1950 equinox to equatorial J2000 equinox. - eq-b1950-to-ec-b1950: Same input as above; to ecliptic B1950. - eq-b1950-to-ec-j2000: Same input as above; to ecliptic J2000. - eq-b1950-to-galactic: Same input as above; to Galactic. - eq-b1950-to-supergalactic: Same input as above; to Supergalactic. - eq-j2000-to-eq-b1950: Convert input equatorial coordinates (RA and Dec) in the J2000 equinox to equatorial B1950 equinox. - eq-j2000-to-ec-b1950: Same input as above; to ecliptic B1950. - eq-j2000-to-ec-j2000: Same input as above; to ecliptic J2000. - eq-j2000-to-galactic: Same input as above; to Galactic. - eq-j2000-to-supergalactic: Same input as above; to Supergalactic. - ec-b1950-to-eq-b1950: Convert input ecliptic coordinates in the B1950 equinox to equatorial B1950 equinox. - ec-b1950-to-eq-j2000: Same input as above; to equatorial B1950. - ec-b1950-to-ec-j2000: Same input as above; to ecliptic J2000. - ec-b1950-to-galactic: Same input as above; to Galactic. - ec-b1950-to-supergalactic: Same input as above; to Supergalactic - ec-j2000-to-eq-b1950: Convert input ecliptic coordinates in the J2000 equinox to equatorial B1950 equinox. - ec-j2000-to-eq-j2000: Same input as above; to equatorial J2000. - ec-j2000-to-ec-b1950: Same input as above; to ecliptic B1950. - ec-j2000-to-galactic: Same input as above; to Galactic. - ec-j2000-to-supergalactic: Same input as above; to Supergalactic. - galactic-to-eq-b1950: Convert input Galactic coordinates to equatorial B1950 equinox. - galactic-to-eq-j2000: Same input as above; to equatorial J2000. - galactic-to-ec-b1950: Same input as above; to ecliptic B1950. - galactic-to-ec-j2000: Same input as above; to ecliptic J2000. - galactic-to-supergalactic: Same input as above; to Supergalactic. - supergalactic-to-eq-b1950: Convert input Supergalactic coordinates to equatorial B1950 equinox. - supergalactic-to-eq-j2000: Same input as above; to equatorial J2000. - supergalactic-to-ec-b1950: Same input as above; to ecliptic B1950. - supergalactic-to-ec-j2000: Same input as above; to ecliptic J2000. - supergalactic-to-galactic: Same input as above; to Galactic. *** ConvertType - It is now possible to write TIFF files in the output (until now, Gnuastro could only read TIFF files). This step was written by Fathma Mehnoor. *** Convolve --conv-on-blank: do not ignore blank pixels in the convolution. This will effectively expand the non-blank regions of your dataset into the blank regions and only works in spatial-domain convolution. This was suggested by Raul Infante-Sainz. *** MakeCatalog - New measurements: --river-min: minimum river value around a clump. --river-max: minimum river value around a clump. *** Table --info-num-cols: print the number of the input table's columns and abort. --info-num-rows: print the number of the input table's rows and abort. - '$_all' in column arithmetic: when an arithmetic expression contains this string, it will be repeated independently for all the columns of the input table. - New operators in Table's column arithmetic: - eq-j2000-to-flat: convert the RA and Dec columns in a table to a flat-RA and flat-Dec (accounting for a reference point as well as any type of projection that is available in the FITS WCS standard). This is necessary when you are plotting points in a report or paper cover more than a couple of square degrees on the sky. Without this operator, significant distortions will appear when you plot spherical coordinates (RA,Dec) on a flat plane (your paper's plot). See the documentation for this operator in the book for more. - eq-j2000-from-flat: the inverse of 'eq-j2000-to-flat' (useful when designin dither patterns for example (where you know the final shape/distanced after flatting; and want coordinates on the sphere). *** astscript-zeropoint --mksrc: use a custom Makefile for estimating the zeropoint, not the default installed Makefile. This is primarily intended for debugging or developing this script, not for normal usage. *** Library - gal_blank_not_minmax_coords: returns the minimum/maximum coordinates of non-blank regions of input dataset. - gal_blank_trim: trim all outer blank regions from the input dataset. - gal_polygon_area_sky: area of polygon defined on celestial coordinates. - gal_pool_min: min-pooling function, see 'pool-min' above. - gal_pool_max: max-pooling function, see 'pool-min' above. - gal_pool_sum: sum-pooling function, see 'pool-min' above. - gal_pool_mean: mean-pooling function, see 'pool-min' above. - gal_pool_median: median-pooling function, see 'pool-min' above. - gal_statistics_mad: Calculate the Median Absolute Deviation (MAD). - gal_statistics_median_mad: Calculate the Median and MAD. - gal_statistics_clip_mad: Median Absolute Deviation (MAD) clipping. - gal_tiff_write: write 'gal_data_t' to a TIFF file; written by Fathma Mehnoor. - gal_wcs_projection_name_to_id: convert projection names to IDs. - gal_wcs_projection_name_from_id: convert projection IDs to their name. - gal_wcs_coordsys_convert_points: convert the input set of points from one celestial coordinate system to another. - gal_wcs_coordsys_sys1_ref_in_sys2: return the longitude reference point of the first celestial coordinate system in the second coordinate system's longitude and latitude. ** Removed features *** MakeNoise - MakeNoise (with executable name 'astmknoise') has been removed from Gnuastro. This is because the 'mknoise-*' operators of Arithmetic do the same job, but in a much more customizable, modular and manageable manner; allowing to mix with other operators. The "Noise basics" sub-section of the book has been moved under the Arithmetic program's documentation also. ** Changed features *** Arithmetic - mknoise-sigma-from-mean: new name for the old 'mknoise-poisson' random number distribution. - mknoise-poisson: now produces correct Poisson distribution output, which can be non-symmetric in low background values and is always integers. For a complete description and hands-on example of the differences with 'mknoise-sigma-from-mean' and 'mknoise-sigma', see the description of these three operators in the "Random number generators" operators sub-section of the "Arithmetic operators" section of the Gnuastro book. *** MakeCatalog - The dash in the column names of the following measurement names has been replaced by underscore to conform with the general standard of using underscores between words in column names (reported by Raul Infante-Sainz). Also, in the case of '--sigclip-mean-sb-delta' the column name didn't correspond to the option name. -------------------------------------------------------------- Option Column name Old column name -------------------------------------------------------------- --sigclip-mean SIGCLIP_MEAN SIGCLIP-MEAN --sigclip-median SIGCLIP_MEDIAN SIGCLIP-MEDIAN --sigclip-number SIGCLIP_NUMBER SIGCLIP-NUMBER --sigclip-std SIGCLIP_STD SIGCLIP-STD --sigclip-mean-sb SIGCLIP_MEAN_SB SIGCLIP-MEAN-SB --sigclip-mean-sb-delta SIGCLIP_MEAN_SB_DELTA SIGCLIP-MEAN-SB-ERR -------------------------------------------------------------- - The default extension name for the values image ('--valueshdu') is now 'INPUT-NO-SKY'. Until now, it was simply '1' (without any hint on what what is expected by default). Recall that if the sky is not subtracted from the values image you can use '--sky' for MakeCatalog to subtract it before the measurements. Implemented by Sepideh Eskandarlou. - When the input clump labels do not have the 'NUMLABS' keyword (specifying how many clumps there are in the image, independent of the number of objects), MakeCatalog will no longer re-label the input clumps: the output catalog will have the same clump ids as the labels. Until now, it would generate new labels for the clumps in such cases (along with a new FITS image containing the clumps with the new labels to allow you to match them). The output catalog also had the new label, not the original labels (the old behavior was therefore very inconvenient!). *** Segment - The default name of the first extension of Segment's output is now 'INPUT-NO-SKY', until now, it was 'INPUT'. This was necessary because the first extension of the output is not the exact input file (if a value is given to '--sky' it will be subtracted from the input in the first extension). Implemented by Sepideh Eskandarlou. *** astscript-psf-stamp - After applying the signal-to-noise threshold (if it is requested), any extra pixels that are not connected to the central target are also masked. Such pixels can remain in rivers between bright clumps and would cause problem in the final stack and were not removed until now. Implemented by Sepideh Eskandarlou *** Library - gal_convolve_spatial: new argument to allow convolution over blank elements. - gal_convolve_spatial_correct_ch_edge: new argument to allow convolution over blank elements. - gal_polygon_area_flat: new name for the old 'gal_polygon_area' function. This was necessary because this function assumes flat coordinates and can lead to wrong results when used with a polygon defined by RA,Dec for example. - gal_statistics_clip_sigma: new name for 'gal_statistics_sigma_clip', also, a new argument has been added to measure statistics that were not automatically calculated during the clipping. - gal_wcs_distortion_name_to_id: new name of gal_wcs_distortion_from_string. - gal_wcs_distortion_name_from_id: new name of gal_wcs_distortion_to_string. - gal_wcs_coordsys_name_to_id: new name of gal_wcs_coordsys_from_string. ** Bugs fixed bug #64138: Arithmetic's mknoise-poisson only using first pixel value. Reported by Irene Pintos Castro. bug #64146: SIGCLIP column names contain dashes instead of underlines. Reported by Raul Infante-Sainz. bug #64148: MakeCatalog crash when using the options '--std' and/or 'sigclip-mean-sb-delta' for clumps catalog. Reported by Raul Infante-Sainz. bug #64153: astscript-ds9-region: '--namecol' gives a constant zero in image-mode. Reported by Zahra Sharbaf. bug #64186: Query: core dump when custom name given to '--dataset'. First reported by Zohreh Ghaffari as a problem in 'astscript-select-stars' (sr #110874) and identified as a problem in Query by Sepideh Eskandarlou. bug #64199: info astscript-zeropoint not working. Reported by Zahra Sharbaf. bug #64246: Query's --information gives a crash for Gaia datasets. Reported by Rashid Yaaqib. bug #64250: astscript-fits-view: no message printed when input file did not exist. Reported by Ryan Begley. bug #64274: MakeProfiles crash for points in 3D. Found by Teet Kuumta. bug #64303: Statistics fit --fitestimate crash when covariance matrix has NaN. Reported Sepideh Eskandarlou. bug #64357: Plain text metadata ignored when no name is present. bug #64392: Arithmetic's isnotblank operator producing zeros when no blanks present. bug #64420: Error message of wrongly specified HDU doesn't give the problematic option name; reported by Aaron Watkins. bug #64431: gal_wcs_to_cd does not account for altlin==3. Reported by Colin Orion Chandler. bug #64541: Segment's --keepmaxnearriver has no effect. bug #64544: Arithmetic crashes with tofilefree operator value has a directory. bug #64545: Accounting for CFITSIO silently appending '.gz' when file doesn't exist. Reported by Sepideh Eskandarlou. bug #64610: --copykeys of Fits program finds wrong key when the first characters of the keyword names match. bug #64615: Fits program's '--pixelareaonwcs' only accurate on equator. bug #64635: astscript-psf-stamp's '--snthresh' option produces fully NaN valued image when a saturated star is in the center. Found and fixed by Sepideh Eskandarlou. bug #64643: MakeCatalog not reporting the actual '--upmaskhdu' that was used on standard output. Found by S. Zahra Hosseini Shahisavandi. * Noteworthy changes in release 0.20 (library 18.0.0) (2023-04-29) ** New features *** New program - astscript-zeropoint: this script is used for calibrating the pixel values in one image (finding its "zero point") based on a reference catalog or (any number of) reference image(s). The script allows for checking many apertures in the same command to let you choose the best; and will operate in parallel where necessary. The documentation of this script contains two tutorials on how to optimally use it and interpret its results; please read and run them once before using it. This script was written as a team effort lead by Sepideh Eskandarlou and including (in alphabetical order): Elham Saremi, Giulia Golini, Raul Infante-Sainz, Samane Raji, Zahra Sharbaf, Zohreh Ghaffari. *** Book - New tutorial on detection and spectrum extraction from 3D data has been added in the "Tutorials" chapter. It uses a MUSE cube and demonstrates how to subtract the continuum, run NoiseChisel, Segment and MakeCatalog for obtaining spectra and creating pseudo narrow-band images of emission-lines. - New "Shell tips" sub-section added (under the "Command-line" section of the "Common program behavior" chapter). This sub-section contains useful shell tips and tricks that can be useful when using Gnuastro's programs. *** Arithmetic --writeall: Write all datasets on the stack as separate HDUs in the output; this is useful in debugging incomplete Arithmetic commands. - New operators (also available in Table). - isnotblank: same as 'isblank not', but slightly more efficient. This was suggested by Sepideh Eskandarlou. - swap: swap the top two datasets on the stack of operands. - index: return dataset of same size, with pixel values that are integers starting from 0 and incrementing one by one. This operator doesn't pop the top dataset from the stack, it only adds one (to avoid extra RAM usage in most usage scenarios). - counter: similar to 'index', but integers start with 1. - indexonly: similar to 'index', but pops the top stack dataset. - counteronly: similar to 'counter', but pops the top stack dataset. - constant: replace all elements of input image or column with the given constant value (for example to set all pixels in an image to NaN or zero), or to give identifiers to each source catalog when adding rows from different catalogs, see the documentation for complete examples. - counts-to-nanomaggy: convert counts to Nanomaggy (with fixed zeropoint of 22.5, used as the pixel units of many surveys like SDSS). This was suggested by Giulia Golini. - nanomaggy-to-counts: convert nanomaggy to counts. This was suggested by Giulia Golini. - box-vertices-on-sphere: calculate the RA,Dec of vertices of the four vertices of a rectangle from its center and width along RA and Dec. This takes into account the curved nature of the coordinate system. Added after discussion with Martin Kuemmel. - number-neighbors: Return the number of non-zero neighbors of each non-zero pixel in a binary image. - New operators (only in the Arithmetic program): - interpolate-meanngb: interpolate blank values with mean of the requested number of nearest neighbors. - Alternative (shorter) names for existing operators, added after discussion with Samane Raji. - u8: same as 'uint8' (to convert to unsigned 8-bit integers). - i8: same as 'int8' (to convert to signed 8-bit integers). - u16: same as 'uint16' (to convert to unsigned 16-bit integers). - i16: same as 'int16' (to convert to signed 16-bit integers). - u32: same as 'uint32' (to convert to unsigned 32-bit integers). - i32: same as 'int32' (to convert to signed 32-bit integers). - u64: same as 'uint64' (to convert to unsigned 64-bit integers). - i64: same as 'int64' (to convert to signed 64-bit integers). - f32: same as 'float32' (to convert to 32-bit floating point). - f64: same as 'float64' (to convert to 64-bit floating point). *** CosmicCalculator - Spectral line database has been increased to 235 spectral lines in the UV and optical (previously only had 41 lines!) from: http://astronomy.nmsu.edu/drewski/tableofemissionlines.html To see the full list, run 'astcosmiccal --listlines'. --lineunit: allows you to specify the units of the displayed spectral line wavelengths. Currently, it take four units: 'm', 'micron', 'nm' and 'angstrom'. We can add any other unit easily, just let us know. *** Crop --append: if the output file already exists, append the cropped image HDU to the already existing HDUs of the file. Without this option, any existing HDUs in the output file will be removed (default behavior). --metaname: Specify the name of the cropped output HDU (value to the 'EXTNAME' keyword in FITS). *** MakeCatalog - Book: with the increasing number of possible measurements the "MakeCatalog measurements" section of the Gnuastro book has been broken into separate sub-section and contextually similar measurements are grouped separately there. --sigclip-mean-sb: surface brightness (over one pixel's area in arcsec^2) of the sigma-clipped mean of the values. This is useful in scenarios where you want to compare surface brightness values independent of the object's area, and by removing outliers (for example in a radial profile). See the description of this option in the book for more. This was added after a discussion by Ignacio Trujillo and Zahra Sharbaf. --sigclip-mean-sb-err: the error in '--sigclip-mean-sb' but using the sigma-clipped standard deviation of the values as the error, not the standard deviation image. --sigclip-std-sb: the surface brightness (over one pixel's area in arcsec^2) of the sigma-clipped standard deviation of the values. This can be used to find the reliable surface brightness of a radial profile for example. --sum-in-slice: [3D in; vector out] Sum of values in each slice. --sum-err-in-slice: [3D in; vector out] Error in '--suminslice'. --area-in-slice: [3D input; vector out] Number of labeled in each slice. --sum-proj-in-slice: [3D input; vector out] Sum of projected area in each slice. --area-proj-in-slice: [3D in; vector out] Number of voxels that are used in '--sum-proj-in-slice'. --sum-proj-err-in-slice: [3D in; vector out] Error of '--sum-proj-in-slice'. --area-other-in-slice: [3D in; vector out] Area of other label in projected area on each slice. --sum-other-in-slice: [3D in; vector out] Sum of other label in projected area on each slice. --sum-other-err-in-slice: [3D in; vector out] Area in '--sum-other-in-slice'. *** NoiseChisel --outliernumngb: the number of neighboring tiles to reject those that have passed (the mean-median quantile difference criteria) because of being on the wings of bright stars/galaxies. Until now, this number was the same as the number given to '--interpnumngb', but it is confusing and can cause problems (because interpolation is done after outlier rejection). From this version, '--interpnumngb' is only in charge of the number of neighboring tiles for interpolation outliers are defined based on the number of tiles given to this option. Therefore, if you are not detecting the wings of large galaxies, THE BEST solution is most-probably to increase '--outliernumngb'. This was done after a discussion with Elham Saremi. *** Statistics --outliernumngb: see description of same option in NoiseChisel. *** Table - Vector columns with multiple values per column are now supported. The following features have been added to help working on vector columns: - Book: a new "Vector columns" section has been added under the Table program which describes the core concepts and usage examples of the options below. --information: also identifies vector columns (a column with more than one value), by placing an '(N)' after the type. Where 'N' is the number of elements within the vector. --tovector: merge multiple single-valued columns into a new vector column. --fromvector: extract identified elements/tokens of a vector column to separate single-valued columns. --keepvectfin: do not delete the input columns to '--tovector' and '--fromvector'. --rowfirst: do row-based operations before column-based operations (by default column-based operations are done first). --transpose: column-based operator to transpose vector columns into a new table that has the inverse number of rows and columns. --txteasy: (or '-Y') when output is a plain-text file or just gets printed on standard output (terminal), all floating point columns are printed in fixed point notation (as in '123.456') instead of the default exponential notation (as in '1.23456e+02'). For 32-bit floating points, use a precision of 3 digits and for 64-bit floating points use a precision of 6 digits. This can be useful for human readability, but be careful with some scenarios (for example '1.23e-120', which will show only as '0.0'!). For more, see the changes in Table in this version. - New column arithmetic operator: - sorted-to-interval: return two columns from a single (sorted) input, containing the minimum and maximum values of an interval. The intervals are defined such that the intervals of every row fully cover the full range of values in the given column. This can be useful in scenarios where you need to build the inputs of the '--customtable' feature in MakeProfiles (to build a 2D image a custom profile). *** astscript-radial-profile --precision: sample the radial profile at precision less than one pixel. This is useful when you need to sample the profile within the central few pixels more accurately than integer pixels. See the documentation of this option in the book for a complete explanation with examples. *** Library - GAL_ARITHMETIC_OP_SWAP: swap the top two operands. - GAL_ARITHMETIC_OP_INDEX: An index (counting from 0) for every element. - GAL_ARITHMETIC_OP_INDEXONLY: Similar to 'GAL_ARITHMETIC_OP_INDEX'. - GAL_ARITHMETIC_OP_COUNTER: A counter (counting from 1) for every element. - GAL_ARITHMETIC_OP_COUNTERONLY: Similar to 'GAL_ARITHMETIC_OP_COUNTER'. - GAL_ARITHMETIC_OP_COUNTS_TO_NANOMAGGY: convert counts to nanomaggy. - GAL_ARITHMETIC_OP_NANOMAGGY_TO_COUNTS: convert nanomaggy to counts. - GAL_ARITHMETIC_OP_BOX_VERTICES_ON_SPHERE: calculate the coordinates of vertices of a rectangle on a sphere from its center and width/height. - gal_binary_number_neighbors: num. non-zero neighbors of non-zero pixels. - gal_blank_flag_not: binary dataset with 1 for those input pixels that were blank. - gal_data_alloc_empty: Allocate an empty dataset with a given number of dimensions. - gal_list_f64_to_data: convert list of float64s to a 'gal_data_t' dataset with the requested type. - gal_list_data_remove: Remove the given dataset from the given list. - gal_list_data_select_by_id: find/select a dataset from a list of datasets using an identification string (either counter or name). - gal_permutation_apply_onlydim0: When we have a 2D input, apply permutation for all the elements of each row (along dimension-0 in C). - gal_statistics_has_negative: see if input has a negative value. - gal_table_col_vector_extract: extract the given elements of a vector column into separate columns. - gal_table_cols_to_vector: merge multiple columns into a vector column. - gal_units_counts_to_nanomaggy: Convert counts to nanomaggy. - gal_units_nanomaggy_to_counts: Convert nanomaggy to counts. - gal_wcs_box_vertices_from_center: calculate the coordinates of vertices of a rectangle on a sphere from its center and width/height. ** Removed features *** MakeCatalog - Removed the short option format for the following measurements (columns). This was done because the short options affect the sorting in the output of '--help', making it hard to find the options visually. Because most measurements do not have a short format, we have seen that the short format is rarely used. Only the most commonly used measurements keep their short format, and only when they don't affect the alphabetic sorting of the output of '--help': --area (short option was 'a') --axis-ratio (short option was 'Q') --magnitude-error (short option was 'G') --num-clumps (short option was 'c') --position-angle (short option was 'p') --semi-major (short option was 'A') --semi-minor (short option was 'B') --sn (short option was 'n') --sum (short option was 'b') --upperlimit-mag (short option was 'u') ** Changed features *** Configuration --with-python: this has replaced the old '--without-python' option. The Python extension features in the Gnuastro library are no longer built by default. To have them, you need to explicitly configure Gnuastro with this option. This was necessary because Python has many peculiarities that were causing problems for users that don't need it in Gnuastro. These features are only necessary for those who compile pyGnuastro from source, most future users of pyGnuastro will be installing pre-built binaries it through services like PyPI, so they won't be needing it either. *** CosmicCalculator - Given the major increase of the spectral line database, the old line names have been changed to accommodate the full database. For example 'H-alpha' has replaced 'halpha'. Please run 'astcosmiccal --listlines' to see the new names for the previous lines. *** MakeCatalog - "Sum" used instead of "brightness" --sum: new name for the old '--brightness' column. "Brightness" has a specific meaning in astronomy/physics and has units of energy/time. However, astronomical images aren't in this unit, they are usually in counts, or can have an arbitrary units (like nanomaggy). The new name is derived from what this column does (sum of pixel values) to avoid confusions. --sum-error: new name for '--brightnesserr'. --clumps-sum: new name for '--clumpbrightness'. --sum-no-river: new name for '--brightnessnoriver'. --checkuplim: now returns the center of each label's tile, not the first pixel (the bottom-left pixel position of the tile). The old behavior to return the first pixel was un-intuitive, would require several manual steps (to measure the minimum and maximum positions of each tile, measure the width along each dimension and add it), and could lead to confusing results when ignored. See the updated documentation of this option for more on custom usage in special situations. - Using a hyphen to help in readability and usability: Old name New name ======== ======== --areaarcsec2 --area-arcsec2 --areamaxv --area-max-val --areaminv --area-min-val --areaxy --area-xy --axisratio --axis-ratio --clumpsarea --clumps-area --clumpsgeow1 --clumps-geo-w1 --clumpsgeow2 --clumps-geo-w2 --clumpsgeow3 --clumps-geo-w3 --clumpsgeox --clumps-geo-x --clumpsgeoy --clumps-geo-y --clumpsgeoz --clumps-geo-z --clumpsmagnitude --clumps-magnitude --clumpsw1 --clumps-w1 --clumpsw2 --clumps-w2 --clumpsw3 --clumps-w3 --clumpsx --clumps-x --clumpsy --clumps-y --clumpsz --clumps-z --fracmax --frac-max --fracmaxarea1 --frac-max1-area --fracmaxarea2 --frac-max2-area --fracmaxradius1 --frac-max1-radius --fracmaxradius2 --frac-max2-radius --fracmaxsum1 --frac-max1-sum --fracmaxsum2 --frac-max2-sum --geoarea --geo-area --geoareaxy --geo-area-xy --geoaxisratio --geo-axis-ratio --geopositionangle --geo-position-angle --geosemimajor --geo-semi-major --geosemiminor --geo-semi-minor --geow1 --geo-w1 --geow2 --geo-w2 --geow3 --geo-w3 --geox --geo-x --geoy --geo-y --geoz --geo-z --halfmaxarea --half-max-area --halfmaxradius --half-max-radius --halfmaxsb --half-max-sb --halfmaxsum --half-max-sum --halfsumarea --half-sum-area --halfsumradius --half-sum-radius --halfsumsb --half-sum-sb --hostobjid --host-obj-id --idinhostobj --id-in-host-obj --magnitudeerr --magnitude-error --maxvx --max-val-x --maxvy --max-val-y --maxvz --max-val-z --maxx --max-x --maxy --max-y --maxz --max-z --minvx --min-val-x --minvy --min-val-y --minvz --min-val-z --minx --min-x --miny --min-y --minz --min-z --numclumps --num-clumps --objid --obj-id --positionangle --position-angle --riverave --river-mean --rivernum --river-number --sberror --sb-error --semimajor --semi-major --semiminor --semi-minor --sigclip-mean-sb-err --sigclip-mean-sb-delta --skystd --sky-std --surfacebrightness --sb --upperlimitmag --upperlimit-mag --upperlimitonesigma --upperlimit-onesigma --upperlimitquantile --upperlimit-quantile --upperlimitsb --upperlimit-sb --upperlimitsigma --upperlimit-sigma --upperlimitskew --upperlimit-skew --weightarea --weight-area *** MakeNoise --bgnotmag: new name for the old '--bgisbrightness' option. See the description of changed '--sum' in MakeCatalog (above) for more. *** MakeProfiles --mcolissum: new name for the old '--mcolisbrightness' option. See the description of changed '--sum' in MakeCatalog (above) for more. - Units of the output FITS image (value to 'BUNIT' keyword) is now "counts", until now, it was "brightness". See the description of changed '--sum' in MakeCatalog (above) for more. *** Table - Given the newly added vector columns, the precedence on operations has been updated. Please read the "Operation precedence in Table" section of the book. - To avoid potential loss of information in floating point columns, when printing the columns to standard output (in the terminal) or saving in a plain-text file, the default floating point formats are now printed in exponential (scientific) notation (e.g., 1.234e-5). Until now the default notation was fixed-point notation (e.g., 0.00001234). A new sub-section called "Printing floating point numbers" has been added to the book (under the "Table" section) to clarify this important point. -A: new short format for --txtf64format. The '-d' short format was conflicting with the short option name for '--descending'. *** astscript-psf-select-stars - Now uses the Gaia DR3 dataset by default (until now it was using eDR3). *** astscript-psf-stamp *** astscript-psf-unite *** astscript-radial-profile --axis-ratio: new name for old '--axisratio' --position-angle: new name for old '--positionangle' *** Library: - gal_blank_remove_rows: new 'onlydim0' argument to ignore vector columns when checking for blanks. - gal_list_str_cat: new 'delimiter' argument to specify the character for printing between the separate string nodes in the single output string. - gal_txt_write: new 'tab0_img1' argument. Until now, this function would distinguish between images and tables using the dimensions of the input. But with the addition of vector columns in tables (that have 2 dimensions) this argument becomes necessary. ** Bugs fixed bug #63266: Table ignores a value of 0 given to '--txtf32precision' or '--txtf32precision=0' (happens when floating point columns need to be rounded to integers). Reported by Sepideh Eskandarlou. bug #63270: Table aborts when called with '--descending' with complaint on '--txtf64format' (that was added in Gnuastro 0.19). Reported by Giulia Golini. bug #63285: Table not printing anything in rows of integer columns with value of zero. bug #63340: Statistics printing zero for values smaller than 1e-6 and 1e-14 for 32-bit or 64-bit floats respectively. Reported by Elham Saremi. bug #63345: WCS coordinate change not accounting for new equinox (only relevant for equatorial outputs). Reported by Alejandro Serrano Borlaug. bug #63399: Table's '--noblank' or '--noblankend' crashing when input has no rows. Reported by Elham Saremi. bug #63485: Oversampling in radial profile has incorrect center. Reported by Nafiseh Sedighi. bug #63543: Programs delete input when it has same name as output. Reported by Faezeh Bidjarchian. bug #63969: make distcheck error due to temporary files of astscript-psf-select-stars. Reported by Siyang He. bug #64076: MakeCatalog prints --upnum warning even with --quiet. Reported by Teet Kuutma. * Noteworthy changes in release 0.19 (library 17.0.0) (2022-10-24) ** New features *** Book - Two new sections added to the "General program usage tutorial" for describing how to prepare a FITS image for high quality publication (in PDF), and drawing vector graphics marks from a catalog over it (for example to show your selected galaxies in the field of view). The use the newly added features of ConvertType. *** Arithmetic - Added new type operators and physical constants. All are also available in Table's column arithmetic also). - e: Base of the natural logarithm (no units). - pi: Fraction of Circle cirumference to diameter (no units). - c: speed of light in vaccume (in units of m/s). - G: Gravitational constant (in units of m^3/kg/s^2). - h: Plank's constant (in units of J/Hz). - au: Astronomical Units (in units of meters). - ly: Light years (in units of meters). - avogadro: Avogadro's constant (in units of 1/mol). - fine-structure: Fine structure constant (no units). - counts-to-sb: convert counts to surface brightness (mag/arcsec^2). - sb-to-counts: convert surface brightness (mag/arcsec^2) to counts. - mag-to-sb: convert magnitudes to surface brightness over an area. - sb-to-mag: convert surface brightness to magnitudes over an area. - New operators that are specific to Arithmetic: - collapse-median: collapse input dataset by calculating the median along the given dimension. - collapse-sigclip-std: Collapse with sigma-clipped standard deviation. - collapse-sigclip-mean: Collapse with sigma-clipped mean. - collapse-sigclip-median: Collapse with sigma-clipped median. - collapse-sigclip-number: Collapse with number remaining after sigma-clip. *** ConvertType - It is now possible to draw vector graphics marks from a catalog over the output PDF images. The following options have been added to ConvertType for doing this. See the "General program usage tutorial" for a fully working example. --marks: name of table containing mark information. --markshdu: HDU of table if file given to '--marks' is FITS. --markcoords: name or number of two columns containing coordinates. --mode: if the coordinates are in 'img' (image) or 'wcs' (RA/Dec). --markshape: name or number of column containing the shape of each mark. --markrotate: name or number of column containing rotation of each mark. --marksize: name or number of column containing the size of the mark. --sizeinpix: interpret the values in the size column as pixels. --sizeinarcsec: interpret the values in the size column as arc-seconds. --sizeinarcmin: interpret the values in the size column as arc-minutes. --marklinewidth: name or number of column containing mark's line width. --markcolor: name or number of column containing mark's color. --listcolors: List all the 140 available colors, and show the colors on 24-bit (true color) terminal. --marktext: name or number of column containing text under each mark. --marktextprecision: number of decimals to print as text when the text column (given to '--marktext') is floating point. --markfont: name or number of column containing the font to use for the the mark text (given to '--marktext'). --markfontsize: name or number of column containing the size of the font to use for the mark text (given to '--marktext'). --showfonts: build a demo PDF with one page per font to show the various available fonts on the system. --listfonts: List the names of the available fonts on the terminal. - It is now possible to select the color of the border of images produced in vector graphics outputs (EPS and PDF) with '--bordercolor'. *** Fits --pixelareaarcsec2: print the image pixel area in units of arcsec^2 to standard output. Among other things, this is useful in creating a surface brightness image using the new 'counts-to-sb' operator of Arithmetic. --pixelareaonwcs: Ouput an image with the same number of pixels as the input. But each pixel's value shows its area on the sky (in degrees-squared). This area is calculated after accounting for distortion, projection or rotation. Implemented by Pedram Ashofteh-Ardakani. --edgesampling: extra sampling along each pixel's edge used to configure the output of '--pixelareaonwcs', similar to Warp. *** Statistics - Linear and Polynomial least squares fitting are now available and very easy to call on the command-line. They are wrappers over the respective least squares fitting functions of the GNU Scientific Library. The interface is pretty simple, like the example below: aststatistics table.fits -cX,Y,Yerr --fit=linear-weighted It is also possible to estimate values and errors of the fitted model on a new X axis. A complete example has been added to the newly added "Least squares fitting" section of the book (under the Statistics program documentation). Please see that tutorial to easily use this feature. The following new options have been added to the Statistics program for this purpose: --fit: the model to use. Currently the following models are supported: linear linear-weighted linear-no-constant linear-no-constant-weighted polynomial polynomial-weighted polynomial-robust --fitweight: nature of the "weight" column (default: standard dev). --fitmaxpower: maximum power of X in polynomial models. --fitrobust: weight function to use in the "robust" polynomial model. --fitestimate: File name, or number to estimate the fit on. --fitestimatehdu: HDU containing table in file given to '--fitestimate'. --fitestimatecol: Column containing X axis values for '--fitestimate'. *** Table - It is now possible to customize the format of floating point numbers in the plain-text outputs: when output is printed on the standard output (command-line) or in plain-text files. The following new options have been added for this new feature: --txtf32format (or '-f'): Format of 32-bit floating point columns. This can be either 'fixed' (for fixed-point notation) or 'exp' (for exponential/scientific notation). --txtf32precision (or '-p'): number of digits following the decimal-point of 32-bit floating point columns. --txtf64format (or '-d'): Format of 64-bit floating point columns. This can be either 'fixed' (for fixed-point notation) or 'exp' (for exponential/scientific notation). --txtf32precision (or '-B'): number of digits following the decimal-point of 32-bit floating point columns. *** Warp - Can correct distortions (with any standard recognized by WCSLIB) and simultaneously align the image to the coordinate system. When no named linear operation (like '--rotate', '--scale' or etc) is requested, Warp will go into this mode. It is highly customizable through the following options. See the "Invoking Warp" section of the book for more. This feature has been written by Pedram Ashofteh-Ardakani. --center: RA, DEC of the center of the central pixel of output. --width: Width of output in degrees or pixels (see '--widthinpix'). --widthinpix: interpret values of '--width' as pixels. --cdelt: Pixel scale of output ('CDELTi' keywords in FITS). --ctype: Coordinates and projection algorithm. Default: RA/Dec and Gnomonic or 'TAN'). --edgesampling: extra sampling of pixel polygon to account for strong non-linear projection or distortion effects, when necessary. --gridfile: warp the input to the exact WCS and pixel grid of the file given to this option. This is very useful when matching images from differetn surveys. Using this option, you can also insert distortions in an image (for example on a mock image, to make it match an observed exposure with dithering+distortion). --gridhdu: HDU containing image to be matched in '--gridfile'. --checkmaxfrac: visualize the Moiré pattern of the warp in the second extension of the output. This is the maximum fraction of a single input pixel's area in the output pixel. When the output pixel scale is similar to the input, the Moiré pattern can cause varying artificial smoothing of the noise level. See the newly added "Moiré pattern and its correction" section of the book for more on its basics and how to reduce it in your outputs. *** astscript-fits-view --ds9colorbarmulti: show a separate color-bar for each image in DS9. By default this script will show a single color-bar for all the images to help save space on the monitor when there are many images. *** astscript-psf-stamp - sub-pixel warping is applied to ensure that your coordinate is at the center of the central pixel of the output image. This results in a _major_ improvement when estimating the center of the PSF. --nocentering: disable sub-pixel warping when creating the PSF stamp. As described above, the sub-pixel warping is critical for the central part of the PSF, but for the outer parts it is statistically negligible. So to avoid slowing down you pipeline, you can disable sub-pixel warping with this option. --snthresh: if given, the value to this option is assumed to be a signal-to-noise ratio (S/N) threshold and all pixels below that S/N will be masked. This is useful because we are often forced to stack stars of differing magnitudes. While the fainter ones are good for the inner parts of the star, they degrade the stack's outer parts. With this option, the fainter stars won't harm the outer parts. *** GNU Make extensions (in a Makefile) It is now possible to use custom Gnuastro functions in GNU Make, using its extension facilities with Dynamic libraries. GNU Make is a very powerful workflow manager that is also used for data analysis (not just for compilation). With the Gnaustro Make functions, (astronomical) data analysis becomes even more easier and faster. In the following, you can see the first set of such functions (they all begin with 'ast-'). For more, see the newly added chapter in the Gnuastro manual. - ast-version-is: will return '1' if the running Gnuastro has the given version (argument of this function). This can be used to ensure reproducibility in combination with Make's conditional features, see the minimal working example in the manual. - ast-text-contains: will return space-separated words within a larger list that contain a certain string. The to-contain string can be anywhere within the words of the larger list. - ast-text-not-contains: will return space-separated words within a larger list that DO NOT contain a certain string. The to-not-contain string can be anywhere within the words of the larger list. - ast-fits-with-keyvalue: takes a keyword name, a list of keyword values, a HDU and a list of FITS files. It will return only those FITS files that have the requested value(s) in the requested keyword of the requested HDU. - ast-fits-unique-keyvalues: takes a keyword name, a HDU and a list of FITS files. It will return all the unique values given to that keyword within the FITS files. *** Library: - GAL_CONFIG_HAVE_PYTHON: non-zero if Python3+Numpy features included. - GAL_CONFIG_HAVE_GNUMAKE_H: non-zero if GNU Make extensions can be made. - gal_box_border_rotate_around_center: width of box after rotation. - gal_color_id_to_name: return the name of a color from its ID. - gal_color_in_rgb: return the fraction of red-green-blue in a color. - gal_color_name_to_id: return the ID of a color from its name. - gal_dimension_collapse_median: collapse input along dim. using median. - gal_dimension_collapse_sigclip_mean: collapse with sig-clipped mean. - gal_dimension_collapse_sigclip_std: collapse with sig-clipped STD. - gal_dimension_collapse_sigclip_median: collapse with sig-clipped median. - gal_dimension_collapse_sigclip_number: collapse with num. after sig-clip. - gal_eps_shape_id_to_name: return the name of a shape from its ID. - gal_eps_shape_name_to_id: return the ID of a shape from its name. - gal_fit_name_to_id: Convert string name to ID of fitting model. - gal_fit_name_from_id: Convert ID of fitting model to string name. - gal_fit_name_robust_to_id: Convert name of robust weights to ID. - gal_fit_name_robust_from_id: Convert ID of robust weights to name. - gal_fit_1d_linear: linear fit of input columns. - gal_fit_1d_linear_no_constant: linear fit with no constant. - gal_fit_1d_linear_estimate: estimate a linear fit on a new X column. - gal_fit_1d_polynomial: polynomial fit of input columns. - gal_fit_1d_polynomial_robust: robust polynomial fit of input columns. - gal_fit_1d_polynomial_estimate: estimate a polynomial fit on new X column. - gal_fits_unique_keyvalues: extract all unique values to a certain keyword in many files. - gal_fits_with_keyvalue: select FITS image with a certain key value. - gal_list_data_select_by_name: select a dataset from a list by its name. - gal_list_str_cat: Concatenate (append) list to a space-separated string. - gal_list_str_extract: Extract space-separated tokens to a list. - gal_python_type_from_numpy: Convert Numpy's type id. to Gnuastro's. - gal_python_type_to_numpy: Convert Gnuastro's type id. to Numpy's. - gal_txt_contains_string: Check a certain string within in a larger one. - gal_units_counts_to_sb: SB from counts, zeropoint and area. - gal_units_mag_to_sb: surface brightness (SB) from magnitude and area. - gal_units_sb_to_counts: counts from SB, zeropoint and area. - gal_units_sb_to_mag: magnitude from SB and area. - gal_warp_pixelarea: return image of same size, but with area on sky. - gal_warp_wcsalign_init: initialize the WCS aligning structure. - gal_warp_wcsalign_onpix: Per-pixel filling of output. - gal_warp_wcsalign_onthread: function to give to pthreads. - gal_warp_wcsalign: high-level function to align input by its WCS. - gal_warp_wcsalign_free: free the contents of the WCS aligning structure. - gal_wcs_free: free a WCS structure that is created or read by Gnuastro. ** Removed features *** Statistics --refcol has been removed because it breaks the modularity principle (given that it is the job of Gnuastro's Table program to limit rows from a larger table based on many different criteria). The output of Table can be directly piped to Statistics to achieve the same (and much more feature-rich effect). *** Warp --align: has been removed. This is because aligning an image (while correcting for any possible distortion) is now the default behavior of Warp (when no linear operations have been requested). ** Changed features *** Book - The "General program usage tutorial" section is now the first section of the Tutorial chapter, since it introduces the tools at a more basic level. The "Sufi simulates a detection" (which was previously first) has been moved to the fourth section. *** Warp - The short format of the '--centeroncorner' option has been removed. The '-c' is now the short format for the new '--center' option to Warp. *** astscript-psf-scale-factor --widthinpix: new name for the old '--stampwidth' option. This was done to have the same name to a similar option in Crop and help in remembering. *** astscript-psf-stamp --widthinpix: new name for the old '--stampwidth' option. This was done to have the same name to a similar option in Crop and help in remembering. *** Library - gal_eps_write: two new arguments have been added to draw marks, and to set the border color. - gal_pdf_write: similar to 'gal_eps_write'. - gal_fits_hdu_open: new argument to optionally exit program if HDU couldn't be opened. - GAL_TABLE_DISPLAY_FMT_FIXED: new name for GAL_TABLE_DISPLAY_FMT_FLOAT since it corresponds to the fixed-point notation of printing floating points in plain-text (the '_FLOAT' suffix was too generic and unclear). ** Bugs fixed bug #62861: '--printkeynames' of Fits program gets caught in an infinite loop on FITS files that have empty keywords before 'END'. Found by Pedram Ashofteh-Ardakani. bug #62892: Installed scripts don't account for differing LANG and LC_NUMERIC. Found by Teet Kuutma and fixed by Raul Infante-Sainz. bug #62937: psf-scale-factor not being quiet, when requested. Found and fixed by Sepideh Eskandarlou. bug #62943: Couldn't read the value of width with '--snthresh' is called. Found and fixed by Sepideh Eskandarlou. bug #62944: No warning when the option value isn't immediately after the equal sign in long format. Found by Faezeh Bijarchian. bug #63013: Sigma clip segmentation fault when input has an integer type with values close to saturation-level. bug #63022: psf-scale-factor not saving the result in the output file, found and fixed by Raul Infante-Sainz. bug #63189: MakeProfiles custom profiles become NaN with a single row being NaN, reported by Nafise Sedighi. bug #63207: Match crashes when one input has no rows. Found by Sepideh Eskandarlou. bug #63257: Fits program's '--skycoverage' gives unreasonable outputs when image crosses the RA=0 hour circle. Found by Irene Pintos Castro. bug #63261: Radial profile script ignores central pixel in azimuthal profiles. Found and fixed by Sepideh Eskandarlou. * Noteworthy changes in release 0.18 (library 16.0.0) (2022-07-21) ** New features *** Book - New "Measuring the dataset limits" section has been added in second tutorial. Using the catalogs produced during the analysis, it shows how to derive a dataset's magnitude limit, completeness limit (crudely: without simulations), and surface brightness limit. All are important measures in any scientific analysis! This section was written with the help of S. Zahra Hosseini Shahisavandi and Sepideh Eskandarlou. *** Arithmetic - New operators (also available in Table's column arithmetic): - stitch: connect any number of input images along the given dimension (for example to stitch the images of separate amplifiers of a CCD into one image). - noblank: Remove blank elements from the input and return a 1D output (irrespective of how many dimensions the input had). - jy-to-counts: convert Janskys to counts using an AB-magnitude-based Zeropoint (the inverse operator 'counts-to-jy' already existed). - mag-to-jy: convert AB magnitudes to Janskys. - jy-to-mag: convert Janskys to AB magnitudes. - load-col-%-from-%-hdu-%: Load a certain column into the operands stack. The name or number of the column is the first '%'. The file name hosting that column is the second '%', and HDU (if the file is a FITS file), is identified by third '%'. This can be used to load columns outside the main table in Table's column arithmetic or by operators that need columns as input parameters (like the new 'random-from-hist' operator). - random-from-hist-raw: return a set of random points based on a custom distribution defined by its histogram. See the description and complete examples in the book for more. - random-from-hist: Similar to 'random-from-hist-raw', but within each bin, the final returned value is itself the result of a uniform sampling (to make the final distribution less descrete). See the example in the book for selecting random star magnitudes based on Gaia's observed magnitude distribution. - New options to add metadata (standard FITS keywords) to your output for easy understanding of the data in the future, or by your colleagues if you share the output). Until now, to have this feature, you needed to call Fits on the output of Arithmetic (for setting the HDU name to "my-sum" for example): astarithmetic img-a.fits img-b.fits + --output=sum.fits astfits sum.fits --write=EXTNAME,"my-sum" But with the following commands, you can add important metadata to the output of Arithmetic in the same command and simplify your scripts: --metaname: Metadata name of the output (FITS keyword: 'EXTNAME'). --metaunit: Unit of the output's pixels (FITS keyword: 'BUNIT'). --metacomment: Description of the data (FITS keyword: 'COMMENT'). Like the following for the example above: astarithmetic img-a.fits img-b.fits + --metaname="my-sum" \ --output=sum.fits *** Crop --oneelemstdout: when a crop has a single pixel and this option is called, the single pixel's value will be printed on the standard output instead of creating a FITS file. This option can be useful in labeled images like detection maps (when you want to see what label a certain coordiante/pixel corresponds to). This option was suggested by Raul Infante-Sainz. *** Fits - When no option is specified (thus printing the HDU metadata in the given file), the units of the HDUs are also printed as a new column. For tables, it will be blank ('n/a'); because tables have separate units on each column (use 'asttable table.fits -i'). --copykeys: can now take any number of keyword names also. For example '--copykeys=KEYNAME1,KEYNAME2,KEYNAME3'. Until now, it was only possible to give this option a range of keyword positions (for example '--copykeys=10:13' to copy the 10th to 13th keywords (inclusive). But now, you can also select non-contiguous set of keywords to copy from one HDU into another HDU (possibly in another file). This was suggested by Juan Antonio Fernández Ontiveros and implemented with the help of Jash Shah. *** MakeProfiles - It is now possible to insert a custom image as a new (10th) 'custom-img' profile. This is useful when you have no-noise FITS images from numerical simulations for example, and you want to insert those at a certain location within a larger image (while optionally adding existing Sersic, point or other profiles in the same command). The magnitude of the inserted image can be set in the magnitude column of the input catalog. This can be disabled (to use the original image pixel values) using the '--mcolnocustimg' option. --mcolnocustprof: new option to disable scaling of custom radial profiles to required magnitude when building a 2D image from them. *** Query - Short name for Gaia's DR3 dataset has been added for both ESA's Gaia database and VizieR, for example with the following commands: astquery gaia --dataset=dr3 --center=1.234,5.678 --radius=0.01 astquery vizier --dataset=gaiadr3 --center=1.234,5.678 --radius=0.01 *** astscript-radial-profile --zeroisnotblank: new option to account for zero-valued pixels in the profile measurement. By default, during the internal cropping phase, zero-valued pixels are set to blank (and thus not considered during the profile measurement). When this option is called, it is directly passed to the internal cropping command ('astcrop' has an option with the same name). This was suggested by Ignacio Ruiz Cejudo and implemented by Sepideh Eskandarlou. *** Library - GAL_ARITHMETIC_OP_UNIQUE: to find unique elements in dataset. - GAL_ARITHMETIC_OP_NOBLANK: to remove blank elements from dataset. - GAL_ARITHMETIC_OP_STITCH: to stitch multiple datasets. - GAL_ARITHMETIC_OP_RANDOM_FROM_HIST: the new 'random-from-hist' operator. - GAL_ARITHMETIC_OP_RANDOM_FROM_HIST_RAW: the new 'random-from-hist-raw' op. - gal_arithmetic_load_col: Low-level function for parsing the string of the newly added 'load-col' operator, mentioned in the Arithmetic section above. - gal_statistics_std_from_sums: return the standard deviation using the sum, sum of squares and number of a distribution. ** Removed features ** Changed features *** MakeCatalog --std: measures the standard deviation of the object/clump pixels of the values image. Until now, there was no column to calculate this, and the '--std' column returned the _sky_ standard deviation over the object/clump labels (from the standard deviation image, ignoring the values image). But that was confusing, especially since we have columns like '--mean' or '--median' which only use the values image (see bug #62685). --skystd: new name for old '--std', see description of '--std' above. --sfmagnsigma: default value changed to 3 (more commonly used). --sfmagarea: default value set to 100 arcsec^2 (more commonly used). --upnum: MakeCatalog won't abort when '--upnum' is too small (less than 20). '--upnum' defines the number of random positions for upper-limit measurements, so when its too small, the statistical precision of the result will badly affected and MakeCatalog would abort with an error message. However, in some scenarios (for example when the positions of the random apertures from '--checkuplim' are needed) the actual upper-limit measurements aren't relevant! So from this version, instead of aborting MakeCatalog, it prints a warning and continues. This was suggested by S. Zahra Hosseini Shahisavandi and Ignacio Trujillo. *** MakeProfiles - The string identifier for custom radial profiles is now called 'custom-prof' (until now, it was called 'custom'). This was necessary because of the new custom image feature that has been added. The code for this custom radial profile function (8) hasn't changed. - After constructing a custom radial profile (the 'custom-prof' profile), MakeProfiles will scale it to have the desired total magnitude in the input catalog of all profiles. Until now, the 2D images created from a custom radial profile wouldn't be touched and the pixel values would exactly come from the custom radial profile (ignoring the magnitude column of the input catalog). To have the old behavior, use the new '--mcolnocustprof' option. This new functionality was proposed by Elham Saremi. *** Table --catcolumnfile: the '-N' suffix (where 'N' is a counter for the files with concatenated, or appended, column) is only added if a column with a identical column name (not case sensitive) existed in the table. Until now, this suffix would be added to all the newly concatenated columns (recall that the suffix addition can be disabled in general with the '--catcolumnrawname' option). --rowrange: new name for the old '--rowlimit'. This option takes the range of desired rows based on their position (for example '--rowrange=2,5' will only print rows 2, 3, 4 and 5 of the table). But the old name was very confusing and would not directly convey this behavior. *** astscript-radial-profile --azimuth: if the first azimuthal angle is larger than the second, the outer region between the two angles will be used. For example '--azimuth=80,40' will use the full azimuthal range except for the region with azimuthal angles between 40 and 80 degrees. This can be useful to ignore parts of the profile. See the example in the description of this option on how to visually check the pixels used for the profile. ** Bugs fixed bug #62216: MakeProfiles crash when a 3D cube is requested and input catalog is from a pipe. Found by Irene Pintos Castro. bug #62220: astscript-psf-stamp crashes when coordinate not in image. Found and fixed by Sepideh Eskandarlou. bug #62250: Convolve crashes when doing PSF matching. Found with help of Raul Infante-Sainz. bug #62252: Radial profile giving one larger radius in high axis-ratio profile. Found and fixed by Sepideh Eskandarlou. bug #62253: Arithmetic: segmentation fault when invalid input given for 'ra-to-degree' or 'deg-to-degree' operators. Found by Pedram Ashofteh-Ardakani. bug #62305: Not reading the 'MemFree' keyword in '/proc/meminfo' to find the available RAM (and thus printing an annoying warning). Reported by Juan Miro. bug #62309: MakeCatalog segmentation fault when clumps image given as main input (objects should be given). Reported by Sepideh Eskandarlou. bug #62429: Segment prints one line status-progress line when called with '--quiet'. Reported by Teet Kuutma. bug #62548: Table doesn't recognize plain-text string column when defined width is larger and it is the last column. Found with the help of Sepideh Eskandarlou. bug #62563: Some checks of installed scripts get skipped on macOS. Found and fixed by Raul Infante-Sainz. bug #62564: Arithmetic not parsing numbers in scientific notation (for example '1e5'). Found by Elham Saremi. bug #62590: Failure to build on macOS when building in debugging mode ('./configure --enable-debug'). Found by Raul Infante-Sainz. bug #62597: Arithmetic not writing single-valued output into a file when called with '--output'. Reported by Raul Infante-Sainz. bug #62636: Table ignoring '--range' when '--head' is also called. Reported by Sepideh Eskandarlou. bug #62662: Table crashes when column arithmetic is applied after adding rows from another file (with '--catrowfile'). bug #62674: Column arithmetic can't use columns from --catcolumnfile. bug #62678: Radial profile script using values image instead of STD image when '--instd' not used. Found and fixed by Raul Infante-Sainz. bug #62679: MakeProfiles kernel only normalized when zeropoint is zero. Found by Raul Infante-Sainz. bug #62680: MakeProfiles using WCS-options when --background is given and the background doesn't have WCS. Found with the help of Raul Infante-Sainz. bug #62683: Arithmetic's 'set-' operator not working after the 'makenew' operator. Found by Raul Infante-Sainz. bug #62685: MakeCatalog's '--std' option is wrongly interpreted as the standard deviation of the values image, while it is actually the root mean square of the Sky standard deviation pixels. Found by Raul Infante-Sainz. bug #62694: Radial profile script overestimates the surface brightness error. Found and fixed with the help of Raul Infante-Sainz. bug #62710: Plain-text integers starting with 0 are read in the octal base (which is common in software engineering, but not in data analysis). Found by Manuel Sánchez-Benavente. bug #62718: Table goes into an infinite loop on some old ASCII FITS tables. Found by Hilderic Browne. bug #62720: Table not reading string columns that are shorter than the defined width in the metadata. bug #62721: Radial profile script can't deal with angles around azimuth zero (for example '--azimuth=355,5' to get only the azimuthal range of 10 degrees around the major axis). Found and fixed by Samane Raji. bug #62784: Conversion of sexagesimal RA or Dec ignores sign when first digit is zero (for example '-00d12m34'). Found by Manuel Sánchez-Benavente. bug #62794: psf-stamp scripts produces inconsistant outputs on failure. Found by Sepideh Eskandarlou and Nafise Sedighi. * Noteworthy changes in release 0.17 (library 15.0.0) (2022-03-20) ** New features New programs: - astscript-fits-view: Given any number of FITS files, this script will either open SAO DS9 (for 2D images or 3D cubes) or TOPCAT (for tables) to visualize their contents in a graphic user interface (GUI). Both SAO DS9 and TOPCAT are free software packages that are heavily used in astrophysics. When opening in DS9, files will be opened as "match"ed and "lock"ed frames, enabling easy visual comparison. For GUIs that conform to the freedesktop.org standards, a '.desktop' file is also provided that you can easily activate (as described in the manual). Once activated, simply clicking on FITS file(s) in your graphic environment will open DS9 or TOPCAT depending on their contents. This script was suggested and partly written by Sepideh Eskandarlou. - A set of installed scripts to enable easy estimation and subtraction of the extended PSF (in a highly modular and easily scalable manner). They are primarily based on the method described in Infante-Sainz et al. 2020 (https://ui.adsabs.harvard.edu/abs/2020MNRAS.491.5317I) and primarily maintained by Raul Infante-Sainz himself and the help of Sepideh Eskandarlou. A full tutorial on real data from the J-PLUS survey (http://j-plus.es) has also been added to the tutorials chapter to describe in full detail how to run these scripts in a generic way (on any survey). These installed scripts all have a 'astscript-psf-*' prefix in their names: - astscript-psf-select-stars: Find all the stars within an image that are suitable for constructing an extended PSF. If the image has WCS, this script can automatically query Gaia to find the good stars. - astscript-psf-stamp: build a crop (stamp) of a certain width around a star at a certain coordinate in a larger image. This script will do sub-pixel re-positioning to make sure the star is centered and can optionally mask all other background sources). - astscript-psf-scale-factor: Given a PSF model, and the central coordinates of a star in an image, find the scale factor that has to be multiplied by the PSF to scale it to that star. - astscript-psf-unite: Unite the various components of a PSF into one. Because of saturation and non-linearity, to get a good estimate of the extended PSF, its necessary to construct various parts from different magnitude ranges. - astscript-psf-subtract: Given the model of a PSF and the central coordinates of a star in the image, do sub-pixel re-positioning of the PSF, scale it to the star and subtract it from the image. Book: - New tutorial on how to extract the extended Point Spread Function (PSF) from the actual science data and how to subtract it. Written with the help of Raul Infante-Sainz and Sepideh Eskandarlou. - New section called "Skewness cased by signal and its measurement" added to the third tutorial (Detecting large extended targets). It describes the significant advantages of using the quantile of the mean as a measure of skewness and why its a very important factor when understanding how NoiseChisel works. It was originally written by Sepideh Eskandarlou, with edits by Elham Saremi and Pedram Ashofteh-Ardakani. - New section called "Integer benefits and pitfalls" added under the Arithmetic program's documentation. It describes the running time, storage and RAM consumption benefits if you use integers (where possible), and the issues/solutions you may confront when doing so. All programs: - Coordinate-related columns in all programs now also accept sexagesimal values, not just degrees. Therefore, '--center=113.8729761,31.9027152' and '--center=07h35m29.51,31d54m9.77' are now equivalent in the Crop or Query programs that have this option! Other improved options include the '--polygon' options of Table and Crop (that also take region files produced by DS9), the '--coord' option of Match, the '--crval' option of MakeProfiles. - Columns of FITS tables are now read in parallel (when '--numthreads' isn't set to '1', and if the dependency CFITSIO library was built with '--enable-reentrant'). In scenarios where many columns may be necessary (for example the Table or Match programs), this will greatly improve the running time of the programs. This task was implemented based on feedback from Andrés Del Pino Molina. Arithmetic: - New operators: - add-dimension-fast: Add a new dataset along the "fastest" dimension of the first dataset (in a FITS image, the "fast" dimension is the horizontal one). For example if you have N one-dimensional datasets with M elements, you can use this operator to construct a 2-dimensional FITS image that has N pixels along the horizontal and M pixels along the vertical. - repeat: Put a copy of the given dataset onto the top of the stack of operators for the requested number of times. Crop: --widthinpix: when in WCS-mode, the value given to '--width' will be interpreted in units of pixels. This will allow having crops of a fixed pixel size, even when the mode of the central coordinate is in WCS. This was suggested by Jesús Varela. Fits: - If a 'CHECKSUM' keyword exists in a HDU and any of the keyword modification keywords are called, Fits will automatically update the checksum after all the changes are done. This is important to keep the checksum valid after the change (recall that you can verify the FITS checksums with the '--verify' option to Fits). This task was suggested by Tamara Civera Lorenzo. Table: - Options that accept strings ('--colmetadata', '--equal' and '--notequal') can now accept a comma within the string: to avoid confusing the comma with a separator of values, you should put a '\' before it. For example '--equal=AB,cd\,ef' will select all rows where the 'AB' column has a value of 'cd,ef'. This task was suggested by Zohreh Ghaffari. --catrowfile: File to concatenate (i.e., add or append) rows into the main input table. With this option, you can add the rows of another table into the final output. This option can be called multiple times, allowing you to merge rows of any number of tables. This job is done after concatenating columns, but before any of the row-selection operations. This was suggested by Raúl Infante-Sainz and Manuel Sánchez Benavente. --catrowhdu: The HDU(s) of the FITS file(s) given to '--catrowfile'. --noblankend: remove blank rows from selected columns of the _output_ table, for example after after adding columns by column arithmetic or from other tables (this is the new name for the old '--noblank' option, see the changed features below). Like the new '--noblank', this option can also be called multiple times, so '--noblankend=1 --noblankend=2' is equivalent to '--noblankend=1,2'. - New operator for column arithmetic: - date-to-millisec: convert the formatted date string into the number of milli-seconds (as a 64-bit integer) since Unix-time (00:00:00 of 1970-01-01). Match: - k-d tree based matching has been added for finding the matching rows, and is set to the default mode. It will do the matching in parallel, which will improve the speed when many rows are present. The k-d tree can also optionally be saved in a file for matching new tables with the same one (further improving running speed). For a full description of Match's new behavior, please see the new "Matching algorithms" section of the book. This feature was implemented with the help of Sachin Kumar Singh. --kdtree: new option to specify the algorithm used by Match. It can take four values: 'internal' (which is the default), 'build' (to build a k-d tree), 'FILE.fits' (name of k-d tree to import), or 'disable' (to do the matching with the old sort-based method). For more, please see the new "Matching algorithms" section of the book. --kdtreehdu: the HDU of the external k-d tree (if a FITS file was given to '--kdtree'). Library: - gal_fits_key_exists_fptr: Check if a certain keyword exists in the already-open FITS file pointer. ** Removed features Nothing was removed in this release. ** Changed features Arithmetic: - 'add-dimension-slow' is the new name for the old 'add-dimension'. Segment: - '--noobjects' is the new name for the old '--onlyclumps' option. This is because the name Only-Clumps can lead to a wrong expectation that the output will _only_ contain a 'CLUMPS' HDU. However, with'--onlyclumps', the input image (without a Sky level) and the Sky standard deviation image are also present as HDUs in the output. To only get the 'CLUMPS' HDU, it is necessary to also use the '--rawoutput' option. This renaming was done to avoid such confusions and was raised by Sepideh Eskandarlou. Match: - By default (when '--quiet' isn't called), Match will print the names of the inputs and timings of important steps to the standard output (on the command-line). Table: - The '--noblank' option's logic is very similar to other row-selection (by value) options (like '--range', '--polygon' or '--equal'). However, until now, it was applied at the end of Table, just before writing the output (so it would apply to the output table, that may have new/different column names/orders, not the input table like the other similar options). This was very inconvenient and non-intuitive. From this version, '--noblank' option now behaves similarly to the other input row-selection (by value) options. So it can be called multiple times (to give many columns in multiple calls) and it can be called for a column that is not necessarily one of the output columns (for example you want the RA and Dec of all rows without a blank magnitude, so you don't need to have the magnitude column any more!). The old behavior of this option is now available in the new '--noblankend' option. This point was raised by Samane Raji. - 'date-to-sec' operator now only returns the number of seconds and is always in a 64-bit signed integer format. Until now, if the input had sub-second precision it would return a 64-bit floating point type; however, that resulted in bug #61976 (where the loss of precision due to the floating-point's logarithmic scale for too many significant digits caused incorrect conversions). Library: - gal_fits_tab_read: now takes the number of threads to read the desired columns in parallel (this will greatly improve reading speed when there are many columns and many rows). - gal_table_read: similar to 'gal_fits_tab_read' (only relevant for reading FITS tables). - gal_blank_initialize: also works on string data, but initializing only a tile over a larger block of elements is only supported for numeric data types. ** Bugs fixed bug #61329: make check crash in macOS in convolve/spectrum-1d.sh, found and fixed with the help of Sebastian Luna-Valero. bug #61378: Table crash when input is sexagesimal RA/DEC and no metadata. bug #61462: Crash on FITS binary table columns with repeat of 0. bug #61468: DS9 region file can't be read in sexagesimal coordinates, reported by Juan Antonio Fernández Ontiveros and Alejandro Lumbreras Calle. bug #61490: Extra columns in the metadata causes crash in plain-text tables, found by Zohreh Ghaffari. bug #61493: NoiseChisel's --checksn not showing pseudos equal to --snminarea (only larger ones), found by Raúl Infante-Sainz. bug #61584: When FITS file doesn't end with '.fits' and the output file already existed, Arithmetic would write the output in new extension while it should have been deleted. bug #61598: ds9-region script not using precise WCS values, found and fixed by Raúl Infante-Sainz. bug #61698: Mean operator of Arithmetic (for stacking many images) not returning NaN for blank regions when input is integer. This fix also resolves the same problem in the 'sum', 'std', 'median' and all 'sigclip-*' operators); reported by Zohreh Ghaffari. bug #61740: WCSLIB conflicting with system's wide-character string (WCS) library in Gnulib checks for some systems; reported by Martin Guerrero Roncel. bug #61940: Numbers with many decimals (like '330624.3918430004', common in Julian dates for example) incorrectly read as float32 (thus loosing precision); reported by Zohreh Ghaffari, fixed with help of Pedram Ashofteh-Ardakani. bug #61967: DS9 polygon region files not read when they have width and color; reported by Zohreh Ghaffari, fixed by Pedram Ashofteh-Ardakani. bug #61976: Table arithmetic date-to-sec produces same result for different times (separated by about 1 second). This bug was reported by Zohreh Ghaffari and Pedram Ashofteh-Ardakani. bug #62008: Arithmetic not deleting existing output when the 'makenew' is used (no FITS file exists in the reverse polish notation). bug #62052: WCS decomposition of CD into PC+CDELT not setting internal values; reported by Ignacio Ruiz Cejudo and Raul Infante-Sainz. bug #62054: Crash in Table's '--catrowfile' when string column is present; reported by Manuel Sánchez-Benavente. bug #62069: Wrong Arithmetic result in binary operators when both input operands are integers of same width, but different sign (for example 'int32' and 'uint32'); reported by Zohreh Ghaffari and Pedram Ashofteh-Ardakani. bug #62070: Segmentation fault in Table's '--tail' option, when string columns are requested and the requested number of rows given to '--tail' is more than half of the number of rows; reported by Manuel Sánchez-Benavente. bug #62096: 'astarithmetic 250 1 +' not producing correct result; reported by Raul Infante-Sainz. bug #62112: NoiseChisel crash when '--checktiles' and '--continueaftercheck' called together; reported by Giulia Golini. bug #62127: GNU Scientific Library's 1D Steffen interpolation method (that guarantees monotonicity) not used in Gnuastro's library, even if it is present and found at configure time; found and fixed by Pedram Ashofteh-Ardakani. bug #62204: Column arithmetic crashes when there are no rows; reported by Zohreh Ghaffari. * Noteworthy changes in release 0.16 (library 14.0.0) (2021-10-10) [stable] ** New features Book: - New section added to ConvertType's documentation for annotating the PDF output images with coordinates on the edges of the images, or tangential size at certain redshift. This is done using the PGFPlots package of LaTeX, directly with the same fonts and graphical settings as your paper/slide, while being in vector graphics quality, and not requiring hundreds of dependencies (only LaTeX is necessary beyond Gnuastro). - New section to describe the precedence of Table operators in one call to Table. Since the number of operations on table columns/rows has greatly increased in the last few versions, knowing this precedence can minimize the number of calls to Table. - The section on reverse polish notation (used in Arithmetic, for images, and column arithmetic in Table) has been edited and extended to be more useful for a new user. - Due to the great expansion of the number of operators in the Arithmetic program and Column Arithmetic in the table program, the "Arithmetic operators" section of the book has now grouped similar operators in sub-sections to greatly help in finding a certain option. Arithmetic: - New operands (also available in Table's column arithmetic, the distance conversion operators were suggested by Markus Schaney): - box-around-ellipse: width and height of the box covering an ellipse. - au-to-pc: Convert Astronomical Units (AUs) to Parsecs (PCs). - pc-to-au: Convert Parsecs (PCs) to Astronomical Units (AUs). - ly-to-pc: Convert Light-years (LYs) to Parsecs (PCs). - pc-to-ly: Convert Parsecs (PCs) to Light-years (LYs). - ly-to-au: Convert Light-years (LYs) to Astronomical Units (AUs). - au-to-ly: Convert Astronomical Units (AUs) to Light-years (LYs). CosmicCalculator: - A warning is printed if the requested redshift is lower than 0.007 (corresponding to ~30Mpc in Plank 2018 cosmology). Because at these scales the peculiar velocity of galaxies may be significant compared to the Hubble flow (which is the basis of the calculations here). The warning can be suppressed with the '--quiet' option. This was suggested by Ignacio Trujillo. MakeCatalog: --areaerror: spatial resolution of image specified by user, used in estimating the surface brightness error. --sberror: error in measuring the surface brightness (mag/arcsec^2). MakeProfiles: - New type of profile showing the azimuthal angle (in degrees, along the elliptical circumference of fixed radius) of each pixel. In combination with the radial distance profile, you can now create complex features in polar coordinates, such as tidal tails or tidal shocks (using the Arithmetic program to mix the radius and azimuthal angle through a function to create your desired features). Implemented after discussions with Fernando Buitrago and Matthias Kluge. Match: - When called with '--notmatched --outcols=AAA,BBB', Match will append non-matching rows of second table into first table's rows (for columns 'AAA' and 'BBB' in example above, which are assumed to exist in both inputs, with same numeric datatype). This allows easy/clean merging of two catalogs that may have matching objects into one catalog without repetition. See description of '--outcols' in the Match manual for more. This feature was proposed by Juan Molina Tobar and Leslie Hunt. Sort-by-night (installed script) --stdintimeout: new option to set internal delay time for input from pipes (standard input). This is not for inputs to the script (which should always be files), but for the script's internal pipes. Statistics: --quantofmean: the quantile of the mean of the input dataset. this is a very good statistic to measure skewness in a distribution, see the description of this option in the book for more. Library: - Arithmetic macros: - GAL_ARITHMETIC_OP_BOX_AROUND_ELLIPSE - gal_wcs_write_wcsstr: wrapper of wcshdo of WCSLIB to simplify generic access to that low-level operation (has some extra sanity checks). - gal_units_au_to_pc: Convert Astronomical Units to Parsecs. - gal_units_pc_to_au: Convert Parsecs to Astronomical Units. - gal_units_ly_to_pc: Convert Light-years to Parsecs. - gal_units_pc_to_ly: Convert Parsecs to Light-years. - gal_units_ly_to_au: Convert Light-years to Astronomical Units. - gal_units_au_to_ly: Convert Astronomical Units to Light-years. ** Removed features ** Changed features All programs: --stdintimeout: default value changed from 0.1 seconds to 1.5 seconds to avoid too many crashes when command before the pipe takes longer (thus needing a manual change of this value). MakeProfiles: - The default output suffix (when no '--output' is given) is now '_profiles.fits'. Until now, when no output name was given, MakeProfiles just replaced the suffix with '.fits' (effectively assuming the input is a plain-text file). As a result, if the input catalog was a FITS file, it would be automatically written-over (causing an error: bug #60989). Match: - The two '--notmatched' and '--outcols' can be called together (to create a single catalog that appends the non-matching rows of second table with the rows of the first. Until this version, this would cause an error. Table - Column concatenation (adding columns from other files) is now done before all row selection or row re-ording operations (if called). Until now, adding columns from other files was done after all row selection or re-ordering, but this was not too practically useful. - Column arithmetic operators: - 'wcs-to-img' new name for old 'wcstoimg' operator. The new unit-conversion operators generally have a '-to-' between the units to help in readability. So to avoid confusion, this operator has also been changed. - 'img-to-wcs' new name for old 'imgtowcs' operator (see description of 'wcs-to-img' above). Library - gal_fits_key_write_filename: now has 'quiet' argument to avoid printing a warning. ** Bugs fixed bug #60725: MakeCatalog doesn't put comment on --halfsumsb column. bug #60776: Radial profile script not using standard deviation image, fixed by Zahra Sharbaf. bug #60778: Brightness error not NaN when all STD pixels are blank, reported by Zahra Sharbaf. bug #60826: Arithmetic won't delete existing file with tofile operators. bug #60881: Query segmentation fault when NED is called without a dataset. bug #60901: sort-by-night crash during make check due to stdintimeout, reported by Zahra Sharbaf. bug #60903: Increasing value of stdintimeout not effective beyond 1000000, reported by Zahra Sharbaf. bug #60909: WCS coordinate conversion not working with TPV distortion, fixed with the help of Mark Calabretta. bug #60923: Standard deviation calculation giving NaN values due to floating point errors, found and fixed by Natáli Anzanello. bug #60958: Warning on long filename not written in FITS keyword printed even when '--quiet' is called, found by Raúl Infante-Sainz. bug #60989: MakeProfiles deletes input fits catalog when no output name specified. bug #60999: No content check when plain-text table doesn't have metadata. bug #61007: Crash due to CFITSIO 4.0.0 version format change, reported by Vincenzo Testa and Zohreh Ghaffari. bug #61108: Plain text table metadata ignored when numeric data type was not understood, reported by Sepideh Eskandarlou. bug #61128: Radial profile: --instd and --stdhdu error when space used before value, found and fixed by Sepideh Eskandarlou. bug #61192: BuildProgram custom program linking problems on Debian-based OSs, reported by Raúl Infante-Sainz. bug #61244: Sum operator in arithmetic ignoring floating point images with blank values, found and reported by Giulia Golini and Raúl Infante-Sainz. bug #61287: Two "switch" blocks miss "break" in MakeCatalog when setting output column information, found and fixed by Vladimir Markelov. bug #61293: MakeCatalog not properly initializing the '--minvy' column when parsing clumps, found and fixed by Vladimir Markelov. * Noteworthy changes in release 0.15 (library 13.0.0) (2021-05-30) [stable] ** New features New programs: - astscript-ds9-region: Given a table (either as a file or from standard input), create an SAO DS9 region file from the requested positional columns (WCS or image coordinates). For example with the command below you can select certain rows of a given table, and show them over an image: asttable table.fits --range=MAGNITUDE,18:20 --column=RA,DEC \ | astscript-ds9-region --column=1,2 --radius=0.5 \ --command="ds9 image.fits" This script was written with the help of Samane Raji. - astscript-radial-profile: Measure the radial profile of an object on an image. The profile can be centered anywhere in the image and any circular, or elliptical distance can be defined. The output is a table with the profile's value in one column and any requested measure in the other columns (any MakeCatalog measurement is possible). This script was written and is maintained by Raúl Infante Sainz. Zahra Sharbaf and Carlos Morales Socorro also contributed. All programs: - FITS files that don't have a recognized FITS suffix (e.g., '.fits', '.fit', '.fits.gz', etc) will also be recognized. Generally, it is good practice to keep a suffix to be more human and computer friendly (checking three or four characters is much faster than opening the file and checking the contents to conform with the FITS standard), but when you are given such a file (by someone else), this new feature can be handy. Suggested by Clotilde Laigle and Leigh Smith. --wcslinearmatrix: new option in all programs that lets you select the output WCS linear matrix format. It takes one of two values: 'pc' (for the 'PCi_j' formalism) and 'cd' (for 'CDi_j'). Until now, the outputs were always stored in the 'PCi_j' formalism (which is still the recommended format). Book: - New "Image surface brightness limit" section added to the third tutorial (on "Detecting large extended targets"). It describes the different ways to measure a dataset's surface brightness limit and upper-limit surface brightness, while discussing their differences. This tutorial was written with the help of Ignacio Trujillo and Raúl Infante Sainz. Arithmetic: - New operators (all also available in Table's column arithmetic). - sin: Trigonometric sine (input in degrees). - cos: Trigonometric cosine (input in degrees). - tan: Trigonometric tangent (input in degrees). - asin: Inverse of trigonometric sine (output in degrees). - acos: Inverse of trigonometric cosine (output in degrees). - atab: Inverse of trigonometric tangent (output in degrees). - sinh: Hyperbolic sine. - cosh: Hyperbolic cosine. - tanh: Hyperbolic tangent. - asinh: Inverse of hyperbolic sine. - acosh: Inverse of hyperbolic cosine. - atanh: Inverse of hyperbolic tangent. - mknoise-sigma: Add Gaussian noise with the fixed sigma. - mknoise-poisson: Add Poisson noise with the given background. - mknoise-uniform: Add uniform noise around existing value. - counts-to-mag: Convert counts to magnitudes with given zero point. - mag-to-counts: Convert magnitudes to counts with given zero point. - counts-to-jy: Convert counts to Janskys through a zero point based on AB magnitudes. Trigonometric operators proposed by Zahra Sharbaf and Samane Raji. --envseed: new option to get random number generator settings for the new 'mknoise-sigma' and 'mknoise-poisson' operators from the environment for reproducibility (see "Generating random numbers" section in manual). ConvertType: --globalhdu: Use a single HDU identifier for all the input files files. Its operation is identical to the similarly named option in Arithmetic. Until now it was necessary to call '--hdu' three times if you had three input FITS files with input in the same HDU. Crop: --polygon: now also accepts an SAO DS9 region file as input (as well as coordinates). This enables you to draw your polygon over the image through the GUI interface of SAO DS9, save your polygon as a "region" file, and feed the region file into Crop directly. Until now, the only way to define the polygon was to give all the polygon vertice coordinates, one-by-one to the '--polygon' option (which was tedious and buggy), but is still possible. This was implemented by Natáli Anzanello. Fits: --hastablehdu: print 1 if at least one table HDU exists in file. --hasimagehdu: print 1 if at least one image HDU exists in file. --listallhdus: print all HDU names (or numbers when no name exists). --listtablehdus: print table HDU names (or numbers when no name exists). --listimagehdus: print image HDU names (or numbers when no name exists). --printkeynames: Print all keyword names in current HDU. --wcscoordsys: convert the WCS coordinate system of the input into any recognized coordinate system. It currently supports: equatorial (J2000, B1950), ecliptic (J2000, B1950), Galactic and Supergalactic. For example if 'image.fits' is in galactic coordinates, you can use this command to convert its WCS to equatorial (J2000): astfits image.fits --wcscoordsys=eq-j2000 This option only works with WCSLIB 7.5 and above (released in March 2021), otherwise it will abort with an informative warning. This was done with the help of Mark Calabretta. --keyvalue: Print only the values of the FITS keywords given to this option in separate columns. This option can take multiple keyword names and many FITS files. Thus generating a table of keyword values (with one row per file where the first column is the file name). Its output can thus be written as a Table file or be piped to the Table program for selecting a certain sub-set of your FITS files based on key values, or sorting them for example. This was added after a discussion with Alberto Madrigal. MakeCatalog: - Newly added measurement columns: --upperlimitsb: upper-limit surface brightness for the given label (object or clump). This is useful for measuring a dataset's realistic surface brightness level for each labeled region by random positioning of its footprint over undetected regions (not extrapolated from the single-pixel noise level like the "surface brightness limit"). NoiseChisel: - Can now work on 3D datacubes. Since the configuration parameters are different from images, it is recommended to manually set the 3D configuration (the '...' can be the input image and options): astnoisechisel --config=/usr/local/etc/astnoisechisel-3d.conf ... Alternatively, you can set an 'astnoisechisel-3d' alias like below and always easily run 'astnoisechisel-3d' on cubes. alias astnoisechisel-3d="astnoisechisel --config=/usr/local/etc/astnoisechisel-3d.conf" Segment: - Can now work on 3D datacubes. Similar to NoiseChisel, it requires a separate set of default configurations, so please see the note under NoiseChisel above. Table: - When given a value of '_all', the '--noblank' option (that will remove all rows with a blank value in the given columns) will check all columns of the final output table. This is handy when you want a "clean" (no NaN values in any column) table, but the table has many columns. Until now, '--noblank' needed the name/number of each column to "clean". --rowlimit: new option to specify the positional interval of rows to show. Until now, the '--head' or '--tail' options would just allow seeing the first or last few rows. You can use this new option to view a contiguous set of rows in the middle of the table. --rowrandom: Make a random selection of the rows. This option is useful when you have a large table and just want to see a random sub-set of the rows. It takes an integer, selects that many rows from the input randomly. --polygon: Similar to same option in Crop (mentioned above). - New column arithmetic operators: - 'set-AAA' operator (which allows storing the popped operand into a named variable for easy usage in complex operations) is also usable in Table's column arithmetic. Until now this operator was only available in the Arithmetic program (for operation on images). - 'date-to-sec' Convert FITS date format ('YYYY-MM-DDThh:mm:ss') into seconds from the Unix epoch (1970-01-01,00:00:00 UTC). This can be very useful in combination with the new '--keyvalue' option of the Fits program to operate on FITS dates (for example sort your FITS images based on observation time). Query: - The Galactic extinction calculator of the NASA/IPAC Extragalactic Database (NED) is now available for any coordinate with a command like below. For more, see the manual (the description of the 'extinction' dataset of NED in the "Available datasets" section). astquery ned --dataset=extinction --center=49.9507,41.5116 This feature was suggested by Ignacio Trujillo and implemented with the help of Joseph Mazzarella. Library: - New arithmetic operator macros (for the 'gal_arithmetic' function): - GAL_ARITHMETIC_OP_SIN: sine (input in deg). - GAL_ARITHMETIC_OP_COS: cosine (input in deg). - GAL_ARITHMETIC_OP_TAN: tangent (input in deg). - GAL_ARITHMETIC_OP_ASIN: Inverse sine (output in deg). - GAL_ARITHMETIC_OP_ACOS: Inverse cosine (output in deg). - GAL_ARITHMETIC_OP_ATAN: Inverse tangent (output in deg) - GAL_ARITHMETIC_OP_ATAN2: Inverse tangent (with two inputs, out deg). - GAL_ARITHMETIC_OP_SINH: Hyperbolic sine. - GAL_ARITHMETIC_OP_COSH: Hyperbolic cosine. - GAL_ARITHMETIC_OP_TANH: Hyperbolic tangent. - GAL_ARITHMETIC_OP_ASINH: Inverse hyperbolic sine. - GAL_ARITHMETIC_OP_ACOSH: Inverse hyperbolic cosine. - GAL_ARITHMETIC_OP_ATANH: Inverse hyperbolic tangent. - GAL_ARITHMETIC_OP_MKNOISE_SIGMA: Add fixed-sigma noise. - GAL_ARITHMETIC_OP_MKNOISE_POISSON: Add Poisson noise. - GAL_ARITHMETIC_OP_COUNTS_TO_JY: Convert counts to Janskys. - New arithmetic flag macros: - GAL_ARITHMETIC_FLAG_ENVSEED: read random number generator seed from env. - GAL_ARITHMETIC_FLAG_QUIET: don't print any warnings by some operators. - WCS coordinate system macros: - GAL_WCS_COORDSYS_EQB1950: 1950.0 (Besselian-year) equatorial coords. - GAL_WCS_COORDSYS_EQJ2000: 2000.0 (Julian-year) equatorial coords. - GAL_WCS_COORDSYS_ECB1950: 1950.0 (Besselian-year) ecliptic coords. - GAL_WCS_COORDSYS_ECJ2000: 2000.0 (Julian-year) ecliptic coords. - GAL_WCS_COORDSYS_GALACTIC: Galactic coordinates. - GAL_WCS_COORDSYS_SUPERGALACTIC: Supergalactic coordinates. - gal_array_file_recognized: For FITS images, check contents also. - gal_ds9_reg_read_polygon: Parse the polygon from an SAO DS9 region file. - gal_fits_file_recognized: Check the file contents when suffix isn't FITS. - gal_units_counts_to_mag: Convert counts to magnitudes. - gal_units_mag_to_counts: Convert magnitudes to counts. - gal_units_counts_to_jy: Convert counts to Janskys. - gal_wcs_coordsys_from_string: WCS coordinate system from string. - gal_wcs_coordsys_identify: Parse WCS struct to find coordinate system. - gal_wcs_coordsys_convert: Convert the coordinate system of the WCS. ** Removed features ** Changed features astscript-sort-by-night: - Thanks to the new features in the Fits and Table programs (described above), the efficiency of this script has improved dramatically (from 19 seconds to 0.42 seconds for about 650 FITS files used in the test!). - The default end to a "night" is set to 11:00a.m. Until now it was 9:00a.m. But in some cases, calibration images may be taken after that. So to be safer in general it was incremented by 2 hours. MakeCatalog: - Surface brightness limit (SBL) calculations are now written as standard FITS keywords in the output catalog/table. Until now, they were simply stored as 'COMMENT' keywords with no name so it was hard to parse them automatically. From this version, the following keywords are also written into the output table(s), see the "MakeCatalog output" section of the book for more: 'SBLSTD', 'SBLNSIG', 'SBLMAGPX', 'SBLAREA', 'SBLMAG'. - Upper-limit (UP) settings are also written into the output tables as keywords (like surface brightness limit numbers above): 'UPNSIGMA', 'UPNUMBER', 'UPRNGNAM', 'UPRNGSEE', 'UPSCMLTP', 'UPSCTOL'. Library: - GAL_ARITHMETIC_FLAG_FREE new name for GAL_ARITHMETIC_FREE. - GAL_ARITHMETIC_FLAG_NUMOK new name for GAL_ARITHMETIC_NUMOK. - GAL_ARITHMETIC_FLAG_INPLACE new name for GAL_ARITHMETIC_INPLACE. - GAL_ARITHMETIC_FLAGS_BASIC new name for GAL_ARITHMETIC_FLAGS_ALL. - gal_fits_key_write_wcsstr: also takes WCS structure as argument. - gal_fits_key_read_from_ptr: providing a numerical datatype for the desired keyword's value is no longer mandatory. When not given, the smallest numeric datatype that can keep the value will be found and used. - gal_wcs_read: allows specifying the linear matrix of the WCS. - gal_wcs_read_fitsptr: allows specifying the linear matrix of the WCS. ** Bugs fixed bug #60082: Arithmetic library crash for integer operators like modulo bug #60121: Arithmetic segfault when multi-operand output given to set- bug #60368: CosmicCalculator fails --setdirconf when redshift isn't given, reported by Sepideh Eskandarlou bug #60483: No warning when file given to '--config' doesn't exist, reported by Sepideh Eskandarlou bug #60484: Match crashes when called with --coord and --ccol2 (together) bug #60603: Table crashes with an empty input and --range, reported by Sepideh Eskandarlou. bug #60619: Crop crashes with differing image and WCS dimension bug #60634: Crop's '--hstartwcs' and '--hendwcs' wrong with comment keys bug #60644: MakeCatalog's Brightness error over-estimated in images with noise STD less than 1. This was not an issue for S/N or Magnitude error on the same image (already corrected there). * Noteworthy changes in release 0.14 (library 12.0.0) (2021-01-25) [stable] ** New features Book: - Tutorial on "Detecting large extended targets" improved with better NoiseChisel configuration, and more clear description. - New sub-section on "Memory management" in the "Common program behavior" chapter. It fully describes how to optimally deal with large datasets that may exceed your system's RAM. - Examples and better description added to many operators in the "Arithmetic operators" subsection of the Arithmetic program's section. New program: - Query ('astquery') is a new program to query to external datasets and retrieve the resulting datasets from the command-line. It is possible to get list of datasets or column names from the databases. The basic spatial query (finding objects in the vicinity of a certain point) can be managed without knowing the query language of the database: with basic options (like '--center' with '--radius' or '--width'), or an input image that has WCS. Currently Query supports VizieR (containing +20500 datasets, making it the largest database in astronomy), NED, as ESA's Gaia database and ASTRON. See the new "Query" section of the book (under the "Data containers" chapter) for more. All programs: - Plain text table inputs can have floating point columns that are in sexagesimal format of '_h_m_s' or '_d_m_s' (where '_' is a number). These are the classical format to respectively represent Right Ascension (RA) and Declination (Dec). They will be directly read as a single floating point number (in units of degrees) into memory. Therefore the same column of a plain-text table, can be degrees in some rows and sexagesimal in others. Besides large tables, with this feature, conversion to sexagesimal coordinates to degrees becomes very easy, for example: echo "7h34m35.5498 31d53m14.352s" | asttable Recall that the inverse can also be done with the more general column arithmetic: echo "113.64812416667 31.88732" \ | asttable -c'arith $1 degree-to-ra $2 degree-to-dec' - If input is a HEALpix grid (1D table column that represents the 2D spherical representation of datasets), the programs will print a warning, suggesting to use the 'HPXcvt' utility of WCSLIB. Arithmetic: - New operators: - 'interpolate-maxofregion': interpolate connected blank regions with the maximum value that is immediately touching it. This can be used to fill the blank centers of saturated stars for example. - 'interpolate-minofregion': similar to 'interpolate-maxofregion', but for the minimum. - 'makenew': new operator to create an empty (zero-valued) new dataset with given dimension and size (given as operands). Crop: --primaryimghdu: Write the final cropped image into the primary (or 0-th) extension of the output FITS file, so the output only has one extension. Fits: - New '--skycoverage' option will report the area of the input image in RA/Dec, both in units of center/width, and box minimum/maximum format. This is paritcularly useful in combination with the new 'astquery' option, to easily search the contents of external databases within the image. MakeCatalog: --maximum: maximum value of labeled regions pixels (clump/object). --areaarcsec2: area of labeled region (clump/object) in arcsec^2. --surfacebrightness: the surface brightness of the labeled region. --fwhm: observed FWHM in pixels (non-parametric), along the major axis. --halfmaxarea: number of pixels with a value larger than half the maximum. --halfmaxradius: radius of region that is larger than half the maximum. --halfmaxsum: sum of pixels with a value larger than half the maximum. --halfmaxsb: surf. brightness within half of the maximum. --fracmax: fractions to use in '--fracmaxarea1' or '--fracmaxarea2'. --fracmaxsum1: sum of pixels brighter than first given fraction of max. --fracmaxsum2: sum of pixels brighter than second given fraction of max. --fracmaxarea1: number of pixels brighter than first given fraction of max. --fracmaxarea2: number of pixels brighter than second given fraction of max. --fracmaxradius1: radius derived from '--fracmaxarea1'. --fracmaxradius2: radius derived from '--fracmaxarea2'. --halfsumsb: Surface brightness within area reported by '--halfsumarea'. --halfsumarea: area containing half of the summed object or clump values. --halfsumradius: radius derived from '--halfsumarea', underestimates r_e. --areaminv: the number of pixels that are equal to the minimum value. --areamaxv: the number of pixels that are equal to the maximum value. - New columns to return the position of pixel with minimum or maximum value: '--minvx', '--maxvx', '--minvy', '--maxvy', '--minvz', '--maxvz'. MakeNoise: --bgisbrightness: new option to say that the value of '--background' (used to simulate Poisson noise) should be interpreted as brightness, not magnitude. MakeProfiles: - It is now possible to make any custom radial profile with the 'custom' profile (with code '8'). A table should be given to the new '--customtable' option which will define each radial interval and the value to use for that radial interval. See the description of '--customtable' for more. Statistics: - 2D histograms can now be built as a FITS image with a linear WCS that contains axis values and box size. This allows using the power of FITS viewers for plotting/inspecting distributions of two columns in a table relative to each other (for example color-magnitude plots). You can also convert these 2D histogram images to PDF or JPEG with Gnuastro's ConvertType to directly use in your papers/reports (see the newly added "2D histogram as an image" section of the book for more). Table: - New '--noblank' option will remove all rows in output table that have at least one blank value in the specified columns. For example if 'table.fits' has blank values (NaN in floating point types) in the 'magnitude' and 'sn' columns, with '--noblank=magnitude,sn', you can be sure that all rows with blank values in these columns have been removed. - New trigonometric operators for column-arithmetic (inputs in units of degrees): 'sin', 'cos' and 'tan'. Their inverse trigonometric (outputs in units of degrees) have also been added: 'asin', 'acos' and 'atan'. The 'atan2' operator (inverse tangent that preserves the quadrant, see its description in the book) is also now available. - New hyperbolic operators for column-arithmetic: 'sinh', 'cosh' and 'tanh'. Their inverse has also been added: 'asinh', 'acosh' and 'atanh'. Library: - GAL_ARITHMETIC_OP_MAKENEW: new 'makenew' operator. - gal_binary_connected_adjacency_list: finding connected components without a square adjacency matrix (which can consume major RAM). - gal_blank_flag_remove: Remove all flagged elements in a dataset. - gal_blank_remove_rows: remove all rows that have at least one blank. - gal_dimension_dist_elliptical: Elliptical dist. of a point from center. - gal_fits_hdu_is_healpix: Return 1 if HDU is a HEALpix grid. - gal_fits_hdu_datasum: calculate DATASUM of given HDU in given FITS file. - gal_fits_hdu_datasum_ptr: calculate DATASUM of opened FITS file pointer. - gal_fits_key_list_comment_add: add a COMMENT keyword to the keyword list. - gal_fits_key_list_comment_add_end: add a COMMENT keyword to end of list. - gal_pointer_allocate_ram_or_mmap: allocate in RAM or memory-mapped file. - gal_pointer_mmap_free: "free" (actually delete) the memory-mapped file. - gal_wcs_create: create WCSLIB-compatible WCS from raw values. - gal_wcs_coverage: Return the sky coverage of given image HDU. - gal_wcs_dimension_name: return the name of the requested WCS dim. ** Removed features ** Changed features All programs: - Memory management: Until now, an internal array was only allocated in the RAM when its size was smaller (in bytes) than the value given to the '--minmapsize' option. But this was annoying/buggy when the system has enough RAM to keep large files. From this version, all Gnuastro programs will first attempt to write the array in RAM, only when it fails (there is no more RAM left), will they use a memory-mapped file (which can dramatically slow down the program). Please see the newly added "Memory management" section of the book for a complete explanation of Gnuastro's new memory management strategy. - When an array needs to be memory-mapped (read into a file on HDD/SSD, not RAM, usually due to RAM limitations), it is written in a 'gnuastro_mmap' directory of the running directory, not the hidden '.gnuastro_mmap' directory. Since the files in this directory are usually large, it is better that the user sees them by default (in case the program crashes and they aren't deleted). --interpnumngb: the default value has been increased to 15 (from 9). The reason for this is that we now have a more robust outlier removal algorithm (see description under "NoiseChisel & Statistics"). Crop: - When cropping a single image in WCS mode, there is no longer any limitation on the WCS. Until now for all WCS mode crops, it was necessary for the WCS to be aligned to the celestial coordinates. But from this version, this is only necessary when cropping from many files (and stitching them together where necessary). For WCS-mode crops of a single image, any WCS that is recognized by WCSLIB is fine. Fits: - The '--pixelscale' option also prints the pixel area (for 2D inputs, or 2D slices of 3D inputs) and the voxel volume (for 3D inputs). Until now, it would only print the pixel scale along each dimension. - When printing FITS file HDU information (no options given), a new "Comments" column may be printed for each HDU in the end of the line. It will be printed if special situations are found (for example a 2D HEALPix grid, that is usually stored as a 1D array/column). NoiseChisel & Statistics: - New algorithm used to reject outlying tiles. In NoiseChisel this is done when estimating the quantile threshold, the pseudo-detection threshold and the final Sky value. In Statistics, its just the Sky value. Unlike the previous method that used the global distribution of tile values to identify outliers, the new algorithm uses a relative measure. See the book for more. Since outliers are now rejected more robustly, the default value of '--meanmedqdiff' has been increased to 0.01 (was 0.005) and '--outliersigma' has been decreased to '5' (was 10). Also 'smoothwidth' has been increased from '3' to '5' to have smoother tessellation values. Statistics: - The '--histogram2d' now takes a string argument: either 'image' or 'table'. For the old behavior please use '--histogram2d=table'. See the new features above for the 'image' mode. Table: - Column arithmetic operators 'degree-to-ra' and 'degree-to-dec' will return the sexagesimal format of '_h_m_s' and '_d_m_s' respectively. Until this version, they would both use colons as delimiters ('_:_:_'). Library: - gal_pointer_mmap_allocate: new name for 'gal_pointer_allocate_mmap'. - gal_threads_dist_in_threads: now accounts for billions of threads, thus includes memory management options. - gal_threads_spin_off: now accounts for memory management. - gal_units_degree_to_ra: new 'usecolon' argument to optionally format output string with colons as delimiters ('_:_:_'). When this option is zero, the string will be in the '_h_m_s' format. - gal_units_degree_to_dec: similar to 'gal_units_degree_to_ra', but when 'usecolon' is zero, the string will be in the '_d_m_s' format. ** Bugs fixed bug #59017: Segment's object IDs are not thread-safe (i.e., reproducible). bug #59105: Column arithmetic operator degree-to-ra, returning to dec. bug #59136: Makeprofiles with --replace is not thread-safe. bug #59155: Match cannot find the proper row when coordinates have NaN. bug #59371: MakeCatalog crash with clumps on non-contiguous object labels. bug #59400: CosmicCalculator fails --printparams when redshift isn't given. bug #59459: Unclear WCS when both PC and CD exist in input, but conflict. bug #59625: MakeProfiles uses last --kernel, if it is called more than once. bug #59700: Segment's excessive RAM usage when many clumps over a detection. bug #59765: MakeCatalog crash when to-be-subtracted Sky is a single-element per tile tessellation (e.g., NoiseChisel's '--oneelempertile'). * Noteworthy changes in release 0.13 (library 11.0.0) (2020-09-06) [stable] ** New features All programs: - When reading plain-text tables, the blank value for numeric columns can be any string (specified in the special comment-line format described in the "Gnuastro text table format" of the manual). Until now, it had to be a number in the same type. Arithmetic: - New operators: - interpolate-minngb: Fill blanks with minimum of nearest neighbors. - interpolate-maxngb: Fill blanks with maximum of nearest neighbors. This can be useful to fill the blank values of saturated stars for example. - To force integers to floats, you can also put a '.' or '.0' after them. Until now, it was only possibly by putting an 'f' after them. Hence while '5' will be read as an integer, '5.', '5.0' or '5f' will be read as floating point. This also applies to column arithmetic in Table. ConvertType: - New colormap: 'sls-inverse' is the inverse of the SLS color, good for printing because of a white background. CosmicCalculator: --velocity: Velocity (in km/s) to use instead of input redshift. --usedvelocity: Print the velocity (in km/s) at input redshift. --listlinesatz: Print the wavelength of all pre-defined spectral lines at given redshift as a simple table with the line names. This is very convenient and can be used in conjunction with '--obsline' for example to print the observed wavelength of all lines when Lyman-alpha is at 4000 Angstroms with this simple command: astcosmiccal --obsline=lyalpha,4000 --listlinesatz FITS: - New '--pixelscale' option will return the size of pixels in each dimension in the "world coordinates". - New '--wcsdistortion' option allows conversion between the various WCS distortions. For example if you have a FITS image with the TPV-based WCS distortion, and you would like to convert it to a SIP-based distortion, you can simply run 'astfits --wcsdistortion=SIP' on the file. The inverse conversion is also supported (from SIP to TPV). Statistics - New feature to create a 2D-histogram using two input columns (useful when you have lots of points that are too dense and may hide important features). This mode can be activated with the new '--histogram2d' option. The binning of the first (X axis) column is specified with the same 1D histogram options. The second column's binning is configured with the following options: --numbins2: Number of bins along the second column. --greaterequal2: Only second column points that are larger than this. --lessthan2; Only second column points that are less than this. --onebinstart2: Make sure one bin starts at the value given here. Table: - New '--catcolumns' to specify which columns to concatenate (or append) to the output. You can specify the file name containing the columns to append with the '--catcolumnfile' option and '--catcolumnhdu' (see changed features because until now they had different names). - New '--catcolumnsrawname' will leave the name of concatenated (appended) columns unchanged. By default the names of the appended columns will be appended with a '-N' (where 'N' is a counter for the file that is used to append columns). The default behavior is to avoid multiple columns having the same name. - New '--colmetadata' option to add/update column metadata (name, units or comments) just before writing the output. This is a very useful feature in combination with column arithmetic or column concatenation because it will allow you to update the new column metadata in the same command. See the manual for more. Library: - Spectral lines library: SiIII, OIII, CIV, NV and rest of Lyman series. - GAL_CONFIG_HAVE_WCSLIB_DIS_H: if the host's WCSLIB supports distortions. - GAL_CONFIG_HAVE_WCSLIB_MJDREF: if the host's WCSLIB reads MJDREF keyword. - gal_cosmology_velocity_from_z: Calculate velocity from redshift. - gal_cosmology_z_from_velocity: Calculate redshift from velocity. - gal_data_array_ptr_calloc: Allocate array of pointers to gal_data_t - gal_data_array_ptr_free: Free all the datasets within the array and itself. - gal_fits_key_list_title_add: Add a title key word to the list. - gal_fits_key_list_title_add_end: Add a title key word to the list's end. - GAL_INTERPOLATE_NEIGHBORS_METRIC_RADIAL: Radial metric for interpolation. - GAL_INTERPOLATE_NEIGHBORS_METRIC_MANHATTAN: Mahattan distance. - GAL_INTERPOLATE_NEIGHBORS_METRIC_INVALID: For error-handling/completeness. - GAL_INTERPOLATE_NEIGHBORS_FUNC_MIN: Use minimum for interpolation. - GAL_INTERPOLATE_NEIGHBORS_FUNC_MAX: Use maximum for interpolation. - GAL_INTERPOLATE_NEIGHBORS_FUNC_MEDIAN: Use median for interpolation. - GAL_INTERPOLATE_NEIGHBORS_FUNC_INVALID: for error-handling/completeness. - gal_kdtree_create: Create a k-d tree for optimal spatial searching. - gal_kdtree_nearest_neighbour: Find the nearest neighbor using a k-d tree. - gal_statistics_histogram2d: Generate 2D histogram from two columns. - GAL_WCS_FLTERROR: Limit to identify a floating point error for WCS. - gal_wcs_write: Write the given WCS into a FITS extension with no data. - gal_wcs_clean_errors: clean major WCS components from errors specified by the FITS keyword 'CRDER', or floating point errors. - gal_wcs_distortion_from_string: Return distortion string/name from ID. - gal_wcs_distortion_to_string: Return distortion ID from string/name. - gal_wcs_distortion_identify: Identify the distortion of given WCS. - gal_wcs_distortion_convert: Convert between various WCS distortions. ** Removed features ** Changed features Arithmetic: - The 'pow' operator can also accept integer inputs. This also applies to column arithmetic in Table. MakeProfiles: - The status of every created profile (along with the number of remaining profiles) is no longer printed when there are more than 50 profiles. This is done because printing itself can slow down the program an in a general/automated script this info is redundant. Table: --catcolumnfile ('-L') is new name for '--catcolumn' ('-C'). --catcolumnhdu is new name for '--catcolhdu' (short option name hasn't changed). Library: - gal_fits_key_list_add: new 'ufree' argument to optionally free units. - gal_fits_key_list_add_end: similar to 'gal_fits_key_list_add'. - gal_interpolate_neighbors: new name for gal_interpolate_close_neighbors. - gal_statistics_outlier_bydistance: new name for the old 'gal_statistics_outlier_positive'. It can now use the same algorithm for negative outliers with a new argument. - gal_txt_write: Now accepts a new argument for keyword lists. - gal_type_string_to_number: Numbers ending in '.' or '.0' will be parsed as floating point. Until now, it would only parse numbers as floating point if they had non-zero decimals. ** Bugs fixed bug #58434: MakeCatalog crash when ordering is required and no usable pixels. bug #58455: Timezone is not portable and uses flag instead of seconds. bug #58696: Warp with --centeroncorner --scale making wrong size. bug #58774: Warp' s output on a cube is a 2D image or wrong size. bug #58809: NoiseChisel not removing negative outlier tiles. bug #58833: Segment crashes when detection map has blank pixels. bug #58835: Floating point errors when comparing pixel scale in Crop. bug #58898: Plain text string columns touching next, clear first character. bug #58901: Blank values for non-standard integer types in FITS tables. bug #58974: WCS conversion not reasonable on processed TPV data. bug #59019: FITS Table crash when TFORM comes before TNULL. * Noteworthy changes in release 0.12 (library 10.0.0) (2020-05-20) [stable] ** New features Arithmetic: - New 'quantile' operator for coadding datasets. - New 'size' operator to report length of dataset in requested dimension. - When '--wcsfile' is given the value 'none', output will not have any WCS. CosmicCalculator: --listlines: list the pre-defined spectral line wavelengths and names (which you can use with the '--obsline' and '--lineatz' options). This is convenient when you forget the specific name of the spectral line used within Gnuastro. Crop: --polygon: can now also crop concave polygons (when atleast one inner angle is more than 180 degrees). Concave polygons occur a lot in deep astronomical imaging: in the shape of the deepest regions. --polygonsort: Sort the given set of vertices to the '--polygon' option. For a concave polyton, the sorting will be correct, but for a convex polygon, there is no unique solution/sorting, so it may not be what you expect, see the manual. Fits: --datasum: Calculate and print the given HDU's "datasum" to stdout. --datetosec: Can also account for 'Z' in the end of the date-time string. According to 'https://www.w3.org/TR/NOTE-datetime', a 'Z' effectively means no time zone, or UTC time (which is the default in FITS). It still doesn't account for time zone hours of the w3.org standard. MakeCatalog: --sigmaclip: define sigma-clipping parameters for the new '--sigclip-*' columns. --forcereadstd: Read the standard deviation image even if not needed by any columns. This is useful when you want the surface brightness limit, but don't need any error-related columns. New output columns: --sigclip-number: Number of sigma-clipped pixels in object/clump. --sigclip-median: Sigma-clipped median of pixels in object/clump. --sigclip-mean: Sigma-clipped mean of pixels in object/clump. --sigclip-std: Sigma-clipped standard deviation of pixels in object/clump. Table: --equal: Can now work on columns with string type also. --notequal: Can now work on columns with string type also. --polygon: Polygon to use in '--inpolygon' or '--outpolygon'. --inpolygon: Select rows that are inside the polygon of '--polygon'. --outpolygon: Select rows that are outside the polygon of '--polygon'. --catcolumn: Concatenate tables by column (keeping number of rows fixed). --catcolhdu: Specify the HDU/extension of the FITS files of --catcolumn. - New operators in column arithmetic: - 'ra-to-degree': Convert Right Ascension (HH:MM:SS) to degrees. - 'dec-to-degree': Convert Declination (DD:MM:SS) to degrees. - 'degree-to-ra': Convert degrees to Right Ascension (HH:MM:SS). - 'degree-to-dec': Convert degrees to Declination (HH:MM:SS). - 'distance-flat': Distance between two points, assuming flat space. Library: - GAL_SPECLINES_INVALID_MAX: Total number of spectral lines, plus 1. - GAL_ARITHMETIC_OP_QUANTILE: operator for 'gal_arithmetic'. - gal_txt_trim_space: trim white space before and after a string. - gal_polygon_is_convex: identify if a polygon is convex or concave. - gal_polygon_is_inside: if point is inside polygon (convex or concave). - gal_polygon_is_counterclockwise: check if polygon is counter-clockwise. - gal_polygon_to_counterclockwise: convert to counter-clockwise if it isn't. - gal_polygon_vertices_sort: un-ordered vertices to concave/convext polygons. - gal_units_extract_decimal: Extract numbers from strings like "A:B:C". - gal_units_ra_to_degree: Convert RA (HH:MM:SS) to degrees. - gal_units_dec_to_degree: Convert Dec (DD:MM:SS) to degrees. - gal_units_degree_to_ra: Convert degrees to RA (DD:MM:SS). - gal_units_degree_to_dec: Convert degrees to Dec (DD:MM:SS). ** Removed features ** Changed features All programs and libraries: --minmapsize: Gnuastro's programs no longer attempt to write memory-mapped files under '.gnuastro'. They will only attempt to write them under the '.gnuastro_mmap' directory. Until now, when an internal array needed to be memory-mapped, Gnuastro's programs (through the 'pointer.h' library) would first try writing the mmap files in the '.gnuastro' directory. When it failed it would attempt writing in the '.gnuastro_mmap' directory. However, '.gnuastro' is also used to store configuration files (which are hand-written and thus valuable). Mixing the two types of source (configuration files) and automatically generated (memory-mapped) files is very problematic. - FITS ASCII tables: When a column has a floating point type, but its ASCII string can't be parsed as a number, it will be read as a NaN. Until now, the corresponding program/library would abort, printing the problematic string and its location. Crop: --polygon: by default it will no longer attempt to sort the polygon vertices, sorting can be requested with the new '--polygonsort' option. --polygonout: is the new name for '--outpolygon'. Having 'polygon' at the start of the option name, makes it easier to find in the help list and also to understand generally. MakeCatalog: - Until now, if no standard deviation image was requested, MakeCatalog wouldn't include any surface brightness limit metadata in its output. Now, those two lines are filled, but with a notice on the cause (that there is no standard deviation image), and suggesting solutions. NoiseChisel: - Until now, when NoiseChisel didn't detect any pixels, it just printed a message and wouldn't not make any output file. This was very inconvenient in general scripts. From now on, in this scenario, an output file will be created and the detection map will only have a value of zero. As a result, the Sky and Sky standard deviation extensions will be measured over all the tiles. Table: - In Column arithmetic, when columns must be specified by their number, that number should be distinguished with a '$' before it (for example '$1' means the first column). Until now, this character was 'c', but the new identifying character is very similar to AWK, allowing easier adoption and is also more clear. It is just important to put the total 'arith' string within single quotes, not double quotes. - Operators: - 'distance-on-sphere': New name for old `angular-distance' operator. Library: - gal_polygon_is_inside_convex: new name for 'gal_polygon_pin'. ** Bugs fixed bug #57300: MakeCatalog memory crash when input dataset has units. bug #57301: MakeCatalog using river sum instead of mean times by clump area. bug #57921: Arithmetic's interpolation operator not reading metric. bug #57989: Warp not accounting for translation in pixel grid. bug #57995: Fits lib's date to second function affected by host's timezone. bug #58315: Some NaNs with sigma-clip operators in Arithmetic and one input. bug #58371: Table crashes with a commented newline in the columns. * Noteworthy changes in release 0.11 (library 9.0.0) (2019-11-25) [stable] ** New features Book: - The "General program usage tutorial" now has a section on how to write scripts effectively to automate your analysis. Arithmetic: - The new 'add-dimension' operator will stack the popped operands in a higher-dimensional dataset. For example to build a 3D cube from individual 2D images/slices. --onedonstdout: when the output is one-dimensional, print the values on the standard output, not into a file. BuildProgram: - Will use common environment variables like LDFLAGS, CPPFLAGS and CC to help in customizing the build of your program. --cc: custom C compiler to use. Until now, 'gcc' was hard-coded into the source and there was no way to choose a custom C compiler. --noenv: With this option, no environment variables will be read. ConvertType: - New 'viridis' colormap (value for the '--colormap' option). This is the default colormap of Python's Matplotlib, and is available in many other plotting tools like LaTeX's PGFPlots. Convolve: - Spatial domain convolution now possible on 3D data cubes (with a 3D kernel). CosmicCalculator: --lineatz: return the observed wavelength of a line if it was emitted at the redshift given to CosmicCalculator. You can either use known line names, or directly give a number as any emitted line's wavelength. MakeCatalog: - Catalogs from 3D inputs now available, with the following new options, see book for more. --spectrum: label's spectrum (across the third dimension). --z: Flux-weighted position in 3rd dimension. --geoz: Geometric center in third FITS axis. --minz: Minimum third FITS axis position. --maxz: Maximum third FITS axis position. --clumpsz: Flux weighted center of all clumps in object in 3rd dim. --clumpsgeoz: Geometric center of all clumps in object in 3rd dim. --w3: Flux weighted center in third WCS axis. --geow3: Geometric center in third WCS axis. --clumpsw3: Flux wheighted center of all clumps in 3rd dim. --clumpsgeow3: Geometric center of all clumps in 3rd dim. --areaxy: Projected area in first two dimensions. --geoareaxy: Projected geoarea in first two dimensions. --inbetweenints: output will contain one row for all integers between 1 and the largest label in the input (irrespective of their existance in the input image). This was the default/only behavior of MakeCatalog until now. However, there are situations where the labeled input image integers may not be contiguous. For example if the input's only labeled pixel values are 11 and 13 from this release MakeCatalog's output will only have two rows. If you want the old behavior (of one row per integer, even if its not in the image), you can use this option. MakeProfiles: - Can produce mock ellipsoids in a datacube (using X-Z-X Euler angles for 3D orientation), the following options have been added, see the book for more details. --p2col: Second Euler angle (X-Z-X order). --p3col: Third Euler angle (X-Z-X order). --q2col: Axis ratio (major/dim3 in 3D). - The '--kernel' option can build 3D kernels, see the description of this option in the book for examples and details on how to run it. Match: - Matching of catalogs now possible using 3 coordinates (on catalogs generated from 3D data cubes), see book for more. NoiseChisel: - arXiv:1909.11230 added in papers to cite (with the '--cite' option): this paper describes the major changes made to NoiseChisel in the last 10 stable releases since the 2015 paper, most importantly how Segment has been separated and the new growth strategy. It is therefore necessary to cite it along with the initial 2015 paper when using NoiseChisel. Segment: - arXiv:1909.11230 added in papers to cite (with the '--cite' option): this paper describes why Segment has been separated from NoiseChisel and some important updates to it compared to the 2015 paper, it is therefore necessary to cite it along with that paper when using Segment. Statistics: --contour: compute a contour plot which can be directly fed into the PGFPlots package of LaTeX for plotting the contours. Support for more formats will be added based on the need/request. Table: --equal: Output only rows that have a value equal to the given value in the given column. For example '--equal=ID,2,4,5' will select only rows that have a value of 2, 4 and 5 in the 'ID' column. --notequal: Output only rows that have a different value compared to the values given to this option in the given column. - Column Arithmetic operators: - 'angular-distance': a new operator to easily find the angular distance (along a great circle) between points in various table columns, or the distances of all the points in the table rows with a fixed point. See the book for examples and better explanation. Library: - gal_binary_connected_indexs: store indexs of connected components. - gal_blank_remove_realloc: Remove blanks and shrink allocated space. - gal_box_bound_ellipsoid_extent: Extent of 3D ellipsoid. - gal_box_bound_ellipsoid: Bounding box for a 3D ellipsoid. - gal_statistics_unique: Return unique (non-blank) elements of the input. ** Removed features ** Changed features ** Bugs fixed bug #56736: CosmicCalculator crash when a single value given to --obsline. bug #56747: ConvertType's SLS colormap has black pixels which should be orange. bug #56754: Wrong sigma clipping output when many values are equal. bug #56999: Compilation error on macOS 10.9 not recognizing AT_FDCWD. bug #57057: BuildProgram not using environment LDFLAGS or CPPFLAGS. bug #57101: Crop segmentation fault when no overlap exists in image-mode. bug #57164: MakeCatalog crashes when a label isn't in the dataset. bug #57180: MakeCatalog reporting infinity S/N when --instd isn't an image. bug #57200: Generated pkgconfig must request wcslib, not wcs. bug #57293: NaN value for brightness-related columns when values have NaN. * Noteworthy changes in release 0.10 (library 8.0.0) (2019-08-03) [stable] ** New features Installation: - With the the following options at configure time, its possible to build Gnuastro without the optional libraries (even if they are present on the host system): '--without-libjpeg', '--without-libtiff', '--without-libgit2'. All programs: - When an array is memory-mapped to non-volatile space (like the HDD/SSD), a warning/message is printed that shows the file name and its size. Later, when its deleted, a warning/message is also printed, informing you that it has been deleted. These warnings can be very useful when you actually have enough RAM, but forget to increase the '--minmapsize' value (therefore significantly slowing down the program). When you don't have enough RAM, but don't want to be annoyed with the warnings, you can use the new '--quietmmap' option to disable them. Arithmetic: - 'unique' operator removes all duplicate (and blank) elements from the dataset and returns a single-dimension output, containing only the unique values in the dataset. Crop: - Can also crop 3D datasets (data cubes). A 3D crop has the same syntax as the old 2D mode, only when the dataset is 3D, three coordinates (values, ranges or catalog-columns) should be given to the relevant option. Just note that '--polygon' crops are still not supported in 3D. CosmicCalculator: --obsline: alternative way to set the used redshift. With this option instead of explicitly giving the redshift, you can give a rest-frame and observed wavelength and the redshift to use will be calculated internally. For many lines, it is possible to give the line name instead of its rest-frame wavelength. For example '--obsline=lyalpha,6000' will use the redshift where the Lyman-alpha line has been shifted to 6000 Angstroms. --usedredshift: Print the used redshift as a "Specific calculation" (in line with other single-valued calculations). Fits: --primaryimghdu: Copy/cut the given image HDU to the zero-th/first HDU of the output file that doesn't yet exist. Statistics: --sigclip-number, --sigclip-median, --sigclip-mean, --sigclip-std: Do sigma-clipping and only print the desired value as a single-value measurement. Until now sigma-clipping results included a lot of visually useful information, which also made automatic usage of results hard. These options fix this issue. Please see the example in the book under '--sigclip-median' for a nice use case. Table: - Column arithmetic. It is now possible to apply many operations on the input table columns before printing them in the output. Similar to Arithmetic, but on table columns. The operators and notation is just like the Arithmetic program. See the "Column Arithmetic" section of the book for a detailed discussion and several examples. - WCS to Image coordinate conversion with 'wcstoimg' and 'imgtowcs'. For example if the input catalog has at least an 'ID' column and two 'RA' and 'DEC' columns, the set of options below will produce 5 columns where the last two columns are the image coordinates for each row based on the WCS in 'a.fits': '-cID,RA,DEC -c"arith RA DEC wcstoimg" --wcsfile=a.fits' --head: Only output the given number of rows from the top of columns. --tail: Only output the given number of rows from the bottom of columns. Library: - New 'speclines.h' library functions and macros related to spectral lines. It has many macros with line wavelengths, and several functions for using them in combination with their names. - list.h: Functions to return the last element in linked lists. For example 'gal_list_sizet_last' or 'gal_list_data_last'. - gal_arithmetic_operator_string: Return operator string from code. - gal_arithmetic_set_operator: Return operator code from string. - gal_blank_initialize_array: Initialize an array with blank values. - gal_dimension_remove_extra: Remove extra (length 1) dimensions. - gal_list_data_to_array_ptr: Make an array of pointers from the list. - gal_fits_img_info_dim: Only return the size information of a dataset. - GAL_TYPE_INT: Corresponding to respective width based on system. - GAL_TYPE_UINT: Corresponding to respective width based on system. - GAL_BLANK_INT: Blank value for 'int' (can be 16-bit or 32-bit). - GAL_BLANK_UINT: Blank value for unsigned 'int' (can be 16-bit or 32-bit). ** Removed features ** Changed features Installation: - Better './configure' tests (using Gnulib's 'AC_LIB_HAVE_LINKFLAGS') to avoid some crashes during 'make' when the host had multiple conflicting versions of some dependencies (GSL in particular). Arithmetic: - The output of co-adding operators is no longer the same type as the input in general. The output of the 'min' and 'max' operators are still the same type as the input. However the 'number' and 'sigclip-number' operators will output an unsigned 32-bit integer type and the rest ('sum', 'mean', 'std', 'median', 'sigclip-median', 'sigclip-mean' and 'sigclip-std') return 32-bit floating point datasets MakeCatalog: - When a clumps catalog is requested, MakeCatalog will automatically deduce the total number of clumps (at a small cost in performance). Until now, it was mandatory for the clumps label dataset to contain the total number of clumps in the 'NUMLABS' keyword. Library: - gal_statistics_outlier_flat_cfp: Improved implementation with new API. - New 'quietmmap' argument added to the following functions (as the argument following 'minmapsize'). For more, see the description above of the new similarly named option to all programs: 'gal_array_read' 'gal_array_read_to_type', 'gal_array_read_one_ch', 'gal_array_read_one_ch_to_type', 'gal_data_alloc', 'gal_data_initialize', 'gal_fits_img_read', 'gal_fits_img_read_to_type', 'gal_fits_img_read_kernel', 'gal_fits_tab_read', 'gal_jpeg_read', 'gal_label_indexs', 'gal_list_data_add_alloc', 'gal_match_coordinates', 'gal_pointer_allocate_mmap', 'gal_table_read', 'gal_tiff_read' and 'gal_txt_image_read' Book: - The two larger tutorials ("General program usage tutorial", and "Detecting large extended targets") have been broken into subsections for easier readability. - The "Hubble visually checks and classifies his catalog" tutorial has been removed because it didn't come with a dataset, so it was hard for people to use. Also, all its operations were already present in the general tutorial. ** Bugs fixed bug #56195: astscript-sort-by-night crashing because of AWK. bug #56246: Single-valued measurement must abort with no value in Statistics. bug #56256: Segmentation fault when reading plain text array/image. bug #56257: ConvertType: Values not preserved when converting text to FITS. bug #56299: CosmicCalculator fails at z=0. bug #56324: Column metadata not usable when input is from pipe/stdin. bug #56424: Warp crashes with empty string given to options. bug #56480: Segfault in statistics library's histogram function. bug #56641: MakeProfile's center position changes based on precision. bug #56635: Update tutorial 3 with bug-fixed NoiseChisel. bug #56662: Converting -R to -Wl,-R causes a crash in configure on macOS. bug #56671: Bad sorting with asttable if nan is present. bug #56709: Segment crash when input has blanks, but labels don't. bug #56710: NoiseChisel sometimes not including blank values in output. * Noteworthy changes in release 0.9 (library 7.0.0) (2019-04-17) [stable] ** New features All programs: --checkconfig: print the names and values given to options as they are parsed on the command-line or in various configuration files (the configuration file name is also printed). This can be very useful in debugging (finding which configuration file is responsible for a given option's value). Arithmetic: - The new 'tofile-' and 'tofilefree-' operators will save the top operand into a file. They can be very handy in debugging/understanding an Arithmetic command (especially as it gets complicated), or to produce multiple files/extensions with a single call to Arithmetic. - Four new operators have been added to allow coadding multiple datasets into one using sigma-clipping: 'sigclip-number', 'sigclip-mean', 'sigclip-median', and 'sigclip-std'. These are very useful when several inputs have strong outliers that affect the median, or the mean is required. - Multithreaded operation for the following operators that combine/co-add multiple inputs into one output with same size: 'min', 'max', 'number', 'sum', 'mean', 'std', 'median', 'sigclip-number', 'sigclip-median', 'sigclip-mean', 'sigclip-std'. --wcsfile and --wcshdu: these two options can be used to specify a different file for reading the WCS of the output. This is useful when the default (the WCS of the first dataset that is read) is not the required one. --interpmetric: new option that is necessary with the 'interpolate-medianngb' operator. For more, see the description of this option in NoiseChisel. Fits: - Add "title" to group FITS keywords with '--write=/,"title name". This "title" is composed of two keyword records/lines: a blank one (all whitespace), followed by another starting with '/' and ending in any string given to this option. This visually separates the keywords and acts as a title. Classifying the keywords into contextually similar groups greatly helps in visual inspection and is encouraged. - Calculate and write 'CHECKSUM' and 'DATASUM' integrity keywords into the specified header using '--write=checksum' (for both) or '--write=datasum' (only for 'DATASUM'). --datetosec: Convert the FITS date format (old or new) to number of seconds since since the Unix epoch time (1970-01-01,00:00:00). The FITS date format (for example 'YYYY-MM-DDThh:mm:ss') is hard to use for automatic processing (requires calendar peculiarities like number of days in each month, or leap years and etc). With this option a single integer is returned that can be used for example to sort FITS files by date keywords without worrying about calendar peculiarities. --verify: confirm if the 'DATASUM' and 'CHECKSUM' keyword values agree with the specified HDU's content and/or data. --copykeys: Copy several keyword records (in a given range) from one FITS HDU/extension into another (possibly in another file). --outhdu: The name/number of the output HDU (for '--copykeys'). Match: - All the columns from one of the input catalogs can now be merged with any of the columns of the second using the special '_all' name of '--outcols'. For example the output of '--outcols=a_all,b5' will contain all the columns from the first input and the 5th column of the second input. This greatly simplifies the merging of different table columns into one. --coord: manually specify coordinates to match on the command-line. Until now, if you only wanted to make check a specific coordinate's matching with a catalog. It was necessary to make a single-row catalog as a file and feed that into Match. With this option, you can now specify the coordinates to match against another catalog with the command-line. NoiseChisel: --interpmetric: Set the metric to use to identify the nearest neighbors for tile interpolation (quantile threshold, initial Sky, and final Sky). Until now only the manhattan/taxicab metric was available, which is fast, but could cause 45-degree lines in the interpolation. From this version, with this option, its also possible to use the radial distance (which is now the default). Just note that if there are many tiles over the image, the radial distance will be slower. --snthresh: Manually set the signal-to-noise ratio of true pseudo-detections. With this option, NoiseChisel will not attempt to find pseudo-detections over the noisy regions of the dataset, but will directly go onto applying the manually input value. - Several new options have been added to remove NoiseChisel's dependence on values that were hard-coded in its source and thus not modifiable at run-time by the user. To allow full configurability, these steps can also be configured by the user. --pseudoconcomp: allows setting the connectivity (4 or 8, in a 2D image) to define separate pseudo-detections. If its stronger, pseudo-detections that are touching on the corner will be identified as one. --dopening: The number of openings to do after applying '--dthresh'. --dopeningngb: The connectivity (4 or 8) to use for '--dopening'. Statistics: --interpmetric: Similar to NoiseChisel. Table: --range: Limit the output rows to those with a value within the given numeric range with this format: '--range=COL,low,high'. This is very useful when only certain rows of the input are required not the output. The advantage over piping to AWK is that you can save the output directly to FITS (preserving the metadata). See the book for more. --sort: Sort the output rows based on the value of the given column in ascending order. --descending: When called with '--sort', will arrange the output rows in descending order. Installed scripts: With this release, Gnuastro also installs Bash scripts for common higher-level usage of (possibly multiple) programs. These scripts have a 'astscript-*' name, to easily show up on the command-line as Gnuastro executables with the other Gnuastro programs, but are identifiable from them. They support options just like the programs (which can be listed with '--help'). Please see the new "Installed scripts" chapter of the book for more. - astscript-sort-by-night: New Gnuastro executable, using Gnuastro's Fits program to identify files with dates in the same night (possibly spanning two calendar dates). Library: GAL_BLANK_LONG: new macro for the 'long' type blank value. GAL_BLANK_ULONG: new macro for the 'unsigned long' type blank value. gal_blank_number: Return the number of blank elements in a dataset. gal_dimension_dist_radial: Radial distance between two coordinates. gal_fits_key_date_to_struct_tm: FITS date format to C broken-down time. gal_fits_key_date_to_seconds: FITS date format to Unix epoch time. gal_qsort_index_single_TYPE_i: Set of functions to sort indexs ascending. gal_qsort_index_single_TYPE_d: Set of functions to sort indexs descending. gal_statistics_outlier_cumulative: Uses flatness of the cumulative distribution to find outliers. gal_table_list_of_indexs: returns the list of indexs matching columns. gal_type_is_int: to see if we have an integer (any width, any sign). ** Removed features ** Changed features Arithmetic: - 'num' operator is renamed to 'number'. - 'numvalue' operator is renamed to 'numbervalue'. - '--dontdelete' will append the output to any existing file. Note that this change is only in Arithmetic, other programs will still just complain and abort. ConvertType: --forcemin & --forcemax: until now, '--flminbyte' and '--flmaxbyte' were used to force the range of conversion to color channels (even if the range is beyond the limits of the dataset). With the introduction of color maps in Gnuastro 0.8, it is also necessary to force a range on non-byte datasets. It is thus necessary to use a more generic name. MakeCatalog: --std: Until now, this option would measure the mean standard deviation under the label. But this is not a statistically meaningful measure for the Sky standard deviation and could be incorrectly used. From now on, this option measures the square root of the mean variance, or root mean square (the correct definition of the Sky standard deviation). NoiseChisel: --ignoreblankintiles: Until now '--ignoreblankinsky', would specify if blank values should also be written into the tiled Sky and Sky standard deviation outputs. But NoiseChisel can optionally produce many more tiled outputs (for example with '--checkqthresh'). So the option was renamed to '--ignoreblankintiles' to highlight that the status of blank elements can be set in all tiled outputs. Statistics: --ignoreblankintiles: similar to same option in NoiseChisel. Table: --colinfoinstdout: now corresponds to the '-O' short option. Until this version, the '-s' short option was used for it. But with the new '--sort' option, '-s' may cause confusion. Library gal_arithmetic: new argument: number of threads to use (when relevant). gal_eps_write: new argument: optional bit-optimization with 'dontoptimize'. gal_pdf_write: new argument: optional bit-optimization with 'dontoptimize'. ** Bugs fixed bug #55313: Fits program writing --write values in reverse order bug #55333: Fits program crash when --write or --update have no value. bug #55439: Arithmetic segmentation fault when reusing dataset name. bug #55478: Memory mapping crashes when .gnuastro is not writable. bug #55491: NoiseChisel crash when no tiles good for quantile thresholding. bug #55544: Arithmetic's output WCS with where operator is not as expected. bug #55740: Diamond shapes in nearst-ngb interpolation affecting NoiseChisel. bug #55763: Crop not keeping Blank pixels on unsigned types. bug #55844: WCS library (and thus all programs) can't deal with CROTAi values. bug #55845: Crash when necessary column not found from standard input. bug #55988: MakeProfiles segfault when input catalog has no rows. bug #56001: Bad tile sizes with only one tile and small remainder. bug #56048: Crash when WCS cannot be written to FITS file. * Noteworthy changes in release 0.8 (library 6.0.0) (2018-12-28) [stable] ** New features All programs: - Input files and parameters written as keywords in the first extension of output when it is FITS. This is only relevant for some programs, (for example not the Fits or Table programs). - Standard input (for example from pipes) is now available to feed input to all programs that accept plain text input (ConvertType, Convolve, Match, MakeProfiles, Statistics, Table). - Updated acknowledgment statement (output of '--cite' option). Arithmetic: --onedasimage: write output as an image if it has one dimension, not table. ConvertType: --colormap: color map to display a single-channel dataset (for example FITS image) with a range of colors in formats that support color (like JPEG, or PDF). Until now, the only available mapping was grayscale. Now "Hue, Saturation, Value" (HSV) and "SLS" (from SAO DS9) colormaps are also supported. --rgbtohsv: Convert the RGB input channels to HSV (when the output is in FITS format). Convolve: - Convolves 1D arrays (table columns, for example spectra) also. Therefore two new options have been added to it: '--column' ('-c', similar to other programs that read table columns), and '--kernelcolumn' (to specify the column of the kernel in its own file/extension). Fits: --numhdus: prints the number of HDUs in the given FITS file. NoiseChisel: - New outlier identification algorithm for quantile thresholds. This is very useful when there are extended and bright sources in the dataset: the tiles containing very faint signal that pass the general pixel-value distribution test due to the flatness of the extended profiles, can be identified and removed as outliers in comparison with the other passed tiles. The outlier finding algorithm ('gal_statistics_outlier_positive': a new library function) uses the distribution of distances between the sorted elements and is configured with these options. --outliersclip: Sigma-clipping parameters for the process. --outliersigma: Multiple of sigma to define an outlier. --blankasforeground: Treat blank elements as foreground (regions above the threshold) in the binary processing steps: initial erosion and opening as well as the filling holes and opening of pseudo-detections. From this version, by default, blank elements in the dataset are considered to be background, so if a foreground pixel is touching it, it will be eroded. This option is irrelevant if the datasets contains no blank elements, but can help remove false positives that are touching blank elements. --holengb: allows defining the connectivity of the holes that are filled when defining pseudo-detections. Until now, this was hard-wired into the code (=8) and not modifiable at run-time. --skyfracnoblank: Ignore blank pixels when estimating the fraction of undetected pixels for Sky estimation. NoiseChisel only measures the Sky over the tiles that have a sufficiently large fraction of undetected pixels. This is done to decrease the bias caused by faint un-detected wings of bright galaxies or stars, see description of '--minskyfrac' for more. Until now the reference for this fraction was the whole tile size (irrespective of how many blank elements it contains). With this option, it is now possible to ask for ignoring blank pixels when calculating the fraction. This is useful when blank/masked pixels are distributed across the image. Statistics: - If an input table has only one column, Statistics won't complain and abort when no '--column' ('-c') is given: there is only one column to use anyway, so it will be used. In the absence of which column to use, it will still complain and abort if the input has more than one column. - Sky estimation: new outlier estimation algorithm similar to NoiseChisel. - Input can be given using the standard input (for example a pipe). Library: - gal_blank_flag_apply: Set all flagged/masked elements to blank. - gal_fits_key_list_reverse: Reverse the given list of FITS keywords. - gal_fits_key_write_title_in_ptr: Write a two-line title FITS keyword. - gal_fits_key_write_in_ptr: New name of gal_fits_key_write. - gal_fits_key_write_version_in_ptr: old gal_fits_key_write_version. - gal_fits_key_write_config: write key list and version as config header. - gal_statistics_outlier_positive: Find the first positive outlier. - gal_txt_stdin_read: Read lines in standard input into a list of strings. ** Removed features NoiseChisel: --mirrordist: mean quantile is now used (not mode), see changes below. --qthreshtilequant: removed due to new outlier rejection algorithm. Statistics: --mirrordist: mean quantile is now used (not mode), see changes below. ** Changed features Arithmetic: - If the output has one dimension, it will be written as a table, not a FITS image/array. This can be changed with the new '--onedasimage' option. Convolve: - The short option for '--numchannels' is now '-n'. Until now, it was '-c', but that would conflict with the short option used for '--column' in all the other programs that also read from a table. MakeProfiles: --mergedsize: new name for the old '--naxis' option. Since the option names and values are now written into the FITS header of the output, this option's name would get confused with the mandatory FITS keyword 'NAXIS'. NoiseChisel: - Until now, the mode's quantile was used to identify tiles with no significant signal. But from this version, the mean's quantile in each tile is used instead. The reason is that the mean is more sensitive to outliers (signal). Therefore the old '--modmedqdiff' is now called '--meanmedqdiff' . Statistics: --meanmedqdiff: new name for '--modmedqdiff'. Similar to NoiseChisel. Library: - gal_array_read: list of strings (from standard input) acceptable. - gal_array_read_to_type: list of strings (from stin) acceptable. - gal_array_read_one_ch: list of strings (from stdin) acceptable. - gal_array_read_one_ch_to_type: list of strings (from stdin) acceptable. - gal_data_copy_to_allocated: Also copies string metadata (e.g., name). - gal_fits_key_write: filename and hdu instead of FITS pointer. - gal_fits_key_write_version: filename and hdu instead of FITS pointer. - gal_fits_key_write_filename: write at the top or end of the input list. - gal_statistics_outlier_positive: Window-size is now adjustable (new argument). - gal_table_info: list of strings (from stdin) acceptable. - gal_table_read: list of strings (from stdin) acceptable. - gal_txt_table_info: list of strings (from stdin) acceptable. - gal_txt_image_info: list of strings (from stdin) acceptable. - gal_txt_table_read: list of strings (from stdin) acceptable. - gal_txt_image_read: list of strings (from stdin) acceptable. ** Bugs fixed bug #54493: Warp crashes when type isn't set. bug #54526: Invalid r, q and truncation of point profiles in MakeProfiles. bug #54579: NoiseChisel pseudo-detection failure when dataset is negative. bug #54782: Segment's check image not removing sky clumps some tiles. bug #54810: Arithmetic crash when previously named operand renamed. bug #55025: MakeCatalog's '--prepforconv' option being ignored. bug #55079: Blank EPS or PDF page when width options not given. bug #55157: No sanity check on values given to Crop's --section. bug #55295: Crash when more than one collapse operator called. bug #55298: Arithmetic reading 255 on command-line as blank. * Noteworthy changes in release 0.7 (library 5.0.0) (2018-08-08) [stable] ** New features Installation: --enable-debug: debugging flags, no optimization, no shared libraries. --enable-check-with-valgrind: Run 'make check' tests within Valgrind. Arithmetic: - 'set-A': Set a name ('A' in this case) for the popped dataset. This allows only reading the dataset it into memory once and possibly using it many times. - 'fill-holes': Flip background (0) pixels surrounded by foreground (1). - 'collapse-sum': collapse/remove a dimension by summing over it. - 'collapse-min': collapse/remove a dimension by using minimum value. - 'collapse-max': collapse/remove a dimension by using maximum value. - 'collapse-mean': collapse/remove a dimension by averaging over it. - 'collapse-number': Number of elements included in the collapse. CosmicCalculator: - Default cosmology set to Plank 2018 results (Paper VI). MakeCatalog: --minx: minimum position along first FITS axis. --maxx: maximum position along first FITS axis. --miny: minimum position along second FITS axis. --maxy: maximum position along second FITS axis. Table: --colinfoinstdout: column information when writing to standard output. Library: - gal_array_name_recognized_multiext: If format contains multiple datasets. - gal_dimension_collapse_sum: collapse/remove a dimension by summing. - gal_dimension_collapse_mean: collapse/remove a dimension by averaging. - gal_dimension_collapse_number: collapse/remove a dimension by number. - gal_dimension_collapse_minmax: collapse/remove a dimension by extremum. - gal_wcs_remove_dimension: Remove a dimension in the given WCS structure. ** Removed features ** Changed features Crop: --checkcenter: the units of value depend on mode (image or WCS). MakeCatalog: - '--checkuplim': new name for '--checkupperlimit'. - '--brightnessnoriver': new name for '--noriverbrightness'. Library: - gal_txt_write: new 'colinfoinstdout' argument. - gal_table_write: new 'colinfoinstdout' argument. ** Bugs fixed bug #54057: Building failure due to not finding gsl_interp_steffen. bug #54063: Match tests in make check fail randomly. bug #54186: MakeCatalog's --checkupperlimit not keeping output's name. bug #54188: MakeCatalog's Upperlimit not being sigma-clipped properly. bug #54284: Crop segfault when catalog contains no data. bug #54285: make check fails if g++ not present. bug #54286: BuildProgram's configuration file, not built by default. bug #54297: No Match output when --notmatched called and no match. bug #54298: Table not writing array when there are no rows. bug #54312: Crash when CFITSIO doesn't have fits_is_reentrant function. bug #54346: Non '-I' or non '-L' strings in CPPFLAGS or LDFLAGS cause crash. bug #54358: Arithmetic's where, not ignoring blank values in condition. bug #54406: Insufficient sanity checks in mode symmetricity calculation. bug #54430: BuildProgram fails with older Libtool versions on dash. * Noteworthy changes in release 0.6 (library 4.0.0) (2018-06-04) [stable] ** New features Building: - New optional dependency: The TIFF library (libtiff). All programs: - Input image dataset(s) can be in any of the formats recognized by Gnuastro (e.g., FITS, TIFF, JPEG), provided that their libraries (optional dependencies) were present at installation time. New program: - Segment: new program in charge of segmentation over detections. This operation was previously done by NoiseChisel. NoiseChisel is now ONLY in charge of detection. Arithmetic: - erode: Erode the foreground of a binary dataset. - dilate: Dilate the foreground of a binary dataset. - filter-sigclip-mean: sigma-clipped, mean filter operator. - filter-sigclip-median: sigma-clipped, median filter operator. - connected-components: label the connected elements of the input. - invert: subtract the maximum of unsigned types (absorption to emission). - interpolate-medianngb: Interpolate (only blanks) with nearest neighbors. ConvertType: - TIFF images can also be used as input. MakeCatalog: MakeCatalog will only read the datasets necessary for the requested columns. Until now, it would read all the possible datasets and all the intermediate measurements. This is thus major improvement in memory and CPU usage. As a result, the input argument is no longer assumed to be the values file, but the object labels file. Please see the "MakeCatalog inputs and basic settings" section of the book for more. Here is the summary of the new options: --insky: Sky value as a single value or file (dataset). --instd: Sky standard deviation as a single value or file (dataset). --valuesfile: filename containing the values dataset. --valueshdu: HDU/extension containing the values dataset. --clumpscat: Make a clumps catalog also. --noclumpsort: Don't sort the clumps catalog by host object ID. --subtractsky: Subtract the given Sky from the values dataset. --variance: input standard deviation image is actually variance. --checkupperlimit: make a table for random positions and measurements. --geoarea: the number of labeled pixels (irrespective of value). --brightnesserr: error in estimating the brightness. --mean: calculate the mean pixel value within an object or clump. --median: calculate the median pixel value within an object or clump. --upperlimitsigma: position in random distribution (in units of sigma). --upperlimitquantile: position in random distribution (quantile). --upperlimitonesigma: 1sigma value of the random distribution. --upperlimitskew: (mean-median)/sigma or skewness of random distribution. NoiseChisel: - New tutorial on detecting large and extended targets. --rawoutput: only output the detection labels and Sky and its STD. --ignoreblankinsky: don't set the pixels that are blank in the input to blank in the Sky and Sky standard deviation outputs (when '--oneelempertile' is not called). --label: label the connected detections. Until now this was the default behavior. However, from this release, NoiseChisel is only in charge of detection. Segmentation is done by a new program (Segment). Since detection is ultimately just a binary operator, the default output now has an 8-bit unsigned integer type with values of 0 or 1. With this option, you can ask for it to label/count the connected detections instead of the default binary output. Statistics: --manualbinrange: histogram or CFP range can be outside of distribution. --ignoreblankinsky: similar to same option in NoiseChisel. Libraries: gal_array_read: read array from any of known formats (FITS, TIFF, JPEG,...). gal_array_read_to_type: similar to 'gal_array_read', but to given type. gal_array_read_one_ch: Read a dataset, abort if it has multiple channels. gal_array_read_one_ch_to_type: Make sure input is in one channel and type. gal_binary_label_holes: label the holes within the foreground. gal_blank_is: check to see if argument is blank in its type or not. gal_eps_name_is_eps: Returns 1 if given filename is EPS. gal_eps_suffix_is_eps: Returns 1 if given suffix is EPS. gal_eps_to_pt: Converts dataset size to PostScript points. gal_eps_write: Writes a dataset into an EPS file. gal_interpolate_1d_blank: Fill blank elements through interpolation. gal_interpolate_1d_make_gsl_spline: Allocate and initalize 'gsl_spline'. gal_jpeg_name_is_jpeg: Returns 1 if given filename is JPEG. gal_jpeg_suffix_is_jpeg: Returns 1 if given suffix is JPEG. gal_jpeg_read: Reads input JPEG image into 'gal_data_t'. gal_jpeg_write: Writes a 'gal_data_t' into a JPEG file. gal_label_grow_indexs: grow known indexs into desired areas. gal_label_watershed: apply watershed algorithm on desired region. gal_label_clump_significance: measure significance of all clumps in region. gal_pdf_name_is_pdf: Returns 1 if given filename is PDF. gal_pdf_suffix_is_pdf: Returns 1 if given suffix is PDF. gal_pdf_write: Writes a dataset into an PDF file. gal_pointer_allocate_mmap: Allocate space in a file, not in RAM. gal_qsort_index_single_d: Sort indexs of single array in decreasing order. gal_qsort_index_single_i: Sort indexs of single array in decreasing order. gal_qsort_index_multi_d: Sort indexs in multiple arrays (different threads). gal_qsort_index_multi_i: Sort indexs in multiple arrays (different threads). gal_tiff_name_is_tiff: check if name contains a TIFF suffix. gal_tiff_suffix_is_tiff: check if suffix is a TIFF suffix. gal_tiff_dir_string_read: convert a string to a TIFF directory number. gal_tiff_read: Read the contents of a TIFF "directory" to 'gal_data_t'. ** Removed features NoiseChisel: - Segmentation (and thus the options below) moved to the new Segment program: --onlydetection, --segsnminarea, --checkclumpsn, --segquant, --keepmaxnearriver, --gthresh, --minriverlength, --objbordersn, --grownclumps, --checksegmentation. --skysubtracted: no longer necessary, included in noise measuremnts. MakeCatalog: --skysubtracted: no longer necessary, included in noise measuremnts. Library: - The macros 'GAL_STATISTICS_SORTED_NOT', 'GAL_STATISTICS_SORTED_INVALID', 'GAL_STATISTICS_SORTED_INCREASING', 'GAL_STATISTICS_SORTED_DECREASING': these macros are removed because we already have the 'GAL_DATA_FLAG_SORT*'' bit-flags in 'gal_data_t'. ** Changed features Arithmetic: - filter-mean: a blank value in the input can be non-blank in the output when non-blank elements present in filter. - filter-median: similar to filter-mean. Fits: --history: can be called/written multiple times in one run. --comment: can be called/written multiple times in one run. MakeCatalog: - The 'WCLUMPS' keyword in the objects labeled image is no longer used to see if a clumps catalog should also be made. To build a clumps catalog, you can now use the '--clumpscat' option. - Estimation of noise-level is now done per-pixel over the whole label. Until now the average noise level was used. --objectsfile has been removed. The main input argument is now assumed to be the objects file. NoiseChisel: From this release, NoiseChisel is only in charge of detection and won't do segmentation any more. The new Segment program is in charge of segmentation. Many of the changes below are due to this new limited scope of NoiseChisel. --kernel: value 'none' will disable convolution. - Renamed options: --convolvedhdu ==> --chdu --wkhdu ==> --whdu --detsnminarea ==> --snminarea --checkdetsn ==> --checksn --detquant ==> --snquant - By default the output detection map is a binary image (values of 0 or 1). - With no output name, the output has a '_detected.fits' suffix. Segment: - [Previously in NoiseChisel]: For finding true clumps, the difference in the peak of the clump and the highest valued river pixel, divided by the noise standard deviation are used. Until now, the total signal-to-noise ratio was used as a criteria. In initial tests, this algorithm was much more promising in detecting clumps over strong gradients and also on flatter gradients. Table: --column: multiple columns (comma separated) can be used in one instance of this option (multiple instances of this option are still acceptable also). Libraries: gal_binary_holes_fill: new name for 'gal_binary_fill_holes'. gal_dimension_is_different: new name for 'gal_data_dsize_is_different'. gal_fits_img_read: now only reads the data not the WCS, therefore it no longer needs the last two arguments. A subsequent call to 'gal_wcs_read' can be used to read the WCS information in the file. gal_pointer_increment: new name for 'gal_data_ptr_increment'. gal_pointer_num_between: new name for 'gal_data_ptr_dist'. gal_pointer_allocate: replaces 'gal_data_malloc_array' and 'gal_data_calloc_array', through an argument you can ask for the allocated memory to be cleared or not. gal_qsort_TYPE_i: new name for gal_qsort_TYPE_increasing. gal_qsort_TYPE_d: new name for gal_qsort_TYPE_decreasing. gal_statistics_is_sorted: can now also update the bit-flags regarding the sorted nature of the input (to optimize future calls to the function). gal_statistics_quantile_function: returns 'inf' or '-inf' if the given value is smaller than the minimum or larger than the maximum of the input dataset's range. Until now, it would return blank in such cases. gal_statistics_number: the output dataset now has a 'size_t' type. Until now it was 'uint64_t'. ** Bugs fixed bug #50957: --version output not possible on Mac OS X bug #52979: Many unused result warnings for asprintf in some compilers. bug #53122: Configure time CPPFLAGS and LDFLAGS don't pass to BuildProgram. bug #53142: Crash when printing values with the '--onlyversion' option. bug #53147: NULL value of onlyversion option causing a crash. bug #53226: Match output directory ignored when making multiple files. bug #53230: Statistics program bad results on integer columns with limits. bug #53268: NoiseChisel crash when no growth is possible. bug #53295: MakeCatalog parses area larger than clump. bug #53304: NoiseChisel crash when there is no detection. bug #53312: Fits crash on keyword editing (except --delete). bug #53407: Instrumental noise in MakeNoise should be squared. bug #53424: Sigma-clipping seg-faults when there are no more elements. bug #53580: Warp crash when no WCS present. bug #53825: NoiseChisel not accounting for fully zero-valued tiles. * Noteworthy changes in release 0.5 (library 3.0.0) (2017-12-22) [stable] ** New features Manual/Book: An extended tutorial is added showing some general applications of almost all the programs. This may be a good place to get a feeling of how Gnuastro is intended to be used and some of the programs. New Program and library: Match is a new program that will match two given inputs (currently catalogs). Its output is the re-arranged inputs with the same number of rows/records such that all the rows match. The main work is also done with the new low-level 'gal_match_catalog' library function which can also be used in more generic contexts. All programs: a value of '0' to the '--numthreads' option will use the number of threads available to the system at run time. Arithmetic: The new operators 'filter-median' and 'filter-mean' can be used to filter (smooth) the input. The size of the filter can be set as the other operands to these operators. BuildProgram: The new '--la' option allows the identification of a different Libtool '.la' file for Libtool linking information. BuildProgram: The new '--deletecompiled' option will delete the compiled program after running it. CosmicCalculator: all the various cosmological calculations can now be requested individually in one line with a specific option added for each calculation (for example '--age' or '--luminositydist' for the age of the universe at a given redshift or the luminosity distance). Therefore the old '--onlyvolume' and '--onlyabsmagconv' options are now removed. To effectively use these new features, please review the "Invoking CosmicCalculator" section of the book. Fits: when an extension/HDU is identified on the command-line with the '--hdu' option and no operation is requested, the full list of header keywords in that HDU will be printed (as if only '--printallkeys' was called). MakeCatalog: physical nature agnostic WCS column names. Previously the first WCS axis was always assumed to be RA and the second DEC. So for example even if you had a spectrum (with X and wavelength as the two WCS dimensions), you would have to ask for '--ra' and '--dec'. The new '--w1' and '--w2' options are now generic and don't assume any particular type only their order in the FITS header. MakeCatalog now also uses the CTYPE and CUNIT keywords to set the names and units of its output columns. The '--ra' and '--dec' options are now just internal aliases for '--w1' or '--w2' which will be determined based on the input's CTYPE keyword. Also the new '--geow1', '--geow2', '--clumpsw1', '--clumpsw2', '--clumpsgeow1', '--clumpsgeow2' options replace the old options '--geora', '--geodec', '--clumpsra', '--clumpsdec', '--clumpsgeora', '--clumpsgeodec'. No alias is currently defined for the latter group. MakeCatalog: the new '--uprange' option allows you to specify a range for the random values around each object. This is useful when the noise properties of the dataset vary gradually and sampling from the whole dataset might produce biased results. NoiseChisel: with the new '--convolved' and '--convolvedhdu' options, NoiseChisel will not convolve the input any more and use the given dataset instead. In many cases, as the inputs get larger, convolution is the most time consuming step of NoiseChisel. With this option, you can greatly speed up your tests (to find the best parameters by varying them, for a given analysis). See the book for more information and examples. NoiseChisel: with the new '--widekernel' option it is now possible to use a wider kernel to identify which tiles contain signal. The rest of the steps (identifying the quantile threshold on the selected tiles and etc) are done on the dataset convolved with '--kernel' as they were before. Since it is time consuming, this is an optional feature. NoiseChisel: with the new '--qthreshtilequant' option, it is now possible to discard high-valued (outlier) tiles before estimating qthresh over the whole image. This can be useful in detecting very large diffuse/flat regions that would otherwise be detected as background (and effectively removed). NoiseChisel: the finally selected true detections are now grown based on signal contiguity, not by blind dilation. The growth process is the same as the growing of clumps to define objects. Only for true detections, the growth occurs in the noise. You can configure this growth with the '--detgrowquant' and '--detgrowmaxholesize'. With this new feature it is now possible to detect signal out to much lower surface brightness limits and the detections don't look boxy any more. Cosmology library: A new set of cosmology functions are now included in the library (declared in 'gnuastro/cosmology.h'). These functions are also used in the CosmicCalculator program. 'gal_table_read' can now return the number of columns matched with each input column (for example with regular expressions), a new argument has been added to allow this feature. 'gal_fits_key_img_blank': returns the value that must be used in the BLANK keyword for the given type as defined by the FITS standard. 'gal_txt_write' and 'gal_fits_tab_write' now accept an extension name as argument to allow a name for the FITS extension they write. 'gal_box_bound_ellipse_extent' will return the maximum extent of an ellipse along each axis from the ellipse center in floating point. ** Removed features Installation: The '--enable-bin-op-*' configuration options that were introduced in Gnuastro 0.3 have been removed. By managing the arithmetic functions in a better manner (a separate source file for each operator), compilation for all types (when done in parallel) takes about the same time as it took with the default (only four) types until now. MakeCatalog: '--zeropoint' option doesn't have a short option name any more. Previously it was '-z' which was confusing because '-x' and '-y' were used to refer to image coordinate positions. NoiseChisel: The '--dilate' and '--dilatengb' options have been removed. Growing of true detections is no longer done through dilation but through the '--detgrowquant' and '--detgrowmaxholesize' options (see above). ** Changed features CosmicCalculator: The redshift is no longer mandatory. When no redshift is given, it will only print the input parameters (cosmology) and abort. MakeCatalog: when the output is a FITS file, the two object and clumps catalogs will be stored as multiple extensions of a single file. Until now, two separate FITS files would be created. Plain text outputs are the same as before (two files will be created). 'gal_binary_fill_holes' now accepts a 'connectivity' and 'maxsize' argument to specify the connectivity of the holes and the maximum size of acceptable holes to fill. 'gal_fits_img_read' and 'gal_fits_img_read_to_type' now also read the WCS structure of the extension/HDU in a FITS file and have two extra arguments: 'hstartwcs' and 'hendwcs'. With these options it is possible to limit the range of header keywords to read the WCS, similar to how they are used in 'gal_wcs_read'. 'gal_txt_write', 'gal_table_write_log', 'gal_fits_tab_write' and 'gal_txt_write' don't have the 'dontdelete' argument any more. The action they take if the file already exists depends on the file: for FITS, a new extension will be added and for text, they will abort with an error. 'gal_tile_block_write_const_value' and 'gal_tile_full_values_write' now accept a new 'withblank' option to set all pixels that are blank in the tile's block to be blank in the check image. 'gal_wcs_pixel_area_arcsec2' will return NaN (instead of aborting) when input is unreasonable (not two dimensions or not in units of degrees). 'gal_wcs_world_to_img' and 'gal_wcs_img_to_world': Until now, these two WCS conversion functions would explicitly assume RA and Dec and work based on input arrays (so for example it was also necessary to give the number of elements and etc). They now accept 'gal_data_t' as input for the input coordinates, thus their API has been greatly simplified and their functionality increased. ** Bugs fixed ConvertType crash when changing values (bug #52010). Arithmetic not accounting for integer blank pixels in binary operators (bug #52014). NoiseChisel segfault when memory mapping to a file (bug #52043). CFITSIO 3.42 and libcurl crash at Gnuastro configure time (bug #52152). MakeCatalog crash in upper-limit with full size label (bug #52281). NoiseChisel leaving unlabeled regions after clump growth (bug #52327). Arithmetic crash with no input tokens (bug #52422). Libtool checks only in non-current directory (bug #52427). * Noteworthy changes in release 0.4 (library 2.0.0) (2017-09-13) [stable] ** New features All programs: '.fit' is now a recognized FITS file suffix. All programs: ASCII text files (tables) created with CRLF line terminators (for example text files created in MS Windows) are now also readable as input when necessary. Arithmetic: now has a new '--globalhdu' ('-g') option which can be used once for all the input images. MakeNoise: with the new '--sigma' ('-s') option, it is now possible to directly request the noise sigma or standard deviation. When this option is called, the '--background', '--zeropoint' and other option values will be ignored. MakeProfiles: the new '--kernel' option can make a kernel image without the need to define a catalog. With this option, a catalog (or accompanying background image) must not be given. MakeProfiles: the new '--pc', '--cunit' and '--ctype' options can be used to specify the PC matrix, CUNIT and CTYPE world coordinate system keywords of the output FITS file. MakeProfiles: the new 'distance' profile will save the radial distance of each pixel. This may be used to define your own profiles that are not currently supported in MakeProfiles. MakeProfiles: with the new '--mcolisbrightness' ("mcol-is-brightness") option, the '--mcol' values of the catalog will be interpretted as total brightness (sum of pixel values), not magnitude. NoiseChisel: with the new '--dilatengb' option, it is now possible to identify the connectivity of the final dilation. Library: Functions that read data from an ASCII text file ('gal_txt_table_info', 'gal_txt_table_read', 'gal_txt_image_read') now also operate on files with CRLF line terminators. ** Removed features ** Changed features Crop: The new '--center' option is now used to define the center of a single crop. Hence the old '--ra', '--dec', '--xc', '--yc' have been removed. This new option can take multiple values (one value for each dimension). Fractions are also acceptable. Crop: The new '--width' option is now used to define the width of a single crop. Hence the old '--iwidth', '--wwidth' were removed. The units to interpret the value to the option are specified by the '--mode' option. With the new '--width' option it is also possible to define a non-square crop (different widths along each dimension). In WCS mode, its units are no longer arcseconds but are the same units of the WCS (degrees for angles). '--width' can also accept fractions. So to set a width of 5 arcseconds, you can give it a value of '5/3600' for the angular dimensions. Crop: The new '--coordcol' option is now used to determine the catalog columns that define coordinates. Hence the old '--racol', '--deccol', '--xcol', and '--ycol' have been removed. This new option can be called multiple times and the order of its calling will be used for the column containing the center in the respective dimension (in FITS format). MakeNoise: the old '--stdadd' ('-s') option has been renamed to '--instrumental' ('-i') to be more clear. MakeProfiles: The new '--naxis' and '--shift' options can take multiple values for each dimension (separated by a comma). This replaces the old '--naxis1', '--naxis2' and '--xshift' and '--yshift' options. MakeProfiles: The new '--ccol' option can take the center coordinate columns of the catalog (in multiple calls) and the new '--mode' option is used to identify what standard to interpret them in (image or WCS). Together, these replace the old '--xcol', '--ycol', '--racol' and '--deccol'. MakeProfiles: The new '--crpix', '--crval' and '--cdelt' options now accept multiple values separated by a comma. So they replace the old '--crpix1', '--crpix2', '--crval1', '--crval2' and '--resolution' options. 'gal_data_free_contents': when the input 'gal_data_t' is a tile, its 'array' element will not be freed. This enables safe usage of this function (and thus 'gal_data_free') on tiles without worrying about the memory block associated with the tile. 'gal_box_bound_ellipse' is the new name for the old 'gal_box_ellipse_in_box' (to be more clear and avoid repetition of the term 'box'). The input position angle is now also in degrees, not radians. 'gal_box_overlap' now works on data of any dimensionality and thus also needs the number of dimensions (elements in each input array). 'gal_box_border_from_center' now accepts an array of coordinates as one argument and the number of dimensions as another. This allows it to work on any dimensionality. 'gal_fits_img_info' now also returns the name and units of the dataset (if they aren't NULL). So it takes two extra arguments. 'gal_wcs_pixel_scale' now replaces the old 'gal_wcs_pixel_scale_deg', since it doesn't only apply to degrees. The pixel scale units are defined by the units of the WCS. 'GAL_TILE_PARSE_OPERATE' (only when 'OTHER' is given) can now parse and operate on different datasets independent of the size of allocated block of memory (the tile sizes of 'IN' and 'OTHER' have to be identical, but not their allocated blocks of memory). Until now, it was necessary for the two blocks to have the same size and this is no longer the case. ** Bugs fixed MakeProfiles long options on 32bit big endian systems (bug #51341). Pure rotation around pixel coordinate (0,0) (bug #51353). NoiseChisel segfault when no usable region for sky clumps (bug #51372). Pixel scale measurement when dimension scale isn't equal or doesn't decrease (bug #51385). Improper types for function code in MakeProfiles (bug #51467). Crashes on 32-bit and big-endian systems (bug #51476). Warp's align matrix when second dimension must be reversed (bug #51536). Reading BZERO for unsigned 64-bit integers (bug #51555). Arithmetic with one file and no operators (bug #51559). NoiseChisel segfault when detection contains no clumps (bug #51906). Correct size checking when allocating gal_data_t (bug #52544). * Noteworthy changes in release 0.3 (library 1.0.0) (2017-06-01) [stable] This is a full re-write of Gnuastro. Most importantly, Gnuastro now has a new generic data container ('gal_data_t'). This new container can now deal natively with all standard numeric data types, work in RAM or HDD/SSD, keep data in any dimensions and has enabled many other very useful features. Some of the most prominent of the new features are discussed below. It is strongly recommended to review the respective section of the Gnuastro manual/book for a better feeling of all the new features. As discussed below, some program names have changed, if you have a previous version of Gnuastro installed from source, it is recommended to uninstall it first (with 'make uninstall' using the corresponding tarball), then install this new version. Building Gnuastro can be slow, so please build in parallel with Make's '-j8' option (to build on 8 threads). ** New programs or library features Library functions that deal with datasets now use this generic data container for inputs and outputs, significantly simplifying their API. Nearly all library functions have been re-written with much more clear names, argument lists and individual purpose. Some example library functions are shown below, also see the "Library demos" section of the book for some complete working example: -- 'gal_table_read' and 'gal_table_write' will read and write data to plain text, FITS ASCII and FITS Binary formats. -- 'gal_fits_img_read' and 'gal_fits_img_write' can read a FITS image to memory or write a FITS image from memory. Gnuastro now defines a simple comment line format to keep basic information in a plain text table, see the "Gnuastro text table format" section of the book. In short for every column, a comment line like below can be used to give a name, units, comments, or a type to a column. This allows a FITS binary table for example to be written to plain text and converted back to binary without loosing any information (except for very small floating point errors if not enough decimals are printed). # Column N: NAME [UNIT, TYPE, BLANK] COMMENT The new Fits program replaces the old Header program. But besides reading/checking FITS header keywords, it can now also work on FITS extensions/HDUs. For example with no options, it will list all the HDUs in a FITS file along with basic information. It can copy a whole HDU to another file, or delete a HDU from a FITS file. To get the previous behavior of listing all the keywords in a FITS HDU, you can run it with the '-p' option. All programs now write data into the second HDU of a FITS file to allow a clean first HDU. Note that following CFITSIO, HDU counting still starts from zero, so FITS images and tables written by Gnuastro in a new file can always be accessed with the '--hdu=1' option (which is now the default). If any program is run within a Git version controlled directory, a 'COMMIT' header keyword will be added to the created FITS files, see the "Output headers" section of the book for a discussion on the usefulness of this new feature. BuildProgram: a new program to easily compile, link and run a C program you have written with Gnuastro's libraries without having to worry about which libraries (Gnuastro dependencies) your program needs. Debugging ('-g'), optimizations ('-O'), warnings ('-W'), include search path ('-I'), link search path ('-L'), and linked libraries ('-l') compiler options are also supported. BuildProgram will greatly facilitate the easy usage of Gnuastro's libraries. ** Removed programs or library features The following program names have been renamed: ImageCrop --> Crop ImageWarp --> Warp ImageStatistics --> Statistics Header --> Fits SubtractSky has been removed. The Statistics program now has tools to estimate the Sky value and it can be subtracted with Arithmetic. ** New features All Gnuastro programs that read and write tables can now do so in plain text table format or in FITS ASCII or FITS Binary tables. Depending on the filename or with the new '--tableformat' common option to all programs. The option management system in all Gnuastro programs has been completely re-written with many new features, some of the most important ones are listed below. For developers, you will notice that there is no more usage of macros and adding new options has become much more easier. -- All programs will now also look for a 'gnuastro.conf' configuration file to keep common options for all programs in every directory. -- The '--lastconfig' option can be used on the command-line or in any configuration file to stop parsing any further configuration files. -- The '--config' option can now be used to identify any arbitrary file to be parsed as a configuration file. Any file that is given to this option is parsed immediately. -- The '--printparams' option now also prints the short documentation of each option (same description in '--help') after its value. It is now possible to choose columns in tables based on column names as well as column numbers. It is also possible to search for columns based on searching in their units or comments. When using column numbers, counting now starts from 1 (one), not 0 (as before). See the new "Selecting table columns" section for more on these new features. Where relevant, all programs now accept a '--type' option that you can use to specify the numerical datatype of the output. With the new common option '--minmapsize', you can specify a minimum size of an array (in bytes) to store data in SSD/HDD and not in RAM. This can be instrumental when you are dealing with large datasets, or even smaller ones, but when your RAM is getting full. Making a log file is now optional and users have to explicitly ask for it with the '--log' option. Slower building of Gnuastro: Binary operators (e.g., plus or multiply) are now done in the native type of the input dataset. Doing so for all the different combinations of types, greatly slows down the initial compilation of Gnuastro (after running 'make'). So for every type there is now a '--enable-bin-op-*' configure time option. When the dataset's type isn't compiled (only for the binary operators), it will be converted to a compiled type and then converted back in the end. Arithmetic: all operations are done in the native data type of the dataset. Until now, it would convert the data internally to double precision floating point, do the requested operation and write the data back in the proper type. So this new implementation is much more efficient. Arithmetic: two new classes of operators: type conversion operators to all standard types and integer-only operators (all C bit-wise operators and the modulo operator). ConvertType: can also print the input dataset to the command-line ('stdout'). To use this feature set the output filename to 'stdout'. Convolve now has the '--minsharpspec' option to specify the minimum spectrum value to use in deconvolution (matching PSFs). Crop: when in WCS mode it can still only work on aligned images. However, very small floating point errors in writing the WCS (for example 10e-13 degrees) are now acceptable. Until now these would cause Crop to complain and abort. Crop: the name of the crop can be pre-determined based on the values in a given in a table column. This allows your object's IDs to be directly used as the crop's file name for example. MakeCatalog now also reports the surface brightness in mag/arcsec^2. Until now, MakeCatalog would only print the dataset's surface brightness in units of magnitudes/pixel. But that is not nicely comparable to other datasets. Hence, using a simple calculation (from the pixel projected size, fully derived in the book), it now also reports the surface brightness in magnitudes/arcsec^2 also. MakeProfiles: Profile codes now start from '1' (until now they started from '0'). MakeProfiles: now accepts the radial function of profiles as human-readable strings instead of a code for each profile (which was very cryptic, although codes are also still acceptable). For example in the profile column you can now write 'sersic' instead of the code '1'. NoiseChisel: the new '--cleandilated' option will remove dilated objects that have a low S/N (it is mainly useful on very clean or mock images). For non-clean noise, it will result in a decrease of completeness. With this new option, NoiseChisel will also print detection S/N values when run with the '--checkdetsn' option. Statistics: now reads table columns as well as images and does basic operations on them. It can also only work on a certain range of the data (instead of the whole set). Alternatively, you can define the range on another reference column, but use values of the main column. Statistics: all its single-valued measurements can now be done on a tessellation (tile grid) over the input dataset. Statistics: can now estimate the Sky value on the input dataset using the mode's quantile similar to what NoiseChisel does to find its initial threshold. Statistics: has several new single valued calculations: '--quantile', '--quantfunc' (quantile function), '--mode', '--modequant', '--modesym', and '--modesymvalue'. Warp: align the image with the celestial coordinates using the '--align' option. Warp: standard modular warpings can now be requested without an input matrix, using the following options: '--shear', '--flip', '--project', '--rotate', '--scale', '--translate'. Any number of these transformations (along with the '--align' option) can be called on the command-line and they will be applied in the same order to create one warping matrix. By default the WCS will also be corrected. ** Changes in behavior Mask image options have been removed from all programs. Instead, all programs can work directly on data with blank values. So when some pixels must be masked, the Arithmetic program's 'where' operator can be used to select special pixels and set them to blank. In particular bit-wise operations are now available in Arithmetic to use bit-mask images. Managing all these different choices in every program would only confuse the user (with too many options). Arithmetic: the 'x' letter is now used to represent the multiplication operator. Previously it was '*' which needed quotation and was thus very inconvenient. Convolve: the old '--frequency' and '--spatial' options have been removed and are replaced by '--domain' which accepts values of 'frequency' and 'spatial'. Convolve: the old '--viewfreqsteps' was changed to '--checkfreqsteps' to fit with the general style of such check images in all Gnuastro's programs. Crop: '--section' syntax is now inclusive in both bounds. Crop: only checks if the center of a crop is filled when the crop was defined by its center (for example with '--ra' and '--dec'). The verbose outputs of Crop are also not cryptic 0s or 1s. The are human readable text. Crop: doesn't have separate '--imgmode' and '--wcsmode' options any more. There is now a single '--mode' option which accepts values of 'img' or 'wcs'. MakeProfiles: the old '--inputascanvas' is now called '--clearcanvas'. MakeProfiles: until now, it would abort with an error when the input columns had blank values. But for masking, it might happen that you set a blank magnitude. So this check has now been removed when reading the magnitude column. NoiseChisel: default value of the '--minskyfrac' option (new name for the old '--minbfrac') is now 0.7 as opposed to 0.5. This will allow much better estimation of noise properties (by default). It may be slightly too high for a crowded field, but the users can change it on the command-line (or in a configuration file) for such datasets. NoiseChisel: when it is run with any of the '--check' options, it will abort after all the check images have been created. This is very useful for checking your parameters until each step and not be distracted (or have to wait) for later steps to finish. Statistics: will not make a histogram and cumulative frequency files, or calculate sigma-clipped results by default (with no options). It will just print some basic information. Table: Previously, if a column was requested, the '-i' option would be ignored. But it often happens that the users forget a column name after already typing several of their desired columns. So the opposite behavior is preferred. Because when more than a couple of columns are needed, you will probably forget the column identifiers of the last few and having to retype everything is very frustrating. Something like how '--help' takes precedence over all other options. Table: to select column(s) by regular expression searching, the name now has to be put in '/ /' (similar to AWK). If a value isn't in '/ /', the programs will only select a column with the exact match. Warp: when a 2 by 2 matrix is given, the FITS pixel positions (which define the center of a pixel as an integer) are automatically implemented internally, see "Invoking Warp" in the manual for more. Warp: the old '--nofitscorrect' option has been changed to '--centeroncorner' to be more clear. The new option is now more general than before and also works on warping with a matrix, not just on modular warpings. Warp: the old '--nowcscorrection' option has been given a more clear name of '--keepwcs'. With this option, Warp will not apply the warp the input's WCS structure. Warp: the old '--maxblankfrac' option has been changed to '--coveredfrac'. Until now, Warp would only look for the fraction of input blank/NaN pixel area over the output pixel. But this would be useless on the edges of the image. So the new '--coveredfrac' option takes the acceptable fraction of output pixel area that must be covered by input pixels in order to give that output pixel a value. You can use this to set edge pixels that are not fully covered in the new grid to blank and have a flat warped image. ** Bugs fixed Using '%zu' to print 'size_t' variables for clean build on 32-bit systems. Crash in Table for some operating systems due to memory is now fixed (bug #49347). Table's man-page is now created and installed (bug #49418). Fixes in the documentation (sr #109170, bug #49419). Check for malloc returning valid pointer (bug #49459). Segfault in mesh interpolation corrected (bug #49588). Corrected bad status usage in calls to wcsp2s and wcss2p (bug #49752). Stricter checking in Crop's polygon point list (bug #48978). Correction in alignment and getting pixel scale (bug #50072). Decomposing PCi_j and CDELTi matrices in output WCS (bug #50073). Using image naxes[n] when checkcenter is larger (bug #50099). Memory leak in MakeCatalog corrected (bug #51118). Fix copy-paste error in MakeCatalog flag arrays (bug #51130). * Noteworthy changes in release 0.2 (library 0.0.0) (2016-10-03) [stable] ** Bugs fixed Linker errors on some operating systems have been fixed (bug #48076). Several memory allocation, checks or redundancies have been fixed: bugs #48453, #48516, #48603, #48611, #48571, #48650, #48657, #48692, #48770, #47866, #48899, #49049, #49007. ImageCrop no longer crashes with very long output file names (bugs #46241 and #45380). ** New programs or headers Table: a new utility to read and write FITS binary and ASCII tables. It can also print the column information or select columns using regular expressions (task #13579). Shared libraries and headers are now installed. The libraries can be used in C and C++ programs. This release includes the following headers: 'gnuastro.h', 'array.h', 'box.h', 'fits.h', 'linkedlist.h', 'mesh.h', 'polygon.h', 'qsort.h', 'spatialconvolve.h', 'statistics.h', 'threads.h', 'wcs.h', 'txtarray.h' (task #13765). Gnuastro now comes with a script in its top source directory ('tmpfs-config-make') to configure and build it in the tmpfs (on the RAM), for those systems that have it. See the new "Configure and build in RAM" section in the book for more (task #14100). ** New features MakeProfiles also accepts WCS positions (task #13566). Flat profiles in MakeProfiles can be given a profile specific value. The new '--mforflatpix' option MakeProfile will use the value in the magnitude column as a fixed value for each pixel. This can be very useful in defining a mask, or creating segmentation maps or labeled images (task #14115). MakeProfiles can now use input image as canvas. Instead of specifying the WSC and image size parameters manually. With the new '--inputascanvas' option, MakeProfiles will get this information (along with blank pixels) from an already existing image (task #14116). Type of output in MakeProfiles and Arithmetic can be specified with the '--type' option. Magnitude error column in MakeCatalog with the '--magnitudeerr' option. Arithmetic now has new conditional (task #13870) and logical operators (task #14153) along with an operator for actions only when conditions are true: 'where'. The new 'isblank' operator will also enable you to select blank, or masked, pixels (task #14146). The '--noerodequant' in NoiseChisel enables it to detect small and sharper profiles by disabling erosion on pixels above a certain quantile (task #14139). MakeCatalog can also calculate the upper limit magnitude for each given object in the image by randomly positioning the object's footprint over undetected regions of the image (task #14167). The source tarball is now also distributed with Lzip for a much better compression ratio and more robust archival file format. ** Changes in behavior The two MakeProfiles options '--setconsttonan', '--setconsttomin' have been removed (see '--mforflatpix' above for their alternative). MakeCatalog makes clump catalog only when asked (when the 'WCLUMPS' header exists in the objects HDU). This can be very useful in cases like aperture photometry, when the object labels are not generated by NoiseChisel and so a clump image doesn't exist (task #14122). Default cosmological parameters in CosmicCalculator set to Plank 2015 results: A&A (2016), 594, A13 (arXiv 1502.01589). The '--envseed' option (to read random number generator type and seed from the environment) to MakeProfiles and MakeNoise can also be given in the configuration files. * Noteworthy changes in release 0.1 (2016-05-30) [stable] ** Bugs fixed MakeCatalog's problem in checking the sizes of all input images is now fixed. NoiseChisel's problem with reading the '--kernel' option is now corrected (bug #46750). lib/mesh.c's problem in correctly calculating the mesh sizes was corrected (bug #47611). 'make check' will not look into system utility configuration files. In the previous release, if Gnuastro was already installed, the configuration files already present on the system would also be read. Now only configuration files in the tested package are used (bug #47833). Ghostscript's version is now checked at configure time after its existence. ConvertType uses the '-dPDFFitPage' option to Ghostscript which was introduced in version 9.10, so older versions would pass configure but at 'make check' time, the PDF test would fail. Now this test is skipped (bug #47868). Most tests would fail when 'make check -jN' was run (to do the checks on N threads). A dependency structure has now been defined to fix this problem and greatly speed up the testing process (bug #47957). ** New utilities Arithmetic: For arithmetic operations on the pixels of input images. With this utility, it is now possible to add multiple images with each other, or easily calculate a median image. It as a large set of other arithmetic operations and some functions which can be done on the input image(s). An unlimited number of input images can be given, the images will only be loaded when necessary and will be freed as soon as they are no longer necessary. CosmicCalculator: For doing cosmological calculations at a given redshift. ** New features All the utilities that would produce a log file now have a '--nolog' option to avoid printing a log file. The tiled image compression convention (.fits.fz, created with 'fpack') files can now be used as input in the utilities. ImageCrop can now also crop a polygon from the input image. The polygon vertices can be given in the world or image coordinates. The simple '--polygon' option will keep the insides of the polygon while the '--outpolygon' will keep the outside of the polygon. ImageCrop and ImageWarp can now read the WCS information of a FITS header from a specific region with the '--hstartwcs' and '--hendwcs'. In some older FITS images, when the WCS distortions were not as standardized as now, there were cases which would confuse WCSLIB. NoiseChisel can now save the grown clumps image instead of the original clumps image in the output with the '--grownclumps' option. Convolve can now do deconvolution with the '--makekernel' option. MakeProfiles now has a '--setconsttonan' option which will fill the constant profiles with a NaN (blank) value, not a number, allowing the creations of elliptical masked regions for example. Header can now import a keyword directly from a string with the '--asis' option. MakeCatalog can now output the geometric (average position independent of pixel flux value) positions of the objects too. MakeCatalog can now produce the object's elliptical parameters (for example semi-major axis, semi-minor axis, and position angle). This can also be done both in standard flux weighted and geometric methods too. MakeCatalog now has a '--threshold' function to only use pixels above a given threshold in each object or clump. This is useful to avoid diffuse regions in calculations. MakeCatalog now has a '--noriverbrightness' option. With this option it is possible to calculate the clump flux without subtracting the river pixels on its circumference. The number of CPU threads is no longer a configuration option, it is now determined at run-time for each program. Therefore it is now easily possible to built Gnuastro on one system to use on another (commonly done in the GNU/Linux package managers). Therefore ./configure no longer has a '--with-numthreads' option. Every commit in Gnuastro's history (after implementing this feature) can now be given a unique version number. Since the version number is printed in possible outputs, this feature can help reproducibility, even when the an official/stable release isn't used. The AUTHORS file is now automatically generated from the version controlled history. Also all the authors that have contributed to Gnuastro are included in the second (copyright) page of the PDF book. All the bootstrapped directories are now moved with a new 'bootstrapped' directory in the top source directory. This significantly cleans up this directory, allowing users to more easily find the hand-written Gnuastro source files they like. A 'bug-gnuastro' Info page was created so users can easily go to that page for information on how to submit bug reports. It is accessible on the command line with the command 'info bug-gnuastro'. ** Changes in behavior The separate utilities no longer have a separate version number. With the introduction of unofficial version numbers generated from each commit in Gnuastro's history, the utility version numbers would cause confusion. MakeProfiles will now add a suffix to the individual images and put them in the output directory if specified. NoiseChisel and MakeCatalog now use the median mesh standard deviation to define the over-all depth of the image. Previously they used the maximum value (or the least depth). NoiseChisel no longer outputs a sky subtracted image. This job can now be done with the new Arithmetic utility. NoiseChisel's '--segsnhistnbins' option was renamed to '--clumpsnhistnbins'. ** Improvements NoiseChisel's default quantiles were changed to 0.95 from 0.99. Since the old value was too severe. NoiseChisel's S/N thresholds are now found from the distribution of pseudo-detections and clumps from the full image, not within each large mesh. This was done to increase the accuracy of the S/N threshold. There were commonly not enough points in large mesh sizes and this would add scatter. With ImageCrop's polygon capabilities, it is now easily possible to cut out the region that has uniform noise properties (depth and correlated noise). Therefore the old '--checkdetectionsn' and 'checkclumpsn' options are no longer present. When building from the version controlled source, the whole bootstrapping process is done with one script. In the previous version, all the separate operations should have been done by hand (as instructed in the old manual). All the build steps now report what was done and suggest the next step. This feature can be disabled with the '--disable-guide-message' at configure time. * Copyright notice Copyright (C) 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/THANKS��������������������������������������������������������������������������������0000644�0001750�0001750�00000022625�14557475506�007724� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GNU Astronomy Utilities Acknowledgments ======================================= Copyright (C) 2015-2024 Free Software Foundation, Inc. See the end of the file for license conditions. The following people and institutions who contributed to Gnuastro indirectly (not by actually submitting code) are listed here. For the list of Gnuastro code/documentation authors (people who have contributed actual code/text as commits in the version controlled history of Gnuastro), please see the 'AUTHORS' file in the same directory. People ------ The following people provided valuable feedback (suggestions, ideas) to the authors of Gnuastro. We hereby gratefully acknowledge their help and support in Gnuastro. The list is ordered alphabetically (by family name). Aaron Watkins aaron.watkins@oulu.fi Adrian Bunk bunk@debian.org Agata Rożek a.rozek@ed.ac.uk Alan Lefor alefor@astr.tohoku.ac.jp Alberto Madrigal brt.madrigal@gmail.com Alberto Moreno Signes amoreno@cefca.es Alejandro Lumbreras Calle alumbreras@cefca.es Alejandro Serrano Borlaff asborlaff@ucm.es Alessandro Ederoclite aederocl@gmail.com Alexey Dokuchaev danfe@freebsd.org Alfred M. Szmidt ams@gnu.org Alireza Molaeinezhad amolaei@gmail.com Andrés Del Pino Molina adelpino@cefca.es Andrés García-Serra Romero alu0101451923@ull.edu.es Antonio Diaz Diaz antonio@gnu.org Aurélien Jarno aurelien.jarno@univ-lyon1.fr Benjamin Clement benjamin.clement@univ-lyon1.fr Bertrand Pain bertrand.pain@inserm.fr Bob Proulx bob@proulx.com Boudewijn F. Roukema boud@cosmo.torun.pl Brandon Invergo brandon@gnu.org Brandon Kelly b.k.kelly@2017.ljmu.ac.uk Bruno Haible bruno@clisp.org Carlos Allende Prieto callende@iac.es Carlos Morales Socorro cmorsoc@gmail.com Christopher Willmer cnaw@as.arizona.edu Clotilde Laigle laigle@iap.fr Colin Orion Chandler coc123@uw.edu Craig Gordon craig.a.gordon@nasa.gov David Shupe shupe@ipac.caltech.edu David Valls-Gabaud david.valls-gabaud@obspm.fr Dmitrii Oparin doparin2@gmail.com Elham Eftekhari elhamea@iac.es Elham Saremi saremi@ipm.ir Eric Thiébaut eric.thiebaut@univ-lyon1.fr Faezeh Bidjarchian fbidjarchian@gmail.com Fernando Buitrago fbuitrago@oal.ul.pt Floriane Leclercq floriane.leclercq@univ-lyon1.fr Francesco Montanari francesco.montanari@openmailbox.org Francois Ochsenbein francois.ochsenbein@gmail.com Gaspar Galaz ggalaz@astro.puc.cl Geoffry Krouchi geoffrey.krouchi@etu.univ-lyon1.fr Giulia Golini giulia.golini@gmail.com Guillaume Mahler guillaume.mahler@univ-lyon1.fr Hamed Altafi hamed.altafi2@gmail.com Helena Domínguez Sánchez hdominguez@cefca.es Hilderic Browne hilderic@storm.ca Ignacio Ruiz Cejudo igruiz04@ucm.es Ignacio Trujillo trujillo@iac.es Irene Pintos Castro ipintos@cefca.es Javier Licandro jlicandr@iac.es Javier Moldon jmoldon@iaa.es Jenny Sorce jenny.sorce@univ-lyon1.fr Jeremy Lim jjlim@hku.hk Jesús Varela jvarela@cefca.es Joanna Sakowska js01093@surrey.ac.uk Johan Knapen jhk@iac.es Johannes Zabl johannes.zabl@irap.omp.eu Joseph Mazzarella mazz@ipac.caltech.edu Joseph Putko josephputko@gmail.com Juan Antonio Fernández Ontiveros jafernandez@cefca.es Juan C. Tello jtello@iaa.es Juan Miro miro.juan@gmail.com Juan Molina Tobar juan.a.molina.t@gmail.com Karl Berry karl@gnu.org Lee Kelvin lee.s.kelvin@gmail.com Lee Spitler lee.spitler@mq.edu.au Leindert Boogaard boogaard@strw.leidenuniv.nl Leslie Hunt leslie.hunt@inaf.it Madusha Gunawardhana gunawardhana@strw.leidenuniv.nl Mamta Pommier mamta.pommier@univ-lyon1.fr Manuel Sánchez-Benavente manuelsb93@gmail.com Marcel Popescu mpopescu@iac.es Marjan Akbari mrjakbari@gmail.com Mark Calabretta mcalabre@atnf.csiro.au Markus Schaney markus@riseup.net Martin Guerrero Roncel mar@iaa.es Martin Kuemmel mkuemmel@usm.lmu.de Michael H.F. Wilkinson m.h.f.wilkinson@gmail.com Michael Stein mstein@astro.rub.de Michel Tallon mtallon@obs.univ-lyon1.fr Mohammad-Reza Khellat moha.khe@gmail.com Nafise Sedighi sedighinafise94@gmail.com Nicolas Bouché nicolas.bouche@irap.omp.eu Nima Dehdilani nimadehdilani@gmail.com Nushkia Chamba chamba@iac.es Ole Streicher olebole@debian.org Oryna Ivashtenko arinaivashtenko@gmail.com Paola Dimauro paola.dimauro@inaf.it Paul Eggert eggert@cs.ucla.edu Peter Teuben teuben@umd.edu Pierre-Alain Duc pierre-alain.duc@astro.unistra.fr Rahna Payyasseri Thanduparackal rpayyasseri@cefca.es Raphael Morales rmorales@iaa.es Rashid Yaaqib r.yaaqib@gmail.com Raúl Infante Sainz infantesainz@gmail.com Richard Stallman rms@gnu.org Richard Wilbur richard.wilbur@gmail.com Roberto Baena Gallé rbaena@iac.es Roland Bacon roland.bacon@univ-lyon1.fr Rosa Calvi rcalvi@iac.es Ryan Begley rbeg@roe.ac.uk Samane Raji samaneraji@gmail.com Sara Yousefi Taemeh s.yousefi.t@gmail.com Sebastián Luna Valero sluna@iaa.es Sepideh Eskandarlou sepideh.eskandarlou@gmail.com Sergio Chueca Urzay chueca@cefca.es Siyang He siyang.he.uw@gmail.com Stefan Brüns stefan.bruens@rwth-aachen.de Stephen Hamer stephen.hamer@univ-lyon1.fr Sylvain Mottet mottet@iap.fr Sílvia Farras silvia.farras1@gmail.com Takashi Ichikawa ichikawa@astr.tohoku.ac.jp Tamara Civera Lorenzo tcivera@cefca.es Teet Kuutma tkuutma@cefca.es Teymoor Saifollahi teymur.saif@gmail.com Thérèse Godefroy godef.th@free.fr Thorsten Alteholz thorsten@alteholz.dev Valentina Abril-melgarejo valentina.abril@lam.fr Vincenzo Testa vincenzo.testa@inaf.it William Pence william.pence@nasa.gov Xiuqin Wu xiuqin@ipac.caltech.edu Yahya Sefidbakht y.sefidbakht@gmail.com Zahra Bagheri bagheri.zahra87@gmail.com Zahra Hosseini 2hs.zahra@gmail.com Zahra Sharbaf samaeh.sharbaf2@yahoo.com Zohreh Ghaffari zoh.ghaffari@gmail.com Teams ----- The members of the following teams also provided great help and support. GNU French Translation Team: https://savannah.gnu.org/projects/www-fr Institutions ------------ Host institutions of Gnuastro's developers. Tohoku University Astronomical Institute, Sendai, Japan. University of Salento, Lecce, Italy. Centre de Recherche Astrophysique de Lyon (CRAL), Lyon, France. Instituto de Astrofisica de Canarias (IAC), Tenerife, Spain. Google Summer of Code(GSoC). Centro de Estudios de Física del Cosmos de Aragón (CEFCA), Teruel, Spain. Copyright --------- Copyright (C) 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. �����������������������������������������������������������������������������������������������������������gnuastro-0.22/COPYING.FDL���������������������������������������������������������������������������0000644�0001750�0001750�00000055057�14435153341�010436� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� GNU FREE DOCUMENTATION LICENSE Version 1.3, 3 November 2008 Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <https://fsf.org/>. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties—for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements". 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See https://www.gnu.org/licenses/. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with … Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/genauthors����������������������������������������������������������������������������0000755�0001750�0001750�00000006316�14551337306�011102� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # # Generate a list of authors from the git repository, it will only # actually do anything if a .git file exists. Run like this: # # ./genauthors top/bin/dir # # Note that some authors might have changed their email addresses over # the course of their contributions to Gnuastro. Fortunately Git has a # great tool for that: the .mailmap file. It has already been included # in the source code and if any author changes their email address or # would want their name to be printed differently here, please use # that file. See the git-shortlog manpage for a complete explanation # of all the possible ways to do this. # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # Gnuastro 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. # Initial settings: set -o nounset # Stop if a variable is not set. set -o errexit # Stop if a program returns false. # Only do the job if a .git directory exists (recall that this script # is also present in the tar-ball with no .git directory and might be # run from there) if [ ! -d "$1/.git" ]; then echo "There is no Git repository in the source directory." echo "AUTHORS cannot be generated." exit 0 fi # Print a status report, since this will be run along with the large # number of bootstrap operations, it is best to tell the users since # it might take a few seconds. echo "Generating AUTHORS from the version controlled source..." # Make sure the .mailmap file is present in this directory, so Git can fix # the different email addresses and names of one person. Note that while # this is in the top source directory, it is possible for the source and # build directories to be different, and we have to be prepared for that. if [ ! -f .mailmap ]; then ln -s $1/.mailmap .mailmap fi # Set the version number. Note that this script is also run at the start of # the bootstrapping process. At that point we don't have the '.version' # file, so we will just rely on '.git describe'. Later during 'make', this # scripot will be run again to set it using 'git-version-gen'. if [ -f "$1/.version" ]; then gnuastroversion="Gnuastro "$(cat "$1/.version") else gnuastroversion=$(git --git-dir=$1/.git describe --always) fi # Print the top of the AUTHORS file. echo "GNU Astronomy Utilities (Gnuastro) authors ========================================== Generated for $gnuastroversion. Ordered by number of commits in the Git project history. " > $1/AUTHORS # Generate the aggregate list git --git-dir=$1/.git shortlog --summary --email --no-merges \ --numbered >> $1/AUTHORS ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/.dir-locals.el������������������������������������������������������������������������0000644�0001750�0001750�00000002165�14435153341�011420� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; This files contains Emacs Directory Local Variables. ;; ;; Emacs is an extensible, customizable, free/libre text editor. It ;; allows specification of certain settings that will be applied to ;; all files in current directory and its subdirectories. This is ;; useful in order to automatically enforce certain coding conventions ;; for all contributors of Gnuastro, like the maximum length of lines ;; or the number of spaces to be used for indentation. ;; ;; For more information see (info "(emacs) Directory Variables") ;; ;; Copyright (C) 2015-2020 Free Software Foundation, Inc. ;; ;; Copying and distribution of this file, with or without modification, ;; are permitted in any medium without royalty provided the copyright ;; notice and this notice are preserved. This file is offered as-is, ;; without any warranty. ((nil (indent-tabs-mode . nil) ;; No tabs as indentation (fill-column . 75)) ;; 75-character wide lines (c-mode (c-basic-offset . 2) ;; 2 spaces of indentation (c-file-style . "gnu")) ;; GNU style for braces (makefile-mode (indent-tabs-mode . t)) ;; Real TABs are important in makefiles ) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/.version������������������������������������������������������������������������������0000644�0001750�0001750�00000000005�14557514005�010447� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0.22 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/developer-build�����������������������������������������������������������������������0000755�0001750�0001750�00000036024�14551337306�012004� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/bash # This script will configure and build Gnuastro in parallel inside another # directory (to keep the source and build directories separate). By default # it is in the tmpfs directory of the RAM. Run with '--help' for a more # complete description. # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Mosè Giordano <mose@gnu.org> # Raul Infante-Sainz <infantesainz@gmail.com> # Pedram Ashofteh-Ardakani <pedramardakani@pm.me> # Copyright (C) 2016-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see <http://www.gnu.org/licenses/>. # Exit the script if any of the commands fail set -e # Default values for variables. jobs=0 dist=0 debug=0 clean=0 check=0 reconf=0 upload=0 install=0 valgrind=0 compression=lzip prefix=/usr/local # Check and set the temporary directory if [ -d /dev/shm ]; then top_build_dir=/dev/shm elif [ -d /tmp ]; then top_build_dir=/tmp else top_build_dir=. fi if [ -f .version ]; then version=$(cat .version) else version="" fi # Output of help. me=$0 # Executable file name. help_print() { # See if autoreconf is enabled or not. if [ $reconf = "0" ]; then reconf_status="DISABLED" else reconf_status="ENABLED" fi # See if debug is enabled or not. if [ $debug = "0" ]; then debug_status="DISABLED" else debug_status="ENABLED" fi # See if valgrind is enabled or not. if [ $valgrind = "0" ]; then valgrind_status="DISABLED" else valgrind_status="ENABLED" fi # See if clean is enabled or not. if [ $clean = "0" ]; then clean_status="DISABLED" else clean_status="ENABLED" fi # See if check is enabled or not. if [ $check = "0" ]; then check_status="DISABLED" else check_status="ENABLED" fi # See if install is enabled or not. if [ $install = "0" ]; then install_status="DISABLED" else install_status="ENABLED" fi # See dist is enabled or not. if [ $dist = "0" ]; then dist_status="DISABLED" else dist_status="ENABLED" fi # See if upload is enabled or not. if [ $upload = "0" ]; then upload_status="DISABLED" else upload_status="ENABLED" fi # Print the output. cat <<EOF Usage: $me [OPTION]... Configure and make the package in a separate directory and put a symbolic link to that directory in the current directory. A top build directory must be given to host the build directory for this script (see 'top-build-dir' option below). The symbolic link to the build directory in this directory will be called 'build'. Through the options, it also possible to request further operations after the build (for example checking, making distribution files or installing). See the "Separate build and source directories" section of the Gnuastro manual for a more complete introduction to this script. Options: -b, --top-build-dir STR Address to host the top build directory. Current value: $top_build_dir -o, --prefix STR Install architecture-independent files here. Current value: $prefix --confopts "STR" Add extra configure options manually. Please note that all of the options must be wrapped between double quotations '"', so that the script does not confuse them with 'developer-build' options. -V, --version Print current version to be used in absolute build directory name. Current value: $version -a, --autoreconf Run 'autoreconf -f' (to set the version and update the build system) before anything else. Current status: $reconf_status -c, --clean Delete (with 'rm') all its contents of the build directory before starting new configuration. Current status: $clean_status -d, --debug Build Gnuastro with debugging information, no optimization flags, and without shared libraries. Current status: $debug_status -v, --valgrind Build with '--enable-check-with-valgrind'. Current status: $valgrind_status -j, --jobs INT Number of threads to use in 'make'. Current value: $jobs -C, --check Run 'make check' after the build. Current status: $check_status -i, --install Run 'sudo make install' after the build. Current status: $install_status -D, --dist Build a compressed tarball and PDF manual. Current status: $dist_status -z, --compression=STR Compression algorithm to use: 'lz' or 'xz'. Current value: $compression -u, --upload STR First run '--dist', then upload tarball and PDF manual to the given 'server:folder'. For example: -u my-server:folder Current status: $upload_status -p, --publish STR Short for '-a -c -d -C -u STR'. '-d' is added because it will greatly speed up the build. It will have no effect on the produced tarball. -I, --install-archive Short for '-a -c -C -i -D'. -P, --printparams Another name for '--help', for similarity with Gnuastro's programs. Note that the output of '--help' also includes the variable values. -h, --help Print this help list. Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ Report bugs to bug-gnuastro@gnu.org. EOF } # Parse the arguments. while [[ $# -gt 0 ]] do key="$1" case $key in --confopts) confopts="$2" if [ x"$confopts" = x ]; then echo "No argument given to '--confopts'." exit 1; fi shift # past argument shift # past value ;; -o|--prefix) prefix="$2" if [ x"$prefix" = x ]; then echo "No argument given to '--prefix' ('-o')." exit 1; fi shift # past argument shift # past value ;; -b|--top-build-dir) top_build_dir="$2" if [ x"top_build_dir" = x ]; then echo "No argument given to '--top-build-dir' ('-b')." exit 1; fi shift # past argument shift # past value ;; -V|--version) echo $version exit 0 ;; -a|--autoreconf) reconf=1 shift # past argument ;; -c|--clean) clean=1 shift # past argument ;; -d|--debug) debug=1 shift # past argument ;; -v|--valgrind) valgrind=1 shift # past argument ;; -j|--jobs) jobs="$2" if [ x"jobs" = x ]; then echo "No argument given to '--jobs' ('-j')." exit 1; fi shift # past argument shift # past value ;; -C|--check) check=1 shift # past argument ;; -i|--install) install=1 shift # past argument ;; -D|--dist) dist=1 shift # past argument ;; -z|--compression) compression="$2" shift # past argument shift # past value ;; -u|--upload) dist=1 upload=1 url="$2" if [ x"$url" = x ]; then echo "No SERVER:DIR given to '--upload' ('-u') ." exit 1; fi shift # past argument shift # past value ;; -p|--publish) dist=1 clean=1 debug=1 check=1 reconf=1 upload=1 url="$2" if [ x"$url" = x ]; then echo "No SERVER:DIR given to '--publish' ('-p') ." exit 1; fi shift # past argument shift # past value ;; -I|--install-archive) dist=1 clean=1 check=1 reconf=1 install=1 shift # past argument ;; -h|-P|--help|--printparams) help_print exit 0 ;; *) # unknown option echo "'$1' isn't a recognized option. Aborted." echo echo "Recall that for this script, options and their values must be" echo "separated by atleast one white-space character." exit 1 ;; esac done # Check if the configure script already exists. If not, let the user know # what to do. if ! [ -f configure ]; then echo "The 'configure' script doesn't exist!" echo "It is created after bootstrapping Gnuastro." echo; echo "The dependencies to bootstrap Gnuastro are described here:" echo " https://www.gnu.org/software/gnuastro/manual/html_node/Bootstrapping-dependencies.html" echo; echo "Afterwards, the bootstrapping process is described here:" echo " https://www.gnu.org/software/gnuastro/manual/html_node/Bootstrapping.html" echo; echo "If you don't want to develop Gnuastro, but just build, install and use it, you don't need to bootstrap, please use the tarball:" echo " https://ftp.gnu.org/gnu/gnuastro/" exit 1 fi # Make sure a reasonable value is given to '--compression': if [ x"$compression" = xlzip ]; then compsuff=lz; elif [ x"$compression" = xxz ]; then compsuff=xz; else echo "$compression: value of '--compression' ('-z') not recognized. It should be either 'lzip' or 'xz'"; exit 1 fi # Keep the address of this source directory (where this script is being run # from) which we will need later. srcdir=$(pwd) # Set the number of jobs # ---------------------- # # If the user hasn't manually specified the number of threads, see if we # can deduce it from the host: # - On systems with GNU Coreutils we have 'nproc'. # - On BSD-based systems (for example FreeBSD and macOS), we have a # 'hw.ncpu' in the output of 'sysctl'. # - When none of the above work, just set the number of threads to 1. if [ $jobs = 0 ]; then if type nproc > /dev/null 2> /dev/null; then jobs=$(nproc --all); else jobs=$(sysctl -a | awk '/^hw\.ncpu/{print $2}') if [ x"$jobs" = x ]; then jobs=1; fi fi fi # Check if top_build_dir exists if [ ! -d $top_build_dir ]; then echo "$top_build_dir doesn't exist. Aborted." exit 1 fi # Set the build directory name in tmpfs. If the .version file exists, use # it to allow multiple version builds there (which might happen during # development). basedir=$(basename -- "$srcdir") if [ -f .version ]; then build_dir=$top_build_dir/"$basedir"-$version else build_dir=$top_build_dir/"$basedir" fi # Make the build directory (if it doesn't already exist). if [ ! -d $build_dir ]; then mkdir $build_dir fi # If reconfiguration was requested, do it. if [ $reconf = 1 ]; then autoreconf -f fi # Make a symbolic link to the tmpfs build directory for users to easily # access the built files and also follow the progress. We are first # deleting any existing symbolic link and remaking it since the possible # deletion of $build_dir during the development can complicate the # pre-existing symbolic link. build_sym=build if [ -h $build_sym ]; then # Delete a harmless symbolic link, if present. rm $build_sym fi # Create the link only if the symbolic link doesn't exist. if [ ! -e $build_sym ]; then ln -s $build_dir $build_sym else echo "$build_sym already exists here and is not a symbolic link." echo "Aborted." exit 1 fi # Clean the contents of the build directory if requested. if [ x$clean = x1 ]; then rm -rf $build_sym/* fi # Go into the build directory to start the configure and/or build: cd $build_dir # If a 'Makefile' doesn't exist, then configure Gnuastro. if [ ! -f Makefile ]; then # Set the proper flags. if [ x$debug = x1 ]; then confopts="$confopts --enable-debug" fi if [ x$valgrind = x1 ]; then confopts="$confopts --enable-check-with-valgrind" fi # Run the configure script. $srcdir/configure --srcdir=$srcdir $confopts --prefix=$prefix fi # Build Gnuastro in that directory with the specified number of threads make -k -j$jobs # If requested, also run 'make check'. if [ x$check = x1 ]; then make check -k -j$jobs fi # Make the tarball and PDF for distribution. Then put a copy of the PDF in # the top build directory for easy usage later. if [ x$dist = x1 ]; then make dist-$compression pdf cp doc/gnuastro.pdf ./ fi # Upload the tarball to the requested server. if [ x$upload = x1 ]; then # Get the base package name, and use it to make a generic tarball # name. Note that with the '--upload' option, '--dist' is also # activated, so the tarball is already built and ready by this # step. tarball=$(ls *.tar.$compsuff) base=$(echo $tarball | sed -e's/-/ /' | awk '{print $1}') # File names: pdf=$base.pdf latest=$base"-latest.tar.$compsuff" # Copy the files to the subdirectories of the given URL (must include # folders). scp $tarball $url/src scp $pdf $url/pdf # Make the symbolic links on the server. server=$(echo "$url" | sed -e's/:/ /' | awk '{print $1}') sdir=$(echo "$url" | sed -e's/:/ /' | awk '{print $2}') ssh $server 'cd '"$sdir"' && rm -f '$latest' && ln -s src/'$tarball $latest ' && exit' echo; echo "On $url:" echo " $latest -> src/$tarball" fi # If requested, run 'sudo make install'. if [ x$install = x1 ]; then # Check if user has permission to write in $prefix, if not, use 'sudo'. if [ -w $prefix ]; then make install -kj$jobs else sudo make install -kj$jobs fi fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/.autom4te.cfg�������������������������������������������������������������������������0000644�0001750�0001750�00000002430�14435153341�011263� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configuration file for autom4te # =============================== # # autom4te is used to create the familiar `./configure' script from # configure.ac (hand written by Gnuastro developers). autom4te is # called during the bootstrapping process (see README-hacking, or the # "Bootstrapping" section in the manual). # # To speed up the process, a directory (`autom4te.cache') is created # which keeps cache information which can speed up its next call. But # this directory is built in the top Gnuastro directory which just # redundantly fills it up with a non-edited directory. So through this # configuration file, we are asking autom4te to make its cache # directory within the bootstrapped directory to keep things on the # top directory clean. # # Copyright (C) 2015-2020 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # We are using the Autoconf manual's "Customizing autom4te" and # "Invoking autom4te" sections as a reference for this file. begin-language: "Autoconf-without-aclocal-m4" args: --cache=./bootstrapped/autom4te.cache end-language: "Autoconf-without-aclocal-m4"����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/����������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514201�007612� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514201�011454� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/config.h�����������������������������������������������������������������0000444�0001750�0001750�00000004731�14557514012�013015� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions dealing with general aspects of all Gnuastro. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Pedram Ashofteh-Ardakani <pedramardakani@pm.me> Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_CONFIG_H__ #define __GAL_CONFIG_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* The restrict keyword might not be present on some systems, so we are redefining it here based on the checks in 'configure.ac', see there for more comments. */ #define restrict __restrict__ /* Configuration macros: */ #define GAL_CONFIG_VERSION "0.22" #define GAL_CONFIG_HAVE_PYTHON 0 #define GAL_CONFIG_HAVE_LIBGIT2 1 #define GAL_CONFIG_HAVE_GNUMAKE_H 1 #define GAL_CONFIG_HAVE_WCSLIB_DIS_H 1 #define GAL_CONFIG_HAVE_WCSLIB_MJDREF 1 #define GAL_CONFIG_HAVE_WCSLIB_OBSFIX 1 #define GAL_CONFIG_HAVE_WCSLIB_VERSION 1 #define GAL_CONFIG_HAVE_FITS_IS_REENTRANT 1 #define GAL_CONFIG_HAVE_GSL_INTERP_STEFFEN 1 #define GAL_CONFIG_HAVE_PTHREAD_BARRIER 1 #define GAL_CONFIG_SIZEOF_LONG 8 #define GAL_CONFIG_SIZEOF_SIZE_T 8 /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_CONFIG_H__ */ ���������������������������������������gnuastro-0.22/lib/gnuastro/python.h�����������������������������������������������������������������0000644�0001750�0001750�00000004011�14551337306�013065� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* python -- Functions to assist Python wrappers using Gnuastro's library. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Jash Shah <jash28582@gmail.com> Contributing author(s): Mohammad Akhlaghi <mohammad@akhlaghi.org> Copyright (C) 2022-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_PYTHON_H__ #define __GAL_PYTHON_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /************************************************************* ************** Type codes *************** *************************************************************/ int gal_python_type_to_numpy(uint8_t type); uint8_t gal_python_type_from_numpy(int type); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TABLE_H__ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/arithmetic.h�������������������������������������������������������������0000644�0001750�0001750�00000036116�14551337306�013710� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic -- Preform arithmetic operations on datasets. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Faezeh Bidjarchian <fbidjarchian@gmail.com> Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_ARITHMETIC_H__ #define __GAL_ARITHMETIC_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below. */ #include <gnuastro/data.h> /* When we are within Gnuastro's building process, 'IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular 'GAL_CONFIG_ARITH_CHAR' and the rest of the types that we needed in the arithmetic function) is kept in 'config.h'. When building a user's programs, this information is kept in 'gnuastro/config.h'. Note that all '.c' files must start with the inclusion of 'config.h' and that 'gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro). */ #ifndef IN_GNUASTRO_BUILD #include <gnuastro/config.h> #endif /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Arithmetic on-off bit flags (have to be powers of 2). */ #define GAL_ARITHMETIC_FLAG_INPLACE 1 #define GAL_ARITHMETIC_FLAG_FREE 2 #define GAL_ARITHMETIC_FLAG_NUMOK 4 #define GAL_ARITHMETIC_FLAG_ENVSEED 8 #define GAL_ARITHMETIC_FLAG_QUIET 16 #define GAL_ARITHMETIC_FLAGS_BASIC ( GAL_ARITHMETIC_FLAG_INPLACE \ | GAL_ARITHMETIC_FLAG_FREE \ | GAL_ARITHMETIC_FLAG_NUMOK ) /* Operator fixed strings. */ #define GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX "load-col-" #define GAL_ARITHMETIC_OPSTR_LOADCOL_HDU "-hdu-" #define GAL_ARITHMETIC_OPSTR_LOADCOL_FILE "-from-" #define GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX_LEN strlen(GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX) #define GAL_ARITHMETIC_OPSTR_LOADCOL_HDU_LEN strlen(GAL_ARITHMETIC_OPSTR_LOADCOL_HDU) #define GAL_ARITHMETIC_OPSTR_LOADCOL_FILE_LEN strlen(GAL_ARITHMETIC_OPSTR_LOADCOL_FILE) /* Identifiers for each operator. */ enum gal_arithmetic_operators { GAL_ARITHMETIC_OP_INVALID, /* Invalid (=0 by C standard). */ GAL_ARITHMETIC_OP_PLUS, /* + */ GAL_ARITHMETIC_OP_MINUS, /* - */ GAL_ARITHMETIC_OP_MULTIPLY, /* x */ GAL_ARITHMETIC_OP_DIVIDE, /* / */ GAL_ARITHMETIC_OP_MODULO, /* % */ GAL_ARITHMETIC_OP_LT, /* < */ GAL_ARITHMETIC_OP_LE, /* <= */ GAL_ARITHMETIC_OP_GT, /* > */ GAL_ARITHMETIC_OP_GE, /* >= */ GAL_ARITHMETIC_OP_EQ, /* == */ GAL_ARITHMETIC_OP_NE, /* != */ GAL_ARITHMETIC_OP_AND, /* && */ GAL_ARITHMETIC_OP_OR, /* || */ GAL_ARITHMETIC_OP_NOT, /* ! */ GAL_ARITHMETIC_OP_ISBLANK, /* Similar to isnan() for floats. */ GAL_ARITHMETIC_OP_ISNOTBLANK, /* Inverse of 'isblank'. */ GAL_ARITHMETIC_OP_WHERE, /* ?: */ GAL_ARITHMETIC_OP_BITAND, /* & */ GAL_ARITHMETIC_OP_BITOR, /* | */ GAL_ARITHMETIC_OP_BITXOR, /* ^ */ GAL_ARITHMETIC_OP_BITLSH, /* << */ GAL_ARITHMETIC_OP_BITRSH, /* >> */ GAL_ARITHMETIC_OP_BITNOT, /* ~ */ GAL_ARITHMETIC_OP_ABS, /* abs() */ GAL_ARITHMETIC_OP_POW, /* pow() */ GAL_ARITHMETIC_OP_SQRT, /* sqrt() */ GAL_ARITHMETIC_OP_LOG, /* log() */ GAL_ARITHMETIC_OP_LOG10, /* log10() */ GAL_ARITHMETIC_OP_SIN, /* sine (input in deg). */ GAL_ARITHMETIC_OP_COS, /* cosine (input in deg). */ GAL_ARITHMETIC_OP_TAN, /* tangent (input in deg). */ GAL_ARITHMETIC_OP_ASIN, /* Inverse sine (output in deg). */ GAL_ARITHMETIC_OP_ACOS, /* Inverse cosine (output in deg). */ GAL_ARITHMETIC_OP_ATAN, /* Inverse tangent (output in deg). */ GAL_ARITHMETIC_OP_ATAN2, /* Inv. atan (preserves quad, in deg). */ GAL_ARITHMETIC_OP_SINH, /* Hyperbolic sine. */ GAL_ARITHMETIC_OP_COSH, /* Hyperbolic cosine. */ GAL_ARITHMETIC_OP_TANH, /* Hyperbolic tangent. */ GAL_ARITHMETIC_OP_ASINH, /* Inverse hyperbolic sine. */ GAL_ARITHMETIC_OP_ACOSH, /* Inverse hyperbolic cosine. */ GAL_ARITHMETIC_OP_ATANH, /* Inverse hyperbolic tangent. */ GAL_ARITHMETIC_OP_E, /* The base of natural logirithm. */ GAL_ARITHMETIC_OP_PI, /* Circle circumference by diameter. */ GAL_ARITHMETIC_OP_C, /* The speed of light. */ GAL_ARITHMETIC_OP_G, /* The gravitational constant. */ GAL_ARITHMETIC_OP_H, /* Plank's constant. */ GAL_ARITHMETIC_OP_AU, /* Astronomical Unit (in meters). */ GAL_ARITHMETIC_OP_LY, /* Light years (in meters). */ GAL_ARITHMETIC_OP_AVOGADRO, /* Avogadro's number. */ GAL_ARITHMETIC_OP_FINESTRUCTURE,/* Fine-structure constant. */ GAL_ARITHMETIC_OP_RA_TO_DEGREE, /* right ascension to decimal. */ GAL_ARITHMETIC_OP_DEC_TO_DEGREE,/* declination to decimal. */ GAL_ARITHMETIC_OP_DEGREE_TO_RA, /* right ascension to decimal. */ GAL_ARITHMETIC_OP_DEGREE_TO_DEC,/* declination to decimal. */ GAL_ARITHMETIC_OP_COUNTS_TO_MAG,/* Counts to magnitude. */ GAL_ARITHMETIC_OP_MAG_TO_COUNTS,/* Magnitude to counts. */ GAL_ARITHMETIC_OP_MAG_TO_SB, /* Magnitude to Surface Brightness. */ GAL_ARITHMETIC_OP_SB_TO_MAG, /* Surface Brightness to Magnitude. */ GAL_ARITHMETIC_OP_COUNTS_TO_SB, /* Counts to Surface Brightness. */ GAL_ARITHMETIC_OP_SB_TO_COUNTS, /* Surface Brightness to counts. */ GAL_ARITHMETIC_OP_COUNTS_TO_JY, /* Counts to Janskys (AB zeropoint). */ GAL_ARITHMETIC_OP_JY_TO_COUNTS, /* Janskys to Counts (AB zeropoint). */ GAL_ARITHMETIC_OP_MAG_TO_JY, /* Magnitude to Janskys. */ GAL_ARITHMETIC_OP_JY_TO_MAG, /* Janskys to Magnitude. */ GAL_ARITHMETIC_OP_COUNTS_TO_NANOMAGGY,/* Counts to SDSS nanomaggies. */ GAL_ARITHMETIC_OP_NANOMAGGY_TO_COUNTS,/* SDSS nanomaggies to counts. */ GAL_ARITHMETIC_OP_AU_TO_PC, /* Astronomical units (AU) to Parsecs (PC). */ GAL_ARITHMETIC_OP_PC_TO_AU, /* Parsecs (PC) to Astronomical units (AU). */ GAL_ARITHMETIC_OP_LY_TO_PC, /* Astronomical units (AU) to Parsecs (PC). */ GAL_ARITHMETIC_OP_PC_TO_LY, /* Parsecs (PC) to Astronomical units (AU). */ GAL_ARITHMETIC_OP_LY_TO_AU, /* Light-years to Astronomical units (AU). */ GAL_ARITHMETIC_OP_AU_TO_LY, /* Astronomical units (AU) to Light-years. */ GAL_ARITHMETIC_OP_MINVAL, /* Minimum value of array. */ GAL_ARITHMETIC_OP_MAXVAL, /* Maximum value of array. */ GAL_ARITHMETIC_OP_NUMBERVAL, /* Number of (non-blank) elements. */ GAL_ARITHMETIC_OP_SUMVAL, /* Sum of (non-blank) elements. */ GAL_ARITHMETIC_OP_MEANVAL, /* Mean value of array. */ GAL_ARITHMETIC_OP_STDVAL, /* Standard deviation value of array. */ GAL_ARITHMETIC_OP_MEDIANVAL, /* Median value of array. */ GAL_ARITHMETIC_OP_UNIQUE, /* Only return unique elements. */ GAL_ARITHMETIC_OP_NOBLANK, /* Only keep non-blank elements. */ GAL_ARITHMETIC_OP_MIN, /* Minimum per pixel of multiple arrays. */ GAL_ARITHMETIC_OP_MAX, /* Maximum per pixel of multiple arrays. */ GAL_ARITHMETIC_OP_NUMBER, /* Non-blank number of pixels in arrays. */ GAL_ARITHMETIC_OP_SUM, /* Sum per pixel of multiple arrays. */ GAL_ARITHMETIC_OP_MEAN, /* Mean per pixel of multiple arrays. */ GAL_ARITHMETIC_OP_STD, /* STD per pixel of multiple arrays. */ GAL_ARITHMETIC_OP_MAD, /* MAD per pixel of multiple arrays. */ GAL_ARITHMETIC_OP_MEDIAN, /* Median per pixel of multiple arrays. */ GAL_ARITHMETIC_OP_QUANTILE, /* Quantile per pixel of multiple arrays.*/ GAL_ARITHMETIC_OP_SIGCLIP_NUMBER,/* Sigma-clipped number of mult. arrays.*/ GAL_ARITHMETIC_OP_SIGCLIP_MEAN, /* Sigma-clipped mean of multiple arrays.*/ GAL_ARITHMETIC_OP_SIGCLIP_MEDIAN,/* Sigma-clipped median of mult. arrays.*/ GAL_ARITHMETIC_OP_SIGCLIP_STD, /* Sigma-clipped STD of multiple arrays. */ GAL_ARITHMETIC_OP_SIGCLIP_MAD, /* Sigma-clipped STD of multiple arrays. */ GAL_ARITHMETIC_OP_SIGCLIP_FILL_NUMBER, /* MAD-clipped num. of arrays. */ GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEAN, /* MAD-clipped mean of arrays. */ GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEDIAN, /* MAD-clipped median of arrays. */ GAL_ARITHMETIC_OP_SIGCLIP_FILL_STD, /* MAD-clipped STD of arrays. */ GAL_ARITHMETIC_OP_SIGCLIP_FILL_MAD, /* MAD-clipped STD of arrays. */ GAL_ARITHMETIC_OP_MADCLIP_NUMBER,/* MAD-clipped number of mult. arrays. */ GAL_ARITHMETIC_OP_MADCLIP_MEAN, /* MAD-clipped mean of multiple arrays. */ GAL_ARITHMETIC_OP_MADCLIP_MEDIAN,/* MAD-clipped median of mult. arrays. */ GAL_ARITHMETIC_OP_MADCLIP_STD, /* MAD-clipped STD of multiple arrays. */ GAL_ARITHMETIC_OP_MADCLIP_MAD, /* MAD-clipped STD of multiple arrays. */ GAL_ARITHMETIC_OP_MADCLIP_FILL_NUMBER,/* MAD-clipped num. of arrays. */ GAL_ARITHMETIC_OP_MADCLIP_FILL_MEAN, /* MAD-clipped mean of arrays. */ GAL_ARITHMETIC_OP_MADCLIP_FILL_MEDIAN,/* MAD-clipped median of arrays. */ GAL_ARITHMETIC_OP_MADCLIP_FILL_STD, /* MAD-clipped STD of arrays. */ GAL_ARITHMETIC_OP_MADCLIP_FILL_MAD, /* MAD-clipped STD of arrays. */ GAL_ARITHMETIC_OP_MKNOISE_SIGMA,/* Fixed-sigma noise to every element. */ GAL_ARITHMETIC_OP_MKNOISE_SIGMA_FROM_MEAN, /* Sigma comes from background. */ GAL_ARITHMETIC_OP_MKNOISE_POISSON,/* Poission noise on every element. */ GAL_ARITHMETIC_OP_MKNOISE_UNIFORM,/* Uniform noise on every element. */ GAL_ARITHMETIC_OP_RANDOM_FROM_HIST,/* Randoms from a histogram (uniform).*/ GAL_ARITHMETIC_OP_RANDOM_FROM_HIST_RAW,/* Randoms from a histogram (raw).*/ GAL_ARITHMETIC_OP_STITCH, /* Stitch multiple datasets together. */ GAL_ARITHMETIC_OP_TO1D, /* Make they output into a 1D array. */ GAL_ARITHMETIC_OP_TRIM, /* Trim blank rows or columns in image. */ GAL_ARITHMETIC_OP_TO_UINT8, /* Convert to uint8_t. */ GAL_ARITHMETIC_OP_TO_INT8, /* Convert to int8_t. */ GAL_ARITHMETIC_OP_TO_UINT16, /* Convert to uint16_t. */ GAL_ARITHMETIC_OP_TO_INT16, /* Convert to int16_t. */ GAL_ARITHMETIC_OP_TO_UINT32, /* Convert to uint32_t. */ GAL_ARITHMETIC_OP_TO_INT32, /* Convert to int32_t. */ GAL_ARITHMETIC_OP_TO_UINT64, /* Convert to uint64_t. */ GAL_ARITHMETIC_OP_TO_INT64, /* Convert to int64_t. */ GAL_ARITHMETIC_OP_TO_FLOAT32, /* Convert to float32. */ GAL_ARITHMETIC_OP_TO_FLOAT64, /* Convert to float64. */ GAL_ARITHMETIC_OP_ROTATE_COORD, /* Return input coords after rotation. */ GAL_ARITHMETIC_OP_BOX_AROUND_ELLIPSE, /* Width/Height of box over ellipse*/ GAL_ARITHMETIC_OP_BOX_VERTICES_ON_SPHERE, /* Vert. from center and width */ /* Meta operators */ GAL_ARITHMETIC_OP_SIZE, /* Size of the dataset along an axis. */ GAL_ARITHMETIC_OP_MAKENEW, /* Build a new dataset, containing zeros.*/ GAL_ARITHMETIC_OP_INDEX, /* New with the index (counting from 0). */ GAL_ARITHMETIC_OP_COUNTER, /* New with the index (counting from 0). */ GAL_ARITHMETIC_OP_INDEXONLY, /* New with the index (counting from 0). */ GAL_ARITHMETIC_OP_COUNTERONLY, /* New with the index (counting from 1). */ GAL_ARITHMETIC_OP_SWAP, /* Swap the top two operands. */ GAL_ARITHMETIC_OP_CONSTANT, /* Make a row with given constant. */ /* Pooling operators. */ GAL_ARITHMETIC_OP_POOLMAX, /* The pool-max of desired pixels. */ GAL_ARITHMETIC_OP_POOLMIN, /* The pool-min of desired pixels. */ GAL_ARITHMETIC_OP_POOLSUM, /* The pool-sum of desired pixels. */ GAL_ARITHMETIC_OP_POOLMEAN, /* The pool-mean of desired pixels. */ GAL_ARITHMETIC_OP_POOLMEDIAN, /* The pool-median of desired pixels. */ /* Celestial coordinate conversions (names are clear, no comment). */ GAL_ARITHMETIC_OP_EQB1950_TO_EQJ2000, GAL_ARITHMETIC_OP_EQB1950_TO_ECB1950, GAL_ARITHMETIC_OP_EQB1950_TO_ECJ2000, GAL_ARITHMETIC_OP_EQB1950_TO_GALACTIC, GAL_ARITHMETIC_OP_EQB1950_TO_SUPERGALACTIC, GAL_ARITHMETIC_OP_EQJ2000_TO_EQB1950, GAL_ARITHMETIC_OP_EQJ2000_TO_ECB1950, GAL_ARITHMETIC_OP_EQJ2000_TO_ECJ2000, GAL_ARITHMETIC_OP_EQJ2000_TO_GALACTIC, GAL_ARITHMETIC_OP_EQJ2000_TO_SUPERGALACTIC, GAL_ARITHMETIC_OP_ECB1950_TO_EQB1950, GAL_ARITHMETIC_OP_ECB1950_TO_EQJ2000, GAL_ARITHMETIC_OP_ECB1950_TO_ECJ2000, GAL_ARITHMETIC_OP_ECB1950_TO_GALACTIC, GAL_ARITHMETIC_OP_ECB1950_TO_SUPERGALACTIC, GAL_ARITHMETIC_OP_ECJ2000_TO_EQB1950, GAL_ARITHMETIC_OP_ECJ2000_TO_EQJ2000, GAL_ARITHMETIC_OP_ECJ2000_TO_ECB1950, GAL_ARITHMETIC_OP_ECJ2000_TO_GALACTIC, GAL_ARITHMETIC_OP_ECJ2000_TO_SUPERGALACTIC, GAL_ARITHMETIC_OP_GALACTIC_TO_EQB1950, GAL_ARITHMETIC_OP_GALACTIC_TO_EQJ2000, GAL_ARITHMETIC_OP_GALACTIC_TO_ECB1950, GAL_ARITHMETIC_OP_GALACTIC_TO_ECJ2000, GAL_ARITHMETIC_OP_GALACTIC_TO_SUPERGALACTIC, GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQB1950, GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQJ2000, GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECB1950, GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECJ2000, GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_GALACTIC, /* Counter for number of operators. */ GAL_ARITHMETIC_OP_LAST_CODE, /* Last code of the library operands. */ }; char * gal_arithmetic_operator_string(int operator); int gal_arithmetic_set_operator(char *string, size_t *num_operands); gal_data_t * gal_arithmetic_load_col(char *str, int searchin, int ignorecase, size_t minmapsize, int quietmmap); gal_data_t * gal_arithmetic(int operator, size_t numthreads, int flags, ...); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_ARITHMETIC_H__ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/array.h������������������������������������������������������������������0000644�0001750�0001750�00000005237�14551337306�012675� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* array - Functions to read/write arrays from/to files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_ARRAY_H__ #define __GAL_ARRAY_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Functions */ int gal_array_name_recognized(char *name); int gal_array_name_recognized_multiext(char *name); int gal_array_file_recognized(char *name); gal_data_t * gal_array_read(char *filename, char *extension, gal_list_str_t *lines, size_t minmapsize, int quietmmap, char *hdu_option_name); gal_data_t * gal_array_read_to_type(char *filename, char *extension, gal_list_str_t *lines, uint8_t type, size_t minmapsize, int quietmmap, char *hdu_option_name); gal_data_t * gal_array_read_one_ch(char *filename, char *extension, gal_list_str_t *lines, size_t minmapsize, int quietmmap, char *hdu_option_name); gal_data_t * gal_array_read_one_ch_to_type(char *filename, char *extension, gal_list_str_t *lines, uint8_t type, size_t minmapsize, int quietmmap, char *hdu_option_name); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TIFF_H__ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/binary.h�����������������������������������������������������������������0000644�0001750�0001750�00000010537�14551337306�013042� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* binary -- Work on binary (0 and 1 valued) datasets. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_BINARY_H__ #define __GAL_BINARY_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> #include <gnuastro/blank.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* The binary functions will be working on a 'uint8_t' type dataset with values of 1 or 0 (no other pixel will be touched). However, in some cases, it is necessary to put temporary values in each element during the processing of the functions. So if your input datasets have values other than 0 and 1 that you don't want these functions to work on, be sure they are not equal to this value. It is chosen as the immediate value before the maximum value for this type (which is the blank value for this type), so blank values will also not be touched by this function. */ #define GAL_BINARY_TMP_VALUE GAL_BLANK_UINT8-1 /*********************************************************************/ /***************** Erosion and dilation ********************/ /*********************************************************************/ gal_data_t * gal_binary_erode(gal_data_t *input, size_t num, int connectivity, int inplace); gal_data_t * gal_binary_dilate(gal_data_t *input, size_t num, int connectivity, int inplace); gal_data_t * gal_binary_open(gal_data_t *input, size_t num, int connectivity, int inplace); /*********************************************************************/ /***************** Neighbors ********************/ /*********************************************************************/ gal_data_t * gal_binary_number_neighbors(gal_data_t *input, int connectivity, int inplace); /*********************************************************************/ /***************** Connected components ********************/ /*********************************************************************/ size_t gal_binary_connected_components(gal_data_t *binary, gal_data_t **out, int connectivity); gal_data_t * gal_binary_connected_indexs(gal_data_t *binary, int connectivity); gal_data_t * gal_binary_connected_adjacency_matrix(gal_data_t *adjacency, size_t *numnewlabs); gal_data_t * gal_binary_connected_adjacency_list(gal_list_sizet_t **listarr, size_t number, size_t minmapsize, int quietmmap, size_t *numconnected); /*********************************************************************/ /***************** Fill holes ********************/ /*********************************************************************/ gal_data_t * gal_binary_holes_label(gal_data_t *input, int connectivity, size_t *numholes); void gal_binary_holes_fill(gal_data_t *input, int connectivity, size_t maxsize); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_BINARY_H__ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/blank.h������������������������������������������������������������������0000644�0001750�0001750�00000010743�14551337306�012644� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* blank -- Deal with blank values in a datasets This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_BLANK_H__ #define __GAL_BLANK_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* When we are within Gnuastro's building process, 'IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular 'GAL_CONFIG_SIZEOF_SIZE_T' that we need below) is kept in 'config.h'. When building a user's programs, this information is kept in 'gnuastro/config.h'. Note that all '.c' files in Gnuastro's source must start with the inclusion of 'config.h' and that 'gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro). */ #ifndef IN_GNUASTRO_BUILD #include <gnuastro/config.h> #endif #include <gnuastro/list.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Macros: */ /* Blank values: Note that for the unsigned types or small types (like char), the maximum value is considered as a blank value, since the minimum value of an unsigned type is zero and zero is often meaningful in contexts were unsigned values are used. */ #define GAL_BLANK_UINT8 UINT8_MAX #define GAL_BLANK_INT8 INT8_MIN #define GAL_BLANK_UINT16 UINT16_MAX #define GAL_BLANK_INT16 INT16_MIN #define GAL_BLANK_UINT32 UINT32_MAX #define GAL_BLANK_INT32 INT32_MIN #define GAL_BLANK_UINT64 UINT64_MAX #define GAL_BLANK_INT64 INT64_MIN #define GAL_BLANK_FLOAT32 NAN #define GAL_BLANK_FLOAT64 NAN #define GAL_BLANK_STRING "n/a" #if GAL_CONFIG_SIZEOF_SIZE_T == 4 #define GAL_BLANK_SIZE_T GAL_BLANK_UINT32 #else #define GAL_BLANK_SIZE_T GAL_BLANK_UINT64 #endif #if GAL_CONFIG_SIZEOF_LONG == 4 #define GAL_BLANK_LONG GAL_BLANK_INT32 #define GAL_BLANK_ULONG GAL_BLANK_UINT32 #elif GAL_CONFIG_SIZEOF_LONG == 8 #define GAL_BLANK_LONG GAL_BLANK_INT64 #define GAL_BLANK_ULONG GAL_BLANK_UINT64 #endif #if GAL_CONFIG_SIZEOF_INT == 4 #define GAL_BLANK_INT GAL_BLANK_INT32 #define GAL_BLANK_UINT GAL_BLANK_UINT32 #elif GAL_CONFIG_SIZEOF_INT == 2 #define GAL_BLANK_INT GAL_BLANK_INT16 #define GAL_BLANK_UINT GAL_BLANK_UINT16 #endif /* Functions. */ void gal_blank_write(void *pointer, uint8_t type); void * gal_blank_alloc_write(uint8_t type); void gal_blank_initialize(gal_data_t *input); void gal_blank_initialize_array(void *array, size_t size, uint8_t type); char * gal_blank_as_string(uint8_t type, int width); int gal_blank_is(void *pointer, uint8_t type); int gal_blank_present(gal_data_t *input, int updateflag); size_t gal_blank_number(gal_data_t *input, int updateflag); gal_data_t * gal_blank_flag(gal_data_t *data); gal_data_t * gal_blank_flag_not(gal_data_t *input); size_t * gal_blank_not_minmax_coords(gal_data_t *input); gal_data_t * gal_blank_trim(gal_data_t *input, int inplace); void gal_blank_flag_apply(gal_data_t *input, gal_data_t *flag); void gal_blank_remove(gal_data_t *data); void gal_blank_remove_realloc(gal_data_t *input); gal_data_t * gal_blank_remove_rows(gal_data_t *columns, gal_list_sizet_t *column_indexs, int onlydim0); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_DATA_H__ */ �����������������������������gnuastro-0.22/lib/gnuastro/box.h��������������������������������������������������������������������0000644�0001750�0001750�00000005023�14551337306�012340� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Box -- Define bounding and overlapping boxes. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_BOX_H__ #define __GAL_BOX_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* IMPORTANT NOTE: All the axises are based on the FITS standard, NOT C. */ void gal_box_bound_ellipse_extent(double a, double b, double theta_deg, double *extent); void gal_box_bound_ellipse(double a, double b, double theta_deg, long *width); void gal_box_bound_ellipsoid_extent(double *semiaxes, double *euler_deg, double *extent); void gal_box_bound_ellipsoid(double *semiaxes, double *euler_deg, long *width); void gal_box_border_from_center(double *center, size_t ndim, long *width, long *fpixel, long *lpixel); void gal_box_border_rotate_around_center(long *fpixel, long *lpixel, size_t ndim, float rotate_deg); int gal_box_overlap(long *naxes, long *fpixel_i, long *lpixel_i, long *fpixel_o, long *lpixel_o, size_t ndim); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_BOX_H__ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/color.h������������������������������������������������������������������0000644�0001750�0001750�00000012613�14551337306�012671� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions for colors This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2022-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_COLOR_H__ #define __GAL_COLOR_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* From: https://en.wikipedia.org/wiki/Web_colors#Extended_colors */ enum gal_color_all { GAL_COLOR_INVALID, /* ==0 (in C standard). */ /* Pink colors. */ GAL_COLOR_MEDIUMVIOLETRED, GAL_COLOR_DEEPPINK, GAL_COLOR_PALEVIOLETRED, GAL_COLOR_HOTPINK, GAL_COLOR_LIGHTPINK, GAL_COLOR_PINK, /* Red colors. */ GAL_COLOR_DARKRED, GAL_COLOR_RED, GAL_COLOR_FIREBRICK, GAL_COLOR_CRIMSON, GAL_COLOR_INDIANRED, GAL_COLOR_LIGHTCORAL, GAL_COLOR_SALMON, GAL_COLOR_DARKSALMON, GAL_COLOR_LIGHTSALMON, /* Orange colors */ GAL_COLOR_ORANGERED, GAL_COLOR_TOMATO, GAL_COLOR_DARKORANGE, GAL_COLOR_CORAL, GAL_COLOR_ORANGE, /* Yellow colors. */ GAL_COLOR_DARKKHAKI, GAL_COLOR_GOLD, GAL_COLOR_KHAKI, GAL_COLOR_PEACHPUFF, GAL_COLOR_YELLOW, GAL_COLOR_PALEGOLDENROD, GAL_COLOR_MOCCASIN, GAL_COLOR_PAPAYAWHIP, GAL_COLOR_LIGHTGOLDENRODYELLOW, GAL_COLOR_LEMONCHIFFON, GAL_COLOR_LIGHTYELLOW, /* Brown colors. */ GAL_COLOR_MAROON, GAL_COLOR_BROWN, GAL_COLOR_SADDLEBROWN, GAL_COLOR_SIENNA, GAL_COLOR_CHOCOLATE, GAL_COLOR_DARKGOLDENROD, GAL_COLOR_PERU, GAL_COLOR_ROSYBROWN, GAL_COLOR_GOLDENROD, GAL_COLOR_SANDYBROWN, GAL_COLOR_TAN, GAL_COLOR_BURLYWOOD, GAL_COLOR_WHEAT, GAL_COLOR_NAVAJOWHITE, GAL_COLOR_BISQUE, GAL_COLOR_BLANCHEDALMOND, GAL_COLOR_CORNSILK, /* Green colors. */ GAL_COLOR_DARKGREEN, GAL_COLOR_GREEN, GAL_COLOR_DARKOLIVEGREEN, GAL_COLOR_FORESTGREEN, GAL_COLOR_SEAGREEN, GAL_COLOR_OLIVE, GAL_COLOR_OLIVEDRAB, GAL_COLOR_MEDIUMSEAGREEN, GAL_COLOR_LIMEGREEN, GAL_COLOR_LIME, GAL_COLOR_SPRINGGREEN, GAL_COLOR_MEDIUMSPRINGGREEN, GAL_COLOR_DARKSEAGREEN, GAL_COLOR_MEDIUMAQUAMARINE, GAL_COLOR_YELLOWGREEN, GAL_COLOR_LAWNGREEN, GAL_COLOR_CHARTREUSE, GAL_COLOR_LIGHTGREEN, GAL_COLOR_GREENYELLOW, GAL_COLOR_PALEGREEN, /* Cyan colors. */ GAL_COLOR_TEAL, GAL_COLOR_DARKCYAN, GAL_COLOR_LIGHTSEAGREEN, GAL_COLOR_CADETBLUE, GAL_COLOR_DARKTURQUOISE, GAL_COLOR_MEDIUMTURQUOISE, GAL_COLOR_TURQUOISE, GAL_COLOR_AQUA, GAL_COLOR_CYAN, GAL_COLOR_AQUAMARINE, GAL_COLOR_PALETURQUOISE, GAL_COLOR_LIGHTCYAN, /* Blue colors. */ GAL_COLOR_MIDNIGHTBLUE, GAL_COLOR_NAVY, GAL_COLOR_DARKBLUE, GAL_COLOR_MEDIUMBLUE, GAL_COLOR_BLUE, GAL_COLOR_ROYALBLUE, GAL_COLOR_STEELBLUE, GAL_COLOR_DODGERBLUE, GAL_COLOR_DEEPSKYBLUE, GAL_COLOR_CORNFLOWERBLUE, GAL_COLOR_SKYBLUE, GAL_COLOR_LIGHTSKYBLUE, GAL_COLOR_LIGHTSTEELBLUE, GAL_COLOR_LIGHTBLUE, GAL_COLOR_POWDERBLUE, /* Purple colors. */ GAL_COLOR_INDIGO, GAL_COLOR_PURPLE, GAL_COLOR_DARKMAGENTA, GAL_COLOR_DARKVIOLET, GAL_COLOR_DARKSLATEBLUE, GAL_COLOR_BLUEVIOLET, GAL_COLOR_DARKORCHID, GAL_COLOR_FUCHSIA, GAL_COLOR_MAGENTA, GAL_COLOR_SLATEBLUE, GAL_COLOR_MEDIUMSLATEBLUE, GAL_COLOR_MEDIUMORCHID, GAL_COLOR_MEDIUMPURPLE, GAL_COLOR_ORCHID, GAL_COLOR_VIOLET, GAL_COLOR_PLUM, GAL_COLOR_THISTLE, GAL_COLOR_LAVENDER, /* White colors */ GAL_COLOR_MISTYROSE, GAL_COLOR_ANTIQUEWHITE, GAL_COLOR_LINEN, GAL_COLOR_BEIGE, GAL_COLOR_WHITESMOKE, GAL_COLOR_LAVENDERBLUSH, GAL_COLOR_OLDLACE, GAL_COLOR_ALICEBLUE, GAL_COLOR_SEASHELL, GAL_COLOR_GHOSTWHITE, GAL_COLOR_HONEYDEW, GAL_COLOR_FLORALWHITE, GAL_COLOR_AZURE, GAL_COLOR_MINTCREAM, GAL_COLOR_SNOW, GAL_COLOR_IVORY, GAL_COLOR_WHITE, /* Gray and black colors. */ GAL_COLOR_BLACK, GAL_COLOR_DARKSLATEGRAY, GAL_COLOR_DIMGRAY, GAL_COLOR_SLATEGRAY, GAL_COLOR_GRAY, GAL_COLOR_LIGHTSLATEGRAY, GAL_COLOR_DARKGRAY, GAL_COLOR_SILVER, GAL_COLOR_LIGHTGRAY, GAL_COLOR_GAINSBORO, /* Final number of pre-defined colors. */ GAL_COLOR_NUMBER, }; /* Functions */ uint8_t gal_color_name_to_id(char *n); char * gal_color_id_to_name(uint8_t color); void gal_color_in_rgb(uint8_t color, float *f); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_COLOR_H__ */ ���������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/convolve.h���������������������������������������������������������������0000644�0001750�0001750�00000004146�14551337306�013410� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Convolve -- Convolve the dataset with a given kernel. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_CONVOLVE_H__ #define __GAL_CONVOLVE_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ gal_data_t * gal_convolve_spatial(gal_data_t *tiles, gal_data_t *kernel, size_t numthreads, int edgecorrection, int convoverch, int conv_on_blank); void gal_convolve_spatial_correct_ch_edge(gal_data_t *tiles, gal_data_t *kernel, size_t numthreads, int edgecorrection, int conv_on_blank, gal_data_t *tocorrect); __END_C_DECLS /* From C++ preparations */ #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/cosmology.h��������������������������������������������������������������0000644�0001750�0001750�00000007035�14557216671�013577� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Cosmological calculations. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_COSMOLOGY_H__ #define __GAL_COSMOLOGY_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Age of the universe (in Gyrs). */ double gal_cosmology_age(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet); /* Proper distance to z (Mpc). */ double gal_cosmology_proper_distance(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet); /* Comoving volume over 4pi stradian to z (Mpc^3). */ double gal_cosmology_comoving_volume(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet); /* Critical density at redshift z in units of g/cm^3. */ double gal_cosmology_critical_density(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet); /* Angular diameter distance to z (Mpc). */ double gal_cosmology_angular_distance(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet); /* Luminosity distance to z (Mpc). */ double gal_cosmology_luminosity_distance(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet); /* Distance modulus at z (no units). */ double gal_cosmology_distance_modulus(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet); /* Convert apparent to absolute magnitude. */ double gal_cosmology_to_absolute_mag(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet); double gal_cosmology_velocity_from_z(double z); double gal_cosmology_z_from_velocity(double v); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_COSMOLOGY_H__ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/data.h�������������������������������������������������������������������0000644�0001750�0001750�00000027473�14551337306�012476� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* data -- Structure and functions to represent/work with data This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_DATA_H__ #define __GAL_DATA_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <math.h> #include <wcslib/wcs.h> /* When we are within Gnuastro's building process, 'IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular the 'restrict' replacement) is kept in 'config.h' (top source directory). When building a user's programs, this information is kept in 'gnuastro/config.h'. Note that all '.c' files in Gnuastro's source must start with the inclusion of 'config.h' and that 'gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro). */ #ifndef IN_GNUASTRO_BUILD #include <gnuastro/config.h> #endif #include <gnuastro/type.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Flag values for the dataset. Note that these are bit-values, so to be more clear, we'll use hexadecimal notation: '0x1' (=1), '0x2' (=2), '0x4' (=4), '0x8' (=8), '0x10' (=16), '0x20' (=32) and so on. */ /* Number of bytes in the unsigned integer hosting the bit-flags ('flag' element) of 'gal_data_t'. */ #define GAL_DATA_FLAG_SIZE 1 /* Bit 0: The has-blank flag has been checked, so a flag value of 0 for the blank flag is trustable. This can be very useful to avoid repetative checks when the necessary value of the bit is 0. */ #define GAL_DATA_FLAG_BLANK_CH 0x1 /* Bit 1: Dataset contains blank values. */ #define GAL_DATA_FLAG_HASBLANK 0x2 /* Bit 2: Sorted flags have been checked, see GAL_DATA_FLAG_BLANK_CH. */ #define GAL_DATA_FLAG_SORT_CH 0x4 /* Bit 3: Dataset is sorted and increasing. */ #define GAL_DATA_FLAG_SORTED_I 0x8 /* Bit 4: Dataset is sorted and decreasing. */ #define GAL_DATA_FLAG_SORTED_D 0x10 /* Maximum internal flag value. Higher-level flags can be defined with the bitwise shift operators on this value to define internal flags for libraries/programs that depend on Gnuastro without causing any possible conflict with the internal flags or having to check the values manually on every release. */ #define GAL_DATA_FLAG_MAXFLAG GAL_DATA_FLAG_SORTED_D /* Main data structure. mmap (keep data outside of RAM) ------------------------------- 'mmap' is C's facility to keep the data on the HDD/SSD instead of inside the RAM. This can be very useful for large data sets which can be very memory intensive. Ofcourse, the speed of operation greatly decreases when defining not using RAM, but that is worth it because increasing RAM might not be possible. So in 'gal_data_t' when the size of the requested array (in bytes) is larger than a certain minimum size (in bytes), Gnuastro won't write the array in memory but on non-volatile memory (like HDDs and SSDs) as a file in the './.gnuastro' directory of the directory it was run from. - If mmapname==NULL, then the array is allocated (using malloc, in the RAM), otherwise its is mmap'd (is actually a file on the ssd/hdd). - minmapsize is stored in the data structure to allow any derivative data structures to follow the same number and decide if they should be mmap'd or allocated. - 'minmapsize' == 0: array is definitely mmap'd. - 'minmapsize' == -1: array is definitely in RAM. block (work with only a subset of the data) ------------------------------------------- In many contexts, it is desirable to slice the data set into subsets or tiles, not necessarily overlapping. In such a way that you can work on each independently. One option is to copy that region to a separate allocated space, but in many contexts this isn't necessary and infact can be a big burden on CPU/Memory usage. The 'block' pointer in 'gal_data_t' is defined for situations where allocation is not necessary: you just want to read the data or write to it independently, or in coordination with, other regions of the dataset. Added with parallel processing, this can greatly improve the time/memory consumption. See the figure below for example: assume the larger box is a contiguous block of memory that you are interpretting as a 2D array. But you only want to work on the region marked by the smaller box. tile->block = larger --------------------------- | | | tile | | ---------- | | | | | | |_ | | | |*| | | | ---------- | |_ | |*| | --------------------------- To use 'gal_data_t's block concept, you allocate a 'gal_data_t *tile' which is initialized with the pointer to the first element in the sub-array (as its 'array' argument). Note that this is not necessarily the first element in the larger array. You can set the size of the tile along with the initialization as you please. Recall that, when given a non-NULL pointer as 'array', 'gal_data_initialize' (and thus 'gal_data_alloc') do not allocate any space and just uses the given pointer for the new 'array' element of the 'gal_data_t'. So your 'tile' data structure will not be pointing to a separately allocated space. After the allocation is done, you just point 'tile->block' to the 'gal_data_t' which hosts the larger array. Afterwards, the programs that take in the 'sub' array can check the 'block' pointer to see how to deal with dimensions and increments (strides) while working on the 'sub' datastructure. For example to increment along the vertical dimension, the program must look at index i+W (where 'W' is the width of the larger array, not the tile). Since the block structure is defined as a pointer, arbitrary levels of tesselation/griding are possible. Therefore, just like a linked list, it is important to have the 'block' pointer of the largest dataset set to NULL. Normally, you won't have to worry about this, because 'gal_data_initialize' (and thus 'gal_data_alloc') will set it to NULL by default (just remember not to change it). You can then only change the 'block' element for the tiles you define over the allocated space. In Gnuastro, there is a separate library for tiling operations called 'tile.h', see the functions there for tools to effectively use this feature. This approach to dealing with parts of a larger block was inspired from the way the GNU Scientific Library does it in the "Vectors and Matrices" chapter. */ typedef struct gal_data_t { /* Basic information on array of data. */ void *restrict array; /* Array keeping data elements. */ uint8_t type; /* Type of data (see 'gnuastro/type.h'). */ size_t ndim; /* Number of dimensions in the array. */ size_t *dsize; /* Size of array along each dimension. */ size_t size; /* Total number of data-elements. */ int quietmmap; /* ==1: print a notice whem mmap'ing. */ char *mmapname; /* File name of the mmap. */ size_t minmapsize; /* Minimum number of bytes to mmap the array. */ /* WCS information. */ int nwcs; /* for WCSLIB: no. coord. representations. */ struct wcsprm *wcs; /* WCS information for this dataset. */ /* Content descriptions. */ uint8_t flag; /* Flags: currently 8-bits are enough. */ int status; /* Context specific value for the dataset. */ char *name; /* e.g., EXTNAME, or column, or keyword. */ char *unit; /* Units of the data. */ char *comment; /* A more detailed description of the data. */ /* For printing */ int disp_fmt; /* See 'gal_table_diplay_formats'. */ int disp_width; /* Width of space to print in ASCII. */ int disp_precision; /* Precision to print in ASCII. */ /* Pointers to other data structures. */ struct gal_data_t *next; /* To use it as a linked list if necessary. */ struct gal_data_t *block; /* 'gal_data_t' of hosting block, see above. */ } gal_data_t; /*********************************************************************/ /************* allocation *******************/ /*********************************************************************/ gal_data_t * gal_data_alloc(void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, int quietmmap, char *name, char *unit, char *comment); void gal_data_initialize(gal_data_t *data, void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, int quietmmap, char *name, char *unit, char *comment); gal_data_t * gal_data_alloc_empty(size_t ndim, size_t minmapsize, int quietmmap); void gal_data_free_contents(gal_data_t *data); void gal_data_free(gal_data_t *data); /*********************************************************************/ /************* Array of data structures ******************/ /*********************************************************************/ gal_data_t * gal_data_array_calloc(size_t size); void gal_data_array_free(gal_data_t *dataarr, size_t num, int free_array); gal_data_t ** gal_data_array_ptr_calloc(size_t size); void gal_data_array_ptr_free(gal_data_t **dataptr, size_t size, int free_array); /************************************************************* ************** Copying *************** *************************************************************/ gal_data_t * gal_data_copy(gal_data_t *in); gal_data_t * gal_data_copy_to_new_type(gal_data_t *in, uint8_t newtype); gal_data_t * gal_data_copy_to_new_type_free(gal_data_t *in, uint8_t newtype); void gal_data_copy_to_allocated(gal_data_t *in, gal_data_t *out); gal_data_t * gal_data_copy_string_to_number(char *string); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_DATA_H__ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/dimension.h��������������������������������������������������������������0000644�0001750�0001750�00000071351�14551337306�013544� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* multidim -- Functions for multi-dimensional operations. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_MULTIDIM_H__ #define __GAL_MULTIDIM_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> #include <gnuastro/blank.h> #include <gnuastro/polygon.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /************************************************************************/ /******************** Info **********************/ /************************************************************************/ size_t gal_dimension_total_size(size_t ndim, size_t *dsize); int gal_dimension_is_different(gal_data_t *first, gal_data_t *second); size_t * gal_dimension_increment(size_t ndim, size_t *dsize); size_t gal_dimension_num_neighbors(size_t ndim); /************************************************************************/ /******************** Coordinates **********************/ /************************************************************************/ #define GAL_DIMENSION_FLT_TO_INT(FLT) ( (FLT)-(long)(FLT) > 0.5f \ ? (long)(FLT)+1 : (long)(FLT) ) /* A pixel's center is an integer value. This function will give the integer value that is nearest to a floating point number. Works for both positive and negative values and includes floating point errors. WARP_NEARESTINT_HALFHIGHER(0.5f) --> 1.0f */ #define GAL_DIMENSION_NEARESTINT_HALFHIGHER(D) \ ( ceil( (D) ) - (D) > 0.5f + GAL_POLYGON_ROUND_ERR ? \ ceil((D))-1.0f : ceil((D)) ) /* Similar to 'GAL_DIMENSION_NEARESTINT_HALFHIGHER' but: GAL_DIMENSION_NEARESTINT_HALFLOWER(0.5f) --> 0.0f; */ #define GAL_DIMENSION_NEARESTINT_HALFLOWER(D) \ ( ceil( (D) ) - (D) > 0.5f - GAL_POLYGON_ROUND_ERR ? \ ceil((D))-1.0f : ceil((D)) ) #define GAL_DIMENSION_CEILWITHERR(D) \ ( fabs( nearbyint((D)) - (D) ) < GAL_POLYGON_ROUND_ERR ? \ nearbyint((D)) : nearbyint((D))+1 ) void gal_dimension_add_coords(size_t *c1, size_t *c2, size_t *out, size_t ndim); size_t gal_dimension_coord_to_index(size_t ndim, size_t *dsize, size_t *coord); void gal_dimension_index_to_coord(size_t index, size_t ndim, size_t *dsize, size_t *coord); /************************************************************************/ /******************** Distances **********************/ /************************************************************************/ float gal_dimension_dist_manhattan(size_t *a, size_t *b, size_t ndim); float gal_dimension_dist_radial(size_t *a, size_t *b, size_t ndim); float gal_dimension_dist_elliptical(double *center, double *pa_deg, double *q, size_t ndim, double *point); /************************************************************************/ /******************** Collapsing a dimension **********************/ /************************************************************************/ gal_data_t * gal_dimension_collapse_sum(gal_data_t *in, size_t c_dim, gal_data_t *weight); gal_data_t * gal_dimension_collapse_mean(gal_data_t *in, size_t c_dim, gal_data_t *weight); gal_data_t * gal_dimension_collapse_number(gal_data_t *in, size_t c_dim); gal_data_t * gal_dimension_collapse_minmax(gal_data_t *in, size_t c_dim, int max1_min0); gal_data_t * gal_dimension_collapse_median(gal_data_t *in, size_t c_dim, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_mclip_mad(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_mclip_fill_mad(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_mclip_std(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_mclip_fill_std(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_mclip_mean(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_mclip_fill_mean(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_mclip_median(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_mclip_fill_median(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_mclip_number(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_mclip_fill_number(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_sclip_mad(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_sclip_fill_mad(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_sclip_std(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_sclip_fill_std(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_sclip_mean(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_sclip_fill_mean(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_sclip_median(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_sclip_fill_median(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_sclip_number(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); gal_data_t * gal_dimension_collapse_sclip_fill_number(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap); /************************************************************************/ /******************** Other **********************/ /************************************************************************/ size_t gal_dimension_remove_extra(size_t ndim, size_t *dsize, struct wcsprm *wcs); /************************************************************************/ /******************** Neighbors **********************/ /************************************************************************/ /* Purpose ------- This macro will allow you to do a fixed operation on the neighbors of an element. The identifier for the element is its dimension-agnostic index (distance from start of array). It is defined as a macro (and not a function) it is often necessary to loop over a very large number of pixels/indexs and the number of neighbors differs (in different dimensions and on the edges of the image). Usage ----- The inputs are: 'index': The index of the desired point. 'ndim': The number of dimensions in the dataset. 'dsize': The size of the dataset along each dimension (C order). 'connectivity': The connectivity of the neighbors. This is a single integer with a value between '1' and 'ndim' (it is irrelevant for a 1D dataset). Below, the case for 3D data is shown. Each 'dn' corresponds to 'dinc[n]'. See 'dinc' below for the 'dinc' values. '1': At most ONE addition/subtraction. In 1D: only the first line should be used. In 2D, this is 4 connectivity. In 3D all the elements that share an 2D-face with the cube at index 'i'. i - d0 i + d0 (1D, 2D & 3D) i - d1 i + d1 (2D & 3D) i - d2 i + d2 (3D) '2': At most TWO additions/subtractions. In 2D: 8 connectivity. In 3D: all elements that share a 1D edge with the cube at index 'i'. i - d0 - d1 i - d0 + d1 (2D & 3D) i + d0 - d1 i + d0 + d1 (2D & 3D) i - d0 - d2 i - d0 + d2 (3D) i + d0 - d2 i + d0 + d2 (3D) i - d1 - d2 i - d1 + d2 (3D) i + d1 - d2 i + d1 + d2 (3D) '3': At most THREE additions/subtractions (only for 3D and higher dimensions). All cubes that share a 0-D vertex with the cube at index 'i'. i - d0 - d1 - d2 i - d0 - d1 + d2 i - d0 + d1 - d2 i - d0 + d1 + d2 i + d0 - d1 - d2 i + d0 - d1 + d2 i + d0 + d1 - d2 i + d0 + d1 + d2 'dinc': An array keeping the length necessary to increment along each dimension. You can make this array with the following function: size_t *dinc=gal_dimension_increment(ndim, dsize); Don't forget to free it afterwards. 'operation': Any C operation. 'nind' is a 'size_t' type variable that is defined by this macro and will have the index of each neighbor. You can use this 'nind' for any processing that you like on the neighbor. Note that 'op' will be repeated the number of times there is a neighbor. Implementation -------------- To be most efficient (avoid as many 'if's as possible), we will start parsing the neighbors from the fastest dimension. When-ever the element is on the edge of the dataset in any dimension, we will store it in a bit-wise array (one bit for each dimension, to mark if it is on the edge (either side 1, or in the middle 0). Far many more elements will be in the middle, so there is no problem to check the edge. The good thing with a bit-array is that it can take one register on the CPU and stay there until the end. But if we want to have an array of values, multiple registers will be necessary. The bit information is in two two-byte spaces, so in theory, this works for 16 dimensions. */ #define GAL_DIMENSION_NEIGHBOR_OP(index, ndim, dsize, connectivity, \ dinc, operation) { \ uint32_t gdn_bitstr=0; \ size_t nind, gdn_ind=index; \ uint8_t gdn_D, *gdn_is_start, *gdn_is_end, *gdn_is_edge, gdn_one=1; \ \ /* A small sanity check. */ \ if(connectivity>ndim) \ error(EXIT_FAILURE, 0, "%s: connectivity value (%d) is larger " \ "than the number of dimensions (%zu)", __func__, \ (int)connectivity, ndim); \ \ /* Initialize the start/end. */ \ gdn_is_start=(uint8_t *)(&gdn_bitstr); \ gdn_is_end=(uint8_t *)(&gdn_bitstr)+1; \ \ /* Start with the slowest dimension and see if it is on the edge */ \ /* or not, similar to 'gal_dimension_index_to_coord'. In the */ \ /* process, also fill the 'connectivity==1' neighbors. */ \ for(gdn_D=0;gdn_D<ndim;++gdn_D) \ { \ /* If this dimension is only one element wide, no neighbors. */ \ if( (dsize)[gdn_D] == 1 ) \ { \ *gdn_is_start |= 1<<gdn_D; \ *gdn_is_end |= 1<<gdn_D; \ } \ else \ { \ if( gdn_ind / (dinc)[gdn_D] ) \ { \ /* We are at the end of this dimension. */ \ if( gdn_ind / (dinc)[gdn_D] == (dsize)[gdn_D]-1 ) \ { \ *gdn_is_end |= gdn_one<<gdn_D; \ nind = (index) - (dinc)[gdn_D]; {operation;}; \ } \ \ /* Middle of the dimension: both +1 and -1 possible. */ \ else \ { \ nind = (index) - (dinc)[gdn_D]; {operation;}; \ nind = (index) + (dinc)[gdn_D]; {operation;}; \ } \ } \ else \ { \ *gdn_is_start |= gdn_one<<gdn_D; \ nind = (index) + (dinc)[gdn_D]; {operation;}; \ } \ } \ \ /* Change 'ind' to the remainder of previous dimensions. */ \ gdn_ind %= dinc[gdn_D]; \ } \ \ /* We now know if the index is on the edge or not. During the */ \ /* process above, we also finished the 'connectivity==1' case. */ \ /* So we'll just have to find the rest of the terms. */ \ if(connectivity>1 && ndim>1) \ { \ /* Finalize 'is_edge' (bit value 1 for respective dim.). */ \ gdn_is_edge=(uint8_t *)(&gdn_bitstr)+2; \ *gdn_is_edge = *gdn_is_start | *gdn_is_end; \ \ /* Shared between 2D and 3D datasets. */ \ if(*gdn_is_edge) \ { /* NOTE: these are bitwise operators, not conditionals. */ \ if( !( *gdn_is_start & ( gdn_one | gdn_one<<1 ) ) ) \ { nind=(index) - (dinc)[0] - (dinc)[1]; {operation;}; } \ if( !( *gdn_is_start & gdn_one ) \ && !( *gdn_is_end & gdn_one<<1 ) ) \ { nind=(index) - (dinc)[0] + (dinc)[1]; {operation;}; } \ if( !( *gdn_is_end & gdn_one ) \ && !( *gdn_is_start & gdn_one<<1 ) ) \ { nind=(index) + (dinc)[0] - (dinc)[1]; {operation;}; } \ if( !( *gdn_is_end & ( gdn_one | gdn_one<<1 ) ) ) \ { nind=(index) + (dinc)[0] + (dinc)[1]; {operation;}; } \ } \ else \ { \ nind=(index) - (dinc)[0] - (dinc)[1]; {operation;}; \ nind=(index) - (dinc)[0] + (dinc)[1]; {operation;}; \ nind=(index) + (dinc)[0] - (dinc)[1]; {operation;}; \ nind=(index) + (dinc)[0] + (dinc)[1]; {operation;}; \ } \ \ /* Only for 3D datasets. */ \ if(ndim>2) \ { \ /* Connectivity == 2. */ \ if(*gdn_is_edge) \ for(gdn_D=0;gdn_D<2;++gdn_D) \ { \ if( !( *gdn_is_start & ( gdn_one<<gdn_D | gdn_one<<2 ) ) ) \ { nind=(index) - (dinc)[gdn_D] - (dinc)[2]; \ {operation;}; } \ if( !( *gdn_is_start & gdn_one<<gdn_D ) \ && !( *gdn_is_end & gdn_one<<2 ) ) \ { nind=(index) - (dinc)[gdn_D] + (dinc)[2]; \ {operation;}; } \ if( !( *gdn_is_end & gdn_one<<gdn_D ) \ && !( *gdn_is_start & gdn_one<<2 ) ) \ { nind=(index) + (dinc)[gdn_D] - (dinc)[2]; \ {operation;}; } \ if( !( *gdn_is_end & ( gdn_one<<gdn_D | gdn_one<<2 ) ) ) \ { nind=(index) + (dinc)[gdn_D] + (dinc)[2]; \ {operation;}; } \ } \ else \ for(gdn_D=0;gdn_D<2;++gdn_D) \ { \ nind=(index) - (dinc)[gdn_D] - (dinc)[2]; {operation;}; \ nind=(index) - (dinc)[gdn_D] + (dinc)[2]; {operation;}; \ nind=(index) + (dinc)[gdn_D] - (dinc)[2]; {operation;}; \ nind=(index) + (dinc)[gdn_D] + (dinc)[2]; {operation;}; \ } \ \ /* Connectivity == 3. */ \ if(connectivity>2) \ { \ if(*gdn_is_edge) \ { \ if( !*gdn_is_start ) \ { nind=(index) - (dinc)[0] - (dinc)[1] - (dinc)[2]; \ {operation;}; } \ \ if( !(*gdn_is_start & gdn_one) \ && !(*gdn_is_start & gdn_one<<1) \ && !(*gdn_is_end & gdn_one<<2)) \ { nind=(index) - (dinc)[0] - (dinc)[1] + (dinc)[2]; \ {operation;}; } \ \ if( !(*gdn_is_start & gdn_one) \ && !(*gdn_is_end & gdn_one<<1) \ && !(*gdn_is_start & gdn_one<<2)) \ { nind=(index) - (dinc)[0] + (dinc)[1] - (dinc)[2]; \ {operation;}; } \ \ if( !(*gdn_is_start & gdn_one) \ && !(*gdn_is_end & gdn_one<<1) \ && !(*gdn_is_end & gdn_one<<2)) \ { nind=(index) - (dinc)[0] + (dinc)[1] + (dinc)[2]; \ {operation;}; } \ \ if( !(*gdn_is_end & gdn_one) \ && !(*gdn_is_start & gdn_one<<1) \ && !(*gdn_is_start & gdn_one<<2)) \ { nind=(index) + (dinc)[0] - (dinc)[1] - (dinc)[2]; \ {operation;}; } \ \ if( !(*gdn_is_end & gdn_one) \ && !(*gdn_is_start & gdn_one<<1) \ && !(*gdn_is_end & gdn_one<<2)) \ { nind=(index) + (dinc)[0] - (dinc)[1] + (dinc)[2]; \ {operation;}; } \ \ if( !(*gdn_is_end & gdn_one) \ && !(*gdn_is_end & gdn_one<<1) \ && !(*gdn_is_start & gdn_one<<2)) \ { nind=(index) + (dinc)[0] + (dinc)[1] - (dinc)[2]; \ {operation;}; } \ \ if( !*gdn_is_end ) \ { nind=(index) + (dinc)[0] + (dinc)[1] + (dinc)[2]; \ {operation;}; } \ } \ else \ { \ nind=(index) - (dinc)[0] - (dinc)[1] - (dinc)[2]; \ {operation;}; \ nind=(index) - (dinc)[0] - (dinc)[1] + (dinc)[2]; \ {operation;}; \ nind=(index) - (dinc)[0] + (dinc)[1] - (dinc)[2]; \ {operation;}; \ nind=(index) - (dinc)[0] + (dinc)[1] + (dinc)[2]; \ {operation;}; \ nind=(index) + (dinc)[0] - (dinc)[1] - (dinc)[2]; \ {operation;}; \ nind=(index) + (dinc)[0] - (dinc)[1] + (dinc)[2]; \ {operation;}; \ nind=(index) + (dinc)[0] + (dinc)[1] - (dinc)[2]; \ {operation;}; \ nind=(index) + (dinc)[0] + (dinc)[1] + (dinc)[2]; \ {operation;}; \ } \ } \ } \ } \ \ /* For a check. */ \ /* printf("\nEdge bit flags: "); */ \ /* gal_data_bit_print_stream(&gdn_bitstr, 3); printf("\n"); */ \ } __END_C_DECLS /* From C++ preparations */ #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/ds9.h��������������������������������������������������������������������0000644�0001750�0001750�00000003742�14551337306�012255� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to interface with DS9 files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_DS9_H__ #define __GAL_DS9_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Modes to interpret coordinates. */ enum gal_ds9_coord_modes { GAL_DS9_COORD_MODE_INVALID, /* For sanity checks. */ GAL_DS9_COORD_MODE_IMG, /* Image coordinates. */ GAL_DS9_COORD_MODE_WCS, /* WCS coordinates. */ }; gal_data_t * gal_ds9_reg_read_polygon(char *filename); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_WCS_H__ */ ������������������������������gnuastro-0.22/lib/gnuastro/eps.h��������������������������������������������������������������������0000644�0001750�0001750�00000007222�14551337306�012342� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* eps -- functions to write EPS files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_EPS_H__ #define __GAL_EPS_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> #include <gnuastro/color.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Definitions */ enum gal_eps_shapes { GAL_EPS_MARK_SHAPE_INVALID, /* Invalid (=0 by C standard). */ GAL_EPS_MARK_SHAPE_CIRCLE, GAL_EPS_MARK_SHAPE_PLUS, GAL_EPS_MARK_SHAPE_CROSS, /* The lines are not based on length */ GAL_EPS_MARK_SHAPE_ELLIPSE, GAL_EPS_MARK_SHAPE_POINT, GAL_EPS_MARK_SHAPE_SQUARE, GAL_EPS_MARK_SHAPE_RECTANGLE, GAL_EPS_MARK_SHAPE_LINE, /* This will be the total number of shapes (good for scripts). */ GAL_EPS_MARK_SHAPE_NUMBER }; /* Expected names of columns */ #define GAL_EPS_MARK_COLNAME_TEXT "TEXT" #define GAL_EPS_MARK_COLNAME_FONT "FONT" #define GAL_EPS_MARK_COLNAME_XPIX "X-PIX" #define GAL_EPS_MARK_COLNAME_YPIX "Y-PIX" #define GAL_EPS_MARK_COLNAME_SHAPE "SHAPE" #define GAL_EPS_MARK_COLNAME_COLOR "COLOR" #define GAL_EPS_MARK_COLNAME_SIZE1 "SIZE1" #define GAL_EPS_MARK_COLNAME_SIZE2 "SIZE2" #define GAL_EPS_MARK_COLNAME_ROTATE "ROTATE" #define GAL_EPS_MARK_COLNAME_FONTSIZE "FONTSIZE" #define GAL_EPS_MARK_COLNAME_LINEWIDTH "LINEWIDTH" /* Default mark properties. */ #define GAL_EPS_MARK_DEFAULT_SHAPE GAL_EPS_MARK_SHAPE_CIRCLE #define GAL_EPS_MARK_DEFAULT_COLOR GAL_COLOR_RED #define GAL_EPS_MARK_DEFAULT_SIZE1 5 #define GAL_EPS_MARK_DEFAULT_SIZE2 3 #define GAL_EPS_MARK_DEFAULT_SIZE2_ELLIPSE 0.5 #define GAL_EPS_MARK_DEFAULT_ROTATE 0 #define GAL_EPS_MARK_DEFAULT_LINEWIDTH 1 #define GAL_EPS_MARK_DEFAULT_FONT "Arial" #define GAL_EPS_MARK_DEFAULT_FONTSIZE 4 /* Functions */ int gal_eps_name_is_eps(char *name); int gal_eps_suffix_is_eps(char *name); void gal_eps_to_pt(float widthincm, size_t *dsize, size_t *w_h_in_pt); uint8_t gal_eps_shape_name_to_id(char *name); char * gal_eps_shape_id_to_name(uint8_t id); void gal_eps_write(gal_data_t *in, char *filename, float widthincm, uint32_t borderwidth, uint8_t bordercolor, int hex, int dontoptimize, int forps, gal_data_t *marks); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TIFF_H__ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/fit.h��������������������������������������������������������������������0000644�0001750�0001750�00000006453�14551337306�012342� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* fit -- functions for doing fitting to input datasets. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2022-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_FIT_H__ #define __GAL_FIT_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Definitions. */ enum gal_fit_types { GAL_FIT_INVALID, /* Invalid (=0 by C standard). */ GAL_FIT_LINEAR, GAL_FIT_LINEAR_WEIGHTED, GAL_FIT_LINEAR_NO_CONSTANT, GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED, GAL_FIT_POLYNOMIAL, GAL_FIT_POLYNOMIAL_ROBUST, GAL_FIT_POLYNOMIAL_WEIGHTED, /* This will be the total number of shapes (good for scripts). */ GAL_FIT_NUMBER }; enum gal_fit_robust_types { GAL_FIT_ROBUST_INVALID, /* Invalid (=0 by C standard). */ GAL_FIT_ROBUST_BISQUARE, GAL_FIT_ROBUST_CAUCHY, GAL_FIT_ROBUST_FAIR, GAL_FIT_ROBUST_HUBER, GAL_FIT_ROBUST_OLS, GAL_FIT_ROBUST_WELSCH, /* This will be the total number of shapes (good for scripts). */ GAL_FIT_ROBUST_NUMBER }; /* Functions */ uint8_t gal_fit_name_to_id(char *name); char * gal_fit_name_from_id(uint8_t fitid); int gal_fit_name_robust_to_id(char *name); char * gal_fit_name_robust_from_id(uint8_t robustid); gal_data_t * gal_fit_1d_linear(gal_data_t *xin, gal_data_t *yin, gal_data_t *ywht); gal_data_t * gal_fit_1d_linear_no_constant(gal_data_t *xin, gal_data_t *yin, gal_data_t *ywht); gal_data_t * gal_fit_1d_linear_estimate(gal_data_t *fit, gal_data_t *xin); gal_data_t * gal_fit_1d_polynomial(gal_data_t *xin, gal_data_t *yin, gal_data_t *ywht, size_t maxpower, double *redchisq); gal_data_t * gal_fit_1d_polynomial_robust(gal_data_t *xin, gal_data_t *yin, size_t maxpower, uint8_t robustid, double *redchisq); gal_data_t * gal_fit_1d_polynomial_estimate(gal_data_t *fit, gal_data_t *xin); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_FIT_H__ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/fits.h�������������������������������������������������������������������0000644�0001750�0001750�00000026277�14551337306�012533� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to convert a FITS array to a C array and vice versa. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_FITS_H__ #define __GAL_FITS_H__ /* When we are within Gnuastro's building process, 'IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular 'GAL_CONFIG_HAVE_WCSLIB_VERION' that we need in 'fits.c') is kept in 'config.h'. When building a user's programs, this information is kept in 'gnuastro/config.h'. Note that all '.c' files must start with the inclusion of 'config.h' and that 'gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro).*/ #ifndef IN_GNUASTRO_BUILD #include <gnuastro/config.h> #endif /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <math.h> #include <time.h> #include <float.h> #include <fitsio.h> #include <wcslib/wcs.h> #include <wcslib/wcshdr.h> #include <wcslib/wcsfix.h> #include <gnuastro/list.h> #include <gnuastro/data.h> /* gnuastro/table.h is included below. */ /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Macros. */ #define GAL_FITS_MAX_NDIM 999 #define GAL_FITS_KEY_TITLE_START " / " /* To create a linked list of headers. */ typedef struct gal_fits_list_key_t { char *title; /* !=NULL, only print title. */ char *fullcomment; /* Fully COMMENT (no name). */ char *keyname; /* Keyword Name. */ void *value; /* Keyword value. */ uint8_t type; /* Keyword value type. */ char *comment; /* Keyword comment. */ char *unit; /* Keyword unit. */ int tfree; /* ==1, free title string. */ int fcfree; /* ==1, free full comment. */ int kfree; /* ==1, free keyword name. */ int vfree; /* ==1, free keyword value. */ int cfree; /* ==1, free comment. */ int ufree; /* ==1, free unit. */ struct gal_fits_list_key_t *next; /* Pointer next keyword. */ } gal_fits_list_key_t; /* table.h needs 'gal_fits_list_key_t', so it should be included here, not with the other headers above. */ #include <gnuastro/table.h> /************************************************************* ************** Reporting errors: *************** *************************************************************/ void gal_fits_io_error(int status, char *message); /************************************************************* ************** FITS names *************** *************************************************************/ int gal_fits_name_is_fits(char *name); int gal_fits_suffix_is_fits(char *suffix); int gal_fits_file_recognized(char *filename); char * gal_fits_name_save_as_string(char *filename, char *hdu); /************************************************************* ************** Type codes *************** *************************************************************/ uint8_t gal_fits_bitpix_to_type(int bitpix); int gal_fits_type_to_bitpix(uint8_t type); char gal_fits_type_to_bin_tform(uint8_t type); int gal_fits_type_to_datatype(uint8_t type); uint8_t gal_fits_datatype_to_type(int datatype, int is_table_column); /**************************************************************/ /********** HDU ************/ /**************************************************************/ fitsfile * gal_fits_open_to_write(char *filename); size_t gal_fits_hdu_num(char *filename); unsigned long gal_fits_hdu_datasum(char *filename, char *hdu, char *hdu_option_name); char * gal_fits_hdu_datasum_encoded(char *filename, char *hdu, char *hdu_option_name); unsigned long gal_fits_hdu_datasum_ptr(fitsfile *fptr); int gal_fits_hdu_format(char *filename, char *hdu, char *hdu_option_name); int gal_fits_hdu_is_healpix(fitsfile *fptr); fitsfile * gal_fits_hdu_open(char *filename, char *hdu, int iomode, int exitonerror, char *hdu_option_name); fitsfile * gal_fits_hdu_open_format(char *filename, char *hdu, int img0_tab1, char *hdu_option_name); /**************************************************************/ /********** Header keywords ************/ /**************************************************************/ int gal_fits_key_exists_fptr(fitsfile *fptr, char *keyname); void * gal_fits_key_img_blank(uint8_t type); void gal_fits_key_clean_str_value(char *string); char * gal_fits_key_date_to_struct_tm(char *fitsdate, struct tm *tp); size_t gal_fits_key_date_to_seconds(char *fitsdate, char **subsecstr, double *subsec); void gal_fits_key_read_from_ptr(fitsfile *fptr, gal_data_t *keysll, int readcomment, int readunit); void gal_fits_key_read(char *filename, char *hdu, gal_data_t *keysll, int readcomment, int readunit, char *hdu_option_name); void gal_fits_key_list_add(gal_fits_list_key_t **list, uint8_t type, char *keyname, int kfree, void *value, int vfree, char *comment, int cfree, char *unit, int ufree); void gal_fits_key_list_add_end(gal_fits_list_key_t **list, uint8_t type, char *keyname, int kfree, void *value, int vfree, char *comment, int cfree, char *unit, int ufree); void gal_fits_key_list_title_add(gal_fits_list_key_t **list, char *title, int tfree); void gal_fits_key_list_title_add_end(gal_fits_list_key_t **list, char *title, int tfree); void gal_fits_key_list_fullcomment_add(gal_fits_list_key_t **list, char *fullcomment, int fcfree); void gal_fits_key_list_fullcomment_add_end(gal_fits_list_key_t **list, char *fullcomment, int fcfree); void gal_fits_key_list_add_date(gal_fits_list_key_t **keylist, char *comment); void gal_fits_key_list_add_software_versions(gal_fits_list_key_t **keylist); void gal_fits_key_list_add_git_commit(gal_fits_list_key_t **keylist); void gal_fits_key_list_reverse(gal_fits_list_key_t **list); void gal_fits_key_write_title_in_ptr(char *title, fitsfile *fptr); void gal_fits_key_write_filename(char *keynamebase, char *filename, gal_fits_list_key_t **list, int top1end0, int quiet); void gal_fits_key_write_wcsstr(fitsfile *fptr, struct wcsprm *wcs, char *wcsstr, int nkeyrec); void gal_fits_key_write(gal_fits_list_key_t *keylist, char *filename, char *hdu, char *hdu_option_name, int freekeys, int create_fits_not_exists); void gal_fits_key_write_in_ptr(gal_fits_list_key_t *keylist, fitsfile *fptr, int freekeys); gal_list_str_t * gal_fits_with_keyvalue(gal_list_str_t *files, char *hdu, char *name, gal_list_str_t *values, char *hdu_option_name); gal_list_str_t * gal_fits_unique_keyvalues(gal_list_str_t *files, char *hdu, char *name, char *hdu_option_name); /************************************************************* ****************** Array functions ***************** *************************************************************/ void gal_fits_img_info(fitsfile *fptr, int *type, size_t *ndim, size_t **dsize, char **name, char **unit); size_t * gal_fits_img_info_dim(char *filename, char *hdu, size_t *ndim, char *hdu_option_name); gal_data_t * gal_fits_img_read(char *filename, char *hdu, size_t minmapsize, int quietmmap, char *hdu_option_name); gal_data_t * gal_fits_img_read_to_type(char *inputname, char *hdu, uint8_t type, size_t minmapsize, int quietmmap, char *hdu_option_name); gal_data_t * gal_fits_img_read_kernel(char *filename, char *hdu, size_t minmapsize, int quietmmap, char *hdu_option_name); fitsfile * gal_fits_img_write_to_ptr(gal_data_t *data, char *filename, gal_fits_list_key_t *keylist, int freekeys); void gal_fits_img_write(gal_data_t *data, char *filename, gal_fits_list_key_t *keylist, int freekeys); void gal_fits_img_write_to_type(gal_data_t *data, char *filename, gal_fits_list_key_t *keylist, int type, int freekeys); void gal_fits_img_write_corr_wcs_str(gal_data_t *input, char *filename, char *wcsheader, int nkeyrec, double *crpix, gal_fits_list_key_t *keylist, int freekeys); /**************************************************************/ /********** Table ************/ /**************************************************************/ void gal_fits_tab_size(fitsfile *fitsptr, size_t *nrows, size_t *ncols); int gal_fits_tab_format(fitsfile *fptr); gal_data_t * gal_fits_tab_info(char *filename, char *hdu, size_t *numcols, size_t *numrows, int *tableformat, char *hdu_option_name); gal_data_t * gal_fits_tab_read(char *filename, char *hdu, size_t numrows, gal_data_t *allcols, gal_list_sizet_t *indexll, size_t numthreads, size_t minmapsize, int quietmmap, char *hdu_option_name); void gal_fits_tab_write(gal_data_t *cols, gal_list_str_t *comments, int tableformat, char *filename, char *extname, struct gal_fits_list_key_t *keywords, int freekeys); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_FITS_H__ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/git.h��������������������������������������������������������������������0000644�0001750�0001750�00000003234�14551337306�012335� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to facilitate using the Git library. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_GIT_H__ #define __GAL_GIT_H__ #if GAL_CONFIG_HAVE_LIBGIT2 == 1 #include <git2.h> #endif /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Only make the Git definitions if the system has LIBGIT2, */ char * gal_git_describe(); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_GIT_H__ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/interpolate.h������������������������������������������������������������0000644�0001750�0001750�00000005723�14551337306�014105� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* tile -- work with tesselations over a host dataset. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_INTERPOLATE_H__ #define __GAL_INTERPOLATE_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> #include <gnuastro/tile.h> #include <gsl/gsl_spline.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Metrics to use for nearest-neighbor */ enum gal_interpolate_neighbors_metric { GAL_INTERPOLATE_NEIGHBORS_METRIC_INVALID, GAL_INTERPOLATE_NEIGHBORS_METRIC_RADIAL, GAL_INTERPOLATE_NEIGHBORS_METRIC_MANHATTAN, }; /* Types of interpolation for nearest-neighbor. */ enum gal_interpolate_neighbors_func { GAL_INTERPOLATE_NEIGHBORS_FUNC_INVALID, GAL_INTERPOLATE_NEIGHBORS_FUNC_MIN, GAL_INTERPOLATE_NEIGHBORS_FUNC_MAX, GAL_INTERPOLATE_NEIGHBORS_FUNC_MEAN, GAL_INTERPOLATE_NEIGHBORS_FUNC_MEDIAN, }; /* Types of interpolation. */ enum gal_interpolate_1D_types { GAL_INTERPOLATE_1D_INVALID, GAL_INTERPOLATE_1D_LINEAR, GAL_INTERPOLATE_1D_POLYNOMIAL, GAL_INTERPOLATE_1D_CSPLINE, GAL_INTERPOLATE_1D_CSPLINE_PERIODIC, GAL_INTERPOLATE_1D_AKIMA, GAL_INTERPOLATE_1D_AKIMA_PERIODIC, GAL_INTERPOLATE_1D_STEFFEN, }; gal_data_t * gal_interpolate_neighbors(gal_data_t *input, struct gal_tile_two_layer_params *tl, uint8_t metric, size_t numneighbors, size_t numthreads, int onlyblank, int aslinkedlist, int function); gsl_spline * gal_interpolate_1d_make_gsl_spline(gal_data_t *X, gal_data_t *Y, int type_1d); void gal_interpolate_1d_blank(gal_data_t *in, int type_1d); __END_C_DECLS /* From C++ preparations */ #endif ���������������������������������������������gnuastro-0.22/lib/gnuastro/jpeg.h�������������������������������������������������������������������0000644�0001750�0001750�00000003706�14551337306�012503� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* jpeg -- functions to read and write JPEG files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_JPEG_H__ #define __GAL_JPEG_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Functions */ int gal_jpeg_name_is_jpeg(char *name); int gal_jpeg_suffix_is_jpeg(char *name); gal_data_t * gal_jpeg_read(char *filename, size_t minmapsize, int quietmmap); void gal_jpeg_write(gal_data_t *in, char *filename, uint8_t quality, float widthincm); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_JPEG_H__ */ ����������������������������������������������������������gnuastro-0.22/lib/gnuastro/kdtree.h�����������������������������������������������������������������0000644�0001750�0001750�00000003724�14551337306�013034� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* kdtree -- Create kd-tree and nearest neighbour searches. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Sachin Kumar Singh <sachinkumarsingh092@gmail.com> Contributing author(s): Mohammad Akhlaghi <mohammad@akhlaghi.org> Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_KDTREE_H__ #define __GAL_KDTREE_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ gal_data_t * gal_kdtree_create(gal_data_t *coords_raw, size_t *root); size_t gal_kdtree_nearest_neighbour(gal_data_t *coords_raw, gal_data_t *kdtree, size_t root, double *point, double *least_dist); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_KDTREE_H__ */ ��������������������������������������������gnuastro-0.22/lib/gnuastro/label.h������������������������������������������������������������������0000644�0001750�0001750�00000005203�14551566633�012636� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* label -- Work on labeled (positive integer valued) datasets. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_LABEL_H__ #define __GAL_LABEL_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> #include <gnuastro/tile.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Constants for the clump over-segmentation. */ #define GAL_LABEL_INIT -1 #define GAL_LABEL_RIVER -2 #define GAL_LABEL_TMPCHECK -3 /* Functions. */ gal_data_t * gal_label_indexs(gal_data_t *labels, size_t numlabs, size_t minmapsize, int quietmmap); size_t gal_label_watershed(gal_data_t *values, gal_data_t *indexs, gal_data_t *label, size_t *topinds, int min0_max1); void gal_label_clump_significance(gal_data_t *values, gal_data_t *std, gal_data_t *label, gal_data_t *indexs, struct gal_tile_two_layer_params *tl, size_t numclumps, size_t minarea, int variance, int keepsmall, gal_data_t *sig, gal_data_t *sigind); void gal_label_grow_indexs(gal_data_t *labels, gal_data_t *indexs, int withrivers, int connectivity); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_LABEL_H__ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/list.h�������������������������������������������������������������������0000644�0001750�0001750�00000021636�14551337306�012533� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions for linked lists. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_LIST_H__ #define __GAL_LIST_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /**************************************************************** ***************** String ******************** ****************************************************************/ typedef struct gal_list_str_t { char *v; struct gal_list_str_t *next; } gal_list_str_t; void gal_list_str_add(gal_list_str_t **list, char *value, int allocate); char * gal_list_str_pop(gal_list_str_t **list); size_t gal_list_str_number(gal_list_str_t *list); gal_list_str_t * gal_list_str_last(gal_list_str_t *list); void gal_list_str_print(gal_list_str_t *list); void gal_list_str_reverse(gal_list_str_t **list); void gal_list_str_free(gal_list_str_t *list, int freevalue); gal_list_str_t * gal_list_str_extract(char *string); char * gal_list_str_cat(gal_list_str_t *list, char delimiter); /**************************************************************** ***************** int32 ******************** ****************************************************************/ typedef struct gal_list_i32_t { int32_t v; struct gal_list_i32_t *next; } gal_list_i32_t; void gal_list_i32_add(gal_list_i32_t **list, int32_t value); int32_t gal_list_i32_pop(gal_list_i32_t **list); size_t gal_list_i32_number(gal_list_i32_t *list); gal_list_i32_t * gal_list_i32_last(gal_list_i32_t *list); void gal_list_i32_print(gal_list_i32_t *list); void gal_list_i32_reverse(gal_list_i32_t **list); int32_t * gal_list_i32_to_array(gal_list_i32_t *list, int reverse, size_t *num); void gal_list_i32_free(gal_list_i32_t *list); /**************************************************************** ***************** size_t ******************** ****************************************************************/ typedef struct gal_list_sizet_t { size_t v; struct gal_list_sizet_t *next; } gal_list_sizet_t; void gal_list_sizet_add(gal_list_sizet_t **list, size_t value); size_t gal_list_sizet_pop(gal_list_sizet_t **list); size_t gal_list_sizet_number(gal_list_sizet_t *list); gal_list_sizet_t * gal_list_sizet_last(gal_list_sizet_t *list); void gal_list_sizet_print(gal_list_sizet_t *list); void gal_list_sizet_reverse(gal_list_sizet_t **list); size_t * gal_list_sizet_to_array(gal_list_sizet_t *list, int reverse, size_t *num); void gal_list_sizet_free(gal_list_sizet_t *list); /**************************************************************** ***************** float ******************** ****************************************************************/ typedef struct gal_list_f32_t { float v; struct gal_list_f32_t *next; } gal_list_f32_t; void gal_list_f32_add(gal_list_f32_t **list, float value); float gal_list_f32_pop(gal_list_f32_t **list); size_t gal_list_f32_number(gal_list_f32_t *list); gal_list_f32_t * gal_list_f32_last(gal_list_f32_t *list); void gal_list_f32_reverse(gal_list_f32_t **list); void gal_list_f32_print(gal_list_f32_t *list); float * gal_list_f32_to_array(gal_list_f32_t *list, int reverse, size_t *num); void gal_list_f32_free(gal_list_f32_t *list); /**************************************************************** ***************** double ******************** ****************************************************************/ typedef struct gal_list_f64_t { double v; struct gal_list_f64_t *next; } gal_list_f64_t; void gal_list_f64_add(gal_list_f64_t **list, double value); double gal_list_f64_pop(gal_list_f64_t **list); size_t gal_list_f64_number(gal_list_f64_t *list); gal_list_f64_t * gal_list_f64_last(gal_list_f64_t *list); void gal_list_f64_print(gal_list_f64_t *list); void gal_list_f64_reverse(gal_list_f64_t **list); double * gal_list_f64_to_array(gal_list_f64_t *list, int reverse, size_t *num); gal_data_t * gal_list_f64_to_data(gal_list_f64_t *list, uint8_t type, size_t minmapsize, int quietmmap); void gal_list_f64_free(gal_list_f64_t *list); /**************************************************************** ***************** void * ******************** ****************************************************************/ typedef struct gal_list_void_t { void *v; struct gal_list_void_t *next; } gal_list_void_t; void gal_list_void_add(gal_list_void_t **list, void *value); void * gal_list_void_pop(gal_list_void_t **list); size_t gal_list_void_number(gal_list_void_t *list); gal_list_void_t * gal_list_void_last(gal_list_void_t *list); void gal_list_void_reverse(gal_list_void_t **list); void gal_list_void_free(gal_list_void_t *list, int freevalue); /**************************************************************** ***************** Ordered size_t ******************** ****************************************************************/ typedef struct gal_list_osizet_t { size_t v; /* The actual value. */ float s; /* The parameter to sort by. */ struct gal_list_osizet_t *next; } gal_list_osizet_t; void gal_list_osizet_add(gal_list_osizet_t **list, size_t value, float tosort); size_t gal_list_osizet_pop(gal_list_osizet_t **list, float *sortvalue); void gal_list_osizet_to_sizet_free(gal_list_osizet_t *in, gal_list_sizet_t **out); /**************************************************************** *********** Doubly linked, ordered size_t ************** ****************************************************************/ typedef struct gal_list_dosizet_t { size_t v; /* The actual value. */ float s; /* The parameter to sort by. */ struct gal_list_dosizet_t *prev; struct gal_list_dosizet_t *next; } gal_list_dosizet_t; void gal_list_dosizet_add(gal_list_dosizet_t **largest, gal_list_dosizet_t **smallest, size_t value, float tosort); size_t gal_list_dosizet_pop_smallest(gal_list_dosizet_t **lartest, gal_list_dosizet_t **smallest, float *tosort); void gal_list_dosizet_print(gal_list_dosizet_t *largest, gal_list_dosizet_t *smallest); void gal_list_dosizet_to_sizet(gal_list_dosizet_t *in, gal_list_sizet_t **out); void gal_list_dosizet_free(gal_list_dosizet_t *largest); /**************************************************************** ***************** gal_data_t ******************** ****************************************************************/ void gal_list_data_add(gal_data_t **list, gal_data_t *newnode); void gal_list_data_add_alloc(gal_data_t **list, void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, int quietmmap, char *name, char *unit, char *comment); gal_data_t * gal_list_data_pop(gal_data_t **list); void gal_list_data_remove(gal_data_t **list, gal_data_t *node); gal_data_t * gal_list_data_select_by_name(gal_data_t *list, char *name); gal_data_t * gal_list_data_select_by_id(gal_data_t *table, char *idstr, size_t *index); void gal_list_data_reverse(gal_data_t **list); gal_data_t ** gal_list_data_to_array_ptr(gal_data_t *list, size_t *num); size_t gal_list_data_number(gal_data_t *list); gal_data_t * gal_list_data_last(gal_data_t *list); void gal_list_data_free(gal_data_t *list); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_LIST_H__ */ ��������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/match.h������������������������������������������������������������������0000644�0001750�0001750�00000004154�14551337306�012650� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* match -- Functions to match catalogs and WCS. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Sachin Kumar Singh <sachinkumarsingh092@gmail.com> Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_MATCH_H__ #define __GAL_MATCH_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ gal_data_t * gal_match_sort_based(gal_data_t *coord1, gal_data_t *coord2, double *aperture, int sorted_by_first, int inplace, size_t minmapsize, int quietmmap, size_t *nummatched); gal_data_t * gal_match_kdtree(gal_data_t *coord1, gal_data_t *coord2, gal_data_t *coord1_kdtree, size_t kdtree_root, double *aperture, size_t numthreads, size_t minmapsize, int quietmmap, size_t *nummatched); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TABLE_H__ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/pdf.h��������������������������������������������������������������������0000644�0001750�0001750�00000003661�14551337306�012327� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* pdf -- functions to write PDF files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_PDF_H__ #define __GAL_PDF_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Functions */ int gal_pdf_name_is_pdf(char *name); int gal_pdf_suffix_is_pdf(char *name); void gal_pdf_write(gal_data_t *in, char *filename, float widthincm, uint32_t borderwidth, uint8_t bordercolor, int dontoptimize, gal_data_t *marks); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TIFF_H__ */ �������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/permutation.h������������������������������������������������������������0000644�0001750�0001750�00000004645�14551337306�014130� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Permutation -- Work on permutations (arrays of indexs). This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_PERMUTATION_H__ #define __GAL_PERMUTATION_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /*********************************************************************/ /*************** Permutation info *******************/ /*********************************************************************/ void gal_permutation_check(size_t *permutation, size_t size); /*********************************************************************/ /*************** Apply permutation *******************/ /*********************************************************************/ void gal_permutation_apply(gal_data_t *input, size_t *permutation); void gal_permutation_apply_onlydim0(gal_data_t *input, size_t *permutation); void gal_permutation_apply_inverse(gal_data_t *input, size_t *permutation); void gal_permutation_transpose_2d(gal_data_t *input); __END_C_DECLS /* From C++ preparations */ #endif �������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/pointer.h����������������������������������������������������������������0000644�0001750�0001750�00000004575�14551337306�013243� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* pointer -- facilitate working with pointers and allocation. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_POINTER_H__ #define __GAL_POINTER_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <stdint.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ void * gal_pointer_increment(void *pointer, size_t increment, uint8_t type); size_t gal_pointer_num_between(void *earlier, void *later, uint8_t type); void * gal_pointer_allocate(uint8_t type, size_t size, int clear, const char *funcname, const char *varname); void * gal_pointer_mmap_allocate(uint8_t type, size_t size, int clear, char **filename, int quiet); void gal_pointer_mmap_free(char **mmapname, int quietmmap); void * gal_pointer_allocate_ram_or_mmap(uint8_t type, size_t size, int clear, size_t minmapsize, char **mmapname, int quietmmap, const char *funcname, const char *varname); __END_C_DECLS /* From C++ preparations */ #endif �����������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/polygon.h����������������������������������������������������������������0000644�0001750�0001750�00000005243�14551337306�013243� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Polygon related functions and macros. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Sachin Kumar Singh <sachinkumarsingh092@gmail.com> Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_POLYGON_H__ #define __GAL_POLYGON_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ #define GAL_POLYGON_MAX_CORNERS 50 #define GAL_POLYGON_ROUND_ERR 1e-5 /***************************************************************/ /************** Function declarations ******************/ /***************************************************************/ void gal_polygon_vertices_sort_convex(double *in, size_t n, size_t *ordinds); int gal_polygon_is_convex(double *v, size_t n); double gal_polygon_area_flat(double *v, size_t n); double gal_polygon_area_sky(double *v, size_t n); int gal_polygon_is_inside(double *v, double *p, size_t n); int gal_polygon_is_inside_convex(double *v, double *p, size_t n); int gal_polygon_ppropin(double *v, double *p, size_t n); int gal_polygon_is_counterclockwise(double *v, size_t n); int gal_polygon_to_counterclockwise(double *v, size_t n); void gal_polygon_clip(double *s, size_t n, double *c, size_t m, double *o, size_t *numcrn); void gal_polygon_vertices_sort(double *in, size_t n, size_t *ordinds); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_POLYGON_H__ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/pool.h�������������������������������������������������������������������0000644�0001750�0001750�00000004333�14551337306�012524� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Pool -- Pool input data and create a new dataset. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Faezeh Bidjarchian <fbidjarchian@gmail.com> Contributing author(s): Mohammad Akhlaghi <mohammad@akhlaghi.org> Copyright (C) 2023-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_POOL_H__ #define __GAL_POOL_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ gal_data_t * gal_pool_max(gal_data_t *input, size_t psize, size_t stride, size_t numthreads); gal_data_t * gal_pool_min(gal_data_t *input, size_t psize, size_t stride, size_t numthreads); gal_data_t * gal_pool_sum(gal_data_t *input, size_t psize, size_t stride, size_t numthreads); gal_data_t * gal_pool_mean(gal_data_t *input, size_t psize, size_t stride, size_t numthreads); gal_data_t * gal_pool_median(gal_data_t *input, size_t psize, size_t stride, size_t numthreads); __END_C_DECLS /* From C++ preparations */ #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/qsort.h������������������������������������������������������������������0000644�0001750�0001750�00000012232�14551337306�012720� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* qsort -- Functions used by qsort to sort an array. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_QSORT_H__ #define __GAL_QSORT_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /*****************************************************************/ /********** Sorting of actual array ****************/ /*****************************************************************/ int gal_qsort_uint8_d(const void *a, const void *b); int gal_qsort_uint8_i(const void *a, const void *b); int gal_qsort_int8_d(const void *a, const void *b); int gal_qsort_int8_i(const void *a, const void *b); int gal_qsort_uint16_d(const void *a, const void *b); int gal_qsort_uint16_i(const void *a, const void *b); int gal_qsort_int16_d(const void *a, const void *b); int gal_qsort_int16_i(const void *a, const void *b); int gal_qsort_uint32_d(const void *a, const void *b); int gal_qsort_uint32_i(const void *a, const void *b); int gal_qsort_int32_d(const void *a, const void *b); int gal_qsort_int32_i(const void *a, const void *b); int gal_qsort_uint64_d(const void *a, const void *b); int gal_qsort_uint64_i(const void *a, const void *b); int gal_qsort_int64_d(const void *a, const void *b); int gal_qsort_int64_i(const void *a, const void *b); int gal_qsort_float32_d(const void *a, const void *b); int gal_qsort_float32_i(const void *a, const void *b); int gal_qsort_float64_d(const void *a, const void *b); int gal_qsort_float64_i(const void *a, const void *b); /*****************************************************************/ /*************** Sorting indexs ******************/ /*****************************************************************/ /* Pointer used to sort the indexs of an array based on their flux (value in this array). Note: when EACH THREAD USES A DIFFERENT ARRAY, this is not thread-safe . */ extern void *gal_qsort_index_single; /* When each thread is working on a different array, we'll need to keep the pointer to the array in question for every index. */ struct gal_qsort_index_multi { float *values; /* Array of values (pointer, so original is not touched). */ /* This should be identical in all elements. */ size_t index; /* Index of each element to be sorted. */ }; int gal_qsort_index_single_uint8_d(const void *a, const void *b); int gal_qsort_index_single_uint8_i(const void *a, const void *b); int gal_qsort_index_single_int8_d(const void *a, const void *b); int gal_qsort_index_single_int8_i(const void *a, const void *b); int gal_qsort_index_single_uint16_d(const void *a, const void *b); int gal_qsort_index_single_uint16_i(const void *a, const void *b); int gal_qsort_index_single_int16_d(const void *a, const void *b); int gal_qsort_index_single_int16_i(const void *a, const void *b); int gal_qsort_index_single_uint32_d(const void *a, const void *b); int gal_qsort_index_single_uint32_i(const void *a, const void *b); int gal_qsort_index_single_int32_d(const void *a, const void *b); int gal_qsort_index_single_int32_i(const void *a, const void *b); int gal_qsort_index_single_uint64_d(const void *a, const void *b); int gal_qsort_index_single_uint64_i(const void *a, const void *b); int gal_qsort_index_single_int64_d(const void *a, const void *b); int gal_qsort_index_single_int64_i(const void *a, const void *b); int gal_qsort_index_single_float32_d(const void *a, const void *b); int gal_qsort_index_single_float32_i(const void *a, const void *b); int gal_qsort_index_single_float64_d(const void *a, const void *b); int gal_qsort_index_single_float64_i(const void *a, const void *b); int gal_qsort_index_multi_d(const void *a, const void *b); int gal_qsort_index_multi_i(const void *a, const void *b); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_QSORT_H__ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/speclines.h��������������������������������������������������������������0000644�0001750�0001750�00000113656�14551337306�013551� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Spectral lines. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2019-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_SPECLINES_H__ #define __GAL_SPECLINES_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Spectral line internal codes (SORT BY WAVELENGTH). rb: right bracket lb: left bracket rlb: left & right bracket From: http://astronomy.nmsu.edu/drewski/tableofemissionlines.html Added: Lyman-Gamma from Wikipeda */ enum gal_speclines_line_codes { /* Allowing '0' to be identied as a known-non-line. */ GAL_SPECLINES_INVALID=0, /* Spectral line names from blue to red. */ GAL_SPECLINES_Ne_VIII_770, GAL_SPECLINES_Ne_VIII_780, GAL_SPECLINES_Ly_epsilon, GAL_SPECLINES_Ly_delta, GAL_SPECLINES_Ly_gamma, GAL_SPECLINES_C_III_977, GAL_SPECLINES_N_III_989, GAL_SPECLINES_N_III_991_51, GAL_SPECLINES_N_III_991_57, GAL_SPECLINES_Ly_beta, GAL_SPECLINES_O_VI_1031, GAL_SPECLINES_O_VI_1037, GAL_SPECLINES_Ar_I_1066, GAL_SPECLINES_Ly_alpha, GAL_SPECLINES_N_V_1238, GAL_SPECLINES_N_V_1242, GAL_SPECLINES_Si_II_1260, GAL_SPECLINES_Si_II_1264, GAL_SPECLINES_O_I_1302, GAL_SPECLINES_C_II_1334, GAL_SPECLINES_C_II_1335, GAL_SPECLINES_Si_IV_1393, GAL_SPECLINES_O_IV_1397, GAL_SPECLINES_O_IV_1399, GAL_SPECLINES_Si_IV_1402, GAL_SPECLINES_N_IV_1486, GAL_SPECLINES_C_IV_1548, GAL_SPECLINES_C_IV_1550, GAL_SPECLINES_He_II_1640, GAL_SPECLINES_O_III_1660, GAL_SPECLINES_O_III_1666, GAL_SPECLINES_N_III_1746, GAL_SPECLINES_N_III_1748, GAL_SPECLINES_Al_III_1854, GAL_SPECLINES_Al_III_1862, GAL_SPECLINES_Si_III, GAL_SPECLINES_C_III_1908, GAL_SPECLINES_N_II_2142, GAL_SPECLINES_O_III_2320, GAL_SPECLINES_C_II_2323, GAL_SPECLINES_C_II_2324, GAL_SPECLINES_Fe_XI_2648, GAL_SPECLINES_He_II_2733, GAL_SPECLINES_Mg_V_2782, GAL_SPECLINES_Mg_II_2795, GAL_SPECLINES_Mg_II_2802, GAL_SPECLINES_Fe_IV_2829, GAL_SPECLINES_Fe_IV_2835, GAL_SPECLINES_Ar_IV_2853, GAL_SPECLINES_Ar_IV_2868, GAL_SPECLINES_Mg_V_2928, GAL_SPECLINES_He_I_2945, GAL_SPECLINES_O_III_3132, GAL_SPECLINES_He_I_3187, GAL_SPECLINES_He_II_3203, GAL_SPECLINES_O_III_3312, GAL_SPECLINES_Ne_V_3345, GAL_SPECLINES_Ne_V_3425, GAL_SPECLINES_O_III_3444, GAL_SPECLINES_N_I_3466_4, GAL_SPECLINES_N_I_3466_5, GAL_SPECLINES_He_I_3487, GAL_SPECLINES_Fe_VII_3586, GAL_SPECLINES_Fe_VI_3662, GAL_SPECLINES_H_19, GAL_SPECLINES_H_18, GAL_SPECLINES_H_17, GAL_SPECLINES_H_16, GAL_SPECLINES_H_15, GAL_SPECLINES_H_14, GAL_SPECLINES_O_II_3726, GAL_SPECLINES_O_II_3728, GAL_SPECLINES_H_13, GAL_SPECLINES_H_12, GAL_SPECLINES_Fe_VII_3758, GAL_SPECLINES_H_11, GAL_SPECLINES_H_10, GAL_SPECLINES_H_9, GAL_SPECLINES_Fe_V_3839, GAL_SPECLINES_Ne_III_3868, GAL_SPECLINES_He_I_3888, GAL_SPECLINES_H_8, GAL_SPECLINES_Fe_V_3891, GAL_SPECLINES_Fe_V_3911, GAL_SPECLINES_Ne_III_3967, GAL_SPECLINES_H_epsilon, GAL_SPECLINES_He_I_4026, GAL_SPECLINES_S_II_4068, GAL_SPECLINES_Fe_V_4071, GAL_SPECLINES_S_II_4076, GAL_SPECLINES_H_delta, GAL_SPECLINES_He_I_4143, GAL_SPECLINES_Fe_II_4178, GAL_SPECLINES_Fe_V_4180, GAL_SPECLINES_Fe_II_4233, GAL_SPECLINES_Fe_V_4227, GAL_SPECLINES_Fe_II_4287, GAL_SPECLINES_Fe_II_4304, GAL_SPECLINES_O_II_4317, GAL_SPECLINES_H_gamma, GAL_SPECLINES_O_III_4363, GAL_SPECLINES_Ar_XIV, GAL_SPECLINES_O_II_4414, GAL_SPECLINES_Fe_II_4416, GAL_SPECLINES_Fe_II_4452, GAL_SPECLINES_He_I_4471, GAL_SPECLINES_Fe_II_4489, GAL_SPECLINES_Fe_II_4491, GAL_SPECLINES_N_III_4510, GAL_SPECLINES_Fe_II_4522, GAL_SPECLINES_Fe_II_4555, GAL_SPECLINES_Fe_II_4582, GAL_SPECLINES_Fe_II_4583, GAL_SPECLINES_Fe_II_4629, GAL_SPECLINES_N_III_4634, GAL_SPECLINES_N_III_4640, GAL_SPECLINES_N_III_4641, GAL_SPECLINES_C_III_4647, GAL_SPECLINES_C_III_4650, GAL_SPECLINES_C_III_5651, GAL_SPECLINES_Fe_III_4658, GAL_SPECLINES_He_II_4685, GAL_SPECLINES_Ar_IV_4711, GAL_SPECLINES_Ar_IV_4740, GAL_SPECLINES_H_beta, GAL_SPECLINES_Fe_VII_4893, GAL_SPECLINES_Fe_IV_4903, GAL_SPECLINES_Fe_II_4923, GAL_SPECLINES_O_III_4958, GAL_SPECLINES_O_III_5006, GAL_SPECLINES_Fe_II_5018, GAL_SPECLINES_Fe_III_5084, GAL_SPECLINES_Fe_VI_5145, GAL_SPECLINES_Fe_VII_5158, GAL_SPECLINES_Fe_II_5169, GAL_SPECLINES_Fe_VI_5176, GAL_SPECLINES_Fe_II_5197, GAL_SPECLINES_N_I_5200, GAL_SPECLINES_Fe_II_5234, GAL_SPECLINES_Fe_IV_5236, GAL_SPECLINES_Fe_III_5270, GAL_SPECLINES_Fe_II_5276, GAL_SPECLINES_Fe_VII_5276, GAL_SPECLINES_Fe_XIV, GAL_SPECLINES_Ca_V, GAL_SPECLINES_Fe_II_5316_6, GAL_SPECLINES_Fe_II_5316_7, GAL_SPECLINES_Fe_VI_5335, GAL_SPECLINES_Fe_VI_5424, GAL_SPECLINES_Cl_III_5517, GAL_SPECLINES_Cl_III_5537, GAL_SPECLINES_Fe_VI_5637, GAL_SPECLINES_Fe_VI_5677, GAL_SPECLINES_C_III_5697, GAL_SPECLINES_Fe_VII_5720, GAL_SPECLINES_N_II_5754, GAL_SPECLINES_C_IV_5801, GAL_SPECLINES_C_IV_5811, GAL_SPECLINES_He_I_5875, GAL_SPECLINES_O_I_6046, GAL_SPECLINES_Fe_VII_6087, GAL_SPECLINES_O_I_6300, GAL_SPECLINES_S_III_6312, GAL_SPECLINES_Si_II_6347, GAL_SPECLINES_O_I_6363, GAL_SPECLINES_Fe_II_6369, GAL_SPECLINES_Fe_X, GAL_SPECLINES_Fe_II_6516, GAL_SPECLINES_N_II_6548, GAL_SPECLINES_H_alpha, GAL_SPECLINES_N_II_6583, GAL_SPECLINES_S_II_6716, GAL_SPECLINES_S_II_6730, GAL_SPECLINES_O_I_7002, GAL_SPECLINES_Ar_V, GAL_SPECLINES_He_I_7065, GAL_SPECLINES_Ar_III_7135, GAL_SPECLINES_Fe_II_7155, GAL_SPECLINES_Ar_IV_7170, GAL_SPECLINES_Fe_II_7172, GAL_SPECLINES_C_II_7236, GAL_SPECLINES_Ar_IV_7237, GAL_SPECLINES_O_I_7254, GAL_SPECLINES_Ar_IV_7262, GAL_SPECLINES_He_I_7281, GAL_SPECLINES_O_II_7319, GAL_SPECLINES_O_II_7330, GAL_SPECLINES_Ni_II_7377, GAL_SPECLINES_Ni_II_7411, GAL_SPECLINES_Fe_II_7452, GAL_SPECLINES_N_I_7468, GAL_SPECLINES_S_XII, GAL_SPECLINES_Ar_III_7751, GAL_SPECLINES_He_I_7816, GAL_SPECLINES_Ar_I_7868, GAL_SPECLINES_Ni_III, GAL_SPECLINES_Fe_XI_7891, GAL_SPECLINES_He_II_8236, GAL_SPECLINES_Pa_20, GAL_SPECLINES_Pa_19, GAL_SPECLINES_Pa_18, GAL_SPECLINES_O_I_8446, GAL_SPECLINES_Pa_17, GAL_SPECLINES_Ca_II_8498, GAL_SPECLINES_Pa_16, GAL_SPECLINES_Ca_II_8542, GAL_SPECLINES_Pa_15, GAL_SPECLINES_Cl_II, GAL_SPECLINES_Pa_14, GAL_SPECLINES_Fe_II_8616, GAL_SPECLINES_Ca_II_8662, GAL_SPECLINES_Pa_13, GAL_SPECLINES_N_I_8680, GAL_SPECLINES_N_I_8703, GAL_SPECLINES_N_I_8711, GAL_SPECLINES_Pa_12, GAL_SPECLINES_Pa_11, GAL_SPECLINES_Fe_II_8891, GAL_SPECLINES_Pa_10, GAL_SPECLINES_S_III_9068, GAL_SPECLINES_Pa_9, GAL_SPECLINES_S_III_9531, GAL_SPECLINES_Pa_epsilon, GAL_SPECLINES_C_I_9824, GAL_SPECLINES_C_I_9850, GAL_SPECLINES_S_VIII, GAL_SPECLINES_He_I_10027, GAL_SPECLINES_He_I_10031, GAL_SPECLINES_Pa_delta, GAL_SPECLINES_S_II_10286, GAL_SPECLINES_S_II_10320, GAL_SPECLINES_S_II_10336, GAL_SPECLINES_Fe_XIII, GAL_SPECLINES_He_I_10830, GAL_SPECLINES_Pa_gamma, /* This should be the last element (to keep the total number of lines). */ GAL_SPECLINES_NUMBER }; enum gal_speclines_limit_codes { /* Allowing '0' to be identied as a known-non-line. */ GAL_SPECLINES_LIMIT_INVALID=0, GAL_SPECLINES_LIMIT_LYMAN=GAL_SPECLINES_NUMBER, GAL_SPECLINES_LIMIT_BALMER, GAL_SPECLINES_LIMIT_PASCHEN, /* Total number of limits and lines+limits. */ GAL_SPECLINES_LIMIT_NUMBERWITHLINES, GAL_SPECLINES_LIMIT_NUMBER = (GAL_SPECLINES_LIMIT_NUMBERWITHLINES - GAL_SPECLINES_LIMIT_LYMAN) }; /* Spectral lines wavelengths in Angstroms (SORT BY WAVELENGTH). Source: http://astronomy.nmsu.edu/drewski/tableofemissionlines.html The following extra lines have been added: - Ly-gamma (https://en.wikipedia.org/wiki/Lyman_series) */ #define GAL_SPECLINES_ANGSTROM_Ne_VIII_770 770.409 #define GAL_SPECLINES_ANGSTROM_Ne_VIII_780 780.324 #define GAL_SPECLINES_ANGSTROM_Ly_epsilon 937.814 #define GAL_SPECLINES_ANGSTROM_Ly_delta 949.742 #define GAL_SPECLINES_ANGSTROM_Ly_gamma 972.536 #define GAL_SPECLINES_ANGSTROM_C_III_977 977.030 #define GAL_SPECLINES_ANGSTROM_N_III_989 989.790 #define GAL_SPECLINES_ANGSTROM_N_III_991_51 991.514 #define GAL_SPECLINES_ANGSTROM_N_III_991_57 991.579 #define GAL_SPECLINES_ANGSTROM_Ly_beta 1025.722 #define GAL_SPECLINES_ANGSTROM_O_VI_1031 1031.912 #define GAL_SPECLINES_ANGSTROM_O_VI_1037 1037.613 #define GAL_SPECLINES_ANGSTROM_Ar_I_1066 1066.660 #define GAL_SPECLINES_ANGSTROM_Ly_alpha 1215.670 #define GAL_SPECLINES_ANGSTROM_N_V_1238 1238.821 #define GAL_SPECLINES_ANGSTROM_N_V_1242 1242.804 #define GAL_SPECLINES_ANGSTROM_Si_II_1260 1260.422 #define GAL_SPECLINES_ANGSTROM_Si_II_1264 1264.730 #define GAL_SPECLINES_ANGSTROM_O_I_1302 1302.168 #define GAL_SPECLINES_ANGSTROM_C_II_1334 1334.532 #define GAL_SPECLINES_ANGSTROM_C_II_1335 1335.708 #define GAL_SPECLINES_ANGSTROM_Si_IV_1393 1393.755 #define GAL_SPECLINES_ANGSTROM_O_IV_1397 1397.232 #define GAL_SPECLINES_ANGSTROM_O_IV_1399 1399.780 #define GAL_SPECLINES_ANGSTROM_Si_IV_1402 1402.770 #define GAL_SPECLINES_ANGSTROM_N_IV_1486 1486.496 #define GAL_SPECLINES_ANGSTROM_C_IV_1548 1548.187 #define GAL_SPECLINES_ANGSTROM_C_IV_1550 1550.772 #define GAL_SPECLINES_ANGSTROM_He_II_1640 1640.420 #define GAL_SPECLINES_ANGSTROM_O_III_1660 1660.809 #define GAL_SPECLINES_ANGSTROM_O_III_1666 1666.150 #define GAL_SPECLINES_ANGSTROM_N_III_1746 1746.823 #define GAL_SPECLINES_ANGSTROM_N_III_1748 1748.656 #define GAL_SPECLINES_ANGSTROM_Al_III_1854 1854.716 #define GAL_SPECLINES_ANGSTROM_Al_III_1862 1862.790 #define GAL_SPECLINES_ANGSTROM_Si_III 1892.030 #define GAL_SPECLINES_ANGSTROM_C_III_1908 1908.734 #define GAL_SPECLINES_ANGSTROM_N_II_2142 2142.780 #define GAL_SPECLINES_ANGSTROM_O_III_2320 2320.951 #define GAL_SPECLINES_ANGSTROM_C_II_2323 2323.500 #define GAL_SPECLINES_ANGSTROM_C_II_2324 2324.690 #define GAL_SPECLINES_ANGSTROM_Fe_XI_2648 2648.710 #define GAL_SPECLINES_ANGSTROM_He_II_2733 2733.289 #define GAL_SPECLINES_ANGSTROM_Mg_V_2782 2782.700 #define GAL_SPECLINES_ANGSTROM_Mg_II_2795 2795.528 #define GAL_SPECLINES_ANGSTROM_Mg_II_2802 2802.705 #define GAL_SPECLINES_ANGSTROM_Fe_IV_2829 2829.360 #define GAL_SPECLINES_ANGSTROM_Fe_IV_2835 2835.740 #define GAL_SPECLINES_ANGSTROM_Ar_IV_2853 2853.670 #define GAL_SPECLINES_ANGSTROM_Ar_IV_2868 2868.210 #define GAL_SPECLINES_ANGSTROM_Mg_V_2928 2928.000 #define GAL_SPECLINES_ANGSTROM_He_I_2945 2945.106 #define GAL_SPECLINES_ANGSTROM_O_III_3132 3132.794 #define GAL_SPECLINES_ANGSTROM_He_I_3187 3187.745 #define GAL_SPECLINES_ANGSTROM_He_II_3203 3203.100 #define GAL_SPECLINES_ANGSTROM_O_III_3312 3312.329 #define GAL_SPECLINES_ANGSTROM_Ne_V_3345 3345.821 #define GAL_SPECLINES_ANGSTROM_Ne_V_3425 3425.881 #define GAL_SPECLINES_ANGSTROM_O_III_3444 3444.052 #define GAL_SPECLINES_ANGSTROM_N_I_3466_4 3466.497 #define GAL_SPECLINES_ANGSTROM_N_I_3466_5 3466.543 #define GAL_SPECLINES_ANGSTROM_He_I_3487 3487.727 #define GAL_SPECLINES_ANGSTROM_Fe_VII_3586 3586.320 #define GAL_SPECLINES_ANGSTROM_Fe_VI_3662 3662.500 #define GAL_SPECLINES_ANGSTROM_H_19 3686.831 #define GAL_SPECLINES_ANGSTROM_H_18 3691.551 #define GAL_SPECLINES_ANGSTROM_H_17 3697.157 #define GAL_SPECLINES_ANGSTROM_H_16 3703.859 #define GAL_SPECLINES_ANGSTROM_H_15 3711.977 #define GAL_SPECLINES_ANGSTROM_H_14 3721.945 #define GAL_SPECLINES_ANGSTROM_O_II_3726 3726.032 #define GAL_SPECLINES_ANGSTROM_O_II_3728 3728.815 #define GAL_SPECLINES_ANGSTROM_H_13 3734.369 #define GAL_SPECLINES_ANGSTROM_H_12 3750.158 #define GAL_SPECLINES_ANGSTROM_Fe_VII_3758 3758.920 #define GAL_SPECLINES_ANGSTROM_H_11 3770.637 #define GAL_SPECLINES_ANGSTROM_H_10 3797.904 #define GAL_SPECLINES_ANGSTROM_H_9 3835.391 #define GAL_SPECLINES_ANGSTROM_Fe_V_3839 3839.270 #define GAL_SPECLINES_ANGSTROM_Ne_III_3868 3868.760 #define GAL_SPECLINES_ANGSTROM_He_I_3888 3888.647 #define GAL_SPECLINES_ANGSTROM_H_8 3889.064 #define GAL_SPECLINES_ANGSTROM_Fe_V_3891 3891.280 #define GAL_SPECLINES_ANGSTROM_Fe_V_3911 3911.330 #define GAL_SPECLINES_ANGSTROM_Ne_III_3967 3967.470 #define GAL_SPECLINES_ANGSTROM_H_epsilon 3970.079 #define GAL_SPECLINES_ANGSTROM_He_I_4026 4026.190 #define GAL_SPECLINES_ANGSTROM_S_II_4068 4068.600 #define GAL_SPECLINES_ANGSTROM_Fe_V_4071 4071.240 #define GAL_SPECLINES_ANGSTROM_S_II_4076 4076.349 #define GAL_SPECLINES_ANGSTROM_H_delta 4101.742 #define GAL_SPECLINES_ANGSTROM_He_I_4143 4143.761 #define GAL_SPECLINES_ANGSTROM_Fe_II_4178 4178.862 #define GAL_SPECLINES_ANGSTROM_Fe_V_4180 4180.600 #define GAL_SPECLINES_ANGSTROM_Fe_II_4233 4233.172 #define GAL_SPECLINES_ANGSTROM_Fe_V_4227 4227.190 #define GAL_SPECLINES_ANGSTROM_Fe_II_4287 4287.394 #define GAL_SPECLINES_ANGSTROM_Fe_II_4304 4303.176 #define GAL_SPECLINES_ANGSTROM_O_II_4317 4317.139 #define GAL_SPECLINES_ANGSTROM_H_gamma 4340.471 #define GAL_SPECLINES_ANGSTROM_O_III_4363 4363.210 #define GAL_SPECLINES_ANGSTROM_Ar_XIV 4412.300 #define GAL_SPECLINES_ANGSTROM_O_II_4414 4414.899 #define GAL_SPECLINES_ANGSTROM_Fe_II_4416 4416.830 #define GAL_SPECLINES_ANGSTROM_Fe_II_4452 4452.098 #define GAL_SPECLINES_ANGSTROM_He_I_4471 4471.479 #define GAL_SPECLINES_ANGSTROM_Fe_II_4489 4489.183 #define GAL_SPECLINES_ANGSTROM_Fe_II_4491 4491.405 #define GAL_SPECLINES_ANGSTROM_N_III_4510 4510.910 #define GAL_SPECLINES_ANGSTROM_Fe_II_4522 4522.634 #define GAL_SPECLINES_ANGSTROM_Fe_II_4555 4555.893 #define GAL_SPECLINES_ANGSTROM_Fe_II_4582 4582.835 #define GAL_SPECLINES_ANGSTROM_Fe_II_4583 4583.837 #define GAL_SPECLINES_ANGSTROM_Fe_II_4629 4629.339 #define GAL_SPECLINES_ANGSTROM_N_III_4634 4634.140 #define GAL_SPECLINES_ANGSTROM_N_III_4640 4640.640 #define GAL_SPECLINES_ANGSTROM_N_III_4641 4641.850 #define GAL_SPECLINES_ANGSTROM_C_III_4647 4647.420 #define GAL_SPECLINES_ANGSTROM_C_III_4650 4650.250 #define GAL_SPECLINES_ANGSTROM_C_III_5651 4651.470 #define GAL_SPECLINES_ANGSTROM_Fe_III_4658 4658.050 #define GAL_SPECLINES_ANGSTROM_He_II_4685 4685.710 #define GAL_SPECLINES_ANGSTROM_Ar_IV_4711 4711.260 #define GAL_SPECLINES_ANGSTROM_Ar_IV_4740 4740.120 #define GAL_SPECLINES_ANGSTROM_H_beta 4861.333 #define GAL_SPECLINES_ANGSTROM_Fe_VII_4893 4893.370 #define GAL_SPECLINES_ANGSTROM_Fe_IV_4903 4903.070 #define GAL_SPECLINES_ANGSTROM_Fe_II_4923 4923.927 #define GAL_SPECLINES_ANGSTROM_O_III_4958 4958.911 #define GAL_SPECLINES_ANGSTROM_O_III_5006 5006.843 #define GAL_SPECLINES_ANGSTROM_Fe_II_5018 5018.440 #define GAL_SPECLINES_ANGSTROM_Fe_III_5084 5084.770 #define GAL_SPECLINES_ANGSTROM_Fe_VI_5145 5145.750 #define GAL_SPECLINES_ANGSTROM_Fe_VII_5158 5158.890 #define GAL_SPECLINES_ANGSTROM_Fe_II_5169 5169.033 #define GAL_SPECLINES_ANGSTROM_Fe_VI_5176 5176.040 #define GAL_SPECLINES_ANGSTROM_Fe_II_5197 5197.577 #define GAL_SPECLINES_ANGSTROM_N_I_5200 5200.257 #define GAL_SPECLINES_ANGSTROM_Fe_II_5234 5234.625 #define GAL_SPECLINES_ANGSTROM_Fe_IV_5236 5236.060 #define GAL_SPECLINES_ANGSTROM_Fe_III_5270 5270.400 #define GAL_SPECLINES_ANGSTROM_Fe_II_5276 5276.002 #define GAL_SPECLINES_ANGSTROM_Fe_VII_5276 5276.380 #define GAL_SPECLINES_ANGSTROM_Fe_XIV 5302.860 #define GAL_SPECLINES_ANGSTROM_Ca_V 5309.110 #define GAL_SPECLINES_ANGSTROM_Fe_II_5316_6 5316.615 #define GAL_SPECLINES_ANGSTROM_Fe_II_5316_7 5316.784 #define GAL_SPECLINES_ANGSTROM_Fe_VI_5335 5335.180 #define GAL_SPECLINES_ANGSTROM_Fe_VI_5424 5424.220 #define GAL_SPECLINES_ANGSTROM_Cl_III_5517 5517.709 #define GAL_SPECLINES_ANGSTROM_Cl_III_5537 5537.873 #define GAL_SPECLINES_ANGSTROM_Fe_VI_5637 5637.600 #define GAL_SPECLINES_ANGSTROM_Fe_VI_5677 5677.000 #define GAL_SPECLINES_ANGSTROM_C_III_5697 5695.920 #define GAL_SPECLINES_ANGSTROM_Fe_VII_5720 5720.700 #define GAL_SPECLINES_ANGSTROM_N_II_5754 5754.590 #define GAL_SPECLINES_ANGSTROM_C_IV_5801 5801.330 #define GAL_SPECLINES_ANGSTROM_C_IV_5811 5811.980 #define GAL_SPECLINES_ANGSTROM_He_I_5875 5875.624 #define GAL_SPECLINES_ANGSTROM_O_I_6046 6046.440 #define GAL_SPECLINES_ANGSTROM_Fe_VII_6087 6087.000 #define GAL_SPECLINES_ANGSTROM_O_I_6300 6300.304 #define GAL_SPECLINES_ANGSTROM_S_III_6312 6312.060 #define GAL_SPECLINES_ANGSTROM_Si_II_6347 6347.100 #define GAL_SPECLINES_ANGSTROM_O_I_6363 6363.776 #define GAL_SPECLINES_ANGSTROM_Fe_II_6369 6369.462 #define GAL_SPECLINES_ANGSTROM_Fe_X 6374.510 #define GAL_SPECLINES_ANGSTROM_Fe_II_6516 6516.081 #define GAL_SPECLINES_ANGSTROM_N_II_6548 6548.050 #define GAL_SPECLINES_ANGSTROM_H_alpha 6562.819 #define GAL_SPECLINES_ANGSTROM_N_II_6583 6583.460 #define GAL_SPECLINES_ANGSTROM_S_II_6716 6716.440 #define GAL_SPECLINES_ANGSTROM_S_II_6730 6730.810 #define GAL_SPECLINES_ANGSTROM_O_I_7002 7002.230 #define GAL_SPECLINES_ANGSTROM_Ar_V 7005.870 #define GAL_SPECLINES_ANGSTROM_He_I_7065 7065.196 #define GAL_SPECLINES_ANGSTROM_Ar_III_7135 7135.790 #define GAL_SPECLINES_ANGSTROM_Fe_II_7155 7155.157 #define GAL_SPECLINES_ANGSTROM_Ar_IV_7170 7170.620 #define GAL_SPECLINES_ANGSTROM_Fe_II_7172 7172.000 #define GAL_SPECLINES_ANGSTROM_C_II_7236 7236.420 #define GAL_SPECLINES_ANGSTROM_Ar_IV_7237 7237.260 #define GAL_SPECLINES_ANGSTROM_O_I_7254 7254.448 #define GAL_SPECLINES_ANGSTROM_Ar_IV_7262 7262.760 #define GAL_SPECLINES_ANGSTROM_He_I_7281 7281.349 #define GAL_SPECLINES_ANGSTROM_O_II_7319 7319.990 #define GAL_SPECLINES_ANGSTROM_O_II_7330 7330.730 #define GAL_SPECLINES_ANGSTROM_Ni_II_7377 7377.830 #define GAL_SPECLINES_ANGSTROM_Ni_II_7411 7411.160 #define GAL_SPECLINES_ANGSTROM_Fe_II_7452 7452.538 #define GAL_SPECLINES_ANGSTROM_N_I_7468 7468.310 #define GAL_SPECLINES_ANGSTROM_S_XII 7611.000 #define GAL_SPECLINES_ANGSTROM_Ar_III_7751 7751.060 #define GAL_SPECLINES_ANGSTROM_He_I_7816 7816.136 #define GAL_SPECLINES_ANGSTROM_Ar_I_7868 7868.194 #define GAL_SPECLINES_ANGSTROM_Ni_III 7889.900 #define GAL_SPECLINES_ANGSTROM_Fe_XI_7891 7891.800 #define GAL_SPECLINES_ANGSTROM_He_II_8236 8236.790 #define GAL_SPECLINES_ANGSTROM_Pa_20 8392.397 #define GAL_SPECLINES_ANGSTROM_Pa_19 8413.318 #define GAL_SPECLINES_ANGSTROM_Pa_18 8437.956 #define GAL_SPECLINES_ANGSTROM_O_I_8446 8446.359 #define GAL_SPECLINES_ANGSTROM_Pa_17 8467.254 #define GAL_SPECLINES_ANGSTROM_Ca_II_8498 8498.020 #define GAL_SPECLINES_ANGSTROM_Pa_16 8502.483 #define GAL_SPECLINES_ANGSTROM_Ca_II_8542 8542.090 #define GAL_SPECLINES_ANGSTROM_Pa_15 8545.383 #define GAL_SPECLINES_ANGSTROM_Cl_II 8578.700 #define GAL_SPECLINES_ANGSTROM_Pa_14 8598.392 #define GAL_SPECLINES_ANGSTROM_Fe_II_8616 8616.950 #define GAL_SPECLINES_ANGSTROM_Ca_II_8662 8662.140 #define GAL_SPECLINES_ANGSTROM_Pa_13 8665.019 #define GAL_SPECLINES_ANGSTROM_N_I_8680 8680.282 #define GAL_SPECLINES_ANGSTROM_N_I_8703 8703.247 #define GAL_SPECLINES_ANGSTROM_N_I_8711 8711.703 #define GAL_SPECLINES_ANGSTROM_Pa_12 8750.472 #define GAL_SPECLINES_ANGSTROM_Pa_11 8862.782 #define GAL_SPECLINES_ANGSTROM_Fe_II_8891 8891.910 #define GAL_SPECLINES_ANGSTROM_Pa_10 9014.909 #define GAL_SPECLINES_ANGSTROM_S_III_9068 9068.600 #define GAL_SPECLINES_ANGSTROM_Pa_9 9229.014 #define GAL_SPECLINES_ANGSTROM_S_III_9531 9531.100 #define GAL_SPECLINES_ANGSTROM_Pa_epsilon 9545.969 #define GAL_SPECLINES_ANGSTROM_C_I_9824 9824.130 #define GAL_SPECLINES_ANGSTROM_C_I_9850 9850.260 #define GAL_SPECLINES_ANGSTROM_S_VIII 9913.000 #define GAL_SPECLINES_ANGSTROM_He_I_10027 10027.730 #define GAL_SPECLINES_ANGSTROM_He_I_10031 10031.160 #define GAL_SPECLINES_ANGSTROM_Pa_delta 10049.368 #define GAL_SPECLINES_ANGSTROM_S_II_10286 10286.730 #define GAL_SPECLINES_ANGSTROM_S_II_10320 10320.490 #define GAL_SPECLINES_ANGSTROM_S_II_10336 10336.410 #define GAL_SPECLINES_ANGSTROM_Fe_XIII 10746.800 #define GAL_SPECLINES_ANGSTROM_He_I_10830 10830.340 #define GAL_SPECLINES_ANGSTROM_Pa_gamma 10938.086 /* Common limits of line series; from https://en.wikipedia.org/wiki/Hydrogen_spectral_series */ #define GAL_SPECLINES_ANGSTROM_LIMIT_LYMAN 912 #define GAL_SPECLINES_ANGSTROM_LIMIT_BALMER 3646 #define GAL_SPECLINES_ANGSTROM_LIMIT_PASCHEN 8204 /* Spectral line name strings (SORT BY WAVELENGTH). */ #define GAL_SPECLINES_NAME_Ne_VIII_770 "Ne-VIII-770" #define GAL_SPECLINES_NAME_Ne_VIII_780 "Ne-VIII-780" #define GAL_SPECLINES_NAME_Ly_epsilon "Ly-epsilon" #define GAL_SPECLINES_NAME_Ly_delta "Ly-delta" #define GAL_SPECLINES_NAME_Ly_gamma "Ly-gamma" #define GAL_SPECLINES_NAME_C_III_977 "C-III-977" #define GAL_SPECLINES_NAME_N_III_989 "N-III-989" #define GAL_SPECLINES_NAME_N_III_991_51 "N-III-991.51" #define GAL_SPECLINES_NAME_N_III_991_57 "N-III-991.57" #define GAL_SPECLINES_NAME_Ly_beta "Ly-beta" #define GAL_SPECLINES_NAME_O_VI_1031 "O-VI-1031" #define GAL_SPECLINES_NAME_O_VI_1037 "O-VI-1037" #define GAL_SPECLINES_NAME_Ar_I_1066 "Ar-I-1066" #define GAL_SPECLINES_NAME_Ly_alpha "Ly-alpha" #define GAL_SPECLINES_NAME_N_V_1238 "N-V-1238" #define GAL_SPECLINES_NAME_N_V_1242 "N-V-1242" #define GAL_SPECLINES_NAME_Si_II_1260 "Si-II-1260" #define GAL_SPECLINES_NAME_Si_II_1264 "Si_II-1302" #define GAL_SPECLINES_NAME_O_I_1302 "O-I-1302" #define GAL_SPECLINES_NAME_C_II_1334 "C-II-1334" #define GAL_SPECLINES_NAME_C_II_1335 "C-II-1335" #define GAL_SPECLINES_NAME_Si_IV_1393 "Si-IV-1393" #define GAL_SPECLINES_NAME_O_IV_1397 "O-IV-1397" #define GAL_SPECLINES_NAME_O_IV_1399 "O-IV-1399" #define GAL_SPECLINES_NAME_Si_IV_1402 "Si-IV-1402" #define GAL_SPECLINES_NAME_N_IV_1486 "N-IV-1486" #define GAL_SPECLINES_NAME_C_IV_1548 "C-IV-1548" #define GAL_SPECLINES_NAME_C_IV_1550 "C-IV-1550" #define GAL_SPECLINES_NAME_He_II_1640 "He-II-1640" #define GAL_SPECLINES_NAME_O_III_1660 "O-III-1660" #define GAL_SPECLINES_NAME_O_III_1666 "O-III-1666" #define GAL_SPECLINES_NAME_N_III_1746 "N-III-1746" #define GAL_SPECLINES_NAME_N_III_1748 "N-III-1748" #define GAL_SPECLINES_NAME_Al_III_1854 "Al-III-1854" #define GAL_SPECLINES_NAME_Al_III_1862 "Al-III-1862" #define GAL_SPECLINES_NAME_Si_III "Si-III" #define GAL_SPECLINES_NAME_C_III_1908 "C-III-1908" #define GAL_SPECLINES_NAME_N_II_2142 "N-II-2142" #define GAL_SPECLINES_NAME_O_III_2320 "O-III-2320" #define GAL_SPECLINES_NAME_C_II_2323 "C-II-2323" #define GAL_SPECLINES_NAME_C_II_2324 "C-II-2324" #define GAL_SPECLINES_NAME_Fe_XI_2648 "Fe-XI-2648" #define GAL_SPECLINES_NAME_He_II_2733 "He-II-2733" #define GAL_SPECLINES_NAME_Mg_V_2782 "Mg-V-2782" #define GAL_SPECLINES_NAME_Mg_II_2795 "Mg-II-2795" #define GAL_SPECLINES_NAME_Mg_II_2802 "Mg-II-2802" #define GAL_SPECLINES_NAME_Fe_IV_2829 "Fe-IV-2829" #define GAL_SPECLINES_NAME_Fe_IV_2835 "Fe-IV-2835" #define GAL_SPECLINES_NAME_Ar_IV_2853 "Ar-IV-2853" #define GAL_SPECLINES_NAME_Ar_IV_2868 "Ar-IV-2868" #define GAL_SPECLINES_NAME_Mg_V_2928 "Mg-V-2928" #define GAL_SPECLINES_NAME_He_I_2945 "He-I-2945" #define GAL_SPECLINES_NAME_O_III_3132 "O-III-3132" #define GAL_SPECLINES_NAME_He_I_3187 "He-I-3187" #define GAL_SPECLINES_NAME_He_II_3203 "He-II-3203" #define GAL_SPECLINES_NAME_O_III_3312 "O-III-3312" #define GAL_SPECLINES_NAME_Ne_V_3345 "Ne-V-3345" #define GAL_SPECLINES_NAME_Ne_V_3425 "Ne-V-3425" #define GAL_SPECLINES_NAME_O_III_3444 "O-III-3444" #define GAL_SPECLINES_NAME_N_I_3466_4 "N-I-3466-4" #define GAL_SPECLINES_NAME_N_I_3466_5 "N-I-3466-5" #define GAL_SPECLINES_NAME_He_I_3487 "He-I-3487" #define GAL_SPECLINES_NAME_Fe_VII_3586 "Fe-VII-3586" #define GAL_SPECLINES_NAME_Fe_VI_3662 "Fe-VI-3662" #define GAL_SPECLINES_NAME_H_19 "H-19" #define GAL_SPECLINES_NAME_H_18 "H-18" #define GAL_SPECLINES_NAME_H_17 "H-17" #define GAL_SPECLINES_NAME_H_16 "H-16" #define GAL_SPECLINES_NAME_H_15 "H-15" #define GAL_SPECLINES_NAME_H_14 "H-14" #define GAL_SPECLINES_NAME_O_II_3726 "O-II-3726" #define GAL_SPECLINES_NAME_O_II_3728 "O-II-3728" #define GAL_SPECLINES_NAME_H_13 "H-13" #define GAL_SPECLINES_NAME_H_12 "H-12" #define GAL_SPECLINES_NAME_Fe_VII_3758 "Fe-VII-3758" #define GAL_SPECLINES_NAME_H_11 "H-11" #define GAL_SPECLINES_NAME_H_10 "H-10" #define GAL_SPECLINES_NAME_H_9 "H-9" #define GAL_SPECLINES_NAME_Fe_V_3839 "Fe-V-3839" #define GAL_SPECLINES_NAME_Ne_III_3868 "Ne-III-3868" #define GAL_SPECLINES_NAME_He_I_3888 "He-I-3888" #define GAL_SPECLINES_NAME_H_8 "H-8" #define GAL_SPECLINES_NAME_Fe_V_3891 "Fe-V-3891" #define GAL_SPECLINES_NAME_Fe_V_3911 "Fe-V-3911" #define GAL_SPECLINES_NAME_Ne_III_3967 "Ne-III-3967" #define GAL_SPECLINES_NAME_H_epsilon "H-epsilon" #define GAL_SPECLINES_NAME_He_I_4026 "He-I-4026" #define GAL_SPECLINES_NAME_S_II_4068 "S-II-4068" #define GAL_SPECLINES_NAME_Fe_V_4071 "Fe-V-4071" #define GAL_SPECLINES_NAME_S_II_4076 "S-II-4076" #define GAL_SPECLINES_NAME_H_delta "H-delta" #define GAL_SPECLINES_NAME_He_I_4143 "He-I-4143" #define GAL_SPECLINES_NAME_Fe_II_4178 "Fe-II-4178" #define GAL_SPECLINES_NAME_Fe_V_4180 "Fe-V-4180" #define GAL_SPECLINES_NAME_Fe_II_4233 "Fe-II-4233" #define GAL_SPECLINES_NAME_Fe_V_4227 "Fe-V-4227" #define GAL_SPECLINES_NAME_Fe_II_4287 "Fe-II-4287" #define GAL_SPECLINES_NAME_Fe_II_4304 "Fe-II-4304" #define GAL_SPECLINES_NAME_O_II_4317 "O-II-4317" #define GAL_SPECLINES_NAME_H_gamma "H-gamma" #define GAL_SPECLINES_NAME_O_III_4363 "O-III-4363" #define GAL_SPECLINES_NAME_Ar_XIV "Ar-XIV" #define GAL_SPECLINES_NAME_O_II_4414 "O-II-4414" #define GAL_SPECLINES_NAME_Fe_II_4416 "Fe-II-4416" #define GAL_SPECLINES_NAME_Fe_II_4452 "Fe-II-4452" #define GAL_SPECLINES_NAME_He_I_4471 "He-I-4471" #define GAL_SPECLINES_NAME_Fe_II_4489 "Fe-II-4489" #define GAL_SPECLINES_NAME_Fe_II_4491 "Fe-II-4491" #define GAL_SPECLINES_NAME_N_III_4510 "N-III-4510" #define GAL_SPECLINES_NAME_Fe_II_4522 "Fe-II-4522" #define GAL_SPECLINES_NAME_Fe_II_4555 "Fe-II-4555" #define GAL_SPECLINES_NAME_Fe_II_4582 "Fe-II-4582" #define GAL_SPECLINES_NAME_Fe_II_4583 "Fe-II-4583" #define GAL_SPECLINES_NAME_Fe_II_4629 "Fe-II-4629" #define GAL_SPECLINES_NAME_N_III_4634 "N-III-4634" #define GAL_SPECLINES_NAME_N_III_4640 "N-III-4640" #define GAL_SPECLINES_NAME_N_III_4641 "N-III-4641" #define GAL_SPECLINES_NAME_C_III_4647 "C-III-4647" #define GAL_SPECLINES_NAME_C_III_4650 "C-III-4650" #define GAL_SPECLINES_NAME_C_III_5651 "C-III-5651" #define GAL_SPECLINES_NAME_Fe_III_4658 "Fe-III-4658" #define GAL_SPECLINES_NAME_He_II_4685 "He-II-4685" #define GAL_SPECLINES_NAME_Ar_IV_4711 "Ar-IV-4711" #define GAL_SPECLINES_NAME_Ar_IV_4740 "Ar-IV-4740" #define GAL_SPECLINES_NAME_H_beta "H-beta" #define GAL_SPECLINES_NAME_Fe_VII_4893 "Fe-VII-4893" #define GAL_SPECLINES_NAME_Fe_IV_4903 "Fe-IV-4903" #define GAL_SPECLINES_NAME_Fe_II_4923 "Fe-II-4923" #define GAL_SPECLINES_NAME_O_III_4958 "O-III-4958" #define GAL_SPECLINES_NAME_O_III_5006 "O-III-5006" #define GAL_SPECLINES_NAME_Fe_II_5018 "Fe-II-5018" #define GAL_SPECLINES_NAME_Fe_III_5084 "Fe-III-5084" #define GAL_SPECLINES_NAME_Fe_VI_5145 "Fe-VI-5145" #define GAL_SPECLINES_NAME_Fe_VII_5158 "Fe-VII-5158" #define GAL_SPECLINES_NAME_Fe_II_5169 "Fe-II-5169" #define GAL_SPECLINES_NAME_Fe_VI_5176 "Fe-VI-5176" #define GAL_SPECLINES_NAME_Fe_II_5197 "Fe-II-5197" #define GAL_SPECLINES_NAME_N_I_5200 "N-I-5200" #define GAL_SPECLINES_NAME_Fe_II_5234 "Fe-II-5234" #define GAL_SPECLINES_NAME_Fe_IV_5236 "Fe-IV-5236" #define GAL_SPECLINES_NAME_Fe_III_5270 "Fe-III-5270" #define GAL_SPECLINES_NAME_Fe_II_5276 "Fe-II-5276" #define GAL_SPECLINES_NAME_Fe_VII_5276 "Fe-VII-5276" #define GAL_SPECLINES_NAME_Fe_XIV "Fe-XIV" #define GAL_SPECLINES_NAME_Ca_V "Ca-V" #define GAL_SPECLINES_NAME_Fe_II_5316_6 "Fe-II-5316-6" #define GAL_SPECLINES_NAME_Fe_II_5316_7 "Fe-II-5316-7" #define GAL_SPECLINES_NAME_Fe_VI_5335 "Fe-VI-5335" #define GAL_SPECLINES_NAME_Fe_VI_5424 "Fe-VI-5424" #define GAL_SPECLINES_NAME_Cl_III_5517 "Cl-III-5517" #define GAL_SPECLINES_NAME_Cl_III_5537 "Cl-III-5537" #define GAL_SPECLINES_NAME_Fe_VI_5637 "Fe-VI-5637" #define GAL_SPECLINES_NAME_Fe_VI_5677 "Fe-VI-5677" #define GAL_SPECLINES_NAME_C_III_5697 "C-III-5697" #define GAL_SPECLINES_NAME_Fe_VII_5720 "Fe-VII-5720" #define GAL_SPECLINES_NAME_N_II_5754 "N-II-5754" #define GAL_SPECLINES_NAME_C_IV_5801 "C-IV-5801" #define GAL_SPECLINES_NAME_C_IV_5811 "C-IV-5811" #define GAL_SPECLINES_NAME_He_I_5875 "He-I-5875" #define GAL_SPECLINES_NAME_O_I_6046 "O-I-6046" #define GAL_SPECLINES_NAME_Fe_VII_6087 "Fe-VII-6087" #define GAL_SPECLINES_NAME_O_I_6300 "O-I-6300" #define GAL_SPECLINES_NAME_S_III_6312 "S-III-6312" #define GAL_SPECLINES_NAME_Si_II_6347 "Si-II-6347" #define GAL_SPECLINES_NAME_O_I_6363 "O-I-6363" #define GAL_SPECLINES_NAME_Fe_II_6369 "Fe-II-6369" #define GAL_SPECLINES_NAME_Fe_X "Fe-X" #define GAL_SPECLINES_NAME_Fe_II_6516 "Fe-II-6516" #define GAL_SPECLINES_NAME_N_II_6548 "N-II-6548" #define GAL_SPECLINES_NAME_H_alpha "H-alpha" #define GAL_SPECLINES_NAME_N_II_6583 "N-II-6583" #define GAL_SPECLINES_NAME_S_II_6716 "S-II-6716" #define GAL_SPECLINES_NAME_S_II_6730 "S-II-6730" #define GAL_SPECLINES_NAME_O_I_7002 "O-I-7002" #define GAL_SPECLINES_NAME_Ar_V "Ar-V" #define GAL_SPECLINES_NAME_He_I_7065 "He-I-7065" #define GAL_SPECLINES_NAME_Ar_III_7135 "Ar-III-7135" #define GAL_SPECLINES_NAME_Fe_II_7155 "Fe-II-7155" #define GAL_SPECLINES_NAME_Ar_IV_7170 "Ar-IV-7170" #define GAL_SPECLINES_NAME_Fe_II_7172 "Fe-II-7172" #define GAL_SPECLINES_NAME_C_II_7236 "C-II-7236" #define GAL_SPECLINES_NAME_Ar_IV_7237 "Ar-IV-7237" #define GAL_SPECLINES_NAME_O_I_7254 "O-I-7254" #define GAL_SPECLINES_NAME_Ar_IV_7262 "Ar-IV-7262" #define GAL_SPECLINES_NAME_He_I_7281 "He-I-7281" #define GAL_SPECLINES_NAME_O_II_7319 "O-II-7319" #define GAL_SPECLINES_NAME_O_II_7330 "O-II-7330" #define GAL_SPECLINES_NAME_Ni_II_7377 "Ni-II-7377" #define GAL_SPECLINES_NAME_Ni_II_7411 "Ni-II-7411" #define GAL_SPECLINES_NAME_Fe_II_7452 "Fe-II-7452" #define GAL_SPECLINES_NAME_N_I_7468 "N-I-7468" #define GAL_SPECLINES_NAME_S_XII "S-XII" #define GAL_SPECLINES_NAME_Ar_III_7751 "Ar-III-7751" #define GAL_SPECLINES_NAME_He_I_7816 "He-I-7816" #define GAL_SPECLINES_NAME_Ar_I_7868 "Ar-I-7868" #define GAL_SPECLINES_NAME_Ni_III "Ni-III" #define GAL_SPECLINES_NAME_Fe_XI_7891 "Fe-XI-7891" #define GAL_SPECLINES_NAME_He_II_8236 "He-II-8236" #define GAL_SPECLINES_NAME_Pa_20 "Pa-20" #define GAL_SPECLINES_NAME_Pa_19 "Pa-19" #define GAL_SPECLINES_NAME_Pa_18 "Pa-18" #define GAL_SPECLINES_NAME_O_I_8446 "O-I-8446" #define GAL_SPECLINES_NAME_Pa_17 "Pa-17" #define GAL_SPECLINES_NAME_Ca_II_8498 "Ca-II-8498" #define GAL_SPECLINES_NAME_Pa_16 "Pa-16" #define GAL_SPECLINES_NAME_Ca_II_8542 "Ca-II-8542" #define GAL_SPECLINES_NAME_Pa_15 "Pa-15" #define GAL_SPECLINES_NAME_Cl_II "Cl-II" #define GAL_SPECLINES_NAME_Pa_14 "Pa-14" #define GAL_SPECLINES_NAME_Fe_II_8616 "Fe-II-8616" #define GAL_SPECLINES_NAME_Ca_II_8662 "Ca-II-8662" #define GAL_SPECLINES_NAME_Pa_13 "Pa-13" #define GAL_SPECLINES_NAME_N_I_8680 "N-I-8680" #define GAL_SPECLINES_NAME_N_I_8703 "N-I-8703" #define GAL_SPECLINES_NAME_N_I_8711 "N-I-8711" #define GAL_SPECLINES_NAME_Pa_12 "Pa-12" #define GAL_SPECLINES_NAME_Pa_11 "Pa-11" #define GAL_SPECLINES_NAME_Fe_II_8891 "Fe-II-8891" #define GAL_SPECLINES_NAME_Pa_10 "Pa-10" #define GAL_SPECLINES_NAME_S_III_9068 "S-III-9068" #define GAL_SPECLINES_NAME_Pa_9 "Pa-9" #define GAL_SPECLINES_NAME_S_III_9531 "S-III-9531" #define GAL_SPECLINES_NAME_Pa_epsilon "Pa-epsilon" #define GAL_SPECLINES_NAME_C_I_9824 "C-I-9824" #define GAL_SPECLINES_NAME_C_I_9850 "C-I-9850" #define GAL_SPECLINES_NAME_S_VIII "S-VIII" #define GAL_SPECLINES_NAME_He_I_10027 "He-I-10027" #define GAL_SPECLINES_NAME_He_I_10031 "He-I-10031" #define GAL_SPECLINES_NAME_Pa_delta "Pa-delta" #define GAL_SPECLINES_NAME_S_II_10286 "S-II-10286" #define GAL_SPECLINES_NAME_S_II_10320 "S-II-10320" #define GAL_SPECLINES_NAME_S_II_10336 "S-II-10336" #define GAL_SPECLINES_NAME_Fe_XIII "Fe-XIII" #define GAL_SPECLINES_NAME_He_I_10830 "He-I-10830" #define GAL_SPECLINES_NAME_Pa_gamma "Pa-gamma" /* The limits. */ #define GAL_SPECLINES_NAME_LIMIT_LYMAN "Ly-limit" #define GAL_SPECLINES_NAME_LIMIT_BALMER "H-limit" #define GAL_SPECLINES_NAME_LIMIT_PASCHEN "Pa-limit" /*********************************************************************/ /************* Internal names and codes ***************/ /*********************************************************************/ char * gal_speclines_line_name(int linecode); int gal_speclines_line_code(char *name); double gal_speclines_line_angstrom(int linecode); /*********************************************************************/ /************* Redshifted lines ***************/ /*********************************************************************/ double gal_speclines_line_redshift(double obsline, double restline); double gal_speclines_line_redshift_code(double obsline, int linecode); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_COSMOLOGY_H__ */ ����������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/statistics.h�������������������������������������������������������������0000644�0001750�0001750�00000015131�14551337306�013743� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Statistical functions. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_STATISTICS_H__ #define __GAL_STATISTICS_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Maximum number of tests for sigma-clipping convergence. */ #define GAL_STATISTICS_CLIP_MAX_CONVERGE 50 /* Least acceptable mode symmetricity.*/ #define GAL_STATISTICS_MODE_GOOD_SYM 0.2f enum gal_statistics_bin_status { GAL_STATISTICS_BINS_INVALID, /* ==0 by C standard. */ GAL_STATISTICS_BINS_REGULAR, GAL_STATISTICS_BINS_IRREGULAR, }; enum gal_statistics_clip_outcol { GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED, /* =0 by C standard. */ GAL_STATISTICS_CLIP_OUTCOL_MEAN, GAL_STATISTICS_CLIP_OUTCOL_STD, GAL_STATISTICS_CLIP_OUTCOL_MEDIAN, GAL_STATISTICS_CLIP_OUTCOL_MAD, GAL_STATISTICS_CLIP_OUTCOL_NUMBER_CLIPS, GAL_STATISTICS_CLIP_OUT_SIZE, }; /* The optional measurements to do after sigma-clipping. */ #define GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN 0x1 #define GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD 0x2 #define GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MAD 0x4 /**************************************************************** ******** Simple statistics ******* ****************************************************************/ gal_data_t * gal_statistics_number(gal_data_t *input); gal_data_t * gal_statistics_minimum(gal_data_t *input); gal_data_t * gal_statistics_maximum(gal_data_t *input); gal_data_t * gal_statistics_sum(gal_data_t *input); gal_data_t * gal_statistics_mean(gal_data_t *input); gal_data_t * gal_statistics_std(gal_data_t *input); gal_data_t * gal_statistics_mean_std(gal_data_t *input); double gal_statistics_std_from_sums(double sum, double sump2, size_t num); gal_data_t * gal_statistics_median(gal_data_t *input, int inplace); gal_data_t * gal_statistics_mad(gal_data_t *input, int inplace); gal_data_t * gal_statistics_median_mad(gal_data_t *input, int inplace); size_t gal_statistics_quantile_index(size_t size, double quantile); gal_data_t * gal_statistics_quantile(gal_data_t *input, double quantile, int inplace); size_t gal_statistics_quantile_function_index(gal_data_t *input, gal_data_t *value, int inplace); gal_data_t * gal_statistics_quantile_function(gal_data_t *input, gal_data_t *value, int inplace); gal_data_t * gal_statistics_unique(gal_data_t *input, int inplace); int gal_statistics_has_negative(gal_data_t *data); /**************************************************************** ******** Mode ******* ****************************************************************/ gal_data_t * gal_statistics_mode(gal_data_t *input, float errorstd, int inplace); gal_data_t * gal_statistics_mode_mirror_plots(gal_data_t *input, gal_data_t *value, size_t numbins, int inplace, double *mirror_val); /**************************************************************** ******** Sort ******* ****************************************************************/ int gal_statistics_is_sorted(gal_data_t *input, int updateflags); void gal_statistics_sort_increasing(gal_data_t *input); void gal_statistics_sort_decreasing(gal_data_t *input); gal_data_t * gal_statistics_no_blank_sorted(gal_data_t *input, int inplace); /**************************************************************** ******** Histogram and Cumulative Frequency Plot ******* ****************************************************************/ gal_data_t * gal_statistics_regular_bins(gal_data_t *data, gal_data_t *range, size_t numbins, double onebinstart); gal_data_t * gal_statistics_histogram(gal_data_t *data, gal_data_t *bins, int normalize, int maxhistone); gal_data_t * gal_statistics_histogram2d(gal_data_t *input, gal_data_t *bins); gal_data_t * gal_statistics_cfp(gal_data_t *data, gal_data_t *bins, int normalize); /**************************************************************** ***************** Outliers ******************** ****************************************************************/ gal_data_t * gal_statistics_clip_sigma(gal_data_t *input, float multip, float param, uint8_t extrastats, int inplace, int quiet); gal_data_t * gal_statistics_clip_mad(gal_data_t *input, float multip, float param, uint8_t extrastats, int inplace, int quiet); gal_data_t * gal_statistics_outlier_bydistance(int pos1_neg0, gal_data_t *input, size_t window_size, float sigma, float sigclip_multip, float sigclip_param, int inplace, int quiet); gal_data_t * gal_statistics_outlier_flat_cfp(gal_data_t *input, size_t numprev, float sigclip_multip, float sigclip_param, float thresh, size_t numcontig, int inplace, int quiet, size_t *index); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_STATISTICS_H__ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/table.h������������������������������������������������������������������0000644�0001750�0001750�00000015164�14551337306�012646� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* table -- functions for table input and output. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_TABLE_H__ #define __GAL_TABLE_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/list.h> #include <gnuastro/fits.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* 'printf' default formattings. Note that the string type shouldn't have any precision and for the width. The precisions are a little higher because these are the default values. */ #define GAL_TABLE_DEF_WIDTH_STR 6 #define GAL_TABLE_DEF_WIDTH_INT 6 #define GAL_TABLE_DEF_WIDTH_LINT 10 #define GAL_TABLE_DEF_WIDTH_FLT 14 #define GAL_TABLE_DEF_WIDTH_DBL 23 #define GAL_TABLE_DEF_PRECISION_INT 0 #define GAL_TABLE_DEF_PRECISION_FLT 6 #define GAL_TABLE_DEF_PRECISION_DBL 15 /* Particular display formats for different types: Integers or floating point numbers can be printed in various display formats. The values here are stored in 'gal_data_t' when necessary to help in printing of the data.*/ enum gal_table_diplay_formats { GAL_TABLE_DISPLAY_FMT_INVALID, /* Invalid (=0 by C standard). */ GAL_TABLE_DISPLAY_FMT_STRING, /* String/Character. */ GAL_TABLE_DISPLAY_FMT_DECIMAL, /* Integers: signed decimal. */ GAL_TABLE_DISPLAY_FMT_UDECIMAL, /* Integers: unsigned decimal. */ GAL_TABLE_DISPLAY_FMT_OCTAL, /* Integers: octal. */ GAL_TABLE_DISPLAY_FMT_HEX, /* Integers: hexadecimal. */ GAL_TABLE_DISPLAY_FMT_FIXED, /* Floats: fixed-point notation. */ GAL_TABLE_DISPLAY_FMT_EXP, /* Floats: as exponential. */ GAL_TABLE_DISPLAY_FMT_GENERAL, /* Floats: general (%g in C). */ }; /* Formats of table storage for input or output, as strings and integers. */ enum gal_table_types { GAL_TABLE_FORMAT_INVALID, /* Invalid (=0 by C standard). */ GAL_TABLE_FORMAT_TXT, /* Plain text table. */ GAL_TABLE_FORMAT_AFITS, /* FITS ASCII table. */ GAL_TABLE_FORMAT_BFITS, /* FITS binary table. */ }; /* When the desired column is not a number, should the string match or regular expression search be in the name, units or comments of the columns? */ enum gal_table_where_to_search { GAL_TABLE_SEARCH_INVALID, /* Invalid (=0 by C standard). */ GAL_TABLE_SEARCH_NAME, /* Match/search in names. */ GAL_TABLE_SEARCH_UNIT, /* Match/search in units. */ GAL_TABLE_SEARCH_COMMENT, /* Match/search in comments. */ }; /************************************************************************/ /*************** Internal conversions ***************/ /************************************************************************/ uint8_t gal_table_displayflt_from_str(char *string); char * gal_table_displayflt_to_str(uint8_t fmt); /************************************************************************/ /*************** Information about a table ***************/ /************************************************************************/ gal_data_t * gal_table_info(char *filename, char *hdu, gal_list_str_t *lines, size_t *numcols, size_t *numrows, int *tableformat, char *hdu_option_name); void gal_table_print_info(gal_data_t *allcols, size_t numcols, size_t numrows); /************************************************************************/ /*************** Read a table ***************/ /************************************************************************/ gal_data_t * gal_table_read(char *filename, char *hdu, gal_list_str_t *lines, gal_list_str_t *cols, int searchin, int ignorecase, size_t numthreads, size_t minmapsize, int quietmmap, size_t *colmatch, char *hdu_option_name); gal_list_sizet_t * gal_table_list_of_indexs(gal_list_str_t *cols, gal_data_t *allcols, size_t numcols, int searchin, int ignorecase, char *filename, char *hdu, size_t *colmatch); /************************************************************************/ /*************** Write a table ***************/ /************************************************************************/ void gal_table_comments_add_intro(gal_list_str_t **comments, char *program_string, time_t *rawtime); void gal_table_write(gal_data_t *cols, struct gal_fits_list_key_t *keylist, gal_list_str_t *comments, int tableformat, char *filename, char *extname, uint8_t colinfoinstdout, int freekeys); void gal_table_write_log(gal_data_t *logll, char *program_string, time_t *rawtime, gal_list_str_t *comments, char *filename, int quiet); /************************************************************************/ /*************** Column operation ***************/ /************************************************************************/ gal_data_t * gal_table_col_vector_extract(gal_data_t *vector, gal_list_sizet_t *indexs); gal_data_t * gal_table_cols_to_vector(gal_data_t *list); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TABLE_H__ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/threads.h����������������������������������������������������������������0000644�0001750�0001750�00000010637�14551337306�013211� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to facilitate using threads. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_THREADS_H__ #define __GAL_THREADS_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <pthread.h> #include <gnuastro/blank.h> /* When we are within Gnuastro's building process, 'IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular 'GAL_CONFIG_HAVE_PTHREAD_BARRIER' that we need below) is kept in 'config.h'. When building a user's programs, this information is kept in 'gnuastro/config.h'. Note that all '.c' files must start with the inclusion of 'config.h' and that 'gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro).*/ #ifndef IN_GNUASTRO_BUILD #include <gnuastro/config.h> #endif /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /*****************************************************************/ /********* Implementation of pthread_barrier ***************/ /*****************************************************************/ #if GAL_CONFIG_HAVE_PTHREAD_BARRIER == 0 /* Integer number of nano-seconds that 'pthread_barrier_destroy' should wait for a check to see if all barriers have been reached. */ #define GAL_THREADS_BARRIER_DESTROY_NANOSECS 1000 typedef int pthread_barrierattr_t; typedef struct { pthread_mutex_t mutex; pthread_cond_t cond; size_t count; size_t limit; size_t condfinished; } pthread_barrier_t; int pthread_barrier_init(pthread_barrier_t *b, pthread_barrierattr_t *attr, unsigned int limit); int pthread_barrier_wait(pthread_barrier_t *b); int pthread_barrier_destroy(pthread_barrier_t *b); #endif /* GAL_CONFIG_HAVE_PTHREAD_BARRIER == 0 */ /*******************************************************************/ /************ Thread utilities **************/ /*******************************************************************/ size_t gal_threads_number(); char * gal_threads_dist_in_threads(size_t numactions, size_t numthreads, size_t minmapsize, int quietmmap, size_t **outthrds, size_t *outthrdcols); void gal_threads_attr_barrier_init(pthread_attr_t *attr, pthread_barrier_t *b, size_t limit); /*******************************************************************/ /************ Run a function on multiple threads **************/ /*******************************************************************/ struct gal_threads_params { size_t id; /* Id of this thread. */ void *params; /* Input structure for higher-level settings. */ size_t *indexs; /* Indexes of actions to be done in this thread. */ pthread_barrier_t *b; /* Pointer the barrier for all threads. */ }; void gal_threads_spin_off(void *(*worker)(void *), void *caller_params, size_t numactions, size_t numthreads, size_t minmapsize, int quietmmap); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_THREADS_H__ */ �������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/tiff.h�������������������������������������������������������������������0000644�0001750�0001750�00000003775�14551337306�012514� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* tiff -- functions to read and write TIFF files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Fathma Mehnoor <fathmamehnoor@gmail.com> Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_TIFF_H__ #define __GAL_TIFF_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/list.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Functions */ int gal_tiff_name_is_tiff(char *name); int gal_tiff_suffix_is_tiff(char *name); size_t gal_tiff_dir_string_read(char *string); gal_data_t * gal_tiff_read(char *filename, size_t dir, size_t minmapsize, int quietmmap); void gal_tiff_write(gal_data_t *in, char *filename); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TIFF_H__ */ ���gnuastro-0.22/lib/gnuastro/tile.h�������������������������������������������������������������������0000644�0001750�0001750�00000057031�14551337306�012513� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* tile -- work with tesselations over a host dataset. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_TILE_H__ #define __GAL_TILE_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> #include <gnuastro/fits.h> #include <gnuastro/dimension.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /***********************************************************************/ /************** Single tile ******************/ /***********************************************************************/ void gal_tile_start_coord(gal_data_t *tile, size_t *start_coord); void gal_tile_start_end_coord(gal_data_t *tile, size_t *start_end, int rel_block); void * gal_tile_start_end_ind_inclusive(gal_data_t *tile, gal_data_t *work, size_t *start_end_inc); /***********************************************************************/ /************** Series of tiles ******************/ /***********************************************************************/ gal_data_t * gal_tile_series_from_minmax(gal_data_t *block, size_t *minmax, size_t number); /***********************************************************************/ /************** Allocated block **********************/ /***********************************************************************/ gal_data_t * gal_tile_block(gal_data_t *tile); size_t gal_tile_block_increment(gal_data_t *block, size_t *tsize, size_t num_increment, size_t *coord); gal_data_t * gal_tile_block_write_const_value(gal_data_t *tilevalues, gal_data_t *tilesll, int withblank, int initialize); gal_data_t * gal_tile_block_check_tiles(gal_data_t *tiles); void * gal_tile_block_relative_to_other(gal_data_t *tile, gal_data_t *other); void gal_tile_block_blank_flag(gal_data_t *tile_ll, size_t numthreads); /***********************************************************************/ /************** Tile full dataset ********************/ /***********************************************************************/ struct gal_tile_two_layer_params { /* Inputs */ size_t *tilesize; /* Tile size along each dim. (C order). */ size_t *numchannels; /* Channel no. along each dim. (C order). */ float remainderfrac; /* Frac. of remainers in each dim to cut. */ uint8_t workoverch; /* Convolve over channel borders. */ uint8_t checktiles; /* Tile IDs in an img, the size of input. */ uint8_t oneelempertile; /* Only use one element for each tile. */ /* Internal parameters. */ size_t ndim; /* The number of dimensions. */ size_t tottiles; /* Total number of tiles in all dim. */ size_t tottilesinch; /* Number of tiles in one channel. */ size_t totchannels; /* Total number of channels in all dim. */ size_t *channelsize; /* Size of channels along each dimension. */ size_t *numtiles; /* Tile no. in each dim. over-all. */ size_t *numtilesinch; /* Tile no. in each dim. on one channel. */ char *tilecheckname; /* Name of file to check tiles. */ size_t *permutation; /* Tile pos. in memory --> pos. overall. */ size_t *firsttsize; /* See 'gal_tile_full_regular_first'. */ /* Actual tile and channel data structures. */ gal_data_t *tiles; /* Tiles array (also linked with 'next'). */ gal_data_t *channels; /* Channels array (linked with 'next'). */ }; size_t * gal_tile_full(gal_data_t *input, size_t *regular, float remainderfrac, gal_data_t **out, size_t multiple, size_t **firsttsize); void gal_tile_full_sanity_check(char *filename, char *hdu, gal_data_t *input, struct gal_tile_two_layer_params *tl); void gal_tile_full_two_layers(gal_data_t *input, struct gal_tile_two_layer_params *tl); void gal_tile_full_permutation(struct gal_tile_two_layer_params *tl); void gal_tile_full_values_write(gal_data_t *tilevalues, struct gal_tile_two_layer_params *tl, int withblank, char *filename, gal_fits_list_key_t *keys, int freekeys); gal_data_t * gal_tile_full_values_smooth(gal_data_t *tilevalues, struct gal_tile_two_layer_params *tl, size_t width, size_t numthreads); size_t gal_tile_full_id_from_coord(struct gal_tile_two_layer_params *tl, size_t *coord); void gal_tile_full_blank_flag(gal_data_t *tile_ll, size_t numthreads); void gal_tile_full_free_contents(struct gal_tile_two_layer_params *tl); /***********************************************************************/ /************** Function-like macros ******************/ /***********************************************************************/ /* Useful when the input and other types are already known. We want this to be self-sufficient (and be possible to call it independent of 'GAL_TILE_PARSE_OPERATE'), so some variables (basic definitions) that are already defined in 'GAL_TILE_PARSE_OPERATE' re-defined here. */ #define GAL_TILE_PO_OISET(IT, OT, IN, OTHER, PARSE_OTHER, CHECK_BLANK, OP) { \ IT *i=IN->array; \ gal_data_t *tpo_other=OTHER; /* 'OTHER' may be NULL. */ \ gal_data_t *tpo_oblock = OTHER ? gal_tile_block(OTHER) : NULL; \ \ size_t tpo_s_e_i_junk[2]={0,0}; \ IT b, *tpo_st=NULL, *tpo_f=i+IN->size; \ size_t tpo_i_increment=0, tpo_num_i_inc=1; \ size_t tpo_o_increment=0, tpo_num_o_inc=1; \ int tpo_parse_other=(OTHER && PARSE_OTHER); \ gal_data_t *tpo_iblock = gal_tile_block(IN); \ OT *tpo_ost=NULL, *o = tpo_other ? tpo_other->array : NULL; \ int tpo_hasblank = CHECK_BLANK ? gal_blank_present(IN, 0) : 0; \ size_t tpo_s_e_i[2]={0,tpo_iblock->size-1}; /* -1: this is INCLUSIVE */ \ \ \ /* A small sanity check: if 'OTHER' is given, and it is a block, */ \ /* then it must have the same size as 'IN's block. On the other */ \ /* hand, when 'OTHER' is a tile, its must have 'IN's size. */ \ if( tpo_parse_other ) \ { \ if( OTHER==tpo_oblock ) /* 'OTHER' is a block. */ \ { \ if( gal_dimension_is_different(tpo_iblock, tpo_oblock) ) \ { \ /* 'error' function, is a GNU extension, see above. */ \ fprintf(stderr, "GAL_TILE_PO_OISET: when " \ "'PARSE_OTHER' is non-zero, the allocated " \ "block size of 'IN' and 'OTHER' must be " \ "equal, but they are not: %zu and %zu " \ "elements respectively\n", tpo_iblock->size, \ tpo_oblock->size); \ exit(EXIT_FAILURE); \ } \ } \ else \ if( gal_dimension_is_different(IN, OTHER) ) \ { \ /* The 'error' function, is a GNU extension and this */ \ /* is a header, not a library which the user has to */ \ /* compile every time (on their own system). */ \ fprintf(stderr, "GAL_TILE_PO_OISET: when " \ "'PARSE_OTHER' is non-zero, the sizes of 'IN' " \ "and 'OTHER' must be equal (in all " \ "dimensions), but they are not: %zu and %zu " \ "elements respectively\n", IN->size, \ tpo_other->size); \ exit(EXIT_FAILURE); \ } \ } \ \ \ /* Write the blank value for the input type into 'b'. */ \ gal_blank_write(&b, tpo_iblock->type); \ \ \ /* If this is a tile, not a full block, then we need to set the */ \ /* starting pointers ('tpo_st' and 'tpo_ost'). The latter needs */ \ /* special attention: if it is a block, then we will use the */ \ /* the same starting element as the input tile. If 'OTHER' is a */ \ /* tile, then use its own starting position (recall that we have */ \ /* already made sure that 'IN' and 'OTHER' have the same size. */ \ if(IN!=tpo_iblock) \ { \ tpo_st = gal_tile_start_end_ind_inclusive(IN, tpo_iblock, \ tpo_s_e_i); \ if( tpo_parse_other ) \ tpo_ost = ( OTHER==tpo_oblock \ ? ( (OT *)(tpo_oblock->array) \ + ( tpo_st - (IT *)(tpo_iblock->array) ) ) \ : gal_tile_start_end_ind_inclusive(tpo_other, \ tpo_oblock, \ tpo_s_e_i_junk) ); \ } \ \ \ /* Go over contiguous patches of memory. */ \ while( tpo_s_e_i[0] + tpo_i_increment <= tpo_s_e_i[1] ) \ { \ /* If we are on a tile, reset 'i' and 'o'. */ \ if(IN!=tpo_iblock) \ { \ tpo_f = ( ( i = tpo_st + tpo_i_increment ) \ + IN->dsize[IN->ndim-1] ); \ if(tpo_parse_other) o = tpo_ost + tpo_o_increment; \ } \ \ /* Do the operation depending the nature of the blank value. */ \ /* Recall that for integer types, the blank value must be */ \ /* checked with '=='. But for floats, the blank value can be */ \ /* a NaN. Recall that a NAN will fail any comparison */ \ /* including '=='. So when the blank value is not equal to */ \ /* itself, then it is floating point and is a NAN. In that */ \ /* case, the only way to check if a data element is blank or */ \ /* not is to see if the value of each element is equal to */ \ /* itself or not. */ \ if(tpo_hasblank) \ { \ if(b==b) \ do{if(*i!=b) {OP;} if(tpo_parse_other) ++o;} while(++i<tpo_f);\ else \ do{if(*i==*i) {OP;} if(tpo_parse_other) ++o;} while(++i<tpo_f);\ } \ else \ do { {OP;} if(tpo_parse_other) ++o;} while(++i<tpo_f);\ \ /* Set the incrementation. On a fully allocated iblock (when */ \ /* 'IN==tpo_iblock'), we have already gone through the whole */ \ /* array, so we'll set the incrementation to the size of the */ \ /* whole block. This will stop the 'while' loop above. On a */ \ /* tile, we need to increment to the next contiguous patch */ \ /* of memory to continue parsing this tile. */ \ tpo_i_increment += ( IN==tpo_iblock \ ? tpo_iblock->size \ : gal_tile_block_increment(tpo_iblock, \ IN->dsize, \ tpo_num_i_inc++, \ NULL) ); \ \ /* Similarly, increment the other array if necessary. Like */ \ /* the above, when 'OTHER' is a full block, we'll just use */ \ /* the same increment as 'IN'. Otherwise, when 'OTHER' is a */ \ /* tile, calculate its increment based on its own block. */ \ if(tpo_parse_other) \ { \ if(OTHER==tpo_oblock) tpo_o_increment=tpo_i_increment; \ else \ tpo_o_increment += gal_tile_block_increment(tpo_oblock, \ tpo_other->dsize, \ tpo_num_o_inc++, \ NULL); \ } \ } \ \ /* This is done in case the caller doesn't need 'o' to avoid */ \ /* compiler warnings. */ \ o = o ? o+0 : NULL; \ } #define GAL_TILE_PO_OSET(OT, IN, OTHER, PARSE_OTHER, CHECK_BLANK, OP) { \ switch(tpo_iblock->type) \ { \ case GAL_TYPE_UINT8: \ GAL_TILE_PO_OISET(uint8_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT8: \ GAL_TILE_PO_OISET(int8_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_UINT16: \ GAL_TILE_PO_OISET(uint16_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT16: \ GAL_TILE_PO_OISET(int16_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_UINT32: \ GAL_TILE_PO_OISET(uint32_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT32: \ GAL_TILE_PO_OISET(int32_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_UINT64: \ GAL_TILE_PO_OISET(uint64_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT64: \ GAL_TILE_PO_OISET(int64_t, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_FLOAT32: \ GAL_TILE_PO_OISET(float, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_FLOAT64: \ GAL_TILE_PO_OISET(double, OT,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ default: \ { /* 'error' function might not be available for the user. */ \ fprintf(stderr, "GAL_TILE_PO_OSET: type code %d not recognized",\ tpo_iblock->type); \ exit(EXIT_FAILURE); \ } \ } \ } /* Parse over a region of memory (can be an n-dimensional tile or a fully allocated block of memory) and do a certain operation. If 'OTHER' is not NULL, this macro will also parse it at the same time . Note that OTHER must either have only one element (for the whole input) or have exactly the same number of elements as the input (one value for one pixel/element of the input). See the documentation for more on this macro and some examples. */ #define GAL_TILE_PARSE_OPERATE(IN, OTHER, PARSE_OTHER, CHECK_BLANK, OP) { \ gal_data_t *tpo_iblock = gal_tile_block(IN); \ gal_data_t *tpo_oblock = OTHER ? gal_tile_block(OTHER) : NULL; \ \ /* First set the OTHER type. */ \ if(OTHER) \ switch(tpo_oblock->type) \ { \ case GAL_TYPE_UINT8: \ GAL_TILE_PO_OSET(uint8_t, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT8: \ GAL_TILE_PO_OSET(int8_t, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_UINT16: \ GAL_TILE_PO_OSET(uint16_t,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT16: \ GAL_TILE_PO_OSET(int16_t, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_UINT32: \ GAL_TILE_PO_OSET(uint32_t,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT32: \ GAL_TILE_PO_OSET(int32_t, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_UINT64: \ GAL_TILE_PO_OSET(uint64_t,IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_INT64: \ GAL_TILE_PO_OSET(int64_t, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_FLOAT32: \ GAL_TILE_PO_OSET(float, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ case GAL_TYPE_FLOAT64: \ GAL_TILE_PO_OSET(double, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ break; \ default: \ { \ fprintf(stderr, "type code %d not recognized in " \ "'GAL_TILE_PARSE_OPERATE'", tpo_oblock->type); \ exit(EXIT_FAILURE); \ } \ } \ else \ /* When 'OTHER==NULL', its type is irrelevant, we'll just use */ \ /*'int' as a place holder. */ \ GAL_TILE_PO_OSET(int, IN,OTHER,PARSE_OTHER,CHECK_BLANK,OP); \ } __END_C_DECLS /* From C++ preparations */ #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/txt.h��������������������������������������������������������������������0000644�0001750�0001750�00000005751�14551337306�012377� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* txt -- functions to deal with plain text files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_TXT_H__ #define __GAL_TXT_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/list.h> #include <gnuastro/fits.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Macros.*/ #define GAL_TXT_DELIMITERS " ,\t\f\v" #define GAL_TXT_MAX_FMT_LENGTH 35 /* Status of a line: */ enum gal_txt_line_status_enums { GAL_TXT_LINESTAT_INVALID, GAL_TXT_LINESTAT_BLANK, GAL_TXT_LINESTAT_COMMENT, GAL_TXT_LINESTAT_DATAROW, }; /* Functions */ int gal_txt_line_stat(char *line); char * gal_txt_trim_space(char *str); int gal_txt_contains_string(char *full, char *match); gal_data_t * gal_txt_table_info(char *filename, gal_list_str_t *lines, size_t *numcols, size_t *numrows); gal_data_t * gal_txt_image_info(char *filename, gal_list_str_t *lines, size_t *numimg, size_t *dsize); gal_data_t * gal_txt_table_read(char *filename, gal_list_str_t *lines, size_t numrows, gal_data_t *colinfo, gal_list_sizet_t *indexll, size_t minmapsize, int quietmmap); gal_data_t * gal_txt_image_read(char *filename, gal_list_str_t *lines, size_t minmapsize, int quietmmap); gal_list_str_t * gal_txt_stdin_read(long timeout_microsec); gal_list_str_t * gal_txt_read_to_list(char *filename); void gal_txt_write(gal_data_t *input, struct gal_fits_list_key_t *keylist, gal_list_str_t *comment, char *filename, uint8_t colinfoinstdout, int tab0_img1, int freekeys); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TXT_H__ */ �����������������������gnuastro-0.22/lib/gnuastro/type.h�������������������������������������������������������������������0000644�0001750�0001750�00000013773�14551566633�012553� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Type -- Type information and basic operations. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_TYPE_H__ #define __GAL_TYPE_H__ #include <limits.h> #include <stdint.h> #include <gsl/gsl_complex.h> /* When we are within Gnuastro's building process, 'IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular 'GAL_CONFIG_SIZEOF_SIZE_T' that we need below) is kept in 'config.h'. When building a user's programs, this information is kept in 'gnuastro/config.h'. Note that all '.c' files in Gnuastro's source must start with the inclusion of 'config.h' and that 'gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro). */ #ifndef IN_GNUASTRO_BUILD #include <gnuastro/config.h> #endif /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /************************************************************* ************** Constants *************** *************************************************************/ /* Macros to identify the type of data. */ enum gal_types { GAL_TYPE_INVALID, /* Invalid (=0 by C standard). */ /* Integer types: the ordering here is used to find the output type of binary operations in 'gal_type_out'. Therefore, as in the automatic C type conversion, the unsigned types should be placed after (so their type is preferred over a similar-width integer that is signed). */ GAL_TYPE_INT8, /* 8-bit signed integer. */ GAL_TYPE_UINT8, /* 8-bit unsigned integer. */ GAL_TYPE_INT16, /* 16-bit signed integer. */ GAL_TYPE_UINT16, /* 16-bit unsigned integer. */ GAL_TYPE_INT32, /* 32-bit signed integer. */ GAL_TYPE_UINT32, /* 32-bit unsigned integer. */ GAL_TYPE_INT64, /* 64-bit signed integer. */ GAL_TYPE_UINT64, /* 64-bit unsigned integer. */ /* Other types. */ GAL_TYPE_BIT, /* 1 bit */ GAL_TYPE_FLOAT32, /* 32-bit single precision floating point. */ GAL_TYPE_FLOAT64, /* 64-bit double precision floating point. */ GAL_TYPE_COMPLEX32, /* Complex 32-bit floating point. */ GAL_TYPE_COMPLEX64, /* Complex 64-bit floating point. */ GAL_TYPE_STRING, /* String of characters. */ GAL_TYPE_STRLL, /* Linked list of strings. */ }; /* Define system specific types. For example 'size_t' is 4 and 8 bytes on 32 and 64 bit systems respectively. In both cases, the standard defines 'size_t' to be unsigned. A similar case exists for 'long', but it is signed. During './configure' the sizeof 'size_t' and 'long' were found and are used to define an alias for these system specific types. Note: we are not using 'else'. This is done because by any chance, if the length of these types is not what is expected (4 or 8), then the aliases are not defined and the compiler will crash. */ #if GAL_CONFIG_SIZEOF_SIZE_T == 4 #define GAL_TYPE_SIZE_T GAL_TYPE_UINT32 #elif GAL_CONFIG_SIZEOF_SIZE_T == 8 #define GAL_TYPE_SIZE_T GAL_TYPE_UINT64 #endif #if GAL_CONFIG_SIZEOF_LONG == 4 #define GAL_TYPE_LONG GAL_TYPE_INT32 #define GAL_TYPE_ULONG GAL_TYPE_UINT32 #elif GAL_CONFIG_SIZEOF_LONG == 8 #define GAL_TYPE_LONG GAL_TYPE_INT64 #define GAL_TYPE_ULONG GAL_TYPE_UINT64 #endif #if GAL_CONFIG_SIZEOF_INT == 2 #define GAL_TYPE_INT GAL_TYPE_INT16 #define GAL_TYPE_UINT GAL_TYPE_UINT16 #elif GAL_CONFIG_SIZEOF_INT == 4 #define GAL_TYPE_INT GAL_TYPE_INT32 #define GAL_TYPE_UINT GAL_TYPE_UINT32 #endif /************************************************************* ************** General info *************** *************************************************************/ size_t gal_type_sizeof(uint8_t type); char * gal_type_name(uint8_t type, int long_name); uint8_t gal_type_from_name(char *str); void gal_type_min(uint8_t type, void *in); void gal_type_max(uint8_t type, void *in); int gal_type_is_int(uint8_t type); int gal_type_is_list(uint8_t type); int gal_type_out(int first_type, int second_type); /************************************************************* ************** To/from string *************** *************************************************************/ char * gal_type_bit_string(void *in, size_t size); char * gal_type_to_string(void *ptr, uint8_t type, int quote_if_str_has_space); int gal_type_from_string(void **out, char *string, uint8_t type); void * gal_type_string_to_number(char *string, uint8_t *type); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TYPE_H__ */ �����gnuastro-0.22/lib/gnuastro/units.h������������������������������������������������������������������0000644�0001750�0001750�00000006771�14551337306�012725� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Units -- Convert data from one unit to other. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Kartik Ohri <kartikohri13@gmail.com> Contributing author(s): Mohammad Akhlaghi <mohammad@akhlaghi.org> Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_UNITS_H__ #define __GAL_UNITS_H__ /* When we are within Gnuastro's building process, 'IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular 'GAL_CONFIG_SIZEOF_SIZE_T' that we need below) is kept in 'config.h'. When building a user's programs, this information is kept in 'gnuastro/config.h'. Note that all '.c' files in Gnuastro's source must start with the inclusion of 'config.h' and that 'gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro). */ #ifndef IN_GNUASTRO_BUILD #include <gnuastro/config.h> #endif /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ int gal_units_extract_decimal(char *convert, const char *delimiter, double *args, size_t n); double gal_units_ra_to_degree(char *convert); double gal_units_dec_to_degree(char *convert); char * gal_units_degree_to_ra(double decimal, int usecolon); char * gal_units_degree_to_dec(double decimal, int usecolon); double gal_units_counts_to_mag(double counts, double zeropoint); double gal_units_mag_to_counts(double mag, double zeropoint); double gal_units_mag_to_sb(double mag, double area_arcsec2); double gal_units_sb_to_mag(double sb, double area_arcsec2); double gal_units_counts_to_sb(double counts, double zeropoint, double area_arcsec2); double gal_units_sb_to_counts(double sb, double zeropoint, double area_arcsec2); double gal_units_counts_to_jy(double counts, double zeropoint_ab); double gal_units_jy_to_counts(double jy, double zeropoint_ab); double gal_units_counts_to_nanomaggy(double counts, double zeropoint_ab); double gal_units_nanomaggy_to_counts(double counts, double zeropoint_ab); double gal_units_jy_to_mag(double jy); double gal_units_mag_to_jy(double mag); double gal_units_au_to_pc(double au); double gal_units_pc_to_au(double pc); double gal_units_ly_to_pc(double ly); double gal_units_pc_to_ly(double pc); double gal_units_ly_to_au(double ly); double gal_units_au_to_ly(double au); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_UNITS_H__ */ �������gnuastro-0.22/lib/gnuastro/warp.h�������������������������������������������������������������������0000644�0001750�0001750�00000010442�14551337306�012522� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Warp -- Warp pixels of one dataset to another pixel grid. This is part of GNU Astronomy Utilities (Gnuastro) package. Corresponding author: Pedram Ashofteh-Ardakani <pedramardakani@pm.me> Contributing author(s): Mohammad Akhlaghi <mohammad@akhlaghi.org> Copyright (C) 2022-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_WARP_H__ #define __GAL_WARP_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <wcslib/wcs.h> #include <gnuastro/data.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Macros. */ #define GAL_WARP_OUTPUT_NAME_WARPED "ALIGNED" #define GAL_WARP_OUTPUT_NAME_MAXFRAC "MAX-FRAC" /* Main input/output structure. */ typedef struct { /* Arguments given (and later freed) by the caller. Note that if 'twcs' is given, then the "WCS-Build" elements will be ignored. */ gal_data_t *input; /* Pointer to input image. */ size_t numthreads; /* Number of threads to use. */ double coveredfrac; /* Acceptable fraction of output covered. */ size_t edgesampling; /* Order of samplings along each pixel edge. */ gal_data_t *widthinpix; /* Output image width and height in pixels. */ struct wcsprm *twcs; /* WCS-Predefined: the wcsprm. */ gal_data_t *ctype; /* WCS-Build: Type of the coordinates. */ gal_data_t *cdelt; /* WCS-Build: Pixel scale of the output. */ gal_data_t *center; /* WCS-Build: Center of output in RA and Dec.*/ uint8_t checkmaxfrac; /* Check: Write max fraction per pixel. */ /* Output (must be freed by caller) */ gal_data_t *output; /* Pointer to output data structure. */ /* Internal variables (allocated and freed internally) */ size_t v0; /* The first vertical corner in each pixel. */ size_t nhor; /* No. of vertices on top side of output. */ size_t ncrn; /* No. of total vertices around each pixel. */ size_t gcrn; /* Gap between corners of each row. */ int isccw; /* Rotation orientation of pixel edges. */ gal_data_t *vertices; /* Stores all vertice coords of output img. */ } gal_warp_wcsalign_t; /* Return an empty set of the wcsalign data structure. */ gal_warp_wcsalign_t gal_warp_wcsalign_template(); /* Create the empty output WCS-ready image. */ void gal_warp_wcsalign_init(gal_warp_wcsalign_t *wa); /* Fill nonlinear output by pixel. */ void gal_warp_wcsalign_onpix(gal_warp_wcsalign_t *wa, size_t ind); /* Worker function to align per pixel. */ void * gal_warp_wcsalign_onthread(void *inparam); /* Spin-off the threads and finalize the output 'gal_data_t' image in 'wa->output'. */ void gal_warp_wcsalign(gal_warp_wcsalign_t *wa); /* Clean up ONLY the internal variables. Caller must 'free' their own inputs as well as the output (e.g. the input image). */ void gal_warp_wcsalign_free(gal_warp_wcsalign_t *wa); /* Return an image where each pixel shows its own area on the sky. */ void gal_warp_pixelarea(gal_warp_wcsalign_t *wa); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_WARP_H__ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/wcs.h��������������������������������������������������������������������0000644�0001750�0001750�00000022512�14551337306�012346� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to that only use WCSLIB's functions, not related to FITS. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_WCS_H__ #define __GAL_WCS_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <fitsio.h> #include <wcslib/wcs.h> #include <gnuastro/data.h> #include <gnuastro/fits.h> /* Assumed floating point error in the WCS-related functionality. */ #define GAL_WCS_FLTERROR 1e-12 /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /************************************************************* ************** Constants *************** *************************************************************/ /* Macros to identify the type of distortion for conversions. */ enum gal_wcs_distortions { GAL_WCS_DISTORTION_INVALID, /* Invalid (=0 by C standard). */ GAL_WCS_DISTORTION_TPD, /* The TPD polynomial distortion. */ GAL_WCS_DISTORTION_SIP, /* The SIP polynomial distortion. */ GAL_WCS_DISTORTION_TPV, /* The TPV polynomial distortion. */ GAL_WCS_DISTORTION_DSS, /* The DSS polynomial distortion. */ GAL_WCS_DISTORTION_WAT, /* The WAT polynomial distortion. */ }; /* Macros to identify coordinate system for convesions. */ enum gal_wcs_coordsys { GAL_WCS_COORDSYS_INVALID, /* Invalid (=0 by C standard). */ GAL_WCS_COORDSYS_EQB1950, /* Equatorial B1950 */ GAL_WCS_COORDSYS_EQJ2000, /* Equatorial J2000 */ GAL_WCS_COORDSYS_ECB1950, /* Ecliptic B1950 */ GAL_WCS_COORDSYS_ECJ2000, /* Ecliptic J2000 */ GAL_WCS_COORDSYS_GALACTIC, /* Galactic */ GAL_WCS_COORDSYS_SUPERGALACTIC, /* Super-galactic */ }; /* Macros to identify the type of distortion for conversions. */ enum gal_wcs_linear_matrix { GAL_WCS_LINEAR_MATRIX_INVALID, /* Invalid (=0 by C standard). */ GAL_WCS_LINEAR_MATRIX_PC, GAL_WCS_LINEAR_MATRIX_CD, }; /* Macros for various projections (these names come from the 'prj.h' file of WCSLIB (in '/usr/local/include/wcslib' for version 8.1). */ enum gal_wcs_projections { GAL_WCS_PROJECTION_INVALID, /* Invalid (=0 by C standard). */ GAL_WCS_PROJECTION_AZP, /* zenithal/azimuthal perspective */ GAL_WCS_PROJECTION_SZP, /* slant zenithal perspective */ GAL_WCS_PROJECTION_TAN, /* gnomonic */ GAL_WCS_PROJECTION_STG, /* stereographic */ GAL_WCS_PROJECTION_SIN, /* orthographic/synthesis */ GAL_WCS_PROJECTION_ARC, /* zenithal/azimuthal equidistant */ GAL_WCS_PROJECTION_ZPN, /* zenithal/azimuthal polynomial */ GAL_WCS_PROJECTION_ZEA, /* zenithal/azimuthal equal area */ GAL_WCS_PROJECTION_AIR, /* Airy */ GAL_WCS_PROJECTION_CYP, /* cylindrical perspective */ GAL_WCS_PROJECTION_CEA, /* cylindrical equal area */ GAL_WCS_PROJECTION_CAR, /* Plate carree */ GAL_WCS_PROJECTION_MER, /* Mercator */ GAL_WCS_PROJECTION_SFL, /* Sanson-Flamsteed */ GAL_WCS_PROJECTION_PAR, /* parabolic */ GAL_WCS_PROJECTION_MOL, /* Mollweide */ GAL_WCS_PROJECTION_AIT, /* Hammer-Aitoff */ GAL_WCS_PROJECTION_COP, /* conic perspective */ GAL_WCS_PROJECTION_COE, /* conic equal area */ GAL_WCS_PROJECTION_COD, /* conic equidistant */ GAL_WCS_PROJECTION_COO, /* conic orthomorphic */ GAL_WCS_PROJECTION_BON, /* Bonne */ GAL_WCS_PROJECTION_PCO, /* polyconic */ GAL_WCS_PROJECTION_TSC, /* tangential spherical cube */ GAL_WCS_PROJECTION_CSC, /* COBE spherical cube */ GAL_WCS_PROJECTION_QSC, /* quadrilateralized spherical cube */ GAL_WCS_PROJECTION_HPX, /* HEALPix */ GAL_WCS_PROJECTION_XPH, /* HEALPix polar, aka "butterfly" */ }; /************************************************************* *********** Macros *********** *************************************************************/ int gal_wcs_distortion_name_to_id(char *distortion); char * gal_wcs_distortion_name_from_id(int distortion); int gal_wcs_coordsys_name_to_id(char *coordsys); uint8_t gal_wcs_projection_name_to_id(char *str); char * gal_wcs_projection_name_from_id(uint8_t id); /************************************************************* *********** Read WCS *********** *************************************************************/ struct wcsprm * gal_wcs_read_fitsptr(fitsfile *fptr, int linearmatrix, size_t hstartwcs, size_t hendwcs, int *nwcs); struct wcsprm * gal_wcs_read(char *filename, char *hdu, int linearmatrix, size_t hstartwcs, size_t hendwcs, int *nwcs, char *hdu_option_name); struct wcsprm * gal_wcs_create(double *crpix, double *crval, double *cdelt, double *pc, char **cunit, char **ctype, size_t ndim, int linearmatrix); void gal_wcs_free(struct wcsprm *wcs); char * gal_wcs_dimension_name(struct wcsprm *wcs, size_t dimension); /************************************************************* *********** Write WCS *********** *************************************************************/ void gal_wcs_write(struct wcsprm *wcs, char *filename, char *extname, gal_fits_list_key_t *headers, char *program_string, int freekeys); char * gal_wcs_write_wcsstr(struct wcsprm *wcs, int *nkeyrec); void gal_wcs_write_in_fitsptr(fitsfile *fptr, struct wcsprm *wcs); /************************************************************* *********** Distortions *********** *************************************************************/ int gal_wcs_coordsys_identify(struct wcsprm *inwcs); struct wcsprm * gal_wcs_coordsys_convert(struct wcsprm *inwcs, int coordsysid); void gal_wcs_coordsys_convert_points(int sys1, double *lng1_d, double *lat1_d, int sys2, double *lng2_d, double *lat2_d, size_t number); void gal_wcs_coordsys_sys1_ref_in_sys2(int sys1, int sys2, double *lng2, double *lat2); /************************************************************* *********** Distortions *********** *************************************************************/ int gal_wcs_distortion_identify(struct wcsprm *wcs); struct wcsprm * gal_wcs_distortion_convert(struct wcsprm *inwcs, int out_distortion, size_t *fitsize); /**************************************************************/ /********** Utilities ************/ /**************************************************************/ struct wcsprm * gal_wcs_copy(struct wcsprm *wcs); struct wcsprm * gal_wcs_copy_new_crval(struct wcsprm *in, double *crval); void gal_wcs_remove_dimension(struct wcsprm *wcs, size_t fitsdim); void gal_wcs_on_tile(gal_data_t *tile); double * gal_wcs_warp_matrix(struct wcsprm *wcs); void gal_wcs_clean_errors(struct wcsprm *wcs); void gal_wcs_decompose_pc_cdelt(struct wcsprm *wcs); void gal_wcs_to_cd(struct wcsprm *wcs); double gal_wcs_angular_distance_deg(double r1, double d1, double r2, double d2); void gal_wcs_box_vertices_from_center(double ra_center, double dec_center, double ra_delta, double dec_delta, double *out); double * gal_wcs_pixel_scale(struct wcsprm *wcs); double gal_wcs_pixel_area_arcsec2(struct wcsprm *wcs); int gal_wcs_coverage(char *filename, char *hdu, size_t *ondim, double **ocenter, double **owidth, double **omin, double **omax, char *hdu_option_name); /**************************************************************/ /********** Conversion ************/ /**************************************************************/ gal_data_t * gal_wcs_world_to_img(gal_data_t *coords, struct wcsprm *wcs, int inplace); gal_data_t * gal_wcs_img_to_world(gal_data_t *coords, struct wcsprm *wcs, int inplace); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_WCS_H__ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro/README�������������������������������������������������������������������0000644�0001750�0001750�00000002223�14551337306�012256� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GNU Astronomy Utilities library header files ============================================ Copyright (C) 2015-2024 Free Software Foundation, Inc. See the end of the file for license conditions. This directory contins Gnuastro's installed library header files. Once installed, these headers will be installed in the specified '$(prefix)/include/gnuastro' directory (the value of '$(prefix)' can be set at configure time, see the "Installation directory" of the Gnuastro book for more). Inside of Gnuastro, the directory is given the same name to make Gnuastro's internal code similar to what a user would use in their own programs once the header files are installed. The headers that are not installed are kept in the parent directory of this directory mixed with the actual library '.c' source files. Copyright --------- Copyright (C) 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/����������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514201�013266� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/README����������������������������������������������������������0000644�0001750�0001750�00000001556�14551337306�014100� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GNU Astronomy Utilities internal header files --------------------------------------------- Copyright (C) 2015-2024 Free Software Foundation, Inc. See the end of the file for license conditions. The '.h' files in this directory are headers to Gnuastro's internal libraries: libraries that are only available to Gnuastro's programs. These are functions that are mainly to do with running a program, for example the common options to all the programs, functions to manage options and configuration files, timing and etc (the names are hopefully descriptive enough). Copyright --------- Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. ��������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-and.h������������������������������������������������0000644�0001750�0001750�00000002142�14551337306�016252� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_AND_H__ #define __ARITHMETIC_AND_H__ void arithmetic_and(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-binary.h���������������������������������������������0000644�0001750�0001750�00000031366�14551337306�017006� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_BINARY_H__ #define __ARITHMETIC_BINARY_H__ /************************************************************************/ /************* Low-level operators *****************/ /************************************************************************/ /* Final step to be used by all operators and all types. */ #define BINARY_OP_OT_RT_LT_SET(OP, OT, LT, RT) { \ LT lb, *la=l->array; \ RT rb, *ra=r->array; \ OT ob, *oa=o->array, *of=oa + o->size; \ if(checkblank) \ { \ gal_blank_write(&lb, l->type); \ gal_blank_write(&rb, r->type); \ gal_blank_write(&ob, o->type); \ do \ { \ if(lb==lb && rb==rb)/* Both are integers. */ \ *oa = (*la!=lb && *ra!=rb) ? *la OP *ra : ob ; \ else if(lb==lb) /* Only left operand is an integer. */ \ *oa = (*la!=lb && *ra==*ra) ? *la OP *ra : ob; \ else /* Only right operand is an integer. */ \ *oa = (*la==*la && *ra!=rb) ? *la OP *ra : ob; \ if(l->size>1) ++la; \ if(r->size>1) ++ra; \ } \ while(++oa<of); \ } \ else \ { \ if(l->size==r->size) do *oa = *la++ OP *ra++; while(++oa<of); \ else if(l->size==1) do *oa = *la OP *ra++; while(++oa<of); \ else do *oa = *la++ OP *ra; while(++oa<of); \ } \ } /* Blank values aren't defined for integer operators. */ #define BINARY_INT_OP_OT_RT_LT_SET(OP, OT, LT, RT) { \ LT *la=l->array; \ RT *ra=r->array; \ OT *oa=o->array, *of=oa + o->size; \ if(l->size==r->size) do *oa = *la++ OP *ra++; while(++oa<of); \ else if(l->size==1) do *oa = *la OP *ra++; while(++oa<of); \ else do *oa = *la++ OP *ra; while(++oa<of); \ } /* This is for operators like '&&' and '||', where the right operator is not necessarily read (and thus incremented). */ #define BINARY_OP_INCR_OT_RT_LT_SET(OP, OT, LT, RT) { \ LT *la=l->array; \ RT *ra=r->array; \ OT *oa=o->array, *of=oa + o->size; \ if(l->size==r->size) do {*oa = *la++ OP *ra; ++ra;} while(++oa<of); \ else if(l->size==1) do {*oa = *la OP *ra; ++ra;} while(++oa<of); \ else do *oa = *la++ OP *ra; while(++oa<of); \ } /************************************************************************/ /************* Type specifiers *****************/ /************************************************************************/ /* Flags for BINARY_OP_RT_LT_SET to identify the output type. */ enum arithmetic_binary_outtype_flags { ARITHMETIC_BINARY_INVALID, /* ==0 by C standard. */ ARITHMETIC_BINARY_OUT_TYPE_LEFT, ARITHMETIC_BINARY_OUT_TYPE_RIGHT, ARITHMETIC_BINARY_OUT_TYPE_UINT8, ARITHMETIC_BINARY_OUT_TYPE_INCR_SEP, }; /* For operators whose type may be any of the given inputs only for integers. For integer operators we have less options. */ #define BINARY_SET_OUT_INT(F, OP, LT, RT) \ switch(F) \ { \ case ARITHMETIC_BINARY_OUT_TYPE_LEFT: \ BINARY_INT_OP_OT_RT_LT_SET(OP, LT, LT, RT); \ break; \ case ARITHMETIC_BINARY_OUT_TYPE_RIGHT: \ BINARY_INT_OP_OT_RT_LT_SET(OP, RT, LT, RT); \ break; \ default: \ error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to " \ "address the problem. %d not recognized for 'F'", \ "BINARY_SET_OUT_INT", PACKAGE_BUGREPORT, F); \ } /* For operators whose type may be any of the given inputs. */ #define BINARY_SET_OUT(F, OP, LT, RT) \ switch(F) \ { \ case ARITHMETIC_BINARY_OUT_TYPE_LEFT: \ BINARY_OP_OT_RT_LT_SET(OP, LT, LT, RT); \ break; \ case ARITHMETIC_BINARY_OUT_TYPE_RIGHT: \ BINARY_OP_OT_RT_LT_SET(OP, RT, LT, RT); \ break; \ case ARITHMETIC_BINARY_OUT_TYPE_UINT8: \ BINARY_OP_OT_RT_LT_SET(OP, uint8_t, LT, RT); \ break; \ case ARITHMETIC_BINARY_OUT_TYPE_INCR_SEP: \ BINARY_OP_INCR_OT_RT_LT_SET(OP, uint8_t, LT, RT); \ break; \ default: \ error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to " \ "address the problem. %d not recognized for 'F'", \ "BINARY_SET_OUT", PACKAGE_BUGREPORT, F); \ } /* Set the right operator type only for integers (integer operators can't take floating point types). So floating point types must not be in the list of possibilities. */ #define BINARY_SET_RT_INT(F, OP, LT) \ switch(r->type) \ { \ case GAL_TYPE_UINT8: BINARY_SET_OUT_INT( F, OP, LT, uint8_t ) break; \ case GAL_TYPE_INT8: BINARY_SET_OUT_INT( F, OP, LT, int8_t ) break; \ case GAL_TYPE_UINT16: BINARY_SET_OUT_INT( F, OP, LT, uint16_t ) break; \ case GAL_TYPE_INT16: BINARY_SET_OUT_INT( F, OP, LT, int16_t ) break; \ case GAL_TYPE_UINT32: BINARY_SET_OUT_INT( F, OP, LT, uint32_t ) break; \ case GAL_TYPE_INT32: BINARY_SET_OUT_INT( F, OP, LT, int32_t ) break; \ case GAL_TYPE_UINT64: BINARY_SET_OUT_INT( F, OP, LT, uint64_t ) break; \ case GAL_TYPE_INT64: BINARY_SET_OUT_INT( F, OP, LT, int64_t ) break; \ default: \ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " \ "address the problem. %d is not a usable type code", \ "BINARY_SET_RT", PACKAGE_BUGREPORT, r->type); \ } /* Set the right operator type. */ #define BINARY_SET_RT(F, OP, LT) \ switch(r->type) \ { \ case GAL_TYPE_UINT8: BINARY_SET_OUT( F, OP, LT, uint8_t ) break; \ case GAL_TYPE_INT8: BINARY_SET_OUT( F, OP, LT, int8_t ) break; \ case GAL_TYPE_UINT16: BINARY_SET_OUT( F, OP, LT, uint16_t ) break; \ case GAL_TYPE_INT16: BINARY_SET_OUT( F, OP, LT, int16_t ) break; \ case GAL_TYPE_UINT32: BINARY_SET_OUT( F, OP, LT, uint32_t ) break; \ case GAL_TYPE_INT32: BINARY_SET_OUT( F, OP, LT, int32_t ) break; \ case GAL_TYPE_UINT64: BINARY_SET_OUT( F, OP, LT, uint64_t ) break; \ case GAL_TYPE_INT64: BINARY_SET_OUT( F, OP, LT, int64_t ) break; \ case GAL_TYPE_FLOAT32: BINARY_SET_OUT( F, OP, LT, float ) break; \ case GAL_TYPE_FLOAT64: BINARY_SET_OUT( F, OP, LT, double ) break; \ default: \ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " \ "address the problem. %d is not a usable type code", \ "BINARY_SET_RT", PACKAGE_BUGREPORT, r->type); \ } /* Set the left operator type only for integers (integer operators can't take floating point types). So floating point types must not be in the list of possibilities. */ #define BINARY_SET_LT_INT(F, OP) \ switch(l->type) \ { \ case GAL_TYPE_UINT8: BINARY_SET_RT_INT( F, OP, uint8_t ) break; \ case GAL_TYPE_INT8: BINARY_SET_RT_INT( F, OP, int8_t ) break; \ case GAL_TYPE_UINT16: BINARY_SET_RT_INT( F, OP, uint16_t ) break; \ case GAL_TYPE_INT16: BINARY_SET_RT_INT( F, OP, int16_t ) break; \ case GAL_TYPE_UINT32: BINARY_SET_RT_INT( F, OP, uint32_t ) break; \ case GAL_TYPE_INT32: BINARY_SET_RT_INT( F, OP, int32_t ) break; \ case GAL_TYPE_UINT64: BINARY_SET_RT_INT( F, OP, uint64_t ) break; \ case GAL_TYPE_INT64: BINARY_SET_RT_INT( F, OP, int64_t ) break; \ default: \ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " \ "address the problem. %d is not a usable type code", \ "BINARY_SET_LT_INT", PACKAGE_BUGREPORT, l->type); \ } /* Set the left operator type. */ #define BINARY_SET_LT(F, OP) \ switch(l->type) \ { \ case GAL_TYPE_UINT8: BINARY_SET_RT( F, OP, uint8_t ) break; \ case GAL_TYPE_INT8: BINARY_SET_RT( F, OP, int8_t ) break; \ case GAL_TYPE_UINT16: BINARY_SET_RT( F, OP, uint16_t ) break; \ case GAL_TYPE_INT16: BINARY_SET_RT( F, OP, int16_t ) break; \ case GAL_TYPE_UINT32: BINARY_SET_RT( F, OP, uint32_t ) break; \ case GAL_TYPE_INT32: BINARY_SET_RT( F, OP, int32_t ) break; \ case GAL_TYPE_UINT64: BINARY_SET_RT( F, OP, uint64_t ) break; \ case GAL_TYPE_INT64: BINARY_SET_RT( F, OP, int64_t ) break; \ case GAL_TYPE_FLOAT32: BINARY_SET_RT( F, OP, float ) break; \ case GAL_TYPE_FLOAT64: BINARY_SET_RT( F, OP, double ) break; \ default: \ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " \ "address the problem. %d is not a usable type code", \ "BINARY_SET_LT", PACKAGE_BUGREPORT, l->type); \ } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-bitand.h���������������������������������������������0000644�0001750�0001750�00000002153�14551337306�016753� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_BITAND_H__ #define __ARITHMETIC_BITAND_H__ void arithmetic_bitand(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-bitlsh.h���������������������������������������������0000644�0001750�0001750�00000002153�14551337306�016777� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_BITLSH_H__ #define __ARITHMETIC_BITLSH_H__ void arithmetic_bitlsh(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-bitor.h����������������������������������������������0000644�0001750�0001750�00000002150�14551337306�016626� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_BITOR_H__ #define __ARITHMETIC_BITOR_H__ void arithmetic_bitor(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-bitrsh.h���������������������������������������������0000644�0001750�0001750�00000002153�14551337306�017005� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_BITRSH_H__ #define __ARITHMETIC_BITRSH_H__ void arithmetic_bitrsh(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-bitxor.h���������������������������������������������0000644�0001750�0001750�00000002153�14551337306�017021� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_BITXOR_H__ #define __ARITHMETIC_BITXOR_H__ void arithmetic_bitxor(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-divide.h���������������������������������������������0000644�0001750�0001750�00000002153�14551337306�016756� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_DIVIDE_H__ #define __ARITHMETIC_DIVIDE_H__ void arithmetic_divide(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-eq.h�������������������������������������������������0000644�0001750�0001750�00000002137�14551337306�016121� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_EQ_H__ #define __ARITHMETIC_EQ_H__ void arithmetic_eq(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-ge.h�������������������������������������������������0000644�0001750�0001750�00000002137�14551337306�016107� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_GE_H__ #define __ARITHMETIC_GE_H__ void arithmetic_ge(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-gt.h�������������������������������������������������0000644�0001750�0001750�00000002137�14551337306�016126� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_GT_H__ #define __ARITHMETIC_GT_H__ void arithmetic_gt(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-internal.h�������������������������������������������0000644�0001750�0001750�00000005014�14551337306�017325� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic -- Preform arithmetic operations on datasets. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_ARITHMETIC_INTERNAL_H__ #define __GAL_ARITHMETIC_INTERNAL_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/data.h> /* When we are within Gnuastro's building process, 'IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular 'GAL_CONFIG_ARITH_CHAR' and the rest of the types that we needed in the arithmetic function) is kept in 'config.h'. When building a user's programs, this information is kept in 'gnuastro/config.h'. Note that all '.c' files must start with the inclusion of 'config.h' and that 'gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro).*/ #ifndef IN_GNUASTRO_BUILD #include <gnuastro/config.h> #endif /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ int gal_arithmetic_binary_checkblank(gal_data_t *l, gal_data_t *r); char * gal_arithmetic_operator_string(int operator); gal_data_t * gal_arithmetic_convert_to_compiled_type(gal_data_t *in, int flags); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_ARITHMETIC_INTERNAL_H__ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-le.h�������������������������������������������������0000644�0001750�0001750�00000002137�14551337306�016114� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_LE_H__ #define __ARITHMETIC_LE_H__ void arithmetic_le(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-lt.h�������������������������������������������������0000644�0001750�0001750�00000002137�14551337306�016133� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_LT_H__ #define __ARITHMETIC_LT_H__ void arithmetic_lt(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-minus.h����������������������������������������������0000644�0001750�0001750�00000002150�14551337306�016642� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_MINUS_H__ #define __ARITHMETIC_MINUS_H__ void arithmetic_minus(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-modulo.h���������������������������������������������0000644�0001750�0001750�00000002153�14551337306�017011� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_MODULO_H__ #define __ARITHMETIC_MODULO_H__ void arithmetic_modulo(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-multiply.h�������������������������������������������0000644�0001750�0001750�00000002161�14551337306�017370� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_MULTIPLY_H__ #define __ARITHMETIC_MULTIPLY_H__ void arithmetic_multiply(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-ne.h�������������������������������������������������0000644�0001750�0001750�00000002137�14551337306�016116� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_NE_H__ #define __ARITHMETIC_NE_H__ void arithmetic_ne(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-or.h�������������������������������������������������0000644�0001750�0001750�00000002137�14551337306�016134� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_OR_H__ #define __ARITHMETIC_OR_H__ void arithmetic_or(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-plus.h�����������������������������������������������0000644�0001750�0001750�00000002145�14551337306�016476� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_PLUS_H__ #define __ARITHMETIC_PLUS_H__ void arithmetic_plus(gal_data_t *l, gal_data_t *r, gal_data_t *o); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/arithmetic-set.h������������������������������������������������0000644�0001750�0001750�00000003617�14551337306�016313� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2021-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __ARITHMETIC_SET_H__ #define __ARITHMETIC_SET_H__ #define GAL_ARITHMETIC_SET_PREFIX "set-" #define GAL_ARITHMETIC_SET_PREFIX_LENGTH strlen(GAL_ARITHMETIC_SET_PREFIX) struct gal_arithmetic_set_params { void *tokens; /* Full list of tokens. */ size_t tokencounter; /* Counter of current token. */ gal_data_t *named; /* List of named datasets. */ void *params; /* Internal parameters in caller. */ gal_data_t * (*pop)(void *in_prm); /* Function to use. */ int (*used_later)(void *in_prm, char *name); /* Function to use. */ }; void gal_arithmetic_set_name(struct gal_arithmetic_set_params *p, char *token); int gal_arithmetic_set_is_name(gal_data_t *named, char *token); gal_data_t * gal_arithmetic_set_copy_named(struct gal_arithmetic_set_params *p, char *name); #endif �����������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/checkset.h������������������������������������������������������0000644�0001750�0001750�00000010634�14551337306�015157� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to check and set command line argument values and files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Pedram Ashofteh Ardakani <pedramardakani@pm.me> Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_CHECKSET_H__ #define __GAL_CHECKSET_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <math.h> #include <fitsio.h> #include <gsl/gsl_rng.h> #include <gnuastro-internal/options.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /**************************************************************/ /********** Environment ************/ /**************************************************************/ gsl_rng * gal_checkset_gsl_rng(uint8_t envseed_bool, const char **name, unsigned long int *seed); size_t gal_checkset_ram_available(int quietmmap); int gal_checkset_need_mmap(size_t bytesize, size_t minmapsize, int quietmmap); /**************************************************************/ /********** Check fixed strings ************/ /**************************************************************/ void gal_checkset_known_types(char *optarg, int *type, char *filename, size_t lineno); /**************************************************************/ /********** My String functions: ************/ /**************************************************************/ int gal_checkset_string_has_space(char *in); void gal_checkset_string_case_change(char *in, int toupper1_tolower0); char * gal_checkset_malloc_cat(char *inname, char *toappend); void gal_checkset_allocate_copy(const char *arg, char **copy); void gal_checkset_allocate_copy_set(char *arg, char **copy, int *set); char * gal_checkset_dataset_name(char *filename, char *hdu); char * gal_checkset_timestamp(char *filename, char *newext); int gal_checkset_noprefix_isequal(char *string, char *prefix, const char *tocompare); /**************************************************************/ /********** Set file names and check if they exist ************/ /**************************************************************/ char * gal_checkset_dir_part(char *filename); char * gal_checkset_not_dir_part(char *filename); char * gal_checkset_suffix_separate(char *name, char **suffix); char * gal_checkset_make_unique_suffix(char *reference, char *suffix); void gal_checkset_check_file(char *filename); int gal_checkset_check_file_return(char *filename); int gal_checkset_writable_notexist(char *filename); void /* keep==0 && dontdelete==0: file will be deleted if exists.*/ gal_checkset_writable_remove(char *filename, char *basename, int keep, int dontdelete); int gal_checkset_dir_0_file_1(struct gal_options_common_params *cp, char *name, char *basename); char * gal_checkset_automatic_output(struct gal_options_common_params *cp, char *inname, char *suffix); void gal_checkset_check_dir_write_add_slash(char **dirname); int gal_checkset_mkdir(char *dirname); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_CHECKSET_H__ */ ����������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/commonopts.h����������������������������������������������������0000644�0001750�0001750�00000033610�14551337306�015563� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Common parameters between all programs. IMPORTANT: This header must only be included the programs, not libraries. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_COMMONOPTS_H__ #define __GAL_COMMONOPTS_H__ /* Common options for all programs. IMPORTANT NOTE: This header should only be included in the programs, not the libraries, and in particular 'options.c'. Because we want each program to have its own allocation of the common options structure. If it is included in options.c, then it will be shared between all the programs. */ struct argp_option gal_commonopts_options[] = { { 0, 0, 0, 0, "Input:", GAL_OPTIONS_GROUP_INPUT }, { "hdu", GAL_OPTIONS_KEY_HDU, "STR/INT", 0, "Extension name or number of input data.", GAL_OPTIONS_GROUP_INPUT, &cp->hdu, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "searchin", GAL_OPTIONS_KEY_SEARCHIN, "STR", 0, "Select column(s): 'name', 'unit', 'comment'.", GAL_OPTIONS_GROUP_INPUT, &cp->searchin, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_searchin }, { "ignorecase", GAL_OPTIONS_KEY_IGNORECASE, 0, 0, "Ignore case in matching/searching columns.", GAL_OPTIONS_GROUP_INPUT, &cp->ignorecase, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "stdintimeout", GAL_OPTIONS_KEY_STDINTIMEOUT, "INT", 0, "Micro-seconds to wait for standard input.", GAL_OPTIONS_GROUP_INPUT, &cp->stdintimeout, GAL_TYPE_LONG, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Tile grid (tessellation) options. */ { 0, 0, 0, 0, "Tessellation (tile grid):", GAL_OPTIONS_GROUP_TESSELLATION }, { "tilesize", GAL_OPTIONS_KEY_TILESIZE, "INT[,INT]", 0, "Regular tile size on dim.s (FITS order).", GAL_OPTIONS_GROUP_TESSELLATION, &cp->tl.tilesize, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_sizes_reverse }, { "numchannels", GAL_OPTIONS_KEY_NUMCHANNELS, "INT[,..]", 0, "No. of channels in dim.s (FITS order).", GAL_OPTIONS_GROUP_TESSELLATION, &cp->tl.numchannels, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_parse_sizes_reverse }, { "remainderfrac", GAL_OPTIONS_KEY_REMAINDERFRAC, "FLT", 0, "Fraction of remainder to split last tile.", GAL_OPTIONS_GROUP_TESSELLATION, &cp->tl.remainderfrac, GAL_TYPE_FLOAT32, GAL_OPTIONS_RANGE_GT_0_LT_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, }, { "workoverch", GAL_OPTIONS_KEY_WORKOVERCH, 0, 0, "Work (not tile) over channel edges.", GAL_OPTIONS_GROUP_TESSELLATION, &cp->tl.workoverch, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "checktiles", GAL_OPTIONS_KEY_CHECKTILES, 0, 0, "Tile IDs in an image, the size of input.", GAL_OPTIONS_GROUP_TESSELLATION, &cp->tl.checktiles, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "oneelempertile", GAL_OPTIONS_KEY_ONEELEMPERTILE, 0, 0, "Display 1 element/tile, not full input res.", GAL_OPTIONS_GROUP_TESSELLATION, &cp->tl.oneelempertile, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "interponlyblank", GAL_OPTIONS_KEY_INTERPONLYBLANK, 0, 0, "Only interpolate over the blank tiles.", GAL_OPTIONS_GROUP_TESSELLATION, &cp->interponlyblank, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "interpmetric", GAL_OPTIONS_KEY_INTERPMETRIC, "STR", 0, "Interpolation metric (radial, manhattan).", GAL_OPTIONS_GROUP_TESSELLATION, &cp->interpmetric, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_interpmetric }, { "interpnumngb", GAL_OPTIONS_KEY_INTERPNUMNGB, "INT", 0, "No. of neighbors to use for interpolation.", GAL_OPTIONS_GROUP_TESSELLATION, &cp->interpnumngb, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Output:", GAL_OPTIONS_GROUP_OUTPUT }, { "output", GAL_OPTIONS_KEY_OUTPUT, "STR", 0, "Output file name.", GAL_OPTIONS_GROUP_OUTPUT, &cp->output, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "type", GAL_OPTIONS_KEY_TYPE, "STR", 0, "Type of output: e.g., int16, float32, etc...", GAL_OPTIONS_GROUP_OUTPUT, &cp->type, /* Internally, 'cp->type' is actually an */ GAL_TYPE_STRING, /* 'uint8_t', but the user gives a string. */ GAL_OPTIONS_RANGE_GT_0, /* So for the sanity checks to pass, we */ GAL_OPTIONS_NOT_MANDATORY,/* use 'GAL_TYPE_STRING' for this option. */ GAL_OPTIONS_NOT_SET, gal_options_read_type }, { "tableformat", GAL_OPTIONS_KEY_TABLEFORMAT, "STR", 0, "Table fmt: 'fits-ascii', 'fits-binary', 'txt'.", GAL_OPTIONS_GROUP_OUTPUT, &cp->tableformat, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_tableformat }, { "wcslinearmatrix", GAL_OPTIONS_KEY_WCSLINEARMATRIX, "STR", 0, "WCS linear matrix of output ('pc' or 'cd').", GAL_OPTIONS_GROUP_OUTPUT, &cp->wcslinearmatrix, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_read_wcslinearmatrix }, { "dontdelete", GAL_OPTIONS_KEY_DONTDELETE, 0, 0, "Don't delete output if it exists.", GAL_OPTIONS_GROUP_OUTPUT, &cp->dontdelete, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "keepinputdir", GAL_OPTIONS_KEY_KEEPINPUTDIR, 0, 0, "Keep input directory for automatic output.", GAL_OPTIONS_GROUP_OUTPUT, &cp->keepinputdir, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "outfitsnodate", GAL_OPTIONS_KEY_OUTFITSNODATE, 0, 0, "No 'DATE' in 0-th HDU of output FITS.", GAL_OPTIONS_GROUP_OUTPUT, &cp->outfitsnodate, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "outfitsnoversions", GAL_OPTIONS_KEY_OUTFITSNOVERSIONS, 0, 0, "No versions in 0-th HDU of output FITS.", GAL_OPTIONS_GROUP_OUTPUT, &cp->outfitsnoversions, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "outfitsnocommit", GAL_OPTIONS_KEY_OUTFITSNOCOMMIT, 0, 0, "No Git commit in 0-th HDU of output FITS.", GAL_OPTIONS_GROUP_OUTPUT, &cp->outfitsnocommit, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "outfitsnoconfig", GAL_OPTIONS_KEY_OUTFITSNOCONFIG, 0, 0, "No metadata in 0-th HDU of output FITS.", GAL_OPTIONS_GROUP_OUTPUT, &cp->outfitsnoconfig, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { 0, 0, 0, 0, "Operating modes:", GAL_OPTIONS_GROUP_OPERATING_MODE }, { "quiet", GAL_OPTIONS_KEY_QUIET, 0, 0, "Only report errors, remain quiet about steps.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->quiet, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "numthreads", GAL_OPTIONS_KEY_NUMTHREADS, "INT", 0, "Number of CPU threads to use.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->numthreads, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "minmapsize", GAL_OPTIONS_KEY_MINMAPSIZE, "INT", 0, "Min. bytes to avoid RAM automatically.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->minmapsize, GAL_TYPE_SIZE_T, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "quietmmap", GAL_OPTIONS_KEY_QUIETMMAP, 0, 0, "Don't print mmap'd file's name and size.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->quietmmap, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "log", GAL_OPTIONS_KEY_LOG, 0, 0, "Information about output(s) in a log file.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->log, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, /* Internal (before control goes back to the program). */ { "cite", GAL_OPTIONS_KEY_CITE, 0, 0, "BibTeX citation for this program.", GAL_OPTIONS_GROUP_OPERATING_MODE, NULL, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_print_citation }, { "printparams", GAL_OPTIONS_KEY_PRINTPARAMS, 0, 0, "Print parameter values to be used and abort.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->printparams, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "config", GAL_OPTIONS_KEY_CONFIG, "STR", 0, "Read configuration file STR immediately.", GAL_OPTIONS_GROUP_OPERATING_MODE, NULL, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_call_parse_config_file }, { "checkconfig", GAL_OPTIONS_KEY_CHECKCONFIG, 0, 0, "List all config files and variables read.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->checkconfig, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_check_config }, { "config-prefix", GAL_OPTIONS_KEY_CONFIGPREFIX, "STR", 0, "Custom prefix of option names config files.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->configprefix, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, }, { "setdirconf", GAL_OPTIONS_KEY_SETDIRCONF, 0, 0, "Set default values for this directory and abort.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->setdirconf, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "setusrconf", GAL_OPTIONS_KEY_SETUSRCONF, 0, 0, "Set default values for this user and abort.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->setusrconf, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "lastconfig", GAL_OPTIONS_KEY_LASTCONFIG, 0, 0, "Do not parse any more configuration files.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->lastconfig, GAL_OPTIONS_NO_ARG_TYPE, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET }, { "onlyversion", GAL_OPTIONS_KEY_ONLYVERSION, "STR", 0, "Only run if the program version is STR.", GAL_OPTIONS_GROUP_OPERATING_MODE, &cp->onlyversion, GAL_TYPE_STRING, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_NOT_MANDATORY, GAL_OPTIONS_NOT_SET, gal_options_check_version }, {0} }; #endif ������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/config.h.in�����������������������������������������������������0000644�0001750�0001750�00000005263�14551337306�015242� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions dealing with general aspects of all Gnuastro. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Pedram Ashofteh-Ardakani <pedramardakani@pm.me> Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_CONFIG_H__ #define __GAL_CONFIG_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* The restrict keyword might not be present on some systems, so we are redefining it here based on the checks in 'configure.ac', see there for more comments. */ #define restrict @RESTRICT_REPLACEMENT@ /* Configuration macros: */ #define GAL_CONFIG_VERSION "@VERSION@" #define GAL_CONFIG_HAVE_PYTHON @HAVE_PYTHON@ #define GAL_CONFIG_HAVE_LIBGIT2 @HAVE_LIBGIT2@ #define GAL_CONFIG_HAVE_GNUMAKE_H @HAVE_GNUMAKE_H@ #define GAL_CONFIG_HAVE_WCSLIB_DIS_H @HAVE_WCSLIB_DIS_H@ #define GAL_CONFIG_HAVE_WCSLIB_MJDREF @HAVE_WCSLIB_MJDREF@ #define GAL_CONFIG_HAVE_WCSLIB_OBSFIX @HAVE_WCSLIB_OBSFIX@ #define GAL_CONFIG_HAVE_WCSLIB_VERSION @HAVE_WCSLIB_VERSION@ #define GAL_CONFIG_HAVE_FITS_IS_REENTRANT @HAVE_FITS_IS_REENTRANT@ #define GAL_CONFIG_HAVE_GSL_INTERP_STEFFEN @HAVE_GSL_STEFFEN@ #define GAL_CONFIG_HAVE_PTHREAD_BARRIER @HAVE_PTHREAD_BARRIER@ #define GAL_CONFIG_SIZEOF_LONG @SIZEOF_LONG@ #define GAL_CONFIG_SIZEOF_SIZE_T @SIZEOF_SIZE_T@ /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_CONFIG_H__ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/fixedstringmacros.h���������������������������������������������0000644�0001750�0001750�00000006122�14551337306�017116� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Fixed strings for use in all utilities. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_FIXEDSTRINGMACROS_H__ #define __GAL_FIXEDSTRINGMACROS_H__ #define GAL_STRINGS_SHORT_COPYRIGHT \ "Copyright (C) 2015-2024 Free Software Foundation, Inc." #define GAL_STRINGS_SHORT_LICENSE \ "License GPLv3+: GNU General public license version 3 or later." #define GAL_STRINGS_COPYRIGHT \ GAL_STRINGS_SHORT_COPYRIGHT"\n"GAL_STRINGS_SHORT_LICENSE"\n" \ "This is free software: you are free to change and redistribute " \ "it.\nThere is NO WARRANTY, to the extent permitted by law." \ #define GAL_STRINGS_TOP_HELP_INFO \ "\n"PROGRAM_NAME" is part of "PACKAGE_STRING".\n" /* This is fixed for all the packages. */ #define GAL_STRINGS_MORE_HELP_INFO \ "\nFor more information, please run any of the " \ "following commands. In particular the second contains a very " \ "comprehensive explanation of "PROGRAM_NAME"'s invocation: expected " \ "input(s), output(s), and a full description of all the options.\n\n" \ " All options and their values: $ "PROGRAM_EXEC" -P\n" \ " Inputs/Outputs and options: $ info "PROGRAM_EXEC"\n" \ " Full section in manual/book: $ info "PROGRAM_NAME"\n" \ " Full Gnuastro manual/book: $ info "PACKAGE_TARNAME"\n\n" \ "If you couldn't find your answer in the manual, you can get " \ "direct help from experienced Gnuastro users and developers. " \ "For more information, please run:\n\n" \ " $ info help-gnuastro\n\n" \ PROGRAM_NAME" options:" \ /* This can be used in the end of error messages related to option values. */ #define GAL_STRINGS_HOW_TO_CHECK_VALUES \ " You can check all the input values with the '--printparams' " \ "(-P) option." #endif /* __GAL_FIXEDSTRINGMACROS_H__ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/options.h�������������������������������������������������������0000644�0001750�0001750�00000035266�14551337306�015071� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Function to parse options and configuration file values. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_OPTIONS_H__ #define __GAL_OPTIONS_H__ #include <argp.h> #include <gnuastro/tile.h> #include <gnuastro/list.h> #include <gnuastro/fits.h> /**********************************************************************/ /************ Common options ***************/ /**********************************************************************/ /* Type for options that don't accept an argument/value. This macro is defined to help make the definition and processing of these options easier and less buggy. Please use this macro for such options. */ #define GAL_OPTIONS_NO_ARG_TYPE GAL_TYPE_UINT8 /* When printing the option names, values and comments, we want things to be clean and readable (all the comments starting on one line for most, ideally all, lines). But in some cases, option values can become too long (for example the '--polygon' option in Crop, which takes many coordinates). So simply using the maximum option length is going to make the whole thing unreadable and we need to have a maximum so this rule only applies to them. */ #define GAL_OPTIONS_MAX_VALUE_LEN 10 /* Statically allocated space for printing option values. */ #define GAL_OPTIONS_STATIC_MEM_FOR_VALUES 2000 /* Pixel width of output image. */ #define GAL_OPTIONS_WIDTH_TOO_LARGE_SIZE 50000 /* Standard groups of options. From the Argp manual (in GNU C Library): "In a long help message, options are sorted alphabetically within each group, and the groups presented in the order 0, 1, 2, ..., N, -M, ..., -2, -1." We want the Operating mode group of options to be the last and the input and output groups to the be the first. So first we set the operating mdoe group code to '-1', and benefit from the definition of the Enumerator type in C, so each field afterwards will be one integer larger than the previous. The largest common option group is then used to build the codes of program-specific option groups. */ enum options_standard_groups { GAL_OPTIONS_GROUP_OPERATING_MODE = -1, GAL_OPTIONS_GROUP_INPUT=1, GAL_OPTIONS_GROUP_TESSELLATION, GAL_OPTIONS_GROUP_OUTPUT, GAL_OPTIONS_GROUP_AFTER_COMMON, }; /* Key values for the common options, the free alphabetical keys are listed below. You can use any of the free letters for an option in a program. Note that '-V', which is used by GNU and implemented by Argp, is also removed from this list. a b c d e f g i j k l m n p r s t u v w x y z A B C E G H J L O Q R W X Y */ enum options_common_keys { /* With short-option version */ GAL_OPTIONS_KEY_HDU = 'h', GAL_OPTIONS_KEY_OUTPUT = 'o', GAL_OPTIONS_KEY_TYPE = 'T', GAL_OPTIONS_KEY_DONTDELETE = 'D', GAL_OPTIONS_KEY_KEEPINPUTDIR = 'K', GAL_OPTIONS_KEY_QUIET = 'q', GAL_OPTIONS_KEY_NUMTHREADS = 'N', GAL_OPTIONS_KEY_PRINTPARAMS = 'P', GAL_OPTIONS_KEY_SETDIRCONF = 'S', GAL_OPTIONS_KEY_SETUSRCONF = 'U', GAL_OPTIONS_KEY_IGNORECASE = 'I', GAL_OPTIONS_KEY_TILESIZE = 'Z', GAL_OPTIONS_KEY_NUMCHANNELS = 'M', GAL_OPTIONS_KEY_REMAINDERFRAC = 'F', /* Only long option (integers for keywords). */ GAL_OPTIONS_KEY_LOG = 500, GAL_OPTIONS_KEY_CITE, GAL_OPTIONS_KEY_CONFIG, GAL_OPTIONS_KEY_SEARCHIN, GAL_OPTIONS_KEY_QUIETMMAP, GAL_OPTIONS_KEY_WORKOVERCH, GAL_OPTIONS_KEY_MINMAPSIZE, GAL_OPTIONS_KEY_LASTCONFIG, GAL_OPTIONS_KEY_CHECKTILES, GAL_OPTIONS_KEY_TABLEFORMAT, GAL_OPTIONS_KEY_CHECKCONFIG, GAL_OPTIONS_KEY_ONLYVERSION, GAL_OPTIONS_KEY_CONFIGPREFIX, GAL_OPTIONS_KEY_INTERPMETRIC, GAL_OPTIONS_KEY_STDINTIMEOUT, GAL_OPTIONS_KEY_INTERPNUMNGB, GAL_OPTIONS_KEY_OUTFITSNODATE, GAL_OPTIONS_KEY_ONEELEMPERTILE, GAL_OPTIONS_KEY_OUTFITSNOCONFIG, GAL_OPTIONS_KEY_OUTFITSNOCOMMIT, GAL_OPTIONS_KEY_INTERPONLYBLANK, GAL_OPTIONS_KEY_WCSLINEARMATRIX, GAL_OPTIONS_KEY_OUTFITSNOVERSIONS, }; /* Conditions to check */ enum gal_options_range_values { GAL_OPTIONS_RANGE_ANY, GAL_OPTIONS_RANGE_GT_0, GAL_OPTIONS_RANGE_GE_0, GAL_OPTIONS_RANGE_0_OR_1, GAL_OPTIONS_RANGE_GE_0_LE_1, GAL_OPTIONS_RANGE_GE_0_LT_1, GAL_OPTIONS_RANGE_GT_0_LT_1, GAL_OPTIONS_RANGE_GT_0_ODD, GAL_OPTIONS_RANGE_0_OR_ODD, }; /* What to do if option isn't given. Note that in each program's 'main.c' the main program structure is initialized to zero (or NULL for pointers). */ enum gal_options_mandatory_values { GAL_OPTIONS_NOT_MANDATORY, /* =0 in C standard. */ GAL_OPTIONS_MANDATORY, }; /* If the option has already been given a value or not. */ enum gal_options_set_values { GAL_OPTIONS_NOT_SET, /* =0 in C standard. */ GAL_OPTIONS_SET, }; /* The structure keeping all the values of the common options in Gnuastro's programs. */ struct gal_options_common_params { /* Tessellation. */ struct gal_tile_two_layer_params tl; /* Two layer tessellation params. */ uint8_t interponlyblank; /* Only interpolate over blank values. */ uint8_t interpmetric; /* Metric to use for nearest-ngb interp. */ size_t interpnumngb; /* Number of neighbors for interpolation. */ /* Input. */ char *hdu; /* Image extension. */ uint8_t searchin; /* Column meta-data to match/search. */ uint8_t ignorecase; /* Ignore case when matching col info. */ long stdintimeout; /* Timeout (micro-seconds) for stdin. */ /* Output. */ char *output; /* Directory containg output. */ uint8_t type; /* Data type of output. */ uint8_t tableformat; /* Internal code for output table format. */ uint8_t wcslinearmatrix; /* WCS matrix to use (PC or CD). */ uint8_t dontdelete; /* ==1: Don't delete existing file. */ uint8_t keepinputdir; /* Keep input directory for auto output. */ uint8_t outfitsnodate; /* No 'DATE' in 0th FITS HDU. */ uint8_t outfitsnocommit; /* No Git commit in 0th FITS HDU. */ uint8_t outfitsnoversions; /* No software versions in FITS. */ uint8_t outfitsnoconfig; /* No metadata in 0th FITS HDU. */ gal_fits_list_key_t *ckeys; /* Conf. as FITS keys in 0th output HDU. */ /* Operating modes. */ uint8_t quiet; /* Only print errors. */ size_t numthreads; /* Number of threads to use. */ size_t minmapsize; /* Minimum bytes necessary to use mmap. */ uint8_t quietmmap; /* ==0: print mmap'd file name and size. */ uint8_t log; /* Make a log file. */ char *onlyversion; /* Redundant, kept/set for generality. */ /* Configuration files. */ uint8_t printparams; /* To print the full list of parameters. */ uint8_t setdirconf; /* To write the directory config file. */ uint8_t setusrconf; /* To write teh user config config file. */ uint8_t lastconfig; /* This is the last configuration file. */ uint8_t checkconfig; /* Check config files and values. */ char *configprefix; /* Custom prefix in --config files. */ /* For internal (to option processing) purposes. */ uint8_t keep; /* Output file can exist. */ void *program_struct; /* Host program's main variable struct. */ char *program_name; /* Official name to be used in text. */ char *program_exec; /* Program's executable name. */ char *program_bibtex; /* BibTeX record for this program. */ char *program_authors; /* List of the program authors. */ struct argp_option *coptions; /* Common options to all programs. */ struct argp_option *poptions; /* Program specific options. */ gal_list_i32_t *mand_common; /* Common mandatory options. */ gal_list_str_t *novalue_doc; /* Mandatory opts, no value */ gal_list_str_t *novalue_name; /* Mandatory opts, no value */ }; /**********************************************************************/ /************ Option utilities ***************/ /**********************************************************************/ int gal_options_is_last(struct argp_option *option); int gal_options_is_category_title(struct argp_option *option); void gal_options_add_to_not_given(struct gal_options_common_params *cp, struct argp_option *option); void gal_options_abort_if_mandatory_missing(struct gal_options_common_params *cp); void gal_options_width_too_large(double width, size_t dim_num, double pixwidth, double pixscale); /**********************************************************************/ /************ Parser functions for common options ***************/ /**********************************************************************/ void * gal_options_check_version(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_print_citation(struct argp_option *option, char *arg, char *filename, size_t lineno, void *pa); void * gal_options_check_config(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_read_type(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_read_color(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_read_searchin(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_read_wcslinearmatrix(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_read_tableformat(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_read_interpmetric(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); gal_data_t * gal_options_parse_list_of_numbers(char *string, char *filename, size_t lineno, uint8_t type); gal_list_str_t * gal_options_parse_csv_strings_to_list(char *string, char *filename, size_t lineno); gal_data_t * gal_options_parse_csv_strings_to_data(char *string, char *filename, size_t lineno); void * gal_options_parse_csv_strings_append(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_parse_csv_strings(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void gal_options_merge_list_of_csv(gal_list_str_t **list); void * gal_options_parse_sizes_reverse(struct argp_option *option, char *arg, char *filename, size_t lineno, void *params); void * gal_options_parse_csv_float64(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_read_sigma_clip(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_parse_name_and_strings(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_parse_name_and_float64s(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); void * gal_options_parse_name_and_sizets(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); gal_data_t * gal_options_parse_colon_sep_csv_raw(char *instring, char *filename, size_t lineno); void * gal_options_parse_colon_sep_csv(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk); /**********************************************************************/ /************ Command-line options ***************/ /**********************************************************************/ error_t gal_options_set_from_key(int key, char *arg, struct argp_option *options, struct gal_options_common_params *cp); error_t gal_options_common_argp_parse(int key, char *arg, struct argp_state *state); char * gal_options_stdin_error(long stdintimeout, int precedence, char *name); gal_list_str_t * gal_options_check_stdin(char *inputname, long stdintimeout, char *name); /**********************************************************************/ /************ Configuration files ***************/ /**********************************************************************/ void * gal_options_call_parse_config_file(struct argp_option *option, char *arg, char *filename, size_t lineno, void *cp); void gal_options_read_config_set(struct gal_options_common_params *cp); /**********************************************************************/ /************ Printing/Writing ***************/ /**********************************************************************/ void gal_options_print_state(struct gal_options_common_params *cp); void gal_options_as_fits_keywords(struct gal_options_common_params *cp); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/tableintern.h���������������������������������������������������0000644�0001750�0001750�00000006673�14551337306�015705� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* tableintern -- Internalfunctions for table input and output. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_TABLEINTERN_H__ #define __GAL_TABLEINTERN_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <gnuastro/fits.h> /* Includes 'gnuastro/data.h' and 'fitsio.h' */ #include <gnuastro/list.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* Number of bytes in the unsigned integer hosting the bit-flags ('flag' element) of 'gal_data_t'. */ #define GAL_TABLEINTERN_FLAG_SIZE 1 /* Bit 0: If the FITS TFORM has a "repeat" value of 0. */ #define GAL_TABLEINTERN_FLAG_TFORM_REPEAT_IS_ZERO 0x1 /* Bit 1: If the 'array' element in this dataset is a blank string. */ #define GAL_TABLEINTERN_FLAG_ARRAY_IS_BLANK_STRING 0x2 /************************************************************************/ /*************** Error messages ***************/ /************************************************************************/ void gal_tableintern_error_col_selection(char *filename, char *hdu, char *errorstring); /************************************************************************/ /*************** Formats ***************/ /************************************************************************/ uint8_t gal_tableintern_string_to_format(char *string); char * gal_tableintern_format_as_string(uint8_t tableformat); uint8_t gal_tableintern_string_to_searchin(char *string); char * gal_tableintern_searchin_as_string(uint8_t searchin); void gal_tableintern_check_fits_format(char *filename, int tableformat); /************************************************************************/ /*************** Printing information ***************/ /************************************************************************/ void gal_tableintern_col_print_info(gal_data_t *col, int tableformat, char *fmt, char *lng); void gal_tableintern_read_blank(gal_data_t *col, char *blank); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TABLE_H__ */ ���������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/tile-internal.h�������������������������������������������������0000644�0001750�0001750�00000006105�14553743675�016147� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Common tile operations used by some Gnuastro programs, but too specific to be in the general library. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_TILE_INTERNAL_H__ #define __GAL_TILE_INTERNAL_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* When we are within Gnuastro's building process, 'IN_GNUASTRO_BUILD' is defined. In the build process, installation information (in particular 'GAL_CONFIG_ARITH_CHAR' and the rest of the types that we needed in the arithmetic function) is kept in 'config.h'. When building a user's programs, this information is kept in 'gnuastro/config.h'. Note that all '.c' files must start with the inclusion of 'config.h' and that 'gnuastro/config.h' is only created at installation time (not present during the building of Gnuastro).*/ #ifndef IN_GNUASTRO_BUILD #include <gnuastro/config.h> #endif /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ void gal_tileinternal_no_outlier(gal_data_t *first, gal_data_t *second, gal_data_t *third, struct gal_tile_two_layer_params *tl, double *outliersclip, float outliersigma, char *filename); void gal_tileinternal_no_outlier_local(gal_data_t *input, gal_data_t *second, gal_data_t *third, struct gal_tile_two_layer_params *tl, uint8_t metric, size_t numneighbors, size_t numthreads, double *outliersclip, double outliersigma, char *filename, char *optionname); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TILE_INTERNAL_H__ */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/timing.h��������������������������������������������������������0000644�0001750�0001750�00000003613�14551337306�014654� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to report timing in verbose mode. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_TIMING_H__ #define __GAL_TIMING_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ #include <time.h> #include <sys/time.h> /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ #define GAL_TIMING_VERB_MSG_LENGTH_V 50 #define GAL_TIMING_VERB_MSG_LENGTHS_2_V 65 unsigned long gal_timing_time_based_rng_seed(); void gal_timing_report(struct timeval *t1, char *jobname, size_t level); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_TIMING_H__ */ ���������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro-internal/wcsdistortion.h�������������������������������������������������0000644�0001750�0001750�00000003672�14551337306�016305� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* wcsdistortion -- Manipulation of distortions in WCS. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Sachin Kumar Singh <sachinkumarsingh092@gmail.com> Contributing author(s): Mohammad Akhlaghi <mohammad@akhlaghi.org> Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #ifndef __GAL_WCSDISTORTION_H__ #define __GAL_WCSDISTORTION_H__ /* Include other headers if necessary here. Note that other header files must be included before the C++ preparations below */ /* C++ Preparations */ #undef __BEGIN_C_DECLS #undef __END_C_DECLS #ifdef __cplusplus # define __BEGIN_C_DECLS extern "C" { # define __END_C_DECLS } #else # define __BEGIN_C_DECLS /* empty */ # define __END_C_DECLS /* empty */ #endif /* End of C++ preparations */ /* Actual header contants (the above were for the Pre-processor). */ __BEGIN_C_DECLS /* From C++ preparations */ /* This library's functions. */ struct wcsprm * gal_wcsdistortion_tpv_to_sip(struct wcsprm *inwcs, size_t *fitsize); struct wcsprm * gal_wcsdistortion_sip_to_tpv(struct wcsprm *inwcs); __END_C_DECLS /* From C++ preparations */ #endif /* __GAL_CHECKSET_H__ */ ����������������������������������������������������������������������gnuastro-0.22/lib/Makefile.am�����������������������������������������������������������������������0000644�0001750�0001750�00000021024�14551337306�011570� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.in ## ## Original author: ## Mohammad Akhlaghi <mohammad@akhlaghi.org> ## Contributing author(s): ## Copyright (C) 2015-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. # Conditional compilation headersdir=$(top_srcdir)/lib/gnuastro if COND_HASWCSDIS_H MAYBE_WCSDISTORTION = wcsdistortion.c endif if COND_HASGNUMAKE_H MAYBE_GNUMAKE = libgnuastro_make.la endif if COND_NUMPY MAYBE_NUMPY_C = python.c MAYBE_NUMPY_H = $(headersdir)/python.h MAYBE_NUMPY_INCLUDE = -I$(NUMPY_INCLUDE_DIR) -I$(PYTHON_INCLUDE_DIR) endif ## Necessary flags. ## ## $(top_builddir)/bootstrapped/lib: Gnulib headers that are customized ## for the running system. ## ## $(top_srcdir)/bootstrapped/lib: Gnulib headers that are generic (don't ## need any customization). ## ## SYSCONFIG_DIR: only necessary in 'options.c' to get the system ## installation directory. ## ## MAYBE_NUMPY_INCLUDE: only necessary in 'python.c' to link the ## numpy C-API. AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -DSYSCONFIG_DIR=\"$(sysconfdir)\" \ $(MAYBE_NUMPY_INCLUDE) # Define the main compiled library file, its Libtool version and also link # with Gnulib's compiled library for this system. We are doing this so the # Gnuastro library functions can also benefit from Gnulib's many great # features. This also avoids the need for the programs to link separately # with Gnulib, they only need to link with the Gnuastro library. lib_LTLIBRARIES = libgnuastro.la $(MAYBE_GNUMAKE) # Linking flags for the Gnuastro library. libgnuastro_la_LIBADD = $(top_builddir)/bootstrapped/lib/libgnu.la libgnuastro_la_LDFLAGS = -version-info $(GAL_LT_VERSION) $(CONFIG_LDADD) \ -lc -no-undefined # Gnuastro's GNU Make extensions libgnuastro_make_la: libgnuastro.la libgnuastro_make_la_LIBADD = libgnuastro.la libgnuastro_make_la_LDFLAGS = -version-info $(GAL_LT_VERSION) # Specify the library .c files libgnuastro_make_la_SOURCES = makeplugin.c libgnuastro_la_SOURCES = \ $(MAYBE_NUMPY_C) \ $(MAYBE_WCSDISTORTION) \ arithmetic.c \ arithmetic-and.c \ arithmetic-bitand.c \ arithmetic-bitlsh.c \ arithmetic-bitor.c \ arithmetic-bitrsh.c \ arithmetic-bitxor.c \ arithmetic-divide.c \ arithmetic-eq.c\ arithmetic-ge.c \ arithmetic-gt.c \ arithmetic-le.c \ arithmetic-lt.c \ arithmetic-minus.c \ arithmetic-modulo.c \ arithmetic-multiply.c \ arithmetic-ne.c \ arithmetic-or.c \ arithmetic-plus.c \ arithmetic-set.c \ array.c \ binary.c \ blank.c \ box.c \ checkset.c \ color.c \ convolve.c \ cosmology.c \ data.c \ ds9.c \ eps.c \ fit.c \ fits.c \ git.c \ interpolate.c \ jpeg.c \ kdtree.c \ label.c \ list.c \ match.c \ options.c \ pdf.c \ permutation.c \ pointer.c \ polygon.c \ pool.c \ qsort.c \ dimension.c \ speclines.c \ statistics.c \ table.c \ tableintern.c \ threads.c \ tiff.c \ tile.c \ tile-internal.c \ timing.c \ txt.c \ type.c \ units.c \ warp.c \ wcs.c # Installed headers, note that we are not blindly including all '.h' files # in the $(headersdir) directory. Some of the header files don't need to be # installed. pkginclude_HEADERS = gnuastro/config.h \ $(MAYBE_NUMPY_H) \ $(headersdir)/arithmetic.h \ $(headersdir)/array.h \ $(headersdir)/binary.h \ $(headersdir)/blank.h \ $(headersdir)/box.h \ $(headersdir)/color.h \ $(headersdir)/convolve.h \ $(headersdir)/cosmology.h \ $(headersdir)/data.h \ $(headersdir)/dimension.h \ $(headersdir)/ds9.h \ $(headersdir)/eps.h \ $(headersdir)/fit.h \ $(headersdir)/fits.h \ $(headersdir)/git.h \ $(headersdir)/interpolate.h \ $(headersdir)/jpeg.h \ $(headersdir)/kdtree.h \ $(headersdir)/label.h \ $(headersdir)/list.h \ $(headersdir)/match.h \ $(headersdir)/pdf.h \ $(headersdir)/permutation.h \ $(headersdir)/pointer.h \ $(headersdir)/polygon.h \ $(headersdir)/pool.h \ $(headersdir)/qsort.h \ $(headersdir)/speclines.h \ $(headersdir)/statistics.h \ $(headersdir)/table.h \ $(headersdir)/threads.h \ $(headersdir)/tiff.h \ $(headersdir)/tile.h \ $(headersdir)/txt.h \ $(headersdir)/type.h \ $(headersdir)/units.h \ $(headersdir)/warp.h \ $(headersdir)/wcs.h # Files to distribute in the tarball. These are internal headers and don't # need to be installed. Headers are only mentioned within the source files, # and if they are not explicitly mentioned somewhere in the Makefile, they # will not distributed, so we need to explicitly tell Automake to # distribute them here. internaldir=$(top_srcdir)/lib/gnuastro-internal EXTRA_DIST = gnuastro.pc.in \ $(headersdir)/README \ $(internaldir)/README \ $(internaldir)/arithmetic-and.h \ $(internaldir)/arithmetic-binary.h \ $(internaldir)/arithmetic-bitand.h \ $(internaldir)/arithmetic-bitlsh.h \ $(internaldir)/arithmetic-bitor.h \ $(internaldir)/arithmetic-bitrsh.h \ $(internaldir)/arithmetic-bitxor.h \ $(internaldir)/arithmetic-divide.h \ $(internaldir)/arithmetic-eq.h \ $(internaldir)/arithmetic-ge.h \ $(internaldir)/arithmetic-gt.h \ $(internaldir)/arithmetic-internal.h \ $(internaldir)/arithmetic-le.h \ $(internaldir)/arithmetic-lt.h \ $(internaldir)/arithmetic-minus.h \ $(internaldir)/arithmetic-modulo.h \ $(internaldir)/arithmetic-multiply.h \ $(internaldir)/arithmetic-ne.h \ $(internaldir)/arithmetic-or.h \ $(internaldir)/arithmetic-plus.h \ $(internaldir)/arithmetic-set.h \ $(internaldir)/checkset.h \ $(internaldir)/commonopts.h \ $(internaldir)/config.h.in \ $(internaldir)/fixedstringmacros.h \ $(internaldir)/options.h \ $(internaldir)/tableintern.h \ $(internaldir)/tile-internal.h \ $(internaldir)/timing.h \ $(internaldir)/wcsdistortion.h # Definitions for Gnuastro's the pkg-config file (inspired from GSL's # Makefile.am) pkgconfig_DATA = gnuastro.pc pkgconfigdir = $(libdir)/pkgconfig CLEANFILES = gnuastro.pc gnuastro/config.h # Build 'gnuastro/config.h' based on the information in the Makefile after # the Makefile has been built. gnuastro/config.h: Makefile $(internaldir)/config.h.in rm -f $@ $@.tmp $(MKDIR_P) gnuastro $(SED) -e 's|@VERSION[@]|$(VERSION)|g' \ -e 's|@HAVE_PYTHON[@]|$(HAVE_PYTHON)|g' \ -e 's|@SIZEOF_LONG[@]|$(SIZEOF_LONG)|g' \ -e 's|@SIZEOF_SIZE_T[@]|$(SIZEOF_SIZE_T)|g' \ -e 's|@HAVE_GNUMAKE_H[@]|$(HAVE_GNUMAKE_H)|g' \ -e 's|@HAVE_GSL_STEFFEN[@]|$(HAVE_GSL_STEFFEN)|g' \ -e 's|@HAVE_LIBGIT2[@]|$(HAVE_LIBGIT2_FOR_CONF)|g' \ -e 's|@HAVE_WCSLIB_DIS_H[@]|$(HAVE_WCSLIB_DIS_H)|g' \ -e 's|@HAVE_WCSLIB_MJDREF[@]|$(HAVE_WCSLIB_MJDREF)|g' \ -e 's|@HAVE_WCSLIB_OBSFIX[@]|$(HAVE_WCSLIB_OBSFIX)|g' \ -e 's|@HAVE_WCSLIB_WCSCCS[@]|$(HAVE_WCSLIB_WCSCCS)|g' \ -e 's|@HAVE_WCSLIB_VERSION[@]|$(HAVE_WCSLIB_VERSION)|g' \ -e 's|@HAVE_PTHREAD_BARRIER[@]|$(HAVE_PTHREAD_BARRIER)|g' \ -e 's|@RESTRICT_REPLACEMENT[@]|$(RESTRICT_REPLACEMENT)|g' \ -e 's|@HAVE_FITS_IS_REENTRANT[@]|$(HAVE_FITS_IS_REENTRANT)|g' \ $(internaldir)/config.h.in >> $@.tmp chmod a-w $@.tmp mv $@.tmp $@ # Build Gnuastro's pkg-config file similar to 'gnuastro/config.h'. gnuastro.pc: Makefile $(srcdir)/gnuastro.pc.in rm -f $@ $@.tmp ol=""; \ if [ x"$(HAVE_LIBJPEG)" = xyes ]; then ol="$$ol libjpeg"; fi; \ if [ x"$(HAVE_LIBLZMA)" = xyes ]; then ol="$$ol liblzma"; fi; \ if [ x"$(HAVE_LIBGIT2)" = xyes ]; then ol="$$ol libgit2"; fi; \ if [ x"$(HAVE_LIBTIFF)" = xyes ]; then ol="$$ol libtiff-4"; fi; \ $(SED) -e's|@prefix[@]|$(prefix)|g' \ -e"s|@optional_libs[@]|$$ol|g" \ -e's|@exec_prefix[@]|$(exec_prefix)|g' \ -e's|@libdir[@]|$(libdir)|g' \ -e's|@includedir[@]|$(includedir)|g' \ -e's|@LIBS[@]|$(LIBS)|g' \ -e's|@VERSION[@]|$(VERSION)|g' \ '$(srcdir)/$@.in' >> $@.tmp chmod a-w $@.tmp mv $@.tmp $@ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/Makefile.in�����������������������������������������������������������������������0000644�0001750�0001750�00000414413�14557513751�011617� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__pkginclude_HEADERS_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ "$(DESTDIR)$(pkgincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libgnuastro_la_DEPENDENCIES = \ $(top_builddir)/bootstrapped/lib/libgnu.la am__libgnuastro_la_SOURCES_DIST = python.c wcsdistortion.c \ arithmetic.c arithmetic-and.c arithmetic-bitand.c \ arithmetic-bitlsh.c arithmetic-bitor.c arithmetic-bitrsh.c \ arithmetic-bitxor.c arithmetic-divide.c arithmetic-eq.c \ arithmetic-ge.c arithmetic-gt.c arithmetic-le.c \ arithmetic-lt.c arithmetic-minus.c arithmetic-modulo.c \ arithmetic-multiply.c arithmetic-ne.c arithmetic-or.c \ arithmetic-plus.c arithmetic-set.c array.c binary.c blank.c \ box.c checkset.c color.c convolve.c cosmology.c data.c ds9.c \ eps.c fit.c fits.c git.c interpolate.c jpeg.c kdtree.c label.c \ list.c match.c options.c pdf.c permutation.c pointer.c \ polygon.c pool.c qsort.c dimension.c speclines.c statistics.c \ table.c tableintern.c threads.c tiff.c tile.c tile-internal.c \ timing.c txt.c type.c units.c warp.c wcs.c @COND_NUMPY_TRUE@am__objects_1 = python.lo @COND_HASWCSDIS_H_TRUE@am__objects_2 = wcsdistortion.lo am_libgnuastro_la_OBJECTS = $(am__objects_1) $(am__objects_2) \ arithmetic.lo arithmetic-and.lo arithmetic-bitand.lo \ arithmetic-bitlsh.lo arithmetic-bitor.lo arithmetic-bitrsh.lo \ arithmetic-bitxor.lo arithmetic-divide.lo arithmetic-eq.lo \ arithmetic-ge.lo arithmetic-gt.lo arithmetic-le.lo \ arithmetic-lt.lo arithmetic-minus.lo arithmetic-modulo.lo \ arithmetic-multiply.lo arithmetic-ne.lo arithmetic-or.lo \ arithmetic-plus.lo arithmetic-set.lo array.lo binary.lo \ blank.lo box.lo checkset.lo color.lo convolve.lo cosmology.lo \ data.lo ds9.lo eps.lo fit.lo fits.lo git.lo interpolate.lo \ jpeg.lo kdtree.lo label.lo list.lo match.lo options.lo pdf.lo \ permutation.lo pointer.lo polygon.lo pool.lo qsort.lo \ dimension.lo speclines.lo statistics.lo table.lo \ tableintern.lo threads.lo tiff.lo tile.lo tile-internal.lo \ timing.lo txt.lo type.lo units.lo warp.lo wcs.lo libgnuastro_la_OBJECTS = $(am_libgnuastro_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgnuastro_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libgnuastro_la_LDFLAGS) $(LDFLAGS) -o \ $@ libgnuastro_make_la_DEPENDENCIES = libgnuastro.la am_libgnuastro_make_la_OBJECTS = makeplugin.lo libgnuastro_make_la_OBJECTS = $(am_libgnuastro_make_la_OBJECTS) libgnuastro_make_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libgnuastro_make_la_LDFLAGS) \ $(LDFLAGS) -o $@ @COND_HASGNUMAKE_H_TRUE@am_libgnuastro_make_la_rpath = -rpath \ @COND_HASGNUMAKE_H_TRUE@ $(libdir) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/arithmetic-and.Plo \ ./$(DEPDIR)/arithmetic-bitand.Plo \ ./$(DEPDIR)/arithmetic-bitlsh.Plo \ ./$(DEPDIR)/arithmetic-bitor.Plo \ ./$(DEPDIR)/arithmetic-bitrsh.Plo \ ./$(DEPDIR)/arithmetic-bitxor.Plo \ ./$(DEPDIR)/arithmetic-divide.Plo \ ./$(DEPDIR)/arithmetic-eq.Plo ./$(DEPDIR)/arithmetic-ge.Plo \ ./$(DEPDIR)/arithmetic-gt.Plo ./$(DEPDIR)/arithmetic-le.Plo \ ./$(DEPDIR)/arithmetic-lt.Plo ./$(DEPDIR)/arithmetic-minus.Plo \ ./$(DEPDIR)/arithmetic-modulo.Plo \ ./$(DEPDIR)/arithmetic-multiply.Plo \ ./$(DEPDIR)/arithmetic-ne.Plo ./$(DEPDIR)/arithmetic-or.Plo \ ./$(DEPDIR)/arithmetic-plus.Plo ./$(DEPDIR)/arithmetic-set.Plo \ ./$(DEPDIR)/arithmetic.Plo ./$(DEPDIR)/array.Plo \ ./$(DEPDIR)/binary.Plo ./$(DEPDIR)/blank.Plo \ ./$(DEPDIR)/box.Plo ./$(DEPDIR)/checkset.Plo \ ./$(DEPDIR)/color.Plo ./$(DEPDIR)/convolve.Plo \ ./$(DEPDIR)/cosmology.Plo ./$(DEPDIR)/data.Plo \ ./$(DEPDIR)/dimension.Plo ./$(DEPDIR)/ds9.Plo \ ./$(DEPDIR)/eps.Plo ./$(DEPDIR)/fit.Plo ./$(DEPDIR)/fits.Plo \ ./$(DEPDIR)/git.Plo ./$(DEPDIR)/interpolate.Plo \ ./$(DEPDIR)/jpeg.Plo ./$(DEPDIR)/kdtree.Plo \ ./$(DEPDIR)/label.Plo ./$(DEPDIR)/list.Plo \ ./$(DEPDIR)/makeplugin.Plo ./$(DEPDIR)/match.Plo \ ./$(DEPDIR)/options.Plo ./$(DEPDIR)/pdf.Plo \ ./$(DEPDIR)/permutation.Plo ./$(DEPDIR)/pointer.Plo \ ./$(DEPDIR)/polygon.Plo ./$(DEPDIR)/pool.Plo \ ./$(DEPDIR)/python.Plo ./$(DEPDIR)/qsort.Plo \ ./$(DEPDIR)/speclines.Plo ./$(DEPDIR)/statistics.Plo \ ./$(DEPDIR)/table.Plo ./$(DEPDIR)/tableintern.Plo \ ./$(DEPDIR)/threads.Plo ./$(DEPDIR)/tiff.Plo \ ./$(DEPDIR)/tile-internal.Plo ./$(DEPDIR)/tile.Plo \ ./$(DEPDIR)/timing.Plo ./$(DEPDIR)/txt.Plo \ ./$(DEPDIR)/type.Plo ./$(DEPDIR)/units.Plo \ ./$(DEPDIR)/warp.Plo ./$(DEPDIR)/wcs.Plo \ ./$(DEPDIR)/wcsdistortion.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgnuastro_la_SOURCES) $(libgnuastro_make_la_SOURCES) DIST_SOURCES = $(am__libgnuastro_la_SOURCES_DIST) \ $(libgnuastro_make_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(pkgconfig_DATA) am__pkginclude_HEADERS_DIST = gnuastro/config.h $(headersdir)/python.h \ $(headersdir)/arithmetic.h $(headersdir)/array.h \ $(headersdir)/binary.h $(headersdir)/blank.h \ $(headersdir)/box.h $(headersdir)/color.h \ $(headersdir)/convolve.h $(headersdir)/cosmology.h \ $(headersdir)/data.h $(headersdir)/dimension.h \ $(headersdir)/ds9.h $(headersdir)/eps.h $(headersdir)/fit.h \ $(headersdir)/fits.h $(headersdir)/git.h \ $(headersdir)/interpolate.h $(headersdir)/jpeg.h \ $(headersdir)/kdtree.h $(headersdir)/label.h \ $(headersdir)/list.h $(headersdir)/match.h $(headersdir)/pdf.h \ $(headersdir)/permutation.h $(headersdir)/pointer.h \ $(headersdir)/polygon.h $(headersdir)/pool.h \ $(headersdir)/qsort.h $(headersdir)/speclines.h \ $(headersdir)/statistics.h $(headersdir)/table.h \ $(headersdir)/threads.h $(headersdir)/tiff.h \ $(headersdir)/tile.h $(headersdir)/txt.h $(headersdir)/type.h \ $(headersdir)/units.h $(headersdir)/warp.h $(headersdir)/wcs.h HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Conditional compilation headersdir = $(top_srcdir)/lib/gnuastro @COND_HASWCSDIS_H_TRUE@MAYBE_WCSDISTORTION = wcsdistortion.c @COND_HASGNUMAKE_H_TRUE@MAYBE_GNUMAKE = libgnuastro_make.la @COND_NUMPY_TRUE@MAYBE_NUMPY_C = python.c @COND_NUMPY_TRUE@MAYBE_NUMPY_H = $(headersdir)/python.h @COND_NUMPY_TRUE@MAYBE_NUMPY_INCLUDE = -I$(NUMPY_INCLUDE_DIR) -I$(PYTHON_INCLUDE_DIR) AM_CPPFLAGS = -I\$(top_builddir)/bootstrapped/lib \ -I\$(top_srcdir)/bootstrapped/lib \ -DSYSCONFIG_DIR=\"$(sysconfdir)\" \ $(MAYBE_NUMPY_INCLUDE) # Define the main compiled library file, its Libtool version and also link # with Gnulib's compiled library for this system. We are doing this so the # Gnuastro library functions can also benefit from Gnulib's many great # features. This also avoids the need for the programs to link separately # with Gnulib, they only need to link with the Gnuastro library. lib_LTLIBRARIES = libgnuastro.la $(MAYBE_GNUMAKE) # Linking flags for the Gnuastro library. libgnuastro_la_LIBADD = $(top_builddir)/bootstrapped/lib/libgnu.la libgnuastro_la_LDFLAGS = -version-info $(GAL_LT_VERSION) $(CONFIG_LDADD) \ -lc -no-undefined libgnuastro_make_la_LIBADD = libgnuastro.la libgnuastro_make_la_LDFLAGS = -version-info $(GAL_LT_VERSION) # Specify the library .c files libgnuastro_make_la_SOURCES = makeplugin.c libgnuastro_la_SOURCES = \ $(MAYBE_NUMPY_C) \ $(MAYBE_WCSDISTORTION) \ arithmetic.c \ arithmetic-and.c \ arithmetic-bitand.c \ arithmetic-bitlsh.c \ arithmetic-bitor.c \ arithmetic-bitrsh.c \ arithmetic-bitxor.c \ arithmetic-divide.c \ arithmetic-eq.c\ arithmetic-ge.c \ arithmetic-gt.c \ arithmetic-le.c \ arithmetic-lt.c \ arithmetic-minus.c \ arithmetic-modulo.c \ arithmetic-multiply.c \ arithmetic-ne.c \ arithmetic-or.c \ arithmetic-plus.c \ arithmetic-set.c \ array.c \ binary.c \ blank.c \ box.c \ checkset.c \ color.c \ convolve.c \ cosmology.c \ data.c \ ds9.c \ eps.c \ fit.c \ fits.c \ git.c \ interpolate.c \ jpeg.c \ kdtree.c \ label.c \ list.c \ match.c \ options.c \ pdf.c \ permutation.c \ pointer.c \ polygon.c \ pool.c \ qsort.c \ dimension.c \ speclines.c \ statistics.c \ table.c \ tableintern.c \ threads.c \ tiff.c \ tile.c \ tile-internal.c \ timing.c \ txt.c \ type.c \ units.c \ warp.c \ wcs.c # Installed headers, note that we are not blindly including all '.h' files # in the $(headersdir) directory. Some of the header files don't need to be # installed. pkginclude_HEADERS = gnuastro/config.h \ $(MAYBE_NUMPY_H) \ $(headersdir)/arithmetic.h \ $(headersdir)/array.h \ $(headersdir)/binary.h \ $(headersdir)/blank.h \ $(headersdir)/box.h \ $(headersdir)/color.h \ $(headersdir)/convolve.h \ $(headersdir)/cosmology.h \ $(headersdir)/data.h \ $(headersdir)/dimension.h \ $(headersdir)/ds9.h \ $(headersdir)/eps.h \ $(headersdir)/fit.h \ $(headersdir)/fits.h \ $(headersdir)/git.h \ $(headersdir)/interpolate.h \ $(headersdir)/jpeg.h \ $(headersdir)/kdtree.h \ $(headersdir)/label.h \ $(headersdir)/list.h \ $(headersdir)/match.h \ $(headersdir)/pdf.h \ $(headersdir)/permutation.h \ $(headersdir)/pointer.h \ $(headersdir)/polygon.h \ $(headersdir)/pool.h \ $(headersdir)/qsort.h \ $(headersdir)/speclines.h \ $(headersdir)/statistics.h \ $(headersdir)/table.h \ $(headersdir)/threads.h \ $(headersdir)/tiff.h \ $(headersdir)/tile.h \ $(headersdir)/txt.h \ $(headersdir)/type.h \ $(headersdir)/units.h \ $(headersdir)/warp.h \ $(headersdir)/wcs.h # Files to distribute in the tarball. These are internal headers and don't # need to be installed. Headers are only mentioned within the source files, # and if they are not explicitly mentioned somewhere in the Makefile, they # will not distributed, so we need to explicitly tell Automake to # distribute them here. internaldir = $(top_srcdir)/lib/gnuastro-internal EXTRA_DIST = gnuastro.pc.in \ $(headersdir)/README \ $(internaldir)/README \ $(internaldir)/arithmetic-and.h \ $(internaldir)/arithmetic-binary.h \ $(internaldir)/arithmetic-bitand.h \ $(internaldir)/arithmetic-bitlsh.h \ $(internaldir)/arithmetic-bitor.h \ $(internaldir)/arithmetic-bitrsh.h \ $(internaldir)/arithmetic-bitxor.h \ $(internaldir)/arithmetic-divide.h \ $(internaldir)/arithmetic-eq.h \ $(internaldir)/arithmetic-ge.h \ $(internaldir)/arithmetic-gt.h \ $(internaldir)/arithmetic-internal.h \ $(internaldir)/arithmetic-le.h \ $(internaldir)/arithmetic-lt.h \ $(internaldir)/arithmetic-minus.h \ $(internaldir)/arithmetic-modulo.h \ $(internaldir)/arithmetic-multiply.h \ $(internaldir)/arithmetic-ne.h \ $(internaldir)/arithmetic-or.h \ $(internaldir)/arithmetic-plus.h \ $(internaldir)/arithmetic-set.h \ $(internaldir)/checkset.h \ $(internaldir)/commonopts.h \ $(internaldir)/config.h.in \ $(internaldir)/fixedstringmacros.h \ $(internaldir)/options.h \ $(internaldir)/tableintern.h \ $(internaldir)/tile-internal.h \ $(internaldir)/timing.h \ $(internaldir)/wcsdistortion.h # Definitions for Gnuastro's the pkg-config file (inspired from GSL's # Makefile.am) pkgconfig_DATA = gnuastro.pc pkgconfigdir = $(libdir)/pkgconfig CLEANFILES = gnuastro.pc gnuastro/config.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu lib/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgnuastro.la: $(libgnuastro_la_OBJECTS) $(libgnuastro_la_DEPENDENCIES) $(EXTRA_libgnuastro_la_DEPENDENCIES) $(AM_V_CCLD)$(libgnuastro_la_LINK) -rpath $(libdir) $(libgnuastro_la_OBJECTS) $(libgnuastro_la_LIBADD) $(LIBS) libgnuastro_make.la: $(libgnuastro_make_la_OBJECTS) $(libgnuastro_make_la_DEPENDENCIES) $(EXTRA_libgnuastro_make_la_DEPENDENCIES) $(AM_V_CCLD)$(libgnuastro_make_la_LINK) $(am_libgnuastro_make_la_rpath) $(libgnuastro_make_la_OBJECTS) $(libgnuastro_make_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-and.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-bitand.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-bitlsh.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-bitor.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-bitrsh.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-bitxor.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-divide.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-eq.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-ge.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-gt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-le.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-lt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-minus.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-modulo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-multiply.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-ne.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-or.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-plus.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic-set.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithmetic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binary.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blank.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/box.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkset.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convolve.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cosmology.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/data.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dimension.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ds9.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eps.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fits.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/git.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interpolate.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpeg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kdtree.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/label.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/makeplugin.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/match.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/options.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permutation.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pointer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/polygon.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pool.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/python.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qsort.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speclines.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statistics.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/table.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tableintern.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threads.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiff.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tile-internal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timing.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/txt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/units.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/warp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcsdistortion.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/arithmetic-and.Plo -rm -f ./$(DEPDIR)/arithmetic-bitand.Plo -rm -f ./$(DEPDIR)/arithmetic-bitlsh.Plo -rm -f ./$(DEPDIR)/arithmetic-bitor.Plo -rm -f ./$(DEPDIR)/arithmetic-bitrsh.Plo -rm -f ./$(DEPDIR)/arithmetic-bitxor.Plo -rm -f ./$(DEPDIR)/arithmetic-divide.Plo -rm -f ./$(DEPDIR)/arithmetic-eq.Plo -rm -f ./$(DEPDIR)/arithmetic-ge.Plo -rm -f ./$(DEPDIR)/arithmetic-gt.Plo -rm -f ./$(DEPDIR)/arithmetic-le.Plo -rm -f ./$(DEPDIR)/arithmetic-lt.Plo -rm -f ./$(DEPDIR)/arithmetic-minus.Plo -rm -f ./$(DEPDIR)/arithmetic-modulo.Plo -rm -f ./$(DEPDIR)/arithmetic-multiply.Plo -rm -f ./$(DEPDIR)/arithmetic-ne.Plo -rm -f ./$(DEPDIR)/arithmetic-or.Plo -rm -f ./$(DEPDIR)/arithmetic-plus.Plo -rm -f ./$(DEPDIR)/arithmetic-set.Plo -rm -f ./$(DEPDIR)/arithmetic.Plo -rm -f ./$(DEPDIR)/array.Plo -rm -f ./$(DEPDIR)/binary.Plo -rm -f ./$(DEPDIR)/blank.Plo -rm -f ./$(DEPDIR)/box.Plo -rm -f ./$(DEPDIR)/checkset.Plo -rm -f ./$(DEPDIR)/color.Plo -rm -f ./$(DEPDIR)/convolve.Plo -rm -f ./$(DEPDIR)/cosmology.Plo -rm -f ./$(DEPDIR)/data.Plo -rm -f ./$(DEPDIR)/dimension.Plo -rm -f ./$(DEPDIR)/ds9.Plo -rm -f ./$(DEPDIR)/eps.Plo -rm -f ./$(DEPDIR)/fit.Plo -rm -f ./$(DEPDIR)/fits.Plo -rm -f ./$(DEPDIR)/git.Plo -rm -f ./$(DEPDIR)/interpolate.Plo -rm -f ./$(DEPDIR)/jpeg.Plo -rm -f ./$(DEPDIR)/kdtree.Plo -rm -f ./$(DEPDIR)/label.Plo -rm -f ./$(DEPDIR)/list.Plo -rm -f ./$(DEPDIR)/makeplugin.Plo -rm -f ./$(DEPDIR)/match.Plo -rm -f ./$(DEPDIR)/options.Plo -rm -f ./$(DEPDIR)/pdf.Plo -rm -f ./$(DEPDIR)/permutation.Plo -rm -f ./$(DEPDIR)/pointer.Plo -rm -f ./$(DEPDIR)/polygon.Plo -rm -f ./$(DEPDIR)/pool.Plo -rm -f ./$(DEPDIR)/python.Plo -rm -f ./$(DEPDIR)/qsort.Plo -rm -f ./$(DEPDIR)/speclines.Plo -rm -f ./$(DEPDIR)/statistics.Plo -rm -f ./$(DEPDIR)/table.Plo -rm -f ./$(DEPDIR)/tableintern.Plo -rm -f ./$(DEPDIR)/threads.Plo -rm -f ./$(DEPDIR)/tiff.Plo -rm -f ./$(DEPDIR)/tile-internal.Plo -rm -f ./$(DEPDIR)/tile.Plo -rm -f ./$(DEPDIR)/timing.Plo -rm -f ./$(DEPDIR)/txt.Plo -rm -f ./$(DEPDIR)/type.Plo -rm -f ./$(DEPDIR)/units.Plo -rm -f ./$(DEPDIR)/warp.Plo -rm -f ./$(DEPDIR)/wcs.Plo -rm -f ./$(DEPDIR)/wcsdistortion.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgconfigDATA install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/arithmetic-and.Plo -rm -f ./$(DEPDIR)/arithmetic-bitand.Plo -rm -f ./$(DEPDIR)/arithmetic-bitlsh.Plo -rm -f ./$(DEPDIR)/arithmetic-bitor.Plo -rm -f ./$(DEPDIR)/arithmetic-bitrsh.Plo -rm -f ./$(DEPDIR)/arithmetic-bitxor.Plo -rm -f ./$(DEPDIR)/arithmetic-divide.Plo -rm -f ./$(DEPDIR)/arithmetic-eq.Plo -rm -f ./$(DEPDIR)/arithmetic-ge.Plo -rm -f ./$(DEPDIR)/arithmetic-gt.Plo -rm -f ./$(DEPDIR)/arithmetic-le.Plo -rm -f ./$(DEPDIR)/arithmetic-lt.Plo -rm -f ./$(DEPDIR)/arithmetic-minus.Plo -rm -f ./$(DEPDIR)/arithmetic-modulo.Plo -rm -f ./$(DEPDIR)/arithmetic-multiply.Plo -rm -f ./$(DEPDIR)/arithmetic-ne.Plo -rm -f ./$(DEPDIR)/arithmetic-or.Plo -rm -f ./$(DEPDIR)/arithmetic-plus.Plo -rm -f ./$(DEPDIR)/arithmetic-set.Plo -rm -f ./$(DEPDIR)/arithmetic.Plo -rm -f ./$(DEPDIR)/array.Plo -rm -f ./$(DEPDIR)/binary.Plo -rm -f ./$(DEPDIR)/blank.Plo -rm -f ./$(DEPDIR)/box.Plo -rm -f ./$(DEPDIR)/checkset.Plo -rm -f ./$(DEPDIR)/color.Plo -rm -f ./$(DEPDIR)/convolve.Plo -rm -f ./$(DEPDIR)/cosmology.Plo -rm -f ./$(DEPDIR)/data.Plo -rm -f ./$(DEPDIR)/dimension.Plo -rm -f ./$(DEPDIR)/ds9.Plo -rm -f ./$(DEPDIR)/eps.Plo -rm -f ./$(DEPDIR)/fit.Plo -rm -f ./$(DEPDIR)/fits.Plo -rm -f ./$(DEPDIR)/git.Plo -rm -f ./$(DEPDIR)/interpolate.Plo -rm -f ./$(DEPDIR)/jpeg.Plo -rm -f ./$(DEPDIR)/kdtree.Plo -rm -f ./$(DEPDIR)/label.Plo -rm -f ./$(DEPDIR)/list.Plo -rm -f ./$(DEPDIR)/makeplugin.Plo -rm -f ./$(DEPDIR)/match.Plo -rm -f ./$(DEPDIR)/options.Plo -rm -f ./$(DEPDIR)/pdf.Plo -rm -f ./$(DEPDIR)/permutation.Plo -rm -f ./$(DEPDIR)/pointer.Plo -rm -f ./$(DEPDIR)/polygon.Plo -rm -f ./$(DEPDIR)/pool.Plo -rm -f ./$(DEPDIR)/python.Plo -rm -f ./$(DEPDIR)/qsort.Plo -rm -f ./$(DEPDIR)/speclines.Plo -rm -f ./$(DEPDIR)/statistics.Plo -rm -f ./$(DEPDIR)/table.Plo -rm -f ./$(DEPDIR)/tableintern.Plo -rm -f ./$(DEPDIR)/threads.Plo -rm -f ./$(DEPDIR)/tiff.Plo -rm -f ./$(DEPDIR)/tile-internal.Plo -rm -f ./$(DEPDIR)/tile.Plo -rm -f ./$(DEPDIR)/timing.Plo -rm -f ./$(DEPDIR)/txt.Plo -rm -f ./$(DEPDIR)/type.Plo -rm -f ./$(DEPDIR)/units.Plo -rm -f ./$(DEPDIR)/warp.Plo -rm -f ./$(DEPDIR)/wcs.Plo -rm -f ./$(DEPDIR)/wcsdistortion.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES uninstall-pkgconfigDATA \ uninstall-pkgincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-pkgconfigDATA install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES \ uninstall-pkgconfigDATA uninstall-pkgincludeHEADERS .PRECIOUS: Makefile # Gnuastro's GNU Make extensions libgnuastro_make_la: libgnuastro.la # Build 'gnuastro/config.h' based on the information in the Makefile after # the Makefile has been built. gnuastro/config.h: Makefile $(internaldir)/config.h.in rm -f $@ $@.tmp $(MKDIR_P) gnuastro $(SED) -e 's|@VERSION[@]|$(VERSION)|g' \ -e 's|@HAVE_PYTHON[@]|$(HAVE_PYTHON)|g' \ -e 's|@SIZEOF_LONG[@]|$(SIZEOF_LONG)|g' \ -e 's|@SIZEOF_SIZE_T[@]|$(SIZEOF_SIZE_T)|g' \ -e 's|@HAVE_GNUMAKE_H[@]|$(HAVE_GNUMAKE_H)|g' \ -e 's|@HAVE_GSL_STEFFEN[@]|$(HAVE_GSL_STEFFEN)|g' \ -e 's|@HAVE_LIBGIT2[@]|$(HAVE_LIBGIT2_FOR_CONF)|g' \ -e 's|@HAVE_WCSLIB_DIS_H[@]|$(HAVE_WCSLIB_DIS_H)|g' \ -e 's|@HAVE_WCSLIB_MJDREF[@]|$(HAVE_WCSLIB_MJDREF)|g' \ -e 's|@HAVE_WCSLIB_OBSFIX[@]|$(HAVE_WCSLIB_OBSFIX)|g' \ -e 's|@HAVE_WCSLIB_WCSCCS[@]|$(HAVE_WCSLIB_WCSCCS)|g' \ -e 's|@HAVE_WCSLIB_VERSION[@]|$(HAVE_WCSLIB_VERSION)|g' \ -e 's|@HAVE_PTHREAD_BARRIER[@]|$(HAVE_PTHREAD_BARRIER)|g' \ -e 's|@RESTRICT_REPLACEMENT[@]|$(RESTRICT_REPLACEMENT)|g' \ -e 's|@HAVE_FITS_IS_REENTRANT[@]|$(HAVE_FITS_IS_REENTRANT)|g' \ $(internaldir)/config.h.in >> $@.tmp chmod a-w $@.tmp mv $@.tmp $@ # Build Gnuastro's pkg-config file similar to 'gnuastro/config.h'. gnuastro.pc: Makefile $(srcdir)/gnuastro.pc.in rm -f $@ $@.tmp ol=""; \ if [ x"$(HAVE_LIBJPEG)" = xyes ]; then ol="$$ol libjpeg"; fi; \ if [ x"$(HAVE_LIBLZMA)" = xyes ]; then ol="$$ol liblzma"; fi; \ if [ x"$(HAVE_LIBGIT2)" = xyes ]; then ol="$$ol libgit2"; fi; \ if [ x"$(HAVE_LIBTIFF)" = xyes ]; then ol="$$ol libtiff-4"; fi; \ $(SED) -e's|@prefix[@]|$(prefix)|g' \ -e"s|@optional_libs[@]|$$ol|g" \ -e's|@exec_prefix[@]|$(exec_prefix)|g' \ -e's|@libdir[@]|$(libdir)|g' \ -e's|@includedir[@]|$(includedir)|g' \ -e's|@LIBS[@]|$(LIBS)|g' \ -e's|@VERSION[@]|$(VERSION)|g' \ '$(srcdir)/$@.in' >> $@.tmp chmod a-w $@.tmp mv $@.tmp $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/python.c��������������������������������������������������������������������������0000644�0001750�0001750�00000007412�14551337306�011226� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* python -- Functions to assist Python wrappers using Gnuastro's library. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Jash Shah <jash28582@gmail.com> Contributing author(s): Mohammad Akhlaghi <mohammad@akhlaghi.org> Copyright (C) 2022-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <errno.h> #include <error.h> /* This macro needs to be defined before including any NumPy headers to avoid the compiler from raising a warning message. */ #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION /* This macro needs to be defined before including any NumPy headers so that the NumPY C-API can be used without having to call the 'import_arra' function as mentioned here: https://numpy.org/doc/1.17/reference/c-api.array.html#c.NO_IMPORT_ARRAY This also helps to avoid any "defined but not used" while compiling this file. */ #define NO_IMPORT_ARRAY /* Import Numpy's necessary header(s). */ #include <numpy/arrayobject.h> /* Gnuastro's Python headers. */ #include <gnuastro/python.h> /************************************************************* ************** Type codes *************** *************************************************************/ /* Convert Gnuastro type to NumPy datatype. Currently only converting types directly compatible between the two. */ int gal_python_type_to_numpy(uint8_t type) { switch (type) { case GAL_TYPE_INT8: return NPY_INT8; case GAL_TYPE_INT16: return NPY_INT16; case GAL_TYPE_INT32: return NPY_INT32; case GAL_TYPE_INT64: return NPY_LONG; case GAL_TYPE_UINT8: return NPY_UINT8; case GAL_TYPE_UINT16: return NPY_UINT16; case GAL_TYPE_UINT32: return NPY_UINT32; case GAL_TYPE_UINT64: return NPY_UINT64; case GAL_TYPE_FLOAT32: return NPY_FLOAT32; case GAL_TYPE_FLOAT64: return NPY_FLOAT64; case GAL_TYPE_STRING: return NPY_STRING; default: error(EXIT_FAILURE, 0, "%s: type code %d is not convertible" "to NumPy.", __func__, type); } return GAL_TYPE_INVALID; } /* Convert Numpy datatype to Gnuastro type. Currently only converting types directly compatible between the two. */ uint8_t gal_python_type_from_numpy(int type) { switch (type) { case NPY_INT8: return GAL_TYPE_INT8; case NPY_INT16: return GAL_TYPE_INT16; case NPY_INT32: return GAL_TYPE_INT32; case NPY_LONG: return GAL_TYPE_INT64; case NPY_UINT8: return GAL_TYPE_UINT8; case NPY_UINT16: return GAL_TYPE_UINT16; case NPY_UINT32: return GAL_TYPE_UINT32; case NPY_UINT64: return GAL_TYPE_UINT64; case NPY_FLOAT32: return GAL_TYPE_FLOAT32; case NPY_FLOAT64: return GAL_TYPE_FLOAT64; case NPY_COMPLEX64: return GAL_TYPE_COMPLEX64; case NPY_STRING: return GAL_TYPE_STRING; default: error(EXIT_FAILURE, 0, "%s: type code %d is not convertible" "to Gnuastro.", __func__, type); } return GAL_TYPE_INVALID; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/wcsdistortion.c�������������������������������������������������������������������0000644�0001750�0001750�00000226773�14551337306�012635� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* wcsdistortion -- Manipulation of distortions in WCS. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Sachin Kumar Singh <sachinkumarsingh092@gmail.com> Contributing author(s): Mohammad Akhlaghi <mohammad@akhlaghi.org> Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <wcslib/wcslib.h> #include <gsl/gsl_linalg.h> #include <gsl/gsl_multifit.h> #include <gnuastro/wcs.h> #include <gnuastro/fits.h> #include <gnuastro-internal/wcsdistortion.h> /* Internally used macro(s) to help in the processing. */ #define wcsdistortion_max(a,b) \ ({ __typeof__ (a) _a = (a); \ __typeof__ (b) _b = (b); \ _a > _b ? _a : _b; }) /* Declarations to avoid ordering problems. */ static void wcsdistortion_calc_tpveq(struct wcsprm *wcs, double cd[2][2], double tpvu[8][8], double tpvv[8][8]); static double wcsdistortion_calcsip(size_t axis, size_t m, size_t n, double tpvu[8][8], double tpvv[8][8]); /**************************************************************/ /********** Reading utilities ************/ /**************************************************************/ /* Extract the required pv parameters from wcs. */ static void wcsdistortion_get_tpvparams(struct wcsprm *wcs, double cd[2][2], double *pv1, double *pv2) { const char *cp; double *temp_cd=NULL; struct dpkey *keyp=NULL; size_t i, j, k=0, index=0; struct disprm *disseq=NULL; /* Make sure a WCS structure is actually given. */ if(wcs==NULL) error(EXIT_FAILURE, 0, "%s: input WCS structure is NULL", __func__); /* For easy reading. */ disseq=wcs->lin.disseq; keyp=disseq->dp; /* Fill the 2-times allocated CD array (cd[][]). Note that the required CD matix is extracted using the `gal_wcs_wrap_matrix` as a single allocated array (temp_cd[]), that is then used to fill cd[][]. */ temp_cd=gal_wcs_warp_matrix(wcs); for(i=0; i<2; ++i) for(j=0; j<2; ++j) { /* If a value is present store it, else store 0. */ if(temp_cd[k] != 0) cd[i][j]=temp_cd[k++]; else cd[i][j]=0; /* For a check: printf("CD%ld_%ld\t%.10E\n", i+1, j+1, cd[i][j]); */ } for(i=0; i<disseq->ndp; ++i, ++keyp) { /* For axis1. */ if (keyp->j == 1) { if ( keyp->field[0] == '\0' ) continue; cp = strchr(keyp->field, '.') + 1; if (strncmp(cp, "TPV.", 4) != 0) continue; cp += 4; sscanf(cp, "%zu", &index); pv1[index]=disseq->dp[i].value.f; /* For a check printf("PV1_%ld\t%.10f\n", index, pv1[index]); */ } /* For axis2. */ else if (keyp->j == 2) { if ( keyp->field[0] == '\0' ) continue; cp = strchr(keyp->field, '.') + 1; if (strncmp(cp, "TPV.", 4) != 0) continue; cp += 4; sscanf(cp, "%zu", &index); pv2[index]=disseq->dp[i].value.f; /* For a check printf("PV2_%ld\t%.10f\n", index, pv2[index]); */ } else { error(EXIT_FAILURE, 0, "%s: No such axis present!", __func__); break; } } /* To check a full array: for(i = 0; i < 40; ++i) printf("PV2_%ld\t%.10f\n", i, pv2[i]); */ } /* Extract the required sip parameters from wcs. */ static void wcsdistortion_get_sipparams(struct wcsprm *wcs, double cd[2][2], double a_coeff[5][5], double b_coeff[5][5]) { const char *cp; double *temp_cd=NULL; struct dpkey *keyp=NULL; struct disprm *dispre=NULL; size_t i=0, j=0, m=0, n=0, k=0; /* Make sure a WCS structure is actually given. Note that 'wcs->lin' is not a pointer, but the full structure. So it is always present. */ if(wcs==NULL) error(EXIT_FAILURE, 0, "%s: input WCS structure is NULL", __func__); if(wcs->lin.dispre == NULL) error(EXIT_FAILURE, 0, "%s: input WCS structure's 'lin.dispre' is NULL", __func__); /* For easy reading. */ dispre=wcs->lin.dispre; keyp=dispre->dp; /* Fill the 2-times allocated CD array (cd[][]). Note that the required CD matix is extracted using the `gal_wcs_wrap_matrix` as a single allocated array (temp_cd[]), that is then used to fill cd[][]. */ temp_cd=gal_wcs_warp_matrix(wcs); for(i=0,k=0; i<2; ++i) for(j=0; j<2; ++j) { /* If a value is present store it, else store 0. */ if(temp_cd[k] != 0) cd[i][j]=temp_cd[k++]; else cd[i][j]=0; /* For a check: printf("CD%ld_%ld\t%.10E\n", i+1, j+1, cd[i][j]); */ } /* Extract the SIP values from the strings and numbers inside the wcsprm. */ for(i=0; i<dispre->ndp; ++i, ++keyp) { /* For axis1. */ if (keyp->j == 1) { if ( keyp->field[0] == '\0' ) continue; cp = strchr(keyp->field, '.') + 1; if (strncmp(cp, "SIP.FWD.", 8) != 0) continue; cp += 8; sscanf(cp, "%zu_%zu", &m, &n); a_coeff[m][n]=dispre->dp[i].value.f; /*For a check. printf("A_%ld_%ld =\t %.10E\n", m, n, dispre->dp[i].value.f); */ } /* For axis2. */ else if (keyp->j == 2) { if ( keyp->field[0] == '\0' ) continue; cp = strchr(keyp->field, '.') + 1; if (strncmp(cp, "SIP.FWD.", 8) != 0) continue; cp += 8; sscanf(cp, "%zu_%zu", &m, &n); b_coeff[m][n]=dispre->dp[i].value.f; /*For a check. printf("B_%ld_%ld =\t %.10E\n", m, n, dispre->dp[i].value.f); */ } else error(EXIT_FAILURE, 0, "%s: No such axis present!", __func__); } } /* Extract sip coefficients from the polynomial equation. */ static void wcsdistortion_get_sipcoeff(struct wcsprm *wcs, size_t *a_order, size_t *b_order, double a_coeff[5][5], double b_coeff[5][5]) { size_t m, n; double val=0; size_t i, j, k; double cd[2][2]; double tpvu[8][8], tpvv[8][8]; /* Initialise the 2d matrices. */ for(i=0; i<2; ++i) for(j=0; j<2; ++j) cd[i][j]=0; for(i=0; i<8; ++i) for(j=0; j<8; ++j) { tpvu[i][j]=0; tpvv[i][j]=0; } /* Calculate the TPV elements. */ wcsdistortion_calc_tpveq(wcs, cd, tpvu, tpvv); for(i=0,k=0; i<2; ++i) for(j=0; j<2; ++j) { /* If a value is present store it, else store 0.*/ if((wcs->cd)[i] != 0) cd[i][j]=(wcs->cd)[k++]; else cd[i][j]=0; /* For a check: printf("CD%ld_%ld\t%.10lf\n", i+1, j+1, cd[i][j]); */ } for(m=0; m<=4; ++m) for(n=0; n<=4; ++n) { /*For axis = 1*/ val=wcsdistortion_calcsip(1, m, n, tpvu, tpvv); if(val != 0) { a_coeff[m][n]=val; *a_order=wcsdistortion_max(*a_order, wcsdistortion_max(m,n)); } else a_coeff[m][n]=0; /*For axis = 2*/ val=wcsdistortion_calcsip(2, m, n, tpvu, tpvv); if(val != 0) { b_coeff[m][n]=val; *b_order=wcsdistortion_max(*b_order, wcsdistortion_max(m,n)); } else b_coeff[m][n]=0; } /*For a check. for(m=0;m<=4;++m) for(n=0;n<=4;++n) printf("A_%ld_%ld = %.10E \t B_%ld_%ld = %.10E\n", m, n, a_coeff[m][n], m, n, b_coeff[m][n]); */ } /**************************************************************/ /********** Intermidiate Equations ************/ /**************************************************************/ /* Intermidiate equations formed during pv->sip conversions. */ static void wcsdistortion_intermidate_tpveq(double cd[2][2], double *pv1, double *pv2, double k[5][5], double l[5][5]) { /*Intermidate polynomials, k[i][j] and l[i][j]. See Appendix A of the SPIE proceedings paper at http://web.ipac.caltech.edu/staff/shupe/reprints/SIP_to_PV_SPIE2012.pdf The work described in that paper is extended to 7th order. References and citations: "More flexibility in representing geometric distortion in astronomical images," Shupe, David L.; Laher, Russ R.; Storrie-Lombardi, Lisa; Surace, Jason; Grillmair, Carl; Levitan, David; Sesar, Branimir, 2012, in Software and Cyberinfrastructure for Astronomy II. Proceedings of the SPIE, Volume 8451, article id. 84511M. */ k[0][0] = pv1[0]; l[0][0] = pv2[0]; k[0][1] = ( cd[0][1] * pv1[1] + cd[1][1] * pv1[2] ); l[0][1] = ( cd[0][1] * pv2[2] + cd[1][1] * pv2[1] ); k[1][0]= ( cd[0][0] * pv1[1] + cd[1][0] * pv1[2] ); l[1][0]= ( cd[0][0] * pv2[2] + cd[1][0] * pv2[1] ); k[0][2] = ( cd[0][1] * cd[0][1] * pv1[4] + cd[0][1] * cd[1][1] * pv1[5] + cd[1][1] * cd[1][1] * pv1[6] ); l[0][2] = ( cd[0][1] * cd[0][1] * pv2[6] + cd[0][1] * cd[1][1] * pv2[5] + cd[1][1] * cd[1][1] * pv2[4] ); k[1][1] = ( 2*cd[0][0] * cd[0][1] * pv1[4] + cd[0][0] * cd[1][1] * pv1[5] + cd[0][1] * cd[1][0] * pv1[5] + 2*cd[1][0] * cd[1][1] * pv1[6] ); l[1][1] = ( 2*cd[0][0] * cd[0][1] * pv2[6] + cd[0][0] * cd[1][1] * pv2[5] + cd[0][1] * cd[1][0] * pv2[5] + 2*cd[1][0] * cd[1][1] * pv2[4] ); k[2][0] = ( cd[0][0] * cd[0][0] * pv1[4] + cd[0][0] * cd[1][0] * pv1[5] + cd[1][0] * cd[1][0] * pv1[6] ); l[2][0] = ( cd[0][0] * cd[0][0] * pv2[6] + cd[0][0] * cd[1][0] * pv2[5] + cd[1][0] * cd[1][0] * pv2[4] ); k[0][3] = ( cd[0][1] * cd[0][1] * cd[0][1] * pv1[7] + cd[0][1] * cd[0][1] * cd[1][1] * pv1[8] + cd[0][1] * cd[1][1] * cd[1][1] * pv1[9] + cd[1][1] * cd[1][1] * cd[1][1] * pv1[10] ); l[0][3] = ( cd[0][1] * cd[0][1] * cd[0][1] * pv2[10] + cd[0][1] * cd[0][1] * cd[1][1] * pv2[9] + cd[0][1] * cd[1][1] * cd[1][1] * pv2[8] + cd[1][1] * cd[1][1] * cd[1][1] * pv2[7] ); k[1][2] = ( 3*cd[0][0] * cd[0][1] * cd[0][1] * pv1[7] + 2*cd[0][0] * cd[0][1] * cd[1][1] * pv1[8] + cd[0][0] * cd[1][1] * cd[1][1] * pv1[9] + cd[0][1] * cd[0][1] * cd[1][0] * pv1[8] + 2*cd[0][1] * cd[1][0] * cd[1][1] * pv1[9] + 3*cd[1][0] * cd[1][1] * cd[1][1] * pv1[10] ); l[1][2] = ( 3*cd[0][0] * cd[0][1] * cd[0][1] * pv2[10] + 2*cd[0][0] * cd[0][1] * cd[1][1] * pv2[9] + cd[0][0] * cd[1][1] * cd[1][1] * pv2[8] + cd[0][1] * cd[0][1] * cd[1][0] * pv2[9] + 2*cd[0][1] * cd[1][0] * cd[1][1] * pv2[8] + 3*cd[1][0] * cd[1][1] * cd[1][1] * pv2[7] ); k[2][1] = ( 3*cd[0][0] * cd[0][0] * cd[0][1] * pv1[7] + 2*cd[0][0] * cd[0][1] * cd[1][0] * pv1[8] + cd[0][0] * cd[0][0] * cd[1][1] * pv1[8] + cd[0][1] * cd[1][0] * cd[1][0] * pv1[9] + 2*cd[0][0] * cd[1][0] * cd[1][1] * pv1[9] + 3*cd[1][0] * cd[1][0] * cd[1][1] * pv1[10] ); l[2][1] = ( 3*cd[0][0] * cd[0][0] * cd[0][1] * pv2[10] + 2*cd[0][0] * cd[0][1] * cd[1][0] * pv2[9] + cd[0][0] * cd[0][0] * cd[1][1] * pv2[9] + cd[0][1] * cd[1][0] * cd[1][0] * pv2[8] + 2*cd[0][0] * cd[1][0] * cd[1][1] * pv2[8] + 3*cd[1][0] * cd[1][0] * cd[1][1] * pv2[7] ); k[3][0] = ( cd[0][0] * cd[0][0] * cd[0][0] * pv1[7] + cd[0][0] * cd[0][0] * cd[1][0] * pv1[8] + cd[0][0] * cd[1][0] * cd[1][0] * pv1[9] + cd[1][0] * cd[1][0] * cd[1][0] * pv1[10] ); l[3][0] = ( cd[0][0] * cd[0][0] * cd[0][0] * pv2[10] + cd[0][0] * cd[0][0] * cd[1][0] * pv2[9] + cd[0][0] * cd[1][0] * cd[1][0] * pv2[8] + cd[1][0] * cd[1][0] * cd[1][0] * pv2[7] ); k[0][4] = ( cd[0][1] * cd[0][1] * cd[0][1] * cd[0][1] * pv1[12] + cd[0][1] * cd[0][1] * cd[1][1] * cd[1][1] * pv1[13] + cd[0][1] * cd[0][1] * cd[1][1] * cd[1][1] * pv1[14] + cd[0][1] * cd[1][1] * cd[1][1] * cd[1][1] * pv1[15] + cd[1][1] * cd[1][1] * cd[1][1] * cd[1][1] * pv1[16] ); l[0][4] = ( cd[0][1] * cd[0][1] * cd[0][1] * cd[0][1] * pv2[16] + cd[0][1] * cd[0][1] * cd[1][1] * cd[1][1] * pv2[15] + cd[0][1] * cd[0][1] * cd[1][1] * cd[1][1] * pv2[14] + cd[0][1] * cd[1][1] * cd[1][1] * cd[1][1] * pv2[13] + cd[1][1] * cd[1][1] * cd[1][1] * cd[1][1] * pv2[12] ); k[1][3] = ( 4*cd[0][0] * cd[0][1] * cd[0][1] * cd[0][1] * pv1[12] + 3*cd[0][0] * cd[0][1] * cd[0][1] * cd[1][1] * pv1[13] + 2*cd[0][0] * cd[0][1] * cd[1][1] * cd[1][1] * pv1[14] + cd[0][0] * cd[1][1] * cd[1][1] * cd[1][1] * pv1[15] + cd[0][1] * cd[0][1] * cd[0][1] * cd[1][0] * pv1[13] + 2*cd[0][1] * cd[0][1] * cd[1][0] * cd[1][1] * pv1[14] + 3*cd[0][1] * cd[1][0] * cd[1][1] * cd[1][1] * pv1[15] + 4*cd[1][0] * cd[1][1] * cd[1][1] * cd[1][1] * pv1[16] ); l[1][3] = ( 4*cd[0][0] * cd[0][1] * cd[0][1] * cd[0][1] * pv2[16] + 3*cd[0][0] * cd[0][1] * cd[0][1] * cd[1][1] * pv2[15] + 2*cd[0][0] * cd[0][1] * cd[1][1] * cd[1][1] * pv2[14] + cd[0][0] * cd[1][1] * cd[1][1] * cd[1][1] * pv2[13] + cd[0][1] * cd[0][1] * cd[0][1] * cd[1][0] * pv2[15] + 2*cd[0][1] * cd[0][1] * cd[1][0] * cd[1][1] * pv2[14] + 3*cd[0][1] * cd[1][0] * cd[1][1] * cd[1][1] * pv2[13] + 4*cd[1][0] * cd[1][1] * cd[1][1] * cd[1][1] * pv2[12] ); k[2][2] = ( 6*cd[0][0] * cd[0][0] * cd[0][1] * cd[0][1] * pv1[12] + 3*cd[0][0] * cd[0][0] * cd[0][1] * cd[1][1] * pv1[13] + cd[0][0] * cd[0][0] * cd[1][1] * cd[1][1] * pv1[14] + 3*cd[0][0] * cd[0][1] * cd[0][1] * cd[1][0] * pv1[13] + 4*cd[0][0] * cd[0][1] * cd[1][0] * cd[1][1] * pv1[14] + 3*cd[0][0] * cd[1][0] * cd[1][1] * cd[1][1] * pv1[15] + cd[0][1] * cd[0][1] * cd[1][0] * cd[1][0] * pv1[14] + 3*cd[0][1] * cd[1][0] * cd[1][0] * cd[1][1] * pv1[15] + 6*cd[1][0] * cd[1][0] * cd[1][1] * cd[1][1] * pv1[16] ); l[2][2] = ( 6*cd[0][0] * cd[0][0] * cd[0][1] * cd[0][1] * pv2[16] + 3*cd[0][0] * cd[0][0] * cd[0][1] * cd[1][1] * pv2[15] + cd[0][0] * cd[0][0] * cd[1][1] * cd[1][1] * pv2[14] + 3*cd[0][0] * cd[0][1] * cd[0][1] * cd[1][0] * pv2[15] + 4*cd[0][0] * cd[0][1] * cd[1][0] * cd[1][1] * pv2[14] + 3*cd[0][0] * cd[1][0] * cd[1][1] * cd[1][1] * pv2[15] + cd[0][1] * cd[0][1] * cd[1][0] * cd[1][0] * pv2[14] + 3*cd[0][1] * cd[1][0] * cd[1][0] * cd[1][1] * pv2[13] + 6*cd[1][0] * cd[1][0] * cd[1][1] * cd[1][1] * pv2[12] ); k[3][1] = ( 4*cd[0][0] * cd[0][0] * cd[0][0] * cd[0][1] * pv1[12] + cd[0][0] * cd[0][0] * cd[0][0] * cd[1][1] * pv1[13] + 3*cd[0][0] * cd[0][0] * cd[0][1] * cd[1][0] * pv1[13] + 2*cd[0][0] * cd[0][0] * cd[1][0] * cd[1][1] * pv1[14] + 2*cd[0][0] * cd[0][1] * cd[1][0] * cd[1][0] * pv1[14] + 3*cd[0][0] * cd[1][0] * cd[1][0] * cd[1][1] * pv1[15] + cd[0][1] * cd[1][0] * cd[1][0] * cd[1][0] * pv1[15] + 4*cd[1][0] * cd[1][0] * cd[1][0] * cd[1][1] * pv1[16] ); l[3][1] = ( 4*cd[0][0] * cd[0][0] * cd[0][0] * cd[0][1] * pv2[16] + cd[0][0] * cd[0][0] * cd[0][0] * cd[1][1] * pv2[15] + 3*cd[0][0] * cd[0][0] * cd[0][1] * cd[1][0] * pv2[15] + 2*cd[0][0] * cd[0][0] * cd[1][0] * cd[1][1] * pv2[14] + 2*cd[0][0] * cd[0][1] * cd[1][0] * cd[1][0] * pv2[14] + 3*cd[0][0] * cd[1][0] * cd[1][0] * cd[1][1] * pv2[13] + cd[0][1] * cd[1][0] * cd[1][0] * cd[1][0] * pv2[13] + 4*cd[1][0] * cd[1][0] * cd[1][0] * cd[1][1] * pv2[12] ); k[4][0] = ( cd[0][0] * cd[0][0] * cd[0][0] * cd[0][0] * pv1[12] + cd[0][0] * cd[0][0] * cd[0][0] * cd[1][0] * pv1[13] + cd[0][0] * cd[0][0] * cd[1][0] * cd[1][0] * pv1[14] + cd[0][0] * cd[1][0] * cd[1][0] * cd[1][0] * pv1[15] + cd[1][0] * cd[1][0] * cd[1][0] * cd[1][0] * pv1[16] ); l[4][0] = ( cd[0][0] * cd[0][0] * cd[0][0] * cd[0][0] * pv2[16] + cd[0][0] * cd[0][0] * cd[0][0] * cd[1][0] * pv2[15] + cd[0][0] * cd[0][0] * cd[1][0] * cd[1][0] * pv2[14] + cd[0][0] * cd[1][0] * cd[1][0] * cd[1][0] * pv2[13] + cd[1][0] * cd[1][0] * cd[1][0] * cd[1][0] * pv2[12] ); /* For a check: { size_t i, j; for(i=0; i<=4; ++i) for(j=0;j<=4;++j) { printf("k%ld_%ld \t %.10E\n", i, j, k[i][j]); printf("l%ld_%ld \t %.10E\n\n", i, j, l[i][j]); } } */ } /* Intermidiate equations formed during sip->pv conversions. */ static void wcsdistortion_intermidate_sipeq(double cd[2][2], double cd_inv[2][2], double a_coeff[5][5], double b_coeff[5][5], double *pv1, double *pv2) { /*Intemidiate equations which give the value of PVi_j excluding radial terms PV[i,3], PV[i,11] For the intermidiate PVi_j calculations, the Eqs. 1 and 2 from section 2 of the SPIE proceedings paper at http://web.ipac.caltech.edu/staff/shupe/reprints/SIP_to_PV_SPIE2012.pdf are used which were further modified as shown in https://github.com/stargaser/sip_tpv/blob/master/sip_tpv/pvsiputils.py to generate these equtions. The exact script used for generation of these equations are given here: https://gitlab.com/sachinkumarsingh092/gnuastro-test-files/-/blob/ master/scripts/equations.py References and citations: "More flexibility in representing geometric distortion in astronomical images," Shupe, David L.; Laher, Russ R.; Storrie-Lombardi, Lisa; Surace, Jason; Grillmair, Carl; Levitan, David; Sesar, Branimir, 2012, in Software and Cyberinfrastructure for Astronomy II. Proceedings of the SPIE, Volume 8451, article id. 84511M. */ /* pvi_0 */ pv1[0]=a_coeff[0][0]*cd[0][0] + b_coeff[0][0]*cd[0][1]; pv2[0]=a_coeff[0][0]*cd[1][0] + b_coeff[0][0]*cd[1][1]; /* pvi_1 */ pv1[1] = ( a_coeff[0][1] * cd[0][0] * cd_inv[1][0] + a_coeff[1][0] * cd[0][0] * cd_inv[0][0] + b_coeff[0][1] * cd[0][1] * cd_inv[1][0] + b_coeff[1][0] * cd[0][1] * cd_inv[0][0] + cd[0][0] * cd_inv[0][0] + cd[0][1] * cd_inv[1][0] ); pv2[1] = ( a_coeff[0][1] * cd[1][0] * cd_inv[1][1] + a_coeff[1][0] * cd[1][0] * cd_inv[0][1] + b_coeff[0][1] * cd[1][1] * cd_inv[1][1] + b_coeff[1][0] * cd[1][1] * cd_inv[0][1] + cd[1][0] * cd_inv[0][1] + cd[1][1] * cd_inv[1][1] ); /* pvi_2 */ pv1[2] = ( a_coeff[0][1] * cd[0][0] * cd_inv[1][1] + a_coeff[1][0] * cd[0][0] * cd_inv[0][1] + b_coeff[0][1] * cd[0][1] * cd_inv[1][1] + b_coeff[1][0] * cd[0][1] * cd_inv[0][1] + cd[0][0] * cd_inv[0][1] + cd[0][1] * cd_inv[1][1] ); pv2[2] = ( a_coeff[0][1] * cd[1][0] * cd_inv[1][0] + a_coeff[1][0] * cd[1][0] * cd_inv[0][0] + b_coeff[0][1] * cd[1][1] * cd_inv[1][0] + b_coeff[1][0] * cd[1][1] * cd_inv[0][0] + cd[1][0] * cd_inv[0][0] + cd[1][1] * cd_inv[1][0] ); /* pvi_4 */ pv1[4] = ( a_coeff[0][2] * cd[0][0] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[1][1] * cd[0][0] * cd_inv[0][0] * cd_inv[1][0] + a_coeff[2][0] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] + b_coeff[0][2] * cd[0][1] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[1][1] * cd[0][1] * cd_inv[0][0] * cd_inv[1][0] + b_coeff[2][0] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] ); pv2[4] = ( a_coeff[0][2] * cd[1][0] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[1][1] * cd[1][0] * cd_inv[0][1] * cd_inv[1][1] + a_coeff[2][0] * cd[1][0] * cd_inv[0][1] * cd_inv[0][1] + b_coeff[0][2] * cd[1][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[1][1] * cd[1][1] * cd_inv[0][1] * cd_inv[1][1] + b_coeff[2][0] * cd[1][1] * cd_inv[0][1] * cd_inv[0][1] ); /* pvi_5 */ pv1[5] = ( 2*a_coeff[0][2] * cd[0][0] * cd_inv[1][0] * cd_inv[1][1] + a_coeff[1][1] * cd[0][0] * cd_inv[0][0] * cd_inv[1][1] + a_coeff[1][1] * cd[0][0] * cd_inv[0][1] * cd_inv[1][0] + 2*a_coeff[2][0] * cd[0][0] * cd_inv[0][0] * cd_inv[0][1] + 2*b_coeff[0][2] * cd[0][1] * cd_inv[1][0] * cd_inv[1][1] + b_coeff[1][1] * cd[0][1] * cd_inv[0][0] * cd_inv[1][1] + b_coeff[1][1] * cd[0][1] * cd_inv[0][1] * cd_inv[1][0] + 2*b_coeff[2][0] * cd[0][1] * cd_inv[0][0] * cd_inv[0][1] ); pv2[5] = ( 2*a_coeff[0][2] * cd[1][0] * cd_inv[1][0] * cd_inv[1][1] + a_coeff[1][1] * cd[1][0] * cd_inv[0][0] * cd_inv[1][1] + a_coeff[1][1] * cd[1][0] * cd_inv[0][1] * cd_inv[1][0] + 2*a_coeff[2][0] * cd[1][0] * cd_inv[0][0] * cd_inv[0][1] + 2*b_coeff[0][2] * cd[1][1] * cd_inv[1][0] * cd_inv[1][1] + b_coeff[1][1] * cd[1][1] * cd_inv[0][0] * cd_inv[1][1] + b_coeff[1][1] * cd[1][1] * cd_inv[0][1] * cd_inv[1][0] + 2*b_coeff[2][0] * cd[1][1] * cd_inv[0][0] * cd_inv[0][1] ); /* pvi_6 */ pv1[6]= ( a_coeff[0][2] * cd[0][0] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[1][1] * cd[0][0] * cd_inv[0][1] * cd_inv[1][1] + a_coeff[2][0] * cd[0][0] * cd_inv[0][1] * cd_inv[0][1] + b_coeff[0][2] * cd[0][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[1][1] * cd[0][1] * cd_inv[0][1] * cd_inv[1][1] + b_coeff[2][0] * cd[0][1] * cd_inv[0][1] * cd_inv[0][1] ); pv2[6]= ( a_coeff[0][2] * cd[1][0] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[1][1] * cd[1][0] * cd_inv[0][0] * cd_inv[1][0] + a_coeff[2][0] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] + b_coeff[0][2] * cd[1][1] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[1][1] * cd[1][1] * cd_inv[0][0] * cd_inv[1][0] + b_coeff[2][0] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] ); /* pvi_7 */ pv1[7] = ( a_coeff[0][3] * cd[0][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[1][2] * cd[0][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[2][1] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] + a_coeff[3][0] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] + b_coeff[0][3] * cd[0][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[1][2] * cd[0][1] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[2][1] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] + b_coeff[3][0] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] ); pv2[7] = ( a_coeff[0][3] * cd[1][0] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[1][2] * cd[1][0] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[2][1] * cd[1][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] + a_coeff[3][0] * cd[1][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] + b_coeff[0][3] * cd[1][1] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[1][2] * cd[1][1] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[2][1] * cd[1][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] + b_coeff[3][0] * cd[1][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] ); /* pvi_8 */ pv1[8] = ( 3*a_coeff[0][3] * cd[0][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + 2*a_coeff[1][2] * cd[0][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][1] + a_coeff[1][2] * cd[0][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[2][1] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][1] + 2*a_coeff[2][1] * cd[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] + 3*a_coeff[3][0] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] + 3*b_coeff[0][3] * cd[0][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + 2*b_coeff[1][2] * cd[0][1] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][1] + b_coeff[1][2] * cd[0][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[2][1] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][1] + 2*b_coeff[2][1] * cd[0][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] + 3*b_coeff[3][0] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] ); pv2[8] = ( 3*a_coeff[0][3] * cd[1][0] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[1][2] * cd[1][0] * cd_inv[0][0] * cd_inv[1][1] * cd_inv[1][1] + 2*a_coeff[1][2] * cd[1][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] + 2*a_coeff[2][1] * cd[1][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][1] + a_coeff[2][1] * cd[1][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] + 3*a_coeff[3][0] * cd[1][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] + 3*b_coeff[0][3] * cd[1][1] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[1][2] * cd[1][1] * cd_inv[0][0] * cd_inv[1][1] * cd_inv[1][1] + 2*b_coeff[1][2] * cd[1][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] + 2*b_coeff[2][1] * cd[1][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][1] + b_coeff[2][1] * cd[1][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] + 3*b_coeff[3][0] * cd[1][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] ); /* pvi_9 */ pv1[9] = ( 3*a_coeff[0][3] * cd[0][0] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[1][2] * cd[0][0] * cd_inv[0][0] * cd_inv[1][1] * cd_inv[1][1] + 2*a_coeff[1][2] * cd[0][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] + 2*a_coeff[2][1] * cd[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][1] + a_coeff[2][1] * cd[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] + 3*a_coeff[3][0] * cd[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] + 3*b_coeff[0][3] * cd[0][1] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[1][2] * cd[0][1] * cd_inv[0][0] * cd_inv[1][1] * cd_inv[1][1] + 2*b_coeff[1][2] * cd[0][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] + 2*b_coeff[2][1] * cd[0][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][1] + b_coeff[2][1] * cd[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] + 3*b_coeff[3][0] * cd[0][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] ); pv2[9] = ( 3*a_coeff[0][3] * cd[1][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + 2*a_coeff[1][2] * cd[1][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][1] + a_coeff[1][2] * cd[1][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[2][1] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][1] + 2*a_coeff[2][1] * cd[1][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] + 3*a_coeff[3][0] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] + 3*b_coeff[0][3] * cd[1][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + 2*b_coeff[1][2] * cd[1][1] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][1] + b_coeff[1][2] * cd[1][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[2][1] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][1] + 2*b_coeff[2][1] * cd[1][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] + 3*b_coeff[3][0] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] ); /* pvi_10 */ pv1[10] = ( a_coeff[0][3] * cd[0][0] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[1][2] * cd[0][0] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[2][1] * cd[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] + a_coeff[3][0] * cd[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] + b_coeff[0][3] * cd[0][1] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[1][2] * cd[0][1] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[2][1] * cd[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] + b_coeff[3][0] * cd[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] ); pv2[10] = ( a_coeff[0][3] * cd[1][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[1][2] * cd[1][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[2][1] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] + a_coeff[3][0] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] + b_coeff[0][3] * cd[1][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[1][2] * cd[1][1] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[2][1] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] + b_coeff[3][0] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] ); /* pvi_12 */ pv1[12] = ( a_coeff[0][4] * cd[0][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[1][3] * cd[0][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[2][2] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[3][1] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] + a_coeff[4][0] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] + b_coeff[0][4] * cd[0][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[1][3] * cd[0][1] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[2][2] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[3][1] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] + b_coeff[4][0] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] ); pv2[12] = ( a_coeff[0][4] * cd[1][0] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[1][3] * cd[1][0] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[2][2] * cd[1][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[3][1] * cd[1][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] + a_coeff[4][0] * cd[1][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] + b_coeff[0][4] * cd[1][1] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[1][3] * cd[1][1] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[2][2] * cd[1][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[3][1] * cd[1][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] + b_coeff[4][0] * cd[1][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] ); /* pvi_13 */ pv1[13] = ( 4*a_coeff[0][4] * cd[0][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + 3*a_coeff[1][3] * cd[0][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + a_coeff[1][3] * cd[0][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + 2*a_coeff[2][2] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][1] + 2*a_coeff[2][2] * cd[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[3][1] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][1] + 3*a_coeff[3][1] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] + 4*a_coeff[4][0] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] + 4*b_coeff[0][4] * cd[0][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + 3*b_coeff[1][3] * cd[0][1] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + b_coeff[1][3] * cd[0][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + 2*b_coeff[2][2] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][1] + 2*b_coeff[2][2] * cd[0][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[3][1] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][1] + 3*b_coeff[3][1] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] + 4*b_coeff[4][0] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] ); pv2[13] = ( 4*a_coeff[0][4] * cd[1][0] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[1][3] * cd[1][0] * cd_inv[0][0] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + 3*a_coeff[1][3] * cd[1][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + 2*a_coeff[2][2] * cd[1][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] + 2*a_coeff[2][2] * cd[1][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] + 3*a_coeff[3][1] * cd[1][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] + a_coeff[3][1] * cd[1][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] + 4*a_coeff[4][0] * cd[1][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] + 4*b_coeff[0][4] * cd[1][1] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[1][3] * cd[1][1] * cd_inv[0][0] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + 3*b_coeff[1][3] * cd[1][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + 2*b_coeff[2][2] * cd[1][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] + 2*b_coeff[2][2] * cd[1][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] + 3*b_coeff[3][1] * cd[1][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] + b_coeff[3][1] * cd[1][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] + 4*b_coeff[4][0] * cd[1][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] ); /* pvi_14 */ pv1[14] = ( 6*a_coeff[0][4] * cd[0][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + 3*a_coeff[1][3] * cd[0][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + 3*a_coeff[1][3] * cd[0][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + a_coeff[2][2] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][1] * cd_inv[1][1] + 4*a_coeff[2][2] * cd[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] + a_coeff[2][2] * cd[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] + 3*a_coeff[3][1] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][1] + 3*a_coeff[3][1] * cd[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] + 6*a_coeff[4][0] * cd[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] + 6*b_coeff[0][4] * cd[0][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + 3*b_coeff[1][3] * cd[0][1] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + 3*b_coeff[1][3] * cd[0][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + b_coeff[2][2] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][1] * cd_inv[1][1] + 4*b_coeff[2][2] * cd[0][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] + b_coeff[2][2] * cd[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] + 3*b_coeff[3][1] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][1] + 3*b_coeff[3][1] * cd[0][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] + 6*b_coeff[4][0] * cd[0][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] ); pv2[14] = ( 6*a_coeff[0][4] * cd[1][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + 3*a_coeff[1][3] * cd[1][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + 3*a_coeff[1][3] * cd[1][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + a_coeff[2][2] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][1] * cd_inv[1][1] + 4*a_coeff[2][2] * cd[1][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] + a_coeff[2][2] * cd[1][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] + 3*a_coeff[3][1] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][1] + 3*a_coeff[3][1] * cd[1][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] + 6*a_coeff[4][0] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] + 6*b_coeff[0][4] * cd[1][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + 3*b_coeff[1][3] * cd[1][1] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + 3*b_coeff[1][3] * cd[1][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + b_coeff[2][2] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][1] * cd_inv[1][1] + 4*b_coeff[2][2] * cd[1][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] + b_coeff[2][2] * cd[1][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] + 3*b_coeff[3][1] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][1] + 3*b_coeff[3][1] * cd[1][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] + 6*b_coeff[4][0] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] ); /* pvi_15 */ pv1[15] = ( 4*a_coeff[0][4] * cd[0][0] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[1][3] * cd[0][0] * cd_inv[0][0] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + 3*a_coeff[1][3] * cd[0][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + 2*a_coeff[2][2] * cd[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] + 2*a_coeff[2][2] * cd[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] + 3*a_coeff[3][1] * cd[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] + a_coeff[3][1] * cd[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] + 4*a_coeff[4][0] * cd[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] + 4*b_coeff[0][4] * cd[0][1] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[1][3] * cd[0][1] * cd_inv[0][0] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + 3*b_coeff[1][3] * cd[0][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] * cd_inv[1][1] + 2*b_coeff[2][2] * cd[0][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] + 2*b_coeff[2][2] * cd[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][1] + 3*b_coeff[3][1] * cd[0][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] + b_coeff[3][1] * cd[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][0] + 4*b_coeff[4][0] * cd[0][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] ); pv2[15] = ( 4*a_coeff[0][4] * cd[1][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + 3*a_coeff[1][3] * cd[1][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + a_coeff[1][3] * cd[1][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + 2*a_coeff[2][2] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][1] + 2*a_coeff[2][2] * cd[1][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[3][1] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][1] + 3*a_coeff[3][1] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] + 4*a_coeff[4][0] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] + 4*b_coeff[0][4] * cd[1][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + 3*b_coeff[1][3] * cd[1][1] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][1] + b_coeff[1][3] * cd[1][1] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + 2*b_coeff[2][2] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][1] + 2*b_coeff[2][2] * cd[1][1] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[3][1] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][1] + 3*b_coeff[3][1] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] * cd_inv[1][0] + 4*b_coeff[4][0] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][1] ); /* pvi_16 */ pv1[16] = ( a_coeff[0][4] * cd[0][0] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[1][3] * cd[0][0] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[2][2] * cd[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] + a_coeff[3][1] * cd[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] + a_coeff[4][0] * cd[0][0] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] + b_coeff[0][4] * cd[0][1] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[1][3] * cd[0][1] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[2][2] * cd[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] * cd_inv[1][1] + b_coeff[3][1] * cd[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[1][1] + b_coeff[4][0] * cd[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] * cd_inv[0][1] ); pv2[16] = ( a_coeff[0][4] * cd[1][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[1][3] * cd[1][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[2][2] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] + a_coeff[3][1] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] + a_coeff[4][0] * cd[1][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] + b_coeff[0][4] * cd[1][1] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[1][3] * cd[1][1] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[2][2] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] * cd_inv[1][0] + b_coeff[3][1] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[1][0] + b_coeff[4][0] * cd[1][1] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] * cd_inv[0][0] ); /* For a check: { size_t j; for(j=0; j<=16 ;++j) { if (j == 3 || j == 11) continue; printf("pv1_%ld \t %.12E\n", j, pv1[j]); printf("pv2_%ld \t %.12E\n", j, pv2[j]); } } */ } /**************************************************************/ /********** Calculations ************/ /**************************************************************/ /* Calcualte the final PV equation from intermidiate equations. */ static void wcsdistortion_calc_tpveq(struct wcsprm *wcs, double cd[2][2], double tpvu[8][8], double tpvv[8][8]) { /* tpvu and tpvv are u-v distortion equations in TPV convention. */ size_t i=0,j=0; double cd_inv[2][2]; double determinant=0; double k[5][5], l[5][5]; double pv1[17]={0}, pv2[17]={0}; /* Initialise the 2d matrices. */ for(i=0; i<2; ++i) for(j=0; j<2; ++j) cd_inv[i][j]=0; for(i=0; i<5; ++i) for(j=0; j<5; ++j) { k[i][j]=0; l[i][j]=0; } /* Estimate the parameters. */ wcsdistortion_get_tpvparams(wcs, cd, pv1, pv2); wcsdistortion_intermidate_tpveq(cd, pv1, pv2, k, l); /* We will find matrix tpvu and tpvv by finding inverse of CD matrix and multiplying with tpv* matrix. For inverse of a 2x2 matrix we use the below trasformations: inverse(|a b|) = 1 *|d -b| |c d| |A| |-c a| where |A| is the determinant of the matrix which is calculated by: |A| = a*d-b*c. */ determinant = cd[0][0]*cd[1][1] - cd[0][1]*cd[1][0]; /* Inverse matrix. */ cd_inv[0][0]=cd[1][1]/determinant; /* a */ cd_inv[0][1]=(-1*cd[0][1])/determinant; /* b */ cd_inv[1][0]=(-1*cd[1][0])/determinant; /* c */ cd_inv[1][1]=cd[0][0]/determinant; /* d */ /*For a check. printf("%.10lf\t%.10lf\t%.10lf\t%.10lf\n", cd_inv[0][0], cd_inv[0][1], \ cd_inv[1][0], cd_inv[1][1]); printf("%.10lf\n", determinant); */ /* For matrix tpvv and tpvu, we have to use the following matrix equation: |tpvu| = cd_inv*|k[i][j]| |tpvv| |l[i][j]| though intermidate polynomial equations have to be calculated prior to multiplycation with cd_inv. */ for(i=0; i<=4; ++i) for(j=0; j<=4; ++j) { tpvu[i][j]=cd_inv[0][0]*k[i][j]+cd_inv[0][1]*l[i][j]; tpvv[i][j]=cd_inv[1][0]*k[i][j]+cd_inv[1][1]*l[i][j]; /*For a check: printf("%.10E, %.10E\n", tpvu[i][j], tpvv[i][j]); */ } } /* Calcualte the final SIP equation from intermidiate equations and extract pv coefficients from it. */ static void wcsdistortion_calc_sipeq(struct wcsprm *wcs, double cd[2][2], double *pv1, double *pv2) { /* tpvu and tpvv are u-v distortion equations in TPV convention. */ size_t i=0, j=0; double cd_inv[2][2]; double determinant=0; double a_coeff[5][5], b_coeff[5][5]; /* Initialise the 2d matrices. */ for(i=0;i<2;++i) for(j=0;j<2;++j) cd_inv[i][j]=0; for(i=0;i<5;++i) for(j=0;j<5;++j) {a_coeff[i][j]=0; b_coeff[i][j]=0;} /* We will find matrix tpvu and tpvv by finding inverse of CD matrix and multiplying with tpv* matrix. For inverse of a 2x2 matrix we use the below trasformations: inverse(|a b|) = 1 *|d -b| |c d| |A| |-c a| where |A| is the determinant of the matrix which is calculated by: |A| = a*d-b*c. */ wcsdistortion_get_sipparams(wcs, cd, a_coeff, b_coeff); determinant = cd[0][0]*cd[1][1] - cd[0][1]*cd[1][0]; /* Inverse matrix */ cd_inv[0][0]=cd[1][1]/determinant; /* a */ cd_inv[0][1]=(-1*cd[0][1])/determinant; /* b */ cd_inv[1][0]=(-1*cd[1][0])/determinant; /* c */ cd_inv[1][1]=cd[0][0]/determinant; /* d */ /* Find the parameters. */ wcsdistortion_intermidate_sipeq( cd, cd_inv, a_coeff, b_coeff, pv1, pv2); /*For a check. printf("%.10lf\t%.10lf\t%.10lf\t%.10lf\n", cd_inv[0][0], cd_inv[0][1], \ cd_inv[1][0], cd_inv[1][1]); printf("%.10lf\n", determinant); */ } /* Calculate the SIP coefficients from CD matrix parameters and PV coefficients. */ static double wcsdistortion_calcsip(size_t axis, size_t m, size_t n, double tpvu[8][8], double tpvv[8][8]) { double sip_coeff; if( axis == 1) sip_coeff=tpvu[m][n]; else if(axis == 2) sip_coeff=tpvv[m][n]; else error(EXIT_FAILURE, 0, "%s: axis %zu does not exists! ", __func__, axis); if( (axis == 1) && (m == 1) && (n == 0) ) sip_coeff = sip_coeff - 1.0; else if( (axis == 2) && (m == 0) && (n == 1) ) sip_coeff = sip_coeff - 1.0; return sip_coeff; } /* To calculate reverse sip coefficients, we make a grid and polpulate it with forward coefficients. Then we fit a polynomial through these points and finally extract coefficeint from these polynomial which are the reverse sip cefficents. */ static void wcsdistortion_fitreverse(double *u, double *v, size_t a_order, size_t b_order, size_t naxis1, size_t naxis2, double a_coeff[5][5], double b_coeff[5][5], double ap_coeff[5][5], double bp_coeff[5][5]) { double chisq_ap, chisq_bp; double *udiff=NULL, *vdiff=NULL; double *uprime=NULL, *vprime=NULL; double **udict=NULL, **vdict=NULL; size_t tsize=(naxis1/4)*(naxis2/4); double **updict=NULL, **vpdict=NULL; gsl_vector *y_ap, *y_bp, *c_ap, *c_bp; size_t ap_order=a_order, bp_order=b_order; gsl_matrix *X_ap, *X_bp, *cov_ap, *cov_bp; size_t i=0, j=0, k=0, p_ap=0, p_bp=0, ij=0; gsl_multifit_linear_workspace *work_ap, *work_bp; /* Storage structures used: updict, vpdict - dictionaries (key-value pairs) with key being an integer starting from 0 to max(aporder, bporder)(inclusive) and its values are the uprime, vprime raised to the powers of corresponding keys for each key. udict, vdict - dictionaries (key-value pairs) with key being an integer starting from 0 to max(aorder, border)(inclusive) and its values are the u, v raised to the powers of corresponding keys for each key. u, v - The 1d representation of 2d grid of all points strating from -CRPIXi to NAXISi - CRPIXi (with a stride of 4). CRPIXi is subtracted to bring pixels in world coordinate system (wcs). uprime, vprime - The grid (represented internally as a 1d array) with forward coefficients fitted on them using the relevant udict, vdict values. udiff, vdiff - 1d array with the values of uprime, vprim subtracted from u, v arrays. In matrix equation AX=B, For axis 1 - A = transpose of a matrix of udict*vdict B = udiff For axis 2 - A = transpose of a matrix of updict*vpdict B = vdiff */ /* Allocate updict and vpdict and initialize them. */ updict=malloc((ap_order+1)*sizeof(*updict)); vpdict=malloc((bp_order+1)*sizeof(*vpdict)); for(i=0; i<=wcsdistortion_max(ap_order, bp_order); ++i) { updict[i]=malloc(tsize*sizeof(updict)); vpdict[i]=malloc(tsize*sizeof(vpdict)); } /* Allocate and initialize uprime and vprime. */ uprime=malloc(tsize*sizeof(*uprime)); vprime=malloc(tsize*sizeof(*vprime)); for(i=0; i<tsize; ++i) { uprime[i]=u[i]; vprime[i]=v[i]; } /* Allocate and initialize udict and vdict. */ udict=malloc((a_order+1)*sizeof(*udict)); vdict=malloc((b_order+1)*sizeof(*vdict)); for(i=0; i<=wcsdistortion_max(a_order, b_order); ++i) { udict[i]=malloc(tsize*sizeof(udict)); vdict[i]=malloc(tsize*sizeof(vdict)); } for(i=0; i<tsize; ++i) { udict[0][i]=1; vdict[0][i]=1; } /* Fill the values from the in the dicts. The rows of the dicts act as a key to achieve a key-value functionality. */ for(i=1; i<=a_order; ++i) for(j=0; j<tsize; ++j) udict[i][j]=udict[i-1][j]*u[j]; for(i=1; i<=b_order; ++i) for(j=0; j<tsize; ++j) vdict[i][j]=vdict[i-1][j]*v[j]; /* Populating forward coefficients on a grid. */ for(i=0; i<=a_order; ++i) for(j=0; j<=a_order-i; ++j) { for(k=0; k<tsize; ++k) uprime[k]+=a_coeff[i][j]*udict[i][k]*vdict[j][k]; /* The number of parameters for AP_* coefficients. */ ++p_ap; } for(i=0; i<=b_order; ++i) for(j=0; j<=b_order-i; ++j) { for(k=0; k<tsize; ++k) vprime[k]+=b_coeff[i][j]*udict[i][k]*vdict[j][k]; /* The number of parameters for BP_* coefficients. */ ++p_bp; } /*For a check. for(i=0; i<=a_order; ++i) for(j=0; j<tsize; ++j) { printf("udict[%ld][%ld] = %.8lf\n", i, j, uprime[j]); printf("u%ld = %.10E\n", i, u[i]); } */ /* Now we have a grid populated with forward coeffiecients. Now we fit a reverse polynomial through points using multiparameter linear least square fittings.*/ /* Initialize dicts. */ for(i=0; i<tsize; ++i) { updict[0][i]=1; vpdict[0][i]=1; } /* Fill the values from the in the dicts. The rows of the dicts act as a key to achieve a key-value functionality. */ for(i=1; i<=ap_order; ++i) for(j=0; j<tsize; ++j) updict[i][j]=updict[i-1][j]*uprime[j]; for(i=1; i<=bp_order; ++i) for(j=0; j<tsize; ++j) vpdict[i][j]=vpdict[i-1][j]*vprime[j]; /* Allocate memory for Multi-parameter Linear Regressions. */ X_ap = gsl_matrix_alloc (tsize, p_ap); X_bp = gsl_matrix_alloc (tsize, p_bp); y_ap = gsl_vector_alloc (tsize); y_bp = gsl_vector_alloc (tsize); c_ap = gsl_vector_alloc (p_ap); c_bp = gsl_vector_alloc (p_bp); cov_ap = gsl_matrix_alloc (p_ap, p_ap); cov_bp = gsl_matrix_alloc (p_bp, p_bp); /* Allocate and initialize udiff and vdiff. */ udiff=malloc(tsize*sizeof(*udiff)); vdiff=malloc(tsize*sizeof(*vdiff)); for(i=0; i<tsize; ++i) { udiff[i]=u[i]-uprime[i]; vdiff[i]=v[i]-vprime[i]; gsl_vector_set (y_ap, i, udiff[i]); gsl_vector_set (y_bp, i, vdiff[i]); } /* Filling up he X_ap matrix in column-wise order. */ for(i=0; i<=ap_order; ++i) for(j=0; j<=ap_order-i; ++j) { for(k=0; k<tsize; ++k) { gsl_matrix_set(X_ap, k, ij, updict[i][k]*vpdict[j][k]); /*For a check. printf("x_ap[%ld] = %.8lf\n", ij, updict[i][k]*vpdict[j][k]); */ } ++ij; } ij=0; /* Filling up he X_bp matrix in column-wise order. */ for(i=0; i<=bp_order; ++i) for(j=0; j<=bp_order-i; ++j) { for(k=0; k<tsize; ++k) { gsl_matrix_set(X_bp, k, ij, updict[i][k]*vpdict[j][k]); /*For a check. printf("x_bp[%ld] = %.8lf\n", ij, updict[i][k]*vpdict[j][k]); */ } ++ij; } /* Initialize and do the linear least square fitting. */ work_ap = gsl_multifit_linear_alloc (tsize, p_ap); work_bp = gsl_multifit_linear_alloc (tsize, p_bp); gsl_multifit_linear(X_ap, y_ap, c_ap, cov_ap, &chisq_ap, work_ap); gsl_multifit_linear(X_bp, y_bp, c_bp, cov_bp, &chisq_bp, work_bp); /* Extract the reverse coefficients. */ p_ap=0; for(i=0; i<=ap_order; ++i) for(j=0; j<=ap_order-i; ++j) { ap_coeff[i][j]=gsl_vector_get(c_ap, p_ap); /*For a check. printf("AP_%ld_%ld = %.8E\n", i, j, ap_coeff[i][j]); */ ++p_ap; } p_bp=0; for(i=0; i<=bp_order; ++i) for(j=0; j<=bp_order-i; ++j) { bp_coeff[i][j]=gsl_vector_get(c_bp, p_bp); /*For a check. printf("BP_%ld_%ld = %.8E\n", i, j, bp_coeff[i][j]); */ ++p_bp; } /*For a check. for(i=0; i<p_ap; ++i) for(j=0; j<tsize; ++j) printf("X[%ld][%ld] = %.8lf\n", i, j, gsl_matrix_get(X_ap, j, i)); */ /* Free the memory allocations. */ gsl_multifit_linear_free(work_bp); gsl_multifit_linear_free(work_ap); gsl_matrix_free(cov_bp); gsl_matrix_free(cov_ap); gsl_vector_free(c_bp); gsl_vector_free(c_ap); gsl_vector_free(y_bp); gsl_vector_free(y_ap); gsl_matrix_free(X_bp); gsl_matrix_free(X_ap); free(vdiff); free(udiff); free(vprime); free(uprime); for(i=0; i<ap_order; ++i) { free(vpdict[i]); free(updict[i]); } for(i=0; i<a_order; ++i) { free(vdict[i]); free(udict[i]); } free(vpdict); free(updict); free(vdict); free(udict); } /* Calculate the reverse sip coefficients. */ static void wcsdistortion_get_revkeyvalues(struct wcsprm *wcs, size_t *fitsize, double ap_coeff[5][5], double bp_coeff[5][5]) { size_t tsize; size_t i, j, k; double *u=NULL, *v=NULL; size_t a_order=0, b_order=0; double a_coeff[5][5], b_coeff[5][5]; size_t naxis1=fitsize[1], naxis2=fitsize[0]; double crpix1=wcs->crpix[0], crpix2=wcs->crpix[1]; /* Initialise the 2d matrices. */ tsize=(naxis1/4)*(naxis2/4); for(i=0;i<5;++i) for(j=0;j<5;++j) {a_coeff[i][j]=0; b_coeff[i][j]=0;} /* Allocate the size of u,v arrays. */ u=malloc(tsize*sizeof(*u)); v=malloc(tsize*sizeof(*v)); if(u==NULL) error(EXIT_FAILURE, 0, "%s: allocating %zu bytes for `u'", __func__, tsize*sizeof(*u)); if(v==NULL) error(EXIT_FAILURE, 0, "%s: allocating %zu bytes for `v'", __func__, tsize*sizeof(*v)); /* Make the grid and bring it's origin to the world's origin. */ k=0; for(i=0; i<naxis2; i+=4) for(j=0; j<naxis1; j+=4) u[k++]=j-crpix1; k=0; for(i=0; i<naxis2; i+=4) for(j=0; j<naxis1; j+=4) v[k++]=i-crpix2; /*For a check. for(i=0; i<tsize; ++i) printf("u%ld = %.10E\n", i, u[i]); */ wcsdistortion_get_sipcoeff(wcs, &a_order, &b_order, a_coeff, b_coeff); wcsdistortion_fitreverse(u, v, a_order, b_order, naxis1, naxis2, a_coeff, b_coeff, ap_coeff, bp_coeff); /* Free the memory allocations. */ free(v); free(u); } /**************************************************************/ /********** Writing utilities ************/ /**************************************************************/ /* Make the sip key-cards and add them to fullheader. Return: char *fullheader - string of keycards. */ static char * wcsdistortion_add_sipkeywords(struct wcsprm *wcs, size_t *fitsize, double tpvu[8][8], double tpvv[8][8], int add_reverse, int *nkeys) { double val=0; uint8_t i, j, k=0; int size = wcs->naxis; size_t a_order=0, b_order=0; size_t ap_order=0, bp_order=0; size_t m, n, num=0, numkey=200; double ap_coeff[5][5], bp_coeff[5][5]; /* The literal strings are a little longer than necessary because GCC will complain/warn that size_t can be very long. Although it will never happen that we need to write 10-decimal numbers in these, but to have a clean build, we'll just set the literal space to be large enough to avoid the warnings. */ char *fullheader, fmt[50], sipkey[50], keyaxis[50], pcaxis[50]; /* Initialise the 2d matrices. */ *nkeys = 0; for(i=0;i<5;++i) for(j=0;j<5;++j) {ap_coeff[i][j]=0; bp_coeff[i][j]=0;} /* The format for each card. */ sprintf(fmt, "%%-8s= %%20.12E%%50s"); /* Allcate memory for cards. */ fullheader = malloc(numkey*80); if(fullheader==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `fullheader'", __func__, sizeof *fullheader); /* Add other necessary cards. */ sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20d%50s", "WCSAXES", wcs->naxis, ""); for(i=1; i<=size; ++i) { sprintf(keyaxis, "CRPIX%d", i); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.8lf%50s", keyaxis, wcs->crpix[i-1], ""); } for(i=1; i<=size; ++i) for(j=1; j<=size; ++j) { sprintf(pcaxis, "PC%d_%d", i, j); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.17lf%50s", pcaxis, wcs->pc[k++], ""); } for(i=1; i<=size; ++i) { sprintf(keyaxis, "CDELT%d", i); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.17lf%50s", keyaxis, wcs->cdelt[i-1], ""); } for(i=1; i<=size; ++i) { sprintf(keyaxis, "CUNIT%d", i); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %-70s", keyaxis, wcs->cunit[i-1]); } sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %-70s", "CTYPE1", "'RA---TAN-SIP'"); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %-70s", "CTYPE2", "'DEC--TAN-SIP'"); for(i=1; i<=size; ++i) { sprintf(keyaxis, "CRVAL%d", i); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.10lf%50s", keyaxis, wcs->crval[i-1], ""); } sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.17lf%50s", "LONPOLE", wcs->lonpole, ""); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.17lf%50s", "LATPOLE", wcs->latpole, ""); #if GAL_CONFIG_HAVE_WCSLIB_MJDREF == 1 for(i=1; i<=size; ++i) sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.1lf%50s", "MJDREFI", wcs->mjdref[i-1], ""); #endif sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %-70s", "RADESYS", wcs->radesys); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.1lf%50s", "EQUINOX", wcs->equinox, ""); for(m=0; m<=4; ++m) for(n=0; n<=4; ++n) { /*For axis = 1*/ val=wcsdistortion_calcsip(1, m, n, tpvu, tpvv); if(val != 0) { /* Make keywords */ sprintf(sipkey, "A_%zu_%zu", m, n); sprintf(fullheader+(FLEN_CARD-1)*num++, fmt, sipkey, val, ""); a_order=wcsdistortion_max(a_order, wcsdistortion_max(m,n)); } /*For axis = 2*/ val=wcsdistortion_calcsip(2, m, n, tpvu, tpvv); if(val != 0) { /* Make keywords */ sprintf(sipkey, "B_%zu_%zu", m, n); sprintf(fullheader+(FLEN_CARD-1)*num++, fmt, sipkey, val, ""); b_order=wcsdistortion_max(b_order, wcsdistortion_max(m,n)); } } sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20zu%50s", "A_ORDER", a_order, ""); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20zu%50s", "B_ORDER", b_order, ""); /* If reverse coefficients are required. */ if( add_reverse ) { ap_order=a_order; bp_order=b_order; wcsdistortion_get_revkeyvalues(wcs, fitsize, ap_coeff, bp_coeff); for(m=0; m<=ap_order; ++m) for(n=0; n<=ap_order-m; ++n) { /*For axis = 1*/ val=ap_coeff[m][n]; if(val != 0) { /* Make keywords */ sprintf(sipkey, "AP_%zu_%zu", m, n); sprintf(fullheader+(FLEN_CARD-1)*num++, fmt, sipkey, val, ""); } /*For axis = 2*/ val=bp_coeff[m][n]; if(val != 0) { /* Make keywords */ sprintf(sipkey, "BP_%zu_%zu", m, n); sprintf(fullheader+(FLEN_CARD-1)*num++, fmt, sipkey, val, ""); } } sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20zu%50s", "AP_ORDER", ap_order, ""); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20zu%50s", "BP_ORDER", bp_order, ""); } /*For a check. printf("%s\n", fullheader); */ *nkeys = num; return fullheader; } /* Make the pv key-cards and add them to fullheader. Return: char *fullheader - string of keycards. */ static char * wcsdistortion_add_pvkeywords(struct wcsprm *wcs, double *pv1, double *pv2, int *nkeys) { double val=0; uint8_t i, j, k=0; int size = wcs->naxis; size_t m, n, num=0, numkey=100; /* The literal strings are a little longer than necessary because GCC will complain/warn that size_t can be very long. Although it will never happen that we need to write 10-decimal numbers in these, but to have a clean build, we'll just set the literal space to be large enough to avoid the warnings. */ char *fullheader, fmt[50], pvkey[50], keyaxis[50], pcaxis[50]; /* Initialize values. */ *nkeys = 0; /* The format for each card. */ sprintf(fmt, "%%-8s= %%20.12E%%50s"); /* Allcate memory for cards. */ fullheader = malloc(numkey*80); if(fullheader==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for `fullheader'", __func__, sizeof *fullheader); /* Add other necessary cards. */ sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20d%50s", "WCSAXES", wcs->naxis, ""); for(i=1; i<=size; ++i) { sprintf(keyaxis, "CRPIX%d", i); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.8lf%50s", keyaxis, wcs->crpix[i-1], ""); } for(i=1; i<=size; ++i) for(j=1; j<=size; ++j) { sprintf(pcaxis, "PC%d_%d", i, j); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.17lf%50s", pcaxis, wcs->pc[k++], ""); } for(i=1; i<=size; ++i) { sprintf(keyaxis, "CDELT%d", i); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.17lf%50s", keyaxis, wcs->cdelt[i-1], ""); } for(i=1; i<=size; ++i) { sprintf(keyaxis, "CUNIT%d", i); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %-70s", keyaxis, wcs->cunit[i-1]); } sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %-70s", "CTYPE1", "'RA---TPV'"); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %-70s", "CTYPE2", "'DEC--TPV'"); for(i=1; i<=size; ++i) { sprintf(keyaxis, "CRVAL%d", i); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.10lf%50s", keyaxis, wcs->crval[i-1], ""); } sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.17lf%50s", "LONPOLE", wcs->lonpole, ""); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.17lf%50s", "LATPOLE", wcs->latpole, ""); #if GAL_CONFIG_HAVE_WCSLIB_MJDREF == 1 for(i=1; i<=size; ++i) sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.1lf%50s", "MJDREFI", wcs->mjdref[i-1], ""); #endif sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %-70s", "RADESYS", wcs->radesys); sprintf(fullheader+(FLEN_CARD-1)*num++, "%-8s= %20.1lf%50s", "EQUINOX", wcs->equinox, ""); for(m=1; m<=2; ++m) for(n=0; n<=16; ++n) { /*For axis = 1*/ if(m == 1) { val=pv1[n]; if(val != 0) { /* Make keywords */ sprintf(pvkey, "PV%zu_%zu", m, n); sprintf(fullheader+(FLEN_CARD-1)*num++, fmt, pvkey, val, ""); } } /*For axis = 2*/ if(m == 2) { val=pv2[n]; if(val != 0) { /* Make keywords */ sprintf(pvkey, "PV%zu_%zu", m, n); sprintf(fullheader+(FLEN_CARD-1)*num++, fmt, pvkey, val, ""); } } } /*For a check. printf("%s\n", fullheader); */ *nkeys = num; return fullheader; } /* Set the internal structure and do sanity checks. */ static void wcsdistortion_set_internalstruct(struct wcsprm *wcs, char *fullheader, size_t fulllen, int status, int nwcs, int sumcheck) { size_t i; if( wcs == NULL ) { fprintf(stderr, "\n##################\n" "WCSLIB Warning: wcspih ERROR %d: %s.\n" "##################\n", status, wcs_errmsg[status]); wcs=NULL; nwcs=0; } if(wcs) { /* It may happen that the WCS-related keyword values are stored as strings (they have single-quotes around them). In this case, WCSLIB will read the CRPIX and CRVAL values as zero. When this happens do a small check and abort, while informing the user about the problem. */ sumcheck=0; for(i=0;i<wcs->naxis;++i) {sumcheck += (wcs->crval[i]==0.0f) + (wcs->crpix[i]==0.0f);} if(sumcheck==wcs->naxis*2) { /* We only care about the first set of characters in each 80-character row, so we don't need to parse the last few characters anyway. */ fulllen=strlen(fullheader)-12; for(i=0;i<fulllen;++i) if( strncmp(fullheader+i, "CRVAL1 = '", 11) == 0 ) fprintf(stderr, "WARNING: WCS Keyword values are not " "numbers.\n\n" "WARNING: The values to the WCS-related keywords are " "enclosed in single-quotes. In the FITS standard " "this is how string values are stored, therefore " "WCSLIB is unable to read them AND WILL PUT ZERO IN " "THEIR PLACE (creating a wrong WCS in the output). " "Please update the respective keywords of the input " "to be numbers (see next line).\n\n" "WARNING: You can do this with Gnuastro's `astfits' " "program and the `--update' option. The minimal WCS " "keywords that need a numerical value are: `CRVAL1', " "`CRVAL2', `CRPIX1', `CRPIX2', `EQUINOX' and " "`CD%%_%%' (or `PC%%_%%', where the %% are integers), " "please see the FITS standard, and inspect your FITS " "file to identify the full set of keywords that you " "need correct (for example PV%%_%% keywords).\n\n"); } /* CTYPE is a mandatory WCS keyword, so if it hasn't been given (its '\0'), then the headers didn't have a WCS structure. However, WCSLIB still fills in the basic information (for example the dimensionality of the dataset). */ if(wcs->ctype[0][0]=='\0') { wcsfree(wcs); wcs=NULL; nwcs=0; } else { /* For a check. printf("flag: %d\n", wcs->flag); printf("naxis: %d\n", wcs->naxis); printf("crpix: %f, %f\n", wcs->crpix[0], wcs->crpix[1]); printf("pc: %f, %f, %f, %f\n", wcs->pc[0], wcs->pc[1], wcs->pc[2], wcs->pc[3]); printf("cdelt: %f, %f\n", wcs->cdelt[0], wcs->cdelt[1]); printf("crval: %f, %f\n", wcs->crval[0], wcs->crval[1]); printf("cunit: %s, %s\n", wcs->cunit[0], wcs->cunit[1]); printf("ctype: %s, %s\n", wcs->ctype[0], wcs->ctype[1]); printf("lonpole: %f\n", wcs->lonpole); printf("latpole: %f\n", wcs->latpole); */ /* Set the WCS structure. */ status=wcsset(wcs); if(status) { fprintf(stderr, "\n##################\n" "WCSLIB Warning: wcsset ERROR %d: %s.\n" "##################\n", status, wcs_errmsg[status]); wcsfree(wcs); wcs=NULL; nwcs=0; } else /* A correctly useful WCS is present. When no PC matrix elements were present in the header, the default PC matrix (a unity matrix) is used. In this case WCSLIB doesn't set `altlin' (and gives it a value of 0). In Gnuastro, later on, we might need to know the type of the matrix used, so in such a case, we will set `altlin' to 1. */ if(wcs->altlin==0) wcs->altlin=1; } } /* For a check. wcsprt(wcs); */ /* Clean up. */ status=0; if (fits_free_memory(fullheader, &status) ) gal_fits_io_error(status, "problem in freeing the memory used to " "keep all the headers"); } /************************************************************************/ /*************** High-level functions *********************/ /************************************************************************/ /* After the actual TPV->SIP conversions are done and the keycards are created using `wcsdistortion_add_sipkeywords`, we then use `wcspih` to generate and return the new headers having SIP coefficients. Parameters: struct wcsprm *inwcs - The wcs parameters of the input fits file. size_t *fitsize - The size of the array along each dimension. Return: struct wcsprm *outwcs - The transformed wcs parameters in the sip distortion type. */ struct wcsprm * gal_wcsdistortion_tpv_to_sip(struct wcsprm *inwcs, size_t *fitsize) { int ctrl=0; /* Don't report why a keyword wasn't used. */ int nreject=0; /* Number of keywords rejected for syntax. */ double cd[2][2]; size_t i=0, j=0; size_t fulllen=0; char *fullheader; int relax=WCSHDR_all; /* Macro: use all informal WCS extensions. */ int nwcs, sumcheck=0; int nkeys=0, status=0; struct wcsprm *outwcs=NULL; double tpvu[8][8], tpvv[8][8]; /* Initialise the 2d matrices. */ for(i=0; i<2; ++i) for(j=0; j<2; ++j) cd[i][j]=0; for(i=0; i<8; ++i) for(j=0; j<8; ++j) { tpvu[i][j]=0; tpvv[i][j]=0; } /* Calculate the pv equations and extract sip coefficients from it. */ wcsdistortion_calc_tpveq(inwcs, cd, tpvu, tpvv); /* Add the sip keywords. */ fullheader=wcsdistortion_add_sipkeywords(inwcs, fitsize, tpvu, tpvv, 1, &nkeys); /* WCSlib function to parse the FITS headers. */ status=wcspih(fullheader, nkeys, relax, ctrl, &nreject, &nwcs, &outwcs); /* Set the internal structure. */ wcsdistortion_set_internalstruct(outwcs, fullheader, fulllen, status, nwcs, sumcheck); /* Return the output WCS. */ return outwcs; } /* After the actual SIP->TPV conversions are done and the keycards are created using `wcsdistortion_add_pvkeywords`, we then use `wcspih` to generate and return the new headers having PV coefficients. Parameters: struct wcsprm *inwcs - The wcs parameters of the input fits file. Return: struct wcsprm *outwcs - The transformed wcs parameters in the pv distortion type.*/ struct wcsprm * gal_wcsdistortion_sip_to_tpv(struct wcsprm *inwcs) { int ctrl=0; /* Don't report why a keyword wasn't used. */ int nreject=0; /* Number of keywords rejected for syntax. */ double cd[2][2]; size_t i=0, j=0; size_t fulllen=0; char *fullheader; int nwcs, sumcheck=0; int nkeys=0, status=0; int relax=WCSHDR_all; /* Macro: use all informal WCS extensions. */ struct wcsprm *outwcs=NULL; double pv1[17]={0}, pv2[17]={0}; /* Initialise the 2d matrices. */ for(i=0; i<2; ++i) for(j=0; j<2; ++j) cd[i][j]=0; /* Calculate the sip equations and extract pv coefficients from it. */ wcsdistortion_calc_sipeq(inwcs, cd, pv1, pv2); /* Add the pv keywords. */ fullheader=wcsdistortion_add_pvkeywords(inwcs, pv1, pv2, &nkeys); /* WCSlib function to parse the FITS headers. */ status=wcspih(fullheader, nkeys, relax, ctrl, &nreject, &nwcs, &outwcs); /* Set the internal structure. */ wcsdistortion_set_internalstruct(outwcs, fullheader, fulllen, status, nwcs, sumcheck); return outwcs; } �����gnuastro-0.22/lib/arithmetic.c����������������������������������������������������������������������0000644�0001750�0001750�00000614466�14551337306�012053� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures This is part of GNU Astronomy Utilities (Gnuastro) package. Corresponding author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Faezeh Bidjarchian <fbidjarchian@gmail.com> Pedram Ashofteh-Ardakani <pedramardakani@pm.me> Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdarg.h> #include <wcslib/wcs.h> #include <gsl/gsl_rng.h> #include <gsl/gsl_math.h> #include <gsl/gsl_randist.h> #include <gsl/gsl_const_num.h> #include <gsl/gsl_const_mks.h> #include <gnuastro/box.h> #include <gnuastro/wcs.h> #include <gnuastro/list.h> #include <gnuastro/pool.h> #include <gnuastro/blank.h> #include <gnuastro/units.h> #include <gnuastro/qsort.h> #include <gnuastro/binary.h> #include <gnuastro/pointer.h> #include <gnuastro/threads.h> #include <gnuastro/dimension.h> #include <gnuastro/statistics.h> #include <gnuastro/arithmetic.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/arithmetic-internal.h> /* Headers for each binary operator. Since they heavily involve macros, their compilation can be very large if they are in a single function and file. So there is a separate C source and header file for each of these functions. */ #include <gnuastro-internal/arithmetic-lt.h> #include <gnuastro-internal/arithmetic-le.h> #include <gnuastro-internal/arithmetic-gt.h> #include <gnuastro-internal/arithmetic-ge.h> #include <gnuastro-internal/arithmetic-eq.h> #include <gnuastro-internal/arithmetic-ne.h> #include <gnuastro-internal/arithmetic-or.h> #include <gnuastro-internal/arithmetic-and.h> #include <gnuastro-internal/arithmetic-plus.h> #include <gnuastro-internal/arithmetic-minus.h> #include <gnuastro-internal/arithmetic-bitor.h> #include <gnuastro-internal/arithmetic-bitand.h> #include <gnuastro-internal/arithmetic-bitxor.h> #include <gnuastro-internal/arithmetic-bitlsh.h> #include <gnuastro-internal/arithmetic-bitrsh.h> #include <gnuastro-internal/arithmetic-modulo.h> #include <gnuastro-internal/arithmetic-divide.h> #include <gnuastro-internal/arithmetic-multiply.h> /***********************************************************************/ /*************** Internal checks **************/ /***********************************************************************/ /* Some functions are only for a floating point operand, so if the input isn't floating point, inform the user to change the type explicitly, doing it implicitly/internally puts too much responsability on the program. static void arithmetic_check_float_input(gal_data_t *in, int operator, char *numstr) { switch(in->type) { case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: break; default: error(EXIT_FAILURE, 0, "the %s operator can only accept single or " "double precision floating point numbers as its operand. The " "%s operand has type %s. You can use the 'float' or 'double' " "operators before this operator to explicitly convert to the " "desired precision floating point type. If the operand was " "originally a typed number (string of characters), add an 'f' " "after it so it is directly read into the proper precision " "floating point number (based on the number of non-zero " "decimals it has)", gal_arithmetic_operator_string(operator), numstr, gal_type_name(in->type, 1)); } } */ /***********************************************************************/ /*************** Unary functions/operators **************/ /***********************************************************************/ /* Change input data structure type. */ static gal_data_t * arithmetic_change_type(gal_data_t *data, int operator, int flags) { int type=-1; gal_data_t *out; /* Set the output type. */ switch(operator) { case GAL_ARITHMETIC_OP_TO_UINT8: type=GAL_TYPE_UINT8; break; case GAL_ARITHMETIC_OP_TO_INT8: type=GAL_TYPE_INT8; break; case GAL_ARITHMETIC_OP_TO_UINT16: type=GAL_TYPE_UINT16; break; case GAL_ARITHMETIC_OP_TO_INT16: type=GAL_TYPE_INT16; break; case GAL_ARITHMETIC_OP_TO_UINT32: type=GAL_TYPE_UINT32; break; case GAL_ARITHMETIC_OP_TO_INT32: type=GAL_TYPE_INT32; break; case GAL_ARITHMETIC_OP_TO_UINT64: type=GAL_TYPE_UINT64; break; case GAL_ARITHMETIC_OP_TO_INT64: type=GAL_TYPE_INT64; break; case GAL_ARITHMETIC_OP_TO_FLOAT32: type=GAL_TYPE_FLOAT32; break; case GAL_ARITHMETIC_OP_TO_FLOAT64: type=GAL_TYPE_FLOAT64; break; default: error(EXIT_FAILURE, 0, "%s: operator value of %d not recognized", __func__, operator); } /* Copy to the new type. */ out=gal_data_copy_to_new_type(data, type); /* Delete the input structure if the user asked for it. */ if(flags & GAL_ARITHMETIC_FLAG_FREE) gal_data_free(data); /* Return */ return out; } /* Return an array of value 1 for any zero valued element and zero for any non-zero valued element. */ #define TYPE_CASE_FOR_NOT(CTYPE) { \ CTYPE *a=data->array, *af=a+data->size; \ do *o++ = !(*a); while(++a<af); \ } static gal_data_t * arithmetic_not(gal_data_t *data, int flags) { uint8_t *o; gal_data_t *out; /* The dataset may be empty. In this case the output should also be empty (we can have tables and images with 0 rows or pixels!). */ if(data->size==0 || data->array==NULL) return data; /* Allocate the output array. */ out=gal_data_alloc(NULL, GAL_TYPE_UINT8, data->ndim, data->dsize, data->wcs, 0, data->minmapsize, data->quietmmap, data->name, data->unit, data->comment); o=out->array; /* Go over the pixels and set the output values. */ switch(data->type) { case GAL_TYPE_UINT8: TYPE_CASE_FOR_NOT( uint8_t ); break; case GAL_TYPE_INT8: TYPE_CASE_FOR_NOT( int8_t ); break; case GAL_TYPE_UINT16: TYPE_CASE_FOR_NOT( uint16_t ); break; case GAL_TYPE_INT16: TYPE_CASE_FOR_NOT( int16_t ); break; case GAL_TYPE_UINT32: TYPE_CASE_FOR_NOT( uint32_t ); break; case GAL_TYPE_INT32: TYPE_CASE_FOR_NOT( int32_t ); break; case GAL_TYPE_UINT64: TYPE_CASE_FOR_NOT( uint64_t ); break; case GAL_TYPE_INT64: TYPE_CASE_FOR_NOT( int64_t ); break; case GAL_TYPE_FLOAT32: TYPE_CASE_FOR_NOT( float ); break; case GAL_TYPE_FLOAT64: TYPE_CASE_FOR_NOT( double ); break; case GAL_TYPE_BIT: error(EXIT_FAILURE, 0, "%s: bit datatypes are not yet supported, " "please get in touch with us to implement it.", __func__); default: error(EXIT_FAILURE, 0, "%s: type value (%d) not recognized", __func__, data->type); } /* Delete the input structure if the user asked for it. */ if(flags & GAL_ARITHMETIC_FLAG_FREE) gal_data_free(data); /* Return */ return out; } /* Bitwise not operator. */ static gal_data_t * arithmetic_bitwise_not(int flags, gal_data_t *in) { gal_data_t *o; uint8_t *iu8 = in->array, *iu8f = iu8 + in->size, *ou8; int8_t *ii8 = in->array, *ii8f = ii8 + in->size, *oi8; uint16_t *iu16 = in->array, *iu16f = iu16 + in->size, *ou16; int16_t *ii16 = in->array, *ii16f = ii16 + in->size, *oi16; uint32_t *iu32 = in->array, *iu32f = iu32 + in->size, *ou32; int32_t *ii32 = in->array, *ii32f = ii32 + in->size, *oi32; uint64_t *iu64 = in->array, *iu64f = iu64 + in->size, *ou64; int64_t *ii64 = in->array, *ii64f = ii64 + in->size, *oi64; /* The dataset may be empty. In this case, the output should also be empty (we can have tables and images with 0 rows or pixels!). */ if(in->size==0 || in->array==NULL) return in; /* Check the type. */ switch(in->type) { case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: error(EXIT_FAILURE, 0, "%s: bitwise not (one's complement) " "operator can only work on integer types", __func__); } /* If we want inplace output, set the output pointer to the input pointer, for every pixel, the operation will be independent. */ if(flags & GAL_ARITHMETIC_FLAG_INPLACE) o = in; else o = gal_data_alloc(NULL, in->type, in->ndim, in->dsize, in->wcs, 0, in->minmapsize, in->quietmmap, NULL, NULL, NULL); /* Start setting the types. */ switch(in->type) { case GAL_TYPE_UINT8: ou8=o->array; do *ou8++ = ~(*iu8++); while(iu8<iu8f); break; case GAL_TYPE_INT8: oi8=o->array; do *oi8++ = ~(*ii8++); while(ii8<ii8f); break; case GAL_TYPE_UINT16: ou16=o->array; do *ou16++ = ~(*iu16++); while(iu16<iu16f); break; case GAL_TYPE_INT16: oi16=o->array; do *oi16++ = ~(*ii16++); while(ii16<ii16f); break; case GAL_TYPE_UINT32: ou32=o->array; do *ou32++ = ~(*iu32++); while(iu32<iu32f); break; case GAL_TYPE_INT32: oi32=o->array; do *oi32++ = ~(*ii32++); while(ii32<ii32f); break; case GAL_TYPE_UINT64: ou64=o->array; do *ou64++ = ~(*iu64++); while(iu64<iu64f); break; case GAL_TYPE_INT64: oi64=o->array; do *oi64++ = ~(*ii64++); while(ii64<ii64f); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, in->type); } /* Clean up (if necessary). */ if( (flags & GAL_ARITHMETIC_FLAG_FREE) && o!=in) gal_data_free(in); /* Return */ return o; } /* We don't want to use the standard function for unary functions in the case of the absolute operator. This is because there are multiple versions of this function in the C library for different types, which can greatly improve speed. */ #define ARITHMETIC_ABS_SGN(CTYPE, FUNC) { \ CTYPE *o=out->array, *a=in->array, *af=a+in->size; \ do *o++ = FUNC(*a); while(++a<af); \ } static gal_data_t * arithmetic_abs(int flags, gal_data_t *in) { gal_data_t *out; /* The dataset may be empty. In this case, the output should also be empty (we can have tables and images with 0 rows or pixels!). */ if(in->size==0 || in->array==NULL) return in; /* Set the output array. */ if(flags & GAL_ARITHMETIC_FLAG_INPLACE) out=in; else out = gal_data_alloc(NULL, in->type, in->ndim, in->dsize, in->wcs, 0, in->minmapsize, in->quietmmap, in->name, in->unit, in->comment); /* Put the absolute value depending on the type. */ switch(in->type) { /* Unsigned types are already positive, so if the input is not to be freed (the output must be a separate array), just copy the whole array. */ case GAL_TYPE_UINT8: case GAL_TYPE_UINT16: case GAL_TYPE_UINT32: case GAL_TYPE_UINT64: if(out!=in) gal_data_copy_to_allocated(in, out); break; /* For the signed types, we actually have to go over the data and calculate the absolute value. There are unique functions for different types, so we will be using them. */ case GAL_TYPE_INT8: ARITHMETIC_ABS_SGN( int8_t, abs ); break; case GAL_TYPE_INT16: ARITHMETIC_ABS_SGN( int16_t, abs ); break; case GAL_TYPE_INT32: ARITHMETIC_ABS_SGN( int32_t, labs ); break; case GAL_TYPE_INT64: ARITHMETIC_ABS_SGN( int64_t, llabs ); break; case GAL_TYPE_FLOAT32: ARITHMETIC_ABS_SGN( float, fabsf ); break; case GAL_TYPE_FLOAT64: ARITHMETIC_ABS_SGN( double, fabs ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, in->type); } /* Clean up and return. */ if( (flags & GAL_ARITHMETIC_FLAG_FREE) && out!=in) gal_data_free(in); return out; } /* Wrapper functions for RA/Dec strings. */ static char * arithmetic_units_degree_to_ra(double decimal) { return gal_units_degree_to_ra(decimal, 0); } static char * arithmetic_units_degree_to_dec(double decimal) { return gal_units_degree_to_dec(decimal, 0); } #define UNIFUNC_RUN_FUNCTION_ON_ELEMENT(OT, IT, OP, BEFORE, AFTER){ \ OT *oa=o->array; \ IT *ia=in->array, *iaf=ia + in->size; \ do *oa++ = OP( *ia++ BEFORE ) AFTER; while(ia<iaf); \ } #define UNIFUNC_RUN_FUNCTION_ON_ELEMENT_INSET(IT, OP, BEFORE, AFTER) \ switch(o->type) \ { \ case GAL_TYPE_UINT8: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(uint8_t, IT, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_INT8: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(int8_t, IT, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_UINT16: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(uint16_t, IT, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_INT16: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(int16_t, IT, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_UINT32: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(uint32_t, IT, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_INT32: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(int32_t, IT, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_UINT64: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(uint64_t, IT, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_INT64: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(int64_t, IT, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_FLOAT32: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(float, IT, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_FLOAT64: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(double, IT, OP, BEFORE, AFTER) \ break; \ default: \ error(EXIT_FAILURE, 0, "%s: type code %d not recognized", \ "UNIARY_FUNCTION_ON_ELEMENT", in->type); \ } #define UNIARY_FUNCTION_ON_ELEMENT_OUTPUT_STRING(OP) \ switch(in->type) \ { \ case GAL_TYPE_UINT8: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(char *, uint8_t, OP, +0, +0) \ break; \ case GAL_TYPE_INT8: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(char *, int8_t, OP, +0, +0) \ break; \ case GAL_TYPE_UINT16: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(char *, uint16_t, OP, +0, +0) \ break; \ case GAL_TYPE_INT16: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(char *, int16_t, OP, +0, +0) \ break; \ case GAL_TYPE_UINT32: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(char *, uint32_t, OP, +0, +0) \ break; \ case GAL_TYPE_INT32: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(char *, int32_t, OP, +0, +0) \ break; \ case GAL_TYPE_UINT64: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(char *, uint64_t, OP, +0, +0) \ break; \ case GAL_TYPE_INT64: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(char *, int64_t, OP, +0, +0) \ break; \ case GAL_TYPE_FLOAT32: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(char *, float, OP, +0, +0) \ break; \ case GAL_TYPE_FLOAT64: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT(char *, double, OP, +0, +0) \ break; \ default: \ error(EXIT_FAILURE, 0, "%s: type code %d not recognized", \ "UNIARY_FUNCTION_ON_ELEMENT_OUTPUT_STRING", in->type); \ } #define UNIARY_FUNCTION_ON_ELEMENT(OP, BEFORE, AFTER) \ switch(in->type) \ { \ case GAL_TYPE_UINT8: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT_INSET(uint8_t, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_INT8: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT_INSET(int8_t, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_UINT16: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT_INSET(uint16_t, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_INT16: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT_INSET(int16_t, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_UINT32: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT_INSET(uint32_t, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_INT32: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT_INSET(int32_t, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_UINT64: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT_INSET(uint64_t, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_INT64: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT_INSET(int64_t, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_FLOAT32: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT_INSET(float, OP, BEFORE, AFTER) \ break; \ case GAL_TYPE_FLOAT64: \ UNIFUNC_RUN_FUNCTION_ON_ELEMENT_INSET(double, OP, BEFORE, AFTER) \ break; \ default: \ error(EXIT_FAILURE, 0, "%s: type code %d not recognized", \ "UNIARY_FUNCTION_ON_ELEMENT", in->type); \ } #define UNIFUNC_RUN_FUNCTION_ON_ELEMENT_SEXAGESIMAL(OT, OP){ \ OT *oa=o->array; \ char **ia, **iaf; \ /* If the input dataset isn't a string (it was parsed as a */ \ /* number, stop the program and let the user know what to do. */ \ /* This can happen with the Arithmetic program, for example if */ \ /* this command is called: 'astarithmetic 16 ra-to-deg'. */ \ if(in->type!=GAL_TYPE_STRING) \ error(EXIT_FAILURE, 0, "%s: the input should be a string in " \ "the format of %s (where the '_' are place-holders for " \ "numbers). This error may happen when you are calling a " \ "command like \"astarithmetic 16 %s\" or \"echo %s | " \ "asttable -c'arith $1 %s'\". In such cases, please use " \ "this command: " \ "\"echo %s | asttable\" (by default, when a string type " \ "isn't specified for a column, and it conforms to the " \ "pattern above, 'asttable' does the conversion " \ "internally; this is the cause of the second type of " \ "error above). The '%s' operator is only relevant for " \ "many sexagesimal values in a string-type table column", \ gal_arithmetic_operator_string(operator), \ ( operator==GAL_ARITHMETIC_OP_RA_TO_DEGREE \ ? "'_h_m_s' or '_h_m_'" \ : "'_d_m_s' or '_d_m_'" ), \ gal_arithmetic_operator_string(operator), \ ( operator==GAL_ARITHMETIC_OP_RA_TO_DEGREE \ ? "16h0m0" : "16d0m0" ), \ gal_arithmetic_operator_string(operator), \ ( operator==GAL_ARITHMETIC_OP_RA_TO_DEGREE \ ? "16h0m0" : "16d0m0" ), \ gal_arithmetic_operator_string(operator)); \ iaf = (ia=in->array) + in->size; \ do *oa++ = OP(*ia++); while(ia<iaf); \ } static gal_data_t * arithmetic_function_unary(int operator, int flags, gal_data_t *in) { uint8_t otype; int inplace=0; gal_data_t *o; /* The dataset may be empty. In this case, the output should also be empty (we can have tables and images with 0 rows or pixels!). */ if(in->size==0 || in->array==NULL) return in; /* See if the operation should be done in place. The output of these operators is defined in the floating point space. So even if the input is an integer type and user requested in place operation, if it's not a floating point type, it will not be in place. */ if( (flags & GAL_ARITHMETIC_FLAG_INPLACE) && ( in->type==GAL_TYPE_FLOAT32 || in->type==GAL_TYPE_FLOAT64 ) && ( operator != GAL_ARITHMETIC_OP_RA_TO_DEGREE && operator != GAL_ARITHMETIC_OP_DEC_TO_DEGREE && operator != GAL_ARITHMETIC_OP_DEGREE_TO_RA && operator != GAL_ARITHMETIC_OP_DEGREE_TO_DEC ) ) inplace=1; /* Set the output pointer. */ if(inplace) { o = in; otype=in->type; } else { /* Check for operators which have fixed output types. */ if( operator == GAL_ARITHMETIC_OP_RA_TO_DEGREE || operator == GAL_ARITHMETIC_OP_DEC_TO_DEGREE ) otype = GAL_TYPE_FLOAT64; else if( operator == GAL_ARITHMETIC_OP_DEGREE_TO_RA || operator == GAL_ARITHMETIC_OP_DEGREE_TO_DEC ) otype = GAL_TYPE_STRING; else otype = ( in->type==GAL_TYPE_FLOAT64 ? GAL_TYPE_FLOAT64 : GAL_TYPE_FLOAT32 ); /* Set the final output type. */ o = gal_data_alloc(NULL, otype, in->ndim, in->dsize, in->wcs, 0, in->minmapsize, in->quietmmap, NULL, NULL, NULL); } /* Start setting the operator and operands. The mathematical constant 'PI' is imported from the GSL as M_PI. */ switch(operator) { case GAL_ARITHMETIC_OP_SQRT: UNIARY_FUNCTION_ON_ELEMENT( sqrt, +0, +0); break; case GAL_ARITHMETIC_OP_LOG: UNIARY_FUNCTION_ON_ELEMENT( log, +0, +0); break; case GAL_ARITHMETIC_OP_LOG10: UNIARY_FUNCTION_ON_ELEMENT( log10, +0, +0); break; case GAL_ARITHMETIC_OP_SIN: UNIARY_FUNCTION_ON_ELEMENT( sin, *M_PI/180.0f, +0); break; case GAL_ARITHMETIC_OP_COS: UNIARY_FUNCTION_ON_ELEMENT( cos, *M_PI/180.0f, +0); break; case GAL_ARITHMETIC_OP_TAN: UNIARY_FUNCTION_ON_ELEMENT( tan, *M_PI/180.0f, +0); break; case GAL_ARITHMETIC_OP_ASIN: UNIARY_FUNCTION_ON_ELEMENT( asin, +0, *180.0f/M_PI); break; case GAL_ARITHMETIC_OP_ACOS: UNIARY_FUNCTION_ON_ELEMENT( acos, +0, *180.0f/M_PI); break; case GAL_ARITHMETIC_OP_ATAN: UNIARY_FUNCTION_ON_ELEMENT( atan, +0, *180.0f/M_PI); break; case GAL_ARITHMETIC_OP_SINH: UNIARY_FUNCTION_ON_ELEMENT( sinh, +0, +0); break; case GAL_ARITHMETIC_OP_COSH: UNIARY_FUNCTION_ON_ELEMENT( cosh, +0, +0); break; case GAL_ARITHMETIC_OP_TANH: UNIARY_FUNCTION_ON_ELEMENT( tanh, +0, +0); break; case GAL_ARITHMETIC_OP_ASINH: UNIARY_FUNCTION_ON_ELEMENT( asinh, +0, +0); break; case GAL_ARITHMETIC_OP_ACOSH: UNIARY_FUNCTION_ON_ELEMENT( acosh, +0, +0); break; case GAL_ARITHMETIC_OP_ATANH: UNIARY_FUNCTION_ON_ELEMENT( atanh, +0, +0); break; case GAL_ARITHMETIC_OP_MAG_TO_JY: UNIARY_FUNCTION_ON_ELEMENT( gal_units_mag_to_jy, +0, +0); break; case GAL_ARITHMETIC_OP_JY_TO_MAG: UNIARY_FUNCTION_ON_ELEMENT( gal_units_jy_to_mag, +0, +0); break; case GAL_ARITHMETIC_OP_AU_TO_PC: UNIARY_FUNCTION_ON_ELEMENT( gal_units_au_to_pc, +0, +0); break; case GAL_ARITHMETIC_OP_PC_TO_AU: UNIARY_FUNCTION_ON_ELEMENT( gal_units_pc_to_au, +0, +0); break; case GAL_ARITHMETIC_OP_LY_TO_PC: UNIARY_FUNCTION_ON_ELEMENT( gal_units_ly_to_pc, +0, +0); break; case GAL_ARITHMETIC_OP_PC_TO_LY: UNIARY_FUNCTION_ON_ELEMENT( gal_units_pc_to_ly, +0, +0); break; case GAL_ARITHMETIC_OP_LY_TO_AU: UNIARY_FUNCTION_ON_ELEMENT( gal_units_ly_to_au, +0, +0); break; case GAL_ARITHMETIC_OP_AU_TO_LY: UNIARY_FUNCTION_ON_ELEMENT( gal_units_au_to_ly, +0, +0); break; case GAL_ARITHMETIC_OP_RA_TO_DEGREE: UNIFUNC_RUN_FUNCTION_ON_ELEMENT_SEXAGESIMAL(double, gal_units_ra_to_degree); break; case GAL_ARITHMETIC_OP_DEC_TO_DEGREE: UNIFUNC_RUN_FUNCTION_ON_ELEMENT_SEXAGESIMAL(double, gal_units_dec_to_degree); break; case GAL_ARITHMETIC_OP_DEGREE_TO_RA: UNIARY_FUNCTION_ON_ELEMENT_OUTPUT_STRING(arithmetic_units_degree_to_ra); break; case GAL_ARITHMETIC_OP_DEGREE_TO_DEC: UNIARY_FUNCTION_ON_ELEMENT_OUTPUT_STRING(arithmetic_units_degree_to_dec); break; default: error(EXIT_FAILURE, 0, "%s: operator code %d not recognized", __func__, operator); } /* Clean up. Note that if the input arrays can be freed, and any of right or left arrays needed conversion, 'UNIFUNC_CONVERT_TO_COMPILED_TYPE' has already freed the input arrays, and we only have 'r' and 'l' allocated in any case. Alternatively, when the inputs shouldn't be freed, the only allocated spaces are the 'r' and 'l' arrays if their types weren't compiled for binary operations, we can tell this from the pointers: if they are different from the original pointers, they were allocated. */ if( (flags & GAL_ARITHMETIC_FLAG_FREE) && o!=in) gal_data_free(in); /* Return */ return o; } /* These are unit-conversion operators that need two components (like 2D coordinate system conversion). */ static gal_data_t * arithmetic_unit_binary(int operator, int flags, gal_data_t *a_in, gal_data_t *b_in) { int sys1, sys2; gal_data_t *a, *b; /* If the input datasets are empty, abort. */ if(a_in==NULL || b_in==NULL) error(EXIT_FAILURE, 0, "%s: at least one of the input " "datasets ('a_in' and 'b_in') is NULL", __func__); /* Make sure the two inputs have the same size. */ if(a_in->size != b_in->size) error(EXIT_FAILURE, 0, "%s: the two inputs have different " "sizes: %zu for 'a_in' and %zu for 'b_in'", __func__, a_in->size, b_in->size); /* Set any potentially 'next' element of the inputs to NULL. */ if(a_in->next && a_in->next!=b_in) gal_data_free(a_in->next); if(b_in->next && b_in->next!=a_in) gal_data_free(b_in->next); a_in->next = b_in->next = NULL; /* Convert the inputs to double-precision floating points.*/ a = ( flags & GAL_ARITHMETIC_FLAG_FREE ? gal_data_copy_to_new_type_free(a_in, GAL_TYPE_FLOAT64) : gal_data_copy_to_new_type(a_in, GAL_TYPE_FLOAT64) ); b = ( flags & GAL_ARITHMETIC_FLAG_FREE ? gal_data_copy_to_new_type_free(b_in, GAL_TYPE_FLOAT64) : gal_data_copy_to_new_type(b_in, GAL_TYPE_FLOAT64) ); /* Set the two systems. */ switch(operator) { case GAL_ARITHMETIC_OP_EQB1950_TO_EQJ2000: sys1=GAL_WCS_COORDSYS_EQB1950; sys2=GAL_WCS_COORDSYS_EQJ2000; break; case GAL_ARITHMETIC_OP_EQB1950_TO_ECB1950: sys1=GAL_WCS_COORDSYS_EQB1950; sys2=GAL_WCS_COORDSYS_ECB1950; break; case GAL_ARITHMETIC_OP_EQB1950_TO_ECJ2000: sys1=GAL_WCS_COORDSYS_EQB1950; sys2=GAL_WCS_COORDSYS_ECJ2000; break; case GAL_ARITHMETIC_OP_EQB1950_TO_GALACTIC: sys1=GAL_WCS_COORDSYS_EQB1950; sys2=GAL_WCS_COORDSYS_GALACTIC; break; case GAL_ARITHMETIC_OP_EQB1950_TO_SUPERGALACTIC: sys1=GAL_WCS_COORDSYS_EQB1950; sys2=GAL_WCS_COORDSYS_SUPERGALACTIC; break; case GAL_ARITHMETIC_OP_EQJ2000_TO_EQB1950: sys1=GAL_WCS_COORDSYS_EQJ2000; sys2=GAL_WCS_COORDSYS_EQB1950; break; case GAL_ARITHMETIC_OP_EQJ2000_TO_ECB1950: sys1=GAL_WCS_COORDSYS_EQJ2000; sys2=GAL_WCS_COORDSYS_ECB1950; break; case GAL_ARITHMETIC_OP_EQJ2000_TO_ECJ2000: sys1=GAL_WCS_COORDSYS_EQJ2000; sys2=GAL_WCS_COORDSYS_ECJ2000; break; case GAL_ARITHMETIC_OP_EQJ2000_TO_GALACTIC: sys1=GAL_WCS_COORDSYS_EQJ2000; sys2=GAL_WCS_COORDSYS_GALACTIC; break; case GAL_ARITHMETIC_OP_EQJ2000_TO_SUPERGALACTIC: sys1=GAL_WCS_COORDSYS_EQJ2000; sys2=GAL_WCS_COORDSYS_SUPERGALACTIC; break; case GAL_ARITHMETIC_OP_ECB1950_TO_EQB1950: sys1=GAL_WCS_COORDSYS_ECB1950; sys2=GAL_WCS_COORDSYS_EQB1950; break; case GAL_ARITHMETIC_OP_ECB1950_TO_EQJ2000: sys1=GAL_WCS_COORDSYS_ECB1950; sys2=GAL_WCS_COORDSYS_EQJ2000; break; case GAL_ARITHMETIC_OP_ECB1950_TO_ECJ2000: sys1=GAL_WCS_COORDSYS_ECB1950; sys2=GAL_WCS_COORDSYS_ECJ2000; break; case GAL_ARITHMETIC_OP_ECB1950_TO_GALACTIC: sys1=GAL_WCS_COORDSYS_ECB1950; sys2=GAL_WCS_COORDSYS_GALACTIC; break; case GAL_ARITHMETIC_OP_ECB1950_TO_SUPERGALACTIC: sys1=GAL_WCS_COORDSYS_ECB1950; sys2=GAL_WCS_COORDSYS_SUPERGALACTIC; break; case GAL_ARITHMETIC_OP_ECJ2000_TO_EQB1950: sys1=GAL_WCS_COORDSYS_ECJ2000; sys2=GAL_WCS_COORDSYS_EQB1950; break; case GAL_ARITHMETIC_OP_ECJ2000_TO_EQJ2000: sys1=GAL_WCS_COORDSYS_ECJ2000; sys2=GAL_WCS_COORDSYS_EQJ2000; break; case GAL_ARITHMETIC_OP_ECJ2000_TO_ECB1950: sys1=GAL_WCS_COORDSYS_ECJ2000; sys2=GAL_WCS_COORDSYS_ECB1950; break; case GAL_ARITHMETIC_OP_ECJ2000_TO_GALACTIC: sys1=GAL_WCS_COORDSYS_ECJ2000; sys2=GAL_WCS_COORDSYS_GALACTIC; break; case GAL_ARITHMETIC_OP_ECJ2000_TO_SUPERGALACTIC: sys1=GAL_WCS_COORDSYS_ECJ2000; sys2=GAL_WCS_COORDSYS_SUPERGALACTIC; break; case GAL_ARITHMETIC_OP_GALACTIC_TO_EQB1950: sys1=GAL_WCS_COORDSYS_GALACTIC; sys2=GAL_WCS_COORDSYS_EQB1950; break; case GAL_ARITHMETIC_OP_GALACTIC_TO_EQJ2000: sys1=GAL_WCS_COORDSYS_GALACTIC; sys2=GAL_WCS_COORDSYS_EQJ2000; break; case GAL_ARITHMETIC_OP_GALACTIC_TO_ECB1950: sys1=GAL_WCS_COORDSYS_GALACTIC; sys2=GAL_WCS_COORDSYS_ECB1950; break; case GAL_ARITHMETIC_OP_GALACTIC_TO_ECJ2000: sys1=GAL_WCS_COORDSYS_GALACTIC; sys2=GAL_WCS_COORDSYS_ECJ2000; break; case GAL_ARITHMETIC_OP_GALACTIC_TO_SUPERGALACTIC: sys1=GAL_WCS_COORDSYS_GALACTIC; sys2=GAL_WCS_COORDSYS_SUPERGALACTIC; break; case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQB1950: sys1=GAL_WCS_COORDSYS_GALACTIC; sys2=GAL_WCS_COORDSYS_EQB1950; break; case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQJ2000: sys1=GAL_WCS_COORDSYS_SUPERGALACTIC; sys2=GAL_WCS_COORDSYS_EQJ2000; break; case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECB1950: sys1=GAL_WCS_COORDSYS_SUPERGALACTIC; sys2=GAL_WCS_COORDSYS_ECB1950; break; case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECJ2000: sys1=GAL_WCS_COORDSYS_SUPERGALACTIC; sys2=GAL_WCS_COORDSYS_ECJ2000; break; case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_GALACTIC: sys1=GAL_WCS_COORDSYS_SUPERGALACTIC; sys2=GAL_WCS_COORDSYS_GALACTIC; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. The code '%d' is not a recognized operator " "in this function", __func__, PACKAGE_BUGREPORT, operator); } /* Call the main conversion function (and write the values in place). */ gal_wcs_coordsys_convert_points(sys1, a->array, b->array, sys2, a->array, b->array, a->size); /* Clean up and return. */ if( (flags & GAL_ARITHMETIC_FLAG_FREE) && a!=a_in) { gal_data_free(a_in); gal_data_free(b_in); } b->next=a; return b; } /* Call functions in the 'gnuastro/statistics' library. */ static gal_data_t * arithmetic_from_statistics(int operator, int flags, gal_data_t *input) { gal_data_t *out=NULL; int ip= ( (flags & GAL_ARITHMETIC_FLAG_INPLACE) || (flags & GAL_ARITHMETIC_FLAG_FREE) ); /* The dataset may be empty. In this case, the output should also be empty (we can have tables and images with 0 rows or pixels!). */ if(input->size==0 || input->array==NULL) return input; /* Do the operation. */ switch(operator) { case GAL_ARITHMETIC_OP_MINVAL: out=gal_statistics_minimum(input);break; case GAL_ARITHMETIC_OP_MAXVAL: out=gal_statistics_maximum(input);break; case GAL_ARITHMETIC_OP_NUMBERVAL:out=gal_statistics_number(input); break; case GAL_ARITHMETIC_OP_SUMVAL: out=gal_statistics_sum(input); break; case GAL_ARITHMETIC_OP_MEANVAL: out=gal_statistics_mean(input); break; case GAL_ARITHMETIC_OP_STDVAL: out=gal_statistics_std(input); break; case GAL_ARITHMETIC_OP_MEDIANVAL: out=gal_statistics_median(input, ip); break; default: error(EXIT_FAILURE, 0, "%s: operator code %d not recognized", __func__, operator); } /* If the input is to be freed, then do so and return the output. */ if( flags & GAL_ARITHMETIC_FLAG_FREE ) gal_data_free(input); return out; } /* Call functions in the 'gnuastro/statistics' library. */ static gal_data_t * arithmetic_to_oned(int operator, int flags, gal_data_t *input) { gal_data_t *out=NULL; int inplace=flags & GAL_ARITHMETIC_FLAG_FREE; switch(operator) { case GAL_ARITHMETIC_OP_UNIQUE: out=gal_statistics_unique(input, inplace); break; case GAL_ARITHMETIC_OP_NOBLANK: out = inplace ? input : gal_data_copy(input); gal_blank_remove(out); break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at " "'%s' to fix the problem. The value '%d' to " "'operator' is not recognized", __func__, PACKAGE_BUGREPORT, operator); } /* Return the output dataset. */ return out; } /***********************************************************************/ /*************** Adding noise **************/ /***********************************************************************/ static gsl_rng * arithmetic_gsl_initialize(int flags, const char **rng_name, unsigned long *rng_seed, char *operator_str) { gsl_rng *rng; /* Column counter in case '--envseed' is given and we have multiple columns. */ static unsigned long colcounter=0; /* Setup the random number generator. For 'envseed', we want to pass a boolean value: either 0 or 1. However, when we say 'flags & GAL_ARITHMETIC_ENVSEED', the returned value is the integer positioning of the envseed bit (for example if it's on the fourth bit, the value will be 8). This can cause problems if it is on the 8th bit (or any multiple of 8). So to avoid issues with the bit-positioning of the 'ENVSEED', we will return the conditional to see if the result of the bit-wise '&' is larger than 0 or not (binary). */ rng=gal_checkset_gsl_rng( (flags & GAL_ARITHMETIC_FLAG_ENVSEED)>0, rng_name, rng_seed); /* If '--envseed' was called, we need to add the column counter to the requested seed (so it is not the same for all columns. */ if(flags & GAL_ARITHMETIC_FLAG_ENVSEED) { *rng_seed += colcounter++; gsl_rng_set(rng, *rng_seed); } /* Print the basic RNG information if requested. */ if( (flags & GAL_ARITHMETIC_FLAG_QUIET)==0 ) { printf(" - Parameters used for '%s':\n", operator_str); printf(" - Random number generator name: %s\n", *rng_name); printf(" - Random number generator seed: %lu\n", *rng_seed); } /* Return the GSL random number generator. */ return rng; } /* The size operator. Reports the size along a given dimension. */ static gal_data_t * arithmetic_mknoise(int operator, int flags, gal_data_t *in, gal_data_t *arg) { size_t i; gsl_rng *rng; uint32_t *u32; const char *rng_name; unsigned long rng_seed; gal_data_t *out, *targ; int otype=GAL_TYPE_INVALID; double *id, *od, *aarr, arg_v; /* The dataset may be empty. In this case, the output should also be empty (we can have tables and images with 0 rows or pixels!). */ if(in->size==0 || in->array==NULL) return in; /* Sanity checks. */ if(arg->size!=1 && arg->size!=in->size) error(EXIT_FAILURE, 0, "the first popped operand to the '%s' " "operator should either be a single number or have the " "same number of elements as the input data. Recall that " "it specifies the fixed sigma, or background level for " "Poisson noise). However, it has %zu elements, in %zu " "dimension(s)", gal_arithmetic_operator_string(operator), arg->size, arg->ndim); if(in->type==GAL_TYPE_STRING) error(EXIT_FAILURE, 0, "the input dataset to the '%s' operator " "should have a numerical data type (integer or float), but " "it has a string type", gal_arithmetic_operator_string(operator)); /* Prepare the output dataset (for the Poisson distribution, it should be 32-bit integers). */ switch(operator) { case GAL_ARITHMETIC_OP_MKNOISE_SIGMA: case GAL_ARITHMETIC_OP_MKNOISE_UNIFORM: case GAL_ARITHMETIC_OP_MKNOISE_SIGMA_FROM_MEAN: otype=GAL_TYPE_FLOAT64; break; case GAL_ARITHMETIC_OP_MKNOISE_POISSON: otype=GAL_TYPE_UINT32; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The operator code %d isn't recognized " "in this function", __func__, PACKAGE_BUGREPORT, operator); } in=gal_data_copy_to_new_type_free(in, GAL_TYPE_FLOAT64); out = ( in->type==otype ? in : gal_data_alloc(NULL, otype, in->ndim, in->dsize, in->wcs, 0, in->minmapsize, in->quietmmap, NULL, NULL, NULL) ); targ=gal_data_copy_to_new_type(arg, GAL_TYPE_FLOAT64); aarr=targ->array; /* Initialize the GSL random number generator. */ rng=arithmetic_gsl_initialize(flags, &rng_name, &rng_seed, gal_arithmetic_operator_string(operator)); /* Add the noise. */ id=in->array; od=out->array; for(i=0;i<out->size;++i) { /* Set the argument value. */ arg_v = arg->size==1 ? aarr[0] : aarr[i]; /* Make sure the noise identifier is positive. */ if(arg_v<0) error(EXIT_FAILURE, 0, "the noise identifier (sigma for " "'mknoise-sigma', background for 'mknoise-poisson', or " "range for 'mknoise-uniform') must be positive (it is %g)", arg_v); /* Do the necessary operation. */ switch(operator) { case GAL_ARITHMETIC_OP_MKNOISE_SIGMA: od[i] = id[i] + gsl_ran_gaussian(rng, arg_v); break; case GAL_ARITHMETIC_OP_MKNOISE_SIGMA_FROM_MEAN: od[i] = id[i] + arg_v + gsl_ran_gaussian(rng, sqrt(arg_v+id[i])); break; case GAL_ARITHMETIC_OP_MKNOISE_POISSON: u32=out->array; u32[i] = gsl_ran_poisson(rng, arg_v + id[i]); break; case GAL_ARITHMETIC_OP_MKNOISE_UNIFORM: od[i] = id[i] + gsl_rng_uniform(rng)*arg_v - arg_v/2; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The operator code %d isn't recognized " "in this function", __func__, PACKAGE_BUGREPORT, operator); } } /* Clean up and return */ if(flags & GAL_ARITHMETIC_FLAG_FREE) { gal_data_free(arg); if(in!=out) gal_data_free(in);} gal_data_free(targ); gsl_rng_free(rng); return out; } /* Sanity checks for 'random_from_hist'. */ static void arithmetic_random_from_hist_sanity(gal_data_t **inhist, gal_data_t **inbinc, gal_data_t *in, int operator) { size_t i; double *d, diff, binwidth, binwidth_e; gal_data_t *hist=*inhist, *binc=*inbinc; /* The 'hist' and 'bincenter' arrays should be 1-dimensional and both should have the same size. */ if(hist->ndim!=1) error(EXIT_FAILURE, 0, "the first popped (nearest) operand to the " "'%s' operator should only have a single dimension. However, " "it has %zu dimensions", gal_arithmetic_operator_string(operator), hist->ndim); if(binc->ndim!=1) error(EXIT_FAILURE, 0, "the second popped (second nearest) operand " "to the '%s' operator should only have a single " "dimension. However, it has %zu dimensions", gal_arithmetic_operator_string(operator), binc->ndim); if(hist->size!=binc->size) error(EXIT_FAILURE, 0, "the first and second popped operands to the " "'%s' operator must have the same size! However, " "they have %zu and %zu elements respectively", gal_arithmetic_operator_string(operator), hist->size, binc->size); /* The input type shouldn't be a string. */ if( in->type==GAL_TYPE_STRING ) error(EXIT_FAILURE, 0, "the input dataset to the '%s' " "operator should have a numerical data type (integer or " "float), but it has a string type", gal_arithmetic_operator_string(operator)); /* The histogram should be in float64 type, we'll also set the bin centers to float64 to enable easy sanity checks. */ *inhist=gal_data_copy_to_new_type_free(hist, GAL_TYPE_FLOAT64); binc=*inbinc=gal_data_copy_to_new_type_free(binc, GAL_TYPE_FLOAT64); /* For the 'random-from-hist' operator, we will need to assume that the bins are equally spaced and that they are ascending. */ if(operator==GAL_ARITHMETIC_OP_RANDOM_FROM_HIST) { d=binc->array; binwidth=d[1]-d[0]; if(binwidth<0) error(EXIT_FAILURE, 0, "the bins given to the '%s' operator " "should be in ascending order, but the second row " "(%g) is smaller than the first (%g)", gal_arithmetic_operator_string(operator), d[1], d[0]); /* Make sure the bins are in ascending order and have a fixed bin width (within floating point errors: hence where 1e-6 comes from). */ binwidth_e=binwidth*1e-6; for(i=0;i<binc->size-1;++i) { diff=d[i+1]-d[i]; if(diff>binwidth+binwidth_e || diff<binwidth-binwidth_e) error(EXIT_FAILURE, 0, "the bins given to the '%s' operator " "should be in ascending order, but row %zu (with value " "%g) is larger than the next row's value (%g)", gal_arithmetic_operator_string(operator), i+1, d[i], d[i+1]); } } } /* Build a custom noise distribution. */ static gal_data_t * arithmetic_random_from_hist(int operator, int flags, gal_data_t *in, gal_data_t *binc, gal_data_t *hist) { size_t rind; const char *rng_name; gal_data_t *out=NULL; unsigned long rng_seed; gsl_rng *rng=NULL, *rngu=NULL; gsl_ran_discrete_t *disc=NULL; double *b, *d, *df, binwidth, halfbinwidth; /* The dataset may be empty. In this case, the output should also be empty (we can have tables and images with 0 rows or pixels!). */ if(in->size==0 || in->array==NULL) return in; /* Basic sanity checks. */ arithmetic_random_from_hist_sanity(&hist, &binc, in, GAL_ARITHMETIC_OP_RANDOM_FROM_HIST); /* Allocate the output dataset (based on the size and dimensions of the input), then free the input. */ out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, in->ndim, in->dsize, in->wcs, 0, in->minmapsize, in->quietmmap, "RANDOM_FROM_HIST", hist->unit, "Random values from custom distribution"); /* Initialize the GSL random number generator. */ rng=arithmetic_gsl_initialize(flags, &rng_name, &rng_seed, gal_arithmetic_operator_string(operator)); if(operator==GAL_ARITHMETIC_OP_RANDOM_FROM_HIST) rngu=arithmetic_gsl_initialize(flags, &rng_name, &rng_seed, "uniform component of 'random-" "from-hist'"); /* Pre-process the descrete random number generator. */ disc=gsl_ran_discrete_preproc(hist->size, hist->array); /* Apply the random number generator over the output. Note that 'gsl_ran_discrete' returns the index to the bin centers table that we can return. */ b=binc->array; binwidth=b[1]-b[0]; halfbinwidth=binwidth/2; df=(d=out->array)+out->size; do { rind=gsl_ran_discrete(rng, disc); *d = ( operator==GAL_ARITHMETIC_OP_RANDOM_FROM_HIST ? ((b[rind]-halfbinwidth) + gsl_rng_uniform(rngu)*binwidth) : b[rind] ); } while(++d<df); /* Clean up and return. */ gsl_rng_free(rng); if(rngu) gsl_rng_free(rngu); gsl_ran_discrete_free(disc); if(flags & GAL_ARITHMETIC_FLAG_FREE) { gal_data_free(in); gal_data_free(hist); gal_data_free(binc); } return out; } /***********************************************************************/ /*************** Metadata **************/ /***********************************************************************/ /* The size operator. Reports the size along a given dimension. */ static gal_data_t * arithmetic_size(int operator, int flags, gal_data_t *in, gal_data_t *arg) { size_t one=1, arg_val; gal_data_t *usearg=NULL, *out=NULL; /* Sanity checks on argument (dimension number): it should be an integer, and have a size of 1. */ if(arg->type==GAL_TYPE_FLOAT32 || arg->type==GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "%s: size operator's dimension argument" "must have an integer type", __func__); if(arg->size!=1) error(EXIT_FAILURE, 0, "%s: size operator's dimension argument" "must be a single number, but it has %zu elements", __func__, arg->size); /* Convert 'arg' to 'size_t' and read it. Note that we can only free the 'arg' array (while changing its type), when the freeing flag has been set. */ if(flags & GAL_ARITHMETIC_FLAG_FREE) { arg=gal_data_copy_to_new_type_free(arg, GAL_TYPE_SIZE_T); arg_val=*(size_t *)(arg->array); gal_data_free(arg); } else { usearg=gal_data_copy_to_new_type(arg, GAL_TYPE_SIZE_T); arg_val=*(size_t *)(usearg->array); gal_data_free(usearg); } /* Sanity checks on the value of the given argument. */ if(arg_val>in->ndim) error(EXIT_FAILURE, 0, "%s: size operator's dimension argument " "(given %zu) cannot be larger than the dimensions of the " "given input (%zu)", __func__, arg_val, in->ndim); if(arg_val==0) error(EXIT_FAILURE, 0, "%s: size operator's dimension argument " "(given %zu) cannot be zero: dimensions are counted from 1", __func__, arg_val); /* Allocate the output array and write the desired dimension. Note that 'dsize' is in the C order, while the output must be in FITS/Fortran order. Also that C order starts from 0, while the FITS order starts from 1. */ out=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, &one, NULL, 0, in->minmapsize, 0, NULL, NULL, NULL); *(size_t *)(out->array)=in->dsize[in->ndim-arg_val]; /* Clean up and return. */ if(flags & GAL_ARITHMETIC_FLAG_FREE) gal_data_free(in); return out; } /* Stitch multiple operands along a given dimension. */ static gal_data_t * arithmetic_to_1d(int flags, gal_data_t *input) { size_t i; /* Set absurd value to cause a crash if values that shouldn't be used are used! */ for(i=1;i<input->ndim;++i) input->dsize[i]=GAL_BLANK_UINT64; /* Reset the metadata and return.*/ input->ndim=1; input->dsize[0]=input->size; return input; } static size_t arithmetic_stitch_sanity_check(gal_data_t *list, gal_data_t *fdim) { float *fitsdim; gal_data_t *tmp; size_t c, dim, otherdim; /* Currently we only have the stitch operator for 2D datasets. */ if(list->ndim>2) error(EXIT_FAILURE, 0, "currently the 'stitch' operator only " "works with 2D datasets (images) but you have given a " "%zu dimensional dataset. Please get in touch with us " "at '%s' to add this feature", list->ndim, PACKAGE_BUGREPORT); /* Make sure that the dimention is an integer. */ fitsdim=fdim->array; if( fitsdim[0] != ceil(fitsdim[0]) ) error(EXIT_FAILURE, 0, "the dimension operand (first popped " "operand) to 'stitch' should be an integer, but it is " "'%g'", fitsdim[0]); /* Make sure that the requested dimension is not larger than the input's number of dimensions. */ if(fitsdim[0]>list->ndim) error(EXIT_FAILURE, 0, "the dimension operand (first popped " "operand) to 'stitch' is %g, but your input datasets " "only have %zu dimensions", fitsdim[0], list->ndim); /* Convert the given dimension (in FITS standard) to C standard. */ dim = list->ndim - fitsdim[0]; /* Go through the list of datasets and make sure the dimensionality is fine. */ c=0; for(tmp=list; tmp!=NULL; tmp=tmp->next) { /* Increment the counter. */ ++c; /* Make sure they have the same numerical data type. */ if(tmp->type!=list->type) error(EXIT_FAILURE, 0, "input dataset number %zu has a " "numerical data type of '%s' while the first " "input has a type of '%s'", c, gal_type_name(tmp->type,1), gal_type_name(list->ndim,1)); /* Make sure they have the same number of dimensions. */ if(tmp->ndim!=list->ndim) error(EXIT_FAILURE, 0, "input dataset number %zu has %zu " "dimensions, while the first input has %zu dimensions", c, tmp->ndim, list->ndim); /* Make sure the length along the non-requested dimension in all the inputs are the same. Recall that we currently only support 2D datasets, so 'dim' is either '1' or '0' (we are not using '!dim' because some compilers can give the 'logical-not-parentheses' warning). */ otherdim = dim ? 0 : 1; if( tmp->dsize[otherdim]!=list->dsize[otherdim]) error(EXIT_FAILURE, 0, "input dataset number %zu has %zu " "elements along dimension number %d, while the first " "has %zu elements along that dimension", c, tmp->dsize[otherdim], otherdim==0 ? 2 : 1, list->dsize[otherdim]); } /* Return the dimension number that must be used. */ return dim; } /* Stitch multiple operands along a given dimension. */ static gal_data_t * arithmetic_stitch(int flags, gal_data_t *list, gal_data_t *fdim) { void *oarr; gal_data_t *tmp, *out; uint8_t type=list->type; size_t i, dim, sum, dsize[2]={GAL_BLANK_SIZE_T, GAL_BLANK_SIZE_T}; /* In case we are dealing with a single-element list, just return it! */ if(list->next==NULL) return list; /* Make sure everything is good! */ dim=arithmetic_stitch_sanity_check(list, fdim); /* Find the size of the final output dataset. */ sum=0; for(tmp=list; tmp!=NULL; tmp=tmp->next) sum+=tmp->dsize[dim]; dsize[0] = dim==0 ? sum : list->dsize[0]; if(list->ndim>1) dsize[1] = dim==0 ? list->dsize[1] : sum; /* Allocate the output dataset. */ out=gal_data_alloc(NULL, list->type, list->ndim, dsize, list->wcs, 0, list->minmapsize, list->quietmmap, "Stitched", list->unit, "Stitched dataset"); /* Write the individual datasets into the output. Note that 'dim' is the dimension counter of the C standard. */ oarr=out->array; switch(list->ndim) { case 1: /* 1D stitching. */ sum=0; for(tmp=list; tmp!=NULL; tmp=tmp->next) { memcpy(gal_pointer_increment(oarr, sum, type), tmp->array, gal_type_sizeof(type)*tmp->size); sum+=tmp->size; } break; case 2: /* 2D stitching. */ for(tmp=list; tmp!=NULL; tmp=tmp->next) { switch(dim) { /* Vertical stitching (second FITS axis is the vertical axis). */ case 0: memcpy(oarr,tmp->array, gal_type_sizeof(type)*tmp->size); oarr += gal_type_sizeof(type)*tmp->size; break; /* Horizontal stitching (first FITS axis is the horizontal axis). */ case 1: /* Copy row-by-row. */ for(i=0;i<dsize[0];++i) memcpy(gal_pointer_increment(oarr, i*dsize[1], type), gal_pointer_increment(tmp->array, i*tmp->dsize[1], type), gal_type_sizeof(type)*tmp->dsize[1]); /* Copying has finished, increment the start for the next image. Note that in this scenario, the starting pixel for the next image is on the first row, but tmp->dsize[1] pixels away. */ oarr += gal_type_sizeof(type)*tmp->dsize[1]; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to find and fix the problem. The value of 'dim' is " "'%zu' is not understood", __func__, PACKAGE_BUGREPORT, dim); } } break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. The value %zu of 'ndim' should have been " "checked before this point!", __func__, PACKAGE_BUGREPORT, list->ndim); } /* Clean up and return. */ if(flags & GAL_ARITHMETIC_FLAG_FREE) gal_list_data_free(list); return out; } /***********************************************************************/ /*************** Where **************/ /***********************************************************************/ /* When the 'iftrue' dataset only has one element and the element is blank, then it will be replaced with the blank value of the type of the output data. */ #define DO_WHERE_OPERATION(ITT, OT) { \ ITT *it=iftrue->array; \ OT b, *o=out->array, *of=o+out->size; \ gal_blank_write(&b, out->type); \ if(iftrue->size==1) \ { \ if( gal_blank_is(it, iftrue->type) ) \ { \ do{*o = (chb && *c==cb) ? *o : (*c ? b : *o); ++c; } \ while(++o<of); \ } \ else \ do {*o = (chb && *c==cb) ? *o : (*c ? *it : *o); ++c; } \ while(++o<of); \ } \ else \ do {*o = (chb && *c==cb) ? *o : (*c ? *it : *o); ++it; ++c;} \ while(++o<of); \ } #define WHERE_OUT_SET(OT) \ switch(iftrue->type) \ { \ case GAL_TYPE_UINT8: DO_WHERE_OPERATION( uint8_t, OT); break; \ case GAL_TYPE_INT8: DO_WHERE_OPERATION( int8_t, OT); break; \ case GAL_TYPE_UINT16: DO_WHERE_OPERATION( uint16_t, OT); break; \ case GAL_TYPE_INT16: DO_WHERE_OPERATION( int16_t, OT); break; \ case GAL_TYPE_UINT32: DO_WHERE_OPERATION( uint32_t, OT); break; \ case GAL_TYPE_INT32: DO_WHERE_OPERATION( int32_t, OT); break; \ case GAL_TYPE_UINT64: DO_WHERE_OPERATION( uint64_t, OT); break; \ case GAL_TYPE_INT64: DO_WHERE_OPERATION( int64_t, OT); break; \ case GAL_TYPE_FLOAT32: DO_WHERE_OPERATION( float, OT); break; \ case GAL_TYPE_FLOAT64: DO_WHERE_OPERATION( double, OT); break; \ default: \ error(EXIT_FAILURE, 0, "%s: type code %d not recognized for the " \ "'iftrue' dataset", "WHERE_OUT_SET", iftrue->type); \ } static void arithmetic_where(int flags, gal_data_t *out, gal_data_t *cond, gal_data_t *iftrue) { size_t i; int chb; /* Read as: "Condition-Has-Blank" */ unsigned char *c=cond->array, cb=GAL_BLANK_UINT8; /* The datasets may be empty. In this case the output should also be empty (we can have tables and images with 0 rows or pixels!). */ if( out->size==0 || out->array==NULL || cond->size==0 || cond->array==NULL || iftrue->size==0 || iftrue->array==NULL ) { if(flags & GAL_ARITHMETIC_FLAG_FREE) { gal_data_free(cond); gal_data_free(iftrue); } if(out->array) {free(out->array); out->array=NULL;} if(out->dsize) for(i=0;i<out->ndim;++i) out->dsize[i]=0; out->size=0; return; } /* The condition operator has to be unsigned char. */ if(cond->type!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: the condition operand must be an " "'uint8' type, but the given condition operand has a " "'%s' type", __func__, gal_type_name(cond->type, 1)); /* The dimension and sizes of the out and condition data sets must be the same. */ if( gal_dimension_is_different(out, cond) ) error(EXIT_FAILURE, 0, "%s: the output and condition datasets " "must have the same size", __func__); /* See if the condition array has blank values. */ chb=gal_blank_present(cond, 0); /* Do the operation. */ switch(out->type) { case GAL_TYPE_UINT8: WHERE_OUT_SET( uint8_t ); break; case GAL_TYPE_INT8: WHERE_OUT_SET( int8_t ); break; case GAL_TYPE_UINT16: WHERE_OUT_SET( uint16_t ); break; case GAL_TYPE_INT16: WHERE_OUT_SET( int16_t ); break; case GAL_TYPE_UINT32: WHERE_OUT_SET( uint32_t ); break; case GAL_TYPE_INT32: WHERE_OUT_SET( int32_t ); break; case GAL_TYPE_UINT64: WHERE_OUT_SET( uint64_t ); break; case GAL_TYPE_INT64: WHERE_OUT_SET( int64_t ); break; case GAL_TYPE_FLOAT32: WHERE_OUT_SET( float ); break; case GAL_TYPE_FLOAT64: WHERE_OUT_SET( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized for the 'out'", __func__, out->type); } /* Clean up if necessary. */ if(flags & GAL_ARITHMETIC_FLAG_FREE) { gal_data_free(cond); gal_data_free(iftrue); } } /***********************************************************************/ /*************** Multiple operand operators **************/ /***********************************************************************/ struct multioperandparams { gal_data_t *list; /* List of input datasets. */ gal_data_t *out; /* Output dataset. */ size_t dnum; /* Number of input dataset. */ int operator; /* Operator to use. */ uint8_t *hasblank; /* Array of 0s or 1s for each input. */ float p1; /* Sigma-cliping parameter 1. */ float p2; /* Sigma-cliping parameter 2. */ uint8_t clipflags; /* Extra clipping measurements. */ gal_data_t *center; /* Center for dilated clipping. */ gal_data_t *spread; /* Spread for dilated clipping. */ }; #define MULTIOPERAND_MIN(TYPE) { \ size_t n, j=0; \ TYPE t, max, *o=p->out->array; \ gal_type_max(p->list->type, &max); \ \ /* Go over all the pixels assigned to this thread. */ \ for(tind=0; tprm->indexs[tind] != GAL_BLANK_SIZE_T; ++tind) \ { \ /* Initialize, 'j' is desired pixel's index. */ \ n=0; \ t=max; \ j=tprm->indexs[tind]; \ \ for(i=0;i<p->dnum;++i) /* Loop over each array. */ \ { /* Only for integer types, b==b. */ \ if( p->hasblank[i] && b==b) \ { \ if( a[i][j] != b ) \ { t = a[i][j] < t ? a[i][j] : t; ++n; } \ } \ else { t = a[i][j] < t ? a[i][j] : t; ++n; } \ } \ o[j] = n ? t : b; /* No usable elements: set to blank. */ \ } \ } #define MULTIOPERAND_MAX(TYPE) { \ size_t n, j=0; \ TYPE t, min, *o=p->out->array; \ gal_type_min(p->list->type, &min); \ \ /* Go over all the pixels assigned to this thread. */ \ for(tind=0; tprm->indexs[tind] != GAL_BLANK_SIZE_T; ++tind) \ { \ /* Initialize, 'j' is desired pixel's index. */ \ n=0; \ t=min; \ j=tprm->indexs[tind]; \ \ for(i=0;i<p->dnum;++i) /* Loop over each array. */ \ { /* Only for integer types, b==b. */ \ if( p->hasblank[i] && b==b) \ { \ if( a[i][j] != b ) \ { t = a[i][j] > t ? a[i][j] : t; ++n; } \ } \ else { t = a[i][j] > t ? a[i][j] : t; ++n; } \ } \ o[j] = n ? t : b; /* No usable elements: set to blank. */ \ } \ } #define MULTIOPERAND_NUM { \ int use; \ size_t n, j; \ uint32_t *o=p->out->array; \ \ /* Go over all the pixels assigned to this thread. */ \ for(tind=0; tprm->indexs[tind] != GAL_BLANK_SIZE_T; ++tind) \ { \ /* Initialize, 'j' is desired pixel's index. */ \ n=0; \ j=tprm->indexs[tind]; \ \ for(i=0;i<p->dnum;++i) /* Loop over each array. */ \ { \ /* Only integers and non-NaN floats: v==v is 1. */ \ if(p->hasblank[i]) \ use = ( b==b \ ? ( a[i][j]!=b ? 1 : 0 ) /* Integer */ \ : ( a[i][j]==a[i][j] ? 1 : 0 ) ); /* Float */ \ else use=1; \ \ /* Increment counter if necessary. */ \ if(use) ++n; \ } \ o[j] = n; \ } \ } #define MULTIOPERAND_SUM { \ int use; \ double sum; \ size_t n, j; \ float *o=p->out->array; \ \ /* Go over all the pixels assigned to this thread. */ \ for(tind=0; tprm->indexs[tind] != GAL_BLANK_SIZE_T; ++tind) \ { \ /* Initialize, 'j' is desired pixel's index. */ \ n=0; \ sum=0.0f; \ j=tprm->indexs[tind]; \ \ for(i=0;i<p->dnum;++i) /* Loop over each array. */ \ { \ /* Only integers and non-NaN floats: v==v is 1. */ \ if(p->hasblank[i]) \ use = ( b==b \ ? ( a[i][j]!=b ? 1 : 0 ) /* Integer */ \ : ( a[i][j]==a[i][j] ? 1 : 0 ) ); /* Float */ \ else use=1; \ \ /* Use in sum if necessary. */ \ if(use) { sum += a[i][j]; ++n; } \ } \ o[j] = n ? sum : NAN; /* Not using 'b', because input type */ \ } /* may be integer, while output is always float. */ \ } #define MULTIOPERAND_MEAN { \ int use; \ double sum; \ size_t n, j; \ float *o=p->out->array; \ \ /* Go over all the pixels assigned to this thread. */ \ for(tind=0; tprm->indexs[tind] != GAL_BLANK_SIZE_T; ++tind) \ { \ /* Initialize, 'j' is desired pixel's index. */ \ n=0; \ sum=0.0f; \ j=tprm->indexs[tind]; \ \ for(i=0;i<p->dnum;++i) /* Loop over each array. */ \ { \ /* Only integers and non-NaN floats: v==v is 1. */ \ if(p->hasblank[i]) \ use = ( b==b \ ? ( a[i][j]!=b ? 1 : 0 ) /* Integer */ \ : ( a[i][j]==a[i][j] ? 1 : 0 ) ); /* Float */ \ else use=1; \ \ /* Calculate the mean if necessary. */ \ if(use) { sum += a[i][j]; ++n; } \ } \ o[j] = n ? sum/n : NAN; /* Not using 'b', because input type */ \ } /* may be integer, while output is always float. */ \ } #define MULTIOPERAND_STD { \ int use; \ size_t n, j; \ double sum, sum2; \ float *o=p->out->array; \ \ /* Go over all the pixels assigned to this thread. */ \ for(tind=0; tprm->indexs[tind] != GAL_BLANK_SIZE_T; ++tind) \ { \ /* Initialize, 'j' is desired pixel's index. */ \ n=0; \ sum=sum2=0.0f; \ j=tprm->indexs[tind]; \ \ for(i=0;i<p->dnum;++i) /* Loop over each array. */ \ { \ /* Only integers and non-NaN floats: v==v is 1. */ \ if(p->hasblank[i]) \ use = ( b==b \ ? ( a[i][j]!=b ? 1 : 0 ) /* Integer */ \ : ( a[i][j]==a[i][j] ? 1 : 0 ) ); /* Float */ \ else use=1; \ \ /* Calculate the necessary parameters if necessary. */ \ if(use) \ { \ sum2 += a[i][j] * a[i][j]; \ sum += a[i][j]; \ ++n; \ } \ } \ o[j] = n ? sqrt( (sum2-sum*sum/n)/n ) : NAN; /* Not using 'b' */ \ } /* because input may be integer, but output is always float. */ \ } #define MULTIOPERAND_MEDIAN(TYPE, QSORT_F) { \ int use; \ size_t n, j; \ float *o=p->out->array; \ TYPE *pixs=gal_pointer_allocate(p->list->type, p->dnum, 0, \ __func__, "pixs"); \ \ /* Go over all the pixels assigned to this thread. */ \ for(tind=0; tprm->indexs[tind] != GAL_BLANK_SIZE_T; ++tind) \ { \ /* Initialize, 'j' is desired pixel's index. */ \ n=0; \ j=tprm->indexs[tind]; \ \ /* Loop over each array: 'i' is input dataset's index. */ \ for(i=0;i<p->dnum;++i) \ { \ /* Only integers and non-NaN floats: v==v is 1. */ \ if(p->hasblank[i]) \ use = ( b==b \ ? ( a[i][j]!=b ? 1 : 0 ) /* Integer */ \ : ( a[i][j]==a[i][j] ? 1 : 0 ) ); /* Float */ \ else use=1; \ \ /* Put the value into the array of values. */ \ if(use) pixs[n++]=a[i][j]; \ } \ \ /* Sort all the values for this pixel and return the median. */ \ if(n) \ { \ qsort(pixs, n, sizeof *pixs, QSORT_F); \ o[j] = n%2 ? pixs[n/2] : (pixs[n/2] + pixs[n/2-1])/2 ; \ } \ else \ o[j]=NAN; /* Not using 'b' because input may be integer */ \ } /* but output is always float.*/ \ \ /* Clean up. */ \ free(pixs); \ } #define MULTIOPERAND_QUANTILE(TYPE) { \ size_t n, j; \ gal_data_t *quantile; \ TYPE *o=p->out->array; \ TYPE *pixs=gal_pointer_allocate(p->list->type, p->dnum, 0, \ __func__, "pixs"); \ gal_data_t *cont=gal_data_alloc(pixs, p->list->type, 1, &p->dnum, \ NULL, 0, -1, 1, NULL, NULL, NULL); \ \ /* Go over all the pixels assigned to this thread. */ \ for(tind=0; tprm->indexs[tind] != GAL_BLANK_SIZE_T; ++tind) \ { \ /* Initialize, 'j' is desired pixel's index. */ \ n=0; \ j=tprm->indexs[tind]; \ \ /* Read the necessay values from each input. */ \ for(i=0;i<p->dnum;++i) pixs[n++]=a[i][j]; \ \ /* If there are any elements, do the measurement. */ \ if(n) \ { \ /* Calculate the quantile and put it in the output. */ \ quantile=gal_statistics_quantile(cont, p->p1, 1); \ memcpy(&o[j], quantile->array, \ gal_type_sizeof(p->list->type)); \ gal_data_free(quantile); \ \ /* Since we are doing sigma-clipping in place, the size, */ \ /* and flags need to be reset. */ \ cont->flag=0; \ cont->size=cont->dsize[0]=p->dnum; \ } \ else \ o[j]=b; \ } \ \ /* Clean up (note that 'pixs' is inside of 'cont'). */ \ gal_data_free(cont); \ } #define MULTIOPERAND_MAD(TYPE) { \ size_t n, j; \ gal_data_t *mad; \ float *o=p->out->array; \ TYPE *pixs=gal_pointer_allocate(p->list->type, p->dnum, 0, \ __func__, "pixs"); \ gal_data_t *cont=gal_data_alloc(pixs, p->list->type, 1, &p->dnum, \ NULL, 0, -1, 1, NULL, NULL, NULL); \ \ /* Go over all the pixels assigned to this thread. */ \ for(tind=0; tprm->indexs[tind] != GAL_BLANK_SIZE_T; ++tind) \ { \ /* Initialize, 'j' is desired pixel's index. */ \ n=0; \ j=tprm->indexs[tind]; \ \ /* Read the necessay values from each input. */ \ for(i=0;i<p->dnum;++i) pixs[n++]=a[i][j]; \ \ /* If there are any elements, do the measurement. */ \ if(n) \ { \ /* Calculate the quantile and put it in the output. */ \ mad=gal_statistics_mad(cont, 1); \ mad=gal_data_copy_to_new_type_free(mad, GAL_TYPE_FLOAT32); \ memcpy(&o[j], mad->array, gal_type_sizeof(GAL_TYPE_FLOAT32)); \ gal_data_free(mad); \ \ /* Since we are sorting in place, the size, and flags */ \ /* need to be reset. */ \ cont->flag=0; \ cont->size=cont->dsize[0]=p->dnum; \ } \ else \ o[j]=NAN; \ } \ \ /* Clean up (note that 'pixs' is inside of 'cont'). */ \ gal_data_free(cont); \ } #define MULTIOPERAND_CLIP(TYPE, SIG1_MAD0) { \ size_t n, j; \ gal_data_t *clip; \ uint32_t *N=p->out->array; \ float *carr, *o=p->out->array; \ float *center=p->center?p->center->array:NULL; \ float *spread=p->spread?p->spread->array:NULL; \ TYPE *pixs=gal_pointer_allocate(p->list->type, p->dnum, 0, \ __func__, "pixs"); \ gal_data_t *cont=gal_data_alloc(pixs, p->list->type, 1, &p->dnum, \ NULL, 0, -1, 1, NULL, NULL, NULL); \ \ /* Go over all the pixels assigned to this thread. */ \ for(tind=0; tprm->indexs[tind] != GAL_BLANK_SIZE_T; ++tind) \ { \ /* Initialize, 'j' is desired pixel's index. */ \ n=0; \ j=tprm->indexs[tind]; \ \ /* Put the values from each input into a single array. */ \ for(i=0;i<p->dnum;++i) pixs[n++]=a[i][j]; \ \ /* If there are any usable elements, do the measurement. */ \ if(n) \ { \ /* Do the clipping and write it in the output. */ \ clip = ( SIG1_MAD0 \ ? gal_statistics_clip_sigma(cont, p->p1, p->p2, \ p->clipflags, 1, 1) \ : gal_statistics_clip_mad(cont, p->p1, p->p2, \ p->clipflags, 1, 1) ); \ carr=clip->array; \ switch(p->operator) \ { \ /* The position of the final value is the same for any */ \ /* type of clipping. */ \ case GAL_ARITHMETIC_OP_SIGCLIP_MAD: \ case GAL_ARITHMETIC_OP_MADCLIP_MAD: \ case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MAD: \ case GAL_ARITHMETIC_OP_MADCLIP_FILL_MAD: \ o[j]=carr[GAL_STATISTICS_CLIP_OUTCOL_MAD]; break; \ case GAL_ARITHMETIC_OP_SIGCLIP_STD: \ case GAL_ARITHMETIC_OP_MADCLIP_STD: \ case GAL_ARITHMETIC_OP_SIGCLIP_FILL_STD: \ case GAL_ARITHMETIC_OP_MADCLIP_FILL_STD: \ o[j]=carr[GAL_STATISTICS_CLIP_OUTCOL_STD]; break; \ case GAL_ARITHMETIC_OP_SIGCLIP_MEAN: \ case GAL_ARITHMETIC_OP_MADCLIP_MEAN: \ case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEAN: \ case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEAN: \ o[j]=carr[GAL_STATISTICS_CLIP_OUTCOL_MEAN]; break; \ case GAL_ARITHMETIC_OP_SIGCLIP_MEDIAN: \ case GAL_ARITHMETIC_OP_MADCLIP_MEDIAN: \ case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEDIAN: \ case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEDIAN: \ o[j]=carr[GAL_STATISTICS_CLIP_OUTCOL_MEDIAN]; break; \ case GAL_ARITHMETIC_OP_SIGCLIP_NUMBER: \ case GAL_ARITHMETIC_OP_MADCLIP_NUMBER: \ case GAL_ARITHMETIC_OP_SIGCLIP_FILL_NUMBER: \ case GAL_ARITHMETIC_OP_MADCLIP_FILL_NUMBER: \ N[j]=carr[GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED]; break; \ default: \ error(EXIT_FAILURE, 0, "%s: a bug! the code %d is not " \ "valid for sigma-clipping results", __func__, \ p->operator); \ } \ \ /* If we are on clip-fill operators, keep the values. */ \ if(center) \ { \ center[j]=carr[GAL_STATISTICS_CLIP_OUTCOL_MEDIAN]; \ spread[j]=( SIG1_MAD0 \ ? carr[GAL_STATISTICS_CLIP_OUTCOL_STD] \ : carr[GAL_STATISTICS_CLIP_OUTCOL_MAD] ); \ } \ \ /* Free the output of the clipping. */ \ gal_data_free(clip); \ \ /* Since we are doing sigma-clipping in place, the size, */ \ /* and flags need to be reset. */ \ cont->flag=0; \ cont->size=cont->dsize[0]=p->dnum; \ } \ else \ o[j] = ( p->operator==GAL_ARITHMETIC_OP_SIGCLIP_NUMBER \ ? 0.0 /* Not using 'b' because input can be an */ \ : NAN ); /* integer but output is always float. */ \ } \ \ /* Clean up (note that 'pixs' is inside of 'cont'). */ \ gal_data_free(cont); \ } #define MULTIOPERAND_TYPE_SET(TYPE, QSORT_F) { \ TYPE b, **a; \ gal_data_t *tmp; \ size_t i=0, tind; \ \ /* Allocate space to keep the pointers to the arrays of each. */ \ /* Input data structure. The operators will increment these */ \ /* pointers while parsing them. */ \ errno=0; \ a=malloc(p->dnum*sizeof *a); \ if(a==NULL) \ error(EXIT_FAILURE, 0, "%s: %zu bytes for 'a'", \ "MULTIOPERAND_TYPE_SET", p->dnum*sizeof *a); \ \ /* Fill in the array pointers and the blank value for this type. */ \ gal_blank_write(&b, p->list->type); \ for(tmp=p->list;tmp!=NULL;tmp=tmp->next) \ a[i++]=tmp->array; \ \ /* Do the operation. */ \ switch(p->operator) \ { \ case GAL_ARITHMETIC_OP_MIN: \ MULTIOPERAND_MIN(TYPE); \ break; \ \ case GAL_ARITHMETIC_OP_MAX: \ MULTIOPERAND_MAX(TYPE); \ break; \ \ case GAL_ARITHMETIC_OP_NUMBER: \ MULTIOPERAND_NUM; \ break; \ \ case GAL_ARITHMETIC_OP_SUM: \ MULTIOPERAND_SUM; \ break; \ \ case GAL_ARITHMETIC_OP_MEAN: \ MULTIOPERAND_MEAN; \ break; \ \ case GAL_ARITHMETIC_OP_STD: \ MULTIOPERAND_STD; \ break; \ \ case GAL_ARITHMETIC_OP_MAD: \ MULTIOPERAND_MAD(TYPE); \ break; \ \ case GAL_ARITHMETIC_OP_MEDIAN: \ MULTIOPERAND_MEDIAN(TYPE, QSORT_F); \ break; \ \ case GAL_ARITHMETIC_OP_QUANTILE: \ MULTIOPERAND_QUANTILE(TYPE); \ break; \ \ case GAL_ARITHMETIC_OP_SIGCLIP_MAD: \ case GAL_ARITHMETIC_OP_SIGCLIP_STD: \ case GAL_ARITHMETIC_OP_SIGCLIP_MEAN: \ case GAL_ARITHMETIC_OP_SIGCLIP_MEDIAN: \ case GAL_ARITHMETIC_OP_SIGCLIP_NUMBER: \ case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MAD: \ case GAL_ARITHMETIC_OP_SIGCLIP_FILL_STD: \ case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEAN: \ case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEDIAN: \ case GAL_ARITHMETIC_OP_SIGCLIP_FILL_NUMBER: \ MULTIOPERAND_CLIP(TYPE, 1); \ break; \ \ case GAL_ARITHMETIC_OP_MADCLIP_MAD: \ case GAL_ARITHMETIC_OP_MADCLIP_STD: \ case GAL_ARITHMETIC_OP_MADCLIP_MEAN: \ case GAL_ARITHMETIC_OP_MADCLIP_MEDIAN: \ case GAL_ARITHMETIC_OP_MADCLIP_NUMBER: \ case GAL_ARITHMETIC_OP_MADCLIP_FILL_MAD: \ case GAL_ARITHMETIC_OP_MADCLIP_FILL_STD: \ case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEAN: \ case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEDIAN: \ case GAL_ARITHMETIC_OP_MADCLIP_FILL_NUMBER: \ MULTIOPERAND_CLIP(TYPE, 0); \ break; \ \ default: \ error(EXIT_FAILURE, 0, "%s: operator code %d not recognized", \ "MULTIOPERAND_TYPE_SET", p->operator); \ } \ \ /* Clean up. */ \ free(a); \ } /* Worker function on each thread. */ static void * multioperand_on_thread(void *in_prm) { /* Low-level definitions to be done first. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct multioperandparams *p=(struct multioperandparams *)tprm->params; /* Do the operation on each thread. */ switch(p->list->type) { case GAL_TYPE_UINT8: MULTIOPERAND_TYPE_SET(uint8_t, gal_qsort_uint8_i); break; case GAL_TYPE_INT8: MULTIOPERAND_TYPE_SET(int8_t, gal_qsort_int8_i); break; case GAL_TYPE_UINT16: MULTIOPERAND_TYPE_SET(uint16_t, gal_qsort_uint16_i); break; case GAL_TYPE_INT16: MULTIOPERAND_TYPE_SET(int16_t, gal_qsort_int16_i); break; case GAL_TYPE_UINT32: MULTIOPERAND_TYPE_SET(uint32_t, gal_qsort_uint32_i); break; case GAL_TYPE_INT32: MULTIOPERAND_TYPE_SET(int32_t, gal_qsort_int32_i); break; case GAL_TYPE_UINT64: MULTIOPERAND_TYPE_SET(uint64_t, gal_qsort_uint64_i); break; case GAL_TYPE_INT64: MULTIOPERAND_TYPE_SET(int64_t, gal_qsort_int64_i); break; case GAL_TYPE_FLOAT32: MULTIOPERAND_TYPE_SET(float, gal_qsort_float32_i); break; case GAL_TYPE_FLOAT64: MULTIOPERAND_TYPE_SET(double, gal_qsort_float64_i); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, p->list->type); } /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } static void arithmetic_multioperand_prepare(struct multioperandparams *p, int flags, gal_data_t *params) { size_t i; gal_data_t *tmp; uint8_t otype=GAL_TYPE_INVALID; /* Initializations. */ p->dnum=1; p->clipflags=0; p->p1=p->p2=NAN; /* If any parameters are given, prepare them. */ for(tmp=params; tmp!=NULL; tmp=tmp->next) { /* Basic sanity checks. */ if(tmp->size>1) error(EXIT_FAILURE, 0, "%s: parameters must be a single number", __func__); if(tmp->type!=GAL_TYPE_FLOAT32) error(EXIT_FAILURE, 0, "%s: parameters must be float32 type", __func__); /* Write them */ if(isnan(p->p1)) p->p1=((float *)(tmp->array))[0]; else p->p2=((float *)(tmp->array))[0]; /* Operator specific, parameter sanity checks. */ switch(p->operator) { case GAL_ARITHMETIC_OP_QUANTILE: if(p->p1<0 || p->p1>1) error(EXIT_FAILURE, 0, "%s: the parameter given to the " "'quantile' operator must be between (and including) " "0 and 1. The given value is: %g", __func__, p->p1); break; } } /* Do a simple sanity check, comparing the operand on top of the list to the rest of the operands within the list. */ for(tmp=p->list->next;tmp!=NULL;tmp=tmp->next) { /* Increment the number of structures. */ ++p->dnum; /* Check the types. */ if(tmp->type!=p->list->type) error(EXIT_FAILURE, 0, "%s: the types of all operands to the " "'%s' operator must be same", __func__, gal_arithmetic_operator_string(p->operator)); /* Make sure they actually have any data. */ if(tmp->size==0 || tmp->array==NULL) error(EXIT_FAILURE, 0, "%s: atleast one input operand doesn't " "have any data", __func__); /* Check the sizes. */ if( gal_dimension_is_different(p->list, tmp) ) error(EXIT_FAILURE, 0, "%s: the sizes of all operands to the " "'%s' operator must be same", __func__, gal_arithmetic_operator_string(p->operator)); } /* Set the type of the output and any other operator-specific setting. */ switch(p->operator) { case GAL_ARITHMETIC_OP_MIN: otype=p->list->type; break; case GAL_ARITHMETIC_OP_MAX: otype=p->list->type; break; case GAL_ARITHMETIC_OP_NUMBER: otype=GAL_TYPE_UINT32; break; case GAL_ARITHMETIC_OP_SUM: otype=GAL_TYPE_FLOAT32; break; case GAL_ARITHMETIC_OP_MEAN: otype=GAL_TYPE_FLOAT32; break; case GAL_ARITHMETIC_OP_STD: otype=GAL_TYPE_FLOAT32; break; case GAL_ARITHMETIC_OP_MAD: otype=GAL_TYPE_FLOAT32; break; case GAL_ARITHMETIC_OP_QUANTILE: otype=p->list->type; break; case GAL_ARITHMETIC_OP_SIGCLIP_STD: otype=GAL_TYPE_FLOAT32; break; case GAL_ARITHMETIC_OP_SIGCLIP_NUMBER: otype=GAL_TYPE_UINT32; break; case GAL_ARITHMETIC_OP_MADCLIP_NUMBER: otype=GAL_TYPE_UINT32; break; case GAL_ARITHMETIC_OP_MEDIAN: case GAL_ARITHMETIC_OP_SIGCLIP_MEDIAN: case GAL_ARITHMETIC_OP_MADCLIP_MEDIAN: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEDIAN: case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEDIAN: otype=GAL_TYPE_FLOAT32; break; case GAL_ARITHMETIC_OP_MADCLIP_MAD: case GAL_ARITHMETIC_OP_MADCLIP_FILL_MAD: otype=GAL_TYPE_FLOAT32; break; case GAL_ARITHMETIC_OP_SIGCLIP_MEAN: case GAL_ARITHMETIC_OP_MADCLIP_MEAN: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEAN: case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEAN: p->clipflags=GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN; otype=GAL_TYPE_FLOAT32; break; case GAL_ARITHMETIC_OP_MADCLIP_STD: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_STD: case GAL_ARITHMETIC_OP_MADCLIP_FILL_STD: p->clipflags=GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD; otype=GAL_TYPE_FLOAT32; break; case GAL_ARITHMETIC_OP_SIGCLIP_MAD: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MAD: p->clipflags=GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MAD; otype=GAL_TYPE_FLOAT32; break; case GAL_ARITHMETIC_OP_SIGCLIP_FILL_NUMBER: case GAL_ARITHMETIC_OP_MADCLIP_FILL_NUMBER: otype=GAL_TYPE_UINT32; break; default: error(EXIT_FAILURE, 0, "%s: operator code %d isn't recognized", __func__, p->operator); } /* Set the output data structure. */ if( (flags & GAL_ARITHMETIC_FLAG_INPLACE) && otype==p->list->type) p->out = p->list; /* The top element in the list. */ else p->out = gal_data_alloc(NULL, otype, p->list->ndim, p->list->dsize, p->list->wcs, 0, p->list->minmapsize, p->list->quietmmap, NULL, NULL, NULL); /* The filled clipping operators need to extra allocations. */ switch(p->operator) { case GAL_ARITHMETIC_OP_MADCLIP_FILL_MAD: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MAD: case GAL_ARITHMETIC_OP_MADCLIP_FILL_STD: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_STD: case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEAN: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEAN: case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEDIAN: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEDIAN: case GAL_ARITHMETIC_OP_MADCLIP_FILL_NUMBER: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_NUMBER: p->center = gal_data_alloc(NULL, GAL_TYPE_FLOAT32, p->list->ndim, p->list->dsize, p->list->wcs, 0, p->list->minmapsize, p->list->quietmmap, NULL, NULL, NULL); p->spread = gal_data_alloc(NULL, GAL_TYPE_FLOAT32, p->list->ndim, p->list->dsize, p->list->wcs, 0, p->list->minmapsize, p->list->quietmmap, NULL, NULL, NULL); break; default: p->center=p->spread=NULL; } /* hasblank is used to see if a blank value should be checked for each list element or not. */ i=0; p->hasblank=gal_pointer_allocate(GAL_TYPE_UINT8, p->dnum, 0, __func__, "hasblank"); for(tmp=p->list;tmp!=NULL;tmp=tmp->next) p->hasblank[i++]=gal_blank_present(tmp, 0); } struct arithmetic_multioperand_clip_fill_params { gal_data_t *list; gal_data_t *upper; gal_data_t *lower; } arithmetic_multioperand_clip_fill_params; static void * arithmetic_multioperand_clip_fill_worker(void *in_prm) { /* Low-level definitions to be done first. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct arithmetic_multioperand_clip_fill_params *p = (struct arithmetic_multioperand_clip_fill_params *)tprm->params; /* Subsequent definitions. */ gal_data_t *use, *tmp; size_t i, index, counter, ndim=p->list->ndim; int aflags=GAL_ARITHMETIC_FLAG_NUMOK; /* Don't free the inputs. */ /* Go over all the actions (pixels in this case) that were assigned to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ index = tprm->indexs[i]; /* Find the dataset that we should work on. */ counter=0; for(use=p->list;use!=NULL;use=use->next) { if(counter==index) break; ++counter; } /* Flag all the pixels that are higher/lower than the limits. */ tmp=gal_arithmetic(GAL_ARITHMETIC_OP_OR, 1, aflags, gal_arithmetic(GAL_ARITHMETIC_OP_GT, 1, aflags, use, p->upper), gal_arithmetic(GAL_ARITHMETIC_OP_LE, 1, aflags, use, p->lower)); /* For a 1D array, start with erosion because a two single elements outside the range can mask a very large portion of the input (after "filling" holes). */ tmp = ( ndim==1 ? gal_binary_erode(tmp, 1, 1, 1) : gal_binary_dilate(tmp, 1, 1, 1) ); gal_binary_holes_fill(tmp, ndim, tmp->size/50); tmp=gal_binary_erode(tmp, 2, ndim, 1); tmp=gal_binary_dilate(tmp, 2, ndim, 1); /* Set all the 1-vaued pixels in the binary image to NaN in the input. */ gal_blank_flag_apply(use, tmp); gal_data_free(tmp); /* For a check. char testname[20]; sprintf(&testname, "test-%zu.fits", index); gal_fits_img_write(input, testname, NULL, NULL); */ } /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } static void arithmetic_multioperand_clip_fill(struct multioperandparams *p, int operator, gal_data_t *list, size_t numthreads) { size_t one=1; gal_data_t *tmp, *multip; struct arithmetic_multioperand_clip_fill_params fp; int aflags=GAL_ARITHMETIC_FLAG_NUMOK; /* Don't free the inputs. */ /* Find the upper and lower thresholds based on the user's desired multiple. */ multip=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); ((float *)(multip->array))[0]=p->p1; tmp=gal_arithmetic(GAL_ARITHMETIC_OP_MULTIPLY, 1, aflags, p->spread, multip); fp.upper=gal_arithmetic(GAL_ARITHMETIC_OP_PLUS, 1, aflags, p->center, tmp); fp.lower=gal_arithmetic(GAL_ARITHMETIC_OP_MINUS, 1, aflags, p->center, tmp); gal_data_free(tmp); /* For a check. gal_fits_img_write(lower, "test.fits", NULL, NULL); gal_fits_img_write(upper, "test.fits", NULL, NULL); printf("%s: GOOD\n", __func__); exit(0); */ /* Fill the structure for the threads and do the job. */ fp.list=list; gal_threads_spin_off(arithmetic_multioperand_clip_fill_worker, &fp, gal_list_data_number(list), numthreads, list->minmapsize, list->quietmmap); gal_data_free(fp.upper); /* We are freeing these here to avoid*/ gal_data_free(fp.lower); /* keeping extra RAM. */ /* Free the center and spreads (no longer necessary). */ gal_data_free(p->center); p->center=NULL; gal_data_free(p->spread); p->spread=NULL; /* Re-run sigma-clipping on threads. */ gal_threads_spin_off(multioperand_on_thread, p, p->out->size, numthreads, list->minmapsize, list->quietmmap); } /* The single operator in this function is assumed to be a linked list. The number of operators is determined from the fact that the last node in the linked list must have a NULL pointer as its 'next' element. */ static gal_data_t * arithmetic_multioperand(int operator, int flags, gal_data_t *list, gal_data_t *params, size_t numthreads) { gal_data_t *tmp, *ttmp; struct multioperandparams p; /* For generality, 'list' can be a NULL pointer, in that case, this function will return a NULL pointer and avoid further processing. */ if(list==NULL) return NULL; /* Sanity checks and preparations. */ p.list=list; p.operator=operator; arithmetic_multioperand_prepare(&p, flags, params); /* Spin off the threads apply the operator. */ gal_threads_spin_off(multioperand_on_thread, &p, p.out->size, numthreads, list->minmapsize, list->quietmmap); /* Do the filled clipping if necessary. */ switch(operator) { case GAL_ARITHMETIC_OP_MADCLIP_FILL_MAD: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MAD: case GAL_ARITHMETIC_OP_MADCLIP_FILL_STD: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_STD: case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEAN: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEAN: case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEDIAN: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEDIAN: case GAL_ARITHMETIC_OP_MADCLIP_FILL_NUMBER: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_NUMBER: arithmetic_multioperand_clip_fill(&p, operator, list, numthreads); break; } /* Clean up and return. Note that the operation might have been done in place. In that case, a list element was used. So we need to check before freeing each data structure. If we are on the designated output dataset, we should set its 'next' pointer to NULL so it isn't treated as a list any more by future functions. */ if(flags & GAL_ARITHMETIC_FLAG_FREE) { tmp=list; while(tmp!=NULL) { ttmp=tmp->next; if(tmp==p.out) tmp->next=NULL; else gal_data_free(tmp); tmp=ttmp; } if(params) gal_list_data_free(params); } free(p.hasblank); return p.out; } /**********************************************************************/ /**************** Binary operators *****************/ /**********************************************************************/ /* See if we should check for blanks. When both types are floats, blanks don't need to be checked (the floating point standard will do the job for us). It is also not necessary to check blanks in bitwise operators, but bitwise operators have their own macro ('BINARY_OP_INCR_OT_RT_LT_SET') which doesn' use 'checkblanks'. */ int gal_arithmetic_binary_checkblank(gal_data_t *l, gal_data_t *r) { return ((((l->type!=GAL_TYPE_FLOAT32 && l->type!=GAL_TYPE_FLOAT64) || (r->type!=GAL_TYPE_FLOAT32 && r->type!=GAL_TYPE_FLOAT64)) && (gal_blank_present(l, 1) || gal_blank_present(r, 1))) ? 1 : 0 ); } static int arithmetic_binary_out_type(int operator, gal_data_t *l, gal_data_t *r) { switch(operator) { case GAL_ARITHMETIC_OP_LT: case GAL_ARITHMETIC_OP_LE: case GAL_ARITHMETIC_OP_GT: case GAL_ARITHMETIC_OP_GE: case GAL_ARITHMETIC_OP_EQ: case GAL_ARITHMETIC_OP_NE: case GAL_ARITHMETIC_OP_AND: case GAL_ARITHMETIC_OP_OR: return GAL_TYPE_UINT8; default: return gal_type_out(l->type, r->type); } return -1; } /* Binary arithmetic's type checks: According to C's implicity/automatic type conversion in binary operators, the unsigned types have higher precedence for the same width. See the description of 'gal_type_string_to_number' in the Gnuastro book for an example. To avoid this situation, it is therefore necessary to print a message and let the user know that strange situations like above may occur. Just note that this won't happen if 'a' and 'b' have different widths: such that this will work fine: 'int8_t a=-1; uint16_t b=50000'. */ static void arithmetic_binary_int_sanity_check(gal_data_t *l, gal_data_t *r, int operator) { /* Variables to simplify the checks. */ int l_is_signed=0, r_is_signed=0; /* Error only necessary for same-width types. */ if( gal_type_sizeof(l->type)==gal_type_sizeof(r->type) ) { /* Error not needed when one of the inputs is a float. */ if( l->type==GAL_TYPE_FLOAT32 || l->type==GAL_TYPE_FLOAT64 || r->type==GAL_TYPE_FLOAT32 || r->type==GAL_TYPE_FLOAT64 ) return; else { /* Error not needed if both have (or don't have) a sign. */ if( l->type==GAL_TYPE_INT8 || l->type==GAL_TYPE_INT16 || l->type==GAL_TYPE_INT32 || l->type==GAL_TYPE_INT64 ) l_is_signed=1; if( r->type==GAL_TYPE_INT8 || r->type==GAL_TYPE_INT16 || r->type==GAL_TYPE_INT32 || r->type==GAL_TYPE_INT64 ) r_is_signed=1; if( l_is_signed!=r_is_signed ) error(EXIT_FAILURE, 0, "the two integer operands " "given to '%s' have the same width (number of bits), " "but a different sign: the first popped operand (that " "is closer to the operator, or the \"right\" operand) " "has type '%s' and the second (or \"left\" operand) " "has type '%s'. This may create wrong results, for " "example when the signed input contains negative " "values. To address this problem there are two " "options: 1) if you know that the signed input can " "only have positive values, use Arithmetic's type " "conversion operators to convert it to an un-signed " "type of the same width (e.g., 'uint8', 'uint16', " "'uint32' or 'uint64'). 2) Convert the unsigned " "input to a signed one of the next largest width " "using the type conversion operators (e.g., 'int16', " "'int32' or 'int64'). For more, see the \"Integer " "benefits and pitfalls\" section of Gnuastro's " "manual with this command: 'info gnuastro integer'. " "This Error can be removed with '--quiet' (or " "'-q')", gal_arithmetic_operator_string(operator), gal_type_name(r->type, 1), gal_type_name(l->type, 1)); } } } static gal_data_t * arithmetic_binary(int operator, int flags, gal_data_t *l, gal_data_t *r) { /* Read the variable arguments. 'lo' and 'ro' keep the original data, in case their type isn't built (based on configure options are configure time). */ int32_t otype; gal_data_t *o=NULL; size_t out_size, minmapsize; int quietmmap=l->quietmmap && r->quietmmap; /* The datasets may be empty. In this case, the output should also be empty (we can have tables and images with 0 rows or pixels!). */ if( l->size==0 || l->array==NULL || r->size==0 || r->array==NULL ) { if(l->array==0 || l->array==NULL) { if(flags & GAL_ARITHMETIC_FLAG_FREE) gal_data_free(r); return l; } else { if(flags & GAL_ARITHMETIC_FLAG_FREE) gal_data_free(l); return r; } } /* Simple sanity check on the input sizes. */ if( !( (flags & GAL_ARITHMETIC_FLAG_NUMOK) && (l->size==1 || r->size==1)) && gal_dimension_is_different(l, r) ) error(EXIT_FAILURE, 0, "%s: the non-number inputs to '%s' don't " "have the same dimension/size", __func__, gal_arithmetic_operator_string(operator)); /* Print a warning if the inputs are both integers, but have different signs (the user needs to know that the output may not be what they expect!).*/ if( (flags & GAL_ARITHMETIC_FLAG_QUIET)==0 ) arithmetic_binary_int_sanity_check(l, r, operator); /* Set the output type. For the comparison operators, the output type is either 0 or 1, so we will set the output type to 'unsigned char' for efficient memory and CPU usage. Since the number of operators without a fixed output type (like the conditionals) is less, by 'default' we will set the output type to 'unsigned char', and if any of the other operatrs are given, it will be chosen based on the input types. */ otype=arithmetic_binary_out_type(operator, l, r); /* Set the output sizes. */ minmapsize = ( l->minmapsize < r->minmapsize ? l->minmapsize : r->minmapsize ); out_size = l->size > r->size ? l->size : r->size; /* If we want inplace output, set the output pointer to one input. Note that the output type can be different from both inputs. */ if(flags & GAL_ARITHMETIC_FLAG_INPLACE) { if (l->type==otype && out_size==l->size) o = l; else if(r->type==otype && out_size==r->size) o = r; } /* If the output pointer was not set above for any of the possible reasons, allocate it. For 'mmapsize', note that since its 'size_t', it will always be positive. The '-1' that is recommended to give when you want the value in RAM is actually the largest possible memory location. So we just have to choose the smaller minmapsize of the two to decide if the output array should be in RAM or not. */ if(o==NULL) o = gal_data_alloc(NULL, otype, l->size>1 ? l->ndim : r->ndim, l->size>1 ? l->dsize : r->dsize, l->size>1 ? l->wcs : r->wcs, 0, minmapsize, quietmmap, NULL, NULL, NULL ); /* Call the proper function for the operator. Since they heavily involve macros, their compilation can be very large if they are in a single function and file. So there is a separate C source and header file for each of these functions. */ switch(operator) { case GAL_ARITHMETIC_OP_PLUS: arithmetic_plus(l, r, o); break; case GAL_ARITHMETIC_OP_MINUS: arithmetic_minus(l, r, o); break; case GAL_ARITHMETIC_OP_MULTIPLY: arithmetic_multiply(l, r, o); break; case GAL_ARITHMETIC_OP_DIVIDE: arithmetic_divide(l, r, o); break; case GAL_ARITHMETIC_OP_LT: arithmetic_lt(l, r, o); break; case GAL_ARITHMETIC_OP_LE: arithmetic_le(l, r, o); break; case GAL_ARITHMETIC_OP_GT: arithmetic_gt(l, r, o); break; case GAL_ARITHMETIC_OP_GE: arithmetic_ge(l, r, o); break; case GAL_ARITHMETIC_OP_EQ: arithmetic_eq(l, r, o); break; case GAL_ARITHMETIC_OP_NE: arithmetic_ne(l, r, o); break; case GAL_ARITHMETIC_OP_AND: arithmetic_and(l, r, o); break; case GAL_ARITHMETIC_OP_OR: arithmetic_or(l, r, o); break; case GAL_ARITHMETIC_OP_BITAND: arithmetic_bitand(l, r, o); break; case GAL_ARITHMETIC_OP_BITOR: arithmetic_bitor(l, r, o); break; case GAL_ARITHMETIC_OP_BITXOR: arithmetic_bitxor(l, r, o); break; case GAL_ARITHMETIC_OP_BITLSH: arithmetic_bitlsh(l, r, o); break; case GAL_ARITHMETIC_OP_BITRSH: arithmetic_bitrsh(l, r, o); break; case GAL_ARITHMETIC_OP_MODULO: arithmetic_modulo(l, r, o); break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to address " "the problem. %d is not a valid operator code", __func__, PACKAGE_BUGREPORT, operator); } /* Clean up if necessary. Note that if the operation was requested to be in place, then the output might be one of the inputs. */ if(flags & GAL_ARITHMETIC_FLAG_FREE) { if (o==l) gal_data_free(r); else if(o==r) gal_data_free(l); else { gal_data_free(l); gal_data_free(r); } } /* Return */ return o; } #define BINFUNC_RUN_FUNCTION(OT, RT, LT, OP, AFTER){ \ LT *la=l->array; \ RT *ra=r->array; \ OT *oa=o->array, *of=oa + o->size; \ if(l->size==r->size) do *oa = OP(*la++, *ra++) AFTER; while(++oa<of); \ else if(l->size==1) do *oa = OP(*la, *ra++) AFTER; while(++oa<of); \ else do *oa = OP(*la++, *ra ) AFTER; while(++oa<of); \ } #define BINFUNC_F_OPERATOR_LEFT_RIGHT_SET(RT, LT, OP, AFTER) \ switch(o->type) \ { \ case GAL_TYPE_FLOAT32: \ BINFUNC_RUN_FUNCTION(float, RT, LT, OP, AFTER); \ break; \ case GAL_TYPE_FLOAT64: \ BINFUNC_RUN_FUNCTION(double, RT, LT, OP, AFTER); \ break; \ default: \ error(EXIT_FAILURE, 0, "%s: type %d not recognized for o->type ", \ "BINFUNC_F_OPERATOR_LEFT_RIGHT_SET", o->type); \ } #define BINFUNC_F_OPERATOR_LEFT_SET(LT, OP, AFTER) \ switch(r->type) \ { \ case GAL_TYPE_FLOAT32: \ BINFUNC_F_OPERATOR_LEFT_RIGHT_SET(float, LT, OP, AFTER); \ break; \ case GAL_TYPE_FLOAT64: \ BINFUNC_F_OPERATOR_LEFT_RIGHT_SET(double, LT, OP, AFTER); \ break; \ default: \ error(EXIT_FAILURE, 0, "%s: type %d not recognized for r->type", \ "BINFUNC_F_OPERATOR_LEFT_SET", r->type); \ } #define BINFUNC_F_OPERATOR_SET(OP, AFTER) \ switch(l->type) \ { \ case GAL_TYPE_FLOAT32: \ BINFUNC_F_OPERATOR_LEFT_SET(float, OP, AFTER); \ break; \ case GAL_TYPE_FLOAT64: \ BINFUNC_F_OPERATOR_LEFT_SET(double, OP, AFTER); \ break; \ default: \ error(EXIT_FAILURE, 0, "%s: type %d not recognized for l->type", \ "BINFUNC_F_OPERATOR_SET", l->type); \ } static gal_data_t * arithmetic_function_binary_flt(int operator, int flags, gal_data_t *il, gal_data_t *ir) { int final_otype; size_t out_size, minmapsize; gal_data_t *l, *r, *o=NULL; int quietmmap=il->quietmmap && ir->quietmmap; /* The datasets may be empty. In this case, the output should also be empty (we can have tables and images with 0 rows or pixels!). */ if( il->size==0 || il->array==NULL || ir->size==0 || ir->array==NULL ) { if(il->array==0 || il->array==NULL) { if(flags & GAL_ARITHMETIC_FLAG_FREE) gal_data_free(ir); return il;} else {if(flags & GAL_ARITHMETIC_FLAG_FREE) gal_data_free(il); return ir;} } /* Simple sanity check on the input sizes. */ if( !( (flags & GAL_ARITHMETIC_FLAG_NUMOK) && (il->size==1 || ir->size==1)) && gal_dimension_is_different(il, ir) ) error(EXIT_FAILURE, 0, "%s: the input datasets don't have the same " "dimension/size", __func__); /* Convert the values to double precision floating point if they are integer. */ l = ( (il->type==GAL_TYPE_FLOAT32 || il->type==GAL_TYPE_FLOAT64) ? il : gal_data_copy_to_new_type(il, GAL_TYPE_FLOAT64) ); r = ( (ir->type==GAL_TYPE_FLOAT32 || ir->type==GAL_TYPE_FLOAT64) ? ir : gal_data_copy_to_new_type(ir, GAL_TYPE_FLOAT64) ); /* Set the output type. */ final_otype = gal_type_out(l->type, r->type); /* Set the output sizes. */ minmapsize = ( l->minmapsize < r->minmapsize ? l->minmapsize : r->minmapsize ); out_size = l->size > r->size ? l->size : r->size; /* If we want inplace output, set the output pointer to one input. Note that the output type can be different from both inputs. */ if(flags & GAL_ARITHMETIC_FLAG_INPLACE) { if (l->type==final_otype && out_size==l->size) o = l; else if(r->type==final_otype && out_size==r->size) o = r; } /* If the output pointer was not set for any reason, allocate it. For 'mmapsize', note that since its 'size_t', it will always be Positive. The '-1' that is recommended to give when you want the value in RAM is actually the largest possible memory location. So we just have to choose the smaller minmapsize of the two to decide if the output array should be in RAM or not. */ if(o==NULL) o = gal_data_alloc(NULL, final_otype, l->size>1 ? l->ndim : r->ndim, l->size>1 ? l->dsize : r->dsize, l->size>1 ? l->wcs : r->wcs, 0, minmapsize, quietmmap, NULL, NULL, NULL); /* Start setting the operator and operands. */ switch(operator) { case GAL_ARITHMETIC_OP_POW: BINFUNC_F_OPERATOR_SET( pow, +0 ); break; case GAL_ARITHMETIC_OP_ATAN2: BINFUNC_F_OPERATOR_SET( atan2, *180.0f/M_PI ); break; case GAL_ARITHMETIC_OP_SB_TO_MAG: BINFUNC_F_OPERATOR_SET( gal_units_sb_to_mag, +0 ); break; case GAL_ARITHMETIC_OP_MAG_TO_SB: BINFUNC_F_OPERATOR_SET( gal_units_mag_to_sb, +0 ); break; case GAL_ARITHMETIC_OP_COUNTS_TO_MAG: BINFUNC_F_OPERATOR_SET( gal_units_counts_to_mag, +0 ); break; case GAL_ARITHMETIC_OP_MAG_TO_COUNTS: BINFUNC_F_OPERATOR_SET( gal_units_mag_to_counts, +0 ); break; case GAL_ARITHMETIC_OP_COUNTS_TO_JY: BINFUNC_F_OPERATOR_SET( gal_units_counts_to_jy, +0 ); break; case GAL_ARITHMETIC_OP_JY_TO_COUNTS: BINFUNC_F_OPERATOR_SET( gal_units_jy_to_counts, +0 ); break; case GAL_ARITHMETIC_OP_COUNTS_TO_NANOMAGGY: BINFUNC_F_OPERATOR_SET( gal_units_counts_to_nanomaggy, +0 ); break; case GAL_ARITHMETIC_OP_NANOMAGGY_TO_COUNTS: BINFUNC_F_OPERATOR_SET( gal_units_nanomaggy_to_counts, +0 ); break; default: error(EXIT_FAILURE, 0, "%s: operator code %d not recognized", __func__, operator); } /* Clean up. Note that if the input arrays can be freed, and any of right or left arrays needed conversion, 'BINFUNC_CONVERT_TO_COMPILED_TYPE' has already freed the input arrays, and we only have 'r' and 'l' allocated in any case. Alternatively, when the inputs shouldn't be freed, the only allocated spaces are the 'r' and 'l' arrays if their types weren't compiled for binary operations, we can tell this from the pointers: if they are different from the original pointers, they were allocated. */ if(flags & GAL_ARITHMETIC_FLAG_FREE) { /* Clean the main used (temporarily allocated) datasets. */ if (o==l) gal_data_free(r); else if(o==r) gal_data_free(l); else { gal_data_free(l); gal_data_free(r); } /* Clean the raw inputs, if they weren't equal to the datasets. */ if (o==il) { if(ir!=r) gal_data_free(ir); } else if(o==ir) { if(il!=l) gal_data_free(il); } else { if(il!=l) gal_data_free(il); if(ir!=r) gal_data_free(ir); } } else { /* Input datasets should be kept, but we don't want the temporary datasets, so if they were allocated (they don't equal the input pointers, free them). */ if (l!=il) gal_data_free(l); if (r!=ir) gal_data_free(r); } /* Return */ return o; } /* The list of arguments are: d1: Input data (counts or SB). d2: Zeropoint. d3: Area. */ static gal_data_t * arithmetic_counts_to_from_sb(int operator, int flags, gal_data_t *d1, gal_data_t *d2, gal_data_t *d3) { gal_data_t *tmp, *out=NULL; switch(operator) { case GAL_ARITHMETIC_OP_COUNTS_TO_SB: tmp=arithmetic_function_binary_flt(GAL_ARITHMETIC_OP_COUNTS_TO_MAG, flags, d1, d2); /* d2=zeropoint */ out=arithmetic_function_binary_flt(GAL_ARITHMETIC_OP_MAG_TO_SB, flags, tmp, d3); /* d3=area */ break; case GAL_ARITHMETIC_OP_SB_TO_COUNTS: tmp=arithmetic_function_binary_flt(GAL_ARITHMETIC_OP_SB_TO_MAG, flags, d1, d3); /* d3-->area */ out=arithmetic_function_binary_flt(GAL_ARITHMETIC_OP_MAG_TO_COUNTS, flags, tmp, d2); /* d2=zeropoint */ break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to find and fix the problem. The value of '%d' isn't " "recognized for the 'operator' variable", __func__, PACKAGE_BUGREPORT, operator); } return out; } static gal_data_t * arithmetic_box_around_ellipse(gal_data_t *a_data, gal_data_t *b_data, gal_data_t *pa_data, int flags) { size_t i; double *a=a_data->array, *b=b_data->array, *pa=pa_data->array, out[2]; /* Loop over all the elements. */ for(i=0;i<a_data->size;++i) { /* If the minor axis has a larger value, print a warning and set the value to NaN. */ if(b[i]>a[i]) { if( (flags & GAL_ARITHMETIC_FLAG_QUIET)==0 ) error(EXIT_SUCCESS, 0, "%s: the minor axis (%g) is larger " "than the major axis (%g), output for this element " "will be NaN", __func__, b[i], a[i]); out[0]=out[1]=NAN; } else gal_box_bound_ellipse_extent(a[i], b[i], pa[i], out); /* Write the output in the inputs (we don't need the inputs any more). */ a[i]=out[0]; b[i]=out[1]; } /* Make the output as a list and return it. */ b_data->next=a_data; return b_data; } /* Calculate the vertices of a box from its center and width. The longitude coordinate/width is specified with a 'lon' and the latitude coordinate/width is specified with a 'lat'. */ static gal_data_t * arithmetic_box_vertices_on_sphere(gal_data_t *d1, gal_data_t *d2, gal_data_t *d3, gal_data_t *d4, int flags) { size_t i; double vertices[8]; double *clon=d1->array, *clat=d2->array; double *dlon=d3->array, *dlat=d4->array; /* Output datasets. */ double *blr, *bld, *brr, *brd, *tlr, *tld, *trr, *trd; gal_data_t *blrd, *bldd, *brrd, *brdd, *tlrd, *tldd, *trrd, *trdd; /* Allocate the extra output datasets (four of them will be the same as the input (which will be over-written after usage) and set the array pointers. */ blrd=d1; bldd=d2; brrd=d3; brdd=d4; tlrd=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, d1->ndim, d1->dsize, NULL, 0, d1->minmapsize, d1->quietmmap, NULL, NULL, NULL); tldd=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, d1->ndim, d1->dsize, NULL, 0, d1->minmapsize, d1->quietmmap, NULL, NULL, NULL); trrd=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, d1->ndim, d1->dsize, NULL, 0, d1->minmapsize, d1->quietmmap, NULL, NULL, NULL); trdd=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, d1->ndim, d1->dsize, NULL, 0, d1->minmapsize, d1->quietmmap, NULL, NULL, NULL); blr=blrd->array; bld=bldd->array; brr=brrd->array; brd=brdd->array; tlr=tlrd->array; tld=tldd->array; trr=trrd->array; trd=trdd->array; /* Loop over the elements. */ for(i=0;i<d1->size;++i) { /* Compute the positions of the vertices. */ gal_wcs_box_vertices_from_center(clon[i], clat[i], dlon[i], dlat[i], vertices); /* Write the results into the the output arrays. */ blr[i]=vertices[0]; bld[i]=vertices[1]; brr[i]=vertices[2]; brd[i]=vertices[3]; tlr[i]=vertices[4]; tld[i]=vertices[5]; trr[i]=vertices[6]; trd[i]=vertices[7]; } /* Create the output list, note that it has to in the inverse order of the final output order. In the end, we want the order of the corners to be bottom_left_ra -> bottom_left_dec -> bottom_right_ra -> bottom_right_dec -> top_right_ra -> top_right_dec -> top_left_ra -> top_left_dec. */ blrd->next=bldd; bldd->next=brrd; brrd->next=brdd; brdd->next=trrd; trrd->next=trdd; trdd->next=tlrd; tlrd->next=tldd; gal_list_data_reverse(&blrd); return blrd; } static gal_data_t * arithmetic_box(gal_data_t *d1, gal_data_t *d2, gal_data_t *d3, gal_data_t *d4, int operator, int flags) { size_t i; gal_data_t *out=NULL; gal_data_t *d1d=NULL, *d2d=NULL, *d3d=NULL, *d4d=NULL; /* Basic sanity check. */ if( d1->size != d2->size || d1->size != d3->size || (d4 && d1->size!=d4->size) ) error(EXIT_FAILURE, 0, "%s: the operands to this function " "don't have the same number of elements", __func__); /* The datasets may be empty. In this case the output should also be empty (we can have tables and images with 0 rows or pixels!). */ if( d1->size==0 || d1->array==NULL || d2->size==0 || d2->array==NULL || d3->size==0 || d3->array==NULL || (d4 && (d4->size==0 || d4->array==NULL) ) ) { if(flags & GAL_ARITHMETIC_FLAG_FREE) { gal_data_free(d2); gal_data_free(d3); gal_data_free(d4); } if(d1->array) {free(d1->array); d1->array=NULL;} if(d1->dsize) for(i=0;i<d1->ndim;++i) d1->dsize[i]=0; d1->size=0; return d1; } /* Convert the inputs into double. Note that if the user doesn't want to free the inputs, we should make a copy of 'a_data' and 'b_data' because the output will also be written in them. */ d1d=( d1->type==GAL_TYPE_FLOAT64 ? d1 : gal_data_copy_to_new_type(d1, GAL_TYPE_FLOAT64) ); d2d=( d2->type==GAL_TYPE_FLOAT64 ? d2 : gal_data_copy_to_new_type(d2, GAL_TYPE_FLOAT64) ); d3d=( d3->type==GAL_TYPE_FLOAT64 ? d3 : gal_data_copy_to_new_type(d3, GAL_TYPE_FLOAT64) ); if(d4) d4d=( d4->type==GAL_TYPE_FLOAT64 ? d4 : gal_data_copy_to_new_type(d4, GAL_TYPE_FLOAT64) ); /* Call the appropriate function. */ switch(operator) { case GAL_ARITHMETIC_OP_BOX_AROUND_ELLIPSE: out=arithmetic_box_around_ellipse(d1d, d2d, d3d, flags); break; case GAL_ARITHMETIC_OP_BOX_VERTICES_ON_SPHERE: out=arithmetic_box_vertices_on_sphere(d1d, d2d, d3d, d4d, flags); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. The code '%d' is not a recognized " "operator for this function", __func__, PACKAGE_BUGREPORT, operator); } /* Clean up. */ if(flags & GAL_ARITHMETIC_FLAG_FREE) { if(d1d!=d1) gal_data_free(d1); if(d2d!=d2) gal_data_free(d2); if(d3d!=d3) gal_data_free(d3); } if(operator==GAL_ARITHMETIC_OP_BOX_AROUND_ELLIPSE) { gal_data_free(d3d); gal_data_free(d4d); } /* Return the output. */ return out; } static gal_data_t * arithmetic_rotate(int operator, int flags, gal_data_t *d1, gal_data_t *d2, gal_data_t *d3, gal_data_t *d4, gal_data_t *d5) { size_t i; gal_data_t *out=NULL; double x, y, rx, ry, rot, onerot; double *d1a=NULL, *d2a=NULL, *d3a=NULL, *d4a=NULL, *d5a=NULL; gal_data_t *d1d=NULL, *d2d=NULL, *d3d=NULL, *d4d=NULL, *d5d=NULL; /* Basic sanity check. */ if(d1->size != d2->size) error(EXIT_FAILURE, 0, "%s: the input coordinate operands (5th and " "4th popped operands) to this function don't have the same " "number of elements", __func__); if(d3->size != d4->size) error(EXIT_FAILURE, 0, "%s: the reference coordinate operands (3rd " "and 2nd popped operands) to this function don't have the same " "number of elements", __func__); if(d3->size>1 && (d3->size != d1->size || d4->size!= d1->size) ) error(EXIT_FAILURE, 0, "%s: the reference coordinate operands (3rd " "and 2th popped operands) have %zu elements, while the input " "coordinate operands (5th and 4th operands) have %zu elements! " "The reference coordinates should either have a single element " "(to be used for all inputs) or have the same number of " "elements as input elements", __func__, d3->size, d1->size); if(d5->size>1 && d5->size!=d1->size) error(EXIT_FAILURE, 0, "%s: the rotation angle operand (1st popped " "operand) has %zu elements, while the input coordinate operands " "(5th and 4th operands) have %zu elements! The rotation angle " "should either have a single element (to be used for all inputs) " "or have the same number of elements as input elements", __func__, d5->size, d1->size); /* The datasets may be empty. In this case the output should also be empty (we can have tables and images with 0 rows or pixels!). */ if( d1->size==0 || d1->array==NULL || d2->size==0 || d2->array==NULL || d3->size==0 || d3->array==NULL || d4->size==0 || d4->array==NULL || d5->size==0 || d5->array==NULL ) { if(flags & GAL_ARITHMETIC_FLAG_FREE) { gal_data_free(d2); gal_data_free(d3); gal_data_free(d4); gal_data_free(d5); } if(d1->array) {free(d1->array); d1->array=NULL;} if(d1->dsize) for(i=0;i<d1->ndim;++i) d1->dsize[i]=0; d1->size=0; return d1; } /* Convert the inputs into double. Note that if the user doesn't want to free the inputs, we should make a copy of 'a_data' and 'b_data' because the output will also be written in them. */ d1d=( d1->type==GAL_TYPE_FLOAT64 ? d1 : gal_data_copy_to_new_type(d1, GAL_TYPE_FLOAT64) ); d2d=( d2->type==GAL_TYPE_FLOAT64 ? d2 : gal_data_copy_to_new_type(d2, GAL_TYPE_FLOAT64) ); d3d=( d3->type==GAL_TYPE_FLOAT64 ? d3 : gal_data_copy_to_new_type(d3, GAL_TYPE_FLOAT64) ); d4d=( d4->type==GAL_TYPE_FLOAT64 ? d4 : gal_data_copy_to_new_type(d4, GAL_TYPE_FLOAT64) ); d5d=( d5->type==GAL_TYPE_FLOAT64 ? d5 : gal_data_copy_to_new_type(d5, GAL_TYPE_FLOAT64) ); d1a=d1d->array; d2a=d2d->array; d3a=d3d->array; d4a=d4d->array; d5a=d5d->array; /* Do the operation. We will do it in the same space */ onerot = d5d->size==1 ? (d5a[0] * M_PI/180.0f) : NAN; for(i=0; i<d1d->size; ++i) { /* To simplify the readability. */ x = d1a[i]; y = d2a[i]; rx = d3d->size==1 ? d3a[0] : d3a[i]; ry = d4d->size==1 ? d4a[0] : d4a[i]; rot = d5d->size==1 ? onerot : ( d5a[i] * M_PI/180.0f ); /* Write the outputs in the inputs (note that above, we copied the inputs in the short variables). But first, subtract the reference X and Y so we rotate around that (we will add the reference afterwards). */ x = x-rx; y = y-ry; d1a[i] = x*cos(rot) - y*sin(rot) + rx; d2a[i] = x*sin(rot) + y*cos(rot) + ry; } /* Set the output. */ out=d2d; out->next=d1d; /* Clean up. */ if(flags & GAL_ARITHMETIC_FLAG_FREE) { if(d1d!=d1) gal_data_free(d1); if(d2d!=d2) gal_data_free(d2); if(d3d!=d3) { gal_data_free(d3d); } gal_data_free(d3); if(d4d!=d4) { gal_data_free(d4d); } gal_data_free(d4); if(d5d!=d5) { gal_data_free(d5d); } gal_data_free(d5); } /* Return the output. */ return out; } static gal_data_t * arithmetic_constants_standard(int operator) { size_t one=1; /* Allocate the output dataset. */ gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &one, NULL, 0, -1, 0, NULL, NULL, NULL); /* Set the pointer to the value. */ double *value=out->array; /* Write the desired constant (from GSL). */ switch(operator) { case GAL_ARITHMETIC_OP_E: /* Base of natural logarithm. */ value[0]=M_E; break; case GAL_ARITHMETIC_OP_PI: /* Circle circumfernece to diameter. */ value[0]=M_PI; break; case GAL_ARITHMETIC_OP_C: /* The speed of light. */ value[0]=GSL_CONST_MKS_SPEED_OF_LIGHT; case GAL_ARITHMETIC_OP_G: /* The gravitational constant. */ value[0]=GSL_CONST_MKS_GRAVITATIONAL_CONSTANT; case GAL_ARITHMETIC_OP_H: /* Plank's constant. */ value[0]=GSL_CONST_MKS_PLANCKS_CONSTANT_H; case GAL_ARITHMETIC_OP_AU: /* Astronomical Unit (in meters). */ value[0]=GSL_CONST_MKS_ASTRONOMICAL_UNIT; case GAL_ARITHMETIC_OP_LY: /* Light years (in meters). */ value[0]=GSL_CONST_MKS_LIGHT_YEAR; case GAL_ARITHMETIC_OP_AVOGADRO: /* Avogadro's number. */ value[0]=GSL_CONST_NUM_AVOGADRO; case GAL_ARITHMETIC_OP_FINESTRUCTURE: /* Fine-structure constant. */ value[0]=GSL_CONST_NUM_FINE_STRUCTURE; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. The value '%d' isn't recognized for the " "variable 'operator'", __func__, PACKAGE_BUGREPORT, operator); } /* Return the allocated dataset. */ return out; } /**********************************************************************/ /**************** New datasets *****************/ /**********************************************************************/ static gal_data_t * arithmetic_makenew(gal_data_t *sizes) { gal_data_t *out, *tmp, *ttmp; int quietmmap=sizes->quietmmap; size_t minmapsize=sizes->minmapsize; size_t i, *dsize, ndim=gal_list_data_number(sizes); /* Make sure all the elements are a single, integer number. */ for(tmp=sizes; tmp!=NULL; tmp=tmp->next) { if(tmp->size!=1) error(EXIT_FAILURE, 0, "%s: operands given to 'makenew' operator " "should only be a single number. However, at least one of " "the input operands has %zu elements", __func__, tmp->size); if( tmp->type==GAL_TYPE_FLOAT32 || tmp->type==GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "%s: operands given to 'makenew' operator " "should have integer types. However, at least one of " "the input operands is floating point", __func__); } /* Fill the 'dsize' array based on the given values. */ i=ndim-1; tmp=sizes; dsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 1, __func__, "dsize"); while(tmp!=NULL) { /* Set the next pointer and conver this one to size_t. */ ttmp=tmp->next; tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_SIZE_T); /* Write the dimension's length into 'dsize'. */ dsize[i--] = ((size_t *)(tmp->array))[0]; /* Free 'tmp' and re-set it to the next element. */ free(tmp); tmp=ttmp; } /* allocate the necessary dataset. */ out=gal_data_alloc(NULL, GAL_TYPE_UINT8, ndim, dsize, NULL, 1, minmapsize, quietmmap, NULL, NULL, NULL); /* Clean up and return. */ free(dsize); return out; } /* Build a dataset with the index of each element. */ #define ARITHMETIC_FILL_INDEX(IT) { \ IT i=0, *a=out->array, *af=a+out->size; do *a = i++; while(++a<af); } #define ARITHMETIC_FILL_COUNTER(IT) { \ IT i=0, *a=out->array, *af=a+out->size; do *a = ++i; while(++a<af); } static gal_data_t * arithmetic_index_counter(gal_data_t *input, int operator, int flags) { uint8_t otype; gal_data_t *out; size_t isize=input->size; /* Find the best type for the output. */ if( isize<UINT8_MAX ) otype=GAL_TYPE_UINT8; else if( isize<UINT16_MAX ) otype=GAL_TYPE_UINT16; else if( isize<UINT32_MAX ) otype=GAL_TYPE_UINT32; else otype=GAL_TYPE_UINT64; /* Allocate the necessary dataset. */ out=gal_data_alloc(NULL, otype, input->ndim, input->dsize, NULL, 0, input->minmapsize, input->quietmmap, NULL, NULL, NULL); /* Do the respective operation. */ switch(operator) { case GAL_ARITHMETIC_OP_INDEX: case GAL_ARITHMETIC_OP_INDEXONLY: switch(otype) { case GAL_TYPE_UINT8: ARITHMETIC_FILL_INDEX( uint8_t ); break; case GAL_TYPE_UINT16: ARITHMETIC_FILL_INDEX( uint16_t ); break; case GAL_TYPE_UINT32: ARITHMETIC_FILL_INDEX( uint32_t ); break; case GAL_TYPE_UINT64: ARITHMETIC_FILL_INDEX( uint64_t ); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to find and fix the problem. The type code '%d' isn't " "recognized for the 'index' operator", __func__, PACKAGE_BUGREPORT, otype); } break; case GAL_ARITHMETIC_OP_COUNTER: case GAL_ARITHMETIC_OP_COUNTERONLY: switch(otype) { case GAL_TYPE_UINT8: ARITHMETIC_FILL_COUNTER( uint8_t ); break; case GAL_TYPE_UINT16: ARITHMETIC_FILL_COUNTER( uint16_t ); break; case GAL_TYPE_UINT32: ARITHMETIC_FILL_COUNTER( uint32_t ); break; case GAL_TYPE_UINT64: ARITHMETIC_FILL_COUNTER( uint64_t ); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to find and fix the problem. The type code '%d' isn't " "recognized for the 'counter' operator", __func__, PACKAGE_BUGREPORT, otype); } break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "find and fix the problem. The code '%d' isn't recognized " "for the 'operator' variable", __func__, PACKAGE_BUGREPORT, operator); } /* Clean up and return. */ if(flags & GAL_ARITHMETIC_FLAG_FREE) gal_data_free(input); return out; } static gal_data_t * arithmetic_constant(gal_data_t *input, gal_data_t *constant, int operator, int flags) { gal_data_t *out; size_t i, tsize; /* Sanity check. */ if(constant->size!=1) error(EXIT_FAILURE, 0, "%s: the constant operand should only contain " "a single element", __func__); /* Allocate the necessary dataset. */ out = ( input->type==constant->type ? input : gal_data_alloc(NULL, constant->type, input->ndim, input->dsize, NULL, 0, input->minmapsize, input->quietmmap, NULL, NULL, NULL) ); /* Fill the output with the constant's value. */ tsize=gal_type_sizeof(out->type); for(i=0;i<input->size;++i) memcpy(gal_pointer_increment(out->array, i, out->type), constant->array, tsize); /* Clean up and return. */ if(out!=input && (flags & GAL_ARITHMETIC_FLAG_FREE)) gal_data_free(input); return out; } static gal_data_t * arithmetic_pool(gal_data_t *input, gal_data_t *psize, gal_data_t *stride, int operator, size_t numthreads, int flags) { gal_data_t *out=NULL; size_t *pstrarr, *psizearr; /* The pool size and the stride must have a single element. */ if(psize->size!=1) error(EXIT_FAILURE, 0, "%s: the pooling operand should only " "contain a single element.", __func__); if(stride->size!=1) error(EXIT_FAILURE, 0, "%s: the stride operand should only " "contain a single element.", __func__); /* This function is only for a integer operand, so make sure the user has given an integer type for the poolsize and the stride. */ if(psize->type==GAL_TYPE_FLOAT32 || psize->type==GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "lengths of pooling along dimensions " "must be integer values, not floats. The given length " "along dimension %zu is a float.", psize->dsize[0]); if(stride->type==GAL_TYPE_FLOAT32 || stride->type==GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "the stride of pooling along dimensions " "must be integer values, not floats. The given value is a " "float."); /* Convert the type of the poolsize and the stride into size_t. */ psize=( psize->type==GAL_TYPE_SIZE_T ? psize : gal_data_copy_to_new_type_free(psize, GAL_TYPE_SIZE_T) ); stride=( stride->type==GAL_TYPE_SIZE_T ? stride : gal_data_copy_to_new_type_free(stride, GAL_TYPE_SIZE_T) ); psizearr=psize->array; pstrarr=stride->array; /* Call the separate functions. */ switch(operator) { case GAL_ARITHMETIC_OP_POOLMAX: out=gal_pool_max(input, psizearr[0], pstrarr[0], numthreads); break; case GAL_ARITHMETIC_OP_POOLMIN: out=gal_pool_min(input, psizearr[0], pstrarr[0], numthreads); break; case GAL_ARITHMETIC_OP_POOLSUM: out=gal_pool_sum(input, psizearr[0], pstrarr[0], numthreads); break; case GAL_ARITHMETIC_OP_POOLMEAN: out=gal_pool_mean(input, psizearr[0], pstrarr[0], numthreads); break; case GAL_ARITHMETIC_OP_POOLMEDIAN: out=gal_pool_median(input, psizearr[0], pstrarr[0], numthreads); break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at " "'%s' to fix the problem. The value '%d' to " "'operator' is not recognized", __func__, PACKAGE_BUGREPORT, operator); } /* Clean up and return. */ if(out!=input && (flags & GAL_ARITHMETIC_FLAG_FREE)) gal_data_free(input); return out; } gal_data_t * gal_arithmetic_load_col(char *str, int searchin, int ignorecase, size_t minmapsize, int quietmmap) { gal_data_t *out=NULL; gal_list_str_t *colid=NULL; char *c, *cf, *copy, *hdu=NULL, *filename=NULL; size_t numthreads=1; /* We only want to read a single column! */ /* This is the shortest possible string (with each component being given a one character value). Recall that in C, simply putting literal strings after each other, will merge them together into one literal string. */ char *checkstr = ( GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX "a" GAL_ARITHMETIC_OPSTR_LOADCOL_FILE "a" ); /* This function is called on every call of Arithmetic, so before going into any further tests, first make sure the string is long enough, and that it starts with the fixed format string 'FMTCOL'. */ if( strlen(str)<strlen(checkstr) || strncmp(str, GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX, GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX_LEN) ) return NULL; /* To separate the components, we need to put '\0's within the input string. But we don't want to ruin the input string (in case it isn't for this purpose), so for the rest of the steps we'll make a copy of the input string and work on that. */ gal_checkset_allocate_copy(str, ©); /* Parse the string and separate the components. */ gal_list_str_add(&colid, ©[GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX_LEN], 0); cf=copy+strlen(str); c=colid->v+1; /* colID has at least one character long, so we'll */ while(c<cf) /* start the parsing from the next character */ { /* If we are on the file-name component, then we can set the end of the column ID component, and set the start of the HDU. But this is only valid if 'hdu' hasn't already been set. */ if( !strncmp(c, GAL_ARITHMETIC_OPSTR_LOADCOL_FILE, GAL_ARITHMETIC_OPSTR_LOADCOL_FILE_LEN ) ) { /* If 'filename' or 'hdu' have already been set, then this doesn't conform to the format, and we should leave this function. */ if(filename || hdu) { free(copy); return NULL; }; /* Set the current position to '\0' (to end the column name). */ *c='\0'; /* Set the HDU's starting pointer. */ filename=c+GAL_ARITHMETIC_OPSTR_LOADCOL_FILE_LEN; c=filename+1; /* Similar to 'colid->v' above. */ } /* If we are on a HDU component, steps are very similar to the filename steps above. */ else if( !strncmp(c, GAL_ARITHMETIC_OPSTR_LOADCOL_HDU, GAL_ARITHMETIC_OPSTR_LOADCOL_HDU_LEN) ) { if(hdu) { free(copy); return NULL; } *c='\0'; hdu=c+GAL_ARITHMETIC_OPSTR_LOADCOL_HDU_LEN; c=hdu+1; } /* If there was no match with HDU or file strings, then simply increment the pointer. */ else ++c; } /* If a file-name couldn't be identified, then return NULL. */ if(filename==NULL) { free(copy); return NULL; } /* If a HDU wasn't given and the file is a FITS file, print a warning and use the default "1". */ if(hdu==NULL && gal_fits_name_is_fits(filename)) error(EXIT_FAILURE, 0, "WARNING: '%s' is a FITS file, but no HDU " "has been given (recall that a FITS file can contain " "multiple HDUs). Please add a '-hdu-AAA' suffix to your " "'"GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX"' operator to specify " "the HDU (where 'AAA' is your HDU name or counter, counting " "from zero); like this: '"GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX "%s"GAL_ARITHMETIC_OPSTR_LOADCOL_FILE"%s" GAL_ARITHMETIC_OPSTR_LOADCOL_HDU"AAA'", filename, colid->v, filename); /* Read the column from the table. */ out=gal_table_read(filename, hdu, NULL, colid, searchin, ignorecase, numthreads, minmapsize, quietmmap, NULL, "WITHIN-LOAD-COL"); /* Make sure that only a single column matched. */ if(out->next) error(EXIT_FAILURE, 0, "%s: '%s' matches more than one column! " "To load columns during arithmetic, it is important that " "'load-col' returns only a single column", colid->v, gal_fits_name_save_as_string(filename, hdu)); /* Clean up and return. */ gal_list_str_free(colid, 0); free(copy); return out; } /**********************************************************************/ /**************** High-level functions *****************/ /**********************************************************************/ /* Order is the same as in the manual. */ int gal_arithmetic_set_operator(char *string, size_t *num_operands) { int op; /* Simple arithmetic operators. */ if (!strcmp(string, "+" )) { op=GAL_ARITHMETIC_OP_PLUS; *num_operands=2; } else if (!strcmp(string, "-" )) { op=GAL_ARITHMETIC_OP_MINUS; *num_operands=2; } else if (!strcmp(string, "x" )) { op=GAL_ARITHMETIC_OP_MULTIPLY; *num_operands=2; } else if (!strcmp(string, "/" )) { op=GAL_ARITHMETIC_OP_DIVIDE; *num_operands=2; } else if (!strcmp(string, "%" )) { op=GAL_ARITHMETIC_OP_MODULO; *num_operands=2; } /* Mathematical Operators. */ else if (!strcmp(string, "abs")) { op=GAL_ARITHMETIC_OP_ABS; *num_operands=1; } else if (!strcmp(string, "pow")) { op=GAL_ARITHMETIC_OP_POW; *num_operands=2; } else if (!strcmp(string, "sqrt")) { op=GAL_ARITHMETIC_OP_SQRT; *num_operands=1; } else if (!strcmp(string, "log")) { op=GAL_ARITHMETIC_OP_LOG; *num_operands=1; } else if (!strcmp(string, "log10")) { op=GAL_ARITHMETIC_OP_LOG10; *num_operands=1; } /* Trigonometric functions. */ else if( !strcmp(string, "sin")) { op=GAL_ARITHMETIC_OP_SIN; *num_operands=1; } else if( !strcmp(string, "cos")) { op=GAL_ARITHMETIC_OP_COS; *num_operands=1; } else if( !strcmp(string, "tan")) { op=GAL_ARITHMETIC_OP_TAN; *num_operands=1; } else if( !strcmp(string, "asin")) { op=GAL_ARITHMETIC_OP_ASIN; *num_operands=1; } else if( !strcmp(string, "acos")) { op=GAL_ARITHMETIC_OP_ACOS; *num_operands=1; } else if( !strcmp(string, "atan")) { op=GAL_ARITHMETIC_OP_ATAN; *num_operands=1; } else if( !strcmp(string, "atan2")) { op=GAL_ARITHMETIC_OP_ATAN2; *num_operands=2; } else if( !strcmp(string, "sinh")) { op=GAL_ARITHMETIC_OP_SINH; *num_operands=1; } else if( !strcmp(string, "cosh")) { op=GAL_ARITHMETIC_OP_COSH; *num_operands=1; } else if( !strcmp(string, "tanh")) { op=GAL_ARITHMETIC_OP_TANH; *num_operands=1; } else if( !strcmp(string, "asinh")) { op=GAL_ARITHMETIC_OP_ASINH; *num_operands=1; } else if( !strcmp(string, "acosh")) { op=GAL_ARITHMETIC_OP_ACOSH; *num_operands=1; } else if( !strcmp(string, "atanh")) { op=GAL_ARITHMETIC_OP_ATANH; *num_operands=1; } /* Units conversion functions. */ else if (!strcmp(string, "ra-to-degree")) { op=GAL_ARITHMETIC_OP_RA_TO_DEGREE; *num_operands=1; } else if (!strcmp(string, "dec-to-degree")) { op=GAL_ARITHMETIC_OP_DEC_TO_DEGREE; *num_operands=1; } else if (!strcmp(string, "degree-to-ra")) { op=GAL_ARITHMETIC_OP_DEGREE_TO_RA; *num_operands=1; } else if (!strcmp(string, "degree-to-dec")) { op=GAL_ARITHMETIC_OP_DEGREE_TO_DEC; *num_operands=1; } else if (!strcmp(string, "counts-to-mag")) { op=GAL_ARITHMETIC_OP_COUNTS_TO_MAG; *num_operands=2; } else if (!strcmp(string, "mag-to-counts")) { op=GAL_ARITHMETIC_OP_MAG_TO_COUNTS; *num_operands=2; } else if (!strcmp(string, "sb-to-mag")) { op=GAL_ARITHMETIC_OP_SB_TO_MAG; *num_operands=2; } else if (!strcmp(string, "mag-to-sb")) { op=GAL_ARITHMETIC_OP_MAG_TO_SB; *num_operands=2; } else if (!strcmp(string, "counts-to-sb")) { op=GAL_ARITHMETIC_OP_COUNTS_TO_SB; *num_operands=3; } else if (!strcmp(string, "sb-to-counts")) { op=GAL_ARITHMETIC_OP_SB_TO_COUNTS; *num_operands=3; } else if (!strcmp(string, "counts-to-jy")) { op=GAL_ARITHMETIC_OP_COUNTS_TO_JY; *num_operands=2; } else if (!strcmp(string, "jy-to-counts")) { op=GAL_ARITHMETIC_OP_JY_TO_COUNTS; *num_operands=2; } else if (!strcmp(string, "counts-to-nanomaggy")) { op=GAL_ARITHMETIC_OP_COUNTS_TO_NANOMAGGY; *num_operands=2;} else if (!strcmp(string, "nanomaggy-to-counts")) { op=GAL_ARITHMETIC_OP_NANOMAGGY_TO_COUNTS; *num_operands=2;} else if (!strcmp(string, "mag-to-jy")) { op=GAL_ARITHMETIC_OP_MAG_TO_JY; *num_operands=1; } else if (!strcmp(string, "jy-to-mag")) { op=GAL_ARITHMETIC_OP_JY_TO_MAG; *num_operands=1; } else if( !strcmp(string, "au-to-pc")) { op=GAL_ARITHMETIC_OP_AU_TO_PC; *num_operands=1; } else if( !strcmp(string, "pc-to-au")) { op=GAL_ARITHMETIC_OP_PC_TO_AU; *num_operands=1; } else if( !strcmp(string, "ly-to-pc")) { op=GAL_ARITHMETIC_OP_LY_TO_PC; *num_operands=1; } else if( !strcmp(string, "pc-to-ly")) { op=GAL_ARITHMETIC_OP_PC_TO_LY; *num_operands=1; } else if( !strcmp(string, "ly-to-au")) { op=GAL_ARITHMETIC_OP_LY_TO_AU; *num_operands=1; } else if( !strcmp(string, "au-to-ly")) { op=GAL_ARITHMETIC_OP_AU_TO_LY; *num_operands=1; } /* Celestial coordinate conversions. */ else if (!strcmp(string, "eq-b1950-to-eq-j2000")) { op=GAL_ARITHMETIC_OP_EQB1950_TO_EQJ2000; *num_operands=2; } else if (!strcmp(string, "eq-b1950-to-ec-b1950")) { op=GAL_ARITHMETIC_OP_EQB1950_TO_ECB1950; *num_operands=2; } else if (!strcmp(string, "eq-b1950-to-ec-j2000")) { op=GAL_ARITHMETIC_OP_EQB1950_TO_ECJ2000; *num_operands=2; } else if (!strcmp(string, "eq-b1950-to-galactic")) { op=GAL_ARITHMETIC_OP_EQB1950_TO_GALACTIC; *num_operands=2; } else if (!strcmp(string, "eq-b1950-to-supergalactic")) { op=GAL_ARITHMETIC_OP_EQB1950_TO_SUPERGALACTIC; *num_operands=2; } else if (!strcmp(string, "eq-j2000-to-eq-b1950")) { op=GAL_ARITHMETIC_OP_EQJ2000_TO_EQB1950; *num_operands=2; } else if (!strcmp(string, "eq-j2000-to-ec-b1950")) { op=GAL_ARITHMETIC_OP_EQJ2000_TO_ECB1950; *num_operands=2; } else if (!strcmp(string, "eq-j2000-to-ec-j2000")) { op=GAL_ARITHMETIC_OP_EQJ2000_TO_ECJ2000; *num_operands=2; } else if (!strcmp(string, "eq-j2000-to-galactic")) { op=GAL_ARITHMETIC_OP_EQJ2000_TO_GALACTIC; *num_operands=2; } else if (!strcmp(string, "eq-j2000-to-supergalactic")) { op=GAL_ARITHMETIC_OP_EQJ2000_TO_SUPERGALACTIC; *num_operands=2; } else if (!strcmp(string, "ec-b1950-to-eq-b1950")) { op=GAL_ARITHMETIC_OP_ECB1950_TO_EQB1950; *num_operands=2; } else if (!strcmp(string, "ec-b1950-to-eq-j2000")) { op=GAL_ARITHMETIC_OP_ECB1950_TO_EQJ2000; *num_operands=2; } else if (!strcmp(string, "ec-b1950-to-ec-j2000")) { op=GAL_ARITHMETIC_OP_ECB1950_TO_ECJ2000; *num_operands=2; } else if (!strcmp(string, "ec-b1950-to-galactic")) { op=GAL_ARITHMETIC_OP_ECB1950_TO_GALACTIC; *num_operands=2; } else if (!strcmp(string, "ec-b1950-to-supergalactic")) { op=GAL_ARITHMETIC_OP_ECB1950_TO_SUPERGALACTIC; *num_operands=2; } else if (!strcmp(string, "ec-j2000-to-eq-b1950")) { op=GAL_ARITHMETIC_OP_ECJ2000_TO_EQB1950; *num_operands=2; } else if (!strcmp(string, "ec-j2000-to-eq-j2000")) { op=GAL_ARITHMETIC_OP_ECJ2000_TO_EQJ2000; *num_operands=2; } else if (!strcmp(string, "ec-j2000-to-ec-b1950")) { op=GAL_ARITHMETIC_OP_ECJ2000_TO_ECB1950; *num_operands=2; } else if (!strcmp(string, "ec-j2000-to-galactic")) { op=GAL_ARITHMETIC_OP_ECJ2000_TO_GALACTIC; *num_operands=2; } else if (!strcmp(string, "ec-j2000-to-supergalactic")) { op=GAL_ARITHMETIC_OP_ECJ2000_TO_SUPERGALACTIC; *num_operands=2; } else if (!strcmp(string, "galactic-to-eq-b1950")) { op=GAL_ARITHMETIC_OP_GALACTIC_TO_EQB1950; *num_operands=2; } else if (!strcmp(string, "galactic-to-eq-j2000")) { op=GAL_ARITHMETIC_OP_GALACTIC_TO_EQJ2000; *num_operands=2; } else if (!strcmp(string, "galactic-to-ec-b1950")) { op=GAL_ARITHMETIC_OP_GALACTIC_TO_ECB1950; *num_operands=2; } else if (!strcmp(string, "galactic-to-ec-j2000")) { op=GAL_ARITHMETIC_OP_GALACTIC_TO_ECJ2000; *num_operands=2; } else if (!strcmp(string, "galactic-to-supergalactic")) { op=GAL_ARITHMETIC_OP_GALACTIC_TO_SUPERGALACTIC; *num_operands=2; } else if (!strcmp(string, "supergalactic-to-eq-b1950")) { op=GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQB1950; *num_operands=2; } else if (!strcmp(string, "supergalactic-to-eq-j2000")) { op=GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQJ2000; *num_operands=2; } else if (!strcmp(string, "supergalactic-to-ec-b1950")) { op=GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECB1950; *num_operands=2; } else if (!strcmp(string, "supergalactic-to-ec-j2000")) { op=GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECJ2000; *num_operands=2; } else if (!strcmp(string, "supergalactic-to-galactic")) { op=GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_GALACTIC; *num_operands=2; } /* Statistical/higher-level operators. */ else if (!strcmp(string, "minvalue")) { op=GAL_ARITHMETIC_OP_MINVAL; *num_operands=1; } else if (!strcmp(string, "maxvalue")) { op=GAL_ARITHMETIC_OP_MAXVAL; *num_operands=1; } else if (!strcmp(string, "numbervalue")) { op=GAL_ARITHMETIC_OP_NUMBERVAL; *num_operands=1; } else if (!strcmp(string, "sumvalue")) { op=GAL_ARITHMETIC_OP_SUMVAL; *num_operands=1; } else if (!strcmp(string, "meanvalue")) { op=GAL_ARITHMETIC_OP_MEANVAL; *num_operands=1; } else if (!strcmp(string, "stdvalue")) { op=GAL_ARITHMETIC_OP_STDVAL; *num_operands=1; } else if (!strcmp(string, "medianvalue")) { op=GAL_ARITHMETIC_OP_MEDIANVAL; *num_operands=1; } else if (!strcmp(string, "min")) { op=GAL_ARITHMETIC_OP_MIN; *num_operands=-1; } else if (!strcmp(string, "max")) { op=GAL_ARITHMETIC_OP_MAX; *num_operands=-1; } else if (!strcmp(string, "number")) { op=GAL_ARITHMETIC_OP_NUMBER; *num_operands=-1; } else if (!strcmp(string, "sum")) { op=GAL_ARITHMETIC_OP_SUM; *num_operands=-1; } else if (!strcmp(string, "mean")) { op=GAL_ARITHMETIC_OP_MEAN; *num_operands=-1; } else if (!strcmp(string, "std")) { op=GAL_ARITHMETIC_OP_STD; *num_operands=-1; } else if (!strcmp(string, "mad")) { op=GAL_ARITHMETIC_OP_MAD; *num_operands=-1; } else if (!strcmp(string, "median")) { op=GAL_ARITHMETIC_OP_MEDIAN; *num_operands=-1; } else if (!strcmp(string, "quantile")) { op=GAL_ARITHMETIC_OP_QUANTILE; *num_operands=-1; } else if (!strcmp(string, "sigclip-number")) { op=GAL_ARITHMETIC_OP_SIGCLIP_NUMBER; *num_operands=-1; } else if (!strcmp(string, "sigclip-mean")) { op=GAL_ARITHMETIC_OP_SIGCLIP_MEAN; *num_operands=-1; } else if (!strcmp(string, "sigclip-median")) { op=GAL_ARITHMETIC_OP_SIGCLIP_MEDIAN; *num_operands=-1; } else if (!strcmp(string, "sigclip-mad")) { op=GAL_ARITHMETIC_OP_SIGCLIP_MAD; *num_operands=-1; } else if (!strcmp(string, "sigclip-std")) { op=GAL_ARITHMETIC_OP_SIGCLIP_STD; *num_operands=-1; } else if (!strcmp(string, "madclip-number")) { op=GAL_ARITHMETIC_OP_MADCLIP_NUMBER; *num_operands=-1; } else if (!strcmp(string, "madclip-mean")) { op=GAL_ARITHMETIC_OP_MADCLIP_MEAN; *num_operands=-1; } else if (!strcmp(string, "madclip-median")) { op=GAL_ARITHMETIC_OP_MADCLIP_MEDIAN; *num_operands=-1; } else if (!strcmp(string, "madclip-mad")) { op=GAL_ARITHMETIC_OP_MADCLIP_MAD; *num_operands=-1; } else if (!strcmp(string, "madclip-std")) { op=GAL_ARITHMETIC_OP_MADCLIP_STD; *num_operands=-1; } else if (!strcmp(string, "madclip-fill-number")) { op=GAL_ARITHMETIC_OP_MADCLIP_FILL_NUMBER; *num_operands=-1; } else if (!strcmp(string, "madclip-fill-mean")) { op=GAL_ARITHMETIC_OP_MADCLIP_FILL_MEAN; *num_operands=-1; } else if (!strcmp(string, "madclip-fill-median")) { op=GAL_ARITHMETIC_OP_MADCLIP_FILL_MEDIAN; *num_operands=-1; } else if (!strcmp(string, "madclip-fill-mad")) { op=GAL_ARITHMETIC_OP_MADCLIP_FILL_MAD; *num_operands=-1; } else if (!strcmp(string, "madclip-fill-std")) { op=GAL_ARITHMETIC_OP_MADCLIP_FILL_STD; *num_operands=-1; } else if (!strcmp(string, "sigclip-fill-number")) { op=GAL_ARITHMETIC_OP_SIGCLIP_FILL_NUMBER; *num_operands=-1; } else if (!strcmp(string, "sigclip-fill-mean")) { op=GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEAN; *num_operands=-1; } else if (!strcmp(string, "sigclip-fill-median")) { op=GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEDIAN; *num_operands=-1; } else if (!strcmp(string, "sigclip-fill-mad")) { op=GAL_ARITHMETIC_OP_SIGCLIP_FILL_MAD; *num_operands=-1; } else if (!strcmp(string, "sigclip-fill-std")) { op=GAL_ARITHMETIC_OP_SIGCLIP_FILL_STD; *num_operands=-1; } /* To one-dimension (only based on values). */ else if (!strcmp(string, "unique")) { op=GAL_ARITHMETIC_OP_UNIQUE; *num_operands=1; } else if (!strcmp(string, "noblank")) { op=GAL_ARITHMETIC_OP_NOBLANK; *num_operands=1; } /* Adding noise operators. */ else if (!strcmp(string, "mknoise-sigma")) { op=GAL_ARITHMETIC_OP_MKNOISE_SIGMA; *num_operands=2; } else if (!strcmp(string, "mknoise-sigma-from-mean")) { op=GAL_ARITHMETIC_OP_MKNOISE_SIGMA_FROM_MEAN; *num_operands=2; } else if (!strcmp(string, "mknoise-poisson")) { op=GAL_ARITHMETIC_OP_MKNOISE_POISSON; *num_operands=2; } else if (!strcmp(string, "mknoise-uniform")) { op=GAL_ARITHMETIC_OP_MKNOISE_UNIFORM; *num_operands=2; } else if (!strcmp(string, "random-from-hist")) { op=GAL_ARITHMETIC_OP_RANDOM_FROM_HIST; *num_operands=3; } else if (!strcmp(string, "random-from-hist-raw")) { op=GAL_ARITHMETIC_OP_RANDOM_FROM_HIST_RAW; *num_operands=3; } /* Dimensionality changing */ else if (!strcmp(string, "to-1d")) { op=GAL_ARITHMETIC_OP_TO1D; *num_operands=1; } else if (!strcmp(string, "stitch")) { op=GAL_ARITHMETIC_OP_STITCH; *num_operands=-1; } else if (!strcmp(string, "trim")) { op=GAL_ARITHMETIC_OP_TRIM; *num_operands=1; } /* Conditional operators. */ else if (!strcmp(string, "lt" )) { op=GAL_ARITHMETIC_OP_LT; *num_operands=2; } else if (!strcmp(string, "le")) { op=GAL_ARITHMETIC_OP_LE; *num_operands=2; } else if (!strcmp(string, "gt" )) { op=GAL_ARITHMETIC_OP_GT; *num_operands=2; } else if (!strcmp(string, "ge")) { op=GAL_ARITHMETIC_OP_GE; *num_operands=2; } else if (!strcmp(string, "eq")) { op=GAL_ARITHMETIC_OP_EQ; *num_operands=2; } else if (!strcmp(string, "ne")) { op=GAL_ARITHMETIC_OP_NE; *num_operands=2; } else if (!strcmp(string, "and")) { op=GAL_ARITHMETIC_OP_AND; *num_operands=2; } else if (!strcmp(string, "or")) { op=GAL_ARITHMETIC_OP_OR; *num_operands=2; } else if (!strcmp(string, "not")) { op=GAL_ARITHMETIC_OP_NOT; *num_operands=1; } else if (!strcmp(string, "isblank")) { op=GAL_ARITHMETIC_OP_ISBLANK; *num_operands=1; } else if (!strcmp(string, "isnotblank")) { op=GAL_ARITHMETIC_OP_ISNOTBLANK; *num_operands=1; } else if (!strcmp(string, "where")) { op=GAL_ARITHMETIC_OP_WHERE; *num_operands=3; } /* Bitwise operators. */ else if (!strcmp(string, "bitand")) { op=GAL_ARITHMETIC_OP_BITAND; *num_operands=2; } else if (!strcmp(string, "bitor")) { op=GAL_ARITHMETIC_OP_BITOR; *num_operands=2; } else if (!strcmp(string, "bitxor")) { op=GAL_ARITHMETIC_OP_BITXOR; *num_operands=2; } else if (!strcmp(string, "lshift")) { op=GAL_ARITHMETIC_OP_BITLSH; *num_operands=2; } else if (!strcmp(string, "rshift")) { op=GAL_ARITHMETIC_OP_BITRSH; *num_operands=2; } else if (!strcmp(string, "bitnot")) { op=GAL_ARITHMETIC_OP_BITNOT; *num_operands=1; } /* Type conversion. */ else if (!strcmp(string, "uint8") || !strcmp(string, "u8")) { op=GAL_ARITHMETIC_OP_TO_UINT8; *num_operands=1; } else if (!strcmp(string, "int8") || !strcmp(string, "i8")) { op=GAL_ARITHMETIC_OP_TO_INT8; *num_operands=1; } else if (!strcmp(string, "uint16") || !strcmp(string, "u16")) { op=GAL_ARITHMETIC_OP_TO_UINT16; *num_operands=1; } else if (!strcmp(string, "int16") || !strcmp(string, "i16")) { op=GAL_ARITHMETIC_OP_TO_INT16; *num_operands=1; } else if (!strcmp(string, "uint32") || !strcmp(string, "u32")) { op=GAL_ARITHMETIC_OP_TO_UINT32; *num_operands=1; } else if (!strcmp(string, "int32") || !strcmp(string, "i32")) { op=GAL_ARITHMETIC_OP_TO_INT32; *num_operands=1; } else if (!strcmp(string, "uint64") || !strcmp(string, "u64")) { op=GAL_ARITHMETIC_OP_TO_UINT64; *num_operands=1; } else if (!strcmp(string, "int64") || !strcmp(string, "i64")) { op=GAL_ARITHMETIC_OP_TO_INT64; *num_operands=1; } else if (!strcmp(string, "float32") || !strcmp(string, "f32")) { op=GAL_ARITHMETIC_OP_TO_FLOAT32; *num_operands=1; } else if (!strcmp(string, "float64") || !strcmp(string, "f64")) { op=GAL_ARITHMETIC_OP_TO_FLOAT64; *num_operands=1; } /* Constants. */ else if (!strcmp(string, "e")) { op=GAL_ARITHMETIC_OP_E; *num_operands=0; } else if (!strcmp(string, "pi")) { op=GAL_ARITHMETIC_OP_PI; *num_operands=0; } else if (!strcmp(string, "c")) { op=GAL_ARITHMETIC_OP_C; *num_operands=0; } else if (!strcmp(string, "G")) { op=GAL_ARITHMETIC_OP_G; *num_operands=0; } else if (!strcmp(string, "h")) { op=GAL_ARITHMETIC_OP_H; *num_operands=0; } else if (!strcmp(string, "AU")) { op=GAL_ARITHMETIC_OP_AU; *num_operands=0; } else if (!strcmp(string, "ly")) { op=GAL_ARITHMETIC_OP_LY; *num_operands=0; } else if (!strcmp(string, "avogadro")) { op=GAL_ARITHMETIC_OP_AVOGADRO; *num_operands=0; } else if (!strcmp(string, "fine-structure")) { op=GAL_ARITHMETIC_OP_FINESTRUCTURE; *num_operands=0; } /* Surrounding box. */ else if (!strcmp(string, "rotate-coord")) { op=GAL_ARITHMETIC_OP_ROTATE_COORD; *num_operands=5; } else if (!strcmp(string, "box-around-ellipse")) { op=GAL_ARITHMETIC_OP_BOX_AROUND_ELLIPSE;*num_operands=3; } else if (!strcmp(string, "box-vertices-on-sphere")) { op=GAL_ARITHMETIC_OP_BOX_VERTICES_ON_SPHERE; *num_operands=4; } /* Size and position operators. */ else if (!strcmp(string, "size")) { op=GAL_ARITHMETIC_OP_SIZE; *num_operands=2; } else if (!strcmp(string, "makenew")) { op=GAL_ARITHMETIC_OP_MAKENEW; *num_operands=-1; } else if (!strcmp(string, "index")) { op=GAL_ARITHMETIC_OP_INDEX; *num_operands=1; } else if (!strcmp(string, "counter")) { op=GAL_ARITHMETIC_OP_COUNTER; *num_operands=1; } else if (!strcmp(string, "indexonly")) { op=GAL_ARITHMETIC_OP_INDEXONLY; *num_operands=1; } else if (!strcmp(string, "counteronly")) { op=GAL_ARITHMETIC_OP_COUNTERONLY; *num_operands=1; } else if (!strcmp(string, "swap")) { op=GAL_ARITHMETIC_OP_SWAP; *num_operands=2; } else if (!strcmp(string, "constant")) { op=GAL_ARITHMETIC_OP_CONSTANT; *num_operands=2; } /* Pooling operators. */ else if (!strcmp(string, "pool-max")) { op=GAL_ARITHMETIC_OP_POOLMAX; *num_operands=3; } else if (!strcmp(string, "pool-min")) { op=GAL_ARITHMETIC_OP_POOLMIN; *num_operands=3; } else if (!strcmp(string, "pool-sum")) { op=GAL_ARITHMETIC_OP_POOLSUM; *num_operands=3; } else if (!strcmp(string, "pool-mean")) { op=GAL_ARITHMETIC_OP_POOLMEAN; *num_operands=3; } else if (!strcmp(string, "pool-median")) { op=GAL_ARITHMETIC_OP_POOLMEDIAN; *num_operands=3; } /* Operator not defined. */ else { op=GAL_ARITHMETIC_OP_INVALID; *num_operands=GAL_BLANK_INT; } return op; } char * gal_arithmetic_operator_string(int operator) { switch(operator) { case GAL_ARITHMETIC_OP_PLUS: return "+"; case GAL_ARITHMETIC_OP_MINUS: return "-"; case GAL_ARITHMETIC_OP_MULTIPLY: return "x"; case GAL_ARITHMETIC_OP_DIVIDE: return "/"; case GAL_ARITHMETIC_OP_MODULO: return "%"; case GAL_ARITHMETIC_OP_LT: return "lt"; case GAL_ARITHMETIC_OP_LE: return "le"; case GAL_ARITHMETIC_OP_GT: return "gt"; case GAL_ARITHMETIC_OP_GE: return "ge"; case GAL_ARITHMETIC_OP_EQ: return "eq"; case GAL_ARITHMETIC_OP_NE: return "ne"; case GAL_ARITHMETIC_OP_AND: return "and"; case GAL_ARITHMETIC_OP_OR: return "or"; case GAL_ARITHMETIC_OP_NOT: return "not"; case GAL_ARITHMETIC_OP_ISBLANK: return "isblank"; case GAL_ARITHMETIC_OP_ISNOTBLANK: return "isnotblank"; case GAL_ARITHMETIC_OP_WHERE: return "where"; case GAL_ARITHMETIC_OP_BITAND: return "bitand"; case GAL_ARITHMETIC_OP_BITOR: return "bitor"; case GAL_ARITHMETIC_OP_BITXOR: return "bitxor"; case GAL_ARITHMETIC_OP_BITLSH: return "lshift"; case GAL_ARITHMETIC_OP_BITRSH: return "rshift"; case GAL_ARITHMETIC_OP_BITNOT: return "bitnot"; case GAL_ARITHMETIC_OP_ABS: return "abs"; case GAL_ARITHMETIC_OP_POW: return "pow"; case GAL_ARITHMETIC_OP_SQRT: return "sqrt"; case GAL_ARITHMETIC_OP_LOG: return "log"; case GAL_ARITHMETIC_OP_LOG10: return "log10"; case GAL_ARITHMETIC_OP_SIN: return "sin"; case GAL_ARITHMETIC_OP_COS: return "cos"; case GAL_ARITHMETIC_OP_TAN: return "tan"; case GAL_ARITHMETIC_OP_ASIN: return "asin"; case GAL_ARITHMETIC_OP_ACOS: return "acos"; case GAL_ARITHMETIC_OP_ATAN: return "atan"; case GAL_ARITHMETIC_OP_SINH: return "sinh"; case GAL_ARITHMETIC_OP_COSH: return "cosh"; case GAL_ARITHMETIC_OP_TANH: return "tanh"; case GAL_ARITHMETIC_OP_ASINH: return "asinh"; case GAL_ARITHMETIC_OP_ACOSH: return "acosh"; case GAL_ARITHMETIC_OP_ATANH: return "atanh"; case GAL_ARITHMETIC_OP_ATAN2: return "atan2"; case GAL_ARITHMETIC_OP_RA_TO_DEGREE: return "ra-to-degree"; case GAL_ARITHMETIC_OP_DEC_TO_DEGREE: return "dec-to-degree"; case GAL_ARITHMETIC_OP_DEGREE_TO_RA: return "degree-to-ra"; case GAL_ARITHMETIC_OP_DEGREE_TO_DEC: return "degree-to-dec"; case GAL_ARITHMETIC_OP_COUNTS_TO_MAG: return "counts-to-mag"; case GAL_ARITHMETIC_OP_MAG_TO_COUNTS: return "mag-to-counts"; case GAL_ARITHMETIC_OP_SB_TO_MAG: return "sb-to-mag"; case GAL_ARITHMETIC_OP_MAG_TO_SB: return "mag-to-sb"; case GAL_ARITHMETIC_OP_COUNTS_TO_SB: return "counts-to-sb"; case GAL_ARITHMETIC_OP_SB_TO_COUNTS: return "sb-to-counts"; case GAL_ARITHMETIC_OP_COUNTS_TO_JY: return "counts-to-jy"; case GAL_ARITHMETIC_OP_JY_TO_COUNTS: return "jy-to-counts"; case GAL_ARITHMETIC_OP_COUNTS_TO_NANOMAGGY: return "counts-to-nanomaggy"; case GAL_ARITHMETIC_OP_NANOMAGGY_TO_COUNTS: return "nanomaggy-to-counts"; case GAL_ARITHMETIC_OP_MAG_TO_JY: return "mag-to-jy"; case GAL_ARITHMETIC_OP_JY_TO_MAG: return "jy-to-mag"; case GAL_ARITHMETIC_OP_AU_TO_PC: return "au-to-pc"; case GAL_ARITHMETIC_OP_PC_TO_AU: return "pc-to-au"; case GAL_ARITHMETIC_OP_LY_TO_PC: return "ly-to-pc"; case GAL_ARITHMETIC_OP_PC_TO_LY: return "pc-to-ly"; case GAL_ARITHMETIC_OP_LY_TO_AU: return "ly-to-au"; case GAL_ARITHMETIC_OP_AU_TO_LY: return "au-to-ly"; case GAL_ARITHMETIC_OP_MINVAL: return "minvalue"; case GAL_ARITHMETIC_OP_MAXVAL: return "maxvalue"; case GAL_ARITHMETIC_OP_NUMBERVAL: return "numbervalue"; case GAL_ARITHMETIC_OP_SUMVAL: return "sumvalue"; case GAL_ARITHMETIC_OP_MEANVAL: return "meanvalue"; case GAL_ARITHMETIC_OP_STDVAL: return "stdvalue"; case GAL_ARITHMETIC_OP_MEDIANVAL: return "medianvalue"; case GAL_ARITHMETIC_OP_UNIQUE: return "unique"; case GAL_ARITHMETIC_OP_NOBLANK: return "noblank"; case GAL_ARITHMETIC_OP_MIN: return "min"; case GAL_ARITHMETIC_OP_MAX: return "max"; case GAL_ARITHMETIC_OP_NUMBER: return "number"; case GAL_ARITHMETIC_OP_SUM: return "sum"; case GAL_ARITHMETIC_OP_MEAN: return "mean"; case GAL_ARITHMETIC_OP_STD: return "std"; case GAL_ARITHMETIC_OP_MAD: return "mad"; case GAL_ARITHMETIC_OP_MEDIAN: return "median"; case GAL_ARITHMETIC_OP_QUANTILE: return "quantile"; case GAL_ARITHMETIC_OP_SIGCLIP_NUMBER: return "sigclip-number"; case GAL_ARITHMETIC_OP_SIGCLIP_MEDIAN: return "sigclip-median"; case GAL_ARITHMETIC_OP_SIGCLIP_MEAN: return "sigclip-mean"; case GAL_ARITHMETIC_OP_SIGCLIP_MAD: return "sigclip-mad"; case GAL_ARITHMETIC_OP_SIGCLIP_STD: return "sigclip-std"; case GAL_ARITHMETIC_OP_MADCLIP_NUMBER: return "madclip-number"; case GAL_ARITHMETIC_OP_MADCLIP_MEDIAN: return "madclip-median"; case GAL_ARITHMETIC_OP_MADCLIP_MEAN: return "madclip-mean"; case GAL_ARITHMETIC_OP_MADCLIP_MAD: return "madclip-mad"; case GAL_ARITHMETIC_OP_MADCLIP_STD: return "madclip-std"; case GAL_ARITHMETIC_OP_MADCLIP_FILL_NUMBER: return "madclip-fill-number"; case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEDIAN: return "madclip-fill-median"; case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEAN: return "madclip-fill-mean"; case GAL_ARITHMETIC_OP_MADCLIP_FILL_MAD: return "madclip-fill-mad"; case GAL_ARITHMETIC_OP_MADCLIP_FILL_STD: return "madclip-fill-std"; case GAL_ARITHMETIC_OP_SIGCLIP_FILL_NUMBER: return "sigclip-fill-number"; case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEDIAN: return "sigclip-fill-median"; case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEAN: return "sigclip-fill-mean"; case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MAD: return "sigclip-fill-mad"; case GAL_ARITHMETIC_OP_SIGCLIP_FILL_STD: return "sigclip-fill-std"; case GAL_ARITHMETIC_OP_MKNOISE_SIGMA: return "mknoise-sigma"; case GAL_ARITHMETIC_OP_MKNOISE_SIGMA_FROM_MEAN: return "mknoise-sigma-from-mean"; case GAL_ARITHMETIC_OP_MKNOISE_POISSON: return "mknoise-poisson"; case GAL_ARITHMETIC_OP_MKNOISE_UNIFORM: return "mknoise-uniform"; case GAL_ARITHMETIC_OP_RANDOM_FROM_HIST:return "random-from-hist"; case GAL_ARITHMETIC_OP_RANDOM_FROM_HIST_RAW: return "random-from-hist-raw"; case GAL_ARITHMETIC_OP_STITCH: return "stitch"; case GAL_ARITHMETIC_OP_TO_UINT8: return "uchar"; case GAL_ARITHMETIC_OP_TO_INT8: return "char"; case GAL_ARITHMETIC_OP_TO_UINT16: return "ushort"; case GAL_ARITHMETIC_OP_TO_INT16: return "short"; case GAL_ARITHMETIC_OP_TO_UINT32: return "uint"; case GAL_ARITHMETIC_OP_TO_INT32: return "int"; case GAL_ARITHMETIC_OP_TO_UINT64: return "ulong"; case GAL_ARITHMETIC_OP_TO_INT64: return "long"; case GAL_ARITHMETIC_OP_TO_FLOAT32: return "float32"; case GAL_ARITHMETIC_OP_TO_FLOAT64: return "float64"; case GAL_ARITHMETIC_OP_E: return "e"; case GAL_ARITHMETIC_OP_PI: return "pi"; case GAL_ARITHMETIC_OP_C: return "c"; case GAL_ARITHMETIC_OP_G: return "G"; case GAL_ARITHMETIC_OP_H: return "h"; case GAL_ARITHMETIC_OP_AU: return "au"; case GAL_ARITHMETIC_OP_LY: return "ly"; case GAL_ARITHMETIC_OP_AVOGADRO: return "avogadro"; case GAL_ARITHMETIC_OP_FINESTRUCTURE: return "fine-structure"; case GAL_ARITHMETIC_OP_ROTATE_COORD: return "rotate-coord"; case GAL_ARITHMETIC_OP_BOX_AROUND_ELLIPSE: return "box-around-ellipse"; case GAL_ARITHMETIC_OP_BOX_VERTICES_ON_SPHERE: return "vertices-on-sphere"; case GAL_ARITHMETIC_OP_SIZE: return "size"; case GAL_ARITHMETIC_OP_MAKENEW: return "makenew"; case GAL_ARITHMETIC_OP_INDEX: return "index"; case GAL_ARITHMETIC_OP_COUNTER: return "counter"; case GAL_ARITHMETIC_OP_INDEXONLY: return "indexonly"; case GAL_ARITHMETIC_OP_COUNTERONLY: return "counteronly"; case GAL_ARITHMETIC_OP_SWAP: return "swap"; case GAL_ARITHMETIC_OP_CONSTANT: return "constant"; case GAL_ARITHMETIC_OP_POOLMAX: return "pool-max"; case GAL_ARITHMETIC_OP_POOLMIN: return "pool-min"; case GAL_ARITHMETIC_OP_POOLSUM: return "pool-sum"; case GAL_ARITHMETIC_OP_POOLMEAN: return "pool-mean"; case GAL_ARITHMETIC_OP_POOLMEDIAN: return "pool-median"; case GAL_ARITHMETIC_OP_EQB1950_TO_EQJ2000: return "eq-b1950-to-eq-j2000"; case GAL_ARITHMETIC_OP_EQB1950_TO_ECB1950: return "eq-b1950-to-eq-b1950"; case GAL_ARITHMETIC_OP_EQB1950_TO_ECJ2000: return "eq-b1950-to-ec-j2000"; case GAL_ARITHMETIC_OP_EQB1950_TO_GALACTIC: return "eq-b1950-to-galactic"; case GAL_ARITHMETIC_OP_EQB1950_TO_SUPERGALACTIC: return "eq-b1950-to-supergalactic"; case GAL_ARITHMETIC_OP_EQJ2000_TO_EQB1950: return "eq-j2000-to-eq-b1950"; case GAL_ARITHMETIC_OP_EQJ2000_TO_ECB1950: return "eq-j2000-to-ec-b1950"; case GAL_ARITHMETIC_OP_EQJ2000_TO_ECJ2000: return "eq-j2000-to-eq-j2000"; case GAL_ARITHMETIC_OP_EQJ2000_TO_GALACTIC: return "eq-j2000-to-galactic"; case GAL_ARITHMETIC_OP_EQJ2000_TO_SUPERGALACTIC: return "eq-j2000-to-supergalactic"; case GAL_ARITHMETIC_OP_ECB1950_TO_EQB1950: return "ec-b1950-to-eq-b1950"; case GAL_ARITHMETIC_OP_ECB1950_TO_EQJ2000: return "ec-b1950-to-eq-j2000"; case GAL_ARITHMETIC_OP_ECB1950_TO_ECJ2000: return "ec-b1950-to-ec-j2000"; case GAL_ARITHMETIC_OP_ECB1950_TO_GALACTIC: return "ec-b1950-to-galactic"; case GAL_ARITHMETIC_OP_ECB1950_TO_SUPERGALACTIC: return "ec-b1950-to-supergalacitc"; case GAL_ARITHMETIC_OP_ECJ2000_TO_EQB1950: return "ec-j2000-to-eq-b1950"; case GAL_ARITHMETIC_OP_ECJ2000_TO_EQJ2000: return "ec-j2000-to-eq-j2000"; case GAL_ARITHMETIC_OP_ECJ2000_TO_ECB1950: return "ec-j2000-to-ec-b1950"; case GAL_ARITHMETIC_OP_ECJ2000_TO_GALACTIC: return "ec-j2000-to-galactic"; case GAL_ARITHMETIC_OP_ECJ2000_TO_SUPERGALACTIC: return "ec-j2000-to-supergalactic"; case GAL_ARITHMETIC_OP_GALACTIC_TO_EQB1950: return "galactic-to-eq-b1950"; case GAL_ARITHMETIC_OP_GALACTIC_TO_EQJ2000: return "galactic-to-eq-j2000"; case GAL_ARITHMETIC_OP_GALACTIC_TO_ECB1950: return "galactic-to-ec-b1950"; case GAL_ARITHMETIC_OP_GALACTIC_TO_ECJ2000: return "galactic-to-ec-j2000"; case GAL_ARITHMETIC_OP_GALACTIC_TO_SUPERGALACTIC: return "galactic-to-supergalactic"; case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQB1950: return "supergalactic-to-eq-b1950"; case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQJ2000: return "supergalactic-to-eq-j2000"; case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECB1950: return "supergalactic-to-ec-b1950"; case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECJ2000: return "supergalactic-to-ec-j2000"; case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_GALACTIC: return "supergalactic-to-galactic"; /* Un-recognized! */ default: return NULL; } return NULL; } gal_data_t * gal_arithmetic(int operator, size_t numthreads, int flags, ...) { va_list va; gal_data_t *d1, *d2, *d3, *d4, *d5, *out=NULL; /* Prepare the variable arguments (starting after the flags argument). */ va_start(va, flags); /* Depending on the operator, do the job: */ switch(operator) { /* Binary operators with any data type. */ case GAL_ARITHMETIC_OP_PLUS: case GAL_ARITHMETIC_OP_MINUS: case GAL_ARITHMETIC_OP_MULTIPLY: case GAL_ARITHMETIC_OP_DIVIDE: case GAL_ARITHMETIC_OP_LT: case GAL_ARITHMETIC_OP_LE: case GAL_ARITHMETIC_OP_GT: case GAL_ARITHMETIC_OP_GE: case GAL_ARITHMETIC_OP_EQ: case GAL_ARITHMETIC_OP_NE: case GAL_ARITHMETIC_OP_AND: case GAL_ARITHMETIC_OP_OR: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); out=arithmetic_binary(operator, flags, d1, d2); break; case GAL_ARITHMETIC_OP_NOT: d1 = va_arg(va, gal_data_t *); out=arithmetic_not(d1, flags); break; case GAL_ARITHMETIC_OP_ISBLANK: case GAL_ARITHMETIC_OP_ISNOTBLANK: d1 = va_arg(va, gal_data_t *); out = ( operator==GAL_ARITHMETIC_OP_ISBLANK ? gal_blank_flag(d1) : gal_blank_flag_not(d1) ); if(flags & GAL_ARITHMETIC_FLAG_FREE) gal_data_free(d1); break; case GAL_ARITHMETIC_OP_WHERE: d1 = va_arg(va, gal_data_t *); /* To modify value/array. */ d2 = va_arg(va, gal_data_t *); /* Condition (unsigned char). */ d3 = va_arg(va, gal_data_t *); /* If true value/array. */ arithmetic_where(flags, d1, d2, d3); out=d1; break; /* Unary function operators. */ case GAL_ARITHMETIC_OP_SQRT: case GAL_ARITHMETIC_OP_LOG: case GAL_ARITHMETIC_OP_LOG10: case GAL_ARITHMETIC_OP_SIN: case GAL_ARITHMETIC_OP_COS: case GAL_ARITHMETIC_OP_TAN: case GAL_ARITHMETIC_OP_ASIN: case GAL_ARITHMETIC_OP_ACOS: case GAL_ARITHMETIC_OP_ATAN: case GAL_ARITHMETIC_OP_SINH: case GAL_ARITHMETIC_OP_COSH: case GAL_ARITHMETIC_OP_TANH: case GAL_ARITHMETIC_OP_ASINH: case GAL_ARITHMETIC_OP_ACOSH: case GAL_ARITHMETIC_OP_ATANH: case GAL_ARITHMETIC_OP_AU_TO_PC: case GAL_ARITHMETIC_OP_PC_TO_AU: case GAL_ARITHMETIC_OP_LY_TO_PC: case GAL_ARITHMETIC_OP_PC_TO_LY: case GAL_ARITHMETIC_OP_LY_TO_AU: case GAL_ARITHMETIC_OP_AU_TO_LY: case GAL_ARITHMETIC_OP_MAG_TO_JY: case GAL_ARITHMETIC_OP_JY_TO_MAG: case GAL_ARITHMETIC_OP_RA_TO_DEGREE: case GAL_ARITHMETIC_OP_DEC_TO_DEGREE: case GAL_ARITHMETIC_OP_DEGREE_TO_RA: case GAL_ARITHMETIC_OP_DEGREE_TO_DEC: d1 = va_arg(va, gal_data_t *); out=arithmetic_function_unary(operator, flags, d1); break; /* 2-component unit conversion. */ case GAL_ARITHMETIC_OP_EQB1950_TO_EQJ2000: case GAL_ARITHMETIC_OP_EQB1950_TO_ECB1950: case GAL_ARITHMETIC_OP_EQB1950_TO_ECJ2000: case GAL_ARITHMETIC_OP_EQB1950_TO_GALACTIC: case GAL_ARITHMETIC_OP_EQB1950_TO_SUPERGALACTIC: case GAL_ARITHMETIC_OP_EQJ2000_TO_EQB1950: case GAL_ARITHMETIC_OP_EQJ2000_TO_ECB1950: case GAL_ARITHMETIC_OP_EQJ2000_TO_ECJ2000: case GAL_ARITHMETIC_OP_EQJ2000_TO_GALACTIC: case GAL_ARITHMETIC_OP_EQJ2000_TO_SUPERGALACTIC: case GAL_ARITHMETIC_OP_ECB1950_TO_EQB1950: case GAL_ARITHMETIC_OP_ECB1950_TO_EQJ2000: case GAL_ARITHMETIC_OP_ECB1950_TO_ECJ2000: case GAL_ARITHMETIC_OP_ECB1950_TO_GALACTIC: case GAL_ARITHMETIC_OP_ECB1950_TO_SUPERGALACTIC: case GAL_ARITHMETIC_OP_ECJ2000_TO_EQB1950: case GAL_ARITHMETIC_OP_ECJ2000_TO_EQJ2000: case GAL_ARITHMETIC_OP_ECJ2000_TO_ECB1950: case GAL_ARITHMETIC_OP_ECJ2000_TO_GALACTIC: case GAL_ARITHMETIC_OP_ECJ2000_TO_SUPERGALACTIC: case GAL_ARITHMETIC_OP_GALACTIC_TO_EQB1950: case GAL_ARITHMETIC_OP_GALACTIC_TO_EQJ2000: case GAL_ARITHMETIC_OP_GALACTIC_TO_ECB1950: case GAL_ARITHMETIC_OP_GALACTIC_TO_ECJ2000: case GAL_ARITHMETIC_OP_GALACTIC_TO_SUPERGALACTIC: case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQB1950: case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQJ2000: case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECB1950: case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECJ2000: case GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_GALACTIC: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); out=arithmetic_unit_binary(operator, flags, d1, d2); break; /* Binary function operators. */ case GAL_ARITHMETIC_OP_POW: case GAL_ARITHMETIC_OP_ATAN2: case GAL_ARITHMETIC_OP_MAG_TO_SB: case GAL_ARITHMETIC_OP_SB_TO_MAG: case GAL_ARITHMETIC_OP_JY_TO_COUNTS: case GAL_ARITHMETIC_OP_COUNTS_TO_JY: case GAL_ARITHMETIC_OP_COUNTS_TO_MAG: case GAL_ARITHMETIC_OP_MAG_TO_COUNTS: case GAL_ARITHMETIC_OP_NANOMAGGY_TO_COUNTS: case GAL_ARITHMETIC_OP_COUNTS_TO_NANOMAGGY: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); out=arithmetic_function_binary_flt(operator, flags, d1, d2); break; /* More complex operators. */ case GAL_ARITHMETIC_OP_COUNTS_TO_SB: case GAL_ARITHMETIC_OP_SB_TO_COUNTS: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); d3 = va_arg(va, gal_data_t *); out=arithmetic_counts_to_from_sb(operator, flags, d1, d2, d3); break; /* Statistical operators that return one value. */ case GAL_ARITHMETIC_OP_MINVAL: case GAL_ARITHMETIC_OP_MAXVAL: case GAL_ARITHMETIC_OP_NUMBERVAL: case GAL_ARITHMETIC_OP_SUMVAL: case GAL_ARITHMETIC_OP_MEANVAL: case GAL_ARITHMETIC_OP_STDVAL: case GAL_ARITHMETIC_OP_MEDIANVAL: d1 = va_arg(va, gal_data_t *); out=arithmetic_from_statistics(operator, flags, d1); break; /* Return 1D array (only values). */ case GAL_ARITHMETIC_OP_UNIQUE: case GAL_ARITHMETIC_OP_NOBLANK: d1 = va_arg(va, gal_data_t *); out=arithmetic_to_oned(operator, flags, d1); break; /* Absolute operator. */ case GAL_ARITHMETIC_OP_ABS: d1 = va_arg(va, gal_data_t *); out=arithmetic_abs(flags, d1); break; /* Multi-operand operators */ case GAL_ARITHMETIC_OP_MIN: case GAL_ARITHMETIC_OP_MAX: case GAL_ARITHMETIC_OP_SUM: case GAL_ARITHMETIC_OP_STD: case GAL_ARITHMETIC_OP_MAD: case GAL_ARITHMETIC_OP_MEAN: case GAL_ARITHMETIC_OP_NUMBER: case GAL_ARITHMETIC_OP_MEDIAN: case GAL_ARITHMETIC_OP_QUANTILE: case GAL_ARITHMETIC_OP_SIGCLIP_MAD: case GAL_ARITHMETIC_OP_MADCLIP_MAD: case GAL_ARITHMETIC_OP_SIGCLIP_STD: case GAL_ARITHMETIC_OP_MADCLIP_STD: case GAL_ARITHMETIC_OP_SIGCLIP_MEAN: case GAL_ARITHMETIC_OP_MADCLIP_MEAN: case GAL_ARITHMETIC_OP_SIGCLIP_MEDIAN: case GAL_ARITHMETIC_OP_MADCLIP_MEDIAN: case GAL_ARITHMETIC_OP_SIGCLIP_NUMBER: case GAL_ARITHMETIC_OP_MADCLIP_NUMBER: case GAL_ARITHMETIC_OP_MADCLIP_FILL_MAD: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MAD: case GAL_ARITHMETIC_OP_MADCLIP_FILL_STD: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_STD: case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEAN: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEAN: case GAL_ARITHMETIC_OP_MADCLIP_FILL_MEDIAN: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_MEDIAN: case GAL_ARITHMETIC_OP_MADCLIP_FILL_NUMBER: case GAL_ARITHMETIC_OP_SIGCLIP_FILL_NUMBER: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); out=arithmetic_multioperand(operator, flags, d1, d2, numthreads); break; /* Binary operators that only work on integer types. */ case GAL_ARITHMETIC_OP_BITAND: case GAL_ARITHMETIC_OP_BITOR: case GAL_ARITHMETIC_OP_BITXOR: case GAL_ARITHMETIC_OP_BITLSH: case GAL_ARITHMETIC_OP_BITRSH: case GAL_ARITHMETIC_OP_MODULO: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); out=arithmetic_binary(operator, flags, d1, d2); break; case GAL_ARITHMETIC_OP_BITNOT: d1 = va_arg(va, gal_data_t *); out=arithmetic_bitwise_not(flags, d1); break; /* Random steps. */ case GAL_ARITHMETIC_OP_MKNOISE_SIGMA: case GAL_ARITHMETIC_OP_MKNOISE_POISSON: case GAL_ARITHMETIC_OP_MKNOISE_UNIFORM: case GAL_ARITHMETIC_OP_RANDOM_FROM_HIST: case GAL_ARITHMETIC_OP_RANDOM_FROM_HIST_RAW: case GAL_ARITHMETIC_OP_MKNOISE_SIGMA_FROM_MEAN: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); if(operator==GAL_ARITHMETIC_OP_RANDOM_FROM_HIST || operator==GAL_ARITHMETIC_OP_RANDOM_FROM_HIST_RAW) { d3 = va_arg(va, gal_data_t *); out=arithmetic_random_from_hist(operator, flags, d1, d2, d3); } else out=arithmetic_mknoise(operator, flags, d1, d2); break; /* Dimensionality changing operators. */ case GAL_ARITHMETIC_OP_TO1D: case GAL_ARITHMETIC_OP_TRIM: d1 = va_arg(va, gal_data_t *); out = ( operator==GAL_ARITHMETIC_OP_TO1D ? arithmetic_to_1d(flags, d1) : gal_blank_trim(d1, flags & GAL_ARITHMETIC_FLAG_FREE) ); break; case GAL_ARITHMETIC_OP_STITCH: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); out=arithmetic_stitch(flags, d1, d2); break; /* Conversion operators. */ case GAL_ARITHMETIC_OP_TO_UINT8: case GAL_ARITHMETIC_OP_TO_INT8: case GAL_ARITHMETIC_OP_TO_UINT16: case GAL_ARITHMETIC_OP_TO_INT16: case GAL_ARITHMETIC_OP_TO_UINT32: case GAL_ARITHMETIC_OP_TO_INT32: case GAL_ARITHMETIC_OP_TO_UINT64: case GAL_ARITHMETIC_OP_TO_INT64: case GAL_ARITHMETIC_OP_TO_FLOAT32: case GAL_ARITHMETIC_OP_TO_FLOAT64: d1 = va_arg(va, gal_data_t *); out=arithmetic_change_type(d1, operator, flags); break; /* Constants. */ case GAL_ARITHMETIC_OP_E: case GAL_ARITHMETIC_OP_C: case GAL_ARITHMETIC_OP_G: case GAL_ARITHMETIC_OP_H: case GAL_ARITHMETIC_OP_AU: case GAL_ARITHMETIC_OP_LY: case GAL_ARITHMETIC_OP_PI: case GAL_ARITHMETIC_OP_AVOGADRO: case GAL_ARITHMETIC_OP_FINESTRUCTURE: out=arithmetic_constants_standard(operator); break; /* Calculate the width and height of a box surrounding an ellipse with a certain major axis, minor axis and position angle. */ case GAL_ARITHMETIC_OP_BOX_AROUND_ELLIPSE: case GAL_ARITHMETIC_OP_BOX_VERTICES_ON_SPHERE: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); d3 = va_arg(va, gal_data_t *); if(operator==GAL_ARITHMETIC_OP_BOX_AROUND_ELLIPSE) out=arithmetic_box(d1, d2, d3, NULL, operator, flags); else { d4=va_arg(va, gal_data_t *); out=arithmetic_box(d1, d2, d3, d4, operator, flags); } break; /* Rotate coordinates about a reference. */ case GAL_ARITHMETIC_OP_ROTATE_COORD: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); d3 = va_arg(va, gal_data_t *); d4 = va_arg(va, gal_data_t *); d5 = va_arg(va, gal_data_t *); out=arithmetic_rotate(operator, flags, d1, d2, d3, d4, d5); break; /* Size and position operators. */ case GAL_ARITHMETIC_OP_SIZE: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); out=arithmetic_size(operator, flags, d1, d2); break; case GAL_ARITHMETIC_OP_MAKENEW: d1 = va_arg(va, gal_data_t *); out=arithmetic_makenew(d1); break; case GAL_ARITHMETIC_OP_INDEX: case GAL_ARITHMETIC_OP_COUNTER: case GAL_ARITHMETIC_OP_INDEXONLY: case GAL_ARITHMETIC_OP_COUNTERONLY: d1 = va_arg(va, gal_data_t *); out=arithmetic_index_counter(d1, operator, flags); break; case GAL_ARITHMETIC_OP_SWAP: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); d1->next=d2; d2->next=NULL; out=d1; break; case GAL_ARITHMETIC_OP_CONSTANT: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); out=arithmetic_constant(d1, d2, operator, flags); break; /* Pooling operators. */ case GAL_ARITHMETIC_OP_POOLMAX: case GAL_ARITHMETIC_OP_POOLMIN: case GAL_ARITHMETIC_OP_POOLSUM: case GAL_ARITHMETIC_OP_POOLMEAN: case GAL_ARITHMETIC_OP_POOLMEDIAN: d1 = va_arg(va, gal_data_t *); d2 = va_arg(va, gal_data_t *); d3 = va_arg(va, gal_data_t *); out=arithmetic_pool(d1, d2, d3, operator, numthreads, flags); break; /* When the operator is not recognized. */ default: error(EXIT_FAILURE, 0, "%s: the argument '%d' could not be " "interpretted as an operator", __func__, operator); } /* End the variable argument structure and return. */ va_end(va); return out; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-and.c������������������������������������������������������������������0000644�0001750�0001750�00000003466�14551337306�012603� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> #include <gnuastro-internal/arithmetic-internal.h> /* 'BINARY_SET_LT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_and(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_INCR_SEP, && ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-bitand.c���������������������������������������������������������������0000644�0001750�0001750�00000004151�14551337306�013272� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> /* 'BINARY_SET_LT_INT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_bitand(gal_data_t *l, gal_data_t *r, gal_data_t *o) { /* A small sanity check. */ if( l->type==GAL_TYPE_FLOAT32 || l->type==GAL_TYPE_FLOAT64 || r->type==GAL_TYPE_FLOAT32 || r->type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the bitand operator can only work on " "integer type operands", __func__); /* Do the operation. */ BINARY_SET_LT_INT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), & ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-bitlsh.c���������������������������������������������������������������0000644�0001750�0001750�00000004152�14551337306�013317� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> /* 'BINARY_SET_LT_INT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_bitlsh(gal_data_t *l, gal_data_t *r, gal_data_t *o) { /* A small sanity check. */ if( l->type==GAL_TYPE_FLOAT32 || l->type==GAL_TYPE_FLOAT64 || r->type==GAL_TYPE_FLOAT32 || r->type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the bitlsh operator can only work on " "integer type operands", __func__); /* Do the operation. */ BINARY_SET_LT_INT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), << ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-bitor.c����������������������������������������������������������������0000644�0001750�0001750�00000004147�14551337306�013155� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> /* 'BINARY_SET_LT_INT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_bitor(gal_data_t *l, gal_data_t *r, gal_data_t *o) { /* A small sanity check. */ if( l->type==GAL_TYPE_FLOAT32 || l->type==GAL_TYPE_FLOAT64 || r->type==GAL_TYPE_FLOAT32 || r->type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the bitor operator can only work on " "integer type operands", __func__); /* Do the operation. */ BINARY_SET_LT_INT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), | ); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-bitrsh.c���������������������������������������������������������������0000644�0001750�0001750�00000004152�14551337306�013325� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> /* 'BINARY_SET_LT_INT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_bitrsh(gal_data_t *l, gal_data_t *r, gal_data_t *o) { /* A small sanity check. */ if( l->type==GAL_TYPE_FLOAT32 || l->type==GAL_TYPE_FLOAT64 || r->type==GAL_TYPE_FLOAT32 || r->type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the bitrsh operator can only work on " "integer type operands", __func__); /* Do the operation. */ BINARY_SET_LT_INT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), >> ); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-bitxor.c���������������������������������������������������������������0000644�0001750�0001750�00000004151�14551337306�013340� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> /* 'BINARY_SET_LT_INT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_bitxor(gal_data_t *l, gal_data_t *r, gal_data_t *o) { /* A small sanity check. */ if( l->type==GAL_TYPE_FLOAT32 || l->type==GAL_TYPE_FLOAT64 || r->type==GAL_TYPE_FLOAT32 || r->type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the bitxor operator can only work on " "integer type operands", __func__); /* Do the operation. */ BINARY_SET_LT_INT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), ^ ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-divide.c���������������������������������������������������������������0000644�0001750�0001750�00000003624�14551337306�013301� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> #include <gnuastro-internal/arithmetic-internal.h> /* 'BINARY_SET_LT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_divide(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), / ); } ������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-eq.c�������������������������������������������������������������������0000644�0001750�0001750�00000003462�14551337306�012442� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> #include <gnuastro-internal/arithmetic-internal.h> /* 'BINARY_SET_LT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_eq(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, == ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-ge.c�������������������������������������������������������������������0000644�0001750�0001750�00000003462�14551337306�012430� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> #include <gnuastro-internal/arithmetic-internal.h> /* 'BINARY_SET_LT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_ge(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, >= ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-gt.c�������������������������������������������������������������������0000644�0001750�0001750�00000003461�14551337306�012446� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> #include <gnuastro-internal/arithmetic-internal.h> /* 'BINARY_SET_LT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_gt(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, > ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-le.c�������������������������������������������������������������������0000644�0001750�0001750�00000003462�14551337306�012435� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> #include <gnuastro-internal/arithmetic-internal.h> /* 'BINARY_SET_LT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_le(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, <= ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-lt.c�������������������������������������������������������������������0000644�0001750�0001750�00000003461�14551337306�012453� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> #include <gnuastro-internal/arithmetic-internal.h> /* 'BINARY_SET_LT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_lt(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, < ); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-minus.c����������������������������������������������������������������0000644�0001750�0001750�00000003623�14551337306�013167� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> #include <gnuastro-internal/arithmetic-internal.h> /* 'BINARY_SET_LT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_minus(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), - ); } �������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-modulo.c���������������������������������������������������������������0000644�0001750�0001750�00000004151�14551337306�013330� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> /* 'BINARY_SET_LT_INT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_modulo(gal_data_t *l, gal_data_t *r, gal_data_t *o) { /* A small sanity check. */ if( l->type==GAL_TYPE_FLOAT32 || l->type==GAL_TYPE_FLOAT64 || r->type==GAL_TYPE_FLOAT32 || r->type==GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the modulo operator can only work on " "integer type operands", __func__); /* Do the operation. */ BINARY_SET_LT_INT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), % ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-multiply.c�������������������������������������������������������������0000644�0001750�0001750�00000003626�14551337306�013716� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> #include <gnuastro-internal/arithmetic-internal.h> /* 'BINARY_SET_LT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_multiply(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), * ); } ����������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-ne.c�������������������������������������������������������������������0000644�0001750�0001750�00000003462�14551337306�012437� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> #include <gnuastro-internal/arithmetic-internal.h> /* 'BINARY_SET_LT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_ne(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_UINT8, != ); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-or.c�������������������������������������������������������������������0000644�0001750�0001750�00000003465�14551337306�012460� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> #include <gnuastro-internal/arithmetic-internal.h> /* 'BINARY_SET_LT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_or(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ARITHMETIC_BINARY_OUT_TYPE_INCR_SEP, || ); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-plus.c�����������������������������������������������������������������0000644�0001750�0001750�00000003622�14551337306�013016� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/blank.h> #include <gnuastro-internal/arithmetic-binary.h> #include <gnuastro-internal/arithmetic-internal.h> /* 'BINARY_SET_LT' is defined in 'arithmetic-binary.h'. As you see there, this is a deep macro (calls other macros) to deal with different types. This allows efficiency in processing (after compilation), but compilation will be very slow. Therefore, for each operator we have defined a separate '.c' file so they are built separately and when built in parallel can be much faster than having them all in a single file. */ void arithmetic_plus(gal_data_t *l, gal_data_t *r, gal_data_t *o) { int checkblank=gal_arithmetic_binary_checkblank(l, r); BINARY_SET_LT( ( o->type==l->type ? ARITHMETIC_BINARY_OUT_TYPE_LEFT : ARITHMETIC_BINARY_OUT_TYPE_RIGHT ), + ); } ��������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/arithmetic-set.c������������������������������������������������������������������0000644�0001750�0001750�00000014066�14551337306�012632� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Arithmetic operations on data structures. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2021-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/list.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/arithmetic-set.h> /* Remove a name from the list of names and return the dataset it points to. */ static gal_data_t * arithmetic_set_remove_name(struct gal_arithmetic_set_params *p, char *name) { gal_data_t *tmp, *removed=NULL, *prev=NULL; /* Go over all the given names. */ for(tmp=p->named;tmp!=NULL;tmp=tmp->next) { if( !strcmp(tmp->name, name) ) { removed=tmp; if(prev) prev->next = tmp->next; else p->named = tmp->next; } /* Set this node as the 'prev' pointer. */ prev=tmp; } /* A small sanity check. */ if(removed==NULL) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. 'removed' must not be NULL at this point", __func__, PACKAGE_BUGREPORT); /* Nothing in the list points to it now. So we can safely modify and return it. */ free(removed->name); removed->next=NULL; removed->name=NULL; return removed; } /* Pop a dataset and keep it in the 'named' list for later use. */ void gal_arithmetic_set_name(struct gal_arithmetic_set_params *p, char *token) { gal_data_t *tmp, *tofree; char *varname=&token[ GAL_ARITHMETIC_SET_PREFIX_LENGTH ]; /* If a dataset with this name already exists, it will be removed/deleted so we can use the name for the newly designated dataset. */ for(tmp=p->named; tmp!=NULL; tmp=tmp->next) if( !strcmp(varname, tmp->name) ) { tofree=arithmetic_set_remove_name(p, varname); gal_data_free(tofree); /* IMPORTANT: we MUST break here! 'tmp' does't point to the right place any more. We can define a 'prev' node and modify it on every attempt, but since there is only one dataset with a given name, that is redundant and will just make the program slow. */ break; } /* Pop the top operand, then add it to the list of named datasets, but only if it is used in later tokens. If it isn't, free the popped dataset. The latter case (to define a name, but not use it), is obviously a redundant operation, but that is upto the user and may happen in scripts where the operands and operators list is automatically generated. We should just have everything in place, so no crashes occur or no extra memory is consumed. */ if( p->used_later(p, varname) ) { /* Add the top popped operand to the list of names. */ gal_list_data_add(&p->named, p->pop(p)); /* Write the requested name into this dataset. But note that 'name' MUST be already empty. So to be safe, we'll do a sanity check. */ if(p->named->name) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The 'name' element should be NULL at " "this point, but it isn't", __func__, PACKAGE_BUGREPORT); if(p->named->unit) { free(p->named->unit); p->named->unit=NULL; } if(p->named->comment) { free(p->named->comment); p->named->comment=NULL; } gal_checkset_allocate_copy(varname, &p->named->name); } else { /* Pop the top operand, then free it: for example the user has ran 'set-i', but forgot to actually use it (happens a lot due to human error!). */ tmp=p->pop(p); gal_data_free(tmp); } } /* See if a given token is the name of a variable. */ int gal_arithmetic_set_is_name(gal_data_t *named, char *token) { gal_data_t *tmp; /* Make sure the variable name hasn't been set before. */ for(tmp=named; tmp!=NULL; tmp=tmp->next) if( !strcmp(token, tmp->name) ) return 1; /* If control reaches here, then there was no match*/ return 0; } /* Return a copy of the named dataset. */ gal_data_t * gal_arithmetic_set_copy_named(struct gal_arithmetic_set_params *p, char *name) { gal_data_t *out=NULL, *tmp; /* Find the proper named element to use. */ for(tmp=p->named;tmp!=NULL;tmp=tmp->next) { if( !strcmp(tmp->name, name) ) { /* If the named operand is used later, then copy it into the output. */ if( p->used_later(p, name) ) { out=gal_data_copy(tmp); out->next=NULL; if(out->name) { free(out->name); out->name=NULL; } if(out->unit) { free(out->unit); out->unit=NULL; } if(out->comment) { free(out->comment); out->comment=NULL; } } /* The named operand is not used any more. Remove it from the list of named datasets and continue. */ else out=arithmetic_set_remove_name(p, name); } } /* A small sanity check. */ if(out==NULL) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to fix the " "problem. The requested name '%s' couldn't be found in the list", __func__, PACKAGE_BUGREPORT, name); /* Return. */ return out; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/array.c���������������������������������������������������������������������������0000644�0001750�0001750�00000014414�14551337306�011023� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* array -- Functions for I/O on arrays (images or cubes) This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/txt.h> #include <gnuastro/fits.h> #include <gnuastro/jpeg.h> #include <gnuastro/tiff.h> #include <gnuastro/array.h> /*********************************************************************/ /***************** High-level functions ****************/ /*********************************************************************/ int gal_array_name_recognized(char *name) { if( gal_array_name_recognized_multiext(name) ) return 1; else if ( gal_jpeg_name_is_jpeg(name) ) return 1; else return 0; /* Control should not get to here, but just to avoid compiler warnings, we'll return a NULL. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to solve the " "problem. Control must not reach the end of this function", __func__, PACKAGE_BUGREPORT); return 0; } int gal_array_name_recognized_multiext(char *name) { if( gal_fits_name_is_fits(name) ) return 1; else if ( gal_tiff_name_is_tiff(name) ) return 1; else return 0; /* Control should not get to here, but just to avoid compiler warnings, we'll return a NULL. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to solve the " "problem. Control must not reach the end of this function", __func__, PACKAGE_BUGREPORT); return 0; } int gal_array_file_recognized(char *name) { if( gal_fits_file_recognized(name) ) return 1; else if ( gal_jpeg_name_is_jpeg(name) ) return 1; else if ( gal_tiff_name_is_tiff(name) ) return 1; else return 0; } /* Read (all the possibly existing) color channels within each extension/dir of the given file. */ gal_data_t * gal_array_read(char *filename, char *extension, gal_list_str_t *lines, size_t minmapsize, int quietmmap, char *hdu_option_name) { size_t ext; /* FITS */ if( gal_fits_file_recognized(filename) ) return gal_fits_img_read(filename, extension, minmapsize, quietmmap, hdu_option_name); /* TIFF */ else if ( gal_tiff_name_is_tiff(filename) ) { ext=gal_tiff_dir_string_read(extension); return gal_tiff_read(filename, ext, minmapsize, quietmmap); } /* JPEG */ else if ( gal_jpeg_name_is_jpeg(filename) ) return gal_jpeg_read(filename, minmapsize, quietmmap); /* Default: plain text. */ else return gal_txt_image_read(filename, lines, minmapsize, quietmmap); /* Control should not get to here, but just to avoid compiler warnings, we'll return a NULL. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to solve the " "problem. Control must not reach the end of this function", __func__, PACKAGE_BUGREPORT); return NULL; } /* Read the contents of the given file/extension to a specific type. */ gal_data_t * gal_array_read_to_type(char *filename, char *extension, gal_list_str_t *lines, uint8_t type, size_t minmapsize, int quietmmap, char *hdu_option_name) { gal_data_t *out=NULL; gal_data_t *next, *in=gal_array_read(filename, extension, lines, minmapsize, quietmmap, hdu_option_name); /* Go over all the channels. */ while(in) { next=in->next; in->next=NULL; gal_list_data_add(&out, gal_data_copy_to_new_type_free(in, type)); in=next; } /* Invert the reverse list and return. */ gal_list_data_reverse(&out); return out; } /* Read the input array and make sure it is only one channel. */ gal_data_t * gal_array_read_one_ch(char *filename, char *extension, gal_list_str_t *lines, size_t minmapsize, int quietmmap, char *hdu_option_name) { char *fname; gal_data_t *out; out=gal_array_read(filename, extension, lines, minmapsize, quietmmap, hdu_option_name); if(out->next) { if(extension) { if( asprintf(&fname, "%s (hdu %s)", filename, extension)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation error", __func__); } else fname=filename; error(EXIT_FAILURE, 0, "%s: contains %zu channels (it isn't " "monochrome).\n\n" "You can use Gnuastro's ConvertType program to separate the " "(color) channels into separate extensions of a FITS file, with " "a command like this:\n\n" " $ astconvertt %s -h%s --output=sep-ch.fits", fname, gal_list_data_number(out), filename, extension); } return out; } /* Read a single-channel dataset into a specific type. */ gal_data_t * gal_array_read_one_ch_to_type(char *filename, char *extension, gal_list_str_t *lines, uint8_t type, size_t minmapsize, int quietmmap, char *hdu_option_name) { gal_data_t *out=gal_array_read_one_ch(filename, extension, lines, minmapsize, quietmmap, hdu_option_name); return gal_data_copy_to_new_type_free(out, type); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/binary.c��������������������������������������������������������������������������0000644�0001750�0001750�00000103406�14551337306�011171� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* binary -- Work on binary (0 and 1 valued) datasets. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/fits.h> #include <gnuastro/tile.h> #include <gnuastro/blank.h> #include <gnuastro/binary.h> #include <gnuastro/pointer.h> #include <gnuastro/dimension.h> /*********************************************************************/ /***************** Erosion and dilation ********************/ /*********************************************************************/ static void binary_erode_dilate_1d(gal_data_t *input, int dilate0_erode1) { size_t i, nr=input->dsize[0]; uint8_t f, b, *pt, *fpt, *byt=input->array; /* Do a sanity check: */ if(dilate0_erode1!=1 && dilate0_erode1!=0) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "fix this problem. The value to 'dilate0_erode1' is %u while it " "should be 0 or 1", __func__, PACKAGE_BUGREPORT, dilate0_erode1); /* Set the foreground and background values. */ if(dilate0_erode1==0) {f=1; b=0;} else {f=0; b=1;} /* Check the two extremes. */ if(byt[0]==b && byt[1]==f ) byt[0]=GAL_BINARY_TMP_VALUE; if(nr>2) if(byt[nr-1]==b && byt[nr-2]==f) byt[nr-1] = GAL_BINARY_TMP_VALUE; /* Go over the full array. */ for(i=1;i<nr;++i) if( byt[i]==b && ( byt[i-1]==f || byt[i+1]==f ) ) byt[i]=GAL_BINARY_TMP_VALUE; /* Set all the changed pixels to the proper values: */ fpt=(pt=byt)+nr; do *pt = *pt==GAL_BINARY_TMP_VALUE ? f : *pt; while(++pt<fpt); } static void binary_erode_dilate_2d_4con(gal_data_t *input, int dilate0_erode1) { uint8_t f, b, *pt, *fpt, *byt=input->array; size_t i, j, ind, nr=input->dsize[0], nc=input->dsize[1]; /* Do a sanity check: */ if(dilate0_erode1!=1 && dilate0_erode1!=0) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "fix this problem. The value to 'dilate0_erode1' is %u while it " "should be 0 or 1", __func__, PACKAGE_BUGREPORT, dilate0_erode1); /* Set the foreground and background values. */ if(dilate0_erode1==0) {f=1; b=0;} else {f=0; b=1;} /* Check the 4 corners: */ if(byt[0]==b && (byt[1]==f || byt[nc]==f) ) byt[0]=GAL_BINARY_TMP_VALUE; if(byt[nc-1]==b && (byt[nc-2]==f || byt[2*nc-1]==f)) byt[nc-1]=GAL_BINARY_TMP_VALUE; if(byt[(nr-1)*nc]==b && (byt[(nr-2)*nc]==f || byt[(nr-1)*nc+1]==f) ) byt[(nr-1)*nc]=GAL_BINARY_TMP_VALUE; if(byt[nr*nc-1]==b && (byt[nr*nc-2]==f || byt[nr*nc-1-nc]==f) ) byt[nr*nc-1]=GAL_BINARY_TMP_VALUE; /* Check the 4 sides: */ for(j=1;j<nc-1;++j) if(byt[j]==b && (byt[j+1]==f || byt[j-1]==f || byt[j+nc]==f) ) byt[j]=GAL_BINARY_TMP_VALUE; for(j=1;j<nc-1;++j) { ind=(nr-1)*nc+j; if(byt[ind]==b && (byt[ind+1]==f || byt[ind-1]==f || byt[ind-nc]==f) ) byt[ind]=GAL_BINARY_TMP_VALUE; } for(i=1;i<nr-1;++i) { ind=i*nc; if(byt[ind]==b && (byt[ind+1]==f || byt[ind+nc]==f || byt[ind-nc]==f) ) byt[ind]=GAL_BINARY_TMP_VALUE; } for(i=1;i<nr-1;++i) { ind=(i+1)*nc-1; if(byt[ind]==b && (byt[ind-1]==f || byt[ind+nc]==f || byt[ind-nc]==f) ) byt[ind]=GAL_BINARY_TMP_VALUE; } /* Check the body: */ for(i=1;i<nr-1;++i) for(j=1;j<nc-1;++j) { ind=i*nc+j; if(byt[ind]==b && (byt[ind-1]==f || byt[ind+1]==f || byt[ind+nc]==f || byt[ind-nc]==f) ) byt[ind]=GAL_BINARY_TMP_VALUE; } /* Set all the changed pixels to the proper values: */ fpt=(pt=byt)+nr*nc; do *pt = *pt==GAL_BINARY_TMP_VALUE ? f : *pt; while(++pt<fpt); } /* 8 connected dilation and erosion. b0_f1==0: Dilate the foreground. b0_f1==1: Erode the foreground. */ static void binary_erode_dilate_2d_8con(gal_data_t *input, unsigned char dilate0_erode1) { uint8_t f, b, *pt, *fpt, *byt=input->array; size_t i, j, ind, nr=input->dsize[0], nc=input->dsize[1]; /* Do a sanity check: */ if(dilate0_erode1!=1 && dilate0_erode1!=0) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can fix " "this problem. The value to dilate0_erode1 is %u while it should " "be 0 or 1", __func__, PACKAGE_BUGREPORT, dilate0_erode1); /* Set the foreground and background values: */ if(dilate0_erode1==0) {f=1; b=0;} else {f=0; b=1;} /* Check the 4 corners: */ if(byt[0]==b && (byt[1]==f || byt[nc]==f || byt[nc+1]==f) ) byt[0]=GAL_BINARY_TMP_VALUE; if(byt[nc-1]==b && (byt[nc-2]==f || byt[2*nc-1]==f || byt[2*nc-2]==f) ) byt[nc-1]=GAL_BINARY_TMP_VALUE; if(byt[(nr-1)*nc]==b && ( byt[(nr-2)*nc]==f || byt[(nr-1)*nc+1]==f || byt[(nr-2)*nc+1]==f) ) byt[(nr-1)*nc]=GAL_BINARY_TMP_VALUE; if(byt[nr*nc-1]==b && ( byt[nr*nc-2]==f || byt[nr*nc-1-nc]==f || byt[nr*nc-2-nc]==f) ) byt[nr*nc-1]=GAL_BINARY_TMP_VALUE; /* Check the 4 sides: */ for(j=1;j<nc-1;++j) if(byt[j]==b && ( byt[j+1]==f || byt[j-1]==f || byt[j+nc]==f || byt[j-1+nc]==f || byt[j+1+nc]==f) ) byt[j]=GAL_BINARY_TMP_VALUE; for(j=1;j<nc-1;++j) { ind=(nr-1)*nc+j; if(byt[ind]==b && ( byt[ind+1]==f || byt[ind-1]==f || byt[ind-nc]==f || byt[ind-1-nc]==f || byt[ind+1-nc]==f) ) byt[ind]=GAL_BINARY_TMP_VALUE; } for(i=1;i<nr-1;++i) { ind=i*nc; if(byt[ind]==b && ( byt[ind+1]==f || byt[ind+nc]==f || byt[ind-nc]==f || byt[ind+1-nc]==f || byt[ind+1+nc]==f) ) byt[ind]=GAL_BINARY_TMP_VALUE; } for(i=1;i<nr-1;++i) { ind=(i+1)*nc-1; if(byt[ind]==b && (byt[ind-1]==f || byt[ind+nc]==f || byt[ind-nc]==f || byt[ind-1-nc]==f || byt[ind-1+nc]==f) ) byt[ind]=GAL_BINARY_TMP_VALUE; } /* Check the body: */ for(i=1;i<nr-1;++i) for(j=1;j<nc-1;++j) { ind=i*nc+j; if(byt[ind]==b && (byt[ind-1]==f || byt[ind+1]==f || byt[ind+nc]==f || byt[ind-nc]==f || byt[ind-1-nc]==f || byt[ind+1+nc]==f || byt[ind-1+nc]==f || byt[ind+1-nc]==f) ) byt[ind]=GAL_BINARY_TMP_VALUE; } /* Set all the changed pixels to the proper values: */ fpt=(pt=byt)+nr*nc; do *pt = *pt==GAL_BINARY_TMP_VALUE ? f : *pt; while(++pt<fpt); } /* This is a general erosion and dilation function. It is less efficient than the more specialized cases above. */ static void binary_erode_dilate_general(gal_data_t *input, unsigned char dilate0_erode1, int connectivity) { uint8_t f, b, *pt, *fpt, *byt=input->array; size_t i, *dinc=gal_dimension_increment(input->ndim, input->dsize); /* Do a sanity check: */ if(dilate0_erode1!=1 && dilate0_erode1!=0) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can fix " "this problem. The value to dilate0_erode1 is %u while it should " "be 0 or 1", __func__, PACKAGE_BUGREPORT, dilate0_erode1); /* Set the foreground and background values: */ if(dilate0_erode1==0) {f=1; b=0;} else {f=0; b=1;} /* Go over the neighbors of each pixel. */ for(i=0;i<input->size;++i) if(byt[i]==b) GAL_DIMENSION_NEIGHBOR_OP(i, input->ndim, input->dsize, connectivity, dinc,{ if(byt[i]!=GAL_BINARY_TMP_VALUE && byt[nind]==f) byt[i]=GAL_BINARY_TMP_VALUE; }); /* Set all the changed pixels to the proper values: */ fpt=(pt=byt)+input->size; do *pt = *pt==GAL_BINARY_TMP_VALUE ? f : *pt; while(++pt<fpt); } /* Erode a binary dataset any number of times. If 'inplace' is given a value of '1', then do the erosion within the already allocated space, otherwise, allocate a new array and save the result into that. This function will only work on the elements with a value of 1 or 0. It will leave all the rest unchanged. Also note that it only works on 'uint8_t' type datasets. So if the input doesn't have that type, it is going to copy it this type and return the newlyallocated dataset. So when the input's type isn't 'uint8_t', 'inplace' is irrelevant. */ static gal_data_t * binary_erode_dilate(gal_data_t *input, size_t num, int connectivity, int inplace, int d0e1) { size_t counter; gal_data_t *binary; size_t *dinc=gal_dimension_increment(input->ndim, input->dsize); /* Currently this only works on blocks. */ if(input->block) error(EXIT_FAILURE, 0, "%s: currently only works on a fully " "allocated block of memory, but the input is a tile (its 'block' " "element is not NULL)", __func__); /* Set the dataset to work on. */ binary = ( (inplace && input->type==GAL_TYPE_UINT8) ? input : gal_data_copy_to_new_type(input, GAL_TYPE_UINT8) ); /* Go over every element and do the erosion. */ switch(binary->ndim) { case 1: binary_erode_dilate_1d(binary, d0e1); break; case 2: for(counter=0;counter<num;++counter) switch(connectivity) { case 1: binary_erode_dilate_2d_4con(binary, d0e1); break; case 2: binary_erode_dilate_2d_8con(binary, d0e1); break; default: error(EXIT_FAILURE, 0, "%s: %d not acceptable for connectivity " "in a 2D dataset", __func__, connectivity); } break; case 3: for(counter=0;counter<num;++counter) binary_erode_dilate_general(binary, d0e1, connectivity); break; default: error(EXIT_FAILURE, 0, "%s: currently doesn't work on %zu " "dimensional datasets", __func__, binary->ndim); } /* Clean up and return. */ free(dinc); return binary; } gal_data_t * gal_binary_erode(gal_data_t *input, size_t num, int connectivity, int inplace) { return binary_erode_dilate(input, num, connectivity, inplace, 1); } gal_data_t * gal_binary_dilate(gal_data_t *input, size_t num, int connectivity, int inplace) { return binary_erode_dilate(input, num, connectivity, inplace, 0); } gal_data_t * gal_binary_open(gal_data_t *input, size_t num, int connectivity, int inplace) { gal_data_t *out; /* First do the necessary number of erosions. */ out=gal_binary_erode(input, num, connectivity, inplace); /* If 'inplace' was called, then 'out' is the same as 'input', if it wasn't, then 'out' is a newly allocated array. In any case, we should dilate in the same allocated space. */ gal_binary_dilate(input, num, connectivity, 1); /* Return the output dataset. */ return out; } /*********************************************************************/ /***************** Neighbors ********************/ /*********************************************************************/ /* This is a general erosion and dilation function. It is less efficient than the more specialized cases above. */ gal_data_t * gal_binary_number_neighbors(gal_data_t *input, int connectivity, int inplace) { gal_data_t *out; uint8_t n, *narr, *byt=input->array; size_t i, *dinc=gal_dimension_increment(input->ndim, input->dsize); /* Currently this only works on blocks. */ if(input->block) error(EXIT_FAILURE, 0, "%s: currently only works on a fully " "allocated block of memory, but the input is a tile (its 'block' " "element is not NULL)", __func__); /* The input must have a uint8 datatype. */ if(input->type!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: input must have an unsigned 8-bit " "datatype but has a type of %s\n", __func__, gal_type_name(input->type, 1)); /* Allocate the output dataset. */ out = ( inplace ? input : gal_data_alloc(NULL, GAL_TYPE_UINT8, input->ndim, input->dsize, input->wcs, 1, input->minmapsize, input->quietmmap, NULL, NULL, NULL) ); narr=out->array; /* Go over the neighbors of each pixel. */ for(i=0;i<input->size;++i) if(byt[i] && byt[i]!=GAL_BLANK_UINT8) { n=0; GAL_DIMENSION_NEIGHBOR_OP(i, input->ndim, input->dsize, connectivity, dinc, { n += byt[nind]>0; }); narr[i]=n; } /* Return the output dataset. */ return out; } /*********************************************************************/ /***************** Connected components ********************/ /*********************************************************************/ /* Find connected components in an intput dataset. */ size_t gal_binary_connected_components(gal_data_t *binary, gal_data_t **out, int connectivity) { int32_t *l; uint8_t *b, *bf; gal_data_t *lab; size_t p, i, curlab=1; gal_list_sizet_t *Q=NULL; size_t *dinc=gal_dimension_increment(binary->ndim, binary->dsize); /* Two small sanity checks. */ if(binary->type!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: the input data set type must be 'uint8'", __func__); if(binary->block) error(EXIT_FAILURE, 0, "%s: currently, the input data structure to " "must not be a tile", __func__); /* Prepare the dataset for the labels. */ if(*out) { /* Use the given dataset. */ lab=*out; /* Make sure the given dataset has the same size as the input. */ if( gal_dimension_is_different(binary, lab) ) error(EXIT_FAILURE, 0, "%s: the 'binary' and 'out' datasets must " "have the same size", __func__); /* Make sure it has a 'int32' type. */ if( lab->type!=GAL_TYPE_INT32 ) error(EXIT_FAILURE, 0, "%s: the 'out' dataset must have 'int32' type" "but the array you have given is '%s' type", __func__, gal_type_name(lab->type, 1)); /* Reset all its values to zero. */ memset(lab->array, 0, lab->size * gal_type_sizeof(lab->type)); } else lab=*out=gal_data_alloc(NULL, GAL_TYPE_INT32, binary->ndim, binary->dsize, binary->wcs, 1, binary->minmapsize, binary->quietmmap, NULL, "labels", NULL); /* Initialize the labels array. If we have blank pixels in the byt array, then give them the blank labeled array. Note that since their value will not be 0, they will also not be labeled. */ l=lab->array; bf=(b=binary->array)+binary->size; /* Library must have no side effect:*/ if( gal_blank_present(binary, 0) ) /* blank flag should not be changed.*/ do *l++ = *b==GAL_BLANK_UINT8 ? GAL_BLANK_INT32 : 0; while(++b<bf); /* Go over all the pixels and do a breadth-first: any pixel that is not labeled is used to label the full object by checking neighbors before going onto the next pixels. */ l=lab->array; b=binary->array; for(i=0;i<binary->size;++i) /* Check if this pixel is already labeled. */ if( b[i] && l[i]==0 ) { /* This is the first pixel of this connected region that we have got to. */ l[i]=curlab; /* Add this pixel to the queue of pixels to work with. */ gal_list_sizet_add(&Q, i); /* While a pixel remains in the queue, continue labelling and searching for neighbors. */ while(Q!=NULL) { /* Pop an element from the queue. */ p=gal_list_sizet_pop(&Q); /* Go over all its neighbors and add them to the list if they haven't already been labeled. */ GAL_DIMENSION_NEIGHBOR_OP(p, binary->ndim, binary->dsize, connectivity, dinc, { if( b[ nind ] && l[ nind ]==0 ) { l[ nind ] = curlab; gal_list_sizet_add(&Q, nind); } } ); } /* This object has been fully labeled, so increment the current label. */ ++curlab; } /* Clean up and return the total number. */ free(dinc); return curlab-1; } /* Put the indexs of connected labels in a list of 'gal_data_t's, each with a one-dimensional array that has the indexs of that connected component.*/ #define BINARY_CONINDEX_VAL 2 gal_data_t * gal_binary_connected_indexs(gal_data_t *binary, int connectivity) { uint8_t *b, *bf; gal_data_t *lines=NULL; size_t p, i, onelabnum, *onelabarr; gal_list_sizet_t *Q=NULL, *onelab=NULL; size_t *dinc=gal_dimension_increment(binary->ndim, binary->dsize); /* Small sanity checks. */ if(binary->type!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: the input data set type must be 'uint8'", __func__); if(binary->block) error(EXIT_FAILURE, 0, "%s: currently, the input data structure to " "must not be a tile", __func__); /* Go over all the pixels and do a breadth-first search. */ b=binary->array; for(i=0;i<binary->size;++i) /* A pixel that has already been recorded is given a value of 'BINARY_CONINDEX_VAL'. */ if( b[i]==1 ) { /* Add this pixel to the queue of pixels to work with. */ b[i]=BINARY_CONINDEX_VAL; gal_list_sizet_add(&Q, i); gal_list_sizet_add(&onelab, i); /* While a pixel remains in the queue, continue labelling and searching for neighbors. */ while(Q!=NULL) { /* Pop an element from the queue. */ p=gal_list_sizet_pop(&Q); /* Go over all its neighbors and add them to the list if they haven't already been labeled. */ GAL_DIMENSION_NEIGHBOR_OP(p, binary->ndim, binary->dsize, connectivity, dinc, { if( b[nind]==1 ) { b[nind]=BINARY_CONINDEX_VAL; gal_list_sizet_add(&Q, nind); gal_list_sizet_add(&onelab, nind); } } ); } /* Parsing has finished, put all the indexs into an array. */ onelabarr=gal_list_sizet_to_array(onelab, 1, &onelabnum); gal_list_data_add_alloc(&lines, onelabarr, GAL_TYPE_SIZE_T, 1, &onelabnum, NULL, 0, -1, 1, NULL, NULL, NULL); /* Clean up. */ gal_list_sizet_free(onelab); onelab=NULL; } /* Reverse the order. */ gal_list_data_reverse(&lines); /* For a check { gal_data_t *test=lines->next; size_t *b, *bf; bf=(b=test->array)+test->size; do printf("%zu\n", *b++); while(b<bf); exit(0); } */ /* Set all the '2' values back to '1'. */ bf=(b=binary->array)+binary->size; do if(*b==BINARY_CONINDEX_VAL) *b=1; while(++b<bf); /* Clean up and return the total number. */ free(dinc); return lines; } /* Given an adjacency matrix (which should be binary), find the number of connected objects and return an array of new labels for each old label. */ gal_data_t * gal_binary_connected_adjacency_matrix(gal_data_t *adjacency, size_t *numconnected) { gal_data_t *newlabs_d; gal_list_sizet_t *Q=NULL; int32_t *newlabs, curlab=1; uint8_t *adj=adjacency->array; size_t i, j, p, num=adjacency->dsize[0]; /* Some small sanity checks. */ if(adjacency->type != GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: input must have type 'uint8'. However, the " "input dataset has type of '%s'", __func__, gal_type_name(adjacency->type, 1)); if(adjacency->ndim != 2) error(EXIT_FAILURE, 0, "%s: input must be 2-dimensional (a matrix)." "However, the input dataset has %zu dimensions", __func__, adjacency->ndim); if(adjacency->dsize[0] != adjacency->dsize[1]) error(EXIT_FAILURE, 0, "%s: input must be square (same length in both " "dimensions). However, the input dataset has a size of %zu x %zu", __func__, adjacency->dsize[0], adjacency->dsize[1]); /* Allocate (and clear) the output datastructure. */ newlabs_d=gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &num, NULL, 1, adjacency->minmapsize, adjacency->quietmmap, NULL, NULL, NULL); newlabs=newlabs_d->array; /* Go over the input matrix and apply the same principle as we used to identify connected components in an image: through a queue, find those elements that are connected. */ for(i=1;i<num;++i) if(newlabs[i]==0) { /* Add this old label to the list that must be corrected. */ gal_list_sizet_add(&Q, i); /* Continue while the list has elements. */ while(Q!=NULL) { /* Pop the top old-label from the list. */ p=gal_list_sizet_pop(&Q); /* If it has already been labeled then ignore it. */ if( newlabs[p]!=curlab ) { /* Give it the new label. */ newlabs[p]=curlab; /* Go over the adjacency matrix row for this touching object and see if there are any not-yet-labeled objects that are touching it. */ for(j=1;j<num;++j) if( adj[ p*num+j ] && newlabs[j]==0 ) gal_list_sizet_add(&Q, j); } } /* Increment the current label. */ ++curlab; } /* For a check. printf("=== Old labels --> new labels ===\n"); for(i=1;i<num;++i) printf("%zu: %u\n", i, newlabs[i]); */ /* Return the output. */ *numconnected = curlab-1; return newlabs_d; } /* List-based adjacency matrix: when the number of points to find adjacent elements is large, the array-based adjacency solution of 'gal_binary_connected_adjacency_matrix' will consume far too much memory (since it is a square). In those cases, we need to work based on lists. The input is an array of 'size_t' list pointers. Each one points to the labels that are touching it. indexs b d ^ ^ indexs a b c a ^ ^ ^ ^ listarr: | * | * | * | * | */ gal_data_t * gal_binary_connected_adjacency_list(gal_list_sizet_t **listarr, size_t number, size_t minmapsize, int quietmmap, size_t *numconnected) { size_t i, p; gal_list_sizet_t *tmp; gal_data_t *newlabs_d; gal_list_sizet_t *Q=NULL; int32_t *newlabs, curlab=1; /* Allocate (and clear) the output datastructure. */ newlabs_d=gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &number, NULL, 1, minmapsize, quietmmap, NULL, NULL, NULL); newlabs=newlabs_d->array; /* Go over the input matrix and apply the same principle as we used to identify connected components in an image: through a queue, find those elements that are connected. */ for(i=1;i<number;++i) if(newlabs[i]==0) { /* Add this old label to the list that must be corrected. */ gal_list_sizet_add(&Q, i); /* Continue while the list has elements. */ while(Q!=NULL) { /* Pop the top old-label from the list. */ p=gal_list_sizet_pop(&Q); /* If it has already been labeled then ignore it. */ if( newlabs[p]!=curlab ) { /* Give it the new label. */ newlabs[p]=curlab; /* Go over the adjacency list for this touching object and see if there are any not-yet-labeled objects that are touching it. */ for(tmp=listarr[p]; tmp!=NULL; tmp=tmp->next) if( newlabs[tmp->v]==0 ) gal_list_sizet_add(&Q, tmp->v); } } /* Increment the current label. */ ++curlab; } /* For a check. printf("=== Old labels --> new labels ===\n"); for(i=1;i<number;++i) printf("%zu: %u\n", i, newlabs[i]); */ /* Return the output. */ *numconnected = curlab-1; return newlabs_d; } /*********************************************************************/ /***************** Fill holes ********************/ /*********************************************************************/ /* Make the array that is the inverse of the input byt of fill holes. The inverse array will also be 4 pixels larger in both dimensions. This is because we might also want to fill those holes that are touching the side of the image. One pixel for a pixel that is one pixel away from the image border. Another pixel for those objects that are touching the image border. */ static gal_data_t * binary_make_padded_inverse(gal_data_t *input, gal_data_t **outtile) { uint8_t *in; size_t i, startind; gal_data_t *inv, *tile; size_t *startcoord=gal_pointer_allocate(GAL_TYPE_SIZE_T, input->ndim, 0, __func__, "startcoord"); size_t *dsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, input->ndim, 0, __func__, "dsize"); /* Set the size of the padded inverse image and the coordinates of the start. We want the inverse to be padded on the edges of each dimension by 2 pixels, so each dimension should be padded by 4 pixels. */ for(i=0;i<input->ndim;++i) { startcoord[i]=2; dsize[i]=input->dsize[i]+4; } /* Allocate the inverse dataset and initialize it to 1 (mainly for the edges, the inner region will be set afterwards). PADDING MUST BE INITIALIZED WITH 1: This is done so the connected body of 1 valued pixels (after inversion) gets a label of 1 after labeling the connected components and any hole, will get a value larger than 1. */ inv=gal_data_alloc(NULL, GAL_TYPE_UINT8, input->ndim, dsize, NULL, 0, input->minmapsize, input->quietmmap, "INVERSE", "binary", NULL); memset(inv->array, 1, inv->size); /* Define a tile to fill the central regions of the inverse. */ startind=gal_dimension_coord_to_index(input->ndim, inv->dsize, startcoord); tile=gal_data_alloc(gal_pointer_increment(inv->array, startind, inv->type), inv->type, input->ndim, input->dsize, NULL, 0, 0, 0, NULL, NULL, NULL); *outtile=tile; tile->block=inv; /* Put the input's flags into the inverted array and the tile. */ inv->flag = tile->flag = input->flag; /* Fill the central regions. */ in=input->array; GAL_TILE_PARSE_OPERATE( tile, NULL, 0, 0, {*i = *in==GAL_BLANK_UINT8 ? *in : !*in; ++in;} ); /* Clean up and return. */ free(dsize); free(startcoord); return inv; } gal_data_t * gal_binary_holes_label(gal_data_t *input, int connectivity, size_t *numholes) { size_t d; int32_t *lab; gal_data_t *inv, *tile, *holelabs=NULL; /* A small sanity check. */ if( input->type != GAL_TYPE_UINT8 ) error(EXIT_FAILURE, 0, "%s: input must have 'uint8' type, but its " "input dataset has '%s' type", __func__, gal_type_name(input->type, 1)); /* Make the inverse image. */ inv=binary_make_padded_inverse(input, &tile); /* Label the holes. Recall that the first label is just the undetected regions, so we should subtract that from the total number.*/ *numholes=gal_binary_connected_components(inv, &holelabs, connectivity); *numholes -= 1; /* Any pixel with a label larger than 1 is a hole in the input image and we should invert the respective pixel. To do it, we'll use the tile that was defined before, just change its block and array.*/ tile->array=gal_tile_block_relative_to_other(tile, holelabs); tile->block=holelabs; /* has to be after correcting 'tile->array'. */ /* The type of the tile is already known (it is 'int32_t') and we have no output/other, so we'll just put 'int' as a place-holder. In this way we can avoid the switch statement of GAL_TILE_PARSE_OPERATE, and directly use the workhorse macro 'GAL_TILE_PO_OISET'. */ lab=(holelabs)->array; GAL_TILE_PO_OISET(int32_t, int, tile, NULL, 0, 0, { *lab++ = ( *i ? ( *i==1 ? 0 /* Originally, was background. */ : *i-1 ) /* Real label: -1 (background has 1). */ : -1 ); /* Originally, was foreground. */ }); /* Clean up */ tile->array=NULL; gal_data_free(inv); gal_data_free(tile); /* Correct the sizes of the hole labels array. We have already filled the from the start, effectively removing the paddings. Therefore, ee will just correct the sizes and we won't bother actually re-allocating the array size in memory. According to the GNU C library's description after 'realloc': "In several allocation implementations, making a block smaller sometimes necessitates copying it, so it can fail if no other space is available.". The extra padding is only 2 pixels wide, thus, the extra space is negligible compared to the actual array. So it isn't worth possibly having to copy the whole array to another location. Later, when we free the space, the kernel knows how much the allocated size is. */ for(d=0;d<input->ndim;++d) holelabs->dsize[d] = input->dsize[d]; holelabs->size=input->size; /* Return the number of holes. */ return holelabs; } /* Fill all the holes in an input unsigned char array. The basic method is this: 1. An inverse image is created: * For every pixel in the input that is 1, the inverse is 0. * The inverse image has two extra pixels on each edge to ensure that all the inv[i]==1 pixels around the image are touching each other and a diagonal object passing through the image does not cause the inv[i]==1 pixels on the edges of the image to get a different label. 2. The 8 connected regions in this inverse image are found. 3. Since we had a 2 pixel padding on the edges of the image, we know for sure that all labeled regions with a label of 1 are actually connected 'holes' in the input image. Any pixel with a label larger than 1, is therefore a bounded hole that is not 8-connected to the rest of the holes. */ void gal_binary_holes_fill(gal_data_t *input, int connectivity, size_t maxsize) { uint8_t *in; uint32_t *i, *fi; size_t numholes, *sizes; gal_data_t *inv, *tile, *holelabs=NULL; /* Small sanity checks. */ if( input->type != GAL_TYPE_UINT8 ) error(EXIT_FAILURE, 0, "%s: input must have 'uint8' type, but its " "input dataset has '%s' type", __func__, gal_type_name(input->type, 1)); if(connectivity<1 || connectivity>input->ndim) error(EXIT_FAILURE, 0, "%s: connectivity value %d is not acceptable. " "It has to be between 1 and the number of input's dimensions " "(%zu)", __func__, connectivity, input->ndim); /* Make the inverse image. */ inv=binary_make_padded_inverse(input, &tile); /* Label the holes */ numholes=gal_binary_connected_components(inv, &holelabs, connectivity); /* Any pixel with a label that is not touching the edges is a hole in the input image and we should invert the respective pixel. To do it, we'll use the tile that was defined before, just change its block and array. */ in=input->array; tile->array=gal_tile_block_relative_to_other(tile, holelabs); tile->block=holelabs; /* has to be after correcting 'tile->array'. */ /* If the user wants to only fill holes to a certain size, then remove those with a larger size. */ if(maxsize<-1) { /* Allocate space to keep the size of each hole: */ sizes=gal_pointer_allocate(GAL_TYPE_SIZE_T, numholes+1, 1, __func__, "sizes"); fi=(i=holelabs->array)+holelabs->size; do ++sizes[*i]; while(++i<fi); /* Set those labels with a larger size to 1 (treat it as background). */ fi=(i=holelabs->array)+holelabs->size; do if(*i!=GAL_BLANK_INT32) *i = sizes[*i]>maxsize ? 1 : *i; while(++i<fi); /* Clean up. */ free(sizes); } /* The type of the tile is already known (it is 'int32_t') and we have no output, so we'll just put 'int' as a place-holder. In this way we can avoid the switch statement of GAL_TILE_PARSE_OPERATE, and directly use the workhorse macro 'GAL_TILE_PO_OISET'. For inputs of any dimensionality, the label=1 is not a hole. For 1D data, the last label is also not a hole (because in 1D the start and end of the array don't touch). */ GAL_TILE_PO_OISET(int32_t, int, tile, NULL, 0, 0, { *in = ( *i==GAL_BLANK_INT32 || *i==1 || (input->ndim==1 && *i==numholes) ) ? *in : 1; ++in; }); /* Clean up and return. */ tile->array=NULL; gal_data_free(inv); gal_data_free(tile); gal_data_free(holelabs); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/blank.c���������������������������������������������������������������������������0000644�0001750�0001750�00000131101�14551337306�010765� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* blank -- Deal with blank values in a datasets This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <inttypes.h> #include <gnuastro/wcs.h> #include <gnuastro/data.h> #include <gnuastro/tile.h> #include <gnuastro/blank.h> #include <gnuastro/pointer.h> #include <gnuastro/statistics.h> #include <gnuastro-internal/checkset.h> /* Write the blank value of the type into an already allocate space. Note that for STRINGS, pointer should actually be 'char **'. */ void gal_blank_write(void *ptr, uint8_t type) { switch(type) { /* Numeric types. */ case GAL_TYPE_UINT8: *(uint8_t *)ptr = GAL_BLANK_UINT8; break; case GAL_TYPE_INT8: *(int8_t *)ptr = GAL_BLANK_INT8; break; case GAL_TYPE_UINT16: *(uint16_t *)ptr = GAL_BLANK_UINT16; break; case GAL_TYPE_INT16: *(int16_t *)ptr = GAL_BLANK_INT16; break; case GAL_TYPE_UINT32: *(uint32_t *)ptr = GAL_BLANK_UINT32; break; case GAL_TYPE_INT32: *(int32_t *)ptr = GAL_BLANK_INT32; break; case GAL_TYPE_UINT64: *(uint64_t *)ptr = GAL_BLANK_UINT64; break; case GAL_TYPE_INT64: *(int64_t *)ptr = GAL_BLANK_INT64; break; case GAL_TYPE_FLOAT32: *(float *)ptr = GAL_BLANK_FLOAT32; break; case GAL_TYPE_FLOAT64: *(double *)ptr = GAL_BLANK_FLOAT64; break; /* String type. */ case GAL_TYPE_STRING: gal_checkset_allocate_copy(GAL_BLANK_STRING, ptr); break; /* Complex types. */ case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: complex types are not yet supported", __func__); /* Unrecognized type. */ default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } } /* Allocate some space for the given type and put the blank value into it. */ void * gal_blank_alloc_write(uint8_t type) { void *out; /* Allocate the space to keep the blank value. */ out=gal_pointer_allocate(type, 1, 0, __func__, "out"); /* Put the blank value in the allcated space. */ gal_blank_write(out, type); /* Return the allocated space. */ return out; } /* Initialize (set all the values in the array) with the blank value of the given type. */ void gal_blank_initialize(gal_data_t *input) { size_t i; char **strarr; /* For strings, we will initialize the full array, for numerical data types we will consider tiles. */ if(input->type==GAL_TYPE_STRING) { strarr=input->array; for(i=0;i<input->size;++i) { if(strarr[i]) free(strarr[i]); gal_checkset_allocate_copy(GAL_BLANK_STRING, &strarr[i]); } } else {GAL_TILE_PARSE_OPERATE(input, NULL, 0, 0, {*i=b;});} } /* Initialize an array to the given type's blank values. */ void gal_blank_initialize_array(void *array, size_t size, uint8_t type) { size_t i, w=gal_type_sizeof(type); void *b=gal_blank_alloc_write(type); /* Set all the elements to blank. */ for(i=0;i<size;++i) memcpy(gal_pointer_increment(array, i, type), b, w); /* Clean up. */ free(b); } /* Print the blank value as a string. For the integer types, we'll use the PRIxNN keywords of 'inttypes.h' (which is imported into Gnuastro from Gnulib, so we don't necessarily rely on the host system having it). */ char * gal_blank_as_string(uint8_t type, int width) { char *blank=NULL, *fmt; /* Print the given value. */ switch(type) { case GAL_TYPE_BIT: error(EXIT_FAILURE, 0, "%s: bit types are not implemented yet", __func__); break; case GAL_TYPE_STRING: if(width) { if( asprintf(&blank, "%*s", width, GAL_BLANK_STRING)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&blank, "%s", GAL_BLANK_STRING)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } break; case GAL_TYPE_UINT8: fmt = width ? "%*"PRIu8 : "%"PRIu8; if(width) { if( asprintf(&blank, fmt, width, (uint8_t)GAL_BLANK_UINT8)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&blank, fmt, (uint8_t)GAL_BLANK_UINT8)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } break; case GAL_TYPE_INT8: fmt = width ? "%*"PRId8 : "%"PRId8; if(width) { if( asprintf(&blank, fmt, width, (int8_t)GAL_BLANK_INT8)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&blank, fmt, (int8_t)GAL_BLANK_INT8)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } break; case GAL_TYPE_UINT16: fmt = width ? "%*"PRIu16 : "%"PRIu16; if(width) { if( asprintf(&blank, fmt, width, (uint16_t)GAL_BLANK_UINT16)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&blank, fmt, (uint16_t)GAL_BLANK_UINT16)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } break; case GAL_TYPE_INT16: fmt = width ? "%*"PRId16 : "%"PRId16; if(width) { if( asprintf(&blank, fmt, width, (int16_t)GAL_BLANK_INT16)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&blank, fmt, (int16_t)GAL_BLANK_INT16)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } break; case GAL_TYPE_UINT32: fmt = width ? "%*"PRIu32 : "%"PRIu32; if(width) { if( asprintf(&blank, fmt, width, (uint32_t)GAL_BLANK_UINT32)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&blank, fmt, (uint32_t)GAL_BLANK_UINT32)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } break; case GAL_TYPE_INT32: fmt = width ? "%*"PRId32 : "%"PRId32; if(width) { if( asprintf(&blank, fmt, width, (int32_t)GAL_BLANK_INT32)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&blank, fmt, (int32_t)GAL_BLANK_INT32)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } break; case GAL_TYPE_UINT64: fmt = width ? "%*"PRIu64 : "%"PRIu64; if(width) { if( asprintf(&blank, fmt, width, (uint64_t)GAL_BLANK_UINT64)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&blank, fmt, (uint64_t)GAL_BLANK_UINT64)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } break; case GAL_TYPE_INT64: fmt = width ? "%*"PRId64 : "%"PRId64; if(width) { if( asprintf(&blank, fmt, width, (int64_t)GAL_BLANK_INT64)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&blank, fmt, (int64_t)GAL_BLANK_INT64)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } break; case GAL_TYPE_FLOAT32: if(width) { if( asprintf(&blank, "%*f", width, (float)GAL_BLANK_FLOAT32)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&blank, "%f", (float)GAL_BLANK_FLOAT32)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } break; case GAL_TYPE_FLOAT64: if(width) { if( asprintf(&blank, "%*f", width, (double)GAL_BLANK_FLOAT64)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&blank, "%f", (double)GAL_BLANK_FLOAT64)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } return blank; } /* Return 1 if the contents of the pointer (with the given type) is blank. */ int gal_blank_is(void *pointer, uint8_t type) { /* A small sanity check. */ if(pointer==NULL) error(EXIT_FAILURE, 0, "%s: input pointer is NULL", __func__); /* Do the checks based on the type. */ switch(type) { /* Numeric types. */ case GAL_TYPE_UINT8: return *(uint8_t *)pointer==GAL_BLANK_UINT8; case GAL_TYPE_INT8: return *(int8_t *)pointer==GAL_BLANK_INT8; case GAL_TYPE_UINT16: return *(uint16_t *)pointer==GAL_BLANK_UINT16; case GAL_TYPE_INT16: return *(int16_t *)pointer==GAL_BLANK_INT16; case GAL_TYPE_UINT32: return *(uint32_t *)pointer==GAL_BLANK_UINT32; case GAL_TYPE_INT32: return *(int32_t *)pointer==GAL_BLANK_INT32; case GAL_TYPE_UINT64: return *(uint64_t *)pointer==GAL_BLANK_UINT64; case GAL_TYPE_INT64: return *(int64_t *)pointer==GAL_BLANK_INT64; case GAL_TYPE_FLOAT32: return isnan( *(float *)(pointer) ); case GAL_TYPE_FLOAT64: return isnan( *(double *)(pointer) ); /* String. */ case GAL_TYPE_STRING: if(!strcmp(pointer,GAL_BLANK_STRING)) return 1; else return 0; /* Complex types. */ case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: complex types are not yet supported", __func__); /* Bit. */ case GAL_TYPE_BIT: error(EXIT_FAILURE, 0, "%s: bit type datasets are not yet supported", __func__); default: error(EXIT_FAILURE, 0, "%s: type value (%d) not recognized", __func__, type); } /* Control should not reach here, so print an error if it does, then return a 0 (just to avoid compiler warnings). */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to address the " "problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); return 0; } /* Return 1 if the dataset has a blank value and zero if it doesn't. Before checking the dataset, this function will look at its flags. If the 'GAL_DATA_FLAG_HASBLANK' or 'GAL_DATA_FLAG_DONT_CHECK_ZERO' bits of 'input->flag' are set to 1, this function will not do any check and will just use the information in the flags. If you want to re-check a dataset which has non-zero flags, then explicitly set the appropriate flag to zero before calling this function. When there are no other flags, you can just set 'input->flags' to zero, otherwise you can use this expression: input->flags &= ~ (GAL_DATA_FLAG_HASBLANK | GAL_DATA_FLAG_USE_ZERO); This function has no side-effects on the dataset: it will not toggle the flags, to avoid repeating parsing of the full dataset multiple times (when it occurs), please toggle the flags your self after the first check. */ #define HAS_BLANK(IT) { \ IT b, *a=input->array, *af=a+input->size, *start; \ gal_blank_write(&b, block->type); \ \ /* If this is a tile, not a full block. */ \ if(input!=block) \ start=gal_tile_start_end_ind_inclusive(input, block, start_end_inc); \ \ /* Go over all the elements. */ \ while( start_end_inc[0] + increment <= start_end_inc[1] ) \ { \ /* Necessary when we are on a tile. */ \ if(input!=block) \ af = ( a = start + increment ) + input->dsize[input->ndim-1]; \ \ /* Check for blank values. */ \ if(b==b) do if(*a==b) { hasblank=1; break; } while(++a<af); \ else do if(*a!=*a) { hasblank=1; break; } while(++a<af); \ \ /* Necessary when we are on a tile. */ \ if(input!=block) \ increment += gal_tile_block_increment(block, input->dsize, \ num_increment++, NULL); \ else break; \ } \ } int gal_blank_present(gal_data_t *input, int updateflag) { int hasblank=0; char **str, **strf; size_t increment=0, num_increment=1; gal_data_t *block=gal_tile_block(input); size_t start_end_inc[2]={0,block->size-1}; /* -1: this is INCLUSIVE. */ /* If there is nothing in the array (its size is zero), then return 0 (no blank is present. */ if(input->size==0) return 0; /* From the user's flags, you can tell if the dataset has already been checked for blank values or not. If it has, then just return the checked result. */ if( input->flag & GAL_DATA_FLAG_BLANK_CH ) return input->flag & GAL_DATA_FLAG_HASBLANK; /* Go over the pixels and check: */ switch(block->type) { /* Numeric types. */ case GAL_TYPE_UINT8: HAS_BLANK( uint8_t ); break; case GAL_TYPE_INT8: HAS_BLANK( int8_t ); break; case GAL_TYPE_UINT16: HAS_BLANK( uint16_t ); break; case GAL_TYPE_INT16: HAS_BLANK( int16_t ); break; case GAL_TYPE_UINT32: HAS_BLANK( uint32_t ); break; case GAL_TYPE_INT32: HAS_BLANK( int32_t ); break; case GAL_TYPE_UINT64: HAS_BLANK( uint64_t ); break; case GAL_TYPE_INT64: HAS_BLANK( int64_t ); break; case GAL_TYPE_FLOAT32: HAS_BLANK( float ); break; case GAL_TYPE_FLOAT64: HAS_BLANK( double ); break; /* String. */ case GAL_TYPE_STRING: if(input!=block) error(EXIT_FAILURE, 0, "%s: tile mode is currently not " "supported for strings", __func__); strf = (str=input->array) + input->size; do if(*str==NULL || !strcmp(*str,GAL_BLANK_STRING)) return 1; while(++str<strf); break; /* Complex types. */ case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: complex types are not yet supported", __func__); /* Bit. */ case GAL_TYPE_BIT: error(EXIT_FAILURE, 0, "%s: bit type datasets are not yet supported", __func__); default: error(EXIT_FAILURE, 0, "%s: type value (%d) not recognized", __func__, block->type); } /* Update the flag if requested. */ if(updateflag) { input->flag |= GAL_DATA_FLAG_BLANK_CH; if(hasblank) input->flag |= GAL_DATA_FLAG_HASBLANK; else input->flag &= ~GAL_DATA_FLAG_HASBLANK; } /* If there was a blank value, then the function would have returned with a value of 1. So if it reaches here, then we can be sure that there was no blank values, hence, return 0. */ return hasblank; } /* Return the number of blank elements in the dataset. */ size_t gal_blank_number(gal_data_t *input, int updateflag) { size_t nblank; char **strarr; gal_data_t *number; size_t i, num_not_blank; if(input) { if( gal_blank_present(input, updateflag) ) { if(input->type==GAL_TYPE_STRING) { nblank=0; strarr=input->array; for(i=0;i<input->size;++i) { if( strarr[i]==NULL || strcmp(strarr[i], GAL_BLANK_STRING)==0 ) ++nblank; } return nblank; } else { number=gal_statistics_number(input); num_not_blank=((size_t *)(number->array))[0]; gal_data_free(number); return input->size - num_not_blank; } } else return 0; } else return GAL_BLANK_SIZE_T; } /* Create a dataset of the the same size as the input, but with an uint8_t type that has a value of 1 for data that are blank and 0 for those that aren't. */ #define FLAG_BLANK(IT) { \ IT b, *a=input->array; \ gal_blank_write(&b, input->type); \ if(b==b) /* Blank value can be checked with the equal. */ \ do {*o = blank1_not0 ? *a==b : *a!=b; ++a;} while(++o<of); \ else /* Blank value will fail with the equal comparison. */ \ do {*o = blank1_not0 ? *a!=*a : *a==*a; ++a;} while(++o<of); \ } static gal_data_t * blank_flag(gal_data_t *input, int blank1_not0) { uint8_t *o, *of; gal_data_t *out; char **str=input->array, **strf=str+input->size; /* The datasets may be empty. In this case, the output should also be empty, but with the standard 'uint8' type of a flag (we can have tables and images with 0 rows or pixels!). */ if(input->size==0 || input->array==NULL) { out=gal_data_alloc_empty(input->ndim, input->minmapsize, input->quietmmap); out->type=GAL_TYPE_UINT8; return out; } /* Do all the checks and allocations if a blank is actually present! */ if( gal_blank_present(input, 0) ) { /* Allocate a non-cleared output array, we are going to parse the input and fill in each element. */ out=gal_data_alloc(NULL, GAL_TYPE_UINT8, input->ndim, input->dsize, input->wcs, 0, input->minmapsize, input->quietmmap, NULL, "bool", NULL); /* Set the pointers for easy looping. */ of=(o=out->array)+input->size; /* Go over the pixels and set the output values. */ switch(input->type) { /* Numeric types. */ case GAL_TYPE_UINT8: FLAG_BLANK( uint8_t ); break; case GAL_TYPE_INT8: FLAG_BLANK( int8_t ); break; case GAL_TYPE_UINT16: FLAG_BLANK( uint16_t ); break; case GAL_TYPE_INT16: FLAG_BLANK( int16_t ); break; case GAL_TYPE_UINT32: FLAG_BLANK( uint32_t ); break; case GAL_TYPE_INT32: FLAG_BLANK( int32_t ); break; case GAL_TYPE_UINT64: FLAG_BLANK( uint64_t ); break; case GAL_TYPE_INT64: FLAG_BLANK( int64_t ); break; case GAL_TYPE_FLOAT32: FLAG_BLANK( float ); break; case GAL_TYPE_FLOAT64: FLAG_BLANK( double ); break; /* String. */ case GAL_TYPE_STRING: if(blank1_not0) do *o++ = strcmp(*str,GAL_BLANK_STRING)==0; while(++str<strf); else do *o++ = strcmp(*str,GAL_BLANK_STRING)!=0; while(++str<strf); break; /* Currently unsupported types. */ case GAL_TYPE_BIT: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: %s type not yet supported", __func__, gal_type_name(input->type, 1)); /* Bad input. */ default: error(EXIT_FAILURE, 0, "%s: type value (%d) not recognized", __func__, input->type); } } /* Input had no blanks */ else { /* Allocate the output data structure (if the caller wants to flag blanks, then we will "clear" the output also). */ out=gal_data_alloc(NULL, GAL_TYPE_UINT8, input->ndim, input->dsize, input->wcs, blank1_not0 ? 1 : 0, input->minmapsize, input->quietmmap, NULL, "bool", NULL); /* If the caller wants to flag the non-blank elements, we should now set all the output values to 1 (the input had no blanks!). */ if(blank1_not0==0) { of=(o=out->array)+out->size; do *o++=1; while(o<of); } } /* Return */ return out; } gal_data_t * gal_blank_flag(gal_data_t *input) { return blank_flag(input, 1); } gal_data_t * gal_blank_flag_not(gal_data_t *input) { return blank_flag(input, 0); } #define NMM_CRDS_CHECK \ gal_dimension_index_to_coord(a-as, ndim, input->dsize, c); \ for(i=0;i<ndim;++i) \ { if(c[i]<min[i]) min[i]=c[i]; if(c[i]>max[i]) max[i]=c[i]; } #define NMM_CRDS(IT) { \ IT b, *a=input->array, *as=a, *af=a+input->size; \ gal_blank_write(&b, input->type); \ if(b==b) /* Blank value can be checked with the equal. */ \ do { if(*a!=b) {NMM_CRDS_CHECK} } while(++a<af); \ else /* Blank value will fail with the equal comparison. */ \ do { if(*a==*a) {NMM_CRDS_CHECK} } while(++a<af); \ } size_t * gal_blank_not_minmax_coords(gal_data_t *input) { char **strarr=input->array; size_t c[3], i, ndim, *out, *min, *max; /* Sanity check. */ if(input==NULL) error(EXIT_FAILURE, 0, "%s: input is NULL", __func__); /* Allocate the output and min/max datasets; and initialize the 'min' dataset (note that the 'max' dataset has already been "clear"ed to zero; which is what we want). */ ndim=input->ndim; min=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "min"); max=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 1, __func__, "max"); out=gal_pointer_allocate(GAL_TYPE_SIZE_T, 2*ndim, 0, __func__, "out"); for(i=0;i<ndim;++i) min[i]=GAL_BLANK_SIZE_T; /* The input dataset may be empty. In this case, the output should also be empty, but with the standard 'uint8' type of a flag (we can have tables and images with 0 rows or pixels!). */ if(input->size==0 || input->array==NULL) for(i=0;i<2*ndim;++i) out[i]=GAL_BLANK_SIZE_T; /* Do all the checks and allocations if a blank is actually present! */ if( gal_blank_present(input, 0) ) { /* Go over the pixels and set the output values. */ switch(input->type) { /* Numeric types */ case GAL_TYPE_UINT8: NMM_CRDS( uint8_t ); break; case GAL_TYPE_INT8: NMM_CRDS( int8_t ); break; case GAL_TYPE_UINT16: NMM_CRDS( uint16_t ); break; case GAL_TYPE_INT16: NMM_CRDS( int16_t ); break; case GAL_TYPE_UINT32: NMM_CRDS( uint32_t ); break; case GAL_TYPE_INT32: NMM_CRDS( int32_t ); break; case GAL_TYPE_UINT64: NMM_CRDS( uint64_t ); break; case GAL_TYPE_INT64: NMM_CRDS( int64_t ); break; case GAL_TYPE_FLOAT32: NMM_CRDS( float ); break; case GAL_TYPE_FLOAT64: NMM_CRDS( double ); break; /* String. */ case GAL_TYPE_STRING: for(i=0;i<input->size;++i) if(strcmp(strarr[i],GAL_BLANK_STRING)) { gal_dimension_index_to_coord(i, ndim, input->dsize, c); for(i=0;i<ndim;++i) { if(c[i]<min[i]) min[i]=c[i]; if(c[i]>max[i]) max[i]=c[i]; } } break; /* Currently unsupported types. */ case GAL_TYPE_BIT: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: %s type not yet supported", __func__, gal_type_name(input->type, 1)); /* Bad input. */ default: error(EXIT_FAILURE, 0, "%s: type value (%d) not recognized", __func__, input->type); } /* Write the values into the output. For the maximum ranges, we are adding by one so the callers can simply calculate the number of pixels by subtracting the two (since counting starts from 0). */ for(i=0;i<ndim;++i) { out[i*2]=min[i]; out[i*2+1]=max[i]+1; } } /* Input had no blanks, just fill the output using the size of the input. */ else for(i=0;i<ndim;++i) { out[i*2]=0; out[i*2+1]=input->dsize[i]; } /* For a check: for(i=0;i<ndim;++i) printf("%s:%zu: %zu:%zu\n", __func__, i, out[i*2], out[i*2+1]); printf("%s: GOOD\n", __func__); exit(0); */ /* Clean up and return. */ free(min); free(max); return out; } /* Trim all NaN-valued rows (in 1D) or columns/rows (in 2D). If 'inplace' is non-zero, no new array will be allocated. */ gal_data_t * gal_blank_trim(gal_data_t *input, int inplace) { int coversall=1; void *to, *from; gal_data_t *out=NULL; struct wcsprm *owcs=NULL; size_t *odsize, *idsize, *mmc; size_t i, j, cbytes, osize, opsize, ipsize, ndim; /* Sanity checks. */ if(input==NULL) error(EXIT_FAILURE, 0, "%s: input is NULL", __func__); ndim=input->ndim; if(ndim>3) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. This function is currently not implemented " "for %zu-dimensional inputs", __func__, PACKAGE_BUGREPORT, ndim); /* Find the smallest/largest coordinates containing the */ mmc=gal_blank_not_minmax_coords(input); /* In case the extrema cover the full image, then just return the input (no trimming necessary!). We first assume that that 'coversall' is true (1). We then parse over the dimensions and check the minimum and maximum and multiply the result of the check (0 or 1) to 'coversall'. As a result, if a single dimesion doesn't cover the full range, 'coversall' will be zero.*/ for(i=0;i<ndim;++i) coversall *= mmc[i*2]==0 && mmc[i*2+1]==input->dsize[i]; if(coversall) return input; /* Triming is necessary, so prepare the output. If the input can be freed, then we'll just use its already allocated space. Otherwise, we'll allocate a new dataset. */ odsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "odsize"); for(i=0;i<ndim;++i) odsize[i]=mmc[i*2+1]-mmc[i*2]; if(inplace) out=input; else { owcs=gal_wcs_copy(input->wcs); out=gal_data_alloc(NULL, input->type, input->ndim, odsize, owcs, 0, input->minmapsize, input->quietmmap, NULL, NULL, NULL); } /* Copy (along the fastest dimension). */ idsize=input->dsize; cbytes = odsize[ndim-1] * gal_type_sizeof(input->type); switch(ndim) { /* 1D data. */ case 1: to=out->array; from=gal_pointer_increment(input->array, mmc[0], input->type); if(inplace) memmove(to, from, cbytes); /* Overlap is possible. */ else memcpy(to, from, cbytes); /* Overlap not possible. */ break; /* 2D data. */ case 2: for(i=mmc[0]; i<mmc[1]; ++i) { to=gal_pointer_increment(out->array, (i-mmc[0])*odsize[1], out->type); from=gal_pointer_increment(input->array, i*idsize[1]+mmc[2], input->type); if(inplace) memmove(to, from, cbytes); /* Overlap is possible. */ else memcpy(to, from, cbytes); /* Overlap not possible. */ } break; /* 3D data. */ case 3: opsize=odsize[1]*odsize[2]; /* These are "plane"-sizes: number of */ ipsize=idsize[1]*idsize[2]; /* elements to change the slowest dim. */ for(i=mmc[0]; i<mmc[1]; ++i) for(j=mmc[2]; j<mmc[3]; ++j) { to=gal_pointer_increment(out->array, (i-mmc[0])*opsize+(j-mmc[2])*odsize[2], out->type); from=gal_pointer_increment(input->array, i*ipsize+j*idsize[2]+mmc[4], input->type); if(inplace) memmove(to, from, cbytes); /* Overlap is possible. */ else memcpy(to, from, cbytes); /* Overlap not possible. */ } break; /* Other dimensions. */ default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "find and fix it. This function does not support " "%zu-dimensional inputs", __func__, PACKAGE_BUGREPORT, ndim); } /* Correct the dimensionality of the output (only relevant when the output is not "in-place"). */ osize=1; if(inplace) { for(i=0;i<ndim;++i) osize *= (out->dsize[i]=odsize[i]); out->size=osize; } /* Correct the WCS of the output (if it has any!). Recall that in WCSLIB, the coordinates are in FITS order, not C order.*/ if(out->wcs) for(i=0;i<ndim;++i) out->wcs->crpix[ndim-1-i] -= mmc[i*2]; /* Clean up and return the output. */ free(mmc); free(odsize); return out; } /* Write a blank value in the input anywhere that the flag dataset is not zero or not blank. */ #define BLANK_FLAG_APPLY(IT) { \ IT *i=input->array, b; \ gal_blank_write(&b, input->type); \ do {if(*f && *f!=GAL_BLANK_UINT8) *i=b; ++i;} while(++f<ff); \ } void gal_blank_flag_apply(gal_data_t *input, gal_data_t *flag) { size_t j; char **strarr=input->array; uint8_t *f=flag->array, *ff=f+flag->size; /* Sanity check. */ if(flag->type!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: the 'flag' argument has a '%s' type, it " "must have an unsigned 8-bit type", __func__, gal_type_name(flag->type, 1)); if(gal_dimension_is_different(input, flag)) error(EXIT_FAILURE, 0, "%s: the 'flag' argument doesn't have the same " "size as the 'input' argument", __func__); /* Write the blank values. */ switch(input->type) { /* Basic numeric types. */ case GAL_TYPE_UINT8: BLANK_FLAG_APPLY( uint8_t ); break; case GAL_TYPE_INT8: BLANK_FLAG_APPLY( int8_t ); break; case GAL_TYPE_UINT16: BLANK_FLAG_APPLY( uint16_t ); break; case GAL_TYPE_INT16: BLANK_FLAG_APPLY( int16_t ); break; case GAL_TYPE_UINT32: BLANK_FLAG_APPLY( uint32_t ); break; case GAL_TYPE_INT32: BLANK_FLAG_APPLY( int32_t ); break; case GAL_TYPE_UINT64: BLANK_FLAG_APPLY( uint64_t ); break; case GAL_TYPE_INT64: BLANK_FLAG_APPLY( int64_t ); break; case GAL_TYPE_FLOAT32: BLANK_FLAG_APPLY( float ); break; case GAL_TYPE_FLOAT64: BLANK_FLAG_APPLY( double ); break; /* Strings. */ case GAL_TYPE_STRING: for(j=0; j<input->size; ++j) { if(*f && *f!=GAL_BLANK_UINT8) { free(strarr[j]); gal_checkset_allocate_copy(GAL_BLANK_STRING, &strarr[j]); } ++f; } break; /* Currently unsupported types. */ case GAL_TYPE_BIT: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: %s type not yet supported", __func__, gal_type_name(input->type, 1)); /* Bad input. */ default: error(EXIT_FAILURE, 0, "%s: type value (%d) not recognized", __func__, input->type); } /* Update the blank flags. */ gal_blank_present(input, 1); } /* Remove flagged elements from a dataset (which may not necessarily blank), convert it to a 1D dataset and adjust the size properly. In practice this function doesn't 'realloc' the input array, all it does is to shift the blank eleemnts to the end and adjust the size elements of the 'gal_data_t'. */ #define BLANK_FLAG_REMOVE(IT) { \ IT *a=input->array, *af=a+input->size, *o=input->array; \ do { \ if(*f==0) {++num; *o++=*a; } \ ++f; \ } \ while(++a<af); \ } void gal_blank_flag_remove(gal_data_t *input, gal_data_t *flag) { char **strarr; size_t i, num=0; uint8_t *f=flag->array; /* Sanity check. */ if(flag->type!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: the 'flag' argument has a '%s' type, it " "must have an unsigned 8-bit type", __func__, gal_type_name(flag->type, 1)); if(gal_dimension_is_different(input, flag)) error(EXIT_FAILURE, 0, "%s: the 'flag' argument doesn't have the same " "size as the 'input' argument", __func__); /* If there is no elements in the input or the flag (we have already confirmed that they are the same size), then just return (nothing is necessary to do). */ if(flag->size==0 || flag->array==NULL) return; /* Shift all non-blank elements to the start of the array. */ switch(input->type) { case GAL_TYPE_UINT8: BLANK_FLAG_REMOVE( uint8_t ); break; case GAL_TYPE_INT8: BLANK_FLAG_REMOVE( int8_t ); break; case GAL_TYPE_UINT16: BLANK_FLAG_REMOVE( uint16_t ); break; case GAL_TYPE_INT16: BLANK_FLAG_REMOVE( int16_t ); break; case GAL_TYPE_UINT32: BLANK_FLAG_REMOVE( uint32_t ); break; case GAL_TYPE_INT32: BLANK_FLAG_REMOVE( int32_t ); break; case GAL_TYPE_UINT64: BLANK_FLAG_REMOVE( uint64_t ); break; case GAL_TYPE_INT64: BLANK_FLAG_REMOVE( int64_t ); break; case GAL_TYPE_FLOAT32: BLANK_FLAG_REMOVE( float ); break; case GAL_TYPE_FLOAT64: BLANK_FLAG_REMOVE( double ); break; case GAL_TYPE_STRING: strarr=input->array; for(i=0;i<input->size;++i) { if( *f && *f!=GAL_BLANK_UINT8 ) /* Flagged to be removed */ { free(strarr[i]); strarr[i]=NULL; } else strarr[num++]=strarr[i]; /* Keep. */ ++f; } break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } /* Adjust the size elements of the dataset. */ input->ndim=1; input->dsize[0]=input->size=num; } /* Remove flagged elements from a dataset (which may not necessarily blank), convert it to a 1D dataset and adjust the size properly. In practice this function doesn't 'realloc' the input array, all it does is to shift the blank eleemnts to the end and adjust the size elements of the 'gal_data_t'. */ #define BLANK_FLAG_REMOVE_D0(IT) { \ IT *a=input->array, *af=a+input->size, *o=input->array; \ do { \ printf("\n%s: HERE\n", __func__); \ if(*f) a+=nelem; \ else {num++; for(i=0;i<nelem;++i) {*o++=*a; ++a; printf("%zu ", i);} } \ ++f; \ } \ while(a<af); \ } static void blank_flag_remove_dim0(gal_data_t *input, gal_data_t *flag) { size_t i, num=0; uint8_t it=input->type; uint8_t *f=flag->array; size_t nelem = input->ndim==1 ? 1 : input->size/input->dsize[0]; /* Sanity check. */ if(flag->type!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: the 'flag' argument has a '%s' type, it " "must have an unsigned 8-bit type", __func__, gal_type_name(flag->type, 1)); if(input->dsize[0]!=flag->dsize[0]) error(EXIT_FAILURE, 0, "%s: the 'flag' argument doesn't have the same " "size as the 'input' argument", __func__); /* This is a special function! */ if(flag->ndim!=1) error(EXIT_FAILURE, 0, "%s: this function's 'flag' should only " "have a single dimension", __func__); if(input->ndim==flag->ndim) error(EXIT_FAILURE, 0, "%s: this function is only for scenarios " "where 'flag' is single-dimensional and the input is " "multi-dimensional. Please use 'gal_blank_flag_remove' when " "the input and flag have the same number of dimensions", __func__); /* If there is no elements in the input or the flag (we have already confirmed that they are the same size), then just return (nothing is necessary to do). */ if(flag->size==0 || flag->array==NULL) return; /* Move all the non-flagged elements to the start of the array. */ for(i=0;i<flag->size;++i) if(f[i]==0) memmove(gal_pointer_increment(input->array, (num++)*nelem, it), gal_pointer_increment(input->array, i*nelem, it), nelem*gal_type_sizeof(it)); /* Shift all non-blank elements to the start of the array. switch(input->type) { case GAL_TYPE_UINT8: BLANK_FLAG_REMOVE_D0( uint8_t ); break; case GAL_TYPE_INT8: BLANK_FLAG_REMOVE_D0( int8_t ); break; case GAL_TYPE_UINT16: BLANK_FLAG_REMOVE_D0( uint16_t ); break; case GAL_TYPE_INT16: BLANK_FLAG_REMOVE_D0( int16_t ); break; case GAL_TYPE_UINT32: BLANK_FLAG_REMOVE_D0( uint32_t ); break; case GAL_TYPE_INT32: BLANK_FLAG_REMOVE_D0( int32_t ); break; case GAL_TYPE_UINT64: BLANK_FLAG_REMOVE_D0( uint64_t ); break; case GAL_TYPE_INT64: BLANK_FLAG_REMOVE_D0( int64_t ); break; case GAL_TYPE_FLOAT32: BLANK_FLAG_REMOVE_D0( float ); break; case GAL_TYPE_FLOAT64: BLANK_FLAG_REMOVE_D0( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } */ /* Adjust the size elements of the dataset. */ input->size=1; input->dsize[0]=num; for(i=0;i<input->ndim;++i) input->size*=input->dsize[i]; } /* Remove blank elements from a dataset, convert it to a 1D dataset and adjust the size properly. In practice this function doesn't 'realloc' the input array, all it does is to shift the blank eleemnts to the end and adjust the size elements of the 'gal_data_t'. */ #define BLANK_REMOVE(IT) { \ IT b, *a=input->array, *af=a+input->size, *o=input->array; \ gal_blank_write(&b, input->type); \ if(b==b) /* Blank value can be be checked with equal. */ \ do if(*a!=b) { ++num; *o++=*a; } while(++a<af); \ else /* Blank value will fail on equal comparison. */ \ do if(*a==*a) { ++num; *o++=*a; } while(++a<af); \ } void gal_blank_remove(gal_data_t *input) { char **strarr; size_t i, num=0; /* This function currently assumes a contiguous patch of memory. */ if(input->block && input->ndim!=1 ) error(EXIT_FAILURE, 0, "%s: tiles in datasets with more dimensions " "than 1 are not yet supported. Your input has %zu dimensions", __func__, input->ndim); /* If the dataset doesn't have blank values, then just get the size. */ if( gal_blank_present(input, 0) ) { /* Shift all non-blank elements to the start of the array. */ switch(input->type) { case GAL_TYPE_UINT8: BLANK_REMOVE( uint8_t ); break; case GAL_TYPE_INT8: BLANK_REMOVE( int8_t ); break; case GAL_TYPE_UINT16: BLANK_REMOVE( uint16_t ); break; case GAL_TYPE_INT16: BLANK_REMOVE( int16_t ); break; case GAL_TYPE_UINT32: BLANK_REMOVE( uint32_t ); break; case GAL_TYPE_INT32: BLANK_REMOVE( int32_t ); break; case GAL_TYPE_UINT64: BLANK_REMOVE( uint64_t ); break; case GAL_TYPE_INT64: BLANK_REMOVE( int64_t ); break; case GAL_TYPE_FLOAT32: BLANK_REMOVE( float ); break; case GAL_TYPE_FLOAT64: BLANK_REMOVE( double ); break; case GAL_TYPE_STRING: strarr=input->array; for(i=0;i<input->size;++i) if( strcmp(strarr[i], GAL_BLANK_STRING) ) /* Not blank. */ { strarr[num++]=strarr[i]; } else { free(strarr[i]); strarr[i]=NULL; } /* Is blank. */ break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } } else num=input->size; /* Adjust the size elements of the dataset. */ input->ndim=1; input->dsize[0]=input->size=num; /* Set the flags to mark that there is no blanks. */ input->flag |= GAL_DATA_FLAG_BLANK_CH; input->flag &= ~GAL_DATA_FLAG_HASBLANK; } /* Similar to 'gal_blank_remove', but also reallocates/frees the extra space. */ void gal_blank_remove_realloc(gal_data_t *input) { /* Remove the blanks and fix the size of the dataset. */ gal_blank_remove(input); /* Run realloc to shrink the allocated space. */ input->array=realloc(input->array, input->size*gal_type_sizeof(input->type)); if(input->array==NULL) error(EXIT_FAILURE, 0, "%s: couldn't reallocate memory", __func__); } static gal_data_t * blank_remove_in_list_merge_flags(gal_data_t *thisdata, gal_data_t *flag, int onlydim0) { size_t i; uint8_t *u, *tu; gal_data_t *flagtmp; static int warningprinted=0; /* Ignore the dataset if it has more than one dimension and 'onlydim0' is called. */ if(onlydim0 && thisdata->ndim>1 && warningprinted==0) { warningprinted=1; error(EXIT_SUCCESS, 0, "%s: WARNING: multi-dimensional columns " "are not supported when 'onlydim0' is non-zero", __func__); return NULL; } /* Build the flag of blank elements for this column. */ flagtmp=gal_blank_flag(thisdata); /* If this is the first column, then use flagtmp as flag. */ if(flag) { u=flag->array; tu=flagtmp->array; for(i=0;i<flag->size;++i) u[i] = u[i] || tu[i]; gal_data_free(flagtmp); } else flag=flagtmp; /* For a check. u=flag->array; double *d=thisdata->array; for(i=0;i<flag->size;++i) printf("%f, %u\n", d[i], u[i]); printf("\n"); */ /* Return the flag dataset. */ return flag; } /* Remove any row that has a blank in any of the given columns. */ gal_data_t * gal_blank_remove_rows(gal_data_t *columns, gal_list_sizet_t *column_indexs, int onlydim0) { size_t i; gal_list_sizet_t *tcol; gal_data_t *tmp, *flag=NULL; /* If any columns are requested, only use the given columns for the flags, otherwise use all the input columns. */ if(column_indexs) for(tcol=column_indexs; tcol!=NULL; tcol=tcol->next) { /* Find the correct column in the full list. */ i=0; for(tmp=columns; tmp!=NULL; tmp=tmp->next) if(i++==tcol->v) break; /* If the given index is larger than the number of elements in the input list, then print an error. */ if(tmp==NULL) error(EXIT_FAILURE, 0, "%s: input list has %zu elements, but " "the column %zu (counting from zero) has been requested", __func__, gal_list_data_number(columns), tcol->v); /* Build the flag of blank elements for this column. */ flag=blank_remove_in_list_merge_flags(tmp, flag, onlydim0); } else for(tmp=columns; tmp!=NULL; tmp=tmp->next) flag=blank_remove_in_list_merge_flags(tmp, flag, onlydim0); /* Now that the flags have been set, remove the rows. */ for(tmp=columns; tmp!=NULL; tmp=tmp->next) { if(tmp->ndim==1 || onlydim0==0) gal_blank_flag_remove(tmp, flag); else blank_flag_remove_dim0(tmp, flag); } /* For a check. double *d1=columns->array, *d2=columns->next->array; for(i=0;i<columns->size;++i) printf("%f, %f\n", d2[i], d1[i]); printf("\n"); */ /* Return the flag. */ return flag; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/box.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000050242�14551337306�010474� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Box -- Define bounding and overlapping boxes. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gsl/gsl_math.h> #include <gnuastro/box.h> /* IMPORTANT NOTE: All the axises are based on the FITS standard, not C. */ /* Any ellipse can be enclosed into a rectangular box. The purpose of this function is to give the height and width of that box. The logic behind it is this: All the points on the circumference of an ellipse that is aligned on the x axis can be written as: (acos(t),bsin(t)) where 0<t<2\pi. (1) But when we rotate the ellipse by \theta, the points can be characterized by: ( acos(t)cos(\theta)+bsin(t)sin(\theta), (2) -acos(t)sin(\theta)+bsin(t)cos(\theta) ) To find the maximum and minimum points of this function you just have to take the derivative of each with respect to "t" and set it to zero. This will give you the "t" that maximizes both x and the "t" that maximizes y. Once you do that, you will get: For x: tan(t)=(b/a)tan(\theta) (3) For y: tan(t)=(-b/a)cot(\theta) Once you find the "t", put it in (2) for the respective coordinate and you will find the distance (about the center of the ellipse that encloses the whole ellipse. */ void gal_box_bound_ellipse_extent(double a, double b, double theta_deg, double *extent) { double t_r=theta_deg*M_PI/180; double ct=cos(t_r), st=sin(t_r); double t_x=atan(b/a*tan(t_r)), t_y=atan(-1.0f*b/a/tan(t_r)); /* Calculate the maxima along each direction. */ extent[0] = fabs( a*cos(t_x)*ct + b*sin(t_x)*st ); extent[1] = fabs( -1*a*cos(t_y)*st + b*sin(t_y)*ct ); } void gal_box_bound_ellipse(double a, double b, double theta_deg, long *width) { double extent[2]; /* Find the extent of the ellipse. */ gal_box_bound_ellipse_extent(a, b, theta_deg, extent); /* The returned value is an integer. So if the fractional component of the extent is larger than 0.5, add one to it so we still cover the whole desired region. */ extent[0] += extent[0] - ((long)(extent[0])) > 0.5f ? 0.5f : 0.0f; extent[1] += extent[1] - ((long)(extent[1])) > 0.5f ? 0.5f : 0.0f; /* max_x and max_y are calculated from the center of the ellipse. We want the final height and width of the box enclosing the ellipse. So we have to multiply them by two, then take one from them (for the center). */ width[0] = 2 * ( (long)(extent[0]) ) + 1; width[1] = 2 * ( (long)(extent[1]) ) + 1; } /* Find the bounding box of an ellipsoid. An ellipsoid is defined by its three axises: the first (a) must be the major axis, the other two must be smaller than 'a' but no particular relation between them is assumed. We will define the orientation of the ellipsoid from its major axis and use the "Proper Euler angles" (ZXZ order) to define that orientation. The following derivation is taken from: https://tavianator.com/exact-bounding-boxes-for-spheres-ellipsoids/ For the definition of the Euler angles (and the ZXZ order) see Wikipedia in the link below. In short: first rotate around the Z axis, then the (rotated) first axis, then the (rotated) Z axis. https://en.wikipedia.org/wiki/Euler_angles Defining the general point 'p' as (the transpose of 'p' with 'p^T' and its inverse with 'p^-1'): | x | p = | y | | z | | 1 | A sphere satisfies the following homogenous coordinate matrix and general quadratic surface: | 1 0 0 0 | S = | 0 1 0 0 | --> p^T * S * p = 0 | 0 0 1 0 | | 0 0 0 -1 | The conversion from a sphere to an arbitrarily oriented ellipsoid will be done by rotating the three semi-axes lengths and merging the three vertical vectors into one matrix. The rotation can be written as the following combined affine transformation (only in the three main axises (since we aren't dealing with translation here). Here, we'll call 'sin(alpha)' as 's1', 'cos(beta)' as 'c2' and 'sin(gamma)' as 's3'. Rotate by Euler angles ---------------------------- | c1 -s1 0 | | 1 0 0 | | c3 -s3 0 | R = | s1 c1 0 | * | 0 c2 -s2 | * | s3 c3 0 | | 0 0 1 | | 0 s2 c2 | | 0 0 1 | Then 'M' (rotation and scaling to obtain ellipsoid from sphere) will be: | a | | 0 | | 0 | | A1 B1 C1 | A = R * | 0 |, B = R * | b |, C = R * | 0 | --> M = | A2 B2 C2 | | 0 | | 0 | | c | | A3 B3 C3 | The final result is: | a*c1*c3-a*s1*c2*s3 -b*c1*s3-b*s1*c2*c3 c*s1*s2 | M = | a*s1*c3+a*c1*c2*s3 -b*s1*s3+b*c1*c2*c3 -c*c1*s2 | | a*s2*s3 b*s2*c3 c*c2 | The quadratic surface for this ellipsoid can now be written as: (M^-1 * p)^T * S * (M^-1 * p) = 0 --> p^T * (M^-T * S * M^-1) * p = 0 Writing Q = M^-T * S * M^-1, we get: 'p^T * Q * p = 0'. Now, we define a plane with a horizontal vector 'u = [a b c d ]', such that 'u.p=0'. For a point on the ellipsoid (at 'p') we have: 'u^T=p^T * Q'. This is because: 'u.p = u^T * p = p^T * Q * p = 0' (as we showed above). Tangent planes will have the following useful property: u^T * Q^-1 * u = p^T * Q * Q^-1 * Q * p = p^T * Q * p = 0 Now, the particular plane that is perpendicular to the X axis has the general form: 'u = [ 1 0 0 -x ]'. So, defining 'R = Q^1', and using the property above for tangential planes, we can find the X axis position. However, getting to 'R' from 'M' as described above is not easy. So, taking the following considerations into account, we can derive the final values: [from that webpage] "Several details of the problem can make computing the planes more efficient. The first is that 'S' is involutory, meaning 'S^-1 = S'. This means that the product 'M * S^-1' can be computed implicitly: it is simply 'M' with its last column negated. The last column of 'R = M * S^-1 * MT' is the same, because the last column of 'M^T' is '[ 0 0 0 1 ]'. In particular, 'R[4,4]=-1'. Not all values of RR are used; in fact, only values from the last column and the diagonal appear in the formulae. We know the last column implicitly, and the diagonal has the formula: " R[i,i] = (sum_{j=1 to 3} M[i,j]^2 - M_[i,j] So the bounding box lengths along each dimension are the following. Recall that in homogenous coordinates, the last column is for translation. So in the case of this function all the 'M[i,4]' values are zero. x = M[1,4] \pm sqrt( M[1,1]^2 + M[1,2]^2 + M[1,3]^2 ) y = M[2,4] \pm sqrt( M[2,1]^2 + M[2,2]^2 + M[2,3]^2 ) z = M[3,4] \pm sqrt( M[3,1]^2 + M[3,2]^2 + M[3,3]^2 ) */ void gal_box_bound_ellipsoid_extent(double *semiaxes, double *euler_deg, double *extent) { size_t i, j; double a=semiaxes[0], b=semiaxes[1], c=semiaxes[2]; double c1=cos(euler_deg[0]*M_PI/180), s1=sin(euler_deg[0]*M_PI/180); double c2=cos(euler_deg[1]*M_PI/180), s2=sin(euler_deg[1]*M_PI/180); double c3=cos(euler_deg[2]*M_PI/180), s3=sin(euler_deg[2]*M_PI/180); double R[9]={ a*c1*c3-a*s1*c2*s3, -1.0f*b*c1*s3-b*s1*c2*c3, c*s1*s2, a*s1*c3+a*c1*c2*s3, -1.0f*b*s1*s3+b*c1*c2*c3, -1.0f*c*c1*s2, a*s2*s3, b*s2*c3, c*c2 }; /* Sanity check. */ if(b>a || c>a) error(EXIT_FAILURE, 0, "%s: the second and third semi-axes lengths " "(%g, %g respectively) must both be smaller or equal to the " "first (%g)", __func__, b, c, a); /* Find the width along each dimension. */ for(i=0;i<3;++i) { extent[i]=0.0; for(j=0;j<3;++j) extent[i] += R[i*3+j] * R[i*3+j]; extent[i] = sqrt(extent[i]); } /* For a check: printf("Axies: %g, %g, %g\n", a, b, c); printf("Euler angles: %g, %g, %g\n", euler_deg[0], euler_deg[1], euler_deg[2]); printf("c1: %f, s1: %f\nc2: %f, s2: %f\nc3: %f, s3: %f\n", c1, s1, c2, s2, c3, s3); PRINT3BY3("R", R); printf("extent: %ld, %ld, %ld\n", extent[0], extent[1], extent[2]); exit(0); */ } /* Using 'gal_box_bound_ellipsoid_extent', find the integer width of a box that contains the ellipsoid. */ #define PRINT3BY3(C, A){ \ printf("%s: | %-15g%-15g%-15g |\n" \ " | %-15g%-15g%-15g |\n" \ " | %-15g%-15g%-15g |\n\n", (C), (A)[0], (A)[1], (A)[2], \ (A)[3], (A)[4], (A)[5], (A)[6], (A)[7], (A)[8]); \ } void gal_box_bound_ellipsoid(double *semiaxes, double *euler_deg, long *width) { size_t i; double extent[3]; /* Find the extent of the ellipsoid in each axis. */ gal_box_bound_ellipsoid_extent(semiaxes, euler_deg, extent); /* Find the width along each dimension. */ for(i=0;i<3;++i) { /* The returned width along each dimension is an integer. So if the fractional component of the extent is larger than 0.5, add one to it so we still cover the whole desired region. */ extent[i] += extent[i] - ((long)(extent[i])) > 0.5f ? 0.5f : 0.0f; /* Set the width. */ width[i] = 2 * ( (long)extent[i] ) + 1; } } /* We have the central pixel and box size of the crop box, find the starting (first) and ending (last) pixels: */ void gal_box_border_from_center(double *center, size_t ndim, long *width, long *fpixel, long *lpixel) { size_t i; long tmp; double intpart; /* Go over the dimensions. */ for(i=0;i<ndim;++i) { /* When the decimal fraction of the center (in floating point) is larger than 0.5, then it is must be incremented. */ tmp = center[i] + ( fabs(modf(center[i], &intpart))>=0.5 ? 1 : 0 ); /* Set the first and last pixels in this dimension. */ fpixel[i]=tmp-width[i]/2; lpixel[i]=tmp+width[i]/2; } /* For a check: if(ndim==2) { printf("center: %g, %g\n", center[0], center[1]); printf("fpixel: %ld, %ld\n", fpixel[0], fpixel[1]); printf("lpixel: %ld, %ld\n", lpixel[0], lpixel[1]); } else if(ndim==3) { printf("center: %g, %g, %g\n", center[0], center[1], center[2]); printf("fpixel: %ld, %ld, %ld\n", fpixel[0], fpixel[1], fpixel[2]); printf("lpixel: %ld, %ld, %ld\n", lpixel[0], lpixel[1], lpixel[2]); } */ } /* Rotate one point */ static void box_border_rotate_point(double *point, double rad) { double x = point[0]*cos(rad) - point[1]*sin(rad); double y = point[0]*sin(rad) + point[1]*cos(rad); point[0]=x; point[1]=y; } /* Given a certain 'fpixel' and 'lpixel' of a box, update their values if there is rotation (in relation to the first FITS/horizontal axis). */ void gal_box_border_rotate_around_center(long *fpixel, long *lpixel, size_t ndim, float rotate_deg) { double minx, miny, maxx, maxy; double rad = rotate_deg * M_PI / 180.0f; double center[2]={ (lpixel[0]+fpixel[0])/2.0f, (lpixel[1]+fpixel[1])/2.0f }; /* The four corners in relation to the box's center: 'bl' for bottom-left, 'br' for bottom-right, 'tl' for top-left and 'tr' for top-right. */ double bl[2]={fpixel[0]-center[0], fpixel[1]-center[1]}; double br[2]={lpixel[0]-center[0], fpixel[1]-center[1]}; double tl[2]={fpixel[0]-center[0], lpixel[1]-center[1]}; double tr[2]={lpixel[0]-center[0], lpixel[1]-center[1]}; /* In case we don't have any rotation, there is no purpose for continuing. */ if(rotate_deg==0) return; /* This function currently only works on 2D inputs. */ if(ndim!=2) error(EXIT_FAILURE, 0, "%s: currently only 2D datasets are " "allowed, please contact us at '%s' to generalize", __func__, PACKAGE_BUGREPORT); /* For a check printf("bottom-left: %g, %g\n", bl[0], bl[1]); printf("bottom-right: %g, %g\n", br[0], br[1]); printf("top-left: %g, %g\n", tl[0], tl[1]); printf("top-right: %g, %g\n\n", tr[0], tr[1]); */ /* Rotate the four points. */ box_border_rotate_point(bl, rad); box_border_rotate_point(br, rad); box_border_rotate_point(tl, rad); box_border_rotate_point(tr, rad); /* For a check printf("bottom-left: %g, %g\n", bl[0], bl[1]); printf("bottom-right: %g, %g\n", br[0], br[1]); printf("top-left: %g, %g\n", tl[0], tl[1]); printf("top-right: %g, %g\n", tr[0], tr[1]); */ /* Update the first and last points. */ minx=bl[0]; maxx=bl[0]; if(br[0]<minx) {minx=br[0];} if(br[0]>maxx) {maxx=br[0];} if(tl[0]<minx) {minx=tl[0];} if(tl[0]>maxx) {maxx=tl[0];} if(tr[0]<minx) {minx=tr[0];} if(tr[0]>maxx) {maxx=tr[0];} miny=bl[1]; maxy=bl[1]; if(br[1]<miny) {miny=br[1];} if(br[1]>maxy) {maxy=br[1];} if(tl[1]<miny) {miny=tl[1];} if(tl[1]>maxy) {maxy=tl[1];} if(tr[1]<miny) {miny=tr[1];} if(tr[1]>maxy) {maxy=tr[1];} /* Put the minima and maxima into the first and last pixel coordinates. */ fpixel[0]=center[0]+minx; fpixel[1]=center[1]+miny; lpixel[0]=center[0]+maxx; lpixel[1]=center[1]+maxy; /* For a check: printf("fpixel: %ld, %ld\n", fpixel[0], fpixel[1]); printf("lpixel: %ld, %ld\n", lpixel[0], lpixel[1]); */ } /* Problem to solve: We have set the first and last pixels of a box in an input image (fpixel_i[2] and lpixel_i[2]). But those first and last pixels don't necessarily lie within the image's boundaries. They can be outside of it or patially overlap with it (see examples below). The job of this function is to correct for such situations and find the starting and ending points of any overlap. It is assumed that your output (overlap) image's first pixel lies right ontop of the fpixel_i[0] in the input image. But since fpixel_i might be outside of the image, in this function we find the fpixel_o[2] and lpixel_o[2] in the overlap image coordinates that overlap with the input image. So the values of all four points might change after this function. Before: ======= fpixel_o and lpixel_o are not shown. fpixel_o and lpixel_o point to the same place as fpixel_i and lpixel_i, But in the coordinates of the overlap image. -----------------lpixel_i | overlap | | image | | | ----------------------|------ | | | | | | fpixel_i ----------------- | | | | | | | Input image | ----------------------------- After ===== ----------------- | overlap | | image | | | ----------------------|------lpixel_i | | | | | | fpixel_i ----------------- | | | | | | | Input image | ----------------------------- So, in short the arrays we are dealing with here are: fpixel_i: Coordinates of the first pixel in input image. lpixel_i: Coordinates of the last pixel in input image. fpixel_o: Coordinates of the first pixel in overlap image. lpixel_o: Coordinates of the last pixel in overlap image. NOTES: ====== - lpixel is the last pixel in the image (not outside of it). - The coordinates are in the FITS format. Return value: ============= 1: There is an overlap 0: There is no overlap */ int gal_box_overlap(long *naxes, long *fpixel_i, long *lpixel_i, long *fpixel_o, long *lpixel_o, size_t ndim) { size_t i; long width; /* In case you want to see how things are going: printf("\n\nImage size: ["); for(i=0;i<ndim;++i) {printf("%ld, ", naxes[i]);} printf("\b\b]\n"); printf("fpixel_i -- lpixel_i: ("); for(i=0;i<ndim;++i) {printf("%ld, ", fpixel_i[i]);} printf("\b\b) -- ("); for(i=0;i<ndim;++i) {printf("%ld, ", lpixel_i[i]);} printf("\b\b)\n"); */ /* Do the calculations for each dimension: */ for(i=0;i<ndim;++i) { /* Set the width and initialize the overlap values. */ fpixel_o[i] = 1; lpixel_o[i] = width = lpixel_i[i] - fpixel_i[i] + 1; /* Check the four corners to see if they should be adjusted: To understand the first, look at this, suppose | separates pixels and the * shows where the image actually begins. |-2|-1| 0* 1| 2| 3| 4| ( input image ) *1 | 2| 3| 4| 5| 6| 7| ( crop image ) So when fpixel_i is negative, e.g., fpixel_i=-2, then the index of the pixel in the cropped image we want to begin with, that corresponds to 1 in the survey image is: fpixel_o = 4 = 2 + -1*fpixel_i */ if(fpixel_i[i]<1) { /* Along any dimension, if 'lpixel_i' is also smaller than 1, then there is no overlap. */ if(lpixel_i[i]<1) return 0; /* Correct the coordinates. */ fpixel_o[i] = -1*fpixel_i[i]+2; fpixel_i[i] = 1; } /*The same principle applies to the end of an image. Take "s" is the maximum size along a specific axis in the survey image and "c" is the size along the same axis on the cropped image. Assume the the cropped region's last pixel in that axis will be 2 pixels larger than s: |s-1| s* s+1| s+2| (survey image) |c-3| c-2| c-1| c* (crop image) So you see that if the outer pixel is n pixels away then in the cropped image we should only fill upto c-n.*/ if(lpixel_i[i]>naxes[i]) { /* Along any dimension, if 'fpixel_i' is larger than the image size, there is no overlap. */ if(fpixel_i[i]>naxes[i]) return 0; /* Correct the coordinates. */ lpixel_o[i] = width - (lpixel_i[i]-naxes[i]); lpixel_i[i] = naxes[i]; } } /* In case you want to see the results. printf("\nAfter correction:\n"); printf("Input image: ("); for(i=0;i<ndim;++i) {printf("%ld, ", fpixel_i[i]);} printf("\b\b) -- ("); for(i=0;i<ndim;++i) {printf("%ld, ", lpixel_i[i]);} printf("\b\b)\n"); printf("output image: ("); for(i=0;i<ndim;++i) {printf("%ld, ", fpixel_o[i]);} printf("\b\b) -- ("); for(i=0;i<ndim;++i) {printf("%ld, ", lpixel_o[i]);} printf("\b\b)\n"); */ /* If the first image pixel in every dimension is larger than the input image's width or the last image pixel is before the input image, then there is no overlap and we must return 0. */ for(i=0;i<ndim;++i) if( fpixel_i[i]>naxes[i] || lpixel_i[i]<1 ) return 0; /* The first and last image pixels are within the image, so there is overlap. */ return 1; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/checkset.c������������������������������������������������������������������������0000644�0001750�0001750�00000102665�14551337306�011504� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to check and set command line argument values and files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Pedram Ashofteh Ardakani <pedramardakani@pm.me> Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/stat.h> #include <sys/fcntl.h> #include <gnuastro/data.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> /**************************************************************/ /********** Environment ************/ /**************************************************************/ /* The GSL random number generator (RNG) reads values from the environment. This function is designed to make the job easier for any Gnuastro program using GSL's RNG functions. */ gsl_rng * gal_checkset_gsl_rng(uint8_t envseed_bool, const char **name, unsigned long int *seed) { gsl_rng *rng; /* Let GSL read the environment and convert the type name (as string) to 'gsl_rng_type'. After this function, 'gsl_rng_default' contains the generator's type and 'gsl_rng_default_seed' contains the (possibly) given seed. */ gsl_rng_env_setup(); /* Allocate the random number generator based on the requested type and save its name. If no 'GSL_RNG_TYPE' is set, then use a fixed generator. */ rng=gsl_rng_alloc(secure_getenv("GSL_RNG_TYPE") ? gsl_rng_default : gsl_rng_ranlxs1); *name = gsl_rng_name(rng); /* Initialize the random number generator, depending on the 'envseed_bool' argument. */ *seed = ( envseed_bool ? gsl_rng_default_seed : gal_timing_time_based_rng_seed() ); gsl_rng_set(rng, *seed); /* Return the GSL RNG structure. */ return rng; } static size_t checkset_meminfo_line(char *line, char *keyname, size_t keylen, char *file) { size_t *freemem=NULL, out=GAL_BLANK_SIZE_T; char *linecp, *token, *units="kB", delimiters[] = " ", *saveptr; if( !strncmp(line, keyname, keylen) ) { /* We need to work on a copied line to avoid messing up the contents of the actual line. */ gal_checkset_allocate_copy(line, &linecp); /* The first token (which we don't need). */ token=strtok_r(linecp, delimiters, &saveptr); /* The second token (which is the actual number we want). */ token=strtok_r(NULL, delimiters, &saveptr); if(token) { /* Read the token as a number. */ if( gal_type_from_string((void **)(&freemem), token, GAL_TYPE_SIZE_T) ) error(EXIT_SUCCESS, 0, "WARNING: %s: value of '%s' " "keyword couldn't be read as an integer. Hence " "the amount of available RAM couldn't be " "determined. If a large volume of data is " "provided, the program may crash. Please contact " "us at '%s' to fix the problem", file, keyname, PACKAGE_BUGREPORT); else { /* The third token should be the units ('kB'). If it isn't, there should be an error because we currently assume kilobytes. */ token=strtok_r(NULL, delimiters, &saveptr); if(token) { /* The units should be 'kB' (for kilobytes). */ if( !strncmp(token, units, 2) ) out=freemem[0]*1000; else error(EXIT_SUCCESS, 0, "WARNING: %s: the units of " "the value of '%s' keyword is (usually 'kB') " "isn't recognized. Hence the amount of " "available RAM couldn't be determined. If a " "large volume of data is provided, the " "program may crash. Please contact us at " "'%s' to fix the problem", file, keyname, PACKAGE_BUGREPORT); } else error(EXIT_SUCCESS, 0, "WARNING: %s: the units of the " "value of '%s' keyword (usually 'kB') couldn't " "be read as an integer. Hence the amount of " "available RAM couldn't be determined. If a " "large volume of data is provided, the program " "may crash. Please contact us at '%s' to fix " "the problem", file, keyname, PACKAGE_BUGREPORT); } /* Clean up. */ if(freemem) free(freemem); } else error(EXIT_SUCCESS, 0, "WARNING: %s: line with the '%s' " "keyword didn't have a value. Hence the amount of " "available RAM couldn't be determined. If a large " "volume of data is provided, the program may crash. " "Please contact us at '%s' to fix the problem", file, keyname, PACKAGE_BUGREPORT); /* Clean up. */ free(linecp); } /* Return the value. */ return out; } /* On the Linux kernel, due to "overcommitting" (which is activated by default), malloc will not return NULL when we allocate more memory than the physically available memory. It is possible to disable overcommiting with root permissions, but I have not been able to find any way to do this as a normal user. So the only way is to look into the '/proc/meminfo' file (constantly updated by the Linux kernel) and read the available memory from that. Note that this overcommiting apparently only occurs on Linux. From what I have read, other kernels are much more strict and 'malloc' will indeed return NULL if there isn't any physical RAM to support it. So if the '/proc/meminfo' doesn't exist, we can assume that 'malloc' works as expected, until its inverse is proven. Most GNU/Linux distributions have 'MemAvailable', which is "an estimate of how much memory is available for starting new applications, without swapping" (see [1]). It is therefore the main parameter to check for this purpose. However, on some systems (for example Ubuntu, installed within Windows using Windows Subsystem for Linux), 'MemAvailable' is not defined! So we will have to use 'MemFree' (which is "The amount of physical RAM, in kibibytes, left unused by the system"; from [1]). From that description I feel their difference is that the Linux kernel allocates some memory for programs that it starts from the RAM ('MemAvailable'). However, 'MemFree' is the amount of free RAM (independent of the Linux kernel; not including the "Available" space that Linux has allocated for programs it starts). Since Windows Subsystem for Linux doesn't use the Linux kernel, it doesn't have 'MemAvailable', and only 'MemFree'. [1] https://lynxbee.com/understanding-proc-meminfo-analyzing-linux-memory-utilization */ size_t gal_checkset_ram_available(int quietmmap) { FILE *file; size_t linelen=80; char *meminfo="/proc/meminfo", *line; char *mastr="MemAvailable", *mfstr="MemFree"; size_t mf=GAL_BLANK_SIZE_T, ma=GAL_BLANK_SIZE_T; size_t malen=strlen(mastr), mflen=strlen(mfstr); /* If /proc/meminfo exists, read it. Otherwise, don't bother doing anything. */ if ((file = fopen(meminfo, "r"))) { /* Allocate space to read the line. */ errno=0; line=malloc(linelen*sizeof *line); if(line==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for line", __func__, linelen*sizeof *line); /* Read it line-by-line until you find the key. */ while( getline(&line, &linelen, file) != -1 && (ma == GAL_BLANK_SIZE_T || mf == GAL_BLANK_SIZE_T) ) { if( ma == GAL_BLANK_SIZE_T ) ma=checkset_meminfo_line(line, mastr, malen, meminfo); if( mf == GAL_BLANK_SIZE_T ) mf=checkset_meminfo_line(line, mfstr, mflen, meminfo); } /* The file existed but a keyname couldn't be found. In this case we should inform the user to be aware that we can't automatically determine the available memory. */ if(ma==GAL_BLANK_SIZE_T && mf==GAL_BLANK_SIZE_T && quietmmap==0) error(EXIT_SUCCESS, 0, "WARNING: %s: didn't contain a '%s' " "or '%s' keywords hence the amount of available RAM " "couldn't be determined. If a large volume of data is " "provided, the program may crash. Please contact us at " "'%s' to fix the problem", meminfo, mastr, mfstr, PACKAGE_BUGREPORT); /* Close the opened file and free the line. */ free(line); fclose(file); } /* If 'MemAvailable' was found, return it. Otherwise, return the value of 'MemFree'. */ return ma==GAL_BLANK_SIZE_T ? mf : ma; } int gal_checkset_need_mmap(size_t bytesize, size_t minmapsize, int quietmmap) { int needmmap=0; size_t availableram; size_t minimumtommap=10000000; size_t mustremainfree=250000000; /* In case the given minmapsize is smaller than the default value of 'minimumtomap', then correct 'minimumtomap' to be the same as 'minmapsize' (the user has to have full control to over-write the default value, but let them know in a warning that this is not good). */ if(minmapsize < minimumtommap) { /* Let the user know that this is not a good choice and can cause other problems. */ if(!quietmmap) error(EXIT_SUCCESS, 0, "WARNING: it is recommended that minmapsize " "have a value larger than %zu (it is currently %zu), see " "\"Memory management\" section in the Gnuastro book for " "more. To disable this warning, please use the option " "'--quiet-mmap'", minimumtommap, minmapsize); /* Set the variable. */ minimumtommap=minmapsize; } /* Memory mapping is only relevant here if the byte-size of the dataset is larger than 'minimumtommap'. This is primarily because checking the available memory can be expensive. */ if( bytesize >= minimumtommap ) { /* Find the available RAM space (only relevant for Linux). */ availableram=gal_checkset_ram_available(quietmmap); /* For a check: printf("check: %zu (bs), %zu (ar), %zu (nu)\n", bytesize, availableram, mustremainfree); */ /* If the final size is larger than the user's maximum, or is larger than the available memory minus 500Mb (to leave the system some breathing space!), then read the array into disk using memory-mapping (HDD/SSD). */ if( bytesize >= minmapsize || availableram < mustremainfree || bytesize > (availableram-mustremainfree) ) needmmap=1; } /* Return the final choice. */ return needmmap; } /**************************************************************/ /********** My String functions: ************/ /**************************************************************/ int gal_checkset_string_has_space(char *in) { do switch(*in) { case ' ': case '\t': case '\v': return 1; } while(*(++in)!='\0'); return 0; } void gal_checkset_string_case_change(char *in, int toupper1_tolower0) { if(toupper1_tolower0) do *in=toupper(*in); while(*in++!='\0'); else do *in=tolower(*in); while(*in++!='\0'); } char * gal_checkset_malloc_cat(char *inname, char *toappend) { char *out; size_t inl, apl; inl=strlen(inname); apl=strlen(toappend); errno=0; out=malloc(inl+apl+1); if(out==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes", __func__, inl+apl+1); strcpy(out, inname); strcat(out, toappend); return out; } /* Copy the input string to the output (and also allocate the output). */ void gal_checkset_allocate_copy(const char *arg, char **copy) { if(arg) { errno=0; *copy=malloc(strlen(arg)+1); if(*copy==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes to copy %s", __func__, strlen(arg)+1, arg); strcpy(*copy, arg); } else *copy=NULL; } /* This function is mainly for reading in the arguments (from the command line or configuration files) that need to be copied. The set argument is for making sure that it has not already been set before, see the main.h files of any program. */ void gal_checkset_allocate_copy_set(char *arg, char **copy, int *set) { /* Incase *set==1, then you shouldn't do anything, just return. */ if(*set) return; /* The variable was not copied, copy it: */ errno=0; *copy=malloc(strlen(arg)+1); if(*copy==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes to copy %s", __func__, strlen(arg)+1, arg); strcpy(*copy, arg); *set=1; } /* The dataset may be alone in a file (for example a table in a text file) or it may an extension of a FITS file. In error messages in particular, we need to differentiate between the two. This function will check the filename and if it is FITS, it will return a string with the filename and HDU in parenthesis. If it isn't a FITS file, it will only return the filename. Note that the output needs to be freed, although when used in an error message, you can leave it to the system to free the space. There is no problem. */ char * gal_checkset_dataset_name(char *filename, char *hdu) { char *out; if( gal_fits_name_is_fits(filename) ) { if( asprintf(&out, "%s (hdu %s)", filename, hdu)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else gal_checkset_allocate_copy(filename, &out); return out; } /* Remove the given prefix from the name, then compare. If the prefix is NULL, then this becomes a basic string comparison '!strcmp(a,b)'. */ int gal_checkset_noprefix_isequal(char *string, char *prefix, const char *tocompare) { size_t plen; /* If the input string is empty, then this option has nothing to do (should return false): like NaN in math, two NULLs are not equal in this scenario. */ if(string==NULL) return 0; if(tocompare==NULL) return 0; /* Do the comparison. */ if(prefix) { /* Check if 'string' starts with 'prefix'. When it does start with the prefix, then do the comparison for the string after the prefix. */ plen=strlen(prefix); if( !strncmp(string, prefix, plen) ) return !strcmp(string+plen, tocompare); } /* If a prefix wasn't given, OR the string didn't start with the given prefix, then ignore the prefix and simply compare the full input string and the 'tocompare' string. */ return !strcmp(string, tocompare); } /**************************************************************/ /********** Set file names and check if they exist ************/ /**************************************************************/ /* Given a filename, this function will separate its directory name part. */ char * gal_checkset_dir_part(char *filename) { char *out; size_t i, l=strlen(filename); /* Find the first slash from the end. */ for(i=l;i!=0;--i) if(filename[i]=='/') break; /* If there was no slash, then the current directory should be given: */ if(i==0 && filename[0]!='/') gal_checkset_allocate_copy("./", &out); else { gal_checkset_allocate_copy(filename, &out); out[i+1]='\0'; } return out; } /* Given a file name, keep the non-directory part. Note that if there is no forward slash in the input name, the full input name is considered to be the notdir output. */ char * gal_checkset_not_dir_part(char *filename) { size_t i, l; char *out, *tmp=filename; /* Find the first '/' to identify the directory. */ l=strlen(filename); for(i=l;i!=0;--i) if(filename[i]=='/') { tmp=&filename[i+1]; break; } /* Get the length of the notdir name: */ l=strlen(tmp); errno=0; out=malloc((l+1)*sizeof *out); if(out==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for notdir", __func__, (l+1)*sizeof *out); strcpy(out, tmp); return out; } /* Make an allocated copy of the input string, then remove the suffix from that string. */ char * gal_checkset_suffix_separate(char *name, char **outsuffix) { char *c, *out=NULL, *suffix=NULL; /* Make a copy of the input. */ gal_checkset_allocate_copy(name, &out); /* Parse the string from the end and stop when we hit a '.'. */ c=out+strlen(out)-1; while(c!=out) { /* As soon as we hit the first '.' take a copy of the string after it and put it in 'suffix'. */ if(*c=='.') { gal_checkset_allocate_copy(c, &suffix); *c='\0'; break; } --c; } /* Put the 'suffix' in the output pointer and return the string with no suffix. */ *outsuffix=suffix; return out; } /* Given a reference filename, add a format of AAAAA-XXXXXX.CCCC where 'AAAAA' is the base name of the 'reference' argument, 'XXXXX' is a random/unique sequence of characters, and 'YYYYY' is the string given to 'suffix'. If 'suffix' is NULL, the suffix of 'reference' will be used. */ char * gal_checkset_make_unique_suffix(char *reference, char *suffix) { int tmpnamefile; char *nosuff, *tmpname; char *out=NULL, *insuffix; /* Remove the suffix. */ nosuff=gal_checkset_suffix_separate(reference, &insuffix); /* First generate the input to 'mkstemp' (the 'XXXXXX's will be replaced with a unique set of strings with same number of characters). */ if( asprintf(&tmpname, "%s-XXXXXX", nosuff)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); /* Generate the unique name with 'mkstemp', but it will actually open the file (to make sure that the name is not used), so we need to close it afterwards. */ tmpnamefile=mkstemp(tmpname); errno=0; if( close(tmpnamefile) != 0 ) error(EXIT_FAILURE, errno, "couldn't close temporary file"); /* Delete the temporarily created file. */ remove(tmpname); /* Add the suffix. */ out = ( suffix ? gal_checkset_malloc_cat(tmpname, suffix) : ( insuffix ? gal_checkset_malloc_cat(tmpname, insuffix) : tmpname ) ); /* Clean up and return the output. */ if(tmpname!=out) free(tmpname); if(insuffix) free(insuffix); free(nosuff); return out; } /* Check if a file exists and report if it doesn't. */ void gal_checkset_check_file(char *filename) { FILE *tmpfile; errno=0; tmpfile = fopen(filename, "r"); if(tmpfile) /* The file opened. */ { if(fclose(tmpfile)==EOF) error(EXIT_FAILURE, errno, "%s", filename); } else error(EXIT_FAILURE, errno, "%s", filename); } /* Similar to 'gal_checkset_check_file', but will report the result instead of doing it quietly. */ int gal_checkset_check_file_return(char *filename) { FILE *tmpfile; errno=0; tmpfile = fopen(filename, "r"); if(tmpfile) /* The file opened. */ { if(fclose(tmpfile)==EOF) error(EXIT_FAILURE, errno, "%s", filename); return 1; } else return 0; } /* If a file doesn't exist and its directory is writable, return 1. Otherwise, return 0. */ int gal_checkset_writable_notexist(char *filename) { int out=1; char *dir; FILE *tmpfile; /* If the filename is 'NULL' everything is ok (it doesn't exist)! In some cases, a NULL filename is interpretted to mean standard output. */ if(filename==NULL) return 1; /* We want to make sure that we can open and write to this file. But the user might have asked to not delete the file, so the contents should not be changed. Therefore we have to open it with 'r+'. */ errno=0; tmpfile=fopen(filename, "r+"); if (tmpfile) /* The file opened. */ { /* Close the file. */ errno=0; if(fclose(tmpfile)) error(EXIT_FAILURE, errno, "%s", filename); /* The file exists, return 0. */ out=0; } /* If the file doesn't exist, we just need to make sure if we have write permissions to its host directory. */ else { /* Separate the directory part of the filename. */ dir=gal_checkset_dir_part(filename); /* See if this directory is writable by this user. */ errno=0; if( access(dir, W_OK) ) out=0; /* Clean up. */ free(dir); } /* Return the final value. */ return out; } /* Check if a file exists and can be opened. If the 'keep' value is non-zero, then the file will remain untouched, otherwise, it will be deleted (since most programs need to make a clean output). When the file is to be deleted and 'dontdelete' has a non-zero value, then the file won't be deleted, but the program will abort with an error, informing the user that the output can't be made. */ void gal_checkset_writable_remove(char *filename, char *basename, int keep, int dontdelete) { char *dir; FILE *tmpfile; /* If the filename is 'NULL' everything is ok (it doesn't exist)! In some cases, a NULL filename is interpretted to mean standard output. */ if(filename==NULL) return; /* If a base-name was given, then this name may be related to the input's name. In that case, we should check if they are the same string. */ if(basename) if( !strcmp(filename, basename) ) error(EXIT_FAILURE, 0, "the output filename name ('%s') is the same " "as the input's file name! The output file is re-written if " "it already exists. Therefore, when the input and output file " "names are the same there is a problem! Please select a " "different output name", filename); /* We want to make sure that we can open and write to this file. But the user might have asked to not delete the file, so the contents should not be changed. Therefore we have to open it with 'r+'. */ errno=0; tmpfile=fopen(filename, "r+"); if (tmpfile) /* The file opened. */ { /* Close the file. */ errno=0; if(fclose(tmpfile)) error(EXIT_FAILURE, errno, "%s", filename); /* See if the file should be deleted. */ if(keep==0) { /* Make sure it is ok to delete the file. */ if(dontdelete) error(EXIT_FAILURE, 0, "%s already exists and you have " "asked to not remove it with the '--dontdelete' " "('-D') option", filename); /* Delete the file: */ errno=0; if(unlink(filename)) error(EXIT_FAILURE, errno, "%s", filename); } } /* If the file doesn't exist, we just need to make sure if we have write permissions to its host directory. */ else { /* Separate the directory part of the filename. */ dir=gal_checkset_dir_part(filename); /* Make sure this directory is writable by this user. */ errno=0; if( access(dir, W_OK) ) error(EXIT_FAILURE, errno, "cannot create any file(s) in the " "directory '%s'", dir); /* Clean up. */ free(dir); } } /* Check output file name: If a file exists or can exist and can be written to, this function will return 1. If not (for example it is a directory) it will return 0. Finally, if it exists but cannot be deleted, report an error and abort. */ int gal_checkset_dir_0_file_1(struct gal_options_common_params *cp, char *name, char *basename) { FILE *tmpfile; struct stat nameinfo; if(name==NULL) error(EXIT_FAILURE, 0, "%s: a bug! The input should not be NULL. " "Please contact us at %s so we can see what went wrong and " "fix it in future updates", __func__, PACKAGE_BUGREPORT); errno=0; if(stat(name, &nameinfo)!=0) { if(errno==ENOENT) /* ENOENT: No such file or directory. */ {/* Make the file temporarily and see if everything is ok. */ errno=0; tmpfile=fopen(name, "w"); if (tmpfile) { fprintf(tmpfile, "Only to test write access."); errno=0; if(fclose(tmpfile)) error(EXIT_FAILURE, errno, "%s", name); errno=0; if(unlink(name)) error(EXIT_FAILURE, errno, "%s", name); } else error(EXIT_FAILURE, errno, "%s", name); return 1; /* It is a file name, GOOD. */ } else /* Some strange condition, ABORT. */ error(EXIT_FAILURE, errno, "%s", name); } if(S_ISDIR(nameinfo.st_mode)) /* It is a directory, BAD. */ return 0; else if (S_ISREG(nameinfo.st_mode)) /* It is a file, GOOD. */ { gal_checkset_writable_remove(name, basename, cp->keep, cp->dontdelete); return 1; } else /* Not a file or a dir, ABORT. */ error(EXIT_FAILURE, 0, "%s not a file or a directory", name); error(EXIT_FAILURE, 0, "%s: a bug! The process should not reach the end " "of the function! Please contact us at %s so we can see what went " "wrong and fix it in future updates", __func__, PACKAGE_BUGREPORT); return 0; } /* Allocate space and write the output name (outname) based on a given input name (inname). The suffix of the input name (if present) will be removed and the given suffix will be put in the end. */ char * gal_checkset_automatic_output(struct gal_options_common_params *cp, char *inname, char *suffix) { char *out; size_t i, l, offset=0; /* Merge the contents of the input name and suffix name (while also allocating the necessary space). */ out=gal_checkset_malloc_cat(inname, suffix); /* If there is actually a suffix, replace it with the (possibly) existing suffix. */ if(suffix) { /* Start from the end of the input array. */ l=strlen(inname); for(i=l-1;i!=0;--i) { /* We don't want to touch anything before a '/' (directory names). We are only concerned with file names here. */ if(out[i]=='/') { /* When '/' is the last input character, then the input is clearly not a filename, but a directory name. In this case, adding a suffix is meaningless (a suffix belongs to a filename for Gnuastro's tools). So close the string after the '/' and leave the loop. However, if the '/' isn't the last input name charector, there is probably a filename (without a "." suffix), so break from the loop. No further action is required, since we initially allocated the necessary space and concatenated the input and suffix arrays. */ if(i==l-1) out[i+1]='\0'; break; } /* The input file names can be compressed names (for example '.fits.gz'). Currently the only compressed formats (decompressed within CFITSIO) are listed in 'gal_fits_name_is_fits' and 'gal_fits_suffix_is_fits'. */ else if(out[i]=='.' && !( ( out[i+1]=='g' && out[i+2]=='z' ) || (out[i+1]=='f' && out[i+2]=='z' ) || out[i+1]=='Z' ) ) { out[i]='\0'; strcat(out, suffix); break; } } } /* If we don't want the input directory information, remove them here. */ if(!cp->keepinputdir) { l=strlen(out); for(i=l;i!=0;--i) /* Find the last forward slash. */ if(out[i]=='/') {offset=i+1; break;} if(offset) for(i=offset;i<=l;++i) /* <= because we want to shift the */ out[i-offset]=out[i]; /* '\0' character in the string too. */ } /* Remove the created filename if it already exits. */ gal_checkset_writable_remove(out, inname, cp->keep, cp->dontdelete); /* Return the resulting filename. */ return out; } /* Check write-ability by trying to make a temporary file. Return 0 if the directory is writable, and 'errno' if it isn't. We won't be using 'facccessat' because its not available on some systems (macOS 10.9 and earlier, see https://github.com/conda-forge/staged-recipes/pull/9723 ). */ static int checkset_directory_writable(char *dirname) { int file_d; int errnum=0; char *tmpname; /* Set the template for the temporary file (accounting for the possible extra '/'). */ if(dirname[strlen(dirname)-1]=='/') tmpname=gal_checkset_malloc_cat(dirname, "gnuastroXXXXXX"); else tmpname=gal_checkset_malloc_cat(dirname, "/gnuastroXXXXXX"); /* Make the temporary file (with the temporary name) and open it. */ errno=0; file_d=mkstemp(tmpname); /* See if the file was opened (and thus created). */ if(file_d==-1) errnum=errno; else { /* The file was created, close the file. */ errno=0; if( close(file_d) == -1 ) errnum=errno; else {/* The file was closed, delete it. */ errno=0; if(unlink(tmpname)==-1) errnum=errno; } } /* Return the final value. */ return errnum; } /* Check if dirname is actually a real directory and that we can actually write inside of it. To insure all conditions an actual file will be made. */ void gal_checkset_check_dir_write_add_slash(char **dirname) { int file_d; char *tmpname, *indir=*dirname/*, buf[]="A test"*/; /* Set the template for the temporary file: */ if(indir[strlen(indir)-1]=='/') tmpname=gal_checkset_malloc_cat(indir, "gnuastroXXXXXX"); else tmpname=gal_checkset_malloc_cat(indir, "/gnuastroXXXXXX"); /* Make a temporary file name and try openning it. */ errno=0; file_d=mkstemp(tmpname); if(file_d==-1) error(EXIT_FAILURE, errno, "cannot write output in the directory " "%s", indir); /* errno=0; printf("\n\n%s\n\n", tmpname); if( write(file_d, buf, strlen(buf)) == -1 ) error(EXIT_FAILURE, errno, "%s: writing to this temporary file to " "check the given '%s' directory", tmpname, indir); */ errno=0; if( close(file_d) == -1 ) error(EXIT_FAILURE, errno, "%s: Closing this temporary file to check " "the given '%s' directory", tmpname, indir); /* Delete the temporary file: */ errno=0; if(unlink(tmpname)==-1) error(EXIT_FAILURE, errno, "%s: removing this temporary file made " "to check the given '%s directory'", tmpname, indir); /* Remove the extra characters that were added for the random name. */ tmpname[strlen(tmpname)-14]='\0'; free(*dirname); *dirname=tmpname; } /* If the given directory exists and is writable, then nothing is done and this function returns 0. If it doesn't, it will be created. If it fails at creating the file, or the file isn't writable it returns a non-zero value: the errno, which can be directly used in 'error'. */ int gal_checkset_mkdir(char *dirname) { int errnum=0; struct stat st={0}; /* See if the directory exists. */ if( stat(dirname, &st) == -1 ) { /* The directory doesn't exist, try making it. */ errno=0; if( mkdir(dirname, 0700) == -1 ) errnum=errno; } else /* The directory exists, see if its writable. */ errnum=checkset_directory_writable(dirname); /* Return the final 'errno'. */ return errnum; } /* Timestamp the file name (or any other string) with a YYYY-MM-DD prefix and a HH-MM-SS suffix. This is useful in making temporary debugging files during a program. The 'filename' is wrapped between the dates so it is easy to sort files by name and easily seperate files by their date and name, where the same files will be stacked regardless of their creation hour. */ char * gal_checkset_timestamp(char *filename, char *newext) { time_t t; struct tm *now; char suffix[20], prefix[20], *top, *rawname, *oldext; /* Parse time */ time( &t ); now=localtime( &t ); strftime(prefix, 20, "%Y-%m-%d_", now); strftime(suffix, 20, "_%H-%M-%S", now); /* If parsing a filename, take care of its parent directory and update the extension. */ top=gal_checkset_dir_part(filename); rawname=gal_checkset_not_dir_part(filename); filename=gal_checkset_suffix_separate(rawname, &oldext); filename=gal_checkset_malloc_cat(filename, suffix); filename=gal_checkset_malloc_cat(prefix, filename); filename=gal_checkset_malloc_cat(top, filename); if(newext) filename=gal_checkset_malloc_cat(filename, newext); else filename=gal_checkset_malloc_cat(filename, oldext); return filename; } ���������������������������������������������������������������������������gnuastro-0.22/lib/color.c���������������������������������������������������������������������������0000644�0001750�0001750�00000077305�14551337306�011033� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions for working with colors. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2022-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/color.h> #include <gnuastro/blank.h> /***********************************************************************/ /************** Names and values *****************/ /***********************************************************************/ /* Return the macros for the extended HTML/CSS colors based on their names: 'https://en.wikipedia.org/wiki/Web_colors#HTML_color_names'.*/ uint8_t gal_color_name_to_id(char *n) { if( !strcasecmp("aliceblue", n)) return GAL_COLOR_ALICEBLUE; else if( !strcasecmp("antiquewhite", n)) return GAL_COLOR_ANTIQUEWHITE; else if( !strcasecmp("aqua", n)) return GAL_COLOR_AQUA; else if( !strcasecmp("aquamarine", n)) return GAL_COLOR_AQUAMARINE; else if( !strcasecmp("azure", n)) return GAL_COLOR_AZURE; else if( !strcasecmp("beige", n)) return GAL_COLOR_BEIGE; else if( !strcasecmp("bisque", n)) return GAL_COLOR_BISQUE; else if( !strcasecmp("black", n)) return GAL_COLOR_BLACK; else if( !strcasecmp("blanchedalmond", n)) return GAL_COLOR_BLANCHEDALMOND; else if( !strcasecmp("blue", n)) return GAL_COLOR_BLUE; else if( !strcasecmp("blueviolet", n)) return GAL_COLOR_BLUEVIOLET; else if( !strcasecmp("brown", n)) return GAL_COLOR_BROWN; else if( !strcasecmp("burlywood", n)) return GAL_COLOR_BURLYWOOD; else if( !strcasecmp("cadetblue", n)) return GAL_COLOR_CADETBLUE; else if( !strcasecmp("chartreuse", n)) return GAL_COLOR_CHARTREUSE; else if( !strcasecmp("chocolate", n)) return GAL_COLOR_CHOCOLATE; else if( !strcasecmp("coral", n)) return GAL_COLOR_CORAL; else if( !strcasecmp("cornflowerblue", n)) return GAL_COLOR_CORNFLOWERBLUE; else if( !strcasecmp("cornsilk", n)) return GAL_COLOR_CORNSILK; else if( !strcasecmp("crimson", n)) return GAL_COLOR_CRIMSON; else if( !strcasecmp("cyan", n)) return GAL_COLOR_CYAN; else if( !strcasecmp("darkblue", n)) return GAL_COLOR_DARKBLUE; else if( !strcasecmp("darkcyan", n)) return GAL_COLOR_DARKCYAN; else if( !strcasecmp("darkgoldenrod", n)) return GAL_COLOR_DARKGOLDENROD; else if( !strcasecmp("darkgray", n)) return GAL_COLOR_DARKGRAY; else if( !strcasecmp("darkgreen", n)) return GAL_COLOR_DARKGREEN; else if( !strcasecmp("darkkhaki", n)) return GAL_COLOR_DARKKHAKI; else if( !strcasecmp("darkmagenta", n)) return GAL_COLOR_DARKMAGENTA; else if( !strcasecmp("darkolivegreen", n)) return GAL_COLOR_DARKOLIVEGREEN; else if( !strcasecmp("darkorange", n)) return GAL_COLOR_DARKORANGE; else if( !strcasecmp("darkorchid", n)) return GAL_COLOR_DARKORCHID; else if( !strcasecmp("darkred", n)) return GAL_COLOR_DARKRED; else if( !strcasecmp("darksalmon", n)) return GAL_COLOR_DARKSALMON; else if( !strcasecmp("darkseagreen", n)) return GAL_COLOR_DARKSEAGREEN; else if( !strcasecmp("darkslateblue", n)) return GAL_COLOR_DARKSLATEBLUE; else if( !strcasecmp("darkslategray", n)) return GAL_COLOR_DARKSLATEGRAY; else if( !strcasecmp("darkturquoise", n)) return GAL_COLOR_DARKTURQUOISE; else if( !strcasecmp("darkviolet", n)) return GAL_COLOR_DARKVIOLET; else if( !strcasecmp("deeppink", n)) return GAL_COLOR_DEEPPINK; else if( !strcasecmp("deepskyblue", n)) return GAL_COLOR_DEEPSKYBLUE; else if( !strcasecmp("dimgray", n)) return GAL_COLOR_DIMGRAY; else if( !strcasecmp("dodgerblue", n)) return GAL_COLOR_DODGERBLUE; else if( !strcasecmp("firebrick", n)) return GAL_COLOR_FIREBRICK; else if( !strcasecmp("floralwhite", n)) return GAL_COLOR_FLORALWHITE; else if( !strcasecmp("forestgreen", n)) return GAL_COLOR_FORESTGREEN; else if( !strcasecmp("fuchsia", n)) return GAL_COLOR_FUCHSIA; else if( !strcasecmp("gainsboro", n)) return GAL_COLOR_GAINSBORO; else if( !strcasecmp("ghostwhite", n)) return GAL_COLOR_GHOSTWHITE; else if( !strcasecmp("gold", n)) return GAL_COLOR_GOLD; else if( !strcasecmp("goldenrod", n)) return GAL_COLOR_GOLDENROD; else if( !strcasecmp("gray", n)) return GAL_COLOR_GRAY; else if( !strcasecmp("green", n)) return GAL_COLOR_GREEN; else if( !strcasecmp("greenyellow", n)) return GAL_COLOR_GREENYELLOW; else if( !strcasecmp("honeydew", n)) return GAL_COLOR_HONEYDEW; else if( !strcasecmp("hotpink", n)) return GAL_COLOR_HOTPINK; else if( !strcasecmp("indianred", n)) return GAL_COLOR_INDIANRED; else if( !strcasecmp("indigo", n)) return GAL_COLOR_INDIGO; else if( !strcasecmp("ivory", n)) return GAL_COLOR_IVORY; else if( !strcasecmp("khaki", n)) return GAL_COLOR_KHAKI; else if( !strcasecmp("lavender", n)) return GAL_COLOR_LAVENDER; else if( !strcasecmp("lavenderblush", n)) return GAL_COLOR_LAVENDERBLUSH; else if( !strcasecmp("lawngreen", n)) return GAL_COLOR_LAWNGREEN; else if( !strcasecmp("lemonchiffon", n)) return GAL_COLOR_LEMONCHIFFON; else if( !strcasecmp("lightblue", n)) return GAL_COLOR_LIGHTBLUE; else if( !strcasecmp("lightcoral", n)) return GAL_COLOR_LIGHTCORAL; else if( !strcasecmp("lightcyan", n)) return GAL_COLOR_LIGHTCYAN; else if( !strcasecmp("lightgoldenrodyellow", n)) return GAL_COLOR_LIGHTGOLDENRODYELLOW; else if( !strcasecmp("lightgray", n)) return GAL_COLOR_LIGHTGRAY; else if( !strcasecmp("lightgreen", n)) return GAL_COLOR_LIGHTGREEN; else if( !strcasecmp("lightpink", n)) return GAL_COLOR_LIGHTPINK; else if( !strcasecmp("lightsalmon", n)) return GAL_COLOR_LIGHTSALMON; else if( !strcasecmp("lightseagreen", n)) return GAL_COLOR_LIGHTSEAGREEN; else if( !strcasecmp("lightskyblue", n)) return GAL_COLOR_LIGHTSKYBLUE; else if( !strcasecmp("lightslategray", n)) return GAL_COLOR_LIGHTSLATEGRAY; else if( !strcasecmp("lightsteelblue", n)) return GAL_COLOR_LIGHTSTEELBLUE; else if( !strcasecmp("lightyellow", n)) return GAL_COLOR_LIGHTYELLOW; else if( !strcasecmp("lime", n)) return GAL_COLOR_LIME; else if( !strcasecmp("limegreen", n)) return GAL_COLOR_LIMEGREEN; else if( !strcasecmp("linen", n)) return GAL_COLOR_LINEN; else if( !strcasecmp("magenta", n)) return GAL_COLOR_MAGENTA; else if( !strcasecmp("maroon", n)) return GAL_COLOR_MAROON; else if( !strcasecmp("mediumaquamarine", n)) return GAL_COLOR_MEDIUMAQUAMARINE; else if( !strcasecmp("mediumblue", n)) return GAL_COLOR_MEDIUMBLUE; else if( !strcasecmp("mediumorchid", n)) return GAL_COLOR_MEDIUMORCHID; else if( !strcasecmp("mediumpurple", n)) return GAL_COLOR_MEDIUMPURPLE; else if( !strcasecmp("mediumseagreen", n)) return GAL_COLOR_MEDIUMSEAGREEN; else if( !strcasecmp("mediumslateblue", n)) return GAL_COLOR_MEDIUMSLATEBLUE; else if( !strcasecmp("mediumspringgreen", n)) return GAL_COLOR_MEDIUMSPRINGGREEN; else if( !strcasecmp("mediumturquoise", n)) return GAL_COLOR_MEDIUMTURQUOISE; else if( !strcasecmp("mediumvioletred", n)) return GAL_COLOR_MEDIUMVIOLETRED; else if( !strcasecmp("midnightblue", n)) return GAL_COLOR_MIDNIGHTBLUE; else if( !strcasecmp("mintcream", n)) return GAL_COLOR_MINTCREAM; else if( !strcasecmp("mistyrose", n)) return GAL_COLOR_MISTYROSE; else if( !strcasecmp("moccasin", n)) return GAL_COLOR_MOCCASIN; else if( !strcasecmp("navajowhite", n)) return GAL_COLOR_NAVAJOWHITE; else if( !strcasecmp("navy", n)) return GAL_COLOR_NAVY; else if( !strcasecmp("oldlace", n)) return GAL_COLOR_OLDLACE; else if( !strcasecmp("olive", n)) return GAL_COLOR_OLIVE; else if( !strcasecmp("olivedrab", n)) return GAL_COLOR_OLIVEDRAB; else if( !strcasecmp("orange", n)) return GAL_COLOR_ORANGE; else if( !strcasecmp("orangered", n)) return GAL_COLOR_ORANGERED; else if( !strcasecmp("orchid", n)) return GAL_COLOR_ORCHID; else if( !strcasecmp("palegoldenrod", n)) return GAL_COLOR_PALEGOLDENROD; else if( !strcasecmp("palegreen", n)) return GAL_COLOR_PALEGREEN; else if( !strcasecmp("paleturquoise", n)) return GAL_COLOR_PALETURQUOISE; else if( !strcasecmp("palevioletred", n)) return GAL_COLOR_PALEVIOLETRED; else if( !strcasecmp("papayawhip", n)) return GAL_COLOR_PAPAYAWHIP; else if( !strcasecmp("peachpuff", n)) return GAL_COLOR_PEACHPUFF; else if( !strcasecmp("peru", n)) return GAL_COLOR_PERU; else if( !strcasecmp("pink", n)) return GAL_COLOR_PINK; else if( !strcasecmp("plum", n)) return GAL_COLOR_PLUM; else if( !strcasecmp("powderblue", n)) return GAL_COLOR_POWDERBLUE; else if( !strcasecmp("purple", n)) return GAL_COLOR_PURPLE; else if( !strcasecmp("red", n)) return GAL_COLOR_RED; else if( !strcasecmp("rosybrown", n)) return GAL_COLOR_ROSYBROWN; else if( !strcasecmp("royalblue", n)) return GAL_COLOR_ROYALBLUE; else if( !strcasecmp("saddlebrown", n)) return GAL_COLOR_SADDLEBROWN; else if( !strcasecmp("salmon", n)) return GAL_COLOR_SALMON; else if( !strcasecmp("sandybrown", n)) return GAL_COLOR_SANDYBROWN; else if( !strcasecmp("seagreen", n)) return GAL_COLOR_SEAGREEN; else if( !strcasecmp("seashell", n)) return GAL_COLOR_SEASHELL; else if( !strcasecmp("sienna", n)) return GAL_COLOR_SIENNA; else if( !strcasecmp("silver", n)) return GAL_COLOR_SILVER; else if( !strcasecmp("skyblue", n)) return GAL_COLOR_SKYBLUE; else if( !strcasecmp("slateblue", n)) return GAL_COLOR_SLATEBLUE; else if( !strcasecmp("slategray", n)) return GAL_COLOR_SLATEGRAY; else if( !strcasecmp("snow", n)) return GAL_COLOR_SNOW; else if( !strcasecmp("springgreen", n)) return GAL_COLOR_SPRINGGREEN; else if( !strcasecmp("steelblue", n)) return GAL_COLOR_STEELBLUE; else if( !strcasecmp("tan", n)) return GAL_COLOR_TAN; else if( !strcasecmp("teal", n)) return GAL_COLOR_TEAL; else if( !strcasecmp("thistle", n)) return GAL_COLOR_THISTLE; else if( !strcasecmp("tomato", n)) return GAL_COLOR_TOMATO; else if( !strcasecmp("turquoise", n)) return GAL_COLOR_TURQUOISE; else if( !strcasecmp("violet", n)) return GAL_COLOR_VIOLET; else if( !strcasecmp("wheat", n)) return GAL_COLOR_WHEAT; else if( !strcasecmp("white", n)) return GAL_COLOR_WHITE; else if( !strcasecmp("whitesmoke", n)) return GAL_COLOR_WHITESMOKE; else if( !strcasecmp("yellow", n)) return GAL_COLOR_YELLOW; else if( !strcasecmp("yellowgreen", n)) return GAL_COLOR_YELLOWGREEN; else printf("%s: name '%s' is not recognized. Gnuastro uses the " "extended HTML color names described in the following " "link (the names are not case sensitive in Gnuastro):" "https://en.wikipedia.org/wiki/Web_colors#Extended_colors\n", __func__, n); /* Control should not reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to find " "and solve the problem. Control should not reach this part " "of the function", __func__, PACKAGE_BUGREPORT); return GAL_COLOR_INVALID; } /* Return the name of each color. */ char * gal_color_id_to_name(uint8_t color) { switch(color) { case GAL_COLOR_ALICEBLUE: return "aliceblue"; case GAL_COLOR_ANTIQUEWHITE: return "antiquewhite"; case GAL_COLOR_AQUA: return "aqua"; case GAL_COLOR_AQUAMARINE: return "aquamarine"; case GAL_COLOR_AZURE: return "azure"; case GAL_COLOR_BEIGE: return "beige"; case GAL_COLOR_BISQUE: return "bisque"; case GAL_COLOR_BLACK: return "black"; case GAL_COLOR_BLANCHEDALMOND: return "blanchedalmond"; case GAL_COLOR_BLUE: return "blue"; case GAL_COLOR_BLUEVIOLET: return "blueviolet"; case GAL_COLOR_BROWN: return "brown"; case GAL_COLOR_BURLYWOOD: return "burlywood"; case GAL_COLOR_CADETBLUE: return "cadetblue"; case GAL_COLOR_CHARTREUSE: return "chartreuse"; case GAL_COLOR_CHOCOLATE: return "chocolate"; case GAL_COLOR_CORAL: return "coral"; case GAL_COLOR_CORNFLOWERBLUE: return "cornflowerblue"; case GAL_COLOR_CORNSILK: return "cornsilk"; case GAL_COLOR_CRIMSON: return "crimson"; case GAL_COLOR_CYAN: return "cyan"; case GAL_COLOR_DARKBLUE: return "darkblue"; case GAL_COLOR_DARKCYAN: return "darkcyan"; case GAL_COLOR_DARKGOLDENROD: return "darkgoldenrod"; case GAL_COLOR_DARKGRAY: return "darkgray"; case GAL_COLOR_DARKGREEN: return "darkgreen"; case GAL_COLOR_DARKKHAKI: return "darkkhaki"; case GAL_COLOR_DARKMAGENTA: return "darkmagenta"; case GAL_COLOR_DARKOLIVEGREEN: return "darkolivegreen"; case GAL_COLOR_DARKORANGE: return "darkorange"; case GAL_COLOR_DARKORCHID: return "darkorchid"; case GAL_COLOR_DARKRED: return "darkred"; case GAL_COLOR_DARKSALMON: return "darksalmon"; case GAL_COLOR_DARKSEAGREEN: return "darkseagreen"; case GAL_COLOR_DARKSLATEBLUE: return "darkslateblue"; case GAL_COLOR_DARKSLATEGRAY: return "darkslategray"; case GAL_COLOR_DARKTURQUOISE: return "darkturquoise"; case GAL_COLOR_DARKVIOLET: return "darkviolet"; case GAL_COLOR_DEEPPINK: return "deeppink"; case GAL_COLOR_DEEPSKYBLUE: return "deepskyblue"; case GAL_COLOR_DIMGRAY: return "dimgray"; case GAL_COLOR_DODGERBLUE: return "dodgerblue"; case GAL_COLOR_FIREBRICK: return "firebrick"; case GAL_COLOR_FLORALWHITE: return "floralwhite"; case GAL_COLOR_FORESTGREEN: return "forestgreen"; case GAL_COLOR_FUCHSIA: return "fuchsia"; case GAL_COLOR_GAINSBORO: return "gainsboro"; case GAL_COLOR_GHOSTWHITE: return "ghostwhite"; case GAL_COLOR_GOLD: return "gold"; case GAL_COLOR_GOLDENROD: return "goldenrod"; case GAL_COLOR_GRAY: return "gray"; case GAL_COLOR_GREEN: return "green"; case GAL_COLOR_GREENYELLOW: return "greenyellow"; case GAL_COLOR_HONEYDEW: return "honeydew"; case GAL_COLOR_HOTPINK: return "hotpink"; case GAL_COLOR_INDIANRED: return "indianred"; case GAL_COLOR_INDIGO: return "indigo"; case GAL_COLOR_IVORY: return "ivory"; case GAL_COLOR_KHAKI: return "khaki"; case GAL_COLOR_LAVENDER: return "lavender"; case GAL_COLOR_LAVENDERBLUSH: return "lavenderblush"; case GAL_COLOR_LAWNGREEN: return "lawngreen"; case GAL_COLOR_LEMONCHIFFON: return "lemonchiffon"; case GAL_COLOR_LIGHTBLUE: return "lightblue"; case GAL_COLOR_LIGHTCORAL: return "lightcoral"; case GAL_COLOR_LIGHTCYAN: return "lightcyan"; case GAL_COLOR_LIGHTGOLDENRODYELLOW: return "lightgoldenrodyellow"; case GAL_COLOR_LIGHTGRAY: return "lightgray"; case GAL_COLOR_LIGHTGREEN: return "lightgreen"; case GAL_COLOR_LIGHTPINK: return "lightpink"; case GAL_COLOR_LIGHTSALMON: return "lightsalmon"; case GAL_COLOR_LIGHTSEAGREEN: return "lightseagreen"; case GAL_COLOR_LIGHTSKYBLUE: return "lightskyblue"; case GAL_COLOR_LIGHTSLATEGRAY: return "lightslategray"; case GAL_COLOR_LIGHTSTEELBLUE: return "lightsteelblue"; case GAL_COLOR_LIGHTYELLOW: return "lightyellow"; case GAL_COLOR_LIME: return "lime"; case GAL_COLOR_LIMEGREEN: return "limegreen"; case GAL_COLOR_LINEN: return "linen"; case GAL_COLOR_MAGENTA: return "magenta"; case GAL_COLOR_MAROON: return "maroon"; case GAL_COLOR_MEDIUMAQUAMARINE: return "mediumaquamarine"; case GAL_COLOR_MEDIUMBLUE: return "mediumblue"; case GAL_COLOR_MEDIUMORCHID: return "mediumorchid"; case GAL_COLOR_MEDIUMPURPLE: return "mediumpurple"; case GAL_COLOR_MEDIUMSEAGREEN: return "mediumseagreen"; case GAL_COLOR_MEDIUMSLATEBLUE: return "mediumslateblue"; case GAL_COLOR_MEDIUMSPRINGGREEN: return "mediumspringgreen"; case GAL_COLOR_MEDIUMTURQUOISE: return "mediumturquoise"; case GAL_COLOR_MEDIUMVIOLETRED: return "mediumvioletred"; case GAL_COLOR_MIDNIGHTBLUE: return "midnightblue"; case GAL_COLOR_MINTCREAM: return "mintcream"; case GAL_COLOR_MISTYROSE: return "mistyrose"; case GAL_COLOR_MOCCASIN: return "moccasin"; case GAL_COLOR_NAVAJOWHITE: return "navajowhite"; case GAL_COLOR_NAVY: return "navy"; case GAL_COLOR_OLDLACE: return "oldlace"; case GAL_COLOR_OLIVE: return "olive"; case GAL_COLOR_OLIVEDRAB: return "olivedrab"; case GAL_COLOR_ORANGE: return "orange"; case GAL_COLOR_ORANGERED: return "orangered"; case GAL_COLOR_ORCHID: return "orchid"; case GAL_COLOR_PALEGOLDENROD: return "palegoldenrod"; case GAL_COLOR_PALEGREEN: return "palegreen"; case GAL_COLOR_PALETURQUOISE: return "paleturquoise"; case GAL_COLOR_PALEVIOLETRED: return "palevioletred"; case GAL_COLOR_PAPAYAWHIP: return "papayawhip"; case GAL_COLOR_PEACHPUFF: return "peachpuff"; case GAL_COLOR_PERU: return "peru"; case GAL_COLOR_PINK: return "pink"; case GAL_COLOR_PLUM: return "plum"; case GAL_COLOR_POWDERBLUE: return "powderblue"; case GAL_COLOR_PURPLE: return "purple"; case GAL_COLOR_RED: return "red"; case GAL_COLOR_ROSYBROWN: return "rosybrown"; case GAL_COLOR_ROYALBLUE: return "royalblue"; case GAL_COLOR_SADDLEBROWN: return "saddlebrown"; case GAL_COLOR_SALMON: return "salmon"; case GAL_COLOR_SANDYBROWN: return "sandybrown"; case GAL_COLOR_SEAGREEN: return "seagreen"; case GAL_COLOR_SEASHELL: return "seashell"; case GAL_COLOR_SIENNA: return "sienna"; case GAL_COLOR_SILVER: return "silver"; case GAL_COLOR_SKYBLUE: return "skyblue"; case GAL_COLOR_SLATEBLUE: return "slateblue"; case GAL_COLOR_SLATEGRAY: return "slategray"; case GAL_COLOR_SNOW: return "snow"; case GAL_COLOR_SPRINGGREEN: return "springgreen"; case GAL_COLOR_STEELBLUE: return "steelblue"; case GAL_COLOR_TAN: return "tan"; case GAL_COLOR_TEAL: return "teal"; case GAL_COLOR_THISTLE: return "thistle"; case GAL_COLOR_TOMATO: return "tomato"; case GAL_COLOR_TURQUOISE: return "turquoise"; case GAL_COLOR_VIOLET: return "violet"; case GAL_COLOR_WHEAT: return "wheat"; case GAL_COLOR_WHITE: return "white"; case GAL_COLOR_WHITESMOKE: return "whitesmoke"; case GAL_COLOR_YELLOW: return "yellow"; case GAL_COLOR_YELLOWGREEN: return "yellowgreen"; default: error(EXIT_FAILURE, 0, "%s: color id '%u' is not recognized", __func__, color); } /* Control should not reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to find " "and solve the problem. Control should not reach this part " "of the function", __func__, PACKAGE_BUGREPORT); return GAL_BLANK_STRING; } /* Return the fractional RGB color space of pre-defined colors. We are using 'n' for "name" and 'f' for RGB-Fractional value to help in readability. The names and values are taken from the extended HTML/CSS colors: https://en.wikipedia.org/wiki/Web_colors#HTML_color_names. After copying the names and values into a plain-text file (by mouse, group by group, 'color.txt'), I converted it to the format used in this function with the following AWK command: awk '{printf "case GAL_COLOR_%s: ", toupper($1); \ printf "f[0]=%.2f; f[1]=%.2f; f[2]=%.2f; break;\n", \ $5/255, $6/255, $7/255}' colors.txt \ | sort \ | awk '{printf "%s %-25s %s %s %s %s\n", \ $1, $2, $3, $4, $5, $6}' */ void gal_color_in_rgb(uint8_t color, float *f) { switch(color) { case GAL_COLOR_ALICEBLUE: f[0]=0.94; f[1]=0.97; f[2]=1.00; break; case GAL_COLOR_ANTIQUEWHITE: f[0]=0.98; f[1]=0.92; f[2]=0.84; break; case GAL_COLOR_AQUA: f[0]=0.00; f[1]=1.00; f[2]=1.00; break; case GAL_COLOR_AQUAMARINE: f[0]=0.50; f[1]=1.00; f[2]=0.83; break; case GAL_COLOR_AZURE: f[0]=0.94; f[1]=1.00; f[2]=1.00; break; case GAL_COLOR_BEIGE: f[0]=0.96; f[1]=0.96; f[2]=0.86; break; case GAL_COLOR_BISQUE: f[0]=1.00; f[1]=0.89; f[2]=0.77; break; case GAL_COLOR_BLACK: f[0]=0.00; f[1]=0.00; f[2]=0.00; break; case GAL_COLOR_BLANCHEDALMOND: f[0]=1.00; f[1]=0.92; f[2]=0.80; break; case GAL_COLOR_BLUE: f[0]=0.00; f[1]=0.00; f[2]=1.00; break; case GAL_COLOR_BLUEVIOLET: f[0]=0.54; f[1]=0.17; f[2]=0.89; break; case GAL_COLOR_BROWN: f[0]=0.65; f[1]=0.16; f[2]=0.16; break; case GAL_COLOR_BURLYWOOD: f[0]=0.87; f[1]=0.72; f[2]=0.53; break; case GAL_COLOR_CADETBLUE: f[0]=0.37; f[1]=0.62; f[2]=0.63; break; case GAL_COLOR_CHARTREUSE: f[0]=0.50; f[1]=1.00; f[2]=0.00; break; case GAL_COLOR_CHOCOLATE: f[0]=0.82; f[1]=0.41; f[2]=0.12; break; case GAL_COLOR_CORAL: f[0]=1.00; f[1]=0.50; f[2]=0.31; break; case GAL_COLOR_CORNFLOWERBLUE: f[0]=0.39; f[1]=0.58; f[2]=0.93; break; case GAL_COLOR_CORNSILK: f[0]=1.00; f[1]=0.97; f[2]=0.86; break; case GAL_COLOR_CRIMSON: f[0]=0.86; f[1]=0.08; f[2]=0.24; break; case GAL_COLOR_CYAN: f[0]=0.00; f[1]=1.00; f[2]=1.00; break; case GAL_COLOR_DARKBLUE: f[0]=0.00; f[1]=0.00; f[2]=0.55; break; case GAL_COLOR_DARKCYAN: f[0]=0.00; f[1]=0.55; f[2]=0.55; break; case GAL_COLOR_DARKGOLDENROD: f[0]=0.72; f[1]=0.53; f[2]=0.04; break; case GAL_COLOR_DARKGRAY: f[0]=0.66; f[1]=0.66; f[2]=0.66; break; case GAL_COLOR_DARKGREEN: f[0]=0.00; f[1]=0.39; f[2]=0.00; break; case GAL_COLOR_DARKKHAKI: f[0]=0.74; f[1]=0.72; f[2]=0.42; break; case GAL_COLOR_DARKMAGENTA: f[0]=0.55; f[1]=0.00; f[2]=0.55; break; case GAL_COLOR_DARKOLIVEGREEN: f[0]=0.33; f[1]=0.42; f[2]=0.18; break; case GAL_COLOR_DARKORANGE: f[0]=1.00; f[1]=0.55; f[2]=0.00; break; case GAL_COLOR_DARKORCHID: f[0]=0.60; f[1]=0.20; f[2]=0.80; break; case GAL_COLOR_DARKRED: f[0]=0.55; f[1]=0.00; f[2]=0.00; break; case GAL_COLOR_DARKSALMON: f[0]=0.91; f[1]=0.59; f[2]=0.48; break; case GAL_COLOR_DARKSEAGREEN: f[0]=0.56; f[1]=0.74; f[2]=0.56; break; case GAL_COLOR_DARKSLATEBLUE: f[0]=0.28; f[1]=0.24; f[2]=0.55; break; case GAL_COLOR_DARKSLATEGRAY: f[0]=0.18; f[1]=0.31; f[2]=0.31; break; case GAL_COLOR_DARKTURQUOISE: f[0]=0.00; f[1]=0.81; f[2]=0.82; break; case GAL_COLOR_DARKVIOLET: f[0]=0.58; f[1]=0.00; f[2]=0.83; break; case GAL_COLOR_DEEPPINK: f[0]=1.00; f[1]=0.08; f[2]=0.58; break; case GAL_COLOR_DEEPSKYBLUE: f[0]=0.00; f[1]=0.75; f[2]=1.00; break; case GAL_COLOR_DIMGRAY: f[0]=0.41; f[1]=0.41; f[2]=0.41; break; case GAL_COLOR_DODGERBLUE: f[0]=0.12; f[1]=0.56; f[2]=1.00; break; case GAL_COLOR_FIREBRICK: f[0]=0.70; f[1]=0.13; f[2]=0.13; break; case GAL_COLOR_FLORALWHITE: f[0]=1.00; f[1]=0.98; f[2]=0.94; break; case GAL_COLOR_FORESTGREEN: f[0]=0.13; f[1]=0.55; f[2]=0.13; break; case GAL_COLOR_FUCHSIA: f[0]=1.00; f[1]=0.00; f[2]=1.00; break; case GAL_COLOR_GAINSBORO: f[0]=0.86; f[1]=0.86; f[2]=0.86; break; case GAL_COLOR_GHOSTWHITE: f[0]=0.97; f[1]=0.97; f[2]=1.00; break; case GAL_COLOR_GOLDENROD: f[0]=0.85; f[1]=0.65; f[2]=0.13; break; case GAL_COLOR_GOLD: f[0]=1.00; f[1]=0.84; f[2]=0.00; break; case GAL_COLOR_GRAY: f[0]=0.50; f[1]=0.50; f[2]=0.50; break; case GAL_COLOR_GREEN: f[0]=0.00; f[1]=0.50; f[2]=0.00; break; case GAL_COLOR_GREENYELLOW: f[0]=0.68; f[1]=1.00; f[2]=0.18; break; case GAL_COLOR_HONEYDEW: f[0]=0.94; f[1]=1.00; f[2]=0.94; break; case GAL_COLOR_HOTPINK: f[0]=1.00; f[1]=0.41; f[2]=0.71; break; case GAL_COLOR_INDIANRED: f[0]=0.80; f[1]=0.36; f[2]=0.36; break; case GAL_COLOR_INDIGO: f[0]=0.29; f[1]=0.00; f[2]=0.51; break; case GAL_COLOR_IVORY: f[0]=1.00; f[1]=1.00; f[2]=0.94; break; case GAL_COLOR_KHAKI: f[0]=0.94; f[1]=0.90; f[2]=0.55; break; case GAL_COLOR_LAVENDERBLUSH: f[0]=1.00; f[1]=0.94; f[2]=0.96; break; case GAL_COLOR_LAVENDER: f[0]=0.90; f[1]=0.90; f[2]=0.98; break; case GAL_COLOR_LAWNGREEN: f[0]=0.49; f[1]=0.99; f[2]=0.00; break; case GAL_COLOR_LEMONCHIFFON: f[0]=1.00; f[1]=0.98; f[2]=0.80; break; case GAL_COLOR_LIGHTBLUE: f[0]=0.68; f[1]=0.85; f[2]=0.90; break; case GAL_COLOR_LIGHTCORAL: f[0]=0.94; f[1]=0.50; f[2]=0.50; break; case GAL_COLOR_LIGHTCYAN: f[0]=0.88; f[1]=1.00; f[2]=1.00; break; case GAL_COLOR_LIGHTGOLDENRODYELLOW: f[0]=0.98; f[1]=0.98; f[2]=0.82; break; case GAL_COLOR_LIGHTGRAY: f[0]=0.83; f[1]=0.83; f[2]=0.83; break; case GAL_COLOR_LIGHTGREEN: f[0]=0.56; f[1]=0.93; f[2]=0.56; break; case GAL_COLOR_LIGHTPINK: f[0]=1.00; f[1]=0.71; f[2]=0.76; break; case GAL_COLOR_LIGHTSALMON: f[0]=1.00; f[1]=0.63; f[2]=0.48; break; case GAL_COLOR_LIGHTSEAGREEN: f[0]=0.13; f[1]=0.70; f[2]=0.67; break; case GAL_COLOR_LIGHTSKYBLUE: f[0]=0.53; f[1]=0.81; f[2]=0.98; break; case GAL_COLOR_LIGHTSLATEGRAY: f[0]=0.47; f[1]=0.53; f[2]=0.60; break; case GAL_COLOR_LIGHTSTEELBLUE: f[0]=0.69; f[1]=0.77; f[2]=0.87; break; case GAL_COLOR_LIGHTYELLOW: f[0]=1.00; f[1]=1.00; f[2]=0.88; break; case GAL_COLOR_LIME: f[0]=0.00; f[1]=1.00; f[2]=0.00; break; case GAL_COLOR_LIMEGREEN: f[0]=0.20; f[1]=0.80; f[2]=0.20; break; case GAL_COLOR_LINEN: f[0]=0.98; f[1]=0.94; f[2]=0.90; break; case GAL_COLOR_MAGENTA: f[0]=1.00; f[1]=0.00; f[2]=1.00; break; case GAL_COLOR_MAROON: f[0]=0.50; f[1]=0.00; f[2]=0.00; break; case GAL_COLOR_MEDIUMAQUAMARINE: f[0]=0.40; f[1]=0.80; f[2]=0.67; break; case GAL_COLOR_MEDIUMBLUE: f[0]=0.00; f[1]=0.00; f[2]=0.80; break; case GAL_COLOR_MEDIUMORCHID: f[0]=0.73; f[1]=0.33; f[2]=0.83; break; case GAL_COLOR_MEDIUMPURPLE: f[0]=0.58; f[1]=0.44; f[2]=0.86; break; case GAL_COLOR_MEDIUMSEAGREEN: f[0]=0.24; f[1]=0.70; f[2]=0.44; break; case GAL_COLOR_MEDIUMSLATEBLUE: f[0]=0.48; f[1]=0.41; f[2]=0.93; break; case GAL_COLOR_MEDIUMSPRINGGREEN: f[0]=0.00; f[1]=0.98; f[2]=0.60; break; case GAL_COLOR_MEDIUMTURQUOISE: f[0]=0.28; f[1]=0.82; f[2]=0.80; break; case GAL_COLOR_MEDIUMVIOLETRED: f[0]=0.78; f[1]=0.08; f[2]=0.52; break; case GAL_COLOR_MIDNIGHTBLUE: f[0]=0.10; f[1]=0.10; f[2]=0.44; break; case GAL_COLOR_MINTCREAM: f[0]=0.96; f[1]=1.00; f[2]=0.98; break; case GAL_COLOR_MISTYROSE: f[0]=1.00; f[1]=0.89; f[2]=0.88; break; case GAL_COLOR_MOCCASIN: f[0]=1.00; f[1]=0.89; f[2]=0.71; break; case GAL_COLOR_NAVAJOWHITE: f[0]=1.00; f[1]=0.87; f[2]=0.68; break; case GAL_COLOR_NAVY: f[0]=0.00; f[1]=0.00; f[2]=0.50; break; case GAL_COLOR_OLDLACE: f[0]=0.99; f[1]=0.96; f[2]=0.90; break; case GAL_COLOR_OLIVEDRAB: f[0]=0.42; f[1]=0.56; f[2]=0.14; break; case GAL_COLOR_OLIVE: f[0]=0.50; f[1]=0.50; f[2]=0.00; break; case GAL_COLOR_ORANGE: f[0]=1.00; f[1]=0.65; f[2]=0.00; break; case GAL_COLOR_ORANGERED: f[0]=1.00; f[1]=0.27; f[2]=0.00; break; case GAL_COLOR_ORCHID: f[0]=0.85; f[1]=0.44; f[2]=0.84; break; case GAL_COLOR_PALEGOLDENROD: f[0]=0.93; f[1]=0.91; f[2]=0.67; break; case GAL_COLOR_PALEGREEN: f[0]=0.60; f[1]=0.98; f[2]=0.60; break; case GAL_COLOR_PALETURQUOISE: f[0]=0.69; f[1]=0.93; f[2]=0.93; break; case GAL_COLOR_PALEVIOLETRED: f[0]=0.86; f[1]=0.44; f[2]=0.58; break; case GAL_COLOR_PAPAYAWHIP: f[0]=1.00; f[1]=0.94; f[2]=0.84; break; case GAL_COLOR_PEACHPUFF: f[0]=1.00; f[1]=0.85; f[2]=0.73; break; case GAL_COLOR_PERU: f[0]=0.80; f[1]=0.52; f[2]=0.25; break; case GAL_COLOR_PINK: f[0]=1.00; f[1]=0.75; f[2]=0.80; break; case GAL_COLOR_PLUM: f[0]=0.87; f[1]=0.63; f[2]=0.87; break; case GAL_COLOR_POWDERBLUE: f[0]=0.69; f[1]=0.88; f[2]=0.90; break; case GAL_COLOR_PURPLE: f[0]=0.50; f[1]=0.00; f[2]=0.50; break; case GAL_COLOR_RED: f[0]=1.00; f[1]=0.00; f[2]=0.00; break; case GAL_COLOR_ROSYBROWN: f[0]=0.74; f[1]=0.56; f[2]=0.56; break; case GAL_COLOR_ROYALBLUE: f[0]=0.25; f[1]=0.41; f[2]=0.88; break; case GAL_COLOR_SADDLEBROWN: f[0]=0.55; f[1]=0.27; f[2]=0.07; break; case GAL_COLOR_SALMON: f[0]=0.98; f[1]=0.50; f[2]=0.45; break; case GAL_COLOR_SANDYBROWN: f[0]=0.96; f[1]=0.64; f[2]=0.38; break; case GAL_COLOR_SEAGREEN: f[0]=0.18; f[1]=0.55; f[2]=0.34; break; case GAL_COLOR_SEASHELL: f[0]=1.00; f[1]=0.96; f[2]=0.93; break; case GAL_COLOR_SIENNA: f[0]=0.63; f[1]=0.32; f[2]=0.18; break; case GAL_COLOR_SILVER: f[0]=0.75; f[1]=0.75; f[2]=0.75; break; case GAL_COLOR_SKYBLUE: f[0]=0.53; f[1]=0.81; f[2]=0.92; break; case GAL_COLOR_SLATEBLUE: f[0]=0.42; f[1]=0.35; f[2]=0.80; break; case GAL_COLOR_SLATEGRAY: f[0]=0.44; f[1]=0.50; f[2]=0.56; break; case GAL_COLOR_SNOW: f[0]=1.00; f[1]=0.98; f[2]=0.98; break; case GAL_COLOR_SPRINGGREEN: f[0]=0.00; f[1]=1.00; f[2]=0.50; break; case GAL_COLOR_STEELBLUE: f[0]=0.27; f[1]=0.51; f[2]=0.71; break; case GAL_COLOR_TAN: f[0]=0.82; f[1]=0.71; f[2]=0.55; break; case GAL_COLOR_TEAL: f[0]=0.00; f[1]=0.50; f[2]=0.50; break; case GAL_COLOR_THISTLE: f[0]=0.85; f[1]=0.75; f[2]=0.85; break; case GAL_COLOR_TOMATO: f[0]=1.00; f[1]=0.39; f[2]=0.28; break; case GAL_COLOR_TURQUOISE: f[0]=0.25; f[1]=0.88; f[2]=0.82; break; case GAL_COLOR_VIOLET: f[0]=0.93; f[1]=0.51; f[2]=0.93; break; case GAL_COLOR_WHEAT: f[0]=0.96; f[1]=0.87; f[2]=0.70; break; case GAL_COLOR_WHITE: f[0]=1.00; f[1]=1.00; f[2]=1.00; break; case GAL_COLOR_WHITESMOKE: f[0]=0.96; f[1]=0.96; f[2]=0.96; break; case GAL_COLOR_YELLOW: f[0]=1.00; f[1]=1.00; f[2]=0.00; break; case GAL_COLOR_YELLOWGREEN: f[0]=0.60; f[1]=0.80; f[2]=0.20; break; default: error(EXIT_FAILURE, 0, "%s: code '%u' doesn't correspond to " "any recognized color", __func__, color); } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/convolve.c������������������������������������������������������������������������0000644�0001750�0001750�00000054603�14551337306�011544� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Convolve -- Convolve a dataset with a given kernel. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnuastro/list.h> #include <gnuastro/tile.h> #include <gnuastro/threads.h> #include <gnuastro/pointer.h> #include <gnuastro/convolve.h> #include <gnuastro/dimension.h> #include <gnuastro-internal/checkset.h> /*********************************************************************/ /******************** Utilities ********************/ /*********************************************************************/ /* See if the tile is on the edge of the hosted region or not. It doesn't matter if the host is the allocated block of memory or a region in it (a channel). */ static int convolve_tile_is_on_edge(size_t *h, size_t *start_end_coord, size_t *k, size_t ndim) { size_t *s=start_end_coord, *e=start_end_coord+ndim, *kf=k+ndim; /* If the starting point of the tile is smaller than the half-kernel length along that dimension, then the tile is on the edge. If the end of the tile in this dimension added with the half-kernel length along that dimension is equal to or larger than the host's size, then the tile is on the edge. */ do if( (*s++ < *k/2) || (*e++ + *k/2 >= *h++) ) return 1; while(++k<kf); /* If control reaches here, then this is a central tile. */ return 0; } /*********************************************************************/ /******************** Spatial convolution ********************/ /*********************************************************************/ /* Each thread needs one of these structures. */ struct per_thread_spatial_prm { /* Internally stored/used values. */ size_t id; /* ID of tile being operatred on. */ gal_data_t *tile; /* Tile this thread is working on. */ gal_data_t *i_overlap; /* Overlap tile over input dataset. */ gal_data_t *k_overlap; /* Overlap tile over kernel dataset. */ size_t *overlap_start; /* Starting coordinate of kernel overlap. */ size_t *kernel_start; /* Kernel starting point. */ size_t *host_start; /* Starting coordinate of host. */ size_t *pix; /* 2*ndim: starting and ending of tile, */ /* Later, just the pixel being convolved. */ int on_edge; /* If the tile is on the edge or not. */ gal_data_t *host; /* Size of host (channel or block). */ struct spatial_params *cprm; /* Link to main structure for all threads. */ }; /* This is for the full list. */ struct spatial_params { /* Main input/output parameters. */ gal_data_t *out; /* Output data structure. */ gal_data_t *tiles; /* Tiles over the input image. */ gal_data_t *block; /* Pointer to block for this tile. */ gal_data_t *kernel; /* Kernel to convolve with input. */ gal_data_t *tocorrect; /* (possible) convolved image to correct. */ int convoverch; /* Ignore channel edges in convolution. */ int edgecorrection; /* Correct convolution's edge effects. */ uint8_t conv_on_blank; /* Do convolution over blank pixels also. */ struct per_thread_spatial_prm *pprm; /* Array of per-thread parameters. */ }; /* Define the overlap of the kernel and image over this part of the image, the necessary input image parameters are stored in 'overlap' (its 'array' and 'dsize' elements). */ static int convolve_spatial_overlap(struct per_thread_spatial_prm *pprm, int tocorrect) { struct spatial_params *cprm=pprm->cprm; gal_data_t *block=cprm->block, *kernel=cprm->kernel; size_t *dsize = tocorrect ? block->dsize : pprm->host->dsize; size_t ndim=block->ndim; size_t *kd=pprm->k_overlap->dsize; size_t *pp, *ppf, *hs, increment, size=1; size_t *h=dsize, *os=pprm->overlap_start; size_t *p, *pf, *od=pprm->i_overlap->dsize; size_t *k=kernel->dsize, *ks=pprm->kernel_start; int full_overlap=1, dim_full_overlap, is_start, is_end; /* In to-correct mode, the pix position needs to be relative to the block. */ if(tocorrect) { hs=pprm->host_start; ppf=(pp=pprm->pix)+ndim; do *pp += *hs++; while(++pp<ppf); } /* Coordinate to start convolution for this pixel. */ pf = (p=pprm->pix) + ndim; do { /* Initialize the overlap for this dimension (we'll assume it overlaps because this is the most common case usually). */ dim_full_overlap=1; /* When the tile is on the edge, some pixels in it can have full overlap. So using the 'dim_full_overlap', we will do the same thing we do for the tiles that don't overlap for them. When 'tocorrect!=0', then only pixels that are on the edge of the tile will get to this point, so it must always be checked. */ if( tocorrect ? 1 : pprm->on_edge ) { /* See if this pixel is on the start and/or end of the dimension relative to the kernel. */ is_start = *p < *k/2; is_end = (*p + *k/2) >= *h; if( is_start || is_end ) { /* Overlapping with the outside. With the start: assume that in this dimension, the pixel is at position 2, while the kernel is 11 pixels wide (or 5 pixels in half-width). As seen below, the kernel should start from pixel '5-2=3' in this dimension and the overlap size should decrease by the same amount. image: 0 1 2 3 4 5 6 7 8 9 ... pixel: p kernel: 0 1 2 3 4 5 6 7 8 9 10 With the end: Similar to above, but assume the pixel is two pixels away from the edge of a 100-pixel image. We are no longer worried about the overlap or kernel starting point, it is the width that we need to decrease it by: 97 + 5 - 100 + 1 : The '1' is because we want the pixel immediately after the end. image: ... 92 93 94 95 96 97 98 99 | 100 101 102 pixel: p kernel: 0 1 2 3 4 5 6 7 8 | 9 10 */ *ks++ = is_start ? *k/2 - *p : 0; *os++ = is_start ? 0 : *p - *k/2; /* We will start with the full kernel width, then decrease it if the pixel is too close to the start or end along this dimension. Note that the host array/image might actually be smaller than kernel, so both cases might occur. */ *od = *k; if(is_start) *od -= *k/2 - *p; if(is_end) *od -= *p + *k/2 - *h + 1; /* Put the overlap size into the kernel's overlap 'dsize' also and then use it to update the total size of the overlap. */ *kd++ = *od; size *= *od; /* Increment and finalize. */ ++h; ++k; ++od; full_overlap=0; dim_full_overlap=0; } } /* There is full overlap for this pixel or tile over this dimension. */ if(dim_full_overlap) { /* Set the values. */ *ks++ = 0; size *= *k; *kd++ = *od = *k; *os++ = *p - *k/2; /* Increment. */ ++h; ++k; ++od; } } while(++p<pf); /* Update the 'size' element of both overlap datasets. */ pprm->i_overlap->size = pprm->k_overlap->size = size; /* Make correction. Normal mode (when 'tocorrect==0'): add the host's starting location (necessary when convolution over the host/channel is treated independently). In this mode, until now we were working as if the the host/channel is the full image so the edges don't get mixed. But from now on we will be working over the allocated block to look at pixel values, so we need to convert the location to the proper place within the allocated array. To-correct mode: The boundaries were calculated with respect to the block, so we don't need to correct 'overlap_start'. But we need to correct the pixel position back to its original state (relative to the channel). */ hs=pprm->host_start; if(tocorrect) { ppf=(pp=pprm->pix) + ndim; do *pp -= *hs++; while(++pp<ppf); } else { ppf=(pp=pprm->overlap_start) + ndim; do *pp += *hs++; while(++pp<ppf); } /* Set the starting point of the dataset overlap tile. */ increment=gal_dimension_coord_to_index(ndim, block->dsize, pprm->overlap_start); pprm->i_overlap->array=gal_pointer_increment(block->array, increment, block->type); /* Set the starting point of the kernel overlap tile. */ increment = ( full_overlap ? 0 : gal_dimension_coord_to_index(ndim, kernel->dsize, pprm->kernel_start) ); pprm->k_overlap->array=gal_pointer_increment(kernel->array, increment, kernel->type); return full_overlap; } /* Convolve over one tile that is not touching the edge. */ static void convolve_spatial_tile(struct per_thread_spatial_prm *pprm) { gal_data_t *tile=pprm->tile; int full_overlap; double sum, ksum; struct spatial_params *cprm=pprm->cprm; gal_data_t *block=cprm->block, *kernel=cprm->kernel; size_t j, ndim=block->ndim, csize=tile->dsize[ndim-1]; gal_data_t *i_overlap=pprm->i_overlap, *k_overlap=pprm->k_overlap; /* Variables for scanning a tile ('i_*') and the region around every pixel of a tile ('o_*'). */ size_t start_fastdim; size_t i_inc, i_ninc, i_st_en[2]; /* These variables depend on the type of the input. */ float *i_start; float *in_v, *in=block->array, *out=cprm->out->array; /* Starting pixel for the host of this tile. Note that when we are in 'convoverch' mode, 'host' refers to the fully allocated block of memory. */ pprm->host=cprm->convoverch ? block : tile->block; gal_tile_start_coord(pprm->host, pprm->host_start); /* Set the starting and ending coordinates of this tile (recall that the space for the start and end coordinates is stored in 'p->pix'). When 'convoverch' is set, we want to convolve over the whole allocated block, not just one channel. So in effect, it is the same as 'rel_block' in 'gal_tile_start_end_coord'. */ gal_tile_start_end_coord(tile, pprm->pix, cprm->convoverch); start_fastdim = pprm->pix[ndim-1]; /* See if this tile is on the edge or not. */ pprm->on_edge=convolve_tile_is_on_edge(pprm->host->dsize, pprm->pix, kernel->dsize, ndim); /* If it isn't on the edge and we are correcting an already convolved image ('tocorrect!=NULL'), then this tile can be ignored. */ if(cprm->tocorrect && pprm->on_edge==0) return; /* Parse over all the tile elements. */ i_inc=0; i_ninc=1; i_start=gal_tile_start_end_ind_inclusive(tile, block, i_st_en); while( i_st_en[0] + i_inc <= i_st_en[1] ) { /* Initialize the value along the fastest dimension (it is not incremented during 'gal_tile_block_increment'). */ pprm->pix[ndim-1]=start_fastdim; /* Go over each pixel to convolve. */ for(j=0;j<csize;++j) { /* Pointer to the pixel under consideration. */ in_v = i_start + i_inc + j; /* If the input on this pixel is a NaN, then just set the output to NaN too and go onto the next pixel. 'in_v' is the pointer on this pixel. */ if( isnan(*in_v) && cprm->conv_on_blank==0 ) out[ in_v - in ]=NAN; else { /* Define the overlap region. */ full_overlap=convolve_spatial_overlap(pprm, 0); /* If tocorrect has been given and we have full overlap, then just ignore this pixel. */ if( !(cprm->tocorrect && full_overlap) ) { /* If we are in correct mode, then re-calculate the full-overlap and all the other necessary paramters as if the channels didn't exist. */ if(cprm->tocorrect) full_overlap=convolve_spatial_overlap(pprm, 1); /* Initialize the necessary values. */ sum = 0.0L; ksum = cprm->edgecorrection ? 0.0L : 1.0L; /* Parse over both the overlap tiles. */ GAL_TILE_PO_OISET(float, float, i_overlap, k_overlap, 1, 0, { if( !isnan(*i) ) { sum += *i * *o; if(cprm->edgecorrection) ksum += *o; } }); /* Set the output value. */ out[ in_v - in ] = ksum==0.0L ? NAN : sum/ksum; } } /* Increment the last coordinate. */ pprm->pix[ndim-1]++; } /* Increase the increment from the start of the tile for the next contiguous patch. */ i_inc += gal_tile_block_increment(block, tile->dsize, i_ninc++, pprm->pix); } /* if(pprm->id==2053) printf("... done.\n"); */ } /* Do spatial convolution on each mesh. */ static void * convolve_spatial_on_thread(void *inparam) { struct gal_threads_params *tprm=(struct gal_threads_params *)inparam; struct spatial_params *cprm=(struct spatial_params *)(tprm->params); gal_data_t *block=cprm->block; size_t i; size_t ndim=block->ndim; struct per_thread_spatial_prm *pprm=&cprm->pprm[tprm->id]; size_t *dsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "dsize"); /* Set all dsize values to 1 (the values within 'overlap->dsize' will be changed during convolution). */ for(i=0;i<ndim;++i) dsize[i]=1; /* Initialize/Allocate necessary items for this thread. */ pprm->cprm = cprm; pprm->pix = gal_pointer_allocate(GAL_TYPE_SIZE_T, 2*ndim, 0, __func__, "pprm->pix"); pprm->host_start = gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "pprm->host_start"); pprm->kernel_start = gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "pprm->kernel_start"); pprm->overlap_start = gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "pprm->overlap_start"); pprm->i_overlap = gal_data_alloc(NULL, block->type, ndim, dsize, NULL, 0, -1, 1, NULL, NULL, NULL); pprm->k_overlap = gal_data_alloc(NULL, cprm->kernel->type, ndim, dsize, NULL, 0, -1, 1, NULL, NULL, NULL); free(dsize); free(pprm->i_overlap->array); free(pprm->k_overlap->array); pprm->i_overlap->block = cprm->block; pprm->k_overlap->block = cprm->kernel; /* Go over all the tiles given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Set this tile's pointer into this thread's parameters. */ pprm->id = tprm->indexs[i]; pprm->tile = &cprm->tiles[ pprm->id ]; /* Do the convolution on this tile. */ convolve_spatial_tile(pprm); } /* Clean up, wait until all other threads finish, then return. In a single thread situation, 'tprm->b==NULL'. */ free(pprm->pix); free(pprm->host_start); free(pprm->kernel_start); free(pprm->overlap_start); gal_data_free(pprm->i_overlap); gal_data_free(pprm->k_overlap); if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* General spatial convolve function. This function is called by both 'gal_convolve_spatial' and 'gal_convolve_spatial_correct_ch_edge'. */ static gal_data_t * gal_convolve_spatial_general(gal_data_t *tiles, gal_data_t *kernel, size_t numthreads, int edgecorrection, int convoverch, uint8_t conv_on_blank, gal_data_t *tocorrect) { struct spatial_params params; gal_data_t *out, *block=gal_tile_block(tiles); /* Small sanity checks. */ if(tiles->ndim!=kernel->ndim) error(EXIT_FAILURE, 0, "%s: The number of dimensions between the kernel " "and input should be the same", __func__); if( block->type!=GAL_TYPE_FLOAT32 || kernel->type!=GAL_TYPE_FLOAT32 ) error(EXIT_FAILURE, 0, "%s: only accepts 'float32' type input and " "kernel currently", __func__); /* It may happen that an input dataset is part of a linked list, but it is not actually a tile structure (the user wants to convolve the whole dataset without using tiles)! In that case, this function should break beacuse a linked list is interpretted as a tile structure here. */ if( tiles->block==NULL && tiles->next && tiles->next->block==NULL ) error(EXIT_FAILURE, 0, "%s: the input is a linked list but not a " "tessellation (a list of tiles). This function is optimized to " "work on a list of tiles. Please (temporarily) set the 'next' " "element of the input to 'NULL' and call this function again", __func__); /* Set the output datastructure. */ if(tocorrect) out=tocorrect; else { /* Allocate the space for the convolved image. */ out=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, block->ndim, block->dsize, block->wcs, 0, block->minmapsize, block->quietmmap, NULL, block->unit, NULL); /* Spatial convolution won't change the blank bit-flag, so use the block structure's blank bit flag. */ out->flag = ( block->flag | ( GAL_DATA_FLAG_BLANK_CH | GAL_DATA_FLAG_HASBLANK ) ); } /* Set the pointers in the parameters structure. */ params.out=out; params.tiles=tiles; params.block=block; params.kernel=kernel; params.tocorrect=tocorrect; params.convoverch=convoverch; params.conv_on_blank=conv_on_blank; params.edgecorrection=edgecorrection; /* Allocate the per-thread parameters. */ errno=0; params.pprm=malloc(numthreads * sizeof *params.pprm); if(params.pprm==NULL) error(EXIT_FAILURE, 0, "%s: %zu bytes for 'params.pprm'", __func__, numthreads * sizeof *params.pprm); /* Do the spatial convolution on threads. */ gal_threads_spin_off(convolve_spatial_on_thread, ¶ms, gal_list_data_number(tiles), numthreads, tiles->minmapsize, tiles->quietmmap); /* Clean up and return the output array. */ free(params.pprm); return out; } /* Convolve a dataset with a given kernel in the spatial domain. Spatial convolution can be greatly sped up if it is done on separate tiles over the image (on multiple threads). So as input, you can either give tile values or one full array. Just note that if you give a single array as input, the 'next' element has to be 'NULL'. */ gal_data_t * gal_convolve_spatial(gal_data_t *tiles, gal_data_t *kernel, size_t numthreads, int edgecorrection, int convoverch, int conv_on_blank) { /* When there isn't any tile structure, 'convoverch' must be set to one. Recall that the input can be a single full dataset also. */ if(tiles->block==NULL) convoverch=1; /* Call the general function. */ return gal_convolve_spatial_general(tiles, kernel, numthreads, edgecorrection, convoverch, conv_on_blank, NULL); } /* Correct the edges of channels in an already convolved image when it was initially convolved with 'gal_convolve_spatial' with 'convoverch==0'. In that case, strong boundaries exist on the tile edges. So if you later need to remove those boundaries, you can call this function, it will only do convolution on the tiles that are near the edge, not the full area, so it is much faster. */ void gal_convolve_spatial_correct_ch_edge(gal_data_t *tiles, gal_data_t *kernel, size_t numthreads, int edgecorrection, int conv_on_blank, gal_data_t *tocorrect) { gal_data_t *block=gal_tile_block(tiles); /* Some small sanity checks. */ if( gal_dimension_is_different(block, tocorrect) ) error(EXIT_FAILURE, 0, "%s: the 'tocorrect' dataset has to have the " "same dimensions/size as the block of the 'tiles' input", __func__); if( block->type != tocorrect->type ) error(EXIT_FAILURE, 0, "%s: the 'tocorrect' dataset has to have the same " "type as the block of the 'tiles' input. The given types are '%s' " "and '%s' respectively", __func__, gal_type_name(tocorrect->type, 1), gal_type_name(block->type, 1)); /* Call the general function, which will do the correction. */ gal_convolve_spatial_general(tiles, kernel, numthreads, edgecorrection, 0, conv_on_blank, tocorrect); } �����������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/cosmology.c�����������������������������������������������������������������������0000644�0001750�0001750�00000033763�14557216671�011737� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Cosmological calculations. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <time.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <stdlib.h> #include <gsl/gsl_errno.h> #include <gsl/gsl_const_mksa.h> #include <gsl/gsl_integration.h> /**************************************************************/ /************ Definitions *************/ /**************************************************************/ /* These are basic definitions that commonly go into the header files. But because this is a library and the user imports the header file, it is easier to just have them here in the main C file to avoid filling up the user's name-space with junk. */ struct cosmology_integrand_t { double o_lambda_0; double o_curv_0; double o_matter_0; double o_radiation_0; }; /* For the GSL integrations */ #define GSLILIMIT 1000 #define GSLIEPSABS 0 #define GSLIEPSREL 1e-7 /**************************************************************/ /************ Constraint Check Function *************/ /**************************************************************/ /* Check if input parameters are witihin the required constraints. i.e All density fractions should be between 0 and 1 AND their sum should not exceed 1. */ static void cosmology_density_check(double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet) { double sum = o_lambda_0 + o_matter_0 + o_radiation_0; /* Check if the density fractions are between 0 and 1. */ if(o_lambda_0 > 1 || o_lambda_0 < 0) error(EXIT_FAILURE, 0, "value to option 'olambda' must be between " "zero and one (inclusive), but the given value is '%.8f'. Recall " "that 'olambda' is 'Current cosmological cst. dens. per crit. '" "dens.", o_lambda_0); if(o_matter_0 > 1 || o_matter_0 < 0) error(EXIT_FAILURE, 0, "value to option 'omatter' must be between " "zero and one (inclusive), but the given value is '%.8f'. Recall " "that 'omatter' is 'Current matter density per critical density.'", o_matter_0); if(o_radiation_0 > 1 || o_radiation_0 < 0) error(EXIT_FAILURE, 0, "value to option 'oradiation' must be between " "zero and one (inclusive), but the given value is '%.8f'. Recall " "that 'oradiation' is 'Current radiation density per critical " "density.", o_radiation_0); /* Check if the density fractions add up to 1 (within floating point error). */ if( (sum > (1+1e-8) || sum < (1-1e-8)) && quiet==0 ) error(EXIT_SUCCESS, 0, "WARNING: non-flat FLRW model: the curvature " "density parameter is %.8f; therefore angular diameter based " "distances like will be wrong in Gnuastro's current " "implementation; see https://savannah.gnu.org/bugs/?65195. " "This warning message can be disabled with '--quiet'", 1.0-sum); } /**************************************************************/ /************ Integrand functions *************/ /**************************************************************/ /* These are integrands, they won't be giving the final value. */ static double cosmology_integrand_Ez(double z, void *params) { struct cosmology_integrand_t *p=(struct cosmology_integrand_t *)params; return sqrt( p->o_lambda_0 + p->o_curv_0 * (1+z) * (1+z) + p->o_matter_0 * (1+z) * (1+z) * (1+z) + p->o_radiation_0 * (1+z) * (1+z) * (1+z) * (1+z)); } static double cosmology_integrand_age(double z, void *params) { return 1 / ( (1.0 + z) * cosmology_integrand_Ez(z,params) ); } static double cosmology_integrand_proper_dist(double z, void *params) { return 1 / ( cosmology_integrand_Ez(z,params) ); } static double cosmology_integrand_comoving_volume(double z, void *params) { size_t neval; gsl_function F; double result, error; /* Set the GSL function parameters */ F.params=params; F.function=&cosmology_integrand_proper_dist; gsl_integration_qng(&F, 0.0, z, GSLIEPSABS, GSLIEPSREL, &result, &error, &neval); return result * result / ( cosmology_integrand_Ez(z,params) ); } /**************************************************************/ /************ Basic cosmology functions *************/ /**************************************************************/ /* Age of the universe (in Gyrs). H0 is in units of (km/sec/Mpc) and the fractional densities must add up to 1. */ double gal_cosmology_age(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet) { gsl_function F; double result, error; double o_curv_0 = 1.0 - ( o_lambda_0 + o_matter_0 + o_radiation_0 ); double H0s=H0/1000/GSL_CONST_MKSA_PARSEC; /* H0 in units of seconds. */ gsl_integration_workspace *w=gsl_integration_workspace_alloc(GSLILIMIT); struct cosmology_integrand_t p={o_lambda_0, o_curv_0, o_matter_0, o_radiation_0}; /* Basic sanity check (no problem with the usage of these variables in the definitions above; they are just */ cosmology_density_check(o_lambda_0, o_matter_0, o_radiation_0, quiet); /* Set the GSL function parameters. */ F.params=&p; F.function=&cosmology_integrand_age; gsl_integration_qagiu(&F, z, GSLIEPSABS, GSLIEPSREL, GSLILIMIT, w, &result, &error); return result / H0s / (365*GSL_CONST_MKSA_DAY) / 1e9; } /* Proper distance to z (Mpc). */ double gal_cosmology_proper_distance(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet) { int status; size_t neval; gsl_function F; gsl_integration_workspace *w; gsl_error_handler_t *gslerrhandler; double result, gslerr, c=GSL_CONST_MKSA_SPEED_OF_LIGHT; double o_curv_0 = 1.0 - ( o_lambda_0 + o_matter_0 + o_radiation_0 ); double H0s=H0/1000/GSL_CONST_MKSA_PARSEC; /* H0 in units of seconds. */ struct cosmology_integrand_t p={o_lambda_0, o_curv_0, o_matter_0, o_radiation_0}; /* Basic sanity check (no problem with the usage of these variables in the definitions above; they are just */ cosmology_density_check(o_lambda_0, o_matter_0, o_radiation_0, quiet); /* Set the GSL function parameters */ F.params=&p; F.function=&cosmology_integrand_proper_dist; /* Temporarily switch off error handling */ gslerrhandler=gsl_set_error_handler_off(); /* Do the integration (first with the fast GSL function). */ status=gsl_integration_qng(&F, 0.0f, z, GSLIEPSABS, GSLIEPSREL, &result, &gslerr, &neval); /* If the first integration failed, try a slower, but more robust one. */ if (status!=GSL_SUCCESS) { w=gsl_integration_workspace_alloc(GSLILIMIT); status=gsl_integration_qag(&F, 0.0f, z, GSLIEPSABS, GSLIEPSREL, GSLILIMIT, GSL_INTEG_GAUSS21, w, &result, &gslerr); gsl_integration_workspace_free(w); if (status!=GSL_SUCCESS) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. The status of the second integration is " "%i.", __func__, PACKAGE_BUGREPORT, status); } /* Reactivate "normal" error handling */ gslerrhandler=gsl_set_error_handler(gslerrhandler); /* Return the result. */ return result * c / H0s / (1e6 * GSL_CONST_MKSA_PARSEC); } /* Comoving volume over 4pi stradian to z (Mpc^3). */ double gal_cosmology_comoving_volume(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet) { int status; size_t neval; gsl_function F; double result, gslerr; gsl_integration_workspace *w; gsl_error_handler_t *gslerrhandler; double c=GSL_CONST_MKSA_SPEED_OF_LIGHT; double H0s=H0/1000/GSL_CONST_MKSA_PARSEC; /* H0 in units of seconds. */ double cH = c / H0s / (1e6 * GSL_CONST_MKSA_PARSEC); double o_curv_0 = 1.0 - ( o_lambda_0 + o_matter_0 + o_radiation_0 ); struct cosmology_integrand_t p={o_lambda_0, o_curv_0, o_matter_0, o_radiation_0}; /* Basic sanity check (no problem with the usage of these variables in the definitions above; they are just */ cosmology_density_check(o_lambda_0, o_matter_0, o_radiation_0, quiet); /* Set the GSL function parameters */ F.params=&p; F.function=&cosmology_integrand_comoving_volume; /* temporarily switch off error handling */ gslerrhandler=gsl_set_error_handler_off(); /* Do the integration. */ status=gsl_integration_qng(&F, 0.0f, z, GSLIEPSABS, GSLIEPSREL, &result, &gslerr, &neval); /* If the first integration failed, try a slower, but more robust one. */ if (status!=GSL_SUCCESS) { w=gsl_integration_workspace_alloc(GSLILIMIT); status=gsl_integration_qag(&F, 0.0f, z, GSLIEPSABS, GSLIEPSREL, GSLILIMIT, GSL_INTEG_GAUSS21, w, &result, &gslerr); gsl_integration_workspace_free(w); if (status!=GSL_SUCCESS) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. The status of the second integration is " "%i.", __func__, PACKAGE_BUGREPORT, status); } /* Reactivate "normal" error handling */ gslerrhandler=gsl_set_error_handler(gslerrhandler); /* Return the result. */ return result * 4 * M_PI * cH*cH*cH; } /* Critical density at redshift z in units of g/cm^3. */ double gal_cosmology_critical_density(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet) { double H; double H0s=H0/1000/GSL_CONST_MKSA_PARSEC; /* H0 in units of seconds. */ double o_curv_0 = 1.0 - ( o_lambda_0 + o_matter_0 + o_radiation_0 ); struct cosmology_integrand_t p={o_lambda_0, o_curv_0, o_matter_0, o_radiation_0}; /* Basic sanity check (no problem with the usage of these variables in the definitions above; they are just */ cosmology_density_check(o_lambda_0, o_matter_0, o_radiation_0, quiet); /* Set the place holder, then return the result. */ H = H0s * cosmology_integrand_Ez(z, &p); return 3*H*H/(8*M_PI*GSL_CONST_MKSA_GRAVITATIONAL_CONSTANT)/1000; } /* Angular diameter distance to z (Mpc). */ double gal_cosmology_angular_distance(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet) { /* Sanity checks. */ cosmology_density_check(o_lambda_0, o_matter_0, o_radiation_0, quiet); /* Note that here 'quiet' is activated because we already do the density check once. */ return gal_cosmology_proper_distance(z, H0, o_lambda_0, o_matter_0, o_radiation_0, 1) / (1+z); } /* Luminosity distance to z (Mpc). */ double gal_cosmology_luminosity_distance(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet) { /* Sanity checks. */ cosmology_density_check(o_lambda_0, o_matter_0, o_radiation_0, quiet); /* Note that here 'quiet' is activated because we already do the density check once. */ return gal_cosmology_proper_distance(z, H0, o_lambda_0, o_matter_0, o_radiation_0, 1) * (1+z); } /* Distance modulus at z (no units). */ double gal_cosmology_distance_modulus(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet) { /* Sanity checks. */ cosmology_density_check(o_lambda_0, o_matter_0, o_radiation_0, quiet); /* Note that here 'quiet' is activated because we already do the density check once. */ double ld=gal_cosmology_luminosity_distance(z, H0, o_lambda_0, o_matter_0, o_radiation_0, 1); return 5*(log10(ld*1000000)-1); } /* Convert apparent to absolute magnitude. */ double gal_cosmology_to_absolute_mag(double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0, int quiet) { /* Sanity checks. */ cosmology_density_check(o_lambda_0, o_matter_0, o_radiation_0, quiet); /* Note that here 'quiet' is activated because we already do the density check once. */ double dm=gal_cosmology_distance_modulus(z, H0, o_lambda_0, o_matter_0, o_radiation_0, 1); return dm-2.5*log10(1.0+z); } /* Velocity at given redshift in units of km/s. */ double gal_cosmology_velocity_from_z(double z) { double c=GSL_CONST_MKSA_SPEED_OF_LIGHT; return c * ( (1+z)*(1+z) - 1 ) / ( (1+z)*(1+z) + 1 ) / 1000; } /* Redshift at given velocity (in units of km/s). */ double gal_cosmology_z_from_velocity(double v) { double c=GSL_CONST_MKSA_SPEED_OF_LIGHT/1000; return sqrt( (c+v)/(c-v) ) - 1; } �������������gnuastro-0.22/lib/data.c����������������������������������������������������������������������������0000644�0001750�0001750�00000101762�14551337306�010621� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* data -- Structure and functions to represent/work with data This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <errno.h> #include <error.h> #include <fcntl.h> #include <float.h> #include <ctype.h> #include <stdlib.h> #include <string.h> #include <dirent.h> #include <inttypes.h> #include <gnuastro/wcs.h> #include <gnuastro/data.h> #include <gnuastro/tile.h> #include <gnuastro/blank.h> #include <gnuastro/table.h> #include <gnuastro/pointer.h> #include <gnuastro-internal/checkset.h> /*********************************************************************/ /************* Allocation *******************/ /*********************************************************************/ /* Allocate a data structure based on the given parameters. If you want to force the array into the hdd/ssd (mmap it), then set minmapsize=-1 (largest possible size_t value), in this way, no file will be larger. */ gal_data_t * gal_data_alloc(void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, int quietmmap, char *name, char *unit, char *comment) { gal_data_t *out; /* Allocate the space for the actual structure. */ errno=0; out=malloc(sizeof *out); if(out==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for gal_data_t", __func__, sizeof *out); /* Initialize the allocated array. */ gal_data_initialize(out, array, type, ndim, dsize, wcs, clear, minmapsize, quietmmap, name, unit, comment); /* Return the final structure. */ return out; } /* Initialize the data structure. Some notes: - The 'status' value is the only element that cannot be set by this function, it is initialized to zero. - If no 'array' is given, a blank array of the given size will be allocated. If it is given the array pointer will be directly put here, so do not free it independently any more. If you want a separate copy of a dataset, you should use 'gal_data_copy', not this function. - Space for the 'name', 'unit', and 'comment' strings within the data structure are allocated here. So you can safely use literal strings, or statically allocated ones, or simply the strings from other data structures (and not have to worry about which one to free later). */ void gal_data_initialize(gal_data_t *data, void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, int quietmmap, char *name, char *unit, char *comment) { size_t i; size_t data_size_limit = (size_t)(-1); /* Do the simple copying cases. For the display elements, set them all to impossible (negative) values so if not explicitly set by later steps, the default values are used if/when printing. */ data->flag = 0; data->status = 0; data->disp_width = -1; data->next = NULL; data->ndim = ndim; data->type = type; data->block = NULL; data->mmapname = NULL; data->quietmmap = quietmmap; data->minmapsize = minmapsize; data->disp_precision=GAL_BLANK_INT; data->disp_fmt=GAL_TABLE_DISPLAY_FMT_INVALID; gal_checkset_allocate_copy(name, &data->name); gal_checkset_allocate_copy(unit, &data->unit); gal_checkset_allocate_copy(comment, &data->comment); /* Copy the WCS structure. */ data->wcs=gal_wcs_copy(wcs); /* Allocate space for the dsize array, only if the data are to have any dimensions or size along the dimensions. Note that in our convention, a number has a 'ndim=1' and 'dsize[0]=1', A 1D array also has 'ndim=1', but 'dsize[0]>1'. */ if(ndim && dsize) { /* Allocate dsize. */ errno=0; data->dsize=malloc(ndim*sizeof *data->dsize); if(data->dsize==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for data->dsize", __func__, ndim*sizeof *data->dsize); /* Fill in the 'dsize' array and in the meantime set 'size': */ data->size=1; for(i=0;i<ndim;++i) { /* Size along a dimension cannot be 0 if we are in a multi-dimensional dataset. In a single-dimensional dataset, we can have an empty dataset. */ if(ndim>1 && dsize[i] == 0) error(EXIT_FAILURE, 0, "%s: dsize[%zu]==0. The size of a " "dimension cannot be zero", __func__, i); /* Check for possible overflow while multiplying. */ if (dsize[i] >= data_size_limit / data->size) error(EXIT_FAILURE, 0, "%s: dimension %zu size is too " "large %zu. Total is out of bounds", __func__, i, dsize[i]); /* Print a warning if the size in this dimension is too large. May happen when the user (mistakenly) writes a negative value in this dimension. */ if (dsize[i] >= data_size_limit / 2) fprintf(stderr, "%s: WARNING: dsize[%zu] value %zu is probably " "a mistake: it exceeds the limit %zu", __func__, i, dsize[i], data_size_limit / 2); /* Write this dimension's size, also correct the total number of elements. */ data->size *= ( data->dsize[i] = dsize[i] ); } /* Set the array pointer. If an non-NULL array pointer was given, then use it. */ if(array) data->array=array; else { /* If a size wasn't given, just set a NULL pointer. */ if(data->size) data->array=gal_pointer_allocate_ram_or_mmap(data->type, data->size, clear, minmapsize, &data->mmapname, quietmmap, __func__, ""); else data->array=NULL; /* The given size was zero! */ } } else { data->size=0; data->array=NULL; data->dsize=NULL; } } /* Allocate an empty (meta) dataset with a certain number of dimensions, but no 'array' component, and all 'size' elements set to zero. */ gal_data_t * gal_data_alloc_empty(size_t ndim, size_t minmapsize, int quietmmap) { gal_data_t *out; size_t i, *dsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "dsize"); /* Fill the 'dsize' array with 1 values (so too much space isn't allocated!), then allocate it. */ for(i=0;i<ndim;++i) dsize[i]=1; out=gal_data_alloc(NULL, GAL_TYPE_UINT8, ndim, dsize, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); /* Update the sizes. */ out->size=0; for(i=0;i<ndim;++i) out->dsize[i]=0; /* Clean up the allocated space for 'out->array', and the extra 'dsize', then return. */ free(out->array); out->array=NULL; free(dsize); return out; } /* Free the allocated contents of a data structure, not the structure itsself. The reason that this function is separate from 'gal_data_free' is that the data structure might be allocated as an array (statically like 'gal_data_t da[20]', or dynamically like 'gal_data_t *da; da=malloc(20*sizeof *da);'). In both cases, a loop will be necessary to delete the allocated contents of each element of the data structure array, but not the structure its self. After that loop, if the array of data structures was statically allocated, you don't have to do anything. If it was dynamically allocated, we just have to run 'free(da)'. Since we aren't freeing the 'gal_data_t' its-self, after the allocated space for each pointer is freed, the pointer is set to NULL for safety (to avoid possible re-calls). */ void gal_data_free_contents(gal_data_t *data) { size_t i; char **strarr; if(data==NULL) error(EXIT_FAILURE, 0, "%s: the input data structure to " "'gal_data_free_contents' was a NULL pointer", __func__); /* Free all the possible allocations. */ if(data->name) { free(data->name); data->name = NULL; } if(data->unit) { free(data->unit); data->unit = NULL; } if(data->dsize) { free(data->dsize); data->dsize = NULL; } if(data->comment) { free(data->comment); data->comment = NULL; } if(data->wcs) { wcsfree(data->wcs); free(data->wcs); data->wcs = NULL; } /* If the data type is string, then each element in the array is actually a pointer to the array of characters, so free them before freeing the actual array. */ if(data->type==GAL_TYPE_STRING && data->array) { strarr=data->array; for(i=0;i<data->size;++i) if(strarr[i]) free(strarr[i]); } /* Free the array (if it was separately allocated: not part of a block), then set the 'array' to NULL. */ if(data->array && data->block==NULL) { if(data->mmapname) gal_pointer_mmap_free(&data->mmapname, data->quietmmap); else free(data->array); } data->array=NULL; } /* Free the contents of the data structure and the data structure itsself. */ void gal_data_free(gal_data_t *data) { if(data) { gal_data_free_contents(data); free(data); } } /*********************************************************************/ /************* Array of data structures ******************/ /*********************************************************************/ /* Allocate an array of data structures and initialize all the values. */ gal_data_t * gal_data_array_calloc(size_t size) { size_t i; gal_data_t *out; /* Allocate the array to keep the structures. */ errno=0; out=malloc(size*sizeof *out); if(out==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for 'out'", __func__, size*sizeof *out); /* Set the pointers to NULL if they didn't exist and the non-pointers to impossible integers (so the caller knows the array is only allocated. 'minmapsize' should be set when allocating the array and should be set when you run 'gal_data_initialize'. */ for(i=0;i<size;++i) { out[i].array = NULL; out[i].type = GAL_TYPE_INVALID; out[i].ndim = 0; out[i].dsize = NULL; out[i].size = 0; out[i].mmapname = NULL; out[i].minmapsize = -1; out[i].quietmmap = 1; out[i].nwcs = 0; out[i].wcs = NULL; out[i].flag = 0; out[i].status = 0; out[i].next = NULL; out[i].block = NULL; out[i].name = out[i].unit = out[i].comment = NULL; out[i].disp_fmt = out[i].disp_width = out[i].disp_precision = -1; } /* Return the array pointer. */ return out; } /* When you have an array of data structures. */ void gal_data_array_free(gal_data_t *dataarr, size_t size, int free_array) { size_t i; /* If its NULL, don't do anything. */ if(dataarr==NULL) return; /* First free all the contents. */ for(i=0;i<size;++i) { /* See if the array should be freed or not. */ if(free_array==0) dataarr[i].array=NULL; /* Now clear the contents of the dataset. */ gal_data_free_contents(&dataarr[i]); } /* Now you can free the whole array. */ free(dataarr); } /* Create an array of gal_data_t pointers and initializes them. */ gal_data_t ** gal_data_array_ptr_calloc(size_t size) { size_t i; gal_data_t **out; /* Allocate the array to keep the pointers. */ errno=0; out=malloc(size*sizeof *out); if(out==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for 'out'", __func__, size*sizeof *out); /* Initialize all the pointers to NULL and return. */ for(i=0;i<size;++i) out[i]=NULL; return out; } /* Assuming that we have an array of pointers to data structures, this function frees them. */ void gal_data_array_ptr_free(gal_data_t **dataptr, size_t size, int free_array) { size_t i; for(i=0;i<size;++i) { /* If the user doesn't want to free the array, it must be because they are keeping its pointer somewhere else (that their own responsability!), so we can just set it to NULL for the 'gal_data_free' to not free it. */ if(free_array==0) dataptr[i]->array=NULL; /* Free this data structure. */ gal_data_free(dataptr[i]); } /* Free the 'gal_data_t **'. */ free(dataptr); } /************************************************************* ************** Copying *************** *************************************************************/ /* Only to be used in 'data_copy_from_string'. */ static void data_copy_to_string_not_parsed(char *string, void *to, uint8_t type) { if( strcmp(string, GAL_BLANK_STRING) ) gal_blank_write(to, type); else error(EXIT_FAILURE, 0, "%s: '%s' couldn't be parsed as '%s' type", __func__, string, gal_type_name(type, 1)); } /* The 'from' array is an array of strings. We want to keep it as numbers. Note that the case where both input and output structures are string was */ static void data_copy_from_string(gal_data_t *from, gal_data_t *to) { size_t i; void *ptr; char **strarr=from->array, **outstrarr=to->array; /* Sanity check. */ if(from->type!=GAL_TYPE_STRING) error(EXIT_FAILURE, 0, "%s: 'from' must have a string type.", __func__); if(from->block) error(EXIT_FAILURE, 0, "%s: tiles not currently supported ('block' " "element must be NULL). Please contact us at %s so we can " "implement this feature", __func__, PACKAGE_BUGREPORT); /* Do the copying. */ for(i=0;i<from->size;++i) { /* Set the pointer. */ switch(to->type) { case GAL_TYPE_UINT8: ptr = (uint8_t *)(to->array) + i; break; case GAL_TYPE_INT8: ptr = (int8_t *)(to->array) + i; break; case GAL_TYPE_UINT16: ptr = (uint16_t *)(to->array) + i; break; case GAL_TYPE_INT16: ptr = (int16_t *)(to->array) + i; break; case GAL_TYPE_UINT32: ptr = (uint32_t *)(to->array) + i; break; case GAL_TYPE_INT32: ptr = (int32_t *)(to->array) + i; break; case GAL_TYPE_UINT64: ptr = (uint64_t *)(to->array) + i; break; case GAL_TYPE_INT64: ptr = (int64_t *)(to->array) + i; break; case GAL_TYPE_FLOAT32: ptr = (float *)(to->array) + i; break; case GAL_TYPE_FLOAT64: ptr = (double *)(to->array) + i; break; case GAL_TYPE_BIT: case GAL_TYPE_STRLL: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: copying to %s type not currently " "supported", __func__, gal_type_name(to->type, 1)); break; default: error(EXIT_FAILURE, 0, "%s: type %d not recognized for to->type", __func__, to->type); } /* Read/put the input into the output. */ if(to->type==GAL_TYPE_STRING) gal_checkset_allocate_copy(strarr[i], &outstrarr[i]); else { if( gal_type_from_string(&ptr, strarr[i], to->type) ) data_copy_to_string_not_parsed(strarr[i], ptr, to->type); } } } /* Macros for copying to a string. */ #define COPY_TO_STR_INT(CTYPE, BLANK, FMT) { \ CTYPE *a=from->array; \ for(i=0;i<from->size;++i) \ { \ if(a[i]!=BLANK) \ { \ if( asprintf(&strarr[i], FMT, a[i])<0 ) \ error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); \ } \ else \ gal_checkset_allocate_copy(GAL_BLANK_STRING, &strarr[i]); \ } \ } #define COPY_TO_STR_FLT(CTYPE, BLANK, FMT) { \ CTYPE *a=from->array; \ for(i=0;i<from->size;++i) \ { \ if(isnan(BLANK)) isblank = isnan(a[i]) ? 1 : 0; \ else isblank = a[i]==BLANK ? 1 : 0; \ if(isblank==0) \ { \ if( asprintf(&strarr[i], FMT, a[i])<0 ) \ error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); \ } \ else gal_checkset_allocate_copy(GAL_BLANK_STRING, &strarr[i]); \ } \ } /* Convert any given type into a string by printing it into the elements of the already allocated 'to->array'. */ static void data_copy_to_string(gal_data_t *from, gal_data_t *to) { size_t i; char *fltfmt; int isblank, leftadjust=1; char **strarr=to->array, **instrarr=from->array; /* Sanity check */ if(to->type!=GAL_TYPE_STRING) error(EXIT_FAILURE, 0, "%s: 'to' must have a string type", __func__); if(from->block) error(EXIT_FAILURE, 0, "%s: tile inputs not currently supported " "('block' element must be NULL). Please contact us at %s so we " "can implement this feature", __func__, PACKAGE_BUGREPORT); /* For the two floating point formats, the user may have given a certain width and precision. */ if(from->disp_width>0 || from->disp_precision>0) { if(from->disp_width>0) /* Both width and precision are given. */ { if( asprintf(&fltfmt, "%%%s%d.%df", leftadjust ? "-" : "", from->disp_width, from->disp_precision)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation error " "(with width)", __func__); } else /* Only precision is given. */ { if( asprintf(&fltfmt, "%%.%df", from->disp_precision)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation error " "(without width)", __func__); } } else gal_checkset_allocate_copy("%g", &fltfmt); /* Do the copying */ switch(from->type) { case GAL_TYPE_UINT8: COPY_TO_STR_INT(uint8_t, GAL_BLANK_UINT8, "%"PRIu8); break; case GAL_TYPE_INT8: COPY_TO_STR_INT(int8_t, GAL_BLANK_INT8, "%"PRId8); break; case GAL_TYPE_UINT16: COPY_TO_STR_INT(uint16_t, GAL_BLANK_UINT16, "%"PRIu16); break; case GAL_TYPE_INT16: COPY_TO_STR_INT(int16_t, GAL_BLANK_INT16, "%"PRId16); break; case GAL_TYPE_UINT32: COPY_TO_STR_INT(uint32_t, GAL_BLANK_UINT32, "%"PRIu32); break; case GAL_TYPE_INT32: COPY_TO_STR_INT(int32_t, GAL_BLANK_INT32, "%"PRId32); break; case GAL_TYPE_UINT64: COPY_TO_STR_INT(uint64_t, GAL_BLANK_UINT64, "%"PRIu64); break; case GAL_TYPE_INT64: COPY_TO_STR_INT(int64_t, GAL_BLANK_INT64, "%"PRId64); break; case GAL_TYPE_FLOAT32: COPY_TO_STR_FLT(float, GAL_BLANK_FLOAT32, fltfmt); break; case GAL_TYPE_FLOAT64: COPY_TO_STR_FLT(double, GAL_BLANK_FLOAT64, fltfmt); break; case GAL_TYPE_STRING: for(i=0;i<from->size;++i) gal_checkset_allocate_copy(instrarr[i], &strarr[i]); break; case GAL_TYPE_BIT: case GAL_TYPE_STRLL: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: copying to %s type not currently supported", __func__, gal_type_name(from->type, 1)); break; default: error(EXIT_FAILURE, 0, "%s: type %d not recognized for 'from->type'", __func__, from->type); } } #define COPY_OT_IT_SET(OT, IT) { \ OT ob, *restrict o=out->array; \ size_t increment=0, num_increment=1; \ size_t mclen=0, contig_len=in->dsize[in->ndim-1]; \ IT ib, *ist=NULL, *restrict i=in->array, *f=i+in->size; \ size_t s_e_ind[2]={0,iblock->size-1}; /* -1: this is INCLUSIVE */ \ \ /* If we are on a tile, the default values need to change. */ \ if(in!=iblock) \ ist=gal_tile_start_end_ind_inclusive(in, iblock, s_e_ind); \ \ /* Constant preparations before the loop. */ \ if(iblock->type==out->type) \ mclen = in==iblock ? iblock->size : contig_len; \ else \ { \ gal_blank_write(&ob, out->type); \ gal_blank_write(&ib, iblock->type); \ } \ \ /* Parse over the input and copy it. */ \ while( s_e_ind[0] + increment <= s_e_ind[1] ) \ { \ /* If we are on a tile, reset 'i' and 'f' for each round. */ \ if(in!=iblock) \ f = ( i = ist + increment ) + contig_len; \ \ /* When the types are the same just use memcopy, otherwise, */ \ /* We'll have to read each number (and use internal */ \ /* conversion). */ \ if(iblock->type==out->type) \ { \ memcpy(o, i, mclen*gal_type_sizeof(iblock->type)); \ o += mclen; \ } \ else \ { \ /* If the blank is a NaN value (only for floating point */ \ /* types), it will fail any comparison, so we'll exploit */ \ /* this property in such cases. For other cases, a */ \ /* '*i==ib' is enough. */ \ if(ib==ib) do *o++ = *i==ib ? ob : *i; while(++i<f); \ else do *o++ = *i!=*i ? ob : *i; while(++i<f); \ } \ \ /* Update the increment from the start of the input. */ \ increment += ( in==iblock ? iblock->size \ : gal_tile_block_increment(iblock, in->dsize, \ num_increment++, \ NULL) ); \ } \ } /* gal_data_copy_to_new_type: Output type is set, now choose the input type. */ #define COPY_OT_SET(OT) \ switch(iblock->type) \ { \ case GAL_TYPE_UINT8: COPY_OT_IT_SET(OT, uint8_t ); break; \ case GAL_TYPE_INT8: COPY_OT_IT_SET(OT, int8_t ); break; \ case GAL_TYPE_UINT16: COPY_OT_IT_SET(OT, uint16_t ); break; \ case GAL_TYPE_INT16: COPY_OT_IT_SET(OT, int16_t ); break; \ case GAL_TYPE_UINT32: COPY_OT_IT_SET(OT, uint32_t ); break; \ case GAL_TYPE_INT32: COPY_OT_IT_SET(OT, int32_t ); break; \ case GAL_TYPE_UINT64: COPY_OT_IT_SET(OT, uint64_t ); break; \ case GAL_TYPE_INT64: COPY_OT_IT_SET(OT, int64_t ); break; \ case GAL_TYPE_FLOAT32: COPY_OT_IT_SET(OT, float ); break; \ case GAL_TYPE_FLOAT64: COPY_OT_IT_SET(OT, double ); break; \ case GAL_TYPE_STRING: data_copy_from_string(in, out); break; \ case GAL_TYPE_BIT: \ case GAL_TYPE_STRLL: \ case GAL_TYPE_COMPLEX32: \ case GAL_TYPE_COMPLEX64: \ error(EXIT_FAILURE, 0, "%s: copying from %s type to a numeric " \ "(real) type not supported", "COPY_OT_SET", \ gal_type_name(in->type, 1)); \ break; \ \ default: \ error(EXIT_FAILURE, 0, "%s: type code %d not recognized for " \ "'in->type'", "COPY_OT_SET", in->type); \ } /* Wrapper for 'gal_data_copy_to_new_type', but will copy to the same type as the input. Recall that if the input is a tile (a part of the input, which is not-contiguous if it has more than one dimension), then the output will have only the elements that cover the tile.*/ gal_data_t * gal_data_copy(gal_data_t *in) { return gal_data_copy_to_new_type(in, gal_tile_block(in)->type); } /* Copy a given data structure to a new one with any type (for the output). The input can be a tile, in which case the output will be a contiguous patch of memory that has all the values within the input tile in the requested type. */ gal_data_t * gal_data_copy_to_new_type(gal_data_t *in, uint8_t newtype) { gal_data_t *out; /* Allocate the output datastructure. */ out=gal_data_alloc(NULL, newtype, in->ndim, in->dsize, in->wcs, 0, in->minmapsize, in->quietmmap, in->name, in->unit, in->comment); /* Fill in the output array: */ gal_data_copy_to_allocated(in, out); /* Return the created array */ return out; } /* Copy the input data structure into a new type and free the allocated space. */ gal_data_t * gal_data_copy_to_new_type_free(gal_data_t *in, uint8_t newtype) { gal_data_t *out, *iblock=gal_tile_block(in); /* In a general application, it might happen that the type is equal with the type of the input and the input isn't a tile. Since the job of this function is to free the input dataset, and the user just wants one dataset after this function finishes, we can safely just return the input. */ if(newtype==iblock->type && in==iblock) return in; else { out=gal_data_copy_to_new_type(in, newtype); if(iblock==in) gal_data_free(in); else fprintf(stderr, "#####\nWarning from " "'gal_data_copy_to_new_type_free'\n#####\n The input " "dataset is a tile, not a contiguous (fully allocated) " "patch of memory. So it has not been freed. Please use " "'gal_data_copy_to_new_type' to avoid this warning.\n" "#####"); return out; } } /* Copy a given dataset ('in') into an already allocated dataset 'out' (the actual dataset and its 'array' element). The meta-data of 'in' (except for 'block') will be fully copied into 'out' also. 'out->size' will be used to find the available space in the allocated space. When 'in->size != out->size' this function will behave as follows: 'out->size < in->size': it won't re-allocate the necessary space, it will abort with an error, so please check before calling this function. 'out->size > in->size': it will update 'out->size' and 'out->dsize' to be the same as the input. So if you want to re-use a pre-allocated space with varying input sizes, be sure to reset 'out->size' before every call to this function. */ void gal_data_copy_to_allocated(gal_data_t *in, gal_data_t *out) { gal_data_t *iblock=gal_tile_block(in); /* Make sure the number of allocated elements (of whatever type) in the output is not smaller than the input. Note that the type is irrelevant because we will be doing type conversion if they differ.*/ if( out->size < in->size ) error(EXIT_FAILURE, 0, "%s: the output dataset must be equal or larger " "than the input. the sizes are %zu and %zu respectively", __func__, out->size, in->size); if( out->ndim != in->ndim ) error(EXIT_FAILURE, 0, "%s: the output dataset must have the same number " "of dimensions, the dimensions are %zu and %zu respectively", __func__, out->ndim, in->ndim); /* Free possibly allocated meta-data strings. */ if(out->name) free(out->name); if(out->unit) free(out->unit); if(out->comment) free(out->comment); /* Write the basic meta-data. */ out->flag = in->flag; out->next = in->next; out->status = in->status; out->disp_width = in->disp_width; out->disp_precision = in->disp_precision; gal_checkset_allocate_copy(in->name, &out->name); gal_checkset_allocate_copy(in->unit, &out->unit); gal_checkset_allocate_copy(in->comment, &out->comment); /* Do the copying. */ if(in->array) switch(out->type) { case GAL_TYPE_UINT8: COPY_OT_SET( uint8_t ); break; case GAL_TYPE_INT8: COPY_OT_SET( int8_t ); break; case GAL_TYPE_UINT16: COPY_OT_SET( uint16_t ); break; case GAL_TYPE_INT16: COPY_OT_SET( int16_t ); break; case GAL_TYPE_UINT32: COPY_OT_SET( uint32_t ); break; case GAL_TYPE_INT32: COPY_OT_SET( int32_t ); break; case GAL_TYPE_UINT64: COPY_OT_SET( uint64_t ); break; case GAL_TYPE_INT64: COPY_OT_SET( int64_t ); break; case GAL_TYPE_FLOAT32: COPY_OT_SET( float ); break; case GAL_TYPE_FLOAT64: COPY_OT_SET( double ); break; case GAL_TYPE_STRING: data_copy_to_string(in, out); break; case GAL_TYPE_BIT: case GAL_TYPE_STRLL: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: copying to %s type not yet supported", __func__, gal_type_name(out->type, 1)); break; default: error(EXIT_FAILURE, 0, "%s: type %d not recognized for 'out->type'", __func__, out->type); } else out->array=NULL; /* Correct the sizes of the output to be the same as the input. If it is equal, there is no problem, if not, the size information will be changed, so if you want to use this allocated space again, be sure to re-set the size parameters. As defined in 'gal_data_initialize', when there is no dataset, 'dsize' should be NULL. So if 'in->dsize==NULL', but 'out->dsize!=NULL', then we should free 'out->dsize' and set it to NULL. Alternatively, if 'out' hasn't allocated a 'dsize', but 'in' already has one, allocate 'out->dsize', then fill it. */ out->size=in->size; if(in->dsize) { if(out->dsize==NULL) out->dsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, in->ndim, 0, __func__, "out->dsize"); memcpy(out->dsize, in->dsize, in->ndim * sizeof *(in->dsize) ); } else if(out->dsize) { free(out->dsize); out->dsize=NULL; } } /* Just a wrapper around 'gal_type_from_string_auto', to return a 'gal_data_t' dataset hosting the allocated number. */ gal_data_t * gal_data_copy_string_to_number(char *string) { void *ptr; uint8_t type; size_t dsize=1; ptr=gal_type_string_to_number(string, &type); return ( ptr ? gal_data_alloc(ptr, type, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL) : NULL ); } ��������������gnuastro-0.22/lib/ds9.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000014515�14551337306�010406� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to interface with DS9 files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Pedram Ashofteh-Ardakani <pedramardakani@pm.me> Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnuastro/ds9.h> #include <gnuastro/data.h> #include <gnuastro-internal/options.h> /* Read the polygon specified in the given DS9 region file and parse it in the standard format. */ gal_data_t * gal_ds9_reg_read_polygon(char *filename) { FILE *fp; char *polygonstr; gal_data_t *out=NULL; size_t i, commacounter=0; int good_polygon_format=1; size_t plinelen, linesize=10, lineno=0; int coordmode=GAL_DS9_COORD_MODE_INVALID; char *c, *line, *ds9regstart="# Region file format: DS9"; char *polygonformaterr="It is expected for the line to have " "this format: 'polygon(AAA,BBB,...)'. Where 'AAA' and 'BBB' " "are numbers and '...' signifies that any number of points " "are possible"; /* Allocate size to the lines on the file and check if it was sucessfull. The getline function reallocs the necessary memory. */ errno=0; line = malloc(linesize * sizeof(*line)); if(line == NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for line buffer", __func__, linesize * sizeof(*line)); /* Open the file and checks if it's not null. */ errno=0; fp = fopen(filename, "r"); if(fp == NULL) error(EXIT_FAILURE, errno, "The polygon file is blank"); /* Get the lines on the file. */ while(getline(&line, &linesize, fp)!=-1) { /* To have line-counters starting from 1. */ ++lineno; /* The first line should start with a fixed string. */ if(lineno==1) { if( strncmp(line, ds9regstart, 25) ) error(EXIT_FAILURE, 0, "%s: doesn't appear to be a DS9 " "region file! We assume that DS9 region files begin " "with this string in their first line: '%s'", filename, ds9regstart); continue; } /* If we are on the coordinate mode line, then set the mode of Crop based on it. */ if( !strcmp(line, "fk5\n") || !strcmp(line, "image\n") ) { /* Make sure it hasn't been called more than once. */ if(coordmode!=GAL_DS9_COORD_MODE_INVALID) error_at_line(EXIT_FAILURE, 0, filename, lineno, "more than one coordinate line defined"); /* Set the proper mode. */ if(!strcmp(line, "fk5\n")) coordmode=GAL_DS9_COORD_MODE_WCS; else coordmode=GAL_DS9_COORD_MODE_IMG; /* Stop parsing the file if the polygon has also been found by this point (we don't need any more information, no need to waste the user's CPU and time). */ if(out) break; } /* The line containing the polygon information starts with 'polygon('. */ if( !strncmp(line, "polygon(", 8) ) { /* Get the line length and check if it is indeed in the proper format. The format is corrupt if we do not find the matching paranthesis before '#' or the final character. If successful, set status to '1' and ignore the rest. Here we skip the first 8 characters that contain 'polygon('. */ plinelen=strlen(line); for(i=8; i<plinelen; ++i) { if(line[i]=='#') { good_polygon_format=0; break; } if(line[i]==')') { line[i]='\0'; break; } } /* Check if we have the proper formatting. */ if(good_polygon_format==0) error_at_line(EXIT_FAILURE, 0, filename, lineno, "line with polygon vertices couldn't be " "parsed: no closing parenthesis could be" "found at the end, or before a '#'. %s", polygonformaterr); /* Convert the string to the expected format (with ':' separating each vertice). Note how we are ignoring the first 8 characters that contain 'polygon('. */ polygonstr=&line[8]; for(c=polygonstr; *c!='\0'; ++c) if(*c==',' && (++commacounter % 2) == 0 ) *c=':'; /* Read the coordinates within the line. */ out=gal_options_parse_colon_sep_csv_raw(polygonstr, filename, lineno); /* Stop parsing the file if the coordinate mode has also been found by this point (we don't need any more information, no need to waste the user's CPU and time). */ if(coordmode!=GAL_DS9_COORD_MODE_INVALID) break; } } /* If no coordinate mode was found in the file, print an error. */ if(coordmode==GAL_DS9_COORD_MODE_INVALID) error(EXIT_FAILURE, 0, "%s: no coordinate mode found! " "We expect one line to be either 'fk5' or 'image'", filename); /* If no polygon line was in the file, abort with an error. */ if(out==NULL) error(EXIT_FAILURE, 0, "%s: no polygon statement found! We expect " "one line in the format of 'polygon(AAA,BBB,...)' in the " "file given to '--polygonfile' option. %s", filename, polygonformaterr); /* Write the coordinate mode into the status component. */ out->status = coordmode; /* Clean up and return. */ free(line); fclose(fp); return out; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/eps.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000105256�14557025423�010501� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* eps -- functions to write EPS files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/box.h> #include <gnuastro/eps.h> #include <gnuastro/list.h> #include <gnuastro/color.h> #include <gnuastro/blank.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> /************************************************************* ************** Acceptable EPS names *************** *************************************************************/ int gal_eps_name_is_eps(char *name) { size_t len; if(name) { len=strlen(name); if ( ( len>=3 && strcmp(&name[len-3], "eps") == 0 ) || ( len>=3 && strcmp(&name[len-3], "EPS") == 0 ) || ( len>=4 && strcmp(&name[len-4], "epsf") == 0 ) || ( len>=4 && strcmp(&name[len-4], "epsi") == 0 ) ) return 1; else return 0; } else return 0; } int gal_eps_suffix_is_eps(char *name) { if(name) { if (strcmp(name, "eps") == 0 || strcmp(name, ".eps") == 0 || strcmp(name, "EPS") == 0 || strcmp(name, ".EPS") == 0 || strcmp(name, "epsf") == 0 || strcmp(name, ".epsf") == 0 || strcmp(name, "epsi") == 0 || strcmp(name, ".epsi") == 0) return 1; else return 0; } else return 0; } /************************************************************* ************** Write an EPS image ************** *************************************************************/ static int eps_is_binary(gal_data_t *in, uint8_t *bitone) { gal_data_t *channel; uint8_t second_set=0; unsigned char *i, *fi, first=0, second=0; /* Go through all the channels. */ for(channel=in; channel!=NULL; channel=channel->next) { /* Go through all the values and see if there is more than two values in the array. */ fi = (i=channel->array) + channel->size; first=*i; do if(*i!=first) { if(second_set) { if(*i!=second) break; } else { second=*i; second_set=1; } } while(++i<fi); /* If we didn't get to the end of the array, then we have a multi-valued (not binary) image. */ if(i!=fi) return 0; } /* If we get to this point, then all the channels were binary, so return success. */ *bitone = first>second ? first : second; return 1; } /* Convert the channels into into a 0 and 1 bit stream. This function is only called when the image is binary (has only two values). NOTE: each row has to have an integer number of bytes, so when the number of pixels in a row is not a multiple of 8, we'll add one. */ static gal_data_t * eps_convert_to_bitstream(gal_data_t *in, size_t *numbytes, uint8_t bitone) { size_t i, j, k, bytesinrow; gal_data_t *channel, *out=NULL; unsigned char *bits, byte, curbit, *arr; size_t s0=in->dsize[0], s1=in->dsize[1]; /* Find the size values and allocate the array. */ if( s1 % 8 ) bytesinrow = s1/8 + 1; else bytesinrow = s1/8; *numbytes = bytesinrow*s0; /* Go over all the channels. */ for(channel=in; channel!=NULL; channel=channel->next) { /* Allocate the array. Note that we currently don't have an allocation system for bits, so we'll allocate space in bytes, then convert the type to 'GAL_TYPE_BIT'. */ gal_list_data_add_alloc(&out, NULL, GAL_TYPE_UINT8, 1, numbytes, NULL, 0, -1, 1, NULL, NULL, NULL); out->type=GAL_TYPE_BIT; bits=out->array; /* Put the values in. */ arr=channel->array; for(i=0;i<s0;++i) /* i*s0+j is the byte, not bit position. */ for(j=0;j<bytesinrow;++j) { /* Set the 8 bits to zero. */ byte=0; /* Current bit position. */ curbit=0x80; /* Write the next 8 values as bits. */ for(k=0;k<8;++k) { if( j*8+k < s1 ) { if(arr[i*s1+j*8+k]==bitone) byte |= curbit; curbit >>= 1; } else break; } /* Write the byte into the array. */ bits[i*bytesinrow+j]=byte; } } /* Reverse the list and return it. */ gal_list_data_reverse(&out); return out; } static void eps_write_hex(gal_data_t *write, FILE *fp, size_t numbytes) { unsigned char *arr; gal_data_t *channel; size_t i=0, j, elem_for_newline=35; for(channel=write; channel!=NULL; channel=channel->next) { if(channel->status) /* A blank channel has status==1. */ fprintf(fp, "{<00>} %% Channel %zu is blank\n", i); else { arr=channel->array; fprintf(fp, "{<"); for(j=0;j<numbytes;++j) { fprintf(fp, "%02X", arr[j]); if(j%elem_for_newline==0) fprintf(fp, "\n"); } fprintf(fp, ">}\n"); } ++i; } } static void eps_write_ascii85(gal_data_t *write, FILE *fp, size_t numbytes) { unsigned char *arr; gal_data_t *channel; uint32_t anint, base; size_t i=0, j, k, elem_for_newline=15; /* 15*5=75 */ for(channel=write; channel!=NULL; channel=channel->next) { if(channel->status) fprintf(fp, "{<00>} %% Channel %zu is blank\n", i); else { arr=channel->array; fprintf(fp, "{<~"); for(j=0;j<numbytes;j+=4) { /* This is the last four bytes */ if(numbytes-j<4) { anint=arr[j]*256*256*256; if(numbytes-j>1) anint+=arr[j+1]*256*256; if(numbytes-j==3) anint+=arr[j+2]*256; } else anint=( arr[j]*256*256*256 + arr[j+1]*256*256 + arr[j+2]*256 + arr[j+3] ); /* If all four bytes are zero, then just print 'z'. */ if(anint==0) fprintf(fp, "z"); else { /* To check, just change the fprintf below to printf: printf("\n\n"); printf("%u %u %u %u\n", in[i], in[i+1], in[i+2], in[i+3]); */ base=85*85*85*85; /* Do the ASCII85 encoding: */ for(k=0;k<5;++k) { fprintf(fp, "%c", anint/base+33); anint%=base; base/=85; } } /* Go to the next line if on the right place: */ if(j%elem_for_newline==0) fprintf(fp, "\n"); } fprintf(fp, "~>}\n"); } ++i; } } static void eps_write_image(gal_data_t *in, FILE *fp, int hex, int dontoptimize, int forps) { int bpc=8; uint8_t bitone; gal_data_t *write; size_t i, numbytes, *dsize=in->dsize; size_t numch=gal_list_data_number(in); /* Set the number of bits per component. */ if( numch==1 && dontoptimize==0 && eps_is_binary(in, &bitone) ) { bpc=1; write=eps_convert_to_bitstream(in, &numbytes, bitone); } else { write=in; numbytes=in->size; } /* Write the basic meta data. */ switch(numch) { case 1: fprintf(fp, "/DeviceGray setcolorspace\n"); break; case 3: fprintf(fp, "/DeviceRGB setcolorspace\n"); break; case 4: fprintf(fp, "/DeviceCMYK setcolorspace\n"); break; default: error(EXIT_FAILURE, 0, "%s: a bug! The number of channels (%zu) is " "not 1, 3 or 4. Please contact us so we can find the issue and " "fix it", __func__, numch); } fprintf(fp, "<<\n"); fprintf(fp, " /ImageType 1\n"); fprintf(fp, " /Width %zu\n", dsize[1]); fprintf(fp, " /Height %zu\n", dsize[0]); fprintf(fp, " /ImageMatrix [ %zu 0 0 %zu 0 0 ]\n", dsize[1], dsize[0]); fprintf(fp, " /MultipleDataSources true\n"); fprintf(fp, " /BitsPerComponent %d\n", bpc); fprintf(fp, " /Decode["); for(i=0;i<numch;++i) {fprintf(fp, " 0 1");} fprintf(fp, " ]\n"); fprintf(fp, " /Interpolate false\n"); fprintf(fp, " /DataSource [\n"); /* Based on the encoding, write the contents of the image. */ if(hex) eps_write_hex(write, fp, numbytes); else eps_write_ascii85(write, fp, numbytes); /* Finish the file. */ fprintf(fp, " ]\n"); fprintf(fp, ">>\n"); fprintf(fp, "image\n\n"); /* Finish the image part based on the final output. Note that 'grestore' will also fix the translation we done on top so the point moves to (0,0) before making the next path. */ if(forps) fprintf(fp, "showpage\n\n"); else fprintf(fp, "grestore\n\n"); /* Clean up. */ if(write!=in) gal_list_data_free(write); } /* The "point" is the smallest unit of measure in Postscript (and typesetting in general). It is defined like this: 72 points is 1 international inch. So 72 points is 2.54 cm. */ void gal_eps_to_pt(float widthincm, size_t *dsize, size_t *w_h_in_pt) { w_h_in_pt[0] = widthincm*72.0f/2.54f; w_h_in_pt[1] = (float)( dsize[0] * w_h_in_pt[0] )/(float)(dsize[1]); } /* Return the macro corresponding the to the given shape. */ uint8_t gal_eps_shape_name_to_id(char *n) { if( !strcasecmp(n, "line") ) return GAL_EPS_MARK_SHAPE_LINE; else if( !strcasecmp(n, "plus") ) return GAL_EPS_MARK_SHAPE_PLUS; else if( !strcasecmp(n, "cross") ) return GAL_EPS_MARK_SHAPE_CROSS; else if( !strcasecmp(n, "point") ) return GAL_EPS_MARK_SHAPE_POINT; else if( !strcasecmp(n, "circle") ) return GAL_EPS_MARK_SHAPE_CIRCLE; else if( !strcasecmp(n, "square") ) return GAL_EPS_MARK_SHAPE_SQUARE; else if( !strcasecmp(n, "ellipse") ) return GAL_EPS_MARK_SHAPE_ELLIPSE; else if( !strcasecmp(n, "rectangle") ) return GAL_EPS_MARK_SHAPE_RECTANGLE; else error(EXIT_FAILURE, 0, "%s: the shape name '%s' is not recognized. " "The currently recognized shapes are: 'point', 'circle', " "'square', 'ellipse' or 'rectangle'", __func__, n); /* Control should not reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to find " "and solve the problem. Control should not reach this part " "of the function", __func__, PACKAGE_BUGREPORT); return GAL_EPS_MARK_SHAPE_INVALID; } /* Convert a shape ID to a name */ char * gal_eps_shape_id_to_name(uint8_t id) { /* Return the proper name. */ switch(id) { case GAL_EPS_MARK_SHAPE_LINE: return "line"; case GAL_EPS_MARK_SHAPE_PLUS: return "plus"; case GAL_EPS_MARK_SHAPE_CROSS: return "cross"; case GAL_EPS_MARK_SHAPE_POINT: return "point"; case GAL_EPS_MARK_SHAPE_CIRCLE: return "circle"; case GAL_EPS_MARK_SHAPE_SQUARE: return "square"; case GAL_EPS_MARK_SHAPE_ELLIPSE: return "ellipse"; case GAL_EPS_MARK_SHAPE_RECTANGLE: return "rectangle"; default: error(EXIT_FAILURE, 0, "%s: the shape id '%u' is not recognized. " "Please see the 'GAL_EPS_MARK_SHAPE_*' macros in " "'gnuastro/eps.h' for the acceptable ids", __func__, id); } /* Control should not reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to find " "and solve the problem. Control should not reach this part " "of the function", __func__, PACKAGE_BUGREPORT); return GAL_BLANK_STRING; } /* Find the center coordinate */ static void eps_mark_to_pt(float x_pix, float y_pix, float size1_pix, float size2_pix, double pix_in_pt, uint32_t borderwidth, long ymin, uint8_t shapev, float *x_pt, float *y_pt, float *size1_pt, float *size2_pt, float *ymin_pt) { /* Necessary shift (in points) because of the coordiante system that has been edited due to the image and border width */ float shiftpt=borderwidth; /* Do the conversion: 1) Subtract by half so the bottom-left corners of the point and FITS X axis match. 2) Multiply by the pixel-to-point conversion scale. 3) account for the shift. */ *x_pt = (x_pix-0.5) * pix_in_pt + shiftpt; *y_pt = (y_pix-0.5) * pix_in_pt + shiftpt; /* Other parameters. Note that for an ellipse, the second size paramter is the axis ratio. */ *ymin_pt = ymin * pix_in_pt; *size1_pt = size1_pix * pix_in_pt; *size2_pt = ( shapev==GAL_EPS_MARK_SHAPE_ELLIPSE ? size2_pix : size2_pix * pix_in_pt ); } /* Low-level function to draw the shape in the corrected coordinate system (after translation and rotation). */ static void eps_mark_draw_shape(FILE *fp, uint8_t shape, float s1, float s2) { /* Draw the shape. */ switch(shape) { case GAL_EPS_MARK_SHAPE_LINE: fprintf(fp, "%f 0 moveto %f 0 lineto \n", -s1/2, s1/2); break; case GAL_EPS_MARK_SHAPE_PLUS: fprintf(fp, "%f 0 moveto %f 0 lineto \n", -s1/2, s1/2); fprintf(fp, "0 %f moveto 0 %f lineto closepath\n", -s1/2, s1/2); break; case GAL_EPS_MARK_SHAPE_CROSS: fprintf(fp, "%f %f moveto %f %f lineto \n", -s1/M_SQRT2/2, -s1/M_SQRT2/2, s1/M_SQRT2/2, s1/M_SQRT2/2); fprintf(fp, "%f %f moveto %f %f lineto \n", -s1/M_SQRT2/2, s1/M_SQRT2/2, s1/M_SQRT2/2, -s1/M_SQRT2/2); break; case GAL_EPS_MARK_SHAPE_POINT: fprintf(fp, "newpath 0 0 %f 0 360 arc fill closepath\n", s1); break; case GAL_EPS_MARK_SHAPE_CIRCLE: fprintf(fp, "newpath 0 0 %f 0 360 arc closepath\n", s1); break; case GAL_EPS_MARK_SHAPE_ELLIPSE: fprintf(fp, "newpath 0 0 %f %f 0 360 ellipse\n", s1, s1*s2); break; case GAL_EPS_MARK_SHAPE_SQUARE: fprintf(fp, "newpath -%.2f -%.2f %.2f %.2f rectstroke\n", s1/2, s1/2, s1, s1); break; case GAL_EPS_MARK_SHAPE_RECTANGLE: fprintf(fp, "newpath -%.2f -%.2f %.2f %.2f rectstroke\n", s1/2, s2/2, s1, s2); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. The code '%d' is not recognized for the " "'shape' variable", __func__, PACKAGE_BUGREPORT, shape); } } /* Insert the part about the mark shape. */ static void eps_mark_add_shape(FILE *fp, size_t index, float x, float y, float s1, float s2, float linewidth, uint8_t color, uint8_t shape, float rotate, char *text, float textsize, char *textfont, float yminpt) { float rgb[3]; /* If the rotation angle is negative, add it with 360 so it becomes positive. */ if(rotate<0.0) rotate+=360.0; /* Print a comment, identifying that this is a mark. */ fprintf(fp, "%% Mark %zu (a %s):\n", index+1, gal_eps_shape_id_to_name(shape)); /* If the shape is a circle, or the user gave a rotation angle of zero, then rotation is irrelevant, so set it to NaN, so we don't even write it into the file. */ if(shape==GAL_EPS_MARK_SHAPE_CIRCLE || rotate==0.0) rotate=NAN; /* If 'linewidth' isn't blank, then we need to set it for each mark. */ if( !isnan(linewidth) ) fprintf(fp, "%f setlinewidth\n", linewidth); /* Set the color (if it hasn't already been set. */ if( color != GAL_BLANK_UINT8 ) { gal_color_in_rgb(color, rgb); fprintf(fp, "%.2f %.2f %.2f setrgbcolor\n", rgb[0], rgb[1], rgb[2]); } /* Move the coordinate to the desired central coordinate and do the rotation if requested. */ fprintf(fp, "%f %f translate\n", x, y); if( !isnan(rotate) ) fprintf(fp, "%f rotate\n", rotate); /* Draw the shape. */ eps_mark_draw_shape(fp, shape, s1, s2); /* Correct the rotation. */ if( !isnan(rotate) ) fprintf(fp, "-%f rotate\n", rotate); fprintf(fp, "-%f -%f translate\n", x, y); /* Finish the stroke. */ fprintf(fp, "stroke\n\n"); /* Write the text (if 'text' isn't NULL, and it isn't a blank string. */ if( text && strcmp(text, GAL_BLANK_STRING) ) { fprintf(fp, "%% Text of the mark above\n"); fprintf(fp, "(%s) %g /%s %g %g centertoptext\n\n", text, textsize, textfont, x, yminpt); } } /* Simplify the checking of various columns. */ static void * eps_mark_prepare_col(gal_data_t *marks, char *name, uint8_t type, int abort, char *extrainfo) { gal_data_t *tmp=gal_list_data_select_by_name(marks, name); /* If a list element was found, check if it has the correct type. */ if(tmp) { if(tmp->type!=type) error(EXIT_FAILURE, 0, "%s: the '%s' column should have " "a %s numeric data type%s", __func__, name, gal_type_name(type, 1), extrainfo); return tmp->array; } else { if(abort) error(EXIT_FAILURE, 0, "%s: no column with name '%s' was found " "in the list of mark metadata", __func__, name); } /* No list element with the desired name was found. */ return NULL; } /* Make sure the inputs are in the desired format and return the usable arrays for the main function to add marks. */ static void eps_mark_prepare(gal_data_t *marks, float **x, float **y, uint8_t **shape, uint8_t **color, float **size1, float **size2, float **lwidth, float **rotate, char ***text, char ***font, float **fontsize) { size_t i; gal_data_t *tmp; /* Make sure all the columns given to 'marks' have the same number elements. */ for(tmp=marks;tmp!=NULL;tmp=tmp->next) { if(tmp->size!=marks->size) error(EXIT_FAILURE, 0, "%s: the mark column '%s' has " "a different number of rows, or elements (%zu), than " "the first (named '%s' with %zu rows)", __func__, tmp->name, tmp->size, marks->name, marks->size); } /* Check each column. */ *x=eps_mark_prepare_col(marks, GAL_EPS_MARK_COLNAME_XPIX, GAL_TYPE_FLOAT32, 1, ""); *y=eps_mark_prepare_col(marks, GAL_EPS_MARK_COLNAME_YPIX, GAL_TYPE_FLOAT32, 1, ""); *text=eps_mark_prepare_col(marks, GAL_EPS_MARK_COLNAME_TEXT, GAL_TYPE_STRING, 0, ""); *font=eps_mark_prepare_col(marks, GAL_EPS_MARK_COLNAME_FONT, GAL_TYPE_STRING, 0, ""); *size1=eps_mark_prepare_col(marks, GAL_EPS_MARK_COLNAME_SIZE1, GAL_TYPE_FLOAT32, 0, ""); *size2=eps_mark_prepare_col(marks, GAL_EPS_MARK_COLNAME_SIZE2, GAL_TYPE_FLOAT32, 0, ""); *rotate=eps_mark_prepare_col(marks, GAL_EPS_MARK_COLNAME_ROTATE, GAL_TYPE_FLOAT32, 0, ""); *lwidth=eps_mark_prepare_col(marks, GAL_EPS_MARK_COLNAME_LINEWIDTH, GAL_TYPE_FLOAT32, 0, ""); *fontsize=eps_mark_prepare_col(marks, GAL_EPS_MARK_COLNAME_FONTSIZE, GAL_TYPE_FLOAT32, 0, ""); *shape=eps_mark_prepare_col(marks, GAL_EPS_MARK_COLNAME_SHAPE, GAL_TYPE_UINT8, 0, ". Note that the macros " "containing shape identifiers have the " "'GAL_EPS_MARK_SHAPE-' prefix and are " "defined in 'gnuastro/eps.h'"); *color=eps_mark_prepare_col(marks, GAL_EPS_MARK_COLNAME_COLOR, GAL_TYPE_UINT8, 0, ". Note that the macros " "containing color identifiers have the " "'GAL_COLOR_' prefix and are " "defined in 'gnuastro/color.h'"); /* Some sanity checks for the columns that need one. */ if( *rotate || *shape ) for(i=0;i<marks->size;++i) { /* Rotation angle should be between 0 to 360. */ if( *rotate && ((*rotate)[i]<-360 || (*rotate)[i]>360 ) ) error(EXIT_FAILURE, 0, "%s: %g is not a valid rotation angle " "(in degrees). It belongs to mark number %zu (counting " "from 1)", __func__, (*rotate)[i], i+1); /* For an ellipse, the 'size2' column should be positive and smaller than one. */ if( (*shape)[i]==GAL_EPS_MARK_SHAPE_ELLIPSE && *size2 && ( (*size2)[i]<0 || (*size2)[i]>1 ) ) error(EXIT_FAILURE, 0, "%s: %g is not a valid 'size2' column " "for an ellipse shape (from mark number %zu, counting " "from 1). For an ellipse, the 'size2' column is the" "axis ratio, so it should always be between 0 and 1", __func__, (*size2)[i], i+1); } } /* Write the default mark properties (like linewidth, color and etc). This can happen if they aren't given by the user, or that all the values given by the user are the same. */ static void eps_mark_add_defaults(FILE *fp, gal_data_t *marks, uint8_t **color_o, float **lwidth_o, uint8_t *shape, char **text) { size_t i; float rgb[3]; uint8_t *color=*color_o; float *lwidth=*lwidth_o; int samelwidth=1, samecolor=1; /* Parse all the information */ for(i=1;i<marks->size;++i) { if(samecolor==1 && color && color[i]!=color[0] ) samecolor=0; if(samelwidth==1 && lwidth && lwidth[i]!=lwidth[0]) samelwidth=0; } /* Default color */ if(samecolor) { fprintf(fp, "%% Same color for all marks:\n"); gal_color_in_rgb(color ? color[0] : GAL_EPS_MARK_DEFAULT_COLOR, rgb); fprintf(fp, "%.2f %.2f %.2f setrgbcolor\n\n", rgb[0], rgb[1], rgb[2]); } /* Default line-width. */ if(samelwidth) { fprintf(fp, "%% Same line width for all marks:\n"); fprintf(fp, "%f setlinewidth\n\n", lwidth ? lwidth[0] : GAL_EPS_MARK_DEFAULT_LINEWIDTH); *lwidth_o=NULL; } /* If an ellipse has been requested, define the function (this function has been inspired from http://www.redgrittybrick.org/ellipse.html */ if(shape) { for(i=0;i<marks->size;++i) if(shape[i]==GAL_EPS_MARK_SHAPE_ELLIPSE) { fprintf(fp, "%% Function for ellipse shape:\n"); fprintf(fp, "/ellipse {\n"); fprintf(fp, " /endangle exch def\n"); fprintf(fp, " /startangle exch def\n"); fprintf(fp, " /yrad exch def\n"); fprintf(fp, " /xrad exch def\n"); fprintf(fp, " /y exch def\n"); fprintf(fp, " /x exch def\n"); fprintf(fp, " /savematrix matrix currentmatrix def\n"); fprintf(fp, " x y translate\n"); fprintf(fp, " xrad yrad scale\n"); fprintf(fp, " 0 0 1 startangle endangle arc\n"); fprintf(fp, " savematrix setmatrix\n"); fprintf(fp, "} def\n\n"); break; } } /* In case we have text, use this function to put them such that they the given coordinate is at the top of the string. This was inspired from [1] (the main change is that '-2 div' (for 'dy') has been set to '-1 mul' so the given coordinate is at the top. It should be called with the following format (just set the upper-case words). (STRING) FONTSIZE FONTNAME X Y centertoptext [1] https://stackoverflow.com/questions/3618194/how-to-determine-string-height-in-postscript*/ if(text) { fprintf(fp, "%% Print text with coordinate at center-top:\n"); fprintf(fp, "/centertoptext {\n"); /* Save the current state. */ fprintf(fp, " gsave\n"); /* Move to the top two popped operands (X and Y), and set the fonts. */ fprintf(fp, " moveto findfont exch scalefont setfont\n"); /* Save the state. */ fprintf(fp, " gsave\n"); /* 1. dup: Duplicate the string. 2. charpath: move to where the string finishes. 3. flattenpath: account for curves. 4. pathbox: put four numbers on the stack: x0: bottom-left point's X axis position. y0: bottom-left point's Y axis position. x1: top-right point's X axis position. y1: top-right point's Y axis position. */ fprintf(fp, " dup false charpath flattenpath pathbbox\n"); /* Go back to the previous settings (before charpath changed it). */ fprintf(fp, " grestore\n"); /* 3 -1 roll: permutes the top three: y0 x1 y1 ---> x1 y1 y0 */ fprintf(fp, " 3 -1 roll\n"); /* Subtract the second popped operand from the first (at the top, we now have the height of the text's box or 'dy'. Then multiply this by -1, giving us '-dy' (which is the distance we want to shift vertically/downwards before "showing" the string. */ fprintf(fp, " sub -1 mul\n"); /* 3 1 roll: permute the top three points: x0 x1 dy --> dy x0 x1 */ fprintf(fp, " 3 1 roll\n"); /* Subtract x0 from x1 get the negative 'dx' on top of the stack. Then divide it by two, so we have '-dx/2' (we need to shift the word by the amount along the horizintal/left-ward before "show"ing it).*/ fprintf(fp, " sub 2 div\n"); /* Exchange the top operands so they are in this order: '-dx -dy'. */ fprintf(fp, " exch \n"); /* Move (relatively) by the given displacement and print the string (which has stayed at the bottom of the stack until now) and print the string.. */ fprintf(fp, " rmoveto show\n"); /* Restore the graphical environment for next paths. */ fprintf(fp, " grestore\n"); fprintf(fp, "} bind def\n\n"); } } /* Set the second size parameter (depending on a shape being defined or not). */ static float eps_mark_size2(uint8_t *shape, float *size2arr, size_t i) { if(size2arr) return size2arr[i]; else { if(shape) switch(shape[i]) { case GAL_EPS_MARK_SHAPE_ELLIPSE: return GAL_EPS_MARK_DEFAULT_SIZE2_ELLIPSE; default: return GAL_EPS_MARK_DEFAULT_SIZE2; } else return GAL_EPS_MARK_DEFAULT_SIZE2; } return NAN; } /* Fill the 'fpixel' and 'lpixel' arrays for the shapes that may be affected by rotation. */ static void eps_mark_in_img_fl_pixel(float x, float y, float s1, float s2, uint8_t shape, long *fpixel, long *lpixel) { long width[2]; double center[2]={x, y}; /* Depending the shape, set the four corners in relation to the shape's center (these will later be added to the X,Y of the center). */ switch(shape) { case GAL_EPS_MARK_SHAPE_LINE: width[0]=s1; width[1]=0; break; /* EPS line-width will be added */ /* later, this is the box size. */ case GAL_EPS_MARK_SHAPE_PLUS: case GAL_EPS_MARK_SHAPE_SQUARE: width[0]=width[1]=s1; break; case GAL_EPS_MARK_SHAPE_POINT: case GAL_EPS_MARK_SHAPE_CIRCLE: width[0]=width[1]=s1*2; break; /* s1 is radius: half of width */ case GAL_EPS_MARK_SHAPE_CROSS: width[0]=width[1]=M_SQRT2*s1; break; case GAL_EPS_MARK_SHAPE_RECTANGLE: width[0]=s1; width[1]=s2; break; case GAL_EPS_MARK_SHAPE_ELLIPSE: width[0]=s1*2; width[1]=s1*s2*2; /* s1: half major axis. */ break; /* s2: axis ratio. */ default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "find and fix the problem. The code '%u' isn't recognized " "for the 'shape' variable", __func__, PACKAGE_BUGREPORT, shape); } /* Find the before-rotation fpixel and lpixel */ gal_box_border_from_center(center, 2, width, fpixel, lpixel); /* For a check: printf("%s:center: %g, %g\n", __func__, center[0], center[1]); printf("%s:width: %ld, %ld\n", __func__, width[0], width[1]); printf("%s:fpixel: %ld, %ld\n", __func__, fpixel[0], fpixel[1]); printf("%s:lpixel: %ld, %ld\n", __func__, lpixel[0], lpixel[1]); */ } /* See if the given shape falls within the image or not. Currently, this doesn't account for rotation due to time limits at development time. */ static int eps_mark_in_img(size_t *dsize, size_t i, float x, float y, float *size1arr, float *size2arr, uint8_t *shapearr, float *rotarr, long *ymin) { long naxes[2]={dsize[1], dsize[0]}; float s2 = eps_mark_size2(shapearr, size2arr, i); long fpixel_i[2], lpixel_i[2], fpixel_o[2], lpixel_o[2]; uint8_t shape = shapearr ? shapearr[i] : GAL_EPS_MARK_DEFAULT_SHAPE; float s1 = size1arr ? size1arr[i] : GAL_EPS_MARK_DEFAULT_SIZE1; float rot = rotarr ? rotarr[i] : GAL_EPS_MARK_DEFAULT_ROTATE; /* Find the first and last pixels of the marks based on its shape. For a point, things are easy, but for others, we have a separate function. */ eps_mark_in_img_fl_pixel(x, y, s1, s2, shape, fpixel_i, lpixel_i); /* Update the box's first and last pixels based on the rotation. This is not necessary if we don't have any rotation or we are dealing with a circle shape. */ if( rot!=0.0 && shape!=GAL_EPS_MARK_SHAPE_POINT && shape!=GAL_EPS_MARK_SHAPE_CIRCLE ) gal_box_border_rotate_around_center(fpixel_i, lpixel_i, 2, rot); /* Set the smallest vertical position of the box. */ *ymin=fpixel_i[1]; /* See if there is any overlap */ return gal_box_overlap(naxes, fpixel_i, lpixel_i, fpixel_o, lpixel_o, 2); } /* Add markers on each desired coordinate. */ static void eps_mark_add(gal_data_t *in, gal_data_t *marks, FILE *fp, size_t *w_h_in_pt, uint32_t borderwidth) { size_t i; long ymin; float lwidthv; char **text=NULL, **font=NULL; uint8_t shapev, *shape=NULL, *color=NULL; float s1, s2, *size1=NULL, *size2=NULL; float yminpt, *rotate=NULL, *fontsize=NULL; float x, y, *xarr=NULL, *yarr=NULL, *lwidth=NULL; /* The size of one pixel in "points". */ double pix_in_pt=(double)(w_h_in_pt[0])/(double)(in->dsize[1]); /* Load the pointers to the various metdata. */ eps_mark_prepare(marks, &xarr, &yarr, &shape, &color, &size1, &size2, &lwidth, &rotate, &text, &font, &fontsize); /* If the mark parameters are similar, just write them once (instead of repeating for each mark, and set their pointers to 'NULL' so the rest of the function doesn't even bother with them). */ eps_mark_add_defaults(fp, marks, &color, &lwidth, shape, text); /* Write the mark into the EPS file. But only when the requested region falls within the image (we don't want to waste storage) */ for(i=0;i<marks->size;++i) if( eps_mark_in_img(in->dsize, i, xarr[i], yarr[i], size1, size2, shape, rotate, &ymin) ) { lwidthv=lwidth ? lwidth[i] : GAL_EPS_MARK_DEFAULT_LINEWIDTH; shapev=shape ? shape[i] : GAL_EPS_MARK_DEFAULT_SHAPE, eps_mark_to_pt(xarr[i], yarr[i], size1 ? size1[i] : GAL_EPS_MARK_DEFAULT_SIZE1, eps_mark_size2(shape, size2, i), pix_in_pt, borderwidth, ymin, shapev, &x, &y, &s1, &s2, &yminpt); eps_mark_add_shape(fp, i, x, y, s1, s2, lwidth ? lwidth[i] : NAN, color ? color[i] : GAL_BLANK_UINT8, shapev, rotate ? rotate[i] : GAL_BLANK_FLOAT32, text ? text[i] : NULL, fontsize ? fontsize[i] : GAL_EPS_MARK_DEFAULT_FONTSIZE, font ? font[i] : GAL_EPS_MARK_DEFAULT_FONT, yminpt - lwidthv/2); } } void gal_eps_write(gal_data_t *in, char *filename, float widthincm, uint32_t borderwidth, uint8_t bordercolor, int hex, int dontoptimize, int forps, gal_data_t *marks) { FILE *fp; float hbw; float rgb[3]; time_t rawtime; size_t numch=gal_list_data_number(in); size_t w_h_in_pt[2], *dsize=in->dsize; /* Sanity checks. */ if(numch==2 || numch>4) error(EXIT_FAILURE, 0, "%s: only 1, 3, and 4 color channels are " "acceptable, input is a list of %zu data sets", __func__, numch); if(in->type!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: input has a '%s' type, but JPEG images " "can only have a 'uint8' type", __func__, gal_type_name(in->type, 1)); /* Read the time to write in the output. */ time(&rawtime); /* Find the bounding box */ hbw=(float)borderwidth/2.0; gal_eps_to_pt(widthincm, dsize, w_h_in_pt); /* Open the output file and write the top comments. */ errno=0; fp=fopen(filename, "w"); if(fp==NULL) error(EXIT_FAILURE, errno, "%s", filename); fprintf(fp, "%%!PS-Adobe-3.0 EPSF-3.0\n"); fprintf(fp, "%%%%BoundingBox: 0 0 %zu %zu\n", w_h_in_pt[0]+2*borderwidth, w_h_in_pt[1]+2*borderwidth); fprintf(fp, "%%%%Creator: %s\n", PACKAGE_STRING); fprintf(fp, "%%%%CreationDate: %s", ctime(&rawtime)); fprintf(fp, "%%%%LanuageLevel: 3\n"); fprintf(fp, "%%%%EndComments\n\n"); if(forps==0) fprintf(fp, "gsave\n\n"); /* Write the image: */ fprintf(fp, "%% Draw the image:\n"); fprintf(fp, "%d %d translate\n", borderwidth, borderwidth); fprintf(fp, "%zu %zu scale\n", w_h_in_pt[0], w_h_in_pt[1]); eps_write_image(in, fp, hex, dontoptimize, forps); /* Mark parts of the image if necessary. */ if(marks) eps_mark_add(in, marks, fp, w_h_in_pt, borderwidth); /* Commands to draw the border: */ if(borderwidth) { gal_color_in_rgb(bordercolor, rgb); fprintf(fp, "%% Draw the border:\n"); fprintf(fp, "%.2f %.2f %.2f setrgbcolor\n", rgb[0], rgb[1], rgb[2]); fprintf(fp, "%d setlinewidth\n", borderwidth); fprintf(fp, "%.1f %.1f moveto\n", hbw, hbw); fprintf(fp, "0 %zu rlineto\n", w_h_in_pt[1]+borderwidth); fprintf(fp, "%zu 0 rlineto\n", w_h_in_pt[0]+borderwidth); fprintf(fp, "0 -%zu rlineto\n", w_h_in_pt[1]+borderwidth); fprintf(fp, "closepath\n"); fprintf(fp, "stroke\n\n"); } /* Ending of the EPS file: */ fprintf(fp, "%%%%EOF"); fclose(fp); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/fit.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000047232�14551337306�010473� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions for parametric fitting. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2022-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gsl/gsl_fit.h> #include <gsl/gsl_multifit.h> #include <gnuastro/fit.h> #include <gnuastro/blank.h> #include <gnuastro/pointer.h> #include <gnuastro-internal/checkset.h> /**********************************************************************/ /**************** Identifiers ****************/ /**********************************************************************/ /* Read the desired parameters. */ uint8_t gal_fit_name_to_id(char *name) { if( !strcmp(name, "linear") ) return GAL_FIT_LINEAR; else if( !strcmp(name, "linear-weighted") ) return GAL_FIT_LINEAR_WEIGHTED; else if( !strcmp(name, "linear-no-constant") ) return GAL_FIT_LINEAR_NO_CONSTANT; else if( !strcmp(name, "linear-no-constant-weighted") ) return GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED; else if( !strcmp(name, "polynomial-weighted") ) return GAL_FIT_POLYNOMIAL_WEIGHTED; else if( !strcmp(name, "polynomial") ) return GAL_FIT_POLYNOMIAL; else if( !strcmp(name, "polynomial-robust") ) return GAL_FIT_POLYNOMIAL_ROBUST; else return GAL_FIT_INVALID; /* If control reaches here, there was a bug! */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "find a fix it. Control should not have reached here", __func__, PACKAGE_BUGREPORT); return GAL_FIT_INVALID; } char * gal_fit_name_from_id(uint8_t fitid) { /* Prepare the temporary array. */ switch(fitid) { case GAL_FIT_LINEAR: return "linear"; case GAL_FIT_LINEAR_WEIGHTED: return "linear-weighted"; case GAL_FIT_LINEAR_NO_CONSTANT: return "linear-no-constant"; case GAL_FIT_POLYNOMIAL: return "polynomial"; case GAL_FIT_POLYNOMIAL_WEIGHTED: return "polynomial-weighted"; case GAL_FIT_POLYNOMIAL_ROBUST: return "polynomial-robust"; case GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED: return "linear-no-constant-weighted"; default: return NULL; } /* If control reaches here, there was a bug! */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "find a fix it. Control should not have reached here", __func__, PACKAGE_BUGREPORT); return NULL; } int gal_fit_name_robust_to_id(char *name) { /* In case 'name' is NULL, then return the invalid type. */ if(name==NULL) return GAL_FIT_ROBUST_INVALID; /* Match the name. */ if( !strcmp(name, "bisquare") ) return GAL_FIT_ROBUST_BISQUARE; else if( !strcmp(name, "cauchy") ) return GAL_FIT_ROBUST_CAUCHY; else if( !strcmp(name, "fair") ) return GAL_FIT_ROBUST_FAIR; else if( !strcmp(name, "huber") ) return GAL_FIT_ROBUST_HUBER; else if( !strcmp(name, "ols") ) return GAL_FIT_ROBUST_OLS; else if( !strcmp(name, "welsch") ) return GAL_FIT_ROBUST_WELSCH; else return GAL_FIT_ROBUST_INVALID; /* If control reaches here, there was a bug! */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "find a fix it. Control should not have reached this point", __func__, PACKAGE_BUGREPORT); return GAL_FIT_ROBUST_INVALID; } char * gal_fit_name_robust_from_id(uint8_t robustid) { switch(robustid) { case GAL_FIT_ROBUST_BISQUARE: return "bisquare"; case GAL_FIT_ROBUST_CAUCHY: return "cauchy"; case GAL_FIT_ROBUST_FAIR: return "fair"; case GAL_FIT_ROBUST_HUBER: return "huber"; case GAL_FIT_ROBUST_OLS: return "ols"; case GAL_FIT_ROBUST_WELSCH: return "welsch"; default: return NULL; } /* If control reaches here, there was a bug! */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "find a fix it. Control should not have reached this point", __func__, PACKAGE_BUGREPORT); return NULL; } /**********************************************************************/ /**************** Common to all ****************/ /**********************************************************************/ static gal_data_t * fit_1d_sanity_check(gal_data_t *in, gal_data_t *ref, const char *func) { gal_data_t *out; /* Make sure the input is 1-dimensional. */ if(in->ndim!=1) error(EXIT_FAILURE, 0, "%s: inputs must have one dimension", func); /* Make sure the input has the same size as the reference. */ if(in->size != ref->size) error(EXIT_FAILURE, 0, "%s: all inputs must have the same size", func); /* Make sure output has a double type. */ out = ( in->type==GAL_TYPE_FLOAT64 ? in : gal_data_copy_to_new_type(in, GAL_TYPE_FLOAT64) ); /* If there are blank values, print a warning, then return. */ if(gal_blank_present(out, 1)) error(EXIT_SUCCESS, 0, "%s: at least one of the input columns " "have a blank value; the fit will become NaN. Within the " "Gnuastro, you can use 'gal_blank_remove_rows' to remove " "all rows that have at least one blank value in any column", func); return out; } /**********************************************************************/ /**************** Linear fit ****************/ /**********************************************************************/ static gal_data_t * fit_1d_linear_base(gal_data_t *xin, gal_data_t *yin, gal_data_t *ywht, int fitid) { double *o, nparam=NAN; size_t osize, chisqind=GAL_BLANK_SIZE_T; gal_data_t *x=NULL, *y=NULL, *w=NULL, *out; /* Basic sanity checks. */ x=fit_1d_sanity_check(xin, xin, __func__); y=fit_1d_sanity_check(yin, xin, __func__); if(ywht) w=fit_1d_sanity_check(ywht, xin, __func__); /* Allocate the output dataset. */ osize = ( fitid==GAL_FIT_LINEAR || fitid==GAL_FIT_LINEAR_WEIGHTED ? 6 : 3 ); out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &osize, NULL, 0, -1, 1, NULL, NULL, NULL); /* For a check. { size_t i; double *xa=x->array, *ya=y->array; for(i=0;i<x->size;++i) printf("%-15f %-15f\n", xa[i], ya[i]); } */ /* Do the fitting. */ o=out->array; switch(fitid) { case GAL_FIT_LINEAR: nparam=2; chisqind=5; gsl_fit_linear(x->array, 1, y->array, 1, x->size, o, o+1, o+2, o+3, o+4, o+5); break; case GAL_FIT_LINEAR_WEIGHTED: nparam=2; chisqind=5; gsl_fit_wlinear(x->array, 1, w->array, 1, y->array, 1, x->size, o, o+1, o+2, o+3, o+4, o+5); break; case GAL_FIT_LINEAR_NO_CONSTANT: nparam=1; chisqind=2; gsl_fit_mul(x->array, 1, y->array, 1, x->size, o, o+1, o+2); break; case GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED: nparam=1; chisqind=2; gsl_fit_wmul(x->array, 1, w->array, 1, y->array, 1, x->size, o, o+1, o+2); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to fix the problem. The fitting id '%d' isn't recognized", __func__, PACKAGE_BUGREPORT, fitid); } /* For a check. { printf("c0: %f\nc1: %f\n" "cov00: %f\ncov01: %f\ncov11: %f\nsumsq: %f\n", o[0], o[1], o[2], o[3], o[4], o[5]); } */ /* Calculate the reduced chi^2: As mentioned in [1], in case we have the chi^2, then it is simply the chi^2 divided by the degrees of freedom. But GSL only returns the chi^2 for weighted fits. Therefore, according to [1], we can also use the residual sum of squares instead. The number of degrees of freedom is defined by the number of observations subtracted from the number of fitted parameters. [1] https://en.wikipedia.org/wiki/Reduced_chi-squared_statistic */ o[chisqind] /= (x->size - nparam); /* Clean up and return. */ if(x!=xin) gal_data_free(x); if(y!=yin) gal_data_free(y); if(ywht && w!=ywht) gal_data_free(w); return out; } gal_data_t * gal_fit_1d_linear(gal_data_t *xin, gal_data_t *yin, gal_data_t *ywht) { return fit_1d_linear_base(xin, yin, ywht, ( ywht ? GAL_FIT_LINEAR_WEIGHTED : GAL_FIT_LINEAR)); } gal_data_t * gal_fit_1d_linear_no_constant(gal_data_t *xin, gal_data_t *yin, gal_data_t *ywht) { return fit_1d_linear_base(xin, yin, ywht, ( ywht ? GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED : GAL_FIT_LINEAR_NO_CONSTANT) ); } gal_data_t * fit_1d_estimate_prepare(gal_data_t *xin, gal_data_t *fit, gal_data_t **xd, const char *func) { gal_data_t *out=NULL; /* The Fit arrays should be double precision. */ if(fit->type!=GAL_TYPE_FLOAT64 || (fit->next && fit->next->type!=GAL_TYPE_FLOAT64) ) error(EXIT_FAILURE, 0, "%s: the 'fit' argument should only " "contain double precision floating point types", func); if(fit->ndim!=1 || (fit->next && fit->next->ndim!=2) ) error(EXIT_FAILURE, 0, "%s: the 'fit' argument should only " "contain single-dimensional outputs", func); if(fit->next && (fit->next->dsize[0]!=fit->next->dsize[1])) error(EXIT_FAILURE, 0, "%s: the secont dataset of the 'fit' " "argument should be square (same size in both " "dimensions)", func); /* Make sure the input X values are in double precision. */ *xd = ( xin->type==GAL_TYPE_FLOAT64 ? xin : gal_data_copy_to_new_type(xin, GAL_TYPE_FLOAT64) ); /* Allocate the output datasets. */ gal_list_data_add_alloc(&out, NULL, GAL_TYPE_FLOAT64, 1, xin->dsize, NULL, 1, xin->minmapsize, xin->quietmmap, "Y-ESTIMATED", xin->unit, "Estimated value after fitting."); gal_list_data_add_alloc(&out, NULL, GAL_TYPE_FLOAT64, 1, xin->dsize, NULL, 1, xin->minmapsize, xin->quietmmap, "Y-ESTIMATED-ERR", xin->unit, "Estimated error on value after fitting."); gal_list_data_reverse(&out); /* Return the output. */ return out; } gal_data_t * gal_fit_1d_linear_estimate(gal_data_t *fit, gal_data_t *xin) { size_t i; gal_data_t *out=NULL, *xd; double *x, *y, *yerr, *f=fit->array; /* Do the basic preparations. */ out=fit_1d_estimate_prepare(xin, fit, &xd, __func__); /* Set the pointers. */ x = xd->array; y = out->array; yerr = out->next->array; /* Estimate the values. */ switch(fit->size) { case 6: /* Linear with constant. */ for(i=0;i<out->size;++i) gsl_fit_linear_est(x[i], f[0], f[1], f[2], f[3], f[4], y+i, yerr+i); break; case 3: /* Linear WITHOUT constant. */ for(i=0;i<out->size;++i) gsl_fit_mul_est(x[i], f[0], f[1], y+i, yerr+i); break; default: /* Un-recognized situation! */ error(EXIT_FAILURE, 0, "%s: the 'fit' argument should " "either have 6 or 3 elements (be an output of " "'gal_fit_1d_linear' or 'gal_fit_1d_linear_no_constant'" "respectively), but it has %zu elements", __func__, fit->size); } /* Clean up. */ if(xd!=xin) gal_data_free(xd); return out; } static void fit_1d_polynomial_prepare(gal_data_t *xin, gal_data_t *yin, gal_data_t *ywht, int nconst, gsl_matrix **x, gsl_vector **c, gsl_matrix **cov, gsl_vector *y, gsl_vector *w) { size_t i, j; double *xo, *xi; /* Use GSL's own matrix allocation functions for the structures that need allocation and we can't use the same allocated space of the inputs. */ *c = gsl_vector_alloc(nconst); *cov = gsl_matrix_alloc(nconst, nconst); *x = gsl_matrix_alloc(xin->size, nconst); /* Fill in the X matrix. */ xi=xin->array; xo=(*x)->data; for(i=0;i<xin->size;++i) { /* The first column (constant) doesn't depend on X. So we'll give it a value of 1.0. */ xo[ i*nconst ] = 1.0f; /* Column i is the multiplication of column i-1 with the input horizontal value. This will make it a polynomial. */ for(j=1;j<nconst;++j) xo[ i*nconst + j ] = xo[ i*nconst + j-1 ] * xi[i]; } /* For a check. { size_t checki=5; printf("Row %zu: ", checki); for(j=0;j<maxpower;++j) printf("%.3f ", xo[ checki*maxpower + j ]); printf("\n"); exit(0); } */ /* Set the pointers of the 'y' and 'w' GSL vectors. */ y->data=yin->array; if(ywht) w->data=ywht->array; } gal_data_t * gal_fit_1d_polynomial_base(gal_data_t *xin, gal_data_t *yin, gal_data_t *ywht, size_t maxpower, uint8_t robustid, double *redchisq) { /* Low-level variable. */ size_t nconst=maxpower+1; /* Other variables */ gsl_vector *c=NULL; double chisq=NAN, sse=NAN; gsl_matrix *x=NULL, *cov=NULL; size_t covsize[2]={nconst, nconst}; gsl_multifit_linear_workspace *work_n; gsl_multifit_robust_workspace *work_r; const gsl_multifit_robust_type *rtype=NULL; gal_data_t *xdata, *ydata, *wdata, *tmp, *out=NULL; /* For the 'y' and 'w' GSL vectors, we don't actually need to allocate any space, we can just use the allocated space within the 'gal_data_t'. We can't set the pointers now because we aren't sure they have 'double' type yet. */ gsl_vector yvec={yin->size, 1, NULL, NULL, 0}; /* Both have same size. */ gsl_vector wvec={yin->size, 1, NULL, NULL, 0}; /* 'ywht' may be NULL! */ gsl_vector *y=&yvec, *w=&wvec; /* These have to be after the two above.*/ /* Basic sanity checks. */ xdata = fit_1d_sanity_check(xin, xin, __func__); ydata = fit_1d_sanity_check(yin, xin, __func__); wdata = ywht ? fit_1d_sanity_check(ywht, xin, __func__) : NULL; /* Fill all the GSL structures. */ fit_1d_polynomial_prepare(xdata, ydata, wdata, nconst, &x, &c, &cov, y, w); /* Do the fit (depending on if it is robust or not. */ if(robustid==GAL_FIT_ROBUST_INVALID) { work_n = gsl_multifit_linear_alloc(xin->size, nconst); if(ywht) gsl_multifit_wlinear(x, w, y, c, cov, &chisq, work_n); else gsl_multifit_linear( x, y, c, cov, &sse, work_n); gsl_multifit_linear_free(work_n); } else { /* Select the robust function type. */ switch(robustid) { case GAL_FIT_ROBUST_BISQUARE: rtype=gsl_multifit_robust_bisquare; break; case GAL_FIT_ROBUST_CAUCHY: rtype=gsl_multifit_robust_cauchy; break; case GAL_FIT_ROBUST_FAIR: rtype=gsl_multifit_robust_fair; break; case GAL_FIT_ROBUST_HUBER: rtype=gsl_multifit_robust_huber; break; case GAL_FIT_ROBUST_OLS: rtype=gsl_multifit_robust_ols; break; case GAL_FIT_ROBUST_WELSCH: rtype=gsl_multifit_robust_welsch; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at " "'%s' to fix the problem. the 'robustid' value '%d' " "isn't recognize", __func__, PACKAGE_BUGREPORT, robustid); } /* Initialize the worker and do the fit (depending on if a weight image was provided). */ work_r=gsl_multifit_robust_alloc(rtype, x->size1, x->size2); gsl_multifit_robust(x, y, c, cov, work_r); /* Get the residual sum of squares and free the worker. */ sse=gsl_multifit_robust_statistics(work_r).sse; gsl_multifit_robust_free(work_r); } /* For a check: { size_t i; double *ca=c->data; for(i=0;i<=nconst;++i) { printf("%f ", ca[i]); } printf("\n"); } */ /* Allocate the output dataset containing the fit results as first 'gal_data_t'. */ tmp=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &nconst, NULL, 0, xin->minmapsize, xin->quietmmap, NULL, NULL, NULL); memcpy(tmp->array, c->data, nconst*sizeof c->data); out=tmp; /* Allocate the second element of the output (the covariance matrix). */ tmp=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 2, covsize, NULL, 0, xin->minmapsize, xin->quietmmap, NULL, NULL, NULL); memcpy(tmp->array, cov->data, nconst*nconst*sizeof cov->data); out->next=tmp; /* Calculate the reduced chi^2, see the description of same step in 'fit_1d_linear_base'. */ *redchisq = (isnan(chisq) ? sse : chisq) / (xdata->size-nconst); /* Clean up and return. */ gsl_matrix_free(x); gsl_vector_free(c); gsl_matrix_free(cov); if(xdata!=xin) gal_data_free(xdata); if(ydata!=yin) gal_data_free(ydata); if(ywht && wdata!=ywht) gal_data_free(wdata); return out; } gal_data_t * gal_fit_1d_polynomial(gal_data_t *xin, gal_data_t *yin, gal_data_t *ywht, size_t maxpower, double *redchisq) { return gal_fit_1d_polynomial_base(xin, yin, ywht, maxpower, GAL_FIT_ROBUST_INVALID, redchisq); } gal_data_t * gal_fit_1d_polynomial_robust(gal_data_t *xin, gal_data_t *yin, size_t maxpower, uint8_t robustid, double *redchisq) { /* Robust fitting doesn't use weights (the functions are effectively the weight). */ return gal_fit_1d_polynomial_base(xin, yin, NULL, maxpower, robustid, redchisq); } /* Estimate values from a polynomial fit. */ gal_data_t * gal_fit_1d_polynomial_estimate(gal_data_t *fit, gal_data_t *xin) { size_t i, j; size_t nconst=fit->size; gal_data_t *xd, *out=NULL; double *y, *xi, *xo, *yerr; /* We don't need to allocate space for the GSL vectors and matrices, we can just use the allocated space within the 'gal_data_t'. We can't set the pointers now because we aren't sure they have 'double' type yet. */ gsl_vector xvec={nconst, 1, NULL, NULL, 0}; gsl_vector cvec={nconst, 1, NULL, NULL, 0}; gsl_matrix cmat={nconst, nconst, nconst, NULL, NULL, 0}; /* Do the basic preparations. */ out=fit_1d_estimate_prepare(xin, fit, &xd, __func__); /* Set the pointers. */ xo = xvec.data = gal_pointer_allocate(GAL_TYPE_FLOAT64, nconst, 0, __func__, "xvec.data"); xi = xd->array; cvec.data = fit->array; y = out->array; yerr = out->next->array; cmat.data = fit->next->array; /* Do the estimation. */ for(i=0;i<xd->size;++i) { xo[0]=1.0f; for(j=1;j<nconst;++j) xo[j] = xo[j-1] * xi[i]; gsl_multifit_linear_est(&xvec, &cvec, &cmat, y+i, yerr+i); } /* Clean up and return. */ if(xd!=xin) gal_data_free(xd); free(xvec.data); return out; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/fits.c����������������������������������������������������������������������������0000644�0001750�0001750�00000443756�14551337306�010671� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to work with FITS image data. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <time.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <gsl/gsl_version.h> #include <gnuastro/git.h> #include <gnuastro/txt.h> #include <gnuastro/wcs.h> #include <gnuastro/list.h> #include <gnuastro/fits.h> #include <gnuastro/tile.h> #include <gnuastro/blank.h> #include <gnuastro/threads.h> #include <gnuastro/pointer.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/tableintern.h> #include <gnuastro-internal/fixedstringmacros.h> /************************************************************* ************** Internal necessary functions ************ *************************************************************/ static void fits_tab_write_col(fitsfile *fptr, gal_data_t *col, int tableformat, size_t *colind, char *tform, char *filename); /************************************************************* ************** Reporting errors: *************** *************************************************************/ void gal_fits_io_error(int status, char *message) { char defmessage[]="Error in CFITSIO, see above."; if(status) { fits_report_error(stderr, status); if(message) error(EXIT_FAILURE, 0, "%s", message); else error(EXIT_FAILURE, 0, "%s", defmessage); } } /************************************************************* ************** FITS name and file identification ************ *************************************************************/ /* IMPORTANT NOTE: if other compression suffixes are add to this function, include them in 'gal_checkset_automatic_output', so the compression suffix can be skipped when the user doesn't specify an output filename. */ int gal_fits_name_is_fits(char *name) { size_t len; if(name) { len=strlen(name); if ( ( len>=3 && strcmp(&name[len-3], "fit" ) == 0 ) || ( len>=4 && strcmp(&name[len-4], "fits" ) == 0 ) || ( len>=7 && strcmp(&name[len-7], "fits.gz" ) == 0 ) || ( len>=6 && strcmp(&name[len-6], "fits.Z" ) == 0 ) || ( len>=3 && strcmp(&name[len-3], "imh" ) == 0 ) || ( len>=7 && strcmp(&name[len-7], "fits.fz" ) == 0 ) ) return 1; else return 0; } else return 0; } /* IMPORTANT NOTE: if other compression suffixes are added to this function, include them in 'gal_checkset_automatic_output', so the compression suffix can be skipped when the user doesn't specify an output filename. */ int gal_fits_suffix_is_fits(char *suffix) { char *nodot; if(suffix) { nodot=suffix[0]=='.' ? (suffix+1) : suffix; if ( strcmp( nodot, "fit" ) == 0 || strcmp(nodot, "fits" ) == 0 || strcmp(nodot, "fits.gz" ) == 0 || strcmp(nodot, "fits.Z" ) == 0 || strcmp(nodot, "imh" ) == 0 || strcmp(nodot, "fits.fz" ) == 0 ) return 1; else return 0; } else return 0; } /* If the name is a FITS name, then put a '(hdu: ...)' after it and return the string. If it isn't a FITS file, just print the name. Note that the space is allocated. */ char * gal_fits_name_save_as_string(char *filename, char *hdu) { char *name; /* Small sanity check. */ if(filename==NULL) gal_checkset_allocate_copy("stdin", &name); else { if( gal_fits_name_is_fits(filename) ) { if( asprintf(&name, "%s (hdu: %s)", filename, hdu)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else gal_checkset_allocate_copy(filename, &name); } return name; } int gal_fits_file_recognized(char *filename) { FILE *tmpfile; fitsfile *fptr; int out=0, status=0; /* Opening a FITS file can be CPU intensive (for example when its compressed). So if the name has the correct suffix, we'll trust the suffix. In this way, if the file name is correct, but the contents doesn't follow the FITS standard, the opening function will complain if its not a FITS file when trying to open it for its usage. */ if( gal_fits_name_is_fits(filename) ) return 1; /* CFITSIO has some special conventions for file names (for example if its '-', which can happen in the Arithmetic program). So before passing to CFITSIO, we'll check if a file is actually associated with the string. For another example see the comments in 'gal_fits_hdu_open' about a '.gz' suffix. */ errno=0; tmpfile = fopen(filename, "r"); if(tmpfile) /* The file existed and opened. */ { /* Close the opened filed. */ if(fclose(tmpfile)==EOF) error(EXIT_FAILURE, errno, "%s", filename); /* Open the file with CFITSIO to see if its actually a FITS file. */ fits_open_file(&fptr, filename, READONLY, &status); /* If it opened successfully then status will be zero and we can safely close the file. Otherwise, this is not a recognized FITS file for CFITSIO and we should just return 0. */ if(status==0) { if( fits_close_file(fptr, &status) ) gal_fits_io_error(status, NULL); out=1; } } /* Return the final value. */ return out; } /************************************************************* ************** Type codes *************** *************************************************************/ uint8_t gal_fits_bitpix_to_type(int bitpix) { switch(bitpix) { case BYTE_IMG: return GAL_TYPE_UINT8; case SBYTE_IMG: return GAL_TYPE_INT8; case USHORT_IMG: return GAL_TYPE_UINT16; case SHORT_IMG: return GAL_TYPE_INT16; case ULONG_IMG: return GAL_TYPE_UINT32; case LONG_IMG: return GAL_TYPE_INT32; case LONGLONG_IMG: return GAL_TYPE_INT64; case FLOAT_IMG: return GAL_TYPE_FLOAT32; case DOUBLE_IMG: return GAL_TYPE_FLOAT64; default: error(EXIT_FAILURE, 0, "%s: bitpix value of %d not recognized", __func__, bitpix); } return 0; } int gal_fits_type_to_bitpix(uint8_t type) { switch(type) { case GAL_TYPE_UINT8: return BYTE_IMG; case GAL_TYPE_INT8: return SBYTE_IMG; case GAL_TYPE_UINT16: return USHORT_IMG; case GAL_TYPE_INT16: return SHORT_IMG; case GAL_TYPE_UINT32: return ULONG_IMG; case GAL_TYPE_INT32: return LONG_IMG; case GAL_TYPE_INT64: return LONGLONG_IMG; case GAL_TYPE_FLOAT32: return FLOAT_IMG; case GAL_TYPE_FLOAT64: return DOUBLE_IMG; case GAL_TYPE_BIT: case GAL_TYPE_STRLL: case GAL_TYPE_STRING: case GAL_TYPE_UINT64: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: error(EXIT_FAILURE, 0, "%s: type %s not recognized for FITS image " "BITPIX", __func__, gal_type_name(type, 1)); default: error(EXIT_FAILURE, 0, "%s: type value of %d not recognized", __func__, type); } return 0; } /* The values to the TFORM header keywords of FITS binary tables are single letter capital letters, but that is useless in identifying the data type of the column. So this function will do the conversion based on the CFITSIO manual. */ char gal_fits_type_to_bin_tform(uint8_t type) { switch(type) { /* Recognized by CFITSIO. */ case GAL_TYPE_STRING: return 'A'; case GAL_TYPE_BIT: return 'X'; case GAL_TYPE_UINT8: return 'B'; case GAL_TYPE_INT8: return 'S'; case GAL_TYPE_UINT16: return 'U'; case GAL_TYPE_INT16: return 'I'; case GAL_TYPE_UINT32: return 'V'; case GAL_TYPE_INT32: return 'J'; case GAL_TYPE_INT64: return 'K'; case GAL_TYPE_FLOAT32: return 'E'; case GAL_TYPE_FLOAT64: return 'D'; case GAL_TYPE_COMPLEX32: return 'C'; case GAL_TYPE_COMPLEX64: return 'M'; /* Not recognized by CFITSIO. */ case GAL_TYPE_UINT64: error(EXIT_FAILURE, 0, "%s: type %s not recognized for FITS binary " "table TFORM", __func__, gal_type_name(type, 1)); break; /* Wrong type code. */ default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } error(EXIT_FAILURE, 0, "%s: s bug! Please contact us so we can fix this. " "Control must not reach the end of this function", __func__); return '\0'; } int gal_fits_type_to_datatype(uint8_t type) { int w=0; switch(type) { /* Recognized CFITSIO types. */ case GAL_TYPE_BIT: return TBIT; case GAL_TYPE_UINT8: return TBYTE; case GAL_TYPE_INT8: return TSBYTE; case GAL_TYPE_FLOAT32: return TFLOAT; case GAL_TYPE_FLOAT64: return TDOUBLE; case GAL_TYPE_COMPLEX32: return TCOMPLEX; case GAL_TYPE_COMPLEX64: return TDBLCOMPLEX; case GAL_TYPE_STRING: return TSTRING; /* Types that depend on the host system. The C standard says that the 'short', 'int' and 'long' types are ATLEAST 2, 2, 4 bytes, so to be safe, we will check all of them for the 32-bit types. */ case GAL_TYPE_UINT16: w=2; if ( sizeof(short) == w ) return TUSHORT; else if( sizeof(int) == w ) return TUINT; break; case GAL_TYPE_INT16: w=2; if ( sizeof(short) == w ) return TSHORT; else if( sizeof(int) == w ) return TINT; break; /* On 32-bit systems, the length of 'int' and 'long' are both 32-bits. But CFITSIO's LONG type is preferred because it is designed to be 32-bit. Its 'INT' type is not clearly defined and caused problems when reading keywords. */ case GAL_TYPE_UINT32: w=4; if ( sizeof(long) == w ) return TULONG; else if( sizeof(int) == w ) return TUINT; else if( sizeof(short) == w ) return TUSHORT; break; /* Similar to UINT32 above. */ case GAL_TYPE_INT32: w=4; if ( sizeof(long) == w ) return TLONG; else if( sizeof(int) == w ) return TINT; else if( sizeof(short) == w ) return TSHORT; break; case GAL_TYPE_UINT64: w=8; if ( sizeof(long) == w ) return TULONG; break; case GAL_TYPE_INT64: w=8; if ( sizeof(long) == w ) return TLONG; else if( sizeof(LONGLONG) == w ) return TLONGLONG; break; /* Wrong type. */ default: error(EXIT_FAILURE, 0, "%s: type code %d is not a recognized", __func__, type); } /* If control reaches, here, there was a problem with the host types. */ if(w) error(EXIT_FAILURE, 0, "%s: this system doesn't have a %d byte integer " "type, so type '%s' cannot be written to FITS", __func__, w, gal_type_name(type, 1)); else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "fix the problem. Control must not have reached the end for the " "given type '%s'", __func__, PACKAGE_BUGREPORT, gal_type_name(type, 1)); return -1; } uint8_t gal_fits_datatype_to_type(int datatype, int is_table_column) { int inttype; switch(datatype) { case TBIT: return GAL_TYPE_BIT; case TBYTE: return GAL_TYPE_UINT8; case TSBYTE: return GAL_TYPE_INT8; case TFLOAT: return GAL_TYPE_FLOAT32; case TDOUBLE: return GAL_TYPE_FLOAT64; case TCOMPLEX: return GAL_TYPE_COMPLEX32; case TDBLCOMPLEX: return GAL_TYPE_COMPLEX64; case TSTRING: return GAL_TYPE_STRING; /* Sizes that depend on the host system. */ case TUSHORT: switch( sizeof(short) ) { case 2: return GAL_TYPE_UINT16; case 4: return GAL_TYPE_UINT32; case 8: return GAL_TYPE_UINT64; } break; case TSHORT: switch( sizeof(short) ) { case 2: return GAL_TYPE_INT16; case 4: return GAL_TYPE_INT32; case 8: return GAL_TYPE_INT64; } break; case TUINT: switch( sizeof(int) ) { case 2: return GAL_TYPE_UINT16; case 4: return GAL_TYPE_UINT32; case 8: return GAL_TYPE_UINT64; } break; case TINT: switch( sizeof(int) ) { case 2: return GAL_TYPE_INT16; case 4: return GAL_TYPE_INT32; case 8: return GAL_TYPE_INT64; } break; case TULONG: switch( sizeof(long) ) { case 4: return GAL_TYPE_UINT32; case 8: return GAL_TYPE_UINT64; } break; case TLONG: /* ==TINT32BIT when in a table column. */ if(is_table_column) return GAL_TYPE_INT32; else switch( sizeof(long) ) { case 4: return GAL_TYPE_INT32; case 8: return GAL_TYPE_INT64; } break; case TLONGLONG: return GAL_TYPE_INT64; break; /* The TLOGICAL depends on the context: for keywords, it is int32, for table columns, it is int8. */ case TLOGICAL: switch( sizeof(int) ) { case 2: inttype=GAL_TYPE_INT16; break; case 4: inttype=GAL_TYPE_INT32; break; case 8: inttype=GAL_TYPE_INT64; break; } return is_table_column ? GAL_TYPE_INT8 : inttype; break; /* A bug! */ default: error(EXIT_FAILURE, 0, "%s: %d is not a recognized CFITSIO datatype", __func__, datatype); } error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can fix " "this. Control must not have reached the end of this function.", __func__, PACKAGE_BUGREPORT); return GAL_TYPE_INVALID; } /* When there is a BZERO or TZERO and BSCALE or TSCALE keywords, then the type that must be used to store the actual values of the pixels may be different from the type from BITPIX. This function does the necessary corrections. */ static void fits_type_correct(int *type, double bscale, char *bzero_str) { double bzero; int tofloat=1; char *tailptr, *bzero_u64="9223372036854775808"; /* If bzero_str is given and 'bscale=1.0' the case might be that we are dealing with an integer dataset that just needs a different sign. */ if(bzero_str && bscale==1.0f) { /* Read the 'bzero' string as a 'double' number. */ bzero = strtod(bzero_str, &tailptr); if(tailptr==bzero_str) error(EXIT_FAILURE, 0, "%s: BZERO value '%s' couldn't be " "parsed as a number", __func__, bzero_str); /* Work based on type. For the default conversions defined by the FITS standard to change the signs of integers, make the proper correction, otherwise set the type to float. */ switch(*type) { case GAL_TYPE_UINT8: if(bzero == -128.0f) { *type = GAL_TYPE_INT8; tofloat=0; } break; case GAL_TYPE_INT16: if(bzero == 32768) { *type = GAL_TYPE_UINT16; tofloat=0; } break; case GAL_TYPE_INT32: if(bzero == 2147483648LU) { *type = GAL_TYPE_UINT32; tofloat=0; } break; /* The 'bzero' value for unsigned 64-bit integers has 19 decimal digits, but a 64-bit floating point ('double' type) can only safely store 15 decimal digits. As a result, the safest way to check the 'bzero' value for this type is to compare it as a string. But all integers nearby (for example '9223372036854775807') get rounded to this same value (when stored as 'double'). So we will also check the parsed number and if it equals this number, a warning will be printed. */ case GAL_TYPE_INT64: if( !strcmp(bzero_str, bzero_u64) ) {*type = GAL_TYPE_UINT64; tofloat=0;} else if( bzero == 9223372036854775808LLU ) { fprintf(stderr, "\nWARNING in %s: the BZERO header " "keyword value ('%s') is very close (but not " "exactly equal) to '%s'. The latter value in the " "FITS standard is used to identify that the " "dataset should be read as unsigned 64-bit " "integers instead of signed 64-bit integers. " "Depending on your version of CFITSIO, it may be " "read as a signed or unsigned 64-bit integer " "array\n\n", __func__, bzero_str, bzero_u64); tofloat=0; } break; /* For the other types (when 'BSCALE=1.0f'), currently no correction is necessary, maybe later we can check if the scales are integers and set the integer output type to the smallest type that can allow the scaled values. */ default: tofloat=0; } } /* If the type must be a float, then do the conversion. */ if(tofloat) *type=GAL_TYPE_FLOAT32; } /**************************************************************/ /********** HDU ************/ /**************************************************************/ fitsfile * gal_fits_open_to_write(char *filename) { int status=0; long naxes=0; fitsfile *fptr; /* When the file exists just open it. Otherwise, create the file. But we want to leave the first extension as a blank extension and put the image in the next extension to be consistent between tables and images. */ if(access(filename,F_OK) == -1 ) { /* Create the file. */ if( fits_create_file(&fptr, filename, &status) ) gal_fits_io_error(status, NULL); /* Create blank extension. */ if( fits_create_img(fptr, BYTE_IMG, 0, &naxes, &status) ) gal_fits_io_error(status, NULL); /* Close the empty extension. */ if( fits_close_file(fptr, &status) ) gal_fits_io_error(status, NULL); } /* Open the file, ready for later steps. */ if( fits_open_file(&fptr, filename, READWRITE, &status) ) gal_fits_io_error(status, NULL); /* Return the pointer. */ return fptr; } size_t gal_fits_hdu_num(char *filename) { fitsfile *fptr; int num, status=0; /* Make sure the given file exists: CFITSIO adds '.gz' silently (see more in the comments within 'gal_fits_hdu_open')*/ gal_checkset_check_file(filename); /* We don't need to check for an error everytime, because we don't make any non CFITSIO usage of the output. It is necessary to check every CFITSIO call, only when you will need to use the outputs. */ fits_open_file(&fptr, filename, READONLY, &status); fits_get_num_hdus(fptr, &num, &status); fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); return num; } /* Calculate the datasum of the given HDU in the given file. */ unsigned long gal_fits_hdu_datasum(char *filename, char *hdu, char *hdu_option_name) { int status=0; fitsfile *fptr; unsigned long datasum; /* Read the desired extension (necessary for reading the rest). */ fptr=gal_fits_hdu_open(filename, hdu, READONLY, 1, hdu_option_name); /* Calculate the datasum. */ datasum=gal_fits_hdu_datasum_ptr(fptr); /* Close the file and return. */ fits_close_file(fptr, &status); gal_fits_io_error(status, "closing file"); return datasum; } /* Calculate the encoded datasum of the given HDU in the given file. */ char * gal_fits_hdu_datasum_encoded(char *filename, char *hdu, char *hdu_option_name) { char *out; unsigned long datasum; /* Allocate a 17 character string (the encoded string is by definition 16 characters long and we need a 17th one for '\0'). */ out=gal_pointer_allocate(GAL_TYPE_UINT8, 17, 0, __func__, "out"); /* Generate the datasum as an integer. */ datasum=gal_fits_hdu_datasum(filename, hdu, hdu_option_name); /* Encode the 'datasum' and return the string. */ fits_encode_chksum(datasum, 0, out); return out; } /* Calculate the FITS standard datasum for the opened FITS pointer. */ unsigned long gal_fits_hdu_datasum_ptr(fitsfile *fptr) { int status=0; unsigned long datasum, hdusum; /* Calculate the checksum and datasum of the opened HDU. */ fits_get_chksum(fptr, &datasum, &hdusum, &status); gal_fits_io_error(status, "estimating datasum"); /* Return the datasum. */ return datasum; } /* Given the filename and HDU, this function will return the CFITSIO code for the type of data it contains (table, or image). The CFITSIO codes are: IMAGE_HDU: An image HDU. ASCII_TBL: An ASCII table HDU. BINARY_TBL: BINARY TABLE HDU. */ int gal_fits_hdu_format(char *filename, char *hdu, char *hdu_option_name) { fitsfile *fptr; int hdutype, status=0; /* Open the HDU. */ fptr=gal_fits_hdu_open(filename, hdu, READONLY, 1, hdu_option_name); /* Check the type of the given HDU: */ if (fits_get_hdu_type(fptr, &hdutype, &status) ) gal_fits_io_error(status, NULL); /* Clean up and return. */ if( fits_close_file(fptr, &status) ) gal_fits_io_error(status, NULL); return hdutype; } /* Return 1 if the HDU appears to be a HEALpix grid. */ int gal_fits_hdu_is_healpix(fitsfile *fptr) { long value; int hdutype, status=0; /* An ASCII table can't be a healpix table. */ if (fits_get_hdu_type(fptr, &hdutype, &status) ) gal_fits_io_error(status, NULL); if(hdutype==ASCII_TBL) return 0; /* If all these keywords are present, then 'status' will be 0 afterwards. */ fits_read_key_lng(fptr, "NSIDE", &value, 0x0, &status); fits_read_key_lng(fptr, "FIRSTPIX", &value, 0x0, &status); fits_read_key_lng(fptr, "LASTPIX", &value, 0x0, &status); return !status; } /* Open a given HDU and return the FITS pointer. 'iomode' determines how the FITS file will be opened: only to read or to read and write. You should use the macros given by the CFITSIO header: READONLY: read-only. READWRITE: read and write. */ fitsfile * gal_fits_hdu_open(char *filename, char *hdu, int iomode, int exitonerror, char *hdu_option_name) { int status=0; char *ffname; fitsfile *fptr; char *hduon = hdu_option_name ? hdu_option_name : "--hdu"; /* Make sure the file exists. This is necessary because CFITSIO automatically appends a '.gz' when a file with that extension already exists! For example if the user asked for 'abc.fits', but the directory only includes 'abc.fits.gz', CFITSIO will open that instead (without any status value). */ gal_checkset_check_file(filename); /* Add hdu to filename: */ if( asprintf(&ffname, "%s[%s#]", filename, hdu)<0 ) { if(exitonerror) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); else return NULL; } /* Open the FITS file: */ if( fits_open_file(&fptr, ffname, iomode, &status) ) { switch(status) { /* Since the default HDU is '1', when the file only has one extension, this error is common, so we will put a special notice. */ case END_OF_FILE: if( hdu[0]=='1' && hdu[1]=='\0' ) { if(exitonerror) error(EXIT_FAILURE, 0, "%s: only has one HDU.\n\n" "You should inform this program to look for your " "desired input data in the primary HDU with the " "'%s=0' option. For more, see the FOOTNOTE " "below.\n\n" "Pro TIP: if your desired HDU has a name (value to " "'EXTNAME' keyword), it is best to just use that " "name with '%s' instead of relying on a counter. " "You can see the list of HDUs in a FITS file (with " "their data format, type, size and possibly HDU " "name) using Gnuastro's 'astfits' program, for " "example:\n\n" " astfits %s\n\n" "FOOTNOTE -- When writing a new FITS file, " "Gnuastro leaves the pimary HDU only for metadata. " "The output datasets (tables, images or cubes) are " "written after the primary HDU. In this way the " "keywords of the the first HDU can be used as " "metadata of the whole file (which may contain " "many extensions, this is stipulated in the FITS " "standard). Usually the primary HDU keywords " "contains the option names and values that the " "program was run with. Because of this, Gnuastro's " "default HDU to read data in a FITS file is the " "second (or '%s=1'). This error is commonly " "caused when the FITS file wasn't created by " "Gnuastro or by a program respecting this " "convention.", filename, hduon, hduon, filename, hduon); else return NULL; } break; /* Generic error below is fine for this case. */ case BAD_HDU_NUM: break; /* In case an un-expected error occurs, use the general CFITSIO reporting that we have already prepared. */ default: if(exitonerror) gal_fits_io_error(status, "opening the given extension/HDU " "in the given file"); else return NULL; } if(exitonerror) error(EXIT_FAILURE, 0, "%s: extension/HDU '%s' doesn't exist. " "Please run the following command to see the " "extensions/HDUs in '%s':\n\n" " $ astfits %s\n\n" "The respective HDU number (or name, when present) may be " "used with the '%s' option to open your desired input here. " "If you are using counters/numbers to identify your HDUs, " "note that since Gnuastro uses CFITSIO for FITS " "input/output, HDU counting starts from 0", filename, hdu, filename, filename, hduon); else return NULL; } /* Clean up and the pointer. */ free(ffname); return fptr; } /* Check the desired HDU in a FITS image and also if it has the desired type. */ fitsfile * gal_fits_hdu_open_format(char *filename, char *hdu, int img0_tab1, char *hdu_option_name) { fitsfile *fptr; int status=0, hdutype; /* A small sanity check. */ if(hdu==NULL) error(EXIT_FAILURE, 0, "no HDU specified for %s", filename); /* Open the HDU. */ fptr=gal_fits_hdu_open(filename, hdu, READONLY, 1, hdu_option_name); /* Check the type of the given HDU: */ if (fits_get_hdu_type(fptr, &hdutype, &status) ) gal_fits_io_error(status, NULL); /* Check if the type of the HDU is the expected type. We could have written these as && conditions, but this is easier to read, it makes no meaningful difference to the compiler. */ if(img0_tab1) { if(hdutype==IMAGE_HDU) error(EXIT_FAILURE, 0, "%s (hdu: %s): is not a table", filename, hdu); } else { if(hdutype!=IMAGE_HDU) { /* Let the user know. */ if( gal_fits_hdu_is_healpix(fptr) ) error(EXIT_FAILURE, 0, "%s (hdu: %s): appears to be a HEALPix " "table (which is a 2D dataset on a spherical surface: " "stored as a 1D table). You can use the 'HPXcvt' " "command-line utility to convert it to a 2D image that " "can easily be used by other programs. 'HPXcvt' is built " "and installed as part of WCSLIB (which is a mandatory " "dependency of Gnuastro, so you should already have it), " "run 'man HPXcvt' for more", filename, hdu); else error(EXIT_FAILURE, 0, "%s (hdu: %s): not an image", filename, hdu); } } /* Clean up and return. */ return fptr; } /**************************************************************/ /********** Header keywords ************/ /**************************************************************/ int gal_fits_key_exists_fptr(fitsfile *fptr, char *keyname) { int status=0; char card[FLEN_CARD]; fits_read_card(fptr, keyname, card, &status); return status==0; } /* Return allocated pointer to the blank value to use in a FITS file header keyword. */ void * gal_fits_key_img_blank(uint8_t type) { void *out=NULL, *tocopy=NULL; uint8_t u8=0; /* Equivalent of minimum in signed with BZERO. */ int16_t s16=INT16_MAX; /* Equivalend of maximum in unsigned with BZERO. */ int32_t s32=INT32_MAX; /* Equivalend of maximum in unsigned with BZERO. */ int64_t s64=INT64_MAX; /* Equivalend of maximum in unsigned with BZERO. */ switch(type) { /* Types with no special treatment: */ case GAL_TYPE_BIT: case GAL_TYPE_UINT8: case GAL_TYPE_INT16: case GAL_TYPE_INT32: case GAL_TYPE_INT64: case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: case GAL_TYPE_COMPLEX32: case GAL_TYPE_COMPLEX64: case GAL_TYPE_STRING: case GAL_TYPE_STRLL: out = gal_blank_alloc_write(type); break; /* Types that need values from their opposite-signed types. */ case GAL_TYPE_INT8: tocopy=&u8; break; case GAL_TYPE_UINT16: tocopy=&s16; break; case GAL_TYPE_UINT32: tocopy=&s32; break; case GAL_TYPE_UINT64: tocopy=&s64; break; default: error(EXIT_FAILURE, 0, "%s: type code %u not recognized as a Gnuastro " "data type", __func__, type); } /* If 'gal_blank_alloc_write' wasn't used (copy!=NULL), then allocate the necessary space and fill it in. Note that the width of the signed and unsigned values doesn't differ, so we can use the actual input type. */ if(tocopy) { out = gal_pointer_allocate(type, 1, 0, __func__, "out"); memcpy(out, tocopy, gal_type_sizeof(type)); } /* Return. */ return out; } /* CFITSIO doesn't remove the two single quotes around the string value, so the strings it reads are like: 'value ', or 'some_very_long_value'. To use the value, it is commonly necessary to remove the single quotes (and possible extra spaces). This function will modify the string in its own allocated space. You can use this to later free the original string (if it was allocated). */ void gal_fits_key_clean_str_value(char *string) { int end; /* Has to be int because size_t is always >=0. */ char *c, *cf; /* Start from the second last character (the last is a single quote) and go down until you hit a non-space character. This will also work when there is no space characters between the last character of the value and ending single-quote: it will be set to '\0' after this loop. */ for(end=strlen(string)-2;end>=0;--end) if(string[end]!=' ') break; /* Shift all the characters after the first one (which is a ''' back by one and put the string ending characters on the 'end'th element. */ cf=(c=string)+end; do *c=*(c+1); while(++c<cf); *cf='\0'; } /* Fill the 'tm' structure (defined in 'time.h') with the values derived from a FITS format date-string and return the (optional) sub-second information as a double. The basic FITS string is defined under the 'DATE' keyword in the FITS standard. For the more complete format which includes timezones, see the W3 standard: https://www.w3.org/TR/NOTE-datetime */ char * gal_fits_key_date_to_struct_tm(char *fitsdate, struct tm *tp) { int hasT=0, hassq=0, usesdash=0, usesslash=0, hasZ=0; char *C, *cc, *c=NULL, *cf, *subsec=NULL, *nosubsec=fitsdate; /* Initialize the 'tm' structure to all-zero elements. In particular, The FITS standard times are written in UTC, so, the time zone ('tm_zone' element, which specifies number of seconds to shift for the time zone) has to be zero. The day-light saving flag ('isdst' element) also has to be set to zero. */ tp->tm_sec=tp->tm_min=tp->tm_hour=tp->tm_mday=tp->tm_mon=tp->tm_year=0; tp->tm_wday=tp->tm_yday=tp->tm_isdst=tp->tm_gmtoff=0; tp->tm_zone=NULL; /* According to the FITS standard the 'T' in the middle of the date and time of day is optional (the time is not mandatory). */ cf=(c=fitsdate)+strlen(fitsdate); do switch(*c) { case 'T': hasT=1; break; /* With 'T' HH:MM:SS are defined. */ case '-': usesdash=1; break; /* Day definition: YYYY-MM-DD. */ case '/': usesslash=1; break; /* Day definition(old): DD/MM/YY. */ case '\'': hassq=1; break; /* Wholly Wrapped in a single-quote. */ case 'Z': hasZ=1; break; /* When ends in 'Z', means UTC. See */ /* https://www.w3.org/TR/NOTE-datetime */ /* In case we have sub-seconds in the string, we need to remove it because 'strptime' doesn't recognize sub-second resolution. */ case '.': /* Allocate space (by copying the remaining full string and adding a '\0' where necessary. */ gal_checkset_allocate_copy(c, &subsec); gal_checkset_allocate_copy(fitsdate, &nosubsec); /* Parse the sub-second part and remove it from the copy. */ cc=nosubsec+(c-fitsdate); for(C=subsec+1;*C!='\0';C++) if(!isdigit(*C)) {*cc++=*C; *C='\0';} *cc='\0'; } while(++c<cf); /* Convert this date into seconds since 1970/01/01, 00:00:00. */ c = ( (usesdash==0 && usesslash==0) ? NULL : ( usesdash ? ( hasT ? ( hasZ ? strptime(nosubsec, hassq?"'%FT%TZ'":"%FT%TZ", tp) : strptime(nosubsec, hassq?"'%FT%T'":"%FT%T", tp) ) : strptime(nosubsec, hassq?"'%F'" :"%F" , tp)) : ( hasT ? ( hasZ ? strptime(nosubsec, hassq?"'%d/%m/%yT%TZ'":"%d/%m/%yT%TZ", tp) : strptime(nosubsec, hassq?"'%d/%m/%yT%T'":"%d/%m/%yT%T", tp)) : strptime(nosubsec, hassq?"'%d/%m/%y'" :"%d/%m/%y", tp) ) ) ); /* The value might have sub-seconds. In that case, 'c' will point to a '.' and we'll have to parse it as double. */ if( c==NULL || (*c!='.' && *c!='\0') ) error(EXIT_FAILURE, 0, "'%s' isn't in the FITS date format.\n\n" "According to the FITS standard, the date must be in one of " "these formats:\n" " YYYY-MM-DD\n" " YYYY-MM-DDThh:mm:ss\n" " YYYY-MM-DDThh:mm:ssZ (Note the 'Z', see *) \n" " DD/MM/YY (Note the 'YY', see ^)\n" " DD/MM/YYThh:mm:ss\n" " DD/MM/YYThh:mm:ssZ\n\n" "[*]: The 'Z' is interpreted as being in the UTC Timezone.\n" "[^]: Gnuastro's FITS library (this program), interprets the " "older (two character for year) format, year values 68 to 99 as " "the years 1969 to 1999 and values 0 to 68 as the years 2000 to " "2068.", fitsdate); /* If the subseconds were removed (and a new string was allocated), free that extra new string. */ if(nosubsec!=fitsdate) free(nosubsec); /* Return the subsecond value. */ return subsec; } /* Convert the FITS standard date format (as a string, already read from the keywords) into number of seconds since 1970/01/01, 00:00:00. Very useful to avoid calendar issues like number of days in a different months or leap years and etc. The remainder of the format string (sub-seconds) will be put into the two pointer arguments: 'subsec' is in double-precision floating point format but it will only get a value when 'subsecstr!=NULL'. */ size_t gal_fits_key_date_to_seconds(char *fitsdate, char **subsecstr, double *subsec) { time_t t; char *tmp; struct tm tp; size_t seconds; void *subsecptr=subsec; /* If the string is blank, return a blank value. */ if( strcmp(fitsdate, GAL_BLANK_STRING)==0 ) { if(subsec) *subsec=NAN; if(subsecstr) *subsecstr=NULL; return GAL_BLANK_SIZE_T; } /* Fill in the 'tp' elements with values read from the string. */ tmp=gal_fits_key_date_to_struct_tm(fitsdate, &tp); /* If the user wanted a possible sub-second string/value, then 'subsecstr!=NULL'. */ if(subsecstr) { /* Set the output pointer. Note that it may be NULL if there was no sub-second string, but that is fine (and desired because the user can use this to check if there was a sub-string or not). */ *subsecstr=tmp; /* If there was a sub-second string, then also read it as a double-precision floating point. */ if(tmp) { if(subsec) if( gal_type_from_string(&subsecptr, tmp, GAL_TYPE_FLOAT64) ) error(EXIT_FAILURE, 0, "%s: the sub-second portion of '%s' " "(or '%s') couldn't be read as a number", __func__, fitsdate, tmp); } else { if(subsec) *subsec=NAN; } } /* Convert the contents of the 'tm' structure to 'time_t' (a positive integer) with 'mktime'. Note that by design, the system's timezone is included in the returned value of 'mktime' (leading to situations like bug #57995). But it writes the given time's timezone (number of seconds ahead of UTC) in the 'tm_gmtoff' element of its input. IMPORTANT NOTE: the timezone that is calculated by 'mktime' (in 'tp.tm_gmtoff') belongs to the time that is already within 'tp' (this is exactly what we want!). So for example when daylight saving is activated at run-time, but at the time inside 'tp', there was no daylight saving, the value of 'tp.tm_gmtoff' will be different from the 'timezone' global variable. */ t=mktime(&tp); /* Calculate the seconds and return it. */ seconds = (t == (time_t)(-1)) ? GAL_BLANK_SIZE_T : (t+tp.tm_gmtoff); return seconds; } /* Read the keyword values from a FITS pointer. The input should be a linked list of 'gal_data_t'. Before calling this function, you just have to set the 'name' and desired 'type' values of each element in the list to the keyword you want it to keep the value of. The given 'name' value will be directly passed to CFITSIO to read the desired keyword. This function will allocate space to keep the value. Here is one example of using this function: gal_data_t *keysll=gal_data_array_calloc(N); for(i=0;i<N-2;++i) keysll[i]->next=keysll[i+1]; \\ Put a name and type for each element. gal_fits_key_read_from_ptr(fptr, keysll, 0, 0); \\ use the values as you like. gal_data_array_free(keysll, N, 1); If the 'array' pointer of each keyword's dataset is not NULL, then it is assumed that the space has already been allocated. If it is NULL, then space will be allocated internally here. Strings need special consideration: the reason is that generally, 'gal_data_t' needs to also allow for array of strings (as it supports arrays of integers for example). Hence two allocations will be done here (one if 'array!=NULL') and 'keysll[i].array' must be interpretted as 'char **': one allocation for the pointer, one for the actual characters. You don't have to worry about the freeing, 'gal_data_array_free' will free both allocations. So to read a string, one easy way would be the following: char *str, **strarray; strarr = keysll[i].array; str = strarray[0]; If CFITSIO is unable to read a keyword for any reason the 'status' element of the respective 'gal_data_t' will be non-zero. You can check the successful reading of the keyword from the 'status' value in each keyword's 'gal_data_t'. If it is zero, then the keyword was found and succesfully read. Otherwise, it a CFITSIO status value. You can use CFITSIO's error reporting tools or 'gal_fits_io_error' for reporting the reason. A tip: when the keyword doesn't exist, then CFITSIO's status value will be 'KEY_NO_EXIST'. CFITSIO will start searching for the keywords from the last place in the header that it searched for a keyword. So it is much more efficient if the order that you ask for keywords is based on the order they are stored in the header. */ void gal_fits_key_read_from_ptr(fitsfile *fptr, gal_data_t *keysll, int readcomment, int readunit) { uint8_t numtype; gal_data_t *tmp; char **strarray; int typewasinvalid; void *numptr, *valueptr; /* Get the desired keywords. */ for(tmp=keysll;tmp!=NULL;tmp=tmp->next) if(tmp->name) { /* Initialize the status: */ tmp->status=0; /* For each keyword, this function stores one value currently. So set the size and ndim to 1. But first allocate dsize if it wasn't already allocated. */ if(tmp->dsize==NULL) tmp->dsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, 1, 0, __func__, "tmp->dsize"); tmp->ndim=tmp->size=tmp->dsize[0]=1; /* If no type has been given, temporarily set it to a string, we will then deduce the type afterwards. */ typewasinvalid=0; if(tmp->type==GAL_TYPE_INVALID) { typewasinvalid=1; tmp->type=GAL_TYPE_STRING; } /* When the type is a string, 'tmp->array' is an array of pointers to a separately allocated piece of memory. So we have to allocate that space here. If its not a string, then the allocated space above is enough to keep the value. */ switch(tmp->type) { case GAL_TYPE_STRING: tmp->array=strarray=( tmp->array ? tmp->array : gal_pointer_allocate(tmp->type, 1, 0, __func__, "tmp->array") ); errno=0; valueptr=strarray[0]=malloc(FLEN_VALUE * sizeof *strarray[0]); if(strarray[0]==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for strarray[0]", __func__, FLEN_VALUE * sizeof *strarray[0]); break; default: tmp->array=valueptr=( tmp->array ? tmp->array : gal_pointer_allocate(tmp->type, 1, 0, __func__, "tmp->array") ); } /* Allocate space for the keyword comment if necessary. */ if(readcomment) { errno=0; tmp->comment=calloc(FLEN_COMMENT, sizeof *tmp->comment); if(tmp->comment==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for tmp->comment", __func__, FLEN_COMMENT * sizeof *tmp->comment); } else tmp->comment=NULL; /* Allocate space for the keyword unit if necessary. Note that since there is no precise CFITSIO length for units, we will use the 'FLEN_COMMENT' length for units too (theoretically, the unit might take the full remaining area in the keyword). Also note that the unit is only optional, so it needs a separate CFITSIO function call which is done here. */ if(readunit) { /* Allocate space for the unit and read it in. */ errno=0; tmp->unit=calloc(FLEN_COMMENT, sizeof *tmp->unit); if(tmp->unit==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for tmp->unit", __func__, FLEN_COMMENT * sizeof *tmp->unit); fits_read_key_unit(fptr, tmp->name, tmp->unit, &tmp->status); /* If the string is empty, free the space and set it to NULL. */ if(tmp->unit[0]=='\0') {free(tmp->unit); tmp->unit=NULL;} } else tmp->unit=NULL; /* Read the keyword and place its value in the pointer. */ fits_read_key(fptr, gal_fits_type_to_datatype(tmp->type), tmp->name, valueptr, tmp->comment, &tmp->status); /* Correct the type if no type was requested and the key has been successfully read. */ if(tmp->status==0 && typewasinvalid) { /* If the string can be parsed as a number, the number will be allocated and placed in 'numptr', otherwise, 'numptr' will be NULL. */ numptr=gal_type_string_to_number(valueptr, &numtype); if(numptr) { free(valueptr); free(tmp->array); tmp->array=numptr; tmp->type=numtype; } } /* If the comment was empty, free the space and set it to NULL. */ if(tmp->comment && tmp->comment[0]=='\0') {free(tmp->comment); tmp->comment=NULL;} } } /* Same as 'gal_fits_read_keywords_fptr', but accepts the filename and HDU as input instead of an already opened CFITSIO 'fitsfile' pointer. */ void gal_fits_key_read(char *filename, char *hdu, gal_data_t *keysll, int readcomment, int readunit, char *hdu_option_name) { int status=0; fitsfile *fptr; /* Open the input HDU. */ fptr=gal_fits_hdu_open(filename, hdu, READONLY, 1, hdu_option_name); /* Read the keywords. */ gal_fits_key_read_from_ptr(fptr, keysll, readcomment, readunit); /* Close the FITS file. */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); } /* Add on keyword to the list of header keywords that need to be added to a FITS file. In the end, the keywords will have to be freed, so it is important to know before hand if they were allocated or not. If not, they don't need to be freed. NOTE FOR STRINGS: the value should be the pointer to the string its-self (char *), not a pointer to a pointer (char **). */ void gal_fits_key_list_add(gal_fits_list_key_t **list, uint8_t type, char *keyname, int kfree, void *value, int vfree, char *comment, int cfree, char *unit, int ufree) { gal_fits_list_key_t *newnode; /* Allocate space for the new node and fill it in. */ errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); /* Write the given values into the key structure. */ newnode->title=NULL; newnode->fullcomment=NULL; newnode->type=type; newnode->keyname=keyname; newnode->value=value; newnode->comment=comment; newnode->unit=unit; newnode->kfree=kfree; /* Free pointers after using them. */ newnode->vfree=vfree; newnode->cfree=cfree; newnode->ufree=ufree; /* Set the next pointer. */ newnode->next=*list; *list=newnode; } void gal_fits_key_list_add_end(gal_fits_list_key_t **list, uint8_t type, char *keyname, int kfree, void *value, int vfree, char *comment, int cfree, char *unit, int ufree) { gal_fits_list_key_t *tmp, *newnode; /* Allocate space for the new node and fill it in. */ errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocation of new node", __func__); /* Write the given values into the key structure. */ newnode->title=NULL; newnode->fullcomment=NULL; newnode->type=type; newnode->keyname=keyname; newnode->value=value; newnode->comment=comment; newnode->unit=unit; newnode->kfree=kfree; /* Free pointers after using them. */ newnode->vfree=vfree; newnode->cfree=cfree; newnode->ufree=ufree; /* Set the next pointer. */ if(*list) /* List is already full, add this node to the end. */ { /* After this line, tmp points to the last node. */ tmp=*list; while(tmp->next!=NULL) tmp=tmp->next; tmp->next=newnode; newnode->next=NULL; } else /* List is empty */ { newnode->next=NULL; *list=newnode; } } /* Only set this key to be a title. */ void gal_fits_key_list_title_add(gal_fits_list_key_t **list, char *title, int tfree) { gal_fits_list_key_t *newnode; /* Allocate space (and initialize to 0/NULL) for the new node and fill it in. */ errno=0; newnode=calloc(1, sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); /* Set the arguments. */ newnode->title=title; newnode->tfree=tfree; /* Set the next pointer. */ newnode->next=*list; *list=newnode; } /* Put the title keyword in the end. */ void gal_fits_key_list_title_add_end(gal_fits_list_key_t **list, char *title, int tfree) { gal_fits_list_key_t *tmp, *newnode; /* Allocate space (and initialize to 0/NULL) for the new node and fill it in. */ errno=0; newnode=calloc(1, sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); /* Set the arguments. */ newnode->title=title; newnode->tfree=tfree; /* Set the next pointer. */ if(*list) /* List is already full, add this node to the end. */ { /* After this line, tmp points to the last node. */ tmp=*list; while(tmp->next!=NULL) tmp=tmp->next; tmp->next=newnode; newnode->next=NULL; } else /* List is empty */ { newnode->next=*list; *list=newnode; } } /* Only set this key to be a full comment. */ void gal_fits_key_list_fullcomment_add(gal_fits_list_key_t **list, char *fullcomment, int fcfree) { gal_fits_list_key_t *newnode; /* Allocate space (and initialize to 0/NULL) for the new node and fill it in. */ errno=0; newnode=calloc(1, sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); /* Set the arguments. */ newnode->fullcomment=fullcomment; newnode->fcfree=fcfree; /* Set the next pointer. */ newnode->next=*list; *list=newnode; } /* Put the title keyword in the end. */ void gal_fits_key_list_fullcomment_add_end(gal_fits_list_key_t **list, char *fullcomment, int fcfree) { gal_fits_list_key_t *tmp, *newnode; /* Allocate space (and initialize to 0/NULL) for the new node and fill it in. */ errno=0; newnode=calloc(1, sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); /* Set the arguments. */ newnode->fullcomment=fullcomment; newnode->fcfree=fcfree; /* Set the next pointer. */ if(*list) /* List is already full, add this node to the end. */ { /* After this line, tmp points to the last node. */ tmp=*list; while(tmp->next!=NULL) tmp=tmp->next; tmp->next=newnode; newnode->next=NULL; } else /* List is empty */ { newnode->next=*list; *list=newnode; } } /* Add 'DATE' on top of the list of keywords. */ void gal_fits_key_list_add_date(gal_fits_list_key_t **keylist, char *incomment) { int status=0; uint8_t *isutc; int timeref=0; /* ==1: returned string is not UTC */ char *datestr, *kname, *comment, *unit; /* The FITS date format has 19 characters: 'YYYY-MM-DDTHH:MM:SS'. As a string, we also need a byte for '\0'. */ datestr=gal_pointer_allocate(GAL_TYPE_UINT8, 20, 0, __func__, "datestr"); fits_get_system_time(datestr, &timeref, &status); /* Allocate the necessary components. */ gal_checkset_allocate_copy("DATE", &kname); gal_checkset_allocate_copy(incomment, &comment); gal_checkset_allocate_copy("YYYY-MM-DDThh:mm:ss", &unit); gal_fits_key_list_add(keylist, GAL_TYPE_STRING, kname, 1, datestr, 1, comment, 1, unit, 1); /* Add keyword to note if date is in UTC. */ isutc=gal_pointer_allocate(GAL_TYPE_UINT8, 1, 0, __func__, "isutc"); *isutc=!timeref; gal_checkset_allocate_copy("DATEUTC", &kname); gal_checkset_allocate_copy("If 'DATE' is in UTC, value is '1'.", &comment); gal_checkset_allocate_copy("bool", &unit); gal_fits_key_list_add(keylist, GAL_TYPE_UINT8, kname, 1, isutc, 1, comment, 1, unit, 1); } void gal_fits_key_list_add_software_versions(gal_fits_list_key_t **keylist) { char *gnuastroversion; char *kname, *comment, *gslversion, *cfitsioversion; /* Variables that are only necessary for WCSLIB's version. */ #if GAL_CONFIG_HAVE_WCSLIB_VERSION == 1 int wcslibvers[3]; char *wcslibversion; const char *wcslibversion_const; #endif /* Set the version of CFITSIO as a string: before version 4.0.0 of CFITSIO, there were only two numbers in the version (for example '3.49' and '3.48'), but from the 4th major release, there are three numbers in the version string. The third number corresponds to a new 'CFITSIO_MICRO' macro. So if it doesn't exist, we'll just print two numbers, otherwise, we'll print the three. */ #ifdef CFITSIO_MICRO if( asprintf(&cfitsioversion, "%d.%d.%d", CFITSIO_MAJOR, CFITSIO_MINOR, CFITSIO_MICRO)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); #else if( asprintf(cfitsioversion, "%d.%d", CFITSIO_MAJOR, CFITSIO_MINOR)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); #endif gal_checkset_allocate_copy("CFITSIO", &kname); gal_checkset_allocate_copy("Version of used CFITSIO.", &comment); gal_fits_key_list_add(keylist, GAL_TYPE_STRING, kname, 1, cfitsioversion, 1, comment, 1, NULL, 0); /* Write the WCSLIB version. Before WCSLIB 5.0, the wcslib_version function was not defined. Sometime in the future were everyone has moved to more recent versions of WCSLIB, we can remove this macro and its check in configure.ac.*/ #if GAL_CONFIG_HAVE_WCSLIB_VERSION == 1 wcslibversion_const=wcslib_version(wcslibvers); gal_checkset_allocate_copy(wcslibversion_const, &wcslibversion); gal_checkset_allocate_copy("WCSLIB", &kname); gal_checkset_allocate_copy("Version of used WCSLIB.", &comment); gal_fits_key_list_add(keylist, GAL_TYPE_STRING, kname, 1, wcslibversion, 1, comment, 1, NULL, 0); #endif /* Write the GSL version. */ gal_checkset_allocate_copy("GSL", &kname); gal_checkset_allocate_copy(GSL_VERSION, &gslversion); gal_checkset_allocate_copy("Version of used GNU Scientific Library.", &comment); gal_fits_key_list_add(keylist, GAL_TYPE_STRING, kname, 1, gslversion, 1, comment, 1, NULL, 0); /* Write the Gnuastro's version. */ gal_checkset_allocate_copy("GNUASTRO", &kname); gal_checkset_allocate_copy(PACKAGE_VERSION, &gnuastroversion); gal_checkset_allocate_copy("Version of used GNU Astronomy Utilities.", &comment); gal_fits_key_list_add(keylist, GAL_TYPE_STRING, kname, 1, gnuastroversion, 1, comment, 1, NULL, 0); } void gal_fits_key_list_add_git_commit(gal_fits_list_key_t **keylist) { char *kname, *comment, *gitdescribe=gal_git_describe(); if(gitdescribe) { gal_checkset_allocate_copy("COMMIT", &kname); gal_checkset_allocate_copy("Git commit in running directory.", &comment); gal_fits_key_list_add(keylist, GAL_TYPE_STRING, kname, 1, gitdescribe, 1, comment, 1, NULL, 0); } } void gal_fits_key_list_reverse(gal_fits_list_key_t **list) { gal_fits_list_key_t *in=*list, *tmp=in, *reversed=NULL; /* Only do the reversal if there is more than one element. */ if(in && in->next) { /* Fill the 'reversed' list. */ while(in!=NULL) { tmp=in->next; in->next=reversed; reversed=in; in=tmp; } /* Write the reversed list into the input pointer. */ *list=reversed; } } /* Write a blank keyword field and a title under it in the specified FITS file pointer. */ void gal_fits_key_write_title_in_ptr(char *title, fitsfile *fptr) { size_t i; int status=0; char *cp, *cpf, blankrec[80], titlerec[80]; /* Just in case title is 'NULL'. */ if(title) { /* A small sanity check. */ if( strlen(title) + strlen(GAL_FITS_KEY_TITLE_START) > 78 ) fprintf(stderr, "%s: FITS keyword title '%s' is too long to be " "fully included in the keyword record (80 characters, " "where the title is prefixed with %zu space characters)", __func__, title, strlen(GAL_FITS_KEY_TITLE_START)); /* Set the last element of the blank array. */ cpf=blankrec+79; *cpf='\0'; titlerec[79]='\0'; cp=blankrec; do *cp=' '; while(++cp<cpf); /* Print the blank lines before the title. */ if(fits_write_record(fptr, blankrec, &status)) gal_fits_io_error(status, NULL); /* Print the title */ sprintf(titlerec, "%s%s", GAL_FITS_KEY_TITLE_START, title); for(i=strlen(titlerec);i<79;++i) titlerec[i]=' '; if(fits_write_record(fptr, titlerec, &status)) gal_fits_io_error(status, NULL); } } /* Write a filename into keyword values. */ void gal_fits_key_write_filename(char *keynamebase, char *filename, gal_fits_list_key_t **list, int top1end0, int quiet) { char *keyname, *value; size_t numkey=1, maxlength; size_t i, j, len=strlen(filename), thislen; /* When you give string arguments, CFITSIO puts them within two ''s, so the actual length available is two less. It seems this length also didn't include the null character, so, ultimately you have to take three from it. */ maxlength=FLEN_VALUE-3; /* Parse the filename and see when it is necessary to break it. */ i=0; while(i<len) { /* Set the keyname: */ errno=0; keyname=malloc(FLEN_KEYWORD); if(keyname==NULL) error(EXIT_FAILURE, errno, "%s: %d bytes for 'keyname'", __func__, FLEN_KEYWORD); if(len<maxlength) strcpy(keyname, keynamebase); else sprintf(keyname, "%s_%zu", keynamebase, numkey++); /* Set the keyword value: */ errno=0; thislen=strlen(&filename[i]); value=malloc(maxlength+1); if(value==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes", __func__, thislen); strncpy(value, &filename[i], maxlength); /* If the FROM string (=&filename[i]) in strncpy is shorter than SIZE (=maxlength), then the rest of the space will be filled with null characters. So we can use this to check if the full length was copied. */ if(value[maxlength-1]=='\0') { if(top1end0) gal_fits_key_list_add(list, GAL_TYPE_STRING, keyname, 1, value, 1, NULL, 0, NULL, 0); else gal_fits_key_list_add_end(list, GAL_TYPE_STRING, keyname, 1, value, 1, NULL, 0, NULL, 0); break; } else { /* Find the last place in the copied array that contains a '/' and put j on the next character (so it can be turned into a null character. */ for(j=maxlength-2;j>0;--j) if(value[j]=='/') { value[j+1]='\0'; break; } if(j==0) { /* So the loop doesn't continue after this. */ i=len+1; /* There will only be one keyword, so we'll just use the basename. */ strcpy(keyname, keynamebase); /* Let the user know that the name will be truncated. */ if(quiet==0) error(0,0, "%s: WARNING: the filename '%s' (not " "including directories) is too long to fit into " "a FITS keyword value (max of %zu characters). " "It will therefore be truncated. If you are " "using Gnuastro's programs, this message is " "only about the metadata (keyword that keeps " "name of input), so it won't affect the output " "analysis and data. In this case, you can suppress " "this warning message with a '--quiet' option", __func__, filename, maxlength); } /* Convert the last useful character and save the file name. */ if(top1end0) gal_fits_key_list_add(list, GAL_TYPE_STRING, keyname, 1, value, 1, NULL, 0, NULL, 0); else gal_fits_key_list_add_end(list, GAL_TYPE_STRING, keyname, 1, value, 1, NULL, 0, NULL, 0); i+=j+1; } } } /* A bug was found in WCSLIB that has existed since WCSLIB 5.9 (released on 2015/07/21) and will be fixed in the version after WCSLIB 7.3.1 (released in 2020). However, it will take time for many user package managers to update their WCSLIB version. So we need to check if that bug has occurred here and fix it manually. In short the bug was originally seen on a dataset with this input CDELT values: CDELT1 = 0.0007778 / [deg] CDELT2 = 0.0007778 / [deg] CDELT3 = 30000.0000000 / [Hz] The values are read into the 'wcsprm' structure properly, but upon writing into the keyword string structure, the 'CDELT1' and 'CDELT2' values are printed as 0. Mark Calabretta (creator of WCSLIB) described the issue as follows: """wcshdo() tries to find a single sprintf() floating point format to use for groups of keywords, such as CDELTj as a group, or CRPIXi, PCi_j, and CRVALj, each as separate groups. It aims to present the keyvalues in human-readable form, i.e. with decimal points lined up, no unnecessary trailing zeroes, and avoiding exponential ('E') format where its use is not warranted. The problem here arose because of the large range of CDELT values formatted using 'f' format, but not being so large that it would force wcshdo() to revert to 'E' format. There is also the troubling possibility that in less extreme cases, precision of the CDELT (or other) values could be lost without being noticed.""" To implement the check we will follow this logic: large dimensional differences will not commonly happen in 2D datasets, so we will only attempt the check in 3D datasets. We'll read each written CDELT value with CFITSIO and if its zero, we'll correct it. */ static void fits_bug_wrapper_cdelt_zero(fitsfile *fptr, struct wcsprm *wcs, char *keystr) { char *keyname; double keyvalue; size_t dim=GAL_BLANK_SIZE_T; int status=0, datatype=TDOUBLE; /* Only do this check when we have more than two dimensions. */ if(wcs->naxis>2 && !strncmp(keystr, "CDELT", 5)) { /* Find the dimension number and keyword string. This can later be improved/generalized by actually parsing the keyword name to extract the dimension, but I didn't have time to implement it in the first implementation. It will rarely be necessary to go beyond the third dimension, so this has almost no extra burden on the computer's processing. */ if( !strncmp(keystr, "CDELT1", 6) ) { keyname="CDELT1"; dim=0; } else if( !strncmp(keystr, "CDELT2", 6) ) { keyname="CDELT2"; dim=1; } else if( !strncmp(keystr, "CDELT3", 6) ) { keyname="CDELT3"; dim=2; } else if( !strncmp(keystr, "CDELT4", 6) ) { keyname="CDELT4"; dim=3; } else if( !strncmp(keystr, "CDELT5", 6) ) { keyname="CDELT5"; dim=4; } else if( !strncmp(keystr, "CDELT6", 6) ) { keyname="CDELT6"; dim=5; } else if( !strncmp(keystr, "CDELT7", 6) ) { keyname="CDELT7"; dim=6; } else if( !strncmp(keystr, "CDELT8", 6) ) { keyname="CDELT8"; dim=7; } else if( !strncmp(keystr, "CDELT9", 6) ) { keyname="CDELT9"; dim=8; } else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. There appears to be more than 9 dimensions in " "the input dataset", __func__, PACKAGE_BUGREPORT); /* Read the keyword value. */ fits_read_key(fptr, datatype, keyname, &keyvalue, NULL, &status); gal_fits_io_error(status, NULL); /* If the written value is not the same by more than 10 decimals, re-write the value. */ if( fabs( wcs->cdelt[dim] - keyvalue ) > 1e-10 ) { fits_update_key(fptr, datatype, keyname, &wcs->cdelt[dim], NULL, &status); gal_fits_io_error(status, NULL); } } } /* Write the WCS header string into a FITS files. */ void gal_fits_key_write_wcsstr(fitsfile *fptr, struct wcsprm *wcs, char *wcsstr, int nkeyrec) { size_t i; int status=0; char *keystart; /* If the 'wcsstr' string is empty, don't do anything, simply return. */ if(wcsstr==NULL) return; /* Write the title. */ gal_fits_key_write_title_in_ptr("World Coordinate System (WCS)", fptr); /* Write the keywords one by one: */ for(i=0;i<nkeyrec;++i) { /* Set the start of this header. */ keystart=&wcsstr[i*80]; /* Write it if it isn't blank (first character is a space), or not a comment (first 7 characters equal to 'COMMENT'). The reason is that WCSLIB adds a blank line and a 'COMMENT' keyword saying its own version. But Gnuastro writes the version of WCSLIB as a separate keyword along with all other important software, so it is redundant and just makes the keywrods hard to read by eye. */ if( keystart[0]!=' ' && strncmp(keystart, "COMMENT", 7) ) { fits_write_record(fptr, keystart, &status); if(wcs) fits_bug_wrapper_cdelt_zero(fptr, wcs, keystart); } } gal_fits_io_error(status, NULL); /* WCSLIB is going to write PC+CDELT keywords in any case. But when we have a TPV, TNX or ZPX distortion, it is cleaner to use a CD matrix (WCSLIB can't convert coordinates properly if the PC matrix is used with the TPV distortion). So to help users avoid the potential problems with WCSLIB, upon reading the WCS structure, in such cases, we set CDELTi=1.0 and 'altlin=2' (signifying that the CD matrix should be used). Therefore, effectively the CD matrix and PC matrix are equivalent, we just need to convert the keyword names and delete the CDELT keywords. Note that zero-valued PC/CD elements may not be present, so we'll manually set 'status' to zero to avoid CFITSIO from crashing. */ if(wcs && wcs->altlin==2) { status=0; fits_delete_str(fptr, "CDELT1", &status); status=0; fits_delete_str(fptr, "CDELT2", &status); status=0; fits_modify_name(fptr, "PC1_1", "CD1_1", &status); status=0; fits_modify_name(fptr, "PC1_2", "CD1_2", &status); status=0; fits_modify_name(fptr, "PC2_1", "CD2_1", &status); status=0; fits_modify_name(fptr, "PC2_2", "CD2_2", &status); if(wcs->naxis==3) { status=0; fits_delete_str(fptr, "CDELT3", &status); status=0; fits_modify_name(fptr, "PC1_3", "CD1_3", &status); status=0; fits_modify_name(fptr, "PC2_3", "CD2_3", &status); status=0; fits_modify_name(fptr, "PC3_1", "CD3_1", &status); status=0; fits_modify_name(fptr, "PC3_2", "CD3_2", &status); status=0; fits_modify_name(fptr, "PC3_3", "CD3_3", &status); } status=0; } } /* Write the given list of header keywords into the specified HDU of the specified FITS file. */ void gal_fits_key_write(gal_fits_list_key_t *keylist, char *filename, char *hdu, char *hdu_option_name, int freekeys, int create_fits_not_exists) { int status=0; fitsfile *fptr; /* If the file already exist or the user didn't want to create it, then just (try) open(ing) it. We are still trying to open the file when the user doesn't want to create the file because of the good error messages in 'gal_fits_hdu_open'. */ if( gal_checkset_check_file_return(filename) || create_fits_not_exists==0) fptr=gal_fits_hdu_open(filename, hdu, READWRITE, 1, hdu_option_name); else { if( hdu[0]=='0' && hdu[1]=='\0' ) /* only valid for hdu=="0". */ { fptr=gal_fits_open_to_write(filename); if( fits_close_file(fptr, &status) ) gal_fits_io_error(status, NULL); fptr=gal_fits_hdu_open(filename, hdu, READWRITE, 1, hdu_option_name); } else error(EXIT_FAILURE, 0, "%s: when 'create_if_not_exists!=0', " "the 'hdu' argument should be '0', but it is '%s'", __func__, hdu); } /* Write the keywords into the FITS file pointer ('fptr'). */ gal_fits_key_write_in_ptr(keylist, fptr, freekeys); /* Close the input FITS file. */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); } /* Fits doesn't allow NaN values, so if the type of float or double, we'll just check to see if its NaN or not and let the user know the keyword name (to help them fix it). */ static void * gal_fits_key_write_in_ptr_nan_check(gal_fits_list_key_t *tmp) { void *out=NULL; int nanwarning=0; /* Check the value. */ switch(tmp->type) { case GAL_TYPE_FLOAT32: if( isnan( ((float *)(tmp->value))[0] ) ) nanwarning=1; break; case GAL_TYPE_FLOAT64: if( isnan( ((double *)(tmp->value))[0] ) ) nanwarning=1; break; } /* Print the warning. */ if(nanwarning) { out=gal_pointer_allocate(tmp->type, 1, 0, __func__, "out"); gal_type_max(tmp->type, out); error(EXIT_SUCCESS, 0, "%s: (WARNING) value of '%s' is NaN " "and FITS doesn't recognize a NaN key value; instead, " "the following value (largest value of the %d-bit " "floating point type) will be written: %g", __func__, tmp->keyname, tmp->type==GAL_TYPE_FLOAT32 ? 32 : 64, ( tmp->type==GAL_TYPE_FLOAT32 ? ((float *)(out))[0] : ((double *)(out))[0] ) ); } /* Return the allocated array. */ return out; } /* Write the keywords in the gal_fits_list_key_t linked list to the FITS file. Every keyword that is written is freed, that is why we need the pointer to the linked list (to correct it after we finish). */ void gal_fits_key_write_in_ptr(gal_fits_list_key_t *keylist, fitsfile *fptr, int freekeys) { int status=0; void *ifnan=NULL; gal_fits_list_key_t *key, *tmp; /* Go over the list (in case it is not NULL). */ key=keylist; while(key!=NULL) { /* If a title is requested, only put a title. */ if(key->title) { gal_fits_key_write_title_in_ptr(key->title, fptr); if(freekeys && key->tfree) free(key->title); } else if (key->fullcomment) { if( fits_write_comment(fptr, key->fullcomment, &status) ) gal_fits_io_error(status, NULL); if(freekeys && key->fcfree) free(key->fullcomment); } else { /* Write the basic key value and comments. */ if(key->value) { /* Print a warning if the value is NaN. */ ifnan=gal_fits_key_write_in_ptr_nan_check(key); /* Write/Update the keyword value. */ if( fits_update_key(fptr, gal_fits_type_to_datatype(key->type), key->keyname, ifnan?ifnan:key->value, key->comment, &status) ) gal_fits_io_error(status, NULL); if(ifnan) free(ifnan); } else { if(fits_update_key_null(fptr, key->keyname, key->comment, &status)) gal_fits_io_error(status, NULL); } /* Write the units if it was given. */ if( key->unit && fits_write_key_unit(fptr, key->keyname, key->unit, &status) ) gal_fits_io_error(status, NULL); /* Free the value pointer if desired: */ if(freekeys) { if(key->ufree) free(key->unit); if(key->vfree) free(key->value); if(key->kfree) free(key->keyname); if(key->cfree) free(key->comment); } } /* Keep the pointer to the next keyword and free the allocated space for this keyword. */ tmp=key->next; if(freekeys) free(key); key=tmp; } } /* From an input list of FITS files and a HDU, select those that have a certain value(s) in a certain keyword. */ gal_list_str_t * gal_fits_with_keyvalue(gal_list_str_t *files, char *hdu, char *name, gal_list_str_t *values, char *hdu_option_name) { int status=0; fitsfile *fptr; char keyvalue[FLEN_VALUE]; gal_list_str_t *f, *v, *out=NULL; /* Go over the list of files and see if they have the requested keyword(s). */ for(f=files; f!=NULL; f=f->next) { /* Open the file. */ fptr=gal_fits_hdu_open(f->v, hdu, READONLY, 0, hdu_option_name); /* Only attempt to read the value if the requested HDU could be opened ('fptr!=NULL'). */ if(fptr) { /* Check if the keyword actually exists. */ if( gal_fits_key_exists_fptr(fptr, name) ) { /* Read the keyword. Note that we aren't checking for the 'status' here. If for any reason CFITSIO couldn't read the value and status if non-zero, the next step won't consider the file any more. */ status=0; fits_read_key(fptr, TSTRING, name, &keyvalue, NULL, &status); /* If the value corresponds to any of the user's values for this keyword, add it to the list of output names. */ if(status==0) for(v=values; v!=NULL; v=v->next) { if( strcmp(v->v, keyvalue)==0 ) { gal_list_str_add(&out, f->v, 1); break; } } } /* Close the file. */ if( fits_close_file(fptr, &status) ) gal_fits_io_error(status, NULL); } } /* Reverse the list to be in same order as input and return. */ gal_list_str_reverse(&out); return out; } /* From an input list of FITS files and a HDU, select those that have a certain value(s) in a certain keyword. */ gal_list_str_t * gal_fits_unique_keyvalues(gal_list_str_t *files, char *hdu, char *name, char *hdu_option_name) { fitsfile *fptr; int status=0, newvalue; char *keyv, keyvalue[FLEN_VALUE]; gal_list_str_t *f, *v, *out=NULL; /* Go over the list of files and see if they have the requested keyword(s). */ for(f=files; f!=NULL; f=f->next) { /* Open the file. */ fptr=gal_fits_hdu_open(f->v, hdu, READONLY, 0, hdu_option_name); /* Only attempt to read the value if the requested HDU could be opened ('fptr!=NULL'). */ if(fptr) { /* Check if the keyword actually exists. */ if( gal_fits_key_exists_fptr(fptr, name) ) { /* Read the keyword. Note that we aren't checking for the 'status' here. If for any reason CFITSIO couldn't read the value and status if non-zero, the next step won't consider the file any more. */ status=0; fits_read_key(fptr, TSTRING, name, &keyvalue, NULL, &status); /* If the value is new, add it to the list. */ if(status==0) { newvalue=1; keyv=gal_txt_trim_space(keyvalue); for(v=out; v!=NULL; v=v->next) { if( strcmp(v->v, keyv)==0 ) newvalue=0; } if(newvalue) gal_list_str_add(&out, keyv, 1); } } /* Close the file. */ if( fits_close_file(fptr, &status) ) gal_fits_io_error(status, NULL); } } /* Reverse the list to be in same order as input and return. */ gal_list_str_reverse(&out); return out; } /************************************************************* *********** Array functions *********** *************************************************************/ /* Note that the FITS standard defines any array as an 'image', irrespective of how many dimensions it has. This function will return the Gnuastro-type, the number of dimensions and size along each dimension of the image along with its name and units if necessary (not NULL). Note that '*dsize' will be allocated here, so it must not point to any already allocated space. */ void gal_fits_img_info(fitsfile *fptr, int *type, size_t *ndim, size_t **dsize, char **name, char **unit) { double bscale=NAN; size_t i, dsize_key=1; char **str, *bzero_str=NULL; int bitpix, status=0, naxis; gal_data_t *key, *keysll=NULL; long naxes[GAL_FITS_MAX_NDIM]; /* Get the BITPIX, number of dimensions and size of each dimension. */ if( fits_get_img_param(fptr, GAL_FITS_MAX_NDIM, &bitpix, &naxis, naxes, &status) ) gal_fits_io_error(status, NULL); *ndim=naxis; /* Convert bitpix to Gnuastro's known types. */ *type=gal_fits_bitpix_to_type(bitpix); /* Define the names of the possibly existing important keywords about the dataset. We are defining these in the opposite order to be read by CFITSIO. The way Gnuastro writes the FITS keywords, the output will first have 'BZERO', then 'BSCALE', then 'EXTNAME', then, 'BUNIT'.*/ gal_list_data_add_alloc(&keysll, NULL, GAL_TYPE_STRING, 1, &dsize_key, NULL, 0, -1, 1, "BUNIT", NULL, NULL); gal_list_data_add_alloc(&keysll, NULL, GAL_TYPE_STRING, 1, &dsize_key, NULL, 0, -1, 1, "EXTNAME", NULL, NULL); gal_list_data_add_alloc(&keysll, NULL, GAL_TYPE_FLOAT64, 1, &dsize_key, NULL, 0, -1, 1, "BSCALE", NULL, NULL); gal_list_data_add_alloc(&keysll, NULL, GAL_TYPE_STRING, 1, &dsize_key, NULL, 0, -1, 1, "BZERO", NULL, NULL); gal_fits_key_read_from_ptr(fptr, keysll, 0, 0); /* Read the special keywords. */ i=1; for(key=keysll;key!=NULL;key=key->next) { /* Recall that the order is the opposite (this is a last-in-first-out list. */ if(key->status==0) { switch(i) { case 4: if(unit) {str=key->array; *unit=*str; *str=NULL;} break; case 3: if(name) {str=key->array; *name=*str; *str=NULL;} break; case 2: bscale = *(double *)(key->array); break; case 1: str = key->array; bzero_str = *str; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "to fix the problem. For some reason, there are more " "keywords requested ", __func__, PACKAGE_BUGREPORT); } } ++i; } /* If a type correction is necessary, then do it. */ if( !isnan(bscale) || bzero_str ) fits_type_correct(type, bscale, bzero_str); /* Allocate the array to keep the dimension size and fill it in, note that its order is the opposite of naxes. */ *dsize=gal_pointer_allocate(GAL_TYPE_INT64, *ndim, 0, __func__, "dsize"); for(i=0; i<*ndim; ++i) (*dsize)[i]=naxes[*ndim-1-i]; /* Clean up. Note that bzero_str, gets freed by 'gal_data_free' (which is called by 'gal_list_data_free'. */ gal_list_data_free(keysll); } /* Get the basic array info to remove extra dimensions if necessary. */ size_t * gal_fits_img_info_dim(char *filename, char *hdu, size_t *ndim, char *hdu_option_name) { fitsfile *fptr; size_t *dsize=NULL; int status=0, type; /* Open the given header, read the basic image information and close it again. */ fptr=gal_fits_hdu_open(filename, hdu, READONLY, 1, hdu_option_name); gal_fits_img_info(fptr, &type, ndim, &dsize, NULL, NULL); if( fits_close_file(fptr, &status) ) gal_fits_io_error(status, NULL); return dsize; } /* Read a FITS image HDU into a Gnuastro data structure. */ gal_data_t * gal_fits_img_read(char *filename, char *hdu, size_t minmapsize, int quietmmap, char *hdu_option_name) { void *blank; long *fpixel; fitsfile *fptr; gal_data_t *img; size_t i, ndim, *dsize; char *name=NULL, *unit=NULL; int status=0, type, anyblank; char *hduon = hdu_option_name ? hdu_option_name : "--hdu"; /* Check HDU for realistic conditions: */ fptr=gal_fits_hdu_open_format(filename, hdu, 0, NULL); /* Get the info and allocate the data structure. */ gal_fits_img_info(fptr, &type, &ndim, &dsize, &name, &unit); /* Check if there is any dimensions (the first header can sometimes have no images). */ if(ndim==0) error(EXIT_FAILURE, 0, "%s (hdu: %s) has 0 dimensions! The most " "common cause for this is a wrongly specified HDU. In some " "FITS images, the first HDU doesn't have any data, the data " "is in subsequent extensions. So probably reading the second " "HDU (with '%s=1') will solve the problem (following CFITSIO's " "convention, currently HDU counting starts from 0)", filename, hdu, hduon); /* Set the fpixel array (first pixel in all dimensions). Note that the 'long' type will not be larger than 64-bits, so, we'll just assume it is 64-bits for space allocation. On 32-bit systems, this won't be a problem, the space will be written/read as 32-bit 'long' any way, we'll just have a few empty bytes that will be freed anyway at the end of this function. */ fpixel=gal_pointer_allocate(GAL_TYPE_INT64, ndim, 0, __func__, "fpixel"); for(i=0;i<ndim;++i) fpixel[i]=1; /* Allocate the space for the array and for the blank values. */ img=gal_data_alloc(NULL, type, ndim, dsize, NULL, 0, minmapsize, quietmmap, name, unit, NULL); blank=gal_blank_alloc_write(type); if(name) free(name); if(unit) free(unit); free(dsize); /* Read the image into the allocated array: */ fits_read_pix(fptr, gal_fits_type_to_datatype(type), fpixel, img->size, blank, img->array, &anyblank, &status); if(status) gal_fits_io_error(status, NULL); free(fpixel); free(blank); /* Close the input FITS file. */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); /* Return the filled data structure. */ return img; } /* The user has specified an input file + extension, and your program needs this input to be a special type. For such cases, this function can be used to convert the input file to the desired type. */ gal_data_t * gal_fits_img_read_to_type(char *inputname, char *hdu, uint8_t type, size_t minmapsize, int quietmmap, char *hdu_option_name) { gal_data_t *in, *converted; /* Read the specified input image HDU. */ in=gal_fits_img_read(inputname, hdu, minmapsize, quietmmap, hdu_option_name); /* If the input had another type, convert it to float. */ if(in->type!=type) { converted=gal_data_copy_to_new_type(in, type); gal_data_free(in); in=converted; } /* Return the final structure. */ return in; } gal_data_t * gal_fits_img_read_kernel(char *filename, char *hdu, size_t minmapsize, int quietmmap, char *hdu_option_name) { size_t i; int check=0; double sum=0; gal_data_t *kernel; float *f, *fp, tmp; /* Read the image as a float and if it has a WCS structure, free it. */ kernel=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32, minmapsize, quietmmap, hdu_option_name); if(kernel->wcs) { wcsfree(kernel->wcs); kernel->wcs=NULL; } /* Check if the size along each dimension of the kernel is an odd number. If they are all an odd number, then the for each dimension, check will be incremented once. */ for(i=0;i<kernel->ndim;++i) check += kernel->dsize[i]%2; if(check!=kernel->ndim) error(EXIT_FAILURE, 0, "%s: the kernel image has to have an odd number " "of pixels in all dimensions (there has to be one element/pixel " "in the center). At least one of the dimensions of %s (hdu: %s) " "doesn't have an odd number of pixels", __func__, filename, hdu); /* If there are any NaN pixels, set them to zero and normalize it. A blank pixel in a kernel is going to make a completely blank output. */ fp=(f=kernel->array)+kernel->size; do { if(isnan(*f)) *f=0.0f; else sum+=*f; } while(++f<fp); kernel->flag |= GAL_DATA_FLAG_BLANK_CH; kernel->flag &= ~GAL_DATA_FLAG_HASBLANK; f=kernel->array; do *f++ *= 1/sum; while(f<fp); /* Flip the kernel about the center (necessary for non-symmetric kernels). */ f=kernel->array; for(i=0;i<kernel->size/2;++i) { tmp=f[i]; f[i]=f[ kernel->size - i - 1 ]; f[ kernel->size - i - 1 ]=tmp; } /* Return the kernel. */ return kernel; } /* Write the requested header keywords first (if we add them after writing the image, and there is many keywords (more than 2880/80=36), the whole image needs to be shifted to accommodate a new 2880 byte block for new keywords (which wastes time). */ static void gal_fits_img_write_to_ptr_keys(fitsfile *fptr, gal_data_t *towrite, int datatype, int hasblank, gal_fits_list_key_t *keylist, int freekeys) { void *blank; int status=0; /* Remove the two comment lines put by CFITSIO. Note that in some cases, it might not exist. When this happens, the status value will be non-zero. We don't care about this error, so to be safe, we will just reset the status variable after these calls. */ fits_delete_key(fptr, "COMMENT", &status); fits_delete_key(fptr, "COMMENT", &status); status=0; /* If we have blank pixels, we need to define a BLANK keyword when we are dealing with integer types. */ if(hasblank) switch(towrite->type) { case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: /* Do nothing! Since there are much fewer floating point types (that don't need any BLANK keyword), we are checking them. */ break; default: blank=gal_fits_key_img_blank(towrite->type); if(fits_write_key(fptr, datatype, "BLANK", blank, "Pixels with no data.", &status) ) gal_fits_io_error(status, "adding the BLANK keyword"); free(blank); } /* Write the extension name to the header. */ if(towrite->name) fits_write_key(fptr, TSTRING, "EXTNAME", towrite->name, "", &status); /* Write the units to the header. */ if(towrite->unit) fits_write_key(fptr, TSTRING, "BUNIT", towrite->unit, "", &status); /* Write comments if they exist. */ if(towrite->comment) fits_write_comment(fptr, towrite->comment, &status); /* If a WCS structure is present, write it in the FITS file pointer ('fptr'). */ if(towrite->wcs) gal_wcs_write_in_fitsptr(fptr, towrite->wcs); /* Write any requested keywords. */ gal_fits_key_write_in_ptr(keylist, fptr, freekeys); } /* This function will write all the data array information (including its WCS information) into a FITS file, but will not close it. Instead it will pass along the FITS pointer for further modification. */ fitsfile * gal_fits_img_write_to_ptr(gal_data_t *input, char *filename, gal_fits_list_key_t *keylist, int freekeys) { int64_t *i64; char *u64key; fitsfile *fptr; uint64_t *u64, *u64f; size_t i, ndim=input->ndim; long fpixel=1, *naxes, *naxesone=NULL; int bitpix, hasblank, status=0, datatype=0; gal_data_t *i64data, *towrite, *block=gal_tile_block(input); /* Small sanity check. */ if( gal_fits_name_is_fits(filename)==0 ) error(EXIT_FAILURE, 0, "%s: not a FITS suffix", filename); /* If the input is a tile (isn't a contiguous region of memory), then copy it into a contiguous region. */ towrite = input==block ? input : gal_data_copy(input); hasblank=gal_blank_present(towrite, 0); /* Allocate the naxes space(s): we need 'naxesone' only when there are keywords to be written. */ naxes=gal_pointer_allocate( ( sizeof(long)==8 ? GAL_TYPE_INT64 : GAL_TYPE_INT32 ), ndim, 0, __func__, "naxes"); naxesone = ( keylist ? gal_pointer_allocate( ( sizeof(long)==8 ? GAL_TYPE_INT64 : GAL_TYPE_INT32 ), ndim, 0, __func__, "naxes") : NULL ); /* Open the file for writing. */ fptr=gal_fits_open_to_write(filename); /* Fill the 'naxes' array (in opposite order, and 'long' type): */ for(i=0;i<ndim;++i) { naxes[ndim-1-i]=towrite->dsize[i]; if(naxesone) naxesone[ndim-1-i]=0; } /* Create the FITS file. Unfortunately CFITSIO doesn't have a macro for UINT64, TLONGLONG is only for (signed) INT64. So if the dataset has that type, we'll have to convert it to 'INT64' and in the mean-time shift its zero, we will then have to write the BZERO and BSCALE keywords accordingly. */ if(block->type==GAL_TYPE_UINT64) { /* Print a warning to let the user know that some extra operation is necessary. */ error(EXIT_SUCCESS, 0, "%s: WARNING: Unfortunately CFITSIO does " "not support unsigned 64-bit integers (TLONGLONG is only " "for signed INT64). Therefore some manual operation is " "necessary to create the output and this can slow down your " "program. If unsigned 64-bit integers are not absolutely " "vital for your output's format, it helps to choose another " "type", __func__); /* Allocate the necessary space. */ i64data=gal_data_alloc(NULL, GAL_TYPE_INT64, ndim, towrite->dsize, NULL, 0, block->minmapsize, block->quietmmap, NULL, NULL, NULL); /* Copy the values while making the conversion. */ i64=i64data->array; u64f=(u64=towrite->array)+towrite->size; if(hasblank) { do *i64++ = ( *u64==GAL_BLANK_UINT64 ? GAL_BLANK_INT64 : (*u64 + INT64_MIN) ); while(++u64<u64f); } else do *i64++ = (*u64 + INT64_MIN); while(++u64<u64f); /* We can now use CFITSIO's signed-int64 type macros and create the image HDU. However, if we have keywords, first, we will create a 1 element image of the same dimensions (this is easy to move in case there are many keywords). */ datatype=TLONGLONG; bitpix=LONGLONG_IMG; fits_create_img(fptr, bitpix, ndim, keylist?naxesone:naxes, &status); gal_fits_io_error(status, NULL); /* Write the keywords first (to avoid having to shift the image if there are many keywords). */ gal_fits_img_write_to_ptr_keys(fptr, towrite, datatype, hasblank, keylist, freekeys); /* If we had keywords, we should resize the output array and write the image. */ if(keylist) fits_resize_img(fptr, bitpix, ndim, naxes, &status); fits_write_img(fptr, datatype, fpixel, i64data->size, i64data->array, &status); gal_fits_io_error(status, NULL); /* We need to write the BZERO and BSCALE keywords manually. VERY IMPORTANT: this has to be done after writing the array. We cannot write this huge integer as a variable, so we'll simply write the full record/card. It is just important that the string be larger than 80 characters, CFITSIO will trim the rest of the string. */ u64key="BZERO = 9223372036854775808 / Offset of data "; fits_write_record(fptr, u64key, &status); u64key="BSCALE = 1 / Default scaling factor "; fits_write_record(fptr, u64key, &status); gal_fits_io_error(status, NULL); } else { /* Set the datatype. */ datatype=gal_fits_type_to_datatype(block->type); /* Create the FITS file. */ bitpix=gal_fits_type_to_bitpix(towrite->type); fits_create_img(fptr, bitpix, ndim, keylist?naxesone:naxes, &status); gal_fits_io_error(status, NULL); /* Write the keywords first (to avoid having to shift the image if there are many keywords). */ gal_fits_img_write_to_ptr_keys(fptr, towrite, datatype, hasblank, keylist, freekeys); /* Write the image into the file. */ if(keylist) fits_resize_img(fptr, bitpix, ndim, naxes, &status); fits_write_img(fptr, datatype, fpixel, towrite->size, towrite->array, &status); gal_fits_io_error(status, NULL); } /* If there were any errors, report them and return.*/ free(naxes); gal_fits_io_error(status, NULL); if(towrite!=input) gal_data_free(towrite); return fptr; } void gal_fits_img_write(gal_data_t *data, char *filename, gal_fits_list_key_t *keylist, int freekeys) { int status=0; fitsfile *fptr=NULL; /* Write the data array into a FITS file and keep it open: */ fptr=gal_fits_img_write_to_ptr(data, filename, keylist, freekeys); /* Close the FITS file. */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); } void gal_fits_img_write_to_type(gal_data_t *data, char *filename, gal_fits_list_key_t *headers, int type, int freekeys) { /* If the input dataset is not the correct type, then convert it, otherwise, use the input data structure. */ gal_data_t *towrite = (data->type==type ? data : gal_data_copy_to_new_type(data, type)); /* Write the converted dataset into an image. */ gal_fits_img_write(towrite, filename, headers, freekeys); /* Free the dataset if it was allocated. */ if(towrite!=data) gal_data_free(towrite); } /* This function is mainly useful when you want to make FITS files in parallel (from one main WCS structure, with just differing CRPIX) for two reasons: - When a large number of FITS images (with WCS) need to be created in parallel, it can be much more efficient to write the header's WCS keywords once at first, write them in the FITS file, then just correct the CRPIX values. - WCSLIB's header writing function is not thread safe. So when writing FITS images in parallel, we can't write the header keywords in each thread. */ void gal_fits_img_write_corr_wcs_str(gal_data_t *input, char *filename, char *wcsstr, int nkeyrec, double *crpix, gal_fits_list_key_t *keylist, int freekeys) { int status=0; fitsfile *fptr; /* The data should not have any WCS structure for this function. */ if(input->wcs) error(EXIT_FAILURE, 0, "%s: input must not have WCS meta-data", __func__); /* Write the data array into a FITS file and keep it open. */ fptr=gal_fits_img_write_to_ptr(input, filename, keylist, freekeys); /* Write the WCS headers into the FITS file. */ gal_fits_key_write_wcsstr(fptr, NULL, wcsstr, nkeyrec); /* Update the CRPIX keywords. Note that we don't want to change the values in the WCS information of gal_data_t. Because, it often happens that things are done in parallel, so we don't want to touch the original version, we just want to change the copied version. */ if(crpix) { fits_update_key(fptr, TDOUBLE, "CRPIX1", &crpix[0], NULL, &status); fits_update_key(fptr, TDOUBLE, "CRPIX2", &crpix[1], NULL, &status); if(input->ndim==3) fits_update_key(fptr, TDOUBLE, "CRPIX3", &crpix[2], NULL, &status); gal_fits_io_error(status, NULL); } /* Close the file and return. */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); } /**************************************************************/ /********** Table ************/ /**************************************************************/ /* Get the size of a table HDU. CFITSIO doesn't use size_t, also we want to check status here. */ void gal_fits_tab_size(fitsfile *fitsptr, size_t *nrows, size_t *ncols) { long lnrows; int incols, status=0; /* Read the sizes and put them in. */ fits_get_num_rows(fitsptr, &lnrows, &status); fits_get_num_cols(fitsptr, &incols, &status); *ncols=incols; *nrows=lnrows; /* Report an error if any was issued. */ gal_fits_io_error(status, NULL); } int gal_fits_tab_format(fitsfile *fitsptr) { int status=0; char value[FLEN_VALUE]; fits_read_key(fitsptr, TSTRING, "XTENSION", value, NULL, &status); if(status==0) { if(!strcmp(value, "TABLE")) return GAL_TABLE_FORMAT_AFITS; else if(!strcmp(value, "BINTABLE")) return GAL_TABLE_FORMAT_BFITS; else error(EXIT_FAILURE, 0, "%s: the 'XTENSION' keyword of this FITS " "table ('%s') doesn't have a standard value", __func__, value); } else { if(status==KEY_NO_EXIST) error(EXIT_FAILURE, 0, "%s: input fitsfile pointer isn't a table", __func__); else gal_fits_io_error(status, NULL); } error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we " "can fix it. Control should not have reached the end of this " "function", __func__, PACKAGE_BUGREPORT); return -1; } /* The general format of the TDISPn keywords in FITS is like this: 'Tw.p', where 'T' specifies the general format, 'w' is the width to be given to this column and 'p' is the precision. For integer types, percision is actually the minimum number of integers, for floats, it is the number of decimal digits beyond the decimal point. */ static void set_display_format(char *tdisp, gal_data_t *data, char *filename, char *hdu, char *keyname) { int isanint=0; char *tailptr; /* First, set the general display format. */ switch(tdisp[0]) { case 'A': data->disp_fmt=GAL_TABLE_DISPLAY_FMT_STRING; break; case 'I': isanint=1; data->disp_fmt=GAL_TABLE_DISPLAY_FMT_DECIMAL; break; case 'O': isanint=1; data->disp_fmt=GAL_TABLE_DISPLAY_FMT_OCTAL; break; case 'Z': isanint=1; data->disp_fmt=GAL_TABLE_DISPLAY_FMT_HEX; break; case 'F': data->disp_fmt=GAL_TABLE_DISPLAY_FMT_FIXED; break; case 'E': case 'D': data->disp_fmt=GAL_TABLE_DISPLAY_FMT_EXP; break; case 'G': data->disp_fmt=GAL_TABLE_DISPLAY_FMT_GENERAL; break; default: error(EXIT_FAILURE, 0, "%s (hdu: %s): Format character '%c' in the " "value (%s) of the keyword %s not recognized in %s", filename, hdu, tdisp[0], tdisp, keyname, __func__); } /* Parse the rest of the string to see if a width and precision are given or not. */ data->disp_width=strtol(&tdisp[1], &tailptr, 0); switch(*tailptr) { case '.': /* Width is set, go onto finding the precision. */ data->disp_precision = strtol(&tailptr[1], &tailptr, 0); if(*tailptr!='\0') error(EXIT_FAILURE, 0, "%s (hdu: %s): The value '%s' of the " "'%s' keyword could not recognized (it doesn't finish " "after the precision) in %s", filename, hdu, tdisp, keyname, __func__); break; case '\0': /* No precision given, use a default value. */ data->disp_precision = ( isanint ? GAL_TABLE_DEF_PRECISION_INT : GAL_TABLE_DEF_PRECISION_FLT ); break; default: error(EXIT_FAILURE, 0, "%s (hdu: %s): The value '%s' of the " "'%s' keyword could not recognized (it doesn't have a '.', " "or finish, after the width) in %s", filename, hdu, tdisp, keyname, __func__); } } /* The FITS standard for binary tables (not ASCII tables) does not allow unsigned types for short, int and long types, or signed char! So it has 'TSCALn' and 'TZEROn' to scale the signed types to an unsigned type. It does this internally, but since we need to define our data type and allocate space for it before actually reading the array, it is necessary to do this setting here. */ static void fits_correct_bin_table_int_types(gal_data_t *allcols, int tfields, int *tscal, long long *tzero) { size_t i; for(i=0;i<tfields;++i) { /* If TSCALn is not 1, the reason for it isn't to use a different signed/unsigned type, so don't change anything. */ if(tscal[i]!=1) continue; /* For a check printf("Column %zu initial type: %s (s: %d, z: %lld)\n", i+1, gal_data_type_as_string(allcols[i].type, 1), tscal[i], tzero[i]); */ /* Correct the type based on the initial read type and the value to tzero. If tzero is any other value, then again, its not a type conversion, so just ignore it. */ if(allcols[i].type==GAL_TYPE_UINT8 && tzero[i]==INT8_MIN) allcols[i].type = GAL_TYPE_INT8; else if ( allcols[i].type==GAL_TYPE_INT16 && tzero[i] == -(long long)INT16_MIN ) allcols[i].type = GAL_TYPE_UINT16; else if (allcols[i].type==GAL_TYPE_INT32 && tzero[i] == -(long long)INT32_MIN) allcols[i].type = GAL_TYPE_UINT32; /* For a check printf("Column %zu corrected type: %s\n", i+1, gal_data_type_as_string(allcols[i].type, 1)); */ } } /* See the descriptions of 'gal_table_info'. */ gal_data_t * gal_fits_tab_info(char *filename, char *hdu, size_t *numcols, size_t *numrows, int *tableformat, char *hdu_option_name) { long repeat; int tfields; /* The maximum number of fields in FITS is 999. */ char *tailptr; fitsfile *fptr; size_t i, index; long long *tzero; gal_data_t *allcols; int status=0, rkstatus=0, datatype, *tscal; char keyname[FLEN_KEYWORD]="XXXXXXXXXXXXX", value[FLEN_VALUE]; /* Necessary when a keyword can't be written immediately as it is read in the FITS header and it actually depends on other data before. */ gal_list_str_t *tmp_n, *later_name=NULL; gal_list_str_t *tmp_v, *later_value=NULL; gal_list_sizet_t *tmp_i, *later_index=NULL; /* Open the FITS file and get the basic information. */ fptr=gal_fits_hdu_open_format(filename, hdu, 1, hdu_option_name); *tableformat=gal_fits_tab_format(fptr); gal_fits_tab_size(fptr, numrows, numcols); /* Read the total number of fields, then allocate space for the data structure array and store the information within it. */ fits_read_key(fptr, TINT, "TFIELDS", &tfields, NULL, &status); allcols=gal_data_array_calloc(tfields); /* See comments of 'fits_correct_bin_table_int_types'. Here we are allocating the space to keep these values. */ errno=0; tscal=calloc(tfields, sizeof *tscal); if(tscal==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for tscal", __func__, tfields*sizeof *tscal); errno=0; tzero=calloc(tfields, sizeof *tzero); if(tzero==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for tzero", __func__, tfields*sizeof *tzero); /* Read all the keywords one by one. If they match any of the standard Table metadata keywords, then put them in the correct value. Some notes about this loop: - We are starting from keyword 9 because according to the FITS standard, the first 8 keys in a FITS table are reserved. - When 'fits_read_keyn' has been able to read the keyword and its value, it will return '0'. The returned value is also stored in 'rkstatus' (Read Keyword STATUS), which we need to check after the loop. */ i=8; while( fits_read_keyn(fptr, ++i, keyname, value, NULL, &rkstatus) == 0 ) { /* For string valued keywords, CFITSIO's function above, keeps the single quotes around the value string, one before and one after. 'gal_fits_key_clean_str_value' will remove these single quotes and any possible trailing space within the allocated space. */ if(value[0]=='\'') gal_fits_key_clean_str_value(value); /* COLUMN DATA TYPE. According the the FITS standard, the value of TFORM is most generally in this format: 'rTa'. 'T' is actually a code of the datatype. 'r' is the 'repeat' counter and 'a' is depreciated. Currently we can only read repeat==1 cases. When no number exists before the defined capital letter, it defaults to 1, but if a number exists (for example '5D'), then the repeat is 5 (there are actually five values in each column). Note that value[0] is a single quote. */ if(strncmp(keyname, "TFORM", 5)==0) { /* See which column this information was for and add it, if the index is larger than the number of columns, then ignore the . The FITS standard says there should be no extra TFORM keywords beyond the number of columns, but we don't want to be that strict here. */ index = strtoul(&keyname[5], &tailptr, 10) - 1; if(index<tfields) /* Counting from zero was corrected above. */ { /* The FITS standard's value to this option for FITS ASCII and binary files differ. */ if(*tableformat==GAL_TABLE_FORMAT_AFITS) { /* 'repeat' is not defined for ASCII tables in FITS, so it should be 1 (zero means that the column is empty); while we actually have one number in each row. */ repeat=1; fits_ascii_tform(value, &datatype, NULL, NULL, &status); } else { /* Read the column's numeric data type. */ fits_binary_tform(value, &datatype, &repeat, NULL, &status); /* Set the repeat flag if necessary (recall that by default 'allcols[index].minmapsize' will be zero! So we need this flag to confirm that the zero there is meaningful. */ if(repeat==0) allcols[index].flag |= GAL_TABLEINTERN_FLAG_TFORM_REPEAT_IS_ZERO; } /* Write the "repeat" element into 'allcols->minmapsize', also activate the repeat flag within the dataset. */ allcols[index].minmapsize = repeat; /* Write the type into the data structure. */ allcols[index].type=gal_fits_datatype_to_type(datatype, 1); /* If we are dealing with a string type, we need to know the number of bytes in both cases for printing later. */ if( allcols[index].type==GAL_TYPE_STRING ) { if(*tableformat==GAL_TABLE_FORMAT_AFITS) { repeat=strtol(value+1, &tailptr, 0); if(*tailptr!='\0') error(EXIT_FAILURE, 0, "%s (hdu: %s): the value " "to keyword '%s' ('%s') is not in 'Aw' " "format (for strings) as required by the " "FITS standard in %s", filename, hdu, keyname, value, __func__); } /* TFORM's 'repeat' element can be zero (signifying a column without any data)! In this case, we want the output to be fully blank, so we need space for the blank string. */ allcols[index].disp_width=( repeat ? repeat : strlen(GAL_BLANK_STRING)+1); } } } /* COLUMN SCALE FACTOR. */ else if(strncmp(keyname, "TSCAL", 5)==0) { index = strtoul(&keyname[5], &tailptr, 10) - 1; if(index<tfields) { tscal[index]=strtol(value, &tailptr, 0); if(*tailptr!='\0') error(EXIT_FAILURE, 0, "%s (hdu: %s): value to %s " "keyword ('%s') couldn't be read as a number " "in %s", filename, hdu, keyname, value, __func__); } } /* COLUMN ZERO VALUE (for signed/unsigned types). */ else if(strncmp(keyname, "TZERO", 5)==0) { index = strtoul(&keyname[5], &tailptr, 10) - 1; if(index<tfields) { tzero[index]=strtoll(value, &tailptr, 0); if(*tailptr!='\0') error(EXIT_FAILURE, 0, "%s (hdu: %s): value to %s keyword " "('%s') couldn't be read as a number in %s", filename, hdu, keyname, value, __func__); } } /* COLUMN NAME. All strings in CFITSIO start and finish with single quotation marks, CFITSIO puts them in itsself, so if we don't remove them here, we might have duplicates later, its easier to just remove them to have a simple string that might be used else where too (without the single quotes). */ else if(strncmp(keyname, "TTYPE", 5)==0) { index = strtoul(&keyname[5], &tailptr, 10) - 1; if(index<tfields) gal_checkset_allocate_copy(value, &allcols[index].name); } /* COLUMN UNITS. */ else if(strncmp(keyname, "TUNIT", 5)==0) { index = strtoul(&keyname[5], &tailptr, 10) - 1; if(index<tfields) gal_checkset_allocate_copy(value, &allcols[index].unit); } /* COLUMN COMMENTS. */ else if(strncmp(keyname, "TCOMM", 5)==0) { index = strtoul(&keyname[5], &tailptr, 10) - 1; if(index<tfields) gal_checkset_allocate_copy(value, &allcols[index].comment); } /* COLUMN BLANK VALUE. Note that to interpret the blank value the type of the column must already have been defined for this column in previous keywords. Otherwise, there will be a warning and it won't be used. */ else if(strncmp(keyname, "TNULL", 5)==0) { index = strtoul(&keyname[5], &tailptr, 10) - 1; if(index<tfields ) { if(allcols[index].type==0) { gal_list_str_add(&later_name, keyname, 1); gal_list_str_add(&later_value, value, 1); gal_list_sizet_add(&later_index, index); } else { /* Put in the blank value. */ gal_tableintern_read_blank(&allcols[index], value); /* This flag is not relevant for FITS tables. */ if(allcols[index].flag & GAL_TABLEINTERN_FLAG_ARRAY_IS_BLANK_STRING) { allcols[index].flag &= ~GAL_TABLEINTERN_FLAG_ARRAY_IS_BLANK_STRING; free(allcols[index].array); } } } } /* COLUMN DISPLAY FORMAT. */ else if(strncmp(keyname, "TDISP", 5)==0) { index = strtoul(&keyname[5], &tailptr, 10) - 1; if(index<tfields) set_display_format(value, &allcols[index], filename, hdu, keyname); } } /* The loop above finishes as soon as the 'status' of 'fits_read_keyn' becomes non-zero. If the status is 'KEY_OUT_BOUNDS', then it shows we have reached the end of the keyword list and there is no problem. Otherwise, there is an unexpected problem and we should abort and inform the user about the problem. */ if( rkstatus != KEY_OUT_BOUNDS ) gal_fits_io_error(rkstatus, NULL); /* If any columns should be added later because of missing information, add them here. */ if(later_name) { /* Interpret the necessary 'later_' keys. */ tmp_i=later_index; tmp_v=later_value; for(tmp_n=later_name; tmp_n!=NULL; tmp_n=tmp_n->next) { /* Go over the known types and do the job. */ if(strncmp(tmp_n->v, "TNULL", 5)==0) { /* Put in the blank value. */ gal_tableintern_read_blank(&allcols[tmp_i->v], tmp_v->v); /* This flag is not relevant for FITS tables. */ if(allcols[tmp_i->v].flag & GAL_TABLEINTERN_FLAG_ARRAY_IS_BLANK_STRING) { allcols[tmp_i->v].flag &= ~GAL_TABLEINTERN_FLAG_ARRAY_IS_BLANK_STRING; free(allcols[tmp_i->v].array); } } else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "to fix the problem. Post-processing of keyword '%s' " "failed", __func__, PACKAGE_BUGREPORT, tmp_n->v); /* Increment the other two lists too. */ tmp_v=tmp_v->next; tmp_i=tmp_i->next; } /* Clean up. */ gal_list_sizet_free(later_index); gal_list_str_free(later_name, 1); gal_list_str_free(later_value, 1); } /* Set the 'next' pointer of each column. */ for(i=0;i<tfields;++i) allcols[i].next = (i==tfields-1) ? NULL : &allcols[i+1]; /* Correct integer types, then free the allocated arrays. */ fits_correct_bin_table_int_types(allcols, tfields, tscal, tzero); free(tscal); free(tzero); /* Close the FITS file and report an error if we had any. */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); return allcols; } /* Read CFITSIO un-readable (INF, -INF or NAN) floating point values in FITS ASCII tables. */ static void fits_tab_read_ascii_float_special(char *filename, char *hdu, fitsfile *fptr, gal_data_t *out, size_t colnum, size_t numrows, size_t minmapsize, int quietmmap) { double tmp; char **strarr; char *tailptr; gal_data_t *strrows; size_t i, colwidth=50; int anynul=0, status=0; /* Allocate the dataset to keep the string values. */ strrows=gal_data_alloc(NULL, GAL_TYPE_STRING, 1, &numrows, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); /* Allocate the space to keep the string values. */ strarr=strrows->array; for(i=0;i<numrows;++i) { errno=0; strarr[i]=calloc(colwidth, sizeof *strarr[i]); if(strarr[i]==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for " "strarr[%zu]", __func__, colwidth * sizeof *strarr[i], i); } /* Read the column as a string. */ fits_read_col(fptr, TSTRING, colnum, 1, 1, out->size, NULL, strrows->array, &anynul, &status); gal_fits_io_error(status, NULL); /* Convert the strings to float. */ for(i=0;i<numrows;++i) { /* Parse the string, if its not readable as a special number (like 'inf' or 'nan', then just read it as a NaN. */ tmp=strtod(strarr[i], &tailptr); if(tailptr==strarr[i]) tmp=NAN; /* Write it into the output dataset. */ if(out->type==GAL_TYPE_FLOAT32) ((float *)(out->array))[i]=tmp; else ((double *)(out->array))[i]=tmp; } /* Clean up. */ gal_data_free(strrows); } /* Read one column of the table in parallel. */ struct fits_tab_read_onecol_params { char *filename; /* Name of FITS file with table. */ char *hdu; /* HDU of input table. */ size_t numrows; /* Number of rows in table to read. */ size_t numcols; /* Number of columns. */ size_t minmapsize; /* Minimum space to memory-map. */ int quietmmap; /* Don't print memory-mapping info. */ gal_data_t *allcols; /* Information of all columns. */ gal_data_t **colarray; /* Array of pointers to all columns. */ gal_list_sizet_t *indexll; /* Index of columns to read. */ char *hdu_option_name; /* HDU option name (for error message). */ }; static void * fits_tab_read_onecol(void *in_prm) { /* Low-level definitions to be done first. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct fits_tab_read_onecol_params *p = (struct fits_tab_read_onecol_params *)tprm->params; /* Subsequent definitions. */ uint8_t type; char **strarr; fitsfile *fptr; gal_data_t *col; size_t dsize[2]; gal_list_sizet_t *tmp; void *blank, *blankuse; int isfloat, hdutype, anynul=0, status=0; size_t i, j, c, ndim, strw, repeat, indout, indin=GAL_BLANK_SIZE_T; /* Open the FITS file. */ fptr=gal_fits_hdu_open_format(p->filename, p->hdu, 1, p->hdu_option_name); /* See if its a Binary or ASCII table (necessary for floating point blank values). */ if (fits_get_hdu_type(fptr, &hdutype, &status) ) gal_fits_io_error(status, NULL); /* Go over all the columns that were assigned to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Find the necessary indexs (index of output column 'indout', and index of input 'indin'). */ c=0; indout = tprm->indexs[i]; for(tmp=p->indexll;tmp!=NULL;tmp=tmp->next) { if(c==indout) { indin=tmp->v; break; } ++c; } /* Allocate the necessary space for this column. */ type=p->allcols[indin].type; repeat=p->allcols[indin].minmapsize; if(type!=GAL_TYPE_STRING && repeat>1) { ndim=2; dsize[0]=p->numrows; dsize[1]=repeat; } else { ndim=1; dsize[0]=p->numrows; } col=gal_data_alloc(NULL, type, ndim, dsize, NULL, 0, p->minmapsize, p->quietmmap, p->allcols[indin].name, p->allcols[indin].unit, p->allcols[indin].comment); /* For a string column, we need an allocated array for each element, even in binary values. This value should be stored in the disp_width element of the data structure, which is done automatically in 'gal_fits_table_info'. */ if(col->type==GAL_TYPE_STRING) { /* Since the column may contain blank values, and the blank string is pre-defined in Gnuastro, we need to be sure that for each row, a blank string can fit. */ strw = ( strlen(GAL_BLANK_STRING) > p->allcols[indin].disp_width ? strlen(GAL_BLANK_STRING) : p->allcols[indin].disp_width ); /* Allocate the space for each row's strings. */ strarr=col->array; for(j=0;j<p->numrows;++j) { errno=0; strarr[j]=calloc(strw+1, sizeof *strarr[0]); /* +1 for '\0' */ if(strarr[j]==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for " "strarr[%zu]", __func__, (p->allcols[indin].disp_width+1) * sizeof *strarr[j], j); } } /* If this column has a 'repeat' of zero, then just set all its elements to its relevant blank type and don't call CFITSIO (there is nothing for it to read, and it will crash with "FITSIO status = 308: bad first element number First element to write is too large: 1; max allowed value is 0"). */ if(p->allcols[indin].flag & GAL_TABLEINTERN_FLAG_TFORM_REPEAT_IS_ZERO) gal_blank_initialize(col); /* The column has non-zero width, read its contents. */ else { /* Allocate a blank value for the given type and read/store the column using CFITSIO. * For binary tables, we only need blank values for integer types. For binary floating point types, the FITS standard defines blanks as NaN (same as almost any other software like Gnuastro). However if a blank value is specified, CFITSIO will convert other special numbers like 'inf' to NaN also. We want to be able to distinguish 'inf' and NaN here, so for floating point types in binary tables, we won't define any blank value. In ASCII tables, CFITSIO doesn't read the 'NAN' values (that it has written itself) unless we specify a blank pointer/value. * 'fits_read_col' takes the pointer to the thing that should be placed in a blank column (for strings, the 'char *') pointer. However, for strings, 'gal_blank_alloc_write' will return a 'char **' pointer! So for strings, we need to dereference the blank. This is why we need 'blankuse'. */ isfloat = ( col->type==GAL_TYPE_FLOAT32 || col->type==GAL_TYPE_FLOAT64 ); blank = ( ( hdutype==BINARY_TBL && isfloat ) ? NULL : gal_blank_alloc_write(col->type) ); blankuse = ( col->type==GAL_TYPE_STRING ? *((char **)blank) : blank); fits_read_col(fptr, gal_fits_type_to_datatype(col->type), indin+1, 1, 1, col->size, blankuse, col->array, &anynul, &status); /* In the ASCII table format some things need to be checked. */ if( hdutype==ASCII_TBL ) { /* CFITSIO might not be able to read 'INF' or '-INF'. In this case, it will set status to 'BAD_C2D' or 'BAD_C2F'. So, we'll use our own parser for the column values. */ if(isfloat && (status==BAD_C2D || status==BAD_C2F) ) { fits_tab_read_ascii_float_special(p->filename, p->hdu, fptr, col, indin+1, p->numrows, p->minmapsize, p->quietmmap); status=0; } } gal_fits_io_error(status, NULL); /* After 'status' correction. */ /* Clean up and sanity check (just note that the blank value for strings, is an array of strings, so we need to free the contents before freeing itself). */ if(col->type==GAL_TYPE_STRING) {strarr=blank; free(strarr[0]);} if(blank) free(blank); } /* Everything is fine, put this column in the output array. */ p->colarray[indout]=col; } /* Close the FITS file. */ status=0; fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* Read the column indexs into a dataset. */ gal_data_t * gal_fits_tab_read(char *filename, char *hdu, size_t numrows, gal_data_t *allcols, gal_list_sizet_t *indexll, size_t numthreads, size_t minmapsize, int quietmmap, char *hdu_option_name) { size_t i; gal_data_t *out=NULL; gal_list_sizet_t *ind; struct fits_tab_read_onecol_params p; /* If the 'fits_is_reentrant' function exists, then use it to see if CFITSIO was configured in multi-thread mode. Otherwise, just use a single thread. */ #if GAL_CONFIG_HAVE_FITS_IS_REENTRANT == 1 size_t nthreads = fits_is_reentrant() ? numthreads : 1; #else size_t nthreads=1; #endif /* We actually do have columns to read. */ if(numrows) { /* Allocate array of output columns (to keep each read column in its proper place as they are read in parallel). */ errno=0; p.numcols = gal_list_sizet_number(indexll); p.colarray = calloc( p.numcols, sizeof *(p.colarray) ); if(p.colarray==NULL) error(EXIT_FAILURE, 0, "%s: couldn't allocate %zu bytes for " "'p.colarray'", __func__, p.numcols*(sizeof *(p.colarray))); /* Prepare for parallelization and spin-off the threads. */ p.hdu = hdu; p.allcols = allcols; p.numrows = numrows; p.indexll = indexll; p.filename = filename; p.quietmmap = quietmmap; p.minmapsize = minmapsize; p.hdu_option_name = hdu_option_name; gal_threads_spin_off(fits_tab_read_onecol, &p, p.numcols, nthreads, minmapsize, quietmmap); /* Put the columns into a single list and free the array of pointers. */ out=p.colarray[0]; for(i=0;i<p.numcols-1;++i) p.colarray[i]->next = p.colarray[i+1]; free(p.colarray); } /* There are no rows to read ('numrows==NULL'). Make an empty-sized array. */ else { /* We are setting a 1-element array to avoid any allocation errors. Then we are freeing the allocated spaces and correcting the sizes. */ numrows=1; for(ind=indexll; ind!=NULL; ind=ind->next) { /* Do the allocation. */ gal_list_data_add_alloc(&out, NULL, allcols[ind->v].type, 1, &numrows, NULL, 0, minmapsize, quietmmap, allcols[ind->v].name, allcols[ind->v].unit, allcols[ind->v].comment); /* Correct the array and sizes. */ out->size=0; out->array=NULL; out->dsize[0]=0; free(out->array); } /* Reverse the output (because 'gal_list_data_add_alloc' adds each column in a first-in-first-out order which is the reverse order of the input). */ gal_list_data_reverse(&out); } /* Return the output. */ return out; } /* This function will allocate new copies for all elements to have the same length as the maximum length and set all trailing elements to '\0' for those that are shorter than the length. The return value is the allocated space. If the dataset is not a string, the returned value will be -1 (largest number of 'size_t'). */ static size_t fits_string_fixed_alloc_size(gal_data_t *data) { size_t i, j, maxlen=0; char *tmp, **strarr=data->array; /* Return 0 if the dataset is not a string. */ if(data->type!=GAL_TYPE_STRING) return -1; /* Get the maximum length. */ for(i=0;i<data->size;++i) maxlen = strlen(strarr[i])>maxlen ? strlen(strarr[i]) : maxlen; /* For all elements, check the length and if they aren't equal to maxlen, then allocate a maxlen sized array and put the values in. */ for(i=0;i<data->size;++i) { /* Allocate (and clear) the space for the new string. We want it to be cleared, so when the strings are smaller, the rest of the space is filled with '\0' (ASCII for 0) values. */ errno=0; tmp=calloc(maxlen+1, sizeof *strarr[i]); if(tmp==NULL) error(EXIT_FAILURE, 0, "%s: %zu bytes for tmp", __func__, (maxlen+1)*sizeof *strarr[i]); /* Put the old array into the newly allocated space. 'tmp' was cleared (all values set to '\0', so we don't need to set the final one explicity after the copy. */ for(j=0;strarr[i][j]!='\0';++j) tmp[j]=strarr[i][j]; /* Free the old array and put in the new one. */ free(strarr[i]); strarr[i]=tmp; } /* Return the allocated space. */ return maxlen+1; } static void fits_table_prepare_arrays(gal_data_t *cols, size_t numcols, int tableformat, char ***outtform, char ***outttype, char ***outtunit) { size_t i=0, j; gal_data_t *col; char fmt[2], lng[3]; char *blank, **tform, **ttype, **tunit; /* Allocate the arrays to keep the 'tform', 'ttype' and 'tunit' keywords. */ errno=0; tform=*outtform=malloc(numcols*sizeof *tform); if(tform==NULL) error(EXIT_FAILURE, 0, "%s: %zu bytes for tform", __func__, numcols*sizeof *tform); errno=0; ttype=*outttype=malloc(numcols*sizeof *ttype); if(ttype==NULL) error(EXIT_FAILURE, 0, "%s: %zu bytes for ttype", __func__, numcols*sizeof *ttype); errno=0; tunit=*outtunit=malloc(numcols*sizeof *tunit); if(tunit==NULL) error(EXIT_FAILURE, 0, "%s: %zu bytes for tunit", __func__, numcols*sizeof *tunit); /* Go over each column and fill in these arrays. */ for(col=cols; col!=NULL; col=col->next) { /* Set the 'ttype' and 'tunit' values: */ if( asprintf(&ttype[i], "%s", col->name ? col->name : "")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); if( asprintf(&tunit[i], "%s", col->unit ? col->unit : "")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); /* FITS's TFORM depends on the type of FITS table, so work differently. */ switch(tableformat) { /* FITS ASCII table. */ case GAL_TABLE_FORMAT_AFITS: /* Fill the printing format. */ gal_tableintern_col_print_info(col, GAL_TABLE_FORMAT_AFITS, fmt, lng); /* We need to check if the blank value needs is larger than the expected width or not. Its initial width is set the output of the function above, but if the value is larger, 'asprintf' (which is used) will make it wider. */ blank = ( gal_blank_present(col, 0) ? gal_blank_as_string(col->type, col->disp_width) : NULL ); /* Adjust the width. */ if(blank) { col->disp_width = ( strlen(blank) > col->disp_width ? strlen(blank) : col->disp_width ); free(blank); } /* Print the value to be used as TFORMn: */ switch(col->type) { case GAL_TYPE_STRING: case GAL_TYPE_UINT8: case GAL_TYPE_INT8: case GAL_TYPE_UINT16: case GAL_TYPE_INT16: case GAL_TYPE_UINT32: case GAL_TYPE_INT32: case GAL_TYPE_UINT64: case GAL_TYPE_INT64: if(asprintf(&tform[i], "%c%d", fmt[0], col->disp_width)<0) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); break; case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: if( asprintf(&tform[i], "%c%d.%d", fmt[0], col->disp_width, col->disp_precision)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); break; default: error(EXIT_FAILURE, 0, "%s: col->type code %d not " "recognized", __func__, col->type); } break; /* FITS binary table. */ case GAL_TABLE_FORMAT_BFITS: /* If this is a string column, set all the strings to same size, then write the value of tform depending on the type. */ col->disp_width=fits_string_fixed_alloc_size(col); fmt[0]=gal_fits_type_to_bin_tform(col->type); if( col->type==GAL_TYPE_STRING ) { if( asprintf(&tform[i], "%d%c", col->disp_width, fmt[0])<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { /* For vector columns, we need to give the number of elements in the vector. Note that a vector column with dsize[1]==1 is just a single-valued column and shouldn't be treated like a vector. */ if( col->ndim==1 || (col->ndim==2 && col->dsize[1]==1) ) { if( asprintf(&tform[i], "%c", fmt[0])<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else if(col->ndim==2) /* Vector column */ { if(asprintf(&tform[i], "%zu%c", col->dsize[1], fmt[0])<0) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else error(EXIT_FAILURE, 0, "%s: only 1D or 2D data can " "be written as a binary table", __func__); } break; default: error(EXIT_FAILURE, 0, "%s: tableformat code %d not recognized", __func__, tableformat); } /* Increment the column index and write the values into the vector columns also. */ if(tableformat==GAL_TABLE_FORMAT_AFITS && col->ndim>1) { for(j=1;j<col->dsize[1];++j) { gal_checkset_allocate_copy(tform[i], &tform[i+j]); gal_checkset_allocate_copy(tunit[i], &tunit[i+j]); gal_checkset_allocate_copy(ttype[i], &ttype[i+j]); } i+=col->dsize[1]; } else ++i; } } /* Set the blank value to use for TNULL keyword (necessary in reading and writing). The blank value must be the raw value within the FITS file (before applying 'TZERO' OR 'TSCAL'). Therefore, because the following integer types aren't native to the FITS standard, we need to correct TNULL for them after applying TZERO. For example for uin16_t, TZERO is 32768, so TNULL has to be 32767 (the maximum value of the signed integer with the same width). In this way, adding TZERO to the TNULL, will make it the actual NULL value we assume in Gnuastro for uint16_t (the largest possible number). */ static void * fits_blank_for_tnull(uint8_t type) { /* Allocate the default blank value. */ void *blank=gal_blank_alloc_write(type); /* For the non-native FITS type, correct the value. */ switch(type) { case GAL_TYPE_INT8: gal_type_min(GAL_TYPE_UINT8, blank); break; case GAL_TYPE_UINT16: gal_type_max(GAL_TYPE_INT16, blank); break; case GAL_TYPE_UINT32: gal_type_max(GAL_TYPE_INT32, blank); break; case GAL_TYPE_UINT64: gal_type_max(GAL_TYPE_INT64, blank); break; } /* Return the final allocated pointer. */ return blank; } /* Write the TNULLn keywords into the FITS file. Note that this depends on the type of the table: for an ASCII table, all the columns need it. For a binary table, only the non-floating point ones (even if they don't have NULL values) must have it. */ static void fits_write_tnull_tcomm(fitsfile *fptr, gal_data_t *col, int tableformat, size_t colnum, char *tform) { void *blank; int status=0; char *c, *keyname, *bcomment; /* Write the NULL value. */ switch(tableformat) { case GAL_TABLE_FORMAT_AFITS: /* Print the keyword and value. */ if( asprintf(&keyname, "TNULL%zu", colnum)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); blank=gal_blank_as_string(col->type, col->disp_width); /* When in exponential form ('tform' starting with 'E'), CFITSIO writes a NaN value as 'NAN', but when in floating point form ('tform' starting with 'F'), it writes it as 'nan'. So in the former case, we need to convert the string to upper case. */ if(tform[0]=='E' || tform[0]=='e') for(c=blank; *c!='\0'; ++c) *c=toupper(*c); /* Write in the header. */ fits_write_key(fptr, TSTRING, keyname, blank, "blank value for this column", &status); /* Clean up. */ free(keyname); free(blank); break; case GAL_TABLE_FORMAT_BFITS: /* FITS binary tables don't accept NULL values for floating point or string columns. For floating point it must be NaN, and for strings it is a blank string. */ if( col->type!=GAL_TYPE_FLOAT32 && col->type!=GAL_TYPE_FLOAT64 && col->type!=GAL_TYPE_STRING ) { /* Allocate the blank value to write into the TNULL keyword. */ blank=fits_blank_for_tnull(col->type); /* Prepare the name and write the keyword. */ if( asprintf(&keyname, "TNULL%zu", colnum)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); fits_write_key(fptr, gal_fits_type_to_datatype(col->type), keyname, blank, "blank value for this column", &status); gal_fits_io_error(status, NULL); free(keyname); free(blank); } break; default: error(EXIT_FAILURE, 0, "%s: tableformat code %d not recognized", __func__, tableformat); } /* Write the comments if there is any. */ if(col->comment) { if( asprintf(&keyname, "TCOMM%zu", colnum)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); if( asprintf(&bcomment, "comment for field %zu", colnum)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); fits_write_key(fptr, TSTRING, keyname, col->comment, bcomment, &status); gal_fits_io_error(status, NULL); free(keyname); free(bcomment); } } static size_t fits_tab_write_colvec_ascii(fitsfile *fptr, gal_data_t *vector, size_t colind, char *tform, char *filename) { int status=0; char *keyname; static int warnasciivec=0; gal_data_t *ext, *extracted; gal_list_sizet_t *indexs=NULL; size_t i, coli=GAL_BLANK_SIZE_T; /* Print a warning about the modification that is necessary. */ if(warnasciivec==0) { error(EXIT_SUCCESS, 0, "WARNING: vector (multi-valued) columns " "are not supported in the FITS ASCII format. Therefore, " "vector column(s) will be broken into separate " "single-valued columns in '%s'", filename); warnasciivec=1; } /* Build the indexs list and reverse it (adding to a last-in-first-out list will result in an inverse list). */ for(i=0;i<vector->dsize[1];++i) gal_list_sizet_add(&indexs, i); gal_list_sizet_reverse(&indexs); /* Call the table function to extract the desired components of the vector column and clean up the indexs. */ extracted=gal_table_col_vector_extract(vector, indexs); gal_list_sizet_free(indexs); /* Write the extracted columns into the output. */ i=0; for(ext=extracted; ext!=NULL; ext=ext->next) { /* Write the column. */ coli = colind + i++; fits_tab_write_col(fptr, ext, GAL_TABLE_FORMAT_AFITS, &coli, tform, filename); /* Set the keyword name. */ if( asprintf(&keyname, "TTYPE%zu", coli)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf for 'keyname'", __func__); /* Update the keyword with the name of the column (that was just copied in 'fits_table_prepare_arrays' from the vector-column's name, resulting in similar names). */ fits_update_key(fptr, TSTRING, keyname, ext->name, NULL, &status); gal_fits_io_error(status, NULL); } /* Return the last column-index (which has been incremented in 'fits_tab_write_col'). */ return coli; } /* Write a single column into the FITS table. */ static void fits_tab_write_col(fitsfile *fptr, gal_data_t *col, int tableformat, size_t *colind, char *tform, char *filename) { int status=0; char **strarr; void *blank=NULL; /* If this is a FITS ASCII table, and the column is vector, we need to write it as separate single-value columns and write those, then we can safely return (no more need to continue). It may happen that a 2D column has a second dimension of 1! In this case, it should be saved as a normal 1D column. */ if(tableformat==GAL_TABLE_FORMAT_AFITS && col->ndim==2 && col->dsize[1]>1) { *colind=fits_tab_write_colvec_ascii(fptr, col, *colind, tform, filename); return; } /* Write the blank value into the header and return a pointer to it. Otherwise, */ fits_write_tnull_tcomm(fptr, col, tableformat, *colind+1, tform); /* Set the blank pointer if its necessary. Note that strings don't need a blank pointer in a FITS ASCII table. */ blank = ( gal_blank_present(col, 0) ? fits_blank_for_tnull(col->type) : NULL ); if(tableformat==GAL_TABLE_FORMAT_AFITS && col->type==GAL_TYPE_STRING) { if(blank) free(blank); blank=NULL; } /* Manually remove the 'blank' pointer for standard FITS table numeric types (types below). We are doing this because as of CFITSIO 3.48, CFITSIO crashes for these types when we define our own blank values within this pointer, and such values actually exist in the column. This is the error message: "Null value for integer table column is not defined (FTPCLU)". Generally, for these native FITS table types 'blank' is redundant because our blank values are actually within their numerical data range. */ switch(col->type) { case GAL_TYPE_UINT8: case GAL_TYPE_INT16: case GAL_TYPE_INT32: case GAL_TYPE_INT64: free(blank); blank=NULL; break; } /* Write the full column into the table. */ fits_write_colnull(fptr, gal_fits_type_to_datatype(col->type), *colind+1, 1, 1, col->size, col->array, blank, &status); gal_fits_io_error(status, NULL); /* Clean up and Increment the column counter. */ if(blank) { if(col->type==GAL_TYPE_STRING) {strarr=blank; free(strarr[0]);} free(blank); } /* Increment the 'colind' for the next column. */ *colind+=1; } /* Write the given columns (a linked list of 'gal_data_t') into a FITS table.*/ void gal_fits_tab_write(gal_data_t *cols, gal_list_str_t *comments, int tableformat, char *filename, char *extname, struct gal_fits_list_key_t *keylist, int freekeys) { fitsfile *fptr; gal_data_t *col; gal_list_str_t *strt; char **ttype, **tform, **tunit; size_t i, numrows=-1, thisnrows; int tbltype, numcols=0, status=0; /* Make sure all the input columns have the same number of elements. */ for(col=cols; col!=NULL; col=col->next) { thisnrows = col->dsize ? col->dsize[0] : 0; if(numrows==-1) numrows=thisnrows; else if(thisnrows!=numrows) error(EXIT_FAILURE, 0, "%s: the number of records/rows in the " "input columns are not equal! The first column " "has %zu rows, while column %d has %zu rows", __func__, numrows, numcols+1, thisnrows); /* ASCII FITS tables don't accept vector columns, so some extra columns need to be added. */ numcols += ( tableformat==GAL_TABLE_FORMAT_AFITS ? (col->ndim==1 ? 1 : col->dsize[1]) : 1 ); } /* Open the FITS file for writing. */ fptr=gal_fits_open_to_write(filename); /* Prepare necessary arrays and if integer type columns have blank values, write the TNULLn keywords into the FITS file. */ fits_table_prepare_arrays(cols, numcols, tableformat, &tform, &ttype, &tunit); /* Make the FITS file pointer. Note that tableformat was checked in 'fits_table_prepare_arrays'. */ tbltype = tableformat==GAL_TABLE_FORMAT_AFITS ? ASCII_TBL : BINARY_TBL; fits_create_tbl(fptr, tbltype, numrows, numcols, ttype, tform, tunit, extname, &status); gal_fits_io_error(status, NULL); /* Write the columns into the file and also write the blank values into the header when necessary. */ i=0; for(col=cols; col!=NULL; col=col->next)/*'i' is increment in the func.*/ fits_tab_write_col(fptr, col, tableformat, &i, tform[i], filename); /* Write the requested keywords. */ if(keylist) gal_fits_key_write_in_ptr(keylist, fptr, freekeys); /* Write the comments if there were any. */ for(strt=comments; strt!=NULL; strt=strt->next) fits_write_comment(fptr, strt->v, &status); /* Clean up and close the FITS file. Note that each element in the 'ttype' and 'tunit' arrays just points to the respective string in the column data structure, the space for each element of the array wasn't allocated. */ for(i=0;i<numcols;++i) {free(tform[i]); free(ttype[i]); free(tunit[i]);} free(tform); free(ttype); free(tunit); fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); } ������������������gnuastro-0.22/lib/git.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000004760�14551337306�010473� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to deal with Git version controlled directories. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/git.h> /* Return the result of Git describe. */ char * gal_git_describe(void) { char *describe_return=NULL; /* Only actually work on Git if the library is present. */ #if GAL_CONFIG_HAVE_LIBGIT2 == 1 git_buf buf={0}; git_repository *repo; git_describe_result *describe_result; git_describe_format_options format_options; git_describe_options describe_options = GIT_DESCRIBE_OPTIONS_INIT; /* Initialize Git's global setup. */ git_libgit2_init(); /* Initialize the descriptions. */ git_describe_init_format_options(&format_options, GIT_DESCRIBE_FORMAT_OPTIONS_VERSION); /* Set some values manually: */ describe_options.show_commit_oid_as_fallback=1; format_options.dirty_suffix="-dirty"; /* Open the Git repository. */ if( !git_repository_open_ext(&repo, ".", 0, NULL) && !git_describe_workdir(&describe_result, repo, &describe_options) && !git_describe_format(&buf, describe_result, &format_options) ) { /* Allocate space for and copy the description. */ errno=0; describe_return=malloc(strlen(buf.ptr)+1); if(describe_return==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes to copy " "Git's describe", __func__, strlen(buf.ptr)+1); strcpy(describe_return, buf.ptr); } /* Clean up. */ git_repository_free(repo); git_libgit2_shutdown(); #endif /* Return */ return describe_return; } ����������������gnuastro-0.22/lib/interpolate.c���������������������������������������������������������������������0000644�0001750�0001750�00000063076�14551337306�012243� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Interpolate - Fill blank values in a dataset This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/list.h> #include <gnuastro/fits.h> #include <gnuastro/blank.h> #include <gnuastro/pointer.h> #include <gnuastro/threads.h> #include <gnuastro/dimension.h> #include <gnuastro/statistics.h> #include <gnuastro/interpolate.h> #include <gnuastro/permutation.h> #include <gnuastro-internal/checkset.h> /*********************************************************************/ /******************** Nearest neighbor ********************/ /*************** (Dimension agnostic) ****************/ /*********************************************************************/ /* These are bit-flags, so we're using hexadecimal notation. */ #define INTERPOLATE_FLAGS_NO 0 #define INTERPOLATE_FLAGS_NGB_CHECKED 0x1 #define INTERPOLATE_FLAGS_BLANK 0x2 /* Parameters for interpolation on threads. */ struct interpolate_ngb_params { int function; gal_data_t *input; size_t num; gal_data_t *out; gal_data_t *blanks; size_t numneighbors; uint8_t *thread_flags; int onlyblank; gal_list_void_t *ngb_vals; float (*metric)(size_t *, size_t *, size_t ); struct gal_tile_two_layer_params *tl; }; /* Run the interpolation on many threads. */ static void * interpolate_neighbors_on_thread(void *in_prm) { /* Low-level variables that others depend on. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct interpolate_ngb_params *prm= (struct interpolate_ngb_params *)(tprm->params); /* Higher-level variables. */ struct gal_tile_two_layer_params *tl=prm->tl; int correct_index=(tl && tl->totchannels>1 && !tl->workoverch); gal_data_t *input=prm->input; /* Rest of variables. */ void *nv; float dist, pdist; uint8_t *b, *bf, *bb; gal_list_void_t *tvll; size_t ngb_counter, pind; gal_list_dosizet_t *lQ, *sQ; size_t i, index, fullind, chstart=0, ndim=input->ndim; gal_data_t *tin, *tout, *tnear, *value=NULL, *nearest=NULL; size_t size = (correct_index ? tl->tottilesinch : input->size); size_t *dsize = (correct_index ? tl->numtilesinch : input->dsize); size_t *icoord=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "icoord"); size_t *ncoord=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "ncoord"); uint8_t *flag, *fullflag=&prm->thread_flags[tprm->id*input->size]; /* Based on the above. */ size_t *dinc=gal_dimension_increment(ndim, dsize); /* Initialize the flags array. We need two flags during this processing: 1) to see if there are blanks. 2) to see if a neighbor has been checked. These are both binary (0 or 1). So to avoid wasting space, we will use bits to store them. We start with only setting the blank flag once for the whole thread. Then for each interpolated pixel, we reset the neighbor-check flag. */ flag=fullflag; bb=prm->blanks->array; bf=(b=fullflag)+input->size; do *b = *bb++ ? INTERPOLATE_FLAGS_BLANK : 0; while(++b<bf); /* Put the allocated space to keep the neighbor values into a structure for easy processing. */ tin=input; for(tvll=prm->ngb_vals; tvll!=NULL; tvll=tvll->next) { nv=gal_pointer_increment(tvll->v, tprm->id*prm->numneighbors, input->type); gal_list_data_add_alloc(&nearest, nv, tin->type, 1, &prm->numneighbors, NULL, 0, -1, 1, NULL, NULL, NULL); tin=tin->next; } gal_list_data_reverse(&nearest); /* Go over all the points given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ fullind=tprm->indexs[i]; /* If the caller only wanted to interpolate over blank values and this value is not blank (we know from the flags), then just set the output value at this element to the input value and go to the next element. */ if(prm->onlyblank && !(fullflag[fullind] & INTERPOLATE_FLAGS_BLANK) ) { tin=input; for(tout=prm->out; tout!=NULL; tout=tout->next) { memcpy(gal_pointer_increment(tout->array, fullind, tin->type), gal_pointer_increment(tin->array, fullind, tin->type), gal_type_sizeof(tin->type)); tin=tin->next; } continue; } /* Correct the index (if necessary). When the values come from a tiled dataset, the caller might want to interpolate the values of each channel separately (not mix values from different channels). In such a case, the tiles of each channel (and their values in 'input' are contiguous. So we need to correct 'tprm->indexs[i]' (which is the index over the whole tessellation, including all channels). */ if(correct_index) { /* Index of this tile in its channel. */ index = fullind % tl->tottilesinch; /* Index of the first tile in this channel. */ chstart = (fullind / tl->tottilesinch) * tl->tottilesinch; /* Set the channel's starting pointer for the flags. */ flag = gal_pointer_increment(fullflag, chstart, GAL_TYPE_UINT8); } else { chstart=0; index=fullind; } /* Reset all checked bits in the flags array to 0. */ ngb_counter=0; bf=(b=flag)+size; do *b &= ~(INTERPOLATE_FLAGS_NGB_CHECKED); while(++b<bf); /* Get the coordinates of this pixel (to be interpolated). */ gal_dimension_index_to_coord(index, ndim, dsize, icoord); /* Start parsing the neighbors. We will use a two-way ordered linked list structure. To start from the nearest and go out to the farthest. */ lQ=sQ=NULL; gal_list_dosizet_add(&lQ, &sQ, index, 0.0f); while(sQ) { /* Pop-out (p) an index from the queue: */ pind=gal_list_dosizet_pop_smallest(&lQ, &sQ, &pdist); /* If this isn't a blank value then add its values to the list of neighbor values. Note that we didn't check whether the values were blank or not when adding this pixel to the queue. */ if( !(flag[pind] & INTERPOLATE_FLAGS_BLANK) ) { tin=input; for(tnear=nearest; tnear!=NULL; tnear=tnear->next) { memcpy(gal_pointer_increment(tnear->array, ngb_counter, tin->type), gal_pointer_increment(tin->array, chstart+pind, tin->type), gal_type_sizeof(tin->type)); tin=tin->next; } /* If we have filled all the elements clean up the linked list and break out. */ if(++ngb_counter>=prm->numneighbors) { if(lQ) gal_list_dosizet_free(lQ); break; } } /* Go over all the neighbors of this popped pixel and add them to the list of neighbors to be checked. */ GAL_DIMENSION_NEIGHBOR_OP(pind, ndim, dsize, 1, dinc, { /* Only look at neighbors that have not been checked. VERY IMPORTANT: we must not check for blank values here, otherwise we won't be able to parse over extended blank regions. */ if( !(flag[nind] & INTERPOLATE_FLAGS_NGB_CHECKED) ) { /* Get the coordinates of this neighbor. */ gal_dimension_index_to_coord(nind, ndim, dsize, ncoord); /* Distance of this neighbor to the one to be filled. */ dist=prm->metric(icoord, ncoord, ndim); /* Add this neighbor to the list. */ gal_list_dosizet_add(&lQ, &sQ, nind, dist); /* Flag this neighbor as checked. */ flag[nind] |= INTERPOLATE_FLAGS_NGB_CHECKED; } } ); /* If there are no more meshes to add to the queue, then this shows, there were not enough points for interpolation. Normally, this loop should only be exited through the 'currentnum>=numnearest' check above. */ if(sQ==NULL) error(EXIT_FAILURE, 0, "%s: only %zu neighbors found while " "you had asked to use %zu neighbors for close neighbor " "interpolation", __func__, ngb_counter, prm->numneighbors); } /* Calculate the desired statistic, and write it in the output. */ tout=prm->out; for(tnear=nearest; tnear!=NULL; tnear=tnear->next) { /* Find the desired statistic and copy it, but first, reset the flags (which remain from the last time). */ tnear->flag &= ~(GAL_DATA_FLAG_SORT_CH | GAL_DATA_FLAG_BLANK_CH); switch(prm->function) { case GAL_INTERPOLATE_NEIGHBORS_FUNC_MIN: value=gal_statistics_minimum(tnear); break; break; case GAL_INTERPOLATE_NEIGHBORS_FUNC_MAX: value=gal_statistics_maximum(tnear); break; break; case GAL_INTERPOLATE_NEIGHBORS_FUNC_MEAN: value=gal_statistics_mean(tnear); /* Out can be a diff. type */ value=gal_data_copy_to_new_type_free(value, tnear->type); break; case GAL_INTERPOLATE_NEIGHBORS_FUNC_MEDIAN: value=gal_statistics_median(tnear, 1); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "to fix the problem. The value %d is not a recognized " "interpolation function identifier", __func__, PACKAGE_BUGREPORT, prm->function); } memcpy(gal_pointer_increment(tout->array, fullind, tout->type), value->array, gal_type_sizeof(tout->type)); /* Clean up and go to next array. */ gal_data_free(value); tout=tout->next; } } /* Clean up. */ for(tnear=nearest; tnear!=NULL; tnear=tnear->next) tnear->array=NULL; gal_list_data_free(nearest); free(icoord); free(ncoord); free(dinc); /* Wait for all the other threads to finish and return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* When no interpolation is needed, then we can just copy the input into the output. */ static gal_data_t * interpolate_copy_input(gal_data_t *input, int aslinkedlist) { gal_data_t *tin, *tout; /* Make a copy of the first input. */ tout=gal_data_copy(input); tout->next=NULL; /* If we have a linked list, copy each element. */ if(aslinkedlist) { /* Note that we have already copied the first input. */ for(tin=input->next; tin!=NULL; tin=tin->next) { /* Copy this dataset (will also copy flags). */ tout->next=gal_data_copy(tin); tout=tout->next; } /* Output is the reverse of the input, so reverse it. */ gal_list_data_reverse(&tout); } /* Return the copied list. */ return tout; } /* Interpolate blank values in an array. If the 'tl!=NULL', then it is assumed that the tile values correspond to given tessellation. Such that 'input[i]' corresponds to 'tiles[i]' in the tessellation. */ gal_data_t * gal_interpolate_neighbors(gal_data_t *input, struct gal_tile_two_layer_params *tl, uint8_t metric, size_t numneighbors, size_t numthreads, int onlyblank, int aslinkedlist, int function) { gal_data_t *tin, *tout; struct interpolate_ngb_params prm; size_t ngbvnum=numthreads*numneighbors; int permute=(tl && tl->totchannels>1 && tl->workoverch); /* If there are no blank values in the array, AND we should only fill blank values, then simply copy the input and abort. */ if( (input->flag | GAL_DATA_FLAG_BLANK_CH) /* Zero bit is meaningful.*/ && !(input->flag | GAL_DATA_FLAG_HASBLANK)/* There are no blanks. */ && onlyblank ) /* Only interpolate blank.*/ return interpolate_copy_input(input, aslinkedlist); /* Initialize the constant parameters. */ prm.tl = tl; prm.ngb_vals = NULL; prm.input = input; prm.function = function; prm.onlyblank = onlyblank; prm.numneighbors = numneighbors; prm.num = aslinkedlist ? gal_list_data_number(input) : 1; /* Set the metric. */ switch(metric) { case GAL_INTERPOLATE_NEIGHBORS_METRIC_RADIAL: prm.metric=gal_dimension_dist_radial; break; case GAL_INTERPOLATE_NEIGHBORS_METRIC_MANHATTAN: prm.metric=gal_dimension_dist_manhattan; break; default: error(EXIT_FAILURE, 0, "%s: %d is not a valid metric identifier", __func__, metric); } /* Flag the blank values. */ prm.blanks=gal_blank_flag(input); /* If the input is from a tile structure and the user has asked to ignore channels, then re-order the values. */ if(permute) { /* Prepare the permutation (if necessary/not already defined). */ gal_tile_full_permutation(tl); /* Re-order values to ignore channels (if necessary). */ gal_permutation_apply(input, tl->permutation); gal_permutation_apply(prm.blanks, tl->permutation); /* If this is a linked list, then permute remaining nodes. */ if(aslinkedlist) for(tin=input->next; tin!=NULL; tin=tin->next) gal_permutation_apply(tin, tl->permutation); } /* Allocate space for the (first) output. */ prm.out=gal_data_alloc(NULL, input->type, input->ndim, input->dsize, input->wcs, 0, input->minmapsize, input->quietmmap, NULL, input->unit, NULL); gal_list_void_add(&prm.ngb_vals, gal_pointer_allocate(input->type, ngbvnum, 0, __func__, "prm.ngb_vals")); /* If we are given a list of datasets, make the necessary allocations. The reason we are doing this after a check of 'aslinkedlist' is that the 'input' might have a 'next' element, but the caller might not have called 'aslinkedlist'. */ prm.out->next=NULL; if(aslinkedlist) for(tin=input->next; tin!=NULL; tin=tin->next) { /* A small sanity check. */ if( gal_dimension_is_different(input, tin) ) error(EXIT_FAILURE, 0, "%s: all datasets in the list must have " "the same dimension and size", __func__); /* Allocate the output array for this node. */ gal_list_data_add_alloc(&prm.out, NULL, tin->type, tin->ndim, tin->dsize, tin->wcs, 0, tin->minmapsize, tin->quietmmap, NULL, tin->unit, NULL); /* Allocate the space for the neighbor values of this input. */ gal_list_void_add(&prm.ngb_vals, gal_pointer_allocate(tin->type, ngbvnum, 0, __func__, "prm.ngb_vals")); } gal_list_data_reverse(&prm.out); gal_list_void_reverse(&prm.ngb_vals); /* Allocate space for all the flag values of all the threads here (memory in each thread is limited) and this is cleaner. */ prm.thread_flags=gal_pointer_allocate(GAL_TYPE_UINT8, numthreads*input->size, 0, __func__, "prm.thread_flags"); /* Spin-off the threads. */ gal_threads_spin_off(interpolate_neighbors_on_thread, &prm, input->size, numthreads, input->minmapsize, input->quietmmap); /* If the values were permuted for the interpolation, then re-order the values back to their original location (so they correspond to their tile indexs. */ if(permute) { gal_permutation_apply_inverse(input, tl->permutation); for(tout=prm.out; tout!=NULL; tout=tout->next) gal_permutation_apply_inverse(tout, tl->permutation); } /* The interpolated array doesn't have blank values. So set the blank flag to 0 and set the use-zero to 1. */ for(tout=prm.out; tout!=NULL; tout=tout->next) { tout->flag |= GAL_DATA_FLAG_BLANK_CH; tout->flag &= ~GAL_DATA_FLAG_HASBLANK; } /* Clean up and return. */ free(prm.thread_flags); gal_data_free(prm.blanks); gal_list_void_free(prm.ngb_vals, 1); return prm.out; } /*********************************************************************/ /******************** 1D on grid ********************/ /*********************************************************************/ gsl_spline * gal_interpolate_1d_make_gsl_spline(gal_data_t *X, gal_data_t *Y, int type_1d) { size_t i, c; double *x, *y; gal_data_t *Xd, *Yd; gsl_spline *spline=NULL; const gsl_interp_type *itype=NULL; int Yhasblank=gal_blank_present(Y, 0); /* A small sanity check. */ if(Y->ndim!=1) error(EXIT_FAILURE, 0, "%s: input dataset is not 1D (it is %zuD)", __func__, Y->ndim); if(X) { if( gal_dimension_is_different(X, Y) ) error(EXIT_FAILURE, 0, "%s: when two inputs are given, they must " "have the same dimensions. X has %zu elements, while Y has " "%zu", __func__, X->size, Y->size); if(gal_blank_present(X, 0)) error(EXIT_FAILURE, 0, "%s: the X dataset has blank elements", __func__); } /* Set the interpolation type. */ switch(type_1d) { case GAL_INTERPOLATE_1D_LINEAR: itype=gsl_interp_linear; break; case GAL_INTERPOLATE_1D_POLYNOMIAL: itype=gsl_interp_polynomial; break; case GAL_INTERPOLATE_1D_CSPLINE: itype=gsl_interp_cspline; break; case GAL_INTERPOLATE_1D_CSPLINE_PERIODIC: itype=gsl_interp_cspline_periodic; break; case GAL_INTERPOLATE_1D_AKIMA: itype=gsl_interp_akima; break; case GAL_INTERPOLATE_1D_AKIMA_PERIODIC: itype=gsl_interp_akima_periodic; break; case GAL_INTERPOLATE_1D_STEFFEN: #if GAL_CONFIG_HAVE_GSL_INTERP_STEFFEN itype=gsl_interp_steffen; break; #else error(EXIT_FAILURE, 0, "%s: Steffen interpolation isn't available " "in the system's GNU Scientific Library (GSL). Please install " "a more recent GSL (version >= 2.0, released in October 2015) " "and rebuild Gnuastro", __func__); #endif default: error(EXIT_FAILURE, 0, "%s: code %d not recognizable for the GSL " "interpolation type", __func__, type_1d); } /* Initializations. Note that if Y doesn't have any blank elements and is already in 'double' type, then we don't need to make a copy. */ Yd = ( (Yhasblank || Y->type!=GAL_TYPE_FLOAT64) ? gal_data_copy_to_new_type(Y, GAL_TYPE_FLOAT64) : Y ); Xd = ( X /* Has to be 'Yhasblank', we KNOW X doesn't have blank values. */ ? ( (Yhasblank || X->type!=GAL_TYPE_FLOAT64) ? gal_data_copy_to_new_type(X, GAL_TYPE_FLOAT64) : X ) : gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, Y->dsize, NULL, 0, -1, 1, NULL, NULL, NULL) ); /* Fill in the X axis values while also removing NaN/blank elements. */ c=0; x=Xd->array; y=Yd->array; for(i=0;i<Yd->size;++i) if( !isnan(y[i]) ) { y[ c ] = y[i]; x[ c++ ] = X ? x[i] : i; } /* Make sure we have enough valid points for interpolation. */ if( c>=gsl_interp_type_min_size(itype) ) { spline=gsl_spline_alloc(itype, c); gsl_spline_init(spline, x, y, c); } else spline=NULL; /* Clean up and return. */ if(Xd!=X) gal_data_free(Xd); if(Yd!=Y) gal_data_free(Yd); return spline; } /* Return 0 if all blanks were filled. */ static int interpolate_1d_blank_write(gal_data_t *in, gsl_spline *spline, gsl_interp_accel *acc) { double tmp; int hasblank=0; uint8_t *su8 =in->array, *u8 =in->array, *u8f =u8 +in->size; int8_t *si8 =in->array, *i8 =in->array, *i8f =i8 +in->size; uint16_t *su16=in->array, *u16=in->array, *u16f=u16+in->size; int16_t *si16=in->array, *i16=in->array, *i16f=i16+in->size; uint32_t *su32=in->array, *u32=in->array, *u32f=u32+in->size; int32_t *si32=in->array, *i32=in->array, *i32f=i32+in->size; uint64_t *su64=in->array, *u64=in->array, *u64f=u64+in->size; int64_t *si64=in->array, *i64=in->array, *i64f=i64+in->size; float *sf32=in->array, *f32=in->array, *f32f=f32+in->size; double *sf64=in->array, *f64=in->array, *f64f=f64+in->size; switch(in->type) { case GAL_TYPE_UINT8: do if(*u8==GAL_BLANK_UINT8) { /* If the evaluation is good, this function will return 0. */ if( gsl_spline_eval_e(spline, u8-su8, acc, &tmp)==0 ) *u8=tmp; else hasblank=1; } while(++u8<u8f); break; case GAL_TYPE_INT8: do if(*i8==GAL_BLANK_INT8) { if( gsl_spline_eval_e(spline, i8-si8, acc, &tmp)==0 ) *u16=tmp; else hasblank=1; } while(++i8<i8f); break; case GAL_TYPE_UINT16: do if(*u16==GAL_BLANK_UINT16) { if( gsl_spline_eval_e(spline, u16-su16, acc, &tmp)==0 ) *u16=tmp; else hasblank=1; } while(++u16<u16f); break; case GAL_TYPE_INT16: do if(*i16==GAL_BLANK_INT16) { if( gsl_spline_eval_e(spline, i16-si16, acc, &tmp)==0 ) *i16=tmp; else hasblank=1; } while(++i16<i16f); break; case GAL_TYPE_UINT32: do if(*u32==GAL_BLANK_UINT32) { if( gsl_spline_eval_e(spline, u32-su32, acc, &tmp)==0 ) *u32=tmp; else hasblank=1; } while(++u32<u32f); break; case GAL_TYPE_INT32: do if(*i32==GAL_BLANK_INT32) { if( gsl_spline_eval_e(spline, i32-si32, acc, &tmp)==0 ) *i32=tmp; else hasblank=1; } while(++i32<i32f); break; case GAL_TYPE_UINT64: do if(*u64==GAL_BLANK_UINT64) { if( gsl_spline_eval_e(spline, u64-su64, acc, &tmp)==0 ) *u64=tmp; else hasblank=1; } while(++u64<u64f); break; case GAL_TYPE_INT64: do if(*i64==GAL_BLANK_INT64) { if( gsl_spline_eval_e(spline, i64-si64, acc, &tmp)==0 ) *i64=tmp; else hasblank=1; } while(++i64<i64f); break; case GAL_TYPE_FLOAT32: do if(isnan(*f32)) { if( gsl_spline_eval_e(spline, f32-sf32, acc, &tmp)==0 ) *f32=tmp; else hasblank=1; } while(++f32<f32f); break; case GAL_TYPE_FLOAT64: do if(isnan(*f64)) { if( gsl_spline_eval_e(spline, f64-sf64, acc, f64) ) hasblank=1; } while(++f64<f64f); break; default: error(EXIT_FAILURE, 0, "%s: code %d is not a recognized data type", __func__, in->type); } return hasblank; } void gal_interpolate_1d_blank(gal_data_t *in, int type_1d) { int hasblank; gsl_spline *spline; gsl_interp_accel *acc; /* If there are no blank elements, just return. */ if(!gal_blank_present(in, 1)) return; /* Initialize the necessary structures. */ spline=gal_interpolate_1d_make_gsl_spline(NULL, in, type_1d); /* If any interpolation structure was actually made. */ if(spline) { /* Write the values in the blank elements. */ acc=gsl_interp_accel_alloc(); hasblank=interpolate_1d_blank_write(in, spline, acc); /* For a check. { size_t i; double *d; gal_data_t *check=gal_data_copy_to_new_type(in, GAL_TYPE_FLOAT64); d=check->array; for(i=0;i<check->size;++i) printf("%-10zu%f\n", i, d[i]); gal_data_free(check); } */ /* Set the blank flags, note that 'GAL_DATA_FLAG_BLANK_CH' is already set by the top call to 'gal_blank_present'. */ if(hasblank) in->flag |= GAL_DATA_FLAG_HASBLANK; else in->flag &= ~GAL_DATA_FLAG_HASBLANK; /* Clean up. */ gsl_spline_free(spline); gsl_interp_accel_free(acc); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/jpeg.c����������������������������������������������������������������������������0000644�0001750�0001750�00000031161�14551337306�010630� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* jpeg -- functions to read and write JPEG files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <setjmp.h> #include <string.h> #ifdef HAVE_LIBJPEG #include <jpeglib.h> #endif #include <gnuastro/list.h> #include <gnuastro/jpeg.h> #include <gnuastro-internal/checkset.h> /************************************************************* ************** Basic access settings ************ *************************************************************/ #ifdef HAVE_LIBJPEG /* Read the example.c in libjpeg's source code to understand the details of what is going on here. */ struct my_error_mgr { struct jpeg_error_mgr pub; /* "public" fields */ jmp_buf setjmp_buffer; /* for return to caller */ }; typedef struct my_error_mgr *my_error_ptr; METHODDEF(void) jpeg_error_exit(j_common_ptr cinfo) { /* cinfo->err really points to a my_error_mgr struct, so coerce pointer. */ my_error_ptr myerr = (my_error_ptr) cinfo->err; /* Always display the message. */ /* We could postpone this until after returning, if we chose. */ (*cinfo->err->output_message) (cinfo); /* Return control to the setjmp point. */ longjmp(myerr->setjmp_buffer, 1); } #else static void jpeg_error_no_libjpeg(const char *func) { error(EXIT_FAILURE, 0, "%s: libjpeg was not found during the " "configuration of %s on this system. To read from JPEG files, " "libjpeg is required. Please install libjpeg and configure, make " "and install %s again", func, PACKAGE_STRING, PACKAGE_STRING); } #endif /************************************************************* ************** JPEG name and file identification ************ *************************************************************/ int gal_jpeg_name_is_jpeg(char *name) { size_t len; if(name) { len=strlen(name); if ( ( len>=3 && strcmp(&name[len-3], "jpg") == 0 ) || ( len>=3 && strcmp(&name[len-3], "JPG") == 0 ) || ( len>=4 && strcmp(&name[len-4], "jpeg") == 0 ) || ( len>=4 && strcmp(&name[len-4], "JPEG") == 0 ) || ( len>=3 && strcmp(&name[len-3], "jpe") == 0 ) || ( len>=3 && strcmp(&name[len-3], "jif") == 0 ) || ( len>=4 && strcmp(&name[len-4], "jfif") == 0 ) || ( len>=3 && strcmp(&name[len-3], "jfi") == 0 ) ) return 1; else return 0; } else return 0; } int gal_jpeg_suffix_is_jpeg(char *name) { if(name) { if (strcmp(name, "jpg") == 0 || strcmp(name, ".jpg") == 0 || strcmp(name, "JPG") == 0 || strcmp(name, ".JPG") == 0 || strcmp(name, "jpeg") == 0 || strcmp(name, ".jpeg") == 0 || strcmp(name, "JPEG") == 0 || strcmp(name, ".JPEG") == 0 || strcmp(name, "jpe") == 0 || strcmp(name, ".jpe") == 0 || strcmp(name, "jif") == 0 || strcmp(name, ".jif") == 0 || strcmp(name, "jfif") == 0 || strcmp(name, ".jfif") == 0 || strcmp(name, "jfi") == 0 || strcmp(name, ".jfi") == 0) return 1; else return 0; } else return 0; } /************************************************************* ************** Read a JPEG image ************** *************************************************************/ #ifdef HAVE_LIBJPEG static void jpeg_jsample_make(JSAMPLE **a, size_t size) { JSAMPLE *jsarr; if(sizeof *jsarr!=1) { printf("\n\nJSAMPLE has to be unsigned char!\n\n"); exit(EXIT_FAILURE); } errno=0; jsarr=malloc(size*sizeof *jsarr); if(jsarr==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for jsarr", __func__, size*sizeof *jsarr); *a=jsarr; } static unsigned char ** jpeg_read_to_array(char *inname, size_t *outs0, size_t *outs1, size_t *numcolors) { FILE *infile; JSAMPROW jrow; JSAMPLE *jsamp; int rowstride, c; JSAMPARRAY jsarr; unsigned char **all; struct my_error_mgr jerr; size_t i, j, size, nc, s0, s1; struct jpeg_decompress_struct cinfo; /* Open the input file. */ errno=0; if ((infile = fopen(inname, "rb")) == NULL) error(EXIT_FAILURE, errno, "%s", inname); /* Set up the error and decompressing (reading) functions. */ cinfo.err = jpeg_std_error(&jerr.pub); jerr.pub.error_exit = jpeg_error_exit; if (setjmp(jerr.setjmp_buffer)) { jpeg_destroy_decompress(&cinfo); fclose(infile); error(EXIT_FAILURE, 0, "%s: problem in reading %s", __func__, inname); } jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, infile); /* Read the JPEG header information and start de-compressing: */ jpeg_read_header(&cinfo, TRUE); jpeg_start_decompress(&cinfo); /* Get the array width and height and number of color channels: */ s0=*outs0=cinfo.output_height; s1=*outs1=cinfo.output_width; size=s0*s1; nc=*numcolors=cinfo.output_components; rowstride=s1*nc; jpeg_jsample_make(&jsamp, size*nc); /* Allocate all the arrays for each color: */ errno=0; all=malloc(nc*sizeof *all); if(all==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for 'all'", __func__, nc*sizeof *all); for(i=0;i<nc;++i) { errno=0; all[i]=malloc(s0*s1*sizeof *all[i]); if(all[i]==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for 'all[%zu]'", __func__, s0*s1*sizeof *all[i], i); } /* Read the image line by line: */ c=s0-1; while (cinfo.output_scanline < cinfo.output_height) { jrow=&jsamp[c-- * rowstride]; jsarr=&jrow; jpeg_read_scanlines(&cinfo, jsarr, 1); } /* Put the different colors into the different arrays. */ for(i=0;i<size;++i) for(j=0;j<nc;++j) all[j][i]=jsamp[i*nc+j]; /* Finish decompression, destroy it and close file: */ jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); fclose(infile); free(jsamp); return all; } #endif /* HAVE_LIBJPEG */ /* Read each color channel of a JPEG image as a separate array and put them in a linked list of data-structures. */ gal_data_t * gal_jpeg_read(char *filename, size_t minmapsize, int quietmmap) { #ifdef HAVE_LIBJPEG char *name; gal_data_t *out=NULL; size_t ndim=2, dsize[2]; unsigned char **allcolors; size_t i, s0, s1, numcolors; /* Read the JPEG image into the all array. */ allcolors=jpeg_read_to_array(filename, &s0, &s1, &numcolors); /* Add the arrays to the linked list. */ for(i=0;i<numcolors;++i) { dsize[0]=s0; dsize[1]=s1; if( asprintf(&name, "JPEG_CH_%zu", i+1)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_list_data_add_alloc(&out, allcolors[i], GAL_TYPE_UINT8, ndim, dsize, NULL, 0, minmapsize, quietmmap, name, NULL, NULL); free(name); } /* Free the array keeping the pointers to each channel. Note that each channel was allocated separately and goes out of this function with the data structure, so we just have to free the outer array that kept all the channels. */ free(allcolors); /* Return the number of color channels. */ return out; #else jpeg_error_no_libjpeg(__func__); return NULL; #endif } /************************************************************* ************** Write a JPEG image ************** *************************************************************/ #ifdef HAVE_LIBJPEG static void jpeg_write_array(JSAMPLE *jsr, gal_data_t *in, char *filename, uint8_t quality, float widthincm) { JSAMPROW r[1]; FILE * outfile; int row_stride=0, c; size_t *dsize=in->dsize; struct jpeg_error_mgr jerr; struct jpeg_compress_struct cinfo; size_t numch=gal_list_data_number(in); /* A small sanity check. */ if(quality > 100) error(EXIT_FAILURE, 0, "%s: quality value %u not acceptable. It must be " "a value between zero and 100 (inclusive)", __func__, quality); /* Begin the JPEG writing, following libjpeg's example.c */ cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); errno=0; if ((outfile = fopen(filename, "wb")) == NULL) error(EXIT_FAILURE, errno, "%s", filename); jpeg_stdio_dest(&cinfo, outfile); cinfo.image_width = dsize[1]; cinfo.image_height = dsize[0]; switch(numch) { case 1: row_stride=dsize[1]; cinfo.input_components = 1; cinfo.in_color_space = JCS_GRAYSCALE; break; case 3: row_stride=3*dsize[1]; cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; break; case 4: row_stride=4*dsize[1]; cinfo.input_components = 4; cinfo.in_color_space = JCS_CMYK; break; default: error(EXIT_FAILURE, 0, "%s: a bug! The number of channels is not 1, 3 " "or 4, but %zu. This should not happen. Please contact us so we " "can fix the problem", __func__, numch); } jpeg_set_defaults(&cinfo); jpeg_set_quality(&cinfo, quality, TRUE); cinfo.density_unit=1; cinfo.Y_density=cinfo.X_density=dsize[1]/(widthincm/2.54); jpeg_start_compress(&cinfo, TRUE); /* cinfo.next_scanline is 'unsigned int'. */ c=dsize[0]-1; /* In JPEG the first row is on the bottom! */ while (cinfo.next_scanline < cinfo.image_height) { r[0] = & jsr[c-- * row_stride]; (void) jpeg_write_scanlines(&cinfo, r, 1); } jpeg_finish_compress(&cinfo); fclose(outfile); jpeg_destroy_compress(&cinfo); } #endif /* HAVE_LIBJPEG */ void gal_jpeg_write(gal_data_t *in, char *filename, uint8_t quality, float widthincm) { #ifdef HAVE_LIBJPEG JSAMPLE *jsr; gal_data_t *channel; unsigned char *colors[4]; size_t i, pixel, color; size_t numch=gal_list_data_number(in); /* Small sanity checks. */ if(numch==2 || numch>4) error(EXIT_FAILURE, 0, "%s: only 1, 3, and 4 color channels are " "acceptable, input is a list of %zu data sets", __func__, numch); if(in->type!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: input has a '%s' type, but JPEG images can " "only have a 'uint8' type", __func__, gal_type_name(in->type, 1)); /* Make sure the file doesn't exist and that we have write permission. Note that the JPEG standard doesn't have multple extensions. */ if( gal_checkset_writable_notexist(filename)==0 ) error(EXIT_FAILURE, 0, "%s: already exists or its directory doesn't " "write permssion. Note that the JPEG standard only allows one " "image per file", filename); /* Make sure the JSAMPLE is 8bits, then allocate the necessary space based on the number of channels. */ if(sizeof *jsr!=1) error(EXIT_FAILURE, 0, "%s: JSAMPLE has to be 8bit", __func__); errno=0; jsr=malloc(numch * in->size * sizeof *jsr); if(jsr==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for jsr", __func__, numch * in->size * sizeof *jsr ); /* Set the pointers to each color. */ i=0; for(channel=in; channel!=NULL; channel=channel->next) colors[i++]=channel->array; /* Write the different colors into jsr. */ for(pixel=0; pixel<in->size; ++pixel) for(color=0;color<numch;++color) { jsr[pixel*numch+color] = colors[color][pixel]; /* printf("color: %zu, pixel: %zu, jsr: %d\n", color, pixel, (int)jsr[pixel*numch+color]); */ } /* Write jsr to a JPEG image and clean up. */ jpeg_write_array(jsr, in, filename, quality, widthincm); free(jsr); #else error(EXIT_FAILURE, 0, "%s: libjpeg was not found during the " "configuration of %s on this system. To write JPEG files, libjpeg " "is required. Please install libjpeg, then configure, make and " "install %s again", __func__, PACKAGE_STRING, PACKAGE_STRING); #endif /* HAVE_LIBJPEG */ } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/kdtree.c��������������������������������������������������������������������������0000644�0001750�0001750�00000042076�14551337306�011170� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* kdtree -- Create k-d tree and nearest neighbour searches. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Sachin Kumar Singh <sachinkumarsingh092@gmail.com> Contributing author(s): Mohammad Akhlaghi <mohammad@akhlaghi.org> Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <error.h> #include <float.h> #include <gnuastro/data.h> #include <gnuastro/table.h> #include <gnuastro/blank.h> #include <gnuastro/pointer.h> #include <gnuastro/permutation.h> /**************************************************************** ******** Utilities ******* ****************************************************************/ /* Main structure to keep kd-tree parameters. */ struct kdtree_params { size_t ndim; /* Number of dimentions in the nodes. */ size_t *input_row; /* The indexes of the input table. */ gal_data_t **coords; /* The input coordinates array. */ uint32_t *left, *right; /* The indexes of the left and right nodes. */ /* The values of the left and right columns. */ gal_data_t *left_col, *right_col; }; /* Swap 2 nodes of the tree. Instead of physically swaping all the values we swap just the indexes of the node. */ static void kdtree_node_swap(struct kdtree_params *p, size_t node1, size_t node2) { uint32_t tmp_left=p->left[node1]; uint32_t tmp_right=p->right[node1]; size_t tmp_input_row=p->input_row[node1]; /* No need to swap same node. */ if(node1==node2) return; p->left[node1]=p->left[node2]; p->right[node1]=p->right[node2]; p->input_row[node1]=p->input_row[node2]; p->left[node2]=tmp_left; p->right[node2]=tmp_right; p->input_row[node2]=tmp_input_row; } /* Return the distance between 2 given nodes. The distance is equivalent to the radius of the hypersphere having node as its center. Return: Radial distace from given point to the node. */ static double kdtree_distance_find(struct kdtree_params *p, size_t node, double *point) { size_t i; double *carr; double t_distance, node_distance=0; /* For all dimensions. */ for(i=0; i<p->ndim; ++i) { carr=p->coords[i]->array; t_distance=carr[node]-point[i]; node_distance += t_distance*t_distance; } return node_distance; } /**************************************************************** ******** Preperations and Cleanup ******* ****************************************************************/ /* Initialise the kdtree_params structure and do sanity checks. */ static void kdtree_prepare(struct kdtree_params *p, gal_data_t *coords_raw) { size_t i; gal_data_t *tmp; p->ndim=gal_list_data_number(coords_raw); /* Allocate the coordinate array. */ errno=0; p->coords=malloc(p->ndim*sizeof(**(p->coords))); if(p->coords==NULL) error(EXIT_FAILURE, errno, "%s: couldn't allocate %zu bytes " "for 'coords'", __func__, p->ndim*sizeof(**(p->coords))); /* Convert input to double type. */ tmp=coords_raw; for(i=0; i<p->ndim; ++i) { if(tmp->type == GAL_TYPE_FLOAT64) p->coords[i]=tmp; else p->coords[i]=gal_data_copy_to_new_type(tmp, GAL_TYPE_FLOAT64); /* Go to the next column list. */ tmp=tmp->next; } /* If the 'left_col' is already defined, then we just need to do some sanity checks. */ if(p->left_col) { /* Make sure there is more than one column. */ if(p->left_col->next==NULL) error(EXIT_FAILURE, 0, "%s: the input kd-tree should be 2 columns", __func__); /* Set the right column and check if there aren't any more columns. */ p->right_col=p->left_col->next; if(p->right_col->next) error(EXIT_FAILURE, 0, "%s: the input kd-tree shoudn't be more " "than 2 columns", __func__); /* Make sure they are the same size. */ if(p->left_col->size!=p->right_col->size) error(EXIT_FAILURE, 0, "%s: left and right columns should have " "same size", __func__); /* Make sure left is 'uint32_t'. */ if(p->left_col->type!=GAL_TYPE_UINT32) error(EXIT_FAILURE, 0, "%s: left kd-tree column should be uint32_t", __func__); /* Make sure right is 'uint32_t'. */ if(p->right_col->type!=GAL_TYPE_UINT32) error(EXIT_FAILURE, 0, "%s: right kd-tree column should be uint32_t", __func__); /* Initailise left and right arrays. */ p->left=p->left_col->array; p->right=p->right_col->array; } else { /* Allocate and initialise the kd-tree input_row. */ p->input_row=gal_pointer_allocate(GAL_TYPE_SIZE_T, coords_raw->size, 0, __func__, "p->input_row"); for(i=0; i<coords_raw->size; ++i) p->input_row[i]=i; /* Allocate output and initialize them. */ p->left_col=gal_data_alloc(NULL, GAL_TYPE_UINT32, 1, coords_raw->dsize, NULL, 0, coords_raw->minmapsize, coords_raw->quietmmap, "left", "index", "index of left subtree in the kd-tree"); p->right_col=gal_data_alloc(NULL, GAL_TYPE_UINT32, 1, coords_raw->dsize, NULL, 0, coords_raw->minmapsize, coords_raw->quietmmap, "right", "index", "index of right subtree in the kd-tree"); /* Fill the elements of the params structure. */ p->left_col->next=p->right_col; /* Initialise the left and right arrays. */ p->left=p->left_col->array; p->right=p->right_col->array; for(i=0;i<coords_raw->size;++i) { p->left[i]=p->right[i]=GAL_BLANK_UINT32; } } } /* Cleanup the data and free the memory used by the structure after use. */ static void kdtree_cleanup(struct kdtree_params *p, gal_data_t *coords_raw) { size_t i; gal_data_t *tmp; /* Clean up. */ tmp = coords_raw; for(i = 0; i<p->ndim; ++i) { if(p->coords[i]!=tmp) gal_data_free(p->coords[i]); tmp=tmp->next; } /* Free memory. */ free(p->coords); free(p->input_row); } /**************************************************************** ******** Create KD-Tree ******* ****************************************************************/ /* Divide the array into two parts, values more than that of k'th node and values less than k'th node. Return: Index of the node whose value is greater than all the nodes before it. */ static size_t kdtree_make_partition(struct kdtree_params *p, size_t node_left, size_t node_right, size_t node_k, double *coordinate) { /* store_index is the index before which all values are smaller than the value of k'th node. */ size_t i, store_index; double k_node_value = coordinate[p->input_row[node_k]]; /* Move the k'th node to the right. */ kdtree_node_swap(p, node_k, node_right); /* Move all nodes smaller than k'th node to its left and check the number of elements smaller than the value present at the k'th index. */ store_index = node_left; for(i = node_left; i < node_right; ++i) if(coordinate[p->input_row[i]] < k_node_value) { /* Move i'th node to the left side of the k'th index. */ kdtree_node_swap(p, store_index, i); /* Prepare the place of next smaller node. */ store_index++; } /* Place k'th node after all the nodes that have lesser value than it, as it was moved to the right initially. */ kdtree_node_swap(p, node_right, store_index); /* Return the store_index. */ return store_index; } /* Find the median node of the current axis. Instead of randomly choosing the median node, we use `quickselect alogorithm` to find median node in linear time between the left and right node. This also makes the values in the current axis partially sorted. See `https://en.wikipedia.org/wiki/Quickselect` for pseudocode and more details of the algorithm. Return: Median node between the given left and right nodes. */ static size_t kdtree_median_find(struct kdtree_params *p, size_t node_left, size_t node_right, double *coordinate) { size_t node_pivot, node_median; /* False state, this is a programming error. */ if(node_right < node_left) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us to fix " "the problem! For some reason, the node_right (%zu) is " "smaller than node_left (%zu)", __func__, node_right, node_left); /* If the two nodes are the same, just return the node. */ if(node_right == node_left) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us to fix " "the problem! For some reason, the node_right (%zu) is " "equal to node_left (%zu)", __func__, node_right, node_left); /* The required median node between left and right node. */ node_median = node_left+(node_right-node_left)/2; /* Loop until the median of the current axis is returned. */ while(1) { /* Pivot node acts as a reference for the distance from the desired (here median) node. */ node_pivot = kdtree_make_partition(p, node_left, node_right, node_median, coordinate); /* If median is found, break the loop and return median node. */ if(node_median == node_pivot) break; /* Change the left or right node based on the position of the pivot node with respect to the required median node. */ if(node_median < node_pivot) node_right = node_pivot - 1; else node_left = node_pivot + 1; } /* Return the median node. */ return node_median; } /* Make a kd-tree from a given set of points. For tree construction, a median point is selected for each axis and the left and right branches are recursively created by comparing points in that axis. Return : Indexes of the nodes in the kd-tree. */ static uint32_t kdtree_fill_subtrees(struct kdtree_params *p, size_t node_left, size_t node_right, size_t depth) { /* Set the working axis. */ size_t axis=depth % p->ndim; /* node_median is a counter over the `input_row` array. `input_row` array has the input_row(row number). */ size_t node_median; /* Recursion terminates when the left and right nodes are the same. */ if(node_left==node_right) return p->input_row[node_left]; /* Find the median node. */ node_median = kdtree_median_find(p, node_left, node_right, p->coords[axis]->array); /* node_median == 0 : We are in the lowest node (leaf) so no need When we only have 2 nodes and the median is equal to the left, its the end of the subtree. */ if(node_median) p->left[node_median] = ( (node_median == node_left) ? GAL_BLANK_UINT32 : kdtree_fill_subtrees(p, node_left, node_median-1, depth+1) ); /* Right and left nodes are non-symytrical. Node left can be equal to node median when there are only 2 points and at this point, there can never be a single point (node left == node right). But node right can never be equal to node median. So we don't check for it. */ p->right[node_median] = kdtree_fill_subtrees(p, node_median+1, node_right, depth+1); /* All subtrees have been parsed, return the node. */ return p->input_row[node_median]; } /* High level function to construct the kd-tree. This function initilises and creates the tree in top-down manner. Returns a list containing the indexes of left and right subtrees. */ gal_data_t * gal_kdtree_create(gal_data_t *coords_raw, size_t *root) { struct kdtree_params p={0}; /* If there are no coordinates, just return NULL. */ if(coords_raw->size==0) return NULL; /* Initialise the params structure. */ kdtree_prepare(&p, coords_raw); /* Fill the kd-tree. */ *root=kdtree_fill_subtrees(&p, 0, coords_raw->size-1, 0); /* For a check size_t i; for(i=0;i<coords_raw->size;++i) printf("%-15zu%-15u%-15u\n", p.input_row[i], p.left[i], p.right[i]); */ /* Do a reverse permutation to sort the indexes back in the input order. */ gal_permutation_apply_inverse(p.left_col, p.input_row); gal_permutation_apply_inverse(p.right_col, p.input_row); /* Free and clean up. */ kdtree_cleanup(&p, coords_raw); /* Return results. */ return p.left_col; } /**************************************************************** ******** Nearest-Neighbour Search ******* ****************************************************************/ /* This is a helper function which finds the nearest neighbour of the given point in a kdtree. It calculates the least distance from the point, and the index of that nearest node (out_nn). See `https://en.wikipedia.org/wiki/K-d_tree#Nearest_neighbour_search` for more information. */ static void kdtree_nearest_neighbour(struct kdtree_params *p, uint32_t node_current, double *point, double *least_dist, size_t *out_nn, size_t depth) { double d, dx, dx2; size_t axis=depth % p->ndim; /* Set the working axis. */ double *coordinates=p->coords[axis]->array; /* If no subtree present, don't search further. */ if(node_current==GAL_BLANK_UINT32) return; /* The distance between search point to the current node. */ d = kdtree_distance_find(p, node_current, point); /* Distance between the splitting coordinate of the search point and current node. */ dx = coordinates[node_current]-point[axis]; /* Check if the current node is nearer than the previous nearest node. */ if(d < *least_dist) { *least_dist = d; *out_nn = node_current; } /* If exact match found (least distance 0), return it. */ if(*least_dist==0.0f) return; /* Recursively search in subtrees. */ kdtree_nearest_neighbour(p, dx > 0 ? p->left[node_current] : p->right[node_current], point, least_dist, out_nn, depth+1); /* Since the hyperplanes are all axis-aligned, to check if there is a node in other branch which is nearer to the current node is done by a simple comparison to see whether the distance between the splitting coordinate (median node) of the search point and current node is lesser (i.e on same side of hyperplane) than the distance (overall coordinates) from the search point to the current nearest. */ dx2 = dx*dx; if(dx2 >= *least_dist) return; /* Recursively search other subtrees. */ kdtree_nearest_neighbour(p, dx > 0 ? p->right[node_current] : p->left[node_current], point, least_dist, out_nn, depth+1); } /* High-level function used to find the nearest neighbour of a given point in a kd-tree. It calculates the least distance of the point from the nearest node and returns the index of that node. Return: The index of the nearest neighbour node in the kd-tree. */ size_t gal_kdtree_nearest_neighbour(gal_data_t *coords_raw, gal_data_t *kdtree, size_t root, double *point, double *least_dist) { struct kdtree_params p={0}; size_t out_nn=GAL_BLANK_SIZE_T; /* Initialisation. */ p.left_col=kdtree; *least_dist=DBL_MAX; kdtree_prepare(&p, coords_raw); /* Use the low-level function to find th nearest neighbour. */ kdtree_nearest_neighbour(&p, root, point, least_dist, &out_nn, 0); /* least_dist is the square of the distance between the nearest neighbour and the point (used to improve processing). Square root of that is the actual distance. */ *least_dist = sqrt(*least_dist); /* For a check printf("%s: root=%zu, out_nn=%zu, least_dis=%f\n", __func__, root, out_nn, least_dist); */ /* Clean up and return. */ kdtree_cleanup(&p, coords_raw); return out_nn; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/label.c���������������������������������������������������������������������������0000644�0001750�0001750�00000113713�14551566633�010775� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* label -- Work on labeled (integer valued) datasets. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnuastro/list.h> #include <gnuastro/qsort.h> #include <gnuastro/label.h> #include <gnuastro/pointer.h> #include <gnuastro/dimension.h> #include <gnuastro/statistics.h> /**************************************************************** ***************** Internal ******************** ****************************************************************/ static void label_check_type(gal_data_t *in, uint8_t needed_type, char *variable, const char *func) { if(in->type!=needed_type) error(EXIT_FAILURE, 0, "%s: the '%s' dataset has '%s' type, but it " "must have a '%s' type.\n\n" "You can use 'gal_data_copy_to_new_type' or " "'gal_data_copy_to_new_type_free' to convert your input dataset " "to this type before calling this function", func, variable, gal_type_name(in->type, 1), gal_type_name(needed_type, 1)); } /**************************************************************** ***************** Indexs ******************** ****************************************************************/ /* Put the indexs of each labeled region into an array of 'gal_data_t's (where each element is a dataset containing the respective label's indexs). */ gal_data_t * gal_label_indexs(gal_data_t *labels, size_t numlabs, size_t minmapsize, int quietmmap) { size_t i, *areas; int32_t *a, *l, *lf; gal_data_t *max, *labindexs; /* Sanity check. */ label_check_type(labels, GAL_TYPE_INT32, "labels", __func__); /* If the user hasn't given the number of labels, find it (maximum label). */ if(numlabs==0) { max=gal_statistics_maximum(labels); numlabs=*((int32_t *)(max->array)); gal_data_free(max); } labindexs=gal_data_array_calloc(numlabs+1); /* Find the area in each detected object (to see how much space we need to allocate). If blank values are present, an extra check is necessary, so to get faster results when there aren't any blank values, we'll also do a check. */ areas=gal_pointer_allocate(GAL_TYPE_SIZE_T, numlabs+1, 1, __func__, "areas"); lf=(l=labels->array)+labels->size; do if(*l>0) /* Only labeled regions: *l==0 (undetected), *l<0 (blank). */ ++areas[*l]; while(++l<lf); /* For a check. for(i=0;i<numlabs+1;++i) printf("detection %zu: %zu\n", i, areas[i]); exit(0); */ /* Allocate/Initialize the dataset containing the indexs of each object. We don't want the labels of the non-detected regions (areas[0]). So we'll set that to zero. */ for(i=1;i<numlabs+1;++i) gal_data_initialize(&labindexs[i], NULL, GAL_TYPE_SIZE_T, 1, &areas[i], NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); /* Put the indexs into each dataset. We will use the areas array again, but this time, use it as a counter. */ memset(areas, 0, (numlabs+1)*sizeof *areas); lf=(a=l=labels->array)+labels->size; do if(*l>0) /* No undetected regions (*l==0), or blank (<0). */ ((size_t *)(labindexs[*l].array))[ areas[*l]++ ] = l-a; while(++l<lf); /* Clean up and return. */ free(areas); return labindexs; } /**************************************************************** ***************** Over segmentation ******************** ****************************************************************/ /* Over-segment the region specified by its indexs into peaks and their respective regions (clumps). This is very similar to the immersion method of Vincent & Soille(1991), but here, we will not separate the image into layers, instead, we will work based on the ordered flux values. If a certain pixel (at a certain level) has no neighbors, it is a local maximum and will be assigned a new label. If it has a labeled neighbor, it will take that label and if there is more than one neighboring labeled region that pixel will be a 'river' pixel. DON'T FORGET: SET THE FLAGS FOR CONV EQUAL TO INPUT IN SEGMENT. */ size_t gal_label_watershed(gal_data_t *values, gal_data_t *indexs, gal_data_t *labels, size_t *topinds, int min0_max1) { size_t ndim=values->ndim; int hasblank; float *arr=values->array; gal_list_sizet_t *Q=NULL, *cleanup=NULL; size_t *a, *af, ind, *dsize=values->dsize; size_t *dinc=gal_dimension_increment(ndim, dsize); int32_t n1, nlab, rlab, curlab=1, *labs=labels->array; /* Sanity checks. */ label_check_type(values, GAL_TYPE_FLOAT32, "values", __func__); label_check_type(indexs, GAL_TYPE_SIZE_T, "indexs", __func__); label_check_type(labels, GAL_TYPE_INT32, "labels", __func__); if( gal_dimension_is_different(values, labels) ) error(EXIT_FAILURE, 0, "%s: the 'values' and 'labels' arguments must " "have the same size", __func__); if(indexs->ndim!=1) error(EXIT_FAILURE, 0, "%s: 'indexs' has to be a 1D array, but it is " "%zuD", __func__, indexs->ndim); /* See if there are blank values in the input dataset. */ hasblank=gal_blank_present(values, 0); /********************************************* For checks and debugging:* gal_data_t *crop; size_t extcount=1; int32_t *cr, *crf; size_t checkdsize[2]={10,10}; size_t checkstart[2]={50,145}; char *filename="clumpbuild.fits"; size_t checkstartind=gal_dimension_coord_to_index(2, dsize, checkstart); gal_data_t *tile=gal_data_alloc(gal_data_ptr_increment(arr, checkstartind, values->type), GAL_TYPE_INVALID, 2, checkdsize, NULL, 0, 0, NULL, NULL, NULL); tile->block=values; gal_checkset_writable_remove(filename, NULL, 0, 0); crop=gal_data_copy(tile); gal_fits_img_write(crop, filename, NULL, PROGRAM_NAME); gal_data_free(crop); printf("blank: %u\nriver: %u\ntmpcheck: %u\ninit: %u\n", (int32_t)GAL_BLANK_INT32, (int32_t)GAL_LABEL_RIVER, (int32_t)GAL_LABEL_TMPCHECK, (int32_t)GAL_LABEL_INIT); tile->array=gal_tile_block_relative_to_other(tile, labels); tile->block=labels; **********************************************/ /* If the size of the indexs is zero, then this function is pointless. */ if(indexs->size==0) return 0; /* If the indexs aren't already sorted (by the value they correspond to), sort them given indexs based on their flux ('gal_qsort_index_arr' is defined as static in 'gnuastro/qsort.h'). */ if( !( (indexs->flag & GAL_DATA_FLAG_SORT_CH) && ( indexs->flag & (GAL_DATA_FLAG_SORTED_I | GAL_DATA_FLAG_SORTED_D) ) ) ) { gal_qsort_index_single=values->array; qsort(indexs->array, indexs->size, sizeof(size_t), ( min0_max1 ? gal_qsort_index_single_float32_d : gal_qsort_index_single_float32_i) ); } /* Initialize the region we want to over-segment. */ af=(a=indexs->array)+indexs->size; do labs[*a]=GAL_LABEL_INIT; while(++a<af); /* Go over all the given indexs and pull out the clumps. */ af=(a=indexs->array)+indexs->size; do /* When regions of a constant flux or masked regions exist, some later indexs (although they have same flux) will be filled before hand. If they are done, there is no need to do them again. */ if(labs[*a]==GAL_LABEL_INIT) { /* It might happen where one or multiple regions of the pixels under study have the same flux. So two equal valued pixels of two separate (but equal flux) regions will fall immediately after each other in the sorted list of indexs and we have to account for this. Therefore, if we see that the next pixel in the index list has the same flux as this one, it does not guarantee that it should be given the same label. Similar to the breadth first search algorithm for finding connected components, we will search all the neighbours and the neighbours of those neighbours that have the same flux of this pixel to see if they touch any label or not and to finally give them all the same label. */ if( (a+1)<af && arr[*a]==arr[*(a+1)] ) { /* Label of first neighbor found. */ n1=0; /* A small sanity check. */ if(Q!=NULL || cleanup!=NULL) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so " "we can fix this problem. 'Q' and 'cleanup' should be " "NULL but while checking the equal flux regions they " "aren't", __func__, PACKAGE_BUGREPORT); /* Add this pixel to a queue. */ gal_list_sizet_add(&Q, *a); gal_list_sizet_add(&cleanup, *a); labs[*a] = GAL_LABEL_TMPCHECK; /* Find all the pixels that have the same flux and are connected. */ while(Q!=NULL) { /* Pop an element from the queue. */ ind=gal_list_sizet_pop(&Q); /* Look at the neighbors and see if we already have a label. */ GAL_DIMENSION_NEIGHBOR_OP(ind, ndim, dsize, ndim, dinc, { /* If it is already decided to be a river, then stop looking at the neighbors. */ if(n1!=GAL_LABEL_RIVER) { /* For easy reading. */ nlab=labs[ nind ]; /* This neighbor's label isn't zero. */ if(nlab) { /* If this neighbor has not been labeled yet and has an equal flux, add it to the queue to expand the studied region. */ if( nlab==GAL_LABEL_INIT && arr[nind]==arr[*a] ) { labs[nind]=GAL_LABEL_TMPCHECK; gal_list_sizet_add(&Q, nind); gal_list_sizet_add(&cleanup, nind); } else n1=( nlab>0 /* If this neighbor has a positive nlab, it belongs to another object, so if 'n1' has not been set for the whole region (n1==0), put 'nlab' into 'n1'. If 'n1' has been set and is different from 'nlab' then this whole equal flux region should be a wide river because it is connecting two connected regions. */ ? ( n1 ? (n1==nlab ? n1 : GAL_LABEL_RIVER) : nlab ) /* If the data has blank pixels, see if the neighbor is blank. If so, set the label to a river. Checking for the presence of blank values in the dataset can be done outside this loop (or even outside this function if flags are set). So to help the compiler optimize the program, we'll first use the pre-checked value. */ : ( ( hasblank && isnan(arr[nind]) ) ? GAL_LABEL_RIVER : n1 ) ); } /* If this neigbour has a label of zero, then we are on the edge of the indexed region (the neighbor is not in the initial list of pixels to segment). When over-segmenting the noise and the detections, 'label' is zero for the parts of the image that we are not interested in here. */ else labs[*a]=GAL_LABEL_RIVER; } } ); } /* Set the label that is to be given to this equal flux region. If 'n1' was set to any value, then that label should be used for the whole region. Otherwise, this is a new label, see the case for a non-flat region. */ if(n1) rlab = n1; else { rlab = curlab++; if( topinds ) /* This is a local maximum of */ topinds[rlab]=*a; /* this region, save its index. */ } /* Give the same label to the whole connected equal flux region, except those that might have been on the side of the image and were a river pixel. */ while(cleanup!=NULL) { ind=gal_list_sizet_pop(&cleanup); /* If it was on the sides of the image, it has been changed to a river pixel. */ if( labs[ ind ]==GAL_LABEL_TMPCHECK ) labs[ ind ]=rlab; } } /* The flux of this pixel is not the same as the next sorted flux, so simply find the label for this object. */ else { /* 'n1' is the label of the first labeled neighbor found, so we'll initialize it to zero. */ n1=0; /* Go over all the fully connected neighbors of this pixel and see if all the neighbors (with maximum connectivity: the number of dimensions) that have a non-macro value belong to one label or not. If the pixel is neighboured by more than one label, set it as a river pixel. Also if it is touching a zero valued pixel (which does not belong to this object), set it as a river pixel. */ GAL_DIMENSION_NEIGHBOR_OP(*a, ndim, dsize, ndim, dinc, { /* When 'n1' has already been set as a river, there is no point in looking at the other neighbors. */ if(n1!=GAL_LABEL_RIVER) { /* For easy reading. */ nlab=labs[ nind ]; /* If this neighbor is on a non-processing label, then set the first neighbor accordingly. Note that we also want the zero valued neighbors (detections if working on sky, and sky if working on detection): we want rivers between the two domains. */ n1 = ( nlab /* nlab is non-zero. */ ? ( nlab>0 /* Neighbor has a meaningful label, so check with any previously found labeled neighbors. */ ? ( n1 ? ( nlab==n1 ? n1 : GAL_LABEL_RIVER ) : nlab ) /* If the data has blank pixels, see if the neighbor is blank. If so, set the label to a river. Checking for the presence of blank values in the dataset can be done outside this loop (or even outside this function if flags are set). So to help the compiler optimize the program, we'll first use the pre-checked value. */ : ( ( hasblank && isnan(arr[nind]) ) ? GAL_LABEL_RIVER : n1 ) ) /* 'nlab==0' (the neighbor lies in the other domain (sky or detections). To avoid the different domains touching, this pixel should be a river. */ : GAL_LABEL_RIVER ); } }); /* Either assign a new label to this pixel, or give it the one of its neighbors. If n1 equals zero, then this is a new peak, and a new label should be created. But if n1!=0, it is either a river pixel (has more than one labeled neighbor and has been set to 'GAL_LABEL_RIVER' before) or all its neighbors have the same label. In both such cases, rlab should be set to n1. */ if(n1) rlab = n1; else { rlab = curlab++; if( topinds ) topinds[ rlab ]=*a; } /* Put the found label in the pixel. */ labs[ *a ] = rlab; } /********************************************* For checks and debugging: if( *a / dsize[1] >= checkstart[0] && *a / dsize[1] < checkstart[0] + checkdsize[0] && *a % dsize[1] >= checkstart[1] && *a % dsize[1] < checkstart[1] + checkdsize[1] ) { printf("%zu (%zu: %zu, %zu): %u\n", ++extcount, *a, (*a%dsize[1])-checkstart[1], (*a/dsize[1])-checkstart[0], labs[*a]); crop=gal_data_copy(tile); crf=(cr=crop->array)+crop->size; do if(*cr==GAL_LABEL_RIVER) *cr=0; while(++cr<crf); gal_fits_img_write(crop, filename, NULL, PROGRAM_NAME); gal_data_free(crop); } **********************************************/ } while(++a<af); /********************************************* For checks and debugging: tile->array=NULL; gal_data_free(tile); printf("Total number of clumps: %u\n", curlab-1); **********************************************/ /* Clean up. */ free(dinc); /* Return the total number of clumps. */ return curlab-1; } /**********************************************************************/ /************* Clump significance *************/ /**********************************************************************/ static int label_clump_significance_sanity(gal_data_t *values, gal_data_t *std, gal_data_t *label, gal_data_t *indexs, struct gal_tile_two_layer_params *tl, gal_data_t *sig, const char *func) { size_t *a, *af; float first=NAN, second=NAN, *f=values->array; /* Type of values. */ if( values->type!=GAL_TYPE_FLOAT32 ) error(EXIT_FAILURE, 0, "%s: the values dataset must have a 'float' " "type, but it has a '%s' type", func, gal_type_name(values->type, 1)); /* Type of standard deviation. */ if( std->type!=GAL_TYPE_FLOAT32 ) error(EXIT_FAILURE, 0, "%s: the standard deviation dataset must have a " "'float' ('float32') type, but it has a '%s' type", func, gal_type_name(std->type, 1)); /* Type of labels image. */ if( label->type!=GAL_TYPE_INT32 ) error(EXIT_FAILURE, 0, "%s: the labels dataset must have an 'int32' " "type, but it has a '%s' type", func, gal_type_name(label->type, 1)); /* Dimentionality of the values dataset. */ if( values->ndim>3 ) error(EXIT_FAILURE, 0, "%s: currently only supports 1, 2 or 3 " "dimensional datasets, but a %zu-dimensional dataset is given", func, values->ndim); /* Type of indexs image. */ if( indexs->type!=GAL_TYPE_SIZE_T ) error(EXIT_FAILURE, 0, "%s: the indexs dataset must have a 'size_t' " "type, but it has a '%s' type", func, gal_type_name(label->type, 1)); /* Dimensionality of indexs (must be 1D). */ if( indexs->ndim!=1 ) error(EXIT_FAILURE, 0, "%s: the indexs dataset must be a 1D dataset, " "but it has %zu dimensions", func, indexs->ndim); /* Similar sizes between values and standard deviation. */ if( gal_dimension_is_different(values, label) ) error(EXIT_FAILURE, 0, "%s: the values and label arrays don't have the " "same size.", func); /* Size of the standard deviation. */ if( !( std->size==1 || std->size==values->size || (tl && std->size==tl->tottiles) ) ) error(EXIT_FAILURE, 0, "%s: the standard deviation dataset has %zu " "elements. But it can only have one of these sizes: 1) a " "single value (used for the whole dataset), 2) The size of " "the values dataset (%zu elements, one value for each " "element), 3) The size of the number of tiles in the input " "tessellation (when a tessellation is given)", func, std->size, values->size); /* If the 'array' and 'dsize' elements of 'sig' have already been set. */ if(sig->array) error(EXIT_FAILURE, 0, "%s: the dataset that will contain the " "significance values must have NULL pointers for its 'array' " "and 'dsize' pointers (they will be allocated here)", func); /* See if the clumps are to be built starting from local maxima or local minima. */ af=(a=indexs->array)+indexs->size; do /* A label may have NAN values. */ if( !isnan(f[*a]) ) { if( isnan(first) ) first=f[*a]; else { if( isnan(second) ) { /* Note that the elements may have equal values, so for 'second', we want the first non-blank AND different value. */ if( f[*a]!=first ) second=f[*a]; } else break; } } while(++a<af); /* Note that if all the values are blank or there is only one value covered by all the indexs, then both (or one) of 'first' or 'second' will be NAN. In either case, the significance measure is not going to be meaningful if we assume the clumps start from the maxima or minima. So we won't check if they are NaN or not. */ return first>second ? 1 : 0; } /* In this function we want to find the general information for each clump in an over-segmented labeled array. The signal in each clump is the average signal inside it subtracted by the average signal in the river pixels around it. So this function will go over all the pixels in the object (already found in deblendclumps()) and add them appropriately. The output is an array of size cltprm->numinitial*INFO_NCOLS. as listed below. */ enum infocols { INFO_STD, /* Standard deviation. */ INFO_INAREA, /* Tatal area within clump. */ INFO_RIVAREA, /* Tatal area within rivers around clump. */ INFO_PEAK_RIVER, /* Peak (min or max) river value around a clump. */ INFO_PEAK_CENTER, /* Peak (min or max) clump value. */ INFO_NCOLS, /* Total number of columns in the 'info' table. */ }; static void label_clump_significance_raw(gal_data_t *values_d, gal_data_t *std_d, gal_data_t *label_d, gal_data_t *indexs, struct gal_tile_two_layer_params *tl, double *info) { size_t ndim=values_d->ndim, *dsize=values_d->dsize; double *row; size_t i, *a, *af, ii, coord[3]; size_t nngb=gal_dimension_num_neighbors(ndim); int32_t nlab, *ngblabs, *label=label_d->array; float *values=values_d->array, *std=std_d->array; size_t *dinc=gal_dimension_increment(ndim, dsize); /* Allocate the array to keep the neighbor labels of river pixels. */ ngblabs=gal_pointer_allocate(GAL_TYPE_INT32, nngb, 0, __func__, "ngblabs"); /* Go over all the pixels in this region. */ af=(a=indexs->array)+indexs->size; do if( !isnan(values[ *a ]) ) { /* This pixel belongs to a clump. */ if( label[ *a ]>0 ) { /* For easy reading. */ row = &info [ label[*a] * INFO_NCOLS ]; /* Add this pixel to this clump's area. */ ++row[ INFO_INAREA ]; /* In the loop 'INFO_INAREA' is just the pixel counter of this clump. The pixels are sorted by flux (decreasing for positive clumps and increasing for negative). So the second extremum value is just the second pixel of the clump. */ if( row[ INFO_INAREA ]==1.0f ) row[ INFO_PEAK_CENTER ] = values[*a]; } /* This pixel belongs to a river (has a value of zero and isn't blank). */ else { /* We are on a river pixel. So the value of this pixel has to be added to any of the clumps in touches. But since it might touch a labeled region more than once, we use 'ngblabs' to keep track of which label we have already added its value to. 'ii' is the number of different labels this river pixel has already been considered for. 'ngblabs' will keep the list labels. */ ii=0; memset(ngblabs, 0, nngb*sizeof *ngblabs); /* Look into the 8-connected neighbors (recall that a connectivity of 'ndim' means all pixels touching it (even on one vertice). */ GAL_DIMENSION_NEIGHBOR_OP(*a, ndim, dsize, ndim, dinc, { /* This neighbor's label. */ nlab=label[ nind ]; /* We only want those neighbors that are not rivers (>0) or any of the flag values. */ if(nlab>0) { /* Go over all already checked labels and make sure this clump hasn't already been considered. */ for(i=0;i<ii;++i) if(ngblabs[i]==nlab) break; /* This neighbor clump hasn't been considered yet: */ if(i==ii) { ngblabs[ii++] = nlab; row = &info[ nlab * INFO_NCOLS ]; ++row[INFO_RIVAREA]; if( row[INFO_RIVAREA]==1.0f ) { /* Get the maximum river value. */ row[INFO_PEAK_RIVER] = values[*a]; /* Get the standard deviation. */ if(std_d->size==1 || std_d->size==values_d->size) row[INFO_STD]=std_d->size==1?std[0]:std[*a]; else { gal_dimension_index_to_coord(*a, ndim, dsize, coord); row[INFO_STD]= std[gal_tile_full_id_from_coord(tl,coord)]; } } } } } ); } } while(++a<af); /* Clean up. */ free(dinc); free(ngblabs); } /* Make an S/N table for the clumps in a given region. */ void gal_label_clump_significance(gal_data_t *values, gal_data_t *std, gal_data_t *label, gal_data_t *indexs, struct gal_tile_two_layer_params *tl, size_t numclumps, size_t minarea, int variance, int keepsmall, gal_data_t *sig, gal_data_t *sigind) { double *info; int max1_min0; float *sigarr; double C, R, S, *row; int32_t *indarr=NULL; size_t i, ind, counter=0; size_t tablen=numclumps+1; /* If there were no initial clumps, then ignore this function. */ if(numclumps==0) { sig->size=0; return; } /* Basic sanity checks. */ max1_min0=label_clump_significance_sanity(values, std, label, indexs, tl, sig, __func__); /* Allocate the arrays to keep the final significance measure (and possibly the indexs). */ sig->ndim = 1; /* Depends on 'cltprm->sn' */ sig->type = GAL_TYPE_FLOAT32; if(sig->dsize==NULL) sig->dsize = gal_pointer_allocate(GAL_TYPE_SIZE_T, 1, 0, __func__, "sig->dsize"); sig->array = gal_pointer_allocate(sig->type, tablen, 0, __func__, "sig->array"); sig->size = sig->dsize[0] = tablen; /* MUST BE AFTER dsize. */ info=gal_pointer_allocate(GAL_TYPE_FLOAT64, tablen*INFO_NCOLS, 1, __func__, "info"); if( sigind ) { sigind->ndim = 1; sigind->type = GAL_TYPE_INT32; sigind->dsize = gal_pointer_allocate(GAL_TYPE_SIZE_T, 1, 0, __func__, "sigind->dsize"); sigind->size = sigind->dsize[0] = tablen;/* After dsize. */ sigind->array = gal_pointer_allocate(sigind->type, tablen, 0, __func__, "sigind->array"); } /* First, get the raw information necessary for making the S/N table. */ label_clump_significance_raw(values, std, label, indexs, tl, info); /* Calculate the signficance value for successful clumps. */ sigarr=sig->array; if(keepsmall) sigarr[0]=NAN; if(sigind) indarr=sigind->array; for(i=1;i<tablen;++i) { /* For readability. */ row = &info[ i * INFO_NCOLS ]; /* If we have a sufficient area and any rivers were actually found for this clump, then do the measurement. */ if( row[ INFO_INAREA ]>minarea && row[ INFO_RIVAREA ]) { /* Set the index to write the values. If 'keepsmall' is not called, we don't care about the IDs of the clumps anymore, so store the signal-to-noise ratios contiguously. Note that counter will always be smaller and equal to i. */ ind = keepsmall ? i : counter++; /* For easy reading. */ R = row[ INFO_PEAK_RIVER ]; C = row[ INFO_PEAK_CENTER ]; S = variance ? sqrt(row[ INFO_STD ]) : row[ INFO_STD ]; /* NEGATIVE VALUES: Rivers are also defined on the edges of the image and on pixels touching blank pixels. In a strong gradient, such sitations can cause the river to be larger/smaller than the minimum/maximum within the clump. This can only happen in very strong gradients, so for now, I think it is safe to ignore that clump (its negative value will automatically discard it). Later, if we find a problem with this, we'll have to figure out a better solution. */ if(sigind) indarr[ind]=i; sigarr[ind] = ( max1_min0 ? (C-R) : (R-C) ) / S; } else { /* Only over detections, we should put a NaN when the S/N isn't calculated. */ if(keepsmall) { sigarr[i]=NAN; if(sigind) indarr[i]=i; } } } /* If we don't want to keep the small clumps, the size of the S/N table has to be corrected. */ if(keepsmall==0) { sig->dsize[0] = sig->size = counter; if(sigind) sigind->dsize[0] = sigind->size = counter; } /* Clean up. */ free(info); } /**********************************************************************/ /************* Growing labels *************/ /**********************************************************************/ /* Grow the given labels without creating new ones. */ void gal_label_grow_indexs(gal_data_t *labels, gal_data_t *indexs, int withrivers, int connectivity) { int searchngb; size_t *iarray=indexs->array; int32_t n1, nlab, *olabel=labels->array; size_t *s, *sf, thisround, ninds=indexs->size; size_t *dinc=gal_dimension_increment(labels->ndim, labels->dsize); /* Some basic sanity checks: */ label_check_type(indexs, GAL_TYPE_SIZE_T, "indexs", __func__); label_check_type(labels, GAL_TYPE_INT32, "labels", __func__); if(indexs->ndim!=1) error(EXIT_FAILURE, 0, "%s: 'indexs' has to be a 1D array, but it is " "%zuD", __func__, indexs->ndim); /* The basic idea is this: after growing, not all the blank pixels are necessarily filled, for example the pixels might belong to two regions above the growth threshold. So the pixels in between them (which are below the threshold will not ever be able to get a label, even if they are in the indexs list). Therefore, the safest way we can terminate the loop of growing the objects is to stop it when the number of pixels left to fill in this round (thisround) equals the number of blanks. To start the loop, we set 'thisround' to one more than the number of indexed pixels. Note that it will be corrected immediately after the loop has started, it is just important to pass the 'while'. */ thisround=ninds+1; while( thisround > ninds ) { /* 'thisround' will keep the number of pixels to be inspected in this round. 'ninds' will count the number of pixels left without a label by the end of this round. Since 'ninds' comes from the previous loop (or outside, for the first round) it has to be saved in 'thisround' to begin counting a fresh. */ thisround=ninds; ninds=0; /* Go over all the available indexs. NOTE: while the 'indexs->array' pointer remains unchanged, 'indexs->size' can/will change (get smaller) in every loop. */ sf = (s=indexs->array) + indexs->size; do { /* We'll begin by assuming the nearest neighbor of this pixel has no label (has a value of 0). */ n1=0; /* Check the neighbors of this pixel. Note that since this macro has multiple loops within it, we can't use break. We'll use the 'searchngb' variable instead. */ searchngb=1; GAL_DIMENSION_NEIGHBOR_OP(*s, labels->ndim, labels->dsize, connectivity, dinc, { if(searchngb) { /* For easy reading. */ nlab = olabel[nind]; /* This neighbor's label is meaningful. */ if(nlab>0) /* This is a real label. */ { if(n1) /* A prev. ngb label has been found. */ { if( n1 != nlab ) /* Different label from */ { /* prevously found ngb for this pixel. */ n1=GAL_LABEL_RIVER; searchngb=0; } } else { /* This is the first labeld neighbor found. */ n1=nlab; /* If we want to completely fill in the region ('withrivers==0'), then there is no point in looking in other neighbors, the first neighbor we find, is the one we'll use. */ if(!withrivers) searchngb=0; } } } } ); /* The loop over neighbors (above) finishes with three possibilities: n1==0 --> No labeled neighbor was found. n1==GAL_LABEL_RIVER --> Connecting two labeled regions. n1>0 --> Only has one neighbouring label. The first one means that no neighbors were found and this pixel should be kept for the next loop (we'll be growing the objects pixel-layer by pixel-layer). In the other two cases, we just need to write in the value of 'n1'. */ if(n1) { /* Set the label. */ olabel[*s]=n1; /* If this pixel is a river (can only happen when 'withrivers' is zero), keep it in the loop, because we want the 'indexs' dataset to contain all non-positive (non-labeled) pixels, including rivers. */ if(n1==GAL_LABEL_RIVER) iarray[ ninds++ ] = *s; } else iarray[ ninds++ ] = *s; /* Correct the size of the 'indexs' dataset. */ indexs->size = indexs->dsize[0] = ninds; } while(++s<sf); } /* Clean up. */ free(dinc); } �����������������������������������������������������gnuastro-0.22/lib/list.c����������������������������������������������������������������������������0000644�0001750�0001750�00000073210�14551337306�010657� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions for linked lists. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <assert.h> #include <inttypes.h> #include <gnuastro/list.h> #include <gnuastro/blank.h> #include <gnuastro/pointer.h> #include <gnuastro-internal/checkset.h> /**************************************************************** ***************** String ******************** ****************************************************************/ void gal_list_str_add(gal_list_str_t **list, char *value, int allocate) { gal_list_str_t *newnode; /* If the value is a NULL pointer, don't add to the list. */ if(value==NULL) return; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); if(allocate) gal_checkset_allocate_copy(value, &newnode->v); else newnode->v=value; newnode->next=*list; *list=newnode; } char * gal_list_str_pop(gal_list_str_t **list) { char *out=NULL; gal_list_str_t *tmp; if(*list) { tmp=*list; out=tmp->v; *list=tmp->next; free(tmp); } return out; } size_t gal_list_str_number(gal_list_str_t *list) { size_t num=0; gal_list_str_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) ++num; return num; } gal_list_str_t * gal_list_str_last(gal_list_str_t *list) { if(list) { while(list->next!=NULL) list=list->next; return list; } else return NULL; } void gal_list_str_print(gal_list_str_t *list) { gal_list_str_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("%s\n", tmp->v); } void gal_list_str_reverse(gal_list_str_t **list) { char *thisstring; gal_list_str_t *correctorder=NULL; /* Only do the reversal if there is more than one element. */ if( *list && (*list)->next ) { while(*list!=NULL) { thisstring=gal_list_str_pop(list); gal_list_str_add(&correctorder, thisstring, 0); } *list=correctorder; } } void gal_list_str_free(gal_list_str_t *list, int freevalue) { gal_list_str_t *tmp; while(list!=NULL) { tmp=list->next; if(freevalue) free(list->v); free(list); list=tmp; } } /* Replacement characters for commented space (ASCII code 14 for "Shift out"). These are chosen as non-printable ASCII characters, that user's will not be typing. Inspired from 'gal_options_parse_list_of_strings'. */ #define LIST_COMMENTED_SPACE 14 gal_list_str_t * gal_list_str_extract(char *string) { gal_list_str_t *list=NULL, *tmp; char *c, *d, *cp, *token, *saveptr, delimiters[]=" \t"; /* Make a copy of the input string, remove all commented delimiters (those with a preceding '\'), this was inspired from 'gal_options_parse_list_of_strings'. */ gal_checkset_allocate_copy(string, &cp); for(c=cp; *c!='\0'; c++) if(*c=='\\' && c[1]!='\0') { /* If the next character (after the '\') is a delimiter, we need to replace it with a non-delimiter (and not-typed!) character and shift the whole string back by one character to simplify future steps. */ if(c[1]==' ') { *c=LIST_COMMENTED_SPACE; for(d=c+2; *d!='\0'; ++d) {*(d-1)=*d;} *(d-1)='\0'; } } /* Tokenize the string. */ token=strtok_r(cp, delimiters, &saveptr); gal_list_str_add(&list, token, 1); while(token!=NULL) { token=strtok_r(NULL, delimiters, &saveptr); if(token!=NULL) gal_list_str_add(&list, token, 1); } /* Go over each token and make final corrections: */ for(tmp=list;tmp!=NULL;tmp=tmp->next) { /* Change the temporarily replaced value to a SPACE. */ for(c=tmp->v; *c!='\0'; ++c) if(*c==LIST_COMMENTED_SPACE) *c=' '; /* If the last character is a new-line character, set it to the end of the string. */ if( tmp->v[strlen(tmp->v)-1]=='\n' ) tmp->v[strlen(tmp->v)-1]='\0'; } /* Return the list. */ gal_list_str_reverse(&list); return list; } char * gal_list_str_cat(gal_list_str_t *list, char delimiter) { size_t bsize=0; char *c, *o, *out; gal_list_str_t *tmp; /* If the list is empty, return a NULL pointer. */ if(list==NULL) return NULL; /* Go over each element of the list and count how many characters there are in it (add one for the space with the next). */ for(tmp=list; tmp!=NULL; tmp=tmp->next) { /* Count the characters. If we have a SPACE, we need to add an extra count for the back slash. */ c=tmp->v; do {++bsize; if(*c==delimiter) ++bsize;} while(*(++c)!='\0'); ++bsize; /* For the extra space between characters. */ } /* Allocate the necessary space and write all the strings inside of it, (while also commenting the space characters). */ out=gal_pointer_allocate(GAL_TYPE_STRING, bsize, 0, __func__, "out"); o=out; for(tmp=list; tmp!=NULL; tmp=tmp->next) { c=tmp->v; do {if(*c==delimiter) *o++='\\'; *o++=*c;} while(*(++c)!='\0'); if(tmp->next) *o++=delimiter; } *o='\0'; return out; } /**************************************************************** ***************** int ******************** ****************************************************************/ void gal_list_i32_add(gal_list_i32_t **list, int32_t value) { gal_list_i32_t *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->next=*list; *list=newnode; } int32_t gal_list_i32_pop(gal_list_i32_t **list) { gal_list_i32_t *tmp; int out=GAL_BLANK_INT32; if(*list) { tmp=*list; out=tmp->v; *list=tmp->next; free(tmp); } return out; } size_t gal_list_i32_number(gal_list_i32_t *list) { size_t num=0; gal_list_i32_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) ++num; return num; } gal_list_i32_t * gal_list_i32_last(gal_list_i32_t *list) { if(list) { while(list->next!=NULL) list=list->next; return list; } else return NULL; } void gal_list_i32_print(gal_list_i32_t *list) { gal_list_i32_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("%"PRId32"\n", tmp->v); } void gal_list_i32_reverse(gal_list_i32_t **list) { int thisnum; gal_list_i32_t *correctorder=NULL; if( *list && (*list)->next ) { while(*list!=NULL) { thisnum=gal_list_i32_pop(list); gal_list_i32_add(&correctorder, thisnum); } *list=correctorder; } } int32_t * gal_list_i32_to_array(gal_list_i32_t *list, int reverse, size_t *num) { size_t i; int32_t *out=NULL; gal_list_i32_t *tmp; *num=gal_list_i32_number(list); if(*num) { out=gal_pointer_allocate(GAL_TYPE_SIZE_T, *num, 0, __func__, "out"); i = reverse ? *num-1: 0; if(reverse) for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i--]=tmp->v; else for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i++]=tmp->v; } return out; } void gal_list_i32_free(gal_list_i32_t *list) { gal_list_i32_t *tmp, *ttmp; tmp=list; while(tmp!=NULL) { ttmp=tmp->next; free(tmp); tmp=ttmp; } } /**************************************************************** ***************** size_t ******************** ****************************************************************/ void gal_list_sizet_add(gal_list_sizet_t **list, size_t value) { gal_list_sizet_t *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->next=*list; *list=newnode; } size_t gal_list_sizet_pop(gal_list_sizet_t **list) { gal_list_sizet_t *tmp; size_t out=GAL_BLANK_SIZE_T; if(list) { tmp=*list; out=tmp->v; *list=tmp->next; free(tmp); } return out; } size_t gal_list_sizet_number(gal_list_sizet_t *list) { size_t num=0; gal_list_sizet_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) ++num; return num; } gal_list_sizet_t * gal_list_sizet_last(gal_list_sizet_t *list) { if(list) { while(list->next!=NULL) list=list->next; return list; } else return NULL; } void gal_list_sizet_print(gal_list_sizet_t *list) { gal_list_sizet_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) printf("%zu\n", tmp->v); return; } void gal_list_sizet_reverse(gal_list_sizet_t **list) { size_t thisnum; gal_list_sizet_t *correctorder=NULL; if( *list && (*list)->next ) { while(*list!=NULL) { thisnum=gal_list_sizet_pop(list); gal_list_sizet_add(&correctorder, thisnum); } *list=correctorder; } } size_t * gal_list_sizet_to_array(gal_list_sizet_t *list, int reverse, size_t *num) { size_t i, *out=NULL; gal_list_sizet_t *tmp; *num=gal_list_sizet_number(list); if(*num) { out=gal_pointer_allocate(GAL_TYPE_SIZE_T, *num, 0, __func__, "out"); i = reverse ? *num-1: 0; if(reverse) for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i--]=tmp->v; else for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i++]=tmp->v; } return out; } void gal_list_sizet_free(gal_list_sizet_t *list) { gal_list_sizet_t *tmp, *ttmp; tmp=list; while(tmp!=NULL) { ttmp=tmp->next; free(tmp); tmp=ttmp; } } /**************************************************************** ***************** Float ******************** ****************************************************************/ void gal_list_f32_add(gal_list_f32_t **list, float value) { struct gal_list_f32_t *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->next=*list; *list=newnode; } float gal_list_f32_pop(gal_list_f32_t **list) { float out=NAN; gal_list_f32_t *tmp; if(*list) { tmp=*list; out=tmp->v; *list=tmp->next; free(tmp); } return out; } size_t gal_list_f32_number(gal_list_f32_t *list) { size_t num=0; gal_list_f32_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) ++num; return num; } gal_list_f32_t * gal_list_f32_last(gal_list_f32_t *list) { if(list) { while(list->next!=NULL) list=list->next; return list; } else return NULL; } void gal_list_f32_reverse(gal_list_f32_t **list) { float thisnum; gal_list_f32_t *correctorder=NULL; if( *list && (*list)->next ) { while(*list!=NULL) { thisnum=gal_list_f32_pop(list); gal_list_f32_add(&correctorder, thisnum); } *list=correctorder; } } void gal_list_f32_print(gal_list_f32_t *list) { gal_list_f32_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) printf("%f\n", tmp->v); return; } float * gal_list_f32_to_array(gal_list_f32_t *list, int reverse, size_t *num) { size_t i; float *out=NULL; gal_list_f32_t *tmp; /* Find the number of elements: */ *num=gal_list_f32_number(list); /* If there is actually anything in the list, then allocate the array and fill it in. */ if(*num) { /* Allocate the space: */ out=gal_pointer_allocate(GAL_TYPE_FLOAT32, *num, 0, __func__, "out"); /* Fill in the array. */ i = reverse ? *num-1: 0; if(reverse) for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i--]=tmp->v; else for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i++]=tmp->v; } /* Return the created array. */ return out; } void gal_list_f32_free(gal_list_f32_t *list) { gal_list_f32_t *tmp, *ttmp; tmp=list; while(tmp!=NULL) { ttmp=tmp->next; free(tmp); tmp=ttmp; } } /**************************************************************** ***************** Double ******************** ****************************************************************/ void gal_list_f64_add(gal_list_f64_t **list, double value) { gal_list_f64_t *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->next=*list; *list=newnode; } double gal_list_f64_pop(gal_list_f64_t **list) { double out=NAN; gal_list_f64_t *tmp; if(*list) { tmp=*list; out=tmp->v; *list=tmp->next; free(tmp); } return out; } size_t gal_list_f64_number(gal_list_f64_t *list) { size_t num=0; gal_list_f64_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) ++num; return num; } gal_list_f64_t * gal_list_f64_last(gal_list_f64_t *list) { if(list) { while(list->next!=NULL) list=list->next; return list; } else return NULL; } void gal_list_f64_print(gal_list_f64_t *list) { gal_list_f64_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) printf("%f\n", tmp->v); return; } void gal_list_f64_reverse(gal_list_f64_t **list) { double thisvalue; gal_list_f64_t *correctorder=NULL; /* Only do the reversal if there is more than one element. */ if( *list && (*list)->next ) { while(*list!=NULL) { thisvalue=gal_list_f64_pop(list); gal_list_f64_add(&correctorder, thisvalue); } *list=correctorder; } } double * gal_list_f64_to_array(gal_list_f64_t *list, int reverse, size_t *num) { size_t i; double *out=NULL; gal_list_f64_t *tmp; /* Find the number of elements: */ *num=gal_list_f64_number(list); /* If there is actually anything in the list, then allocate the array and fill it in. */ if(*num) { /* Allocate the space: */ out=gal_pointer_allocate(GAL_TYPE_FLOAT64, *num, 0, __func__, "out"); /* Fill in the array. */ i = reverse ? *num-1: 0; if(reverse) for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i--]=tmp->v; else for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i++]=tmp->v; } /* Return the created array. */ return out; } /* Copy a list of float64 to a 1D dataset of the desired type. */ gal_data_t * gal_list_f64_to_data(gal_list_f64_t *list, uint8_t type, size_t minmapsize, int quietmmap) { double *d; gal_data_t *out; size_t num, one=1; /* In if the list is empty, return a dataset with no elements. */ if(list==NULL) { /* It is not possible to allocate a dataset with a size of 0 along any dimension (in C it's possible, but conceptually it isn't). So, we'll allocate space for one element, then free it. */ out=gal_data_alloc(NULL, type, 1, &one, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); out->size=out->dsize[0]=0; free(out->array); out->array=NULL; return out; } /* Convert the list to an array, put it into a dataset. */ d=gal_list_f64_to_array(list, 0, &num); out=gal_data_alloc(d, GAL_TYPE_FLOAT64, 1, &num, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); /* Copy to desired type and return. */ out=gal_data_copy_to_new_type_free(out, type); return out; } void gal_list_f64_free(gal_list_f64_t *list) { gal_list_f64_t *tmp, *ttmp; tmp=list; while(tmp!=NULL) { ttmp=tmp->next; free(tmp); tmp=ttmp; } } /**************************************************************** ***************** void * ******************** ****************************************************************/ void gal_list_void_add(gal_list_void_t **list, void *value) { gal_list_void_t *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->next=*list; *list=newnode; } void * gal_list_void_pop(gal_list_void_t **list) { void *out=NULL; gal_list_void_t *tmp; if(*list) { tmp=*list; out=tmp->v; *list=tmp->next; free(tmp); } return out; } size_t gal_list_void_number(gal_list_void_t *list) { size_t num=0; gal_list_void_t *tmp; for(tmp=list;tmp!=NULL;tmp=tmp->next) ++num; return num; } gal_list_void_t * gal_list_void_last(gal_list_void_t *list) { if(list) { while(list->next!=NULL) list=list->next; return list; } else return NULL; } void gal_list_void_reverse(gal_list_void_t **list) { void *thisptr; gal_list_void_t *correctorder=NULL; if( *list && (*list)->next ) { while(*list!=NULL) { thisptr=gal_list_void_pop(list); gal_list_void_add(&correctorder, thisptr); } *list=correctorder; } } void gal_list_void_free(gal_list_void_t *list, int freevalue) { gal_list_void_t *tmp=list, *ttmp; while(tmp!=NULL) { if(freevalue) free(tmp->v); ttmp=tmp->next; free(tmp); tmp=ttmp; } } /**************************************************************** **************** Ordered size_t ******************** ****************************************************************/ /* We want to put the nodes in order based on the 'tosort' value of each node. The top element should always have the smallest radius. */ void gal_list_osizet_add(gal_list_osizet_t **list, size_t value, float tosort) { gal_list_osizet_t *newnode, *tmp=*list, *prev=NULL; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->s=tosort; /* *list points to the smallest value in the queue! */ while(tmp!=NULL) { if(tosort<tmp->s) break; /* No need for else, it will only come here if the condition above is not satisfied. */ prev=tmp; tmp=tmp->next; } if(tmp==NULL) /* This is the largest value so far. */ { /* '*list' only changes if it is NULL. */ newnode->next=NULL; if(prev) prev->next=newnode; /* 'prev' is not NULL! */ else *list=newnode; /* Only for initial node. */ } else { if(prev) prev->next=newnode; else *list=newnode; /* 'tosort' is smaller than all. */ newnode->next=tmp; } } /* Note that the popped element is the smallest! */ size_t gal_list_osizet_pop(gal_list_osizet_t **list, float *sortvalue) { size_t value; gal_list_osizet_t *tmp=*list; if(*list) { value=tmp->v; *sortvalue=tmp->s; *list=tmp->next; free(tmp); } else { value=GAL_BLANK_SIZE_T; *sortvalue=NAN; } return value; } /* Add the elements of an gal_list_osll to a gal_list_sll. */ void gal_list_osizet_to_sizet_free(gal_list_osizet_t *in, gal_list_sizet_t **out) { gal_list_osizet_t *tmp; while(in!=NULL) { tmp=in->next; gal_list_sizet_add(out, in->v); free(in); in=tmp; } } /**************************************************************** ****************** Two way, Ordered SLL ******************** ***************** size_t ******************** ****************************************************************/ /* Doubly-linked ordered size_t list can be visualized like this: largest pointer | NULL <-- (v0,s0) <--> (v1,s1) <--> ... (vn,sn) --> NULL | smallest pointer Where s(n)>s(n+1) for all n. */ /* Very similar to Ordered SLL, but now it is two way. */ void gal_list_dosizet_add(gal_list_dosizet_t **largest, gal_list_dosizet_t **smallest, size_t value, float tosort) { gal_list_dosizet_t *newnode, *tmp=*largest; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: allocating new node", __func__); newnode->v=value; newnode->s=tosort; newnode->prev=NULL; while(tmp!=NULL) { if(tosort >= tmp->s) break; /* No need for else, it will only come here if the condition above is not satisfied. */ newnode->prev=tmp; tmp=tmp->next; } if(tmp==NULL) /* This is the smallest value so far. */ { /* '*largest' only changes if it is NULL. */ newnode->next=NULL; *smallest=newnode; if(newnode->prev) /* 'prev' is not NULL! */ newnode->prev->next=newnode; else /* 'prev is NULL, Only first. */ *largest=newnode; } else { if(newnode->prev) { newnode->prev->next->prev=newnode; newnode->prev->next=newnode; } else { (*largest)->prev=newnode; *largest=newnode; /* 'tosort' is larger than all. */ } newnode->next=tmp; } } /* Note that start has to be initialized. */ size_t gal_list_dosizet_pop_smallest(gal_list_dosizet_t **largest, gal_list_dosizet_t **smallest, float *tosort) { size_t value; gal_list_dosizet_t *tmp=*smallest; if(*smallest) { value=tmp->v; *tosort=tmp->s; *smallest=tmp->prev; free(tmp); if(*smallest) (*smallest)->next=NULL; else *largest=NULL; } else { /* If 'smallest' is NULL, 'largest' should also be NULL. */ if(*largest) error(EXIT_FAILURE, 0, "%s: 'largest' and 'smallest' pointers must " "both be non-NULL or both be NULL. However, in this call, " "'smallest' was NULL while 'largest' isn't NULL", __func__); value=GAL_BLANK_SIZE_T; *tosort=NAN; } /*printf("Popped v: %zu, s: %f\n", *value, *tosort);*/ return value; } void gal_list_dosizet_print(gal_list_dosizet_t *largest, gal_list_dosizet_t *smallest) { size_t counter=1; /* We are not counting array elements :-D ! */ while(largest!=NULL) { printf("\t%-5zu (%zu, %.4f) \n", counter++, largest->v, largest->s); largest=largest->next; printf("\t\t\t\t(%zu, %.4f)\n", smallest->v, smallest->s); smallest=smallest->prev; } printf("\n"); } void gal_list_dosizet_to_sizet(gal_list_dosizet_t *in, gal_list_sizet_t **out) { gal_list_dosizet_t *tmp; while(in!=NULL) { tmp=in->next; gal_list_sizet_add(out, in->v); free(in); in=tmp; } } void gal_list_dosizet_free(gal_list_dosizet_t *largest) { gal_list_dosizet_t *tmp; while(largest!=NULL) { tmp=largest->next; free(largest); largest=tmp; } } /*********************************************************************/ /************* Data structure as a linked list ******************/ /*********************************************************************/ /* Add a new data structure to the top of an existing linked list of data structures. Note that if the new node is its self a list, all its nodes will be added to the list. */ void gal_list_data_add(gal_data_t **list, gal_data_t *newnode) { gal_data_t *tmp=newnode, *toadd; /* Check if newnode is itself a list or not. */ if(newnode->next) { /* Go onto the last node in newnode's existing list. */ while(tmp->next) tmp=tmp->next; /* Set the last node as the node to add to the list. */ toadd=tmp; } else /* Its not a list, so just set it to 'toadd'. */ toadd=newnode; /* Set the next element of toadd and update what list points to. */ toadd->next=*list; *list=newnode; } void gal_list_data_add_alloc(gal_data_t **list, void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, int quietmmap, char *name, char *unit, char *comment) { gal_data_t *newnode; /* Put all the input information into a new data structure node. */ newnode=gal_data_alloc(array, type, ndim, dsize, wcs, clear, minmapsize, quietmmap, name, unit, comment); /* Add the new node to the list. */ gal_list_data_add(list, newnode); } gal_data_t * gal_list_data_pop(gal_data_t **list) { gal_data_t *out=NULL; /* If list is not empty. */ if(*list) { /* Keep the top pointer. */ out=*list; /* Move the list pointer to the next node. */ *list=out->next; /* Set the next poitner of the out pointer to NULL so it isn't interpretted as a list any more. */ out->next=NULL; } return out; } /* Remove one node from the list. */ void gal_list_data_remove(gal_data_t **list, gal_data_t *node) { int found=0; gal_data_t *tmp, *prev=*list; /* If this is an empty list, just ignore it. */ if(*list==NULL || node==NULL) return; /* If the requested node is first. */ if(node==*list) { found=1; *list=(*list)->next; } else { /* Parse the list, while keeping track of the previous. */ for(tmp=(*list)->next;tmp!=NULL;tmp=tmp->next) { /* This is the desired node, remove it from the list. */ if(tmp==node) { found=1; prev->next=tmp->next; break; } /* Set the current pointer to the "prev" of the next. */ prev=tmp; } } /* If 'node' has been identified, fully detach it from the list. */ if(found) node->next=NULL; } /* From the input list of datasets, return the first one that has a name equal to the input string 'name'. */ gal_data_t * gal_list_data_select_by_name(gal_data_t *list, char *name) { gal_data_t *tmp; /* Parse the list and return the desired element. */ for(tmp=list;tmp!=NULL;tmp=tmp->next) if(tmp->name && strcmp(tmp->name,name)==0 ) return tmp; /* If control reaches here, no such name could be found. */ return NULL; } /* Select a dataset from a list from its idenfier (name or counter in a string). */ gal_data_t * gal_list_data_select_by_id(gal_data_t *table, char *idstr, size_t *index) { char *tailptr; gal_data_t *tmp, *out=NULL; size_t i, oind=GAL_BLANK_SIZE_T, colind; /* If given string identifier ('idstr') is a number, then 'strtol' will set 'tailptr' to '\0'. Otherwise, we will need to check the existing column names in the table. */ colind=strtol(idstr, &tailptr, 10); if(tailptr[0]=='\0') /* ID is a number. */ { /* Parse the list and return the desired column. Note that the column counter in the ID is assumed to be from 1, but the output "index" should start from 0. If the requested counter is larger than the input's number of columns, the output will automatically be NULL (it has been initialized). */ i=0; for(tmp=table;tmp!=NULL;tmp=tmp->next) { ++i; if(i==colind) { oind=i-1; out=tmp; break;} } } else /* ID is string; parse the names in the table. */ { /* Parse the table and if the name exists, return it. */ colind=i=0; for(tmp=table;tmp!=NULL;tmp=tmp->next) { ++i; if( !strcmp(idstr, tmp->name) ) { oind=i-1; out=tmp; break; } } } /* For a check. printf("%s: %s is column index %zu\n", __func__, tmp->name, oind); */ /* Fill the 'index' poiter (if it is not NULL!) and return 'out'. */ if(index) *index=oind; return out; } void gal_list_data_reverse(gal_data_t **list) { gal_data_t *popped, *in=*list, *reversed=NULL; /* Only do the job if the list is not NULL and has more than one node. */ if( in && in->next ) { while(in!=NULL) { popped=gal_list_data_pop(&in); gal_list_data_add(&reversed, popped); } *list=reversed; } } gal_data_t ** gal_list_data_to_array_ptr(gal_data_t *list, size_t *num) { size_t i, n; gal_data_t *tmp, **out; /* Count how many columns are necessary. */ n=*num=gal_list_data_number(list); /* Allocate space for the array. */ errno=0; out=malloc(n * sizeof *out); if(out==NULL) error(EXIT_FAILURE, 0, "%s: couldn't allocate %zu bytes", __func__, n * sizeof *out); /* Fill up the array with the pointers and return. */ i=0; for(tmp=list;tmp!=NULL;tmp=tmp->next) out[i++]=tmp; return out; } size_t gal_list_data_number(gal_data_t *list) { size_t num=0; while(list!=NULL) { ++num; list=list->next; } return num; } gal_data_t * gal_list_data_last(gal_data_t *list) { if(list) { while(list->next!=NULL) list=list->next; return list; } else return NULL; } void gal_list_data_free(gal_data_t *list) { struct gal_data_t *tmp; while(list!=NULL) { tmp=list->next; gal_data_free(list); list=tmp; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/match.c���������������������������������������������������������������������������0000644�0001750�0001750�00000131336�14551337306�011004� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* match -- Functions to match catalogs and WCS. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Sachin Kumar Singh <sachinkumarsingh092@gmail.com> Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <float.h> #include <stdlib.h> #include <gsl/gsl_sort.h> #include <gnuastro/box.h> #include <gnuastro/list.h> #include <gnuastro/blank.h> #include <gnuastro/binary.h> #include <gnuastro/kdtree.h> #include <gnuastro/pointer.h> #include <gnuastro/threads.h> #include <gnuastro/statistics.h> #include <gnuastro/permutation.h> /**********************************************************************/ /***************** Sort-Based match custom list *******************/ /**********************************************************************/ struct match_sfll { float f; size_t v; struct match_sfll *next; }; static void match_add_to_sfll(struct match_sfll **list, size_t value, float fvalue) { struct match_sfll *newnode; errno=0; newnode=malloc(sizeof *newnode); if(newnode==NULL) error(EXIT_FAILURE, errno, "%s: new node couldn't be allocated", __func__); newnode->v=value; newnode->f=fvalue; newnode->next=*list; *list=newnode; } static void match_pop_from_sfll(struct match_sfll **list, size_t *value, float *fvalue) { struct match_sfll *tmp; tmp=*list; *value=tmp->v; *fvalue=tmp->f; *list=tmp->next; free(tmp); } /**********************************************************************/ /******** Generic functions (for any type of matching) ********/ /**********************************************************************/ /* Preparations for the desired matching aperture. */ static void match_aperture_prepare(gal_data_t *A, gal_data_t *B, double *aperture, size_t ndim, double **a, double **b, double *dist, double *c, double *s, int *iscircle) { double semiaxes[3]; /* These two are common for all dimensions. */ a[0]=A->array; b[0]=B->array; /* See if the aperture is a circle or not. */ switch(ndim) { case 1: *iscircle = 0; /* Irrelevant for 1D. */ dist[0]=aperture[0]; break; case 2: /* Set the main coordinate arrays. */ a[1]=A->next->array; b[1]=B->next->array; /* See if the aperture is circular. */ if( ( *iscircle=(aperture[1]==1)?1:0 )==0 ) { /* Using the box that encloses the aperture, calculate the distance along each axis. */ gal_box_bound_ellipse_extent(aperture[0], aperture[0]*aperture[1], aperture[2], dist); /* Calculate the sin and cos of the given ellipse if necessary for ease of processing later. */ c[0] = cos( aperture[2] * M_PI/180.0 ); s[0] = sin( aperture[2] * M_PI/180.0 ); } else dist[0]=dist[1]=aperture[0]; break; case 3: /* Set the main coordinate arrays. */ a[1]=A->next->array; b[1]=B->next->array; a[2]=A->next->next->array; b[2]=B->next->next->array; if( (*iscircle=(aperture[1]==1 && aperture[2]==1)?1:0)==0 ) { /* Using the box that encloses the aperture, calculate the distance along each axis. */ semiaxes[0]=aperture[0]; semiaxes[1]=aperture[1]*aperture[0]; semiaxes[2]=aperture[2]*aperture[0]; gal_box_bound_ellipsoid_extent(semiaxes, &aperture[3], dist); /* Calculate the sin and cos of the given ellipse if necessary for ease of processing later. */ c[0] = cos( aperture[3] * M_PI/180.0 ); s[0] = sin( aperture[3] * M_PI/180.0 ); c[1] = cos( aperture[4] * M_PI/180.0 ); s[1] = sin( aperture[4] * M_PI/180.0 ); c[2] = cos( aperture[5] * M_PI/180.0 ); s[2] = sin( aperture[5] * M_PI/180.0 ); } else dist[0]=dist[1]=dist[2]=aperture[0]; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The value %zu is not recognized for ndim", __func__, PACKAGE_BUGREPORT, ndim); } } static double match_elliptical_r_2d(double d1, double d2, double *ellipse, double c, double s) { double Xr = d1 * ( c ) + d2 * ( s ); double Yr = d1 * ( -1.0f*s ) + d2 * ( c ); return sqrt( Xr*Xr + Yr*Yr/ellipse[1]/ellipse[1] ); } static double match_elliptical_r_3d(double *delta, double *ellipsoid, double *c, double *s) { double Xr, Yr, Zr; double c1=c[0], s1=s[0]; double c2=c[1], s2=s[1]; double c3=c[2], s3=s[2]; double q1=ellipsoid[1], q2=ellipsoid[2]; double x=delta[0], y=delta[1], z=delta[2]; Xr = x*( c3*c1 - s3*c2*s1 ) + y*( c3*s1 + s3*c2*c1) + z*( s3*s2 ); Yr = x*( -1*s3*c1 - c3*c2*s1 ) + y*(-1*s3*s1 + c3*c2*c1) + z*( c3*s2 ); Zr = x*( s1*s2 ) + y*(-1*s2*c1 ) + z*( c2 ); return sqrt( Xr*Xr + Yr*Yr/q1/q1 + Zr*Zr/q2/q2 ); } static double match_distance(double *delta, int iscircle, size_t ndim, double *aperture, double *c, double *s) { /* For more than one dimension, we'll need to calculate the distance from the deltas (differences) in each dimension. */ switch(ndim) { case 1: return fabs(delta[0]); case 2: return ( iscircle ? sqrt( delta[0]*delta[0] + delta[1]*delta[1] ) : match_elliptical_r_2d(delta[0], delta[1], aperture, c[0], s[0]) ); case 3: return ( iscircle ? sqrt( delta[0]*delta[0] + delta[1]*delta[1] + delta[2]*delta[2] ) : match_elliptical_r_3d(delta, aperture, c, s) ); default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The value %zu is not recognized for ndim", __func__, PACKAGE_BUGREPORT, ndim); } /* Control should not reach this point. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); return NAN; } /* In the 'match_XXXX_second_in_first' functions, we made an array of lists, here we want to reverse that list to fix the second two issues that were discussed there. */ void match_rearrange(gal_data_t *A, gal_data_t *B, struct match_sfll **bina) { size_t bi; float *fp, *fpf, r, *ainb; size_t ai, ar=A->size, br=B->size; /* Allocate the space for 'ainb' and initialize it to NaN (since zero is meaningful in this context; both for indexs and also for floats). This is a two column array that will keep the distance and index of the closest element in catalog 'a' for each element in catalog b. */ errno=0; ainb=calloc(2*br, sizeof *ainb); if(ainb==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for 'ainb'", __func__, br*sizeof *ainb); fpf=(fp=ainb)+2*br; do *fp++=NAN; while(fp<fpf); /* Go over each object in catalog 'a' and re-distribute the near objects, to find which ones in catalog 'a' are within the search radius of catalog b in a sorted manner. Note that we only need the 'ai' with the minimum distance to 'bi', the rest are junk. */ for( ai=0; ai<ar; ++ai ) while( bina[ai] ) /* As long as its not NULL. */ { /* Pop out a 'bi' and its distance to this 'ai' from 'bina' (this is the nearest B item to this A element). */ match_pop_from_sfll(&bina[ai], &bi, &r); /* If nothing has been put here (the 'isnan' condition below is true), or something exists (the isnan is false, and so it will check the second OR test) with a distance that is larger than this distance then just put this value in. */ if( isnan(ainb[bi*2]) || r<ainb[bi*2+1] ) { ainb[bi*2 ] = ai; ainb[bi*2+1] = r; } } /* For checking the status of affairs uncomment this block { printf("\n\nFilled ainb:\n"); for(bi=0;bi<br;++bi) if( !isnan(ainb[bi*2]) ) printf("bi: %lu: %.0f, %f\n", bi, ainb[bi*2], ainb[bi*2+1]); } */ /* Re-fill the bina array, but this time only with the 'bi' that is closest to it. Note that bina was fully set to NULL after popping all the elements in the loop above. */ for( bi=0; bi<br; ++bi ) if( !isnan(ainb[bi*2]) ) { /* Just to keep the same terminology as before and easier reading. */ r=ainb[bi*2+1]; ai=(size_t)(ainb[bi*2]); /* Check if this is the first time we are associating a 'bi' to this 'ai'. If so, then just allocate a single element list. Otherwise, see if the distance is closer or not. If so, replace the values in the single node. */ if( bina[ai] ) { /* If the distance of this record is smaller than the existing entry, then replace the values. */ if( r < bina[ai]->f ) { bina[ai]->f=r; bina[ai]->v=bi; } } else match_add_to_sfll(&bina[ai], bi, r); } /* For checking the status of affairs uncomment this block { size_t bi, counter=0; double *a[2]={A->array, A->next->array}; double *b[2]={B->array, B->next->array}; printf("\n\nRearranged bina:\n"); for(ai=0;ai<ar;++ai) if(bina[ai]) { ++counter; bi=bina[ai]->v; printf("A_%lu (%.8f, %.8f) <--> B_%lu (%.8f, %.8f):\n\t%f\n", ai, a[0][ai], a[1][ai], bi, b[0][bi], b[1][bi], bina[ai]->f); } printf("\n-----------\nMatched: %zu\n", counter); } exit(0); */ /* Clean up. */ free(ainb); } /* The matching has been done, write the output. */ static gal_data_t * match_output(gal_data_t *A, gal_data_t *B, size_t *A_perm, size_t *B_perm, struct match_sfll **bina, size_t minmapsize, int quietmmap) { float r; double *rval; gal_data_t *out; uint8_t *Bmatched; size_t ai, bi, nummatched=0; size_t *aind, *bind, match_i, nomatch_i; /* Find how many matches there were in total. */ for(ai=0;ai<A->size;++ai) if(bina[ai]) ++nummatched; /* If there aren't any matches, return NULL. */ if(nummatched==0) return NULL; /* Allocate the output list. */ out=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, &A->size, NULL, 0, minmapsize, quietmmap, "CAT1_ROW", "counter", "Row index in first catalog (counting from 0)."); out->next=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, &B->size, NULL, 0, minmapsize, quietmmap, "CAT2_ROW", "counter", "Row index in second catalog (counting " "from 0)."); out->next->next=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &nummatched, NULL, 0, minmapsize, quietmmap, "MATCH_DIST", NULL, "Distance between the match."); /* Allocate the 'Bmatched' array which is a flag for which rows of the second catalog were matched. The columns that had a match will get a value of one while we are parsing them below. */ Bmatched=gal_pointer_allocate(GAL_TYPE_UINT8, B->size, 1, __func__, "Bmatched"); /* Initialize the indexs. We want the first 'nummatched' indexs in both outputs to be the matching rows. The non-matched rows should start to be indexed after the matched ones. So the first non-matched index is at the index 'nummatched'. */ match_i = 0; nomatch_i = nummatched; /* Fill in the output arrays. */ aind = out->array; bind = out->next->array; rval = out->next->next->array; for(ai=0;ai<A->size;++ai) { /* A match was found. */ if(bina[ai]) { /* Note that the permutation keeps the original indexs. */ match_pop_from_sfll(&bina[ai], &bi, &r); rval[ match_i ] = r; aind[ match_i ] = A_perm ? A_perm[ai] : ai; bind[ match_i++ ] = B_perm ? B_perm[bi] : bi; /* Set a '1' for this object in the second catalog. This will later be used to find which rows didn't match to fill in the output. */ Bmatched[ B_perm ? B_perm[bi] : bi ] = 1; } /* No match found. At this stage, we can only fill the indexs of the first input. The second input needs to be matched afterwards. */ else aind[ nomatch_i++ ] = A_perm ? A_perm[ai] : ai; } /* Complete the second input's permutation. */ nomatch_i=nummatched; for(bi=0;bi<B->size;++bi) if( Bmatched[bi] == 0 ) bind[ nomatch_i++ ] = bi; /* For a check printf("\nFirst input's permutation (starred items not matched):\n"); for(ai=0;ai<A->size;++ai) printf("%s%zu\n", ai<nummatched?" ":"* ", aind[ai]+1); printf("\nSecond input's permutation (starred items not matched):\n"); for(bi=0;bi<B->size;++bi) printf("%s%zu\n", bi<nummatched?" ":"* ", bind[bi]+1); exit(0); */ /* Clean up and return. */ free(Bmatched); return out; } /********************************************************************/ /************* Sort-Based matching *************/ /********************************************************************/ /* Since these checks are repetative, its easier to have a separate function for both inputs. */ static void match_sort_based_sanity_check_columns(gal_data_t *coord, char *info, int inplace, int *allf64) { gal_data_t *tmp; for(tmp=coord; tmp!=NULL; tmp=tmp->next) { if(tmp->type!=GAL_TYPE_FLOAT64) { if(inplace) error(EXIT_FAILURE, 0, "%s: when 'inplace' is activated, " "the input coordinates must have 'float64' type. At " "least one node of the %s list has type of '%s'", __func__, info, gal_type_name(tmp->type, 1)); else *allf64=0; } if(tmp->ndim!=1) error(EXIT_FAILURE, 0, "%s: each input coordinate column must " "have a single dimension (be a single column). Atleast " "one node of the %s list has %zu dimensions", __func__, info, tmp->ndim); if(tmp->size!=coord->size) error(EXIT_FAILURE, 0, "%s: the nodes of each list of " "coordinates must have the same number of elements. " "At least one node of the %s list has %zu elements " "while the first has %zu elements", __func__, info, tmp->size, coord->size); } } /* To keep the main function clean, we'll do the sanity checks here. */ static void match_sort_based_sanity_check(gal_data_t *coord1, gal_data_t *coord2, double *aperture, int inplace, int *allf64) { size_t ncoord1=gal_list_data_number(coord1); /* Make sure both lists have the same number of datasets. NOTE: they don't need to have the same number of elements. */ if( ncoord1!=gal_list_data_number(coord2) ) error(EXIT_FAILURE, 0, "%s: the two inputs have different " "numbers of datasets (%zu and %zu respectively)", __func__, ncoord1, gal_list_data_number(coord2)); /* This function currently only works for less than 4 dimensions. */ if(ncoord1>3) error(EXIT_FAILURE, 0, "%s: %zu dimension matching requested, " "this function currently only matches datasets with a " "maximum of 3 dimensions", __func__, ncoord1); /* Check the column properties. */ match_sort_based_sanity_check_columns(coord1, "first", inplace, allf64); match_sort_based_sanity_check_columns(coord2, "second", inplace, allf64); /* Check the aperture values. */ if(aperture[0]<=0) error(EXIT_FAILURE, 0, "%s: the first value in the aperture (%g) " "cannot be zero or negative", __func__, aperture[0]); switch(ncoord1) { case 1: /* We don't need any checks in a 1D match. */ break; case 2: if( (aperture[1]<=0 || aperture[1]>1)) error(EXIT_FAILURE, 0, "%s: the second value in the aperture " "(%g) is the axis ratio, so it must be larger than zero " "and less than 1", __func__, aperture[1]); break; case 3: if(aperture[1]<=0 || aperture[1]>1 || aperture[2]<=0 || aperture[2]>1) error(EXIT_FAILURE, 0, "%s: at least one of the second or " "third values in the aperture (%g and %g respectively) " "is smaller than zero or larger than one. In a 3D match, " "these are the axis ratios, so they must be larger than " "zero and less than 1", __func__, aperture[1], aperture[2]); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the issue. The value %zu not recognized for 'ndim'", __func__, PACKAGE_BUGREPORT, ncoord1); } } /* To keep things clean, the sorting of each input array will be done in this function. */ static size_t * match_sort_based_prepare_sort(gal_data_t *coords, size_t minmapsize) { size_t i; double *darr; gal_data_t *tmp; size_t *permutation=gal_pointer_allocate(GAL_TYPE_SIZE_T, coords->size, 0, __func__, "permutation"); /* Unfortunately 'gsl_sort_index' doesn't account for NaN elements. So we need to set them to the maximum possible floating point value. */ if( gal_blank_present(coords, 1) ) { darr=coords->array; for(i=0;i<coords->size;++i) if( isnan(darr[i]) ) darr[i]=FLT_MAX; } /* Get the permutation necessary to sort all the columns (based on the first column). */ gsl_sort_index(permutation, coords->array, 1, coords->size); /* For a check. if(coords->size>1) for(size_t i=0; i<coords->size; ++i) printf("%zu\n", permutation[i]); */ /* Sort all the coordinates. */ for(tmp=coords; tmp!=NULL; tmp=tmp->next) gal_permutation_apply(tmp, permutation); /* For a check. if(coords->size>1) { for(i=0;i<coords->size;++i) { for(tmp=coords; tmp!=NULL; tmp=tmp->next) { printf("%f ", ((double *)(tmp->array))[i]); } printf("\n"); } exit(0); } */ /* Return the permutation. */ return permutation; } /* Do the preparations for matching of coordinates. */ static void match_sort_based_prepare(gal_data_t *coord1, gal_data_t *coord2, int sorted_by_first, int inplace, int allf64, gal_data_t **A_out, gal_data_t **B_out, size_t **A_perm, size_t **B_perm, size_t minmapsize) { gal_data_t *c, *tmp, *A=NULL, *B=NULL; /* Sort the datasets if they aren't sorted. If the dataset is already sorted, then 'inplace' is irrelevant. */ if(sorted_by_first && allf64) { *A_out=coord1; *B_out=coord2; } else { /* Allocating a new list is only necessary when 'inplace==0' or all the columns are double. */ if( inplace && allf64 ) { *A_out=coord1; *B_out=coord2; } else { /* Copy the first list. */ for(tmp=coord1; tmp!=NULL; tmp=tmp->next) { c=gal_data_copy(tmp); c->next=NULL; gal_list_data_add(&A, c); } /* Copy the second list. */ for(tmp=coord2; tmp!=NULL; tmp=tmp->next) { c=gal_data_copy(tmp); c->next=NULL; gal_list_data_add(&B, c); } /* Reverse both lists: the copying process reversed the order. */ gal_list_data_reverse(&A); gal_list_data_reverse(&B); /* Set the output pointers. */ *A_out=A; *B_out=B; } /* Sort each dataset by the first coordinate. */ *A_perm = match_sort_based_prepare_sort(*A_out, minmapsize); *B_perm = match_sort_based_prepare_sort(*B_out, minmapsize); } } /* Go through both catalogs and find which records/rows in the second catalog (catalog b) are within the acceptable distance of each record in the first (a). */ static void match_sort_based_second_in_first(gal_data_t *A, gal_data_t *B, double *aperture, struct match_sfll **bina) { /* To keep things easy to read, all variables related to catalog 1 start with an 'a' and things related to catalog 2 are marked with a 'b'. The redundant variables (those that equal a previous value) are only defined to make it easy to read the code.*/ int iscircle=0; size_t i, ar=A->size, br=B->size; size_t ai, bi, blow=0, prevblow=0; size_t ndim=gal_list_data_number(A); double r, c[3]={NAN, NAN, NAN}, s[3]={NAN, NAN, NAN}; double dist[3]={NAN, NAN, NAN}, delta[3]={NAN, NAN, NAN}; double *a[3]={NULL, NULL, NULL}, *b[3]={NULL, NULL, NULL}; /* Necessary preperations. */ match_aperture_prepare(A, B, aperture, ndim, a, b, dist, c, s, &iscircle); /* For each row/record of catalog 'a', make a list of the nearest records in catalog b within the maximum distance. Note that both catalogs are sorted by their first axis coordinate.*/ for(ai=0;ai<ar;++ai) if( !isnan(a[0][ai]) && blow<br) { /* Initialize 'bina'. */ bina[ai]=NULL; /* Find the first (lowest first axis value) row/record in catalog 'b' that is within the search radius for this record of catalog 'a'. 'blow' is the index of the first element to start searching in the catalog 'b' for a match to 'a[][ai]' (the record in catalog a that is currently being searched). 'blow' is only based on the first coordinate, not the second. Both catalogs are sorted by their first coordinate, so the 'blow' to search for the next record in catalog 'a' will be larger or equal to that of the previous catalog 'a' record. To account for possibly large distances between the records, we do a search here to change 'blow' if necessary before doing further searching.*/ for( blow=prevblow; blow<br && b[0][blow] < a[0][ai]-dist[0]; ++blow) { /* This can be blank, the 'for' does all we need :-). */ } /* 'blow' is now found for this 'ai' and will be used unchanged to the end of the loop. So keep its value to help the search for the next entry in catalog 'a'. */ prevblow=blow; /* Go through catalog 'b' (starting at 'blow') with a first axis value smaller than the maximum acceptable range for 'si'. */ for( bi=blow; bi<br && b[0][bi] <= a[0][ai] + dist[0]; ++bi ) { /* Only consider records with a second axis value in the correct range, note that unlike the first axis, the second axis is no longer sorted. so we have to do both lower and higher limit checks for each item. Positions can have an accuracy to a much higher order of magnitude than the search radius. Therefore, it is meaning-less to sort the second axis (after having sorted the first). In other words, very rarely can two first axis coordinates have EXACTLY the same floating point value as each other to easily define an independent sorting in the second axis. */ if( ndim<2 || ( b[1][bi] >= a[1][ai]-dist[1] && b[1][bi] <= a[1][ai]+dist[1] ) ) { /* Now, 'bi' is within the rectangular range of 'ai'. But this is not enough to consider the two objects matched for the following reasons: 1) Until now we have avoided calculations other than larger or smaller on double precision floating point variables for efficiency. So the 'bi' is within a square of side 'dist[0]*dist[1]' around 'ai' (not within a fixed radius). 2) Other objects in the 'b' catalog may be closer to 'ai' than this 'bi'. 3) The closest 'bi' to 'ai' might be closer to another catalog 'a' record. To address these problems, we will use a linked list to keep the indexes of the 'b's near 'ai', along with their distance. We only add the 'bi's to this list that are within the acceptable distance. Since we are dealing with much fewer objects at this stage, it is justified to do complex mathematical operations like square root and multiplication. This fixes the first problem. The next two problems will be solved with the list after parsing of the whole catalog is complete.*/ if( ndim<3 || ( b[2][bi] >= a[2][ai]-dist[2] && b[2][bi] <= a[2][ai]+dist[2] ) ) { for(i=0;i<ndim;++i) delta[i]=b[i][bi]-a[i][ai]; r=match_distance(delta, iscircle, ndim, aperture, c, s); if(r<aperture[0]) match_add_to_sfll(&bina[ai], bi, r); } } } /* If there was no objects within the acceptable distance, then the linked list pointer will be NULL, so go on to the next 'ai'. */ if(bina[ai]==NULL) continue; /* For checking the status of affairs uncomment this block { struct match_sfll *tmp; printf("\n\nai: %lu:\n", ai); printf("ax: %f (%f -- %f)\n", a[0][ai], a[0][ai]-dist[0], a[0][ai]+dist[0]); printf("ay: %f (%f -- %f)\n", a[1][ai], a[1][ai]-dist[1], a[1][ai]+dist[1]); for(tmp=bina[ai];tmp!=NULL;tmp=tmp->next) printf("%lu: %f\n", tmp->v, tmp->f); } */ } } /* Match two positions: the two inputs ('coord1' and 'coord2') should be lists of coordinates (each is a list of datasets). To speed up the search, this function will sort the inputs by their first column. If both are already sorted, give a non-zero value to 'sorted_by_first'. When sorting is necessary and 'inplace' is non-zero, the actual inputs will be sorted. Otherwise, an internal copy of the inputs will be made which will be used (sorted) and later freed. Therefore when 'inplace==0', the input's won't be changed. IMPORTANT NOTE: the output permutations will correspond to the initial inputs. Therefore, even when 'inplace' is non-zero (and this function changes the inputs' order), the output permutation will correspond to original inputs. The output is a list of 'gal_data_t's with the following columns: Node 1: First catalog index (counting from zero). Node 2: Second catalog index (counting from zero). Node 3: Distance between the match. */ gal_data_t * gal_match_sort_based(gal_data_t *coord1, gal_data_t *coord2, double *aperture, int sorted_by_first, int inplace, size_t minmapsize, int quietmmap, size_t *nummatched) { int allf64=1; gal_data_t *A, *B, *out; size_t *A_perm=NULL, *B_perm=NULL; struct match_sfll **bina; /* Do a small sanity check and make the preparations. After this point, we'll call the two arrays 'a' and 'b'.*/ match_sort_based_sanity_check(coord1, coord2, aperture, inplace, &allf64); match_sort_based_prepare(coord1, coord2, sorted_by_first, inplace, allf64, &A, &B, &A_perm, &B_perm, minmapsize); /* Allocate the 'bina' array (an array of lists). Let's call the first catalog 'a' and the second 'b'. This array has 'a->size' elements (pointers) and for each, it keeps a list of 'b' elements that are nearest to it. */ errno=0; bina=calloc(A->size, sizeof *bina); if(bina==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for 'bina'", __func__, A->size*sizeof *bina); /* All records in 'b' that match each 'a' (possibly duplicate). */ match_sort_based_second_in_first(A, B, aperture, bina); /* Two re-arrangings will fix the issue. */ match_rearrange(A, B, bina); /* The match is done, write the output. */ out=match_output(A, B, A_perm, B_perm, bina, minmapsize, quietmmap); /* Clean up. */ free(bina); if(A!=coord1) { gal_list_data_free(A); gal_list_data_free(B); } if(A_perm) free(A_perm); if(B_perm) free(B_perm); /* Set 'nummatched' and return output. */ *nummatched = out ? out->next->next->size : 0; return out; } /********************************************************************/ /************* k-d tree matching *************/ /********************************************************************/ struct match_kdtree_params { /* Input arguments. */ gal_data_t *A; /* 1st coordinate list of 'gal_data_t's */ gal_data_t *B; /* 2nd coordinate list of 'gal_data_t's */ size_t ndim; /* The number of dimensions. */ double *aperture; /* Acceptable aperture for match. */ size_t kdtree_root; /* Index (counting from 0) of root. */ gal_data_t *A_kdtree; /* k-d tree of first coordinate. */ /* Internal parameters for easy aperture checking. For example there is no need to calculate the fixed 'cos()' and 'sin()' functions every time. So we calculate them once and store the results here to just use their values for every check. */ int iscircle; /* If the aperture is circular. */ double c[3]; /* Fixed cos(), for elliptical dist. */ double s[3]; /* Fixed sin(), for elliptical dist. */ /* Internal items. */ double *a[3]; /* Direct pointers to column arrays. */ double *b[3]; /* Direct pointers to column arrays. */ struct match_sfll **bina; /* Second cat. items in first. */ gal_data_t *Aexist; /* If any element of A exists in bins. */ double *Abinwidth; /* Width of bins along each dimension. */ double *Amin; /* Minimum value of A along each dim. */ double *Amax; /* Maximum value of A along each dim. */ }; /* Find the "coverage" of A along each dimension to help in rejecting non-matches without even calling the k-d tree function. The 'MATCH_KDTREE_COVERAGE_MAXBINS' is currently just a place-holder to get the other parts of the algorithm going. But most probably there is a way to optimally select the maximum number automatically. */ #define MATCH_KDTREE_COVERAGE_MAXBINS 10000 static void match_kdtree_A_coverage(struct match_kdtree_params *p) { double *d, min, max; size_t *s, *sf, dim, two=2, numbins; gal_data_t *tmp, *stat, *hist, *range=NULL, *bins=NULL; /* Allocate the space to keep the range of first input dimensions. */ p->Amin=gal_pointer_allocate(GAL_TYPE_FLOAT64, p->ndim, 0, __func__, "p->Amin"); p->Amax=gal_pointer_allocate(GAL_TYPE_FLOAT64, p->ndim, 0, __func__, "p->Amax"); p->Abinwidth=gal_pointer_allocate(GAL_TYPE_FLOAT64, p->ndim, 0, __func__, "p->Abinwidth"); /* Set the coverage along each dimension. */ dim=0; p->Aexist=NULL; for(tmp=p->A; tmp!=NULL; tmp=tmp->next) { /* Find the number of bins based on the range and aperture size. */ stat=gal_statistics_minimum(tmp); min=((double *)(stat->array))[0]; gal_data_free(stat); stat=gal_statistics_maximum(tmp); max=((double *)(stat->array))[0]; gal_data_free(stat); /* Set the generic constants. */ p->Amin[dim] = min - p->aperture[0]; p->Amax[dim] = max + p->aperture[0]; numbins=(p->Amax[dim] - p->Amin[dim])/p->aperture[0]; if(numbins>MATCH_KDTREE_COVERAGE_MAXBINS) numbins=MATCH_KDTREE_COVERAGE_MAXBINS; if(numbins==0) numbins=1; /*************************/ //numbins=1; /*************************/ /* Generate the 'Aexist' list for this dimension. Note that if we have a single bin in this dimension, we can just set everything automatically. */ if(numbins==1) { /* We only have one bin, so set the width and a single-element histogram. */ p->Abinwidth[dim] = p->Amax[dim] - p->Amin[dim]; hist=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &numbins, NULL, 0, -1, 1, NULL, NULL, NULL); ((uint8_t *)(hist->array))[0]=1; } else { /* Set the 'range' for the bins. */ range=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &two, NULL, 0, -1, 1, NULL, NULL, NULL); d=range->array; d[0]=p->Amin[dim]; d[1]=p->Amax[dim]; /* Generate the histogram of elements in this dimension. */ bins=gal_statistics_regular_bins(tmp, range, numbins, NAN); hist=gal_statistics_histogram(tmp, bins, 0, 0); /* Set all histograms with atleast one element to 1 and convert it to 8-bit unsigned integer. */ sf = (s=hist->array) + hist->size; do *s=*s>0; while(++s<sf); hist=gal_data_copy_to_new_type_free(hist, GAL_TYPE_UINT8); /* Dilate the binary histogram to avoid bin-edge-effect (missing a match because the two points are on opposite sides of the bin boundary). Note that we know that the bins are equal/larger than ther user's given aperture and that these bins are only for rejecting points before the k-d tree (they aren't used within the k-d tree matching). */ gal_binary_dilate(hist, 1, 1, 1); /* Set the general bin properties along this dimension. */ d=bins->array; p->Abinwidth[dim] = d[1]-d[0]; p->Amin[dim] = d[ 0 ] - p->Abinwidth[dim]/2; p->Amax[dim] = d[ bins->size-1 ] + p->Abinwidth[dim]/2; } /* For a check. { size_t i; double *d; uint8_t *u=hist->array; printf("\ndim: %zu\n", dim); printf("min: %g\n", p->Amin[dim]); printf("max: %g\n", p->Amax[dim]); printf("binwidth: %g\n", p->Abinwidth[dim]); printf("----------------\n"); if(bins) { d=bins->array; for(i=0;i<bins->size;++i) printf("%zu: %-15.8f%-15.8f%u\n", i, d[i]-p->Abinwidth[dim]/2, d[i]+p->Abinwidth[dim]/2, u[i]); } else printf("0: %-15.8f%-15.8f%u\n", p->Amin[dim], p->Amax[dim], u[0]); printf("----------------\n"); } */ /* Add the histogram to the list and increment the dimensionality. */ gal_list_data_add(&p->Aexist, hist); ++dim; /* Clean up (these are done here in case the 'For a check' is uncommented, and we want to debug things). */ if(bins) { gal_data_free(bins); bins=NULL; } if(range) { gal_data_free(range); range=NULL; } } //printf("%s: Good!\n", __func__); exit(0); /* Reverse the list to be in the proper dimensional order. */ gal_list_data_reverse(&p->Aexist); } static void match_kdtree_sanity_check(struct match_kdtree_params *p) { gal_data_t *tmp; /* Make sure all coordinates and the k-d tree have the same number of rows. */ p->ndim=gal_list_data_number(p->A); if( p->ndim != gal_list_data_number(p->B) ) error(EXIT_FAILURE, 0, "%s: the 'coord1' and 'coord2' arguments " "should have the same number of nodes/columns (elements " "in a simply linked list). But they each respectively " "have %zu, %zu and %zu nodes/columns", __func__, p->ndim, gal_list_data_number(p->B), gal_list_data_number(p->A_kdtree)); /* Make sure that the k-d tree only has two columns. */ if( gal_list_data_number(p->A_kdtree)!=2 ) error(EXIT_FAILURE, 0, "%s: the 'kdtree' argument should only " "two nodes/columns (elements in a simply linked list), " "but it has %zu nodes/columns", __func__, gal_list_data_number(p->A_kdtree)); /* Make sure the coordinates have a 'double' type and that the k-d tree has an unsigned 32-bit integer type.*/ for(tmp=p->A; tmp!=NULL; tmp=tmp->next) if( tmp->type!=GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the type of all columns in 'coord1' " "should be 'double', but at least one of them is '%s'", __func__, gal_type_name(tmp->type, 1)); for(tmp=p->B; tmp!=NULL; tmp=tmp->next) if( tmp->type!=GAL_TYPE_FLOAT64 ) error(EXIT_FAILURE, 0, "%s: the type of all columns in 'coord2' " "should be 'double', but at least one of them is '%s'", __func__, gal_type_name(tmp->type, 1)); for(tmp=p->A_kdtree; tmp!=NULL; tmp=tmp->next) if( tmp->type!=GAL_TYPE_UINT32 ) error(EXIT_FAILURE, 0, "%s: the type of both columns in " "'coord1_kdtree' should be 'uint32', but it is '%s'", __func__, gal_type_name(tmp->type, 1)); /* Allocate and initialize the 'bina' array (an array of lists). Let's call the first catalog 'a' and the second 'b'. This array has 'a->size' elements (pointers) and for each, it keeps a list of 'b' elements that are nearest to it. */ errno=0; p->bina=calloc(p->A->size, sizeof *p->bina); if(p->bina==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for 'bina'", __func__, p->A->size*sizeof *p->bina); /* Pointers to the input column arrays for easy parsing later. */ p->a[0]=p->A->array; p->b[0]=p->B->array; if( p->A->next ) { p->a[1]=p->A->next->array; if( p->A->next->next ) p->a[2]=p->A->next->next->array; } if( p->B->next ) { p->b[1]=p->B->next->array; if( p->B->next->next ) p->b[2]=p->B->next->next->array; } /* Find the bins of the first input along all its dimensions and select those that contain data. This is very important in optimal k-d tree based matching because confirming a non-match in a k-d tree is very computationally expensive. */ match_kdtree_A_coverage(p); } /* Main k-d tree matching function. */ static void * match_kdtree_worker(void *in_prm) { /* Low-level definitions to be done first. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct match_kdtree_params *p=(struct match_kdtree_params *)tprm->params; /* High level definitions. */ int iscovered; uint8_t *existA; double r, delta[3]; size_t i, j, ai, bi, h_i; gal_data_t *ccol, *Aexist; double po, *point=NULL, least_dist; /* Allocate space for all the matching points (based on the number of dimensions). */ point=gal_pointer_allocate(GAL_TYPE_FLOAT64, p->ndim, 0, __func__, "point"); /* Go over all the rows in the second catalog that were assigned to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Set the easy-to-read indexs: this is the index in the second catalog, hence 'bi'. */ bi = tprm->indexs[i]; /* Fill the 'point' for this thread. But first, check if each of its dimensions fall within the coverage of A. */ j=0; iscovered=1; Aexist=p->Aexist; for(ccol=p->B; ccol!=NULL; ccol=ccol->next) { if(iscovered) { /* Fill the point location in this dimension and set the pointer. */ existA=Aexist->array; po = point[j] = ((double *)(ccol->array))[ bi ]; /* Make sure it covers the range of A (following the same set of tests as in 'gal_statistics_histogram'). */ if( po >= p->Amin[j] && po <= p->Amax[j] ) { h_i=(po-p->Amin[j])/p->Abinwidth[j]; if( existA[ h_i - (h_i==p->Aexist->size ? 1 : 0) ] == 0 ) iscovered=0; } else iscovered=0; } /* Increment the dimensionality counter. */ ++j; Aexist=Aexist->next; } /* Continue with the match if the point is in-range. */ if(iscovered) { /* Find the index of the nearest neighbor in the first catalog to this point in the second catalog. */ ai = gal_kdtree_nearest_neighbour(p->A, p->A_kdtree, p->kdtree_root, point, &least_dist); /* If nothing was found within the least distance, then the 'ai' will be 'GAL_BLANK_SIZE_T'. */ if(ai!=GAL_BLANK_SIZE_T) { /* Make sure the matched point is within the given aperture (which may be elliptical). */ for(j=0;j<p->ndim;++j) delta[j]=p->b[j][bi] - p->a[j][ai]; r=match_distance(delta, p->iscircle, p->ndim, p->aperture, p->c, p->s); /* If the radial distance is smaller than the radial measure, then add this item to a match with 'ai'. */ if(r<p->aperture[0]) match_add_to_sfll(&p->bina[ai], bi, r); } /* For a check: if(ai==GAL_BLANK_SIZE_T) printf("second[%zu] matched with first[%zu].\n", bi); else printf("second[%zu] DIDN'T match with first.\n", bi, bi); */ } } /* Clean up. */ free(point); /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } static void match_kdtree_second_in_first(struct match_kdtree_params *p, size_t numthreads, size_t minmapsize, int quietmmap) { double dist[3]; /* Just a place-holder in 'aperture_prepare'. */ /* Prepare the aperture-related checks. */ match_aperture_prepare(p->A, p->B, p->aperture, p->ndim, p->a, p->b, dist, p->c, p->s, &p->iscircle); /* Distribute the jobs in multiple threads. */ gal_threads_spin_off(match_kdtree_worker, p, p->B->size, numthreads, minmapsize, quietmmap); } gal_data_t * gal_match_kdtree(gal_data_t *coord1, gal_data_t *coord2, gal_data_t *coord1_kdtree, size_t kdtree_root, double *aperture, size_t numthreads, size_t minmapsize, int quietmmap, size_t *nummatched) { gal_data_t *out=NULL; struct match_kdtree_params p; /* In case the 'k-d' tree is empty, just return a NULL pointer and the number of matches to zero. */ if(coord1_kdtree==NULL) { *nummatched=0; return NULL; } /* Write the parameters into the structure. */ p.A=coord1; p.B=coord2; p.aperture=aperture; p.A_kdtree=coord1_kdtree; p.kdtree_root=kdtree_root; /* Basic sanity checks. */ match_kdtree_sanity_check(&p); /* Find all of the second catalog points that are within the acceptable radius of the first. */ match_kdtree_second_in_first(&p, numthreads, minmapsize, quietmmap); /* Find the best match for each item (from possibly multiple matches). */ match_rearrange(p.A, p.B, p.bina); /* The match is done, write the output. */ out=match_output(p.A, p.B, NULL, NULL, p.bina, minmapsize, quietmmap); /* Set 'nummatched' and return output. */ *nummatched = out ? out->next->next->size : 0; /* Clean up and return. */ free(p.bina); free(p.Amin); free(p.Amax); free(p.Abinwidth); gal_list_data_free(p.Aexist); return out; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/options.c�������������������������������������������������������������������������0000644�0001750�0001750�00000345534�14557211443�011411� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Function to parse options and configuration file values. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <time.h> #include <argp.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/wcs.h> #include <gnuastro/git.h> #include <gnuastro/txt.h> #include <gnuastro/ds9.h> #include <gnuastro/fits.h> #include <gnuastro/list.h> #include <gnuastro/data.h> #include <gnuastro/table.h> #include <gnuastro/blank.h> #include <gnuastro/units.h> #include <gnuastro/color.h> #include <gnuastro/threads.h> #include <gnuastro/pointer.h> #include <gnuastro/arithmetic.h> #include <gnuastro/interpolate.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/tableintern.h> /**********************************************************************/ /************ Option utilities ***************/ /**********************************************************************/ int gal_options_is_last(struct argp_option *option) { return ( option->key==0 && option->name==NULL && option->doc==NULL && option->group==0 ); } int gal_options_is_category_title(struct argp_option *option) { return ( option->key==0 && option->name==NULL ); } void gal_options_add_to_not_given(struct gal_options_common_params *cp, struct argp_option *option) { gal_list_str_add(&cp->novalue_doc, (char *)option->doc, 0); gal_list_str_add(&cp->novalue_name, (char *)option->name, 0); } void gal_options_abort_if_mandatory_missing(struct gal_options_common_params *cp) { int namewidth=0; gal_list_str_t *tmp; char info[5000], *name, *doc; /* If there is no mandatory options, then just return. */ if(cp->novalue_name==NULL) return; /* Get the maximum width of the given names: */ for(tmp=cp->novalue_name; tmp!=NULL; tmp=tmp->next) if( strlen(tmp->v) > namewidth ) namewidth=strlen(tmp->v); /* Print the introductory information. */ sprintf(info, "to continue, the following options need a value "); sprintf(info+strlen(info), "(parenthesis after option name contain its " "description):\n\n"); /* Print the list of options along with their description. */ while(cp->novalue_name!=NULL) { doc = gal_list_str_pop(&cp->novalue_doc); name = gal_list_str_pop(&cp->novalue_name); sprintf(info+strlen(info), " %-*s (%s\b)\n", namewidth+4, name, doc); } sprintf(info+strlen(info), "\n"); /* Print suggestions, way to solve it. */ sprintf(info+strlen(info), "Use the command-line or a configuration file " "to set value(s).\n\nFor a complete description of command-line " "options and configuration files, please see the \"Options\" and " "\"Configuration files\" section of the Gnuastro book " "respectively. You can read them on the command-line by running " "the following commands (type 'SPACE' to flip through pages, type " "'Q' to return to the command-line):\n\n" " info gnuastro Options\n" " info gnuastro \"Configuration files\"\n"); error(EXIT_FAILURE, 0, "%s", info); } void gal_options_width_too_large(double width, size_t dim_num, double pixwidth, double pixscale) { /* Just a warning, will not exit program. */ error(EXIT_SUCCESS, 0, "WARNING: value %g (requested WCS-based width " "along dimension %zu) translates to %.0f pixels on this dataset! " "This is most probably not what you wanted! Note that the " "dataset's pixel size in this dimension is %g. If you intended " "this number to show the width in pixels, please add the " "'--widthinpix' option", width, dim_num, pixwidth, pixscale); } static char * options_get_home() { char *home; home=getenv("HOME"); if(home==NULL) error(EXIT_FAILURE, 0, "HOME environment variable not defined"); return home; } /**********************************************************************/ /************ Parser functions for common options ***************/ /**********************************************************************/ void * gal_options_check_version(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *str; /* First see if we are reading or writing. */ if(lineno==-1) { /* 'PACKAGE_VERSION' is a static/literal string, but the pointer returned by this function will be freed, so we must allocate space for it. We didn't allocate and give this option a value when we read it because it is redundant and much more likely for the option to just be present (for a check in a reproduction pipeline for example) than for it to be printed. So we don't want to waste resources in allocating a redundant value. */ gal_checkset_allocate_copy(PACKAGE_VERSION, &str); return str; } /* Check if the given value is different from this version. */ else { if(arg==NULL) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The value to 'arg' is NULL", __func__, PACKAGE_BUGREPORT); else if( strcmp(arg, PACKAGE_VERSION) ) { /* Print an error message and abort. */ error_at_line(EXIT_FAILURE, 0, filename, lineno, "version " "mis-match: you are running GNU Astronomy " "Utilities (Gnuastro) version '%s'. However, " "the 'onlyversion' option is set to version " "'%s'.\n\n" "This was probably done for reproducibility. " "Therefore, manually removing, or changing, the " "option value might produce errors or unexpected " "results. It is thus strongly advised to build " "Gnuastro %s and re-run this command/script.\n\n" "You can download previously released tar-balls " "from the following URLs respectively:\n\n" " Stable (version format: X.Y): " "http://ftpmirror.gnu.org/gnuastro\n" " Alpha (version format: X.Y.A-B): " "http://alpha.gnu.org/gnu/gnuastro\n\n" "Alternatively, you can clone Gnuastro, checkout " "the respective commit (from the version " "number), then bootstrap and build it. Please " "run the following command for more " "information:\n\n" " $ info gnuastro \"Version controlled " "source\"\n", PACKAGE_VERSION, arg, arg); /* Just to avoid compiler warnings for unused variables. The program will never reach this point! */ arg=filename=NULL; lineno=0; option=NULL; junk=NULL; } } return NULL; } void * gal_options_print_citation(struct argp_option *option, char *arg, char *filename, size_t lineno, void *pa) { struct gal_options_common_params *cp=(struct gal_options_common_params *)pa; char *gnuastro_acknowledgement; char *gnuastro_bibtex= "First paper introducing Gnuastro\n" "--------------------------------\n" " @ARTICLE{gnuastro,\n" " author = {{Akhlaghi}, Mohammad and {Ichikawa}, Takashi},\n" " title = \"{Noise-based Detection and Segmentation of Nebulous " "Objects}\",\n" " journal = {ApJS},\n" " archivePrefix = \"arXiv\",\n" " eprint = {1505.01664},\n" " primaryClass = \"astro-ph.IM\",\n" " keywords = {galaxies: irregular, galaxies: photometry,\n" " galaxies: structure, methods: data analysis,\n" " techniques: image processing, techniques: photometric},\n" " year = 2015,\n" " month = sep,\n" " volume = 220,\n" " eid = {1},\n" " pages = {1},\n" " doi = {10.1088/0067-0049/220/1/1},\n" " adsurl = {https://ui.adsabs.harvard.edu/abs/2015ApJS..220....1A},\n" " adsnote = {Provided by the SAO/NASA Astrophysics Data System}\n" " }"; /* Print the statements. */ printf("\nThank you for using %s (%s) %s.\n\n", cp->program_name, PACKAGE_NAME, PACKAGE_VERSION); printf("Citations and acknowledgement are vital for the continued " "work on Gnuastro.\n\n" "Please cite the following record(s) and add the acknowledgement " "statement below in your work to support us. Please note that " "different Gnuastro programs may have different corresponding " "papers. Hence, please check all the programs you used. Don't " "forget to also include the version as shown above for " "reproducibility.\n\n" "%s\n\n", gnuastro_bibtex); /* Only print the citation for the program if one exists. */ if(cp->program_bibtex[0]!='\0') printf("%s\n\n", cp->program_bibtex); /* Notice for acknowledgements. */ if( asprintf(&gnuastro_acknowledgement, "Acknowledgement\n" "---------------\n" "This work was partly done using GNU Astronomy Utilities " "(Gnuastro, ascl.net/1801.009) version %s. Work on " "Gnuastro has been funded by the Japanese Ministry of " "Education, Culture, Sports, Science, and Technology " "(MEXT) scholarship and its Grant-in-Aid for Scientific " "Research (21244012, 24253003), the European Research " "Council (ERC) advanced grant 339659-MUSICOS, the " "Spanish Ministry of Economy and Competitiveness " "(MINECO, grant number AYA2016-76219-P) and the " "NextGenerationEU grant through the Recovery and " "Resilience Facility project ICTS-MRR-2021-03-CEFCA.", PACKAGE_VERSION)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); printf("%s\n", gnuastro_acknowledgement); free(gnuastro_acknowledgement); /* Print a thank you message. */ printf(" ,\n" " {|'--.\n" " {{\\ \\\n" " Many thanks from all |/`'--./=.\n" " Gnuastro developers! `\\.---' `\\\\\n" " |\\ ||\n" " | |//\n" " \\//_/|\n" " //\\__/\n" " //\n" " (http://www.chris.com/ascii/) |/\n"); /* Exit the program. */ exit(EXIT_SUCCESS); /* Just to avoid compiler warnings for unused variables. The program will never reach this point! */ arg=filename=NULL; lineno=0; option=NULL; } void * gal_options_check_config(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *str; /* First see if we are reading or writing. */ if(lineno==-1) { gal_checkset_allocate_copy("1", &str); return str; } /* Check if the given value is different from this version. */ else { /* If its already set then ignore it. */ if(option->set) return NULL; /* Activate the option and let the user know its activated. */ (*(uint8_t *)(option->value)) = 1; printf("-----------------\n" "Parsing of options AFTER '--checkconfig'.\n\n" "IMPORTANT: Any option that was parsed before encountering " "'--checkconfig', on the command-line or in a configuration " "file, is not shown here. It is thus recommended to use this " "option before calling any other option.\n" "-----------------\n"); /* Print where this option was first seen: if 'checkconfig' is called within a configuration file, 'filename!=NULL' and has an argument (=="1"). But on the command-line, it has no argument or filename. */ if(filename) printf("%s:\n", filename); else { if(arg) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. 'filename==NULL', but 'arg!=NULL'", __func__, PACKAGE_BUGREPORT); else printf("Command-line:\n"); } /* Just to avoid compiler warnings for unused variables. The program will never reach this point! */ arg=filename=NULL; lineno=0; option=NULL; junk=NULL; } return NULL; } void * gal_options_read_type(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *str; if(lineno==-1) { /* Note that 'gal_data_type_as_string' returns a static string. But the output must be an allocated string so we can free it. */ gal_checkset_allocate_copy( gal_type_name( *(uint8_t *)(option->value), 1), &str); return str; } else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Read the value. */ if ( (*(uint8_t *)(option->value) = gal_type_from_name(arg) ) == GAL_TYPE_INVALID ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' (value to " "'%s' option) couldn't be recognized as a known " "type.\n\nFor the full list of known types, please " "run the following command (press SPACE key to go " "down, and 'q' to return to the command-line):\n\n" " $ info gnuastro \"Numeric data types\"\n", arg, option->name); /* For no un-used variable warning. This function doesn't need the pointer. */ return junk=NULL; } } void * gal_options_read_color(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *str; if(lineno==-1) { /* Note that 'gal_data_type_as_string' returns a static string. But the output must be an allocated string so we can free it. */ gal_checkset_allocate_copy( gal_color_id_to_name( *(uint8_t *)(option->value)), &str); return str; } else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Read the value. */ if ( (*(uint8_t *)(option->value) = gal_color_name_to_id(arg) ) == GAL_COLOR_INVALID ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' (value to " "'%s' option) couldn't be recognized as a known " "color.\n\nFor the full list of known types, please " "run the following command:\n\n" " $ astconvertt --listcolors\n", arg, option->name); /* For no un-used variable warning. This function doesn't need the pointer. */ return junk=NULL; } } void * gal_options_read_searchin(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *str; if(lineno==-1) { /* Note that 'gal_data_type_as_string' returns a static string. But the output must be an allocated string so we can free it. */ gal_checkset_allocate_copy( gal_tableintern_searchin_as_string( *(uint8_t *)(option->value)), &str); return str; } else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Read the value. */ if((*(uint8_t *)(option->value)=gal_tableintern_string_to_searchin(arg)) == GAL_TABLE_SEARCH_INVALID ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' (value to " "'%s' option) couldn't be recognized as a known " "table search-in field ('name', 'unit', or " "'comment').\n\n" "For more explanation, please run the following " "command (press SPACE key to go down, and 'q' to " "return to the command-line):\n\n" " $ info gnuastro \"Selecting table columns\"\n", arg, option->name); /* For no un-used variable warning. This function doesn't need the pointer. */ return junk=NULL; } } void * gal_options_read_wcslinearmatrix(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *str=NULL; uint8_t value=GAL_WCS_LINEAR_MATRIX_INVALID; if(lineno==-1) { /* The output must be an allocated string (will be 'free'd later). */ value=*(uint8_t *)(option->value); switch(value) { case GAL_WCS_LINEAR_MATRIX_PC: gal_checkset_allocate_copy("pc", &str); break; case GAL_WCS_LINEAR_MATRIX_CD: gal_checkset_allocate_copy("cd", &str); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to fix the problem. %u is not a recognized WCS rotation " "matrix code", __func__, PACKAGE_BUGREPORT, value); } return str; } else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Read the value. */ if( !strcmp(arg, "pc") ) value = GAL_WCS_LINEAR_MATRIX_PC; else if( !strcmp(arg, "cd") ) value = GAL_WCS_LINEAR_MATRIX_CD; else error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' (value " "to '%s' option) couldn't be recognized as a known " "WCS rotation matrix. Acceptable values are 'pc' " "or 'cd'", arg, option->name); *(uint8_t *)(option->value)=value; /* For no un-used variable warning. This function doesn't need the pointer. */ return junk=NULL; } } void * gal_options_read_tableformat(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *str; if(lineno==-1) { /* Note that 'gal_data_type_as_string' returns a static string. But the output must be an allocated string so we can free it. */ gal_checkset_allocate_copy( gal_tableintern_format_as_string( *(uint8_t *)(option->value)), &str); return str; } else { /* If the option is already set, then you don't have to do anything. */ if(option->set) return NULL; /* Read the value. */ if( (*(uint8_t *)(option->value)=gal_tableintern_string_to_format(arg) ) ==GAL_TABLE_FORMAT_INVALID ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' (value to " "'%s' option) couldn't be recognized as a known " "table format field ('txt', 'fits-ascii', or " "'fits-binary').\n\n", arg, option->name); /* For no un-used variable warning. This function doesn't need the pointer. */ return junk=NULL; } } void * gal_options_read_interpmetric(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *str=NULL; if(lineno==-1) { switch(*(uint8_t *)(option->value)) { case GAL_INTERPOLATE_NEIGHBORS_METRIC_RADIAL: gal_checkset_allocate_copy("radial", &str); break; case GAL_INTERPOLATE_NEIGHBORS_METRIC_MANHATTAN: gal_checkset_allocate_copy("manhattan", &str); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code %u is not recognized as a " "nearest-neighbor interpolation metric", __func__, PACKAGE_BUGREPORT, *(uint8_t *)(option->value)); } return str; } else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Set the value. */ if( !strcmp(arg, "radial") ) *(uint8_t *)(option->value) = GAL_INTERPOLATE_NEIGHBORS_METRIC_RADIAL; else if ( !strcmp(arg, "manhattan") ) *(uint8_t *)(option->value) = GAL_INTERPOLATE_NEIGHBORS_METRIC_MANHATTAN; else error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' (value to " "'%s' option) isn't valid. Currently only 'radial' " "and 'manhattan' metrics are recognized for nearest " "neighbor interpolation", arg, option->name); /* For no un-used variable warning. This function doesn't need the pointer. */ return junk=NULL; } } /* If the current token (in a 'colon'-separated list) is a sexagesimal number, or a normal number, read it as a double, and return the pointer to the end of the string (to continue parsing). We have three types of strings at this phase: 12.34,56.78:90.12,34.56:... Normal number. ^ ^ ^ 1h2m3.45,6d7m8.90:2h3m4.56,7d8m9.01:... Sexagesimal (hd) ^ ^ ^ ^ 1:2:3.45,6:7:8.90:2:3:4.56,7:8:9.01:... Sexagesimal (colon) ^ ^ ^ ^ This function is called while trying to tokenize such a string and it will stop at the highlighed points. Its job is to determine if the token its on is sexagesimal string, or if its a normal number. If its a normal number, then just return NULL. But if its a sexagesimal string, it should return a copy of the string without any futher components (like the comma or colon of the full string). HOWEVER, this function may also be given a normal colon-separted list, like below. In such cases, it will return a NULL (to let the caller know that the ':' in the 'tailptr' was a false alarm, and it can use the number before the ':' without worrying about it being a sexagesimal number. ':0.123,4.567' which is part of '1.2345,6.789:0.123,4.567' */ static double gal_options_read_sexagesimal(size_t dim, char *str, char **tailptr, int abort) { double out; char *c, *cc, *copy; size_t stlen=0, coloncounter; int ishd=0, iscolon=0, isra=0, isdec=0; /* A small sanity check. */ if(dim>1) { if(abort) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s', " "to find the cause of the problem. The value of 'dim' at " "this point should be 0 or 1, but it has a value of %zu", __func__, PACKAGE_BUGREPORT, dim); else return NAN; } /* Parse the start of this string, until you find exactly what it is. */ c=str; while( *c!='\0' && ishd==0 && iscolon==0 ) switch(*c++) { case 'h': ishd=1; isra=1; break; case 'd': ishd=1; isdec=1; break; case ':': /* A single colon isn't enough to be sure that this is a colon-based sexagesimal number. We need at least one more before we reach the end of the string, or the next comma. */ cc=c; /* 'c' is already on the next character! */ coloncounter=1; /* We have already passed the first colon! */ while(*cc!='\0' && *cc!=',') switch(*cc++) { case ':': coloncounter++; break; } /* If the loop above ended in a comma, then it stops and its time to check if this is actually a sexagesimal string or not. If we have reached the end of the string, and there was only two colons, then this is indeed a colon-based sexagesimal string. */ if( (*cc=='\0' || *cc==',') && coloncounter>=2 ) iscolon=1; /* If 'iscolon' is still zero until we reach this point, then we should simply return with a NaN, letting the user know that the 'tailptr' was a false alarm and it can continue with parsing the string. */ if(iscolon==0) return NAN; /* Everything is good, continue. */ if(dim==0) isra=1; else isdec=1; break; } /* Make sure the string could be identified properly. */ if( (isra==0 && isdec==0) || (ishd==0 && iscolon==0) ) { if(abort) error(EXIT_FAILURE, 0, "the first token in the string '%s' " "couldn't be parsed as a sexagesimal string", str); else return NAN; } /* Check if the hd-type is given for the proper dimension. */ if( (isra && dim!=0) || (isdec && dim!=1) ) { if(abort) error(EXIT_FAILURE, 0, "the order of sexagesimal coordinates " "is wrong! The first should be RA (with a format like " "'__h__m__'), and the second should be Dec ('__d__m__')"); else return NAN; } /* Depending on the mode, find the length of the full string into a new string to give to the unit conversion functions. Note that the delimiters are ':', ','. However, if we are on a colon-based sexagesimal, we should keep the first two colons and only use the third as a delimiter. */ c=str; coloncounter=0; while( *c!='\0' && stlen==0) switch(*c++) { case ':': if(iscolon) { if(++coloncounter == 3) stlen=c-str; } else stlen=c-str; break; case ',': stlen=c-str; } /* If 'stlen==0', then we are on the last token, and we can simply use the 'strlen' function, but because we are assuming the last extra character in the loop above, we should add one to 'strlen' to be consistant. */ if(stlen==0) stlen=strlen(str)+1; /* Copy the string of this sexagesimal coordinate into a new string to pass to the unit conversion function. */ copy=gal_pointer_allocate(GAL_TYPE_UINT8, stlen+1, 0, __func__, "copy"); memcpy(copy, str, stlen-1); copy[stlen-1]='\0'; /* Convert the string to degrees and set the 'tailptr' pointer. */ out = ( isra ? gal_units_ra_to_degree(copy) : gal_units_dec_to_degree(copy) ); *tailptr=str+stlen-1; /* Sanity check: */ if(abort && isnan(out)) error(EXIT_FAILURE, 0, "%s: '%s' couldn't be parsed as a " "sexagesimal representation of %s", __func__, copy, isra?"RA (right ascension)":"DEC (Declination)"); /* Clean up, set the 'tailptr' pointer, and return. */ free(copy); return out; } /* The input to this function is a string of any number of numbers separated by a comma (',') and possibly containing fractions, for example: '1,2/3, 4.95'. The output 'gal_data_t' contains the array of given values in 'double' type. You can read the number from its 'size' element. */ gal_data_t * gal_options_parse_list_of_numbers(char *string, char *filename, size_t lineno, uint8_t type) { size_t num=0; gal_data_t *out; char *c=string, *tailptr; gal_list_f64_t *list=NULL; double numerator=NAN, denominator=NAN, tmp, ttmp; /* The nature of the arrays/numbers read here is very small, so since 'p->cp.minmapsize' might not have been read yet, we will set it to -1 (largest size_t number), so the values are kept in memory. */ int quietmmap=1; size_t minmapsize=-1; /* If we have an empty string, just return NULL. */ if(string==NULL || *string=='\0') return NULL; /* Go through the input character by character. */ while(string && *c!='\0') { switch(*c) { /* Ignore space or tab. */ case ' ': case '\t': ++c; break; /* Comma or Colon mark the transition to the next number. */ case ',': case ':': if(isnan(numerator)) error_at_line(EXIT_FAILURE, 0, filename, lineno, "a number " "must be given before ','. You have given: '%s'", string); gal_list_f64_add(&list, isnan(denominator) ? numerator : numerator/denominator); numerator=denominator=NAN; ++num; ++c; break; /* Divide two numbers. */ case '/': if( isnan(numerator) || !isnan(denominator) ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "'/' must " "only be between two numbers and used for " "division. But you have given '%s'", string); ++c; break; /* Extra dot is an error (cases like 2.5.5). Valid '.'s will be read by 'strtod'. */ case '.': error_at_line(EXIT_FAILURE, 0, filename, lineno, "extra '.' in '%s'", string); break; /* Read the number. */ default: /* Parse the string. */ ttmp=NAN; tmp=strtod(c, &tailptr); if(*tailptr!=',' && *tailptr!='/' && *tailptr!='\0') { /* See if the user has given a sexagesimal value (that can't be easily read with 'strtod'). */ ttmp=gal_options_read_sexagesimal(num%2, c, &tailptr, 0); if(isnan(ttmp)) { /* This happens in cases like the values to Table's '--range=NAME,5:10'. In such cases, we do have a colon, but don't have a sexagesimal number. So we shouldn't abort the program! */ if(tailptr[0]!=':') error_at_line(EXIT_FAILURE, 0, filename, lineno, "the '%s' component of '%s' couldn't " "be parsed as a usable number", c, string); } else tmp=ttmp; } /* See if the number should be put in the numerator or denominator. */ if( isnan(numerator) ) numerator=tmp; else { if(isnan(denominator)) denominator=tmp; else error_at_line(EXIT_FAILURE, 0, filename, lineno, "more than two numbers in each " "element."); } /* Set 'c' to tailptr. */ c=tailptr; } } /* If the last number wasn't finished by a ',', add the read value to the list. */ if( !isnan(numerator) ) { ++num; gal_list_f64_add(&list, isnan(denominator) ? numerator : numerator/denominator); } /* Convert the list into the desired type. */ gal_list_f64_reverse(&list); out=gal_list_f64_to_data(list, type, minmapsize, quietmmap); /* Clean up and return. */ gal_list_f64_free(list); return out; } /* Replacement characters for commented comma (ASCII code 14 for "Shift out") or colon (ASCII code 15 for "Shift in"). These are chosen as non-printable ASCII characters, that user's will not be typing. */ #define OPTIONS_COMMENTED_COMMA 14 #define OPTIONS_COMMENTED_COLON 15 gal_data_t * gal_options_parse_list_of_strings(char *string, char *filename, size_t lineno) { size_t num; gal_data_t *out; int needscorrection; gal_list_str_t *list=NULL, *tll; char *c, *d, *cp, *token, **strarr, delimiters[]=",:"; /* The nature of the arrays/numbers read here is very small, so since 'p->cp.minmapsize' might not have been read yet, we will set it to -1 (largest size_t number), so the values are kept in memory. */ int quietmmap=1; size_t minmapsize=-1; /* If we have an empty string, just return NULL. */ if(string==NULL || *string=='\0') return NULL; /* Make a copy of the input string, remove all commented delimiters (those with a preceding '\'). */ gal_checkset_allocate_copy(string, &cp); for(c=cp; *c!='\0'; c++) if(*c=='\\' && c[1]!='\0') { /* If the next character (after the '\') is a delimiter, we need to replace it with a non-delimiter (and not-typed!) character and shift the whole string back by one character to simplify future steps. */ needscorrection=0; switch(c[1]) { case ',': *c=OPTIONS_COMMENTED_COMMA; needscorrection=1; break; case ':': *c=OPTIONS_COMMENTED_COLON; needscorrection=1; break; } if(needscorrection) { for(d=c+2; *d!='\0'; ++d) {*(d-1)=*d;} *(d-1)='\0'; } } /* Start separating the tokens. */ token=strtok(cp, delimiters); gal_list_str_add(&list, token, 1); while(token!=NULL) { token=strtok(NULL, delimiters); if(token!=NULL) gal_list_str_add(&list, token, 1); } /* Allocate the output dataset (array containing all the given strings). */ num=gal_list_str_number(list); out=gal_data_alloc(NULL, GAL_TYPE_STRING, 1, &num, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); /* Fill the output dataset. */ strarr=out->array; for(tll=list;tll!=NULL;tll=tll->next) { /* If we had commented delimiters, we need to set them back to their original/typed forms. */ for(c=tll->v; *c!='\0'; ++c) switch(*c) { case OPTIONS_COMMENTED_COMMA: *c=','; break; case OPTIONS_COMMENTED_COLON: *c=':'; break; } /* Put the pointer of the string in the output array. */ strarr[--num]=tll->v; } /* Clean up and return. Note that we don't want to free the values in the list, the elements in 'out->array' point to them and will later use them. */ free(cp); gal_list_str_free(list, 0); return out; } static int options_string_has_space(char *string) { char *c; /* If a space character is present, just return. */ for(c=string;*c!='\0';++c) if(*c==' ' || *c=='\t') return 1; /* If control reaches here, there was no space character. */ return 0; } #if 0 static char * options_print_liststr_as_csv(void *inval) { char *out=NULL; gal_list_str_t *tmp, *values=*(gal_list_str_t **)(option->value); for(tmp=values;tmp!=NULL;tmp=tmp->next) printf("%s: %s\n", __func__, tmp->v); /* Return output. */ return out; } #endif /* NOTE: output is REVERSED (since the option parsing automatically reverses STRLLs at its end). */ gal_list_str_t * gal_options_parse_csv_strings_to_list(char *string, char *filename, size_t lineno) { char *str=NULL; char *cc, *c=string; gal_list_str_t *list=NULL; /* Remove any possibly commented new-line where we have a backslash followed by a new-line character (replace the two characters with two single space characters). This can happen with the "--column='arith'" feature in Table, when it gets long (bug #58371). But to be general in other cases too, we'll just correct it here. */ for(c=string;*c!='\0';++c) if(*c=='\\' && *(c+1)=='\n') { *c=' '; *(++c)=' '; } /* Go through the input character by character. */ c=string; while(string && *c!='\0') { switch(*c) { /* Comma marks the transition to the next string. */ case ',': /* The whole string can't start with a comma. */ if(str==NULL) { if(filename) error_at_line(EXIT_FAILURE, 0, filename, lineno, "a " "string must exist before the first ','. " "You have given: '%s'", string); else error(EXIT_FAILURE, 0, "a string must exist before the " "first ','. You have given: '%s'", string); } /* If the previous character was a '\', this coma isn't a delimiter, but is actually within the string. So shift all the characters in the string one backward to remove the backslah and ignore the comma as a delimiter. */ if(*(c-1)=='\\') for(cc=c-1;*cc!='\0';++cc) *cc=*(cc+1); else { *c='\0'; gal_list_str_add(&list, str, 1); str=NULL; /* Mark that the next character is the start. */ } break; /* If the character isn't a coma, it is either in the middle of a string at the start of it. If 'str==NULL', then it is at the start. */ default: if(str==NULL) str=c; } /* Increment C. */ ++c; } /* If the last element wasn't a comma, the last string hasn't been added to the list yet. */ if(str) gal_list_str_add(&list, str, 1); /* Return the reversed list (the option parsing tools automatically reverse STRLLs at the end). */ return list; } /* For options that can take multiple values multiple times: --option=val1,val2 --option=val3,val4,val5 ... We want to merge/append all the separate values into separate tokens of a single 'gal_list_str_t'. */ void * gal_options_parse_csv_strings_append(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { gal_list_str_t *olist, *alist; /* We want to print the values. */ if(lineno==-1) return gal_list_str_cat(*(gal_list_str_t **)(option->value), ','); /* We want to read the values. */ else { /* Read all the values given to this instance of the option. */ alist=gal_options_parse_csv_strings_to_list(arg, filename, lineno); /* Get the output list and update it by putting the new list before it (note that the option parsing infrastructure will automatically reverse STRLLs. */ olist=*(gal_list_str_t **)(option->value); gal_list_str_last(alist)->next=olist; *(gal_list_str_t **)(option->value)=alist; /* Return a NULL pointer. */ return NULL; } } /* The input to this function is a string of any number of strings separated by a comma (',') for example: 'a,abc,abcd'. The output 'gal_data_t' contains the array of given strings. You can read the number of inputs from its 'size' element. */ gal_data_t * gal_options_parse_csv_strings_to_data(char *string, char *filename, size_t lineno) { size_t i, num; gal_data_t *out; gal_list_str_t *list=NULL, *tstrll=NULL; /* The nature of the arrays/numbers read here is very small, so since 'p->cp.minmapsize' might not have been read yet, we will set it to -1 (largest size_t number), so the values are kept in memory. */ int quietmmap=1; size_t minmapsize=-1; /* Extract the separate tokens in the CSV string. */ list=gal_options_parse_csv_strings_to_list(string, filename, lineno); /* Allocate the output data structure and fill it up. */ if(list) { i=num=gal_list_str_number(list); out=gal_data_alloc(NULL, GAL_TYPE_STRING, 1, &num, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); for(tstrll=list;tstrll!=NULL;tstrll=tstrll->next) ((char **)(out->array))[--i]=tstrll->v; } else { /* It is not possible to allocate a dataset with a size of 0 along any dimension (in C it's possible, but conceptually it isn't). So, we'll allocate space for one element, then free it. */ i=1; out=gal_data_alloc(NULL, GAL_TYPE_STRING, 1, &i, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); out->size=out->dsize[0]=0; free(out->array); out->array=NULL; } /* Clean up and return. Note that we don't want to free the space of each string becuse it has been passed. */ gal_list_str_free(list, 0); return out; } /* 'arg' is the value given to an option. It contains multiple strings separated by a comma (','). This function will parse 'arg' and make a 'gal_data_t' array of strings from it. The output 'gal_data_t' will be put in 'option->value'. */ void * gal_options_parse_csv_strings(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { size_t nc; char **strarr; int i, has_space=0; gal_data_t *values; char *str, sstr[GAL_OPTIONS_STATIC_MEM_FOR_VALUES]; /* We want to print the stored values. */ if(lineno==-1) { /* Set the pointer to the values dataset. */ values = *(gal_data_t **)(option->value); /* See if there are any space characters in the final string. */ strarr=values->array; for(i=0;i<values->size;++i) if(has_space==0) has_space=options_string_has_space(strarr[i]); /* If there is a space, the string must start wth quotation marks. */ nc = has_space ? 1 : 0; if(has_space) {sstr[0]='"'; sstr[1]='\0';} /* Write each string into the output string. */ for(i=0;i<values->size;++i) { if( nc > GAL_OPTIONS_STATIC_MEM_FOR_VALUES-100 ) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s " "so we can address the problem. The number of necessary " "characters in the statically allocated string has " "become too close to %d", __func__, PACKAGE_BUGREPORT, GAL_OPTIONS_STATIC_MEM_FOR_VALUES); nc += sprintf(sstr+nc, "%s,", strarr[i]); } /* If there was a space, we need a quotation mark at the end of the string. */ if(has_space) { sstr[nc-1]='"'; sstr[nc]='\0'; } else sstr[nc-1]='\0'; /* Copy the string into a dynamically allocated space, because it will be freed later. */ gal_checkset_allocate_copy(sstr, &str); return str; } /* We want to read the user's string. */ else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Make sure an argument is actually given. */ if(*arg=='\0') error_at_line(EXIT_FAILURE, 0, filename, lineno, "no value " "given to '--%s'", option->name); /* Read the values. */ values=gal_options_parse_csv_strings_to_data(arg, filename, lineno); /* Put the values into the option and return NULL (the return value is only for cases where the user wants to see the values, not set them). */ *(gal_data_t **)(option->value) = values; return NULL; } } /* Some options can be called multiple times on the command-line, but within the program, all the values must be merged into one. For example '--column=1 --column=2,3 --column=4,5,6'. In this example, the output 'gal_list_str_t' will have 3 nodes, but we actually want a list that has 6 nodes. */ void gal_options_merge_list_of_csv(gal_list_str_t **list) { size_t i; gal_data_t *strs; char *c, **strarr; gal_list_str_t *tmp, *in=*list, *out=NULL; /* Incase the input is NULL, this option doesn't need to do anything. */ if(in==NULL) return; /* Go over each input and add it to the list. */ for(tmp=in; tmp!=NULL; tmp=tmp->next) { /* Remove any possibly commented new-line where we have a backslash followed by a new-line character (replace the two characters with two single space characters). This can happen with options have have longer scripts and the user is forced to break the line with a '\' followed by newline. */ for(c=tmp->v; *c!='\0'; ++c) if(*c=='\\' && *(c+1)=='\n') { *c=' '; *(++c)=' '; } /* Read the different comma-separated strings into an array (within a 'gal_data_t'). */ strs=gal_options_parse_csv_strings_to_data(tmp->v, NULL, 0); strarr=strs->array; /* Go through all the items and add the pointers to the output list. We won't re-allocate the string, we'll just set it to NULL in the array. */ for(i=0;i<strs->size;++i) { gal_list_str_add(&out, strarr[i], 0); strarr[i]=NULL; } /* Clean up. */ gal_data_free(strs); } /* Free the input list and reverse the output list to be in the same input order. */ gal_list_str_free(in, 1); gal_list_str_reverse(&out); /* Reset the input pointer. */ *list=out; } /* Parse the given string into a series of size values (integers, stored as an array of size_t). The output array will be stored in the 'value' element of the option. The last element of the array is 'GAL_BLANK_SIZE_T' to allow finding the number of elements within it later (similar to a string which terminates with a '\0' element). */ void * gal_options_parse_sizes_reverse(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { int i; double *v; gal_data_t *values; size_t nc, num, *array; char *str, sstr[GAL_OPTIONS_STATIC_MEM_FOR_VALUES]; /* We want to print the stored values. */ if(lineno==-1) { /* Find the number of elements within the array. */ array = *(size_t **)(option->value); for(i=0; array[i]!=-1; ++i); num=i; /* Write all the dimensions into the static string. */ nc=0; for(i=num-1;i>=0;--i) { if( nc > GAL_OPTIONS_STATIC_MEM_FOR_VALUES-100 ) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s " "so we can address the problem. The number of necessary " "characters in the statically allocated string has " "become too close to %d", __func__, PACKAGE_BUGREPORT, GAL_OPTIONS_STATIC_MEM_FOR_VALUES); nc += sprintf(sstr+nc, "%zu,", array[i]); } sstr[nc-1]='\0'; /* Copy the string into a dynamically allocated space, because it will be freed later. */ gal_checkset_allocate_copy(sstr, &str); return str; } /* We want to read the user's string. */ else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Make sure an argument is actually given. */ if(*arg=='\0') error_at_line(EXIT_FAILURE, 0, filename, lineno, "no value " "given to '--%s'", option->name); /* Read the values. */ values=gal_options_parse_list_of_numbers(arg, filename, lineno, GAL_TYPE_FLOAT64); /* Check if the values are an integer. */ v=values->array; for(i=0;i<values->size;++i) { if(v[i]<0) error_at_line(EXIT_FAILURE, 0, filename, lineno, "a given " "value in '%s' (%g) is not 0 or positive. The " "values to the '--%s' option must be positive", arg, v[i], option->name); if(ceil(v[i]) != v[i]) error_at_line(EXIT_FAILURE, 0, filename, lineno, "a given " "value in '%s' (%g) is not an integer. The " "values to the '--%s' option must be integers", arg, v[i], option->name); } /* Write the values into an allocated size_t array and finish it with a '-1' so the total number can be found later. */ num=values->size; array=gal_pointer_allocate(GAL_TYPE_SIZE_T, num+1, 0, __func__, "array"); for(i=0;i<num;++i) array[num-1-i]=v[i]; array[num] = GAL_BLANK_SIZE_T; /* Put the array of size_t into the option, clean up and return. */ *(size_t **)(option->value) = array; gal_data_free(values); return NULL; } } /* Parse options with values of a list of numbers. */ void * gal_options_parse_csv_float64(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { size_t i, nc; double *darray; gal_data_t *values; char *str, sstr[GAL_OPTIONS_STATIC_MEM_FOR_VALUES]; /* We want to print the stored values. */ if(lineno==-1) { /* Set the pointer to the values dataset. */ values = *(gal_data_t **)(option->value); darray=values->array; /* Write each string into the output string. */ nc=0; for(i=0;i<values->size;++i) { if( nc > GAL_OPTIONS_STATIC_MEM_FOR_VALUES-100 ) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s " "so we can address the problem. The number of necessary " "characters in the statically allocated string has " "become too close to %d", __func__, PACKAGE_BUGREPORT, GAL_OPTIONS_STATIC_MEM_FOR_VALUES); nc += sprintf(sstr+nc, "%g,", darray[i]); } sstr[nc-1]='\0'; /* Copy the string into a dynamically allocated space, because it will be freed later. */ gal_checkset_allocate_copy(sstr, &str); return str; } /* We want to read the user's string. */ else { /* If the option is already set, just return. */ if(option->set) return NULL; /* Make sure an argument is actually given. */ if(*arg=='\0') error_at_line(EXIT_FAILURE, 0, filename, lineno, "no value " "given to '--%s'", option->name); /* Read the values. */ values=gal_options_parse_list_of_numbers(arg, filename, lineno, GAL_TYPE_FLOAT64); /* Put the values into the option. */ *(gal_data_t **)(option->value) = values; /* The return value is only for printing mode, so we can return NULL after reading is complete. */ return NULL; } } /* Two numbers must be provided as an argument. This function will read them as the sigma-clipping multiple and parameter and store the two in a 2-element array. 'option->value' must point to an already allocated 2-element array of double type. */ void * gal_options_read_sigma_clip(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { char *str; gal_data_t *in; double *sigmaclip=option->value; /* Caller wants to print the option values. */ if(lineno==-1) { if( asprintf(&str, "%g,%g", sigmaclip[0], sigmaclip[1])<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); return str; } /* Caller wants to read the values into memory, so parse the inputs. */ in=gal_options_parse_list_of_numbers(arg, filename, lineno, GAL_TYPE_FLOAT64); /* Check if there was only two numbers. */ if(in->size!=2) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the '--%s' " "option takes two values (separated by a comma) for " "defining the sigma-clip. However, %zu numbers were " "read in the string '%s' (value to this option).\n\n" "The first number is the multiple of sigma, and the " "second is either the tolerance (if its is less than " "1.0), or a specific number of times to clip (if it " "is equal or larger than 1.0).", option->name, in->size, arg); /* Copy the sigma clip parameters into the space the caller has given (as the 'value' element of 'option'). */ memcpy(option->value, in->array, 2*sizeof *sigmaclip); /* Multiple of sigma must be positive. */ if( sigmaclip[0] <= 0 ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the first value to " "the '--%s' option (multiple of sigma), must be " "greater than zero. From the string '%s' (value to " "this option), you have given a value of %g for the " "first value", option->name, arg, sigmaclip[0]); /* Second value must also be positive. */ if( sigmaclip[1] <= 0 ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "the second value " "to the '--%s' option (tolerance to stop clipping or " "number of clips), must be greater than zero. From " "the string '%s' (value to this option), you have " "given a value of %g for the second value", option->name, arg, sigmaclip[1]); /* if the second value is larger or equal to 1.0, it must be an integer. */ if( sigmaclip[1] >= 1.0f && ceil(sigmaclip[1]) != sigmaclip[1]) error_at_line(EXIT_FAILURE, 0, filename, lineno, "when the second " "value to the '--%s' option is >=1, it is interpretted " "as an absolute number of clips. So it must be an " "integer. However, your second value is a floating " "point number: %g (parsed from '%s')", option->name, sigmaclip[1], arg); /* Clean up and return. */ gal_data_free(in); return NULL; } /* Parse name and (string/float64) values: name,value1,value2,value3,... The output is a 'gal_data_t', where the 'name' is the given name and the values are in its array (of 'char *' or 'float64' type). */ static void * gal_options_parse_name_and_values(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk, int str0_f641_sz2) { double *darray=NULL; size_t i, nc, *sizarr=NULL; gal_data_t *tmp, *existing, *dataset; char *c, *name, *values, **strarr=NULL; char *str, sstr[GAL_OPTIONS_STATIC_MEM_FOR_VALUES]; /* We want to print the stored values. */ if(lineno==-1) { /* Set the value pointer to 'existing'. */ existing=*(gal_data_t **)(option->value); switch(str0_f641_sz2) { case 0: strarr = existing->array; break; case 1: darray = existing->array; break; case 2: sizarr = existing->array; break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at '%s' " "to fix the problem. The code '%d' isn't acceptable for " "'str0_f641_si2'", __func__, PACKAGE_BUGREPORT, str0_f641_sz2); } /* First write the name. */ nc=0; nc += sprintf(sstr+nc, "%s,", existing->name); /* Write the values into a string. */ for(i=0;i<existing->size;++i) { if( nc > GAL_OPTIONS_STATIC_MEM_FOR_VALUES-100 ) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s " "so we can address the problem. The number of " "necessary characters in the statically allocated " "string has become too close to %d", __func__, PACKAGE_BUGREPORT, GAL_OPTIONS_STATIC_MEM_FOR_VALUES); switch(str0_f641_sz2) { case 0: nc += sprintf(sstr+nc, "%s,", strarr[i]); break; case 1: nc += sprintf(sstr+nc, "%g,", darray[i]); break; case 2: nc += sprintf(sstr+nc, "%zu,", sizarr[i]); break; } /* No default necessary: valid value confirmed above. */ } /* Finish the string. */ sstr[nc-1]='\0'; /* Copy the string into a dynamically allocated space, because it will be freed later. */ gal_checkset_allocate_copy(sstr, &str); return str; } else { /* Make sure an argument is actually given. */ if(*arg=='\0') error_at_line(EXIT_FAILURE, 0, filename, lineno, "no value " "given to '--%s'", option->name); /* Parse until the comma or the end of the string. */ c=arg; while(*c!='\0' && *c!=',') ++c; values = (*c=='\0') ? NULL : c+1; /* Name of the dataset (note that 'c' is already pointing the end of the 'name' and 'values' points to the next character). So we can safely set 'c' to '\0' to have the 'name'. */ *c='\0'; gal_checkset_allocate_copy(arg, &name); /* Read the values. */ switch(str0_f641_sz2) { case 0: dataset=gal_options_parse_list_of_strings(values, filename, lineno); break; case 1: dataset=gal_options_parse_list_of_numbers(values, filename, lineno, GAL_TYPE_FLOAT64); break; case 2: dataset=gal_options_parse_list_of_numbers(values, filename, lineno, GAL_TYPE_SIZE_T); break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at '%s' " "to fix the problem. The code '%d' isn't acceptable for " "'str0_f641_si2'", __func__, PACKAGE_BUGREPORT, str0_f641_sz2); } /* If there actually was a string of numbers, add the dataset to the rest. */ if(dataset) { dataset->name=name; /* Add the given dataset to the end of an existing dataset. */ existing = *(gal_data_t **)(option->value); if(existing) { for(tmp=existing;tmp!=NULL;tmp=tmp->next) if(tmp->next==NULL) { tmp->next=dataset; break; } } else *(gal_data_t **)(option->value) = dataset; /* For a check. printf("arg: %s\n", arg); darray=dataset->array; for(i=0;i<dataset->size;++i) printf("%f\n", darray[i]); exit(0); */ } else error(EXIT_FAILURE, 0, "'--%s' requires a series of %s " "(separated by ',' or ':') following its first argument, " "please run with '--help' for more information", option->name, ( str0_f641_sz2 ? (str0_f641_sz2==1?"numbers":"integers") : "strings" )); /* Our job is done, return NULL. */ return NULL; } } void * gal_options_parse_name_and_strings(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { return gal_options_parse_name_and_values(option, arg, filename, lineno, junk, 0); } void * gal_options_parse_name_and_float64s(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { return gal_options_parse_name_and_values(option, arg, filename, lineno, junk, 1); } void * gal_options_parse_name_and_sizets(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { return gal_options_parse_name_and_values(option, arg, filename, lineno, junk, 2); } /* Parse strings like this: 'num1,num2:num3,n4:num5,num6' and return it as a data container array: all elements are simply placed after each other in the array. */ gal_data_t * gal_options_parse_colon_sep_csv_raw(char *instring, char *filename, size_t lineno) { gal_data_t *out; size_t dim=0, size; char *pt, *tailptr; double read, sread, *array; gal_list_f64_t *vertices=NULL; /* Parse the string. */ pt=instring; while(*pt!='\0') { switch(*pt) { case ',': ++dim; if(dim==2) error_at_line(EXIT_FAILURE, 0, filename, lineno, "Extra ',' in '%s'", instring); ++pt; break; case ':': if(dim==0) error_at_line(EXIT_FAILURE, 0, filename, lineno, "not enough coordinates for at least " "one polygon vertex (in '%s')", instring); dim=0; ++pt; break; default: break; } /* strtod will skip white spaces if they are before a number, but not when they are before a : or ,. So we need to remove all white spaces. White spaces are usually put beside each other, so if one is encountered, go along the string until the white space characters finish. */ if(isspace(*pt)) ++pt; else { /* Read the number: */ read=strtod(pt, &tailptr); /* Check if there actually was a number. printf("\n\n------\n%zu: %f (%s)\n", dim, read, tailptr); */ /* Make sure if a number was read at all? */ if(tailptr==pt) /* No number was read! */ error_at_line(EXIT_FAILURE, 0, filename, lineno, "%s could not be parsed as a floating point " "number", tailptr); /* Check if there are no extra characters in the number, for example we don't have a case like '1.00132.17', or 1.01i:2.0. Such errors are not uncommon when typing large numbers, and if ignored, they can lead to unpredictable results, so its best to abort and inform the user. */ if( *tailptr!='\0' && !isspace(*tailptr) && strchr(":,hd", *tailptr)==NULL ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' is an invalid floating point number " "sequence in the value to the '--polygon' " "option, error detected at '%s'", pt, tailptr); /* Here we need to check if we are dealing with a sexagesimal string, or just a normal number. If its just a normal number. Note that 'sread' must be initialized to NaN in case 'tailptr' is either ',' or '\0'. */ sread=NAN; if(*tailptr!=',' && *tailptr!='\0') sread=gal_options_read_sexagesimal(dim, pt, &tailptr, 0); if(!isnan(sread)) read=sread; /* Add the read coordinate to the list of coordinates. */ gal_list_f64_add(&vertices, read); /* The job here is done, start from tailptr. */ pt=tailptr; } } /* Convert the list to an array, put it in a data structure, clean up and return. */ array=gal_list_f64_to_array(vertices, 1, &size); out=gal_data_alloc(array, GAL_TYPE_FLOAT64, 1, &size, NULL, 0, -1, 1, NULL, NULL, NULL); gal_list_f64_free(vertices); return out; } /* Parse strings that are given to a function in this format 'num1,num2:num3,n4:num5,num6'. */ void * gal_options_parse_colon_sep_csv(struct argp_option *option, char *arg, char *filename, size_t lineno, void *junk) { double *darray; size_t i, nc, size; gal_data_t *tmp, *dataset, *existing; char *str, sstr[GAL_OPTIONS_STATIC_MEM_FOR_VALUES]; /* We want to print the stored values. */ if(lineno==-1) { /* Set the value pointer to 'existing'. */ existing=*(gal_data_t **)(option->value); darray=existing->array; /* Start printing the values. */ nc=0; size=existing->size; for(i=0;i<size;i+=2) { /* Make sure we aren't passing the allocated space. */ if( nc > GAL_OPTIONS_STATIC_MEM_FOR_VALUES-100 ) error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s " "so we can address the problem. The number of necessary " "characters in the statically allocated string has " "become too close to %d", __func__, PACKAGE_BUGREPORT, GAL_OPTIONS_STATIC_MEM_FOR_VALUES); /* Print the two values in the expected format. */ nc += sprintf(sstr+nc, "%.6f,%.6f%s", darray[i], darray[i+1], (i==(size-2) ? "" : ":") ); } /* Finish the string. */ sstr[nc-1]='\0'; /* Copy the string into a dynamically allocated space, because it will be freed later. */ gal_checkset_allocate_copy(sstr, &str); return str; } else { /* Make sure an argument is actually given. */ if(*arg=='\0') error_at_line(EXIT_FAILURE, 0, filename, lineno, "no value " "given to '--%s'", option->name); /* Check if the argument is a string (it contains a ':' or a ',') or a filename. Then parse the desired format and put it in this option's pointer. */ if( strchr(arg, ',')==NULL && strchr(arg, ':')==NULL ) dataset=gal_ds9_reg_read_polygon(arg); else dataset=gal_options_parse_colon_sep_csv_raw(arg, filename, lineno); /* Add the given dataset to the end of an existing dataset. */ existing = *(gal_data_t **)(option->value); if(existing) { for(tmp=existing;tmp!=NULL;tmp=tmp->next) if(tmp->next==NULL) { tmp->next=dataset; break; } } else *(gal_data_t **)(option->value) = dataset; /* In this scenario, there is no NULL value. */ return NULL; } } /**********************************************************************/ /************ Option actions ***************/ /**********************************************************************/ /* The option value has been read and put into the 'value' field of the 'argp_option' structure. This function will use the 'range' field to define a check and abort with an error if the value is not in the given range. It also takes the 'arg' so it can be used for good error message (showing the value that could not be read). */ static void options_sanity_check(struct argp_option *option, char *arg, char *filename, size_t lineno) { size_t dsize=1; char *message=NULL; int mcflag=GAL_ARITHMETIC_FLAGS_BASIC; int operator1=GAL_ARITHMETIC_OP_INVALID; int operator2=GAL_ARITHMETIC_OP_INVALID; int multicheckop=GAL_ARITHMETIC_OP_INVALID; gal_data_t *value, *ref1=NULL, *ref2=NULL, *check1, *check2; /* Currently, this function is only for numeric types, so if the value is string type, or its 'range' field is 'GAL_OPTIONS_RANGE_ANY', then just return without any checks. */ if( option->type==GAL_TYPE_STRING || option->type==GAL_TYPE_STRLL || option->range==GAL_OPTIONS_RANGE_ANY ) return; /* Put the option value into a data structure. */ value=gal_data_alloc(option->value, option->type, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); /* Set the operator(s) and operands: */ switch(option->range) { case GAL_OPTIONS_RANGE_GT_0: message="greater than zero"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; operator1=GAL_ARITHMETIC_OP_GT; ref2=NULL; break; case GAL_OPTIONS_RANGE_GE_0: message="greater or equal to zero"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; operator1=GAL_ARITHMETIC_OP_GE; ref2=NULL; break; case GAL_OPTIONS_RANGE_0_OR_1: message="either 0 or 1"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); ref2=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; *(unsigned char *)(ref2->array)=1; operator1=GAL_ARITHMETIC_OP_EQ; operator2=GAL_ARITHMETIC_OP_EQ; multicheckop=GAL_ARITHMETIC_OP_OR; break; case GAL_OPTIONS_RANGE_GE_0_LE_1: message="between zero and one (inclusive)"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); ref2=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; *(unsigned char *)(ref2->array)=1; operator1=GAL_ARITHMETIC_OP_GE; operator2=GAL_ARITHMETIC_OP_LE; multicheckop=GAL_ARITHMETIC_OP_AND; break; case GAL_OPTIONS_RANGE_GE_0_LT_1: message="between zero (inclusive) and one (exclusive)"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); ref2=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; *(unsigned char *)(ref2->array)=1; operator1=GAL_ARITHMETIC_OP_GE; operator2=GAL_ARITHMETIC_OP_LT; multicheckop=GAL_ARITHMETIC_OP_AND; break; case GAL_OPTIONS_RANGE_GT_0_LT_1: message="between zero and one (not inclusive)"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); ref2=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; *(unsigned char *)(ref2->array)=1; operator1=GAL_ARITHMETIC_OP_GT; operator2=GAL_ARITHMETIC_OP_LT; multicheckop=GAL_ARITHMETIC_OP_AND; break; case GAL_OPTIONS_RANGE_GT_0_ODD: message="greater than zero and odd"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); ref2=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; *(unsigned char *)(ref2->array)=2; operator1=GAL_ARITHMETIC_OP_GT; operator2=GAL_ARITHMETIC_OP_MODULO; multicheckop=GAL_ARITHMETIC_OP_AND; break; case GAL_OPTIONS_RANGE_0_OR_ODD: message="greater than, or equal to, zero and odd"; ref1=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); ref2=gal_data_alloc(NULL, GAL_TYPE_UINT8, 1, &dsize, NULL, 0, -1, 1, NULL, NULL, NULL); *(unsigned char *)(ref1->array)=0; *(unsigned char *)(ref2->array)=2; operator1=GAL_ARITHMETIC_OP_EQ; operator2=GAL_ARITHMETIC_OP_MODULO; multicheckop=GAL_ARITHMETIC_OP_OR; break; default: error(EXIT_FAILURE, 0, "%s: range code %d not recognized", __func__, option->range); } /* Use the arithmetic library to check for the condition. We don't want to free the value or change its value, so when dealing with the value directly, we won't use the 'GAL_ARITHMETIC_FREE', or 'GAL_ARITHMETIC_INPLACE' flags. But we will do this when there are multiple checks so from the two check data structures, we only have one remaining. */ check1=gal_arithmetic(operator1, 1, GAL_ARITHMETIC_FLAG_NUMOK, value, ref1); if(ref2) { check2=gal_arithmetic(operator2, 1, GAL_ARITHMETIC_FLAG_NUMOK, value, ref2); check1=gal_arithmetic(multicheckop, 1, mcflag, check1, check2); } /* If the final check is not successful, then print an error. */ if( *(unsigned char *)(check1->array)==0 ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "value to option '%s' must be %s, but the given value " "is '%s'. Recall that '%s' is '%s'", option->name, message, arg, option->name, option->doc); /* Clean up and finish. Note that we used the actual value pointer in the data structure, so first we need to set it to NULL, so 'gal_data_free' doesn't free it, we need it for later (for example to print the option values). */ value->array=NULL; gal_data_free(ref1); gal_data_free(ref2); gal_data_free(value); gal_data_free(check1); } static void gal_options_read_check(struct argp_option *option, char *arg, char *filename, size_t lineno, struct gal_options_common_params *cp) { void *topass; /* If a function is defined, leave everything to the function. */ if(option->func) { /* For the functions that are defined here (for all programs) and need the last pointer, we must pass the 'cp' pointer. For the rest, we must pass the 'cp->program_struct'. */ switch(option->key) { case GAL_OPTIONS_KEY_CITE: case GAL_OPTIONS_KEY_CONFIG: topass=cp; break; default: topass=cp->program_struct; } /* Call the function to parse the value, flag the option as set and return (except for the '--config' option, which must always be unset). */ option->func(option, arg, filename, lineno, topass); if(option->key!=GAL_OPTIONS_KEY_CONFIG) option->set=GAL_OPTIONS_SET; /* The '--config' option is printed for '--checkconfig' by its function ('gal_options_call_parse_config_file'), so must be ignored here. */ if(cp->checkconfig && option->key!=GAL_OPTIONS_KEY_CONFIG) printf(" %-25s%s\n", option->name, arg?arg:"ACTIVATED"); return; } /* Check if an argument is actually given (only options given on the command-line can have a NULL arg value). */ if(arg) { if(option->type==GAL_TYPE_STRLL) gal_list_str_add(option->value, arg, 1); else { /* If the option is already set, ignore the given value. */ if(option->set==GAL_OPTIONS_SET) { if(cp->checkconfig) printf(" %-25s--ALREADY-SET--\n", option->name); return; } /* Read the string argument into the value. */ if( gal_type_from_string(&option->value, arg, option->type) ) /* Fortunately 'error_at_line' will behave like 'error' when the filename is NULL (the option was read from a command-line). */ error_at_line(EXIT_FAILURE, 0, filename, lineno, "'%s' (value to option '--%s') couldn't be read " "into the proper numerical type. Common causes " "for this error are:\n" " - It contains non-numerical characters.\n" " - It is negative, but the expected value is " "positive.\n" " - It is floating point, but the expected " "value is an integer.\n" " - The previous option required a value, but " "you forgot to give it one, so the next option's " "name(+value, if there are no spaces between " "them) is read as the value of the previous " "option.", arg, option->name); /* Do a sanity check on the value. */ options_sanity_check(option, arg, filename, lineno); } } else { /* If the option is already set, ignore the given value. */ if(option->set==GAL_OPTIONS_SET) { if(cp->checkconfig) printf(" %-25s--ALREADY-SET--\n", option->name); return; } /* Make sure the option has the type set for options with no argument. So, give it a value of 1. */ if(option->type==GAL_OPTIONS_NO_ARG_TYPE) *(uint8_t *)(option->value)=1; else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "correct it. Options with no arguments, must have " "type '%s'. However, the '%s' option has type %s", __func__, PACKAGE_BUGREPORT, gal_type_name(GAL_OPTIONS_NO_ARG_TYPE, 1), option->name, gal_type_name(option->type, 1)); } /* If the user wanted to check the value. */ if(cp->checkconfig) printf(" %-25s%s\n", option->name, (arg && option->type!=GAL_OPTIONS_NO_ARG_TYPE)?arg:"ACTIVATED"); /* Flip the 'set' flag to 'GAL_OPTIONS_SET'. */ option->set=GAL_OPTIONS_SET; } /**********************************************************************/ /************ Command-line options ***************/ /**********************************************************************/ /* Set the value given to the command-line, where we have the integer 'key' of the option, not its long name as a string. */ error_t gal_options_set_from_key(int key, char *arg, struct argp_option *options, struct gal_options_common_params *cp) { size_t i; /* Go through all the options and find the one that should keep this value, then put its value into the appropriate key. Note that the options array finishs with an all zero element, so we don't need to know the number before hand. */ for(i=0;1;++i) { /* Check if the key corresponds to this option. */ if( options[i].key==key ) { /* It may happen that the user puts a space after the '=' sign of a long option (for example '--hdu= 1'). In this case, Argp will give an empty string to the option and associate the value as a new argument, leading to a confusing error message that only one argument should be given (by programs that need a single argument). So we should check for this condition here. */ if(arg && arg[0]=='\0' && cp->quiet==0) error(EXIT_SUCCESS, 0, "WARNING: no value given to the " "'--%s' option. In other words, its value is an " "empty string. This may result in undefined behavior " "(usually a crash in an un-expected part of the " "program). It can happen when you use an undefined " "shell variable or if there is an empty space after " "the '=' sign of long options (for example '--hdu= 1', " "note the space between the '=' and the '1'; the " "correct format in such cases is either '--hdu=1' " "or '--hdu 1'). To suppress this warning, please use " "the '--quiet' (or '-q') option before this option", options[i].name); /* When options are read from keys (by this function), they are read from the command-line. On the command-line, the last invokation of the option is important. Especially in contexts like scripts, this is important because you can change a given command-line option (that is not a linked list) by calling it a second time, instead of going back and changing the first value. As a result, only when searching for options on the command-line, a second value to the same option will replace the first one. This will not happen in configuration files. */ if(options[i].set && gal_type_is_list(options[i].type)==0) options[i].set=GAL_OPTIONS_NOT_SET; /* Parse the value. */ gal_options_read_check(&options[i], arg, NULL, 0, cp); /* We have found and set the value given to this option, so just return success (an error_t of 0 means success). */ return 0; } else { /* The last option has all its values set to zero. */ if(gal_options_is_last(&options[i])) return ARGP_ERR_UNKNOWN; } } } error_t gal_options_common_argp_parse(int key, char *arg, struct argp_state *state) { struct gal_options_common_params *cp=state->input; /* In case the user incorrectly uses the equal sign (for example with a short format or with space in the long format, then 'arg' start with (if the short version was called) or be (if the long version was called with a space) the equal sign. So, here we check if the first character of arg is the equal sign, then the user is warned and the program is stopped: */ if(arg && arg[0]=='=') argp_error(state, "incorrect use of the equal sign ('='). For short " "options, '=' should not be used and for long options, " "there should be no space between the option, equal sign " "and value"); /* Read the options. */ return gal_options_set_from_key(key, arg, cp->coptions, cp); } char * gal_options_stdin_error(long stdintimeout, int precedence, char *name) { char *out; if( asprintf(&out, "no %s!\n\n" "The %s can be read from a file (specified as an argument), " "or the standard input.%s Standard input can come from a " "pipe (output of another program) or typed on the " "command-line before %ld micro-seconds (configurable with " "the '--stdintimeout' option).", name, name, ( precedence ? " If both are provided, a file takes precedence." : "" ), stdintimeout )<0 ) error(EXIT_FAILURE, 0, "%s: 'asprintf' allocation error", __func__); return out; } /* Make the notice that is printed before program terminates, when no input is given and Standard input is also available. */ gal_list_str_t * gal_options_check_stdin(char *inputname, long stdintimeout, char *name) { gal_list_str_t *lines=inputname ? NULL : gal_txt_stdin_read(stdintimeout); /* See if atleast one of the two inputs is given. */ if(inputname==NULL && lines==NULL) error( EXIT_FAILURE, 0, "%s", gal_options_stdin_error(stdintimeout, 1, name)); /* Return the output. */ return lines; } /**********************************************************************/ /************ Configuration files ***************/ /**********************************************************************/ /* Read the option and the argument from the line and return. */ static void options_read_name_arg(char *line, char *filename, size_t lineno, char **name, char **arg) { int notyetfinished=1, inword=0, inquote=0; /* Initialize name and value: */ *arg=NULL; *name=NULL; /* Go through the characters and set the values: */ do switch(*line) { case ' ': case '=': case '\t': case '\v': case '\n': case '\r': if(inword) /* Only considered in a word, not in a quote. */ { inword=0; *line='\0'; if(*arg && inquote==0) notyetfinished=0; } break; case '#': notyetfinished=0; break; case '"': if(inword) error_at_line(EXIT_FAILURE, 0, filename, lineno, "Quotes have to be surrounded by whitespace " "characters (space, tab, new line, etc)."); if(inquote) { *line='\0'; inquote=0; notyetfinished=0; } else { if(*name==NULL) error_at_line(EXIT_FAILURE, 0, filename, lineno, "option name should not start with " "double quotes (\")."); inquote=1; *arg=line+1; } break; default: if(inword==0 && inquote==0) { if(*name==NULL) *name=line; else /* *name is set, now assign *arg. */ *arg=line; inword=1; } break; } while(*(++line)!='\0' && notyetfinished); /* In the last line of the file, there is no new line to be converted to a '\0' character! So if value has been assigned, we are not in a quote and the line has finished, it means the given value has also finished. */ if(*line=='\0' && *arg && inquote==0) notyetfinished=0; /* This was a blank line: */ if(*name==NULL && *arg==NULL) return; /* Name or value were set but not yet finished. */ if(notyetfinished) error_at_line(EXIT_FAILURE, 0, filename, lineno, "line finished before option name and value could " "be read."); } static int options_set_from_name(char *name, char *arg, struct argp_option *options, struct gal_options_common_params *cp, char *filename, size_t lineno) { size_t i; /* Go through all the options and find the one that should keep this value, then put its value into the appropriate key. Note that the options array finishs with an all zero element, so we don't need to know the number before hand. */ for(i=0;1;++i) { /* Check if the key corresponds to this option. */ if( gal_checkset_noprefix_isequal(name, cp->configprefix, options[i].name) ) { /* Ignore this option and its value. This can happen in several situations: - Not all common options are used by all programs. When a program doesn't use an option, it will be given an 'OPTION_HIDDEN' flag. There is no point in reading the values of such options. - When the option already has a value AND it ISN'T a linked list. */ if( options[i].flags==OPTION_HIDDEN || ( options[i].set && !gal_type_is_list(options[i].type ) ) ) { if(cp->checkconfig) printf(" %-25s%s\n", name, ( options[i].flags==OPTION_HIDDEN ? "--IGNORED--" : "--ALREADY-SET--" ) ); return 0; } /* Read the value into the option and do a sanity check. */ gal_options_read_check(&options[i], arg, filename, lineno, cp); /* We have found and set the value given to this option, so just return success (an error_t of 0 means success). */ return 0; } else { /* The last option has all its values set to zero. If we get to this point then the given name was not recognized and this function will return a 1. */ if(gal_options_is_last(&options[i])) return 1; } } } /* If the last config option has a value which is 1, then in some previous configuration file the user has asked to stop parsing configuration files. In that case, don't read this configuration file. */ static int options_lastconfig_has_been_called(struct argp_option *coptions) { size_t i; for(i=0; !gal_options_is_last(&coptions[i]); ++i) if( coptions[i].key == GAL_OPTIONS_KEY_LASTCONFIG && coptions[i].set && *((unsigned char *)(coptions[i].value)) ) return 1; return 0; } static void options_parse_file(char *filename, struct gal_options_common_params *cp, int warning) { FILE *fp; char *line, *name, *arg; size_t linelen=10, lineno=0; /* If 'lastconfig' was called prior to this file, then just return and ignore this configuration file. */ if( options_lastconfig_has_been_called(cp->coptions) ) return; /* Open the file. If the file doesn't exist or can't be opened, then just ignore the configuration file and return. */ errno=0; fp=fopen(filename, "r"); if(fp==NULL) { /* Print a warning. */ if(warning && cp->quiet==0) error(EXIT_SUCCESS, errno, "%s", filename); return; } /* If necessary, print the configuration file name. */ if(cp->checkconfig) printf("%s:\n", filename); /* Allocate the space necessary to keep a copy of each line as we parse it. Note that 'getline' is going to later 'realloc' this space to fit the line length. */ errno=0; line=malloc(linelen*sizeof *line); if(line==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for 'line'", __func__, linelen*sizeof *line); /* Read the parameters line by line. */ while( getline(&line, &linelen, fp) != -1 ) { ++lineno; if( gal_txt_line_stat(line) == GAL_TXT_LINESTAT_DATAROW ) { /* Get the option name and argument/value. */ options_read_name_arg(line, filename, lineno, &name, &arg); /* First look into this program's options, if the option isn't found there, 'options_set_from_name' will return 1. So the condition will succeed and we will start looking into the common options, if it isn't found there either, then report an error. */ if( options_set_from_name(name, arg, cp->poptions, cp, filename, lineno) ) if( options_set_from_name(name, arg, cp->coptions, cp, filename, lineno) ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "unrecognized option '%s', for the full list " "of options, please run with '--help'", name); } } /* Close the file. */ errno=0; if(fclose(fp)) error(EXIT_FAILURE, errno, "%s: couldn't close after reading as " "a configuration file in %s", filename, __func__); /* Clean up and return. */ free(line); } /* This function will be used when the '--config' option is called. */ void * gal_options_call_parse_config_file(struct argp_option *option, char *arg, char *filename, size_t lineno, void *c) { struct gal_options_common_params *cp=(struct gal_options_common_params *)c; /* The '--config' option is a special function when it comes to '--checkconfig': we'll have to write its value before interpretting it. */ if(cp->checkconfig) { printf(" %-25s%s\n", option->name, arg); printf("............................\n"); } /* Call the confguration file parser. */ options_parse_file(arg, cp, 1); /* Ending boundary of this file's options. */ if(cp->checkconfig) printf("............................\n"); /* Just to avoid compiler warnings, then return, note that all pointers are just copies. */ option=NULL; filename=NULL; lineno=0; return NULL; } /* Read the configuration files and put the values of the options not given into it. The directories containing the configuration files are fixed for all the programs. - 'SYSCONFIG_DIR' is passed onto the library functions at compile time from the command-line. You can search for it in the outputs of 'make'. The main reason is that we want the the user still has the chance to change the installation directory after 'configure'. - 'USERCONFIG_DIR' is defined in 'config.h'. - 'CURDIRCONFIG_DIR' is defined in 'config.h'. */ static void gal_options_parse_config_files(struct gal_options_common_params *cp) { char *home; char *filename; /* A small sanity check because in multiple places, we have assumed the on/off options have a type of 'unsigned char'. */ if(GAL_OPTIONS_NO_ARG_TYPE != GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can fix " "the problem. 'GAL_OPTIONS_NO_ARG_TYPE' must be the " "'uint8' type", __func__, PACKAGE_BUGREPORT); /* The program's current directory configuration file. */ if( asprintf(&filename, ".%s/%s.conf", PACKAGE, cp->program_exec)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); options_parse_file(filename, cp, 0); free(filename); /* Common options configuration file. */ if( asprintf(&filename, ".%s/%s.conf", PACKAGE, PACKAGE)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); options_parse_file(filename, cp, 0); free(filename); /* Read the home environment variable. */ home=options_get_home(); /* The program's user-wide configuration file. */ if( asprintf(&filename, "%s/%s/%s.conf", home, USERCONFIG_DIR, cp->program_exec)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); options_parse_file(filename, cp, 0); free(filename); /* Common options user-wide configuration file. */ if( asprintf(&filename, "%s/%s/%s.conf", home, USERCONFIG_DIR, PACKAGE)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); options_parse_file(filename, cp, 0); free(filename); /* The program's system-wide configuration file. */ if( asprintf(&filename, "%s/%s.conf", SYSCONFIG_DIR, cp->program_exec)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); options_parse_file(filename, cp, 0); free(filename); /* Common options system-wide configuration file. */ if( asprintf(&filename, "%s/%s.conf", SYSCONFIG_DIR, PACKAGE)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); options_parse_file(filename, cp, 0); free(filename); } static void options_reverse_lists_check_mandatory(struct gal_options_common_params *cp, struct argp_option *options) { size_t i; for(i=0; !gal_options_is_last(&options[i]); ++i) { if(options[i].set) switch(options[i].type) { case GAL_TYPE_STRLL: gal_list_str_reverse( (gal_list_str_t **)(options[i].value) ); break; } else if(options[i].mandatory==GAL_OPTIONS_MANDATORY) gal_options_add_to_not_given(cp, &options[i]); } } void gal_options_read_low_level_checks(struct gal_options_common_params *cp) { size_t suggested_mmap=10000000; /* If 'numthreads' is 0, use the number of threads available to the system. */ if(cp->numthreads==0) cp->numthreads=gal_threads_number(); /* If 'minmapsize==0' and quiet isn't given, print a warning. */ if(cp->minmapsize==0 && cp->quiet==0) { fprintf(stderr, "\n\n" "========= WARNING =========\n" "Minimum size to map an allocated space outside of RAM is " "not set, or set to zero. This can greatly slow down the " "processing of a program or cause strange crashes (recall " "that the number of files that can be memory-mapped is " "limited).\n\n" "On modern systems (with RAM larger than a giga-byte), it " "should be fine to set it to %zu (10 million bytes or 10Mb) " "with the command below. In this manner, only arrays that " "are larger than this will be memory-mapped and smaller " "arrays (which are much more numerous) will be allocated and " "freed in the RAM.\n\n" " --minmapsize=%zu\n\n" "[This warning can be disabled with the '--quiet' (or '-q') " "option.]\n" "===========================\n\n", suggested_mmap, suggested_mmap); } /* If the user wanted to check the parsing of configuration files, then the program must stop here. */ if(cp->checkconfig) exit(0); } /* Read all configuration files and set common options. */ void gal_options_read_config_set(struct gal_options_common_params *cp) { /* Parse all the configuration files. */ gal_options_parse_config_files(cp); /* Reverse the order of all linked list type options so the popping order is the same as the user's input order. We need to do this here because when printing those options, their order matters. */ options_reverse_lists_check_mandatory(cp, cp->poptions); options_reverse_lists_check_mandatory(cp, cp->coptions); /* Abort if any of the mandatory options are not set. */ gal_options_abort_if_mandatory_missing(cp); /* Low-level/basic checks before passing control back to program. */ gal_options_read_low_level_checks(cp); } /**********************************************************************/ /************ Printing/Writing ***************/ /**********************************************************************/ /* We don't want to print the values of configuration specific options and the output option. The output value is assumed to be specific to each input, and the configuration options are for reading the configuration, not writing it. */ static int option_is_printable(struct argp_option *option) { /* Use non-key fields: - If option is hidden (not relevant to this program). - Options with an INVALID type are not to be printed (they are probably processed to a higher level value with functions). */ if( (option->flags & OPTION_HIDDEN) || option->type==GAL_TYPE_INVALID ) return 0; /* Then check if it is a pre-program option. */ switch(option->key) { case GAL_OPTIONS_KEY_OUTPUT: case GAL_OPTIONS_KEY_CITE: case GAL_OPTIONS_KEY_PRINTPARAMS: case GAL_OPTIONS_KEY_CONFIG: case GAL_OPTIONS_KEY_SETDIRCONF: case GAL_OPTIONS_KEY_SETUSRCONF: case GAL_OPTIONS_KEY_LASTCONFIG: return 0; } /* Everything is fine, print the option. */ return 1; } /* For a given type, print the value in 'ptr' in a space of 'width' elements. If 'width==0', then return the width necessary to print the value. */ static int options_print_any_type(struct argp_option *option, void *ptr, int type, int width, FILE *fp, struct gal_options_common_params *cp) { char *str; /* Write the value into a string. */ str = ( option->func ? option->func(option, NULL, NULL, (size_t)(-1), cp->program_struct) : gal_type_to_string(ptr, type, 1) ); /* If only the width was desired, don't actually print the string, just return its length. Otherwise, print it. */ if(width) fprintf(fp, "%-*s ", width, str); else width=strlen(str); /* Free the allocated space and return. */ free(str); return width; } /* An option structure is given, return its name and value print lengths. */ static void options_correct_max_lengths(struct argp_option *option, int *max_nlen, int *max_vlen, struct gal_options_common_params *cp) { int vlen; gal_list_str_t *tmp; /* Invalid types are set for functions that don't save the raw user input, but do higher-level analysis on them for storing. */ if(option->type==GAL_TYPE_INVALID) return; /* Get the length of the value and save its length length if its larger than the widest value. */ if(gal_type_is_list(option->type)) { /* A small sanity check. */ if(option->type!=GAL_TYPE_STRLL) error(EXIT_FAILURE, 0, "%s: currently only string linked lists " "are acceptable for printing", __func__); /* Check each node, one by one. */ for(tmp=*(gal_list_str_t **)(option->value); tmp!=NULL; tmp=tmp->next) { /* Get the length of this node: */ vlen=options_print_any_type(option, &tmp->v, GAL_TYPE_STRING, 0, NULL, cp); /* If its larger than the maximum length, then put it in. */ if( vlen > *max_vlen ) *max_vlen=vlen; } } else { vlen=options_print_any_type(option, option->value, option->type, 0, NULL, cp); if( vlen > *max_vlen ) *max_vlen=vlen; } /* If the name of this option is larger than all existing, set its length as the largest name length. */ if( strlen(option->name) > *max_nlen ) *max_nlen = strlen(option->name); } /* To print the options nicely, we need the maximum lengths of the options and their values. */ static void options_set_lengths(struct argp_option *poptions, struct argp_option *coptions, int *namelen, int *valuelen, struct gal_options_common_params *cp) { int i, max_nlen=0, max_vlen=0; /* For program specific options. */ for(i=0; !gal_options_is_last(&poptions[i]); ++i) if(poptions[i].name && poptions[i].set) options_correct_max_lengths(&poptions[i], &max_nlen, &max_vlen, cp); /* For common options. Note that the options that will not be printed are in this category, so we also need to check them. The detailed steps are the same as before. */ for(i=0; !gal_options_is_last(&coptions[i]); ++i) if( coptions[i].name && coptions[i].set && option_is_printable(&coptions[i]) ) options_correct_max_lengths(&coptions[i], &max_nlen, &max_vlen, cp); /* Save the final values in the output pointers. */ *namelen = max_nlen; *valuelen = ( max_vlen < GAL_OPTIONS_MAX_VALUE_LEN ? max_vlen : GAL_OPTIONS_MAX_VALUE_LEN ); } /* The '#' before the 'doc' string are not required by the configuration file parser when the documentation string fits in a line. However, when the 'doc' string is longer than 80 characters, it will be cut between multiple lines and without the '#', the start of the line will be read as an option. */ static void options_print_doc(FILE *fp, const char *doc, int nvwidth) { size_t len=strlen(doc); /* The '+3' is because of the three extra spaces in this line: one before the variable name, one after it and one after the value. */ int i, prewidth=nvwidth+3, width=77-prewidth, cwidth; /* We only want the formatting when writing to stdout. */ if(len<width) fprintf(fp, "# %s\n", doc); else { /* If the break is in the middle of a word, then pull set it before the word starts. */ cwidth=width; while( doc[cwidth]!=' ' ) --cwidth; fprintf(fp, "# %.*s\n", cwidth, doc); i=cwidth; /* Go over the rest of the line. */ while(i<len) { /* Remove any possible space before the first word. */ while( doc[i]==' ' ) ++i; /* Check if the line break won't fall in the middle of a word. */ cwidth=width; if( i+cwidth<len) while( doc[i+cwidth]!=' ' ) --cwidth; fprintf(fp, "%*s# %.*s\n", prewidth, "", cwidth, &doc[i]); i+=cwidth; } } } static void options_print_all_in_group(struct argp_option *options, int groupint, int namelen, int valuelen, FILE *fp, struct gal_options_common_params *cp) { size_t i; gal_list_str_t *tmp; int namewidth=namelen+1, valuewidth=valuelen+1; /* Go over all the options. */ for(i=0; !gal_options_is_last(&options[i]); ++i) if( options[i].group == groupint /* Is in this group. */ && options[i].set /* Has been given a value. */ && option_is_printable(&options[i]) ) /* Is relevant for printing.*/ { /* Linked lists. */ if(gal_type_is_list(options[i].type)) for(tmp=*(gal_list_str_t **)(options[i].value); tmp!=NULL; tmp=tmp->next) { fprintf(fp, " %-*s ", namewidth, options[i].name); options_print_any_type(&options[i], &tmp->v, GAL_TYPE_STRING, valuewidth, fp, cp); options_print_doc(fp, options[i].doc, namewidth+valuewidth); } /* Normal types. */ else { fprintf(fp, " %-*s ", namewidth, options[i].name); options_print_any_type(&options[i], options[i].value, options[i].type, valuewidth, fp, cp); options_print_doc(fp, options[i].doc, namewidth+valuewidth); } } } static void options_print_all(struct gal_options_common_params *cp, char *dirname, const char *optionname) { size_t i; FILE *fp; int errnum; time_t rawtime; char *topicstr, *filename; gal_list_i32_t *group=NULL; gal_list_str_t *topic=NULL; int groupint, namelen, valuelen; struct argp_option *coptions=cp->coptions, *poptions=cp->poptions; /* If the configurations are to be written to a file, then do the preparations. */ if(dirname) { /* Make the host directory if it doesn't already exist. */ if( (errnum=gal_checkset_mkdir(dirname)) ) error(EXIT_FAILURE, errnum, "making %s for configuration files", dirname); /* Prepare the full filename: */ if( asprintf(&filename, "%s/%s.conf", dirname, cp->program_exec)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); /* Remove the file if it already exists. */ gal_checkset_writable_remove(filename, NULL, 0, 0); /* Open the file for writing. */ errno=0; fp=fopen(filename, "w"); if(fp==NULL) error(EXIT_FAILURE, errno, "%s: couldn't open to write " "configuration file in %s", dirname, __func__); /* Print the basic information as comments in the file first. */ time(&rawtime); fprintf(fp, "# %s (%s) %s.\n" "# Written at %s#\n" "# - Empty lines are ignored.\n" "# - Lines starting with '#' are ignored.\n" "# - The long option name is followed by a value.\n" "# - The name and value should be separated by atleast\n" "# one white space character (for example space or tab).\n" "# - If the value has space, enclose the whole value in\n" "# double quotation (\") signs.\n" "# - After the value, the rest of the line is ignored.\n" "#\n# Run 'info %s' for a more elaborate description of each " "option.\n", cp->program_name, PACKAGE_NAME, PACKAGE_VERSION, ctime(&rawtime), cp->program_exec); } else fp=stdout; /* Parse all the options with a title, note that the 'Input', 'Output' and 'Operating mode' options are defined in the common options, while the (possible) other groups are in the program specific options. We will only be dealing with the 'topics' linked list in this function and the strings in 'poption' are statically allocated, so its fine to not waste CPU cycles allocating and freeing. */ for(i=0; !gal_options_is_last(&coptions[i]); ++i) if(coptions[i].name==NULL && coptions[i].key==0 && coptions[i].doc) { /* The '(char *)' is because '.doc' is a constant and this helps remove the compiler warning. */ gal_list_i32_add(&group, coptions[i].group); gal_list_str_add(&topic, (char *)coptions[i].doc, 0); } for(i=0; !gal_options_is_last(&poptions[i]); ++i) if(poptions[i].name==NULL && poptions[i].key==0 && poptions[i].doc) { gal_list_i32_add(&group, poptions[i].group); gal_list_str_add(&topic, (char *)poptions[i].doc, 0); } /* Reverse the linked lists to get the same input order. */ gal_list_str_reverse(&topic); gal_list_i32_reverse(&group); /* Get the maximum width of names and values. */ options_set_lengths(poptions, coptions, &namelen, &valuelen, cp); /* Go over each topic and print every option that is in this group. */ while(topic) { /* Pop the nodes from the linked list. */ groupint = gal_list_i32_pop(&group); topicstr = gal_list_str_pop(&topic); /* First print the topic, */ fprintf(fp, "\n# %s\n", topicstr); /* fprintf(fp, "# "); i=0; while(i++<strlen(topicstr)) fprintf(fp, "%c", '-'); fprintf(fp, "\n"); */ /* Then, print all the options that are in this group. */ options_print_all_in_group(coptions, groupint, namelen, valuelen, fp, cp); options_print_all_in_group(poptions, groupint, namelen, valuelen, fp, cp); } /* Let the user know. */ if(dirname) { printf("\nNew/updated configuration file:\n\n %s\n\n" "You may inspect it with 'cat %s'.\n" "You may use your favorite text editor to modify it later.\n" "Or, run %s again with new values for the options and '--%s'.\n", filename, filename, cp->program_name, optionname); free(filename); } /* Exit the program successfully. */ exit(EXIT_SUCCESS); } #define OPTIONS_UINT8VAL *(uint8_t *)(cp->coptions[i].value) void gal_options_print_state(struct gal_options_common_params *cp) { size_t i; unsigned char sum=0; char *home, *dirname; /* A sanity check is necessary first. We want to make sure that the user hasn't called more than one of these options. */ for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) if(cp->coptions[i].set) switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_PRINTPARAMS: case GAL_OPTIONS_KEY_SETDIRCONF: case GAL_OPTIONS_KEY_SETUSRCONF: /* Note that these options can have a value of 1 (enabled) or 0 (explicitly disabled). Therefore the printing should only be done if they have a value of 1. This is why we have defined the 'OPTIONS_UINT8VAL' macro above. */ sum += OPTIONS_UINT8VAL; } /* See if the values should be printed and if so, where. */ switch(sum) { /* No printing option has been called, so just return. */ case 0: return; /* (Only) one of the printing options has been called, so we'll need to print the values in the proper place. */ case 1: for(i=0; !gal_options_is_last(&cp->coptions[i]); ++i) if(cp->coptions[i].set && OPTIONS_UINT8VAL) switch(cp->coptions[i].key) { case GAL_OPTIONS_KEY_PRINTPARAMS: options_print_all(cp, NULL, NULL); break; case GAL_OPTIONS_KEY_SETDIRCONF: if( asprintf(&dirname, ".%s", PACKAGE)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); options_print_all(cp, dirname, cp->coptions[i].name); free(dirname); break; case GAL_OPTIONS_KEY_SETUSRCONF: home=options_get_home(); if( asprintf(&dirname, "%s/%s", home, USERCONFIG_DIR)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); options_print_all(cp, dirname, cp->coptions[i].name); free(dirname); break; } break; /* More than one of the printing options has been called. */ default: error(EXIT_FAILURE, 0, "only one of the 'printparams', 'setdirconf' " "and 'setusrconf' options can be called in each run"); } } /* Main working function for common and program specific options. */ static void options_as_fits_keywords_write(gal_fits_list_key_t **keys, struct argp_option *options, struct gal_options_common_params *cp) { size_t i; void *vptr; int vptrfree; uint8_t vtype; gal_list_str_t *tmp; char *name, *doc, *strval; for(i=0; !gal_options_is_last(&options[i]); ++i) if( options[i].set && option_is_printable(&options[i]) ) { /* Linked lists (multiple calls to an option). */ if(gal_type_is_list(options[i].type)) for(tmp=*(gal_list_str_t **)(options[i].value); tmp!=NULL; tmp=tmp->next) { /* 'name' and 'doc' have a 'const' qualifier. */ gal_checkset_allocate_copy(tmp->v, &strval); gal_checkset_allocate_copy(options[i].doc, &doc); gal_checkset_allocate_copy(options[i].name, &name); gal_fits_key_list_add(keys, GAL_TYPE_STRING, name, 1, strval, 1, doc, 1, NULL, 0); } /* Normal (single element) types. */ else { /* If the option is associated with a special function for reading and writing, we'll need to write the value as a string. */ vptrfree=0; if(options[i].func) { vptrfree=1; vtype=GAL_TYPE_STRING; vptr=options[i].func(&options[i], NULL, NULL, (size_t)(-1), cp->program_struct); } else { vtype=options[i].type; vptr = ( vtype==GAL_TYPE_STRING ? *((char **)(options[i].value)) : options[i].value ); } /* Write the keyword. Note that 'name' and 'doc' have a 'const' qualifier. */ gal_checkset_allocate_copy(options[i].name, &name); if(vtype==GAL_TYPE_STRING && strlen(vptr)>FLEN_KEYWORD) gal_fits_key_write_filename(name, vptr, keys, 1, cp->quiet); else { gal_checkset_allocate_copy(options[i].doc, &doc); gal_fits_key_list_add(keys, vtype, name, 1, vptr, vptrfree, doc, 1, NULL, 0); } } } } /* Write all options as FITS keywords. */ void gal_options_as_fits_keywords(struct gal_options_common_params *cp) { char *pname_upper, *extname; /* If the user doesn't want any configuration, return (so the pointer remains NULL and nothing is written). */ if( cp->outfitsnoconfig ) return; /* Add the extension name (to be all-caps). Note that 'toupper' will make it upper-case inplace (which is not intended here). */ gal_checkset_allocate_copy(cp->program_name, &pname_upper); gal_checkset_string_case_change(pname_upper, 1); extname=gal_checkset_malloc_cat(pname_upper, "-CONFIG"); gal_fits_key_list_add(&cp->ckeys, GAL_TYPE_STRING, "EXTNAME", 0, extname, 1, "HDU name", 0, NULL, 0); free(pname_upper); /* Title for general configuration keywords. */ gal_fits_key_list_title_add(&cp->ckeys, "Option values", 0); /* Write all the command and program-specific options. */ options_as_fits_keywords_write(&cp->ckeys, cp->coptions, cp); options_as_fits_keywords_write(&cp->ckeys, cp->poptions, cp); /* Write the library version information into the configuration keywords. */ if( cp->outfitsnodate==0 || cp->outfitsnoversions==0 || cp->outfitsnocommit==0 ) { if(cp->outfitsnodate==0) gal_fits_key_list_title_add(&cp->ckeys, "Versions and date", 0); else gal_fits_key_list_title_add(&cp->ckeys, "Versions", 0); if(cp->outfitsnodate==0) gal_fits_key_list_add_date(&cp->ckeys, "Date processing started."); if(cp->outfitsnoversions==0) gal_fits_key_list_add_software_versions(&cp->ckeys); if(cp->outfitsnocommit==0) gal_fits_key_list_add_git_commit(&cp->ckeys); } /* Reverse the list (its a first-in-first-out list). */ gal_fits_key_list_reverse(&cp->ckeys); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/pdf.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000007371�14551337306�010462� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* pdf -- functions to write PDF files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <gnuastro/eps.h> #include <gnuastro/pdf.h> #include <gnuastro/jpeg.h> #include <gnuastro-internal/checkset.h> /************************************************************* ************** Acceptable PDF names *************** *************************************************************/ int gal_pdf_name_is_pdf(char *name) { size_t len; if(name) { len=strlen(name); if (strcmp(&name[len-3], "pdf") == 0 || strcmp(&name[len-3], "PDF") == 0) return 1; else return 0; } else return 0; } int gal_pdf_suffix_is_pdf(char *name) { if(name) { if (strcmp(name, "pdf") == 0 || strcmp(name, ".pdf") == 0 || strcmp(name, "PDF") == 0 || strcmp(name, ".PDF") == 0) return 1; else return 0; } else return 0; } /************************************************************* ************** Write a PDF image *************** *************************************************************/ void gal_pdf_write(gal_data_t *in, char *filename, float widthincm, uint32_t borderwidth, uint8_t bordercolor, int dontoptimize, gal_data_t *marks) { size_t w_h_in_pt[2]; char *command, *device; char *epsname=gal_checkset_malloc_cat(filename, ".ps"); /* Write the EPS file. */ gal_eps_write(in, epsname, widthincm, borderwidth, bordercolor, 0, dontoptimize, 0, marks); /* Get the size of the image in 'pt' units. */ gal_eps_to_pt(widthincm, in->dsize, w_h_in_pt); /* Set the device from the file name. */ if(gal_jpeg_name_is_jpeg(filename)) device="jpeg"; else device="pdfwrite"; /* Write the ghostscript command to compile the EPS file to PDF. */ if( asprintf(&command, "gs -q -o %s -sDEVICE=%s " "-dDEVICEWIDTHPOINTS=%zu -dDEVICEHEIGHTPOINTS=%zu " "-dPDFFitPage %s", filename, device, w_h_in_pt[0]+2*borderwidth, w_h_in_pt[1]+2*borderwidth, epsname)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation error", __func__); /* Run Ghostscript. */ if(system(command)) error(EXIT_FAILURE, 0, "the Ghostscript command (printed after " "this message) to convert the EPS file to PDF was not " "successful! The EPS file ('%s') is left if you want to " "convert it through any other means (for example the " "'epspdf' program). The Ghostscript command was: %s", epsname, command); /* Delete the EPS file. */ errno=0; if(unlink(epsname)) error(EXIT_FAILURE, errno, "%s", epsname); /* Clean up. */ free(command); free(epsname); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/permutation.c���������������������������������������������������������������������0000644�0001750�0001750�00000022074�14551337306�012255� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Permutation -- Work on permutations (arrays of indexs). This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnuastro/pointer.h> #include <gnuastro/permutation.h> /*********************************************************************/ /*************** Permutation info *******************/ /*********************************************************************/ void gal_permutation_check(size_t *permutation, size_t size) { size_t i; for(i=0; i<size; ++i) printf("after[ %-5zu ] = before [ %-5zu ]\n", i, permutation[i]); } /*********************************************************************/ /*************** Apply permutation *******************/ /*********************************************************************/ /* Re-order the input dataset based on the given permutation. If 'permutation' is NULL, then the input won't be touched (no re-ordering). This is a re-implementation of GSL's 'gsl_permute' function (from its 'permutation/permute_source.c'). The reason we didn't use that function was that it uses system-specific types (like 'long' and 'int') which are not easily convertable to Gnuastro's width-based types. There is also a separate function for each type, heavily using macros to allow a "base" function to work on all the types. Thus it is hard to read/understand. Since we use fixed-width types, we can easily use 'memcpy' and have a type-agnostic implementation (only needing the width of the type). As described in GSL's source code and manual, this implementation comes from Knuth's "Art of computer programmin" book, the "Sorting and Searching" chapter of Volume 3 (3rd ed). Section 5.2 Exercise 10 (answers), p 617. See there fore more explanations. The algorithm is a little too abstract, but memory and CPU efficient. Definition of permutations: permute: OUT[ i ] = IN[ perm[i] ] i = 0 .. N-1 inverse: OUT[ perm[i] ] = IN[ i ] i = 0 .. N-1 */ static void permutation_apply_raw(gal_data_t *input, size_t *permutation, int onlydim0) { void *tmp; uint8_t *array=input->array; size_t i, k, pk, winc, width, size, increment; /* If 'onlydim0' is given and the input has more than one dimension, we need to permute less (only along the 0th dimension). */ if(onlydim0 && input->ndim>1) { size=input->dsize[0]; increment=input->size/size; } else { size=input->size; increment=1; } /* If permutation is NULL, then it is assumed that the data doesn't need to be re-ordered. */ if(permutation) { /* Necessary initializations. */ width=gal_type_sizeof(input->type); tmp=gal_pointer_allocate(input->type, increment, 0, __func__, "tmp"); /* Do the permutation. */ winc=width*increment; for(i=0;i<size;++i) { k=permutation[i]; while(k>i) k=permutation[k]; if(k>=i) { pk = permutation[k]; if( pk != i ) { memcpy(tmp, &array[i*winc], winc); while(pk!=i) { memcpy(&array[k*winc], &array[pk*winc], winc); k = pk; pk = permutation[k]; } memcpy(&array[k*winc], tmp, winc); } } } /* Clean up. */ free(tmp); } } /* Apply the inverse of given permutation on the input dataset, see 'gal_permutation_apply_inverse'. */ void gal_permutation_apply_inverse(gal_data_t *input, size_t *permutation) { void *tmp, *ttmp; size_t i, k, pk, width; uint8_t *array=input->array; if(permutation) { /* Initializations. */ width=gal_type_sizeof(input->type); tmp=gal_pointer_allocate(input->type, 1, 0, __func__, "tmp"); ttmp=gal_pointer_allocate(input->type, 1, 0, __func__, "ttmp"); /* Re-order the values. */ for(i=0;i<input->size;++i) { k=permutation[i]; while(k>i) k=permutation[k]; if(k>=i) { pk = permutation[k]; if(pk!=i) { memcpy(tmp, &array[k*width], width); while(pk!=i) { memcpy(ttmp, &array[pk*width], width); memcpy(&array[pk*width], tmp, width); memcpy(tmp, ttmp, width); k = pk; pk = permutation[k]; } memcpy(&array[pk*width], tmp, width); } } } /* Clean up. */ free(tmp); free(ttmp); } } void gal_permutation_apply(gal_data_t *input, size_t *permutation) { permutation_apply_raw(input, permutation, 0); } void gal_permutation_apply_onlydim0(gal_data_t *input, size_t *permutation) { permutation_apply_raw(input, permutation, 1); } /* Transpose square (2d) input. */ static void permutation_transpose_2d_square(gal_data_t *input) { void *a, *b, *swap; size_t width=input->dsize[0]; size_t i, j, nbytes=gal_type_sizeof(input->type); /* Allocate the SWAP space, we are just allocating an 64-bit integer for its storage. */ swap=gal_pointer_allocate(GAL_TYPE_UINT64, 1, 0, __func__, "swap"); /* Go over the elements. */ for(i=0;i<width;++i) for(j=i+1;j<width;++j) { /* For easy reading. */ a=gal_pointer_increment(input->array, i*width+j, input->type); b=gal_pointer_increment(input->array, j*width+i, input->type); /* Copy the "to" value into the swap, then copy the "from" value into "to" and finally copy swap into "from". */ memcpy(swap, a, nbytes); memcpy(a, b, nbytes); memcpy(b, swap, nbytes); } /* Clean up. */ free(swap); } /* Transpose square (2d) input. */ static void permutation_transpose_2d_rectangle(gal_data_t *input) { void *a, *b; size_t i, j, nbytes; gal_data_t *out=NULL; size_t *id=input->dsize, od[2]={id[1], id[0]}; /* Moving values in memory is only necessary when the 0-th dimension has more than one element. */ if(input->dsize[0]>1) { /* Allocate the output array. */ out=gal_data_alloc(NULL, input->type, 2, od, NULL, 0, input->minmapsize, input->quietmmap, NULL, NULL, NULL); /* Go over the elements and put them in the proper place of the output. */ nbytes=gal_type_sizeof(input->type); for(i=0;i<id[0];++i) for(j=0;j<id[1];++j) { /* For easy reading. */ a=gal_pointer_increment(input->array, i*id[1]+j, input->type); b=gal_pointer_increment(out->array, j*od[1]+i, input->type); /* Copy the input ('a' pointer) to output ('b') pointer. */ memcpy(b, a, nbytes); } /* Free the original input pointer and replace it with the output array, then free the output. */ free(input->array); input->array=out->array; out->array=NULL; gal_data_free(out); } /* Update the dimesions. */ input->dsize[0]=od[0]; input->dsize[1]=od[1]; } /* Transpose a 2D dataset. */ void gal_permutation_transpose_2d(gal_data_t *input) { uint8_t type; size_t nbytes; /* Sanity checks, see the comment below. */ type=input->type; nbytes=gal_type_sizeof(type); if(nbytes>8) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "find the cause and fix this problem. This function currently " "assumes the largest possible type size is 8 bytes, but the " "requested '%s' type needs %zu bytes", __func__, PACKAGE_BUGREPORT, gal_type_name(type, 1), nbytes); if(input->ndim!=2) error(EXIT_FAILURE, 0, "%s: only 2D inputs are supported", __func__); /* A square array can be transposed much more easier and faster than a non-square array. */ if(input->dsize[0]==input->dsize[1]) permutation_transpose_2d_square(input); else permutation_transpose_2d_rectangle(input); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/pointer.c�������������������������������������������������������������������������0000644�0001750�0001750�00000021013�14551337306�011356� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* pointer -- facilitate working with pointers and allocation. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <sys/mman.h> #include <gnuastro/type.h> #include <gnuastro/pointer.h> #include <gnuastro-internal/checkset.h> /* Increment a give pointer depending on the given type. When working with the 'array' elements of 'gal_data_t', we are actually dealing with 'void *' pointers. Pointer arithmetic doesn't apply to 'void *', because the system doesn't know how much space each element has to increment the pointer respectively. So, here, we will use the type information to find the increment. This is mainly useful when dealing with the 'block' pointer of a tile over a larger image. This function reads the address as a 'char *' type (note that 'char' is guaranteed to have a size of 1 (byte)). It then increments the 'char *' by 'increment*sizeof(type)'. */ void * gal_pointer_increment(void *pointer, size_t increment, uint8_t type) { char *p=(char *)pointer; return p + increment * gal_type_sizeof(type); } /* Find the number of values between two void pointers with a given type. See the explanations before 'gal_data_ptr_increment'. */ size_t gal_pointer_num_between(void *earlier, void *later, uint8_t type) { char *e=(char *)earlier, *l=(char *)later; return (l-e)/gal_type_sizeof(type); } /* Allocate an array based on the value of type. Note that the argument 'size' is the number of elements, necessary in the array, the number of bytes each element needs will be determined internaly by this function using the datatype argument, so you don't have to worry about it. */ void * gal_pointer_allocate(uint8_t type, size_t size, int clear, const char *funcname, const char *varname) { void *array; errno=0; array = ( clear ? calloc( size, gal_type_sizeof(type) ) : malloc( size * gal_type_sizeof(type) ) ); if(array==NULL) { if(varname) error(EXIT_FAILURE, errno, "%s: %zu bytes couldn't be allocated " "for variable '%s'", funcname ? funcname : __func__, size * gal_type_sizeof(type), varname); else error(EXIT_FAILURE, errno, "%s: %zu bytes couldn't be allocated", funcname ? funcname : __func__, size * gal_type_sizeof(type)); } return array; } void * gal_pointer_mmap_allocate(uint8_t type, size_t size, int clear, char **filename, int quietmmap) { void *out; int filedes; uint8_t uc=0; char *dirname=NULL; size_t bsize=size*gal_type_sizeof(type); /* Check if the 'gnuastro_mmap' folder exists, write the file there. If it doesn't exist, then make it. If it can't be built, we'll make a randomly named file in the current directory. */ gal_checkset_allocate_copy("./gnuastro_mmap/", &dirname); if( gal_checkset_mkdir(dirname) ) { /* The directory couldn't be built. Free the old name. */ free(dirname); /* Set 'dirname' to NULL so it knows not to write in a directory. */ dirname=NULL; } /* Set the filename. If 'dirname' couldn't be allocated, directly make the memory map file in the current directory (just as a hidden file). */ if( asprintf(filename, "%sXXXXXX", dirname?dirname:"./gnuastro_mmap_")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); if(dirname) free(dirname); /* Create a zero-sized file and keep its descriptor. */ errno=0; /*filedes=open(filename, O_RDWR | O_CREAT | O_EXCL | O_TRUNC );*/ filedes=mkstemp(*filename); if(filedes==-1) error(EXIT_FAILURE, errno, "%s: %s couldn't be created", __func__, *filename); /* Make the necessary space on the file. */ errno=0; if( lseek(filedes, bsize, SEEK_SET) == -1 ) error(EXIT_FAILURE, errno, "%s: %s: unable to change file position by " "%zu bytes", __func__, *filename, bsize); /* Inform the user. */ if(!quietmmap) error(EXIT_SUCCESS, 0, "%s: temporary memory-mapped file (%zu bytes) " "created for intermediate data that is not stored in RAM (see " "the \"Memory management\" section of Gnuastro's manual for " "optimizing your project's memory management, and thus speed). " "To disable this warning, please use the option '--quiet-mmap'", *filename, bsize); /* Write to the newly set file position so the space is allocated. To do this, we are simply writing 'uc' (a byte with value 0) into the space we identified by 'lseek' (above). This will ensure that this space is set a side for this array and prepare us to use 'mmap'. */ if( write(filedes, &uc, 1) == -1) error(EXIT_FAILURE, errno, "%s: %s: unable to write one byte at the " "%zu-th position", __func__, *filename, bsize); /* Map the memory. */ errno=0; out=mmap(NULL, bsize, PROT_READ | PROT_WRITE, MAP_SHARED, filedes, 0); if(out==MAP_FAILED) { fprintf(stderr, "\n%s: WARNING: the following error may be due to " "many mmap allocations. Recall that the kernel only allows " "finite number of mmap allocations. It is recommended to use " "ordinary RAM allocation for smaller arrays and keep mmap'd " "allocation only for the large volumes.\n\n", __func__); error(EXIT_FAILURE, errno, "couldn't map %zu bytes into the file '%s'", bsize, *filename); } /* Close the file. */ if( close(filedes) == -1 ) error(EXIT_FAILURE, errno, "%s: %s couldn't be closed", __func__, *filename); /* If it was supposed to be cleared, then clear the memory. */ if(clear) memset(out, 0, bsize); /* Return the mmap'd pointer and save the file name. */ return out; } void gal_pointer_mmap_free(char **mmapname, int quietmmap) { /* Delete the file keeping the array. */ remove(*mmapname); /* Inform the user. */ if(!quietmmap) error(EXIT_SUCCESS, 0, "%s: deleted", *mmapname); /* Free the file name space. */ free(*mmapname); /* Set the name pointer to NULL since it has been freed. */ *mmapname=NULL; } void * gal_pointer_allocate_ram_or_mmap(uint8_t type, size_t size, int clear, size_t minmapsize, char **mmapname, int quietmmap, const char *funcname, const char *varname) { void *out; size_t bytesize=gal_type_sizeof(type)*size; /* See if the requested size is larger than 1MB (otherwise, its not worth checking RAM, which involves reading a text file, we won't try memory-mapping anyway). */ /* If it is decided to do memory-mapping, then do it. */ if( gal_checkset_need_mmap(bytesize, minmapsize, quietmmap) ) out=gal_pointer_mmap_allocate(type, size, clear, mmapname, quietmmap); else { /* Allocate the necessary space in the RAM. */ errno=0; out = ( clear ? calloc( size, gal_type_sizeof(type) ) : malloc( size * gal_type_sizeof(type) ) ); /* If the array is NULL (there was no RAM left: on systems other than Linux, 'malloc' will actually return NULL, Linux doesn't do this unfortunately so we need to read the available RAM). */ if(out==NULL) out=gal_pointer_mmap_allocate(type, size, clear, mmapname, quietmmap); /* The 'errno' is re-set to zero just in case 'malloc' changed it, which may cause problems later. */ errno=0; } /* Return the allocated dataset. */ return out; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/polygon.c�������������������������������������������������������������������������0000644�0001750�0001750�00000063305�14551337306�011377� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Polygon related functions and macros. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Sachin Kumar Singh <sachinkumarsingh092@gmail.com> Pedram Ashofteh-Ardakani <pedramardakani@pm.me> Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <errno.h> #include <error.h> #include <float.h> #include <stdio.h> #include <stdlib.h> #include <gsl/gsl_sort.h> #include <gnuastro/pointer.h> #include <gnuastro/polygon.h> #include <gnuastro/permutation.h> /***************************************************************/ /************** MACROS ******************/ /***************************************************************/ /* The cross product of two points from the center. */ #define GAL_POLYGON_CROSS_PRODUCT(A, B) ( (A)[0]*(B)[1] - (B)[0]*(A)[1] ) /* For spherical coordinates: the RA is only in units of degrees on the equator: as we got to higher or lower declinations, any difference in RA should be multiplied by the cos(DEC).*/ #define GAL_POLYGON_CROSS_PRODUCT_SKY(A, B) \ ( (A)[0]*(B)[1]*cos((A)[1]*M_PI/180) \ - (B)[0]*(A)[1]*cos((B)[1]*M_PI/180) ) /* Find the cross product (2*area) between three points. Each point is assumed to be a pointer that has atleast two values within it. */ #define GAL_POLYGON_TRI_CROSS_PRODUCT(A, B, C) \ ( ( (B)[0]-(A)[0] ) * ( (C)[1]-(A)[1] ) \ - ( (C)[0]-(A)[0] ) * ( (B)[1]-(A)[1] ) ) /* We have the line A-B. We want to see if C is to the left of this line or to its right. This function will return 1 if it is to the left. It uses the basic property of vector multiplication: If the three points are anti-clockwise (the point is to the left), then the vector multiplication is positive, if it is negative, then it is clockwise (c is to the right). Ofcourse it is very important that A be below or equal to B in both the X and Y directions. The rounding error might give -0.0000000000001 (I didn't count the number of zeros!!) instead of zero for the area. Zero would indicate that they are on the same line in this case this should give a true result. */ #define GAL_POLYGON_LEFT_OF_LINE(A, B, C) \ ( GAL_POLYGON_TRI_CROSS_PRODUCT((A), (B), (C)) > -GAL_POLYGON_ROUND_ERR ) /* >= 0 */ /* See if the three points are collinear, similar to GAL_POLYGON_LEFT_OF_LINE except that the result has to be exactly zero. */ #define GAL_POLYGON_COLLINEAR_WITH_LINE(A, B, C) \ (GAL_POLYGON_TRI_CROSS_PRODUCT((A), (B), (C)) > -GAL_POLYGON_ROUND_ERR \ && GAL_POLYGON_TRI_CROSS_PRODUCT((A), (B), (C)) < GAL_POLYGON_ROUND_ERR) /* == 0 */ /* Similar to GAL_POLYGON_LEFT_OF_LINE except that if they are on the same line, this will return 0 (so that it is not on the left). Therefore the name is "proper left". */ #define GAL_POLYGON_PROP_LEFT_OF_LINE(A, B, C) \ ( GAL_POLYGON_TRI_CROSS_PRODUCT((A), (B), (C)) > GAL_POLYGON_ROUND_ERR ) /* > 0 */ #define GAL_POLYGON_MIN_OF_TWO(A, B) ((A)<(B)+GAL_POLYGON_ROUND_ERR ? (A) : (B)) #define GAL_POLYGON_MAX_OF_TWO(A, B) ((A)>(B)-GAL_POLYGON_ROUND_ERR ? (A) : (B)) /***************************************************************/ /************** Basic operations ******************/ /***************************************************************/ /* Sort the pixels in anti clock-wise order. */ void gal_polygon_vertices_sort_convex(double *in, size_t n, size_t *ordinds) { double angles[GAL_POLYGON_MAX_CORNERS]; size_t i, tmp, aindexs[GAL_POLYGON_MAX_CORNERS], tindexs[GAL_POLYGON_MAX_CORNERS]; if(n>GAL_POLYGON_MAX_CORNERS) error(EXIT_FAILURE, 0, "%s: most probably a bug! The number of " "corners is more than %d. This is an internal value and " "cannot be set from the outside. Most probably some bug " "has caused this un-normal value. Please contact us at %s " "so we can solve this problem", __func__, GAL_POLYGON_MAX_CORNERS, PACKAGE_BUGREPORT); /* For a check: printf("\n\nBefore sorting:\n"); for(i=0;i<n;++i) printf("%zu: %.3f, %.3f\n", i, in[i*2], in[i*2+1]); printf("\n"); */ /* Find the point with the smallest Y (if there is two of them, the one with the smallest X too.). This is necessary because if the angles are not found relative to this point, the ordering of the corners might not be correct in non-trivial cases. */ gsl_sort_index(ordinds, in+1, 2, n); if( in[ ordinds[0]*2+1 ] == in[ ordinds[1]*2+1 ] && in[ ordinds[0]*2] > in[ ordinds[1]*2 ]) { tmp=ordinds[0]; ordinds[0]=ordinds[1]; ordinds[1]=tmp; } /* We only have 'n-1' more elements to sort, use the angle of the line between the three remaining points and the first point. */ for(i=0;i<n-1;++i) angles[i]=atan2( in[ ordinds[i+1]*2+1 ] - in[ ordinds[0]*2+1 ], in[ ordinds[i+1]*2 ] - in[ ordinds[0]*2 ] ); /* For a check: for(i=0;i<n-1;++i) printf("%zu: %.3f degrees\n", ordinds[i+1], angles[i]*180/M_PI); printf("\n"); */ /* Sort the angles into the correct order, we need an extra array to temporarily keep the newly angle-ordered indexs. Without it we are going to loose half of the ordinds indexs! */ gsl_sort_index(aindexs, angles, 1, n-1); for(i=0;i<n-1;++i) tindexs[i]=ordinds[aindexs[i]+1]; for(i=0;i<n-1;++i) ordinds[i+1]=tindexs[i]; /* For a check: printf("\nAfter sorting:\n"); for(i=0;i<n;++i) printf("%zu: %.3f, %.3f\n", ordinds[i], in[ordinds[i]*2], in[ordinds[i]*2+1]); printf("\n"); */ } /* This function checks if the polygon is convex or concave by testing all 3 consecutive points of the sorted polygon. If any of the test returns false, the the polygon is concave else it is convex. return 1: convex polygon return 0: concave polygon */ int gal_polygon_is_convex(double *v, size_t n) { size_t i; int flag=1; /* Check the first n-1 edges made by n points. */ for(i=0; i<n-2; i++) { if( GAL_POLYGON_LEFT_OF_LINE(&v[i*2], &v[(i+1)*2], &v[(i+2)*2]) ) continue; else return 0; } /* Check the edge between nth and 1st point. */ if(flag) { if( GAL_POLYGON_LEFT_OF_LINE(&v[(n-2)*2], &v[(n-1)*2], &v[0]) ) return 1; else return 0; } return 1; } /* The area of a polygon is the sum of the vector products of all the vertices in a counterclockwise order. See the Wikipedia page for Polygon for more information. 'v' points to an array of doubles which keep the positions of the vertices such that v[0] and v[1] are the positions of the first corner to be considered. To optimize the process (avoid repetition): We start from the edge connecting the last pixel to the first pixel for the first step of the loop, for the rest, j is always going to be one less than i. */ double gal_polygon_area_flat(double *v, size_t n) { double sum=0.0f; size_t i=0, j=n-1; while(i<n) { sum+=GAL_POLYGON_CROSS_PRODUCT(v+j*2, v+i*2); j=i++; } return fabs(sum)/2.0f; } /* Spherical coordinates need special attention.*/ double gal_polygon_area_sky(double *v, size_t n) { int a1b0; size_t i=0, j=n-1; double *a, *b, sum=0.0f; /* Go over all the vertices of the polygon. */ while(i<n) { /* For easy reading. */ a=v+j*2; b=v+i*2; /* We need to account for passing the two points pass over the line of RA=0 (assuming that the vertices are not larger than 180 degrees apart!) */ if( fabs(a[0]-b[0]) < 180.0f) sum+=GAL_POLYGON_CROSS_PRODUCT_SKY(a, b); else { /* Add the smaller RA by 360. */ if(a[0]<b[0]) {a1b0=1; a[0]+=360.0f;} else {a1b0=0; b[0]+=360.0f;} /* Add the cross product to the sum. */ sum+=GAL_POLYGON_CROSS_PRODUCT_SKY(a, b); /* Return the changed value. */ if(a1b0) a[0]-=360.0f; else b[0]-=360.0f; } j=i++; } return fabs(sum)/2.0f; } /* This fuction test if a point is inside the polygon using winding number algorithm. See its wiki here: https://en.wikipedia.org/wiki/Point_in_polygon#Winding_number_algorithm We have a polygon with 'n' vertices whose vertices are in the array 'v' (with 2*n elements). Such that v[0], v[1] are the two coordinates of the first vertice. The vertices also have to be sorted in a counter clockwise fashion. We also have a point (with coordinates (x, y) == (p[0], p[1]) and we want to see if it is inside the polygon or not. If point is outside the polygon, return 0. If point is inside the polygon, return a non-zero number. */ int gal_polygon_is_inside(double *v, double *p, size_t n) { /* The winding number(wn) keeping the count of number of times the ray crosses the polygon. */ size_t wn=0, i=0, j=n-1; /* Loop through all the edges of the polygon. */ while(i<n) { /* Edge from v[i] to v[i+1] in upward direction. */ if(v[j*2+1] <= p[1]) { if(v[i*2+1] > p[1]) /* 'p' left of edge is an upward intersection, increase wn. */ if( GAL_POLYGON_TRI_CROSS_PRODUCT(&v[j*2], &v[i*2], p) > 0 ) wn++; } else{ /* Edge from v[i] to v[i+1] in downward direction. */ if(v[i*2+1] <= p[1]) /* p right of edge is a downward intersection, decrease wn. */ if( GAL_POLYGON_TRI_CROSS_PRODUCT(&v[j*2], &v[i*2], p) < 0 ) wn--; } /* Increment 'j'. */ j=i++; /* For a check: printf("winding number: %ld, %.3f\n", wn); */ } return wn; } /* We have a polygon with 'n' vertices whose vertices are in the array 'v' (with 2*n elements). Such that v[0], v[1] are the two coordinates of the first vertice. The vertices also have to be sorted in a counter clockwise fashion. We also have a point (with coordinates p[0], p[1]) and we want to see if it is inside the polygon or not. If the point is inside the polygon, it will always be to the left of the edge connecting the two vertices when the vertices are traversed in order. See the comments above 'gal_polygon_area' for an explanation about i and j and the loop. */ int gal_polygon_is_inside_convex(double *v, double *p, size_t n) { size_t i=0, j=n-1; while(i<n) { if( GAL_POLYGON_LEFT_OF_LINE(&v[j*2], &v[i*2], p) ) j=i++; else return 0; } return 1; } /* Similar to gal_polygon_is_inside_convex, except that if the point is on one of the edges of a polygon, this will return 0. */ int gal_polygon_ppropin(double *v, double *p, size_t n) { size_t i=0, j=n-1; while(i<n) { /* For a check: printf("(%.2f, %.2f), (%.2f, %.2f), (%.2f, %.2f)=%f\n", v[j*2], v[j*2+1], v[i*2], v[i*2+1], p[0], p[1], GAL_POLYGON_TRI_CROSS_PRODUCT(&v[j*2], &v[i*2], p)); */ if( GAL_POLYGON_PROP_LEFT_OF_LINE(&v[j*2], &v[i*2], p) ) j=i++; else return 0; } return 1; } /* This function uses the concept of winding, which defines the relative order in which the vertices of a polygon are listed to determine the orientation of vertices. If orientation is positive vertices are in clockwise direction, else is negative for counter-clockwise direction. Zero sum implies a figure like 8, with equal orientation in both direction. See the link below for a detailed description: "https://www.element84.com/blog/determining-the-winding-of-a- polygon-given-as-a-set-of-ordered-points" return 1: sorted in counter-clockwise order or equal orientation. return 0: sorted clockwise order. */ int gal_polygon_is_counterclockwise(double *v, size_t n) { double sum=0.0f; size_t i=0, j=n-1; while(i<n) { sum+=( (v[i*2]-v[j*2])*(v[i*2+1]+v[j*2+1]) ); j=i++; } return sum>0 ? 0 : 1; } /* This function checks if the vertices are actually sorted in the counterclockwise. If they are do nothing, otherwise if they are clockwise, convert them to counter-clockwise direction return 1: success return 0: error */ int gal_polygon_to_counterclockwise(double *v, size_t n) { size_t i, j=0; size_t *permutation; gal_data_t *temp=NULL; /* Operation only necesssary when polygon isn't counter-clockwise. */ if(gal_polygon_is_counterclockwise(v, n)==0) { /* Allocate space for permutation array, which stores the order of index in which the vertices are to be ordered for a counter-clockwise direction. */ permutation=gal_pointer_allocate(GAL_TYPE_SIZE_T, 2*n, 0, __func__, "permutation"); for(i=0; i<=2*n-1;) { /* Below sequence of steps ensures that the permutation has indexes reversed but in order (x,y). Simple reversing would have turned it in (y,x) format. */ j++; permutation[j] =(2*n-1-i++); permutation[j-1]=(2*n-1-i++); j++; } /* Put the vertices in the 'gal_data_t' object. */ temp=gal_data_alloc(v, GAL_TYPE_FLOAT64, 1, &n, NULL, 0, -1, 0, NULL, NULL, NULL); /* Apply permutations to just reverse the order of clockwise to counter-clockwise. */ gal_permutation_apply(temp, permutation); /* Free allocated spaces. */ temp->array=NULL; free(permutation); gal_data_free(temp); } /* Return value, so far it will always return 1. */ return 1; } /* Find the intersection of a line segment (Aa--Ab) and an infinite line (Ba--Bb) and put the intersection point in the output 'o'. All the points are assumed to be two element double arrays already allocated outside this function. Return values: 1: Intersection exists, value was put in the output. 0: Intersection doesn't exist, no output written. -1: All four points are on the same line, no output written. */ int seginfintersection(double *Aa, double *Ab, double *Ba, double *Bb, double *o) { int Aacollinear=GAL_POLYGON_COLLINEAR_WITH_LINE(Ba, Bb, Aa); int Abcollinear=GAL_POLYGON_COLLINEAR_WITH_LINE(Ba, Bb, Ab); /* If all four points lie on the same line, there is infinite intersections, so return -1. If three of the points are collinear, then the point on the line segment that is collinear with the infinite line is the intersection point. */ if( Aacollinear && Abcollinear) return -1; else if( Aacollinear || Abcollinear) { if(Aacollinear) { o[0]=Aa[0]; o[1]=Aa[1]; } else { o[0]=Ab[0]; o[1]=Ab[1]; } return 1; } /* None of Aa or Ab are collinear with the Ba--Bb line. They can only have an intersection if Aa and Ab are on opposite sides of the Ba--Bb. If they are on the same side of Ba--Bb, then there is no intersection (atleast within the line segment range (Aa--Ab). The intersection of two lines is calculated from the determinant form in the Wikipedia article of "line-line intersection" where x1=Ba[0] x2=Bb[0] x3=Aa[0] x4=Ab[0] y1=Ba[1] y2=Bb[1] y3=Aa[1] y4=Ab[1] Note that the denominators and the parenthesis with the subtraction of multiples are the same. */ if ( GAL_POLYGON_PROP_LEFT_OF_LINE(Ba, Bb, Aa) ^ GAL_POLYGON_PROP_LEFT_OF_LINE(Ba, Bb, Ab) ) { /* Find the intersection point of two infinite lines (we assume Aa-Ab is infinite in calculating this): */ o[0]=( ( (Ba[0]*Bb[1]-Ba[1]*Bb[0])*(Aa[0]-Ab[0]) - (Ba[0]-Bb[0])*(Aa[0]*Ab[1]-Aa[1]*Ab[0]) ) / ( (Ba[0]-Bb[0])*(Aa[1]-Ab[1]) - (Ba[1]-Bb[1])*(Aa[0]-Ab[0]) ) ); o[1]=( ( (Ba[0]*Bb[1]-Ba[1]*Bb[0])*(Aa[1]-Ab[1]) - (Ba[1]-Bb[1])*(Aa[0]*Ab[1]-Aa[1]*Ab[0]) ) / ( (Ba[0]-Bb[0])*(Aa[1]-Ab[1]) - (Ba[1]-Bb[1])*(Aa[0]-Ab[0]) ) ); /* Now check if the output is in the same range as Aa--Ab. */ if( o[0]>=GAL_POLYGON_MIN_OF_TWO(Aa[0], Ab[0])-GAL_POLYGON_ROUND_ERR && o[0]<=GAL_POLYGON_MAX_OF_TWO(Aa[0], Ab[0])+GAL_POLYGON_ROUND_ERR && o[1]>=GAL_POLYGON_MIN_OF_TWO(Aa[1], Ab[1])-GAL_POLYGON_ROUND_ERR && o[1]<=GAL_POLYGON_MAX_OF_TWO(Aa[1], Ab[1])+GAL_POLYGON_ROUND_ERR ) return 1; else return 0; } else return 0; } /* Clip (find the overlap of) two polygons. */ void gal_polygon_clip(double *s, size_t n, double *c, size_t m, double *o, size_t *numcrn) { double in[2*GAL_POLYGON_MAX_CORNERS], *S, *E; size_t t, ii=m-1, i=0, jj, j, outnum, innum; /* if(n>GAL_POLYGON_MAX_CORNERS || m>GAL_POLYGON_MAX_CORNERS) error(EXIT_FAILURE, 0, "the two polygons given to the function " "gal_polygon_clip in polygon.c have %zu and %zu vertices. They cannot" " have any values larger than %zu", n, m, GAL_POLYGON_MAX_CORNERS); */ /* 2*outnum because for each vertice, there are two elements. */ outnum=n; for(t=0;t<2*outnum;++t) o[t]=s[t]; while(i<m) /* clipEdge: c[ii*2] -- c[i*2]. */ { /* printf("#################\nclipEdge %zu\n", i); printf("(%.3f, %.3f) -- (%.3f, %.3f)\n----------------\n", c[ii*2], c[ii*2+1], c[i*2], c[i*2+1]); */ innum=outnum; for(t=0;t<2*innum;++t) in[t]=o[t]; outnum=0; j=0; jj=innum-1; while(j<innum) { S=&in[jj*2]; /* Starting point. */ E=&in[j*2]; /* Ending point. */ if( GAL_POLYGON_PROP_LEFT_OF_LINE(&c[ii*2], &c[i*2], E) ) { if( GAL_POLYGON_PROP_LEFT_OF_LINE(&c[ii*2], &c[i*2], S)==0 ) if( seginfintersection(S, E, &c[ii*2], &c[i*2], &o[2*outnum]) >0) ++outnum; o[2*outnum]=E[0]; o[2*outnum+1]=E[1]; ++outnum; } else if( GAL_POLYGON_PROP_LEFT_OF_LINE(&c[ii*2], &c[i*2], S) ) if( seginfintersection(S, E, &c[ii*2], &c[i*2], &o[2*outnum])>0 ) ++outnum; /* { size_t k; printf("(%.3f, %.3f) -- (%.3f, %.3f): %zu\n", S[0], S[1], E[0], E[1], outnum); for(k=0;k<outnum;++k) printf("\t (%.3f, %.3f)\n", o[k*2], o[k*2+1]); } */ jj=j++; } ii=i++; /* printf("outnum: %zu\n\n\n\n", outnum); */ } *numcrn=outnum; } /***************************************************************/ /******* Basic operations for concave-sort *************/ /***************************************************************/ /* The point structures allows storing of points in an array like a pair. */ struct point { double x; double y; }; /* This function allows us to find the rightmost point in the given array based on its x-coordinates. */ static void polygon_leftmost_point(double *in, size_t n, struct point *p) { size_t i, min_index=-1; double tmp_min = DBL_MAX; /* Loop through the entire array and find the rightmost corner and store the index of that maximum vetex. */ for(i=0; i<n; i++) if(tmp_min > in[i*2]) { min_index = i; tmp_min = in[i*2]; } p->x=in[min_index*2]; p->y=in[min_index*2+1]; /* For a check: printf("leftmost point: %.3f \n", in[min_index*2]); */ } /* This function allows us to find the leftmost point int the given array based on x coordinates. */ static void polygon_rightmost_point(double *in, size_t n, struct point *p) { size_t i, max_index=-1; double tmp_max = DBL_MIN; /* Loop through the entire array and find the leftmost corner and store the index of that maximum vetex. */ for(i=0; i<n; i++) if(tmp_max < in[i*2]) { max_index = i; tmp_max = in[i*2]; } p->x=in[max_index*2]; p->y=in[max_index*2+1]; /* For a check: printf("rightmost point: %.3f \n", in[max_index*2]); */ } /* This function uses cross-product and right-hand rule to check the position of points (x, y) w.r.t the vector joining the leftmost and the rightmost point(the diagonal vector). Return 1: If point lies to the left-hand side of the diagonal vector. Return 0: If point lies in the diagonal vector Return -1: If point lies to the right-hand side of the diagonal vector. */ static int polygon_leftof_vector(double *in, size_t n, double x, double y) { double test; struct point l, r; /* Perform the cross-product test. */ polygon_leftmost_point(in, n, &l); polygon_rightmost_point(in, n, &r); test = (r.y-y)*(r.x-l.x) - (r.y-l.y)*(r.x-x); /* Due to the choice of return value, we multiply 'test' by -1. */ test = -1*test; return test?(test>0?1:-1):0; } /***************************************************************/ /******** Sorting and Merging for concave sort ***********/ /***************************************************************/ /* This function makes the two temporary partition of the input array into A and B which keep the points above and below the diagonal vector. */ static void polygon_make_arr(double *in, size_t n, size_t *A_size, size_t *B_size, struct point *A, struct point *B) { /* Here j and k are the indexes for A and B arrays respectively. */ size_t i, j = 0, k = 0; *A_size = 0, *B_size = 0; /* Loop through the input array and make the desired partition and also calculate their respective sizes. */ for(i=0; i<n; i++) { if(polygon_leftof_vector(in, n, in[i*2], in[i*2+1]) <= 0) { A[j].x=in[i*2]; A[j].y=in[i*2+1]; /* For a check: printf("A =: (%.3f, %.3f)\n", A[j].x, A[j].y); */ j++; (*A_size)++; } else { B[k].x=in[i*2]; B[k].y=in[i*2+1]; /* For a check: printf("B =: (%.3f, %.3f)\n", B[k].x, B[k].y); */ k++; (*B_size)++; } } /* For a check: printf("sizes of A & B array ==> %ld, %ld \n", *A_size, *B_size); */ } /* The comparator functions for qsort. CompareA arranges the array in ascending order according to their x-coordinate. */ static int polygon_compareA(const void *a, const void *b) { struct point *p1 = (struct point *)a, *p2 = (struct point *)b; return ( p1->x==p2->x ? 0 : (p1->x<p2->x ? -1 : 1) ); } /* The comparator functions for qsort. CompareB arranges in descending order according to their x-coordintes. */ static int polygon_compareB(const void *a, const void *b) { struct point *p1 = (struct point *)a, *p2 = (struct point *)b; return ( p1->x==p2->x ? 0 : (p1->x<p2->x ? 1 : -1) ); } /* This function arranges the A and B arrays and merges them together to the output array. Hence it is the main function which should be called when using concave sort. */ void gal_polygon_vertices_sort(double *vertices, size_t n, size_t *ordinds) { size_t i, j, A_size = 0, B_size = 0; struct point A[GAL_POLYGON_MAX_CORNERS]; struct point B[GAL_POLYGON_MAX_CORNERS]; struct point sorted[GAL_POLYGON_MAX_CORNERS]; struct point tordinds[GAL_POLYGON_MAX_CORNERS]; /* Sanity check. */ if(n>GAL_POLYGON_MAX_CORNERS) error(EXIT_FAILURE, 0, "%s: most probably a bug! The number of corners " "is more than %d. This is an internal value and cannot be set from " "the outside. Most probably some bug has caused this un-normal " "value. Please contact us at %s so we can solve this problem", __func__, GAL_POLYGON_MAX_CORNERS, PACKAGE_BUGREPORT); /* Make arrays A and B and store the vertices in them. Currently points are stored in based on their position from the diagonal vector. */ polygon_make_arr(vertices, n, &A_size, &B_size, A, B); /* Now, we put the contents of A and B in the temporary array. Firstly, we put the contents of A and then save the last index of A (stored in i) and continue from that index while copying from B(using j). */ for(i=0; i<A_size+B_size; i++) { tordinds[i].x=vertices[i*2]; tordinds[i].y=vertices[i*2+1]; } /* Now sort the arrays A and B w.r.t their x axis, sorting A in ascending order and B in descending order. */ qsort(A, A_size, sizeof(struct point), polygon_compareA); qsort(B, B_size, sizeof(struct point), polygon_compareB); /*Finally, we put the contents of A and B in a final sorted array. */ for(i=0; i<A_size; i++) sorted[i]=A[i]; for(j=0; j<B_size; j++) sorted[i++]=B[j]; /* For a check. for(i=0; i<A_size+B_size; i++) printf("sorted array := %lf %lf\n", sorted[i], sorted[i*2+1]); */ /* The temporary array is now used to find the location of points stored in sorted array and assign index in ordinds accordingly. */ for(i=0; i<n; i++) for(j=0; j<n; j++) if( tordinds[i].x == sorted[j].x && tordinds[i].y == sorted[j].y ) { ordinds[j]=i; break; } /* For a check. for(i=0;i<n;i++) printf("%ld\n", ordinds[i]); */ } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/pool.c����������������������������������������������������������������������������0000644�0001750�0001750�00000026505�14551337306�010662� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Pool -- Pool input data and create a new dataset. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Faezeh Bidjarchian <fbidjarchian@gmail.com> Contributing author(s): Mohammad Akhlaghi <mohammad@akhlaghi.org> Copyright (C) 2023-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/wcs.h> #include <gnuastro/type.h> #include <gnuastro/fits.h> #include <gnuastro/pool.h> #include <gnuastro/pointer.h> #include <gnuastro/threads.h> #include <gnuastro/dimension.h> #include <gnuastro/statistics.h> #include <gnuastro-internal/checkset.h> /* Identifiers for each operator. */ enum pool_operators { POOL_MAX, /* Maximum the desired pixels. */ POOL_MIN, /* Minimum the desired pixels. */ POOL_SUM, /* Sum of desired pixels. */ POOL_MEAN, /* Mean the desired pixel. */ POOL_MEDIAN, /* Median the desired pixels. */ }; /**********************************************************************/ /**************** Pooling *****************/ /**********************************************************************/ #define POOLING_DIM 10 /* Main input/output parameters. */ struct pooling { int operator; /* The type of pooling. */ size_t poolsize; /* The size of pooling. */ size_t pstride; /* The stride of pooling. */ size_t *osize; /* The output size. */ gal_data_t *input; /* Dataset to print values of. */ gal_data_t *out; /* Output data structure. */ }; /* Do the pooling on each thread. Current assumptions: - The size of pooling can be every single number (the pooling window is a square). - The width and height of the input are not necessarily divisible by the size of the pooling. In other words, the image can be both square and rectangular. - We apply pooling to our input with any stride length that may be differ from the poolsize. Remember that, the size of the poolsize must be greater than the stride size. */ static void * pool_type_on_thread(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct pooling *pp=(struct pooling *)tprm->params; gal_data_t *input=pp->input; size_t strd=pp->pstride; size_t ndim=input->ndim; size_t pools=pp->poolsize; size_t w=input->dsize[1], wr; gal_data_t *statv=NULL, *result=NULL; size_t i, a, b, oind, iind, vc, numpixs, coord[POOLING_DIM], index; /* All number of pixels that we selected each time par the pooling. */ numpixs=pools*pools; /* Allocated memory for selected pixels of input to feed into the statisitical operation. */ statv=gal_data_alloc(NULL, input->type, 1, &numpixs, NULL, 0, input->minmapsize, input->quietmmap, NULL, NULL, NULL); /* Go over all the pixels that were assigned to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading, put the index in 'oind'. */ oind=tprm->indexs[i]; /* Get the coordinate of the pixel. */ gal_dimension_index_to_coord(oind, ndim, pp->osize, coord); /* Convert the pixel coordinate to the desired pixel that we must select to set the pooling's starting pointer. */ iind=strd*w*coord[0]+strd*coord[1]; wr=iind%w; /* In some cases, the pooling window doesn't cover a whole squared window and only has maybe one pixel. So since we initialize the statv by Null (=0 in C), some of these values fill with input values and others remain zero. So these zeros will affect the outputs. Therefore we initialize the statv by blank value. */ gal_blank_initialize(statv); /* Set the sorted and blank check flags to 0 so the statistical operators re-check everytime for sorted or blank elements. */ statv->flag=0; /* Depending on the size of pooling, we condider a set of pixels and fill the temporary 'values' array. Then we do the required operation on them. */ vc=0; for(a=0;a<pools;++a) for(b=0;b<pools && wr+b<input->dsize[1];++b) { index=iind + a*w + b; if (index<input->size) { memcpy(gal_pointer_increment(statv->array, vc, statv->type), gal_pointer_increment(input->array, index, input->type), gal_type_sizeof(input->type)); vc++; } } /* Do the necessary calculation. */ switch(pp->operator) { case POOL_MAX: result=gal_statistics_maximum(statv); break; case POOL_MIN: result=gal_statistics_minimum(statv); break; case POOL_SUM: result=gal_statistics_sum(statv); break; case POOL_MEAN: result=gal_statistics_mean(statv); break; case POOL_MEDIAN: result=gal_statistics_median(statv, 1); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s " "to fix the problem. 'operator' code %d is not " "recognized.", PACKAGE_BUGREPORT, __func__, pp->operator); } /* Make sure the output array type and the type of result are the same. */ if(result->type!=pp->out->type) result=gal_data_copy_to_new_type_free(result, pp->out->type); /* Copy the result into the output array. */ memcpy(gal_pointer_increment(pp->out->array, oind, pp->out->type), result->array, gal_type_sizeof(pp->out->type)); /* Clean up. */ gal_data_free(result); } /* Clean up. */ gal_data_free(statv); /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } static gal_data_t * pool_generic(gal_data_t *input, size_t psize, size_t stride, int operator, size_t numthreads) { struct pooling pp={0}; int otype=GAL_TYPE_INVALID; size_t outndim=input->ndim, i, r, diff; /* Print a warning if the psize or the stride have a wrong value. It happens when the user writes a negative value for them. */ if(psize>(size_t)(-1)/2 || psize==0) error(EXIT_FAILURE, 0, "the value of poolsize must be positive, and " "non zero)"); if(stride>(size_t)(-1)/2 || stride==0) error(EXIT_FAILURE, 0, "the value of stride must be positive, and " "non zero)"); /* Make sure the given poolsize is lower than the input's width or height. */ if(psize>input->dsize[0] && psize>input->dsize[1]) error(EXIT_FAILURE, 0, "%s: the pool size along dimension must be " "lower than the input's width or height in that dimension", __func__); /* Make sure the size of the stride is lower than the poolsize. If not, some pixels may not be considered during the pooling process. */ if(stride>psize) error(EXIT_FAILURE, 0, "%s: the size of the stride must be lower " "than the poolsize. Otherwise, there are some pixels that are " "not in any of the pooling windows.", __func__); /* Set the pointers in the structure of the parameter. */ pp.input=input; pp.pstride=stride; pp.poolsize=psize; pp.operator=operator; if(pp.input->size==1) pp.out=pp.input; else { /* Resize output when calculating pooling on it and the remainder is not zero. So we must calculate the pooling one more time for the remaining pixels. */ pp.osize=gal_pointer_allocate(GAL_TYPE_SIZE_T, input->ndim, 0, __func__, "osize"); /* if the width is not divisible by the poolsize, we have to add one dimension to the output dimension for these remaining pixels. */ for(i=0;i<input->ndim;++i) { r=(input->dsize[i])%stride; diff=((r==0)?0:1); pp.osize[i]=(input->dsize[i]/stride)+diff; } /* Set the type of the output dataset. */ switch(pp.operator) { case POOL_MAX: case POOL_MIN: case POOL_MEDIAN: otype=pp.input->type; break; case POOL_SUM: case POOL_MEAN: otype=GAL_TYPE_FLOAT64; break; default: error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s to fix " "the problem. The 'operator' code %d is not recognized", PACKAGE_BUGREPORT, __func__, operator); } /* Allocating an struct for the output data. */ pp.out=gal_data_alloc(NULL, otype, outndim, pp.osize, NULL, 0, pp.input->minmapsize, pp.input->quietmmap, NULL, NULL, NULL); /* Spin-off the threads and do the processing on each thread. */ gal_threads_spin_off(pool_type_on_thread, &pp, pp.out->size, numthreads, pp.input->minmapsize, pp.input->quietmmap); } /* Correct the WCS (if it has one). */ if(input->wcs) { /* We currently assume that a 'cdelt' exists (due to a lack of time)! */ if(pp.input->wcs->cdelt==NULL) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. The input WCS has no 'cdelt' component", __func__, PACKAGE_BUGREPORT); /* Copy the input WCS to the output and correct the values. */ pp.out->wcs=gal_wcs_copy(pp.input->wcs); pp.out->wcs->crpix[0]/=psize; pp.out->wcs->crpix[1]/=psize; pp.out->wcs->cdelt[0]*=psize; pp.out->wcs->cdelt[1]*=psize; } /* Clean up and return. */ free(pp.osize); return pp.out; } gal_data_t * gal_pool_max(gal_data_t *input, size_t psize, size_t stride, size_t numthreads) { return pool_generic(input, psize, stride, POOL_MAX, numthreads); } gal_data_t * gal_pool_min(gal_data_t *input, size_t psize, size_t stride, size_t numthreads) { return pool_generic(input, psize, stride, POOL_MIN, numthreads); } gal_data_t * gal_pool_sum(gal_data_t *input, size_t psize, size_t stride, size_t numthreads) { return pool_generic(input, psize, stride, POOL_SUM, numthreads); } gal_data_t * gal_pool_mean(gal_data_t *input, size_t psize, size_t stride, size_t numthreads) { return pool_generic(input, psize, stride, POOL_MEAN, numthreads); } gal_data_t * gal_pool_median(gal_data_t *input, size_t psize, size_t stride, size_t numthreads) { return pool_generic(input, psize, stride, POOL_MEDIAN, numthreads); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/qsort.c���������������������������������������������������������������������������0000644�0001750�0001750�00000026434�14551337306�011062� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* qsort -- Functions used by qsort to sort an array. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdlib.h> #include <stdint.h> #include <fitsio.h> #include <gnuastro/qsort.h> /*****************************************************************/ /********** Macros ****************/ /*****************************************************************/ /* When one or both elements are NaN, the simple comparison, like '(tb > ta) - (tb < ta)', will give 0 (as if the elements are equal). However, some preference has to be given to the NaN element in a comparison, otherwise the output is not going to be reasonable. We also don't want to check NaNs on every comparison (it will slow down the processing). So we'll exploit the fact that when there comparison result doesn't equal zero, we don't have any NaNs and this 'COMPARE_FLOAT_POSTPROCESS' macro is called only when the comparison gives zero. Being larger or smaller isn't defined for NaNs, so we'll just put them in the end of the sorted list whether it is sorted by decreasing or increasing mode. */ #define COMPARE_FLOAT_POSTPROCESS ( \ isnan(ta) && isnan(tb) \ ? 0 /* Both NaN, define as equal. */ \ /* One is NaN, one isn't. */ \ : ( isnan(ta) \ ? 1 /* First is NaN, set as smaller. */ \ : ( isnan(tb) \ ? -1 /* Second is NaN, set as larger. */ \ : 0 ) /* None are NaN, set as equal.*/ \ ) \ ) /*****************************************************************/ /********** Sorting of actual array ****************/ /*****************************************************************/ int gal_qsort_uint8_d(const void *a, const void *b) { return ( *(uint8_t *)b - *(uint8_t *)a ); } int gal_qsort_uint8_i(const void *a, const void *b) { return ( *(uint8_t *)a - *(uint8_t *)b ); } int gal_qsort_int8_d(const void *a, const void *b) { return ( *(int8_t *)b - *(int8_t *)a ); } int gal_qsort_int8_i(const void *a, const void *b) { return ( *(int8_t *)a - *(int8_t *)b ); } int gal_qsort_uint16_d(const void *a, const void *b) { return ( *(uint16_t *)b - *(uint16_t *)a ); } int gal_qsort_uint16_i(const void *a, const void *b) { return ( *(uint16_t *)a - *(uint16_t *)b ); } int gal_qsort_int16_d(const void *a, const void *b) { return ( *(int16_t *)b - *(int16_t *)a ); } int gal_qsort_int16_i(const void *a, const void *b) { return ( *(int16_t *)a - *(int16_t *)b ); } int gal_qsort_uint32_d(const void *a, const void *b) { return ( *(uint32_t *)b - *(uint32_t *)a ); } int gal_qsort_uint32_i(const void *a, const void *b) { return ( *(uint32_t *)a - *(uint32_t *)b ); } int gal_qsort_int32_d(const void *a, const void *b) { return ( *(int32_t *)b - *(int32_t *)a ); } int gal_qsort_int32_i(const void *a, const void *b) { return ( *(int32_t *)a - *(int32_t *)b ); } int gal_qsort_uint64_d(const void *a, const void *b) { return ( *(uint64_t *)b - *(uint64_t *)a ); } int gal_qsort_uint64_i(const void *a, const void *b) { return ( *(uint64_t *)a - *(uint64_t *)b ); } int gal_qsort_int64_d(const void *a, const void *b) { return ( *(int64_t *)b - *(int64_t *)a ); } int gal_qsort_int64_i(const void *a, const void *b) { return ( *(int64_t *)a - *(int64_t *)b ); } int gal_qsort_float32_d(const void *a, const void *b) { float ta=*(float*)a; float tb=*(float*)b; int out=(tb > ta) - (tb < ta); return out ? out : COMPARE_FLOAT_POSTPROCESS; } int gal_qsort_float32_i(const void *a, const void *b) { float ta=*(float*)a; float tb=*(float*)b; int out=(ta > tb) - (ta < tb); return out ? out : COMPARE_FLOAT_POSTPROCESS; } int gal_qsort_float64_d(const void *a, const void *b) { double ta=*(double*)a; double tb=*(double*)b; int out=(tb > ta) - (tb < ta); return out ? out : COMPARE_FLOAT_POSTPROCESS; } int gal_qsort_float64_i(const void *a, const void *b) { double ta=*(double*)a; double tb=*(double*)b; int out=(ta > tb) - (ta < tb); return out ? out : COMPARE_FLOAT_POSTPROCESS; } /*****************************************************************/ /*************** Sorting indexs ******************/ /*****************************************************************/ /* Initialize the array for sorting indexs to NULL. */ void *gal_qsort_index_single=NULL; int gal_qsort_index_single_uint8_d(const void *a, const void *b) { uint8_t ta=((uint8_t *)(gal_qsort_index_single))[ *(size_t *)a ]; uint8_t tb=((uint8_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (tb > ta) - (tb < ta); } int gal_qsort_index_single_uint8_i(const void *a, const void *b) { uint8_t ta=((uint8_t *)(gal_qsort_index_single))[ *(size_t *)a ]; uint8_t tb=((uint8_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (ta > tb) - (ta < tb); } int gal_qsort_index_single_int8_d(const void *a, const void *b) { int8_t ta=((int8_t *)(gal_qsort_index_single))[ *(size_t *)a ]; int8_t tb=((int8_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (tb > ta) - (tb < ta); } int gal_qsort_index_single_int8_i(const void *a, const void *b) { int8_t ta=((int8_t *)(gal_qsort_index_single))[ *(size_t *)a ]; int8_t tb=((int8_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (ta > tb) - (ta < tb); } int gal_qsort_index_single_uint16_d(const void *a, const void *b) { uint16_t ta=((uint16_t *)(gal_qsort_index_single))[ *(size_t *)a ]; uint16_t tb=((uint16_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (tb > ta) - (tb < ta); } int gal_qsort_index_single_uint16_i(const void *a, const void *b) { uint16_t ta=((uint16_t *)(gal_qsort_index_single))[ *(size_t *)a ]; uint16_t tb=((uint16_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (ta > tb) - (ta < tb); } int gal_qsort_index_single_int16_d(const void *a, const void *b) { int16_t ta=((int16_t *)(gal_qsort_index_single))[ *(size_t *)a ]; int16_t tb=((int16_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (tb > ta) - (tb < ta); } int gal_qsort_index_single_int16_i(const void *a, const void *b) { int16_t ta=((int16_t *)(gal_qsort_index_single))[ *(size_t *)a ]; int16_t tb=((int16_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (ta > tb) - (ta < tb); } int gal_qsort_index_single_uint32_d(const void *a, const void *b) { uint32_t ta=((uint32_t *)(gal_qsort_index_single))[ *(size_t *)a ]; uint32_t tb=((uint32_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (tb > ta) - (tb < ta); } int gal_qsort_index_single_uint32_i(const void *a, const void *b) { uint32_t ta=((uint32_t *)(gal_qsort_index_single))[ *(size_t *)a ]; uint32_t tb=((uint32_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (ta > tb) - (ta < tb); } int gal_qsort_index_single_int32_d(const void *a, const void *b) { int32_t ta=((int32_t *)(gal_qsort_index_single))[ *(size_t *)a ]; int32_t tb=((int32_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (tb > ta) - (tb < ta); } int gal_qsort_index_single_int32_i(const void *a, const void *b) { int32_t ta=((int32_t *)(gal_qsort_index_single))[ *(size_t *)a ]; int32_t tb=((int32_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (ta > tb) - (ta < tb); } int gal_qsort_index_single_uint64_d(const void *a, const void *b) { uint64_t ta=((uint64_t *)(gal_qsort_index_single))[ *(size_t *)a ]; uint64_t tb=((uint64_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (tb > ta) - (tb < ta); } int gal_qsort_index_single_uint64_i(const void *a, const void *b) { uint64_t ta=((uint64_t *)(gal_qsort_index_single))[ *(size_t *)a ]; uint64_t tb=((uint64_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (ta > tb) - (ta < tb); } int gal_qsort_index_single_int64_d(const void *a, const void *b) { int64_t ta=((int64_t *)(gal_qsort_index_single))[ *(size_t *)a ]; int64_t tb=((int64_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (tb > ta) - (tb < ta); } int gal_qsort_index_single_int64_i(const void *a, const void *b) { int64_t ta=((int64_t *)(gal_qsort_index_single))[ *(size_t *)a ]; int64_t tb=((int64_t *)(gal_qsort_index_single))[ *(size_t *)b ]; return (ta > tb) - (ta < tb); } int gal_qsort_index_single_float32_d(const void *a, const void *b) { float ta=((float *)(gal_qsort_index_single))[ *(size_t *)a ]; float tb=((float *)(gal_qsort_index_single))[ *(size_t *)b ]; int out=(tb > ta) - (tb < ta); return out ? out : COMPARE_FLOAT_POSTPROCESS; } int gal_qsort_index_single_float32_i(const void *a, const void *b) { float ta=((float *)(gal_qsort_index_single))[ *(size_t *)a ]; float tb=((float *)(gal_qsort_index_single))[ *(size_t *)b ]; int out=(ta > tb) - (ta < tb); return out ? out : COMPARE_FLOAT_POSTPROCESS; } int gal_qsort_index_single_float64_d(const void *a, const void *b) { double ta=((double *)(gal_qsort_index_single))[ *(size_t *)a ]; double tb=((double *)(gal_qsort_index_single))[ *(size_t *)b ]; int out=(tb > ta) - (tb < ta); return out ? out : COMPARE_FLOAT_POSTPROCESS; } int gal_qsort_index_single_float64_i(const void *a, const void *b) { double ta=((double *)(gal_qsort_index_single))[ *(size_t *)a ]; double tb=((double *)(gal_qsort_index_single))[ *(size_t *)b ]; int out=(ta > tb) - (ta < tb); return out ? out : COMPARE_FLOAT_POSTPROCESS; } int gal_qsort_index_multi_d(const void *a, const void *b) { /* Define the structures. */ struct gal_qsort_index_multi *A = (struct gal_qsort_index_multi *)a; struct gal_qsort_index_multi *B = (struct gal_qsort_index_multi *)b; /* For easy reading. */ float ta=A->values[ A->index ]; float tb=B->values[ B->index ]; /* Return the result. */ int out=(tb > ta) - (tb < ta); return out ? out : COMPARE_FLOAT_POSTPROCESS; } int gal_qsort_index_multi_i(const void *a, const void *b) { /* Define the structures. */ struct gal_qsort_index_multi *A = (struct gal_qsort_index_multi *)a; struct gal_qsort_index_multi *B = (struct gal_qsort_index_multi *)b; /* For easy reading. */ float ta=A->values[ A->index ]; float tb=B->values[ B->index ]; /* Return the result. */ int out=(ta > tb) - (ta < tb); return out ? out : COMPARE_FLOAT_POSTPROCESS; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/dimension.c�����������������������������������������������������������������������0000644�0001750�0001750�00000166251�14551337306�011701� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* dimension -- Functions for multi-dimensional operations. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnuastro/wcs.h> #include <gnuastro/binary.h> #include <gnuastro/pointer.h> #include <gnuastro/threads.h> #include <gnuastro/convolve.h> #include <gnuastro/dimension.h> #include <gnuastro/statistics.h> #include <gnuastro/arithmetic.h> /************************************************************************/ /******************** Info **********************/ /************************************************************************/ size_t gal_dimension_total_size(size_t ndim, size_t *dsize) { size_t i, num=1; for(i=0;i<ndim;++i) num *= dsize[i]; return num; } int gal_dimension_is_different(gal_data_t *first, gal_data_t *second) { size_t i; /* First make sure that the dimensionality is the same. */ if(first->ndim!=second->ndim) return 1; /* If the sizes are not zero, check if each dimension also has the same length. */ if(first->size==0 && first->size==second->size) return 0; else for(i=0;i<first->ndim;++i) if( first->dsize[i] != second->dsize[i] ) return 1; /* If it got to here, we know the dimensions have the same length. */ return 0; } /* Calculate the values necessary to increment/decrement along each dimension of a dataset with size 'dsize'. */ size_t * gal_dimension_increment(size_t ndim, size_t *dsize) { int i; size_t *out=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "out"); /* Along the fastest dimension, it is 1. */ out[ndim-1]=1; /* For the rest of the dimensions, it is the multiple of the faster dimension's length and the value for the previous dimension. */ if(ndim>1) for(i=ndim-2;i>=0;--i) out[i]=dsize[i+1]*out[i+1]; /* Return the allocated array. */ return out; } size_t gal_dimension_num_neighbors(size_t ndim) { if(ndim) return pow(3, ndim)-1; else error(EXIT_FAILURE, 0, "%s: ndim cannot be zero", __func__); return 0; } /************************************************************************/ /******************** Coordinates **********************/ /************************************************************************/ void gal_dimension_add_coords(size_t *c1, size_t *c2, size_t *out, size_t ndim) { size_t *end=c1+ndim; do *out++ = *c1++ + *c2++; while(c1<end); } /* Return the index of an element from its coordinates. The index is the position in the contiguous array (assuming it is a 1D arrray). */ size_t gal_dimension_coord_to_index(size_t ndim, size_t *dsize, size_t *coord) { size_t i, d, ind=0, in_all_faster_dim; switch(ndim) { case 0: error(EXIT_FAILURE, 0, "%s: doesn't accept 0 dimensional arrays", __func__); case 1: ind=coord[0]; break; case 2: ind=coord[0]*dsize[1]+coord[1]; break; default: for(d=0;d<ndim;++d) { /* First, find the number of elements in all dimensions faster than this one. */ in_all_faster_dim=1; for(i=d+1;i<ndim;++i) in_all_faster_dim *= dsize[i]; /* Multiply it by the coordinate value of this dimension and add to the index. */ ind += coord[d] * in_all_faster_dim; } } /* Return the derived index. */ return ind; } /* You know the index ('ind') of a point/tile in an n-dimensional ('ndim') array which has 'dsize[i]' elements along dimension 'i'. You want to know the coordinates of that point along each dimension. The output is not actually returned, it must be allocated ('ndim' elements) before calling this function. This function will just fill it. The reason for this is that this function will often be called with a loop and a single allocated space would be enough for the whole loop. */ void gal_dimension_index_to_coord(size_t index, size_t ndim, size_t *dsize, size_t *coord) { size_t d, *dinc; switch(ndim) { case 0: error(EXIT_FAILURE, 0, "%s: a 0-dimensional dataset is not defined", __func__); /* One dimensional dataset. */ case 1: coord[0] = index; break; /* 2D dataset. */ case 2: coord[0] = index / dsize[1]; coord[1] = index % dsize[1]; break; /* Higher dimensional datasets. */ default: /* Set the incrementation values for each dimension. */ dinc=gal_dimension_increment(ndim, dsize); /* We start with the slowest dimension (first in the C standard) and continue until (but not including) the fastest dimension. This is because except for the fastest (coniguous) dimension, the other coordinates can be found by division. */ for(d=0;d<ndim;++d) { /* Set the coordinate value for this dimension. */ coord[d] = index / dinc[d]; /* Replace the index with its remainder with the number of elements in all faster dimensions. */ index %= dinc[d]; } /* Clean up. */ free(dinc); } } /************************************************************************/ /******************** Distances **********************/ /************************************************************************/ float gal_dimension_dist_manhattan(size_t *a, size_t *b, size_t ndim) { size_t i, out=0; for(i=0;i<ndim;++i) out += (a[i] > b[i]) ? (a[i]-b[i]) : (b[i]-a[i]); return out; } float gal_dimension_dist_radial(size_t *a, size_t *b, size_t ndim) { size_t i, out=0; for(i=0;i<ndim;++i) out += (a[i]-b[i])*(a[i]-b[i]); return sqrt(out); } /* Elliptical distance of a point from a given center. */ #define DEGREESTORADIANS M_PI/180.0 float gal_dimension_dist_elliptical(double *center, double *pa_deg, double *q, size_t ndim, double *point) { double Xr, Yr, Zr; /* Rotated x, y, z. */ double q1=q[0], q2; double c1=cos( pa_deg[0] * DEGREESTORADIANS ), c2, c3; double s1= sin( pa_deg[0] * DEGREESTORADIANS ), s2, s3; double x=center[0]-point[0], y=center[1]-point[1], z; /* Find the distance depending on the dimension. */ switch(ndim) { case 2: /* The parenthesis aren't necessary, but help in readability and avoiding human induced bugs. */ Xr = x * ( c1 ) + y * ( s1 ); Yr = x * ( -1.0f*s1 ) + y * ( c1 ); return sqrt( Xr*Xr + Yr*Yr/q1/q1 ); break; case 3: /* Define the necessary parameters. */ q2=q[1]; z=center[2]-point[2]; c2 = cos( pa_deg[1] * DEGREESTORADIANS ); s2 = sin( pa_deg[1] * DEGREESTORADIANS ); c3 = cos( pa_deg[2] * DEGREESTORADIANS ); s3 = sin( pa_deg[2] * DEGREESTORADIANS ); /* Calculate the distance. */ Xr = x*( c3*c1 - s3*c2*s1) + y*( c3*s1 + s3*c2*c1) + z*( s3*s2 ); Yr = x*(-1*s3*c1 - c3*c2*s1) + y*(-1*s3*s1 + c3*c2*c1) + z*( c3*s2 ); Zr = x*( s1*s2 ) + y*(-1*s2*c1 ) + z*( c2 ); return sqrt( Xr*Xr + Yr*Yr/q1/q1 + Zr*Zr/q2/q2 ); break; default: error(EXIT_FAILURE, 0, "%s: currently only 2 and 3 dimensional " "distances are supported, you have asked for an " "%zu-dimensional dataset", __func__, ndim); } /* Control should never reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to address " "the problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); return NAN; } /************************************************************************/ /******************** Collapsing a dimension **********************/ /************************************************************************/ enum dimension_collapse_operation { DIMENSION_COLLAPSE_INVALID, /* ==0 by C standard. */ DIMENSION_COLLAPSE_SUM, DIMENSION_COLLAPSE_MAX, DIMENSION_COLLAPSE_MIN, DIMENSION_COLLAPSE_MEAN, DIMENSION_COLLAPSE_MEDIAN, DIMENSION_COLLAPSE_NUMBER, DIMENSION_COLLAPSE_MADCLIP_MAD, DIMENSION_COLLAPSE_SIGCLIP_MAD, DIMENSION_COLLAPSE_MADCLIP_STD, DIMENSION_COLLAPSE_SIGCLIP_STD, DIMENSION_COLLAPSE_MADCLIP_MEAN, DIMENSION_COLLAPSE_SIGCLIP_MEAN, DIMENSION_COLLAPSE_MADCLIP_MEDIAN, DIMENSION_COLLAPSE_SIGCLIP_MEDIAN, DIMENSION_COLLAPSE_MADCLIP_NUMBER, DIMENSION_COLLAPSE_SIGCLIP_NUMBER, DIMENSION_COLLAPSE_MADCLIP_FILL_MAD, DIMENSION_COLLAPSE_SIGCLIP_FILL_MAD, DIMENSION_COLLAPSE_MADCLIP_FILL_STD, DIMENSION_COLLAPSE_SIGCLIP_FILL_STD, DIMENSION_COLLAPSE_MADCLIP_FILL_MEAN, DIMENSION_COLLAPSE_SIGCLIP_FILL_MEAN, DIMENSION_COLLAPSE_MADCLIP_FILL_MEDIAN, DIMENSION_COLLAPSE_SIGCLIP_FILL_MEDIAN, DIMENSION_COLLAPSE_MADCLIP_FILL_NUMBER, DIMENSION_COLLAPSE_SIGCLIP_FILL_NUMBER, }; static gal_data_t * dimension_collapse_sanity_check(gal_data_t *in, gal_data_t *weight, size_t c_dim, int hasblank, size_t *cnum, double **warr) { gal_data_t *wht=NULL; /* The requested dimension to collapse cannot be larger than the input's number of dimensions. */ if( c_dim > (in->ndim-1) ) error(EXIT_FAILURE, 0, "%s: the input has %zu dimension(s), but you " "have asked to collapse dimension %zu", __func__, in->ndim, c_dim); /* If there is no blank value, there is no point in calculating the number of points in each collapsed dataset (when necessary). In that case, 'cnum!=0'. */ if(hasblank==0) *cnum=in->dsize[c_dim]; /* Weight sanity checks. */ if(weight) { if( weight->ndim!=1 ) error(EXIT_FAILURE, 0, "%s: the weight dataset has %zu " "dimensions, it must be one-dimensional", __func__, weight->ndim); if( in->dsize[c_dim]!=weight->size ) error(EXIT_FAILURE, 0, "%s: the weight dataset has %zu elements, " "but the input dataset has %zu elements in dimension %zu", __func__, weight->size, in->dsize[c_dim], c_dim); wht = ( weight->type == GAL_TYPE_FLOAT64 ? weight : gal_data_copy_to_new_type(weight, GAL_TYPE_FLOAT64) ); *warr = wht->array; } /* Return the weight data structure. */ return wht; } /* Set the collapsed output sizes. */ static void dimension_collapse_sizes(gal_data_t *in, size_t c_dim, size_t *outndim, size_t *outdsize) { size_t i, a=0; if(in->ndim==1) *outndim=outdsize[0]=1; else { *outndim=in->ndim-1; for(i=0;i<in->ndim;++i) if(i!=c_dim) outdsize[a++]=in->dsize[i]; } } /* Depending on the operator, write the result into the output. */ #define COLLAPSE_WRITE(OIND,IIND) { \ /* Sum */ \ if(farr) \ farr[ OIND ] += (warr ? warr[w] : 1) * inarr[ IIND ]; \ \ /* Number */ \ if(iarr) \ { \ if(num->type==GAL_TYPE_UINT8) iarr[ OIND ] = 1; \ else ++iarr[ OIND ]; \ } \ \ /* Sum of weights. */ \ if(wsumarr) wsumarr[ OIND ] += warr[w]; \ \ /* Minimum or maximum. */ \ if(mmarr) \ mmarr[OIND] = ( max1_min0 \ ? (mmarr[OIND]>inarr[IIND]?mmarr[OIND]:inarr[IIND]) \ : (mmarr[OIND]<inarr[IIND]?mmarr[OIND]:inarr[IIND]) ); \ } /* Deal properly with blanks. */ #define COLLAPSE_CHECKBLANK(OIND,IIND) { \ if(hasblank) \ { \ if(B==B) /* An integer type: blank can be checked with '=='. */ \ { \ if( inarr[IIND] != B ) COLLAPSE_WRITE(OIND,IIND); \ } \ else /* A floating point type where NAN != NAN. */ \ { \ if( inarr[IIND] == inarr[IIND] ) COLLAPSE_WRITE(OIND,IIND); \ } \ } \ else COLLAPSE_WRITE(OIND,IIND); \ } #define COLLAPSE_DIM(IT) { \ IT m, B, *inarr=in->array, *mmarr=minmax?minmax->array:NULL; \ if(hasblank) gal_blank_write(&B, in->type); \ \ /* Initialize the array for minimum or maximum. */ \ if(mmarr) \ { \ if(max1_min0) gal_type_min(in->type, &m); \ else gal_type_max(in->type, &m); \ for(i=0;i<minmax->size;++i) mmarr[i]=m; \ } \ \ /* Collapse the dataset. */ \ switch(in->ndim) \ { \ /* 1D input dataset. */ \ case 1: \ for(i=0;i<in->dsize[0];++i) \ { \ if(weight) w=i; \ COLLAPSE_CHECKBLANK(0,i); \ } \ break; \ \ /* 2D input dataset. */ \ case 2: \ for(i=0;i<in->dsize[0];++i) \ for(j=0;j<in->dsize[1];++j) \ { \ /* In a more easy to understand format: \ dim==0 --> a=j; \ dim==1 --> a=i; */ \ a = c_dim==0 ? j : i; \ if(weight) w = c_dim == 0 ? i : j; \ COLLAPSE_CHECKBLANK(a, i*in->dsize[1] + j); \ } \ break; \ \ /* 3D input dataset. */ \ case 3: \ slice=in->dsize[1]*in->dsize[2]; \ for(i=0;i<in->dsize[0];++i) \ for(j=0;j<in->dsize[1];++j) \ for(k=0;k<in->dsize[2];++k) \ { \ /* In a more easy to understand format: \ dim==0 --> a=j; b=k; \ dim==1 --> a=i; b=k; \ dim==2 --> a=i; b=j; */ \ a = c_dim==0 ? j : i; \ b = c_dim==2 ? j : k; \ if(weight) w = c_dim==0 ? i : (c_dim==1 ? j : k); \ COLLAPSE_CHECKBLANK(a*outdsize[1]+b, \ i*slice + j*in->dsize[2] + k); \ } \ break; \ \ /* Input dataset's dimensionality not yet supported. */ \ default: \ error(EXIT_FAILURE, 0, "%s: %zu-dimensional datasets not yet " \ "supported, please contact us at %s to add this feature", \ __func__, in->ndim, PACKAGE_BUGREPORT); \ } \ \ /* For minimum or maximum, elements with no input must be blank. */ \ if(mmarr && iarr) \ for(i=0;i<minmax->size;++i) if(iarr[i]==0) mmarr[i]=B; \ } gal_data_t * gal_dimension_collapse_sum(gal_data_t *in, size_t c_dim, gal_data_t *weight) { int max1_min0=0; double *wsumarr=NULL; uint8_t *ii, *iarr=NULL; size_t a, b, i, j, k, w=-1, cnum=0; size_t outdsize[10], slice, outndim; int hasblank=gal_blank_present(in, 0); double *dd, *df, *warr=NULL, *farr=NULL; gal_data_t *sum=NULL, *wht=NULL, *num=NULL, *minmax=NULL; /* Basic sanity checks. */ wht=dimension_collapse_sanity_check(in, weight, c_dim, hasblank, &cnum, &warr); /* Set the size of the collapsed output. */ dimension_collapse_sizes(in, c_dim, &outndim, outdsize); /* Allocate the sum (output) dataset. */ sum=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, outndim, outdsize, in->wcs, 1, in->minmapsize, in->quietmmap, NULL, NULL, NULL); /* The number dataset (when there are blank values). */ if(hasblank) num=gal_data_alloc(NULL, GAL_TYPE_INT8, outndim, outdsize, NULL, 1, in->minmapsize, in->quietmmap, NULL, NULL, NULL); /* Set the array pointers. */ if(sum) farr=sum->array; if(num) iarr=num->array; /* Parse the dataset. */ switch(in->type) { case GAL_TYPE_UINT8: COLLAPSE_DIM( uint8_t ); break; case GAL_TYPE_INT8: COLLAPSE_DIM( int8_t ); break; case GAL_TYPE_UINT16: COLLAPSE_DIM( uint16_t ); break; case GAL_TYPE_INT16: COLLAPSE_DIM( int16_t ); break; case GAL_TYPE_UINT32: COLLAPSE_DIM( uint32_t ); break; case GAL_TYPE_INT32: COLLAPSE_DIM( int32_t ); break; case GAL_TYPE_UINT64: COLLAPSE_DIM( uint64_t ); break; case GAL_TYPE_INT64: COLLAPSE_DIM( int64_t ); break; case GAL_TYPE_FLOAT32: COLLAPSE_DIM( float ); break; case GAL_TYPE_FLOAT64: COLLAPSE_DIM( double ); break; default: error(EXIT_FAILURE, 0, "%s: type value (%d) not recognized", __func__, in->type); } /* If 'num' is zero on any element, set its sum to NaN. */ if(num) { ii = num->array; df = (dd=sum->array) + sum->size; do if(*ii++==0) *dd=NAN; while(++dd<df); } /* Remove the respective dimension in the WCS structure also (if any exists). Note that 'sum->ndim' has already been changed. So we'll use 'in->wcs'. */ gal_wcs_remove_dimension(sum->wcs, in->ndim-c_dim); /* Clean up and return. */ if(wht!=weight) gal_data_free(wht); if(num) gal_data_free(num); return sum; } gal_data_t * gal_dimension_collapse_mean(gal_data_t *in, size_t c_dim, gal_data_t *weight) { int max1_min0=0; double wsum=NAN; double *wsumarr=NULL; int32_t *ii, *iarr=NULL; size_t a, b, i, j, k, w=-1, cnum=0; size_t outdsize[10], slice, outndim; int hasblank=gal_blank_present(in, 0); double *dd, *dw, *df, *warr=NULL, *farr=NULL; gal_data_t *sum=NULL, *wht=NULL, *num=NULL, *minmax=NULL; /* Basic sanity checks. */ wht=dimension_collapse_sanity_check(in, weight, c_dim, hasblank, &cnum, &warr); /* Set the size of the collapsed output. */ dimension_collapse_sizes(in, c_dim, &outndim, outdsize); /* The sum array. */ sum=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, outndim, outdsize, in->wcs, 1, in->minmapsize, in->quietmmap, NULL, NULL, NULL); /* If a weighted mean is requested. */ if( weight ) { /* There are blank values, so we'll need to keep the sums of the weights for each collapsed dimension. */ if( hasblank ) wsumarr=gal_pointer_allocate(GAL_TYPE_FLOAT64, sum->size, 1, __func__, "wsumarr"); /* There aren't any blank values, so one summation over the weights is enough to calculate the weighted mean. */ else { wsum=0.0f; df=(dd=weight->array)+weight->size; do wsum += *dd++; while(dd<df); } } /* No weight is given, so we'll need the number of elements. */ else if( hasblank ) num=gal_data_alloc(NULL, GAL_TYPE_INT32, outndim, outdsize, NULL, 1, in->minmapsize, in->quietmmap, NULL, NULL, NULL); /* Set the array pointers. */ if(sum) farr=sum->array; if(num) iarr=num->array; /* Parse the dataset. */ switch(in->type) { case GAL_TYPE_UINT8: COLLAPSE_DIM( uint8_t ); break; case GAL_TYPE_INT8: COLLAPSE_DIM( int8_t ); break; case GAL_TYPE_UINT16: COLLAPSE_DIM( uint16_t ); break; case GAL_TYPE_INT16: COLLAPSE_DIM( int16_t ); break; case GAL_TYPE_UINT32: COLLAPSE_DIM( uint32_t ); break; case GAL_TYPE_INT32: COLLAPSE_DIM( int32_t ); break; case GAL_TYPE_UINT64: COLLAPSE_DIM( uint64_t ); break; case GAL_TYPE_INT64: COLLAPSE_DIM( int64_t ); break; case GAL_TYPE_FLOAT32: COLLAPSE_DIM( float ); break; case GAL_TYPE_FLOAT64: COLLAPSE_DIM( double ); break; default: error(EXIT_FAILURE, 0, "%s: type value (%d) not recognized", __func__, in->type); } /* If 'num' is zero on any element, set its sum to NaN. */ if(num) { ii = num->array; df = (dd=sum->array) + sum->size; do if(*ii++==0) *dd=NAN; while(++dd<df); } /* Divide the sum by the number. */ df = (dd=sum->array) + sum->size; if(weight) { if(hasblank) { dw=wsumarr; do *dd /= *dw++; while(++dd<df); } else do *dd /= wsum; while(++dd<df); } else if(num) { ii = num->array; do *dd /= *ii++; while(++dd<df); } else do *dd /= cnum; while(++dd<df); /* Correct the WCS, clean up and return. */ gal_wcs_remove_dimension(sum->wcs, in->ndim-c_dim); if(wht!=weight) gal_data_free(wht); if(wsumarr) free(wsumarr); gal_data_free(num); return sum; } gal_data_t * gal_dimension_collapse_number(gal_data_t *in, size_t c_dim) { int max1_min0=0; double *wsumarr=NULL; double *warr=NULL, *farr=NULL; int32_t *ii, *iif, *iarr=NULL; size_t a, b, i, j, k, w, cnum=0; size_t outdsize[10], slice, outndim; int hasblank=gal_blank_present(in, 0); gal_data_t *weight=NULL, *wht=NULL, *num=NULL, *minmax=NULL; /* Basic sanity checks. */ wht=dimension_collapse_sanity_check(in, weight, c_dim, hasblank, &cnum, &warr); /* Set the size of the collapsed output. */ dimension_collapse_sizes(in, c_dim, &outndim, outdsize); /* The number dataset (when there are blank values).*/ num=gal_data_alloc(NULL, GAL_TYPE_INT32, outndim, outdsize, in->wcs, 1, in->minmapsize, in->quietmmap, NULL, NULL, NULL); /* Set the array pointers. */ iarr=num->array; /* Parse the input dataset (if necessary). */ if(hasblank) switch(in->type) { case GAL_TYPE_UINT8: COLLAPSE_DIM( uint8_t ); break; case GAL_TYPE_INT8: COLLAPSE_DIM( int8_t ); break; case GAL_TYPE_UINT16: COLLAPSE_DIM( uint16_t ); break; case GAL_TYPE_INT16: COLLAPSE_DIM( int16_t ); break; case GAL_TYPE_UINT32: COLLAPSE_DIM( uint32_t ); break; case GAL_TYPE_INT32: COLLAPSE_DIM( int32_t ); break; case GAL_TYPE_UINT64: COLLAPSE_DIM( uint64_t ); break; case GAL_TYPE_INT64: COLLAPSE_DIM( int64_t ); break; case GAL_TYPE_FLOAT32: COLLAPSE_DIM( float ); break; case GAL_TYPE_FLOAT64: COLLAPSE_DIM( double ); break; default: error(EXIT_FAILURE, 0, "%s: type value (%d) not recognized", __func__, in->type); } else { iif=(ii=num->array)+num->size; do *ii++ = cnum; while(ii<iif); } /* Remove the respective dimension in the WCS structure also (if any exists). Note that 'sum->ndim' has already been changed. So we'll use 'in->wcs'. */ gal_wcs_remove_dimension(num->wcs, in->ndim-c_dim); /* Return. */ if(wht!=weight) gal_data_free(wht); return num; } gal_data_t * gal_dimension_collapse_minmax(gal_data_t *in, size_t c_dim, int max1_min0) { uint8_t *iarr=NULL; double *wsumarr=NULL; double *warr=NULL, *farr=NULL; size_t a, b, i, j, k, w, cnum=0; size_t outdsize[10], slice, outndim; int hasblank=gal_blank_present(in, 0); gal_data_t *weight=NULL, *wht=NULL, *num=NULL, *minmax=NULL; /* Basic sanity checks. */ wht=dimension_collapse_sanity_check(in, weight, c_dim, hasblank, &cnum, &warr); /* Set the size of the collapsed output. */ dimension_collapse_sizes(in, c_dim, &outndim, outdsize); /* Allocate the necessary datasets. If there are blank pixels, we'll need to count how many elements whent into the calculation so we can set them to blank. */ minmax=gal_data_alloc(NULL, in->type, outndim, outdsize, in->wcs, 0, in->minmapsize, in->quietmmap, NULL, NULL, NULL); if(hasblank) { num=gal_data_alloc(NULL, GAL_TYPE_UINT8, outndim, outdsize, in->wcs, 1, in->minmapsize, in->quietmmap, NULL, NULL, NULL); iarr=num->array; } /* Parse the input dataset (if necessary). */ switch(in->type) { case GAL_TYPE_UINT8: COLLAPSE_DIM( uint8_t ); break; case GAL_TYPE_INT8: COLLAPSE_DIM( int8_t ); break; case GAL_TYPE_UINT16: COLLAPSE_DIM( uint16_t ); break; case GAL_TYPE_INT16: COLLAPSE_DIM( int16_t ); break; case GAL_TYPE_UINT32: COLLAPSE_DIM( uint32_t ); break; case GAL_TYPE_INT32: COLLAPSE_DIM( int32_t ); break; case GAL_TYPE_UINT64: COLLAPSE_DIM( uint64_t ); break; case GAL_TYPE_INT64: COLLAPSE_DIM( int64_t ); break; case GAL_TYPE_FLOAT32: COLLAPSE_DIM( float ); break; case GAL_TYPE_FLOAT64: COLLAPSE_DIM( double ); break; default: error(EXIT_FAILURE, 0, "%s: type value (%d) not recognized", __func__, in->type); } /* Remove the respective dimension in the WCS structure also (if any exists). Note that 'minmax->ndim' has already been changed. So we'll use 'in->wcs'. */ gal_wcs_remove_dimension(minmax->wcs, in->ndim-c_dim); /* Clean up and return. */ if(wht!=weight) gal_data_free(wht); if(num) gal_data_free(num); return minmax; } /* This structure can keep all information you want to pass onto the worker function on each thread. */ struct dimension_sortbased_p { gal_data_t *in; /* Dataset to print values of. */ gal_data_t *out; /* Dataset to print values of. */ size_t c_dim; /* Dimension to collapse over. */ int operator; /* Operator to use. */ float sclipmultip; /* Sigma clip multiple. */ float sclipparam; /* Sigma clip parameter. */ size_t minmapsize; /* Minimum size for memorymapping. */ int quietmmap; /* If memorymapping should be quiet. */ }; static void dimension_csb_copy(gal_data_t *in, size_t from, gal_data_t *work, size_t to) { memcpy(gal_pointer_increment(work->array, to, in->type), gal_pointer_increment(in->array, from, in->type), gal_type_sizeof(in->type)); } static gal_data_t * dimension_collapse_sortbased_operation(struct dimension_sortbased_p *p, gal_data_t *work, uint8_t clipflags, uint8_t isfill) { gal_data_t *out=NULL; /* Do the operation. */ switch(p->operator) { case DIMENSION_COLLAPSE_MEDIAN: out=gal_statistics_median(work, 1); break; case DIMENSION_COLLAPSE_MADCLIP_MAD: case DIMENSION_COLLAPSE_MADCLIP_STD: case DIMENSION_COLLAPSE_MADCLIP_MEAN: case DIMENSION_COLLAPSE_MADCLIP_MEDIAN: case DIMENSION_COLLAPSE_MADCLIP_NUMBER: case DIMENSION_COLLAPSE_MADCLIP_FILL_MAD: case DIMENSION_COLLAPSE_MADCLIP_FILL_STD: case DIMENSION_COLLAPSE_MADCLIP_FILL_MEAN: case DIMENSION_COLLAPSE_MADCLIP_FILL_MEDIAN: case DIMENSION_COLLAPSE_MADCLIP_FILL_NUMBER: /* When we are dealing with a clip-fill operator, the order of the elements matter, so we don't want it to be done inplace.*/ out=gal_statistics_clip_mad(work, p->sclipmultip, p->sclipparam, clipflags, isfill?0:1, 1); break; case DIMENSION_COLLAPSE_SIGCLIP_MAD: case DIMENSION_COLLAPSE_SIGCLIP_STD: case DIMENSION_COLLAPSE_SIGCLIP_MEAN: case DIMENSION_COLLAPSE_SIGCLIP_MEDIAN: case DIMENSION_COLLAPSE_SIGCLIP_NUMBER: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MAD: case DIMENSION_COLLAPSE_SIGCLIP_FILL_STD: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MEAN: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MEDIAN: case DIMENSION_COLLAPSE_SIGCLIP_FILL_NUMBER: /* When we are dealing with a clip-fill operator, the order of the elements matter, so we don't want it to be done inplace.*/ out=gal_statistics_clip_sigma(work, p->sclipmultip, p->sclipparam, clipflags, isfill?0:1, 1); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to fix the problem. The operator code %d isn't " "recognized", __func__, PACKAGE_BUGREPORT, p->operator); } /* Return the output. */ return out; } static gal_data_t * dimension_collapse_sortbased_fill(struct dimension_sortbased_p *p, gal_data_t *fstat, gal_data_t *work, gal_data_t *conv, uint8_t clipflags, int check) { size_t one=1; int std1_mad0=0; float *farr=fstat->array; gal_data_t *formask=conv?conv:work, *out=NULL; gal_data_t *tmp, *multip, *upper, *lower, *center, *spread; int aflags=GAL_ARITHMETIC_FLAG_NUMOK; /* Don't free the inputs. */ /* Basic checks. */ switch(p->operator) { case DIMENSION_COLLAPSE_MADCLIP_FILL_MAD: case DIMENSION_COLLAPSE_MADCLIP_FILL_STD: case DIMENSION_COLLAPSE_MADCLIP_FILL_MEAN: case DIMENSION_COLLAPSE_MADCLIP_FILL_MEDIAN: case DIMENSION_COLLAPSE_MADCLIP_FILL_NUMBER: std1_mad0=0; break; case DIMENSION_COLLAPSE_SIGCLIP_FILL_MAD: case DIMENSION_COLLAPSE_SIGCLIP_FILL_STD: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MEAN: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MEDIAN: case DIMENSION_COLLAPSE_SIGCLIP_FILL_NUMBER: std1_mad0=1; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. The operator code '%d' is not recognized", __func__, PACKAGE_BUGREPORT, p->operator); } /* Convert the first clipped statistics ('fstat') into two datasets with the center and spread. */ center=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); spread=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); ((float *)(center->array))[0]=farr[GAL_STATISTICS_CLIP_OUTCOL_MEDIAN]; ((float *)(spread->array))[0]=farr[ std1_mad0 ? GAL_STATISTICS_CLIP_OUTCOL_STD : GAL_STATISTICS_CLIP_OUTCOL_MAD ]; /* Find the upper and lower thresholds based on the user's desired multiple. */ multip=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); ((float *)(multip->array))[0]=p->sclipmultip; tmp=gal_arithmetic(GAL_ARITHMETIC_OP_MULTIPLY, 1, aflags, spread, multip); upper=gal_arithmetic(GAL_ARITHMETIC_OP_PLUS, 1, aflags, center, tmp); lower=gal_arithmetic(GAL_ARITHMETIC_OP_MINUS, 1, aflags, center, tmp); gal_data_free(tmp); /* Build a flag with bad elements having a value of 1. For a 1D dataset, the largest possible "hole" size should be smaller than higher dimensionality data, because two elements that are very far from each other can create a very large "hole".*/ tmp=gal_arithmetic(GAL_ARITHMETIC_OP_OR, 1, aflags, gal_arithmetic(GAL_ARITHMETIC_OP_GT, 1, aflags, formask, upper), gal_arithmetic(GAL_ARITHMETIC_OP_LE, 1, aflags, formask, lower)); /* For a check (define 'int check' as an argument, and when calling this function, set 'index==XXX'). if(check) { size_t i; double *f=formask->array; uint8_t *u=tmp->array; for(i=0;i<formask->size;++i) printf("%-5zu %-5u %f\n", i, u[i], f[i]); printf("%s: upper:%f, lower: %f\n", __func__, ((float *)(upper->array))[0], ((float *)(lower->array))[0] ); } */ /* For a 1D array, do erosion because after filling holes, two single elements outside the range can mask a very large portion of the input. */ tmp = ( formask->ndim==1 ? gal_binary_erode(tmp, 1, 1, 1) : gal_binary_dilate(tmp, 1, 1, 1) ); gal_binary_holes_fill(tmp, formask->ndim, -1); tmp=gal_binary_erode(tmp, 2, formask->ndim, 1); tmp=gal_binary_dilate(tmp, formask->ndim==1?4:2, formask->ndim, 1); /* Apply the flag onto the input (to set the pixels to NaN). */ gal_blank_flag_apply(work, tmp); /* For a check (define 'int check' as an argument, and when calling this function, set 'index==XXX'). if(check) { size_t i; double *f=work->array; // CHECK THE TYPE OF YOUR INPUT uint8_t *u=tmp->array; for(i=0;i<work->size;++i) printf("%-5zu %-5u %f\n", i, u[i], f[i]); printf("%s: GOOD\n", __func__); exit(0); } */ /* Apply the operation: note that 'isfill' is zero here because we don't care about the order of elements any more ('isfill' is only used to do the operation inplace or not). */ out=dimension_collapse_sortbased_operation(p, work, clipflags, 0); /* Clean up and return. */ gal_data_free(tmp); gal_data_free(fstat); gal_data_free(upper); gal_data_free(lower); gal_data_free(multip); gal_data_free(center); gal_data_free(spread); return out; } gal_data_t * dimension_collapse_sortbased_conv(gal_data_t *work /*, int check*/) { float *karr; gal_data_t *in, *out, *kernel; size_t i, ksize[3]={3,3,3}; /* Extra dimensions will not be used. */ /* Set the input. */ in = ( work->type==GAL_TYPE_FLOAT32 ? work : gal_data_copy_to_new_type(work, GAL_TYPE_FLOAT32) ); /* Build a kernel and fill it with equal values (so their sum is 1). */ kernel=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, work->ndim, ksize, NULL, 0, -1, 1, NULL, NULL, NULL); karr=kernel->array; for(i=0;i<kernel->size;++i) karr[i]=1.0/kernel->size; /* Convolve the work array with the given kernel. */ out=gal_convolve_spatial(in, kernel, 1, 1, 0, 1); /* For a check. if(check) { float *ia=in->array, *oa=out->array; for(i=0;i<in->size;++i) printf("%-5zu %-10.3f %-10.3f\n", i, ia[i], oa[i]); } */ /* Clean up and return. */ if(in!=work) gal_data_free(in); gal_data_free(kernel); return out; } static void * dimension_collapse_sortbased_worker(void *in_prm) { /* Low-level definitions to be done first. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct dimension_sortbased_p *p=(struct dimension_sortbased_p *)tprm->params; /* Input dataset (also used in other variable definitions). */ gal_data_t *in=p->in; /* Subsequent definitions. */ uint8_t clipflags=0, isfill=0; size_t a, b, c, sind=GAL_BLANK_SIZE_T; gal_data_t *work, *conv=NULL, *stat=NULL; size_t i, j, index, c_dim=p->c_dim, wdsize=in->dsize[c_dim]; /* Allocate the dataset that will be sorted. */ work=gal_data_alloc(NULL, in->type, 1, &wdsize, NULL, 0, p->minmapsize, p->quietmmap, NULL, NULL, NULL); /* Some things are unique for fill-based operators. */ switch(p->operator) { case DIMENSION_COLLAPSE_MADCLIP_FILL_MAD: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MAD: case DIMENSION_COLLAPSE_MADCLIP_FILL_STD: case DIMENSION_COLLAPSE_SIGCLIP_FILL_STD: case DIMENSION_COLLAPSE_MADCLIP_FILL_MEAN: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MEAN: case DIMENSION_COLLAPSE_MADCLIP_FILL_MEDIAN: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MEDIAN: case DIMENSION_COLLAPSE_MADCLIP_FILL_NUMBER: case DIMENSION_COLLAPSE_SIGCLIP_FILL_NUMBER: isfill=1; break; } /* Go over all the actions (pixels in this case) that were assigned to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ index = tprm->indexs[i]; /* Reset the sizes (which may have been changed during the statistical calculation), and flags (so the possible existance or non-existance of blank values in one run doesn't affect the next). */ work->flag=0; work->size=work->dsize[0]=wdsize; /* Extract the necessary components into an array. */ switch(in->ndim) { /* One-dimensional data. */ case 1: memcpy(work->array, in->array, in->size*gal_type_sizeof(in->type)); break; /* Two dimensional data. */ case 2: a=in->dsize[0]; b=in->dsize[1]; if(c_dim) /* c_dim==1 dim. to collapse, already contiguous. */ memcpy(work->array, gal_pointer_increment(in->array, index*b, in->type), b*gal_type_sizeof(in->type)); else /* c_dim==0 */ for(j=0;j<a;++j) dimension_csb_copy(in, j*b+index, work, j); break; /* Three dimensional data. */ case 3: a=in->dsize[0]; b=in->dsize[1]; c=in->dsize[2]; switch(c_dim) { case 0: for(j=0;j<a;++j) dimension_csb_copy(in, j*b*c+index, work, j); break; case 1: for(j=0;j<b;++j) dimension_csb_copy(in, (index/c)*b*c+j*c+(index%c), work, j); break; case 2: /* Fastest dimension: contiguous in memory. */ memcpy(work->array, gal_pointer_increment(in->array, (index/b)*b*c+(index%b)*c, in->type), c*gal_type_sizeof(in->type)); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at " "'%s' to solve the problem. The dimension counter " "%zu isn't recognized for a 3D dataset", __func__, PACKAGE_BUGREPORT, c_dim); } break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to find the cause. This function doesn't support %zu " "dimensions", __func__, PACKAGE_BUGREPORT, in->ndim); } /* For a check if(index==250) { double *f=work->array; for(j=0;j<wdsize;++j) printf("%zu %f\n", j, f[j]); printf("%s: GOOD\n", __func__); //exit(0); } */ /* Set the necessary flag for extra calculation during sigma-clipping (this is not necessary for some). */ switch(p->operator) { case DIMENSION_COLLAPSE_MADCLIP_STD: case DIMENSION_COLLAPSE_MADCLIP_FILL_STD: clipflags=GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD; break; case DIMENSION_COLLAPSE_SIGCLIP_MAD: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MAD: clipflags=GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MAD; break; case DIMENSION_COLLAPSE_MADCLIP_MEAN: case DIMENSION_COLLAPSE_SIGCLIP_MEAN: case DIMENSION_COLLAPSE_MADCLIP_FILL_MEAN: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MEAN: clipflags=GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN; break; } /* Create a convolved image (currently disabled, because 'work' will always be non-NULL, kept for further investigation later!). */ conv=work?NULL:dimension_collapse_sortbased_conv(work); /* Do the necessary statistical operation. */ stat=dimension_collapse_sortbased_operation(p, conv?conv:work, clipflags, isfill); /* If this is a "filling" operation, then repeat the operation with the fill. */ if(isfill) stat=dimension_collapse_sortbased_fill(p, stat, work, conv, clipflags, index==-1); /* Set the index in the output 'stat' array. These can't be set in the main operation 'switch' because the functions are different, while 'sind' is the same. Note also that this should be done after the actual operation because some operators need to correct the type. */ switch(p->operator) { case DIMENSION_COLLAPSE_MEDIAN: stat=gal_data_copy_to_new_type_free(stat, GAL_TYPE_FLOAT32); sind=0; break; case DIMENSION_COLLAPSE_MADCLIP_MAD: case DIMENSION_COLLAPSE_SIGCLIP_MAD: case DIMENSION_COLLAPSE_MADCLIP_FILL_MAD: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MAD: sind=GAL_STATISTICS_CLIP_OUTCOL_MAD; break; case DIMENSION_COLLAPSE_MADCLIP_STD: case DIMENSION_COLLAPSE_SIGCLIP_STD: case DIMENSION_COLLAPSE_MADCLIP_FILL_STD: case DIMENSION_COLLAPSE_SIGCLIP_FILL_STD: sind=GAL_STATISTICS_CLIP_OUTCOL_STD; break; case DIMENSION_COLLAPSE_MADCLIP_MEAN: case DIMENSION_COLLAPSE_SIGCLIP_MEAN: case DIMENSION_COLLAPSE_MADCLIP_FILL_MEAN: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MEAN: sind=GAL_STATISTICS_CLIP_OUTCOL_MEAN; break; case DIMENSION_COLLAPSE_MADCLIP_MEDIAN: case DIMENSION_COLLAPSE_SIGCLIP_MEDIAN: case DIMENSION_COLLAPSE_MADCLIP_FILL_MEDIAN: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MEDIAN: sind=GAL_STATISTICS_CLIP_OUTCOL_MEDIAN; break; case DIMENSION_COLLAPSE_MADCLIP_NUMBER: case DIMENSION_COLLAPSE_SIGCLIP_NUMBER: case DIMENSION_COLLAPSE_MADCLIP_FILL_NUMBER: case DIMENSION_COLLAPSE_SIGCLIP_FILL_NUMBER: stat=gal_data_copy_to_new_type_free(stat, GAL_TYPE_UINT32); sind=GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to fix the problem. The operator code '%d' is not " "recognized when writing the output", __func__, PACKAGE_BUGREPORT, p->operator); } /* Copy the result from the statistics output into the output array on the desired index, then free the 'stat' array. */ memcpy(gal_pointer_increment(p->out->array, index, p->out->type), gal_pointer_increment(stat->array, sind, stat->type), gal_type_sizeof(stat->type)); gal_data_free(stat); } /* Clean up. */ gal_data_free(work); /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } static gal_data_t * dimension_collapse_sortbased(gal_data_t *in, size_t c_dim, int operator, float sclipmultip, float sclipparam, size_t numthreads, size_t minmapsize, int quietmmap) { size_t cnum=0; gal_data_t *out; double *warr=NULL; int otype=GAL_TYPE_INVALID; size_t outdsize[10], outndim; struct dimension_sortbased_p p; /* During the median calculation, blank elements will automatically be removed. */ int hasblank=0; /* Basic sanity checks. */ if( dimension_collapse_sanity_check(in, NULL, c_dim, hasblank, &cnum, &warr)!=NULL ) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to fix " "the problem. This functions should always return NULL here", __func__, PACKAGE_BUGREPORT); /* Set the size of the collapsed output. */ dimension_collapse_sizes(in, c_dim, &outndim, outdsize); /* The output array (and its type). */ switch(operator) { case DIMENSION_COLLAPSE_MADCLIP_NUMBER: case DIMENSION_COLLAPSE_SIGCLIP_NUMBER: case DIMENSION_COLLAPSE_MADCLIP_FILL_NUMBER: case DIMENSION_COLLAPSE_SIGCLIP_FILL_NUMBER: otype=GAL_TYPE_UINT32; break; case DIMENSION_COLLAPSE_MEDIAN: case DIMENSION_COLLAPSE_MADCLIP_MAD: case DIMENSION_COLLAPSE_SIGCLIP_MAD: case DIMENSION_COLLAPSE_MADCLIP_STD: case DIMENSION_COLLAPSE_SIGCLIP_STD: case DIMENSION_COLLAPSE_MADCLIP_MEAN: case DIMENSION_COLLAPSE_SIGCLIP_MEAN: case DIMENSION_COLLAPSE_MADCLIP_MEDIAN: case DIMENSION_COLLAPSE_SIGCLIP_MEDIAN: case DIMENSION_COLLAPSE_MADCLIP_FILL_MAD: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MAD: case DIMENSION_COLLAPSE_MADCLIP_FILL_STD: case DIMENSION_COLLAPSE_SIGCLIP_FILL_STD: case DIMENSION_COLLAPSE_MADCLIP_FILL_MEAN: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MEAN: case DIMENSION_COLLAPSE_MADCLIP_FILL_MEDIAN: case DIMENSION_COLLAPSE_SIGCLIP_FILL_MEDIAN: otype=GAL_TYPE_FLOAT32; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' " "to fix the problem. The operator code %d is not a " "recognized operator ID", __func__, PACKAGE_BUGREPORT, operator); } out=gal_data_alloc(NULL, otype, outndim, outdsize, in->wcs, 1, in->minmapsize, in->quietmmap, NULL, NULL, NULL); /* Spin-off the threads and do the processing on each thread. */ p.in=in; p.out=out; p.c_dim=c_dim; p.operator=operator; p.quietmmap=quietmmap; p.minmapsize=minmapsize; p.sclipparam=sclipparam; p.sclipmultip=sclipmultip; gal_threads_spin_off(dimension_collapse_sortbased_worker, &p, out->size, numthreads, minmapsize, quietmmap); /* Remove the respective dimension in the WCS structure also (if any exists). Note that 'out->ndim' has already been changed. So we'll use 'in->wcs'. */ gal_wcs_remove_dimension(out->wcs, in->ndim-c_dim); /* Return the collapsed dataset. */ return out; } gal_data_t * gal_dimension_collapse_median(gal_data_t *in, size_t c_dim, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_MEDIAN; return dimension_collapse_sortbased(in, c_dim, op, NAN, NAN, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_mclip_mad(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_MADCLIP_MAD; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_mclip_fill_mad(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_MADCLIP_FILL_MAD; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_mclip_std(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_MADCLIP_STD; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_mclip_fill_std(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_MADCLIP_FILL_STD; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_mclip_mean(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_MADCLIP_MEAN; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_mclip_fill_mean(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_MADCLIP_FILL_MEAN; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_mclip_median(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_MADCLIP_MEDIAN; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_mclip_fill_median(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_MADCLIP_FILL_MEDIAN; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_mclip_number(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_MADCLIP_NUMBER; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_mclip_fill_number(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_MADCLIP_FILL_NUMBER; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_sclip_mad(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_SIGCLIP_MAD; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_sclip_fill_mad(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_SIGCLIP_FILL_MAD; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_sclip_std(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_SIGCLIP_STD; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_sclip_fill_std(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_SIGCLIP_FILL_STD; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_sclip_mean(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_SIGCLIP_MEAN; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_sclip_fill_mean(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_SIGCLIP_FILL_MEAN; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_sclip_median(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_SIGCLIP_MEDIAN; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_sclip_fill_median(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_SIGCLIP_FILL_MEDIAN; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_sclip_number(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_SIGCLIP_NUMBER; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } gal_data_t * gal_dimension_collapse_sclip_fill_number(gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) { int op=DIMENSION_COLLAPSE_SIGCLIP_FILL_NUMBER; return dimension_collapse_sortbased(in, c_dim, op, multip, param, numthreads, minmapsize, quietmmap); } /************************************************************************/ /******************** Other **********************/ /************************************************************************/ size_t gal_dimension_remove_extra(size_t ndim, size_t *dsize, struct wcsprm *wcs) { size_t i, j; for(i=0;i<ndim;++i) if(dsize[i]==1) { /* Correct the WCS. */ if(wcs) gal_wcs_remove_dimension(wcs, ndim-i); /* Shift all subsequent dimensions to replace this one. */ for(j=i;j<ndim-1;++j) dsize[j]=dsize[j+1]; /* Decrement the 'i' and the total number of dimension. */ --i; --ndim; } /* Return the number of dimensions. */ return ndim; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/speclines.c�����������������������������������������������������������������������0000644�0001750�0001750�00000170373�14551337306�011701� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Spectral lines. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2019-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnuastro/speclines.h> /*********************************************************************/ /************* Internal names and codes ***************/ /*********************************************************************/ /* Return line's name as literal string. */ char * gal_speclines_line_name(int linecode) { switch(linecode) { case GAL_SPECLINES_Ne_VIII_770: return GAL_SPECLINES_NAME_Ne_VIII_770; case GAL_SPECLINES_Ne_VIII_780: return GAL_SPECLINES_NAME_Ne_VIII_780; case GAL_SPECLINES_Ly_epsilon: return GAL_SPECLINES_NAME_Ly_epsilon; case GAL_SPECLINES_Ly_delta: return GAL_SPECLINES_NAME_Ly_delta; case GAL_SPECLINES_Ly_gamma: return GAL_SPECLINES_NAME_Ly_gamma; case GAL_SPECLINES_C_III_977: return GAL_SPECLINES_NAME_C_III_977; case GAL_SPECLINES_N_III_989: return GAL_SPECLINES_NAME_N_III_989; case GAL_SPECLINES_N_III_991_51: return GAL_SPECLINES_NAME_N_III_991_51; case GAL_SPECLINES_N_III_991_57: return GAL_SPECLINES_NAME_N_III_991_57; case GAL_SPECLINES_Ly_beta: return GAL_SPECLINES_NAME_Ly_beta; case GAL_SPECLINES_O_VI_1031: return GAL_SPECLINES_NAME_O_VI_1031; case GAL_SPECLINES_O_VI_1037: return GAL_SPECLINES_NAME_O_VI_1037; case GAL_SPECLINES_Ar_I_1066: return GAL_SPECLINES_NAME_Ar_I_1066; case GAL_SPECLINES_Ly_alpha: return GAL_SPECLINES_NAME_Ly_alpha; case GAL_SPECLINES_N_V_1238: return GAL_SPECLINES_NAME_N_V_1238; case GAL_SPECLINES_N_V_1242: return GAL_SPECLINES_NAME_N_V_1242; case GAL_SPECLINES_Si_II_1260: return GAL_SPECLINES_NAME_Si_II_1260; case GAL_SPECLINES_Si_II_1264: return GAL_SPECLINES_NAME_Si_II_1264; case GAL_SPECLINES_O_I_1302: return GAL_SPECLINES_NAME_O_I_1302; case GAL_SPECLINES_C_II_1334: return GAL_SPECLINES_NAME_C_II_1334; case GAL_SPECLINES_C_II_1335: return GAL_SPECLINES_NAME_C_II_1335; case GAL_SPECLINES_Si_IV_1393: return GAL_SPECLINES_NAME_Si_IV_1393; case GAL_SPECLINES_O_IV_1397: return GAL_SPECLINES_NAME_O_IV_1397; case GAL_SPECLINES_O_IV_1399: return GAL_SPECLINES_NAME_O_IV_1399; case GAL_SPECLINES_Si_IV_1402: return GAL_SPECLINES_NAME_Si_IV_1402; case GAL_SPECLINES_N_IV_1486: return GAL_SPECLINES_NAME_N_IV_1486; case GAL_SPECLINES_C_IV_1548: return GAL_SPECLINES_NAME_C_IV_1548; case GAL_SPECLINES_C_IV_1550: return GAL_SPECLINES_NAME_C_IV_1550; case GAL_SPECLINES_He_II_1640: return GAL_SPECLINES_NAME_He_II_1640; case GAL_SPECLINES_O_III_1660: return GAL_SPECLINES_NAME_O_III_1660; case GAL_SPECLINES_O_III_1666: return GAL_SPECLINES_NAME_O_III_1666; case GAL_SPECLINES_N_III_1746: return GAL_SPECLINES_NAME_N_III_1746; case GAL_SPECLINES_N_III_1748: return GAL_SPECLINES_NAME_N_III_1748; case GAL_SPECLINES_Al_III_1854: return GAL_SPECLINES_NAME_Al_III_1854; case GAL_SPECLINES_Al_III_1862: return GAL_SPECLINES_NAME_Al_III_1862; case GAL_SPECLINES_Si_III: return GAL_SPECLINES_NAME_Si_III; case GAL_SPECLINES_C_III_1908: return GAL_SPECLINES_NAME_C_III_1908; case GAL_SPECLINES_N_II_2142: return GAL_SPECLINES_NAME_N_II_2142; case GAL_SPECLINES_O_III_2320: return GAL_SPECLINES_NAME_O_III_2320; case GAL_SPECLINES_C_II_2323: return GAL_SPECLINES_NAME_C_II_2323; case GAL_SPECLINES_C_II_2324: return GAL_SPECLINES_NAME_C_II_2324; case GAL_SPECLINES_Fe_XI_2648: return GAL_SPECLINES_NAME_Fe_XI_2648; case GAL_SPECLINES_He_II_2733: return GAL_SPECLINES_NAME_He_II_2733; case GAL_SPECLINES_Mg_V_2782: return GAL_SPECLINES_NAME_Mg_V_2782; case GAL_SPECLINES_Mg_II_2795: return GAL_SPECLINES_NAME_Mg_II_2795; case GAL_SPECLINES_Mg_II_2802: return GAL_SPECLINES_NAME_Mg_II_2802; case GAL_SPECLINES_Fe_IV_2829: return GAL_SPECLINES_NAME_Fe_IV_2829; case GAL_SPECLINES_Fe_IV_2835: return GAL_SPECLINES_NAME_Fe_IV_2835; case GAL_SPECLINES_Ar_IV_2853: return GAL_SPECLINES_NAME_Ar_IV_2853; case GAL_SPECLINES_Ar_IV_2868: return GAL_SPECLINES_NAME_Ar_IV_2868; case GAL_SPECLINES_Mg_V_2928: return GAL_SPECLINES_NAME_Mg_V_2928; case GAL_SPECLINES_He_I_2945: return GAL_SPECLINES_NAME_He_I_2945; case GAL_SPECLINES_O_III_3132: return GAL_SPECLINES_NAME_O_III_3132; case GAL_SPECLINES_He_I_3187: return GAL_SPECLINES_NAME_He_I_3187; case GAL_SPECLINES_He_II_3203: return GAL_SPECLINES_NAME_He_II_3203; case GAL_SPECLINES_O_III_3312: return GAL_SPECLINES_NAME_O_III_3312; case GAL_SPECLINES_Ne_V_3345: return GAL_SPECLINES_NAME_Ne_V_3345; case GAL_SPECLINES_Ne_V_3425: return GAL_SPECLINES_NAME_Ne_V_3425; case GAL_SPECLINES_O_III_3444: return GAL_SPECLINES_NAME_O_III_3444; case GAL_SPECLINES_N_I_3466_4: return GAL_SPECLINES_NAME_N_I_3466_4; case GAL_SPECLINES_N_I_3466_5: return GAL_SPECLINES_NAME_N_I_3466_5; case GAL_SPECLINES_He_I_3487: return GAL_SPECLINES_NAME_He_I_3487; case GAL_SPECLINES_Fe_VII_3586: return GAL_SPECLINES_NAME_Fe_VII_3586; case GAL_SPECLINES_Fe_VI_3662: return GAL_SPECLINES_NAME_Fe_VI_3662; case GAL_SPECLINES_H_19: return GAL_SPECLINES_NAME_H_19; case GAL_SPECLINES_H_18: return GAL_SPECLINES_NAME_H_18; case GAL_SPECLINES_H_17: return GAL_SPECLINES_NAME_H_17; case GAL_SPECLINES_H_16: return GAL_SPECLINES_NAME_H_16; case GAL_SPECLINES_H_15: return GAL_SPECLINES_NAME_H_15; case GAL_SPECLINES_H_14: return GAL_SPECLINES_NAME_H_14; case GAL_SPECLINES_O_II_3726: return GAL_SPECLINES_NAME_O_II_3726; case GAL_SPECLINES_O_II_3728: return GAL_SPECLINES_NAME_O_II_3728; case GAL_SPECLINES_H_13: return GAL_SPECLINES_NAME_H_13; case GAL_SPECLINES_H_12: return GAL_SPECLINES_NAME_H_12; case GAL_SPECLINES_Fe_VII_3758: return GAL_SPECLINES_NAME_Fe_VII_3758; case GAL_SPECLINES_H_11: return GAL_SPECLINES_NAME_H_11; case GAL_SPECLINES_H_10: return GAL_SPECLINES_NAME_H_10; case GAL_SPECLINES_H_9: return GAL_SPECLINES_NAME_H_9; case GAL_SPECLINES_Fe_V_3839: return GAL_SPECLINES_NAME_Fe_V_3839; case GAL_SPECLINES_Ne_III_3868: return GAL_SPECLINES_NAME_Ne_III_3868; case GAL_SPECLINES_He_I_3888: return GAL_SPECLINES_NAME_He_I_3888; case GAL_SPECLINES_H_8: return GAL_SPECLINES_NAME_H_8; case GAL_SPECLINES_Fe_V_3891: return GAL_SPECLINES_NAME_Fe_V_3891; case GAL_SPECLINES_Fe_V_3911: return GAL_SPECLINES_NAME_Fe_V_3911; case GAL_SPECLINES_Ne_III_3967: return GAL_SPECLINES_NAME_Ne_III_3967; case GAL_SPECLINES_H_epsilon: return GAL_SPECLINES_NAME_H_epsilon; case GAL_SPECLINES_He_I_4026: return GAL_SPECLINES_NAME_He_I_4026; case GAL_SPECLINES_S_II_4068: return GAL_SPECLINES_NAME_S_II_4068; case GAL_SPECLINES_Fe_V_4071: return GAL_SPECLINES_NAME_Fe_V_4071; case GAL_SPECLINES_S_II_4076: return GAL_SPECLINES_NAME_S_II_4076; case GAL_SPECLINES_H_delta: return GAL_SPECLINES_NAME_H_delta; case GAL_SPECLINES_He_I_4143: return GAL_SPECLINES_NAME_He_I_4143; case GAL_SPECLINES_Fe_II_4178: return GAL_SPECLINES_NAME_Fe_II_4178; case GAL_SPECLINES_Fe_V_4180: return GAL_SPECLINES_NAME_Fe_V_4180; case GAL_SPECLINES_Fe_II_4233: return GAL_SPECLINES_NAME_Fe_II_4233; case GAL_SPECLINES_Fe_V_4227: return GAL_SPECLINES_NAME_Fe_V_4227; case GAL_SPECLINES_Fe_II_4287: return GAL_SPECLINES_NAME_Fe_II_4287; case GAL_SPECLINES_Fe_II_4304: return GAL_SPECLINES_NAME_Fe_II_4304; case GAL_SPECLINES_O_II_4317: return GAL_SPECLINES_NAME_O_II_4317; case GAL_SPECLINES_H_gamma: return GAL_SPECLINES_NAME_H_gamma; case GAL_SPECLINES_O_III_4363: return GAL_SPECLINES_NAME_O_III_4363; case GAL_SPECLINES_Ar_XIV: return GAL_SPECLINES_NAME_Ar_XIV; case GAL_SPECLINES_O_II_4414: return GAL_SPECLINES_NAME_O_II_4414; case GAL_SPECLINES_Fe_II_4416: return GAL_SPECLINES_NAME_Fe_II_4416; case GAL_SPECLINES_Fe_II_4452: return GAL_SPECLINES_NAME_Fe_II_4452; case GAL_SPECLINES_He_I_4471: return GAL_SPECLINES_NAME_He_I_4471; case GAL_SPECLINES_Fe_II_4489: return GAL_SPECLINES_NAME_Fe_II_4489; case GAL_SPECLINES_Fe_II_4491: return GAL_SPECLINES_NAME_Fe_II_4491; case GAL_SPECLINES_N_III_4510: return GAL_SPECLINES_NAME_N_III_4510; case GAL_SPECLINES_Fe_II_4522: return GAL_SPECLINES_NAME_Fe_II_4522; case GAL_SPECLINES_Fe_II_4555: return GAL_SPECLINES_NAME_Fe_II_4555; case GAL_SPECLINES_Fe_II_4582: return GAL_SPECLINES_NAME_Fe_II_4582; case GAL_SPECLINES_Fe_II_4583: return GAL_SPECLINES_NAME_Fe_II_4583; case GAL_SPECLINES_Fe_II_4629: return GAL_SPECLINES_NAME_Fe_II_4629; case GAL_SPECLINES_N_III_4634: return GAL_SPECLINES_NAME_N_III_4634; case GAL_SPECLINES_N_III_4640: return GAL_SPECLINES_NAME_N_III_4640; case GAL_SPECLINES_N_III_4641: return GAL_SPECLINES_NAME_N_III_4641; case GAL_SPECLINES_C_III_4647: return GAL_SPECLINES_NAME_C_III_4647; case GAL_SPECLINES_C_III_4650: return GAL_SPECLINES_NAME_C_III_4650; case GAL_SPECLINES_C_III_5651: return GAL_SPECLINES_NAME_C_III_5651; case GAL_SPECLINES_Fe_III_4658: return GAL_SPECLINES_NAME_Fe_III_4658; case GAL_SPECLINES_He_II_4685: return GAL_SPECLINES_NAME_He_II_4685; case GAL_SPECLINES_Ar_IV_4711: return GAL_SPECLINES_NAME_Ar_IV_4711; case GAL_SPECLINES_Ar_IV_4740: return GAL_SPECLINES_NAME_Ar_IV_4740; case GAL_SPECLINES_H_beta: return GAL_SPECLINES_NAME_H_beta; case GAL_SPECLINES_Fe_VII_4893: return GAL_SPECLINES_NAME_Fe_VII_4893; case GAL_SPECLINES_Fe_IV_4903: return GAL_SPECLINES_NAME_Fe_IV_4903; case GAL_SPECLINES_Fe_II_4923: return GAL_SPECLINES_NAME_Fe_II_4923; case GAL_SPECLINES_O_III_4958: return GAL_SPECLINES_NAME_O_III_4958; case GAL_SPECLINES_O_III_5006: return GAL_SPECLINES_NAME_O_III_5006; case GAL_SPECLINES_Fe_II_5018: return GAL_SPECLINES_NAME_Fe_II_5018; case GAL_SPECLINES_Fe_III_5084: return GAL_SPECLINES_NAME_Fe_III_5084; case GAL_SPECLINES_Fe_VI_5145: return GAL_SPECLINES_NAME_Fe_VI_5145; case GAL_SPECLINES_Fe_VII_5158: return GAL_SPECLINES_NAME_Fe_VII_5158; case GAL_SPECLINES_Fe_II_5169: return GAL_SPECLINES_NAME_Fe_II_5169; case GAL_SPECLINES_Fe_VI_5176: return GAL_SPECLINES_NAME_Fe_VI_5176; case GAL_SPECLINES_Fe_II_5197: return GAL_SPECLINES_NAME_Fe_II_5197; case GAL_SPECLINES_N_I_5200: return GAL_SPECLINES_NAME_N_I_5200; case GAL_SPECLINES_Fe_II_5234: return GAL_SPECLINES_NAME_Fe_II_5234; case GAL_SPECLINES_Fe_IV_5236: return GAL_SPECLINES_NAME_Fe_IV_5236; case GAL_SPECLINES_Fe_III_5270: return GAL_SPECLINES_NAME_Fe_III_5270; case GAL_SPECLINES_Fe_II_5276: return GAL_SPECLINES_NAME_Fe_II_5276; case GAL_SPECLINES_Fe_VII_5276: return GAL_SPECLINES_NAME_Fe_VII_5276; case GAL_SPECLINES_Fe_XIV: return GAL_SPECLINES_NAME_Fe_XIV; case GAL_SPECLINES_Ca_V: return GAL_SPECLINES_NAME_Ca_V; case GAL_SPECLINES_Fe_II_5316_6: return GAL_SPECLINES_NAME_Fe_II_5316_6; case GAL_SPECLINES_Fe_II_5316_7: return GAL_SPECLINES_NAME_Fe_II_5316_7; case GAL_SPECLINES_Fe_VI_5335: return GAL_SPECLINES_NAME_Fe_VI_5335; case GAL_SPECLINES_Fe_VI_5424: return GAL_SPECLINES_NAME_Fe_VI_5424; case GAL_SPECLINES_Cl_III_5517: return GAL_SPECLINES_NAME_Cl_III_5517; case GAL_SPECLINES_Cl_III_5537: return GAL_SPECLINES_NAME_Cl_III_5537; case GAL_SPECLINES_Fe_VI_5637: return GAL_SPECLINES_NAME_Fe_VI_5637; case GAL_SPECLINES_Fe_VI_5677: return GAL_SPECLINES_NAME_Fe_VI_5677; case GAL_SPECLINES_C_III_5697: return GAL_SPECLINES_NAME_C_III_5697; case GAL_SPECLINES_Fe_VII_5720: return GAL_SPECLINES_NAME_Fe_VII_5720; case GAL_SPECLINES_N_II_5754: return GAL_SPECLINES_NAME_N_II_5754; case GAL_SPECLINES_C_IV_5801: return GAL_SPECLINES_NAME_C_IV_5801; case GAL_SPECLINES_C_IV_5811: return GAL_SPECLINES_NAME_C_IV_5811; case GAL_SPECLINES_He_I_5875: return GAL_SPECLINES_NAME_He_I_5875; case GAL_SPECLINES_O_I_6046: return GAL_SPECLINES_NAME_O_I_6046; case GAL_SPECLINES_Fe_VII_6087: return GAL_SPECLINES_NAME_Fe_VII_6087; case GAL_SPECLINES_O_I_6300: return GAL_SPECLINES_NAME_O_I_6300; case GAL_SPECLINES_S_III_6312: return GAL_SPECLINES_NAME_S_III_6312; case GAL_SPECLINES_Si_II_6347: return GAL_SPECLINES_NAME_Si_II_6347; case GAL_SPECLINES_O_I_6363: return GAL_SPECLINES_NAME_O_I_6363; case GAL_SPECLINES_Fe_II_6369: return GAL_SPECLINES_NAME_Fe_II_6369; case GAL_SPECLINES_Fe_X: return GAL_SPECLINES_NAME_Fe_X; case GAL_SPECLINES_Fe_II_6516: return GAL_SPECLINES_NAME_Fe_II_6516; case GAL_SPECLINES_N_II_6548: return GAL_SPECLINES_NAME_N_II_6548; case GAL_SPECLINES_H_alpha: return GAL_SPECLINES_NAME_H_alpha; case GAL_SPECLINES_N_II_6583: return GAL_SPECLINES_NAME_N_II_6583; case GAL_SPECLINES_S_II_6716: return GAL_SPECLINES_NAME_S_II_6716; case GAL_SPECLINES_S_II_6730: return GAL_SPECLINES_NAME_S_II_6730; case GAL_SPECLINES_O_I_7002: return GAL_SPECLINES_NAME_O_I_7002; case GAL_SPECLINES_Ar_V: return GAL_SPECLINES_NAME_Ar_V; case GAL_SPECLINES_He_I_7065: return GAL_SPECLINES_NAME_He_I_7065; case GAL_SPECLINES_Ar_III_7135: return GAL_SPECLINES_NAME_Ar_III_7135; case GAL_SPECLINES_Fe_II_7155: return GAL_SPECLINES_NAME_Fe_II_7155; case GAL_SPECLINES_Ar_IV_7170: return GAL_SPECLINES_NAME_Ar_IV_7170; case GAL_SPECLINES_Fe_II_7172: return GAL_SPECLINES_NAME_Fe_II_7172; case GAL_SPECLINES_C_II_7236: return GAL_SPECLINES_NAME_C_II_7236; case GAL_SPECLINES_Ar_IV_7237: return GAL_SPECLINES_NAME_Ar_IV_7237; case GAL_SPECLINES_O_I_7254: return GAL_SPECLINES_NAME_O_I_7254; case GAL_SPECLINES_Ar_IV_7262: return GAL_SPECLINES_NAME_Ar_IV_7262; case GAL_SPECLINES_He_I_7281: return GAL_SPECLINES_NAME_He_I_7281; case GAL_SPECLINES_O_II_7319: return GAL_SPECLINES_NAME_O_II_7319; case GAL_SPECLINES_O_II_7330: return GAL_SPECLINES_NAME_O_II_7330; case GAL_SPECLINES_Ni_II_7377: return GAL_SPECLINES_NAME_Ni_II_7377; case GAL_SPECLINES_Ni_II_7411: return GAL_SPECLINES_NAME_Ni_II_7411; case GAL_SPECLINES_Fe_II_7452: return GAL_SPECLINES_NAME_Fe_II_7452; case GAL_SPECLINES_N_I_7468: return GAL_SPECLINES_NAME_N_I_7468; case GAL_SPECLINES_S_XII: return GAL_SPECLINES_NAME_S_XII; case GAL_SPECLINES_Ar_III_7751: return GAL_SPECLINES_NAME_Ar_III_7751; case GAL_SPECLINES_He_I_7816: return GAL_SPECLINES_NAME_He_I_7816; case GAL_SPECLINES_Ar_I_7868: return GAL_SPECLINES_NAME_Ar_I_7868; case GAL_SPECLINES_Ni_III: return GAL_SPECLINES_NAME_Ni_III; case GAL_SPECLINES_Fe_XI_7891: return GAL_SPECLINES_NAME_Fe_XI_7891; case GAL_SPECLINES_He_II_8236: return GAL_SPECLINES_NAME_He_II_8236; case GAL_SPECLINES_Pa_20: return GAL_SPECLINES_NAME_Pa_20; case GAL_SPECLINES_Pa_19: return GAL_SPECLINES_NAME_Pa_19; case GAL_SPECLINES_Pa_18: return GAL_SPECLINES_NAME_Pa_18; case GAL_SPECLINES_O_I_8446: return GAL_SPECLINES_NAME_O_I_8446; case GAL_SPECLINES_Pa_17: return GAL_SPECLINES_NAME_Pa_17; case GAL_SPECLINES_Ca_II_8498: return GAL_SPECLINES_NAME_Ca_II_8498; case GAL_SPECLINES_Pa_16: return GAL_SPECLINES_NAME_Pa_16; case GAL_SPECLINES_Ca_II_8542: return GAL_SPECLINES_NAME_Ca_II_8542; case GAL_SPECLINES_Pa_15: return GAL_SPECLINES_NAME_Pa_15; case GAL_SPECLINES_Cl_II: return GAL_SPECLINES_NAME_Cl_II; case GAL_SPECLINES_Pa_14: return GAL_SPECLINES_NAME_Pa_14; case GAL_SPECLINES_Fe_II_8616: return GAL_SPECLINES_NAME_Fe_II_8616; case GAL_SPECLINES_Ca_II_8662: return GAL_SPECLINES_NAME_Ca_II_8662; case GAL_SPECLINES_Pa_13: return GAL_SPECLINES_NAME_Pa_13; case GAL_SPECLINES_N_I_8680: return GAL_SPECLINES_NAME_N_I_8680; case GAL_SPECLINES_N_I_8703: return GAL_SPECLINES_NAME_N_I_8703; case GAL_SPECLINES_N_I_8711: return GAL_SPECLINES_NAME_N_I_8711; case GAL_SPECLINES_Pa_12: return GAL_SPECLINES_NAME_Pa_12; case GAL_SPECLINES_Pa_11: return GAL_SPECLINES_NAME_Pa_11; case GAL_SPECLINES_Fe_II_8891: return GAL_SPECLINES_NAME_Fe_II_8891; case GAL_SPECLINES_Pa_10: return GAL_SPECLINES_NAME_Pa_10; case GAL_SPECLINES_S_III_9068: return GAL_SPECLINES_NAME_S_III_9068; case GAL_SPECLINES_Pa_9: return GAL_SPECLINES_NAME_Pa_9; case GAL_SPECLINES_S_III_9531: return GAL_SPECLINES_NAME_S_III_9531; case GAL_SPECLINES_Pa_epsilon: return GAL_SPECLINES_NAME_Pa_epsilon; case GAL_SPECLINES_C_I_9824: return GAL_SPECLINES_NAME_C_I_9824; case GAL_SPECLINES_C_I_9850: return GAL_SPECLINES_NAME_C_I_9850; case GAL_SPECLINES_S_VIII: return GAL_SPECLINES_NAME_S_VIII; case GAL_SPECLINES_He_I_10027: return GAL_SPECLINES_NAME_He_I_10027; case GAL_SPECLINES_He_I_10031: return GAL_SPECLINES_NAME_He_I_10031; case GAL_SPECLINES_Pa_delta: return GAL_SPECLINES_NAME_Pa_delta; case GAL_SPECLINES_S_II_10286: return GAL_SPECLINES_NAME_S_II_10286; case GAL_SPECLINES_S_II_10320: return GAL_SPECLINES_NAME_S_II_10320; case GAL_SPECLINES_S_II_10336: return GAL_SPECLINES_NAME_S_II_10336; case GAL_SPECLINES_Fe_XIII: return GAL_SPECLINES_NAME_Fe_XIII; case GAL_SPECLINES_He_I_10830: return GAL_SPECLINES_NAME_He_I_10830; case GAL_SPECLINES_Pa_gamma: return GAL_SPECLINES_NAME_Pa_gamma; /* Limits. */ case GAL_SPECLINES_LIMIT_LYMAN: return GAL_SPECLINES_NAME_LIMIT_LYMAN; case GAL_SPECLINES_LIMIT_BALMER: return GAL_SPECLINES_NAME_LIMIT_BALMER; case GAL_SPECLINES_LIMIT_PASCHEN: return GAL_SPECLINES_NAME_LIMIT_PASCHEN; default: return NULL; } return NULL; } /* Return the code of the given line name. */ int gal_speclines_line_code(char *name) { if( !strcmp(name, GAL_SPECLINES_NAME_Ne_VIII_770) ) return GAL_SPECLINES_Ne_VIII_770; else if( !strcmp(name, GAL_SPECLINES_NAME_Ne_VIII_780) ) return GAL_SPECLINES_Ne_VIII_780; else if( !strcmp(name, GAL_SPECLINES_NAME_Ly_epsilon) ) return GAL_SPECLINES_Ly_epsilon; else if( !strcmp(name, GAL_SPECLINES_NAME_Ly_delta) ) return GAL_SPECLINES_Ly_delta; else if( !strcmp(name, GAL_SPECLINES_NAME_Ly_gamma) ) return GAL_SPECLINES_Ly_gamma; else if( !strcmp(name, GAL_SPECLINES_NAME_C_III_977) ) return GAL_SPECLINES_C_III_977; else if( !strcmp(name, GAL_SPECLINES_NAME_N_III_989) ) return GAL_SPECLINES_N_III_989; else if( !strcmp(name, GAL_SPECLINES_NAME_N_III_991_51) ) return GAL_SPECLINES_N_III_991_51; else if( !strcmp(name, GAL_SPECLINES_NAME_N_III_991_57) ) return GAL_SPECLINES_N_III_991_57; else if( !strcmp(name, GAL_SPECLINES_NAME_Ly_beta) ) return GAL_SPECLINES_Ly_beta; else if( !strcmp(name, GAL_SPECLINES_NAME_O_VI_1031) ) return GAL_SPECLINES_O_VI_1031; else if( !strcmp(name, GAL_SPECLINES_NAME_O_VI_1037) ) return GAL_SPECLINES_O_VI_1037; else if( !strcmp(name, GAL_SPECLINES_NAME_Ar_I_1066) ) return GAL_SPECLINES_Ar_I_1066; else if( !strcmp(name, GAL_SPECLINES_NAME_Ly_alpha) ) return GAL_SPECLINES_Ly_alpha; else if( !strcmp(name, GAL_SPECLINES_NAME_N_V_1238) ) return GAL_SPECLINES_N_V_1238; else if( !strcmp(name, GAL_SPECLINES_NAME_N_V_1242) ) return GAL_SPECLINES_N_V_1242; else if( !strcmp(name, GAL_SPECLINES_NAME_Si_II_1260) ) return GAL_SPECLINES_Si_II_1260; else if( !strcmp(name, GAL_SPECLINES_NAME_Si_II_1264) ) return GAL_SPECLINES_Si_II_1264; else if( !strcmp(name, GAL_SPECLINES_NAME_O_I_1302) ) return GAL_SPECLINES_O_I_1302; else if( !strcmp(name, GAL_SPECLINES_NAME_C_II_1334) ) return GAL_SPECLINES_C_II_1334; else if( !strcmp(name, GAL_SPECLINES_NAME_C_II_1335) ) return GAL_SPECLINES_C_II_1335; else if( !strcmp(name, GAL_SPECLINES_NAME_Si_IV_1393) ) return GAL_SPECLINES_Si_IV_1393; else if( !strcmp(name, GAL_SPECLINES_NAME_O_IV_1397) ) return GAL_SPECLINES_O_IV_1397; else if( !strcmp(name, GAL_SPECLINES_NAME_O_IV_1399) ) return GAL_SPECLINES_O_IV_1399; else if( !strcmp(name, GAL_SPECLINES_NAME_Si_IV_1402) ) return GAL_SPECLINES_Si_IV_1402; else if( !strcmp(name, GAL_SPECLINES_NAME_N_IV_1486) ) return GAL_SPECLINES_N_IV_1486; else if( !strcmp(name, GAL_SPECLINES_NAME_C_IV_1548) ) return GAL_SPECLINES_C_IV_1548; else if( !strcmp(name, GAL_SPECLINES_NAME_C_IV_1550) ) return GAL_SPECLINES_C_IV_1550; else if( !strcmp(name, GAL_SPECLINES_NAME_He_II_1640) ) return GAL_SPECLINES_He_II_1640; else if( !strcmp(name, GAL_SPECLINES_NAME_O_III_1660) ) return GAL_SPECLINES_O_III_1660; else if( !strcmp(name, GAL_SPECLINES_NAME_O_III_1666) ) return GAL_SPECLINES_O_III_1666; else if( !strcmp(name, GAL_SPECLINES_NAME_N_III_1746) ) return GAL_SPECLINES_N_III_1746; else if( !strcmp(name, GAL_SPECLINES_NAME_N_III_1748) ) return GAL_SPECLINES_N_III_1748; else if( !strcmp(name, GAL_SPECLINES_NAME_Al_III_1854) ) return GAL_SPECLINES_Al_III_1854; else if( !strcmp(name, GAL_SPECLINES_NAME_Al_III_1862) ) return GAL_SPECLINES_Al_III_1862; else if( !strcmp(name, GAL_SPECLINES_NAME_Si_III) ) return GAL_SPECLINES_Si_III; else if( !strcmp(name, GAL_SPECLINES_NAME_C_III_1908) ) return GAL_SPECLINES_C_III_1908; else if( !strcmp(name, GAL_SPECLINES_NAME_N_II_2142) ) return GAL_SPECLINES_N_II_2142; else if( !strcmp(name, GAL_SPECLINES_NAME_O_III_2320) ) return GAL_SPECLINES_O_III_2320; else if( !strcmp(name, GAL_SPECLINES_NAME_C_II_2323) ) return GAL_SPECLINES_C_II_2323; else if( !strcmp(name, GAL_SPECLINES_NAME_C_II_2324) ) return GAL_SPECLINES_C_II_2324; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_XI_2648) ) return GAL_SPECLINES_Fe_XI_2648; else if( !strcmp(name, GAL_SPECLINES_NAME_He_II_2733) ) return GAL_SPECLINES_He_II_2733; else if( !strcmp(name, GAL_SPECLINES_NAME_Mg_V_2782) ) return GAL_SPECLINES_Mg_V_2782; else if( !strcmp(name, GAL_SPECLINES_NAME_Mg_II_2795) ) return GAL_SPECLINES_Mg_II_2795; else if( !strcmp(name, GAL_SPECLINES_NAME_Mg_II_2802) ) return GAL_SPECLINES_Mg_II_2802; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_IV_2829) ) return GAL_SPECLINES_Fe_IV_2829; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_IV_2835) ) return GAL_SPECLINES_Fe_IV_2835; else if( !strcmp(name, GAL_SPECLINES_NAME_Ar_IV_2853) ) return GAL_SPECLINES_Ar_IV_2853; else if( !strcmp(name, GAL_SPECLINES_NAME_Ar_IV_2868) ) return GAL_SPECLINES_Ar_IV_2868; else if( !strcmp(name, GAL_SPECLINES_NAME_Mg_V_2928) ) return GAL_SPECLINES_Mg_V_2928; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_2945) ) return GAL_SPECLINES_He_I_2945; else if( !strcmp(name, GAL_SPECLINES_NAME_O_III_3132) ) return GAL_SPECLINES_O_III_3132; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_3187) ) return GAL_SPECLINES_He_I_3187; else if( !strcmp(name, GAL_SPECLINES_NAME_He_II_3203) ) return GAL_SPECLINES_He_II_3203; else if( !strcmp(name, GAL_SPECLINES_NAME_O_III_3312) ) return GAL_SPECLINES_O_III_3312; else if( !strcmp(name, GAL_SPECLINES_NAME_Ne_V_3345) ) return GAL_SPECLINES_Ne_V_3345; else if( !strcmp(name, GAL_SPECLINES_NAME_Ne_V_3425) ) return GAL_SPECLINES_Ne_V_3425; else if( !strcmp(name, GAL_SPECLINES_NAME_O_III_3444) ) return GAL_SPECLINES_O_III_3444; else if( !strcmp(name, GAL_SPECLINES_NAME_N_I_3466_4) ) return GAL_SPECLINES_N_I_3466_4; else if( !strcmp(name, GAL_SPECLINES_NAME_N_I_3466_5) ) return GAL_SPECLINES_N_I_3466_5; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_3487) ) return GAL_SPECLINES_He_I_3487; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VII_3586) ) return GAL_SPECLINES_Fe_VII_3586; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VI_3662) ) return GAL_SPECLINES_Fe_VI_3662; else if( !strcmp(name, GAL_SPECLINES_NAME_H_19) ) return GAL_SPECLINES_H_19; else if( !strcmp(name, GAL_SPECLINES_NAME_H_18) ) return GAL_SPECLINES_H_18; else if( !strcmp(name, GAL_SPECLINES_NAME_H_17) ) return GAL_SPECLINES_H_17; else if( !strcmp(name, GAL_SPECLINES_NAME_H_16) ) return GAL_SPECLINES_H_16; else if( !strcmp(name, GAL_SPECLINES_NAME_H_15) ) return GAL_SPECLINES_H_15; else if( !strcmp(name, GAL_SPECLINES_NAME_H_14) ) return GAL_SPECLINES_H_14; else if( !strcmp(name, GAL_SPECLINES_NAME_O_II_3726) ) return GAL_SPECLINES_O_II_3726; else if( !strcmp(name, GAL_SPECLINES_NAME_O_II_3728) ) return GAL_SPECLINES_O_II_3728; else if( !strcmp(name, GAL_SPECLINES_NAME_H_13) ) return GAL_SPECLINES_H_13; else if( !strcmp(name, GAL_SPECLINES_NAME_H_12) ) return GAL_SPECLINES_H_12; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VII_3758) ) return GAL_SPECLINES_Fe_VII_3758; else if( !strcmp(name, GAL_SPECLINES_NAME_H_11) ) return GAL_SPECLINES_H_11; else if( !strcmp(name, GAL_SPECLINES_NAME_H_10) ) return GAL_SPECLINES_H_10; else if( !strcmp(name, GAL_SPECLINES_NAME_H_9) ) return GAL_SPECLINES_H_9; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_V_3839) ) return GAL_SPECLINES_Fe_V_3839; else if( !strcmp(name, GAL_SPECLINES_NAME_Ne_III_3868) ) return GAL_SPECLINES_Ne_III_3868; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_3888) ) return GAL_SPECLINES_He_I_3888; else if( !strcmp(name, GAL_SPECLINES_NAME_H_8) ) return GAL_SPECLINES_H_8; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_V_3891) ) return GAL_SPECLINES_Fe_V_3891; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_V_3911) ) return GAL_SPECLINES_Fe_V_3911; else if( !strcmp(name, GAL_SPECLINES_NAME_Ne_III_3967) ) return GAL_SPECLINES_Ne_III_3967; else if( !strcmp(name, GAL_SPECLINES_NAME_H_epsilon) ) return GAL_SPECLINES_H_epsilon; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_4026) ) return GAL_SPECLINES_He_I_4026; else if( !strcmp(name, GAL_SPECLINES_NAME_S_II_4068) ) return GAL_SPECLINES_S_II_4068; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_V_4071) ) return GAL_SPECLINES_Fe_V_4071; else if( !strcmp(name, GAL_SPECLINES_NAME_S_II_4076) ) return GAL_SPECLINES_S_II_4076; else if( !strcmp(name, GAL_SPECLINES_NAME_H_delta) ) return GAL_SPECLINES_H_delta; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_4143) ) return GAL_SPECLINES_He_I_4143; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4178) ) return GAL_SPECLINES_Fe_II_4178; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_V_4180) ) return GAL_SPECLINES_Fe_V_4180; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4233) ) return GAL_SPECLINES_Fe_II_4233; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_V_4227) ) return GAL_SPECLINES_Fe_V_4227; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4287) ) return GAL_SPECLINES_Fe_II_4287; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4304) ) return GAL_SPECLINES_Fe_II_4304; else if( !strcmp(name, GAL_SPECLINES_NAME_O_II_4317) ) return GAL_SPECLINES_O_II_4317; else if( !strcmp(name, GAL_SPECLINES_NAME_H_gamma) ) return GAL_SPECLINES_H_gamma; else if( !strcmp(name, GAL_SPECLINES_NAME_O_III_4363) ) return GAL_SPECLINES_O_III_4363; else if( !strcmp(name, GAL_SPECLINES_NAME_Ar_XIV) ) return GAL_SPECLINES_Ar_XIV; else if( !strcmp(name, GAL_SPECLINES_NAME_O_II_4414) ) return GAL_SPECLINES_O_II_4414; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4416) ) return GAL_SPECLINES_Fe_II_4416; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4452) ) return GAL_SPECLINES_Fe_II_4452; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_4471) ) return GAL_SPECLINES_He_I_4471; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4489) ) return GAL_SPECLINES_Fe_II_4489; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4491) ) return GAL_SPECLINES_Fe_II_4491; else if( !strcmp(name, GAL_SPECLINES_NAME_N_III_4510) ) return GAL_SPECLINES_N_III_4510; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4522) ) return GAL_SPECLINES_Fe_II_4522; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4555) ) return GAL_SPECLINES_Fe_II_4555; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4582) ) return GAL_SPECLINES_Fe_II_4582; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4583) ) return GAL_SPECLINES_Fe_II_4583; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4629) ) return GAL_SPECLINES_Fe_II_4629; else if( !strcmp(name, GAL_SPECLINES_NAME_N_III_4634) ) return GAL_SPECLINES_N_III_4634; else if( !strcmp(name, GAL_SPECLINES_NAME_N_III_4640) ) return GAL_SPECLINES_N_III_4640; else if( !strcmp(name, GAL_SPECLINES_NAME_N_III_4641) ) return GAL_SPECLINES_N_III_4641; else if( !strcmp(name, GAL_SPECLINES_NAME_C_III_4647) ) return GAL_SPECLINES_C_III_4647; else if( !strcmp(name, GAL_SPECLINES_NAME_C_III_4650) ) return GAL_SPECLINES_C_III_4650; else if( !strcmp(name, GAL_SPECLINES_NAME_C_III_5651) ) return GAL_SPECLINES_C_III_5651; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_III_4658) ) return GAL_SPECLINES_Fe_III_4658; else if( !strcmp(name, GAL_SPECLINES_NAME_He_II_4685) ) return GAL_SPECLINES_He_II_4685; else if( !strcmp(name, GAL_SPECLINES_NAME_Ar_IV_4711) ) return GAL_SPECLINES_Ar_IV_4711; else if( !strcmp(name, GAL_SPECLINES_NAME_Ar_IV_4740) ) return GAL_SPECLINES_Ar_IV_4740; else if( !strcmp(name, GAL_SPECLINES_NAME_H_beta) ) return GAL_SPECLINES_H_beta; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VII_4893) ) return GAL_SPECLINES_Fe_VII_4893; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_IV_4903) ) return GAL_SPECLINES_Fe_IV_4903; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_4923) ) return GAL_SPECLINES_Fe_II_4923; else if( !strcmp(name, GAL_SPECLINES_NAME_O_III_4958) ) return GAL_SPECLINES_O_III_4958; else if( !strcmp(name, GAL_SPECLINES_NAME_O_III_5006) ) return GAL_SPECLINES_O_III_5006; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_5018) ) return GAL_SPECLINES_Fe_II_5018; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_III_5084) ) return GAL_SPECLINES_Fe_III_5084; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VI_5145) ) return GAL_SPECLINES_Fe_VI_5145; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VII_5158) ) return GAL_SPECLINES_Fe_VII_5158; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_5169) ) return GAL_SPECLINES_Fe_II_5169; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VI_5176) ) return GAL_SPECLINES_Fe_VI_5176; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_5197) ) return GAL_SPECLINES_Fe_II_5197; else if( !strcmp(name, GAL_SPECLINES_NAME_N_I_5200) ) return GAL_SPECLINES_N_I_5200; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_5234) ) return GAL_SPECLINES_Fe_II_5234; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_IV_5236) ) return GAL_SPECLINES_Fe_IV_5236; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_III_5270) ) return GAL_SPECLINES_Fe_III_5270; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_5276) ) return GAL_SPECLINES_Fe_II_5276; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VII_5276) ) return GAL_SPECLINES_Fe_VII_5276; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_XIV) ) return GAL_SPECLINES_Fe_XIV; else if( !strcmp(name, GAL_SPECLINES_NAME_Ca_V) ) return GAL_SPECLINES_Ca_V; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_5316_6) ) return GAL_SPECLINES_Fe_II_5316_6; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_5316_7) ) return GAL_SPECLINES_Fe_II_5316_7; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VI_5335) ) return GAL_SPECLINES_Fe_VI_5335; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VI_5424) ) return GAL_SPECLINES_Fe_VI_5424; else if( !strcmp(name, GAL_SPECLINES_NAME_Cl_III_5517) ) return GAL_SPECLINES_Cl_III_5517; else if( !strcmp(name, GAL_SPECLINES_NAME_Cl_III_5537) ) return GAL_SPECLINES_Cl_III_5537; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VI_5637) ) return GAL_SPECLINES_Fe_VI_5637; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VI_5677) ) return GAL_SPECLINES_Fe_VI_5677; else if( !strcmp(name, GAL_SPECLINES_NAME_C_III_5697) ) return GAL_SPECLINES_C_III_5697; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VII_5720) ) return GAL_SPECLINES_Fe_VII_5720; else if( !strcmp(name, GAL_SPECLINES_NAME_N_II_5754) ) return GAL_SPECLINES_N_II_5754; else if( !strcmp(name, GAL_SPECLINES_NAME_C_IV_5801) ) return GAL_SPECLINES_C_IV_5801; else if( !strcmp(name, GAL_SPECLINES_NAME_C_IV_5811) ) return GAL_SPECLINES_C_IV_5811; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_5875) ) return GAL_SPECLINES_He_I_5875; else if( !strcmp(name, GAL_SPECLINES_NAME_O_I_6046) ) return GAL_SPECLINES_O_I_6046; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_VII_6087) ) return GAL_SPECLINES_Fe_VII_6087; else if( !strcmp(name, GAL_SPECLINES_NAME_O_I_6300) ) return GAL_SPECLINES_O_I_6300; else if( !strcmp(name, GAL_SPECLINES_NAME_S_III_6312) ) return GAL_SPECLINES_S_III_6312; else if( !strcmp(name, GAL_SPECLINES_NAME_Si_II_6347) ) return GAL_SPECLINES_Si_II_6347; else if( !strcmp(name, GAL_SPECLINES_NAME_O_I_6363) ) return GAL_SPECLINES_O_I_6363; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_6369) ) return GAL_SPECLINES_Fe_II_6369; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_X) ) return GAL_SPECLINES_Fe_X; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_6516) ) return GAL_SPECLINES_Fe_II_6516; else if( !strcmp(name, GAL_SPECLINES_NAME_N_II_6548) ) return GAL_SPECLINES_N_II_6548; else if( !strcmp(name, GAL_SPECLINES_NAME_H_alpha) ) return GAL_SPECLINES_H_alpha; else if( !strcmp(name, GAL_SPECLINES_NAME_N_II_6583) ) return GAL_SPECLINES_N_II_6583; else if( !strcmp(name, GAL_SPECLINES_NAME_S_II_6716) ) return GAL_SPECLINES_S_II_6716; else if( !strcmp(name, GAL_SPECLINES_NAME_S_II_6730) ) return GAL_SPECLINES_S_II_6730; else if( !strcmp(name, GAL_SPECLINES_NAME_O_I_7002) ) return GAL_SPECLINES_O_I_7002; else if( !strcmp(name, GAL_SPECLINES_NAME_Ar_V) ) return GAL_SPECLINES_Ar_V; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_7065) ) return GAL_SPECLINES_He_I_7065; else if( !strcmp(name, GAL_SPECLINES_NAME_Ar_III_7135) ) return GAL_SPECLINES_Ar_III_7135; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_7155) ) return GAL_SPECLINES_Fe_II_7155; else if( !strcmp(name, GAL_SPECLINES_NAME_Ar_IV_7170) ) return GAL_SPECLINES_Ar_IV_7170; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_7172) ) return GAL_SPECLINES_Fe_II_7172; else if( !strcmp(name, GAL_SPECLINES_NAME_C_II_7236) ) return GAL_SPECLINES_C_II_7236; else if( !strcmp(name, GAL_SPECLINES_NAME_Ar_IV_7237) ) return GAL_SPECLINES_Ar_IV_7237; else if( !strcmp(name, GAL_SPECLINES_NAME_O_I_7254) ) return GAL_SPECLINES_O_I_7254; else if( !strcmp(name, GAL_SPECLINES_NAME_Ar_IV_7262) ) return GAL_SPECLINES_Ar_IV_7262; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_7281) ) return GAL_SPECLINES_He_I_7281; else if( !strcmp(name, GAL_SPECLINES_NAME_O_II_7319) ) return GAL_SPECLINES_O_II_7319; else if( !strcmp(name, GAL_SPECLINES_NAME_O_II_7330) ) return GAL_SPECLINES_O_II_7330; else if( !strcmp(name, GAL_SPECLINES_NAME_Ni_II_7377) ) return GAL_SPECLINES_Ni_II_7377; else if( !strcmp(name, GAL_SPECLINES_NAME_Ni_II_7411) ) return GAL_SPECLINES_Ni_II_7411; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_7452) ) return GAL_SPECLINES_Fe_II_7452; else if( !strcmp(name, GAL_SPECLINES_NAME_N_I_7468) ) return GAL_SPECLINES_N_I_7468; else if( !strcmp(name, GAL_SPECLINES_NAME_S_XII) ) return GAL_SPECLINES_S_XII; else if( !strcmp(name, GAL_SPECLINES_NAME_Ar_III_7751) ) return GAL_SPECLINES_Ar_III_7751; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_7816) ) return GAL_SPECLINES_He_I_7816; else if( !strcmp(name, GAL_SPECLINES_NAME_Ar_I_7868) ) return GAL_SPECLINES_Ar_I_7868; else if( !strcmp(name, GAL_SPECLINES_NAME_Ni_III) ) return GAL_SPECLINES_Ni_III; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_XI_7891) ) return GAL_SPECLINES_Fe_XI_7891; else if( !strcmp(name, GAL_SPECLINES_NAME_He_II_8236) ) return GAL_SPECLINES_He_II_8236; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_20) ) return GAL_SPECLINES_Pa_20; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_19) ) return GAL_SPECLINES_Pa_19; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_18) ) return GAL_SPECLINES_Pa_18; else if( !strcmp(name, GAL_SPECLINES_NAME_O_I_8446) ) return GAL_SPECLINES_O_I_8446; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_17) ) return GAL_SPECLINES_Pa_17; else if( !strcmp(name, GAL_SPECLINES_NAME_Ca_II_8498) ) return GAL_SPECLINES_Ca_II_8498; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_16) ) return GAL_SPECLINES_Pa_16; else if( !strcmp(name, GAL_SPECLINES_NAME_Ca_II_8542) ) return GAL_SPECLINES_Ca_II_8542; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_15) ) return GAL_SPECLINES_Pa_15; else if( !strcmp(name, GAL_SPECLINES_NAME_Cl_II) ) return GAL_SPECLINES_Cl_II; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_14) ) return GAL_SPECLINES_Pa_14; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_8616) ) return GAL_SPECLINES_Fe_II_8616; else if( !strcmp(name, GAL_SPECLINES_NAME_Ca_II_8662) ) return GAL_SPECLINES_Ca_II_8662; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_13) ) return GAL_SPECLINES_Pa_13; else if( !strcmp(name, GAL_SPECLINES_NAME_N_I_8680) ) return GAL_SPECLINES_N_I_8680; else if( !strcmp(name, GAL_SPECLINES_NAME_N_I_8703) ) return GAL_SPECLINES_N_I_8703; else if( !strcmp(name, GAL_SPECLINES_NAME_N_I_8711) ) return GAL_SPECLINES_N_I_8711; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_12) ) return GAL_SPECLINES_Pa_12; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_11) ) return GAL_SPECLINES_Pa_11; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_II_8891) ) return GAL_SPECLINES_Fe_II_8891; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_10) ) return GAL_SPECLINES_Pa_10; else if( !strcmp(name, GAL_SPECLINES_NAME_S_III_9068) ) return GAL_SPECLINES_S_III_9068; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_9) ) return GAL_SPECLINES_Pa_9; else if( !strcmp(name, GAL_SPECLINES_NAME_S_III_9531) ) return GAL_SPECLINES_S_III_9531; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_epsilon) ) return GAL_SPECLINES_Pa_epsilon; else if( !strcmp(name, GAL_SPECLINES_NAME_C_I_9824) ) return GAL_SPECLINES_C_I_9824; else if( !strcmp(name, GAL_SPECLINES_NAME_C_I_9850) ) return GAL_SPECLINES_C_I_9850; else if( !strcmp(name, GAL_SPECLINES_NAME_S_VIII) ) return GAL_SPECLINES_S_VIII; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_10027) ) return GAL_SPECLINES_He_I_10027; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_10031) ) return GAL_SPECLINES_He_I_10031; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_delta) ) return GAL_SPECLINES_Pa_delta; else if( !strcmp(name, GAL_SPECLINES_NAME_S_II_10286) ) return GAL_SPECLINES_S_II_10286; else if( !strcmp(name, GAL_SPECLINES_NAME_S_II_10320) ) return GAL_SPECLINES_S_II_10320; else if( !strcmp(name, GAL_SPECLINES_NAME_S_II_10336) ) return GAL_SPECLINES_S_II_10336; else if( !strcmp(name, GAL_SPECLINES_NAME_Fe_XIII) ) return GAL_SPECLINES_Fe_XIII; else if( !strcmp(name, GAL_SPECLINES_NAME_He_I_10830) ) return GAL_SPECLINES_He_I_10830; else if( !strcmp(name, GAL_SPECLINES_NAME_Pa_gamma) ) return GAL_SPECLINES_Pa_gamma; /* Limits. */ else if( !strcmp(name, GAL_SPECLINES_NAME_LIMIT_LYMAN) ) return GAL_SPECLINES_LIMIT_LYMAN; else if( !strcmp(name, GAL_SPECLINES_NAME_LIMIT_BALMER) ) return GAL_SPECLINES_LIMIT_BALMER; else if( !strcmp(name, GAL_SPECLINES_NAME_LIMIT_PASCHEN) ) return GAL_SPECLINES_LIMIT_PASCHEN; /* Invalid. */ else return GAL_SPECLINES_INVALID; return GAL_SPECLINES_INVALID; } /* Return the wavelength (in Angstroms) of given line. */ double gal_speclines_line_angstrom(int linecode) { switch(linecode) { case GAL_SPECLINES_Ne_VIII_770: return GAL_SPECLINES_ANGSTROM_Ne_VIII_770; case GAL_SPECLINES_Ne_VIII_780: return GAL_SPECLINES_ANGSTROM_Ne_VIII_780; case GAL_SPECLINES_Ly_epsilon: return GAL_SPECLINES_ANGSTROM_Ly_epsilon; case GAL_SPECLINES_Ly_delta: return GAL_SPECLINES_ANGSTROM_Ly_delta; case GAL_SPECLINES_Ly_gamma: return GAL_SPECLINES_ANGSTROM_Ly_gamma; case GAL_SPECLINES_C_III_977: return GAL_SPECLINES_ANGSTROM_C_III_977; case GAL_SPECLINES_N_III_989: return GAL_SPECLINES_ANGSTROM_N_III_989; case GAL_SPECLINES_N_III_991_51: return GAL_SPECLINES_ANGSTROM_N_III_991_51; case GAL_SPECLINES_N_III_991_57: return GAL_SPECLINES_ANGSTROM_N_III_991_57; case GAL_SPECLINES_Ly_beta: return GAL_SPECLINES_ANGSTROM_Ly_beta; case GAL_SPECLINES_O_VI_1031: return GAL_SPECLINES_ANGSTROM_O_VI_1031; case GAL_SPECLINES_O_VI_1037: return GAL_SPECLINES_ANGSTROM_O_VI_1037; case GAL_SPECLINES_Ar_I_1066: return GAL_SPECLINES_ANGSTROM_Ar_I_1066; case GAL_SPECLINES_Ly_alpha: return GAL_SPECLINES_ANGSTROM_Ly_alpha; case GAL_SPECLINES_N_V_1238: return GAL_SPECLINES_ANGSTROM_N_V_1238; case GAL_SPECLINES_N_V_1242: return GAL_SPECLINES_ANGSTROM_N_V_1242; case GAL_SPECLINES_Si_II_1260: return GAL_SPECLINES_ANGSTROM_Si_II_1260; case GAL_SPECLINES_Si_II_1264: return GAL_SPECLINES_ANGSTROM_Si_II_1264; case GAL_SPECLINES_O_I_1302: return GAL_SPECLINES_ANGSTROM_O_I_1302; case GAL_SPECLINES_C_II_1334: return GAL_SPECLINES_ANGSTROM_C_II_1334; case GAL_SPECLINES_C_II_1335: return GAL_SPECLINES_ANGSTROM_C_II_1335; case GAL_SPECLINES_Si_IV_1393: return GAL_SPECLINES_ANGSTROM_Si_IV_1393; case GAL_SPECLINES_O_IV_1397: return GAL_SPECLINES_ANGSTROM_O_IV_1397; case GAL_SPECLINES_O_IV_1399: return GAL_SPECLINES_ANGSTROM_O_IV_1399; case GAL_SPECLINES_Si_IV_1402: return GAL_SPECLINES_ANGSTROM_Si_IV_1402; case GAL_SPECLINES_N_IV_1486: return GAL_SPECLINES_ANGSTROM_N_IV_1486; case GAL_SPECLINES_C_IV_1548: return GAL_SPECLINES_ANGSTROM_C_IV_1548; case GAL_SPECLINES_C_IV_1550: return GAL_SPECLINES_ANGSTROM_C_IV_1550; case GAL_SPECLINES_He_II_1640: return GAL_SPECLINES_ANGSTROM_He_II_1640; case GAL_SPECLINES_O_III_1660: return GAL_SPECLINES_ANGSTROM_O_III_1660; case GAL_SPECLINES_O_III_1666: return GAL_SPECLINES_ANGSTROM_O_III_1666; case GAL_SPECLINES_N_III_1746: return GAL_SPECLINES_ANGSTROM_N_III_1746; case GAL_SPECLINES_N_III_1748: return GAL_SPECLINES_ANGSTROM_N_III_1748; case GAL_SPECLINES_Al_III_1854: return GAL_SPECLINES_ANGSTROM_Al_III_1854; case GAL_SPECLINES_Al_III_1862: return GAL_SPECLINES_ANGSTROM_Al_III_1862; case GAL_SPECLINES_Si_III: return GAL_SPECLINES_ANGSTROM_Si_III; case GAL_SPECLINES_C_III_1908: return GAL_SPECLINES_ANGSTROM_C_III_1908; case GAL_SPECLINES_N_II_2142: return GAL_SPECLINES_ANGSTROM_N_II_2142; case GAL_SPECLINES_O_III_2320: return GAL_SPECLINES_ANGSTROM_O_III_2320; case GAL_SPECLINES_C_II_2323: return GAL_SPECLINES_ANGSTROM_C_II_2323; case GAL_SPECLINES_C_II_2324: return GAL_SPECLINES_ANGSTROM_C_II_2324; case GAL_SPECLINES_Fe_XI_2648: return GAL_SPECLINES_ANGSTROM_Fe_XI_2648; case GAL_SPECLINES_He_II_2733: return GAL_SPECLINES_ANGSTROM_He_II_2733; case GAL_SPECLINES_Mg_V_2782: return GAL_SPECLINES_ANGSTROM_Mg_V_2782; case GAL_SPECLINES_Mg_II_2795: return GAL_SPECLINES_ANGSTROM_Mg_II_2795; case GAL_SPECLINES_Mg_II_2802: return GAL_SPECLINES_ANGSTROM_Mg_II_2802; case GAL_SPECLINES_Fe_IV_2829: return GAL_SPECLINES_ANGSTROM_Fe_IV_2829; case GAL_SPECLINES_Fe_IV_2835: return GAL_SPECLINES_ANGSTROM_Fe_IV_2835; case GAL_SPECLINES_Ar_IV_2853: return GAL_SPECLINES_ANGSTROM_Ar_IV_2853; case GAL_SPECLINES_Ar_IV_2868: return GAL_SPECLINES_ANGSTROM_Ar_IV_2868; case GAL_SPECLINES_Mg_V_2928: return GAL_SPECLINES_ANGSTROM_Mg_V_2928; case GAL_SPECLINES_He_I_2945: return GAL_SPECLINES_ANGSTROM_He_I_2945; case GAL_SPECLINES_O_III_3132: return GAL_SPECLINES_ANGSTROM_O_III_3132; case GAL_SPECLINES_He_I_3187: return GAL_SPECLINES_ANGSTROM_He_I_3187; case GAL_SPECLINES_He_II_3203: return GAL_SPECLINES_ANGSTROM_He_II_3203; case GAL_SPECLINES_O_III_3312: return GAL_SPECLINES_ANGSTROM_O_III_3312; case GAL_SPECLINES_Ne_V_3345: return GAL_SPECLINES_ANGSTROM_Ne_V_3345; case GAL_SPECLINES_Ne_V_3425: return GAL_SPECLINES_ANGSTROM_Ne_V_3425; case GAL_SPECLINES_O_III_3444: return GAL_SPECLINES_ANGSTROM_O_III_3444; case GAL_SPECLINES_N_I_3466_4: return GAL_SPECLINES_ANGSTROM_N_I_3466_4; case GAL_SPECLINES_N_I_3466_5: return GAL_SPECLINES_ANGSTROM_N_I_3466_5; case GAL_SPECLINES_He_I_3487: return GAL_SPECLINES_ANGSTROM_He_I_3487; case GAL_SPECLINES_Fe_VII_3586: return GAL_SPECLINES_ANGSTROM_Fe_VII_3586; case GAL_SPECLINES_Fe_VI_3662: return GAL_SPECLINES_ANGSTROM_Fe_VI_3662; case GAL_SPECLINES_H_19: return GAL_SPECLINES_ANGSTROM_H_19; case GAL_SPECLINES_H_18: return GAL_SPECLINES_ANGSTROM_H_18; case GAL_SPECLINES_H_17: return GAL_SPECLINES_ANGSTROM_H_17; case GAL_SPECLINES_H_16: return GAL_SPECLINES_ANGSTROM_H_16; case GAL_SPECLINES_H_15: return GAL_SPECLINES_ANGSTROM_H_15; case GAL_SPECLINES_H_14: return GAL_SPECLINES_ANGSTROM_H_14; case GAL_SPECLINES_O_II_3726: return GAL_SPECLINES_ANGSTROM_O_II_3726; case GAL_SPECLINES_O_II_3728: return GAL_SPECLINES_ANGSTROM_O_II_3728; case GAL_SPECLINES_H_13: return GAL_SPECLINES_ANGSTROM_H_13; case GAL_SPECLINES_H_12: return GAL_SPECLINES_ANGSTROM_H_12; case GAL_SPECLINES_Fe_VII_3758: return GAL_SPECLINES_ANGSTROM_Fe_VII_3758; case GAL_SPECLINES_H_11: return GAL_SPECLINES_ANGSTROM_H_11; case GAL_SPECLINES_H_10: return GAL_SPECLINES_ANGSTROM_H_10; case GAL_SPECLINES_H_9: return GAL_SPECLINES_ANGSTROM_H_9; case GAL_SPECLINES_Fe_V_3839: return GAL_SPECLINES_ANGSTROM_Fe_V_3839; case GAL_SPECLINES_Ne_III_3868: return GAL_SPECLINES_ANGSTROM_Ne_III_3868; case GAL_SPECLINES_He_I_3888: return GAL_SPECLINES_ANGSTROM_He_I_3888; case GAL_SPECLINES_H_8: return GAL_SPECLINES_ANGSTROM_H_8; case GAL_SPECLINES_Fe_V_3891: return GAL_SPECLINES_ANGSTROM_Fe_V_3891; case GAL_SPECLINES_Fe_V_3911: return GAL_SPECLINES_ANGSTROM_Fe_V_3911; case GAL_SPECLINES_Ne_III_3967: return GAL_SPECLINES_ANGSTROM_Ne_III_3967; case GAL_SPECLINES_H_epsilon: return GAL_SPECLINES_ANGSTROM_H_epsilon; case GAL_SPECLINES_He_I_4026: return GAL_SPECLINES_ANGSTROM_He_I_4026; case GAL_SPECLINES_S_II_4068: return GAL_SPECLINES_ANGSTROM_S_II_4068; case GAL_SPECLINES_Fe_V_4071: return GAL_SPECLINES_ANGSTROM_Fe_V_4071; case GAL_SPECLINES_S_II_4076: return GAL_SPECLINES_ANGSTROM_S_II_4076; case GAL_SPECLINES_H_delta: return GAL_SPECLINES_ANGSTROM_H_delta; case GAL_SPECLINES_He_I_4143: return GAL_SPECLINES_ANGSTROM_He_I_4143; case GAL_SPECLINES_Fe_II_4178: return GAL_SPECLINES_ANGSTROM_Fe_II_4178; case GAL_SPECLINES_Fe_V_4180: return GAL_SPECLINES_ANGSTROM_Fe_V_4180; case GAL_SPECLINES_Fe_II_4233: return GAL_SPECLINES_ANGSTROM_Fe_II_4233; case GAL_SPECLINES_Fe_V_4227: return GAL_SPECLINES_ANGSTROM_Fe_V_4227; case GAL_SPECLINES_Fe_II_4287: return GAL_SPECLINES_ANGSTROM_Fe_II_4287; case GAL_SPECLINES_Fe_II_4304: return GAL_SPECLINES_ANGSTROM_Fe_II_4304; case GAL_SPECLINES_O_II_4317: return GAL_SPECLINES_ANGSTROM_O_II_4317; case GAL_SPECLINES_H_gamma: return GAL_SPECLINES_ANGSTROM_H_gamma; case GAL_SPECLINES_O_III_4363: return GAL_SPECLINES_ANGSTROM_O_III_4363; case GAL_SPECLINES_Ar_XIV: return GAL_SPECLINES_ANGSTROM_Ar_XIV; case GAL_SPECLINES_O_II_4414: return GAL_SPECLINES_ANGSTROM_O_II_4414; case GAL_SPECLINES_Fe_II_4416: return GAL_SPECLINES_ANGSTROM_Fe_II_4416; case GAL_SPECLINES_Fe_II_4452: return GAL_SPECLINES_ANGSTROM_Fe_II_4452; case GAL_SPECLINES_He_I_4471: return GAL_SPECLINES_ANGSTROM_He_I_4471; case GAL_SPECLINES_Fe_II_4489: return GAL_SPECLINES_ANGSTROM_Fe_II_4489; case GAL_SPECLINES_Fe_II_4491: return GAL_SPECLINES_ANGSTROM_Fe_II_4491; case GAL_SPECLINES_N_III_4510: return GAL_SPECLINES_ANGSTROM_N_III_4510; case GAL_SPECLINES_Fe_II_4522: return GAL_SPECLINES_ANGSTROM_Fe_II_4522; case GAL_SPECLINES_Fe_II_4555: return GAL_SPECLINES_ANGSTROM_Fe_II_4555; case GAL_SPECLINES_Fe_II_4582: return GAL_SPECLINES_ANGSTROM_Fe_II_4582; case GAL_SPECLINES_Fe_II_4583: return GAL_SPECLINES_ANGSTROM_Fe_II_4583; case GAL_SPECLINES_Fe_II_4629: return GAL_SPECLINES_ANGSTROM_Fe_II_4629; case GAL_SPECLINES_N_III_4634: return GAL_SPECLINES_ANGSTROM_N_III_4634; case GAL_SPECLINES_N_III_4640: return GAL_SPECLINES_ANGSTROM_N_III_4640; case GAL_SPECLINES_N_III_4641: return GAL_SPECLINES_ANGSTROM_N_III_4641; case GAL_SPECLINES_C_III_4647: return GAL_SPECLINES_ANGSTROM_C_III_4647; case GAL_SPECLINES_C_III_4650: return GAL_SPECLINES_ANGSTROM_C_III_4650; case GAL_SPECLINES_C_III_5651: return GAL_SPECLINES_ANGSTROM_C_III_5651; case GAL_SPECLINES_Fe_III_4658: return GAL_SPECLINES_ANGSTROM_Fe_III_4658; case GAL_SPECLINES_He_II_4685: return GAL_SPECLINES_ANGSTROM_He_II_4685; case GAL_SPECLINES_Ar_IV_4711: return GAL_SPECLINES_ANGSTROM_Ar_IV_4711; case GAL_SPECLINES_Ar_IV_4740: return GAL_SPECLINES_ANGSTROM_Ar_IV_4740; case GAL_SPECLINES_H_beta: return GAL_SPECLINES_ANGSTROM_H_beta; case GAL_SPECLINES_Fe_VII_4893: return GAL_SPECLINES_ANGSTROM_Fe_VII_4893; case GAL_SPECLINES_Fe_IV_4903: return GAL_SPECLINES_ANGSTROM_Fe_IV_4903; case GAL_SPECLINES_Fe_II_4923: return GAL_SPECLINES_ANGSTROM_Fe_II_4923; case GAL_SPECLINES_O_III_4958: return GAL_SPECLINES_ANGSTROM_O_III_4958; case GAL_SPECLINES_O_III_5006: return GAL_SPECLINES_ANGSTROM_O_III_5006; case GAL_SPECLINES_Fe_II_5018: return GAL_SPECLINES_ANGSTROM_Fe_II_5018; case GAL_SPECLINES_Fe_III_5084: return GAL_SPECLINES_ANGSTROM_Fe_III_5084; case GAL_SPECLINES_Fe_VI_5145: return GAL_SPECLINES_ANGSTROM_Fe_VI_5145; case GAL_SPECLINES_Fe_VII_5158: return GAL_SPECLINES_ANGSTROM_Fe_VII_5158; case GAL_SPECLINES_Fe_II_5169: return GAL_SPECLINES_ANGSTROM_Fe_II_5169; case GAL_SPECLINES_Fe_VI_5176: return GAL_SPECLINES_ANGSTROM_Fe_VI_5176; case GAL_SPECLINES_Fe_II_5197: return GAL_SPECLINES_ANGSTROM_Fe_II_5197; case GAL_SPECLINES_N_I_5200: return GAL_SPECLINES_ANGSTROM_N_I_5200; case GAL_SPECLINES_Fe_II_5234: return GAL_SPECLINES_ANGSTROM_Fe_II_5234; case GAL_SPECLINES_Fe_IV_5236: return GAL_SPECLINES_ANGSTROM_Fe_IV_5236; case GAL_SPECLINES_Fe_III_5270: return GAL_SPECLINES_ANGSTROM_Fe_III_5270; case GAL_SPECLINES_Fe_II_5276: return GAL_SPECLINES_ANGSTROM_Fe_II_5276; case GAL_SPECLINES_Fe_VII_5276: return GAL_SPECLINES_ANGSTROM_Fe_VII_5276; case GAL_SPECLINES_Fe_XIV: return GAL_SPECLINES_ANGSTROM_Fe_XIV; case GAL_SPECLINES_Ca_V: return GAL_SPECLINES_ANGSTROM_Ca_V; case GAL_SPECLINES_Fe_II_5316_6: return GAL_SPECLINES_ANGSTROM_Fe_II_5316_6; case GAL_SPECLINES_Fe_II_5316_7: return GAL_SPECLINES_ANGSTROM_Fe_II_5316_7; case GAL_SPECLINES_Fe_VI_5335: return GAL_SPECLINES_ANGSTROM_Fe_VI_5335; case GAL_SPECLINES_Fe_VI_5424: return GAL_SPECLINES_ANGSTROM_Fe_VI_5424; case GAL_SPECLINES_Cl_III_5517: return GAL_SPECLINES_ANGSTROM_Cl_III_5517; case GAL_SPECLINES_Cl_III_5537: return GAL_SPECLINES_ANGSTROM_Cl_III_5537; case GAL_SPECLINES_Fe_VI_5637: return GAL_SPECLINES_ANGSTROM_Fe_VI_5637; case GAL_SPECLINES_Fe_VI_5677: return GAL_SPECLINES_ANGSTROM_Fe_VI_5677; case GAL_SPECLINES_C_III_5697: return GAL_SPECLINES_ANGSTROM_C_III_5697; case GAL_SPECLINES_Fe_VII_5720: return GAL_SPECLINES_ANGSTROM_Fe_VII_5720; case GAL_SPECLINES_N_II_5754: return GAL_SPECLINES_ANGSTROM_N_II_5754; case GAL_SPECLINES_C_IV_5801: return GAL_SPECLINES_ANGSTROM_C_IV_5801; case GAL_SPECLINES_C_IV_5811: return GAL_SPECLINES_ANGSTROM_C_IV_5811; case GAL_SPECLINES_He_I_5875: return GAL_SPECLINES_ANGSTROM_He_I_5875; case GAL_SPECLINES_O_I_6046: return GAL_SPECLINES_ANGSTROM_O_I_6046; case GAL_SPECLINES_Fe_VII_6087: return GAL_SPECLINES_ANGSTROM_Fe_VII_6087; case GAL_SPECLINES_O_I_6300: return GAL_SPECLINES_ANGSTROM_O_I_6300; case GAL_SPECLINES_S_III_6312: return GAL_SPECLINES_ANGSTROM_S_III_6312; case GAL_SPECLINES_Si_II_6347: return GAL_SPECLINES_ANGSTROM_Si_II_6347; case GAL_SPECLINES_O_I_6363: return GAL_SPECLINES_ANGSTROM_O_I_6363; case GAL_SPECLINES_Fe_II_6369: return GAL_SPECLINES_ANGSTROM_Fe_II_6369; case GAL_SPECLINES_Fe_X: return GAL_SPECLINES_ANGSTROM_Fe_X; case GAL_SPECLINES_Fe_II_6516: return GAL_SPECLINES_ANGSTROM_Fe_II_6516; case GAL_SPECLINES_N_II_6548: return GAL_SPECLINES_ANGSTROM_N_II_6548; case GAL_SPECLINES_H_alpha: return GAL_SPECLINES_ANGSTROM_H_alpha; case GAL_SPECLINES_N_II_6583: return GAL_SPECLINES_ANGSTROM_N_II_6583; case GAL_SPECLINES_S_II_6716: return GAL_SPECLINES_ANGSTROM_S_II_6716; case GAL_SPECLINES_S_II_6730: return GAL_SPECLINES_ANGSTROM_S_II_6730; case GAL_SPECLINES_O_I_7002: return GAL_SPECLINES_ANGSTROM_O_I_7002; case GAL_SPECLINES_Ar_V: return GAL_SPECLINES_ANGSTROM_Ar_V; case GAL_SPECLINES_He_I_7065: return GAL_SPECLINES_ANGSTROM_He_I_7065; case GAL_SPECLINES_Ar_III_7135: return GAL_SPECLINES_ANGSTROM_Ar_III_7135; case GAL_SPECLINES_Fe_II_7155: return GAL_SPECLINES_ANGSTROM_Fe_II_7155; case GAL_SPECLINES_Ar_IV_7170: return GAL_SPECLINES_ANGSTROM_Ar_IV_7170; case GAL_SPECLINES_Fe_II_7172: return GAL_SPECLINES_ANGSTROM_Fe_II_7172; case GAL_SPECLINES_C_II_7236: return GAL_SPECLINES_ANGSTROM_C_II_7236; case GAL_SPECLINES_Ar_IV_7237: return GAL_SPECLINES_ANGSTROM_Ar_IV_7237; case GAL_SPECLINES_O_I_7254: return GAL_SPECLINES_ANGSTROM_O_I_7254; case GAL_SPECLINES_Ar_IV_7262: return GAL_SPECLINES_ANGSTROM_Ar_IV_7262; case GAL_SPECLINES_He_I_7281: return GAL_SPECLINES_ANGSTROM_He_I_7281; case GAL_SPECLINES_O_II_7319: return GAL_SPECLINES_ANGSTROM_O_II_7319; case GAL_SPECLINES_O_II_7330: return GAL_SPECLINES_ANGSTROM_O_II_7330; case GAL_SPECLINES_Ni_II_7377: return GAL_SPECLINES_ANGSTROM_Ni_II_7377; case GAL_SPECLINES_Ni_II_7411: return GAL_SPECLINES_ANGSTROM_Ni_II_7411; case GAL_SPECLINES_Fe_II_7452: return GAL_SPECLINES_ANGSTROM_Fe_II_7452; case GAL_SPECLINES_N_I_7468: return GAL_SPECLINES_ANGSTROM_N_I_7468; case GAL_SPECLINES_S_XII: return GAL_SPECLINES_ANGSTROM_S_XII; case GAL_SPECLINES_Ar_III_7751: return GAL_SPECLINES_ANGSTROM_Ar_III_7751; case GAL_SPECLINES_He_I_7816: return GAL_SPECLINES_ANGSTROM_He_I_7816; case GAL_SPECLINES_Ar_I_7868: return GAL_SPECLINES_ANGSTROM_Ar_I_7868; case GAL_SPECLINES_Ni_III: return GAL_SPECLINES_ANGSTROM_Ni_III; case GAL_SPECLINES_Fe_XI_7891: return GAL_SPECLINES_ANGSTROM_Fe_XI_7891; case GAL_SPECLINES_He_II_8236: return GAL_SPECLINES_ANGSTROM_He_II_8236; case GAL_SPECLINES_Pa_20: return GAL_SPECLINES_ANGSTROM_Pa_20; case GAL_SPECLINES_Pa_19: return GAL_SPECLINES_ANGSTROM_Pa_19; case GAL_SPECLINES_Pa_18: return GAL_SPECLINES_ANGSTROM_Pa_18; case GAL_SPECLINES_O_I_8446: return GAL_SPECLINES_ANGSTROM_O_I_8446; case GAL_SPECLINES_Pa_17: return GAL_SPECLINES_ANGSTROM_Pa_17; case GAL_SPECLINES_Ca_II_8498: return GAL_SPECLINES_ANGSTROM_Ca_II_8498; case GAL_SPECLINES_Pa_16: return GAL_SPECLINES_ANGSTROM_Pa_16; case GAL_SPECLINES_Ca_II_8542: return GAL_SPECLINES_ANGSTROM_Ca_II_8542; case GAL_SPECLINES_Pa_15: return GAL_SPECLINES_ANGSTROM_Pa_15; case GAL_SPECLINES_Cl_II: return GAL_SPECLINES_ANGSTROM_Cl_II; case GAL_SPECLINES_Pa_14: return GAL_SPECLINES_ANGSTROM_Pa_14; case GAL_SPECLINES_Fe_II_8616: return GAL_SPECLINES_ANGSTROM_Fe_II_8616; case GAL_SPECLINES_Ca_II_8662: return GAL_SPECLINES_ANGSTROM_Ca_II_8662; case GAL_SPECLINES_Pa_13: return GAL_SPECLINES_ANGSTROM_Pa_13; case GAL_SPECLINES_N_I_8680: return GAL_SPECLINES_ANGSTROM_N_I_8680; case GAL_SPECLINES_N_I_8703: return GAL_SPECLINES_ANGSTROM_N_I_8703; case GAL_SPECLINES_N_I_8711: return GAL_SPECLINES_ANGSTROM_N_I_8711; case GAL_SPECLINES_Pa_12: return GAL_SPECLINES_ANGSTROM_Pa_12; case GAL_SPECLINES_Pa_11: return GAL_SPECLINES_ANGSTROM_Pa_11; case GAL_SPECLINES_Fe_II_8891: return GAL_SPECLINES_ANGSTROM_Fe_II_8891; case GAL_SPECLINES_Pa_10: return GAL_SPECLINES_ANGSTROM_Pa_10; case GAL_SPECLINES_S_III_9068: return GAL_SPECLINES_ANGSTROM_S_III_9068; case GAL_SPECLINES_Pa_9: return GAL_SPECLINES_ANGSTROM_Pa_9; case GAL_SPECLINES_S_III_9531: return GAL_SPECLINES_ANGSTROM_S_III_9531; case GAL_SPECLINES_Pa_epsilon: return GAL_SPECLINES_ANGSTROM_Pa_epsilon; case GAL_SPECLINES_C_I_9824: return GAL_SPECLINES_ANGSTROM_C_I_9824; case GAL_SPECLINES_C_I_9850: return GAL_SPECLINES_ANGSTROM_C_I_9850; case GAL_SPECLINES_S_VIII: return GAL_SPECLINES_ANGSTROM_S_VIII; case GAL_SPECLINES_He_I_10027: return GAL_SPECLINES_ANGSTROM_He_I_10027; case GAL_SPECLINES_He_I_10031: return GAL_SPECLINES_ANGSTROM_He_I_10031; case GAL_SPECLINES_Pa_delta: return GAL_SPECLINES_ANGSTROM_Pa_delta; case GAL_SPECLINES_S_II_10286: return GAL_SPECLINES_ANGSTROM_S_II_10286; case GAL_SPECLINES_S_II_10320: return GAL_SPECLINES_ANGSTROM_S_II_10320; case GAL_SPECLINES_S_II_10336: return GAL_SPECLINES_ANGSTROM_S_II_10336; case GAL_SPECLINES_Fe_XIII: return GAL_SPECLINES_ANGSTROM_Fe_XIII; case GAL_SPECLINES_He_I_10830: return GAL_SPECLINES_ANGSTROM_He_I_10830; case GAL_SPECLINES_Pa_gamma: return GAL_SPECLINES_ANGSTROM_Pa_gamma; /* Limits. */ case GAL_SPECLINES_LIMIT_LYMAN: return GAL_SPECLINES_ANGSTROM_LIMIT_LYMAN; case GAL_SPECLINES_LIMIT_BALMER: return GAL_SPECLINES_ANGSTROM_LIMIT_BALMER; case GAL_SPECLINES_LIMIT_PASCHEN: return GAL_SPECLINES_ANGSTROM_LIMIT_PASCHEN; default: error(EXIT_FAILURE, 0, "%s: '%d' not recognized line identifier", __func__, linecode); } return NAN; } /*********************************************************************/ /************* Redshifted lines ***************/ /*********************************************************************/ double gal_speclines_line_redshift(double obsline, double restline) { return (obsline/restline)-1; } double gal_speclines_line_redshift_code(double obsline, int linecode) { double restline=gal_speclines_line_angstrom(linecode); return (obsline/restline)-1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/statistics.c����������������������������������������������������������������������0000644�0001750�0001750�00000341053�14551337306�012101� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Statistical functions. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <float.h> #include <string.h> #include <stdint.h> #include <stdlib.h> #include <gnuastro/data.h> #include <gnuastro/tile.h> #include <gnuastro/fits.h> #include <gnuastro/blank.h> #include <gnuastro/qsort.h> #include <gnuastro/pointer.h> #include <gnuastro/arithmetic.h> #include <gnuastro/statistics.h> #include <gnuastro-internal/checkset.h> /**************************************************************** ******** Simple statistics ******* ****************************************************************/ /* Return the number of non-blank elements in an array as a single element, 'size_t' type data structure. */ gal_data_t * gal_statistics_number(gal_data_t *input) { size_t counter=0, dsize=1; gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); /* If there is no blank values in the input, then the total number is just the size. */ if(gal_blank_present(input, 0)) /* '{}' necessary for 'else'. */ { GAL_TILE_PARSE_OPERATE(input, NULL, 0, 1, {++counter;}); } else counter = input->size; /* Write the value into memory. */ *((size_t *)(out->array)) = counter; return out; } /* Return the minimum (non-blank) value of a dataset in the same type as the dataset. */ gal_data_t * gal_statistics_minimum(gal_data_t *input) { size_t dsize=1, n=0; gal_data_t *out=gal_data_alloc(NULL, gal_tile_block(input)->type, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); /* See if the input actually has any elements. */ if(input->size) { /* Initialize the output with the maximum possible value. */ gal_type_max(out->type, out->array); /* Parse the full input. A NaN value will always fail a conditional (as if it was larger); so NaNs will not cause problems here. */ GAL_TILE_PARSE_OPERATE( input, out, 0, 1, {*o = *i < *o ? *i : *o; ++n;} ); } /* If there were no usable elements, set the output to blank, then return. */ if(n==0) gal_blank_write(out->array, out->type); return out; } /* Return the maximum (non-blank) value of a dataset in the same type as the dataset. */ gal_data_t * gal_statistics_maximum(gal_data_t *input) { size_t dsize=1, n=0; gal_data_t *out=gal_data_alloc(NULL, gal_tile_block(input)->type, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); /* See if the input actually has any elements. */ if(input->size) { /* Initialize the output with the minimum possible value. */ gal_type_min(out->type, out->array); /* Parse the full input. A NaN value will always fail a conditional (as if it was smaller); so NaNs will not cause problems here. */ GAL_TILE_PARSE_OPERATE(input, out, 0, 1, {*o = *i > *o ? *i : *o; ++n;}); } /* If there were no usable elements, set the output to blank, then return. */ if(n==0) gal_blank_write(out->array, out->type); return out; } /* Return the sum of the input dataset as a single element dataset of type float64. */ gal_data_t * gal_statistics_sum(gal_data_t *input) { size_t dsize=1, n=0; gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); /* See if the input actually has any elements. */ if(input->size) /* Parse the dataset. Note that in 'gal_data_alloc' we set the 'clear' flag to 1, so it will be 0.0f. */ GAL_TILE_PARSE_OPERATE(input, out, 0, 1, {++n; *o += *i;}); /* If there were no usable elements, set the output to blank, then return. */ if(n==0) gal_blank_write(out->array, out->type); return out; } /* Return the mean of the input dataset as a float64 type single-element dataset. */ gal_data_t * gal_statistics_mean(gal_data_t *input) { size_t dsize=1, n=0; gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); /* See if the input actually has any elements. */ if(input->size) /* Parse the dataset. Note that in 'gal_data_alloc' we set the 'clear' flag to 1, so it will be 0.0f. */ GAL_TILE_PARSE_OPERATE(input, out, 0, 1, {++n; *o += *i;}); /* Above, we calculated the sum and number, so if there were any elements in the dataset ('n!=0'), divide the sum by the number, otherwise, put a blank value in the output. */ if(n) *((double *)(out->array)) /= n; else gal_blank_write(out->array, out->type); return out; } /* Calculate the standard deviation from the already measured (after parsing) sum and the sum of squares. */ double gal_statistics_std_from_sums(double sum, double sump2, size_t num) { double ss; switch(num) { case 0: return NAN; /* No elements: STD: NaN */ case 1: return 0.0f; /* Single element, STD: 0.0 */ default: /* 'ss' should never be bigger than 'sump2' unless the values are so similar that it happens due to the floating-point error. Since they are so close that their difference has caused this impossible condition, their standard deviation is 0. */ ss=sum*sum/num; if(ss>sump2) return 0.0f; else return sqrt( (sump2-ss)/num ); } /* Control should not reach this point. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to find " "and fix the problem. Control should not reach this part of " "the function", __func__, PACKAGE_BUGREPORT); return NAN; } /* Return the standard deviation of the input dataset as a single element dataset of type float64. */ gal_data_t * gal_statistics_std(gal_data_t *input) { size_t dsize=1, n=0; double v, *o, s=0.0f, s2=0.0f; gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); /* See if the input actually has any elements. */ o=out->array; switch(input->size) { /* No inputs. */ case 0: o[0]=GAL_BLANK_FLOAT64; break; /* When we only have a single element, theoretically the standard deviation should be 0. But due to floating-point errors, it will probably not be. So we'll manually set it to zero. */ case 1: o[0]=0; break; /* More than one element. */ default: /* Parse the data to measure 's' and 's2'. Its important to put each value into a 'double' type variable ('v') before multiplying (for 's2') because the multiplication of integer types close to their limits will cause overflow and thus an unreasonable output). */ GAL_TILE_PARSE_OPERATE(input, out, 0, 1, {++n; v=*i; s+=v; s2+=v*v;}); /* Write the standard deviation. */ o[0] = gal_statistics_std_from_sums(s, s2, n); break; } /* Return the output dataset. */ return out; } /* Return the mean and standard deviation of a dataset in one run in type float64. The output is a two element data structure, with the first value being the mean and the second value the standard deviation. */ gal_data_t * gal_statistics_mean_std(gal_data_t *input) { size_t dsize=2, n=0; double v, *o, s=0.0f, s2=0.0f; gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); /* See if the input actually has any elements. */ o=out->array; switch(input->size) { /* No inputs. */ case 0: o[0]=o[1]=GAL_BLANK_FLOAT64; break; /* When we only have a single element, theoretically the standard deviation should be 0. But due to floating-point errors, it will probably not be. So we'll manually set it to zero. */ case 1: GAL_TILE_PARSE_OPERATE(input, out, 0, 1, {s+=*i;}); o[0]=s; o[1]=0; break; /* More than one element. */ default: /* Parse the data. Its important to put each value into a 'double' type variable ('v') before multiplying (for 's2') because the multiplication of integer types close to their limits will cause overflow and thus an unreasonable output). */ GAL_TILE_PARSE_OPERATE(input, out, 0, 1, {++n; v=*i; s+=v; s2+=v*v;}); /* Write the mean. */ o[0]=s/n; /* Write the standard deviation. If the square of the average value is bigger than the average of the squares of the values, we have a floating-point error (due to all the points having an identical value, within floating point erros). So we should just set the standard deviation to zero. */ o[1] = gal_statistics_std_from_sums(s, s2, n); break; } /* Return the output dataset. */ return out; } /* The input is a sorted array with no blank values, we want the median value to be put inside the already allocated space which is pointed to by 'median'. It is in the same type as the input. */ #define MED_IN_SORTED(IT) { \ IT *a=sorted->array; \ *(IT *)median = n%2 ? a[n/2] : (a[n/2]+a[n/2-1])/2; \ } static void statistics_median_in_sorted_no_blank(gal_data_t *sorted, void *median) { size_t n=sorted->size; /* Do the processing if there are actually any elements. */ if(sorted->size) switch(sorted->type) { case GAL_TYPE_UINT8: MED_IN_SORTED( uint8_t ); break; case GAL_TYPE_INT8: MED_IN_SORTED( int8_t ); break; case GAL_TYPE_UINT16: MED_IN_SORTED( uint16_t ); break; case GAL_TYPE_INT16: MED_IN_SORTED( int16_t ); break; case GAL_TYPE_UINT32: MED_IN_SORTED( uint32_t ); break; case GAL_TYPE_INT32: MED_IN_SORTED( int32_t ); break; case GAL_TYPE_UINT64: MED_IN_SORTED( uint64_t ); break; case GAL_TYPE_INT64: MED_IN_SORTED( int64_t ); break; case GAL_TYPE_FLOAT32: MED_IN_SORTED( float ); break; case GAL_TYPE_FLOAT64: MED_IN_SORTED( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, sorted->type); } else gal_blank_write(median, sorted->type); } /* Return the median value of the dataset in the same type as the input as a one element dataset. If the 'inplace' flag is set, the input data structure will be modified: it will have no blank values and will be sorted (increasing). */ gal_data_t * gal_statistics_median(gal_data_t *input, int inplace) { size_t dsize=1; gal_data_t *nbs=gal_statistics_no_blank_sorted(input, inplace); gal_data_t *out=gal_data_alloc(NULL, nbs->type, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); /* Write the median. */ if(nbs->size) statistics_median_in_sorted_no_blank(nbs, out->array); else gal_blank_write(out->array, out->type); /* Clean up (if necessary), then return the output. */ if(nbs!=input) gal_data_free(nbs); return out; } static void statistics_mad_in_sorted_no_blank(gal_data_t *sorted, gal_data_t *med, void *mad_o) { uint8_t type; gal_data_t *use, *mad; int flags=GAL_ARITHMETIC_FLAG_INPLACE | GAL_ARITHMETIC_FLAG_NUMOK; /* Sanity check. */ if(med->type!=sorted->type) error(EXIT_FAILURE, 0, "%s: the input 'sorted' and 'med' arrays " "do not have the same type; they are respectively '%s' and '%s'", __func__, gal_type_name(sorted->type, 1), gal_type_name(med->type, 1)); /* After subtracting, we will need to sort the array, so a copy is necessary (the input should not be touched). Furthermore, if the input is an un-signed integer, convert it to a signed integer of the next larger size. This is necessary, because half of the values will become negative after subtracting the median. */ switch(sorted->type) { case GAL_TYPE_UINT8: type=GAL_TYPE_INT16; break; case GAL_TYPE_UINT16: type=GAL_TYPE_INT32; break; case GAL_TYPE_UINT32: type=GAL_TYPE_INT64; break; case GAL_TYPE_UINT64: type=GAL_TYPE_INT64; break; default: type=GAL_TYPE_INVALID; /* Not necessary. */ } use=gal_data_copy_to_new_type(sorted, ( type==GAL_TYPE_INVALID ? sorted->type : type ) ); /* Subtract the median from the input. */ use=gal_arithmetic(GAL_ARITHMETIC_OP_MINUS, 1, flags, use, med); /* Get the absolute value of the differences from the median. The absolute values of the differences can fit into the original input type, so to make things consistent, we'll take it back to the original type. */ use=gal_arithmetic(GAL_ARITHMETIC_OP_ABS, 1, flags, use); use=gal_data_copy_to_new_type_free(use, sorted->type); use->flag=0;/* Necessary before new median to re-sort. */ mad = gal_statistics_median(use, 1); /* For a check: { size_t i; double *u=use->array; double *ma=med->array, *Ma=mad->array, *s=sorted->array; for(i=0;i<sorted->size;++i) printf("%-15g %-15g\n", s[i], u[i]); printf("Median: %g\n", ma[0]); printf("MAD: %g\n", Ma[0]); exit(0); } */ /* Copy the MAD value into the output pointer. */ memcpy(mad_o, mad->array, gal_type_sizeof(mad->type)); /* Clean up. */ gal_data_free(mad); gal_data_free(use); } /* Return the median and median absolute deviation. */ static gal_data_t * statistics_median_mad(gal_data_t *input, int inplace, int onlymad) { size_t one=1, two=2; gal_data_t *in, *med; gal_data_t *mad, *out; /* If the caller only wants the MAD, then the output should only have one element (which is the actual 'mad' that is calculated). */ mad = gal_data_alloc(NULL, input->type, 1, &one, NULL, 1, -1, 1, NULL, NULL, NULL); out = ( onlymad ? mad : gal_data_alloc(NULL, input->type, 1, &two, NULL, 1, -1, 1, NULL, NULL, NULL) ); /* Allocate the input array if we should not work in-place. */ in = inplace ? input : gal_data_copy(input); /* Calculate the median. */ med = gal_statistics_median(in, 1); /* Write the MAD into the allocated space. */ statistics_mad_in_sorted_no_blank(in, med, mad->array); /* If the caller wanted both the median and the MAD, write the median and MAD into the output dataset. */ if(onlymad==0) { memcpy(out->array, med->array, gal_type_sizeof(med->type)); memcpy(gal_pointer_increment(out->array, 1, out->type), mad->array, gal_type_sizeof(out->type)); gal_data_free(mad); } /* Clean up and return. */ gal_data_free(med); return out; } gal_data_t * gal_statistics_mad(gal_data_t *input, int inplace) { return statistics_median_mad(input, inplace, 1); } gal_data_t * gal_statistics_median_mad(gal_data_t *input, int inplace) { return statistics_median_mad(input, inplace, 0); } /* For a given size, return the index (starting from zero) that is at the given quantile. */ size_t gal_statistics_quantile_index(size_t size, double quantile) { double floatindex; /* Some sanity checks. */ if(size==0) { error(0, 0, "%s: 'size' is 0. The quantile is not defined for " "a zero-sized array\n", __func__); return GAL_BLANK_SIZE_T; } if(quantile<0.0f || quantile>1.0f) error(EXIT_FAILURE, 0, "%s: the input quantile should be between 0.0 " "and 1.0 (inclusive). You have asked for %g", __func__, quantile); /* Find the index of the quantile. */ floatindex=(double)(size-1)*quantile; /* printf("quantile: %f, size: %zu, findex: %f\n", quantile, size, floatindex); */ /* Note that in the conversion from float to size_t, the floor integer value of the float will be used. */ if( floatindex - (int)floatindex > 0.5 ) return floatindex+1; else return floatindex; } /* Return a single element dataset of the same type as input keeping the value that has the given quantile. */ gal_data_t * gal_statistics_quantile(gal_data_t *input, double quantile, int inplace) { void *blank; int increasing; size_t dsize=1, index; gal_data_t *nbs=gal_statistics_no_blank_sorted(input, inplace); gal_data_t *out=gal_data_alloc(NULL, nbs->type, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); /* Only continue processing if there are non-blank elements. */ if(nbs->size) { /* Set the increasing value. */ increasing = nbs->flag & GAL_DATA_FLAG_SORTED_I; /* Find the index of the quantile, note that if it sorted in decreasing order, then we'll need to get the index of the inverse quantile. */ index=gal_statistics_quantile_index(nbs->size, ( increasing ? quantile : (1.0f - quantile) ) ); /* Write the value at this index into the output. */ if(index==GAL_BLANK_SIZE_T) { blank=gal_pointer_allocate(nbs->type, 1, 0, __func__, "blank"); memcpy(out->array, blank, gal_type_sizeof(nbs->type)); free(blank); } else memcpy(out->array, gal_pointer_increment(nbs->array, index, nbs->type), gal_type_sizeof(nbs->type)); } else gal_blank_write(out->array, out->type); /* Clean up and return. */ if(nbs!=input) gal_data_free(nbs); return out; } /* Return the index of the (first) point in the sorted dataset that has the closest value to 'value' (which has to be the same type as the 'input' dataset). */ #define STATS_QFUNC_IND(IT) { \ IT *r, *a=nbs->array, *af=a+nbs->size, v=*((IT *)(value->array)); \ \ /* For a reference. Since we are comparing with the previous */ \ /* element, we need to start with the second element.*/ \ r=a++; \ \ /* Increasing array: */ \ if( nbs->flag & GAL_DATA_FLAG_SORTED_I ) \ { \ if( v>=*r ) \ { \ do if(*a>v) { if( v - *(a-1) < *a - v ) --a; break; } \ while(++a<af); \ parsed=1; \ } \ } \ \ /* Decreasing array. */ \ else \ { \ if(v<=*r) \ { \ do if(*a<v) { if( *(a-1) - v < v - *a ) --a; break; } \ while(++a<af); \ parsed=1; \ } \ } \ \ /* Set the difference if the value is actually in the range. */ \ if(parsed && a<af) index = a-r; \ } size_t gal_statistics_quantile_function_index(gal_data_t *input, gal_data_t *invalue, int inplace) { int parsed=0; gal_data_t *value; size_t index=GAL_BLANK_SIZE_T; gal_data_t *nbs=gal_statistics_no_blank_sorted(input, inplace); /* Make sure the value has the same type. */ if(invalue->size>1) error(EXIT_FAILURE, 0, "%s: the 'value' argument must only have " "one element", __func__); value = ( (nbs->type==invalue->type) ? invalue : gal_data_copy_to_new_type(invalue, nbs->type) ); /* Only continue processing if we have non-blank elements. */ if(nbs->size) /* Find the result: */ switch(nbs->type) { case GAL_TYPE_UINT8: STATS_QFUNC_IND( uint8_t ); break; case GAL_TYPE_INT8: STATS_QFUNC_IND( int8_t ); break; case GAL_TYPE_UINT16: STATS_QFUNC_IND( uint16_t ); break; case GAL_TYPE_INT16: STATS_QFUNC_IND( int16_t ); break; case GAL_TYPE_UINT32: STATS_QFUNC_IND( uint32_t ); break; case GAL_TYPE_INT32: STATS_QFUNC_IND( int32_t ); break; case GAL_TYPE_UINT64: STATS_QFUNC_IND( uint64_t ); break; case GAL_TYPE_INT64: STATS_QFUNC_IND( int64_t ); break; case GAL_TYPE_FLOAT32: STATS_QFUNC_IND( float ); break; case GAL_TYPE_FLOAT64: STATS_QFUNC_IND( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, nbs->type); } else { error(0, 0, "%s: no non-blank elements. The quantile function is not " "defined for a zero-sized array\n", __func__); index=GAL_BLANK_SIZE_T; } /* Clean up and return. */ if(value!=invalue) gal_data_free(value); if(nbs!=input) gal_data_free(nbs); return index; } /* Return the quantile function of the given value as float64. */ #define STATS_QFUNC(IT) { \ IT *a=nbs->array, v=*((IT *)(value->array)); \ \ /* Increasing array: */ \ if( *a < *(a+1) ) \ d[0] = v<*a ? -INFINITY : INFINITY; \ \ /* Decreasing array. */ \ else \ d[0] = v>*a ? INFINITY : -INFINITY; \ } gal_data_t * gal_statistics_quantile_function(gal_data_t *input, gal_data_t *value, int inplace) { double *d; size_t ind, dsize=1; gal_data_t *nbs=gal_statistics_no_blank_sorted(input, inplace); gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); /* Sanity checks. */ if(value->size>1) error(EXIT_FAILURE, 0, "%s: the 'value' argument must only have " "one element", __func__); /* Calculate the index of the value. */ ind=gal_statistics_quantile_function_index(input, value, inplace); //printf("ind: %zu (%zu)\n", ind, input->size); /* Only continue processing if there are non-blank values. */ if(nbs->size) { /* Note that counting of the index starts from 0, so for the quantile we should divided by (size - 1). */ d=out->array; if(ind==GAL_BLANK_SIZE_T) { /* See if the value is larger or smaller than the input's minimum or maximum. */ switch(nbs->type) { case GAL_TYPE_UINT8: STATS_QFUNC( uint8_t ); break; case GAL_TYPE_INT8: STATS_QFUNC( int8_t ); break; case GAL_TYPE_UINT16: STATS_QFUNC( uint16_t ); break; case GAL_TYPE_INT16: STATS_QFUNC( int16_t ); break; case GAL_TYPE_UINT32: STATS_QFUNC( uint32_t ); break; case GAL_TYPE_INT32: STATS_QFUNC( int32_t ); break; case GAL_TYPE_UINT64: STATS_QFUNC( uint64_t ); break; case GAL_TYPE_INT64: STATS_QFUNC( int64_t ); break; case GAL_TYPE_FLOAT32: STATS_QFUNC( float ); break; case GAL_TYPE_FLOAT64: STATS_QFUNC( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, nbs->type); } } else d[0] = (double)ind / ((double)(nbs->size - 1)); } else gal_blank_write(out->array, out->type); /* Clean up and return. */ if(nbs!=input) gal_data_free(nbs); return out; } /* Pull out unique elements. */ #define UNIQUE_BYTYPE(TYPE) { \ size_t i, j; \ TYPE *a=out->array, b; \ \ /* Write the blank value for this type into 'b'. */ \ gal_blank_write(&b, out->type); \ \ /* Go over the elements, and set the duplicates to blank. */ \ /* Note that for integers and floats, the behavior of blank/NaN */ \ /* differs: for floats (NaN), we can identify a blank using the */ \ /* fact that by definition, NaN!=NaN. */ \ if(b==b) \ for(i=0;i<out->size;++i) \ { if(a[i]!=b) for(j=i+1;j<out->size;++j) if(a[i]==a[j]) a[j]=b;} \ else \ for(i=0;i<out->size;++i) \ { if(a[i]==a[i]) for(j=i+1;j<out->size;++j) if(a[i]==a[j]) a[j]=b;} \ } gal_data_t * gal_statistics_unique(gal_data_t *input, int inplace) { gal_data_t *out = inplace ? input : gal_data_copy(input); /* Since we are replacing the repeated elements with blank, re-set the blank flags. */ out->flag &= ~GAL_DATA_FLAG_BLANK_CH; /* Set bit to 0. */ out->flag &= ~GAL_DATA_FLAG_HASBLANK; /* Set bit to 0. */ /* Set all non-unique elements to blank. */ switch(out->type) { case GAL_TYPE_UINT8: UNIQUE_BYTYPE( uint8_t ); break; case GAL_TYPE_INT8: UNIQUE_BYTYPE( int8_t ); break; case GAL_TYPE_UINT16: UNIQUE_BYTYPE( uint16_t ); break; case GAL_TYPE_INT16: UNIQUE_BYTYPE( int16_t ); break; case GAL_TYPE_UINT32: UNIQUE_BYTYPE( uint32_t ); break; case GAL_TYPE_INT32: UNIQUE_BYTYPE( int32_t ); break; case GAL_TYPE_UINT64: UNIQUE_BYTYPE( uint64_t ); break; case GAL_TYPE_INT64: UNIQUE_BYTYPE( int64_t ); break; case GAL_TYPE_FLOAT32: UNIQUE_BYTYPE( float ); break; case GAL_TYPE_FLOAT64: UNIQUE_BYTYPE( double ); break; default: error(EXIT_FAILURE, 0, "the 'unique' operator doesn't support type " "code '%u'", out->type); } /* Remove all blank elements (note that 'gal_blank_remove' also corrects the size of the dataset and sets it to 1D). */ gal_blank_remove_realloc(out); return out; } #define HAS_NEGATIVE(IT) { \ IT b, *a=input->array, *af=a+input->size, *start; \ gal_blank_write(&b, input->type); \ \ /* If this is a tile, not a full block. */ \ if(input!=block) \ start=gal_tile_start_end_ind_inclusive(input, block, start_end_inc); \ \ /* Go over all the elements. */ \ while( start_end_inc[0] + increment <= start_end_inc[1] ) \ { \ /* Necessary when we are on a tile. */ \ if(input!=block) \ af = ( a = start + increment ) + input->dsize[input->ndim-1]; \ \ /* Check for blank values (only for integers: b==b). */ \ if(b==b) do if(*a!=b && *a<0) { hasneg=1; break; } while(++a<af); \ else do if(*a==*a && *a<0) { hasneg=1; break; } while(++a<af); \ \ /* Necessary when we are on a tile. */ \ if(input!=block) \ increment += gal_tile_block_increment(block, input->dsize, \ num_increment++, NULL); \ else break; \ } \ } int gal_statistics_has_negative(gal_data_t *input) { int hasneg=0; size_t increment=0, num_increment=1; gal_data_t *block=gal_tile_block(input); size_t start_end_inc[2]={0,block->size-1}; /* -1: this is INCLUSIVE. */ /* An empty dataset doesn't have any negative values! */ if(input->size==0) return 0; /* The operation depends on the type of the input. */ switch(input->type) { /* Unsigned integer types are always positive. */ case GAL_TYPE_UINT8: case GAL_TYPE_UINT16: case GAL_TYPE_UINT32: case GAL_TYPE_UINT64: hasneg=0; break; /* Types that can have negative values. */ case GAL_TYPE_INT8: HAS_NEGATIVE(int8_t); break; case GAL_TYPE_INT16: HAS_NEGATIVE(int16_t); break; case GAL_TYPE_INT32: HAS_NEGATIVE(int32_t); break; case GAL_TYPE_INT64: HAS_NEGATIVE(int64_t); break; case GAL_TYPE_FLOAT32: HAS_NEGATIVE(float); break; case GAL_TYPE_FLOAT64: HAS_NEGATIVE(double); break; /* Non-numeric types. */ default: error(EXIT_FAILURE, 0, "%s: type code '%d' not recognized", __func__, input->type); } /* Return the result. */ return hasneg; } /*********************************************************************/ /***************** Mode ***********************/ /*********************************************************************/ /* Main structure to keep mode parameters. */ struct statistics_mode_params { gal_data_t *data; /* Sorted input dataset with no blank values. */ size_t lowi; /* Lower quantile of interval. */ size_t midi; /* Index of the mid-interval point. */ size_t midd; /* Maximum CDF distance at the middle point. */ size_t highi; /* Higher quantile of interval. */ float tolerance; /* Tolerance level to terminate search. */ size_t numcheck; /* Number of pixels after mode to check. */ size_t interval; /* Interval to check pixels. */ float mirrordist; /* Distance after mirror to check ( x STD). */ }; /* Macros for the mode finding algorithm. */ #define MODE_MIN_Q 0.01f /* Mode search lower interval quantile. */ #define MODE_MAX_Q 0.55f /* Mode search higher interval quantile. */ #define MODE_GOOD_LQ 0.02f /* Least acceptable mode quantile. */ #define MODE_SYM_LOW_Q 0.01f /* Lower quantile to get symmetricity. */ #define MODE_GOLDEN_RATIO 1.618034f /* Golden ratio: (1+sqrt(5))/2. */ #define MODE_TWO_TAKE_GR 0.38197f /* 2 - Golden ratio. */ #define MODE_MIRROR_ABOVE (size_t)(-1) /* Mirror is above the result. */ /* Given a mirror point ('m'), return the maximum distance between the mirror distribution and the original distribution. The basic idea behind finding the mode is comparing the mirrored CDF (where the mirror is a test for the mode) with the original CDF for a given point. The job of this function is to return the maximum distance, given a mirror point. It takes the index of the mirror that is to be checked, it then finds the maximum difference between the mirrored CDF about the given point and the input CDF. 'zf' keeps the value at the mirror (zero) point. 'i' is used to count the pixels after the mirror in the mirror distribution. So 'm+i' is the index of the mirrored distribution and mf=zf+(zf-a[m-i])=2*zf-a[m-i] is the mirrored flux at this point. Having found 'mf', we find the 'j' such that a[m+j] has the nearest flux to 'mf'. The desired difference between the input CDF and the mirrored one for each 'i' is then simply: 'j-i'. Once 'i' is incremented, 'mf' will increase, so to find the new 'j' we don't need to begin looking from 'j=0'. Remember that the array is sorted, so the desired 'j' is definitely larger than the previous 'j'. So, if we keep the previous 'j' in 'prevj' then, all we have to do is to start incrementing 'j' from 'prevj'. This will really help in speeding up the job :-D. Only for the first element, 'prevj=0'. */ #define MIRR_MAX_DIFF(IT) { \ IT *a=p->data->array, zf=a[m], mf=2*zf-a[m-i]; \ \ /* When a[m+j]>mf, we have reached the last pixel to check. Now, */ \ /* we just have to see which one of a[m+j-1] or a[m+j] is closer */ \ /* to 'mf'. We then change 'j' accordingly and break out of the */ \ /* 'j' loop. */ \ for(j=prevj;j<size-m;++j) \ if(a[m+j]>mf) \ { \ if( a[m+j]-mf < mf-a[m+j-1] ) \ break; \ else \ { \ j--; \ break; \ } \ } \ } static size_t mode_mirror_max_index_diff(struct statistics_mode_params *p, size_t m) { /* The variables: i: Index on mirror distribution. j: Index on input distribution. prevj: Index of previously checked point in the actual array. mf: (in macro) Value that is approximately equal in both distributions. */ size_t i, j, absdiff, prevj=0, size=p->data->size; size_t maxdiff=0, errordiff=p->mirrordist*sqrt(m); /* printf("###############\n###############\n"); printf("### Mirror pixel: %zu (mirrordist: %f, sqrt(m): %f)\n", m, p->mirrordist, sqrt(m)); printf("###############\n###############\n"); */ /* Go over the mirrored points. */ for(i=1; i<p->numcheck && i<=m && m+i<size ;i+=p->interval) { /* Find 'j': the index of the closest point in the original distribution that has a value similar to the mirror distribution. */ switch(p->data->type) { case GAL_TYPE_UINT8: MIRR_MAX_DIFF( uint8_t ); break; case GAL_TYPE_INT8: MIRR_MAX_DIFF( int8_t ); break; case GAL_TYPE_UINT16: MIRR_MAX_DIFF( uint16_t ); break; case GAL_TYPE_INT16: MIRR_MAX_DIFF( int16_t ); break; case GAL_TYPE_UINT32: MIRR_MAX_DIFF( uint32_t ); break; case GAL_TYPE_INT32: MIRR_MAX_DIFF( int32_t ); break; case GAL_TYPE_UINT64: MIRR_MAX_DIFF( uint64_t ); break; case GAL_TYPE_INT64: MIRR_MAX_DIFF( int64_t ); break; case GAL_TYPE_FLOAT32: MIRR_MAX_DIFF( float ); break; case GAL_TYPE_FLOAT64: MIRR_MAX_DIFF( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, p->data->type); } /* printf("i:%-5zu j:%-5zu diff:%-5d maxdiff: %zu\n", i, j, (int)j-(int)i, maxdiff); */ /* The index of the actual CDF corresponding the the mirrored flux has been found. We want the mirrored distribution to be within the actual distribution, not beyond it, so the only acceptable results are when i<j. But we also have noise, so we can't simply use that as the criterion, small 'j's with 'i>j' are acceptable. So, only when 'i>j+errordiff' the result is not acceptable! */ if(i>j+errordiff) { maxdiff = MODE_MIRROR_ABOVE; break; } absdiff = i>j ? i-j : j-i; if(absdiff>maxdiff) maxdiff=absdiff; prevj=j; } /* Return the maximum difference. */ return maxdiff; } /* Find the mode through the Golden-section search. It is assumed that 'mode_mirror_max_index_diff' has one minimum (within the statistical errors) in the function. To find that minimum, the golden section search algorithm is going to used. Read the Wikipedia article for a very nice introduction. In summary we will constantly be finding middle points in the given interval and thus decreasing the interval until a certain tolerance is reached. If the input interval is on points 'a' and 'b', then the middle point (lets call it 'c', where c>a and c<b) to test should be positioned such that (b-c)/(c-a)=MODE_GOLDEN_RATIO. Once we open up this relation, we can find c using: c = ( b + MODE_GOLDEN_RATIO * a ) / ( 1 + MODE_GOLDEN_RATIO ) We need a fourth point to be placed between. With this configuration, the probing point is located at: */ static size_t mode_golden_section(struct statistics_mode_params *p) { size_t di, dd; /* Find the probing point in the larger interval. */ if(p->highi-p->midi > p->midi-p->lowi) di = p->midi + MODE_TWO_TAKE_GR * (float)(p->highi-p->midi); else di = p->midi - MODE_TWO_TAKE_GR * (float)(p->midi-p->lowi); /* Since these are all indexs (and positive) we don't need an absolute value, highi is also always larger than lowi! In some cases, the first (standard) condition might be satisfied, while highi-lowi<=2. In such cases, also jump out! */ if( (p->highi - p->lowi) < p->tolerance*(p->midi+di) || (p->highi - p->lowi) <= 3) return (p->highi+p->lowi)/2; /* Find the maximum difference for this mirror point. */ dd = mode_mirror_max_index_diff(p, di); /*------------------------------------------------------------------ { static int counter=1; char outname[500], command[1000]; char histsname[500], cfpsname[500]; sprintf(outname, "%dcmp.pdf", counter); sprintf(cfpsname, "%dcfps.txt", counter); sprintf(histsname, "%dhists.txt", counter); gal_mode_make_mirror_plots(p->sorted, p->size, di, histsname, cfpsname); sprintf(command, "./plot.py %s %s %s", histsname, cfpsname, outname); system(command); } -------------------------------------------------------------------*/ /* printf("lowi:%-5zu\tmidi:%-5zu(midd: %d)\thighi:%-5zu ----> " "dq: %-5zu di: %d\n", p->lowi, p->midi, (int)p->midd, p->highi, di, (int)dd); */ /* +++++++++++++ Start of addition to the golden section search. The mirrored distribution's cumulative frequency plot has be lower than the actual's cfp. If it isn't, 'di' will be MODE_MIRROR_ABOVE. In this case, the normal golden section minimization is not going to give us what we want. So we have this modification. In such cases, we want the search to go to the lower interval. */ if(dd==MODE_MIRROR_ABOVE) { if( p->midi < di ) { p->highi=di; return mode_golden_section(p); } else { p->highi=p->midi; p->midi=di; p->midd=dd; return mode_golden_section(p); } } /* End of addition to the golden section search. +++++++++++++*/ /* This is the standard golden section search: */ if(dd<p->midd) { if(p->highi-p->midi > p->midi-p->lowi) { p->lowi = p->midi; p->midi = di; p->midd = dd; return mode_golden_section(p); } else { p->highi = p->midi; p->midi = di; p->midd = dd; return mode_golden_section(p); } } else { if(p->highi-p->midi > p->midi-p->lowi) { p->highi = di; return mode_golden_section(p); } else { p->lowi = di; return mode_golden_section(p); } } } /* Once the mode is found, we need to do a quality control. This quality control is the measure of its symmetricity. Let's assume the mode index is at 'm', since an index is just a count, from the Poisson distribution, the error in 'm' is sqrt(m). Now, let's take 'b' to be the first point that the difference between the cumulative distribution of the mirror and actual data deviate more than sqrt(m). For a scale parameter, lets assume that the index of 5% of 'm' is 'a'. We could have taken the distribution minimum, but the scatter in the minimum can be too high! Now, the "symmetricity" of the mode can be defined as: (b-m)/(m-a). For a completly symmetric mode, this should be 1. Note that the search for 'b' only goes to the 95% of the distribution. */ #define MODE_SYM(IT) { \ IT *a=p->data->array, af=0, bf=0, mf=0, fi; \ \ /* Set the values at the mirror and at 'a' (see above). */ \ mf=a[m]; \ af=a[ gal_statistics_quantile_index(2*m+1, MODE_SYM_LOW_Q) ]; \ if(mf<=af) return 0; \ \ /* This loop is very similar to that of */ \ /* 'mode_mirror_max_index_diff'. It will find the index where the */\ /* difference between the two cumulative frequency plots exceeds */ \ /* that of the error in the mirror index.*/ \ for(i=1; i<topi-m ;i+=1) \ { \ fi=2*mf-a[m-i]; \ \ for(j=prevj;j<size-m;++j) \ if(a[m+j]>fi) \ { \ if( a[m+j]-fi < fi-a[m+j-1] ) \ break; \ else \ { \ j--; \ break; \ } \ } \ \ if(i>j+errdiff || j>i+errdiff) \ { \ bi=m+i; \ break; \ } \ prevj=j; \ } \ \ /* bi==0 shows that no point with a larger difference could be */ \ /* found. So bi should be set to the end of the search region. */ \ if(bi==0) bi=topi; \ \ bf = *(IT *)b_val = a[bi]; \ /*printf("%zu: %f,%f,%f\n", m, (double)af, (double)mf, (double)bf);*/ \ \ /* For a bad result, return 0 (which will not output any mode). */ \ return bf==af ? 0 : (double)(bf-mf)/(double)(mf-af); \ } static double mode_symmetricity(struct statistics_mode_params *p, size_t m, void *b_val) { size_t i, j, bi=0, topi, errdiff, prevj=0, size=p->data->size; /* Set the basic constants. */ topi = 2*m>size-1 ? size-1 : 2*m; errdiff = p->mirrordist * sqrt(m); /* Do the process. */ switch(p->data->type) { case GAL_TYPE_UINT8: MODE_SYM( uint8_t ); break; case GAL_TYPE_INT8: MODE_SYM( int8_t ); break; case GAL_TYPE_UINT16: MODE_SYM( uint16_t ); break; case GAL_TYPE_INT16: MODE_SYM( int16_t ); break; case GAL_TYPE_UINT32: MODE_SYM( uint32_t ); break; case GAL_TYPE_INT32: MODE_SYM( int32_t ); break; case GAL_TYPE_UINT64: MODE_SYM( uint64_t ); break; case GAL_TYPE_INT64: MODE_SYM( int64_t ); break; case GAL_TYPE_FLOAT32: MODE_SYM( float ); break; case GAL_TYPE_FLOAT64: MODE_SYM( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, p->data->type); } /* Control shouldn't reach here! */ error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s so we can " "address the problem. Control must not have reached the end of this " "function", __func__, PACKAGE_BUGREPORT); return NAN; } /* Return the mode and related parameters in a float64 'gal_data_t' with the following elements in its array, the array: array[0]: mode array[1]: mode quantile. array[2]: symmetricity. array[3]: value at the end of symmetricity. The inputs are: - 'input' is the input dataset, it doesn't have to be sorted and can have blank values. - 'mirrordist' is the maximum distance after the mirror point to check as a multiple of sigma. - 'inplace' is either 0 or 1. If it is 1 and the input array has blank values and is not sorted, then the removal of blank values and sorting will occur in-place (input will be modified): all blank elements in the input array will be removed and it will be sorted. */ gal_data_t * gal_statistics_mode(gal_data_t *input, float mirrordist, int inplace) { double *oa; size_t modeindex; size_t dsize=4, mdsize=1; struct statistics_mode_params p; int type=gal_tile_block(input)->type; gal_data_t *tmptype=gal_data_alloc(NULL, type, 1, &mdsize, NULL, 1, -1, 1, NULL, NULL, NULL); gal_data_t *b_val=gal_data_alloc(NULL, type, 1, &mdsize, NULL, 1, -1, 1, NULL, NULL, NULL); gal_data_t *out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); /* A small sanity check. */ if(mirrordist<=0) error(EXIT_FAILURE, 0, "%s: %f not acceptable as a value to " "'mirrordist'. Only positive values can be given to it", __func__, mirrordist); /* Make sure the input doesn't have blank values and is sorted. */ p.data=gal_statistics_no_blank_sorted(input, inplace); /* It can happen that the whole array is blank. In such cases, 'p.data->size==0', so set all output elements to NaN and return. */ oa=out->array; if(p.data->size==0) { oa[0]=oa[1]=oa[2]=oa[3]=NAN; return out; } /* Basic constants. */ p.tolerance = 0.01; p.mirrordist = mirrordist; p.numcheck = p.data->size/2; /* Fill in the interval: Checking every single element is over-kill, so if the dataset is large enough, we'll set an interval to only check elements at an interval (so only 1000 elements are checked). */ p.interval = p.numcheck>1000 ? p.numcheck/1000 : 1; /* Set the lower and higher acceptable indexes for the mode based on quantiles. */ p.lowi = gal_statistics_quantile_index(p.data->size, MODE_MIN_Q); p.highi = gal_statistics_quantile_index(p.data->size, MODE_MAX_Q); /* Having set the low and higher interval values, we will set the first middle point and also the maximum distance on that point. This is necessary to start the iteration. */ p.midi = ( ( (float)p.highi + MODE_GOLDEN_RATIO * (float)p.lowi ) / ( 1 + MODE_GOLDEN_RATIO ) ); p.midd = mode_mirror_max_index_diff(&p, p.midi); /* Do the golden-section search iteration, read the mode value from the input array and save it in the 'tmptype' data structure that has the same type as the input. */ modeindex = mode_golden_section(&p); memcpy( tmptype->array, gal_pointer_increment(p.data->array, modeindex, p.data->type), gal_type_sizeof(p.data->type) ); /* Convert the mode (which is in the same type as the input at this stage) to float64. */ tmptype=gal_data_copy_to_new_type_free(tmptype, GAL_TYPE_FLOAT64); /* Put the first three values into the output structure. */ oa[0] = *((double *)(tmptype->array)); oa[1] = ((double)modeindex) / ((double)(p.data->size-1)); oa[2] = mode_symmetricity(&p, modeindex, b_val->array); /* If the symmetricity is good, put it in the output, otherwise set all output values to NaN. */ if(oa[2]>GAL_STATISTICS_MODE_GOOD_SYM) { b_val=gal_data_copy_to_new_type_free(b_val, GAL_TYPE_FLOAT64); oa[3] = *((double *)(b_val->array)); } else oa[0]=oa[1]=oa[2]=oa[3]=NAN; /* For a check: printf("mode: %g\nquantile: %g\nsymmetricity: %g\nsym value: %g\n", oa[0], oa[1], oa[2], oa[3]); */ /* Clean up (if necessary), then return the output. */ if(p.data!=input) gal_data_free(p.data); gal_data_free(tmptype); gal_data_free(b_val); return out; } /* Make the mirror array. */ #define STATS_MKMIRROR(IT) { \ IT *a=noblank_sorted->array, *m=mirror->array; \ IT zf=a[index]; \ *mirror_val=zf; \ for(i=0;i<=index;++i) m[i] = a[i]; \ for(i=1;i<=index;++i) m[index+i] = 2 * zf - m[index - i]; \ } static gal_data_t * statistics_make_mirror(gal_data_t *noblank_sorted, size_t index, double *mirror_val) { size_t i, dsize = 2*index+1; gal_data_t *mirror=gal_data_alloc(NULL, noblank_sorted->type, 1, &dsize, NULL, 1, -1, 1, NULL, NULL, NULL); /* Make sure the index is less than or equal to the number of elements. */ if( index >= noblank_sorted->size ) error(EXIT_FAILURE, 0, "%s: the index value must be less than or equal " "to the number of elements in the input, but it isn't: index: " "%zu, size of input: %zu", __func__, index, noblank_sorted->size); /* Fill in the mirror array. */ switch(noblank_sorted->type) { case GAL_TYPE_UINT8: STATS_MKMIRROR( uint8_t ); break; case GAL_TYPE_INT8: STATS_MKMIRROR( int8_t ); break; case GAL_TYPE_UINT16: STATS_MKMIRROR( uint16_t ); break; case GAL_TYPE_INT16: STATS_MKMIRROR( int16_t ); break; case GAL_TYPE_UINT32: STATS_MKMIRROR( uint32_t ); break; case GAL_TYPE_INT32: STATS_MKMIRROR( int32_t ); break; case GAL_TYPE_UINT64: STATS_MKMIRROR( uint64_t ); break; case GAL_TYPE_INT64: STATS_MKMIRROR( int64_t ); break; case GAL_TYPE_FLOAT32: STATS_MKMIRROR( float ); break; case GAL_TYPE_FLOAT64: STATS_MKMIRROR( double ); break; } /* Return the mirrored distribution. */ return mirror; } /* Make a mirrored histogram and cumulative frequency plot with the mirror distribution of the input with a value at 'value'. The output is a linked list of data structures: the first is the bins with one bin at the mirror point, the second is the histogram with a maximum of one and the third is the cumulative frequency plot. */ gal_data_t * gal_statistics_mode_mirror_plots(gal_data_t *input, gal_data_t *value, size_t numbins, int inplace, double *mirror_val) { gal_data_t *mirror, *bins, *hist, *cfp; gal_data_t *nbs=gal_statistics_no_blank_sorted(input, inplace); size_t ind=gal_statistics_quantile_function_index(nbs, value, inplace); /* Only continue if we actually have non-blank elements. */ if(nbs->size==0) return NULL; /* If the given mirror was outside the range of the input, then index will be 0 (below the range) or -1 (above the range), in that case, we should return NULL. */ if(ind==-1 || ind==0) return NULL; /* Make the mirror array. */ mirror=statistics_make_mirror(nbs, ind, mirror_val); /* Set the bins for histogram and cdf. */ bins=gal_statistics_regular_bins(mirror, NULL, numbins, *mirror_val); /* Make the histogram: set it's maximum value to 1 for a nice comparison with the CDF. */ hist=gal_statistics_histogram(mirror, bins, 0, 1); /* Make the cumulative frequency plot. */ cfp=gal_statistics_cfp(mirror, bins, 1); /* Set the pointers to make a table and return. */ bins->next=hist; hist->next=cfp; return bins; } /**************************************************************** ******** Sort ******* ****************************************************************/ /* Check if the given dataset is sorted. */ enum is_sorted_return { STATISTICS_IS_SORTED_NOT, /* ==0: by C standard. */ STATISTICS_IS_SORTED_INCREASING, STATISTICS_IS_SORTED_DECREASING, }; #define IS_SORTED(IT) { \ IT *aa=input->array, *a=input->array, *af=a+input->size-1; \ if(a[1]>=a[0]) do if( *(a+1) < *a ) break; while(++a<af); \ else do if( *(a+1) > *a ) break; while(++a<af); \ out=( a==af /* It reached the end of the array. */ \ ? ( aa[1]>=aa[0] \ ? STATISTICS_IS_SORTED_INCREASING \ : STATISTICS_IS_SORTED_DECREASING ) \ : STATISTICS_IS_SORTED_NOT ); \ } int gal_statistics_is_sorted(gal_data_t *input, int updateflags) { int out=GAL_BLANK_INT16; /* On some systems, int may be 16-bits wide. */ /* If the flags are already set, don't bother going over the dataset. */ if( input->flag & GAL_DATA_FLAG_SORT_CH ) return ( input->flag & GAL_DATA_FLAG_SORTED_I ? STATISTICS_IS_SORTED_INCREASING : ( input->flag & GAL_DATA_FLAG_SORTED_D ? STATISTICS_IS_SORTED_DECREASING : STATISTICS_IS_SORTED_NOT ) ); /* Parse the array (if necessary). */ switch(input->size) { case 0: error(EXIT_FAILURE, 0, "%s: input dataset has 0 elements", __func__); /* A one-element dataset can be considered, sorted, so we'll say its increasing. */ case 1: out=STATISTICS_IS_SORTED_INCREASING; break; /* Do the check when there is more than one element. */ default: switch(input->type) { case GAL_TYPE_UINT8: IS_SORTED( uint8_t ); break; case GAL_TYPE_INT8: IS_SORTED( int8_t ); break; case GAL_TYPE_UINT16: IS_SORTED( uint16_t ); break; case GAL_TYPE_INT16: IS_SORTED( int16_t ); break; case GAL_TYPE_UINT32: IS_SORTED( uint32_t ); break; case GAL_TYPE_INT32: IS_SORTED( int32_t ); break; case GAL_TYPE_UINT64: IS_SORTED( uint64_t ); break; case GAL_TYPE_INT64: IS_SORTED( int64_t ); break; case GAL_TYPE_FLOAT32: IS_SORTED( float ); break; case GAL_TYPE_FLOAT64: IS_SORTED( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } } /* Update the flags, if required. */ if(updateflags) { input->flag |= GAL_DATA_FLAG_SORT_CH; switch(out) { case STATISTICS_IS_SORTED_NOT: input->flag &= ~GAL_DATA_FLAG_SORTED_I; input->flag &= ~GAL_DATA_FLAG_SORTED_D; break; case STATISTICS_IS_SORTED_INCREASING: input->flag |= GAL_DATA_FLAG_SORTED_I; input->flag &= ~GAL_DATA_FLAG_SORTED_D; break; case STATISTICS_IS_SORTED_DECREASING: input->flag &= ~GAL_DATA_FLAG_SORTED_I; input->flag |= GAL_DATA_FLAG_SORTED_D; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The value %d is not recognized for 'out'", __func__, PACKAGE_BUGREPORT, out); } } return out; } /* This function is ignorant to blank values, if you want to make sure there is no blank values, you can call 'gal_blank_remove' first. */ #define STATISTICS_SORT(QSORT_F) { \ qsort(input->array, input->size, gal_type_sizeof(input->type), QSORT_F); \ } void gal_statistics_sort_increasing(gal_data_t *input) { /* Do the sorting. */ if(input->size) switch(input->type) { case GAL_TYPE_UINT8: STATISTICS_SORT(gal_qsort_uint8_i); break; case GAL_TYPE_INT8: STATISTICS_SORT(gal_qsort_int8_i); break; case GAL_TYPE_UINT16: STATISTICS_SORT(gal_qsort_uint16_i); break; case GAL_TYPE_INT16: STATISTICS_SORT(gal_qsort_int16_i); break; case GAL_TYPE_UINT32: STATISTICS_SORT(gal_qsort_uint32_i); break; case GAL_TYPE_INT32: STATISTICS_SORT(gal_qsort_int32_i); break; case GAL_TYPE_UINT64: STATISTICS_SORT(gal_qsort_uint64_i); break; case GAL_TYPE_INT64: STATISTICS_SORT(gal_qsort_int64_i); break; case GAL_TYPE_FLOAT32: STATISTICS_SORT(gal_qsort_float32_i); break; case GAL_TYPE_FLOAT64: STATISTICS_SORT(gal_qsort_float64_i); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } /* Set the flags. */ input->flag |= GAL_DATA_FLAG_SORT_CH; input->flag |= GAL_DATA_FLAG_SORTED_I; input->flag &= ~GAL_DATA_FLAG_SORTED_D; } /* See explanations above 'gal_statistics_sort_increasing'. */ void gal_statistics_sort_decreasing(gal_data_t *input) { /* Do the sorting. */ if(input->size) switch(input->type) { case GAL_TYPE_UINT8: STATISTICS_SORT(gal_qsort_uint8_d); break; case GAL_TYPE_INT8: STATISTICS_SORT(gal_qsort_int8_d); break; case GAL_TYPE_UINT16: STATISTICS_SORT(gal_qsort_uint16_d); break; case GAL_TYPE_INT16: STATISTICS_SORT(gal_qsort_int16_d); break; case GAL_TYPE_UINT32: STATISTICS_SORT(gal_qsort_uint32_d); break; case GAL_TYPE_INT32: STATISTICS_SORT(gal_qsort_int32_d); break; case GAL_TYPE_UINT64: STATISTICS_SORT(gal_qsort_uint64_d); break; case GAL_TYPE_INT64: STATISTICS_SORT(gal_qsort_int64_d); break; case GAL_TYPE_FLOAT32: STATISTICS_SORT(gal_qsort_float32_d); break; case GAL_TYPE_FLOAT64: STATISTICS_SORT(gal_qsort_float64_d); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } /* Set the flags. */ input->flag |= GAL_DATA_FLAG_SORT_CH; input->flag |= GAL_DATA_FLAG_SORTED_D; input->flag &= ~GAL_DATA_FLAG_SORTED_I; } /* Return a dataset that doesn't have blank values and is sorted. If the 'inplace' value is set to 1, then the input array will be modified, otherwise, a new array will be allocated with the desired properties. So if it is already sorted and has blank values, the 'inplace' variable is irrelevant. This function can also work on tiles, in that case, 'inplace' is useless, because a tile doesn't own its dataset and the dataset is not contiguous. */ gal_data_t * gal_statistics_no_blank_sorted(gal_data_t *input, int inplace) { gal_data_t *contig, *noblank, *sorted; /* We need to account for the case that there are no elements in the input. */ if(input->size) { /* If this is a tile, then first we have to copy it into a contiguous piece of memory. After this step, we will only be dealing with 'contig' (for a contiguous patch of memory). */ if(input->block) { /* Copy the input into a contiguous patch of memory. */ contig=gal_data_copy(input); /* When the data was a tile, we have already copied the array into a separate allocated space. So to avoid any further copying, we will just set the 'inplace' variable to 1. */ inplace=1; } else contig=input; /* Make sure there are no blanks in the array that will be used. After this step, we won't be dealing with 'input' any more, but with 'noblank'. */ if( gal_blank_present(contig, 1) ) { /* See if we should allocate a new dataset to remove blanks or if we can use the actual contiguous patch of memory. */ noblank = inplace ? contig : gal_data_copy(contig); gal_blank_remove(noblank); } else noblank=contig; /* Make sure the array is sorted. After this step, we won't be dealing with 'noblank' any more but with 'sorted'. */ if(noblank->size) { if( gal_statistics_is_sorted(noblank, 1) ) sorted = inplace ? noblank : gal_data_copy(noblank); else { if(inplace) sorted=noblank; else { if(noblank!=input) /* no-blank is already allocated. */ sorted=noblank; else sorted=gal_data_copy(noblank); } gal_statistics_sort_increasing(sorted); } } else sorted=noblank; } /* Input's size was zero. Note that we cannot simply copy the zero-sized input dataset, we'll have to allocate it here. */ else sorted = ( inplace ? input : gal_data_alloc(NULL, input->type, 0, NULL, input->wcs, 0, input->minmapsize, input->quietmmap, NULL, NULL, NULL) ); /* Set the blank and sorted flags if the dataset has zero-elements. Even if having blank values or being sorted is not defined on a zero-element dataset, it is up to different functions to choose what they will do with a zero-element dataset. The flags have to be set after this function any way. */ if(sorted->size==0) { sorted->flag |= GAL_DATA_FLAG_SORT_CH; sorted->flag |= GAL_DATA_FLAG_BLANK_CH; sorted->flag |= GAL_DATA_FLAG_SORTED_I; sorted->flag &= ~GAL_DATA_FLAG_HASBLANK; sorted->flag &= ~GAL_DATA_FLAG_SORTED_D; } /* Return final array. */ return sorted; } /**************************************************************** ******** Histogram and Cumulative Frequency Plot ******* ****************************************************************/ /* Generate an array of regularly spaced elements. Input arguments: * The 'input' set you want to apply the bins to. This is only necessary if the range argument is not complete, see below. If 'range' has all the necessary information, you can pass a NULL pointer for 'input'. * The 'inrange' data structure keeps the desired range along each dimension of the input data structure, it has to be in float32 type. Note these points: - If you want the full range of the dataset (in any dimensions, then just set 'range' to NULL and the range will be specified from the minimum and maximum value of the dataset. - If there is one element for each dimension in range, then it is viewed as a quantile (Q), and the range will be: 'Q to 1-Q'. - If there are two elements for each dimension in range, then they are assumed to be your desired minimum and maximum values. When either of the two are NaN, the minimum and maximum will be calculated for it. * The number of bins: must be larger than 0. * 'onebinstart' A desired value for onebinstart. Note that with this option, the bins won't start and end exactly on the given range values, it will be slightly shifted to accommodate this request. The output is a 1D array (column) of type double, it has to be double to account for small differences on the bin edges. */ gal_data_t * gal_statistics_regular_bins(gal_data_t *input, gal_data_t *inrange, size_t numbins, double onebinstart) { size_t i; gal_data_t *bins, *tmp, *range; double *b, *ra, min=NAN, max=NAN, hbw, diff, binwidth; /* Some sanity checks. */ if(numbins==0) error(EXIT_FAILURE, 0, "%s: 'numbins' cannot be given a value of 0", __func__); if(input->size==0) error(EXIT_FAILURE, 0, "%s: input's size is 0", __func__); /* Set the minimum and maximum values. */ if(inrange && inrange->size) { /* Make sure we are dealing with a double type range. */ if(inrange->type==GAL_TYPE_FLOAT64) range=inrange; else range=gal_data_copy_to_new_type(inrange, GAL_TYPE_FLOAT64); /* Set the minimum and maximum of the bins. */ ra=range->array; if( (range->size)%2 ) error(EXIT_FAILURE, 0, "%s: quantile ranges are not " "implemented yet", __func__); else { /* If the minimum isn't set (is blank), find it. */ if( isnan(ra[0]) ) { tmp=gal_data_copy_to_new_type_free( gal_statistics_minimum(input), GAL_TYPE_FLOAT64); min=*((double *)(tmp->array)); gal_data_free(tmp); } else min=ra[0]; /* For the maximum, when it isn't set, we'll add a very small value, so all points are included. */ if( isnan(ra[1]) ) { tmp=gal_data_copy_to_new_type_free(gal_statistics_maximum(input), GAL_TYPE_FLOAT64); max=*((double *)(tmp->array)); /* Clean up. */ gal_data_free(tmp); } else max=ra[1]; } /* Clean up: if 'range' was allocated within this function. */ if(range!=inrange) gal_data_free(range); } /* No range was given, find the minimum and maximum. */ else { tmp=gal_data_copy_to_new_type_free(gal_statistics_minimum(input), GAL_TYPE_FLOAT64); min=*((double *)(tmp->array)); gal_data_free(tmp); tmp=gal_data_copy_to_new_type_free(gal_statistics_maximum(input), GAL_TYPE_FLOAT64); max=*((double *)(tmp->array)); /* Clean up. */ gal_data_free(tmp); } /* Allocate the space for the bins. */ bins=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &numbins, NULL, 0, input->minmapsize, input->quietmmap, "bin_center", input->unit, "Center value of each bin."); /* Set central bin values. */ b=bins->array; hbw = ( binwidth=(max-min)/numbins )/2; for(i=0;i<numbins;++i) b[i] = min + i*binwidth + hbw; /* Go over all the bins and stop when the sign of the two sides of one bin are different. */ if( !isnan(onebinstart) ) { for(i=0;i<numbins-1;++i) if( (b[i]-hbw) < onebinstart && (b[i+1]-hbw) > onebinstart) break; if( i != numbins-1 ) { diff = onebinstart - (b[i]-hbw); for(i=0;i<numbins;++i) b[i] += diff; } } /* For a check: printf("min: %g\n", min); printf("max: %g\n", max); printf("onebinstart: %.10f\n", onebinstart); printf("binwidth: %g\n", binwidth); for(i=0;i<numbins;++i) printf("%zu: %.4g\t(%g, %g)\n", i, b[i], b[i]-hbw, b[i]+hbw); */ /* Set the status of the bins to regular and return. */ bins->status=GAL_STATISTICS_BINS_REGULAR; return bins; } /* Make a histogram of all the elements in the given dataset with bin values that are defined in the 'inbins' structure (see 'gal_statistics_regular_bins'). 'inbins' is not mandatory, if you pass a NULL pointer, the bins structure will be built within this function based on the 'numbins' input. As a result, when you have already defined the bins, 'numbins' is not used. */ #define HISTOGRAM_TYPESET(IT) { \ IT *a=input->array, *af=a+input->size; \ do \ if(*a>=min && *a<=max) \ { \ h_i=(*a-min)/binwidth; \ /* When '*a' is the largest element (within floating point */ \ /* errors), 'h_i' can be one element larger than the */ \ /* number of bins. But since its in the dataset, we need */ \ /* to count it. So we'll put it in the last bin. */ \ ++h[ h_i - (h_i==hist->size ? 1 : 0) ]; \ } \ while(++a<af); \ } gal_data_t * gal_statistics_histogram(gal_data_t *input, gal_data_t *bins, int normalize, int maxone) { float *f, *ff; size_t *h, h_i; gal_data_t *hist; double *d, min, max, ref=NAN, binwidth; /* Check if the bins are regular or not. For irregular bins, we can either use the old implementation, or GSL's histogram functionality. */ if(bins==NULL) error(EXIT_FAILURE, 0, "%s: 'bins' is NULL", __func__); if(bins->size==1) error(EXIT_FAILURE, 0, "%s: 'bins' has to have more than " "one element", __func__); if(bins->status!=GAL_STATISTICS_BINS_REGULAR) error(EXIT_FAILURE, 0, "%s: the input bins are not regular. Currently " "it is only implemented for regular bins", __func__); if(input->size==0) error(EXIT_FAILURE, 0, "%s: input's size is 0", __func__); /* Check if normalize and 'maxone' are not called together. */ if(normalize && maxone) error(EXIT_FAILURE, 0, "%s: only one of 'normalize' and 'maxone' may " "be given", __func__); /* Allocate the histogram (note that we are clearning it so all values are zero. */ hist=gal_data_alloc(NULL, GAL_TYPE_SIZE_T, bins->ndim, bins->dsize, NULL, 1, input->minmapsize, input->quietmmap, "hist_number", "counts", "Number of data points within each bin."); /* Set the minimum and maximum range of the histogram from the bins. */ d=bins->array; binwidth=d[1]-d[0]; min = d[ 0 ] - binwidth/2; max = d[ bins->size-1 ] + binwidth/2; /* Go through all the elements and find out which bin they belong to. */ h=hist->array; switch(input->type) { case GAL_TYPE_UINT8: HISTOGRAM_TYPESET(uint8_t); break; case GAL_TYPE_INT8: HISTOGRAM_TYPESET(int8_t); break; case GAL_TYPE_UINT16: HISTOGRAM_TYPESET(uint16_t); break; case GAL_TYPE_INT16: HISTOGRAM_TYPESET(int16_t); break; case GAL_TYPE_UINT32: HISTOGRAM_TYPESET(uint32_t); break; case GAL_TYPE_INT32: HISTOGRAM_TYPESET(int32_t); break; case GAL_TYPE_UINT64: HISTOGRAM_TYPESET(uint64_t); break; case GAL_TYPE_INT64: HISTOGRAM_TYPESET(int64_t); break; case GAL_TYPE_FLOAT32: HISTOGRAM_TYPESET(float); break; case GAL_TYPE_FLOAT64: HISTOGRAM_TYPESET(double); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } /* For a check: { size_t i, *hh=hist->array; for(i=0;i<hist->size;++i) printf("%-10.4f%zu\n", f[i], hh[i]); } */ /* Find the reference to correct the histogram if necessary. */ if(normalize) { /* Set the reference. */ ref=0.0f; hist=gal_data_copy_to_new_type_free(hist, GAL_TYPE_FLOAT32); ff=(f=hist->array)+hist->size; do ref += *f++; while(f<ff); /* Correct the name, units and comments. */ free(hist->name); free(hist->unit); free(hist->comment); gal_checkset_allocate_copy("hist_normalized", &hist->name); gal_checkset_allocate_copy("frac", &hist->unit); gal_checkset_allocate_copy("Normalized histogram value for this bin.", &hist->comment); } if(maxone) { /* Calculate the reference. */ ref=-FLT_MAX; hist=gal_data_copy_to_new_type_free(hist, GAL_TYPE_FLOAT32); ff=(f=hist->array)+hist->size; do ref = *f>ref ? *f : ref; while(++f<ff); /* Correct the name, units and comments. */ free(hist->name); free(hist->unit); free(hist->comment); gal_checkset_allocate_copy("hist_maxone", &hist->name); gal_checkset_allocate_copy("frac", &hist->unit); gal_checkset_allocate_copy("Fractional histogram value for this bin " "when maximum bin value is 1.0.", &hist->comment); } /* Correct the histogram if necessary. */ if( !isnan(ref) ) { ff=(f=hist->array)+hist->size; do *f++ /= ref; while(f<ff); } /* Return the histogram. */ return hist; } /* Build a 2D histogram from the two input columns (a list) and two bins (also a list). */ #define HISTOGRAM2D_TYPESET(AT, BT) { \ BT *b=input->next->array; \ AT *a=input->array, *af=a+input->size; \ do \ { \ if(*a>=mina && *a<=maxa && *b>=minb && *b<=maxb) \ { \ i=(*a-mina)/binwidtha; \ j=(*b-minb)/binwidthb; \ /* When '*a' is the largest element (within floating */ \ /* point errors), 'ii' can be one element larger than */ \ /* the number of bins. But since its in the dataset, we */ \ /* need to count it. So we'll put it in the last bin. */ \ if(i==bsizea) --i; \ if(j==bsizeb) --j; \ ++h[ i*bsizeb+j ]; \ } \ ++b; \ } \ while(++a<af); \ } #define HISTOGRAM2D_TYPESET_A(AT) { \ switch(input->next->type) \ { \ case GAL_TYPE_UINT8: HISTOGRAM2D_TYPESET(AT, uint8_t); break; \ case GAL_TYPE_INT8: HISTOGRAM2D_TYPESET(AT, int8_t); break; \ case GAL_TYPE_UINT16: HISTOGRAM2D_TYPESET(AT, uint16_t); break; \ case GAL_TYPE_INT16: HISTOGRAM2D_TYPESET(AT, int16_t); break; \ case GAL_TYPE_UINT32: HISTOGRAM2D_TYPESET(AT, uint32_t); break; \ case GAL_TYPE_INT32: HISTOGRAM2D_TYPESET(AT, int32_t); break; \ case GAL_TYPE_UINT64: HISTOGRAM2D_TYPESET(AT, uint64_t); break; \ case GAL_TYPE_INT64: HISTOGRAM2D_TYPESET(AT, int64_t); break; \ case GAL_TYPE_FLOAT32: HISTOGRAM2D_TYPESET(AT, float); break; \ case GAL_TYPE_FLOAT64: HISTOGRAM2D_TYPESET(AT, double); break; \ default: \ error(EXIT_FAILURE, 0, "%s: type code %d not recognized", \ __func__, input->type); \ } \ } gal_data_t * gal_statistics_histogram2d(gal_data_t *input, gal_data_t *bins) { uint32_t *h; double *o1, *o2; gal_data_t *tmp, *out; size_t i, j, bsizea, bsizeb, outsize; double *da, *db, binwidtha, binwidthb, mina, minb, maxa, maxb; /* Basic sanity checks. */ if(input->next==NULL) error(EXIT_FAILURE, 0, "%s: 'input' has to be a list of two datasets", __func__); if(bins->next==NULL) error(EXIT_FAILURE, 0, "%s: 'bins' has to be a list of two datasets", __func__); if(input->next->next) error(EXIT_FAILURE, 0, "%s: 'input' should only contain two datasets, " "not more", __func__); if(bins->next->next) error(EXIT_FAILURE, 0, "%s: 'bins' should only contain two datasets, " "not more", __func__); if(input->size != input->next->size) error(EXIT_FAILURE, 0, "the two input datasets have to have the " "same size"); if(bins->status!=GAL_STATISTICS_BINS_REGULAR || bins->next->status!=GAL_STATISTICS_BINS_REGULAR) error(EXIT_FAILURE, 0, "%s: the input bins are not regular. Currently " "it is only implemented for regular bins", __func__); /* For easy reading of bin sizes. */ da=bins->array; bsizea=bins->size; db=bins->next->array; bsizeb=bins->next->size; /* Allocate the output. */ outsize=bsizea*bsizeb; out=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &outsize, NULL, 1, input->minmapsize, input->quietmmap, "bin_dim1", input->unit, "Bin centers along first axis."); tmp=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &outsize, NULL, 1, input->minmapsize, input->quietmmap, "bin_dim2", input->next->unit, "Bin centers along second axis."); out->next=tmp; tmp=gal_data_alloc(NULL, GAL_TYPE_UINT32, 1, &outsize, NULL, 1, input->minmapsize, input->quietmmap, "hist_number", "counts", "Number of data points within each 2D-bin (box)."); out->next->next=tmp; /* Fill in the first two output columns and set the histogram pointer. */ o1=out->array; o2=out->next->array; h=out->next->next->array; for(i=0;i<bsizea;++i) for(j=0;j<bsizeb;++j) { o1[i*bsizeb+j]=da[i]; o2[i*bsizeb+j]=db[j]; } /* Set the minimum and maximum range of the histogram from the bins. */ binwidtha=da[1]-da[0]; binwidthb=db[1]-db[0]; mina=da[0]-binwidtha/2; minb=db[0]-binwidthb/2; maxa=da[ bins->size - 1 ] + binwidtha/2; maxb=db[ bins->next->size - 1] + binwidthb/2; /* Fill the histogram column. */ switch(input->type) { case GAL_TYPE_UINT8: HISTOGRAM2D_TYPESET_A(uint8_t); break; case GAL_TYPE_INT8: HISTOGRAM2D_TYPESET_A(int8_t); break; case GAL_TYPE_UINT16: HISTOGRAM2D_TYPESET_A(uint16_t); break; case GAL_TYPE_INT16: HISTOGRAM2D_TYPESET_A(int16_t); break; case GAL_TYPE_UINT32: HISTOGRAM2D_TYPESET_A(uint32_t); break; case GAL_TYPE_INT32: HISTOGRAM2D_TYPESET_A(int32_t); break; case GAL_TYPE_UINT64: HISTOGRAM2D_TYPESET_A(uint64_t); break; case GAL_TYPE_INT64: HISTOGRAM2D_TYPESET_A(int64_t); break; case GAL_TYPE_FLOAT32: HISTOGRAM2D_TYPESET_A(float); break; case GAL_TYPE_FLOAT64: HISTOGRAM2D_TYPESET_A(double); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } /* Return the final output. */ return out; } /* Make a cumulative frequency plot (CFP) of all the elements in the given dataset with bin values that are defined in the 'bins' structure (see 'gal_statistics_regular_bins'). The CFP is built from the histogram: in each bin, the value is the sum of all previous bins in the histogram. Thus, if you have already calculated the histogram before calling this function, you can pass it onto this function as the data structure in 'bins->next'. If 'bin->next!=NULL', then it is assumed to be the histogram. If it is NULL, then the histogram will be calculated internally and freed after the job is finished. When a histogram is given and it is normalized, the CFP will also be normalized (even if the normalized flag is not set here): note that a normalized CFP's maximum value is 1. */ gal_data_t * gal_statistics_cfp(gal_data_t *input, gal_data_t *bins, int normalize) { double sum; float *f, *ff, *hf; gal_data_t *hist, *cfp; size_t *s, *sf, *hs, sums; /* Check if the bins are regular or not. For irregular bins, we can either use the old implementation, or GSL's histogram functionality. */ if(bins->status!=GAL_STATISTICS_BINS_REGULAR) error(EXIT_FAILURE, 0, "%s: the input bins are not regular. Currently " "it is only implemented for regular bins", __func__); if(input->size==0) error(EXIT_FAILURE, 0, "%s: input's size is 0", __func__); /* Prepare the histogram. */ hist = ( bins->next ? bins->next : gal_statistics_histogram(input, bins, 0, 0) ); /* If the histogram has float32 type it was given by the user and is either normalized or its maximum was set to 1. We can only use it if it was normalized. If it isn't normalized, then we must ignore it and build the histogram here. */ if(hist->type==GAL_TYPE_FLOAT32) { sum=0.0f; ff=(f=hist->array)+hist->size; do sum += *f++; while(f<ff); if(sum!=1.0f) hist=gal_statistics_histogram(input, bins, 0, 0); } /* Allocate the cumulative frequency plot's necessary space. */ cfp=gal_data_alloc( NULL, hist->type, bins->ndim, bins->dsize, NULL, 1, input->minmapsize, input->quietmmap, ( hist->type==GAL_TYPE_FLOAT32 ? "cfp_normalized" : "cfp_number" ), ( hist->type==GAL_TYPE_FLOAT32 ? "frac" : "count" ), ( hist->type==GAL_TYPE_FLOAT32 ? "Fraction of data elements from the start to this " "bin (inclusive)." : "Number of data elements from the start to this " "bin (inclusive).") ); /* Fill in the cumulative frequency plot. */ switch(hist->type) { case GAL_TYPE_SIZE_T: sums=0; hs=hist->array; sf=(s=cfp->array)+cfp->size; do sums = (*s += *hs++ + sums); while(++s<sf); break; case GAL_TYPE_FLOAT32: sum=0.0f; hf=hist->array; ff=(f=cfp->array)+cfp->size; do sum = (*f += *hf++ + sum); while(++f<ff); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, cfp->type); } /* Normalize the CFP if the user asked for it and it wasn't normalized until now. */ if(normalize && cfp->type==GAL_TYPE_SIZE_T) { /* Find the sum, then divide the plot by it. Note that the sum must come from the histogram, not the CFP! */ sums=0; cfp=gal_data_copy_to_new_type_free(cfp, GAL_TYPE_FLOAT32); sf=(s=hist->array)+hist->size; do sums += *s++; while(s<sf); ff=(f=cfp->array)+cfp->size; do *f++ /= sums; while(f<ff); /* Correct the name, units and comments. */ free(cfp->name); free(cfp->unit); free(cfp->comment); gal_checkset_allocate_copy("cfp_normalized", &cfp->name); gal_checkset_allocate_copy("frac", &cfp->unit); gal_checkset_allocate_copy("Fraction of data elements from the start " "to this bin (inclusive).", &cfp->comment); } /* If the histogram was allocated here, free it. */ if(hist!=bins->next) gal_data_free(hist); return cfp; } /**************************************************************** ***************** Outliers ******************** ****************************************************************/ static gal_data_t * statistics_clip_prepare(gal_data_t *input, gal_data_t *nbs, float multip, float param, int quiet, int sig1_mad0, gal_data_t **center, gal_data_t **spread, char **colnames) { float *oa; gal_data_t *out; uint8_t type=gal_tile_block(input)->type; size_t i, one=1, osize=GAL_STATISTICS_CLIP_OUT_SIZE; /* Some sanity checks. */ if( multip<=0 ) error(EXIT_FAILURE, 0, "%s: 'multip', must be greater than zero. The " "given value was %g", __func__, multip); if( param<=0 ) error(EXIT_FAILURE, 0, "%s: 'param', must be greater than zero. The " "given value was %g", __func__, param); if( param >= 1.0f && ceil(param) != param ) error(EXIT_FAILURE, 0, "%s: when 'param' is larger than 1.0, it is " "interpretted as an absolute number of clips. So it must be an " "integer. However, your given value %g", __func__, param); if( (nbs->flag & GAL_DATA_FLAG_SORT_CH)==0 ) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. 'nbs->flag', doesn't have the 'GAL_DATA_FLAG_SORT_CH' " "bit activated", __func__, PACKAGE_BUGREPORT); if( (nbs->flag & GAL_DATA_FLAG_SORTED_I)==0 && (nbs->flag & GAL_DATA_FLAG_SORTED_D)==0 ) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. 'nbs' isn't sorted", __func__, PACKAGE_BUGREPORT); /* Allocate the necessary spaces (spread is only necessary for MAD). */ out=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, 1, &osize, NULL, 0, input->minmapsize, input->quietmmap, NULL, NULL, NULL); *center=gal_data_alloc(NULL, type, 1, &one, NULL, 0, input->minmapsize, input->quietmmap, NULL, NULL, NULL); *spread = ( sig1_mad0 ? NULL : gal_data_alloc(NULL, type, 1, &one, NULL, 0, input->minmapsize, input->quietmmap, NULL, NULL, NULL) ); /* Set all the output values to NaN to start with. */ oa=out->array; for(i=0;i<GAL_STATISTICS_CLIP_OUT_SIZE;++i) oa[i]=NAN; /* Prepare the column names if the user gave quiet=0. */ if(quiet==0) { if(sig1_mad0) { if( asprintf(colnames, "%-5s %-10s %-12s %-12s", "round", "number", "median", "STD")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation1 error", __func__); } else { if(asprintf(colnames, "%-5s %-10s %-12s %-12s", "round", "number", "median", "MAD")<0) error(EXIT_FAILURE, 0, "%s: asprintf allocation2 error", __func__); } } /* Return the allocated space for the output. */ return out; } /* Calculate all the extra statistics that are usually useful with sigma-clipping. */ static void statistics_clip_stats_extra(gal_data_t *nbs, float *oa, uint8_t extrastats) { gal_data_t *tmp; uint8_t istd = extrastats & GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD; uint8_t imad = extrastats & GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MAD; uint8_t imean = extrastats & GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN; /* If the "extra" stats are already calculated (for example MAD in MAD-clipping), then there is no need to re-calculate it, so set its conditional variable to 0. Note the '!' at the start of the condition. */ if( !(isnan(oa[GAL_STATISTICS_CLIP_OUTCOL_MEAN]) && imean) ) imean=0; if( !(isnan(oa[GAL_STATISTICS_CLIP_OUTCOL_STD]) && istd) ) istd=0; if( !(isnan(oa[GAL_STATISTICS_CLIP_OUTCOL_MAD]) && imad) ) imad=0; /* Mean and Standard deviation. */ if(imean && istd) { tmp=gal_statistics_mean_std(nbs); oa[ GAL_STATISTICS_CLIP_OUTCOL_STD ] = ((double *)(tmp->array))[1]; oa[ GAL_STATISTICS_CLIP_OUTCOL_MEAN ] = ((double *)(tmp->array))[0]; gal_data_free(tmp); } else /* Only one of the mean or STD was requested */ { if(imean) { tmp=gal_statistics_mean(nbs); oa[ GAL_STATISTICS_CLIP_OUTCOL_MEAN ] = ((double *)(tmp->array))[0]; gal_data_free(tmp); } if(istd) { tmp=gal_statistics_std(nbs); oa[ GAL_STATISTICS_CLIP_OUTCOL_STD ] = ((double *)(tmp->array))[0]; gal_data_free(tmp); } } /* MAD. */ if(imad) { tmp=gal_statistics_mad(nbs, 1); tmp=gal_data_copy_to_new_type_free(tmp, GAL_TYPE_FLOAT32); oa[ GAL_STATISTICS_CLIP_OUTCOL_MAD ] = ((float *)(tmp->array))[0]; gal_data_free(tmp); } } /* Sigma-cilp a given distribution. The way this function works is very simple: first it will sort the input (if it isn't sorted). Afterwards, it will recursively change the starting point of the array and its size, calcluating the basic statistics in each round to define the new starting point and size. */ #define CLIPALL(IT) { \ IT *a = nbs->array, *af = a + nbs->size; \ IT *bf = nbs->array, *b = bf + nbs->size - 1; \ \ /* Remove all out-of-range elements from the start of the array. */ \ if( nbs->flag & GAL_DATA_FLAG_SORTED_I ) \ do if( *a > (center - (multip * spread)) ) \ { start=a; break; } \ while(++a<af); \ else \ do if( *a < (center + (multip * spread)) ) \ { start=a; break; } \ while(++a<af); \ \ /* Remove all out-of-range elements from the end of the array. */ \ if( nbs->flag & GAL_DATA_FLAG_SORTED_I ) \ do if( *b < (center + (multip * spread)) ) \ { size=b-a+1; break; } \ while(--b>=bf); \ else \ do if( *b > (center - (multip * spread)) ) \ { size=b-a+1; break; } \ while(--b>=bf); \ } static gal_data_t * statistics_clip(gal_data_t *input, float multip, float param, uint8_t extrastats, int inplace, int quiet, int sig1_mad0) { float *oa; char *colnames; gal_data_t *spread_d; void *start, *nbs_array; size_t i, num=0, size, oldsize; uint8_t type=gal_tile_block(input)->type; uint8_t bytolerance = param>=1.0f ? 0 : 1; double center=NAN, spread=NAN, oldspread=NAN; gal_data_t *fcopy, *center_i, *center_d, *spread_i, *out; gal_data_t *nbs=gal_statistics_no_blank_sorted(input, inplace); size_t maxnum = param>=1.0f?param:GAL_STATISTICS_CLIP_MAX_CONVERGE; /* Do sanity checks and allocate space for the output. */ out=statistics_clip_prepare(input, nbs, multip, param, quiet, sig1_mad0, ¢er_i, &spread_i, &colnames); /* If we have more than one element, and the user wants to see the progress, then print the column information. */ if(!quiet && nbs->size>1) { printf("%s\n", colnames); free(colnames); } /* Only continue processing if we have non-blank elements. */ oa=out->array; nbs_array=nbs->array; switch(nbs->size) { /* There was nothing in the input! */ case 0: if(!quiet) error(EXIT_SUCCESS, 0, "NO %s-CLIPPING: all input elements " "are blank or input's size is zero", sig1_mad0 ? "SIGMA" : "MAD"); for(i=0;i<GAL_STATISTICS_CLIP_OUT_SIZE;++i) oa[i]=NAN; break; /* Only one element, convert it to floating point and put it as the mean and median (the standard deviation will be zero by definition). */ case 1: /* Write the values in the output array. */ fcopy=gal_data_copy_to_new_type(nbs, GAL_TYPE_FLOAT32); center=*((float *)(fcopy->array)); gal_data_free(fcopy); spread=0; size=1; oa[ GAL_STATISTICS_CLIP_OUTCOL_MEDIAN ] = center; oa[ GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED ] = size; oa[ GAL_STATISTICS_CLIP_OUTCOL_MAD ] = sig1_mad0 ? NAN : spread; oa[ GAL_STATISTICS_CLIP_OUTCOL_STD ] = sig1_mad0 ? spread : NAN; /* Print the comments (if requested). */ if(!quiet) printf("%-5d %-10d %-12.5e %-12.5e\n", 1, 1, oa[ GAL_STATISTICS_CLIP_OUTCOL_MEAN ], 0.0f); break; /* More than one element. */ default: /* Do the clipping, but first initialize the values that will be changed during the clipping: the start of the array and the array's size. */ size=nbs->size; start=nbs->array; while(num<maxnum && size) { /* 'start' and 'size' will be different in the next round (updated within 'CLIPALL'). */ nbs->array = start; nbs->size = oldsize = size; /* For a detailed check, just correct the type). if(!quiet) { size_t iii; printf("nbs->size: %zu\n", nbs->size); for(iii=0;iii<nbs->size;++iii) printf("%f\n", ((float *)(nbs->array))[iii]); } */ /* Find the center and disperson. */ statistics_median_in_sorted_no_blank(nbs, center_i->array); if(sig1_mad0) spread_i=gal_statistics_std(nbs); else statistics_mad_in_sorted_no_blank(nbs, center_i, spread_i->array); center_d=gal_data_copy_to_new_type(center_i, GAL_TYPE_FLOAT64); spread_d=gal_data_copy_to_new_type(spread_i, GAL_TYPE_FLOAT64); if(sig1_mad0) { gal_data_free(spread_i); spread_i=NULL; } /* Put them in usable (with a type) pointers. */ center = ((double *)(center_d->array))[0]; spread = ((double *)(spread_d->array))[0]; /* If the user wanted to view the steps, show it to them. */ if(!quiet) printf("%-5zu %-10zu %-12.5e %-12.5e\n", num+1, size, center, spread); /* See if we should break out of the loop: - When the spread is zero we should break out in any case (if it is by tolerance or number of clips): this can happen in two situtaions: when all the elements are identical after the clip (resulting in both MAD and STD to be zero), or when we have three numbers (for example) and two of them are the same (resulting in a MAD of zero). - If we are working by tolerance, normally, 'oldspread' should be larger than 'spread', because the possible outliers have been removed. If it is not, it means that we have clipped too much and must stop anyway, so we don't need an absolute value on the difference! */ if( spread==0 || (bytolerance && num>0) ) if( spread==0 || ((oldspread - spread) / spread) < param ) { if(spread==0) oldspread=spread; gal_data_free(spread_d); gal_data_free(center_d); break; } /* Clip all the elements outside of the desired range: since the array is sorted, this means to just change the starting pointer and size of the array. */ switch(type) { case GAL_TYPE_UINT8: CLIPALL( uint8_t ); break; case GAL_TYPE_INT8: CLIPALL( int8_t ); break; case GAL_TYPE_UINT16: CLIPALL( uint16_t ); break; case GAL_TYPE_INT16: CLIPALL( int16_t ); break; case GAL_TYPE_UINT32: CLIPALL( uint32_t ); break; case GAL_TYPE_INT32: CLIPALL( int32_t ); break; case GAL_TYPE_UINT64: CLIPALL( uint64_t ); break; case GAL_TYPE_INT64: CLIPALL( int64_t ); break; case GAL_TYPE_FLOAT32: CLIPALL( float ); break; case GAL_TYPE_FLOAT64: CLIPALL( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } /* Set the values from this round in the old elements, so the next round can compare with, and return then if necessary. */ oldspread = spread; ++num; /* Clean up: */ gal_data_free(spread_d); gal_data_free(center_d); } /* If we were in tolerance mode and 'num' and 'maxnum' are equal (the loop didn't stop by tolerance), so the outputs should be NaN. Note that they may have been filled in previous rounds compared to the initialization (where they were all NaN). */ out->status=num; oa[GAL_STATISTICS_CLIP_OUTCOL_NUMBER_CLIPS]=num; if( size==0 || (bytolerance && num==maxnum) ) { for(i=0;i<GAL_STATISTICS_CLIP_OUT_SIZE;++i) oa[i]=NAN; } else { oa[ GAL_STATISTICS_CLIP_OUTCOL_MEDIAN ] = center; oa[ GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED ] = size; oa[ GAL_STATISTICS_CLIP_OUTCOL_MAD ] = sig1_mad0 ? NAN : spread; oa[ GAL_STATISTICS_CLIP_OUTCOL_STD ] = sig1_mad0 ? spread : NAN; } } /* Measure and report the remaining elements if requested. */ if(extrastats) statistics_clip_stats_extra(nbs, oa, extrastats); /* Clean up and return. */ nbs->array=nbs_array; gal_data_free(center_i); gal_data_free(spread_i); if(nbs!=input) gal_data_free(nbs); return out; } gal_data_t * gal_statistics_clip_sigma(gal_data_t *input, float multip, float param, uint8_t extrastats, int inplace, int quiet) { return statistics_clip(input, multip, param, extrastats, inplace, quiet, 1); } gal_data_t * gal_statistics_clip_mad(gal_data_t *input, float multip, float param, uint8_t extrastats, int inplace, int quiet) { return statistics_clip(input, multip, param, extrastats, inplace, quiet, 0); } /* Find the first outlier in a distribution. */ #define OUTLIER_BYTYPE(IT) { \ IT *arr=nbs->array; \ for(i=window_size; i<nbs->size && i!=0; pos1_neg0 ? ++i : --i) \ { \ /* Fill in the distance array. */ \ if(pos1_neg0) \ for(j=0; j<wtakeone; ++j) \ darr[j] = arr[i-window_size+j+1] - arr[i-window_size+j]; \ else \ for(j=0; j<wtakeone; ++j) \ darr[j] = arr[i+window_size-j+1] - arr[i+window_size-j]; \ \ /* Get the sigma-clipped information. */ \ sclip=gal_statistics_clip_mad(dist, sigclip_multip, \ sigclip_param, clipflags, 0, 1); \ sarr=sclip->array; \ \ /* For a check. */ \ if(quiet==0) \ printf("%f [%zu]: %f (%f, %f) %f\n", (float)(arr[i]), i, \ (float)(arr[i]-arr[i-1]), \ sarr[GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED], \ sarr[GAL_STATISTICS_CLIP_OUTCOL_STD], \ (((double)(arr[i]-arr[i-1])) \ - sarr[GAL_STATISTICS_CLIP_OUTCOL_MEDIAN]) \ /sarr[GAL_STATISTICS_CLIP_OUTCOL_STD]); \ \ /* Terminate the loop if the dist is larger than requested. */ \ /* This shows we have reached the first outlier's position. */ \ if( (((double)(arr[i]-arr[i-1])) \ - sarr[GAL_STATISTICS_CLIP_OUTCOL_MEDIAN]) \ > sigma*sarr[GAL_STATISTICS_CLIP_OUTCOL_STD] ) \ { \ /* Allocate the output dataset. */ \ out=gal_data_alloc(NULL, input->type, 1, &one, NULL, 0, -1, \ 1, NULL, NULL, NULL); \ \ /* Write the outlier, clean up and break. */ \ *(IT *)(out->array)=arr[i-1]; \ gal_data_free(sclip); \ break; \ } \ \ /* Clean up (if we get here). */ \ gal_data_free(sclip); \ } \ } gal_data_t * gal_statistics_outlier_bydistance(int pos1_neg0, gal_data_t *input, size_t window_size, float sigma, float sigclip_multip, float sigclip_param, int inplace, int quiet) { float *sarr; double *darr; size_t i, j, one=1, wtakeone; gal_data_t *dist, *sclip, *nbs, *out=NULL; uint8_t clipflags=GAL_STATISTICS_CLIP_OUTCOL_STD; /* Remove all blanks and sort the dataset. */ nbs=gal_statistics_no_blank_sorted(input, inplace); /* If all elements are blank, simply return the default (NULL) output. */ if(nbs->size==0) return out; /* Only continue if the window size is more than 2 elements (out "outlier" is hard to define on smaller datasets). */ if(window_size>2) { /* For a check. if(nbs->type==GAL_TYPE_FLOAT32) { float *n=nbs->array; for(i=0;i<nbs->size;++i) printf("%f\n", n[i]); exit(0); } */ /* Allocate space to keep the distances. */ wtakeone=window_size-1; dist=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &wtakeone, NULL, 0, -1, 1, NULL, NULL, NULL); darr=dist->array; /* Find the outlier based on the type of the input dataset. */ switch(input->type) { case GAL_TYPE_UINT8: OUTLIER_BYTYPE( uint8_t ); break; case GAL_TYPE_INT8: OUTLIER_BYTYPE( int8_t ); break; case GAL_TYPE_UINT16: OUTLIER_BYTYPE( uint16_t ); break; case GAL_TYPE_INT16: OUTLIER_BYTYPE( int16_t ); break; case GAL_TYPE_UINT32: OUTLIER_BYTYPE( uint32_t ); break; case GAL_TYPE_INT32: OUTLIER_BYTYPE( int32_t ); break; case GAL_TYPE_UINT64: OUTLIER_BYTYPE( uint64_t ); break; case GAL_TYPE_INT64: OUTLIER_BYTYPE( int64_t ); break; case GAL_TYPE_FLOAT32: OUTLIER_BYTYPE( float ); break; case GAL_TYPE_FLOAT64: OUTLIER_BYTYPE( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, input->type); } /* Clean up. */ gal_data_free(dist); } /* Clean up and return. */ if(nbs!=input) gal_data_free(nbs); return out; } /* Find the outliers using the average distance of the neighboring points. */ #define OUTLIER_FLAT_CFP_BYTYPE(IT) { \ IT diff, *pr=prev->array; \ IT *a=nbs->array, *p=a+d, *pp=a+nbs->size-d; \ \ do \ { \ diff=*(p+d)-*(p-d); \ if(p-a-d<numprev) \ { \ pr[p-a-d]=diff; \ if(!quiet) printf("%-6zu%-15g%-15g\n", p-a, (float)(*p), \ (float)diff); \ } \ else \ { \ /* Sigma-clipped median and std for a check. */ \ prev->flag=0; \ prev->size=prev->dsize[0]=numprev; \ sclip=gal_statistics_clip_mad(prev, sigclip_multip, \ sigclip_param, clipflags, \ 1, 1); \ \ sarr=sclip->array; \ check = ( (diff - sarr[GAL_STATISTICS_CLIP_OUTCOL_MEDIAN]) \ / sarr[GAL_STATISTICS_CLIP_OUTCOL_STD] ); \ \ /* If requested, print the values. */ \ if(!quiet) printf("%-6zu%-15g%-15g%-15g (%g,%g)\n", p-a, \ (float)(*p), (float)diff, check, \ sarr[GAL_STATISTICS_CLIP_OUTCOL_MEDIAN], \ sarr[GAL_STATISTICS_CLIP_OUTCOL_STD]); \ \ /* When values are equal, std will be roughly zero */ \ if(sarr[GAL_STATISTICS_CLIP_OUTCOL_STD]>1e-6 && check>thresh) \ { \ if(flatind==GAL_BLANK_SIZE_T) \ { \ ++counter; \ flatind=p-a; \ } \ else \ { \ if(flatind==p-a-counter) \ { /* First element above thresh is 0, so for */ \ /* counting, when counting the number of */ \ /* contiguous elements, we have to add 1. */ \ if(counter+1==numcontig) \ {gal_data_free(sclip); break;} \ else ++counter; \ } \ else { flatind=GAL_BLANK_SIZE_T; counter=0; } \ } \ } \ else { flatind=GAL_BLANK_SIZE_T; counter=0; } \ pr[(p-a-d)%numprev]=diff; \ gal_data_free(sclip); \ } \ } \ while(++p<pp); \ if(counter+1!=numcontig) flatind=GAL_BLANK_SIZE_T; \ } gal_data_t * gal_statistics_outlier_flat_cfp(gal_data_t *input, size_t numprev, float sigclip_multip, float sigclip_param, float thresh, size_t numcontig, int inplace, int quiet, size_t *index) { float *sarr; double check; gal_data_t *nbs, *prev, *out=NULL, *sclip; uint8_t clipflags=GAL_STATISTICS_CLIP_OUTCOL_STD; size_t d=2, counter=0, one=1, flatind=GAL_BLANK_SIZE_T; /* Sanity checks. */ if(thresh<=0) error(EXIT_FAILURE, 0, "%s: the value of 'thresh' (%g) must be " "positive", __func__, thresh); if(numprev==0) error(EXIT_FAILURE, 0, "%s: 'numprev' (%zu) cannot be zero", __func__, numprev); /* Remove all blanks and sort the dataset. */ nbs=gal_statistics_no_blank_sorted(input, inplace); /* Keep previous slopes. */ prev=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &numprev, NULL, 0, -1, 1, NULL, NULL, NULL); /* Find the index where the distribution becomes sufficiently flat. */ switch(nbs->type) { case GAL_TYPE_UINT8: OUTLIER_FLAT_CFP_BYTYPE( uint8_t ); break; case GAL_TYPE_INT8: OUTLIER_FLAT_CFP_BYTYPE( int8_t ); break; case GAL_TYPE_UINT16: OUTLIER_FLAT_CFP_BYTYPE( uint16_t ); break; case GAL_TYPE_INT16: OUTLIER_FLAT_CFP_BYTYPE( int16_t ); break; case GAL_TYPE_UINT32: OUTLIER_FLAT_CFP_BYTYPE( uint32_t ); break; case GAL_TYPE_INT32: OUTLIER_FLAT_CFP_BYTYPE( int32_t ); break; case GAL_TYPE_UINT64: OUTLIER_FLAT_CFP_BYTYPE( uint64_t ); break; case GAL_TYPE_INT64: OUTLIER_FLAT_CFP_BYTYPE( int64_t ); break; case GAL_TYPE_FLOAT32: OUTLIER_FLAT_CFP_BYTYPE( float ); break; case GAL_TYPE_FLOAT64: OUTLIER_FLAT_CFP_BYTYPE( double ); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, nbs->type); } /* Write the output dataset: if no point flat part was found, return NULL. */ if(flatind!=GAL_BLANK_SIZE_T) { out=gal_data_alloc(NULL, input->type, 1, &one, NULL, 0, -1, 1, NULL, NULL, NULL); memcpy(out->array, gal_pointer_increment(nbs->array, flatind, nbs->type), gal_type_sizeof(nbs->type)); } /* Clean up and return. */ if(nbs!=input) gal_data_free(nbs); if(index) *index=flatind; gal_data_free(prev); return out; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/table.c���������������������������������������������������������������������������0000644�0001750�0001750�00000061420�14551337306�010773� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* table -- Functions for I/O on tables. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <regex.h> #include <stdlib.h> #include <string.h> #include <gnuastro/git.h> #include <gnuastro/txt.h> #include <gnuastro/blank.h> #include <gnuastro/table.h> #include <gnuastro/pointer.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/tableintern.h> /************************************************************************/ /*************** Internal conversions ***************/ /************************************************************************/ uint8_t gal_table_displayflt_from_str(char *string) { if( !strcmp(string, "exp")) return GAL_TABLE_DISPLAY_FMT_EXP; else if (!strcmp(string, "fixed")) return GAL_TABLE_DISPLAY_FMT_FIXED; else return GAL_TABLE_DISPLAY_FMT_INVALID; } char * gal_table_displayflt_to_str(uint8_t fmt) { switch(fmt) { case GAL_TABLE_DISPLAY_FMT_FIXED: return "fixed"; case GAL_TABLE_DISPLAY_FMT_EXP: return "exp"; default: return NULL; } } /************************************************************************/ /*************** Information about a table ***************/ /************************************************************************/ /* Store the information of each column in a table (either as a text file or as a FITS table) into an array of data structures with 'numcols' structures (one data structure for each column). The number of rows is stored in 'numrows'.\ See the DESCRIPTION OF THIS FUNCTION IN THE BOOK FOR a detailed listing of the output's elements. */ gal_data_t * gal_table_info(char *filename, char *hdu, gal_list_str_t *lines, size_t *numcols, size_t *numrows, int *tableformat, char *hdu_option_name) { /* Get the table format and size (number of columns and rows). */ if(filename && gal_fits_file_recognized(filename)) return gal_fits_tab_info(filename, hdu, numcols, numrows, tableformat, hdu_option_name); else { *tableformat=GAL_TABLE_FORMAT_TXT; return gal_txt_table_info(filename, lines, numcols, numrows); } /* Abort with an error if we get to this point. */ error(EXIT_FAILURE, 0, "%s: a bug! please contact us at %s so we can " "fix the problem. Control must not have reached the end of this " "function", __func__, PACKAGE_BUGREPORT); return NULL; } void gal_table_print_info(gal_data_t *allcols, size_t numcols, size_t numrows) { size_t i, mms; int Nw=3, nw=4, uw=5, tw=4, twt;/* Initial width from label's width */ char *typestr, *name, *unit, *comment; /* If there aren't any columns, there is no need to print anything. */ if(numcols==0) return; /* Set the widths to print the column information. The width for the column number can easily be identified from the logarithm of the number of columns. */ Nw=log10(numcols)+1; for(i=0;i<numcols;++i) { /* Length of name and unit columns. */ if(allcols[i].name && strlen(allcols[i].name)>nw) nw=strlen(allcols[i].name); if(allcols[i].unit && strlen(allcols[i].unit)>uw) uw=strlen(allcols[i].unit); /* For the type, we need to account for vector columns. For strings, their length is already accounted for there, so this doesn't involve them. Recall that within 'gal_fits_tab_info', we put the repeat counter into the 'minmapsize' element of the 'gal_data_t'. If the repeat of a numerical column is more than 1, then we need to add a '[N]' after the type name later. */ mms=allcols[i].minmapsize; twt=strlen(gal_type_name(allcols[i].type, 1)); if(allcols[i].type!=GAL_TYPE_STRING && mms>1) twt += (int)(log10(mms))+1+2; /* 1 for the log, 2 for '()'. */ if(allcols[i].type && twt>tw) tw=twt; } /* We want one column space between the columns for readability, not the exact length, so increment all the numbers. */ Nw+=2; nw+=2; uw+=2; tw+=2; /* Print these column names. */ printf("%-*s%-*s%-*s%-*s%s\n", Nw, "---", nw, "----", uw, "-----", tw, "----", "-------"); printf("%-*s%-*s%-*s%-*s%s\n", Nw, "No.", nw, "Name", uw, "Units", tw, "Type", "Comment"); printf("%-*s%-*s%-*s%-*s%s\n", Nw, "---", nw, "----", uw, "-----", tw, "----", "-------"); /* For each column, print the information, then free them. */ for(i=0;i<numcols;++i) { /* To help in reading. */ name = allcols[i].name; /* Just defined for easier */ unit = allcols[i].unit; /* readability. The compiler */ comment = allcols[i].comment; /* optimizer will remove them. */ /* Set the vector size (if relevant). */ mms=allcols[i].minmapsize; if(allcols[i].type!=GAL_TYPE_STRING && mms>1) { if( asprintf(&typestr, "%s(%zu)", gal_type_name(allcols[i].type, 1), mms)<0 ) error(EXIT_FAILURE, 0, "%s: 'astprintf' allocation", __func__); } else gal_checkset_allocate_copy(gal_type_name(allcols[i].type, 1), &typestr); /* Print the actual info. */ printf("%-*zu%-*s%-*s%-*s%s\n", Nw, i+1, nw, name ? name : GAL_BLANK_STRING , uw, unit ? unit : GAL_BLANK_STRING , tw, allcols[i].type ? typestr : "--", comment ? comment : GAL_BLANK_STRING); free(typestr); } /* Print the number of rows. */ if(numrows!=GAL_BLANK_SIZE_T) printf("--------\nNumber of rows: %zu\n--------\n", numrows); } /************************************************************************/ /*************** Read a table ***************/ /************************************************************************/ /* Function to print regular expression error. This is taken from the GNU C library manual, with small modifications to fit out style. */ static void table_regexerrorexit(int errcode, regex_t *compiled, char *input) { char *regexerrbuf; size_t length = regerror (errcode, compiled, NULL, 0); errno=0; regexerrbuf=malloc(length); if(regexerrbuf==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for regexerrbuf", __func__, length); (void) regerror(errcode, compiled, regexerrbuf, length); error(EXIT_FAILURE, 0, "%s: regular expression error: %s in value to " "'--column' ('-c'): '%s'", __func__, regexerrbuf, input); } /* Macro to set the string to search in. */ static char * table_set_strcheck(gal_data_t *col, int searchin) { switch(searchin) { case GAL_TABLE_SEARCH_NAME: return col->name; case GAL_TABLE_SEARCH_UNIT: return col->unit; case GAL_TABLE_SEARCH_COMMENT: return col->comment; default: error(EXIT_FAILURE, 0, "%s: the code %d to searchin was not " "recognized", __func__, searchin); } error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "address the problem. Control must not have reached the end of " "this function", __func__, PACKAGE_BUGREPORT); return NULL; } gal_list_sizet_t * gal_table_list_of_indexs(gal_list_str_t *cols, gal_data_t *allcols, size_t numcols, int searchin, int ignorecase, char *filename, char *hdu, size_t *colmatch) { long tlong; int regreturn; regex_t *regex; gal_list_str_t *tmp; gal_list_sizet_t *indexll=NULL; size_t i, nummatch, colcount=0, len; char *str, *strcheck, *tailptr, *errorstring; /* Go over the given columns. */ if(cols) for(tmp=cols; tmp!=NULL; tmp=tmp->next) { /* Counter for number of columns matched, and length of name. */ nummatch=0; len=strlen(tmp->v); /* REGULAR EXPRESSION: the first and last characters are '/'. */ if( tmp->v[0]=='/' && tmp->v[len-1]=='/' ) { /* Remove the slashes, note that we don't want to change 'tmp->v' (because it should be freed later). So first we set the last character to '\0', then define a new string from the first element. */ tmp->v[len-1]='\0'; str = tmp->v + 1; /* Allocate the regex_t structure: */ errno=0; regex=malloc(sizeof *regex); if(regex==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for " "regex", __func__, sizeof *regex); /* First we have to "compile" the string into the regular expression, see the "POSIX Regular Expression Compilation" section of the GNU C Library. About the case of the string: the FITS standard says: "It is _strongly recommended_ that every field of the table be assigned a unique, case insensitive name with this keyword..." So the column names can be case-sensitive. Here, we don't care about the details of a match, the only important thing is a match, so we are using the REG_NOSUB flag. */ regreturn=0; regreturn=regcomp(regex, str, ( ignorecase ? RE_SYNTAX_AWK | REG_ICASE : RE_SYNTAX_AWK ) ); if(regreturn) table_regexerrorexit(regreturn, regex, str); /* With the regex structure "compile"d you can go through all the column names. Just note that column names are not mandatory in the FITS standard, so some (or all) columns might not have names, if so 'p->tname[i]' will be NULL. */ for(i=0;i<numcols;++i) { strcheck=table_set_strcheck(&allcols[i], searchin); if(strcheck && regexec(regex, strcheck, 0, 0, 0)==0) { ++nummatch; gal_list_sizet_add(&indexll, i); } } /* Free the regex_t structure: */ regfree(regex); /* Put the '/' back into the input string. This is done because after this function, the calling program might want to inform the user of their exact input string. */ tmp->v[len-1]='/'; } /* Not regular expression. */ else { tlong=strtol(tmp->v, &tailptr, 0); /* INTEGER: If the string is an integer, then tailptr should point to the null character. If it points to anything else, it shows that we are not dealing with an integer (usable as a column number). So floating point values are also not acceptable. Since it is possible for the users to give zero for the column number, we need to read the string as a number first, then check it here. */ if(*tailptr=='\0') { /* Make sure the number is larger than zero! */ if(tlong<=0) error(EXIT_FAILURE, 0, "%s: column numbers must be " "positive (not zero or negative). You have asked " "for column number %ld", __func__, tlong); /* Check if the given value is not larger than the number of columns in the input catalog (note that the user is counting from 1, not 0!). */ if(tlong>numcols) error(EXIT_FAILURE, 0, "%s: has %zu columns, but you " "have asked for column number %ld", gal_fits_name_save_as_string(filename, hdu), numcols, tlong); /* Everything seems to be fine, put this column number in the output column numbers linked list. Note that internally, the column numbers start from 0, not 1. */ gal_list_sizet_add(&indexll, tlong-1); ++nummatch; } /* EXACT MATCH: */ else { /* Go through all the desired column information and add the column number when there is a match. */ for(i=0;i<numcols;++i) { /* Check if this column actually has any information. Then do a case-sensitive or insensitive comparison of the strings. */ strcheck=table_set_strcheck(&allcols[i], searchin); if(strcheck && ( ignorecase ? !strcasecmp(tmp->v, strcheck) : !strcmp(tmp->v, strcheck) ) ) { ++nummatch; gal_list_sizet_add(&indexll, i); } } } } /* If there was no match, then report an error. This can only happen for string matches, not column numbers, for numbers, the checks are done (and program is aborted) before this step. */ if(nummatch==0) { if( asprintf(&errorstring, "'%s' didn't match any of the " "column %ss.", tmp->v, gal_tableintern_searchin_as_string(searchin))<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_tableintern_error_col_selection(filename, hdu, errorstring); } /* Keep the value of 'nummatch' if the user requested it. */ if(colmatch) colmatch[colcount++]=nummatch; } /* cols==NULL */ else for(i=0;i<numcols;++i) gal_list_sizet_add(&indexll, i); /* Reverse the list. */ gal_list_sizet_reverse(&indexll); /* For a check. gal_list_sizet_print(indexll); exit(0); */ /* Return the list. */ return indexll; } /* Read the specified columns in a table (named 'filename') into a linked list of data structures. If the file is FITS, then 'hdu' will also be used, otherwise, 'hdu' is ignored. The information to search for columns should be specified by the 'cols' linked list as string values in each node of the list, the strings in each node can be a number, an exact match to a column name, or a regular expression (in GNU AWK format) enclosed in '/ /'. The 'searchin' value comes from the 'gal_table_where_to_search' enumerator and has to be one of its given types. If 'cols' is NULL, then this function will read the full table. The output is a linked list with the same order of the cols linked list. Note that one column node in the 'cols' list might give multiple columns, in this case, the order of output columns that correspond to that one input, are in order of the table (which column was read first). So the first requested column is the first popped data structure and so on. */ gal_data_t * gal_table_read(char *filename, char *hdu, gal_list_str_t *lines, gal_list_str_t *cols, int searchin, int ignorecase, size_t numthreads, size_t minmapsize, int quietmmap, size_t *colmatch, char *hdu_option_name) { int tableformat; gal_list_sizet_t *indexll; size_t i, numcols, numrows; gal_data_t *allcols, *out=NULL; /* First get the information of all the columns. */ allcols=gal_table_info(filename, hdu, lines, &numcols, &numrows, &tableformat, hdu_option_name); /* If there was no actual data in the file, then return NULL. */ if(allcols==NULL) return NULL; /* Get the list of indexs in the same order as the input list. */ indexll=gal_table_list_of_indexs(cols, allcols, numcols, searchin, ignorecase, filename, hdu, colmatch); /* Depending on the table format, read the columns into the output structure. Also note that after these functions, the 'indexll' will be all freed (each popped element is actually freed). */ switch(tableformat) { case GAL_TABLE_FORMAT_TXT: out=gal_txt_table_read(filename, lines, numrows, allcols, indexll, minmapsize, quietmmap); break; case GAL_TABLE_FORMAT_AFITS: case GAL_TABLE_FORMAT_BFITS: out=gal_fits_tab_read(filename, hdu, numrows, allcols, indexll, numthreads, minmapsize, quietmmap, hdu_option_name); break; default: error(EXIT_FAILURE, 0, "%s: table format code %d not recognized for " "'tableformat'", __func__, tableformat); } /* Clean up. */ for(i=0;i<numcols;++i) gal_data_free_contents(&allcols[i]); free(allcols); gal_list_sizet_free(indexll); /* Return the final linked list. */ return out; } /************************************************************************/ /*************** Write a table ***************/ /************************************************************************/ /* Write the basic information that is necessary by each program into the comments field. Note that the 'comments' has to be already sorted in the proper order. */ void gal_table_comments_add_intro(gal_list_str_t **comments, char *program_string, time_t *rawtime) { char gitdescribe[100], *tmp; /* Get the Git description in the running folder. */ tmp=gal_git_describe(); if(tmp) { sprintf(gitdescribe, " from %s,", tmp); free(tmp); } else gitdescribe[0]='\0'; /* Git version and time of program's starting, this will be the second line. Note that ctime puts a '\n' at the end of its string, so we'll have to remove that. Also, note that since we are allocating 'msg', we are setting the allocate flag of 'gal_list_str_add' to 0. */ if( asprintf(&tmp, "Created%s on %s", gitdescribe, ctime(rawtime))<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); tmp[ strlen(tmp)-1 ]='\0'; gal_list_str_add(comments, tmp, 0); /* Program name: this will be the top of the list (first line). We will need to set the allocation flag for this one, because program_string is usually statically allocated. */ if(program_string) gal_list_str_add(comments, program_string, 1); } /* The input is a linked list of data structures and some comments. The table will then be written into 'filename' with a format that is specified by 'tableformat'. */ void gal_table_write(gal_data_t *cols, struct gal_fits_list_key_t *keylist, gal_list_str_t *comments, int tableformat, char *filename, char *extname, uint8_t colinfoinstdout, int freekeys) { /* If a filename was given, then the tableformat is relevant and must be used. When the filename is empty, a text table must be printed on the standard output (on the command-line). */ if(filename) { if(gal_fits_name_is_fits(filename)) gal_fits_tab_write(cols, comments, tableformat, filename, extname, keylist, freekeys); else gal_txt_write(cols, keylist, comments, filename, colinfoinstdout, 0, freekeys); } else /* Write to standard output. */ gal_txt_write(cols, keylist, comments, filename, colinfoinstdout, 0, freekeys); } void gal_table_write_log(gal_data_t *logll, char *program_string, time_t *rawtime, gal_list_str_t *comments, char *filename, int quiet) { char *msg; /* Write the program name and time first. */ gal_table_comments_add_intro(&comments, program_string, rawtime); /* Write the log file to disk. */ gal_table_write(logll, NULL, comments, GAL_TABLE_FORMAT_TXT, filename, "LOG", 0, 0); /* In verbose mode, print the information. */ if(!quiet) { if( asprintf(&msg, "%s created.", filename)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); gal_timing_report(NULL, msg, 1); free(msg); } } /************************************************************************/ /*************** Column operation ***************/ /************************************************************************/ gal_data_t * gal_table_col_vector_extract(gal_data_t *vector, gal_list_sizet_t *indexs) { uint8_t type; gal_data_t *out=NULL; size_t i, vw, vh, ind; char *name, *basename; gal_list_sizet_t *tind; /* Basic sanity checks. */ if(vector==NULL) return NULL; if(indexs==NULL) return NULL; if(vector->ndim!=2) error(EXIT_FAILURE, 0, "%s: the input 'vector' must have 2 " "dimensions but has %zu dimensions", __func__, vector->ndim); for(tind=indexs;tind!=NULL;tind=tind->next) if(tind->v > vector->dsize[1]) error(EXIT_FAILURE, 0, "%s: the input vector has %zu elements but " "you have asked for index %zu (counting from zero)", __func__, vector->dsize[1], tind->v); /* Allocate the output columns. */ type=vector->type; vh=vector->dsize[0]; vw=vector->dsize[1]; for(tind=indexs;tind!=NULL;tind=tind->next) { /* If the vector has a name, add a counter after it. If it doesn't have a name, just use 'VECTOR'. Because index couting starts from 0, but column counters in tables start with 1, we'll add one to the index. */ ind=tind->v; basename = vector->name ? vector->name : "VECTOR"; if( asprintf(&name, "%s-%zu", basename, ind+1)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf alloc of 'name'", __func__); /* Allocate the output and fill it. */ gal_list_data_add_alloc(&out, NULL, type, 1, &vh, NULL, 1, vector->minmapsize, vector->quietmmap, name, vector->unit, vector->comment); for(i=0;i<vh;++i) memcpy(gal_pointer_increment(out->array, i, type), gal_pointer_increment(vector->array, i*vw+ind, type), gal_type_sizeof(type)); /* Clean up. */ free(name); } /* Reverse the list to be in the same order as the indexs, and return. */ gal_list_data_reverse(&out); return out; } gal_data_t * gal_table_cols_to_vector(gal_data_t *list) { gal_data_t *tmp, *out; char *name, *unit=NULL, *inname=NULL; size_t i, j, dsize[2], num=gal_list_data_number(list); /* If the list is empty or just has a single column, return itself. */ if(num<2) return list; /* Go over the inputs na make sure they are all single dimensional and have the same size. */ for(tmp=list;tmp!=NULL;tmp=tmp->next) { /* First, a sanity check. */ if(tmp->ndim!=1 || tmp->type!=list->type || tmp->dsize[0]!=list->dsize[0]) error(EXIT_FAILURE, 0, "%s: inputs should all be single-valued " "columns (one dimension) and have the same size and type", __func__); /* Find the first one with a name. */ if(tmp->unit && unit==NULL) unit=tmp->unit; if(tmp->name && inname==NULL) inname=tmp->name; } /* Set the name based on the input. */ if( asprintf(&name, "%s-VECTOR", inname?inname:"TO")<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); /* Allocate the output dataset. */ dsize[1]=num; dsize[0]=list->size; out=gal_data_alloc(NULL, list->type, 2, dsize, NULL, 0, list->minmapsize, list->quietmmap, name, unit, "Vector by merging multiple columns."); /* Fill the output dataset. */ j=0; for(tmp=list;tmp!=NULL;tmp=tmp->next) { for(i=0;i<tmp->dsize[0];++i) memcpy(gal_pointer_increment(out->array, i*num+j, out->type), gal_pointer_increment(tmp->array, i, out->type), gal_type_sizeof(out->type)); ++j; } /* Clean up and return. */ free(name); return out; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/tableintern.c���������������������������������������������������������������������0000644�0001750�0001750�00000035610�14551337306�012215� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* table -- Functions for I/O on tables. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <regex.h> #include <stdlib.h> #include <string.h> #include <gnuastro/git.h> #include <gnuastro/txt.h> #include <gnuastro/blank.h> #include <gnuastro/table.h> #include <gnuastro/pointer.h> #include <gnuastro-internal/timing.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/tableintern.h> /************************************************************************/ /*************** Error messages ***************/ /************************************************************************/ void gal_tableintern_error_col_selection(char *filename, char *hdu, char *errorstring) { char *c, *name, *command; /* Set the proper pointers. */ if(gal_fits_name_is_fits(filename)) { if( asprintf(&name, "%s (hdu: %s)", filename, hdu)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); c=hdu; while(*c!='\0') if(isspace(*c++)) break; if( asprintf(&command, *c=='\0' ? "%s --hdu=%s" : "%s --hdu=\"%s\"", filename, hdu)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else command=name=filename?filename:"stdin"; /* Abort with with the proper error. */ error(EXIT_FAILURE, 0, "%s: %s\n\nFor more information on selecting " "columns in Gnuastro, please run the following command (press " "'SPACE' to go down and 'q' to return to the command-line):\n\n" " $ info gnuastro \"Selecting table columns\"\n\n" "To define a better column selection criteria, you can see " "the list of column meta-data in this table, with the following " "command:\n\n" " $ asttable %s --information\n", name, errorstring, command); } /************************************************************************/ /*************** Formats ***************/ /************************************************************************/ /* Return the type of desired table based on a standard string. */ uint8_t gal_tableintern_string_to_format(char *string) { if(string) /* Its not NULL. */ { if(!strcmp(string, "txt")) return GAL_TABLE_FORMAT_TXT; else if(!strcmp(string,"fits-ascii")) return GAL_TABLE_FORMAT_AFITS; else if(!strcmp(string, "fits-binary")) return GAL_TABLE_FORMAT_BFITS; else return GAL_TABLE_FORMAT_INVALID; } else return GAL_TABLE_FORMAT_INVALID; } char * gal_tableintern_format_as_string(uint8_t tableformat) { switch(tableformat) { case GAL_TABLE_FORMAT_TXT: return "txt"; case GAL_TABLE_FORMAT_AFITS: return "fits-ascii"; case GAL_TABLE_FORMAT_BFITS: return "fits-binary"; default: error(EXIT_FAILURE, 0, "%s: code %d not recognized", __func__, tableformat); return NULL; } } /* In programs, the 'searchin' variable is much more easier to format in as a description than an integer (which is what 'gal_table_read_cols' needs). This function will check the string value and give the corresponding integer value. */ uint8_t gal_tableintern_string_to_searchin(char *string) { if(string) /* Its not NULL. */ { if(!strcmp(string, "name")) return GAL_TABLE_SEARCH_NAME; else if(!strcmp(string, "unit")) return GAL_TABLE_SEARCH_UNIT; else if(!strcmp(string, "comment")) return GAL_TABLE_SEARCH_COMMENT; else return GAL_TABLE_SEARCH_INVALID; } else return GAL_TABLE_SEARCH_INVALID; } char * gal_tableintern_searchin_as_string(uint8_t searchin) { switch(searchin) { case GAL_TABLE_SEARCH_NAME: return "name"; case GAL_TABLE_SEARCH_UNIT: return "unit"; case GAL_TABLE_SEARCH_COMMENT: return "comment"; default: error(EXIT_FAILURE, 0, "%s: code %d not recognized as a valid search " "field", __func__, searchin); return NULL; } } /* For programs that output tables, the '--tableformat' option will be used to specify what format the output table should be in. When the output file is a FITS file, there are multiple formats, so to simplify the coding in each program, this function will do a sanity check on the value given to the '--tableformat' parameter. */ void gal_tableintern_check_fits_format(char *filename, int tableformat) { if( filename && gal_fits_name_is_fits(filename) ) { /* When '--tableformat' was not given. */ if(tableformat==GAL_TABLE_FORMAT_INVALID) error(EXIT_FAILURE, 0, "'%s' (output file) is a FITS file but the " "desired format of the FITS table has not been specified with " "the '--tableformat' option. For FITS tables, this option can " "take two values: 'fits-ascii', or 'fits-binary'", filename); /* When '--tableformat' didn't have the correct value. */ if( tableformat != GAL_TABLE_FORMAT_AFITS && tableformat != GAL_TABLE_FORMAT_BFITS ) error(EXIT_FAILURE, 0, "'%s' (output file) is a FITS file but " "is not a recognized FITS table format. For FITS tables, " "'--tableformat' can take two values: 'fits-ascii', or " "'fits-binary'", filename); } } /************************************************************************/ /*************** Printing information ***************/ /************************************************************************/ /* Fill in/adjust the basic information necessary to print a column. This information can be used for printing a plain text file or for FITS ASCII tables. The 'fmt' and 'lng' should point to pre-allocated arrays. The best way is: 'char fmt[2], lng[3];' in the same function calling this. The width and precision, which are also necessary for printing, are updated in the data structure's 'disp_width' and 'disp_precision' elements. */ void gal_tableintern_col_print_info(gal_data_t *col, int tableformat, char *fmt, char *lng) { size_t j; char **strarr; int maxstrlen, width=0, precision=GAL_BLANK_INT; /* First do a sanity check, so we can safly stop checking in the steps below. */ switch(tableformat) { case GAL_TABLE_FORMAT_TXT: case GAL_TABLE_FORMAT_AFITS: break; default: error(EXIT_FAILURE, 0, "%s: is only for plain text or FITS ASCII " "tables. The input 'tableformat' code %d not recognized", __func__, tableformat); } /* Set the formats and widths based on the type of the column. Initialize the characters and blank pointer. The long prefix is not necessary for most types, so just initialize it once up here. */ fmt[0]=fmt[1]=lng[0]=lng[1]=lng[2]='\0'; switch(col->type) { case GAL_TYPE_BIT: error(EXIT_FAILURE, 0, "%s: printing of bit types is currently " "not supported", __func__); break; case GAL_TYPE_STRING: /* Set the basic information. */ fmt[0] = tableformat==GAL_TABLE_FORMAT_TXT ? 's' : 'A'; /* Go through all the strings in the column and find the maximum length to use as printing. If the user asked for a larger width (through the data structure's disp_width element), then set that. */ maxstrlen=0; strarr=col->array; for(j=0;j<col->size;++j) maxstrlen = ( (int)strlen(strarr[j]) > maxstrlen ? (int)strlen(strarr[j]) : maxstrlen ); width = col->disp_width>maxstrlen ? col->disp_width : maxstrlen; break; case GAL_TYPE_UINT8: case GAL_TYPE_UINT16: case GAL_TYPE_UINT32: case GAL_TYPE_UINT64: /* For the FITS ASCII table, there is only one format for all integers. */ if(tableformat==GAL_TABLE_FORMAT_AFITS) fmt[0]='I'; else switch(col->disp_fmt) { case GAL_TABLE_DISPLAY_FMT_UDECIMAL: fmt[0]='u'; break; case GAL_TABLE_DISPLAY_FMT_OCTAL: fmt[0]='o'; break; case GAL_TABLE_DISPLAY_FMT_HEX: fmt[0]='X'; break; default: fmt[0]='u'; } /* If we have a long type, then make changes. */ if(col->type==GAL_TYPE_UINT64) { lng[0]='l'; width=( col->disp_width<=0 ? GAL_TABLE_DEF_WIDTH_LINT : col->disp_width ); } else width=( col->disp_width<=0 ? GAL_TABLE_DEF_WIDTH_INT : col->disp_width ); /* For integers, there shouldn't be any default precision. If the caller didn't specify it, it should just be the full set of available digits. because for 'printf' the precision of integers means (according to the GNU C Library manual): "the minimum number of digits to appear; leading zeros are produced if necessary. If you don’t specify a precision, the number is printed with as many digits as it needs. If you convert a value of zero with an explicit precision of zero, then no characters at all are produced". The main problem is that integer columns can contain zero and in that case '%.0u' or '%.0d' will not print anything! */ precision=col->disp_precision; break; case GAL_TYPE_INT8: case GAL_TYPE_INT16: case GAL_TYPE_INT32: fmt[0] = tableformat==GAL_TABLE_FORMAT_TXT ? 'd' : 'I'; width = ( col->disp_width<=0 ? GAL_TABLE_DEF_WIDTH_INT : col->disp_width ); precision=col->disp_precision; /* See description in unsigned types.*/ break; case GAL_TYPE_INT64: lng[0] = 'l'; fmt[0] = tableformat==GAL_TABLE_FORMAT_TXT ? 'd' : 'I'; width=( col->disp_width<=0 ? GAL_TABLE_DEF_WIDTH_LINT : col->disp_width ); precision=col->disp_precision; /* See description in unsigned types.*/ break; /* We need a default value (because in most cases, it won't be set. */ case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: /* Set the format. For FITS-ASCII, dealing with 'F' (fixed-point notation) can create bad CFITSIO crashes if the total number of digits becomes larger than the width. We won't have this problem with 'E' (exponential) notation, so we'll just write all the floating points in exponential notation. */ if(tableformat==GAL_TABLE_FORMAT_AFITS) fmt[0]='E'; else switch(col->disp_fmt) { case GAL_TABLE_DISPLAY_FMT_FIXED: fmt[0]='f'; break; case GAL_TABLE_DISPLAY_FMT_EXP: fmt[0]='e'; break; case GAL_TABLE_DISPLAY_FMT_GENERAL: fmt[0]='g'; break; default: /* '%e' is the most conservative in plain-text: */ fmt[0] = 'e'; break; /* it is independent of the power. */ } /* Set the width and precision. */ switch(col->type) { case GAL_TYPE_FLOAT32: width = ( col->disp_width<=0 ? GAL_TABLE_DEF_WIDTH_FLT : col->disp_width ); precision = ( col->disp_precision==GAL_BLANK_INT ? GAL_TABLE_DEF_PRECISION_FLT : col->disp_precision ); break; case GAL_TYPE_FLOAT64: width = ( col->disp_width<=0 ? GAL_TABLE_DEF_WIDTH_DBL : col->disp_width ); precision = ( col->disp_precision==GAL_BLANK_INT ? GAL_TABLE_DEF_PRECISION_DBL : col->disp_precision ); break; } /* In ASCII-FITS tables, the full number (including the sign, the point, the 'E+123' should fit within the width. For example in '-7.32384000000E+04' (with a width of 18 characters), besides the digits after the decimal point, we need the following 8 characters '-7.E+NNN'. Therefore the precision should not be more than 10. If the precision is more than this, CFITSIO is going to crash. We should therefore correct it here. To be safe, we'll also add another integer and leave 9 characters of the width for non-precision characters. */ if(tableformat==GAL_TABLE_FORMAT_AFITS && width-precision<9) precision=width-9; break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, col->type); } /* Write the final width and precision into the column's data structure. */ col->disp_width=width; col->disp_precision=precision; } /* Use the input 'blank' string and the input column to put the blank value in the column's array. If the string cannot be interpretted as a blank of that type, then store it in the 'mmapname' element of the data structure. */ void gal_tableintern_read_blank(gal_data_t *col, char *blank) { /* If there is nothing to use as blank, then don't continue, note that the column data structure was initialized to mean that there is no blank value. */ if(blank==NULL) return; /* Just for a sanity check, the ndim and array elements should be zero. */ if(col->ndim || col->array) error(EXIT_FAILURE, 0, "%s: the number of dimensions, and the " "'array' element of 'col' must be zero", __func__); /* Read the blank value as the given type. If successful, then 'gal_data_string_to_type' will return 0. In that case, we need to initialize the necessary parameters to read this data structure correctly. */ if( gal_type_from_string((void **)(&col->array), blank, col->type) ) { col->flag |= GAL_TABLEINTERN_FLAG_ARRAY_IS_BLANK_STRING; gal_checkset_allocate_copy(blank, (char **)(&col->array)); } else { col->flag=0; col->dsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, 1, 0, __func__, "col->dsize"); col->dsize[0]=col->ndim=col->size=1; } } ������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/threads.c�������������������������������������������������������������������������0000644�0001750�0001750�00000030051�14551337306�011332� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to facilitate using threads. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <time.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <gnuastro/threads.h> #include <gnuastro/pointer.h> #include <nproc.h> /* from Gnulib, in Gnuastro's source */ /*****************************************************************/ /********* Implementation of pthread_barrier ***************/ /*****************************************************************/ /* Re-implementation of the example code given in: http://blog.albertarmea.com/post/47089939939/using-pthread-barrier-on-mac-os-x */ #if GAL_CONFIG_HAVE_PTHREAD_BARRIER == 0 /* Initialize the barrier structure. A barrier is a high-level way to wait until several threads have finished. */ int pthread_barrier_init(pthread_barrier_t *b, pthread_barrierattr_t *attr, unsigned int limit) { int err; /* Sanity check: */ if(limit==0) { errno = EINVAL; error(EXIT_FAILURE, errno, "%s: limit is zero", __func__); } /* Initialize the mutex: */ err=pthread_mutex_init(&b->mutex, 0); if(err) error(EXIT_FAILURE, err, "%s: inializing mutex", __func__); /* Initialize the condition variable: */ err=pthread_cond_init(&b->cond, 0); if(err) { pthread_mutex_destroy(&b->mutex); error(EXIT_FAILURE, err, "%s: inializing cond", __func__); } /* set the values: */ b->limit=limit; b->condfinished=b->count=0; return 0; } /* Suspend the calling thread (tell it to wait), until the limiting number of barriers is reached by the other threads. When the number isn't reached yet (process goes into the 'else'), then we use the 'pthread_cond_wait' function, which will wait until a broadcast is announced by another thread that succeeds the 'if'. After the thread no longer needs the condition variable, we increment 'b->condfinished' so 'pthread_barrier_destroy' can know if it should wait (sleep) or continue. */ int pthread_barrier_wait(pthread_barrier_t *b) { pthread_mutex_lock(&b->mutex); ++b->count; if(b->count >= b->limit) { pthread_cond_broadcast(&b->cond); ++b->condfinished; pthread_mutex_unlock(&b->mutex); return 1; } else { /* Initially b->count is smaller than b->limit, otherwise control would never have reached here. However, when it get to 'pthread_cond_wait', this thread goes into a suspended period and is only awaken when a broad-cast is made. But we only want this thread to finish when b->count >= b->limit, so we have this while loop. */ while(b->count < b->limit) pthread_cond_wait(&b->cond, &b->mutex); ++b->condfinished; pthread_mutex_unlock(&b->mutex); return 0; } } /* Wait until all the threads that were blocked behind this barrier have finished (don't need the mutex and condition variable anymore. Then destroy the two. After this function, you can safely re-use the pthread_barrier_t structure. */ int pthread_barrier_destroy(pthread_barrier_t *b) { struct timespec request, remaining; /* Wait until no more threads need the barrier. */ request.tv_sec=0; request.tv_nsec=GAL_THREADS_BARRIER_DESTROY_NANOSECS; while( b->condfinished < b->limit ) nanosleep(&request, &remaining); /* Destroy the condition variable and mutex. */ pthread_cond_destroy(&b->cond); pthread_mutex_destroy(&b->mutex); return 0; } #endif /* GAL_CONFIG_HAVE_PTHREAD_BARRIER == 0 */ /*******************************************************************/ /************ Thread utilities **************/ /*******************************************************************/ size_t gal_threads_number() { return num_processors(NPROC_CURRENT); } /* We have 'numactions' jobs and we want their indexs to be divided between 'numthreads' CPU threads. This function will give each index to a thread such that the maximum difference between the number of actions for each thread is 1. The results will be saved in a 2D array of 'outthrdcols' columns and each row will finish with a (size_t)(-1), which is the blank value for size_t (larger than any possible index!). */ char * gal_threads_dist_in_threads(size_t numactions, size_t numthreads, size_t minmapsize, int quietmmap, size_t **outthrds, size_t *outthrdcols) { size_t *sp, *fp; char *mmapname=NULL; size_t i, *thrds, thrdcols; *outthrdcols = thrdcols = numactions/numthreads+2; /* Allocate the space to keep the identifiers. */ thrds=*outthrds=gal_pointer_allocate_ram_or_mmap(GAL_TYPE_SIZE_T, numthreads*thrdcols, 0, minmapsize, &mmapname, 0, __func__, "thrds"); /* Initialize all the elements to NONINDEX. */ fp=(sp=thrds)+numthreads*thrdcols; do *sp=GAL_BLANK_SIZE_T; while(++sp<fp); /* Distribute the labels in the threads. */ for(i=0;i<numactions;++i) thrds[ (i%numthreads)*thrdcols+(i/numthreads) ] = i; /* In case you want to see the result: for(i=0;i<numthreads;++i) { size_t j; printf("\n\n############################\n"); printf("THREAD %zu: \n", i); for(j=0;thrds[i*thrdcols+j]!=GAL_BLANK_SIZE_T;j++) printf("%zu, ", thrds[i*thrdcols+j]); printf("\b\b.\n"); } exit(0); */ /* Return the name of the possibly memory-mapped file. */ return mmapname; } void gal_threads_attr_barrier_init(pthread_attr_t *attr, pthread_barrier_t *b, size_t limit) { int err; err=pthread_attr_init(attr); if(err) error(EXIT_FAILURE, 0, "%s: thread attr not initialized", __func__); err=pthread_attr_setdetachstate(attr, PTHREAD_CREATE_DETACHED); if(err) error(EXIT_FAILURE, 0, "%s: thread attr not detached", __func__); err=pthread_barrier_init(b, NULL, limit); if(err) error(EXIT_FAILURE, 0, "%s: thread barrier not initialized", __func__); } /*******************************************************************/ /************ Run a function on multiple threads **************/ /*******************************************************************/ /* Run a given function on the given tiles. The function has to be link-able with your final executable and has to have only one 'void *' argument and return a 'void *' value. To have access to variables/parameters in the function, you have to define a structure and pass its pointer as 'caller_params'. Here is one simple example. At least two functions and one structure are necessary to use this function. --------- Parameters to keep values you need --------- struct my_params { int value1; double value2; float *array; }; --------- Function to run on each thread --------- void * run_on_thread(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct my_params *prm=(struct my_params *)(tprm->params); size_t i; for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { THE INDEX OF THE TARGET IS NOW AVAILABLE AS 'tprm->indexs[i]'. YOU CAN USE IT IN WHATEVER MANNER YOU LIKE ALONG WITH THE SET OF VARIABLES/ARRAYS in 'prm'. } if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } --------- High-level function --------- int higher_level_function(float *array, size_t num_in_array, int value1) { double value2; struct my_params; size_t numthreads; int quietmmap=1; size_t minmapsize=-1; my_params.value1=value1; my_params.value2=value2; my_params.arary=array; gal_threads_spin_off(run_on_thread, &my_params, num_in_array, numthreads, minmapsize, quietmmap); return 1; } For real world applications of this function, you can also inspect the Gnuastro source. There are also many cases in Gnuastro where we benefit from this function. Please run the following command from the top source directory of Gnuastro to see where: $ grep -r gal_threads_spin_off ./ */ void gal_threads_spin_off(void *(*worker)(void *), void *caller_params, size_t numactions, size_t numthreads, size_t minmapsize, int quietmmap) { int err; pthread_t t; /* All thread ids saved in this, not used. */ char *mmapname=NULL; pthread_attr_t attr; pthread_barrier_t b; struct gal_threads_params *prm; size_t i, *indexs, thrdcols, numbarriers; /* If there are no actions, then just return. */ if(numactions==0) return; /* Sanity check. */ if(numthreads==0) error(EXIT_FAILURE, 0, "%s: the number of threads ('numthreads') " "cannot be zero", __func__); /* Allocate the array of parameters structure. */ errno=0; prm=malloc(numthreads*sizeof *prm); if(prm==NULL) { fprintf(stderr, "%zu bytes could not be allocated for prm.", numthreads*sizeof *prm); exit(EXIT_FAILURE); } /* Distribute the actions into the threads: */ mmapname=gal_threads_dist_in_threads(numactions, numthreads, minmapsize, quietmmap, &indexs, &thrdcols); /* Do the job: when only one thread is necessary, there is no need to spin-off one thread, just call the workerfunction directly (spinning off threads is expensive). This is for the generic thread spinner function, not this simple function where 'numthreads' is a constant. */ if(numthreads==1) { prm[0].id=0; prm[0].b=NULL; prm[0].indexs=indexs; prm[0].params=caller_params; worker(&prm[0]); } else { /* Initialize the attributes. Note that this running thread (that spins-off the nt threads) is also a thread, so the number the barriers should be one more than the number of threads spinned off. */ numbarriers = (numactions<numthreads ? numactions : numthreads) + 1; gal_threads_attr_barrier_init(&attr, &b, numbarriers); /* Spin-off the threads: */ for(i=0;i<numthreads;++i) if(indexs[i*thrdcols]!=GAL_BLANK_SIZE_T) { prm[i].id=i; prm[i].b=&b; prm[i].params=caller_params; prm[i].indexs=&indexs[i*thrdcols]; err=pthread_create(&t, &attr, worker, &prm[i]); if(err) { fprintf(stderr, "can't create thread %zu", i); exit(EXIT_FAILURE); } } /* Wait for all threads to finish and free the spaces. */ pthread_barrier_wait(&b); pthread_attr_destroy(&attr); pthread_barrier_destroy(&b); } /* If 'mmapname' is NULL, then 'indexs' is in RAM and we can safely 'free' it. However, when its not NULL, then the space for 'indexs' has been memory-mapped (its not in RAM) so special treatment is necessary to delete it through the proper function. */ if(mmapname) gal_pointer_mmap_free(&mmapname, quietmmap); else free(indexs); /* Clean up. */ free(prm); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/tiff.c����������������������������������������������������������������������������0000644�0001750�0001750�00000052424�14551337306�010640� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* tiff -- functions to read and write TIFF files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Fathma Mehnoor <fathmamehnoor@gmail.com> Copyright (C) 2018-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #ifdef HAVE_LIBTIFF #include <tiffio.h> #endif #include <gnuastro/fits.h> #include <gnuastro/data.h> #include <gnuastro/list.h> #include <gnuastro/tiff.h> #include <gnuastro/pointer.h> #include <gnuastro-internal/checkset.h> /************************************************************* ************** TIFF name and file identification ************ *************************************************************/ #ifndef HAVE_LIBTIFF static void tiff_error_no_litiff(const char *func) { error(EXIT_FAILURE, 0, "%s: libtiff was not found during the " "configuration of %s on this system. To read from TIFF files, " "libtiff is required. Please install libtiff, then configure, make " "and install %s again", func, PACKAGE_STRING, PACKAGE_STRING); } #endif int gal_tiff_name_is_tiff(char *name) { size_t len; if(name) { len=strlen(name); if ( ( len>=3 && strcmp(&name[len-3], "tif") == 0 ) || ( len>=3 && strcmp(&name[len-3], "TIF") == 0 ) || ( len>=4 && strcmp(&name[len-4], "tiff") == 0 ) || ( len>=4 && strcmp(&name[len-4], "TIFF") == 0 ) ) return 1; else return 0; } else return 0; } int gal_tiff_suffix_is_tiff(char *name) { if(name) { if (strcmp(name, "tif") == 0 || strcmp(name, ".tif") == 0 || strcmp(name, "TIF") == 0 || strcmp(name, ".TIF") == 0 || strcmp(name, "tiff") == 0 || strcmp(name, ".tiff") == 0 || strcmp(name, "TIFF") == 0 || strcmp(name, ".TIFF") == 0 ) return 1; else return 0; } else return 0; } /* Users may define the TIFF directory to read as a string, in that case, this function can be used to convert it to a 'size_t' for use in 'gal_tiff_read'. */ size_t gal_tiff_dir_string_read(char *string) { long dir; char *tailptr=NULL; /* Read the given directory string. */ errno=0; dir=strtol(string, &tailptr, 0); if(tailptr==string) error(EXIT_FAILURE, 0, "%s: '%s' couldn't be read as an integer", __func__, string); if(errno) error(EXIT_FAILURE, errno, "%s: reading %s", __func__, string); if(dir<0) error(EXIT_FAILURE, 0, "%s: %ld is a negative integer, it must be " "positive", __func__, dir); /* Return the result. */ return dir; } /************************************************************* ************** Read a TIFF image ************** *************************************************************/ #ifdef HAVE_LIBTIFF static void tiff_read_tag(TIFF *tif, ttag_t tag, void *out, char *filename, size_t dir) { /* Read the tag. */ if( !TIFFGetField(tif, tag, out) ) error(EXIT_FAILURE, 0, "%s: %s (dir %zu): tag %d couldn't be fetched", __func__, filename, dir, tag); } /* Convert the TIFF type code into Gnuastro's type code. */ static uint8_t tiff_type_read(TIFF *tif, char *filename, size_t dir) { uint16_t bitspersample, sampleformat; /* Read the number of bits and the corresponding type. */ tiff_read_tag(tif, TIFFTAG_BITSPERSAMPLE, &bitspersample, filename, dir); /* Read the formatting of each pixel. If no such keyword exists, use the value of 'SAMPLEFORMAT_UINT'. */ if( TIFFGetField(tif, TIFFTAG_SAMPLEFORMAT, &sampleformat) != 1 ) sampleformat=SAMPLEFORMAT_UINT; /* Read the datatype. */ switch(sampleformat) { /* Unsigned integer types. */ case SAMPLEFORMAT_UINT: switch(bitspersample) { case 8: return GAL_TYPE_UINT8; case 16: return GAL_TYPE_UINT16; case 32: return GAL_TYPE_UINT32; case 64: return GAL_TYPE_UINT64; default: error(EXIT_FAILURE, 0, "%s: %s (dir %zu): %u-bit samples not " "recognized for UNSIGNED-int format", __func__, filename, dir, bitspersample); } break; /* Signed integer types. */ case SAMPLEFORMAT_INT: switch(bitspersample) { case 8: return GAL_TYPE_INT8; case 16: return GAL_TYPE_INT16; case 32: return GAL_TYPE_INT32; case 64: return GAL_TYPE_INT64; default: error(EXIT_FAILURE, 0, "%s: %s (dir %zu): %u-bit samples not " "recognized for SIGNED-int format", __func__, filename, dir, bitspersample); } break; /* Floating point types. */ case SAMPLEFORMAT_IEEEFP: switch(bitspersample) { case 32: return GAL_TYPE_FLOAT32; case 64: return GAL_TYPE_FLOAT64; default: error(EXIT_FAILURE, 0, "%s: %s (dir %zu): %u-bit samples not " "recognized for floating point format", __func__, filename, dir, bitspersample); } break; /* The reported value is not recognized. */ default: error(EXIT_FAILURE, 0, "%s: %s (dir %zu): value %u not recognized " "for SAMPLEFORMAT tag", __func__, filename, dir, sampleformat); } /* Control should never reach here, but to avoid compiler warnings (and hard to find bugs when it does reach here), we'll just return an invalid type. */ return GAL_TYPE_INVALID; } /* Get the basic TIFF image information. */ static void tiff_img_info(TIFF *tif, uint8_t *type, size_t *ndim, size_t *dsize, size_t *numch, char *filename, size_t dir) { size_t d=0; uint16_t u16; uint32_t u32; /* Based on if 'IMAGEDEPTH' is defined in the TIFF header, set the dimensions. */ if( TIFFGetField(tif, TIFFTAG_IMAGEDEPTH, &u32) ) dsize[ d++ ]=u32; /* Read the other sizes. Note that in the TIFF standard, IMAGELENGTH is the vertical length of the image and IMAGEWIDTH is the horizontal length. */ tiff_read_tag(tif, TIFFTAG_IMAGELENGTH, &u32, filename, dir); dsize[ d++ ]=u32; tiff_read_tag(tif, TIFFTAG_IMAGEWIDTH, &u32, filename, dir); dsize[ d++ ]=u32; /* Write the dimensions. */ *ndim=d; /* Read the type of the image. */ *type=tiff_type_read(tif, filename, dir); /* Read the number of channels in the image. */ *numch = TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &u16) ? u16 : 1; } /* Based on the 'TIFFReadContigStripData' function of 'tools/tiffinfo.c' of Libtiff's source. */ void tiff_read_contig_strip_data(TIFF *tif, char *filename, size_t dir, gal_data_t *out, size_t numch) { tstrip_t strip; size_t ostart=0; unsigned char *buf; uint32_t row, rowsperstrip = (uint32_t)-1; size_t nrow=0, scanline=TIFFScanlineSize(tif); uint32_t h=out->ndim==2?out->dsize[0]:out->dsize[1]; /* Allocate the buffer. */ errno=0; buf = (unsigned char *)_TIFFmalloc(TIFFStripSize(tif)); if(buf==NULL) error(EXIT_FAILURE, errno, "%s: %s (dir %zu): couldn't allocate " "necessary space to load image (%zu bytes)", __func__, filename, dir, scanline); /* Parse over the rows and read everything. */ TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); for(row=0; row<h; row+=rowsperstrip) { /* Read the part of the image into the buffer. */ strip = TIFFComputeStrip(tif, row, 0); nrow = (row+rowsperstrip > h ? h-row : rowsperstrip); if( TIFFReadEncodedStrip(tif, strip, buf, nrow*scanline) < 0 ) error(EXIT_FAILURE, 0, "%s: %s (dir %zu): couldn't read data", __func__, filename, dir); /* Copy the contents of the buffer to the output array. Note that 'ostart' is the byte count already, so the type is irrelevant. Thus, we can read 'out->array' as a 'char *' pointer. */ memcpy( (char *)(out->array)+ostart, buf, nrow*scanline); ostart+=nrow*scanline; } /* Clean up. */ _TIFFfree(buf); } /* Based on the 'TIFFReadSeparateStripData' function of 'tools/tiffinfo.c' of Libtiff's source. */ static void tiff_read_separate_strip_data(TIFF* tif, char *filename, size_t dir, gal_data_t *out) { tsample_t s; gal_data_t *ch; tstrip_t strip; unsigned char *buf; uint32_t rowsperstrip=(uint32_t)-1; size_t nrow=0, scanline=TIFFScanlineSize(tif); size_t ostart=0, numch=gal_list_data_number(out); uint32_t row, h=out->ndim==2?out->dsize[0]:out->dsize[1]; /* Allocate the buffer. */ errno=0; buf = (unsigned char *)_TIFFmalloc(TIFFStripSize(tif)); if(buf==NULL) error(EXIT_FAILURE, errno, "%s: %s (dir %zu): couldn't allocate " "necessary space to load image (%zu bytes)", __func__, filename, dir, scanline); /* Parse over the dataset and read them into the output. */ TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); for(row=0; row<h; row+=rowsperstrip) { /* Restart the channel list. */ ch=out; /* Go over each channel. */ for(s=0; s<numch; s++) { /* Read this part of the data into the buffer. */ strip = TIFFComputeStrip(tif, row, s); nrow = (row+rowsperstrip > h ? h-row : rowsperstrip); if( TIFFReadEncodedStrip(tif, strip, buf, nrow*scanline) < 0 ) error(EXIT_FAILURE, 0, "%s: %s (dir %zu): couldn't read data", __func__, filename, dir); /* Write the buffer into the output array. */ memcpy( (char *)(ch->array)+ostart, buf, nrow*scanline); /* Go onto the next channel. */ ch=ch->next; } /* Increment the starting pointer. */ ostart+=nrow*scanline; } /* Clean up. */ _TIFFfree(buf); } /* The data have been read contiguously (the pixels for each color are beside each other). We need to separate the color channels into different datasets. We will also use this chance to reverse the order of the rows. */ static gal_data_t * tiff_separate_channels_reverse(gal_data_t *out, size_t numch, size_t minmapsize, int quietmmap) { size_t k, l, i, j; gal_data_t *tch, *ch=NULL; size_t so=gal_type_sizeof(out->type); size_t width=out->dsize[1]*so/numch, lwidth=out->dsize[1]*so; /* A small sanity check. */ if(out->ndim==3) error(EXIT_FAILURE, 0, "%s: currently only 2D datasets are supported, " "please get in touch with us at %s to add 3D support", __func__, PACKAGE_BUGREPORT); /* Make the separated datasets (temporarily fix the extra width). */ out->dsize[1] /= numch; for(k=0; k<numch; ++k) gal_list_data_add_alloc(&ch, NULL, out->type, out->ndim, out->dsize, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); out->dsize[1] *= numch; /* Parse over the rows and write them in the output. */ for(i=0;i<out->dsize[0];++i) { /* 'j' is the output row. */ j=out->dsize[0]-1-i; /* 'k' is the element in each row and 'l' is the color/channel. */ for(k=0;k<ch->dsize[1];++k) { /* Initialize the color/channel counter ocpy the elements. */ l=0; for(tch=ch; tch!=NULL; tch=tch->next) { /* Elements of the 'j'th row into the 'i'th. */ memcpy( (char *)(tch->array) + i*width + k*so, (char *)(out->array) + j*lwidth + k*numch*so + so*l, so); /* Increment the color. */ ++l; } } } /* Clean up and return. */ return ch; } /* The standard TIFF format is up-side-down when viewed in FITS (which is the base of Gnuastro also). So we need to reverse the array for an identical orientation. */ static void tiff_reverse_rows(gal_data_t *out) { gal_data_t *ch=out; size_t c, i, j, numch=gal_list_data_number(out); size_t width=out->dsize[1]*gal_type_sizeof(out->type); void *tmp=gal_pointer_allocate(out->type, out->dsize[1], 0, __func__, "tmp"); /* A small sanity check. */ if(out->ndim==3) error(EXIT_FAILURE, 0, "%s: currently only 2D datasets are supported, " "please get in touch with us at %s to add 3D support", __func__, PACKAGE_BUGREPORT); /* Parse over the rows and reverse them. */ for(c=0;c<numch;++c) { /* Initialize the parsing counters. */ i=0; j=out->dsize[0]-1; /* Go over the channel. */ while(j>i) { /* Copy the 'i'th row into a temporary array. */ memcpy(tmp, (char *)(ch->array)+i*width, width); /* Put the 'j'th row into the 'i'th row. */ memcpy( (char *)(ch->array)+i*width, (char *)(ch->array)+j*width, width ); /* Put the 'tmp' row into 'j'. */ memcpy( (char *)(ch->array)+j*width, tmp, width); /* Increment the points. */ ++i; --j; } /* Go to the next channel. */ ch=ch->next; } /* Clean up. */ free(tmp); } /* Read the data following the 'TIFFReadData' of Libtiff's 'tools/tiffinfo.c' in the libtiff source code. */ static gal_data_t * tiff_img_read(TIFF *tif, char *filename, size_t dir, size_t minmapsize, int quietmmap) { uint8_t type; uint16_t config; gal_data_t *sep, *out=NULL; size_t i, ndim, numch, dsize[3]; /* Get the basic image information. */ tiff_img_info(tif, &type, &ndim, dsize, &numch, filename, dir); /* Find the planar state of the input: are the channels separate or contiguous? Based on that, allocate the output data structure. */ TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &config); if( config==PLANARCONFIG_CONTIG ) { /* We'll multiply the last dimension's length by the number of channels to keep the contiguous color information in one array. */ dsize[ndim-1] *= numch; out=gal_data_alloc(NULL, type, ndim, dsize, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); } else for(i=0; i<numch; ++i) gal_list_data_add_alloc(&out, NULL, type, ndim, dsize, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); /* The reading of the dataset depends on how it is organized, so first we'll look into the 'planarconfig' field. */ if( TIFFIsTiled(tif) ) { if(config==PLANARCONFIG_CONTIG) error(EXIT_FAILURE, 0, "%s: %s (dir %zu) is a contiguous tiled TIFF " "file which is not yet supported in Gnuastro, please get in " "touch with us at %s to add this feature", __func__, filename, dir, PACKAGE_BUGREPORT); else error(EXIT_FAILURE, 0, "%s: %s (dir %zu) is a non-contiguous tiled " "TIFF file which is not yet supported in Gnuastro, please " "get in touch with us at %s to add this feature", __func__, filename, dir, PACKAGE_BUGREPORT); } else { if(config==PLANARCONFIG_CONTIG) tiff_read_contig_strip_data(tif, filename, dir, out, numch); else tiff_read_separate_strip_data(tif, filename, dir, out); } /* When there are more than one channels and the colors are stored contiguously, we need to break up the array into multiple arrays. When any of these conditions don't hold, the channels are already separated, we just need to reverse them. */ if( numch>1 && config==PLANARCONFIG_CONTIG ) { sep=tiff_separate_channels_reverse(out, numch, minmapsize, quietmmap); gal_data_free(out); out=sep; } else tiff_reverse_rows(out); /* Return the output. */ return out; } #endif gal_data_t * gal_tiff_read(char *filename, size_t dir, size_t minmapsize, int quietmmap) { #ifdef HAVE_LIBTIFF TIFF *tif; gal_data_t *out; size_t dircount=0; /* Open the TIFF file. */ tif=TIFFOpen(filename, "r"); if(tif==NULL) error(EXIT_FAILURE, 0, "%s: '%s' couldn't be opened for reading", __func__, filename); /* If anything other than the first directory (value of zero) is requested, then change the directories. */ if(dir) { if( TIFFSetDirectory(tif, dir)==0 ) { /* For an informative error message, count how many directories are in the TIFF file. */ do ++dircount; while( TIFFReadDirectory(tif) ); /* Close the TIFF file and return. */ TIFFClose(tif); error(EXIT_FAILURE, 0, "%s: '%s' has %zu director%s/extension%s, " "and directories are counted from 0. You have asked for " "directory %zu", __func__, filename, dircount, dircount==1?"y":"ies", dircount==1?"":"s", dir); } } /* Read the image. */ out=tiff_img_read(tif, filename, dir, minmapsize, quietmmap); /* Close file, clean up and return. */ TIFFClose(tif); return out; #else tiff_error_no_litiff(__func__); return NULL; #endif /* HAVE_LIBTIFF */ } /************************************************************* **************** Write into a TIFF file **************** *************************************************************/ #ifdef HAVE_LIBTIFF static void tiff_img_write(TIFF *tif, gal_data_t *in, char *filename) { gal_data_t *channel = in; size_t index, offset, row, col, ch; size_t numch = gal_list_data_number(in); unsigned char *image, *buf, *colors[4] = {NULL}; size_t width = in->dsize[1], height = in->dsize[0]; /* Small sanity checks. */ if(numch==2 || numch>4) error(EXIT_FAILURE, 0, "%s: only 1, 3, and 4 color channels are " "acceptable, input is a list of %zu data sets", __func__, numch); if(in->type!=GAL_TYPE_UINT8) error(EXIT_FAILURE, 0, "%s: input has a '%s' type, but TIFF " "images can currently only have a 'uint8' type", __func__, gal_type_name(in->type, 1)); /* Allocate memory for image. */ image = (unsigned char*)malloc(in->size * numch); if(image == NULL) error(EXIT_FAILURE, errno, "%s: %s: failed to allocate memory" "for image", __func__, filename); /* Extract color channels from input data. */ for(ch = 0; ch < numch; ch++) { if(channel != NULL && channel->array != NULL) { colors[ch] = channel->array; channel = channel->next; } else { error(EXIT_FAILURE, errno, "%s: %s: missing or invalid color" "channel", __func__, filename); free(image); } } /* Copy input data to image buffer. */ for(row = 0; row < height; row++) { for(col = 0; col < width; col++) { index = row * width + col; offset = index * numch; for(ch = 0; ch < numch; ch++) image[offset + ch] = colors[ch][index]; } } /* Set TIFF tags. */ TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, width); TIFFSetField(tif, TIFFTAG_IMAGELENGTH, height); if(numch==1) TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); else TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8); TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, numch); TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); /* Allocate memory for scanline buffer. */ errno=0; buf = (unsigned char*)_TIFFmalloc(TIFFScanlineSize(tif)); if(buf == NULL) error(EXIT_FAILURE, errno, "%s: %s: failed to allocate necessary" "memory for the scanline buffer" , __func__, filename); /* Write each scanline of the image to the TIFF file. */ for(row = height; row > 0; row--) { _TIFFmemcpy(buf, &image[(row - 1) * width * numch], width * numch); if(TIFFWriteScanline(tif, buf, height - row, 0) < 0) { error(EXIT_FAILURE, errno, "%s: problem in writing to %s", __func__, filename); _TIFFfree(buf); free(image); } } /* Clean up. */ _TIFFfree(buf); free(image); } #endif void gal_tiff_write(gal_data_t* in, char* filename) { /* The TIFF library exists and will be used. */ #ifdef HAVE_LIBTIFF TIFF* tif; /* Make sure the input isn't NULL. */ if(in == NULL) error(EXIT_FAILURE, 0, "%s: '%s', input data is NULL", __func__, filename); /* Open the TIFF file. */ tif = TIFFOpen(filename, "w"); if(tif == NULL) error(EXIT_FAILURE, errno, "%s: '%s' couldn't be opened for writing", __func__, filename); /* Write to TIFF file. */ tiff_img_write(tif, in, filename); /* Close file. */ TIFFClose(tif); /* The TIFF library didn't exist. */ #else tiff_error_no_litiff(__func__); #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/tile.c����������������������������������������������������������������������������0000644�0001750�0001750�00000126704�14551337306�010650� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* tile -- work with tesselations over a host dataset. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <stdlib.h> #include <string.h> #include <gnuastro/fits.h> #include <gnuastro/tile.h> #include <gnuastro/blank.h> #include <gnuastro/threads.h> #include <gnuastro/pointer.h> #include <gnuastro/convolve.h> #include <gnuastro/dimension.h> #include <gnuastro/interpolate.h> #include <gnuastro/permutation.h> #include <gnuastro-internal/checkset.h> /***********************************************************************/ /************** Single tile ******************/ /***********************************************************************/ /* Calculate the starting coordinates of a tile in the allocated block of memory. */ void gal_tile_start_coord(gal_data_t *tile, size_t *start_coord) { size_t ind, ndim=tile->ndim; gal_data_t *block=gal_tile_block(tile); /* If the input tile is actually the same as the block, then the start is at 0 (in all dimensions). */ if(block==tile) memset(start_coord, 0, ndim*gal_type_sizeof(GAL_TYPE_SIZE_T)); else { /* Calculate the coordinates of the first pixel of the tile. */ ind = gal_pointer_num_between(block->array, tile->array, block->type); gal_dimension_index_to_coord(ind, ndim, block->dsize, start_coord); } } /* Put the starting and ending (end point is not inclusive) coordinates of a tile into the 'start_end' array. It is assumed that a space of '2*tile->ndim' has been already allocated (static or dynamic) before this function is called. 'rel_block' (or relative-to-block) is only relevant when the tile has an intermediate tile between it and the allocated space (like a channel, see 'gal_tile_full_two_layers'). If it doesn't ('tile->block' points the allocated dataset), then the value to 'rel_block' is irrelevant. However, when 'tile->block' is its self a larger block and 'rel_block' is set to 0, then the starting and ending positions will be based on the position within 'tile->block', not the allocated space. */ void gal_tile_start_end_coord(gal_data_t *tile, size_t *start_end, int rel_block) { size_t *s, *sf, *h; gal_data_t *block=gal_tile_block(tile); gal_data_t *host=rel_block ? block : tile->block; size_t *hcoord, start_ind, ndim=tile->ndim, *end=start_end+ndim; /* Get the starting index. Note that for the type we need the allocated block dataset and can't rely on the tiles. */ start_ind=gal_pointer_num_between(block->array, tile->array, block->type); /* Get the coordinates of the starting point relative to the allocated block. */ gal_dimension_index_to_coord(start_ind, ndim, block->dsize, start_end); /* When the host is different from the block, the tile's starting position needs to be corrected. */ if(host!=block) { /* Get the host's starting coordinates. */ start_ind=gal_pointer_num_between(block->array, host->array, block->type); /* Temporarily put the host's coordinates in the place held for the ending coordinates. */ hcoord=end; gal_dimension_index_to_coord(start_ind, ndim, block->dsize, hcoord); sf=(s=start_end)+ndim; h=hcoord; do *s++ -= *h++; while(s<sf); } /* Add the dimensions of the tile to the starting coordinate. Note that the ending coordinates are stored immediately after the start. */ gal_dimension_add_coords(start_end, tile->dsize, end, ndim); } /* Put the indexs of the first/start and last/end pixels (inclusive) in a tile into the 'start_end' array (that has two elements). It will then return the pointer to the start of the tile in the 'work' data structure. */ void * gal_tile_start_end_ind_inclusive(gal_data_t *tile, gal_data_t *work, size_t *start_end_inc) { gal_data_t *block=gal_tile_block(tile); size_t ndim=tile->ndim, *s, *e, *l, *sf; size_t *start_coord = gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "start_coord"); size_t *end_coord = gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "end_coord"); /* The starting index can be found from the distance of the 'tile->array' pointer and 'block->array' pointer. IMPORTANT: with the type of the block array. */ start_end_inc[0]=gal_pointer_num_between(block->array, tile->array, block->type); /* To find the end index, we need to know the coordinates of the starting point in the allocated block. */ gal_dimension_index_to_coord(start_end_inc[0], ndim, block->dsize, start_coord); /* 'end_coord' is one unit ahead of the last element in the tile in every dimension. To have less potential for bugs, we will remove that extra value, so we get the coordinates of the last pixel in the tile (inclusive). We will finally, increment that value by one to get to the pixel immediately outside of the tile. */ e=end_coord; l=tile->dsize; sf=(s=start_coord)+ndim; do *e++ = *s + *l++ - 1; while(++s<sf); /* Convert the (inclusive) ending point's coordinates into an index. */ start_end_inc[1]=gal_dimension_coord_to_index(ndim, block->dsize, end_coord); /* For a check: printf("\ntile_dsize: %zu, %zu, %zu\n", tile->dsize[0], tile->dsize[1], tile->dsize[2]); printf("start_coord: %zu, %zu, %zu\n", start_coord[0], start_coord[1], start_coord[2]); printf("end_coord: %zu, %zu, %zu\n", end_coord[0], end_coord[1], end_coord[2]); printf("start_index: %zu\n", start_end_inc[0]); printf("end_index: %zu\n", start_end_inc[1]); exit(1); */ /* Clean up and return the pointer in the work array that the tile starts from. */ free(end_coord); free(start_coord); return gal_pointer_increment(work->array, start_end_inc[0], work->type); } /***********************************************************************/ /************** Series of tiles ******************/ /***********************************************************************/ /* Construct a list of tile(s) given positional minimum(s) and maximum(s). The output is an allocated an allocated array that can later be freed with 'gal_data_array_free'. The minimum and maximums are assumed to be inclusive. The array keeping the minmium and maximum coordinates for each label will have the following format: | min0_d0 | min0_d1 | max0_d0 | max0_d1 | ... ... | minN_d0 | minN_d1 | maxN_d0 | maxN_d1 | */ gal_data_t * gal_tile_series_from_minmax(gal_data_t *block, size_t *minmax, size_t number) { size_t ndim=block->ndim; size_t *min, *max; size_t i, d, ind, size, width=2*ndim; gal_data_t *tiles=gal_data_array_calloc(number); /* Fill the tile information. */ for(i=0;i<number;++i) { /* To make things more readable. */ min = &minmax[ i * width ]; max = &minmax[ i * width + ndim ]; /* Tile types should be invalid (we shouldn't use tiles directly), also se the other simple values. */ tiles[i].flag = 0; tiles[i].block = block; tiles[i].type = GAL_TYPE_INVALID; tiles[i].next = i==number-1 ? NULL : &tiles[i+1]; /* Set the size related constants. */ size = 1; tiles[i].ndim = ndim; tiles[i].dsize = gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "tiles[i].dsize"); for(d=0;d<ndim;++d) size *= tiles[i].dsize[d] = max[d] - min[d] + 1; tiles[i].size = size; /* Tile's array pointer. */ ind=gal_dimension_coord_to_index(ndim, block->dsize, min); tiles[i].array = gal_pointer_increment(block->array, ind, block->type); } /* For a check (put all the objects in an extension of a test file). { gal_data_t *copy; for(i=0;i<number;++i) { copy=gal_data_copy(&tiles[i]); gal_fits_img_write(copy, "tiles.fits", NULL, NULL); } } */ /* Return the final pointer. */ return tiles; } /***********************************************************************/ /************** Allocated block of memory ******************/ /***********************************************************************/ /* When you are working on an array, it important to know the size of the allocated space in each dimension. This simple function will just follow the block pointer and return the 'dsize' element of lowest-level structure. */ gal_data_t * gal_tile_block(gal_data_t *tile) { while(tile->block!=NULL) tile=tile->block; return tile; } /* Return the increment necessary to start at the next series of contiguous memory (fastest dimension) associated with a tile. 1D and 2D cases are simple and need no extra explanation, but the case for higher dimensions can be alittle more complicated, So we will go over some examples. The notations below are: 'n' number of dimensions (same in tile and block). 't[]' size of the tile in each dimension. 'b[]' size of the allocated block in each dimension. It is just important to see the output of this function as an increment from the the last patch of contiguous memory associated with the tile. So when the increment number is 't[n-1]' (the first 2D slice of the tile has been parsed), simply incrementing by 'b[n-2] * b[n-1]' will take us to the last row of num_increment coord increment ------------- ----- --------- 1 (...0,0,0) b[n-1]: fastest dimension of the block. 2 (...0,1,0) Similar to previous . . . . . . t[n-2] (...1,0,0) (b[n-2] * b[n-1]) - ( (t[n-2]-1) * b[n-1] ) t[n-2] + 1 (...1,1,0) b[n-1] . . . . . . 2 * t[n-2] (...2,0,0) b[n-2] * b[n-1] t[n-2]+1 (...2,1,0) b[n-1] . . . . . . t[n-3] * t[n-2] (..1,0,0,0) b[n-3] * b[n-2] * b[n-1] */ size_t gal_tile_block_increment(gal_data_t *block, size_t *tsize, size_t num_increment, size_t *coord) { size_t n=block->ndim; size_t *b=block->dsize, *t=tsize; size_t increment=GAL_BLANK_SIZE_T; if(n>3) error(EXIT_FAILURE, 0, "%s: currently only implemented for at most 3 " "dimensions", __func__); switch(n) { /* A zero-dimensional dataset is not defined. */ case 0: error(EXIT_FAILURE, 0, "%s: zero dimensional input is not acceptable", __func__); /* 1D: the increment is just the tile size. */ case 1: increment=t[0]; if(coord) coord[0]+=increment; break; /* 2D: the increment is the block's number of fastest axis pixels. */ case 2: increment=b[1]; if(coord) ++coord[0]; break; /* 3D: The increment depends on which dimension we are reaching. */ case 3: if(num_increment % t[1]) { increment = b[2]; if(coord) ++coord[1]; } else { increment=(b[1] * b[2]) - ( (t[1]-1) * b[2] ); if(coord) { ++coord[0]; coord[1] -= t[1]-1; coord[2]=0; } } break; } /* Return the final increment value. */ return increment; } /* Write a constant value for each tile into each pixel covered by the input tiles in an array the size of the block and return it. Arguments --------- 'tilevalues': This must be an array that has the same number of elements as that in 'tilesll' and in the same order that 'tilesll' elements are parsed (from first to last). As a result the dimensionality of this array is irrelevant. Note that unlike 'tiles', 'tilevalues' must be an array. 'tilesll': This will be parsed as a linked list (using the 'next' element). Internally, it might be stored as an array, but this function doesn't care! The position of the tile over its block will be determined according to the 'block' element and the pointer of its 'array' as fully described in 'gnuastro/data.h'. This function will not pop/free the list, it will only parse it from start to end. 'initialize': Initialize the allocated space with blank values before writing in the constant values. This can be useful when the tiles don't cover the full allocated block. */ gal_data_t * gal_tile_block_write_const_value(gal_data_t *tilevalues, gal_data_t *tilesll, int withblank, int initialize) { void *in; int type=tilevalues->type; size_t tile_ind, nt=0, nv=tilevalues->size; gal_data_t *tofill, *tile, *block=gal_tile_block(tilesll); /* A small sanity check. */ for(tile=tilesll; tile!=NULL; tile=tile->next) ++nt; if(nt!=nv) error(EXIT_FAILURE, 0, "%s: the number of elements in 'tilevalues' (%zu) " "and 'tilesll' (%zu) must be the same", __func__, nv, nt); /* Allocate the output array. */ tofill=gal_data_alloc(NULL, type, block->ndim, block->dsize, block->wcs, 0, block->minmapsize, block->quietmmap, tilevalues->name, tilevalues->unit, tilevalues->comment); /* If requested, initialize 'tofill', otherwise it is assumed that the full area of the output is covered by the tiles. */ if(withblank || initialize) gal_blank_initialize(tofill); else { /* Copy the flags. */ tofill->flag=tilevalues->flag; /* If we have more than one dimension, then remove the possibly sorted flags. */ if(block->ndim>1) { tofill->flag &= ~GAL_DATA_FLAG_SORTED_I; tofill->flag &= ~GAL_DATA_FLAG_SORTED_D; } } /* Go over the tiles and write the values in. Recall that 'tofill' has the same type as 'tilevalues'. So we are using memcopy. */ tile_ind=0; for(tile=tilesll; tile!=NULL; tile=tile->next) { /* Set the pointer to use as input. The 'if(o)' statement is set because GCC 7.1.1 complained about the possiblity of the first argument of 'memcpy' being NULL. Recall that 'o' is a pointer. */ in=gal_pointer_increment(tilevalues->array, tile_ind++, type); GAL_TILE_PARSE_OPERATE( tile, tofill, 1, withblank, { if(o) memcpy(o, in, gal_type_sizeof(type)); } ); } return tofill; } /* Make a copy of the memory block and fill it with the index of each tile in 'tilesll' (counting from 0). The non-filled areas will have blank values. The output dataset will have a type of 'GAL_TYPE_INT32'. */ gal_data_t * gal_tile_block_check_tiles(gal_data_t *tilesll) { int32_t *arr; size_t i, dsize=gal_list_data_number(tilesll); gal_data_t *ids, *out, *block=gal_tile_block(tilesll); /* Allocate the array to keep the IDs of each tile. */ ids=gal_data_alloc(NULL, GAL_TYPE_INT32, 1, &dsize, NULL, 0, block->minmapsize, block->quietmmap, NULL, NULL, NULL); /* Put the IDs into the array. */ arr=ids->array; for(i=0;i<dsize;++i) arr[i]=i; /* Make the output. */ out=gal_tile_block_write_const_value(ids, tilesll, 0, 1); /* Clean up and return. */ gal_data_free(ids); return out; } /* Return the pointer corresponding to the tile in another data structure (can have another type). */ void * gal_tile_block_relative_to_other(gal_data_t *tile, gal_data_t *other) { gal_data_t *block=gal_tile_block(tile); return gal_pointer_increment(other->array, gal_pointer_num_between(block->array, tile->array, block->type), other->type); } /* To use within 'gal_tile_full_blank_flag'. */ static void * tile_block_blank_flag(void *in_prm) { struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; gal_data_t *tile_ll=(gal_data_t *)(tprm->params); size_t i; gal_data_t *tile; /* Check all the tiles given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { tile=&tile_ll[ tprm->indexs[i] ]; gal_blank_present(tile, 1); } /* Wait for all the other threads to finish. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* Update the blank flag on the tiles within the list of input tiles. */ void gal_tile_block_blank_flag(gal_data_t *tile_ll, size_t numthreads) { /* Go over all the tiles and update their blank flag. */ gal_threads_spin_off(tile_block_blank_flag, tile_ll, gal_list_data_number(tile_ll), numthreads, tile_ll->minmapsize, tile_ll->quietmmap); } /***********************************************************************/ /************** Tile full dataset ********************/ /***********************************************************************/ /* The user's specified tile size might not be an exact multiple of the parent's size. This function is useful in such cases. It will give the starting tile's size along each dimension. The most simplistic way to manage the tiles is to put the regular tiles at the start. The line below can be the length along any dimension, and the tile size along that dimension. | tile size | tile size | tile size | tile size | remainder | | | | | | --------------------------------------------------------- The remainder of the scenario above will always be smaller than 'tile size' (can be even 1-pixel wide). So, we will merge the first tile size with the remainder. In this way, the size of the first tile will always be between between one and two times the size of the regular tile: | first tile | tile size | tile size | tile size | | | | | | --------------------------------------------------------- When there is only a small remainder (for example one or two pixels), then this layout is fine. But when the remainder is significant compared to the regular tile size (like the example above), then it will make more sense to cut the first tile into two halfs ('f-half' and 'l-half') and put them at the start and end of the full length: | f-half | tile size | tile size | tile size | l-half | | | | | | | --------------------------------------------------------- So in any case, knowing the size of the first tile, will allow us to parse all the tiles. We just have to make sure we don't go over the full input's length. */ static void gal_tile_full_regular_first(gal_data_t *parent, size_t *regular, float remainderfrac, size_t *first, size_t *last, size_t *tsize) { size_t i, remainder, *dsize=parent->dsize;; /* For each dimension, set the size of the first tile. */ for(i=0;i<parent->ndim;++i) { /* It might happen that the tile size is bigger than the parent size in a dimension, in that case the analysis in the comments above are useless and only one tile should cover this dimension with the size of the parent. */ if( regular[i] >= dsize[i] ) { tsize[i]=1; first[i]=last[i]=dsize[i]; } else { /* Calculate the remainder in this dimension. */ remainder=dsize[i] % regular[i]; /* Depending on the remainder, set the first tile size and number. */ if(remainder) { if( remainder > remainderfrac * regular[i] ) { first[i] = ( remainder + regular[i] )/2; tsize[i] = dsize[i]/regular[i] + 1 ; /* If we only have one tile along the dimension, then 'first[i]==dsize[i]'. In this case, the first and last tiles are the same and must have the same size. */ last[i] = ( first[i]==dsize[i] ? first[i] : ( dsize[i] - ( first[i] + regular[i]*(tsize[i]-2) ) ) ); } else { first[i] = remainder + regular[i]; tsize[i] = dsize[i]/regular[i]; last[i] = first[i]==dsize[i] ? first[i] : regular[i]; } } else { first[i] = last[i] = regular[i]; tsize[i] = dsize[i]/regular[i]; } } } /* For a check: printf("%s: first: %zu, %zu\n", __func__, first[0], first[1]); printf("%s: last: %zu, %zu\n", __func__, last[0], last[1]); */ } /* Cover the full dataset with (mostly) identical tiles. The regular tile size is determined from the 'size' array. If the input data's size is not an exact multiple of 'size' for each dimension, then the tiles touching the edges in that dimension will have a different size to fully cover every element of the input. For a full description of tiling in 'gal_data_t', please see 'data.h'. Inputs ------ 'input' is the gal_data_t which you want to tile (only used for its sizes). 'regular' is the size of the regular tiles along each of the input's dimensions. So it must have the same number of elements as the dimensions of 'input'. 'remainderfrac' is the significant fraction of the remainder space if the width of the input isn't an exact multiple of the tile size along a dimension, see 'gal_tile_full_regular_first'. 'out' is the pointer to the array of data structures that is to keep the tile parameters. If '*out==NULL', then the necessary space will be allocated. If it is not NULL, then all the tile information will be filled from the given element, see 'multiple' for more. 'multiple': When the '*out' array is to be allocated, allocate 'multiple' times the necessary space. This can be very useful when you have several more identically sized 'inputs', and you want all their tiles to be allocated (and thus indexed) together, even though they have different 'block' datasets (that then link to one allocated space). See the 'gal_tile_full_two_layers' below. 'firsttsize': The size of the first tile along every dimension. This is only different from the regular tile size when 'regular' is not an exact multiple of 'input''s length along every dimension. This array is allocated internally by this function. Output ------ The returned output is an array of numbers (the same size as the input data structure's dimensions) keeping the number of tiles along each dimension. Implementation -------------- In the most general case, to set the starting pointers for each tile we need the following sizes. If the input array has no parent/block, then both these sizes are equal to it's own size: 1. block-size (or 'bsize'), which is the size of the allocated block in each dimension. 2. parent-size (or 'psize') which is the size of the parent in each dimension (we don't want to go out of the paren't range). */ size_t * gal_tile_full(gal_data_t *input, size_t *regular, float remainderfrac, gal_data_t **out, size_t multiple, size_t **firsttsize) { size_t i, d, tind, numtiles, *start=NULL; gal_data_t *tiles, *block=gal_tile_block(input); size_t *last = gal_pointer_allocate(GAL_TYPE_SIZE_T, input->ndim, 0, __func__, "last"); size_t *first = gal_pointer_allocate(GAL_TYPE_SIZE_T, input->ndim, 0, __func__, "first"); size_t *coord = gal_pointer_allocate(GAL_TYPE_SIZE_T, input->ndim, 0, __func__, "coord"); size_t *tcoord = gal_pointer_allocate(GAL_TYPE_SIZE_T, input->ndim, 0, __func__, "tcoord"); size_t *tsize = gal_pointer_allocate(GAL_TYPE_SIZE_T, input->ndim+1, 0, __func__, "tsize"); /* Set the first tile size and total number of tiles along each dimension, then allocate the array of tiles. */ gal_tile_full_regular_first(input, regular, remainderfrac, first, last, tsize); numtiles=gal_dimension_total_size(input->ndim, tsize); /* Allocate the necessary space for all the tiles (if necessary). */ if(*out) tiles = *out; else *out = tiles = gal_data_array_calloc(numtiles*multiple); /* It is possible that the 'input' dataset is its-self a larger tile over a region of the allocated block. In that case, we need to account for the block's dimensions when calculating the position of this block. */ if(input->block) { start=gal_pointer_allocate(GAL_TYPE_SIZE_T, input->ndim, 0, __func__, "start"); gal_tile_start_coord(input, start); } /* Initialize each tile. */ for(i=0;i<numtiles;++i) { /* Specify the coordinates of the tile between the other tiles. Note that we are dealing with tiles here, not pixels. */ gal_dimension_index_to_coord(i, input->ndim, tsize, tcoord); /* The coordinates are currently in units of tiles, not pixels. Convert them to the coordinates of the first pixel in each tile. */ for(d=0;d<input->ndim;++d) { /* Convert the tile coordinates to pixel coordinates within 'input'. See the comments above 'gal_tile_full_regular_first': The first tile in every dimension can be different from the regular tile size. */ coord[d] = tcoord[d] ? first[d] + (tcoord[d]-1)*regular[d] : 0; /* When the 'input' data structure (that is to be tiled here) was itself a tile over a larger allocated array, a 'start' array has been allocated to correct the coordinates so they refer to a physical position on the allocated block of memory. */ if(start) coord[d] += start[d]; } /* Convert the coordinates (that are now in element/pixel units on the allocated block of memory) into an index. */ tind=gal_dimension_coord_to_index(block->ndim, block->dsize, coord); /* Now that we have the index of this tile's starting point compared to the allocated block, put it in to the tile's 'array' pointer. */ tiles[i].array=gal_pointer_increment(block->array, tind, block->type); /* Set the sizes of the tile. */ tiles[i].size=1; /* Just an initializer, will be changed. */ tiles[i].ndim=input->ndim; tiles[i].minmapsize=input->minmapsize; tiles[i].dsize=gal_pointer_allocate(GAL_TYPE_SIZE_T,input->ndim, 0, __func__, "tiles[i].dsize"); for(d=0;d<input->ndim;++d) { /* The size of the first and last tiles can be different from the majority of the 'regular' tiles that have the same size. When a tile is on the edge in one of the dimensions, then its 'tcoord[d]' will be either 0 or the last. */ if( first[d] != regular[d] && ( tcoord[d]==0 || tcoord[d]==tsize[d]-1 ) ) { if( tcoord[d] == 0 ) tiles[i].dsize[d] = first[d]; if( tcoord[d] == tsize[d]-1 ) tiles[i].dsize[d] = last[d]; } else tiles[i].dsize[d]=regular[d]; /* Set the size value. */ tiles[i].size *= tiles[i].dsize[d]; } /* Set the block structure for this tile to the 'input', and set the next pointer as the next tile. Note that only when we are dealing with the last tile should the 'next' pointer be set to NULL. */ tiles[i].flag = 0; tiles[i].block = input; tiles[i].next = i==numtiles-1 ? NULL : &tiles[i+1]; /* For a check: printf("%zu:\n\tStart index: %zu\n\tsize: %zu x %zu\n", i, tind, tiles[i].dsize[1], tiles[i].dsize[0]); exit(0); */ } /* Clean up and return. */ free(last); free(coord); free(tcoord); *firsttsize=first; if(start) free(start); tsize[input->ndim]=-1; /* 'tsize' had ndim+1 values, we will mark the */ return tsize; /* extra space with the largest possible value: */ } /* -1, see 'gal_tile_full_sanity_check'. */ /* Make sure that the input parameters (in 'tl', short for two-layer) fit with the input dataset. The filename and HDU are only required for error messages. Also, allocate and fill the 'channelsize' array. */ void gal_tile_full_sanity_check(char *filename, char *hdu, gal_data_t *input, struct gal_tile_two_layer_params *tl) { double d; size_t i, ndim=input->ndim; /* Check the tile's dimensions. */ for(i=0;tl->tilesize[i]!=-1;++i) { /* Not equal to zero. */ if(tl->tilesize[i]==0) error(EXIT_FAILURE, 0, "'--tilesize' must be larger than zero, " "the given value for dimension %zu was zero", ndim-i); /* If the tile size is larger than the dataset size in this dimension, then quietly change the tile size to the dataset size along that dimension. */ if( tl->tilesize[i] > input->dsize[i] ) tl->tilesize[i] = input->dsize[i]; } /* Make sure the number of tile sizes (tile dimensions) are the same as the dataset's dimensions). */ if(i!=ndim) error(EXIT_FAILURE, 0, "%s (hdu: %s): has %zu dimensions, but only %zu " "value(s) given for the tile size ('--tilesize' option).", filename, hdu, ndim, i); /* Check the channel's dimensions. */ for(i=0; tl->numchannels[i]!=-1; ++i) if(tl->numchannels[i]==0) error(EXIT_FAILURE, 0, "the number of channels in all dimensions must " "be larger than zero. The number for dimension %zu was zero", i+1); if(i!=ndim) error(EXIT_FAILURE, 0, "%s (hdu: %s): has %zu dimensions, but only %zu " "value(s) given for the number of channels", filename, hdu, ndim, i); /* Allocate space for the channel sizes. */ tl->channelsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "tl->channelsize"); /* Check if the channels are exactly divisible by the input's size along each dimension and set the correct size. */ for(i=0;i<ndim;++i) { /* Check if the number of channels is not more than the size of the image. Note that the reported dimension must be in FITS format. */ if( input->dsize[i] < tl->numchannels[i] ) error(EXIT_FAILURE, 0, "the number of channels in dimension %zu " "(%zu) is more than the size of the '%s' (hdu: %s) in that " "dimension", ndim-i, tl->numchannels[i], filename, hdu); /* Also check the tile size. */ if( input->dsize[i] < tl->tilesize[i] ) error(EXIT_FAILURE, 0, "the tile size in dimension %zu (%zu) is " "more than the size of the '%s' (hdu: %su) in that dimension", ndim-i, tl->tilesize[i], filename, hdu); /* First check. */ d=(double)input->dsize[i]/(double)(tl->numchannels[i]); if(ceil(d)!=d) error(EXIT_FAILURE, 0, "%zu (number of channels along dimension " "%zu) is not exactly divisible by %zu (the length of '%s' " "(hdu: %s) that dimension). The channels cover the input " "dataset, hence, they must be identical", tl->numchannels[i], ndim-i, input->dsize[i], filename, hdu); /* Put the channel size into the output. */ tl->channelsize[i]=d; } } /* A dataset can be tiled with two layers that are related: Channels: A tesselation of larger tile sizes that all have the same size ('channel_size' must be an exact multiple of 'input's size along every dimension. In astronomy images, this can be seen as CCD amplifiers, that cover large parts of the image. If '*channels!=NULL' then it is assumed to be already present and will not be allocated. Tiles: A combined tesselation of each channel with smaller tiles. These tiles can be used to calculate things like gradients over each channel and thus over the whole image. */ void gal_tile_full_two_layers(gal_data_t *input, struct gal_tile_two_layer_params *tl) { gal_data_t *t; size_t i, *junk, *junk2, ndim=tl->ndim=input->ndim; /* Initialize. */ tl->channels=tl->tiles=NULL; /* Initialize necessary values and do the channels tessellation. */ junk = gal_tile_full(input, tl->channelsize, tl->remainderfrac, &tl->channels, 1, &junk2); tl->totchannels = gal_dimension_total_size(ndim, tl->numchannels); for(i=0;i<ndim;++i) if(junk[i]!=tl->numchannels[i]) error(EXIT_FAILURE, 0, "%s: the input and output number of channels " "don't match in dimension %zu: %zu and %zu respectively.", __func__, ndim-i, tl->numchannels[i], junk[i]); free(junk); free(junk2); /* Tile each channel. While tiling the first channel, we are also going to allocate the space for the other channels. Then pass those pointers when we want to fill in each tile of the other channels. */ tl->numtilesinch = gal_tile_full(tl->channels, tl->tilesize, tl->remainderfrac, &tl->tiles, tl->totchannels, &tl->firsttsize); tl->tottilesinch = gal_dimension_total_size(ndim, tl->numtilesinch); for(i=1; i<tl->totchannels; ++i) { /* Set the first tile in this channel. Then use it it fill the 'next' pointer of the previous channel's tiles. Note that 'gal_tile_full' set this 'next' element to NULL. */ t = tl->tiles + i * tl->tottilesinch; tl->tiles[ i * tl->tottilesinch - 1 ].next = t; /* Fill in the information for all the tiles in this channel. Note that we already have the returned value, so it isn't important. */ junk=gal_tile_full(&tl->channels[i], tl->tilesize, tl->remainderfrac, &t, 1, &junk2); free(junk); free(junk2); } /* Multiply the number of tiles along each dimension OF ONE CHANNEL by the number of channels in each dimension to get the dimensionality of the full tile structure. */ tl->numtiles = gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "tl->numtiles"); for(i=0;i<ndim;++i) tl->numtiles[i] = tl->numtilesinch[i] * tl->numchannels[i]; tl->tottiles = gal_dimension_total_size(ndim, tl->numtiles); } /* Usage ----- Make a permutation to allow the conversion of tile location in memory to its location in the full input dataset and put it in the input's 'permutation' element. If a permutation has already been defined for the tessellation, this function will not do anythin. If permutation won't be necessary, then this function will just return (the permutation must have been initialized to NULL). */ void gal_tile_full_permutation(struct gal_tile_two_layer_params *tl) { size_t *ch_coord, *tinch_coord; size_t i, p=0, t, ch, ind_in_all, ndim=tl->ndim; /* If the permutation has already been defined for this tessellation, then there is no need to do it again here. */ if(tl->permutation) return; /* If there is only one channel or one dimension, return NULL. The permutation functions know that the input and output indexs are the same when the permutation is NULL. */ if( ndim==1 || tl->totchannels==1) return; /* Allocate the space for the permutation and coordinates. */ ch_coord=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "ch_coord"); tinch_coord=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "tinch_coord"); tl->permutation=gal_pointer_allocate(GAL_TYPE_SIZE_T, tl->tottiles, 0, __func__, "tl->permutation"); /* Fill in the permutation, we use the fact that the tiles are filled from the first channel to the last. */ for(ch=0;ch<tl->totchannels;++ch) { /* Get the coordinates of this channel's first tile. */ gal_dimension_index_to_coord(ch, ndim, tl->numchannels, ch_coord); for(i=0;i<ndim;++i) ch_coord[i] *= tl->numtilesinch[i]; /* Go over all the tiles in this channel. */ for(t=0;t<tl->tottilesinch;++t) { /* Convert its index to coordinates and add them to the channel's starting coordinates. */ gal_dimension_index_to_coord(t, ndim, tl->numtilesinch, tinch_coord); for(i=0;i<ndim;++i) tinch_coord[i] += ch_coord[i]; /* Convert the coordinates into an index. */ ind_in_all = gal_dimension_coord_to_index(ndim, tl->numtiles, tinch_coord); tl->permutation[ind_in_all] = p++; } } /* Clean up and return. */ free(tinch_coord); free(ch_coord); } /* Write one value for each tile into a file. IMPORTANT: it is assumed that the values are in the same order as the tiles. tile[i] --> tilevalues[i] */ void gal_tile_full_values_write(gal_data_t *tilevalues, struct gal_tile_two_layer_params *tl, int withblank, char *filename, gal_fits_list_key_t *keys, int freekeys) { gal_data_t *disp; /* Make the dataset to be displayed. */ if(tl->oneelempertile) { if(tl->ndim>1 && tl->totchannels>1) { /* A small sanity check. */ if(tl->permutation==NULL) error(EXIT_FAILURE, 0, "%s: no permutation defined for the " "input tessellation", __func__); /* Writing tile values to disk is not done for checking, not for efficiency. So to be safe (allow the caller to work on multiple threads), we will copy the tile values, then permute those. */ disp = gal_data_copy(tilevalues); gal_permutation_apply(disp, tl->permutation); } else disp = tilevalues; } else disp=gal_tile_block_write_const_value(tilevalues, tl->tiles, withblank, 0); /* Write the array as a file and then clean up (if necessary). */ gal_fits_img_write(disp, filename, keys, freekeys); if(disp!=tilevalues) gal_data_free(disp); } /* Smooth the given values with a flat kernel of the given width. */ gal_data_t * gal_tile_full_values_smooth(gal_data_t *tilevalues, struct gal_tile_two_layer_params *tl, size_t width, size_t numthreads) { size_t *kdsize, knum, i; gal_data_t *kernel, *smoothed; struct gal_tile_two_layer_params ttl={0}; int permute=tl->ndim>1 && tl->totchannels>1; /* Check if the width is odd. */ if(width%2==0) error(EXIT_FAILURE, 0, "%s: %zu not acceptable as width. It has to be " "an odd number", __func__, width); /* Prepare the kernel size along every dimension. */ kdsize=gal_pointer_allocate(GAL_TYPE_SIZE_T, tl->ndim, 0, __func__, "kdsize"); for(i=0;i<tl->ndim;++i) kdsize[i]=width; /* Make the kernel. */ kernel=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, tilevalues->ndim, kdsize, NULL, 0, -1, 1, NULL, NULL, NULL); knum=gal_dimension_total_size(tl->ndim, kernel->dsize); for(i=0;i<knum;++i) ((float *)(kernel->array))[i]=1/((double)knum); /* Permute (if necessary). */ if(permute) { gal_tile_full_permutation(tl); gal_permutation_apply(tilevalues, tl->permutation); } /* Do the smoothing. */ if(tl->workoverch) smoothed=gal_convolve_spatial(tilevalues, kernel, numthreads, 1, 1, 0); else { /* Create the tile structure. */ ttl.tilesize=tl->numtilesinch; ttl.numchannels=tl->numchannels; gal_tile_full_sanity_check("IMPOSSIBLE", "IMP_HDU", tilevalues, &ttl); gal_tile_full_two_layers(tilevalues, &ttl); /* Do the convolution separately on each channel. */ smoothed=gal_convolve_spatial(ttl.tiles, kernel, numthreads, 1, 0, 0); /* Clean up. */ ttl.tilesize=ttl.numchannels=NULL; gal_tile_full_free_contents(&ttl); } /* Reverse the permutation. */ if(permute) gal_permutation_apply_inverse(smoothed, tl->permutation); /* Clean up and return. */ free(kdsize); gal_data_free(kernel); return smoothed; } size_t gal_tile_full_id_from_coord(struct gal_tile_two_layer_params *tl, size_t *coord) { /* This function only works for 10 dimensions. */ size_t i, tr, chid, tile[10]; /* Host channel's ID. */ for(i=0;i<tl->ndim;++i) tile[i] = tl->totchannels == 1 ? 0 : coord[i] / tl->channelsize[i]; chid=gal_dimension_coord_to_index(tl->ndim, tl->numchannels, tile); /* Find the tile within the channel. */ for(i=0;i<tl->ndim;++i) { tr=coord[i] % tl->channelsize[i]; if( tl->firsttsize[i] != tl->tilesize[i] ) tile[i] = ( tr <= tl->firsttsize[i] ? 0 : 1 + (tr - tl->firsttsize[i]) / tl->tilesize[i] ); else tile[i] = tr / tl->tilesize[i]; } /* Return the tile ID. */ return ( chid * tl->tottilesinch + gal_dimension_coord_to_index(tl->ndim, tl->numtilesinch, tile) ); } /* Clean up the allocated spaces in the parameters. */ void gal_tile_full_free_contents(struct gal_tile_two_layer_params *tl) { /* Free the simply allocated spaces. */ if(tl->tilesize) free(tl->tilesize); if(tl->numchannels) free(tl->numchannels); if(tl->channelsize) free(tl->channelsize); if(tl->numtiles) free(tl->numtiles); if(tl->numtilesinch) free(tl->numtilesinch); if(tl->tilecheckname) free(tl->tilecheckname); if(tl->permutation) free(tl->permutation); if(tl->firsttsize) free(tl->firsttsize); /* Free the arrays of 'gal_data_t' for each tile and channel. */ if(tl->tiles) gal_data_array_free(tl->tiles, tl->tottiles, 0); if(tl->channels) gal_data_array_free(tl->channels, tl->totchannels, 0); } ������������������������������������������������������������gnuastro-0.22/lib/tile-internal.c�������������������������������������������������������������������0000644�0001750�0001750�00000063471�14553743675�012477� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Common tile operations used by some Gnuastro programs, but too specific to be in the general library. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2019-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnuastro/tile.h> #include <gnuastro/threads.h> #include <gnuastro/pointer.h> #include <gnuastro/statistics.h> #include <gnuastro/interpolate.h> #include <gnuastro/permutation.h> #include <gnuastro-internal/tile-internal.h> /* The main working function for 'threshold_no_outlier'. The main purpose/problem is this: when we have channels, the qthresh values for each channel should be treated independently. */ static void tileinternal_no_outlier_work(gal_data_t *first, gal_data_t *second, gal_data_t *third, size_t channelid, size_t tottilesinch, double *outliersclip, float outliersigma) { size_t i, osize=first->size; size_t start=tottilesinch*channelid; float *oa1=NULL, *oa2=NULL, *oa3=NULL; gal_data_t *nbs, *outlier_p, *outlier_n; float o_p, o_n, *arr1=NULL, *arr2=NULL, *arr3=NULL; /* A small sanity check. */ if(first->type!=GAL_TYPE_FLOAT32) error(EXIT_FAILURE, 0, "%s: datatype has to be float32", __func__); /* Correct the arrays (if necessary). IMPORTANT: The datasets are multi-dimensional. However, when estimating the quantile, their dimensionality doesn't matter (only the 'size' element is checked by 'gal_statistics_quantile', not 'ndim' or `dsize'). So we just need to correct 'size' if channels are to be considered. */ if(start || tottilesinch!=first->size) { /* Keep the original values for re-setting later. */ oa1=first->array; oa2=second->array; if(third) oa3=third->array; /* Increment the array pointers. */ first->array=gal_pointer_increment(first->array, start, first->type); second->array=gal_pointer_increment(second->array, start, second->type); if(third) third->array=gal_pointer_increment(third->array, start, third->type); /* Correct their sizes. */ first->size=tottilesinch; second->size=tottilesinch; if(third) third->size=tottilesinch; } /* Find the quantile and remove all tiles that are more than it in the first array. */ arr1=first->array; nbs=gal_statistics_no_blank_sorted(first, 0); outlier_p=gal_statistics_outlier_bydistance(1, nbs, nbs->size/2, outliersigma, outliersclip[0], outliersclip[1], 1, 1); outlier_n=gal_statistics_outlier_bydistance(0, nbs, nbs->size/2, outliersigma, outliersclip[0], outliersclip[1], 1, 1); /* For a check. { float *med; gal_data_t *median=gal_statistics_median(nbs, 1); float *out_n=outlier_n->array, *out_p=outlier_p->array; med=median->array; printf("vals: %f (out_n), %f (med), %f (out_p)\n", out_n[0], med[0], out_p[0]); exit(0); } */ /* Clean up the temporary 'nbs' array. */ gal_data_free(nbs); /* If outliers exist, then implement them. */ if(outlier_p) { o_p = *((float *)(outlier_p->array)); gal_data_free(outlier_p); if(outlier_n) { /* For easy reading, put the negative outlier into 'o_n'. */ o_n = *((float *)(outlier_n->array)); gal_data_free(outlier_n); /* See description below, it just includes a negative outlier. */ for(i=0;i<first->size;++i) arr1[i] = arr1[i]<o_p ? (arr1[i]>o_n ? arr1[i] : NAN) : NAN; } else /* Just note that we have blank (NaN) values, so to avoid doing a NaN check with 'isnan', we will check if the value is below the quantile, if it succeeds (isn't NaN and is below the quantile), then we'll put it's actual value, otherwise, a NaN. */ for(i=0;i<first->size;++i) arr1[i] = arr1[i]<o_p ? arr1[i] : NAN; } else if(outlier_n) { o_n = *((float *)(outlier_n->array)); for(i=0;i<first->size;++i) arr1[i] = arr1[i]>o_n ? arr1[i] : NAN; gal_data_free(outlier_n); } /* Second quantile threshold. We are finding the outliers independently on each dataset to later remove any tile that is blank in atleast one of them. */ arr2=second->array; nbs=gal_statistics_no_blank_sorted(second, 0); outlier_p=gal_statistics_outlier_bydistance(1, nbs, nbs->size, outliersigma, outliersclip[0], outliersclip[1], 1, 1); outlier_n=gal_statistics_outlier_bydistance(0, nbs, nbs->size, outliersigma, outliersclip[0], outliersclip[1], 1, 1); gal_data_free(nbs); if(outlier_p) { o_p = *((float *)(outlier_p->array)); gal_data_free(outlier_p); if(outlier_n) { o_n = *((float *)(outlier_n->array)); for(i=0;i<first->size;++i) arr2[i] = arr2[i]<o_p ? (arr2[i]>o_n ? arr2[i] : NAN) : NAN; gal_data_free(outlier_n); } else for(i=0;i<first->size;++i) arr2[i] = arr2[i]<o_p ? arr2[i] : NAN; } else if(outlier_n) { o_n = *((float *)(outlier_n->array)); for(i=0;i<first->size;++i) arr2[i] = arr2[i]>o_n ? arr2[i] : NAN; gal_data_free(outlier_n); } /* The third (if it exists). */ if(third) { arr3=third->array; nbs=gal_statistics_no_blank_sorted(third, 0); outlier_p=gal_statistics_outlier_bydistance(1, nbs, nbs->size/2, outliersigma, outliersclip[0], outliersclip[1], 1, 1); outlier_n=gal_statistics_outlier_bydistance(0, nbs, nbs->size/2, outliersigma, outliersclip[0], outliersclip[1], 1, 1); gal_data_free(nbs); if(outlier_p) { o_p = *((float *)(outlier_p->array)); gal_data_free(outlier_p); if(outlier_n) { o_n = *((float *)(outlier_n->array)); for(i=0;i<first->size;++i) arr3[i] = arr3[i]<o_p ? (arr3[i]>o_n ? arr3[i] : NAN) : NAN; gal_data_free(outlier_n); } else for(i=0;i<first->size;++i) arr3[i] = arr3[i]<o_p ? arr3[i] : NAN; } else if(outlier_n) { o_n = *((float *)(outlier_n->array)); for(i=0;i<first->size;++i) arr3[i] = arr3[i]>o_n ? arr3[i] : NAN; gal_data_free(outlier_n); } } /* Make sure all three have the same NaN pixels. */ for(i=0;i<first->size;++i) if( isnan(arr1[i]) || isnan(arr2[i]) || (third && isnan(arr3[i])) ) { arr1[i] = arr2[i] = NAN; if(third) arr3[i] = NAN; } /* Correct the values, if they were changed. */ if(start || tottilesinch!=osize) { first->array=oa1; second->array=oa2; first->size = second->size = osize; if(third) { third->array=oa3; third->size=osize; } } } /* Clean higher valued quantile thresholds: useful when the diffuse (almost flat) structures are much larger than the tile size. */ void gal_tileinternal_no_outlier(gal_data_t *first, gal_data_t *second, gal_data_t *third, struct gal_tile_two_layer_params *tl, double *outliersclip, float outliersigma, char *filename) { size_t i; /* A small sanity check. */ if(first->size!=tl->tottiles) error(EXIT_FAILURE, 0, "%s: 'first->size' and 'tl->tottiles' must " "have the same value, but they don't: %zu, %zu", __func__, first->size, tl->tottiles); /* Do the work. */ for(i=0;i<tl->totchannels;++i) tileinternal_no_outlier_work(first, second, third, i, tl->tottilesinch, outliersclip, outliersigma); /* If the user wants to see the steps. */ if(filename) { first->name="VALUE1_NO_OUTLIER"; second->name="VALUE2_NO_OUTLIER"; gal_tile_full_values_write(first, tl, 1, filename, NULL, 0); gal_tile_full_values_write(second, tl, 1, filename, NULL, 0); first->name=second->name=NULL; if(third) { third->name="VALUE3_NO_OUTLIER"; gal_tile_full_values_write(third, tl, 1, filename, NULL, 0); third->name=NULL; } } } /*************************************************************/ /************ Local outlier removal ************/ /*************************************************************/ #define TILEINTERNAL_OUTLIER_FLAGS_NO 0 #define TILEINTERNAL_OUTLIER_FLAGS_NGB_CHECKED 0x1 #define TILEINTERNAL_OUTLIER_FLAGS_BLANK 0x2 struct tileinternal_outlier_local { gal_data_t *input; gal_data_t *measure; gal_data_t *blanks; size_t numneighbors; uint8_t *thread_flags; gal_list_void_t *ngb_vals; char *optionname; float (*metric)(size_t *, size_t *, size_t ); struct gal_tile_two_layer_params *tl; }; /* Run the outlier rejection on many threads. */ static void * gal_tileinternal_no_outlier_local_on_thread(void *in_prm) { /* Low-level variables that others depend on. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct tileinternal_outlier_local *prm= (struct tileinternal_outlier_local *)(tprm->params); /* Higher-level variables. */ struct gal_tile_two_layer_params *tl=prm->tl; int correct_index=(tl && tl->totchannels>1 && !tl->workoverch); gal_data_t *input=prm->input; /* Rest of variables. */ void *nv; uint8_t *b, *bf, *bb; gal_list_void_t *tvll; size_t ngb_counter, pind; gal_list_dosizet_t *lQ, *sQ; gal_data_t *tin, *tnear, *nearest=NULL; float dist, pdist, *tnarr, *marr=prm->measure->array; size_t i, index, fullind, chstart=0, ndim=input->ndim; size_t size = (correct_index ? tl->tottilesinch : input->size); size_t *dsize = (correct_index ? tl->numtilesinch : input->dsize); size_t *icoord=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "icoord"); size_t *ncoord=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "ncoord"); uint8_t *flag, *fullflag=&prm->thread_flags[tprm->id*input->size]; /* Based on the above. */ size_t *dinc=gal_dimension_increment(ndim, dsize); /* Initialize the flags array. We need two flags during this processing: 1) to see if there are blanks. 2) to see if a neighbor has been checked. These are both binary (0 or 1). So to avoid wasting space, we will use bits to store them. We start with only setting the blank flag once for the whole thread. Then for each interpolated pixel, we reset the neighbor-check flag. */ flag=fullflag; bb=prm->blanks->array; bf=(b=fullflag)+input->size; do *b = *bb++ ? TILEINTERNAL_OUTLIER_FLAGS_BLANK : 0; while(++b<bf); /* Put the allocated space to keep the neighbor values into a structure for easy processing. */ tin=input; for(tvll=prm->ngb_vals; tvll!=NULL; tvll=tvll->next) { nv=gal_pointer_increment(tvll->v, tprm->id*prm->numneighbors, input->type); gal_list_data_add_alloc(&nearest, nv, tin->type, 1, &prm->numneighbors, NULL, 0, -1, 1, NULL, NULL, NULL); tin=tin->next; } gal_list_data_reverse(&nearest); /* Go over all the points given to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ fullind=tprm->indexs[i]; /* If we are on a blank element, then ignore this pixel. */ if( (fullflag[fullind] & TILEINTERNAL_OUTLIER_FLAGS_BLANK) ) { marr[fullind]=NAN; continue; } /* Correct the index (if necessary). When the values come from a tiled dataset, the caller might want to interpolate the values of each channel separately (not mix values from different channels). In such a case, the tiles of each channel (and their values in 'input' are contiguous. So we need to correct 'tprm->indexs[i]' (which is the index over the whole tessellation, including all channels). */ if(correct_index) { /* Index of this tile in its channel. */ index = fullind % tl->tottilesinch; /* Index of the first tile in this channel. */ chstart = (fullind / tl->tottilesinch) * tl->tottilesinch; /* Set the channel's starting pointer for the flags. */ flag = gal_pointer_increment(fullflag, chstart, GAL_TYPE_UINT8); } else { chstart=0; index=fullind; } /* Reset all checked bits in the flags array to 0. */ ngb_counter=0; bf=(b=flag)+size; do *b &= ~(TILEINTERNAL_OUTLIER_FLAGS_NGB_CHECKED); while(++b<bf); /* Get the coordinates of this pixel (to be interpolated). */ gal_dimension_index_to_coord(index, ndim, dsize, icoord); /* Start parsing the neighbors. We will use a two-way ordered linked list structure. To start from the nearest and go out to the farthest. */ lQ=sQ=NULL; gal_list_dosizet_add(&lQ, &sQ, index, 0.0f); while(sQ) { /* Pop-out (p) an index from the queue: */ pind=gal_list_dosizet_pop_smallest(&lQ, &sQ, &pdist); /* If this isn't a blank value then add its values to the list of neighbor values. Note that we didn't check whether the values were blank or not when adding this pixel to the queue. */ if( !(flag[pind] & TILEINTERNAL_OUTLIER_FLAGS_BLANK) ) { tin=input; for(tnear=nearest; tnear!=NULL; tnear=tnear->next) { memcpy(gal_pointer_increment(tnear->array, ngb_counter, tin->type), gal_pointer_increment(tin->array, chstart+pind, tin->type), gal_type_sizeof(tin->type)); tin=tin->next; } /* If we have filled all the elements clean up the linked list and break out. */ if(++ngb_counter>=prm->numneighbors) { if(lQ) gal_list_dosizet_free(lQ); break; } } /* Go over all the neighbors of this popped pixel and add them to the list of neighbors to be checked. */ GAL_DIMENSION_NEIGHBOR_OP(pind, ndim, dsize, 1, dinc, { /* Only look at neighbors that have not been checked. VERY IMPORTANT: we must not check for blank values here, otherwise we won't be able to parse over extended blank regions. */ if( !(flag[nind] & TILEINTERNAL_OUTLIER_FLAGS_NGB_CHECKED) ) { /* Get the coordinates of this neighbor. */ gal_dimension_index_to_coord(nind, ndim, dsize, ncoord); /* Distance of this neighbor to the one to be filled. */ dist=prm->metric(icoord, ncoord, ndim); /* Add this neighbor to the list. */ gal_list_dosizet_add(&lQ, &sQ, nind, dist); /* Flag this neighbor as checked. */ flag[nind] |= TILEINTERNAL_OUTLIER_FLAGS_NGB_CHECKED; } } ); /* If there are no more meshes to add to the queue, then this shows, there were not enough points for interpolation. Normally, this loop should only be exited through the 'currentnum>=numnearest' check above. */ if(sQ==NULL) error(EXIT_FAILURE, 0, "%s: only %zu neighbors found while " "you had asked to use %zu neighbors for outlier " "rejection (value to '%s')", __func__, ngb_counter, prm->numneighbors, prm->optionname); } /* Calculate the desired statistic, and write it in the output. */ for(tnear=nearest; tnear!=NULL; tnear=tnear->next) { /* First, reset the sorting flags (which remain from the last time). */ tnear->flag &= ~(GAL_DATA_FLAG_SORT_CH | GAL_DATA_FLAG_BLANK_CH); /* For a check on the values. { size_t i; float *f=tnear->array; for(i=0;i<tnear->size;++i) printf("%f\n", f[i]); } */ /* Sort the elements, then find the difference between the maximium and the value that is just after the minimum. We are doing this because the scatter in the minimum can be large. */ tnarr=tnear->array; gal_statistics_sort_increasing(tnear); marr[fullind] = tnarr[tnear->size-1]-tnarr[1]; } } /* Clean up. */ for(tnear=nearest; tnear!=NULL; tnear=tnear->next) tnear->array=NULL; gal_list_data_free(nearest); free(icoord); free(ncoord); free(dinc); /* Wait for all the other threads to finish and return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } void gal_tileinternal_no_outlier_local(gal_data_t *input, gal_data_t *second, gal_data_t *third, struct gal_tile_two_layer_params *tl, uint8_t metric, size_t numneighbors, size_t numthreads, double *outliersclip, double outliersigma, char *filename, char *optionname) { gal_data_t *othresh; float *base, *f, *ff, thresh; struct tileinternal_outlier_local prm; size_t owindow, ngbvnum=numthreads*numneighbors; int permute=(tl && tl->totchannels>1 && tl->workoverch); /* Sanity checks. */ if(numneighbors<=3) error(EXIT_FAILURE, 0, "%s has to be larger than 3, but " "is currently %zu", optionname, numneighbors); if(input->type!=GAL_TYPE_FLOAT32) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The input to this function (not NoiseChisel) " "should be in 32-bit floating point, but it is %s", __func__, PACKAGE_BUGREPORT, gal_type_name(input->type, 1)); if(second && second->type!=GAL_TYPE_FLOAT32) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The 'second' argument to this function (not " "NoiseChisel) should be in 32-bit floating point, but it is " "%s", __func__, PACKAGE_BUGREPORT, gal_type_name(input->type, 1)); if(third && third->type!=GAL_TYPE_FLOAT32) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The 'third' argument to this function (not " "NoiseChisel) should be in 32-bit floating point, but it is " "%s", __func__, PACKAGE_BUGREPORT, gal_type_name(input->type, 1)); if(second && gal_dimension_is_different(input, second) ) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The 'second' argument to this function (not " "NoiseChisel) doesn't have the same size as the input", __func__, PACKAGE_BUGREPORT); if(third && gal_dimension_is_different(input, third) ) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix " "the problem. The 'third' argument to this function (not " "NoiseChisel) doesn't have the same size as the input", __func__, PACKAGE_BUGREPORT); /* Initialize the constant parameters. */ prm.tl = tl; prm.ngb_vals = NULL; prm.input = input; prm.optionname = optionname; prm.numneighbors = numneighbors; /* Set the distance metric. */ switch(metric) { case GAL_INTERPOLATE_NEIGHBORS_METRIC_RADIAL: prm.metric=gal_dimension_dist_radial; break; case GAL_INTERPOLATE_NEIGHBORS_METRIC_MANHATTAN: prm.metric=gal_dimension_dist_manhattan; break; default: error(EXIT_FAILURE, 0, "%s: %d is not a valid metric identifier", __func__, metric); } /* Flag the blank values. */ prm.blanks=gal_blank_flag(input); /* If the input is from a tile structure and the user has asked to ignore channels, then re-order the values. */ if(permute) { /* Prepare the permutation (if necessary/not already defined). */ gal_tile_full_permutation(tl); /* Re-order values to ignore channels (if necessary). */ gal_permutation_apply(input, tl->permutation); gal_permutation_apply(prm.blanks, tl->permutation); } /* Necessary allocations and basic checks. if we are given a list of datasets, make the necessary allocations. The reason we are doing this after a check of 'aslinkedlist' is that the 'input' might have a 'next' element, but the caller might not have called 'aslinkedlist'. */ prm.measure=gal_data_alloc(NULL, GAL_TYPE_FLOAT32, input->ndim, input->dsize, input->wcs, 0, input->minmapsize, input->quietmmap, NULL, input->unit, NULL); gal_list_void_add(&prm.ngb_vals, gal_pointer_allocate(input->type, ngbvnum, 0, __func__, "prm.ngb_vals")); /* Allocate space for all the flag values of all the threads here (memory in each thread is limited) and this is cleaner. */ prm.thread_flags=gal_pointer_allocate(GAL_TYPE_UINT8, numthreads*input->size, 0, __func__, "prm.thread_flags"); /* Spin off the threads. */ gal_threads_spin_off(gal_tileinternal_no_outlier_local_on_thread, &prm, input->size, numthreads, input->minmapsize, input->quietmmap); /* Find the outliers in the distribution, we will start from the first third of the cases to find the first outlier. Note that this should not be done in-place because we need the 'measure' arrray afterwards. */ owindow=(prm.measure->size - gal_blank_number(prm.measure, 1))/3; othresh=gal_statistics_outlier_bydistance(1, prm.measure, owindow, outliersigma, outliersclip[0], outliersclip[1], 0, 1); /* If an outlier threshold was actually found, then mask all the tiles larger than that value. */ if(othresh) { base=prm.measure->array; ff=(f=input->array)+input->size; thresh=((float *)(othresh->array))[0]; do { *f = isnan(*f) ? *f : (*base>thresh ? NAN : *f); ++base; } while(++f<ff); } /* For a check. printf("measure-threshold: %f\n", thresh); if(permute) gal_permutation_apply_inverse(prm.measure, tl->permutation); gal_tile_full_values_write(prm.measure, tl, 1, "measure.fits", NULL, NULL); */ /* If the values were permuted for the interpolation, then re-order the values back to their original location (so they correspond to their tile indexs. */ if(permute) gal_permutation_apply_inverse(input, tl->permutation); /* If the other arrays are given, set all the blank elements here to blank there too. */ if(second) { base=input->array; ff=(f=second->array)+second->size; do { *f = isnan(*base++) ? NAN : *f ;} while(++f<ff); } if(third) { base=input->array; ff=(f=third->array)+third->size; do { *f = isnan(*base++) ? NAN : *f ;} while(++f<ff); } /* Write the check images if necessary. */ if(filename) { input->name="VALUE1_NO_OUTLIER"; gal_tile_full_values_write(input, tl, 1, filename, NULL, 0); input->name=NULL; if(second) { second->name="VALUE2_NO_OUTLIER"; gal_tile_full_values_write(second, tl, 1, filename, NULL, 0); second->name=NULL; } if(third) { third->name="VALUE3_NO_OUTLIER"; gal_tile_full_values_write(third, tl, 1, filename, NULL, 0); third->name=NULL; } } /* Clean up and return. */ gal_data_free(othresh); free(prm.thread_flags); gal_data_free(prm.blanks); gal_data_free(prm.measure); gal_list_void_free(prm.ngb_vals, 1); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/timing.c��������������������������������������������������������������������������0000644�0001750�0001750�00000005124�14551337306�011172� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to report timing in verbose mode. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <stdint.h> #include <gnuastro-internal/timing.h> /* Micro-second based timer, which can be used to generate random numbers. The type of 'tv_sec' and 'tv_usec' is 'long int' (from the GNU C Library manual). But the expected type used by GSL's random number generator is 'unsigned long int'. Since the only random number generator that is currently in Gnuastro is GSL's (and it asks for seeds of type 'unsigned long int'), this function will return in 'unsigned long int'. Note that 'unsigned long' will be able to hold any positive 'long' integer, which is the case for 'tv_sec' and 'tv_usec': they are both positive, while the opposite isn't true. */ unsigned long int gal_timing_time_based_rng_seed() { struct timeval tv; gettimeofday(&tv,0); return tv.tv_sec + tv.tv_usec; } /* Used to report the time it takes for an action to be done. */ void gal_timing_report(struct timeval *t1, char *jobname, size_t level) { double dt=1e30; struct timeval t2; if(t1) { gettimeofday(&t2, NULL); dt= ( ((double)t2.tv_sec+(double)t2.tv_usec/1e6) - ((double)t1->tv_sec+(double)t1->tv_usec/1e6) ); } if(level==0) printf("%s %-f seconds\n", jobname, dt); else if(level==1) { if(t1) printf(" - %-*s %f seconds\n", GAL_TIMING_VERB_MSG_LENGTH_V, jobname, dt); else printf(" - %s\n", jobname); } else if(level==2) { if(t1) printf(" ---- %-*s %f seconds\n", GAL_TIMING_VERB_MSG_LENGTH_V-3, jobname, dt); else printf(" ---- %s\n", jobname); } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/txt.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000222164�14551337306�010527� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* txt -- functions to deal with plain text files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <ctype.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <unistd.h> #include <string.h> #include <stdlib.h> #include <gnuastro/txt.h> #include <gnuastro/list.h> #include <gnuastro/units.h> #include <gnuastro/blank.h> #include <gnuastro/table.h> #include <gnuastro/pointer.h> #include <gnuastro/statistics.h> #include <gnuastro-internal/checkset.h> #include <gnuastro-internal/tableintern.h> /************************************************************************/ /*************** Get table information ***************/ /************************************************************************/ /* Format of table. Currently these constants are internal to this library, we don't want to crowd the name space of the user by having them in the header file. */ enum txt_formats_code { TXT_FORMAT_INVALID, TXT_FORMAT_TABLE, TXT_FORMAT_IMAGE, }; /* Return one of the 'txt_line_stat' constant values. */ int gal_txt_line_stat(char *line) { while(*line!='\n') { switch(*line) { /* Characters to ignore. */ case ' ': case ',': case '\t': break; case '#': return GAL_TXT_LINESTAT_COMMENT; default: return GAL_TXT_LINESTAT_DATAROW; } ++line; } return GAL_TXT_LINESTAT_BLANK; } /* Remove the spaces around the values, and if the final/trimmed string has no length, return NULL. */ char * gal_txt_trim_space(char *str) { char *end; /* If str doesn't point to anything, just return the NULL pointer. */ if(str==NULL) return NULL; /* Remove the spaces before the start of the string. */ while(isspace(*str)) ++str; /* If there was nothing in the string, return NULL. */ if(*str=='\0') return NULL; /* Remove the spaces at the end, and write a possibly new '\0'. */ end = str + strlen(str) - 1; while(end>str && isspace(*end)) --end; *(end+1)='\0'; /* Return the string. */ return *str=='\0' ? NULL : str; } /* Return 1 if the input string contains the 'match' substring. */ int gal_txt_contains_string(char *full, char *match) { char *c=full; size_t ml = match ? strlen(match) : 0; /* If the input or output strings are empty, a match can't be defined (strncmp will always succeed to find a match). */ if(ml==0 || full==NULL || *full=='\0') return 0; /* Parse the string (character by character) to see if there is a match. */ do if( strncmp(c, match, ml)==0 ) return 1; while( *(++c)!='\0' ); /* If control reaches here, there was no match. */ return 0; } /* Read the vector type and number of elements. */ static int txt_info_vector_type(char *string, size_t *repeat) { int type, irepeat, *irptr=&irepeat; void **iptr=(void **)(&irptr); char *c, *rstr=NULL; /* See if there is a '(' in the string: we already know that there was a ')' at the end of the string before entring this function. After this step: string --> name of type rstr --> string of number of repeats. */ for(c=string; *c!='\0'; ++c) switch(*c) { case '(': *c='\0'; rstr=c+1; break; case ')': *c='\0'; break; } /* Read the "repeat" element, if it wasn't set (there was no opening parenthesis), or the value in the parenthesis can't be read as an integer number, or the given integer was negative, just ignore the repeat (by setting it to 1). */ *repeat = ( ( rstr && gal_type_from_string(iptr, rstr, GAL_TYPE_INT)==0 && irepeat>1 ) ? irepeat : 1 ); /* Read the type. */ type=gal_type_from_name(string); if(type==GAL_TYPE_INVALID) type=GAL_TYPE_FLOAT64; return type; } /* Each information comment should have a format like this (replace 'Column' with 'Image' for 2D arrays): # Column N: NAME [UNITS, TYPE(REPEAT), BLANK] COMMENT 'TYPE' has pre-defined values, and 'N' and 'REPEAT' must be an integer, but the rest can contain any characters (including whitespace characters). The UNITS, TYPE, BLANK tokens are optional, if not given, default values will be set. But if there are comments, then the brackets themselves are required to separate the name from the comments. Any white space characters before or after the delimiters (':', '[', ']', ',') is ignored, but spaces within the values are kept. For example, in the two following lines, NAME will be set to 'col name' (even though there are extra spaces in the second line, The column unit will be set to 'col unit'. # Column 2: col name # Column 2 : col name [ col unit, type ] Column comments. When the column type is a string, the number of characters in the string is also necessary, for example 'str10'. Without an integer attached, the line will be ignored. In the case of an error or mis-match, the line will be ignored. This function will make a linked list of information about each column that has information in the comments. The information on each column doesn't have to be in order, for example the information of column 10 can be before column 7. */ static void txt_info_from_comment(char *in_line, gal_data_t **datall, char *comm_start, int inplace) { gal_data_t *tmp; int index, strw=0; int type=GAL_TYPE_FLOAT64; /* Default type. */ char *line, *aline, *tailptr; size_t len=strlen(comm_start), repeat; char *number=NULL, *name=NULL, *comment=NULL; char *inbrackets=NULL, *unit=NULL, *typestr=NULL, *blank=NULL; /* Make a copy of the input line if 'inplace==0'. */ if(inplace) line=aline=in_line; else { /* Because the 'line' pointer will change, we need a pointer to the start of the originally allocated lines. This is the purpose of 'aline' (allocated-line). */ gal_checkset_allocate_copy(in_line, &aline); line=aline; } /* Only read this comment line if it follows the convention: */ if( !strncmp(line, comm_start, len) ) { /* Set 'name', 'inbrackets', and 'comment' in the first pass through the line. */ number=line+len; while(*line!='\0') { switch(*line) { case ':': if(name==NULL) { *line='\0'; name=line+1; } break; case '[': if(name && inbrackets==NULL) { *line='\0'; inbrackets=line+1; } break; case ']': if(inbrackets && comment==NULL) { *line='\0'; comment=line+1; } break; case '\n': *line='\0'; break; } ++line; } /* Read the column number as an integer. If it can't be read as an integer, or is zero or negative then just return without adding anything to this line. */ index=strtol(number, &tailptr, 0); if(*tailptr!='\0' || index<=0) return; /* Read the column name. If no name is given (which is perfectly fine: for example '# Column 4: [abc, f32] description'), then 'name' will be NULL. */ name=gal_txt_trim_space(name); /* If this is a repeated index, ignore it. */ for(tmp=*datall; tmp!=NULL; tmp=tmp->next) if(tmp->status==index) return; /* If there were brackets, then break it up. */ if(inbrackets) { unit=inbrackets; while(*inbrackets!='\0') { if(*inbrackets==',') { *inbrackets='\0'; if (typestr==NULL) typestr = inbrackets+1; else if(blank==NULL) blank = inbrackets+1; } ++inbrackets; } } /* If 'typestr' was given, then check if this is a standard type. If 'typestr' wasn't specified or couldn't be interpretted, then the default double type code will be used (see the variable definitions above). Just note that if we are dealing with the string type, we have to pull out the number part first. If there is no number for a string type, then ignore the line. */ repeat=1; /* Initialize for each column. */ if(typestr && *typestr!='\0') { typestr=gal_txt_trim_space(typestr); if( !strncmp(typestr, "str", 3) ) { type=GAL_TYPE_STRING; strw=strtol(typestr+3, &tailptr, 0); if(*tailptr!='\0' || strw<0) return; } else { type=gal_type_from_name(typestr); if(type==GAL_TYPE_INVALID) { /* See if this is a vector column (that has the format of 'f32(N)' for example), by seeing if the last character is a parenthesis or not, we'll do the other checks in a dedicated function. */ if(typestr[ strlen(typestr)-1 ] == ')') type=txt_info_vector_type(typestr, &repeat); /* No readable type, just set 64-bit float. */ else type=GAL_TYPE_FLOAT64; } } } /* Add this column's information into the columns linked list. We will define the data structure's array to have zero dimensions (no array) by default. If there is a blank value its value will be put into the array by 'gal_table_read_blank'. To keep the name, unit, and comment strings, trim the white space before and after each before using them here. */ gal_list_data_add_alloc(datall, NULL, type, 0, NULL, NULL, 0, repeat, 1, name, gal_txt_trim_space(unit), gal_txt_trim_space(comment) ); /* Put the number of this column into the status variable of the data structure. If the type is string, then also copy the width into the structure. */ (*datall)->status=index; (*datall)->disp_width = type==GAL_TYPE_STRING ? strw : 0; /* Write the blank value into the array. Note that this is not the final column, we are just collecting information now. If the blank value wasn't interpretted into the given type the 'flag' element of the dataset will be set and the contents of the 'blank' string will be copied into the 'array' element (so it should be interpretted as a 'char *'). */ gal_tableintern_read_blank(*datall, gal_txt_trim_space(blank)); } /* Clean up. */ if(in_line!=aline) free(aline); } /* In the case of a table, the input might not have had information in its comments, or the information might not have been complete. So we need to go through the first row of data also. In the case of the image, this is necessary, because we need to find the second dimension value. This function will return the number of tokens in the first row of the given text file. If the file is a text table with string columns, the contents of the string column will be counted as one token. When there is no metadata, each token on the line is a separate column, so the "repeat" is always one within this funciton. */ static size_t txt_info_from_first_row(char *in_line, gal_data_t **datall, int format, int inplace) { double tmpd; void *tmpdptr=&tmpd; gal_data_t *col, *prev, *tmp; char *line, *token, *end, *aline=NULL; size_t i, ncol, repeat=1, maxcnum=0, numchecked; /* Make a copy of the input line if necessary. */ if(inplace) line=in_line; else { gal_checkset_allocate_copy(in_line, &line); aline=line; /* We are going to change 'line' during this function. */ } end=line+strlen(line); /* Remove the line termination character(s) from the end of the line. In Unix, the line terminator is just the new-line character, however, in some operating systems (like MS Windows), it is two characters: carriage return and new-line. To be able to deal with both, we will be checking the second last character first, the ASCII code for carriage return is 13. If the last column is a string, and the given length is larger than the available space on the line, we don't want to have the line's new-line character. Its better for it to actually be shorter than the space. */ if( end>line+2 && *(end-2)==13 ) *(end-2)='\0'; else if( *(end-1)=='\n' ) *(end-1)='\0'; /* Get the maximum number of columns read from the comment information. */ for(col=*datall; col!=NULL; col=col->next) maxcnum = maxcnum>col->status ? maxcnum : col->status; /* Go over the line check/fill the column information. */ ncol=0; while(++ncol) { /* If 'line' has already passed the end of the actual string (for example when a string column is the last one and its declared width is larger than the actual number of characters it has in that line). */ if(line>=end) break; /* When we are dealing with a text table, check if there is information for this column. For a text image, only the number of tokens is important (as the second dimension of the image), so just assume there no information. */ if(format==TXT_FORMAT_TABLE) for(col=*datall; col!=NULL; col=col->next) { if(col->status==ncol) break; } else col=NULL; /* If there is information for this column, then check if it is a string, and if so, don't use 'strtok_r' (because it might have delimiters). So manually go ahead in the line till you get to the start of the string, then increment the line until the end of the space set for the strings. */ if(col) { if( col->type==GAL_TYPE_STRING ) { /* Remove all delimiters before the string starts. */ while(isspace(*line) || *line==',') ++line; /* Increment line to the end of the string. */ line = (token=line) + col->disp_width; /* If we haven't reached the end of the line (so 'line<end'), then set a NULL character where the current token is expected to end. In this way, we can use the token (while preserving the line for the rest of the 'while' loop). VERY IMPORTANT: to do this, 'line' should not be '<=end'. If the given width is larger than line, there is no problem, the '\0' of the line will also be used to end this last column. */ if(line<end) { *line++='\0'; /* printf(" col %zu: -%s-\n", i, token); */ } } else { /* Repeat is put in minmapsize (when we were reading the column info from comments). */ for(i=0;i<col->minmapsize;++i) { token=strtok_r(ncol==1?line:NULL, GAL_TXT_DELIMITERS, &line); if(token==NULL) break; } } } else { /* Make sure a token exists in this undefined column. */ token=strtok_r(ncol==1?line:NULL, GAL_TXT_DELIMITERS, &line); if(token==NULL) break; /* A token exists. For a table, define a new element in the linked list and set the column to the default double type with no information, then set its status value to the column number. So, for a table, this should be done on every column. But for an image, this should only be done once (when 'datall' has not been defined yet, for example in the column information). */ if( *datall==NULL || format==TXT_FORMAT_TABLE ) { /* Make sure the token is actually a number (or RA/Dec written in Sexagesimal format) and print a good error message when the input isn't actually a number but a string (this test was added because of uncommented metadata)! */ if( gal_type_from_string( &tmpdptr, token, GAL_TYPE_FLOAT64) && isnan( gal_units_ra_to_degree(token) ) && isnan( gal_units_dec_to_degree(token) ) ) error(EXIT_FAILURE, 0, "'%s' couldn't be read as a " "number (element %zu of first uncommented line)", token, ncol); /* Allocate this column's dataset and set it's 'status' to the column number that it corresponds to. */ gal_list_data_add_alloc(datall, NULL, GAL_TYPE_FLOAT64, 0, NULL, NULL, 0, repeat, 1, NULL, NULL, NULL); (*datall)->status=ncol; } } } /* When looking at a text table, 'ncol' is the number of columns (elements in the linked list). But when looking at an image, it is the size of the second dimension. To unify things from this step forwards, we will thus keep the value of 'ncol' until this point in another variable (that will be returned finally), and for an image, change 'ncol' to 1. This is necsesary in case the user has for example given two column information comments on an image plain text file. Note that 'ncol' counts from 1, so the total number of tokens is one less than 'ncol'. */ numchecked=ncol-1; if(format==TXT_FORMAT_IMAGE) ncol=1; /* If the number of columns/images given by the comments is larger than the actual number of lines, remove those that have larger numbers from the linked list before things get complicated outside of this function. */ if(maxcnum>numchecked) { prev=NULL; col=*datall; while(col!=NULL) { /* This column has no data (was only in comments). */ if(col->status > numchecked) { /* This column has to be removed/freed. But we have to make some corrections before freeing it: - When 'prev==NULL', then we still haven't got to the first valid element yet and must free this one, but if we do that, then the main pointer to the start of the list will be lost (we will loose all connections with the chain after leaving this loop). So we need to set that to the next element. - When there actually was a previous element ('prev!=NULL'), then we must correct it's next pointer. Otherwise we will break up the chain. */ if(prev) prev->next=col->next; else *datall=col->next; tmp=col->next; gal_data_free(col); col=tmp; } else /* Column has data. */ { prev=col; col=col->next; } } } /* Return the total number of columns/second-img-dimension. */ if(inplace==0) free(aline); return numchecked; } /* In the steps above, we read/set the information for each column. But to enforce minimum standard requirements on the user, things were allowed to be read very loosely, for example some columns can be not defined (and will thus be read as a double type), or they don't necessarily have to be given in the same order as the table (in which case, the first non-commented line provides basic information like how many columns there are). So we just pushed each new read/set column into a linked list. With this function, we convert that badly orderd linked list into a clean and ordered array for much more easier random access during the selection/reading of the data in the columns. After this function, the list is freed. */ static gal_data_t * txt_infoll_to_array(gal_data_t *datall, size_t *numdata) { size_t i, numc=0, ind; gal_data_t *data, *dataarr; /* First find the total number of columns. */ numc=gal_list_data_number(datall); /* Conversion to an array is only necessary when there is more than one element in the list. */ if(numc>1) { /* Allocate the array. */ dataarr=gal_data_array_calloc(numc); /* Put each dataset/column into its proper place in the array. */ while(datall!=NULL) { /* Pop the top element. */ data=gal_list_data_pop(&datall); /* The 'status' value is the number of the column (counting from 1, not 0). */ ind=data->status-1; /* Put all the information from 'data' into the respective part of the array. About the pointers, instead of having to allocate them again, we will just set them to NULL so 'gal_data_free' doesn't remove them. */ dataarr[ind].flag = data->flag; data->flag=0; dataarr[ind].name = data->name; data->name=NULL; dataarr[ind].unit = data->unit; data->unit=NULL; dataarr[ind].array = data->array; data->array=NULL; dataarr[ind].comment = data->comment; data->comment=NULL; dataarr[ind].ndim = 0; dataarr[ind].size = 0; dataarr[ind].dsize = NULL; dataarr[ind].type = data->type; dataarr[ind].disp_width = data->disp_width; dataarr[ind].minmapsize = data->minmapsize; /* "repeat" */ /* Clean up. */ gal_data_free(data); } } else dataarr=datall; /* Set the 'next' pointer of each column. */ for(i=0;i<numc;++i) dataarr[i].next = (i==numc-1) ? NULL : &dataarr[i+1]; /* Return the array of all column information and put the number of columns into the given pointer. */ *numdata=numc; return dataarr; } static void txt_get_info_line(char *line, gal_data_t **datall, char *comm_start, int *firstlinedone, int format, size_t *dsize, int inplace) { size_t numtokens; switch( gal_txt_line_stat(line) ) { /* Line is a comment, see if it has formatted information. */ case GAL_TXT_LINESTAT_COMMENT: txt_info_from_comment(line, datall, comm_start, inplace); break; /* Line is actual data, use it to fill in the gaps. */ case GAL_TXT_LINESTAT_DATAROW: ++dsize[0]; if(*firstlinedone==0) { *firstlinedone=1; numtokens=txt_info_from_first_row(line, datall, format, inplace); if(format==TXT_FORMAT_IMAGE) dsize[1]=numtokens; } break; /* We also have the case of GAL_TXT_LINESTAT_BLANK, but we don't need to do anything about it. */ } } /* Return the information about a text file table. If there were no readable rows, it will return NULL. */ static gal_data_t * txt_get_info(char *filename, gal_list_str_t *lines, int format, size_t *numdata, size_t *dsize) { FILE *fp; gal_list_str_t *tmp; gal_data_t *datall=NULL; int test, firstlinedone=0; char *line, *format_err="empty", *comm_start; size_t linelen=10; /* 'linelen' will be increased by 'getline'. */ /* 'filename' and 'lines' cannot both be non-NULL. */ test = (filename!=NULL) + (lines!=NULL); if( test!=1 ) error(EXIT_FAILURE, 0, "%s: one of the 'filename' and 'lines' " "arguments must be NULL, but they are both %s", __func__, test==2 ? "non-NULL" : "NULL"); /* Set the constant strings. */ switch(format) { case TXT_FORMAT_TABLE: format_err="table";comm_start="# Column ";break; case TXT_FORMAT_IMAGE: format_err="image";comm_start="# Image "; break; default: error(EXIT_FAILURE, 0, "%s: code %d not recognized", __func__, format); } /* Initialize the first 'dsize' element. */ dsize[0]=0; /* Parse the file or go over the lines. */ if(filename) { /* Open the file. */ errno=0; fp=fopen(filename, "r"); if(fp==NULL) error(EXIT_FAILURE, errno, "%s: couldn't open to read as a plain " "text %s (from Gnuastro's '%s')", filename, format_err, __func__); /* Allocate the space necessary to keep each line as we parse it. Note that 'getline' is going to later 'realloc' this space to fit the line length. */ errno=0; line=malloc(linelen*sizeof *line); if(line==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for line", __func__, linelen*sizeof *line); /* Read the comments of the line for possible information about the lines, but also confirm/complete the info by parsing the first uncommented line. */ while( getline(&line, &linelen, fp) != -1 ) txt_get_info_line(line, &datall, comm_start, &firstlinedone, format, dsize, 1); /* Clean up and close the file. */ free(line); errno=0; if(fclose(fp)) error(EXIT_FAILURE, errno, "%s: couldn't close file after reading " "plain text %s information in %s", filename, format_err, __func__); } else { for(tmp=lines; tmp!=NULL; tmp=tmp->next) txt_get_info_line(tmp->v, &datall, comm_start, &firstlinedone, format, dsize, 0); } /* The final dataset linked list can have any order (depending on how the user gave column information in tables for example). So here, we will convert the list into a nicely sorted array, note that this function frees list as part of the process. */ return txt_infoll_to_array(datall, numdata); } /* Get the information of each column in a text file. */ gal_data_t * gal_txt_table_info(char *filename, gal_list_str_t *lines, size_t *numcols, size_t *numrows) { return txt_get_info(filename, lines, TXT_FORMAT_TABLE, numcols, numrows); } /* Get the information of a 2D array in a text file. */ gal_data_t * gal_txt_image_info(char *filename, gal_list_str_t *lines, size_t *numimg, size_t *dsize) { return txt_get_info(filename, lines, TXT_FORMAT_IMAGE, numimg, dsize); } /************************************************************************/ /*************** Read a txt table ***************/ /************************************************************************/ static gal_data_t * txt_blocklist_add(gal_data_t *list, gal_data_t *newnode) { newnode->block=list; return newnode; } #if 0 static size_t txt_blocklist_number(gal_data_t *list) { size_t num=0; while(list!=NULL) { ++num; list=list->block; } return num; } #endif static void txt_read_token(gal_data_t *data, gal_data_t *info, char *token, size_t i, char *filename, size_t lineno, size_t toknum) { char *tailptr, emptystr[1]="\0"; char **str = data->array, **strb; uint8_t *uc = data->array, *ucb; int8_t *c = data->array, *cb; uint16_t *us = data->array, *usb; int16_t *s = data->array, *sb; uint32_t *ui = data->array, *uib; int32_t *ii = data->array, *ib; uint64_t *ul = data->array, *ulb; int64_t *l = data->array, *lb; float *f = data->array, *fb; double *d = data->array, *db; /* See if this token is blank. */ int isblankstr = ( info->flag & GAL_TABLEINTERN_FLAG_ARRAY_IS_BLANK_STRING ? ( strcmp(info->array,token)==0 ? 1 : 0 ) : 0); /* If the string is equal to the given blank string, then just write blank and don't bother parsing the token. */ if(isblankstr) { switch(data->type) { case GAL_TYPE_STRING: free(str[i]); gal_checkset_allocate_copy(GAL_BLANK_STRING, &str[i]); break; case GAL_TYPE_UINT8: uc[i] = GAL_BLANK_UINT8; break; case GAL_TYPE_INT8: c[i] = GAL_BLANK_INT8; break; case GAL_TYPE_UINT16: us[i] = GAL_BLANK_UINT16; break; case GAL_TYPE_INT16: s[i] = GAL_BLANK_INT16; break; case GAL_TYPE_UINT32: ui[i] = GAL_BLANK_UINT32; break; case GAL_TYPE_INT32: ii[i] = GAL_BLANK_INT32; break; case GAL_TYPE_UINT64: ul[i] = GAL_BLANK_UINT64; break; case GAL_TYPE_INT64: l[i] = GAL_BLANK_INT64; break; case GAL_TYPE_FLOAT32: f[i] = GAL_BLANK_FLOAT32; break; case GAL_TYPE_FLOAT64: d[i] = GAL_BLANK_FLOAT64; break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized in " "'blankstr' switch", __func__, data->type); } } /* Parse the token into the column's dataset. */ else { switch(data->type) { case GAL_TYPE_STRING: gal_checkset_allocate_copy(gal_txt_trim_space(token), &str[i]); if( (strb=info->array) && !strcmp( *strb, str[i] ) ) { free(str[i]); gal_checkset_allocate_copy(GAL_BLANK_STRING, &str[i]); } break; case GAL_TYPE_UINT8: uc[i]=strtol(token, &tailptr, 10); if( (ucb=info->array) && *ucb==uc[i] ) uc[i]=GAL_BLANK_UINT8; break; case GAL_TYPE_INT8: c[i]=strtol(token, &tailptr, 10); if( (cb=info->array) && *cb==c[i] ) c[i]=GAL_BLANK_INT8; break; case GAL_TYPE_UINT16: us[i]=strtol(token, &tailptr, 10); if( (usb=info->array) && *usb==us[i] ) us[i]=GAL_BLANK_UINT16; break; case GAL_TYPE_INT16: s[i]=strtol(token, &tailptr, 10); if( (sb=info->array) && *sb==s[i] ) s[i]=GAL_BLANK_INT16; break; case GAL_TYPE_UINT32: ui[i]=strtol(token, &tailptr, 10); if( (uib=info->array) && *uib==ui[i] ) ui[i]=GAL_BLANK_UINT32; break; case GAL_TYPE_INT32: ii[i]=strtol(token, &tailptr, 10); if( (ib=info->array) && *ib==ii[i] ) ii[i]=GAL_BLANK_INT32; break; case GAL_TYPE_UINT64: ul[i]=strtoul(token, &tailptr, 10); if( (ulb=info->array) && *ulb==ul[i] ) ul[i]=GAL_BLANK_UINT64; break; case GAL_TYPE_INT64: l[i]=strtol(token, &tailptr, 10); if( (lb=info->array) && *lb==l[i] ) l[i]=GAL_BLANK_INT64; break; /* For the blank value of floating point types, we need to make sure it isn't a NaN, because a NaN value will fail on any condition check (even '=='). If it isn't NaN, then we can compare the values. */ case GAL_TYPE_FLOAT32: f[i]=strtod(token, &tailptr); if( (*tailptr=='h' || *tailptr=='d') && isdigit(*(tailptr+1)) ) { f[i] = ( *tailptr=='h' ? gal_units_ra_to_degree(token) : gal_units_dec_to_degree(token) ); if( !isnan(f[i]) ) tailptr=emptystr; } if( (fb=info->array) && ( (isnan(*fb) && isnan(f[i])) || *fb==f[i] ) ) f[i]=GAL_BLANK_FLOAT32; break; /* In astronomical datasets, it can happen that a column is in the format of __h__m__s or __d__m__s (where every '_' is a digit), in these cases, they are actually coordinates (RA for first, Dec for second). */ case GAL_TYPE_FLOAT64: d[i]=strtod(token, &tailptr); if( (*tailptr=='h' || *tailptr=='d') && isdigit(*(tailptr+1)) ) { d[i] = ( *tailptr=='h' ? gal_units_ra_to_degree(token) : gal_units_dec_to_degree(token) ); if( !isnan(d[i]) ) tailptr=emptystr; } if( (db=info->array) && ( (isnan(*db) && isnan(d[i])) || *db==d[i] ) ) d[i]=GAL_BLANK_FLOAT64; break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, data->type); } /* If a number couldn't be read properly, then report an error. */ if(data->type!=GAL_TYPE_STRING && *tailptr!='\0') { if( tailptr!=token && isdigit(*(tailptr-1)) && *tailptr==':' && isdigit(*(tailptr+1)) ) error_at_line(EXIT_FAILURE, 0, filename, lineno, "token %zu " "('%s') couldn't be read as a '%s' number.\n\n" "If it was meant to be celestial coordinates " "(RA or Dec), please use the '_h_m_' format " "for RA or '_d_m_' for Dec. The '_:_:_' format " "is ambiguous (can be used for both RA and " "Dec). Alternatively, you can use the column " "arithmetic operators 'ra-to-degree' or " "'dec-to-degree' of 'asttable' which also " "accept the '_:_:_' format. However, the " "'ra-to-degree' or 'dec-to-degree' operators " "require the column to be identified as a " "string with metadata. Please run the command " "below to learn more about column metadata and " "columns with string contents (it is easier to " "just use the '_h_m_' or '_d_m_' formats which " "will be automatically converted to degrees " "without any operators or metadata):\n\n" " $ info gnuastro \"Gnuastro text table\"", toknum, token, gal_type_name(data->type, 1) ); else error_at_line(EXIT_FAILURE, 0, filename, lineno, "column %zu " "('%s') couldn't be read as a '%s' number", toknum, token, gal_type_name(data->type, 1) ); } } } static void txt_fill(char *in_line, gal_data_t **tokeninout, size_t ntokforout, gal_data_t **tokenininfo, size_t *tokenvecind, size_t rowind, char *filename, size_t lineno, int inplace, int format) { gal_data_t *otmp; int notenoughcols=0; size_t len, n=0, ind, strwidth; char *end, *line, *aline, *tmpstr; /* Make a copy of the input line if necessary. */ if(inplace) line=in_line; else gal_checkset_allocate_copy(in_line, &line); end=line+strlen(line); aline=line; /* The 'line' pointer will be shifted. */ /* Remove the new-line character from the line. For more, see the top the explanations in 'txt_info_from_first_row': 13 is the ASCII code for the carriage return. */ if( end>line+2 && *(end-2)==13 ) *(end-2)='\0'; else if( *(end-1)=='\n' ) *(end-1)='\0'; /* Start parsing the line, token by token. Break out of the parsing if we don't need the columns any more. The table might contain many more columns, but when they aren't needed, there is no point in tokenizing them. Note that 'ntokforout' is the number of the last input token that is used in the output, so it is inclusive. */ while(n<=ntokforout) { /* Set the pointer to the start of this token/column. See explanations in 'txt_info_from_first_row'. Note that an image has a single 'info' element for the whole array, while a table has one for each column. */ if( format==TXT_FORMAT_TABLE && tokenininfo[n]->type == GAL_TYPE_STRING ) { /* Remove any delimiters and stop at the first non-delimiter. If we have reached the end of the line then its an error, because we were expecting a column here (recall that empty lines are skipped before reaching this point). */ while(isspace(*line) || *line==',') ++line; if(*line=='\0') {notenoughcols=1; break;} /* We are at the start of the string. Allocate space for, and copy the necessary number of characters into the 'tmpstr' string. We need to allocate this because the string column may be immediately (next character) followed by the next column. This leaves us no space to copy the '\0' character. Therefore we will add '\0' after 'strncpy'. Also, it may happen (for example with plain-text editors that remove trailing white space) that the width defined for the last column becomes larger than the actual length of the line. We should therefore first check how many characters we should actually copy (may be less than 'disp_width'). See https://savannah.gnu.org/bugs/index.php?62720 If this token should be used, then its 'tokeninout' will be non-NULL. */ strwidth=tokenininfo[n]->disp_width; if(tokeninout[n]) { /* Copy the full string column into a "standard" string (which terminates with a '\0'). */ len = (line+strwidth)<end ? strwidth : end-line; tmpstr=gal_pointer_allocate(GAL_TYPE_UINT8, len+1, 0, __func__, "tmpstr"); strncpy(tmpstr, line, len); tmpstr[len]='\0'; /* Write it into all the output columns that need it (recall that if more than one output column needs a token, it is placed in the 'block' elements, 'next' is already assocated to the next column's pointer). */ for(otmp=tokeninout[n]; otmp!=NULL; otmp=otmp->block) txt_read_token(otmp, tokenininfo[n], tmpstr, rowind, filename, lineno, n); /* For a check. printf("%s: Wrote '%s' into memory\n", __func__, tmpstr); */ /* Clean up. */ free(tmpstr); } /* Increment the line pointer to the end of this string. */ line += strwidth; } else { /* If we have reached the end of the line, then 'strtok_r' will return a NULL pointer. */ tmpstr=strtok_r(n==0?line:NULL, GAL_TXT_DELIMITERS, &line); if(tmpstr==NULL) {notenoughcols=1; break;} /* Convert and write the string to the desired output. */ if(format==TXT_FORMAT_TABLE) { ind = rowind * tokenininfo[n]->minmapsize + tokenvecind[n]; for(otmp=tokeninout[n]; otmp!=NULL; otmp=otmp->block) txt_read_token(otmp, tokenininfo[n], tmpstr, ind, filename, lineno, n); } else /* An image */ txt_read_token(tokeninout[0], tokenininfo[0], tmpstr, rowind*tokeninout[0]->dsize[1]+n, filename, lineno, n); /* For a check. printf("%s: Wrote '%s' into memory\n", __func__, tmpstr); */ } /* Increment the token counter. */ ++n; } /* Report an error if there weren't enough columns. */ if(notenoughcols) error_at_line(EXIT_FAILURE, 0, filename, lineno, "not enough columns " "in this line"); /* Clean up. */ if(aline!=in_line) free(aline); } /* Allocate the datasets to help parse each token. */ static void txt_read_prepare_alloc(gal_data_t ***tokeninout_out, gal_data_t ***tokenininfo_out, size_t **tokenvecind_out, size_t number) { size_t *tokenvecind; gal_data_t **tokeninout, **tokenininfo; errno=0; *tokeninout_out=tokeninout=calloc(number, sizeof *tokeninout); if(tokeninout==NULL) error(EXIT_FAILURE, errno, "%s: couldn't allocate %zu bytes for " "'tokeninout'", __func__, number * sizeof *tokeninout); errno=0; *tokenininfo_out=tokenininfo=calloc(number, sizeof *tokenininfo); if(tokenininfo==NULL) error(EXIT_FAILURE, errno, "%s: couldn't allocate %zu bytes for " "'tokenininfo'", __func__, number * sizeof *tokenininfo); if(tokenvecind_out) { errno=0; *tokenvecind_out=tokenvecind=calloc(number, sizeof *tokenvecind); if(tokenvecind==NULL) error(EXIT_FAILURE, errno, "%s: couldn't allocate %zu bytes for " "'tokenvecind'", __func__, number * sizeof *tokenvecind); } } static gal_data_t * txt_read_prepare_table(gal_data_t *info, size_t *indsize, gal_list_sizet_t *indexll, size_t minmapsize, int quietmmap, gal_data_t ***tokeninout_out, size_t *ntokforout, gal_data_t ***tokenininfo_out, size_t **tokenvecind_out) { size_t *tokenvecind; gal_list_sizet_t *ind; size_t i, r, ndim, colc, tokc, repeat, ntokens=0, colendtok; size_t dsize[2]={indsize[0]?indsize[0]:1,GAL_BLANK_SIZE_T}; gal_data_t *tmp, *idata, **tokeninout, **tokenininfo, *out=NULL; /* Find how many tokens (columns, but before accounting for vectors) there are in the input. Then allocate an array of 'gal_data_t *' so we can keep track of which pre-vector-column should be put into which output dataset. */ for(tmp=info; tmp!=NULL; tmp=tmp->next) ntokens+=tmp->minmapsize; txt_read_prepare_alloc(tokeninout_out, tokenininfo_out, tokenvecind_out, ntokens); tokenininfo=*tokenininfo_out; tokenvecind=*tokenvecind_out; tokeninout=*tokeninout_out; /* Go over the requested columns from their index. */ for(ind=indexll; ind!=NULL; ind=ind->next) { /* To help in reading. */ idata=&info[ind->v]; /* Allocate the necessary space. If there are no rows, we are setting a 1-element array to avoid any allocation errors (minmapsize, which holds the "repeat", will be 1 for non-vector column). Then we are freeing the allocated spaces and correcting the sizes. */ ndim = (repeat=dsize[1]=idata->minmapsize)==1 ? 1 : 2; gal_list_data_add_alloc(&out, NULL, idata->type, ndim, dsize, NULL, 0, minmapsize, quietmmap, idata->name, idata->unit, idata->comment); out->disp_width=idata->disp_width; /* If there were no actual rows ('numrows'==0), free the allocated spaces and correct the size. */ if(indsize[0]==0) { out->size=0; free(out->array); free(out->dsize); out->dsize=out->array=NULL; } /* Find the input token (of each line) that each input column starts at. This needs special attention because vector columns can have multiple tokens in one column. */ colc=tokc=0; for(tmp=info; colc<ind->v; tmp=tmp->next) { tokc+=tmp->minmapsize; ++colc; } /* For a check: printf("%s: input col %zu starts at token %-2zu and is %zu token(s) " "wide [counts from 1]\n", __func__, ind->v+1, tokc+1, repeat); */ /* Set the pointer of this output dataset in the 'tokeninout' array. If this token should be used in multiple output columns, then add them to the 'block' pointer (which is not relevant here, while 'next' is used to link the various columns). Note that all elements of 'tokeninout' have been initialized to NULL with the 'calloc' function above, so we can safely use it as a list. */ for(i=0;i<repeat;++i) tokeninout[tokc+i]=txt_blocklist_add(tokeninout[tokc+i], out); } /* Reverse the list to be in the same order as the output. */ gal_list_data_reverse(&out); /* Find the last input token that is useful for the output (to avoid unnecessarily tokenizing and parsing the rest each line). If this column shouldn't be read, then just put a pointer to its 'info' structure, so we still know its metadata (to skip in the case of strings or vectors). */ colc=r=0; colendtok=info[colc].minmapsize; for(tokc=0;tokc<ntokens;++tokc) { /* If we have reached the last token of this column, then increment the column counter and its last token. */ if(tokc>=colendtok) {r=0; ++colc; colendtok+=info[colc].minmapsize;} /* For a check: printf("Token %-3zu belongs to column %zu\n", tokc+1, colc+1); */ /* If this token should be read, everything has already been allocated above, so just keep its counter to find the last necessary token. */ if(tokeninout[tokc]) {*ntokforout=tokc; tokenvecind[tokc]=r;} else tokenvecind[tokc]=GAL_BLANK_SIZE_T; /* Set the pointer to the information list (necessary for all columns, whether they are to be used or not). */ tokenininfo[tokc]=&info[colc]; /* Increment the repeat counter. */ ++r; } /* For a check (also un-comment the 'txt_blocklist_number' function). printf("Input token --> number of output columns it is written to " "[counts from 1]\n"); for(i=0;i<ntokens;++i) printf("%-12zu --> %-5zu (vector: %zu)\n", i+1, txt_blocklist_number(tokeninout[i]), tokenvecind[i]); printf("Last usable token ('ntokforout'): %zu\n", *ntokforout+1); */ return out; } static gal_data_t * txt_read_prepare_img(gal_data_t *info, size_t *indsize, size_t minmapsize, int quietmmap, gal_data_t ***tokeninout_out, size_t *ntokforout, gal_data_t ***tokenininfo_out) { gal_data_t *out; /* Make sure that the input isn't a list. */ if(info->next) error(EXIT_FAILURE, 0, "%s: currently reading only one image (2d " "array) from a text file is possible, the 'info' input has " "more than one element", __func__); /* Allocate the output. */ out=gal_data_alloc(NULL, info->type, 2, indsize, NULL, 0, minmapsize, quietmmap, info->name, info->unit, info->comment); /* Allocate the token reading pointers, set them and return. */ txt_read_prepare_alloc(tokeninout_out, tokenininfo_out, NULL, 1); *ntokforout=out->dsize[1]-1; /* Token counting begins from 0. */ (*tokenininfo_out)[0]=info; (*tokeninout_out)[0]=out; return out; } static gal_data_t * txt_read_prepare(gal_data_t *info, size_t *indsize, gal_list_sizet_t *indexll, size_t minmapsize, int quietmmap, int format, char **line, size_t linelen, gal_data_t ***tokeninout, size_t *ntokforout, gal_data_t ***tokenininfo, size_t **tokenvecind) { gal_data_t *out; /* Allocate the output. */ switch(format) { case TXT_FORMAT_TABLE: out=txt_read_prepare_table(info, indsize, indexll, minmapsize, quietmmap, tokeninout, ntokforout, tokenininfo, tokenvecind); break; case TXT_FORMAT_IMAGE: *tokenvecind=NULL; /* Not necessary in an image. */ out=txt_read_prepare_img(info, indsize, minmapsize, quietmmap, tokeninout, ntokforout, tokenininfo); break; default: /* Format not recognized. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to " "fix the problem. The format code %d is not recognized", __func__, PACKAGE_BUGREPORT, format); } /* Allocate the space necessary to keep a copy of each line as we parse it. Note that 'getline' is going to later 'realloc' this space to fit the line length. */ errno=0; *line=malloc(linelen*sizeof *line); if(*line==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for 'line'", __func__, linelen*sizeof **line); /* Return the output dataset. */ return out; } static gal_data_t * txt_read(char *filename, gal_list_str_t *lines, size_t *indsize, gal_data_t *info, gal_list_sizet_t *indexll, size_t minmapsize, int quietmmap, int format) { FILE *fp; int test; char *line; gal_list_str_t *tmp; size_t ntokforout=0, rowind=0, lineno=0, *tokenvecind; gal_data_t *out=NULL, *ocol, **tokeninout, **tokenininfo; size_t linelen=10; /* 'linelen' will be increased by 'getline'. */ /* 'filename' and 'lines' cannot both be non-NULL. */ test = (filename!=NULL) + (lines!=NULL); if( test!=1 ) error(EXIT_FAILURE, 0, "%s: one of the 'filename' and 'lines' " "arguments must be NULL, but they are both %s", __func__, test==2 ? "non-NULL" : "NULL"); /* Necessary preparations/allocations. */ out=txt_read_prepare(info, indsize, indexll, minmapsize, quietmmap, format, &line, linelen, &tokeninout, &ntokforout, &tokenininfo, &tokenvecind); /* Read the input line by line. */ if(filename) /* Input from a file. */ { /* Open the file. */ errno=0; fp=fopen(filename, "r"); if(fp==NULL) error(EXIT_FAILURE, errno, "%s: couldn't open to read as a text " "table in %s", filename, __func__); /* Read the file, line by line. */ while( getline(&line, &linelen, fp) != -1 ) { ++lineno; if( gal_txt_line_stat(line) == GAL_TXT_LINESTAT_DATAROW ) txt_fill(line, tokeninout, ntokforout, tokenininfo, tokenvecind, rowind++, filename, lineno, 1, format); } /* Clean up and close the file. */ errno=0; if(fclose(fp)) error(EXIT_FAILURE, errno, "%s: couldn't close file after reading " "ASCII table information in %s", filename, __func__); } else /* Input from standard input. */ for(tmp=lines; tmp!=NULL; tmp=tmp->next) { /* To read for standard output, we are setting 'inplace' to zero because there may only be a single copy of the input. */ ++lineno; if( gal_txt_line_stat(tmp->v) == GAL_TXT_LINESTAT_DATAROW ) txt_fill(tmp->v, tokeninout, ntokforout, tokenininfo, tokenvecind, rowind++, filename, lineno, 0, format); } /* The 'block' pointer of the output datasets has been been used above if an input column was used more than once in the output. It is no longer necessary and being non-NULL can cause problems for the users of the columns (because it has a special meaning in Gnuastro, outside of tables, see 'lib/data.h'), so we should set them all to NULL. */ for(ocol=out;ocol!=NULL;ocol=ocol->next) ocol->block=NULL; /* Clean up the allocations of 'txt_read_prepare' and return. */ if(format==TXT_FORMAT_TABLE) free(tokeninout); free(tokenininfo); free(tokenvecind); free(line); return out; } gal_data_t * gal_txt_table_read(char *filename, gal_list_str_t *lines, size_t numrows, gal_data_t *colinfo, gal_list_sizet_t *indexll, size_t minmapsize, int quietmmap) { return txt_read(filename, lines, &numrows, colinfo, indexll, minmapsize, quietmmap, TXT_FORMAT_TABLE); } gal_data_t * gal_txt_image_read(char *filename, gal_list_str_t *lines, size_t minmapsize, int quietmmap) { size_t numimg, dsize[2]; gal_data_t *img, *imginfo; gal_list_sizet_t *indexll=NULL; /* Get the image information. */ imginfo=gal_txt_image_info(filename, lines, &numimg, dsize); /* Read the table. */ img=txt_read(filename, lines, dsize, imginfo, indexll, minmapsize, quietmmap, TXT_FORMAT_IMAGE); /* Clean up and return. */ gal_data_free(imginfo); return img; } /* See if there is anything in the standard input already. This function is modeled on the solution provided in: https://stackoverflow.com/questions/3711830/set-a-timeout-for-reading-stdin */ static int txt_stdin_has_contents(long timeout_microsec) { int sout; fd_set fds; struct timeval tv; /* Set the timeout time. We need to put the number of seconds in 'tv_sec' and the remaining microseconds in 'tv_usec' (this cannot be larger than one million, otherwise 'select' is going to abort with an error). */ tv.tv_sec = timeout_microsec/1000000; tv.tv_usec = timeout_microsec%1000000; /* Initialize 'fd_set'. */ FD_ZERO(&fds); /* Set standard input (STDIN_FILENO is 0) as the FD that must be read. */ FD_SET(STDIN_FILENO, &fds); /* From Glibc: "The 'select' function blocks the calling process until there is activity on any of the specified sets of file descriptors, or until the timeout period has expired". 'select' takes the last file descriptor value+1 in the 'FD_SET' above as first argument. If the second (reading), third (writing) and fourth (exception) are not NULL, then it will check for the respective property(s). When successful (file descriptor has input for the desired action), 'select' will return 1. When the timeout has been reached, it will return 0 and when there was an error it will return -1. If there is an error, we'll abort the program and ask the user to contact us (its a bug). */ errno=0; sout=select(STDIN_FILENO+1, &fds, NULL, NULL, &tv); if(sout==-1) error(EXIT_FAILURE, errno, "%s: a bug! Please contact us at '%s' " "to fix the problem. The 'select' function has detected an " "error", __func__, PACKAGE_BUGREPORT); /* By this point, 'sout' only has a value of 1 (stdin is ready for reading) or 0 (timeout was reached with no change, so it should't be used). So simply return the value of 'sout'. */ return sout; } /* Read each line of the standard input into a linked list of strings. */ gal_list_str_t * gal_txt_stdin_read(long timeout_microsec) { char *line; gal_list_str_t *out=NULL; size_t lineno=0, linelen=10;/* 'getline' will increase 'linelen'. */ /* Only continue if standard input has any contents. */ if( txt_stdin_has_contents(timeout_microsec) ) { /* Allocate the space necessary to keep a copy of each line as we parse it. Note that 'getline' is going to later 'realloc' this space to fit the line length. */ errno=0; line=malloc(linelen*sizeof *line); if(line==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for 'line'", __func__, linelen*sizeof *line); /* Read the whole standard input. We are using getline because it can deal with a 'NULL' in the input, while also handing allocation issues while reading (allocating by line, not by a fixed buffer size). */ while( getline(&line, &linelen, stdin) != -1 ) { /* To help in reporting (when necessary), keep a count of how many lines we have. */ ++lineno; /* Add the line to the output list. */ gal_list_str_add(&out, line, 1); } /* Reverse the list (to be the same order as input). */ gal_list_str_reverse(&out); /* Clean up. */ free(line); } /* Return the result. */ return out; } gal_list_str_t * gal_txt_read_to_list(char *filename) { FILE *fp; gal_list_str_t *out=NULL; char *line, *format_err="empty"; size_t linelen=10; /* 'linelen' will be increased by 'getline'. */ /* Make sure an input filename is given. */ if(filename==NULL) return NULL; /* Open the file. */ errno=0; fp=fopen(filename, "r"); if(fp==NULL) error(EXIT_FAILURE, errno, "%s: couldn't open to read as a plain " "text %s (from Gnuastro's '%s')", filename, format_err, __func__); /* Allocate the space necessary to keep each line as we parse it. Note that 'getline' is going to later 'realloc' this space to fit the line length. */ errno=0; line=malloc(linelen*sizeof *line); if(line==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for line", __func__, linelen*sizeof *line); /* Read the comments of the line for possible information about the lines, but also confirm/complete the info by parsing the first uncommented line. */ while( getline(&line, &linelen, fp) != -1 ) { if(out==NULL) out=gal_list_str_extract(line); else gal_list_str_last(out)->next=gal_list_str_extract(line); } /* Return the output. */ return out; } /************************************************************************/ /*************** Write to txt ***************/ /************************************************************************/ static void txt_fmts_for_printf_norm(gal_data_t *data, char *fmta, char *lng, char *fmt, int leftadjust) { /* Strings should be treated as if they don't have negative. */ int hasneg = ( data->type==GAL_TYPE_STRING ? 0 : gal_statistics_has_negative(data) ); /* The space in the end of 'fmts[i*FMTS_COLS]' is to ensure that the columns don't merge, even if the printed string is larger than the expected width. */ if(data->disp_precision == GAL_BLANK_INT) sprintf(fmta, hasneg ? "%% %s%d%s%s " : "%%%s%d%s%s ", leftadjust ? "-" : "", data->disp_width, lng, fmt); else sprintf(fmta, hasneg ? "%% %s%d.%d%s%s " : "%%%s%d.%d%s%s ", leftadjust ? "-" : "", data->disp_width, data->disp_precision, lng, fmt); } static void txt_fmts_for_printf_last(gal_data_t *data, char *fmta, char *lng, char *fmt) { /* Strings should be treated as if they don't have negative. */ int hasneg = ( data->type==GAL_TYPE_STRING ? 0 : gal_statistics_has_negative(data) ); /* See 'txt_fmts_for_printf_norm'. */ if(data->disp_precision == GAL_BLANK_INT) sprintf(fmta, hasneg ? "%% %s%s" : "%%%s%s", lng, fmt); else sprintf(fmta, hasneg ? "%% .%d%s%s" : "%%.%d%s%s", data->disp_precision, lng, fmt); } /* Make an array of 3 strings for each column (in practice a two dimensional array with 3 columns in a row for each input column). The columns are: Column 0: Printf format string. Column 1: Gnuastro type string (in plain text format). Column 2: Blank value string. Column 3: Format for last vector column. */ #define FMTS_COLS 4 static char ** txt_fmts_for_printf(gal_data_t *datall, int leftadjust, int tab0_img1) { char **fmts; gal_data_t *data; size_t i=0, num=0; char fmt[2], lng[3]; /* Allocate space for the output. */ for(data=datall;data!=NULL;data=data->next) ++num; errno=0; fmts=malloc(FMTS_COLS*num*sizeof *fmts); if(fmts==NULL) error(EXIT_FAILURE, errno, "%s: %zu bytes for fmts", __func__, FMTS_COLS*num*sizeof *fmts); /* Go over all the columns and make their formats. */ for(data=datall;data!=NULL;data=data->next) { /* First allocate the necessary space to keep the string. */ errno=0; fmts[ i*FMTS_COLS ] = malloc(GAL_TXT_MAX_FMT_LENGTH*sizeof **fmts); fmts[ i*FMTS_COLS+1 ] = malloc(GAL_TXT_MAX_FMT_LENGTH*sizeof **fmts); fmts[ i*FMTS_COLS+3 ] = malloc(GAL_TXT_MAX_FMT_LENGTH*sizeof **fmts); if( fmts[i*FMTS_COLS]==NULL || fmts[i*FMTS_COLS+1]==NULL || fmts[i*FMTS_COLS+3]==NULL ) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for " "fmts[%zu] or fmts[%zu]", __func__, GAL_TXT_MAX_FMT_LENGTH*sizeof **fmts, i*FMTS_COLS, i*FMTS_COLS+1); /* If we have a blank value, get the blank value as a string and adjust the width. */ fmts[ i*FMTS_COLS+2 ] = ( gal_blank_present(data, 0) ? gal_blank_as_string(data->type, 0) : NULL ); /* Fill in the printing paramters. */ gal_tableintern_col_print_info(data, GAL_TABLE_FORMAT_TXT, fmt, lng); /* Adjust the width if a blank string was defined. */ if(fmts[i*FMTS_COLS+2]) data->disp_width = ( strlen(fmts[i*FMTS_COLS+2]) > data->disp_width ? strlen(fmts[i*FMTS_COLS+2]) : data->disp_width ); /* Set the string for the Gnuastro type. For strings, we also need to write the maximum number of characters. */ if(data->type==GAL_TYPE_STRING) sprintf(fmts[i*FMTS_COLS+1], "%s%d", gal_type_name(data->type, 0), data->disp_width); else strcpy(fmts[i*FMTS_COLS+1], gal_type_name(data->type, 0)); /* Print the result into the allocated string. */ if(data->next) /* Not last column. */ txt_fmts_for_printf_norm(data, fmts[i*FMTS_COLS], lng, fmt, leftadjust); else /* Last column. */ { /* For vector columns in a table that are also the last column, we need both the normal format and the last column format.*/ if(data->ndim==2) { txt_fmts_for_printf_norm(data, fmts[i*FMTS_COLS], lng, fmt, leftadjust); txt_fmts_for_printf_last(data, fmts[i*FMTS_COLS+3], lng, fmt); } else /* Last column is not a vector. */ { txt_fmts_for_printf_last(data, fmts[i*FMTS_COLS], lng, fmt); fmts[i*FMTS_COLS+3][0]='\0'; } } /* Increment the column counter. */ ++i; } /* Return the array. */ return fmts; } static void txt_print_value(FILE *fp, gal_data_t *data, size_t ind, char *fmt) { void *a=data->array; switch(data->type) { /* Numerical types. */ case GAL_TYPE_UINT8: fprintf(fp, fmt, ((uint8_t *) a)[ind]); break; case GAL_TYPE_INT8: fprintf(fp, fmt, ((int8_t *) a)[ind]); break; case GAL_TYPE_UINT16: fprintf(fp, fmt, ((uint16_t *)a)[ind]); break; case GAL_TYPE_INT16: fprintf(fp, fmt, ((int16_t *) a)[ind]); break; case GAL_TYPE_UINT32: fprintf(fp, fmt, ((uint32_t *)a)[ind]); break; case GAL_TYPE_INT32: fprintf(fp, fmt, ((int32_t *) a)[ind]); break; case GAL_TYPE_UINT64: fprintf(fp, fmt, ((uint64_t *)a)[ind]); break; case GAL_TYPE_INT64: fprintf(fp, fmt, ((int64_t *) a)[ind]); break; case GAL_TYPE_FLOAT32: fprintf(fp, fmt, ((float *) a)[ind]); break; case GAL_TYPE_FLOAT64: fprintf(fp, fmt, ((double *) a)[ind]); break; /* Special consideration for strings. */ case GAL_TYPE_STRING: if( !strcmp( ((char **)a)[ind], GAL_BLANK_STRING ) ) fprintf(fp, fmt, GAL_BLANK_STRING); else fprintf(fp, fmt, ((char **)a)[ind]); break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, data->type); } } static void txt_write_metadata(FILE *fp, gal_data_t *datall, char **fmts, int tab0_img1) { gal_data_t *data; size_t i, j, num=0; char *tmp, *nstr, *tstr; int nlen, twt, nw=0, uw=0, tw=0, bw=0; /* Get the maximum width for each information field. */ for(data=datall;data!=NULL;data=data->next) { ++num; if( data->name && strlen(data->name)>nw ) nw=strlen(data->name); if( data->unit && strlen(data->unit)>uw ) uw=strlen(data->unit); } data=datall; for(i=0;i<num;++i) { /* Width of blank element. */ if( (tmp=fmts[ i*FMTS_COLS+2 ]) ) /* If it isn't NULL. */ bw = strlen(tmp) > bw ? strlen(tmp) : bw; /* Width of type element. */ if( (tmp=fmts[ i*FMTS_COLS+1 ]) ) /* If it isn't NULL. */ { twt=strlen(tmp); /* A 2D col with second dim of 1 is just a normal 1D col. */ if(tab0_img1==0 && data->ndim==2 && data->dsize[1]>1) twt+=(int)(log10(data->dsize[1]))+1+2; /* +1 for 0 to 10. */ tw = twt > tw ? twt : tw; /* +2 for the '()'.*/ } /* Go onto the next data element. */ data=data->next; } /* When there are more than 9 columns, we don't want to have cases like '# Column 1 :' (note the space between '1' and ':', this space won't exist for the 2 digit colum numbers). To do this, we are first allocating and printing a string long enough to keep the final column's 'N:'. Then, for each column, we print only the number into the allocated space and put the ':' in manually immediately after the number. Note that the initial 'asprintf' put a '\0' in the allocated space, so we can safely over-write the one that 'sprintf' puts with a ':' for the columns that have the same number of digits as the final column. */ i=0; if( asprintf(&nstr, "%zu:", num)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); nlen=strlen(nstr); for(data=datall; data!=NULL; data=data->next) { /* Print the number into the number string, then add the ':' immediately after the number. */ sprintf(nstr, "%zu", i+1); for(j=1;j<nlen;++j) if(!isdigit(nstr[j])) nstr[j] = isdigit(nstr[j-1]) ? ':' : ' '; /* For the type, we need to account for vector clumns. Note that a 2D col with second dim of 1 is just a normal 1D col. */ if(tab0_img1==0 && data->ndim==2 && data->dsize[1]>1) { if( asprintf(&tstr, "%s(%zu)", fmts[i*FMTS_COLS+1], data->dsize[1])<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&tstr, "%s", fmts[i*FMTS_COLS+1])<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } /* Now print the full information. */ fprintf(fp, "# %s %s %-*s [%-*s,%-*s,%-*s] %s\n", tab0_img1 ? "Image" : "Column", nstr, nw, data->name ? data->name : "", uw, data->unit ? data->unit : "", tw, fmts[i*FMTS_COLS+1] ? tstr : "", bw, fmts[i*FMTS_COLS+2] ? fmts[i*FMTS_COLS+2] : "", data->comment ? data->comment : ""); free(tstr); ++i; } /* Clean up and return. */ free(nstr); } static void txt_write_keys(FILE *fp, struct gal_fits_list_key_t *keylist, int freekeys) { char *ending; char *valuestr; gal_fits_list_key_t *tmp, *ttmp; tmp=keylist; while(tmp!=NULL) { /* If a title is requested, only put a title. */ if(tmp->title) { fprintf(fp, "# -------------\n# %s\n# -------------\n", tmp->title); if(tmp->tfree) free(tmp->title); } else if (tmp->fullcomment) { fprintf(fp, "# %s\n", tmp->fullcomment); if(tmp->fcfree) free(tmp->fullcomment); } else { /* For a string type, we need to return a pointer to the string. */ valuestr = ( tmp->type==GAL_TYPE_STRING ? tmp->value : gal_type_to_string(tmp->value, tmp->type, 1) ); /* If a comment is requested, parepare it. */ ending=NULL; if(tmp->unit) { if( asprintf(&ending, " / [%s] %s", tmp->unit, tmp->comment?tmp->comment:"")==-1 ) error(EXIT_FAILURE, errno, "%s: asprintf error for name", __func__); } else if(tmp->comment) { if( asprintf(&ending, " / %s", tmp->comment)==-1 ) error(EXIT_FAILURE, errno, "%s: asprintf error for name", __func__); } /* Write the keyword value. */ fprintf(fp, "# [key] %s: %s%s\n", tmp->keyname, valuestr, ending?ending:""); /* Clean up. */ if(ending) free(ending); if(tmp->kfree) free(tmp->keyname); if(tmp->vfree) free(tmp->value); if(tmp->cfree) free(tmp->comment); if(tmp->ufree) free(tmp->unit); } /* Keep the pointer to the next keyword and free the allocated space for this keyword. */ ttmp=tmp->next; free(tmp); tmp=ttmp; } } void gal_txt_write(gal_data_t *input, struct gal_fits_list_key_t *keylist, gal_list_str_t *comment, char *filename, uint8_t colinfoinstdout, int tab0_img1, int freekeys) { FILE *fp; char **fmts; gal_list_str_t *strt; size_t i, j, k, num=0, d1; gal_data_t *data, *nextimg=NULL; /* Make sure input is valid. */ if(input==NULL) error(EXIT_FAILURE, 0, "%s: input is NULL", __func__); /* Currently only 1 and 2 dimension datasets are acceptable. */ if( input->ndim!=1 && input->ndim!=2 ) error(EXIT_FAILURE, 0, "%s: only 1 and 2 dimensional datasets are " "currently supported. The input dataset has %zu dimensions", __func__, input->ndim); /* For an image, we currently don't accept a list, we can only print one column. So keep the next pointer separately and restore it after the job of this function is finished. */ if(tab0_img1) { nextimg=input->next; input->next=NULL; } /* Find the number of columns, do a small sanity check, and get the maximum width of the name and unit string if they are present. */ for(data=input;data!=NULL;data=data->next) { /* Count. */ ++num; /* Check if the dimensionality and size is the same for all the elements. The 'input->dsize && data->dsize' conditions are because we may have fully empty tables (where 'dsize==NULL'). In this case, we want to continue with printing, and there is no problem. */ if( input!=data && input->dsize && data->dsize && input->dsize[0]!=data->dsize[0] ) error(EXIT_FAILURE, 0, "%s: the input list of datasets must " "have the same sizes (dimensions and length along each " "dimension)", __func__); } /* Prepare the necessary formats for each column, then allocate the space for the full list and concatenate all the separate inputs into it. */ fmts=txt_fmts_for_printf(input, 1, tab0_img1); /* Set the output FILE pointer: if it isn't NULL, its an actual file, otherwise, its the standard output. */ if(filename) { /* Make sure the file doesn't already exist. */ if( gal_checkset_check_file_return(filename) ) error(EXIT_FAILURE, 0, "%s: %s already exists. For safety, " "this function will not over-write an existing file. " "Please delete it before calling this function", __func__, filename); /* Open the output file. */ errno=0; fp=fopen(filename, "w"); if(fp==NULL) error(EXIT_FAILURE, errno, "%s: couldn't be open to write text " "table by %s", filename, __func__); /* Write the comments if there were any. */ for(strt=comment; strt!=NULL; strt=strt->next) fprintf(fp, "# %s\n", strt->v); /* Write the keywords. */ if(keylist) txt_write_keys(fp, keylist, freekeys); } else fp=stdout; /* Write the meta-data if necessary. */ if(filename ? 1 : colinfoinstdout) txt_write_metadata(fp, input, fmts, tab0_img1); /* Print row-by-row (if we actually have data to print!). */ if(input->array) { if(tab0_img1) /* Image. */ for(i=0;i<input->dsize[0];++i) { d1=input->dsize[1]; for(j=0;j<d1;++j) txt_print_value(fp, input, i*d1+j, fmts[j==d1-1 ? 3 : 0]); fprintf(fp, "\n"); } else /* Table. */ { for(i=0;i<input->dsize[0];++i) /* Row. */ { k=0; /* Column counter. */ for(data=input;data!=NULL;data=data->next) /* Column. */ { if(data->ndim>1) /* Vector column. */ { d1=data->dsize[1]; for(j=0;j<d1;++j) txt_print_value(fp, data, i*d1+j, fmts[ k * FMTS_COLS /* Last of vector column has a different format. */ + (j==d1-1 && data->next==NULL ? 3 : 0) ]); } else /* Non-vector column: simple! */ txt_print_value(fp, data, i, fmts[k * FMTS_COLS]); ++k; } fprintf(fp, "\n"); } } } /* Clean up. */ for(i=0;i<num;++i) { free(fmts[i*FMTS_COLS]); free(fmts[i*FMTS_COLS+1]); free(fmts[i*FMTS_COLS+2]); free(fmts[i*FMTS_COLS+3]); } free(fmts); /* Close the output file. */ if(filename) { errno=0; if(fclose(fp)) error(EXIT_FAILURE, errno, "%s: couldn't close file after " "writing of text table in %s", filename, __func__); } /* Restore the next pointer for an image. */ if(nextimg) input->next=nextimg; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/type.c����������������������������������������������������������������������������0000644�0001750�0001750�00000057567�14551566633�010715� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Type -- Type information and basic operations. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2016-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <float.h> #include <ctype.h> #include <stdlib.h> #include <string.h> #include <inttypes.h> #include <gnuastro/type.h> #include <gnuastro/data.h> #include <gnuastro/list.h> #include <gnuastro/pointer.h> #include <gnuastro-internal/checkset.h> /************************************************************* ************** General info *************** *************************************************************/ size_t gal_type_sizeof(uint8_t type) { /* Allocate space for the array to keep the image. */ switch(type) { case GAL_TYPE_BIT: error(EXIT_FAILURE, 0, "%s: bit types are not currently supported, " "please get in touch with us to implement it", __func__); /* The parenthesis after sizeof is not a function, it is actually a type cast, so we have put a space between size of and the parenthesis to highlight this. In C, 'sizeof' is an operator, not a function. */ case GAL_TYPE_UINT8: return sizeof (uint8_t); case GAL_TYPE_INT8: return sizeof (int8_t); case GAL_TYPE_UINT16: return sizeof (uint16_t); case GAL_TYPE_INT16: return sizeof (int16_t); case GAL_TYPE_UINT32: return sizeof (uint32_t); case GAL_TYPE_INT32: return sizeof (int32_t); case GAL_TYPE_UINT64: return sizeof (uint64_t); case GAL_TYPE_INT64: return sizeof (int64_t); case GAL_TYPE_FLOAT32: if( sizeof (float) != 4 ) error(EXIT_FAILURE, 0, "%s: 'float' is not 32 bits on this machine", __func__); return sizeof (float); case GAL_TYPE_FLOAT64: if( sizeof (double) != 8 ) error(EXIT_FAILURE, 0, "%s: 'double' is not 64 bits on this machine", __func__); return sizeof (double); case GAL_TYPE_COMPLEX32: if( sizeof (float) != 4 ) error(EXIT_FAILURE, 0, "%s: 'float' is not 32 bits on this machine", __func__); return sizeof (gsl_complex_float); case GAL_TYPE_COMPLEX64: if( sizeof (double) != 8 ) error(EXIT_FAILURE, 0, "%s: 'double' is not 64 bits on this machine", __func__); return sizeof (gsl_complex); case GAL_TYPE_STRING: return sizeof (char *); default: error(EXIT_FAILURE, 0, "%s: type value of %d not recognized", __func__, type); } error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can find " "the cause of the problem. Control should not have reached the end of " "this function", __func__, PACKAGE_BUGREPORT); return -1; } char * gal_type_name(uint8_t type, int long_name) { switch(type) { case GAL_TYPE_BIT: if(long_name) return "bit"; else return "b"; case GAL_TYPE_UINT8: if(long_name) return "uint8"; else return "u8"; case GAL_TYPE_INT8: if(long_name) return "int8"; else return "i8"; case GAL_TYPE_UINT16: if(long_name) return "uint16"; else return "u16"; case GAL_TYPE_INT16: if(long_name) return "int16"; else return "i16"; case GAL_TYPE_UINT32: if(long_name) return "uint32"; else return "u32"; case GAL_TYPE_INT32: if(long_name) return "int32"; else return "i32"; case GAL_TYPE_UINT64: if(long_name) return "uint64"; else return "u64"; case GAL_TYPE_INT64: if(long_name) return "int64"; else return "i64"; case GAL_TYPE_FLOAT32: if(long_name) return "float32"; else return "f32"; case GAL_TYPE_FLOAT64: if(long_name) return "float64"; else return "f64"; case GAL_TYPE_COMPLEX32: if(long_name) return "complex32"; else return "c32"; case GAL_TYPE_COMPLEX64: if(long_name) return "complex64"; else return "c64"; case GAL_TYPE_STRING: if(long_name) return "string"; else return "str"; case GAL_TYPE_STRLL: if(long_name) return "string linked list"; else return "strll"; default: error(EXIT_FAILURE, 0, "%s: type value of %d not recognized", __func__, type); } /* Any of the cases above should return this function, so if control reaches here, there is a bug. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "address the problem. Control should not have reached the end of " "this function", __func__, PACKAGE_BUGREPORT); return NULL; } uint8_t gal_type_from_name(char *str) { if( !strcmp(str, "b") || !strcmp(str, "bit") ) return GAL_TYPE_BIT; else if( !strcmp(str, "u8") || !strcmp(str, "uint8") ) return GAL_TYPE_UINT8; else if( !strcmp(str, "i8") || !strcmp(str, "int8") ) return GAL_TYPE_INT8; else if( !strcmp(str, "u16") || !strcmp(str, "uint16") ) return GAL_TYPE_UINT16; else if( !strcmp(str, "i16") || !strcmp(str, "int16") ) return GAL_TYPE_INT16; else if( !strcmp(str, "u32") || !strcmp(str, "uint32") ) return GAL_TYPE_UINT32; else if( !strcmp(str, "i32") || !strcmp(str, "int32") ) return GAL_TYPE_INT32; else if( !strcmp(str, "u64") || !strcmp(str, "uint64") ) return GAL_TYPE_UINT64; else if( !strcmp(str, "i64") || !strcmp(str, "int64") ) return GAL_TYPE_INT64; else if( !strcmp(str, "f32") || !strcmp(str, "float32") ) return GAL_TYPE_FLOAT32; else if( !strcmp(str, "f64") || !strcmp(str, "float64") ) return GAL_TYPE_FLOAT64; else if( !strcmp(str, "c32") || !strcmp(str, "complex32") ) return GAL_TYPE_COMPLEX32; else if( !strcmp(str, "c64") || !strcmp(str, "complex64") ) return GAL_TYPE_COMPLEX64; else if( !strcmp(str, "str") || !strcmp(str, "string") ) return GAL_TYPE_STRING; else return GAL_TYPE_INVALID; /* Any of the cases above should return this function, so if control reaches here, there is a bug. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s so we can " "address the problem. Control must not have reached the end of this " "function", __func__, PACKAGE_BUGREPORT); return 0; } /* Put the minimum (or maximum for the 'gal_type_max') value for the type in the space (that must already be allocated before the call to this function) pointed to by in. */ void gal_type_min(uint8_t type, void *in) { switch(type) { case GAL_TYPE_UINT8: *(uint8_t *) in = 0; break; case GAL_TYPE_INT8: *(int8_t *) in = INT8_MIN; break; case GAL_TYPE_UINT16: *(uint16_t *) in = 0; break; case GAL_TYPE_INT16: *(int16_t *) in = INT16_MIN; break; case GAL_TYPE_UINT32: *(uint32_t *) in = 0; break; case GAL_TYPE_INT32: *(int32_t *) in = INT32_MIN; break; case GAL_TYPE_UINT64: *(uint64_t *) in = 0; break; case GAL_TYPE_INT64: *(int64_t *) in = INT64_MIN; break; case GAL_TYPE_FLOAT32: *(float *) in = -FLT_MAX; break; case GAL_TYPE_FLOAT64: *(double *) in = -DBL_MAX; break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } } void gal_type_max(uint8_t type, void *in) { switch(type) { case GAL_TYPE_UINT8: *(uint8_t *) in = UINT8_MAX; break; case GAL_TYPE_INT8: *(int8_t *) in = INT8_MAX; break; case GAL_TYPE_UINT16: *(uint16_t *) in = UINT16_MAX; break; case GAL_TYPE_INT16: *(int16_t *) in = INT16_MAX; break; case GAL_TYPE_UINT32: *(uint32_t *) in = UINT32_MAX; break; case GAL_TYPE_INT32: *(int32_t *) in = INT32_MAX; break; case GAL_TYPE_UINT64: *(uint64_t *) in = UINT64_MAX; break; case GAL_TYPE_INT64: *(int64_t *) in = INT64_MAX; break; case GAL_TYPE_FLOAT32: *(float *) in = FLT_MAX; break; case GAL_TYPE_FLOAT64: *(double *) in = DBL_MAX; break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } } int gal_type_is_int(uint8_t type) { switch(type) { case GAL_TYPE_UINT8: return 1; case GAL_TYPE_INT8: return 1; case GAL_TYPE_UINT16: return 1; case GAL_TYPE_INT16: return 1; case GAL_TYPE_UINT32: return 1; case GAL_TYPE_INT32: return 1; case GAL_TYPE_UINT64: return 1; case GAL_TYPE_INT64: return 1; default: return 0; } } /* Since linked lists need a different process than arrays, for functions that work on both, it is convenient to simiplify the check with this function. */ int gal_type_is_list(uint8_t type) { return type==GAL_TYPE_STRLL; } int gal_type_out(int first_type, int second_type) { return first_type > second_type ? first_type : second_type; } /************************************************************* ************** To/from string *************** *************************************************************/ /* Write the bit (0 or 1) contents of 'in' into a string ready for printing. 'size' is used to determine the number of bytes to print. The output string will be dynamically allocated within this function. This can be useful for easy checking of bit flag values, for example in an expression like below: printf("flag: %s\n", gal_type_bit_string(&flag, sizeof flag) ); */ char * gal_type_bit_string(void *in, size_t size) { size_t i; char *byte=in; char *str=gal_pointer_allocate(GAL_TYPE_UINT8, 8*size+1, 0, __func__, "str"); /* Print the bits into the allocated string. This was inspired from http://stackoverflow.com/questions/111928/is-there-a-printf-converter-to-print-in-binary-format */ for(i=0;i<size;++i) sprintf(str+i*8, "%c%c%c%c%c%c%c%c ", (byte[i] & 0x80 ? '1' : '0'), (byte[i] & 0x40 ? '1' : '0'), (byte[i] & 0x20 ? '1' : '0'), (byte[i] & 0x10 ? '1' : '0'), (byte[i] & 0x08 ? '1' : '0'), (byte[i] & 0x04 ? '1' : '0'), (byte[i] & 0x02 ? '1' : '0'), (byte[i] & 0x01 ? '1' : '0') ); /* Return the allocated and filled string. */ return str; } /* Write the contents of memory that 'ptr' points to as a string of type 'type'.*/ #define TO_STRING(CTYPE, FMT) { \ if( asprintf(&str, FMT, *(CTYPE *)ptr)<0 ) \ error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } char * gal_type_to_string(void *ptr, uint8_t type, int quote_if_str_has_space) { char *c, *str=NULL; switch(type) { /* For a string we might need to make sure it has no white space characters, if it does, it can be printed it within quotation signs. */ case GAL_TYPE_STRING: if(quote_if_str_has_space) { c=*(char **)ptr; while(*c!='\0') if(isspace(*c++)) break; if(*c=='\0') { if( asprintf(&str, "%s", *(char **)ptr)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } else { if( asprintf(&str, "\"%s\" ", *(char **)ptr)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); } } else if( asprintf(&str, "%s", *(char **)ptr)<0 ) error(EXIT_FAILURE, 0, "%s: asprintf allocation", __func__); break; case GAL_TYPE_UINT8: TO_STRING( uint8_t, "%"PRIu8 ); break; case GAL_TYPE_INT8: TO_STRING( int8_t, "%"PRId8 ); break; case GAL_TYPE_UINT16: TO_STRING( uint16_t, "%"PRIu16 ); break; case GAL_TYPE_INT16: TO_STRING( int16_t, "%"PRId16 ); break; case GAL_TYPE_UINT32: TO_STRING( uint32_t, "%"PRIu32 ); break; case GAL_TYPE_INT32: TO_STRING( int32_t, "%"PRId32 ); break; case GAL_TYPE_UINT64: TO_STRING( uint64_t, "%"PRIu64 ); break; case GAL_TYPE_INT64: TO_STRING( int64_t, "%"PRId64 ); break; /* We aren't using '%g' for floating points because it can remove statisically significant digits in some scenarios and its result is generally not easily predictable: can be fixed-point or exponential depending on printed length! But the printed length of a number can hide statisical significance. See the discussion in 'bin/table/asttable.conf' for the values used here. */ case GAL_TYPE_FLOAT32: TO_STRING( float, "%.6e" ); break; case GAL_TYPE_FLOAT64: TO_STRING( double, "%.14e"); break; /* Unknown type! */ default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } return str; } /* Read a string as a given data type and put a the pointer to it in *out. When the input '*out!=NULL', then it is assumed to be allocated and the value will be simply put there. If '*out==NULL', then space will be allocated for the given type and the string's value (in the given type) will be stored there. Note that when we are dealing with a string type, '*out' should be interpretted as 'char **' (one element in an array of pointers to different strings). In other words, 'out' should be 'char ***'. This function can be used to fill in arrays of numbers from strings (in an already allocated data structure), or add nodes to a linked list. For an array, you have to pass the pointer to the 'i'th element where you want the value to be stored, for example &(array[i]). If parsing was successful, it will return a 0. If there was a problem, it will return 1. */ int gal_type_from_string(void **out, char *string, uint8_t type) { long l; double d; void *value; char *tailptr; int status=0, allocated=0; /* If the output is NULL, then allocate the necessary space if we are not dealing with a linked list. In a linked list, a NULL value is meaningful (it is the end of the list). */ if( *out==NULL && !gal_type_is_list(type) ) { allocated=1; *out=gal_pointer_allocate(type, 1, 0, __func__, "out"); } value=*out; /* Read the string depending on the type. */ switch(type) { /* Linked lists, currently only string linked lists. */ case GAL_TYPE_STRLL: gal_list_str_add( (struct gal_list_str_t **)out, string, 1); break; /* String, just allocate and copy the string and keep its pointer in the place '*out' points to (for strings, '*out' is 'char **'). */ case GAL_TYPE_STRING: gal_checkset_allocate_copy(string, value); break; /* Floating point: Read it as a double or long, then put it in the array. When the conversion can't be done (the string isn't a number for example), then just assume no blank value was given. */ case GAL_TYPE_FLOAT32: case GAL_TYPE_FLOAT64: d=strtod(string, &tailptr); if(*tailptr!='\0') status=1; else { if(type==GAL_TYPE_FLOAT32) *(float *) value=d; else *(double *) value=d; } break; /* Integers. */ default: l=strtol(string, &tailptr, 0); if(*tailptr!='\0') status=1; else switch(type) { /* The signed values can easily be put in. */ case GAL_TYPE_INT8: *(int8_t *) value = l; break; case GAL_TYPE_INT16: *(int16_t *) value = l; break; case GAL_TYPE_INT32: *(int32_t *) value = l; break; case GAL_TYPE_INT64: *(int64_t *) value = l; break; /* For the unsigned types, the value has to be positive, so if the input was negative, then just return a status of one and don't store the value. */ default: if(l<0) status=1; else switch(type) { case GAL_TYPE_UINT8: *(uint8_t *) value=l; break; case GAL_TYPE_UINT16: *(uint16_t *) value=l; break; case GAL_TYPE_UINT32: *(uint32_t *) value=l; break; case GAL_TYPE_UINT64: *(uint64_t *) value=l; break; default: error(EXIT_FAILURE, 0, "%s: type code %d not recognized", __func__, type); } } } /* If reading was unsuccessful, then free the space if it was allocated, then return the status, don't touch the pointer. */ if(status && allocated) { free(*out); *out=NULL; } return status; } /* If the data structure was correctly created (the string was a number), then return its pointer. Otherwise, return NULL. */ void * gal_type_string_to_number(char *string, uint8_t *type) { long int l; size_t digits; void *ptr, *out; uint8_t forcedfloat=0; char *c, *tailptr, *cp; /* Define initial spaces to keep the value. */ uint8_t u8; int8_t i8; uint16_t u16; int16_t i16; uint32_t u32; int32_t i32; uint64_t u64; int64_t i64; float f; double d; /* First see if the number is a double (the most generic). */ d=strtod(string, &tailptr); if(*tailptr=='f') { if(tailptr[1]=='\0') forcedfloat=1; else return NULL; } else if (*tailptr!='\0') return NULL; /* The number has been parsed successfully as a number. But if it contains a '.', then it must a "forced" float also. This won't be a problem in scenarios like '.2', but people may use '2.' or '2.0' to force a float and this loop is necessary in such cases. */ for(c=string; *c!='\0'; ++c) if(*c=='.') { forcedfloat=1; break; } /* Read the number as an integer if 1) we aren't in forced-float mode, 2) the number is actually an integer ('ceil(d)==d'), and 3) the number fits within interger limits: the maximum value of an unsigned 64-bit integer is almost 1.8e19, and the minimum value of a signed 64-bit integer is almost -9.2e18), see the "Numeric data types" section of Gnuastro's book. */ if( forcedfloat==0 && ceil(d) == d && d<1.8e19f && d>-9.2e18f ) { /* We know the number is an integer, so we should re-read it again, but this time, as an integer, because: 1) floating point numbers can only preserve a certain number of decimals precisely after a certain number of decimals, they loose precision. 2) Integer comparisons (that are done below) are faster, but this is secondary because the parsing itself takes more time! The string is being parsed as an integer in base-10 (third argument of 'strtol'). This should not be '0', otherwise 'strtol' will parse strings starting with '0' in octal radix and strings starting in '0x' in hexagesimal radix (these aren't used in data analysis, only in computer science). */ l=strtol(string, &tailptr, 10); if(*tailptr!='\0') { /* If 'tailptr' is simply an 'e', the input string was in scientific notation (for example '1e5'). In such cases, the number of decimals is (usually!) enough to fit in a double, and we can simply put the value of 'd' in 'l'. Note that with 'ceil(d)==d' we have confirmed that the number is actually an integer (and not a float). */ if(*tailptr=='e') l=d; else return NULL; } /* If the number is negative, put it in the signed types (based on its value). If its zero or positive, then put it in the unsigned types. */ if( l < 0 ) { if (l>INT8_MIN) { i8=l; ptr=&i8; *type=GAL_TYPE_INT8; } else if(l>INT16_MIN) { i16=l; ptr=&i16; *type=GAL_TYPE_INT16; } else if(l>INT32_MIN) { i32=l; ptr=&i32; *type=GAL_TYPE_INT32; } else { i64=l; ptr=&i64; *type=GAL_TYPE_INT64; } } else { /* Note that the blank values are set to the maximum values in unsigned types. A blank value should be given as a blank string to this function ('GAL_BLANK_STRING'). So, to avoid confusing situations (for example when the user gives 255), if the value is equal to the given maximum of the given type, we'll assign it to a larger type. In other words, we won't be using the '<=MAX', but '<MAX'. Even though they are positive, we should give priority to the signed types if the number fits in the range of signed type for that width: this is the way that C's internal automatic type conversion works (which is used by Arithmetic's binary operators for example). */ if (l<UINT8_MAX) { if(l>INT8_MAX) { u8=l; ptr=&u8; *type=GAL_TYPE_UINT8; } else { i8=l; ptr=&i8; *type=GAL_TYPE_INT8; } } else if(l<UINT16_MAX) { if(l>INT16_MAX) { u16=l; ptr=&u16; *type=GAL_TYPE_UINT16; } else { i16=l; ptr=&i16; *type=GAL_TYPE_INT16; } } else if(l<UINT32_MAX) { if(l>INT32_MAX) { u32=l; ptr=&u32; *type=GAL_TYPE_UINT32; } else { i32=l; ptr=&i32; *type=GAL_TYPE_INT32; } } else { if(l>INT64_MAX) { u64=l; ptr=&u64; *type=GAL_TYPE_UINT64; } else { i64=l; ptr=&i64; *type=GAL_TYPE_INT64; } } } } else { /* Start counting the number of digits from the start of the string (while ignoring any '0's at the start). */ digits=0; for(cp=string;*cp!='\0';++cp) { if(isdigit(*cp)) { if(!(digits==0 && *cp=='0')) ++digits; } if(*cp=='e') break; } /* In the previous loop, we went to the end of the string (or the 'e' character in an exponential), so 'cp' now points to its end. We just have to iterate backwards and stop when we hit a non-zero character. */ for(;cp!=string;--cp) if(isdigit(*cp)) { if(*cp=='0') --digits; else break; } /* Calculate the number of decimal digits and decide if it the number should be a float or a double. The maximum number of decimal digits to store 32-bit floating point is 7.22 (see "Printing floating point numbers" section of the book). We will round this to 7 to be on the safe side. If the given number has more than 7 decimal digits, or is outside the range of possible values for a 32-bit float, it should be saved as a 64-bit float. */ if( digits > 7 || fabs(d)>FLT_MAX || fabs(d)<FLT_MIN ) { ptr=&d; *type=GAL_TYPE_FLOAT64; } else { f=d; ptr=&f; *type=GAL_TYPE_FLOAT32; } /* For a check: printf("%s:%s: %zu %s\n", __func__, string, digits, gal_type_name(*type, 1)); printf("%s: GOOD\n", __func__); exit(0); */ } /* Allocate a one-element dataset, then copy the number into it. */ out=gal_pointer_allocate(*type, 1, 0, __func__, "out"); memcpy(out, ptr, gal_type_sizeof(*type)); return out; } �����������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/units.c���������������������������������������������������������������������������0000644�0001750�0001750�00000036332�14551337306�011052� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Units -- Convert data from one unit to other. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Kartik Ohri <kartikohri13@gmail.com> Contributing author(s): Mohammad Akhlaghi <mohammad@akhlaghi.org> Pedram Ashofteh-Ardakani <pedramardakani@pm.me> Copyright (C) 2020-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <math.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <gsl/gsl_math.h> #include <gnuastro/type.h> #include <gnuastro/pointer.h> /**********************************************************************/ /**************** Functions to parse strings *****************/ /**********************************************************************/ /* Parse the input string consisting of numbers separated by given delimiter into an array. */ int gal_units_extract_decimal(char *convert, const char *delimiter, double *args, size_t n) { size_t i = 0; char *copy, *token, *end; /* Create a copy of the string to be parsed and parse it. This is because it will be modified during the parsing. */ copy=strdup(convert); do { /* Check if the required number of arguments are passed. */ if(i==n+1) { free(copy); error(0, 0, "%s: input '%s' exceeds maximum number of arguments " "(%zu)", __func__, convert, n); return 0; } /* Extract the substring till the next delimiter. */ token=strtok(i==0?copy:NULL, delimiter); if(token) { /* Parse extracted string as a number, and check if it worked. */ args[i++] = strtod (token, &end); if (*end && *end != *delimiter) { /* In case a warning is necessary error(0, 0, "%s: unable to parse element %zu in '%s'\n", __func__, i, convert); */ free(copy); return 0; } } } while(token && *token); free (copy); /* Check if the number of elements parsed. */ if (i != n) { /* In case a warning is necessary error(0, 0, "%s: input '%s' must contain %lu numbers, but has " "%lu numbers\n", __func__, convert, n, i); */ return 0; } /* Numbers are written, return successfully. */ return 1; } /**********************************************************************/ /**************** Convert string to decimal *****************/ /**********************************************************************/ /* Parse the right ascension input as a string in form of hh:mm:ss to a * single decimal value calculated by (hh + mm / 60 + ss / 3600 ) * 15. */ double gal_units_ra_to_degree(char *convert) { double val[3]; double decimal=0.0; /* Check whether the string is successfully parsed. */ if(gal_units_extract_decimal(convert, ":hms", val, 3)) { /* Check whether the first value is in within limits, and add it. We are using 'signbit(val[0])' instead of 'val[0]<0.0f' because 'val[0]<0.0f' can't distinguish negative zero (-0.0) from an unsigned zero (in other words, '-0.0' will be interpretted to be positive). For the declinations it is possible (see the comments in 'gal_units_dec_to_degree'), so a user may mistakenly give that format in Right Ascension. */ if(signbit(val[0]) || val[0]>24.0) return NAN; decimal += val[0]; /* Check whether value of minutes is within limits, and add it. */ if(signbit(val[1]) || val[1]>60.0) return NAN; decimal += val[1] / 60; /* Check whether value of seconds is in within limits, and add it. */ if(signbit(val[2]) || val[2]>60.0) return NAN; decimal += val[2] / 3600; /* Convert value to degrees and return. */ decimal *= 15.0; return decimal; } else return NAN; /* Control shouldn't reach this point. If it does, its a bug! */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); return NAN; } /* Parse the declination input as a string in form of dd:mm:ss to a decimal * calculated by (dd + mm / 60 + ss / 3600 ). */ double gal_units_dec_to_degree(char *convert) { int sign; double val[3], decimal=0.0; /* Parse the values in the input string. */ if(gal_units_extract_decimal(convert, ":dms", val, 3)) { /* Check whether the first value is in within limits. */ if(val[0]<-90.0 || val[0]>90.0) return NAN; /* If declination is negative, the first value in the array will be negative and all other values will be positive. In that case, we set sign equal to -1. Therefore, we multiply the first value by sign to make it positive. The final answer is again multiplied by sign to make its sign same as original. We are using 'signbit(val[0])' instead of 'val[0]<0.0f' because 'val[0]<0.0f' can't distinguish negative zero (-0.0) from an unsigned zero (in other words, '-0.0' will be interpretted to be positive). In the case of declination, this can happen just below the equator (where the declination is less than one degree), for example '-00d:12:34'. */ sign = signbit(val[0]) ? -1 : 1; decimal += val[0] * sign; /* Check whether value of arc-minutes is in within limits. */ if(signbit(val[1]) || val[1]>60.0) return NAN; decimal += val[1] / 60; /* Check whether value of arc-seconds is in within limits. */ if (signbit(val[2]) || val[2] > 60.0) return NAN; decimal += val[2] / 3600; /* Make the sign of the decimal value same as input and return. */ decimal *= sign; return decimal; } else return NAN; /* Control shouldn't reach this point. If it does, its a bug! */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); return NAN; } /**********************************************************************/ /**************** Convert decimal to string *****************/ /**********************************************************************/ /* Max-length of output string. */ #define UNITS_RADECSTR_MAXLENGTH 50 /* Parse the right ascension input as a decimal to a string in form of hh:mm:ss.ss . */ char * gal_units_degree_to_ra(double decimal, int usecolon) { size_t nchars; int hours=0, minutes=0; float seconds=0.0; /* For sub-second accuracy. */ /* Allocate a long string which is large enough for string of format hh:mm:ss.ss and sign. */ char *ra=gal_pointer_allocate(GAL_TYPE_UINT8, UNITS_RADECSTR_MAXLENGTH, 0, __func__, "ra"); /* Check if decimal value is within bounds otherwise return error. */ if (decimal<0 || decimal>360) { error (0, 0, "%s: value of decimal should be between be 0 and 360, " "but is %g\n", __func__, decimal); return NULL; } /* Divide decimal value by 15 and extract integer part of decimal value to obtain hours. */ decimal /= 15.0; hours = (int)decimal; /* Subtract hours from decimal and multiply remaining value by 60 to obtain minutes. */ minutes = (int)((decimal - hours) * 60); /* Subtract hours and minutes from decimal and multiply remaining value by 3600 to obtain seconds. */ seconds = (decimal - hours - minutes / 60.0) * 3600; /* Format the extracted hours, minutes and seconds as a string with leading zeros if required, in hh:mm:ss format. */ nchars = snprintf(ra, UNITS_RADECSTR_MAXLENGTH-1, usecolon ? "%02d:%02d:%g" : "%02dh%02dm%g", hours, minutes, seconds); if(nchars>UNITS_RADECSTR_MAXLENGTH) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to address " "the problem. The output string has an unreasonable length of " "%zu characters", __func__, PACKAGE_BUGREPORT, nchars); /* Return the final string. */ return ra; } /* Parse the declination input as a decimal to a string in form of dd:mm:ss . */ char * gal_units_degree_to_dec(double decimal, int usecolon) { size_t nchars; float arc_seconds=0.0; int sign, degrees=0, arc_minutes=0; /* Allocate string of fixed length which is large enough for string of * format hh:mm:ss.ss and sign. */ char *dec=gal_pointer_allocate(GAL_TYPE_UINT8, UNITS_RADECSTR_MAXLENGTH, 0, __func__, "ra"); /* Check if decimal value is within bounds otherwise return error. */ if(decimal<-90 || decimal>90) { error (0, 0, "%s: value of decimal should be between be -90 and 90, " "but is %g\n", __func__, decimal); return NULL; } /* If declination is negative, we set 'sign' equal to -1. We multiply the decimal by to make sure it is positive. We then extract degrees, arc-minutes and arc-seconds from the decimal. Finally, we add a minus sign in beginning of string if input was negative. */ sign = decimal<0.0 ? -1 : 1; decimal *= sign; /* Extract integer part of decimal value to obtain degrees. */ degrees=(int)decimal; /* Subtract degrees from decimal and multiply remaining value by 60 to obtain arc-minutes. */ arc_minutes=(int)( (decimal - degrees) * 60 ); /* Subtract degrees and arc-minutes from decimal and multiply remaining value by 3600 to obtain arc-seconds. */ arc_seconds = (decimal - degrees - arc_minutes / 60.0) * 3600; /* Format the extracted degrees, arc-minutes and arc-seconds as a string with leading zeros if required, in hh:mm:ss format with correct sign. */ nchars = snprintf(dec, UNITS_RADECSTR_MAXLENGTH-1, usecolon ? "%s%02d:%02d:%g" : "%s%02dd%02dm%g", sign<0?"-":"+", degrees, arc_minutes, arc_seconds); if(nchars>UNITS_RADECSTR_MAXLENGTH) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to address " "the problem. The output string has an unreasonable length of " "%zu characters", __func__, PACKAGE_BUGREPORT, nchars); /* Return the final string. */ return dec; } /**********************************************************************/ /**************** Flux conversions *****************/ /**********************************************************************/ /* Convert counts to magnitude using the given zeropoint. */ double gal_units_counts_to_mag(double counts, double zeropoint) { return ( counts > 0.0f ? ( -2.5f * log10(counts) + zeropoint ) : NAN ); } /* Convert magnitude to counts using the given zeropoint. */ double gal_units_mag_to_counts(double mag, double zeropoint) { return pow(10, (mag - zeropoint)/(-2.5f)); } double gal_units_mag_to_sb(double mag, double area_arcsec2) { return mag+2.5*log10(area_arcsec2); } double gal_units_sb_to_mag(double sb, double area_arcsec2) { return sb-2.5*log10(area_arcsec2); } double gal_units_counts_to_sb(double counts, double zeropoint, double area_arcsec2) { return gal_units_mag_to_sb( gal_units_counts_to_mag(counts, zeropoint), area_arcsec2); } double gal_units_sb_to_counts(double sb, double zeropoint, double area_arcsec2) { return gal_units_mag_to_counts( gal_units_sb_to_mag(sb, area_arcsec2), zeropoint); } /* Convert Pixel values to Janskys with an AB-magnitude based zero-point. See the "Brightness, Flux, Magnitude and Surface brightness". */ double gal_units_counts_to_jy(double counts, double zeropoint_ab) { return counts * 3631 * pow(10, -1 * zeropoint_ab / 2.5); } /* Convert Janskys to pixel values with an AB-magnitude based zero-point. See the "Brightness, Flux, Magnitude and Surface brightness". */ double gal_units_jy_to_counts(double jy, double zeropoint_ab) { return jy / 3631 / pow(10, -1 * zeropoint_ab / 2.5); } /* Convert counts to nanomaggy. The job of this function is equivalent to the double-call bellow. We just don't want to repeat some extra multiplication/divisions. gal_units_jy_to_counts(gal_units_counts_to_jy(counts, zeropoint_ab), 22.5) */ double gal_units_counts_to_nanomaggy(double counts, double zeropoint_ab) { return ( counts * pow(10, -1 * zeropoint_ab / 2.5) / pow(10, -1 * 22.5 / 2.5) ); } double gal_units_nanomaggy_to_counts(double counts, double zeropoint_ab) { return ( counts / pow(10, -1 * zeropoint_ab / 2.5) * pow(10, -1 * 22.5 / 2.5) ); } double gal_units_jy_to_mag(double jy) { double zp=0; return gal_units_counts_to_mag(gal_units_jy_to_counts(jy, zp),zp); } double gal_units_mag_to_jy(double mag) { double zp=0; return gal_units_counts_to_jy(gal_units_mag_to_counts(mag, zp),zp); } /**********************************************************************/ /**************** Distance conversions *****************/ /**********************************************************************/ /* Convert Astronomical Units (AU) to Parsecs (PC). From the definition of Parsecs, 648000/pi AU = 1 PC. The mathematical constant 'PI' is imported from the GSL as M_PI. So: */ double gal_units_au_to_pc(double au) { return au / 648000.0f * M_PI; } /* Convert Parsecs (PC) to Astronomical units (AU), see comment of 'gal_units_au_to_pc'. */ double gal_units_pc_to_au(double au) { return au * 648000.0f / M_PI; } /* Convert Light-years to Parsecs, according to https://en.wikipedia.org/wiki/Light-year#Definitions: 1 light-year = 9460730472580800 metres (exactly) ~ 9.461 petametres ~ 9.461 trillion kilometres (5.879 trillion miles) ~ 63241.077 astronomical units ~ 0.306601 parsecs */ double gal_units_ly_to_pc(double ly) { return ly * 0.306601f; } /* Convert Parsecs to Light-years (see comment of gal_units_ly_to_pc). */ double gal_units_pc_to_ly(double pc) { return pc / 0.306601f; } /* Convert Astronomical Units to Light-years (see comment of gal_units_ly_to_pc). */ double gal_units_au_to_ly(double au) { return au / 63241.077f; } /* Convert Light-years to Astronomical Units (see comment of gal_units_ly_to_pc). */ double gal_units_ly_to_au(double ly) { return ly * 63241.077f; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/warp.c����������������������������������������������������������������������������0000644�0001750�0001750�00000114715�14551337306�010663� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Warp -- Warp pixels of one dataset to another pixel grid. This is part of GNU Astronomy Utilities (Gnuastro) package. Corresponding author: Pedram Ashofteh-Ardakani <pedramardakani@pm.me> Contributing author(s): Mohammad Akhlaghi <mohammad@akhlaghi.org> Copyright (C) 2022-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <gnuastro/wcs.h> #include <gnuastro/type.h> #include <gnuastro/warp.h> #include <gnuastro/blank.h> #include <gnuastro/pointer.h> #include <gnuastro/polygon.h> #include <gnuastro/threads.h> #include <gnuastro/dimension.h> /* Macros. */ #define WARP_NEXT_ODD(D) \ ( (size_t)( ceil((D)) ) + ( (size_t)( ceil((D)) )%2==0 ? 1 : 0 ) ) #define WARP_WCSALIGN_H(IND,ES,IS1) \ (size_t)( ( (IND)%(IS1) ) * ( (ES)+1 ) \ + ( (IND)/(IS1) ) * (1+(IS1)*( (ES)+1 )) ) #define WARP_WCSALIGN_V0(ES,IS0,IS1) \ (size_t)( 1+(IS0)+(IS1)*( (IS0)+1 )*( (ES)+1) ) #define WARP_WCSALIGN_V(IND,ES,V0,IS1) \ (size_t)( (V0)+(ES)*( (IND)+(IND)/(IS1) ) ) /* Generate the points on the outer boundary of a dsize[0] x dsize[1] matrix and return the array. */ static gal_data_t * warp_alloc_perimeter(gal_data_t *input) { /* Low level variables. */ size_t ind, i; gal_data_t *pcrn; double *x=NULL, *y=NULL; size_t is0=input->dsize[0]; size_t is1=input->dsize[1]; int quietmmap=input->quietmmap; size_t minmapsize=input->minmapsize; /* High level variables. */ size_t npcrn=2*(is0+is1); pcrn=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &npcrn, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); pcrn->next=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &npcrn, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); /* Find outermost pixel coordinates of the input image. Cover two corners at once to shorten the loop. */ x=pcrn->array; y=pcrn->next->array; /* Top and bottom. */ ind=0; for(i=is1+1; i--;) { x[ind]=i+0.5f; y[ind]=0.5f; ind++; x[ind]=i+0.5f; y[ind]=is0+0.5f; ind++; } /* Left and right. */ for(i=is0-1; i--;) { x[ind]=0.5f; y[ind]=1.5f+i; ind++; x[ind]=0.5f+is1; y[ind]=1.5f+i; ind++; } /* Sanity check: let's make sure we have correctly covered the input perimeter. */ if(ind!=npcrn) error(EXIT_FAILURE, 0, "%s: the input img perimeter of size <%zu> " "is not covered correctly. Currently on ind <%zu>.", __func__, npcrn, ind); return pcrn; } /* Create a base image with WCS consisting of the basic geometry keywords. */ static void warp_wcsalign_init_output_from_params(gal_warp_wcsalign_t *wa) { /* Low level variables. */ size_t i, nkcoords, *osize; gal_data_t *input=wa->input; int quietmmap=input->quietmmap; size_t minmapsize=input->minmapsize; struct wcsprm *bwcs=NULL, *rwcs=NULL; gal_data_t *kcoords=NULL, *pcrn=NULL, *converted=NULL; double ocrpix[2], *xkcoords, *ykcoords, *x=NULL, *y=NULL; double pmin[2]={DBL_MAX, DBL_MAX}, pmax[2]={-DBL_MAX, -DBL_MAX}, tmp; /* Base WCS default parameters. */ double pc[4]={-1, 0, 0, 1}; double rcrpix[2]={1.0, 1.0}; char **ctype=wa->ctype->array; struct wcsprm *iwcs=input->wcs; double *cdelt=wa->cdelt->array; double *center=wa->center->array; /* High level variables. */ char *cunit[2]={iwcs->cunit[0], iwcs->cunit[1]}; /* Determine the output image size. */ size_t iminr=GAL_BLANK_SIZE_T, imaxr=GAL_BLANK_SIZE_T; /* indexs of */ size_t imind=GAL_BLANK_SIZE_T, imaxd=GAL_BLANK_SIZE_T; /* extreme-um */ double pminr=DBL_MAX, pmind=DBL_MAX, pmaxr=-DBL_MAX, pmaxd=-DBL_MAX; /* Create the reference WCS. */ rwcs=gal_wcs_create(rcrpix, center, cdelt, pc, cunit, ctype, 2, GAL_WCS_LINEAR_MATRIX_PC); /* Calculate the outer boundary of the input. */ pcrn=warp_alloc_perimeter(input); converted=gal_wcs_img_to_world(pcrn, iwcs, 0); /* Get the minimum/maximum of the outer boundary. */ x=converted->array; y=converted->next->array; for(i=converted->size; i--;) { if(x[i]<pminr) { pminr=x[i]; iminr=i; } if(y[i]<pmind) { pmind=y[i]; imind=i; } if(x[i]>pmaxr) { pmaxr=x[i]; imaxr=i; } if(y[i]>pmaxd) { pmaxd=y[i]; imaxd=i; } } /* Prepare the key world coorinates and change to image coordinates later. We are doing this to determine the CRPIX and NAXISi size for the final image. */ nkcoords=5; kcoords=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &nkcoords, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); kcoords->next=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &nkcoords, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); xkcoords=kcoords->array; ykcoords=kcoords->next->array; xkcoords[0]=x[iminr]; ykcoords[0]=y[iminr]; /* min RA */ xkcoords[1]=x[imaxr]; ykcoords[1]=y[imaxr]; /* max RA */ xkcoords[2]=x[imind]; ykcoords[2]=y[imind]; /* min Dec */ xkcoords[3]=x[imaxd]; ykcoords[3]=y[imaxd]; /* max Dec */ xkcoords[4]=center[0]; ykcoords[4]=center[1]; /* Image center */ /* Convert to pixel coords. */ gal_wcs_world_to_img(kcoords, rwcs, 1); /* Determine output image size. */ if( wa->widthinpix ) osize=wa->widthinpix->array; else { /* Automatic: the first four coordinates are the extreme-um RA/Dec. */ for(i=4; i--;) { pmin[0] = xkcoords[i] < pmin[0] ? xkcoords[i] : pmin[0]; pmin[1] = ykcoords[i] < pmin[1] ? ykcoords[i] : pmin[1]; pmax[0] = xkcoords[i] > pmax[0] ? xkcoords[i] : pmax[0]; pmax[1] = ykcoords[i] > pmax[1] ? ykcoords[i] : pmax[1]; } /* Size must be odd so the image would have a center value. Also, the indices are swapped since number of columns defines the horizontal part of the center and vice versa. To calculate the output image size, measure the difference between center and outermost edges of the input image (in pixels). Since this is the distance from center to the furthest edge of the image, the value must be multiplied by two. */ osize=gal_pointer_allocate(GAL_TYPE_SIZE_T, 2, 0, __func__, "osize"); tmp=2*fmax( fabs(ykcoords[4]-pmin[1]), fabs(ykcoords[4]-pmax[1]) ); osize[0] = WARP_NEXT_ODD(tmp); tmp=2*fmax( fabs(xkcoords[4]-pmin[0]), fabs(xkcoords[4]-pmax[0]) ); osize[1] = WARP_NEXT_ODD(tmp); } /* Set the CRPIX value Note: os1 is number of columns, so we use it to define CRPIX in the horizontal axis, and vice versa. */ ocrpix[0]= 1.5f + osize[1]/2.0f - xkcoords[4]; ocrpix[1]= 1.5f + osize[0]/2.0f - ykcoords[4]; /* Create the base WCS. */ bwcs=gal_wcs_create(ocrpix, center, cdelt, pc, cunit, ctype, 2, GAL_WCS_LINEAR_MATRIX_PC); /* Make sure that the size is reasonable (i.e., less than 100000 pixels on a side). This can happen when a wrong central coordinate is requested. */ if(osize[0]>100000 || osize[1]>100000) error(EXIT_SUCCESS, 0, "%s: the output image size (%zu x %zu pixels) " "is unreasonably large. This may be due to a mistake in the " "given central coordinate compared to the input image (the " "given center is too far from the image)", __func__, osize[1], osize[0]); /* Create the output image dataset with the base WCS. */ wa->output=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 2, osize, bwcs, 0, minmapsize, quietmmap, GAL_WARP_OUTPUT_NAME_WARPED, NULL, NULL); /* Clean up. */ wcsfree(bwcs); wcsfree(rwcs); gal_list_data_free(pcrn); gal_list_data_free(kcoords); gal_list_data_free(converted); if(wa->widthinpix==NULL) free(osize); /* Must be freed after wcsfree() is called! */ free(bwcs); free(rwcs); } /* Initialize the vertices of each output pixel (accounting for any edge-sampling). */ static void warp_wcsalign_init_vertices(gal_warp_wcsalign_t *wa) { size_t es=wa->edgesampling; size_t ind, i, j, ix, iy; double gap=1.0f/(es+1.0f); size_t os0=wa->output->dsize[0]; size_t os1=wa->output->dsize[1]; double *x=NULL, *y=NULL, row, col; uint8_t quietmmap=wa->input->quietmmap; size_t minmapsize=wa->input->minmapsize; size_t nvcrn=es*os0; size_t nhcrn=es*os1+os1+1; size_t v0=WARP_WCSALIGN_V0(es,os0,os1); size_t nvertices=nvcrn*(os1+1)+nhcrn*(os0+1); /* Allocate the space for all the vertice coordinates. */ wa->vertices=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &nvertices, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); wa->vertices->next=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &nvertices, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); /* Parse all pixels. */ x=wa->vertices->array; y=wa->vertices->next->array; for(ind=os0*os1; ind--;) { /* For easy reading. */ row=ind%os1; col=floor(ind/os1); ix=WARP_WCSALIGN_H(ind,es,os1); iy=WARP_WCSALIGN_V(ind,es,v0,os1); /* Bottom left edge of pixel. */ x[ix]= 0.5f+row; y[ix]= 0.5f+col; for(i=es; i--;) { /* Horizontal */ j=ix+i+1; x[j]=0.5f+row+gap+i*gap; y[j]=0.5f+col; /* Vertical */ j=iy+i; x[j]=0.5f+row; y[j]=0.5f+col+gap+i*gap; } } /* Top */ for(i=nhcrn; i--;) { j=v0-nhcrn+i; x[j]=0.5f+gap*i; y[j]=0.5f+os0; } /* Right */ for(ind=os1-1; ind<os1*os0; ind+=os1) { /* For easy reading. */ row=(size_t)(ind%os1); col=(size_t)(ind/os1); ix=WARP_WCSALIGN_H(ind,es,os1); iy=WARP_WCSALIGN_V(ind,es,v0,os1); /* Bottom right */ j=ix+es+1; x[j]=0.5f+os1; y[j]=0.5f+col; /* Right vertice */ for(i=es; i--;) { j=iy+es+i; x[j]=0.5f+os1; y[j]=0.5f+col+gap+i*gap; } } /* For a check: for(i=0;i<nvertices;++i) printf("%zu: %f, %f\n", i, x[i], y[i]); printf("%s: GOOD\n", __func__); exit(0); */ } /* Check if the vertice orientation is clock-wise or counter-clock-wise. */ static void warp_check_output_clockwise(gal_warp_wcsalign_t *wa) { size_t gcrn=wa->gcrn; size_t es=wa->edgesampling; double *vx=wa->vertices->array; double *vy=wa->vertices->next->array; size_t indices[4]={ 0, es+1, gcrn+es+1, gcrn }; double *temp=gal_pointer_allocate(GAL_TYPE_FLOAT64, 8, 0, __func__, NULL); temp[ 0 ]=vx[ indices[0] ]; temp[ 1 ]=vy[ indices[0] ]; temp[ 2 ]=vx[ indices[1] ]; temp[ 3 ]=vy[ indices[1] ]; temp[ 4 ]=vx[ indices[2] ]; temp[ 5 ]=vy[ indices[2] ]; temp[ 6 ]=vx[ indices[3] ]; temp[ 7 ]=vy[ indices[3] ]; wa->isccw=gal_polygon_is_counterclockwise(temp, 4); /* Clean up. */ free(temp); } static double * warp_pixel_perimeter_ccw(gal_warp_wcsalign_t *wa, size_t ind) { /* Low-level variables. */ size_t i, j, hor, ver, ic; double *xcrn=NULL, *ycrn=NULL, *ocrn=NULL; /* High-level variables. */ size_t v0=wa->v0; size_t gcrn=wa->gcrn; size_t ncrn=wa->ncrn; size_t es=wa->edgesampling; size_t os1=wa->output->dsize[1]; /* Set ocrn, the corners of each output pixel. */ xcrn=wa->vertices->array; ycrn=wa->vertices->next->array; ocrn=gal_pointer_allocate(GAL_TYPE_FLOAT64, (2*ncrn), 0, __func__, "ocrn"); /* Index of surrounding vertices for this pixel. */ hor=WARP_WCSALIGN_H(ind, es, os1); ver=WARP_WCSALIGN_V(ind, es, v0, os1); /* All four corners WARNING: this block of code highly depends on the ordering, take extra care while refactoring ocrn: all output edges transformed into the input image pixel coordiantes ic: index (position in array) of the current pixel edges io: index of the output (reference) pixel edges left edge -> +---------+ <- top edge | | | | | | bottom edge -> +---------+ <- right edge */ /* bottom left */ i=0; j=hor; ocrn[2*i]=xcrn[j]; ocrn[2*i+1]=ycrn[j]; /* bottom right */ i=es+1; j=hor+es+1; ocrn[2*i]=xcrn[j]; ocrn[2*i+1]=ycrn[j]; /* top right */ i=2*(es+1); j=hor+es+1+gcrn; ocrn[2*i]=xcrn[j]; ocrn[2*i+1]=ycrn[j]; /* top left */ i=3*(es+1); j=hor+gcrn; ocrn[2*i]=xcrn[j]; ocrn[2*i+1]=ycrn[j]; /* Sampling corners of the output pixel on the input image. */ for(i=es; i--;) { /* Bottom vertice: 0*(es+1)+(i+1) */ ic=i+1; j=hor+i+1; ocrn[2*ic]=xcrn[j]; ocrn[2*ic+1]=ycrn[j]; /* Right vertice: 1*(es+1)+(i+1) */ ic=i+2+es; j=ver+es+i; ocrn[2*ic]=xcrn[j]; ocrn[2*ic+1]=ycrn[j]; /* Top vertice: 2*(es+1)+(i+1) */ ic=i+3+2*es; j=hor+es+gcrn-i; ocrn[2*ic]=xcrn[j]; ocrn[2*ic+1]=ycrn[j]; /* Left vertice: 3*(es+1)+(i+1) */ ic=i+4+3*es; j=ver+es-i-1; ocrn[2*ic]=xcrn[j]; ocrn[2*ic+1]=ycrn[j]; } return ocrn; } static double * warp_pixel_perimeter_cw(gal_warp_wcsalign_t *wa, size_t ind) { size_t i, hor, ver, ic; double *xcrn=NULL, *ycrn=NULL, *ocrn=NULL; size_t gcrn=wa->gcrn; size_t ncrn=wa->ncrn; size_t es=wa->edgesampling; size_t os1=wa->output->dsize[1]; /* High level variables. */ size_t v0=wa->v0; /* Set ocrn, the corners of each output pixel. */ xcrn=wa->vertices->array; ycrn=wa->vertices->next->array; ocrn=gal_pointer_allocate(GAL_TYPE_FLOAT64, 2*ncrn, 0, __func__, "ocrn"); /* Index of surrounding vertices for this pixel. */ hor=WARP_WCSALIGN_H(ind, es, os1); ver=WARP_WCSALIGN_V(ind, es, v0, os1); /* All four corners: same as the counter clockwise method. */ /* top left <- previously bottom left */ i=0; ocrn[ 2*i ]=xcrn[ hor+gcrn ]; /* xcrn[ hor ] */ ocrn[ 2*i+1 ]=ycrn[ hor+gcrn ]; /* ycrn[ hor ] */ /* top right <- previously bottom right */ i=es+1; ocrn[ 2*i ]=xcrn[ hor+es+1+gcrn ]; /* xcrn[ hor+es+1 ] */ ocrn[ 2*i+1 ]=ycrn[ hor+es+1+gcrn ]; /* ycrn[ hor+es+1 ] */ /* bottom right <- previously top right */ i=2*(es+1); ocrn[ 2*i ]=xcrn[ hor+es+1 ]; /* xcrn[ hor+es+1+gcrn ] */ ocrn[ 2*i+1 ]=ycrn[ hor+es+1 ]; /* ycrn[ hor+es+1+gcrn ] */ /* bottom left <- previously top left */ i=3*(es+1); ocrn[ 2*i ]=xcrn[ hor ]; /* xcrn=[ hor+gcrn ] */ ocrn[ 2*i+1 ]=ycrn[ hor ]; /* ycrn=[ hor+gcrn ] */ /* Sampling corners of the output pixel on the input image. */ for(i=es; i--;) { /* top vertice 0*(es+1)+(i+1) <- previously bottom left */ ic=i+1; ocrn[ 2*ic ]=xcrn[ hor+i+1+gcrn ]; /* xcrn=[ hor+i+1 ] */ ocrn[ 2*ic+1 ]=ycrn[ hor+i+1+gcrn ]; /* ycrn=[ hor+i+1 ] */ /* right vertice 1*(es+1)+(i+1) <- previously bottom right */ ic=i+2+es; ocrn[ 2*ic ]=xcrn[ ver+2*es-1-i ]; /* xcrn[ ver+es+i ] */ ocrn[ 2*ic+1 ]=ycrn[ ver+2*es-1-i ]; /* ycrn[ ver+es+i ] */ /* bottom vertice 2*(es+1)+(i+1) <- previously top right */ ic=i+3+2*es; ocrn[ 2*ic ]=xcrn[ hor+es-i ]; /* xcrn[ hor+es+gcrn-i ] */ ocrn[ 2*ic+1 ]=ycrn[ hor+es-i ]; /* ycrn[ hor+es+gcrn-i ] */ /* left vertice 3*(es+1)+(i+1) <- previously top left */ ic=i+4+3*es; ocrn[ 2*ic ]=xcrn[ ver+i ]; /* xcrn[ ver+es-i-1 ] */ ocrn[ 2*ic+1 ]=ycrn[ ver+i ]; /* ycrn[ ver+es-i-1 ] */ } return ocrn; } static void warp_wcsalign_check_2d(gal_data_t *in, uint8_t type, const char *func, char *name, char *comment) { if(!in) error(EXIT_FAILURE, 0, "%s: no '%s' specified. %s", func, name, comment); if(in->size!=2) error(EXIT_FAILURE, 0, "%s: '%s' takes exactly 2 values, currently " "detected %zu values", func, name, in->size); if(in->type!=type) error(EXIT_FAILURE, 0, "%s: '%s' must have a type of '%s' but has " "type '%s'", func, name, gal_type_name(type, 1), gal_type_name(in->type, 1)); } /* Create the output image using the WCS struct from the given 'gridfile' and 'gridhdu'. */ static void warp_wcsalign_init_output_from_wcs(gal_warp_wcsalign_t *wa, const char *func) { gal_data_t *output=NULL; int quietmmap=wa->input->quietmmap; size_t *dsize=wa->widthinpix->array, minmapsize=wa->input->minmapsize; /* Create the output image dataset with the target WCS given. */ output=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 2, dsize, wa->twcs, 0, minmapsize, quietmmap, GAL_WARP_OUTPUT_NAME_WARPED, NULL, NULL); /* Write to wcsalign data type for later use. */ wa->output=output; } /* Check parameters for aligning and pixelarea. */ static void warp_check_basic_params(gal_warp_wcsalign_t *wa, const char *func) { /* Check if input and 'wa' are not NULL! */ if(wa==NULL) error(EXIT_FAILURE, 0, "%s: 'wa' structure is NULL", func); if(wa->input==NULL) error(EXIT_FAILURE, 0, "%s: input is NULL", func); /* This function assumes the input is double precision. */ if(wa->input->type != GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "%s: input must have a double precision " "floating point type, but its type is '%s', you can use " "'gal_data_copy_to_new_type' or " "'gal_data_copy_to_new_type_free' for the conversion", func, gal_type_name(wa->input->type, 1)); /* Check 'edgesampling', can't compare to '0' since it has meaning, can't check if negative since it is an unsigned type. */ if(wa->edgesampling==GAL_BLANK_SIZE_T) error(EXIT_FAILURE, 0, "%s: no 'edgesampling' specified. This is the " "Order of samplings along each pixel edge", func); if(wa->edgesampling>999) error(EXIT_FAILURE, 0, "%s: edgesampling takes zero OR a positive " "integer value of type 'size_t', <%zu> is too big which might " "be a bad cast", func, wa->edgesampling); /* If 'numthreads' is 0, use the number of threads available to the system. */ if(wa->numthreads==GAL_BLANK_SIZE_T || wa->numthreads==0) wa->numthreads=gal_threads_number(); /* Initialize the internal parameters. */ wa->vertices=NULL; wa->isccw=GAL_BLANK_INT; wa->v0=GAL_BLANK_SIZE_T; wa->nhor=GAL_BLANK_SIZE_T; wa->ncrn=GAL_BLANK_SIZE_T; wa->gcrn=GAL_BLANK_SIZE_T; } static void warp_wcsalign_init_internals(gal_warp_wcsalign_t *wa) { size_t es=wa->edgesampling; size_t os0=wa->output->dsize[0]; size_t os1=wa->output->dsize[1]; /* Common variables to simplify next functions. */ wa->ncrn=4*es+4; wa->gcrn=1+os1*(es+1); wa->v0=WARP_WCSALIGN_V0(es, os0, os1); /* Determine the output image rotation direction so we can sort the indices in counter clockwise order. This is necessary for the 'gal_polygon_clip' function to work. */ warp_check_output_clockwise(wa); } static void * warp_wcsalign_init_params(gal_warp_wcsalign_t *wa, const char *func) { size_t *tmp=NULL; warp_check_basic_params(wa, func); /* Check 'coveredfrac'. */ if(isnan( wa->coveredfrac )) error(EXIT_FAILURE, 0, "%s: no 'coveredfrac' specified. This is the " "acceptable fraction of output covered", func); if(wa->coveredfrac<0.0f || wa->coveredfrac>1.0f) error(EXIT_FAILURE, 0, "%s: coveredfrac takes exactly on positive " "value less than or equal to 1.0, but it is given a value " "of %f", func, wa->coveredfrac); /* If a target WCS is given ignore other variables and initialize the output image. */ if(wa->twcs) { /* Check the widthinpix element. */ warp_wcsalign_check_2d(wa->widthinpix, GAL_TYPE_SIZE_T, func, "widthinpix", "This is the output image " "size in pixels"); warp_wcsalign_init_output_from_wcs(wa, func); /* Warp will ignore the following parameters, warn the user if detected any. */ if(wa->cdelt || wa->center || wa->ctype) error(EXIT_SUCCESS, 0, "%s: WARNING: target WCS is already " "defined with 'gridfile' and 'gridhdu', ignoring extra " "non-linear parameter(s) given", func); return NULL; } /* No 'gridfile' given, Warp must create the output WCS using given parameters. Proceed with checking the 2D input parameters. */ warp_wcsalign_check_2d(wa->ctype, GAL_TYPE_STRING, func, "ctype", "Any pair of valid WCSLIB ctype is " "allowed, e.g. 'RA---TAN, DEC--TAN'"); warp_wcsalign_check_2d(wa->cdelt, GAL_TYPE_FLOAT64, func, "cdelt", "This is the pixel scale in degrees"); warp_wcsalign_check_2d(wa->center, GAL_TYPE_FLOAT64, func, "center", "This is the output image center in degrees"); /* Check 'widthinpix', it can be null for automatic detection. */ if(wa->widthinpix) { warp_wcsalign_check_2d(wa->widthinpix, GAL_TYPE_SIZE_T, func, "widthinpix", "This is the output " "image size"); tmp=wa->widthinpix->array; if(tmp[0]%2==0 || tmp[1]%2==0) error(EXIT_FAILURE, 0, "%s: 'widthinpix' takes exactly 2 ODD " "values, detected EVEN value in %zux%zu", func, tmp[0], tmp[1]); } /* Initialize the output image for further processing. */ warp_wcsalign_init_output_from_params(wa); return NULL; } /* Convert the necessary vertice coordinates. */ static void * warp_wcsalign_init_convert(void *in_prm) { /* Low-level definitions to be done first. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; gal_warp_wcsalign_t *wa = (gal_warp_wcsalign_t *)tprm->params; /* Higher-level variables. */ gal_data_t *vertices=NULL; double *xarr=wa->vertices->array; int quietmmap=wa->vertices->quietmmap; double *yarr=wa->vertices->next->array; size_t minmapsize=wa->vertices->minmapsize; size_t first, size, nt=wa->numthreads, vsize=wa->vertices->size; /* WCSLIB's conversion functions write intermediate processing steps in the 'wcsprm', so each thread should use its own copy. */ struct wcsprm *iwcs=gal_wcs_copy(wa->input->wcs); struct wcsprm *owcs=gal_wcs_copy(wa->output->wcs); /* Find the first vertice index to use in this thread. For the last thread, the size will not be pre-defined. */ size = vsize/nt; first = vsize/nt*tprm->id; if(tprm->id==nt-1 && nt>1) size=vsize-(nt-1)*size; /* For a check: printf("%s: thread-%zu: %zu, %zu\n", __func__, tprm->id, first, size); */ /* Allocate the non-allocated vertices table for this thread. */ gal_list_data_add_alloc(&vertices, xarr+first, GAL_TYPE_FLOAT64, 1, &size, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); gal_list_data_add_alloc(&vertices, yarr+first, GAL_TYPE_FLOAT64, 1, &size, NULL, 0, minmapsize, quietmmap, NULL, NULL, NULL); gal_list_data_reverse(&vertices); /* '_add' is last-in-first-out. */ /* Convert the coordinates. */ gal_wcs_img_to_world(vertices, owcs, 1); gal_wcs_world_to_img(vertices, iwcs, 1); /* Clean up: since the 'array' pointer is within a larger allocated array, we shouldn't free it when freeing the table, so we'll set it to NULL. */ vertices->array=vertices->next->array=NULL; gal_list_data_free(vertices); gal_wcs_free(iwcs); gal_wcs_free(owcs); /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* Determine the final image size and allocate the output array accordingly. 'is0' indicates number of rows available in the input fits image, while 'is1' indicates nummber of columns. The same goes for 'os0' and 'os1'. See the following figure: +------------------------+ / | | | | N | | | ^ | | | | | is0 < | | | | | E <-----+ | | | | | | input image | \ | | +------------------------+ \__________ ___________/ v is1 NOTE: please keep in mind that dsize[1] is NAXIS1 and dsize[0] is NAXIS2 in FITS format. In preparations, 'pcrn' is of type 'gal_data_t' linked lists. The first list holds RA coords, and the next is Dec coords. This variable is filled with the outer-most pixel coordinates. The purpose of this variable is to hold the min and max RA and Dec coordinates 'temporarily', so we can determine the output image size later. nhcrn and nvcrn: 'nhcrn' stands for number of horizontal corners, and similarly 'nvcrn' stands for number of vertical corners. Note that number of 'corners' is different from number of 'pixels'. Each pixel has many corners. Also bear in mind, to keep from counting repeated corners on the image edges, we let the horizontal corners devour the first and last vertical corners. See the following figure: hc6 hc7 hc8 hc9 hc10 +-----+-----+-----+-----+ / | | | | img: 4x3 | | x vc2 x vc4 is0=3 | | N | | | ^ | | x vc1 | x vc3 | | E <---+ | \ | | +-----+-----+-----+-----+ hc1 hc2 hc3 hc4 hc5 \_____________________/ is1=4 In the example above, for an image of 4x3, there will be 5 horizontal and 2 vertical corners in each axis, hence we would have 10 horizontal and 4 vertical corners: 'nhcrn=2*(is1+1)' and 'nvcrn=2*(is0-1)'. The total number of corners will be: 'nhcrn+nvcrn=2*(is0-1)+2*(is1+1)=2*(is0+is1)=2*(4+3)=14'. After finding out the min and max RA and Decs, the 'pcrn' is projected back to pixel coordinates. */ void gal_warp_wcsalign_init(gal_warp_wcsalign_t *wa) { gal_data_t *output=NULL; int quietmmap=wa->input->quietmmap; size_t minmapsize=wa->input->minmapsize, *dsize=NULL; /* Run a sanity check on the input parameters and initialize the output image. */ warp_wcsalign_init_params(wa, __func__); /* Create the check maximum fraction covered dataset if asked to. */ output=wa->output; dsize=output->dsize; if(wa->checkmaxfrac) output->next=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 2, dsize, wa->twcs, 0, minmapsize, quietmmap, GAL_WARP_OUTPUT_NAME_MAXFRAC, NULL, NULL); /* Set up the output image corners in pixel coords. */ warp_wcsalign_init_vertices(wa); /* Project the output image corners to the input image pixel coords. We only want one job per thread, so the number of jobs and the number of threads are the same. */ gal_threads_spin_off(warp_wcsalign_init_convert, wa, wa->output->size, wa->numthreads, wa->input->minmapsize, wa->input->quietmmap); /* Now that the output image is ready, initialize the helper internal variables for future processing. */ warp_wcsalign_init_internals(wa); } void gal_warp_wcsalign_onpix(gal_warp_wcsalign_t *wa, size_t ind) { size_t ic, temp, numinput=0; gal_data_t *input=wa->input; gal_data_t *output=wa->output; double xmin, xmax, ymin, ymax; long xstart, ystart, xend, yend, x, y; /* Might be negative */ double filledarea, v, *ocrn=NULL, pcrn[8], opixarea; size_t numcrn=0; size_t ncrn=wa->ncrn; size_t is0=input->dsize[0]; size_t is1=input->dsize[1]; double *inputarr=input->array; double *outputarr=output->array; double ccrn[GAL_POLYGON_MAX_CORNERS], area; double *maxfrac=output->next ? output->next->array : NULL; /* Initialize if asked for each pixel's maximum coverage fraction. */ if(maxfrac) maxfrac[ind]=-DBL_MAX; /* Initialize the output pixel value: */ outputarr[ind] = filledarea = 0.0f; if( wa->isccw==1 ) ocrn=warp_pixel_perimeter_cw(wa, ind); else if( wa->isccw==0 ) ocrn=warp_pixel_perimeter_ccw(wa, ind); else error(EXIT_FAILURE, 0, "a bug! the code %d is not recognized as " "a valid rotation orientation in " "'gal_polygon_is_counterclockwise', this is not your fault, " "something in the programming has gone wrong. Please contact " "us at %s so we can correct it", wa->isccw, PACKAGE_BUGREPORT); /* Find overlapping pixels. */ xmin = DBL_MAX; ymin = DBL_MAX; xmax = -DBL_MAX; ymax = -DBL_MAX; for(ic=ncrn; ic--;) { temp=ic*2; if(xmin > ocrn[ temp ]) { xmin = ocrn[ temp ]; } if(xmax < ocrn[ temp ]) { xmax = ocrn[ temp ]; } if(ymin > ocrn[ temp+1 ]) { ymin = ocrn[ temp+1 ]; } if(ymax < ocrn[ temp+1 ]) { ymax = ocrn[ temp+1 ]; } } /* Start and end in both dimensions. */ xstart = GAL_DIMENSION_NEARESTINT_HALFHIGHER( xmin ); ystart = GAL_DIMENSION_NEARESTINT_HALFHIGHER( ymin ); xend = GAL_DIMENSION_NEARESTINT_HALFLOWER( xmax ) + 1; yend = GAL_DIMENSION_NEARESTINT_HALFLOWER( ymax ) + 1; /* Check which input pixels we are covering. */ for(y=ystart;y<yend;++y) { /* If the pixel isn't in the image (note that the pixel coordinates start from 1), skip this pixel. */ if( y<1 || y>is0 ) continue; /* Y of base pixel vertices, in pixel coords. */ pcrn[1]=y-0.5f; pcrn[3]=y-0.5f; pcrn[5]=y+0.5f; pcrn[7]=y+0.5f; for(x=xstart;x<xend;++x) { if( x<1 || x>is1 ) continue; /* X of base pixel vertices, in pixel coords. */ pcrn[0]=x-0.5f; pcrn[2]=x+0.5f; pcrn[4]=x+0.5f; pcrn[6]=x-0.5f; /* Read the value of the input pixel. */ v=inputarr[(y-1)*is1+x-1]; /* Find the overlapping (clipped) polygon and its area. In theory, instead of 'gal_polygon_area_flat', we should be using the spherical polygon area ('gal_polygon_area_flat'). But the area that is calculate here is not used in an absolute sense: it is only relative for comparison with other input pixels that overlap with this output pixel. Therefore, because the flat area calculation is faster, we'll suffice to that unless we discover there is any problem with it. */ numcrn=0; /* initialize it. */ gal_polygon_clip(ocrn, ncrn, pcrn, 4, ccrn, &numcrn); area=gal_polygon_area_flat(ccrn, numcrn); /* Write each pixel's maximum coverage fraction if asked. */ if( maxfrac ) maxfrac[ind] = fmax(area, maxfrac[ind]); /* Add the fractional value of this pixel. If this output pixel covers a NaN pixel in the input grid, then calculate the area of this NaN pixel to account for it later. */ if( !isnan(v) ) { numinput+=1; filledarea+=area; outputarr[ind]+=v*area; /* Check printf("Check: numinput %zu filledarea %f " "outputarr[%zu]=%f\n", filledarea, ind, outputarr[ind]); */ } } } /* Replace untouched pixels with NAN in the 'maxfrac' array. */ if( maxfrac && maxfrac[ind]==-DBL_MAX ) maxfrac[ind]=NAN; /* See if the pixel value should be set to NaN or not (because of not enough coverage). Note that 'ocrn' is sorted in anti-clockwise order already. For a description of why we are not using 'gal_polygon_area_sky', see the comment above the previous call to 'gal_polygon_area_flat' above. */ opixarea=gal_polygon_area_flat(ocrn, ncrn); if( numinput && filledarea/opixarea < wa->coveredfrac-1e-5) numinput=0; /* Write the final value and return. */ if( numinput==0 ) outputarr[ind]=NAN; /* Clean up. */ free(ocrn); } void * gal_warp_wcsalign_onthread(void *inparam) { size_t i, ind; struct gal_threads_params *tprm=(struct gal_threads_params *)inparam; gal_warp_wcsalign_t *wa=(gal_warp_wcsalign_t *)tprm->params; /* Loop over pixels given from the 'warp' function. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { ind=tprm->indexs[i]; gal_warp_wcsalign_onpix(wa, ind); } /* Wait for all the other threads to finish, then return. */ if(tprm->b) { pthread_barrier_wait(tprm->b); } return NULL; } /* Helper function that returns an empty set of the wcsalign data structure to prevent using uninitialized variables without warnings. Please note if you are not using this template to set 'gal_warp_wcsalign_t' values, you MUST pass NULL to unused pointers at least. */ gal_warp_wcsalign_t gal_warp_wcsalign_template() { gal_warp_wcsalign_t wa; /* Initialize pointers with NULL. */ wa.twcs=NULL; wa.cdelt=NULL; wa.ctype=NULL; wa.input=NULL; wa.center=NULL; wa.output=NULL; wa.vertices=NULL; wa.widthinpix=NULL; /* Initialize values. */ wa.checkmaxfrac=0; wa.isccw=GAL_BLANK_INT; wa.v0=GAL_BLANK_SIZE_T; wa.gcrn=GAL_BLANK_SIZE_T; wa.ncrn=GAL_BLANK_SIZE_T; wa.nhor=GAL_BLANK_SIZE_T; wa.numthreads=GAL_BLANK_SIZE_T; wa.coveredfrac=GAL_BLANK_FLOAT64; wa.edgesampling=GAL_BLANK_SIZE_T; return wa; } /* Clean up the internally allocated variables from the 'wa' struct. */ void gal_warp_wcsalign_free(gal_warp_wcsalign_t *wa) { gal_list_data_free(wa->vertices); wa->vertices=NULL; } /* Finalize the output 'gal_data_t' image in 'wa->output'. */ void gal_warp_wcsalign(gal_warp_wcsalign_t *wa) { /* Calculate and allocate the output image size and WCS. */ gal_warp_wcsalign_init(wa); /* Fill the output image. */ gal_threads_spin_off(gal_warp_wcsalign_onthread, wa, wa->output->size, wa->numthreads, wa->input->minmapsize, wa->input->quietmmap); /* Clean up the internally allocated variables. */ gal_warp_wcsalign_free(wa); } static void * warp_pixelarea_onthread(void *inparam) { /* Thread variables. */ struct gal_threads_params *tprm=(struct gal_threads_params *)inparam; gal_warp_wcsalign_t *wa=(gal_warp_wcsalign_t *)tprm->params; /* Low-level variables. */ size_t i, ind; double area, *ocrn=NULL, *outputarr=wa->output->array; double *(*warp_pixel_perimeter)(gal_warp_wcsalign_t *, size_t)=NULL; /* Call the correct function based on the output image orientation. */ if( wa->isccw==1 ) warp_pixel_perimeter=warp_pixel_perimeter_cw; else if( wa->isccw==0 ) warp_pixel_perimeter=warp_pixel_perimeter_ccw; else error(EXIT_FAILURE, 0, "a bug! the code %d is not recognized as " "a valid rotation orientation in " "'gal_polygon_is_counterclockwise', this is not your fault, " "something in the programming has gone wrong. Please contact " "us at %s so we can correct it", wa->isccw, PACKAGE_BUGREPORT); /* Loop over pixels given from the 'warp' function. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* Pixel to use. */ ind=tprm->indexs[i]; /* Fix the vertice ordering, crucial for calculating the area. */ ocrn=warp_pixel_perimeter(wa, ind); /* Now that the vertices are in CCW order, calculate the area. */ area=gal_polygon_area_sky(ocrn, wa->ncrn); outputarr[ind]=area; /* Clean up the allocated array. */ free(ocrn); } /* Wait for all the other threads to finish, then return. */ if(tprm->b) { pthread_barrier_wait(tprm->b); } return NULL; } /* Calculate input pixel area covering the sky and write it to output. This function has a debugging nature and is not used through the aligning process. */ void gal_warp_pixelarea(gal_warp_wcsalign_t *wa) { struct wcsprm *wcs; gal_data_t *input=wa->input; double crval[2]={180.0f,0.0f}; /* Basic sanity check. */ warp_check_basic_params(wa, __func__); /* Create the output dataset. */ wa->output=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, input->ndim, input->dsize, input->wcs, 0, input->minmapsize, input->quietmmap, "PIX-AREA", NULL, NULL); /* Create the vertices based on the edgesampling value. */ warp_wcsalign_init_vertices(wa); warp_wcsalign_init_internals(wa); /* For a check (before conversion). size_t i; double *x=wa->vertices->array; double *y=wa->vertices->next->array; for(i=0;i<wa->vertices->size;++i) printf("%-20.15f %-20.15f\n", x[i], y[i]); */ /* Change the CRVALs to be on 0 and 180 (this helps to avoid issues with an image passing the RA=0.0, or high declination problems. */ wcs=gal_wcs_copy_new_crval(input->wcs, crval); /* Convert the output pixel-coordinate vertices to WCS and free the temporary WCS. */ gal_wcs_img_to_world(wa->vertices, wcs, 1); gal_wcs_free(wcs); /* For a check (after conversion). size_t j; double *ra=wa->vertices->array; double *dec=wa->vertices->next->array; for(j=0;j<wa->vertices->size;++j) printf("%-20.15f %-20.15f\n", ra[j], dec[j]); */ /* Calculate pixel area on WCS and write to output. */ gal_threads_spin_off(warp_pixelarea_onthread, wa, wa->output->size, wa->numthreads, input->minmapsize, input->quietmmap); /* Clean up. */ gal_warp_wcsalign_free(wa); } ���������������������������������������������������gnuastro-0.22/lib/wcs.c�����������������������������������������������������������������������������0000644�0001750�0001750�00000317240�14551337306�010504� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Functions to that only use WCSLIB functionality. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <time.h> #include <errno.h> #include <error.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <assert.h> #include <gsl/gsl_linalg.h> #include <wcslib/wcsmath.h> #include <wcslib/wcsprintf.h> #include <gnuastro/wcs.h> #include <gnuastro/tile.h> #include <gnuastro/fits.h> #include <gnuastro/pointer.h> #include <gnuastro/dimension.h> #include <gnuastro/statistics.h> #include <gnuastro/permutation.h> #include <gnuastro-internal/checkset.h> #if GAL_CONFIG_HAVE_WCSLIB_DIS_H #include <wcslib/dis.h> #include <gnuastro-internal/wcsdistortion.h> #endif /************************************************************* *********** Macros *********** *************************************************************/ int gal_wcs_distortion_name_to_id(char *distortion) { if( !strcmp(distortion,"TPD") ) return GAL_WCS_DISTORTION_TPD; else if( !strcmp(distortion,"SIP") ) return GAL_WCS_DISTORTION_SIP; else if( !strcmp(distortion,"TPV") ) return GAL_WCS_DISTORTION_TPV; else if( !strcmp(distortion,"DSS") ) return GAL_WCS_DISTORTION_DSS; else if( !strcmp(distortion,"WAT") ) return GAL_WCS_DISTORTION_WAT; else error(EXIT_FAILURE, 0, "WCS distortion name '%s' not recognized, " "currently recognized names are 'TPD', 'SIP', 'TPV', 'DSS' and " "'WAT'", distortion); /* Control should not reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); return GAL_WCS_DISTORTION_INVALID; } char * gal_wcs_distortion_name_from_id(int distortion) { /* Return the proper literal string. */ switch(distortion) { case GAL_WCS_DISTORTION_TPD: return "TPD"; case GAL_WCS_DISTORTION_SIP: return "SIP"; case GAL_WCS_DISTORTION_TPV: return "TPV"; case GAL_WCS_DISTORTION_DSS: return "DSS"; case GAL_WCS_DISTORTION_WAT: return "WAT"; default: error(EXIT_FAILURE, 0, "WCS distortion id '%d' isn't recognized", distortion); } /* Control should not reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); return NULL; } int gal_wcs_coordsys_name_to_id(char *coordsys) { if( !strcmp(coordsys,"eq-j2000") ) return GAL_WCS_COORDSYS_EQJ2000; else if( !strcmp(coordsys,"eq-b1950") ) return GAL_WCS_COORDSYS_EQB1950; else if( !strcmp(coordsys,"ec-j2000") ) return GAL_WCS_COORDSYS_ECJ2000; else if( !strcmp(coordsys,"ec-b1950") ) return GAL_WCS_COORDSYS_ECB1950; else if( !strcmp(coordsys,"galactic") ) return GAL_WCS_COORDSYS_GALACTIC; else if( !strcmp(coordsys,"supergalactic") ) return GAL_WCS_COORDSYS_SUPERGALACTIC; else error(EXIT_FAILURE, 0, "WCS coordinate system name '%s' not " "recognized, currently recognized names are 'eq-j2000', " "'eq-b1950', 'galactic' and 'supergalactic'", coordsys); /* Control should not reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); return GAL_WCS_COORDSYS_INVALID; } uint8_t gal_wcs_projection_name_to_id(char *str) { if( !strcmp(str, "AZP") ) return GAL_WCS_PROJECTION_AZP; else if( !strcmp(str, "SZP") ) return GAL_WCS_PROJECTION_SZP; else if( !strcmp(str, "TAN") ) return GAL_WCS_PROJECTION_TAN; else if( !strcmp(str, "STG") ) return GAL_WCS_PROJECTION_STG; else if( !strcmp(str, "SIN") ) return GAL_WCS_PROJECTION_SIN; else if( !strcmp(str, "ARC") ) return GAL_WCS_PROJECTION_ARC; else if( !strcmp(str, "ZPN") ) return GAL_WCS_PROJECTION_ZPN; else if( !strcmp(str, "ZEA") ) return GAL_WCS_PROJECTION_ZEA; else if( !strcmp(str, "AIR") ) return GAL_WCS_PROJECTION_AIR; else if( !strcmp(str, "CYP") ) return GAL_WCS_PROJECTION_CYP; else if( !strcmp(str, "CEA") ) return GAL_WCS_PROJECTION_CEA; else if( !strcmp(str, "CAR") ) return GAL_WCS_PROJECTION_CAR; else if( !strcmp(str, "MER") ) return GAL_WCS_PROJECTION_MER; else if( !strcmp(str, "SFL") ) return GAL_WCS_PROJECTION_SFL; else if( !strcmp(str, "PAR") ) return GAL_WCS_PROJECTION_PAR; else if( !strcmp(str, "MOL") ) return GAL_WCS_PROJECTION_MOL; else if( !strcmp(str, "AIT") ) return GAL_WCS_PROJECTION_AIT; else if( !strcmp(str, "COP") ) return GAL_WCS_PROJECTION_COP; else if( !strcmp(str, "COE") ) return GAL_WCS_PROJECTION_COE; else if( !strcmp(str, "COD") ) return GAL_WCS_PROJECTION_COD; else if( !strcmp(str, "COO") ) return GAL_WCS_PROJECTION_COO; else if( !strcmp(str, "BON") ) return GAL_WCS_PROJECTION_BON; else if( !strcmp(str, "PCO") ) return GAL_WCS_PROJECTION_PCO; else if( !strcmp(str, "TSC") ) return GAL_WCS_PROJECTION_TSC; else if( !strcmp(str, "CSC") ) return GAL_WCS_PROJECTION_CSC; else if( !strcmp(str, "QSC") ) return GAL_WCS_PROJECTION_QSC; else if( !strcmp(str, "HPX") ) return GAL_WCS_PROJECTION_HPX; else if( !strcmp(str, "XPH") ) return GAL_WCS_PROJECTION_XPH; else return GAL_WCS_PROJECTION_INVALID; } char * gal_wcs_projection_name_from_id(uint8_t id) { switch(id) { case GAL_WCS_PROJECTION_AZP: return "AZP"; case GAL_WCS_PROJECTION_SZP: return "SZP"; case GAL_WCS_PROJECTION_TAN: return "TAN"; case GAL_WCS_PROJECTION_STG: return "STG"; case GAL_WCS_PROJECTION_SIN: return "SIN"; case GAL_WCS_PROJECTION_ARC: return "ARC"; case GAL_WCS_PROJECTION_ZPN: return "ZPN"; case GAL_WCS_PROJECTION_ZEA: return "ZEA"; case GAL_WCS_PROJECTION_AIR: return "AIR"; case GAL_WCS_PROJECTION_CYP: return "CYP"; case GAL_WCS_PROJECTION_CEA: return "CEA"; case GAL_WCS_PROJECTION_CAR: return "CAR"; case GAL_WCS_PROJECTION_MER: return "MER"; case GAL_WCS_PROJECTION_SFL: return "SFL"; case GAL_WCS_PROJECTION_PAR: return "PAR"; case GAL_WCS_PROJECTION_MOL: return "MOL"; case GAL_WCS_PROJECTION_AIT: return "AIT"; case GAL_WCS_PROJECTION_COP: return "COP"; case GAL_WCS_PROJECTION_COE: return "COE"; case GAL_WCS_PROJECTION_COD: return "COD"; case GAL_WCS_PROJECTION_COO: return "COO"; case GAL_WCS_PROJECTION_BON: return "BON"; case GAL_WCS_PROJECTION_PCO: return "PCO"; case GAL_WCS_PROJECTION_TSC: return "TSC"; case GAL_WCS_PROJECTION_CSC: return "CSC"; case GAL_WCS_PROJECTION_QSC: return "QSC"; case GAL_WCS_PROJECTION_HPX: return "HPX"; case GAL_WCS_PROJECTION_XPH: return "XPH"; default: return GAL_BLANK_STRING; } /* If control reaches here there is a bug! */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to fix " "the problem. Control should not have reached this part of " "the function", __func__, PACKAGE_BUGREPORT); return GAL_BLANK_STRING; } /************************************************************* *********** Read WCS *********** *************************************************************/ /* It may happen that both the PC+CDELT and CD matrices are present in a file. But in some cases, they may not result in the same rotation matrix. So we need to let the user know about this problem with the FITS file, and as a default behavior, we'll disable the PC matrix (which also needs a CDELT matrix (that may not have been written). */ static void wcs_read_correct_pc_cd(struct wcsprm *wcs) { int removepc=0; size_t i, j, naxis=wcs->naxis; double *cdfrompc=gal_pointer_allocate(GAL_TYPE_FLOAT64, naxis*naxis, 0, __func__, "cdfrompc"); /* A small sanity check. */ if(wcs->cdelt==NULL) error(EXIT_FAILURE, 0, "%s: the WCS structure has no 'cdelt' array, " "please contact us at %s to see what the problem is", __func__, PACKAGE_BUGREPORT); /* Multiply the PC matrix with the CDELT matrix. */ for(i=0;i<naxis;++i) for(j=0;j<naxis;++j) cdfrompc[i*naxis+j] = wcs->cdelt[i] * wcs->pc[i*naxis+j]; /* Make sure the file's CD matrix is the same as the CD matrix that is derived from the PC+CDELT matrix above. We'll divide the difference by the samller value and if the result is larger than 1e-6, then we'll consider it different. */ for(i=0;i<naxis*naxis;++i) if( fabs( wcs->cd[i] - cdfrompc[i] ) / ( fabs(wcs->cd[i]) < fabs(cdfrompc[i]) ? fabs(wcs->cd[i]) : fabs(cdfrompc[i]) ) > 1e-5 ) { removepc=1; break; } /* If the two matrices are different, then print the warning and remove the PC+CDELT matrices to only keep the CD matrix. */ if(removepc) { /* Let the user know that there is a problem in the file. */ error(EXIT_SUCCESS, 0, "the WCS structure has both the PC matrix " "and CD matrix. However, the two don't match and there is " "no way to know which one was intended by the creator of " "this file. THIS PROGRAM WILL ASSUME THE CD MATRIX AND " "CONTINUE. BUT THIS MAY BE WRONG! To avoid confusion and " "wrong results, its best to only use one of them in your " "FITS file. You can use Gnuastro's 'astfits' program to " "remove any that you want (please run 'info astfits' for " "more). For example if you want to delete the PC matrix " "you can use this command: 'astfits file.fits --delete=PC1_1 " "--delete=PC1_2 --delete=PC2_1 --delete=PC2_2'"); /* Set the PC matrix to be equal to the CD matrix, and set the CDELTs to 1. */ for(i=0;i<naxis;++i) wcs->cdelt[i] = 1.0f; for(i=0;i<naxis*naxis;++i) wcs->pc[i] = wcs->cd[i]; } /* Clean up. */ free(cdfrompc); } /* For the TPV, TNX and ZPX distortions, WCSLIB can't deal with the CDELT keys properly and its better to use the CD matrix instead, this function will check for this and return 1 if a CD matrix should be used (over-riding the user's desired matrix if necessary). */ static int wcs_use_cd_for_distortion(struct wcsprm *wcs) { return ( wcs && wcs->lin.disseq && ( !strcmp( wcs->lin.disseq->dtype[1], "TPV") || !strcmp(wcs->lin.disseq->dtype[1], "TNX") || !strcmp(wcs->lin.disseq->dtype[1], "ZPX") ) ); } /* Read the WCS information from the header. Unfortunately, WCS lib is not thread safe, so it needs a mutex. In case you are not using multiple threads, just pass a NULL pointer as the mutex. After you finish with this WCS, you should free the space with: status = wcsvfree(&nwcs,&wcs); If the WCS structure is not recognized, then this function will return a NULL pointer for the wcsprm structure and a zero for nwcs. It will also report the fact to the user in stderr. =================================== WARNING: wcspih IS NOT THREAD SAFE! =================================== Don't call this function within a thread or use a mutex. */ struct wcsprm * gal_wcs_read_fitsptr(fitsfile *fptr, int linearmatrix, size_t hstartwcs, size_t hendwcs, int *nwcs) { /* Declaratins: */ size_t i, fulllen; int nkeys=0, status=0; int sumcheck, nocomments; struct wcsprm *wcs=NULL; char *fullheader, *to, *from; int fixstatus[NWCSFIX]={0};/* For the various wcsfix checks. */ int relax = WCSHDR_all; /* Macro: use all informal WCS extensions. */ int ctrl = 0; /* Don't report why a keyword wasn't used. */ int nreject = 0; /* Number of keywords rejected for syntax. */ int fixctrl = 1; /* Correct non-standard units in wcsfix. */ void *fixnaxis = NULL; /* For now disable cylfix() with this */ /* (because it depends on image size). */ /* In case the user has asked to limit the HDU keyword cards to use for WCS reading, also count comment/history/empty lines (so the lines here correspond to the output of 'astfits image.fits -h1'). But if no limitation is requested, avoid those lines to make the processing easier for WCSLIB. */ nocomments = hendwcs>hstartwcs ? 0 : 1; /* CFITSIO function: */ if( fits_hdr2str(fptr, nocomments, NULL, 0, &fullheader, &nkeys, &status) ) gal_fits_io_error(status, NULL); /* Only consider the header keywords in the current range: */ if(hendwcs>hstartwcs) { /* Mark the last character in the desired region. */ fullheader[hendwcs*(FLEN_CARD-1)]='\0'; /* For a check: printf("%s\n", fullheader); */ /* Shift all the characters to the start of the string. */ if(hstartwcs) /* hstartwcs!=0 */ { to=fullheader; from=&fullheader[hstartwcs*(FLEN_CARD-1)-1]; while(*from++!='\0') *to++=*from; } nkeys=hendwcs-hstartwcs; /* For a check: printf("\n\n\n###############\n\n\n\n\n\n"); printf("%s\n", &fullheader[1*(FLEN_CARD-1)]); exit(0); */ } /* WCSlib function to parse the FITS headers. */ status=wcspih(fullheader, nkeys, relax, ctrl, &nreject, nwcs, &wcs); if(status) { error(EXIT_SUCCESS, 0, "%s: WCSLIB Warning: wcspih ERROR %d: %s", __func__, status, wcs_errmsg[status]); wcs=NULL; *nwcs=0; } /* Set the internal structure: */ if(wcs) { /* It may happen that the WCS-related keyword values are stored as strings (they have single-quotes around them). In this case, WCSLIB will read the CRPIX and CRVAL values as zero. When this happens do a small check and abort, while informing the user about the problem. */ sumcheck=0; for(i=0;i<wcs->naxis;++i) {sumcheck += (wcs->crval[i]==0.0f) + (wcs->crpix[i]==0.0f);} if(sumcheck==wcs->naxis*2) { /* We only care about the first set of characters in each 80-character row, so we don't need to parse the last few characters anyway. */ fulllen=strlen(fullheader)-12; for(i=0;i<fulllen;++i) if( strncmp(fullheader+i, "CRVAL1 = '", 11) == 0 ) fprintf(stderr, "WARNING: WCS Keyword values are not " "numbers.\n\n" "WARNING: The values to the WCS-related keywords " "are enclosed in single-quotes. In the FITS " "standard this is how string values are stored, " "therefore WCSLIB is unable to read them AND WILL " "PUT ZERO IN THEIR PLACE (creating a wrong WCS in " "the output). Please update the respective keywords " "of the input to be numbers (see next line).\n\n" "WARNING: You can do this with Gnuastro's 'astfits' " "program and the '--update' option. The minimal WCS " "keywords that need a numerical value are: " "'CRVAL1', 'CRVAL2', 'CRPIX1', 'CRPIX2', 'EQUINOX' " "and 'CD%%_%%' (or 'PC%%_%%', where the %% are " "integers), please see the FITS standard, and " "inspect your FITS file to identify the full set " "of keywords that you need correct (for example " "PV%%_%% keywords).\n\n"); } /* CTYPE is a mandatory WCS keyword, so if it hasn't been given (its '\0'), then the headers didn't have a WCS structure. However, WCSLIB still fills in the basic information (for example the dimensionality of the dataset). */ if(wcs->ctype[0][0]=='\0') { wcsfree(wcs); wcs=NULL; *nwcs=0; } else { /* For a check (we can't use 'wcsprt(wcs)' because this WCS isn't yet initialized). printf("flag: %d\n", wcs->flag); printf("NAXIS: %d\n", wcs->naxis); printf("CRPIX: "); for(i=0;i<wcs->naxis;++i) { printf("%g, ", wcs->crpix[i]); } printf("\n"); printf("PC: "); for(i=0;i<wcs->naxis*wcs->naxis;++i) { printf("%g, ", wcs->pc[i]); } printf("\n"); printf("CDELT: "); for(i=0;i<wcs->naxis;++i) { printf("%g, ", wcs->cdelt[i]);} printf("\n"); printf("CD: "); for(i=0;i<wcs->naxis*wcs->naxis;++i) { printf("%g, ", wcs->cd[i]); } printf("\n"); printf("CRVAL: "); for(i=0;i<wcs->naxis;++i) { printf("%g, ", wcs->crval[i]); } printf("\n"); printf("CUNIT: "); for(i=0;i<wcs->naxis;++i) { printf("%s, ", wcs->cunit[i]); } printf("\n"); printf("CTYPE: "); for(i=0;i<wcs->naxis;++i) { printf("%s, ", wcs->ctype[i]); } printf("\n"); printf("LONPOLE: %f\n", wcs->lonpole); printf("LATPOLE: %f\n", wcs->latpole); */ /* Some datasets may use 'angstroms' (not case-sensitive) in the third dimension instead of the standard 'angstrom' (note the differing 's'). In this case WCSLIB (atleast until version 7.3) will not recognize it. We will therefore manually remove the 's' before feeding the WCS structure to WCSLIB. */ if( wcs->naxis==3 && strlen(wcs->cunit[2])==9 && !strncasecmp(wcs->cunit[2], "angstroms", 9) ) wcs->cunit[2][8]='\0'; /* Fix non-standard WCS features. */ if( wcsfix(fixctrl, fixnaxis, wcs, fixstatus) ) { if(fixstatus[CDFIX]) error(0, 0, "%s: (warning) wcsfix status for cdfix: %d", __func__, fixstatus[CDFIX]); if(fixstatus[DATFIX]) error(0, 0, "%s: (warning) wcsfix status for datfix: %d", __func__, fixstatus[DATFIX]); #if GAL_CONFIG_HAVE_WCSLIB_OBSFIX if(fixstatus[OBSFIX]) error(0, 0, "%s: (warning) wcsfix status for obsfix: %d", __func__, fixstatus[OBSFIX]); #endif if(fixstatus[UNITFIX]) error(0, 0, "%s: (warning) wcsfix status for unitfix: %d", __func__, fixstatus[UNITFIX]); if(fixstatus[SPCFIX]) error(0, 0, "%s: (warning) wcsfix status for spcfix: %d", __func__, fixstatus[SPCFIX]); if(fixstatus[CELFIX]) error(0, 0, "%s: (warning) wcsfix status for celfix: %d", __func__, fixstatus[CELFIX]); if(fixstatus[CYLFIX]) error(0, 0, "%s: (warning) wcsfix status for cylfix: %d", __func__, fixstatus[CYLFIX]); } /* Enable wcserr if necessary (can help in debugging situations when the default error message isn't enough). If you confront an error, un-comment the two lines below and put 'wcsperr(wcs,NULL);' after the problematic WCSLIB command. This will print a trace-back of the cause. wcserr_enable(1); wcsprintf_set(stderr); */ /* Set the WCS structure. */ status=wcsset(wcs); if(status) { error(EXIT_SUCCESS, 0, "%s: WCSLIB warning: wcsset " "error %d: %s", __func__, status, wcs_errmsg[status]); wcsfree(wcs); wcs=NULL; *nwcs=0; } /* A correctly useful WCS is present. */ else { /* According to WCSLIB in discussing 'altlin': "If none of these bits are set the PCi_ja representation results, i.e. wcsprm::pc and wcsprm::cdelt will be used as given". In effect it will also set the PC matrix to unity. So we can safely set it to '1' here because some parts of Gnuastro will later look into this. */ if(wcs->altlin==0) wcs->altlin=1; /* If both the PC and CD matrix have been given, the first two bits of 'altlin' will be '1'. We need to make sure they are the same matrix, and let the user know if they aren't. */ if( (wcs->altlin & 1) && (wcs->altlin & 2) ) wcs_read_correct_pc_cd(wcs); } } } /* If the distortion requires a CD matrix, or if the user wants it, do the conversion here, otherwise, make sure the PC matrix is used. */ if(wcs_use_cd_for_distortion(wcs) \ || linearmatrix==GAL_WCS_LINEAR_MATRIX_CD) gal_wcs_to_cd(wcs); else gal_wcs_decompose_pc_cdelt(wcs); /* Clean up and return. */ status=0; if (fits_free_memory(fullheader, &status) ) gal_fits_io_error(status, "problem in freeing the memory used to " "keep all the headers"); return wcs; } struct wcsprm * gal_wcs_read(char *filename, char *hdu, int linearmatrix, size_t hstartwcs, size_t hendwcs, int *nwcs, char *hdu_option_name) { int status=0; fitsfile *fptr; struct wcsprm *wcs; /* Make sure we are dealing with a FITS file. */ if( gal_fits_file_recognized(filename) == 0 ) return NULL; /* Check HDU for realistic conditions: */ fptr=gal_fits_hdu_open_format(filename, hdu, 0, hdu_option_name); /* Read the WCS information: */ wcs=gal_wcs_read_fitsptr(fptr, linearmatrix, hstartwcs, hendwcs, nwcs); /* Close the FITS file and return. */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); return wcs; } struct wcsprm * gal_wcs_create(double *crpix, double *crval, double *cdelt, double *pc, char **cunit, char **ctype, size_t ndim, int linearmatrix) { size_t i; int status; struct wcsprm *wcs; double equinox=2000.0f; /* Allocate the memory necessary for the wcsprm structure. */ errno=0; wcs=malloc(sizeof *wcs); if(wcs==NULL) error(EXIT_FAILURE, errno, "%zu for wcs in preparewcs", sizeof *wcs); /* Initialize the structure (allocate all its internal arrays). */ wcs->flag=-1; if( (status=wcsini(1, ndim, wcs)) ) error(EXIT_FAILURE, 0, "wcsini error %d: %s", status, wcs_errmsg[status]); /* Fill in all the important WCS structure parameters. */ wcs->altlin = 0x1; wcs->equinox = equinox; for(i=0;i<ndim;++i) { wcs->crpix[i] = crpix[i]; wcs->crval[i] = crval[i]; wcs->cdelt[i] = cdelt[i]; if(cunit[i]) strcpy(wcs->cunit[i], cunit[i]); if(ctype[i]) strcpy(wcs->ctype[i], ctype[i]); } for(i=0;i<ndim*ndim;++i) wcs->pc[i]=pc[i]; /* Set up the wcs structure with the constants defined above. */ status=wcsset(wcs); if(status) error(EXIT_FAILURE, 0, "%s: wcsset error %d: %s", __func__, status, wcs_errmsg[status]); /* If a CD matrix is desired make it. */ if(linearmatrix==GAL_WCS_LINEAR_MATRIX_CD) gal_wcs_to_cd(wcs); /* Return the output WCS. */ return wcs; } void gal_wcs_free(struct wcsprm *wcs) { int status; /* If it is already NULL, then don't continue. */ if(wcs==NULL) return; /* Free the internal structure. */ status=wcsfree(wcs); if(status) error(EXIT_FAILURE, 0, "%s: WCSLIB wcsfree ERROR %d: %s", __func__, status, wcs_errmsg[status]); /* Free the actual structure. */ free(wcs); } /* Extract the dimension name from CTYPE. */ char * gal_wcs_dimension_name(struct wcsprm *wcs, size_t dimension) { size_t i; char *out; /* Make sure a WCS pointer actually exists. */ if(wcs==NULL) return NULL; /* Make sure the requested dimension is not larger than the number of dimensions in the WCS. */ if(dimension >= wcs->naxis) return NULL; /* Make a copy of the CTYPE value and set the first occurance of '-' to '\0', to avoid the projection type. */ gal_checkset_allocate_copy(wcs->ctype[dimension], &out); for(i=0;i<strlen(out);++i) if(out[i]=='-') out[i]='\0'; /* Return the output array. */ return out; } /************************************************************* *********** Write WCS *********** *************************************************************/ char * gal_wcs_write_wcsstr(struct wcsprm *wcs, int *nkeyrec) { char *wcsstr; int status=0; /* Finalize the linear transformation matrix. Note that some programs may have worked on the WCS. So even if 'altlin' is already 2, we'll just ensure that the final matrix is CD here. */ if(wcs->altlin==2 || wcs_use_cd_for_distortion(wcs)) gal_wcs_to_cd(wcs); else gal_wcs_decompose_pc_cdelt(wcs); /* Clean up small errors in the PC matrix and CDELT values. */ gal_wcs_clean_errors(wcs); /* Convert the WCS information to text. If there was an error, then free any allocated space and put zero on 'nkeyrec'. */ status=wcshdo(WCSHDO_safe, wcs, nkeyrec, &wcsstr); if(status) { error(0, 0, "%s: WARNING: WCSLIB error, no WCS in output.\n" "wcshdo ERROR %d: %s", __func__, status, wcs_errmsg[status]); if(wcsstr) free(wcsstr); *nkeyrec=0; wcsstr=NULL; } /* Return the string. */ return wcsstr; } void gal_wcs_write_in_fitsptr(fitsfile *fptr, struct wcsprm *wcs) { char *wcsstr; int nkeyrec=0; /* Convert the WCS structure into FITS keywords as a string. */ wcsstr=gal_wcs_write_wcsstr(wcs, &nkeyrec); /* Write the keywords into the FITS file. */ gal_fits_key_write_wcsstr(fptr, wcs, wcsstr, nkeyrec); free(wcsstr); } void gal_wcs_write(struct wcsprm *wcs, char *filename, char *extname, gal_fits_list_key_t *keylist, char *program_string, int freekeys) { int status=0; size_t ndim=0; fitsfile *fptr; long *naxes=NULL; /* Small sanity checks. */ if(wcs==NULL) error(EXIT_FAILURE, 0, "%s: input WCS is NULL", __func__); if( gal_fits_file_recognized(filename)==0 ) error(EXIT_FAILURE, 0, "%s: not a FITS suffix", filename); /* Open the file for writing. */ fptr=gal_fits_open_to_write(filename); /* Create the FITS file. */ fits_create_img(fptr, gal_fits_type_to_bitpix(GAL_TYPE_UINT8), ndim, naxes, &status); gal_fits_io_error(status, NULL); /* Remove the two comment lines put by CFITSIO. Note that in some cases, it might not exist. When this happens, the status value will be non-zero. We don't care about this error, so to be safe, we will just reset the status variable after these calls. */ fits_delete_key(fptr, "COMMENT", &status); fits_delete_key(fptr, "COMMENT", &status); status=0; /* If an extension name was requested, add it. */ if(extname) fits_write_key(fptr, TSTRING, "EXTNAME", extname, "", &status); /* Write the WCS structure. */ gal_wcs_write_in_fitsptr(fptr, wcs); /* Write all the headers and the version information (note that after writing the keywords they are automatically freed). */ gal_fits_key_list_title_add(&keylist, program_string, 0); gal_fits_key_write_in_ptr(keylist, fptr, freekeys); /* Close the FITS file. */ fits_close_file(fptr, &status); gal_fits_io_error(status, NULL); } /************************************************************* *********** Coordinate system *********** *************************************************************/ /* Identify the coordinate system of the WCS. */ int gal_wcs_coordsys_identify(struct wcsprm *wcs) { /* Equatorial (we are keeping the dash ('-') to make sure it is a standard). */ if ( !strncmp(wcs->ctype[0], "RA---", 5) && !strncmp(wcs->ctype[1], "DEC--", 5) ) { if ( !strncmp(wcs->radesys, "FK4", 3) ) return GAL_WCS_COORDSYS_EQB1950; else if ( !strncmp(wcs->radesys, "FK5", 3) ) return GAL_WCS_COORDSYS_EQJ2000; else error(EXIT_FAILURE, 0, "%s: the '%s' value for 'RADESYS' is " "not yet implemented! Please contact us at %s to " "implement it", __func__, wcs->radesys, PACKAGE_BUGREPORT); } /* Ecliptic. */ else if ( !strncmp(wcs->ctype[0], "ELON-", 5) && !strncmp(wcs->ctype[1], "ELAT-", 5) ) if ( !strncmp(wcs->radesys, "FK4", 3) ) return GAL_WCS_COORDSYS_ECB1950; else if ( !strncmp(wcs->radesys, "FK5", 3) ) return GAL_WCS_COORDSYS_ECJ2000; else error(EXIT_FAILURE, 0, "%s: the '%s' value for 'RADESYS' is " "not yet implemented! Please contact us at %s to " "implement it", __func__, wcs->radesys, PACKAGE_BUGREPORT); /* Galactic. */ else if ( !strncmp(wcs->ctype[0], "GLON-", 5) && !strncmp(wcs->ctype[1], "GLAT-", 5) ) return GAL_WCS_COORDSYS_GALACTIC; /* SuperGalactic. */ else if ( !strncmp(wcs->ctype[0], "SLON-", 5) && !strncmp(wcs->ctype[1], "SLAT-", 5) ) return GAL_WCS_COORDSYS_SUPERGALACTIC; /* Other. */ else error(EXIT_FAILURE, 0, "%s: the CTYPE values '%s' and '%s' are " "not yet implemented! Please contact us at %s to " "implement it", __func__, wcs->ctype[0], wcs->ctype[1], PACKAGE_BUGREPORT); /* Control should not reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); return GAL_WCS_COORDSYS_INVALID; } /* Set the pole coordinates (current values taken from the WCSLIB manual): lng2p1: longitude (in system 2) of the pole of system 1. lat2p1: latitude (in system 2) of the pole of system 1. lng1p2: longitude (in system 1) of the pole of system 2. Values from NED (inspired by WCSLIB manual's example). https://ned.ipac.caltech.edu/coordinate_calculator With the following constraints: - The "Observation epoch" is the same as "Equinox". - The "Position angle (East of North) is set to 0.0. longi (deg) latit (deg) OUTPUT INPUT ----- ----- ------ ----- (------------, -----------) B1950 equ. coords. of B1950 equ. pole. (180.31684301, 89.72174782) J2000 equ. coords. of B1950 equ. pole. (90.000000000, 66.55421111) B1950 ecl. coords. of B1950 equ. pole. (90.699521110, 66.56068919) J2000 ecl. coords. of B1950 equ. pole. (123.00000000, 27.40000000) Galactic coords. of B1950 equ. pole. (26.731537070, 15.64407736) Supgalactic coords. of B1950 equ. pole. (359.68621044, 89.72178502) B1950 equ. coords. of J2000 equ. pole. (------------, -----------) J2000 equ. coords. of J2000 equ. pole. (89.300755510, 66.55417728) B1950 ecl. coords. of J2000 equ. pole. (90.000000000, 66.56070889) J2000 ecl. coords. of J2000 equ. pole. (122.93200023, 27.12843056) Galactic coords. of J2000 equ. pole. (26.450516650, 15.70886131) Supgalactic coords. of J2000 equ. pole. (270.00000000, 66.55421111) B1950 equ. coords. of B1950 ecl. pole. (269.99920697, 66.55421892) J2000 equ. coords. of B1950 ecl. pole. (------------, -----------) B1950 ecl. coords. of B1950 ecl. pole. (267.21656404, 89.99350237) J2000 ecl. coords. of B1950 ecl. pole. (96.376479150, 29.81195400) Galactic coords. of B1950 ecl. pole. (33.378919140, 38.34766498) Supgalactic coords. of B1950 ecl. pole. (270.00099211, 66.56069675) B1950 equ. coords. of J2000 ecl. pole. (270.00000000, 66.56070889) J2000 equ. coords. of J2000 ecl. pole. (86.517962160, 89.99350236) B1950 ecl. coords. of J2000 ecl. pole. (------------, -----------) J2000 ecl. coords. of J2000 ecl. pole. (96.383958840, 29.81163604) Galactic coords. of J2000 ecl. pole. (33.376119480, 38.34154959) Supgalactic coords. of J2000 ecl. pole. (192.25000000, 27.40000000) B1950 equ. coords. of Galactic pole. (192.85949646, 27.12835323) J2000 equ. coords. of Galactic pole. (179.32094769, 29.81195400) B1950 ecl. coords. of Galactic pole. (180.02317894, 29.81153742) J2000 ecl. coords. of Galactic pole. (------------, -----------) Galactic coords. of Galactic pole. (90.000000000, 6.320000000) Supgalactic coords. of Galactic pole. (283.18940711, 15.64407736) B1950 equ. coords. of SupGalactic pole. (283.75420420, 15.70894043) J2000 equ. coords. of SupGalactic pole. (286.26975051, 38.34766498) B1950 ecl. coords. of SupGalactic pole. (286.96654469, 38.34158720) J2000 ecl. coords. of SupGalactic pole. (47.370000000, 6.320000000) Galactic coords. of SupGalactic pole. (------------, -----------) Supgalactic coords. of SupGalactic pole. */ static void wcs_coordsys_sys1_pole_in_sys2(int sys1, int sys2, double *lng2p1, double *lat2p1, double *lng1p2) { switch( sys1 ) { case GAL_WCS_COORDSYS_EQB1950: switch( sys2) { case GAL_WCS_COORDSYS_EQB1950: *lng2p1=NAN; *lat2p1=NAN; *lng1p2=NAN; return; case GAL_WCS_COORDSYS_EQJ2000: *lng2p1=180.31684301; *lat2p1=89.72174782; *lng1p2=359.68621044; return; case GAL_WCS_COORDSYS_ECB1950: *lng2p1=90.000000000; *lat2p1=66.55421111; *lng1p2=270.00000000; return; case GAL_WCS_COORDSYS_ECJ2000: *lng2p1=90.699521110; *lat2p1=66.56068919; *lng1p2=270.00099211; return; case GAL_WCS_COORDSYS_GALACTIC: *lng2p1=123.00000000; *lat2p1=27.40000000; *lng1p2=192.25000000; return; case GAL_WCS_COORDSYS_SUPERGALACTIC: *lng2p1=26.731537070; *lat2p1=15.64407736; *lng1p2=283.18940711; return; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys2' (input EQB1950)", __func__, PACKAGE_BUGREPORT, sys2); } break; case GAL_WCS_COORDSYS_EQJ2000: switch( sys2) { case GAL_WCS_COORDSYS_EQB1950: *lng2p1=359.68621044; *lat2p1=89.72178502; *lng1p2=180.31684301; return; case GAL_WCS_COORDSYS_EQJ2000: *lng2p1=NAN; *lat2p1=NAN; *lng1p2=NAN; return; case GAL_WCS_COORDSYS_ECB1950: *lng2p1=89.300755510; *lat2p1=66.55417728; *lng1p2=269.99920697; return; case GAL_WCS_COORDSYS_ECJ2000: *lng2p1=90.000000000; *lat2p1=66.56070889; *lng1p2=270.00000000; return; case GAL_WCS_COORDSYS_GALACTIC: *lng2p1=122.93200023; *lat2p1=27.12843056; *lng1p2=192.85949646; return; case GAL_WCS_COORDSYS_SUPERGALACTIC: *lng2p1=26.450516650; *lat2p1=15.70886131; *lng1p2=283.75420420; return; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys2' (input EQJ2000)", __func__, PACKAGE_BUGREPORT, sys2); } break; case GAL_WCS_COORDSYS_ECB1950: switch( sys2) { case GAL_WCS_COORDSYS_EQB1950: *lng2p1=270.00000000; *lat2p1=66.55421111; *lng1p2=90.000000000; return; case GAL_WCS_COORDSYS_EQJ2000: *lng2p1=269.99920697; *lat2p1=66.55421892; *lng1p2=89.300755510; return; case GAL_WCS_COORDSYS_ECB1950: *lng2p1=NAN; *lat2p1=NAN; *lng1p2=NAN; return; case GAL_WCS_COORDSYS_ECJ2000: *lng2p1=267.21656404; *lat2p1=89.99350237; *lng1p2=86.517962160; return; case GAL_WCS_COORDSYS_GALACTIC: *lng2p1=96.383958840; *lat2p1=29.81163604; *lng1p2=179.32094769; return; case GAL_WCS_COORDSYS_SUPERGALACTIC: *lng2p1=33.378919140; *lat2p1=38.34766498; *lng1p2=286.26975051; return; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys2' (input ECB1950)", __func__, PACKAGE_BUGREPORT, sys2); } break; case GAL_WCS_COORDSYS_ECJ2000: switch( sys2) { case GAL_WCS_COORDSYS_EQB1950: *lng2p1=270.00099211; *lat2p1=66.56069675; *lng1p2=90.699521110; return; case GAL_WCS_COORDSYS_EQJ2000: *lng2p1=270.00000000; *lat2p1=66.56070889; *lng1p2=90.000000000; return; case GAL_WCS_COORDSYS_ECB1950: *lng2p1=86.517962160; *lat2p1=89.99350236; *lng1p2=267.21656404; return; case GAL_WCS_COORDSYS_ECJ2000: *lng2p1=NAN; *lat2p1=NAN; *lng1p2=NAN; return; case GAL_WCS_COORDSYS_GALACTIC: *lng2p1=96.383958840; *lat2p1=29.81163604; *lng1p2=180.02317894; return; case GAL_WCS_COORDSYS_SUPERGALACTIC: *lng2p1=33.376119480; *lat2p1=38.34154959; *lng1p2=286.96654469; return; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys2' (input ECJ2000)", __func__, PACKAGE_BUGREPORT, sys2); } break; case GAL_WCS_COORDSYS_GALACTIC: switch( sys2) { case GAL_WCS_COORDSYS_EQB1950: *lng2p1=192.25000000; *lat2p1=27.40000000; *lng1p2=123.00000000; return; case GAL_WCS_COORDSYS_EQJ2000: *lng2p1=192.85949646; *lat2p1=27.12835323; *lng1p2=122.93200023; return; case GAL_WCS_COORDSYS_ECB1950: *lng2p1=179.32094769; *lat2p1=29.81195400; *lng1p2=96.376479150; return; case GAL_WCS_COORDSYS_ECJ2000: *lng2p1=180.02317894; *lat2p1=29.81153742; *lng1p2=96.383958840; return; case GAL_WCS_COORDSYS_GALACTIC: *lng2p1=NAN; *lat2p1=NAN; *lng1p2=NAN; return; case GAL_WCS_COORDSYS_SUPERGALACTIC: *lng2p1=90.000000000; *lat2p1=6.320000000; *lng1p2=47.370000000; return; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys2' (input GALACTIC)", __func__, PACKAGE_BUGREPORT, sys2); } break; case GAL_WCS_COORDSYS_SUPERGALACTIC: switch( sys2) { case GAL_WCS_COORDSYS_EQB1950: *lng2p1=283.18940711; *lat2p1=15.64407736; *lng1p2=26.731537070; return; case GAL_WCS_COORDSYS_EQJ2000: *lng2p1=283.75420420; *lat2p1=15.70894043; *lng1p2=26.450516650; return; case GAL_WCS_COORDSYS_ECB1950: *lng2p1=286.26975051; *lat2p1=38.34766498; *lng1p2=33.378919140; return; case GAL_WCS_COORDSYS_ECJ2000: *lng2p1=286.96654469; *lat2p1=38.34158720; *lng1p2=33.376119480; return; case GAL_WCS_COORDSYS_GALACTIC: *lng2p1=47.370000000; *lat2p1=6.320000000; *lng1p2=90.000000000; return; case GAL_WCS_COORDSYS_SUPERGALACTIC: *lng2p1=NAN; *lat2p1=NAN; *lng1p2=NAN; return; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys2' (input SUPERGALACTIC)", __func__, PACKAGE_BUGREPORT, sys2); } break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys1'", __func__, PACKAGE_BUGREPORT, sys1); } } /* Return the longitude (RA in equatorial) and latitude (Dec in equatorial) coordinates of the reference point (on the equator) of system 1 in the 2nd system. For example, if you want the galactic center's RA and Dec: 'sys1=GAL_WCS_COORDSYS_GALACTIC' and 'sys2=GAL_WCS_COORDSYS_EQJ2000'. Similar to 'wcs_coordsys_sys1_pole_in_sys2', the numbers reported here come from NED. Here, the following extra settings were set (they were not recorded in the comments when 'wcs_coordsys_sys1_pole_in_sys2' was defined). - The "Observation epoch" has been set to the same year as the equinox. - The "Position angle (East of North)" is set to 0. */ void gal_wcs_coordsys_sys1_ref_in_sys2(int sys1, int sys2, double *lng2, double *lat2) { switch( sys1 ) { case GAL_WCS_COORDSYS_EQB1950: switch( sys2 ) { case GAL_WCS_COORDSYS_EQB1950: *lng2=NAN; *lat2=NAN; return; case GAL_WCS_COORDSYS_EQJ2000: *lng2=0.64069119; *lat2=0.27839567; return; case GAL_WCS_COORDSYS_ECB1950: *lng2=0.00000000; *lat2=0.00000000; return; case GAL_WCS_COORDSYS_ECJ2000: *lng2=0.69855979; *lat2=0.00057803; return; case GAL_WCS_COORDSYS_GALACTIC: *lng2=97.74216087; *lat2=-60.18102400; return; case GAL_WCS_COORDSYS_SUPERGALACTIC: *lng2=293.11549599; *lat2=12.69249218; return; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys2' (input EQB1950)", __func__, PACKAGE_BUGREPORT, sys2); } break; case GAL_WCS_COORDSYS_EQJ2000: switch( sys2 ) { case GAL_WCS_COORDSYS_EQB1950: *lng2=359.35927364; *lat2=-0.27832018; return; case GAL_WCS_COORDSYS_EQJ2000: *lng2=NAN; *lat2=NAN; return; case GAL_WCS_COORDSYS_ECB1950: *lng2=359.30143791; *lat2=-0.00041556; return; case GAL_WCS_COORDSYS_ECJ2000: *lng2=0.0000000000; *lat2=0.000000000; return; case GAL_WCS_COORDSYS_GALACTIC: *lng2=96.33723581; *lat2=-60.18845577; return; case GAL_WCS_COORDSYS_SUPERGALACTIC: *lng2=292.65879220; *lat2=13.23092157; return; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys2' (input EQJ2000)", __func__, PACKAGE_BUGREPORT, sys2); } break; case GAL_WCS_COORDSYS_ECB1950: switch( sys2 ) { case GAL_WCS_COORDSYS_EQB1950: *lng2=0.0000000000; *lat2=0.000000000; return; case GAL_WCS_COORDSYS_EQJ2000: *lng2=0.64069119; *lat2=0.27839567; return; case GAL_WCS_COORDSYS_ECB1950: *lng2=NAN; *lat2=NAN; return; case GAL_WCS_COORDSYS_ECJ2000: *lng2=0.69855979; *lat2=0.00057803; return; case GAL_WCS_COORDSYS_GALACTIC: *lng2=97.74216087; *lat2=-60.18102400; return; case GAL_WCS_COORDSYS_SUPERGALACTIC: *lng2=293.11549599; *lat2=12.69249218; return; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys2' (input ECB1950)", __func__, PACKAGE_BUGREPORT, sys2); } break; case GAL_WCS_COORDSYS_ECJ2000: switch( sys2 ) { case GAL_WCS_COORDSYS_EQB1950: *lng2=359.35927364; *lat2=-0.27832018; return; case GAL_WCS_COORDSYS_EQJ2000: *lng2=0.0000000000; *lat2=0.000000000; return; case GAL_WCS_COORDSYS_ECB1950: *lng2=359.30143791; *lat2=-0.00041556; return; case GAL_WCS_COORDSYS_ECJ2000: *lng2=NAN; *lat2=NAN; return; case GAL_WCS_COORDSYS_GALACTIC: *lng2=96.33723581; *lat2=-60.18845577; return; case GAL_WCS_COORDSYS_SUPERGALACTIC: *lng2=292.65879220; *lat2=13.23092157 ; return; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys2' (input ECJ2000)", __func__, PACKAGE_BUGREPORT, sys2); } break; case GAL_WCS_COORDSYS_GALACTIC: switch( sys2 ) { case GAL_WCS_COORDSYS_EQB1950: *lng2=265.61084403; *lat2=-28.91679035; return; case GAL_WCS_COORDSYS_EQJ2000: *lng2=266.40506655; *lat2=-28.93616241; return; case GAL_WCS_COORDSYS_ECB1950: *lng2=266.14096542; *lat2=-5.52979411; return; case GAL_WCS_COORDSYS_ECJ2000: *lng2=266.83958692; *lat2=-5.53630157; return; case GAL_WCS_COORDSYS_GALACTIC: *lng2=NAN; *lat2=NAN; return; case GAL_WCS_COORDSYS_SUPERGALACTIC: *lng2=185.78610785; *lat2=42.31028736; return; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys2' (input GALACTIC)", __func__, PACKAGE_BUGREPORT, sys2); } break; case GAL_WCS_COORDSYS_SUPERGALACTIC: switch( sys2 ) { case GAL_WCS_COORDSYS_EQB1950: *lng2=41.35517115; *lat2=59.32090820; return; case GAL_WCS_COORDSYS_EQJ2000: *lng2=42.30997710; *lat2=59.52821263; return; case GAL_WCS_COORDSYS_ECB1950: *lng2=59.54957645; *lat2=40.91184040; return; case GAL_WCS_COORDSYS_ECJ2000: *lng2=60.24554909; *lat2=40.91764242; return; case GAL_WCS_COORDSYS_GALACTIC: *lng2=137.37000000; *lat2=0.00000000; return; case GAL_WCS_COORDSYS_SUPERGALACTIC: *lng2=NAN; *lat2=NAN; return; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys2' (input SUPERGALACTIC)", __func__, PACKAGE_BUGREPORT, sys2); } break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'sys1'", __func__, PACKAGE_BUGREPORT, sys1); } } static void wcs_coordsys_ctypes(int coordsys, char **clng, char **clat, char **radesys, double *equinox) { switch( coordsys) { case GAL_WCS_COORDSYS_EQB1950: *clng="RA"; *clat="DEC"; *radesys="FK4"; *equinox=1950; break; case GAL_WCS_COORDSYS_EQJ2000: *clng="RA"; *clat="DEC"; *radesys="FK5"; *equinox=2000; break; case GAL_WCS_COORDSYS_ECB1950: *clng="ELON"; *clat="ELAT"; *radesys="FK4"; *equinox=1950; break; case GAL_WCS_COORDSYS_ECJ2000: *clng="ELON"; *clat="ELAT"; *radesys="FK5"; *equinox=2000; break; case GAL_WCS_COORDSYS_GALACTIC: *clng="GLON"; *clat="GLAT"; *radesys=NULL; break; case GAL_WCS_COORDSYS_SUPERGALACTIC: *clng="SLON"; *clat="SLAT"; *radesys=NULL; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The code '%d' isn't a recognized WCS " "coordinate system ID for 'coordsys'", __func__, PACKAGE_BUGREPORT, coordsys); } } /* Convert the coordinate system. */ struct wcsprm * gal_wcs_coordsys_convert(struct wcsprm *wcs, int outcoordsys) { int incoordsys; char *alt=NULL; /* Only concerned with primary wcs. */ double equinox=0.0f; /* To preserve current value. */ struct wcsprm *out=NULL; double lng2p1=NAN, lat2p1=NAN, lng1p2=NAN; char *clng=NULL, *clat=NULL, *radesys=NULL; /* Just incase the input is a NULL pointer. */ if(wcs==NULL) return NULL; /* Get the input's coordinate system and see if it should be converted at all or not (if the output coordinate system is different). If its the same, just copy the input and return. */ incoordsys=gal_wcs_coordsys_identify(wcs); if(incoordsys==outcoordsys) { out=gal_wcs_copy(wcs); return out; } /* Find the necessary pole coordinates. Note that we have already accounted for the fact that the input and output coordinate systems may be the same above, so the NaN outputs will never occur here. */ wcs_coordsys_sys1_pole_in_sys2(incoordsys, outcoordsys, &lng2p1, &lat2p1, &lng1p2); /* Find the necessary CTYPE names of the output. */ wcs_coordsys_ctypes(outcoordsys, &clng, &clat, &radesys, &equinox); /* Convert the WCS's coordinate system (if 'wcsccs' is available). */ #if GAL_CONFIG_HAVE_WCSLIB_WCSCCS out=gal_wcs_copy(wcs); wcsccs(out, lng2p1, lat2p1, lng1p2, clng, clat, radesys, equinox, alt); #else /* Just to avoid compiler warnings for 'equinox' and 'alt' (when WCSLIB doesn't have the 'wcsccs' function): these will never be used: if control comes here the function will abort! So don't worry about this command having any kind of effect on the progrma. */ if(alt) lng2p1+=equinox; /* Print error message and abort. */ error(EXIT_FAILURE, 0, "%s: the 'wcsccs' function isn't available " "in the version of WCSLIB that this Gnuastro was built with " "('wcsccs' was first available in WCSLIB 7.5, released on " "March 2021). Therefore, Gnuastro can't preform the WCS " "coordiante system conversion in the WCS. Please update your " "WCSLIB and re-build Gnuastro with it to use this feature. " "You can follow the instructions here to install the latest " "version of WCSLIB:\n" " https://www.gnu.org/software/gnuastro/manual/html_node/" "WCSLIB.html\n" "And then re-build Gnuastro as described here:\n" " https://www.gnu.org/software/gnuastro/manual/" "html_node/Quick-start.html\n\n", __func__); #endif /* Return. */ return out; } /* Convert the coordinates of a series of points from one celestial coordinate system to another. This is based on the equations in this Wikipedia article: https://en.wikipedia.org/wiki/Galactic_coordinate_system#Conversion_between_equatorial_and_galactic_coordinates A mathematical proof of this equation is present in this StackExchange answer: https://physics.stackexchange.com/questions/88663/converting-between-galactic-and-ecliptic-coordinates The angle names are taken from this solution (for example "BK" is shown with the variable 'bk_r', since it is in radians). Intermediate angles (that the user never seen by the caller) are in radians and have a '_r' suffix. The angles that the caller gives and recieves are in degrees with a '_d' suffix. */ void gal_wcs_coordsys_convert_points(int sys1, double *lng1_d, double *lat1_d, int sys2, double *lng2_d, double *lat2_d, size_t number) { size_t i; double coslat1, coslat2; double lngdiff, coslngdiff, coslat1p2; double lng1_r, lat1_r, lng2_r, lat2_r; double lng2p1diff_r, lng2p1diff_sin_r, lng2p1diff_cos_r; /* Format: 'aaaNcM': - aaa either 'lng' (for longitude) or 'lat' (for latitude). - N either 1 or 2 (for the coordinate system of 'aaa'). - c either 'p' (for pole) or 'r' (for reference point). - M either 1 or 2 (for the coordinate system of 'c'). */ double lng1p2_d, lat1p2_d, lng2p1_d; double lng1p2_r, lat1p2_r, lng2p1_r; /* In case the input and output coordinate systems are the same, just copy the first into the second coordinates and return (no need to do any conversion). */ if(sys1==sys2) { for(i=0;i<number;++i) {lng2_d[i]=lng1_d[1]; lat2_d[i]=lat1_d[1];} return; } /* Get the second system's pole and reference point (on its equator) in the first system. */ wcs_coordsys_sys1_pole_in_sys2(sys2, sys1, &lng1p2_d, &lat1p2_d, &lng2p1_d); lng1p2_r=lng1p2_d*M_PI/180.0f; lat1p2_r=lat1p2_d*M_PI/180.0f; lng2p1_r=lng2p1_d*M_PI/180.0f; /* Loop over all the coordinates. */ coslat1p2=cos(lat1p2_r); for(i=0;i<number;++i) { /* Convert the input coordinates into radians. */ lng1_r = lng1_d[i] * M_PI / 180.0f; lat1_r = lat1_d[i] * M_PI / 180.0f; /* The latitude in the output coordinate is easy to calculate: */ lngdiff=lng1_r-lng1p2_r; coslngdiff=cos(lngdiff); lat2_r = asin( sin(lat1p2_r)*sin(lat1_r) + coslat1p2*cos(lat1_r)*coslngdiff ); /* We can now calculate the angle between 'PG' and 'GR' ('122.9 - l' in the webpage above), we'll call it 'pggr_r' here. But there is a problem: we need both the sine and cosine of 'pggr_r' to get its position across the whole 0 to 360 degrees ('asin()' only returns a value from -pi/2 to pi/2 and 'acos()' only returns a value between 0 to pi. */ coslat1 = cos(lat1_r); coslat2 = cos(lat2_r); lng2p1diff_sin_r = asin( coslat1 * sin(lngdiff) / coslat2 ); lng2p1diff_cos_r = acos( ( coslat1p2*sin(lat1_r) - sin(lat1p2_r)*coslat1*coslngdiff ) / coslat2 ); /* We have assumed that 'lng2p1diff_r = lng2p1_r - lng2_r'; so 'lng2_r = lng2p1_r - lng2p1diff_r' (when 'lng2p1diff_sin_r>0'). When 'lng2p1diff_sin_r<0', the cosine needs to be negative (so in the end it becomes 'lng2_r = lng2p1_r + lng2p1diff_r'. */ lng2p1diff_r = ( lng2p1diff_sin_r<0 ? -1*lng2p1diff_cos_r : lng2p1diff_cos_r ); lng2_r = lng2p1_r - lng2p1diff_r; /* In case the longitude is larger than 2pi, then we should subtract 2*pi from it and if it is negative, we should add 2pi to it. */ if(lng2_r>2*M_PI) lng2_r=lng2_r-2*M_PI; else if (lng2_r<0) lng2_r+=2*M_PI; /* Write the values in the output as degrees. */ lng2_d[i]=lng2_r*180.0f/M_PI; lat2_d[i]=lat2_r*180.0f/M_PI; } } /************************************************************* *********** Distortions *********** *************************************************************/ /* Check the type of distortion present and return the appropriate integer based on `enum gal_wcs_distortion`. Parameters: struct wcsprm *wcs - The wcs parameters of the fits file. Return: int out_distortion - The type of distortion present. */ int gal_wcs_distortion_identify(struct wcsprm *wcs) { #if GAL_CONFIG_HAVE_WCSLIB_DIS_H struct disprm *dispre=NULL; struct disprm *disseq=NULL; /* Small sanity check. */ if(wcs==NULL) return GAL_WCS_DISTORTION_INVALID; /* To help in reading. */ disseq=wcs->lin.disseq; dispre=wcs->lin.dispre; /* Check if distortion present. */ if( disseq==NULL && dispre==NULL ) return GAL_WCS_DISTORTION_INVALID; /* Check the type of distortion. As mentioned in the WCS paper IV section 2.4.2 available at https://www.atnf.csiro.au/people/mcalabre/WCS/dcs_20040422.pdf, the DPja and DQia keywords are used to record the parameters required by the prior and sequent distortion functions respectively. Now, as mentioned in dis.h file reference section in WCSLIB manual given here https://www.atnf.csiro.au/people/mcalabre/WCS/wcslib/dis_8h.html, TPV, DSS, and WAT are sequent polynomial distortions, while SIP is prior polynomial distortion. TPD is a superset of all these distortions and hence can be used both as a prior and sequent distortion polynomial. References and citations: "Representations of distortions in FITS world coordinate systems", Calabretta, M.R. et al. (WCS Paper IV, draft dated 2004/04/22) */ if( dispre != NULL ) { if( !strcmp(*dispre->dtype, "SIP") ) return GAL_WCS_DISTORTION_SIP; else if( !strcmp(*dispre->dtype, "TPD") ) return GAL_WCS_DISTORTION_TPD; else return GAL_WCS_DISTORTION_INVALID; } else if( disseq != NULL ) { if( !strcmp(*disseq->dtype, "TPV") ) return GAL_WCS_DISTORTION_TPV; else if( !strcmp(*disseq->dtype, "TPD") ) return GAL_WCS_DISTORTION_TPD; else if( !strcmp(*disseq->dtype, "DSS") ) return GAL_WCS_DISTORTION_DSS; else if( !strcmp(*disseq->dtype, "WAT") ) return GAL_WCS_DISTORTION_WAT; else return GAL_WCS_DISTORTION_INVALID; } /* Control should not reach here. */ error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to fix " "the problem. Control should not reach the end of this function", __func__, PACKAGE_BUGREPORT); #else /* The 'wcslib/dis.h' isn't present. */ error(EXIT_FAILURE, 0, "%s: the installed version of WCSLIB on this " "system doesn't have the 'dis.h' header! Thus Gnuastro can't do " "distortion-related operations on the world coordinate system " "(WCS). To use these features, please upgrade your version " "of WCSLIB and re-build Gnuastro", __func__); #endif return GAL_WCS_DISTORTION_INVALID; } /* Convert a given distrotion type to other. Parameters: struct wcsprm *wcs - The wcs parameters of the fits file. int out_distortion - The desired output distortion. size_t* fitsize - The size of the array along each dimension. Return: struct wcsprm *outwcs - The transformed wcs parameters in the required distortion type. */ struct wcsprm * gal_wcs_distortion_convert(struct wcsprm *inwcs, int outdisptype, size_t *fitsize) { #if GAL_CONFIG_HAVE_WCSLIB_DIS_H struct wcsprm *outwcs=NULL; int indisptype=gal_wcs_distortion_identify(inwcs); /* Make sure we have a PC+CDELT structure in the input WCS. */ gal_wcs_decompose_pc_cdelt(inwcs); /* If the input and output types are the same, just copy the input, otherwise, do the conversion. */ if(indisptype==outdisptype) outwcs=gal_wcs_copy(inwcs); else switch(indisptype) { /* If there is no distortion in the input, just return a newly-allocated copy. */ case GAL_WCS_DISTORTION_INVALID: outwcs=gal_wcs_copy(inwcs); break; /* Input's distortion is SIP. */ case GAL_WCS_DISTORTION_SIP: switch(outdisptype) { case GAL_WCS_DISTORTION_TPV: outwcs=gal_wcsdistortion_sip_to_tpv(inwcs); break; default: error(EXIT_FAILURE, 0, "%s: conversion from %s to %s is not " "yet supported. Please contact us at '%s'", __func__, gal_wcs_distortion_name_from_id(indisptype), gal_wcs_distortion_name_from_id(outdisptype), PACKAGE_BUGREPORT); } break; /* Input's distortion is TPV. */ case GAL_WCS_DISTORTION_TPV: switch(outdisptype) { case GAL_WCS_DISTORTION_SIP: if(fitsize==NULL) error(EXIT_FAILURE, 0, "%s: the size array is necessary " "for this conversion", __func__); outwcs=gal_wcsdistortion_tpv_to_sip(inwcs, fitsize); break; default: error(EXIT_FAILURE, 0, "%s: conversion from %s to %s is not " "yet supported. Please contact us at '%s'", __func__, gal_wcs_distortion_name_from_id(indisptype), gal_wcs_distortion_name_from_id(outdisptype), PACKAGE_BUGREPORT); } break; /* Input's distortion is not yet supported. */ case GAL_WCS_DISTORTION_TPD: case GAL_WCS_DISTORTION_DSS: case GAL_WCS_DISTORTION_WAT: error(EXIT_FAILURE, 0, "%s: input %s distortion is not yet " "supported. Please contact us at '%s'", __func__, gal_wcs_distortion_name_from_id(indisptype), PACKAGE_BUGREPORT); /* A bug! This distortion is not yet recognized. */ default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. The identifier '%d' is not recognized " "as a distortion", __func__, PACKAGE_BUGREPORT, indisptype); } /* Return the converted WCS. */ return outwcs; #else /* The 'wcslib/dis.h' isn't present. */ error(EXIT_FAILURE, 0, "%s: the installed version of WCSLIB on this " "system doesn't have the 'dis.h' header! Thus Gnuastro can't do " "distortion-related operations on the world coordinate system " "(WCS). To use these features, please upgrade your version " "of WCSLIB and re-build Gnuastro", __func__); return NULL; #endif } /**************************************************************/ /********** Utilities ************/ /**************************************************************/ /* Copy a given WSC structure into another one. */ struct wcsprm * gal_wcs_copy(struct wcsprm *wcs) { struct wcsprm *out; /* If the input WCS is NULL, return a NULL WCS. */ if(wcs) { /* Allocate the output WCS structure. */ errno=0; out=malloc(sizeof *out); if(out==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for 'out'", __func__, sizeof *out); /* Initialize the allocated WCS structure. The WCSLIB manual says "On the first invokation, and only the first invokation, wcsprm::flag must be set to -1 to initialize memory management". */ out->flag=-1; wcsini(1, wcs->naxis, out); /* Copy the input WCS to the output WSC structure. */ wcscopy(1, wcs, out); } else out=NULL; /* Return the final output. */ return out; } /* Copy the given WCS into a new one with differnet CRVALs. Because WCSLIB keeps internal constructs to speed up operations, we cannot simply change these values, we need to write the WCS into a set of keywords, then read them as a new one. */ struct wcsprm * gal_wcs_copy_new_crval(struct wcsprm *in, double *crval) { char *wcsstr; double *ocrval; int status=0, relax=WCSHDR_all; struct wcsprm *incpy, *out=NULL; int nkeys, nwcs, ctrl=0, nreject=0; /* Copy the input WCS structure into a new one (in case the caller is using it in another function). */ incpy=gal_wcs_copy(in); /* Keep the original pointer of CRVAL: for some reason 'wcsprm' cannot deal with a 'NULL' CRVAL, so we need to return the original CRVAL to the 'wcsprm' before freeing it (we do not want to free the caller's CRVAL). */ ocrval=incpy->crval; incpy->crval=crval; /* Convert the WCS into a string and read it into a new WCS structure. We do not need all the checks in 'gal_wcs_read_fitsptr' because this string was written just now. */ wcsstr=gal_wcs_write_wcsstr(incpy, &nkeys); status=wcspih(wcsstr, nkeys, relax, ctrl, &nreject, &nwcs, &out); if(status) error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at '%s' to fix the " "problem. The internally created WCS string could not be parsed " "as a new WCS structure", __func__, PACKAGE_BUGREPORT); /* Clean up and return. */ incpy->crval=ocrval; gal_wcs_free(incpy); free(wcsstr); return out; } /* Remove the algorithm part of CTYPE (anything after, and including, a '-') if necessary. */ static void wcs_ctype_noalgorithm(char *str) { size_t i, len=strlen(str); for(i=0;i<len;++i) if(str[i]=='-') { str[i]='\0'; break; } } /* See if the CTYPE string ends with TAN. */ static int wcs_ctype_has_tan(char *str) { size_t len=strlen(str); return !strcmp(&str[len-3], "TAN"); } /* Remove dimension. */ #define WCS_REMOVE_DIM_CHECK 0 void gal_wcs_remove_dimension(struct wcsprm *wcs, size_t fitsdim) { size_t c, i, j, naxis; /* If the WCS structure is NULL, just return. */ if(wcs==NULL) return; /* Sanity check. */ naxis=wcs->naxis; if(fitsdim==0 || fitsdim>naxis) error(EXIT_FAILURE, 0, "%s: requested dimension (fitsdim=%zu) must be " "larger than zero and smaller than the number of dimensions in " "the given WCS structure (%zu)", __func__, fitsdim, naxis); /**************************************************/ #if WCS_REMOVE_DIM_CHECK printf("\n\nfitsdim: %zu\n", fitsdim); printf("\n##################\n"); /* wcs->pc[0]=0; wcs->pc[1]=1; wcs->pc[2]=2; wcs->pc[3]=3; wcs->pc[4]=4; wcs->pc[5]=5; wcs->pc[6]=6; wcs->pc[7]=7; wcs->pc[8]=8; */ for(i=0;i<wcs->naxis;++i) { for(j=0;j<wcs->naxis;++j) printf("%-5g", wcs->pc[i*wcs->naxis+j]); printf("\n"); } #endif /**************************************************/ /* First loop over the arrays. */ for(i=0;i<naxis;++i) { /* The dimensions are in FITS order, but counting starts from 0, so we'll have to subtract 1 from 'fitsdim'. */ if(i>fitsdim-1) { /* 1-D arrays. */ if(wcs->crpix) wcs->crpix[i-1] = wcs->crpix[i]; if(wcs->cdelt) wcs->cdelt[i-1] = wcs->cdelt[i]; if(wcs->crval) wcs->crval[i-1] = wcs->crval[i]; if(wcs->crota) wcs->crota[i-1] = wcs->crota[i]; if(wcs->crder) wcs->crder[i-1] = wcs->crder[i]; if(wcs->csyer) wcs->csyer[i-1] = wcs->csyer[i]; /* The strings are all statically allocated, so we don't need to check. */ memcpy(wcs->cunit[i-1], wcs->cunit[i], 72); memcpy(wcs->ctype[i-1], wcs->ctype[i], 72); memcpy(wcs->cname[i-1], wcs->cname[i], 72); /* For 2-D arrays, just bring up all the rows. We'll fix the columns in a second loop. */ for(j=0;j<naxis;++j) { if(wcs->pc) wcs->pc[ (i-1)*naxis+j ] = wcs->pc[ i*naxis+j ]; if(wcs->cd) wcs->cd[ (i-1)*naxis+j ] = wcs->cd[ i*naxis+j ]; } } } /**************************************************/ #if WCS_REMOVE_DIM_CHECK printf("\n###### Respective row removed (replaced).\n"); for(i=0;i<wcs->naxis;++i) { for(j=0;j<wcs->naxis;++j) printf("%-5g", wcs->pc[i*wcs->naxis+j]); printf("\n"); } #endif /**************************************************/ /* Second loop for 2D arrays. */ c=0; for(i=0;i<naxis;++i) for(j=0;j<naxis;++j) if(j!=fitsdim-1) { if(wcs->pc) wcs->pc[ c ] = wcs->pc[ i*naxis+j ]; if(wcs->cd) wcs->cd[ c ] = wcs->cd[ i*naxis+j ]; ++c; } /* Correct the total number of dimensions in the WCS structure. */ naxis = wcs->naxis -= 1; /* The 'TAN' algorithm needs two dimensions. So we need to remove it when it can cause confusion. */ switch(naxis) { /* The 'TAN' algorithm cannot be used for any single-dimensional dataset. So we'll have to remove it if it exists. */ case 1: wcs_ctype_noalgorithm(wcs->ctype[0]); break; /* For any other dimensionality, 'TAN' should be kept only when exactly two dimensions have it. */ default: c=0; for(i=0;i<naxis;++i) if( wcs_ctype_has_tan(wcs->ctype[i]) ) ++c; if(c!=2) for(i=0;i<naxis;++i) if( wcs_ctype_has_tan(wcs->ctype[i]) ) wcs_ctype_noalgorithm(wcs->ctype[i]); break; } /**************************************************/ #if WCS_REMOVE_DIM_CHECK printf("\n###### Respective column removed.\n"); for(i=0;i<naxis;++i) { for(j=0;j<naxis;++j) printf("%-5g", wcs->pc[i*naxis+j]); printf("\n"); } printf("\n###### One final string\n"); for(i=0;i<naxis;++i) printf("%s\n", wcs->ctype[i]); exit(0); #endif /**************************************************/ } /* Using the block data structure of the tile, add a WCS structure for it. In many cases, tiles are created for internal processing, so there is no need to keep their WCS. Hence for preformance reasons, when creating the tiles they don't have any WCS structure. When needed, this function can be used to add a WCS structure to the tile by copying the WCS structure of its block and correcting its starting points. If the tile already has a WCS structure, this function won't do anything. */ void gal_wcs_on_tile(gal_data_t *tile) { size_t i, start_ind, ndim=tile->ndim; gal_data_t *block=gal_tile_block(tile); size_t *coord=gal_pointer_allocate(GAL_TYPE_SIZE_T, ndim, 0, __func__, "coord"); /* If the tile already has a WCS structure, don't do anything. */ if(tile->wcs) return; else { /* Copy the block's WCS into the tile. */ tile->wcs=gal_wcs_copy(block->wcs); /* Find the coordinates of the tile's starting index. */ start_ind=gal_pointer_num_between(block->array, tile->array, block->type); gal_dimension_index_to_coord(start_ind, ndim, block->dsize, coord); /* Correct the copied WCS structure. Note that crpix is indexed in the FITS/Fortran order while coord is ordered in C, it also starts counting from 1, not zero. */ for(i=0;i<ndim;++i) tile->wcs->crpix[i] -= coord[ndim-1-i]; /* printf("start_ind: %zu\n", start_ind); printf("coord: %zu, %zu\n", coord[1]+1, coord[0]+1); printf("CRPIX: %f, %f\n", tile->wcs->crpix[0], tile->wcs->crpix[1]); */ } /* Clean up. */ free(coord); } /* Return the Warping matrix of the given WCS structure. This will be the final matrix irrespective of the type of storage in the WCS structure. Recall that the FITS standard has several methods to store the matrix, which is up to this function to account for and return the final matrix. The output is an allocated DxD matrix where 'D' is the number of dimensions. */ double * gal_wcs_warp_matrix(struct wcsprm *wcs) { double *out, crota2; size_t i, j, size=wcs->naxis*wcs->naxis; /* Allocate the necessary array. */ errno=0; out=malloc(size*sizeof *out); if(out==NULL) error(EXIT_FAILURE, errno, "%s: allocating %zu bytes for 'out'", __func__, size*sizeof *out); /* Fill in the array. */ if(wcs->altlin & 0x1) /* Has a PCi_j array. */ { for(i=0;i<wcs->naxis;++i) for(j=0;j<wcs->naxis;++j) out[i*wcs->naxis+j] = wcs->cdelt[i] * wcs->pc[i*wcs->naxis+j]; } else if(wcs->altlin & 0x2) /* Has CDi_j array. */ { for(i=0;i<size;++i) out[i]=wcs->cd[i]; } else if(wcs->altlin & 0x4) /* Has CROTAi array. */ { /* Basic sanity checks. */ if(wcs->naxis!=2) error(EXIT_FAILURE, 0, "%s: CROTAi currently on works in 2 " "dimensions.", __func__); if(wcs->crota[0]!=0.0) error(EXIT_FAILURE, 0, "%s: CROTA1 is not zero", __func__); /* CROTAi keywords are depreciated in the FITS standard. However, old files may still use them. For a full description of CROTAi keywords and their history (along with the conversion equations here), please see the link below: https://fits.gsfc.nasa.gov/users_guide/users_guide/node57.html Just note that the equations of the link above convert CROTAi to PC. But here we want the "final" matrix (after multiplication by the 'CDELT' values). So to speed things up, we won't bother dividing and then multiplying by the same CDELT values in the off-diagonal elements. */ crota2=wcs->crota[1]; out[0] = wcs->cdelt[0] * cos(crota2); out[1] = -1 * wcs->cdelt[1] *sin(crota2); out[2] = wcs->cdelt[0] * sin(crota2); out[3] = wcs->cdelt[1] * cos(crota2); /* For a check: printf("cdelt: %f, %f\n", wcs->cdelt[0], wcs->cdelt[1]); printf("cd:\n%f, %f\n%f, %f\n", out[0], out[1], out[2], out[3]); */ } else error(EXIT_FAILURE, 0, "%s: currently only PCi_ja and CDi_ja keywords " "are recognized", __func__); /* Return the result. */ return out; } /* Clean up small/negligible errros that are clearly caused by measurement errors in the PC and CDELT elements. */ void gal_wcs_clean_errors(struct wcsprm *wcs) { double crdcheck=NAN; size_t i, crdnum=0, ndim=wcs->naxis; double mean, crdsum=0, sum=0, min=FLT_MAX, max=0; double *pc=wcs->pc, *cdelt=wcs->cdelt, *crder=wcs->crder; /* First clean up CDELT: if the CRDER keyword is set, then we'll use that as a reference, if not, we'll use the absolute floating point error defined in 'GAL_WCS_FLTERR'. */ for(i=0; i<ndim; ++i) { sum+=cdelt[i]; if(cdelt[i]>max) max=cdelt[i]; if(cdelt[i]<min) min=cdelt[i]; if(crder[i]!=UNDEFINED) {++crdnum; crdsum=crder[i];} } mean=sum/ndim; crdcheck = crdnum ? crdsum/crdnum : GAL_WCS_FLTERROR; if( (max-min)/mean < crdcheck ) for(i=0; i<ndim; ++i) cdelt[i]=mean; /* Now clean up the PC elements. If the diagonal elements are too close to 0, 1, or -1, set them to 0 or 1 or -1. */ if(pc) for(i=0;i<ndim*ndim;++i) { if( fabs(pc[i] - 0 ) < GAL_WCS_FLTERROR ) pc[i]=0; else if( fabs(pc[i] - 1 ) < GAL_WCS_FLTERROR ) pc[i]=1; else if( fabs(pc[i] - -1 ) < GAL_WCS_FLTERROR ) pc[i]=-1; } } /* According to the FITS standard, in the 'PCi_j' WCS formalism, the matrix elements m_{ij} are encoded in the 'PCi_j' keywords and the scale factors are encoded in the 'CDELTi' keywords. There is also another formalism (the 'CDi_j' formalism) which merges the two into one matrix. However, WCSLIB's internal operations are apparently done in the 'PCi_j' formalism. So its outputs are also all in that format by default. When the input is a 'CDi_j', WCSLIB will still read the image into the 'PCi_j' formalism and the 'CDELTi's are set to 1. This function will decompose the two matrices to give a reasonable 'CDELTi' and 'PCi_j' in such cases. */ void gal_wcs_decompose_pc_cdelt(struct wcsprm *wcs) { size_t i, j; int status=0; double *ps, *warp; /* If there is on WCS, then don't do anything. */ if(wcs==NULL) return; /* Get the pixel scale and full warp matrix. */ warp=gal_wcs_warp_matrix(wcs); ps=gal_wcs_pixel_scale(wcs); if(ps==NULL) return; /* For a check. printf("ps: %g, %g\n", ps[0], ps[1]); printf("warp: %g, %g, %g, %g\n", warp[0], warp[1], warp[2], warp[3]); */ /* Set the CDELTs. */ for(i=0; i<wcs->naxis; ++i) wcs->cdelt[i] = ps[i]; /* Write the PC matrix. */ for(i=0;i<wcs->naxis;++i) for(j=0;j<wcs->naxis;++j) wcs->pc[i*wcs->naxis+j] = warp[i*wcs->naxis+j]/ps[i]; /* According to the 'wcslib/wcs.h' header: "In particular, wcsset() resets wcsprm::cdelt to unity if CDi_ja is present (and no PCi_ja).". So apparently, when the input is a 'CDi_j', it might expect the 'CDELTi' elements to be 1.0. But we have changed that here, so we will correct the 'altlin' element of the WCS structure to make sure that WCSLIB only looks into the 'PCi_j' and 'CDELTi' and makes no assumptioins about 'CDELTi'. */ wcs->altlin=1; /* Re-run 'wcsset' to update all the internal WCS parameters. */ status=wcsset(wcs); if(status) error(EXIT_SUCCESS, 0, "%s: WCSLIB warning: wcsset ERROR %d: %s", __func__, status, wcs_errmsg[status]); /* Clean up. */ free(ps); free(warp); } /* Set the WCS structure to use the CD matrix. */ void gal_wcs_to_cd(struct wcsprm *wcs) { size_t i, j, n; double er=1e-10; /* If there is on WCS, then don't do anything. */ if(wcs==NULL) return; /* 'wcs->altlin' identifies which rotation element is being used (PCi_j, CDi_J or CROTAi). For PCi_j, the first bit will be 1 (==1), for CDi_j, the second bit is 1 (==2) and for CROTAi, the third bit is 1 (==4). */ n=wcs->naxis; switch(wcs->altlin) { /* PCi_j: Convert it to CDi_j. */ case 1: /* Fill in the CD matrix and correct the PC and CDELT arrays. We have to do this because ultimately, WCSLIB will be writing the PC and CDELT keywords, even when 'altlin' is 2. So effectively we have to multiply the PC and CDELT matrices, then set cdelt=1 in all dimensions. This is actually how WCSLIB reads a FITS header with only a CD matrix. */ for(i=0;i<n;++i) { for(j=0;j<n;++j) wcs->cd[i*n+j] = wcs->pc[i*n+j] *= wcs->cdelt[i]; wcs->cdelt[i]=1; } /* Set the altlin to be the CD matrix and free the PC matrix. */ wcs->altlin=2; break; /* CDi_j: No need to do any conversion. */ case 2: return; break; /* Both PCi_j and CDi_j are present! If they are the same (within floating point errors), we'll just set WCS to use the 'CD' matrix (as demanded from this function). If they are not the same, then print an error. */ case 3: for(i=0;i<n;++i) for(j=0;j<n;++j) if(wcs->cd[i*n+j] - wcs->pc[i*n+j] * wcs->cdelt[i] > er) error(EXIT_FAILURE, 0, "%s: the given WCS has both the " "CDi_j and PCi_j+CDELTi conventions for defining " "the rotation and scale. However, they do not match! " "Please inspect the file and remove the wrong set of " "keywords (you can use 'astfits file.fits " "--delete=KEYNAME' to delete the keyword 'KEYNAME'; " "and you can call '--delete' multiple times). For " "more on the definition of the different " "representations, see the FITS standard: " "https://fits.gsfc.nasa.gov/fits_standard.html", __func__); wcs->altlin=2; break; /* CROTAi: not yet supported. */ case 4: error(0, 0, "%s: WARNING: Conversion of 'CROTAi' keywords to the CD " "matrix is not yet supported (for lack of time!), please " "contact us at %s to add this feature. But this may not cause a " "problem at all, so please check if the output's WCS is " "reasonable", __func__, PACKAGE_BUGREPORT); break; /* The value isn't supported! */ default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to fix the " "problem. The value %d for wcs->altlin isn't recognized", __func__, PACKAGE_BUGREPORT, wcs->altlin); } } /* The distance (along a great circle) on a sphere between two points is calculated here. Since the pixel sides are usually very small, we won't be using the direct formula: cos(distance)=sin(d1)*sin(d2)+cos(d1)*cos(d2)*cos(r1-r2) We will be using the haversine formula which better considering floating point errors (from Wikipedia:) sin^2(distance)/2=sin^2( (d1-d2)/2 )+cos(d1)*cos(d2)*sin^2( (r1-r2)/2 ) Inputs and outputs are all in degrees. */ double gal_wcs_angular_distance_deg(double r1, double d1, double r2, double d2) { /* Convert degrees to radians. */ double r1r=r1*M_PI/180, d1r=d1*M_PI/180; double r2r=r2*M_PI/180, d2r=d2*M_PI/180; /* To make things easier to read: */ double a=sin( (d1r-d2r)/2 ); double b=sin( (r1r-r2r)/2 ); /* Return the result: */ return 2*asin( sqrt( a*a + cos(d1r)*cos(d2r)*b*b) ) * 180/M_PI; } /* Calculate the vertices of a box in the given center. The output should have 8 allocated spaces ready to be written into: out[0]=bottom-left-ra out[1]=bottom-left-dec out[2]=bottom-right-ra out[3]=bottom-right-dec out[4]=top-right-ra out[5]=top-right-dec out[6]=top-left-ra out[7]=top-left-dec The 'ra_delta' and 'dec_delta' should be the full length of the box along the respective axis (not half of it!). */ void gal_wcs_box_vertices_from_center(double ra_center, double dec_center, double ra_delta, double dec_delta, double *out) { double corr; /* The bottom vertices, note that the positive right ascension is on the left side. */ out[1] = out[3] = dec_center - dec_delta/2; corr=1/(2*cos(out[1]*M_PI/180)); out[0] = ra_center + ra_delta*corr; out[2] = ra_center - ra_delta*corr; /* The top vertices. */ out[5] = out[7] = dec_center + dec_delta/2; corr=1/(2*cos(out[5]*M_PI/180)); out[4] = ra_center + ra_delta*corr; out[6] = ra_center - ra_delta*corr; } /* Return the pixel scale of the dataset in units of the WCS. */ double * gal_wcs_pixel_scale(struct wcsprm *wcs) { gsl_vector S; gsl_matrix A, V; int warning_printed; gal_data_t *pixscale; size_t i, j, n, maxj, *permutation; double jvmax, *a, *out, *v, maxrow, minrow; /* Only continue if a WCS exists. */ if(wcs==NULL) return NULL; /* Write the full WCS rotation matrix into an array, irrespective of what style it was stored in the wcsprm structure ('PCi_j' style or 'CDi_j' style). */ a=gal_wcs_warp_matrix(wcs); /* Now that everything is good, we can allocate the necessary memory. */ n=wcs->naxis; v=gal_pointer_allocate(GAL_TYPE_FLOAT64, n*n, 0, __func__, "v"); permutation=gal_pointer_allocate(GAL_TYPE_SIZE_T, n, 0, __func__, "permutation"); pixscale=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &n, NULL, 0, -1, 1, NULL, NULL, NULL); /* To avoid confusing issues with floating point errors being written in the non-diagonal elements of the FITS header PC or CD matrices, we need to check if the minimum and maximum values in each row are not several orders of magnitude apart. Note that in some cases (for example a spectrum), one axis might be in degrees (value around 1e-5) and the other in angestroms (value around 1e-10). So we can't look at the minimum and maximum of the whole matrix. However, in such cases, people will probably not warp/rotate the image to mix the coordinates. So the important thing to check is the minimum and maximum (non-zero) values in each row. */ warning_printed=0; for(i=0;i<n;++i) { /* Find the minimum and maximum values in each row. */ minrow=FLT_MAX; maxrow=-FLT_MAX; for(j=0;j<n;++j) if(a[i*n+j]!=0.0) /* We aren't concerned with 0 valued elements. */ { /* We have to use absolutes because in cases like RA, the diagonal values in different rows may have different signs. */ if(fabs(a[i*n+j])<minrow) minrow=fabs(a[i*n+j]); if(fabs(a[i*n+j])>maxrow) maxrow=fabs(a[i*n+j]); } /* Do the check, print warning and make correction. */ if(maxrow!=minrow && maxrow/minrow>1e5 /* The difference between elements is large. */ && maxrow/minrow<GAL_WCS_FLTERROR && warning_printed==0) { fprintf(stderr, "\nWARNING: The input WCS matrix (possibly taken " "from the FITS header keywords starting with 'CD' or 'PC') " "contains values with very different scales (more than " "10^5 different). This is probably due to floating point " "errors. These values might bias the pixel scale (and " "subsequent) calculations.\n\n" "You can see the respective matrix with one of the " "following two commands (depending on how the FITS file " "was written). Recall that if the desired extension/HDU " "isn't the default, you can choose it with the '--hdu' " "(or '-h') option before the '|' sign in these commands." "\n\n" " $ astfits file.fits -p | grep 'PC._.'\n" " $ astfits file.fits -p | grep 'CD._.'\n\n" "You can delete the ones with obvious floating point " "error values using the following command (assuming you " "want to delete 'CD1_2' and 'CD2_1'). Afterwards, you can " "re-run your original command to remove this warning " "message and possibly correct errors that it might have " "caused.\n\n" " $ astfits file.fits --delete=CD1_2 --delete=CD2_1\n\n" ); warning_printed=1; } } /* Fill in the necessary GSL vector and Matrix structures. */ S.size=n; S.stride=1; S.data=pixscale->array; V.size1=n; V.size2=n; V.tda=n; V.data=v; A.size1=n; A.size2=n; A.tda=n; A.data=a; /* Run GSL's Singular Value Decomposition, using one-sided Jacobi orthogonalization which computes the singular (scale) values to a higher relative accuracy. */ gsl_linalg_SV_decomp_jacobi(&A, &V, &S); /* The raw pixel scale array produced from the singular value decomposition above is ordered based on values, not the input. So when the pixel scales in all the dimensions aren't the same (the units of the dimensions differ), the order of the values in 'pixelscale' will not necessarily correspond to the input's dimensions. To correct the order, we can use the 'V' matrix to find the original position of the pixel scale values and then use permutation to re-order it correspondingly. The column with the largest (absolute) value will be taken as the one to be used for each row. */ for(i=0;i<n;++i) { /* Find the column with the maximum value. */ maxj=-1; jvmax=-FLT_MAX; for(j=0;j<n;++j) if(fabs(v[i*n+j])>jvmax) { maxj=j; jvmax=fabs(v[i*n+j]); } /* Use the column with the maximum value for this dimension. */ permutation[i]=maxj; } /* Apply the permutation described above. */ gal_permutation_apply(pixscale, permutation); /* Clean up and return. */ free(a); free(v); free(permutation); out=pixscale->array; pixscale->array=NULL; gal_data_free(pixscale); return out; } /* Report the arcsec^2 area of the pixels in the image based on the WCS information in that image. */ double gal_wcs_pixel_area_arcsec2(struct wcsprm *wcs) { double out; double *pixscale; /* Some basic sanity checks. */ if(wcs==NULL) return NAN; if(wcs->naxis==1) return NAN; /* Check if the units of the axis are degrees or not. Currently all FITS images I have worked with use 'deg' for degrees. If other alternatives exist, we can add corrections later. */ if( strcmp("deg", wcs->cunit[0]) || strcmp("deg", wcs->cunit[1]) ) return NAN; /* Get the pixel scales along each axis in degrees, then multiply. */ pixscale=gal_wcs_pixel_scale(wcs); if(pixscale==NULL) return NAN; /* Clean up and return the result. */ out = pixscale[0] * pixscale[1] * 3600.0f * 3600.0f; free(pixscale); return out; } int gal_wcs_coverage(char *filename, char *hdu, size_t *ondim, double **ocenter, double **owidth, double **omin, double **omax, char *hdu_option_name) { fitsfile *fptr; struct wcsprm *wcs; int nwcs=0, type, status=0; char *name=NULL, *unit=NULL; gal_data_t *fc, *tmp, *coords=NULL; size_t i, ndim, *dsize=NULL, numrows; size_t fullcircledim=GAL_BLANK_SIZE_T; double *x=NULL, *y=NULL, *z=NULL, *min, *max, *fcarr, *center, *width; /* Read the desired WCS (note that the linear matrix is irrelevant here, we'll just select PC because its the default WCS mode. */ wcs=gal_wcs_read(filename, hdu, GAL_WCS_LINEAR_MATRIX_PC, 0, 0, &nwcs, hdu_option_name); /* If a WCS doesn't exist, return NULL. */ if(wcs==NULL) return 0; /* Make sure the input HDU is an image. */ if( gal_fits_hdu_format(filename, hdu, hdu_option_name) != IMAGE_HDU ) error(EXIT_FAILURE, 0, "%s (hdu %s): is not an image HDU, the " "'--skycoverage' option only applies to image extensions", filename, hdu); /* Get the array information of the image. */ fptr=gal_fits_hdu_open(filename, hdu, READONLY, 1, hdu_option_name); gal_fits_img_info(fptr, &type, ondim, &dsize, &name, &unit); fits_close_file(fptr, &status); ndim=*ondim; /* Abort if we have more than 3 dimensions. */ if(ndim==1 || ndim>3) return 0; /* Allocate the output datasets. */ center=*ocenter=gal_pointer_allocate(GAL_TYPE_FLOAT64, ndim, 0, __func__, "ocenter"); width=*owidth=gal_pointer_allocate(GAL_TYPE_FLOAT64, ndim, 0, __func__, "owidth"); min=*omin=gal_pointer_allocate(GAL_TYPE_FLOAT64, ndim, 0, __func__, "omin"); max=*omax=gal_pointer_allocate(GAL_TYPE_FLOAT64, ndim, 0, __func__, "omax"); /* Now that we have the number of dimensions in the image, allocate the space needed for the coordinates. */ numrows = (ndim==2) ? 5 : 9; for(i=0;i<ndim;++i) { tmp=gal_data_alloc(NULL, GAL_TYPE_FLOAT64, 1, &numrows, NULL, 0, -1, 1, NULL, NULL, NULL); tmp->next=coords; coords=tmp; } /* Fill in the coordinate arrays, Note that 'dsize' is ordered in C dimensions, for the WCS conversion, we need to have the dimensions ordered in FITS/Fortran order. */ switch(ndim) { case 2: x=coords->array; y=coords->next->array; x[0] = 1; y[0] = 1; x[1] = dsize[1]; y[1] = 1; x[2] = 1; y[2] = dsize[0]; x[3] = dsize[1]; y[3] = dsize[0]; x[4] = dsize[1]/2 + (dsize[1]%2 ? 1 : 0.5f); y[4] = dsize[0]/2 + (dsize[0]%2 ? 1 : 0.5f); break; case 3: x=coords->array; y=coords->next->array; z=coords->next->next->array; x[0] = 1; y[0] = 1; z[0]=1; x[1] = dsize[2]; y[1] = 1; z[1]=1; x[2] = 1; y[2] = dsize[1]; z[2]=1; x[3] = dsize[2]; y[3] = dsize[1]; z[3]=1; x[4] = 1; y[4] = 1; z[4]=dsize[0]; x[5] = dsize[2]; y[5] = 1; z[5]=dsize[0]; x[6] = 1; y[6] = dsize[1]; z[6]=dsize[0]; x[7] = dsize[2]; y[7] = dsize[1]; z[7]=dsize[0]; x[8] = dsize[2]/2 + (dsize[2]%2 ? 1 : 0.5f); y[8] = dsize[1]/2 + (dsize[1]%2 ? 1 : 0.5f); z[8] = dsize[0]/2 + (dsize[0]%2 ? 1 : 0.5f); break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to " "fix the problem. 'ndim' of %zu is not recognized.", __func__, PACKAGE_BUGREPORT, ndim); } /* For a check: printf("IMAGE COORDINATES:\n"); for(i=0;i<numrows;++i) if(ndim==2) printf("%-15g%-15g\n", x[i], y[i]); else printf("%-15g%-15g%-15g\n", x[i], y[i], z[i]); */ /* Convert to the world coordinate system. */ gal_wcs_img_to_world(coords, wcs, 1); /* For a check: printf("\nWORLD COORDINATES:\n"); for(i=0;i<numrows;++i) if(ndim==2) printf("%-15g%-15g\n", x[i], y[i]); else printf("%-15g%-15g%-15g\n", x[i], y[i], z[i]); */ /* Get the minimum and maximum values in each dimension. */ tmp=gal_statistics_minimum(coords); min[0] = ((double *)(tmp->array))[0]; gal_data_free(tmp); tmp=gal_statistics_maximum(coords); max[0] = ((double *)(tmp->array))[0]; gal_data_free(tmp); tmp=gal_statistics_minimum(coords->next); min[1] = ((double *)(tmp->array))[0]; gal_data_free(tmp); tmp=gal_statistics_maximum(coords->next); max[1] = ((double *)(tmp->array))[0]; gal_data_free(tmp); if(ndim>2) { tmp=gal_statistics_minimum(coords->next->next); min[2] = ((double *)(tmp->array))[0]; gal_data_free(tmp); tmp=gal_statistics_maximum(coords->next->next); max[2] = ((double *)(tmp->array))[0]; gal_data_free(tmp); } /* Write the center and width. */ width[0]=max[0]-min[0]; width[1]=max[1]-min[1]; switch(ndim) { case 2: center[0]=x[4]; center[1]=y[4]; break; case 3: width[2]=max[2]-min[2]; center[0]=x[8]; center[1]=y[8]; center[2]=z[8]; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at %s to solve " "the problem. The value %zu is not a recognized dimension", __func__, PACKAGE_BUGREPORT, ndim); } /* It may happen that the image passes the RA=0 hour circle. In that case, the width along the first WCS dimension (RA) will be larger than 180. Therefore, we need to re-calculate the minimum and maximums. An example dataset is available in https://savannah.gnu.org/bugs/?63257 (Gnuastro bug #63257): $ jplusdr2url=http://archive.cefca.es/catalogues/vo/siap/jplus-dr2 $ wget $jplusdr2url/get_fits?id=71811 -Ojplus-dr2-71811.fits.fz But first, we need to find the dimension that has a full-circle dimension: this is usually the first WCS dimension, but it may happen that it isn't. Also, note that the WCS may not be celestial/spherical at all (hence why we are only doing this for pre-defined celestial 'CTYPE's). */ for(i=0;i<ndim;++i) if( strncmp(wcs->ctype[i], "RA-", 3)==0 /* Equatorial */ || strncmp(wcs->ctype[i], "GLON-", 5)==0 /* Galactic */ || strncmp(wcs->ctype[i], "SLON-", 5)==0 /* Super Galactic */ || strncmp(wcs->ctype[i], "ELON-", 5)==0 /* Ecliptic */ ) { fullcircledim=i; break; } if( fullcircledim!=GAL_BLANK_SIZE_T && width[fullcircledim]>180.0f ) { /* Set the proper pointer to the coordinate that should be checked. */ switch(fullcircledim) { case 0: fc=coords; break; case 1: fc=coords->next; break; case 2: fc=coords->next->next; break; default: error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at " "'%s' to fix the problem. The value '%zu' isn't " "recognized for 'fullcircledim'", __func__, PACKAGE_BUGREPORT, fullcircledim); } /* Shift all the coordinates after 0, by 360, while keeping those that are close to 360 untouched, then find the minimum and maximums. */ fcarr=fc->array; for(i=0;i<coords->size;++i) if(fcarr[i]<180) fcarr[i]+=360.0f; tmp=gal_statistics_minimum(fc); min[fullcircledim] = ((double *)(tmp->array))[0]; gal_data_free(tmp); tmp=gal_statistics_maximum(fc); max[fullcircledim] = ((double *)(tmp->array))[0]; gal_data_free(tmp); /* Calculate the correct width, maximum is guarateed to be larger than 360, so subtract 360 from it. */ width[fullcircledim]=max[fullcircledim]-min[fullcircledim]; max[fullcircledim]-=360.0f; } /* Clean up and return success. */ free(dsize); if(name) free(name); if(unit) free(unit); wcsfree(wcs); free(wcs); gal_list_data_free(coords); return 1; } /**************************************************************/ /********** Array conversion ************/ /**************************************************************/ /* Some sanity checks for the WCS conversion functions. */ static void wcs_convert_sanity_check_alloc(gal_data_t *coords, struct wcsprm *wcs, const char *func, int **stat, double **phi, double **theta, double **world, double **pixcrd, double **imgcrd) { gal_data_t *tmp; size_t ndim=0, firstsize=0, size=coords->size; /* Make sure a WCS structure is actually given. */ if(wcs==NULL) error(EXIT_FAILURE, 0, "%s: input WCS structure is NULL", func); for(tmp=coords; tmp!=NULL; tmp=tmp->next) { /* Count how many coordinates are given. */ ++ndim; /* Check the type of the input. */ if(tmp->type!=GAL_TYPE_FLOAT64) error(EXIT_FAILURE, 0, "%s: input coordinates must have 'float64' " "type", func); /* Make sure it has a single dimension. */ if(tmp->ndim!=1) error(EXIT_FAILURE, 0, "%s: input coordinates for each dimension " "must each be one dimensional. Coordinate dataset %zu of the " "inputs has %zu dimensions", func, ndim, tmp->ndim); /* See if all inputs have the same size. */ if(ndim==1) firstsize=tmp->size; else if(firstsize!=tmp->size) error(EXIT_FAILURE, 0, "%s: all input coordinates must have the " "same number of elements. Coordinate dataset %zu has %zu " "elements while the first coordinate has %zu", func, ndim, tmp->size, firstsize); } /* See if the number of coordinates given corresponds to the dimensions of the WCS structure. */ if(ndim!=wcs->naxis) error(EXIT_FAILURE, 0, "%s: the number of input coordinates (%zu) does " "not match the dimensions of the input WCS structure (%d)", func, ndim, wcs->naxis); /* Allocate all the necessary arrays. */ *phi = gal_pointer_allocate( GAL_TYPE_FLOAT64, size, 0, __func__, "phi"); *stat = gal_pointer_allocate( GAL_TYPE_INT, size, 1, __func__, "stat"); *theta = gal_pointer_allocate( GAL_TYPE_FLOAT64, size, 0, __func__, "theta"); *world = gal_pointer_allocate( GAL_TYPE_FLOAT64, ndim*size, 0, __func__, "world"); *imgcrd = gal_pointer_allocate( GAL_TYPE_FLOAT64, ndim*size, 0, __func__, "imgcrd"); *pixcrd = gal_pointer_allocate( GAL_TYPE_FLOAT64, ndim*size, 0, __func__, "pixcrd"); } /* In Gnuastro, each column (coordinate for WCS conversion) is treated as a separate array in a 'gal_data_t' that are linked through a linked list. But in WCSLIB, the input is a single array (with multiple columns). This function will convert between the two. */ static void wcs_convert_list_to_from_array(gal_data_t *list, double *array, int *stat, size_t ndim, int to0from1) { size_t i, d=0; gal_data_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) { /* Put all this coordinate's values into the single array that is input into or output from WCSLIB. */ for(i=0;i<list->size;++i) { if(to0from1) ((double *)(tmp->array))[i] = stat[i] ? NAN : array[i*ndim+d]; else array[i*ndim+d] = ((double *)(tmp->array))[i]; } /* Increment the dimension. */ ++d; } } /* Prepare the output of the WCS conversion functions. */ static gal_data_t * wcs_convert_prepare_out(gal_data_t *coords, struct wcsprm *wcs, int inplace) { size_t i; gal_data_t *out=NULL; if(inplace) out=coords; else for(i=0;i<wcs->naxis;++i) gal_list_data_add_alloc(&out, NULL, GAL_TYPE_FLOAT64, 1, &coords->size, NULL, 0, coords->minmapsize, coords->quietmmap, wcs->ctype[i], wcs->cunit[i], NULL); return out; } /* Convert world coordinates to image coordinates given the input WCS structure. The input must be a linked list of data structures of float64 ('double') type. The top element of the linked list must be the first coordinate and etc. If 'inplace' is non-zero, then the output will be written into the input's allocated space. */ gal_data_t * gal_wcs_world_to_img(gal_data_t *coords, struct wcsprm *wcs, int inplace) { gal_data_t *out; int *stat=NULL, ncoord=coords->size, nelem; double *phi=NULL, *theta=NULL, *world=NULL, *pixcrd=NULL, *imgcrd=NULL; /* It can happen that the input datasets are empty. In this case, simply return them. */ if(coords->size==0 || coords->array==NULL) { if(inplace) return coords; else error(EXIT_FAILURE, 0, "%s: a bug! Please contact us at " "'%s' to fix the problem. The input has no data and " "'inplace' is not called", __func__, PACKAGE_BUGREPORT); } /* Some sanity checks. */ wcs_convert_sanity_check_alloc(coords, wcs, __func__, &stat, &phi, &theta, &world, &pixcrd, &imgcrd); nelem=wcs->naxis; /* We have to make sure a WCS is given first. */ /* Write the values from the input list of separate columns into a single array (WCSLIB input). */ wcs_convert_list_to_from_array(coords, world, stat, wcs->naxis, 0); /* Use WCSLIB's wcss2p for the conversion. We are ignoring the over-all status here, because later we will use the 'stat' array to set all bad coordinates to NaN. */ wcss2p(wcs, ncoord, nelem, world, phi, theta, imgcrd, pixcrd, stat); /* For a sanity check. { size_t i; printf("\n\n%s sanity check:\n", __func__); for(i=0;i<coords->size;++i) printf("(%g, %g) --> phi:%g, theta: %g --> (%g, %g) --> (%g, %g) " "[stat: %d]\n", world[i*2], world[i*2+1], phi[i*2], theta[i*2], imgcrd[i*2], imgcrd[i*2+1], pixcrd[i*2], pixcrd[i*2+1], stat[i]); printf("stat: %d\n", stat[4]); } */ /* Allocate the output arrays if they were not already allocated. */ out=wcs_convert_prepare_out(coords, wcs, inplace); /* Write the output from a single array (WCSLIB output) into the output list of this function. */ wcs_convert_list_to_from_array(out, pixcrd, stat, wcs->naxis, 1); /* Clean up. */ free(phi); free(stat); free(theta); free(world); free(imgcrd); free(pixcrd); /* Return the output list of coordinates. */ return out; } /* Similar to 'gal_wcs_world_to_img'. */ gal_data_t * gal_wcs_img_to_world(gal_data_t *coords, struct wcsprm *wcs, int inplace) { gal_data_t *out; int *stat=NULL, ncoord=coords->size, nelem; double *phi=NULL, *theta=NULL, *world=NULL, *pixcrd=NULL, *imgcrd=NULL; /* Some sanity checks. */ wcs_convert_sanity_check_alloc(coords, wcs, __func__, &stat, &phi, &theta, &world, &pixcrd, &imgcrd); nelem=wcs->naxis; /* We have to make sure a WCS is given first. */ /* Write the values from the input list of separate columns into a single array (WCSLIB input). */ wcs_convert_list_to_from_array(coords, pixcrd, stat, wcs->naxis, 0); /* Use WCSLIB's wcsp2s for the conversion. We are ignoring the over-all status here, because later we will use the 'stat' array to set all bad coordinates to NaN. */ wcsp2s(wcs, ncoord, nelem, pixcrd, imgcrd, phi, theta, world, stat); /* For a check. { size_t i; printf("\n\n%s sanity check (%d dimensions):\n", __func__, nelem); for(i=0;i<coords->size;++i) switch(nelem) { case 2: printf("(%-10g %-10g) --> (%-10g %-10g), [stat: %d]\n", pixcrd[i*2], pixcrd[i*2+1], world[i*2], world[i*2+1], stat[i]); break; case 3: printf("(%g, %g, %g) --> (%g, %g, %g), [stat: %d]\n", pixcrd[i*3], pixcrd[i*3+1], pixcrd[i*3+2], world[i*3], world[i*3+1], world[i*3+2], stat[i]); break; } } */ /* Allocate the output arrays if they were not already allocated. */ out=wcs_convert_prepare_out(coords, wcs, inplace); /* Write the output from a single array (WCSLIB output) into the output list of this function. */ wcs_convert_list_to_from_array(out, world, stat, wcs->naxis, 1); /* Clean up. */ free(phi); free(stat); free(theta); free(world); free(imgcrd); free(pixcrd); /* Return the output list of coordinates. */ return out; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/makeplugin.c����������������������������������������������������������������������0000644�0001750�0001750�00000023277�14551337306�012050� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* Extensions to GNU Make for working with FITS files. This is part of GNU Astronomy Utilities (Gnuastro) package. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2022-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <config.h> #include <stdio.h> #include <errno.h> #include <error.h> #include <string.h> #include <stdlib.h> #include <gnumake.h> #include <gnuastro/txt.h> #include <gnuastro-internal/options.h> #include <gnuastro-internal/checkset.h> /* Necessary for GNU Make. */ int plugin_is_GPL_compatible=1; /* Names of the separate functions. */ #define MAKEPLUGIN_FUNC_PREFIX "ast" /* Basic text functions */ static char *text_to_upper=MAKEPLUGIN_FUNC_PREFIX"-text-to-upper"; static char *text_to_lower=MAKEPLUGIN_FUNC_PREFIX"-text-to-lower"; static char *text_contains_name=MAKEPLUGIN_FUNC_PREFIX"-text-contains"; static char *text_not_contains_name=MAKEPLUGIN_FUNC_PREFIX"-text-not-contains"; /* Gnuastro analysis functions */ static char *version_is_name=MAKEPLUGIN_FUNC_PREFIX"-version-is"; static char *fits_with_keyvalue_name=MAKEPLUGIN_FUNC_PREFIX"-fits-with-keyvalue"; static char *fits_unique_keyvalues_name=MAKEPLUGIN_FUNC_PREFIX"-fits-unique-keyvalues"; /**********************************************************************/ /*************** Configuration function ***************/ /**********************************************************************/ static char * makeplugin_version_is(const char *caller, unsigned int argc, char **argv) { int check=0; char *out=NULL; char *version=gal_txt_trim_space(argv[0]); /* If the version matches, set the value of 'check'. */ if( version && !strcmp(PACKAGE_VERSION, version) ) check=1; /* Write the value into the 'out' pointer. */ if( asprintf(&out, "%d", check)<0 ) error(EXIT_FAILURE, 0, "%s: couldn't allocate output string", __func__); /* Return the output string. */ return out; } /**********************************************************************/ /*************** Text functions ***************/ /**********************************************************************/ /* Base function that is used for both the contains and not-contains functions. */ static char * makeplugin_text_contains_base(char **argv, int has1_not0) { char *out=NULL; gal_list_str_t *tmp, *outlist=NULL; char *match=argv[0]; /* No trimming the white space before/after, as in */ gal_list_str_t *strings=gal_list_str_extract(argv[1]); /* Make itself. */ /* Parse the input strings and find the ones that match. */ for(tmp=strings; tmp!=NULL; tmp=tmp->next) if( gal_txt_contains_string(tmp->v, match)==has1_not0 ) gal_list_str_add(&outlist, tmp->v, 0); /* Write the list into one string, but first reverse it so it has the same order as the input. */ gal_list_str_reverse(&outlist); out=gal_list_str_cat(outlist, ' '); /* Clean up and return. */ gal_list_str_free(strings, 1); gal_list_str_free(outlist, 0); /* We didn't allocate these. */ return out; } /* Return any of the input strings that contain the given string. It takes two arguments: 0. String to check. 1. List of text. */ static char * makeplugin_text_contains(const char *caller, unsigned int argc, char **argv) { return makeplugin_text_contains_base(argv, 1); } /* Return any of the input strings that contain the given string. It takes two arguments: 0. String to check. 1. List of text. */ static char * makeplugin_text_not_contains(const char *caller, unsigned int argc, char **argv) { return makeplugin_text_contains_base(argv, 0); } /* Convert input string to upper-case. */ static char * makeplugin_text_to_upper(const char *caller, unsigned int argc, char **argv) { char *out; gal_checkset_allocate_copy(argv[0], &out); gal_checkset_string_case_change(out, 1); return out; } /* Convert input string to upper-case. */ static char * makeplugin_text_to_lower(const char *caller, unsigned int argc, char **argv) { char *out; gal_checkset_allocate_copy(argv[0], &out); gal_checkset_string_case_change(out, 0); return out; } /**********************************************************************/ /*************** FITS functions ***************/ /**********************************************************************/ /* Select the input files that have the requested value(s) in the requested keywords. */ static int makeplugin_fits_check_input(char **argv, size_t numargs, char *name) { char *c; size_t i; /* If the HDU is empty, print a warning and don't continue. */ for(i=0;i<numargs;++i) { /* We need to skip white-space characters. */ c=argv[i]; do if(isspace(*c)) ++c; else break; while(1); if(*c=='\0') { if(i>0) /* Message only necessary for first argument. */ error(EXIT_SUCCESS, 0, "%s: argument %zu is empty", name, i+1); return 0; } } /* If control reaches here, everything is good. */ return 1; } /* Select files, were a certain keyword has a certain value. It takes four arguments: 0. Keyword name. 1. Keyword value(s). 2. HDU (fixed in all files). 3. List of files. */ static char * makeplugin_fits_with_keyvalue(const char *caller, unsigned int argc, char **argv) { gal_list_str_t *outlist=NULL; char *name=gal_txt_trim_space(argv[0]); gal_list_str_t *files=NULL, *values=NULL; char *out, *hdu=gal_txt_trim_space(argv[2]); /* If any of the inputs are empty, then don't bother continuing. */ if( makeplugin_fits_check_input(argv, 4, fits_with_keyvalue_name)==0 ) return NULL; /* Extract the components in the arguments with possibly multiple values and find the output files. */ files=gal_list_str_extract(argv[3]); values=gal_list_str_extract(argv[1]); outlist=gal_fits_with_keyvalue(files, hdu, name, values, NULL); /* Write the output string. */ out=gal_list_str_cat(outlist, ' '); /* Clean up and return. */ gal_list_str_free(files, 1); gal_list_str_free(values, 1); gal_list_str_free(outlist, 1); return out; } /* Return the unique values given to a certain keyword in many FITS files. It takes three arguments. 0. Keyword name. 1. HDU (fixed in all files). 2. List of files. */ static char * makeplugin_fits_unique_keyvalues(const char *caller, unsigned int argc, char **argv) { gal_list_str_t *files=NULL; gal_list_str_t *outlist=NULL; char *name=gal_txt_trim_space(argv[0]); char *out, *hdu=gal_txt_trim_space(argv[1]); /* If any of the inputs are empty, then don't bother continuing. */ if( makeplugin_fits_check_input(argv, 3, fits_unique_keyvalues_name)==0 ) return NULL; /* Extract the components in the arguments with possibly multiple values and find the output files. */ files=gal_list_str_extract(argv[2]); outlist=gal_fits_unique_keyvalues(files, hdu, name, NULL); /* Write the output value. */ out=gal_list_str_cat(outlist, ' '); /* Clean up and return. */ gal_list_str_free(files, 1); gal_list_str_free(outlist, 1); return out; } /**********************************************************************/ /******** High-level interface with Make *********/ /**********************************************************************/ int libgnuastro_make_gmk_setup() { /* ------------ Basic useful text functions ------------ */ /* Return the input strings that contain the given string. */ gmk_add_function(text_contains_name, makeplugin_text_contains, 2, 2, GMK_FUNC_DEFAULT); /* Return the input strings that DON'T contain the given string. */ gmk_add_function(text_not_contains_name, makeplugin_text_not_contains, 2, 2, GMK_FUNC_DEFAULT); /* Convert input sting into upper-case. */ gmk_add_function(text_to_upper, makeplugin_text_to_upper, 1, 1, GMK_FUNC_DEFAULT); /* Convert input string to lower-case. */ gmk_add_function(text_to_lower, makeplugin_text_to_lower, 1, 1, GMK_FUNC_DEFAULT); /* ------------ Gnuastro related functions ------------ */ /* Return 1 if Gnuastro has the requested version. */ gmk_add_function(version_is_name, makeplugin_version_is, 1, 1, GMK_FUNC_DEFAULT); /* Select files, were a certain keyword has a certain value. It takes four arguments. */ gmk_add_function(fits_with_keyvalue_name, makeplugin_fits_with_keyvalue, 4, 4, GMK_FUNC_DEFAULT); /* Return the unique values given to a certain keyword in many FITS files. */ gmk_add_function(fits_unique_keyvalues_name, makeplugin_fits_unique_keyvalues, 3, 3, GMK_FUNC_DEFAULT); /* Everything is good, return 1 (success). */ return 1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/lib/gnuastro.pc.in��������������������������������������������������������������������0000644�0001750�0001750�00000002155�14551337306�012333� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pkg-config settings for Gnuastro's library. # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Gnuastro 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: Gnuastro Description: GNU Astronomy Utilities URL: https://www.gnu.org/software/gnuastro/ Version: @VERSION@ Requires.private: wcslib cfitsio gsl @optional_libs@ Cflags: -I${includedir} Libs: -L${libdir} -lgnuastro @LIBS@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/����������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�007613� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/�����������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�013117� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/color-names.eps��������������������������������������������������0000644�0001750�0001750�00000374516�14557511157�016014� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 0 0 617 278 %%HiResBoundingBox: 0.000000 0.000000 616.500000 277.500000 %%Creator: dvips(k) 2023.1 (TeX Live 2023) Copyright 2023 Radical Eye Software %%Title: all-figure4.dvi %%CreationDate: Sat Feb 3 19:22:21 2024 %%PageOrder: Ascend %%DocumentFonts: CMTT8 %%EndComments % EPSF created by ps2eps 1.70 %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o ./tikz/all-figure4.ps ./tikz/all-figure4.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2024.02.03:2022 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: l3backend-dvips.pro 0 0 %% %% This is file `l3backend-dvips.pro', %% generated with the docstrip utility. %% %% The original source files were: %% %% l3backend-header.dtx (with options: `header,dvips') %% %% Copyright (C) 2019-2024 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of %% this license or (at your option) any later version. The latest %% version of this license is in the file: %% %% https://www.latex-project.org/lppl.txt %% %% This file is part of the "l3backend bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% %% File: l3backend-header.dtx /color.sc { } def TeXDict begin /TeXcolorseparation { setcolor } def end true setglobal /pdf.globaldict 4 dict def false setglobal /pdf.cvs { 65534 string cvs } def /pdf.dvi.pt { 72.27 mul Resolution div } def /pdf.pt.dvi { 72.27 div Resolution mul } def /pdf.rect.ht { dup 1 get neg exch 3 get add } def /pdf.linkmargin { 1 pdf.pt.dvi } def /pdf.linkdp.pad { 0 } def /pdf.linkht.pad { 0 } def /pdf.rect { /Rect [ pdf.llx pdf.lly pdf.urx pdf.ury ] } def /pdf.save.ll { currentpoint /pdf.lly exch def /pdf.llx exch def } def /pdf.save.ur { currentpoint /pdf.ury exch def /pdf.urx exch def } def /pdf.save.linkll { currentpoint pdf.linkmargin add pdf.linkdp.pad add /pdf.lly exch def pdf.linkmargin sub /pdf.llx exch def } def /pdf.save.linkur { currentpoint pdf.linkmargin sub pdf.linkht.pad sub /pdf.ury exch def pdf.linkmargin add /pdf.urx exch def } def /pdf.dest.anchor { currentpoint exch pdf.dvi.pt 72 add /pdf.dest.x exch def pdf.dvi.pt vsize 72 sub exch sub /pdf.dest.y exch def } def /pdf.dest.point { pdf.dest.x pdf.dest.y } def /pdf.dest2device { /pdf.dest.y exch def /pdf.dest.x exch def matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix cvx exec /pdf.dev.y exch def /pdf.dev.x exch def /pdf.tmpd exch def /pdf.tmpc exch def /pdf.tmpb exch def /pdf.tmpa exch def pdf.dest.x pdf.tmpa mul pdf.dest.y pdf.tmpc mul add pdf.dev.x add pdf.dest.x pdf.tmpb mul pdf.dest.y pdf.tmpd mul add pdf.dev.y add } def /pdf.bordertracking false def /pdf.bordertracking.begin { SDict /pdf.bordertracking true put SDict /pdf.leftboundary undef SDict /pdf.rightboundary undef /a where { /a { currentpoint pop SDict /pdf.rightboundary known dup { SDict /pdf.rightboundary get 2 index lt { not } if } if { pop } { SDict exch /pdf.rightboundary exch put } ifelse moveto currentpoint pop SDict /pdf.leftboundary known dup { SDict /pdf.leftboundary get 2 index gt { not } if } if { pop } { SDict exch /pdf.leftboundary exch put } ifelse } put } if } def /pdf.bordertracking.end { /a where { /a { moveto } put } if /x where { /x { 0 exch rmoveto } put } if SDict /pdf.leftboundary known { pdf.outerbox 0 pdf.leftboundary put } if SDict /pdf.rightboundary known { pdf.outerbox 2 pdf.rightboundary put } if SDict /pdf.bordertracking false put } def /pdf.bordertracking.endpage { pdf.bordertracking { pdf.bordertracking.end true setglobal pdf.globaldict /pdf.brokenlink.rect [ pdf.outerbox aload pop ] put pdf.globaldict /pdf.brokenlink.skip pdf.baselineskip put pdf.globaldict /pdf.brokenlink.dict pdf.link.dict pdf.cvs put false setglobal mark pdf.link.dict cvx exec /Rect [ pdf.llx pdf.lly pdf.outerbox 2 get pdf.linkmargin add currentpoint exch pop pdf.outerbox pdf.rect.ht sub pdf.linkmargin sub ] /ANN pdf.pdfmark } if } def /pdf.bordertracking.continue { /pdf.link.dict pdf.globaldict /pdf.brokenlink.dict get def /pdf.outerbox pdf.globaldict /pdf.brokenlink.rect get def /pdf.baselineskip pdf.globaldict /pdf.brokenlink.skip get def pdf.globaldict dup dup /pdf.brokenlink.dict undef /pdf.brokenlink.skip undef /pdf.brokenlink.rect undef currentpoint /pdf.originy exch def /pdf.originx exch def /a where { /a { moveto SDict begin currentpoint pdf.originy ne exch pdf.originx ne or { pdf.save.linkll /pdf.lly pdf.lly pdf.outerbox 1 get sub def pdf.bordertracking.begin } if end } put } if /x where { /x { 0 exch rmoveto SDict begin currentpoint pdf.originy ne exch pdf.originx ne or { pdf.save.linkll /pdf.lly pdf.lly pdf.outerbox 1 get sub def pdf.bordertracking.begin } if end } put } if } def /pdf.breaklink { pop counttomark 2 mod 0 eq { counttomark /pdf.count exch def { pdf.count 0 eq { exit } if counttomark 2 roll 1 index /Rect eq { dup 4 array copy dup dup 1 get pdf.outerbox pdf.rect.ht pdf.linkmargin 2 mul add sub 3 exch put dup pdf.outerbox 2 get pdf.linkmargin add 2 exch put dup dup 3 get pdf.outerbox pdf.rect.ht pdf.linkmargin 2 mul add add 1 exch put /pdf.currentrect exch def pdf.breaklink.write { pdf.currentrect dup pdf.outerbox 0 get pdf.linkmargin sub 0 exch put dup pdf.outerbox 2 get pdf.linkmargin add 2 exch put dup dup 1 get pdf.baselineskip add 1 exch put dup dup 3 get pdf.baselineskip add 3 exch put /pdf.currentrect exch def pdf.breaklink.write } 1 index 3 get pdf.linkmargin 2 mul add pdf.outerbox pdf.rect.ht add 2 index 1 get sub pdf.baselineskip div round cvi 1 sub exch repeat pdf.currentrect dup pdf.outerbox 0 get pdf.linkmargin sub 0 exch put dup dup 1 get pdf.baselineskip add 1 exch put dup dup 3 get pdf.baselineskip add 3 exch put dup 2 index 2 get 2 exch put /pdf.currentrect exch def pdf.breaklink.write SDict /pdf.pdfmark.good false put exit } { pdf.count 2 sub /pdf.count exch def } ifelse } loop } if /ANN } def /pdf.breaklink.write { counttomark 1 sub index /_objdef eq { counttomark -2 roll dup wcheck { readonly counttomark 2 roll } { pop pop } ifelse } if counttomark 1 add copy pop pdf.currentrect /ANN pdfmark } def /pdf.pdfmark { SDict /pdf.pdfmark.good true put dup /ANN eq { pdf.pdfmark.store pdf.pdfmark.dict begin Subtype /Link eq currentdict /Rect known and SDict /pdf.outerbox known and SDict /pdf.baselineskip known and { Rect 3 get pdf.linkmargin 2 mul add pdf.outerbox pdf.rect.ht add Rect 1 get sub pdf.baselineskip div round cvi 0 gt { pdf.breaklink } if } if end SDict /pdf.outerbox undef SDict /pdf.baselineskip undef currentdict /pdf.pdfmark.dict undef } if pdf.pdfmark.good { pdfmark } { cleartomark } ifelse } def /pdf.pdfmark.store { /pdf.pdfmark.dict 65534 dict def counttomark 1 add copy pop { dup mark eq { pop exit } { pdf.pdfmark.dict begin def end } ifelse } loop } def %% %% %% End of file `l3backend-dvips.pro'. %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup} ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N /erasepage{}N/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{ count ocount sub{pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginProcSet: color.pro 0 0 %! TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet TeXDict begin @defspecial systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict /cleartomark get put}ifelse /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution mul} def/BPToDvips{72 div Resolution mul}def product (Ghostscript) search {pop pop pop revision 927 gt}{pop false} ifelse{/BorderArrayPatch{} def}{/BorderArrayPatch{[exch{dup dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def} ifelse /HyperBorder {1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def /pgfHrgb{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfArgb} def /pgfdir { dup 0 moveto dup 5 index lineto } bind def} bind def /pgfVrgb{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfArgb} def /pgfdir { dup 0 exch moveto dup 5 index exch lineto } bind def} bind def /pgfArgb{ /pgfdiff 8 index round cvi 8 index round cvi sub 2 mul 1 add def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div pgfheight 9 index 9 index 9 index 14 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfdir stroke 4 -1 roll 7 index add 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll .5 sub } repeat mark 15 1 roll cleartomark exch pop }bind def /pgfR1rgb{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRrgb} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2rgb{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setrgbcolor fill pop}bind def /pgfRrgb{ /pgfdiff 8 index round cvi 8 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 9 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 9 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 8 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 8 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 8 index 8 index 8 index 13 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll 4 index add 4 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 14 1 roll cleartomark exch pop }bind def /pgfHcmyk{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAcmyk} def /pgfdir { dup 0 moveto dup 6 index lineto } bind def} bind def /pgfVcmyk{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAcmyk} def /pgfdir { dup 0 exch moveto dup 6 index exch lineto } bind def} bind def /pgfAcmyk{ /pgfdiff 10 index round cvi 10 index round cvi sub 2 mul 1 add def 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div pgfheight 12 index 12 index 12 index 12 index 18 index pgfdiff { 4 index 4 index 4 index 4 index setcmykcolor pgfdir stroke 5 -1 roll 9 index add 5 -1 roll 8 index add 5 -1 roll 7 index add 5 -1 roll 6 index add 5 -1 roll .5 sub } repeat mark 19 1 roll cleartomark exch pop }bind def /pgfR1cmyk{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRcmyk} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2cmyk{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setcmykcolor fill pop}bind def /pgfRcmyk{ /pgfdiff 10 index round cvi 10 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 11 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 11 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 10 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 10 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 11 index 11 index 11 index 11 index 17 index pgfdiff { 4 index 4 index 4 index 4 index setcmykcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 5 -1 roll 8 index add 5 -1 roll 7 index add 5 -1 roll 6 index add 5 -1 roll 5 index add 5 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 18 1 roll cleartomark exch pop }bind def /pgfHgray{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAgray} def /pgfdir { dup 0 moveto dup 3 index lineto } bind def} bind def /pgfVgray{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAgray} def /pgfdir { dup 0 exch moveto dup 3 index exch lineto } bind def} bind def /pgfAgray{ /pgfdiff 4 index round cvi 4 index round cvi sub 2 mul 1 add def dup 2 index sub pgfdiff div pgfheight 3 index 6 index pgfdiff { 1 index setgray pgfdir stroke exch 3 index add exch .5 sub } repeat mark 7 1 roll cleartomark exch pop }bind def /pgfR1gray{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRgray} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2gray{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setgray fill pop}bind def /pgfRgray{ /pgfdiff 4 index round cvi 4 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 5 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 5 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 4 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 4 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def dup 2 index sub pgfdiff div 2 index 5 index pgfdiff { 1 index setgray pgfcircx pgfcircy 2 index 0 360 arc closepath stroke exch 2 index add exch .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 6 1 roll cleartomark exch pop }bind def /pgfsc{}bind def/pgffc{}bind def/pgfstr{stroke}bind def/pgffill{fill}bind def/pgfeofill{eofill}bind def/pgfe{a dup 0 rlineto exch 0 exch rlineto neg 0 rlineto closepath}bind def/pgfw{setlinewidth}bind def/pgfs{save pgfpd 72 Resolution div 72 VResolution div neg scale magscale{1 DVImag div dup scale}if pgfx neg pgfy neg translate pgffoa .setopacityalpha}bind def/pgfr{pgfsd restore}bind def userdict begin/pgfo{pgfsd /pgfx currentpoint /pgfy exch def def @beginspecial}bind def /pgfc{newpath @endspecial pgfpd}bind def /pgfsd{globaldict /pgfdelta /delta where {pop delta} {0} ifelse put}bind def/pgfpd{/delta globaldict /pgfdelta get def}bind def /.setblendmode where {pop} {/.setblendmode{pop}def} ifelse /.setfillconstantalpha where {pop /.setopacityalpha {.setfillconstantalpha} def} {/.setopacityalpha where {pop} {/.setopacityalpha {pop} def} ifelse} ifelse /.pgfsetfillopacityalpha{/pgffoa exch def /.setfillconstantalpha where {pop pgffoa .setfillconstantalpha} {/pgffill{gsave pgffoa .setopacityalpha fill 1 .setopacityalpha newpath fill grestore newpath}bind def /pgfeofill{gsave pgffoa .setopacityalpha eofill 1 .setopacityalpha newpath eofill grestore newpath}bind def} ifelse} bind def /.pgfsetstrokeopacityalpha{/pgfsoa exch def /.setstrokeconstantalpha where {pop pgfsoa .setstrokeconstantalpha} {/pgfstr{gsave pgfsoa .setopacityalpha stroke grestore newpath}bind def} ifelse}bind def /pgffoa 1 def /pgfsoa 1 def /.pushpdf14devicefilter where {pop [userdict /bop-hook known {userdict /bop-hook get aload pop} if {0 .pushpdf14devicefilter} aload pop] cvx userdict exch /bop-hook exch put [userdict /eop-hook known {userdict /eop-hook get aload pop} if {.poppdf14devicefilter} aload pop] cvx userdict exch /eop-hook exch put} if systemdict /pdfmark known not {userdict /pdfmark systemdict /cleartomark get put} if end /pgfwritesamplecmyk { 4 index 0 5 index pgfcheckcolorrange 255 mul round cvi put 4 index 1 4 index pgfcheckcolorrange 255 mul round cvi put 4 index 2 3 index pgfcheckcolorrange 255 mul round cvi put 4 index 3 2 index pgfcheckcolorrange 255 mul round cvi put pop pop pop pop } bind def /pgfwritesamplergb { 3 index 0 4 index pgfcheckcolorrange 255 mul round cvi put 3 index 1 3 index pgfcheckcolorrange 255 mul round cvi put 3 index 2 2 index pgfcheckcolorrange 255 mul round cvi put pop pop pop } bind def /pgfwritesamplegray { pgfcheckcolorrange 16777215 mul round cvi 1 index 0 2 index -16 bitshift put 1 index 1 2 index 65535 and -8 bitshift put 1 index 2 2 index 255 and put pop } bind def /pgfcheckcolorrange { dup 0.0 lt {pop 0.0} if dup 1.0 gt {pop 1.0} if } bind def /pgfchanneldepthcmyk 8 def /pgfchanneldepthrgb 8 def /pgfchanneldepthgray 24 def /pgfcolorsamplecmyk 4 string def /pgfcolorsamplergb 3 string def /pgfcolorsamplegray 3 string def /pgfrangecmyk [0 1 0 1 0 1 0 1] def /pgfrangergb [0 1 0 1 0 1] def /pgfrangegray [0 1] def /pgf1{gsave exec 1.0 pgfw 2.00002 0.0 moveto -6.00006 4.00005 lineto -3.00003 0.0 lineto -6.00006 -4.00005 lineto pgffill grestore} bind def /pgf2{gsave exec 1.0 pgfw 0.8 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -3.00003 4.00005 moveto -2.75002 2.50002 0.0 0.24998 0.75 0.0 curveto 0.0 -0.24998 -2.75002 -2.50002 -3.00003 -4.00005 curveto pgfstr grestore} bind def /pgf3{gsave exec 1.0 pgfw [ ] 0.0 setdash 0.0 -5.00005 moveto 0.0 5.00005 lineto pgfstr grestore} bind def /pgf4{gsave exec 1.0 pgfw [ ] 0.0 setdash -3.00003 -5.00005 moveto 0.0 -5.00005 lineto 0.0 5.00005 lineto -3.00003 5.00005 lineto pgfstr grestore} bind def /pgf5{gsave exec 1.0 pgfw [ ] 0.0 setdash -2.00002 -5.00005 moveto 1.0 -3.00003 1.0 3.00003 -2.00002 5.00005 curveto pgfstr grestore} bind def /pgf6{gsave exec 1.0 pgfw [ ] 0.0 setdash -4.50003 -5.00005 moveto 0.49998 0.0 lineto -4.50003 5.00005 lineto pgfstr grestore} bind def /pgf7{gsave exec 1.0 pgfw -2.50002 0.0 translate [ ] 0.0 setdash 3.00003 0.0 moveto 3.00003 1.65689 1.65689 3.00003 0.0 3.00003 curveto -1.65689 3.00003 -3.00003 1.65689 -3.00003 0.0 curveto -3.00003 -1.65689 -1.65689 -3.00003 0.0 -3.00003 curveto 1.65689 -3.00003 3.00003 -1.65689 3.00003 0.0 curveto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def /pgf8{gsave exec 1.0 pgfw [ ] 0.0 setdash 1.0 0.0 moveto -5.00005 3.00003 lineto -11.00012 0.0 lineto -5.00005 -3.00003 lineto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def @fedspecial end %%BeginFont: CMTT8 %!PS-AdobeFont-1.0: CMTT8 003.002 %%Title: CMTT8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT8 known{/CMTT8 findfont dup/UniqueID known{dup /UniqueID get 5000830 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT8 def /FontBBox {-5 -232 545 699 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT8.) readonly def /FullName (CMTT8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D06E82116C79486D8 C5C32DADDFCB2CBD26FE85FFCB176AA09FBE325434B8B9D358B7C180AEC54F8D 24A1AB4D5EE5375B963A221F060453E01768F0A398352CB2C76E6E70BA017570 BE1C3D3A86E803B10B506FD9DB49DF5CC7BE17133234D7BE9230BE8B7481B357 08595FAE04D04B14C633C52E303B06EDEEF7CDDF20F34D7F08D991DFE2C4261F 298E0A818EBFF29D3B29D1D0CE2F071B49B0622F65F936F6C1D4C6AA2860E56C 9140A4FA23BA31888345142DBFA79825662511437347767D4A13A976FCF67EA6 7882D7B391B37FC1E22787E484D19BB252C4D73AA3D73EFA5C6341CF6F127033 2B91079B5FF8A164666CCC65D0002EF7E374098745C84E3037324B4248C5385C FCF0539F8C04CBC52404BDC6ABD1474617D06377A69F4851838F462E82A86BC6 F8DB2E740B5270AECB0B922D4493A75422349138B539B6067C040F3007F04191 CB545ACC01B4F28AF811266260FEEC04057287BB5C26C077946DDF23322FD99F 2B3DFFB62AB8BF12000AA81ADAA6A064F9C34D5F36CB7F66A5EEB7B494FA1AAE 32B380163AEE08F5BD270FAAD8DAF0CC5B6979B8D4FB6AD723E011DCFE119092 D1025BB62280B745BB0FB140E82325F1FDFC029100F922BF206E5527B7D8F60C 3F3E3AE2184CB954391D10A1618FA0940F12159167494E29A46125CB911B19C4 97B4DC76FF53B7F79E380D7375FAB6C30A467E02E48BA73403D3900FBB440C9E 951C081C8D5E04DC0C8E1BC7D552075CC360B7D1007367C655069324713715BF F8182AEB6F401A1F029FB3962BB3A0B2775979FDFFD834D5559EE20CF54D789D 41AAE2A22A06E509E4E648FD33710B58A83FBC8DB8D6544577E03B186F0576A1 0C1F1FDE425A0AA5724986D953945FD3ADC0C170FBDD241BAC988D65CA8FFD0B B013EB27813C9B3740FE2E9D8D81FEDAD1A95CC38494DCD832CC92797432F3B2 4CBCF51F4C14C18B1E5146F691604D4799419A851AF73C1978E6ADEA42A238CF 1150B173A01BBCE289A295CFD5C2D2ABD635DA7FFE17B2448230C4611B33767D 290398B07A09A94DBAE6080FC251D0FC54A5030FAB4B341BEDC1EADCE7ADE89F C285EC1BB6E19BE9B1E902D8F01E5ABE8CB4723E06A2B40E883572A5A4E3B12D 6C769FF65FC384AF347BA94F84C57F6D0482746EB2FBB43B6CB2B80C7E0E97AE 0B584D9D89F85A47EEE12C2E333311F4DDF88B797CAA35C737F3DF938004CA4E 9EFFF243628AADD6012C5ED5A9F1AE7ED88340879B2EBF04DECC857FEF0F1136 1314503CFFFCE5CC3EE746936C6BC620ED7055C6397221A77C908D7B88EAA9B7 F03F7951224F5DE5CD00FC3040A272A1C306955FBE54E2ACFDDB0D93AD4CBD16 C9E8A82A7BECFC822C1B39F3DEF4447DB083A8059739F0FDFF080176C32177D6 080BE90C2C0A139999A9130FDF3FDE7FEDE9B96C1F6CF4B3081A4B47E4F063B1 E118F571EC9256C7043FCB1A9C76C3E7D965ADF9B1637CAA5DA8D61934D10D11 45DAB27CD4688512EBE71A1A448790E05A681C1C2D26CF4FE467DDD41D3EE179 26810D6EE1DEB63CFFA2390D43363F8B5A85865E4EBF60EB41BF5F7B420DFC84 1BB2E29BBB9093FDB9997EBA7B161A811840F9B26D00D744CD527BAEBE35D1CB ADE1828E95ACB3EF969BB24CACE12ABCE6ABFE1E9E8913232F8C8E5A03FB4ADC A77B44E664EF6E6C87C2536E18B77B7C7A2FB66FDC8A0E0AF714EF6BC31F88FD 868E8AFCCD6DB0CFF92719A306BB15DA5CB7FE29984FC951BA248AAC98F043BD E8A77CF93EC6D18CE558A6373F3B33141BE6D7478D59F05FFBD76A4B6CB0AE55 C3A7E6A7206F0DD3B0888272E5D1B99005F6A40EA4056D7E2945F9ED517546E4 059D11E71679D1AE83395F9709F903C5FFD904F3A0B854D18974C288F493E848 DDECCD5CF49C01B0D0C82044026DA599D7EC1E0E0AFCA7B3E5887D47F73D98E8 37C607BAC957833BA09ED4F06F359C5CAD4CC4494B562C2FE324D778E8B0CC47 556A9D8C8B568BD2845E95FE4C455F154DAD5B2A54642AD7E3F409E650F4D8CD 63ADA5D002A5728CE18DD301AAA69044E5A6EA5FEC7073DEAB7E93A8C8421E27 656C207178C4DD89D9AC310A05CD3413D3E85568DFD6734A19DF2A443C8CCFC5 D8FA069C86771C5B461153A397F1900CBCC246F795012D1A7A87FC4A8AB5F200 734576A255DD0CF7CE7E371C75F2058DBA460B62B82CE6D85C60F0492539063B 240FF48EA39C1E5A149B0F684B84A88A1DB649CF67F6ABCB16B43BF85D8CDF41 2CDDE2F4E00314D42B316E9883582C9B71D399F3FAA706147E46EC276E201EFA 141D0A2D01D91167DD677AA9C5CA94A3C8BCB8BA685019035E9AD3E1E29BC01D B74E04E62EBF5674D70A1C7132C8A8D8D9D4A9E70FA96899A0B26B4A02B5243E C5A2F8444728A5432736C06A1E7AE2C26BCCC109C20C408C15C25FB40CD0881A D2510E07F83618864C50E7400742847C24D2FD4B80A7DE454DF9FB9A1FA5B06A 6B7EA590AD1BAF9BDA46B7785F856244E5E0E4E9B27830E17B8C982B8395B15A 62E363649DDBC0565AD9CD1895727F3ABEBACD31000FB27A957733E0E168CFAA 7BB5F5B11F62A3D8EC0D261638A5E90EFF09E4190964D17099A7A36050D21C6C F1CBC4172A1326B044ABFB2C1FC01C98AAD4418D88B80172C309BE5C6D920398 AADD02F25C8A5FC6F1721779D5B9C28B199BDC52E7F937AF15E68C58F8D3B99B DFE3F918A2DFA3BF205BD7D0D09AE4870C561D62389E4D13F8AC2320F1BB97D8 8B823EEF024E4A0A98B21FFEFD1A487AA8A0ECC4E1159CD3EFB9EC21123D71E8 1287AF5E3E1751C0862BE9B3FFFA7490554742E82CED3131281F57EBD82E0D0A F766A2BDF8B1648B27FE7CD15FCECB03616141D37104A0B6A3260DACD2F28248 6EAF3561826D65A25B1692C01AABE476348D7B6BA48270B6337BD48BF04D0244 699217C864C8C26D71AF5E292288FF55BD7F4CB142817138E34790F21AEAA962 4644257D248724746E7D53A9B835AE21F27FB1DB22D2C65D66325A1C714DE612 5A27FE1B2471842ABA09B92DA200778ED12D4E552B00697E0F79185A76EAA0EE A782E964F7EAC1084DDAC6664246C5EB71B0060FF92DF285C836365C531D8697 2504700BA5B54B9D6CCD65220BC0547C2E51356EF1908B10F96FD4382C08D64B DFC3240507F59B9FABECE51129A418620D0DA50AB7F38D4873AA56207364E4A7 EF9ED15F008CAF50E186DA55916B65C1C3ED0524F3644E2E87E51E394B08E212 DD962802A4C03E2637CAEA45F516B2E074D51114F7F3CB4AE8C406FDB389E606 28A1DAEE51BDDFFF0D9F5E18B71349BE4F309F34508113D7367371EAF1BCBE03 31D644E7CFE7F4F58C1375E7F92EA28EEFB07B211D032C276831FF330949EC37 191F7A8481B95218DAE3D25407AEF0D9E31DD0602AF492F4CFF38F68630611F7 036006EA0FD4D7F6AD5E035EE9166F5388A103BA7E97D6ACD9F447A7E91A61A7 AA561E933B325F5DD7D2C7B696295A8D6AB00ED8C3ED8702646A64C218775EE7 72AE77C3474E4F4E668C33C81D8CC6D982C26C964393272FEEBA6F970C3180C8 61CA16189A638EE0A45362E520820D36F4C9315442A73A4B247351DB4CF7665F F2609B407119F156461F4BB5A4A2CC5E025D310B241F34B36EFA8E6DFD4BF29F B5C54826350B119738EC43382D195E3909EA1F7CDF53DA3D45B1E9DA442D11DE 8B7533955D0246D9E008CDB0690C392A0B9767349BA4F2903C3BAF917DF71BCD 0129D2D57049F8DDCB63D552B07A8A405B52C4D828BC46E27B33DB5D1BE18A96 CBF4B6826923A9DF49C04B0C5C091036B6D0CE6003825DC6FB37FBA248E4E6DF 9E0384CD7F4BEBB2CF80DC3C297D357BF8C4346872D64915B9B20207BD5114E9 F330B030254F220AF04CD92A6643AD4FD33C0C2C63229841E8DC7177B30F7984 1F185A197608EC69E3A3FF9239B17065589189EA4AF5819F3F880378FD796599 1900E10A469EB92410F25CF6BC7F7CC1EF7E3A9A1DE3328CBCB8621DB3349CF2 43EABE34C6679162546A81B11D81F0147CDCD16C0602B2A6A52116B4EC1D3D0D DC6CF8D453B2B5684944D19F88F528F5B080210CC455DB7F71F2351FAC99DF82 723CF31C3F957BDEEBF976D540B7A260B5BF518664B149B459E20E3D911C0867 6FD8A53F44B6905704CFED96AFD0A8FDE8F24BBFF730A0312BD3ADF4F7B668FE 331A8DBDA24CA65DD3E4419347224F2D59447BEEAA5C407862DBC87B40C34A56 D02FB4467FA3E7C412E57800BBDFB4D8268C2B33D5C0E586FCD9734A49197E4D CDFA1BD1880395E3C3458AE217DA87EBE217DBC9F064774103A5FB687B8CBC5B 96912E91FA3F1F4EAEB19517F9947C580508309A3F004A6F4E4A53B1588EA983 31840409914018E3973DDE2C1ED3E63D0CBB6EC3529ADF54A79664A746A89492 0259AD49AC585A9359D2ECAB002932EC7D1344BB7E62404D63C0D38E745F73B4 59B3B4997633164572449E229240DAFCAEB58D0AD093FD7B4794370B34F0E206 6A118925E4B5BC1F25F122C497BC374E61C32B387340450A919DEAAABF143411 1CD71C6CD9127731E6B925B7C080DF38B31750324C5FB9213F7D5525CD992477 E64C99081FA685E0BFC06B6243348693B2E264258EF889CDCD7C9D737CD55E24 E478EF3FE9D120346366EA23AE9B5483924B862684E28099612B0DBFE0FA876C 62D9C4630574FFBEACADF4491AF8EB12926F21000C427AA9431195807CA56C9C AA7880EACE247AB9FAE3FA5E7E059DD3CD485808AE64F3EE328C373CDE2F07F2 E658020493F31F05AE7F5F0E5CEECCE5C1A1C59AFDA66444A8DD4CD374490161 7FC01169A570161659ADC5E8D6D2415079557D7C512731C78DEE4F05E85D5B71 BCBA5C28B0B69CF0FDAC8088D606A27B6DFC0B5CB206BAEEE6FFCCAFC14AC2E2 61F10E608C417CF0E0E7F883BE5498B509EEE30DA3D85AF42CD54C8B15DF07ED 5E1E8617B1862A79C71D76B15ED6861436E9EBA713A396BA3DEA0212CE3E053D 0BFA6FB25CB88D954F8FEC41CDC1BE60E4E1B089B7979648699AE2C291F3E87D 1D75D9787ED04A907B53EACA027CA3BCE4804B1F705CF4C964A0EEF580F19D55 D0376396854292BA0A10A213635E65D116006DA137B5EF161C95C12D11B163BE 25B56437AD4C863ADE015B15BE7675024E13ECFC440FDF0CCF4C76E7496BB3CA E63E3784CDF9243E51FF26ACD23307569088289998B779CD07D850592B708EB4 1E3E9C68E73A628C3218DF27BC053ADE9CA1CC37ED708F34890E0BAFED65E1B5 1EF2036E95F628F7BBA9FD26F711154D8CA323EF0183774390E17A16E76ED932 CC004EECB695807C595ECD3E6BE99A047743AEE03908417FF8D02AA6720E9CE7 18417AD5141B4A067CF3E8E242A9F943515D6A61B436EE908B7EE974B9D31AD8 AC090B564223F13E4F6FDE1A0D5308CAF9F6E376ACC5E3282A3F2FE4E87A7EE5 B36A5622A0A6B96AC50DD6C80A232CD664D20D0F1311895DAF78EB1F3E3CF99E E038CD7BBEFF88521684924A3C464B9F401035BFE1464D260F5F52F125AD987F 396F3C93E7B94A6F04D00C3210D69E838077D2B03D67F2C4917240BCBE8F6FE5 C750A29AFC11E03635FC7BA33BEFCFE7BCB26BB259EBA852C83A13840ADA1E8D 111271C0AADEB324F9DB0723D9097E1608ECB007E73F8A2BBB94658D51A1DE49 5739C1A42C05CC799FFD7F0BBCF111529DD2C39DB8EBC22E99646D9C132170D0 DF91E1AC494CD20805E86AA8FB0242CE790CA2D43E8BC8730CE509D3574563D1 D60B17DA2A733E3CEF577C6B14DDF033A74E315F970493993B4D59C54D2616E7 57612C005432D3EA9E31FD098BC3CFF08950C520F4C9C2C618A3CE9A4887FAE7 6226D2890F2CD21A396239AA39745A30DF7FE4B4887C4EF7E231C08C7ABF3208 2A6FCFE109FC5834384A3816DC89613A867A42AF50EF35683A05CBD9BB745ED2 43F975C919724032974CCFF4A9013E031F9BEA712A8782AA28CE5185E0A0D245 3D8DE7A781FD938A4E9788B3C1295FB34F8E5377794BB8F63AF2FE9FC05B49F4 3B74B8220FB598952834B149761F41ADF1953A0C0E47705BABC8EF2BF6975ACB 7485D40741FC98F0B462078952428B6F2EF91922A6B00D36B0FCB26DCE899891 C826BF5A4BE1F7AE890D3803E991CAC4FBA504A243EBCEC4C741EE9D43017B77 CAF5836AE6D17868782F7E1917E7CFBA9AFC6BE9AB1BAA82F016CDDFDAF0FE83 B5E95034AE7006414B3AFB43B4A526AE4CFB8F5AE2AA4A385EB5592B97268164 A17E51242B67E8C90CF51F7C973B8A0FCC10A334074291F4EC265043BC4D18AE 06B54EC9FD2A5F173D0A86A4B7DACED32CC1B9ABB98890C3910724111F06DAB9 C90FCB498B1BF0981130CF0CA9F4A650B1D34D6F5D05A0274302F26ACF9568B9 F464EE152412FE4EF5676585552448A861184BD17A24F75C8CEB04BBBD30062D FC5C9CA98CCD08695EE4052EE507D558802DAC62310D2CC86889C3802A0F1F1F 4EBF5841A3F6BB554D66CC41ADC21D9771A5279167E8532B924F43249E57900E 5B5DAD35F0FC372EA43370AAA30A99C17371F39F20E3CC3A1E0D58646783EA20 AFD82D2F7CC22DD28322D4E4A09ED6612E491F08563B01D5EC6A3ECE8816AA5C A9E6A5C72FE134BC706C4EA5CABDB40F4C5A66D920265C8AFBEA405F3ED39787 0918E1520FE3C24FFCCBEBC4C302569F62B804DA4A5A88287CF05F31348A1338 112108E30B478E6FE1C4FEE72902E0F7912FF998728ECC468A8C0E9E815A6B3A E0C453DA4D6B0E48B01F630041B5A0978F4121AA4825D5140E0EB99E0A57FE13 16E4DCA77B1994CEC2C7DFFC5903B9AAD46EC3D98E8043CA99CAE09728549977 09354E3FF26F22E7341F16A8D48CA05AC113F15EDC3717AF4758D90E634026DA 7D79FE2ED6957D31BFD66F1B0858E37F53A903A9D0DFD5474C57DA2A764A66C7 D6AEE897BACC5533DCBD76EB9897FDAC93916EC9B522F2422B50C168E8835332 63B5D30FE8033B2511E1033574C14F430879BC29693F8D54EECB3D0DABDC2BE6 66341A590C97E286BFB5A5354153E3148D201677454DC250D3D9C676CA05B4B3 9EF620B10A71F3F7772A84855FAC3BDB26C31B7A64A9B383EBD101E1A04D8D13 6A1A2A3B8814008DC36481229891A68969A529617AC51313C6FB83C72EBA43C2 7531C238E2A7D50D2E97FE921DEEF8EB3053585759C2FBCB9D8484EF045A8EFA 7CA170AD09314E9BD7A766ACD6FC64A72EC907031C4B1EA446A15EF8101F3379 A8679F1C037647DA6439DF7D9B82D24EEFD53936CB71DF655637A40AA637566D 50D388D95AAD612899F38A999CDDB8E0849C979A3FD8F9238D3CACB9FC32CC7E E68EB77DA6C4EB6D28FA413B89AAD25F0976F7363C1B4C63B6C3EAF2DDA86D1C 73AE7158CD124566E320D489069D6E8A1B4071F51392BDBB447193CDAF7FD916 F1F8FBACF34E53B8A0A753F9DAD3FB8224C58C589CA8334955278CFFCEE8F519 AD31F2B0C574FAA9EEA1DC20BDD4B79EB81F8E8E7BB184471D2B150A443DB90F 62263BF1E2AB6A519A8BB2466925FEFDA2296F88F5E48AB41D9E8E5DB24A7075 822219BC4498F674205C4142663865F3943C098037176F5314BB1BA9800096C1 5D69855EE3FDB8E3CFDA608D87772374E39F1448E047952D8DC23C93F9FEA722 4B1C341F5A2EF4FD8CD537A43F5423CE46879FF726D8C3FEEAD1F52F7CC44CF8 8899B8AA1D412ADC79062806EE8D8A78C3E021246341E2627F2C7C0FA4C177C1 40D27C32A30D104F2360E99DA10FA11CB39A057DCAFA8AB8F20CE2976E33F35C 4B22351E79311AF96A2B5ADE7BBCBDDF7E19D6BFD63B4D6B3A89CB14CF938394 920C215BE223971C3353F38E36DCD080936BD4BCBFA057CD60531AB9E9CE5EB7 9889C5B85E4DC5A5555FB8E76813BED837F5606E101B0C88B6B1643728A8EEB2 0D7C10A20D83A88D6D5A40FBA20492775081DADD6E35AD7ADEF09B6EB2FA38AE 54367F8C6D1700455D45D683FAD965AEE11525BD5B075403DB43D232C19B55D7 49DF521E56E6B875A8FB147BDE771E639BA139DAD97C22AB9E02D64EEC1E1AF2 F0C54070926D94DF26202EF5741CD5939D5468097D79F989807B579BB6A0C8F6 0C6A295DB807BD8D97475718D01B029B6806CEC86AFA9DBDAAF30DE2D2BD5E70 CC871ED8464D201A9B46ADA749859965400015852F10F409AEC3595B8BF7DDE3 62429619C86D6E18B520965AED384CF31E2CA2D53F3965682C8102E8864C5CA0 F169CAC02534BB9707519163BED3B173B0F964E8B9F54F3B3320EBB4E7685817 DC2B5CAD5F720CC998A1BC638B569910173B9CD93628341E697035DD4119DD7E ABDBC9B8CEA9974E20CD31720FEE80C43A6B8FC81D46A43EEFD8F75ECB4AFA16 12D5C8668FABA3D7FC25B6DB74CA1D73F3D4FBA863D37ADEF5DB46AA94D49692 C4333B87198A217467340032BB0073F11352F45833B22D6B3C86524494566AEA BAD306A7997E2D0FF5D47AEE5A2FB06AF09168B2B413527155E0A67922B8CF9E 9F60FC96000B38F5DF56B6B7BA5EE8C9F7E79E0334878A6F2DFE09C207826D37 10FD055B08500AE5AF68F7314EA3482DB61B1727C17BF621F1C75D4FEEC8D789 274B03111DDFD7954B94C64D09C9967CE91170454918C925FADD7DF27ADDF0BB 7EE6A203E1F4264CA683464BD39A9BF568ABB973CC0E5CEDCD71E3822BD4644A 9EB248CAF01590CAE2C583D748286993506FCA47960FBFEBA2D3D5AEDF9C60D3 76658A27F6799786E31F69B62A530A6F275497B9A10B7144492CB519AE9EF067 903B9E1702188D504E5F0CB96A128BEB75A803CD349826AE094694A99A125957 5CE6F47CB3774AF5140A743D98695850461E7BDD69BAA700C1B440C05D4890E9 8266EA65148686ECD94E642DDAA9AB871B771DF58100625E19ED429B21BA7DF9 209F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if TeXDict begin 40708633 18260915 1000 600 600 (./tikz/all-figure4.dvi) @start /Fa 133[31 31 1[31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 39[31 31 31 31 31 31 31 31 31 31 6[31 31 40[{}37 58.1154 /CMTT8 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin % dvips-unknown statusdict /setpageparams known { hsize vsize 0 1 statusdict begin { setpageparams } stopped end } { true } ifelse { statusdict /setpage known { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 0 0 a SDict begin [/Producer (dvips + Distiller)/Title (\376\377\000P\000l\000o\000t\000s\000\040\000f\000o\000r\000\040\000G\000N\000U\000\040\000A\000s\000t\000r\000o\000n\000o\000m\000y\000\040\000U\000t\000i\000l\000i\000t\000i\000e\000s\000\040\000m\000a\000n\000u\000a\000l\000.)/Subject (\376\377\000U\000s\000e\000d\000\040\000t\000o\000\040\000m\000a\000k\000e\000\040\000t\000h\000e\000\040\000p\000l\000o\000t\000s\000\040\000f\000o\000r\000\040\000t\000h\000e\000\040\000m\000a\000n\000u\000a\000l)/Creator (LaTeX with hyperref)/Author (\376\377\000M\000o\000h\000a\000m\000m\000a\000d\000\040\000A\000k\000h\000l\000a\000g\000h\000i)/Keywords (\376\377\000G\000N\000U\000\040\000A\000s\000t\000r\000o\000n\000o\000m\000y\000\040\000U\000t\000i\000l\000i\000t\000i\000e\000s\000,\000\040\000G\000n\000u\000a\000s\000t\000r\000o\000,\000\040\000m\000a\000n\000u\000a\000l\000,\000\040\000p\000l\000o\000t\000s) /DOCINFO pdfmark end 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@9} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0.0 0 100.00128 0] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@10} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0.0 0 100.00128 0] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@11} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0 0.0 0 100.00128] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@12} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0 0.0 0 100.00128] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@13} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 22.50027 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@14} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 21.25026 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@15} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 20.00024 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@16} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 21.25026 23.12529 25.00032] /Encode [0 1 0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 0 TeXcolorgray -183 -377 a SDict begin H.S end -183 -377 a -183 -377 a SDict begin H.R end -183 -377 a -183 -377 a SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end -183 -377 a Black 0 TeXcolorgray -600 1713 a SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark end -600 1713 a -600 1713 a SDict begin [ {Catalog}<<>> /PUT pdfmark end -600 1713 a -600 1713 a SDict begin H.S end -600 1713 a -600 1713 a SDict begin 12 H.A end -600 1713 a -600 1713 a SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end -600 1713 a -598 -516 a -598 -516 a -598 -516 a pgfo save 0 setgray 0.3985 pgfw save restore save save /pgffc{0.78 0.08 0.52 setrgbcolor}def 0.0 0.0 moveto 0.0 0.0 moveto 0.0 9.86678 lineto 9.86678 9.86678 lineto 9.86678 0.0 lineto closepath 9.86678 9.86678 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 1.57741 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(mediumvioletred)29 b(\(1\))-598 -516 y pgfr restore restore save /pgffc{1 0.08 0.58 setrgbcolor}def 0.0 -13.81049 moveto 0.0 -13.81049 moveto 0.0 -3.9437 lineto 9.86678 -3.9437 lineto 9.86678 -13.81049 lineto closepath 9.86678 -3.9437 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -13.81049 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -11.26447 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(deeppink)h(\(2\))-598 -516 y pgfr restore restore save /pgffc{0.86 0.44 0.58 setrgbcolor}def 0.0 -27.621 moveto 0.0 -27.621 moveto 0.0 -17.7542 lineto 9.86678 -17.7542 lineto 9.86678 -27.621 lineto closepath 9.86678 -17.7542 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -27.621 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -25.07497 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(palevioletred)f(\(3\))-598 -516 y pgfr restore restore save /pgffc{1 0.41 0.71 setrgbcolor}def 0.0 -41.4315 moveto 0.0 -41.4315 moveto 0.0 -31.56471 lineto 9.86678 -31.56471 lineto 9.86678 -41.4315 lineto closepath 9.86678 -31.56471 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -41.4315 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -38.88548 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(hotpink)h(\(4\))-598 -516 y pgfr restore restore save /pgffc{1 0.71 0.76 setrgbcolor}def 0.0 -55.242 moveto 0.0 -55.242 moveto 0.0 -45.37521 lineto 9.86678 -45.37521 lineto 9.86678 -55.242 lineto closepath 9.86678 -45.37521 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -55.242 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -52.69598 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lightpink)f(\(5\))-598 -516 y pgfr restore restore save /pgffc{1 0.75 0.8 setrgbcolor}def 0.0 -69.05252 moveto 0.0 -69.05252 moveto 0.0 -59.18571 lineto 9.86678 -59.18571 lineto 9.86678 -69.05252 lineto closepath 9.86678 -59.18571 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -69.05252 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -66.50648 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(pink)h(\(6\))-598 -516 y pgfr restore restore save /pgffc{0.55 0 0 setrgbcolor}def 0.0 -82.86302 moveto 0.0 -82.86302 moveto 0.0 -72.99623 lineto 9.86678 -72.99623 lineto 9.86678 -82.86302 lineto closepath 9.86678 -72.99623 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -82.86302 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -81.28561 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkred)g(\(7\))-598 -516 y pgfr restore restore save /pgffc{1 0 0 setrgbcolor}def 0.0 -96.67354 moveto 0.0 -96.67354 moveto 0.0 -86.80673 lineto 9.86678 -86.80673 lineto 9.86678 -96.67354 lineto closepath 9.86678 -86.80673 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -96.67354 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -95.09612 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(red)g(\(8\))-598 -516 y pgfr restore restore save /pgffc{0.7 0.13 0.13 setrgbcolor}def 0.0 -110.48404 moveto 0.0 -110.48404 moveto 0.0 -100.61723 lineto 9.86678 -100.61723 lineto 9.86678 -110.48404 lineto closepath 9.86678 -100.61723 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -110.48404 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -108.90662 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(firebrick)f(\(9\))-598 -516 y pgfr restore restore save /pgffc{0.86 0.08 0.24 setrgbcolor}def 0.0 -124.29454 moveto 0.0 -124.29454 moveto 0.0 -114.42775 lineto 9.86678 -114.42775 lineto 9.86678 -124.29454 lineto closepath 9.86678 -114.42775 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -124.29454 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -122.71713 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(crimson)h(\(10\))-598 -516 y pgfr restore restore save /pgffc{0.8 0.36 0.36 setrgbcolor}def 0.0 -138.10506 moveto 0.0 -138.10506 moveto 0.0 -128.23825 lineto 9.86678 -128.23825 lineto 9.86678 -138.10506 lineto closepath 9.86678 -128.23825 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -138.10506 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -136.52763 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(indianred)f(\(11\))-598 -516 y pgfr restore restore save /pgffc{0.94 0.5 0.5 setrgbcolor}def 0.0 -151.91556 moveto 0.0 -151.91556 moveto 0.0 -142.04875 lineto 9.86678 -142.04875 lineto 9.86678 -151.91556 lineto closepath 9.86678 -142.04875 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -151.91556 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -149.36952 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lightcoral)g(\(12\))-598 -516 y pgfr restore restore save /pgffc{0.98 0.5 0.45 setrgbcolor}def 0.0 -165.72606 moveto 0.0 -165.72606 moveto 0.0 -155.85927 lineto 9.86678 -155.85927 lineto 9.86678 -165.72606 lineto closepath 9.86678 -155.85927 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -165.72606 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -164.14865 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(salmon)h(\(13\))-598 -516 y pgfr restore restore save /pgffc{0.91 0.59 0.48 setrgbcolor}def 0.0 -179.53658 moveto 0.0 -179.53658 moveto 0.0 -169.66977 lineto 9.86678 -169.66977 lineto 9.86678 -179.53658 lineto closepath 9.86678 -169.66977 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -179.53658 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -177.95915 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darksalmon)f(\(14\))-598 -516 y pgfr restore restore save /pgffc{1 0.63 0.48 setrgbcolor}def 0.0 -193.34709 moveto 0.0 -193.34709 moveto 0.0 -183.48029 lineto 9.86678 -183.48029 lineto 9.86678 -193.34709 lineto closepath 9.86678 -183.48029 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -193.34709 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -190.80106 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lightsalmon)g(\(15\))-598 -516 y pgfr restore restore save /pgffc{1 0.27 0 setrgbcolor}def 0.0 -207.15758 moveto 0.0 -207.15758 moveto 0.0 -197.29079 lineto 9.86678 -197.29079 lineto 9.86678 -207.15758 lineto closepath 9.86678 -197.29079 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -207.15758 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -204.61156 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(orangered)g(\(16\))-598 -516 y pgfr restore restore save /pgffc{1 0.39 0.28 setrgbcolor}def 0.0 -220.9681 moveto 0.0 -220.9681 moveto 0.0 -211.10129 lineto 9.86678 -211.10129 lineto 9.86678 -220.9681 lineto closepath 9.86678 -211.10129 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -220.9681 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -219.39067 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(tomato)h(\(17\))-598 -516 y pgfr restore restore save /pgffc{1 0.55 0 setrgbcolor}def 0.0 -234.7786 moveto 0.0 -234.7786 moveto 0.0 -224.9118 lineto 9.86678 -224.9118 lineto 9.86678 -234.7786 lineto closepath 9.86678 -224.9118 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -234.7786 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -232.23257 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkorange)f(\(18\))-598 -516 y pgfr restore restore save /pgffc{1 0.5 0.31 setrgbcolor}def 0.0 -248.5891 moveto 0.0 -248.5891 moveto 0.0 -238.7223 lineto 9.86678 -238.7223 lineto 9.86678 -248.5891 lineto closepath 9.86678 -238.7223 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -248.5891 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -247.01167 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(coral)h(\(19\))-598 -516 y pgfr restore restore save /pgffc{1 0.65 0 setrgbcolor}def 0.0 -262.39961 moveto 0.0 -262.39961 moveto 0.0 -252.5328 lineto 9.86678 -252.5328 lineto 9.86678 -262.39961 lineto closepath 9.86678 -252.5328 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 9.86678 -262.39961 moveto pgfstr save save [1.0 0.0 0.0 1.0 10.86305 -259.85358 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(orange)g(\(20\))-598 -516 y pgfr restore restore save /pgffc{0.74 0.72 0.42 setrgbcolor}def 88.7786 0.0 moveto 88.7786 0.0 moveto 88.7786 9.86678 lineto 98.64539 9.86678 lineto 98.64539 0.0 lineto closepath 98.64539 9.86678 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 1.57741 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkkhaki)f(\(21\))-598 -516 y pgfr restore restore save /pgffc{1 0.84 0 setrgbcolor}def 88.7786 -13.81049 moveto 88.7786 -13.81049 moveto 88.7786 -3.9437 lineto 98.64539 -3.9437 lineto 98.64539 -13.81049 lineto closepath 98.64539 -3.9437 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -13.81049 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -11.26447 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(gold)h(\(22\))-598 -516 y pgfr restore restore save /pgffc{0.94 0.9 0.55 setrgbcolor}def 88.7786 -27.621 moveto 88.7786 -27.621 moveto 88.7786 -17.7542 lineto 98.64539 -17.7542 lineto 98.64539 -27.621 lineto closepath 98.64539 -17.7542 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -27.621 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -26.04358 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(khaki)g(\(23\))-598 -516 y pgfr restore restore save /pgffc{1 0.85 0.73 setrgbcolor}def 88.7786 -41.4315 moveto 88.7786 -41.4315 moveto 88.7786 -31.56471 lineto 98.64539 -31.56471 lineto 98.64539 -41.4315 lineto closepath 98.64539 -31.56471 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -41.4315 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -38.88548 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(peachpuff)f(\(24\))-598 -516 y pgfr restore restore save /pgffc{1 1 0 setrgbcolor}def 88.7786 -55.242 moveto 88.7786 -55.242 moveto 88.7786 -45.37521 lineto 98.64539 -45.37521 lineto 98.64539 -55.242 lineto closepath 98.64539 -45.37521 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -55.242 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -52.69598 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(yellow)h(\(25\))-598 -516 y pgfr restore restore save /pgffc{0.93 0.91 0.67 setrgbcolor}def 88.7786 -69.05252 moveto 88.7786 -69.05252 moveto 88.7786 -59.18571 lineto 98.64539 -59.18571 lineto 98.64539 -69.05252 lineto closepath 98.64539 -59.18571 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -69.05252 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -66.50648 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(palegoldenrod)f(\(26\))-598 -516 y pgfr restore restore save /pgffc{1 0.89 0.71 setrgbcolor}def 88.7786 -82.86302 moveto 88.7786 -82.86302 moveto 88.7786 -72.99623 lineto 98.64539 -72.99623 lineto 98.64539 -82.86302 lineto closepath 98.64539 -72.99623 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -82.86302 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -81.28561 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(moccasin)h(\(27\))-598 -516 y pgfr restore restore save /pgffc{1 0.94 0.84 setrgbcolor}def 88.7786 -96.67354 moveto 88.7786 -96.67354 moveto 88.7786 -86.80673 lineto 98.64539 -86.80673 lineto 98.64539 -96.67354 lineto closepath 98.64539 -86.80673 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -96.67354 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -94.12752 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(papayawhip)f(\(28\))-598 -516 y pgfr restore restore save /pgffc{0.98 0.98 0.82 setrgbcolor}def 88.7786 -110.48404 moveto 88.7786 -110.48404 moveto 88.7786 -100.61723 lineto 98.64539 -100.61723 lineto 98.64539 -110.48404 lineto closepath 98.64539 -100.61723 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -110.48404 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -107.938 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lightgoldenrodyellow)-598 -516 y pgfr restore restore 98.64539 -115.41367 moveto pgfstr save save [1.0 0.0 0.0 1.0 98.64539 -114.83253 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(\(29\))-598 -516 y pgfr restore restore save /pgffc{1 0.98 0.8 setrgbcolor}def 88.7786 -124.29454 moveto 88.7786 -124.29454 moveto 88.7786 -114.42775 lineto 98.64539 -114.42775 lineto 98.64539 -124.29454 lineto closepath 98.64539 -114.42775 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -124.29454 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -122.71713 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lemonchiffon)g(\(30\))-598 -516 y pgfr restore restore save /pgffc{1 1 0.88 setrgbcolor}def 88.7786 -138.10506 moveto 88.7786 -138.10506 moveto 88.7786 -128.23825 lineto 98.64539 -128.23825 lineto 98.64539 -138.10506 lineto closepath 98.64539 -128.23825 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -138.10506 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -135.55902 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lightyellow)g(\(31\))-598 -516 y pgfr restore restore save /pgffc{0.5 0 0 setrgbcolor}def 88.7786 -151.91556 moveto 88.7786 -151.91556 moveto 88.7786 -142.04875 lineto 98.64539 -142.04875 lineto 98.64539 -151.91556 lineto closepath 98.64539 -142.04875 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -151.91556 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -150.33813 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(maroon)h(\(32\))-598 -516 y pgfr restore restore save /pgffc{0.65 0.16 0.16 setrgbcolor}def 88.7786 -165.72606 moveto 88.7786 -165.72606 moveto 88.7786 -155.85927 lineto 98.64539 -155.85927 lineto 98.64539 -165.72606 lineto closepath 98.64539 -155.85927 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -165.72606 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -164.14865 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(brown)g(\(33\))-598 -516 y pgfr restore restore save /pgffc{0.55 0.27 0.07 setrgbcolor}def 88.7786 -179.53658 moveto 88.7786 -179.53658 moveto 88.7786 -169.66977 lineto 98.64539 -169.66977 lineto 98.64539 -179.53658 lineto closepath 98.64539 -169.66977 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -179.53658 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -177.95915 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(saddlebrown)f(\(34\))-598 -516 y pgfr restore restore save /pgffc{0.63 0.32 0.18 setrgbcolor}def 88.7786 -193.34709 moveto 88.7786 -193.34709 moveto 88.7786 -183.48029 lineto 98.64539 -183.48029 lineto 98.64539 -193.34709 lineto closepath 98.64539 -183.48029 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -193.34709 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -191.76967 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(sienna)h(\(35\))-598 -516 y pgfr restore restore save /pgffc{0.82 0.41 0.12 setrgbcolor}def 88.7786 -207.15758 moveto 88.7786 -207.15758 moveto 88.7786 -197.29079 lineto 98.64539 -197.29079 lineto 98.64539 -207.15758 lineto closepath 98.64539 -197.29079 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -207.15758 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -205.58015 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(chocolate)f(\(36\))-598 -516 y pgfr restore restore save /pgffc{0.72 0.53 0.04 setrgbcolor}def 88.7786 -220.9681 moveto 88.7786 -220.9681 moveto 88.7786 -211.10129 lineto 98.64539 -211.10129 lineto 98.64539 -220.9681 lineto closepath 98.64539 -211.10129 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -220.9681 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -218.42206 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkgoldenrod)g(\(37\))-598 -516 y pgfr restore restore save /pgffc{0.8 0.52 0.25 setrgbcolor}def 88.7786 -234.7786 moveto 88.7786 -234.7786 moveto 88.7786 -224.9118 lineto 98.64539 -224.9118 lineto 98.64539 -234.7786 lineto closepath 98.64539 -224.9118 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -234.7786 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -232.23257 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(peru)h(\(38\))-598 -516 y pgfr restore restore save /pgffc{0.74 0.56 0.56 setrgbcolor}def 88.7786 -248.5891 moveto 88.7786 -248.5891 moveto 88.7786 -238.7223 lineto 98.64539 -238.7223 lineto 98.64539 -248.5891 lineto closepath 98.64539 -238.7223 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -248.5891 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -246.04308 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(rosybrown)f(\(39\))-598 -516 y pgfr restore restore save /pgffc{0.85 0.65 0.13 setrgbcolor}def 88.7786 -262.39961 moveto 88.7786 -262.39961 moveto 88.7786 -252.5328 lineto 98.64539 -252.5328 lineto 98.64539 -262.39961 lineto closepath 98.64539 -252.5328 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 98.64539 -262.39961 moveto pgfstr save save [1.0 0.0 0.0 1.0 99.64166 -259.85358 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(goldenrod)g(\(40\))-598 -516 y pgfr restore restore save /pgffc{0.96 0.64 0.38 setrgbcolor}def 177.56471 0.0 moveto 177.56471 0.0 moveto 177.56471 9.86678 lineto 187.4315 9.86678 lineto 187.4315 0.0 lineto closepath 187.4315 9.86678 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 2.54602 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(sandybrown)g(\(41\))-598 -516 y pgfr restore restore save /pgffc{0.82 0.71 0.55 setrgbcolor}def 177.56471 -13.81049 moveto 177.56471 -13.81049 moveto 177.56471 -3.9437 lineto 187.4315 -3.9437 lineto 187.4315 -13.81049 lineto closepath 187.4315 -3.9437 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -13.81049 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -12.23306 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(tan)h(\(42\))-598 -516 y pgfr restore restore save /pgffc{0.87 0.72 0.53 setrgbcolor}def 177.56471 -27.621 moveto 177.56471 -27.621 moveto 177.56471 -17.7542 lineto 187.4315 -17.7542 lineto 187.4315 -27.621 lineto closepath 187.4315 -17.7542 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -27.621 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -25.07497 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(burlywood)f(\(43\))-598 -516 y pgfr restore restore save /pgffc{0.96 0.87 0.7 setrgbcolor}def 177.56471 -41.4315 moveto 177.56471 -41.4315 moveto 177.56471 -31.56471 lineto 187.4315 -31.56471 lineto 187.4315 -41.4315 lineto closepath 187.4315 -31.56471 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -41.4315 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -39.8541 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(wheat)h(\(44\))-598 -516 y pgfr restore restore save /pgffc{1 0.87 0.68 setrgbcolor}def 177.56471 -55.242 moveto 177.56471 -55.242 moveto 177.56471 -45.37521 lineto 187.4315 -45.37521 lineto 187.4315 -55.242 lineto closepath 187.4315 -45.37521 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -55.242 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -52.69598 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(navajowhite)f(\(45\))-598 -516 y pgfr restore restore save /pgffc{1 0.89 0.77 setrgbcolor}def 177.56471 -69.05252 moveto 177.56471 -69.05252 moveto 177.56471 -59.18571 lineto 187.4315 -59.18571 lineto 187.4315 -69.05252 lineto closepath 187.4315 -59.18571 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -69.05252 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -66.50648 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(bisque)h(\(46\))-598 -516 y pgfr restore restore save /pgffc{1 0.92 0.8 setrgbcolor}def 177.56471 -82.86302 moveto 177.56471 -82.86302 moveto 177.56471 -72.99623 lineto 187.4315 -72.99623 lineto 187.4315 -82.86302 lineto closepath 187.4315 -72.99623 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -82.86302 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -81.28561 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(blanchedalmond)f(\(47\))-598 -516 y pgfr restore restore save /pgffc{1 0.97 0.86 setrgbcolor}def 177.56471 -96.67354 moveto 177.56471 -96.67354 moveto 177.56471 -86.80673 lineto 187.4315 -86.80673 lineto 187.4315 -96.67354 lineto closepath 187.4315 -86.80673 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -96.67354 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -95.09612 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(cornsilk)h(\(48\))-598 -516 y pgfr restore restore save /pgffc{0 0.39 0 setrgbcolor}def 177.56471 -110.48404 moveto 177.56471 -110.48404 moveto 177.56471 -100.61723 lineto 187.4315 -100.61723 lineto 187.4315 -110.48404 lineto closepath 187.4315 -100.61723 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -110.48404 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -107.938 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkgreen)f(\(49\))-598 -516 y pgfr restore restore save /pgffc{0 0.5 0 setrgbcolor}def 177.56471 -124.29454 moveto 177.56471 -124.29454 moveto 177.56471 -114.42775 lineto 187.4315 -114.42775 lineto 187.4315 -124.29454 lineto closepath 187.4315 -114.42775 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -124.29454 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -121.74852 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(green)h(\(50\))-598 -516 y pgfr restore restore save /pgffc{0.33 0.42 0.18 setrgbcolor}def 177.56471 -138.10506 moveto 177.56471 -138.10506 moveto 177.56471 -128.23825 lineto 187.4315 -128.23825 lineto 187.4315 -138.10506 lineto closepath 187.4315 -128.23825 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -138.10506 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -135.55902 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkolivegreen)f(\(51\))-598 -516 y pgfr restore restore save /pgffc{0.13 0.55 0.13 setrgbcolor}def 177.56471 -151.91556 moveto 177.56471 -151.91556 moveto 177.56471 -142.04875 lineto 187.4315 -142.04875 lineto 187.4315 -151.91556 lineto closepath 187.4315 -142.04875 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -151.91556 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -149.36952 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(forestgreen)g(\(52\))-598 -516 y pgfr restore restore save /pgffc{0.18 0.55 0.34 setrgbcolor}def 177.56471 -165.72606 moveto 177.56471 -165.72606 moveto 177.56471 -155.85927 lineto 187.4315 -155.85927 lineto 187.4315 -165.72606 lineto closepath 187.4315 -155.85927 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -165.72606 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -163.18004 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(seagreen)h(\(53\))-598 -516 y pgfr restore restore save /pgffc{0.5 0.5 0 setrgbcolor}def 177.56471 -179.53658 moveto 177.56471 -179.53658 moveto 177.56471 -169.66977 lineto 187.4315 -169.66977 lineto 187.4315 -179.53658 lineto closepath 187.4315 -169.66977 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -179.53658 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -177.95915 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(olive)g(\(54\))-598 -516 y pgfr restore restore save /pgffc{0.42 0.56 0.14 setrgbcolor}def 177.56471 -193.34709 moveto 177.56471 -193.34709 moveto 177.56471 -183.48029 lineto 187.4315 -183.48029 lineto 187.4315 -193.34709 lineto closepath 187.4315 -183.48029 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -193.34709 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -191.76967 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(olivedrab)f(\(55\))-598 -516 y pgfr restore restore save /pgffc{0.24 0.7 0.44 setrgbcolor}def 177.56471 -207.15758 moveto 177.56471 -207.15758 moveto 177.56471 -197.29079 lineto 187.4315 -197.29079 lineto 187.4315 -207.15758 lineto closepath 187.4315 -197.29079 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -207.15758 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -204.61156 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(mediumseagreen)g(\(56\))-598 -516 y pgfr restore restore save /pgffc{0.2 0.8 0.2 setrgbcolor}def 177.56471 -220.9681 moveto 177.56471 -220.9681 moveto 177.56471 -211.10129 lineto 187.4315 -211.10129 lineto 187.4315 -220.9681 lineto closepath 187.4315 -211.10129 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -220.9681 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -218.42206 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(limegreen)g(\(57\))-598 -516 y pgfr restore restore save /pgffc{0 1 0 setrgbcolor}def 177.56471 -234.7786 moveto 177.56471 -234.7786 moveto 177.56471 -224.9118 lineto 187.4315 -224.9118 lineto 187.4315 -234.7786 lineto closepath 187.4315 -224.9118 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -234.7786 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -233.20119 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lime)h(\(58\))-598 -516 y pgfr restore restore save /pgffc{0 1 0.5 setrgbcolor}def 177.56471 -248.5891 moveto 177.56471 -248.5891 moveto 177.56471 -238.7223 lineto 187.4315 -238.7223 lineto 187.4315 -248.5891 lineto closepath 187.4315 -238.7223 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -248.5891 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -246.04308 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(springgreen)f(\(59\))-598 -516 y pgfr restore restore save /pgffc{0 0.98 0.6 setrgbcolor}def 177.56471 -262.39961 moveto 177.56471 -262.39961 moveto 177.56471 -252.5328 lineto 187.4315 -252.5328 lineto 187.4315 -262.39961 lineto closepath 187.4315 -252.5328 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 187.4315 -262.39961 moveto pgfstr save save [1.0 0.0 0.0 1.0 188.42778 -259.85358 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(mediumspringgreen)-598 -516 y pgfr restore restore 187.4315 -267.33678 moveto pgfstr save save [1.0 0.0 0.0 1.0 187.4315 -266.75563 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(\(60\))-598 -516 y pgfr restore restore save /pgffc{0.56 0.74 0.56 setrgbcolor}def 266.34332 0.0 moveto 266.34332 0.0 moveto 266.34332 9.86678 lineto 276.21011 9.86678 lineto 276.21011 0.0 lineto closepath 276.21011 9.86678 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 2.54602 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkseagreen)g(\(61\))-598 -516 y pgfr restore restore save /pgffc{0.4 0.8 0.67 setrgbcolor}def 266.34332 -13.81049 moveto 266.34332 -13.81049 moveto 266.34332 -3.9437 lineto 276.21011 -3.9437 lineto 276.21011 -13.81049 lineto closepath 276.21011 -3.9437 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -13.81049 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -11.26447 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(mediumaquamarine)g(\(62\))-598 -516 y pgfr restore restore save /pgffc{0.6 0.8 0.2 setrgbcolor}def 266.34332 -27.621 moveto 266.34332 -27.621 moveto 266.34332 -17.7542 lineto 276.21011 -17.7542 lineto 276.21011 -27.621 lineto closepath 276.21011 -17.7542 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -27.621 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -25.07497 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(yellowgreen)g(\(63\))-598 -516 y pgfr restore restore save /pgffc{0.49 0.99 0 setrgbcolor}def 266.34332 -41.4315 moveto 266.34332 -41.4315 moveto 266.34332 -31.56471 lineto 276.21011 -31.56471 lineto 276.21011 -41.4315 lineto closepath 276.21011 -31.56471 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -41.4315 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -38.88548 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lawngreen)g(\(64\))-598 -516 y pgfr restore restore save /pgffc{0.5 1 0 setrgbcolor}def 266.34332 -55.242 moveto 266.34332 -55.242 moveto 266.34332 -45.37521 lineto 276.21011 -45.37521 lineto 276.21011 -55.242 lineto closepath 276.21011 -45.37521 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -55.242 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -53.66458 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(chartreuse)g(\(65\))-598 -516 y pgfr restore restore save /pgffc{0.56 0.93 0.56 setrgbcolor}def 266.34332 -69.05252 moveto 266.34332 -69.05252 moveto 266.34332 -59.18571 lineto 276.21011 -59.18571 lineto 276.21011 -69.05252 lineto closepath 276.21011 -59.18571 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -69.05252 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -66.50648 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lightgreen)g(\(66\))-598 -516 y pgfr restore restore save /pgffc{0.68 1 0.18 setrgbcolor}def 266.34332 -82.86302 moveto 266.34332 -82.86302 moveto 266.34332 -72.99623 lineto 276.21011 -72.99623 lineto 276.21011 -82.86302 lineto closepath 276.21011 -72.99623 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -82.86302 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -80.317 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(greenyellow)g(\(67\))-598 -516 y pgfr restore restore save /pgffc{0.6 0.98 0.6 setrgbcolor}def 266.34332 -96.67354 moveto 266.34332 -96.67354 moveto 266.34332 -86.80673 lineto 276.21011 -86.80673 lineto 276.21011 -96.67354 lineto closepath 276.21011 -86.80673 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -96.67354 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -94.12752 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(palegreen)g(\(68\))-598 -516 y pgfr restore restore save /pgffc{0 0.5 0.5 setrgbcolor}def 266.34332 -110.48404 moveto 266.34332 -110.48404 moveto 266.34332 -100.61723 lineto 276.21011 -100.61723 lineto 276.21011 -110.48404 lineto closepath 276.21011 -100.61723 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -110.48404 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -108.90662 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(teal)h(\(69\))-598 -516 y pgfr restore restore save /pgffc{0 0.55 0.55 setrgbcolor}def 266.34332 -124.29454 moveto 266.34332 -124.29454 moveto 266.34332 -114.42775 lineto 276.21011 -114.42775 lineto 276.21011 -124.29454 lineto closepath 276.21011 -114.42775 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -124.29454 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -121.74852 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkcyan)g(\(70\))-598 -516 y pgfr restore restore save /pgffc{0.13 0.7 0.67 setrgbcolor}def 266.34332 -138.10506 moveto 266.34332 -138.10506 moveto 266.34332 -128.23825 lineto 276.21011 -128.23825 lineto 276.21011 -138.10506 lineto closepath 276.21011 -128.23825 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -138.10506 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -135.55902 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lightseagreen)f(\(71\))-598 -516 y pgfr restore restore save /pgffc{0.37 0.62 0.63 setrgbcolor}def 266.34332 -151.91556 moveto 266.34332 -151.91556 moveto 266.34332 -142.04875 lineto 276.21011 -142.04875 lineto 276.21011 -151.91556 lineto closepath 276.21011 -142.04875 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -151.91556 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -150.33813 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(cadetblue)g(\(72\))-598 -516 y pgfr restore restore save /pgffc{0 0.81 0.82 setrgbcolor}def 266.34332 -165.72606 moveto 266.34332 -165.72606 moveto 266.34332 -155.85927 lineto 276.21011 -155.85927 lineto 276.21011 -165.72606 lineto closepath 276.21011 -155.85927 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -165.72606 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -163.18004 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkturquoise)g(\(73\))-598 -516 y pgfr restore restore save /pgffc{0.28 0.82 0.8 setrgbcolor}def 266.34332 -179.53658 moveto 266.34332 -179.53658 moveto 266.34332 -169.66977 lineto 276.21011 -169.66977 lineto 276.21011 -179.53658 lineto closepath 276.21011 -169.66977 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -179.53658 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -176.99054 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(mediumturquoise)g(\(74\))-598 -516 y pgfr restore restore save /pgffc{0.25 0.88 0.82 setrgbcolor}def 266.34332 -193.34709 moveto 266.34332 -193.34709 moveto 266.34332 -183.48029 lineto 276.21011 -183.48029 lineto 276.21011 -193.34709 lineto closepath 276.21011 -183.48029 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -193.34709 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -190.80106 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(turquoise)g(\(75\))-598 -516 y pgfr restore restore save /pgffc{0 1 1 setrgbcolor}def 266.34332 -207.15758 moveto 266.34332 -207.15758 moveto 266.34332 -197.29079 lineto 276.21011 -197.29079 lineto 276.21011 -207.15758 lineto closepath 276.21011 -197.29079 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -207.15758 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -204.61156 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(aqua)h(\(76\))-598 -516 y pgfr restore restore save /pgffc{0 1 1 setrgbcolor}def 266.34332 -220.9681 moveto 266.34332 -220.9681 moveto 266.34332 -211.10129 lineto 276.21011 -211.10129 lineto 276.21011 -220.9681 lineto closepath 276.21011 -211.10129 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -220.9681 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -218.42206 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(cyan)g(\(77\))-598 -516 y pgfr restore restore save /pgffc{0.5 1 0.83 setrgbcolor}def 266.34332 -234.7786 moveto 266.34332 -234.7786 moveto 266.34332 -224.9118 lineto 276.21011 -224.9118 lineto 276.21011 -234.7786 lineto closepath 276.21011 -224.9118 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -234.7786 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -232.23257 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(aquamarine)f(\(78\))-598 -516 y pgfr restore restore save /pgffc{0.69 0.93 0.93 setrgbcolor}def 266.34332 -248.5891 moveto 266.34332 -248.5891 moveto 266.34332 -238.7223 lineto 276.21011 -238.7223 lineto 276.21011 -248.5891 lineto closepath 276.21011 -238.7223 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -248.5891 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -246.04308 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(paleturquoise)g(\(79\))-598 -516 y pgfr restore restore save /pgffc{0.88 1 1 setrgbcolor}def 266.34332 -262.39961 moveto 266.34332 -262.39961 moveto 266.34332 -252.5328 lineto 276.21011 -252.5328 lineto 276.21011 -262.39961 lineto closepath 276.21011 -252.5328 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 276.21011 -262.39961 moveto pgfstr save save [1.0 0.0 0.0 1.0 277.20639 -259.85358 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lightcyan)g(\(80\))-598 -516 y pgfr restore restore save /pgffc{0.1 0.1 0.44 setrgbcolor}def 355.12944 0.0 moveto 355.12944 0.0 moveto 355.12944 9.86678 lineto 364.99625 9.86678 lineto 364.99625 0.0 lineto closepath 364.99625 9.86678 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 2.54602 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(midnightblue)g(\(81\))-598 -516 y pgfr restore restore save /pgffc{0 0 0.5 setrgbcolor}def 355.12944 -13.81049 moveto 355.12944 -13.81049 moveto 355.12944 -3.9437 lineto 364.99625 -3.9437 lineto 364.99625 -13.81049 lineto closepath 364.99625 -3.9437 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -13.81049 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -11.26447 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(navy)h(\(82\))-598 -516 y pgfr restore restore save /pgffc{0 0 0.55 setrgbcolor}def 355.12944 -27.621 moveto 355.12944 -27.621 moveto 355.12944 -17.7542 lineto 364.99625 -17.7542 lineto 364.99625 -27.621 lineto closepath 364.99625 -17.7542 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -27.621 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -26.04358 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkblue)g(\(83\))-598 -516 y pgfr restore restore save /pgffc{0 0 0.8 setrgbcolor}def 355.12944 -41.4315 moveto 355.12944 -41.4315 moveto 355.12944 -31.56471 lineto 364.99625 -31.56471 lineto 364.99625 -41.4315 lineto closepath 364.99625 -31.56471 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -41.4315 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -39.8541 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(mediumblue)f(\(84\))-598 -516 y pgfr restore restore save /pgffc{0 0 1 setrgbcolor}def 355.12944 -55.242 moveto 355.12944 -55.242 moveto 355.12944 -45.37521 lineto 364.99625 -45.37521 lineto 364.99625 -55.242 lineto closepath 364.99625 -45.37521 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -55.242 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -53.66458 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(blue)h(\(85\))-598 -516 y pgfr restore restore save /pgffc{0.25 0.41 0.88 setrgbcolor}def 355.12944 -69.05252 moveto 355.12944 -69.05252 moveto 355.12944 -59.18571 lineto 364.99625 -59.18571 lineto 364.99625 -69.05252 lineto closepath 364.99625 -59.18571 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -69.05252 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -66.50648 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(royalblue)f(\(86\))-598 -516 y pgfr restore restore save /pgffc{0.27 0.51 0.71 setrgbcolor}def 355.12944 -82.86302 moveto 355.12944 -82.86302 moveto 355.12944 -72.99623 lineto 364.99625 -72.99623 lineto 364.99625 -82.86302 lineto closepath 364.99625 -72.99623 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -82.86302 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -81.28561 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(steelblue)g(\(87\))-598 -516 y pgfr restore restore save /pgffc{0.12 0.56 1 setrgbcolor}def 355.12944 -96.67354 moveto 355.12944 -96.67354 moveto 355.12944 -86.80673 lineto 364.99625 -86.80673 lineto 364.99625 -96.67354 lineto closepath 364.99625 -86.80673 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -96.67354 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -94.12752 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(dodgerblue)g(\(88\))-598 -516 y pgfr restore restore save /pgffc{0 0.75 1 setrgbcolor}def 355.12944 -110.48404 moveto 355.12944 -110.48404 moveto 355.12944 -100.61723 lineto 364.99625 -100.61723 lineto 364.99625 -110.48404 lineto closepath 364.99625 -100.61723 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -110.48404 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -107.938 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(deepskyblue)g(\(89\))-598 -516 y pgfr restore restore save /pgffc{0.39 0.58 0.93 setrgbcolor}def 355.12944 -124.29454 moveto 355.12944 -124.29454 moveto 355.12944 -114.42775 lineto 364.99625 -114.42775 lineto 364.99625 -124.29454 lineto closepath 364.99625 -114.42775 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -124.29454 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -122.71713 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(cornflowerblue)g(\(90\))-598 -516 y pgfr restore restore save /pgffc{0.53 0.81 0.92 setrgbcolor}def 355.12944 -138.10506 moveto 355.12944 -138.10506 moveto 355.12944 -128.23825 lineto 364.99625 -128.23825 lineto 364.99625 -138.10506 lineto closepath 364.99625 -128.23825 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -138.10506 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -135.55902 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(skyblue)h(\(91\))-598 -516 y pgfr restore restore save /pgffc{0.53 0.81 0.98 setrgbcolor}def 355.12944 -151.91556 moveto 355.12944 -151.91556 moveto 355.12944 -142.04875 lineto 364.99625 -142.04875 lineto 364.99625 -151.91556 lineto closepath 364.99625 -142.04875 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -151.91556 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -149.36952 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lightskyblue)f(\(92\))-598 -516 y pgfr restore restore save /pgffc{0.69 0.77 0.87 setrgbcolor}def 355.12944 -165.72606 moveto 355.12944 -165.72606 moveto 355.12944 -155.85927 lineto 364.99625 -155.85927 lineto 364.99625 -165.72606 lineto closepath 364.99625 -155.85927 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -165.72606 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -163.18004 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lightsteelblue)g(\(93\))-598 -516 y pgfr restore restore save /pgffc{0.68 0.85 0.9 setrgbcolor}def 355.12944 -179.53658 moveto 355.12944 -179.53658 moveto 355.12944 -169.66977 lineto 364.99625 -169.66977 lineto 364.99625 -179.53658 lineto closepath 364.99625 -169.66977 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -179.53658 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -176.99054 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lightblue)g(\(94\))-598 -516 y pgfr restore restore save /pgffc{0.69 0.88 0.9 setrgbcolor}def 355.12944 -193.34709 moveto 355.12944 -193.34709 moveto 355.12944 -183.48029 lineto 364.99625 -183.48029 lineto 364.99625 -193.34709 lineto closepath 364.99625 -183.48029 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -193.34709 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -190.80106 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(powderblue)g(\(95\))-598 -516 y pgfr restore restore save /pgffc{0.29 0 0.51 setrgbcolor}def 355.12944 -207.15758 moveto 355.12944 -207.15758 moveto 355.12944 -197.29079 lineto 364.99625 -197.29079 lineto 364.99625 -207.15758 lineto closepath 364.99625 -197.29079 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -207.15758 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -204.61156 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(indigo)h(\(96\))-598 -516 y pgfr restore restore save /pgffc{0.5 0 0.5 setrgbcolor}def 355.12944 -220.9681 moveto 355.12944 -220.9681 moveto 355.12944 -211.10129 lineto 364.99625 -211.10129 lineto 364.99625 -220.9681 lineto closepath 364.99625 -211.10129 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -220.9681 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -218.42206 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(purple)g(\(97\))-598 -516 y pgfr restore restore save /pgffc{0.55 0 0.55 setrgbcolor}def 355.12944 -234.7786 moveto 355.12944 -234.7786 moveto 355.12944 -224.9118 lineto 364.99625 -224.9118 lineto 364.99625 -234.7786 lineto closepath 364.99625 -224.9118 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -234.7786 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -232.23257 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkmagenta)f(\(98\))-598 -516 y pgfr restore restore save /pgffc{0.58 0 0.83 setrgbcolor}def 355.12944 -248.5891 moveto 355.12944 -248.5891 moveto 355.12944 -238.7223 lineto 364.99625 -238.7223 lineto 364.99625 -248.5891 lineto closepath 364.99625 -238.7223 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -248.5891 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -247.01167 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkviolet)g(\(99\))-598 -516 y pgfr restore restore save /pgffc{0.28 0.24 0.55 setrgbcolor}def 355.12944 -262.39961 moveto 355.12944 -262.39961 moveto 355.12944 -252.5328 lineto 364.99625 -252.5328 lineto 364.99625 -262.39961 lineto closepath 364.99625 -252.5328 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 364.99625 -262.39961 moveto pgfstr save save [1.0 0.0 0.0 1.0 365.99252 -260.82219 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkslateblue)g(\(100\))-598 -516 y pgfr restore restore save /pgffc{0.54 0.17 0.89 setrgbcolor}def 443.90805 0.0 moveto 443.90805 0.0 moveto 443.90805 9.86678 lineto 453.77486 9.86678 lineto 453.77486 0.0 lineto closepath 453.77486 9.86678 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 1.57741 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(blueviolet)g(\(101\))-598 -516 y pgfr restore restore save /pgffc{0.6 0.2 0.8 setrgbcolor}def 443.90805 -13.81049 moveto 443.90805 -13.81049 moveto 443.90805 -3.9437 lineto 453.77486 -3.9437 lineto 453.77486 -13.81049 lineto closepath 453.77486 -3.9437 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -13.81049 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -12.23306 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkorchid)g(\(102\))-598 -516 y pgfr restore restore save /pgffc{1 0 1 setrgbcolor}def 443.90805 -27.621 moveto 443.90805 -27.621 moveto 443.90805 -17.7542 lineto 453.77486 -17.7542 lineto 453.77486 -27.621 lineto closepath 453.77486 -17.7542 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -27.621 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -26.04358 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(fuchsia)h(\(103\))-598 -516 y pgfr restore restore save /pgffc{1 0 1 setrgbcolor}def 443.90805 -41.4315 moveto 443.90805 -41.4315 moveto 443.90805 -31.56471 lineto 453.77486 -31.56471 lineto 453.77486 -41.4315 lineto closepath 453.77486 -31.56471 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -41.4315 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -38.88548 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(magenta)g(\(104\))-598 -516 y pgfr restore restore save /pgffc{0.42 0.35 0.8 setrgbcolor}def 443.90805 -55.242 moveto 443.90805 -55.242 moveto 443.90805 -45.37521 lineto 453.77486 -45.37521 lineto 453.77486 -55.242 lineto closepath 453.77486 -45.37521 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -55.242 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -53.66458 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(slateblue)f(\(105\))-598 -516 y pgfr restore restore save /pgffc{0.48 0.41 0.93 setrgbcolor}def 443.90805 -69.05252 moveto 443.90805 -69.05252 moveto 443.90805 -59.18571 lineto 453.77486 -59.18571 lineto 453.77486 -69.05252 lineto closepath 453.77486 -59.18571 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -69.05252 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -67.4751 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(mediumslateblue)g(\(106\))-598 -516 y pgfr restore restore save /pgffc{0.73 0.33 0.83 setrgbcolor}def 443.90805 -82.86302 moveto 443.90805 -82.86302 moveto 443.90805 -72.99623 lineto 453.77486 -72.99623 lineto 453.77486 -82.86302 lineto closepath 453.77486 -72.99623 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -82.86302 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -81.28561 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(mediumorchid)g(\(107\))-598 -516 y pgfr restore restore save /pgffc{0.58 0.44 0.86 setrgbcolor}def 443.90805 -96.67354 moveto 443.90805 -96.67354 moveto 443.90805 -86.80673 lineto 453.77486 -86.80673 lineto 453.77486 -96.67354 lineto closepath 453.77486 -86.80673 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -96.67354 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -94.12752 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(mediumpurple)g(\(108\))-598 -516 y pgfr restore restore save /pgffc{0.85 0.44 0.84 setrgbcolor}def 443.90805 -110.48404 moveto 443.90805 -110.48404 moveto 443.90805 -100.61723 lineto 453.77486 -100.61723 lineto 453.77486 -110.48404 lineto closepath 453.77486 -100.61723 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -110.48404 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -108.90662 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(orchid)h(\(109\))-598 -516 y pgfr restore restore save /pgffc{0.93 0.51 0.93 setrgbcolor}def 443.90805 -124.29454 moveto 443.90805 -124.29454 moveto 443.90805 -114.42775 lineto 453.77486 -114.42775 lineto 453.77486 -124.29454 lineto closepath 453.77486 -114.42775 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -124.29454 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -122.71713 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(violet)g(\(110\))-598 -516 y pgfr restore restore save /pgffc{0.87 0.63 0.87 setrgbcolor}def 443.90805 -138.10506 moveto 443.90805 -138.10506 moveto 443.90805 -128.23825 lineto 453.77486 -128.23825 lineto 453.77486 -138.10506 lineto closepath 453.77486 -128.23825 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -138.10506 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -135.55902 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(plum)g(\(111\))-598 -516 y pgfr restore restore save /pgffc{0.85 0.75 0.85 setrgbcolor}def 443.90805 -151.91556 moveto 443.90805 -151.91556 moveto 443.90805 -142.04875 lineto 453.77486 -142.04875 lineto 453.77486 -151.91556 lineto closepath 453.77486 -142.04875 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -151.91556 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -150.33813 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(thistle)g(\(112\))-598 -516 y pgfr restore restore save /pgffc{0.9 0.9 0.98 setrgbcolor}def 443.90805 -165.72606 moveto 443.90805 -165.72606 moveto 443.90805 -155.85927 lineto 453.77486 -155.85927 lineto 453.77486 -165.72606 lineto closepath 453.77486 -155.85927 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -165.72606 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -164.14865 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lavender)g(\(113\))-598 -516 y pgfr restore restore save /pgffc{1 0.89 0.88 setrgbcolor}def 443.90805 -179.53658 moveto 443.90805 -179.53658 moveto 443.90805 -169.66977 lineto 453.77486 -169.66977 lineto 453.77486 -179.53658 lineto closepath 453.77486 -169.66977 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -179.53658 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -176.99054 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(mistyrose)f(\(114\))-598 -516 y pgfr restore restore save /pgffc{0.98 0.92 0.84 setrgbcolor}def 443.90805 -193.34709 moveto 443.90805 -193.34709 moveto 443.90805 -183.48029 lineto 453.77486 -183.48029 lineto 453.77486 -193.34709 lineto closepath 453.77486 -183.48029 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -193.34709 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -190.80106 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(antiquewhite)g(\(115\))-598 -516 y pgfr restore restore save /pgffc{0.98 0.94 0.9 setrgbcolor}def 443.90805 -207.15758 moveto 443.90805 -207.15758 moveto 443.90805 -197.29079 lineto 453.77486 -197.29079 lineto 453.77486 -207.15758 lineto closepath 453.77486 -197.29079 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -207.15758 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -205.58015 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(linen)h(\(116\))-598 -516 y pgfr restore restore save /pgffc{0.96 0.96 0.86 setrgbcolor}def 443.90805 -220.9681 moveto 443.90805 -220.9681 moveto 443.90805 -211.10129 lineto 453.77486 -211.10129 lineto 453.77486 -220.9681 lineto closepath 453.77486 -211.10129 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -220.9681 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -218.42206 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(beige)g(\(117\))-598 -516 y pgfr restore restore save /pgffc{0.96 0.96 0.96 setrgbcolor}def 443.90805 -234.7786 moveto 443.90805 -234.7786 moveto 443.90805 -224.9118 lineto 453.77486 -224.9118 lineto 453.77486 -234.7786 lineto closepath 453.77486 -224.9118 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -234.7786 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -233.20119 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(whitesmoke)f(\(118\))-598 -516 y pgfr restore restore save /pgffc{1 0.94 0.96 setrgbcolor}def 443.90805 -248.5891 moveto 443.90805 -248.5891 moveto 443.90805 -238.7223 lineto 453.77486 -238.7223 lineto 453.77486 -248.5891 lineto closepath 453.77486 -238.7223 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -248.5891 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -247.01167 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lavenderblush)g(\(119\))-598 -516 y pgfr restore restore save /pgffc{0.99 0.96 0.9 setrgbcolor}def 443.90805 -262.39961 moveto 443.90805 -262.39961 moveto 443.90805 -252.5328 lineto 453.77486 -252.5328 lineto 453.77486 -262.39961 lineto closepath 453.77486 -252.5328 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 453.77486 -262.39961 moveto pgfstr save save [1.0 0.0 0.0 1.0 454.77113 -260.82219 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(oldlace)h(\(120\))-598 -516 y pgfr restore restore save /pgffc{0.94 0.97 1 setrgbcolor}def 532.69417 0.0 moveto 532.69417 0.0 moveto 532.69417 9.86678 lineto 542.56097 9.86678 lineto 542.56097 0.0 lineto closepath 542.56097 9.86678 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 1.57741 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(aliceblue)f(\(121\))-598 -516 y pgfr restore restore save /pgffc{1 0.96 0.93 setrgbcolor}def 532.69417 -13.81049 moveto 532.69417 -13.81049 moveto 532.69417 -3.9437 lineto 542.56097 -3.9437 lineto 542.56097 -13.81049 lineto closepath 542.56097 -3.9437 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -13.81049 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -12.23306 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(seashell)h(\(122\))-598 -516 y pgfr restore restore save /pgffc{0.97 0.97 1 setrgbcolor}def 532.69417 -27.621 moveto 532.69417 -27.621 moveto 532.69417 -17.7542 lineto 542.56097 -17.7542 lineto 542.56097 -27.621 lineto closepath 542.56097 -17.7542 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -27.621 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -25.07497 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(ghostwhite)f(\(123\))-598 -516 y pgfr restore restore save /pgffc{0.94 1 0.94 setrgbcolor}def 532.69417 -41.4315 moveto 532.69417 -41.4315 moveto 532.69417 -31.56471 lineto 542.56097 -31.56471 lineto 542.56097 -41.4315 lineto closepath 542.56097 -31.56471 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -41.4315 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -38.88548 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(honeydew)h(\(124\))-598 -516 y pgfr restore restore save /pgffc{1 0.98 0.94 setrgbcolor}def 532.69417 -55.242 moveto 532.69417 -55.242 moveto 532.69417 -45.37521 lineto 542.56097 -45.37521 lineto 542.56097 -55.242 lineto closepath 542.56097 -45.37521 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -55.242 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -53.66458 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(floralwhite)f(\(125\))-598 -516 y pgfr restore restore save /pgffc{0.94 1 1 setrgbcolor}def 532.69417 -69.05252 moveto 532.69417 -69.05252 moveto 532.69417 -59.18571 lineto 542.56097 -59.18571 lineto 542.56097 -69.05252 lineto closepath 542.56097 -59.18571 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -69.05252 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -67.4751 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(azure)h(\(126\))-598 -516 y pgfr restore restore save /pgffc{0.96 1 0.98 setrgbcolor}def 532.69417 -82.86302 moveto 532.69417 -82.86302 moveto 532.69417 -72.99623 lineto 542.56097 -72.99623 lineto 542.56097 -82.86302 lineto closepath 542.56097 -72.99623 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -82.86302 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -81.28561 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(mintcream)f(\(127\))-598 -516 y pgfr restore restore save /pgffc{1 0.98 0.98 setrgbcolor}def 532.69417 -96.67354 moveto 532.69417 -96.67354 moveto 532.69417 -86.80673 lineto 542.56097 -86.80673 lineto 542.56097 -96.67354 lineto closepath 542.56097 -86.80673 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -96.67354 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -95.09612 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(snow)h(\(128\))-598 -516 y pgfr restore restore save /pgffc{1 1 0.94 setrgbcolor}def 532.69417 -110.48404 moveto 532.69417 -110.48404 moveto 532.69417 -100.61723 lineto 542.56097 -100.61723 lineto 542.56097 -110.48404 lineto closepath 542.56097 -100.61723 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -110.48404 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -107.938 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(ivory)g(\(129\))-598 -516 y pgfr restore restore save /pgffc{1 1 1 setrgbcolor}def 532.69417 -124.29454 moveto 532.69417 -124.29454 moveto 532.69417 -114.42775 lineto 542.56097 -114.42775 lineto 542.56097 -124.29454 lineto closepath 542.56097 -114.42775 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -124.29454 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -122.71713 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(white)g(\(130\))-598 -516 y pgfr restore restore save /pgffc{0 0 0 setrgbcolor}def 532.69417 -138.10506 moveto 532.69417 -138.10506 moveto 532.69417 -128.23825 lineto 542.56097 -128.23825 lineto 542.56097 -138.10506 lineto closepath 542.56097 -128.23825 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -138.10506 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -136.52763 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(black)g(\(131\))-598 -516 y pgfr restore restore save /pgffc{0.18 0.31 0.31 setrgbcolor}def 532.69417 -151.91556 moveto 532.69417 -151.91556 moveto 532.69417 -142.04875 lineto 542.56097 -142.04875 lineto 542.56097 -151.91556 lineto closepath 542.56097 -142.04875 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -151.91556 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -149.36952 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkslategray)f(\(132\))-598 -516 y pgfr restore restore save /pgffc{0.41 0.41 0.41 setrgbcolor}def 532.69417 -165.72606 moveto 532.69417 -165.72606 moveto 532.69417 -155.85927 lineto 542.56097 -155.85927 lineto 542.56097 -165.72606 lineto closepath 542.56097 -155.85927 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -165.72606 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -163.18004 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(dimgray)h(\(133\))-598 -516 y pgfr restore restore save /pgffc{0.44 0.5 0.56 setrgbcolor}def 532.69417 -179.53658 moveto 532.69417 -179.53658 moveto 532.69417 -169.66977 lineto 542.56097 -169.66977 lineto 542.56097 -179.53658 lineto closepath 542.56097 -169.66977 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -179.53658 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -176.99054 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(slategray)f(\(134\))-598 -516 y pgfr restore restore save /pgffc{0.5 0.5 0.5 setrgbcolor}def 532.69417 -193.34709 moveto 532.69417 -193.34709 moveto 532.69417 -183.48029 lineto 542.56097 -183.48029 lineto 542.56097 -193.34709 lineto closepath 542.56097 -183.48029 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -193.34709 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -190.80106 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(gray)h(\(135\))-598 -516 y pgfr restore restore save /pgffc{0.47 0.53 0.6 setrgbcolor}def 532.69417 -207.15758 moveto 532.69417 -207.15758 moveto 532.69417 -197.29079 lineto 542.56097 -197.29079 lineto 542.56097 -207.15758 lineto closepath 542.56097 -197.29079 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -207.15758 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -204.61156 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lightslategray)f(\(136\))-598 -516 y pgfr restore restore save /pgffc{0.66 0.66 0.66 setrgbcolor}def 532.69417 -220.9681 moveto 532.69417 -220.9681 moveto 532.69417 -211.10129 lineto 542.56097 -211.10129 lineto 542.56097 -220.9681 lineto closepath 542.56097 -211.10129 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -220.9681 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -218.42206 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(darkgray)h(\(137\))-598 -516 y pgfr restore restore save /pgffc{0.75 0.75 0.75 setrgbcolor}def 532.69417 -234.7786 moveto 532.69417 -234.7786 moveto 532.69417 -224.9118 lineto 542.56097 -224.9118 lineto 542.56097 -234.7786 lineto closepath 542.56097 -224.9118 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -234.7786 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -233.20119 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(silver)g(\(138\))-598 -516 y pgfr restore restore save /pgffc{0.83 0.83 0.83 setrgbcolor}def 532.69417 -248.5891 moveto 532.69417 -248.5891 moveto 532.69417 -238.7223 lineto 542.56097 -238.7223 lineto 542.56097 -248.5891 lineto closepath 542.56097 -238.7223 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -248.5891 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -246.04308 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(lightgray)f(\(139\))-598 -516 y pgfr restore restore save /pgffc{0.86 0.86 0.86 setrgbcolor}def 532.69417 -262.39961 moveto 532.69417 -262.39961 moveto 532.69417 -252.5328 lineto 542.56097 -252.5328 lineto 542.56097 -262.39961 lineto closepath 542.56097 -252.5328 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore 542.56097 -262.39961 moveto pgfstr save save [1.0 0.0 0.0 1.0 543.55725 -259.85358 ] concat pgfs -598 -516 a 0 setgray -598 -516 a Fa(gainsboro)g(\(140\))-598 -516 y pgfr restore restore restore newpath restore pgfc eop end %%Trailer userdict /end-hook known{end-hook}if %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%EOF ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/color-names.pdf��������������������������������������������������0000644�0001750�0001750�00000050174�14557511157�015765� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.7 %Çì¢ %%Invocation: gs -q -dNOPAUSE -dBATCH -P- -dSAFER -sDEVICE#pdfwrite -dEPSCrop -sOutputFile#00.pdf ? ? -f ? 5 0 obj <</Length 6 0 R/Filter /FlateDecode>> stream xœÅOsÞ¸ Æïþ>¦‡UIý×µ3ÎôÖ6·n»¶ã¤±ã¬ã$“~úRzEò!z_¸Ûé´«Qa¯õxHê·kÓØk³þgÿçÍã•i¦ii—ÉÝ3³1ÓìþŸf°ËÐÙëçû«¶é–¹ï¯Ûqšöz™›qœý?žï®Þ]ýñïýr}ÿåªk–y¸þ~e®ÿ"þÔ?œÕýÕoWvûc®÷Ü<^ÿé­û}ƒ¹›eêܯ{ûîêô—ÚkkkÜÕŽKcÜßûöñêŸoÿðSÛô­mû7wûe?¾¹w?ì—ãüæk¼ ?ö-|ˆwŸâåýW8Û—Ó¥™í›çx Üß0Ûô}ûæç7ñ¶?÷óÂí½ýëÕŸß^ým}X| ÛUò†nrOϽÑD}›vNÐoYèwñîçø¼Ÿé«p—Ÿ¢ÁGÇɺ¿qX"'gÑF Ž“iæaé¦ÁAê»eé ´Ü?š¥N«d¢¢Õ»¿·ßi_"-Þ«¾±´ž¢ócîò%^Rg\]Í;£Ygìdgt?²ØÖ]LÖ,]J·Ýk¨Ó-™¨è¶î×tý‰î{ŠÉÑ}a}‘q@wéЉöñ²ÄfGâ.†eÇ„mÛfš«lJ&*6¶oævgó@½É±¹wßG6 ±4zfÄVoÒÐ6ÈÞ´ Ø=¼-ëþ·«´Š&*Zî)ŒíÉ8ZŒ£ôsâ(cÝQ\\NáÜýŸyîÇf˜ªÏ\2Ñ<³]$÷£"9Ħçä™ýë…»znùÑ3‰£'£1™¹éÇ*’‰ŠÆ´þi; æ OÉ7AÍÒk—¥µËšjµË<wñ{˜LÓÕ»d¢zìa}eÝé±ß±ŽÏÀpNð+iÒ0q#†‰¥&`f‰›¥Ýàú®u I\ÉD®wñÕìàn( f™ÇøÔ_ØÜò?zl¼44rä–gÔÆš)^ ­vé[§U2QÑêŒË­Ú-fö-¦ê¿P[6·ñˆq3H´­Äpé–~XGè°ýÉY—øš¾J®d¢"ç¼Âªiü†z\Åòƒ/Vl‰!“g gÓËΰï—eH§xc§f©ƒ,™¨@š®é&{"ù…>|šŠÃ€eFi;–Fi'Òq7Œ[‘²=«C4-K’NÏÓÒÌõ¹ h¢!4/Í0ºzñì„€¡ å²3x¤¸Ó¬ûZ_§¹»±3nšà0N½m¦®F±d¡8®X¬jÀ2<ÓŠ¯Î³+òdžídL›¦d£9c}Š-šhPŽm³˜y<¡„ç„)–™ܳà;úcçN£ ­scyY§ÖMÂm’ŸôãÐ l»L²Ð ëç5Çܳ“ê-Ý#ëd©­ì&™L(y�I×NMo«3@ÑD¥Üû™hëJŒoŒï¥Ô 5I}Oˆoó€«{Yc†4ëu±º«wÿŠ&º:¹ÌÜ’¬÷‰E˜¯Í™º©äL eán§±~0Ý’9Ó`›výË*$Š&ª8ï~ÉØ[mpâFX/ŤêÍZû‹ÖLf A½u‰v»"šWiÎs¥c/Y\hq™ÉlÇ´;}~§ÒÁUÖ»ÉåjðžüXfûÁGï.„uýL›=bóÉML¬Ü^MTÔ°½~ÿö§øDñ®ïHôSéñÛúãCų˜Óàò!a”»ç¢‰ †ËÏúiw!xëïãó•Ý"‹6¦áMÜ¢_ÖlØ ­n+hH¹á-š¨€`Ãûs|„;È K ~ìk¼|—\ cª—àÙl0•{ࢉ öÀ°¸`0=°£í»ÑC‰ÓíΆX»Œóª„Úoó]i|‹&*DLã;‹ÒÜzy žX†·,ïOñî3Ë;Ts‰÷x`è.f­FP« ËÝvÑD:é¶?²ãõ†}_’ç/}Sb,›d`aØçBVnÈ‹&*`Sçò·®æ™ôîzùƒ †ßI0Œû/˳õŒã,tßù óšxv Îr£_4Qá–fð™ûKàžEôÂTÇüj{—8h6注q˾¼;ö_QŒÒð:~Z›Ínîî¯],X=ûí­{ìÂ{et2> 5yrT DÕ E‚ÆèõÁh˜×‘E:( -Xmß•~Ù6jÚnÌÈÜmM<¤Z*DÕÎ6ËhUÄf¼g£à;mße,…Zfk¤™WEµMTíä~yKf;¾ø{"—{ªÀe^ÀC,n|ÃÀ¹É¾xe¿@De=B4Q!B=âW)D~O‡SÜ�¡¸‰]9ßímŒûç8'ó~E…M4\â ë:0_ܲ£ †%[œ:¸zFV¨|@ŽèÚ•èêqÓ²t‰Ç•… ÉBÃuši0=áúÅö‰\îù”0$Åbhψ`=™u5ˆPEpM4ˆF»&ÂsÒÝ̪g’7¬;=…ÙaŸ¸ò ôú†Ö/Øíqއ˃d¡AدM¿ùü¦ßï\Nm¡:‚uûZh³¦r�º"gˆ&Ô‰œÁ7ƒ€ÉW¾U Äò&ôš]|ú)^$åuQ˜Mt­žØ)ä=B$h¿J 3=”G®PI@O1f&a)˜çSQ4DÕŠÆ‘Öó¹ãqÿ1Ža¸`pµØ¸/¶û½ËÓMž¡¦¹1CEò,.Ò„æÓ»lª1ãXK]>±¡ê¥ 1òŸ!o-‹8C’ÃzéaŽfä¦ã°„9¶ÿª²"š¨p[„KDlŠó´$s.hEãb·]ù¬ŠÊˆh¢"€Û “ýÊF­Ö¡¾³^ÄL‘CÑ‹:‰a’æ¾æ–5ÑDŰÝÛ‰!ífyoš³åuVÆ¥¯s± iHYMT@PùÄ«o,KñBUñÈ„Ü ¬Œãp�ihî~ošçUQQDRTQ`œ˜~c2³ c3Êl–“ø}ÊðàeáC4ѰI„`å:øøã ëXlÜ’ß�9Êên¬Ã~J~ƒú¦̧}ÞØ—«#ó²v"š¨˜ãf¾N}f™aG0¼*¿õe,ŽàY˜,`¹\‚ª¬‹ˆ&*T¨‹\X±>³î™¦Å‚Ÿ-2µ!VÖD°~h¦‰– BÖ�gú–YÄ7RžÑuÛÆÎ°È »ká¡ËÊh¢â‚ÊÁ9ŽDë«lø}c}ê>ƹKýЋ…BØ»zDZr \Ëjƒh¢B{$¨L•‘„hGUNq`¯ä™ŽqV¬?v°]oLš*V4 ÑDÖôMG[Æür£j,`’™F€›Xs 4$V$ ÑDƒ)‘,hû†óz÷[R‰B‰‘04ål·Í®À¥,8H*‰àp&&Å{&N··K„È&T~K!lÓÜÏ�€AB4Ñ Lv@<ÖAµ‘ÕaÇ"Ð|Ý9E¨Wœ§.Ûæ0h±ïw�}YÆ,4àQÆàWзñJI!�Šã×Yz%B4ÑÐêÜ,±¶¥ãÊ•ˆì¹ÅÂúÝ™±r-Ê¢‰®—e˜ ?³™GºfI7^7ó8PRÄ­šÛz)$ZQ!DÕ¬*Ä«†<úR` Ú‘*^ ´v̧ehý¼-C[Œ]º b¤(|„>âÖí0£‹‚./ ’Å%/­\4éÇTøàÛ2ÀîcD~tFâéï-Å< ¶Éˆ�Âb‘³f¦Å )®Ôü*/I&*Ƹ3ä‘åv˺5?0€ñoñò+1Èúhüý¼øËN!ª/½±8Úã›!Ú•³$Õ Aq†®[ÍêyhKòÍóWþ@V,Ÿúù”õ®ß훟®ÊyN’‰Š(no¡ýá X ¶¯‘v;±æ|âhTy’LTÀl×Ì>&ðýr:`W`/0iŒæg`'V[a »bè$V;J2QáD‡ïÅÝÈÎK\±ŒS,¡vYÑ&­Ð�©r²”d¢áhçiÍ “ñѸæï ¨ëåSü Ì"ꌣTTÅ9‡É޶Ê)U’‰Š,³)&åtìëGÈO<@Çó¨œp%™¨á W/ì§ôN JŠþsD©ñܸ–&<bå¸*ÉDEU›s2t˜UèÆ*ï-L+†™(ëm!´àhÚ];¹J2Qc6„œ;'\Påd¥ 3:‹¸å*gÚ\;ÊÖ/Néüþ›À²rÜ•d¢ÂGnXXt“Y†–ÐÁ Ë–Z0J…ÉZ‘Ø=‘‰{ü™ÊW’‰ È5çŒñ–Øò"L»t¡ r.ºªX¥ìçéÀ:E83tGY;.K2ÑÐ^¶•‚ÝkäG_BöžÈ¿âXÎoA¬w¶ÕVû=Îß+'m þÉI[ÿkzåP!U<koaÕNÓ’L4¸-éH÷‡Ëƒà¹¥Ò$îÊAX‚…æ©QÈ9œÊ”Z.NûY»p�ùþlµ3¯$Íó'›D~Çž_9ÚHµƒ«êý‰4á܌֯ekùü+ÉD×p‰zÏ9å×ÿm†•ªÖ³ÁZ;UK2QÅtT.̶ s&¦ƒcÊ‹1kX‹¸h †®™*JŒ`p ¿n\Ù¶©óÈò»M@0îEgé ͯ³YõŽbN|íà°Óe½éµïxVeÑE²PáDÍåëLßoã¦ð+¹¬HšþÑʇd¡zx<}ëœrâPýÅ´ �- ‰¥€ÇPÖ-$ (Üa¢/—¯=¿¶ñE3z‚/áV–/$ 7T/;MytÉ+½ÜwÙ²";H* ¨:ð{þè<¶ºÏÃ>Sžóh>ŸúL8+b0Û7Nðp-§¬7H€É~M//7¼.@Zd�÷ƒ‚â…C°"(H*t¨'ܲ¾way ÝdþJ¡‹–yèZ¿“ + ’… ³q„wµõòsD Gò[€)ÅÊ6: HÓþÌÉÕû·²°ÈòÔÊR…d¡âÊ|X#sIð8Haß±ØøÅÔ}¥ÄeÃZK´ •C>ÙúÇK8°×c-K’… <*G4 £Ì|mG†ÕvÉîºÎjöG±zeB²P±¢_å8·L½ *³Ài¹‘9chµì[iÃ~e�\Ö2$ `2ô€«™@ø‚€T½øUpÈ~úrä^Q5$ ÷DÔ¸ü¥¹„©€‰žd B°¬J~‰(B~ºý_%TàŒ´*ÊóúÜ©õ`üç wD±B²ÐPL´ ¾ÑÌWÔé1RÜ~zp2qqÕ@úPeC0ÐÐ@ ã3ëà1h¦­h†¬l„ÒUEÝ,4`¸z@œ‘/nÜ'¼Ÿƒ“,~áSpwR!2ïD/ urQß,t­ø¼Ç9@¡ ÕßÙ|—�¢—XÈ„~qΊ–!Y¨bX3nÁT³'‚_Íg3‡òí(¼4X¶x1ñn!7ï3nß²ý‘#§sYø¾_[ǵH—€wéDclöYp2nô5'¸Ý%N¼Ý­9ñfœØàjE®~õi¾9¹–ÕÑDEä".½=qéœás¼Ë/Xô·çmëd­ïyBeUE4QADYz_+`¶»äl–íî/|™Í3êÎeTTD#ÜB&ëíï'“õv—LÖç3ê¥vÜwîý2#´¬¨ˆ&*p(©‰ÄÃ`‘‰d»+Ô󜃈sûn#è2±éQU„ÑDEÓ¬'ë–¶ÜùÅ J"ìå˜Lì~&aþG¦°ãar”ÞÇþµ#8l'f§vYèM4/„ûˆŠâ…ð-å›hPŸ–Ú¸'q¾÷ý÷} #X–Å!ÑD…Õ!=îZ횀§ómN÷,á ·ˆ;|ñ&°, J¢‰ 7îT9˜2mwÓÕ=§B¿;@k‘hÅ=z^óe‚sY&MT´P':˜ºçSÝ‹H 4 ±$Šg}ú�Änz@QÖvD-wøq–ÚÓý.bI?¤7Ä–72)k8¢‰Š î5y‘FÖvžÎâT=ËhBµŸcŒAû TÊÚŒh¢‡Ÿ.áSrf]žžß²ò™?Ï™g(W3ñ¬Ø¸ØÇ“©,¢‰^iÛÄ-¢\mw$˜˜Çmú8ÂQ¬xâwÍÂñ²dÒ,«-’…f"·cÖóÁ ˆÉzëÜɱÆy<H‹§z†°Åz(ÂÎ¾Ì °+²Œh¢Á| …¨ƒùO>wÐH,QÂqãñÜq’3—•ÉB¥š_YDHMæŽC|Äš‚òÙ/€OE²M4„’³ÂÎdÌTÌñü‘ŽÍrq d…òÁ&£’ ­ˆ6¢‰®MªÍkOÇþ²ÖÊ'­÷¢Ò�Ìå"d?¡¼™ÄŠÆ#š¨"Š<|¹qËÞ…¹ê&uÖz KzÄz$ºêé„òØÐµËº²¦¬ÍH—ðú®™–)ÕfÈ®©|ôß°Nù ýIò}øú~ŠßÀ¨¬Äˆ&*ލÄãrƒxINÒÏ9>ˆ8ùº|ÍýÙø¬ –ÑDî"«™ø¬:O%¿³Hëéay "¦—G5ÌEˆ´,؈&*¤(ØÏåUC(jø)èû9þ(T2PE³ðÊ¢h¢‚‡¢ YÅ\Pù�Zû #3œ*—bÞI>tÄ5“a^QoDVTo�Õâcðmh9'_£—“ñ´ƒ¼,¤ˆ&6%!…/ä –Ý”ˆ¥Igè"ž‡…¢&º”cY!MTñC+0Cÿ!]ù)´UÉ׿+@ø "^ˆ&*¸†|¼¢Ä~œ3Ú„bÁ’ØS'D 'Îm%Õio«—cÏöG!²ø š¨htk×ÖVdñõÐÇshˆ:DøÒFg9}¤ùtˆÊZ„h¢BJÎYYupGžv‘Çòû!–ðä;ìòamG~äËb†h¢"Ïš3!Ì÷ìû€·ôC¬àÉwÚkܼH=$ç¤z C4Ñ K$Œ WÕH&XÎÈwÙ+$<’ÒÃ)k’…†^¢Yˆõœ|}½æPã²L›Cù­uñlSÿÌqA4ÑpI6}ðâ_¬“=_yOCåŒaX3;–ø· –ãhÜrM/à-”õ ÉBó˜Ï·š†»q¹Œ'Ÿd¯�ÜøÿhQC4Ñ`KD ~.¸ã7֟ŵ(ä[íBs¶xWñÅʲ¨Wˆ&º~G\�}á8ÝÙC” vy‘^�ÍŠ!š¨¦“†~¶=³d]ž:BK_ù$â$_p/âüÛÕ q|endstream endobj 6 0 obj 5480 endobj 4 0 obj <</Type/Page/MediaBox [0 0 616.5 277.5] /Rotate 0/Parent 3 0 R /Resources<</ProcSet[/PDF /Text] /ColorSpace 52 0 R /ExtGState 53 0 R /Pattern 54 0 R /Shading 55 0 R /XObject 56 0 R /Font 57 0 R >> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <</Type /Catalog /Pages 3 0 R /Names << /Dests <</Kids [46 0 R]>> >> /OpenAction [4 0 R /Fit] /PageMode/UseOutlines /Metadata 59 0 R >> endobj 7 0 obj [/Pattern] endobj 47 0 obj <</D [4 0 R /XYZ 49.957653 251.008118 null]>>endobj 48 0 obj <</D [4 0 R /XYZ -0.269996643 9.26763916 null]>>endobj 49 0 obj <</Type/ExtGState /SA false>>endobj 52 0 obj <</R7 7 0 R>> endobj 53 0 obj <</R49 49 0 R>> endobj 54 0 obj <</R44 44 0 R/R39 39 0 R/R35 35 0 R/R31 31 0 R/R24 24 0 R/R21 21 0 R/R18 18 0 R/R13 13 0 R>> endobj 44 0 obj <</PatternType 2 /Shading 43 0 R /Matrix[10 0 0 10 0 1775.4]>>endobj 39 0 obj <</PatternType 2 /Shading 38 0 R /Matrix[10 0 0 10 0 1775.4]>>endobj 35 0 obj <</PatternType 2 /Shading 34 0 R /Matrix[10 0 0 10 0 1775.4]>>endobj 31 0 obj <</PatternType 2 /Shading 30 0 R /Matrix[10 0 0 10 0 1775.4]>>endobj 24 0 obj <</PatternType 2 /Shading 23 0 R /Matrix[10 0 0 10 0 1775.4]>>endobj 21 0 obj <</PatternType 2 /Shading 20 0 R /Matrix[10 0 0 10 0 1775.4]>>endobj 18 0 obj <</PatternType 2 /Shading 17 0 R /Matrix[10 0 0 10 0 1775.4]>>endobj 13 0 obj <</PatternType 2 /Shading 12 0 R /Matrix[10 0 0 10 0 1775.4]>>endobj 55 0 obj <</R43 43 0 R/R38 38 0 R/R34 34 0 R/R30 30 0 R/R23 23 0 R/R20 20 0 R/R17 17 0 R/R12 12 0 R>> endobj 43 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 42 0 R /Extend [true false]>>endobj 38 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 37 0 R /Extend [true false]>>endobj 34 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 33 0 R /Extend [true false]>>endobj 30 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 29 0 R /Extend [true false]>>endobj 23 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 0 100.001] /Domain[0 100.001] /Function 16 0 R>>endobj 20 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 0 100.001] /Domain[0 100.001] /Function 11 0 R>>endobj 17 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 100.001 0] /Domain[0 100.001] /Function 16 0 R>>endobj 12 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 100.001 0] /Domain[0 100.001] /Function 11 0 R>>endobj 56 0 obj <</R45 45 0 R/R40 40 0 R/R36 36 0 R/R32 32 0 R/R25 25 0 R/R22 22 0 R/R19 19 0 R/R14 14 0 R>> endobj 57 0 obj <</R50 50 0 R>> endobj 41 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[0 0 0] /C1[1 1 1] /N 1>>endobj 42 0 obj <</Functions[28 0 R 41 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[21.2503 23.1253 25.0003] /Encode[0 1 0 1 0 1 0 1]>>endobj 37 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[20.0002 25.0003] /Encode[0 1 0 1 0 1]>>endobj 33 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[21.2503 25.0003] /Encode[0 1 0 1 0 1]>>endobj 28 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[0 0 0] /C1[0 0 0] /N 1>>endobj 27 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[1 1 1] /C1[0 0 0] /N 1>>endobj 26 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[1 1 1] /C1[1 1 1] /N 1>>endobj 29 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[22.5003 25.0003] /Encode[0 1 0 1 0 1]>>endobj 15 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[0 0 0] /C1[1 1 1] /N 1>>endobj 16 0 obj <</Functions[10 0 R 15 0 R 8 0 R] /FunctionType 3 /Domain[0 100.001] /Bounds[25.0003 75.001] /Encode[0 1 0 1 0 1]>>endobj 10 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[0 0 0] /C1[0 0 0] /N 1>>endobj 9 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[1 1 1] /C1[0 0 0] /N 1>>endobj 8 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[1 1 1] /C1[1 1 1] /N 1>>endobj 11 0 obj <</Functions[8 0 R 9 0 R 10 0 R] /FunctionType 3 /Domain[0 100.001] /Bounds[25.0003 75.001] /Encode[0 1 0 1 0 1]>>endobj 50 0 obj <</BaseFont/VTXNLB+CMTT8/FontDescriptor 51 0 R/Type/Font /FirstChar 40/LastChar 122/Widths[ 531 531 0 0 0 0 0 0 531 531 531 531 531 531 531 531 531 531 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 531 0 531 531] /Encoding/WinAnsiEncoding/Subtype/Type1>> endobj 51 0 obj <</Type/FontDescriptor/FontName/VTXNLB+CMTT8/FontBBox[-5 -228 545 694]/Flags 33 /Ascent 694 /CapHeight 694 /Descent -228 /ItalicAngle 0 /StemV 81 /AvgWidth 531 /MaxWidth 531 /MissingWidth 531 /XHeight 441 /CharSet(/a/b/c/d/e/eight/f/five/four/g/h/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/q/r/s/seven/six/t/three/two/u/v/w/y/z/zero)/FontFile3 58 0 R>> endobj 58 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 3421>>stream xœ¥WyXSWÚ¿1psÄR{[íè½´î;R×VYÝ*¢È U+ZÀ [H¾ÊzDLˆâЏTQkUR­¢ÑÚ±ã:íÀ|Vgæy3sœç™Ã¢Ái¿?¾ç{ÈáÞóžßû{ïï¼P6#(@@{û,îÿ4Åò;eüËa.N´´ÿs-r"ãx'··áФ†À·(¡@ UdyËb’ä;ÕÎÓB§;Ï[²dÑ,gW—%Ξ±<"4Xêì¬ K‚•díü{Yh„X™ä<mi¸Róñܹ s‚%Š92ùN·é³œ"”áÎþb…X/Þá¼R&U:¯ –ˆÀÍøí-“ÄÄ)Årg_Ù±\JQÔd©,&V®PÆÅ'‡$…&ï‡í ˆŒŠ–,™6ÝežëGó,\´˜¢ÖS~ÔÊŸú=@m¤©Ï¨M”åMm¡–SŸS+¨•Ô*j5õ)µ†ò¡ÖR¾Ô:ê}j$eG9QoSc¨w(–z—zK£¦Ê(JIu¦ Ê/FdŽøQ¸B¨·ùÈæ°í[¶íô[´”¾+rU3þÌ•‘Œ,³û]Ý¿ì•ögD £FÚëH;&:¾½vô)K“£¥ ™à¢Ið3ø™…–UÐÁ>Û|b‰çç¡*gÌ׆ržtJ ŠŒlD5ü1Üb]+]ÓˆZZbP tïÃgNjãü8¬ˆ¥ÊÈ[MHËÃŒaoÑä¼\t›ÌPOΓA4 ޳Á ffOÁŽØ©w&Ð@÷ö‚‡Ãð\ÖÛ÷ÆÓ‡W¯Þ¸quí|ßåÞ< å&˜ù ¶Æ,„p,g‡aÙBï—´%w „Ï~†10Êõ°ÍÖdÙNþhŠ#¥—uÃSiIb¿¹ôÕ•ï.­Zà²Êg…gØý3œõÄ.“àˆöà[-X2ˆÅ(NÆÉCôˆÁSfà·°cït 8}¶¸˜Ç!ÛD©R܈vóð1­m&%(ßF»Ã v} —»§ÏµOnv›owxørƒåè4 `†¼ÿ,„xðaAp÷n§ÙÑ”]ƒ˜†úºæ†¤cËæn ”Ëy£è ª<’Ã:M2tŠwº[WPieÿ+û=&¨4 -+,ά5E*s3rò¹ºP¤$Y¸Å- Ÿó÷”Giüù¬;h ³S,™ïZ9žË­É«’"FŒäI¼«(ÉZ*ꊌÜÙȯÑB·ÛÞŸ²‹›ùP㎒U«*×U ÃÌC˳'EQIjNÕ€*ÓŠ :~ÍEÓ‹=˜e& !Ñ"`a>­m"e(•Çóïу,Ë“¸OrÙ¯ªq")sÄwOLWo”¢¬ØL•¼+Ù#FŒ'º þµ´-cÙ¶Þt½Ô+U솚›9Ø+úõs =÷ªôÇs­Z]·Kj@ZÄÜúoA×Ãs“ Á¢ì?CÀ6ƒÏXCé鉸ÊD¸b«·n'Ï_÷I# 6øOÕbªGãê‘U·2¯ƒ×Xr…–P\ß4$ lgÝzŠ­¶…t~Cj§ê@êùÜš0$FyÉ©›ä Tù)L!ý9´ÙžŒì¤RÏ_Â÷KźwWiÏ5<TWitŒšVg”FÖ{íÞ\œÚŽê•¶1ƒúœù‡?›çÌOXõ†Cìý5·ð„­“[Œ.Ψk¬:¬áP™Z]­©T×¢*ÄüñxX�ïŒ?“ãÑž×}~¹wÆX^Í×G·çŸFLã¾Hi⬢bïþ‹â‘rGbxÒŽÂtÄø…:rFQճ˂×mïnéþuI_ÒIHÞJ$VÇý¯6€ß±ùÍ6O0Yô&Áq’ØJÂv-jD%šÊâŠrTÇ´HQ2‡…t2!._X›Í—æ7 Z”©\ž”÷iŽœ0¿;§.¨ 0u¬¶Ÿ´¢ò¢Š TûÆö\M‚.‡/)h"ÛÁÿ}lQ¶: üØO²’’#b•aù庱…â´ ÄÄ$$IBlïü¾óη¯TMZø¦"û„–H Ø½ÉåñiiH™Å%mÍ܉˜Å+®=<{à0¦¹¶ p_T¨.DYi}rbŒº½w&¢ ¼Òs ±Cïx><Ð[Ë¿6Ÿ3fØOÌjw£2TÍ‘£$ÿDG§ç„ñ[E‰HÑϯŽ3@¦‹O¦¦¡l”>.¬Õqðoº¥¢ìÿh°s‰\8. /ßÁò‘nùòátÐáà]1Ĉ„Ófã1Øñétq®ÝÐÔÌËPâqîös‡÷Xÿ ¥«×™=6™z.ÝÀ 5¦ˆL¿‡ê»B‹;ø±:j‡U?až1•Ü5öÏ&Áx˜Ðñ¨¡ŸÁdUaœŠOضE…¼×é”ïu7«ýîÒz‚ô+J63¯{âÐ>D€Uý~e?¬¯ìOÒWOW´sEQûÒêS¿¯æÀ¡·ÅÁ³ù-3­þÕ‡;g si=½Û8ÔØ3ú-'vÃâîÓÝÐ-è6Ãóþ«B˜ [«jI;Š˜¾[·Jߟ¡ã÷T’&Ó”(ê2uˆ1èt†ýò¦M1_ddžóY%bý&ÄÌðôœU^Ëg§gÄ ’VɪRƒÒ-ÄÚ?j=éŒ1@]~ôнӹ˜“¨= ¤ÅÌvtJ]UTªÙÅ?9ÆnÞÞ~þ|Gû™Îã_~¼=×à•ì#°A‡xO²üøÑ¶ÃÇΩùWÓÄP‹þz €5¿¶Ø—ŠÿÿL1P• ð%©ÊuËÖ¨0H$ …DbPƒ‘þx k½‹¸¤­ëSÖ LÛô�Ê׆Ðùt/Ì%ùØÿfì 7b;½œB£$ŽÝ!Aq¤5ˆ!K/ͬJ«G…ˆ‰‹I‰XúƒÛ¾Å[ÜE¯NM&èÂWPÌjÀll[†Ý³­Œ5ÑxþÀú#øXs:ñR±mX†³†M=ôÝ›`‹'ÛÆÆ¼z<Ò^:H©EA@$>¿~Õ§Ø•ž¥; [oOþÿÚLÎvÝÿ#´ˆá<«G`3/2$5"–K<,«–·Ì‰ŽÉiR¢TÄD Þit€Ç¢(ÅP¹ 6˜Eñà-ºüäÑú å&'‹T¯úéÆÿéNe‚&h øÌ { ´L=›ŽG/sqAy(ÅkÕê²*TÃ4$é%’ÄxiÀ±À�£‰Yn„llsc¶¸ÂÂÇó€~xîTI)‡?¬f=ü/ß¾ýüÍ¿°]¦ h2yuÊEy̺5A+û ¼¸þŸJ2ñx1ù~Æ¢ÚÌÒœb<뙦£{èhÉ­cæ#×;Úά*ÓT¡¦:«N‰·ã÷q).ò·ÅP^W=,Ð!R¡Á7,”áíð~¤R•œ–Y¢*ÏáZåâöeûý´«ÑZ43OÀc]’Ò³sQ “V‘¬oò:”rdXòL‚ÓæþX–øþX¾á=l‹éIx^ƒ}ÿ†ß[ _À8XÃa Ö°ËÖ“àÃk}==×fâ‰x’fÜÀ"¼öŒ�Ë%ÀnXnL˜ñ9éª\nûœ ¼è‚´ÂÔ ”Àd”ÄO·7WVs/gº›’K­:rbññ>(6 ov³é™9ýD6#-O¯šÆ¡«F© >A÷tÝëji¾Øùu7zÌ€ÝÔ»Ø Û}ì¶ð‹ƒYÚúÆš–ªÜÝYe\í‘cMçs¯'h‘§¿ßºMC¢È¹þ&Á­>È&èµp†ý[Çò-~}]Ò¡Sb^­Fjµº¤i4ä³3 ‰zi¬29µ7œ`üŸ~ú邤{i×a<t]fîºucÛ{oóŠÒ'ík¬¯o¬ÍÛ•WÂØw•\­Ìõâ©yaáѼT.+ˆ*Ø—\ˆ¢™~źÁs“…!dÞî¶šÍJ'cB<½+½•ÍäõÜsµ×?ï±ÞI^ðœ>˜UÁEÓr”S˜Ïàù/i¢á©-~*L[g‚y&Áó@Ú -í,d»ÕöÒ‘ªìpï%£ØC5%ÅååÜîšý‡~@ÌÝ+×z®\¿8dSm["_\\V´Ì~EB›ºsÁƒOaŒùå1ŸÒ‹í¢ƒóâ¶ Ž´i@ÁÙ #'²ð3«ƒ©ýöùQ—[™•›“›2yÒhÔÕ7ŸÛqa&Oìˆ?ǹ`¿ªlžÝ'¶(t}‚éù[s¾ä*ðG¬Z£.FŨ<¯„ ¸x嫞žK–-õñ÷öë¾’2pr½e¿IÐaþŠ(!y’ƒwÇ«öc2‘¸õˆúP §îÓÿ¥íñp¼{»¥¥¼¬¨U1ýDpøýeM"ñs¦¬á¿„ô†¡œrL`\2C5Ééü‘íÚÓu™˜Ý#ÈG-\ºdêó8¯„O7 wföSxÞ}úôç;«/zïá–d=Nœ=sáäíÛ‚6o ØæÁãË6‹Ö}Óeê¾pï^÷ÆÕk}ýóŽª ‹wxTÐ8±Dd²3Ûsv6I2‡‘&³Ã(Šú®µš endstream endobj 46 0 obj << /Limits [ (Doc-Start) (page.1) ] /Names [ (Doc-Start) 48 0 R (page.1) 47 0 R] >> endobj 59 0 obj <</Type/Metadata /Subtype/XML/Length 1531>>stream <?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <?adobe-xap-filters esc="CRLF"?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/'><pdf:Producer>GPL Ghostscript 10.02.1</pdf:Producer> <pdf:Keywords>GNU Astronomy Utilities, Gnuastro, manual, plots</pdf:Keywords> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-02-03T20:22:23+01:00</xmp:ModifyDate> <xmp:CreateDate>2024-02-03T20:22:23+01:00</xmp:CreateDate> <xmp:CreatorTool>LaTeX with hyperref</xmp:CreatorTool></rdf:Description> <rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:1b5838b9-fae6-11f9-0000-27478167ae0a'/> <rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Plots for GNU Astronomy Utilities manual.</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li>Mohammad Akhlaghi</rdf:li></rdf:Seq></dc:creator><dc:description><rdf:Alt><rdf:li xml:lang='x-default'>Used to make the plots for the manual</rdf:li></rdf:Alt></dc:description></rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?> endstream endobj 14 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 6165 2775] /Matrix [0.833333 0 0 -0.833333 0 1479.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R13 13 0 R >> /ProcSet [/PDF]>>/Length 48>>stream xœÓ2WH.æÒ24V(NÎã2P0477Õ3Q0400Ð30„ÒF E©\i\�ò ä endstream endobj 19 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 6165 2775] /Matrix [0.833333 0 0 -0.833333 0 1479.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R18 18 0 R >> /ProcSet [/PDF]>>/Length 48>>stream xœÓ2WH.æÒ2´P(NÎã2P0477Õ3Q0400Ð30„ÒF E©\i\�òµ é endstream endobj 22 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 6165 2775] /Matrix [0.833333 0 0 -0.833333 0 1479.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R21 21 0 R >> /ProcSet [/PDF]>>/Length 48>>stream xœÓ2WH.æÒ22T(NÎã2P0477Õ3Q0400Ð30„ÒF E©\i\�ñÞ ã endstream endobj 25 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 6165 2775] /Matrix [0.833333 0 0 -0.833333 0 1479.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R24 24 0 R >> /ProcSet [/PDF]>>/Length 48>>stream xœÓ2WH.æÒ22Q(NÎã2P0477Õ3Q0400Ð30„ÒF E©\i\�òJ æ endstream endobj 32 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 6165 2775] /Matrix [0.833333 0 0 -0.833333 0 1479.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R31 31 0 R >> /ProcSet [/PDF]>>/Length 43>>stream xœÓ2WH.æÒ26T(NÎã2P0P0343U0277U(JåJã�’Œä endstream endobj 36 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 6165 2775] /Matrix [0.833333 0 0 -0.833333 0 1479.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R35 35 0 R >> /ProcSet [/PDF]>>/Length 43>>stream xœÓ2WH.æÒ26U(NÎã2P0P0343U0277U(JåJã�’ðè endstream endobj 40 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 6165 2775] /Matrix [0.833333 0 0 -0.833333 0 1479.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R39 39 0 R >> /ProcSet [/PDF]>>/Length 43>>stream xœÓ2WH.æÒ2¶T(NÎã2P0P0343U0277U(JåJã�“Tì endstream endobj 45 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 6165 2775] /Matrix [0.833333 0 0 -0.833333 0 1479.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R44 44 0 R >> /ProcSet [/PDF]>>/Length 43>>stream xœÓ2WH.æÒ21Q(NÎã2P0P0343U0277U(JåJã�’ñè endstream endobj 2 0 obj <</Producer(GPL Ghostscript 10.02.1) /CreationDate(D:20240203202223+01'00') /ModDate(D:20240203202223+01'00') /Creator(LaTeX with hyperref) /Title(\376\377\000P\000l\000o\000t\000s\000 \000f\000o\000r\000 \000G\000N\000U\000 \000A\000s\000t\000r\000o\000n\000o\000m\000y\000 \000U\000t\000i\000l\000i\000t\000i\000e\000s\000 \000m\000a\000n\000u\000a\000l\000.) /Subject(\376\377\000U\000s\000e\000d\000 \000t\000o\000 \000m\000a\000k\000e\000 \000t\000h\000e\000 \000p\000l\000o\000t\000s\000 \000f\000o\000r\000 \000t\000h\000e\000 \000m\000a\000n\000u\000a\000l) /Author(\376\377\000M\000o\000h\000a\000m\000m\000a\000d\000 \000A\000k\000h\000l\000a\000g\000h\000i) /Keywords(\376\377\000G\000N\000U\000 \000A\000s\000t\000r\000o\000n\000o\000m\000y\000 \000U\000t\000i\000l\000i\000t\000i\000e\000s\000,\000 \000G\000n\000u\000a\000s\000t\000r\000o\000,\000 \000m\000a\000n\000u\000a\000l\000,\000 \000p\000l\000o\000t\000s)>>endobj xref 0 60 0000000000 65535 f 0000005982 00000 n 0000018305 00000 n 0000005923 00000 n 0000005692 00000 n 0000000122 00000 n 0000005672 00000 n 0000006133 00000 n 0000009738 00000 n 0000009658 00000 n 0000009577 00000 n 0000009818 00000 n 0000008234 00000 n 0000007046 00000 n 0000015925 00000 n 0000009365 00000 n 0000009446 00000 n 0000008119 00000 n 0000006968 00000 n 0000016225 00000 n 0000008004 00000 n 0000006890 00000 n 0000016525 00000 n 0000007889 00000 n 0000006812 00000 n 0000016825 00000 n 0000009151 00000 n 0000009070 00000 n 0000008989 00000 n 0000009232 00000 n 0000007725 00000 n 0000006734 00000 n 0000017125 00000 n 0000008856 00000 n 0000007561 00000 n 0000006656 00000 n 0000017420 00000 n 0000008723 00000 n 0000007397 00000 n 0000006578 00000 n 0000017715 00000 n 0000008490 00000 n 0000008571 00000 n 0000007233 00000 n 0000006500 00000 n 0000018010 00000 n 0000014217 00000 n 0000006159 00000 n 0000006220 00000 n 0000006284 00000 n 0000009948 00000 n 0000010339 00000 n 0000006329 00000 n 0000006359 00000 n 0000006391 00000 n 0000007124 00000 n 0000008349 00000 n 0000008458 00000 n 0000010711 00000 n 0000014317 00000 n trailer << /Size 60 /Root 1 0 R /Info 2 0 R /ID [<7EF5545EED0F37B657D0B0708BD18BD0><7EF5545EED0F37B657D0B0708BD18BD0>] >> startxref 19250 %%EOF ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/color-names.png��������������������������������������������������0000644�0001750�0001750�00000257065�14557511160�016002� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR����B���–8Êd��� cHRM��z&��€„��ú���€è��u0��ê`��:˜��pœºQ<���bKGD�ÿ�ÿ�ÿ ½§“��� pHYs���–���–�qFþð��€�IDATxÚìý´kËUß ~Ëœk|üãbÛØŽM:’@ÓhÇ~ï%é$vštBœì݃´@ÓO;MÉ#‘ÒÄ^/Ú&¼¾È#ü†ŽÙr yØ€‡tMlðu¶ü#.þ±el_ÿ¸¾¾[öµ¯¯±ªÿ¨YRiiÕ%-IKÒ÷3Æç­µjU­5ç¬Y³fÕR�4Jæѳöý_xä;Ê.—ePJ•.ã/|á3öƒœPÆI%X‡Œ8×Zw¶Ý6B”RM�ƒ5M'•€2NöÊ8Ùw(ãdW¹�¿ýì*­ÀŸxüµxàóïyʶFˆËý¿þJ+ë§~ú·q5ú�eœTŠÇ_^^|úe¿x…}õ;·Ý$Bæø7÷ÿ›ÒÊzõO½÷¿âþm7‰9žÿüï-­¬››WáÿðÛn!S¾ìö×=úÝõ_yVYåýÔü=¼çñÿ´íf2¥qô¢GïÿO”&ãßüMÇxýë†ÛnÙsž´í B!„B!„B6‚„B!„B!„ B!„B!„r@0 H!„B!„BÈÁ€ !„²E”R ¥Ôµ|¡®ŒòºJ©K¥TmÛm#dU¨dß¡ŒBÙ B©J©üi$žß•ó[Û®û m®�8×ZsŽŸ(¥n”RÝœcí¼ßµÖ��—Ûnß.RT#eí¼Œn“~He ”ÒLiä\¿ #Ô0H: _Z?be眿’þÄ®WJÕœö ŠÔ­,|2.ò})ò}#m©å\O'„²4 ’µQtÆ“3š‡ gƉEk},ÿLzw2è¨o»î+p §µîeˆ wœg—n;ðlÎä\¢ RT#e탌n“\ýþb� ¯µV�Æ�ZÎñ ŽP?‚ŒCWÔq‘“SõG‚yÍ¢×k­'Zëc§M+O,¯¸0ù¾+m˜þ(ãdÓ”í¯'Üþ<)Êp>;ôÍJq,¹N…ï]…Éu]j&82«¿·Y-›Ì,Yõø*÷Μ»´þEfƯܙqÏõœßòNšÎŸšs¬æüÞð\Wsÿ9§.¿×=¿Ûëëy÷ÏÞ'p}-[G·î¾özÊŠ¶+å™hˆÌæÑЇк4åÏaz É<>9”c!ÊYN^yóÈwMÔ½¼vÉ}Zyú”XïÔz­[?.�tœ Êæç):r0úá¼ûw-GëòÛ‹6'd§“m¼¯ìlù®œæÝ'§Ü€9›S~!9Ìž_TRï—g\×ZŸ&p ӸϞ2îàWbìUÔg®P½ ëäXWüøk_Ý÷y\¸IReeq“þí‚ Ëñ9\e< ìŽ ïT@00+YhƱd ß»ŒIå™ -›f‚f<Õdµl2³dÕã«Ü;Ã*ú—+'0»'3ãG�š®¡ÉÒ®ËQÕg3øhÁ¼×n]Âd.4\*¥.œc'ríµœ×pí ²Z�®ä÷l¹M¹öF›Î½\ÙlÉ9¶l[FC~³×\Ù¿íàUêu -~Í©÷@~¯KY])«kW"MøÇM�'yÁ­u_k}Šx&O@½è õ‰È!–ñ œ9çÕadÆÊ‹½wP¿2rÚ‚‘³zB½ÜvÙ¿í½ORêºw¤^kÓ,‘_*¥.a‚'S}HÑ‘Ó.Ì»èÂÈ×€nf�cûÔ 8Ù–@T?RÞµ·ìLùyrj¯Ï+Û–[—sÛ˜ÙldîŸ×G„8q®q몛)äʸÈò¹ÈwÓñwzÎ9”ñù¶îB6(P<K¶”z—0n,<®ûÒ„Ép=páêÇ!Œ 7IY)=nÒ¿ éžoÅA®–1•öW^†o­³p1<cáÃDH93 5Ì„c$3aîñºSFÞïÜc ˜ ÌHk=qŒ ûoÝ\‡FÀkžÿ/Ü;¯]y‘è„ç·ð\œzÙÙP¸åçÔRÆDk= •òÌëmg<3‡Šdµtá8>U'ô¼2Ï:û–y_ˆèPÞñ9}H©[¬ìþ%>3ŸœXùÊýÆJ©$#DÎIß)9ª0-�GvÀ-¡k3z�ÆZë‘RêfPÔÓZ´Ö±SÓw­”º‚±_˜wt,×Ö`W��­uO)5ÐÙɽ36k(#(¥l€ã® †úJ©Œ¼Yû/_8udÚFΤÞ'Ž|ŽvØrsÛ…¸³Ôà Úz”ôþŠÔéà[ä•C!$ã19ËÞò8ckcúu #“}çxF>¼õ’k»¶lqFO26×[ï„{{…ô«ë‡í3[0Y5˜`è´.9ýè�¸ÐZÉûîÃôÛÓAŒ|ÈË@ØNGßµ¯l¯œÊ5£¼²r½YBnz`N»ìÿOå>.!ýH!Ôô1 ‚Öä}-+§‡ ãS|>oêùÙ1£s^îØ)6fÌŒßr}æuŒ3uË7xžËŒëlß6ñßlÆêYâõúóBʸ-pmÒ¸Í ÙÈ9տĶûdðËaYãQ â2¼Ö€ 4¼™q€‰RÊíÄ}`䜦RÊuŒ[RŽ:ggò{³—˜Ùºç÷Ì ;…yi±ºµ0›™<–k»0 t†ÙìzÞ½³íª{±^|Ï%Óæ©”Rcyf 眾ŸÀtwDÑVyæ)øf<í ©ºXkÝ—YÑZeß Ïë3ƒr"2f;Ãàûrʰ™%ÖyÌ3Z¾ãV–ÇRîÝÌ`ÏW·XÙ!ýKÁ''#�Ùt Î�9E–vMŽ*NÀ@ÉÌàÊ}wc˜¬ wö9«îùö}œÀì6Ì,¢RjN&´ÖC¥”U¶ƒÀìût3ƒÎeéB#SÇs{”Ù€É*ruÅvØÓr¥MVVXt¢òÚU„¼å©v�h—¿Õ`ú‘6ÌLeÑûl3‹~ˆÊ!ÒdÈÈ™ó»µõ½Þ«_r¿:€–3»ìÚÃX½Ü‡äf¡Þ¡{'ÔËRº~8;ƒ^;¹°L@ðPôcìùwŒý�V{×19]UŽRúˆBÐy}@Æ?;ul d+~¾ý€ïY_ú8á=ÇÆŒ±ñjlÌ8BÀg^טѩ[hܘBáqèÇ$s!Ìx"z}ö>ô秤ŒÛ|ÇmNF¤ü–Rªïd¸ãÎ=6­)xWäøä°¬ñ¨=¯Ê2¼î€`tFÙµ”YIçš9fö‚u“ëÇ0Ñä1€^Æ@|÷vÚ•›y’øìrŸ‹£”¹³¡±L…UŸy"¡Ï"T~F³™%)ÇsgÖcu‹•0ã#INä™Î-•)Hååh¨Á¤ÊØPJÕÅNÚ=9:NÆ ±Ü CyA–ŒƒPCdÀï,ò Ýã™Î9;˜³A@ëD¯’¡‘‡Í�É2ò´³†Neöi)âô*A9,(ã¾g]ÃlÉT?cc½ú…Ù»îaþ½OëÕ‡ 6aäØçƒäÕÛ{oçß¡c«Ò¼ºÝ¿ú‘Fª^…T9b—$úÞk Xæ¹�«é€OÆëßÌù-;a•ò,QÆ7ž š0fŒùÌk3ÚºÉo±,ÚËŽëòü®U>°E¾Ø¸mŽÄLí‘kaþ¦dDïb6v%ŒGŠÊð&öôÎHff×NPÄ݃fnV嚢uúRÛ©æe¦,È<IZ3Ÿð\R‰Íø¯ó™—ñEÅ]p`Rž—Íà¸Á,XX4³dàÞ'Cìxhf=V·XÙ«ûr ­霯°&² rTuì„ÄDdÓÝ'ĩܥä©ûƒô1Ë‚³Ù¶y×ö YÙž%'Î ¯ c«cûëÙà^Wîm;zWÎGrß¡´±¾¤3í«Ã&°ÓÊü>ÔZwìyN#ùyna¹Œ©C#&‡«È¸e(²s ³¼Õµ³^ýBf·å¸ˆJ©WÆaîÃL8%ËCèÞ‘z•B@?ì²ûß•uêG©vz––ÓL€‘‹ì^M…ûˆ,Yý*C|2ŽÙŠ7ó·âÉC”ñ¹lP˜Œ»•ä5q\¶ëcÆË”—7‘°J žþ|ú˜rl–€é>¥y«Br¶-ýKai(i<:÷|ªÄº3cÄf×61+éE2´†bØSÖ‡ÏÕ?’y²Ês™#0ºÌŒÏÜ7ã™ÄŽÍhn;³$åx.‰u[ªìD‚r⤇ŸK§Rˆ“£ªcSÿµüYj ³”Ì>D`mÙ/Æ~ Äv¨Mç·Ì Ð. ¶ûš ”Rí|aQ2G|Œ1ÛhÞ]ì줜5eòÌéÌmpƶë\ÏÄÃnÃ`Ïw7“·ÉB»Üº'p&íéü=<Ýû´´ÖwdðxáœÓ†Ñãsç7›QYXw Ù&(‡Ã#gÊ|ä£Lm® öÝ(³çí‹sõK8•òo¤ì1d)a¨^2Ë?Ál Dz²|%¦Þ{ÇŽm@?Î`t÷³ ¨»/¨#¨i·ÝäßÊyS)ÕŸ¾3ç™õ´Ög!ýÀl%ﻕ-?åÊ)fKÇbrÔ“ú]Hý²ïÕ×GÔ1¿ª£)uÊÊ ›¹ØÆÌOvû§~¤² ã›dýÌ‘[6e<Î&³AweÌ(÷ fÑæPx\'[³Ô$ÛÝÞg©ì(úóÓç°ÊŠœB™öËÈÙ.dcGYu<*eTZ†·gÖήuʶåÿ¶#nËòÉá*³’KÎè³Ù¿$î‘&¹Í<9s2O’Œ`Âs±¸³¡ã”úmâ™Ë=&2x]&оK3š±çUZf‰RÊ/ŽôâBÇ}¤ÔmÙ²£„äD;Øt&×:̇%ŠìS¸KrTi´Öw"Çϱڠ#õ=-ØÐLÄê%²|8ž·ˆ=¶Ì>N¹÷ߥRê4Ì»è‹×¶:ƒþä=ˆ»}CàxLÆÏ=×aqIËy朘~M¤Œ³œcÞzÙ †6_dz¿5`dm”¢·‘{‡Ž­U?¬îJß0ÉÊyHGQ?\À¼¯x朲…!ýˆÚþPÙ!9…yGÑT¨~‘>b —ã#�wǽ:J@Æí–2”ñbœ(¥ìŠ›Ò²AÇeU3KŒ{,3®³ËÜOv ˜ôç-eŒ)CØ1íHä²  ©Í‚Sål›úçeY.i< T\†×½dx€Ùç™›03Y'˜ÍÀ3Ãp#³ã-Ì2Oìf¬rÌ~a ”jKÚ¨†yQm¥”–ÙAK&½T¸²u’{§ÔÍ–±úpïS˜4Y àó_C«ËùZîm¯d®Ï}.B@WŽMg�幨rRnv)ÂÒϼÀ»?“ú¹5­œg–ýÄ÷NÍhÆž—8v6ƒCÃÈÍ฽/‘'û¬.1›¿‘g;>pŽ_H&E3±n¿*[êÓòäÄ~ĤŽYöÖ5œ%@1YÚ59"ùˆ­lÛÌ%—‘Ui×Ê[JÐÓZ—¼';‹Ít;Çv‚~h­ÇKÈ9õ£Zì…œ®e¼Tl6¨†ñ#§Ù ‘±WhÌÄÇe¶ŒÜåŸyÝcFÀ3n,@áqÓ†ky¦wiô>Ž ×I˜2(+±q›¼¯¡S~VŽRälAÿe¸ ý‹± Ãò\rå°Œñ¨=—a@ÿö³¨´âñ×âÏ¿çïúü‡¿eÛ#ÛEÒc»p¾’9-3šJ)}ÿ¯ÿƒÒÚõS?ýÛ¸}àïyï#”ñ(*' åÜ̸RJ?þòï(­¼—ýâ~ôÕï<_b¬ìv5`ƒ1Œ#¹—AF™ýcÿæþSZ™¯þ©WãþWÜ¿u_'H¿„| @~nÀ ö¶Ý»ˆ•ñç?ÿ{K+óææUøÃ?ü@åeœrz(¥š_vûë^ñÝõ_yVYeþÔü=¼çñÿTyß–õ×3ˆ‹Üo§üy¥T³qô¢WÜÿŸ(MÆ¿ù›Žñú× )ã%Qö˜3á~;!ÃÛÞCì1’Z[d¯:Èrƒr´'HŠÿÌr©Jî»AHUÉ,«µKÅFUvJÉáA9%d7XÖ__Á£?OJe cÎ;!÷�“ÕW¿ÿ…m»M¤BqèÖ9àÿ©ŸþíÒÊz÷{YW5–2ÿC ½ì¯V/DxÛûÝvs¦lbì¯þ©W—VÖßýÁm7gcˆM<H»¸k|êSo,­¬/|á“ÛnN!(§ûÏ'?ÿ‘Û¿úð¿*­¼G?ÿþm7éàØd ~ýù}è¡Û?ðÏÊ‹ÿüÁûvîTÊð" ³/Ì•É0óùtB¶†¤ë– eœTÊ8Ùgì&Îk(š2N*eœì;”q²ïPÆÉ®¢´ÖÛ®!„B!„B!dC¬û+ÄB!„B!„ Á€ !„B!„B!‚„B!„B!„ B!„B!„r@0 H!„B!„BÈ¡�4×PîXk=Þvã�¥eœì5”q²Ï(¥j�k(š2N*eœì;”q²ïPÆÉ®r À yÏSZã?z÷ª§¼À·l»q„ƒæW^a㇀{ŸÊ8©ƒÿöë¾²´Âúè úè£ç�:Ûn!0öà/úÚÒ üÔ‡Æcz˜2NªBÀ�¨—Xä‡|–2NªBã)_ôÔ_ýЧýÙ{Ê*ðýÿ>>ó_£Œ“ªÐxÆÓŸþ«/þsÒd|ô¶w`ò‰OPÆÉZ¹�ƒ/ùîÒ ì<þñÚÏ?¸ív2Çàß•WVçG×¾iÛ-"dž‹:+­¬ÿåg^ƒŸ~åol»I„ÌñM?ñ²ÒÊzË}¿€·ÿÜ/o»I„døÖËz9�&•êð¼§|Åcßû•?ñ¬²Êû±÷||ì-Ûn!S¾úO}ÕcƒW¿ª4?þ/Áð7Þ°íf‘=‡{B!„B!„r@0 H!„B!„BÈÁ€ !„B!„B!‚@)ÕPJ]§~)T)ÕUJ]Ê׌I¢¨œ%”G9$„²·°ßÜ,e?o)“ÏœBñ°Ñ€ Rj ÖñIîUêu©”:)p~WÚÑ*áÞu��çZë¡üÖPJ])¥´RêF)Õu¯ÑZw�L�\nûÙ‘ÕPJÕ½„äpýYFÎ(‡„RŸ­.êköž[^¿ékÈ;ÖÀjdŽåöì7ýøž·<ÏK÷yºÁ=ú*„BÈòl4 ¨µ>–Vm–®ÐgØÄ¹¨—pï �=­u0"‡¨§µV�Ž�4sœ39å $ÙZë‰ÖúØÑFàÜUô§œQIa¶Ù¶šŸ|]Žm=·¹~Ó"ög� /ýã@KŽEûNö›^rŸ7L o$Ïó.ŒïM_… ³Ž ÞÈý裑BPF—c#A¥T])Õ”Ù¿¼ã59ÞÌ{ yÇå…7åX#{mì¸[/�C˜�Š\ŸS·BÂ'3Ê 0Zê0ƒˆ!�h­Ç�:�òfÇ{�Ú›x‡$Œ+ã"/­Œ<Ö–‘‘lÙKÖm9£’JÊÖ‘ã'ÙìfŽÛmÿ®åÙê_%×V§úN]²ÿ÷Ö-S§Ü %眆”QO¹w¨ü”gª›s­õ³j9÷È}nKúg…œuO¿i¹�ÐqWg�Îåß©}çFûÍDŸØ÷®³ïªÐÿWyÞ"«u­õ¹<Ï €>fòôUH.ªÄUiªÄ•aë¼wJ6õ²Ï%’1ÝÎúW™úßHæ$sŒ>ÚŽ°Š¨Èj¸Øñ÷‰rå4&‡ê�²þ×Á¹‚é„Èd@‰Aº†é¼[�®]g:püÆ)»–¿ÛrÌ–;)¯-dzî^é\Ÿunêrž=§MdZë‘ÖZ‰Sc©Á2çöÔw=*½ë82nÿ¶²p"Ç]n‹QIu’ƒú“Ha9£’,ÒIodÆÍƒ/{Äf‰t1”3s„¡ c£»02s › .#ì«„luНÑvνt®ÕíRŽ5\*¥.ÜÂ3õºÄ¬¯J¹w¨üè3‹Ô­áÔ©k¯àö¾çõÏbï+…~SÊ­C‚Q2ø¾„ Xô¾s ýfŠOë{_-¹öBÚÒtέËÿíñzÎñ¥Ÿ·<ÇsyÖM‘ç6Lp¾ ñR檴’W†­óÞÑlêžË‚&«“ HЄÉì=páLHÑGÛ!VÑØj¸"«å"ø²ú½r“Ã9ݽµÎÂÅ!ë8ÖZä¡^gN»p&µ5m˜Wïq­õ™R 0ŽØ©³Îå]­u't˜ 7TN´Ø¹¾aT)u#¤ QgÛÆ‚¨†(ó kpœ¾:‘ÍÐp¤µ‹18qŒ`dîÔÙ»Ï:Êg¡Bõ'…•åŒrx¸8à€†ØEdöxªaÖO\[(rleЖ3’LÔ:Øì‘cÏ)m˜¬‘Œó ädŽ(¥:ìžÌõ=] É7Ù_:�.´ÖGJ©Œ,1ï<z}•˜­Nô5ìÿO¥©uëË}Ïa‚<=ù¿°<²:©”º.pooù‰ÏÌ[7yŽ}¹¶)uœ(¥šÖ6øž[¢ó-cøúM;jÁL@Ô`‚gÓ{¹$ôé7Ÿ™ï}u”Rc¹v  'ÏóXÞÕHŽ·DÎF™ã«<oÀÈ– bÖ`ä,÷™ÑW!ŽÏ2Î9–뫸~Ìä°Œ?“S†×ÊüžT¾;éêÉpšúS®n9åá †žKÂ3õù`MùãÓ§Ä¶ÃØ›¥{úhKãÈ%+®ŒN…|õÔ²3çä˽÷†ž‰oœ’Ó˜¦ÊéNËèZ‚03’}+pâìe _@ˉªNgöbÇ…©aÓZŸKJkÃòØñîyY¡nÀ»ÞÁ@‹7ÒîD¥GyY1yÏ€l×pæÍz¦c·F#FP ²´œQžŒ­³™ÙM�PJ¬ŒKÌ:Ì¥ÔÐΘÉ5'˜Ùî1L`ñnG!7{DêÑ„ ÂßÍ8Ó#�*sº7sD2Pj›r^Hå{þâ‹”i« ÕMþßÎdïÚ>éÀ0ãŸôQŒPù¡zÅ®u9w‚€E5¹þY¢ï˜B(âØdM`úô¹g›Øwnºß ù´¡÷Õ—6žÉr®¡k+µÖC¥”Íþid'²ð¼¥<;©jƒ7vrÿ8s.}•Gô½‹ù HŸ¯bÇs YoÂèGC)u'#Ëv¢Å±§êƒì- “‰êŃåK¹v2fc»ú޹þù>”ë§õ‘ ¨%<—¾ ^;±“· ³ trõm(ÏŽ>Ú’8Y—CÌüòcäËa &›íHÞCÈW–-xå0rïuã'„ä4&‡©rºë2ºî€à‹|^ð¤‡ù;I<>‡³ `©ãKPÃ,º¿DPÐÎzæÕÕ*Õ¹Ý;%眘Ù\:7Û¥` ”ÂI·ŸÎÊ8"u`ÓŸ"õ[JÎ(‡ÄÉÒñîËp&PÑlë<BÙ#Ñl[¹'3GȲ¤ø*eØêB8ûåtœ•ƒÕJ-§ü‚×–Ýwò=øúÍ<;4Aæ}'ô­•ê7cïK‚ÜC©·/Ó¢3X¬¡xàÙ÷¼ëòœÜç¾0©J_…$®ªñù*ÑŒå²+ü«båËòü‘³ôp„E»8òùP¡,ô’VEWyȶ!¯¯´õ¤–†ÍºÓwîÊh(;Þë«'– ä«gæ¯Â²2:G +ævRF×½‡`&:l3Jì €iÔu‰êе†+z\8q}]˜YÉqã«0”:Â,)4�öM²kÎåÿV©Î•Ù 9/£¬…âN)Ÿ:Œ±ëÃÒé;Ybþ‹xm¤­ þ¤²¬œQIlfÉ fŽfÖ†2SRÈ˱KÈì~'03–íÌ~bÌ!K“à‹”b«åÚzkkp–²ä\ÛƒÑû\›¥’zïXù«Ômm$úŽ)e,ô›ÎG-ܲæúÀľ³jýfÊû²ÏôÄS÷žkä-Ÿá{Þ˜e¡¸Y‹m8.ú*DXÈÔÆ¢¯â«„2–§P9[£ä­ʳyyåÏé”Ö:/ÉdY*幤°Ìþ‰ye u§VˆLʵ§&™ìø€¶ï!&ÿÞ²R2óóî½ VºWI+ævRFך!(ë¬Ï0ÛDÔîm0PJudïƱº‘,’±üf‰Ÿ`¶1ò0s,xÜVûÿ6Ìòß3÷˜\k…º©”z�À‹åX³ìÙG¦Èúñ3y£Ìž?€ 2ºí˜¦€‹Tƒ³‰>ÙÌRý!™‚=Ç!¶c-ÿ?wfóꘟ©kеÖÇ ú“J!9£’"ÖÆ¯5KIeëä ðìàvÂÌ’À�˜[.címS)ÕŽù*1_³ýk ÷™úò“Í2ocæ`Ûk»¾ºÉŸfâ°P™õ?SJcöˆ1‚Þ{Kp%·|§-Þgæ»Vö‘cTkÊ3óŸ|>f®ÈóÏR}ËæúÍÌï—ÊìÇh}K·OöÛè7#>m'ö¾DVm 4w9°Í"\¡š Ï;£[6»hy—ôUˆC0S»€¯ò|+ʬÊ+!ËxSÏ%ïJ#²@M)Uw|«…ì)úh…©Á|Ø¥èòŒí×nœìøDù•£ŒÌüU(,£.«®˜Ûu]÷’áéºíÀñ Œp¶ÌqÇ$$¨Þã êƒÇ<,ådHpÆ:—vºÆqÀ‹lØLÖ€Dióå!û[æ}Ž´ÖcyG¹ò$†Ãû¾cú“JQ9‹ÕKÚI9<<¬SÙ…qj;Ø@&ÈïD)Õr2»îfŠ44€»ýªØ™ìïQ‡Ùø>Û'0sä€qí7æ÷^:sΉù*![ôÄßI¸6·n¡ò¥ì»öÿjñ¡{Cߘã{f±kcÏ¥¨æ^óSÊÈë7mÙÇbO&™½ô‚}ç¶úÍ”g{_Rß;±r°är©Àó¶Ë- ?o€¾Êчì)Á¨l¦v¾ÊPʶýGÚ|!u,Áp»Ï¦] ”ª ¶î#)« ãË,m <—(>,»¼ÿÔy&nb}´âtÔä eÌi?d39lÂþ&V–0ó×Còï-;FäÞeÈqÊý—‘Ѩ&ÊéNË躗 “ÄÙ9BzšiOk}DǦØ™t—±s¬2,!g1(‡‡E@W2]§™2h³™%fÍf–\È dÆ!½¬š&fYI©œÉýs¹Ï@îsãdŽÔ1ËнFfÉ$3G!>Bý¦3áW„½ë7e‰®Ý¦¡Yt¹°Ëž7°‡Ïœ,"Áa›Mª1ûðÁ@²–C¾Ê›å7ë›hwùºdX[?æ³ Ûç¼S˜‰h�7pRD?¼åÛ�ŒS·fÅQJ–hjç<-uŽ>—xÁSJµrî;-Óiÿ5€+˜@‘¢Vû1íÈ”ûllÀõÆ•¥˜¯+;їϽ·ôn™VVìêŒàñäŽBr“Ã9Ý]{†àºP³ý¢ ”Bv6!v¼jqTv5uO9Çl雿ʗ§×F™1åð°e@%f­zÿÜìçxÞ $3G2~QÝ."aØoF©Ád–Lƒ«P¶-ÞÓgNrHX•¶”¯"Kæ³ÙÆç™sB«¢÷•qj'ç÷”ìÞãÈñ•Wåù`’‰Õ‹\wšY6lgvïh­ïDŽ{³ã²ÀC«Rä0”™¿Òª´ÄgãË2÷ÊiÂJ½Jfý—ÍÎa ›MÅ/qœ•É,²Ë)G»l©*’ª_æ×»zUŸ,"¤Dz˜ùEì£H)È ìf9/ýmBö”e}°ì}4Rˆ5Œbì…Œîl@0–}UÅì,²¿HgGG˜5ÃlB–ƒýYô¹ 9 6¼÷)û+RÊhqnÀñ'ï+­Àñ=Š{ÕS¶Ý.Bæ8þÎòÊ?Üûôm·ˆyξÿbõB„‡>z³íæ²Àk¾ëK+ëSzxÛÍ!$‡——XÖ‡·ÝBæøègßwï½ç»J+ïýÿþ¶›DÈþþ»ï=þ/)­¼ÑÛÞ±í&‘@Á¬{.›ýì2Ù?äË£eC'•2NöùXA©_®(ã¤PÆÉ¾C'ûeœì*Jk½í:B!„B!„B6Ä“¶]B!„B!„BÈæ`@B!„B!„‚AB!„B!„B !„B!„B9 $„B!„B!ä€PÏ}ú3òY·ŸþÌ2 ýì>ÿ‹×7ýåm7Ž�øÊ»_ú3O}ꓟRf™O|öó¿øî÷<üËÛn!�Pÿ²çüÌí/.WÆïúÃÿNk=ÜvÛQJÕŸûåOyÙ“Ÿò¤Reüƒïú eœT¥TxÎË€rí8ð!Ê8©J©úWá«^öT<µT;ÞN'•@)Uÿʯüª—=õ©åÊø;ÞA'ëåÖßþÄßÿ[êÏ•Vàï|ìøÄÀ/o»q„�À{Ç|û÷þƒ¿RZyoÿ/áfò€2N*Âûúø·ÿýÓ¿TZyï|χ�àý�è€*PøýŸýö¿ömÏ+­À<ø€2NªCxäÛò|à¿�”qRêŸÆ§Oÿ6þöSË*°>@'Õ¡þéOúôoþÍòdüU¯¢Œ“õs �þñ_ø[¥øÃoüxãûÜv»™ãþ_ßT^Yÿókðº7¼{ÛM"dŽòû륕õ¯ú×ñ¦·½wÛM"dŽ—|÷ J+ëU÷}¾å±m7‰ åù*ÀC�Ývƒ™òB¼ð‰.º¥KFaŒñ¶›EÈ”¼à…OüËYžŒ¿ím#¼ï}”q²^¸‡ !„B!„B!‚„B!„B!„ B!„B!„r@0 H¼(¥J©k¥T³À5]¥Ô¥Rª¶íúBHXÆ–FÊ£%{CÙú!eRG!„’Ì:ü‘Èý*á«T: ¨”ª)¥Ο“5Ýç²HÙ›ªWIm³ul¼®`�àÜýÔ¹RêD)u¥”ÒJ©¥T×½NkÝ0p¹í¶BVG:«Rªµ†²Ö–:ÇOòliÈÖÒÎV‹ï’Œoƒ~ˆc>¸vu¾!„2cþú¦êU4&Sr=CþH;ëgÈï/²+¾J¥‚Zë‰ÖúXk},?ˆ Ðç{ʪ—(ÇZ#ÐN‹Fž/�ô´Ö½œß‡Zkà.€†Rª¹ç™´¯R‰øa†ñ!Õ@} eoÊÆ—Qײm)D7º�Î=×ym-íluÉñ.Éø–ÈÕé‹�ú¢c�­ÌuôEHiÐ"ûÀ¡f8‘õúë–ebëåÉl n²àȤn @;{²Èü@®Q�Ž�43A¿ðUn­³p™Í­a&5�#­õ$ó0­ƒ<ÑZ Þý~Z¶Dy­àäÞu÷<çœ!<è–Ÿ—ݱbÝj0‚·üœºCÊ™>_Ùνm…¿U.ï­á `\ÎäyAž¡}¶Yz0ÝöQúÌ ¥Wôø*egν”óúK´ÁΈt2Ù  CÖ€™½è‰Q·ÇO` dîq­uG)u3ëqœRRm\›îس¹ßœÎ:kg= Ü/hÇ1³£ÐZ³ç;uôÚñ˜_£-Œþô¥-Y''ÅÖ„]7)þ‚œìwW¬C®:úå•ñŒŒÚrúXÔ G÷ü‰…ã)þ]B›CúqÓ'YÙ>˧/²J©ü³SÔïÎ)k%?HäËÍŽè-ãˬ؆Ôpñs`²G¬M TADæl–ÑYÑñ›§¼¥|ùœ²–ö×ÊΕc9ÖPså3Ó¾Œ wܺQÆ«‡¯ÏÏÄWüuù=æóN}!ëgøbA_%¡^Þ˜LìÞymCyþHSþäÙ['닌•Rˆÿ"ç섯²î Áy(×òwÀܲÒ…yØ—bT’r®å>-)Û _Kîyóà›Î½ÜsÚrN+R~[R>“f@êÖ–zXCÛvŽ[ÄÖ÷Êþ-‘êPÙ6Â|%e P<#¡ Gy]l'¡”j:HÏs^}ßgŒb³«ÌÖ”5£’@îŒödÖƒ”†µ©Y;~âünÏ»ÄÌîíYäžMÌìx‹vüFN­ýlȱK97hÇc6~¶T§'yÎ9fkÅÎn€˜œÅúô•ˆÈaPƵ_bÀˆê^‚?á;îúwöž×e1W?Ü„dž\¨k­§ý}‘ÕX!ã9¯¬•ü ŠdÑú2¹/a–ÖÏ©Ãè{ý  !6ë&8Õ‡ b­DÉ™W«øë1 e8Éq;¿ àÀE¦o£ŒWˆHŸoi!§_Nðy»0ï»)e¸~o,võÇ}õÊ”Ÿ“‰Ý» -×ÑZ÷µÖ§ÈÑ[­õHk­\ߦO¸×Ký*í«¬5CPf �ãÈʱÎé]9­`¬µ)¥Îa^`/qÆòfæÇ>ì.ŒœÉ½Ç0ÑÞ1€ž?¶c;Ë[î”êD¿­S}†8ÁºÉo¹ëÔåš¾o8²™7ò··lQÛΑÖuÁWggý}XCQÃlvÂGùQõ½#33‘7s­'kÊWvJ–k¤Î¾‘½™õ ¥1̳ãŽ�h­O쓨= ÝPkÝ;Þ½eìøH)uâÈïXêÒpf¸CvÜ{l¶4¥/Iµµcg×A‚œ>½„*xåPôË+ãJ©Ë@á$cÏcºkWîq­õ™Sc9v…b²èÓwòô\λTJéù¬ú" e<û|‘"YÞËúAú3Ð=÷-%3Ķ[k}.m™(¥ú˜¬ÒªŽ ØL¶:Œßbå8U–¦Ùú‘ ª¼lêÜì*9Ê€Ziµœsï¢N€‘ç#ǧêa¾ ŒW‹.Â}>`ä.¯_ŽÅ5¬,ŒåxÜJˆ]Ä|•F ^Á˜LìÞª>Z,öEô¸E¨¼¯²Ö€ ƒ;«{®Ì~ 1xc˜(¯»\*•óë�ZÎŒÄ\TffÈîN`:†$'A·ž:kìʨ[*Ó¥ ’‚+û&mx$×Xã]oTÝð¥­6šä9}3aU£ŽYFêó Ý‚y7c˜Ùµ»™™ ¾(¥†v¶-¡ìŒñ¨Ã¼“Ül£�¾‘�•ùyaÖCf­³ÑBŽÈy—J©Z™KìÈÆ ÙñTæìYÊb÷ìŒu‹v|ìÈàHαΌ׎'ØøµÙR»t&ë)ÿ®Ëï=ç¥ÚÚC²³k!$g%÷és$ú^Ǽ¿ªÏ‚îÅÚ•ØnW'–y¡ücçLä™L‚ôEŠ!ï°‹Ìv >_¤™¯Ñ‡‘à Œ/s'cc~{íqBÿq"¬cË8µe‹ 0[&ßTJMµ øü ±Rê\Í=i› RÛsèU‡:Ì`¼æü˜É`P–œ•1öš–RªŸñǽ¾¼“i7Ä,“éiþzÊ8 †7à fb(ïƒM˜�¤«+Cž^O¯)}þB¿œèkt� $7‚PO$ä«äÖ« JôÑ–Î�vìÇ(›i¾ ¾Ê¦‚SœTH»Ýîu`3O‰EÙ—ÜÃü w¥ÔP‚¡ÙoùÖ*\Ѻå<—ºÔ9+ÙÿÇʶ³b.EÓOûÈùÚÔ±•Yâ–$•g>.àíyN®wVŲdçÊNÈr‘4#²Ë³¤|\;^ðÒeíA39Ëî»ckçǘÉYÈŽÇlüÚl©Ô9oÿ €š<ߨ­=p;»|rV¸O/@Н’ñ>Œ?”ã¾AdžŒ¤øëj·­»O?òêj—=Ñ)HbƳÏY&Ë;ÏÊÍ2Õ;–.¬33Äʨ 4¹ºg¡TDÞŽ%8ÐÎfM%ÈRÆW·Ë_mÒŠKÈ—÷fWÙû;¿gYeµœeÙ §¼qfÖ÷¡ŒW‡Ô>?KНQÃ,PÕ€ °Õ}[ÛäÄ.B¾J©dî]†¯âóGRêb'¥ÎmF¹SÇðU6õ•ág�Ù…q ¬A™.Ktf棈‘B¢Ðñ¶‹=ÇÎ %!õÚòœ€HÔØ¨03ºv]ùªe÷1Ë:±3Â…öc‘{Lrö‚¨ÃdsºAùÊÞ*ò¼÷€é µ§ÍŠØ,ÙÌôZ²W%8#›õ½Ž`ÞwhЃí>;>G;^€dO4½¸÷HŽ !™v4dÇlüÚl©Öz¨µîØ?r¯‘üŒt[{hvvÝäÊYÁ>½‰¾†WÆadå FŽtêcíZg»òóôc‚Ù ‹+ëôEгñŒE6æ‹�á,2—e“½R_‘É 8AË¢™y™ÜuÌ–ØY?g„Ì ‘~ÐÞ07N”÷º0¹ïü;ëËÛìªkÉ*ðÙSt/…e2œò&>çÚF¯Kõù‰¾†Ýd"öÝ·o¦/vòUÊlÿܽËðU± r¾”:WJÕ ÿÎø*› N`f;´<œS`úð;0\kGbcP/ä¡j9Ö„y¨Ú™Ñ9•¿o䜗Lö!™³×Ã@®k;e»FîÆaÑ�n¤ŒNB½Rëf—®iÅ9—zµ²Rv+¥lQø3˜Ma5f©í•Ù6ÂfËê e¥Ž×ÊlDz £p§î…R×i{„š<‡“"®“%;ÔZßÑZßÁ¢“¾TÙ‰ôr¨Ù&­sË&2ÏÒË+kÛ³¤4ÆÈ±ãBf@¦a69Äæ„ìY¢-µƒWëœäÕ«Ååi–\;;¶N[ê"mµ1ßȽ£¶ö@íìZ‰È™·ß ÉqÁ'£@XÆ'0ò3€‘—ØÜ_"Ø®Ðq©¿õ.DFí}ÊÐ3y&×V/0ósè‹gšaéàn&Ÿâ‹�áÁ~²¯²B–y^»�ùú¯üé Øö)>?¨ŽÅ N³VÑÚ/òt¤6»ê"')«w è^Œ ?Ÿ‡ØÒššÿøÂ4Ã2^IB}~¬_Žùv;×gÉöŸ¹± !×WIñb2±{§Ä]b,ø#J©VN½líu˜}Ž5̘Ù*wÆWÙÔ’á¬ÀM‘YÂÐP¾⼟!.+çÜñ ~]®=Îù}ªWºM×”y&±²}åAÒÖÏ`üÔ™UîÀ ê0ûNdƒ¬vc}X{H eªSyfG‰íOÉ’]¶ì(òž'J©V6ûO;Jv&{ƒ¸©ÏvÖãÜ©K%g=Èêøì·s|Î=×Emi†aN#Äû‰ã¢ÇäøÚl©sÜW7¯­=`;»)òäÌÛï&ÈqŠ¿’Ã\§t¢Í×ío Y%øW)þ„ïxÐJ%àkL`–ÿåúôE Ó‡ì×-þD6ãyé;1_åÄñ¼Yæ!²õù±™!YÊÜ–ÿ'ÉhÀ²ûÄ5,×Ï¡´ÃäȸՑ‘ìÙÐŒº�jb›†b‹St¨ Ý úóìÆS'kÌ,(ã"¡ÏO‘Õ¯q'vqÈ/öù*)õJ<'tïhÜ%¡üDt©ç9?%´¾ÊÆ÷$»ƒ†žc>'® ì2{1ÍvÂ,½úFŒŠÝGÁΈۥ,M¥TGÒ‹m–¬»?Í@)õ €¯ö•­Í—1íò[ûQ‚"ñLî7Òó_´33—ξ+§{èìsb—ÿQÁY²»ˆž@fÛ—Ød»„liµy¶ö ììºÙa9³v×%ïc#•fI_#vœ:â ›ñì~étà‹<�àÅRTSü3tˆùANpÂf™ÛàÇ©s»ŸaS|™¡ ížYmÌ2§õ–rºr?{Ÿ9_$?(óÌì¾j#ÌV9Ѫ’%uéü_ìnÉ®fðÉRG箸ûÛ}y8ÙURîN†RÈ_è^þ| Î_¹¯­³Ý[ñR²— Çì¶+”ñj±}~•YÅ_”[i_e­A1¬65šeBªGÑhõ¡¥ŠKGí¬Ý1:K—’Åá);iF%áþy3"{3ëAvšfû„ìtÿQ¦šÝ�»*gç0vû³AAÆÁ\Ç~³k£ì>‚:²H,ã¹ /â^óƒ‚þÌ߈e ¯+3Ä}fÌT­>ò®b~kL–r—›'f/݉ef-¥{yí+’áä\wªÌÇ#Æ9Ç(ãÕaoúü*³I9®Š¯²î Á>fiÅ•h0!d‘5d0™õ »‹8·G0N(û²vUÎ2ËjíP#Ê)3UÉ>°¬?O¯>ìóɺXk@ÑjBvfh*Â~„l‚]–3±µ´·„¬ý ²b†Ó!Á>Ÿ”Í-�øÊû–ZèWÔ¾ô³Ûn!.Ï|Á÷•ZÞŸ¬?‡2N*Eý¯ÿÓmWµrv´³1;B)×W!¤J¼oy–*ô1Bv‹««·<ëömÊ8Ù-”ÖzõR!„B!„B!;Á“¶]B!„B!„BÈæ`@B!„B!„‚AB!„B!„B !„B!„B9 $„B!„B!ä€`@B!„B!„B=ýž§¼ñi·žr»ÜRñò>>ù±m7Ž�¸óÌ{ßüä[_tO©…*õò>rócÛn!�pç™Ïxó=÷Ü*UÆ?öñO\h­{Ûn!J©ÆSjøñ/º¥ÊøãeœT¥T¸÷Çrí8pC'•@)Õ¨¡öãOÆ“K•ñ‡ñ0eœT¥T㙵gþø=O¾§TäáG(ãd­Üúôç?ûç鯿¬´û×ÿ oùػ߽í†b™|òS/üL·´òú¿þ›xËyeœT†É'?ýâW¿üK+ïU¿ú&üô¿ÿõú¶ÛEˆPûì/~ékË+ð÷^ ¼õ§@'U¡<öbà'J,ò>�7”qRjÏÅs¿ú>ÜwoYvÐÁÃx˜2NªBí9Ï}ÎWÿð}?\šŒÿ@çðÈÃPÆÉZ¹�Í~]izÛ¶ÛDÈÍÿþëK+kø[”qR=þÊŸÿºÒÊzݛޱíæ²ÀW|CyeïßvkÉãE%–õŒm7†9o¢YZy5Ô¶Ý$Bæ¸÷Þ{?ÿ—›¹´òžY{æ¶›D�î!H!„B!„BÈÁ€ !„B!„B!‚„B!„B!„ n�¥TC)u­”JÚ8C)ÕUJ]*¥¸9Ù{ŠêGByÔBÙ ´ã„²}ʶŠ÷£­&•ò¿k ÊC(¥ZÛl¤¼¨“mÔ])U0�p®µæ?QJÝ(¥¦ŸÁÕZw�L�\nó¹‘j³)ý’û\û lìx¤ì\ýƒ~¥”ÒYýÈ\Oý!„¬„Rª&¶Ôþ)ä/:!?Glù@lùµRª‘9~’gãiÇ !¤[ÜøÒ]±Ã×¾þ¶zûT%®’XWëO5V/-ùž±˜K®p̹怠<¤€•>—-µJ¤w¼­º¸�ÐÓZ÷rÚUÐpžsÿ39§òJO¶C‰2êE ù €c�}£—|<ý½Èï À€fÖ@SHÖ1k¸/3ƒ‡ŽÖz¢µ>ÖZËOs`÷„\?Gtm� /¶|  å÷Úp€vœìÌ’%1JÏÆÈõ©Å†¶=uêh¸ àÀ…VÜsh«+À&Æ}%ÖÕúS›´_>_Ä«snmêF8¨i­³A…ÄÏd Õa„¾ ¡”‚=Ç-Ï9g®lçú!2AÁ”ëóê—­cB›ŽRdiÃQF0Æ8KFøz •$UŽ22”•S÷ØDk=ʹÏT><³ ú«[öçöþ ù3‘뇶nNsxvyúaë:”öŽ•RCßqΣþT�é40ƒþJ>kgÖ°ãËÔÆÌ‘è¤×Zw”R03ƒ>;Oö€vl©õO¬ï�_€ñµb}„½f,ç4`ì[Í)˵͓{ èŠøAçòs.`tÎÚ…³Ìñ˜ hÇ+‡Rj ÿìdû|¥Ô%L_Ð/é^ÁþEdÛÍÌè•uï‚õ\ècD7Ú0“¦>ÏÑOö/% >ì3;:±Mî¸2èoûì°c3—²¥¡ñlJ½Ûï³ÅMùã»¶�I]GJ©ŒÜºöš¶ºb«¬:^Íø5#d|“œó’±ô'χJòI"¾HH8æÄæ‚-˜q cïf„`�óëÒùËñŒàÔåú¦\3–ÿŸÀ¼Ä©áWJ;†Ô½¾ùë^?É«›CF0¬"%¥¾¹F]:®­õ]ßl‘Öºog‹8èd£Då0#ã5˜™‡#­µ5–—˜£¥ÔЙm°3ã-¥Tß|ú«›=nu£#³§rn3ƒßvê�ç7ßñrõCê¦2?[=…<êOEAKëÍTõ.H$5S»Vô¸ÖúÌ.á¨j@””‚×NÃØÑ6€¡ø'6Pð�_‹€¯!³Ê])»‰ùLk×ê;ÇJ©;roÿéŠøA>rí¸ëÐK0:h'QÐŽW­õ±Øä¼ÌÂ+r"÷ ö/"ÇÀ´Ÿ°z²iòú˜KùíTú‘ =Ÿúoì_JÅm°�&b«íø/äo‡ìpoE[êÏÊõ¡þ%ŸOÝÐ÷,•l ]½ÂȪ{muµ(WAB‘ñ&fc½SyîJ9g0Ád«CnÐ e‡|¨3¤ÙtoÌ%¤s6Ùˆ­Rê æEÛÝ%€SÇI¼„t˜Ö€{ƒ™a©k­Oå¼¶”w˜¦ÖÂ#�öúF nYÜ`c 6€˜ÇœS!T'²E9òÊ¡üûÌÎZ‹<º³o=�c­õH)uàZ)ÕYëÂèuXFXt¸sõ+V7ç¸mË©ù—{‹ákgg\bÇ éÇq˜Û˜Ÿu¡þlˆ"3w©3–˜Ÿ e^gÕ Ô•LmÎŒ `§Å–ž826vü Ðù]˜ ±8Ô'yí‹mnÊy¥TSþŽõ/ÞãKúAY|vÜÚˆfÁŽK¥”­KŽ‚u"R²§ä¼Ðj†PæGÒŠœìjçÿ)uóö/vïÒîÄ{Ìõ1öyh­Ï¸TJõá,™Ø¿”GÀ…ÖúHìeFžÜe‚1;d‡—¶¥‘ñl¬^©$ùÔ9dõÙ®ú±ÐVWÂq™\�Âý}HÆ{¬k‰\ŽÜ$.±ƒöÿ#±©×Ncúãó¡R'x–•ÿ9u̹±€ óïì౞1Œ¶ãKejÈ´Öç²çF£€Í­›C¦/j˜- ³š”±Ññ¦ü».¿÷r‘Rg\ÉZÈ•CÌ2èZÎÞs3rm;3ë`gUN`fblÙy†1&ëêÈ: f•9’#;;NýÙ8©3w©3–Ù™ÁÐÌxlV=…¥3µ93NBv0¬]–2‚‘[WFCvº8æ2]n(Áù&ýKìxbÝRÙñcÇL�t%XRĆÛçO–'š=²Ó¡Ì!eENÞj„aJÝœkòV…ˆÝ;eGŒ…>FžÙ¹ Æ{ò\lpr_ö/å3öüÛýÍgǽvx¶4Ö¿¤²ÌJì5nRÔß¶m!ëe•¸ŠïÚ¨Œ‹ßa÷˜´Án{üfyýHÎHKªþÄ|¨VýfÅÁŽ97¶‡ ‡i†ˆó@ó ìBäuÔj¶ñn™f ³MVûƒ(}äuf„üô׿ ñ ÌŒÑN סâ‘×e÷±Y|ƒÌy¥mȺ&YŸ~غZ'ýÜβ ÔŸ R`æ.6céËb f^Éù«,^%S›3ã$ÅN3Ö®ÇH—…>€Rj(×ûd./“ðô/ ÇË äçd±ýY’ hÇK$%{*×N+³§X(ó#uEŽýÿiFRê6 ¬Âð’poo»‘nû}}ŒÕ ; ÌÚö/$Áއìpé¶T͸#Ö¿¤ô©ó�OM)Uwl¬+g´Õ»Eá¸JöZÄe¼3¹Qüld3Kí½SË^Ň–—Cs®õ+Ã1ä¡ÙÙA7M3´ü¤‹ù”û'ÈÑ…qÊ|C„žÂ,wIÎHðp¢2_ÑZµÖû²\@þïÖ½…íì…BŠ“+‡"v?’‘È’M«fÅÎTÛYKÆ!·{1µ—p’t$çÞkŧR—fNú¹RÊîƒAýÙc¥TS²KO?s—2ë8p–>Z›ngÆo0d–ýU²X¦vÆ iˆŽÕbÇ}Ïi/l˜ŒüŸÈ95,ÎÒ‡p³mR—ÈÄú—„þge~ÎDÚãÞ«“AjçהUßÇ›=±Ó ™(aiVjݲ¿É`­.¸•HèŸRÉ~•µŽÙÒ½c­õ‘<³K9ÎþeóÄì¸×—lK³ãÙ”þ%JȧŽ0Í Ë.—¤­Þ- ÆU²×¦Êxb¯2¾J³,:;Žk({jùç˜kÎt:V+”¶“m*¥:Ò©Û@›–ËÎõâW{0z0‚âFn'0%Ö˜žæÝ_þoÓ;ÏbuÃ,½ßg»LâFöÀIÝËã fÆi¤ó¿ëÖ£¥µ¾cÿ £ç‰÷!ÛÅ+‡òï.Œì�Æ©;Œy»’k­1H–Ô™%÷¸;ƒÓ¯XÝìŒh³ Î@)õ �þ¯ö$ÑϾ3{yg&&{¼� ú!úf74¾tf÷'˜_†DýÙ«ÌÜyg3¯æe‰{X6S›3ã‚È”›ñÔ›8”Á|ÔNËo ÌöiHÙ)vz‚ÙÇ£ *=Y*ØÆÌinŠ=t}oÿ;^ ‰áósÎ`lø5fÞ$nÿÚñMÊàÈ •=i“LÉ+ÊÈüÊëcêÌwç7wéû—ò�Ó O+³Cˆ=—¾×Ž#`‡å§2léÂxV–VÆú—Tò|êæ?Ò†ñ¹ìþ–Y’nûÀN^ †¶zû¬W)pmÈŸ°KäC¶I8ƒ‘ow?ÙÈw¬ì\ª ¹¾HH8æ4¬5 ˜ò¡í|!,pNþ¨ë0'€½âG²F¸ð‹–„uŠO³AÁ¼z8ÙtïRyBr8‘¥3ÏñsdKÊíäüžú!PÝF�îx®{i N},~•©0yú!NoRÙÔŸ1‚ì#q"RgîäÛë:âL´íÿ‘>3îΪ‘£ûOTæ+RÿiìÞ%Ž®Œ#Ç]vzfðÐI±9 v:ïKuQ;m'c´ÖÊù­cG ÷õ/ÞãúØóËõs¬'z=ɳǾ:ÐŽo–ˆ>ƒìo&K §™˰dÔ‰RÊôj ì½#íNÒOc÷Òm:}¥íCSúö/ ¸6óþÁ™sN®=µ›;<.ÖúƳ1;_àäùÔ=D>H#Kéë!¢­Þ>«ÄU \ëõ'2äCñ ì«äúPŸÏñê�Çœ†­.>DAŽžîßÓZí²`’ÊúƒúS>væÎ¦ýO‘³6Ì€ñBf™›˜ež³YÀ™µlÁ ¾F0Žû•ü>Àlfü¹MæcËÍÂÉõ¹ƒPiÃ�³¥ËÉÇ÷afl›â2vŽí!;î ¦‹@;^.Ì–§6a2"N0ˆüvz cC/äwûñ¨©—å¶³¾@glxfY®peë$×§Ôm ³ÒAÃLÙ̬ºÜK˵öÞƒÄ{{Û]ðùÎõ1™gv%ýF™lûìÀþeÛì…–÷©WÈ@¥­>�ÄÖÚ- š©[›lš5Œ)cì…üoû£"Kãì¹¥<³j•¡ˆ pYÀîPe9¬rݲ”iH©?åš¹[uÖ1ef<aÖ1Zÿ¢™Ú)Ç÷efl•sÌ–Õº›º÷t5¾Ÿ íxuIÌž Ùé  N°¡¡Õ®ýÏ­[ Ü”ìÞн‹fÅxï‘“™ÕÐeȆžû—²7v(×'Ü‹¶ú0¨a¶ïeeÇ“�åv6 ã˜ØL•½xd'©²V¹n„lÙ­ì/4öªh'Õ'³¬Ö.‹1�@ÈnáëcV̼bÿ²h‡ #“G0“Sî·�`øÐÛK+pò‡ŸÞHÅwqƆláo½µ´²&}júï*Ëa•ëFÊç7ÞôöÒÊúÄ'7cÇ7MÙÎ=¢Íò¾ûË+ë³æ‰,Qžž·”XÖ§V/‚‚Y²aÃc÷ “¿GgRÊwefГUyì±Çîyýðõ¥•÷‰É'¶Ý¤)Wî/·ž{û™oýž7þÛ;«5ãIJ½sÛ #Äò'^ø¼¿ç_þÄí2ˤŒ“*ñå/|îƒß÷?õJ•qÐ)&ÕaòÌ?ý{A'ûÊøc?L'ûÊä³øì‡¾ßs³zQsPÆIU˜|ûPû{Ú”q²S(­õê¥B!„B!„Bv~e˜B!„B!„‚AB!„B!„B !„B!„B9 $„B!„B!ä€`@B!„B!„‚AB!„B!„Bˆ')¥tÙ^øìçüä¶Fˆe-2þBE'•a2®”ên»]„�€RªI'û eœì;”q²ïPÆÉ®r �ôk~³´;?s×¾õ-ÏÜvÃqѺ¼²:൯Å3·Ý&B\ôø?”VVç_ÿ<Îÿí/m»I„ÌñÏK´ãÃð¦óm·ˆ,% 9Ž ·Ý B¦<÷YæÑ¿ûWîYe•÷¿ýÆwáƒ}˶›EÈ”ý¹Æ£¼éþÒdüø¿Ãû_¿íf‘=‡K† !„B!„B9 $„B!„B!ä€`@B!„B!„‚AB!„B!„B+ŽRª¡”ºVJ5 \ÓUJ]*¥jÛ®?Ù–‘ÃHy”QB¡þB!„BÊf­A¥TM)5pþœν Ï9¿+e¶Öý¶U7¥TÀ�À¹ÖzèüÞÍ<×;PÔZw�L�\®ûÙÕéHýYs}rØPJ])¥´RêF)ÕÍ\ç•SÊ(Y†2õ ˆ.Ú”Üæ\ý“c'Eu þB!„BÖÔZO´ÖÇZëcù©8}\°ì€€zè¼ì@hIÖR·.�ô´Ö½Ìï ˜Áá±ógn ¨µ>“ö¯=`J–'¤#õg,È¡d äwà@3˜Ê)e”,Áí±‚vÚ{Ï’ú˜¹ý€è`ÀyÎ5ì#H¥`–+I¡l9‘2)+„$°ý‹ÜºIv†}Ö­/VJÕåÁagÞsäï†Rªå>ù­™ùÍ–[`7ó®É»>T·”ksköÞ—ý6�4dк,=�íµ¼8`N6­<Ìýß9¯–÷{Iu¨åÉ—#›Í¼º&–í“Ã:Œn @k=ÐP4‹Š2Zqm¥+ß̱ Ž„®uʰrÜCNpnU(ÚdŽåö1žgSH÷#ý@@ž~3ê_›\‘°D²Ì’e~íê?³\Ë%&ÃUX‘‘“Kw5BÆ~SVH”mÊxHÿª {Rïj9ÞήFpÚv#6ü$çus ȳ½vT[–ñ¥ï½ +vVÐXM·õ€ €Ì€äBþ}-�WrìJJ³ÀCËùíÚql¹u9·  -/òÛ€kùÛ^ßH¨›{mÞ½]êr®=/•&½¦Q×hÔZ÷Ô9ó²Vš0ï÷æ]7aÞuWþoõ×0rÓ‚‘•U³G‘Sv[ŒŽ}ß'0ÆËÊ}Cêu)õLmß‚j­GZk%@K ÆpÍ]’SÊèNbï¬Ì7\*¥.œc-Ìt¤†E ]kiËŸ;Z‚øú{Ì×?Åú˜2t?WÿD—N"Fì#J¢Ä¬/jý™¦Û$/˼ £›}É2c^ǘåZ"1®ÈŠߪ˜K�#‘“»Ò†äÕÒ>ÊÊS†Œ/k§CúWÝ«DoưÜhÂèå)€‹ŒCÝ\â[ž�8†™ž�Û•¥Uî½#+v–ÑYMwk…§`4yQU¡ àHk=–‡qb…M®9ÿ¿’;tÊÍæj­;J)�¨k­Oå\;༪›sm#ïÞžvk­‹drÔ ÂdwÔ`Ñg2¸Ë#T/²ZëžRj  %ïw$òr¬µ¶Á±K�Ó÷#ÇÛ�ÎJ¨Â%€S+ßJ)\99=qŒóØ‘Û~bù19„Ü·&mÊ:ò©rJ­(‰ö®`¬µ)¥Îa_= wDG@î¹:¢”ò^ëÔÁÞwSÅ¥u@œª‘¯]¡þ)ÖÇ8u[E÷}ú×M(ƒ}Äd²òf÷âØxk­<±ò+ƒ#ëäÚwÙ°ç8Çm¦éܽc×çÜ{Z¯l]¶eënσçxnù‰ÏÓf¹g]�è8Îõ²ýaFzK^pød8õü€•.'VþµÖç€t*¥úÈI H€²r�ÄìYàº\.Ç‚vÚSFî}wIÿ„¦üÉóZ0cô ÌøÇ®:(jÏ©› 8︬ÃÄ<’ã ®œd2±‹ú“Ôûº:©µfïåñG²¿Ûk†ÈSôsKú±°šN)Õø?©÷ÇôcëÁ\£ž÷òF‘ã1¦B¥µ>—lŠF¢ÇîÝ€1–½"Êêà‹”w`ÐÖéŸ`¶|,ØFR>bÜ쬘 HÛwÓ„y-'ºŸ—IW1PõŒCb†e,u°™F —‡Ø>vd”™9)"§”Ñê²wc˜ì8wfεÝ}HKRý‡Ng»ÖKI:°jâ«[Yº_ϔۖrìåL–_¦¯™€}Da;ç­¥”êÛÙY¡3+?†q:ïf&~¬ãw¢”ʵÖhÀ<ÿ&Œ 4”Rwœc6ÓÔ.ýK�=v½]ÆÒÇL.ŽäÚùÓ‡‘‰–\*õt3<†NŽã@ù),d¹ºƒ àFv³µ» ˜ •Àþ¥RªVÄÁ?`¬ XJ™¬N‘£Ò嘠ÎENz›ŠÅ½S)+$jÏ"øl8·Ó©:°SúLWôs–:6a‚Bî=†0Á޹²©›¥Q‡ñåjÎ¿Ä ÝŒœÔ3 ,A_CÎ éH»Šfh0[as†™oò±\´º€œc ú¹ ýc#�*ó³o5WG6¡»ì(¥†0/yé¬*›Æì�gÙTY»†Y u¿`P°œ5ãÒ†®”k#'h#ïq'ËÓƒ1H5̺'ÎñIÎï«`û®È�±rŒb™@¹rhqŒì¹Á—ß“ä”2ºû8ûjtœlë¹L>™ÕÊûžÎ¤¥\a:PôYØ>¦ ÝÏÓ¿ò{5�55ûØûˆbØvyÆ‹Ro6)üY²ÖYÀÈß‘Íòp‚·¡Õ Áë%P’›…êd÷Ú²NsôËfxŒë]]G–«•EØñe±2˵|†¾U1>åh]ÙÐÀÌÚpž §¬ nÏBW:Hy«®ØEý ‘í#mÖš u³$$Žp,Á£¶'c-DhEMÌW:©wꊵu­ØÙ–~ÌQåÕt»´ÑcÀ¼äe.Ö8uaŒ—U>QJ‹°waŒuYƒ£¡d¼à#Ùe›(¥Z9û©4!B!ÂÕB~i þŒR.=˜=.'îl‰¼Ç!Ì;ëˆqmËÿ‹ò9dÖcˆYæ•54®±9¿5±˜M»‡W=Îdö¢³tÚêWŠœRFwŸœ”x'S6‹•ÁÌlpêµ¹lBYècÊÐý<ý“º»Ë š�šŽCd÷2eQŒ8AT3¶J–,`|»×Ï228w}IY¨˜IWÛ¾éò£ue¹:L·Ö,Ö.fòÈ,×õ°Êª˜\Ö)'bÏì ÖÊ¥ ¤X;JY!¯=K`•Õ ©:°Sú·Ä5ÙûR7+B⊋ÏWYZG¶b­ô;[Ö·•^M·Ö€ tä×ÎOMéȇ™=¡Ü¯ÿÚeO6¨2Áld€e³±¦_Õ‘×å'[©“¡w3ˆÊ.3˜`¶‘ü΀ÀW7{ß½1[Ò`ŸÝ(óF¢¾©kÀÏ`:¶‘í,d�|`´ Õ˶K„¾–Ó^²l”çð)ŒÁ½'e,¿uæýõGʹTJiùÿ¹žÿЀMͶ2·Ì³ r(õ¶Ë.ÙË Lð#*§”ÑÝÀµƒ>[+vÏ~ÌÃfo dæÐÚr»lxè8£ÄkC,¥‰íŠõO@¸ñê~ôÏónZZë;ì#–f‚tÇvŽ™®IÎ\`5C^6°Zj f£k@– )¥êzöu»UË÷e¹f™>®„Ø %®ŠY—œ�æ3¶o:ˆ¥¬ !{æe™Õ «®Øýó"“R5y¾V§¦LÔÍÊ‘²¢Æ²ðJXѳ±Õ:N}§íƆõ#S—ʯ¦[k@P*®"çx3%dð5ÑæË,ö·df0åÁØØÀ)C_G±D*®Kv [xÐ%ƒe;°;u‚‚=˜ùsg•œ=4Ü[Í·7ÆFÎrŽÅt$¦?²<û"OuÛ+§”ÑÝ!ÅJw9gàÎ2×&”[XÛ•rŽ· é~öåö¡ú±XŠ>ÌÌ÷H‚ªm˜ÌË?`¥LW‡Ðj†Šf¡zêÕP?h(>Vc™òuÌf¹ÚC¸ÇÉf«2Ëu=¬¼*&+Gë’Áî%Õt2U²Yà”bñÚ³Elø*+vMÿbØàü©³Bà nP7+B⊚«ú9›X­dôS–+oK?vf5Ý“ÖYx ØŒ—±slï‘ÁæQÎs€ö§˜÷´ÖÉË“Éò(¥êJ©¶Í0Òé_ïÝ)Br˜pmžœRFI™}v—3ØŒëƒbYýc‘Ž@Âd«jÌÝ—¦ 0¼PJ]Ã8q¥T[žsǹv€Y¦ë›å7{¾v–­¸ô�tåÜiæ¦ô/¡ëíàë&[o¡“%£a¶µ€­·üÛn®ûœ(?…3i[#ó[])u­”º‘ß:ò.ÆrüRžý5Œì3ËuuÆ0«b4Œ=®VÈÈ@[þo3@br´9qdáB)u%²Ò°÷£¬ ^{’ñˆ w?’‘k§…Xпݶ¤òÜì}m¨í}­J®¥^ä¡n–RêđϦ¼‹KçxL–Naú] àNRTÌ׈éH½íj2AȘeÏÉ‘Ãìl|ú¹ýpVÓÕ1[Ét-÷OÒ‘M釠õk~³´;?s×¾õ-¯xÛõ»¿eåÊ™ Ë¥<H7¹KÿN(» “¶ �ýUË#ÕE)¥µ^½K§¼öµxÅÛÞ¦¿E Ãf³„{$ÕF)¥õø?”V^ç_ÿ<Îÿí/oÛ.:ú5„l꛸Œ˜ìÊì3øç%ÚñaxÓ9¶.㇂,yéÂÙ N~¯Ã¬™x®;ˆ,W+ã@‰Bn>®ºS2î“9FYÙa”RÍç>ëϼâïþÕŸ{VYeþo¿ñ]øàGß²S2^eBú¹®Êt<ÝTJ5_ôç¯xàM÷—&ãÇßøÍÞÿzÊxXV?ËÞêjºJTÄ.'À¦€ŽJz(}Ì"Ôܳ€,…¤Á8©”#BJDôë.ŒýŸ”ÝB6ƒ,•ÉÛRc¹.”åÊÒžá“9FY!d„ô/ru“ì=ËêGbÙ¾ÕtÑ[€Éê+‹Ñ{ßUz%ÅДláÀò°è”¨N£ŒäP–HèüëŸ/­¬Ñ;¯W/¤$ÖaÿÉn2,ÑŽ„V{ã”9ý¿peúþ»ùˆÊ΄Ø_YÙ=>ý™ÝþíwÜWZyŸüô‡¶Ý¤½c“™zû¨›=ô¡ÛïÿÒÊÿ`ÛM"ûª·žþ”ÛoúÙá¯Þ.·XõÀ¦@HŒZ üìÏâž’‹¥Œ“ÊPû’§?ð³¯|]Ù2¾wŽÙY&·kxàíåÛqÊ8©  ö�ð³”q²¯L¾ð_ÿðŽ…2Nö•ÉŸýì;öç~2NvŠr7W#„B!„B!„Tšªe˜B!„B!„R" B!„B!„r@0 H!„B!„BÈÁ€ !„B!„B!‚„B!„B!„ @s 厵ÖüD6©J)Ê8Ùk(ãdŸQJÕ�4ÖP4eœTÊ8Ùw(ãdß¡Œ“]å€Á‹þÔŸy´¬zäc·ŸþÔ§^øŽm7Žaðõÿû?YšŒø#Þ~ÚÓnSÆI•¼è뾺<;þ‘Gnøáß ³í†ã`þø×ÿñÒdü“þäíO~ô“”qR�÷~éÿ®4|òÞ{ÿëçÿQPÆI5hܺuûW¾ôÎW?^VŸ¼ûÞÏ}þÓ”qR·oßþ•?ý5_SšŒ¿ëÁïýô§>E'kå�<ð“?÷¬² ìôîÃkÿ󛟲í†â2øµUšŒÿ‹ù xÝëßN'•â_ù©òìø¿úIœÿÄ/l»I„Ìñÿ°4õ¿x5îÿ_îßv“™ãëÿÎ,MÆßñ+/Åä¡7n»I„LùÒ;_ýø·ÿAi2þïå%xßCoØv³™ò§¿æk¿ÿJ“ño>>Æë‡Ãm7‹ì9ÜCB!„B!„‚AB!„B!„B !„B!„B9 $„B!„B!ä€`@PPJ5”R×J©fâù]¥Ô¥|bœ²ƒÕû„òhvÊ!ëƒúEvÊ0!„}¤2AéO œßUJ ”R­î]0�p®µ:¿7äZœ€†=¦µî�˜�¸Üö³#»‹Rª&2fÿ$ëÀ&ïíœÓ(r µc©ºEôþJôþF)Õ͹6×6ì£](bk‹Úñªà“çø ea)h ·æ«ì*ËøX±ãÔ¯Ý!¦_!Ù¦”©GH†/]Á ðQ† !„TÊŒ‹œ,é@½„{_�èi­{ö™�èk­•ÔoÎYÑZŸÉ¹ëè“ÕÐZO´ÖÇZëcùic·"÷vΩÜLö uËÓûŒÞ÷Dï�4Ý@PÌ6ì›](hk Ùñ ± ‘‰.€óœc% ûJA;¼_E‚¥dUÂ>}°ý!¦_!Ù¦”Á×G\‰ŒÞ•6tÊ0!›¢ììÝ„û1»wø¾ªÇ­u.3a5Ì:úLÇ9qΩ˱!2ŽvÊõr^ Ž“—á©cÃq6,�:Nçæ)¢Óù÷@ŽDwås¢µ¼‡{}žü[Ëý0è${}ÝÈ);¹n±çâ” 9RÎôùÄê«[Â{ËÓ{[סÜw¬”ê@윓böÒ.¸ï5ÕŽç\kåÈèDþØg?w?Çy騂Ž$´)O,m�}9Í:/+ ‡F¢ŒçÚbçø‚þ8×Ô�4”R�mž§ì·�x¶œ’kGåÚX²”O|nËúXôÁJ$¥Ï•óúÝœkkîÿÅ6¯äç8÷ÏícRÏßdaŸ‹Öú\ž×D)ÕÇ,èGÞQ”Rùg'+ËJ©K»_¼ä¥êRÃ|ioƒ÷îb6¦ðM˜n¥nNlönÇ3Vh¨ÉÄC^ûZ0~g'[wÑý.Œï7pªµi­;J© i»Ïw$9,û¾ä]\`6Vè¹çøÞ`&ø¾Â¬;Cðæå]Ëßm�Ùe!-ùý™™³Ìõ—ÎõÙo]γ硉™s`Þù‘ˆò%L§¿0ãQgÔù`I‘ñǨԥ¥$¤œk¹OKÊ®;Ç[�®äØf:p’s}[–Â&ɪSvÆx/,ç Ô-¦» ùÍ>›+û·, Ö;V·ô�¤£W]¯A‚T©¶aOíB ËÙqët]À<÷œw–y——˜É30“£¶sŸK8ï;¦# äÊ‚”Ýpâq$Y‘˜Œm1f²›µ…¶ÜºœÛ†±y)vþÿ€•kc}È*v<…Â>}°µìs ¿Ð„‘ƒ ˜÷Òtʱ²²´Ÿãêc|l­y<mŠž¶ô(ûMdåÉFWB”•%»Lz,ý"¼¹Ù»2–°:™÷<¬½º àÀE¦oä õPø}ÅVo1{uÖš!(YÀt‚§À4ò{ £€ÖØXÅô]?™SJ]Áœ¼L§ã%f%íì·‹5-˜eb5ç,0óá«ÙcRdfÖw¬µ)¥ÎaœÑ^¢¬^˜ÊèI³™æ.€#ɦjÁ/Ž3ן:3ýÖi? ÝÔ™i9–z×`ꤺÅtW®éË,lSÚ0QJ5åoo½ë#OïóžCMÚd;®¢¶aŸìÂp;î<¯#gÀß0çëBŽÙÌÐé»täÈþÿÔ™¹·Ät$FHBºrȲpp$ȸ×Ë5#-´åz÷°DÄÎû쨎éÇÒv<ñÑ-ãcÑ+™XŸ+§åö»Zë3¥Ô@KìôHä䨹v?Ç2 øQ¾vm»èc,¯Á D‡˜F(ÃB‚cÌ2©'0¶+›míÍ ­<I]Ñ–—©šR·Ð*Š„¶{3tS²ÐS2h‹fï¦<—Ô{GÊ÷­ðhÊŸNY¿tcÓz˜· •\y×s+&ì3 Éhá,rlî}ÅVo1{EÖt˜N­õ¹¬ånpÜó²‚×€Qꢎ‡‹o¦ðØ1X!òu仺w)‡ŒafÛÝ™¹èL°œ_Ðrf4¦Ùj9åd—5`•®qµÆ0Æ ÌL‹M·ž(¥Ü!¥n@Xw-çVÏ´ÖÄzëV€Øž^vFj”³T"Õ6ì“]XÅŽw� ÄÁ üF2èfÊH^nR@c,È‚]¶�3 Ù”×åwWQÈ"^[,¤ØÂeË2vˆëGÉv<IJ>}°õ'+Á~Wúf›AcƒÙ®,,åçdXu¬°Àšûˆ:fAT;¡e™vÏYÊðæ°Ë[í²vÀL<º/ H&fý»;ÙÒÅü .-)¿.×»+Näý½Ü8… bëæd« 1Ë?Fz€ø³€É‰”kƒ"n½Oä>PJ­YrŸI¦íMH S)•š€|.‰÷á]ááL‚ä} ® èrï3„ ,-d©Ëñ^6¸¬µîKp­H`lEBïº!ÇÝgbŸÑaµñ»Õ‰û¾ïÈXk+ïKdMe~®a–X}W[|_;Á¦‚Sœ”ø²^D ³TßþŽƒÝsÉ+c‚çF™/ž (Ùs\Ïì•`g¾‰E¹3ß#¿¥”5ôgÙó2†/Õž`ÑΔ†ê–JVwbõŽÕ-…<½Ÿâtzçv !É6ì»]XÂŽ×`Rüq:D7VíÊCŸ,Œ?p«ÁŸ1rp²@¦„lq!ì²%GfRÊΓ¯˜~”iÇCÏ¥¨El½xe%â/ô`Œ5Ì﹊Ÿ“K‰c…uöuHVdæuaÆ%yu¡ ¯€ ­õ‘È_¨vÎÉÍ•ì°àÊ“ÄmöÿÙLÕXÝrWQh»7C7! =%ƒ¶pönâsYgönŒ¼±‡[TyH({ go=Ùºa™˜½‹YäÛz_S2«·¸¢ 6õ•á§sï–²:¾¡·S(š¸kÊEðû˜Ï¤j!pèû>·Áwsî¤=6D6‡‘s»\ÖR‡1Ä}ãÝw®·KWì Ö€¦ã>f™QvÏ÷Ã=)u[Š„zëVàÙÎé½E~³Þ¹RªnÀ¶aíÂ*v¼  -ûÍ 1›ïÁÌ>¶€i Ö»¿GVÊCŸ,h­‡ZëŽýù°ˆü|à²@ñÚâ‚e�F¦Z™ß —ÓuÚñL ùXôÁ6O¢¿Ðƒ H722¸´Ÿ“aå±Â&û˜Áw#“i³Þ)ÃÛaìùw6[tà>læÜÜÊ”¸H­f«(®%Ë)hN)»­”ºÁ,Yt%Rö™äÖ]&Éë*mÏ2î£èù¾ëò&޵Ööƒ*gðÛMó½ïZ|S7ØÀüÖ©ÄVlã}Aêá[½•ú®ì3$› N`"ØF¦3g"T³´µ±Í°¿_ÈÞRM£ùfçØ%fBy£Šoy ›1ng0ïZ”˜O·ƒfKÈá’+ãÒ¡w`6îÖ0Fl#ÃlÒr¬‰™ØY«+7rN ór8‘2rÿÌ6ù¾.×Þ`~Ï*ï½Å ?ƒÉ¼Õ0ÎÒXêÝŽÕ-¢»mù£ßtFo½õN¬[ z¯f{ÚÕa&4L‡ÛÊ\çµ {lÆXÂŽ vÙ+oÖá8¶×`q©`J-9~%¿%Éaòú€)"ÏÌœ0÷ºC”…½"Á§Êø‚-ŽÙBçúŒ j,ÊŒ¯ì˜âú±´/ðˆ—ñ±èƒ•HYÉíwiÄNèÀù}U?DzÐÇ$^»•>"ã‹\‰œ6œûQ†«…›-z.:ò'/{s“y±«(ޤ~Ó&Äp2t‡Zë;Zë;ˆ3E¯ÜUyÏÄwí:²w“îCKL>H«¦æ?.äfUrHÊ»VæãöÃJËøŠƒ¾/§möQ}g™4W”À¦– Ï9.ž%£Ç<,Õ¡JÚíL�À~R|àØ̬B©Ù~Ë*Ù/B2n §å; ²u†œtlqv'Ú|QÉþÖ€‘ã‘“Åtì){¹wYëPÝu×ûLBõN©[ ½>·ny¶a_í‚O¶ãÇ‘ãwÇFp–žd`9ºÞ+‡Ú· )í;DYØGõÞ+ã![ óþ£Î§Ï¦%”})7¨%Øñ”ç[ØÇ¢V. ~H´ßuÈÛ›ii?G®÷õ1“„k·ÖG8Ëìä”2\-äÚlÑŽ,‡lËÿÏ {`Ê~™…Wž¸,‘%ÛP=°{ë¥^_$C×ÍBË’^ß3qmÁ‰RÊNâ.½ÒÏ­[ä}$õ=RÆD)ÕÊÙë;Æty¿“m“9&J)›áëîŸí ÁwífÏa¶L¸àÊõ!ò®M|Ö[{_jöâ3Ù °ó¡«Nâ» ý~ðl*C°òH§~„LTÜ ªdéi­Ø‰“-b¿hç2vŽ‘>½O¼6Ï6Ð.ì(”²ë´Å{aç—ð±bÇ©_B²‰Ú2Øl.¹~ç õ!9¦ oŒf™uM˜Õ'ò[0[4eåIB–x(S5V·ÜUrß`–l,CשŸ/ =%ƒ6w…H ¼k[á¡”j弯if»³ZêZêÕÉì¯X¹ ïºÙÇAnœgnmŒ÷]”´â`-ï+aõ³±Wd­‚bøNäßÑ,“mS¤Sfº)¶.ãç0†ñ3µÕ¾¸}p”éŒÓ.¬FFŸêvëMAY K²N[¼7vžúµ³Ô0ÛײÒ~üº¡ W—LTvû{N(#:¶*&¶"”©ê!òêZ1“’Áž’œÛ¾„,òN Ì”º3x±¾ìÝL4tí©øšyAþJ®�Ixס÷{+­8H¬á÷•°¢ÙØ+²î%Ã}Ì–°ã#ûÈÖd<c�í2€Ùaz˜éå˜ìë´Å´ódÛÈ�îf E_žR)d éR_Ù4Ïñ^Õ“œªÌ*ï+R®ï]ò}E¸�Çß÷]¥8þð‡pïÓž`‰&dë¼äôK+ëýïÏxÆm�Õq1€tÒœã¿÷½¥•5~ÿ‡·ÒÊ2 ñ“/ùÉÒÊzôý–^¿uÊ/uã0xǯ¼´´²>õÈ;K+« ¾Ù}>>y÷½ÿþW^RZyyäÛn©›œ$ ßõàƒ÷~óq)Ûï�Þ>ÚOÓ[•÷E áÏ2/Ë0³Ÿ­‘ú¥®‚PÆIe Œ“}Æn½†¢)ã¤PÆÉ¾C'ûeœì*Jk½í:B!„B!„B6¿2L!„B!„BÈÁ€ !„B!„B!‚„B!„B!„ B!„B!„r@0 H!„B!„BÈ¡�t×P.?M*ƒRŠ2NöÊ8Ùg”Ru�­5M'•€2NöÊ8Ùw(ãdW¹ ýWJ,ð!�Ÿ¾�—T…vû»þni…Þù^|üæ1Ê8©íö÷|[i…Þñ †ox @'Õ  ý·ÛÏ)­ÀëÑø/ÃO”qR ê�Úâ/–ç«<ü;oÄ“”qR êϺý¥ßÝüãÿç§–Uào>ôZ|äñ‡�Ê8©õçÿ±ç÷·|ëKK“ñ_ê¿ï¿ Œ“5r �¾©Ä_àÝÛn!ºÿô;J+«ó¯~¯}Ã[·Ý$Bæè¾ì»K+«óƒ÷Ù€ !•á¥Ýç—VÖÏw>b‚„T†¯<.ÏWyìÃïµAB*Á³o?÷‰ïüšXZ°ä=“ß³AB*Á ^øÂ'~°ûC¥ÉøÛFoµABÖ÷$„B!„B!ä€`@B!„B!„‚AB!„B!„B !„BÈVPJ5”R×J©f‰ev•R—J©Ú¶ÛG!„RU$„BÙ3”R5¥ÔÀùsRäø†êX0�p®µfŽ5¤^Z† ù½©”ºÉÔ} ”ØkµÖ��—Ûxö„B!»�‚ èì7g¶É¾Qvu„r nî/Zë‰ÖúXk},?5Šß�zZëžû£Èã�@_k­�Œ´äðD®±u?PÐÏ´ïLÊj¡­$dyÖ‘ ¹õ‹,@9Ìg£Agwe§Sð`SŽÞ²uÏ›ýŽÍnsf›l1VkÉñè@C)u%™7J©®s>³?*DÌÖn3˨Ì~ ¨¯BvÕ²uw®ófgÉñW?÷]7•Ruic]lTKÞ³ý½)ÿ¯É¿™ëkîy)Çä>¶ÜFÎñì½ëÙrB÷-é¹LËÏ©w3¯ž‰å6�4Df²\�è8Â3�ç� µe®¹�0Ì…€vÙÏ„¤“©êµãU±³>[)zpéú2Ž¾ì­­ÜwB}ê:ýå5µ%ÉOJi×}¶;È©ÿqNä7êW„]“ÓM°ŒÊxu£Agze‡Uð@½âuÏ›ýŽÎnsf›l˜ñËžÓ,ä7à@Ó1²Ìþ¨1[»Í,£2û¢6¾"ÙUKÕÝ!7; ˜êi„öV7¥®W0YhW0Î[À Ì»mËo]9Þpåå�®åü€kq>ƒÇä· 9nïyíÕšrüFΛN=ꑲËx.nùmqŒkòÿüV—gÔ•º¥Î¼7aô7{Ϻ´Õj.ÔµÖãœs›ð¡µîËsªôì|UÁL©™ ™ª^;^!;볕—�FâËÜ•6t±Ç¶òˆô©ëô—×Ñ–T?)Ú®²} ž·à™´‘qAF·N\Hÿ@ýг”œ®£¨…äðÆ«·6qǹËsæj˜uð­õ(ç:`æ46rÎsË€Öz¸äµ#­õ$µî í¶³ßÇîïr× öÍn÷`‹H%£9ÆLF&0ï<»ÒTÎòf%œ²wŽïXHœs˜ï¼§rîÈ÷ŽŒ;×X'¢†ýHx>y:`ËJ{ÆJ©f!©úPG6Š+EdÁ'§Eä,¤±º…ìü²ýSB›£¶ÁgRŸË:ú'‡6ŒS3‚xö\7»�ŽÄµ�œdžM_f}›rÞD)ÕtÞÉ%€3 @ÙL&³Í{LkÝQJÁ}J©+¹j­{J©1€–}þrý±Ôá:pß2¸pêdw_èj­Ï”Rî3;íè'–me<‹õÝZ0é€K¥ÔYNÙmÌ­}4 }Î!ãó[RÐwò7 ÙÙ%ê—t}ö|§ŸÈÚù¥ë法ö™i­mæêD)Õ‡£«Îéûd++É2þ8Šù¹þ² ÊáŠþ@ÒxÖyÈ–á«g¬])Ï%ὄ|¦üñÙæ¤¿…éûz�Ú`98ýJ”£¥Æu)}@¦sÇSä4¢{¡xP’nGžÝ2rx0ãÕµűîb^�].1{Ø'J©¡¤ÂFKþîü¬ Œ Þqʨü+èÃØµb =jäÚ¦RêÈÎB'Ô=FîìwæùØÙíÓì1­u_fÇkË8Vd#tadl„™|LDŽ;ÀÔY9«»ƒ99ng �#»-¥T_\Þcò[HÜÙµ!Œ Ÿ�8ÆÌèY©Kýl–ʼnü©ÁèÍFwî”Ū2çÙûÌÒ)‹:²9Z˜·£Çd>9ÊY‚غx®÷Úùû§AÛ± )Ïemý“è݉Öú®o¦xuÓ}~¡úžÛö¸Û€À¼ƒ–3\ƒyßÞc™rÝw1wL&9mf„ ){)DFë§Û:µ€ ZGz$u+:` e­¸ýäDî; ÊóhÂÌÊÇØ©¬žuñ\_àD΃Rj,¶2æ/'²Lcm¥õ_l§Ò®2ê–k+幜K¼'ÏαÝç¾o¶²ªõÇ‹ú>ˆËá*þ@Êxv?)Ô®µú2ÁÓÏ[.,z3Éèéf¼Ÿ=ïPô+*ãX~\ìäß!9‹Ålìr]ŸùÛ)íŽQXi¼ºÖ€ 8kÔF"H×™Óz�Ærüf¹KOöˆ±/(wVÞF¯¦ÎCìZ9ß;kŸX÷¾Ùo—”ÙmÎlW—€ ­õ‘ÈZÆÈºiǹ˜eptafJlJñ³ÁKèÐ9ng׬1·KY�L— dzV <Ÿ¨ˆnµ‘?kÂìê0´RÊ.Ÿ¼›x­ONSä,¦ã¾ësí¼Ì4/Ý?%´9f¼v!ö\6Ð?¹öÉǾéfÀ@)5„q†}íÏ "X›Úü£èþ;t,…Œ=w—£¤Üw¦AyÇora´ƒ‡1нë>ò÷ÕÉ“Ë ¢MHpÔweöPëb©}Åë8¾€o¥PlÊñ ÷1Ž­´ÿ?UÎþM%Õ-d+­ ·å¼<Ø7[YURýñ¥üŸ¿lEäp e<»´Ÿj×ÇÂ>²m˜`qéô+*ãËŽëú� g 1›˜ùÛ)ºc9„ÔyoÇ«ëÞCðæ q6H7ÁâËÃãÌŒLÞìì¼0U Òb3úG€Ý}}buOÁ;ûíÌnÇ–×Б­6cÏ¿Cî>8vV€1ªŽ,‡ŽÙû…ô§3Ƚc<.²ì¬•„tÀÎ6ôâž©ú±ðÜÉZ˜>cY"e÷/K½6$§!9‹é€÷úˆ/³Š>3,.݈مÐsY[ÿ$q;{Û•{5”ÙlÙî—·ºY‡qLû0Žlê²W;‹<”g2’÷Ú€YZë=V°~=È»°u+±l_»lpÃ~TÆ:ÃVÖFR§!ŒÌÔu%<Rÿ‰Êì«#òÜÏ´£…Ey«#.÷y×*Kù19ÁŸNe•>f©º ÏVÖ1 äk­`äñ2sξÙÊ*òÇWõÖR·þ�à /í'EXûX¸àusÙYª_^Od•q]Šœ9M´Ã1{ÕvËËáÞW×½d8/’?÷õ<˜‡Ûqfž²|°†ÙF£>Á\fF?X÷D|³ß–àì6g¶÷‚X†…=§¸>÷X¢þÔ`6A$[)U/b½*^p–HœÛ=x20û£¢¨Ùý){<±óy„ô#åZ ßÎç —íŸ–ªWÄ.Ä®_Wÿ4B¾SSs긺9Ál) $S°'Ë<Ú˜§š2Ë~–q Oåœ9>Æl)«÷˜ã[½²rÙTJu2û“åÛBe×1ŸÍÑ”¶ µÖDZãNù—J)-ÿ?wú1L¿bŸÃ2Á›3˜ Õ(ã¿É}¯1[FT¨ß’@c i³ö‡@!@Í>N“â/‡Ž¦H¡Œºùle‹AUwI=°Ÿ¶rWYÚØD½ýq ŒuÔwcá\$TeÛÍ®¢~­Û8Ï.UÎò2;^³¿mYJ¥.{?^]w†`ÆÁ´Î®][n± wCÊ¢åPfI¬Óšú…ÈØÌz¬î©÷X˜ývˆÍnsf{ÇIȰ�Ì;¶_j´Ÿ=$KÑŸ.̼‘ñ}™[ÚŸ«ò›>~®”²{¦¸0û£Zœ8öµ c{S:¶Uí|H‚Dìü&ú'_½RìB왬¥ÒZµÖûGî5’ÿÛ÷½Wº)A°‰ÖZÙ?0Á§® FÎÝcògn†Xlì™sü®›U8vìü~&ÇìÿóÏaûŽsê­l°/vÜ)ß­cÇ96²ÏBêp„‚H]m𯑽/ÌwwµÖ§9Îö9<Á>éOZpö!$Éþ@Ý9ß~ Ãë/—˜©ºl3%k§Ë¨[À—·{p¹û¬¶1¯£{e+w™ýBñJð€ü¤„r×=1 °{–kR¿ÖÃ\àü¾”œ%ØáµùÛ™:–ÃC¯®5 (Fî &{Oc¶™é@)ÕvÖ…_ÉñŒ0 ”Ù@»-¿7å7m_¤RêÆ0´eéƒÝ¹QJµB×:ØÙû9·%õ‰Ö½Àc8ƒTlÎlï Ì–Ö5a6»=Á,Ó0rV9º³W0Ýïaˆ™¸r:Ô)Þnèª}˜Ê”¤nkÌtI‹î œß.$KÃêRù2: †þF_mæÉ5æ;(Ô‘3†ÙÓCü»iRF¾¬ €¨œ~9 é@¢œæÚùú§`»· ^»kצú'©Ç�³eIì nÚ½¿\ÆÎ±­!rf—k7‹,eÞ¤MGÈÉ~‘ åÄsÝ$ìëi­ œ#è=› 1¯Ã^9v<ÁVZú˜Äkû0ÙŽÀ•üí >»[™±ÃWb#HûÈ äÙìš­¬2©þ8PÐ�üþ²sÿ®âDdz«øI¡v­Û×ñzöÞyûá]Ë3íÙ–bõ+*ã%Œë|}@LÎbrйį³)ºB!9<¤ñª ¤Ä_àÝÀ+Òú[¶Ý¸ª i¢]˜}FÜÏh×€éž îùVà9³]J)­?øšÒÊëü«ŸÁkßðÖW¼íw®)ã‰øt rM®~È1êÈüóÐú‘«Õ :?xÎÿ¿?ç. ${Ê.è¦d' þƒþÚÒÚýóà—Î9—¶k03ÀuÌ‚R ˜ ÒVu@×+©Wg‚d&ãÇÿ¢<_eôsß›ë·ÓŽ—DÈVÊÀq’ãÏÓ™µ·ùßÜùšWÜ÷ü÷Ï*«ÌÎoþxëÇ~›2¾,ãk8×Öó²…«¦_J©æÑ‹þÜ+ÞðÀ›J“ñ¿qüøáý”ñ’XEeVJ—aÝ{L?5=Ìù=4³MÅ'{ƒO"ׄ 'u„ nNÛc÷Ô³KeFUpÞ´ùâÞL°¡’{Ïr„l¥O7÷ÍV²,ËøεÔ/R «Èa Ì—C7D‘~²”9¸¦ŽRÔ͹ºW®þeÍbBVƒ¶’åÙä$õ‹ø .r �¾¯äBŸ|vÛ #ÄE}Ù7•ZÞWÕ_@'•B=§ð~þ„ìGý—mWµ2ø—ë«R%ÞuóÎgýÕWþÙmWƒµqõ–ÿü¬§©'o»„BÁ¬k.›Ê~V™™/À•eœTÊ8Ùgd–R¿8'PÆI% Œ“}‡2NöÊ8ÙU”ÖzÛu „B!„B!„lˆ'm»„B!„B!„ÍÁ€ !„B!„B!‚„B!„B!„ B!„B!„r@0 H!„B!„BÈ¡ž¼ñiÀí’Ë}ùGµþ±m7Ž�¸S{曟|Ï­{J-Táå}øã?¶í¶�wî”/ãìÑ ­uoÛm#D)Õxjí©?~«dìcQÆI%PJ5žôÔÚ«/zr©2þ_?õ0eœT¥Tã©Où’ÿ¢'•kÇ?õú*¤(¥µZíÇŸ|Ï=%û㣌“µrëÓÀŸÿ%8ðqàÝÛn!–É'>ùâö÷þßK+oôößÅÇo>A'•a2ùä‹Ûÿc«´òFoû<üºßªo»]„µÏL>óâ¿öÿZi~à­Àc÷?F'U¡öGŸ™¼øÞoh—VàgÞÞ�Ê8© µ{¾è‹¿æE_ýÍO-«À·½ç×ð)<J'U¡vû)Oùšo}éKK“ñþ+_ ÐŽ“5s �º%ØðÚm·Š ÝøG¥•ÕùÅk_÷¦m7‰9ºÿò—VVçŸý0†¯û­m7‰9^òC/)­¬W}ÿ«ðàýn»I„ÌQûåyäŸûà_xt¼í&2å™ÏxÞë/üãÒ‚%øØïàãŸüà¶›EÈ”¾ð…Otè‡J“ñÑ[ߊñûÞ·íf‘=‡{B!„B!„r@0 H!„B!„BÈÁ€ !„B!„B!‚„J£”j(¥®•RÍ’Êë*¥.•Rµm·BöÚirèPñS¶~$ÜúCH" BŽt ”Š~ºV:Ü“5Õ£`�à\k=t~o(¥®”RZ)u£”êfŽ]ºÇ\‡@kÝ0p¹ÍgLÙ”R5±—öÏZìaUñÙi9Ög¢e0Øp~§Þެ66yí÷ ú"Uѽ<ˆÉ8u º„d|>ïÚ¹ý õr¼íúñ™c]Ñk·~ÔBÊã`‚Eg&8³@éHGHûÔý:?cx §µîÙD'ò»p é8—�Frì®´aÎÑÐZŸIYÑ€'!)0;äpÑZO´ÖÇZëcùií’Š±`§@ta� /öx ÀÚ\Úé-âÈjaû²ÊµKÜ+è‹TH÷òt &ãÔŠ‘ñ½ùt÷õÇ×GÔD¶Ûy‰_ß„ÑS�\¨?•…Ù »ÇN—•ŒdåÎ.pf¤ 2Ô”NmúïÌ95ù½™•ÝØõ‘këαZöÿîÝÌ+/¯Žy÷0„qØ =—”g  !ºèR‡qÒ†� µè�8]¯k­ÏåØ@ùƒ‰<NÙ=òfíC³ßE²`îÊ:Éf±ÊïœÝ®«ÚñÄ{Ôòì«sÜÚߺԡ•g×rÊÎ=¾f; ˜A`Çž8§Þ®œyŽOee‰kse8¯ìÌïQ—ó ËhöŸžÄt(vdt &ãÔòqdÏþ]óÈq- ^OõyºdÿŸ[·„q@¬ì þ”dçKÕ‡¦üz.o8•Àå¢ ԟꢖÌU•_ÎqÆlÖÄNW˜•Ì™@dv3 $ùº–¿Û�¦Ë¢„K¹j¸TJ]¸>tmS®¹€‘ݦs~=ñÞÌáÀ˜��€�IDAT:׆œ{)ç¦3¾têåêžÕ»À,ë£Ès‰ÑDÆé�­õHk­$h©˜ÈoçÒi4Õlæ±—SN@½¨sC*ˬ}hö»`l ïì7ŒNç\ÃÙíê°ª"å\Ë}ZRvÝ9Þp%Ç®0³¹'02Ûvîeÿ¶¼HÙ¡ãn»}v>F®¶6ù÷¥Rêf�7¦ÞŽœµaúþ…€f²Ò–ÁY-ñÚ Çä0(ãrN Ëù'Îu¶œK·þ1J`Ab2NX ]˜÷Ø…‘Ñ+�]•ÙRžw“q¤ù¼>9 Õ-ÖÿÄÊŽéÏJþø:ôâµîk­O‘ã¿IÀt’ñõ‡�šÔŸJS8TÅW~ŒÙ¬•[ë,Üu13 9çÕ03l#‰ôç•S8MÛ™™8Î+Ó]PJõ±hä{0×K¹9,´Ö¥`dé0³0†ë®œÖ0ÖZ”Rç0iO[±ëC×ö”Rc�-ѧ‘ÏcG‡b÷>qtc,uih­û¢;#{\)u£§63¯#¿w—|.1jð8.b?\G Ù`¤c7†"‘ãDpgÛs2á¦v<“‰ííäßö=ÛÌϼ> ù‰ é9NùC,¹”'Ó-´-rmn#´aäq„Y½Hÿ°Z;«Úñ„[\8“‰µ™m˜Œ9À¼ß#­õXœÙ“Œ<õ•R:yiÊß±²½Çv7|v>Ÿ¶:ß‚ ˆ×`©¶.´ÓDì”õFbó®3§]ÂdãØ=ð.a‚½„kc2’Ã>Â2�Ãe| GÆíÿOå>H©[âãõé@LÆ©åÒp¡µ>’w܇y¦n�"÷]§Èx¢ÏkÿŸ•3oÝ´ÖÇ¡þ'VvL�¬ê¯K?RÈútÌú–ƒÕŸOìüîõ©¾ú´L­õ0ë»gýò@½|þp(taå—RªYeÀ˜ÍúYw†`tÖ¯À̹oÆ&†/Ë(iv3 $‘i§%«î̾aŽÌŒZâõÁkŘ7dÉÀ ŒÓ<É”º÷Xä¿+×70ß»ºí >—‚³Î¬’ Ö1Ôk­¤ ¡4ò½Ùf]ÈÌžµß R¡Ìú�/E$CIœÏ ¹o ‹ý@hÖ>•º\oëP_†TfP¼°L†³Û•eU;¾€ÈA@KÉÒu™qm›[NÈΞ[û.{°ìÄ{«Ûù>–,Ì�²K;½N`örÓ%vîÄ|fÀåÖz0¶6x­à•árddÜù}U_"—‚u QÏ””qêÀÚ{þ{×)2¾¶ºe[AÆ}ú³TùëÒ®«˜²þD|â`ÖÄWOY5c©lÐÐÊ/9Θ͚Yk†`¬˜yHœÑŒš™(2»°73 d½8†ÈvZ˜}”ìÌÜ ñú§ø¥„k{0B F¦m9)÷aæð7Ÿa+å¹$^bõÓW^³}*ì’Ì:$‹'ó|òö«8‘s÷ÂIX3]˜ «MÉa¾SÏÍ,A<ûc¨”úC„3”ZrÍXŽwáÈPhÖ~ Ž3¾\|}LáôƒÝÞVµãn¶ö$çwÀÈÂ@)5„±Å>¹,;åÞ«â³Óy:1‘uÚéÍãfÖX‚xJ©šãŸÛYìZ ,ÃEä0úž—ð%bÏ%µn>òt &ãÔÍz×yA®­Vñ$)Pþºô#Šø‡5¥TÝ‘}ë²þx}ℬÿ¯\5–X·U²A§ä¬ü³Y+›ÜCpaÖ"a桬›ÜÍaQlva_ Y'NÛ…ÉÔíi´3ë½À§¯íAöšÊí”{äÚ¡œ[×–K®ð\¢ˆÞOòöƒßìd¹dHvaô´¡æ7’n#¿chÁ  ’ 'pž•Ìô€hfIßìu(C©3мçe¼DÐ.„ ,÷W(7›b»Ê Œ\¶­ƒ‹Ý®8«ÚñD¦†™s›ÕùK&€Ò‡qô“ìR¬ìÄ{¯„ÏN;›¼»÷²6—vzóôaì‘ýA óÛ$ØÁUWŽÛÙ(v­à•á’äpi_Â%«»eÔÍ£1§l˜È»N‘ñdŠôI2¾dÙÉåxfEž{®/ŸÀ4È— ²þ¤øÄ >u¢¯[5–ÂJûrgW~ÉoŒÙ¬™Mó^Ž;óp.:òÇÏÎбé#ßpúfæÒb÷pf¬‡ LZ¶†‘­S`Úv`–Ék#7„1æ¡ëS¯•×ÂWϯÃè‡íôL³_Ú0©ãJ©kÝH°Ã~õ[;çiµ¸Ñ~îs)€]bæn�n—wÖa–®j˜Ìá–èé€ I…¿‘öÍÝW“ò?ö@ɳÅî1wÆpRý3,cGk0 AltIÙ€nù§0Îò2Nv^cÑy÷ eHå}‘}ÐæXÊŽË„„–cMÌì¡Í"´öçFÎiaæçØûäϵr¾ˆ-Ad[î@ÊuV±²½ÇSì|" vÚù½.—ù­C;½y2Ï\ÃLRŒ1ÿ®OaÞ—p0è$^ë•a§l _c2¹ß‚n&è`lqKι’ß²íέ[æt &ãÔµ0ÀÌ?°Ý;‘ß‚ï:EÆ|Þœ¥Ô-ä/{ËNÔŸÜòõ§tý°(ó%òì3ö=Î kiwGk=<pýYÖ'NñÕÝUcmÿ~ƒ/æ’„³¤¹oW$ ŒÙ¬™µ.Ž!Ë€íÌCG–‘µåÿÇ0‚Õv––ž±‘{L”R­Ìo¦³ N´<ovaßfÈzæíL÷êˆuF¹×'^;-£èõb\UÎïLjrN蹤 ú{ø;•}&Æyuv®±KTë00Êîgd²c°I.0³Å#Ùì· ó¥·cù¿Í,9sfqËÊ4í¨‰ ÅaXyï(‡¡ô/§0rvTD.òúéSÜ�{Sž—un´þ`´IV±ã!›4¼,,]šhóå<û[FG 6Ü[vìx¢ ’g§{çÙbÚéÍã|ÌÅw|ã{º6A†Ç9ŒÉx'p,èÈ9#�w"íöêPâ³ÍóU‚2N(Wþ0°:sÎ ÉaL?‚ö2"g®|/ÔMÞu¨ÿ Ê0ÒÆ yåOןµè‡üÞCäÚ|DÅ]6l?TýYÊ'NôÕGÎoM\5ˆ¹DQ³}Ï´ù°e&Ñ£ÆlÖÎZ3g-¼3‰³’),ÌL¤Ì.ìéÌÙdf¯-F½Y`‡BÚu„‚ÙeÎ $KOk](èsèXdz ©¼,¤…Ì Ü$f(M`w{j“C³ö¡Ùo9Ç^c7M®ÃôEE—¶ø2¤líFÍ7ò<yv›Ìc÷Âq;Çv‚ØbÚéý`/dxU|:’ÿÈqê�Ù–õååÚqèØé×'N𩽾º»j¬ …³AC+¿�Æl6Áº?*ÍnJ˜ÝÎØ$ÖÃ73á]Øã™R"j¶?”RÁ™ì5\_ƒ™éY&}¿ÒÏ%K™:ÈTòåw蛽e–xûÄLÔ;‘ãÇc±ì‘l¿³”#áëcBõ;àÙíÊQ¶½*È9ŒÜ\c6PjÀ fÊþÊåZ¡>XöF†W…:@вîþgËýÛ›ôeöUB>qbÖÈgÎ]5V°~…³A3½³Y#[]2¼I$ýtè9–g4zÛ4šdgèc~“è]/F÷Æ0V­ã[õ¹²S„ú˜Èu>ý`´9¶f¯2ËjífÜ#:µdW  ²ëî蓲¬?œX6c6kàPîw™«ÜûÜŠFs¾þ·K+kò‰Ç¦ÿ^uö{Ûׯ‹ªÖkŸ¾î·J+Ë•q’³CÖ˃÷?XZYŸ™|fúï*Ø+yß|çÎgß]žGþGOlÖ#§ “ŸýÃOßó®”ç«<ñÙÝ÷UÖÝÿT¡;${ì±{†÷ß_Zy“I•#+~˜ º[ܹ£KòàÛn!.Çßü¥–÷‚çé'¶Ý&B\Ž¿éÛ¶]BÖÊ}ãm» „¬•‡²lœêððd|ï}¯¢¯Bö—ß×»î=þÆoÜv5)„ÒZo»„B!„B!„ ±Ö¯ B!„B!„Bª‚„B!„B!„ B!„B!„r@0 H!„B!„BÈÁ€ !„B!„B!‚„B!„B!„ORJé²ÿ<ûÖ­ŸÜvñ¬CÆ_ð‚çRÆIeX‡Œ+¥ºÛn!� ”jRÆÉ>C'ûeœì;”q²«Ü€|ÞóJ+ðM?Žwÿá>sÛ #Äå×~í¢´²þÃàêêwž¹í62Ç7–XÖû�üþ¶DH†oýÖòÊú½ßF£m·ˆy~dP^Y½ðnÊ8©õÚW<ö²¿òÏî-«¼yãâw?ö»Ûn!SþÔŸúÊÇî»ï‡K“ñNç0½}ÛÍ"{Î-�øºÛ·K+ðO<±í6²À7|Ã[ZY¯{ÝÛn!‹ü±ËúжCHõzyeÇÛn !‹4šå•õŒÚ¶[CÈOÿâ§þ¿ÿãÿ]iå}ÉSJ‹»R ÷Þ{ïç›Í¿\ZyµÚ3·Ý$r�pAB!„B!„B !„B!„B9 $„B!„B!ä€`@BY#J©†RêZ)UÊaJ©®RêR)ÅMÂ!¤â”ÝH™ì!;Ç:ìaä~´•$d”R5¥ÔÀùs8÷2t<çü®”Ùªr»ä|{^cÓuMhKiu‹=—¢Ïm)ùynMÆ7…Rª`�à\k=Ì9~¢”ºQJu3¿×Äfh9>}FZë€ €Ëm·²{T©Ï^¥ˆ][…>Ù×Ƞصñ]wÀê�ö„2EÇ”U!Á'ngýaù½¡”ºrí¥sŒ¶rE¬8ËDÑ ßZë‰ÖúXk},?…œëBŸµ6ü´¦8¹¥Î²lœó*'seÖ-ö\Š>·]¤äç™$ã;΀žÖº—= 6º à<纀±ÖZ8Ðv?­õ™”±·ÁT2³ŒHYT©Ï^¥ˆ][‘>Ù×\‰¿+mpÂÁ>@ÚÇ~àÀ`v )+D®=” ^ @;{ÈÞ@®³ö°éi+WäÖ¦n$/;œ³lTX)u  ¯µî—x¿†”Ù[±¬Bu+ëÞN½“™U¬Á(Ô LÄ»ãÞGkÝQJ]À8ÇÅîJÊFÞcÀîœ3†qÐ�úÎñ†ü>ÒZO2×Ô�4”R�€ÝÊ-Û)Çþ†¼ÙšÄ¶ùÚ5-;S÷i{œ6Œ´Ö§LÈqH­õ(¯lÏ,SnÝrʯ¹ÿ—:äÖ»,òêî<h­‡Ùz–]‡%êì}×™ç•}O…ß§û\rîíêGm‰²çžå22Zà™5�4œÁh–¶´c é\×P—Á.´Öc¥TÆæ»ýPf�¹RGևȗ;+Ý[ÆÏñùr¬#M9µòO¸,Ûg‡Ž¥ÚJ·Ë+?çzûëœò“ítö'È2Ê󑊔픿ÐØ÷ µ>LàR)ÕÐ’ã©}�À~`í×¥Œ•RùgÇõUêáíäx@ÍÊM¦þ-Ìú�w|Á>b‡)‹Žo<~¶½pü锲êò‰›ò'ojû•¡Ô{¬”ê�¸PJ A[¹2 Š�œÀk²”éÖE9™'…3»Jº·oVq�`¨µV¶sPJM\¯µ>³Ë(V ˆ’•iÁÕ:ŒqÊvÔ-5„1†“œëO`ä°¡”º+†×-÷D®…Rj¬µ'”ÝÝH½ê"·Ç‰†Ý–íÜãnÙ5˜Ùœ#©Û‰ü©I¦m“6Ù¶õz7”Rw¤C Ö;R·&f3P§rŸ®ÔáL«¾z¯Œ¯îò<Ú�†J©±Ô«-õ?ÃbǶ1bïÆQ´õ‰RjhgãyŸNu›g–Ã̽ódx‚b²2÷>—•ÑÂ&fŽUö™6œh­ïæÌôûúÈì2ˆ¾¹ßvÀxAZî2–e‘÷rì”?7ÙS�߬zFÿ:Zëc¹G Æf�ôˆ°JŸ]ÀVŽ1³ÁÇN`Ú¬‡˜ù,ÇXüeû>ý5föµ…yûœh±u·¾™-ç¦/µ;…Ü>@žé¹zÒîfÙâI}€”Å~`Í×EeñÕE³î¼ÙU˜ùÙcV÷lê@)5rd˜}ÄnSÚñ"`ìkþñMvìóÕƒc'x|Ý ^ŸXä­Ÿ·\Xl¹Êül}sÚÊXk@ЉB7`^XÆèäe¤DºLöGÊÌ]$»*TvJf×t ç™­ñf½DžoV‘³†;†}WyFNè°Nw &Hpì\3rþ#OC§ÜÐ Ö[¶p “Mbƒ/—rÍ8)Ç2sTp9í&¸ï´¥-¿u¤cjdÛæt ˜ÎãÈÎÜ;úí­w¬nZëžÜZ¢ë#·STJ]ûê]’HäÖ].÷ýŒg´Í``Ê»îÁ¤ë”Rç�®•R=­õ(ö>mf«Cv “áYñ½Ï¥dù3˜yØAm^=“ç8–Yùṡó(R'’¡@¶ujöÔDÈúH¨_hVýógÎuô€Õûl¤ÙʺÖúTŽ·åš»Rv bÇëC27˜èí¯ó‡{{qênÿêdoÅžI ¡> /å·1 ¦Ú ˜¢}�À~�€õHÕ ±q]n&꫊¶kÙì*«{ýéAd˜}ÄîSŠ=ÃÈÉ&ñ#;¾É;%Œ½z‰¶8DÈ&#:Þ† ŽÓV–Àº3ë˜utößÀüKEºcÑj›:š¹óÍF³BuS³õì¶=-¥TßÉŠqŸÁBÖK¾(:#áû‡;C˜÷žF‘ãK•-ÎE=ãðØ?Æ Ì’ˆ0]î’u¨ê0zaeÓÎæiÛ¹•ÝÌÒÚP½ƒu³e)¥.Ä9³ÖIz/EBÝÇR«ÿ lŸèó”:¶3™ny3ß ïS°ö¸—H‰é‡·ìÐû,QFc,8%vYLŸÕ”×å÷ž“UÖ…é?€pß±mÙuR²­c™B¡,ÙUÉõÜ®8ö€‘++ôˆeé>»€­œÚ!­õ¹2{5䞘Ì#@|á[ŸÛøúë÷^Šý¼> ŽÙä  |Ú@¦ øéæžÁ¡Y=’²Z!6®ó­ØÒWùVZÄ(œ]%2<ÉŒ‹‡˜Éûˆý£Y‚Ä fã›"c¾\_=ÑÇXiõ¤9¡´•+²Ö€ trÇbÚy³‘Hw,³$eæ.wÖ0% )’Ùe3·ì&•#„,uù‚%7ŠÎHø^Ò‡q”‡0ŽÆÒƒH1Òp:ÿPÙÓýqƒžêìÚŒ_—¼ÀM‹K<‹§S±zÇêféÁ8=5ÌfB˪wè¹…ênƒ€6(1ÍØ"Áç©æ÷´±¶và)Ëg#k0K.Äwm_ª~xeá÷¹®wmëž÷U3».ï9Xy¨¹±ùs}‚8{c]ÒröC%1Û:æox³dK¨¢oVÝê¥]jXp©”:ÓZ÷é/‡2úìd[©f pû¹#ùw&Ø2ÍLrÎñõyýuê½Wyf…Úƒ¯¨CìE¦îx#ÚÈïìfxW$Œ)/×宨ÂcÆÄ ÝËfWeÛ0µì#ö‘塨7k´È˜/dK’mq>{˜„ð?ײÿªmmåjìÒW†ç¢Õ™™»cà³FlnÖfƨ*;±>séÔÖùΜ3©ZrPà3È6°z£”C„; ~µq÷ˆ;Zry¨•»qp´l1ˆC¹ÆMÁN‘Õ>fÙMvæÓ]o³a›0Ô³ý&V"¡ÞÁº9ØeÓ%¹ë¬wbÝGR§!$k¬ÌýÌ–$ö<mË:àuä?ïCiç)L@è.­¡÷¹îwíÜ¢2_5ÓZµÖûGÚ6’ÿ[{}e¯³K¥±ø5ⶸ·ä¡èoØ,ÙÌze~•14@;¤£+® Ó_ À }v[yâØî.Œ];ÿokóÕ_+ƒY™õ ýu{'ãö_eô¾>�³ 37«¾ù@KJ�°�\‘çäûRÆuË®XÈÐÅrÁ½e²«ò&ܺ³Ø?¬ÝšÊôŠc>—˜-ö°‡Qä;1{®”ª;ÁwÚÊÙ¥€`Þ `ó\þtIÑv Ì.cÜ&ˆ;ûv¶ó$'£ÿ º¦µ>ÓZËLUî¬#áëG ’VJiȆ«òÿsÎ@Ž·ãN1˜Àñ�&«d ”:‘2ì5²÷C&[Êý,{@WîQüÌ-Û9~ $×�n {ÆÚ%2u3“¯1[BáÖíTþ¾‘sZýŒ´íWûä¾ÙÎ#·Þêf²<Ç'TïàsI‘‡PÝ¥ž Û^`­Äž§³ìJޤîy·mßû=°rp‰YåÆyç^•ò>±¼Œ¶‘ÎŒ~æÚs¹Ï�³`’Åêõ•ÔãØµåÒά¾“’]¶© ¿ádɵÖw´ÖwPÂ>9>À·­ˆë›Ð_ +÷Ù‘c– ŒÖ0vü4s¬‘éÏ´~ Ð_[Æy÷Nì“û0Á~ àJ~³Ï%¥Ý1ú€Ìû¸ÛßÈ<³` íc?0Ãý*´¥HTʸn•ºeË.z¯Ð¸0 vÖœ¾ XÌðc±C$Œ)#+ÓåÂÎïÞñG¢?b‹cäúÄJ©VN»ÚrÌn¿V‡™,Ò0¯¶~´•+²‘¯ ¯Is¶ðŽ¤È¶åÿîÒ䥔 ZzÖ0‡>ŒÀŽdÖ6€ffYôP²ílç‘N\k/훨ü/:])¥:Ú|ÁFÂrŠa$|͈,©È9Ǿc"7­µr~k@ö‘I‘U» ¢HÙVn½Ê–iWî}ãÖsì+à«wjÝ2 3׆ê|.‰ÏÍ[wÿ%­­“ð®mÄǹ纼ç<=7A†c÷½ÏµÉ¨SÎH)u&užî»æÏaœõ¬cc¿Xd3g’†›m=†ñ/bþFY²^|þ€Ôcº_üœí÷é/�+÷ÙÞcîäVöú;¾‹bý@ö9×{t‰}òÀÀ)±vñõÎÖ:L?7É\çí�öYd,f3 Îœ ¨ÔÉÕ”qݲز›2.ô­\ µ/4. a—¢Ÿ:ÏÄ <³Ø!RäQìÁÏï>Ÿ3êOgX*i!`{ð|°&aìE[¹"kÍ”,'›1Ò”hïeæo¤;!Z2sç›5ŒFÂCudˆYVŒ›Y’’õ’‚/³„‘ðýÁ~YÎeì«jÙ;‹d ´Å1j.¹D›l†½a‘±#ÌF—åuy×ô´ÖÉL$™P¶µ×߈dÉþÿ2”Rðùg03þ×N†©ëÑ_ ;˾ôס>À™œÍ»Î×�ìòX:*2®‹®ˆŒ“V®$P8»Êiÿ5Ll'gY5û¤L[¼¬O)“¶rÖýQ‘>VÈžŠE«c3–‘YÔ̒ãÈñÜ%Êg;Cåû¢èŒ„ïç0ï÷3ÃØ@þ×V«Tö.SÃl¯Å¢KÈfÙ.ÓsÉÎzeP%ø!Ÿâï•P7Ÿ?0ùx³ŒÈV²Û8}ï%Ø›þºlýb?°ÈªPq]JVVlÌXd劯ŒÂÙUrüT™øä¤ÙGJµÅ›”%ÚÊ8;»døPÐæ3ïyK$&ðohÛ+Ù!#k"3˜³KÕFeÊu–½ËˆCu3xf'Qa(ÄÌðùrl¸ŽþY'}Ì–•Ú§²¿&džP?¹Ž}YÚâýæ�¼ý‰'J+ðÓôGÛnÓÞQtðKE]äþûß\ZY“Éc ¿9ûþé%¾ +ïÌý`@òuÕUƒÙ²Ét‰ß~ñáËúܶ3e˜��Æ%ŠÀg?»íÖ,³ŒöœQ‰ß’úÔfæMÖÝŸîe} |ú?}Ïo}à·K+}lõBvfWU—Ç{ìžáðõ¥•7™|bÛMšB[¼¿ÜzÊ“žô¦ÿÏ#Ü.¹Ü¶Ý0B,µÚ½|Û·ýÓ{Ê,S)õ€óoû…ɹ}9$Hx³Äq‚Ì,›ìÃp³Ôf"×÷€i ÿäã"Û~†¤â|1ÀëQªŒƒ8R&¸}û¼êU”q²¯LðŒÚø¡—RÆÉ¾2yô‰›¿ï×ÿ eœì+“‡~äÁ—¾ô Œ“Bi­·]BvÙlx”컆ù$hx‰ù ޝìÿ3AÅ~¦ì~Á/ŠB!„B!„xa@,ÀÖúNÎïW�îÚt{¥TÀ…Öú®üûÒ½N¾ÖÐZŸ:¿�èj­ïn»­„B!„BÙž´í ²ã4,ì© µi­Ufïf›öæíÿ1†Y^ì–ÓP—ŒCB!„B!„•a@Õ¨!' ˜Ezm�vÀ€±RêB)U—LÀ6f_RÍ҈݃B!„B!$…[Û®�!{@=tP‚vŸAw/Àc�]˜‹�@èó‚ÜP–B!„B!¥À ABV£@öžì%x óa³ÌášÖúLk}¬µ>FN¶¡dŽ3K !„B!„B–æ–|Ü lÀ •a2®µ)¥&J©VöKÀJ©Ì2à3­u_¾$Ür¾F|¥”²_!n8p”¹O &èHˆÚq²ÏH–õ:¶M Œ“J@'ûeœì;”q²«(�¥fø+¾èöÏŽ¿ð™ïØvã�¥Té2þU_ùå?û®wÿÁwHù ˜%ÁDz7 $øwséÄ~YX)Õ… øa²Oíõr¼%ǵÖâa2àÜ ^²5$à=XCÑ”qR (ãdß¡Œ“}‡2Nv•[�ðžgÿÅÒ üáÇ߇7~þOÙvÃqÑŸ»*­¬Î÷߇×Þ<•qÉ<p©”:•/ aîþ:iÝQJÃ,ž›ù‘`a ’Tþy‰e ¼iÛ "$ÃüHye½æ5Àoüƶ[DÈßù¿>ZZY¿vßKðáw½aÛM"dÊ׿àëœ žUVy/ù¹—à ×”qR^ô¢=úÀ”&ãÇÇLJ«DH�î!HH h­û0Ë} ¥tk­'ž4ðžÖúˆÁ@B!„B!„” ¿2LHI”¼ã^„B!„BYÌ$„B!„B!ä€`@B!„B!„‚AB!{Rª¡”º–¯À•UfW)u©”ªm»}„¬ê!„BÈþÁ€ !„½F)U0�p®µ:¿w•RƒÌŸfæÚ®RêF‚!'î1­uÀÀå¶ÛHÊÑ…F eYkm»]+´aA”RMÑ‹¬þ rÚOý!„B© n€²gÖ9«NHÌj!ÂÌ—»{™ß0AŽcçÏ\À@À]�§�.$82Ek}&çîlÀ‡Ì£µ>–®¬ãô¨¯ZÖÉÓŸ‰üv,Ïëæyõí ÔB6LJÃ:üÚÈý( ¤T(ÃÕcg‚ò"OV/iãõÎÍLqŽ·ÅiÎþÎYõ@)UËdG쌌¦f®ÄtOʹö÷Øñ5¶Ï—v¢”ºRJiÑ1ê_J©ºdÕ¥3o‰üÛß›òÿšü»‘¹¾æž—rLîcËmä]›P¼·¢´�œj­'Z뀀vÎy¾ßÉáÊxÎ1WFžëŠè@ž­\8–S¶ï^y÷[›þh­G™ß.� 3ACê™#Ϩªó‘ªRoOoM|7ëç´r®;X?§è˜²Êï:s<wL™pì`eaŸ(k\·æ:. ŽÝ(ë±3A�ãmW`Ir3S¤si!Ç æ¬úî c'£då%f¬{jæŠW÷d°xà&3dRäøšñe…Ù«‚ѱ†Rjª‡Ô¿E¤W0ü+˜Nµ ónòïK�]9Þpeƒ"×r~ Àµ}¦¡còÛ…·÷¼.ÔhÂȹ÷¸8ÝL ¦ `¢µvå(åÍ¡µî¨söqwqd¼ ã¬fm¹•ï&€K¥Ô…s,ªBFž­,Û{×”RWžò›rÍ…\ßtîSÔkúcue.hHý!Y|þ@Uý¨˜T¡zçù:�cñsŽ�´ÝA2ýœbcʲ޵ÊÙ–¤ ËŒ)½Çäø¡ËÂÞPÒ¸nUQX†ërÇn”áÕ¹µ©¹ÂåÌ`Õ1Zëp6`œÈQæœ!–òÆrl ãX4²Ñfq@\'s¤µž8ÇkrOd²ˆìuV±jÙkÚlgÖs7åÏ0çX À‘Ük¤”²³çg™óz0H¥qå Ž¥Èq2š§™ãìõ>ÝËÔ©!u®ÃêQÊñPÛ6 {gÒ&h­'J©æmõo‘®<“±t¦'™gÛWfï°¦}vJ©¦óÎ.œÉÀßvÞö™zi­;J)Ày—8i ßvæaeÉGæÖ`*Óº`Ñi²²ì£H½HE{Ñp¬µ‰]ºÎœÖƒ`”Rç0µždÊõБa—ãŒ-ìÂØ8ë°Ž ²§µî)¥Æ�ZrÍHtäXÊÕkú}=ÏùúSABþ€§Oúê±>;ÕˆÔ9æAk=ÌÖ5§ÙߣãÌ}’}‘ì5Îs÷ŽCŠ”ïÜcÎבûÔm€^úíL0Ööm{ççä¼Ë2²òk¥Œ\9+P‡˜œÕ`(zÆ”¡cÀʾ’jï2禎ë’d´l{å“ÓÐØ2¼"kŠàØM¦‡�ZJ©¾8¾ ˜—؀餚€ˆRꎼX{¼.çØè®üî ÄD)5´ 1ÊõvfÒ < ¤Üºëd˹'RöFqJ©»„ß;³î ²)¯¾Yõ‹¼2$í·VD!ÉfÉÈY &#éHÞqPŽW•шþYZRNözŸîA~kcæpµ{¤÷ê_J»êž]f'çµ`fЩ~Ü€i¨­çöY¸€‘–33Wƒ‘sï±L¹î»\æYû‚˜`ŠÕ— Œ¬ö=×åÕÍeW3Ù�}�pœM—1L–;sž—Ѷ ‚õwz9˜YmÈu}÷ 8þvÆ»L±r˜R¯uéD4Ýú®£þl‘˜?蓃¾:â}vÔˆÔ;æµ %pn³uë0ƒÁ~Ä‹µ rÜýýX§3ís±þ“-çùãlÝRÈóuòtl,÷ßg?Çú²€‘Û&Œ=†‘…~mD΢DÞ¥{ß©”Rãß5�ÿ˜2vlea_‰Ú;9o™q]TF×d¯�„åÔÏ»Q†Ëa‚¡™ï଺œã÷\:�.´ÖGr}_ÊuSMmÄxì”á À%Ìþ6¶c¶Ko6•™âƒ³êûE(;*&ǫʨWÿFy×tâ ‹!ngg{bÇCmÓZŸm(+¬%ç1?€¦þ-Ò0PJ a…3ÏyyNµ¹=ÌÛ_÷ß¡ceÔ}aß dt1Ȱٺ6SSJÕG#÷]ËR¬"Ž=©y:îîei÷¼éh­Oå·§,Ÿ Ô0[ÊÒÏ&ˆÀ¤‡™Í²}I‘z-K®þ841 @ý©(1ÀÛ'#ì«}‘D DÌr3ÖÇN]úÎõ¾,ô”ìÞ¡£_vk€»±J;>šýÿiŽ~†üÃ|ÉÚËöç˜XöÎÏ‘ç=†y÷c�½lP/ä×" g‰U®vß¼{§%°ì˜2ÆÞɾ’hï€åÆu)2Zº½*ˆoìF^‘Mì!覨Cku„-¾YõcÏ¿-˜Aìµö±³¤±“RïÞ«‡Å}!Ö6³^àΪï(™ ¨ãtú3wY|2š¢«Êø2Ï%¥mkÓ=yÇZë#y>ë¨ó³GÙ ¦"ovï°‘¼óÌ@Ó{¬¬ŠË=&ž}Cšr?›=ÓÂüR»¼Ào#©A Žž‘£3ÓmgÄíL¹¥&Ü%”E÷Š|ŸÂ,Mw€}˜,?»¯f;'p`—ü¹Žõ ÑÀØŸƒOý©^ €¿òÕK÷%ë5Væƒ9] .7 ýr¢kÛ´×ZŸÃd­¬gë"ï|0¸€Ñ¯!æßϾú9}H– ÈÂÂdEäßw}Yï2Æ:¾V¿¯²°¯xíÃ:lñ:íU±exE6‘!˜2ó ¬çåÔ K!Ëd¶Ú~m™´Ñ˜�%6³¾�gÕ÷Ž”ì¨àµ+Êhªþm幬QÿBYa-=ÿuÌé •úçe‚ÙR3H¦`OÒïÛ˜ðš2[y¦ç7 >•snäø³Ì<ï1Çá°ë|4•Rœ¥p394r–…Ž•Rg0Á™Ì{îÁÙ Mfc/•Rv?¹NÎ~*v¶2µ.¤b8²`—åÚýuVΔRÌ>2–s²WÝþÈè€d騥z6xV‡‘÷3­uO䬛)ÿ4SljèûÛ(R/»œ·týI|®ÔŸjòRûäM÷w)õ²öÛ.s³z�óÁ¢msùeø*«ø‡ß8£æn #vÈö}{ëçX;)õíG–eUŸ´ð»´@žmá1eÂóÚ[YØcBö®T22ºN{•Rܱe¸6‘!˜2ó½.º0Ë&â„N¿¼#Â0ÄâìuiéØ 3ë>8«¾'¬’U’ŒnSÿÖݶPù>Ý«ËópEmÌwÔ? øM´ÖÊþɾîJ|î“?sÏKlð™sü®»_[àØ±óû™³ÿO Hy6ø×p~ïi­ïÀ*îh­;9KOa–ÝÕ‹_EëÂÈAò>C¤šÈ̳•¯cçßçrü\dÄÊè©#—^ÈÈöiæÜžsÿN¦|Ÿ-ÌCõZ«þçó¨?•ÂëlÂ'^†Äz`ÇCÈ>…6ð\Rú‰ã3ta²Î (³¼eÔ-àë\ÙßäïÌëé>û9ö™ÎeĆXUþ ¾K›Ídí_+Œ)cì³,ì#^{W" 2ºf{•RŸÐØ2¼"kJ4wÓ9i˜—aש·å·&Ìì³Î ‰¤¥j˜—Û–s.`²Ušjöá H´\°Àl`íÜÇíOaRÿ5€̯¯8÷¼n[Oß'±ó8ƒ8Ï9ÑJ©VN»ÚÎ3ƒÜó œU¯,J©zF¾ì»tƒn6Óã&«ˆËñJ2Ñ¿àõ݃RêDŽÙúkY–”ãÎsYhÛ:uOôÈ~‰óJÊn`~Cêß<6óÈeìÛ d™åQN[ #YOÁ_Ok}Ä`YÒÇXG¸Yd¹~™øôGú“ȵԟ ò_ŸôÕ|‰˜¿ó£¼~`7×·Ö,^,e"å_ËyuÌ2ØSü¿>Ìê$ ãO�ó¾LÈ?L%oœÑ“ß®äÝ»z¸ç~Ž]6¼°\8ä×"ìo¯êëgß‹^òÙS†Ž{/ ûˆ×Þ­2®sÉèºìU,.»Q†WGÐïyö_,­À~ü}xãç?ñŠßýü§¾eÛ« ’¢Ú…Ù¬6y¶5“þêþnƒGœUO@)¥õç®V/Hè|ÿ}xíàͯxÛÛ~Ÿ2^qBº'³õÞÁì.éŸRJ㟗XàÀ›p.ƒÁLг`@f0_Ô ¤0Êì]3ÀüHy…¾æ5ÀoüÆyÕeXœæ+Ýël+ HÖ‹•ñïü_-­Ì_»ï%øð»ÞPy'«“çëHß] e3nÒÏQJ5¿þ_ÿŠÁÙàYeµû%?÷¼áú°d|Ù1eB¹;ãóV¥TóE/zÑ+xàÒdüøøÃáp¯d|Ý(Ã˳‰=Ùg«p:odV}o !ë"¤{±%?Ô¿és˜À|!²ŽÙ2‚;UBÖìxã�sßBÈy¾ŽôÑ«d³K,;¦L(—²@6Â*2òƒ(ÃËs 0Y}eñ;_øô¶ÛTIÊ<sPPœÎ÷ßWZY£·>¸í攸ª¬þ•é~ÄÛîj¶¯yMye=ôж[“L™Y ¤Úüçÿø/J+ëS¾ÛÍ!dÆ~ì÷ÿÅ <ÿÍaÊø&'d+ëóV”‡zèv§S^ìi<ÞÏÇO® Å6ÖMe¸† . Y I.Ê8© ”q²ÏØ/Ì­¡hÊ8©”q²ïPÆÉ¾C'»ŠÒZo»„B!„B!„ ±ö¯ B!„B!„Bª‚„B!„B!„ B!„B!„r@0 H!„B!„BÈÁ€ !„B!„B!„Ð]C¹ü<6© J)Ê8Ùk(ãdŸQJÕ´ÖP4eœTÊ8Ùw(ãdß¡Œ“]å€ö‹žÿüÒ üЧ>…§ßsÏ— à’ªÐn6ÿBi…ÇÀ½÷>ƒ2NªDûK¿ìé¥öø'?‡Çû@'Õ  }ûë¾¶´?ÿчñ…> PÆI5¨hÿÉÿ¥Ò üЃïÀ} Œ“jPÚSžö¾îî×ÝSV¿ó¿ƒO>þI€2NªAÀ?PšŒ;PÆÉÚ¸�?ñ ßPZ÷½ímxó‡?¼ív2Ç`ðó¥•Õéœãµ¯ýÍm7‰9þ³^ZYïüíà]o}dÛM"dŽçýàËJ+ëæç~Ÿ|å/o»I„Ìñÿö•¥•õïþþßÅ{xö›DÈ”?ùÇþäc/ÿ'/VYå}ë¿þV¼éwß´ífâò€ÒdœMÀ= !„B!„B9 $„B!„B!ä€`@B!„B!„‚ABÈN£”j(¥®•RÍ’Êë*¥.•Rµm·uCý!»e˜¤BY!Û¦lL¸e”„ABV@)USJ œ?'s/CÇsÎïJ™ëø„ýJí*Òî5׳`�à\k=”ßN”RWJ)­”ºQJu=×¶óŽi­;�&�.·Ñ¦ªã¼óF e­$ãëÔ¿C Oä÷næ¹²ƒ—}ÒŸ}µã‡€§hŠíÏÊð síÞÈðª¬"§±k+î/ÔD§­¿àkeeÇ©‚úú\çx®œ­rœ2J‰Á€`ÅálfµÑZO´ÖÇZëcù)$,»`ó{/yƒõu·«`»×É€žÖº—ùm¨µV�îh(¥ÚÎóª‰Óßöªµ>“s9ˆÏà¼ó•mHªŒ®_›þyú˜çxnŸ­üqÐ{¥?ûjÇ„<žÈoöžÂØ«>°Ÿ2¼*«Øâص÷�Æâ/h»"ÊÊþP9Ìíscr¶êqÊ(©Ì’­·6u#¥Ô%€¾Öº¿Bvv·£µ•YöšÛž[ï„ëìLRÇ7“ &ÎRŽk­;J© ˜™¢cµ#ï±`Ï`Ò9g 3pi@/r¼!¿´Ö“Ì55˜ �À¸Ûã€qÖkîÿrìýæ~/©íÓ²3H¶=ÐZ³uM©ƒ”Ñpœ;Ë™<kh­'J)ÛvKSþ #·èèÊßOFF³Ç\šdìsV!çfÏsËÈÊK®¬÷œþ•¥Ý­!Òs»ö�3PHwúã õg[v<çZK’Œ†t3¡Þ;)ÃR7·v’ÈÊâAÊ0–#çœ9[ #Q[™)?ù]f¯q‰¥ù)y²"÷©[Yk=VJõ�œ`¦·++»Æ*6%&ƒò«c˜I‡F$ÒçÆälÕã�etç‘ìÏLÌ£—s¼†ùLÐ^Y±‘ؽ ”³TlC&jÚR;é×I¹–±8 ¢„ì ­õ±ײÞJg~êÃ;“ã°´‘cØcǵÖgvyÇ*JM’iÁ°:Œ“™5`-˜NzÓ¡Or®?‘ó†Rê®88n¹'r-”Rc­õXþog OåÜ®”s`$Ê�³Á_S)u$ׯD¦ìºt&ÇRw+ŸC¥ÔXêÖ–¶œÁDhb~Ð�ÐZ÷e¶Ô:H-˜™ÿéq�ýв §œK¥T­Ì é.âȨëh»\ÊoC�'J©¡‘†y·VVû˜ÉxC)uÇ)£có¬CoÛ!9JÁ§V¯�ã 4QP?"ºëêh^»ë‘²C÷>‘?5)3kRÈÕ÷¸3(ZÇí€õg[vÜ:âv°gÏ;†±Ÿ1ÒÍ}—aôih­Oío‡*Ã!9ÊœšµÅ}D| 9Ö¼Œ'N‚[Y°zeË9EšŒ§'+yït,÷p¸²²£¸6e´K”à ÂÈ{³€8�LÄžv†×^ÅälÕãöÊèn#­.ÙØ€—Äæ&%×yï,Ûp®;²O¥T[k}žp-cÖ ͪ§Îæø2Sb3ö‘¬•à½S²Z fŽ}nëœI8S´1¬³註�Ždvºàľw¹fäüÿ Fæ†N¹¹û‘h­{lkÙŒ‰œ`Ê%€3;ƒ$ÇÛ0Nþª\8u2/¥­gÒ±œ8ò=–̘FÙ,«¿yØ@ u WIo ž°·ˆ-²r3»w9­³ìj¤”:p­”êi­GŽ£:€y/GvÆ]þÎÞ2ë¼{å(¥þ>ýÃÈÜ@o ýðê®jw¬lïq©;àô®mH|µ!ýÔ¹'ç]*¥Î è¦Ë^è϶ì¸Ð²e;å¥Ê¨W7cõvY†!÷;_ñõï… #,Gy;þnÌ—�Œ<ŸÊùm˜÷7V)GìÿOÕü~eø) ²":1–Ì‘sÌOL.˾ÈÊÎáÈQ½¨&È`À…#lpzŒÀRòRìÕ& ŒîKfcGW ÈyÓ¥¼ž,>„:/Û­þb&÷Šl"C04«!Žd¦gìžÝ;–Õ›eÔÄXÛL’=‡3E•Á•¼w1Š÷"Ëq/$8m V·š0²Ùrö©½Gbôë™NÂbËØÉâIýŠÏ}³d}Ìö‹jÃÌ,(×¥ÒÈàf‰À˜ëˆ]Æ0{/¹ûäÙ¼s+Ù°öÖ T¤ÊÑ*ô¥¬3YŽPT?bº›ÛîXÙtsiÛ ø¾˜ ’­Ïfà³L@ðPôgmvæ} dÀ:‚‘ÓQ¢œÄts_eØNÊÚ,ŸUØΕ£Ì9¹¶8äKä='ÉÚè*¥E¶ÊÉR²Ÿ’'+Ç0}À…üÕ@ɾÈÊ.SºfËÅòïyÕìª2 Œî>ËfcÇV Ô`bsZJ©¾{Ž»¢'•b¾Õ_Ìä^µC³ê±âXfJÂŒ}(k%xïŒebFMŒMÍ$q¦hûôaœô!Lðeéì<qÖ‘YJÓÃ,[ÎÐOœã“œßWaºïct³N¼ Úerc“Å>2_M“ö·2K8– I€h¬KX>½ãL°èÄNƒ™ý@ì¬üÀS–ïYÖ`íâ|XÛ—"GK#¶|(ï:;»˜¢©º›mw¬ìuê¦[÷…¯Êûìb>ˆâî!–ÄêÏ:íx ³ Œ“n'Bœ$êæÞɰCù«$öP†så(Ó_úl1à÷%òžÝtYåŠu.KŽ|²RË ˆ/°„g²²”(‡e³Wë~”Ñýa©ll¤­éÙGhFS‘–Uce­þbì#CU¾2ì›!^ÈLA1A²3ã7˜ä²Â“2;š8AC;`ZµÞ–MÌ$±cØ>î¾yGK.˳²Ò…³ÿ`7Éž[Ž+òi÷I– f¯„8vß딵1¯#©×²Iy‘ š¥þ5ÿÕ´:ŒÎ»zÞÆr†¿…’öÞØqúpö““çín8_ÃlÆÑ!Š~½ÏîQw ³<Õ~p&EŽVÅꀻ‘|ª~,¥»±²×©›™:dõÇÒ”ûÙgÞBñ%‡¦?ë´ã]�mm¾’9„¬<H“ÝÜW¶m[ÅVì› çÊQæœ\[,äú'Îù])k™-s¦rZ–dåÊþf—Ìc¹%æû&+»ÌÊr¸¤$Á^­Êèþ0— ³¿vмÆâ"Y?¸¯ó³ÈpâY:¶!õ9ÖZI=/–,б U ú˜`1€— vfƇZë;Zë;XÞ1 ÍŒŸËŸfK–—®·C%wF™çÙ¢PJÕ•RZ)¥!ñÿœsr¼íwØFV0³5¥Ô‰”a¯¹PJ]Ë=2#déèÊ=jÈ8³¶Î›t#×·�tbíJi·”]—snàì—%؉I7Ïr&mw¿@kg½®ä™5œvB)ÕÊysûÀˆÃ¶ð,±g0#³# dCßŒí»’ã˜÷9¹m;r2çm`˜½‡KÌ&Vn§Ù+G%é__Ú”—I”«Îñ\Ý•ûzÛX¶÷xÛcN2ïûRîs-ïû\î½wú³vÜ. rëh{å$¦›¡zK›wR†Þ÷ÞÉp"^9J±Å_0vâZÊ®CÞ¢¿Ð‡™d×�®ä7+ 19K%OV¬Þ]Iû]¿ø€ee—™`99 Éà�fbÔ~˜ç²º¥ {“³2Žƒ2º—¤fÁ&ÆEòâYlùI‘~WX*¶!º›ê-‹±?›üÊð2ô!{ßHf^63%DY+¹Hª­±ìȲ³¶üÿxÅz»÷˜¨õ} ‡3E% FEEÎñ~â\äf¢µVÎo ȧÑSŒ–»_^„aε%o™˜·]‰íž~íÊs|+#¡í#¥” ^œÚí� AMy¶“Ì5=²‡¯È—l÷š˜ŒÉ eÈÑ<÷\—'{yícÏõ+éŸSþÀ±\ýé®Rj{&Ý µ)•<ý‘ß{0YYØwiõ§êv\wßu19òÊá>˰à³;{'ÉÏ*$GQ[ìçKxt‰ú5‚Ç ^9+Ðþ\A–ÎÕòôôPeeÇÉýòoL#2èê‚[v!™Œõ¹ë–>NÝKN”RvõbjlJ\ÄÆ/FÚ|h¬  ™é¯‡Û°YäG©rµBlîþ:wîµÌê/Æ><¬=C04«›!Že¦„ÊNÈZ Þ{•™ñX½ <¾µÍ$3EUÁîƒàâîµ42£b—Ï6—\ÂVy¤]GÈ<G­õxIç§§µNîàÈÁ²6ÝÝ$>ý‘cËdÕ¢þìª,ìj½çôö«³O¾Dž¬ˆœ,›1BY!…õ¹k‚2ºÎÆNY1 ô¡sŽ›ÕŸ²¢'…±Øê/fr¯Î&>*r¼Ì1çœPfÊyäÚXÖJŒUfÆS³¶Bõ/}&‰3E•ãæýÚey€1r½%ã.5Ìö¢ZfyÍÎP¦,3•œ$²NÝÝ(ÔŸ•ÙUYØÕz/@^+{åKPVöߨí‚Y«Ûf“ã/Êè~±J6vJ\Ä®²Êù½Hy¨üecÞÕ_Ìä^ª/>x´ùDv™_ÂéU¹“<4ìrH1pv£ÕQKŒîŒá¤C@H‰¬SwÉn±«²°«õ&›…¾Ùú˜-!¤œRQV‰m,Ù1öÁ€³™û¼—ÒßÍ®ey²k¬KwÉ²°«õ&›ƒ¾©:”QBvfÉV‹[�ðm¿ök–UàÇ>ó™ÛO½çžÏn»a„¸¼øÅ«4è¡Þ~úÓŸF'•âu¯|oi2þħ?{Ûí!$ˇÿÇZšŒáãRÆIåø‰oýkåùããwß»íöâò®‡Þõ´¿ý?ýíÒdü½~/eœT§(MÆPÆÉÚQ0kªË†Ÿt&•A)E'{ eœì3ò1ƒÆÊ-B'•€2NöÊ8Ùw(ãdWQZëm×B!„B!„²!ž´í B!„B!„B6‚„B!„B!„ B!„B!„r@0 H!„B!„BÈÁ€ !„B!„B!„zþ3žñ“ÏyÚÓžYf¡O|á ¿øîGùåm7Ž�x¶R?sð”2Ëüð‹hýËÛn!�ðä/}òϨ'«ReüsúÜ¿ÓZ·Ý6B”Rõ{Ÿ÷¼—Ýzò—*ã7x?eœT¥TýÙ_þ•/{òSžVªŒø]o§Œ“J ”ªÿ‰/û/»ýÅ·K•ñßû eœT¥Tý‹Ÿþô—=鋾¨Tⓟ¤Œ“µrë#ŸúÔßÿ¿|í×–VàÛ?òÜ|æ3�ðËÛn!�ð(ðí¾Äò>à3柿¼í¶�Ÿäóßþ%åKJ+ïs}�Þ€©õÇ>úÑoÿ³ÿ§o*­ÀGÿà�Ê8©õ¿ÿ=ßþ—¾ã—Và;¯(ã¤:Ô?ó™Ïœÿ…ã§–U௿þ×Ê8©õ?úÂNï}þóK“ñO~øÃ�eœ¬™[�ðÍfiþÀpˆ×]_o»]„ÌQž„‹L 'UãÎ7Ý)­¬›×Üà‰÷<±í&2Ç×ÿÝÓÒÊzë+/ñ‘ßûÝm7‰9þú÷üPie}è÷ÞŠ›‡Þ·í&2åyÏyÞß×ú¾Ò‚%¿ûîßÅ?òÁm7‹)÷ܾýÄóÿôŸ.MÆŸøÄ'ð¹Çßv³ÈžÃ= !„B!„B9 $„B!„B!ä€`@B!„B!„‚ÁG)ÕPJ]+¥JÙ&ïÿßÞÿ˶\õà7¥û$==éIuŸ‘ ¨ Sϲ!‚Æu:ºq„®==ÁÄt88' msNÄDtÌ´ƒ‰*ÓÁhènìslÂ6Á¸Õ§<Ý 3LŸšö€ n+ª™A€·0H€°Ä-@¿ÐÞ-½‡ú…Èù#WVeíÊ_ûWýü~"nÜ{kï;sïµV®\¹2·RêF)u¯”êìºm„Bhç !䘡'„ã¦i;Ÿq¿ì~ Õ€ Rª£”š8."çÞÇŽ9QJ]µÙ†]?—D9]��·¾Ï‘+¥J©›Âo=¥Ô#¥”VJ=)×Z,�Üïú9Bö ±»·Ù¡:>;ïôs í<!dÉ¡úãuËN]ß”?^³^_^êvïØñ«ÂuA;OOÈñãØ­^eÕµµ;·¥ûLŘÍEÌ—oÒ×o5 ¨µ^h­ÏµÖçòSL`ç%˘èÆÎ+”ö’Ï%Æ€‘ÖzThsGzPüFGZkà @ß#@×rþÁ[I;pöšˆÃqàÀ¦“Ù öÑÎ7ˆÏÎ÷`œŠsç ÒΓ­Ã>b¿9T<·ìª×7è×ÁëËÃØñ¹cÇvcçiãO“}ÎB"ÍâØ­ÚϾ[[Û–ž /ŒÙ8×LÅÆ? §”ØëР¯ÿ`×OG"¦]�Sœçœ9ŒÐ÷`¤öxO~Ÿi­…k:ò�íƒñEe—ÂW<.¼çsÊŒò@ÎYh­gÅëÜß|n=�=Gñ\úò§ØVû<¦Òž¹Rj#pù#�7ò79aœYaaöúÆ€õ`‚C#éPìñŒlm×Z•Rw0³ç¹u!ÛDZeö=va:¨Yà<䤬½\Úq§ kãáž“kç}È/øS±zeÖÍ{Üí—œ:n\Ÿxö1;‚v~Ç(¥&òÏaݾ_œ»€±Ï‘ÄúÌïHk=.S~CíÝè#įºÇJ·–h­ÏcýƒœÃ>bˤüñ/îÚ´:þxÈÎ;Ç][ ­õÔÓ¿tÜÿ§ê–xkç;c…X½±ñr¯®ã3Í•R#˜I¹1òí<m¼³¥…óîåœÆlé¶luÈ_—c�×Îæ§­Þ? ¶¸xÌÈñÅe}ú¨ŽÔ9)ÑG¤üñJ¾~fÝìõÁ>&Òö*1�¸ÆÊÆ/”Röþ@þþ΂�®`^B¦“+¢+iÄTØÂsýÌËï)¥ž——ã–{!×B)5×ZÏåß6º )ÿJ)5v¢©=9>ЕÎä\ʵåzõ”Råþ÷΋ºPJMm¹ чÇÑ�édÆž(ñ €*œÞñ<Sh­ÇvƧŒsCŽ’ÐìµýýÌ:;J©ÖúÖÑ­¡Öz$õ^)uã8¸×6==朑Ӆ üvœN粕b;¢öRÊ´×v`f¸Î;}ƒUgiíù¹ü?Ç·ú[^ÐŽÚå«[ìø…ü±6¶ØGå´ór/;@Zljv~÷HÀk‚³örþÆRlÝÀ3k/ïìܹ~m²t‹øúˆµ£;›Ó?HûØGl— ?žðÅGÎõUýñ˜·tadÍN´ØºØ>éRîs#u¸ÆÊ~^aÝÆŸgë­ ·Ï–qië•ê#2ÙxŸ=žK²íü)Úø*¶´@© ÙÌ{oËVoØb±·vÃŽÆŽÓVïŽ-v'›]Bñ‡œØ…ÅgksítˆX\$§Hùã•}ýDÝrû˜¥c6ö˜dÚ áL&`ã¾þ΂޳x8åÀ™D>¯�\Ø«\3sþÿæEMrƒëµ¥ì™�œa½#¸péÌx߸‘óÇRv_ê·PJõ=‚IõŸ)¥n<VJÌ´JZ1ôÞ¡‡<E?IDIçXÍH,`fÖöAþÌ™¹d¸†2³ÚÎPjb悳×{ŽÈá¹Èú ^[ àÚéì¼öRεçY»>€‘/@:ÀÂÀq!u˵óÞ>Ĺ6dÇSu —ÁàèÛGe>þ˜ïÃè Æ/ëáB;_ŽÐŠœ¬ÿ³öUW3L†“<÷Ù¥/#§^ÌbÝ#þxÔŽ uüñ ÷° æ‰<Í\Y™+LHY¦ZëK){�c»ŸO=«òÿK'û×’ê#Rxm¼Œæ’yu+Ïr€@0+Ãν¯kK3W¬ÕZ­¨e;ìÔÍç¯Ç2Rǹâ`wlíÛLdæqá´Pü!ê‹nYœ8)c§‹ã"™}DÊÖÖñõcuËícbÔ‰ÙØ@`«ÌÇ êúú;fà6Ü÷àg‰ã1.`¢½�–QZ�K¥ë„Ò;—[+…sç0û}¸ká›Þ_¡Ò:iŸõ™%fs*Ï”v ‚ [Èì‚í,c3e²§Š™W©Ì¬V3”š˜¹8ÅÙëc£„­ öÒ.‹‚Éζû[åd`"ö žåÊ R}ÈF½¤]ѺeÖÝÖ9uÿ>;?„q^l]0ŽÀZ@v>ŸÔŠ$²þc³ö‰™íä̸phNî³íà T/f±(9v´Ž­KÙyë+mL¬K_r'A„,Þ̾g½:“ô%ú€!_þƦÜÉÿ½¹L; 6¾Œ-Me²úV¬ÕZ­£; lq,)uœ¶z︀YÎn'Dl2†KNü!»�"¶õüñÊq‘L[[É×Ï©[f“¢êÞŒcˆo/“Yw±¶ó|jûú‡ÃßF*/»• ÇÀ.F;Ðr ›Ï†öY±)ÖvFr‚f£â×ÜŽçVk}8çfÀy ND†�îdÙ¬íÌçXß46ó“=åͼ’²c™Ymg(ÍÍ\ýìõ“k+M{éÎÎ-<¿Û²lç׃q–{+ñØùœ>ÄgçRuË©{]6ì¼´ïÎdVYÊîy´óåH­ÚñŒYûh&©ü›,éÀ�&ËÉ ³X‚Æ|qÀk§Sv¾cóî$P_”¹V¾È8qïåämÍgÒDóå;…I‡;t-eçOÉÆ—°¥©LÖЊµº«bÔµÃ@+ÇRÐVï»·‹;ù˜ˆÙƒ˜­-åW¨WñÛGäØÚJ¾~‰ºe÷1JÇl¤^W…g»‘lÑ”¯ßêW†¢ óRÇ0†¸Êž Vyn ûoc˜ˆpWØÀ <´©\ãÁcÛ“bíD”Ct¡J~=LηÏ­Rªèü®°›½ˆ‘yàßîo¥Ô¬‰¾ÀY1{*”yÕ¢™YEYk#C Rϱ6_•:ƒ‘—»â9œ½>nêØJ±cv¿™È² ®Xn`–*/äxè+h!;_©IÕ-³îuŸmÈÎ÷±²i¯»gí|yl&€¥mse8fÇ7fí!ò_˜Ùž8“?eg‹×2œ`2Âkù Ö-x¾ø?}äŒY¬C¾¸-Ø´Ó);o÷I½„Ù"¡èCÙnôu»p®¹‘òJÉTÑ—o¢Høòìïv œÀz¦§ß¤ªOl³£Ëäû¼‰m ´Ã¨xMn=i«wÏÎþÑb\? ‰øCÌÖæúãEÊÔk£È´µUû¨Üº¥ú˜ c6]ŸÓ}þ`mÿöÆ|ýV‚R1­”ÒMåÿ眉8ÇÝ ÂÆ�M`fä'J© )Ã^s§”z,÷˜Èì¹eàFîÑÓ™JÔu Óéjy`n$öÆéÖ�ž@f$p¨ûi÷%Ë‹:åNä>›ršz.™\KÛÖW)uåy¦6ðy#d÷rÎc¬;eVÀÖž©†3ó0ÕZ?ÔZ?D8PâÍž*7ó*u¼ ÆðÆ€ÑÙFŠl>†,_{Ê9™ÙëCEì­µc}±'Å™.¯­”ë£ö«L·';l—Hº6³h›‚vá>$U¯œº—è£R¬ÙyÑ•k>ѯ¹m3í|e‚+2ì¸ïÚbÒæYßÂÈHpF]ìk,ÈÖF†SVÝ<xû‡>ËkRýƒœÃ>¢ðǽvÔ^‡šþ8v^îo˾Ç*Pò¤àw/`üì˜õXÊîBlwÆsÃj4€Gò›Û®T‘ƒ×—wž×#yçNvZÒÎÓÆ§miIlvÔÌ»éG² ËÜ» ; ¤mqeh«÷Çÿ»·Kß'Ê|Ô1xwÌçÍ´µA<fKSq§‰±>"g¬PÚ×Ï­[F“¢TÌF‚žv5Ê#éW{pú.4èë·ºdXW%Î ~¢\:Ü…ÖZ9¿õ Ÿ6Ï1:îÚëÀñ ÑÕÎW¡ ¿[ƒ»oêœèsÉA–&Ù᥻É2ÂéÜÑûªÕe6Ë$a*ÏÖÈÆ¨6óêÚɼšæo‘±…Úür˜¹¸uäÄ7sa—ÅéÏœ½ÞsƦì¸×Vʱ¨-”k¯X#Á—œ:ú>¨‘êCRv<U·àñXßVŸ·6^yöÀÊéwiç½Ø3±­�}y);n¯íKv÷rÖ^ÞŸÙÊVùQFÜ™ñ9Ö}“ ÇÞ6–áT¢n^"}„Û&ßXrú€}D#ÔñÇcvTô%WV‚þxÄÎûìkÌnoø?±ål©ç"öõaäx´È|.!_~¨Ìö¢®§êMµ¥U¹yC�vÏŸ/uï&ì°SNÌW‚¶z¿Èˆk$cë’¶6ægØÒœØI¬ÚÚ|ý2ϬÒ»JÌÆÆ¨Dç®-oÚ×ß÷%Ãv_2w¿‘“G”ç Í¥h´Ög'ê@TÁfMY¥»ƒl(œ1[s—™=åͼJo+C XnÆZk悳×d E²ó5–+ÑΈ­HÙñÔ¬=ò²ˆb3ã€'Ã)sµÁ.3œ¼0‹õàØ[;*:`—Uõk,eÞ)¿¨˜quÊ6ÞkKS>±Ê[±ViµB†­nÂ[Ê@Ê9N[M„Öú¨&û˜ª1­õ¼¢-Ïîöý£"·0È.‰LÐaTc tt4Ùá3Õ»îlÖ;ïkçœÔÌC*{ê¼Êñ63”ä÷Ê3œ½&[âhúÚùöI¬HeºFgí‘È"JÌŒ‡† ¤³¾v–á$ÜzÎgëa±Ïv´ƒÕ^SMdí ÚøÆÚîµ¥>q*‹¨òj…Œì©ÚvXÊ ®(ˆ\ËP¢­&‡@›}T£}Ì6u¤L?°×A쀃MÁžÑà²]d™À4p¬êìõA;ïdÿaBÈvõ5t}Äž°ÏvT g0“’'#Äó×[‚¶šì”6û¨Sécö: h‘p´/C€³×äPaBHû°8nöÕŽîA–"!{žf!Ò&mõQ§ÐÇ<�€7~ÿ÷7Zè—¿þõŸÞuÃqiVÂןÞu›qùïù]WVù§ÿéwîº „´ÊßþÆWíº „´Æ{ë½Ïý…¿òv] BZã‹çÞû“?¹ëjR ¥µÞu!„B!„B![bß¿2L!„B!„Bi !„B!„B9!$„B!„B!ä„`@B!„B!„‚AB!„B!„BN !„B!„B9!Ô›žyíì¹×>ý°ÑBòŸüƒ¿³ëÆ�ozÕ«~óU¯xÅÓM–©€òáÏ}Ž2Nö‚W?÷ºßTO½²Qÿü'^ú»ZëÑ®ÛFˆRª‡¯øÊ·ã5¯nTÆ1ŸSÆÉ^ ”ê½éËßüöW¿ú5Êø‡÷·)ãd/PJõþç«ßþš×<ݨŒðƒï§Œ“½@)Õ{ýë_ÿö4*ã‹Å‚2NZåÁ'_þ£¿ø£íÝXÿÓo~�>úñ¯ßuñ|ê‹_üÚïý³¶±òÞýÒK˜îs”q²7|áÉË_Û½þË•÷é_û0>ÿ‰—º»n!Bûè×⿽k®ÄɘÏ)ãd_è|ò÷?òµßÿÞÞXÿôm·�@'ûBçÕ¯~õWþWÿÕ?x¶©ÿÎßù/�Ê8Ù:¯|å+¿ò[¾å[“ñw¿ûÝ�eœ´Ì�ø«Ý¯j¬ÀÿïüC»n!|Ý3Ï4VÖû^~y×Í!dƒ×½åO7VÖ~à»n!›|ó¿×\YïyÏ®[CÈßpö4VÖë^ÿ†]7‡5^÷ºg¿ø—þÒ_m¬¼7¼áwÝ$BÖxÕ«^õÅ7¿ùÍ•÷êW¿z×M"'�÷$„B!„B!ä„`@B!„B!„‚AB!„B!„BN !„š(¥zJ©ÇJ©~CåÝ(¥î•R]·}†ºGNê�!äThÚÞeÜïèí!‚„BH ”R]��·Zë©üv£”šþôk.”R”RZ)õD)uã–©µX�¸ßuûN ç}õ(ËÊÁÕ®ÛÕâ(_ìèÞ>Ýë‹Nõo"ÇON÷”R³¸ˆœ[ê}²ŒÇžKª]ežiËmðé@GÞ£•ñ«Â5'§„1_e—ýrËmÞ°wαAÑ–ÉïQ{G{È€`#pfŽ:m̶PŽÉ q`¤µ9¿õ`–sçÏ´pÍTk­�< §”¸…j­¯àÚ‡ŒÖú\þYÛv‰#9ÐW óÞÛ§{ ùí\Þå%Ì»;ל”îi­Îó�Œ} Qê}nCÆÛÒØsIµ«ä3mŸL�ÌEÆÏ� Á“ÓÂ̪c#á«ì²_n“ {' W�‘kböîäíáƒ]W †7;ÒZ«–×Rm¤zXŒTËñ€Ž8îï0‚ÛÃÊyÆ QJÝIÛÏAö™E蜱ƒ!$Ã1Í9N9>.dÒu:fZë…s¼ƒÕ€(vl¡µžÊî ºærÌགྷÕ`Ì^Ó+–»wè¸Ó;àëø®Í|.=Ç1ËåÀ0K¥Ô ~§nàFþ&-RÃâ±  ;×ùr ­õÔ¹¶ã„.É5K99é;÷)« ù­õ<VvH }„­ûÁG»‘ñ¾¼º'mwmŒuö­Q÷<¤ÞgÈNÞçšL®óʸçZ‹+ã©kK÷%ŸÍF»Ê^“£_eëæÓ¹O×SÌ•R#�XÅNaÌèÔu"ÿý¡ïYi¼š:ÎñìöIø*^;.vaî\·€±ÓHÙ¥üñŸäñ‘ÖÊ*iS}þv_þL—¦ìÝÑÙòìu@PäXO+”û„ofÎ*…5’£Èug¶SJ ´Ö·Òök»TáPM§€tv7HÌŒï9^FBF3ŽSŽ‘qÛÙvalÛ¹üßvÒ¬œ†¾RêLkm‘{ù} àB)5-̶Ýȱ>$`!,�\aeûíñžRê¡Ø Þ;t\Úp!¿-`œŸžRêù’ƒÅ>ÖƒkÇœAàÔu¼´Öc™Õ´ŽÌL&ÇrÞ½RªSvKòqäÐ »eF>ƒrê”Ñ…±›6=u®³zÕ—úÌE†­œŽ åü>VYo)ý°³æv ÐñI†‰²}ºÝ[p.²èÖÝ–á>Óºv#EL÷lú0ˆKûu/Hð}&ìôȹþ›¶4%ã1Yég\[©(!gV/¬ngqÊêWS:à“Õ¹ÜÀqêÀŒm]Ï¥ŽÛÌœ«4^åxv¿ÈðUBvÜ&°¸Á®…ø2ÃBÙ•üq„ý¤>VÙ{—RÆ Œ]ºF¢wðöùøû– Ûã1{wŒö°,[ ÆfˆS™#‘2s#Ý¡™íÚÙ!‰ÌºÑjàˆ#ÑÇHbfÈÌñd†3IlYK¹E;2Ìb¹pV¼¹rvàÚÎÆËñŒŒ�æÝϵÖ3¥Ô-€ÇJ©‘èÀ-[œ‘‹‚<ŽÅqîËy ¥Tß‘óÔ½½ÇÅIùWJ=‚ÑÃÝöauÐG_Únäe=œãWrÜÎÆ†([/’‰ØA蚉=~\8-(ÃŽ3ê•S›Õä° (8ޏwO™trÿi³K2îkgÎLý㜲î\:ýÒ½<«k§î^'õíFŠ˜îY�n=¿S÷ $ÞgÊNÆÿذ¥)¼²’ym¥>�ùr6µeÉ’º‡YV–|ž™úÕ¨ˆšKfÖ­¼‡6'®ONêf0…²9sÇ”%²ÐK#í®3^åxvOÈñU"v|àN·vbŽõe¶uýñŸ4RJÍ\Ù þÂäb.9}~ˆ”½;9{èÒz@05CŒø¬{ŒœHwlf»‰ìàìtÝhµsÎQF¢Ð r4sēᴔS¬fä¦bH]§îZþߪ sF…C�ÜÌ`HÖ‘îÃÈä•Zí­aeÒ2‡ÙÃÈÝ·¦Søðg6Xn­ü8Á‰è½3ëæÊUùôea#[—Œþ.‚¶ŸãHð&pcÝf¸€YúhƒtvPã“a— 9l_0ÊÄ•Äwß 8º*dgÌHßÔ-´Ãìr¨k7rfçË@Úfd­AÝ+MŽ®cKƒ²£¡> Åòýk­o•Ù­WW[Ös=½“ÿo ^OTBcN›ÝjŸ]… ¦D6grLËìJ”Gd´»Öx5uœãÙ­‘ã«Ä˜þm©ì;ezý$Il¹“~ÙNU‘…J+òRöîDíá’md¦fˆc™#1r"ÝÑ™í²CêDªühôÑE¢ï r*ƒC®õÊ©d0¹³3sGfm¹öÿmÉ0gT`Þ«í{0»G‘;3X\^PÜ·Æêˆ›%1†NaœÐ„¯ŽÞ;ãxŒQøò˜´ùë›Ñn_öâñZ”ÙŸg¹<Ž´Â›N¦;XKɰKè=u`äáN)5Žù8r?”|çmÈÇ2+Æé¯Ê,*ÛL6t¯@…Au¯2¹v: ŒÇd%víVû�µú8B}H›:Ðq“+$[Ð͆;U9‡vâ]Ú:òd0³9Scʌ̮XÙ9ãˆuÇ«)8žÝQ_¥*ûã™~Ò+9©²œ?Õço²w'n—lã+ÃvÖï±:æGØF“Ÿ`es…;éŽÌl¿V7;¤òÞqZë±6_(;ƒò»À©G'xGÈÚ 2L¦_QÖ|N)9+¥ú2#}!¿å¡5NÉh ^{Fäà°Ël"«Ë//Š=·ûÌä¸u~cÏ팼í|]ݰ¯cG7ÛIHÝ;£nµ‘{ؽÚ\ìÞWvy…Õr™.L¿çöuøå+ìé>HGÄÎ~ò.]MÉpvÉK˜åã>?ÇÚâ8û}¹”¼÷&‹äJ®í…Êõ•-Nï+ǹ#§¹Ë:v#ID÷Üç9óüFÝ+Oe;í)Ø”ñ ¬Ä®ÝRpáÈË Œ.—ög<úÕ¦<rôÞf¿Ù¥ó§¬±1çXž“ø/' Ùœ'8W”Ñ?¾‘Ù…U€6·l œ™•Ck{s<»5R¾J]êØù?É~ܨW¥ÉèóCmŠÙ»S¶‡K¶´³~g0‚зiÇN4yªµ~¨µ~ˆæf0Üýܺ4RZ•RvY¨ËF°ò˜#ÑÇLd9˜á‘S»ìØ.î¢ÙÕ+Ã)Í•a9—r|øØå)Z)¥aœUw_.› ÷DŽ_A62–|3@Ñ›3Qt'eOäÏcqˆ­S>pî7‘ûà½cÇÅéÀ8w²·š½Ï�å¸pc'DÖ¯a?˜ÇÜ>3qämvÂ#¹w…¥ÒÖü{ ‘†pÞ×Ȉý0ÂD™ÍÑ£2“S‘q+g÷X ôždy#C›ï| 3XÔ�Éo¥Ô¿Œé‡^m²oëwM+T¶»xWŽ?AaO8ùݶOK{-•íF Öt/ã]Ÿ¤îIŸí¾û¾&Î9±÷³Ó¹¶4&ã)Y‰][©È}.0¶à±œÓµåe^›£_±ºçàÓû¼É»9·>Ø)ë�"cN±—S‘ëâžyn6ç­ü"ÿ]-°™ìR+ä”]Õ®4^Íy¦Ïn”¯Díø«L&h{!¿Y{TÙÏðõ—:†z±ž {§”ºò´y ÷ŒÚ»Sµ‡E¶±dø«Ï”Û´iû›˜u÷"bÚ™íkgf»±TeIû^¨ò_N²ÑèåLO nG‰>B.œ÷™=ƒœ!§3çÿ}lfÖ""Ã)Í•a€r|ðˆã;¾€é¤¯Ç­“»†tØ­µr~ëÁÒf¡ëJÞ;tü !zd€—Ú|hb³ìÈ»×”ô‰Cé÷žÍÇ­ÓVvÓeRwÿ˜Àñ”,Þ®óÉÞ­ç¼àýE~¢:©÷ Ίƒ·TÙNPÑw,ªCuíFnûŠºç½““Ó=ñGTâïû;½ˆØé,[šñ”¬Ä®­Ú$Ÿ‹oÉrÉgš£_ë€,a½…é_çžkNN7æ´¾öœ€œ<c{l(KvöeÜ{ Ù[MöR[fv5Pv’ãÕÏn™ _%$3®ϰó9þxò¡ò86æoG®‰Ú»µ‡kl#C08ë—1ë›}ˉtGg¶ÑLvˆwvºN´Ú^#ŽD!¡äÜ '¯œJ¹öã9Å/h·&ÜQ![Âî7ãâî)u0ˆ“vVlOj?\­õ<à`Œ´ÖgÇê|ÒÝ[Äô‡º—ÍÑØécŧ"ÿóÄuG£©ŒÍœ &¬– û>xË4úã™]±²sÆ9”¯¦Žs<{T´fçE7í²Ü~-'�„ûüŒëæô ü´ž!˜1ë—Š&Ggß„H·”]yf»Dû¼³Óu¢Õ§‰>&3ȹN!9! [aΨ¶¹…‘;»¤0Îd[_bm•&åœKkHÓˆM¶Ëºvãïc€º×*Ge§•S×̌ͨO.ÏðaäX(Ó4é§2»"eçf]¥î_u¼ÊñìiЦï`µ÷kÙ-¼lSžÑ–eK†m>§^)ý5 d£X‰¦‰ÉpÎ sàå˜D±Ápq$í†×3:Ž„´Â«LsêÉ‚všã Îx5£lŽg˜6í¼£Ï`ÆG\;D�ÀÏ̯±Ÿûܮ۴N}fnßùõ—_n¬¬—¿ô¥]7§švî)ÇÛå3üDce}é³_ØjÝEV(/$Î{ÞÝ\Y/½´ëÖlêÙþók~¾±²>ó‡/6Z7Ê©Ëg>óÒS?÷s?ÓXy/¾È˜tY˜YÕ._øÂžúÈG>ÒXyŸÿüç·Zÿ¶ì<³É÷›oz浿ò·þÕ;+mVBïÛuñ|ÙSO½ÿG?ñ‰§›,“2Nö‰W=|æýý‰_iTÆÁÙøŠ¯|?þÞ-eœ+‹7}ù›ßÿÿGßO'ÇÊâóŸÿüG¿ïûþÖ“†Ë¥Œ“}añ¥/}é£ïz×»(ãä PZë]×B!„B!„²%¶ñ•aB!„B!„BÈžÀ€ !„B!„B!'‚„B!„B!„œ B!„B!„rB0 H!„B!„BÈ Á€ !„B!„B!'Ä+”Rºé?îO?÷?ìºa„XÚñ7=ó€2Nö†6d\)u³ëv�J©>eœ3”qrìPÆÉ±C'‡Ê�øøó½ø_ÿÄ;ñ¯ß?Í®FˆËž?l¬¬Ÿþàá/|‘2NöŠ·¾µ¹²¦Sàç~×-"dÿð×5VÖ~è‡ñ;ÿýîºI„¬ñ?ýÛ6VÖ÷׷㽿ðs»n!K¾éßý†Þó/~ò¹¦Ê;ÿëßéϽk×Í"dÉŸùÊ?û·ÿÍÿ¼1ÿgo>4ÿÀ®›EŽ.&„B!„B!ä„`@B!„B!„‚AB!„B!„BN !„B!„B9!$„B!'‡Rª§”z¬”ê7XæRê^)ÕÙuûHs4-+”²o´a÷£­B÷À !„BHC(¥&ò§Wøý^)u±ëúí»z.J©.€ €[­õT~ë+¥ž8ïpùÇsý…œ{ãþ®µX�¸ßÍõ¶µShÏEäÜRïC<¥ÔUź¯/S߆¬8õ»WJi‘_FNNÚâMB2îe8瘧l}±—ûJÙ}䨸´Œ3 xàpÆ’œ:Ô’3ȶÐZŸË?‹r1oã~âøoe¶»%Zy.Üi­GÎo ùí\Þã%Ì{»ŠÎß�¸õ¬µ¾–ó*ÉšFk½pÚ�½Èé¥Þ‡ xf�º±óBr»¾d½ÛÄ'+€\뵅 À€;?499!*Ùœ#°µ1¼2.A¦+�ÏósÏu`+4a/)ãÞk¦bãŸÐSJ Š×ãÀeüÁ6oæÌ°µÖ³šeÝÀúØÓA7Q×Ö£¹#­õ¸jymàDº‡¡H7€Ž8[ÅcX)Æò¸Öz¨”º“¶Ÿƒl•˜ŽՕѶuhKÏkCD¶Ò6;¸£´D9TJÝÃÈÛVmiÈV::à²1sHY9nÄùÃ$æ0v£ç‘ƒVò2ÓZ/ Ç»N¾ß§žc=˜€ÓLk½pq÷ÿÞº9åv`œT�€c SeÛë´oáö?N»òRn°lß3ó<Ïàsñ<ËO½Ä;ïÉs\Ó[i·Û÷ÚÁ@±À g�Bƒ§Ì á ú×Ôû(È·}öãÂû^“¹Âu^9-ÜcãúD£2îœ×¸¬È½º¶OÐZÏ•R#�XNNö•;ž!ã^{“ak‹¶´“ø?P°µ1[«›s¼qúògZò˜…:Ð0)Yˆ\çÊH±ŸÏ²Ó%ý {î/øSöù;(ÿ‘ºÙë×ô©D_QEƯíïb ìý]^Æ·ÔZŸKP£v6… Än˜‘¬Qþ2À“:÷P˜!Þ‚‘n‡d�à"ÙïBk}m—oj èP‰éHñX]m[‡¶„Oìog6X¥”h­—37Ôæ()‡û” ©«w逅²rØÀ°ëè-”RS;Øgr#Û�}¥Ô™Öz.ǯ¤›éäÊÊ•”ß•ëÝ Š ¬C9·“™6ÕMþm˽렔šK½Re÷œºåØf0ðPœ_;knÚ¬üŠXÙÅgÖ•þæÜqÞcÏÅì­“nÛx`šzô±øÛ@ =­õ¥ç÷ ­õó±L ­õØf—œïàûpä{Š•œXFÎõ0²ÒSJ=/ívËõÉ©{WÏ3’R2žÔÝ B²â{§s©Ã1Ëɾ’´ãˆËxÐÞ -Ã}¬²‹.åÜy¸–ë‚¶VŽme¢nmÊ8dwì[*;&õ¢4LJÜÃÈÇÀ…èÆµKÚé~P±Ÿ°u ú‰º¥ô+'ɬ²ŒK¡ ^ÁdƒÛ÷q2¾•€`hÖ\Ž•‰ñÙk�ëÑì³Ë‹ ÇÖY:› P'wà°­Ùà"ÙûF]9KèHðXfÝ’³†žYöÒºÒ»B&‹-o)÷h^Nb6gÛ¤f¯×zgåsgýZœùβrü ÜÉ$‚uvçX_>ràÚf·Šã8�p-2fp6{û±½Ð *úœÍ¡‰—ÿ_ªõýê‚u³2-¿o¶Se;NðF¶Ïl–•ÓÜÉïvÿqf½í3»t²hîå9]§ž‹p%÷ž;ç-œ²½ï#óÛþ'Æ�þ%@Ë6dÒCÞ`m§$ÞÇ ä]È ïÂcSgŽL>²ívÊ îÝ$LmðUV¸ÜÃ,ÑŠÖ9S—Ñõ¹d‰ßJ{XõaG)'{LÒŽ'd<hoR2¬µ)¥æ�®l–q!¨7CÜÖFm%â¶ØŽ=¬u yR²c³ÅÁL)u à±Rj¤µžeÚ锜Eû‰ügÔ-¥_9Ô‘qì`•ùh9 o= ˜˜5âáèìµS†uZí˶5EÝ;FÙl‚âlÑìH{г©9TŠtK${Ÿ¨+g1ÉПTÝrf 7f员ÍCž’ñL&ÇëŽòµü¿8•Ùœm’‘é“"4+o3J�£3}fý¶ Ôwä`ZlSVN‡yàßË¥�®Ôjk»�ÉP²A3g"¢õº5È­•]G.`tÂmKVºèm·0¨°ó\†�&ð™Ùºd¼\‚Ùñ µ™fîï¬ìP_þÝ•ßGýßUft“¸¾Gè9Ï2Ή±|NZë[eöhíÕÙbh ²r#Ówò;þ8U9Ù5ul¥×Þä^,“ßwb;l0Ü÷ž×lm¦­ Ömö° ÔÖ¨#§s˜}N]6k\™)g9ý„Ï×HÖ­„~Ũ$ã6®"Ïa�™(=&o5 ˜š5báÔìuñ–Åå©(zðÞ‰¦åfxg{œÍeÖŠ;›šùx«Fº"’½gT–³˜ŽdêOŠœYÃYy­õóˆèžSvLÆÝ™¡¹#óV¯íÿÛУŸÍÙ2©Ùë(¡Yy‘“9ŒÌŒ<Áƶg¾û0:j——/ïU¦eå8qg°žßØt4wò¡q–Q"`niÚI]f÷:º\vÚÁj2§3±“ @ø}ä0Fü«}ø3øƒ¢vOEwO¯ ˜¾/�%à B§0â2vqƒ”œªÕ‡šêN°¤t7·í!Yé&xï`däTåäñÚíÙƒÊð+ß3wë”[«[Û2^ê@;”’S‹ZßKÛŽù&×XÏ‘³œ~"´.§n9ú¢´ŒK½® ÏÖ ÖŒ·ý•áYslÌlDø VÁŸ#Š(/³G<<E,ØyáœÜ{ûˆe„f{Š›××M-é.D²o`ÞOO™Ïl‡Ú½—‚»gÔ‘³˜ŽäèOÂlÎÄ îåfmVfvÃ•Õ ÝË”ñ¹Rª/³ür¬(O­è€Öz¬Í—¶Î`ŒõÔ›:P’ö¬*cH– ÈÉr^B†S„ÎÂG"ûCÈÄe…XÄÛ=qf¢ vÂ,j;³-³ç•ôÙý.‹»LÑû%» e`dÞî‰ÖË-[œ^»¢ ð Pn"ófiôBžù Æ¥ÞG)Ãî‘zž¾ ô©Özhÿ@¶ÿõÿ û·÷tUlvÿf‚°j»brzáØÖ˜¾ ”MõÈaÛ²òÈÑ›ñ~{ÂrrÈxí缘 ÛÊôru$ÓVë¶%{Xê@käÊi¤r?„ò6d<SΪö¹u+­_–Š2Þ…¿»>ÿ�«m©ŽFÆÛ.°`s—CÚˆðTkýPkýag1ät`–t\‚öØ™üa5°+{ï*íFA€ª¤oÇ£ü !É^²ï‘ì=£ŽœÅt$ª?¸³9·ògˆÂÆí.Yùy¨ì„ŒÏ°Zl— 7)O: ”²ËY]Üàu <­Ú3 þMåy÷>--ü¶Rt³(+voX€²rJL°²Û}˜ „ ùÍÝÈ�ž(¥4Œs·üº(Œ|'Çì‡&@žÈïçRK&‘e ôÖ�Ù:ɽsê6p#×w°¾ï]°lù£¥Ü‰Ôké,ëÕƒìy÷Xï¿bõ¶Ï¬+ÇŸÀÙO0�‰çb·©ÐN=o²½ï£×òܪo'ò~섟{Ìf1ÜV)»i¤otŸ£}ÞçœØûXH['0«&b÷ìs°×Ü)³Ï¤•)wåLLN£3åxÀeN½‘'‡@;²bÛôHžÁy±8$99p’¶2CÆCöÆ•aëÏ 0žLÙZ$leFÝZ“q¥Ô•ç™ RÇ ePš#( 1{)±!Ì$††ŒMaäÑíwc2ž’3o?‘ákdÕ-¤_%(%ãô´+ûIßÖCa+)ã e¼í=Çò`ú²ö»8k^&Zb*e_Â,÷:sR®o`Òù‡X}•®×ཽÈfšv¶çÚ™íil)™,!]¨_¶Á.îÕ¤ïu${Ϩ#g1IéO‘;›3”%¿ù¿»ø…RÊffÍÊgÊøÌù­Í,³ZtÀÎæÜ:v`m6ÔRlÞa%#pœ‹2«ÌVö!Ë|¥]WƒPVN­µ»ÿˆû~¯sòÿë@Ë=f<D@q†f\ª[ðÞ‰²së¶ü°ƒ;á’*Û (†ŽGuX&ÐbeßGb®a|ÇËBfÒqÕß H”ÙgµU¤OW‰sBíÀ|PL9¿õä¹ÍRïÑ)?&§¡àÅ"£Þ9rØŠ¬È¶·0>à<píÁÈÉ!“iÇcö(f'í91;ïRüèˆÐ •›²•Ѻµ,ã#>˜;V8:Љ~1jçSr(çÄìtPÎbýÌûMÝ7Y7‡JãŠ2>0”ñû"$§‡.ã­f¦fÍSáXDY"Æ6’{Õ2²'NÔ9EϸwlV27›À;ÛSb65EéÙ眃Ždï•å,¦#Xí¿Ê:É™9Ï™5ôÍʧf3mÙ±Mû1‘å‡~,méÀ)Íæl™˜=«›y¬– ûöìjeæÛѽ{©ëc™Ýxç”BŽüœ¡½.˱ª:ï#­õÙ>;ÿ%±{ñºÌc'ABVªd‡›œœ,âÙ¥…ýKêwJHÆ[„:p<´ÖO4©_Ue\k=¯(§!ã­e85›’¾ \ç‹PS·S3*©{Gg%…X67Zœ;›š¢J¤;U‡C‰dïuå,cÆ1v,5sžÊj Vrf‘R3š³PýÚÔS™ÍÙ& {V9ó¤PþÃȱVg¾UâK–”B–òn—‰vµlþ}è4­»G¸uÀ-Œí´“&€™hËùßQѤ¬¡œœ2¬ö[+;a¹WlÓ—¡möêe|“Ö‚¤]´ÖcYR×#øR!ûDHjaêÀ³•5œÊ 9%FXe{3�~"Ø !™d[î±ÊIB 2éx3 }�Bš¤Í~‚úÕ>�à¿þ‰w6Và{?ôñ]·éäàŒešŸþà5VÖG^úÒ®›C P€iƒÓ¿ÿû»nM;0è°ùÀýpce½ô›ïßus‘wÊ|‹üØþÆÊúć?ÔhÝøþI]>òûzøw›Û]cþ{ÍÊxN-[–øù×^|ú]ÓŸj¬¼/ìºI¥h«Ÿ ~µËƒ?óÆ×ÿ·ÿúýó76Yèç¾ðÇÿã®FˆåË^ûÊùÀ _|M“e~ñO@'{ÃsÏáG?F£2Žf?BHæÏ|ÕWýÈü»)ãäX™ÅWwäWßõ³Éøk_÷z€2Nö‡ùëžyæþ?ûÿkLÆŸ}=eœìóW½êU÷¿÷ø·“ñW½ú5�eœ´ŒÒZﺄB!„B!„-ÑêW† !„B!„B!û‚„B!„B!„œ B!„B!„rB0 H!„B!„BÈ Á€ !„B!„B!'„Ðo¡Ü¹Öz¾ëÆ�J)Ê89j(ãä˜QJu�ôZ(š2NöÊ89v(ã䨡Œ“Cå€É7u¿â…¦ üÈ“—ž~Ýk^uà»vÝ8B„I·óÚÆdüÉg¿øôk¼‚2Nö‰ÉŸþ³¯iLÆ?óâ?ýò‹üÃ�†»n!0öäÙoøºÆdüóÿÄÓŸÿħ(ãd_蘼åþÝæüñßþ೟}ùå�Ê8ÙzO?ýšñu_û–—›*ðý˜?û™ÏPÆÉÞÐ{ê©§þÅ›Þô¦ÆdüSŸúÔ³_øÂ(ã¤U�À{Þú¿®©‡÷ïÄ;~}þš]7Œ—·þ•?טŒßÿúïã×?ùÊ8Ù+¾í?sc2þ‹?õ~åg»n!küÅŸü4&ãóÛ‡ÞößïºI„¬ñ÷ò§“ñ·~Ç·ã×Þõs»n!K¾îkßòòÏ¿ãlLÆÿ£oûø™ŸýÅ]7‹%ozÓ›^þ›óo6&ãoûÛ1Ÿ39´ ÷$„B!„B!ä„`@B!„B!„‚AB!„B!„BN !„B!„B9!<r”R=¥Ôc¥T¿¡òn”R÷òiuB!„œ8ô5È©C $LÓú‘q?êÏŽà»><Z *¥:J©‰óç"rî}ì¸çü)ój›¬l»v‰Rª `àVk=-(¥n<×ÜÚ6qZk=°�p¿ëöB!¤¼Õð½7| ¥T_)õÄãOLä8}#ÅyŸ½ÊŠúúûât #z©E® ×P]ÚÚ@}²Çûª{l<*ǽcÒØqêÏ~Rõ]+¥.”R{™ý¾ù®ëÓj@Pk½ÐZŸk­Ï姘sPê›Úòòg�º±óŠbíÚ%w�FZë‘ó<:Òi ×ô`”øÜù³¦ÐZëk)këÁX²8óMHu¨?‡AþÂ)åC5̆¯ãœ_é@ÀXŽÓ×8R߸¶}Jùú{äût``®µV�Î� ÁêÀž‘ÙìÒÖn;ŽÕ} }ŸO?’cÒÄqêÏ~Ré]ËuS±—Ïè)¥Üs£ï›ïºv]‰$wL6Töœ9ŒƒÑÃÊ©„ÌBv�Ì´Ö‹Â5¡�x2åìµ· {/�Xh­g™mêK]m�zž{/Ëw¹íqÚ°¬WfzrÏó¡¾ü™æ–`àFþ&(¥îŒµÖãÚ…m·Þv¶gXÓ ÃÞÃjð7tŽß`Ó9¿ÕZOµÖC¥ÔÌlÎyªd;æÎÊB2Þ¶Øì#YͲב²¬üŽ‹ŽMÉrBúÔÔqêO³¤ü…¢á œìÿíõ€é·±‹Vþ~! µž§Êvêòr|¨ ŸS, ùÒnW­³_V—èk4@®_é“3W~´ÖÓ¢¼{üîzå,GŠmÈ•Ñ*úU¦|çk: ÷éZŸHt}àÎø%ê@&±q[LrÆŒ™¶¶²èG–þÛXøÝ[÷cåÆû!5&mbÌztú‰‹t±¥ ý(Úáµ²rÞyÍw}m‰ŽØ:”áèÞõ¶Øy@ÀŒpva„yè”Hï Œô!¶pýŒRô”Rϋкå^ȵPJ͵Ösù÷ VÂiÏ;ÇJXïa„q àB)5µèv ç óB®ʽ{0ƒÄ1€®Ôå\ê~!:ÒÞbÛrècÝ�È@|KÍÐw:«©/åWk=¶*e:†g¯fKàíq~?³A!¥Ô@k}+ÇílŽ×øk­¯í2‡:²[DÿÏe@nm¦@«: µ>—:4’™"v2gÖ=FH¢ú‘:Nýi””¿`ûdë£\É9—0þAÏ)cŒ•¯ÒSJ=”kXMv`ÖaFÙ)!åCEýœBÙ˜þÿÌúIx}Bú0ƒ„Ëâµô5¶†ëW.'ª•RçNÐÚ+gXÉïT)5‡‘·Œ<]Ãø”ÖWwƒ-Kr–Ò`¥õÎlw®~5¥>YËý×®¥4JlÜ[!c̈¼ñj%;ŸÁ¤þ9õó‡cuÏ+·ÖG¤Æ¤cÖ“ÓŸD\Äõ |¶4¦}¬²÷.¥ŒyºF¢Ÿwʨü®%‹Ð¯`2«×ʽïc{×ÛdçA'@Rö�g2ÃràÂFžåš™óÿG0ìÞ‚ëØ!ÂVº4‚I÷Ÿ)¥n<VJ2œ!€; ”X#:Çzšì=€Kgö^Úz-QÀ‰²»mË|´v¬ }i» ò\G2zÊÔéhIdš–™U\^›šÑÏ™ñ¯šåZhWh¶‡³9'D(C)óÚÔì4™‘LÍN‡2SR™'¹úQ%3Ź.¤?M@ýi€”¿àôÉöÿ—N6ªëèN`úÏ3' ¤>s/sË¢þ‚üò¡R~ν”3vŽ`ì{9¾Æ�À­çwú[‘³® ÌÊr¬{˜åY@@Îdòá±csÇG‹³AjkWª”³˜þÈ߀ñëCõÎi·ýH¿ÕysÉä¾ÅzÇ…:Ð,Áq[ll•3fŒÙZñ5êØù˜~ cúç”1 CuÏ+o£¨Ê)êO0."ÄliL?Fp¾²þ…ÉÇê¾k´WÏñœ÷},ïzkì< ˜+ >œ%ŽÇ˜ˆaÁ8nys˜=?Ü}róÀ¿í ±[0¼v`×TÛ€j™-Ccaâ ÿ“ŒŸC #Ó45«è}C:S4'“´j–«%:ÛÃÙœÓ ‘¡”ClvÚî©t#Gk3’©ÙéDfJ*ó$G?ªf¦�éì©Ôì6õçð¸µïB–w °é[d/,á/„ú9vY#€+µÚwÇö'eú2P¶™0ÅzÑר>Ë稵¾Uf?R;)“³¹Ó×Ï`lª-ëfk…™”k'”–³5ýIÕ»­!ÚÔsy~wòÿ¢}§4Oθ­îØÊÇ*ÚùLŒé_kíÚFQƒSÕŸT\Äâ³¥QýŸåNúm›`µµwm'‡€åÄÏVãÊ2ïûXÞõÖ8„€àÆ™ÂÜ2ÁŒ5DÀá¤9w°´ŒÁëÊlŒ»ï“•œ”½g€eÖ‹£hU l깕úÚŽ´ù뎻M}/ž{£˜TºDFF‡wöMfå@¦hf&iÕ,WKj¶‡³9§A0C)çâØì´]#ú3òƒ³Ó©Ì”ŒÌ“ý¨”™"äèOL?¨?;Âã/äÒtŸX×_ú9N#l.;Ê%åkôQTÐרÔê£Dk« rfƒvYá+›³Àæ»ó Zsä,ùž}õ®A›:Ðq'˜$[Ðã© Óô¸­FP–Œé_£Ú½>¢jOUrã"¾39ú1Âjç¼d4��\¢IDAT\Wv¿ÓJïZêv¥}èáLHå¾ï#|×[£Õ¯ 7„»G™®¶½˜¬ïßa/ èº_iê`•9'Z^Ô)V‚Þà6–R-Ú…*ÿµ¾m§Ôë þåhW(o(Ž›ñX%óÜ€[aömâ.\#—šõ‹·³AO° ””]ÖœíÑZµùÒÓŒ<Ü9‡‡0š‘ì+8DøëR4Þ{J$C©©¯9Ž!Y‚Ò™OÀ”~ld¦ lGc³¥1ýXËLÉ,Óöþ¤ôƒú³BþÂ’’þÀ&³ôJ®í…Êõ•Ý€¿ôsDoì>D39nƒìYdøÝ@]ékì† ' vcoçr6ƒdAA¶vpìèN6³È‚+õå,Tï²÷èW›:ðÈÑ{› ï.§4KSã¶dࡲϔÁ˜þ5ÅF»·ÔGTåTõ§j\$W?ìÇzec.5ÞuÆwýïÖƒÞ9ïûØÞõÖh5 ¨”ê*¥´RJC6«”ÿOœs&r|àwƒ ˜ˆö&{c¢”º2ì5w²WC&0ãšF�nä¬wÆv ˜[Ç[`)ÔC˜]Ëý§Rþÿ3Ñ® Œsd—’ÞAfuœº] ,5€'ØÜ÷0§m)®¥íK…WJ]yž÷@Úl—éÝKà 4×öþE/>ËSÆf`œÁÈ›}÷9¸³o·ògˆÂ²â*8³AS­õC­õC”:áé0D·‹m\‰œÙÎæ&î>~–Æ2š%H7Y(~,¥ lðBïÐli¶~TÈL ê"úAýÙ1a ˜Ö�Éo¥Ô@þX`"ýªPÙîØsî±)gÁ²åßQ!Çòú9NÙ�ðDŽ_¡|ÿ³ákÄ ¯±S0¾´†±'nÆEPÎ [’@–»:ïóN®µ6(Ê0à‘³˜þ8Ì}õÎg O¿¼u+O¬=y£ŸçÖVSš'1n»Ë[û€˜­mÀΧd0¨9íÊè'b}_k}DlL;~âúã‹H{c¾HT?láÖ'Gõ$¥ÒïZÍv•Î#‘áDörÞ÷‘¾ë­Ñê’ay*qNp³u”…ÖZ9¿õ` íyÎ È]î9ö0q­€úøë‘ëÜ6»FóÚ9gùeÎ2Ϥ ² Î*Ð¥Ý4‘ èíq؛Šr–Ù?ìØ¹Y2Äêka¹£™¤}÷aÒ¸"÷}䣵gK¥~ µù%S;›sëÈAh6gÊÙœÃE6.¶™#×NæH“³ÓV.àØÌ ýCöC‘½OÖ2SäêÇ…#ç¥2S"ú¤õƒú³eþ @Ìg:¡rír™¹gé|´ì:þB†Ÿ³€ñM*oÇâó5RÏ…¾ÆÎpƒ|k$äl†ˆ?Ó§l¯œ%|m„ê+ÇrÆ9úոȖ·0þáÜs u aR²”q}¬HÙÚZvŒé_Θ1£î±v·ÖGäŽIcÇNIbq¥Ô,Ö–ÑJ>~w=`·l[ßYì}ã»Þ6û¾dØîKæâîÿGˆ‘?CÉ%e‘%¯#­õnhFÆÌœwö-5ë—:ž;”ÁÆlgsNŽX†R™àvÙ°oãàìt*3¥‰ÙR2SJàÓŸ¨~PÈ¡ò5d©ò"r} røt@䞸Ž:@ŽžªãÑŒrOIZ‹‹ˆ/o—íö+nÑ Þ»–-,Êú Çø®·Ê¾Täf@dC€ :”ù(ÂÉÓ¤‚piÚ&©™¹Ðì[jÖ/¨;[*e„f{8›s"$2Gje‚;å?Œ‹ÍœG3SPc¶4–™RâÙEgKC³ÛÔŸãDÞ]ÞÓµ›{ô5ö—‚Ü5bÛÈ&Ô·¯Ã6ý•#ÕŸ6ã"¬ölÂ÷å»> ö: h¡p°{'Í8�"d»h­Ç²tÓw¬Êì÷ˆr*$ôg–¸–ús\Œ°þuVB¶Á+¹ãà‰v¡'Óf\D&¯Ï`<ØGœ�àüïýxcÎ?¹À³¯}u£•Á¤p’Êü½w5'>Ÿ|ù xíS¯Üu“¶g¾÷›þ¶5VÖ‹/|q×Í9:¨?õùµï¨¼…ÑŸûÐGvÒú3$Æ[¿ãÛ+ëñûÞ»ü7WÕ}àý˜?û}Ûßh¬¼_ùµßØu“¼ÐΟ.ŸúÔ§ž}ûÛßÞXyûئoß–|±Ÿ8]̲£¦áWÉÞ ”¢Œ“£†2NŽÙÓ¦Ô‘2¡Œ“½€2NŽÊ89v(ãäPQZë]×B!„B!„²%öý+ÄB!„B!„a@B!„B!„‚AB!„B!„BN !„B!„B9!$„B!„B!ä„P�nZ(wªµžîºq„�€RŠ2NŽÊ89f”R]�W-M'{eœ;”qrìPÆÉ¡ò�À`ðÕÍ8{ øƒ/â«�Ppɾ0øO¿ñÙÆ ûÍO}ŸþÜŸPÆÉ>1xó·5VØg~û“øô¯~ Œ“ý  `€Á ¹g3`:(ãd?è<¿ÔX¿_ÇaPÆÉ~Ðýò?ó§ÿ³ïøöo{mSþ¿â§ð;¿û{�eœìÝ×=ûÆÿìë¾ñ›“ñßzß Ÿ~ò�eœ´È�¸yKs?¼ã…]7‹uþÿ^§±²~èÝ ü‡?·ë&²Æÿâ;¿¥±²~çGße‚„ì7 &‡6 HÈÞðpÞXY/âc6 HÈ^ðæ¯üòÏþÀÿõ{ –üʯ¾× Ù ^ÿ†7~ö/ÿ¯þZc2þñ~È i î!H!„B!„BÈ Á€ !„B!„B!'‚„B!„B!„œ î9J©žRê±RªßPy7J©{¥Ts›êB9HØÇM¿+)“ï‹ ´g„B‘6|¼Äý–ý‚[@)5‘?½’×uL�Üú>7®”(¥n×öäžZ„«�Zë!€€û]?BÈ鲇Ò)]ìº~§D¨'aRøÓwŽ{û€}L[øÞ•Rª¯”zâyW“µ|_dI][óiwiÇ#ö¬#õÒ¢/W…먄½Gl™Û×_DÎ-e‹¿ï*÷š6ê}ªÄb>¡xRêB)õÈéÛ|çdõo n­µýl\ÙÆ;�#­õÈýQë ÀÀw‘ Ü&�ÆZk``©àZëk9¯q¥'¤,œÑ?-"öp¾ëº Þ>@Æ)9wþ,ƒPˆô/�û˜–𽫅üv.zu £Wc{ßñPËÖ&|Ú]Úñ=›�˜‹üŸØ)õƒì»ÌÚuÛI­õÂéïã«…(e‹%84ÐWœ n¡ÞÞû€Øè¿Rñ¹f*}×ó�zJ©s}vÿö`-#c3ÔÜY».V‚7“¿{�ZëYñÚÂï=gÄ oÀLk½(ÜÛÞc.çôäÁ,<åÏœßËÖ-uï²Ï¬ ç(K_þL—ß:Buí9gàFþ&-!Ñz+s[}Ö"Ÿî¬öHk=®Z^Ku´3"Âm¸€1€=¬½Ãµ=îÃèØ¥Öz¦µ*¥î¤íçy5!!¤C™ceË0¶©8ƒUÉ:¿O=Ç–v^k½p÷ÿ9u³åÀ½>UïPÿiײ‘×íCBýSVÿ—x¯±>&FNÿX“ù®í9 ù­õ<CN“e'êæ}WRŽ[–uG…ߎî}‘òäÚZlJ̧•¸>êûVÅ$ÚæÕÑÅ®õD_G�.`ì4õãH(ãó*¥îadï |bçø�@§è§Ž‡üeÀ‚è3)[œ²ÃrΚOS¸®x°i«cþv¢ÞA?©Ä½cþ|S¾z¨nöúµò2ÛòÇSñžk{L|M{KvÿÖz@P9‘‡Þ•�ɹ< L¤Ò¾”>d@§”z(çÜKã¦�.”RS‰f^ÈŸŽ\3—ëžw„÷ Æ�N²—/Ô­ ¯”:ÓZÏSu“—ºÖ½·ë\•¡uG‰t`ã@jèR0¥ÃL§8-–ag„Ê "I9¤£½AbÆ¥¥{/ »,!³²œ\w[Ö9/AhFßþ~f<¥Ô@k}+õêÃØ†¡Öú\êy1vZëk›ú¾í@ìbƒÚnG³[<6ì|Y{hílW®wYkçíïW0¶ñÆ®çÔÍ:ÁS¹ÇŒ^LSõF¸ÿA¡]¾>fz}H¬nÉþ/ƒ`c;­©ÖzšÛ¿�ÙÇä¼ëVèLp`ˆ´œFËÎ õ®¬Mìi­/ߎù}‘òäØZ¯MÉðice—õÇ‹c…B:â»~àŠúq\”ôy÷uEBpeŒ~à JÇŽ§üeyvô™‡ -NÙaçú lú•n¹r=”RsÇo úÛõŽùI9÷úÌu|õD, r¾ÍÊ»”rnäù]#á»9elœ‹÷Øã’Eh‡W0Yð¥ý¿mdÞÃÌDØåF÷ò ®†N¤!gvvÝépG0©þ3¥Ô-€ÇJ©‘Z�'¢ª”z$/Â6öFÊ´ÂpQˆ¾Þ;õ°‚<È©›´Ã{­3s.õî�x\ò¹Ù™Ú²ØÀÓ€[)ç^)µ¬k÷y‘¸iÌ™½çXtf<VvÍYõPníÙ˜Œ{Ç2”š˜õàŒ~3 ÜIpÖv¶s¬§°W¶‡…ÀÝŽ·ÿ¿Tëû£åÔí Ò8÷±r¬·õ?Ö6§ú˜J}Hªn™ý_ŠTÓ—ö/ûç¹åö/(Y§]|×bï`Þ¡µ‘k2œÓ”¥Èñ0ïÄ¥¬?�Îû"%É´µ6E)µ@§•-äøãÞ±Bfó¼:"õKÔ-Œ|`tƒúqb„²§J¬:ÛUÖ~*S(vœY°'D§ì0`ävïtÊ%ŠÄüíA?)óÞ1Ÿº²¯žQ·‘Rjàʮڨ0¡U5欬²’ý[«A1nÝ‹³§È­}p…óç0û}¸kÆ×RQ|'tÌ.#€™%¼rÎ÷½¼µºe\{“~kÓ±m@£,u²ÊÎŽÊ:s>g_gÉqìào #ãBHhÆ%šE›*»YõЬG­Ù˜Ì{G³`ëÎzpF¿QæçØÒ¦ìaéº C�ìÎ`›Yfê‚}LR}H‰þ)Öÿåêc†0ÎÛ‡ °šiÎí_Bïd‰½ë ˆÜ8ÇÊd[§ä(‡ ? 6Ñf$ú8Æ÷EÚÁgSš°á1¼ÌX!FHGÎ¥¬;ùq0Iý8BÙS9«Îv–µŸ“)ä;Î,XR Çg­ãWzýíÌk+ûI>s%_=·nâ×߉¾Ù�jÙgW)æcu_žÃ�2y휒տµ!¸ÜÄy0¡ [h»ÝKáR~› Ÿ1Œ`Na µ q£¾ Ïﱺ¥®]`óÅ–uþǨöU³Ð’‰µû+³GÛ¼Dð†„¹™Q±Aº6eÆ;ã"Çb3㩲ëΪ3p¥¼ª³19äd(Õžõ�gôÛfö°¬:ÇVKŬ¬xëÙÿÄú—*}Hìxxûi÷ ÖƒKv™lVÿ"åLÓ€¯ÑvÙ) ¿z”ï‹l¦|Ú¨?ž9Vˆ•Ò‘NaùÿŒnP?NŒPöTfÖý®³ö«À,Xâ’ë³f!þ »èõ·C{^Ê)å'îò™«úêeê6ÂjÌZvoÒÒ1©×UáÙºi¥ú·V¿2,/Éîód3©È7x¬²—àD^sé¼ô1L èòIÄÚ®%ŸIÀÃ.mKµ+uíÎþK­.õE¹ÇB•üª™8SãB;®°)œ¾ßH5ìÞQ�L´Þ3#âq‰ÌŒ÷Reg\›ƒõx‚Õ ¤£_˜™8©Öeg8‚çK[ϵÖgXmþír.猰 ž†ÚHZböÐR¡€Ôc ÍWΦ%=õÎé‚}LgV§Ê%ÑÇôm[¥ß¾‚É*Èí_b¿ï#©w=‚Éö¸’ãva/…ëëú19þ€7X{Äï‹l—&lx̯;VHéÈ#Gwíj[êñòÕs}Þ¶²öë’ë/ô™™J>k ÀÈ‘ks½þvFyeü¤{gøÌuÚ[7û±ª^ÙçZ1æÓ…¿»cöœí¶P¢k5 (\Â,eÔ�ž`}ú@~ïÃDnµû0ä a:s ¡Ê¹–†$Mó±SŽÝ?j!×L`2Ÿ&2ËçÖ �žHùWr¿dÝb׊ss àNŽÙ¥¢nÝr¸p#ƒ%J©+)×¶_ʽ–gþX=À榢lî7Dªá¸—¸…vgÆce§®âÌzLµÖµÖqÀ•R];#ƒõÙ˜[ù3Da#ñcxŒªÜ§è¬¸NfÁn— Ì`Ðn|YFîØÊöPìrÑž¹Áß1Œ®<²u’{çÔÍn¬›~›QïXÿsç”íícêô!©ã2Iõ9lô1Îûº—û<–÷uë\ì_¤~ÕǤ޵³Y½}§÷Ø´C^9…y/)9ÊÁëd^wTï‹T#fkc6«ŒŠ O›aÇsüqïX¡!Éï¤~çŽ_@ý 94áó¦ðúÄ5aì!ã#×—µ¶v✳Å1Ÿ5ׯ´öTcÓ.zýíT½3ýíÔ½c>ue_=·nâ'Ú h6ú¯X¼G‚žveß#y_=¬¯îÉîßZÿ¨ˆãHûŽY£»>yŽy` ­µr~ëÁ rfZk»?Ò5<©£©ûÆ®•ãË5Ý5žÝL™Üï•Rî'âGˆlújŸ¹oî2"gà\fŸ9g £¨3Ù°t� Øx 9ßÎŒ_;3ãÓTÙצÈõpgcæ0iÓ3¹w_þ¿°uC@ß=mŸ)¥jó«fvÖã֑ѵY¥”õp¿@Å,Øpm(Ö;÷ uuìaª˜x˜qm¨n¡ksêì2ú˜º}H¬ÊÒ±©>F)Õ+f;ÇúyÙÇd¼¯€ç í,ÊjBï*Uö±¾/Rž˜ÝÈ´)ã*×—ðÇkÙµˆ=*³%J§ì ~šðy3ïáó‰ë”™ë/Ç~'{‚Ø/•8Ç+v8wìôçcþvF½sbB±{{}溾znÝ*-·÷õ_ñž!€a¨ÿ*Ó¿m#CpWØ}Ç\Ü5îÿ*¤p;N–ËHk}FǦ9D!§XÍ”Íä ÎŒÇÊN]ÛÐŒLÕÙ˜\|Jµg=8£O¶ÀÑ÷1±Í ý À>¦5BïJ–ç,×ò}‘]±5[™Ð‘yä:êÇS'{ª„¯l9k_Ê® Kg,ŽÄgÝ·v‹Ý±Kwû5–aWŽùDú¯ÔñeÿÖz†à¹…‰²ÚåN€ *ŒJ|ñf/hÒa*x;Ø(½ç÷œ,ÁèÌx¨ìÔµ™3I©¬˜Ò³1%Ÿ[pFg=8£O¶ûYGßLj±ËMºv£émдM;…÷EvÎVm%íÙiR'{*³ügíG® g,ŽÆgݳvw°ÚϰöÛÔA·;Ú€`Á�Ú%3;Bö ­õX–bøŽÍ×úŽ/¿’LH[°9iFX- áû&$m%!ùÄ|âšå†üiúÌ'À©Úá¶Û-Aü3˜`ûÁN m@Ð"/ç`_!§�gôÉ¡Â>æôà;'¤<ÔBòØU–9~NÕ·ÙîcȰ|��«ÝšáÏ¿ŸÛuÃqù†·ý^£å}ÕŸ¢Œ“½âçþ7ÿh×U ¤]”ª_!{Ì¿Äÿe×U ¤5~yö«Ï½ê_¹ëjÒ¿ÿáß}îæoWÞI‰ ´Ö»®!„B!„B!dKóW† !„B!„B!$„B!„B!ä„`@B!„B!„‚AB!„B!„BN !„B!„B9!$„B!„B!ä„P¯{ê•ïzæÁ+Ÿn¸Ü·ü>ÿvÝ8B�àÙ×¾âݯ|%žj²L¼ýÉþÉ?ÚuÛ€oxðîW<xE£2þÅ'_¼ÓZvÝ6B”R=t:ÿ¯zU£2ŽO|‚2Nö¥Tïi<ý_fíøËx™2Nö¥T¯ÓyÃ?~ê©Êø'?ùeœìJ©Þ3Ï<ó<hVÆ_|ñEÊ8i•Ÿùâ—þƒÿOÿ+pü;Ç/}êÅìºa„Xþð³ú›ÿîßxucåýÜû¾„û‘?¡Œ“½áK/}é›»ÿM·±òÓþàŸýAsR‹oÆdÒ\‰ã10QÆÉ¾Ðù,>ûÍÿ þ“Æ œbŠ—ñ2eœì /û²ç¾öüƒ·>ÛTß÷}Ÿüä ”q²/tÞð†7|íw}×w5&ã?þã?Ž_|‘2NZå�ô¿â¹Æ œ~ô…]·‰ ¾ñϽ²±²þÍoÿÉ®›CÈÏ~Scþþð=¸ëæ²I¿ß\YÓé®[CÈ]47î{M/þ!¤Ï>ûº/þ•¿òï7VÞߨœßCH<ýôÓ_üú¯ÿúÆÊûçÿüŸïºIäà‚„B!„B!„œ B!„B!„rB0 H!„B!„BÈ Á€ !ädQJõ”R•RlN¦”ºQJÝ+¥:»nÙ(g¤ š–#)“²DŽÚZrè´aç÷£Œ“£úS  i¥ÔDþô(ëFʺj©®§¾¥ÔÅ6ÚÕB;*ÕM)Õ0p«µž:¿_(¥)¥´Rê‰RêÆ9Ö—ß&Å?� µX�¸ßõsiŠ’rr;~ŠDäìÆ#G}9vrrFâøä(%'©ã�e‰´O™>¤æ}B¶¶#}“íÓ¯äwêÇєϼK?&$ÃÎñ듦ŽSÆ›CsnéyTÒŽûlÎH‹Öú\þYû݉‘™ ~vp½ü…ÖúÜ©s/rncíj¡Uëv`¤µy~Ÿj­€çô”R9¶kìs»”ûŽú\À!wª.eäÀ|×õÝCBrÖƒqZÎ?Ö999#I|r”’“¤”%Ò.%û:„líÀ\úô3� øP?Žˆ}æ]ú1^– ö€ï¢ÈqÊøsHcÎ-QIÀqìº‡Ž†¢Ñ�:¢hö·>L$yV<_n¨”º“sÎAö‘ƒ.<Ž„v­¼ÐZÏ<×+yèyÎsË@aöÛ½·=o¬µ^¯õÉhÕvyê5sîÙ“ºØÎ¥S8žlwªÞ©º%ÚÕÐs:S—k�S¹ïB)5“úCêæê­íDŠ€ùûèqÞÅ…÷!önŽÕ»ZÀ<ûµ xäÈSþšŒË¿ËêÏZùUe8ó¹Ää,ålw¸{N&^Ñ^­ÉØ ¯oSŽRrRBŽ�ÊÒQ“Ñ'÷Üß=Øwù{ig›q©C´Èh߆ŽH;ºÖ×ZÏ•R#�ZëKP?Ž’¢<Ž…úü ã\›ío£Y¡/B>¼÷8û€ã¤Ê˜3w¼é)#k̉t?Qf,¼áce<“:úsòã¾­%­ò¶l0â@îŒF¸€‰F…ÃF›‡Î¹÷<­õµMÝ n²'ÈŒÀ Öa—{ùm àB)5µ³ 0Æñ +ƒÚ‡L”R2º0²fîiáÞSçZËH äDÊîJôy¦q¶«Pv@_)u¦µžÃÈþ…ü¾€é8zJ©çåÞ©vw©wÆ3Oч' �Zë±Ì&Ùä &« ø|ú0Ïe Œ{¥T§ì è@±ï² óΆα9¶ì`,D† 9JÉø9’Ž=X~MÎ!(gö¸3ðžß”³-àôÀ‘µ+¥ÔXlu«™åKy»‘‰k˜w²óÛ£¨œä§,=®.'f”Rç2à±Ç­ý¾‚‘;› ë¯Se'Iõ„tÄ'Ësi{êÇñ`ewCrócÊúÛMÊ0´Öc�ãÐráÔq©?eü¨1挎» ï¼Ê˜3ê#>Îñ±RÔÒŸS÷µt"¾�°™íÊJe–dF›+Ý;³}•¢Ñ§m>Dl°Ê΀<.œ6‚Y®2SJÝx¬”i­gŽ‘šÀÈË™—¿‹·,:Ø7rÍ\ õEAï\::s/×\#Bf»î\K †v ¿ ¥îKýPJ=‚ѵiF»ƒõά[ ÛÉ…°‚àøŽ�·‰ûôž‘:œÉ _g;p§µ>“÷=†y¦¶óÊ‘OÉxPŽ2ʯ,Ù&GÎFrÞ½RjYÊÙv¸™‰¶K?fÙw­õH)5peûoÏäJÈÎoCŽ€´œäÈJÖ‹Žví`FV°ÜxÞ9nÏ¿töHŠö×�¢egV1Õ¤ðêˆèã\VÝÜÂÈ÷�›Ëâ¨ÇÃ4"‡Ñ>ßùÍGŽ¿Ý¸ 7eüÀ©9æLÙqeÇœ±q]l,œãc¥¨«?'=îk;CÐm¹€yØPJÍìXS4³ñhsÝ{çP9m9æhó‰p³\`¬¥»Ìaö¬q÷˜ôš[ûž Ái;«3ò̶»å—Eô`t·,d®Õ.» &‹ÆÎ´Û ·¾!^kwF½sžyÁ}2¬þJ[0Aûål‘L8Øì‰ÜSÏ0÷ý;SŽ‚2^`Cbå7,Ã1Br6„qŽlÖëÆÙX)g[åÎs.fÅ6ÝÉ;±®<¤ì|[r””“rdÛAŽ—åûÕZß*³gu/7“a?¥rÙ%lqŠŽœÃøwòÿbb�õã¸ðÊ!VË«ÊYÌßn[†kA?šsÆìx¥1gFùÑzeøX9TÖŸS÷µtf[bËvcL©Ì’X´¹î½shb6çh£Í'›hiàÔú“vÆr(+dD:0èN–°¹270QJMa: Wv—{š8F5×A‰¶Ë)c„Í”ñ²Ûªwªn9Œáù"”¼¯+íìù µHg¥Ì†åËÉ$GŽb2îâ{Ö9å7!Ã!brvƒuÇÂfûPζÇi;2Âj¹¸ÍµóUðÊ‘CTN2ŽS–Nµúp]›—%%ËnŸˆéHÇI€d º~õãH ÈaU9KúÛ5ʶå·õ¥RÊøqÐÔ˜3öŽ«Ž9ƒå—¨—×Çʤ’þpÜgØéW†#™@îÈæÛÿ”RO°J™Í dÞ;‡ÊÑh'Úœúƒ®a g0™te¨ƒU+œ™2ؽÅ.a–º2Þ…1Èc˜ôl÷«Gs¹ïÜ»€Î bGÛ%„ÝCb&õ³©ìµÈ¨wê™çÜc“%Vü"TƦ¸Ïx€Í€|7ñ¯P¾3;92å((ãuÊoS† ÷÷Éä¾=`)ãWØÜ‚r¶=Æ0ºßÌ ±ÇaÁ8Á½‚6açƒ$äHËIê8@Y:.œþíÆ¿ðmL_E†³Ê.Ò„-NèÈ#û»]æ†õ‰xêÇqá•Ãä,æo·-Ãu¡Œ{;æL[¯•¤†þp܇•R]ëpÃÉrNÉÊ`r¢ÍS­õC­õC¤7ÝnäÞcÔsú:Ú| È»¹†™IÑ0†l3ƒ25„qH5Dfåø :5Œ,L”RÚq\ï`ŒÒ@²Wí’„'ŽÁ[H™˜ Ù‰Èåf9¼ðFÞlölWîgï?ÿORírʆÔGÃC73×ÖýN)õØiã ÖîT½3ë–Ã5�»”ľÏ)Ì@á±Rê‘Ô»‡¼e¶ÛÙ­œ½Zöž˜œ8çLäøÀ9n—gM`˜¹þ²ƒ¼¯  AÏ#$ʯ,Ã%¡Oά ßË}ÃÈp¶Ì›œí±/S¬luQ!}õ_#aç?Œ–ä¨)(K'ÅÆŽjÂíÛÆ0K5€GòÛD)õ/3ìl°ìœ>é~ ‡ŽŒä÷G0ºx^Ư¦~s„e<ÚçGü Ïßö–]¯ +¥®<uäOA? jŽ9ß³ãuÇœ1<5vÚçõ±JPZ8î3lå+ ÄÙ¯Æ eSJ› tídå,-oúÞ�–›/Tõ/u´ùTp÷¿EÜHÜ®»Æf:öò\1f ­µr~ëÁf2#º€Ù?ÇWþ€B€Œv-¤~מcçH|&±zçÔ-Ñ_”¹töäÂl’Þ•çë Ø{ëî½ÊìEº×¤äDΉ½+÷Z×9¾.ü{CŽ2d<¥[)9­+Ã9Ï/$g#È— #{lŒœíV÷3Nõ},,)‹5ëæ•#!ußàqÊÒɱœ\+"2õ°é²3û -Î%֧˶B@ úq$„dÛ9^©Ï/áo·%Ã#D>0™:ÊøÑÐÀ˜3t]Ý1gô¾%ëUi›´úsòã¾meÚÙ9Íj0‘Ìù“Œ6׸w.•fsRC´™´Žý’ËÜ9FHÇzϲ|ÇÁó]ê0FZë³CîöŒ£ñ„œÍ"×QÎö�Ép²KJúe—²4EHŽ"r’sœ²Dކ„ŽÌ×P?HŠ­ù"1¡F™”qR—Öt I«Žþœò¸o+‚±hv"ƒ)'³$•RéÞ%ÚV)«û±D›IëÜÂÈ]n˜,Ù‘ÎÿbàÉÓ¤ŽqyãŒSΚÌj‚*KÀ¥iŸ€²tˆ_i—v%3©ö¥ì*ÐÖ’ت/²Í±eœdÒ¦4êcQʳÍ%ÃG‹Öz,ËË^›­Ù©CEöЖg»,~Æ 29(ãd‰¿3˜¥$Gáü‘“cŒÕ2¬¦e¸Í² Ù9ôEȩӦÐÇÚ=�`ú±+pñ…/îºM;3’ûÍ¿ùí/5VÖg>«wÝœ5D^(3'ÎK¿ôRceýñþñ®›³eœ��¦•¶•ñ³(×eZF*9Læ š¹Ïâ³Ë·)¿Ô ’ËK/}æ©w¾ó+ïÓŸnÎïɾIñÙÏ~ö©÷½ï}•÷òË/ïºIk´¥ìGvË�8ÿŸÕ-g¯|í«?½ë†âò·ÿ»Ï7ZÞsϪOïºM„¸|ðÿðÁ]Wv9oä;/„ì-oÇÛw]BZã˜?û­ßú»®!­ñ±}ìÙøØu5)…Òz¿²!„B!„B!í±­¯ B!„B!„Bö� !„B!„B9!$„B!„B!ä„`@B!„B!„‚AB!„B!„BN !„B!„B9!^¡”ÒMÿyóÕÛvÝ0B,mÈø›ÞðÊ8ÙÚq¥ÔÍ®ÛE�(¥ú”qrÌPÆÉ±C'Çeœ*�@ÿ`sxÇðÆ]7Œ—G?ð—+ë‡ß1Ç»?øä»n!kè˸ÝuƒYç­ú×+k:ü‡øùÛÿn×M"dDsùîðA|p×M"dÉÙÙÙ ?û³?û\Så}ë·~+ÞùÎwîºY„,ùš¯ùšÞö¶·5&ãßó=߃Ùl¶ëf‘#‡K† !„B!„B9!$„B!„B!ä„`@B!„B!„‚AB!„B!„BN¥TO)õX)Õo¨¼¥Ô½Rª³ë¶‘f¡¬BÙìÈ)Ó´üK™ÔB!µÙj@P)5‘?½ʺ‘²®¶Ù†}B)Õ0p«µžzŽŠŸ*§ä^>cþDžãÒ™ÐZ,�Üïº}¤9|²¢”ºPJ=re¡p e…BŽ�±å;º÷Zÿ£”êKŸ2)þq®aÿÓ"ôÇ·GÈWWJu 2~U¸Ž:@!¤u¶ÔZŸË?kÏfIG8ÐÝföŒ;�#­õÈýQœŒ+�Ï5÷�fZkày˜ç·ÒZ_K9t¬Ü˜:²ÐSJ¹2CY!³ 2ßὋýÏBþ.~á%Œ_8v®aÿÓ"ôÇב€fcÙ{¼¾:Lp.2~`PÚSÈ^ÑF¦kâ~ôÁNÊÙöy°›ÈìX‡T¾¡\h­gžë�ãl@Î-žç–â œ=Vø=Yv¨n2£ÚÁÊêÀtÚ‹H»mYc{^¡üëÏ´ ç8u.}ù3-\ÓÐÕZßÊóX(¥Æ�|ŽÄÆñ)! Þw“Cù÷²<Ç06%+בògr?Ê Y"²ëf Œ´ÖãÀ¹÷06nœUx³õ´YC' öNß ¸Y²=˜‰“ HBŽ/�3ÐUJÝIûϳ*B’˜/â9g! µž»ý€ÏV'üœ>Œ`}…Œ½ž¦ê–éÇØs¦(ø`uû¯ÌçºÑÿHÝÜçk'§FnÙÿ4O<×÷”›ŠŠ2¨w¶?’q§Ṳ̈è²Þ9õÊxÞ^ÿKžIW‚©ÖŽŒ`ú¢1u y`ì κçíÌi³] ÜgÃÇrŽ �t¬<{®õ§ÖE9.ãËï¸ÞA9“ã²$)¬ü³Qá8å,Aë‚2kõæEL°98»‡éÈú�îå…Xì ´ç<²¢¸]‡òNVœÀcÈòÈN‰²Cu»û=vîùØ­“Ónû·=ïÂS·+¹¾Ììjëõ­õXk}‰‚絞¸•(xßÉ"ùÊ�Ð=åhy&®,Üa% K9O¼ë ø§Lȵ÷ØÔ¡^Yq:‰¾8WY ¬‹Özádò�qùÛ§,$[×[[ùã:ÌÀ –˜/Rôeî±êßU?²Õ±²o`ú‡é€›Â¡ësük»ï°LÈñeZóU¤ü>LÀdé¼³ÿi‡þx®/øýñ:2^ןNɸ•­®œ;€/tSõÊ$$ÿ¾ ú«ê@ÔÈd ú1-g’¶Ý®ºløX‰iÉã Ö&Å@_~—TYýÈo5i5CP:é�çZë™tV §`RægJ©[˜Žz¤µžI'7–}eú�Îìì»ü]¼åyaöîÀ¥3Óg;öëTÙ‰º åÞËY?¥Ô#岃Í)s.ÂuQ˜!¼wêagx0Y[9ØϲŒ±rŠ:0c9¿—8~Ò8²Ð• ¬½¸‡1:@ä]'äpª”ú¼s¯Kw¥Äd¥ã[YpJÊ É"‘…T6;¤T’\˘ŽÖ™Dú""+w0öÙfM-}§°ÿ/Úê`Ù�†�î´ÖgrÍFO×'ýh+î[¨wÌ—iÛW�¸õüÎþ§Ajúã9þrׯ#ã3Ôð§S2îèGh?îX½rðÊ¿”7—�ã-VAW7¨C(“ j3S×2[]Y-fuËo1?&šIêœõeÜ:Úsäü¨T,Û—9å¹?šò³">–wEZÎqú`ÕñÉQŽ'Ê,f‚wàÑŸ*+Þríe•ÕW¼Õ¤í%Ã0éª3`í%¹ÌafãÜß,—›Úé C’ÙTX†Óƒ�÷\û¢sËNÕÍmKѰvBÇìR�WN$ºÿŒaŒR³A¢6Hj56xHï2ãçX>'­õ­ìG` vî»ÉaxeÅ:úÀRî�œQVHI®`lqFžÜe!v9˲ƒ°PJMe°ÖƒÉËñ¾RêL2$r‰e!õ>µº%ƒË[™(Iݯà Nh­Çv‘²ÁJr0Äúû Ùqe¬ÌR›”/1ü;÷z ^ÿáõeÚöU¤ŸéÃì!XüýO³4åÇäÌë;eûþsï&ü阿#wŒ#䫟Ãô6ë°¸­u 6Ãsª”²Ù–6Èz•;’sç0Á½çE¦c~Œ{ìÆnA)5·¾JÊ—‘@µ hØr¬ }$OÙ])ëÜãØÉ+ˆžæÔ-ƒØJ£±oÂ)uœ>X5"rdíGLŽcX½€”ׇ‘Í9ŒþÌrÔsî=–ë0:ö0ó½EW?",KcÉ ´AÃ+˜}Y)g™´\`³#t—¢¸ëÄmvU(*d´:0ÎäRjì8!ËH¶óRCެo/•2uó10QJMaÌMw3žßsË/ûe±.d¦ÓùÍ$•õøó’ƒr‚åì °þ>sÞu[ÏzCVD¾¯ ûy¸²@Y!ÙIJΩ›¤³`GrνRjy/0ƒ ‘þ¾µ²K\߆ýmÛWéÃZ}ƒZö?ÍÒ”?{Î!<JƽÛö§}õ±Ôµ 1ùïØejRöVýu $2ÁèfÎìPwg–ÈõfS˱P&)öe® ™®Îñò2hƒ+Þ÷bn«ÒRÐ+OHŽ�$ýñ ¢?s}™yÏUW¼åÚã:rÆo5h{Á1œì ™½s׬wä5p]”_Ón3>.a{6]ܾì)»#eÒüëÔÍ‘:s;#1ÒSH$\êo—sd!e,J®u·³aîLç�~¡¿B¹ ˆSç ÞÀÈ弉wm©¨!YéÂÌz»Ó•Ê iovH!»câ8UöÂñ]3„qfF²\`q² çZë3˜þ!6ÑrÒ®#&Õß`ìá•·3á^ ××õ%šð“*±_¥ ¿OÆþ§yvægºw«þtá>kíÀ²Ö3IÈÿ#ǦØì›µB¨Æ\ö\¼‘@©]ŽëR5[4H¦/3„ l?–€žð fÐFV¼eq™½¥7?\Õ„ŸÕè…ôÁ*“£ºŒ±Ú›Õ®Œ° Veä¨ÎŠ…Jr&ßO°r4†d^SÎòh5CPÒ4¯af Ýõì¥ÔP–V±Ú˜Øñ&Ê|mkŽU§Þ—™žk­õHfÒlGjÊ.€'’2ÂÊ)ÑRÆ­9„Ê–ºÏ"uû€7K9¬¢oÛÓÉ,gefÓý¢Ï¥Üÿ‰Ü{ŽÂ²™ ®¥>³‚ñ¿Âj ‚m«}Þö}ØÙâ6—ëXGè6£İÀj£jë[‚ï:%‡XÍŒ°r\&Žœå²&+²¿ŠÝÇΤ,ëUÐ]Ê i‹¦²;BY°7X—Y»OÀ "$úû‘ÖúZ)uŽÕGæØ dym5Œóós¬c—Y_©¯”$ü¤÷�øf¹—¯ÿ€ã´Ûÿ`|‘k÷XÄ—iÍW‰¼ö? SÓÊYÊÇj`VEÆmßPɟΔqÀØþ;iË2 MÙ…ÌÇ’ÿÌÇU¬ŸÛ>†:P»'Ÿ]֛ʪŒÍ$•w–ãËt Ë¥ŽWŽ.ÆÈ]ñ]1‡í¯JKA¬^9Ò/<—AlÞTžwq¿¾2rTõ=•–3®xk†¶— ¯íQ8~‹xGv¸î›©Î·…s쵑q߬s|Ø6_³±¿õ`3É[HýË,‹+Öo&ýRj¹Ïˆ8i£À56¥·+u,îÇb6ßÞ$Ì4dŒcï:%còNÖ­œOV¤¾Ã,PVHÛˆ\Ú쎡8#ùöB¤œ…RêJ¯™¬Iý—ÝòKÚp20œLf`œ(™¶Ø~(jc9N†­•íö CßïU}¹ö¼Ê1çœÖ|ÄŸ7ûŸ†iÀ]—òÇ]›\JÆ¥?èTõ§sd<ölêèžSFÈWÊÄlÇ7�¥Tb†U?ÞÇff]¸™¤sß%Ç—¹y×CŸ¤‡ŒŒS Ûo×Ί·b»¦2Ùo“aδù²lm?+âcÕ>X5*ÉQ ¬¬\À±×Mùë1*Ê™]ñvëØAïŠ7ÊY˜¶— Ÿ*v&Ñeîk qÎP2ï8QEFZë3:ÇGHV"²:NY9”R]¥”–Lë>Lǫݽ”dù€†édíq›¥<ÉÆ°ƒ—;Èì½86ãቔq…üM]®a²-ìWøìFÈ÷R×Ç0²[8~§”z¤”zãT1ƒ†ñõ?2X]$®cÿsÚlÍŸn“ˆÿµHe£PJa?n°ü †Eü�ë£Ü)ó¥ø>$³;áÇXlV§Æ¦_òeì\êiÉ–Ý•ëž`}ÏÃ;§Î÷XeÁ>q–ª7ág­ùXrï+Ï3ä§V™ûã9¾¼`— ûö÷ Ê‘è-{"e—ÙÖ̲!gR¾W–$ÈgW¼=½^Êå,Ö3O”[˜A¨€Fø|_^«M“ÎÀ)¦ÉÖA:p»ßÂr3×}…²BÊ"ïY%Ήe!¹×z³CP3IîãË‚ÁlŒÜóÙ^f`*ì~×~p€ÄaÿC*°UºMšîC¨›ˆL¨À±TS2˲MeSk­CäI)±â-wÅ\ã™Þ±irMê8}°’DäÈÉyÔ——ë¬v¨³â­Dûª¬~䊷š0 ØÖp‹àÙÔòÙ© Ù‘3ÆzZ2!dGh­Ç²¤¡øû,q]HwGûä';a„•Ýg¿NHKП&dùX ”KŒ,©*g9ÙÖC'/g�`øÓÍ8ûÈ®›´?ˆà1H´üð;š{ ïÿè.ÿ}h3Ôäˆi²+;`©fÒñ2þÃÆÊúýÙoV¾–};i‹ŸFsù<Ùusƒ:w|ô£}úû¾ïû+ïw÷wwݤ“c›ÁøCôÁ>õ©O==5µÍ"ð±}l×MÚ ”³íòàu¯ÂÏÿÈ/ãéFKUxÏ®FˆåÙ§¼ç_üÊÇŸj²LÊ8Ù#:x~Ê88ø"ûÃâéγïùÕù Ê89V¯ÅkßóËøeÊ89VŸûÜçÞ÷c?öc”qr¬,¾ð…/¼ï_ý«E'…ÒZﺄB!„B!„-Á¯ B!„B!„rB0 H!„B!„BÈ Á€ !„B!„B!'‚„B!„B!„œ B!„B!„rB(�ýÊk­ù‰l²(¥(ã䨡Œ“cF)ÕÐk¡hÊ8Ù (ã䨡Œ“c‡2N•�&MúçŸ{Ý�ø®]7Ž¡qó—}Ù€2Nö‡ÆeÀ-€á®FŒƒM'Ç eœ;”qrìPÆÉAò��ô[ÿ·8œþ&Þñø“¯ÙuÃqù™ø+ëŸüÔOáÑoýeœìú­Í•5œ·?¿ë²ÆO¼ðBceýÓÿò¿Ä?û¡Úu“Yãÿ†_o¬¬ÆwãßâwÝ$B–|Sïì…÷üÌÏ>×Tyçÿñ·bú¯ß¹ëf²äë¿þë_øñÿñÆdü»¿û»ñ‹¿H;NÚ…{B!„B!„rB0 H!„B!„BÈ Á€ !„B!„B!'‚„B!„B!„œ BvŠRª§”z¬”ê7TÞRê^)ÕÙuÛiê!a¨„BIÑ´¿q¿ƒð'$ä@#3QJ]íº.5ÚÐ0p«µž:¿_(¥)¥´Rê‰Rê¦p]G ¬=¾|Zë!€€û]·ä#ïób×õØ7|:âè¾û§ï\Ô€:Ò4ò¼ÝwqRr¼KÝ èG_侨#9Ný „rP”ñ5ÊöËÇ0¦Ìh£wÌéxÆ›•Ç£Àáø fÐF4ùP"Æd#3ÐÝu]jp`¤µy~Ÿj­€çô”RçøÀ\ŽŸ¸ŸÖú�޹c;Bæ»®ÀžâÓ‘ŒCsîüq›¨~�Ô‘&ÑZ/ì{ŸzeË(uŒ]ê®O?ò›}'—�:�ÆrœúA‡™ª„T‡™[iJú¥úåÜ1åû*Þ1§õ®� ×T‡áO<ØuÚBÜÆŽ´Öã åØhò0MÐE*ÞÿÀŒs:tPk=TJÝIÏA‘k<gòwÀBk=sÎëÈïÈQfÀ§¬N¡ìµÿk­žë—¿×©›[­õÔSV×ÞÏý·[§Œg×Ðs:6—k�S¹ÿB)eÛ鈺Vç´Ös¥ÔF×\¸‘¿IM|2*ïf){ðÈBJãS˜TÙÎy¶Œ¹œÓ0öÔÁ=þK�þT¨^NÙKýÜÛ{<·îÏ<¤#¡krõ Ž�È{W…÷¼&#™÷ɉ•ÍŒ£ Àk‹­¾YGÜ×G�q^È+Á²Cm/dru×ól‘* 釴Ý}?Ö¡Q?–Ïn"ÿ–•eOY7XÙÜZÏJ)u/ådùëMùúuñRã�Žše_d!³®[Ó¿6ŸKSº_u¬;vªú•ê—Sþ²œSz}•DùI;æcyÆÁñpä¹Äüé¾ü™zŽ51öÜŸ8Ú€ Ç9°4¼=l¾œ‚Ñd˜>€ÿåN ekè”R ×k­¯mzn]'ŠìŒ€+¬ä«Óñô”R€ÉDŽw¥=wŒì V†¨ #Wçòo; q)÷¸1²×XÕ«Â}ÏÅV®V²=UJÍ¥ŒÔéZþcR§žRêùº>ÖmK´Öc™±±Fú fær¿"s9§XƽRªSfI6‰ÈèTþmeaŽ’rèëÊqשsËöʙ̸ÝH]lÙ–Qä¸mK®~t�ô•RgZë¹Ü;v<Y÷ ‚:"÷²œ©ã”eé@qHÉ0` ˆÌ+¥¦vÖ7EBN\ù¿€yçPJÍ rduÃÚ{›õ–²ñvÖ{Ž•3?’²beO=u/ö_1ÝMÙÔsÉ!¦¶}˜AÀ¥üDý0m;߸vvŒ ¬oÐÌj…²Y-øúr­wY&¾±BjÀqBƒ48îÛF]·¦m>—u¿ôX›ãð Á~9å/;×_`ÓgMù*¨ão#îcõ‘7Žs—ÛcuÇ£N9{ëOl- 覗z¢É©ÙgÀŸYRkÆ>£Î•¢ÉÇ1&q#2‘‡3›iá(ü=€KgÖøæ[Cw%×Yƒz#Ï# Æ]ÙŒ‡b0Q˜ÚÁŽÌ”Ýx¾Nݤ“¼pd.³A=§\ûëh<‚ÑÇ\‡Úfä„°†×ÒmÆâL)5—™½[¬+}”©ñã•Q`鯿U‘áSæNÙ19»±ugä¢`³£Ç3ôãÚ:RÇVº<žY÷1éÃô�÷J©k­õ¸‚~ dŽŽ” Ëi#˜e!3¥Ô-€ÇJ©Q¦ß•ùÍpêfÿi³KRº%>Ôüngáç”]¨»·ÿr꾡»BÐn¤žKæ«Kõ!òn6ž´~²7ŠÇ¼>uîjO¡ÙY-ÑUí®”¡›YöÆX!5à8a7”qoRÝ%ô¯ôjŸb=JdMåd‰G3½«Ü»p]•Ì-ŽÃ=$ú唿 ˜÷·á³¦|•œòþvÐÇ*1Ž‘ã/„hj< ì©?Ñz@P œu0§�®”Rc½ZO›}Ne–Tž±Ï¤R4G1&¥¸µï°°Ü«[0œ¶ó± af®�#oSÛÉ‹3}'5ÊE9Y:Zë[eöÅè…*u›;3"6Ó«èĸ÷¨"¿A£iuLê:€ låð¹ÔóNþ3®Ü›®>Au¨$‡™Ää¬9–sÜ[/ëPÂôYWNY‹œã™uÏÁ§#CÇÉÖeã„XG·Œ~�ÔKL†ç0{ø{ç$³;JÈI]|ºuM]ÍÎ Éì¿bíFƒÏ%؇H¿i3]NR?œì 7háò©“« œ2lÚ¾¦Xeœ�æÙ÷±™ÝËj‰®²Èhw Ý|c…Ô8€ã„Ý’ñ¤ŒÖ]Ó¿DÙ¹úZ-#'K<šéíÜÛ—U–CåÌ-p^–¸ŽÏZÉߢ>Væx8E¥LÖÇ£¶{Ç62o`¢Í6�hkKlö95û]gÆ>‡JÑäcŠ“Rø”|9«è®â §ƒ•aéÁ –3[00;3Ì©Õæ¸Á a‰ºÙ  u’çhVFÇð|uIŒý•^ߤ8í¸ÁѵâLéŒ}ØKã{`¤dt’rX—1LÐÁ._¾.y<T/wÖráù=u¼©¶­éˆèÇ Öƒv9¨%©ò;u$€+Ãj}#›A8É,ª´œÈýPò½´ñsú¯1»Ñ„þxû‡>üƒ†“Ó 8Ø@š]aó¸pZȧÎYmPdŒLÔ9LÐf+‡µ ^"«%µÊ"Eå ÝL6Æ ©q�Ç ;#$ãIEú+;Wÿ¼«…b#3K<•é ²Ê2ßIÌ­P»¨_~rüál<¾J%»„•=´½Ô—~›Êï{íOlã+Ãké¹vI“<œÐì³ï«9¾ˆ²&?Áʰ6ýµ ªû"ØÙ;á"nðöR@H=Dñ§ã!NÀ�ë²p` Í×£¬œ¸rgÓÜírÝ"ÎàõÆ)HÊSFÝfrß)dùDEg9tÿÌ`»8c×…ÑkW—Xï¨ÙëlZ:œeaÂötÿ˜$%£@E9l�»¯åÆi—<îEäÓîƒ2“v[§>y¼ ":Ò—{Y½½Âúr—ý�¨#EB2ÜÁ*«Ä:‰Y_.)'V§nàÉd({oˆ?åÈB/T®¯ìÌþ+FÐn4¡?ýpŸ§¯®§¨0ÇÛ ÝÂólr|êX–÷2ËÉ31?–:ØQVvGÉq‚ïz7uâUšØïÐÅW^jÀqÂö‰ÉxPFKÈQ(»*¨%e4¦kî0Ù´¥¿xïÁfz?–`üܣ߭­ªõk“Jþp `ÓW©Z~®•ÉðBílb< ì¹?±€àá »'ƒ%4û\üú¤&OµÖµÖÑð Ì‹«jL;Zëk½ú<¸wdß#Æ$ŽRj ”Ò0÷D)¥=Ææ¦cÖ�žÀÙ‹A°éýÚ)ËÝóhxG6‡™åÔ0Æë²¡ºÙ¥ vàæ¶{c’ÂýعÏ�ù\¸qqrìÌí#)»‡õŒ¨‘\÷Hêqîê´³¿Q&å‰Ê¨sNi9Xc%OZfØrålÓLäþ±«ˆ/¡�ðDνÂú‡‚ÇÛÒ‘ók˜}'0ƒšyá}DõCêGÙÄ+ÃâHa? ñ=`ÞåRª[Ð +Çv†;%GÀêil¾—1Ì`Qx$¿M”Rÿ2&Ãzµ™¼•õ{lö#¡²Ý ¼½}DLwç³9Ï%ÅF’Á)ê‡Ïw—,æúÔ1_µóN/ŠïÃú1b›C{‚…ê;N^óÎoåÏ9}. Rã�޶HJÆ2ZZŽ Äô¯LÙY2Y¥Q›é}&uì«ð¾±U¨3ÖŽÖûØô+Ã×HõËA¹„ÏóU*ùÛ)Ë9/5Náõ”RWžg6hb<jËÇžûÛX2<†y¸3Ùdr� / :—´Ò�×ÎìsŽ£PyÆ>I9^¨j_z¤”ÊF˜6b|æ9o¯#Æ$ŽÌÂÝ&ÎY~á+püaæí¦žkƒÎHݺ‰Vcçh�Ñ1ܸt—Š^/Š™²Ìá¦Ã/^»ßI™ÍfI„Lúä1%‡1YJÉ™ô' ­µr~ëÁÈ“Ípõ‡‘ý¸F`YEìx›:"ýÑHmîÑh¯ ê‡<ꈟiȦfØS:’#9g¹GçØ @n?á»v¹l¬8K•è#¢2ž²9Ï%§}¾>D¸ \sŠúa}ñ¾ìÅd÷$³4áSO¥ìK˜÷qV\Òó\/H©9N°òaï;”¥–ùQ~ݬ—y‰:†Æ ©q�Ç Û%Gƽ2ZRŽ|õ¯²-J)›AXi•Fà™ÜÀØÊ!VËŸo×kÇ8:ý’÷©çxe&å/çú¬!_%V>òüíä˜Õ¡ÒjµÈ˜s„ÀGeêŒGå„?Ñz† 5 XE}}¡Ùç`D¹û\JE“SŽ"bLv‡È°MUî×HíÞk¤]gðÌ|j­ç!*ËÐ|ÎÎHk}¶Ï†—4†ýâ—ËÜ9–:~„tDGöËè@!GDD?úàõÃÉ,¾ßÕ~�`"™1Ÿú݉,ï;¬|á{¬–;>)d]Û%™Ë…Y-±qBޝ_7C7ßX!5à8¡AR²™…”QÔXÒ¿DÙ9«€ðj¡”ޤ²Äƒ™Þm­„pÞip¬ÍqxiÚö‡[+¿ÉñplÌ™¸®Êx8b‚ËèjàXlö9•YRyƾDÝKG“m›!bLvJ«ýÊ.£:(šÔCHû?&Ä–Ù%ѬÕ¸…±ÍvÙ,`f®GvSéØñ]?»2PGÚcÇ2¼«vvµlÞ} P?²ÚÌB•ãe24Üë|Yž·žód£&2ÅcㄜŒ™Zº™ÏÀ—ÉpœÐ,™²WÆd´ÖŠ€  •³Ú'¶Z(ú\2²ÄcÇÚ^-ËÜâ8¼QyÏËot<¼Í÷}(þÄV‚‡Ž6Ÿ$/ž*ºÑ±:H3Hy“¢|…œ$c¬Ò÷·*§v (©üv¹×L¯6ÝŽ'DØ™ o™‘ÓNê�! â+$Æ'"Tk'ʤ~­?‹Öüá6Ëçx¸}�ÀùÛ¡±ç‹?³¯>¾8cÓH ôvù?¿ím•õû/¼€g^óš­Ôûв˜È9{seÍóÍÝ>ȨØÓyÕãä0xë_ûk•õñßû½å¿÷A†·õ`ÿùa|wce}¿±ëæœÌTóþû[ÏžÿÇßÚXy³_ý7»nicÈÜšÏçÏ~÷w7gÇã7šµãmûm•*~Ú®P0)˜M3Õ›ŸC'd'4ü5, eœì ”qrÌÈŒóUí‚6¡Œ“½€2NŽÊ89v(ãäPQZë]×B!„B!„²%ZÿÊ0!„B!„B!d`@B!„B!„‚AB!„B!„BN !„B!„B9!$„B!„B!ä„P�nZ(—ŸÇ&{ƒRŠ2NŽÊ89f”R]�W-M'{eœ;”qrìPÆÉ¡ò�À ÿuÍ8ÿ$ðìkñU�(¸d_üû_÷tc…}ø“_Äë^û Ê8Ù'ø«_Û\ióO¿ó�eœì]�ƒoé÷+ðCó9>4Ÿ”q²t ž{ã[+ð¥Ï|_üãÏ”q²t_ÿºgþÖ7ý/ÿâSMø+ÿæ½X|úE€2Nöƒî3Ï<ó·¾á¾¡1ÿßø ¼ø"eœ´Ë�˜|osxÇûvÝ,BÖù¾÷Ï4VÖþø¼ë}ŸÝu“Yçþ?5WÖñÏ€¿ÿŽ]·ˆ5~l2i¬¬Ûáo»½Ýu“Yãìë¯+ëÑûîð§?¸ë&²äk¾æ-/½ã§þ_Ï5UÞø­ßŽŸyçÏíºY„,yþùç_úÑýÑÆdü;¿ó;ñ ¿ð »n9r¸‡ !„B!„B!'‚„B!„B!„œ B!„B!„rB0 Ø�J©žRê±Rª‘Ï•R7J©{¥Tg×m#¤m¨?„rØÐŽB!dŸiÚWɸßAø2 ÖD>1>pë~\î‘RJ+¥ž(¥n<×ÞȱÇJ© û»Öz`à~×í#í¢”ê(¥&Ο‹È¹öœÞ®ëÝTÝBúã¿ þ!Y‘ó¢j¹;nÓÁÖ”¶Ã¥ÞµØ©‰Rêj×íl‹„tïúA®S²á�í8!„Òmø¬‡àëdŒ9¾ñ¦+=Ç—a@°>w�FZë‘ýAÞ‰ü®�œè»B$ÿîxÀ%€;T�€ÖúZÎÛ[Å"õÑZ/´ÖçZësù©9מ³w³ 5ê¶¡?Ñ£�·žcÔŸ%"+ó]×­‡\÷“§ŒFÉw-Îà @7vž8Ò[™±n¿0?èyy7ÒÞ¨ —gG;N˜ÕBò¡¬ ÷Ys}ãõUdRø ÀÀwQñ¨<›½÷elã&ò {òPÜÙã.V‚3“¿{�ZëYñÚÂï=˜¥¾Œã¹(ÜÛÞc.çô�Œíy…ò7®O´« ç ",¶>Sió\)5„Ä¡œsàLî7SJ`ñÚ)g#€#½¦Œœùf%J”í;î•ᔎ”Õ¿ÀlJ´n‰v…ôÇ2�0–ºêÏ–§rŽÕ{^À¼·iἨ- ÉŠóûÔsl)ÃZë…ãàºÿÏ©›-Dz¦¨®YuG Ê°ÞãòïhÝR浪Ý8UbïÚsNñ}Ùãkò\¸¦ §”´·K;¨µžzdtM.DG¼>T±>¨ø®CvÜÖMk}+õ](¥Æ0¶ȳá�íx+(¥&òÏ¡+˺ÁÊv•~O"£nöÄHk=.[NÓuße½ õ°Y-ÃPV €Ž È‹m»‚é‡ÅºÇŽk­‡J©;iÈG;(ʼϢ~ì‹,d´1(+9éÁŒO{0²0*#KÇ(+ûNÌwLôùµ|ÖÂy–Ø9A¿³l<(v}æ3‹9ûò'TfÝñ(°ç¾LëAy˜Ù£r.®ó ­Ó܇ è”Råœ{¬‚kJ©©DZ/äOG®™ËuÏ;ŽöÌß:e[F…ºu`²øÎ´Ö¹Á>V‚»D„W~¶õ´Ný¢pŸ)ŒAvËÛY—SŒí3%嬨¹e»Ú=“ᔎDõOî¬wªnxõGÊî¸ÐZ?_œå¤þl;`²�Xˆ-I9LÉŠ•Á®\ï:¢V†íïW0rs óÎsêfgï¦r §µ•~,ƒ‰J©s±á9ýSNݽú—a7bÇ©ºÅÞIM»qªÄÞuª°×_`óyºå^ȵPJÍý±« å_Ipm†ÕŒö¥”s#÷¸–ã! hæ]‡ü ¹RêV)uã�w¥­·¹6\Ê¡o­õ¹=jgõH@à3C佞Ë@ÌZ =¹î¶ì 1V÷&êÕÁ¬ý 0È,d­tL”R3ǦDKû¯íÀ*Þ}£Ìû,êÇÉBŠÐªµœØ¾e¨µI`æ^)uãñ¡NFVö™”ïˆxŸ_Ùg•{‡üi×î^aÝ'=— z­xP±´sJ€{X\{<jï±Ï¾Ì62ï\ÚNZœÃ�×Î ˜À¼¨3›õá<¬€¹Ó-€ÇJ©‘tâ€íUJ=‚&+˜7Ræ\袾wêaÝÕ a#éQÄà q1è¸@Ø™rÛDö9óê@¬P1~ÖàÙÊÇ…Ó‚2œÒ‘”þI=½õά[Š˜þ¤žõg{ Üi­ÏDVÆ0ÏßM­ÊaJV NçŽ Ûÿ_:3÷¹u³³wî@há”ÝÕZ_ʱ´åùœþ)³î¡>*e7RÇS}g¬«l7¶#rûGì] Á÷%×ÌvØ– hØëí²“V~ÑÀ•±g'9äCÍz×1;>†‘µV÷©”_Ɔ£dH€XVdENVö†§ŒbH2³$P県—h†mÎj PVK¤^Ñ ö2÷NÜ£JVK*kå(²ZϬµ9¹÷…G7œóÖ2½×—ÎÊÈJLNšZÑ ¬()ß0Úç•}V àOŠšú|jÔUK;dÅlÏ»©ñ(°§¾L«{Šqê òþýynA–{þÀ@)õ«Adqé—¥(”Ð11È]˜™ö‰#„eg8SûÙÙ—YaÖ¤xÝ2ƒÐ÷§ÚobrVFŠ\À¤€Ï€å ¥ëçÊpLG,kú—QïhÝJ°¡?vYVûn^À8úµÚ£„ú³]æçÈaS²RºnÂfFû±8ó‚£îÎrßÂÌ<õ3Ô?åÒ¿ ÝÈ<¬[ì4l7ÈŠÔûªó<m–,�3ÓìèÓÆ>v•ÙÌzZH¦|¨ºuüv¼‹•®µ>Ã*cÑwM̆ÛvÈàñÌ`Þf9¹ØV&KÈf9ôä{ü‘ý[mîÖ… &Ø@°½÷üÞ‡Túî"T/HY¬²U0ò¾”/±çåøÌ�¹(WR¿ÏõÑì5¶Œ{·]™÷ŽÍj‘·¯Oöe­ôsŽïÓoÄþp…ç=PæãŽYuÏÐ19µû”=òÓ€œ�álm¯œÈ±™ÖZd!gEÛÁËÊ“ò5rúü1 åOÛûXó©ÿw¨ª9–v)¥S-ŒGמÏ>Ñv†àrÿ4ÇA =(ßl¥»‚6OÏFp§0/Ñðº³ç Ïï¹å¿㤷ÞÚ}t€eÀ¥£”ê:Fv#b,Îý\ç/a&»!)g™:PÄ7ËàëêȰÅ7ëwªn¹Ïͧ?3ø—bt`ö?¡þì)9lBVêÐù° ËDv†Å¾¨CmÈPÌnäÕ-Ç64a7ÈŠÜ÷•ÄÛµ@\gF0ƒÈÖ÷,¬ëCå¶ÛgÇ»Ø,Œ�ÜÈr¼¤ —úÒŽ7@fV(³$'{£ÈyáÝçd–„ÈÉx‰eØæ¬ eµÉÈ`ϽwŒªY-©¬•£ÈjñÐæŠœA9•ãÞLo§Þuä¨.+îs¨»¢ 8Y9T‚¾ÆúülZîmý–ØÿW‰¡ÞXÚ}ne¿ôÛÈxTê¾×¾L«‚Òh»4Ê54¹«'•Y½L4¸ £(cGÄaŸa5Ë1³³ì¶®™í›ÁìWµñÕùÍø[™½w˶©Õ! j÷¨ ëÄ䬎Œaf%쬮Ý_Á–][†CdÔ;Z·Ì{xõGk=ÕZí¹×Lþo )õgOÈÃÚ²b©Ð@ê1ÐæK²Sl~íÂqZn`†Ûè°ƒv#óxØ;iÓnœ8•ßW¡ À¼ ×.Žád=Éì´ëä 3×…ûÖõ¡’Dü »ÿ›I2ÀÊQαá�íxSädjçd–IJ¥—{<y²Fr2KBTÎx)‘“)^Šm­Dʼ¦8x>Ь—6Wäd’’So¦wƒr‚Š×Øç×ÄŠ6ûH{Ä|¶ûü”? ø}êŸExPñ¤hÌ&rMSãQ`Ï}™V‚Â%LǪ<Áúž9ù½ã(h÷EÉËÂ,KÐ0†j*ç~«¥wJ©ÇN96}!×L`fj&¡uë�O¤ü+6 ÏàÀë8ˆÞÁ(ɽ”ýŽƒï<ƒÇ0)êk_„’çÐç×dïÈ‘³tEî­ äÿ16×0Ÿ0×XmHïÊxP†Å©êHJÿbõά[úã"m˜`ådAîOýÙ¬Òåû0¶íB~KÊaJVD_4V²ª KmÆ0޲†y×ÀJÎrêf7&võÌ•‹ŒÞj›½ÌIèbuOéÒv#x<§nˆ÷o•íÆvEo;Äì°sNJN½ï«ÄóÁØB‚í{7ÅÊZóUdðjs8¿Ç|¨»ßõ†/èý#±ß=ˆì¥l¸£o_–éòÿNfÉTkýPkýþÁVl°ßy¿ž>Ýf–œÁȺµÛQJÔkíg¹¥›-}+†ˆøú‘Lñ*ϼԽ=ŒQ~²u  SXrºÌZI/<‹½Îj)°Ì"r~+³"'¨)2å4”éÝ„œ�dÅ©¿]²<Ö«P³¬2Aß0§Ï¯á³Ú{ÇüiÀô>5jăR×—À;æTJ]yžË pN¥ñ¨-{îË´þQí|™És̾ØõÉs|Ø—ÖZ9¿õ`t3­õ\êvK{dvçZʽ”% sl~eØwíe!ÍÔÖÓnË|=‡ì€rÒ¨¬Ø¥:‘ãAlB]$¨[±zçÔ-Ÿþä¶ú³\ÙÆºƒê:Q[š•T0ð0ãÚPÝB×Z¼NEfÿt^åXÊnÀ5cv%§n1ÛP×n9}vÕ÷ c‡’¤ [Ÿ3@œz®«äC•|~^;î,5íÊóY®óÚpy~´ãÍb³Lû²Ì©˜©ÝDfÉTʾ„‘…3çÝÝÀ,±°ûç”_¦^n†íf`6“¥u}ùÿBôµuÿæB)e³+eŠëVâÞA¤Œ…*ÿõV›µréd­\–8nÙ묖³šËó¶¿³íÊY¾šÒ9rjï1“º�ôe …Zr"í¯$+ÒVûQ1k¯¯¿èèdåPÉsVêós|¿”? Ð5ŠŽI3ÛòUFH| §Êx8_f‚»Â~ÑÎeîk qzÏP!M:àpŒ´Ögû,8dÉÖäìX¡þ$e7hW‹¼/É„²›[÷+.Sn„˜w&Æ|×…ì>íxƒ¤2µ™%ïŽeoH†‰Í¬¸Çj¹ãç¼`fIb¥D4ãÅib0Ãy«6²Zr2‡Ï`ϽwŠÒY-©¬•cÉjñÐÊŠœ”,äÈi"Ó» 9ü«Ö‚r¢XÑfïÓ•C„¾aMêŒ9å´/Óz†à¹…1n±zé=˜Óä.,#×M•ÅtëÃa«rv¬PȶQ«/†A)Ùl¨ÝPJÍA»rHìªè`µßà6å× íø~“‘…Z5³Ä—m|[8çaäúÔJ‰œì‘`Û22ØCº³@:s8–Áž¼wU³ZbY+©ã‡’ÕâiSk+r–…9õfz7!'RŽoÕZPNê®hWVŽ9`›rz(¾ÌÑm§ ³vÁŒÆŠ4 匃eŒÕR¢­vØ)»A»rXìê}Éàï f ÑA8„òÈRÎÒ_nMÙ…DVËÎ'HyªÊJF¹”•Cß´ÅÑ-bÀè(“V¡œrXìÃljÊnЮ»x_û Ç„öaV É…²rÜÐ7$Mó��Ô_o¶Ð?ÿåøÜ®FˆË_øë¿Óhy_ýåOQÆÉ~ñªZ+M’8I¸.îS±¼˜ÎkÎn’¾Z%W6rмãç¾g×U ¤5~ùѯ>÷à™¯Üu5i÷¾÷½Ï½å-oÙu5)…‚Y÷ß4üì8Ù”R”qrÔ´-ã²<Án&½¶ í2s�Ë=Ž$èw³Ó°øÑÙl»{Š_¶%ùÈG3Ê~ñ4Úq²PÆÉ±C'Çeœ*Jk½ë:BÙcäKz³â>1ˆ¼‡ å¼¹ÖúÚÝh&pà¬èÔÈ5ãb ‘B!„BH{0 H!$ˆd�N|_‰”/ÝÚ`ždBk=WJ=�”�aG¾Hé–qàFkýü®ÛJ!„B!§Â+v]B!{MÀƇ ܯœ)¥î•R÷0Ëç’9Xüòéž-*dqW–ZB!„BÙ B‰Ñ'  Âì8† øÝKưù´…s6ö]!„B!„âáÁ®+@!dï‰òÎíW‚•R ˜Œ\{®éÀCpÃdB!„BÙÌ$„c öž/kp³Oà@Çî)(ô`²׌B~AB!„B¶‚„B‚h­g�J©«Âï ˜`áó³]> �#{LöÈoEÜk!„B!„l !„¤¸p#_.þÞUJ=–¯ À�´ÖC`ù%âG�†’9¸D‚Œ�·»n !„B!„œJk½ë:BÙsdiï €KÉtua¾*¼ð\×õ-VJÝÀ|uøÜw!„B!„öøÿ¢ÕbÞø8���%tEXtdate:create�2024-02-03T19:22:23+00:008Øs���%tEXtdate:modify�2024-02-03T19:22:23+00:00IÒ`Ï���(tEXtdate:timestamp�2024-02-03T19:22:23+00:00ÇA���#tEXtps:HiResBoundingBox�616.5x277.5+0+0ìTÞ���tEXtps:Level�PS-Adobe-2.0 EPSF-2.0Aù3����IEND®B`‚���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/color-names.txt��������������������������������������������������0000644�0001750�0001750�00000000045�14557511160�016015� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������../gnuastro-figures//color-names.eps �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/done.txt���������������������������������������������������������0000644�0001750�0001750�00000000036�14557511162�014525� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������All necessary images created. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/epicycles.eps����������������������������������������������������0000644�0001750�0001750�00017665560�14557511160�015561� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%!PS-Adobe-3.0 EPSF-3.0 %%Creator: (ImageMagick) %%Title: (../gnuastro-figures//epicycles.eps) %%CreationDate: (2024-02-03T19:22:24+00:00) %%BoundingBox: -0 -0 1366 500 %%HiResBoundingBox: 0 0 1365.81 499.931 %%DocumentData: Clean7Bit %%LanguageLevel: 1 %%Pages: 1 %%EndComments %%BeginDefaults %%EndDefaults %%BeginProlog % % Display a color image. The image is displayed in color on % Postscript viewers or printers that support color, otherwise % it is displayed as grayscale. % /DirectClassPacket { % % Get a DirectClass packet. % % Parameters: % red. % green. % blue. % length: number of pixels minus one of this color (optional). % currentfile color_packet readhexstring pop pop compression 0 eq { /number_pixels 3 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add 3 mul def } ifelse 0 3 number_pixels 1 sub { pixels exch color_packet putinterval } for pixels 0 number_pixels getinterval } bind def /DirectClassImage { % % Display a DirectClass image. % systemdict /colorimage known { columns rows 8 [ columns 0 0 rows neg 0 rows ] { DirectClassPacket } false 3 colorimage } { % % No colorimage operator; convert to grayscale. % columns rows 8 [ columns 0 0 rows neg 0 rows ] { GrayDirectClassPacket } image } ifelse } bind def /GrayDirectClassPacket { % % Get a DirectClass packet; convert to grayscale. % % Parameters: % red % green % blue % length: number of pixels minus one of this color (optional). % currentfile color_packet readhexstring pop pop color_packet 0 get 0.299 mul color_packet 1 get 0.587 mul add color_packet 2 get 0.114 mul add cvi /gray_packet exch def compression 0 eq { /number_pixels 1 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add def } ifelse 0 1 number_pixels 1 sub { pixels exch gray_packet put } for pixels 0 number_pixels getinterval } bind def /GrayPseudoClassPacket { % % Get a PseudoClass packet; convert to grayscale. % % Parameters: % index: index into the colormap. % length: number of pixels minus one of this color (optional). % currentfile byte readhexstring pop 0 get /offset exch 3 mul def /color_packet colormap offset 3 getinterval def color_packet 0 get 0.299 mul color_packet 1 get 0.587 mul add color_packet 2 get 0.114 mul add cvi /gray_packet exch def compression 0 eq { /number_pixels 1 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add def } ifelse 0 1 number_pixels 1 sub { pixels exch gray_packet put } for pixels 0 number_pixels getinterval } bind def /PseudoClassPacket { % % Get a PseudoClass packet. % % Parameters: % index: index into the colormap. % length: number of pixels minus one of this color (optional). % currentfile byte readhexstring pop 0 get /offset exch 3 mul def /color_packet colormap offset 3 getinterval def compression 0 eq { /number_pixels 3 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add 3 mul def } ifelse 0 3 number_pixels 1 sub { pixels exch color_packet putinterval } for pixels 0 number_pixels getinterval } bind def /PseudoClassImage { % % Display a PseudoClass image. % % Parameters: % class: 0-PseudoClass or 1-Grayscale. % currentfile buffer readline pop token pop /class exch def pop class 0 gt { currentfile buffer readline pop token pop /depth exch def pop /grays columns 8 add depth sub depth mul 8 idiv string def columns rows depth [ columns 0 0 rows neg 0 rows ] { currentfile grays readhexstring pop } image } { % % Parameters: % colors: number of colors in the colormap. % colormap: red, green, blue color packets. % currentfile buffer readline pop token pop /colors exch def pop /colors colors 3 mul def /colormap colors string def currentfile colormap readhexstring pop pop systemdict /colorimage known { columns rows 8 [ columns 0 0 rows neg 0 rows ] { PseudoClassPacket } false 3 colorimage } { % % No colorimage operator; convert to grayscale. % columns rows 8 [ columns 0 0 rows neg 0 rows ] { GrayPseudoClassPacket } image } ifelse } ifelse } bind def /DisplayImage { % % Display a DirectClass or PseudoClass image. % % Parameters: % x & y translation. % x & y scale. % label pointsize. % image label. % image columns & rows. % class: 0-DirectClass or 1-PseudoClass. % compression: 0-none or 1-RunlengthEncoded. % hex color packets. % gsave /buffer 512 string def /byte 1 string def /color_packet 3 string def /pixels 768 string def currentfile buffer readline pop token pop /x exch def token pop /y exch def pop x y translate currentfile buffer readline pop token pop /x exch def token pop /y exch def pop currentfile buffer readline pop token pop /pointsize exch def pop x y scale currentfile buffer readline pop token pop /columns exch def token pop /rows exch def pop currentfile buffer readline pop token pop /class exch def pop currentfile buffer readline pop token pop /compression exch def pop class 0 gt { PseudoClassImage } { DirectClassImage } ifelse grestore } bind def %%EndProlog %%Page: 1 1 %%PageBoundingBox: 0 0 1366 500 userdict begin DisplayImage 0 0 1365.81 499.931 12 1366 500 0 0 DDD280E5DA88E5DA8ADACF7FDED384E4D98AE2D68AE6DA8EECE094ECE094E8DC91DDD187DACE84 E2D68CE8DC90E6DB8CE9DE8FEBE090DED381D6CC78DBD17CDDD27ED8CE7EDCD386E4DB8EE2D98C D9D083D7CE81D5CC7FD4CB7ED4CB7ED8CF82DED588DED588E3DA8FE6DD92EDE499EBE295E8DF91 F4EA9CF4EC9BF0E896E5DD8AE7DF8AEFE891EFE58EFCEF97FCEE96F5E790F4E68EF5E78FF1E38B F2E48CF5E78FF4E68EF8EA92F5E78FEDDE8BE8D88AEBDD8BF5E693F6E890F0E28AF3E58CEEE087 EDDF87F1E28CF2E38EFBED9AF0E490E2D682E8DD87E7D883E6D880E9DB83E7D87DF0E185F2E185 F3E384F2E283E5D679EFDF8BEDDE89E8DA81EBDD83F3E688F3E686EEE181F0E386E9DC80ECDE86 F1E28FEEDF8CEDDE8BE6D784EBDC89EDDE8BEDDE8DF0E191F4E496F6E698F3E395EDDD90ECDC8F F1E193F2E392F2E392F3E493F0E190E7D885ECDD89F0E18CECDD88EBDD85F4E68EF7E892F9EA97 F7E897F4E594F1E291EFE08FEFE08FEBDC8BF8E998F7E897F2E392F3E493F2E392F4E594F5E695 F5E695F6E796F5E695F6E796F7E897F2E392F0E190F0E190F2E392EFE08EEDDE8BF1E28DEEE089 F0E28AECDE85DFD178E7D981F1E28FE5D586DFCF81F7EA9CF5E597E7D685EAD987F1E08EEBDA87 EFDF8AF5E590EEDE88EEDE87F2E28BF3E38BF8E890EBDC86F5E491F8E795EDDC8AECDB8AF8E797 EBDA8AF1E092F4E395F1E092EDDC8FEDDB8FF5E496F0DF91F1E092FBEA9CF7E698EBDA8CE6D587 F0DF91FCEB9DF1E092F4E395F7E89CF4E99DEADE92F1E599F6EA9EF1E599F1E599F5E99DF6EA9E F2E69AF3E79BFBEFA4FEF2ACF9ECA7F5E9A1F0E499ECE092F1E697F5EA9AE6DB8DEFE399FDF0A9 F7EAA6F1E49EF3E799F0E498F3E79BF7EBA3FAEDA8FAEDA9F8ECA5F5E9A1F4E89BEBE191EFE491 FAEE9CF7EB99F3E697F8EB9CF9EC9EFAECA3FDEFA6F7E99FF0E396F3E697F8EB9CF6E999F8E6A5 FFF0B5FEEFAEF3E29AF0E092F2E38FF7E991FBED93F8EB8FEFE188F0E289F9EB93FAE99BFCEB9E F7E696F3E290F3E38EEFDF88F3E38CFDED98EDDD89EDDC8AECDB8AECE091F0E99BF3EDA3FAF3AC FEF6B5FBF3B5F6EDB2F5EDAFF7EFAFF2EBA4ECE69AF3EDA0F8ED9EF6E698F0E18FF1E28FF6E792 F3E891E7DB87F3E795F5E99CEDE499F2E8A1FBF2ABF9F1A9F3EDA4F6EFA7F7F0ACF3EBA8F3ECAA FBF4AFF5EEA7F1EB9FF2EC9DF6F2A0FCF69FF7E993F6E995FAEE9CFEF0A3FBEFA7F8ECA7FDF2B0 FCF3B2FEF5B4FCF4B3F6EFABF1E9B0F2E9BAFFF9C9F5EEBAE6DEA7F6EDB4FAF0B5FBF1B6FAF0B5 FAEFB6FEF3BBFCEFB8F9EFB1F4ECA8F2E9A6F7EEABFDF4B2FDF4B3F6EDACFCF2B2FCF2B3F6ECAE F5EBADF9F0ACF7F1A0F6EF9DF9F2A3FEF6ACFDF5AFFAF1AEF9F0AFFDF4B1FEF5AFFAF1AAFAF2A9 FCF4ABFBF3ABF6EEA6F9F1A9FEF7AFFFF9B1FEF7AFFCF4ACF6EEA6FDF7AFFBF3ABF4ECA5FEF6BC FFF4BDF9F1ACF6EF9FF9F39FFEF8AAFFF8B8F5EAB3FEF7C5F7ECB6D7CD8EEEE69EFAF5A4FBF6A4 FAF4A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDDD280E0D583DACF7FD5CA7ADACF7FE1D687E1D688E2D789E4D88CE7DB8FE6DA8ED7CB81 D8CC81E2D68BE3D78BDCD182DED384E6DB8CE1D684DAD07CDBD17CD5CB76CFC675D3CA7BD8CF81 DAD183D9D082D5CC7ED7CE80DBD284DAD183D9D082DED586E7DE91E9E095EAE196EBE297E4DB8E E0D789E9E091F0E897F0E896E7DF8DE6DE89EEE790F2E891F2E58DF7E991F4E68EF4E68DF1E38B EADC84ECDE85F2E48BEFE188EFE189F2E48BEBDC88E7D789EDDE8DEEDF8BEDDE87EFE189F2E48B EFE188F0E28AF3E48FEFE08BEFE08DEBDF8BE1D580E9DD87E8DA85E7D981E6D87FE0D176E6D77B E8D67BEBDB7CF2E283EFE084EBDB87F3E490EEE088EADC82EEE185F2E586F1E487F1E487EBDD84 EEE089F4E592F2E391EDDE8BEDDE8BF4E592F5E693F3E493EFDF90EADA8DEFDF91EFDF92EEDE91 EFDF92F2E294F1E291F1E291F4E594F5E695F1E28FF2E390F5E692F0E18CEDDE88F3E58EF6E891 F3E492F9EA99F9EA99F1E291EFE08FF4E594F3E493EEDF8EF1E291F2E392EFE08FF1E291EDDE8D F1E291F1E291F0E190F4E594F8E998F4E594F5E695F4E594F0E190EBDC8BEBDC8AF2E390F3E48F F0E28BF2E48CF0E28AE3D57DDCCE75E3D481F2E293F1E193E9D98CEAD98BE4D382EAD987EFDE8C EBDA88F2E28DF5E590F1E18BEFDF88EDDD86ECDC84F4E48CF1E18AEEDE87F3E28FF4E490F1E08F F2E190ECDB8AF1E090F4E394F5E495F5E495F3E292F0DF90F5E495EDDC8DEAD98AEBDA8BE9D889 EAD98AE8D788EAD98AF4E394F4E395F1E395F8ECA0F4E89CF4E89CEBDF93E5D98DEDE195F1E599 F2E69AEFE397F1E599F8ECA1F9EDA6F3E6A0F4E89FF6EA9EF2E898F5EA9BD9CE7FE3D88AF1E498 F3E79FF5E8A2FDF1A9F5EA9CF3E79BF4E89DF7ECA4F8ECA5F7EAA5F3E69FF4E8A0F6EB9DF2E798 F5EA98F9ED9BF9ED9BFCEFA0F6E99AEDDF94F7E9A0F7E9A0F3E59DF5E79BF8EB9CF8EC9CF5E998 FAE9A7FDEAACFAE9A5FBEAA2FDEE9FF7E894F5E78FF3E58CF4E68EF8EA91F5E78FEFE08BF6E596 F8E79AF4E393F2E28FF3E48DEFDF88F6E68EF7E791F0E08CFDEC9AF9E898F3E597F1EA9CF3ECA0 F7EFA9F9F0AEF6EDAFF6ECB0F9F0B2F8EFAEF2EAA3EFE79CEFE89AFBF0A1FFEFA1EEDF8EE5D784 F2E590F5E994E4D885F2E695F8ED9FF1E79FF0E6A0F1E7A2EDE59CF1EAA0FAF2AAF6EEA9EBE39E E8E09BF8F0ABF3ECA4F3EC9FF4EE9EF4EF9BF3EC98F9EB96FDF09DFBEF9FF8EA9FF8ECA3F9EDA7 F7ECA8F9F0AEFBF3B1FBF4AFFCF5B0F8F0B0F1E7AEFBF1B6F7EEB1F2E9A9FCF4B2FCF4B1FCF3AF F6ECABF3E9A9FAF0B2FCF2B4F4EBA9F2E9A5F4EBA7FBF2AEFEF5B1FAF1B0F7EEACFAF1AFFDF4B1 FDF3B4FAF1B2F9EFABF0E997F7F19EFAF3A2F9F0A7FBF3ACFEF6B2FAF1ADF8EFAAF3EAA5F1E9A1 F6EEA5FBF3ABFDF5ADFAF2AAF8F0A8F9F1A9FCF4ACF8F0A8F9F1A9F8F0A8FBF2AAF7EFA7F8F1AA FFF9BDFFF6BCFBF2ACF7F0A0FAF4A0FEF6A8FFF9B6FFF7C0FFF6C2FFF5BEFDF7B7FFF9B1F5F0A1 F7F3A5F8F3A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDBD07EDED381DFD484E2D787E1D686E1D687E9DE8FEADF90E0D489D8CC80D7CB7F DDD188DDD185E3D78BDED286D4C97AD9CE7FE8DD8DE6DB89E0D583DDD37FD6CC77D1C877D2C97A D3CA7BDAD182E1D889DCD384DAD182DBD283DFD687E2D98AE4DB8CECE394E6DD90E8DF94E8DF94 E3DA8DE4DB8DEDE495EDE594F0E896E9E18EE2DA85E6DF88EEE48BEDE187F3E58CF1E38AF2E48B F0E289EBDD84EBDD84EEE087EDDF86F0E289F2E48BEFE18CF3E494F9EA97F6E793F4E68EF3E58C F0E289F0E289F2E48CF3E48EEEDF8AEADB88EFE28EE6DA85EBDF89EADB86EEE088ECDE85E4D57A E6D67BE7D67AE7D778E9D97AEBDC80E5D581EEDF8DEEDF8AECDE85EEE087ECDF83F7E990F4E68D F2E48CF4E590F9EA98F7E897ECDD8AF2E390FAEB98F7E895F0E190ECDC8DE7D789EBDB8DEEDE91 F1E194F2E295F9E99CFAEB9AF7E897F6E796F6E796F6E794F1E28FF4E592F0E18CEADB86EFE18B F2E38DF7E895F9EA9AF7E897F2E392F4E594FAEB9AF6E796EADB8AF3E493F3E493EBDC8BF5E695 EFE08FEDDE8DEEDF8EF1E291F4E594F4E594F1E291F6E796F8E998F6E796F1E291EFE08FF2E390 F1E28FEFE08BEFE189EFE189EDDF87ECDD88F0E18FEFE091EBDB8DF0E093F3E294F2E190F3E290 EDDC8AE3D27FE6D681EDDD88EDDD88F0E089EEDE87F0E088FCEC94F2E28BEADA83EFDF88F3E38D EFDF8AECDB87F3E291F0DF8DF0DF8FF0DF8FEFDE8EEDDC8CECDB8BF5E494F2E191EDDC8DF2E191 F3E293EEDD8DE7D686E4D383EBDA8AEBDA8BE9DB8DF0E498F0E498F5E99DEDE195EADE92F1E599 F2E69AF0E498EADE92EADE92ECE095FFF4ACF7EBA2F8EBA0FAEFA0F1E696EADF8FDDD282F1E696 FAEFA0F2E69BF3E79FFDF1A7F9EDA0F6EA9EF6EA9EF8ECA3F7EAA4F4E7A1F2E69FFAEEA4FEF2A8 FAEFA1F4E998F5E997F0E492EADD8FF6E89CFCEEA3FDEFA6F7E9A0F9EBA2FDEFA5FDEFA2F9EC9D F7EA9BF9E9A3FFF1AFFFF0ABF7E79DF6E698F7E896F9EA95F5E691F9EA94FFF09DFDEE9BF3E491 F4E393F6E595F2E190F4E48EF7E68FF2E28BF1E188EEDE87EDDC86FBEA98F4E393F0E291F5ED9F F6EDA2F8F0A8FAF1AEF7EDAFF8EDB0FBF0B3F6ECA9F3EAA4F4ECA1EFE699EDE292FBEB9DF7E798 EDE18FF7EB97EFE391E5DA88F2E798F9ECA2F4EAA3F3E9A5F0E6A2E6DC94EEE59BF9F0A8F5EBA4 EDE49EF0E8A1FDF3ACF6EEA4F5EEA0F9F1A1F7F09DF4EC99F8EB99FCEF9FFCEFA1FAECA4FAEDA7 FBEFA9F7EDA8F9F0ABF7EFAAF5EEA7F7F0A9FDF5ACF6EBA0F8ECA1FDF1A5FFF6A8FFFCACFFF8A9 FFF9AAFBF3A7F5EDA4F8F0A9FBF2ADFBF2ADF7EEA9F6EDA8F9F0ABF8EFABF3EAA5FAF1AEF8EFAB FCF2AEFFF7B5FCF3B1F3EAA3FCF5A3FFF8A6FEF7A7FBF4A7FAF2A9FDF5ADFDF5ADF7EEA9F2EAA2 F4ECA1FAF2A7FFF7ACFEF6ADFEF6AEF8F0A8F3EBA3F6EEA6F5EDA5F6EEA6F3EBA3F4ECA4F4ECA4 F8F0A9FFF9BBFFF6B9FBF2ACF9F2A2FBF5A1FCF4A6FFF7B1FFF8BCF8EDB6F7EDB0FFF8B6F6EEA7 F2ECA2F6F2A9FAF6AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD9CE7CDED281E6DB89E9DE8DE1D686DBD080DFD485DED384DACF80DACE82 DDD185DCD084DBCF83DED286DBD181D9CE7FDDD282E3D888E2D787DBD07FDBD07ED8CC7BD5CC7A D6CE7CD3CB7AD8D07FE4DC8ADFD786D8D07FD3CB79DDD584EDE594EAE391E6DD8DDCD386E3DA8F E3DA8FDFD689E3DA8CEAE192EAE391EEE694EEE693E9E18CEBE48DF5EB92F1E58AF4E78AEFE286 F0E387F4E78AF0E387ECDF83EADD81EADD81F1E488F1E488EEDF88F6E795F6E794F5E792F7E991 EADC83E7D980ECDE85EDDF87EDDE89EFE08DEFDF8FF1E591E6DA85E3D781E3D47FEEE088EDDF87 E6D77CEADA7FEFDE82ECDC7DE7D778E8D87DE9D985EADB8AECDD8BF5E791F7E992EFE189F3E58E F2E48CF3E490F4E594F6E796F8E998F2E390F7E895FDEE9BF5E693EEDF8EEEDF8FEDDD8FEEDE90 F1E193F3E396F4E497F5E598F5E597F3E395F0E191F0E190F3E494EDDE8CF3E491F1E28DECDD88 EFE08BF4E590F9EA97EEDF8EE6D786EBDC8BF1E291F2E392F4E594F3E493FCED9CF3E493EBDC8B F9EA99F6E699EEDE91F0E093F7E799F6E698F1E193F3E395F5E597F6E698F5E597F3E395F2E393 F3E491F2E38FF2E38EEFDF8BEEE088ECDD88EDDE89F0E18EEBDB8CE4D487EEDE92ECDB8DEEDD8D F4E390F2E18FEEDD8AF1E18CEADA85EEDE88F4E48DF2E28BF2E28BFDED95F1E189EEDE86EFDF87 EDDD85E7D780E8D881F8E892F1E18CF0DF8DF2E18FF1E08DEDDC8AE6D583E9D886EEDD8BF0DF8D F0DF8DF3E290EEDD8BEFDE8CF4E391E6D583EBDB89F1E394EADE92E5D98DF3E79BF2E69AF0E498 F2E69AF1E599EEE296EBDF93EBDF93EDE195E8DC92E5D98CEEE394F7EC9DF3E898EEE391EEE390 F8ED9CFAEF9FF5EA9BF5E99CF7EC9FFAEF9FF7EC9FF7EB9FF8ECA2F5E9A1F3E79FF6EAA2F3E79D F2E69BF6EB9DFAEFA0F9EF9FF1E696ECE192F5E99CFAEEA4F9EDA5FBEFA7FCF0A6FAEEA4F6EB9D F3E999F3E999FBEEA5FBEDA5F6E8A0F7E99EF7EB9DEEE291F1E593F2E693F4E896F6EA99F5E999 F5E89AEBDC8BECDD8AE9DA85EEE089F0E28AEADC83E8DA81EDDF87ECDE87F4E592EEDF8EF3E595 F4EB9CF5E99FF8EDA6FAEEABFAECADF8EBACF9EDADF7E9A7F5E9A1F9EFA4F6EA9DE6DA8CF2E295 F6E99AF4E798F9ED9CF1E696EADF90EEE395ECE398EEE49EF5EAA6F3E9A5F5EBA0F7ECA0F9EFA6 F6EBA2F6EAA3FFF7AEFDF2A9F8EDA2F4EA9DF8ED9EFAF09EFAEF9EF8EA9EF6E89DF9EBA3F9EDA5 F3E6A1F0E4A0FBF1ABFAF1ABF9F1A8F9F2A6F9F1A5FBF09CEDDF84EADF82F0E488F5EA8DF9EE91 EDE488F3EB94F7F19DF9F2A2FFF8ACFFFCB1FFF9B0FAF2A9F5EDA5F7EFA7F9F1A8F7EFA7FAF1AB F7EFA7F8F0A8FDF5AFF8F0AAEDE59CF7F09FF3ED9AF5EE9EF7F0A3F5EDA2F2EAA0FAF2A8F6EEA5 F5EDA4F9F1A6FDF6AAFEF7ACFDF5ADFEF6AEF9F1A9F3EBA3F3EBA3F8F0A8FDF6AEF4ECA4F7EFA7 FCF4ACF7EFA7FEF5B4FDF3B4F9F0A8FAF3A3FBF5A2FAF3A3FDF6ADFCF2B2FCF3B5FCF2B4FAF1AE FFF8B0F5EEA8F9F4B0FDF8B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD9CE7ADFD581E2D785DED382DFD483ECE191E1D686D9CE7ED7CC7D DBD081DDD284DACE80D9CE80DED284DDD283DFD485E2D788E3D888E6DB8BE1D686E2D786E3D887 DAD17ED9D17DD2CA77D0C875DCD480DAD27ED8D07DD1C974DBD37FEAE290E2DA86DAD281E1D88B EDE499EDE499E8DF92EBE294ECE394F8F09FF3EB99F3EB98EEE691E8E18AEEE48BF3E78DF6E98D F1E488F2E589F4E78BF0E387EDE084EFE286EADD81EBDE82EEE185EFE18AF8E996F6E794F0E18B F4E68EEBDD84E9DB82F1E38AF1E38CF1E28EF8E997F8E899F7EA96EBDF8BE6DA84E6D782F5E78F F3E58CE8D97EEDDD82F5E488F1E182E9D97AEDDE82EFDF8DECDD8DECDD8CF7E895FDEE9AF7E892 ECDD8AEEDF8BF4E594F4E594F1E193F5E694F5E693F9EA97FBEC99F4E592F0E190F4E494F4E496 F1E193F3E396F6E699F6E699F5E597F5E597F5E597F3E395F2E394F6E796F0E18FF7E895F6E793 EDDE8AEFE08CF4E58FFCED9CF2E392ECDD8CF0E190F4E594F2E392F6E796F8E998F9EA99F3E493 F1E291F7E897F5E597F5E597F7E799F9E99BF7E799F5E597F5E597F5E597F4E496F2E294EFDF91 F1E192F2E393F3E491F6E793F0E18CEDDF89ECDD88E9DA85EEDF8DF7E798F3E396ECDC90EBDB8D EFDE8DF3E290F5E492F2E18EEDDD88F0E08BF1E18BF7E790F6E68FEEDE86EEDE86F0E186EDDE84 F0E187EDDE84E8D880EBDB83E7D77FE4D47DE8D882F0E08BF0E08CEFDF8BEFDF8BECDC88F3E38F F3E28EF0DF8BF8E894FBEB97F7E793F5E591E4D37FE2D27EF3E595EFE397E6DA8EF2E69AEDE195 EEE296EFE397EDE195EEE296F0E498F3E79BF6EA9EEFE395EEE393F6EB9BF9EE9EF3E896F2E795 F1E694F4E997F0E593F1E697F8ED9DF7EC9DF7EC9DF6EB9EF6EA9FF7EBA0F4E89FF1E59CF0E49B E6DA90E0D48AEDE196F8ECA1F9EEA0F7EC9CF7EB9FF5E99EF1E49CF7EAA4FCEFA8F7EBA3F2E69D F0E499F0E596EDE293F8EA9FF1E399EDDF94FAED9FFFF4A6F1E496E8DB8DEFE294F3E798F1E397 EDE094EEE193F0E18FEEDF8BECDD88F2E48BF3E58CECDE83E0D279E9DB83EBDD85EFE08DE9DB89 F3E496F5E99AF4E79DF6E8A2F8EAA6F6E8A5F5E6A5FAEBA9FAEBA8F5E7A1FCEFA3F8EA9EEFE394 F0E295F3E697F2E699F0E497F4E89BF1E69BEEE39AE6DC94E9DF9AF3EAA7F5EBA7F8ECA1F5E89B F6E99EF4E79CF2E49BF8EA9FF7EA9FF9ECA1F8EC9DF6E99AF8EC9DFDF0A2F6E9A0F9ECA3FCEEA8 FAEDA7EFE49FEDE29DFBF1AAF7EEA6FAF2A7FDF4A6F7F09FF3E78CE8D872EAD975ECDD78EDE07B F2E682ECE383F6ED92FAF39DF6EF9DF5EEA0F2ECA1FDF6ADF9F1A9F6EEA6FAF2AAFDF5ADFCF4AC F5EDA4F4ECA3F6EEA3FAF2A9F7EFA6F1E99EF5EE9DF4EE9DF7F0A0FCF5A5FCF5A7F9F2A5F9F1A4 F4EBA1F3EC9EF7EFA2F9F2A4FAF3A7FDF5ADFCF4ACFAF2AAF8F0A8F6EEA6FAF1A9FFFDB5FCF4AC FCF4ACFFF9B1FAF2AAFCF3AEF8EFABF6EEA5FAF3A4FDF6A5F7F09FFFFBB0FFF6B0FFF8B6FDF4B2 F4EBA6F8F1ACFBF4B2FCF6B8FEF8B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CE79E3DA84DFD482D9CE7CE9DE8CE7DC8CE6DB8BE8DD8D EBE091E9DE8FE4D98AE3D889E3D889E5DA8BE1D687E0D585DFD484DCD181E4D989E3D888E4D989 E4D989DCD381DCD47FD4CC77CCC46FD7CF7AD5CD78D8D07BD3CB76DCD47FE1D984D5CD78D5CD79 DED588EDE499F0E79CECE396F0E799F0E798E6DE8DE3DB89EDE593F2EA95F1EA93F8EE95F0E58A F7EA8EF5E88CF5E88CF3E68AECDF83F1E488FCEF93EFE286E5D87CEFE287F4E58EF4E591F4E58F E6D880EADC84EFE188E6D87FEADC83EDDE8AECDD8CF3E493F0DF92F1E493E8DC88E5D983E6D883 F5E78FEDDF86EFE085F1E186F7E68AF0E081E8D878EDDE82EEDD8CEFE08FEADB8AEDDE8DF6E797 F9EA97EDDE8EF0E190FBEC9BF8E998F3E493F5E695F1E28FF3E491F4E592EEDF8CEFE08FF6E697 F5E597F1E193F4E497F8E89BF8E89BF5E598F7E799F6E698F0E092ECDC8EEDDE8DEFE08FF8E998 F5E693EADB88EADB87EEDF8BF5E695F5E695F4E594F2E392F1E291F0E190FCED9CF7E897EFE08F F2E392F7E897F3E493EEDD90FBEB9DFDED9FF6E698F7E799FBEB9DF1E193F6E698F9E99BF8E89A F5E597F2E294EEDF8FF1E290F5E693EDDE89E8D984EBDC87EFE08DF5E696F2E295E9D98CEEDE92 E8D789E9D888EFDE8CF6E593F6E592EDDD88F0E08BF0E08AF7E790F7E790ECDC85E6D77CF1E286 EBDC80F0E186F3E489F0E087EEDE86E4D47CE3D37CE9D982F2E28BF2E28DEFDF8AF0E08BF0E08B F5E590F2E28DF0E08BF3E38EEEDE89E8D883E4D47FEDDD88EADA85F0E292F2E69AEEE296F3E79B E7DB8FECE094F4E89CF2E69AF0E498F3E79BF5E99DF6EB9DF1E696F2E797F8ED9EF7EC9AF1E694 F4E997F4E997F5EA98ECE18FEDE292F8ED9DFAEF9FF5EA9BF5E99DF6EA9EF7EB9FF3E79DF1E59B F7EBA1F8ECA2F7EBA1FDF1A6F8ECA4F4E89DEDE195E6DA8EF7EBA2FFF8B0FFF4AEFBEEA8F4E7A1 F1E49EF4E89FF5E99DEEE395E9DB90F8EA9FFCEEA3F1E496F4E799FEF0A5EDDF94F3E59DFBEDA4 FCEEA5F5E79FECDE94F0E18FEDDE8AEBDC87F2E48BF2E48BEADC83F0E289F1E38BF3E48FF6E795 ECDC8EF3E497FBEEA2F8EAA1F8EAA4F8E9A4F6E7A4F3E4A1FCEDAAFDEEA9F5E6A0FBEDA4F7E99D F5E89AF1E496F8E99FF8ECA0E8DC92EADE95F9EFA8F4EAA4EBE19CEDE4A1F6EDABF6EDA9F3E79D F4E79AFDEFA4FFF2A7F9EBA0F5E79CF3E59AFDF0A3FFF3A5FAED9FFBEEA0FEF1A6F0E49BFEF3AC FFF8B2FFF4B0FAF0ABFAF0ABF9EFA8F2E8A0F5EC9EF5ED9DE9E18DE5D77AE4D16BEBD973EADA73 E8DB75F0E381F0E686F8EF95FBF3A0F5EE9FF3EDA3F3ECA5FEF6AEFCF4ACFBF3ABFFF7AFFDF5AD F7EFA6F1E9A0F1E99FF4ECA1F8F0A5FAF2A7F9F2A4F9F2A2FEF7A7FFF8A8FAF3A3FBF4A5FEF7A9 FEF9ABF5EEA0F1EA9CF4ED9FF7F0A0F9F1A5FCF4ACF9F1A9FBF3ABFCF4ACF8F0A8F5ECA4FEFAB2 FEF8B0FBF3ABFCF4ACFAF2AAF9F1A9F5EDA5F4ECA2FAF3A5FDF6A8F8F1A3F6EFA1FAF1A7FBF3AB FFF7B2FFFCB7FFF7B6FFF8B9FEF8BBFBF5B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEC46ED8CE79DED47FDACF7CE9DE8CDFD482DDD281 DDD282E2D787E3D888DFD484E1D686DCD181D8CD7DD9CE7EE1D686E5DA8ADED383D9CE7FDCD182 DFD485DACF80DBD280D7CF7AD5CD78D8D07BD5CD78E2DA85DED681DFD782DDD580D6CE7ADAD27D E6DE8BE1D88BEAE197EDE499E7DE91E6DD8FEDE495F0E897FBF3A1F2EA98EEE691F5EE97F7ED94 EFE388EFE287ECDF83EBDE82F0E287F3E68AEFE286F4E78CF1E488F2E589F4E68BF1E38AF0E28B F0E28BEDDF86E9DB83EDDF86E4D67DEBDD84ECDD89ECDD8BFCEC9EF4E396E6D988F4E894EFE38D F0E18CEBDD85EEE088E6D77CE1D276EAD97DF3E384F1E182F1E286EBDC87F0E18FEDDE8DF2E392 FAEB9BF8E899F4E496F0E190F2E392F7E896F3E492EDDE8BF5E693F2E390F9EA97ECDD8AE3D483 F9E99AFAEA9CFFF0A2F8E89BF5E598F6E699ECDC8FF3E396F6E699F0E093EFDF91EADA8DEDDE8D F2E391F4E594F1E28FEDDE8BEEDF8CECDD8CF7E897F4E594F1E291F6E796F2E392EFE08FF6E796 FDEE9DF3E493F9EA99F6E796F6E698F9E99CF8E89BF4E497F2E295F4E497F5E598FAEA9DF9E99C F5E598F6E699FBEB9DFCEC9CEEDF8FF4E592F4E592F1E28CF7E895F4E592F0E091EEDE91F0E096 F5E49BE6D587E8D787EFDE8BF3E290F5E491F5E58FF2E28DF2E28CEFDF88F2E28BF2E28AE7D87E E9DA7FEDDE82EEDF84ECDD82EFDF87F4E48CF3E38BF1E18AF4E48DF2E28BEADA85E6D682EFDE8D EEDC8BEAD987F2E18FF2E18FEAD987EAD987ECDB89F1E08EF0DF8DEBDB89EFE192EEE296ECE094 F0E498F4E89CF0E498F3E79BF6EA9EF3E79BF1E599F5E99DF3E799F7EC9CF6EB99F4E997F2E797 F1E696F0E596F1E696EEE393F6EB9BF3E896EDE28FF2E796F5EA9BF6EB9CFAEF9FF6EB9CF2E799 F3E79BEEE297FBEFA6FAEEA6FCF0A9FCEFA9FBF0A7F7EFA2F0E79DF2E8A1F8EEA7F8EEAAF3E9A4 F9EFA9F8EEA7F3E9A2F6EDA3ECE497F8ED9FF8EE9EF8EE9FF3E79BEFE498FCF0A6F5EAA0F5E9A2 F5E8A1F8ECA4FBEEA8F8EDA3F3E696F6EA95EFE48DE6DB82E9DE85F2E78FEFE48CF2E690F1E693 F0E494F5E89AF9EBA1EEE098FEF0A8F8E9A3FCEDA8F1E29FF4E5A3FBECA9FBEEA9F9ECA6EEE098 FAECA3F4E79CF7EB9FF3EBA2F3E9A0F3E7A0F5EBA5F3E8A5F7EDAAF4EBA9EAE19F8C8442B9B16E FEF2A8F2E499FDF4A9FAEBA0F8EC9FF6E99BF4E69BF4E69BF4E69CFAEEA4F1E39AFBEEA5F3E9A2 F6ECA7FBF1ADF5EAA8F2E8A3F9EFAAF8EEA6FEF3ABFCF2A5F3E898EFE491E8DA80F3DF81F8E488 EFDE81EBDB7FF6E88DFAEF97FBF09EF7EFA3F1E8A2F0E9A6F8F0B1F8EFACFAF1ACF7EDA9F7EFA8 FDF5ADF5EDA4F2EAA1F0E89EF6EEA3F9F3A4F9F2A3FEF7A9FDF7ABFAF2A6F9F2A5FCF4A7F9F2A4 F5EEA0F3EC9BF2EB9DEEE799F4ED9EFBF5A6FCF4AAFEF6AEFEF6AEF7EFA7F1E9A1F2EAA2F5EDA5 F2EAA2F1E9A1F5EDA5F7EFA7F2EAA2F6EEA4F5EDA3F7EFA6FBF3AAF8F0A6F7EFA4F8F1A3F3EC9D F3EBA0FAF2AAFFF8B6FFF8BAFDF4B6FEF5B7FFF8B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD57FDFD57EE5DB84E6DC87E0D581DBD07E D7CC7AD8CD7BDDD282DDD282DCD181E2D786E2D785E1D685E1D686E6DB8BE6DB8BDFD485E0D586 E0D587DDD184D6CA7DD5CC7BDCD480D6CE7CD1C977E0D885E2DA88D6CE7DD4CC79D9D17EE5DD8C ECE490E8E08FE8DF92EBE297EBE297E9E093EAE193EDE495F5ED9CF4EC9AF4EC9AF2EA94EEE790 F0E68FF0E48AF2E48BF0E289F0E289F3E58DF6E88EF3E58CF0E38AF2E48AFAEC93FAEC94F3E58D F4E68EF7E991F5E78EF0E388EFE186F6E88FEDDF87E2D27EE6D785EDDD8FF3E396FAED9CF1E590 EADE88F4E691E7D980ECDE85DECF74DBCB70E4D377ECDC7DEDDD7EEFE083F4E48DF8E995F4E592 F1E291F4E594F5E595FCED9CF4E594F3E493F7E894F7E894F5E692F6E794EFE08DFBEC99F6E793 E8D988F3E394F1E193F9E99BF7E79AF8E89BF5E598F0E094F6E69BF6E698F4E497F5E598EDDD8F EFDF90EDDE8FEADB8AEBDC8BF4E594FFF1A0EDDE8DF1E291F6E796F6E796F5E695F8E998F7E897 F6E796FFF09FFBEC9BFCED9CF3E493FCEC9FF8E89BF8E89BF7E79AF6E699F5E598FBEB9EFEEEA1 FBEB9EF4E497F3E396F4E497F9E99CF5E597F1E28FE9DA87F0E18DFCED9AFAEB97F6E699F4E498 F3E398F3E29AF1E093F1E090F2E18FF2E18FF1E18EEFE08AF7E792F5E58FF1E18AF6E68FF5E58E E8D880EFDF87F2E28AF6E68EF6E68EF1E18AEDDD85E5D57EFAEA94F9EA94F2E28EF2E18FEEDD8B E8D787E9D888E7D685EDDC8CF4E392F0DF8FF2E191FBEA9AF8E797EFDE8EE9D888F2E596F4E89C EFE397EADE92EFE397FDF1A5F7EB9FFAEEA2F8ECA0F6EA9EF8ECA0F4E99BF3E898F3E896F2E797 F2E798F0E596EFE494F8EC9FEEE393F3E898F9EE9EF6EB9AF5EA97FAEFA0F0E596F4E99AF4E999 EBE091E8DD8FF0E498F7EBA3F6EAA2F9ECA7FAEDA8F8ECA6FAF2A8FBF2AAF5ECA5F0E7A1F3EAA7 F7EEABF7EEA9F7EEA8F3EBA3EFE69EF2EA9FF6EA9EF3E89BF6EA9EF6EAA0F4E8A0FBEEA7F4E7A1 F5E8A4F7EAA5F7EAA4F7EBA4FAEEA4F4E797F5E995F1E590E9DD88EADE89F0E48FF8EC98F4E797 EFE294EDDF94F1E39BF3E59EF0E29CF9EBA5FCEFABFCEEAAFFF4B0F7E9A6EDDF9BF6E9A5F4E7A3 F9EBA5FFF3ACF1E59CB9AD62BAAD65E8DD95FFF8B3F2E7A6F4EAABFAF2B4F6F0B25B5215352C00 DFDA98F6EBA3F9ECA2F1E59BF3E79BF2E599F3E79AF4E79BFCF0A5FAEEA6F3E7A0EFE19CFEF1AC F7EEA6F6EEA7FCF3ACF8EFABF5EBA6F7EDA8FAEFA7F9EDA5F6EA9DEADD8EF2E694FEF3A0FFF3A1 FFF2A2FEEF9FFEEF9FFFF2A2FCF0A3FFF3A9FEF5B0F9F0B0F7EDB2F8F0B5F5ECADFAF2AEFAF1AE F7EEABFAF2ACF8F0A8FAF2AAF4ECA2F8F0A5FCF4A8F8F1A4F8F0A4F8EFA8F9F1A9FCF4ABFBF3A9 F4ED9FEDE698F1EA9CF7F0A2F6EFA1F8F0A5F7EFA3F2EAA1F8F0A8FDF5ADF9F1A9F4ECA4F9F1A9 FCF4ACF6EEA6EFE79FEDE59DEFE79FF0E8A0F4ECA1F7EFA4FEF6AFFFF8B4F8F0A9F5EDA5F5EEA1 EFE898EFE79BFBF3ABFFFABAFFF9BEFAF0B2FBF2B1FDF4B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFBFBECECECEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7EBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBF1F1F1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED47DE2D881E7DD86E7DD87E1D782 D8CD7BD2C775D7CC7ADDD282DFD484DFD482DDD280E1D683E2D785E1D686E3D888E3D888E4D98A E9DE90E9DD90E3D78BDDD185D7CD7FDCD483E3DB8AE8E08FEBE392E1D888DFD786DAD281D8D07F E2DA89ECE493EDE494EFE699EDE49AECE398ECE396EEE597EFE697F8F09FEDE593F3EB98F3EB96 EEE78FF7ED96EFE38CF3E48FF2E48CF1E28CF3E48FF5E68FF4E58FF2E38FEFE18AF6E790F7E893 F3E58DF5E78FF5E78EF2E58AEEE185EBDE82EEE187F1E38AEEDF8DEFDF90F6E699FBEBA0EDE190 EDE18DE9DE87F2E38FEDDF87EFE188F1E287EFDF84EEDD81EEDE7FEEDE7FEDDE81F4E48CF1E38A E8D984E4D583EDDE8DF8E998F9EA99F5E695F5E693F8E993F9EB92F6E890F7E894FCED9AF9EA97 E8D986E8D988FAEB9BF4E496FBEB9DF3E396F1E194F4E496EDDD91F3E398F4E497F0E093F1E194 EEDE90F1E193F3E395F4E594F4E594F2E392F0E190F1E291ECDD8CF5E695F8E998F1E291F7E897 F3E493F2E392FEEF9EF8E998F7E897F0E092F5E598F4E497F8E89BFDEDA0FAEA9DF5E598F6E699 FBEB9EF8E89CF2E296F3E396F4E497FBEB9EF8E89AF0E091EBDC89F1E28FFAEB98F9EA99F7E79A F5E69AF4E39BF3E29CEFDE91F0DF8FF4E391F6E593F6E593F5E590EFDF8AECDC86E9D982F2E28B F4E48CE5D57DFCEC94F8E890F8E890F7E78FEEDE88E4D47DD8C873F2E28DEDDC8BEAD987F1E08E EDDC8CE5D484F1E092F5E494F1E091EEDD8FF3E293FAE99AF4E395EEDD8EEFDE8EF6E598F4E698 F2E69AF3E79BEEE296EEE296F4E89CF6EA9EFAEEA2F6EA9EF5E99DF9EDA1F9EEA0F0E595F1E695 F3E899F3E89AF2E69AF1E59BF6EAA0F0E398EFE495F3E899F4E999F2E798FDF2A3F4E99AF8ED9C F7EC9CF1E696EFE494F2E799F8ECA2FCEFAAFCEEADF9EBABF3E8A4F5ECA4FCF4ACF7EFA9F1E8A4 F4EBA8F8EFACF5ECA9F8EFABF4EBA7E8E097EEE69DF8F0A5F4E89EF6EAA1FBEFA7F8EBA6F8EBA7 F4E6A5F4E8A3F8EBA7F6EAA3F4E8A0FAEEA2F7EA9BF6EA99F3E793EFE491EEE290EFE392FAEE9D F3E698EEE096EFE19BF5E6A3F7EAA7F6EAA9EDDF9EF9F1AEF2E9A4FEF8B7FEF9B6F6EDA9FEF4B3 F8ECA9F6EBA9EFE1A0A69A5385792FA69A538F85408F8443BCB074D8CE91D3C98C473F107F773A BFB778A69E5EFFFCB7F6EBA3ECE398FFF5ABF3E89CFEF9ACFCF4A8F7ECA3FEFBB4EDDF9DFBF5B6 F6EBA9FDF5ACF9F2A9FCF4ACFDF4AFF9EFAAF6ECA7FFF6B1FBEFA7F1E49AF6E99BFDF0A2FFF5AA FFF1ABFEF0AAFAECA6F6E8A0F7EAA2FBEEA8FDF3AFFFF7B8FFF5B8FAF0B5F7EEB5F8EEB2FDF3B6 FDF4B4F8EFAEF7EEABF8EFABFAF1ACF4ECA3F8F0A5FCF4A9F8F0A5F5EDA3FEF5B3FFF6B5FFF8B3 FEF7AFF9F1A7F5EEA1F9F2A4FFF8AAFFF7ACFFF7ADFAF2A9F3EBA3F5EDA5FEF6AEFBF3ABF6EEA6 FCF4ACFEF8B0FBF3ABF6EEA6F4ECA4F6EEA6F8F0A8FBF3A9F4ECA2F2EAA4F8EFAEF8EFAFFBF2AD F9F2A4F0E998EDE697F8F0A8FEF4B7FAEFB8F7ECABF9EBA4F8EBA3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2C6C6C6D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D0D0D0CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7C7C7C7D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3CCCCCC D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3C971DFD57EE4DA83DFD57F E8DE89DBD17BD4C976DACF7DDBD07ED8CD7BD9CE7CD8CE79DCD27DDED37FDCD17FDCD181DCD182 DED384E3D78BE4D88CE2D68ADFD389DCD285D5CC7DDCD384E5DC8DDBD283DED586DAD182DCD384 E1D889E4DB8CE6DD8EE9E091EAE195EAE196EAE196E9E093EBE294EDE495FCF4A3F0E896EFE794 EEE590EBE48DF5EB94EFE28DF4E491F4E591F1E28FF0E18EF0E18DF1E28FF6E794EFE08CECDD89 EDDE8BEFE08AEFE188EDDF86EEE086F1E488F4E78BF2E48AF6E891F2E391F5E596EFDE92A9994F C3B665E8DC88E7DB85E9DA85F3E58DEFE188ECDD82EDDE82EBD97EE9D97AEFDF80F1E183ECDD82 ECDE84EEE087F0E18BF3E491FAEB9AF4E594F4E591F3E48EF0E288EBDD83E8DA82F0E08DEBDC89 EBDC89EBDC89ECDD8CFAEB9BF8E89AFEEEA0EDDD90E8D88BF5E598EEDE92F4E499F7E79DF0E094 F0E093F3E396F1E193F1E193F2E294F4E594F3E493EFE08FF8E998F3E493F9EA99FBEC9BF4E594 F7E897EFE08FF3E493FFF09FF2E392F3E492F7E799EDDD91F1E196F5E59BF8E89DF1E196EDDD92 FAEA9FFDEDA2FAEA9FF3E398F1E197F6E69AFEEFA2F8E89AF5E596F6E797F4E591F6E795F4E594 F4E396F3E399F3E29BF4E39DEEDD8FF1E090F7E694FBEA98F8E795F4E48FF9E994F5E590EFDF88 F1E18AF1E18AE6D67EF3E38CEDDD86ECDC86EEDE88ECDC88EAD986EEDD8BF5E493EEDD8DEBDA8A F1E08FEFDE8FE4D385EDDB90F3E195F0DE92F0DE93F4E296EFDE91E6D489E7D68AF1E093F6E59A FBECA1F9EDA1F4E89CF3E79BF5E99DF6EA9EF1E599F2E69AECE094ECE094F5E99DF8EC9FF0E595 F3E898F7EB9DF8ECA1F7EBA3F6E9A2F3E7A0F6EAA1F2E69BEFE495F1E697F3E898F2E798F1E696 F4E999F0E594F1E694F6EB9AF0E598F6EAA0FEF1ACFCEEADF5E7A9F2E8A4F4ECA4F6EDA7F7EEAB F6EDAAF0E7A6EFE6A5F1E8A6FAF1AEFBF2ADF1E8A1F4ECA3FDF3AAF6ECA3F5EBA5F9EFABF6EBAA F4E9A8F5EAAAF0E5A3F5EBA5F5EBA4F1E89DF6EDA0F3E898F0E596F1E695F1E696EEE393EADF8F EDE195ECE097EDE09AF0E3A1F1E3A3EDE1A2EFE6A6F5EBACDFD594B7AD6CD5CA8AE4DA99D5CC8A D7CD8DDDD392E6DD9DE8DE9E8E843FBAB067FFF5AED5CA88ACA162A3995E978C50241A005A511C F9F1B4DEDB9D756E2FA59C57D9D08AE7DF97F1E8A0F1E99FF5ECA1F4EBA1F4EBA4F3EAA6ECE2A4 F2E7ABFAF4B4F3ECA2F4EEA3F5EFA6FAF2AAF9EFA9F3E8A3FDF4AFF7E8A2E8DA91FEF2A5FCEBA0 F6E9A4FCF0B3FEF3B4F7EBACF0E5A3F6EBA8F8EFABFAF1AEFDF3B4FDF2B5FAF0B5F8EDB4F3E9AE F5EBAFF9EFB2F7EDB0F4EBABF9F0AEF4EBA6F2E9A2F7EFA7FAF2A9F7EFA4F6EEA5FFF6B8FEF4B7 FAF1B1F8EFAAF9F1A9FCF4AAFBF3A8FCF4AAF8F0A7F8F0A8F8F0A9F4ECA5F9F1A9FFF7AFFDF5AD F8F0A8FAF2AAFBF3ABFAF2AAFDF5ADFDF5ADFCF4ACFCF4ACFDF5ABF2EAA0F1E8A6FCF4B7FFF7BB FBF1B0FAF2A8F4ED9DF2EB9BFAF1ACFFF5BBFDF1BCFFF4AEFCEEA1F5E798FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CFCFCFFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDF2F2F2CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D6D6D6FFFFFF FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFFFFFF E7E7E7D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CE75DBD178E0D67F DFD57EE0D67FDCD37ED5CA78DFD482DED381D6CB79DACF7CDCD27DDFD580DFD581DCD17FDCD181 DFD485E1D687DFD387E2D68BE6DA90E6DA90D7CD81D7CE81E8DF92EBE295DDD487DAD183D4CB7E DBD285E5DC8FE7DE90E3DA8DE0D78AE7DE93EDE499F0E79CEDE497EEE597F4EA9BEFE796F1E997 EAE28FE3DB86E3DC85E6DC85F4E794F7E897F7E897F3E492EFE08FEEDF8EF2E392F6E796F2E392 F0E190EDDE8DEADB86E7D980E7DA7EECDF83F2E589F3E68AEDE086EDDE89F0E18EFDF2A4FDF4A7 CBB971D6CA79F3E792EEE28CF1E28DF6E88FF1E38AE9DA7FEEDE83EBD97EEADB7BF6E587FAEB8C EEDF80E7DA7DEEE087F4E68EF2E390F4E592F6E794F4E591F0E38AEBDE83E7DA7CE8DA80F0E18D E4D581ECDD8AF9EA97F2E392F5E696F4E496F7E799EFDF92F3E396FDEDA0F6E69BF7E79CF5E59A F5E59AFBEBA0F8E89BF0E093EBDB8EEADA8CF0E190F6E796F9EA99F6E796F7E897F8E997FBEC9B FCED9CF6E796F3E493F0E190FDEE9EF4E594F6E796FDED9FF9E99CFBEBA0FBEA9FF7E79CF3E398 F4E499FDEDA2FFEFA4FBEBA0F4E499F2E297F4E498FEF0A3FCEB9DF9EA9AFBEC9BF4E594F8E997 F8E998F5E598F4E39AF4E39BF6E59FF4E396F4E393F6E592F6E593F6E593F6E691EFDF8AF2E28C EFDF88F0DF89F4E48CF1E189FAEA93F7E791F2E18EECDB89EBDA89ECDB8BF5E493F1E091F1E092 E8D789EADA8BF5E398E7D58BE7D58DEEDC93F1DE95F3E198F5E39AF1DF95F1DF97F4E299F6E49A F6E49CF0E297F0E498F0E498EDE195EDE195F1E599F5E99DF8ECA0F5E99DF3E79BF8ECA0F7EB9F EFE495F3E799F8ECA0FAEEA6F9ECA6F8EBA7F1E49FF6E9A2F3E79FF5E99CF9EE9FF4E99AF2E798 EEE393EFE494EDE290ECE18FF2E796F8EC9FF7EBA1FEF1ACFCEFAFF8EAADF5EBA9F3EBA3F3E9A5 F5ECA8F3EAA9EDE3A5EFE5A7F6EDACFAF1B0FAF1ADFDF4AFFBF3AAFBF1AAF4EAA3F3EAA4F5EAA8 F3E8A9F6EBADFAEFAFECE1A0F2E8A2F8EFA6F1E89CF2E99BF0E498EDE195F1E697F5EA9BF1E697 EADE91EEE296F2E59EF8EBA7F6E8AAECDDA2E1D69AE6DEA0C4BC7E51490A655D1DC4BC7DF4ECAD F8F0B1DFD798EAE2A3EEE6A8FAF3B6857B36CEC37BF0E7A0EDE1A0FDF7BAECE1A63D34125B521F C0B77FDDD79BBEB87AD9D495706827A29B56CAC37BD8D189F1EBA1FAF4A9F6EFA7FEF7B1ECE4A2 7A7134D1C78EFFFBBCF5EFA2FAF4A8F7F1A5F7EFA6F6ECA7F2E7A3FEF4B1F5E6A1F3E69EFDF0A5 F1E196F9EDACFAF1B9FDF4BAFBF3B6FAF2B3FDF4B3FBF2AFF8EFACF7EEACF8EFAFFAF0B3FBEFB4 FEF3B8F9EEB6FCF2B8FFF5B8FAF0B2FDF4B4F1E8A5F5ECA7FCF4ACF9F1A8F4ECA3F9F0ABFFF6BB FFF5BCFBF1B4F9F0AEFEF5AEFFFAB1FEF6ACFDF5ADF7EFA7F9F0ABFCF3AFFAF1ADFCF3ACFDF5AD FEF6AEFCF4ACFAF2AAF7EFA7F8F0A8FDF5ADFCF4ACF9F1A9F8F0A7FAF2A7F7EFA6FAF1B1FFF6BD FCF2BAF9F0B2FAF2A9F9F2A1F8F1A1F9F1ADFDF2BBFFF4C1FFF3AAFFF19DFBEB96FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5DA85DAD07A E1D780E4DA83D5CB74DAD079D7CD78E5DA88E6DB89E1D684E5DA88E3D786E4D786E2D685DFD484 DED383E4D88AE2D788DCD084DED287E3D88EE3D78DD3C97DDCD386DAD184C8BF73D1C87BD8D083 DED688E2D98CDBD486DED688DCD587DFD689DED587E7DE93EEE59AE8E196E5DD93F0EA9DEAE396 F6EEA0F1E999ECE391EEE390E9DE8AF6EA9AF8EC9DF7EA9CF2E596EDE192EDE18FF1E593F1E694 F2E694F7EB99F0E592E9DE88EEE389F1E38AF3E78EF5EA90F2E58CF0E38AEFE38DF1E393EEDF92 EBDD92F3E49BF7E797F5E894F0E18CF3E48EEDDF87E8D981F2E387F4E588EEDE7FEADA7BF2E282 F2E283FDF195ECDE82E4D67DEEDF88F3E48FFBEC99F7E895F5E692F4E68EF1E48BF3E68BF4E991 F5E897F9EA9AF7EA98F6EA96F2E490EFE290DFD381E2D482E8DB8AF5E999FAEA9CF8E89AF5E597 EEDE90F7E699FEF0A2F6E697EFDF91EEDE90EEDE8EF1E291F3E493F0E18FEDDD90F2E597F0E395 F6E699FBED9FF0E493F5E795E9DC8AF5EA95F6E894F8EA96F9ED9BF8E99DF9E99FF4E69BF2E499 F7E79DFAECA1F4E69BF9E99EF6E89DF2E499F3E399F3E398FCEEA1FEEFA2FAEB9BF9EA99F3E493 FAEC9BFDEE9DFAEB9DF7E79BF6E59DF9E8A1F5E598F2E492EFE190F3E494F5E695F9EA98F7E996 FAEC97F6E891F0E38BF0E38AF1E38BECDC89F0DF8EF1E08FEEDE8BEFDF8DF4E390EADA89EBDA89 F4E395E9D88AEEDC90FBEC9FEADA8CEBDC90F5E599F6E79BEFE094EFE094F5E59CF4E49CEEDD95 ECDB93F2E29AE4D58BE7DB8FF5E99DF4E89BEBE191EBE092F4E89CF9EDA0F9EDA1F8ECA0F6EAA0 EFE398EEE394F1E696F7EB9EFAEEA4F9EEA5F7EAA3ECDF99EFE29CF0E49CFAEEA4FDF0A6F2E69B FDF3A8F0E598F1E698F4E998EEE491EEE490F5EB99EFE396F4E89EF3E7A1F4E7A7F2E8A4EFE79D F2EAA1F2E9A2F2E9A5F2E9A5F6EDABFDF4B0F8EFAAF4EBA5FBF3ABF5EDA4F4EAA1F1E69EF2E6A1 F3E5A4F2E7A6F9EEABFCF3ACEBE298F1E89CF8EFA1F2EA9BF1E99AF5EA9AEEE494F4EA9AFBF0A0 F7ED9DECE195ECE197F2E79EF6E9A2F1E5A0DCCF8ED6CC8DF8EFB3EBE1A55950127D7536766C2E 7A7132B8B071BAB16FDCD391C2BA79A89E5E887E3CEBE19EE2D796F7EDAEEADFA04F4516756B2D E6DD9DE9E09DBAB26EEBE59DFAF4ABC2BB73817B349D9750B3AD67C3BC78E0D997F7F3B4C9C386 7C733A3C3300817744E4DB9FE1DC8DEEE795F0E89AF8F0A2FDF4A7FEF2A8FDEFA5F2E499F9ED9F F4E597E6D687FCF1ACF3EAB0F3EAADF8EFB0FEF5B4FDF3AFFAF1ACF7EEA9F5EBA6F7ECA8FBF0AC FFF3B1FFFCBCFEF3B5FBF1B3FEF4B5F6EDAEF1E8A7F3EAA7FAF1ADFEF6AFF7EFA7F3EBA2FAF2A9 FBF1B2FCF2B3F9F0AEF8EFACFCF3AEFFFAB2FCF4ACFCF3AEF6EDA9F8EFADFBF2B2FAF1AFFCF4AD FCF4ACFDF5ADFEF6AEFBF3ABF8F0A8FCF4ACFDF5ADFAF2AAF7EFA7F7EFA7FCF5AAFCF4ABFAF1AE F5EBAEF1E7AAFCF3B1FCF4ADFCF4AAF9F0A8F4EBABF4E9B4FAEEBBF7EAA2FBED9CFDEF9EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D587 DACF7EEBE18CE0D67FE2D87EDDD37AE2D880E3D983DDD280DFD483E9DD8EE6D789DCCB7EDCCE80 DDD082DACC80E5D88DDED286D7CF84D9D085DCD489D8CF84C7BC72DED188D7CF84C8BF75D2C97E CDC778D3CC7EE5DF90D6D180E2DC8CD7D381DFD988DBD283E6DD8FEAE397EBE59BD6D189D3D088 F0EDA5EBE59CF0E89CF2E698EDDD90EBDC8EF5EA9EF4EA9FF0E69BECE395EFE697F3E99AF0E696 EFE693EDE492F4EB99F0E892EBE28CF5EB93F4EA92EDE28BF1E78FF5EB93F0E690F5EA97F6EB9A F1E596F0E499EEE195F2E392F1E08EF2E28DE8D882EDDD86E6D67EE8D97EE6D77AEDDF7EE8DA79 F1E380EEDF80F1E288F3E28BDDCD76EFDF8AF2E38EF7E893F0E18EEFE38FF9EE99F5E994F2E693 FAEF9EF4E89BF6EB9CEDE292EFE591F3E893EBE18BE8DE87E6DB85EDE28DFBF19DFCF19FF8EA97 F8E796F2E08FEFDE8DF7E594F3E291EFDE8DF5E492F3E290F1E08EF7E694F4E492ECDF94F1E59D F8ECA2F9ECA1F4E99BF0E596F0E493F0E592F0E68FF3E891F5EB91F7ED97F5E99CF4E89EF0E49A F3E69DF1E49AFAEFA5FCF0A6F6E9A0F6EAA0F8ECA2F0E39AEFE196F8E89CFBEB9EF9E99BF5E695 F5E693F5E693F9EA98FDEE9FF6E79BF3E29AFDEEA8F9EC9EF3E895EDE292FDF1A2F2E697F0E596 F7EB9BF2E796F2E893F3E890F0E68CF1E78EEEDF8FEEDE91F0E191F3E491F3E491F1E28DF1E28E EBDC88F0E18FEEDE90FAEA9DE9DB8CE1D681E7DD89E6DC87EBE18CFAEE9DF2E797F1E598F3E69B ECDF93EDE094EFE298F2E69AEBE092E8DD8DEDE292ECE191EDE293F3E899EFE494F4E89CF8ECA2 F2E69EF3E79EEDE391EEE48EF2E894F6EB9AF4E999EEE395E6DA8FEFE39AF5E9A1F7EBA4F7EAA5 F3E6A2F4EAA5EEE49DEDE399F4EC9BF3EB96EDE68EF4ED97F4EC98F4EC9CF0E69BF1E8A0F6EDA4 FBF4A8F9F1A5EEE69BF5EDA2F7EFA5F5EDA4F7EFA5F2EAA1F1EAA0F9F1A8F7EFA6F1E699F9EBA0 FCEEA7F7E8A6F5E7A3F9ECA5F9F1A3EFE794F2EA95EDE693E9E293EBE495F4ED99E7DF8AF3EC99 F0E797F6EDA0EBE396E6DE93F8F0A3ECE395EAE192D3CB7BEAE098F0E5A9FFF7BD665A1FDBD093 E5DA9CCBC081A095548E843FA39953ADA35BC2B96FDDD291FBEFB3F5EAAEDDD7944B401979702D F3E99CF3EB9BD7CF7AE4DD86F3ED93E0DA80F0EB9ADDDA8DB8B46A9F9A579A9559716A32514A25 554F1B6D6634928B597C75448F864BEBE393F3EB96F0E794F5EB97EDE28FFEF29EF8EA96FFF19D F1E18BF9E993F3E38EFDF1A6F5E9A6F8ECA7F4E7A2F7EBA5F5EAA2FBF0A8FCF1A9FCF0A6F8EBA2 F8ECA2FEF2A7FBF1A8F8EEA5F3E9A2FBF1ADFEF5B2F0E5A3F4E9A7FBF0ADF6ECA6F1E7A0F5ECA2 F8F0A6F8F1A4F7F1A6F6F0A5F6F0A6FBF4ADFFF9B3FEF8B3FBF3B2F9F1B1F9F1B3FCF3B7FDF5B5 FEF8B0FFFAB2F9F1A9F7EFA7FDF5ADFCF4ACFAF2AAFBF3ABFCF4ACFCF4ACFDF5ADFFF9B1FBF3AA F7EFA6FAF2AAFAF2A9FCF3ACFFF7B0FEF5B2FBF1B3FAF0B5FBF0BBFDF2BDF7EDA9F8F0A7FAF2A9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DED385DFD485E4D986D6CC75E1D77EE1D77EDED47DE1D780DFD482DED383E4D888EADA8CE5D587 DDCE80DFD284DCCF81E4D78ADFD387CDC57AD4CB80E1D88DE3DA8FD3C87EE7DA90E4DC90DCD388 E2D98EDAD287D4CC81D4CD81DBD588DED88CDAD486E3DC8ECDC475E3DA8CF0E99DCCC67C8E8B42 959349E3DF96E8E399F5EDA2F3E79AECDC8EEADD8EE9DE93ECE397E7DE92E2D98CECE394F4EC9C EBE392EFE794EEE693F3EB98F4EC97F3EA95F4EA95ECE28DE5DB86EFE590F9EF9AF6EC99F7EC9A F6EB9BF0E595F0E596F0E596F4E595E9D886EEDE8AEEDE89F2E28BF2E28BEFE085ECDD7FEFE180 E3D574EEE07EF9EA8BEEDF84F0DF88E0D079E4D47DF2E38DE6D883EADE8AECE08EF8EC99F4E998 F2E797F9EE9FFAEEA2F4E99AF1E696EDE38FF0E691F6EC95F4EA93F0E68FEEE48DF3E896F0E593 F3E592FCEB99FBEA98F6E593F7E694F7E694F6E593F8E795F5E492F2E18FF4E391F0E18FF1E398 F3E79DF7EBA1F7EB9FF4E89BF0E596F2E796F5EA98EEE48FF1E791F7ED96F3E994F5EA9DF7EBA1 F3E79DEFE399F0E49AF6EAA0F7EBA1FBEFA5FEF2A8FDF1A7F9EDA3FAECA3FBEBA1F4E496F5E597 F9EA99F7E895F7E893FCED9AF4E595E9D98CF4E499FDEEA3F9EC9EFAEF9DEEE393F0E596F2E798 F4E99AF8ED9EF6EB9AECE18DEBE189F1E88DE9DF86F8E999F8E89BF7E897FAEB98FDEE99F7E893 F1E28DF3E490F4E592EADB8AF1E193E8DB8BEBE18CF1E694E5DA88E2D785EBE090F1E696EEE393 F2E798F7EB9DF8ED9EECE192F2E798F1E697E9DE8FE7DC8CEADF8DF6EB99F4E997F1E696F3E79A F5E99FF5E9A2F9EDA5F1E695EFE590F0E690F1E694F0E595EDE293ECE094ECE096F7EBA3F7EAA4 F1E49EF5E8A4EADF9EEFE5A0F7EDA6F0E79CEEE596F6EE9DF3EA9BF5EC9DF8EFA2F3E9A0F2E8A1 F3E9A2F7EDA5F4EAA2EFE59DFDF3AAF6ECA4F7EDA6FCF2ABF4EAA3EEE49DF3E9A2F9EFA9F1E59D F8E8A4FEEFACFDEFB2FCEEAFFFF3B0F2E89FEAE195F1E89AFCF4ABF4EBA4FEFAB5EFE69CEAE297 F1E9A0EFE79FF6EDA9E4DB98E7DE9AC6BD78C3BB73DFD78EDAD288F2E8A5F7EAB2E3D79D564A0F DFD497FCF1AFECE29DFEF5AFEFE59EF1E7A0F7EDA6F4EAA3F3E8A7D9CD90EEE3A23E3312736923 F6ECA3E5DC8FF2EA98E4DC88E2DB83F0E98EFEFBA1ECE796E7E197F7F0A7E9E29EB7AF70787032 857C43B8B074D7CF91D9D192D5CD8D6E67219F974CF4ED9FD5CE80E8DF91FFF3A7E8DD8DEADD8F F4E798F9EB9EFFF4A6F4E496FFFAB1FFF5B0F9EFAAFFF7B1F7EDA6F3E9A2FBF1A9FEF4ACFEF4AC F7EEA3F4EBA0FAF1A5FAF1A6FBF2A7FAF0A8FBF1ACFDF2AEF6EBA9F6EBA9FEF4B1FDF3ADFBF1AA FFF6ACFFF7ACF9F2A4F9F3A6F8F2A6F8F2A8FCF5ADFFF9B3FFF9B4FFF8B7FFF8B7FEF6B7FBF3B5 FBF3B2FFF8B1FFF7AFFAF2AAFBF3ABFDF5ADFBF3ABFBF3ABFBF3ABFBF3ABFCF4ACFDF5ADFBF3AB F9F1A6FBF4A7FCF5A9F9F2A4FBF3A9FAF1A8FBF2ABFDF4B2FDF3B5FDF3B7FCF1B6F7EEABF8EFAA FBF2ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBCF7FE4D886DBD17BD1C66EE1D67DDFD47BD9CF77DFD47EE4D985E3D887E5D888ECDC8E EBDB8DDCCD7FDFD384DCCF81E1D487E1D589D6CD81DAD185DBD287DAD186D5CA7FE5D98EE0D88C DCD388E3DA8FDBD389E2DA8FD6CF86CDC77DE5DF96DDD78EDAD38AD6D082CAC374A69F51918B3F 9E9A4FD5D287EAE59BEEE79BF9F2A3FDF2A2F2E794EDE090E5DB8EEAE194EDE496EAE193EBE293 EDE595EFE796F0E895EEE693EBE390ECE48FEBE28EE8DE8AEADF8EF0E693F6EC98F8EC9BF6EB9A F8ED9CF4E999EDE291EFE494F1E595F6E896E7D784F1E08EF3E38FF0E08BEFE088F4E48CEBDC80 EEE082E6D779ECDE7DF4E686E8D97EF2E28AEBDB84DECE77F4E48FEBDC87EFE390F1E694FAEE9F F8ED9EF3E899F4E89BEEE298EBDF93F0E596EADE8DECE28DF3E993F1E790F0E690EEE390F1E694 F0E594F3E592F9E996FAE997F2E18FEFDF8CF5E592F2E18FF1E08EF0DF8DEEDD8BEDDD8AEBDC8A F2E597F2E69BF4E89CF5EA9DF5E99BF4E99AF3E898F9EE9EEFE493F1E694F9EE9AF1E695F7EBA0 F7EBA1F9EEA4F5E99FF9EDA3F3E79DF3E79DF8ECA2F8ECA2F5E99FF6EAA0FBEEA5FBEAA2F2E297 F0E093F4E594F6E793EEDF8AF7E993F6E794EDDE8EF8E898F2E395F0E494F9EE9CF2E797EDE293 F6EB9DF5EA9CF9EE9FFBF0A0EADF8CEBE189F7ED94EBE289EFE291EEDF8FF7E998ECDE8AE6D882 FAEC96EEE08AF9EB97F9EB98F0E291EFDF91EEE293EFE494F0E596C3B869F8EF9FE1D687ECE191 F2E797E5DA8BE7DC8DF5EA9BF2E798F2E798F4E999F6EB9AF1E693E8DD8BEBE08EF0E592F3E896 F7EC9CF7EB9EF5E99FF5E9A0F6EB9AF7ED98F7EC98F5EA99F1E696EDE292F3E79BEBDF94F9EDA4 F7EAA4EDE09AF7EAA4F0E6A0EDE39DF6ECA5EBE19AE5DB95EFE69DE3D993ECE29BF6ECA5F6ECA5 F8EEA6FDF3ACF7EDA6F4E9A5F8EDA9F6ECA6F9EEABF9EEAAF9EDAAF7ECA8F1E6A2F2E7A3FBEEAB F5E5A4F8E9AAFEEEB2FEEFB4FDEFB4FCF0B3F9EEB0FDF2B2EFE3A4EFE6A8EFE5AAFAF0B5F7EEB0 E8DFA1E8E0A4F1E8ADEDE3AAB8B0779F965C71672CB1A96AD5CD8CBCB371CFC587C0B37E8B7E48 776C2EEEE3A1E4DB94F0E69CFBF1A8E6DC94EDE39BF7ECA8F9EEABEDE3A2F2E7A76D6225847934 FFFFBCF4EAA1F0E79AE0D788E1D987F6EE9AE9E28BEFE794ECE598E4DD94A19A5279702BBEB671 F1EAA4FAF1ABE8E096F2EC9FEEE797FAF4A0DBD484817832837B36CBC37DFEF5B0F5ECA6F0E39F F5E9A5EEDF9CF2E39FF4E6A2DECE8AE6D895FBF0ACECE19DF5EBA6FAF0A9F8EEA7F7EDA6FBF1AA FCF2AAF5ECA2F1E89EF4EAA0F7EEA3FCF2A8FEF4ACFAF0ABF8EEAAF9EEACFCF1AFFFF7B4FEF5AE FAF0A9FAF0A7F5EDA2F5EEA1F7F1A5F8F2A6F8F2A8FAF3ABFDF6AEFDF6B1FDF6B3FDF5B4FBF3B4 F9F1B3F8F0AFFBF2ABFAF2AAFAF2AAFFF7AFFDF5ADF9F1A9FBF3ABF9F1A9F9F1A9FAF2AAFBF3AB F8F0A7F6EEA3FAF2A6F8F1A3F3EC9EFAF3A4F7F0A1F7EFA4F8F0A7F9F1ACFAF1ADF9F0AEFBF2AE FBF2ADFBF2ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDBCF7CE8DB86DCD07BDDD27AE8DC83DDD279D6CB74DBCF79DFD27EDCD07EDDD17F E8D88AE5D587D8C97BD7CA7BD4C779DBCF82DFD388E3DA8DE8DF93DCD389D8CF84DACF83E5D98D D8D082D7CE82E1D88DDCD48CE6DE96BBB36D77702AADA661B8B06EABA45F8F873BAAA353A49F4E C7C173EEEA9CE1DE90ECE698E2DC8CECE492FBF09EF8EC97F0E591EDE495EEE597F6EC9DF8EFA0 F0E897E9E190F2EA99F0E895F1E996EEE693EEE694F2E896EFE494EEE394F4E999F5EA99F2E898 F6EB9BFBF0A0F6EB99EEE490F0E692F2E793FAEC99F1E28FF9EA98F5E691F0E18CEEE088ECDE86 E0D277EADE80ECDF82F0E384F2E586E5D67BF2E289EEDD85DACC74E6D783EFE290F5E997F5EA9A F8ECA0F7EBA0F2E69BEFE398EEE299EEE296F1E696EADF8DE8DD8AEBE18BEFE58DF2E893EEE490 F0E592F1E697F4E795F6E894F7E895F1E28FEBDC89F2E390F3E491F1E28FF2E390F4E592F2E390 F3E593F2E597F0E697F0E596F1E697F3E899F5EA9BF4E99AF7EC9DF5EA9AF5EA9BF6EB9BF2E798 F2E69BFCF2A8FFFDB3FBEFA5FDF1A7F0E49AF9EDA3F8ECA2F4E89EF1E59BF5E99FF8EAA1F6E59D F5E599F1E194EFE08FEFE08EEEDF8BF8EA92F5E68FEBDD86F3E38FF2E590F0E491F4E998F9EE9E F5EA9BFDF2A3F9ECA1F8ED9EFAEF9FEDE290EBE28BF6EC94F1E890F2E695EADE8EFAEE9BDFD37F CFC36CF5EA91EADF86F1E68FF2E691F4E896ECDF90F0E395E7DC8FF4E89CA09447E8DF90F3E899 F9EE9FF0E595E7DC8BE7DC8CF3E897F4E998F0E595EEE393F0E594EFE591E8DE89EBE18CEBE18C F4EA96FAEF9EF6EA9CF2E69BEEE297F0E592F4EA95F8ED9BF7EC9CF5EA9BF5EA9BF8ECA0F1E59B F8ECA2F6EAA2EFE29CF7EAA3F1E89EE5DC92EDE39CEEE3A0EAE09DEFE4A4EADF9EF0E5A2F6ECA7 F3E8A1F1E89EFAEEA9F0E2A0E9DB9AECDE9DD7CA87E1D392F5E8A5F7E9A7FCEFACFDF0ADF9ECA9 FBEEACFDEDAFFEEEB2FCEEB2FBECB1F8EAB0F5E8B0F5E8B2FFFAC5FDFBC7FFF5C1FFFECBFBF1BD E9E1AFF5EDBCEFE7B6E9E1B1F1E8B9C4BC8C625A293B33007E773FACA66A7F793B4D440A817442 AFA26D9E9355F4EAA4F6EDA0E3DB8BFAF2A2FAF1A6F3E9A2E6DB9AFCEFB2F7ECAB716721817732 FBF1AAF1E9A2EBE198DDD489F2E99BEEE596F2E99AF8EF9FF7EF9FB1A85D877D35ABA15AE0D58D F6ECA3FBF3A7F9EFA0EDE393EAE38CF2EA90E4DD7FFAF49CE1D9958F87487B7334BBB173EFE5A7 EBE0A3F8ECAFE6D99CDACD90BEB27587783D70652CE6DB99FAF1AFF0E5A2E9DF9AF5EBA6F9EFA9 FAF0A9F8EEA6F7EDA5F7EDA5F6ECA4F4EBA0F8EFA4FCF2AAF7EDA8F2E7A3F7ECAAFBF0AEFFF4B1 FCF2ABF9EFA8FAF0A7F4ECA1FAF3A7FBF5A9FAF4A8F5EFA5F2EBA3F2EBA3FAF3ADFAF3AFFAF3B0 FBF3B2FBF3B3FAF1AFF6EEA7F7EFA7FAF2AAFFF9B1FEF5ADF8F0A8FAF2AAF9F1A9F9F1A9F9F1A9 F8F0A8FCF4ABFAF2A8FAF2A8F8F1A5F5EDA1FCF5A6FCF5A6FBF4A5F9F1A5F9F1A8FBF3ABFDF5AD FFF8B2FFF6B1FBF2AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE0D47EE6DB82D8CD74E2D77EDED37ADDD279D8CC76DBCF79DBCF7BDACE7A DFD27FE9DA89E2D382DBCD7CD5C879D3C677E2D687DFD484DFD689E7DE91DDD487D7CE81DACF83 E0D586D0C77AD1C87CDAD186D5CD84E1D892BAB16E5C5412585011847C3DB1A968CDC87ED3CD7E E9E493F4EF9EE5E08FFEFEAEE8E090E0D886E7DF8AF5EB96F4EA93F2E891EEE694ECE493ECE493 EFE796F0E897F1E997F1E996EBE390F1E996F2EA97F1E996F7ED9DF3E899EDE195F2E699EEE394 E8DC90F0E596F7EC9CF4E997ECE28EEDE38CECE38BF4E693F6E794F8E995EBDC89F1E28DF5E790 F2E48CE7D980F3E68BF1E38AF2E589FAED91EEE085ECDE85E4D67DDACC75CCBF6AE4D886F3E798 F0E498F1E59BF1E89EEFE59DEBE199F5E9A0F5E99DEDE393EDE290EEE391E9DF8AEBE18CF1E792 EBE08DEADF8FECE191F1E392F2E392F6E796F6E796ECDD8CEBDC8BF5E695F3E493F5E695F8E998 F4E594F6E998F7EA9BF2E797EEE393ECE191EEE393F0E596F4E99AF1E697FDF2A3FBEFA3F1E59A F5E99DF2E69DFDF0A6F6E99FD6CA80F3E79DF8ECA2FBEFA5FAEEA4F8ECA2F6EAA0F7EBA1F6E89F F3E29AF4E499F8E89BF6E796EADB8AEFE08CF8EA92F5E78FECDE85EBDD84F6EA91F7EB97ECE190 F8ED9DF8ED9EFAEEA0F6E99EFBEFA3FAEFA0F5EA9AEEE390EFE590F5EB96FBEE9DFBEE9EFEF29E EEE28EEADF87FFF49BEDE289E2D680DED27DF0E492E7DA8BEEE294F4E89FFCF0A8BBAF65B3A75B F7EB9FF0E596EFE495F3E898F3E897F6EB99F5EA98F3E897EFE494EEE391F2E894EFE590EEE48D ECE28CF8EE99FCF1A0F7EC9DF7EBA0F4E89DF1E696F3E897F2E797F1E696F5EA9AFBF0A1FCF0A4 FAEEA3F7EBA1F5E99EF4E8A0F4E89DEAE290E8DF8FECE396F3E9A1F4E9A7F1E6A4EDE2A2F0E5A3 F4EAA2EEE599ECE394F6EFA5FFF4AFF8EBA7F3E6A2EFE29CF2E5A1F6E9A3F2E59FF6E9A3FCEFA9 F6E9A3F3E6A0F8EAAAF7E9ACF8EAABF9EEAEFDF2B4FFF3B8FDF6C2DED2A0E5D8ABC0B587AEA472 827848A79F71E0D8AAF4ECBEF7EFC1FFFFD3DDD4A6645C2C8F8854A7A069878146958F51C2B87F FEF0C1AC9F6AC3B778E9DF96E2DB89F7F09BEDE591F1E89AEBE19AF7ECADFCF9C181753391873F FFF8B1E4DA92E8DE96E9DF97EFE69BEEE59AEEE599F9F0A3C5BC6F70671AA99D53EBDE94F1E59B D8CA80F0E397EFE495E8DC8DF7EB9AF3E994F6EA93E6DB82E4D988D8D08FD3CB8CCAC2838F8748 8880429A92549A9153776D3271672C897F448F834963591BE9DF9FFFFDBCFFF8B5EAE19EF5ECA9 FBF2ADF6EDA8F0E7A1F7EFA7FCF4ACF9F1A9F7EEA3F7EEA4FCF2AAFAF0ABF2E8A4F8EDABFCF1AF FEF3B0FAF0A9FBF1AAFFF6ADFDF4A9FAF2A7FDF5AAFDF5AAF7EFA6F2EAA2F0E8A0F0E7A2F5ECA7 FBF2ADFDF4B1FCF3B0FBF1AEFAF1AAFEF6AEFEF6AEFFF9B1FCF4ACF8F0A8FBF3ABFDF5ADFEF6AE FCF4ACF8F0A8FDF6B4FCF3B2FCF3AFFDF5AEFAF2AAF8F0A6FCF4A9FDF5AAFEF6ABFDF5ACFDF5AC FBF2ACFDF4B1FBF2B0F8EFADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDBD075DED277DDD177E9DD84E1D57CDED279E0D37DDED17CDED17D E3D581E7D986EBDC8BE9DA89E4D585D8CB7BDACD7EE7DB8BE3D889DDD486E0D789DED587D7CE81 D4CA7BDED384D4CB7ED7CE83DDD58AD8D088D6CD8ADDD492B8B0706B63247E7638D0C889D8D389 DBD688DDD888E7E291EAE594F2EC9AEFE795EEE691F4EC96F5EC95F2E990F5EC95F3EB97EFE795 E6DE8DEAE290F6EE9CF8F09EF0E895ECE491EEE693F0E895F1E996F1E898F4E89BF4E89CFCF0A4 F6EA9EECE095EEE297EFE496EDE292E7DC88E9DF88E9DF85EBE08BEFE18EEDDF8CE4D683F1E38F F8EA95F4E690EBDE87F7EA91ECDF87E4D87EF3E68DF4E68DEBDE87F1E48EF3E692E1D582FDF1A2 F6EB9DF4E99FF7ECA2FAF0A8F8EEA7F3E8A1F6E9A2F4E89FEFE397F1E697F3E895EDE38FEFE590 EEE490ECE190F3E898F2E797EEE293EEDF8FF4E696F6E897ECDD8DE9DB8BF4E696F4E695F2E494 F0E291EFE191F1E494F8EE9EF3E898EEE394EFE494ECE192E5DA8CF1E698F0E497FDF2A7FBF1A6 F2E69BF6EAA0F4E89EF7EBA1E1D58BC4B86EEADE94FAF1A7F8ECA2FBEFA5F7EBA1F7EBA1F6EAA0 F1E39AF0DF97F3E398FBEB9FFCEC9FECDD8CE8D986F4E590FAEC93F4E68DEFE187F6EA8EF6EA95 EBE08EF4E898F4E99AF5E99BF5E99DF6EA9EF3E79BF0E597EBE08FE9DE8CF1E694EFE293F0E495 EEE291F1E690F5EA94F5EB93F7EC94EADF88E4D984F2E694EFE393F3E79BF2E69EFCF3ABEBDF96 B8AC62FAEEA2E7DC8EEDE293F4E999F0E593ECE18FEEE490F1E695EBE090EBE08EF1E793EDE38E E4DA84E7DD88F3E994F7EC9BF1E697F4E79CF8ECA0FBF0A1F6EB9BF2E797F2E797F6EB9BF8ED9E FAEEA2FBEFA3F6EAA0F6EA9FF6EAA1F1E698E9E289EFE890F1E996F3EA9CF4EAA1EEE59EE8DE97 E9E097EEE599F1E898F1E995F3E99BF9EDA5F4E7A2E9DC95F4E89FFAEEA5F3E79DF2E69BEFE399 F4E99DEBDF93E7DB90FEF1ADFCF0AEF4E8A0F2E99FFBF1AAFFF5B5CABE886A5E2E7267386F6535 3B33021910001B1300453E0C655E2F787142867E4D554E22615A27817A42FFF9BDFCF7B7EDE9A5 FFF8BBD9CD9A92854FE8DD9DF2E89DF7EF9EE8E08BEFE792F4EB9DFBF5AFEDE3A48F824A918745 EEE49CF6ECA4EFE59DF6ECA4F2E8A0F2E89EFBF1A7E3DA909D944A8A8037C4B86FFFF2A5FBED9E F3E496E7D98BEFE193F3E598EBDC91EADC91EEE095F4E59BF7E89EE7DA92D3CA86C2BA77ABA360 9088449992509D9554B1AA69ADA464B8AF70DFD698D1C889877D3FD8CF8FFBF1B1F9F4B5F5EDAA EFE6A4FDF5B2E5DC98EDE49FF1E8A4FAF1ABF9F1A9F6ECA4F6ECA2F9EFA7F7EDA8F0E6A2F2E7A5 F5EAA8F8EEABF4EAA3F3E9A2F8EFA5F6EDA2F6EEA4F9F1A7FBF3A9FBF4ABFBF4ABF8F0A8E8E09A F1E9A3F9F1ABFCF3AFFAF1AEF8EFA9FCF4ACFFFAB2FFFAB2FFFAB2FDF4ACF9F1A9FDF5ADFCF5AD FDF7AFFEF6AEFAF2ABFEF5B8FBF0B8F9EFB4FCF3B4F9EFAEF4EBA6F8EFA9FAF2ABFDF5AEFCF3AD F7EFAAF6EDABFFF6B7FEF4B5FBF2B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D475D8CB6DE4D77AE4D67DE3D57CE5D77FEBDD87E2D37E DCCD78E1D27DE4D581E6D785E9DA89E6D887DFD381E6D98AE0D485E5DA8AE7DE90E5DC8DE9E091 DAD185CEC475DFD485DED588DFD68AE2D98EDFD78FD9D18BD5CC89E2DA98B3AA6C7A72349C9454 E1DD95DBD68CE1DB8FE7E192E6E08FE8E28FEAE28FEDE58FF4ED95F4ED95F2EB93FAF39BEEE690 EAE28DE8E08BEDE592F1E996F2EA97EFE794F0E895EDE592EFE793F9F19EF2E998F2E797F2E799 F6EA9FF5E99FF0E49CEEE299ECE095F3E898EDE38FF0E68EF6EC93EDE18CE9DD8BE7DB8AECE08C EFE38FF0E48FF0E490ECE08BF2E690F3E793EBE08AECE18CE7D884E3D683F1E592EDE08FE7DB8B FAEFA0F4E89CF3E99EF4EBA0F5EBA3F2E8A0F0E69EF3E79FEFE399F7EB9FF7EC9EF1E696F2E794 F4EA95DFD482E0D584F7EC9CF3E899F2E596F2E596F6E99AF7EA9BF0E394F3E697F8EB9CF9EC9D F3E697F2E596F9EC9DF7E99AF6EB9BF4E99AF5EA9BF8ECA0F3E79BE7DB8FEEE296F2E69BF6EAA1 F8ECA2F6EAA1F4E89EF1E59BF7EBA1F0E49AEDE197F0E49AF2E59BF7EBA1FBEFA5F0E49AF2E69C F3E79DEFE198F0DE97F7E79BF5E69AFAEA9FFAEA9CEADB8AF1E28EF5E691F3E58DF7E990F7EB91 F3E790F1E793F2E795F3E899F5EA9CF7EAA1F8ECA1F8EBA1F6EA9EF4E99AF5EA99F7EC9BF4E99A EDE293F1E696F3E995EFE58FEFE58EF4EA95F1E792F0E593EFE495F0E696EDE196F4E8A0D4C981 B7AB62F5E9A0ECE094EDE195F0E596F2E797F1E696F1E694F0E595F2E796EDE292EFE392F4E996 EFE690EBE18CEBE18BF4E997F9EE9EF3E79BF2E69BFAEEA4F3E899F4E999F3E899F2E798F3E899 F6EB9CFDF2A6F8ECA0F6EA9EF4E89CEDE197E6DB8AEEE78BEFE88DEEE78EECE48FEDE493F1E899 F6ED9FECE395E4DC8CECE491F8F09CF7EFA0EFE59DF0E39DF2E79FF6ECA1F5E99EEEE397F9EFA0 EEE395F5EA9BF4EB9AEFE495F6ECA4FAF0A8F3EB9CF0E894F8F0A0F3EBA1F9F4B99F9462281D02 B6AE79C2BB81CCC687C1BB7FAEA66DA29C62A09961AEA56D938D54A9A365696222E9E4A0EDE8A1 EDE89DF4ECA8AA9D66AFA368FEF4B2F7EEA2E8DF8FE5DD8AF8F09EE2D98DFBF3AD796E2E867A3F D6CB88FFF5ADE3D991F6ECA4F8EEA6EBE199FCF2AAECE29AA59B538E843CEEE49CF6EA9FEFE292 EDDE8CF3E393F7E799F2E294F0DF96FCEDA6FFF0ADECDA9AD0BD82B5A16899894BB3AB60C5BC72 CCC47AC3BB70DBD38AF1EBA2F4EDA6E0D992DFD891ECE5A0E3DC97ACA463877D3FF0E6A8FEF4B7 FCF1B3ECE2A3F7EEACEFE6A3F6EDAAFAF1AEFBF2ACF1E8A2F6ECA4F9EFA5FBF1A9FAF0ABF5EBA7 EFE4A3FBF0AEFFF6B3F9EFA9F4EAA3F8EEA5F7EEA3F8F0A8F7F0A7F5EDA4FCF4ABFFF9B0FCF4AB F1E9A1F5EDA5F8F1A8FAF2ABFAF2ABF5EDA6ECE49CF9F1A9FAF3ABFAF3ABFCF4ACFBF3ABF9F1A9 F6EEA6F7EFA7FBF3ABFCF4ADFEF7BEFFF4C2FDF1BDFDF2BAFDF3B7FAF0B2FBF2B1FBF2B0FDF4B2 F9F0AEF5ECABFCF2B3FEF4B6FDF3B5FAF0B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCD06DD5C868E1D476E3D67CE8DA81E3D57DE8D983 E9DA84DED078DCCE76E5D77FE0D07EDECF7CE2D481E5D987EEE290E5D988E3D888E4DD8BE3DA8A E4DB8CD8CF7FD5CA7DE5D98DE0D78AE2D98DE1D98EDDD58DE5DD94D7CE89D9D28DE4DD99A8A05F 7C7431ACA763CCC981DED98FDFD98DE5DD8FE4DC89F3E896EFE58FF0E68FECE58DE9E38BECE68E E8E189E4DD85F0E991EDE490ECE48FF8F09BEAE28FE8E08DEBE391EBE393F8F09FF8EF9EF6EB9B F3E899F2E69BF5E99FF4E8A0F3E6A0EFE39CEEE295EFE493F3E994F5EB92F3E792F1E593EFE391 F0E492EEE290EADE8CEBDF8DEBDF8BE4D885EBDF8DF0E491DED280EADD8EEBDE8FEBDE90E8DD8D EEE394FCF0A4EFE79AF1E89DEFE69BEAE297EAE297EFE59DF5E9A1EDE197F6EA9EFBF0A2F8ED9C F5EA98F8ED9BE7DC8DE9DE8FF9EE9FF3E79BF3E697F4E798FAED9EFCEFA0F6E99AF5E899F6E99A F3E697F0E394F7EA9BFBEE9FF1E395F2E69AF6EA9FFBEFA3FAEEA4F5E99DF3E79BF1E599F2E69A F4E89CF5E99DF6EA9EF7EB9FF8ECA2F8ECA2F4E89EF7EBA1F9EDA3F6EAA0FBEFA5F8ECA2F3E79D F0E49AF2E69CF6E89EF6E69BFBEBA0F4E49AF5E49CFDEDA2F3E297F1E194F0E091EEDF8BF5E78F F7EA92F5EA93F0E692EFE492F3E899F4E99BEFE399F5E9A2FDF1A7FEF2A7F5E99DF0E596F4E99A F0E499EFE397F1E697EDE293EBE08FF1E792FCF19FEDE291E8DD8EEEE396EFE398E7DB92F3E9A1 C9BD759F9349F6EAA0E9DD93F5E99DF1E599EFE497F2E798F6EB9BF9EE9FF1E697F0E597FAEFA0 FAEF9FEDE290E8DD8BEFE492F6EB9BF9EDA0F4E89EF3E79FF9EDA5F1E598FAEFA0F8ED9EEADF90 EBE091F9EE9FFDF1A6F4E89CEDE196EADE92E2D68ADACF7FF3EC93F1EA90EFE88EEFE88DF3EC94 F4ED95F1EA95F9F19EF2EA99F0E798F1E89AF5ECA2F4EBA6ECE29EF0E7A2F5EDA5F3E9A2E7DF95 F8F1A3F4EC9EEBE293EAE393EBE294FCF4ADFDF5ADF8EF9CF1ED91F4EE98F8F0A4F7EFB1CDC28F 2B2209888149FFFFC3ECE9A1FBF4AFF7EFACF2EAA8F4EAABFFFCBDFEF6B4C3BA77867D38FAF4A9 F0E99CE9E292E2D9908E8343ECE2A1F3E9A3DBD288F4EB9FF1E899E5DB8FFCF5AA998F49867B38 E1D696FBF1AEEAE099E7DD96E3D992EBE19AF9EFA8D8CE87928841CDC37BFFF7AFE3D991F4F3A8 F4E798F4E894EFE48FE4D887E5D98AF6E99FE1D28ED3C484AA9A5F9A8954B7A575D2C188ECE292 FAEF9FFCF4A3E7DF8EE9E092E4DC8FD6CE83DDD58CEEE79EE8E299EAE39BCEC7845951139E9658 EBE3A5FAFABCFBF3B4FEF5B7FCF9B8F9F2B1F9F1B0FEFDBBF8F0ABF4EAA2F7EEA3FBF1A9FCF2AD FAEFABF5EAA8FFF6B4FFF7B4FBF1AAF6ECA5F9EFA5F9F0A5F8EEA6F8EEA6F4EAA2F9EFA7FFF6AE FDF3ABFAF0A8FAF0A8FAF0A8F9EFA7F9EFA7F4EBA4EFE79FFBF3ABF6EEA6F4ECA4FCF4ACFCF4AC F9F1A9F9F1A9F8F0A8FAF2AAFEF6AFFFF6BDFFF3C1FFF5C1FFF7BFFEF5BAFAF0B2FDF4B3FBF1B1 FBF1B3F8EEB0F6ECAEFEF5B8FCF2B5FCF2B5FEF4B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CC65D8CC69E5D778E4D67AEBDC84E2D37B DDCE78E9DA83E8D981E0D179E4D57EDDCE7ADFD07DDFD07DDDD17EE9DD8BE8DD8BE8DD8CE1D988 DDD584E1D888DCD384D9CE81E1D58ADAD185DFD68ADED58ADCD48ADED68CDDD58CDED78ED9D38B DDD68E88833B64611DACA865D7D38CDED58DE8E093EAE191F4E996F3E994F3E993EFE892ECE692 EAE48EE3DC83ECE58CF0E991F0E892F3EB95F5EE98E7DF8BE8E08DEEE694EBE392F2EA99F3EA97 F3E994EDE292E9DE90F0E49CF3E6A0F6E9A4F4E7A1E6DA90ECE192E8DD8CE1D781F5EA97F4E997 F0E593F0E593F0E493EFE392EFE392EBDF8EE8DD8CEADF8EE7DB8ADFD384F4E69BFAEDA3F2E59B EADE93EFE498F1E79BF0E79BF3EB9EF0E89BEBE496EDE699F4EBA0F6E9A3EBDF97F0E49AF3E89A EDE292EBE08FF2E795EFE494F3E899F9EE9FEADE92F1E597F6EA9BF6EA9BF6EA9BF6EA9BF6EA9B FAEE9FF8EC9DF5E99AF6EA9BF6EA9BF4E799F0E49BF1E49EFAEEA5FCF0A7F3E79DEDE196F2E69A F3E79AF5EA9CF6EA9CF4E99BF4E89BF7EBA1FBEFA5F8ECA2F8ECA2FAEEA4F9EDA3F9EDA3F7EBA1 F9EDA3F2E69CF1E59BF9ECA0F6E69AF8E89EF7E79DF8E7A0F9E8A1F5E49DF7E69EF4E398ECDC8E ECDC8CF6E894F8EC98F2E894F1E694F8ED9EFAEFA1F3E79DEEE29AF4E89FF7EBA1F4E89EEEE296 EBDF94EEE39AF1E69DF2E79DEAE093E8DE90F1E798F7ED9EEEE496ECE296EFE49BF0E59EF1E69E EEE297F4E89DF0E499ECE095F9EDA3EEE297F2E69BF5E99EF2E69BEEE297F0E499F1E59AF0E499 F4E89CF5E99CEADF8FE3D888EFE595F3E79AF6EAA0F5E9A1F6E9A4F9ECA6F9EDA2F9EDA0F4E99B F1E598F1E698F5EA9CF3E89AF3E79AEFE496EBDF92EADF91EBE093EFE697F1E897F0E994EFE88F F0E98FF2EB91F0E990EAE290E6DC91F4EAA4F5EDAAEFE6A8F1E9AFF9EFB5F6EEB2EBE4A6EDE5A5 FBF3B2F1EBA7EDE6A0F4EDA6F6F1A9FAF2ABF9F0AFF1E7A4EEE696F1EC91EDE88EEAE496F0E7AB EBE2B16A6233413B08E0DD9AF0EDA2E6DE92F0E69CE9E197E6DB95ECE09AEDE49EA0964FABA058 FAF1A6E8DF91F4EA9AD6CD80ACA25AF6ECA5F6ECA5DCD28BF0E69FEEE49EFCF2ACB1A7609B9049 F4EAA4F9EFA8ECE29CE9E099EFE5A1F4EEA7F0E6A0B1A760A19750D3CA83FAF3ABF4EBA1F2E99F E5DC92F0E496F2E897FAF2A1F4E898D1C576B7AA5D9E9148B3A661CFC080ECDDA3FCECB6F9EAAB F4E897EBDE8BEFE390F2E895F1E596E0D687EBE295E1D98ED4CD82ECE59CECE59CEDE5A2B9B174 857C407B72369B9354B5AD6FC1B97AA59D5EE9E1A1EEE6A5F4ECABF6F0ACF6EDA5F8EEA4F9EFA7 FBF1ACFEF4B0FFF5B3FAEFADF8EDAAF5EBA4F5EBA4F7EEA4F9F1A5F6ECA4F7EDA5F3E9A1F6ECA4 FDF2AAFCF2AAFCF2A9FAF1A7F9EFA6F9F0A6FAF1A7FBF1A9FEF7AFFFF7AFF7EFA7F6EEA6FAF2AA FBF3ABFEF6AEFFF7AFFBF3ABF9F1A9FCF5ADFAF0B3F9EEB5FAEFB5FAF0B2F8EEAEF7EEABFBF2AD F9F0ABF9F0ADF5ECAAF4EBAAFEF5B6FDF5B8F9EFB3F1E7ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDACD65DDCF6CE3D575DBCC70E2D27A E7D780DFCF78E6D67FEADA82E2D27ADECE77E2D380E8D986E2D481D8CC78E4D886E2D785DFD482 E1DA89E9E190EAE291E0D788DCD184DFD389D7CE83DFD68BE0D78CDFD78CE8E095DAD287E1DC8F CCC67AD5CF81B8B3678E8B487C7A3ABEBA76F7EEA9E9DE94EFE496EFE292F5EA96EFE792EBE390 EAE591E9E490E5DE85F3EC92EDE68CF2EB94F9F29AEFE890EEE691F3EB98F2EA98F0E897F4EC9B E9E08BEAE087E7DD89E6DB8DF3E79FF8EBA5EFE29EFEF1ADFEF1AAFFF7ACF0E495EFE491F2E795 ECE18FE6DB89E7DC8AEBE08EEDE292F0E595EDE292F5EA9AF1E696EBE08FF7EB9EEFE09AF9ECA8 F6E9A3F0E39CEDE39BECE498EEE59AEFE89BEFE898EEE797EFE898F2EB9EF2E69FEDE199F2E69C F2E799EEE394EEE392F3E896EDE292EFE494F2E797ECE094F3E89AF5EA9BF0E596EEE394F3E899 F4E99AF4E99AF3E899F4E99AF3E899F2E798FCF0A3F7EAA4F1E4A0FAEDA7FFF2ACF2E69EEBDF95 F1E599F5E99CF7EC9DF7EC9CF3E898F0E596F4E89DFCF0A6F8ECA2F4E89EF6EAA0F7EBA1F5E99F F9EDA3F9EDA3F5E99FF3E79DF7EA9DF1E193F6E69BFFEFA7FFF2ACFDEDA8F8E6A3F9E8A3F8E7A0 F1E096ECDC8FF7E89AF9ED99F5EB94F6EB99FCF1A2FDF1A4F8ECA2F3E79FF3E79FF6EAA2FAEEA4 F8ECA1F2E69CEFE69FF2E8A3F3E9A2EBE299E8E094F1E89BEEE69AEFE69BF1E79FF2E8A1F1E7A2 F1E69FEFE398F0E498E9DD91F1E599F6EAA0EBDF95EFE399F6EAA2F4E8A0EFE39BF1E49DF2E69E EADE96E8DC93ECE096EBDF93E9DD91F0E498EFE399F0E49DF5E8A4F8EAAAFAECA9F4E8A0EADE92 E9DC91F0E498F1E599E8DC91F2E798F6EB9CF6EB9CF2E798F4E999F8ECA2F7EDA8F9EEA7F6ED9F EEE692E9E288E4DD83E4DD85F1E899F4EAA5F4E8AED8CB96B0A474938B5C877F4F857D4C7F7745 7F7842817A42948F54CAC488D6D093D0CA8BE2DC9EF4ECB4E2D79CDDD689E8E28BEBE68FF9F3A7 E8DEA6F7EDC2BAB188292300C7C381E7E498E3D98AF1E498EFE397F4E79FF2E49FF9EDA7988B43 CEC17AE9DD92EBDF91EFE294B0A656D6CE7DEFE69AF9F0A7E3D895F2E7A7F3E8A9A69B5B877D3A F1EDA6ECE398E5DC90F4EAA4F0E4A2F0E5A3D3C886948A45B3A862F7EEA7F2E8A1F6EDA3F9F0A5 F1E89DF4EBA0FEF2A8FEF2A7E6DA8EB9AE5FACA151C3B867EEE392EADF91E6DA8FE7DB93F0E29E F6EAA1FBEC9AFDEF9BFAEC9AF2E494F3E697EBDD92F9ECA2EBDF95DCD28AE0D791E7DE99E8E09F F7EEB3DBD297B0A76CACA3689B9355898143696122827A3BD3CB8BF4ECABEAE2A0F4EAA3F3EA9F F2E8A0F4EAA5F9EEAAFCF1AFFFF6B4FBF0ADFBF1AAFCF2ABF9EFA6FBF2A7F3E9A2F8EFA7F6ECA4 F6ECA4FBF1A9FAF0A8F8F0A4F9F0A5F9F0A5FAF1A6FAF1A6FBF2A8FDF5ADFCF4ACF7EFA7FAF2AA F9F1A9F9F1A9FDF5ADFDF5ADF8F0A8F5EDA5F5ECA5F6EDAAF7EEACF8EEACF6EEA7F6EEA6F8F0A6 FCF4A9FBF3A9FCF4ABF9F1A9F8EFA9FEF8B4FFFBBEFBF1B6EDE3A8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD26AE0D36DE3D575DACB70 E5D57DE2D27CE8D882E4D47DE4D37CE4D57BE1D179DFD07BE2D37EE2D47FDDD27EE5D987E0D483 E0D583E3DB8AECE493E9E190DED685DFD486DFD389D5CC81DFD68ADED58ADED789E2DB8DE5DE90 CFC97AD5CF80C5C06FE2DE8FD6D2927F7B3F969050E5DC99F0E59DF1E497F1E495F7EC9AE9E08D DCD484E2DD8CEAE591ECE58CECE58AF0E98EF2EB92F0EA91EEE68FF0E893F6EE9BEBE390F1E898 F9F1A1E7DE89EDE388EEE48EECE190F9EDA2FAEDA7F3E5A3EFE29ED7CA85F5EBA2FBF0A1F2E797 F3E896EEE391ECE18FEEE393F0E595F0E595E9DE8EF4E99AF2E798EEE393F5EA9BF7EB9FF1E4A0 F6E8A7FBEEABF4E7A2EEE49CF5EBA3F1E89DEFE89BF1EA9AF1EC9BEDE896ECE596F3E7A0F5E9A1 F9EDA3F5E99CF3E899F4E999F5EA9AF2E797F5EA9AF5EA9BF1E598F4E89BF3E899EEE395EDE294 F5EA9BF1E697EFE495E9DE8FECE192F2E798EFE495EFE397FBEEAAF3E5A4F7EAA7F6E8A4EFE29B F9EDA3F6E99DF5E99CF4E99AF4E898F3E896F3E898F6EA9FF7EBA1F4E89EF6EAA0F5E99FEFE399 F4E89EF9EDA3F1E59BF6EAA0FAEEA4F8EA9EF3E395F9EA9FFFEFA7FCEBA6FDEBA9FBE9A8F5E3A1 F4E29FFBEAA5FAEAA2FBECA0F6EA97F6EC97F9EE9CF9EE9FF7EC9EF4E89EF7EBA3F9EDA5F8ECA4 F6EAA0F8ECA2FCF0A8F5EBA6F4EAA5F5EBA5F0E69FEDE39BF2E99FF0E69EEAE098EEE39DF5EAA4 F2E6A4EADF97F1E697F5EA9BE3D889EEE394F1E599F4E89EEEE29AECDF9AF2E5A0F8EBA6F4E7A3 F3E6A0F1E49EEFE29BEBDE95E5DA90ECE097F3E79EF0E49AEDE19AF3E6A2F7E9A8F6E8A7E7DB93 EDE096F0E498EFE398EFE397F1E599F2E798F0E596F4E99AF9EE9FF7EC9CF2E79EF9EDB3F7ECAF F1E79FE9E190E6DF88E4DD85EAE28FE4DB92A99E6174673652431B483C175D552E7E764F989168 8A835A7D774A7B7546635D2C635D2B88824EC7C28BC3BD879389598A7E4B9C9350B0AA58C0BB6A E8E29CF9F3BEF4EDC6FFF8D42C2500A8A465EDE79CFAEE9FF9E99BEBDC91F3E29AE7D691EDDD98 887833ECDA96F3E59EF6E7A0DBCA839A8D3EECE38EECE493E2D98FE5DB99EBE0A3BFB37882763B E1D695EFE49DEDE497E8E08FEFE59DFBF4B5BAAE6E786D2BCAC07BFDF3AEEBE19BF3E9A2F4EBA1 F6EDA2EBE295D4CB7FD1C780ABA159AAA156D9D083FBF3A1FFF9A2EEE78FECE58DEAE38CE8E08B EAE28FF3E796F2E192F4E394F1E093F0DF92F7E79CEADC93E5D990D4C882CABF7AB6AB68A49957 ACA365A9A066A0975D9D9359B2A96DC4BB7FBCB476B7AF71857D3E787031CBC383F0E8A7F0E69F F1E89EF3E9A1F5EBA5F5EBA6F3E8A6FBF0ADF5EAA6FBF1AAFFF5AEFAF0A7FBF1A7F4E7A0FDF0A8 FBEFA7FAEEA6FCF0A7FBEEA6F9EDA3FBEFA5FCF0A6FCEFA3F9EDA1F5ECA2F9F1A8FFF8B0FBF3AB F8F0A8F9F1A9FAF2AAFAF2AAF8F0A8F9F0A8F8F0A8F4EBA4F2EAA0F7EFA3FBF4A7FAF3A4F7F09F F8F29FFAF4A2FAF3A2FEF7A7FBF3A8F8F0A5FEF7B1FEF5B7FCF2B7FAF0B5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D674E5D677E1D276 E0D076EBDB83E5D57EEADA84E0D079E2D27BE9D981E0D17BD2C771DACD7BE3D885DED381E0D584 E3D788E7DC8DEADF92E2D78AE0D588E0D58AD6CD7EDBD281DAD281D7CF7FDAD182DBD384D4CC7E DFD78AD0C97DE0D78DDBD489E4DB93EDE5AAB6AF778A8145CAC17DEBE298EDE293EDE190F4E996 ECE08EE7DD8DF1E799F7EC9EF2EA97EBE38FF6EE9AF7EF9AEFE893EEE693EEE693EFE696E3DA8C F1E89DF7EDA4E8DF90EFE690EDE491EBE192EEE498ECE299EDE29CBAAE68A2984EE3D98EEEE595 EBE292F5EB9AF6EB9BF3E897EFE494F2E796F3E896F1E694F3E897F0E594EDE291F0E593F1E697 F2E49CF6E8A1F3E5A0F5E8A2F7EAA4EFE39CF1E79FF3EAA1F0E89DF3ECA0F5EEA1F1E99CF3E89D F5E99EF8ECA0F2E798F0E595EFE494F4E999ECE190F6EB99EDE291F1E696F6EA9FF1E49CF5E9A0 F1E59CF2E69DF1E599EEE294F0E596F4E999F2E798EFE492F2E797F7E9A4F6E7A5F5E7A3F0E09C F2E39DFFF3AAFCEDA2F8EA9EF6EA9BF1E293F6E897F5E99AF5E99FF4E89FF4E89FF9EDA2F5E99F EEE297FBEFA4F7EB9FF3E79CFAEEA2F9EDA1F3E79DF4E89FFAECA3F6E89EEBDF95EFE097F5E79E F3E69DF6E89FFFF1ABFFF3ACFCEDA6F7EB9EF8ED9FF6EA9CF3E79AF4E89DF4E89EF3E79EF7EBA1 F8ECA3F4E89EF6EAA0FEF2AAF6ECA6EEE49EF7EDA7F6ECA5F0E59DF6EBA3F4EAA1E9DD95EDDF99 F7E9A3F4E7A0ECDF94EDE292F3E899F0E596F1E697F6EA9EF2E69BECE097DED18AEFE29CF2E59F EBDF99F0E39AFCEFA5FBEDA4F2E29CECDF97ECDE98F6E8A2ECDE98F0E29CF1E39CF3E69DF9ECA3 ECE099F0E59EF3E8A0ECE19AF3E9A2F6ECA3EEE49BEADF95F1E79BFFF7A8F6ED9CEBE394EBE198 DFD889EAE48EE9E48DE4DF8BEAE399E0D99989824B5048145D572299915BA49D67A6A16AA39E67 96905AA09963C0BA82D7D199EBE6AECCC48C8B834A79713880773FA49B6ABCB481968F54A29C5B BFBB79B5AE73A49D69E9E0B3FFFED277713F75703EF5EDAAF6E89AECDC8DE4D487F5E59BF9EBA5 E7D792887834F7E7A5F3E6A1F9EBA7AB9E59CABD74F8F0A1ECE297E2D890F7EDA8CABF7D807536 D5CB89F4EAA6EDE39CF4EAA0FBF3A8E3D992AEA35F9E9350DFD591F6ECA8F0E5A2EEE3A0EDE29E F6ECA7F0E5A1C9BF79B1A75EABA450CCC56EE7E089F5EB99F7EA9BECDD91EDDE95F9F0ABEEE29F F0E5A3F5EBABDDD291CBBB78BEAF69B8A962B9AB63B5A960ADA056B7AC61B8AE62C4BA6FD3C980 CDC47CD5CA84E0D591E1D692E2D792DED38CFCF2ACF1E7A0ECE29CDFD994534706B9AD6CF5E9A7 EFE3A0F6EAA4FAEEA7F9EBA4F6EAA0F7ECA0F5E89FF7EAA1F7ECA4F8EAA6FEF1AFF3E5A4F5E8A4 FBF1AAFBF0A8F9EEA6FAF0A5FDF3A7FAEFA4FCF2A7FCF2A7FAF0A7FAEFA7F9F0A5F7EFA0F8F2A4 F5EDA1F5EDA3F6ECA4F6EDA5FBF2ABFDF1ABFDF2ABFEF3ACF8EDA5EFE59CF2EA9EFCF6A6FFF8A8 F7F09EF3ED9AF6EF9DFAF3A3FAF3A6F9F1A8FCF4AEFEF5B0FAF0AEFAF0B0FBF0B0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDACB70D8C96E E2D27AE7D77FE3D37BE4D47DE8D881E0D079E3D37EE6D681DED07BDCD17EE2D785EDE290E3D888 DFD485E7DB8EEEE296EDE195E3D78DE5D98FDFD389CCC373D8D17AE2DA85D9D17EDDD582E2D98A E3DA8DDFD68AD8CE86DBD18AE4DA93E1D794E4D9A3D1C590958A4FBBB26FEEE59BF1E999F0E593 F5EB97F9EE9EFCEFA2FEF2A9FFF8AEFBF0A5F8EFA3FCF3A4F8F0A0F3EB98F5ED9AF3EB99EFE697 EEE59AF3E9A2F3E9A4F1E79EF2E999EFE697EFE698F1E89BF3EA9FEFE69BCBC277CCC376F7EE9F F6ED9EF2EA99F3E999F5EA9AF1E696EEE393F0E595EDE291EDE290ECE190F1E793F0E592EADF8C EEE391F4E799F4E69AEDDF94F4E89FFCEFA9F3E6A2EFE5A0F3EAA5F3EBA3F5EDA5F4ECA3EFE69B F7EB9DFBF0A1FAEFA0F6EB9CF1E696E9DE8EECE191E3D886EEE391EBDF8EFEF49FFCF0A5FBEEAA F9ECA8F0E39DF7ECA3F6EA9FF2E799F2E798EFE494EEE391F1E693F5EB98F4E39BF7E6A0F6E59F F3E29CF6E59DFEEEA3FDEDA2FCEC9FFAEA9DEDDD8FF6E696F5E899F6E9A1F5E9A1F2E69EF6EAA0 F8ECA2F5E99FF9EDA1F5E99DFAEEA2FEF2A6F9EDA1F0E49CF1E49EF6EAA2F6EA9FF6EB9CF7EC9C F8ED9DF4E999EEE395EEE297F2E59EF2E59FFAEEA6FDF1A7FAEEA4F8ECA2FDF1A7FBEFA5F3E79D F3E79DF4E89EF3E79DF2E69CF5E99FF2E8A0EEE49DFBF1AAF7EDA5EEE39BFAEEA6F8EAA2F1E39A F2E49BF8E79EF3E398E9DC8EECE090F2E797EEE394EFE495F4E89CF6EA9FF8ECA2FAEEA6F4E8A0 ECDF99F9ECA6DECF83F4E497F4E498F0E097F2E19BF0E19CF4E5A0F5E6A1F6E8A0E2D489E6D98B F6EA9BECE398EFE59DF8EEA6F5EBA6FAEFADEDE2A2F2E7A6FEF3B3EFE4A2EBE19BEEE49DFCF3AA ECE694E5DF87F3EE93E4E086E8E498F1ECAF9892633C370F716D40A5A56AACAD67ADAD63D5D28D E1DE99D7D390E7E2A1D0CB89ADA664BEB675F2EAABFFF5B7E1D7998F864778733AABA872CDC892 A6A06C9C9760C8C38DC3BC86B6AF79E6DFA9A49D69554C22F3E9ADEEE092EBDC8AEDDD8FF5E59B FCEEA7AC9D58A0914FF7E9A8F4E7A5EEE4A0ACA25DE1D792EBE199F6ECA5F2E9A2E1D790746A23 E0D68FE2D891EDE39CE7DD96FFF5AEDED48D786E26C9BF77FFFCB5DFD590EAE09BEEE3A1EBE09E F7ECABCDC2819F9454BCB170E3D894E8E387F5F08FF5EF93F8EC99F8E99EECD994FCE8ACF2DFA6 E0D09CBAAB78887C4A6F632F918549958A4BA39856B7AD66C7BD76D2C980E7DE92EFE699E8DF90 E6DD8EEEE496F2E69AFEF2A6FFF4A9F0E496C6B96AE4D788F7EA9BF2E499ECE29A6C5D19C8BA77 FFF9B8F7E9A8FCEDA9FEEFA8F9EC9EF4E798F3E793FFF3A1EFE294F4E69CFDEEA9F9E9A9FFF4B6 F7E9A7F5EBA5F5EBA3F7EEA4F9F0A3F9F0A1FBF2A3F9F0A5F8EFA4F8EEA7FAF0ABFAF0A7F6EF9C F4ED9CF4ED9EFBF3A8FBF1A9F6EBA4FCEFA9FCEFA9FBEDA6FCEEA5F6E89FF4E9A1F3EBA2F7F0A3 FBF4A5F5EE9EF4ED9CFBF4A4FFF8ABFCF4ABFBF2ADFEF5B3F8EFAEFCF2ADFCF2ABFAF0A9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBCC71 E2D378E5D57DD4C36BBFAF57D5C56EE0D07BE0D07BE4D47FECDC87EADB87E3D884D7CD78D7CD79 D7CC7ADFD383EADF8FEADF90E4D98AE4D98CEBDF92DCD084D0C776E0D883E6DF89DDD581DBD280 DAD182E1D88BE0D78AD8CE86D7CD86DED48DD9CF8AE0D69AE0D69CAEA565A89F58ECE396F1E998 EDE28FECE18EFAEF9FFBEEA1F5E79EFCF1A9F2E79EF5ECA0F5EC9EEDE595EDE593F4EC99F4EC9A F1E899F6EDA0F1E79EF1E79FF4EA9FEEE695EDE495EEE597F1E89BF5ECA1F5ECA1F1E89DF0E79A F5EC9DF5EC9DF0E897F1E697F1E697EEE394F0E496F1E698E8DD8EE8DD8DEBE090F2E796F1E697 EBE08FEBE090F2E596E8DB8DE5D88CEADE94F0E49CF4E7A1EDE39EECE49CF5EDA5F4ECA3E9E197 E6DE92F1E599F8ECA0F0E598EFE495EBE090E9DE8EF7EC9DF0E592F0E592E8DD8BF2E795F2E699 F6EAA2F2E59EF8ECA3EEE297EBDF93F6EB9DEDE292E6DB8BEBE08EF0E592ECE18EF0E094F2E298 F4E39AF3E298F3E397F4E497F9E99CFAEA9CF7E799E7D789EFDE91F1E496EFE297F6EAA0F5E99F F4E89EF5E99FF3E79CF6EA9EF4E89CF9EDA1FBEFA3F4E89CEFE39AF3E6A0F6EAA2F8ECA1F9EEA0 FBF0A0F7EC9CF1E696EBE092EBDF95EDE199EEE19BF1E59DF7EBA1F6EAA0F6EAA0F8ECA2F4E89E F8ECA2F5E99FF1E59BF2E69CF3E79DEFE399EAE098EAE098F4EAA1EEE59BE8DD92F4E89EF3E59A F4E69AF5E79BF5E599F1E194EDDF91F0E594F5EA98F0E594F0E595F3E899F8ED9EF4E89CA99D53 E1D58AFEF2AAF2ECA3E3D389FDEDA0F9E99CF1E396F0E296EFE196EEDF97F1E49CF8ECA4EEE299 F7EBA3FFF3AAF5ED9DEFE997F8F1A3F5EDA5E3DA99B9AF73A29762A599678A7E4F8F83549B8E60 9D925FA89D60C0B773DDD58EEFE9A0F0EBAB97915B373005817B53B1AE7EC0BE83CECF88D4D389 C0BD76A6A35CA9A55FD9D590FAF3AFF4EEAAC4BE79C0B776D0C684FDFCBCF7F3B2B2AC7178733B 9A955CECE8B0B9B47B89824ACEC890C6BF88BCB57EBFB881342D00DCD396F5E797F1E290F2E294 E5D78CEFE199675913BEB26DE5D894F3E6A2BCB36DC6BC76F0E69FE4DA93E2D891E9DF98958B44 C0B66FF4EAA3F2E8A1F0E69FF0E69FB9AF688A8039C6BC75EEE59EEBE19AEEE49FF5EBA6EBE19C CFC580B5AB66AFA45FD1C783F5EBA6FCF7B2EDE599F1E99CFAF0A4FAEBA3E4D48ED1BE7AC1AF6C 9F8D4D968748A4975AC1B57BDFD598ECDF9EF1E3A2F4E7A4F3E6A0F0E39CECE196E9DD92E8DC91 DFD487E2D68AEDE194EFE398F0E49BF1E59BF9EEA2D5CB7CD7CC7EEADE91FBF0A5F6EAA190833F 9E9150F9EBABF4E6A3F6E7A1F8EAA0F7EA9BF3E793EFE48DDED27BF1E591F3E795FBF5A9F4E59D FFF5AFFCF0ABF4EAA3F3E9A1F8EEA4F8F0A3F5EC9DF9F0A1F4EBA0F3EA9FF6ECA5F8EEA9F8EEA5 F9F2A1F7F0A1F7F0A3FDF5AAFAF0A9F6EBA4FDF0A9FCF0A8F9ECA3FAECA1F6E89CFDF4A8F6EEA5 F1E99EF5EE9FF6EF9FF7F0A0F9F2A4F9F1A5F7EFA6FBF2ADFCF3B1F3EAA7FDF3AAFDF4A7FCF3A6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E1D279DFD178DECF76DDCF77DDCF77DECF77E5D681E0D17CDDCE79E3D480E7D884DDD27CDFD57E E6DC86E5DB87E1D682E3D887E9DE8CE7DC8DEADF90EEE394E3D789D8CF7DDCD47FE1D985E4DC8A E7DF8FE1D889DFD689E0D78ADCD389DED48CE5DB93E3D993ECE3A1E8DE9ED6CE89B5AD62DFD888 EEE693F0E691EBE08DFBF0A0F9EB9EEBDC95F0E49CF4E8A1F3EA9FF2E99BEFE696EEE695ECE492 EDE592F2EA99ECE394F0E79AF3EA9FEEE598EFE796F3EA9BF4EB9DF2E99CF3EA9FF5ECA1EEE59A E9E093E9E091E7DE8FEEE695F4E99CF1E598EADE92ECE096F1E599E9DD91EADF92EEE396F0E497 EEE295ECE093EADF90F4E798EBDE8EEDE092EEE297F0E49CF6EAA2EDE39BE7DF96F2EAA1F1E99F E8E096ECE497F6E99DFAEEA2EEE296EDE294EFE495EDE292EEE393F1E695F6EB99F4E997E6DB89 E9DE8EF5EA9CE9DE91F0E597E6DB8DE9DE8FF1E697EEE391ECE18FEEE391EDE290E9DF8CF5E595 F7E798F7E799F3E395F0E092F0E093F3E395F6E698F6E698E7D789EEDD90EFE294EEE096F9EDA3 F7EBA1F2E69CF0E49AEEE298F2E69BEEE297F0E499F3E79CF1E59BF2E69DFAEEA6FDF1A9F5E99E EEE297F2E798F5EA9BF5EA9BF6EA9EF9EDA3F9EDA3F5E9A2F3E79EF8ECA2F8ECA2F6EAA0F7EBA1 F0E49AF9EDA3F7EBA1F1E59BF4E89EF9EDA3F2E69CF6EEA2EBE297F0E79BF3EA9DF2E79BF8EC9E EEE193F0E295EEE192F0E091F3E395F5E695F3E895F7EB98F3E793F3E795F4E897F2E697FFF3A5 938639DCCF81EEE096EBDD93E8D98DF5E598F1E494F1E493F1E594F1E693FDF8A9F4E89DFCF1A9 F7ECA8ECE1A2ECE1A5EDE4A9F4ECB3DBD39B9187535E5522443B08493F0D72683569602D6B612C 776E367D733E605325766B386E652E7E743CAEA672797143958D65ACA47E9791609A965AA9A75F B0AF64CCC980ECE8A0E2DE95AFAB62AEA761D5CE89F3EBA3EEE5A1CDC37FD3CA85EAE29FFFF8BA D7D195746F329C9659F4EEB2DDD79C9E985CD9D398CAC48BB8B278504A11DFD798F8EA9AF0E38F F0E394EADC8FEDE0966A5D16DACD88E1D690DDD38C998F48DFD58EF6ECA4F2E8A1E6DC95AAA059 C9BF78DFD58EEFE59EF9EFA8EAE099A79D568B813ACCC27BECE29CF9F0ABF1E79FF9EFA9E3D993 AAA059AA9F59DDD38CEFE59DE7DD95F7EDA5F6EDA6FFF5B7E7DB9ED1C384B8A9679A8A4386752C C9B86EE2D389DFD087E8DC95F5EBA5E6DC93E9DD8CE4D886E5D986EBDF8CEEE18EEEE38CE8DD87 E0D57EDFD47CEADF88EDE28AE5DB8CEDE49CF1E79FFAF1A8EDE599F0E69BE7DD92EDE49BEFE59F C5BA77867C3BF5E9ABEFE29DEFE29AF2E699F5EA98F5EA93F1E78DEFE68BEAE186CEC36BFCF29F FCF5A5EDE496FBF1A9F9EFA8F7EDA5F4EBA0F6EDA0F8EFA1F2E99CEFE69BF0E79CF4EAA2F7EDA6 F8EFA7FAF3A7F7EFA4F5EDA4FAF2A9F6ECA5F5EAA3FFF3ABFFF3AAFAEDA0FBEF9EFBEF9EFEF7AB F8F0A7F0E89DF6EEA1F7F0A2F7F1A2F3EB9FF1E99EF3EBA3F9F0ABF9F0ACF5EDA7F2E99CF3EB9A F4EC9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDDCF76DACC73E7D980E9DB83DFD179E0D27AE1D27CDFD07BDECF7AE3D481E5DA85DFD47D DAD179D7CD77D9CF7ADED47FE3D983E6DB88E6DB89E6DB89E3D886DCD181D8CF7DD7CF7AD8D07D DED685E2DA89DDD485DAD183DDD487DDD489DFD68DE8DE96E9DF98EEE5A0DED690E8E095CEC879 D7CF7DE6DE8BF0E590EEE390FAEF9FFDF0A3F4E59CF2E69EFAEFA7FAF0A6F6EDA2F2E99BEDE594 E6DE8CF0E894F5ED9CEAE291F5EC9DF8EF9FEAE292EFE796F4EB9CF2E99BEEE598EEE59AF2E99E E8DF94EDE497FAF1A2EFE697F2E999F5EA9DF2E69CEADE94EADE94EFE39AECE096EBDF95F0E49A F0E49AEDE199EFE39AEDE196F1E494F1E494F0E394EFE495F0E499F0E49CF1E79FEEE69DF1E99E F1EA9DF3EC9EF7EFA2F6EA9EF7EB9FEFE397EBDE93F0E596F9EE9FF4E999F8ED9DEFE493E8DD8B C8BD6BD8CD7BFBF09EE1D683C6BB69E8DD8BEEE392ECE18FF2E795F6EB99F3E896F0E593EFE493 FAEB98FDEE99F9EA97EFE08DEFE08FF6E796F0E092F4E496FAEA9CF2E295F6E699F1E496F7EA9F F5EA9FEDE197EFE399F5E99FF4E89EEDE197EADE94ECE096F2E69CF6EAA0F9EDA3FCF0A8FDF1A7 F6EA9FF0E498F4E99AFDF3A4FDF2A3F7EB9FF7EBA0F8ECA2F9EDA5F6EAA0FAEEA4FAEEA4F9EDA3 F9EDA3F4E89EF3E79DF5E99FEEE298F0E49AF9EDA3F4E89EFCF3A6EBE294EDE495F6ED9EF7ED9E F7EC9CF3E796F0E393ECE08DECDD8AF0E18FF2E491EEE28EF1E591EEE28EEFE38FEDE18DE9DD8B FCF09EE8DB8CF0E394EFE293F6EB9BDCCD80EDDD8FEBDF8CF0E490EEE48CEDE38CF8ED9AEBE395 F7EEA8F1E5A9E8DDA6F4E9B9E5DBB89D937653492A4238157B734DA49D71CEC796F2ECB3EEEAAA E5E19BDAD88AD9D490F8ECC0DDD1A5C6BB8D8A7F5070683A574E238F865FC2B990FFFCCCDDDA9E BFBC77BBB86E9A964DA29E55D8D48BFFFFB8DCD58CAEA75EDBD38AF2EAA1E8DF96D1C77FDAD189 EDE7A2E7E2A0EDE6A4736D2B888341F0EAABCBC5879B9559E2DCA0A9A369585219D8D191F4E897 EFE28EEFE391F3E698C0B4697D7127F1E59EF8EEA7B8AE66AAA157ECE498EEE59BF1E7A09E944D B1A760F1E7A0E4DB94FEF4ADE2D891A39952958B44E1D790F8EEA7DED48EEEE49FF1E7A0BCB26B 8E843CC4BB71FEF7ACF7EEA3EAE196F9F0A4FBF8ADE6DD95A59862988A55928349AA9C5AD4C67D F1E495E8D98AF2E794F3E697E8DD8DE6DC8FEDE394F5E991E9DE84E0D57DE3D880EEE38BF3E88F EFE48CEDE189DCD177DACF75E9DE85F1E798EEE5A0E2D993F1E9A1F4ECA4F7EFA6EBE39BE3DB93 E1D894E0D7968E8444EBE3A4F6EDA8F7EBA3F6E99FF4E999F3E993F3E991F1E88DFAF095FFF9A0 FBF9A2D1C673C4B868F6EDA3F7EDA6F6ECA4F1E89DF1E89DF4EB9EEFE699F2E99EF3EAA0F3E9A1 F6ECA5F8EEA7F3EBA3F1E9A1F1E9A1F9F1A9FBF1AAF5EAA3FAEEA4FBEFA2F5EA99F7EB97FBEF9C FEF4A7F7EFA6F4ECA2F9F1A6F8F1A3F7EFA5F9F1A6F6EEA4F9F1A9FAF2AAF8EFABFBF3ADF6ED9E F6EE9CF5ED9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE5D77EE6D77EE5D67FDCCE76D4C66EE1D17DDECF7CDFD07DDFD07DDFCF7CDBCF7B D1C770D1C770CAC069CCC26BD9CF78E4DA82E1D780DDD37EE3D984E6DC87E0D582DBD27FDDD582 DFD786DAD381D6CE7DDBD283DAD184DED588DED58ADDD489E4DB91E5DB92E7DF94DAD286E6DE90 E7E08FE7E08EEBE38EE6DC87ECE18FF1E696F7EA9DF6E89EECE096F0E59AFDF4A9F8EFA4F1E89A F0E797EFE796F6EE9DF2EA97F4EC99F6EE9CF1E997ECE492F1E998F1E899ECE395EAE194F2E99E F4EBA0F2E99EF7EEA1F8EFA1F3EA9BF1E998F0E498F3E79DF0E49AEDE199EEE29AEDE199E1D58D EEE29AF2E59EF3E6A0F6E9A3F1E59CEDE08FF4E894E8DB8CE5DA8CEDE197E8DC91EFE59DF7EFA4 F0E89DEEE69AF4ED9FF5EDA0F0E49AF2E69CF7EBA0E9DD91EDE294F7EC9DE8DD8EF9EE9EEBE090 F2E798E9DE8EF1E793ECE28CECE28CDAD07AE4DA85F1E693EDE290EEE391EEE391EEE393EEE393 F0E594EFE18AF5E78FEEDF89E1D27DE6D783F9EA97E8DA88EDDD8EFAEA9CF9E99CFCEB9EEFE294 E9DB90EBDF93EDE195F3E79BF3E79BEEE297F7EBA1F6EAA0F5E9A0F6EAA2F7EBA3FAEEA5FAEEA4 F3E79DF6EA9FFBEFA2F7EB9FF5E99DF4E89CF6EA9DF9EDA3F9EDA3F5E99FF1E59BF6EAA0F7EBA1 F7EBA1FBEFA5FAEEA4EFE399F8ECA2EFE399EADE94F7EBA1F4E89CF0E898EDE494F0E897F4EC9B F3E998F1E694F3E793F0E491EFE38FF3E490F4E591F1E38DEADE88ECE08AECE08AEEE28CEADF88 E8DC88F2E692EFE390F3E794F8EC99F0E793DED181E9DC8DEADE8BF2E791EFE58CEBE389E6DF8A E7E193ECE5A2F6ECB5FCF2C3CDC39C6C634A433A26463E277F775AAEA785A29E73918D58A8A567 B1B267C3C470CCCE73DEDD8CE7DEA9F2E8B7FFF5C2F2E7B6D6CB9DAEA37573693C615829857D4A DDD79DF0E9ABEFEBA6EEEAA0D3CF85AAA55BBCB66BEDE59BDED68CB8B065DCD389F5EDA1EFE69A DAD185E8E39AE9E198F7EFA8DBD58F756E29AEA663E9E3A2AFA96BB6B072D0CA8E4C470CCAC283 FDF2A1F3E793ECDF8EFEF4A6978B40A99D53F8EFA7E5DC93A2994DBBB466A29B4DD8D086B9AF67 8B813AF1E7A0EADF98FCF8B1C3B8718D833CA99F58F1E8A1EAE099E2D891DFD58FBCB26CA39952 AFA55CE0D88BF0E79AF3E99BE7DE90DAD183BFB6699E9447978E44AA9E63C7BA81DCCF8FEDE199 F8EE9FEEE590E8DF89E3DA83E5DC87E2D788E4DB8EF2E89BE6DA8AECDF90E1D587DBCE81ECDF95 FEF0A7FBEEA6F8EAA2EADD93E4D78CE4D68AEBE099D9D191C3BB7BE6DE9CD5CE89E5DE97E8E19B E9E29CE6DF9AEEE6A5A49C5DC5BC7EF6EBACFAECABF5E8A4EDE097ECE193F4E997F2E892EFE48E E2D782CDC26DD9CE7CF2E797F2E99FF3E9A1F6ECA4F7EDA5F3EAA0F0E79CF1E89DFBF1A9F9EFA7 F0E69EF2E8A0F7EDA6F4EBA6EFE6A2EEE5A1F8EFABFCF2ADF4E9A2F6EA9FF8ED9DF1E693F5E992 FCF298FCF3A4F6EEA6F7EFA6F7EFA6F5EDA3FCF4ABF6EEA5F5EDA5FAF2AAF8F0A8F7EEA7FFFDB7 FAF1A4FAF1A2FBF2A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDFD47BE4D980D2C76EDED27BDFD37DDACE7AD6C975D8CC78DACD7BD9CC7A DBD07BD9CF79D5CB76D9CF7AE1D782E1D77FE0D67FE7DD86E4DA83E5DB84DDD37DD5CB75D9D07C D8D07ED9D081D7CF7FD3CA7BDAD181DAD184E9E093E4DB8EE7DE91DBD286E1D88DE7DF94E5DE90 EBE494F1EA99F3EB9AF3EC98E9DE8BEDE291F8ED9DFAED9FF7E99DF9EDA1EADF91F3EA9BFCF3A4 FDF4A5F7EE9FF0E797F4EC9BF0E897F5ED9BF0E895ECE491F1E997F4EC9BF4EB9CF3EA9CF3EA9D F4EBA0F7EEA3E9E095EFE699FBF2A4E9E091EBE393F5E99DFBEFA5F3E79DEBDF97EFE39BE5D991 EBDE98F2E5A0F7EAA6F3E6A1ECDE9CE8DB96FDF1A1F0E392EEE192F3E89AF9EDA2E4D890EFE59D F4EBA2F5EDA1F4EDA0F3EC9DF1E99CF4E89EF6EAA0F5E99FEEE296EDE195F5E99CEEE394F6EB9C F6EB9CEBE090F3E898F3E995F2E891F5EB94EBE18BE7DD88E9DF89E7DC8AEFE492EBE08EEADF8F F2E797EEE393E0D27AE5D77EEADC84ECDD88EDDE8AF0E18EF1E291F4E495F2E294F6E699FDEC9F F3E698ECDF91EDE293F6EB9DF7EC9DF0E498F2E69BFCF0A6F0E49CF3E79FFBEFA7F8EBA5F6EAA1 F8ECA1F5E99DF6EA9FFEF2A7F7EBA1E9DD93EEE297F8ECA2FAEEA3F5E99DF0E498F6EAA0F7EBA1 F1E59BF3E79DFCF0A6FAEEA4F9EDA3FCF2A8EEE298FAEEA4EDE197FCF2A6FAF1A1F2EA97EDE592 EAE290F2E895FEF49FF4E894EDE18BF1E58FF4E590F3E48FF5E691F3E48FF4E590ECDD88EFE08B F2E48FEFE08BEEE08BE9DA85EDDF8AF4E691EFE08CEFE290E0D384EBDF8CEDE38CEDE38CF1EA94 F4ED9BDCD68CF4EFB1FAF4C1AAA27848411A2621012B27003A36084D481B7E7A4B7773409F9C64 B7B579BBBB78ADAD6697984D969348A29C56D8D18FEFE7A8F7EFB2F5ECB4E0D69EEFE6AEACA36B 665C265D541DC2B780F0E9A9F1EBA3ECE79CEDE69CBFB76EA59D52F1E99CF4EEA1BDB466E6DC8D EDE293F3EA9BBBB265E9E094EDE59AFFF9B0C0B8715E5712D6CE8DEBE5A6A49E5FD8D2966E6930 BBB577FFF6A7F3E895F7EC9CEBE092998F44DFD48CEDE39BC2BA6FB3AB60DAD385E2DC8CCEC67A A59B54D6CC85FCF2ABF7EDA6C3B972817730C0B66FF7EDA6D7CD86EBE19ADDD38C8C823C938944 D7CD85EFE59BF3EA9DDBD284D6CD7EB5AD5CA89E4FAFA659C8BF74D9CF87F1E7A3EDE39EE2D990 DDD487EEE796E7E08EEBE491E3DC8BD9D184EEE39CEAE09BEDE2A1F1E4A9F6E7AFE0D39DCBBD8A CAB989C3B485B4A577B3A2739E8F5FA3946191814E7A6E3681793B99915381793968611D766F29 817A348C853F8D8642978F4F7D753691884BECE1A6F4E7ACE8DC9EECE1A0D7CD86D4C980D7CE82 DED586E1D88AE8DF91F4EB9EF2E89DF6EDA2F5EBA2F7EDA5FEF4ACFBF1A8F0E69EFCF2AAFFF7AF FEF4ACF7EDA5F7EEA3FAF0A9F9F0ADF8EFACF7EEACF4EBA8F8EEA8F6EBA4F9EDA1F7EC9DEDE18D F6EB92FFF49BFAF0A0F4EDA5F4ECA4F8F0A8F8F0A8F7EEA7F7EEA8F6EEA6F9F1A9FEF6AEFEF9B1 FFF9B2FBF1AAFBF2A9FDF3ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDFD47BE2D77ED3C870DACE77D6CA74D8CC78D7CB77DED27FE0D482 DED280DFD381E0D682D7CC7BDAD07BE4DA86E7DD89E2D881E1D780E3D982E8DE87E3D982DDD37C E4DB87DED685D7CE7FD2C97AD2C97AE1D889DBD285E8DF92DFD689E3DA8DE0D78BE7DE93E2DA8F E2DB8DEDE697F0E99AEDE595F2EB9AECE191EFE494F6EB9CF7E99BF3E698F7EC9DFFF7A5F8F09E F7EF9DF9F1A1F7EE9FF4EB9CF1E999EFE796F2EA99EEE694EDE592F3EB99F6EE9DF3EA9BF1E89B F3EA9DF6EDA2FBF2A7EEE59AF0E79AFAF1A2EBE293EBE393F5EA9DFDF1A7F3E79DE6DA92EBDF97 EDE199ECDF99F2E5A0F7EAA6F4E6A5F2E3A3F4E7A2F4E799FDF0A1F7EA9CE1D58AEADE96EEE29A EFE59DEDE59DEFE79EF1E99FEEE69BEDE597F7EBA1F1E59CF1E59BF4E89EF2E69AF1E59AEBDF93 F0E596F4E999EFE494F5EA9AF6EB98EFE590EFE591F5EB96F0E692F0E594EEE391F4E997EFE492 EDE291EFE494E2D786ECDD88F2E38CF7E893F9EA95F9EA97F9EA97F8E999F9E99AF8E89AF8E89B F9E99CF5E89AF1E597EEE494F5EA9BF7EC9DF5E99CF9EDA1FBEFA5F7EBA3F7EBA3F8ECA4F6E9A3 F3E79FF4E99CF2E69AF4E89EFEF2A8FDF1A7F2E69DF2E69CF2E69CEFE397EEE296F1E599F8ECA2 F7EBA1F0E49AEFE399F6EAA0F4E89EF0E49AF8EBA1F2E69CFAEEA4EFE39AF6EA9EF9F0A1EDE593 ECE491EDE592EEE492F2E793F5E995E8DC86E6DA84E7D883E7D883EDDE89F8E994F6E794EDDE89 ECDD88ECDD88EDDE89F2E38EF2E38EF2E38EF2E38EE7D982E9DD89F1E495FDF2A0EBE08FEFE795 F9F2A3E2DC93EEE9A7DBD89E6E6A3B2B28014A451F7C7940A8A669C6C488A4A269A09E6598965C 8C8A518C8A4D9F9E5EC9C885D8D892DBD98EC8C470918C39B1AC5FD3CC87E9E19EFCFBBAEFE6A4 F5ECADE6DC9FA79C64443804ACA267E7E099FBF4ACE9E299F1E9A0C6BE75B3A95EFCFCB0D9CF80 D0C576FEF7A8D3C879867A2BD6CD7EF0E698E1D78CEEE79E90874187803CF0E8AAA29C5FB4AE74 6F6931B0AA6EF2E89BE3D888F8ED9EBFB368A29850EAE098DED58E908840D8D186FBF4A7E7E193 B6AF63D9CF88F8EEA7E1D7909288418C823BE9DF98F1E7A0EFE59ED9CF889E944D9A9049CBC17B E7DD98FFFBB3EEE59BCAC173908738A49C4BC4BB6DE9E093E1D88DE4DA95F3E9A5F7EDA5DAD389 ECE69AE9E398E0DC91EFEBA3E7E39DE2DD9ADBD394C7BE81C8BE82A69C62968A538D804D766B3A 796C3F7B6C4274673C8F81598C7D53938759998D5C9F925FA99D679F965BB6AE70A69E609D9652 9F98539C954E9B944E9D96527B733178703152490B786D34C8BB86E0D49BE7DB9FFFF5B7EBE09F E4DA96F0E7A0F0E6A0EBE19AEFE59EF4EAA2F3EA9FF6EDA3F4EAA2EEE49CF2E8A0FEF4ACF3E9A1 F2E8A0F3E9A1F6EDA3F5ECA1F4EBA3F6EDAAF7EEABF7EEABF2E9A6F3E9A4F7ECA4FAEDA2F8ED9D F1E691F3E88FFAEF95F5EC9EF2EAA2F4ECA5F9F0ABF9F0ABF3EAA5F9F0ABF7EEA9F5EDA6F8F0A8 FCF4AAFEF6ADFBF1ACFBEFAEF9EEACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9CE77DDD17BDCD07ADCCF7BD6CA76D8CC78DACE7BE3D785 E4D886DED280DED282DED382D6CB7BD9CE7DE2D785E6DB8AE2D884E3D984E5DB86EBE18BE5DB84 DFD57EE1D986DDD485DED586DDD485DAD182E2D98AE2D98CE9E093D8CF82D6CD81E2D98CE6DD90 E8E096E6DE94F4ECA3F5EDA3EBE397FBF2A4F7EB9DF6EB9CF7EC9DF5E899F2E596F5EA99F0E78E EEE68EF2EB94F8F09DF8F09FF4EB9CEFE698EFE698F1E999F0E897F0E898F5ED9CF7EF9EF3EA9B F0E799F3EA9DF7EEA3F8EFA4F2E99EEFE699F0E799ECE394EAE291F8EE9EF2E799E5DA8DEBDF94 F7EBA1EFE39AEFE29BF5E8A3F6EAA5F4E6A5F5E7A6F8EBA6EEE095F7EA9DF1E399DCD088EADD96 F2E5A0FAF0AAF1E7A3F2EAA3F9F2A8F8F0A6F4EBA1F8ECA4EEE29AF0E49BF8ECA1F9EDA3F5E99E EEE296F0E496EEE394F4E99AF6EB9CECE192E8DD8DEDE292F4E999F2E796F3E898F6EB9AF7EC99 F3E895F5EA98F7EC99E5DA88F4E593FAEB99FDEE9EF9EA9AF7E898FAEA9BF5E597F6E698FCEC9E FAEA9DF7E69AFAED9FF4E899F1E696F5EA9AF7EC9DF7EB9FF9EDA1FDF1A7FCF0A8F9EDA5F3E6A0 F0E39FF1E49CF2E798EFE397F0E49AF7EBA1F8ECA4EFE39BEFE39BF4E89EF4E89CF1E599EEE394 F6EB9FF6EAA0F1E59BEFE399F1E59BEFE399F5E99FFCF0A6FDF1A7F8ECA2FAEEA4F2E69BEEE696 E6DE8DEDE594F3EB9AF1E796EFE492F1E592E8DC88E4D783E5D581E6D782EADB88F1E290F2E394 EEDF8DECDD8AEBDC89EADB88EFE08BF6E792F7E992F6E890EADC85F2E590ECE08EEEE393EEE397 E6DE95E5DD9AE7E2A3E8E5AB8C8956525023A3A179B9B78ECFCC99C6C38DD4D29CD5D29CE4E2AA E9E7ACF3F1B4DFDE9AB4B46B939445939545B1B15AEBEB8BFDFBA1CFC978A09A4FB1A960E2DA90 EEE699EFEB9FF8EEA7F3E8AAB9AC77675D229C954FF3ECA8E9E19AF8F0A7EDE39BC9BF76C0B76B FBF0A2CBC071CFC475DBCD7ED8CB7BC6BB6AF2E797F2E69AEAE096DBD28C4F4704C1BA7CD7D195 B2AE755F5A249A945AF0E69DEDE196FBEFA67E742DCBC17BEAE09AB1A863BCB56EE7E198E7E195 9A9447CFC97EF3EBA3CEC47D847A33A79D56EFE59EF1E7A0DED48DAEA45D9F954EC2B871E7DF98 F6ECA6E4DA94C5BB73A69D51B6AD5FCFC776EAE192ECE395E4DA93DDD38EF4E9ABF1E7A8F3EBA6 E9E49DFEF9B6E7E5A7CBC991CDCC97AEAD7C7C7949817C4D756D3E978E5D9991599B944FA79F5A C5BF7CD4CC8ED7CE93DED59BE9E1A6E2D99DE9E1A0F4EFA8E8E198EFE6A4E6DDA1F3E8ABF4EAAB F4EBA8E1D893F3EAA3DDD58DF6EDA8E7DE9AF2E9A7D5CB8B978C53635920867C42CFC589E7DEA0 CBC183F5ECADF7EEADF6EDABF7EEAAF7EEABF0E9A1F2E99DEDE498F8EFA4F9EFA8F2E8A1F7EDA6 FBF1AAF5EBA4F5EBA3F9F0A5F8EFA2F5ECA2F6EEA9F8EFACFBF2AFF6EDA9F4EAA5F8EDA6F6EA9F F6EB9BF8EC99F2E68FF8ED94FAF0A2F8EFAAFAF1ABFCF3AFFAF1AEF6EDABFCF3B1FBF2AEF8F0A9 F4ECA4F6EEA4FDF5ACFBF0AFFBF0B1FBF0B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4CA73DAD079E5DA83DDD37DDDD37EE1D684DED280 E2D785E0D585DCD181DCD081D7CC7DD7CB7EDCD182E2D787E1D687E1D686E9DF8DE7DC89E7DE88 DFD57FD7CD78D7CD7DD7CE81E1D88BE5DC8FDFD689E0D78AE9E091E8DF90DBD283D4CB7CE3DA8B E8DF91EDE59DE8DF9AF0E7A2EEE59FE6DD95F8EEA6FBEEA4FBEFA1F7EC9DF4E798F5E898F4EA95 F3EB8EF5EF91FCF59BFFF8A2F9F1A0F2E99BF1E89DF2E99EF2E99CF4EB9CF5EC9FF4EC9CF3EB9A F4EB9CF5EC9EF4EB9EF3EA9FF3EA9FF2E99EEEE598EDE496F0E798EDE694EDE292E7DC8CE3D889 F0E596FAEEA2F0E49AE8DC94F5E8A1F7EAA4F4E7A3F5E7A5F0E3A0FBEDA3F7E99EF5E7A0F0E49E FEF0AEF8EAA9F6EBA9ECE3A2EFE6A3F9F1AAFAF2AAF5EDA4F8ECA4F4E8A0F3E79FF4E8A0FAEEA4 FCF0A6F5E99DF5E99DEFE496F4E99AF3E899E6DB8FF7EBA1FDF3A9F4E89CF8ECA0FAEEA1FAEFA0 F4E999F0E595F6EB99FBF09DF1E794F7E799FBEB9EFCEC9FF8E89BF6E699F8E79AF2E295F2E295 F6E698F4E496F1E193F4E798F4E898F5EA98F5EA98F6EB9BF2E69AF0E498F9EDA3F2E69EF1E49F F4E7A3F3E6A2F4E79FF5EA9BF1E499F1E59AF3E79FF5E8A2EFE29CF0E49CF9EDA5FDF1A5F5E99D E9DE8FF3E79AF3E79DF4E89EF3E79DF2E69CF3E79DFAEEA4F8ECA2F8ECA2EEE298F6EAA0F3E79B F2E99AEFE697F3EA9BF6ED9DF9EE9EFEF4A4F0E493F1E593EEE290EEDF8DEDDE8BEBDC8AE9D88A EDDB8FEFDE90EEDD8EEFDE8EEEDD8BEEDD8BF2E38DF3E38EF2E28DE5D67EF0E38CF4E894ECE193 ECE19AF1E7A9FFF9C3DFDAA8908D5D514F254C4A214F50252E2C0637320B372F0A433C14463F14 70693AABA670D4D192DFDC95F4F3A3F3F39ECACB6FADAE509A993BC8C772F2EEA2F5EFA8B2AA62 857D30E4DC88F0E692F0E594E6D992EEE0A4DBCF9269601D948B4AEFE5A2F1E7A2EEE49DF1E59E B9AD63E1D589C2B668B9AC5EF8EB9DFFF6A5E3D483D7C97BEFE397F4E89FF8EFA9AEA564938C50 FBF4BDB2AD76635E2B8D8851FEF4AFE9DF97E3D993867C38ECE29FF0E7A4908745C9C27CF4EDA5 B2AC61C2BF72FCF6AAC4BA73897F38CABF78FFF8B1E9DF98CAC079A69C55AAA059D9CF88F6ECA5 E7DD96C8BE77B9AF68B8AE65D3CA7DEBE292EAE291DAD282EDE499EDE29EDBCF93F5E9B0FAEFB9 FBF4BCB5B17B8582546764405E5C40595640504E39827E67B4B094CCC7A4DBD3ADF1EBB5DCD98D E9E698E9E79CD4D08ACEC987DBD796EFEBA7EFEBA2E8E599E7E694E4E28DF5EFA6EFE3A9E7D99D E2D697E5DA99D7CB86F5E9A3E8DE96F1E69EFFF4AEF3E9A4FBEFACF4EAAAE9E09FA49B5A443A01 7C7234DCD292EFE6A5FDF4B3F9F0AEECE3A0F0E7A3FBF3ABFDF4A8EDE498F2E99EF9EFA8FAF0AA FEF5B0F8EEA8F9EFA8F6EDA4F3EA9FF3EA9DF6EDA2F8F0A8F9F0ACFFF6B1FBF2ADF9EFAAFCF1AA F8ECA2F9EDA0FDF1A0F2E690F2E690FDF4A9FFF6B1FCF3B0FAF1B0F9F0AFFBF1B1FAF1B0FEF5B1 FDF5AEF8F0A7F6EEA2F9F2A6FCF2ACFCF1B0FCF1AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9CF78DFD57EE8DE87D4CA75DFD580E5DA88 E0D583E3D886E1D686DBD07FDACF81DACE83DED286E3D78CE5D98CE1D688E0D587E7DC8DE3D888 E3D886DDD37FDACF7BDFD585DAD185DBD285DAD184D9D083E4DB8EE9E091DED586E3DA8BDBD283 E3DA8BEFE697EDE4A0EEE5A5F0E7A5EFE6A3EFE6A1F6ECA6F2E59DF7EBA0F2E798F1E495F4E896 F2E890ECE482E5DF7DE6E082EEE78FF5ED9BF5EB9DF3EA9FF5ECA2F2E99FF6EDA1F7EEA1F2E99C F0E897F3EA9BF5EC9EF3EA9DF0E79CF2E99EF0E79CEFE699F2E99BF0E798F0E897DED381E9DE8B F3E897EEE394EDE193F8EC9FDDD187EFE29BF3E6A0F1E4A1F6E9A6F1E4A0EDDF97F3E59EF6E6A1 EBDE9BF5E7A7F2E4A6F2E7A8EDE3A3EEE5A4F5ECA8F5ECA8F4EBA4F7EAA3F8ECA4F7EBA3F4E8A0 F6EAA0F9EDA3F2E69DF4E89BF3E89BF0E597F4E89AEFE39AEFE29CEADD97ECDF98F6EAA0F6EAA0 F7EC9DF1E697ECE191EFE492F1E794EEE491F3E399F2E19AF2E19AF3E29BF2E298F0E093F6E699 F4E497ECDC8FF0E092F3E294E8DC8AF2E694F4EA97F3E897F5EA9AF0E598EADE92F1E59BECDF99 F0E39DF8EBA7FBEEABF9EDA4F4E99AF4E99AF7EBA0F6EAA2F8EBA5FDF0AAFAECA7F4E89FF2E69B F1E697EDE393F1E599F1E59BF6EAA0F8ECA2F4E89EF8ECA2F6EAA0F4E89EF3E79DF5E99FEDE197 F6EAA0F4EC9EEEE596EBE294E8DF90ECE293F7EC9CF3E597F8EB9AF2E695F0E190EDDE8BE9DA8A EFDC91EEDC91EFDD91EAD98BECDB8DF1E090F2E18FF0DF8DEEDE89E9D984D2C36CDACB74F1E591 ECE194FBF0AFEEE3ADA2986A5B522C44401C4C49235F61377C7F518B8E5D8E8A5E9B93689D9669 787145554F1F534D1C46400A6C682BBAB673F5F2A8EDEB9EE0DF8ECECC7A9D9950C5C07CE3DA9E DBD291B8B065A9A24BEEE589F2E98EF4EA97DFD08CEFE3A3D7CD8D6F66268B8140F6EBA9E3D994 F7ECA4EADE97B6A95FE0D388CEC174DFD284EADB8BEDDD8BCEBD70E5D78CE1D68DEFE4A0DDD393 797135EEE7B0C6C08D827D4D8D8853FFF5B3FFF6B08D8240BCB170F9EFAFAAA060C0B777F8F1AD B9B26BC0BA71D9D58BA8A258978E46E9DF98F9EFA8D7CD86BDB36C9B914AC9BF78EDE39CEFE59E C6BC75A49A53AAA059D1C77FEDE399F0E79AE1D889EAE292E8DF92F2E8A1EDE2A2D1C48BCCBE8D BBAD817D754D322D0D3D3823575349454242302E3349464B6865635855477F7B607D7755504C1E 96935CCEC99295925E4F4A1B4F481C6561346D693C726D38C5C388DFDE9BDAD893DCD594E6D79C EDDEA1F8EAAAFAECA8DED18AE5D991FFF3ABEFE39AF8EBA4EDE09AF3E6A2F3E9A2E7DE98FFFAB4 C9C07B867D39D9D08CFEF6B3F2E9A5ECE39EF9F0AAF6EDA8DFD78FBDB466E6DD90F9F0A5F5EBA5 F9EFA9FDF6B2F0E6A2F7EDA7F7EDA5F3EA9FF4EB9EF7EEA2F3EBA2F3EBA2FAF1AAFAF2ACF9EFA8 FCF2ABFFF3A9FEF2A5FCF1A0F3E794ECE08CF7ECA1FBF2ADFBF2AFF8EFAEF8EEAEFBF1B3F8EEB1 F9F0AFFAF1ABF8F0A7F8F1A2F7F0A2FCF2AAFAF0A8F8EEA6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFBFBFBF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED47DE5DB84EBE18CCFC570E3D984 D7CC7ADACF7DE0D483DDD281D4C979D3C879E0D48AE0D489E4D88DE4D88CE2D68AE3D889E8DD8D DFD484E1D684DFD482DED382E8DE8FE1D88CDCD385D7CE80D3CA7CDFD788E2D98AD1C879E6DD8E DAD182D4CC7CE6DE8EE4DB97EFE5A6EFE6A4F4EAA9FBF1AEF0E6A1EBDF96F5EA9DF2E798F4E796 F9ED9AF5EB92EFE986E5DF7CE2DB7EE9E289EFE795F0E799F4EBA0F7EBA3F3E79EF6EBA0F6EBA0 F2E99AF1E998F0E798EFE697F0E79AF1E89CF2E99DE9E094ECE395F3EA9BE7DF8EE4DC8BEEE490 ECE28DEFE491F5EA99F3E898EFE495E3D78CF2E69DEFE29BECDF99F3E6A0EEE19BEDE099EDDF98 F9ECA5FEF2AEFFF6B6F2E3A4F3E8AAF1E8A9F0E7A5F0E7A5F0E7A3F2E7A2F9ECA7F6EAA3FAEDA6 FAEEA6F1E59BEDE195E5D88DEDE195F5EB9EEDE397F8EDA1FFF3ABCDBF7BB3A560E0D28BEEE199 ECDF94EFE395EEE292F0E492F1E592EFE38FEEE38FF6E69CEFDE98EEDD97F6E5A0F8E7A0F2E299 F2E198F4E498E5D589F3E496FFF3A4EEDF8FF0E492F3E796EFE493F4E898F7EA9EF1E599F6EAA0 FBEDA7F8ECA5F4E7A2F7E8A5F9ECA4F6EA9BF6EA9CF8EAA0EFE39BF0E29CF6EAA5F3E7A0EDE197 EEE396F3E898F6EB9CF2E799F1E49AF8ECA1F9ECA1F1E59AF7EBA0F1E49AF4E89DF5E99EFDF2A7 D4C87BE1D68BFEF3A7EDE396ECE294EFE596F1E797F4E999EFE394F6E89BEFE194EFDF8FF2E291 F1E192F2E094EDDB90EFDD91E8D78AEBD98CEFDE90ECDB8AEFDE8DF7E793F6E690D8C972D5C871 E0D583EBE097EBE0A28176412D2501352D0958542F7C795289885B9E9E6D9A9B649A96578E8847 A29C5DD7CF94E8E1AAD7D09C8F87556159294E4616726B3AB1A97AE8E1ABECE8A3CFCA8AB1AB72 988F57E7DEA1F2EBA0D0C972ADA647E2DA7CF3E892ECDF93E3D791E4DA98C8BE7E564B10A49959 F7ECA9E9DF97F7EDA3D6C97EDFD285E1D487CBBE71FAED9CF7E997D7C979EFE196E3D88FE2D793 ECE0A471672FCBC48ED5CF9D6A663593905AF8EFAECCC27D7C7230F4EAAACDC3858D8446D4CC8D BAB372C9C37FC6C27B716D23938E45E1D892F2E9A3BEB46E988F48C3BA73EAE098E2D891AEA45D A99F58C4BB73D4CA83ECE29CF9EFA9EEE49BF2E99DECE396F6EDA0DCD288B7AD668F8345746732 796B3C7A6C432018022E27115952476662636360694D49564C48544D4A4E55514A625E4A918F6F 7371505953372C2612453E28605847635B4B645C4B2B2416332C166F694E8C8867ACA881A2996A A1935997884BAC9D5FD5C586DBCD87F6E9A0FCEFA5EEE197F6E99EF1E39AF9EBA4F1E79BF8F2A3 F0E99BFCF4A9D4CB819A9249BFB56FE0D891FAF2AAF3EAA2CEC67CA8A055DED589F9F1A6F8EDA3 F3E8A1FAEFA8F5E9A4F5E9A4F6EBA3FAEEA4FAEFA3F3E99BEEE597F0E89CEFE69CF7EFA5FAF1A9 FCF2ABF9EEA6FCF0A6FDF2A5FAEE9FFCF09DF3E795EEE499F6EDA7FDF5B0FEF7B5FEF6B6FEF5B7 FEF5B5F9F0AFF5EDA6FAF2A9FEF7AAFEF8A9FDF4A9FBF2A7FAF1A6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAD07BDAD07BD4CA75D6CC77 DED47FE2D883D5CB76E9DF8AE0D680D6CB79D5CA79DCD182DACF80CCC172D6CB7CE7DC8DDFD484 DBD080E4D989DACF7FD8CD7DE2D787DFD483E0D583D9CE7CD5CA7AE2D787E0D585E9DE8EE4D989 DED383E1D686DDD282D6CA7DD1C57BE3D891F5EBA1F5E89EEEE296EFE495F8ED9EEDE291F5EB97 FBF19CF3E992F4EA91F2EB93F3EB96EEE691E9E18FF0E596F6EB9CEEE395F8EB9DEADD8DECE08D FDF19DE9DD8BE9DE8FEFE495F6EB9CEADF90EBE091EFE494ECE191E9DE8CE4D987E4D987E9DF8B EEE590EFE58DEAE08AECE28DF0E593ECE18FE3D888E8DD8DE9DE8FEADF90F1E698F8ECA0E7DC8F F1E79AE7DE91E8DF93F4EBA0F2E8A0F3E9A2F1E7A0EDE39CEFE59EEDE39CEADF9BF2E4A4F9EBAA F2E5A1F9ECA4FBF2A5F3EA9BF1E899EDE495E4DD8DE5DE8EF3EB9CFFFAABB1A153C8B86AFCEC9C F8E998ECDD89F2E28EF1E38BEFE188F1E38AF1E487EEE187EDDD8FF7E69EF7E69EF7E69EF6E59D EBDA92F9E8A0F0DF97EBDA92F0DF99F9E8A3FEEDA5F7E89CF0E095F3E59AFCEEA2F6E69BEBDC91 F2E398F6E69BF3E499F2E398F9E99EFBEB9EF4E497F5E598F6E69AEEE095F1E296F9ECA0F0E395 E5D88AEEE292F8ED9BF4E997EBDF8FF3E596FAEB9EF8E89BF0E395EEE093F7E79CF9EB9DF4E798 FEEF9DF4E793CBBC6BEEDC92F5E498E3D47FF6EB91EDE38AF8F09DEADF97F3E4A0EADB95F3E297 F2E08DE2D07BEBDA8AEFDE90EBD88DEEDC94EDDB93EFDD94ECDA8FE6D584F2E28BEBDC7FDACB6D E4D788E7DE9BF2EAAA7F79381612005954199F9A62BBB67DE9E2A7E1D89AE9DE9DEADF9EDED48F DAD28AB2AC63AAA259B6B067E6DF98F6F1AEEAE5A9CAC58D75703F261F00797243E4DCA2E8DFA5 EDE4ABA39A5D978F4EF3EDA3EBE596E1DA89A19A49DAD383F3EC9CE1D885F1E693E9DD949E9351 352B00C8BF7FDCD48EEFE898E5DE87D3C976FAEF9FD5C77CF1E998F7EF9CD5CD7ADDD282EDE096 EEE19FF4E7B0A296659B9464CECB98585820ACAC6DEFEDA1797529BEBA73F1ECAB898346CFC98F A7A169B8B276C9C58663601EC5C27DF7F4AFD4CF8D95904E908A46F4EDA5C4BE74A39B4FBDB467 C5BC6DDED285F6EA9EF0E499E3D895F4EAADECE3A4F2E9A6CAC17B9A914CA49B5699904D9D9455 BCB279D6CB964A3E11736936C9C292DBD4A5E5E0B7D2CCA6C7BC9C93856B6A5D47413926413D2D 575D4DC9CDB3BBB4856A5F3143380CC3BA8EF2EBBCD1CB9BB3AD82716B47474122373214A29D7D DAD5ABC4BD87A49A5CAC9D689785559A8E4BA19949CDC876DDD78BF1EA94FFF5A0F8E7A1F4E79E E9DF93F6ECA1F4E8A0FEF6AFC5BB74A0934DA59A52A9A055B7AB5FCDC375E0D488FFF1ABFEF0A9 FBEDA4F2E498F2E597FCF09EF1E593EEE28EEFE38FEDE18EEDE18FF1E594F2E696F4E999F6EB9B F8ED9EFDF2A4FEF2A4FAED9FF8EB9DFCEFA1FFF2A3FBEE9FEBE192EEE598FCF3A7FEF4ACF7EDA6 FEF8B3FFF7B5FCF2ADFAF0A9FDF3ABFFF6ABFEF5AAF5EBA6FFF5B1FBF1ACFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD580DCD27DCDC36E CAC06BDCD27DE7DD88D9CF7AE6DC87DBD17CD9CF7ADCD27ED6CB7CDDD282E1D686E2D787E0D585 DED383DFD484D8CD7DD3C878DDD282E6DB8BDED47FE1D781E0D680D7CC78DFD582E6DB89DBD080 E1D687F1E696EADF8FEBE090E6DB8CE3D78BE3D78AEFE397F2E798ECE191F0E595F1E693EBE18C F1E790FAF099F6EC94ECE28BF4EC98F5EC9BEFE797EBE293F1E699F9EDA1F2E496EDE091F5E894 EFDF8BF8EA92F7EB98F2E798F0E596F3E898E8DD8DEBE090F0E594F1E694F2E892EFE590EDE38E ECE28DECE28CEFE58FECE28CE9DF8AEDE38EECE28EEADF8DE6DB89E6DB8AEEE394F3E898F1E696 ECE394F0E899E8DF90EAE192F2E99CEEE598F3EA9FF4EAA0F6ECA2F7EDA5F4EAA2F1E6A1F8E9AC F9EBADEFE29FF4E7A0F5ECA1F0E799EFE697EBE495E6DF91E9E394F7F0A4E3D686C8B765FBED9A F8EA96EBDB85EEDE88F2E28CEEDE86EBDB82EADB81ECDC82EADA81F6E698EEDE92F7E79BF9E99D F1E198FAE9A0EFDE98F4E39DF7E6A0F7E6A1F3E29CEFDE98F6E59DF8E7A0FBEAA1FAEA9FF9E99E FAE99EF7E79AF6E699F8E89BFAEA9CF7E799F6E598F5E397F2E094F5E497F2E194F2E293F4E697 F1E495EDE18FE9DE8DE9DE8DECE18FECDD8DEFE090F6E698F9E99CF6E699F3E397CABA6EEAD98C FBEC9BF7E894F3E48EF3E28FD4C078ECD98CFCEF97FCF090EAE184FCF4A0F1E89FF3E5A5EFDF9D F3E097F0DE8AE9D880EADC87EEDD8CEBDC8EEEDE95F0DE95EEDD94F0E194E7D786D9CB72E0D473 E4D775E7DE92F0E7AEA49E635F5A1EA3A060B1B072B3B070928E4DA39A57A19550AA9A55D2C17B E8DB96E1D790F1E89EE6DF90BCB564B1AB5CD6D186E5E19DE6E2A6EFEAB79490603029026F6734 D7CE95FEF5B9E8E0A1A7A05D968F49EAE49CE7E197BFB96DB8B265E5DF91E5DD86F2E88DF8ED9F C3B878554B0F6E662DE0DA93E5E08EDED97FCCC36CEFE495D1C47BE7DF90F3ED9AD9D27DE8DD8A EDE194DFD08FF7EAB3A29666999263D4D19E63632CB7BA7AD7D78D78772DEDEBA8C0BD80ABA76F DCD8A3A4A06C817D47666228C8C587DCD997C1BE7D999557959152BDB9779D9954837D36B7B168 DED78BF1E89DECE39AEDE19AF4E8A2F5EBAEDBD099BFB67B92884C938A4ABDB474E4DB9BD2C989 A89E61C6BB83958A55605620BCB275B4AD6BB8B370BEBA77B2AB69C7BB7FCAB783CFBE93AB9C7D 58543E353C2EB1B69CF7EFB7CBC0877F743D7D743BE7E1A3F0EAACECE6AFDBD7A9B3AE894D4728 474221B2AE86E2E0ADF4EBACE8D9A8F4E1B8E1D593BDB766ADAB579F9D52C8C369DDD379E0CF88 D6C87FD1C579F4E89EF6EAA2FAEEA6DFD28CF8EDA7EADE96DED286E2D68AF1E696FCF0A4FDEBA8 FEEEAAFFEFA7F7E79BF2E391F9E994F8EA93EFE189F5E68FF9E995F4E492F4E593FBEF9DFBEE9C F8EB9AF5E897F5E899F7EA9BFAEC9FFCEFA1FAECA1F7E99FFAEDA1F8ED9DEEE695F0E798FAF1A5 FAF1A6F6ECA5FCF2ACFBF1ACFCF2ABFEF5ADFDF3AAF8EFA6F5EBA8FEF3B3FAEFAFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7CD78DCD27D D3C974CCC26DE2D883E5DB86D9CF7AE0D681D5CB76DAD07BE2D884DCD181D9CE7EE5DA8AE2D787 DDD282E1D686E1D686DBD080D9CE7EDACF7FD2C776D2C873DFD57EDFD57ED6CC77DDD37EE4D988 E3D888DBD080E4D98ADFD485F2E699E8DC90E5D98DDACE82E4D88CE9DE8FE2D788EFE494F7EC9A F4EB96E9DF88EBE18AF2E88FECE28BEDE691F8F09FFDF5A4F9F1A2F5EA9DF4E89CF7EA9BF0E394 E7DA86F2E38FFAEC94EEE18EEDE293EADF90ECE191E6DB8BE9DE8EEDE291F0E593F4EA95F2E893 EEE48FECE28DEBE18BF1E792EFE491E6DB89E8DD8BEDE291ECE191E5DA8AE7DD8DEFE595F1E597 EEE295F3EA9DF1E89BE9E093EFE699F4EB9FEEE59AF2E99FF0E69DF2E8A0F0E69FEBE19AECE19E FBEBADFBEDAEF2E5A3F2E5A0F1E7A0EAE198E7DE94E7E096E7DF98EDE49EF7EFAAF9EB9FE6D483 EFDE8CE9D886FDED9AF6E592F1E08DECDB88E7D781E7D681EBDB85ECDB87FFEFA1F1E194F8E89B F8E89BEFDF93FCECA1EEDD93F3E29AF5E49CF4E39BF5E49EF7E69EF2E199F9E8A0FBEAA1F8E89D FCECA1FFF0A5FAEA9CF5E598F7E79AFCEC9EFDED9FFDEC9EF4E296EFDD91F4E397F5E598F4E496 F6E899FAED9DFBEE9FF2E797EEE393F3E898F0E394F4E497F9E99DFBEBA0F9E89FF8E79EEAD990 F4E497FFF0A2FDED9BEEDF8BEADB89EDDB90E0CF80F3E68EF5EB8DF1E78BF1E994FCF2A8F7E8A5 F5E6A1F4E297F2DF8CF2E28BEEE38AEFE28DECE18EECE092EBDD92E7DA8DE5D98AE6D987F0E58C F7ED8EDBD171E3DA92C5BD8857511988844C77753B929056B1B072B1AD6DB6AE6DA79E5A9F944F A1934F9A8D49ACA05BE7DD95F6EDA2F0E799DBD586B2AB60BBB56EC9C484DBD59CF0EAB6CAC491 433A0A5C531CCFC68CE9E1A4F4ECADBFB875BAB36DECE59CE7E196A49E52D7D185E7DF8BEEE389 F2E79AE2D896A096594F460ACFC982E0DB8AE9E38ECAC06CEBE091D8CA82DBD285EBE493CCC46F DDD37EE9DD8EEADE97EEE3A6B6AB788A8254C0BC8E5E5D2BD3D39D9C9D5BBBB97ADEDDA295935D BEBA887A7647615D2F999565CAC792B4B1788482469D9A5DA9A46B8781469E985CCBC687EDE8A8 EBE5A5F4EEADF3ECAEE1D99DC4BA80A79C64A19661A59D67BEB57FB2A970B4AE72B0A86C8C8347 A39C60B5AD74B3A974877F4BD9CF9AD2C78AD0C984E7E29BE3E197E2DD91F7EBA2F2E19EF7E6AB EADDAD8C8664242810656848E4DCA6FAEFB8C4B981554C13B8B277F3EDB3EAE5AEF9F3C2EFEBC0 C3BE97534F2A514E24B2AF7F999053726332A6936AC2B574F1EB9CEFED9DE1DE96E3DE87E5DB83 E3D18CE7D990E3D78BF6EA9FEFE39BF5E9A2FCEFA9F3E7A1F9EDA4FEF5ABFFF8ABF8ED9DE9DE8F FFEFABF9E8A4F7E69EF3E397F5E595FCED99FAEB97F2E38EFAEA96FEEF9CF7E897F2E694F7EB99 F7EB99F4E796F1E496F3E597F7E99EFDEFA5FFF1A9FCEDA6F9EAA4FCEEA8FBF1A4F1E998EDE496 F7EEA2FCF2AAF9EFA8FCF2ACFDF3AEFFF5AEFFF6AEFCF3AAF8EEA5F4EAA5FAF0ADFCF1ADFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCDC36E DBD17CE2D883D9CF7AE3D984E4DA85DBD17CE1D782D8CE79DED47FE6DC88DFD485D5CA7AE1D686 DCD181D9CE7EE0D585E3D888E9DE8EE6DB8BE1D686D7CC7BDBD07BE0D67DDBD178D9CF77DDD37C E0D581CFC474D2C777E8DC8FE5D98DE9DD93E4D88EE7DB8FE5D98DEEE296E8DD8EDFD484F0E595 EADF8DF6EC97EBE18AE1D780E8DE85E9DF88EBE38FF4EC9BFAF2A1F9F1A2F8ECA0F7EA9EFDF0A2 F3E698E3D682F3E48FF3E58DEBDE8BF0E495F1E697F3E899EFE494E9DE8EECE190EFE492F0E691 EDE38EEBE18CECE28DECE18FF4E997F0E595E4D989E5DA8AEEE394EADF90E7DC8DEDE195EFE397 EBDF94F1E49BF4EBA0F0E79CEDE499F3EA9FF6EDA4F3E9A1F8EEA7F1E7A0F3E9A2F2E8A3EFE5A0 F3E8A4F7E7A9FCECAEF9EBA8F5E9A3F2E59FECE09AE9DF98EBE09CECE2A1F1E8A7F8EEAFF6EAA0 ECDD8AF6E794EFE08FF8E998F0E190F7E898F3E494EEDF8FF1E291F8E899FDED9FEFDF91F4E494 F3E395F2E294F3E395EFDF92F4E497F2E297F0E095F2E297F7E79EFDECA3F6E59DF5E49CF7E69E FCECA1FFEFA4FEEFA3F9E99CF3E396EBDB8EEDDD8FF9E99BFCEC9FEFDD91EBD98DF2E194F3E396 F1E194EDDF92EDE092F0E395F0E496F0E596F2E798F1E496F8EAA0FCEEA4F6E89FF3E59EF7E9A2 FAECA5F3E59BF7EA9DFCEFA0F4E997F0E190F1DF93DECC7DD8CA72E3D87CF7ED92F2E893FEF2A5 F8EBA3F8EAA2F4E497F2E18FF2E58CE3DC82E9DF88EDE491ECE394ECE195F4EA9DE6DD8FD7CC7C DDD47FCBC46AB8B056AAA2616B6536322C08898552ADAA75DADAA1E3E1A6F5F3B6FAF6B7F2EAAA EDE4A1FBEEACC7B9788F823DA49850D8CD82F6ED9FE1D889E3DA8DB9B168AEA763E4DC9DE8DFA5 F5ECB5D1C890534A134A4109D3C990F0E8AAE4DC9C9E9754CDC582FBF4ADBEB86EA9A258DED582 F7EB95ECE192EBE09DD8CE906F67289E9751EDE79AF9F3A0BEB463D4C97AE1D389BDB469E0D98B D0C875E1DA82E0D984DFD789E5DA9BC7BD88716A3DB0AC82615F34B8B7885D5B28CBCA96787645 B3B084706D434A46209C9871AEAB80767444757340A3A26A84814AA29B68BBB480F8F1BBDED7A1 D8D39CD4CF99ACA6738C86568983569891669F9970969063B2AC7AAEA775C2BB86D7D29BBDB780 817A44A29C65D9D39F77703E7E7746BCB581D5CD8EEAE29BFCF9ACDBD788CCC671E0D67DF7E792 E2D083F2E2A3D2C8995B59394D4929CABF8EF7EEB7EDE4AB80773D68612ABDB680B9B47DB3AE77 BAB480DED7A79992661A1600838053C7BD8163542449360C4B3F02948D40D5D188F0EDABE8E390 FFF7A2FAEEAAFBECA2FDF2A3F4E89BE8DC91F4E89EF1E59DF3E79FF7EBA2F9ECA3F6EA9EF7EC9C FBF0A0FBEBA7F6E7A2F9ECA3FAEDA1FAED9EFCF09EEEE28FEFE38FF3E894F1E694EFE391F1E594 F4E999F5EA9AF4E999F3E899F7EB9FFAEEA5F8ECA5F4E7A2F5E8A6F7E9A8F6E8A6F3E99EF8F09F F8EFA1F1E89DF2E8A0FBF1ABFAF0ABFBF1ACFBF1ABFAF0A9F8EEA6F8EEA6F2E8A1F6ECA6FEF4AD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F2 FFF0E1FFEEDDFBEED9F3EED1EEEECCEEEECCEEEECCEEEECCEEEECCEEEECCEFEECDF7EED5FEEEDC FFEFDEFFF3E6FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFEEEFFF5E5FBEFDAF2EED0EEEECCEEEECC EEEECCEEEECCEEEECCEEEECCEEEECCEEEECCF2EECFFAEFD9FFF3E4FFFDEDFFFFF7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF7F8FFF0EEFFEFE6FBEAD3F2E2BBEEDCAFF0DFB5F8E8CCFFF2E6FFFCF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D5CB76DFD580E6DC87E0D681E0D681E0D681D3C974D6CC77D2C873DDD37EE0D681DED383DBD080 E2D787DACF7FD5CA7AD9CE7EDED383E3D888DED383E1D686EADF8EE9DF89E3DB7FDCD279D9CF76 D8CE77D7CD78E4D988E3D888D5C97DC6BA70C1B56CF4E89FEEE298F5E99DF6EA9FEDE292E8DD8D EDE293E4D986F4EA95FAF099F2E891EFE58CF2E891F2EA95EEE694ECE393EEE596F4E99CF8EDA0 FDF1A2EFE293F1E591F1E28DE8DA82F5E895F1E697F3E899F4E999EDE292E1D686E9DE8DF0E593 EFE590EBE18CEBE18CEDE38FF0E595F6EB9CF0E596E5DA8BE7DC8DEEE395E9DD8FE6DA8FEEE297 F0E49BEADE95F2E69DF2E99EEFE69CEEE59BEFE69CF2E8A0F4EAA3F0E69FECE29CF6ECA6F7EDA8 F3E9A4FAECA7F6E6A1F8EAA4F7E9A1F2E69BF0E49AF0E49BF0E59DF0E6A1F2E7A6F4E9ABF5EAAC F7EAA1F0E18FE7D885DECF7EF0E090EFE091F6E699F1E195EDDD91F0DF94F5E59BFAE99FEADA8C F3E491F6E795F9EA9AFCED9DF7E898F8E89AF4E497F6E69AFAEA9EF8E89CF2E297FBEAA2F2E199 F3E29AFAEA9FFCECA1F9E99DF5E598F2E295EADA8DE5D587E9D98BF2E193F4E295F4E396FBEA9D F9E99CF9E99CF0E294EBDE90EBDE91EEE294F1E598F1E598F3E59BF5E79FF5E7A0F3E59FF3E4A0 F5E6A2ECDD99F4E69FF1E39AEEE093F2E597F6E99AEDDE91F2E495E0D47FDBCF77D8CE75DFD581 EFE495F5E89DF2E59AF1E295EFE291EDDF8DEBE48DECE591EEE696E4DB8FDAD187DAD188D9D087 E3DB90E6DE91CFC775DCD584C2BA803E360F6F683C97936484814F7E7D4696945C8E8C4FAFAB6D E9E4A5E7E0A0EEE5A6ECDE9DEBDC9BC7B975A0944CB3A85DDFD587ECE294EFE499D7CF85988D47 EFE5A3E1D799F2E9B0C9C088443B1069602CF7F0B6FBF4B7D1C88AB3AA6BEEE7A3E7E09A9F9850 CAC272E9DE88EADF90EAE099EAE19FA39B5C645C19D9D389F0E99CC3B96BB7AC5EEBDD93D7CB84 F2E99FD2C977E3DC83E4DD85E8E190E8DF99CEC68E696235A39E77807B577B78538E8C63908D64 B1AE88615D39726E4BB4B08E726E4B504E27656339939163979564C3BF8DD8CFA1BEB688A9A173 948C5D7B7545767045746F47847F5CA09C7DA9A489A49F858F8A65BAB585CAC595B6B181807B49 5A55226F6A37817D493A36074F4A266C6737625D297067289A924CD1CC82F4F2A0E2DE83D4CB6B F5E684E6D479EBD98DE0D39C746B48322C0BACA176E9E0AAECE4A7BCB3784A420D89814FB3AB77 AAA468B5B174BEB97ED5CF9D4D472A37330AEAE0A6DBCB9AD6C69AA093543E37007F7B34E5E0A4 EDE79BEEE292FCEAA6F1E398F9EE9EF5E99BFAEEA2FEF4ABF8ECA4F5E9A1F8ECA3F8ECA2F3E79B F1E698F4E89CF9EAA4F8EAA3FFF5AEFFF8AFFCEFA3F6E99BF6E99AF4E897F9EC9CF7EB9AF6EA99 F8EC9CF8ED9DF8EE9EF7EC9EF7EB9FFAEEA5FEF2ACFDF0ADF8EAA9F9EBACFBEDB1F9EBAEF5EAA2 FDF4A5FDF4A7F0E69EEEE39CF0E6A1F2E8A4F5EBA7F7EDA9F6ECA5F5EBA4F7EDA5F6ECA4F5EBA2 FCF2A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFCF9FDFBF6FCFBF5FBFBF4FBFBF4FBFCF5 FDEFDDFFE1C1FFDFBDF8E1B8E9E1ABE0E1A3E1E1A4E1E1A4E1E1A4E1E1A4E1E1A4E3E1A6F0E1B3 FDE0BFFFDFC1FEE5CCFCF7EDFBFBF4FBFCF5FBFBF4FCFBF5FEFCF7FFFDFBFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFFCFDFDF8FCFCF5FBFBF4FBFBF4FBFBF4FDFCE9FFF9D9FFEBC9F7E2B9E8E1AAE0E1A3 E1E1A4E1E1A4E1E1A4E1E1A4E1E1A4E1E1A4E0E1A3E7E1A9F6E2B7FFE9C7FFF8D8FDFBE7FCFBF4 FBFBF5FDFBF5FEFCF8FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEF0EDFDDFD5FEDABDF4D19AE4C476DCBD63E0C16DEFCE90FCDEBBFEF4E8 FFFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDFD580E1D782E1D782E3D984E9DF8AEDE38ED4CA75D4CA75D5CB76E7DD88E8DE8AE5DA8A E0D585D9CE7ED4C979D9CE7EE1D686E7DC8CE6DB8BE1D686E5DA8AE8DD8DE4DA83E1D87BDCD378 D1C76DC9BF68CDC36DE5DA89C2B76794883CACA056AEA25BF2E69DE3D78CECE094E7DB8FE7DC8D F0E596E7DC8CF1E794E8DE89EFE58EEFE58EECE28AF4EA93F4EC98F4EC9AF6EE9DF3EB9CEFE397 EADE92F8EC9DF6E99AE5D884F4E590EEE088F1E592F3E799F4E99AF5EA9AF3E898E7DC8CE8DD8B ECE18FEDE38EEAE08BE8DE89E8DD8AF4E999F8ED9FF0E596E6DB8DEADE90EEE296ECE096E0D48A EADE94F7EBA3EEE29AF0E49CF0E89CEFE59CEDE39BE9DF97EAE099F1E7A0ECE29BEDE39EFEF4AF FBF1ACF0E6A1F5E9A0F9EB9CF4E799EFE392EDE190EFE392F0E596F1E697EEE59CF0E6A0EFE4A2 ECE1A1E9DC92F3E493DECF7DC2B364E6D688F0DF93FBEB9FF6E59CF1E099F1E09AF3E29CF5E49D EFDF91E6D784F3E491F7E898EEDF8EF8E997FCEC9EF0E092F0E093FCECA0FEEFA2F8E89CF5E39C EEDD95EBDA92EEDE93F1E196F0E095EEDE91F4E497F9E99CF5E597E6D688E4D385F0DF91F6E597 FBEA9DF5E598F5E598F7E99BF7EA9CF6E89DF0E498EFE397F3E79DFBEDA6F0E29BEDDE99FAEBA7 FEEFADF5E6A5F3E4A1F8E9A5EEE099F2E49AFCEEA2EBDE90FCEFA1F1E496EADE8BF0E691CAC06A D8CE79DED382EFE495E9DD91EBDD92ECDE94E0D587E1DA8BE6DF92EEE69DE4DC97DAD18FE5DC9A F8EFADF1E8A6D9D08CC0B771C1BA71726A3538300B655D36A59E71C4C090C9C590B9B57BA4A163 625E1F5955168A8647DFD89AEBDFA1F0E0A1E1D291EADD96C3B76E978B3FEBDF92FAEEA1EDE196 C3B76C9E924AFBF1ADECE3A8F6EDB5C3BA83322901887F45FAF2B9F4EBB0B1A96ABBB373E8E19C CEC780C7BE6FE4D884F1E697E2D88EDAD18CBFB7744F470EC7C07BF5EDA6E7DC919C9044D3C57B D6C983F1E49DCBC272E8E189E4DD84D6D17EEDE69EDCD69C746D3F7D785298926F74704D9B9875 72704D545130706D4D9390715F5C3B605D3B7E7C56AEAC84C0C09293926266623352471D4A4116 322900635B30655E3666623D6C67467571545B58413D3A285854438581604440134E4A1D8D895A B1AC7DD8D4A4AFAB7B8E8A5A504C1C807C4CD2CE9ED8D49FE3D99C887E3C7A732FD6D386D9D47C E2D977E6D66FECD977EDD885F5E4A9998B673C3115837750EDE4ADE7DF9FDFD79761572473683A D3C997B8B06FC0BC74C2BD7AE7DEA9716A411611009F965AEBDCA8FFF3C4EADD9A8F8741454000 8C864FECE59CEEE393EEDC97FEF0A3F8ED9BF6EB9AFFF5A6F5E89DFBF3ABF8ECA4F6EAA1F9EDA3 FDF1A5FCF1A3F6EA9EFEF3ADF4E59FF5E7A0F9EBA2F7E99FF5E79BFAECA1EFE195F5E89AFBEEA0 F8EB9DF4E99AF1E598F3E79BF4E89EF6EAA1FBEEA8FEF1AEFFF3B3FFF1B4F9EAAEF8E9AEFCEDB4 FCF1ACFBF2A3F8F0A3FBF1A9FDF4ADEDE39EEDE3A0F6EBA9FEF4AFFDF3AEF9EFA8F9EFA7FDF4A9 F6EDA2F8EFA4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F4FEECD8F5E6C2E8E6B6E6E6B4E6E6B5 E6E7B5F1E1B3FDDCB4FFE7C1FCF1CDF5F2D4F1F2D7F2F2D7F2F2D7F2F2D7F2F2D7F1F2D6F2F2D7 F8F2DEFEEEDFFFE2D4F9DCC5EAE5B9E7E6B5E6E6B5E6E6B4EDE6BBFAE8CBFFF1E5FFFEFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFBFEFFEBF3F4D0E8E8B8E6E6B4E6E6B5E7E6B5F1E6BAFDE8C0FFEEC7FCF1CEF5F2D4 F1F2D7F2F2D7F2F2D7F2F2D7F2F2D7F2F2D7F2F2D7F1F2D7F4F2D5FBF1CFFFEEC8FEE8C1F3E6BA E7E6B5E5E6B4EEE6BCFAE8CCFFF2E6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCEFDFF6DAB0EDC06CE3BC59DCC66AD8CD79DAC971E1BE5DEBBE63 FBDEB8FFF1E5FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE5DB86DCD27DDAD07BE0D681C1B762B7AD58EEE48FD7CD78DFD580D7CD78DFD581 DBD080E4D989E0D585D3C878D7CC7CDFD484E7DC8CEEE393DFD484D8CD7DE1D686DDD37DE0D67C DFD57CCEC46DC3B963CBC16CD8CD7CDDD282E8DC90EBDF95EADE93F0E49AE0D488EDE195F5E99D EDE293E9DE8EEFE494F1E693F7ED98F5EB94EEE48DEFE58CF4EA93EAE28EF6EE9DF6ED9DF3EA9B F5E99DF4E79BF6E99AF6E99BF1E591F1E28DF5E890F4E895F2E697EFE495F2E797F8ED9DEFE494 E7DC8AF1E694F0E691F2E893EFE590EFE591EEE393EBE091ECE192F0E596EFE395E8DC90EDE197 EADE94F6EA9FB8AC64DED28AF1E79FE8DF94F2E99DEDE599E8DF94EBE198EBE199E6DC95E8DE97 F1E7A0EFE5A0EAE09BEFE398F1E48DF1E28CEDDF86C7BB61CEC36AF8ED97F4E995FBF0A1F6EBA0 EAE098F2E8A1F4E79BEDE192F2E597F4E799EADE90EBDD92EEE097F1E39DF1E39DF4E5A0F8E9A5 F5E7A1EFDF91F2E390F5E692EEDF8EEBDC8BF3E493F5E597FBEB9DF1E193EEDE91FAE99CFEF0A4 F2E199F5E49CF0DF97ECDC91F2E297F8E89DF2E295F8E89BF6E699F9E99BFDED9FFAE99BE2D183 EFDE90F7E799FFF1A4F9E99CF5E69BF3E59AF7E9A0FAEEA4FAEEA5F7EBA4F1E59DF8EBA5F9ECA6 F7EBA6F8E9A9F2E4A3F2E4A3F7EAA5FDF1A9FBEFA5F5EA9CF3E899FDF2A3EDE294F2E798F9EE9F F5E998F1E593F3E795FAEE9EF9EEA0F6EAA2EBDE99EBE29EE8E09CEEE8A5F6EEAFD9D193B9B073 A39A6181783E6E652A564E114B4306443B063C330C4B431D5F562D756C3E98925FBBB57DEEE8AC E1DD9DEDE9AABFBB7C8D894A757133B8AD6FE6D899EEE1A0F1E4A0FAEDA6C5B96D978B3FD4C87A EADF90EDE093C0B266B8AC64EFE6A8F2E9AEEDE4AB9B9258140B00AAA165ECE3A9DDD597B8B071 E3DB96E5DE97B4AA5DEEE291EADF8FE9E093DFD78EC3BC777E7634A59D5DF8EFACF3E6A1BEB268 BEAF65DECF8AD6C983DACF81E3DB86E7E18AE8E393E4DD98C9C38C7D7649766E49706A465D5835 6C684547431F736F4B8B85657E7959746F4F66623E6B6740605D33605D305F5D2D7B7648A0946C B7AE85BBB2889E976D69623A615C37544F307A765B5C59435A5745110D035651319793669F9B6E C3BF92F5F5CB959163817D4E9894644F4B1B7F7C488E8B58DCD6A1DED195E4D7997E753775702E F2EC9EDAD176E4D670EDD977F0DB88ECDA9FD4C4A453452B80744DE7DEA4ECE59FE7DF9C695F2E 5C5027D1C695A8A15AC0BA69B5AF62C5BB819F976F312C0871682CF0E2AAEBDAA5F6EAA5F3ECA4 6D672A524C1BB3AB66F5E99AF4E29CF1E395F4EA95F5EA99F3E899F7EB9FFDF1A7FDF1A9FCF0A7 F3E79EF4E89CFBF0A2F8ECA0F8ECA3F1E59DF5E9A1F5E9A1F8ECA4FFF6ADFAEEA5F8EDA3F7EB9F F7EC9EFBEFA3FAEEA2F3E99EF8EFA4FCF2AAFAF0A9F5EAA6F4E9A7F0E5A5F5EAACFDF1B6F3E7AD F5E9AFFCF2ADFCF3A6FCF3A8F9EFA6F7EDA7FAEFACFCF1AFFFF6B4FEF4B0FDF3AEFEF4ADF4EAA3 FEF5AAF8EFA4F4EBA0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFF7FAFAECF6F6E2F5F6E2F8F1D8FCE9C7F5E5BAE8E6B3E5E6B2 E6E6B2E5E6B2F0E5BBFDE7C9FFF4D9FFFDE8FEFEF5FEFEFCFEFEFBFEFEFBFEFEFBFEFEFBFEFEFB FEFEFCFEFFFDFFFAF9FEEDEBF8E4D6E9E5BAE6E6B2E6E6B2E5E6B1EDE5B6F9E6BFFCECCFF6F4DE F5F5E1F7F5E5FDF5F2FFFAFAFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1 F5F5E2F5F5E1F9F5DCFCF4D2F3EEC3E7E7B5E5E5B1E6E6B2E6E6B2F1E5BCFDE8CBFFF5DAFFFDE9 FEFEF6FEFEFCFEFEFBFEFEFBFEFEFBFEFEFBFEFEFBFEFEFBFEFEFCFEFEF7FFFDEAFFF7DCFEE9CD F2E6BEE6E6B3E5E6B1EEE5B9FAE6C8FFEDDBFEF4E7F9F5E5F7F5E4FDF5EAFFFAF5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFF7F7E8BEEDCD7FE8B95BE5C16BE5D897E4E6B2E4DFA2E5C772 E9B752F2C77EF9E1B7FEFAECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE5DB86DAD07BE4DA85E1D782988E39A19742EAE08BEAE08BE0D681D3C974 E6DC88DED384DCD181DFD484DCD181D7CC7CD9CE7EE0D585E4D989E1D686E1D686E2D787E3D984 E5DB83E4DA83DFD57FD7CC79CFC472CDC272DED383DFD485DFD486F0E497EFE396E8DC90E9DD91 EBDF93EEE394ECE192E7DC8DF4E997F7ED98F7ED96F2E891ECE28AEAE089E7E08BF3EB9AF4EC9C F5EC9DFBEFA3FAEEA2F8EB9CF2E596F1E490F0E08CF6E890F9ED9AF1E697EFE495F1E696F4E999 EBE090E0D584EDE290F2E893F7ED98F0E691EBE18DF0E594ECE192E9DE8EE8DD8EE6DB8CE2D789 E1D588F8EBA1C6BA6F74681FB4A75EF1EAA2E8DF92F2E99CEFE69AECE397EEE598EDE49AF0E79D EEE59DF3E9A2F2E8A1F1E7A1F6EA9CF4E68CEFE186E4D67BD1C468D8CC71F5EA90F6EB94F8EE9A F3E999EADF93F1E69CF7EA9FF4E798EDDF93ECDF92F4E69AF2E49AEFE198F3E59DF3E49FF3E59F F3E59FEADC95ECDC8EF0E18FF7E896F5E596F2E293F9EA9AF2E294F3E395EDDD91EEDE92F7E79B FAEA9FEFDE96F1E098EDDD94E8D88DEADA8FEDDD92EDDD90F6E699F5E597F6E698F5E597F6E597 E7D687F0DF91F4E496F9E99CF0E095FAECA1FCEEA4F9EBA3F5E9A2F5E9A2F7EAA4F3E7A0F6E9A2 F6E9A3F7EAA6F6E8A6EADB9BEADD9AF3E6A1FBEFA8FDF1A7F6EB9DF0E495F4EC9EECE298F0E59C F3E79FF0E398F0E394F3E796EBE08EFEF3A5F5EAA3ECE1A3F2E8ACF9F0B3DED89B918750504516 473D066157248177419F945CBEB37BD0C68ED4CA91D2C898D1C79BC3B98BA4996680763D6A6125 6158197B7434B7B272E5E1A2FFFDBFCBC98C9E94577D7335CBC181EADD9CEDE39DF7ECA4D2C77E 908439D0C577F8EB9EF4E899BEB369CFC785F2EAABE1D99CF1E8AF6B622C3A310CE2D99DF4EAB0 D6CF8ED7D08BF4EDA5C9C073E7DA8BEAE090EFE696EBE396D7D189827A3A847B3FF6ECAFF4E7A6 C7BA73B4A65BF5E7A1E7D892DED285EAE290ECE695E3DF93E8E2A497915C686235665F375D562E AFA980868057AAA47C9F9B747A744D6E6841635F358580568E885CA9A578D2CE9ED6D1A1D7D1A2 B1A77B8980549B9366A39A6F958F63B4AD857C7751534E2D615D3F5C583F98937BB3AE8AD4CF9F E9E4B67F7A4C827C4EC1BC8EA7A2737C77479E9A66C8C48D625E27DAD499E6D798FCEDB0D1C68E 6A6029B9B06FEFE695EADE7FEDDD7CF2E18CF2E0A5EADBBB584B33726743E8E0A1DED88BEDE69E 8E8253463914DDD1A2D5CD83CBC46CAFA855C4B97EBDB48C423D166D6425F3E6A9EFDEA4EDE297 EAE39AB3AD724A4315A19A56F1E595F9EAA0EFE391EFE58EF2E893F5EA9AF4E99BF5E99DEEE299 F7EBA1FAEEA4FCF0A4F9EEA1EEE296F2E69CF8ECA3FFF8B0FFF8B1FDF0A9FDF0A9FEF1ACFDF0A9 FBEFA6F9EDA3F8ECA1F8ECA3F7EEA6FAF1A9FDF3ADFCF3AEF9EFADF8EEADE7DD9DE0D697FAF0B3 FFFABDFAEFB2FCF2ACFDF4A7FBF1A8FAF0A9FCF1ADFEF4B2FFF5B4FEF5B4F9EEADF7EDA7FBF1AC F9EFA7FBF1A9F8EFA4F8EFA4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFEFEFEFBFEFEF5FEFDE5F2F2CAE6E6B2E4E4AEEDEAB9F9F2CCFCF7DBF7F6E3 F6F6E4F6F6E3F6F6E3FAF6E7FEF7EDFFFCF3FFFFF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFFFFF9FAFDF6F2F7F6E7F6F6E4F6F6E3F6F6E4F9F6DFFCF5D5F5EFC4 E7E6B2E5E5B0EAE5B9FAE4D8FEEEECFEFBF9FEFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFEFEFCFDFDF8 F1F1D5E6E6B2E4E5AFEEE5B5FAE6BFFCEDD2F7F5E2F6F6E4F6F6E3F6F6E3FAF6E8FEF7EEFFFCF3 FFFFF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9FFFDF4 FFF7EEFAF6E8F6F6E4F6F6E3F9F6E7FDF5E9FFEEDEFBE6C9EFE5BAEAE5B5FBE5C5FEF0DFFEFCF7 FEFEFDFFFEFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FEFCE2F0DA92E5B950EEC281F5D8B8F7EED9F6F9E9F6F3DE F6DFB4F3C981E7B54EEECF80FBF4CFFFFFF5FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDBD17CDED47FDBD17CE5DB86E6DC87DFD580E7DD88E1D782E0D681 D9CF7AE8DE89DACF7FD6CB7BDED383DFD484D9CE7ED7CC7CE8DD8DF4E999E1D686D2C777DED383 DFD483DACF7DDED481E3D986E3D785DBD07ED6CB7AE1D686DDD281DACF7FE6DB8BE2D786EFE397 EADE92EADE92EEE394EEE394E7DC8DF6EB98F5EB96F5EB94F3E992EDE38AE7DD86EEE692F5ED9C F2EA99EFE697F3E79BF2E69AF0E394F1E495FCEF9BF4E591EFE189F0E390EDE193EDE293F1E696 F7EC9CF0E595EADF8EF3E896EDE38DEEE48FECE28DEDE38EECE18FEBE08FECE192EDE292EADF8F E8DD8DE5DA8BE4D98AE4D88BECE094ECE095EBDF93EFE697F3EB9BEFE697EEE597F4EB9DF5EC9F F2E99CECE398E8DF94E7DE93E9DF97EEE194F4E58FF1E18AE6D77EE6D87FE9DB82F1E48DEFE28C F2E796F0E595E6DA8EE9DD93ECDE95F6E89CF7E99EF3E59AF9EBA0EBDD95E3D58CE8DA91EBDD94 EEE097F2E49BECDE94EADA8CEEDE8EF6E698F7E799F3E394F7E79AF8E89BF5E59AF3E398F7E79C FCECA3FDECA4F1E098F7E69EF7E79EF6E69BF5E59AF5E59AF2E295F8E89BF6E698F6E698F6E698 F2E293DFCE7EECDB8DF1E193F8E89BF4E499F6E89EF5E79EF4E69FF2E59FF3E6A0F9ECA6ECE098 F2E59EF5E8A2F7EAA6FCEFABFAEDA9FAEDA9F6E9A3F2E69CF2E699F4E999F2E999EFE79DF2E8A2 F4E9A6F6E8A8F7E8A4F9ECA2F0E493F1E593F2E799E7DD9AF3E8B1E8DCA7968C513E3304554A12 91864FC9BE86E5DBA0DAD093D6CC90DDD397E5DA9EECE2A6E6DAA7E5D9A9F1E5B1F5E9B1EEE0A3 E7DA9ADCD28E887F3A504806585313AAA668E8E5A8EFE9ADC2B97B706829B7AF6DF1E8A5D1C782 F0E69FDDD28A867A30DACE83F0E498EBE2979F9751E8E09EF8F0B1EAE1A5E3D9A0403708706737 F9F1B3E4DD9CC6BF78F8F2A8CBC175DED183F2E797F2EA97E7E090DFD98F82793B675E27FFF4BD F7EAAED3C67FB8AA5DFCECA3E6D690D7CB80E4DB8EE9E499E2DF9CDCD79F756F3E6962356B6436 989161615A26463E0E605928625C2B8C8453CBC393D7D1A0DBD5A1DED7A4CFC995B0AA76827B47 736B3BA39B6DD8D0A1FFF9C9ECE4B3948E5B4842116963338E875BB8B187E1D9B3B3AB87F8F0C5 958F5E857E4D776F40A09A6ABAB3848981538F8954C7C28BECE6AD4F4B0ECAC384F6E59FECDC9A EDE2AA968C5B90894EE0D890E7DA82E9DB7CF4E590F1E4A7F1E6C2443A1F5C522DEAE3A1E7E18F F9F3A6B9AC7E392A0AD6C99ED9D083CDC669CFC86FDED297E0D5AE4F4A22605816F2E5A3F1E2A2 EADF92E9E299DCD69B473F13827B37DBCF7FF4E397EDE08BECE289F2E890FAEF9DFAEFA0F5E99C F7EBA1F6EAA0F4E89EF5E99DF6EA9EF2E69AFFF3A9FEF2A9FEF3ABFEF1ACFCEFABFCEFABF8EBA8 FBEEAAFDF0AAFCF0A9FBEFA5F7EEA6F9F0ACF9F0ADFAF1AEFBF2AFFBF2AFFDF6B3FEF5B2FBF2B2 FEF5B5F8EFAEF5ECABF8EEA8F7EEA3F7EDA5F9EFAAFCF2ADFDF2B0FBF0B0F9EEAEF4E9A6F0E5A3 F3E9A4F7EDA6F4EAA2F4EBA0F7EEA3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFBFDFDEEF6F6DDF4F0D0FCF0CBF4ECC1E9E8B9E6E7B6EEEFC6FAFBE1FFFFF7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFFEE F5F6D5E9EABCE8E7B8ECE5BBFBDBC6F9E3CDF3EFD5F9FAE5FFFFF4FFFFFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8F5F5E1F0F0D2 F0F0D2ECECC5E8E8B9E7E7B7EFE7BFFBE9CFFFF3E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5EBFCE9D0F1E7C0ECE7B9FBE8BFF8EBC9 F3F0D3F9F0DCFFF4EAFFFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF9EAF3E7B4E6C86CDFB245F3D2A9FFEEEFFFFCFFFFFFFF FFFFFFFFF3E8F9DEB7E1B44AE3C05CEFDF9FFAF5DDFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD17CE5DB86D7CD78DBD17CE5DB86E1D782DAD07BE1D782 E2D883DBD17CDFD580DACF7FDACF7FE1D686E0D585E0D585E1D686E1D686E6DB8BDCD181D4C979 E0D585DDD282DCD181E2D788E3D888E3D888E9DE8FE8DD8BE0D582E0D682E3D885DFD57FE2D883 ECE192EFE398F1E499EEE394EDE292EEE393F4EA97F1E792F0E68FF0E68FEFE58DEEE48DF5ED99 FAF2A0F4EC9BF0E798F4E99CF4E89BEDE091EDE091F5E894F1E28DE9DB83EBDF8CF1E596F0E596 F1E696F6EB9BF2E797F1E695F5EA98E9DF8AEDE38EECE28DE7DD88E5DB86E9DF8AEFE491EEE391 E9DE8CE5DA89ECE191E9DE8DDED383EDE293F0E497F5EA9BF3EC9AF4EC9AEEE695EFE796F7EE9E F7EF9FF0E797EDE496E8DF91EAE193F0E79BF2E599F7E699F6E597EEDD8CF3E292E9DA89EADC8B F2E696FBEDA1FCEFA6F0E49DEEE19CF0E39BFAEFA5F5E99FE3D78EEBDF95EFE497E6DA8EE7DC8F E6DA8EEBDF92F3E89BF4E89AF0E093F1E194F8E89BF9E99CF3E397F5E59AF5E59BF1E098F2E199 F4E39CF5E49EF7E69EF2E199F8E79FFBEAA1F9E99EF7E79CF6E69BF9E99CF8E89BF1E193F2E294 F7E799F7E697E3D282EEDD8FF0DF92F3E396F0E095F1E299F3E59EF7E8A3F6E8A4F4E7A3F5E8A4 F4EAA2FCF3A8F8EEA6EDE39CEEE59DF4EAA3FCF2ABF5EBA4F1E89DF3EA9CF6EE9EF6EE9EEAE399 F1E9A5F3E9ABF6E7ACF9EAAAFCEBA5F0E292E7DB8BE9DE93FAF1B2C9BD8B7064383E33009A8E52 FCF1B4E2D798D0C585E9DE9CE7DD99E4D995EBE19CE4DA95DDD28EF6EBAFF3E6AFECDFA3EEE0A1 EFDF9BF5E69FF7E8A0F1E49DEBE29D827C3C46420E727034BFBB7DFAF8BBCCC787726D2DB7B06F F0E8A6E6DD9BF8EEA9D6CC848F853DEFE39ADFD68BB8B168BFB870FBF5B4E5DC9EFEFAC1B4AA74 271E00C9C183F3EBA8AFA860D1CB7FC9BF73CCBE73F6EC9BF3EC98E4DD8BECE59B90884A7A703C FFF8C6EFE0A7CCC07ACDC071F5E599F1E098EFE299EDE39BEDE7A4FAF5BBC4BF8E7D794C413D11 4C46136761275C5718989256A79F64C7C185EAE1A6EDE4A9E5DEA2D4CC919C9359766E36918950 CDC48CE5DDA7EAE4AFD4CD9988814B5A541B7D773B969054B5AD74E1D9A0BBB27BE3D8A2C1B683 8F84509D96617E7541E8DFACC5BC8B544B18C0B682756D37E0DA9FFFFABB615B1ABEB770EBD987 ECDB8FF5E8ACC7BE8D6A632FE6DF9DE9DE8AE2D97AEBE188ECE3A0EFE7BD423D1C5E562CE7E29B E5E489EEE997CDC0923A2A0BC3B48BEBE090EFE684FEF499F9EAB0ECE0BA555027605814F3E8A0 F6E8A2F5EB99F5EEA1DBD59A625B307A722FDDD280FAEC9DF0E48CEDE489F0E68EF5EA98F4E999 EDE294FFF4AAF9ECA2F5E99FF4E89FF4E89DF5E99DFBF2A5F9F0A7F5ECA4F6ECA6F9EEACF9EEAD F4EAA9F8EDABFAF0ABF9EFA8F6EDA2F4EBA4F7EEADF7EEADF7EEADF8EFAEF9F0ADF7EEABF6EDA8 FAF1ADF9F0AAF6EDA7FCF4ADF8EFA6F5ECA1F9EFA7FEF4AFFFF6B1FBF0B0FFF4B4FFF5B5FFF5B4 FCF1AFF8EEA9FDF3ADF6ECA5F7ECA5F9EEA7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCFCFCF5FDFDE8F7F7D0EBEAB6E8E0AAFBE2BDFDEEDAFCFBF3FCFCF6FDFDF7FEFEFB FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFCFEFEF9FCFCF6FCFBF5FCF6EBFFE4CAF3DFB5E7E3ABF2F1C3FDFBDEFDFCEFFDFDF9FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFCF9FEFDF9F7F7E5E9E9BD E0E0A1E2E2A8EFEFCEFBFBF3FCFCF6FDFCF6FEFCF8FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFFCF9FDFCF6FDFCF0FEFCDF F2F0C3E6E3ABF3E0B2FDE8CCFDF5E8FDFEFAFFFFFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFAF7ECD5E3C575DEBB5EE1C16FF4E5C6FEFBF8FFFFFF FFFFFFFFFFFFFFFCFAF9F0DCE5C87CDEBA5DE0C068F1E0B7FEFAF6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAD07BD9CF7ADBD17CE7DD88DCD27DE2D883E2D882 DFD580D3C974DBD17CE4D985E0D585DFD484E3D888E2D787E5DA8AECE191E2D787D4C979DDD282 E0D585D6CB7BD9CD7FE3D88BE9DD92E4D88BE2D788E9DE8EE9DE8DE3D984E2D882E6DC86E7DD85 E9DF88E8DD8DF0E498F4E89CF0E596EDE293F0E596EFE592F2E893F2E891EFE58EEFE58CF1E790 F3EB97F8F09FF4EB9BF3EA9BFBF0A3FCF0A4FBED9FF7EA9BF0E38FF5E692F4E58DF0E390F7EB9D F2E798EDE292F0E595EFE494F1E694F0E593E5DB85F1E792F3E994E1D782E9DF88EFE58EF2E891 F0E692ECE28EECE28EE8DC8BF7EC9BE7DC8AE5DA8AF8EE9EF8ED9DEDE692F1EA95EFE793F0E894 F1E997EDE592EBE392EEE695EBE392F0E798F6ED9EF6E99DFAE8A2F7E49EF4E19AF6E49BE6D58C E8D78EF1E19AF6E8A2F9EAA6F1E3A0F0E2A4E9DB97F0E49BF9EDA4F2E69DEBDF95E8DC90EDE193 EEE294EBE091ECE192F3E897F1E797F8E79AF5E599FAEA9EFBEBA0F7E69DF8E89FF7E69FF5E49E F8E7A1F4E39EF1E09BF8E6A0F8E69FFAE8A1FCEBA3FBEBA0F7E79CF4E498F8E89BF6E699EDDD90 EEDE90F3E395F2E293DFCE7EEDDC8DF1E093F7E79AF8E89EF8E9A1F9EBA4FDEEA9F8EAA6F0E2A1 EFE19FF1E79EF7EEA1F5EBA1F1E79FF5EBA3F7EDA5EAE098E8DE95EBE295F1E899F3EB99EDE695 F4EEA6F9F0B1F7EDB4FAEBB5FDEBB1F8E6A2F4E597ECDF8FFBF2A8CBC1844135152F2402C7BA7B FFFAB8E2D692E8DC95EEE39AD4C97DE0D688D7CC7EDED385D2C87AC8BD6EE3D791DDCF91E0D190 EEDE99EEDC93EFDD92F7E69AE1D288E1D791EAE1A1D7D294726E302D2B08BEBC7AFFFEBED1CD8D 7A7535BBB674EFE7A5DFD693F7EEA8A79E58CCC27AFCF3A9EAE398A39C54D4CD88FFF9BBE5DCA1 EEE4AA554C216A6222F0E9A4BFB96EBCB668E2D98CCEC077F5EB9AEBE38ED8D27DE6E094776F33 8B814FFFF9C9FDEEB7D3C680DDD080FEECA0EDDD93EDDF96FBF1ABE8E1A4C8C28F69653A231E05 514D207E7842B2AD6CD7D289E9E09AEAE19DEDE59FCDC480A09754A8A05DA79E5BB5AC6CD6CD8D F3E9ACF4EAADBEB57C6C6730605B22888347BEB979E6DF9FF5EEABDCD48EBFB570DBD18D988B49 83763682773BD8CD96E8DDA6A397637F74409B905B8A804A867D45FFF9BCEDE4A279712AA59B4F FDF192ECDA82F5E7A7EBE1B0716A38E4DE9FEEE793E2DA7BE2DC80E8E399D8D6A33F3B165F5732 DFDC8FD7D776E9E58FE1D5A646371ABFAF89F1E695EFE781F3E98CF0E0A8DBD0AB555126706821 FAEFA3F6E89EF6ED97FCF5A7E4DEA37D754B7A722FF0E691FAED99FAEE95F8EF93F6EC94F4EA95 F5EA99F7EC9CF9EDA3F6EAA0FBEFA5FDF1A7F5E99EF3E79BF3EA9DF8EFA5F7EDA5FAF0ABFDF3B2 F9EEAEF9EEAFFAEFAFFAEFADF8EEA7F4EAA2F3E9A4F8EEB0F9EFB1FAF0B1FAF1B0FAF1AEFBF2AE F8EFA8F3EBA4FAF2A9FFF9AEFEF6ACFBF2A7F8EFA5F8EEA6FEF4AFFFF7B3FEF3B4FEF3B4FDF3B4 FFF6B6FDF2B0F6EBA8FBF1ACFEF6AFFDF3ACFCF2ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF8F8E8EEEECAEAEAB8EBECB8EEEEC5F3EFD3FDEFDDFFF7EFFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFFF3E6F8F0D9F2EFCFF9EDC9FAEBC5F1EBC4F1F1D5 FCFCF8FFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEFDEDDAF4EAC9EDECC5 EEEECAEFEFCEF0F0D1F7F7E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC FFFFF2F8F8E2F2F0D1FAEFCCF9EEC8F1EDC6F2F2D1FDFDE8FFFFF5FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFEF0EDF6DABBE0B550E4C371F0DFB5FAF5E8FFFEFD FFFFFFFFFFFFFFFFFFFFFFFEFCFAEFF3E7B7E7CA75E0B54DEFCD97FDECE6FFFAFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3C975F3E994EADF8DD8CD7AE3D984DFD481 E2D785E7DD88DFD581DED381D6CB79E5DA8ADBD080DED382E0D583E0D583E1D684D9CE7CD9CE7E E8DD8CE8DD8EDFD485DBCF82DDD187E2D68BE1D589DED384DFD485E1D685E9DF8AE0D680DDD37C ECE28BE4DA83E6DB8CECE096F1E59AF2E798EFE495EDE290ECE18EF5EB95F6EC95EFE58EECE28B EEE48DF0E895F4EC9BEFE796EEE596F7EB9FF7EB9FF4E99BFAED9EEFE390F5E993EEE28CE4D986 F4E999EEE394E9DE8EEEE393F2E797F7EC9BEFE492DACF7CEADF8CF6EC97E9DF8CE6DC87E8DE89 EADF8AE9DD89ECE28DF3E894FFF6A2DED37FE0D583EDE091F1E596EBE090E8DD8CF0E593F4E997 F3E997EDE392E0D887F6EE9DF9F1A1F4EB9CF6EDA0F6EDA2F3E69FF7E6A6F4E2A0F5E4A1FAE9A3 EEE099F0E299EFE19AF0E19CF2E4A0EEE09FF2E4A5F3E5A3EBE19AEDE19BEFE39CEDE197F2E69B E9DD91EADF90EBE091EDE293F1E697EDE092F4E69DF0E199F3E59CF8E79FF6E69EF7E9A0F5E59D F7E79FF9EBA2F2E19BEDDD97F5E7A0EFE094F2E395F4E799F8E99EF7E79CF3E59AF7E99CF8E89D EFE194EEE091F1E194F4E595E8D988F3E493F2E293F2E597F2E296F4E69CF7E9A0FAEBA5F3E59F ECDF9BEDDF9BF4EB9FF5EC9FF5ECA2FFF5AEFFF8B2F4EAA4F5EBA4ECE399E7DE91EDE495F4EB9B F3EA9DFAF2AAFBF2B0F5EAACF5E6ABF3E3A6E8D996EDDF94E9DD93DCD28E594F26201800CEC48F F7EAA8F0E39DF4E7A1D9CD84ADA155988C3FA99E4EB4A758CDC171C6BA68B8AC5AD0C37BC3B471 C2B36DD6C57EE1CF84EDDB90F6E49AE2D28AEBDE97E6DB99EDE3A6EAE4A58C88404F4D0DAAA665 FAF4B8BAB47B746B30D8D091F0E7A5DCD38ED6CD88ADA45FEAE39AE9E293B0AB60B6AD69EEE5A2 E7DE9AF0E7A5A59B5B312900D4CC8CDAD38EB1AB5FD9D084C7B971E5D98ADED580D4CE78E6DF8F 88803BB2A96EF3E8B2E7DBA2C3B779E8DB96E3D48FEEE19DEADE9BB7AD6F6F662D4A440E2D2702 888250C0B983FEF5B6EEE69FF1E9A0F0E8A1DBD28EABA35B7A72298D853AE0D88DDED68DF8EEAB F2E7A8BBAF747F723D473C05948D50DFDA9ADFD998D7CF8CD8D18AE1D991F1E9A1C8BE76635912 6F651EADA15BD0C686D9D095ABA26E574C188E834DC6BA87584D16C2B979E2D993FEF5B47D743D A09757F8E78FD7C972EDE29BD6CB946E6431DED699E7E08FE2DC7BE5E17EE7E296B6B381231D00 756D3FF3EDA1DAD67DF0EA98DED1A3372705C7B987EAE194F0E889F2E98CE1D296BEB18C524B24 7D752EFCF1A4EEE097ECE28FE8DF96E8DFA6756C456B6321F7EF9EF2E599F3EA90F4EB8CF3E98F F1E792F7EB9AFFF6ABF8EBA4F2E69EF7EBA3FAEEA6F7EBA0F9F0A3FEF5ABFDF3ABF4EAA3F7ECA8 FFF4B2FCF1B2F7ECACF9EEAEFAEFADFAF0AAF9EFA7F9EFAAFBF2B3FDF3B5FFF6B6FEF5B4FDF4B3 FAF1ADFAF2AAFAF2A9F7EFA6FAF2A7FDF7A8FEF6A9F8EFA2F1E89DF7EDA4FEF4AEFFF5B1FEF3B1 FCF1B1FEF3B1F8EDABF2E8A5FCF2ACFFFAB5FEF5B0FAF0ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFCFEFEF6F9FAEBEFEFCCE4E4A9DFDF9CE6E6B3F5F5E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFFEEDDF8E2BEEAE1AE E8E9BAF6F6E5FCF9F0FFFAF4FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF8FAEBFAECD5FCDFBFEDDDAA E8E7B7F6F6E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFFEFF7F7D2EAEAB5EBE9B3FCF7D2FCF9E2FAFAEFFEFEFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F7FAE3D6F1C99ADEB240EBD28BFDFAF2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFFEBF0DC95E1B445EBBD78F9DBC9FEF3EFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D989EDE291E8DD8DDED383E0D484 EEE393E3D888E2D786E0D585DDD282E1D686E5DA8AE3D887E2D884DDD37EDFD57DE1D780DBD17B E5DA88ECE191E1D589E0D48AE0D68BDAD284DED588DFD689D4CB7CD2CA7AD3CB7BD2CA78E0D885 DED682E1DA85E5DD8BE2D990F0E6A0F2E99FF7EEA0EFE795F2EA95EEE690EDE68EF7EF98F1E996 E9E18FF3EB99EDE592EBE391F4EC9CEAE194E8DF94F6EEA3EAE195EAE094EADF91F3E998F1E796 DED583E8E08FEFE796EEE695EAE291EBE392E7E08FEAE291EBE492EAE391F0E896F3EA9AF7EA9C F8EA9CF2E394E8D987E8DB87F7E993E8D982EFE18CE9DB88EBDB8DF4E597F3E499EEDE95F0E196 EDDE92F2E498F8EA9EF1E597F1E59AFBF1A7F4EAA3F0E5A1F6EBABF8ECACF5E8A8F5E9A5F0E49D EDE398EFE498F2E79AF3E89BEEE398EEE49AF1E79FF0E6A1F0E6A6F5ECADF3E9A7EDE39EEFE59D EEE69AF5E99DF3E79BF1E59AF1E29BF2E39EF3E4A1EADC98EEE19BF9EDA5EFE299EFE398EBE091 EBDF90F5E99CECE093EDE096F7EAA0F2E698F4E994EFE48FF8ED9AEEE393FCEFA3F6EA9FF6EA9F EADC93F2E69AC6BB6DE1D489F8EC9DECE18FEBDF8DF1E594F1E696F4E898F3E999F3E79AF6EA9F F3E79CECE095F2E69AF3EB99F4EC9CF2E9A0F3E8A8FAEEB1F9EDB0E7DD98FAF0A7F8EFA2F4EBA0 FCF3A9F9EEA7FEF1AAF6E89EFAEE9FF3E997ECE292F8EDA2E8DE9BF4EAAFAFA66F1D1500B4AD78 EEE7ACEFE29EE2D590B4A7629E914BCFC17BCABC75E0D18AECDA93EEDD95F1E097EEDD94EADB94 E9DA94EEE09AEBDD97DECE88D6C680D3C37DDCCE88F0E19CF4E6A2E9DA98EFE39BE8DF88A39C49 4B4100B6AA76FFF4C7AB9F6F8C8149F3EBA8E2DC95E2DC96A39B5CC7BF7BF2EB98E6DD93A0954E EEE49AEEE38FEDE28EEEE49A403408594E26F3EBB5B4B069E3DA90C9BB72E7DA8CE6DB87E2DB81 DAD47779731ADDD685DBD48DDDD497B5AA76E7DEAEE0D9A5A7A26D5B562159521D6D662D9E9555 D6CE84E3DA8CEEE293EBDE91E8D890DBCF8DACA16493894DA59C5ACDC57CE9E095F7EDA0ECE197 BBAE6C695A224E3C0C97845CE7D7A4F3E7A1E2D990E9E097E4DC93E4DC93DDD48EA79E59746C2A 89803FD3CB8BE1D999BCB975B4B2754C451D847B49AA9F68B5A778665A21F2E89EEAE28EFBF0B6 665A2D918753EBE2A0E3DB91EAE295ECE09D776931EFDFA8EEE098F1E788EBE680EAE294D6CBA8 3223048F833DF7E9A4E1D390F8EEA5DCCCA03C2E00CAC173E2D896EFE79AEBE58BE4DC93D4C79F 382B0FA09851FAF0A3DCD088F2E39FECDCA1EFE0AE7063387C7530B2AD64C1BB81FBF49FF3E987 F6EB90F7ED99FCF0A4F2E49FF8EDACF9EEAEFAF0ADF8EEA7F7EEA5F8EFA5FAF1ACF2E9A5F3EAA6 FAF1AFF9F1ADF4EBA7F8EFAAF2EAA3F3EBA4F9F2A9F8F0A7F5EDA6F8EFAEF9F0AFF7EDADFAF0B2 FAF0B2FBF2B2F9F0AEF3EAA6F9F1A8FEF6ABF9F2A4FBF4A4F5EE9DF5EE9DF9F2A1F4ED9EF3EBA0 FAF2A9FAF2AAFBF2ADFDF5B0FDF4B0F8EFADFFF4B2FEF3B1FDF1B0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFF0F9FAD5DEE298E2E59EF2F3C1F8F8DBF9F9EAFCFCF8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFBF6FEF8EF F9F7E8F0F0D2E6E4B0F1E2B7FFE7CDFFF8F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F9EBDDE29CE6DAA4F9DCCA FBEAE0F9F7EBFDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFDFDF4F9F8EAFAEFD7FCE4BEEFE2B1E7E7B7F9F9ED FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF6EBEDD6A4DDBE67D2C659E5E1A2FDFCF5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF1E1B1DFBB5EDDB457E8CB8FF7ECD7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E695E5DA89E1D684E2D786 D8CD7CDFD482E2D785E4D988DDD280D9CE7DE2D786E7DC8CDDD280E4DB85E9DF88E4DA81E0D67D DED57DE2D786E8DD8DECE094E5D98FE1D78BE0D78AE0D78ADCD384D0C778CCC374D5CD7CD9D180 E3DB87D7CF7CDCD481E9E08FE2D98FEBE199E9E094F0E798EDE593F4EC97F0E893F3EB95F1E995 F0E896F0E898EFE697F6EF9DF6EE9EF4EB9CECE397EBE299F2E8A0F1E89DEDE499F1E89AE9E190 EFE796F0E897F3EA9BF6ED9EF2E99AECE494EDE494EEE596EFE797ECE494EAE192F0E797F2E898 F5E79CF8E89BF2E393E7D887E4D581E8D984F2E38DF0E18DEEDF8CEBDB8EEBDB8FF2E297F7E59E EEDD94E9D98EF1E497F6E99CEEE095F6EAA0FAF0A8F6ECA7F4E9A8F6EBADF5EAAAF3E9A6EEE49E EBE199ECE397F0E79AEDE495E7DE8FEDE497F2E89FF6ECA5FBF1ACF5EAABF4EAACF2E9A8ECE39F EEE69DEFE59CF1E599F6EA9EF5EA9FEEDF9AEDDE99F5E5A3F6E9A5F5E8A3FAEEA6EEE29AEEE296 E9DE90E6DB8BF3E898F1E697F2E69AF4E89EEEE295F1E792F3E995F8ED9DF5EA9CFFF4A9F7EBA3 FBEFA7F1E59BF5E99EEBDF93F4E99AF1E696E8DD8CE4D989F4E99AF9EE9FEDE293ECE094EEE295 F2E69BF4E89EEFE399F0E498F5EC9BF6EE9DF2E8A1F3E8A9F7EBAFF4E9ACE4DA95F0E79EEEE598 ECE399F4EAA3F5E8A2FFF0ABF8EAA0FBEE9FF5EB95EEE693F7EEA3E9DF9DF2E9B03A3001686134 F8F3BBF1EAABC1B670958B43B8AD66E7DD94E0D48BF7EBA1F9EBA1F0E198F2E399FCEB9FF3E397 F1E297F4E89EFCEFA6F1E49BE0D48AE4D88FE1D389D5C77DD2C47AE8DA90F9EAA1F4E798CFC669 F1E890B3A8614B3E09C5B889FCF0BF877C43B1A966F4EDA5F7F0A9C2BA789B9450E9E290E4DA91 9F954ED6CA7FEBE087E7DB84FCF2A8877948261A07D8D09ECCC983C8C273CFC375FAEF9FE7DC8B F5EC9CCAC2736F671BD8D188DFD795F3ECAEA49D62A19B645C572058541D88824DD7D19BE2D99F F0E6A4ECE398F2E997EBDF8CCBBF71AA9B559B8B4ABCB26FE3DA98E6DD9BEAE0A2E2D69AB3A76E 64551C74652A8A7C40D7C788FBECABE4D691F3E69DE6DD92E5DC92EFE59DA19951675E188D8441 D7CF8EF6EEAED5CD8EB0A869A09E5D6565296E6737918759F4EAB7635523B5A96AECE298DED487 FAF0B362562B8A8055FDF5BBECE59ED9D186D9CB8687783EE9D8A1F0E29CEEE486F6F18CDFD68A BAAD8B261701B4A757F2E39EEFDFA0F0E39DD3C295473801DAD27FF1E8A6EBE39AEEE891E5DE91 CBC0932F2207C4BC70F6ED9DEDE199EEDF9BF2E2A8EBDAA8564A209E985497954C6C6631EEE79B F0E58CE1D684F8EC9FFCF1A8FBEEAAFBF0AFFBF0AFF5EBA7EFE59EF2E99FFCF2A9F7EEACF8EFAD FBF2AFFFF6B3FEF7B3FDF6B1F9F0ABFCF4ACF9F2A9F6EEA6F8F0A7F9F1AAFBF2AFFEF5B4FBF1B1 FCF3B2FAF0B2F8EEAFF9F0AEFBF2AEFCF4ACFBF3A8F6EFA3F6EF9FF7F0A0FDF6A7FCF4A7F6EEA2 FCF4ABFDF4AEFBF2ACFAF1AEFBF2B3FDF3B4FBF2B1F8EFACFBF1AEFDF4B1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFAF6FFF3E4FFF1D6FBEFC7E6E6ABEBEDBCFAFADFFFFFF5FFFFFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFEFEFEFCF7F8E9EDEBC5F5E2BAFDDEBBF4EBCBF6F5E3FDFDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFEF1F7F7E0EEEECBE3E6ACECE5BE FBEAE1FFF5F6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF7EEFDEBD4F3E9BFEBEBB5 EFEFCAF6F6E4FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EBEBEB EBEBEBFAFAFAF0F0F0E7E7E7F8F8F8F5F5F4E8E8E8E9EBEEEDE6D5E3C781D9B64ED3CE85E0E0BC EFEFEBF1F1F2F1F1F1F1F1F1F1F1F1F1F1F1F1F1F0EEEEEEE5E6E6E5D6BEE7C58CE0B455E4C16A F4E7C5F7F9FDE6E6E6F1F1F1FAFAFAE9E9E9EDEDEDF8F8F8F1F1F1E8E8E8F4F4F4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF6F6F6F1F1F1F1F1F1F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEADF8DE4D987E1D684 E3D886DFD482D5CA78DACF7DE2D785DED381D9CE7CDDD280DCD181D7CC7AE1D684E7DD86E3D982 E1D77EE6DC86E6DB8AE4DA8AEDE194E6DA90DBD185DDD487DED588DAD182D4CB7CD1C879E0D887 DED684E2DA87D9D17EDFD784EAE290E1D88BE8DF94E6DD8EEFE795EBE38FEFE792F2EA95F8F09D EDE594EFE796F8EFA1EEE598F7EE9EFBF2A3F5EC9FF4EBA0F8EEA6F7EDA5F4EAA2F3E9A1F1E99D EDE495F4EB9CF0E897EFE697F1E89AEDE495E9E091ECE394EFE697F0E798ECE394E8DF91EEE596 F1E899EFE296EBDB8EE1D183DECF7EE5D783F0E18DF5E691F0E28DF4E594EDDE90E3D385EBDC90 F6E59DF1E096F1E196F4E899F6E99BF3E697FAEEA3F9EEA6F8EEA7F7ECA9F5EAABF2E8A6F2E8A1 F3EAA1F8F0A4F4EB9FEEE598EBE293EEE597F5ECA2F7EDA6F6ECA7F9EDACF6ECABF6EDACF4EBA7 EEE5A1EFE79EF1E79EF5EA9EF8ECA1F7EBA1F3E59DF1E29EF7E8A5FAEDA9F5E8A3F9ECA5F0E49C F3E79BEFE495EBE090F4E999F4E99AF6EA9EF8ECA1F2E69AF1E696F8ED9EF6EB9DF8ECA2FCF0A8 F3E79FF9ECA5FCF0A8F6EA9FE9DC91EDE293F0E596EFE494F4E99BF6EB9CEEE296EEE296F1E599 EFE399F5E99FFBEFA5F8ECA2F5E9A0F3EB9AF5EC9EF3E9A3F6EBADFDF1B5FCF0B2E8DE98EFE59C EDE497EDE499F5EBA3F5EBA6FAEBA8F6E7A0F7E99CF2E795EEE595F4ECA1F4EBABBDB479171000 ADA66DE3DEA5CDC886928A40DDD489F0E79CEDE497F0E79AD2C67AC6BB6CB4A959AC9F51AB9E4F A09344A29647AFA759D2C97BECE094EAE090E5DA8AECE091F1E595E5D889DED182E9DC8CEFE08C CBC064E2D981FEFDB8BBAE736D612EDFD39FDAD09488803DE8E199EDE69EF3ECAA938C45E5DE8D F9EFA7BBB16CC8BC72EDE18BE2D780F5EAA1BBAD7C221600B7AE7ED2D089C0BC6AC3BC66E7DF8F E6DC93EEE5A1AEA469968D54F6EDB5DDD69A8A8546342F0055500A8F894ACFC98DECE4ABEBE2AA E6DDA1EAE19EF3EB9FC7BF6FA2994AA99D54CFC280F4E6A8F3EAA2E1D994E7DD9FD4C993847646 4133069D8C5AECDDA3F8EBA5F2E595F5EA90E9DD88EEE297F0E79CE0D78D948A42716921B3AB65 F1E8A5F0E8A7E6DE9EB6AE6F9E97588884495A5820ABA66BC2B78BACA0774E4212E4DA92E3D992 DCD18FFDF4AF6B602C8D815AE8DFA5E0D992CEC77CB4A6617E6F35F6E5ADE6D88FE7DD82E5DF80 D7CE84877A54150703DFD282EDDE99EDDE9EEFE29DC2B1824A3C0EECE493E3DA97ECE49CF5EF9A C0B86EB1A577322601ECE494F5EB99FAEEA6E7D894F2E3A7DFD29D4B400DDAD48BD8D48C484210 B7AE6EFFFCB3F0E49CF2E69FFBEEA9F1E49FFAF0A9FAF1A9F9EFA8F6ECA4F7EDA5F9EFA8FEF5B2 FFF7B4FEF5B2FBF2AFFEF4B0FFFAB5FDF4AFFDF5AEFCF4ACFBF3ABF9F1A8F7EFA7F4EBA8FAF1AE FAF1B0FDF4B2FAF0B2FAF1B0FDF4B2F8EFA9F1E9A1F1E99EF9F2A3FFF8ACFEF6ABFBF3AAF6EDA6 F6EEA6FCF3B0FFF6B3FBF2B2F9EFB1FBF1B4FCF2B6FDF3B6F6EDAAF7EFABF9F2AEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFE FDFCF8FDF2E4FFE2C4FFE1BFFEE5C6FAF3E0FBFBF0FEFEF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFCFBF9F0FDEBD4FBDFB8E9E0A7ECEBC2F8F8EAFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFAFFFDEFFAFAD8EEEEBDE6E6B3F3F4DD FBF9F0FEFBFAFFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFFBF4FCFAE2 F6F6CDE7E7AFECECC5F8F9EAFEFFFBFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 D6D6D6D6D6D6F5F5F5E0E0E0CDCDCDF1F1F1E9E9E9D0D0CFD0D1D3DDD5BCDDBC68DBB249DBD4B5 DEDFD7E2E2E1E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2DDDDDDC9CACADACDCAF2D3BFE9BA66 E4BB57F1E1B5EBEDEECDCDCCE2E2E2F6F6F6D2D2D2D9D9D9F1F1F1E3E3E3D0D0D0E9E9E9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBEBEBEBDEDEDEDDDDDDECECECFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9CE7CE4D887 E0D583D7CB7ADFD482DBD07ED9CE7CE2D785E5DA88DFD482DBD07ED6CB79DBD07EE0D582DFD57F E1D780E7DD87ECE28DEEE391E7DC8DE9DE8FE7DB90DBD184DBD285DED589DED586E0D788E1D889 E7DF8EDDD584DED683DDD582E5DD8AE5DD8BE0D888E9E191E9E190F2EA98E8E08CE4DC87EBE390 F6EF9DECE393ECE395F6EDA0EDE498EFE698F1E89BEEE599EFE69DF2E8A1F0E69FEDE39BF3E9A1 E9DF95F0E799F6ED9FE6DD8FF0E79AF2E99CEFE699EEE598F4EB9EEEE598ECE396EBE295E9E093 EEE598EFE599F7EB9DF2E597EADD8FE9DD8BEBDF8CEBE08CEFE38FEDE18EF4E896F3E697ECDF91 F1E596EBDB90F2E297F7E79BF2E597F0E395F4E799EBDF94EEE49BF4EAA4F5EAA7F5EAABF8EDAB F8EFA4F3EA9EF8EFA1F6ED9FF1E89BF2E99DF5ECA2FBF0A9FAF0ABF6EBA9F5EAA9F4EBAAF8EFAD F6EDA9F0E7A1F1E9A1F2E9A0F5E99FF2E69CEFE399F2E49DF4E69FF2E39EFDF0ACF5E8A4F8ECA4 F0E49CF3E79BEDE293F1E696F0E596EEE394F2E69AF6EA9FF5E99FECE096F2E69DF5E8A0FBEEA8 F5E8A3F9EDA8F3E7A1EFE39BF2E69BEFE497E8DD8DF3E899EDE294EADE92F1E59AF3E79DF3E79D F2E79DF0E49CF5E9A1FCF0A8F9ECA6F8EBA4F5EC9FF6ED9FF3E9A3F5EAACFBEFB2F8EDADF2E8A2 F5ECA0F5EC9EF6EDA2F9EFA8FAEFAEF5E6A6F4E6A1F3E69CF0E595EFE697F2EAA1F8F0AF655D26 2C2507DAD69FD9D49B7A7533D2CF83F4EDA0DCD5889D96488881339F9647C3BB6BC6BE6DC9BF6F D1C674D5CA79D1C97ABCB568ABA454AFA657BFB666D6CA7AEBDF8CF1E591EBDC88E2D380DFD07B D5C66FC6BB5FE3DA82E2D98DF3E8AA9D9159897F47F3EAACA69F5AACA55DFCF5AEE5DE98ABA45C D5D080FAF1ABCDC380B6AA60F2E892EDE38BEBE197DACD9C2A1E00918962E4E29FB9B765CDC873 D4CE80CCC482EAE1A9B0A779B8B084958D5E3E380D353203919044D7D685FAF3AAFBF2B0EEE7A9 F8EEB2F2E8ACDCD3929D954DADA559C6BF73EAE09AF9EEB0E8DDA3F5ECACD3CA8B8C81485F541E 998B59E9DDA7F1E2A9F0E3A0EFE395EEE38BE9DE7EE8DE83EFE4999B92476F661CA0964ED6CE86 FBF2ADF3EAA7CBC382B4AC6CDBD394918A4C6A6631CBCA939D9957E6DBAD2519028E8348ECE395 EAE09BEDE0A9F9F1A962581E7F744DB4AC6FB1AA63C9C279B6A96587783CF1E1A5EFE199E7DD86 CBC36BD9D088645930463911F5E99BE8D994E2D492F7E9A7A2925F4C3D0EE3DA8DD7CE89F1E99F E4DD8DAAA25B988C5A4C4012F6EE99EFE691F9ECA2E6DB93FDF1B2ACA068534919DFD98EE1DD95 61592D7C703EDFD39BF3E8AEF6EBACE6DC99F4EAA3F4EBA1F7EDA3FDF3AAFFF6AFFDF3ABF7EDA6 F7EEACF7EEACF4EBA8F1E8A5F7EEAAFFF5B0F0E7A2EEE69FF6EEA6FFF7AFFEF6ADF8F0A7FCF4AC FEF6AFFCF3AFFCF3AFF8EFADF4EBA9F8EFACFAF1AAF4ECA3F1E99EF4EDA0F7EFA6F7EFA7F9F1A9 FCF4AFFDF5B3F5ECAAFEF5B4FCF2B5FAF0B3FCF2B5FDF3B8FCF3B6FAF4B0F7F2ACF4EFABFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBF3F1EFD1F0E3B8FDDCB6FFE4C9FFF1E3FFFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFFDEFD9F3EEC0EDECBAECECC2F5F5E1FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF6FEF0DFF7EAC5ECEAB4ECECBFF1F1D5 FDFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFF8FDFDEBF2F2D5E9EABCE4E7AEF2F3CAFFFFEDFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F8F8F8E9E9E9E9E9E9FAFAFAEDEDEDE2E2E2F7F7F7F2F2F3E2E2E0DADDCCDAD4A4DABE67DFBB61 ECE5D5EFEEEFEEEEEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEBEBEBDFE0E0EBE5E7F9E8E2 EBC783E0BD5DE5D899E7E9D1E0E0DBEEEEEEFAFAFAE5E5E5E9E9E9F7F7F7EFEFEFE4E4E4F2F2F2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE8E8E8D3D3D3C6C6C6DEDEDEFAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D783 E5DA86E2D783DFD580E4DA86DBD17CD7CD78DBD17CDBD17CD9CF7BDCD27DDED47FE0D681E0D681 D9CF7ADDD37EE7DD88E5DA87E2D787E6DB8CE6DB8CE5DA8BDED587E0D78AE1D88BDDD485DFD687 DFD687DCD483D4CC7BDAD27FD9D17EDDD582DCD481CFC774DAD27FDFD783EEE691E8E08CE5DD89 ECE493FBF2A2F8EFA2F3EA9EF9F0A7FCF3A8F7EEA0F1E89CF5ECA2F3E9A1EFE59FF2E8A2EAE099 F5EBA4EFE69DEEE599F7EEA1F1E89CF8EFA4F5ECA1EFE69BEDE499F2E99EEEE59AEEE59AEEE59A ECE397EEE59AEBE397EDE093EADD8FEBDE8FF0E394F0E492E6DA88F6EA97F1E593EBDE8FEFE293 F5E89AF3E798EEDE93F0E094F4E497EEE293E9DC8DEEE193F5E99DF6ECA3F9EFA8EEE4A0E9DE9E F0E6A0F0E79AE4DB8CECE394ECE394EEE598F4EB9FF4EAA2F5EBA4F6ECA8F5EAAAF3E8A9F2E9A7 F6EDA8F5ECA7EFE69FF0E8A0F2E8A0EDE197EBDF95EBDF95EDDF96F0E299F2E39CF9ECA6F2E5A0 F5E9A1F0E49CF2E69AEADF90F4E999EDE293ECE192EFE297F1E59AF1E59DF7EAA4F3E69FFAEDA9 FBF0ADEEE19FFFF5B1F8EDA8F7EBA3F1E59AFEF6A8F1E696F4E99BEDE196E3D78DEFE39AF8ECA4 F3E79FF2E59EF3E6A0F9ECA6FBEEAAF7EAA6FCEFAAF7EEA1F7EEA1F4EAA3F4E9A9F8EDAFF5E9A9 F7EDA6F6EDA2F9F0A2FAF1A6F8EDA9F7ECACF7E8ABF8EAA8F6EAA1F4E99BF4EC9FF7EFA7FBF3B4 4942175C5521E1DCA58B884ECDC888FAF6AEA9A55A7F7A30A7A157D8D287EFE89CF5EDA1F4EC9E E7DE90DFD688DAD184F1EA9FEDE99FE3DD93DAD287C6BD72B5AC5EC0B566D8CA7BE9D989DACA79 D2C16EE3D37FE3D87EDAD179F5EC9EDFD590E2D7996F6528C0B678E0D99579722CE5DE96E5DE96 DFD98FACA658F7EEA9F1E8A6B8AF66EDE38CE3DA82E3DA90F9EDBB53482B746D47ECEBAAAAA75D C5C176BBB672E1DBA0FDF7C2777142322B034640106E6934C0BC7CFAF7AFECEA9BECE597FBF2A9 F0E6A3C3B87A9C9152938A47E2DA92F3ECA2E6DF97E6DF9BF5ECB1E6DCA78E824F6459249B9157 E7DE9CF3EAA2EFE699EBDF90E2D786E6DA8BECDF90EDE191D8CA7E786C22867D32D3CA80E6DC94 E4DC94F2EAA4ABA25FA29A59EFE7A7817939686022E0DCA785834FC2BE7D6C632E3C3206E1D691 EEE698E6DC98E5D9A1E7DE99574E11A09667D3CB8BC5BD76C9C17BAA9C5A948446EDDD9BECDF96 ECE08FDFD686D7CD8A2A1E0F776B39FAEDA0E6D88FE5D695FEF1B172622E6F6126EAE098DFD78F EEE69DCBC377C3BA757C703A90834DF4EE93ECE48DEBE196EEE49DF6EBAA5F5518817740F7F1A3 FCFBB4A79D74413410685A32B3A778FEF3BDF4EAAAF9F0A9EFE699F7EEA0F8EFA3F4EAA0F4EAA2 FAF0ABF8EFACF8EFADF7EEABF7EEABFAF1ACFBF2ADECE39EEFE79FF5EDA5FDF5ADFDF5ACF7EFA6 F6ECA5FBF2AAFCF2ABFFF8B3FFFAB5F8F0ABF6ECA7FDF3ACFDF4ACF9F0A5F5EC9FEFE79EF6EEA5 FBF3ABFEF6AFFFF7B3F6EDA9FCF3B1FCF3B3FCF3B3FEF4B6FEF4B7FBF2B3FAF6AFF8F6AEF6F3AE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FBFCF5F3F4D9EAE9B8ECE2ACFCE4C4FFF1E2FFFDFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFDF8FEFEE8F4F4CBE9E9B2ECECC4 F8F8E9FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFCF8FFF1E2FEE3C5F4DEB0E8E5B3F2F2D8 FEFEFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFDFFFEFDEFF0CFDFE29DE7EAA9F7F8D2FDFDECFFFFFCFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBF3F3F3F2F2F2FDFDFDFDFDFDFCFCFCFEFEFEFEFEFFFAFAF5EBE7BFDECF81E0C46F E9CC8AF9F3E6FDFDFCFDFDFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFDFDFE FCF8F1EAD7A1DCC46DDDCE80E6E3B1F8F7EFFDFDFEFEFEFFFCFCFCFDFDFDFEFEFEFAFAFAF7F7F7 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EFEFEFE7E7E7DCDCDCCBCBCBE0E0E0FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E5DB86DBD17CDDD37EE8DE89E5DB86DED47FDCD27DDBD17CD5CB76D8CE79E3D984E3D983DED47F DCD27DD7CD78D6CC78E0D583DBD07ED4C979E0D585E1D687DDD283DED487E3DA8DDFD689D5CC7D D5CC7DD3CA7BCEC675CFC776D7CF7CD4CC79D4CC79D6CE7BDFD782E4DC87E8E08BECE490E3DB87 E0D887EAE292F9F0A3FBF2A5F2E99FF6ECA3FFF6ABF8EFA1EFE69AF8EFA4F5EBA3F1E7A1F6ECA6 E6DC95F1E7A0F1E79EE4DB8FEFE699F9F0A4F8EFA4F2E99EE8DF94E0D78CE4DB90ECE398F0E79C F1E89DEFE69BEDE499E7DE92F5EA9BEFE294E8DB8CEBDE8FEBDE8FE5D887FFF4A5F5E89AE2D586 E4D788F0E395E7DA8CFBEB9FF0E093F2E295EFE293EADD8EEADE8EF7EB9DFAF1A5FDF3ABF3EAA3 F1E6A3F7EDA6EBE292E9E190F3EB9BF5EB9CF1E89BF4EBA1F3E9A2F1E7A2F3E8A6F4E9A8EEE3A5 EEE5A1F4EBA5F2E9A4EDE59EEEE69EEEE49CE6DB91EDE197EEE399EDDF96EDDF95F6E89FF0E39D EBDE99F2E59EEFE39BF3E79BEEE394F4E999EFE495F1E697F3E79BF1E59AF2E69EFCEFAAF0E39F F6E9A5F4E6A5DFD190F3E5A4F6E8A3FEF8B2E9DD92F2E799E8DD8DEEE395F6EAA0F5E99FF2E69E EDE199F1E59DF0E39DEFE29CF3E6A0F2E5A1EDE09CF6E9A4F5ECA0F5ECA0F5EBA5F8EDADFEF3B4 FCF2AEF6ECA4F3EB9CF6ED9FF9F0A5F5EAA6F1E6A8FBECB1FCEEADF8EEA6F7EFA1F8F0A6F7F0AA E1DC9D3E370C756F3BC1BC87A6A46CF3F1B47A7433827D3BE1DE99F0ECA6F6EFABDAD38CECE49D E8E099E5DC95E9DF98E8DE97EAE39DE6E19CE7E09BEBE29EE8E098E0D690CDC178C5B96ED0C175 DFCF83E6D689ECDC8EE9DD88E3DA84D7CE7EF7EDA5EAE09CD4CB8A7A7130EAE3A097904AB6AF69 FFF9AFDED88CB0AA5FF5EDABF7EEADB4AB63EFE58FEFE990E3DB92EFE5B45C533B433B19DCDB9D 999756D1CB91E7E2A8C1BC846B6733221D00706B38CDC88EE5E1A3F3EFB0D8D591E0DC96FEF8AC D5C97D8C823D877C3CC6BB7EEEE4A5EDE49FEEE79EECE59DF2EAA9AFA76D3F35006C602FDED39C FCF2B2E2DB8FE7DF8BEAE388E9DF85DDD37DF0E496E7D995A19153716221BFB36AFFFAAFF4EBA1 F7EDA5D8D088A9A15BCCC380F7EFAE7A72324C440BD1CA8BB5B17B8D8B5AD4CF9617100489803F E0D590E7DD95E7DD97F1E5A7E3D99C342A007E7444B5AE6BCBC47CD3CA87A09252AA9B59F8E9A3 EDDF95E4D78CE6DC95C1B678140900BAAE76F4E79AE3D58DEDDE9CFDEFB24F410A988A4DFFF7B2 E6DE95E4DC93C4BC74DFD6945C5118CDC183F5EE90EFE890E2D891F4EBA5BEB572463C00D5CE8E F3ED9DEEE89E988F674E4024382B0E564923C3B785FBF5BAF2EDA8EFE69BFAF1A2F2E99CE4DB90 ECE29CFDF4AFF8EFAEFAF1AFFAF1AEF8EFACF3EAA6F0E7A2FAF1ACFCF4ACFDF5ADF9F1A9F7EFA7 F8F0A6FBF1A6FBF1A6F9EEA6FCF1A9FDF2ADFAEFAAFAF0A9FBF0A9FAF0A6FAF1A6FAF1A4F8F0A4 FEF6AAFCF4A8F4ECA2F8F0A7FDF5ACFCF3ADFCF3ADFDF4AEFEF6B2FDF4B0F9F2ACF6F2A9F7F5AD FCF9B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FCFCF7F0EFD0EBEABBF0F0C0F8F4D0FEF5E6FFFAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9FBFBE5F5F5CB ECECB9EBEBC1F6F6E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF9FEEFDEFEE4C7FEDFBDFAE4C4F6F2DD FAFAF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9EDF0F2D2E9EAB7EBECB7F7F7D2FFFFEEFFFFFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4DEDEDEDDDDDDFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFEFBF4EDDA9DE1BD57 EBC779F7DDB6FEF8F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCF6EBE6BADDCF81DCC671E6D494FCF8EDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3 ECECECF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE7E7E7D6D6D6E5E5E5F2F2F2EAEAEAF2F2F2FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDDD37EDAD07BDED47FE2D884E3D984E2D883DCD27DDFD580D6CC77D2C873DFD57FE4DA83 DBD17DE0D681E3D886D6CB7ADACF7FE6DB8BE6DB8BE2D787DDD282DACF7FDBD283DAD184D5CC7F CCC375D1C879D7CE80D1C978DDD584D3CB78E1D986D7CF7CE2DA86D3CB76D0C972E7DF8ADCD481 D8D07FEAE292EDE496FAF1A4F4EB9EECE397F4EB9EFAF1A5F2E99AF3EA9BF4EB9FF6ECA3F8EEA6 F5EBA4F3E9A2F6ECA5EBE197EEE598F0E799ECE396ECE398E7DE93E5DC91D8CF84DFD68BEEE59A E8DF94ECE398F2E99FE8DF94E9E094F3E99AEEE393EEE393F0E596EBE091EFE495F5E99CEFE495 EADF90F2E797F6EB9BEBDF8FF9E99CF4E497F1E193EEE193EADD8EE4D789F0E596F1E79BF2E8A0 F6ECA6F8EDABF4EAA1F0E795F7EF9EF0E798F3EA9CF3EB9FEFE59DF0E69FF2E8A3F8EDABF4E9A7 F1E6A5ECE39CEAE299EEE69EF1E9A1EFE79FEAE098EBDF97F3E79FF3E79DFAECA1EADC8FF0E397 ECDF99ECDF9BEDE199E7DB93E4D88CEEE394EDE292F2E798F7EC9DF3E79BF2E69BFBEFA7F4E7A1 EEE09BF1E4A0F9EBA9F8EAA9F2E4A1F5E8A3F5E8A1F5E99FECE192ECE191F5E99BF6EAA0F0E49A ECE097EEE29BF2E69EF7EBA4F4E7A1F4E7A1F5E7A3F0E3A0F9ECA7F4EBA1EFE69BF5EBA7FBF0B0 F7EBACF9EFAAF9EFA6F3EB9BF3EA9BFAF1A6FBF0ACF6EBACF9E9AEF7ECA9F8EEA6F6EEA3EDE69B E6DF9ADCD79A2821069E9967A09D6AEEEBB789864D837D41F0EAAEF9F5BADCD597C2BE7F928A4B 7C72336D64246C6222766B2B70662572692A847C3E9D9456C5BC7DF0E7A7F5EBABE4DA98F0E4A2 D1C480B9AB67D5C683E0D18BE0D485DAD17EE9E191E5DC8DE6DD94F3EAA6C2B7799D9455D8D091 8F8842ECE59AEFEA9EB4B166E6DE9FF1E9AAB9B069E6DD89F4ED96EBE39AE6DDAB71684B191300 A1A06694905BC7C0947872422621005F5B27B7B46BE3E097E3E197E4E29BDBD796DED99CDED99D 847B3B796F21BCB26DE9DEA0F4E9ADEFE5A7EEE5A2F4ECA5B2AB626D6625584F14B3AA70E5DB9B EBE39EDFD78CE8E291F3EB96DFD780F8EE99E8DD8EAEA15B7C6C30AF9E68DFD093EADD94F4EBA0 DDD389BAB068B5AD65DDD58FF0E7A4756D2B5A5212DDD595D2CB8D918E56FBF9C95851343A3402 CCC677E6DB95E5DA97EBE19BF4EAA3CFC48F403505C2B97CCCC57ECEC77FCAC180756627DACB88 EDDF95EEE093E9DB95FAF2B4897C4D322800E8DDA1E9DD90E7D98EECDD9ADFD095382A02C5B876 F2E8A6EFE79DD4CB83CAC07FDBD194473A04F1E4A1DED578E8DF8BE2D995EFE6A46E6623726A27 DED793DEDA86EDE79DB3A7804B3F253C3115392E0B564B1BE0DAA2F4EFAEF0E9A0FEF6AAF6EDA1 F6EAA1FFF4ADF9EEA9FAF0AEFCF3B0FBF2AFF8EFACF6EDA9F8EFAAF7EEA9F4ECA4F6EEA6F4ECA4 F4ECA3F9F1A5FAEFA1FCF0A2FBEFA5FBEEA6F9ECA5F5E8A2FBEDA8FFF3ACF9EDA4F7EBA1F7EC9F F5ED9EF8F1A2FBF4A4F8F1A2F5EE9FF7F0A3FAF3A6FBF4A7FBF3A8F6EEA4F5EDA2F4EEA2F3EFA5 F4F1AAF7F4AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFBF2F4F3DCE9E2B7ECE3B5F9F5D6FFFFF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9 FEFEE8F2F2C4E8E8B0EEEEC9F7F7E8FDFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFBFEF2EEF8E2C1F7DDB3FCE4C4FFF1E2 FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF1F1D7E9E9B7EFEFBDF8F8D5FEFEF8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3F3DADADAD9D9D9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFEFDFAEAECCE81 E3B13EF3CD8AFFEFE0FFFBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFAF1F3D9E4DC9EDFC268E6C676FBF6E1FFFFFBFFFFFFFFFFFFFFFFFFFDFDFD ECECECE1E1E1F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF4F4F4DFDFDFD3D3D3EAEAEAFFFFFFF8F8F8FAFAFAFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD9CF78D6CC75D8CE77DAD079DAD079E6DC85E4DA83E8DE87DFD57ED6CC75DCD27B E3D981D2C871DAD07CE7DC8ADCD181D9CE7FDDD283E1D687E5DA8ADBD080D9CE7DE3D98ADDD487 D2C97CCDC475D5CC7DDCD384D4CC7BE0D887D3CB78DDD582DCD481D8D07CD6CE79D2CB74D9D17D EAE291E5DD8CF5EC9EE5DC8FF3EA9DF5EC9FF3EA9CF3EA9BF2EA99EDE594FCF3A4FCF3A6F2E99D F4EBA1FCF2A8F6EDA3F1E89DEBE295F2E99AF1E998E8DF90E7DE91E6DD90E2D98CE3DA8DEEE598 F1E89BEDE497EFE699EEE598E4DB8EEAE295F0E596EADF8FEAE090EEE296EDE195EFE397E9DD93 F4E89CF4E89AECE192F0E595F5EA9AF2E295F3E395F6E698F6EA98F3E795EEE290E4D98AE9E092 F0E59EF1E7A1EFE4A3EDE39AEAE18FEBE392F0E798F0E79BF5EBA3F8EEA7F4EAA5F8EEA9F8EEA9 EFE5A1F3E9A4F0E79FEEE69BF0E89FF2EAA1F2EAA1F1E7A0F6EAA2DED28AE9DD93F6E89EEFE294 F0E296F0E39DF2E5A1F7EBA3F2E69EECE094EFE495F4E999F3E899F4E99AF0E498F2E69BFBEFA5 EEE29BECE098ECDF99EFE29EF1E4A0F1E4A0F4E7A2F7EBA3F7EBA0EEE395ECE191F1E598EEE296 EADE92E7DB90E8DC92E9DD93F1E59DF6EAA2F3E79FF3E69FF6E9A3F5E8A2F5EBA1F4EAA2F5EBA6 F2E7A7EFE4A4F6ECA7F9F0A5F5ED9CF5EC9CFAF0A8FCF1B0F9EDB1F4E9ABF9EEABF7EDA5F1E99D ECE69BEDE6A3CEC88E302904928E5FA9A677929060595521F3EBB3E6DDA4867E455F551A473D02 6D62258B7F43998D519A8D50A39558A09356978B4E877D426A5E244A3E045D5115ADA366EFE5A8 F1E7AAFFF9BCE5DA9DAEA266C9BE7FCEC279E3D88AF8EFA0D5CC7DB8AF63EFE6A0F5F2B5867C41 B5AD6F9E9654CCC67BFAF4A8B6B26CE7E0A1EEE6A7B2AA63DCD681EBE48EEDE59CEBE0B279704E 48421DBDBC8584804D251D09231C059F9A60E7E59CE6E392D8D681F2F09DDCD98CFBF4B1CAC187 7066319B914ECDC57BFBF2AFEFE5A8EEE4A9EFE5A9EBE29F827A333830008F873EDCD392FAF1AE EAE58DEAE48BF0EA96E7E093EDE39CFFFABACABB7D6D6022837435C4B574FDF0AEF8E9A4FCEFA6 D4CB80A89E54EADF97F2EAA2E8DF9A5E55124F470BE3DC9CF4ECAD80793AE4E0AAA3A073191200 6E6920CCC86FEBE199DACF8FE6DC95FFF9ADB6A97B2B2008B5AE6CB3AD63CAC37CB6AC6E615315 EEE6A0FDF0A2DCCE82EBDC9CFFFFCA4537167B7344F7EEABE7DB8EE7DA8BEFE09DB3A36C4F4200 F5E8A4EDE2A4EBE398CCC47CEFE5A99A9057716434FAEAA7E3DB7EEBE292F1E7A9B1A86A453D00 CEC985D0C981D9D57DC0BA6F9A8D67382F106B6240534C221D1500938B52FEF6B8F3EAA6F7EDA7 F9EFA7FBEFA7FDF1A9FEF4ADFAEFAEFBF2B0F9F0ADF6EDAAF6EDA8F7EEA9F9F0ABFCF4ADFDF5AD F5EDA5F8F0A7FEF6AAF7EC9AF6EB9BF6EB9DF7EBA1F8ECA4F3E79FF5E9A1FAEEA6F5E9A0F6EA9E F5EA9DF9F0A3FCF5A7FDF6A8F9F2A4F7F0A1F6EFA1FAF3A5FAF3A5F8F1A3F4ED9FF3EC9EF5EFA2 F8F4AAFAF5AFFCF7B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFDF2F1D4E6E2ADF0DCBBFBE5DAFEF6F1FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFF9FEFEE9F7F7CDEAEAB4E7E7B7FAF9EFFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF1EFFBE1D8EADCAEEAE4B5F8F4E0 FFFDFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBF6F6E2EAEABBE8E8B7 FAFAEFFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFF6FCF9D7 ECCE76E2B648F2DBA6FFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFEFFFFF4E8C5E5C163E5BE53FAF3C8FEFFEFFFFFFEFFFFFFFFFFFF FDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFEFEFEFFFFFFF5F5F5E7E7E7E9E9E9F6F6F6FBFBFBF8F8F8E5E5E5EEEEEE FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD9CF78D6CC75D6CC75D6CC75D8CE77E2D881DCD27BDED47DDBD17ADAD079 E1D77FDED47BC6BC65D0C570E7DC8AE5DA8BE7DB8DE1D687D9CE7FE3D889DED383D8CD7BE6DC8D E5DC8FDAD184D7CE80DFD687DFD687D9D080E3DB8AD4CC79D9D17EE0D885D3CB78D9D17CE1D985 E3DB89FAF2A1E9E092F1E89CF1E89CF4EB9EF6ED9EF4EC9BF0E996EDE591EFE794FCF4A2FCF3A4 F0E799EEE597F2E99CF5ECA0F1E89BEAE191EBE392EBE390E9E18EEFE699EBE295E3DA8CE8DF92 F0E799F1E89AEBE295EAE193ECE395EAE194EEE597F3E999EFE494ECE293EFE397EEE398EADE95 EFE49AF6EBA1EBE094DCD182E3D989F1E796EEE192F0E092F0E192F0E592F2E694F3E795E7DC8C E8DE91EEE59AEEE49CECE29DEEE49CE7DE8EE6DD8EF3EA9EECE29AEEE49DF9EFA9F3E9A4F6ECA6 F9EFA7F2E89FEEE59CEEE69BF0E89CF4ECA3F4ECA3F2EAA1F1E7A0F1E59ED7CB83EBDF94E7DA8C E1D485F0E394F0E49CF0E29EF4E8A0F3E79FEFE397F4E99AF0E595F0E596F4E99AF3E79BF4E89D FBEFA4F4E99BF1E599EDE196ECDF97EEE19AF0E39CF2E69EF5E9A1F6EAA0EEE296EDE293F1E697 F1E697F0E497EFE396F0E499F1E59AF4E89DF9EDA5F3E79FF0E49BF9EDA5F0E49DF2E8A0F8EEA6 FAEFACF4E9A9F1E6A3F8EEA7EEE598EDE594F0E797F6ECA4F9EFADF9EDB1F9EEAFF5EBA6F3ECA0 F4ED9FF1EBA0ECE7A4D0CB92322D086F6A40A7A47B454216D7D2A19C935A4B40056F64289E9357 D1C789E2D698F6EAABFFF4B4F9EAABFEEFAFF7E9A9F6E8A9F2E6A6EADC9FD5C98C9A8F52554A15 463C00877E42D7CE92F2EAAEDDD59AB9B175C0B573DACE85FAF1A3E2DA89B9B063F0E7A1FAF0B5 D5CC9670672FC7BF80B2AC63F7F1A6B4B06DE3DCA0ECE3A8B3AB65DBD580F0EA93DFD88FDFD7A7 7A72505A532F7472463E3B193A330EB5AF78C2BE7FE7E299D6D381DCD986DCD683DFD98A9A904B 74692BC8BD82FEF5B1F5EFA9E7DEA1F5EBB3E9DFA7958B543F360050470B9D954AF2E79FE8DE97 D4CA7FE7E286ECE78BDCD683F3EDA7E0D79B8A7C47786735B0A16AF6E8A9E9DB95F3E598E8DB8F B5A85ECEC57AE4DB91F6ECA4EBE59D807731706724EEE6A5F9F1B19F9758BBB375CFCB971D1A00 3E3719928D41D3CF75F2E89BEFE4A0DFD68FEFE59F52461C4F4320BFB874C9C377D2CB8583793C 938448FBEEA4DBCF7CE1D486F7E8ABD3C4942A1D00CDC485EEE69CF0E398DBCE7FF8EAA5766737 90833EF8ECA7F3E7ACDDD688C4BC73F8EDB6554914A1935BF4E5A4E8DF86F7F0A5EEE2AC574F1E 7C7740CBC780CDC67CD1CD73DAD486D5C7A0362E09ACA87D6C663A3931024F471CEEE6ADF9EFB2 F2E8A8F9EFABFAEDA8F4E8A0FCEFA8F7ECABF8EFADF8EFACF6EDAAF8EFABFAF1ACFAF1ACFBF3AC FDF5ADF9F1A9FAF2A9FEF7A9FCF19DF5EA97F2E797F5E99DFDF0A7FAEDA6F9EDA5FBEFA6F8ECA1 FAEEA2FBEEA2FDF3A9FDF5ACFEF6AEFDF5AEFBF3A9FAF2A8FEF6ADFEF5ACFBF3A9F8F0A6F9F1A8 FDF6ADFFF7B0FDF8B2FCF6B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFBF8FFF0E1F7E5C3F0DEAFF8E5CFFEF1EFFFFAFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFF8FCFCE6F4F3CBF1ECBDFCEDD5FFF5EBFFFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFEFF7EED4EEDFBBECE6C0F2F1D7 FBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF5F3F3DA ECECC6EDEDC9F6F6E3FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E6E6E6E5E5E5FBFBFBFFFFFFFFFFFFFFFFFFF9FAE8 EFECBBE2CA70E2BD5EF2E1B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBCEE6C061DFB641ECE4A7F6F6DCFFFFFDFFFFFF FFFFFFFDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF6F6F6F0F0F0FAFAFAF9F9F9F2F2F2F5F5F5FEFEFEFFFFFFF7F7F7E1E1E1 EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD8CE77D5CB74D3C972D5CB74D9CF78D9CF78D9CF78DCD27BDCD27B D6CC76D6CC73DFD67BD2C871DDD37EEBE08FE1D687E4D98BE3D68BD5CA7ADED384E6DB8ADFD480 DCD382DCD386DBD285DCD385E1D889DDD485E3DB8AE6DE8DDBD380DDD582E6DE8BDCD481DED683 E5DD8CE2DA8AEDE496E7DE91F4EBA0FBF2A6F6ED9FF3EA9AEDE691E8E18AE9E289ECE58EF0E893 F2EA98F1E997EFE697EEE596EEE696F3EB9AEFE795ECE491F0E991F1E996EEE596EBE293E9E091 ECE394EEE596F1E899E9E091E4DB8CEDE495F5EC9DF2E99AEBE390E8E08EE5DC8DE9E094ECE298 E3D992E6DC94ECE399E9E093E4DB8DE6DE8DE8DE8CF3E697F0E091E9DA89E5D987EADE8CEFE391 E9DE8EE6DD8FEFE69BF2E7A0F3E9A4FBF1A8EFE698EFE698FBF1A7F1E7A0EFE59FF5EBA6ECE29D EEE49DF8EEA5F6EDA1EEE599E6DE90E9E294F1E99EF1E9A0EFE79EF1E7A0FCEFA9EADE96F1E59A EDE092EADD8CF0E493F3E79FF0E39FF4E7A0F6EAA2F5E99DFBF0A2E8DD8DECE191F4E99AF7EB9F F5E99EF7EB9FF1E794EDE291ECE192F2E699F8ECA3FAEEA6F5E9A1F7EBA2F7EBA1F0E498F1E696 F8ED9EF9EE9EF5EA9AF2E797F1E697F2E699F2E69BF5E99EF3E79DF4E89EFBEFA6F9EDA3F0E59D F8EEA7FCF1AEF8EDADF7EDAAF9EFA9E7DE8FEBE392F1E898F6ECA5F8EEADF8ECB1FDF3B0F1E89F F1EA9BFAF4A4F5F1A5EBE6A4E8E3AD342F0F534E287975506B67417B764850460EB3A868E4DA97 E8DE9AECE09DE9DC98EFE19CEDDF99EADC97F5E5A0F6E6A0E1D18BECDE98F7E9A4F1E29EF1E5A1 EFE5A2CEC5859A9254686324827D3FC7C488F5F1B5D5CA8CC2B671D9CF81FDF5A3EFE799ECE39D EEE5ABF9F0BD9F94619F965AA39C56EAE69CBDB876E0DAA1EDE7ACB3AC68D2CC77DDD780CCC57B FCFBCE7F7754251F03181700727034CFC989CAC584D9D39099924DDCD68DFEF7AFCAC27870681D ABA057E6DA91EFE59AF4EFA8E8E4A4FFFAC1CCC48F423712342A00998D54E1D78DF4EA9BE2D688 EBDE92EEE095D8D081F0E99CFCF4AC958C4D574B12958850D8C890F1E2A5F0E39FF7E99EE9DC8C B6AA5BE6DC91ECE398F7EEA4D9CF876B631BACA45EDED592E7DF9EB7AF6F989051F9F4B6625D33 0B07009B955C8E883FD9D47EEDE591E9DF93EFE6A3F0E8AA1C11009B9155D4CC8AC0BA6ECFC781 70662CD6C78CEDE095F1E58FEFE393FFF0B767582D42341EF0E8A6F6EFA1E4D68CE6D98AECDE9A 4B3A0ED8CC84F6EAA3E7DBA3B6AF5FE7E29AD5CB972C2100D7C992F3E2A3F4E995FEF4AF968B5C 524A16CAC588B9B66EB9B568D6D277DBD386B0A1781D1800B5B47DC0BC893C36043E370AD0C994 FEF3BDF3E8AFF7ECACFBEEA9F9EBA3FFF4AAF6ECA9F7EEACF7EEABF7EEACFCF3AEFEF6B1F6EDA9 F3EBA4F9F1A9FBF3ABF8F1A8F9EFA1F8EC97FCF09CFEF1A1FCEFA1F7E99FF7E9A1FDEFA8FDEFA6 FBEDA2FEF0A5FDF1A3FDF1ACFBF2B2FCF2B3FEF4B5FEF5B5FDF3B2FEF4B4FEF5B2FDF4B1FBF2AF FCF3B1FFF7B5FDF4B1FDF4B0FCF4B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFBFEF8ECFBE2C0FCDEB8FEE2C2FFF2E5FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FEFEE8FEF5D3FFE2BEFFEAD8FFF9F7FFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5FBFBD9EFEEBCE5E4AEF3F3DB FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFBF5F5E0E5E5ADEDEDC8FAFAF0FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0D2D2D2D0D0D0F8F8F8FFFFFFFFFFFFFFFFFF F3F1D6E2DA97DCC46AE4C67AF4E7C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8EDD2E6C56BDAB53FDED486EEECC6FEFEF9 FFFFFFFFFFFFFDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEEEEEEEE2E2E2F5F5F5FEFEFEFEFEFEFEFEFEFFFFFFFEFEFEF7F7F7 E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD17AD7CD76D5CB74DAD079E0D67FD2C871D5CB74D8CE77 DAD079D6CC75D2C86EDCD378D7CD76DBD17DDED382D7CC7DDBCF84E1D58ADED484DBD081E5DA88 DED47FD9CF7FDED588E1D88BDDD486DED586DAD182E8E08FE3DB8ADFD783DED683E4DC89E6DE8B EAE291E7DE8EEAE194E8DF92EEE59BF5EBA3F7EEA2F4EB9DF4EC99EEE691E9E287EEE78CEBE48B ECE58DECE48FEDE592F1E997F3EB9AEEE695F1E998F3EB97F1E992EFE890EDE58FE3DB8AE5DD8C EEE695EBE392EDE594EDE594E6DE8DE3DB8AE9E190F0E897EDE594EAE28FE8E08DE4DB8CE8DF94 EBE298DFD58EDDD38CE5DB92E9E093EAE194EDE594EAE08EEADD8EECDC8CE9DA89E7DB87EFE38F F6EA98EBE090E8DF91F4EBA0F4EAA2F1E7A2F8EEA6F0E79AEFE69BF1E79FECE29CEDE2A0F5EBA7 F3E9A4F0E69FF1E89DECE394EAE291EDE595F0E999F1E99CECE49AEAE299F1E7A0F8EBA5E8DC94 DACE84F7EA9DFDF4A1EDE090F5E9A1F3E6A1F7EBA3FAEEA5F5E99DF6EB9CEBE090EADF8FF0E596 F3E79BF2E69CF6EB9CF9EF98ECE28DE9DF8AF0E595F4E89CF4E89EF5E99FF4E89EF3E79CEDE195 F0E498F7EC9CF3E896EEE391ECE190EDE292F1E696F2E798EFE495EEE297F0E498EFE397F5E99E F1E79EF5EBA5F4E9A6F4E9A9F7ECA9F4EAA1E8DF90EEE794F6ED9DF8EEA6F5EAA9F2E6AAF7EDA9 EFE79CF1EA9AF7F2A1F2EEA2E9E4A2EBE6B16E693F3E3814524E2B393613454010D0C57EFDF1A9 F1E59BF5E99FE1D389ECDE93EBDB90E8D88DEDDD90EEDD91F3E194FDEB9FEBDB8EDBCC7FE6D88C ECE096E2D991EFE6A1EBE4A0D8D3927F7E3D5B5B1BD2D291F3E9ACDBCE8CC9C074D8D07FEBE395 D9D08AE7DCA4E6DAABEEE4B37970378E8741D3CF85CDC987E2DCA4F4EEB3B9B26ECBC570CBC66F CEC87EBAB2831008003B361CC5C493C6C681E6E392A7A153C2BC75C4BC7DB8AE71A5995D796E30 CABE78FFF7A9EADE89F0E58DE5E098F3F2B3A09D643931014E4616D8CC96FFFFBEF5EA9EF3E795 EEE18DEDDD8CE6D890F6E9B5DBCF9D6A5E2751470AB6AC66F4EA9FDDD183F2E898E9DE8FBAAC62 BBAD66FCEFA7E3D78DEEE59ACCC37960550D817931EDE59FD8CF8CEDE5A4898141F4ECADBEB779 130D005E5A33E4DF9F716B25D3CD7EEFE88DECE590F9EEADB5A776231900E6DF9BFFFDC0EAE498 BAB26C7D723AE6D79DCFC277E3D87FFBEE9FDBCB9228190094865AECE4A1F5ED9DE1D489F9ED9C B2A45E645323F2E69BE7DC93B8AC75B5AE5EF8F0A8837648574B18F9E8B4F3E0A4F9ED9DE0D394 4F4417958E5DE5E1A4EFECA5D2CF80D8D476D2CC7C998A5F1F1A00CACC8BFAF9BF696631413A09 A79F71FFF7C6F8ECB7F3E8ABF7EAA5FBEEA4FFF3A8FBF1AEFBF2AFF9F0ADF8EFACFBF2AEFFF6B1 F7EEAAFAF1AAFEF6AEFCF4ACFBF3AAFDF3A4F6EA94FBEF9BFDF1A0F9EC9EF2E499F3E59BFAECA3 F8EAA2F6E89EF9EBA0F7EB9EFCF2B3FEF3BBFDF2BBFFF5BEFFF6BEFCF2B8FAEFB7FCF2B7FDF3B8 FCF2B7FDF3B8FFF5B9FFF4B4FEF3B1FCF1B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFDFFFFF0FAF8D7E9E0A6F0E5BCFDF3E5FFFCF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF8FFF6E5FFDFBDFFDFCBFFE7E7FFF6F8 FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9ECE9E9B4ECECC0F4F5DE FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFCFCEFF5F5CBECEDBAE8E9BBF7F8E8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4DFDFDFDDDDDDFAFAFAFFFFFFFFFFFF FFFFFFF2E5BCE2C161E6BD5FF5D5A2FCEFDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F4E1E5D998D8C464DCC56EEDE1A9 FEFEE5FFFFF9FFFFFFFDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDE0E0E0F4F4F4FEFEFEFFFFFFFFFFFFFFFFFFFEFEFE F7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D780DBD27EDBD27EDFD581E1D683DCD27EDED37D D7CC76E0D67FE0D47DE5DB82DBD179D8CE78D5CC78D7CE7DDFD486E1D789DDD286E3D88CDDD283 DFD585D8CD7DD9CF83E2D78EE3D98FDCD284D8CE7DD8CF7BE4DC86DDD57DDDD47DDED67FE2DA83 E9E08BEAE291E6DD8EF0E799ECE396EFE699ECE396F2EA9BF1E998F4EC99F2EB94F1EA8FF6EF95 F2E994EDE491F0E794E7DE8DECE393F8EE9EF4EB9AEEE595EFE693F0E794EBE28DE7DE8BE2D985 E3DB87F0E893EBE28EEAE28EEBE290EBE291EFE695EFE597EEE396EEE497F6ED9EF6ED9CEDE393 EFE596F6EC9EE8DE91E1D78AE4DA8DE4DA8CE7DD8DEBE292ECE191EFE395F2E396EEE294EADE8F ECE090F0E496F3E799EEE498F7EDA3F5EAA2EDE29BEEE39CF7ECA4F3E8A0EEE49CEFE49CF1E69E EEE39BECE199F0E59DEFE59CECE298F3E99FF5EBA0F3EB9EEEE69AE6DE93E3DB91E8DE95E3D790 F2E79EEBE095E9DF91E9DE8FF3E799E6DA93EFE29EF1E49DEEE298E5DA8CE2D787EFE494EEE392 F2E797F0E596EEE395F3E899F4E997E9DF8CE8DD8DEFE398F3E79EF5E9A0F3E69FEFE39CEEE299 EDE196EEE296EDE292EAE08AE9DC8AEADF8DF0E594F5E999F7EC9DF1E599ECE196E7DC93E2D78E EBE097F2E89DF4E99FEFE49CEEE49DF3E99FEFE598ECE293F2E999F6EC9DF4EA9EF0E59EEBE09E F5E8ABF3E8A4F0E798EFE893F1EA96E6E196E6DFA3DCD4A46E68411C150036300DCEC896E8E2A0 ECE5A3F0E9A7E2DB99E0D897F8EFAFFAF1B1F7EDADFDF3B3F1E7A8EBE0A0E6DB98E1D692E6DD97 EBE298E2DA8DE5DE8EEDE89AE1DC8EEBE79CE4E098A7A35F696423968F50E6DF9DEAE399DDD487 DAD185E3D893DDCF96ECDEAAFCEFBB968B52867D38C1BA72BEBB77DDDB9AECE9AAA09B5BCEC787 C9C2876A6139140A0043391CA7A169E1DF91D3D47AB1B057F0EB9EB3AC6DACA36D655A2760571E DCD290EFE69CEDE293DBD181EDE498DDD793625B282B2300978F54EDE5A6F2E9A6F1E79DE9DF92 E9DC91F4E79EF0E19CDACB8DAEA1715A4D1B73682ED7CE89FEF5A8E0D885E9E08BCCC26EACA251 D6CB7FECDE97EBDF99EDE19DBEB26F524606B1A45BF4EA9CDFD48AF9F0A6A09B49C7C475D4CF94 3C341C130D00C1BC8CB2AE6C8C8640EDE597E8E183E1D885F0E3A672603D574912F9EFA5DFD685 FCF4A39C934B9E9353DFD494D5CA82E6DC91F8EDA68F82542D2000E1D59BE6DD93DFD788E7DE99 F9EEA66D621C92834CEFE398CBBF73B4A866E6DD8ED8D083372D08958E4FFFF6BCF4E7ADECE29F 7C7046534618D3C991A09852CFC87ADFD985DCD880E1DA93887C4E362F00EDE9A2F4F0AAB3AC71 3730037B724CFFFCD1FBF1B7F3EA9EF2EA96F5EA98F5E99FFCF2AEFAF1AFF7EEABF9F0ACF8EFAA FCF3AEF6EDA7FAF2AAFCF4ACF7EFA7F9F1A8FFF7ACFFF6A8FBF1A4F9EEA3F9EEA5FCF1ACFCF0AC FAEEABF9EDA7F9EEA8FDF2A9F9EEA6FCF1B0FAF0B5F7EEB1F8EFB0F9F0B0F7EEACFAF1B0FBF2B1 FBF3B3FDF4B7FEF5B8FEF5B8FFF7B6FEF6B5FCF4B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEF9F8F8DBF0F0BFE9E9B8F2F1D5FDFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF9F2FFEAD5F9E1C8F5E0CA FBF3ECFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBF7F7E8F0F0D0E9E9B3F2F2D1 FDFDF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFF8FEFDE6F3EDC2EBE0ACF8ECDAFFF6F6FFFDFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E6E6E6E5E5E5FBFBFBFFFFFF FFFFFEFFFFFEF3E0A9E3B749EBC069FCE6C8FFF7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF0EDEBC6E2D38ADEBA58 EED998FEFEE7FFFFFAFFFFFFFDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8E9E9E9E7E7E7EAEAEAF8F8F8FEFEFEFFFFFFFFFFFFFFFFFF FEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD783DED683E0D887DFD584D6CB7BE8DB8B EBDE8CD8CC76E1D27CD9CB72DFD57CD7CE7ADCD481DDD582DBD382DED586DED586DBD283DCD386 E0D78ADFD689D9D083DCD189E1D48EE3D68FE3D88AE2D785DFD57DE0D77DDFD679E2D97AE7DE81 E7DE82E6DC83E6DE8DE8DF91EFE697F0E798EBE292EDE594F1E996ECE490E9E18CEEE78FF3EC93 F5ED98EDE192FBF2A3FEF3A4EFE495F3E899F3E899F1E697ECE192E8DD8EEEE394F1E697EFE592 ECE28BE9DE88F0E68EEFE58CEEE48EEAE08BE6DB8AEDE293F4E89DF1E59DEFE29CF3E79DEFE494 E5DA8AE7DC8CEFE492E6DB88E9DF8BE8DE8AECE18FF1E696F1E697EDE194F3E79DF5E99FF4E89E F0E49AF0E49AF3E79CF0E49AEADE94EDE096F3E79DF4E89EF1E59DF5E8A2F9EDA5F9EDA3FDF1A5 F4E99BE7DC8EE8DC90EFE39BEEE29CEFE1A0F5E7A7F0E59FECE398ECE398F0E79CEFE69BE8DF94 E6DD93EEE69AE8DF94E0D78CE8DF94E8DE95E8DB95F1E59FEFE39AEDE195E2D788EEE393F0E593 EFE492F4E998F4E998EFE494EFE495F2E699F1E69BF0E49BF2E59FF7EAA6FAEDA9F7EAA6F2E5A0 F2E69EF4E89FF3E79BEFE393F2E490ECDD89ECDE8CEFE391F2E596F3E79AF3E79CF4EAA2F3E9A2 F2E8A1F2E8A2F1E59AF4E99AF2E799F3E799F4E99AEEE394EDE293F4E99AF4E99AF3E899F5EA9B F2E69EF2E2A9FAEBADFBEDA5F3E895F8F09AE9E290E2DA91EDE4A8C9BF8D180F009C926EFFFFD6 EDEAB2D7D49CB5B279999660817E497B78458A8754868252959262ACA979B8B484D3CF9CE7E3AB C8C387C1BE7AE8E69BE5E290E5E18ED8D380EAE394CBC377F1E7A1C7BD79868242757431E1DD96 F2EAA1D2C780D9CB88F8E6A8F6E6AAFFF3B6BAAD6E6F6420B5AE68BEBF77E1E29BADAE6BA8A56B C5BE923B31161A0E028A7D60A19663C4BE6FD4D269D0CF6BCFCD7CC4BF7BA49E642922009A9158 9F9756CDC67BDAD284EEE59CF1E7A8A0945A1D10065E5317C2B776FBFAB1E5DB8CEBE391EEE695 EAE093F7ECA8DFD397AB9D6A988B574E4206B6AB69ECE29CE7DD94F4EB9DE3DB8AB0A855BBB361 EAE192F2E99BF2E89DE7DD97A095575F5013B4A662E3D486FAEC9AE8DC8CC0B863A29D3FF7F7A2 8C8957030000625B3CDED89A79733798904ACAC370C5BC60E5D88AE5D59D493517A49263FFF4A6 EAE17AF4E8947A6F25D0C77DE6DD96CAC27DEBE3A3ECE3A6372D13938948FAF0A8E1D685E8DF91 E9E2A3DED695312900D0C57DE6D98DBEB162D6CA7CE9DD90B2AB62554F0DF0ECA3F0ECABFCF7BE BEB68443380FD0C38DE1D390CFC272EBE288DCD67CE3DD8FDDD89A817B4A655A1CF8EEA1FCF5A3 CBC37C3D34066B6042FFF5D0F3EDACF2EE90F4EE89F4EB94F8EDA5FDF3AFFAF2AFF7EEABFFF6B1 FAF1ACFDF4AFFCF4ABFBF3ABFBF3AAFCF4ABFDF5ACFEF6ADFCF3ACF7EEAAF7EEABFBF2B0FEF4B6 FEF4B6F8EEB0F6EDACFAF1AFFEF5B1FAF1ACF5EEA8F5EEA9F4EDA7F6F0A7F9F3A7FDF7A9FAF4A6 F8F2A7FAF3ABFEF8B5FFF9B9FDF5B6F9F4B2F8F3B0F8F2B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFAF1EFEEC7E7E7B0F4F5DEFBFBF3FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFFF9F3F2EBCC E8E2B0F4F2DBFDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF1EDEDC7E6E6AEF5F5C9 FBFBE5FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF8FCEED5F9DEBAFCDFCFFEEBE7FFF9F9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E7E7E7E6E6E6FBFBFB FFFFFFFFFFFAFFFFEDF1DE9AE3B747ECCA7EFDF5E7FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFDF9F8ECEFDEAB E0B447EDD490FEFBF1FFFFFEFFFFFFFDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFDFFFDFDFFFDFDFFFDFDFFFEFDFFFFFDFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFD FFFEFDFFFDFDFFFDFDFFFEFDFFFFFDFFFFFFFEFEFEFCFCFCFBFBFBFCFCFCFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFAFAFAFAFAFA FBFBFBFDFDFDFEFEFEFFFFFFFCFCFCEDEDEDCFCFCFE0E0E0F8F8F8FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFFFDFBFEFCF9FDFCF8FDFDF8FEFDFAFFFDFDFFFEFEFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D985E3DB88E4DC8BE3D988DACF7F E6D989E8DC8BD0C36DD9CA74ECDE85E2D77FDBD37FE2DA87E6DE8BE3DB8ADCD483DED686E5DC8D E2D98AE2D98BE2D98CDFD689DED38BE2D58FE3D68FE3D78AE8DD8BDCD27CE0D77CE2D97CE5DC7F E8DF82E9E083E5DB83DDD584E3DA8CEEE596F0E798E8E090E8E08FF7EF9CEEE692E8E08CEBE48C EEE78FF0E893EEE394F2E697F0E596F5EA9BF5EA9BEBE091EEE394EDE293EADF90EFE495F0E596 EEE393EEE490E9DF88ECE28AEDE38AF0E68FF1E792E8DD8BE6DB8CF3E79CF7EBA3F2E59FF4E89F ECE094E9DE8EE8DD8DE3D886E2D785EBE08EE9DE8DE9DE8EEBE092ECE093EADE94EEE298EFE399 EDE197ECE096EDE197F0E49AEDE197E9DD93E7DB91EADE94F2E69CF7EAA3F4E7A1EADE96E4D88E ECE095F5EA9BF2E799ECE094ECE098EADD98EDE09EF7E9AAF2E6A1EAE196EBE297F4EBA0F5ECA1 EBE297EAE196FEF5AAF2E99EE2D98EF1E89DECE398F3E79FE6DA92E6DA90EBE093DFD484F5EA9B F8ED9BEBE090EFE494F7EC9CF2E798EDE195EDE195F6EA9FF1E49BF3E6A0F7EAA6F3E6A2F5E8A4 F1E49EEEE39AF0E49AF1E599F2E595F9EA99F3E493EFE191EDE092F1E496EDE194EDE197F5EBA4 F9EFA7F7EDA5F5EBA3F1E69CF4E89CF3E79BF4E89CF6EA9EEFE397F2E69AF6EA9EF5E99DF5E99D F8ECA0F5E99CF9EC9FF3E69FF6E8A9F0E1A6EFE3A4E5DB94F1EB9BF8F2A4EAE3A0362F00D5CAAB 8A7E5D4C4309342B002E24054B420C685E25645A23534911524812453B09453A063F35042E2700 524D167B743AB1AB6CDED995DFD890E9E39AF4EEA3DED68EE8DF9BD0C783F4EEACDDD8987F7A3C 8E894AF8EEAEE9DD9ADED08BEDDF97E1D38BE4D88FCBC27B5E5511BFBA79D0D090E6E4A8C3C189 7F7C49251F00272011958D58CDC48ACFC784ADA45CDFD88AB4AE67E9E5A786814157530BACAA5A C7C271DCD686B7B165F8F3B2D3CA93675A31190A007B6E38DED392DFD48FE6DB94F4EB9EECE494 E1D889FEF9AFBCB16E8A7F41877A435A4D16BBB170E2D893E2D890F1E89CECE394A8A04FC2BA69 FCF4A4F0E798F8EFA3EAE196A89E594C4100C1B56CFBEFA5F7E9A3DFD189E2D781A8A242E4DF8D E3DFA9312C0E241F16ACA578D2C98B7D7433CEC67AE2DA86DED47FE4D790CCBC873D2C02E2D39E E9DE90F3EB8BD4C97B7C712AE7DE92EBE496DAD288F3EEAB938C5B2E2400E5DAA0F6EBA6ECE28E F1EA99EBE5A4746C304B4215F8EEA7DDD089D4C57DE7DA91EDE29A696132817941F3EEABF9F5B4 EAE5AA403801AEA46DFDF1B7F1E39FEBE08EECE289ECE68EEDE69ABEB87B504A199D9254FAEFA2 F1EA98DAD28A3E350972684CFFF9D1F0E9A8EDE98DF4EE8DF9F09AFBF0A9FFF6B2FCF3B0F5ECA9 FBF2AFF3EAA6F7EEA9F8EFABFAF1AAFBF3ABFCF4ABFEF6ADFDF5ACF8F0A9F7EEABF9F0AEFDF4B2 FDF3B5FEF5B7FCF3B5F7EEADF8EFADFBF2AFFBF2ADF3EBA6F2EBA6F6EEA8F8F2A8F8F2A6F7F1A5 F6F0A4F8F1A8FEF7B0FFFEBAFFFABAF8F0B2FAF6B1F7F3ADF5F0ACFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFFF8F2FDEFDBF3ECC3EEEFC0FCFCF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F7DBECEDB8ECEDC0F3F3DAFBFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFAFAE2E8E8B2E1E1A0 FAFADFFFFFF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5ECFEEAD6F3DDBEF3E5CFFBF8F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E6E6E6E5E5E5 FBFBFBFFFFFFFDFDF6F3F6D1E8D88BE0BB55ECD294FDFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC F4E4BFE1B752EECE8CFFF0E2FFFBF8FFFFFFFDFDFDEDEDEDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F7FFEFEFFFEEEEFFEEEEFFEFEEFFF7EFFFFFF2FFFFFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 FFFCF0FFF3EFFFEEEEFFEFEEFFF8EFFFFFF2FFFFFEF5F6F6E7E7E7E1E1E1E8E8E8F7F7F7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE4E4E4CDCDCD CCCCCCDCDCDCF0F0F0FDFDFEFDFDFFF3F4F5E5E6E7D9DADAEAEAEAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFAF7FEEFE0F5E4CAEEE0BBEEECBBF6F0D3FEF2F0FFF9FCFFFEFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D884DFD784DED686E0D585 DBD080E2D585E7DB89C1B55FC4B55FECDE85E1D67ED8CE7BDDD481E3D987E3DA88E1D887E2D888 E6DC8CE5DB8CE6DC8EE6DC8EE2D78BDED38AE6D993E4D990DFD386E6DB89E1D882DBD278DBD276 D6CD71D8CF73E2D97DE5DB82DCD483E0D789EBE293EFE796ECE493EFE796F6EE9BF3EB96F0E893 F0E892EDE68FEAE28DEFE495EFE495FCF1A2F9EE9FECE191FBF0A1F1E697F3E899EFE494EFE494 EEE393EADF8FEDE38FECE28BEBE189EAE087EBE189F3E994F0E493EDE292F3E89BF4E89FF5E9A1 F7EBA3ECE096F1E599F0E597E1D686E9DE8EEDE291ECE191EBDF91EADF91EADE94EBDF96EFE399 EEE298EDE197EEE298F0E49AF1E59BF5E99FF7EBA1F3E79DEBDF95EADE94EEE298F5E9A1EFE39B EADE94ECE094F1E698F3E89BF2E69AF1E59DEFE29CEFE29EF4E6A4F0E49DF0E69AF6ECA0F6EBA0 F2E89CF0E59AE7DD91F2E79CF6ECA0F2E79CF5EA9EF8EEA2F6EA9FF3E79BECE094F2E798EADF90 EFE494F7EC9BF1E696F6EB9DF9EDA1F3E79DF0E49BF7EB9FFDF1A7F2E69CF2E59FF7EAA6F4E7A3 F8EBA7EEE19BF0E49CF6EAA0F4E89CF1E397F9E99DF9E99DF6E79BF2E598F1E397F7EAA0F4E89E ECE299E9E096EEE49BF8EEA7F7EBA1F6EA9FF1E59AF1E59AF7EBA0F4E89DFAEEA3F7EBA0EFE398 EEE298F3E79CF0E598F1E69AF0E59CFAEEADF3E6AAF1E5A8E5DB9CF6EDA9E3DB97CEC9893E360D 382F0652462590844BC1B474DFD391EBDE9EEFE2A2ECE0A0E9DC9CF5E9A9E8DB9BE0D393D7CA8A B4A96D958E526D642D564D1159501BA09759D0C889C8C081D4CB8BEAE1A1FAF3B2D6CF8ED0C989 E7DFA3847A42978C54F0E2A6E9DB94F2E696EAE18BD1CA76DED88C6A6423C2BC82C3BE8AD2CD9C 7E794B1D1800554F27E5E39CF4F1A0BBB762D8D382CBC281B6AA77D9D0A055502476712DA19E49 F5F597B5B155E2DD8ED9D192988C5B3B2D0E30220D938560FBF0B3E6DC97F5EBA4E9DF97E8DF96 E6DD93D5CC84978C47A39856968B4C64581CC9BD7FE0D58FEDE39AE3D98FC1B86ABCB364D5CD7D E9E091E6DD8FE3DA8EE8DE95A89E555A500BB4A964F6EB9BF6EA9FF1E2A0F7EAA1A99F47D0C96D F0E6AA5F553A0B04008B8852D7D0979F9255B1A75CE7DE89F1E792E9DE91EADEA09384575E512C F9ECAEDCD486F2EA938578339E924EEEE499DCD685E5E195D6D18D1C1500968D62E1D5A0E3D995 F3E997DBD482D9D290312901B1A865DED391D9CC88EBDC99F8ECA9C7BC7A413803CFC786E8E2A4 E0DB9B554F1A8D844CF2E6ABDFD495F8ECA5F4E99AE3D985EFE795EAE199D6CD92413804D3C987 F9EE9FEDE694E7DE993F36098B8161FFFFD3F6EFADF2EE97F9F398F8EE9EF4EAA6FEF3B1FAF1AF F4EBA9FAF1AEF2E9A5F6EDA9FDF4AFF9F1A9F7EFA6F7EFA7FBF3ABFDF5ADFAF2AAF9F0ABFBF2B0 FBF2B1F9EFB1FAEFB1FAF0B3F9EFAEF8EFADF9F0ABF6EDA6F9F1ADF9F2B0F8F0ADF5EEA8F3ECA4 F0EAA1F8F1A9F7F0AAFAF3AFFDF6B6FAF2B4F1E9ABF7F3AAF8F4AAF8F5ACFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFCFDF0DFFBE3C0FCF0CCFDFEE3FFFFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEEFF9F9D6E7E7ABE7E7B6F7F7E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFEECF6F7CEEAEAB4 E6E6B5FAFAEEFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFCF9EFEAE7B9ECE9BDF9F5E5 FFFDFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E6E6E6 E5E5E5FBFBFBFFFFFCFAFAEBE6E4ADDDCE7DDDC26BECDBA9FDFBF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFDFAF3E9CAE0C370EBC985FADDB8FEF5EAFFFFFEFDFDFEEDEDEDE3E3E3F2F2F2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC FFFBF6FCFAF2FAFAF0FAFAF0FCFAF2FEF8F3FFEAE8FFDFDEFFDDDDFFDDDDFFDEDDFFECDBFEF9DB FBFBEAFAF9EBFAF7E6FCF7EAFFFAF6FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAFCFCF4FAFAF0FAFAF0FAFAF0FAFAEE FDFBE2FFF4DAFFE5DCFFDCDDFFDFDDFFEDDBFEF9DCFEF9ECDBD8D4B0AFAF9D9D9EAFAFAFD6D6D6 F2F2F3F0F0F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F2F2F2E9E9E9BFBFBF 999999989898AAAAAAC2C2C2E1E1DBEFEEE6E9E7E0E9E5E3F7F7F7FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFEFDF5FBF6E4FBE9C8F7D7A6E9C98CDDC479DDD476EAD597F8D7C1FEEEE6FFFDF9FFFFFF FDFDFEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D07CD1C976D5CD7C D9CF7FD4C979DACD7DE4D886BDB15BC0B25BE2D47BE1D67EDFD381DFD482DDD280DBD07EE0D585 E4D989E2D787E5DA8BE7DC8DE7DC8CE1D589DDD188E1D48DE1D58ADCD183DDD281E5DA87E0D67F DFD57BD6CD72D8CF74E8E084EDE38BEBE390E9E092EDE495ECE493EAE291F0E897EAE28EEEE692 F5ED98F9F19CF5ED98F0E894F8EC9DE1D686D1C676F8ED9DF4E999EADF8FEDE292F1E696EEE393 EEE393F0E595ECE18FEDE38EEFE58EEBE189EAE087E8DE85EDE38BF1E792F3E897F1E696EADE93 F0E49BF3E79FEBDF97F0E49BF0E49AE2D689E7DC8CE7DC8DEADE90EEE195EFE399F2E69DF7EBA3 F5E99EF1E59BF0E49AF4E89EF7EBA1F8ECA2F0E49AF8ECA2FAEEA4F1E59BEADE94E9DD93F1E59B F2E69DF5E99EF1E599F0E498F4E89CF5E99EF5E9A1F3E7A0F1E4A0EFE29EE9DD94F0E498F8ECA0 EFE397E8DC90EEE296EBDF93E7DB8FF4E89CFAEEA2EFE397F6EA9EE8DC90F5E99DEEE394F5EA9A F2E797E9DE8EE9DE8EF2E799FDF1A7FAEDA6F6E9A3FBEEA8F5E99EFAEEA3F4E89FF1E49EF6E9A5 FCEFABF6E9A5EFE29CF2E69EF9EDA3F5E99DF3E59BFAE9A1EFDE98EDDE96F1E49AF6E89FFAEDA3 F6EAA0F3EA9FF2E99EF7EEA3FEF6ABFAEEA4F7EBA1F0E499F0E499F8ECA2F9EDA3F5E99FF1E59B EADE94EDE197F4E89EF2E69DEEE49FF8EEAAF1E7A1E0D78FEEE5A0EEE4A7D6CA97564B1A261C02 706730B8B275E9E19EEFE09EF2E3A0EFE09DF1E29EF2E39FF3E49FF1E39DF5E7A0EEE098E9DB92 E8DB92F5EBA5FEF5B3F0E5A7E1D79CA99E67564C155F561FB8AF77B6AF74BDB878CCC784E3DE99 E2DB96D5CC8CD6C99271632FADA166EFE69CEFE98FE1DC7AEBE88BE5E295666128BCB586DBD4A6 4E461B0C0400716B3BF4F1B1F1EF9AEDEE8AE7E580ADA952FBF5B8B7A98561562F6E6931CFCB82 E7E58EB9B85CE8E391EAE2A29E93640A00005E5032E0D4A4F5E9ADDBD18BF1E89EE4DA92F9EFA8 D5CB86A79C59A19654D9CE8C746927766C27EFE4A0F3E9A3E6DD91DFD689B9B062C5BC6DEEE596 E5DC8DEEE596E4DB8FE9E095A1974E392F00C8BD74EFE496E2D68CE7DA93F0E39DAFA454C3BA67 FFFCB69A8D67120600483F1ECAC985CCC181908042EBDF8CE1D87BE7DE86DED48FF8EAB7362A00 ACA267F2EAA2E9E294BBB467615713D8CE88D8CF87E3DD92FBF5AE6D68242C2612ECE4A9ECE3A9 E1D794EEE296E4DC8E7C753B746D30D3C98BE5DA9CE8DA9CE1D396FCEFB35D5114786E36EFE6AC FCF4BA726A326D6624FFF9B6EDE2A1EEE4A0EBDE96F5EA9CE4D989E4DA8DD9CF8BB8AE744D410E E7DD97F4E998F7F0A0E8DF9B30270099906AFEF6C5F2ECABF3EE9DF9F19EF8ECA2F4E9A7FEF4B4 FBF2B1F6EDACFDF4B1F8EFACFBF3B0FFFAB4FCF3AEF6EFA6F7EFA7FBF3ABFEF6AEFFF7AFFEF5B0 FEF5B1FFF6B5FBF1B3FCF2B4FFF6B6FFF8B6FFF8B4FEF5B0FAF1AAFAF2AEF9F1B0F7EFAEF7EFAD F6F0ABF7F0ACFEF8B7FCF4B3FAF2B2FCF4B6FAF1B4F4EBAEEFEBA3F4F0A7FBF7B0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFBFBFBFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFDFDFDFCFCFCFBFBFBFBFBFBFBFBFBFBFBFBFCFCFCFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFDF9F5EED3EDE2B0F6F1D0FFFFF6FFFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFAFCFCE9E6E6B0E6E6ACF6F6D4FFFFF4FFFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAF4F4D6ECEBB8 EEEEC7F5F5E0FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEF8F5F6D2F5EFC5 FCEBCFFFF2E6FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 E6E6E6E5E5E6FBFBFAFFFFF3FAF7D8E4D38BDBC772DDCE80EDE6BDFDFCF7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCF4F0D7E0D38CE2C87BEBCC8BF9EFDBFFFEFCFDFEFEECECECE2E2E2F1F1F1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFCFCFCFBFBFBFBFBFBFBFBFBFCFCFCFCFCFCFDFDFD FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFCFCFCFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFCFCFCFCFCFCFBFBFBFBFBFBFBFBFBFCFCFCFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFC FFF6EDFDEBD3F3E9C5E9E9BCE9E9BCF2E9C5FCE8D1FFE1D8FFDCDBFFDBDBFFDBDBFFDCDAFFE2D0 FCE9C4EFEAC0E9E1A5EAD788F3DB9DFDEAD2FFF7EEFFFFFEFFFEFEFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFDFFFFF5FDFCE5F2F2CEE9E9BCE9E9BDE9E9BC EBE9BDF6EAC1FEE6CAFFDFD5FFDADCFFDCDAFFE3CFFCE6C3F3DDC2B0A2935F5B573D3E3D595959 949493BFBFBEBCBCBBBCBCBCBDBDBCBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB9B9B9 A4A4A4919191929292828282777774A2A289D3CEA7E9DABAF6E5D3FEFBF7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFBFFFFF1F8F1C6EDDB8DE8CB68E8C764E1C974DBCB80DBC672E1BA6CE9B776F6DFB7FEFCE9 FFFFFBFDFDFEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3CB77CEC673 D7CF7FDDD383D4C979D4C777DFD381C6BA64DCCE77E0D279E3D87FE6DC86E9DF8ADFD581D8CD7B E2D785EADF8EE5DA8AE2D887E2D787E1D687DFD485E1D58ADCD085DFD388E8DD8FE2D787E8DD8A DDD37EE3D983E2D881E4DA82F0E68DE7DD85F0E895EEE695F0E897EDE594E9E18FEDE592E9E18E ECE491F3EB98F8F09DF5ED9BF0E895F8ED9DD4C979C0B565F5EA9AECE191E3D888F0E595F3E898 EEE394EEE393F1E696EFE492F3E995F3E992EAE088EBE188ECE289EAE089EDE38EF5EA98F4E999 ECE093EDE196EFE49BEBDF97EBDF96EBDF95E0D488DBD082DFD387E5D98DEADE94ECE098EDE099 EFE39BF0E49AEADE94EADE94EFE399F3E79DF4E89EF1E59BF4E89EF5E99FF4E89EF4E89EF4E89E F3E79CEEE296ECE094E5D98DE9DD91F2E69BF1E59BF0E49CF0E49CF1E49DEFE29CE9DC93ECE094 F1E599EBDF93E7DB8FEFE397F1E599EDE195EDE195F1E599F1E599EDE195EDE293EFE495ECE192 F0E595E5DA8AECE191ECE192F2E79AF9EDA3F6E9A4F4E7A4FBEEA8EEE297F1E59AF8EBA2ECDE99 E9DC98F4E7A3ECDF9BF2E59FF1E59DEDE197EDE296F4E69EFCEBA5F2E19CF6E7A2FAEDA6F4E69F EFE29BF0E49BF4EBA0F6EDA2F7EEA3F8EFA3F5EAA0F7EBA3F3E79FF4E8A0FAEEA6F6EAA3F3E79F F3E7A0F2E69EF6EAA2F7EBA3ECDF99E7DD9FE6DC9BEEE69EFFFAB1EFE8A39F96631E1200433716 B4A97BEFE6ABE0DA8FE2DA8FE9DC9AEBDF9BEADE99EDE09AE8DC95E4D991EADF95E9DE93EFE497 E2D68ADED286E3D78AE5D98EE3D791F8ECACF9EFB4E1D5A0837944504810B7B174D0CB89C5C37B BDBB6EE5DE8CE3D98FE6DA9CC5B8817C7133DED78ADAD679D1D06BE5E489BFBB78676135A09876 4E45251007007F7645F0E9B3FAF3AEDFDA85DDDA79F6F293D0CC79CEC68882764A686029E1DF95 B4B066D4D088ABA664D4CA956F6340190C00625335E2D6A1FAF3ADE3DA85DBD281E8DF92EAE097 CCC27D8C8140C7BC7DE5DA9A7C71309F9550E8DF98F7F2AAE9E094DFD687BDB565C8C070DDD485 F3EA9BECE394F2EDA1F1E89DAEA45D544A04C2B872DED389DFD482ECDF9BDBCE88CDC3718A8129 F7F2B1CEC19C271907261C04A8A368C6C376A29555B7A262F4E68DE9E17EECE38CFEF3B8A39668 3A310CE5DE97E5DF90E3DD8F756D26B7AE64FAF0A8D4CB88EDE5A9BEB77B231F00A4A15BEBE5A0 E4DD97E0D792E2D895C7BC7C312800ADA367D9CF92EAE0A4EDE1A7F0E5ACBBAF77180B00D2C78F FEF2BD877C46625817EEE59CE7DD95F1E79FE9E097EADE92EADE92F8ECA1E7DD94EDE2A1645A22 91864FEBE298E7DC8CEDE59AC8BF7F191100B4AC7AFDF6BFF3EDABF2ECA2F6EDA1F8EDA6FCF1B1 FCF2B1FAF1B0F4EBAAFBF2B1F4EBA8F7EEABFAF0ADF8EFAAF8EFAAF7EFA7F7EFA7F9F1A8FBF3AB FAF1ABFCF3AFFEF5B2FFF6B5FDF4B3FDF4B3FDF4B2FBF2AEFAF2ACFBF3AAF7EFACF7EFB0FBF3B4 FDF5B6FEF6B6FEF6B6FEF7B8FCF4B5FCF3B6FFF7BCFDF4BAF8EFB4F7F2AEF9F5B1FDF7B7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF6F6F6E8E8E8D4D4D4C9C9C9CDCDCDDEDEDEF9F9F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF3F3F3E1E1E1D2D2D2D6D6D6F8F8F8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4E1E1E1D4D4D4CECECECACACAC8C8C8CDCDCDDDDDDDEEEEEEFAFAFAFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDF9F8F8E9EDEDC5E7E8B1F3F4D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCF7ECECC6E9E9B4F2F2C4FBFBE1FEFEFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF4F0ECC6 E8E2ADF5F2DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFEE FDF4D3F9E3BBFAE9CFFEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7F7E6E6E6E5E5E6FBFBFAFFFFF0FAF4CDE4C46DDEC469E3DC98F1F3D3FDFDFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDF6F4E4E6DEA9DEC674DFBD62F5E9CCFFFEFBFDFDFEE9E9E9DCDCDCEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBF1F1F1E8E8E8DEDEDED4D4D4CDCDCDC8C8C8C9C9C9CFCFCFD4D4D4 DEDEDEF2F2F2FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EBEBEBD7D7D7CFCFCF E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCFCECECECDCDCDCD2D2D2CBCBCBC8C8C8CACACAD5D5D5E6E6E6F6F6F6FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAFBFDF8F4 F9F6E9FAECD3FCDDB8EFDEADE2E2A8E2E2A7EDE2B2FBE2C3FFE3D6FFE3E2FFE3E3FFE3E3FFE3E2 FFE3D4FBE1C1EBDEAFE0CC76DDB83EEBC361FBE1B7FBF0D8F9F7E9FEF7EEFFFBF6FFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFDFDF3F9F9E9FBF7DEFBF5CFEEEBB8E2E2A7E2E2A8 E2E2A7E5E2AAF3E2B8FEE2CAFFE3DBFFE3E5FFE3E1FFE2D3FBDEC1EFD1B49A846C3429180D0A00 303026727265A3A393A0A090A3A39BA7A7A7A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8 A7A7A7A0A0A09898989595957474755A5955888561C8BA7AEAC98AFCD8AAFEF2E4FFFBF7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFBFCFEF6EFFAEDC6EEDB8AE0C54FDDBE3CE2C859E3D787E3DEA7E3CB93DFB56EDEAC5BF0D9A2 FEFBE3FFFFF9FDFDFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2CA76 DBD380E4DC8CDFD585DACF7FDBCE7EE1D583D5C872D9CA74D0C269D1C36CD6CB75E0D480E4D985 DFD380E5D987E8DD8BE8DC8BE5D98AE4D889E0D384DCD081E2D689DFD388E4D88CEEE394E7DC8D E8DD8DDED382E4D986E5DB84E6DC85E3D981E9DE86EBE38FEDE593EBE390E9E18FEBE390EEE693 EEE693F2EA97F4EC9AF3EB99F1E997EFE796F3E897F2E796F9EE9DFAEF9EEBE08FF7EC9BF8ED9C F8ED9CF6EB9AEBE08FEADF8DF0E593F2E894F3E994EDE38BEEE48BF5EB92F0E68DF0E68FF3E995 F6EB9AF7EC9DEFE396EDE198EFE29CEBDF98E4D88EE1D58BDBCF83E0D488E9DD91EDE197E8DC94 E5D891E7DB93E9DD95F0E49AEEE298EDE197F2E69CF2E69CF2E69CF6EAA0F3E79DEFE399F4E89E F8ECA0F1E698EEE395F1E598EEE296E7DB91E3D78DE5D98FE9DD94EFE39AF7EBA2F2E69DECDF95 E6DA8DE7DB8DEEE194EEE294EFE395E7DA8DF2E598EADD90E0D386EADD90E7DA8DFCF0A3EADF91 ECE192F5EA9AEDE292F6EB9BF3E899EFE399F8ECA4F3E6A0ECDE9CF7EAA6F2E69BF4E89EF3E79D EDE09AE7DA96F3E6A2EFE29EE8DB95F1E59DEEE299F3E79BFAECA4F8E7A2F1E09AF7E9A3FEF1AB F6E7A0F0E39AF0E49AF5ECA1F7EEA2F4EB9FF7EFA1F3E79DF5E9A0F8ECA2F8ECA2F8ECA3F5E9A0 FBEFA5F7EBA1F6EAA1F9EDA4F4E89FE6DC93ECE79BE4DD97FAF4B6F0E7B15C5131180D00887D53 E9E0A8F5EDB0E3DC9AE8E29BE9E19CEFE6A6F4EBABF9F0ADF3EBA6F4ECA7F9F1AAF4ECA3F0E89F EDE69BD5CE81DBD487F2E896E3D683EADE8FEEE19AE3D997EBE0A5EFE4AABEB5785F5A15ACA861 E9E697C5C46FCCC668EBE18BE5DB92F1E5A6938A49A59E52F0EC94DFDE84C6C575BFBB825F5938 362B1F180E00A19564F7F4BDE9E09EE4DD94E7E294E9E396FAF5A9C1BA72433C00BBB372E2DE96 BDBB6ECEC888C0B985B1A87D3326182E210D8E8358F3E9AFE0D88FE4DD87DCD579E3DB87E0D788 A99F56998F4AEDE2A1C4B97A4C410AA59A59F4EAA5E8DE94F4EB9DCDC474AAA250CDC573EEE695 F1E899E2D98BE7DE92FAF1A6988E474F4500B9AF68F0E6A0DCD187EBDF90E3D991D1C7798C862B F1EA98F7EABC574736110200786E3DE9E597DAD487AE9D5DE3CD8BF4E589E7DC7BE3DC89EAE0A7 2E220E888049F5EEA5F3EC9BBAB3669A904CEFE793EDE497E3D99FF1E6BC413A20504A18EFECA3 E3E28CABA852EDE59FF3E6B0897C4A3E3310C1B876F2E8ABE4DAA0EDE0ABEEE1AE524622998C57 F7EBB7867A48413400D0C685F6EC9FEAE093DCD284EFE697F8EEA2EEE49AE7DD95E9E09DB7AC6C 352800E2D598FBEFA2F5EC9DF5EBA6A3985E181000D7D197FAF5B7F7F1AEFBF4ADFAEFABF8EBA9 FDF2B2F5EAACFCF3B4F8EEAFF8EFAEF3EAA8FCF3B2F8F0ADF5ECA9F7EEA9F8EFA9FBF4AEF7EFA7 F8F0A7FBF3ABFCF3ADFEF6B3FEF5B5F8EFAEF7EEADF9F0ADF8EEAAF3EBA3F3EBA2F6EEAAFAF2B1 FEF6B7FEF7B9FDF5B7FBF3B6FEF5B9FBF2B7FBF2B9FFF7BDFEF5BCF8EFB6FBF5B8FDF7BAFDF8BE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDCDCDCA6A6A65D5D5D353535434343818181E9E9E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9D2D2D28F8F8F545454656565E4E4E4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD4D4D48C8D8C5C5D5C4848483737373131314343437D7D7DBDBDBDEAEAEA FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF6F6E3E8E8B8EAEAB2F8F8D1FDFDEDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFCFCF6F2F2D6E8E8B3ECECC2FDFDF7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FFFDE4 FCEDC6FAE2BEFDF2E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFEF5F4DAE8E4AFEDEAC2FDFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7F7F7E6E6E6E5E5E5FBFBFBFFFFFBFAF2DBE4BB56E6C562F4EBB4FDFFECFFFFFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFDF4F2F8DDCDEAC077E1B345F5E6C2FFFEFBFCFCFDDDDDDDCACACA E6E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEEFEFEFCACACAA5A5A58282825C5C5C414141323232363636494949 5D5D5D818181CBCBCBECECECFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7B3B3B36A6A6A 4A4A4AA6A6A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3F3B7B7B77A7A7A5555553D3D3D303030373737606060A0A0A0DADADAF8F8F8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFECEE F7E2D2E9E0B3EBDEA7FCDEB9FCECD5F9F9EDF9F9EDFBF9EFFEF9F3FFF9F6FFF9F9FFF9F9FFF9F9 FFF9F9FFF9F6FEF5EFFCE6DFEFC698E2A94CEBC370F8EFC2EDEBB9E7E0A9FAE1BDFFEEDCFFFDFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFEDF6F6CFE9E7B1EDDFABFCE4C0FCEFDAF9F9EE F9F9EDF9F9EDF9F9EDFDF9F0FFF9F4FFF9F7FFF9F9FFF9F9FFF9F6FEF8F2FFFAF5C1B398755D2A 63532485835EB2B280D1D193CFCF93DDDDBDEBEBE8EDEDEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EEEEEEE8E8E8CACACAABABAB979797A2A2A3BAB8B5DCCDB8EDC98FE8B14DE9AF49FBDAB0FFF0E1 FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFFF1F1FBDBCDEAB65CE0B545DDCC6FE8E4A9F7F2D6F9F7E6F9F8ECF9F4E7ECE3D4E1D6C5 F0EBE0FEFDF8FFFFFEFDFDFEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D7CF7BE0D885E3DB8ADED484E4D989DBCE7EDED280DCD07ADBCC76DFD178E3D67DDCD07AE3D783 EADE8AE4D884E8DC8AE2D684DCD07EE2D586E6D98AE5D889E4D788E1D586DFD387E7DB8FE7DC8E E2D788EADF90E6DB8CE6DB8AE3D884EAE08BE3D981E8DE86F4EC97F8F09DF2EA97ECE491EBE390 E8E08DF6EE9BF7EF9DF8F09FF8F09FF6EE9DF5ED9CF6EB98F3E896F5EA98F3E896F0E593F1E694 EFE492F2E795F4E997EFE492EEE391ECE18FE7DC8AEEE48EEFE58EEBE188EAE087E9DF86EBE188 ECE28CF0E592F5EA9AF1E597EDE198EDE199ECE096E8DC92E6DA8EE6DB8CE4D88CE7DB8FEBDF95 EDE199EBDE97E9DD95EADE94F3E79DEEE298EBDF95EEE298ECE096EEE298F6EAA0F3E79DEADE94 EDE197F4E89CEFE494EADF90EDE294F2E69AEEE298E8DC92E9DD93E8DC92E9DD93F3E79DF2E69C EADD90EFE294EDE092EBDE90F3E698F0E395F0E395F5E89AECDF91E6D98BEFE294F1E496EEE296 F1E59AF3E89AE2D787DCD180F6EB9BEDE195E9DD92F7EBA3F5E8A3F2E4A2FFF4AFE5D98EF1E59B F0E49AF1E49EE5D894EBDE9AEEE19DE2D58FEDE199F0E49BEFE397F2E49BF5E49EEEDD95F3E49C F7E9A0F1E39AF3E69DF1E59BEDE497E6DD90E3DA8DF2EA9DF5E99DF7EB9FFAEEA3F9EDA3F7EB9F F6EA9EF2E69CF0E498F7EB9FF8ECA2F0E499F0E69AF1ED9CECE8A2E8E1AC605638211500C2B68B FBF2B8ECE5A0F6F0A6E9E29BEEE6A4FFFEC4E0D99BB6B171A6A1609893518A8543938D499C9751 B0AC65DDD990EEEAA1E7E399EDE491E3D87FEADE89E4D88AD7CB83E6DC97E3DA95E6DD97C0B96E 5E5908B2B15BECEA8FDDD774DBD576E1DA87ECE39BBEB77067631AEBE89BCCC980CECA8AA59E71 22180F180C01A39766FEFCC4EAE19BE9E295E6DE95DED795F6ECB5C9BF89534A0FACA65ED1CC78 F8F6A5C3C07ECBC492877C57180D04392C14BBB17FFCF5AFDDD683E2DD82E1DB83F1EA97C3BA6B 968D40B9B066FCF2ADD8CD8B4A3F0CA29755EEE3A0DFD58DF1E89CD2C97BB5AC5CD8D07FEBE392 EAE192F9F0A2EEE59AEFE69B8F853D564C05CEC47DE7DD96D7CD85E7DC96EBDE98DDD584958F35 CEC971FEF4B9A699791203034C3F19CFC785D5CF7BC9C173C2B16BDDC982DFD077F9EE93F9F0A3 A79F68312900EAE3ACF4EDA2CEC77680772AD3C983EEE78FD6D080F3EAB5968C6F130B008D8757 B5B365D9D97BEEED90F9F3AAE1D5A5291A00AEA462E8DD9ADDD396F6ECB3E9DDA9BBB17F564919 FFF8C68D814E3D3200C9BC82FAEDA9E8DD8EEADF8FF7EE9BF0E897E7DE90E3DA92D3C984F2E7A8 5F5117857738FFF4B2EDE193EDE296F3E9AB665A253D3419E7E2A1F0ECA5EEE9A2F6EEADFAEFB1 F6E9AAF6EBABFCF1B4FDF3B5F8EEB0FEF5B4F9F0AFFFF6B5F3EAA7F5ECA9F8EFACF3EAA5FAF1AC F6EEA5F9F1A8F5EDA5F6EDA6FEF5B0FDF4B2F7EEADF9F0ADFAF1ACF8F0A9F6EEA5F8F0A7F1EAA4 F2EAA9F8F0B1F8F0B2F7EFB1F9F0B5FAF1B6FAF1B7FEF5BCFFF7BEFEF5BCF8EFB6FDF7BDFFFAC4 FFFDC7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCF6F6F6B3B3B36060602A2A2A171717252525686868E5E5E5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8C8C8C87C7C7C3D3D3D525252E1E1E1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8F8F8E7E7E7B8B8B88A8B8A6566655C5C5C6363635959594D4D4D3F403F4D4D4D707070 C6C6C6FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4DDE4E4ACE9E9B4FCFCE6FFFFF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5DFE5E5AEE8E8BAFCFCF7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAE8 F3F2C8F6ECC4FEEEDBFFF8F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9E7F0EFC3F3ECC2FEF1E0FFF9F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7F7F7E7E7E7E6E6E6FBFAFAFFF7EEFAE5C4E3B447E8C464F9EFC7FFFFFBFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAFBFDEAE3ECC67FE1B13CF5E5B3FFFDF0FDFEFCEBEBEB E0E0E0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCDFDFDF9595956A6A6A4E4E4E4747474949494F4F4F555555 5252524646464646466D6D6DA4A4A4D8D8D8F4F4F4FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2A5A5A5 5353533434349B9B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC F0F0F0D0D0D09E9E9E7878785E5E5E6464645E5E5E5252523F3F3F3E3E3E5B5B5B999999EFEFEF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8EAF2EED1 FAE1CBF9E0C9F1E7C6F2EBC9FDEDD7FFF6ECFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFDFAF4F4E7C6E8C98AE0B15EEBCB8DFAF6DAF3F3D4EFE7BFFCDEB8F8E4C0 F2EFD0F9FAEEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F0FDF0DDF4EFC6EEEEBDEDECC1F3EBCAFDEDD9FFF7EF FFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFEFFFCFAFFF6ECDCC594 AE8E38AA9758C5C3A7DDDDBCEBEBBFEAEAB4ECECB7F0F0C1F9F9DEFEFEF2FEFEFBFEFEFFFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFFFFFFFAFAFADEDEDEC5C5C5C2C2C2D1D1D2E6E4E3F7EDE4FAE0BDF2C47BECB256EFBC74 F7DDB3FFFDEEFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFCFFFEF0F7E6BEEFCB87ECB85FEBC474ECE0ACF4F5DFFEFDF9FFFFFEFCFCFBF2F1F1EDEDEC EDECEBF7F7F6FEFEFEFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD3CB77E0D885E7DF8EE3D988E3D888E5D888E0D483DDD17BDFD07AE4D67DE9DC83E2D680 E6DA84EADE88E5D983ECE08CE7DB88E6DA88ECE08EECE08FE9DC8DE6D98ADCD181DED383E6DB8B E3D78BDFD388EADE91E8DD8FE5DA8ADDD282ECE18EE8DE88E2D880ECE48FF3EB96F3EB95F0E893 F1E994ECE491F7EF9FF2EA99F1EA98F6ED9EF6ED9EF1E998F3E895F5EB96EEE48FEFE590F2E893 EDE38EEFE590F2E892F2E892F7ED98F4EA95EAE08CE6DB89E7DD88EBE18AEBE189E6DD82E1D87D DED57BE4DA81E7DD87E5DA88EDE291F2E69BE7DB93ECE096F2E69CEBDF92F0E595E7DC8DE3D889 E5D98CEDE196EFE399EADE96EDE197EFE399EFE399F1E59BF3E79DF0E49AF1E59BF4E89EF1E59B ECE096ECE096EFE397F1E694ECE190EDE193EFE396EDE197E3D78EDBCF88E1D58BE5D98EECE094 F0E498EADE90F6E99BF3E698E7DA8CF1E496EEE193F4E89AF1E496F0E395F5E89AF4E799EEE095 FBEFA5F4E89FF2E69BECE095E7DC8EF0E495F7EBA0EEE298F4E8A0F2E6A0EFE19FFCEEAAE9DD92 F1E59AEFE399F3E6A0EBDE99F1E4A0F5E8A4F2E59FF2E69EF6EAA1F3E79BEDDF93F4E498F2E296 F2E397F0E296EBDD91EDE194EBDF93E9E194E7DE91E7DE91F5EC9FF2E69AF1E697F3E899F3E79A F2E798F1E697E8DC8FEBE091F7EC9DEEE295E3D789F4EAA0F3EFACEBE6A94F4924130C00C1BB8C F6EEBEDFD9A1ECE4A7F0E9A4CDC77E8E8544615A15585313706C2C84803F84803E8B8744938F4C 908C4885823D75712B85823CB0AC66CCC576F2E893EDE390E7DC8BF6EB9BE7DE91DAD184DFD888 EAE393CDC97598933CD9D47AEAE486D0CA6ED5CF78DAD685F6F3A8706E2A7A763AC2BD88B1AA7B 332B151A0F03A79A72FFFFC8EBE199EEE696F3EB99EDE59BF3EAB0ADA0734B3F16C0B782EDE69D C6C567F4F2A7E1DAAE6A5F3F180E00504720D8D197F8F3A0E3E17CEAE77FEFEA8CE9E295BCB074 928744DBD18AFAEFA9B6AC64756B25C2B871F4EBA2EBE198EBE297BEB568B8AF62EDE496F4EB9B E7DE8FF6ED9FE7DE92F5ECA2A0964E524803C5BB73FDF6ADE5DC91DBD286D9CE8BEEE0A29A9338 BDB758F9F2ABE2D6B5281C15241B03CBC287EEE6A0C5BC6EAAA14EDECE80DECC7FE5D684D9D081 F8F0AB4B441A999360FEF8BDCDC67E6C6214BFB366EADC93D0C874F8F1A6D3CA94281E095B5330 726F3BA4A559AFB156E5E48BE3DD97483C1A857649FCF0ACE8DE98E3DA9AEAE1A6DAD19B443D11 D0C793948A54403600D7CF92F9F0AEE4D68FE9DB8DEFE390EEE58FE4DC89E8E191CFC780E6DD9E AEA16B4D3E09F6E7A4F2E399F4E898DBCF87E8DCA5281C00726937FCF8B2F3EFA3F0EBA3F6EEAF FDF0B6FAEDAFF4E9A6FDF2B5F3E9ABEEE4A6FFF4B7FCF3B3FDF5B4FAF2B1FCF3B1FAF1AEF1E8A5 FBF2ADFAF2AAF5EDA3F1E9A0F2EAA3FDF4AFFEF5B2F7EEABF5ECA9F2EAA4F0E8A1F2EAA1F8F0A6 F5EEA7F9F2AEFEF7B6FBF4B5F9F1B3FFF5BAF4EBB2FAF1B8FFF6BDFEF5BAF9F0B4F7EEB1FBF5BD FEF8C2FEF9C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF7F7F7DFDFDF8787872A2A2A1818182221222A2A2A666666E5E5E5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8CCCCCC8A8A8A5858586C6C6C E6E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEE9E9E9C1C1C16262624748475E5F5E898989ACACACAEAEAE9D9D9D6C6D6C3A3B3A 2929299A9A9AEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEF5F3DAE6E6B0EBEBC0FDFDF6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6E3E7E7B5E9E9BCFAFAEF FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4F4DAE5E5AEEDEBC3FDFBF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFF4FDFBDFFCEEC7FCE4C3FEF2E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF6F6F6E4E4E4E3E3E4FAF9F7FDEDD8F6D6A0E2B13EE8C56DF9F0D7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F3EDD08AE0B23DF2E3A2FCFBE0FEFFF9 F9F9FAF5F5F5FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCD5D5D57474744F4F4F444444606060838383A1A1A1 A6A6A68B8B8B5B5B5B2E2E2E161616535353A8A8A8E4E4E4FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E4 ADADAD686868515151AAAAAAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4F4F4D5D5D59090904646464B4B4B6C6C6CA0A0A0AFAFAFA7A7A77B7B7B464646272727545454 DBDBDBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFCFCF6F0F0D0 E6E3AAF4DEB1FDE6CCFDF5E9FDFDF9FFFCF9FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFAEDE7E499DECE71E0C074EDD7AFFCFAF2FEFEF9FDF5E9FEE3C6 F2E0B2E6E3ADF1F2D6FCFCF5FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFCFCF5FDEDDAFBE0BCEADFA6EAE9BBF6F6E4FEFDFAFFFCFA FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF4FEE5CC EDCA83DBB849E4D18AF6F4E9FBFBF7FDFDEFFCFCDBF0F0B1E6E693F3F3BAFCFCDFFFFFF5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCEBEBEBE0E0E0F1F1F1F9F9F9FCFCFCFEFEFEFFF6ECFCE2C2F3C588 E3A84DEDCB83FBF6CFFEFEF2FFFFFEFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E4E4E4EDEDEDFCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFEFEF3FBF8D3EDDB86E3C24DF2CE85FBE2C0FCF5E9FCFDFCFCFCFCFBFBFCF6F6F7E6E6E6 EDEDEDFAFAFAFEFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD2CA76DBD380E4DC8BD6CC7CC3B868E6D989DED280E3D781E9DA83E9DB82EADC83 DACC74E2D47FECDE88E8D984EFE18DECDE8BF2E491F9EB9AF4E695F1E392EFE190E1D684DED382 E3D889E5D98CE4D88DE1D58BE4D88DE6DB8EDCD182E5DA88E8DE88EADF88EBE48DF0E992ECE58E E8E08BEAE28EE6DE8BFBF3A2F3EA9AF2E99AF8EFA0F8EFA2F3EA9BECE18EF9EF99F3E994F5EB96 F7ED98F0E691F2E893F2E893EDE38EF3E994EAE08BE3D885ECE18FE6DC86EAE089F0E68DEDE489 E5DC81E2D97EEBE188EDE38CE4DA84EDE28FF3E79BE7DB91ECE194F3E89AE9DE8EEFE493EFE493 EEE393EEE394F0E597F3E79CF4E89FEEE298EDE197F1E59BF5E99FF8ECA2F8ECA2FAEEA4F1E59B F1E59BF6EAA0F1E59BEADE91EEE490EDE290EBE191EBDF92ECE096EADE95E8DC94EEE298EFE398 ECE094EADF91E5D989E0D183E3D486EEDF91F3E395F5E597F8E99BF7E89AFCED9FFCED9FF3E395 F2E397F6E9A2F9ECA7FBEEA8F5E9A0F6EA9EFEF8ABF4E89CEBDF94F0E49AF3E79FF5E7A2FEF2AC F4E89DEEE297E3D78DEADD97EBDE9AF2E5A1F0E39FF8EBA5ECE098EEE298F3E79BEEE191F3E492 F1E190EFE190EDE18FF0E393F6EB9BF0E597F0E798F3EA9DEBE295E0D78AECE191EDE290EEE392 F2E798F4E998F3E897ECE191EEE392F5EA99E7DC8CDED281F4EAA2F4EDBF736E470D0A00A5A367 E8E5A7F3EEB3F7EFBBACA17151471A5B5311A49D53C9C272DBD48DE6DF98F3ECA5EFE8A2E6DE9A E4DC98F4ECA7FBF3AEE2DA96C5BD78A49C58877E36AEA65BDACF85F1E89AE2D989E3DB89DDD381 DFD583DCD481F6EE9BD9CF7DC4BA68F2EA9DE5DF90CCC776D3D27FE8E89E97965A6F6B3F97906B 20160D2A1F09BAB078F4E9A8E5D991F6EA9FF0E696F2E999F4EAA3A2995B786C39DAD09DECE3AB E9E49EE4E190DED89A5D542E0F0500736B40E6E0A2FAF7A7DEDB7AE8E77CEEEA85E3DD87A9A05E B0A370EEE2A8F1E7A48277326C621BD5CB80FAF1A4DED588F0E798A9A052BEB568EBE298E2D88F E2D98BDED587EBE297F2E99E91873F7A7029D9CF88F0E69FF1E89DF3EC9FDBD383EDE39BB5A766 B7AF59F5EE9EFAEFBB5D51380600009A945BE7E099F2E9A1998E44D4C973F7EA93EFE08EF3E59D E1D795BDB47A443F0BDCD799E9E4A2675F19B4A75FFBEB9EECDA8DF2E69FDFD6954F491E645E32 ACA8729E9C617E7E3BA09E56BEBB758F894F423712E5D99FE0D38AEFE49DDDD392FFF6BA534C1D 686232A19A6462591FCAC181EFE8A2D0C478F4E598ECDC8FE8D986ECE189F4ED95DCD586DCD38E F6ECAF4C3F09CDBE81F4E49CF4E595FAED9DE7DA96BAAD7A0E0100A2995FFAF7ACF1EE9AEFEA9F F3EBACFCEFB8FCEFAFF3E8A2FEF3B5F8EEB1F2E8ABFDF3B5FCF2B3FFFABBFDF6B5F9F0AFF7EEAC F1E8A5F6EDAAEDE49DEAE297F9F1A8FCF4ACFEF5AFFDF4B1FBF2AFFBF2AFF8EFAAF7EFA6F7EFA7 F8F0A5F8F0A8FDF6B0FFF9B4FAF2B3F6EEB0FBF1B7F7EEB5FBF2B9FCF2B8F5EDB0F3EBACF5EDAE F2ECAFF6F0B7F9F3BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEA5A5A5676867393A393A3B3A3C3D3C343534656565 E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDECECECD5D5D5C4C4C4 CBCBCBF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEC7C7C7828282353535505050A1A1A1D7D7D7E4E4E4E7E6E7DBDBDBB5B6B5 5E5E5E1C1C1C6D6D6DC6C6C6F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFFEFE1FCECCDF5F0C5F7F8DAFEFEFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4F4F4DEEDEDC9 EBEBC4F5F5E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC FFFFF3F3F3CBE2E2A3EAEAC1FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFEF1F4EECAECE1AFF5F0D9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1D5D5D5D3D3D4F7F6F2EEEABEDED17CDAB547E7CA7FF9F1DE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF7ECD69BDEB851E4D88BF0F0C8 F9F9F0E8E8EADADADAEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE6E6E6AFAFAFA6A6A6AEAEAEBFBFBFD1D1D1 E0E0E0E4E4E4D3D3D3AEAEAE7575751616162C2C2C717171C8C8C8F9F9F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F5F5E1E1E1C9C9C9C1C1C1E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE0E0E09B9B9B505050323232777777C4C4C4DEDEDEE7E7E7E2E2E2C7C7C7838383333333 323232A9A9A9DFDFDFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF2EBEBC3 ECECBAF2F0C0FAF1D4FFF5E9FFFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF8E8E4D573E2C85EEECD8CF9E4CBFEFCF9FFFFFFFFFDFB FFF4E9F9F1DEF1F0D3EAEABFEEEECBFAFAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FAEEEBEBC2F3E1B5FCDCB6F5E9C8F6F5E1FCFDF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF6EE EED2A9E4BF76E0BC62EEDCA7FFFDF7FFFFFFFFFFFEFFFFF4F9F9DEF1F1C5E9E9AFEFEFBCFBFBDD FFFFF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8F5F5F5FEFEFEFFFFFFFFFFFFFFFFFFFFFEFDFEF6EC F4E3C0DEC473E1C764EBD67AFAF3D6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6F9F9F9 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAF4E0EBD891E1CF66DED05DF3E6B4FFF6EBFFFDFDF6F6F8E9E9E9E7E7E7E9E9E9 EFEFEFF7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFCEC672CDC572DCD483D8CE7EC9BE6EE1D484D6CA79E1D47EE4D57FDCCE75 DDCF76DCCE76E4D680EDDE89E8D983EDDE8BEADB88F4E592F9EA99EDDE8DEBDC8BEADC8BE4D886 E2D785E2D787E6DA8DE9DD91E0D48AE2D68CEBDF95E0D587E1D586E6DC86EFE58FE8E189ECE58D EAE38BE8E08CEDE591ECE491F6EE9DF3EA9AF3EA9BF6ED9EF6ED9FF2E99AE7DC89F4EA95F7ED98 F5EB96F4EA95F1E792F4EA95F4EA95F6EC97F7ED98ECE28DE3D884E6DB89E9DF8AF0E68FEFE58D E3DA7FE1D87DE7DE83EDE38AECE28BE5DB84E9DF8BEFE494EBDF93EDE393EDE292E5DA88EAE08D EFE492EFE492F0E595F0E596F1E597F4E89DF0E49AEEE298F0E49AEFE399EFE399F3E79DFBEFA5 F2E69CF2E69CF7EBA1F2E69CE9DE8EE8DE88EEE391EFE493EDE194EFE399F5E9A0F3E79FECE096 ECE095EBE091F0E695F7E89AE5D587E5D587F4E496E9D98BE7D789F1E193F6E698F0E092E3D385 E6D688F4E699F1E29FEFE1A1EEE19EF0E39DF2E69DF4E89CF4E89CECE094EEE296F1E59CF4E8A0 FAEEA5F3E79BF2E69CEDE198F3E5A0EADD99EBDE9AECDF9CF0E39DE6DA92EADE95F1E599EDE18F F1E38BEEE088EDE189F0E490F4E895FBF09EF2E797ECE394F1E89AEEE598E6DD8FE9DE8EE5DA88 E6DB89EBE08EEFE492ECE18FF0E593F0E593F2E795EDE290EADF8CEFE69EC2BC931814089D9963 FDFBBDEFECAACECA8B676028413703A59C63FCF3AFEFE899E6DE8FF2E599EFE399EDE197EADD93 E6DA92E9DD95E7DB92D7CB83DED18BF8EBA5F5E8A2E7DE9CD2C88A9D9451B6AC66FEF5A8EEE694 ECE38EDED47FE5DA8ADCD182EADC8FD2C47D968C51D8D295F2EFA6BFC171B9BA73D1CF9D6E684B 0F0500201503CEC18CFFF7A8E6DD80EEE18FE1D687FAEDA2F1E59D9A8F48544A0FE5DC96E4DD98 EDE6A5EAE4A6E1DA9E342D100A0400968E57F9F5B0EBE995D7D378E7E483DEDA7FE0D987A29B51 CEC487FCEFB9E7DAA3685C254B410CFDF3ABF5F3A9E2DA87F9F19CB7AF5BC4BC6CF9F0A4E0D690 E2D892E0D78CE8DF93FDF3AB958B46524803DBD18AF3E9A1ECE298F0E799DFD686EEE693DAD27F A89C4EEFE59FFAEFBC988C690500005E572DE1DC97EBE59ACDC578B7AD5DEEE28DE1D579F1E58F F9EDABF3E7B23D370193904FE9E69F7C7731898040F3E4A2DDC97CEBD787E9DBA5827A4E423C00 E5E498BDBD72AAA965ABA972908B5B908A5B0B0400B9B275FFF6ADF3E79AECE097EAE19D9B9156 453E06A8A16A554F16BAB273F2EAA4EAE193F5E994E9D888EDDB8FEEE08CEDE288D0C96ED9D182 FFFEBA5E5418837441F6E4A3F0E093F4E48EE8DB8BF8EBAB6C5E362A1C00DDD49FECE99BEAE891 EFEB9EF2EAAEFCEFB8FFF4B4F9EFA7FEF3B5FEF5B9F7EDB0F7EDAFF1E7A9FAF0B2F6EDACF8EFAE FEF5B4F9F0ADF2E9A6DED58FE3DB90FCF4ABFDF5ADF7EFA7F7EEA9F9F0AEFBF2ADFAF2AAFBF3AA F9F1A8F5EDA1F4EDA3F6EFA7F7F0A9F7EFADF7EFB1FAF2B5FCF3BAFBF2B7F8F0B3F4ECADF3EBAA F6EEADF2EDABF7F2B0FAF5B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEFEFEFCBCBCB6D6D6D636463737473616361414241343434 656565E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9E9E9E9 D7D7D7CDCDCDC5C5C5C0C0C0C0C0C0C7C7C7CFCFCFD9D9D9E8E8E8F4F4F4FBFBFBF0F0F0D9D9D9 C6C6C6CBCBCBF7F7F7FFFFFFFFFFFFFFFFFFF7F7F7E8E8E8D1D1D1C9C9C9E2E2E2F1F1F1DADADA CACACABFBFBFC2C2C2CACACAD4D3D4E6E6E6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCEBEBEB9B9B9B4C4D4C3F3F3F7E7E7ED7D7D7FFFFFFFCFCFCFCFCFCF5F5F5 DDDEDD7878781D1D1D4A4A4A9F9F9FE1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF6F9E6C7F9E7C0FCF7D8FFFFF0FFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8 EFF0D0E2E2A8F0F0D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEF8F9F9D9F0F0C1E8E8B6F0F0D3FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF9F3EED0EAE2ADF5F1D2FFFFFAFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3DBDBDBDADADBF7F6F1E7E1A6D4C65CDEBE67EDD4A3 FBF4E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF8ECDEAEDCC36ADACB77 E8E2AEF6F5E8E6E7E9D7D7D7ECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6F6F6E4E4E4EAEAEAF6F6F6F9F9F9 FAFAFAFCFCFCFDFDFDF9F9F9E7E7E7B3B3B33131312222224C4C4CB4B4B4F7F7F7FFFFFFFDFDFD F7F7F7E8E8E8D9D9D9CCCCCCC4C4C4BFBFBFC2C2C2C8C8C8CFCFCFD9D9D9EAEAEAF6F6F6FEFEFE FFFFFFF7F7F7E5E5E5CDCDCDC2C2C2E1E1E1FFFFFFFFFFFFF4F4F4E4E4E4CCCCCCCECECEE6E6E6 EEEEEED4D4D4C6C6C6BFBFBFC4C4C4CECECEDADADAEFEFEFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDFAFAFABEBEBE646464363636575757AEAEAEFBFBFBFCFCFCFDFDFDFAFAFAEEEEEEAAAAAA 424242232323828282C8C8C8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF9F9EDF2F2D6 E8E8BAF0F0C7FCFCE0FFFEF4FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF5DDE4C35DE7C05DF7D9A9FFF2E5FFFDFBFFFFFF FFFFFEFFFEFDFFFEFCFCFBF4EEEECBEAEAC0F2F2D6FAFAEFFEFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF8F2F8EFDAE9E0B2F2E0B7FEE6CCFEF6EBFEFDFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FAF5E8E5C985DFBA6AE4C07DF2DFBEFDFBF7FFFFFFFFFFFFFFFFFEFEFEFCFBFBF2EDEDC8EAEAB9 F2F2C4FAFADCFFFFF4FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFDFBF7F6E5E7E3AFE0CC6DDFC14CEEE4AFF8F8E9FEFEFCFFFFFFFFFFFFFFFFFFFAFAFAEEEEEE F4F4F4FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCF8F8EAEFE5B8E0C25BE0CD68E7E498F7F6DBFCFBF8F7F7F8EEEEEFE6E6E6E5E5E5 EAEAEAF9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDAD17DD7CE7BDDD482DDD282D4C977E3D786D3C775DFD27DE3D47D D8CA71D9CB72DED079E1D37CE7D983E3D480ECDC88E6D883E9DB87EFE08FE1D382E3D583E9DA89 E4D884E7DC8AE4D988E1D587E9DD90EADE94E8DC93F1E49AE4D98BE5D989E7DD88E9DF88E0D982 EAE28BEEE790F0E893F3EB97F1E995EFE796F2EA99F4EB9CF3EA9BF1E89AF0E798EEE48FF4EA94 FAF09BF1E792EDE38DF4EA95EEE58FF2E892FEF49EF7EE98EDE28DECE28EEEE391EFE590F0E68F EBE188E1D87DE4DB7FEEE588EDE489E7DD84EDE38AF1E690E8DD8BF0E595F1E695E7DC8BE6DB88 ECE28DE7DD88E2D884E5DA87EEE393F0E596E9DD8FF0E499EFE398F3E79CEDE197ECE095F8ECA1 F0E499F5E99FF1E59BEADE94ECE096EFE395EEE48FF7EC9AF5EA9AEDE194ECE096F2E69EEEE299 E7DB91EEE296F0E596F0E595F8EA9BF8E99BF5E698F3E496EDDF91EDDD8FE1D082EEDF91EADB8D E0D082E9DA8CEEDF92F0E29EF1E3A2EEE19DECE099EEE299EEE298F4E89CECE095EDE196F0E49B F2E59DF3E79EF0E498F3E79CF4E89DFBEFA8EEE19BEFE29DF5E8A2E9DC95EFE39BF9EDA3F3E79B EADD8AEFE287EDDF86EFE38AF1E68EF0E48FECE18EE8DD8DEFE596F3E99CF1E79AF6EC9FF0E594 EAE08BE7DC88EBE18CECE28EE7DD88EEE58FEFE590ECE28DF1E793EDE38FD9D186555021383515 E7E4B9F4EFC3B5B07A3D390C797437E1DB8FF8F1A5E0D790E4DB9BEEE19DE8D98AECDB8CEADA8B EADA8BEBDA8DECDB8EE7D78BE1CF87E8D78FF3E29AF7E8A2F3E8ABF7EEB8D8CF93918845ADA55A E9E08FECE28EEEE490E5D988EEDF94E1D08AF5E4A5847A4E86814EE9E9A5A7A85FA9A96A817F51 1B140A1F150CA3977AFFF7B7EFE883E0D869EADF86F1E398EADB988B7E3C675D1EE7DF8DF7F29B EFEA95EAE7A0CFC98F332A142C240A9F995FF8F4A9F2F098EEED8DEEEA90EEE999CFC885988E52 BDB276FFFDBCE1D89471662974682FE4D898E9DE97E9E08EF3ED93B6B053D1CA72E7DF8DEFE59C F1E6A3E8DE9CE6DD95F0E79E918741594F0BC8BF79F5EBA5E2D890E0D68BE2D98BEFE794CEC770 9D9639D8CF76EADDAFB5A5901F130C251F02D0CC88E0DA96E9E19AA09847EBE08AEEE18ED1C56A E4D981FDF1B58377484A4218D5D48E979547777227E9DC9DE2CF91E9D48AF6E293B4A378392E0E ABA661A3A346D3D677BEC174A09E6E958E7031291759512AB8B467C9C36BEBE192F8EEA5B8AF6C 473E0E8C864C7F7A41B6B074F0E7A5E2DA8EF1E996E9DF85EADA89EAD88DECDD8BE1D77FD1C871 EDE597AEA660483D0FDFD297EFE09EEFDF90EFDF85E7DA8CDCCF952C1D106E603DF0E8B3E2DF90 ECEB91F5F1A1F5EDAEF7EBB3FCF0AEF6EBA3F7ECACFBF1B3F8EEB0FAF1B2EFE6A7F3E9A9F7EEAD FCF3B1FDF6B4F8EFABFCF3AFF1E9A1EEE69BFAF2A9F7EFA7F5EDA6F7EEA9F8EFAAF6EDA8F4ECA4 F7EFA6F9F1A8F5EDA2FAF3A6F7F2A7F5EEA6F8F1AEFBF3B3F7EFB1FBF2B6F9F0B4F9F1B4FDF5B6 FCF6B3F9F2ACF7F2AAFAF6AEFCF8B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7CCCCCC949494494949777777B6B7B67F7F7F353635 2C2C2C666666E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E4E4E4 B5B5B58484846A6A6A5959594D4D4D4F4F4F6262627574758E8E8EB8B8B8DDDDDDF3F3F3D8D8D8 9C9C9C686868767676E8E8E8FFFFFFFFFFFFFFFFFFE6E6E6B8B8B87575755C5C5C9F9F9FCECECE 9494946A6B6A4E4E4E5656566767677C7D7CADAEADEEEEEEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF0F0F0C7C7C76E6E6E2B2C2B686868B2B2B2EDEDEDFFFFFFFFFFFFFFFFFF F9F9F9E3E3E37C7C7C1B1B1B353535888888D9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBF3EBE5B6EDE7B8FAF8E3FFFFFEFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCF0F0D2E2E1A5F0EFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBF3EBEBBAEBEBBAF3F3D9FBFBF3FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFBEFDAF7E3BAFAF0CDFEFFE9FFFFFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF0F0F0F0F1F2FBF9F2EAD591DBB544EDC792 F8E1CFFEF8F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEDE8C0DDD084 DAC166E7D597F8F3E2F5F6F9EEEEEEF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8CBCBCB4343432222223B3B3BAAAAAAF7F7F7FFFFFF F5F5F5DEDEDEB4B4B48989896B6B6B5757574B4B4B5252526262627272728D8D8DBEBEBEE2E2E2 FCFCFCFFFFFFEAEAEABCBCBC7B7B7B5E5E5EB1B1B1FFFFFFFFFFFFDFDFDFAEAEAE666666686868 ADADADC4C4C48383836060604C4C4C5959596F6F6F8E8E8EC5C5C5F4F4F4FFFFFFFFFFFFFFFFFF FFFFFFF9F9F9DEDEDE9494943F3F3F3D3D3D939393D4D4D4FFFFFFFFFFFFFFFFFFFDFDFDF3F3F3 AFAFAF4444441C1C1C6F6F6FBDBDBDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1EFEFCD E8E8B9F3F3DBFAFAEBFFFFF6FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F9F1CBE4B555E7BA69F8E5C7FFFDFCFFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFAFAEFF2F2D6EAEAC0EEEECAFCFCF5FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF5FEEDDAFBE1C6F7DEC9FAE8D9FFF6EDFFFDFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFDFAF3E1E3C765E5C060F2D099FBEAD6FEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF9F9EF F1F1D2EAEAB6EFEFBDFCFCE0FFFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFEFAF6F5E2E9D793DEBF54E1D487ECEAC1FAFAEFFFFFFFFFFFFFFEFEFEF4F4F4 D3D3D3E2E2E2FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAF0EDEAC2E1D584DEBF46E9D684F6F5D8FDFEF7F7F7F6EAEBEBEBEBEBF4F4F4 F6F6F6F8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D884EDE18CECE18BDCD17AE1D37BE3D67FDCCF77E1D37B E8D984E9DB85E8D986E3D787E9DC8DE3D787DBCF7FEADD8BE4D886DDD17FE6DA86E5DA86E7DD86 E6DA84E6DC86EFE492E6DB89D9CE7CE4D987EFE392ECE090EFE592E3D984DCD27CE7DD86E5DC84 E9DE8CEFE493E5DB87EEE48FF2E891F2E890E5DB83EAE188F3EA94F4EA94F2E893F5EB97FBF39A F4ED93F3EC92F1EA90F0E68DF3E990F3E88FF1E68DF1E68DEFE58CEFE28AF3E792FCF09EF7E895 ECDF89EDE28AEEE188EADE82EEE487F2E68BF2E58DF2E78EEBDE87ECE18AF0E78DECE28AE4DA81 E3D980EAE088EBE18CE5DB87E4D988ECE192F2E798F3E899F6EB9CFDF3A2EADF8EE9DE8FF7EC9D EFE496ECE093F6EA9EF8ECA1E9DD93E9DD95F5E99EF5EA99F8EE9EF0E497F0E499EDE197F8EDA3 FAEFA4F4E99AF4E998F0E692EFE58FEEE293EFE398F2E49AECDE93EADE92F5E89BECDE90EEE394 F1E595ECE08EEBE08EF4E898F3E89AFAEEA4F5E99EE8DC90EADE93F7ECA1F0E39DE7DB95F4E6A4 FCEEAEF5E7A7F3E6A3F3E69DFCECA0F3E698F6E899F9EA9AF0E492ECDF8FEEDF8FF6E99BF6E99B F1E196F0E093F3E394F4E495F7E899F8E99AF5E698EDDE90EEE293F5E89CF2E599EFE196F5E79B F4E999F2E795F0E495F4E79AF8EB9CEFE391E8DC88EDE38DE3DD88EAE594E5DF95A29D5B181400 88845BF1ECBDB0AA742B26009C9553EEE898F4EA98E4DA88E2D588EFE29AF2E49CEDDF95E7D58C E1D288E6D78EE8D88CDFD085E5D68BEEDE93E2D386D9CC7FDFCE83E4D895F2EAAAEEE3A1EFE59C AFA657B5AE59E8DF86EFE58DE6DC84EFE38CE5D884F8ED9DCBCA866F722AC3C67BA2A1687C784F 110A0131290DCAC093CCC18BE9E097EEE87DDDD762E9E083FFF2AE695D217E7431F2E99FF0EA9B EBE69CF1EBADC9C191271E14322B00D0CC93EBE3A0E4DC88E6E081E3DE7EF1E999D2CB8299914A D5CE84FFF8AFD9D390534C1C8B813FEEE29BECDEA0EBDD9BE9DE8FC7BF5DD3CE67EAE483EDE493 D9D089F7EEA8E7E09BEBE5AA8F884B393000C4BD74F9F1A5E4D98BEADF91E2D587EBE091D1C774 B0A951D7D27EEFEDA8EFE8BC342A160C0000948B4BF1EB9AFFF8AD9E8F55C7B975F1E591E1D67F E8DF8BDBD187D2C78B342800A69E66C8C17B86822FDCD881F9F0A2E6DA98FAEAB4C7B67D150501 807333AFA760D0CC778A8B33C8CA7ACCCB9046412B2B2512ACA87BC0C1738485319F9D65C7C48D 3834026D642C655C1FD4CC89EADF9AF3E79CF4E999E8DE8AE5DB83EFE292E1D088DECE82E1D587 F4E89CE3D990413701B9AE6FFFF9B7EADC93FCED9AF9EB94FFF6BC9285631206004B411BDED8A4 E8E69DEEEE97EEEC94F7F29FF5EBA2EBE098EDE199F8EEA8FCF2ACFCF2ACF4EAA4F5EBA5FEF7B0 FDF3ACFAF0A9FBF1AAF8EEA6F9F0A8FDF3ACFCF3AFFEF6B4FAF1AFF5ECA9F8EFACFCF3AFFAF1AD F9F1A9FAF2A9FAF2A9F9F1A7F8F1A3F6EFA0F2EB9FF3EBA3F6EDA9F7EEAFFBF1B3FEF5B7FFF6B7 FCF3B0FDF5AFFFFAB3FEF7AFFDF6B0FBF4AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE7E7E79B9B9B5656565252529D9D9DE1E1E1959695 3939392C2C2C666666E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDECECEC B8B8B87A7A7A4545453E3E3E3F3F3F3C3C3C4646465959595657565F5F5F9B9B9BCFCFCFEEEEEE C8C8C87474742B2B2B3F3F3FDEDEDEFFFFFFFFFFFFFFFFFFDDDDDD9B9B9B404040151515565656 9191917878785E5F5E4B4B4B5555555354534A4B4A6C6D6CBBBCBBE5E6E5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCE1E1E19C9C9C4F4F4F292929999999E1E1E1FDFDFDFFFFFFFFFFFF FFFFFFFCFCFCE6E6E67D7D7D1C1C1C3738378A8A8ADADADAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF3E3E5AEE5E6B4F7F7E8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFBF5F0D6ECE1AEF6F0CEFFFFF6FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAF0E3E3AAE7E7B8F9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF5ECFEEBD2F8EEC6F4F5CD FDFDF4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9EEEEEEEEEFF1FAF8F1EDCE86E1AD39 F6D5B2FFEFEEFFFCFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFCF3EDD5 E7D6A1DDB856E8CA81F7F0DCF4F5F9EBEBEBF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7CACACA4141412222223B3B3BABABABF7F7F7 FFFFFFE2E2E2AAAAAA7575754B4B4B4444443E3E3E3A3A3A4343434D4D4D505050666666A5A5A5 D6D6D6FBFBFBFFFFFFE1E1E1A1A1A14545451E1E1E919191FFFFFFFFFFFFD2D2D28E8E8E2D2D2D 1F1F1F6464648C8C8C6B6B6B5757574848484D4D4D4C4C4C535353898989CCCCCCEFEFEFFFFFFF FFFFFFFFFFFFF3F3F3B8B8B86B6B6B303030595959CDCDCDF4F4F4FFFFFFFFFFFFFFFFFFFFFFFF F6F6F6B1B1B14444441D1D1D727272BEBEBEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF9F9EEF1F1D3 EBEBBBECECBCFCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8F9E0EFE8B3E0B25CE7BE7FF8EDDCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAEFEEEECBE9EABEF1F2D7F9FAEEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFDF9E6F6E6C0F5DCB4FEE7E2FFF4F6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFFFFF8F8FAE9D5E3C350E9C963FAE2B8FFF6EFFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9EDEDEDC8EAEAB6F2F2C4FAFAE5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF4E8C1E7D07EDCC15BE6D389F8F4D7FFFFFFFFFFFFFEFEFE F4F4F4D7D7D7E4E4E4FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFFF9F4DAE7D48BDCC154E7CF66F4E8B2FFFFFDFFFFFFF4F4F4E3E3E3E9E9E9 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCD79E4D67EEADC84E5D87CDDD174E7DA7EE4D67D DFD179E0D17CEADA87EFE392E6DB8CE0D488DCD182DBD080E7DC8CDFD483DCD17FDED480DAD07B DDD37DE3D982DCD17DE3D886E5DA88DACF7DDED480E2D883E3D984ECE28BE6DC84E1D77EECE289 EEE48CECE191F0E595E5DB87EEE48FF1E78EF1E78DF4EB90EEE58AEFE68BEDE38AEFE58DF6EC95 EBE489EEE78CF1EA8FF2EB90F6ED92F7EE93F3E88EECE187EDE288F1E38AE9DB82EADB86F9EA99 F9EA97F2E48DEFE088E4D77BE2D579E9DB7FE9DC81EDDF87F3E58DEDDF89EADF83E3DA7DDFD679 E2D97EE8DE85EDE38BEAE08BE6DB8AE6DB8BECE192F1E698F3E898EDE290F6EC97EADF8DEBE08E F7EC9CF5EA9AEFE495F9EDA0F7EB9FF4E89EE3D78DCDC177E2D789EDE195EADE92EDE197F0E49A F7EBA0F2E799F0E596EDE28EE8DE87EDE38AEDE192EDE199F0E49CEBDF96E7DB91EDE195F5E99D F4E99AF2E797F1E696EFE492EFE492F6EB99EEE392ECE191F2E798F1E699ECE097F5E7A2EDDF9D F7E9AAF9EBAFF1E1A7F3E5A6F3E299F7E79AF4E594F3E492F5E691F4E68DF0E18BEEDF8CF5E593 F4E496F3E398F7E79CF9E99DF7E69EF7E79EF7E79CF4E499F4E499F8E89DF8E89DF5E49AF3E398 F5E69AF3E697F3E896F1E397F3E29AF6E69BF2E295F7EB97F3EA95EBE693EEE99EDAD794747137 211C12EBE7B9969060282200A29B53FFFFB3EBE290E8DE89F9ED99EDDE8DD8C87AE1D285F0E29B EADD95E4D78DE5D78DE1D38AD7CA7EE1D486EFE293EADD8EE5D986E5D98AE1D78CF3E9A2E1D78E EAE194D8D07EB7B059DBD179EBE287EDE489DCD177E5DA80DCD47BE3E49571772DA2A464999669 0E06001D1500B6AF7CF5EEAEF8F0A5ECE492E7DF81E9E183F6EA9C7E742B817830F1E9A0E9E294 EAE39AF7EFB6A99F7B261C073B340DC3C184FAF2ACE9DB92F5EA98E2D883EDE28FC9C0729F974C FBF3A7F1EC9EE6E299504B0E5D5731F0E59AEDE092F1E39DE8D993BBAE5FE4DB7DEFEA86E5DF7F EDE690F2EAA1E3DA96ECE4A6B7B37C211C00AAA565FFF9B3E7DC8FFCF1A1E6D98AF4E798E3D888 9D9241C1B866FAF5AEE9E9B6827D570C0300544921E3D896EEE396BFB165B0A15EE5D593DED087 E7DE89E0D78CE8DF9D685E26796F33DBD28F8C833ADCD583EDE792CFC879EDE4A3CDC19221130D AC9E55F3E798D4CA7C948D40CECB808F8E479B9A652D2B02A5A378B1B07BA4A55FB4B4729FA173 212005605E2A817A40E5DA9AECDE97E9DB8EEBDE8FEDE18EE2D883DDD37FE2D686CFC175E2D58D ECDF9BEADF9F5C521D877D43ECE29BE9DE93FAEFA0F9ED9BF6E89BE9DCAE43351B2A20032A2300 CCC791F6F2AFEBEA98EEED92F6F297F7EF9BF3E79BF2E69EF1E69DF5ECA1FAF1A6F5ECA1F5ECA1 FEF4AAF7EEA4F4EBA0F8EFA4F5ECA1EFE69BF1E7A1F8EEAFFDF3B5FEF5B4FAF1AFFBF2AEFDF4AF FDF5ADFCF4ACFCF4ACFCF4ABFAF2A9FDF6A7FBF4A4F6EFA2FAF2A9FEF5B0FDF4B2FEF4B6FFF6B8 FEF5B4F8EFACF5ECA7FAF2AAFDF6B0FAF3ADF7F0AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3C7C7C76868682D2E2D8C8C8CCDCDCDEAEAEA A2A2A24F504F353635656565E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC DADADA7777774A4B4A3D3D3D6C6C6C939393A6A6A6BABABAC0C0C0929392727272A7A7A7D5D5D5 F0F0F0CACACA797979323232464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F4A4A4A111111 2828285B5B5B9F9F9FBBBBBBC8C8C8D1D1D1A3A3A3565656373737676867B9BAB9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBD1D1D16D6D6D3C3C3C383838A8A8A8E1E1E1ECECECECECEC EBEBEBEBEBEBE5E5E5D1D1D17171711D1D1D4E4E4EA2A2A2E2E2E2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF9EFE7E6B2E9E9B9F8F8E9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFCFEF1E2FCE3C1FCEFCAFDFDE0FEFEF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAF0E4E4ACE8E8B8F9F9EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFBF8ECECEABF E5E5ADF9F9EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1D6D5D5D5D5D6F7F2E8EDCF88 E1B242F5E3BFFEFBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD FDEEEAF7D7BFE3B14AE8C46CF5EACFE2E2E5D0D0CFE9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE3E3E3AAAAAA292929242424565656BABABA F9F9F9FCFCFCC5C5C5626262414141414141787878979797A7A7A7AEAEAEA3A3A38A8A8A858585 B3B3B3DBDBDBFCFCFCFFFFFFE2E2E2A4A4A44C4C4C262626959595FFFFFFFFFFFFD4D4D4929292 3737371313132F2F2F676767A6A6A6BEBEBEC4C4C4B9B9B9838383484848494949848484CECECE FFFFFFFFFFFFFFFFFFEDEDED8C8C8C4444442E2E2E6B6B6BD5D5D5EAEAEAEBEBEBEBEBEBECECEC E9E9E9E0E0E0A0A0A03F3F3F242424838383C9C9C9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8EFEFCE E4E4ABF0F0C1FDFDE2FEFEF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBEFEDC8DFD88FDCBE70E8CD9BF9F1E3 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFCFBF4F1F0D3E6E3AEF2EFD0 FFFDFAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFFEDF8F7D0EBE9B3E8E5B5FBF8EFFFFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFDFDEDE8F7D9BEE2BE4FE8CF75F9F1D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDFBFBF4F0F0CFE6E6AFF1F1D2FDFDF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFCE7F8EDBAE3B647E6BE58F6E8B1FFFFEEFFFFFC FFFFFFFCFCFCF5F5F5F8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFCFFFFEFF6E8B3E7BC58E3B140F7EBB4FCFAE3FCFCFAFDFDFEF3F3F3E5E5E5 EBEBEBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2C26FD9CB73E3D57DE8DB80DDD074DFD276 EADC83EBDD84E4D581E6D783EADE8CE8DC8CDCD181DCD181E2D787EBE08EE2D785E9DE8CEFE492 E6DC88E2D883E3D885E3D886E7DC8CE5DA8AE0D584E6DB89E4D987E7DD89F0E691EDE38DE5DB85 E7DD86E5DB85ECE191EFE494E6DC88EEE48FEFE58CF1E88DF3EA8FF0E78CF4EB90F4EA91F2E891 F5EB94ECE58BF3EC92F1EA90ECE58BEFE58CF0E68DEBE087EADF86F3E78EFAEC94F3E58DEEDF8B F4E593F2E38EF1E28BF1E38AEBDE82ECDF83EBDE82E5D77EE8DA82F2E48CEEE08AEDE188E6DD82 E2D87EE7DD84EEE48CEFE490EADF8CE9DE8EECE192F0E498F3E79BF4E89BF3E897F6EB9AF1E696 E5DA8AE3D888E8DD8DFAEFA1F8ED9EF1E697F9EDA0E8DC8EC8BD6FE4D98AECE192ECE193EEE296 EADE94F0E399ECE092ECE192EDE290EAE08AF0E68FF1E697F2E69EF2E69EEDE197EBDF95EBDF95 EEE297EEE395EDE193ECE192ECE191E6DB8BE9DE8CEDE291F0E595EDE293EBE092ECE097F3E69F F1E4A0F8EAAAF5E7A9F1E2A6F7E8A9EFDE95EEDE90F2E393EDDE8CEBDC88F2E38EF0E18CECDD8A F1E291F4E496F6E69AF9E99DF5E597F3E397F6E699F8E89CF7E79BF4E49AF1E196EFDF94F0DF97 F3E29AF4E49CEFE392F4E897F2E597EEDD95F1E196F2E295FCF09EF1E894F3ED9EF0E9A3CECA8D 484513726E3DB8B280221D00C3BD7CF5EEA7DBD586EBE391F6EB99EBE090F2E596EEDE91CFC175 B8AD61B8AC61B4AA5DBCB164C3B76AC3B969CBC271D2C775D4CA76DDD47FE6DC89DDD388DED48D DAD186DDD486E9E18FE3DB86BAB05BC7BD66EEE48DE7DD87DFD580DAD181D7D792AAAA7A585434 1510010E09008E8950F4EEB4EAE29FEAE392FAF39BEDE19BFBF2BC857842807726FAF497EBE494 E0D98DEBE2A49A8E632B1F10463D1FD1D08DFEFBB7F5EFA2DFD482F0E49FECE2A2A79D58B8B05E EBE490F4EDA0DDD6974B4409726D2DE5E092EFE49CFBEDA2D8CC77BBB15AE2D786EBDF94EFE798 EEE78EE2DC7EE0DA86F5EBAEB0A5742925089B975BA59F63CAC080F1E59FEADE92F4E796D8CE7A 9E9342C5BB6FE0D690E6DFA5B2B0820B05001F1900BAB56EE7DC9FE2D499A89954CEC368ECDF92 D8C989DCD185EBE19E8076374C44059F974BA8A151D2CB7DD6CF84EAE19BE3D99AD0C6874D4316 867B44F7EAA3E3D784DDD57ECCC47DC0BB7FCBC891130F00838346D1D3869E9F5CCBC891939060 2A2907444211969159D6CE8FECE09EEADD94E6D689EADA8CF2E694EBE08EDCD17FD8CD7AEEE291 EFE19DEEE2AA62572A5249169A924DDDD785DED882EAE190DED18AFCF1B77C6F3E322606877E55 130C009E9863FDF9BAEEECA1F5F39FF3EF98F4EC9BF9EDA1F1E59DF3E79FF2E8A1FBF1A9FCF2AA FAF0A8FDF3ABF8EDA6F2E8A0F7EDA5F6ECA4EEE49CECE39DEFE6A4F4EBA9F9F0AEFBF1AEF8EEAA F5EDA6F6EEA6F8F0A7F7EFA6F6EEA5F5EDA3F9F2A6F5EDA1F1E99EF6EEA7FAF1ADF5ECAAF8EEB0 FBF1B3FAF0B2F6EDABF5ECA8F9EFABFCF5AFFAF3AEF8F1ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAD5D5D59191915A5B5A4E4F4EBABABAEBEBEB F0F1F0A3A4A3525352373737656565E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFBCDCDCD4A4A4A414141666666A7A7A7CECECEDDDDDDE8E8E8EAEAEACFCFCFBBBBBBD4D4D4 ECECECF4F4F4C9C9C9797979323232464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F484848 1818184848488E8E8ECDCDCDE6E6E6F0F0F0F7F7F7C4C4C46C6C6C2C2D2C3839389E9E9EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAC1C1C14141411C1C1C1D1D1D565656707070747474 737373737373727272707070666666373737151515545454A7A7A7E4E4E4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF5EBFDECD5F3EDC1F4F4D0 FCFCF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFFF9F3FDF0DDF4EDC5EFEFBFFBFBF0FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFAFAF0E4E4ACE8E8B9F9F9EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFBF1 E9E9BDE2E2A6F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8E8E7E7E7E1DBF9E6CE ECCB85E1BA5AF5E9CAFEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFFFFF7F6FAE4D2E4B54EE8BD5DF6DDB4EFE6DFE5E3E2F3F3F3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2B7B7B76C6C6C191919424242939393 D9D9D9FDFDFDFAFAFAB3B3B33B3B3B4242426F6F6FB2B2B2D2D2D2DDDDDDE1E1E1DADADACBCBCB C5C5C5DADADAEDEDEDFDFDFDFFFFFFE2E2E2A4A4A44C4C4C262626959595FFFFFFFFFFFFD4D4D4 9292923636361E1E1E5454549B9B9BD4D4D4E9E9E9EEEEEEE9E9E9AEAEAE636363333333515151 B5B5B5FFFFFFFFFFFFFFFFFFE8E8E86C6C6C2121211616163838386B6B6B747474737373737373 7373737272726D6D6D4E4E4E212121292929878787CBCBCBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDFDEA EDEDBDE2E2A4F1F1CCFFFFF5FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8EDE3A9DEC862E8C87FF4DBB6 FCF5ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF9F2DEF1E0B2 F8E4C0FFEEDCFFFBF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAF5F4D6EDEDBBEEEEC5F3F3DCFDFDF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFDF9F4EBCAE9D693DEBD5CE8D08EF9F3E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F9E3F0F0C1EDEDBFEFEFCEFBFBF3FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FBF7DDE5CE7DE1C465E9D283F5EAC1 FEFCF7FFFFFFF6F6F6DEDEDEE9E9E9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFCF7F5EBC4E9CF80E1B758E5BD6AFAF3D7F5F5EDECECECEBEBEBECECEC EFEFEFF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCBD69D7C971DFD178DDD075DFD276 D8CB6FE5D87EEDDF86ECDD88E6D783E1D581DFD580E0D584E3D886E5DA88EDE290E3D886E5DA88 EFE494EDE292EEE391F0E595EFE494E8DD8DDFD485E3D889E9DE8EE2D787DFD484E4D987E5DA88 E4D987E7DD88E6DB88E6DB8BEADF8FE6DC88EEE48FECE289F3EA8FECE388ECE388F6ED92FAF097 F7ED95F6EC95F7F096F9F298EDE68CE6DF85ECE289EEE48BEEE38AF1E68DF2E68DEEE088E8DA82 EADB87ECDD8AE8D983EDDF87F3E58CF3E68AF3E68AF0E387E8DA81E8DB82F1E28DEDDF8BEDE18B F0E68DF1E790EFE58EEDE38EEFE591E8DD8DEBE091EFE396F1E59BF2E69CF3E79CECE192EEE394 F4E99AEDE293E8DD8DF0E595F4E999F1E696F1E696EEE393E9DE8EE8DD8EF2E797ECE192F1E698 F6EA9EEADE94ECE096E6DB8CE1D686EADF8DF0E591ECE28CF4E99BF8ECA4F0E49CEADE96EFE39B EFE399E7DB91F1E599F4E89CF1E599F4E99AF6EB9CF0E593F9EE9CFAEF9EEFE495EEE295F8ECA2 EBDF97F1E4A0F8EAA9F6E8A8F5E7A9FCEEADF3E297EEDE90F1E193E9DA88E5D683EEDF8CE9DA87 EADB8AF3E494F7E799F8E89BF5E697EDDE8DEEDF8FF2E293F6E698F6E698F7E79CF5E59AF2E199 F4E39BF8E79FF9E9A1EFE392F6EB9AF6E99BF0DF97F3E398F8E79BF7EB9BF1E797F4EDA2D7D091 B0AA75221E04A39D682F290AAEA86BFFFFBCE7E197DDD688F6EE9DFFF5A4E3D888ADA05396883C 9F9146B0A85BC6BC6DD2CA7AD7CF7FD1C978C4BC6BBDB665B8B05DB7B05CC2BC68C7BF6CD9D082 DCD387E6DD90E4DC8BE9E190EAE28EEDE591CFC776B4AC5BE2D98BEAE093DED48EB8B5848D886C 1B12080B0500726F30D5D286DAD38AEBE597E6E08CE8E091FFFFD076664482753FE7DE97DFD982 E8E387FCF3B69F936E180A01524B15DDD898FEF9BAE0DD97EBE697EADF8DE6DB9BA59862C1B57B FDF6AAF1EB9BD4CC84433B06867D48F7F1AADCD781FCF1A5D7CA7BBBB258C9BF65EEE394F3E9A3 E8DE97E6DE8CEFE98FEFE899A99F672A2103757333AAA665EDE7ADB8AC76CCBE82FFF5AEE7DD8B A89E47B0A554D9D18AF0E5ADE9E0B83B3626161200686423F2EDA1D9CE8FAEA064E2D38DE0D67B E1D67DDFD387E6D79EAEA26B302600857E31A8A14BDFD97FD8D17FEEE5A2EDE1AADBCF98251A08 6D6525EBE392E7DD89E6DA89E8DE94F4ECA8D3CD9F150F0C7E7B41D2D28AAAAB5DC3C575A49F6E 332B0826230A959054DAD293E0D794ECE098F1E299E7D78BE7D789ECDC8DE5D889E0D484E4DA85 F4EB99F4E9A98A7D50372D05AEA774C0BC7487862CDAD87BEAE394F1E5AAB9AA7E110401948A54 D8D0A01A1301807948FFFAC4F0ECABF5F2A5EEE998F1E899F9EDA0EFE399FEF3ABF6ECA4FAF0A8 FDF3ABFCF2AAFFF5ADFCF2AAF4EAA2F7EDA5F9EFA7F8EEA5F7EDA7EFE6A1F3EAA5FAF1ADFFFAB3 FFFDB5F9F4ABF7EFA6FBF3AAFAF2A7F7EFA4F7EFA4FBF3A9F7EFA6F6EDA6FBF2AEFCF3B2F6EDAD F5EBAEF6ECAFF9EFB1FAF0B2FBF2B1FEF5B2F6EFABF9F2AEFDF6B2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEBEBEBACACAC5A5B5A5E5F5E868686E0E0E0 FEFEFEF4F4F4A2A3A2525352373737656565E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBC8C8C8363636424242828282C8C8C8EDEDEDF8F8F8FCFCFCFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFF8F8F8C8C8C8797979323232464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F 464646222222747474CFCFCFF4F4F4FEFEFEFFFFFFFFFFFFD9D9D98585853333331C1C1C8B8B8B FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5B2B2B22121210707070F0F0F1919191D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1A1A1A1111110707070F0F0F5D5D5DAFAFAFE7E7E7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFCEDD9FAE1B9FDF3D0 FFFEE9FFFFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EBEBC1E1E1A5F8F8E9FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFCF9FBF5E8E8E2B2ECE8C0FAF9EDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAF1EAEABDE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFDF7F6F4F5E9DB F7D7ABE9C87EDFC571F4ECD3FEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFAF3E1E4BD5AE6BA56F3D39AF7E8D4F5F3F1FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9D7D7D78282823434342121216F6F6F D0D0D0F7F7F7FFFFFFF8F8F8ACACAC2C2C2C4848488F8F8FD2D2D2EFEFEFF8F8F8FCFCFCFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2A4A4A44C4C4C262626959595FFFFFFFFFFFF D4D4D49292923333332E2E2E868686D8D8D8F8F8F8FFFFFFFFFFFFFFFFFFD1D1D18383832E2E2E 2D2D2DA0A0A0FFFFFFFEFEFEFDFDFDE0E0E05454540D0D0D0C0C0C1717171D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1D1D1D141414090909080808303030909090D0D0D0FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF0 F9F9D6EDEDB7E7E7B3F4F4DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF2EDD88CE1B93AF4D18E FEE9D1FFFAF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF4E9 FEE3C6FCDEB8FAE1BDFEF7EDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDF8F0EFE8C4E8E3B3F4F3DDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDF6ECE9ABDCD267DEC06EEBD4A7FAF5EAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF4FBFBDAEAEAB3E2E2A6F8F8EAFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EAEBC1DFD385DEC15D EBD390FDF6E9FEFDFCF1F2F2CCCCCCDDDDDDFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFDFDF5EAECD294DEB757DFBC6FE8D2A6F5F1E9EAEAEADDDDDDDEDEDE EAEAEAF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0C16DD4C66FDACC74D6C86D D6C96DDFD276E1D379E1D37AE0D17DE3D380E1D581D9CE79E2D882E4DA85E1D684EADF8DE9DE8C EADF8EE1D686D7CC7DDDD282E5DA8CE3D78BE1D58AE5D98DEBE091E9DE90E0D586E8DD8DE3D888 DED383E3D886E4D988DFD484E7DC8DEBE090E9DF8BEFE590E9DF86F3EA8FF5EC91EBE287EDE489 F3E990F4EA92F7ED96F1EA90F3EC93E9E288EBE48AF7ED94F5EB92EFE38BF3E890F2E68EEFE089 F0E28BF1E28DE7D883E5D681EFE188EFE288E7DA7EE8DB7FEDE084EEE088EEDF89F0E18DECDE8C E8DC88ECE28BF0E692ECE28EEBE08FEFE494E7DC8DEADF91EEE296EEE298EFE399F2E69CEFE398 F1E698F5E99BF5EA9BF3E899F4E999F2E796F9ED9BFEF3A0F4E995EEE491F5EA97EEE392E7DC8D EFE495F8EDA0F3E79DFAEFA3EFE397E5DA8BF2E796F9EF9AEFE590F5E99BF8ECA4ECE097E6DA91 F0E49CEDE197E4D88EF2E69CF5E99DF0E498FAEEA2FEF3A5F5EA98F0E592EEE391F3E898F2E799 EADE92ECE096F4E7A0F9ECA8F8EAA7F6E8A7F6E9A4F6E699F4E496F1E192ECDD8CECDD8AEEDF8C E8D986EADB8AF4E594F6E697F3E395F1E291ECDD8AEEDF8CF2E391F3E492EEDF90F4E497F8E89C F5E49CF0DF97EFDE96EFDF97E4D887ECE18DEFE294EDDD92EFDF93F1E194ECDF90F0E698F6EEA7 CEC58CAAA3752C28056A663757521EEEE9A6E9E49BE5DE93F4ED9DDDD485A99F4F887D2FAD9F56 D8CB82DFD48AEAE297E9E295E4DD90E8E194F0E99AF0E99AEFE899ECE595E5DF8FE0D989D2CB7C BCB464BDB565CCC374DCD484F5EE9CEAE291E2D98AF0E79CC2B971B8AE69DACF8CC9C084968D71 2F2618100900595422E0DC99D3D17ECCC772D6D17BF0E99BEBE0A196875E6B5D30E7DF99F1E9A0 EBE39CF4ECA7B0A37D100200594D29E6E494FDFBA2E8E49AE9E4A6F0E8A4F1EEA39B904CAFA368 F5E8B0E7DDA2DCD295342B005D552BE8E198F6F0A1E6E289D1C870ADA24ECCC16FFBF1A2E3D98D E9E097F3EA9FEFE79BF2EBA0B9B070281D006D6535F9F6AEA4A15CB2AC72E4D8A7C6BB84C9BC7B B2A856C7BE67F5ED9CE7DEA0F5EABF7E74590C0400363106EBE89CF3ECA4B6AC66BEB169F9EB9F EBDF8CE1D87CDAD27FDACD9C5347196259149C9548D2CD73E4DF85E2DB8CEDE4A5D7CA974B3F16 5E541DE6DF91E8E288E7DD83E4D888E9DD9DEDE3AF574E265D562AB8B779C5C47CB8B86E95934F 3D370C2B220F9F9954F4ECA9D7CE89F4EBA3E9DB91E4D58AF2E295E3D285E0D083E4D387EEDE92 F5EA9BFBF6A893894E2A2100C2BB909E9965A5A45CB2B25BB1B157D2CC84E2D6A64234234E450D ECE5A7D2CD971F18014F481CC1BA89F1ECB0ECE7A4EAE499F1E89BF8EDA0F6EA9EFDF2ABF6ECA4 F7EDA5F7EDA5F7EDA5FBF1A9FBF1A9F6ECA4F6ECA4F4EAA3F8EEA6FFF6AEFEF7AEFCF4ACF8F0A7 F4ECA3F4EBA2F2EAA0F4ECA3FAF2A7F9F1A5F5EDA2F6EEA2F9F1A8FBF2AEFDF4B0FEF5B4FCF2B2 F8EEB1FBF1B4FCF2B5FDF3B5FCF2B4FCF2B3FAF1B0F2EAA9F7F0ACFDF6B2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBBBBBBB6A6A6A2D2D2D727272C9C9C9 F1F1F1FFFFFFF3F4F3A3A4A3535453383838656565E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCD3D3D35F605F3F3F3F464646828282B9B9B9DDDDDDF6F6F6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F8C8C8C8797979323232464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE 9F9F9F464646252525828282E1E1E1F8F8F8FFFFFFFFFFFFFFFFFFE2E2E29F9F9F4C4C4C1E1E1E 7D7D7DE8E8E8F9F9F9FFFFFFFFFFFFFFFFFFFCFCFCE7E7E7A2A2A21F1F1F202120474847757575 8888888A8A8A8A8A8A8A8A8A8989897B7C7B505050252525161616787878CFCFCFF4F4F4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF1EDCDE8E1A9 F6F4D9FEFEF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCF4EAEBC1E1E1A5F8F8E9FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF1E2FFE3C9F9DBC7FAE7DBFEF9F6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAF1E9EABDE1E2A6F9F9EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F3D6D5D3 CDC1A7DFC076D8C566D5D275F2F2D5FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAF4E6E4C576DEC166E0D38DD3D1B0CFCFCBEAEAEBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDD6D6D68A8A8A424242232323727272 B7B7B7EEEEEEFEFEFEFFFFFFF9F9F9BBBBBB4A4A4A3737374C4C4C909090BFBFBFE2E2E2F9F9F9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2A4A4A44C4C4C262626959595FFFFFF FFFFFFD4D4D4929292323232333333969696E9E9E9FAFAFAFFFFFFFFFFFFFFFFFFD9D9D9969696 3B3B3B2A2A2A929292F1F1F1FBFBFBF3F3F3CECECE4A4A4A1D1D1D3F3F3F6C6C6C8585858A8A8A 8A8A8A8A8A8A8A8A8A8484845E5E5E2E2E2E1515153C3C3CB5B5B5E6E6E6FEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F6F6E0E9E9B6EBEBBEF7F7E5FCFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFEFCE0EDCD75E1A82A F4DBA9FEF7EEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFDFBFDF5E9EFE8C0E7E1AAF9F7E9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5EBFFE7CFFBDCC5F9E1D3FCF3EDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFBF4ECDE93DFC347EFCC84F9E1C1FEF8F2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBECEAEABBE1E1A4F9F9ECFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCFAFCF4EEE1A9 E2C354EBC76BFDE5C6FFF5EDFCFCFDF3F3F3F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF6EDFDE3C6EBB86EE2AC52EDD2A2F3EFE6E5E4E2DEDEDEDEDEDE EDEDEDF8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDCE7AD0C26ADCCE76 E2D479C8BB5FDBCE72E6D87FE4D67DD7C873D7C874DDD17CE2D77FE3D982E3D982E2D882EBE08E EADF8EEDE292E0D586DBCF81E5D98CE7DB8FDACE83DFD389E9DD93E4D88DE0D488EFE397F5EA9B E3D889DACF7FE5DA8AEADF90E4D989EFE495F2E797EFE591F1E792E7DD84F2E98EF0E78CE8DF84 EEE58AF5EA92F1E78FEEE48DF0EA92F3EC94E9E28AEEE890F6EC95EFE48EF2E690ECE08AEDE08B F4E590F7E893F8E994ECDE87E1D37CE9DC82EBDE82EADD81EBDE82F6E98DFEF098F7E893F1E28F E8DA89EEE290E9DE8BE4D987E6DB8BEADF90ECE191EBE093F0E498F2E69AF0E49BF2E69CF7EBA2 F0E49AF1E599EEE196F4E99AF4E999E8DD8DF1E693F2E793EBE18AF4EA94F8EE97EDE38DF5EA97 EEE393EEE494EFE495F3E79BFFF9ADF8ECA0F0E596F7EC9DF8ED9BF0E592F6EB9BFBEFA4EFE399 EBDF95F7EBA1EDE198E9DD93F1E59CEBDF96EADE94F7EBA0F3E89AE5DA88F0E691F6EB99F2E798 EEE393EEE394F7EBA0FBEFA6FCF0A8F8ECA5F0E29DE7DA93F8E89BFAEA9BF0E190F1E291F7E897 F5E694EDDE8DEBDC8BF1E291EFE08FEDDD8FEADB89E8DA83EFE08BF5E693F6E794F1E292EFDF91 F3E396F5E599EEDE94E9D88EEBDB92E7DB89F0E591F4E898F7E79AFAEA9DF8E89AE8DB8CEEE396 EFE7A3C0B780968F661E1704211C02C2BE77EFEBA3EFE99FF3EC9EC9C27282782BA79E50DED589 EBDF97E8DB94F1E7A1ECE59EE7E099DBD58DE0D98FEBE59BEAE39AE8E198EBE49AEBE49BEEE89E EAE39AE9E193D5CE7CC8C16FC6BE6DB6AD5DD8D081F9F2A6E3DB95DED5939A9053C5BB81B5AC79 291C16080000575322DCD894EAE69CDAD887E2DE82D6D07EECE2A28E82516C6029E7DF95E9E58C F5F09FFAF0BB9687711505004E4121DBD58DF6F498F5F38CE2DF86EAE2ABD9CE9C958A4AC0B66D E1D991F5EBAFBCAF83312300837844F2EA9EECE78FEEE98DC9C36DA59F3DDFD57AE8DB96EEE3A4 E8DE9AF2EA9AEDE793F4ECA5B6AC72352B0D83784AAAA368B0AF5FFBF9B1A9A367CEC292E3D6A4 887E3EB6AE5EE5DE8BE9E296F6EEB69D916F0A00000C0500C7C282F6F2AACCC37EC3B86AF4EA94 F7EC96EBDF91DBD17FDFD88A72663C392F03B4AC60DBD486DDD685ECE496F0E8A0E1D7953D3318 6A602BE7DF99EAE494DED87FE7DE85E8DD90F3E7AF5B4C2D6F6635F1EDA7C5C288A4A161ADA96B 443C105C5428DAD288E6DD93E0D689F1E69AE1D689EEE095E9DB90DDCD82D5C378E4D187F4E298 F3E199F1E59E8C843F2C25058C8552BDBA84A3A3649D9E579A9C4FDFDE95BBB57953491D2B1F0A D7CE91F9F3ACCCC68B322C01231C00968F62FAF5C1E9E4A5ECE69EF3EA9EF3E79AF8ECA0F6EBA3 F6ECA5FAF0A9F8EEA7F4EAA4F9EFA8F9EFA8FCF2ABFBF1AAF1E7A0F4EAA3FBF1A8F3EBA1FBF3A9 F9F1A6F2EA9FF2EA9EF1E99EF4ECA1FCF4AAFAF3A5F5EEA0F7EFA2F7EEA9FCF3B2FFF8B9FDF4B5 F8EEB1F9EFB3FEF4B7FEF4B7FEF4B7FEF3B5FBF1B3F8EEAFFCF4B5FAF2B2F8F0B0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCCBCBCB7E7E7E4747474D4D4D9E9E9E EEEEEEFDFDFDFFFFFFF4F4F49999994242422828285C5C5CE6E6E6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDE3E4E3999B996364634141415454546E6E6E8181819090909E9E9E B3B2B3CCCCCCF3F3F3FFFFFFF8F8F8C8C8C8797979323232464646DFDFDFFFFFFFFFFFFFFFFFFF DEDEDE9F9F9F4545452828288F8F8FF2F2F2FBFBFBFFFFFFFFFFFFFFFFFFE5E5E5A8A8A8545454 1E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFFF8F8F8D9D9D99191911E1E1E3C3C3C7E7F7E B5B6B5CBCBCBCECECECECECECECECECCCCCCB1B2B15C5C5C2B2B2B232323919191E5E5E5FBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCEEEDC9 E1E1A4F4F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EBEBC1E1E1A5F8F8E9FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF8EDD3F4DEB4FBE4D5FEF0EEFFFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFAF3F2E9C5EDE2AFFBF9E4FFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F7 E0DFDCD4C6A1DBB555DDC26AE3D99EF7F4E2FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF7EDEFD49DE5C87CDDCB7FD6D0A5DADAD5EFEFF0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CFCFCF9090904D4D4D3D3D3D545454 B1B1B1E0E0E0FAFAFAFFFFFFFFFFFFFBFBFBD5D5D58888885C5C5C4747475D5D5D727272848484 929292A3A3A3BCBCBCD9D9D9F9F9F9FFFFFFFFFFFFFFFFFFE2E2E2A4A4A44C4C4C262626959595 FFFFFFFFFFFFD4D4D4929292313131383838A5A5A5F8F8F8FCFCFCFFFFFFFFFFFFFFFFFFDBDBDB 9B9B9B3F3F3F2A2A2A8D8D8DEBEBEBF9F9F9E9E9E9BCBCBC4040402A2A2A686868A8A8A8C8C8C8 CECECECECECECECECECFCFCFC4C4C47B7B7B3535351E1E1E4F4F4FCFCFCFF4F4F4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3DBE3E3ABEBEBC1FCFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFCEEF2F1C2E6C96E E0AE3CF4E3BAFEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFCF7F3EBCAEDE1ADFAF7DFFFFFF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF2DFF4E2BAF8E0C6FEECE8FFF8F8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAE8ECD185E1B340F5D7A2FEEFDDFFFCF9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF6F2F2CFEAEAB3F0F0CD F7F7E7FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3ECC5E2CF70E3C45AF2D38DFAECD0F9FAFCE6E6E6EFEFEFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEED7F2D39AE4BA64E0BB6DE9DAB9EFF0F3EAEAEAE9E9E9 EBEBEBF8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D581E0D27A E6D880E0D378DED175E6D97CE9DB82DED077DCCD78E4D582E5D983E0D57DDDD37CE5DB84DED47F DCD17FE3D886E4D989EEE394EBE092DDD185E0D488E7DB90E8DC92E1D58BDBCF84E4D88CE8DC90 F1E698EDE293DACF7FDACF7FEBE090E5DA8AE4D98AE4D989F1E793F2E893E8DE85F1E88DE2D97E EAE186F7EE93F4EA91EFE58DF4EA93EDE78FECE58DF1EA92F2EB93F3EA93F4EA93EADE88F8EC96 E8DB85E9DA85F4E590F5E690EFE189E7D981E7D97FECDF83EFE286EEE185ECDF83F4E68EFCEE99 F2E390E9DB8BF2E596ECE191E4D989E9DE8FEDE293E6DB8CF1E697EADF91E6DA8EEBDF93F3E79B F9EDA1F9EDA1F0E498E6DB8CD3C879EEE393F3E898F0E592E8DE89D5CB74DFD57DEEE48BE9DF88 F2E893F3E896EADF90ECE192F1E599ECE094EFE297F4E99AEEE393E9DE8CF3E895E8DD8DE4D98A EDE194EDE295EBDF93F3E79BE9DD91E7DB8FEFE397F4E89CF2E69AF6EB9DF0E593E9DF8BE8DD8B F0E593F1E695EDE293ECE193F9EDA1FAEEA4F2E69DF1E59DF2E69CEFDF90F1E291F1E291F9EA99 F5E597EADA8CEFDF91EFE08FEDDE8DECDD8CEDDE8DEEDF8BE8DA82E7D783F2E38EFDEE99F9EA97 F3E493F4E496F4E496F4E497F3E396F1E396E9DD8AE4DA85FAEE9DFEEEA1F7E79AEEDF8FF4E896 F2E79BF1E8A5BEB581918A620C0302615B19F9F2AAE8E298E8E095A0984D6C6517D6CE83E5DC91 E1D78FE2D892E0D691E7DC9AE8E19DF9F2AEF9F2AFE6DE9DEBE3A2EEE6A5E9E1A0F7EFAEF3EBAA EBE3A2E4DC9AE3DA8FF1E696EDE293F3EA9BD2C97CA59E53D7CE89E8E19EDED69BBAB07B9C9562 3830181C0F002B220CDFDD8DDEDA81DFDB85F3ED9EE0D98CFAF0B0B5A9773B3008D9D27FE6E37B D9D673FAF4ABA598751907063F311AC9C088E8E38CDCD97CDBD879CCC872F0E8AAA59A64BFB578 FBF3AAFAF2ACB6AC70271900877958E4D8A5E9E293F8F295DAD475979038D4CF6CE4DE81F1E7A2 F0E3ACEBE0A0EFE89BF2EB9BBDB46F22180362562AE7E4B2FFFCBEA1A04FAEAB5FFFFFC4BEB17E 91844FA89D5ED8CF84D4CD7EDCD691CEC995190F05090100847F51EFE7B8C4BD81ADA657F4EA93 E2D97FC5BB62DED47EF1E4A3948952352C02B4AD5EEDE793DCD589E1D895E3D99DE0D69842390C 564F11DDD688DDD688F0E99BE5DD90E9DD8FF1E4A5675B2952480FEFE8ABB4B071C8C57FF0E9B9 574C2C5C521EC3BB73DCD682D8CD7BE3D687ECE291ECE191DFD485E0D488D8CB81DFCE86F5E49C EDDC94F3E09B8B7D472116009D975ABEBA758B8B41CDCE8691914FC3C289B8B481736C3A0F0701 AFA56EF0E9A2F5F0A5CBC6872B25012E27008D865BFBF5C2EDE7ACE8E19CF4EAA2FDF1A5FDF1A7 F8EDA5F8EEA7F8EEA7F3E9A2F3E9A2F8EEA7FCF2ABFBF1AAFAF0A9FCF2ABF9EFA8F0E79EF3EB9E F7F0A2F6EFA2F1E99EF2EA9FF5EDA2F6EEA3F9F1A6FDF5AAFEF6ABFBF3A8F7EEABFFF7B9FBF1B3 FBF1B3FBF1B3F5EBADFCF2B4F7EDAFFBF0B2FFF9BBFCF3B5EAE0A2FDF5B6FFFBBDFDF6B8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2A9A9A94646462F2F2F777777 B9B9B9ECECECEEEEEEF1F1F1E0E0E08181812928291313134A4A4AD3D3D3F2F2F2F6F6F6FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F4D4D4D4999A996060604848483C3C3C303030292929 3030304F504F808180D5D6D5F7F7F7F7F7F7C8C8C8797979323232464646DFDFDFFFFFFFFFFFFF FFFFFFDEDEDE9F9F9F4444442A2A2A9A9A9AFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFE5E5E5A8A8A8 5555551E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFFF4F4F4CCCCCC8282821E1E1E555555 AEAFAEE2E2E2F4F4F4F7F7F7F6F6F6F7F7F7F2F2F2C9C9C94D4D4D282828383838A9A9A9F4F4F4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC EDEDC9E1E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EBEBC1E1E1A5F8F8E9 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAEFECC9E5E0A6F7F1DFFEFBFAFFFEFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFBF6FCEBD2FBE3BBFEF7D6FFFDECFFFFFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFDFEF4F2EEE8D7AADFB041EAC27AF8E0D1FDF6F3FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF4FCE4C5F0CE91E1C26FE4D29FF1EFE9FAFAFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDD3D3D39090904949492A2A2A595959 9D9D9DE1E1E1F9F9F9FFFFFFFFFFFFFFFFFFFDFDFDEFEFEFCACACA9797976767674B4B4B3A3A3A 2E2E2E2828283737376161619C9C9CE4E4E4FAFAFAFFFFFFFFFFFFE2E2E2A4A4A44C4C4C262626 959595FFFFFFFFFFFFD4D4D49292923131313C3C3CB1B1B1FFFFFFFEFEFEFFFFFFFFFFFFFFFFFF DCDCDC9C9C9C4040402A2A2A8C8C8CEAEAEAF9F9F9E0E0E0ACACAC383838343434868686D1D1D1 F0F0F0F7F7F7F6F6F6F6F6F6F7F7F7E5E5E57F7F7F2E2E2E2A2A2A696969E2E2E2FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFEFFF4F2D9E5E4AEECECC5FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF6F6E1E4E0A0 DFC96FE2BE60F5E9C9FEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDFAFCEDD7FAE3BCFCF5D2FDFDE8FFFFFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F2D8E6E2ACEFEAC7FDF9F6 FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5FBF7D2EBC77BE1A848F6E1C1FEFAF5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFCE5F5F5C9 E5E5A9EDEDC8FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF4F3DBE4DE9CDCC75BE4C656F2E3AEF3F2F3CECECEDFDFDFFAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFF4E5BDE4C66FDEC569DED496E0DDC5E7E8EAF6F6F7 FAFAFAFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDD89 E7D981EEE088E3D57ADACD71E8DB7FE6D87FDDCF77DFD07BE8D986EADE8AE7DD87E0D680E5DB85 DFD581DFD482E6DB89DFD484E0D586E5DA8BE3D888E3D78AEBDF93EDE197EADE92E5D98CE2D78A E0D486E1D686E5DA8ADCD181DACF7EE9DE8EEDE291E5DA8BE1D686EDE28FF2E893EBE188F0E78C EAE186EBE287F4EB90F6EC93F0E68FF0E68FF4ED96F2EA93F5ED96F1EA93F0E690F3E993F5E993 F5E993ECDF8AEFE08BF6E793F4E58FEFE189EDDF86E5D87CE1D478E7DA7DEDE084ECDE85F2E38C FBEC98F8E898F5E698F1E495F2E797F2E797E7DC8DDFD484E8DD8EE2D788E7DC8CEDE292EFE496 EFE395EDE293EFE396EFE495E8DD8CE4D98AEEE392F0E592EBE18CEDE38DE2D881E2D881EDE38B F3E992F2E892EFE491ECE190EFE494F4E89CF4E89CF1E599F5E99DF1E697EBE091EEE392E9DE8D E9DE8EEEE393ECE190E9DE8FEEE394E8DD8DE4D98AE8DC8FEADF92EADE91EDE294F5EA97EDE38E E6DC89E6DB89E8DD8BE8DD8CECE192F2E698F2E699EEE395EDE196EDE194F2E292F4E594F5E696 FAEA9AF5E597EBDB8EF2E294F1E193F2E392F2E392F0E18FEDDE8AEEDF8BF4E591F5E692F3E490 F3E491F4E592F4E593F2E391F1E292F1E292F1E392F0E490E7DD88F4E897F4E597F1E293EFE08C F2E694F8EE9FE2DB96BDB37F8A825A0B0300B2AC68FAF4AAF9F7B2A39B52827A31E9E199EDE59C EAE19AE8DF99EFE6A1C9BE7CA1985A7F76357169286A61216B63246E66277067287A71338B8244 9F9658BFB678D9D091E7E099EEE395F4E89BE0D68AF4EBA1DDD58D948C49C7BE82F5EDB7DCD4A4 4D451E100800100500B2AB6DEAE591F7F58FDDDA76EDE894F1E7ADB8AB803F3205B9B06CF0EB8B E7E779CCCC72A09860190C00382C19D0C594EAE49DD7D27CE2DD89E0D98EE0D993A29A4BB0A85D F2EAA9F2E9A9C0B67C3F3403827643EADFAAEBE0A4E1D891D7CF7BAEA64DCCC467F3EC8FE9E28B D6CC80DED393DCD194F8F0B3B4AB69312A00686024C4BF85B8B17ABCB67BEAE89DB9B56BC3BB78 978D50C5BA7CE4D998E7DE99EBE3A0E8E3A74742190500004B4625E4E09AD4CB9CB5AB76D2CA7C D9CF74DFD677D9D074E0D687A499612E2400C6BF75E9E48CDDD782D9D18BEFE4ACC9BD89493E17 6B631DEAE490E1DC83DAD381E5DD93DFD696EDDEA681733C49400BE0D88BBFB972D0CB90EEE8B3 4F461D75693FEDE4A7EEE798C7BF67DCCF7AE9DD88DED280E6DB8BDFD587D2C77CE8DD94F2E49E DFD08ADECE878573384D3F0DBBB083DDD79AB8B668C2C56D929546BCBB7FAAA77A7D7656130A00 958E52EEE7A2EFE99AEFE99EB4AE6F645E2A635C316D663CFBF5C2F5EFB3F3ECA7F5EBA3F8ECA3 FAEDA5FAEDA7F9EFA9F7EDA7F4EAA3F5EBA5F9EFA9FFF5AFFAF0AAF5EBA4F8EEA8F9EFA9F6ECA4 F9F2A5FBF4A7F8F0A4F3EBA0F4ECA2F6EEA3F5EDA3F5EDA2F7EFA6F8F0A7F4ECA4F6ECACFFF5B9 F7EDB0F8EEB0FAF0B1F8EFAEFDF4B3FEF5B3FFF7B5FEF7B5F1E8A9DDD395F8F0B2FEF6B9F9F1B4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEEEEEE9C9C9C2D2D2D0A0A0A 3F3F3F5E5E5E7272727171717272726A6A6A3939390D0D0D0505052121216565658A8A8AACADAC E5E5E5FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF4F4F4D6D6D6B4B4B4A0A0A08D8D8D757575 5C5C5C444444303130373837888988C8C9C8EDEDEDCACACA797979323232464646DFDFDFFFFFFF FFFFFFFFFFFFDEDEDE9F9F9F4444442B2B2B9D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5 A8A8A85454541E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFFF2F2F2C7C7C77C7C7C1E1E1E 666666CDCDCDF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C3C3C3363636313131636363C3C3C3 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCEDEDC9E1E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EAEBC0E0E1A4 F7F8EAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E0E1A2F5F6E1FEFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDF9FFF5DFFFEDC8FFECC8FFF4E0FFFDFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7F7F9E4E2E0D8C597DDAC36EFCA88FFEFEFFFFBFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8FFF6DEF4D898E1B957D7BE7EDEDCD6 F1F2F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBD3D3D38E8E8E4747472E2E2E535353 9A9A9ADCDCDCF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1D6D6D6B7B7B7A0A0A0 8888887171715757574141413636364E4E4EA1A1A1D7D7D7FBFBFBFFFFFFE2E2E2A4A4A44C4C4C 262626959595FFFFFFFFFFFFD4D4D49292923030303D3D3DB5B5B5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDCDCDC9C9C9C4040402A2A2A8D8D8DEBEBEBF9F9F9DDDDDDA6A6A6353535373737909090 DDDDDDFBFBFBFFFFFFFFFFFFFFFFFFFEFEFEE3E3E36D6D6D272727464646929292EDEDEDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFCFAFFF1E5FAEDCFF2EFC1F6F6D8FEFEFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF4EFD4 DFCE7FE4C877F0D092FAF0DBFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF6EDFDEED7F0ECBBF3F3D0FCFCF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F2D6E1E2A6EBECC6 FDFEFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF9FAE1EDEAA6E2C672E0B265F6E9D2FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5 F9F9DEE1E1A0EAEABDFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFBF2F0EFD0E3D276E0BF40F0D691F9EBE1E3E0DDECECECFCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFFF3EAF2D89CE1C051E5D37EEAEAC9E1E3D9E3E3E4 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E1D27EDDCF77ECDE86E5D87DDDD074E5D87CE2D47BDFD179E4D580E9DA86E6DA86E1D682DED380 E3D886E2D785E6DB89EADF8DE2D785E0D586E8DD8EECE190E9DE8EE9DE8FE6DB8CE7DB8DE8DD8E E0D585DFD484D7CC7DDCD180DCD17FD9CE7CE3D985E6DB8AEADF8FE2D787EAE08CF6EC97F3E990 F1E78DF2E98EF3EA8FF7EE93F6EC93F3E991F3E992F6EE9AF3EB96F6EE99F0E994EDE48FF0E691 F6EA96F1E591F0E38FEDDE8BEEDF8CF1E38DF2E489F2E589E8DB7FE2D577E5D87AEDDF84EDDF86 EDDE89EFE18EEDDD8EE8DA8CEDE091ECE192F2E797E8DD8DD9CE7FE6DB8BE4D989EADE8EEDE291 EEE393EEE393F1E694EFE492F5EA98EADF8BF5E998E9DE8CE8DD8BEBE18CEEE48FEFE590EAE089 ECE28CF6EC95F2E891EAE08BEDE390EDE292EFE397F5E99EF5E99FF4E89CF3E799F1E697EEE393 EDE28FEFE58FECE28CE7DC88E8DE8AEEE490EDE290E9DE8DECE191F1E696F0E595F2E798F0E593 EDE38EE9DF8AE7DC8AE9DE8DEFE492EFE495EADF90ECE192EDE393ECE192EBE090E4D583DECF7D DDCE7DEADA8CF8E89BFBEB9EF1E194EEDE90F3E394F5E694EEDF8CEADB88F4E592FDEF9DF8E996 EFE08DEEDF8CF3E48FF2E38FEFE08BEEE089F1E38CF5E892F4E894ECE18FF2E596EFDF91F0E190 F3E48DF5E992F8EE9CD7D087C0B7806E67461B1400E7DE9FFFFAB49087418A813BF7F4B2D5CC87 F8F0ABF6EDA99D94505C5314554C096960209A924CB3A963C2B973CCC37FCEC581CDC381C8BF7E ACA1608B81427C7333776C2E7D732DCABE73EFE298F3E99FE2D891EAE19DD9D192867F48DFD9A6 7F7749120D000400006F662DFFFAB2E1DA8DE2DD7BE5E17AEDE692E3D6A74C3D19B2A773FEFDAC DAD676EBE7909F9B591D1406251C04C1BC7AE7E193E3DD8CE8E395E6DD98D9CE979A8F57C9C366 DBD678FDF6AEB2A9732C2100786E3EFFF9B5E3DC90F0E89FD2C686B0A660DDD581ECE382E4DC88 E7DE8FE8E08DD1CA7EEEE3AAA79A69190F046A6327DAD7879F9C4DBCB6779E9661C0BB79E7E19A 5D560CACA459E2DA91E5DD96E5DC9FFFFCC5716A3C070300211D00DDDBA2D8D587B5AE6EDBD096 DBD18CDCD279EEE584FFF69DC0B674453A04AEA56BECE89DD9D481DBD484E6DC9C9F935B251903 82783CE7E094EAE58DCBC66BECE593E0D792EADFA964522B3D3006BDB761D1CB78F1ED9FEEE9AB 453B1B6B6133F9F1AFE9DF98D9D081EEE38DE7D882E0D47FE7DC8AD9D281DAD286E5DE95CDC47C D2C883DDD1886051223E2F00E1D49CF7ECBEABA463CCC976B1B158A3A557A4A26B757049150C00 92895DF3EEACE2DE8AE8E491E7E199847E3F7D7742645E3B544D27FFFCC4FDF7B8F5EEA9EDE39C F5E8A1FEF5B1FEF1ACFCF2ADF9EFAAF8EEA9FCF2ADFCF2ADFFF6B1FBF1ACF5EBA6F7EDA8FBF1AC F7EEA6F2EBA0F6EEA3F5EDA2F5EDA2FBF3AAFCF4ABF8F0A7F5EDA5F7EEA8F8EFA9F6EDA9F5ECAD FDF3B8F9EFB2FDF4B5FEF5B2FDF4B1F9F0ACF8F0A9F7EEA9F7EDA9FAF1AEFBF2B3F6EEB0FDF4B9 FBF2B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF3F3F3AFAFAF4D4D4D 1C1C1C2727272B2B2B2E2E2E2E2E2E2E2E2E2C2C2C1E1F1E0F0F0F0606060C0C0C2B2B2B545454 878887D9DAD9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7F6F6F6EDEDED DCDCDCC3C3C39999995151511F201F444544979897E3E3E3CDCDCD797979323232464646DFDFDF FFFFFFFFFFFFFFFFFFDEDEDE9F9F9F4444442B2B2B9D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E5E5E5A8A8A85454541E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFFF4F4F4CDCDCD838383 1F1F1F656565CBCBCBF3F3F3FEFEFEFFFFFFFFFFFFF9F9F9D3D3D39494942626264A4A4A9A9A9A DEDEDEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCEDEDC9E0E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBF5EEEBC4 E7E1A9F9F8E5FFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFDEBFEF6D5FAE2B9FBECD3FEFCF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF1F2F0D3D2C5C6B580DAAD3FEED495FEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFEEF3DF9EE0B545CDAD5D CEC8B7EAE9E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3D8D8D88D8D8D505050313131515151 9F9F9FD7D7D7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF8F8F8 F6F6F6EBEBEBD8D8D8BEBEBE8B8B8B4545452323235D5D5DAEAEAEF7F7F7FFFFFFE2E2E2A4A4A4 4C4C4C262626959595FFFFFFFFFFFFD4D4D49292923030303D3D3DB5B5B5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDCDCDC9C9C9C4040402A2A2A8D8D8DEBEBEBF9F9F9E1E1E1ADADAD393939353535 898989D7D7D7F9F9F9FFFFFFFFFFFFFFFFFFEAEAEABCBCBC5050502E2E2E737373C3C3C3F4F4F4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFAF5FAE5C7FAE8C3FCF7D7FEFFEFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF6 F4E8C1E1BC5BECC87EFCE2C2FFF6EEFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF9F8EBE4E3AAEAEABFFAFAF0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFBF7F4F0D3E8E7B1 F0F0CEFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF3F2CCE1D976DFC86EE6C589F8EEDCFEFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFDF8F8E9E1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFAF2F0DFA1E6C457EFCB79F7DCB3F0EAE1F6F5F5FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F1FBE1B9EDCD79E1C352E9DB98F1F0E5E9EAEA E9E9E9FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDFD07CD5C76FE0D27ADACD72D3C66AE0D377E0D278E5D77EE6D782E2D380DED27ED8CD7B DCD181E2D787E3D888E3D886E1D684E0D583E6DB89E7DC8AE5DB86E2D785E4D988E3D888E3D887 E4D989E2D785E6DB89DBD07EDBD17CDCD27DE1D782E6DC85E4DA84EBE090E4D989E9DF8BF5EB96 F3E990EBE287F0E78CF6ED92F4EB90EFE58CF1E78FF6EC95F5ED98F5ED98F8F09BF6EE99F3EA95 F4E994F1E490F6EA96F6EA96EBDC89E7D885EEE089EFE287EBDE82E9DC7EE9DC7EE9DC7EE5D77D E5D77EEADB86EFE08FF2E295EDDF91EFE293E5DA88E8DD8BEFE492EADF8DE9DE8BE8DD8BEBE08C EDE38EEEE391EFE591F1E792ECE28DEFE590E3D982F1E792E6DC87E6DC87F0E691EEE390F2E795 F0E592EBE08EEDE38EE9DF88E4DA84EADF8CEFE494EEE296F1E59AF2E69CECE094ECE093EEE394 EEE393E9DF8AEAE087E2D87FDBD17AE5DB84EAE089E3DA84E1D782E9DE8BF3E896F2E795F2E796 E8DE89EBE18CECE28DECE28DEEE390F0E593F3E896E9DE8CEEE393F2E797F0E595F1E694E8D985 F0E18DF8E998F5E597ECDC8FE9D98EF2E296EEDE90F2E394F4E693EEDF8BEBDC8AF2E392F6E698 F6E797F4E592EFE08DF4E590F2E48CEBDD85E7D980E7DA80EADE82EADE8AE9DE8CF2E596EDDE8D F1E28EF1E38AF5EA90EEE58DDCD689CCC3895E573A48411BFFF7BAC0B774635816F8EDACE1D796 FFF9B9B4AA6A473D0451480CA09755CEC685F1E8A1E3DA8DEADE91E3D98CDFD58AE0D489E0D68B EADF97F5E9A1F3E7A0E2D790C5B873A99D5573651E8B7E37C3B972EFE5A1EDE4A5E6DDA1D3CC97 8982521D16000C0600443E1CEFE99CEBE294FCF5B1DBD183E1DA84F5EE9D6F642E908554EBE2A0 EBE495DDD48DD9CE9D2B2111120C00A7A360FCF8B0DBD87BDEDB7BD1CB7DD7CB9B8D804DC2B96E D0C971E7E18EBAB5712E27006B623EFCF3B8DAD386E6DF8AE7DF8E968C45CABD78F7EC9BDFD679 F0E799D6CF85DED788F0E8A1AA9F671A0E064D4210E8E3A0E6E48FD7D77FACAA5FD5D195CDC68F 7F7834817C2BE8E288E7E18ADAD288F3EAB2A2996E0E0700120E00B5B584E6E6A6B1AD5EE5DF88 E7DF94E4D99DF3E898F5F099CABF72443702A19857E9E396D3CF8ADAD491F4EBAB91874A2A2000 9F9554E2DA95DFD88ADFD887E6E08EDCD489ECE4A2504515574713BFB374C3BC6DE8E28DE1DB97 2D2504595222E9E1A5D6CE86E5DC87ECDF90E2D587E6D783E9DC88E3D887EEE698EDE79DC6C179 E6DF99CCC581675E21574B0ADDD08AE7DB9DDDD499E5DF99B6B363E4E394B5B26F65602C160F00 665E32DED59EE8E295EAE589D8D284F0E9A6595327948E5A7E784B6B6635FBF7B9FBF6B1F7F0A8 F0E69FF6E9A5FFF3B2F9EDA9FBF1ACF7EDA8F9EFAAFCF2ADF7EDA8FCF2ADFEF4AFFBF1ACFBF1AC FDF3AEFBF1AAFEF6ACFDF5ADF7EFA6F1E9A0F3EBA3F8F0A8F8EFAAF7EEAAF9F0ADFCF3B0FDF4B2 F9EFB1FEF4B9FCF2B5FFF7B7F9F0ACF2EAA1FBF3AAFAF2A9F5EDA5F3EBA3F8EFAAFFF8B6F7EEB3 FDF4BBFDF4BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCD4D4D4 9898987878787B7B7B7A7A7A7A7A7A7A7A7A7A7A7A7575755859583131311515152323236D6D6D 959595B8B8B8E9E9E9FDFDFDFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFBFBFBFCFCFCFEFEFEFFFFFF FDFDFDF6F6F6EEEEEED0D0D07F7F7F363736303030838383DEDEDECDCDCD797979323232464646 DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F4444442B2B2B9D9D9DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE5E5E5A8A8A85454541E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFFF8F8F8DADADA 939393212121535353ABABABE6E6E6FBFBFBFEFEFEFFFFFFE8E8E89A9A9A4D4D4D282828707070 CFCFCFF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFCEEEDC9E1E1A4F4F3DDFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF7 F8EBCEF5E1B5FDF7DAFFFEF0FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1 FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF7FAF8E1EBE1ACF1EBC8FDFCF6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F5EADDDBB5D0C179DBB856EEDAA5FEFEFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFEF3E1AAE1B547 DAB351E2D2A8F2EEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFACDCDCD919191454545373737595959 989898D6D6D6F1F1F1FFFFFFFEFEFEFDFDFDFDFDFDFEFEFEFFFFFFFEFEFEFDFDFDFBFBFBFCFCFC FFFFFFFFFFFFFCFCFCF5F5F5EDEDEDC1C1C16A6A6A2B2B2B3D3D3D979797F5F5F5FFFFFFE2E2E2 A4A4A44C4C4C262626959595FFFFFFFFFFFFD4D4D49292923030303D3D3DB5B5B5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDCDCDC9C9C9C4040402A2A2A8D8D8DEAEAEAF9F9F9EAEAEABEBEBE414141 303030797979C8C8C8F5F5F5FEFEFEFDFDFDFDFDFDC7C7C77F7F7F393939484848A4A4A4EEEEEE FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFAF2EDE3B5EFE7BBFBF9E4FFFFFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC FEFCE8F3E1A6E1AD39EDC980FEF2E4FFFDFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9EEE2E2A7E9E9BCFAFAF0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFECD9FAECC9 F6F2C8F9FAE2FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF9F2EABBE0C855E8C871F5D7ADFCF3E7 FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEF8F8EBE2E1A6EBEAC0FBFBF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAFAEACCF3D189EBC667E1C46CD3CDB9E5E4E3FBFBFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF5E3EDCF79E3C75FDDCE72E1DCAFE9E9E4 F0F0F2F7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE1D27FD9CB73E4D67EE1D478DED175E2D579E3D57CE7D880E1D27DDCCD7ADCD07F DBCF80DFD386E1D687E1D687DFD484DED381E7DC8AEDE38FE6DC87E5DB85E6DD86E7DD89ECE190 E6DB8ADFD482E8DD8AE9DE8AE1D782E1D781E4DA83E9DF86EAE088EAE089E9DE8EE7DC8CEBE18D F2E893EEE48BE2D97EEBE287EDE489E9E085EAE087F1E78FF1E790F1E995F3EB97F9F19EF8F09C F6EC98F7EC98F3E694FDF19EF8EB99F1E190EBDC8AEADB85EBDE82E7DA7CE7DA7CEBDD7FEEE183 EFE187F3E58CF2E38FF3E492F5E598EFE095EDE191EBE18DE7DD8AECE28EF3E895ECE28DE7DD87 E8DE88EDE38DF3E992F0E78FE9DF87EEE48CECE38AE9DF87EEE48CF4EA94F2E892F1E792F1E694 EFE492F2E796F0E594EADF8CE9DF86E2D881E2D783F3E897F6EA9EEDE196EEE298EDE196EBDF93 EADE91E7DC8DE7DD86EEE586EBE286E6DD81EFE58BEDE389E2D87FDDD37BE3D984F0E692F4E996 F5EB98EAE08BEAE08BEBE18CEDE48FECE28EE9DE8BEFE591E7DC8AF0E593F4E998F1E695F7ED99 F7E793F3E490F3E491F0E092F0E095F5E49AF4E498F2E295F2E392F2E391EFE08AEEDF8EEFDE91 EBDB8EEFDF90F3E491F2E390F4E68FF2E48BEADD82E4D77AE2D576E2D678E4D883E9DE8EF3E698 ECDD8CF0E18CEDE084F2E789ECE389E2DC8CCBC3856862387C754AF6F2B86B5F20DED899FFF5B9 EBE0A17D7243413600AAA466F5EEAEF9F1B0E2DA9AECE39ADBD17BD4CA72E3D881E8DD87E3D883 E1D582DACF7DD4C978D9CD7FE9DD8EECE091EDE097ECDD99C7BB76A79C59988D4DC1B77ADBD59C DFD7A23F3A1C130E002C2814C8C59AEEE699E4DC87DCD18EE1D59DEBDFA57C722C676017ECE78C E8E190EDE3A6E3D5AF2D20130F0501A49E6FFFFFB7E4E28EE3E186DBD77EDAD48699914DCAC17A EFE699E4DB95C9C07F2F2A0068632DE1DB97ECE59FEEE69BE6DE8F817927B9B05DF1E794DFD483 E8DC8DE2D989E7DF94EFE5A4D1C78F281D00342A0CE0DA9CE8E39CEAE798ECEB98BDBC6AC8C67B ACA5717C7535D4CF79DCD872D2CE6BE4DD8DC1B9831F14020C07018A8862DDE1A6A7A95FD7D380 E8E386DDD77FE4DA8FECDF9CBEB0714A3B00968C4AF3ECA0DBD888C3C07CE7DEA96A5C32514611 B1A962F7F0A2D2CB7AD8D182D0C87EECE3A0D1C885453C0E6D6325D7CE82E9DF96F7EEAECDC588 3C34047E773EF4EFA8EEE69CE1DA8DD8CC7BDFD285DDCE82DED17DE5DA88ECE494D7D184E8E49B E5E19BCDC9854743067C753CE7DE99DDD18BE2D88FDED58AEDE69CD3CD87AEA869827D47211C00 5C562BE9E2A9D4CD87F0EA95EEE88DDED78DE9E2A63F3809C9C38F8A85516B662DF3EFACF4F0A6 F7F1A7F8EEA8F7E9AAF4E6A8F1E4A2F6ECA7F3E9A3F7EDA8F9EFAAEEE49FF6ECA7FDF3AFFCF2AD FDF3AEFEF4AFFAF1A9FCF4AAFEF7AEFCF4ABF9F1A8FBF2ACFBF2ADF7EEAAF8EFADFBF2B1FDF3B4 FCF2B3FCF2B5FFF6B9FBF1B3FEF4B1F2E9A2EDE59BEFE79CF2EB9EF6EEA3F9F1A8FAF2AAFBF2AE F8EFB3FBF2B9F8EFB7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3F3F3DBDBDBCFCFCFD0D0D0D0D0D0D0D0D0D0D0D0D2D2D2C8C8C89192914D4E4D262626434343 B9B9B9DDDDDDECECECF9F9F9FFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E8E8E8CACACAD0D0D0E0E0E0 E9E9E9ECECECEDEDEDEDEDEDD8D8D88888883D3E3D2E2E2E818181DEDEDECECECE797979323232 464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F4444442B2B2B9D9D9DFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE5E5E5A8A8A85454541E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFFFCFCFC E9E9E9A6A6A62929293C3C3C7B7B7BC9C9C9E9E9E9ECECECE4E4E4BCBCBC6363632525254D4D4D A1A1A1F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFDF2EDCEE9E1ACF7F3E0FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFBF8FFEAD5FFDFBDFFEFD3FFF9E8FFFEFBFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3 F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7E8E0E1A4EAEBC1FCFCF5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F6E5E6DEA4D9C96ED9C467ECE0B1FEFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E2B8 E2B954E2B84DEFD694F9EFD6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5D9D9D99494944A4A4A1C1C1C3C3C3C 868686C9C9C9EAEAEAEEEEEEECECECECECECECECECEEEEEEF8F8F8FCFCFCF6F6F6E2E2E2C8C8C8 D2D2D2E3E3E3EAEAEAECECECEDEDEDEFEFEFC9C9C97373732F2F2F383838949494F4F4F4FFFFFF E2E2E2A4A4A44C4C4C262626959595FFFFFFFFFFFFD4D4D49292923030303D3D3DB5B5B5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDCDCDC9C9C9C4040402A2A2A8D8D8DEAEAEAF9F9F9F4F4F4D1D1D1 5050502B2B2B5C5C5CA7A7A7E2E2E2EDEDEDE6E6E6D5D5D59292924B4B4B4141417A7A7AD1D1D1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E3E4ACE7E8B7F8F8EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFEF6F7F6D3ECD98DDFA930EDCD88FEFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EDE2E2A8E9E9BCFAFAF0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF9F2F7E2BC F9E8C1FEFADFFFFFF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF2F3E2ACE1B642EFCA7CFFE9D2 FFF9F4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFAF8ECEAE1AEF0EAC1FCFBECFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF5EEFBE1BAE8C763D3B539C2BD93DBDBCF FAFAF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF9F3F9EACCE3BA4BDBBE54DBD598DFE1CB E8E8E6F7F7F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFECDD87E5D780EADC83E0D378DDD074EBDE82E8DA81E7D981DBCD76DACB76 E3D583DED282E1D486E0D586E5D98AE7DB8AE5DA88E8DD8BE7DB87DED37FE4DA83EBE08AE1D682 E9DE8CE6DA88DAD07CECE38EE9DF8AE3D983E9DF88EBE18AE4DA82DED47FE5DA86EDE292F1E696 F4E997F5EB96EFE58CE0D67DF1E88EE7DE83E2D97EF1E88DFBF198EFE58EE7E08BEAE28EF2EA96 F1E995EFE590F1E791F8EB96F9ED98F0E390F6E996F0E18FE4D780EDE284EFE284E8DC7EE7DC7D F3E688F1E489EEE289EBDD88EBDC8AF3E597F5E699E4D885F4EA93EDE38CDDD27CE7DC86E8DD87 FAEF98EBE18AE5DB84F0E48EF7EC95F4EA91EAE187E8DF84EAE186E1D77EF2E890E9DF88EFE590 FBF19CEDE290EEE392F8ED9DF4E998FAF19BECE28CDBD17FF5EA9AFAEEA2EADE93F5E99EFBEFA4 F8ECA0EEE395E7DC8CE0D67FEBE385F1E78AEFE58AF1E88DE1D67DE4D980DAD077DBD078E8DD85 F1E68EF8ED95F3E892EDE28CEAE089F1E590F3E892F0E690E8DC87E3D884F0E692F3E895F0E593 FAEE9AEFE38EEBDC88EBDE8CE9DB8BEEDE91F5E79AF0E294F2E194ECDF8DE9DC87EBDB87EDDE8B EDDD8FE9DA8AE6D786EBDC88F4E590F2E48BEEE087ECDF82ECE081EFE282F3E687EDE18BF2E894 FAEE9DEEDF8CF2E48EEFE188EFE588F5ED93DED787B8B372726E3C918A5FB6AF79897F44F2E9AC E2D8984A411A5E5518DFD696F2E8A8F3EBAAE7DE9BDFD694EEE599E3D97CE2D77BEDE287DDD277 E2D77DF4E990EBDF89E4D882E7DB87F0E490EBDE8BE8DA92D4C581D8C880E1D489D2C780A69D5D C0B98398946B0E0C00141100888458EAE5B1E1D98CE3DA85EAE098EEDFB3A6976D5A500FE4E178 EFED81DEDA85E3D6AF46362A0B0000746A4DE6DFAED4D087E4E486B9B566F4EDA5989242BDB95A F5F094E9E19BE4D6A7423715645D2BD7D389E3DD89D8D37FEAE198776C23C5BB6BF0E78DE0D77E EDE190E0D589F0E99CE6DE9BCDC28C24190D2B220CD8D08CF2EC9FD7D185EAE69DE7E49AE1DF8B ABA956605720D4CD89D2CE75D6D46DE0DC7DE1DC9249401A0800004A4124DCD9A9B6B771BFBE6B EAE58FDBD57DC4BE61D2C96FC7B97F291800988A56DAD284DED88AECE59FD6D18E493E1D504214 E1D697E0D888D8D37AE3DD86DDD58AFDFBBAC5BA7C392F077D7435E5DD92E8E289E8E194A59960 251909AAA16BE9E398F2EC96E0DA80D6CF78D8CC80E1D285F0E190DFD482DAD181E4DC91E2DA92 C9C580736F2E3C3900AAA661F7F0A7ECE397DBD384E8E190E9E596D9D48DC9C185645A22150C00 847C47F5ECAFE3DA94EFE796DED77FF1EA90ECE39EB9B07B332B00FBF6C660582E817B48FFFCB7 F1ECA1EAE396F0E59EF6EAA9F5E7AAEEE3A1F8EDABF5EAA8FBF0AEFBF1ACEBE19CF1E7A0FAF0A8 F9EFA8FAF0AAFDF3AEFBF2ACFAF2A8FEF6ACFDF5ACF8F0A7F8F0A9FBF3ADFCF3AEFCF3B1FFF6B3 FEF5B5FAF1B0FCF2B4FDF3B6F7EEADFEF5B1F8F1A8FBF6ADFAF2A7F6EFA3F5EDA3F8F0A8FCF4AC FDF4B0FFF5B7FDF4B8F6EDB2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF8F8F8F5F5F5F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7EAEAEA9E9F9E515251343434 5E5E5EDCDCDCF8F8F8FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFCFCFCE9E9E9BBBBBB5C5C5C6C6C6C 999999B1B1B1B9B9B9B9B9B9B2B2B29394934D4E4D1B1B1B424242979797E3E3E3CCCCCC797979 323232464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F4444442B2B2B9C9C9CFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE5E5E5A8A8A85454541E1E1E797979E1E1E1F8F8F8FEFEFEFFFFFFFFFFFF FFFFFFF7F7F7BDBDBD4141412C2C2C434343929292B8B8B8B8B8B89A9A9A6A6A6A454545484848 A8A8A8DBDBDBFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFDEDD9FBE1BEFEF3E6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFCF8FFEBD5FFDCBDFFDED2FFECE8FFFCFBFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6 E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2 FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F0DCE5CF8BD5BE56D2CE6AE7E8B5FEFEFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3E6C5E2C16FDBB34CE2C474F3E6C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCDEDEDE8E8E8E494949181818282828 5C5C5C969696B6B6B6B9B9B9BABABABABABABABABAB9B9B9C0C0C0E4E4E4F7F7F7E5E5E5A9A9A9 585858727272A0A0A0B3B3B3BABABAB8B8B8B0B0B08787874141411F1F1F5D5D5DAEAEAEF7F7F7 FFFFFFE2E2E2A4A4A44B4B4B252525959595FFFFFFFFFFFFD4D4D49292923030303D3D3DB5B5B5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC9C9C9C3F3F3F2A2A2A8C8C8CEAEAEAFAFAFAFEFEFE E5E5E56C6C6C2E2E2E3333336A6A6AB0B0B0BABABAAAAAAA7474744C4C4C3E3E3E808080C9C9C9 EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B8F8F8EBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9ECE9E8B7DDD07ADEBA54EED8A1FEFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EDE2E2A8E9E9BC FAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF9EF E6E3ADECE9BDFAF9EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDFBE1F2DA9CE1A846EECC93 FFFAF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFEF8F0FBE2C0FCEAC5FEFADCFFFFF3FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF2DBE9D177DABC3BD7CF82 E8E7C3FCFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFEECD8F8D3A4E3A746DCB368DED4BC ECEEECFAFAF9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE2D47BE0D278E3D679E5D87CE3D67AEBDE82E2D579D7CA6EDCCE75 E1D47ADDCF76E5D97FE4D57FE5D881E3D680E9DA84EDE08BE7DB87E6D784E8DA87E6D987E8D989 E8D98AEBDE8FE6D886DDD17EE8DC88E0D37DE0D580E0D682E6DE8CE3DB8AD9D082EAE193EFE397 E9DE8FF0E596FAEF9FF3E996ECE28BECE28AF6ED93F5EC91F8EF94F3EA8CFBF297EEE38CEDE38C EEE48BF0E78CEEE589ECE385EAE183EEE688EAE185E0D77BEDE389EBE284ECE481E7DD7BD9D170 EAE182F1E78CEDE389E5DB84E9DD8AEBDF8FF0E595F1E596EFE28DFBEF96F1E48BDFD179E4D781 E4D781E9DA87E9DC89F4E795F4E594F8EA9AE9DC89EEE58BE2D97EE4DB80F0E68DEFE58CEAE087 EAE089EAE088EBE18BF3E995EFE592F9EE9CF2E699EBE092DACF81D9CD82EDE195F6EA9EE3D889 D5CA7BE3D889EEE393E8DD8CE8DC88EBDF86E8DB83E3D580E4D882F0E28DE4D581E9DE85EEE287 EDE083ECE181E7DC7CEFE187E1D57CEDE189F4E68DE9DD82EEE387E8DA80E8DB82E8DD84E6D883 E6D786ECE08EEDE190ECE08FF0E594F0E593EFE293F0E695ECE18FEADF8BEBE08BF0E68FF8EC96 F7EB91EDDF85DCCF76E9DB82FDF096EEE087EBDD84EADC84EADC83EEE088EEE087F3E58CE6DB7F E4D97FEEDF88F1E290EFE08EF4E592EBDF8AF7EE9BE8E2969B9657433E175D5B375F5D32C7C592 D1CE8E373300827C39F2EB9CEEE499E5D891E1D78FF1E7A2E3D992D1C878D2C76DCEC369CCC168 C5B961C8BD64D3C771CCC06DD6CA76D9CC7AE8DC8AD1C574E7D791E0CD88DFCD72BDA843E2D271 E7DF94AFAD801E220D0002004B4B1EE6DE99F1E48BF5EA98DFD586E8DE95D3C891584E1ABAB365 F0EF89E3E08BE6DEAB6F644C080200514D13ECE39EE6DD92DBD481D3CD78DAD190827A39AAA64F D5D271D8D57BD1CA8632240E4B3E27CBC188D9D47EEAE585DED37A9C8E418F7E31F9E99BECDE96 D5CB85E0DA88E5E281E8E4A6C9C69A26220F252008B6B069E7E092E7E18CE3DC89E3DC8EF1E9A1 D4CC876A631CD3C97BEAE38FE4DF8CC4C176EDECAD8A87570200001F1705C1B887C2B872DCD176 ECE383EBE38DE0D785D8D081A69D5241360093874EDFD29BD7CC8FDBD093ABA06C40350964581A ECE089EBE08BEDE38DD2CA78D6CD81E6DD99B6AC6A352D078B843CF6F2A8DBD58AEEE79E827B38 231B009D9351EDE49BDBD47ED8D272D9D26CDFD572E7DB80D3C56FE1D284DBD386DBD38BEAE19D BCB276463E04362D0AC1B772F4ECA0E9E38BE4DC7AE8E07AE1E18DB8BC80AFAD76635C282D2008 988848D6C383EAD892EAD98CEEE08DE3D87FF0E890FFF7B24A4114786D4EFAEDC8382C03ACA26F FDF4B3E9E194EAE290F8EFA2FAEFAAF7E9AAF6ECABFCF1B3FCF1B3FBF0B1F9EDACF1E7A0EAE193 ECE393EEE598F3E9A1FDF2B0FCF5AEF7EF9EFDF5A4FCF3A3F7EF9FF7EEA0F5EC9FF5EDA1FAF0A8 FBF1A8F9EFA7F9EFA7F9EFA9FBF1ABF8EEA6F6ECA4FEF4ADFFF5AEFBF0ACF8EEAAF3E8A6FFF4B3 FBF0AFFCF2B2FAF1AEF6EDAAF9F0AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3A2A3A2525352 363736646464E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F0F0C4C4C45A5A5A 4C4C4C5959595D5D5D5C5C5C5C5C5C5C5C5C5A5A5A515151585858939393CACACAEDEDEDCACACA 787878323232464646DFDFDFFFFFFFFFFFFFFFFFFFDEDEDE9F9F9F4444442B2B2B9C9C9CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE5E5E5A8A8A85454541E1E1E787878E1E1E1F8F8F8FEFEFEFFFFFF FFFFFFFFFFFFFCFCFCDBDBDB8D8D8D5D5E5D4344435252525C5B5C5C5C5C5959595C5D5C707170 969696D9D9D9F3F3F3FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFEEEFFEDD2FFE1C1FFF3E8FFFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FFFFF0 FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFDFAFFF4DFFFE9C7FFDEC7FFEADFFFFBF9FFFFFFFFFFFFFFFFFFFFFFFFFDFDFA ECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5FFFFF0FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4 EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EDD4E6C673DBB647E0D37FF0EBC3FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9EDD7EFD095E3B756E1BA59F2E1B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCD4D4D46F6F6F303030080808 1616163333335151515E5E5E5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B696969BEBEBEF6F6F6EFEFEF B4B4B45A5A5A5151515C5C5C5C5C5C5C5C5C5C5C5C5D5D5D585858525252636363A7A7A7D7D7D7 FBFBFBFFFFFFE2E2E2A4A4A44B4B4B252525949494FFFFFFFFFFFFD4D4D49292923030303D3D3D B4B4B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC9C9C9C3F3F3F2929298C8C8CEAEAEAFAFAFA FFFFFFF2F2F2ACACAC6E6E6E4646464242425858585C5C5C5959594C4C4C5D5D5D808080BDBDBD EBEBEBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B8F8F8EBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF8F5E3E7DA9CDFC66CEBCB82F6E3BFFEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EDE2E2A8 E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE F9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCF0F2F0C8E6D38CDFB05E EED3A9FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFCF5FFF0D3FFEDC8FFEFCCFFF8E8FFFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8ECF3DDA3E8C365 DEB95FEBD7A4FCF9F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF5F5D8B0EBB76CDFB55BE2CA90 EBE6D9F7F8FBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9CB71DACC72E1D379E4D77DE2D57AE5D77DDFD177DACC72 E3D57BEADD82E6D97EDED176E3D57CE1D37AD8CA72DED079EBDB87E5D681E1D27FEDDE8CEFE08F E5D586E2D284EBDB8DE7D887DFD27FE8DC88E0D47EDDD37EE0D782DED786DCD386DED589E7DE93 DCD083E8DD8EF6EB9BF1E696E8DD8AECE28BF6EC95F4EB91EFE689F9F093F3EA8BF4EB8EF9EF97 F0E68DE9E084EAE185F4EB8CF9F191EAE380EFE687EEE586EAE185F0E78DEDE487E7DF7EE5DC7C EFE788F1E88CECE388EAE088F3E994F2E795F8ED9DF7EC9CF2E798F3E490EFE188E9DB82E5D780 E5D781E7D883E7D885EEDF8DF4E594E6D688EFDE91EEE291F0E68CEAE186E7DE83E9DF86EDE38B F0E68EEEE48DEEE48EEAE08AFAF09BF5EB96F1E695F7EBA0F1E59ACDC174C1B668E5DA8CFCF1A1 EADF8FE0D585E8DD8CF0E594F0E593EDDF8AE8D982E5D681EBDC89F3E391F5E695E4D583EADB86 EBDD84E7D97EEBDE7FF0E384EBDD84EADC84E4D67DE6D87FEFE187ECDE84F0E288EEE087F1E28B EDDE8BECDD8BF0E493EEE293F2E797F7EC9CF2E796EDE290EFE491E8DE89EBE18CEDE48DF0E690 F2E891F1E68CF1E489E5D77DEBDE83F9EB92EFE189F5E78EF3E58EEFE08AEADB87E6D881EFE08B E0D57AE5D97FF1E28DF2E392EFDF90F4E796F9ED99F0E896ECE69ABEB979706E40121000626037 EEEEBA3030096E6C2BEFEB96E8E28EDFD484DED287C8BC74B1A65EBFB56DC4BB6CD1C770D6CC74 D1C76FD8CD77D7CC77D1C673CFC473D6CB7AD2C677D9CD7ECCC071D5C580BAA95FE8D577DFCC62 E5D474F1EAA6615F3A0000001A1F08B0AF7CF6EC9FF0DF83F6E99BE4DA93EAE099847B348E8739 F1ED98DCD887F5EFB39E956C0F06004E4A1EE0DC92F7EF9DF6EE98EBE393EBE29E8D873CBEB76C D5D083C7C56BA7A352332C0E352B10CFC695E2DB93E7E093F9F09DC6BA64998A36CCBB6CFBEBA2 E4D68DD3C97DD8D17EF3EF9EC6C38C2E2B0D3B3711BBB677EDE79EDFD787D6CC78CEC672ECE493 CEC67C7D7531CFC77FEEE48ADCD27DD9D289DDD9A08D8A5A131100110E009A9560D1C989DED284 EADA83E9DB83E3DB88EBE393BEB6695E55109E9454ECE1A4EDE2A6EFE4A88277403C31079C905C DACF7BE1D875D1C76CCFC672DBD185E6DC97938A482D24009A9255E1D997DED894C7C17B605629 4C430FAAA35AE0D883E1DB7EDFD87AD8CE73D9CF77E5DA84DFD47ED8CB70DBD17CE1DA96E7E19E 87823F2B24005D561BD2CA7BEDE696D9D07FE2DA86E3DA84DDD57FB1AD6B7E7F4B2E2D123E370C CDBF79F5E398D8C372E6D17FE6D481DFCF7EEEE192F9F0A4C7BD7B261C00D2CA9EC0B48F312409 DACD9BF1E8A5ECE496EEE694FEF6A6FFF9B0F4E7A4F7EDAAFBF1B0FAEEB0FAEFB0FAF0ADF5EBA2 F2EA99FBF3A0FCF8A8FCF5ACFCF1B1FCF2AAF9F19EF5ED9AF6EE9CF8F09FF3EA9BF5EC9EF5EC9F F2E99EF6EDA2FAF1A6F8EEA6F3E9A0F7EEA4F8EFA5F9F0A6FEF4ADFDF3ACF7EDA7F9EFABF6EBA9 F9EFAEE5D999D4C989FDF5AEF8F0A8FAF1ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5ADAEAD 6668664E4F4E777777E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCDCDCDC 8081805859584142412F2F2F2626262626262E2E2E464646747474A9A9A9E4E4E4FBFBFBF8F8F8 CFCFCF8989894A4A4A5C5C5CE3E3E3FFFFFFFFFFFFFFFFFFE2E2E2AAAAAA5A5A5A444444A8A8A8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8B2B2B2696969383838888888E4E4E4F8F8F8FEFEFE FFFFFFFFFFFFFFFFFFFEFEFEF5F5F5DADADAA1A1A1656565383838262626282828414141737473 AFAFAFE2E2E2F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FFFEE0FFEDC9FFE1C0FFF3E8FFFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFAE4 FBF7D2FBF6E2FCF9F1FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFCFFFEE9FFF7D3FFE1BDFFEAD4FFFBF7FFFFFFFFFFFFFFFFFFFFFFFF FDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFDE7FBFAD7FBF5DFFCF8EEFEFDFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8 E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EBCAE6C060E1B33FF0D99CF9F0D5FFFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF5E9FCE0BBECBE63E2B445F1DDAAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCD5D5D5747474414141 2121211F1F1F222222242424252525252525252525252525252525232323373737A7A7A7F7F7F7 FDFDFDD2D2D28585855C5C5C3E3E3E2C2C2C2525252727273131314D4D4D7D7D7DB4B4B4ECECEC FCFCFCFFFFFFFFFFFFE6E6E6AFAFAF6161613F3F3FA0A0A0FFFFFFFFFFFFD9D9D99F9F9F494949 535353BDBDBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0A8A8A8565656424242999999EDEDED FAFAFAFFFFFFFBFBFBEAEAEAB8B8B87676764242422929292525253030305151518D8D8DCDCDCD F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B8F8F8EBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F2DEE7D28DE4C36CF9DBB1FEEFDCFFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9ED E2E2A8E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8E7E9E5B1DFD085 E1C482F0E0BFFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8FFFBE1FFEDCBFFE2C0FFF0E0FFFEFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FEE9D1 F6CE97E1A441EBC484FCF3E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4E9EAC487DAA13CDDCB7C EAE7BCF9F9F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CA71DACC73E0D279E2D47BDFD178E1D37ADDCF76 DDCF76E3D57CE4D67DE0D279DCCE75DFD178DED077D7C971DACB76E9DA85EBDC87E7D885F0E18F EEDF8EE4D584E4D485EBDC8BE4D583D9CD79E2D682DED27CDBD17CE2D883D7CF7DD5CC7DE4DB8E E2D98DDED383E8DC8BEADF8EDDD280DCD27DF2E88FEDE48AECE387E8DF82F2E98AF0E788F4EB8E EDE38BEFE58CECE388EAE186EDE485F0E788E7DF7DEAE182EEE589EEE58AF0E68DE8DE85E4DB80 E0D77BE5DC81E9DF86EBE18AF1E791ECE28DC9BE6CE9DE8DFCF1A1EFE493EEE08BE1D37BE5D77F EBDC87E3D47FF2E38DDCCD7AEEDF8DFCED9CEDDD8FEEDE90E9DD8CF3E98FF3EB8FEBE286E5DB82 EEE48CF5EB94F2E891E4DA84E8DE89F0E691EAE08BF8ED9CEFE495F2E798EFE496F3E899F6EB9B F7EC9CF7EC9BF1E695F3E896F0E692F0E593ECE18BE9DB83E8D985EBDC89EFDF8EEDDD8EE7D789 ECDD8BE8D986E0D17CE7D981F2E48BF3E48FF0E08BE7D981E5D77FEBDD84EBDC84F2E48CF0E18B F3E491F3E494F2E295F6E99BEDE292F2E797F5EA9AECE191E9DE8EEEE391EDE290EEE48FEEE48F EBE18CE8DE87E9DF87F3E58DECDE86F1E28CF8E994F4E590F7E894F4E592F4E594EFE08FEBDC8B F3E593EADE88E9DD85F0E18FF3E395F1E193F4E595EFE38FE7DD8CECE698E6E19EFAF7BE888656 77764962613B545314FFFFB1E1DC89F6F09AC6BB6A978C41AFA35CE0D68EFEF7ACDED586E6DE89 E6DB89E6DD8AF1E895F6EB9BEDE393E4DA8BE9DE91DFD489E0D78CE5D98EDBCE87DBCD82C5B65A DDCD6EEFDF92C1B8871E1A060B0C00676B3FD6D293E9DD90F1DF8FE9DA97E8DE9E9D934D5B5508 E7E386E7E38FF4EAB4B7AD86170E04292511CFCC87F2EE9FEDE68FDBD380ECE29CBFB578ADA755 F2EE99F2EBA5F3EFA7514C201D1500ADA66FEBE69BE4DF8AE3DA99C3B8759A8F40E7DB81EFE08F E2D489EDE391C6BF66E3DC8ED5CC931B170C373309C0BA82F7EFAFE3DB92EADF91E5DA8ADCD181 D7CE7F786F22C0B86FEAE396DAD277EAE292E8DFA3A7A1761F1A0A0F0F00515022CAC880D3CE7D DFD386D8C77EDECF84F3EB9BAAA355504803B7AE68E0D794D1C888E3D99B483E0A433916D7CD8F E0D697E7DF8CCDC769C9C36CCCC374E0D68F736736281D00B2A771DFD59DABA0686A6122211700 5A5016D0C684D6CD7EDAD378D7D171D9D374E0D580D3C67AD9D086DDD184F2E794ECE394C2BB7B 3F390D353101928D3AD0CB73DEDA7FDCD67FF1EA99CCC27AC1B677BBAF7760572E1A160059541C E3DA95F1E592D9CA6CDDCB6AF5E284DBCA74EBDA8FE3D595E8DDA13E340B89804AFFF9CB70643A 4C401DF1E6AEE2DA94F8F1A0EBE38EDDD584F2E89DFFF5AFF6ECA4FAF0A9F8EEAAFCF1AFFFF7B1 FDF4A9E4DC8AF0E895F7F0A0F9EFA7F7ECACF7ECA7F4EC9AF4EC99F6EE9CF8F09FF5EB9DF8EFA1 FBF2A5F6EDA2F6EDA2F7EEA3F9EFA6F3EA9DF5ECA0F7EEA2F9F0A5FFF6ABFEF5ABFDF3ABFEF5AE FBF1ACFEF3AFE6DC97D4C983FDF5ACF9F1A8FCF4ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB E2E2E2CACBCAC2C2C2D0D0D0F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F3F3F3D4D4D4C5C6C5BBBBBBB3B3B3AFAFAFB0B0B0B3B3B3BDBDBDD0D0D0E5E5E5FAFAFAFFFFFF FDFDFDEEEEEED7D7D7C1C1C1C6C6C6F5F5F5FFFFFFFFFFFFFFFFFFF5F5F5E2E2E2C6C6C6BEBEBE E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E5E5E5CBCBCBBABABAD6D6D6F6F6F6FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6E2E2E2CACACAB8B8B8B0B0B0B1B1B1BBBBBB CFCFCFE6E6E6F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5FFFEDEFFEDC8FFE1C0FFF3E8FFFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF7 F1E2B7E5CB7DE5CA82EFDFB5FCF8F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFEAFFFAD4FFE2BCFFEAD3FFFBF6FFFFFFFFFFFFFFFFFF FFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8F0F0CBE5DE97E5C469F0D89FFDF9EFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFD F7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF9F7EBB9E6BF58E4B950F8EBCDFEFAF2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDF2FDF2CEEDCA70E2B546F1DDAAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F0F0CECECE BDBDBDB2B2B2B0B0B0B0B0B0AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAEAEAEB6B6B6DFDFDF FCFCFCFFFFFFF1F1F1D6D6D6C6C6C6B9B9B9B2B2B2AFAFAFB0B0B0B4B4B4C0C0C0D3D3D3E9E9E9 FCFCFCFFFFFFFFFFFFFFFFFFF6F6F6E4E4E4C9C9C9BCBCBCDEDEDEFFFFFFFFFFFFF2F2F2DEDEDE C0C0C0C3C3C3E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4E1E1E1C5C5C5BEBEBEDCDCDC F9F9F9FDFDFDFFFFFFFEFEFEFBFBFBEAEAEAD1D1D1BCBCBCB1B1B1AFAFAFB4B4B4C2C2C2D9D9D9 F2F2F2FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B8F8F8EBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF7F5E4E6DEA5E4D894FBF0DCFFFAF5FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE F9F9EDE2E2A8E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF6E5F7E4AE F3DD97F5E9B8FAF5DFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF8FFEBE4FFE1CBFFDFBEFFF0DFFFFDFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFF7EFF7E4BDE1B741ECC56FFDE4C7FFF7F1FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF9F3FCE4C9DDB870C79F3D E7DDB0F7F7E7FEFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7C970D6C86FD9CB72D9CB72D7C970E6D87F E0D279E2D47BE0D279D7C970D6C86FE9DB82E2D47CE3D57DE0D27ADCCD78DFD07BE4D580E8D986 E6D784E0D17EE6D786EEDF8EEFE08FE3D482D7CA76DDD17BE3D781E1D77FE7DD88DBD381D8CF80 E8DF92E2D98CE9DE8EEAE08BE9DF8AE2D882E1D780EFE58CEBE288F1E88CECE386EFE687ECE483 F7EE8EECE28AF1E68EF4EB90F2E98DEFE687ECE384E9E081EBE285F1E78CF1E78EF1E790E3D883 ECE18EF0E693E4DA87EEE490F3E995EEE391E9DE8CC6BB69DED381EFE492E8DD8BF7E894ECDD88 F4E590F2E390E3D481FBEC99E0D180E9DA89F6E796F1E193F7E699EFE391EBDF89F0E68DE6DC84 E2D87EE9DF88EBE18AE8DE89F4EA94DED37FE6DB89EDE290EEE391F6EB9BEBE090E8DD8DF0E593 EEE391EADF8CEEE48FF0E691F1E892EAE089E8DF89E9DE86EBE087EDE18CE9DD8BE6D98BE9DC8E F0E396F4E699EBDE90E4D887EBDF8DF3E794F1E594E6D989EEE28FEFE38FE5D984F2E690ECE08B E9DE8AEFE391F2E598F2E59AF7E99EF1E697EFE495EFE495EADF90EADF8FEFE494ECE18FEBE08E EADF8DE9DF8AE8DE89E7DC87E9DD88E5D984EBDF8BEEE290EFE390EEE290EADE8DEEE193F0E395 E9DC8EEBDE8FF2E694E9DF8CEADD90F5E59BF6E69BF8E898EDE18EECE290F5EFA0EFEBA5FFFFC9 7E7C48474618232200C9C784F9F7A7E3DE89BBB55F908635E2D58BFFFEB6E3D991E4DC90DDD688 D1CA7BC3BB6DCDC578CBC377D1C97DE1DA8EE5DD93EAE298E3DA91E2DA91F0E69FE8DF97EDE595 DED57BDCCF7EE9DAA2625439070000302F0ECFD190DBD989E9DD8EFAE6A2FAEBB1D2C78B51490E C9C465EDEB8AE8E298E2D4B8413322130A00ACA856F0EF9CE1DF8BEDE98CF0E8A1C7BE7DA29B4F F9F3A9DED98AF0ED9D938A60120800706B38B7B468DEDC81E6E284D9D08F95894DDBCE88DBCF7B E8DB8AE2D685E3DA81F2EA95DBD2914135211B1404AAA663EDE5A5EAE19DE2D78FE2D48ADACC7F E6D98A746819988E3FECE494E9E291F3EC94ECE39CF1E9BA483F250B050025230FBFC076E0E188 DFDB80DCD184EBDA9DEEDFA19D95495D5508B6AE64ECE39DD9D08EB3AA6C3B320070662ADED58F EBE39EEAE29BC3BC6CD6D17BD9D385B8B0674E450A514710CEC38BEFE3AFD3C692786B3D2A1F0A A09459DDD483DCD37ED7CB7FEADD97D2C77DDCD481C9C267E4DE80E6E088DDD48ACDC385857B49 2825005B591AC2C06FE1DF8CCECD75CDCB74E1DC8ABEB870A69D5D9A8E5F36290A30240BA49B68 ECE2A3EADE8FE1D474E3D368E4D364EBDA73DCCC74D9CA85EFE1AB897C551B1100EEE6ABDED7A2 2217008A8049FBF1B6E4DC93F5EE9EE4DC87D2CA79E5DA8EF6EAA1F4EC9DF6EDA0F1E8A0F3E9A4 F7EDA6F4EB9DE8E08EEBE390ECE494F1E79EF9EEADFAF1ACF6EE9EFDF5A4FCF3A3F5EC9DF2E99A F0E799F2E99CF6EDA2F1E89DEFE69BF9F0A5F2E99CF0E798EEE597EEE598F7EEA1FAF1A4F7EEA2 F7EDA4F4EAA1FDF7AFFCF2AAFDF3ABF1EA9DF1EA9DF8F0A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCFAFAFAFAFAFAFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFBFBFBFAFAFAF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9FBFBFBFDFDFDFEFEFE FFFFFFFFFFFFFEFEFEFCFCFCFAFAFAFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFA F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFBFBFBF9F9F9FBFBFBFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFAFAFAF9F9F9F8F8F8F8F8F8 F9F9F9FBFBFBFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5FFFEDEFFEDC8FFE1C0FFF3E8FFFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFCF9F2E5C2E6CB84DEB652E4C97CF1EBC9FBFCF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF8EAFFEFD4FFDFBCFFE9D3FFFBF6FFFFFFFFFFFF FFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F1F1D4E4DD9ED9BD4DE2C870F1E3BC FBF7EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFFCEBF7E4AEE7C161E5C169FBF4E5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDF9DEEDCF7CE2B444F2D69BFFF9F4FFFDFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FBFBFBF9F9F9F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9F9F9 FCFCFCFFFFFFFFFFFFFEFEFEFBFBFBFAFAFAF9F9F9F8F8F8F8F8F8F8F8F8F9F9F9F9F9F9FBFBFB FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFAF9F9F9FCFCFCFFFFFFFFFFFFFEFEFE FCFCFCFAFAFAFAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFAFAFAF9F9F9 FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBF9F9F9F8F8F8F8F8F8F8F8F8FAFAFA FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B8F8F8EB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAEFEEEECBEDECC5FCFBF4FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEF9F9EDE2E2A8E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEF9F9EEE2E3A9E8E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9ED FEEEC9FEEDC0FEFBE0FFFEF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F6FFE3DAFFDBC9FFDDC7FFF0E5 FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFDFBF7EED5E1C164E6C165F3D290FCEED6FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFEF7F5F4F4E4D0F1C891DFB56B D5B56BF2EAD3FEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCE76D9CB72DDCF77E0D27AE0D27A EFE189E5D77FE7D981E5D77FDFD179DFD178DFD179DECF79E7D983EDDE88ECDD88E9DA85E4D580 ECDD88E6D782DDCE79ECDD8BEFE08FEADB8AE4D582DBCE79E0D47EE9DD85E1D780E4DA84DCD481 D8CF80DFD687DCD385EADF8EE9DF89EDE48CEEE48CEAE087EDE489E8DF83EDE487E7DE82E9E081 E3DB7BE9E083F3E98FEEE48BF2E98DF6ED90F2E98AEEE586EEE587F0E78BF3EA8FF0E68FF2E893 E3D887E6DB8DF1E598E9DD8FEEE394F0E595EADF8EF1E696EFE493EADF8EE5DA88EBE18CF7E996 EDDE8AF0E18DEBDC8ADBCC7AEDDE8CE5D685E5D685EADB8AE7D888F5E696F3E693F0E48EF3E990 EDE38AF1E78FF4EA93E8DE89ECE28DF7EC99C4B966D7CC7AF3E896E6DB8AECE18FF8ED9BF5EA98 F0E692F1E692ECE38EE6DC86E9DF89EEE48BECE289EEE48BECE089EBDF89EDE18EEBDE8FEBDE90 EFE196F5E79DF4E69DEEE096EDE095F6E89CF7E99DF1E497ECDF91F6E99AF6EA9AF0E592FDF19F EBDF8DE7DA8BECDE92F0E29AF0E29AF3E59DF3E79AEBDF92EDE194EEE294ECE191EBE091E4D988 E8DD8CECE191EFE491EFE491EFE492F1E494EBDE8EF1E595F2E597F1E495F5E89BEFE195F1E398 F6E89EF1E399EBDD93F9EDA0F4EA9DF4E79DF1E39BE9D991E7D78AF5E997E9E08CF1EA9AF3ECA6 FFFFC299965D0A090072713AD8D58FE8E4939D97419C943FE1D889EDE398E6DC94BEB66BB4AC5F BBB568C4BD74C6BF76DAD28AD3CB83D1C981DCD58CD5CE87C8C17ABFB871C7BF78EBE49FDDD68B C2BC6AE0DA86F4EAA9B9AB871306000D05007B7749F8F9A6E1DD81E5D789E3CE97E9DBA48B8145 9C954CF4F092DED983FAF0B984756309000091894FFCFA9EE4E38AE3E08DF4EF99DAD1888C843E E7E49CE1DC8DE1DC94A6A0631B1200685F44E1DDA48F8F37A8A748D3CE779A9444CFC57FF0E4A2 DAD086E0D681D3CC70E4DC86DFD69442341024160ABCB477E7E097DDD48DE5D992F1E39CEADB94 EDDD947C6D2495873AFAF1A1DCD482DED885E3DC91E8DEA46C63360600002C280ECBCA93E7E89B E5E689DCD77CEBE195D2C3898D7E43877F36D3CC82F9F1A9E7DF999B9450585013BBB370F6F2AD E8E199D5CF84C6BF74D9D689F1EEA47A763C4640049D965FEAE1A5F0E5ACB5AA714E420C6B5D2A DFD291E6DA96EBDF8DD9CE78DDD07DDDD381EEE592C8C06ED6CF7EDBD386E1DA908E87493A3306 49440FACAC62E5E491E4E393CFCC82DAD591CDC887D2CB8EA39A5D453C0F362D00756B3EDACF94 F1E5A6EEDF95EADB85ECDD7BE2D267E8D86CD2C260DFD17CE5D897D3C7952B1E00A29863FFF7BF A9A0662C2200CFC98BFAF2B1F3EBA2F0E899EEE695F2EA9AF6EC9DF0E496F9F19DFAF2A0F4EB9F F4EAA2F5EBA2F0E89AF5ED9AF2EA97F0E898F1E79EF7ECACFAF1ADF9F1A2FCF3A5F9F0A2F5EC9E F5EC9EF2E99CF5EC9FFDF4A9F8EFA4F2E99EF5ECA1F4EB9CF5ED9CF3EA9BF2E99BFAF1A2FBF2A4 F9F0A1F4EB9FECE397F6EDA1F3EA9DF7EEA0EDE594EDE595F5ED9EFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FFFEE0FEEDC8FEE1BFFEF3E8 FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFDFBF7ECF4E6C4E3BA55DFBE58E3D893F0F0D1FCFCF6FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFEEE9FFE1D3FFDDBDFFEAD5FFFBF7FFFFFF FFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFAF1F1F0D0D8D378D7C766 E1C97CF1E3BEFCFAF2FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9FFEFDAF6D8A2E6C26EE5CA81 FBF6EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAEDEDD28AE2B242F0CB85FFEBD5FFFAF6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B8 F8F8EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBFAFAF1FAFAF0FEFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEF9F9EDE2E2A8E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFAF9EFE4E3ABEAE9BBFAF9EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFAFFFAF0FFFAEDFFFFF8FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F2FEE2C8FEDCC6FFDFD5 FFF1EEFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDF7F0E4E1C495DEBA63E4C256F3E5B3FDFCF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8F8E9E7E3E1CAA5E3AB56 EAB972F2D5ABFCF4E9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CA72D6C870DDCF77E5D77F E7D981E3D57DD6C870D7C971DCCE76DFD179E6D880E5D680E8D984EBDC87E6D782E6D782E8D984 E5D681EBDC87E3D47FD6C772E0D17CE0D17EDECF7CE0D07DDBCF79DFD37DE7DC83E9DF88EBE18A E6DE8BE2DA89E1D88AE2DA8BE9DF8AE3D981E3D980E5DB82E9E086F5EC91E7DE83E8DF82E7DE81 F1E88BEAE182E9E083E7DD83E5DC81EEE58AF5EC8FEAE182E0D778EFE68AF0E78CF0E68EEBE18B F0E593EBE092E8DC91E3D78DE9DD93EBDF93F2E69AF2E798EADF8FEFE494E9DE8CE8DE8BEDE38E F2E491E7D885E7D887E9D989E1D281E9DA89DBCC7BE3D483ECDD8CE5D685ECDD8CE7DB88F1E58E F2E88FEFE58CFAF099F9EF9AE4DA85E9DF8AF2E795F6EB99F8ED9BE6DB89E5DA88EEE391EFE492 ECE28FEEE48FEFE590ECE28CE4DA83E0D67DE3D980E4DA81E8DE85EEE38BEADE8AE6DA86E9DC8D EDDF94EBDD95EDDF99EBDD97E8DA93EEE099F8EAA1F4E69DECDE95F2E499EBDE91E6D98BEDE091 EEE192F0E394E9DB8FECDE95EFE19AECDD98EDDE99ECE095E4D88CEBDF93EFE397E9DD91E4D98A E1D687EADF90F1E696F1E697EEE393F0E495F6E99BEDDF94F3E59AF1E398EDDF97F6E89FEDDF96 EADC96F4E69FF4E69FEFE19BE2D88EEBE297F8ECA4F2E39EE7D890EFDF92F3E795F2E894F8EE9E E8E098ECE5A6B7B176110E04BCBB7CF0EDA6B9B6658B8431F9F19EE4DB8CA79D54A19950CEC77C DED88AE9E296F5EEA7F6EFA9DFD892AFA8628079337069236C651F5A530F524B075B5410837C37 8F8A3CD5D380E0DD92FCF5C14B412B090000170C00DDD89FE2DF80DAD571EBDD8FEFDBA8C7BA83 56500AD9D484DDD887E3DBA0BBAF8D120300574B29E6E096E1DE7FF8F39EE7E195E9E39A918A3B BEBA68D7D085EAE798C9C385281E0B504824948D63AFAA6FEAEA8FB8B55E5A5208BBB55BDCD580 E2D890DBD28CEBE48FE0D97FECE29A4F42161607039C8F62EFE6A1E0D988F0E597D7C980DBCC86 F4E39DA6954F82722BCABB71DBD081DED683E7DF93F1E9AE9E96640E07001D1807BBB888F9F9BC E3E398DEDD8AEBE594B6AD655E5215827638EAE49BF9F2AAC3BC745E5711726B27E6E29ED1CB85 D7D089E2DC92DCD68AEAE497BCB873474606646021C4BF80DED89AE9E1A3908648473E00938943 F9EDA3E5DA8AD7CD7CD9CC7EE3D685DDD37BEDE487D0C96FFDF7A6D5CD8791884A251E002D2604 8C864DEBE9A4D1D47DCECE7BD8D68DC8C487CBC48EB2AA79433C101E15005D5418D8D18CF0EA9E E9E091E6D786E2D27CEAD980E4D475E6D676EFDE82F9E993F1E498DDD191312800695F42E6DCA7 D7CE95584F22635B1CFFF8B6F3EAA2E8E094E8E092EEE695F0E897F2E898FCF19FEEE78EF3EB96 F2E99AF3EAA0F6ECA5F2E99CF6EE9CF9F19EFAF2A2F9EFA7FAEFAFFBF0ADF6EDA1EFE699F2E99C FBF2A5FEF5A8FDF4A7FCF3A6FEF5AAF8EFA4ECE398E1D88DEBE294F4EC9BF5EC9DF5EC9DF8EFA0 F7EE9FEFE697EEE596ECE394F9F0A1F5EC9DF6EE9EF1E996F2EA98F9F1A0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFEECF7EDC9F2E1B3 FAF3E3FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDF9EFF1D993E5C764DDC35DE3D791F0F0D2FAFBF2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAFFEAE1FFDDCAFFE7C6FFF3DDFFFDF9 FFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCF4E8EEBF DED286DBBB5FE4C880F1E3BFFBF7ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF7F7E8E1E1A4EBEBC1FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF6F7E0BEEACA85DDC66E E1D690FAF8EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF5EDD69BE0B751E8C97BF3E4BDFDF9F1 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4AD E8E8B8F8F8EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEF9F9EDE2E2A8E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF9F1EFE2B5F2E8BEFCFAE5FFFFFAFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF8EEF2E2B5F6E2C3 FDEBE6FFF7F9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF7F3EFE1D0C2DABE71DBBA37E6D989F2F2D7FBFCF6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F6EAEBEADFDED0D8C38A DCA93AEFC983FFF0E0FFFBF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCE76E1D37AE7D981 E0D27ADED078EBDD85E0D27AE3D57DE5D87FE2D47CE1D27CE7D884E5D682DECF7ADCCD78E0D17C E1D27DE4D580E6D782E2D37EE4D57FDECF79DACB76E6D784DDCE7ADBCE78DED37ADDD279E2D87F D9CF78D7CF7BE6DE8CE8E08FD6CD7DE4DA84E8DE85F1E78EEAE087E4DA81EEE58AEDE48AF3E98F F0E88BE9E084ECE387F3EA8EE8DE85E4DB80EFE68BEEE588E7DE81E9E084F0E78CF1E78FE5DB85 E8DD8BEFE492F2E79BF4E8A0EDE199F1E59BF5E99DF4E89BF4E99AEDE293F0E595F7EC9AEDE290 E9DF8BF0E291E5D686EFDF92F6E698E7D789F0E093E9DA89E8D988F5E695F4E594E8D988EEE18E E7DB85F3E992E7DD86E7DD88ECE28DDDD37EF0E594F0E593E5DA88EADF90F0E595E7DC8CEFE492 F1E694EBE18EEBE18CEDE48EEFE590EBE18AEEE48CEBE188E9DF86EDE38AE9E088F5EA96F0E594 E3D88AEDE196F1E59CE6DA94F3E6A0EFE29CE5D892EEE39BF2E69DF4E89EF4E99DD7CB7EC0B566 D8CD7EF9EE9FF1E697F0E598F9EDA3EDE19AF2E5A1F7EAA5EBDF97EDE198F9EDA3EBDF94F0E498 F4E89CECE193FEF3A5EFE495EEE394E7DC8DF1E599EDE196EADE94F0E49AEDE298EEE29BF7EBA4 EFE39BEDE09AF3E6A0EDE09BF5E8A4F0E79EEEE69CF0E59EF0E19EF0E19CF8EB9EE9DD8BEFE490 FAF1A1E1D992FFF7B9918B52383513E9E6A7C3C0778E8939DED784DAD28292893EB8AF68EBE39C E4DD93EFEA9DE7E496A9A25E6E67234E47045A531978712FA59F5ABDB671C9C27EC9C27DD0C982 AFA962878333585504B5B473A6A17A0400000D0301817656F0E7A2E0DA75EFE683EBDE93F3E4B2 5F5618ABA656EDE894E0D89CD7CAAC3B2D2130240DCDC77BF1EE91DCD880DED889E9E19EB2A96C C9C474EEEA90E6E492E8E4A0473E17403623958E66C7C38AA3A45CB9BB659A964B817838C1BB62 E7E386E4DF89DED78AEDE89AFAF3AB928656150800887952F3E8B0EDE499E4DB8AEADE8EF7ECA1 EADB92B5A45E7C6B26C3B36DE9DB94E4D990DDD588F4EBA7C7BE951E1607130C00928E55D2D094 CECD8DF2F1AFE6E19F847F3B585011B4AA66F9F0AACDC67E8C853F6A631E9F9754E7DE9ED7CF8D D6CF8AEAE39DEDE79DD5CF83878236433E0797945CDAD8A0DFDBA2918D514D4913706926D1CB7D F9F39FE3DD82EAE384E1D97AD2C675DBD081EAE08CE6DC86D2CB769A934A372E003E36118B854C CFC991D6D199D1CD8FCCC981C6C37CB1AD6C7E78464941143B3202645A27B6AE6DEBE39BE7E190 E7E088DFD678E2D373E8D97BF2E28AE6D685E1D084EBD994ECDB9AE4D794463D0760582FECE7A2 ACA36B998F59332B07CEC682FEFAB1F1E99DEEE899F1E99CF0E79AF4EB9CF6EB9CECE18FEFE88F F4EC96EFE698FAF0A9FFF5AEF3E99FF8EFA0F0E897F4EB9CFEF4AAFFF6B3FEF6B1FAF2A8EFE69C F3EA9FF9F0A5FCF4A9FDF4A9FCF5AAF7EEA3EEE599F7EEA1FAF1A4F2E99BF5EC9DF7EE9EF7EE9F F8EFA0EEE695FBF3A2F6EE9DEFE796F6EE9DF9F1A0E8E08FF2E794F0E692EDE18FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF0F0F0E2E2E2DFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE7E7E7F1F1F1FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAEFEDC9 E3E1A5F4F3DDFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9FEFCE1F2DF9BE4BF55DCC159E3DA97F4EFD3FFFDFC FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FDEBD4FBE1BBFEF6D4FFFDEA FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FDFEF9F1E5BFE3C67BDCB95DE3C67CF2E4C1FDFBF6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFBF8F7E5E3E1A5ECEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF9F1ECD49CDBBE60 D3C965DDE09AFAFAEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF6EEDAAADDBE64DDCA78E6E1AA FAF9EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F6F6F6E8E8E8DEDEDEDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFE2E2E2EDEDED F6F6F6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1 E4E4ACE7E8B8F8F8EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEF9F9EDE2E2A8E9E9BCFAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF4FDE6C8FDEAC4FFF7D6FFFEEEFFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F8EBE4E2A8 ECE9C1FBF9F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F6E1DFDDDDCB8EDFBF49DDCC65E6E2A6F7F6E4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCEEEEEDE1E1D4DDD8B2 DCCA7AE1BF4EF1DDA0FFFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECF7AE4D57F E7D983E0D17CDACB76EEDF89E7D983E2D47ED9CB75DECF79EBDB87EFE08DE7D885E3D481E0D17E D7C873D6C772E4D581E8DA83E0D27ADED078E3D57DDCCD77E4D582E3D37EE1D57DE0D57CDFD47A D9CF76D6CC73D8D17AE2DA87E3DA8AD7CF7FE5DB86E6DC84E8DE86E4DA83E6DC85F5EB94F4EA92 F2E890F1E78EF2E88FEFE58CECE288EDE28AEBE288FBF297F8EF92E4DB7EDED579EAE087F3E992 F0E591F4E999FAEF9FF4E89EEFE39BEDE199F1E59CF6EA9EF4E89CF8ED9EF3E898F1E696F2E795 E9DE8CEEE490F3E396ECDC8FF1E194EFDF92E4D487F5E597E6D788E7D888F2E392F3E493EBDC8B EFE38FE2D682F2E892E6DC87DFD580ECE18EEEE391EFE492EADF8EDCD180E0D585EEE393EEE393 ECE190F1E695F1E694E4DA87E9DE8BF8EE98F4EA95F4EA95EFE58DE9DF88ECE28AEBE18CEBE08F E0D586E6DA8DF5E99FEDE19AE6D993F3E6A0F2E59FEBDF98F2E69CF4E89FF9EDA3EEE297E6D98E E4D98AEADF90F2E798FDF2A3F0E498F3E79DEFE29CF6E9A5F5E8A4EBDE98EDE09AF5E9A0F2E69D F9EDA5F7EBA1F4E89CF5E99DEFE396EEE296E4D98CECE095E9DD93EFE39AF5E9A1F2E69EF1E49E F8EBA5F2E59FEFE29EF3E6A2EFE29EF6E9A6FBF3ABEEE89CEAE19AF9ECA8FDF0A9F1E399F8EB9B FBF09EFDF4A4EFE7A0F8EFB25F58205F5B27FFFFC195914B8D8638D5CC7C8D8437CCC27BEAE09D E5DD99F4EFA7A4A1513F3A0D484006AAA15DC7BE7ADAD18CDED590E2DA94E4DC95E1D991D7CF88 E5DD95EAE39BDED788C1BF719C9A6635321B130F02221A09DED5A1EEE595EBE181EFE58CE7DD97 A79E665A550FEBEA94FBF8A5F6F4C96E5F50020000A79F60FDFB9EEEEA87E3DC8EEEE59EAEA564 A59C63EEE9A1EBE991FFFFA66C65301C1303D0C8A2D1CC9FA5A362D6D88377792E554F15E4D999 B3AB62DAD67DD1CE6EDAD77EF6F0AFABA272110400827548E1D79EE4DA9AF5ECA2C6BF6EEBE79D F1E59AB5A75C94863FBAAB66EBDD98E7DB98EDE5A2F6F0ADDDD79D31280B000000706C42FFFDC3 BBBA7AB2B171BCB87E4C46106E682FEBE4A5D9D389958F44736E269C9652D6D18DD6D090D4CF8E DAD494FFFCBADFDA95A6A2596460157A762CD4CF91F4EFB9A5A1685C571A5D591AA29D5EE9E69A EBE894D9D57BD8D475ECE883E4E07BEDE58BDBD282C0B76E665C213D3300675F21ACA664D2CC81 D8D48DDBD59AD1CA98AEA678A19A68635A252A2108332C008A8341CEC67CDFD98AEEE895D9D17E D8D17DE0D683E8DD80EADD79E1D478DECF7EDFD08CE7D79CF8E7B3CEC088352904675F2BF3ECA3 D9D68AB8B0773C32056B6236FCFAB3EAE395F2EB9CF5EEA0F7EFA4F6ECA4F6ECA3F7ED9FEFE494 F3EB95FBF4A0F6EDA2F8EEA7FFF5B0FCF2AAFBF2A5F3EB9AF7EE9FFEF5A9FBF1AAF7EDA8FEF4AC FEF5ADFCF2AAF3E9A1F7EDA5FDF3A9FFFDB2F7EDA2E0D78BFAF1A4FEF9ACF7EDA0FBF2A4FBF2A5 F9F0A3FBF2A3F8EFA0F9F1A1FBF3A3F9F1A0FAF2A1FFF7A5FBF3A1FAF09BF3E895F2E795FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEAEAEAB6B6B6727272 666666676767676767676767676767676767676767676767676767676767666666666666666666 666666676767676767676767676767676767676767676767676767676767666666666666666666 676767676767676767676767676767676767676767676767676767666666666666666666666666 666666676767676767676767676767676767676767676767676767676767666666666666676767 676767676767676767676767676767676767676767676767676767666666666666666666666666 6767676767676767676767676767676767676767676666666666668C8C8CBCBCBCE8E8E8FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC EDEDC9E0E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF9FBF3D0F2DE9AE4C764E2C363F2D8A2 FFEFDFFFFBF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF5F3EBC8EDE1AEFBF8E1 FFFFF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAF5E8F1E3BEE4C880DFBD67E5CA84F0E1B8FCF9F1FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFEF0FAF7D7EDE1A7F3EBC6FDFCF6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8EEEACC83 DAB749D7CA6BE2E6ADFBFAF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF6EEDCAFDDBC65DBBF66 E3D38FF9F6E8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F8F8F8D5D5D5929292636363676767676767676767676767676767676767676767676767676767 676767666666666666666666666666676767676767676767676767676767676767676767666666 666666666666666666666666676767676767676767676767676767676767676767676767676767 666666666666676767676767676767676767676767676767676767676767676767676767666666 666666666666666666676767676767676767676767676767676767676767676767676767666666 666666666666676767676767676767676767676767676767676767676767676767676767727272 A5A5A5D2D2D2F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAF1E4E4ADE8E8B8F8F8EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EDE3E2A8E9E9BDFAFAF0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7FFF4DAFFEECAFFECC8FFF4E2FFFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F8EA E1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E2E5D6B3EDCD81E2C458E4D37CF5F0D1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBF6F7ECEBE6BD E1D07EE2C562F0D184F9E9C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECF7A DFD07BE1D27DDCCD78D6C772DCCD78E3D47FE8D984E0D17CE0D17CE7D884E6D786E6D784E9DA88 E6D784DECF7ADFD07BEADB86F3E58DF1E38AE8DA82E1D37AD8CA73E3D47FE5D680E3D77EE0D57C DACE74E6DC83E7DD84E5DF86E8E08DE8E08DE4DC8BE1D782E3D982E2D881E2D883E9DF8AF6EC96 EFE590F1E792F5EB96F7ED99F4EA96F0E690F7ED93EFE68BF1E88DEBE284E8DF82ECE387E6DC82 F0E691EBE08FF0E596F7EB9FF2E69BEFE399ECE095EADE92F1E697F1E696F5EA9AF2E798F1E694 F1E694EADF8DF1E793F7E89AF3E398F1E195ECDC8FE3D386E8D88AE9D98BE9D98AF1E291F2E392 ECDD8CEBDF8BE9DD89EDE38DEAE08BF2E893F4E996E5DA88E9DE8CE8DD8DE0D585E5DA8AF1E697 F5EA9BE9DE8EEADF8FF2E797E5DA89E5DA88F5EA98F2E894F4EA95F0E591EDE38CEFE591F2E896 E7DD8DD1C678D6CA80EFE39BF5E9A1E7DA94F1E59DF4E89FF0E499F5E99DF9EDA1FBF0A5EDE196 F0E498F3E899EADF90E9DE8FF4EA9BECE193EEE298E9DD96F3E6A2F2E6A2F4E7A1F8EBA5F6E9A3 EEE29AF6EAA2F1E59DE3D78DEADE94F1E599EDE195E0D489EFE398F2E69CF6EBA2F6EAA2F4E8A0 F5E8A2F1E49EEDE09AF3E6A2F7EBA7F3E6A2F3E7A5E7DF96EDE79BEEE69DE8DB97EADD96EFE198 F5E899FAEE9CF6EA9DF5EBA8F0E5AA342A0B7A733BFFFEC2A09955898037938A3FC5BB73F5EAA7 DAD190F6EEAD6E69293331018B863ADED48FFEF3AEE3DA93DFD68FD8CE86D4CB82D5CC83D7CD85 D8D084DDD589E0D78BDBD481F0E8A1C1BD9517140E0908005A5831EBE49AE5DB81EDDF88E8DC91 EDE6A34E4D14ACAA5CEAE995FCF8B1C6BC990B0000675940F5EEA6F5F192EEE98EE0D891CEC482 9D9453E5DCA1D9D48FDFDC8FAFAC5F0C05009E956EBBB585E2E0A7C8C8819698468586439F9B56 9B9148E5DC9BC8C274CAC96DE5E58CACA66D1006004B402DF2E9AADAD287D7CD86DBD38BDAD289 EEE59AA095498E8035B3A55BE5D790F4E8A3EBE0A2E0D79DEFEAB15A56270400004C4625FFFCCE F3F0B9C4C187545119514C19BDB682EEE7B0A9A465524B06756F28D7D38CF3EEAACEC988EBE6A6 F4EFAFE3DD9FA09B5B514C0A706C26E0DC95F7F3ABC6C08069642A474105A4A060F9F6B1DFDB92 D2CF82DBD887E7E591EDE991E0DF85D2CF77BBB667615A182C240160551DBEB67CD9D194D1CA85 DCD58ED5CE87978F5349410B271C001E110340330A91874EDBD28CE3DC8BD2CB70D5CF70D0CA6B D8CF75EBE08CDDD081DDD27CD5CA71CFC372E1D58DF3E4A9E6D9A6BEB07F1509005F5529DFD895 E1DC91CAC77A8D834B100500766E34FAF3A9E4DF8DEDE695F2EAA0F6EDA6F4EAA5F4EAA3F6EBA1 F2E797F2EB97F8F0A1F7EDA5F8EDADFAEFB0F5EBA6F9F0A6F7EE9FF5EC9DF5ECA0F5EBA4F6ECA5 FCF2ABFDF3ADFAF0A9F0E69EF4EAA2F9EFA6FDF4A9F2E99EE5DC90F7EEA1FEF7AAF6EDA0FAF1A4 F9F0A5F5EC9FF8EFA3FAF1A3F6ED9EF6ED9EF4EB9BF6EE9DFBF3A2F9F19EF9EF9AF3E995F3E896 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E2E2E2999999 393939272727282828282828282828282828282828282828282828292929282828252525212121 212121232323272727292929282828282828282828282828282828282828292929262626232323 232323282828292929282828282828282828282828282828292929282828262626222222212121 222222262626282828292929282828282828282828282828282828292929282828232323232323 272727292929282828282828282828282828282828282828292929272727232323212121212121 2525252828282929292828282828282828282828282828282828282828285B5B5B9D9D9DDDDDDD FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCEDEDC9E1E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FEFBE0F0D68EE7B756 F0C377FADAADFEF1E3FFFBF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EAEBC0E1E1A4 F8F8E9FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFCF8F0E1B8E2C374DDB858E2C574F4EFD5FBFBF4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFFFAE3FDF3C9F7E6B2FAEFCFFEFCF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF7E6 EAC771DCB23EDCCB7AE7E9C5FBFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF7EEE0BDDDBF74 DBB659E4C473F9F3E2FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF6F6F6C4C4C4676767232323282828282828282828282828282828282828282828292929 282828272727222222212121212121252525282828292929282828282828282828282828292929 262626222222202020222222262626292929282828282828282828282828282828282828292929 282828242424222222272727282828292929282828282828282828282828292929282828272727 232323212121212121252525282828292929282828282828282828282828282828292929282828 252525222222252525292929292929282828282828282828282828282828282828282828292929 3939397C7C7CBCBCBCF0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBF3E9EAB8ECEABCFAF4E2FFFCFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF9E8E8E2ACEEE9C1FBFAF1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFEBFCF2CFF9E2BAFBECD6 FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE F8F8EAE1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1ECDFD4F9DEBBE8C45DE3C75F F0E7B8FBFDF8FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF8F8F4F9FAE3 F1E8A3E4C952E7C355FCE1BBFFF3E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E5D681DFD07BDFD07BDFD07BDBCC77DDCE79DACB76E0D17CE2D37EE2D37EE4D581DCCD7CE2D382 E8D988E1D27FE1D27CE6D782E1D27DE1D37BE4D67DE1D37ADBCD74DED079E9DA85E4D57EE4D87F E4D97FDBD076E6DD82E6DC83E1DB82E4DC88E7DF8CE9E190E8DD8AEAE08BE7DC88E4D987E6DC89 EAE08CEDE290F4E998F7EC9BF4E998F1E696F2E794F2E88EEFE68BEEE58AE2D97CE6DD80F6ED91 EEE48BF0E691E5DA8AE8DD8FF0E499F1E599F3E799EBE092E2D787E8DD8DEDE292EDE292E8DD8E ECE18FF3E896ECE18FEEE392F5E69AF1E197EFDF94F4E499F2E295E7D78AEEDE8FEDDE8FF1E291 F4E594F0E18FECDF8BEDE18DF1E792EBE18CEADF8DEFE492EDE290F2E797F4E999F4E999F4E99B F3E899F1E697EFE396E9DE90F5EA9BF0E596EADF8FEEE393E8DD8CEDE291EDE290F0E692F6EB99 F1E897F1E89AF0E79AEFE69BEEE49CE8DE96E6DC94EEE59BEFE799E9E090E8E18EECE493EFE699 E9E194ECE395EAE192E5DD8CEDE594E9E091EFE698F2E99DE9DF98F6ECA6F8EEA9EFE29EF4E7A1 F4E7A1E5D792EDE099EDE199D3C77EEADE94F4E89EF2E69CE8DC92F4EA9FEFE69BEDE499ECE299 F3E9A1F9EFA7F4EBA3F0E69FECE29EE6DC97E3D994E8DE98E9E197F6EFA3F7EFA6F0E49FF4E7A1 F9EAA1F1E496F8EC9DF2E69AFBF1AFF5E9B2453B0E6F6731FFFCC1A29A587169219E944CFBF1AB F4ECAEDAD192554C28312C05C6C47CF4EFA6E6DC94EADE97E3D78FECE098DED289DBD085D3C97B D8CD7FE6DC8DE4DA8AE0D585E7DC89E5DC99A39B7F0D0A030F1001999C52EAE784DFD573F0DF94 EADEA3BAB5784C500BDEE08CE9E79CE8E2AB32290C231706CDC38EF4EFA5F0E99BF9F1A7DFD591 928742D8D089E7E09FE3DF9ACAC4882A230D656027FFFAC2BAB7849FA054E1E3956F7030838345 D7D389B2A956BEB572E1DA97DDDA92CCCB861E1A0349431FDAD39ADBD589E6E08DEBE296E6DD99 DDD4938F8641A79E53B8AD60EEE395EEE39AE8DF9ADDD59AE9E3B0817C54080500333212D3D1A3 C6C3997B764E443D13665F39ACA771A29B625D571B8C8647CBC689E3DE9EEBE6A3E9E3A2E2DD9C BFB97B847E417D773A837D40D6D093F0EBABACA7667873314C46038A8440DDD690FAF5ADD1CD85 DCD891E7E59DE2DF99CFCC86A5A15F7675316562235E572B9A9260D1CB8CD7D18BC7C0789F9755 61572C4D421F3C30023B3208655E2D9C9348D6CA93DBCF96DED492DFD589DBD27DDBD275E1D879 D9CF71E8DC81E5D882DACA7AE8DC92DDD390DDD393EBE1A3BDB5775C52232C2503948D4FEAE4A4 D0CB89D0CB85A8A1643329002C2006797038F4EEA2ECE794ECE695F5EDA3FAF0ACF9EEAFF9EFAB FEF3A9FEF3A4F6EE9EF6EDA1F9EFAAFFF4B7F9EEB2EDE3A3FCF2ABFEF5A8F8EFA0F1E89CF6ECA3 FDF4ADFBF2ACF7EDA8F9EFA9F9EFA8FBF1A9FBF2A9F5ECA1F6EDA2FAF1A5F7EEA1F9F0A3F9F0A6 FBF1A8F8EEA6F6ECA3FAF1A6F9F0A4F7EEA2F4EB9DEFE698F6ED9DFAF2A1EFE896F8EC99F9ED9B F7EA9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8 DDDDDDB9B9B9B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B2B2B2A4A4A4 9696969393939F9F9FAEAEAEB4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B5B5B5ABABAB 9D9D9D9F9F9FB1B1B1B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B3B3B3ABABAB999999 959595989898ABABABB3B3B3B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B1B1B1A0A0A0 9E9E9EACACACB5B5B5B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4AEAEAE9F9F9F939393 969696A4A4A4B2B2B2B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3BEBEBED0D0D0 EDEDEDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCEDEDC9E1E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFDF6FDE9DD F5CDA5EABA63E8B955FBDAB0FFEFE0FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4EBEBC1 E1E1A5F8F8E9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF5F3E3BCE4BF60DBB542E2DB99F0F1D3FEFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFEDD7FFE6C0FDF5CCFEFBE4FFFFFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5 FCF7D5EAC766DCB248DCCB99E7E9E4FBFBFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFCEEECE7 DDD0AEDBB861E4BA54F9F1DDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEEDEDEDCBCBCBB1B1B1B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 B4B4B4B3B3B3ADADAD9B9B9B959595979797A7A7A7B2B2B2B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3 B4B4B4A9A9A99A9A9A9393939A9A9AA9A9A9B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 B4B4B4B0B0B0A2A2A29A9A9AAEAEAEB3B3B3B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4B3B3B3 AFAFAF9D9D9D959595969696A4A4A4B2B2B2B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B4B4B4 B2B2B2A7A7A79B9B9BA7A7A7B4B4B4B4B4B4B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3 B4B4B4B7B7B7C6C6C6DEDEDEF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEF9FAFBDCFBF1CAFEE7C7FFEFDFFFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFEEFEF9DAFAE2B9FBE9CEFEFAF4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFDF4F2D4E8E3AC F0EDCBFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEF8F8EBE1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBE9E7F9F0E0E9CE80 DDC260E0D78DECEECAFCFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F3E4E4DE E1E2BDDFD782DEC44AE7CC68FBF3DEFFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFECDD88E5D681E3D47FE3D47FDCCD78E6D782DDCE79DECF7AE1D27DE2D37EE5D683E4D485 E1D281E9DA89E4D582E5D683ECDD88E3D57EDFD179E0D279DDCF76E1D479E3D57CE1D27ED4C66E DED379ECE187EADF83E2D87DDCD479DBD47CE2DA87E4DD8AE1DA89E5DA88E9DE8DE8DD8DEBE090 F5EA9AF7EC9CF4E999F5EA9BF7EC9DF7EC9DF4E99AF0E595EAE087ECE388F4EB90EBE284E3DA7F E9E085F0E68EF0E691E2D788E6DA8DEFE399E9DD92E8DD8BE4D989DDD280E9DE8CF1E694EDE290 E2D785E2D785EEE391EADF8DE7DC8BEBDB8FEDDC95ECDB93F0E095F8E89CF1E194E3D385E4D485 E7D887ECDD8CEDDD8BE7DB87DED27EF4EA95FAF09BF0E593EADF8CE7DC8AEADF8FE8DD8DEFE495 F7EC9DF4E99AF0E496F2E69BF1E59BF4E89BF4E89CF0E497EBE191E4D989EBE090ECE191EFE493 F6EB9AF2E89AF2E99EF2E99EEEE49BEEE49CF8EEA6F2E99FF3EA9FF3EA9CEAE290E7DF8AEDE592 EBE293EFE699EAE193E6DD8EECE493F3EB99F5EC9CF5EC9EF0E79AE5DB94F2E8A0EFE59EEEE19D E3D692F3E6A2E9DC97ECDF99F5E8A2EFE39BF7EBA3F1E59CF4E89DEBDF95F1E69BEBE297E4DB90 E6DD92F6EDA2FAF0A8F4EAA3F5EBA4F1E7A0E9DF9AEAE09BF3EAA4E6E093EDE799EBE399ECE29B F7EAA4F0E298F7EA9CFEF1A2EFE399F2E7A8ECDFAC63582A605722FFFEC4AAA261655C15BCB26C F1E6A3E7DD9F453A1B332B05C7C283D8D892ECE7A0E5D990ECDE96EDDF96F7E99FDDCF84D6C97B CEC172D0C474E3D785E1D581ECE08EEEE28FE9DEA1958B78100D021F2307D2DA7BE7E672D8CE67 E9D696F0E3B56E6E3598A151F6F9A3E3E09F948C641D15006D6933F4EFA0DAD38DF1E6AEF4EAB3 B0A663A79B52F8F0A1DBD789F3EDB3786E4D2C2311DED8A7C0BD7ADBDC8CD4D78A80813E939457 DBDB9FC3BE73DDD67CD1CB7AC4BD80FAF2C8514C2F272401C2C27EF8F6AAEBE698E8E190E3DA87 EAE19E8B82479A9150B5AD64B3AB5DE4DA8BEAE196DFD993D8D399A7A3741E19071A1700919256 76764065613C625A44928870524A244E471089843FB1AD65E1DE9DF5EFBAE9E4ADCDC98595914E 767331908C4DB8B477D5D096E4DFA5ABA66B524D114D490A9F9B5BD5CF86A69F4EBCB666E7E192 F1ECA2E3DF9AB8B474847F4555511E69653698956BB2AF86A5A071918C5C746E3D3630071F1901 2B240052490F7D7437A09755CBC179EAE296EBDF92E6DB8BE4D98BDACF82E1D489F1E49BF5E69C E5D588E5D686EAD984E2D377EEDF81FDF2AEEFE3B9ADA27249411A201C007A7534E1DD99EBE9A0 D0CD87D2CD8CC7C1824A4107897D54574B2B696136F5EFA3E8E390F9F3A1F3EBA2F9EFAFF8ECB0 F6EBAAFBF0A8FCF0A4FDF4A7FAF0A8FCF1B1FDF1B8F9ECB5F4E9ACFEF4AFFEF5A9FCF3A4F7EEA0 F2E99EF3E9A2F9EFACF7EDA8FDF4AFFEF5AEFDF3ACFDF3ABFAF0A8FBF2A7FCF3A7FCF3A6FCF3A6 FEF4ACFDF3ACF8EEA7FAF0A9FFF5ACF6ECA3F5ECA1F8EFA2F8EFA1FAF1A2FCF4A4F4EC9BF0E492 EFE392F0E293FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF6F6F6EAEAEAE8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E7E7E7 DEDEDED3D3D3D2D2D2DADADAE5E5E5E9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9 E3E3E3DADADADBDBDBE6E6E6E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E2E2E2 D6D6D6D3D3D3D6D6D6E2E2E2E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E6E6E6 DBDBDBDADADAE3E3E3E9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E4E4E4DADADA D2D2D2D4D4D4DEDEDEE7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9 EBEBEBF7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFCEDEDC9E0E1A3F3F3DCFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD FFF6F8FBE4D3F2CB8DEBBC5DEFC371F7D8AEFEEFECFFFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4 EBEBC1E1E1A5F8F8E9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF4ECCEEEE1AEF9F5DA FFFEF3FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF4E2F0DA98E5C661DEC563E5D998 F1F1D4FBFBF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF4F6EACAF3E2B3FCF8DEFFFEF2FFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFAE8F8ECBDE8C567DCB85CDCCEA9E7E8ECFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD EEEFF3DDD4BFDBB862E4B343FAE3C1FFF6EDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF0F0F0E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 E8E8E8E8E8E8E8E8E8E4E4E4D8D8D8D3D3D3D5D5D5E0E0E0E7E7E7E8E8E8E8E8E8E8E8E8E8E8E8 E8E8E8E9E9E9E1E1E1D6D6D6D1D1D1D7D7D7E1E1E1E9E9E9E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 E8E8E8E9E9E9E6E6E6DCDCDCD7D7D7E4E4E4E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 E8E8E8E5E5E5D9D9D9D3D3D3D4D4D4DEDEDEE7E7E7E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 E8E8E8E7E7E7E0E0E0D8D8D8DFDFDFE8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8 E8E8E8E8E8E8E8E8E8E9E9E9F1F1F1FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFCFFFFF2F9F3D4F3E3B7F6EBCFFEFDFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAF7F6DAF2EFC0FBEBCFFFF2E4FFFCF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2D6 E3E2A8EDEDC7FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFCFFF6ECFBEED7EEEBB9F3F3D2FDFDF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBECFAF7EF F3DCABE7C475E0BF6CE8D49CFCF9F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6EFEFEFEFEFEFEEEEEF EAE9E0E1D797DFCA66E7C866F2D999FDF9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFECDD88E6D783E5D682E3D47FD9CA75E0D17CE0D27CE8D984E7D983E2D47EE5D682 E2D283D8C978E3D480E4D580E4D580E9DB84E6D880EBDD86EADC86DECF79DECF79E9DB83E5D87F D1C36AD7CB71E4D87EDFD37AE7DB83E4DA82E5DB86ECE18FEBE090E2D687F0E493F2E695ECE090 ECE090F5EA9AFAEF9FEADF8EE7DC8CEAE08FF2E898F1E697ECE191EEE58CEAE287F2EA8FF1E88E E3D981E1D77FF2E893F5EB99EDE292F0E598F7EC9FF6EB99F7ED98F4EA94E9DF8BECE18FECE190 EBE091E1D686DED383E9DE8FE8DD8BE2D886E1D488E9DB90E6D88CE5D58AEDDF95EFE197E0D084 E1D386E2D587EADB8DEDE08EE8DC8BF3E896EDE291ECE18FF2E795F5EA99EEE393F4E999EADF90 ECE192F1E697EEE394EADF90EDE194F2E69CF0E497EEE395EEE394EDE293E9DE8FEBE091EADF91 ECE193F0E49AEDE296EFE598EEE499E8DE93E6DB93E9DE96EBE197EDE499EDE496E8DF91E7DE8E F0E797F0E79BF6EDA3EDE499E9E091F2E999F1E999E7DF8EE4DB8BE2D88BE2DA8EF3EAA0F2E8A0 F4EAA3E2D691F6E9A3F4E8A1F1E49EF4E9A1EBDF97E8DC94DED28CEEE29DF1E49FF3E89FF0E69B E6DD92EAE096F9EFA4F6ECA4F0E69DF8EDA5FEF3ACF3E9A2E7DD95E4D992DBD289ECE69BEFE59D E7DC95F0E49CF3E69DEFE295F8EB9EEEE198F5E7A5F5E9AD988C572E2707D4CE96BCB679675F26 A29C5AFDF5B4958B58201800B7B36DDBD595DDD991EDE49CECDC99E1D38BCFC274D8CE7ACBC16F C0B96AB6AE65BEB570D1C77ECDC376DFD585EFE895ECE3A66B5F51020000313309DEE182DBD96F E2D97BE3D490E4D8A848450DBFC777DEE48DE4E4AA443C20150D04C1BC6DF1ED90DED38FE9DBA7 EBDEA8867D32E9E495ECE596E9E69ABBB388190E008B8264FCF6C4B1AF628B8C2BDCDB97656229 AFAA6BD4CF8DE2DD8FCAC36DDED78BDDD59F797053120800A49E65F7F5A4E3E289F4EF9FE2DA8F E7DE918E864991884FD9D18E918A3AEBE493E9E092E4DC97DED69ED3CFA13734140E0D0038370D 6C6D2D79773F847E576D654B483F2668603EA8A46FBFBC7BE1DE9AD9D799B8B37F86844F79773E 949259B3B17ACDCB9498935D4F4A15514D177A7542B0AB75E7E1ABEEE9B2E5E1A3C3BC7AB6AF6D AAA565726D2F49450B3A35005D592C8581578581605F5A3E2F2D0933310947471368673083814B B0AD73C6C285DAD590F7F2A7EBE495C0B96CC5BB72D7CF81DBD57BDCD47FD6CD80E0D48FE2D393 DECE91E2D493E7D994E7DB91E5DA8AD5CD7BA1995D50492137310A7E793ECAC786E8E69FDBD88F D1CF84BDB972B9B475413800837A4FE5DAAD443D15595428F7F4ABE9E494ECE696F7EFA6FBF2AF F7EDAEF4E9ABFAEEACFBF1ABFEF4AEFBF1AEF9EEB0F5EAAFF5EAAEFBF0B0FBF1ACF9F0A6FCF3A6 F8EFA3E9E096E5DB96F4EAA8FAEFADFFF6B1FCF2ADF8EFA7FAF0A7FFF8ADFBF2A7EFE79BFCF3A6 FDF4A8FCF3ABFBF1ACF6EDA6FAF1AAFEF4ADF2E8A1F1E79FFBF2A7FDF4A9FAF1A5FCF3A5F9F0A2 FBF0A2F6EA9DF7EC9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFBFBFBF9F9F9F9F9F9FAFAFAFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFCFCFCFAFAFAFAFAFAFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FCFCFCFAFAFAF9F9F9FAFAFAFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FCFCFCFAFAFAFAFAFAFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFCFCFC FAFAFAF9F9F9F9F9F9FBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FCFCFCFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFCEFEDCBE3E1A5F4F3DBFEFEFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF7F1FCE4C6F4CC8BE3B445ECC27BFBDBCAFEF3EFFFFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBF4EBEBC1E1E1A5F8F8E9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDEEDAFCE3BC FEF4D0FFFCE6FFFFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7FCF8D9F3E19DE2BA4A DEC562E2DC9CF6F2DBFEFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1EBE9BFE5E2A9F9F9EAFFFFFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAF1D8F1DCA2E4C46CDBC075DCD2B5E7E8ECFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDEEEFF4DDD5C2DBB965E3B13CF6D59EFDECD6FFFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFAFAFAF9F9F9FAFAFAFBFBFBFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFDFDFDFDFBFBFBFAFAFAF9F9F9FAFAFAFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFDFDFDFDFCFCFCFBFBFBFAFAFAFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFDFCFCFCFAFAFAF9F9F9F9F9F9FBFBFBFCFCFCFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFDFDFDFDFBFBFBFAFAFAFBFBFBFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FDFDFDFDFDFDFDFDFDFDFDFDFCFCFCFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F3DBE8E3AFEEE9C2FDFAF4FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF4EDEDC6E4E3A8F8F5E3FFFDF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3F3DAE5E5AFECECC7FBFBF2FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFCF8FDECD7FCE3BEFCF6D1FDFDE7FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBECEC FCF9F5FFEBD5F3CB93E4AE57E6BC72F9F3E1FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9ECECECE1E1E1E1E1E1 ECECEAF4F1E0E5D177E4C355F3D28EFEE9D0FFFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE1D280E4D582ECDD8AE7D884D8C974E9DA85DED078E0D27AE1D37BE5D77E EEDF89E5D686DECF7CE5D681E2D47CDED077E2D47BE1D37AE5D681ECDD8DE8D88BDCCC80DCCD79 DBCE70DACD71DED077E5D77FE8D984E9D987E3D584E1D283E3D487E7D88BE6D78AEFE092EDDF8E EFE08FE8DC8AE8DC8AF4E896ECE190F0E795F7EF9CF2EA98F0E896F9F29DEEE78DF5EE94F2EB92 F0E993E5DD8AD6CE7DE5DD8DF3EA9BF2EA99F2EA98F1E996EEE68DEFE68BEFE58CEFE58FE7DC8A E7DC8DEADF91E9DE91E9DE90ECE192ECE191E9DE8EE0D686E4D98AE4D98AE7DB8FF0E49AF0E49B E4D78FE6DA91E5D98DE3D788E3D888E4D989ECE192EBE091ECE192EBE090F7EC9DEDE293F0E596 F5EA9BF1E697E8DD8EE9DE8FEFE495EDE293EEE395F2E797EBE090E5DA89E9DE8DF2E798EADE93 ECE097EEE19AE8DB96E9DD93EADF90EEE395EEE296EDE196EDE197EDE199EDE19AEDE19AEBDE98 E9DC96EEE19CEDE2A0EFE5A1ECE29CEBE198ECE396E8DF90E8E08FF2EA99F2E999E8DF90E7DE91 EFE69BF3E9A1F5EBA3ECE29AEEE59CF3EAA0EFE69CEAE098EDE39CEAE09CEBE0A1F6EBADF2E6A3 F4E89EEADE94F2E69CF7EAA0EFE399EFE298F1E59BFDF1A7F8ECA3E7DB92F0E39AE9DD95F0E49E F3E7A0F1E59DF7EBA3FAEEA5F4E89EF6EAA0EDE196F2E69BF0E399D6CC87464011635F2FE5E1AB 78744D9B9A5FD2D18F302B067E7A37EAE697D7CE8ADAD184EFE299D0BD82BDAF68D5CC76E5E383 E5E388C6C578B8B779BAB680CDC68FD3CD8DE3DD91E7E593F3F0B551453B0500005E5C15EEEB97 DFDA8EDDD98AE3DE8CAAA26460581DE3E198DFE794B3B680130D08504723EFE7A1E9E187F0E098 F7E7A8B1A360B8AF5BDFD886D9D58CDDDA9B3C341E3B311CDDD5A2FAF4B9E3DE90D4CF7652470D B6AA75FAF1AEB3A95BD0C97AD5CD88C5BC84857A4F100500968C5BFCF5B4E0DC8ADEDB81EBE692 F4EEA49D9455ABA46DE1DB9EA9A558D7D178CEC872E6DE93E2D6A2D4C8A5645C3C0000003D4020 A3A96F8483478D8951787240A9A2779F99719F9A73A19C736E6B3D73713D716F39727137767541 96946B86845B615F357371448B875A949162AEA97ABBB786A6A071938B5E78714768623C4A4624 2C280C2E2A04201D0034300B34300736330E1815021B16002C270C55512C8C8E4F999E54B9BC74 C5C781C0C179BCBD74C9C980B5B268A5A156BAB56ACAC37AD2CD81E1DF8FDEDB90D7D18FF0E6AB F2E4ACDFD297C3B879A49A5C7D773E4541263E3B0858572A81814ADFDE9DF7F7B5F0F0ACDEDB95 DFDB94D8D38E655E2B3B3200B3A96CF5ECB0CFC9923C38067F7C4BF1EEABEDEAA1F0ECA1F5EFA4 F6EFA6F6EDAAF6EBADF8ECB1FBF0B5FAF0B4F7EDAFFAF1B1FBF2B0F9F0ACFBF4ADF5EDA4F9F1A8 FBF3AAF0E8A0EDE49EF3EAA7F2E9A9FBF2B1FDF5B1FAF2ABF6EEA5F6EFA3FCF5A8FBF3A8F3EBA0 F7EFA4FAF2A9F1E8A1F2E9A4F8EFAAF8EFAAF5ECA6F2EAA2FAF2AAF7EFA6F5EDA4F8F0A7FBF3A9 FBF3A9F8EEA7FBF1ABFDF4AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8EDD4F3E0B2FBF4D4FFFFEFFFFFFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFDFFF6ECF6E5C1DFC96FE1BD5DEBBF6FF9E9C0FFFFF0FFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFDF6EAEBC0E0E1A3F7F8E9FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF8E5 FFF0CCFFEAC5FFF1D9FFFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FCF5D7 F2DD96E5C865DFBE56F5DAAAFFF0E2FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E9EABDE1E2A6F9F9EDFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4E7C6E6CB83DDC770DACF8EDCD8C0E7E7EAFBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDEFF0F3DED8C7DABF76DBB547DECF78EDE8BCFDFCF7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF3E2F4E1B7F7DFB6FFEBD7FFF7EFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFDFDE7EBEBB9DFDFA0F6F7E6FEFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAF0F2F3D9EBECC4ECEDC9F7F8E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFCF8F2EAC7ECE0ABFBF8E2FFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1 EBEBEBFCFBFAFFFAF6F6DEB8E4B964DEBB56E9E7A5F5F7DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5EBEBEBEDEDEDF0F0F1 F0F0F1EEEFDEE9E8BADEC663E3C463F6E1B6FFF9F5FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDFD07EEADB88EFE08DE4D581E0D17CE8D984E3D57ED3C56DCEC068 DBCD74E6D880E0D17FDBCC79E6D782E4D57EDED077E3D57CE7D980E7D883EADA8BF2E295E3D388 D8C975D7CA6ED4C66DD8CA72E3D57DEBDC87E3D482E1D281E2D284E7D78AEBDB8EEBDB8FE8D988 EADB88EEDF8CEADE8AE6DA86EDE18DEFE590F1E893F5ED98F1E994EEE691F4EC97EFE88EF3EC94 F2EB93F0E894EAE291DED587E6DD8FF6ED9EEAE391F0E896EBE390E1D881EFE58CEFE58DEEE48E E7DC8AEBE091EFE495F0E596EFE495ECE191E8DD8BE7DC8AEEE393EADF8FE5DA8BEADE91EFE399 E7DB93E0D48CE9DD94F0E499EFE495EADF8FE7DC8CEADF90E6DB8CE8DD8EE8DD8EF7EC9DF3E899 F3E899F2E798ECE192E6DB8CE8DD8EEDE293EFE495F2E798F6EB9CF2E797ECE18FEBE08FEDE293 EADE92F0E49BF4E7A1F1E4A0EDE197E6DB8CEEE394F2E69AE6DA8EF3E79BF0E49AECE096E9DD94 EADE96EDE19AEEE19BF0E6A1F5EBA6F4EAA2F2E99EF2E99CEDE495E8E08FEEE696EEE596EBE295 EFE69AF7EEA3F0E6A0F3E9A2F1E79FE9DF97EDE499F8EFA4F2E89FF1E7A0EAE09CE8DD9DEFE4A4 EBDF9BF3E79DEBDF95F2E69CF5E99FEDE197EBDF95E6DA90ECE096F3E79DEEE298F3E79DF2E69E E5D991EDE199F9EDA5F4E89EFCF0A6F4E89EF5E99DE7DC8DE7DC8DF6EB9CEFE59CCAC18D2F290D 696632868157BFBD857E7C4127210DD1CD88E7E094D9D089E6DB8BAA9E51CABA7AEFE39BDED685 D3D17BA2A04DB8B76DCECD8CECE6AFD3CE92CDC783B3AB61979543A7A56B2C201B0800009C9951 E8E594EDE99ED4D084EAE59259510E908849E8E39DE7EEA565693D000000B0A87BF7EEA7E5DB84 F5E7A1E8DF9E847830F8EF9CECE69AFBF6B69E985E060000BEB787F3EBBCEDE79FDED987A7A157 70681FBDB371D9CE8EECE393B5AC61EAE2A2B0A770190F005F5526FAF2B9E2DC95EDE897DCD782 F4EF9CA6A057928A49D6CE91C2BB78C6C170E7E189928C373D3408251803372C15070000393918 7E8355A6AC71A1A161D2D194A5A26B8A8755615C3178754C524E28646138454216706E3F959563 9594639D99707673487774488987575D59294A4714312E051D1702241E012822002E26003A360A 363204221E00302C0043400E64612D8B8854928F5B5B5828736F3F545022444213454310363600 5E5D2474733C3330062A28005D572169632E4F4914504A15423C07605921787834908D4C9D965D 857B43695E2851450B392F003E34004842085F5B28C2BE92FFFCCBFFFFC8EEECB0E6E3A5DAD696 D0CD87ACA86157530C5A5310CCC37EEEE5A0CFC683BEB87C292400A8A465FCF7B3F6F2A8F7F4A7 F3EDA1FAF3AAFFF7B1FFF3B4F9EDB2F5E9AFF5EBB0F5EBADFCF3B2FDF4B2FBF2ADFEF6AEF5EDA4 F8F0A7FBF3AAF6EEA6F7EFA9FDF4B1F7EDAFF6EDACF7EEAAF9F1A9F8F0A7F5EEA1F7F0A1F6EEA4 F3EBA2F8F0A7FCF4ACF0E7A1F1E8A3F7EEA9F6EDA8F3EAA4F1E9A1FAF2AAEFE79FF9F1A8FCF4AB EFE79DFBF3A9F3EBA3F5EBA7F6EDA8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEF2DFFEE7C2FFF0CAFFF9E0FFFDF7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF8F6E7E7E4B2E0CB74DFBA4DEDD583F8EEC2FEFBF0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFCFAFDF4E8F0E7C3E8E1B3F9F8ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFEF0FEF9DCF9E4BAFAE9CBFDF9F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FFFEF5FDF9DBF0D78EE7B851F0C476F9DBAEFEF0E0FFFCFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFBF1E9EABDE2E2A6F9F9EC FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF1E0B5E0BE64E0C771E1D8A2DFDCC9E6E7E9FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDE9EAEDD7D2C6DCC48EE0C065D4C966E6E3ABFCFCF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EDFDE8CFFADEB7F8E1BCFCF2E2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCE9F5F5C5ECECB6E8E8B9F9F9EC FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCF6F0EBC8EBE4B2F6F3D8FFFFFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFCFCF6F5F5E0ECECBFEAE8B4FAFAECFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7 E1E1E1EBEBEBFCFCFCFFFFFFF8F0D8EAD48EDFC55AE0CE65F0E8B1FFFFF9FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEFEFEFE3E3E3F0F0F0 FEFFFDFEFEF8EFE8BEE0CE7DDFC565EAD58DF8F0D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D280E4D582DCCD7AD9CA75EEDF8AE3D47FE5D67FD3C56D D4C66EE2D47BE3D57ED6C774D7C875E5D681E6D880E1D37BE3D57DEBDC87EBDC89E3D483EFDF91 EADA8DDFD17CDDD176DBCD75DBCD75DED17AE3D581E2D482E3D584E6D688E9D98CEADB8EE9DA8D EFE08FEADB88EADA87E6DA86E8DC88F3E793EEE48FF1E893F1E994EDE590EBE38EECE48FEDE68F F1EA92F5ED99F5ED9CF3EA9BF0E79AECE397E9E094E1D88AE8E090ECE493E7DF8BE4DA83E2D882 E9DF8CE8DD8DE2D788EADF90F2E798F1E697EADF8DE4DA85E5DB86E9DE8CE6DB8BE5DA8BE7DC8F EADE92E8DC93E3D78FE8DC91F2E69AF3E999ECE191ECE191EBE091EADF8FF0E596EBE091EDE293 E3D889E5DA8AE9DE8FEEE394F0E596F1E696EFE495EADF90EDE293F4E99AF1E696EDE290EFE493 F1E696E5DA8BE4D88DEBDF97EDE09AEADD94EFE496F0E496EADE91F1E598ECE093F0E498EEE295 E7DB8EE7DB8EECE093E8DC90E3DA92EAE098EBE297ECE397ECE395E5DD8DF1E898ECE394E6DD91 E7DE92F1E89EFBF1AADAD08CE4DA95F3E9A2EEE49DE8DF94F0E79CF2EA9EF1E79EEAE09AEAE09A EEE3A0E8DD96F3E79DEADE94EADE94F2E69CEBDF95F3E79DEADE94E8DC92F1E59BEDE197EADE94 F9EDA3F2E69CF1E59BF0E49AE9DD93EBE093ECE093F4E999EBE091E7DC8DF2E797F2E89EF5EDB2 D8D39B504A1C2923008F8954504A185B5629FAF9B8E3DA93DDD488A19646BAAF5FF2E79ECDC47C B0A961BAB56FF1EEA8DBD893AFAB6A625E2A4A4401615813726A207471238B89511F130D090100 C2BE7BE3E08FDEDA8FDCD88CDFDA85292301BCB46EEBE6A1DCDFA62B2C11282307E5DFAAEBE398 E2D886F5E39FBFAF6AA09447EFE895F6EDACE0D9A5373216646027FFFABDF4EDB8E0DB8BE7E293 756E2EDBD481D5CE7DBEB471E0D78BE4DB98E6DCA74C421D332B09DDD694E3DB95CDC77BD9D386 E8E293ABA4598B843CEEE7A1BBB46EAFA85CDCD582DBD580E8E0939E95579B90692F25180A0300 6A6A4A606739BCC589CFD18FAFAE6F8989505755236260347F7B558C896494906C63603A6D6A42 737145626134514E1E48461445430F3935033C390B5452173E390C5D581B716C3278703A918A54 8C864DABA668BEBA7AC1BD7CC5C17EE2DE9AE1DE99EDE9A6D8D492CAC586A6A2638C884DA6A171 908B5D6864356964365550227772436D663C40390E3D350D221B0038320C46401252511A5C5A24 4F491F20170D3F3608786F319F9551C2B975D3CB8CDBD5A0D5CEA2D0CA9DD4D09ED5D19BB0AC71 959152433F035B57118C883EF5EEA5DFD88EE7E095D0C9807E7836302B0BD1CD8BF1ECA7F7F3A9 EFEB9FF5EEA2F8F1A6FAF1ABFAEFAFFAEEB1FCF0B4F3E9ACF4EAACF9F0AFF8EFACF3EBA4F5EDA4 F6EEA5F8F0A7F9F1A8F7EFA7F7EEA9FAF1AFF9F0AFF6EDACF6EDAAF9F1A8F9F1A8F9F1A5FCF5A7 FBF3A8F7EFA5F6EEA5F7EFA7F5ECA6F6EDA8FCF3AEFFF7B2FAF1ACEFE79FEFE79FEFE79FF9F1A7 F8F0A7F1E9A0FAF2A8F6EEA6F6EDA8F7EEA9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFAEAFFF4D2FEE9C1FEEDD2FFF9F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F6F7E6E9E3AEDECD75E0BF52EBCF7F F8EFD4FFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFDFFF5E9FDE6CCF9E0C8F7E2D2FDF8F4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFAFBFAEAEBE3B0EEE8BEFAF8EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFEF5FAE6C2F4CB87E9B956EEC36FF9DBAFFFF1E3FFFCFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF9EFEAE9BEE3E2A9 F9F9EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF0DBA6E1B54AEAC470EED9B2E4DDD1E6E7E8FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCE1E2E3CEC8C2E1CBAAEFCE8DDBC064E9DBA4FCFAF3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFEF6ECF3E8C4EBE2AF F5F1D7FFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F5F5D1E9E99EEEEEBCF7F7E6 FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFAECD4F7E3BAFBF2D0FEFFECFFFFFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFDFBF4F3DDE9E8B8EFEEBEF7F7D3FDFDF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F7F7F7E0E0E0EBEBEBFCFCFCFFFFFFFDFBEFF7EFC3EBD179E0B43CEED68AFEFDE5FFFFF9FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEEEEEEE3E3E3 F1F1F1FFFFFAFFFEE7EFD790E0B445EACF79F7EEC2FDFBEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D380E5D683DBCC79DACB77F0E18CE8D984EADC84 E1D37BE2D47CE5D77EE2D47DE2D380E0D17CEADB86E7D882DFD178DED079E4D580E8D986DDCE7E E3D385E7D78AE2D581E2D87EE4DA80E5D982E4D882E5D985E3D785E3D786E3D687E0D385DDD082 DDD082E7D887E7D885EDDE8BEDE18DE9DD89EBDF8BE6DC87EBE28DECE48FEFE792F2EA95F0E893 E9E18CEFE793F8F09FF8EFA1F8EFA3FBF2A7F0E79CE4DB90ECE398E9E093E4DB8EEBE192E5DA87 E2D784EFE394F1E696E3D889E4D98AEADF8FEBE08DE8DE89E8DE85EAE087E3D984E4D987E8DD8D EBDF91ECE094F5E99FE9DD93E7DB91EFE396EFE494EBE08FF3E895EADF8FE3D888EBE090E9DE8E F1E696F0E595EDE292E9DE8EEBE090F3E898F8ED9DF8ED9DF3E79BF1E697F2E798EBE090E7DC8A EADF8EF2E797EDE293F1E598F3E79EEEE29BF2E69DE4D88DE9DC91F8ED9EF0E596EBE090EDE293 F0E595EBE08FEBE08FF2E795EDE191E9E094EFE69AEFE698EFE698F0E898EAE291EEE597EFE699 F1E89DF3E9A0F1E8A1F0E5A2ECE1A1E7DC9AEEE49EEEE49DE9DF96EAE196E7DE91E9E095EBE197 F1E79FF8EDA6EDE29AF4E89EEBDF95E8DC92F2E69CEFE399F5E99FEEE298EDE197F5E99FEDE197 E8DC92F4E89DFBEFA4F7EB9FEDE195EBE092E8DD8EEADF8FF4E999F3E897F0E594F0E594EBE191 F0E6A3FDF5BCE9E0A8A0995C877F4B100900A19B57EDE5A8EFE5A4B2A857B0A452FCF3A1AEAA58 AAA35CDED89BF6EFB8A8A369433F134843028F894BCCC477DCD389EBDF99F5F0A6DCD9A3271A13 0F0600D0CB8DD8D584D2CF82E9E49AB6B05E2E2800D7D186FAF6B2AFAD850000006E6B44F3EDAA F0E899E6D98BF9F1AD96883EE8DF8FEAE393FAF2BB827953161200C6C27EEBE89CDAD690F6F0A3 AAA45B9C9454DFD980DFDA7FC7C071C3B971EADFA7796E3D0C03009A9352EEE999CCC771E0DB89 E0DA8EB8B16B8B843EEBE49CD2CC81AFA75ACBC371CAC26EDFD685EBE39CE4DCA8443B1C060000 534F3D989B7DA5AD80525B28595E20898B4DCCCC9591905FAAA97C58562F716F496A6843797750 6F6D46605E36545222615F275F5A225E5A1E979355A29F5D9E9956A5A05DBCB775C4BC7DD0C88B E4DA9DE1D994F2EC9EEFE99BEAE496E0DB89E6E08CE9E490DED986F2EC9BE9E395F3ED9FD8D289 A8A066B3AA7579703C847B4898915F8882518B8456A59F71A7A0746864371C1700262308676739 969469CAC79ABBB582A49D65B2AA687F782D766E227D7430645B20534817504818565321403A0A 625D25686426787339B5B16BAEAA61E9E399DFD98DE3DD91CAC3773B36097B7638FFFEBCE2DE96 EBE69BF7F1A6EBE398F3EBA1FAF2AAFBF0AFF9EEB0F9EEB0FBF1B3FAF1B1FFF6B4FEF5B0F9F1A9 FAF2A9EFE79CF8F0A7FBF2AAFDF4ACFBF2ADF7EEABF9F0ADFBF2AFFAF2ACF9F1A8F8F0A5FAF2A7 FCF4A9FDF5A9FBF3A9F7EFA6F9F1A8FAF1ABF7EEA9FAF1ACFFF8B3FCF3AEEAE29AEBE39BF5EDA5 F5EDA4F4ECA3FCF4AAF9F1A8F5EDA5F4EAA6F2E9A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF4FEFCE2F6E4B9F7E6C4FCF7ED FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F6E2E7E3B0DDB950 E1B955EDD8A2F9F3E3FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFCFAF0DAF5DEB4FAE2CDFFECEFFFFAFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAF1E2E3AAE7E8B7F8F9ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFFFFF4EAFDE3C5EDC26FEBBA5AF1C476F9DAB5FFF1EFFFFBFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAF6FCF0E0F1E4C3 ECE2BBFBF9F0FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFFF9F0D998E2B13CF1C87DF7E1CAE8E1DBE6E7E7FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE7E7E8D9D6D4EDDECEF9DBAFE2B959ECD498FDFAF3FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFDF3F4D7 E9EAB5EEEEC6F5F5E3FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF7F5F5E0EDEDB9E9E99EF5F5CE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF3E8FEEACFF7EEC5F5F6D0FEFEF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFCFEFEF4F2F4E7CCEBDFA8F5F0C8FFFFEFFFFFFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF4F4F4D5D5D5E4E4E4FBFBFBFFFFFFFFFFFDFFFEEBF2E0A4E0B548E8C970F5EAB6FDFAED FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF4F4F4ECECEC EBEBECF6F6F6FDFBEFF5EBB8E8CA6BE0B53BF1DE9AFFFEE9FFFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D381E5D683E8D986E6D782E2D37EE1D27D E6D881E7D981DBCD76D8CA71E0D27AE1D27DDECF7AEADB86E9DA85E4D580E2D37FDECF7CE5D686 E7D888E5D588E3D385E0D27EE1D57FE3D781E1D581E2D682E7DB89E1D583E3D685E4D788E3D688 E6D98BECE091E7D885E7D883F1E18CF2E690ECE08AEBDF89E1D780E7DF87E7E088EDE68DF1EA92 ECE48FE7DF8BEEE695F8F09FF5EC9EF2E99EF7EDA5EEE49CE7DD95EEE599F0E79BE8DF92E8DF8F EDE292E9DE8FEFE495EDE195EADE92EADF91E8DD8DE3D986E2D882E2D87FE0D77CE6DC86E2D785 E6DB8CEEE394EFE397F5E99FEEE298E7DB91EDE293EEE393E9DE8DF4E997ECE191E2D787EADF8F EADF8FF3E898F5EA9AEEE393EBE090EEE393F2E797ECE191E7DC8DF3E79BF0E596F3E899F3E898 F5EA98F4E997F0E593F0E595F7EB9EF8ECA2F0E49AF5E99EE4D88CE5D98EF4E99BE6DB8CEDE291 E8DD8DF1E694EFE491EBE18CF1E792EEE390DBD283E1D88BE2D98AE4DC8CEAE291E7DF8EEBE293 EAE194EDE39BF2E8A2F0E5A3EBE0A0F5EAABF6EBA9F0E6A0F0E69FF4EAA2F2E99DE9E093E9E093 EBE295F1E89CF5ECA1E8DE93F3E79DF1E59BEFE399F8ECA2F2E69CE9DD93E5D98FEFE399F4E89E E6DA90E4D88EEDE195E8DE8EEFE495F5EA9BEDE292EDE292F0E595ECE18FE7DC8AEDE290F3E994 F0E594EADE93EDE1A3EDE2A8FCF6B4A19969211500BBB46EE4DAA2DFD598978C39EEE390AEA551 A5A44EE8E49DE1DBA6847D520F0700797135DFD98FF4EE99E2DB86F7EC9FE0D18DDFD992CFCB95 120600180F00CAC58CD2CF7ED5D385DCD88E979146534D00EDE799FDF7B6747057000000A6A16C F3EFA0F0E795F4E69DCFC07D908338ECE493F3ECA2C4BA90221900686134E4DE96DCD882D8D578 DFD8936E6627D0CA7BEEE996E2DF82B0AD50FAF2ACA396681204046C6026EEE797DBD678D5D170 ECE691CEC67D8E8544E1D895D1C981A7A050CEC772D2C871C9C16FD3CB80EBE1A563592E070100 312C1A615F4F4448292B34073B440DC9CE98B3B6836D6F3E4D4F2164653B8E8F676B69416A683F 706F433B3A0B5252205A58208F8B4BB6B06E99954FAEAA61C5C178D8D288E5DF95E6DF96EDE49C E9E19BDED48EEBE295F2EA95EAE389F0E98EE5DD82E3DD80E9E287E9E287E7E085DCD57DE8E189 DFD785DBD284D9D185B0A85EB3AC62C3BC74928E47ACA763D4CF8ED5D190D2D291848444515219 38390E45461E8C8B5ECDCA96B7B475D2CD84D5D07DBFB964B8B162D7CE89C3B77D9D945DCAC58D A7A26AAFA96DA29D5DC0BB78C7C37D8E8A43C8C47BE1DD96E1DD96ABA65E0E0700B8B36AFFFFBB CAC379C1B86DE9E294EFE89AF3EBA1F8F0A7F8EFACF7EEADF8EFAEFDF4B3F8EFADFAF1ACF6EDA7 F2EAA1F3EBA0F0E89DFDF5ACFFFAB1FFFBB5FBF2AFF3EAA7FCF3B0FFF7B4FBF2ACF6EEA5FBF3A8 FDF5AAF8F0A5FBF3AAFDF5ADF7EFA7F9F0ACFCF3AEFCF3AEFEF5B0FDF4AFFAF2ACF9F1A9F9F1A9 F6EEA5F6EEA5F9F1A8F9F1A7FAF2A8F9F2ADF7F1ADF5EEABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFBF0E7E5B1E9E7B8 F8F7E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFBF8F4E4 E7CF8DDEBB61DFBE68EBD6A0FBF6EAFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFBF1F0D3E4E1A8F1EDD0FFFCFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E5E5B0E9E8BAF9F7E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFFF7EEFDE3C5F2CA84E5B64FEBBF75FBDCCCFFF2EE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFEF1E0FDE1C4 FCDECCFCE4DFFEF9F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FEFEE4EFD88BE1B442F1D598F5EFE7E5E5E5E4E4E4FBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F6F5F6FAF7F2F7E7C3E1B343ECCE84FDF7EC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FEFEEDF8F8D1EBEBB6E7E7B4F8F8EAFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF5F5E2E9E7B9EAE8AFF9F9D1 FEFEEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAF7E9ECEABFE7E7B5F9F9ECFEFEFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFDFFF4F2FFE5E1FDDCCAFCE1C1FDF1DFFFFFFDFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF1F1F1C9C9C9DCDCDCFAFAFAFFFFFFFFFFFFFEFEF8F3F0D3E0D890DEC86DE3C76F F6EFD2FDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFEFEFEF4F4F4E8E8E8 ECECECFAFAFAFCFCF7F6EFD6E4C972DEC960E0D776F2F0C4FEFDF7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECF7DDCCD7AE5D683E4D581D8C974 E6D782E8DA83EADC84DCCE76DACC73E6D87FE2D37CD8C974E1D27DE3D47FDFD07BE3D480E1D280 E6D786EFE090EDDE8FE2D383DED17FDDD27CDCD17ED7CB78D7CB78E0D583E6DA89E8DC8BE6DA8A E2D687E4D889EADD8FEEDF8CEFE08BEEDF8AEEE28CF3E791F3E791E9DF88EEE68EEDE68EF0E991 F2EB93EFE88FE8E08DEBE392F4EC9BF4EB9EF0E69DEFE59DEEE49DEEE49CEDE39AF1E89DEDE497 EAE091EBE090EADF90EDE194E7DB8FE9DD91F6EB9DF5EA9AEDE38FE8DE87E2DA7EDED57AE9DF88 E1D784E3D888EDE293EDE294EFE398EDE197E3D78AEAE090E6DB8BE9DE8CF0E692EADF8EE4D989 EFE493EADF8EEBE08FE5DA89E6DB8AE9DE8DEFE493F2E797E0D584D2C677F2E59AEADF90E9DE8F ECE191F1E694F5EA97F0E592ECE191ECE292EDE294ECE095F7EB9FF3E79BF1E599EDE294EEE394 F2E797E6DB89EFE492EFE590E4DA83E8DE87E3D982F2E99AF3EA9CEAE192ECE493F3EB9AE6DE8D ECE394DED588E0D68EE5DB95EFE5A3F5EAAAF6EBACFEF3B1F2E8A3E7DC95E7DE93E9E093F4EB9E F0E79AECE395F0E799F0E79BE5DB90EDE197EDE197EDE197F3E79DEBDF95E4D88EEBDF95F4E89E F5E99FE7DB91E2D68BF8ECA0E6DB8CECE192F5EA9AE0D585D4C979ECE18EE9DE8CDDD280E4DA84 F6EC97F4E996F2E696EDDF9DEBDFA3EBE39BA094630D0000A39C56FBF0BCBEB37BA39B47DED281 807A26DDDD88DCDA965E582F241C0FB5AB7EF4ECB3E9E296D9D279D9D179E7DC8DF1E5A1E6E09A D9D79E1D1305180F00B7B27DDCD989CBC87AD0CB837E77357D7828EFEA99E9E2A33A33241A1506 C3C081E2DF88DCD37DFBEEA4A89953C5BB6EE1DA8AFCF6B3766E48060000AEA568E9E398E7E486 EFED86ADA665867D43EDE896E6E18FD1CE72D7D473D8D190483C202E200AC4BA7CDDD782D8D56F F2EF88DED9808F873EC6BC7EEFE6A5ABA35ABBB461DCD57EE6DF89E0D989F0E7A4ADA570120A00 1E18088D88782E2D1E5B5F3F838A5D828A594C51295E603A73754E8F906A707048515126363606 3B3A0653541A5F60229D9D5BB2B16CBFBA73BDB56CC6C175DCD588DAD384DED786E5DD8CE1DA8A E9DF91E8DE90EBE095E9DD8CE2D780E0D57BE7DB7FE0D679EFE485F4E889EEE486D9CF72E5D87E E8DD85E1D67FE5DB7EE2DA7DDBD478D8D177D9D37BC2BD67B1AD58CDCB79C3C270B4B364CDCD7E B3B3704446182B2C03636433C2C18BBFBF7ED6D587CDCB72C6C266CDC771EEE598E3D994B6AE6B CDC985EFECA79D995495904AB3AE68BFBA76C5C07CA09A5ADDD89BCCC68B494319251E00CCC478 F8F0A5F2E99EEEE697F5ED9EF9F2A4F5EEA1F0E89FF0E8A2F7EEAAFFF5B2FFFBB9FAF1ADF6EEA6 F2EAA1EBE399E8E195E8E095FAF2A8FFF7AFFFF5B0F4EBA8EEE5A1FDF4AFFDF6B1FCF4ABF5EDA4 F7F0A4F9F2A7F7EFA3FBF3AAFAF2AAF7EEA8FAF1ADF8EFAAFCF3AEFBF2ADF5ECA7F6EEA8FCF6AE FFFBB3F3EAA2F6EEA5FFF7AEF7EFA6F9F0A7FDF8B2FEF8B4FFF8B4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FEFEFEFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF3E5E5B0 E7E7B5F7F7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFCF7F5EACFE9D399E0C06CE1C170ECD8A6F7EFDAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF0F0D1E1E2A5F0F0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF6F2F3CCF4EEC4FCEDD3FFF5EBFFFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFFF5EDF4E1B5E3C974E1BC5DEDC67F F8E5BDFFFFF1FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF6EED4 EFE0B2F7E7D0FFF2F4FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF1F0F0C3E5D281DFBA56F2DDACF1EFEADADADCD8D8D8 F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEBE0E1E2F0EFEDF7E9C9E1B23FEBC471 FCE8CEFFF9F4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFF9FDFDE9F4F4CDEDEDBAECECC2F4F4DFFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F3F3DAEDE8C3EEE0BDF5E8CC FEFCEBFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF7F4F4DEEDEDC8ECECC6 F5F5E1FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFDFAFFF2E4FFE7D3FFDFCBFFE2CFFFEFE0FFF8F2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF7F7F7E3E3E3ECECECFCFCFCFFFFFFFFFFFFFEFEFDF9FAF0EFECC7E4CF79 DEBF4CE7DFA1F3F2D7FDFCF8FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5ECECECEBEBEBECECEC EFEFEFF6F6F7FCFCF7F3F2D9E8DFA3DEBF4DE3CE70EEEBB6F9FAE8FEFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D683E4D582E6D784E5D681 E0D17CE6D782E5D77FE8DA82E6D880E6D87FE9DB82DBCD75D2C36ED8C974E0D17CE2D380E6D785 E4D583EFE08FE8D988E6D786E2D382E3D785E2D785E3D886D9CE7CD4C977DED381E3D888E6DB8B E6DB8BE5DA8AE9DE8EF0E596E8D986ECDD88F1E18DF1E58FF4E892F6EA94ECE28BF2E992F5EE96 F4ED96F3EC94F2EB93E9E18DEEE694F9F0A0FCF3A5F1E89DE6DB94EEE49DF2E8A1F6EDA2EEE598 EBE295EFE595E8DD8DE9DE8EF4E99BEEE296E9DD91F0E497EFE494EEE390EBE18BE4DA80E3DB7F EBE189E9DF8BEADF8DEBE090EADF91F2E69AEADE92E3D88AE6DB8CDFD483ECE18EF1E792E3D886 E2D785E8DD8BE5DA88EDE190E8DD8BEFE492EADF8DEBE08FF5EA98ECE18FE0D485F9EDA2F0E498 E7DC8DE5DA88E0D583ECE28DF3E994F2E795EFE493EDE292F0E597EFE397E3D78BEADE92EEE395 EFE495F3E897F2E797E8DD8AE9DF8BE4DA84E7DD87E5DB87F6ED9EF8EFA2EEE596E0D788EDE593 FBF6A5E8DF90DDD487EDE39BEFE59FF2E8A5F2E7A6F3E8A7F6EBA9F2E8A3ECE39AF3EA9DF8EFA2 F1E899F0E798EEE597F5EC9FF5EC9FF1E69CF0E49AECE096EFE399F1E59BECE096E8DC92F3E79D F2E69CF4E89EEDE197E6DA90F1E599EBE091EDE293F1E697E9DE8EDFD484EEE392F9EE9CEDE290 E9DE8BF3E994E8DE87ECE089EFE298EFE3A2F7EEA7A297681104009A9252F3E8B8928651C4BC6C 837A29C8C372ECEE9E62611F231C09BCB38AF3E8BADFD699E6DF91E7E087E6DE89F1E99DD7CD8B B1AD67CCCA8E2D230D130900B1AB7BDFDC8CD8D686E4E09A625A26B5B060F9F4A2D6D0921A1205 403A24E8E69FE7E287E7DE88F6E89D887A32E7DF93E4DC92DFD79D282211463D1CF0E7A9E3DC8E F6F394E6E480726B25C2BA7CDCD68BDFDA89C9C46DDDDA83837D41170D00B0A374E4DB9BD8D27C E0DD78E7E38089832BC2BA6FEFE6A6B3AA67AAA257E7E18EE9E290D7CF7FFAF2ACD8D195221C02 0802009B977F9A98846161495D5F3E2E340B535A2D6D6E4F48482D2F31115656335B5A326C6B3C 6C6C355454157F7F37BCBC6EBAB968BDBA6ADAD386E2DB8DE4DD8DE9E18FEAE28EE9E28DECE28C E9E08BECE18DEEE290EEE292EDDF8CE5D681E5D780EEE086EBDF82E9DC7FECDF83E8DB7FE7DA7F E9DB82E9DB85ECDE87E3D97BE5DB7BE2DA7AE2DC7EDFD97ED5D074BCB75ECCC772CFCE78D1CF7C D3D17ED2D188A6A7722B2D071B1D06838449CBCC8AD1D384C8C970E2E083DBD87BDCD680DBD283 C6BF70C1BE6EECE99BAAA759ABA85CC2BE75B1AC67E8E3A3BCB57BE7E1AC6E6939352E04423A00 D8D081F0E899F3EA9BF7F0A1F2EA9BF9F2A4F6EFA2F3EBA0F5EDA4F9F0A9FDF4ADFAF3AEF5EDA5 F4ECA3F9F1A6F8F0A3F2EB9DEFE79CFBF3AAFFF7AFFFF7B2FAF1AEF2E9A6F1E9A2F5EDA6FCF4AB F8F0A7F4ECA1F6EEA3F6EEA3FEF6AEF7EFA8FBF2ADFFF9B6FBF2ADFCF3AEF9F0ABF7EEA9FBF2AD FAF2AAFFF9B1F9F1A9F9F1A8FEF7AEFBF3A9F6EEA5FCF5AFFCF5B1FBF4B0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 E9E9E9DFDFDFDADADAD8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8 D9D9D9DEDEDEF2F2F2FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF4 E9E9BCE9E9BBF4F4DFFDFDF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF6EDD6E7CE8DDDB95DDFBE68EDDAABFBF7ECFEFDFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEFAF3F2EFCFE6E6ADF2F2D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFEAFDF2D0FBE3BDFCEBD5FFFDFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F6E2E6E3ADDCC565 E0B847EED687FBF5CFFEFCF4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFA EEEECCE2E2A7F1F0D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F7E9E2DEA1DBCA78DEC370F2E4BDEFEEEAD5D5D6 D3D3D3F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE0E0E0CECFD0E7E6E3F7ECCCDFB848 E8BE61F8D7A7FEF1E2FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8ECECEC E0E0E0D9D9D9D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D9D9D9 DEDEDEF3F3F3FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFBFEFEEAF8F8D0E6E6A9ECECC2F8F8EAFDFDFAFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8F8F7E8E9E6B9E9DDB1F7E0CF FFECEEFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF7F7E6 E5E5B1EDEDC7F9F9ECFEFEF7FFFFFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFDFAFEF6EDFBE5C6FBDDB7FEE0C0FFEDDBFFFCFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF5F5F5F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFCFAF0 EEDC94E0C34ADCCC6CE9DFA9FAF4E5FFFEFDFFFFFEFFFFFFFEFEFEF9F9F9EDEDEDE2E2E2E0E0E0 EAEAEAF9F9F9FFFEFFFBF5EBE9E0ADDCCB6DE0BF49EED992FCF9EDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D582E5D683E6D784 E2D37FDDCE79E7D883E2D47DE9DB83EBDD85E5D77FE3D57CE1D37AE0D279E0D17CDDCE7BE0D181 E6D686DDCD7FE5D587DECE7FE2D382E2D480E3D785DDD282DBD080D8CD7EDDD283EDE292E4D989 E2D787E2D787E3D888E5DA8AECE190E4D580E1D37AEDDF87ECE288E4D980F1E68DF0E68CF3EB91 F3ED92EFE88EEBE48AEAE38AEAE28DF2EA96FBF3A2FBF2A4F2E99DEAE196E8DF94E4DB90E8DF94 EAE194EBE294EEE494E8DD8BE9DE8BF1E697ECE192EBE091EEE394EBE090ECE18EEDE38DE8DE85 E7DD84E9DF88E6DC88E7DB8AE3D888DFD484E5DA8BE7DC8DEBE092E1D687E4D987E3D884ECE28D E6DC87E6DC87EAE08BE5DB86EFE590EEE48FEBE18CE6DC87EDE38EF1E791EFE58FEEE392ECE095 EFE397EDE293E8DD8CDCD17FE7DD87EEE48DEAE08BEAE08CEEE392F1E696EDE194EADE92EFE397 EADE90EFE495EDE293F2E797EADF8FEDE291E8DD8CEEE391FBEF9FF2EA9DE5DC90F5EC9EF7EE9F E5DD8DEBE392EEE596E8DF92F9F0A5F8EEA6F5EBA5EEE49EF0E5A2F0E6A1F0E69FEFE69CEEE598 ECE394EDE495F0E798F2E99BF6ECA1F4EBA0F0E69BF0E49AEEE298F3E79DF6EAA0F3E79DF0E49A F5E99FF0E49AF6EAA0F5E99FF2E69CF2E69AF1E599F2E59AEEE296EBE092F6EB9CEFE494F4E999 F4E998F5EA98F3E896EDE38DEDE288EEE292FDF3ADFDF4B1BDB2820E0500665F34F8F0C1928954 B0A960847D2DFFFFB49D9B580702008F894FF5ECB8DED39BE7DD9ADCD385E1DB88D6CF80A8A25A B1A868C4C07AD7D6953E36170400009C9668E5E28FDDDA89E5DF9E635A21C2BD6CF4EE9CC8C086 0C0300575230EEEBA1E6E185F3EA94D6C97A928637F2E59DF5EAAD999164020000B0AB75F8F5B3 D8D27EEFE990A9A25266610FEFE9A1D3CB8DD0CE7CD8D685BFBA761711005D5430F9F7B9E0D68E DDD581EBE588A8A0479E9641E2D98BE8DE95978D45E7DE90DDD683DED68BF0E9A6D1CA8E292300 0F0A00716E4CAFAC8E4343263031115F613A73744947482017150038371C3736164F4C2659572A 605E2A8C8C4D9B9B51B7B664CAC970CECD70E0DB84DFD789E8DF90E6DE8DE8DF8AEBE18BE9DF87 E9DE85EBDF89EFE18DF0E18EE9DA89EEDE8EEBDA89E9D986EEDE8AEEDE87EDDD84EEDE86F0DF88 EEDE89ECDC87EEDD8CF1E18FEADE8AE5DB87DED480DED684E0D887DAD282C9C072D3CB7DD3CC81 D4CD82D7D086D4CF89D2D29654541C13130021210062632A9FA05BA2A454B9B960DAD87DD8D27C D6D07CDAD483B7B260D0CB7ADCD685CFC97ABBB76ECDC983CCC787E1DEA5433E0B564F21959062 6A6019F8ED9AE6DB8AF3E898F7F0A1F7F1A1FBF2A3FAF1A5F9F1A6F9F1A9F8F2A8F8F2A8F8F0A8 F7EFA6F5EDA4F4EDA0F4ED9FF5EEA0FAF2A5F7EFA6F4ECA4F9F0ABF5ECA9ECE3A0EEE69FF1E9A1 F9F1A8F8F0A6F7EFA4F9F1A6F7EFA4FDF5ACF5ECA6F8EFACFFF9B7FBF2ADFDF4AFFCF3AEFAF1AC FDF4AFFBF3ABFDF5ADFAF2AAFCF4ABFAF2A9F5EDA3F8F0A6FFF9B6FAF5B3F4EFADFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D6D6D69192915B5B5B4141413C3C3C3C3C3C3B3B3B3A3A3A3A3A3A3A3A3A3B3B3B3C3C3C3D3D3D 3C3C3C3D3D3D565656BCBCBCEAEAEAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCFAFAEFF1F1D3E9E9BBEFEFCEFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFBF6F7EFDAEAD59DDDBA60E0C06DE9D399FBF6E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F0FFEBD4FCEAC5F8F6CEFBFCE8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFCF5F3D6E9E3AFF0EBC8FDFDFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F7F6E4 E9E3B0DDCC72E0C158EAC870FBF5E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCEEEECCE1E1A4F0F0D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8F3E2E2CB84DBC872DDD488F0EDCCFAFAF6 F5F5F6F4F4F4FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7F3F3F4F8F8F6F4F2D6 D6CE6BD7C35DE5C67BF6E8CCFEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9 9C9C9C6363634242423C3C3C3C3C3C3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3C3C3C3D3D3D3C3C3C 3D3D3D595959C0C0C0ECECECFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9FDFDECF8F8CFEDEDB9E7E7B4F5F5E2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3DBE7E4B4EEDCB9F8E1D2 FDEFECFFFBFCFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDF9F7F7E7EDEDC7E7E7B3F6F6D0FEFFECFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFF3E6FCE4C5EBDCA3ECE2B1F9F0DBFFFBF8FFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2D0D0D0E0E0E0FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFEFAFAF5D1F2E196DFB23AE9BD62FBDEB7FFF6EDFFFFFEFEFFFFF7F7F7E8E8E8EDEDEDF5F5F5 F6F6F6F9FAFAFDFDFDFFF6FBFBDFD1E9BD6FDFAA38F1C993FAE5CFFEFBF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD07EE2D380 EADB88E5D681D7C873E3D47FD9CB73E1D37BEADC84E7D980E2D47BDFD177E8DA82EDDF88E7D885 E9DA89EADB8CD4C477D6C678DACA7BEBDC89DDCE7BE3D886DCD282CEC474D3C979E2D889EDE394 EAE090E3DA8AE2D988E4DA8AE2D888E8DD8CE3D781E8DA82E9DB83E5DA81E9DE85F0E58CF5EB92 F3EB91EFE88EEBE48AECE58BEFE88DF0E990EEE790EEE692F2EA99F8EFA0FAF1A6F0E79BE7DE92 EBE294ECE394E8DF8FE8DF8CE6DC86E4DA84E8DD8BEADF8FF0E596F3E899EBE091E6DB8CE8DD8A E6DC86E7DD87EFE590E8DE88E7DD8AEEE393EDE292ECE192EDE293EEE394DFD484EDE290E4DA85 E7DD87ECE28DE9DF8AEBE18CE3D984EBE18CECE28DE7DD88E7DD88F2E893EDE38EEAE08BF2E796 F4E89EF5E99DF3E899F3E897ECE18FF1E791E9DF88E3D983E5DB87EDE28EEFE493E2D787E3D789 EDE294E6DA8DF1E698F5EA9CF0E597F8EC9FF4E99BE3D78AEADE91DFD487CAC379DDD38BF1E79C E9E094E7DD8FF6EF9FF2E999F0E799F7EEA2EEE59AF6ECA3FBF1AAF4EAA2EFE59CF0E69CF1E89B E8DF90E2D989EDE495F2E99BF6EDA1F6ECA4F4EAA2F4E9A1F2E69CEDE197ECE096EFE399F1E59B F4E89EF7EBA1EDE197F4E89EF7EBA1F3E79DF5E99FF3E79CF2E69CEEE297EBDF94F4E89CF3E79A EDE292F1E697F3E899EEE393EFE492F5EB90F1E790F1E79DF8EFB4DDD4A52018003A3217E1DAAD A49E68908B49C4BF74F2EDA8433C24423C17DCD398E6DC9ADBD288DCD386D6CD80ACA55AB3AC67 D0CB8AB1AF6E95954BB5B46F5A522C030000756F40E2E08CD9D685D3CD8E524816CAC474F1EC99 A29B610800006E683DE5E196E0DA84FDF59EB3A655ADA24CEFE39EF2E7B5504832212000DEDE98 EBE299E6DE8BF2EB9C6E6524ACA851FAF4A4DFD69BD4D185D8D48F4E4823262101DCD58DD8CE80 D2CA7BECE394CFC676877E31D1C979EEE696A09747D1C977E5DD8BD4CD7CDFD897E8E3AE686338 0602001C1B0042431F40411C4A4B2A6768404B4A21302C0545421C3A371443421D565429757343 8E8C56979457C6C37EC1BD70D4D17DEFEA90E9E387EAE28BE5DB8EDED284E0D483ECE18DECE18A E3D57EE2D67DEADB85EADB87E9D987EDDC8CF0DF8FEEDE8DEBDB88EBDB87EBDD85EADB83EBDC84 F0E089ECDC88E8D886EBDB89EADB8BE6DC8DE7DD8FE4DA8DE6DD90E7DD92DDD48BDED48BE9DE96 DBCF88C8BD76CDC27BD5CD88D0CC8D9F9D6621200024230B3030073D3F128F9150A4A55BB4B363 DCD987E9E595E7E194DDD68CDED78BD6D084B4AE64BAB76DF2EEA89894515C5728413D0BC8C490 95915BA2984DFFF79FDFD47EF4E895EFE695FFF7A7F4EC9DF7EFA0F9F2A5FBF3A9F9F2A8F8F2A7 F5ECA2F8F0A6F6EEA1F1EA9CF2EB9CF7F0A1FCF5A6FAF2A8F4ECA4F7EEA9FCF3B0FAF2AEF9F0A9 F8F0A7FCF4AAF8F0A5F7EFA3F9F1A5F8F0A4FCF3ACF3EAA6F7EEACFFF8B8FAF1AEFCF3ADFBF2AD F9F0ABFCF3ADFAF2AAF6EEA6F0E8A0F2EAA1F6EEA5F4ECA2F5EEA3FEF7B3F8F3B1F6F1AFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBDBDB999A994E4F4E191A191111111A1A1A3232323838383838383A3A3A2E2E2E1B1B1B 101010141414282828555555C0C0C0EEEEEEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3DCE4E4ADEAEABFFCFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF8F5ECD3E8D093E1BD63DFBB5AE8E2ADF4F5DD FDFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF5E7F5E5BFF6E8BEFDFCE4FFFFF5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F2DAEAE3ACF0EBBF FEFDEFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFAF4F5E1E8E0AAE0C265E0B64DEEDBA9F8F0DDFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBF3F4F4DEEDEDC7EBEBC4F6F6E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8F0DBE2BF65E1C26EE8D8A5F7F1DF F8F7F5ECECEDEBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F0F0E8E8E9F4F4F2 F8F5E2E3DA93DDC363DFBA59F2E2BCFEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D8D8D89696964B4B4B1818181111111B1B1B3333333838383838383A3A3A2D2D2D1A1A1A101010 141414292929595959C4C4C4EFEFEFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9FEFEEAF4F4D3EBEBC0EEEECBF5F1D8 FCF2E2FFF7EFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF7EFFCF2E1F4F2D8EEEEC5EBE9B6F6E7D0 FEEEEBFFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFCF4F4DDECEBC0F8EEC6FAF1CFF5F2D6F7F7E8FEFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFF6FBFCE7F4F3CFF8E7C7FCDEC3EFE3BBF0EECEFAFAEFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5DADADAE7E7E7FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFEFEEFFBF1CAEDBF67ECB55CF1C07EF9DCB8FFF3E7FFFBF9F5F6F7E1E1E2EDEDED FDFDFEFFFFFFFFFCFEFFF3F3FADDCDF1C293ECB565EDB963FADDC8FEF1EEFFFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECF7D DECF7CE9DA87E7D884DACB76E2D37ED5C76FD9CB73E0D27BDFD178DFD177DED175E3D57DEADC85 E6D786E3D385E4D486E4D487F5E597E9DA89E9DA87E2D47FE7DC8ADCD384D5CC7DDED586E7DE8F E4DB8CE4DC8BDBD382DCD483E2DA89DFD786E7DD8CDFD37DEBDD84E3D57DE4D980F6EB92F2E78E F5EB93F1E88FEBE48BE9E288EFE88EF5EE94F2EB91F0E991F1EA92F4EC98F5ED9CF4EB9CECE395 E7DE90EDE594ECE492E5DD8AE4DB85E6DC83E4DA82E3D984E7DC8AF1E696F1E697E5DA8BE1D687 E6DB8CE9DF8CEDE290E9DF8BE0D67FE1D782EBE090ECE192E9DE8FE8DD8EE6DB8BE1D685F0E593 F0E690EDE38BEDE38EE6DC87E9DF8AE4DA85EAE08BE4DA85E3D984EBE18CF5EB96F2E893F0E690 F4E998F9EDA3F3E79BEDE293EEE392ECE28DF2E891ECE28BE5DB84E2D882E3D984E3D886DBD080 DED384EADF90E4D88BECE094F8ECA0F6EAA0F2E69CEADE95ECE098F8ECA4D0C37B3E3500B0A65F F9EFA8F0E79BEBE295EEE597EBE392F4EB9BFAF1A2ECE397F3EA9EF6EDA2F3EA9FEDE497F0E798 F6ED9EF1E998EBE392EFE697F1E89BF5EBA1F2E8A1F3E9A4F8EDA6F5E99FEDE197E8DC92EADE94 EEE298F2E69CF5E99FEDE197F2E69CF1E59BEEE298F3E79FEFE39BF3E79FF7EBA2F4E89EF4E89E FDF1A7F2E69AEEE395EFE495EDE293EDE290FBF296F5ED91E1DA8BF4EBB8F8F1C06A653C060000 787349A09D64A39E63D0CE84CEC88A191000B3A87AEFE5A3F3EB99DCD27ACCC36EA1984CC2BA77 D3CD91504E1243430B94954ACACA81B7B17E1F16083B330AD0CE79E0DE8DD3CC8F4F4417C1BC6C ECE6968078400A02008A8552EAE499E0D987EDE38F80751DB9AE54F4E8A5D4C7A3130800787741 EFF19BEFE896F3E99FEADF9D5B5114E1DC8AF3EE9BDCD492FCF6B9A69F6C0801009D985EE8E494 D4CE6FE6DD8BE3DA918F8443C1B775DDD489C8C16EA0993FD4CD73E2DB83E1D98BE6E0AA96926C 0C08002A2A0A7C7E5B8789638E9166434618303100635F31575025635C32787645777743B8B780 ABA96EA19F5EC5C07AC0B970DFD889E5DE8CE0D782DFD680F0E493EFE196EFE294E4D787E4D985 F5E691F2E38DEADC84F0E08BEAD986E8D785F0DE8FEFDE8FEEDF8CECDD89E8D985E8DA82E4D67D E6D87FECDE85EADC86ECDD89F5E694EFE291E7DE8FE1DA8ADAD183DDD485E2D98BDDD488E4D78C DCD185D2C578D2C578D9CA7DD4C880D7D090CFC995332E0A282311434224212000313304525318 80803CC2C076E4E197E9E29EF6ECAEE8DF9FE4DB9AE3DC979A96506D6A22272400797632ADAB6B E5E4A46A6727DBD080FDF69DE9DE85EDE18BE5D986F9EE9EF3EA9BF3EB9CF5EEA0F7EFA4F8F1A6 F9F3A7F0E89DF5EEA1F5EEA0F4ED9DF7F0A0FCF5A6FCF5A7FFF9B0FAF2A9F8EFAAFDF4B3FFF6B3 FDF5ADFCF4ABFEF6ADFBF3A9FCF5A7FEF7AAFCF4AAFFF8B1F8EFABFCF2B1FFFABBFAF1AFFBF2AD F8EFAAF5ECA7FAF2ACF9F1A9FEF7AFF5EDA4F3EBA2F8F0A7F5EDA3F3ECA1F8F3AFF7F2B0F8F3B1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF0F0F0CACACA7878782829281E1E1E353535717171808080828282858585676767 343434171717262626575757959595DFDFDFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5F5DEE5E5AFEBEABEFDFBF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF7EED5E9CA7ADBB238D5CC66 E4E4AAF9F9ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F3DFEAE4B4EDE8BEFDFCF3FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF3DFF3E5B4 F5EBB9FCFBDDFEFFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFFFDF6F2DDE8D090DDB757E0BF6BEDDAAAFBF6ECFFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF5F5E1E8E8B8EAEAC1F9F9ECFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF8ECD2E2B64AE8BD6CF7DAC2 FFF4F3F2F1F0D8D8D8D6D6D6F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE2E2E2D1D1D2 E9E9E8FFF8EEF8E1BAEAC36DE0B241F2DEADFEFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE6E6E6B4B4B46464642525251E1E1E373737727272818181818181858585656565323232 1818182929295A5A5A989898E1E1E1FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFDFDF5F8F8E8EAEBC0 EBE3B1F8E3BDFFEDD8FDFAF4FDFDF9FDFDF9FFFDFAFFFEFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFDFDF9FDFEFAFDF9F1FEEBD6F9E0BAE7E2ADEDEDBBF8F8D2 FEFAECFFFBFAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFDF8FAF7EAFEEACFF6E3B9EAE3B0EDEEC9FBFBF2FDFDF9FDFDF9 FFFDFAFFFEFBFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFEFCFFFDFB FEFDFAFDFDF5FEFCE6F8F6C8E7E698F0E0AFFDE0D5FBF0E8FBFAF3FEFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2F6F6F6FEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFCFEF8ECFBDDB6F1BF7CE7AB55F0BE7BFCDFBCFCF1E1F3F2EFE2E0DF EEEDECFEFEFBFEFFFAFDF4EEFCE0D4F0BF92E7AB5CF1BE7CFBDBB4FEF3EBFFFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E4D583DECF7CE1D27FE5D682E6D782EEDF8AE4D67FE5D77FE3D57DDCCE75DBCD74E3D57AD9CB73 DECF79E0D17FDECE7FE2D385E3D486D5C677AD9E4CB6A753C9BB66DFD382DED588DCD386D8CF81 DCD484E7DE8FE8DF90DBD283DCD483E3DB8ADFD785E6DC8BE3D87EE0D379E3D67CE9DE84E9DE85 E3D87FEFE68BEEE68BEBE489EAE388ECE58AF0E98EECE68AE7E086EBE48CF2EA96EFE796EAE291 EBE293E5DC8DE8E08FE6DE8CE2DA87E4DC83EAE186EEE48BEBE18BE9DE8CEBE090ECE194E6DA8D E6DA8DEFE495F0E595EDE291F0E691F0E68FF3E994F2E796EDE292F3E899E3D889E2D787ECE190 E6DB89EDE38EEEE48DEBE18CE2D883E8DE89EAE08BEFE590E4DA85E6DC87F0E691EEE490EFE591 EEE490E9DE8DEFE398EFE398EDE293EDE291E9DF8AEFE58FEFE48DEDE38DE9DE88E6DC85E7DD89 F0E595EFE496F7EC9EEBDF93E4D88CF4E89EF3E79FE9DD95F3E7A0F5E8A2F3E6A0EADC98CFC481 E8DD9AF0E69FEEE49CF3EA9DE3DA8BF2EA99F2EA99F7EE9DEFE697F2E99CEAE193EDE496E6DD8E E7DE8FF0E797F2EA99F0E897EFE798EDE497EEE59BEAE099F0E6A1F8EDA7F7EBA0F4E89DEFE399 EEE298EFE399EBDF95F1E59BEFE399F2E69CEDE197EBDF95F0E49CEEE19CF4E8A1F7EBA4F5E9A1 F9EDA4F5E9A0F0E49BEBDE93EFE398F6EA9FF1E697F1E78DEDE689E1DA8BF6ECBDFEF7C5D4D0A3 211A0F201D005D5C26898651D3D38CAFA973160800D7CA9EF1E9A0E7DF81D2C867A8A046C4BC72 C8BE8445400B5B5A23CFD094F3F6ABF4F5A6EAE6AE3A3218130C02A3A14BE1DE8FDAD49A574C23 ACA65AE5DF918077400A0301979358E8E295D8D180DCD27E786D12D2C96AF5E9AB9D8F720B0200 BBBB78E9EC8AF0E790FDF2B3AEA26B827936E5DD95E1DB8CE3DF8FE4DCAF3C3220463F1BD3D099 D3CF7BCFC860EEE38DA79A57A2945DF2E3AADED18B9C923DD5CD6DD5CD6FE1D780E4D98FD0C99B 28240F151302B8B89B9CA1804F552D2427004E521D6565307E7949797145736B3D8281449C9B58 CCCB87C9C680D0CC82BEB96EE3DC8EE9E093ECE192F3E799EDE093F1E497F0E297F2E596E6D988 E6D684F0E08BF4E490F1E18DEEDC89EEDC8AEFDE8CEDDB8BEAD987F0E18DF0E18CEADC84E8DA81 E2D47AE1D478E4D77EE1D47BEADB86F7E994EADD89E3DD86DFDB83D9D37CD7D178D6CF77CDC36C D8CC75D8CC74D5C76ED7C96FD8C96FD1C572C7BD7DDFD6A58F87650300002D291B34321E5C5C3D 484A1D3B3C064D4D0D62601B645C21726531675C264E440A443C00504A1075712ED4D286DDDD92 CACA7EC0C075767629F9F19BFEF398F6E890E0D47EEEE28FF2E797F9F0A1F5ED9FF2EB9DF2EC9E F6F0A3FAF4A6FBF3A8FAF2A5F7F0A2F4ED9DF4ED9DF5EE9EF7F0A2FBF3AAFAF2AAFBF2ADFAF1B0 F8EFABFDF6ADFAF2A9FCF4A9F9F1A7FAF3A6FCF5A8FAF2A9FFF9B1F9F0ACFAF1B0FFF8B8FCF3B1 FDF4AFF8EFAAF4EBA7FBF2ADFDF5ADFEF6AFFAF2AAF9F1A8F8F0A7F5EDA3FAF3A9FCF7B3F4F0B0 F4F0AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDEAEAEA9494943737373636365F605FB6B6B6CDCDCDCFCFCFD6D6D6 A0A0A04343431819184445448F8F8FD7D7D7F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAE9F2F1C7F5ECC3FFEFDCFFF8F1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF6F5E5B2E8CC6A D6B93DDCCD70EBEABFF8FAEEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFFF3E9FBE7D1F2DFC0F3E8D2FDFCFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F0 FAF0D6F2ECBEEFEFC0F8F9E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFCF8F4E9CDE9D197DCB85DE1C375EDDBABF9F4E4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4DCE2E2A8E9E9BCFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFFF3F3F9DEC5E2AE3DEBC171 FCE6D9FFFBFFF7F6F6E7E7E7E6E6E6FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDED E3E3E3F2F1F1FFFCF9FFF0E2EFCB81E1B039F2DD9EFFFCECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF6F6F6D9D9D98282823333333232325D5D5DB7B7B7CECECECFCFCFD6D6D69B9B9B 4040401F1F1F515151979797D9D9D9F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC F3F4DCF2EDC9FAECC5F8ECC5EDEBC4EBEBC3EFEBC7FBECD3FFF4E8FFFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F9FAE1EFEFCBEAEBC2EEE9C1F7E0B9FBDDB6F0E9C3F5F5D8 FEFFEEFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF3E8FAEDD6F0ECCBEBECC5EBEBC4ECEBC3 EFEBC7FBEBD4FFF4E1FFFEEEFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FFF9E7 FEEFDAF4EBCDF0EBC5F8EBC4FBECC0EFECB7F5EDCFFEF0EEFFFAFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E0E0E0EAEAEAFCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBFFF5EBF9DAB5F0BD78ECB156ECB960ECCD88EDDBB5 EFDED9F7F0EAFDFFEAF3F6CAEDDC9CEBBD72EBAE5FEFBB76F8D9B2FFF4EAFFFDFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEBDC8ADDCE7DDCCD7BE8D986ECDD89EDDE8AE2D37FE7D982E1D37DE0D17BEEE087DDCE76 C1B25CD8C874E8D983E4D481E9DA85D5C5709F903A7A6B128F8025B8AA4FDDD07DE3D989E4DA8A D0C677CCC270E2D887EAE08FE7DE8BE7DE8AE8DF8BE9E08CF0E690E5DB80E5DA7FE9DE87F3E795 EADF8DE8DC8BF3E992EFE68BF5ED91F0E78BF0E88DF0E88EE3DA81E6DD84E9E08AF0E694F1E797 EDE295EEE396EDE295F0E696EEE493E7DD8CE3DA82ECE388F3E990F0E68FF2E795EDE292ECE192 EDE292E9DE90EDE293F0E594EADF8DE9E08BE7DE88E8E08BE4DB88DDD483E4DB8BDED586EAE091 E0D788E5DB8DEFE597F1E695EEE390E8DC89EBE08CF0E693F4E998EDE292EFE696F2E899F6EEA1 F3EA9DEBE194E9DF95F5EAA5F6EAA6F7EDA5F0E69CEAE095F3E89DF4EB9DEFE597EEE496EDE495 F0E698F8EDA6F6EBA7F2E7A2EFE49CE7DD94F0E699F0E699F1E799F8F0A1EEE498E4DA8EECE296 F1E89FEDE29CEDE29BF5ECA2F8EFA3ECE397F6EDA0F0E79BF3E99EF6ECA2F4EBA2EAE195EBE091 E4DA8AE7DD8DF2E898F6EC9DF3E99AECE195F2E79AF3E89EEFE49CF3E8A1F4E89EF2E799F3E799 F3E89AF0E597EBDF94EFE398F4E89DF1E59AF2E69BEFE399ECE096E7DC97F1E6A1F7ECA8EFE49E F1E6A1F2E7A0E7DD95EFE49CEBE097EDE299E8DE94E7DB8FEEE390E8DE89E4DC8DF7EDB1F1E9AE FCF7C1AFA7851510011510003A3512AFAB868B82671B0A00DDD09FE9E394EAE685CAC66E969147 CAC4875A541B5E5823E9E5A7FAF7B6E6E598D1D080CCC986615C2B0602005C5A20DEDCA2E9E4B6 68613BA49F65FAF2B679713D090401A9A76BEEEA9AE2DB84E2D7837F7526E2DA8CFEF3C95C4E3B 2A2011DAD28BD5CC7AEAE08FF1E7A96D6223B6AF5FDBD585D3CB82F8F1B5988D650E0500A29C62 DBD697D9D388CDC670D0C67A766C26D5CC89E7DD9A9E964CC9C273DBD483D2CC80DDD791D6CE93 443F2009050167654F5050382C2E11464A274245186265336E6E3969662F746F388580459A9950 C1BF72CAC579CFCA7BE6DF8FE2D889E3D788ECE090E8DC8BECE190F2E696EADF8AF2E58AF2E58B ECDF86EADB86E6D783E5D886E2D483E8DB8AF2E594EEE292EBE08FECE089E9DE80EADD83EBDF88 E4D883DDCF7DDBCD7CDACF7DDFD380E4D782EEE38BE3D77FE3D97EE8DF83E6DD85E0D785D9CE80 CCC075DCCF84E2D687D7CC78C7BC62DFD475D0C76ED1C981E5DEA7B2AB86211A0E2A23190F0C00 35351C7A7B538B8E56AAAD68B2B56AA39E57A69A59B5A967C5BC75CCC37CDCD489E8E195F0E89D C3BD70C7C0739D984AA49F50F4ED9DF6EA9BF3E89AE5D98CF1E79AF8EEA3FAF0A6F3EAA0F0E69D F2E9A0F6EEA4F8F0A6F6EEA4F9F1A6FAF3A5F6EF9FF3EC9CF3EC9CF8F1A4FBF3AAFFF7B2FFFAB9 FFF6BAFCF2B3FEF5B2FCF4B0FBF3ADF9F0AAFAF2A8F9F1A8F8F0A7FCF4ABF7EEA7F6EEA6FDF4AD FEF7B2FFF6B2FAF1AFF7EEACF9F0AEFAF1AFFAF1AEFCF4AFFEF7B0F3EBA2EAE298FBF3A9FDF8AF F8F3ACF6F2AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F39696963334333F403F797A79DDDDDDF8F8F8F9F9F9 FFFFFFB6B6B6414141181818616161B5B5B5FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF5FDFCE2FBEEC8FAE3BFFDF1E1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFBE6 F8ECBAE6C260DFC25EE0D384F1EAC5FEF9F2FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8FBE8CCFADFC1FCE1D4FEEDECFFFDFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFDFCF5F0EDCAE9E3AFF5EED6FFFBFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCF7F7EED9E6CC89DFBD65E0BD63EEDCACFAF4E5 FEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFDFBFCF4F1F1D5E7E7B6EEEECAFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBFBEBE2F3D4B0DEB344 E8CD7FFBF4E5FFFFFFFBFBFBF4F4F4F3F3F3FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F6F6F6F2F2F2F9F9F9FFFFFFFFFDFAEED598E0B443EEDA8EFAF8D7FEFFF6FFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6EAEAEAD7D7D7D3D3D3D3D3D3D3D3D3D3D3D3 D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D2D2D2D4D4D4DFDFDFF5F5F5 FCFCFCFFFFFFFFFFFFFFFFFFF0F0F08D8D8D3131313C3C3C797979DFDFDFF8F8F8F9F9F9FEFEFE B0B0B03D3D3D222222727272C0C0C0FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFEFEFCFEFDF3FDFCE3F4F3CAE5E5AFE3E3AAE8E2AEF9DDBAFCE8D0FAF5E6F8F9EDF9F9EC F9F9ECF9F9ECF9F9ECF9F9ECF9F9E9FEF9DEF6F2C9E8E7B2E1E2A8E7E3ADF4E2BAFFE7CFFDF8F0 FEFEFAFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFFDFCFCFCF6F2F2D8E5E5B1 E3E3A9E9E3AEFAE3BBFCECC6F9F7D1F9F9E1F9F9EAF9F9ECF9F9ECF9F9ECF9F9EBFAF9E8FDF9DC FFF1CFFDE6C2F0E2B3E9E3AFF5E4BCFFEAD2FDF9F0FEFDF9FFFDFDFFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3D1D1D1E1E1E1FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFCF0E2F6D9B5E8B966DEA937DDB149 E4BF75F3CCADF8DCBBF5E8B4E5DF8CDFC85FE3B343EFBD6AFBDDB8FFF1E3FFFEFDFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE4D584E1D281E4D584EADB88E7D885E8D986E0D17EE6D784E5D681E0D17CE6D782 E1D17CCEBE69DBCB76E7D781E3D37CE5D57EE4D47ACEBF63C6B75ACEBF60E5D679E6D982DCD181 E2D785D8CD7BD9CE7CE0D681E4DA85E7DD88E6DC85E4DA83E6DC85EBE189DBD273E5DC81E9DE8B F6EA9FF1E59CEFE395EEE48EEBE186F6ED8EF0E78AF2E88EF1E78EECE28AF0E68FEBE18CE9DE8D ECE192EBDF93EFE397ECE094ECE192EEE393EEE393E9DE89EBE287F1E78EEBE18BF1E792EBE090 EDE292F1E696ECE191EADF8EEFE492ECE28CE2DA85DFD782E7DF8AEDE592E5DD8BE2DA89E5DC8D E7DE90D1C87AE3DA8FEFE69BF4EB9FEADD8EE7DB89E5D987EFE494F7EC9DEEE394F4EB9FF4ECA3 F9F1A8F5EDA5EFE79FF0E7A3F3E8A8F0E5A5F3E8A8EEE3A2EBE09EF2E8A3F2E8A1EBE19AEBE199 EAE098F0E69EEFE5A3F0E4A8EDE2A3F1E7A4E8DE96E4DC8DE9E190EDE592F0E895EFE794EEE695 F2E999EFE699E8DF95EAE196F3EA9FF2E99EE7DE93F7ECA5F1E7A0F1E7A0F5EBA3F4EAA3F2E99E F2E697F1E696F5EA9AFAEFA0F8ED9EF3E799F0E498F5E99DF6EA9EF3E79DF1E59BF0E497F5EA9A F4E999F5EA9BF3E899EDE293F6EA9DF5E99DF1E599F1E59AF2E69CEDE198EEE49EEBE09EEADF9D FEF3B1F2E7A4ECE29DE6DC95F0E69FEDE39CEDE39BE2D890E3DA8FF1E297EEE295EFE396FBF2A9 EBE19CEFE7A9F7F0BAC6BF92413B1B080100342D1A1409001E0D00C6BD86EBE996F1F095B5B66B AAA86E767341312C04C0BB77F5EFA5C6BE76B9B365AFAC5BD6D28AA3A1622524000A08008B8963 F9F7D0A3A079514A1EFFFFDB8179480D0901B1AF74FBF7A8F1E78CE4D9868C823CEFE8A7ECE2C9 35281850451EEFDF97DAC984E5DA91D4C98A4B4000CDC771DFD981E6DD99E9DEB533270150481C D3CF85CCC882CDC685EAE1A0BFB67290883FECE499B6B062A09C4EE5E198C2BD7BDDD89EF2ECB8 7873450A04001E1A062624103F3F2745462B595D3A64663E4E50206D6E367171357D7B3989863F C1BE71CFCB7BD5D07FE5DC8DE8DC8DE7DA8BEADA8CD1C473D1C573E2D785F6EE9BF1E790EDE185 EADF85E9DC88F0E595F7EBA1FCF0ABF8EDABF5ECA8E6DE9AE1DA96F6F2AAF0E998ECE28BE8DE8A E8DD8EEBDE93DED185E2D68AE2D68AEEE392EAE08BE5DB81E3DA7DE4D97DE6D980DBCF7BD4C67C D9CB86DBCD8CD2C483E4D993D8CF80D9D17ADFD97CDDD87DCFCA77D8D291D3CDA0453F2E0F0900 3632251B1A032B2D0553581E858B43D4D989FEFCA9F1E797E9DE8EE3D888F4E999E3D889E8DC8D FEF8A9D3C879AA9E51584C08EBDF93F1E79FF6ECA4F8EEA7F1E7A0F0E69EF7EDA5F6ECA5F2E8A0 F1E79FF4EAA3F8EEA6F7EDA5F4EDA4F9F1A6F8F0A5F4ED9EF3EC9CF4EDA0FBF3A9F7EFA7FAF1AF FFF6B8FFF5BAFCF2B6FCF2B4FCF2B4FBF2B1FAF1AEFAF1ACF8F0A8F9F1A8FAF2A7F7F0A3F7F0A2 FBF4A5FFF6AFFFF7B6FFF8B7FDF4B5FBF1B3F9EFAFFEF5B4FAF1ADFDF4ADF6EEA5ECE498F6EFA1 FFFAAEFDF7ABFCF6AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F38E8E8E2626263C3D3C808080E4E4E4FFFFFF FFFFFFF9F9F9ADADAD3E3E3E2424247E7E7EC8C8C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFEF2F5EFCCECE2B0F5F0D7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFF8FDFAE8F6E7C0E9CF84E1BF59EFD08EFDE9D0FFF8F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFBF3EFE6BBEFE3B8FAEEE0FFF9FB FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFDFCF9EED5F5DFB8FAE3CFFFEDEDFFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF5F5EBD0E9CC84DEB244E1BE63 ECD9A6F9F3E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFBF6EEEECBECEBC3F1F1D4F9F9ECFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF7F1E9CBE3D596 D5C65DE4DB97FAF9ECFFFFFFF5F5F5E0E0E0DEDEDEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDE7E7E7DADADAEEEEEEFFFFFFFFFFFEEFDBA9DFBB5AE1D17EEDEBBCF9FAECFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8DEDEDEB0B0B0696969595959585858595959 5959595959595959595959595959595959595959595959595959595959595757575D5D5D878787 D9D9D9F4F4F4FFFFFFFFFFFFFFFFFFF2F2F28585852727274444448C8C8CE8E8E8FFFFFFFEFEFE F8F8F8A7A7A73939392B2B2B888888CFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFFF6FAFAE9F4F4DCF2F2D8F5EED7FDE0D1F6E1C6EBE6BBE7E8B8 E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9EBE8BAF9E8C0FAEBCAF5F0D5F2F3D9F4F2DAFAF3E1FFF6EC FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF0 F3F3DCF2F2D8F5F2D7FDF3D0F5EEC0EAE9B0E7E8B3E8E8B8E8E8B9E8E8B9E8E8B9E8E8B9EBE8BA F9E8C1FFECC7FEF1CDF8F3D4F5F2DAFBF3E2FFF6EDFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E9E9E9F0F0F0 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F2EFEADFD2E1CEA1DCC279 DBBA68DFB362E7AE65E8B266E6B966DEC06BE3C977EED68DF9E5B7FEF3E5FFFBF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDACB7AE0D180EADB8AEADB89ECDD8AEADB88E3D481E0D17EE7D885E6D782 DECF7BE4D582E4D583DECF7BE0D27BE3D57DE3D57EE7D980ECDE85EEE186E5D77BDFD278E2D680 DCD181D8CD7AD8CD7BE9DE8BE4DA85E4DA85E6DC87E7DD86E4DA83E2D881E3D981E4DB7EE7DD82 E2D784EDE195EBDF95EFE395ECE28CEBE287F6ED8EF1E88BF2E88EEDE38AF4EB91F8EE96EEE48E E8DD8CEFE495F2E798EEE394F0E596EFE494EDE290EFE492EDE38CEBE287EDE38AEAE089EFE58F EEE393E9DE8EEDE292ECE191E9DE8DEDE290EEE48FE4DC87E1D984E6DE89EFE794EFE794EBE392 E9E091EBE294EBE295F1E89BE0D78BD8CF83E7D98AE8DC8ADDD17FE8DD8DF3E898E5DA8BEAE194 F1E99DEBE398E9E198EDE59DEEE59FF0E5A2E9DE9BEDE29FEFE5A0EFE59FF2E8A1F4EAA2EFE69C ECE398E7DE93ECE398F0E5A1F0E5A7EBE09EF0E59FEBE296EBE394E4DC8BE4DC89E5DD8CE7DF8E EAE193EEE698EFE69CEADF98E9DF98F0E69EF2E8A0EEE49CF3E9A1F5EBA3F7EDA5F6EDA3F4EBA1 F3EA9FEADE8FF3E898FAEFA0F9EE9FF3E899F0E596F2E69AF0E498F1E59AF3E79DF0E49AEFE396 F9EE9EF7EC9CF8ED9DF5EA9BF2E798F6EA9DF1E599EEE296EEE298EEE298EFE39AEFE5A0FDF4B2 EDE29FE6DB96F2E8A3EDE39EF0E69FF8EEA6F3E9A1F4EAA2E9DF97E9E098F3E59DEFE29AEEE299 F7EDA5F0E89FF5EDA8F0EBAAFBF6BBE3E0A98E8B572E2A151F170B1E1200C3BD87EDEC9EEEF19B 9B9A5885824F29250389844BEEE9A6B9B365BFB76CE0D98AEAE493BFBB73D0CD8EAAA974171406 0100007D7B59C1BE93403C0FC7C18FA5A06E090700908E5AE7E197E1D983D5CA7D867C3AFFFBB9 C4BB9F150B00837B35FCF0A6E8D891E8DE94B9AD6E4F440CEAE491DFDB84E6DF9CA69A6E090000 7B7439C6C279E1DC99E2DB9CCBC184827935CAC37AE2DC908F8A3BD3D082EEEAA2CECB8BE4DEAA AAA2771B14060B05001C18031F1D0749492F47492A616541686A415C602D9EA0668D8D4EB0AE6A B9B670B7B36AB0AA62CEC880E9DF95EBDD96F7E9A1F2E298E7D88FECDF94E8DD8FEBE194EBE298 F0E6A3E3DA9AE4DA9EE6DDA6CABF8EA99F72988E648D855A8680559D976CB3AD7FBFB681D4C990 F0E6A9F4EAA7DFD58EE5DB8DF3EB98E5DE87ECE28BECE28BDBD178E7DD83EBDF87EDE28AE1D582 D6C97CDACD85E0D38EE6DC96EBE298D0C878CDC772B2AC54BFBB5FBBB75EB6B267D2CE96605C3A 0A05004846322A2A103F41197E834C757A36717528999747B4AC5DC8BF70D1C879DAD283CBC274 D6CD80E3DA8DCEC578544B01A69D4FFFF6ACF1E99DFAF1A6FFF6ACFAF0A7F2E99FF1E89DFAF0A8 F8EEA4F7EEA3F7EEA5F6ECA2F3E9A0ECE49CF4ECA2FAF2A7FAF3A5F8F1A3F9F2A4FEF6ACF7EFA6 F6EDABFCF3B4FEF4B8FCF2B6F9EFB0F8EEAFF7EEADF7EEABF7EEA8F5EDA5F7EFA6F9F1A6F9F1A5 F8F1A3F8F1A1F8F1A6FDF4B1FFF9B5FDF5B3F9F0AEF9F0AEFEF5B4F5ECA8F6EEA6FBF3A9F6EEA1 F6EFA0FEF8ACFBF5ABF9F3A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC8282821E1E1E444544919291E7E7E7 FEFEFEFBFBFBEAEAEA9C9C9C3939393434349D9D9DD9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF3F3DBE7E8B9EEEFCC F8F8E9FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5E0B4E9BA59EDBC61F6D29AFAEACEFDFAF2FFFEFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF2F4F4DEE8E9B5ECEDBFF9FAEA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFCFFF3E6FEE4CCF9DEC8F7E2D4FEF9F7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E3B2E6BF58 DCAF3AE1C068EFE4BBFAFCF4FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFAFBFCF2EBEBE1B0EDE6BAFAF8ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1E9E1AC D9CD72D8D280E8E6B6FBFBF2FFFFFFF2F2F2D9D9D9D7D7D7F9F9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCE3E3E3D3D3D3EAEAEAFFFFFFFFFFFEEFE3B9DDC674D8C870E4DCA1F6F4E1FFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6D1D1D19292923434341E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1C1C1C232323 5A5A5AC7C7C7EEEEEEFEFEFEFFFFFFFFFFFFEAEAEA787878212121525252A4A4A4ECECECFFFFFF FAFAFAE8E8E8979797353535393939A0A0A0DBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFFEBEDF4E5D0E7E3B3 E3E3AAE3E3ACE3E3ACE3E3ACE3E3ABE3E3ACE7E3AFF7E3BEFFEDDAFFFBF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFFECF4F4CEE6E6B2E3E3ABE3E3ACE3E3ACE3E3ACE3E3ABE4E3AC E8E3B0F8E3C0FEEED1FFFCE3FFFFF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF0F0F0 F5F5F5FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EFEFF0E6E7E6E4E6DB E5E1C6E5D2A5E4C082E4B060E3AC58E4AF5FE3BE7FEDD9ADFBF7DCFFFFF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD3C471DCCD7AEADB89E9DA87EADB88E9DA87E9DA87DDCE7BE1D280 E9DA87E4D582E4D785E0D481E2D583DBCF7BE0D37FE9DC87E6DA83E9DC86E9DE84E3D77EE6DA81 E6DB87DED383DCD17EDACF7DE8DD8BE4DA85E4DA85E5DB86E9DF88E8DE87E4DA83E7DD85EAE184 E9DF84DDD27FE5D98DE6DA8FECE091E6DC86E9E084F3EA8BEEE589F1E78EE9DF86E5DC81F1E88D EEE48CEBE18CF2E796F6EB9BEFE494F5EA9AF3E896EDE28FEBE18DECE28BEEE58AEDE38AEAE089 ECE28DEDE292E8DD8DEBE090ECE191E9DE8CECE18FEDE38EEEE592E9E18EE7DF8BECE493F3EB99 F4EC9AEAE192E7DE8FF0E798EAE194E3DA8DF0E799E3D785EFE390E1D583DFD483EDE293E9DE8F E4DB8EF1E99EEAE297E8E097EDE59CEBE39BEDE39DE7DD96EAE09AF4EAA2F7EDA5F6EDA3F5ECA0 F2E99DF0E79BEBE293EDE496F2E8A0F2E8A4E6DC96E9DF96E6DD91ECE394EEE596EBE292E8DF90 E8DF92EBE296EFE69CE2D892EBE19BEFE59EECE29BECE29AF3E9A1EFE69CF4EBA1F5ECA0F3EA9D F1E89BF1E89AE9DE8EF3E898F8ED9DF8ED9EF6EB9CF6EB9CF2E69AECE094F0E498F5E99FF2E69C EEE295F8ED9DF9EE9EF8ED9EF6EB9CF4E99AF6EA9DEFE397EFE397F0E49AEDE197F2E69DDFD58E 938945DDD38EFCFAB6FDF3ACF5EBA5F3E9A3F8EEA6F3E9A1F8EFA4F1E79DF2E8A0F6E9A5F0E39E ECE099EEE59CF8EFA5FBF4A7F3EFA5EDEAA0E1DF95ECEBA4DDDD96A4A06E130B009B9862E5E69D EDF0A3A5A66C3A3816302C0AF7F1BBC3BF79BFBA69D3CC7AEEE796DFD789C6BF77C7C182F0EBB5 B6B28674724A040300302D124745154D4A278F8C57050500787746EDE9A5E5DD90DDD48C888242 F3F0AFA6A181070101A8A259F9EEA1EFE298F7EEA59A8F54756B2DFCF5A8DDD885DDD594403622 494021BEB87E9A964FBEBA7BEBE4A98A8244A9A05EE6DF95888436C0BD6BD4D184C7C37EE0DBA1 948F6228210910080127210A1916013C3A20424324595B3A3E431C595C307E824D87894CB2B371 B7B66EBBB96FC3BE7AC5BF7ADAD38EE6DC98E6D895E8D995F7E5A1FEEFA9EADB95D7CA83DAD088 CAC07FB3AA75857E4D5951234B451A433D17342D0A251F00201A002822033C3917342F10191206 4338186B61389B915CE6DE9DF6EEA3E9E38FDCD67DE5DD82FDF59AE8DF86E5DB83E7DC87EFE390 E9DE8DDDD282D9CE80D5CC7ED8CF83C6BF72C8C172C5BE6DCBC673CDC872CDCB6FC6C573D3D292 6260330C080018160820200734350F888957AFB172B4B66CCDCC7EC2BC6DB0A85CCCC478D9D386 DCD488E8E095F4EEA1625A138F873DFFFEB8F9F0A5F4EA9EF9F0A3FCF3A6F6EDA0F0E79AEEE598 FAF1A4FBF2A5FBF2A6F9F0A4F6EDA0F3EA9DFCF5AAF9F1A7F4ECA1EFE89AE9E296E8E095FBF3A9 FDF5ADFCF3B0F9EFB0FBF1B4FEF4B6FBF1B1F7EEADF5ECA9F5EBA7F0E7A2F1E9A0F6EEA5F8F0A5 FAF2A6F8F1A3F5EE9FF5EEA3FAF2ABFCF3ADF9F0ABF7EEAAFBF2AFF9F0ABF5ECA7F7F0A7FAF2A8 F8F1A2FAF3A4FAF4AAF7F0A8F7F0A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7DADADA737373252525686868C0C0C0 F1F1F1FFFFFFF9F9F9DADADA8B8B8B353535454545C1C1C1ECECECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF7F7E7 EBEBC1E7E6B3FAF9EDFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEEDBF9D5A3EABA5AE6B950EED188F8EBC9FEFBF4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF0F0D2E5E5ABF1F1BDFBFBDC FEFEF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFDFDFAF6E8ECE7BEE7E3B2FAF9EEFEFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAE5 F8ECB7E7C15ADEB848E0D182EBECC6FBFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFEFEF0EFFDE0DAFBDBBCFCE7CBFEF8EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF6E8 EACF84E0B346F2D1AAFBE9DEFEFBFAFFFFFFFCFCFCF7F7F7F7F7F7FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF9F9F9F6F6F6FBFBFBFFFFFFFFFFFEEFEDCBDED78ED9C166E5CE8AF6EFD8 FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E3E3E3BFBFBF8C8C8C808080 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E7E7E 8282829D9D9DD4D4D4EFEFEFFEFEFEFFFFFFF6F6F6D7D7D76B6B6B2727276E6E6EC6C6C6F3F3F3 FFFFFFF8F8F8D8D8D88787873232324C4C4CC4C4C4EEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFBFBFDFAF6 FBFAF1FAFAF0FAFAF0FAFAF0FAFAF0FAFAF0FAFAF0FBFAF1FEFAF3FFFCF8FFFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFDFDF6FAFAF1FAFAF0FAFAF0FAFAF0FAFAF0FAFAF0 FAFAF0FBFAF1FEFAF4FFFCF7FFFEFAFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1 CDCDCDDEDEDEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAE6E6E6EAEAEAF6F6F6 FBFBF8FAF9F4FAF7EEFAF3E7FAF1E1FAF0E0FAF1E1FAF3E7FCF8EEFEFDF7FFFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6C774DECF7CE9DA87E4D582DBCC79DFD07DEBDC89E8D986 E7D885E7D885E3D584E6D98ADCD07EE4D886DFD381E2D684EADE8BE2D683E6DA86E5D985E0D47F E8DC88E2D784DBD080EADF8CEADF8DE5DA88DDD37EE1D782DFD57FE3D982E6DC85E0D67FE8DE86 E0D77AE7DE82E6DB88F1E599EADF92EADF8DDCD27AE3DA7DEBE283EAE185F3E991EBE188E7DE82 F4EB90F5EC91F3E890F5EB96F5EA98F7EC9AF0E593E8DE89E7DD87ECE28BF2E88EF2E98EECE289 E7DD86E3D984E1D687E8DD8DEFE494EDE292EADF8EEBE08EE7DD88E7DF8BEDE592EFE794EFE796 EFE796ECE493E6DD8EE4DB8CF3EA9BE6DD90E9E093F6ED9EE2D683EADE8BE6DA88E3D986EFE493 F7EC9DE9E093F1E99EF0E89DEDE59CEFE79EEEE59CF0E79CECE397EBE297F4EBA0F8EFA4F5EC9E EFE698EDE497F2E99BF1E899F1E89AECE397EEE49CEDE498F3EA9DEBE294E5DC8DEEE596EBE296 EAE196EDE499F2E8A0F3E9A2ECE19FF8EDABFBF0ACEEE49FEBE19AF3E9A2F6EDA2EDE498E5DC8D E6DD8EEFE697F5ED9CEEE293EEE393F1E696F4E99AF7EC9DF7EC9DF5E99DF0E498F2E69BF4E89F EFE398E9DD90F4E999F8ED9DF8ED9DF2E798F0E596F8EC9FF3E79BF6EA9EF8ECA2F1E59BF6EAA1 E6DC94877D38D5CB85F0E69EF1E7A0F7EDA5F0E69EF2E8A0ECE399F4EBA0EFE69BF0E69EF6E9A5 F6E9A5F9ECA6EFE69DF3EC9FE8E191F3EE9BDCD986F8F6A2E7E592E5E491D6D597241F1544430F D2D68FF4F7B2B6B686110D00817D5CF6F5BD969147EAE68FDBD37EE4DA8AFDF6ABA19750DAD292 DBD49EEFECBDFFFFDAC9C8993D3A0C656331242204353305070702484728EFEAACE0D993DDD493 918B4FD3D391918E6A050100B8B666F0E997EAE196FBF3AC71672F958A53FAF3ACEDE79BCCC487 1A10039F966DD3CD94A9A661A8A4689E99617C7437E3DC9AB1AE638A8839E1DE8DCECC80DCD997 CBC79237320E0A02001E1608241F091D1A06403F216465453133123A4119898C5C83884F8C8F4E BDBE79BAB96FC8C77CB6B16DCDC685DFD894E7DC9BECDE9DDFD08DC8B674BFAF6D9F904B9B8E48 9389415E56154F4A126D673256521D464210524E204D481E3D3A10403D132F2C06201D00181501 241E091911000C06001C150057501BC0B978EDE79AF3EC9ADCD57EE7E087E1DA81E4DA84E9DE8F E8DE8EE0D585DBD080DED685DFD887D2CB7AC7C071D7D183CDC77CDBD58CC6C376D3D27CDDDB8F F2F1B26A683A0B0A001614042A2A13222103414214747537888A3EB5B468DAD48ADCD68CEDE89D DAD489E4DE94F4EEA2645E146A6424F5EFA3F7F1A5EEE89CF1EA9CF4EB9EF4EB9EF1E89BEFE699 F1E89BF3EA9DF7EEA1FAF1A4FAF1A4FBF2A4FCF3A6FDF5AAEFE79CE3DB90E4DE8FECE599F2EA9F F1E9A1FAF1ACFCF3AEF7EEACF6ECAEFAF0B1FDF4B1F7EEABF6EDA8F6EDA6F1E9A1F1E9A0F5EDA4 F6EEA3F9F1A4F8F1A3F2EB9DF8F1A5FAF2A9F9F1A8FAF2AAFDF4AFFFF6B1F6EDA8F9F1A9FBF3A9 F8F1A3F7F0A1FAF3A4FCF6ACFAF3ABFAF3ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBBDBDBD5D5D5D2626267A7A7A D8D8D8F6F6F6FFFFFFF4F4F4BABABA686868292929515151D7D7D7F8F8F8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFBF4F4E9C8F0DEADFCEAD1FFF5EBFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F1FDEAD4F4D195ECC067E9C062EFCF8CFDE9E0 FFF7F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFEFEEEEC2E1E1A1F2F2CB FEFEEFFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF4F3F3D0ECECB8EEEEC7F6F6E3FEFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFF7FDFAE2F4E2A3E8CD72E0C562E1D080EDEBC4F7F8E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFCF3EAD1EADBADF7E4C6FEF1E3FFFCF8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFD FBF6D9EACA74E1B03FF8DEC2FEF3F1FFFDFEFFFFFFF7F7F7E7E7E7E6E6E6FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDEDEDEDE3E3E3F2F2F2FFFFFFFFFFFFF7F7DEECE7ADDFC05CE5C571 F6EBCFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2E2E2E2CCCCCC C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C6C6C6D2D2D2E9E9E9F6F6F6FFFFFFFFFFFFE9E9E9BABABA5656562929297F7F7FDADADA F7F7F7FFFFFFF4F4F4BDBDBD6B6B6B292929595959DADADAF9F9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F7F7F7E0E0E0EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E2E2E2E9E9E9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7D782DBCC77E2D380EADB89E4D582E2D380E1D281 E7D887ECDD8CE9DA89E4D785E9DD8EEADF8FE3D888E5DA8AE8DD8DE7DC8CEFE493F5EA99F2E895 E8DD8AEDE291EADF8FD7CC7CE6DB88ECE18FE1D684E3D984E5DB86DDD37EE1D780E3D982DCD27B E8DD85ECE388EEE48CE7DC8BF1E697EFE496F4EA97EAE087EDE486F0E788EDE487F6EC95ECE28B ECE384F3EA8DF3EA8EF3E991F3E994F0E691F4EA95EBE18CE8DE89EBE18BEDE38BEEE58BEEE58A EBE188E9DF88E5DB86E3D889E7DC8CEBE090E9DE8EEDE291F3E896ECE28DE3DB89EDE594ECE493 E4DC8BE8E08FEBE392E6DE8DE1D989F0E798E7DE8FEFE697E4DC8BEDE18FE0D480E7DB87EEE391 EFE494F9EE9EF3EA9BEBE495EFE89AEEE69BEEE69DF4EBA0F5EC9EF5EC9EECE395EFE598F0E799 F2E99AF0E798E9E091F0E798F0E798E8E08FE5DC8DEAE192EAE193F2E99AEBE293E7DE92F0E79B EDE499ECE29AF1E79FF4EAA4F3E9A4F6EBAAF6EBABF4E9A7F0E5A1F0E69FF2E7A0F6EDA3EDE598 EBE293F1E998F3EB99F1E997F6EB9BF0E595EFE494F4E99BF4E99AF2E698F2E69AF2E69AF6EA9E F6EAA0F1E59BE8DC8FEEE393F6EB9BF6EB9BEFE495EBE091F5E99CF2E69AF8ECA0FCF0A5EEE298 F2E59CF4EAA2F1E7A0F3E8A1E3D992F1E69FF7EEA5F5EBA2F4EB9EEBE295F3EA9DEEE598EFE79A F8EBA4F7EAA3F9EDA4E9DF96F4ECA0E5DE8EE4DF8EF0EB98D5D27EE7E490F1EF9BCBC887514F31 0607005E642DD5DA99EEEFC6242207B4B08EC8C58CC5C174F6F299E5DE88DACF80B8AB63D3C984 E7DE9FECE5ADDAD6A2F8F6C78987556D6B3AD5D39EE7E5ACF0EEB8777751191902D3D093ECE4A4 F3E9AFA49E66BCBE7A7C7D54030200BFC06DF3EE9BDED68BF5EDA75D511CAA9F6CF3ECACEFE8A2 918B56231A00E7E0B3D5D195A7A45FAFAA738B854E868042D1CC89A7A45BDBD98DD8D689DCDA94 EDECB17A774C0E09002019091F160F2D2813221F055857385051302B2E08585E328D915E61652B A3A765C0C179C0BF73CAC87CCAC67FD4CE89E9E29BE7DD98DFD28DD0C17BCEBD77D2C37CD8CA82 E2D68DE4DA90C8C175D0CB7EE5E196DEDA8FDAD58ECCC881B7B26DA6A45FAAA6659B9856807D3A 7F7B3A6663343F3C192A26041612000401002B2506837D44DDD695E0D98FE1DB8ADFD983E1DA83 E8DF90E1D88BD7CE7ED8D17FDED783DAD580B8B360CCC778CFCA7FDBD58FD9D494DDD998DAD794 D5D295DBD9A586845D171601211F0D1D1C0A111000545426ADAE6FB2B365B9B76ADCD890D6D28A DEDA90DFDB91DDD98F87833A656127E7E69AF2EEA4EEEAA0ECE89DF2EB9DF3EA9BF3EA9BF4EB9C F5EC9DF7EE9FF5EC9DF9F0A1FAF1A2F7EE9EF7EE9FFBF2A4EDE59AECE499F1E99EF9F2A7FFF7AE FDF6ADF3EBA3F2E9A3F8EFAAFEF5B3FAF1B0F5ECAAFBF2ADF5ECA7F7EEA8FAF2AAF5EDA5F4ECA3 F5EDA4F4ECA1F6EFA2F7F0A2F3EC9EF7F0A1F5EE9FF5EEA2FEF6ADFFFAB1FBF3ABF9F1A9FBF3AB FBF3A9FAF2A5F8F1A3F5EE9FFEF8AEFBF4AEF9F2ACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD9D9D9D4646462A2A2A 8A8A8AEAEAEAF9F9F9FFFFFFF0F1F09C9C9C4849482021205C5C5CE6E6E6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFBF7FEECD6FDDEB9FBDDB6FDEBD4FFFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFBF7FFECD8F6D39AE6BB57E5B759 F8D3B9FDECE3FFFEFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5FBFBDAEEEEBAE4E4AB F4F4DCFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFDE7F6F5CBE5E2A6EFEBC5 FDF9F1FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFAFFFFEAF6E8AEE7C45FDCBA4BE0D58AF0EBC8FFFCF8FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFDFAFAF1E7E9B5DADD8CF2F1D2FEFDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FEFFF2F8F2C5E9CA6DE1B548F8ECD2FFFDFBFFFFFFFFFFFFF1F1F1D5D5D5D3D3D3F8F8F8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE0E0E0CECECEE8E8E8FFFFFFFFFFFFFEFFF0FAF5CBE6C25C E5BF60F5E6C1FFFFFFFFFFFEFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFBFBFBFDFDFDFEFEFEFFFFFFFFFFFFDBDBDB9C9C9C4141412D2D2D8F8F8F ECECECFAFAFAFFFFFFF0F0F0A2A2A2525252242424646464E9E9E9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCF5F5F5F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6E5E5E5 EBEBEBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDCF77D4C66EDDCE79E6D783DFD07DE1D281 E4D584E7D787E8D88AECDC8EEBDE8FE3D787E2D787E0D585E1D686DDD282EBE090DFD485D8CD7E DED384DDD181D7CC7CDED383E0D585E6DB89DCD17FCBC06EE2D882E9DF8AE7DD88E9DF88E8DE87 DFD57ED7CD76EFE68CF0E68EE7DC8BE8DD8EEFE495EEE490EAE086F1E88AEEE586ECE286EEE48E E9DF8AEDE486EBE284EAE184EEE48BF4EA94F5EB96EEE48FF3E994F3E993EEE48DE8DE85EBE187 F2E98EEBE188E9DF88E6DC87ECE191F3E898EADF8FECE191EADF8EEDE290E8DE8AE0D786ECE394 EFE797E9E090EBE292EEE695EDE594E1D988E6DE8DE3DB8AEAE292EBE391EEE18DF0E48EE7DB86 E7DD88F0E592F0E595EEE596E8E092ECE598EBE298E8E096EFE799F3EA9AF2EA9AEAE191EDE594 F2EA99F3EA9AEFE796EDE495F2E99AF2E99AEBE292ECE493E7DF8CE5DD8CE4DB8CEBE293EDE498 F0E79EF2E8A0ECE29BF5EBA4F2E8A1EAE09BF6EBACEFE4A4E8DD9CE9DE9CECE29CEDE39BF8EEA5 F2E99CF0E798F0E897F0E896F7EF9CF0E495F0E595F1E696F6EB9CF3E899EBE092F5E89DF9EDA1 F3E79BF4E89FF7EBA1EFE396E6DB8BF0E595FCF1A1F3E899EDE292EFE497F2E69AF4E89CEFE399 ECE096EEE298F0E69EF4EAA3F3E9A0EDE49AEDE399F5ECA0F1E89BF7EEA1F2E99BF2E99AF3EA9C EDE496F0E698F6EC9FF9F0A3EEE59BF1E89DFBF3AAFAF2A8F3ECA2DFD78DE3DC92ECE69CE7E2A6 D5D2A33F3F09040800676930F5F4CE524E379F9A7A9E9C60E4E092CECA73ADA554CEC179DACC8A F0E3A4FAEFB3EAE4AAF4F0BAE7E4AE1D1A009C99619C9A60A8A467DAD89DDBDBB01C1B025B5620 CDC586FFF9C2C2BC86CDD08B7D8054020300CDD17BEEEC98E5DE94F8F2AB6F6532B3A97AEFE7AD DED996534C1C433C20D9D3A2BDBA7CE3E29ECECB945F5B24BAB6779A97549B9B53E7E7A0E4E3A0 E3E3A68C8A58201C011712011D150E241C192B26134744265251323A3B194D4F28373D11898D5A 686D319FA260D7D98FD2D184CFCE7FD2CF83DCD78BEBE59AE8DF93E2D68BE8D98FEEDE92F9EC9F EDE092E6DB8CECE494EBE390E8E189E9E289EAE38AEEE88FEEE48DE9DF89F4EE97E6DD88E0D884 DED783DAD17ED2D088B7BA7B7D7C473C390F1F1B000E0800130B015C5426E6DFA7DED78FE8E391 DBD67FE9E294EEE79BDDD686DBD483D8D381DAD582C1BD6CD4D085CFCB86DFDB9CEDE9AEE5DFAB D9D4A99F9A73ADA987949276171404110F051B170C26210F262409838242B4B35FE0DE8EE5E29A D3CF88B7B36C76722A3F3B018D893FE3DF95FFFDB1EDEA9DF4F1A4F0ECA0F2EC9EF3EA9BEFE697 EAE192ECE394F2E99AF9F0A1F5EC9DF5EC9DF8EFA0F7EE9FF1E899EFE79CF8F0A6FFF9B0FFFBB2 FCF4ACF7EFA6FAF1ACEFE6A1F6EDA8FFF7B3FAF0ACFDF7B0F9F1A8F7EFA7FAF2A9FAF2A9FBF3AA FCF4AAF8F0A5FAF2A7FCF4A9F7EFA3F2EB9DF3EC9CF7F0A0F5EEA0F6EEA3FCF5ACF8F0A8F5EDA5 F9F1A9FAF2A7FAF2A7FCF5A6F6EFA0FBF5ABF8F0A9F6EFA8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1D1D1828382393A39 3939399F9F9FFBFBFBFDFDFDFFFFFFEFF0EF9899984B4B4B2D2D2D6A696AE9E9E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFDFFF8F0FAEED7EADEA6F1EABCFEFDE4FFFFF8FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFBF8F7EBCEE5D38A DCBD59E7B95EF4DDA5FFFFEDFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAECE9E9B4ECECBF F4F4DCFBFBF4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF7FCF6E2F5DFB3 F9DFB9FFE8D1FFF7F0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9E1F6E7ADE9CD6FDFBB4EEFD08EFFECDBFFFBF8FFFFFF FFFFFFFFFFFFFFFFFFFEFFFFF8F9EBE9EABDEAEBB2F0F2BBFAFBE9FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCF5F7DFE7E4A7E0C76EE2BE64F8EFDAFFFEFDFFFFFFFFFFFFFAFAFAF0F0F0F0F0F0FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3EDEDEDF6F6F6FFFFFFFFFFFFFFFFFBFCF7E3 E7C97BE4C067F0DAA2FBF3DDFEFDF9FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D38B8B8B3E3E3E3F3F3F A5A5A5FDFDFDFDFDFDFFFFFFEDEDED9191914747472D2D2D727272ECECECFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF4F4F4D5D5D5E3E3E3FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1E8E8E8 F0F0F0F8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D77FDDCF77E1D27DEBDC88E9DA87 E8D989E8D989E6D786E5D588EBDB8DEEDE90E2D686E5DA8AE5D989DED382D9CE7EE2D787DFD485 E2D687E7DC8DE4D889E1D687D7CC7DD5CA7AE6DB89E9DE8CD0C573C3B964DAD07BE2D883E6DC85 E5DB84E2D881E1D780E8DE85EBE08BE9DE8EECE192F1E596ECE28CEBE286F0E886F0E788F4EB8F F6EC98F1E792ECE386EDE487EFE68BF1E78FF4EA94F5EB97F2E893F0E591EEE48FEDE38CEAE089 EAE187F7EE93ECE289E3D982EDE38EEADF8FEBE090E5DA8AEADF8FEADF8EEFE592EFE591EAE190 E6DD8EE5DC8DE9E091E9E090E7DF8EE4DC8BE1D988EAE291E1D988E4DC8AE9E18EE5D984EADE88 EADE88E9DF8AEDE28FEEE391EFE797F2EA9CF2EB9DE6DE93E1D98EE7E091E8DF8FE8E08FE6DE8D EFE796F6ED9DF3EB9AF0E897EEE596EFE697EEE596ECE394F0E896E7DF8CE9E18EE8DF90EAE194 EBE297EDE39BF4EAA2EFE59EF3E9A2EDE39BEAE09AFBF0AEF6EBABF3E8A6F2E9A3F3E9A2F3E9A1 F0E89CEFE69AF2E99AEFE697EBE392EFE796F5EA9AF3E898F0E595F4E99AF3E899ECE193F8ECA0 FCF0A4F5E99EF2E69CF1E59BEDE194EADF8FEFE494F5EA9BF3E899F2E797F5EA9DF7EB9FF5E99D F2E69BF3E79DF5E99FF4EBA0F2E99EEDE498E9E095EFE699FBF2A5EEE598F4EB9BF0E798ECE394 ECE493E3DB8AF8F09CF2EA99F2E99AEFE69AEFE59CF3E9A3ECE3A0FBF2B1FFF6B5FBF2B2EEE5A5 E3DBA0FBF4BED0CF8D5F5F201313006C6843746E4E48431CC8C486E3E091B3AE5EE4DC94E6D998 F8EAAEF5EAAFEFE6ADFAF3BCD4CF972F2C044C4A1ADCD89BD8D494DED894CFC987E4E2B08C8A56 150F013C32056E632DA29C66C6C8837D7F50050700AAAE58EDEB9BECE59DF6F0A7756C38B2A67C FFF8C2DCD6982E28008B8463F5F0BB94914FB5B56DD6D49F66642DA4A3608B8A47CECD8B9E9F5E C8C88FADAC792522000C0900070100252219494441292411413D206463445859384F522A3B4114 8589566E7337818443BCBD74E3E296D1D081DAD787E8E394EEE998ECE393EADE8FEBDE8FE8D888 EDE08EE5D987E7DD89E9E08DE2D984EBE089F5EA92F8ED95F1E58DE7DC83E1D47CF9EA92F3E58D ECDE86E8D984E1D27DEEEA91E1E58FDDDD94CCC992A5A0785A5336150B030B020051481ED3CD90 E3DF93DCD884DFD98BE3DB91D0CA7CD6D082DED88BD0CD81DAD68ED3D08DD9D597CECA91A49E6A 6460362F2813221B0629250E34321D0A0802120F0716120C3C37242925034E4D0B494903545201 5F5A15635F18534F08767229BCB86EFAF6ACF2EFA2E6E396EBE89BF7F4A4F6F2A3F6EFA1F0E798 ECE394EFE697F4EB9CF3EA9CF0E799F0E798F1E899F4EB9CF4EB9CF2E99CF1EA9FF6EEA4FAF1A8 FBF3ABF9F1A9F8EFAAF7EEA9F4EBA6F4EBA6FDF5AEFAF2AAFFF9B0FCF4ABF8F0A7F9F1A7F5EDA4 F5EDA3FBF3A9FAF2A7F9F1A6F8F0A5F3EAA0F5EEA0F4ED9DF6EF9FF7F0A2FAF2A6FFF8AFFCF4AC F5EDA6FAF2AAFAF2AAFAF2A9FCF4A9F8F1A3F6F0A6F4EDA5F3ECA4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6C66A6B6A 3334334E4E4EB0B0B0FFFFFFFFFFFFFFFFFFEEEEEE8D8D8D4747473D3D3D7D7E7DEDEDEDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF9EEEBEAC0ECECBBF4F4C8FBFBEAFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF9ED ECEAC1DFD282DABA46E6CC6DF6E7ADFDF9E2FFFFF8FFFFFEFFFFFFFEFEFBF8F8EAF0F0D2E9E9BC F1F1D6FDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFF9F2 FEE9D2F9E1BCF6E0B5FBF3DBFFFEF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FDFAE2F5E1A6E9BD5CEEC16CF6D299FDEBD5 FFF8F2FFFEFEFFFFFFFFFEFDFEF7F0F8EDD7EAE0B4F2ECC6FDFDE3FFFFF7FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFDFAF1EDCEDFD38ADBC772E1CC81F8F3E1FFFEFDFFFFFFFFFFFFFAFAFAEFEFEFEEEEEE FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F5F5F5FAFAFAFFFFFFFFFFFFFFFFFF FBF9EFE7D699E0C673E8CE86F4E4BAFDFBF5FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C7727272383838 505050B4B4B4FFFFFFFFFFFFFFFFFFEBEBEB8080803E3E3E383838828282EFEFEFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF4F4F4D6D6D6E4E4E4FBFBFBFFFFFFFDFDFDF7F7F7F4F4F4F3F3F3EDEDED EAEAEAF9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDD84EBDD85EADC84E9DA85 E6D784E2D382E6D788EADA8CE8D88BE6D689E5D687E1D582E9DD8AEDE18FE2D684E7DB8AE3D687 E6D98AECDF91ECDF92E7DA8CE6D98CE1D586D6CB7BD7CC7ADFD482D6CB79C6BC66CDC36ED9CF79 DED47DD8CE77D6CC75DBD17AE4DA83E9DF8AEEE392F1E697EEE392E5DB84EEE588EDE583EEE784 F5EB92F5EB99EEE391EFE58AF0E78CF1E88EF3E992F3E995F5E999F6EB9AF0E494EEE490F0E691 F1E790EBE189F0E78CE9DF86E5DB84F4EA94ECE191EFE494EADF8FEDE292EADF8EEADF8DECE28D F1E798DFD689E0D78BEEE596E9E091E9E091DBD382DDD584EAE290E2DA87E5DD8AEBE38EF0E48E EDE28AF2E691EBE28DE2D784E6DB89EEE695F5EE9EF4ED9DE7E092E5DD92EAE294E3DB89E0D886 E3DB8AF1E997F7EE9FF7EE9FFAF1A2F6EDA0F0E79AEDE497EBE295EDE593E3DB88EEE694F3EA9C EFE69AF2E8A0E8DE97F0E69FEDE39CF3E9A1EFE59CF0E69EF2E7A4F2E8A4F6ECA6F9EFA9F9EFA8 F6ECA4F7EEA3F1E89DF1E89AF0E799EFE697F3EA9AFBF0A0F9EE9EF6EB9BFAEFA0F8ED9EF0E597 F4E79CFAEEA2F5E99EF2E69CF2E69CEEE295EDE292EEE393EADF90F2E798F3E899F5E99CF4E89C F2E69AF6EA9FF6EAA0F4E89EEFE69AEFE699F1E89BF2E99CF1E89AEEE596F0E798F5ED9DF6EE9D F5ED9CF2EA98ECE490F6EE99EBE38FEEE694F2E99DF1E79FEFE5A1F3E8A8F2E7A8EFE4A6F0E4A8 F2E7AAEEE3A8E2D79AFCF7AFEBE699A19D58363113534E242A2600D9D594EDEA9FDED790E7DEA4 F5E9B3E2D8A0F3E9B2F0E8B0888349231E004C4720D4D08EF9F3B0F9F1ABF9F1A7E4DB93CCC98B CBC989BEB76FE0D494C6B7839A905BA3A55E696B3C0F1000919440EAE89BE8E19CFAF4A977703B 9E956BFEF6C3E0DC9E322E00969062EDECB0C2C27ACCCC837D7C478B8A509B9D538E8F4BC3C385 B9B883B8B6893E3B1C0F0D001512021A1609201D13231F181A17023E3A1C6E6D4E595A3931340D 40461980845153581D8E914FB8BA72B8B86BCECD7DCFCC7BE9E594E9E493EDE594F6EA9BEFE392 F4E593EFE28FE9DD88EFE58FEBE38EE5DB8AF2E39BF6E69DF1E298EBDC8FECDD8FEAD98AF0DF8F EAD889F2E093F4E196E1CE83EFE78CDFDE7DE7E590E9E5A3F1EAB9D8CFAD928969352C13221B00 554F18C5C27DDBD98CF6F2A3D7D184D4CF84DCD78FD8D38ED8D493D5D093C1BD8494925A3C3916 1612000B06000500000B060009060028250D191705110E07140F0A2821124A4620AFAB6BA7A54B A6A24FA8A25CB2AA65C9C27AFDF7AEF4EDA4F5EFA5F1EB9EF9F4A5FEF8A9EEE998F1EB9AFAF2A5 F3EA9DEDE497F3EA9DF7EEA1F3EA9DF3EA9DF7EEA1F9F0A3F6EDA0F8EFA2FDF4A7FBF3A8FAF2A8 FAF2A9FBF2ACFDF4B0FEF5B2FBF2AFFAF1ACF3EAA3FCF4AAF8F0A6F9F1A6F6EEA3F3EBA0F6EDA3 F4EBA1F5EDA2FBF3A8FAF2A7F8F0A5F3EBA0EFE79CF7EFA4F8F2A3F9F2A2FBF4A6FDF5ABFDF6AE F8EFAAF8EFAAFCF3AEFAF1ACFAF1ABFCF4ACF9F1A8FAF4AAF8F2A8F8F2A8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBCBCBC 5556552F302F626262BCBCBCFFFFFFFFFFFFFFFFFFECECEC7D7D7D3C3D3C464746898A89E8E8E8 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFBF9F9EDEFEFCBE8E8B2F3F3D7FDFDF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFCF9F9ECEAE9BAD5CD67DABF4EE6C15AF7E9B2FDFBE4FFFFFAFFFFFFFAFAEEEDEDC9E8E8B8 F4F4DFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFCFFF8F2F3EBCAE9E1A9F4F1C6FDFDE5FFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8FDEFD7F7D299EDBF66E8B956 F8D4A0FDEAD3FEFAF3FEFFFFFFF9F2FFEBD7FDE0C5F8DECDFBEEE2FFFEF8FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFBFBFBFDFDFDFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFCF7F0E3BCDEC570DCCB79E3DDA1F8F7E8FFFEFEFFFFFFFFFFFFF3F3F3DADADA D9D9D9F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1E9E9E9F5F5F5FFFFFFFFFFFF FFFFFFFCFBF4E9E5B4DECF81E0C570ECD69DFCF9F1FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8B8B8545454 2E2E2E5F5F5FBDBDBDFFFFFFFFFFFFFFFFFFE9E9E9757575373737404040898989E9E9E9FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF0F0F0F5F5F5FDFDFDFFFFFFF7F7F7EBEBEBE3E3E3E6E6E6 EFEFEFF8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7D97FEBDD84E8DB82 E3D47EE2D380DECF7EE2D384E7D789EADA8DEBDB90EADA8BE0D17DE5D681EBDC88E2D380EEDF8C EADB8AECDD8CE7D789E7D789E9D98CE8D98CDCD181D8CD7DD9CE7CDDD280DED381D7CD78CBC16C D8CE79E4DA82DBD17AD4CA73D7CD76E0D681E4DA86EEE392F2E798EDE391E5DB83F4EC8EEFE784 F2EB88FAF097F7ED9BF1E794F4EB90F1E88EEFE58EF0E692F4E998F4E99AEEE394F3E899F2E796 EFE492F1E794EDE38DE6DD82E9DF86F1E791EDE38DEBE090F6EB9BECE191F0E595EBE08FE6DB89 E8DE8AEEE597E2D98EE9E093F2E99CE7DE90E9DF91E6DE8DDCD482E6DE8BE6DE8BEBE38EEBE38E ECE08AE5DA81ECE188EDE38CEAE08BF3E897EEE796EFE797ECE595ECE597EEE79AF0E89AE7DF8E DBD382DBD383E5DD8DECE396EAE194EBE297EBE297E6DD92E5DC91DED48BDFD787DBD380EBE392 F0E799EAE196ECE29BEAE099EAE099E5DB93F4EBA1F3EA9DEDE497E8DE96EBE19AF0E69FF5EBA3 F3E9A1EFE59DF2E8A0ECE29AEFE69BF0E79BECE498EEE597F6EB9BF7EC9CF9EE9EFEF3A4FBF0A1 F1E697EFE397F2E69AF1E599EFE399F3E79CF0E597EEE393F1E696EDE293F4E99AF3E899F1E699 EFE397F2E69AFAEEA3F4E89EEEE298E9E093EDE497F3EA9BF7EE9FF4EB9CECE393ECE493EEE696 F3EB98F4EC99F1E997EFE792F0E893EFE794F5ED9CF4EB9FEFE69EF2E8A1F0E39FF0E39FF0E39E EEE19CECE099ECDF99F3E5A1EEE193EAE18EFBF3A9DFD69FECE5B43C37109E9B53FAF7ADE2DC9F FAF2C6F0E6BAFCF4C2C9C28F3B35160D0800878247E6E0A2FBF5B3EDE59EFFF3A8F1E394ECE08F E4E195C7C378F0E89BE6D795F7EFBAFFFFCAF3F1ABA8A8770506025E601EE8E29BD7CF8EF2ED9F 8A824E7C7349FEFCCDFFFBC12B2700ACA974DEDD9CA2A356CED0825F5E2780804296994CE1E49E C9CA90BDBB914C49300B0800262314141105151306161408100F00211F073834193E3D1F3A3B1B 2729053C421674784670743BA3A565A7A861A5A459C2C073C6C374E5E092E3DD8FEAE194F9ED9F EEE193F8E89AF1E394E7DB8BE7DC8AE9E18DECE398F6EAACEFE4A5E7DB99E7DA94F2E39CF3E59C EFDE96EBDA92F5E39DF8E5A0EEDB96F2E694E1DB82DCD683D6CE85E8E0A1F5EDB6ECE5B2B4AD7B 6F69343B3901757337BBBA78E4E193D7D484E3DF95E3DE9CDBD79BC1BB86C5C08F4C481A121001 13110028250038350F1B160045412044451F3738110A0A011412052420172E251A4D4728B2AD72 ADAB57BEB867CEC580F0E7A1EEE59EF2EAA1F4EAA2FCF3A7F3EC9CEFE798F6EE9EFAF5A1F5ED9B F3EB9DF3EA9FF2E99EF2E99EF5ECA1F8EFA4F6EDA2FCF3A7FBF2A7F5ECA0F6EDA2FEF5AAF8F0A5 F8F0A6F8F0A7F8EFAAF9F0ADFAF1AFFFF7B4F8EFAAF4ECA4FFF9AFF8F0A6F4ED9FF0E99BEFE89A F4ED9FF6EFA1FAF3A5FCF5A9F8F0A5F8F0A5F7EFA4F2EA9FF6EEA2FAF3A5F8F1A1F9F2A5FBF3AA F9F1A9F4EBA7F9F0ADFCF3B0F9F0ADF7EEABFCF3AEFAF2ABFCF6AAF9F3A6F6F0A3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF B1B1B13D3E3D202120666766C0BFC0FFFFFFFFFFFFFFFFFFECECEC8080803839383232325E5E5E ADAEADDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6E5ECECC5EBEBC5F3F3DA FBFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF6F9E8E4E6ABDCC464DCAE37E9C96AF5E5B1FCFAEEF8FAF0EFEFCDEBEBBA EEEEC0FDFDF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F6E3EBECC2ECECB8F3F3C8FCFCE5FFFFF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9F5FEEAD4F3CF8F EAB958EFBF65F3D595F6EEC8FDF6E1FFEFD9FFE3C4FFDFC3FFEBE9FFF7F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDD7D7D7D9D9D9E9E9E9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFDFEFCEDF0DCA3DFBA57E4D189EEF0CFFBFBF3FFFFFEFFFFFFFFFFFFF5F5F5 E1E1E1E0E0E0FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDECECECE1E1E1F1F1F1FFFFFF FFFFFFFFFFFFFDFDF7F2F5D2E6DA92DFBF5DE8CA82FCF8EEFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFABABAB 3838382424246B6B6BC4C4C4FFFFFFFFFFFFFFFFFFEBEBEB8080803B3B3B2E2E2E5A5A5AABABAB DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF5F5F5F8F8F8FDFDFDF6F6F6EFEFEFEAEAEAE8E8E8 EBEBEBF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D379E1D37A E3D57DE4D57FE9DA85EADB8BE1D183DFCF81E6D68AF1E196F4E495E7D981E7D880EBDB86E9DA84 EDDD8AEDDE8BEBDB8AE7D688E4D486EBDB8EEDDD90E3D486E0D585D6CA78CCC16FD9CE7BE5DB86 C7BD68D1C772E1D780DFD57EDAD078DCD27BE0D681DFD581E8DD8DEFE495EEE391EFE58DE8DF7F E7DF7CF0E886F6ED93F5EB99F7EC9CF7ED95F2E891EEE490EFE493F2E798F2E799EBDF91EFE495 F0E596EDE291EBE08FE9DE88E6DD82E8DE85F4EA93E4DA85E3D888ECE191DFD484EBE091EEE392 E9DE8CF0E692EAE193E7DE93ECE396EBE295E2D98BE2D88AF1E998E1D987E7DF8CE8E08AEAE28D E4DD85EDE08AE5DA80E4D980E6DC85EBE18CEFE590F3EB99EFE898E8E191EAE394EEE799EEE696 F2EA99E8E08FE8DF8FE8DF90EAE195ECE397ECE398EAE097EAE098F3E9A2EEE49CE6DD90E9E190 F5EB9DEFE69AECE29AE7DD97EBE19AE9DF98E1D88EF1E89CF1E898E4DB8BECE398EBE299ECE39A EEE49BECE299E8DE95EBE199EBE199F6ECA4F9EFA7F0E69DE9E095EFE494F0E595F2E797F8ED9E F6EB9CEEE394EBDF93EEE296F1E599EBDF95EDE197F1E698F1E696F5EA9AF7EC9DF8ED9EF5EA9B F5E99CF1E599F6EA9EFBEFA5F0E49AEEE198ECE296EBE294EAE192ECE393F1E898F7EF9EF0E896 EEE694F0E895F0E895EBE38FEDE590F4EC9AF7EF9EFAF1A2F1E89CEBE198F2E89FF9EDA3F5E99C F7EB9CF3E996F0E58FF3E595FAE69DF6E490F2E58DE5DA89ECE2A4FFF9C2918C4D2F2C00898644 B6AF79BBB0938B8260585126241E003B3816A09D64F6F4BCF5F0B1E8E19BEBE296F7EA9AF5E591 F2E48DF3ED97ECE791ECE18EFAE8A3F0DDA6DBCF98E6E49CD3D2A11E1C043A3A0EE0D994ECE3A5 F0EC9DB5AF762017008A8352DBD69C383400A7A56DD2D18DDDE08F8E924143410A969655949747 C1C37EDCDCA78C8965000000120F06100B0624201A100F051C1B0A1D1E0B1E1C044B472C414025 3031123C3E1B6F764B858859787D46A6A96BA0A15DA9A85EE0DE91CDC980E9E39BE8E299ECE29B F6E8A1EEDF97F3E19BF1E299EBDD93E8DD8FEFE598F7EFA9F7EEB2F3ECADF1EAA7F1EAA2EFE69D E9DF93E7DC90F2E69BEBDF95E1D58CF5E49EF7E7A1EBDD96D9CC82E3D98CE9E190E0D989D5D285 E5E199CBCA864D4B1765642EB7B67DABA95CD7D484E2DE96D8D395D7D29E7B7447272200302C0C 4542187E7B4F929061B3B18496946A939662A2A56E92975E1C1E04131305221E131E160B4C4428 C7C18BCDC779E6DE90DACF89E8DE97F1E79FEEE49AE0D68AEAE192FFF6A6FCF5A3EFE693F6EE98 F8EF9AEFE699F2E89FF4EAA1F5EBA3F8EFA5FEF5ABFCF2AAFFF5ACFDF4AAF8EEA7FAF0A7FFF6AC FBF3A8FCF4AAFCF4ACFBF2AEFAF1B0FAF1B0FBF2AFF3E9A5F9F1A9FEF7ADF5EEA0FCF5A6F4ED9F F3EC9DF6EFA1F5EEA0F7F0A2FBF4A7F7F0A4F8F0A5FBF3A8F8F0A5F6EEA3F6EEA1F1EA9CF3EBA1 F9F1A9F9F0ABF9F0AEFBF2B1FCF2B2F6EDACF4EBAAFAF1AEF9F0AAFFFAADFBF6A5F8F3A2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFB6B6B64B4B4B343534777877C7C7C7FFFFFFFFFFFFFFFFFFF1F1F1A1A2A1595A59343434 3C3C3C787978C3C4C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCFAFAF1EBEBC3 E9E9BBF4F4DEFDFDFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFDFAF9EDEDDAA7DFBB5FDDAE36E8C670F5E8C4EFEDC9E7E7AF F3F3C6FEFEE4FFFFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFCFAFAEFEAEABFE9E9B3F5F5CAFEFEE6FFFFF9FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFAF5 FDE9D0F6D19DDFB14DD0B355CBC281DACCA2ECCFAFF1D2B3F3DBC3F3ECE8F3F1F1F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4CDCDCDA4A4A4A3A3A3BDBEBD DDDDDDF4F2F1FBF5F5FEFAFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFF6FBF9D8EDD584E1B442EED79BFDFEFBFFFFFEFFFFFFFFFFFFFFFFFF FCFCFCF6F6F6F5F5F5FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDE2E2E2F1F1F1 FFFFFFFFFFFFFFFFFFFFFFFBFFFFEEF3E4A6E4BC52E8C46CFCF7E8FFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF B1B1B1484848404040898989D1D1D1FFFFFFFFFFFFFFFFFFF1F1F1A8A8A8636363363636383838 737373C1C1C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E3E3E3EDEDEDF9F9F9EAEAEAE6E6E6F4F4F4 FDFDFDFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDACD71 E6D87EEBDD84E3D57DDFD07BEADB8AE4D586E2D286E5D589E5D58AE0D181DDCE77DCCD75E5D77E EEDF87E4D57FECDC88ECDC8AF0E090E6D686E4D385E7D789E0D283E5DA88DFD581D2C775DBD07D D9CE7BCABF6CD3C975DFD57FE1D781DFD57FE3D983EDE48DE4D984E6DB8AE8DD8CE7DD88EDE38A E7DE7EE8E17EF1E888F1E88EF0E593F6EB9AF5EB95F3E993F1E792EFE493EFE495F1E698F8ECA0 EBDE93EFE396F5E99AEADF8EDED37FE3D980E1D77EE9DF89ECE28EE4D989E7DC8CDFD484EEE392 EFE492E3D985EAE08CE4DB8DE5DC91E4DB90E6DD90ECE394EAE292E4DC8ADFD684EDE592EAE28E EBE28FE7E08BE9DF88E9DE87E2D881E8DE88F1E793EADF8CECE493F5EE9EECE595E7E08FEBE495 ECE496EBE294EDE496F2E99CECE396E8DF93EEE59AEEE59BE1D88EDED48DEFE59EEBE19BE0D78A EBE393F5EC9EE7DE93EDE39BE6DC95DDD38DE1D890E0D78DEEE599EFE696ECE493E6DD8EE4DB8F E4DB90E8DF94ECE398EDE39AF2E8A0E6DD95EAE19BF2E8A2F3E9A3F5ECA2F7EC9CF1E695ECE191 F2E799F6EA9DEEE295DDD187E9DD92F4E89EEEE298ECE096F3E79BEFE394F0E595F8ED9DF2E698 F2E797FAEFA0F3E89AF5EA9CF6EA9EE9DD92F0E39AEDE295EEE695EDE595E6DF8EE4DC8BEAE292 EFE794EAE28FEEE693EFE893EDE590F4EC9AF8EFA1F2EA9DF2EA9EEEE59AEEE599F8F0A3F7EB9C F2E795F6EC93F4E88EF2E789FBEB96F0D98FFDF29CF6E58EE9DB88EADE99E9E1A0F5EFAB9C9851 8984447E76417367496F6542888257BBB687EAE6B2FBF8C1F6F2B5F3EDABF0E8A0ECE294F4E696 F4E390FAEA94F2EB93F2EC92F4E993F2E099E7D49AEEE3ABDAD58FE3DFAF7A764E0C0900776E3A F2EAB0F5F1A8F3EEB78D8659AEA876B9B5782C2900838150EBEBA8A4A758A9AC5F44430C7B7D3E D0D688DBDE9F8C8D5E12100418140D070300211C1B201C171E1C1120210F2A2B13302F15403C21 3A391C4C4D2C6E704D7C7F555E62316C6F37969759A8A864CFCC84CDCA80D2CD89E8E19EEDE5A1 F0E7A3F5E8A4F4E6A2F2E29EF3E59FF4E7A0F0E49DF0E59EF3ECA6F0EDAAEBE8A2F1EFA6F7F5A8 F4F0A0EEEA98E4DE8CE8E190EDE696ECE495F7EDA2F4E4A6FFF3BBE9D997FAED9FEDE58AE5E080 EAE888F3F298F4F2A5E4E1A185824E9E9A69A8A75BB0AE5EC6C37CAEAA6D908B551B17043F3815 8D8862949066D8D5A7CBCA98D3D29BD8D89BB6B975D2D68FDCE19F3436080F1002262215352D23 554D32BCB380C5BF74E6DE91DACE85F3E69DEBDE94EDE194EFE495F1E697F8ED9CF6EE9BF6EA97 F8EE97F6EB96FCF3A9F8EEA7F5EBA3F9EFA8FBF1AAF6ECA5F9EFA8FAF0A8F8EEA6F7EDA6FBF2A8 FFF7AEFFF7ADFCF4ABF9F1A9F9F0ABFAF1AEFCF3B1FBF2B0F8EFAAFEF7AEF0E79DE4DD90FEF7A7 F7F1A2F6EFA0F8F1A3F7EFA3F8F0A3FEF7ABFAF3A6F4ECA1FCF4A9FDF5AAF8F0A6F9F2A6F3EBA0 F2EAA1F8F0A9F6EDAAFAF1AFFCF2B2FBF2B2F4EBAAF1E8A7F8EFADF8EFABFCF6A9F8F3A3F5F0A0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDDDDDDACACACA2A2A2C1C2C1E6E6E6FFFFFFFFFFFFFFFFFFF9F9F9D6D6D6B4B4B4 A0A0A0A1A1A1BBBBBBE0E0E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC F6F6E5EFEFCEECECC5F1F1D4FCFCF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF7F0DCEEDBABE0BA5BE0B852E8C771EDDD9A F2F0C1FAFAE0FFFFF6FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF6F6E4EFEFCAECECB9F2F2C4FDFDE6FFFFF5 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFF7EFF2E2CDC4AE7D90825268644279725C9F9180B5A798C0B6ACBFBEBCBFBFBFBFBFBF BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFC0C0C0ADADAD959595838483 848585969595B9ACAAE8C7C5F9E6E5FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9FAEAEEEBBAE2CA69E0B23EF0D89FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6F6E3E3E3E1E1E1FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDE2E2E2 F1F1F1FFFFFFFFFFFFFFFFFFFFFFFEFFFFFEF5E6B6E5BC55E8C262FCF6D9FFFFF8FFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBDBDBAAAAAAA8A8A8CBCBCBEAEAEAFFFFFFFFFFFFFFFFFFF9F9F9DADADAB9B9B9A1A1A1 9F9F9FB8B8B8DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBF8F8F8E8E8E8E5E5E5 F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DFD372E2D575E3D679E2D57BE2D47CE9DA86DCCD7CDBCB7DE1D184E6D68BE8D989D9CE76E2D77E E6DB82E0D47EDED27EE6DA86F0E492EBDE8FE2D586E5D88AE7DA8BDDD27BDFD67BE2D880DAD17B D8CD7BDCD181D0C576D7CC7DE9DE8FE1D686EDE18FEAE08DEADF86E4D77EE1D67DEFE48BEADF85 EFE488EBE285E2DB7BF5EF91F6F093E9E288F1EA90EAE38CF2EA95F6EE99F3EB98ECE493E9E190 F4EB9CF3EA9BF1E899F1E899F0E798DED683EBE18AEFE58EE8DE89EBE08EE5DA8BE8DD8EEDE292 EADF8EEFE492F3E994E2D884E3D98BE0D88DDCD586E4DD8CF1EB96EBE58FE0DA84EEE893EAE490 E0D988E6DF8FF1E999F3EA9AF5EB9BE8DF90E0D788E9E091EFE697F2E99AEDE496ECE396EFE699 F1E89BF1E89DEFE59DEFE59DEDE498E7DE91E5DC8DEBE292EAE291DDD584E0D788EDE495E5DC8F E5DA8CF0E596F4E99AF1E598EFE397EEE296EBDF93E7DB8FE2D68AE8DD8EF3E899F1E697E9DD91 EDE195ECE096EDE197ECE097E4D890E4D792F5E8A4EEE09FE8DA99ECDE9DE7DA94EEE294F3E899 E7DC8EEFE398F6EAA2EBDF97EBDF97F4E8A0F4E8A0F4E8A1EFE399EADF96F3E9A1F7EEA2F1E89B F3EB9AF7EC9AF5E997F3E795F0E394EDE092EADD8FE9DA8EE9DD8CEFE591ECE18FEFE492F8ED9B F2E795F4E997EADF8EF2E797F0E595F3E897ECE192F4E7A2F4E7A2EADE96EFE399F8ED9EEFE495 F3E897F2E699FDF1A5FAEEA6ECDF99EADC97F3E59EECDF91ECE291F3E896EDE293E6DB8CEEE393 F6EB99F7EB9DF4E7A1FAECAEFCF1B2F3EAA7F1E8A5F1E8A5EBE29DEFE6A1F5EDA5F1E7A0EEE49C F4E8A0F3E79FECDF94F4ED9DE2DC8BEEE798EDE39DD9CF8FE2D89BE8E0A3FFFFCED8CFA45A5227 150A005A4E24B8B384D1CD9EDAD7A3DCDA9FB9B576484414484421EFECB5B4B27A8180474B4B17 AAB078858C57B9BD964240340400001C14150700001E1613100A032A26161918042B2A183E3E1D 2C2A066B6A435859306C6E3F7F814E54571E7C7D3FADAB68A29D59D1C982E2D994CBC27FE3DA98 F3EAA7E7DE99F8EEA9EBE19AF6ECA5F4EAA3F1E89DF3EAA1F4ECA1F0E99EF2EDA3EFEBA1EEEAA0 F4EFA5F2ECA2EFE99FECE69CF7EFA8F4EDA5FFF8B0EEE7A2FCF6B5E8E3A3FCF8B2EEEB9FEFE997 E5E08CEFE794F2E99BE8DB94EFE1A2E0CF96A2945FB4AC6BBAB770A09D58BEBB7859551E686426 ACA668DCD997F4F1ACD5D187C0BD71D0CA7CD9D17EE6DF8ED2CE87F0EEB644411D121000262316 2A2313544C2BA49C63D1CA7BE6DE8CE3DB8ADED685EDE393F2E795EADE89EDE18EF2E694F5E89A F6E699F4E69BFAEBA2FFF2AEF7EDA8FDF3AFF9EFA8FCF2ABF6ECA2FAF1A6F9F0A3FAF1A2FAF1A2 F9F1A0F6EE9DF9F2A2F4ED9EF4ECA1F8F0A7F9F0ABF7EEA9F3EAA6F9F1A9FFFAB1FAF2A8F2EB9D F6EFA2FCF4A9F7EFA6F3EBA2F6EEA6FAF1ACFDF4AEF6EEA6F4ECA3FCF4A9FCF5A7FCF5A7FCF4AB F5ECA9F1E8A5F3EAA7F9F0ADFFFAB7F4EBA8F6EDAAF6EDAAF2E9A6F3EAA5F8EFAAF6EDA8F9F0AB FCF3AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF8F8EAEAEAC0E8E8BAF6F6E4FCFCF2FFFFF9FFFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF7EAE2CE86DCB74EE1B342 F1D588FEFADDFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7E8E9E9BDE9E9B1F7F6CC FCF8E2FFF9F4FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFFF0EFECB8B3A6635F551817162B2C2C676968909291A8A8A9A6A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6 A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A4A4A49C9C9C 7B7B7B6263636362618A7870D5A795F2D4C9FEF7F7FAF8F8FBFAFAFDFDFDFCFCFCF8F8F8F8F8F8 FAFAFAFEFEFEFCFCFCF9F9F9FEFEFFF5F2DBE3D894D9BE52DEB84BECD9A5FAFAFCFEFEFEFCFCFC F9F9F9FEFEFEF0F0F0D2D2D2CFCFCFF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDED E2E2E2F1F1F1FEFEFEF9F9F9FBFBFBFEFEFEFCFEFFF1E1C3E5BA68EAC06CFCF1CFFFFDF1FFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1E8E8E8F3F3F3EAEAEA EAEAEAF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE8DC7AE9DC7BE9DC7DE9DC7FE8DA81E8D984E5D683E9DA89EFDF91DCCC7FC5B968D8CD75 E0D67DDED47BDED47CE0D781DED37FD6CB78D0C574D6CC7CE8DD8DE8DD8DDED57CD5CC6FCDC469 CCC26CD3C877E8DD8EBEB265B0A457CFC475E3D888E8DD8BE9DF8BE6D87FE9DC81E8DA7FF1E78B EFE488F0E589F4EB8FF1EA8DEEE88BF3EC8FF7F194F6EF94F5EE97F1E994EDE591EEE693F1E996 F3EB99EFE796F4EB9CEFE697EBE293F2E99AE8DF8CECE28BE7DD89E7DC89EEE391E1D686E3D889 E7DC8CF3E896F1E793F2E893E4DA83E3D988E7E091E8DF8FE4DB89E7E089E8E188E8E087EAE38C F1EA96F0E696E9E092ECE396EDE498F2EA9DEDE497EBE295F3EA9DF6EDA1EAE194EAE194EBE295 EEE598F2E99CF3EAA0EDE39CEDE39BEAE195E7DE90EAE291E9E28EE5DD89E8E08CE9E18EE7DF8D EAE191F3E999F5EA9BF1E697E8DD8EE4D98AF0E595FAEFA0F9EE9FF1E697EDE293EDE293E5DA8B EDE195F0E498F0E49AF2E69CF5E9A0F0E49CE9DC96F7EAA6F3E6A1F0E2A1F5E7A5F1E49DF5E99B F5EA9BF0E496F2E69CF5E9A1F2E59FF3E6A0EEE19BE9DD96EEE298EFE399ECE098F0E59EF3EAA1 F1E89BF6EE9DF6EB98F1E591F1E591F2E694F5E596F5E598F4E599EDE18FEDE38DEEE48EEDE38E F0E692F3E896F3E897EFE494F8ED9DF3E899F6EB9BF1E599F5E8A5F9ECA9F3E6A0F7EB9FFAEF9F EFE494F0E595F5E99EFBEEA9F4E6A6EFE0A5F1E4A6EEE59EEEE59AEBE295E9E28FEBE08DE6DB86 E6DA84F6EA96FCED9CEFDF90EFE092FCF0A4F5EC9FF0E79BEEE59AEDE499F5EBA3F2E8A0E3D991 EDE39CFAF0ABEFE5A0F3EBA4EFE89BEAE497F3EDA3F6EFA7F2EAA7FDF5B6FAF1B8F4EAB4FBF2C2 DAD2A55F532D170F011713002D2800413D056B692A8F8B4CA09C62302C02918D5FFFFFDF8E8C60 2423029CA170949B714A4D300E0C01231E17352C2B170E0C1F160B1C1606141101312E1A3A3A25 3F3C1B47461B7574466B6D3E75774470743B65652A706F2FA3A05CAAA35FC9C079DFD58ED5CD8A E7DE9CE6DD9AD4CB86E8E098E8E098EBE39AF3EBA0F1E99EF4ECA1F8F1A4FBF3AAFFFAB9FDF4B6 F7EFB0FBF2B6F7F2B6ECE6AADCD399CFC68EA69D658D834D685F2E625F2A6667327A7940979454 E1DE96FCF4ACF2EAA1FCF0A6ECDC96E8D592FFEFB0D4C184AAA360BAB771B1AF6889863E827F36 DCD88EF3EFA5DBD88BC8C575D9D583E2DD8AD1CB75E4D87FDFD483CDC681DCD8A43937141F1E09 2E2C1B37331A767048A19A5DD6CF7EE2DA86E7DF8CE5DD89EDE48FF1E792EDE28CF4E895F6EA98 FBEB9EFDECA3FEEDA6FEEEA9F9ECA8F3E8A5FDF3AEFAF0A9FBF1A9F3EAA0F6EDA0F7EE9EF8F09F FAF29EFAF29EF9F19EF3EC9BF3EC9DF6EFA0FAF2A9F9F1A9F8F0A7FAF2ABF4ECA4F6EEA5F5EDA3 F4ED9FF7F0A2F1E99EF1E9A1FBF2ABF8EEAAF8EFACFCF3AFF4EBA7F2EAA3F8F0A6F7EFA2F7F0A3 F9F0AAFCF3B1FDF4B3FCF3B2FAF1AEFDF3B0F0E7A4F2E9A3F6EDA7F8EFA9F8F0A7F6EFA6FBF3AD FBF3AEFBF3AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFBF9F9EEF0F0D1E6E6B1F1F1C7FFFFE7FFFFF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F8EAD9D988DDCD75 F1D192FDE7C8FFFCF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBF9F9EDEEEFCC E6E3A9F2E2B4FFE7CEFFF9F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF7F2E6DDC5877E6C3C221E133D3E40919191CBCCCBEEEEEEEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBDFDFDF CBCBCBA3A3A38888898787849E9B7DCBC278E9D6ADFAE2E1E9E1E2EDECECF8F9F9F1F1F1E3E3E3 E2E2E2E9E9E9FAFAFAF1F1F1E7E7E7F6F8FDF4E7C3E3C261D9B844DBCE7EDFDBB8E7E8E9FAFAFA F2F2F2E7E7E7F4F4F4F4F4F4E2E2E2E0E0E0FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD EDEDEDE3E3E3F1F1F1F9F9F9E7E7E7EFEFEFFAFAFAECEFF0E3D1CAE5B3A0EFB8A4FDDFD7FFF3F0 FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1DEDEDEE3E3E3 F0F0F0F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE2D576E4D778E7DA7CEBDD83EDDF86E5D780E6D784E5D684EEDF8FE0D181C4B964 DAD076E1D77ED9CF76DED47AE3D982E2D882DED47FD1C773D6CB7AE2D785DBD080DDD47BD7CE6F D4CB6FDBD27ADAD07CE4D988DED384C6BB6BCABF6FD8CD7CDAD07CE2D882E8DA82F5E78EEEE087 EFE48AEADF85E6DB81F7EE93F2EA8FE7E085EDE68BF8F196F5EE94E7E089EBE38EEEE692F0E896 F0E895EFE795ECE493F2EA99EDE595E9E091F1E899EBE28EEFE58DE8DE88ECE18EF5EA98E6DB8B EBE090E1D686F1E694E2D783E9DF89ECE28AE7DD8AEEE394EFE594E7DD88E3DA82E4DB82F0E68D E4DA82E9E08AEBE08FE6DB8CF5EA9CECE395F4EB9FF3EA9DF0E79AF1E89BEEE598EBE295EEE598 EEE598EDE497F1E89BF3EA9EF0E69CF2E89EEEE598EDE595F0E895F1E995E1D984D4CC77E7DF8B E8E08DDED685E5DB8BE5DA89ECE191EFE494E3D887EADF8EEFE494F2E796F0E594ECE191EFE493 EEE393F3E79BF3E79CEFE399EFE39AF4E89EEFE39AF2E69CF8ECA3F2E69DEFE39CF1E59EECE097 EDE291ECE191F2E798F3E79CF5E9A1F7EAA3EBDE98ECDF99EFE29AF8ECA2F7EB9FF3E99EF8EFA5 F7EEA1F8EFA0F7EF9DF2E893F1E691F4E894F7EB9AF9EA9CF9E99EF7E79EF6EA98F2E993F6EC98 F3E896EDE290FBF09FE9DE8EEEE393F7ED9DEFE495F2E798EDE194F0E39EF4E8A2F1E59CF2E798 F2E796EADF8EF1E694F3E79AF3E79EEEE09EEFE1A4F1E4A4E8DE97EBE297ECE395E9E190EDE290 ECE18DE4D884F0E490FFF2A2F1E193EDDD90F3E79AEEE598E9E096E9E095EAE196F0E59EF4EAA2 E8DE96F3E9A2FDF3ACF2E7A0F5EDA4F0E89DF3EDA0EFE99EE8E199ECE4A0F2EAA9F2EAADF6EDB4 FBF3BDFCF4C1E3D9A7CCC290B5AE80B3AD77CCC88AECE9A6D5D192DBD89F7572422723088F8B66 71704B41411865693D343B110C0E000706000804031912070300000A04001D17040B09001B1905 2F2E1C43402056542A646236606233777A47757840909054929251B9B672C6BE79CDC57DD3C981 D1C884E2D997DBD28FC7BE79C9C179C5BD75C8C077C9C178C1B96FB9B166B3AB60A79E5C968C5B 94895A857A4B6F6536564B1E4035123A2E083C3006281C002B1F00261A002721001A18001C1800 1E1A03322D139E9752FFFEB9F2E79EE9DC92F9EBA1EFDF96FBECA4C5BF74B1AF63ACAA5DA3A157 CDCA80E9E59BD8D48AEFECA2E5E197DAD68BD9D389D0C87CD6CD7FD8CF85D9D492C8C58F232405 2A2A0C2B2A0F2221057A78489B9856ECE694E7E08CE8E08FE5DD8CECE28FF2E792EEE48FF6EA97 F5E997F6E99BFCECA3FEEDA5F9E9A3F3E6A2EFE5A0FBF1ABF8EEA7F6ECA3EBE297F0E79AF2E99B F4EC9BF3EB99F2EA97F2EA98F6EF9FF6EFA0F8F0A4FAF2A9FAF2AAF9F1A9F8EFAAF3EBA4F8F0A7 FBF3A9F5EEA0F3EC9EF1EA9DF2EAA0FFFBB2F6EEA7F3E9A5FBF2AFF7EEABF5ECA8F6EEA7F6EEA4 F6EEA4EFE6A0F6EDAAFDF4B1FAF1AEF8EFAAF6EDA7F1E9A2F1E9A1F4ECA3F9F1A8F9F1A8F4ECA3 F4ECA2F4ECA2F3EBA0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF7F7E9EDEDC7EDEDBEF2F0C1FBF0D6FFF6EBFFFDFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF6FEF2E3F7F0D8EEEECBE3E7AF EBE5B5FAE9CDFFF4E9FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC F6F7E6EEEBC5F6E2BAFCDFBBF3EBCAF6F6E3FDFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFBFEFEEEF3F4D4E9E8B6ECDC99B8AC80807D73919294C6C6C6EBEBEBFFFFFF FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE E2E2E2C2C2C2BCBCBCBEBEBFBFBFBCC4C6A6D1D181E2D090EDCFACE0D6CDE8E8E7F7F7F8EEEEEE DDDDDDDBDBDBE4E4E4F9F9F9EEEEEEDFDFE0E9ECF1E9D9B2E0B750E1BD55E7E2B3E2E2D1E2E2E2 F8F8F9F0F0F0E2E2E2F0F0F0F5F5F5E6E6E6E5E5E5FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDEDEDEDE2E2E2F1F1F1F7F7F7E1E1E1ECECECF9F9F9E8EAEADED3D3E1C3C1EDCBC3FCE8DB FFF7F0FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAEDEDEDEAEAEA ECECECF7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDBCE71DCCF73DFD277E3D57CE5D77EDFD179E5D781E0D17CE3D481E5D582 DCD17CE6DC81E9E085E1D87DE2D87FE8DE85E6DC83E1D780DED47DE0D681E1D782DFD481DFD67B DBD273DED579E6DC82DFD57DDCD27EDED381E8DD8BE9DF8BEBE18CE9DF87E1D77FE4D67DF2E48B F1E289F5EA90F4E98FF5EA90F2E98EE8E085EBE489EEE78CEEE78CF4ED93EBE48CF2EA95F8F09B F8F09BF2EA96EEE693EDE592F0E897EFE796EEE695EEE596E3DA86EFE58CEBE18BEADF8CE8DD8B E0D586EDE292E2D787F1E694E1D782EAE088EEE48BF3E794F1E593F1E592F2E692EEE38CEBE086 E8DD84E2D67EE8DC88E7DB87E4D886FBF09FEEE596F6ED9EF4EB9CF1E899EEE596E7DE8FF0E798 EEE596EBE293E9E091E8DF90E8DF92EAE194F0E79AEBE291EAE28DE6DF89E7E088E7E088E4DD85 E8E18ADDD580E5DE8BE3D987DAD07BE5DB88F5EA97F1E792ECE28EEDE28FF0E691EBE18DE7DC8A EBE18CECE190F3E79BF2E69CEDE197ECE094F1E599EDE195F4E99CF3E79AEEE296EDE195EEE394 E9DE8FE7DC8BE8DD8DF1E697F3E79CF4E89FF9EDA5F9ECA7F9EDA5F6EAA1F7EBA1F2E69AF2E79A F7EE9FF5ED9DF7F09EF5ED9AF1E791F3E794F5E997F7EA9BFAEA9DF9E99EF7E79EF6E99BF2E795 F5EA9AF1E697E9DE8EF5EA9BE9DE8FF1E698F9EDA1F0E498F6EA9FEFE397F6EAA2F8ECA3F4E89C F4E998F5EA98F5EB96F7ED99F2E797EFE397F1E59DF0E3A1EDE09DEBE29AE8DF94EDE496ECE493 EBE08EF0E592E7DB87E6DA88FAEC9CF9E99BF2E394F0E497EFE699EFE699EFE69BF0E79CEFE69B EEE49CF4EAA2F3E9A1F3E9A2F6ECA5F0E79FEDE59CF4EEA4EEE89EE9E29AF2EBA4F7F1ACF6EEAD FBF3B5F3EAAFEEE5AAFBF2B9FCF3B9FAF3B9FAF2B4EBE6A1E6E29EF1EDADC2C08A59572D1D1A02 100F002322061617000E1000131600050700242306484323635E3E605A364B4721100D01030200 1816011F1E0D55523367653B7573476A6C3D80824E72763CA1A266A2A2619B9853B8B06ADED58D EDE39BE4DB96F5EBA6F3EAA5F5ECA7EEE69EE4DC94FAF2AAEFE79FE2DA91D9D188CAC277B5AC6B 9C925F968C5A89804E887E4E8A7F5094895AB1A678C4B98CC7BC91DDD1A6DED3A97B745A443E2E 302A12352F0B272008130B00847D3EFDF5ACF8EFA1FCF1A0FAEF9CF4E998DAD584A8A555726F20 BFBC6FF5F1A6DCD88FD8D38DE0DB97E5E09FE2DC9EE6E1A2F5EDAFEDE3A3E0D79ADDDA9EADAD77 16190331360D1315021D1F02686A35838340E3E28FE8E28FE4DC8BE0D887E7DF8CF2EA97EDE38E EEE491F0E593F4E799FDEFA5FFF4ABFEF0A9FAEDA9F4EAA5FEF4ADF9EFA8F7EDA4EBE298F2E99C F6ED9FF8F09FF8F09FF8F09FFBF3A3FDF6A7FCF4A8F9F1A6F7EFA6F8F0AAFBF2ADF9F0ACF7EFA8 FAF2A9FFF6ACF9F2A4F3EC9EF1EA9AF0E99BFFF7ADF3EBA3F2E9A5FEF5B3FDF4B4FCF3B2FAF1AE F9F0ACFBF2ACF3EAA4FAF1ABFCF3ADF7EEA8F8F0A8F5EDA4FCF4ABF8F0A7F6EEA4FAF2A7FAF2A7 F7EFA4FBF4A5F8F1A3F6EFA1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFAFAF0EDEDC7E6E1A7F8DEB7FDE9D3 FDF8EFFEFEFBFFFFFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFDFCF7FDF2E4FDE2C2F0E0B1E6E5B0 F3F4DCFBFAF1FEFCF8FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCFCF9F0FDEAD3FADEB7E7E0A6ECECC4F9F9EDFEFDFCFFFDFCFFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFDFDFDF8FDFDEDF9F9D5E6E9A8DBDE8DF3F2BDF3F0D7EAE9E4ECECEEF6F6F6FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD8D8D8B2B2B2D1D1D1F1F1F2F5F4F2ECECD5DFDB9ADDC877DEBF72DDD3BCEAE9E7F8F8F9 EFEFEFDFDFDFDEDEDEE6E6E6FAFAFAEFEFEFE0DFDEDEDEDDDDCCA0DDB652E9C873F6F2E1EBEBEA E4E4E4F9F9F9F1F1F1E4E4E4F1F1F1F6F6F6E9E9E9E8E8E8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDEEEEEEE5E5E5F2F2F2F8F8F8E3E3E3EDEDEDF9F9F9EAEAEADFDDDEE0DBDAECE6DA FCF8E0FFFEF1FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC FBFBFBFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE0D279DED078DDCF76DBCD75DACC74D9CB73E5D67FEBDC86E0D17B DDCF78E3D880DFD57BE1D87CE2D87EDBD178DDD37AE4DA81E3D982E6DC84E7DD85DED47CDBD17B DBD276DCD375D8CF71D2C96EDAD076E0D67EE2D880EBE189DDD37CD9CF77DAD076E2D97FEFE188 E9DB83E7D981EEE389E4D97FEBE087EEE58BEAE287F0E98FF4ED93F2EB91F4ED93F6EF97F3EC95 F2EA94F0E893EFE793EFE793EFE794EEE694EDE593EEE695F0E797E3DA86ECE28AEBE18AE5DB85 DDD27FD9CE7DDFD484DBD07EEADF8DE8DE87EAE089DDD37AEFE48EE8DA86E6D983EEE18AEBDE87 E4D87FE2D67DE8DC84F2E58EF0E38CECDE8AF3E793F0E595F2E99AF1E899F2E99AF2E99AECE394 ECE394E7DE8FE7DE8FE9E091E6DD8EE2D98AECE394F1E999E9E18EEBE38CEAE48AE8E186E3DC81 DAD37BE6DF88EDE590E7E08DDED480DED47FE0D680E0D680E6DC86E6DC86E2D882E5DB85E6DC86 EBE18BF3E993F1E692EEE296EFE399ECE095EFE397F4E99CF1E697F2E798EBE08FEADF8EF0E693 F2E794F0E592ECE28FF1E696F1E696F4E89CF6EAA0F3E79EF8EBA4F7EBA3F1E59DF4E89CF9EDA1 F5EB9BECE492EDE592F1E995EFE793F3E894F5EA97F5E997F4E798F6E799F8E89CF8E99FF9EC9D F9EE9DF8ED9DF5EA9AF0E596F0E596E9DE90F0E497F4E89CEFE398F8ECA1EDE195F2E69BF4E99C F5EA9AF3E895F3E994F6EC96F7ED99F6EB9AF2E798F6EAA0F2E6A0EDE19AF0E79DEBE295F0E79A EAE192E9DE8EF0E593EDE18EE5D987EDDF8EF6E797F3E495ECE192EFE698F0E79AEFE69AF1E89C ECE398EBE198F3E9A0F0E69EEEE49CF7EDA6F3E8A1F7EFA6F6EFA6F2EBA2F0E8A0F2EAA3F7EFA8 EFE7A3F6EEAAF9F1ADEAE29DECE4A1DED591F2E8A3E9E098EAE299E0DC94C3C2828988547C7B56 3A381F2E2D1921210D0A0B000B0C00090B006B6B41A6A476B4B184E0DBA9DEDAA5EEEBB6A1A06E 29260C0806001A18093C391B4A49216B6A3F6F704285875371753B9B9D5FABAB68A19E58D2CB82 E8E196E4DB90DDD58EE9E09AE4DC95F8EFA9F7EFA8F6EEA6E5DD95EEE69EF2EAA1FAF2A9FFF9AF FFF7AFFFF8B4FFFDBBFFF9B6FFF8B7FFF7B6FAF1B0FFF6B5FEF6B7F7EFB0FFF6B7E8E0A4504A2C 2D2717241D075F5938D3CFA098925D373100ACA659F2EB9AF6ED98F4EB94F4EC96E4E08ED3CE7F 979244D9D68AEDE8A0ECE7A3E3DD9FEDE7ADE8E2ADCCC592BEB788C6BE92B7AD80BBB485DDDAA9 B0B18011130322270010160043461D686A38808242B7B96CCCC97ADED687E2DA8BE6DE8DEFE794 EDE390ECE28FF0E593F8EC9EFFF2A6FFF6ADFFF7B0FFF3ADF7EDA6FDF4ADF9EFA7FAF1A8F4EBA0 ECE396F3EA9CF8EFA0F7EF9EFAF2A1FEF7A7FBF4A8FDF5ABFBF3ABF7EFA7F6EDA8F8EFAAFDF4AF FAF2AAF5EDA4F9F1A7FCF5A7F7F09FEDE695EEE797F8F1A4F6EEA5F8EFAAFEF5B2FFF7B8FFF8B8 FBF2B2FDF4B2FFF6B3F9F0ABFBF3AAF5EDA4EFE79EF4ECA3EAE299F6EEA4F6EEA2F4ECA0F3EB9F F3EB9FF3EC9FFBF4A6F9F2A3F7F0A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7F7E7F2ECD0FCDECB F6DFC3EDE7BFF4F5D3FFFFEEFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF3F0EFCFEFE2B5FCDCB4F7E5C2 F2F1D7FCFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFFFFF7EEFCF0DAF3F0C2EDEDBAEBE9BEF5E8D5FEEEEEFFF9FCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAF1EEEECDE8E7B3E8E9AEE9EAB5EDEFC5FBFCE6FFFFF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEBEBEBD9D9D9EDEDEDFFFFFFFFFFFFFCF5EDF1DBBCE5C171DEB54CECDFC2F6F5F5 FCFDFEF8F8F8F1F1F1F0F0F0F4F4F4FDFDFDF8F9F9EFEEE7E1D4B1DAC581DBC56DEADC9EFBF9F2 F7F7F9F3F3F3FCFCFCF9F9F9F3F3F3F9F9F9FBFBFBF5F5F5F5F5F5FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF8F8F8F3F3F3F9F9F9FCFCFCF3F3F3F7F7F7FDFDFDF6F6F6F1F1F1F0F2F1 F6F7F1FEFFF2FFFFF9FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D37BE1D37BDFD179DCCE76DACC74DACC74DED078ECDE86 E0D27ADBCD75EADF86DAD075DBD178E7DD84DCD279DBD177E6DC83DDD37AE3D980EDE38AE4DA81 DED47BDCD378E6DD80DDD479CBC267DAD176E2D97EE7DE83E2D97EDAD077E3D97FD6CD72E7DF83 FBED95E6D880E6D880F1E68DE2D77EF2E78EE7DD84F3EB92EAE389F3EC92FEF79DF0E98FF1EA93 F5EE96F8F199F8F09BF5ED98F4EC98EFE794F0E895EAE28FE7DF8EF6EE9DEEE590EDE489EDE38A EEE48EEBE18CE8DD8BE8DD8BE7DC8AE8DE88EEE48DF1E78FE1D87DF5E78FEADB86E8DA82EDDF87 E8DA82E6D880EFE189EEE087E9DB83EEE088F3E48EECE08BEEE494EEE596EAE192ECE394EEE596 E8DF90EAE092E2D98AE8DF90F3EA9BF0E798E8E08FEBE391EEE693E1D984E8E187EFE88DE6DF84 E3DC81E6DF85E5DE87E7DF89DFD784DED581F6EC95F7ED96DED47DDDD37CDED47DD6CC75DBD17A E4DA83F2E891F7ED96E9DF8AEDE294EEE298EBDF93ECE094EFE495E9DE8EF5EA98E7DD89E7DD88 EDE38CEDE38CEAE08AE8DE89F3E895ECE191F5EA9CFBEFA5EFE399EEE29AFBEFA7F7EBA1F1E599 F1E697F0E695EDE590EDE590EFE792E9E18CF2E795FEF2A0FCF09EF6E99AF3E495F3E396F4E598 F4E798FAEFA0F6EB9BF1E697F3E899E5DA8BF2E69BF4E89CF4E89CF3E79DFFF5ABF2E69BE7DC8D EFE495F6EB9AF2E893EFE58EF1E790EAE08BF6EB9AF2E798F0E497EEE299EADF95E8DF93EEE598 F3EA9DE8DF90EFE494F7EC9CF6EA98F1E593E7D988F1E291F2E392F0E594F6ED9EF3EA9DEFE699 F4EB9EF1E89DF9F0A5F3EA9FF5EBA3F6ECA4F2E8A0FAF0A8F9F1A9F1E9A1F4ECA4F7EFA7F3EBA3 F8F0A8FAF2AAF2EAA1F9F1A6EFE79CF8F0A5E9E095EEE195EBE091F3EC9DD3CF858C894B858554 54543421200C2A28190C0D050D0F000A0A00777643DFDEA8999660C4C085A4A06184813EBFBC7A FFFDC477754B0B09000E0C0049462943411A4C4B205B5D2E8789568C90569698589B9B589D9C53 E5DF95E4DC8FD5CC7FE6DE95F6EEA6EAE29AF3EBA3E6DE96E8E098ECE49CF9F1A9EDE59DE1D990 E7DF96EEE798F0EB92F2EC96ECE78DECE68EF0EB92F2EC93F7F299EEE892EDE791F7F19BD5CE7C 5853221510000D09004E4A20D3D099F7F2B0DAD489A09B4AEFE995EDE590F4EC97EFE794F4ECA1 CFCA7FB1AA61DCD58FDCD895F0EBAEFFF9C3CDC6956A6238302709332A0C393013372E114C4624 A4A17CA5A67D141603232804161B033F44205256298F925A868B469E9C53DBD388EBE398E6DE8F E9E190EEE795EDE391F1E696F7EC9DF6E89DF2E49AF1E49CF7ECA5EFE59EF4EAA2F2E8A0F8EEA5 F6EDA3F6EDA0FCF3A5FDF4A5F7EE9FF6ED9EFBF2A4F1E9A0FBF3AAFFF7AFF9F0ABF3EAA7F2E9A6 F4EBA7FEF6AEFCF4ABFBF3A9F7F0A2F1EA99F6EF9EF9F2A2FCF5A9FDF5ACFCF3AEF9F0AFFEF4B6 FEF5B7F8EEB0FCF2B4FFF6B4FAF2ABFBF3AAF3EBA2F4ECA2FCF4ABEDE59AF2EA9FF8F0A5FDF6A8 FAF3A5F8F1A2F9F2A4F4ECA0F6EEA5F9F1A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFEF9F7 FFE9E9F5E4CFE9E5B8EDEEBBF6F6CEF7F7DDF9F9EDFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF6F8F8E9F7F7E7F2F3D9EAEABFECE3B3FCE4C6 FEF1E2FEFDFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFEF7FEFEE7F3F4CDE9E7B7F3DEC1FCE2D5FAEFE1 F9FAEBFEFEF6FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFCF9FEF8EFFAF7EBF2F2D6E9E9B6E3E3A5E6E6B2F2F2D7FDFEF9FFFFFDFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFDFDFDFFFFFFFFFEFEFFF6F7FCE2D9EBC47FDFB345EBE0AC F6F6E5FDFEFBFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFFFBFCFAEFE4E6C782DEC16AE2D793EFEFCD FDFCF7FEFEFFFEFEFEFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFEFEFEFEFEFEFFFFFFFEFEFEFEFEFE FEFEFEFEFEFDFFFFFEFFFFFEFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D57DE2D47CDFD179DFD179E0D27AE5D77FE1D37B E6D87FD7C971E6D77FE8DD84E8DE85D1C771E3D982D9CF78E2D881DED47DDED47BE1D77EE0D67D E4DA81E4DA81DCD279E0D77CD9CF76D3CA6FE5DC81EAE186E4DB80D6CD70DDD478E5DC81DBD277 DDD479EEE088DFD179E8DA82F5EA91F2E78EF2E78EECE289E5DC83E6DF85EFE88DF3EC92F3EC92 F7F096ECE58BEFE88EECE58DFAF29CE6DE89E8E08BEAE28FDDD582ECE491F3EB98EDE48DE9E085 EDE38AE3D980DDD37EEBE08EECE18FF3E895E2D882DFD57EEDE38AE9E085F2E58DEADC84EADC84 EDDF87E7D982ECDD89F1E28EF2E38EECDE86E6D77FE9DB83EDE08AEBE18FF0E897EDE594E5DD8C E8E08FF2EA99E4DC8AE4DC8BEAE291F1E998F2EA99EDE594E1D987DED682E6DE88E9E389EAE388 DED77CE4DD82E6DF86E4DC86E7DF8DEBE392EEE591F0E68FE8DE87E9DF88F2E891EAE089E0D67F E9DF88E6DC85D8CE77DDD37CEAE08AF9EE9FFEF1A6F4E89CF2E798E7DC8DE9DE8EEADF8DE8DD8A E5DB86EFE58EF4EA92EAE089E9DF8AEEE391EEE393F4E99BF9EDA2F3E79DF1E59BF5E99FECE095 EADE92F0E595FBF19FF1EA92EDE590F2EA96F1E997F6EB99F2E596F5E899F8EB9CF7E899FEF2A3 F5E697F2E594EDE290F2E797F6EB9BF1E696F8ED9EF0E596EEE395F2E69AFAEEA2F8ECA0F2E699 ECE191F0E593ECE38DF5EB96F8EE99EAE08BE9DF8AECE190F2E797F8EC9FF4E89CEEE396ECE394 F0E797F7EE9FF0E798F3E899FCF0A1F9EC9EF4E798F0E292F1E290F7E895F6EB9AF2E99AEFE697 EFE697F2E99AF6EDA0FAF1A5F7EFA3F3EA9FF0E69EF2E8A0F9EFA7EFE8A0F8EFA9F2EAA2EAE29A EFE89FF3EBA2F9F1A7EFE79CFEF7A9FCF6A7F0E99BFBF2A2F9EC9BF1E694EDE5959E994E8F8F52 43431538381B2E2D1B2C2C1F201D0E100F00504F2AD9D79E918F53C9C587F0EBA8E8E39ACBC67B 99974CE0E0A4D1CFA50D0C00272619474427626038615F355D5F309EA06D868A509B9D5B93934E 9C9A50D9D386BDB667CDC474E8E095E6DE95E0D88FE2DA92EDE59DF0E8A0F1E9A1E7DF97EBE39B E7DF97F3EBA3E7E08FF3EF90F0EB8DEFEB8AEDE988E8E483E8E483EFEB8AE7E382E2DE7DF1EE8C E6E283BFBB76625E2A585522C7C383F9F6AED3D082C4C06DEAE590EDE791D9D17DDED684F0E89A ECE49DE1D896A09855ECE4A5E4DDA0BAB37F837D4D2C25050800001009030D0401120900110A00 0400001814004C4C2E1C1D031B1E021316013C3F235C613C7E83537D8248A8A764E6E095EBE398 E7E091EBE493FCF3A3F5ED9DF5ED9CF4E899EFE396EFE397F0E49AFBF0A8F5EBA3EEE49CEDE499 F1E89DF4EBA0FCF3A6FDF4A7F9F0A4F3EA9DF1E89BF4EB9EF5EDA5F6EDA7FDF4B0FFFAB7FCF3B2 F1E8A6F8EFABFFF9B2F6EEA5F7EFA5F6EFA1EBE494EFE897F4ED9DFAF3A7FDF5ADFAF1ADFBF2B2 FEF8BAFEF5B8F9EFB1FAF0B2F8EEB0F8EFAAFBF3AAFDF5ACFBF3AAF8F0A6FAF2A7F2EA9FF2EA9F FCF5A7FFFAACFBF4A5FEF8A9FEF5AEFBF2AEFBF2ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFFFFF7F9FBF5EEF5F4DFEDEDC2E7E7ADE7E7B1ECECC7FBFBF2FEFEFCFEFEFCFFFFFDFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFEFEFCFEFEFDF4F4DEE9E9BAE5E5B0E9E9BDF1F0D3F8F5E4 FEF5EAFFFAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FBFBEEF7F4E0FBE6CEF9DFC0 EEE3B9EDEEC1FCFBDFFEFEF0FEFEFBFFFEFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFEFEFC FEFEFCFFF3E7FDE7CDEFE5BBEBEAB8F1F1C2F5F5D0F5F5E0FBFBF2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDF2EDEDD299DDB955 DAD178E7E8B3F9FAEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F2FBDFCFE6BA61E3C164EFE5B9 FAFCF4FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D279DED078DFD178E1D37BE4D67DE8DA82 D8C973D6C871F2E38DD7C972E5D984DBD07CDDD380D8CE79D8CE79DCD27CDDD37DE9DF87ECE28A E5DB84E4DA82E7DD85E3D983DFD57FDBD17AE0D67DE7DE84E3DA7FD4CB6ED8CF72DCD377E1D87E E7DD83DED57BEFE18BE5D781ECDE87F1E58EEBDF88EDE28AF4EA92EDE58DEAE38AECE58DEEE78E EDE68DEAE389F7F096F8F197E6DF85EFE891F0E892EAE28DE9E18CE6DE8AE9E18EF2EA97ECE38C EBE286E6DD83E4DA82E7DD85E9DF8AE8DE8AF3E994E6DC85DED37BE3DA7FE7DE83F2E78EEDE188 EFE28BEEE18AE7DA86F0E38EE6D986E4D682E2D57EE5D881EDE088F3E791E9DF8DECE493F0E897 F0E897EDE594EAE291ECE493EAE291E6DE8DE4DC8BE9E190EDE593E5DD8AE2DA85E6DE88E5DE85 E5DE84E2DB80EDE68DE5DE86DFD784E7DE8EEEE595EDE391EBE18CEAE08AECE28CEFE58FEEE48E EDE38DF1E791EAE08AE0D680E4DA84ECE28EE5DA8BF3E89AEFE496EBE091E3D888EBE090EDE291 EEE391E7DC89E6DB87EDE38DEEE48EF1E791F4EA96F1E694F2E798F1E699EFE398F8ECA2F3E79C F6EA9EEEE294E8DD8EF4EA98EDE592EFE793F3EB98EFE795F0E594F9EC9DFBEE9FF7EB99F3E491 F6E692E0D37DEADE8BEAE08CF1E793F5EA99F3E897F7EC9AF0E595EFE494EBE092EADE91EEE295 F5EA9BEEE393F4E996F0E692E6DC88E9DE8BF3E895EADF8DEBE090F0E595F4E999F3E79BEEE296 E9E090EEE596EDE496ECE395F1E598F5E99CF8EB9DF7EA9AF3E595F1E28FF1E38FF1E594F0E797 F2E999F3EA9BF4EB9CF3EA9CF5ECA0F3EA9EF2E99EF4EAA1F4EBA1F2E89FECE39BF1E7A2EFE69F EFE69FF7EEA6F9F0A7F6EEA3F1E99CF2EA9DF2EA9AEFE798F2E998FAEE9BF6EB97EAE393ADAB61 7273376B6D403638192D2D18252412141201070502A19D6DCAC586BDB877EAE4A2EEE69FF5EEA2 F8F2A4959047B8B6778280520E0D002826163835175D5B3469673D4244168E915D91955AA4A665 999A53AAA85DD9D483D5CF7DCBC372E6DF93E9E197E6DE95E9E198F1E9A1F3EBA3E8E098E4DB95 EAE19BEEE59FFCF4AEF5EDA1F0E994E2DC86E5DE88F0E993F3ED94F1EB93EEE78FE2DC83D8D279 D6D076CDC76DDFDA8BC6C37BD4D285E0DF8EC6C26CC6C26ADEDA81EFE88FEEE792E9DF8EEBE193 E6DC92EBE0A0D3C98AA3995BA79E63413A0B3B34045751204E472E8982626D664E2C24110D0500 1812095651392925161D1B0227260D191A052626125656434A4B2E5F6339727642979657D8D189 EDE79DEDE699DDD787EFE797EEE695EEE695EFE596F0E598F1E599F1E59BF3E99FF3E99FF3E99F F4EBA0F7EEA3FAF1A6F0E79BEEE59AEEE599EFE69AF3EA9EF6ECA3F5ECA7FDF4B0FAF1B0F3EAA8 F8EFAEFFF9B8F8EFABF9EFABF8F0A7EFE79BF0E999F7F0A0F2EB9CF5EDA1F8F0A6F9F0AAF7EEAC F6ECADF8EEB0F9EFB2F8EEB0FEF4B5FEF6B6FBF2AEFBF3AAFCF4ABF9F1A8F8F0A7FAF2A9F5EDA3 F5EDA1FBF3A7FDF6A9F8F1A5FAF2A7FDF4B1FBF2B1F9F0AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF3F3DAE7E7B7E6E6B2E9E9BCF1F1D4F2F2D9F4F4DCFBFBEB FFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFCFEFEF2F8F8E4F2F2D9F3F3DAEDEDC5E7E7ACE4E4A9EBEBC3F9F9EC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF2E6 FAE8CAEEE6BAEDEAB9FBF1CAF9F3D3F5F3DBFBF3E2FFF7EFFFFDFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF7F7E9 F2F2D9F3F3DAF8E7CEFCDCC0EEE0B4EDECC0F9FADCFFFFF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF9F2E6BD E4CD7BD3C14EE0D683F7F6DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE8DAF1CEA7E1B95AE6CB78 F8EFD6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8DB7EE1D478DFD277E1D37BE3D57C E4D67EA5964081721DB3A451E5D582F4E896E2D787D8CD7DDACF7FC5BA68DCD17FD8CD7BE4DA86 E9DF89E0D67FDDD37CE4DA83E2D784D9CE7ED9CF7CE0D67FDDD37ADBD177C9C065CEC568D8CF74 E2D87FEDE389ECE38BEBDC87EBDC87F3E38EF3E791F0E48EF6EA94E9DF88F2E992FAF39BFAF39B F3EC94EDE68EF2EB91F0E98FF5EE95F4ED92F6EF97F6EF97E9E18DE7DF8AF0E894E9E18EF5ED9A E9E089EDE487EAE186EEE58BF3E992EEE48FE7DD88EEE48FE6DC85E4DA80E3DA7EE4DB7EF2E78D F1E68DF4E893F0E490E8DC8AF3E795F0E394E8DC8AE6DA86E9DD88E7DB84E5DB83DED784E5DD8C EBE392EBE392E7DF8EE5DD8CF1E998EBE392E6DE8DE4DC8CE6DE8DE6DE8DE4DC89EDE592E7DF8A DED67FEBE48CEEE78FEEE690EDE590ECE493F1E89BEEE698F2E898F0E691F1E693F2E895E9DF8A EEE490E9DE8CEFE590EFE490EADF8DE8DE89E3D886E1D686EEE394ECE192EDE293E5DA8BECE191 EADF8FECE191EADF8FE9DE8EEFE494F3E896F5EB95F0E691EBE08EEEE394F5E99DF8ECA1F8ECA2 F5E99DF8EC9FFAEFA0F0E595F3E997EFE794F1E997F3EB9AEDE594EEE393F6E99AF8EB9AFAEE9A FCEF97F7E990D3C76CE9DD87E9DF88EAE08AEEE48FF0E692F2E893F4E997F1E694EBE090ECE191 F3E898FBF0A0F7EC9AE9DE8CF0E593F6EB99F3E896F8ED9DF5EA9AF5EA9BF2E798EDE393E7DB8F E3D889EEE695F3EA9BEAE192EDE497F5E99DF3E69AF5E79CF4E799F3E595F0E18EF1E38EF1E693 EFE796F2EA98F3EA9BF4EB9CF4EB9CF1E89BECE397EDE499F5ECA1F8EFA4F3E9A0F4EAA3F5EBA6 F3E9A4F7EDA6FCF2ABFAF0A8F3EA9FF4EBA0EBE295EEE598F5EC9DF1E697FDF09EF2E998D9D584 A3A05A7C7D436E7145474A29383820302E1313110237330DDED8A2AFA964D6CF89F2E9A5E8E098 E2DA90FAF3A797934ACCC98C5E5B2D060301322F1D1714015D5B337A794F6E6F41848652BCBF84 AFB16E9D9E56CDCB7FDFDA88D4CE79E4DC88E8E194ECE49AE9E198E8E097ECE49CECE49CF6EEA6 EDE49FEBE29DEBE29DEFE6A1EEE59FEDE39BEBE29AF0E69EF4EAA1EEE49BF4EB9FF2E99EE9E093 F6EDA0E8DF92C4BB6CB5AD5DADA8549F9944928D33BAB559EBE687E9E287F1EA91F4EA96EFE495 EFE397E9DC95F5E7A9EEE9AA948B4A8D844381783BD1CB8FF0EBB5E0DBADF8F3CE767153181200 0D07002D2818D8D4B2C0BD9D6460442A250F1A17062624153F3E2B37371C595C337E814E919052 BFB873E1DA92F2ECA0DBD587F0E999F3EB9BF3EB9AF6ED9EFAEFA2FAEEA2F7EBA1F6EDA2F7EEA3 F9F0A5F8EFA4F8EFA4FBF2A7F9F0A5F3EA9FF0E79CF4EBA0F8EFA3F7EDA5F7EEAAFCF3B1F0E7A6 DFD695E7DE9CF8EFAEF8EFABF4EBA6F4ECA3F1EA9DF3EC9CF8F1A1F9F1A5FAF2A9FAF1AAFAF1AD FCF3B2FAF1B1FAF0B2FBF1B2F9F0AFFCF3B2FBF2B1FAF1AEFCF3AEFBF2ACF8EFAAF8F0A8FAF2AA F8F0A7F6EEA5F7EFA5FAF2A7FBF3A7FAF2A8FFF6B3FBF2B2FAF1B0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF9FCFCF5FBFBF2F4F4DEE4E4AFE1E1A4E4E4AA F5F4CAFEFCE3FEFDF3FDFDFAFDFDF9FEFDFAFFFDFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD FFFDFBFEFDF9FDFDF9FDFDF8FEFEEFFCFAD9EDECBAE0E1A3E0E0A3ECECB8F8F8D3FCFCE8FCFCF5 FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFDFBFEFCF7FCFAF3FDF3E3FDE4C3F0E1B0E6E1A8F6DEB6FEE9D2FEF8EFFDFEFBFDFDF9FEFDFA FFFDFCFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFDFFFDFCFEFDFAFDFDF9FEFEFBF9F9ED ECECC2E0E0A0E1E1A3EEDFBBFCE0D7FDF0EAFCFBF4FEFEFAFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FDFBE5F6ECB7E1BC4DE7C866F7EDBAFFFFEEFFFFFBFFFFFFFFFEFEFDFBF5EFDDB0E0C170DCCB78 E7E1AAF7F6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D374DDD071E1D476E6D97E E8DA81D9CB75BFB05DBEAF5D857525C1B161F5E89AEBDE94D7CA7FD5CA7B807527CCC072E5DA8A E1D685E6DB8ADCD27ED7CD78DAD07CDCD181DDD186DFD485DDD27FD8CE78E0D67DE6DD82DAD176 DFD57CE2D881D7CD77E2D882E5D681E9DA85EFE08BEEE28CECE08AF1E58FE0D67FECE38CF3EC94 F1EA92EFE890EFE88FF9F298F2EB90EFE88DEDE68CE9E28AF4ED95DFD880E2DA85ECE48FE6DE89 EFE792E1D980E9E083EFE68BF3EA90F2E890EFE58FE8DE89E7DD88E4DA82EFE68CEBE287E4DB7E F2E88EF0E78FF5EB96F2E795E8DD8EF3E899E9DE90E5DA8BEDE392F2E894EBE18AEAE089E0D884 EBE390EDE591E6DE8BE8E08DEFE794ECE491E5DD8AE9E18EF1E995EAE28FE2DA88E6DE8CDCD482 DDD581E2DA85EAE28DE5DD88EAE28FEBE292E9E093F0E69CF1E89DF2E799ECE190EEE393F0E595 E8DD8CEDE291ECE191EFE493ECE190E7DC8CECE190EFE494EEE393F1E696ECE191F4E999EEE393 EBE091EFE495ECE193F0E597F4E99BF1E698EFE494EEE48EEFE58FF2E895F4E999F5E99DF4E89C F0E498F7EB9FF1E598FDF2A3F8ED9DF5EB9BF3EB9AF4EC9BF4EB9CEEE597F4E89AF4E899ECE08E EDE28AF3E78BF4E788DCD170F3E88CF0E68DE9DF86EBE189F2E890F2E891F8EE98F0E690EDE28F F2E795F3E895EDE290EFE492E9DE8CF4E997F9EE9EF4E999F6EB9DE9DD90F1E599F5E99DF3E79B EEE296EAE090EEE695F0E798E7DE8FE9E093F2E69CEFE399EEE096EEE193ECDE8EEFE08CF3E58F F4E895F0E897EEE695EFE796F3EB9AF8EFA0F9F0A2F2E99CEDE497F2E99EF5ECA1F1E79EF7EDA6 F8EEA9F3E9A4F2E8A1F3E9A2EDE49CF2E8A0F6EDA2EEE69BF5ECA0FDF5A8F6ED9EF3E799F0E899 DAD78C9898539EA1675256297378544A4A2A35320F0A05008F8955EFE8A9BDB56CF3EBA3EFE5A0 ECE29DEBE29BDED68F87813ECFCB908380530E0A002B2915312D0F5F5D365C5B31A4A678747642 A5A96DA1A461AEB067E0DF90D4CE7CD3CD77EBE28FEAE396F0E89DECE499ECE49BEEE69DEDE59C F3EBA3EFE6A0EAE19DEDE4A1EAE19EEDE3A1ECE1A0F5EAAAF5EAA9EEE4A0EAE09BE1D691D8CE88 E8DE96F4EAA2E7DD95E3DA8FE9E092E5DC8AE4DC88E5DD84F4ED92EDE588DED578F0E78CF7EC98 EBDE8FE9DB90F4E7A0E4D795F0E5A1ABA15AF1E8A1EDE69DECE8A1E6E2A1DCD99DEAE7B3848156 2B280C1A1904686639EDEBB8CAC79A76724C130D001A14021E1A0C44412F59583C53562A72773D 999957C3BF79DED791F6EFA5E3DD90F1EA9AF3EC9BF1EA99F3EA9BF6EDA0F5EC9FEEE59AF3EA9D F6EDA0F6ED9FF4EB9EF7EEA1FBF3A6FFF7ACFAF1A6F8EFA4FBF2A7FCF4A8FAF0A8FAF2B0FBF2B3 F8EEB1F5EBADF8EEB1FDF4B3FEF5B1FCF3AEEFE79DF6EFA2F6EF9FE9E293F7EFA7F9F1AAF8EFAC F9F0AFFEF5B5FCF3B5FBF1B3FCF3B1F8EFAEF9F0ACF5ECA8F7EEABFBF2AFFCF3AFF9F0ADF8EFAB FAF1ABF8F0A9F6EFA6F4ECA3F8F0A8FEF6ADFEF5ACFFF9B4FEF6B2FDF4B0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF2F0F0D3EEEECB F0EECAFAEDC8F9ECC7F0ECC6EBECC5EEECC7F7ECD1FFF0E0FFFBF8FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFF6EDFDEDD9F2ECCBECECC6EDECC5F4ECC6FCECC8F5EDC9EEEECBEEEECAF5F5DAFDFDECFFFFF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFAF5FEF0E0F6EED3F1EBCBFBE0C9F8E1C8F0E9C6EBEDC5EFECC8 F8ECD2FFF0DEFFFCE9FFFFF4FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF5F5FFEDEAFFECDFF9ECD3F0ECC9EBECC5 ECECC3EDEDBDEEEEBDEEEEC9F5EEDBFEF0EDFFF9FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFF6FAF6D9E4D07EE2C665EACF77F6E7B1FEFCE8FFFEF7FAF5E8EEDDB1E4C880DEBE67 E7DBA2F2F1D7FBFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D472DACE6CDCCF6F DCCF72D9CB72AD9E49C1B25EFFF09FD2C174968639DED085E0D38BD2C67EEDE196C8BC71D8CC81 D9CE7FD9CE7FE3D887E2D785E5DB88E7DC8ADACE82DCD088DDD184D6CB7BDBD17CE1D77FE6DC83 DED57BE2D87FE2D881DACF7BE3D985E9DA85EDDE89F1E28DF1E58FF0E48EEEE28CEEE48DF7EF97 F9F29AF4ED95F5EF96FCF59BEEE78CF6EF94F8F196F0E98FE3DC83F6EF96E7E088EFE891EFE892 F1E994F2EA95E7DF85E9E083EBE287ECE288ECE288EBE18AECE28BE9DF88E7DD84F4EB90ECE388 E9E082F3EA90ECE58EF0E994F2E998E8E090EDE597EBE196E6DD8FEDE695EEE592E4DD86E8E189 E8E08CF0E895EFE794EAE28FEBE390F1E996E5DD89E2DA87EAE28FF4EC99EBE390E4DC89E7DF8E DBD382E2DA87EBE38FEAE28EE0D885EBE392E9E091E0D78BE6DC94F1E7A0EFE498EADF90E8DD8E EADF90EDE293ECE192EADF8FEDE292E4D98ADCD181E5DA8BF3E898F1E696F1E695EADF8DF2E797 EDE292ECE192F4E89BF1E59AF5E99EF3E79FEDE199EFE396EBE18AF1E792FCF29EF9EE9FF0E498 EFE397F4E89CF9EDA2F6EA9DECE191E9DE8EF5EB9BF2EA9CF7EEA1F7EEA3F0E89BF6EA9DFBEFA0 F1E591ECE188EFE284F3E683ECE27CF5EB8CF2EA8DECE388EEE58AF6ED92F2E88FF8EE96F4EA93 F4EA94F7EE97F4EA93ECE18DEFE492FCF1A0FEF3A2F5EA9AF3E89AF7EBA0EFE399F5E99EF4E89E F0E49AEEE297F0E596F3EB98F1E998EDE495E9E193F2E69CF6E9A1F3E59BF4E69AF4E695F6E691 F9EB95F5E996EFE796EFE796F0E897F4EC9BF7EE9FFCF3A5FAF1A2F6EDA0F4EB9EF2E99DEFE59C FCF0AAFFF4B0FAEEAAF4E8A2F3E7A1F0E49EF2E69FF7EBA3F9EDA4FDF2A9FEF3AAF8EDA2F4EB9F F5EEA3EBE99FA5A7649EA26A656A3D636742242402252200292300D4CC8FE6DD96BEB669F0E49B EBDF9BAA9D5A6F6321625816978E50FDF8C0CAC79C1310001210024A4729797750737148999B6C 6466328B8F53B2B672D2D489E4E493D9D482EBE68DEBE38DEDE697F2EA9EEFE79CEFE79DF4ECA3 F3EBA2F6EEA6F5ECA6EEE4A0F0E7A4E3DA98EDE4A0F8EDA7F9EEA8F6EAA3F4E9A0F8EDA3FBF5A8 F6ED9FE7DC8FE7DD8FEBE091EEE394F8EEA2E4D78EE9DC8EF2E695EFE38EF6EC93E9DC83EFE28A F4E593EDDE90ECDD91F4E59DF7EBA2E5DA908B8234E2DA8BE8E28FDBD986E0DD8FCECE84BCBD7C BFBF869B9B678B8C53979854A6A5648F8E526D693A221D00362E19322A1B2C271350502F535624 6E753290924EC3BE7BD6D18AEAE49BDCD68BE3DD8EF0EA9AF4ED9CF3EA9BF6EDA0F6EDA0EFE69A EFE699F5EC9FF9F0A3F7EEA1F9F0A3FFF7AAF7EEA3F9F0A4FBF2A6FBF1A8FBF2A8FBF1A9FFFABA FEF5B6FEF4B6FFF6B9FBF1B3F4E9ACF7EEACFAF1ADF1E9A0F9F1A3FFFAAAF7F1A4F4EBA6F8EFAC F8EFADF5ECACFAF0B3FDF3B5FFF6B8FFF8B6FDF4B2FDF4AFF9F1A9F7EEAAFBF2B0FDF4B3FCF3B1 F8EFACF8EFABFAF1ADF6EDA7EFE6A0F3EBA5FEF6ADFBF3AAF8F0A6F6EFA2F5EEA1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FEFFFDFEFBF7FFEAD5F6E2BAE7E0A9DFE1A2E4E1A6F3E1B3FFE6C8FFF5EAFDFAF2FAFAF0FAFAEF FAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAF0 FAF9EFFCEBD8FBDEBCEBDFABE1E1A4E2E1A4EDE0AEFDE4C5FFF2E4FEFFFEFEFEFDFFFFFEFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFFFAF9FFE9EAF5E1CCE6E0AEDFE1A1 E5E1A7F4E1B3FFE7C3FFF6D2FDFAE1FAFAEEFAFAF0FAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEF FAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAEFFAFAF0FAF9EFFCEBE3FFDDD5FFDFC8F5E1B8E6E1A9 DFE0A1E5E5ABF3F3C8FFFFE7FEFEF8FFFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFBFAF1E8E9BBDFCE77DEB947EBCE72F8EEBDFAF2D3F2E3BDE0C06CDEBC63 E3C67CF4EACEFEFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCF71DACD6F DFD277E1D37BDCD07AA99D4ADCCF80D7CA7CE2D58866580DD1C37AE6DA92DED288D8CC82EBE092 D4C97ADFD485E6DB8CEADF90E7DC8BE5DA88DED47FD6CA7CDFD387DFD484DCD180E9DF8AE7DD86 DBD179E4DA81E5DB83E0D67FE5DB86E3D984E0D17CE4D580EADB86EFE38DF2E68FEFE48BD6CC75 EDE58DFAF39BF4EC95EDE590EDE590F8F09AF2EB93F8F199F6F199CCC56BCEC76DF0E98FF8F197 EEE78EF6EF97F0E991EFE68EF2E98EE8DE86E7DD86EBE18AECE28DF0E691F0E68FEDE38BF2E88F E6DD82EEE58AF3EC94E9E38EECE693F0E999E8E191EAE397E4DC91DFD88AE7E090E5DE8DE1DA88 EFE995E5DD8AE7DF8CE9E18EE9E18EE7DF8EE4DC8BE1D988E3DB8BEAE28FEDE592EAE28FE0D886 D2CA7AECE493E9E190D9D080E6DE8DE8DF8FECE394F4EB9EEAE195E7DE93EDE39BF1E69CF3E79B ECE094EADE93F3E899EBDF92E2D78AF0E595F1E697E7DC8DE7DC8DEEE394EADF90EFE494E7DC8C E9DE8FE6DB8CEEE394EEE296F0E499F4E8A0ECE098ECE099FAEEA4F0E590EEE28EF3E896F4E998 F6E99AFAEFA0F0E496F0E395F4E99ACDC272C7BA6BEDE292EFE699F8EFA2FAF1A4F3EA9DF4E89C F6EA9BF0E490F4E891F3E98BECE280E1D673EBE181ECE386EAE086F1E68CF7EE93EEE48AE6DB82 EBE18AF0E58FF1E58FF1E690F2E893F2E898F3E89AEDE495F7EC9DF9EDA0E9DD91F5E99DF4E89C F1E598EEE296F2E599F6EB9EF0E797EAE291EBE294E4DB8EEBDF95F3E69CEEE096F2E499F2E597 EFE391F1E28FEEE390EEE695F1E998F4EC9BF5ED9CF5EC9DF4EB9CF7EEA0FBF2A5F9F0A3F7EEA1 F6EDA2F0E69EFBF0A9F7EDA6F1E49EF0E59EF1E7A0F3E6A2F4E8A2FCF2ABFEF3ABF8ECA4F2E8A0 F6ECA6E7E09ADDDA95A3A463787A438C8F6047492243431D38350E2F2A00DED998DAD78FA9A053 F7EDA6EADE9D7E7031A29455B9B06FDBD392E2DEA1FFFFCF6A68420E0C003C3C1E6764437C7A55 7D7F507B7C486D6F31DADB96DCDB91DFDC8DE8E391EEE692EFE693F2EB9EF4ECA3EDE59CEBE397 EFE79CEEE69BF0E89FF4ECA4F0E8A0F6EDA8E8DF9CF5EAA4F5E99EF3E79BF3E79BF4E99BF1E696 DFD483E1D684F9EF9AF5EB96E9DF88E8DE87F1E496EFE198F2E497F3E697FCF19CF0E48FFAEB96 EFE38EEBDE8CF4E496F2E495EDDE93E5D98DFAF1A4898031C8C171E5DF8EDFDA86D8D681D6D483 95964AACAD689997599796559191457F7C34D2CE8F9F9B6A2C2604241E062D26143B36205E5C3A 595C29828746929350B7B26ED0CC85E5DF94DFD98BE9E292F1EA9AF2E99AF0E79BF5EC9FF6ED9F F1E898E7DE91EFE699F5EC9FF1E89BEBE295ECE396F4EBA0FAF1A7FCF2AAF8EEA8F6ECA7F8EDAB F8EEB0F7EDB0FCF2B5FFF8BAFEF5B5F9F1AFFFFCB8FFF9B2FBF2A9EDE699F4ED9FFDFBAEF8EFA9 FDF4B1FBF2AFF6ECAEF8EEB0FBF1B3FDF3B5FCF2B4F6EDACF3EAA7EDE4A1F2E9A8F9F0AFFFF6B5 FEF5B4FAF1B0F6EDABFAF1B0F6EDAAEBE2A0EEE5A2F8EFACF5EDA5F9F1A8F7EFA4F7EFA4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFDFFF9F3FCF6EAF8F5E4F5F6E3F7F6E1FBF5D8FFF2CEFFE7C8F3E3BBE6E3AD E3E3AAE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3AB E3E3AAE4E3ABF0DFBDFCDDD0F9ECDDF6F5E2F6F6E3F9F5E6FEF7EDFFFBF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF8F9FCF6F0F7F6E6 F5F6E3F7F6E0FCF5D7FFF1CCFFE6C0F3E3B5E5E3ACE3E3AAE3E3ABE3E3ABE3E3ABE3E3ABE3E3AB E3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3ABE3E3AAE4E3ABF1DEB4FEDEC2FFEDDEFCF5E8 F7F6E5F5F5E2F7F7E5FCFCEFFFFFF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF9FAEEECE7BCDFD07EDEC056E3B949E3B74BE1B64FDCB553 E7CE8FF5EBD1FCFAF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECE79 D2C36EDED280E1D586D4C97D82772DC6BC73EFE79EC1BB715E570CD3CA81DACE88C1B569CDC270 E1D781EEE48DE5DA86D9CE7FEADE90D9CE7FE3D984DED47CDFD57EE4D985DBD17AD9CF79DDD37C E0D67FE4DA83E6DC85E8DE87E7DD86E2D881DDD37CE1D27DE5D781E8DA82E7DC82EBE086F5EA90 C8BE65E8E087EFE890E5DC89EAE190F5EC9FF6ECA2F4EB9FEFE696F3EB97F2EB93E6DF85F1EA8E F4ED91F3ED91EFE88DEFE88EF0E791F0E594EEE393EADF90EDE293E8DD8CEADF8DEADF8CE6DC88 E8DE89ECE28CEBE18BE3DB88E6DE8CEFE796EDE495E9E091F0E799ECE396E4DB8EEFE699E6DD91 E6DD91EEE598E8DD8BEDE290F4E999EFE494E8DD8FECE193F0E497F0E596EEE393EBE08FEBE08E EBE08EEBE08FE9DE8FE4D98AE4D88AEEE296F4E79DF3E69BEDE195E6DA8CECE191F1E595F1E699 F7EBA2EFE39AE5D990EEE297EBDF95EBDF96F0E498F5E99DECE094E2D68BF0E498F9EDA4F1E59D EFE39AEFE398ECE094E9DD90EDE195ECE095F1E59BF2E69FF1E59EF5E99FF4E695EBDC8AF2E593 F7E997EFDF90ECDE8EF5E797F1E292ECDE8EF3E694F7E897EFE392F5EA9AF5E99AEFE495FCF1A2 FAEF9FF4E999F5EA99F9EF9AF5EC94E6DC81E2D97BF8EC93F7EB92EBDE86F3E48CFFF39BF3E690 F9EA96EEE08DEDE08CEEDF8DEEE08EF6E89AF7EEA6F4EBA3EDE599F2EA9CF5ED9CECE492F3E895 F5EA99F4E999F1E497EFE196F0E398F8EC9FF3E79AEEE196EEE296F0E498EEE296EEE397F2E69A F1E699F1E598F3E79AE8DF90E9E18FECE593F0E897F4EC9BF1E998EAE191EBE293EFE697F6EDA0 F8EFA2F7EEA1F3EB9DF6EEA2FBF3A9F2E9A2EDE49EFBF2AEF9F0ADEAE09CEAE19CF6EDA6FAF1A9 F7EEA8EFE4A6F0E7A8E1DC9B8582445C5B228C8E5B70714734360D292902100F00CCCD91E9E6A4 B9B26AEAE09DE5DA9C74692C978C4BD1C881F7F0A6ECE89EE5E49FDBDC9F70713E222205343419 383815706F446766328A884CA7A361DFDB91E2DC90F6EDA0E8DF91EFE59CF1E6A2E9DE9BF2E8A1 ECE299F2E89CF4EB9DEDE495E9E094EDE498F3E9A1F2E8A2EEE49CF6E8A0F3E59CF3E59BFBEDA1 FBEEA0E5D888E2D684F9ED99F7EB95EBE087EADF86F4EA90EDE48CE2D980E7DD85F1E78FEFE58E EFE48EF2E893F6EB99ECE091E3D888F0E595F1E89BF0E8A0AAA25CA59B59F3EAA6E8E097ECE695 EEE896EAE491DBD487DAD28EC3BB76D0C77FDDD593F6F0B6A9A3771A15031915042F2B1629270E 54533154532779784686864BAFAC68CECA80EBE694F8F29CEEE58FE7DD8DEEE296F2E59CEFE599 F1E899F5EE9CF6F0A1F0E89DF4ECA2F5EEA0EEE699F3EBA0EEE69EF8F0A8F8EFACF7EDAEFAF0B4 FAEFB4F9EEB8FEF3BCF9EFB4F9EFAFFAF1AEF4ECA5FEF6ADFBF3A9FFF7ACFBF3AAF9F0A8FEF6AE FCF4ACF9F0AAFCF3AEFAF1ADFCF3B2FFF8B9FDF4B7FEF4B8FFFABFFEF3BAFBF1B8F4ECAEFAF2B3 FFFBBDFFF9BAF9F1B2F8F0B0FDF5B6F5EEADF1E9A9F5EDADF7EFAFF3EBABFFF9BAFFF7B8FCF5B3 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFDFEFEFDFEFEFDFEFEFBFFFEEFFFFAE2FFECD5F5E8C7 EAE8BCE8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9 E8E8B9E8E8B9E9E8BAF3E8CFFEEAE7FFF7F6FEFEFCFEFFFDFFFEFDFFFEFEFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFE FEFEFDFEFEFDFEFEFAFFFEEFFFF9E1FFECD4F5E8C6EAE8BBE8E8B9E8E8B9E8E8B9E8E8B9E8E8B9 E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E8E8B9E9E8BAF4E8C5FEEAD4FFF8F0 FFFEFCFEFEFDFEFEFDFEFEFDFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6E5EBE8BBE7D588E8C765E8C460E8C769 E8CE80F2E5BCFDFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D7CB64CEC160DFD479E3D885D8CC80706621E6DC9CC2B77E615820716A32EDE4A9E1D792E2D98C CBC36FC9C168DED67CE4DC87D2C879E1D88BE1D88AD5CC79DCD47BDDD47BE1D780DDD37CE0D67F E2D881DDD37CE2D881E6DC85E9DF88E9DF88E4DA83DDD37CEEDF8AEEE08AEDDF87E7DD82E9DE83 EBE086EDE489F4EC93EEE88FE7DF8DEBE292EEE598EDE39AF2E99FEAE192E8E08DF3EC94F8F197 ECE68AEEE78CEDE68BEDE68BEBE48CEDE491EBE091E5DA8BECE192F6EB9CEADF8FE9DE8DE9DE8C E4D987E8DD89EBE18CE8DE89E1D988E7DF8EEEE695E7DE8FDFD687E7DE8FEAE194E1D88BEBE295 E4DB90E5DC92F0E79AEFE491EFE492F3E898F0E596ECE094F1E599F8ECA0F3E89AEDE293E8DD8C E5DA88E5DB86E9DF8BEBE08FE9DE8DE8DD8EEFE397F3E79CF0E498ECE194EBE090F1E696EFE493 EDE194EADE93ECE096EBDE93E3D78CECE094F7EBA0F3E899EEE394EADE90E8DD8FF0E497F1E59E F1E59DEEE299EDE197EEE396F0E595F4E99BF1E598F2E69AEDE198EBDF97F1E59BF1E192F2E392 F7E897F2E392EDDE8DEEDF8EF4E594F6E796EFE08FF8E998F9EA99ECE08EECE08FF1E694F6EB9B F8ED9EF4E99AEFE495EFE494F5EA97F8EF98F0E68DE8DE85F2E48CF9EB93F5E78FF3E58FF9EA94 F1E18CF0E18FEFE08EF5E695F8E998EEDF8EE6D88AF2E9A1F3EBA3F0E89EEFE99AEEE695E7DE8B EFE491F1E695F2E797F3E698F6E89DF8EA9FF1E599F1E599ECE094E7DB8FE9DD91F0E498F0E498 EADE92EDE195F3E79BF4E89CEDE395EEE596EFE696EFE697F4EB9CF2E99BF4EB9DF2E99BF0E799 F1E89BF6EDA0FCF3A7E9E292EDE597F1E99EF0E8A0EFE7A2FAF1AEFDF5B2F1E8A6E8DF9AEBE29C F0E89FF2E8A4EBE0A3FFF6B9CECA89726F2F86854B8D8D5B6A6B424A4A242B2C0B000000ADAD76 E7E6A4C2BD74D6CE89F7EFADBDB474B2A966C4BC74CBC579F4F0A5EDECA8ABAB6F6D6E3B1A1A00 55543C4A4A284A481F6A693589874A87813FEBE69CEFE99EE8DF92EAE195F4EAA2F4E9A8EFE4A3 F7EDA6F0E69DF5EC9FF3EA9BEEE596EFE699EBE295E9E096EDE39CF2E7A0F6E7A1FAECA3F5E79D F5E79CF8EB9DFAEE9DFCF09EFAEE9AF6EA94F2E78DEFE48BEADF86E9DF86EBE188ECE28AECE28B ECE28BF3E993EEE38FECE18FECE191EADF8EECE293EDE497EDE59CC7BE7BAAA160F0E7A3E4DB93 E1DA8BEFE895ECE693DED787E8E097E3DB93E5DD93DCD391DAD49CA29C712F2A0B2F2C143C3A24 3D3B224C4A2A46441C6F6E3F7F7D45A5A25ED5D186EDE895E9E38BE7DD86EFE493F0E499F1E49C F3E99FF8F0A0FCF6A1FBF4A5F4ECA1EEE69BF2EB9DF6EFA1EFE89CF3EBA2F8EFA9F9F0ACFCF2B4 FFF5B9FAEFB7FAEFB9FCF1BCFCF2B7FEF5B6FAF1AEF1E9A0FDF5ACF4ECA3F7EFA6FAF2AAFBF3AD FFF8AFFEF7AFFCF4ACFBF3ACF6EDA8F5ECABFCF3B4FEF4B7FDF3B8FEF4BBFAEFB7FBF0B8FCF3B6 FCF4B3FCF4B3FAF2B1F9F1B0F9F1B1FCF4B3FAF2B1FBF2B2FEF9B8FFFBBAFEF6B7FCF3B8FBF3B6 FAF2B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFEF8FFFAF4 FCF9F0FAF9EDF9F9ECF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9ED F9F9EDF9F9EDF9F9ECF9F9EDFCF9F3FFFAFAFFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFEF8FFFAF4FCF9F0F9F9EDF9F9ECF9F9EDF9F9EDF9F9ED F9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9EDF9F9ECF9F9EDFCF9F0FFFAF4 FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBFAFAEEF9F4D5F9F0BFF9F0BC F9F1BFF9F3C7FCF9E2FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE1D764D6CB60E6DB7BE8DE86E0D488817736E4D9A24C4211776C40F8EFC7DBD0A0E5DB98 DBD288CFC774C3BB63AEA74ED3CC77DAD181D8CF84D6CD7FD7CF7DCEC76FD4CB74E2D881DDD37C E2D881E5DB84DDD37CE3D982E4DA83E4DA83E0D67FDDD37CD8CF77F2E38EF3E58FF4E68EF1E68C EEE389EBE086F0E78CEEE68CEAE38BF0E895F6ED9DF2E99CF6EDA2F8EFA2EDE495E5DD8AEDE68E F7F096EAE388E4DD82E2DB80E5DE84E7E088E6DD8AECE192F3E899EFE495EEE393EDE292EDE291 EDE290E8DE8BE6DC87E4DA85E5DB86D7CF7BDBD382EAE291EEE596E5DC8DE1D889EBE295E0D78A E9E093E0D78CE0D78DEBE295E5DA87E7DC8AEFE494F1E697F0E497F3E79BF4E89CEEE395ECE192 EADF8EEADF8EE9DF89E9DF86ECE28BECE28DEADF8EEBE091EFE397F1E699EEE393EADF8FEBE090 EDE290F3E899EFE495EADF90F1E697F4E99AEDE293F3E899F1E696F1E696F2E798EDE292E6DB8C E2D68CEEE298F3E79BEFE497EEE393EBE090F2E797F6EB9BFBEFA3F6EA9EF0E49AF2E69BF4E696 F7E897F9EA9AF7E897F1E291EEDF8EF0E190F2E392E7D888F3E493F6E897ECE18DEDE38EF1E792 FAEE9EF5EA9BF0E697F0E596EDE293EDE292F2E894F1E790EAE08AF0E58DF5E790F2E48CF1E28D F4E590ECDE89F3E491F5E694FCED9CFFF09FF3E493E3D687E4DB93EDE59DF3EBA0F3EC9EF2EA99 F0E895EFE392F0E595F0E495F0E395F4E69BF6E89DEFE397F1E599F0E498EADE92EEE296F4E89C F1E599EEE296F0E498F4E89CF5E99DF0E699F2E99BF2E99CF0E79AF6EDA1F8EFA3FEF5A8FCF3A6 F6EDA0F0E79AF1E89BF4EB9FEFE89AEFE899EFE79BEDE59DEEE6A0F3EAA7F1E8A5F7EEABF3EAA5 EFE6A0EEE69DEDE49FEDE2A5F0E6A8C4C07FA5A2618D8C528F905E69694240401C2D2C09141300 838251F0EEAFCECC7FACA55EDED691FFF8B5E1D892CFC77D9C964AD3D088E3E2A0888750353508 21210374745B6565433F3D154C4C186A692C9F9A58DED990EBE599F3EA9DF4EB9FEAE098F1E6A4 F0E5A2F5EBA4F0E69EF4EBA0EFE699F4EB9CF7EEA1EEE598E2D98EE9DF97F3E8A1F3E59EF7E9A0 F2E49AF1E398F3E698F2E597F1E594F0E492F2E692F5E994F6EA94ECE289E7DD85EDE38AF3E992 F2E891F3E992F3E994EFE590ECE18FEEE393F3E797F5EC9BF2E99AEEE69AC7BE78817835E7DE9A E4DC94DED786E9E38EE7E18BD7D080E3DC91E5DD94D8D082D0C782C5BF85A0996D2823031E1B03 35331D38361D45442453512C6F6E4179774093904CCCC97EEFEB98EAE58DE9DF88F5EB9AF3E79B F2E69EF6EDA2F4EC9CF2EC97F0E99AF2EA9FEBE398EEE799FCF5A7F6EFA1F5EDA2F8F0A7F9F0AC FFF6B5FFF9BBFBF1B8F9EEB8F7ECB7F9EFB4FDF3B6FAF1AFF4EBA6FBF3ACF3EBA3F3EBA3F7EEA8 F5ECA7F4EBA5FAF2AAF8F0A8FAF2ABF7EEA9F6EDAAFAF0B1FAF0B2F8EEB1F6EBB2F5EAB2F8EEB5 FAF1B3F7EFAEF5EDACF8F0AFF9F1B0F9F1B0F7EFAEF8F0AFFDF5B4FFFAB9FFF9B8FCF4B4FEF5BB FDF4BAFCF4B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFF4 FFFFF3FFFFF2FFFFF2FFFFF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE0D668D6CC64E4DA7CE5DB87E1D68D8A803F584E15786F406C64355F562CBBB280 DED494D9D086C6BE6CC4BC65BDB65EA59D4ACEC577DDD489DAD184E3DA8BDCD47FD5CC75E3D982 DBD17ADCD27BE0D67FE0D67FDED47DDBD17AD9CF78D9CF78DCD27BDED47DEEDF8AF0E18BF2E48C F0E58BEBE086E6DA80EFE78BEFE78EEFE890F5ED9BF6EE9DEDE496F2E99EF4EB9EF4EB9CF0E896 F1E993F6EF95F0E98FE2DB82E0D97FE8E187EBE48DECE290F0E596EFE494F1E696F4E999EDE290 E7DB8AEADF8DECE28DE7DD88E6DC87EEE48DE9E18DDCD483DDD684ECE394EDE495E4DB8CECE396 E5DC8FF1E89BEBE297ECE398F7EEA2E4D986E5DB88EEE393F1E798EEE296EFE397F2E69AECE193 EBE091EEE392EBE08FE8DE86E7DE83EBE287EEE58BF0E591F0E594F1E697F1E697EEE394E9DE8E E5DA8AECE18FEBE08FF7ED9AF7EC9AEADF8EF3E896EFE493E5DA89E5DA88E5DA88E8DD8CECE190 EADF8FECE094F4E89DF1E697EFE595F6EB9AF6EB9AEEE392EFE494F0E596ECE192F0E499FCF0A4 EEE192EDE091EEE192F1E596EDE091E5D889E9DC8DE7DA8CE1D485EADD8EEDE192E9DE8AEBE188 ECE28DF3E896F3E898F1E697F7EB9FF9EDA0F5E99BF4E99AF7EC9BF4E997EFE38FE8DC86E3D881 ECE18CF7EB97F4E994F8EC9AFAEE9CFAEE9DFAED9EF7EA9BEFE495E7DD95ECE49BF4ECA1F6EFA0 F4EB9CF5ED9CF3E898F2E797EEE393EBDE90EBDD92EEE095ECE094EBDF93EEE296ECE094F0E498 F3E79BF0E498F6EA9EF5E99DF1E599F4E89CF3E99DF6EDA2F4EAA0EDE49AEFE69BF1E89EF7EEA3 FAF2A6FAF1A6F5ECA1F2E99EF4EB9FF5EEA0F8F1A3F5EDA2F2EAA2F6EEA8FAF1AEF4EBA8FCF3B1 F5ECA7F3EAA4FCF4ABFDF7AFF6EBACF1E8A6D2CD8ACCC98766652A9898669E9E786A6949464525 292607393714E4E4A7EAE999C7C37AB1AB63DFD790EBE59CF2EB9F8F893DC4C078DCD89C585524 3C3A15302F132C2C1335341388865E6564316B6A2DA49F5DCECA80F2ECA0EAE093E1D88CFDF4AC EFE5A1F1E7A3F4EAA3EFE59DF7EEA3EFE699F2E99CF5EC9FF0E79AE9E095EFE59DF7EDA5F7EBA3 F9EDA3F7EBA1FAEEA3F8ED9FEDE393ECE190F6EB99F6EB97F2E993F3E995EEE48EE2D881E3D982 EEE58FEFE590F0E791F8ED9BFAEF9DF5EA98F0E595F3E898F4EB9BF0E998F8F0A3D4CC84706723 EFE6A2F2EAA1E7E08FE6E08AE5DF89DDD684E6DE92E3DB8EDED686D5CD82D1CC8DBDB88835310F 1B1801211F0C242209424022605E39605E357A78428E8B47B3AF64E1DC89EAE48CF2E891F7ED9C F2E69BF7EBA3FDF3A9F3EB9BECE692F0E89BF8F0A7F6EEA3F3EC9EFAF3A5FAF3A5F6EEA3F8F0A8 F9F0ABFDF4B3FFF7B8FAF0B4F9EEB9F3E8B2F4EAAFF6ECAEF6ECAEF8EFADF5ECAAF5ECA8F7EEAA FDF4B0F8EFACF4EBA6FCF4ACFBF3ABFEF5AEFAF1ACF9F0ADFAF1B0FBF1B3FAF0B3F5EBAEF5EBB0 FBF1B6F5ECAEF3EBABF7EFAEFAF2B1FAF2B1F8F0AFF9F1B0FAF2B2FDF5B4FEF6B5FCF4B3F8F0B0 FFFBC2FFF9C1FFF7BDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFDFFFFFDFFFFFDFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE0D37AD8CC78E0D484DFD388E0D68F635A21898146D0C888D3CE8F9B9759 4B4509C2B879D1C981CCC575D1CB74A19A43A9A24E8E8638C8BF75ACA4596B6415BEB765CDC46F DED47DD9CF78D4CA73D6CC75DAD079E1D780E1D780DED47DDBD17AD9CF78D6CC75EFE08BEADB85 E8DA82E9DE84EDE288EEE389E4DB80ECE48AECE58DEDE592ECE393E7DE8FF9F0A3F8EFA2F9F0A1 EEE694E8E08CEEE690ECE58EE1D984E3DC84ECE58CE9E28AE9DF8CEEE393E7DC8CEDE291F9EE9C EFE492ECE28EEFE590EEE48FF1E790F5EB95F7ED97F9F09DE7DF8EE0D887EDE495EEE596E7DE8F F0E79AE8DF92F3EA9DE7DE93E3DA8FE7DE91E6DB88DFD582E3D888E6DB8CE7DB8EE9DD91F2E69A EDE294EEE394F0E594EBE08EE3DA81E2D97BE4DB7EE7DE83EAE088E9DE8CECE190EBE090E9DE8E F2E797F2E795F0E593E9DF8BF1E790F4EA94EDE38EF1E790F0E692D3C975E5DB87F5EB96F3E994 EDE38FE3D887F4E99AF5EA9BE9DE8FE5DA8AEADF8DE2D883EBE18CE9DE8BE5DA88DFD485E4D98A F4E99AEFE293F2E596EEE192F1E495F4E798EDE091E8DB8CEADD8EF3E697F5E899F3E697F0E590 F1E78EF4EA93F2E794F6EB9BEFE495EFE396F8ECA2F8ECA1F3E79BF4E99AF0E596ECE08CE6DA86 E3D783E9DD8BF2E694F7EB99F5E899FAED9EF4E799F0E395F8EB9DFCEFA3F2EA9FECE49CF1E99E F4ED9FF1E99AF2E99AF1E696F2E797EFE494EDDF90EBDE90EEE194EEE296E2D68AE9DD91EADE92 EDE195F1E599EFE397F1E599F1E599F1E599F4E89CF1E69DF5EBA4F5EBA3ECE29BEEE49BF0E69E F1E79FF6ECA4F9EFA6F5EBA3F5EBA3FBF2A8EBE596F5EEA0F2EA9EEDE59DF5EDA7FDF4B1F6EDAA F9F0ADEAE19CEBE29CFAF2A9FDF5AEF7EDACFBF2B0E1DD97C8C58285854992926160603A525133 39371B403D1D1B1903BBB980D2D385EEEBA1A4A057A4A057FDF7ABF4EDA0868033CECB85ECE7AD 24200016120329260E1919044848268B89606A6935605F21A7A260B7B268ECE69AF4EA9DE7DE92 F4EAA2F1E7A1F3E9A4F3E9A2F1E79FFDF4A9F5ECA1EEE59AF0E79CF1E89DF2E99EF1E89DEFE59B F2E69EF8ECA4F5E9A1F5E9A0F6EA9EF3E79BF3E899F5EA9BF1E696EBE08EECE190F4EA96EFE58F EFE690F5EA97EEE391F2E795FBF09EFAEF9DF2E795F2E795F5EA98ECE391E5DD8BF2EB9CEDE59C 766D28DED591EFE79FE6DF8EE4DE88E6E08AE1DB88E9E193E7E090E2DB87D2CA7EDED997D8D3A1 3E3A17211D02302E193230194A492B565331424018716F3A817E3AA4A055E0DB89EDE78FF0E68F F7EC9BF3E79BFAEEA6FBF2A7EDE494EAE48FF1E99DF1E9A0F8F0A5F9F2A4F3EC9EEFE89AF4ECA1 FAF2A8F9F1A9F9F0ADFBF2B1F7EDAFFDF1BAF9EEB7F9EFB4F1E7AAEEE4A6F5EDABF3EAA9F8EFAE F7EEACFBF2B1FCF3B1F5ECA8F1E9A2F3EAA5F8EFAAF5ECA6F4EBA8F5ECAAFAF1B0FBF0B3F3E9AB F5EBAFFBF0B3F7EFAFFAF3AFFEF7B3FCF5B1F9F2AEFAF3AFFDF6B2FDF6B2FCF5B1FBF4B1FCF5B1 FDF5B5FFFAC1FFF8C1FEF7C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDCCF83D7C980D6CA83D5CA85D3CA85554C09B2AB67E4E099DBD78F E7E59B817B3970672CE3DA95D3CC7EE2DC85DED880BFB9657E772991893F978F45554D0DC5BE6E C7BE6BDAD079D8CE77D4CA73CFC56ED6CC75DAD079DDD37CE3D982E1D780E1D780DBD27ADFD07B D9CA74DACC74E2D77DEBE086F2E78DDDD479EBE389EEE78FEEE693F2EA99F5EC9DF0E798F5EC9D F7EE9EEBE392EAE28FF0E896EFE793E8E08BEEE691F3EC95E8E18ADED581E8DD8CEEE393EADF8E EDE290F2E794F3E995EDE38EE7DD87ECE28BEFE58EEBE18BEEE693EAE291EDE594F4EB9CF0E798 E7DE8FE9E093E4DB8EEFE699E8DF94E6DD92E9E094E9DE8BE0D583DFD484E7DC8DEDE194F2E69A ECE094EDE193EEE394F1E695ECE190E7DE85EDE485EDE486EBE288E8DE87E4DA85E9DE8DE6DB8B E6DB8AF9EE9DFCF19FF4EA97EDE38CD9CF76D8CD76F0E68FF0E68FE1D780DED47EECE28DEEE48F E0D681DFD480E5DA87DED384EADF90E7DC8CEFE492F0E692E2D883E6DC86E9DF8CECE18FE3D888 DED383E3D889EDE091F3E697EEE192EDE091F5E899F3E697DFD384E5D98AF8EB9CF5E99AF1E495 F1E692F4EA91F7ED96EEE390EDE292E1D687E5D98FF7EBA1FDF1A7F7EB9FF4E89CEFE495F7EB9A F8ED99F7EC99F3E795F2E694FBEF9FF1E495F8EB9CF0E396EBDE90F6E99BFDF1A5F5EDA2EBE398 EEE69BF2EB9DF1E99CF3EA9BEBE091F0E596F2E797F1E495F0E394F3E698F2E69AE3D78BEADE92 EADE92EBDF93F2E69AEEE296E7DB8FEBDF93F1E599F1E599EDE39BF3E9A4F5EBA6F2E8A1F4EAA4 FBF1AAF3E9A2F6ECA4F8EFA6F4EAA2F3E9A1FAF1A7ECE597F8F1A2F5EDA2EDE59DF3EAA5FEF5B2 F6EDAAFCF3B0F2E9A4EFE6A0F5EDA4F3EBA3FDF3B2F8EFABDEDA93B3B06BA8A8698B8B5765653E 59583A413F235E5A3F191602555527DDDD95E7E7A1E5E29CC8C47CD0CA7EEDE897D8D284ECEAA4 D8D39D77724B19150138362236361C5454324C4A22868652807F41A19C5AB9B46BF3EEA2F5EB9E EAE195EEE49BF0E6A0F1E7A1F2E8A1F1E79FFDF3ABF8EFA4F3EAA0F1E89DF3EA9FF5ECA0ECE398 E5DC92F1E59DFAEEA6F4E8A0F1E59BF5EAA0FAEFA3F7ECA0F2E69AEFE496F1E696F5EA9BF8ED9C F5EB96FBF09EF6EB9AE9DE8DEEE392F1E694F1E694ECE18FF4E997FBF09EECE390EDE590EEE796 FCF5AB7D732FC2B976E9E19AECE597ECE591EFE993E4DE8BECE595EEE796D5CE79C5BE6FE5E09E E4DEAC3F3B15120F0026240D35331C4D4B2E4A47254341196E6C37716E2AA7A359EFEB98F1EB93 E9DF88F5EB9AF7EB9FF7EAA2F3E99FE2DA8AE4DE89F5EDA1EDE59CF8F0A5FDFCAEFAF3A4F2EB9C F1E99EF9F1A6F8F0A7F4EBA6F5ECA9F7EEACFFF6B9FFF6BBFFF6B9F3E9ACECE2A5F2E8ABF6ECAD FAF1B0F2E9A8F1E8A7F5ECABF2E9A5EEE69FF2E9A4F8EFAAFAF1ACF9F0AEFAF1AFFEF6B4FFF9B8 FAF0B2FCF2B4FFF7B8FEF6B5FFFAB6FFFAB6FBF4B0F7F0ACFCF5B1FCF5B1FBF4B0FAF3AFF8F1AD FAF3AFFFF8B6FDF6BBFCF5BEFDF6BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBBE6FD5CA7DD6CA81E0D690C4BB786C6425D3CC8CC9C383 C9C684ABA766746F32483D11B8AF6DC4BC71C9C36ECDC76FC9C26EBBB465877F368A823ACDC57C D6CE84CDC573E0D67FD9CF78E2D881DDD37CDAD079DFD57EDAD079E1D780D7CD76DCD27BD4CA73 D7C873DDCE78ECDE86F2E78DEFE48AF0E58BE7DE83EDE68CF1EA91EBE390ECE493F9F0A1EAE291 EBE392ECE493EAE291F5ED9CF1E998F6EE9DE8E08EE2DA86EAE28DE8E08BDFD682E8DD8BF3E896 ECE18FEBE08FF0E690EFE590F0E690F3E992EEE48CE6DC83F0E68EF1E995EDE594E6DE8CE6DD8D EBE293EDE495ECE396E7DE91E5DC8EEAE196EDE49AEEE598ECE18EEBE08EE6DB8BEADF90EEE296 E9DD91E9DD91F6EB9CE9DE8FE5DA89ECE08FE7DD85DCD376E8DF83EFE58CF0E690EDE390F1E695 E8DD8DF0E593F2E795E9DF8BF8EE99D4CB72D7CF74EEE58AE9DF85DFD57CE4DA83E4DA83E6DC85 E9DF89E8DD8BE8DD8BEBE08FEDE393EADF8FE0D585EDE291F1E694F4EA95EFE590EDE38FEADF8D EBE090F1E797F7EC9DE2D788E7DC8DECE192F1E697F6EB9CF6EB9CEFE495EEE495F1E697F2E798 F5EA9BF3E996EDE38CF1E790F4E997ECE191F1E598F2E69CF4E89EF7EBA1F6EA9EF4E89DF4E89B F1E696F6EB9AF8ED9DF2E797EEE393F0E596FBF1A1FAEFA1F2E69AF1E599F6EA9EF3E99EF3EA9E F6EEA2F0E89DEFE79CF4EB9EF3EA9DEFE396EFE495EEE394F2E595F7EB9AF8EB9CECE194F1E599 F3E79BEDE195ECE094F1E599EBDF93E9DD91EEE296ECE094ECE095F2E8A1F6EBA8EDE39DEFE5A1 F0E6A0F9EFA8F2E8A0F4EBA1F7EEA3F6EDA2F4EB9EF3EA9EF4ED9EF2EB9CF4ECA1F1E9A1EFE7A1 FBF3B0F9F0ADF5ECA9F6EDA8EEE6A0E9E198F1E9A1FBF1AFF3E9A5DDD990C4C27AACAD6BB5B67F 696B403D3C1D3A381D524E344B472A1413009E9F64F5F6B7F0EFAFB3B06CCDC97ED3CE7FEFE99B E4E09BF1EBB6C5C09A4D472E25230F2F2F163636144A481F868552888649ADA866B9B46BF4EEA3 EEE598F1E89CF0E79DEBE19AEDE39CF5EBA4F5EBA4F1E7A0F8EEA7F7EDA6F6ECA3F0E79CF4EB9E F8EFA2F6EDA1F5EBA3EEE49CEEE49DF3E9A1F4EBA0F5ECA1F4EBA0F5ECA1F8EFA3F2E99BEBE296 F0E596F2E796F8ED9DEEE393F0E596EDE292E7DC8AFEF3A1FAEF9DF7EC9AF7EC9AEFE794F1E994 E6E08EFDF5AB958C499B9251EEE59FE7DF94E8E291EAE48FE2DC88EBE494ECE595DED780C6BF6F DED997DDD8A4605C361310002F2D143E3C245554354E4C2763613885844E878541B7B369EBE693 E7E189EFE58FF0E695FDF1A5E8DC93F0E69CEAE192F1EB97F9F1A5EBE39AF0E89EF0E99BF2EB9C EFE898F4ED9FF1EA9DF6EEA4F4ECA4F2E9A3FAF1ADFCF3B2FCF3B3FDF2B5FDF3B5FAF0B3F8EEB0 FEF4B6FFF6B5F5ECABF3EAA8F6EDAAF6EDA9FBF2ADF9F0ABF9F0ABF9F0ABF8EFACF7EEABF9F0AD F9F0ADF9F0AEFAF1AFFCF3B2FBF3B0FBF4B0FCF5B1FCF5B1FBF4B0FBF4B0FAF3AFF7F0ACFCF5B1 FBF4B0F5EEAAFDF5B3F8F2B5F9F2B9F8F2B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCAC25FD9D073D8D17BD5CD82CCC380595015C5BE89 E6E0B0A29A6D524D1F150E00342A0AB9B072CDC67CC8C46EC7C36AD0CB76C5BF7098924879712B BDB66FDFD88FDAD282E0D67FDCD27BDFD57EEAE089DFD57EDBD17ADED47DDDD37CE6DC85DFD57E D8CE77E4D580F3E58FF5E68EEBE086EFE48AF4E98FECE388E8E086F3EC94F2EA97EDE595F9F1A0 F4EC99EFE794F7EF9EF0E797F8EFA0FCF3A4F2E99BE9E091E9E18FF6EE9BF8F09BEEE591EDE290 F1E694EDE38FECE28DEAE08BEFE58EEBE18AEBE189F0E68DEDE38AE6DC84F1E995EBE392E3DB8A E3DA8BE6DD8EEAE192E3DA8DE3DA8DE5DC8FEBE297EFE69BF0E79BF1E693F4EA98EFE494EDE293 EDE295EADE92EEE296F6EB9DEDE293E7DC8BE9DE8CE5DB83DBD179E1D780ECE28BF2E794EFE492 ECE191E7DC8CEFE492EDE390E5DB84E2D880CDC469EBE286FCF398E9DF85EEE48CF2E891ECE28D EBE18CE9DE8CEADF8FEBE090ECE191E4D88BD1C679EFE494E9DE8EF8ED9BF3E896E6DB89EDE291 ECE191E7DC8DEDE194F5E99DEDE293EEE394F2E798F5EA9BF0E596EBE091EFE495EFE495EFE495 F2E798F3E899F1E694EAE08BEDE38EF5EA99F6EB9CF7EB9FF6EAA0F3E79DEFE399ECE095EDE393 F5EA9BF2E798F3E899F3E899EDE293EBE091EDE195F5E99DF6EA9EF3E79DF5E99FF8ECA3EEE59A F6EDA0FAF3A4F6EFA1F4ECA1F7EEA3F5ECA1FDF0A6F1E698EDE293F2E594F5E997F4E997EDE295 F5E99DFBEFA3F3E79BECE094EBDF93EBDF93F5E99DF8ECA0F0E498F1E599EFE59EF8EDABEFE5A0 ECE29CF4EAA3F6ECA5F7EDA5F7EEA3F5ECA0F1E89BF2E99AF5EC9DFBF4A4F1E99BEDE599F0E8A0 F7EFA9FFF9B6F7EEABF5ECA9F9F0ABF9F0AAF5EDA4F5EDA5F8EEACE3DA96D2CF85CCCA7FBEBE7A C1C3897F81523E3E1A3735173B371A524F301C1B032F3104A9A976FFFFC9CDC98AD5D189D4D083 F0ED9EF1EDA7F0EBB57C77522B260D2E2C1731311825250555532A84834F7F7E40AEA967CEC980 FCF6ABF0E79AF2E99DEBE297EBE199F0E69EF8EEA6F7EDA6F2E8A3F4EAA3F4EAA2EFE59DE8DF93 EDE497F7EE9FF7EFA2F4ECA2F2EAA1F3EBA2F3EBA2F1E9A0F1E9A0F5EDA4F9F1A8FCF4ABF2EA9F EEE69DEBE094F2E798FAEFA0F2E798FDF2A3F4E999EBE090F4E999EFE492F2E795ECE18FECE391 F5ED98EAE492FFF9AFC0B67683793BFBF3B3E8DF98EDE698F5EE9DEDE695F0E999EAE393EEE791 E9E292E5E09EDFDAA7605C361F1C003C3A213B39205654345B58334C4B1E78763F93904CBDB96E E2DD8AF9F39BFBF19AEDE392F4E89CE7DB92F2E89EEEE595EFE996EFE79CEBE39BF6EEA4ECE597 EBE496F4ED9DFAF3A3F5EE9FF7EFA3F8F0A7F5EDA4F6EEA6F3EAA5FAF1ADFCF3B0F8EFAFF5EBAD F5EBADFBF1B3FCF2B2F5ECABF5ECA8F8EFAAF7EEA9F7EEA9F9F0ABF6EDA8F5ECA7F8EFABFDF4AF FAF1ACF7EEA9FAF1ACFDF4AFFAF1AEF7EFA9F8F1ABFCF5AFFDF6B0FEF7B1FFFAB4FFF8B2F9F2AC FAF3ADFCF5AFFAF3ADFCF5B0F7F2B2F6F2B6F7F3B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5CF62DDD672D8D177D2CA7CE1DA976A6133 1C1500534C2F4D462C302A13281F06887F4AE6DEA0D0C97FC1BD67C3BF69D2CE79CCC677B1AB62 A29B5579722DC0B973E1D989D5CC75D7CD76D2C871D7CD76DED47DD4CA73E2D881E2D881EEE48D D7CD76CFC56EE4D580ECDE88F5E68FECE187E8DD83F1E68CF6ED92E9E288F6EF97F5ED9AEAE291 F3EB9AF2EA96EBE38FF5ED9AE8DF90EDE497F8EFA2F1E89BEEE598EFE697F5ED9AEBE390E2D985 E8DD8AEBE08EF0E591F2E893EFE58FEEE48EE8DE87E4DA81EAE087E7DE84E3D980EBE38FE9E190 EAE291EBE293E3DA8BDED585EAE194E7DE91E5DC8EE4DB91E7DE93EAE195EADF8CF2E896F0E595 EADF90EADE91E8DC90F1E599F8EC9EF2E798EEE391EEE391EDE28EEEE490F0E594F8ED9CF8ED9E EBE092E6DB8CEEE393EADF8CE6DC86DED47BC3B95FD7CE73E6DD81E1D87EE2D980E6DC84EAE08A EBE18CE9DE8DEADF8FEFE494EFE496E9DD91F1E59BE4D88DF4E89BF5EA9BEEE393F2E796F1E694 F3E899F4E99BF4E99BF6EAA0F7EBA1EEE396EFE596F6EB9DFAEFA1F0E697E8DD8FEFE496EFE596 ECE293F0E597F2E799F0E595EEE391EBDF90F1E697F5E99EF0E49AF7EBA1F7EBA1F1E59AEEE294 EBE091F2E798F2E798F2E798F2E799F0E597F1E799F6EA9FEEE397EFE499EFE49AF7EBA2FDF1A9 F6ECA3F4ED9FFBF4A5F8F1A3F6EEA3F8EFA4F5EBA1F1E59CF6E99EF7EC9DF5E998EEE28EEBDF8D EEE396F3E79BF9EDA1F4E89CEDE195EADE92EBDF93F2E69AF6EA9EF4E89CF1E599EBE099FCF2AD F6ECA7F2E8A1F9EFA7F2E99FFBF2A7FAF1A3F4EB9CEFE797F2EA98F9F19FEEE797F3EC9EF7EFA4 F5EDA5F4ECA6F7EEABFCF3B0FAF1AEFBF2ADFCF3ADF5EDA4EEE69EFAF0AEF0E7A2D7D388BDBC6E A7A861A7AA6A8A8C595757304E4D2B4F4C2C5F5C3A40411C151704212100817E55DEDBA3F8F7B3 CFCC7FF0ED9EF9F5AFE6E0AB3B3510221C0A1F1D085A5A413F3E1D86845B7A7945929153B6B16E DCD78DF4EEA3E6DD90E9E094E3DA8FEEE49BF2E8A0F6ECA4F7EDA6F9EEAAFBF1ACF5EBA5F3E9A2 EBE297EBE294F1E899F3EA9DF6EEA5F4ECA3F3EBA2F2EAA1F1E9A0F6EEA5F8F0A7F6EEA5F4ECA4 F0E89FF5EDA6F6EBA2F2E69AFAEEA1F1E698F2E798F6EB9CF4E999F7EC9BF5EA98F8ED9BEFE492 F5ED99F8F09BF1E99BFBF3ADDAD094564C12F2E8ABEBE29FEFE79CF8F1A1F0E999ECE597DED787 CDC673CEC67BEBE6A4E9E4B2504C26201D003E3D214342255E5D3B616034585726737138999652 C4C176E6E18EF6F098F5EB94F2E796F3E79BECE097F5ECA1F2E999EEE895F1E99DEEE69EF9F1A7 F0E89DF0E99AF6EF9FFAF3A3F6EF9FF6EFA1FAF2A8F9F1A8F4ECA4EEE69CF6EEA5F7EFA9F4EAA8 F7EEACFDF5B6FBF1B1FAF1B0F7EEAAF6EEA7F6EEA6F5EDA6F6EDA8F9F0ABF4EBA6F2E9A4F9F0AB FDF4AFF7EEA9F3EAA5F9F0AAFEF5AFFCF3ADEEE6A0F0E9A3F7F0AAF7F0AAF9F2ACFDF6B0FDF6B0 F9F2ACF8F1ABFCF5AFFDF6B0F7F1ADFEF9B9FEFABBFFFBBCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD46FD9D374DFD782D7D085DBD392 A49D6239330A322C0A383315322D113D360C89804FB7AE73D5CE85D3CE7BCECA73E4DF8AD0CA7B DAD38C948D489F985489823DD3CB7DD7CD76CFC56ED4CA73D6CC75D2C871CEC46DDDD37CDCD27B DFD57ED9CF78D7CD76F1E28DEBDD87EDDF87E6DB81E5DA80F8ED93F1E88DECE48AF4ED94F5ED9A EFE696F1E998EEE690EBE38FF1E997E3D98BE7DE92F0E79CF1E89DE4DB90E1D88AECE493EEE693 E9E18DE9DF8AEBE18CF1E792F0E692EEE48DF0E68FEDE38CEBE187EAE187E8DF84EEE489EEE592 E5DD8CE6DE8DEBE292E5DC8DE8DF90EBE295E8DF92E3DA8DE0D78CE3DA8FE8E093E6DC89EFE492 EEE393ECE192ECE093E9DD91EBDF93F1E697F1E697F0E594EFE492EDE290E3D78CEDE195F7EBA0 F9EDA2ECE096E5D98EEFE495F1E695FAF19BEFE68DC4BB60C8BF64E3DA7FE1D77ED6CC74E3D982 E7DD89E8DD8CEADF8FEEE394F2E79AF1E499EADE94EBDF97F0E49CE8DC92FDF1A6E9DD8FFAEF9F F4E999EEE395EFE397F6EAA0F5E9A0EFE39AEFE69AF0E79AF5EC9FF7EEA1F0E79AEBE295F6EDA0 F6EDA0EFE69AF4EB9EF6EDA0F1E79AF1E598EEE296F2E69BF9EDA3F3E79FF7EBA1F6EAA0F4E99C F3E898E9DE8CEADF8DF3EA9BF2E99AEEE598ECE396EEE599F1E99EF1E89DF3EAA0F1E79FF3E9A1 F8EEA7F6ECA5F2EB9CF8F1A2F5EEA0F3EBA0F5ECA3F3E9A1F1E59CF4E89EF7EB9CF6E998F2E693 F1E592ECE194EDE195F3E79BF2E69AEFE397EEE296EBDF93EADE92EEE296F5E99DF0E498E2D78F F2E8A2F3E9A2F6ECA4FCF2A8F4EBA0F7EEA0F5ED9CF0E896ECE492EEE692F5ED99EDE695F8F1A3 F7EFA4EEE69EF0E7A2F7EEABF5ECA9F8EFACF8EFAAF8F0AAF5EDA4EDE59DFAF0AEE1D992D2CF83 CECD7FB7B96EB1B572B2B67F75764B78785166633E4A482143422533341E2625100A0800565423 D5D193E1DE93E4E192E6E19AE7E2AA5A532B3E371E413F28595940595937302E0F757440BDBB7E CCC785E6E197EEE89CECE396F3EA9EF3EA9FF4EBA0F6ECA3F2E8A0F0E6A1F5EAA8F6EBA8F2E8A2 F8EEA7F4EB9FF1E89AF2EA99F2E99BF6EEA6F4ECA4F0E8A0EFE79FF2EAA2F7EFA7F8F0A8F9F0AA FDF4AEF9F0AAF7EEA8F9EEA6EFE398F6EA9DF3E79CF0E497F7EC9DE8DD8DF7EC9CFAEF9DF9EE9C EEE491F3EA95F2EA98F3EC9FF1E9A6EBDFA7493E08DAD097F1E7A8ECE39DF1E99DEBE497E7DF93 D7D081D2CB79D6CE84C7C283C3BE8D4E4A251E1B01302F1236361751512B62613385855188874B 9F9C58C4C075EAE592E7E189E8DE87F5EA99F1E599F1E59DF5EBA1F1E898EDE794F9F1A5EFE79F F8F0A6F7EFA4F6EFA1F4ED9DF4ED9BF5EE9DF5EE9EF9F1A4F9F1A7F4ECA2F1EA9CF3EB9EF2EA9F F2E9A3FCF3AEFFFBB9FDF4B2F9F0ABF9F0A9F7EFA7F3EBA1F4ECA4F7EEABF9F0ABF5ECA7F4EBA6 F9F0ABFAF1ACF3E9A5F0E8A0F5EDA5FAF2AAF9F1A9F0E8A2F4EDA7FBF4AEF9F2ACF7F0AAFCF5AF F6EFA9F7F0AAF8F1ABFBF4AEFDF6B0F6F1ABFAF7B3FBF7B5FCF8B8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD586CDC477E3DB94BBB371 746C2F5E581B999459E3DEA4C4C286DBDB9E95915B403705574E139B944BD2CD7BCECA73D3CE79 E0DA8BD7D088B0A964B5AD6C7C7432999144DDD37CE3D982DDD37CE2D881D1C770D8CE77DED47D DDD37CD6CC75DBD17AC2B861D4C570EEE08AE6D880D9CE74EBE086F1E68CEBE387F2EA91F1EA92 F1E997F2E999EDE594EFE790F6EE9AF7EF9CEBE294F4EB9FF1E79FE6DD93E6DD92EAE193F1E998 E8E08DE3DB87EDE28DEFE590F3E993ECE28BEAE089EEE48CEAE087EAE087ECE389EBE287EDE489 F2EA96E7DF8EEAE290EEE596E5DC8DE9E091E6DD90E8DF92E7DE91E3DA8FE1D88DE2D98DE9DE8B EBE18EE9DE8EECE192ECE093E6DA8EE9DD91EDE294F1E697F1E695EFE492EEE394ECDF97F2E69E F6EAA2F3E79FEDE199E9DC92F1E697F3E898FDF39CEEE48CDCD377E2D97DEEE58AEFE58CE5DB84 F0E68FF8ED9AEEE392EEE393EEE295EADE94E8DC92E9DD95E3D690E9DE95ECE096F1E59AF0E498 F2E799FBEFA3F5E99DF4E89EF6EAA2F5E9A2F2E69EF7EEA2F5EC9FF3EA9DEFE699ECE396EAE195 F4EB9EF5EC9FECE396F1E89BF4EB9EEDE396F2E69BF1E59BF2E69EF9EDA5F5E9A1F6EAA1F4E89E F6EA9DF7EC9CEBE08DEDE28EFAF1A1F6EDA0F1E89BF0E79CF3EA9FF6EDA2F0E69EF9EFA7F9EFA7 F4EAA3F4EAA3F3E9A1F3EC9BF6EFA1F2EB9DF0E89EF4EAA3F3E9A2F8ECA3EBDF95EDE293F9ED9B F7EB96EEE390EADE91EADE92F3E79BF4E89CF1E599EEE296EDE195F0E498EFE398F3E79BF0E498 E8DD95F0E69FEFE59DF4EAA3F6EDA1F8EFA1F4EB9CF3EB9AF2EA96EFE792F0E991F4EC96F0E998 F7F0A2F2EA9FEEE69EF6EDA8F9F0ADF4EBA8FDF4B1FAF1ACF9F1ABFBF3ABF7EFA7F5EBABDCD48D D6D385D9D888BABD70ACAF6AACB0759395657B7B516E6C435250275C5B423E3E34343222322F14 151200575317DAD68FD8D588EEECA4EBE6AC474017463F2338361F3232195656342C2A0284834F BFBE80E9E4A1EDE89EECE69BF8EFA2F9F0A4FBF2A7F7EEA1FBF1A8F4EAA2F1E7A2F3E8A6F1E6A3 F4EAA4FCF2ABF7EEA3F1E89AF1E998F0E799F1E9A1F4ECA4F2EAA2EFE79FF1E8A3F7EEA9F4EBA6 F2E9A4FCF3AFFCF3B0F5ECA8F0E59EEFE399F1E59BF3E79BFEF2A5DDD283C1B666E8DD8CF6EB98 F4E997F0E592F3EA95F3EB98F6EEA1EEE5A2F7F4BD605421B9AE79FFF5B8EEE6A0F0E89DEFE79B F0E89FE2DA8FD2CA7BCBC37AABA668A6A06F4D492316130443432431301149492266663576763F 8B8A4CA9A762BBB76CE0DB88E8E28AE4DA83EFE493E8DC90F0E39BECE298EAE192ECE693F7EFA4 EEE69EF7EFA5F4ECA1F2EB9CEEE796EFE897F7F09FF5EE9EF3EC9EF4ECA0EFE79CF5EE9EF3EC9C F0E99BF3EBA3F9F0AAFDF4AFFAF1AEF6EDA8FBF3AAF9F1A7F4ECA1F6EEA4F9F0ADF9F0ABF9F0AB F8EFAAF8EFAAF8F0A9F8F0A8F7EFA7F7EFA7F7EFA7F7EFA6F6EFA8FDF6B0FFFCB6FDF6B0F8F1AA FBF4AEEDE6A0F7F0AAFCF5B0FDF6B0FFF9B3F9F4ADF5F2ABF4F4AFF7F6B3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEC77CAAA362C4BC84 66602B231F0096944E9E9C52C6C477C9C67FD5D190D5CF8FCCC4808F8741625B13B8B066DBD68A DBD589DFD98ECAC57AE4DE94868036B9B36A837D32B4AE5EE7E090D6CF7DD7CE7BD2C774DDD27F E0D582E1D784DACF7FD3CB7B9F9646A89E4AE6DB85E1D67FDACF77EAE188E1D880E9E087EFE78F EFE792EDE590EBE391E7DF8BE7E08AF0E993ECE591E5DE8BF0E797EFE696EFE696EDE491E6DD8B EAE18CE8DE87E2D882E8DF8AEDE48FEFE691EAE18AECE38CEFE690EDE48BEBE28BF2E991F2E990 EEE58DEFE792F0E895F3EB9AEDE495E0D789DDD487E7DE92EEE598EDE496E9E092E5DC8DDDD484 E9DF8EE7DD8DE4DA8BE8DE8FEBE092E5DB8DECE194F2E899F4EA9BF0E596EFE594F2E89BEEE29C EFE39EEBDF99ECE19AEEE399EDE295F2E896EEE48FEAE287DDD578E9E183FFF59DE5DE89DDD481 E9DF8CE7E08FF0E798F3E99AF5ED9EF1E89CE7DD92E7DE93F0E59CE9DD94E9DD94F6EAA0E8DC91 EDE194E4D98AEADE91E6DB8DE2D688E8DD90EADF92ECE194EFE796F1E998F1E999F1E89BF7EEA2 F9F0A6F0E79DF3EAA0EFE699EFE699F1E89AEDE396EFE599F0E59AF0E59AF4E9A0EEE39AF4E99F F1E69CF2E89AF6EC9DF1E896F7EE9BF6ED9FF2E99EEFE69CF0E69DF6EDA2FCF3A8ECE299F9EFA6 FDF3AAF5EBA2F3EAA1F6EDA2F1EA9CF7EFA2F2EAA0F0E89FF5ECA4F7EDA6F4E79FE8DC8FEADF8F F8EB98F3E890E7DC89EBE297EFE49BF3EAA1F1E89FF1E59DEDE49AEFE79DF7ECA3F3E9A0EEE69C EFE49CF3E9A0F6ECA4F3E9A1F6ECA4F4EBA1F9EFA6F9F0A6F6EDA3F9F0A6FAF0A6F3E99EF7EDA2 F1E99EF5EDA3F7EFA6F9F0AAFBF1ACF9F0ACF6EDA9FEF5B1FBF1ACF6EDA8F7EEA8F6EDA6F2E8A5 EDE69FE2DC92D7D387A6A65AA7A962AFAF719797626B6A387474445554274140204342301C190D 1E1906221E02151101959358D8D78FF5F5B3B9B87B88855296926C5B593D2A2A0E393715676539 85834FC3BF81F4F0AAEFE89EECE597F7EEA1F2E89AEEE498EEE59CF4EAA1F1E7A0EDE39CEFE59F F1E7A1F7EDA7FCF2AAF5EDA1EEE598EEE596F0E799F0E89EF1E99FF5EDA3F0E89DECE49AF4ECA2 F3EBA0EDE599EEE69BEEE69BF3EA9FF8EBA4FEEEAAFAEDA6F0E49CF4E99FAAA255D4CF7EF2EA96 FDF39DF1E790F6E990F6EB91F3EC93F1EB98EDE59CF4F0B07C713C92884DFFFDBCE8DF98EEE69C EEE69BEFE89FE4DB93CEC275B4AB5FB7AF6CBDB77F514F21110F0448482C403F2254532A7D7D45 7B7E388C8C41B3B168C1BE71D8D483E9E28FE6DD8DDFD485DDD185EBDE94E9DB8EE7DA89EDE390 F1E797F0E899F6EF9EEFE898EDE695EEE696F2EA9AF6EF9FF7EF9FF3EB9BEFE899EDE697F9F1A5 F1EA9EEDE69CF4EDA4F8F0AAF6EDA8F9F1ACF3EAA5F8F1A9F6EEA6F5EDA3FCF5AEFBF2AFFAF1AE FAF2ACFAF2A9F7EFA6F7EFA5F7EFA5F6EEA4F5EDA5F3EBA3F1E9A1F2EAA2FBF2A9FEF9B0FAF2A9 EEE79EEAE29AEAE39CF7F0AAFEF7B4FFF8B6FFF9B8FDF6B8F6F2B2F6F3B4FAF7B8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D07DCBC687 7E78493531049E9C5FC0C272BCBC63D0CF74C6C071D3C988CAC07CC3BE66CFC8778B823B594F0C CFC788CBC380D1CA80C9C777E1DF8CB9B765989547A7A55A6C6C23D0CB81D0CA7ED6CD80D7CB7B DCCF80EDE091EBE193E5DC90E0D98FCCC67BC5BD6CE8E08BEBE38EEBE38DE8E08BECE48FDCD47F DDD580E9E18CF0E893F1E994F5ED98E9E48EF1EB94ECE68EE6E089E7E087E6DF85EFE58DF2E98F EBE187EBE087EBE086E8DE85EAE28DEEE691F0E893ECE48FE7DF8AE7DF8AECE48FE6DE89EEE690 EEE791E9E18CEAE38CEDE591EBE391ECE394EFE69AE5DC91EEE59AEDE499E0D688DCD483E7DF8C E7DF89E4DB8DEFE699EFE699EDE495EDE495EAE192EBE293F2E99AF1E899EDE497EEE598F3EAA0 F4EAA6F1E7A2EAE099EDE49AF2E99CF0E797F1E995F1EA8FE4DE81D8D274E9E383F5ED99EBE397 E6DE92E9E195E8E095EBE398E5DD92EEE79BEFE79CE7DF94ECE499F4ECA1E8DC90EBDF92EFE495 E9DE8FE3D889E9DE8EE5DA8AE9DE8EF2E795F4E998E9DD8CE7DD88E8E08BF2EA98F5EC9DF3EA9D F3E9A0F4EAA4EFE59FEFE59DF2E99FECE396EAE192EDE495F1E89AEFE697F4EB9DF3EA9DE9E095 EDE499E8DF94E9E092EDE496EFE697F5EC9DF5ECA1F6ECA4F5EBA3F4EAA2F4EAA1F6EDA2F2E99E FAF1A5FDF4A7F6EDA0F1E89CF4EB9EF3ECA0F9F1A7F3EBA2EEE69EF5ECA4F9EFA7F7EBA2F3E799 EBE08EF1E68FF8ED93F6EC97FBF2ABFDF4AEF4EBA6ECE39DECE39EF1E8A3F2E9A4F1E8A3EFE6A0 E7DE99E9E09BECE39BEEE59BF3E9A1F6ECA5F8EEA7FCF2ADF9EEABEFE4A4F3E8AAF8ECB0F5E9AE FDF4B7F9EEABF8EEA9FCF2ACF9EFABF5EBA6F9EFAAFCF2ADFAF0ABFAF0ABFBF1ACFAF0ACFAF0AB F2E9A2E4DC94ECE59DDAD58CA29F57BAB773C4C382A2A2658B8A52666631807F4E5D5B31464325 443E322620102B27121811082C2B00959853818248787A38ECEFAEE5E2B59996751C1B00403D1E 716E4163612AC2BF7FE9E29AE8E195EFE699F6EB9CF2E697EDE194F6EBA4F7EDA6FAF0A9F2E8A0 F1E79FF8EEA6F8EEA6FBF1A7F6EDA2F2E99EF7EEA2FDF4A8F9F0A3F3EA9EF7EEA0F0E798EBE293 EFE696F2EA99F7EF9CF4EC9AEAE18FEBE290EDDE95F4E19EFAEBA5FCEFA8DBD288AEA65AECE896 F2EC97E6DC85EEE389FCEE93ECDF81E9E286F6F099E1D98DF6EDAA968D4C7A712DFFFAB5EFE89C EEE699F1EA9DF5EDA5E7DD95E7D789DBCD7ECFC67AD5D08D6664311A19003A3A214F4D3363633A 868647AFB15D9D9E48B1B05ED0CD7CDCD788E6E094DED68BD9CE84E5D98DF1E395EEDD8EE8D786 ECDC89ECE28AF2EB92F3EC94EDE592EDE593F2E99AF5EB9EF2E99BF6ED9EF5ED9CEEE694F0E999 F7F0A7F5EEA8F0E9A3F5EEA8FBF4AEF8F1ABFCF5AFF5EEA8F9F2ACF3ECA5F6EFA9FFFBB8F9F0AF F5ECA9F2EAA4F6EEA5FCF5A9FDF7A9F7F0A2F6EEA3FDF5ABFBF3ABF9F0ADF7ECA3FDF1A5FFF7AA F7EFA2EEE598EAE298F4ECA3F9F1AAFEF6B4FFF7B9FFF6BCFFF7BEFAF4BAF9F3B7FDF7BCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAD37B EBE19A473D07766F3AC4BF7CD4D27BD1CD6CD4CF6ED0C66EDBCD84CABE77C2BC6DBEB86FBEB774 2119068D8546C6BE7AC0BA6DD9D382D0CB79E0DA889B9547BEBB729090488D893FD5CE84D7CE81 E0D687DACD7EE6D98AE5DB8CDDD486DED78BDED88BE1D986DFD782EAE28DE1D984E1D984E8E08B E5DD88E7DF8AE8E08BF0E893F6EE99F0E893EFE993F4EE98F1EB95F1EB93EFE890E9E28AE9DF86 EBE188F4EA91EFE48AE6DB81E6DC84E8E08BE8E08BEFE792F4EC97EFE792E7DF8AE8E08BE4DC87 EBE38EECE48FE4DC87EBE38EEDE590EDE593F1E899F3EA9DE7DE93E1D88DEDE498E9E091E4DC8B E9E18DE4DC89E6DD8FF5ECA0F4EB9EEAE192EAE192EEE596EEE596EDE495EEE596EFE699ECE396 EDE499F4EAA4EEE49FF0E69FEEE49AF1E89BF5ED9DF2EA98EEE691E3DC83DCD57AE9E288F1EA97 ECE499F0E89DF4ECA1EFE79CEBE398E6DE93EBE398ECE499EDE59AF2EA9FF4EDA2EDE195EBDF93 EBDF94E8DC90E8DD8EF1E697F9EE9EE8DD8DF2E798F2E797F2E796EDE290DFD787ECE396F4EBA1 F2E8A1F1E7A3F2E8A4F1E6A5EFE4A3F1E7A2EFE59EEDE499EDE498F1E89BEEE598F3EA9DF2E99C E9E095EDE499ECE398F0E79AF4EB9EEFE699EFE699F2E99EF4EAA1F5ECA1F6EDA2F4EBA0F3EA9F F0E79CF5ECA1F9F0A3F9F0A3F6EDA0F5EC9FF9F1A6FBF3A9F4ECA3EFE8A0F4EAA3F6ECA5FDF1A7 F6EB9CEEE391F3E891F9EE94F7ED99F6EEA5F8F0A8F3EBA2EEE69EF3EBA2F8F0A7F5EDA5F4ECA4 F1E9A1EAE29AEFE79FECE398EBE295F0E89CF3E9A0F4EAA2F5EBA5F4E9A6F4E9A9F4E9AAF8EDAF FAEEB2F9EEB0F8EDAAF5EBA4F6ECA5F4EAA3F1E7A0F6ECA5F4EAA3EEE49DF0E69EF7EDA6FAF0A9 F8EEA7F1E9A1E8E199F6EFA7D7D289B5B16AC9C782C6C6847C7C3E7F7F465B5B268383515F5F32 59593770695A2E29162C271119130C393811D7DA95C0BF87BBBB79919151525023171400252304 4D4B278F8C5F626027979453E9E299EFE89CF9F0A4F7EC9DEFE395F4E89CF8ECA3F6ECA4FCF2AA F9EFA7F1E79FF1E79FF6ECA4F7EDA3F3EA9FF1E89DF6EDA2FBF2A7FDF4A7FEF5A8F4EB9EF2E99A F1E899F2EA9AF4EC9BF4EC99F7EF9CEFE794EAE28FEADC8CF4E394F5E697FFFAABCEC576B3AC5B EEE898E3DC8DEEE495EADD8FF4E598FEEEA1F0E69AF1E9A2F0E6A9FEF2BCC8BD85322800DAD18C F3EC9FD5CE7DD9D283DBD387C6BD71D1C372DFD282D6CE81CAC88462602D161600282710323115 65653A8B8B4CA6A854969640C0BF6DEEEB9AE6E192E4DE90E7DF94F1E69AF6EA9EF8EB9BF2E491 ECDD88ECDD86EFE58CEEE78EEEE78FECE491ECE391EFE697F5EC9FF6ED9FF7EE9FF3EB9AF2EA98 F9F2A1F3EBA3FDF6B0F9F2ACF4EDA7F4EDA7F4EDA7F8F1ABF5EEA8F9F2ACF4EDA7F4EDA7FCF5B1 F8EFAEF2E9A6EFE7A1F4EDA4FDF5AAFBF5A9F6EFA1F9F1A6FCF4ABFBF3ABFFF8B5F6ECA4FBF0A1 FEF5A6F7EE9FF3EB9BFBF3A7FCF4ABFEF7AFFEF6B4FDF5B7FDF4BAFFF6BEFDF7BBFAF4B6FDF7B9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D0C565D5C7783B2E00A89C5BCFC67CDBD37BDAD371D7CE6AD9CB70E1D080CCBF78C2BC79CBC688 DFD99E342C1550490AC0BA72CBC575D1CB76D0CA75E2DA89C2BA6E9F9A53D7D4905A5610B4AD64 D7CF84D4CB7DDBD080DBCF7FDDD283DFD686D8D283CBC474E9E18EE3DB86ECE48FE2DA85F2EA95 ECE48FE5DD88ECE48FE9E18CEFE792F1E994E3DB86EDE792ECE691ECE690F3ED96F8F19BF3EB93 E1D77FE3D981F8EE95F2E78EE6DB81EBE188ECE48EEAE28DEAE28DEAE28DECE48FEBE38EEFE792 EAE28DF2EA95F2EA95EBE38EE2DA86E9E18EF0E997ECE394E7DE90EBE296E2D98CF0E799EFE697 E8E08FEBE390E9E18EEAE193EEE597E7DE90E5DC8EECE395F0E79AEFE698F1E89AF0E799ECE395 EBE294EDE499EFE59EEAE099F1E79FEDE399EEE59AF4EB9EF0E898F1E998ECE491E9E28EEEE692 F1E99BEFE79DF4ECA2F7EFA5F1E99FEEE69CF3EBA1F0E89EEDE59BEFE79DF2EAA0F3EBA1F2E69D F0E499F1E59AEFE398ECE094F2E79AE9DE90F6EB9CECE192DCD181F1E696F6EB9BECE196F3E89F F5E9A2F3E7A3F6EAA9F8ECAEF1E5A6F5E9AAF4E7A7F2E6A2F6EAA7F2E79FEBE196EAE094F1E69B F3E89DECE297EEE399EDE398F3E99DF4EA9EECE196E9DF94F1E89DF0E79BF0E79BF3EA9EF6EDA1 F6EDA1F2E99DF2E99CF2E99CF5EC9FF8EFA2FAF1A4F2EAA0F9F1A7F7EFA5F4ECA4F6ECA4F2E8A0 FAEDA2F6EB9DF0E592F1E590EFE48CEAE08DF1E89EF6EEA6F2EAA1EAE298E9E198EFE79EF2EAA0 F1E9A1F0E89FEDE59BF5EDA5F3EB9FF2E99BF4EB9EF2E99DF1E79EF1E89FEFE59EFAEFABFFF5B3 FFF6B6FFF5B5F7EBACF6ECA5F3E9A0F4EBA1F3E8A1F1E79FF9EFA6F4EAA3F8EEA6F9EFA6F6ECA4 F5EBA3F6ECA5E5DD95F6EEA6E3DC94DBD58DD8D48DD6D38FBCBB7A8C8C4E96955C81814C979765 6B6B3C5B5C36615D492C28112E2A12130D02333109E0E29DF7F6BDECECAAA8A86869663B4E4B29 403F1F6B68426B69396D6B32B0AD6CD4CD85E2DB8FF6EDA0F3E899EDE093FCF1A5F9EEA4F3E9A1 F8EEA6FBF1A9F6ECA4F4EAA2F0E69EF3EAA0F3EAA0F1E89EF2E89FF2E99DF7EEA1FCF3A6EDE496 F1E899F5EC9DF4EC9CF7EF9EF4EC99F2EA97EBE390EEE692F3E790EEE087F6EB92F9EE98E5DD89 A8A04FEEEA9EEAE198F4E8A3F3E4A2FFF6B6B5A5678F8349F6ECB7FAF0C0D2C5999083533A2E00 D8CF8DFEF7ABE3DC8BE3DC8BD9D282D4CB7BCEC26DD4C976CDC67ABEBB7B43420F0D0D04343517 6B6A4B6E6C418F8E50A4A253BCBA67D3D180EAE695E5DF90F0EA9CE8E092F0E598F4E999F1E591 F0E28BEEE186ECDF84F5EC91EFE98FF0E991F1E996EEE593F1E899F2E99CF4EB9DF2E99AEEE795 F2EA97F8F1A0F4ECA4FBF4AEF6EFA9F0E9A3F0E9A3EFE8A2F9F2ACF7F0AAFBF4AEF8F1ABF5EEA8 F9F1ACFBF2AFFAF1ABF8F0A8F6EEA5F6EEA3F3EB9FF3EB9FFAF2A8FDF5ACF8EFAAFCF4B0F4E99E F3E898F6EE9EFAF2A2FAF1A1F5EE9EFCF5A8FEF6ADFCF5AFFBF3B3FDF5B7FFF8BCFEF9B9F8F3B2 FAF5B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE FFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE5D777BAAA58453604C7B977E2D890D4CC77DAD273DAD06EDACC70D9C876CABE79D6D29B D7D4A07E7844140F00282202C3BD71D6D07CC2BB62D1CA72CCC271DDD186857C39B5B171BBB572 78712ADDD58CD0C77BD7CC7EDBD07FE0D583D7CF7CD2CB78E1DB88DFD784E6DE88E3DB86DFD782 EEE691DFD782E7DF8AEEE691EFE792EDE590E8E08BDED681EAE490F4EE9AF7F19DF9F39EF5ED98 ECE48FDCD27CDFD57DEFE58EECE188E7DC83E9DF89EAE28DF5ED98F4EC97ECE48FE7DF8AEDE590 F4EC97EDE590F4EC97F6EE99F1E994F0E895E5DD8BE5DD8CF0E798EEE597E4DB8FE4DB8EEEE597 E9E091E3DB8AE7DF8DE4DC8BE7DF8EEBE293EBE293EFE699F1E89BEBE295EFE698F4EB9EF2E99B EBE293EBE293EFE698EEE49BEBE199EFE59DEEE59AF0E79CF4EBA0F5EC9FF7EEA1F4EB9EF3EA9D EAE192F1E99DF4ECA3F4ECA3F2EAA1EAE299ECE49BF2EBA2EDE59CEBE39AF0E89FF2EAA1F7EEA6 EFE39BEEE29AF2E69CF1E59BEBDF95ECE094E5D98DEBE092D8CD7EECE192FBF0A0F5E99DEEE29A F9EDA5FDEFAAF7EAA7F3E5A4F3E5A7F9EBACFCEEB0F5E7A8F3E5A4F8EAA9F6E9A3F4E89EF0E49A F4E89EF5E99FEEE298EFE399F0E39AF5E99FF4E89EECE096ECE096F7EEA1F2E99CEDE497F0E79A F3EA9DF2E99CFDF4A7FBF2A5F6EDA0F2E99CF4EB9EF9F0A2ECE499F5EDA2F6EEA3F7F0A7F8EEA6 F2E99EF7EAA0F8ED9EF5EA9AF4E895EEE18DE4D988ECE496F6EEA4F6EFA2EDE698E8E095EDE699 F3EC9EF3EBA0F1E99DECE597F1E99EF5ED9EF4EB9CF4EB9CF2E99CF3EA9EF7EEA4F7EDA5FAF0A9 F9EFA8F2E8A1F1E7A2F7EDA7FBF1A9F7EEA3F7EEA3F2E99FEEE59AF2E99EF4EAA0FDF4A9FBF2A7 EFE69CEEE59AF4EBA0E9E198E7E098DED78FD9D48BCFCB84CECC879998578F8F518E8E55979762 8C8C5A7575455A5B3144422B3532193B371C120E005F5E2FFFFFBFD5D398EEEDACDEDC9C817B4F 423F1E4A49275452297E7D4C908E54EAE9A6D3CC84DCD589F1E89BF2E797EADE91FBEFA3F4E99F EBE199EFE49DF3E9A1F3E9A1F6ECA4EBE199F1E79FF5EBA3F3E9A1EDE39BE9DF97F0E79BF4EB9E E8DF91F0E798F5EC9DEEE696F2EA99F9F19EF8F09DECE491EBE38FF1E68CE6D97BF9EE92EDE288 FDFAA3BCB463C9C075FFF7B1F5E8A9DACA8F93814B74622EFBEDBCBCB081675A303C2E07322500 7E723DF3E9A9F7F0A4E9E291DFD887D8D180E9E18FDDD07AD5CA77D5CD83CBC78B33320620200E 3E3F207878565B582B8B874AA4A153DDDA88E8E594E5E08FE8E293F9F2A2ECE394ECE292EDE290 EADF88E9DD82E8DB7DE7DB7BF5EC91F0E990F5EE95F4EC99ECE391F1E899F5EC9FF5EC9EF0E798 EFE796F4EC9AF4EB9CF9F1AAFBF4AFF5EEA8F2EBA5F5EEA8F4EDA7FBF4AEF9F2ACFBF5AFFBF4AE F7F0AAF8F0ABFDF4AFF6EDA8F4ECA4F7EFA6FCF4A9FAF2A7F5EDA3FAF2A9FEF5AFF9F0ABF9F0AC FEF3A8F5EA9AEAE291F2EA97F9F19FF4ED9CFBF4A4FDF6AAFDF6AEFDF6B2FFF8B8FFFCBCFFFDB9 FAF6AFFBF6B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFBF7FDF8F0F9F8ECF8F8EBF8F8EBF8F8EBF8F8EBF8F8EB F8F8EBF9F8ECFCF8EFFFF8F2FFF8F2FCF8EFF9F8ECF8F8EBF8F8EBF8F8EBF8F8EBF8F8EBF8F8EB F9F8ECFDF8EFFFFAF6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEEE088B1A5574B3E0DD2C78ACAC182C7C077D5CD7CDFD883DCD180D1C275D1C888 B5B18555522C18150018130047410DDFDA8ED7D17AD1C96FD7CD73D6CA78D8CA80B0A662837D3E E1D99799924D87803ACBC478DFD688D6CE7DD8D07DD7CF7CD0C872E1D983E7DF8CEBE390E6DE8B EFE794E8E08DEEE693EBE390F1E996F7EF9CEEE693E5DD8AEAE28FEDE695FBF4A3FBF4A3F5EE9C F1EA97EBE28EE5DB86E5DB86E8DE87E7DB85ECE08AEBE18BE2DA87E8E08DF0E895F1E997F0E895 EEE693EFE794E5DD8AECE491F0E895ECE491F7EF9EE9E190E5DD8CECE394E8DF90E1D889E7DE8F ECE394E3DA8BE1D988E5DD8CD9D180EAE291F2E999EEE596EBE295EEE59AF0E79CEEE59AEDE498 EEE598EEE596ECE493E9E091E9E095EBE296E7DE93EDE499F1E89DEFE59BF3E99FF1E89EF1E89D F4EBA0E8DF95EAE098EFE59DF0E69EF0E69EEAE098EFE59DE8DE96E6DC94EEE49CF2E8A0EEE49C F4EAA2EEE29AECE098F0E49CF2E69EEEE297EEE299EFE397DCD084D4C87CFFFCADEBE192F0E596 F1E59AF9EDA2F9EDA2F5E9A0F3E69FF5E8A1F9ECA7F3E6A1F1E49EF9EDA8FAEDA8F1E59DF4E8A0 F1E59DF5E99EF7EB9FF1E599F5E99DF6EB9EFAEEA3F8ECA2F2E69EF9ECA4F6EDA0F0E798EDE495 F3E99AF4EB9DEFE699F2E99CF8EFA2F8EFA2F1E89DEFE69BF5ECA2EFE79CF3EBA0F0E89DF3EBA0 F7EEA3F3EA9DF5E99DF8EC9EF6EB9BF9EC9BF5E997E9DE8DE1D889F0E79AF4EB9DF3EA9BF4EB9E F5EC9EF2E99AF5EC9FF5EC9EF0E798F4EB9DF8EFA0F5EE9CF1E998EDE495EFE697F6EDA0F8EFA4 F5ECA1F5EBA3E4DA92D9CF88EEE49CF8EFA3F6EDA0F7EEA1F3EA9DECE396EFE698F2E99CF3EA9D F0E79AECE396F0E79AF9F0A5F5EDA5DCD58DD9D28ADFDA91BDB972D0CD89BFBE7D969658828149 90905B6C6C3A787948535528414025413E233D3A19160F00605D2FEBEBA2EBE6AAE0DD99D0CB8D 60582C2F2C094F4F2E2B2A0969673788864BE7E4A1F4EDA5EFE79BFAF2A4F8EBA0E8DB90F0E498 F5E99FEDE599EFE69BF0E79CF0E69DF5EBA3F1E79FF3E9A1F4EAA2F2E8A1ECE29BEBE198F1E89C EEE598EBE294F1E899F3EA9BEFE797EEE695F2EA97F8F09DF1E996ECE390ECE18AE9DE83FBF098 F2E890F9EE98F0E5948074274F43005C4F0D5A4A0E92824BF5F0BCAEA26B43370A4E421A807446 E1D6A5FFF9C0F0E8A4EEE799F6EF9EEAE393E8E095E8DF91D1C76FD2CA78D8D38BC7C58A191705 31310E494A2A4A4A23767441BEBB7AC8C477D1CC7ADCD785E5E08FE0D989D7D081DDD484E6DC8B E8DE88E8DF85E7DD7EE6DC7AEBE17FEEE58AECE58BF6EF96F2EA97E4DC8AEDE494F5EC9FF2E99B EBE293EFE896F4EC9AEAE292F1E9A1FFF7AFFAF2AAF0E8A0F5EDA5FBF3ABFAF2AAF9F1A8F8F0A8 FAF2AAF7EFA7F3EBA3F5EDA5F4ECA4F6EEA5F9F1A8FCF4ACFBF3AAF3EBA3EFE79FF5EDA6F6EDA8 FAF1ABFDF4AAF9EE9EF0E897F5ED9AFAF29FF7F09DF8F1A0FAF4A6FAF4A9FAF3ACFBF4B0FDF6B2 FFFFB7F8F4ABF9F5ACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FFEDDAF8E1BCE6E2ABE2E2A6E2E2A6E2E2A6E2E2A6 E2E2A6E1E2A5E4E2A8F2E2B7FFE2C3FFE2C4F4E2B8E5E2AAE1E2A5E2E2A6E2E2A6E2E2A6E2E2A6 E2E2A6E5E2AAF6E1B9FEEBD7FFFAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDED487D0C785372D00A09769DFDBA7D5D299E4E3A2C8C581A7A35FC9C27F DCD69D848259716D4E6A66407A7748BEB87CE8E39ADED882DDD379D5CA72DBCF7BD7C67AD6CB86 7E7737A79F5DD0C985403900A6A055E5DE91E2DA8AD3CC7ADED580DED57ED8CF78DCD481D6CE7D DCD483ECE492E6DE8CE9E18FEDE593EDE593F4EC9AF0E896E8E08FECE492F2EB9BF1EA9AF2EB9A F0E998F1E998F2EA98EBE08EEDE38FEEE290EDE18DEFE38EEFE591E6DD8CE5DD8BEAE290ECE492 ECE492EBE391E8E08EE2DA88DFD785D8D07EE6DE8CEDE494EBE393ECE494EAE292E9E090EBE292 F4EB9BE7DF8FE2DA8AAEA656B5AC5DECE493E9E190EBE291EEE596EEE598EDE39AEFE69DE8DE94 E5DC91E9E093F0E797EFE796EAE292E7DE92E7DE92E3DA8EEBE295ECE398EDE39AF2E8A0EBE19A EBE199E7DC95E7DD95EBE099EFE39AF5E9A0F6EAA1F2E79EF2E79EECE197F1E69DF3E89FF3E89F F2E69DE9DE95F8ECA4F1E59CEFE39AF3E79EF4E89EF2E69BECE094F2E699F5E99BECE596D0C575 EDE293F4E895F6EA98F9EE9CF0E492EEE291F4E898F0E495EDE194ECDF92FAEDA0F8ECA0EBDE93 F4E79FF0E39AF2E49AFAEDA0EFE394F1E596F3E798F1E598F2E59BF3E69DF8EBA3E6DD8EEBE391 F1E999F5ED9CF9F1A1F8EFA0E9E093F2E99CF5EC9FF4EBA0F4EBA0F1E89DF0E89DF1E99EF2EA9F F5EEA1FAF2A5FBF2A3EEE294F5EA9BFAEFA0FDF0A1F7EA9BEEE293EAE090EFE595EDE393F1E797 F7EC9DF2E898EEE394F1E797F1E797EFE595F4E99AF3EA9AF6EE9DF6ED9DECE394ECE394F3EA9C F3EA9EEBE296EAE195EEE599EFE69CF5ECA1F0E79AEEE598EDE497EDE497EEE598F1E89BFBF2A5 F9F0A3F4EB9EEDE497FEF9ACEEE69BFAF2AAD8D088E0D991D6D188CBC780CCCA85D3D2918C8C4E 74743B80804B5454227171404A4D1F48472A454222211E09161000716F3CF2F1A6F5F1B2E0DA96 F8F1B08C825425210015150056552B777541B5B477F2EEAAF8F2A8EDE699F1E99BF4E89CEFE297 F6EA9FF6EB9FF2E99DF1E89BF3EAA0F8EFA5F9F0A6F7EDA5F5EBA3F9EFA8FBF1ABF6ECA6F3EAA1 F9F0A3F0E79AF2E99BF7EE9FEFE697F1E898EBE392EAE28EF4EC99F0E895E8E08EE7DD8DF1E596 F7EC9CF6EA99F3E796F3E795E4D889CABD71D3C57DE2D893FAEFAEF8EAABD4CB84DFD691F9F0B1 FDF3B9F9F1B5E9DF9DD8D086E4DD8DF3EC9BEEE799E9E09AE4DA91DDD47CDCD484E0DA97B9B680 0907033E3E1B565635403F149A9961C7C37FDCD689D8D281E5DF8CE7E190E9E291E1D988E0D886 E3DA88ECE48CECE389E5DC7EEAE280EAE27FE4DD82E8E188EFE88FE8E08DDFD785E5DC8DE9E093 EBE295E8DF90EBE392ECE491DFD786ECE49CF6EFA7F2EAA2EEE69EF4ECA4F7F0A8FFF8B0FDF5AD FDF5ADFEF6AEF8F0A8F0E89FF3EBA1FCF4AAF9F1A8FAF2A9FDF6ADFBF3ABF0E7A1E4DC96EAE19B F8EFAAFCF3ADF5EA9FF5EA9BF5ED9CF4EC99F4EC99F7F19DF8F1A0F3EC9DF7F1A4FAF3ABF4EDA7 F9F2ADFAF7AEEFEBA1F5F1A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFBFCF4E3F7F1D6F2F0D2EFF0D2F2EFD0F9ECCAFBEAC3EDEAC1EAEABFEAEABFEAEABF EAEABFEAEABFEAEABEECEAC0F6EACBFFEAD4FFEAD4F7EACCEDEAC1E9EABEEAEABFEAEABFEAEABF EAEABFEAEABFEDE8BFF9DFC3FAE2C9F3ECCFEFF1D2F2F0D3F9F1DCFFF4E9FFFDFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFB F1FEF1D7F1D7BFE4BEC0E8BCD1F1CCF6FCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFDFBD9EED9BEE2BEBDE2BCCDEBCCECFCECF9FFF9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDFD895E9E3A84D47212F2C0F86845D87865B696B3B3A3D0877783E D3D397A2A16A615E324D4A215752299C9769E1DAA3D9D38ED7D081E4DD84D5CB71D7CB77DFD383 DED48DA8A15D837C38DED7927C752F696219D0C87DDDD688D8D07EE4DA85DFD57ED8CE77E2DA87 DDD584E3DB8AEAE291EBE392EFE796EDE594E9E190F0E897F3EB9AEEE695ECE493F0E999ECE595 EFE898EBE494E5DC8DE6DD8CF2E696EFE494F4E896F7EB99EEE290E3D786DFD786F3EB9AEEE695 E0D887ECE493EFE796EFE796EEE695EFE796EAE291DBD382E8DF90EAE192E5DC8DE3DB8AE8E08F F0E897E9E190DCD483E5DD8CAFA657B1A859E9E092D8D07DE8E08EF1E899F0E79BE9E097E6DC94 ECE29AECE398ECE396EAE191E5DD8AE2DA88E7DE90EAE194E5DC8FE9E093EEE59AF2E89FF2E8A1 EEE49CEFE59EE6DC94EEE49DF9EDA4F7EB9FF3E79CEEE297ECE094EFE398E6DA90EEE296EDE195 F0E49AFCF0A4F7EBA1F0E49AEFE399EFE399F1E59BF0E498EBDF93FBEFA2F2E798EBE090EBE091 E4D989F7EC9AE9DE86EDE288F1E68CEBE086EADF85ECE188E9DE85F3E791F2E691EBDF8BF0E490 F8EA9DFDEFA5F5E79EF6E99CF9EC9DE6DA87EFE38FF3E795F0E395F1E397F3E59CF7EAA0ECE191 F1E996F4EC99F3EB9AF5ED9DF5EC9DF9F0A3F8EFA2F2E99CF1E89DF7EEA3F7EEA3F8F0A5F7EFA4 F6EFA1F6EFA0F6ED9EF5EC9DF7EC9DF3E899F1E697F3E698F4E799F2E698F2E798F0E595EBE090 F1E696F8ED9DF3E898EEE393EEE393F0E595F4E999F7EB9BF3EA99EEE596EAE192F1E899F9F0A1 EFE696F0E79AF1E89BF1E89BF3EA9DF4EB9FF6EDA2F1E89BEDE497EAE194ECE396F0E79AF0E79A F3EA9DEFE699F8EFA2E8DF92FDF4A6F1E89DF1E9A0E2DB93EFE8A0D4CE86E3DF98DAD793BBBA79 8080428C8B53686933646432686A38484B1D4341254B49281D1A010E080079743FFFFFB9E9E4A2 E0DB92F2EAA4746A374D49206061399C9B6D8B8A52B0AF70EEEBA5F8F2A8EEE79AEEE698F3E79B F3E69CF9EDA3EEE296F3EA9DF3EA9DF5ECA1F6EDA2F1E89DF6ECA4FAF0A9FCF2ABF6ECA7F2E8A3 F2E9A1F7EEA1F0E79AF2E99BF6ED9EEDE495EFE797EBE392ECE491F1E996E8E08DE2DA88EFE49A EFE29CECE097F0E398F2E597F1E593D2C672E9DD8BEEE292ECE192F0E59AE5DC90DBD581F3ED9B EFE79DF5ECA5DFD690EAE298E2DB8BEAE392DED787DBD38ADBD291CBC27CC4BC66E7DF94DAD498 9C97690E0B01454524696A457E7C4CA8A569A09C54D5CE7FEBE492EBE591E0D989EBE392F2EA99 EAE291F0E895F4EC97EADF88DAD176DBD273D9D071E3DC80E3DC82E9E289E2DA87D9D17FECE394 E3DA8DE9E092E7DE8FE8E08FEBE391E7DF8DF5EDA3E5DD95E2DA92F4ECA4F7EFA7E6DE96F6EEA6 F4ECA4F4ECA4F4ECA4F3EBA3F2EBA0F7F0A2FCF5A7FAF2A8FCF4ABFBF3ABF1E9A2EFE6A1F0E7A2 F5ECA7FFF7B2FFF8B3FEF3AAF8ED9DEBE393E9E190F2EA97FBF4A3FDF6A4EFE899F3EDA0FDF7AD F9F2ABFBF4AEF2EEA5E8E49BF0ECA3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFEFB FDFDF8FCFCF7FBF9EEF7E9C2EFE2ADE5E1A7E0E1A4E6E5ADF4F1C6FFFBE0FBFBEEFBFBF2FBFBF2 FBFBF2FBFBF2FBFBF2FBFBF2FBFBF3FDFBF5FFFBF6FFFBF6FDFBF5FBFBF3FBFBF2FBFBF2FBFBF2 FBFBF2FBFBF2FBFBF2FBF7EFFFE6E2F6E0C9E7E1AFE0E2A4E6E1A9F4E1B7FFE5CDFDF7EEFEFCF8 FFFDFAFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2FEF2D6F7D69FDBA071C36F73CA6B96DD8DE4F6E3FAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFEFBEBF7EAA5D8A570BF6F6CBE6B8BD08BCBF2CBEBFDEBFEFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEC887DED9A0ACA9771E1C04020200020500343615838659 6265335A5C223E3F0C0E0A001813021C1507120C00736C3CD2CA8AD3CB80D5CD79D8D278D6CD75 D7CE79D3CA7DCBC27C777029D5CE88D0CA834B4700B0AA60E2DB8EDBD484EBE18DDDD27CE2D782 E2D987DFD786E3DB8AE6DE8DE9E190F2EA98E9E190E4DC8BEDE594F4EC9BF0E897ECE394EFE89B F0E99BF6EFA1F1EA9BE5DC8EE3D98AEADF8FE6DB8BEFE393F7EA9AF1E493EDE291E8E08FE7DF8E EAE291E9E190EBE392EAE291F6EE9DF2EA99E9E190EFE896E7DF8EE4DB8CE7DE91E8DF90E5DC8C E5DD8BE9E18EEDE592E6DE8BF1E998DFD687E4DB8DF2E89AE0D885F4EC99F1E899EFE599F5EBA3 F2E8A1F6ECA4FAF1A8F6EDA0EBE292E6DE8AE7DF8DEFE697F0E798EBE293EAE194F1E89BF4EB9F F4EB9FF6EDA1F5EBA1EBE296F1E79DF7ECA0F4E999F0E496EDE193EBE191EBDF91E8DD8FEEE393 E8DD8EE9DD90F5EA9BF4E89BE8DD90EFE396F3E79AF0E597EEE393EDE293F8ED9DE6DB8BD8CD7A EADF8EEFE492F0E691E5DA7FE7DC80E2D77AE7DE7EEDE484EAE180E7DD7EE9DE83F2E78DE8DC85 E9DD86F3E697F2E49AF1E397F8EC9BEEE28DE1D67EEEE28BF3E790F3E793F1E495F1E397F3E69C F5EA9AF6EE98F2EA95EEE693F4EC99F5ED9CF6ED9EF7EE9FF0E79AEDE499F1E79EEEE49DF4ECA1 F2EB9EF0E99BEEE798EDE595EDE594F8ED9DF1E697EEE294F1E399F4E69CF5E79CF5EA9BF2E798 EEE394F1E697F6EB9CF0E697E9DE8FE8DD8EEADF90EFE495F4E99AF6EC9EF3EA9DF0E79AF6EDA0 FCF3A6F1E89BE2D98CF1E89BFCF3A6F4EB9EF0E79AF9F0A3F7EEA3F0E79DF0E79CF7EEA4F8EFA4 F2E99FEEE59AE8DF94F8EFA4EAE197F7EEA3FDF4AAF3EBA3FAF3ABE4DD95C7C279D5D18ACBC984 ACAB6A9292549E9E654F4F1A7575437476455B5E3041402456543532300B160F008E8B4FF5F3A2 EFE9A2F9F2A4E7DF939A8E56605C3098986E77764573723A999858F0EEA5F0EAA0EAE396EAE194 EEE296EFE298F2E69BE8DD8FEFE697EEE596EEE598F4EBA0F6EEA3EEE49CFAF0A8F6ECA5ECE29D EEE3A1F3E9A3F6EDA1F3EA9DF1E89AF3EA9BEEE596F2EA9AEAE291EBE390EEE693E5DD8AE9E18F F3E9A1F1E6A5F7EAA5FAEDA4F1E495E8D886F3E58FDBCD77DDD17BDDD37DF2E996BBB360E1DB83 EFEA94F6EF9EEFE79DF1E99FF4EFA1F1EA98F8F1A0E1DA8ADDD58EDCD294C4BB79D0C876F2EBA4 DAD5A074704A1C18014B4B2B4F4F26807F47A2A05BB5B263ECE592EDE590EAE28DE2DA87E9E190 F3EB9AF2E99AF5EC9CF0E896E9E28FE7E089E3DC83E3DD81EDE68CE8E187E8E289E1D985D9D17F EDE495E3DA8DEBE294E9E091E8E08FEEE694F4EC9AF3EAA0F4EAA2EFE59DEDE39BF3E8A0F5EAA2 F0E69EF0E69EEEE49CEDE39BF2E8A0F5EDA0F4EE9DF7F0A1F8F0A5F6EEA6EDE49EE5DC98F1E8A5 FFF7B4FFF6B3FCF3B0F9F1ABFCF2A9F7EBA0EDE497F0E799F8F09FF9F2A2FFFAAAF2EC9DF2ECA0 FCF6ACF9F2ACF7F0ABFDFAB5F5F0ABF9F5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2 F9F9DEECECC3E9E9BDEBEABDF5EDBDF6EFC3F1EFCBEEEECDF1F1D2F9FAE4FFFFF5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF4F7FAF0E6F2EFD4EEEFCDF1ECCDF8E1CAFADCC5EDE6BF F3E9C7FDEBD7FFF8F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBF2DBA0DAA06DC16D53B45155B95175C96FBDE5BCE4F5E4FCFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFF5DBADE4A674C77052B3514FB14E62BB618FD38FCBEBCA FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED58FD5CD8ED6D199A39F6E6966421717001D1E03 1C1E004F5219B7BA799B9C59747035B6B074CCC4906C613B190F006A6032CFC882C9C373D2CC75 D5CF74C1BC62D3CA7AD2CA7F9C954CAFA860E5E2997370316C6821E2DC91D3CC7FEADF8FDDD27E E7DB86EBE090E2D98AE7DE8EEFE797EEE595ECE394ECE394E9E191F5EC9CFBF2A3F3EA9BEDE495 EBE497EDE599F5EDA2F4EDA0EDE597EEE497F7EC9EF2E798EEE293EEE192EFE293F3E999F2E999 F3EA9AEBE293E4DB8BEEE595E0D788E2DA8AF2E999EEE596DFD787E1D889E2D98CE7DE91EDE495 ECE493E5DD8AE1D985DBD37EDDD581E2DA88E1D889E8DF90E3D98BECE491F3EB97E6DD8EEBE296 FAF0A8F4EAA4EEE49EF4EAA3EEE598E5DD8CE9E18CF2EA96F3EA9BEBE293EBE294EFE697EEE596 EEE597F1E899F5EC9DF2E99BE9E092EBE293EEE493EEE391F0E493F5E998F5E998F1E594E9DD8B EEE291E8DD8BE9DD8CF3E796EEE291F1E797F7EC9DF8ED9EF1E696EEE392F3E897F0E593EDE38F DFD57EF1E692F3E995EAE089F1E58DF0E389E8DB7EEFE284F6EA8BEFE384F0E485E9DC80E9DC83 F2E48FECDE8CE0D082E1D185EBDC8EF5E794E3D57DE4D87CF1E487F4E78CF9EC95FAEB9AF6E699 F1E395F7EC99F5EE97EFE890EDE590F4EC98F7EF9EF1E899F6ED9FF5EC9FF4EBA0F5ECA2F0E69E F0E89DF1E99CF3EC9EF5EE9DF7EF9EF8F09DEEE392F1E696F5E99BF7E99FF2E49DEFE199F1E397 F3E69AF5E89CF6E89CF6E99DF2E599F2E498F6E99DF0E397EFE296F9ECA0F9EFA4FAF1A6F9F0A6 F5ECA2F5ECA1F1E89DE0D78CECE398F7EEA2F4EBA0F3EA9EFBF2A7F7EDA4F0E69EF3E9A1FCF2AB FDF3ABF5EBA2F7EDA6F2E9A1F3EAA1F3E9A1FAF0A8F1E7A0F2EAA2F6EFA7C7C078C6C078CBC77F AFAC68AFAE6D9F9F6178773E6C6D376F6F3D7E804F56582E3534194B492A312E0A100900A19D60 EEEC98F9F2A8DDD583EBE392AEA265433F0F63643847461478773EA1A15FDDDB93F0EA9FEFE79A EEE598F2E69AF4E69CF3E69BEDE393F2EA9AEEE596EFE699FDF4A9FFFCB1F5EAA3F7EDA8F1E7A2 F3E8A5F9EEADF8EEA7F9F0A3F3EA9DECE395EBE293EEE596F8EF9FECE493E9E18EF2EA97F0E895 F3EB99EDE49BF3EAA4F2E79DEDE091F7EB96F7E891E6D67FDBCE75E5DA82E9DF89EAE28FA9A150 D8D183E7DF93F1E8A0E4DA95E6DE97F0E99DF6EF9EF5EE9BEAE393DCD38BD8CE90DCD391DDD687 E0D897EAE4B64D482B28230C74745554532788884BA2A156BFBB67E3DD85DBD37AF1E791F2E894 EFE594F2E797F4EB9DF0E79AE4DB8BE2DA8AE9E18FE8E08EE6DF89F0E991F3EC93EAE38BE5DD8A EBE391E4DA8BE7DE91EEE598F1E899EEE695EFE795F6EE9CF4EBA1EDE39BEFE59DF4EAA2F0E69E EAE098FBF1A9F3E9A1F3E9A1F4EAA2EDE39BE6DE91ECE594F5EE9EF7F0A3F1E9A0EDE49FE7DE9C E9E09FF3EAA8F7EEABFCF3B0FCF4AEF7ECA5FBEEA7FDF4ACFDF4A9F8EFA1F1EB9CFAF4A5F8F0A5 F7F1A6F8F1A9F7F0AAFAF2B0FFFBBBFAF5B5FCF7B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF3F8F8E3 F7F7D3F1F1C2E6E6B2E4E4ADE8E7B4F7F6D1FDFDE7FEFEF6FDFDFBFEFEFBFEFEFCFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFCFEFDFBFDFEFBFEFAF7FEEDEAF9E2D5 E9E4B7F0E4B6FCE6C2FAF0D9F9F6E7FDF8EEFFFAF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFFFCFFBEE0BE6EBF6D60BA5F75C2746FC16E6EC26C84CD83BFE6BFF9FCF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFDFFFDBAE9B56ECD6664C45F73C57377C4776BBE6A5CB85B A7DAA6F5FDF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D686EEE598E0D792F5EDB3B9B682322F05 393609999860C9C986D1D284D9D887D9D487D7CF8DD7CE97E2D8AA716639160D00A59C5EE6E095 C8C46ED6D378C5C267D7D07CCCC376B9B2648B853BDCD88FB3B266363300AAA65CD5CE82E1D687 DED181DACD7BF0E595E4DB8CE7DE8FEFE697E9E091E0D788E4DB8CE4DB8CEDE495F0E798ECE394 ECE396F0E89EEFE79CF7EFA4F7EFA4F1E99CF1E79BF0E398F0E596EBDF91EADD8FF4E798F5EB9B E7DD8EF1E899F7EE9FF0E798EEE596EDE495E1D889DFD687E8DF90E1D889DFD687E7DE93E3DA8F E1D889E6DE8DE9E18EE7DF8ADFD782E5DD89E1D987E4DB8CE5DC91E7DE8FE4DD89EBE38FEBE393 F0E79BF0E69FE5DB96F0E6A0F0E69FE9E093E2DA89EAE28DF3EB97E9E091E2D98AEBE293F3EA9B F0E798EAE192E9E190EDE594EDE593EBE390EAE290F5EA96F3E791ECE08BEEE28DF3E791F6EA95 F1E591F5E993ECE08BE8DC88EEE28CE6DA86F3E896F7EC9AF5EA98EDE290EADF8DEFE490EDE38D F5EB94EDE38CF5EB94F0E68FEAE089FAEA97FAEB96F4E68EF5E78DF7EA8EF3E68AF4E78BFAEC95 EDDE8AF0E18FF5E599EADA8DE9D98BF0E190F5E790E5D87CE6DA79F4E786F3E686F7EA8FFCEE99 FCED9CF4E597F7EC96F5EE94EFE890EEE691F4EC97F1E996F6ED9EF5EC9DEDE497EEE59AF8EEA5 FCF2AAF2EB9FF4ECA0F4ED9DF5EE9EF6EF9CF7EE9BF5E997F1E696EFE397F0E29AEEDF9AEDDF97 EEE096F1E398F8EA9FF6E89DF4E69BF3E59AF3E59BFAECA1F5E79CF0E297F8EA9FF9EDA5EFE49D E5DB93EDE39BF6ECA4E8DF95EAE196EFE69BF3EA9FF5ECA1F5ECA1F3E9A0F3E9A2EFE59EEFE59E F6ECA5F6ECA5EFE59FFDF3ACF8EEA7EFE59EF8EEA7F5EBA4E4DA93F3ECA4E9E29AC8C179CDC87F C9C57E9C9A55B3B2719D9D5F5B5A228D8D5864643281845356582F3F3F26514F323C3915100901 B0AC6DF0EE97F5EEA0AFA852C8C069E3D796BCB9876162355E5D2A5E5E2271712FD9D78FEFE99D F1E99CEFE699F3E79BF6E99FF1E59AECE192F4EC9CF5EC9DF3EA9DF4EB9FF2E99EF7EDA6F2E8A3 EBE19CF3E8A6F4E9A9EBE19BF5EBA0F0E79AE9E093EBE292ECE394F9F0A0F2EA99EDE592F7EF9C F4EC99EFE794EDE695F2EB9BF1E895F1E68FF8EA91E7D87BD4C56AEDDE83EEE18AF5EA98E4DC8E 989146F3EAABF9F3B9F1E6ACFDFCC4A69C5E7D752EFFFAACE8E28FDCD584CCC578D4CB88F2E9A5 E1DA8FEFE9ABE5DDB3251F0F2C2714848365737344959653B4B261C9C46CE5DE83DED67CF2E88F E9DF89F0E592FCF1A1ECE497EBE295E1D88BD7CE82DED588EDE495F2E99AE4DD86E9E288E5DE86 E8E08DF1E896E3DA8BE9E093EBE295F1E799EEE695ECE491F1E997F3EAA0F0E69EF4EAA1F4E9A1 EFE49CF0E69EF9EFA7F1E79FF6ECA4FAF0A8EAE098DED687EBE592F5EE9DFAF2A6F5EDA4F9F0AB FCF3B1F5ECABF1E8A7F3EAA7FCF3B0F7EEA9FBEFABFFF4B0FEF5AFF6ECA5F0E79CEFE79CF0E89D F6EFA4FAF3ABF8F1ABFAF3ADFFFAB8F5EFB2F6F0B4F9F3B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFEFDFCFCF7F1F1D4 E8E8B5E7E7ADEBEBB9F2F2D8F4F4DDF5F5E0FCFCEEFFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9F9 FDF4F0F6F4E2F9F4D8FCF3CEEFECBEEEE7BBF9E7C8FFEFDFFEFCF8FFFFFDFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEFAFBFAF0EEF0A3CFA251B35076C575BBE1BBA5D9A578C7774DB54B97D496F1F9F1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFAEBFFEB99DC964BBA4775CD73B6E7B6C3E8C398D298 44B04289D288E3FCE3F8FFF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D57DE7D984DDD281E3D892655E1F 423B0DA9A469DAD695D8D688CAC86FD2D073D1CC75CEC77CCAC084E0D4A6D4C89E211700685F2E DEDA92D1CE7BD1D075D7D578CDC771E0D686D0C87A767025BCB86FCFCC83555113736E25EDE69C CDC377E0D384D8C97AE8DD8EE0D888E3DA8BE7DE8EE6DD8EE8DF90E9E091E5DB8DE2D98ADDD485 DFD686E9E093EBE399EDE59DF8F0A6F8F0A5F2E99EEFE69BEADD92EADF90EBDF90EDE192EEE193 EFE495E3DA8BE4DB8CEEE596EFE697ECE494EDE595EDE595DED686D5CD7DE3DA8BF3EA9BF1E89C E5DC90E1D88AEDE594EFE894E5DD86E1DA83E4DC88DDD583E4DB8DDDD589E3DA8CE4DC88EBE38E F0E896ECE397E6DC93E7DD97EFE59FEFE59DEAE195E6DE8CE9E18CEEE692E4DB8BE3DA8BEEE596 EFE697EBE393EEE695EEE693EAE28FEBE390EEE691E9E18DEEE48EEEE38BE9DD86ECE08AF2E78D F0E48CF5E992F8ED94EBE087E6DA83EFE48BEDE08AEAE08BF0E591F3E995EFE591EAE08BE8DE88 EEE48EEEE48EE9DF87F0E68EEAE087EFE58DF0E192F5E596FAEC9AF2E48FEFE18BF7E992EEE18B EBDC8AF2E394F5E599F7E69EF9EA9EF8E99AF0E18EF6E890F2E688E8DC7AF0E482EADF7EE6D97C EFE18AF7E996F3E594EDE38DECE58CECE68DF1E994F8F09CF3EB97F5ED9DF5ED9EF0E799F1E89D F9EFA6F9EFA6F5ECA1F3EC9FF1EA9AF0E999F0E895F0E893F8EC9BF6EB9BF6EA9EF6E9A0F4E5A0 F2E49EF3E69DEFE199F2E59CEFE299F1E39BF2E49CEBDE96EEE098F3E69CF7E9A0F5E79EF5E9A1 F4EAA3ECE29CE9DF98EDE39BEAE198EDE49BF0E79EF8EEA5FCF3A8FAF1A6F3E9A1FAF0A9F6ECA7 F2E8A2F0E6A1EEE49FEBE19BFCF2ADF6ECA7FAF1ABFBF3AEEBE19CEFE6A0EBE39BDBD58CE2DB93 C3BD74BFBC7393924CC0C07EA3A3657A7A4088885261613080825262663D43432B48462A42411D 171104B6B273F9F8A3E9E292D9D279CFC66FF0E3A0C9C5929C9C6D50501A7D7D41585619C9C77F EBE69AF0E99AEEE697F3E69AF6E99FEDE196EEE494F1E999F2EA99F3EA9CF2E89EEBE298ECE29C F2E7A3EEE4A0F4EAA8F1E5A5E2D893EFE69BF1E89CF4EB9EF7EEA0F0E799F3EB9CEBE393EFE795 F8F09EEEE694EAE28FF5EE99CEC970C1BA60E4DA7FEEE185E8D97DF7EC91F6E791F9EC9BCCC275 9D9552F0EAA8E5DBA7A69A6CAB9E728D81518A80498F8644F3ECA1E5DE8ED6CF7ED2CA7EE4DB94 F3EAA4EBE59BFDF7BD9C96700E0900403B265C5B3D84845382823EB8B664D4D075F5ED92E7DD82 F4EA91ECE28BE9DF8CF5EA99EFE698E8E093E7DE92DCD289E0D88DEDE69BDFD88BDAD27DD2CB71 E0D980E0D885D4CC7AE3DA8CEEE599E8DF93ECE395F0E797EFE795F6EE9DF7EBA0F4E89FF5EA9F EFE39AF2E59BFCF1A7EBDF95EEE298F7EBA0FDF0A5F5E89EEEE798F8F2A0F5EE9DF7F0A2F1E9A1 F2E9A4F7EEACFAF1B2F8F0AEF8EFAEFBF2AFF4ECA7F7EBA9F8ECA9F8EEA8FBF2ABFBF3ABFAF2A9 F5EDA4F8F1A8FAF3ABFCF5AFFBF4B1F8F0AFF8F3B6FBF5B9FBF4B8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFFF6EEFBF4E4F4F2DA EBEBC3E5E5B2E6E6B3EDEDCAFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFF7FDFEE5EEEFC4EDE6B5F8E5BBFBEAC9F5F3DBFAFAEAFFFFF6FFFFFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9FFF9EDFAEED9E5D990C78F4EB24D90D18FEFF8EED9F1D998D6983EAE3D7EC87DDAF0DA F9FDF9FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFF1FBF1C4EEC479CC7844B24391D791EAFEEAFAFFFA BFE3BE48B2477ACD79CBF4CAE9FDE9F6FFF6FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6C97AD7CB7BC4B967C3BB6C 5E550B938B45DDD68FCDC77CDCD881D5D270DAD871C9CA65CFCD78C3BE79D9D29ECDC499322909 3B3203DFD897D4CE82CECA77D1CC76D5CE7CDDD282D8D07F787121A39C4FD2CB83A59E5A3D3606 C9C27DD0C87DD2CA78DAD27AD6CF78D7CF7BDDD581E5DD8BEAE290EDE594E8E08FEFE697E8DF90 DAD182E3DA8CF8EFA2E3DA8DE4DB91E4DB8EEBE295EFE699EDE498EEE497EAE093E3DA8CE3DA8D E6DA8DE4D98AE7DC8CE7DC8CE1D686E0D583EBE08EEEE392F2E896F0E692EBE18DE3D985E9DF8C EEE394F4E99AEBE091E9DE8EF3E998E5DB8AE9DE8EDFD585E5DA8CE9DD91E5DA90F6EB9DE6DE88 EDE68DEAE38BDFD783E1D987EAE293EFE697F7EEA1EEE598E2D98BEFE69AF0E899E8E08EE2DA89 E3DB8AE8DF90EDE494ECE394EDE494F2E999EEE695EBE390E3DB86E7DE88E8DD88E9DF89F1E792 F0E68FECE28CF6EC94F2E790E9DF88EBE18AF4EA93FBF099EDE28FF1E694ECE18FEADF8FEEE390 EADF8DF2E795E9DE8BEBE08DECE18EEADF8CEFE491F3E79AF5E89AF7EC9CF2E697E9DB8DE4D989 EADF8FEEE192EADE90E9DC91EDDF94F1E498F7EC9CF5E996EEE28FEEE48EF0E48EF5EA93E7DD86 F0E48FF8EC99EFE492F5E899F1E696F3E997EEE491EFE590ECE38EF8EF9AFAF09CFCF29FFAF09E F8ED9FF8EC9FF7EE9FECE395F8EFA0FEF8A7F7EF9EEEE695F3EB9AF9F09FF0E897F2EA99FAF0A2 F8EC9EF0E69AF0E599EFE399EBE197E9DE97F3E6A0EEE39CECE19AF4E7A1F6EBA1F3EA9FEFE398 EBE199FAF0A9F7EDA6E0D78DE2D98DEFE698E9E092F4EB9DF1E89BF6EDA2FBF1A9FFF7B0F0E39D F6EBA3F8EEA7F7EDA6F3EAA2F1E9A0F2EAA2E7DE97FDF7ADFAF3ABE7DF97DED88EE0DA8EE0DA8E D1CE82CFCC80A4A257B9B96FBABB74B2B3729A9C5F686A329799637274437D7F542324063C3F22 4E5030121206C4C186F4EEA4E3DA8BE7DE8FF6EEA4B7AF71827F496463306E6D369C9A5FACAB69 ECE9A4F0ECA3F7F0A6F2EA9FF1E79CF1E79FEBDF95F8ECA0FFF6A9F2E99DF3E9A0FEF6AFF6ECA7 F2E9A5FAF1AFF8F0AFFBF3B2F6ECAEE9E19EF2EAA2F2EAA1F2EAA4FAF1ADF8EFACF7EEAAF2E9A3 F2E8A0EEE59AECE395EFE498ECE596EBE598BEB76CA9A057998F4C9D9251D7CF8DDFD695A09858 4D4706555113E8E6A3BEBC7E2623006A662BA6A163E9E3A2E3DB94DDD38BE3DB8ECEC778E6DE93 E4DD93EAE39DF4EFB2FDF9C447451D1916025E5C38504F2772713E918E50B8B36BD8D181F2EA95 F8EF9AFCF4A0F1E995EAE08AF6EC96F2E890F4EA93F7EF9CFCF5A4EBE496EBE89BE1DC8EC6C066 DED877DBD47BEBE38FE2D98DF1E79FF5ECA6E2D892EBE19AE6DD91E6DD8EF3EC9CEFE99FF3EDA4 EEE89EEBE29AF4E8A0F9EDA5EEE097F5E99EF9EE9FF6EE9EF4EB99F6EE9EFDF4AAF6ECA3EBE29A F2E9A3E8E19DF1EAA7EDE7A6F9F4B4FAF5B5FCF7B7F9F5B4F3EBAAF8EEABF4ECA5EFE79EF5EFA3 FEF9ABFBF4A7F8F2A5FAF4AAFBF4ADF7F0ABF3ECA8F4F0AAFAF5B1FFF9B6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCFEF8EFFFE5CCF3E0B4 E6E2ACEFEFCEFAFAEEFBFBF4FCFCF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFAFCFCF7FCFBEDFDFADDF4F1C3E6E5ADF0F0C3FEFDE1 FFFDF4FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FEFEFEFDFFFDEEFFEED7FAD8B7E4B688CB876ABB69A5D6A5F4FAF4F6FBF6CBE8CA6DBF6B7AC779 AADDA9E1F3E1FBFCFBFEFEFEFDFDFDFEFEFEFCFDFCE1F2E183CA835FB95F64BA63B2DDB2F5FBF5 FAFDFAC7E7C769BD687CC87BACE1AACFF5CFE8FDE8FAFFFAFFFEFFFEFEFEFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED489CEC576D5CD7B E2DB894F4801837B36DBD48DC0BA6FC3BE6CCFCB71CDCD6DD5D577C1C06FCFCB8CC1B9895C5329 0100004B4215DED696D4CD84DBD384DDD685D5CC7BC9BE6EE2DB87A39B4982792BD3CA83CAC181 534A0C948D4DCCC67BD3CE78D1CE71D3CC72D8D179E1DA82E8E08BE6DE8AE0D885E5DD8CEBE393 ECE394E9E091EBE294EFE699E9E093EFE699EFE699F1E89BEEE598E6DD90EBE295EBE295E5DC8F E7DE91E8E092EBE192EFE495E8DD8BE3D886E3D886E5DC86EEE48EF0E691E8DD86EEE48DE7DD86 E2D881F4E996F1E696EEE392EFE493EEE393EBE091ECE192E4D88CE9DD91EADE91E5D98FF2E799 EDE68FEEE78DEEE78EEDE68CE9E28AE6DE89EAE38FE9E090E6DD8EE6DD91F5EBA3EFE69AEAE28E ECE493E9E190E8DF90EDE497E8DF92E1D88BE9E091EAE292EFE794F0E895E5DB88E0D583E6DB89 EEE48FEBE18CE9DF8AECE28CEAE089E6DC86E6DC85E7DD86E9DF8AE6DB89EFE495EDE292E9DE8E EFE494F3E898EFE494EFE494F6EB9BF5EA9BF3E898F7EC9DECE094F0E498F2E69AF2E69BF2E79B F2E69BF2E69AF7EB9FF2E69AF0E498EFE397EFE494F3E898F2E797EDE292EFE495F0E595EFE494 EBE090F3E898F2E797F4E999F3E898EFE495F2E798EEE392F0E594EAE08AF3E992F4EA93F3E992 F4EA94F6EB9BF7EC9CF8EC9DF5EE9DF4EC9BF0E897EFE796F0E897EDE594F0E897EDE594F2EA9A F9F1A0F5ED9DF2E99AF6EDA0F7EFA4F6ECA3F2E8A1FCF2ADF7EDA8EEE49FE5DB93E6DC94ECE398 EEE598F0E69EFBF1AAF5ECA2E4DB8EE6DD8EEBE392E7DF8EF1E998ECE395F4EBA0F6ECA5F4EAA3 F1E59DF2E79FF4EAA2F5EAA2F3EAA2F2EAA1DFD78EECE59CF5EFA5E8E298E9E399E4DE94E4DE91 DEDA8BCBC879B7B666BCBD6FBBBD71AEB068A3A762909354909458797C45676835434419343713 363B1E53593A151708D2CE97F2E9A5E9E093F5EBA2F2EBA6A9A56A8F8C574F4F1A818048C5C388 CECC8CE4E19DECE8A1F1ECA3F0E89FF1E79FF6ECA4F2E8A1ECDF95F5ECA1FFFFB4F0E69FFAF1AB F8EFACF7EDACF9F1B1F6EEAFFAF2B3F8F0B1F0E8A6F4EDA7F0E9A5EDE5A5F7EFB0F3E9ACF5EBAD F3EAAAF0E5A3EEE49EF0E79CF2E79AF0E89EF3ECA4E4DD9AF9F4B7D4CE958F88555B55246F6A35 7F7A43838144888745BAB9768F914C6D6E27DEDF96F5F2AAECE69DE3DB90EFE69BF4EBA0E2DA8F EEE69BE4DE93F3EEABF7F3BFCDCB9A211F002C2B106261354B4A1C63602D999459BCB673E4DD90 F8ED9DF3EB9BF8F1A2F3EA9CEBE28EF3E993F4E991F2E78FE9E28BF2EB9AF9F3A7F4F1A8ECE9A0 EFE994FAF499E9E18EF0E799F4EAA1FFF9B3E7DC9AE7DD99F1E7A0E0D78CDED587E8E190F0EDA4 F8F5ACF1EDA4ECE49CEFE49CF3E69EF8EAA1F8ECA0F6EB9CF2EA97F2EC98F2EB9BEAE098E7DD96 E3DA92F2E9A4F0E8A2FBF4B0F0EBA8F7F3B2F3EFAFF4F2B1F4F2B2EBE7A6F4EDA9F8F1AAF7F1A8 FAF4A8F9F3A5F8F2A4F6F0A3F7F1A6F9F2AAF9F2ADF8F0ADF7F3ACF8F4ACF6F2ACFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAF5F4DFF0E9C3FBDEB9 F8E2BDF1ECCBF7F8E8FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFEF1F9F9E1EFEFCCEDEDBE F0ECBCFBECD0FFF3E7FFFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB F2F2F2F2F2F2FBFDFBECFFECCEF7CE95D7947ABB797EAE7EBAD0BAF5F7F5F3F4F3D1E4D18FCE8E 6DC26C6BC26ABADCB9E8EBE7EEEDEEEDEDEDEDEDEDEAECEACAE0CA59B65860B65F95C795CCDDCC EEF0EEF6F8F6CBE9CB6DBE6C6ABE6988CC87C0E2C0E5F2E5F9FBF9F7F6F7F0F0F0F8F8F8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCD282D3CB78 DBD381ECE4968A823B3127009F965BDAD197D3CB8CD4CD87D4CE87DAD692E6E2A7ACA5755C5228 1D1100211600918851DFD790D6CF81D6D07DD6D17CD3C978CABF6FE1D986CCC472817829CAC278 E7DF9C8B81456B6428DBD58CDCD784D4D175E1DA82E1DA82E4DE85EBE38EEFE793F0E894EDE594 EBE393F0E798F3EA9BEDE496E3DA8DDDD487E1D88CE6DD90F1E89BF8EFA2F4EB9FF0E79AF1E89B ECE396EBE296E9E093E8DE8EE4D989DCD17FE2D785EADF8DE8DE89EFE590F1E792E7DD85F1E790 F0E68FE2D882EDE28EE7DC89E8DD8BECE18FE8DD8CEEE393ECE191EADF8FECE192E9DE8FE5DA8C EADE8FEFE792E4DD86E1DA82E8E18AE8E08BE3DB86EBE390DFD686E1D889E7DE91F0E79BE3DA8B E7DF8BEDE594E9E190E3DA8BE7DE91EAE194ECE397EBE293E5DC8CE7DF8CEBE38FE2D885DFD483 E7DC8AEAE08CE6DC87EAE08BE2D883E6DC88EBE18DEAE089E8DE87E6DC86EADF8DF1E696F0E595 EBE090EEE393F3E898E8DD8DF0E595F4E999F0E595EFE494F5EA9AEDE095F2E69AF1E599F0E498 F6EA9EFBEFA3F3E79BF4E89CF0E498F0E498ECE094E8DD8FEEE393EDE292EEE393F4E999EFE494 EADF8FECE191F4E999EDE292F3E898F0E595F4E999F6EB9CF3E897F7EC9AEFE58FF3E992F6EC94 F0E68FEEE490F3E898F4E99AF0E596F3EA9BF1E899E7DE8FF1E899F9F0A1EAE192F1E899F6ED9E FAF1A2F9F0A1F4EB9CF1E89AF1E89BF5ECA1F6ECA3F2E8A1F9EFAAF7EDA8F5EBA6EEE49CF0E69F F5ECA2F4EB9EF5EBA2F7EDA5F2E9A0F0E79BF6ED9FF1E998EFE796F2E99AE8DF92F3EA9EF9EFA7 FDF3ACEEE29AEDE29AEEE59DF4EAA2F6EDA5F5EDA4E7DF96EDE69CEEE89EE9E399EFE99FE1DB91 E6E094D1CD7FDDDA8BC4C275CDCE829FA055C2C37BAEB16E979A5CA8AC717A7D46787A47333308 6B6E4A383D2044492B16190AD1CD96F3EAA5EFE69AF0E69BF3ECA7E4E1A47C79433A39095D5D27 D7D59AD1CF8FE2DF9BE6E29BEAE49BEBE39AEFE59DF5EBA3F6ECA4E3D78CE8DD93F8F3A9FFF7B0 FEF6B1F4EBA6F4EBA8F3EBA9F2EAA9F5EDAEF6EEAFF3ECABF8F0AEEEE6A4EDE5A5F8F0B1F2E8AA F3E9ABF0E7A6EBE19BEFE59BF4EB9DF4EA9AF0E99BF4EEA3EEE7A1EEEAABCCC387A8A16ABDB781 DDDAA5C3BE83A7A666BDBC7994944E9D9D57CDCD86E6E39BE2DD93EFE79DD8CD82FCF0A5F8EDA2 EFE69BECE39BDED68CF4EDADFAF5C78F8C5F0D090043411D6462396F6E408C8955AAA668C5BE79 F7F0A0FBF09EEEE698F1E9A0F4EAA0EEE497F3E798F4E798F8EC9DF5ECA0F3EAA3F2EBA8E3DDA0 ECE7ABF6EEAAFBF1A9F2E8A1EFE4A0F4EAA6F5EAA6E6DC95F7EDA3FBF1A5E4DC8CE9E18DECE594 DBD88FE9E59EEBE7A0EEE69FF7EBA4FAEEA6FCEEA6F8EBA1F2E799EDE695F0E999F3EB9CF0E59A F5ECA1F8EEA5FAF0A8E4DB93F3EBA6F3EDA9F8F2AFF4EFADF8F4B4FBF7B7F4EEAEF6EEAEF5EDAC F7F0ACFCF5AEF4EEA4F6EFA5F7F0A8F6EFAAF8F0AEF9F1B0F4ECADF9F4B2F9F4B3F6F1B1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBF8F8EAECECC2E6E0A4 F9DFB7FEECD7FEFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFCFCF6 EEEECAE6E0A6F8DCB1FEE7CEFFF6EEFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7F7E7E7E7E6E6E6FAFBFAECFCECC8F0C873C6726BAC6B92A592CFCDCFF5F5F5ECEDECD4E0D4 B3DFB36CC26A3CAC3A94C793D2DBD1E0E0E0E2E1E2DFE0DFD3DCD2ACD0AA3FAC3D6DBA6CC7D8C6 E3E0E3E8E8E8F2F4F2CFEBCF73C27259B65765B964B8D3B8E7EAE7F9F9F9F1F1F1E7E7E7F4F4F4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF9F9F9F6F6F6FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3CB74 DAD37BD5CC78DFD78BD3CA89655A262A1E0053481C7C72439A905E9D94628F875A71683F2B2106 1006012216004E4420E5DC99DED788E0D886D5CD78D9D17EDCD281D0C575D0C977D7CF7B887F2F AFA75DE2D997B9AF716D6526E7E098D9D483DEDA81E9E28AE4DC88E3DB86E8E08BF1E995F5ED9A F4EC9BEFE796ECE493EEE596EEE596ECE394E8DF90E5DC8DE2D98AE8DF90F0E798F0E798F2E99A F2E99AEDE495EDE495EBE293ECE293EFE494E5DA88EADF8DEFE492E8DE89E5DB86ECE28DE6DC84 EBE18AE8DE87DED47DE0D680E9DF89E5DB86E1D782EAE08BE5DA87E3D886E8DD8BE9DE8DE7DC8C E8DD8DE8DD8DEBE38FE8E18DE8E08BEAE28FEBE390EAE28EE4DC8BE1D988EBE392F0E897F5ED9C EDE592F1E995EDE594EBE292EBE293EDE497EEE598F0E79AECE394E5DC8CE9E18EF0E895EEE590 EBE18CEDE38EEBE18CE7DD88F0E691E3D984E7DD88EEE48FF0E691EDE38EE9DF89F3E896ECE192 EDE292F3E898F2E797ECE191F5EA9AF9EE9EF4E999EDE292EEE393F3E898F2E59AF8ECA0F6EA9E F0E498F1E599F4E89CF2E69AEFE397E9DD91EBDF93EADD92E7DC8EECE192EDE293F0E596F6EB9C F1E697EFE495E6DB8CF2E798F2E798EADF8FF0E596F4E99AF3E899ECE191EEE391E8DE89F0E691 FAF09BF2E793EFE492F4E999F6EB9CF2E798F3EA9DEBE295D1C87BD9D083F4EB9DF6EDA0F2E99C FAF1A4FCF3A6F8EFA2F3EA9DF2E99CF0E799F5ECA1F6EDA3F2E8A1F7EDA8F1E7A2F1E7A2F6ECA5 F5EBA3F1E89DEFE699F4EBA2F2E8A0EEE49BF6EDA0FDF4A7F4EB9CF5EC9DF8EFA0ECE396EEE59A ECE298F3E9A2EDE199EFE49CF4EAA2F8EEA6F5ECA4F2EAA1EFE79EE4DD94F3EDA3EEE89EE6E096 E0DA90DED88CC5C275DFDC8FD7D588B9BA6DA2A359C7C882A5A86595985A777B4181844D676736 54552A585A3634391B3E4323131605C3BF88F6EDA8EBE294DED589F2ECA6EEEBAD9D9A65686731 6C6B34D0CE93CBC989D4D08DEFEBA4EFE9A0F1E9A0F2E8A0F3E9A1F5EBA3EDE096EEE499F5ECA1 E0D68EAAA25AFFFDB5F1E8A3F1E9A5F4ECACF6EEAFF4ECADF3EBACFAF2B3EFE7A8F0E8AAFEF6B8 FAF0B2F6EDABEFE6A1EAE097EDE496F3EB9AF3E896F0E997F8F0A6F0EAA0D5CD8BC7C081EEE9AC ECE6ACF2ECB0EDE9AAE3E09DE2DF99E6E39CECE9A2EBE8A0E8E299F3EBA0E9DF92F5E89AF9EC9F F0E298F3E79DEDE39BE1D88FF2EAADE0D9B444401A0A06014D4A2456542D7A794C9D9C65959151 C2BD73FAF3A1E6DC87E7DF91EAE39FECE39DF3E7A0F9EDA4F4E89FF1E49EFCF1AEFDF3B6F4EAB3 F3ECBBF5F2C2E7DCA9FBEEB8F8ECB3EEE3A5F1E7A4F5EBA4E7DE91F0E798EBE391DFD784F1E994 F1E998E3E199E9E5A1E5E19AE8E09AF2E69FF4E8A0F3E79EF4E89EF3E89BEFE798F0E99BEEE797 E1D788EFE496F7EC9EF1E79CD1C87DE8E097F4EBA6FBF3AEF8F1AFFDF5B4FDF6B6FBF3B4F9F1B2 F3EBABF4EDAAF7F0AAECE59EEEE7A1F5EEA8F8F1ACFBF3B2FDF5B6F4ECAEF2ECAEF6F0B3F9F3B7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5E2E8E8B6EDEDBB F7F5CCFDF5E3FFF9F3FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEFAF9EEF7F1D9FDDFBDFFDEBBFFE5CAFFF4E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7F7F7E7E7E7E6E6E6FAFAFAECF1ECC2DCC251B35061B05FAEC3AEE8E3E8FAFAFAF9F9F9 F2F5F2E7F5E79AD49959B6578ACA88C3E2C3E8F0E8FBF7FBECF2EBB5E0AF7ACC714CB3498ACA89 E1EDE1FAF7FAF8F8F8F9FBF9DCF1DC93D39258B95646B044BCDEBCF4F6F4FFFEFFFBFBFBF9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEEEEEEDDDDDDCCCCCCE1E1E1FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DBD27AD5CE74DBD37FE3DB8FD1C789C1B48364582D3A2E0F291D00372C003428002B22070D0200 2A20135248239D9261C5BC7DE7DF93CCC572DCD47ED6CE7ADFD687E9DF90D8CD7ED4CD7BE4DC89 978F3E968F45D5CC8AD1C7897C7434C0B973D7D284DFDB85E9E18DEAE28EEEE691F1E994EEE693 EAE28FEFE795EAE291E9E190EDE495F5EC9CF9F0A1EEE596F1E899EEE596F0E798EEE596E7DE8F EBE293ECE394E9E091EDE495EEE596EBE192E8DD8DE7DC8AEBE08EEDE290EBE18CE4DA85EEE48F EDE38CEDE38CE9DF88E1D780E4DA82F2E891EDE38BE3D981EAE08ADFD57FDCD27FE7DC89E4DA87 E5DA89EDE291EADF8FDED683ECE491F4EC9AF2EA98EDE594ECE493F6EE9DEEE695F5ED9AF2EA95 F2EA94ECE48FF2EA95ECE493EBE392EDE495EFE699EFE699F2E99CEFE697E8DF8FEBE390EFE794 F3EA95F1E792EFE590EFE590ECE28DF0E692F3E995F2E793F2E893F5EA98F4E995EDE291F2E797 E6DB8BEBE090F9EE9EF8ED9DF0E595F8ED9DFAEF9FF1E696EDE292F0E595F0E595EEE296F5E99D F7EB9FF4E89CF2E69AF2E69AF3E79BF5E99DF0E498F0E498F1E599EDE194EFE495F2E798F2E798 F7EC9DF4E99AF5EA9BE7DC8DF1E697F1E697E5DA8BF3E899F5EA9CF8ED9EF0E596ECE18FE5DA88 F3E994F5EB96F0E692EFE492F4E999F9EE9FFBEFA1EBE296F3EA9EEEE598E9E093ECE396E9E093 EEE599F2E99CF4EB9FF4EB9FF5ECA0F5EC9FF0E79AF5ECA1F4EBA1EFE59EF4EAA5F1E7A2F4EAA6 F4EAA3EBE199E9E095F2E99CF7EEA2F1E79EECE398F1E89CF3EA9DEEE596EDE395EFE697EFE699 FCF3A8F6EDA2F5ECA3F0E49CF7ECA3F9EFA7F4EAA2EEE59CECE49AF1E99FF2EBA1FFFBB1E9E399 E4DE93F3EDA2D8D287CECB7EC9C679C3C174A4A459CBCB81BBBC76A5A765A9AC6E888B529DA06A 6363338283566366423E4324252A0B1E210BCCC98FF3EAA4E4DB8DE1D88CE9E29BB9B678605D27 61602AADAC74C8C68BCBC989DBD894EAE69FE9E49AEFE79EEFE59DEAE098EBE199F7ECA2D3C97F DFD78BCBC179887F36FDF5ACF5EDA6F2EBA5F7F0ACF7EFAFF4ECADF4ECAEF7EFB2F0E8AAF0E7AA FDF5B7FDF3B4FBF2AEF3EBA3EEE599EEE696F0E894F1E893EFE695EBE496ECE69AEEE79FEAE2A0 D9D292DCD697EBE6A7EAE6A4EAE7A1DFDC94D5D388DBD68FECE69DE1D98EEEE497E9DD8EEFE193 EDDF91E7D98DF0E299EADE97E8DE99EFE6AFA49C7C140E06231F0966643F6462396867377F7D44 878440D0CB7FF9F39FE1D780E7DF91E9E29EEAE19EF4EAA4FBEFA9F5E8A3F0E3A1F2E7AAFFF9C2 E5DFAEE3DDAFDFDCB34E4220A69867E1D49EF4E9AAE8DD98E8DF92E9E18FE6DE89E4DC87E2DA88 F5ED9AF3EC9FEBE9A4EDEBA9E9E4A0EBE39FF2E9A2F4E8A2EFE39BF4E89FF3EAA0F2EA9EF0EA9F F5EE9FF5EB9AF6EB9BF8ED9DF5E99CE0D78CF4ECA2F5EDA5FAF1ACF5EBA8F6EEACF8EEADF3EBAB F7F0B0F8F1AFF9F3AFF5EFA9E3DD96E8E29BF3EDA7F7F0ACFCF4B3FFFCBAFAF3B3F9F3B5FDF7BB FFFABEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF2F1F3D6EAEBC0EAEABE F5F5D3FEFEEAFFFEF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFDFEFAF5FFECD9FFE3CAFEDEC6F8E7CEF6F4E0FBFCF4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4DEDEDEDDDDDDF8F8F8ECEDECC1D4C043AC4260B75FC3DAC3F9F4F9FDFDFD FFFFFFFEFEFEFCFEFCBBE1BA77C5766BC16996D695D7F2D7FDFFFDE5F9E494D98E54C04C74C972 B2E0B2F0F9F0FFFFFFFFFFFFFDFEFDEDF8EDBEE6BE69C16638AD36B5E4B4F2FDF2FDFEFEF2F2F2 EAEAEAF5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F9F3E5F3E5DCF3DCD9F3D9 D9F3D9D9F3D9D9F3D9D9F3D9DCF3DCE5F3E5F3F9F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF2F2F2EBEBEBE2E2E2D5D5D5E6E6E6FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE0D780DED77EDCD480D9D185DCD391CFC48EB0A577B8AC80A095678E8451AAA16FC6BE93 4A4118847B4FE3D9A6E0D698DDD58AD7D17AD5CD73D7D078D6CE7DD6CC83DDD188E1D687CEC674 DDD581CEC676746D21D7CE8BE4DA9C8880418B8440EAE498E7E290E8E08EE5DD8AE6DE8BEAE28F EBE390EBE390EBE390E7DF8DEBE392F5ED9CF7EF9EF2EA99F1E899ECE395E6DD8EE8DF90EBE293 E8DF90E9E091E8DF90E3DA8BE8DF90ECE394E8DE8EE7DC8CECE18FEADF8DE7DC8AEAE08BE6DC87 F1E792EEE48DEFE58EEEE48DE2D881E4DA81E9DF86EFE58CEEE48BE5DB83E5DB84DCD27DE9DF8A E3D984E3D886F1E694EEE390E5DD8AE7DF8EECE493EFE696F3EA9BF5EC9DF2EA99E1D988EBE390 F0E992F5EE95EDE68DEFE791F5ED9CF4EC9BEFE697F0E79AEFE699EEE598EFE697EAE192ECE491 EDE592EDE48FEAE08BEBE18CF2E893EEE490EADF8EF5EA98EDE290E7DC8CF1E696F7EC9BF2E797 F3E898E9DE8EF0E595F8ED9DF3E898F2E797ECE191F1E696EEE393F3E898F6EB9BEEE393EEE296 F0E498F4E89CF5E99DF3E79BEFE397E8DC90F7EB9FF6EA9EF2E69AF0E498EDE194F3E899F9EE9F F4E99AF6EB9BF8ED9EF4E99AF0E596F2E798E6DC8CEBE191F6EB9BF1E599FCF0A3F8ED9EEEE393 E2D785F4EA95F2E893F1E793EFE493EEE394F3E79AF8ECA0F6EDA2F3EA9FF7EEA3F5ECA1F0E79C F3EA9FF7EEA3F1E89DF0E79CF3EA9FF5ECA1F7EEA2F5EC9FF6EDA2F4EAA1EEE49DF5EBA6F2E8A3 F4EAA5F0E69FEBE199ECE398F0E79AF3EA9EF0E79CF0E79CF2E99CF1E89BF5EB9EFBF7AAECE295 DED588F5ECA1F8EFA4F3EB9FEADE94F5EAA0F5EDA2EDE499ECE398F4ECA1F8F0A5F4EDA1EEE89C DFD98DE5DF93DFD98DDDD78DE4E194CFCC7FC9C77C9E9E54C3C47CB1B26CBABC7B999B5F8B8F56 797C46777846838455525530464C2C3136171F2207CDCA90EEE69EE6DD8FE1D88BE1DA93D2CF90 B4B17C63622C5B5A22B4B277DDDC9BEBE8A4E5E19AE5E097F2EAA1F5EBA3EEE49CF0E79FF1E59A F5EBA1DDD489D8CF84F4ECA1FBF3A8F9F1A7EEE79FEEE7A2EEE6A4EFE7A8F3EAAFF4EBB1EFE6AB ECE3A7F6EEAFF8EFAEFDF4AEFAF2A8F6EE9FF1E997EEE691F1E791F0E795F0E99AF1EA9DEBE39A F7F0A8E9E29DD5CF8AEDE9A4EFEAA5EBE9A0D6D489DAD78DD4CC84E8DF97E5DA8FF3E699F1E395 EEDE90EADA8CF2E398F8E9A3EADD9BF2E7A7F8ECBB51493718110049442675724F8F8E647B7A46 807F43AAA761E8E395ECE692EDE38CEBE395EAE29DEFE7A1F4EBA4F5EBA3F7EBA4FCF1AEEFE4A7 F4EAB47A723D322B1B423C1D1E1300B2A56FF4E8AEFEF3B0D4CC80DAD380E5DD88E5DE89F0E896 EBE396F3EAA0F3EBA7E6E3A5ECE9AAECE7A6EFE7A4F2E9A3F2E7A0F4E8A1F6ECA4F4ECA3F2EBA2 F4EDA4F8F1A4F2E998F4E999FAF0A1F9EFA2E4DB90FBF1A9F7ECA5F7EDA8F0E6A3F6ECA9FDF4B1 F8F0ABF7F3ACF6F1AAF2EEA6F4F0A8EBE79EF3EFA6FBF7AEF4F0A8F3EFA8FFFBB3F7F3ADFBF5B3 FCF7B6FBF6B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFF2F4DAE1E4A5E2E5A9 F6F7E4FDFDF4FFFFFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFBF6FFEEE8FDE1D6EFDDBAEAE6B9F5F4DFFFFFFEFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF1F1F1D4D4D4D3D3D3F7F6F7EAECEABED3BD43AB4268BE68D3EAD3FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD1ECD195D4954DB64B61C260B0E8AFE1FFE1C6F2C674CC7245B641 A5E3A5DBF6DBFAFEFAFFFFFFFFFFFFFFFFFFFDFEFDE7F6E781CA8038AE37A6E3A5E5FCE5F8FDF8 E3E2E3D2D2D2EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDFCFDFCF7FCF7DDEFDDC2E3C2B1E3B1 ABE3ABAAE3AAAAE3AAAAE3AAABE3ABB1E3B1C2E4C2DEEFDEF7FCF7FCFFFCFEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2E8E8E8F0F0F0F7F7F7F0F0F0F6F6F6FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFCEC573C9C16CDDD580E7E090E1D991C5BB7C7E753BDDD49ADCD495E7DF9ADBD48F D1C98D4C430A797132D8D08ACEC779D1CA72DAD374E1DB7EDFD680D8CD82D7C989D9CC87DBCF83 C9C070D9D17DC6BE6C888033DDD490EBE1A49C94566C6424E3DC93D6D083E0D887ECE493E3DB8A E4DC8BF0E897E4DC89E5DD8AEAE28FF1E996F3EB98EEE693E9E18EF8F0A0F1E998E3DB8AE9E190 F0E897E7DF8EE6DE8DEDE594EAE291E9E190EBE392E2D988ECE191EFE492F0E593F3E896EFE590 E5DB86E4DA85E5DB84F6EC95EFE58EE4DA83E3D980E8DE85F7ED94F9EF96EEE48BE8DE87E2D883 EDE38EE8DE89EADF8DF0E593DDD280E0D883E7DF8BE6DE8DEBE293F5EC9EF7EEA1EAE194E6DE8D E5DD8AEAE38CEEE78DEFE88FF1EA93F7EF9EEDE494E9E091EEE598EFE699EBE295E4DB8CE3DA8A E5DD8AF0E894F0E790EAE089F1E792F9EF9AEFE591EADF8DF8ED9DF7EC9CF8ED9EFBF0A1F6EB9C F0E596EBE090EBE090E8DD8DEFE494F5EA9AEBE090F1E696F1E696F4E999F0E595F1E696F8ED9D F4E89CF7EB9FEBDF93F5E99DFBEFA3ECE094EFE397F0E498EEE296EADE92EFE397F5E99DF1E599 EDE195F2E69AF9EDA1FBEFA3FEF2A6FBEFA3FEF2A6F3E79CF0E498F4E89CE5D98FECE093F8ED9E FDF2A2F7EC9AEDE290F9EE9CF1E695F0E595F5EA9BF3E799E9DC92E9E196FDF4A9F9F0A5F3EA9F F8EFA4F5ECA1F6EDA2F7EEA3EDE499F2E99EF6EDA2EDE498EEE597F6EDA2F5ECA2F0E69FEEE49F F6ECA7F4EAA5EAE098EFE59DF1E89DE9E093EDE497FDF4A7F6EDA0EAE196F6EDA2F2E99EF7EEA3 F6EDA2DBD288F7EEA1ECE396E6DD90F3E79BEEE397EDE497F3EA9DF7EFA1F8F1A3F3EC9EF4ED9F F4EEA0EBE597DED88ACBC579EEE89ED1CD83CFCB81C3C176BFBF749B9B54BBBC79B0B27197985D 9B9E67676A3590915F535425787A545D62412A300E15190BCBC88CF2EAA2E7DE8EF2E99BEFE9A1 DBD89889865053521C7271396A682DF6F4B4E5E29EEBE7A0EBE69DF1E9A0F1E69EEDE39BF0E69E E7DB93F1E79DF4EBA0DED587D7D082EEE799E0D88EE0D890FBF5AFFDF8B5F3EBADF6EDB3F4EBB3 E4DBA0E4DB9FF0E8A8F1E8A5F2EAA0EEE799F0E798F2EA98F1E994F3E994E8DF8DF0E798EDE497 EDE59AEBE39AE8E198DFD890ECE69EE9E59DE6E299ECE89EDFDB91E9E199E8DD95E9DD92F4E799 FAEC9DF1E193F2E294F0E198F2E3A0E7D99CFAF2B7D1C797140C00322B125651326C6A436F6D3E 74753A979655A19F54E6E193EFE996F1E792EDE697F1EDA3F5EFA3F1EA9DECE597F3EA9FF1E79E EAE19FEAE2A43029141E1808ACA878E7E0AAFDF5B6E7E09CF2EAA1D6D080C6C06DE7E18DDBD685 F0E9A0FCF3B1E5DCA0EAE3A9E1DFA6E7E3AADFDB9EF9F1B1FDF8B4EDE49CF4EAA3F3E8A2F1E9A1 F7EFA8EDE6A0F2EAA2EAE396EFE69BEBE398EBE198FEF5AEF1E7A0F4EAA5FBF2ACFBF0ADFDF2B0 F7ECA9F2EBA2F6F3A6F2EEA4FDF9AFE3DF95EDE99EFBF7ADF7F3A9F4F0A6FEFAB0F4F1A6FBF8AB FCF8AEFBF7AFF9F5AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF4F4DEEAEBC1E6E8B3 EEF0CAFEFEFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FBFEEEECF4E0CBEEDDB8F4E7C6FBF4E0 FFFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6E5E5E5E5E5E5F8F9F8DEEDDEAFD5AE52B2507CC77BDDF1DD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAF7EAC3E8C265C46049BB4365C7627AD07973CD7264C363 70C66ECFF2CFF4FFF4FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFF8FCF898D3984DB44B96DA95D1F2D1 F3FBF3EEECEEE0E0E0F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F7F6E4EFE4CDEECDC7EDC7C5ECC5 C4ECC4C4ECC4C4ECC4C4ECC4C4ECC4C4ECC4C4ECC4C5ECC5C7EDC7CDF0CDE3FBE3F4FFF4FEFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE1E1E1D3D3D3F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6EFEFEFF7F7F7F9F9F9E3E3E3ECECEC FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD3C97ACFC774D9D17CDFD786DED689CFC77F6C6420C1BA73C9C375D1CC77 D4CF7AD9D4876D661A68611BD3CC7BD3CC74DAD576DFD977DCD576DBD27DDCCF87DBCC90D7C987 DCD084D3CA7AD7CF7CDAD27F9D9649BAB26EEFE5A7BDB579544C0CB3AC66E4DE94D6CD7FE2D989 E0D888DED685E7DF8DECE491E7DF8CE7DF8BE7DF8CE9E18DEAE28EEAE28FEDE594F6EE9DECE493 EAE291F3EB9AF2EA99EAE291ECE493E8E08FE9E190F4EC9BEAE190EBE090E9DE8CE7DC8AEDE290 EFE590F0E691EDE38EE4DA83EFE58EE9DF88E8DE87E5DB83DDD37BDDD37BE3D981E7DD87EEE48D E8DD89E1D783E4DA85F2E796E4D988B9AE5DBBB45DEEE790EFE793F1E898F6EDA0DCD286E7DE92 E7DE8FE9E18FECE48EE9E288E8E188F0E992F1E998F0E897F4EB9CEFE699E8DF92EAE194F0E798 F5ED9DF0E895ECE491F6EC96F2E891F0E691F7ED98F0E691E3D886F2E797F2E797F1E698F2E799 F1E59AEEE297E8DD8EEBE090EADF8FEDE292F4E999F1E696F3E898EFE494EFE494ECE191EFE494 F8ED9DE7DB90F1E599F1E599F3E79BF0E498E9DD91F2E69AF7EB9FF4E89CEEE296ECE094E9DD91 E5D98DEBDF93F3E79BF7EB9FF2E69AF6EA9EF3E79BF6EA9EF0E498F0E498F6EA9EF9EEA3F6EAA0 F0E597EEE393F3E897F9EE9CF1E694F4E998F9EE9EFCF1A2F9ECA2F0E49AF6EDA2F4EB9FEFE69A EDE499F1E89CF3EA9FF5ECA0F7EEA2EEE599F2E99DF6EDA2EFE69AEDE497EDE499F2E89FF5EBA4 F4EAA5F3E9A4F3E9A4F1E7A0F5EBA3F6ECA2EFE699E3DA8CEDE496F6EDA0F4EB9FF3EA9FEEE59B F1E79DFAF0A6ECE398FCF3A6EEE598F1E89AFCF0A4F7ECA0ECE396E5DC8FEBE396F8F1A3F9F2A4 F8F1A3F8F2A4F9F3A5DAD486F3EDA1E9E399DBD78DC2BE75DAD88EB3B369B9B9719FA05DAEB070 AAAB7192955D6C6E3C7F804E4F5121787A534E5432191F0225290DC6C388EDE49CE7DF8DECE394 F0EAA1ECE8A9C4C18A66652F6F6E36605E24FBF9B9F5F1AEEBE7A0E4DF96EAE299F3E9A1F2E8A0 F1E79FF1E59DEDE399F3EA9FEEE597E7DF8FEFE898E9E294E7E197F2EBA5F5EEADF2EAACF5ECB2 F7EEB5E6DDA2ECE4A6FBF3B2EFE7A0EDE59AE9E293E3DB8AE1D987E6DE89F1E695F1E897E1D88A EBE295EEE59AEBE398EFE79DD4CC84E5DE96F6F0A7F1ECA3EBE69DEAE49AF9F1AAF5EBA3F0E499 F7EA9DFBED9EF3E496F0E196F7E9A3ECDFA0F3E8AFF6EBB74D461E130C00676244706C47767548 85864F8687489E9F59ACAA5FE3DE8FE9E292F6EB9AECE597ECE99BEBE599E8E191E8E191F4EB9C F0E89DE2DA94F6EFAED8D296E2DFA7F8F6C2FEFDC2E9E4A4DFDB98E4E099D7D489D8D58AF2EFA6 FAF5B2E6E1A4C4BE89F7F0C0AAA476827F4ACFCD95686228DED799F7EEACF1E8A3EDE39EECE49C F1E8A4F6EFABEDE8A7F1EBA9F1EBA6EFE9A5F5EEAAF5ECA9EDE4A1F3E9A7F9EFADF7EDABF2E7A6 FEF4B2F4EBA8EBE59CF6F3A5E8E699FBF9AFEEEAA0E7E39AE7E39AFCF9AFECE99FF8F5A8F7F5A7 F5F2A3F0ED9DEDEA9DF4F0A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F8F8E9EAEABFEAEAC0 F6F6E3FEFEFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFBFEEDEDFBE1D3F7DEB9 F7E5BAFCF6E7FEFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF5F5F5F5F5F5F8FBF8CAE9CA95D29469BE6796D195 E4F3E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDECF8EBA5E29D69C96344B44532AA3540B13F 78C977B7E3B6EBF8EBFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FCF7A7D8A663BB618CD18B C2E8C1EFF9EFFAF8FAF3F3F3F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF4F4F4E9E9E9DCDCDCCED3CEBBD2BBABDEABC0ECC0 DCF7DCEDF8EDF3F8F3F4F8F4F3F8F3F4F8F4F3F8F3EDF8EDDCF7DCBFEBBFAAE1AABDECBDD7F6D7 EDF9EDF9FAF9FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFCFCFCF3F3F3CACACAAFAFAFDBDBDBEBEBEBEFF0EFF0F6F0EBF7EB E0F3E0D9F0D9DFF4DFEDFAEDFBFFFBFFFFFFFDFDFDFBFBFBFBFBFBFDFDFDFDFDFDF2F2F2D0D0D0 E0E0E0FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDFBFBFBFAFDFAFBFFFBFEFFFEFEFDFEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD5CB7CD4CC79DAD37BDAD37FD7D07FD5CD82554E0A8F893CC2BD69 CAC76AC0BD5FD8D47C817B26534D13D2CC76CFC86DD3CD6FD0CB6ADAD073DFD480DFD38BDACA8E DCCE8CD9CD81D6CE7DD0C875DAD280AAA3559A924CEBE1A4E9E0A5645C1E827A38E5DF97E0D78A DFD687E4DB8CE2DA89E1D988EEE695EAE28FE7DF8BE3DB86E1D985E6DE89EAE28DE7DF8EF7EF9E EEE695E6DE8DECE494F2EA99EFE796ECE493E7DF8FE6DE8EF2EA99EEE594EFE495EADF8DE2D785 E5DA88E8DE89ECE28DEAE08BE3D982EEE48DE7DD86EDE38CEFE58EE2D882E0D681E7DD88E8DE89 E8DE8AE4D987E3D886EBE08FEFE494E8DD8DE4D987E1DA80EAE389E8E08BE4DC8CEFE698FBF3A8 E9E095EDE497F1E898F1E994EBE48BE6DF87EAE28DE9E190F0E797F8EFA0F4EB9EEEE598ECE396 EEE596F4EC9CF1E996F0E895F2E992ECE28BEAE08BF2E893F3E994ECE191ECE192EEE395F0E498 F3E79CF6EAA0F5E99EE6DB8CECE191EDE292EADF8FEFE494F5EA9AE8DD8DE6DB8BEADF8FEBE090 EEE393F6EB9BF5E99DF3E79BF4E89CEDE195ECE094F3E79BF3E79BFBEFA3F9EDA1F6EA9EF4E89C ECE094E9DD90F0E497F6EA9EF6EA9EF2E69AF6EA9EF2E69AF2E69AECE093EFE397F4E89CF9EEA3 F9EDA3F6EA9EF5EA9BF7EC9CFBF09EF0E593F3E896F3E899F3E79BF6EA9FFAEEA4F9F0A3F4EB9E FAF1A4F6EDA0EEE598F3EA9DF4EB9EF6EDA0EFE699F1E89BF5EC9FF3EA9EF6EDA0F1E89DF2E89F F5EBA4F4EAA5F1E7A2F5EBA6F7EDA6F7EDA5F7EEA3F4EB9EF2E99BEEE596F2E99CF8EFA3F5ECA1 F9EFA7F7EDA5FFF5ADF8EFA5FBF2A5EDE497F3EA9BF7EB9FF9EEA2F5ECA0EEE598EFE79AF7F0A2 EDE698F6F0A2F2EC9EE3DD8FF8F1A4E5DF93D7D087D4D087D6D289BFBD72BEBE76C6C680ACAD6A B5B778ACAD749DA069797B496B6C3A5759285D6039525835040A023F431BDDDA9EEEE69DECE592 EAE190EBE59CE3E0A0FFFCC5A5A46E83824A7C7A3FDEDE9EF1EFABEDE9A2E6E097ECE49BF4EAA2 F5EBA3F6EDA4E5D892F2E8A0F6EDA0E3DA8BDBD483E9E292FBF4A3EBE599E7E099F8F1B0FAF2B4 EEE5ABF9F0B6FAF1B4F9F1B1F8F1ABF1E9A0F0E99AEAE393ECE493EEE695EFE696F3E898EAE092 F6EDA0DAD184A2994DF2E99EDFD78CEFE79EEDE69DF3EDA3F3ECA4EAE49CF7F1AAF4EBA6F2E9A2 EEE49BF4E79BF6E99BEDE092F4E69EF5E9A5E4DA9DF4EAB68A82500904004B4421807C555D5A2E 8889537B7C3EAEB069A4A65BC2C073E9E598EBE497FEF2A7F1E89FF4F0A6EFE99EE8E193EAE394 F2EB9BF4ECA0F5EFA5F3EFAAEBE7A9E7E5ADF7F6C08180438B8A4DEBEAAFFDFCC2F7F5BBFEFCC3 7B7942E7E4B29D996C504B22CBC6A0474319221F023B3812161300D1CD8FF7F1B2F1E8A4F5ECA7 F3E9A6F7EFAEF2EBACE2DC9DEDE9ACE6E1A8F6F1B7F1ECB1ECE6ABF9F2B5E0DA9CE6DE9FEDE4A5 F3E9A9FBF1B0FAF1AFEBE69FE9E79BF5F2AAF4F2AD939049DFDB9AF8F4B2E9E5A3F5F2ACEDEBA4 F3F1A7ECEB9FF4F1A3EFEC9DFBF8ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF4F4DFEBEBC2EEEECA F5F5E1FCFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF9FBFFEEE6 FCE3C4F8DEB0F7E7C0FBF3E0FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5E1E1E1E2E1E2F3F7F3B6DFB578C5777EC97D B0DEAFEBF7EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFADEF6D9B5E3B78BCD9A70C17E 79C87AAFDFAEE5F5E5F9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FCF7AAD9AA67BC66 89CF88BEE6BEEDF7EDEBEAEBDBDBDBEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDCECECE979797787D787B8C7B92AC92B9D3B9 CEE1CEDCE8DCE5E8E5E8E8E8E9E8E9E9E8E9E9E8E9E8E8E8E5E8E5DCE8DCCEE1CEBBDABBA1D2A1 A7D7A7C3E2C3DBE8DBE6E7E6E8E7E8E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7 E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E8E8E8E4E4E4D0D0D0B9B9B9A8A8A8ABAAABB5B8B5BCD4BC A8DDA87DCA7D63C06378D178ADE8ADE5FCE5F9FFF9F7F7F7EEEEEEF2F2F2FEFEFEFFFFFFF9F9F9 E7E7E7EFEFEFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF4F5F4E8EBE8E5F5E5EDFEEDF9FFF9FEFDFEF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6CC7AD7CF7AE1DA81DDD781D2CB7BDBD289756E287F7830 C5BF70D8D47CCBC66DE5DF8B938C3B544D12DAD183C5BD6BCDC56CDBD275E3DA80E3D884DDCF85 DACB88DDCF8BC9BD73CAC271CFC774D9D17EC6BF70B8AF69DED497EAE1A7ADA469867E3ED6CF89 EBE297DFD688E6DD8DEDE395E8DF90EDE594ECE491ECE490E9E18CE5DE86E7E088EBE38EEBE390 EFE794EBE38FE8E08DECE491EFE794E9E18EEAE28EEBE38FE5DD8AEAE28FE8DF8DF0E596F0E593 E8DD8BE7DC8AE8DE89E7DD88E2D883E3D982F5EB94E8DE87E4DA83EEE48FE6DC88E4D988E8DD8B E3D886DDD281E7DC8CEADF8FEADF8FDFD485E0D587F5EA99E2DB7FE6E082F5EE95F3EB99EBE295 F2E99EF0E69DF0E79CF1E89BF1E997EDE591EAE28DECE48FEDE594EDE594EDE495F2E99CF9F0A3 F6EDA0EFE697F1E898EDE592EBE390ECE38CEFE58EEFE58EEBE18CEAE08BEADF8FE3D889EBE092 EEE298EFE39BF2E69EECE097E8DD8EEFE494F1E696EBE090E9DE8EF0E595F5EA9AF2E797F7EC9C F4E999EEE393EEE393F4E89DEFE397F2E69AEBDF93EBDF93F7EB9FF0E498F2E69AECE094EEE296 EFE397F1E59AF7EBA1F5E99FF3E79DF3E79EF5E99FF9EDA3F1E59BF1E59BECE096F1E59BF7EBA1 E6DA92E9DD93F1E499F5EA9BF3E898EFE495EDE292F3E898F5EA9BF1E59AF1E59AF5E99FF1E89B F3EA9BFAF1A2F0E798EBE293F7EE9FF4EB9CF6ED9EF2E999F0E797F4EB9BF4EB9CF3EA9DF3EA9F EFE69CEDE39CEFE5A1F2E8A3F7EDA8F7EDA6F0E69EF2E99EF3EA9DFCF4A5EEE596E6DD90F1E89C EEE49DECE29BFAF0A9F8EEA6F3EAA0F6EDA0EFE698F1E999F2E798F0E596EDE495F0E798F1E99A F1EA9AE6DF8FF1EB9BDFDA89E4DF8EE6E190D5CF81DAD48BBBB66DD0CC83BAB86ED8D890B9BA74 B6B675B6B879898B529396607E804F464715676937585B334F5532252B06434819E8E7ABEFE79E E4DC89E1D888F0EAA1EDE9A9ACA97171703B84834BA4A267DDDB9BF0ECA9EAE69EEBE69CEFE79E ECE29AE9DF97F2E8A0DFD28CEEE39CF1E89BE3DA8ADAD380E1DB86EFE897F2EC9FE4DE95E5DE9D F0E8AAF0E6ACF2EAACEFE7A7F1E9A6F4EEA4ECE498EAE394E7E190F0E798F4EB9CF1E89BEEE296 EDE197E7DB91F1E49BD3C97EE5DC91C8BF74DDD58CCFC77EE0D991FDF6B0F5EEA8ECE69FEEE5A3 F1E8A4F0E7A0F3EA9EF3E79BE8DC90F5EAA2F2E8A8E6DEA5DDD5A5322C17252007746F456A6838 74733EA0A26391944DB2B669AAAB5DDAD88BF6F1A5F6EEA6FEF3ADF1EAA6F6F3AEF2EEA7EBE69D F0EAA1F4ECA1F4EEA4EEE79FE9E5A2E8E3A8E7E5ADD1D19E0E0D0617150A8F8D68BEBB9AAEAB8C 696648050200484527211E050604001D1B000805000B0A03080602454209F0EAAFDED696F4EDA8 EAE19CEEE7A3F8F0B0EAE3A5DAD599EDE9B3F1EDBEF9F8CCE7E3B2F8F3C0EEE9B2E7E2A9EDE7AE ECE6AAF1E9AAE2DA9BF9F1B0F9F4B4F2EEAFFFFFC3D1CC90181300BDB87FF4EEB7E6E0A9F3EFB3 68642BADA96BFEFBBAFAF6ADF7F3A8FEFAB1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F8F8E9EDEDC6E7E7AE F5F5DFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFBF6FFECD8FBE0B8F4DCA4F8ECC9FFFEF4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2D7D7D7D8D7D8F0F5F0A7D8A764BB63 8CD08BC1E7C1F0FAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F9FCD7EBED C1E3D4C3E8C6E3F5E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FCF8B2DDB1 73C27281CA80B5E1B4E9F5E9E6E3E6D1D1D1E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1E1AFAEAF535253212C212E4E2E688768 BCC0BCD0CED0D2D1D2D2D1D2D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D2D1D2D3D2D3CBCFCB 97BD9786BA8695C495B2CDB2CDD1CDD2D1D2D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1 D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D2D2D2D2D2D2C2C2C28080807271727B807B 8BAD8B7DC57D51B75132AD323CBC3C73D273B4E6B4E4F3E4EEEFEEE8E8E8EFEFEFFDFDFDFFFFFF FCFCFCF2F2F2F6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFFFDF9FFF9D8E8D8B9D2B9C6E8C6E1FDE1F6FFF6FFFDFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CF79D7D077E0D97FDFD884D6CF82D7CE8B92894B 7C7436BFB873D6D085D4CE80D6CE829D944C4E450DD5CA86CDC37CCDC375D3C973D7CC74D5CA73 D7CA7BE2D48AE5D891DCD087D0C877D1C975D9D17DD4CC7E928943BDB376EBE2A9D5CB91797133 D0C986E8DE95E1D88AE6DD8EF0E798EEE696ECE493EFE794F1E995EEE691E9E28AEBE48CF2EB93 EEE593EFE794F0E895F2EA97F4EC99F2EA97E0D885E7DF8CF0E895EAE28FEAE28FE5DC8AECE191 F1E694EDE290EDE290F0E691EDE38EE2D883E3D982F9F099E8DE87DCD27CF2E794EBE090E7DC8B E8DD8CE5DA89E8DD8EDED384E2D689E5D98CEBE093EFE399E8DD8FD1CB6BE8E381EDE78CF0E895 EFE698E1D88EF0E69FEEE49DEFE699F0E798EEE693ECE490F1E993F1E998EDE595E3DA8BE8DF92 F7EEA1F9F0A3F5EC9DF8F0A0F0E895E5DD8AE2D882EAE089EFE58DECE28CEFE590F1E697EBE091 F5E99EF3E79DEEE29AF3E79FEEE29AEDE293F0E595F8ED9CF3E898EBE090EFE494EBE090EBE090 F4E999F8ED9DF3E898F1E696F2E69AF3E79BFAEEA2F8ECA0F5E99DF6EA9EF8ECA0F5E99DEADE92 EEE296EFE397EFE398F7EBA1F6EAA0F1E59BEFE399F1E59BF5E99FEDE197EFE39AEFE399F5E99F F9EDA3EEE29AEEE29AF0E499F1E798F3E899F4E999EADF8FF5EA9AFDF2A3FCF0A4F4E79FEFE299 EEE697F0E897EAE192E3DB8BEBE393F8EF9FF5ED9DF8EF9FF3EA9AEEE595F0E797F4EB9CF2E99C F5ECA1F3EAA0F1E7A0F5EBA6F4EAA5F4EAA6F3E9A2ECE29AF3EA9FF3EA9CF5EC9DF0E896EEE597 F6EDA2F1E79FE4DA93F3E9A3EDE39CF1E89EF4EB9EF5EC9CF4ED9BFFF5A6F6EC9DEEE596EFE697 F4ED9DF9F2A2EEE797E9E392E3DE8DF4EF9ECFCB79E8E294CBC47CE8E49BDEDA91C2C075A1A159 999954ABAC6AA6A7697C7E457A7D476F71405B5C2A67693743471D464D291F25074E5324EEEBAF E6DE94EFE794EEE695E6E095BEBB7A636028494812818048B7B57BEAE9A9D2CF8BE7E39CEBE69D EFE79EE7DD95DFD58DE4DA92F1E49EE4DA92E7DE91F4EB9BF1EA97E5DF88D9D280F5EFA0E8E299 D1CA89DCD496EEE6A9F0E8A9E4DC9AF0E9A3FFFAAEF0E99BEEE796F2EC9AF2E899F0E799F2E99E F6EAA1F0E49BEADE95F7EBA2F0E69CEBE298D9D086EDE49BD9D188DAD38BEFE8A2F3ECA7F0E9A5 F6EEAEF8F0AFF5EDA7F5ECA4F5EBA0EDE499EFE59EF1E9AAFFFFC876714A0F0B009D99719D9969 7C7A4598985B888B44B2B669A9AE5BB6B866EAE99AF2ECA4F9F0ABFAEBADF2E9ACEEE9ADEBE5A7 E6E09FF2EBA8F8EFA9F1E9A4F4ECA9F5F1B2ACA96CCAC992AFAF7E0A09000000000806000B0700 0806010000000300000000000001000302000B0D006B6C47ABAB7E969461E4E1ADDBD69BF6F2B5 F4EDA8F2E9A4F1EAA6F1E9A8D1CB8EC7C289EDEAB9E1E0B8565432595739EDECC2979563B5B27C FEFAC3F1EBB1E3DD9FD5CF8FF5EFAFEBE6ABF5F1BCFDFAC6B9B480080200B5B081FEF8CDF4EEC2 D1CB9908030075713BFEF9C0F6F1AEF6F2ACEBE7A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF8F8E9E6E6B3ECECB8 F8F8D2FDFDEFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFFFAF5FBF0DAF4E0ABF8EDBFFEFDE1FFFFF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7F9F8F9F5FAF5A7D8A7 65BB648BD08AC0E7C0F0F9F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFE F6FBFAF1F9F5F2FAF2F9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFA C9E9C992D2916CC06B99D297E3F2E3FEFBFEF6F6F6FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2AFAFAF4C4A4C0E1E0E0D3C0D 3C6C3C8F978FAEAEAEBBBCBBBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BABBBAB4B9B493AF9370A47080A980B4B9B4BDBCBDBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBBBBBBAEAEAE7F7F7F656465 5C5F5C748B749EC19EC1E0C1C0E9C08AD78A61BC6157AC57B0CEB0E4E7E4F6F6F6FDFDFDFFFFFF FEFEFEF2F2F2CDCDCDDEDEDEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9FFF9E7FFE79CD49C5DAF5D99D799DDFBDDF8FFF8FFFDFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCD27BD7D075D9D278DDD582DFD78EDED493 80753C756C34D3CC8CDCD590D5CE85DDD58CBCB273483E04C2B77DD1C884CEC679DAD27CD8CE75 D7CC77D5C979D0C375D2C479EFE495D8CF7DD0C972E2DB84DCD4837B7329A99F5DECE3A7FFF8BA 8880429F9756E8E097EEE798EFE798EFE796EEE695E8E08FF3EB9AF3EB99EEE694E8E18CEFE791 F9F19CEFE793F7EF9CFAF29FF3EB98EFE794F1E995E8E08EEDE594F6EE9DEBE392E8E08FE6DD8C EFE494F3E795ECE08EECE18FF3E793F3E894E0D680DBD07AF9EE98EEE48BE4D982F1E592EFE494 F1E696EFE394E5D98AE5DA8BD7CA7CEADE90EADF90ECDF94F3E69BE4D98AE1D97CE4DE7EF9F297 ECE490DED586F3EA9DF0E79DF1E89EF5EC9FF6EE9EF1E997EDE591E9E18FECE493EEE696E7DE8F E8DF90F2E99BEDE595E9E191F0E897F0E896EEE590EDE28EF1E695F0E592EFE491F3E896ECE18F E9DC8DF3E799EDE194E8DB92F6E9A1FAEEA5EFE396F2E798FEF3A4FDF2A3F2E797F3E898F7EC9C F0E595F3E898F2E797EBE090EADF8FFFF3A7F6EA9EEEE296F1E598F2E69AF0E498F5E99DF5E99D ECE094F2E69AF4E89CEBDF94F1E59BF9EDA3F9EDA2F1E59AEDE195F4E99BEFE496F1E698EEE297 F1E59AF1E599F7EA9DF9EC9FF8EB9DF5E99AF1E594EDE291F3E897F3E899F0E697F1E89BF5EBA2 F7EDA3F2E999F7EF9FF0E897F1E998F6EE9CEFE796F8F09FF9F1A0F4EC99ECE492EEE693F4EB9B EFE697EAE194EBE296EDE39BE8DE98E6DC96EFE59EF1E8A1EFE59EF8EFA4F4EB9FECE396F3EA9C F6EDA0F2E89FF0E69EECE29BF2E8A2EEE49DFCF2A8F7ED9FF4EC9BF3EC9AF2E899F8EE9FF9F0A1 F3EB9BF4EC9DFBF5A6CFC779C4BD6FEDE799B8B263F2EC9DCAC77AE2DD97EAE59ED7D48CCCCA83 A2A15DA3A260BABA7A94955B9C9D678184515A5C2B63653467693952542F373C1B212604606332 F5F3B3E7E093F0E897E8E091E2DC92BBB771A4A36AA9A97378773FAEAD72E2DE9FC8C481EDE9A2 EDE59DF2E9A1EDE39BE3D991DFD58DFAEDA7EBE099E1D88CE7DE8EF1EB97F2EC97E4DD8AEAE395 EFE9A0EAE29EDCD295D8D192E7DF9DF4EDA9F6EFA8F4EEA4EFE79BF8F1A2F5EE9FF5ED9FF3EAA0 F3E9A1F4EAA3ECE29AF4EBA1EFE59CEFE59DF0E89FF1E79FEEE59DF0E89FF4EBA3F1EAA4EEE7A2 F1EAA6F2EAABF2EAAAEEE5A2EEE69DF6EEA5F6EDA6F4ECABFFFFC8B0AB7A0C0900514D2DAFAC88 A2A06BB7B77BB6B773999D52A8AB5ABABE6CC3C575EEECA0E5E098F3EAA7EFE3A3F9F1B5F1EBB1 E7E1A5DFD799EFE7A8F5EDADF9F1B1FBF4B8D1CD92211F0AA3A16EF7F7CDA7A898484749040208 000000020000333230504C47413F360E0D053E3E22CDCDACF6F7D4E6E4B3DEDDA7F1EEB6EAE7AC D3CE8FE1DB9AFBF3B2F4ECACECE4A5C6BF83C9C389FFFBC8B8B68B050300151200CDCA9F5F5C31 585436E5E3AEE8E2A9E0DB9CECE6A5F7F6B5DFDA9EEEEBB7F6F4C8B8B48C060000B2AC86F0EBC6 F6F2C9E1DEB21C18003A3524EFEDBEF9F4B8F9F4B5D6D294FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFEF3FAF6DCEFE1AF F4ECC4FDFCE8FFFFF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFDFDF9F0F9EED1F3EDC1F1F0C3FAFAEBFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7E8E8E8EAE8EAF1F7F1 99D39850B54E97DA95D0F1CFF5FCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFFFFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFDFCDCECDBAAD5AA56B5557FC87EDAEEDAF4F0F4E4E4E4F2F2F2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAE9DAA9C5A97E897E5F715F 4B7F4B448E445294527DAE7DADC9ADCDD4CDD7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D9D8D9C1CCC19EBC9E9AB99AB6C7B6CAD0CAD7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D3D3D3BBBBBBA1A1A1939393 9493949D9E9DB0BBB0CDDCCDEAF2EAEBF6EBB7DDB773BE7349AB4991CA91CDE5CDF3F9F3FFFFFF FFFFFFFEFEFEF6F6F6DFDFDFEAEAEAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEEBF8EBACE4AC75CB755ABD5AA7E0A7E9FCE9FCFFFCFEFDFEF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCF7FE2D884DED575D0C475C6BC75 E4DC8E8C8344766B31E2DB8ED4CD7EE2DB8BE7DE8ECBC185403505B8AF7CD0CA83DBD87DD7D671 D5D075DCD282D6C980D4C67BD7CA7BD7CB76D9CE77DACF77DCD278E6DD86968E3B857D2DD7CF85 E4DB97A9A05F7E7536DED68EE3DC8FEBE694EEE894ECE592F2EB9AE9E197EEE59DEDE39CF4EB9F FAEF9EF1E791F0E892F7EF9AF7EF9AF1E996EEE695EAE291DFD687E9E091EFE698F4EB9CF4EB9E EFE395E6D98AE6D688EDDF8FEFE290EFE08DEFE18CF5E993E7D982E3D57DEDE187F4E78FEFE08C EFE291EEE08EECDD8CEEE18FEFE191F1E193E4D586EADC8DE8D88ADECF80F0E392F0E691EFE58F EEE48FEEE391EDE291E9DE8DE9DE8EEFE493EFE493EEE392F1E694F3E898EDE194F1E499F4E999 EDE290EDE28FF2E892F0E68EF0E68FF4EA93EEE48FE7DD89EEE096F5E6A2FFF0A9FCEDA0EDE08E ECDE89F2E38DECDF89EEE08DF4E495F4E698F6E79DF4E79CEFE398E8DC91F8ECA0F3E899EBE091 F4E999F1E695F2E795F3E896EEE491E8DD8DF3E79CE6DA90F0E49AF3E79DE7DB8FE4D88CF2E69A EBE091E4D98AF1E697F1E697F6EA9FF2E69CF1E59BE5DA8CEEE493EFE490EBE18BEDE38EECE18C FBF09FF6EB9BEEE293FCEC95F4E287F4E38AEEE087F7E991F8EB95F1E792E4DB89EBE493F1EB9D ECE598F2EA9FF0E79AF2E89BF3EA9CF2E99BF0E797F0E897F2EA97EFE794F5ED98F1E994E8E08A E7DE89EDE191F2E796E5DA8AF0E595F6EA9EEBDF94F2E69CF3E79DEEE29AFDF1A9FDF1AAFCF2AB F6ECA6F2E8A2F5EBA4F4EAA2FCF2A9F4EBA0F6EDA0F3EA9BF1E998F5ED99F1E998F4EB9CF7EFA2 F3EB9EF2E69AF6EA9FFAF0A5F0E49BEAE299DCD68DD9D48AD0CC83C9C77EDEDC98BDBA78D2D18F BBBA7AA6A467D4D499B5B47C8888539493617574446A6C3B696C3E3B3D163B3A21373621262606 6F7034EEEDA1E4E290E1DB91DDD490E5DD95D1CC80D4D498787B448B8B53CECC91E8E3A3EDE6A3 F6EDA8EBE099DFD58CEFE59DEBE199E4DA93F1E7A3E1D792F0E69EF4EBA0F5EC9EEEE596EDE495 E7DE91EAE297EFE69EFFFAB2E0D792EDE6A2DAD38FE5DE99E4DD98FBF4AFF2ECA5F8F1AAF3EDA6 F9F1ACF2EAA5EAE19CF3EBA3EAE496EBE397EEE79BE4DE92E5DE93F3EDA3EFE89FEAE39BE4DE95 F2EBA4E9E29CF0E8A5F4EBA9EAE1A0F3ECACEDE7AAF1EBB2FAF6C2D2CFA21210002524185F5E46 545434A2A168B5B672BCBE74B5B869ACAD5FD4D58AD2CF88E3DE9BC8C37FE4DE96EBE699F2ECA4 F3EBA8E2DA98E2DC9BEDE8A8EAE5AAEEE9B1EBE8B4929061292600E7E6BBFFFFD7F7FAE4E1E5E3 22222C1C1F09565A377B7D5BFFFEDBEEEBCB1D1813807D44FFFCD4F9EFCFE8E4A4E0DD95DFDD9B E9E8A831300E858349F0EBB4F7F1BAE4DBA1D6CD8FE9E09EF9F2B3C1BD811F1C0F6B663FF5F1C2 D1CBA3261E00E0DAA8FCFCC5E5E19EE7E59AE5E392EDEAA1F4F0B2FBF4C6E3DABB130900B5AF8F E0DCAEF2F0B9FBFBC253511F181306D0CAABFEFDC9F1EEB4D5D19DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF9FDFCE5FCF4CF FCE3BFFEEED8FFFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFCF7F0EFCBE5E5ACF3F3D9FCFCF5FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1D5D5D5D5D5D5 EAF3E986CD8539AE38A6E4A4E3FBE3FBFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEECEEECC1D7C146AD456BC169D3EBD2E8E3E8CECECEE8E8E8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1EFD1A3DCA3B8D2B8 C0D2C0A0D1A068C16831A53158BA5896D896D1ECD1EDF5EDF8F9F8FAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFBFBFBF0F1F0DBE0DBC3D7C3BCDCBCDDECDDFBFAFBFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFCFCFCF2F2F2C6C6C6A3A3A3 B1B1B1CECECEEBECEBF7F8F7F9FBF9FCFDFCF6F6F6DAE1DA97CC975FBE5F74CB74ADE1ADEAF7EA FFFFFFFFFFFFFFFFFFFCFCFCF5F5F5F8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8FCF8D6EED66DC66D60C8607DD97DC7F1C7F8FEF8FFFFFFFEFDFE F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3C777DED27FDCD472CDC272 C4B772E6DE8BA49A596E6427DAD382D7D17ED8D27EE2D988CBC185372B00A89F6DD7D389DBDC7B D6D86FD1CB71CBC273D0C47BDCCB81DBCE7DDFD37DE2D680DBD179D9CF77E5DB83CDC56FA49C4B D7D084D0C87FD5CC8A6B6221A8A15BE6E195EAE595EBE691E8E38FE6DF8FF1E99FE7DE97F1E7A0 EEE59AEEE492FFF9A2EDE68DE9E18BF7EF9AEEE691E7DF8DF7EE9DE7DF8FF2E99BF7EEA0F1E89B F7EEA2F5E99BF6E798EEDE8EEFE08FF0E18FF2E390F5E692F5E691E2D47CE8DA81F3E58CEFE188 F5E691EADB89EFE08DF3E491E7D886EFE08EF7E996E8D987EADB89EADB89E5D683F3E693EEE28F E9DF8BE8DD8AECE28EF3E894F5EB97E7DD89EDE28FEFE591EFE591F1E793F1E696E8DD8FEDE294 F2E797EFE490EEE48CF4EA92F1E78EEDE38CEEE48DECE28CF1E693F6E79EF5E4A0F5E59EEFDE92 E7D785EDDE86EFE188EFE188F1E28DF5E694F5E598F0E196F5E79FF6EAA0F2E69BFCF0A4F7EC9F F5EA9BF1E696F1E695F3E896F5EA98F2E893EEE391EFE495F0E498F8EC9FF7EB9FF0E498F0E498 F3E79BEEE295EADF92F2E699F7EB9EF3E79DF0E49CE9DD92E9DE90F2E797F2E893F0E690F4EA94 F0E691F6EC99EFE494EEE393F6E68DEEDD7DF0DF83EDDE83F5E58DF4E891F4EA94EBE391F1EA9A F1EB9DECE699F3EEA1FBF2A6FDF4A8FDF4A7F8EFA2F1E899ECE493E8E18FEBE390F9F19DFCF49F F1EA93ECE38FF0E593F1E695F5EA99F1E696F2E798F5E99CEFE396F0E49AF7EBA1F5E9A0F7EBA4 FBF0A9F0E6A0EDE39CF5EBA3F7EDA5F5ECA1F8EFA2F4EB9EF7EE9FF8EF9FF1E998F3EA9AE9E293 F1E99CF4EB9EF2E69DF6EAA0FFF4AAEDE199E9DF98E8E199F2ECA4CBC97FE5E29CD9D995D1D08E D8D797A8A768ADAD71B3B27A72723BB5B5827A7A498485546062334B4E216266403836244A4836 161602767637F0F0A0ECEB98E3DF98D6CD8CE6DD98F5EFA2B8B87A4F541C7C7B44B4B276F3EEAD F3ECA7F3E9A4F4E9A2EBE098F0E69EE7DE96E5DC95F2E8A4F4EAA6F4ECA4E7DF95EDE598EAE295 EFE797F5EDA0E2DA8DCFC77BF5ECA3F7F0A8FAF4AFF3ECA8E0D995DED793F0E9A5FBF5B1F6F0AC EAE39FEFE8A5F2EBA7F1EAA6F0E9A1EFE89DF1EAA0F1EAA0EBE49AE3DC93F0E9A0EFE7A1F0E7A1 EDE59FFCF4AEF6EEA8FCF5B0F4EBA9F1E9AAE8E2A6F6F1BAF4F1BEE5E1B3423F261815003D3C1D 56563C7B7A57919155AEAF6A9B9D519FA052D3D487D3D289E1DE9BE3DE9ED0CB87E2DE95EBE898 FAF5A9F7F0AAE3DD99E7E2A0F5EFB1EFEBB0F1EEB7F7F4C12C2A0D615E3ADEDBB2D4D5ADA5A988 565C49010307636A417D83585D6038FEFEC8EEECBE2C27154D4B17FFFDCAE9DFB9F6F1AFEDE9A1 EDEAA7E9E6A72D2C183E3D0D8D8A55E8E5ACEEE9ABECE4A0F7EFA6F3EBA6EAE6A9D7D398DCD8A1 F8F4C3EBE5B7363105D1CD9AFCFBC2EBE9A7F6F5ABF9F9A9F1F1A1F1F0A8F8F5BDF3EDC5191300 7F7B56DFDEA3E8E9A1FDFEB8A5A5640200009F9C74FFFFC4FEFDBCF3F2B8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF5F0F0CA ECE9B5FCF0DCFFF8F1FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9E0F1F1C0E9EAB7EEEFCEFAFAF2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF9FAEEEEEE EAEFEADEF8DE7BCD7A37AD36B7E5B6F2FDF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F8D5E7D449B14868C066D4EDD4FBF7FBECECECF6F6F6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0F1D3A4E3A7 CDECCFEEF6F1E2F6E5C1EDC48FDB9165CD674FC55275CC76B6E3B6F5FCF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEF4F5F4CFE8CFB0E1B0D8F1D8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE9E9E9 DADADAE3E3E3F1F1F1FFFEFFFFFFFFFFFFFFFFFFFFFDFCFDF2F4F2CDECCD9ADF9A4BB94B76C876 DBF0DBFFFFFFFFFFFFFEFEFEF4F4F4D7D7D7E5E5E5FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFDFBE3F1E3B2DEB248BC4871CF71C1EEC1EEFCEEFDFFFDFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCBF6ED9CC77DED672 D4C977CABD77D6CF7BA096545A5012CEC875CFC973D2CC76E6DE8AD0C68A362B0098905EDCD88F D3D373DADC73DDD77DD0C778D1C57BD0BF74CFC171D6CA76D9CD78D3C974D3C972DCD27CD4CB78 8E8635D0C97EC4BB76DBD2905B5218605915DFD991EEE99AE2DD89DFD985E6DF8EDED68BEBE29A E1D88DE3DA8AF3E994EEE48BF1EA92DBD37DECE48FF4EC97EDE592F2EA98E6DE8DE7DE8FEFE697 EBE293F8EFA2E7DB8BE1D281EBDC8BEFE08EE9DA87EADB88EADB86F6E792F1E48BE7D980E4D67D F1E38AF6E791EBDC89EEDF8CF2E390ECDD8AF1E28FF5E693EDDE8BEDDE8BE6D784E0D17EEBDF8B F0E590E8DE89E5DB86E9DF8AEEE48FEFE590E9DF8AF4EA95FAF09BF6EC97EAE08BE5DA89EEE393 EFE494F2E794ECE28BE7DD86EBE189EEE48BF7ED96FBF19CF2E895EFE392F1E197F0DF98F2E296 EBDC8AE2D37EE7DA7FEBDE82EEE088F0E28CF0E190EEDE91E2D388EFE198F4E89CF3E79BF8ECA0 F2E798F6EB9CEFE493EFE493F0E593F1E694EFE591EEE391EFE494F8ED9DF8ED9EF4E99AF5E99D F9EDA1F0E498F2E69AEEE296ECE094F8ECA2EFE39AEEE19BE8DC94F0E499F4E99AF4E999F5EA98 FCF19FF6EB99F4E999EFE495F5E89CF4E48DEBDA7DEFDF83EDDD85F5E890F6EA95FAEF9DF8EF9F FBF4A4F6F0A2F2EC9FFAF4A8F6EDA2F9F0A5F9F0A5F9F0A4F5EC9FF3EA9AF0E797EEE695EFE794 F1E997F2EA97F1E896E9DE8CECE191F3E898EFE494EEE394F5EA9CF3E79BF0E49AEDE197EBDF95 EEE29BF0E59EF5EBA3FAF1A7F4EAA2EEE59AF6EDA2F7EEA1EDE497F5EC9FF9F0A3ECE396F2E99C ECE597F1EA9CF6EDA0F4E89EF7EAA0FFFAB0F3E79FEEE49DF4EDA5D2CC84E8E59BCBC881C8C884 C7C683B9B876CAC989C5C587919156B8B9809D9D69A7A875858756494B1C494B205B5F3C343220 484634060501929154E8E89AE2E18FEBE7A1E3DA9BEAE19DF5EEA4A2A3658F925B7F7F46B5B376 E5DF9FD4CD88DBD28DEFE59EF2EAA1F1E9A1E6DE95EAE19CF2E9A6F6EDA9EBE39BD7CF86E1D98E E0D98BE6DF8EEEE798E8E193DFD78CF2EAA1F4ECA4F6EFAAFFFBB7EEE7A3E6DF9BCEC783E9E29E FBF4B0F0E9A5EFE8A4ECE5A1EDE6A2F2EAA5F4EBA6E9E09BE1D893EDE49FF2EAA4EAE19CEDE49F EFE6A1E3DA95EDE49FEBE29DEDE49FE8E19DF0EAABECE5AFDCD5A4FFFFD5666242030000514E2D 5B5C3A9FA07F898A618F8F54A6A762B5B76BB4B568D3D488D2D188E8E5A1DCD797D3CE8AD6D288 DCD98AF2EDA2F3ECA5DDD894E4DF9DF5EFB1EBE7ABF7F3BCC9C69218150037340E595628414014 1E2102020700252913C6CE9664683E3C3E1BDADB9FC5C48E5F5C2F30300DD8D69CD3CD9AE5DD9C D8D08FDBD597E0DCA349461B232105B8B77EF1F1B4E2E09EE5E299E0DD8ED4D28BDAD89FCDCC96 C2C18BE9E8B2E1E0AA424110B5B47DEAE9B0DEDEA1DEDE9EDDDE9ACDCF85D4D591EAE8B2FFFFD6 3B37135D5B35F5F6B5F0F3A4F0F3A0E6E89D212100808053F5F6B3E8E9A78C8C52FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBF3F4F4DB ECECBDEBEBB9FBFAEFFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1FBFADBECE5AFEEE8BB FAF8E5FFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAFB EFF0EFE2EDE2C6EFC66DC86C39AD38BFE5BEF9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEDEF1DD4DB54C64BD63CCE5CCF7F2F7EDEDEDF7F7F7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFDF2FFF7E6D0E6B7 A4D78FCAE5B6F0F3DCF3F4DEE9F4D6CFEFBB91D77D58BF464BB84677C677B4DCB5E1EDDDF5F6EE FDFCFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFACFEFCFA7E1A7D2F0D2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDFCFCFCFCFCFCFEFEFEFFFFFFFFFFFFFDFDFDF8F8F8F8F7F8FCFDFCEFFDEFC7F1C74AB64A 5CBC5CBCE5BCF7FDF7FDFFFDFEFEFEF4F4F4D5D5D5E4E4E4FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FAF4BCE4BC7FCD7F4FC34F91DB91EAF9EAFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCC06BD4C970 E0D972DED37FD8CC83D5CE789C9350514808CDC771C7C16AD0C972DED680CDC3853C320389804F DFDB92CDCC6DD8D973DCD77CD6CD7ED9CD84D8C77AD2C574D1C573D0C471D4C876D9CF7BDBD07E D9D080756C1ECEC67CDCD38EE3DA98B6AD6BA29959DFD793E3DD91E0DB89E2DD88DDD684DFD88A E9E195E7DE91EEE794F3EA91E3DA7EE9DF87F4E992EEE48DE5DB86EDE38EF7ED98E0D583DED382 EEE393EEE392E1D687C3B766BFB05DE1D27FEFE08DE4D582E0D17CE6D782F3E58CF1E38BEBDD84 E4D67DEEE087EDDE89F3E491EDDE8BEDDE8BFAEB98F3E491E7D886EFE08DF5E693EADB88E3D481 F0E38FF3E793EDE38EEDE38EF2E893F1E792EBE18CF2E893F4EA95F6EC98F6EC97F1E792EDE38E EADE8CEADE8BF0E48EF0E48CF0E48BF2E68DF2E78EF9ED98FEF2A0F5E899EEE192ECDD8FEFDF90 F9EA97F6E791E9DC81E7DA7DEEE184F4E68DF2E48DEFE08FEFDF91E0D186EBDD91F3E79BF1E697 F5EA9BEEE394F2E797F2E798F4E997F2E795F0E593EFE492EFE492F6EB98FAEF9CEEE393EFE493 F9EE9EF9ED9FF4E79BF9EDA4F2E69DEDE198FCF0A8F0E49DECDF9AF1E59DF5E9A0F2E69BF4E99A F1E696F9EE9EF3E898EFE395EFE397F7EB9EF2E48DE7D87DEADA82E9DA82F3E68FF7EB97F7EC9A F7EF9FF9F2A2F6EFA2F2EBA0F5EFA3F7EDA5F5EAA3F2E99FF3EA9FF6EDA3F9F0A4F2E99CF7EE9F F1E999EEE596F3EB9BF4EB9AEADE8FF2E797EEE394F5EA9BF7EC9DF1E698F8ECA0F3E79BE3D78C EFE399F7EAA0F2E89BF2E99BF1E89AF2E99CF1E89BE9E093F6EDA1EFE69BF7EEA3FBF2A8F2E99F F9F0A6F3EC9FF3EB9DF5EC9FF1E59BEEE298FBEFA5F8EDA5ECE29BEEE79FDBD58CEEEBA1E0DE94 DADA93BDBD76A9A865D0D18FA0A061909055C3C48B6C6F3A929562797B4A767849595C31292C0F 413F2F3F3C2D0504009E9D64F9F8ACE5E494DDD994D7CE91E6DD9CFCF5AD9A995C92955EB1B176 C0BE81D0CB8BCDC681DCD38EEAE39AE6DE96E2DA92DFD891EEE8A2F2E9A7E8DF9CE1D992DAD289 E3DB91E0D98BE2DB8DEBE496EDE698EBE398EFE69DEEE79FEAE39FF4EDA9F1EAA6E8E19DB8B16D C2BB77E0D995E7E09CE6DF9BDCD591DFD894EFE7A4F3EAA8E9E09DDDD492E9E09DF2E9A6E7DE9B F1E8A4F4EBA5DED590E3DA94E4DB96E2DC93E2DE99AEA86CD5CF9BB0A980888260241F05433F27 565332565630A5A77D797B4A7E7F42C4C481DDDF96CFD083CDCE81DAD991D6D390D1CB8CD2CD8C CBC77FD0CD7ED8D387CDC680B8B36FBEB977CEC889C2BE81DBD69DD8D49D85824A2B280E121000 1C1A0653561F666B2C95995DE8EEAA84865346441FB7BA78D1D396A1A072303007D1D294DAD99A E0D798D7CE8FE1DA9FEFEBB48280481E1D06DBDCA3E2E4A7BDBE7BCACC80DEE18FE6E9A3B9B988 A5A573B8B984FBFBC5F3F4BA65673A81834BEEEFB6F8F9C3FCFDC8F3F4C2D9D9A9D3D2A8C4C0A2 C6C1AC37321F322F17888855DFE1A2F5F8B3FFFFC76363367B7953FFFFD0FAF9D04B4729FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF1F1D6 E8E8B5EFEFBFF9F9D7FEFEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFBEFF9E5C3 F9E7BFFCF7D8FFFFF0FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4F4F4D9DBD9C2D2C2AADDA961C05F3BAD3AC2E5C1FAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0F2DF50B74F60B85FBBD5BBDCD9DCD4D4D4ECECEC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFDFEFEF9FEFDEBFEF9D7FFEABA D0D58DA3C66BC1D58DE2E4ADE7E6B2E4E6B0DDE5A8C5DC91A2CF7565BF5853B45161B25C9FC78D DFE4C7F6F5EAFFFFFDFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFBFEFBD0F0D0A5E2A5D0F0D0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAEEEEEEECECECFCFCFCFCFFFCE1F6E1 6DC46D60C06097D997D4F1D4F9FDF9FFFFFFFAFAFAEEEEEEF4F4F4FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7F6E78FD88F4EC14E71D071B2E5B2F2F9F2FFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFC36C D5CA70E2DC73DFD57FD6CA7FE1DA83B2A9634E4604CCC76FC7C169CCC66CD5CE77CFC587473C0F 766E3EE4E096D4D375CCCD67C7C267CCC373D4C87DDBCA7CD9CC7CD7CA7AD5C979D9CE7EDFD483 E0D584DED58771691DC7C077F1E8A3D6CD89D4CB89857C40A59E5DEEE89FE7E291DFD985EAE490 EDE696E9E092F0E797F2EA94EDE587EFE688F1E78FE8DE87EAE089F0E68FE8DE89E1D783E8DD89 E3D985F0E592EDE28FCABF6ED4C874E6D783F6E792FFF09CF4E68FE8D982EBDD85EDDF87E7D981 F1E38BEEE088EADC83EEDF89F2E38FEBDC88ECDD88F8E994EEDF8BE7D883EDDE89F3E490F0E18D EDDE8AF4E892E7DB86E3D982E7DD87F0E68FEEE48EE8DE88F6EC95EEE48EEDE38DF3E993FAF09A FCF29CF5E994EEE18CEEE38BECE188EBE087F3E88EF3E88EEADE8BEEE292F0E395F1E397EADC8A EBDC86F4E68EF2E58AE7DA7CE8DB7CF1E486F8EB8FF3E58EF2E390F8E79AEDDF92F0E396F6EB9B F4E999F9EE9EF0E595F0E595F5EA99F7EC9AF6EB99F3E896F4E897F6EB97EFE58EEDE38CDDD37F E8DD8AF2E797E9DE90F0E498EBDF95E6DA91EFE39CF3E6A0EFE29DF1E4A1F4E7A1F1E59DF4E89E F2E69BECE093F6EA9DEEE396ECE093EFE397F4E89BF2E48FE6D77FE3D67FE2D57EF0E48FF7EC99 F8ED9DF7F09FF8F2A3FAF2A7F7F0A5F3EEA1FBF1A9F7EDA5F2E8A0F1E89FF4EAA2F7EEA3EFE69B F4EBA0F2E99CF5ECA0F8EFA3F3EA9CF2E797F5EA9AF5EA9AF6EB9CF9EE9FF5EA9CF7EB9FF8ECA0 EDE195F4E89DFAEEA2F8EFA0F3EA9AEDE494F6EE9DFEF5A7EDE497F3EA9FF2E99EF1E7A0F2E8A1 F1E7A1F4EAA3F4ECA1F0E89AF6EDA0F3E79DE6DA90E7DB91F4E9A1E8DE96E4DD95F8F1A9D2D086 EBE99FCDCD83C2C47BBCBC77C0C17E8F914F9B9C60A4A66E8E915B727543787B4B55582A6D7046 0E12013B392A28241901000098975EF2F1A8E4E395E4DF9DE2D99EE8DFA1F2ECA4B8B77A5F6229 AAAA6FC1BF82F7F2B2E5DE9BEDE59FEEE79FE0D990DBD48DD8D38DE6E19DEAE1A1D7CF8DE6DE99 EAE39AEDE69BECE599F0EA9CF5EFA2EFE99DE9E398EBE49BF7F0A9F3EDAAEDE7A5F3EDABE1DC99 D3CE8BD8D290EAE5A2EBE5A3EBE6A3E2DD9AE3DD9BE9E09EECE3A0F1E8A5EDE4A2E8DF9AEAE19D E7DE9AEAE29AECE49BDFD790E4DC93D9D389E1DD94E3DF9DDAD59CCBC598645E3B1611003A351B 656145625F3C8082588588588A8C57939357DBDB98D9DB91BEBF73D5D58BDFDF97DAD695DED79A E1DC9BD7D28BDFDC8FEEEA9EF2EDA6E0DB97E2DD9AEDE8A8E4DFA0E5E1A4E7E2A9ECE9B2E3E3AF A49F6ABFBC85D8D798DEDF99EFF2A8F0F2ADBEBC91161000919255FBFDC4B0B089171805D5D9A0 E3E4A2ECE39EE9DF9DF8EFB2FFFDC5ACAA740F0F02D1D29FF2F4BDD5D89AE8ECA8E6EBA2E0E2A8 696A421B1D0C4B4E28D9DCA8EFF4B9585C38525621E4E8B5B3B58AACAD8988886A5C5B41474533 1C171416110E000000090600020000BCBB86F3F4BAF7F7C372714A75744FFCFBC8EBEABB2C2914 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFB ECECC6E1E1A1F2F2C8FFFFF3FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFB FFEFE2FBECCCF4F0C4F6F8DAFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF5F5F5DCDEDCC1D3C1A0D69F66BF654EB34DC8E7C7FBFDFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEE3F3E263BD6265B964A9D0A8CDD5CDD6D7D6 EEEDEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFFF4F4F9F0E5F1F1D3F0F0C5F3EFBB FDEAB9D0D893A3C971C3D893E4E6B4E9E8B9E8E7B8E9E8B9ECE9BCE1E7B9A9D99F75BF6657A734 84B14CC8CE8CE5E4BBF5F5DDFEFEEEFFFFF9FFFFFFFFFFFFFFFFFFFBFDFBD0EFD0A6E2A6D1F0D1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAEFEFEFEEEEEEFCFCFCFFFFFF EFF8EF9CD59C75C77579CD79B3E4B3F6FCF6FFFFFFF9F9F9E9E9E9F0F0F0FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9FBF9CFECCF6ECE6E3ABE3AA2E1A2CCE6CCE2E5E2 F4F3F4FEFEFEFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D2C66FD7CC73E2DB70DAD079CDC175DBD47BC2B972443C01C4BE64CAC56CC9C468DDD67DDDD394 53481B675F31E6E29AE4E386D5D770CBC66BD5CD7AD4C87CD2C273D5C876D8CB7CD9CC7DD6CB7B D7CC7CDBD082F1E79C797126A59D54DCD48BD0C782DBD28F9C935A847B3EEEE6A1F3EE9DE7E18C EBE58FE5DF8CF4ED9CDCD481DAD47BF1EA8AEAE280EFE58EE6DC85F5EB94E9DF88D8CE77E4DA83 F7ED97E8DE89E6DC86E6DC86CEC46FF0E38DE9DB83E3D47EF2E48CFBED95F6E890E8DA82ECDE86 F0E28AF1E38BE6D880ECDF86F7E892EDDE89EADB86EFE08BECDD88E8D984F3E48FEBDC87EBDC87 EEDF8AEDDE89E8DC86EADE88E3D982E6DC85EEE48DEEE48DE8DE87F0E68FF0E68FF4EA93F8EE97 F6EC95F3E992F3E88EEADF86ECE187F0E48AF2E78DF5EA90EADF86E1D580EBDE8EF0E395EFE195 ECDF8AECDF83EFE285EBDE80E6D97BF0E383EFE283F4E78CEFE18AF0E18EFDEE9EF7E99AF3E697 F7EC9BF5EA9AFBF0A0F1E696EDE292F2E794F4E997F4E997F2E795F5EA98F9EF9AEFE58DEBE18A E0D67FF1E792F8ED9BE7DC8CF2E79ADFD389E0D48BFAEDA6F0E39DF3E6A0F7EAA4F1E49EEADE97 F7EBA3F2E69DECE096FAEEA4F2E69BF0E498F4E89CF4E89BF5E995E7DB85E3D783E2D682F0E594 FBF09FF2EA99F2E99BF1EB9CF6EEA3F6EFA3EEE69BF4EAA2F3E9A1F2E8A0F1E79FF3E9A1F3E9A1 F7EEA3E8DF94E2D98EF1E89DF6EDA2F0E69BF1E597ECE192F7EC9DEBE092ECE192F8EC9FF5E99D FBEFA3FBEFA3EEE295ECE094E7DE8DF1E996F7EF9CEEE695EFE797F5EC9FFAF1A6FCF2AAF4EAA3 EFE5A0F4EAA6F3E8A5F4ECA1F0E99BFDF4A7FDF1A7E6DA90DCD086EADF97ECE19AF1EAA2F4EEA5 EDEBA1CCCC82C0C177DBDD94C0C17BA4A6627B7D3E717237BDC088676937797B4B74774A65683B 686B442327072F2C2118140B060500A8A770F2F2A9E4E297E8E2A1E2D99EE5DB9DF0E9A2D1D091 B7BB80C6C78ABEBD7DF5F1B0DFD996E8E19BF0E9A2EAE59CEAE69FD8D58FD6D38EDAD593CCC582 EDE6A0F4EDA7F0E9A0F3EDA1ECE69AE3DD91E3DD91EDE79DE3DC94E6E09BF1ECAAEBE6A4F2EDAB D3CE8CE9E4A2F4EFADF6F1AFE8E3A2EBE6A4EAE5A3EAE5A3E5DF9BE2D994EFE6A2F4EBA6ECE39E F4ECA5F5EDA5EBE39BE7DF96E7DF96ECE49AD1CA7FE8E59FE4E1A4FFFFCB6E69451712005B553F 45402C322D135653307A7C4E797B45ABAF74B1B075B2B371C5C77EB3B469EFEFA5F1F1AAE4E0A0 EAE4A6E6E1A0D9D48DE4E194EEEBA0F7F3ABE7E29EE6E19FEDE8A6E6E1A2E7E2A3EEEAADE6E0A6 ECE7AEF2EEB6FAF8C0E4E0A2DDDA94E5E499EBEBAAC0B99B0E06087D7D4BFFFFE0BAB89F161604 D3D4AAF6F8B9E0D88FE0D78DEEE6A5F9F6BCC0BE8A0A0D00A2A574A0A375797D4CCFD49DF7FDC1 DADDB027271D0304000609007D8152F9FEC77D824C484C1A9C9F79000000090800100E04010000 1311041B1A114743386A67543B3A2746451BF1F1BCF8F8BEEAEBAE646438706F42FDFEC2CECE9C 29270AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8 F1F1F1EAEAEAEBEBEBF0F0F0FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCF5F5F5EFEFEFEDEDEDFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFCFCFCF8F8F8F2F1F2EEEEEEEBEBEBE9E9E9E9E9E9E9E9E9EDEDEDF1F1F1F5F5F5F9F9F9 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F2F2F2 EEEEEEEBEBEBE9E9E9E9E9E9EDEDEDF3F3F3FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFD FBFBF2EDEDC6E5E5ACF3F3D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFEFEF6F2DBE8E5B2EDECC3FDFDF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF3F5F3D7EBD6A3DBA176C7746DC06BD1EBD1FBFDFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7F5E77FC67E71C1709CD59BD0E9CE F2F5F1FDFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F4F4F4 F1F1F1EDEDEDEAEAEAE9E9E9EBEBEBEDEDEDEFEFEFF6F6F6FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFBFBFBF4F4F4EEEEEEEEEEEEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFBFBFBF7F7F7F3F3F3EFEFEFECECECEAEAEAE9E9E9ECECECEEEEEEF1F1F1F8F8F8FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF4F4F4 EFEFEFECECECE9E9E9EAEAEAECECECF3F3F3FAFAFAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEF9FDF3EEFDE4DEF2DEC3E3E1A9E1E2A3 E7E7B2FBF7E6D0ECC7A5DE9FCFECC8F8FAF1FDFCF7FCFCF6FCFCF6FCFCF5FAFBF4F4FCF4CDDFA4 A0BC44A3B439C2C469D7D790E9E9B4F8F8D1FDFCE7FFFCF8FFFEFEFFFFFFFBFEFBD0EFD0A5E2A5 D1F0D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFFFFFF FFFFFFF6FAF6CCE7CC91CF9164C06496D696F0FBF0FFFFFFF2F2F2CECECEDEDEDEFAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFCE2F0E2A9DAA964C76453C553CFEECFDBE0DB CDCDCDE6E6E6FDFDFDFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDCD079D9CE74DCD56BDDD37DD5C97DDBD47CC3BB744E4602B3AE55D3CD75D2CD71D7D075 D3CA875B502650471DE7E39BD7D67AD2D36FD1CC71DFD785DDD283DACA78D4C673D0C472D8CB7C DCD081D6CB7CDACE82E1D78C8E853AA59D53E0D88ED6CE84F0E7A1786F35504711CDC680D5D07F E9E48DDED781E0DA83F2EB97E4DC87DCD57AEEE785F6EE8DEDE18AF5E893F7EB95EEE28CEBDF88 F1E68DF5EA91F3E790EBE087E1D57CE7DC85ECE087EFE188F2E48CEBDD84F4E58DF6E88FEEE088 F4E68EF1E38BF1E38BECDE86EDDF87F0E18CEEDF8AEDDE89EFE08BF2E38FF3E48FF4E590EFE08C EDDE89EFE08BEDDE89E4D882F8EC96EFE58EF6EC95E6DC85E8DE87F2E891EDE38CF4EA93EFE58F F7ED96F5EB94E3D982E7D981EDDF86F2E38BEFE287F2E589EEE085F1E38BE5D682F2E292FEEFA2 F8E89CF4E590F7EA8CF2E587E8DB7DEEE182F5E88BEEE185EEE086EBDD86EEDF8BF7E897F8EB98 F5E996F2E894F5EB97F9EE9CF8ED9BF2E795F4E997F1E694F2E795F4E997F4E997F1E792F3E991 EBE187FAF099F3E994F3E896F4E998F1E597F2E69BF6EAA1F6EAA2F9ECA6F9ECA6F2E59FF8EBA4 F9ECA6EEE19AF2E69EF6EAA2F0E49BF2E69CF4E89CEEE396EFE394EEE895F9F09CF1E795F0E594 F2E897F6ED9CFCF4A6F4EC9EF8F1A3F2ECA2F0E89EE8E098EEE599EFE69AF4EB9FF8EFA4E9E095 F1E89DF0E59EF7EDA6F5EBA4E8DE96EBE199F6EDA2EEE296F3E79BF3E79BF0E498F2E69AEADF92 EDE293F0E596F5EA9BEEE394E7DC8DE5DC8AECE48FF2EA95F6EE9DFCF4A3F3EA9DF3EA9EF7EDA5 F8EEA6F9EFAAFAEFAEF1E7A4F1E99EFCF4A7F8EFA2F1E59BEFE399E6DA90F5EAA2F2E9A2E6DF97 F3EFA6CFCD83B7B76DD3D489C3C77DBABE78919450707334ABAF738D9059767A477175457C7F54 8A8C634D50292B2F1038362A2A261B010000B1AF78EAE9A0D7D589E9E4A2EDE4A9F2E8AAEBE49D EEEDAE818348BCBC7EC8C686E8E4A2EBE6A3EBE49EEDE8A1E4E099F6F2AECDCB87E4E29FE8E2A3 E3DB9AE7E09AF2EBA4F3ECA3EEE89DE1DB8FDBD589DFD88EE8E199E8E19BF6F0ABF6F1B0EEE9A9 DCD797D8D393E3DE9EE8E3A3EBE6A6E2DD9DECE7A7EDE8A8F1ECACECE6A1F1ECA4FCF5AEF1EAA2 E7E199E3DD94F2ECA2F5F0A6DED98FE2DC90EDE89CF0EBA2EBEAACDDDCA46562380F0B004A442B 5954404C47324A462B6A68427D804E8D9157ACAF72ACAC71898A499E9E58B6B76BE1E197E9E9A2 F3EFAFF6F0B2DDD899DCD792E4E094EAE79BECE8A0EBE6A2EDE8A4E8E39FE9E4A3F4EFAFE2DC9D E3DD9FF1EAADE3DC9FE2DA9EEDE7ACF2ECAEE2DE9CFFFECAB0A693100407B3B18BD5D3B05E5A4F 0D0B01494C2D9DA069EBE69AF1EA9EE8E49FDEDCA2F3F3C35253281E22080207000000002C3018 979C73B3B69A202112040600000400080E00CCD2A1B3B787343B0E9B9F7F27291E18180F040304 0A09007D7D60E0E0C3FFFFDFFEFFD6F6F5C1FEFFBEF7FAB0E2E595F5F8A76F6F2DA7A766F8FAB9 C8C8931F1D08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF CCCCCC9E9E9E7676767A7A7A989898E5E5E5FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDE9E9E9BFBFBF939393868686E0E0E0FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBEDEDEDCECECEA4A4A48F8F8F8181817474746F6F6F737373898989A3A3A3B8B8B8 D2D2D2F6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFED5D5D5 A5A5A58E8E8E808080757575757575878787B0B0B0DADADAF5F5F5FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F8F8EBEEEECCECECBBF1F1C6F9F9E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAF4E3F3E4BBF5EAC1FEFCE8FFFFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF7F7F7E0E3E0BAD5B787D3806FCB6677CC70D5F0D3FCFEFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8F5E884C88374C37397D596 C6E3C6E9EDE9F9F8F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE8E8E8CECECE B6B6B69E9E9E8888887777777474747D7D7D898989979797BEBEBEE7E7E7F8F8F8FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBE2E2E2B6B6B68D8D8D919191EBEBEBFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9E0E0E0C7C7C7B0B0B09797978282827676767474748282828D8D8D9F9F9FCDCDCD ECECECFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE4E4E4 B3B3B3979797838383747474757575838383A9A9A9D6D6D6F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF7F0F2D5F2E7C4FADFC5F9E3CAF0EECE EFF0CFF2F2D9FDFDF8D0F0D0A5E2A6D1F0D1FBFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF7 E8DD9DC9B43BCBBE59E0DFACEAEAC5EEEFC9ECECB6F4EBC3FEEDD8FFF8F1FFFFFEFAFDFAD0EFD0 A6E2A6D1F0D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFDFBF0F7F0A1D6A14DB44D74C974DFF9DFF9FFF9F8F8F8E4E4E4EDEDEDFCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCF9C5E6C57ECA7E6BC86B7ED17ED3E6D3 E5E6E5E3E2E3F2F2F2FEFEFEFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE0D47EDACF76D5CE66D8CE78D7CB81D4CD76B5AC65332A00ABA54CCCC66EC9C467 D5CE6FDBD28E62572D413810CDC982D3D277D7D773D5CF74D8D07DE0D686E1D17CDBCF78D7CB78 D6CA77D5CA7AD1C677D1C579E4DA8E9A9144A49D4FD7D083DCD587EDE59AABA2673A3200B3AC65 EBE694DFDA81E3DE83E6E089EEE791EFE792ECE58AF2EA8BF8EF90F5EA92F4E892FBEF99F8ED95 F0E58CEEE38AF4E98FEFE48AEDE286E7DC81E7DC82EADE82EEE185F2E589EDE085F1E489EEE087 EEE087F9EB92E5D77FE3D57DF8EA92F2E38EE8DA83E4D67EE3D57EE7D982EEDF88F0E28BEDDF88 EEE088EEE089EEDF88EEE089EDE28AF0E58CF1E78EF1E78FE5DB83EDE38AE9DF87E9DF86ECE28A EFE58CF1E78FECE289E6DB83EADB84F2E48CEFE188E7D980F0E387F1E488F3E58CE6D881EBDC89 F2E393EEDF8EF7E892F6E98CE9DC7FE5D87BF0E386F7E98EECDE85EEE087EDDF87EEDF88F3E490 F1E48FF3E791EAE089E8DE87F1E792F7ED99F7ED99F3E896EBE08EEDE290F8ED9DF7EC9CEFE492 EBE18AE9DF87EEE48EF4EA95FAEF9DFAEF9DF7EC9CF2E799E9DD92EFE399F7EBA1F3E79EF1E59C F3E79EF3E7A0EFE39BF5E9A1ECE098E3D78FE7DB90EDE294EFE494F4E999F2EB9AE3DC8AF6EE9E F5EC9DF4ED9CFFFAABFCF5A7FDF5A8F2EB9FFAF3AAF1E9A0F1E99FF4EB9EF4EB9EEAE192EEE599 EBE296F1E89BF2E89EF0E79CF2E99FF1E7A0F4EAA2FAF0A8F3E79CF5E99FF3E69CE3D78BEBDF93 ECE194EFE495F9EE9FF6EB9BE9DE8EECE091EDE492F0E893F2EA97F3EB99FBF3A2FDF4A7F3EA9F F1E7A0F0E69FF6ECA6FCF1AEF4EAA7F2EA9FF6EEA1F5EC9FF6EAA0F4E89EECE096F3E8A0F8EFA8 F0E9A1E1DC94CFCD83E9E99FD8DB92CDD0889EA15D7D82408B8F53656930858955777A4C606439 73784F757853434721404423151306333024151401888750E3E198D3D283D1CC89EBE2A6EEE4A5 DCD68CC7C78667682CBCBC7DE1DD9DE4E19DEAE5A1F0EBA4EDE8A2E6E39DECEBA8D9DA97DFE09E EBE6A7EAE5A4E8E39FEFEAA3EFEAA1E2DE94DFDB8ED1CD82D4CF85E7E299EFEBA4FBF6B2EEE9A9 EAE6A6E0DC9CDDD898E5E0A0EBE7A7E6E1A1D8D494E9E5A5E1DD9DE1DD9CE7E49FF2EFA9F8F3AE EAE4A0D7D48EDAD692F6F1ADEDEAA5CEC988D9D492F3EEACFFFFBEC5C38F403F1A2A2805413E1F 423D25605B4649452C4845269D9B759B9B699C9D645C5D21BAB97FB4B574A8A962BCBC72F2F2A9 EBEAA5E8E4A4EEE8ACF1EBADF2EEA8EDE99FE5E198EAE7A2F0EDA8EBE7A2E9E4A0EFEAA7E1DB97 DED696DFD796E4DB9BE9E0A0E4DB9CE0DAA0F2EBB5F2EAB6FFFDCD847A67180C0C3B3618221E10 09050314110302010058582BF9F7B1F1EDA5F3F1B2C3C38ED7D8AE6F73520B0E005256422F3320 0000005D5E44D6D6C2C5C3B89F9D8E292A1A000000BBBF91A1A57835380EF9FADCD8D7C586837E 1E1B1D0401001211092C2C1764633BBAB989F1F1B8F1F2B0E9EAA1EDEDA0EFEEA1DEDB8EF4F0A8 F6F4BBE7E3B9241F0CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFF D8D8D89393934646461111111818184A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFBFBD8D8D88F8F8F4444442F2F2FC8C8C8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF6F6F6DBDBDBA2A2A2585A583F403F3131311F1F1F1818181C1C1C383838585958 707170979797D6D6D6F0F0F0FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF2F2F2DFDFDF A1A2A15F605F444544363636262626202020323232676767A6A6A6E7E7E7FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3D9E3E3A8EBEBB4FDFDE1FFFFF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF6ECFFE8CFFCEAC4FAF8D4FDFDECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F2F3D1D3D0A1C29D6DC96364CC577BD56FD6F2D3FCFEFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAF6EA8DCE8C77C576 8FD08FB7D7B7DBE0DBF3F2F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CDCDCD 9A9A9A7171715050503535352424242323232E2E2E393939434343787878B7B7B7E0E0E0F4F4F4 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3A3A3A414141DBDBDBFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2BCBCBC8F8F8F6868684646462F2F2F2424242424243333333A3A3A4D4D4D 8C8C8CC2C2C2E7E7E7FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4F4DFDFDF B5B5B57272725050503939392626262121212D2D2D5B5B5B9F9F9FDADADAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF9FCFCF3F6F6E5E7E9BAEAE1AEF8E2BEFFEEDD FFFDFBFFFFFFFFFFFFFFFFFFD0F0D0A5E1A5CDF0CDF6FEF6FEFFFEFFFFFFFFFFFFFFFFFFFEFEF8 FBFDE0EED588E2AD38EDC981FDFAF2FFFFFFF7F7E8E6E5B2EFE1B0FDE4C0FBF1DCFAF8F0F5F8F3 CFECCFAAE1AAD3F0D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0DDB043B0435BC15BC7F3C7EFFEEFFFFEFFFAFAFAFCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FCF2A7DBA75ABB5A79CC79AEE2AE D5E1D5EDEEEDFDFCFDFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD8CD78D4C971D4CD67DBD07DDACE86D9D27CC7BD7A3B3100ADA751D4CE78 D2CD70D7D171E3DA94706638332B00B9B56DD3D278D6D772D9D378D6CD7AE5DA89E3D57CDDD178 E2D680E1D57FD9CD7BD5CA7BDDD284F3EA9D8C8336938D3EDAD383D3CC7BE4DC8EC8C0824C4309 9C964EEEE996E6E286EAE588E5E086E1D983EAE28DECE58CEBE285F3EA8DF3E790EFE38DF3E690 F1E68CECE188EDE288ECE186E8DC80ECE185ECE183E9DD81E9DE7FEDE082F0E387EEE185EFE286 E7D980EDDF86F9EB92E9DB83EDDF87FCEE96F5E691F0E28AECDE86E6D880E6D880E9DB83EBDD85 DFD179E7D981EBDD85EADC84EEDF87F4E990EEE38AF4EA91EBE188E5DB82F7ED94EDE38AEAE087 EBE188F3E990F1E78EF1E78EF7EB93EFDF8BF1E28DEDDF87E6D880F0E387F2E589F8EB8FEBDD84 EBDC86F1E28DEFE08DF2E48DF3E58CF4E68EF3E58CF0E28AECDD85ECDE86F2E48CF2E48CF0E28A F2E48CEEE28BECE08AE9DF88E6DC84E6DC87ECE28CF2E893F2E795EDE390EEE391F4E999F4E999 EFE492EFE590F2E893EFE591F5EB96F2E795F1E695F0E595F2E797E6DB8CEEE394F1E697EBE090 F0E498F0E498EFE399F0E49CF7EBA3F5E9A1EEE298EEE395F2E797F0E593F4EA97F4ED9DF6EF9F F8F1A1E4DE8EEFE89AA7A053635C0ED8D084E7DF95F4ECA3F9F1A8EEE69BF4EC9CF8F09FE8E08F F0E798F5EC9DF6EDA0F1E89CF3EA9FF7EEA3F3E9A1F1E79FF7ECA4F6EAA1FCF0A6FDF5ABEEE296 ECE094EADF91EBE091F6EB9CF5EA9BECE191F1E595F1E895F1E996F2EA97F0E897F2E89AF5EC9F F4EBA0F1E89DEBE19AF0E6A1F7EDA8EFE59FF3EBA0F0E99BF0E79AF6EAA0F5E99FF0E49AECE199 E1D790E3DC94CEC880D2D086C1C179C8CA84BFC37E8A8D4BB3B87A7D8047767943777A4A83865B 4346206266432C2F0F565A35151803302E1D504D3D01000096955AD9D98CCFCE7EB8B46FDFD698 E4DB99DDD78DA8A6646C6E2FCFD08FD7D394E9E6A2E9E4A0E3DF98DBD892EAE9A3E4E6A1D1D490 DDDF9DF0EBABF1ECAAE6E19DEAE5A0ECE8A0DFDB91DBD88CCBC77DC8C47ADAD68DE0DC95E8E3A0 E4E0A0EFEBABECE8A8E0DC9CE1DD9DEAE6A6E0DC9CCDC989E8E4A4E7E3A3F1EDADEAE8A8E7E6A6 E6E5A6EEEDAED6D599CAC88DBCBA81CDCB93D9D79FE9E6B1C0BE887B78452E2E050D0A00413E20 3C381C322E14423F23504C2E6E6C4864623980804D6162296B6C339D9D63AAAA6AABAC66C6C57C EFEFA7E2E19DEFEBABEBE5A9F1EBADEDE8A5E8E49AEBE89FECE9A4E6E39EE9E5A0EEE9A5DED894 CFC985DAD38CE9E09CE9E09AEAE09BF5ECA8CDC78AC9C28EE8E0B3F2ECB97B73560300000C0800 161103110B091A17080C0A0083815CECE9B1A19E67C1C091DDDEB8C6C9AC22240F4E5144F5F5E5 949782080A004040287978669F9D8F8A89751313032A2B0ADCDFB3B2B5870A0C021C1D00201F0B 353328181510100D020301000906000200001E1B04CCCA93E4E2A6EAE5A7F3EDADEFE6A7F9F1AF EDE4A3FCF8BDF9F4C4ABA67BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC F6F6F6B1B1B14C4C4C1414141B1B1B2222224A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBD7D7D78F8F8F4D4D4D3E3E3ECCCCCCFBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0F0F0C9C9C98383833E3E3E5454547777777272727070706E6E6E636363 4A4B4A303130363736747574BDBEBDFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDC6C6C6 6C6C6C5455545959597C7C7C9192918E8E8E7576754D4D4D373737494949CECECEFCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F3D9E3E3A9EBEBBEFDFDF2FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFEF8EEF2EDCAE8E8B3F4F4DAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEF0F3F0C0DEBE6DC26960C5567AD46CD6F2D2FCFEFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F9F0B1E0B0 85CC8474C2749CCA9CD9DED9F3F2F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5 A8A8A85757573838383E3E3E5757577676768787877D7D7D6161613434342B2B2B404040969696 D3D3D3F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CACACA8181814444444F4F4FDEDEDEFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEE8E8E88989895151513838384141415F5F5F7B7B7B8989897A7A7A535353 2D2D2D262626585858A7A7A7E3E3E3FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6C8C8C8 7D7D7D4B4B4B5151517272729292929292927373734A4A4A2A2A2A484848B2B2B2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFE7F1F1C6E6E6B1F0F0D1F9F7E8FEF8EF FFFBF6FFFEFEFFFFFFFFFFFFFFFFFFCFEFCFA1E1A1BFF0BFE7FEE7F9FFF9FFFFFFFFFFFFFFFFFF FBFBF2EAECBEE0D07DDEBB53EDD598FDFBF4FFFFFFFDFDF9F9F8EBFBF7DEFBF5CFECE9B4E4E3BC E2E2D6CCDFCFB9DFB9DCF0DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFE5BF62C0625FC35FA8E4A8DDF5DDFBF9FBE8E8E8 EFEFEFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFF9E2FCE28FD18F4BAB4B8BD28B D7FAD7EFF7EFFAFBFAFFFEFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDACD7CD5C975DCD470E0D584D8CB85DAD27EDDD493524809989240 C7C16CCDC76CE1DB7AEAE29A7E75442C2300A29E56D0CF75CDCE6AD5CF74D1C873DDD380DCCE74 D1C56ADBD076DDD279D2C873D5CA79E6DB8CEEE496A1994A938D3ED6D07BE2DC85E0D986DAD293 463E0A817A36F3EF98E3DF81E2DD7DEAE58ADFD881E7DF8AEBE58CEAE186F1E88CEFE18AEEDF88 EEDF87E9DB83EBDC84F2E48AECDF83E9DC7FEFE284F2E585EFE283F0E383F1E484F1E486F2E587 F3E687EBDE82ECDE84F0E288EEE088F8EA91F0E28AEEDF8BF9EB93F5E78FF1E38BF0E28AF2E48C F3E58DE4D67EECDE86EFE189EADC84ECDD86F1E68DF1E78EF3E990E8DE85E6DC83FBF198F2E88F EDE38AF0E68DF1E78EEDE38AF1E78EFBEE99F8E896F5E493F3E28EF2E28AF6E78DF3E488F7E88C EBDC81EEDE85F5E58DF3E38DEBDC86EBDC86F5E691F4E590EDDE88F0E18CEBDC87F2E48DF3E58D EDDF86EDDF86EADE85E5DA81EEE48BF0E68DE9DF88EAE089F3E992F1E792F5EB97F3E896EEE393 EDE292F1E696EEE390F3E896F5EA98F9EE9CE7DC8AEFE492EBE08EF5EA98F1E595F6EA9AF1E695 EADF8EF2E797EFE495EDE195F2E69CF8ECA2FAEEA4F7EBA0F7EC9DF8ED9CF4EA93F4EA95F0E898 E8E294E6E092E3DB8FEBE398908741A8A055F1E89EF1E9A0F3E9A1F4EAA2FCF4A9EDE593F4EC98 E9E18EEFE795ECE493EBE293EAE092F5EC9FFBF2A5F3EA9FF0E79CF9EFA5F6EBA3F2E69CF3E79D EEE298F1E599F1E598F2E798F4E999F9EE9EF4E999F0E593F2E997F2EA99F4EC9BF4EB9CEEE596 E9E093F0E79CF0E69CEBE199EFE59EF6ECA4F2E8A0F6EEA3EFE79AEEE597F1E59BEFE399EFE399 EDE29AE3D991EAE39BE2DC94B6B46AC3C37CCACB87A6AB68B7BC7CA0A368969B646367348F9265 72764F6A6E4B4C4F3136391C191C031E23064846334744320C0B00A5A466D4D385BEBD6BBAB670 E6DD9DE5DC98E0DA8EC9C885969859B0B06FD1CE8CC4C17DCECA84D1CE87C2C079CDCD87C8CA86 B5B975DBDF9BE6E1A2E6E1A0E4DF9CEAE5A1F1EDA4EEEAA0F2EEA4E7E399DCD78EE2DE96DCD793 DCD896DAD697EEEAABF8F4B5E9E5A6E3DFA0E6E2A3DCD899D0CC8DE6E2A3DBD798D7D395D3D298 DCDCA6D7D6A2D8D7A4AEAD7CABA97CA4A277AEAB839E9B758A87635D593727250526260F363519 1817004D4C3057563938381738381377774E6261346666337878418E8F577A794099995AB7B873 BCBC72DBDB93E4E39EEFEBACF5EFB4F4EEB1EAE5A3EAE69CEDEAA1EEECA6F2EFAAF0ECA6E5E19A DBD48EDED68FE7DF97F7EEA7F0E69EDCD28AEFE69FE4E09AD3CE95F4EDC1F4F1B5BDBA815E5835 7C794CA19D73B6B18EBCBB80A5A46FDDD9B44B48271412002F2E184F503C4143350507003F4136 2C2D250B0D01000000000000000000000000000000323216A1A276FBFCCDDADCAC393A1D151600 1717011716071E1C0E2A251926201725200A29250F6D6941EFEAB5F1E8B4EEE5AFE7DCA7FFF8C3 F9ECB4E4D89CF2EDA3F2EFA7F6F2AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7F7CCCCCC8788874142412526253333332F2F2F4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE8E8E8BEBEBE999999919191E2E2E2FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5F5F5DBDBDBB0B0B08787879D9D9DBABABABABABABABABAB8B8B8 ADADAD8081803B3C3B191919444544A1A2A1F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C9C9C9 8C8C8C3D3D3D585958939393BDBDBDCECECECECECEB9B9B9868686404140242424A3A3A3E1E1E1 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF5FFF5E9FAE9DDF2DDDAF1DADAF1DA D9F0D9E2F6E2EFFDEFFAFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFBFFF6ECF8E9D0EEE0BBF3EBD3FEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9EEEECBE2E2A7F1F1D4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF9FAE5E8E5AACEAA54B55363C16594D899DFF4E1 FCFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FAF2 BDE6BC8ACF896CBE6B94C594D8DED8F3F2F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7F7BCBCBC8383837B7B7B888888A1A1A1BCBCBCCACACAC1C1C1A6A6A6747474393939171717 5C5C5CABABABE9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE0E0E0B6B6B69494949A9A9AEBEBEBFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEEDEDEDA4A4A48282827C7C7C8D8D8DA9A9A9C0C0C0CCCCCCBDBDBD 9696966565652020202A2A2A717171C0C0C0F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CFCFCF 8D8D8D4D4D4D424242878787B1B1B1CECECED2D2D2B7B7B78888883B3B3B282828888888E4E4E4 F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF5FCFCE4F3F3C6EDEDBDECECC4F8F8E9FEFEFC FFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFE3F6E3C3ECC3BAEDBACDF4CDEEFCEEFFFFFFFFFFFF FFFFFFFAF8ECE4DB9AE1CA76E8C879F4E1B8FEFCF6FFFFFFFFFFFFFFFFFDFFFFF4FDFCE4F4F2C4 DAE2AEBED4A6BBD7B5D4E9D4EDF6EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2ECD28CCF8C6CC46C89D389CBECCBFAF8FA E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9F8E9BDE6BD7AC37A5AAE5A 9CCF9CE4F4E4F8FCF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED182DBCF7CDDD673DFD485D9CC88DAD280E9DF9F6C6226 898332C7C06FCDC76DD8D370E2DA91877D492921008C8940CCCB70CDCD69CFC96ECDC56FD5CB76 DACB71CEC364D1C66AD1C66DCCC26CD5CA78DFD485DAD180D3CB7ABAB45FC9C36CD4CF74DFDA82 E5DC9C6961228B853AF2EE97E0DD7DDFDB7AE4DF84E2DC82E6DE89E8E18BE8DF86E7DD84EDDD88 E9DB84EDDF87EFE087EDDF86F0E387EEE184EADD7FEDE080ECDF7FEBDF7DF0E483F0E383EBDE7E EEE182F1E486F0E387EADC82EEDF87E8DA82EADC86E9DA85E9D985ECDE87EBDD84EBDD84EDDF86 EFE189EDDF87ECDE85EFE188F1E38AEDDF86EEDF87EFE48AF1E68CEEE58AEAE186E4DB80F0E78C E7DE83DED57AF0E78CEEE58AECE388F0E78CF3E790F4E393F4E393F1E18EEDDD86F3E38BF1E286 F4E588E7D87BEFE084F9EA8FF3E389F1E28DF0E08DF5E694F6E796F2E390FAEB99EBDC89F1E28C F0E28AE9DB82EADC82E9DE82EBE086F1E88DF4EB90F0E68DEDE38BEDE38CF3E994F5EA97F4E997 F0E595F0E595F2E797FCF1A1F4E999F1E696E5DA8ABFB462DACF7DF1E695F3E894F2E894F4E995 F2E893F1E792F4E996F1E696EEE395F6EA9EF9EDA3F4E89DF2E699F6EB9BF9EF9BF4EA92F2E990 F1EA99ECE69BECE79AE2DC90E6E094FAF8AEF1E9A0EEE69DF6EEA5FAF0A8ECE29AF0E79BF6EF9A F7F098F3EB96F6EE99EAE28EEEE693EEE695F2EA9AF9F0A1F6EDA0F4EB9FFBF1A7FCF0A8F4E8A0 E5D991E9DD93F7EB9FF3E89AF2E799F1E696F9EE9CF7EC9AF1E694F0E795E8DF90EBE293F5EC9F F0E79AE8DF92EFE69BF5ECA1F4EBA1F2E8A0F7EDA5F9EFA7EDE69AE9E294ECE396F0E49AF4E89E FFF2A8EEE29AECE29AF5EEA6BAB36BE0DD93E8E9A1B3B7749EA361858A4BA7AA718B8F5CA3A776 71744A6468455D614154593B060A011B1F00585C378A89762B291D090900BCBC7DDBDB8CB8B764 CCC880F3EBA9E8DF99D5D082EBEAA5A5A668D7D897D7D491D2CF8ACBC881D0CD86CDCB85B9BA74 C4C783B6BB79D1D694C6C484C8C384D5D28FDBD892D9D78DE0DD93E1DF93DFDD93CFCD83CCC982 C4C17CC6C380C0BE7EC8C787E0DF9FE1E0A0D4D393C4C283C0BF7EC4C382CFCE8EAEAD6D8D8C4E 767542797A4E6E6F457D7D555B5B37676645424124302E151613022C2915393623252211343321 1F1D0B4B4B34545439434322333310494A2152522565643480814E9C9C6879794496955E9A9A5B BABB76BBBB71D5D58CDEDC9AECE8AAF2ECB2E5E0A2E2DD9AE5E198E0DD95E2DF9AF2EFAAEFEBA5 D1CD86D1CA82E6DF97EFE79EF5ECA3EFE49AE7DB92EEE499DEDA8AD6D593C6C293EBEBA2F0F2A2 F7F6B6FDFDBBFCFAC4C9C692C8CA77FCFCB6A8A47D000000070400010000020100000000000100 00000003050032341D7F805E7C7A5586845F747250898763BBBA8DD4D5A4E3E3AFE9E9B3F0F0BC C6C695C0C093DBD9B3DDDBB8EEEACAEBE6C2E8E5B6F1EDB1E8E59FF4EFA7F0EAA2FAF1AAF9EDA8 F6E9A5E1D28CF5E9A1F5ECA7F1E9A9F5EDAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCFCE9E9E99798976566655859585556554D4E4D393A394A4A4AD1D1D1FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFAFAFAF5F5F5F1F1F1F0F0F0EEEEEEEEEEEE F0F0F0F1F1F1F4F4F4F7F7F7FBFBFBFDFDFDF8F8F8EAEAEADDDDDDDADADAF5F5F5FEFEFEFFFFFF FFFFFFFEFEFEFAFAFAF4F4F4EFEFEFF5F5F5FAFAFAF6F6F6F2F2F2EEEEEEEEEEEEF0F0F0F2F2F2 F6F6F6FDFDFDFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8EFEFEFE7E7E7ECECECF2F2F2F2F2F2F2F2F2 F2F2F2F5F5F5C6C6C66262621C1B1C2F2F2F939393F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFE8E8E8 9C9C9C5353533535357F7F7FDBDBDBF6F6F6F7F7F7F6F6F6EBEBEBC1C1C15B5C5B181818737373 BDBDBDF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFCF9FDF9FAFCFAF3FDF2E2FCE2CCF4CCB6E5B5B2E2B1 B3E2B2B0E1B0BFEBBFD7F8D6ECFDEBF7FCF7F9FDF9FAFDFAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFBF6FDE8CDFCDFC5FBDFD2FDEEEAFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFBEFEFCEE4E4AAF2F0D2FFFEFD FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F3F4CFD3CF89B48837A73769BF77B7E0CF EBF6F2FDFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3FAF3C1E6C18BCE8A68BC6790C490D7DED7F3F2F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCE3E3E3CFCFCFDDDDDDE6E6E6EDEDEDF3F3F3F6F6F6F3F3F3E8E8E8C8C8C8686868 141414313131838383DCDCDCFFFFFFFFFFFFFDFDFDFBFBFBF6F6F6F3F3F3F0F0F0EEEEEEEEEEEE EFEFEFF1F1F1F3F3F3F6F6F6FBFBFBFEFEFEFFFFFFFEFEFEF5F5F5E7E7E7DBDBDBDDDDDDF9F9F9 FFFFFFFEFEFEFAFAFAF5F5F5F0F0F0F4F4F4FAFAFAF7F7F7F1F1F1EEEEEEEEEEEEF0F0F0F3F3F3 F7F7F7FCFCFCFFFFFFFFFFFFFFFFFFF8F8F8D8D8D8D5D5D5E0E0E0E9E9E9EEEEEEF4F4F4F7F7F7 F3F3F3DFDFDFB5B5B54141411C1C1C4545459B9B9BF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFEEEEEE 9D9D9D5353533C3C3C666666D4D4D4F0F0F0F7F7F7F8F8F8EAEAEAC6C6C6626262222222626262 B8B8B8F0F0F0FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDFDE6F5F5CAE6E6ACEEEEC8FAFAEFFEFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFAECF9ECBCE9BCB5E7B5DEF4DEFDFEFD FEFFFEFFFFFDFAF5E3E3C976E7C471F6D5A2FEEDDAFFFDFAFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6 FBFCDFD2E7AE9FCC7FACD398ECF4E5FCFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6F4E6B8DFB87AC67A6AC36ABAE3BA FBF8FBE1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3ECD38ECA8E68B668 79BC79B1D1B1E7E9E7F9FAF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D078DAD078DAD076DED284DED286C8C068DAD18B 6C62257B732DC9C473CAC46AC9C265D7CF868F864F282000807B39CCCA77D4D474D2CD6ECFC86D D5CC72DDCF75D8CC71D4C96DCFC468D0C66BDBD179DAD07BE0D786C4BC6CA29C4ADBD57EE2DC81 DED97FDCD58BABA45DA9A452DEDA7DE3DF7CDAD674E2DD7FE7DF87EBE38DEEE48EEAE087E5DB82 E6DA84E3D882EDE38AF1E78DE9DF85E8DD82EBE183E8DE7FE7DD7CE1D876E0D675E8DD7CEBDE7E E2D575E8DB7BEBDE80EDE082EADD80F4E78BE6D87EDED177EEE087ECDE84E9DB81E8DB7FEBDE81 EEE285EDE084E9DC7FE7D980E9DB81EADC83EEE087EFE087F0E289EFE48BECE188ECE388E7DB82 E7DC82DDD479D3C86BF0E588EDE486F1E789F8ED90F1E58BF2E390F8EA95F5E790ECDE85F2E58B F3E78BF4E88CE8DC80EDE086F7E991F1E38BF3E490EEE290F1E392F5E795EDE28FEBDE8CEADC89 F1E691F2E68FECDE87EBE087EFE38AF4EA92EFE68EEEE48CF0E690EBE18BE2D883F5EB96F2E794 F3E895F5EA98F6EA97F2E794F3E895EDE291F9EF9CF7EF9EE2D784FFF4A2F2E795EBE18CEBE18C EBE18DF1E790F4EA96F4E997F3E898F0E596F8EC9FF9EDA3F4E89CF2E69AF5EA9BFAEE9EF1E794 F0E694F3EB9EEFE99DEEE79BF8EFA4F0E99DF0E79CF5EDA2EFE79DF0E89DEEE599F6EDA2F1E89B F6EE9DF2E996F5ED99F9F19FEEE695F5ED9DF6ED9EF2E99AF5EC9EF6EDA0F4EB9EF4EB9DF6EA9D F8EC9FE4D88BE7DC8DF2E897E8DE8EE9DE8EEBE192F1E798F0E79AF4EA9CEDE594E1D987E3DC89 F0E896F0E896EBE391F4EB9BFEF1A5FCF0A5F7EAA2F9ECA5FBEEA7FBF0A9F6EBA5F2E7A1ECE09A E9DE98F4EBA5EAE19AE9E29CC3BC77DEDB94E4E29AA7AA61B3BA749DA560909659999D689B9E70 9D9F788F906E696A4A6566471D1F052E30112F3216C5C99953533844422E2E2C07646425F1F3A2 C5C473D8D390F0E9ABE2DC95CECA77DCDB96E4E4A4DBDB9AD4D18ED5D28CDFDC94D8D58EE7E59D C8C982DEDE9AD1D38FCACA88CCC887CBC685DDDA97E1DC98D6D18BD8D48ED6D38AD9D48EC9C57F C3BF7BC0BA79C5C280C2C180B3B272C4C383C3C282A7A666A7A666B8B679B0AE71ADAB6EA7A569 A4A2669A98617271411E1C002322061E1C012524101E1C0824220A19180126250D39362253503D 3938255D5E484D4D355B5C414C4C2D6D6D4B66673F75744A626134908E5F787647979766B1B27F 8E8F58A3A566B8B975C9CA85C1C07ED5D292CFC98AC8C381DDD992EEEAA1E8E49CDEDB95E8E5A0 F3EFA8D4D189C5C178D1CB81DED88ED9D287DCD589EDE59AEAE398E8E69B9B9B5D4A4718D8D890 F4F6A6E8E99EECEDA4E5E4A3EFEEADE5E891F8F9AD807E4929241196917948452F1D1A1118150C 201C0F3E3C28777553C8C69DE8E6B6D5D29CFFFFCCFBF8C6F0EEBBD6D49ECCCB92CAC88ECDCC91 CAC88ED2D198F1EFB9F7F4C1E9E6B4E7E4AEFEFEC7EEECAAEEEBA2FFFFB9E9E597F2ECA0ECE39B F8EEA8F6EBA2EEE399F1E89DF5ECAAE9E1A2F5EFB0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7BDBDBD6161615C5C5C9292929898985B5C5B3B3C3B4A4A4AD1D1D1FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6D8D8D8B0B0B0929392818181747474 7070707E7E7E8F908FA5A6A5C3C3C3E0E0E0F4F4F4ECECECC4C4C49A9A9A8F8F8FE1E1E1FDFDFD FFFFFFFFFFFFF4F4F4D3D3D3A8A8A8818181B2B2B2E3E3E3BABABA909090757575727272838383 989998BABBBAF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE4E4E48282823131312A2A2A8D8D8DF7F7F7FFFFFFFFFFFFFDFDFDF4F4F4 C6C6C66A6A6A2F2F2F636363B0B0B0F7F7F7FFFFFFFFFFFFFFFFFFF8F8F8D2D2D2656465121212 4F4F4FA1A1A1EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAF7EACFECCFC9E9C8C5EAC4BDEABCB9EBB8BEEEBE C8EEC8CFEECFC3EEC2BBEDBBB9EAB9C0EABFC7EAC6CAEACAD7F0D7FAFDFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFAF2F0E3B7F2E2BDFCECE3FFF7FAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF7F8DFF2EFC1F9EDCB FFEFE1FFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F4F6D4D7D48AB88A31A63073C87B CFF0DEF3FBF7FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6FAF6D5E5D691C99054B3537EBD7DD5DDD5F4F3F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF8F8F8F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 8A8A8A2323231E1E1E6C6C6CD4D4D4FFFFFFFEFEFEF5F5F5E3E3E3BDBDBD9E9E9E858585737373 7171717C7C7C8989899A9A9ABBBBBBDCDCDCF5F5F5FFFFFFFCFCFCE5E5E5BCBCBC959595999999 EBEBEBFFFFFFF9F9F9DADADAACACAC898989A6A6A6DEDEDEBDBDBD8D8D8D737373747474828282 9B9B9BC1C1C1EDEDEDFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5F9F9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDDFDFDF606060212121303030848484EDEDEDFFFFFFFFFFFFFFFFFFF2F2F2 D0D0D06969693535355A5A5AA3A3A3F3F3F3FFFFFFFFFFFFFFFFFFF8F8F8D9D9D96F6F6F1F1F1F 4D4D4D9C9C9CEAEAEAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF4F1F1CCEAEAB4EEEEC9F7F7E6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFAC7E8C7ACDEACB9E6B9 D9F3D9FCFEFBFFFFF7FBF2CFE3B64BE9BE65FAE4C3FFFAF6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FCFEFBD8F3CFBBE1A5AED18CC1D598E8EBC4F8F8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FBF8DDEFDD80C88048B248 A8DBA8FEFAFEE1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDFBFFFBB3E3B358B658 59B759A9DCA9D5E9D5F3F2F3FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCDC963D3CC6DDFD485DFD385DCD27AC4BD59 D1CA786E66286D652FD2D17FC7C566D3CC76DBD38AA89F642018006A632AC9C57ED4D37BDAD674 D5CE6CE0D879E7D981DFD37BDACF73D6CC6CD6CE6DD9D070D6CC74DDD583C6BD707B7326CEC775 E0DA82DCD77AE6DF8CD3CC79BDB85CDCD775EAE580E1DB78E7DF82E4DA81ECE189EDE28AE9DE82 EBE286F0E690EFE792F2EA92F1E891E4DC82EDE68BECE489EAE385E7E081E5DE7EE7E07FE7DF7D EEE181E6D97AF0E384ECDF7FF0E384E4D778EEE182F6E98AF4E789F4E787EDE081ECDF7FE9DC7D EEE182F4E787EEE181E8DB7DECDF82E4D77AEBDF82E7D980F6EB92E8DB82F3E48EF1E28DEFE18B EEE188EDDF86ECDF83ECDF80F5E887E9DE7CEDE27EF4E883EAE07FE9E084EEE48AEEE48AEBE187 E9DF86EAE088EFE58DEEE48DE3D882E5DA85EDE28DECE18DEDE38EE9DF8AE7DC87EEE48FECE28D E9DF8AF2E893F8EE99F4E994F1E792F7EC98EEE593EBE391EAE290EDE694F2E997F5EA99F6E998 F4E894F5E995F9EB96F6E792EEE28DF5EB96F8EE99FDF39EFFF6A1F9EF9AEFE590F1E792EEE48F EEE48FF2E893F6EC97F7EC9AF3E899EEE394F2E798FAEFA0FDF1A5FCEFA4FEF5ABF6EA9FF6EAA0 EDE198F8ECA2F3EA9FEFE69CEEE59AEDE499EDE499F3EA9EEEE599EFE699F3EA9EF6ED9FF3EA9C EDE495F9F0A3F4EB9EF4EB9EF8EFA1F6ED9FF0E799E4DB8EECE396EFE699EEE598F1E89BF6EC9C F8EC98EEE28FEADF89EFE58FF0E690EFE692F2EB99F1EA9AF1E99EF1E9A1F1E9A1F2ED9DF2ED94 F5EF97F0EB93E7DF88EAE28BF3E895F3E697F7E99CFEEEA7FFF0ABFEECAAFBEDACF9EBABECE09F E5DA98ECE3A1F3EDAAE9E5A1E0DE99D1D18BD1D28CBBBD77A4A960ACB66CA8B36E98A266757B4C 9496727E7E606361433C3A21211F095E5B34727042A5A6685B5F1C929167D2CEAD231F0CA0A15C EBEC9DCDCE82DDD89EE6E0A7DDD993E5E58CF3F3A9E3E2A2E6E5A4E5E29EE9E69FE0DF95EFEBA2 E8E49BE9E69DEFE9A2EBE5A0E2DB98D0C984D3CC87DBD591EEE7A3EFE8A5DFD897E6DF9DE9E0A1 E0D99AD6CF8FD7CF91DBD696E3E19ED6D594CFCE8DD6D594D1D090D9D69ACCCA8FB1AF74908E55 9A986097955BA19E5FB3B0727D7B4F1C1A031C1B07373629161601000100383B156D6E47151400 2A280E4045244B502F464A2B515536474929797A5A48472762603D66643E615D3558552A868558 ACB081A4A876B4B880AEB173CFD290C0C17BD4D38CBCB871D4CF88F4EDA7F7F0ACE6E19CE5E29B E9E69FEBE8A1E0DE94DCDA91E5E398E2E096BDBC6FC1BF73CAC87CC8C67CD3D1976A683E050400 69672AE7E7A4F7F8B3E1E29AE6E89EE7E99EE6E89EF2F4ACA1A15EB1AC6DFFFFC8FEF7BBE3DFA6 D6D298DDD9A0EBE3A9F0E8AEE6DFA2DCD595EBE4A2E8E2A1EFEAABE6E1A3EBE6A7D5D091DBD696 E5E0A0DAD595E4DFA0EFEAABF4EFB1F2EDAFEAE6A0EEEAA1EEEBA3EFEAA4F9F4B0F2EDACF4EFAF F8F1B2FBF4B6F8F1B2DFD998BFB977C8C57FDEDA95F1EEA8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF9F9F9BFBFBF7D7D7D4D4D4D767676C6C6C6C1C1C16061603A3B3A4A4A4AD1D1D1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7D8D8D8A1A1A1666766494949414141 373737353535464646525352656665969696C9C9C9EBEBEBDDDDDD9494944A4A4A353535CACACA FBFBFBFFFFFFFFFFFFECECECB3B3B3696969232323636363AAAAAA898989606060424242414141 4F504F565756737473C7C8C7ECECECFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFAF7F7F7CDCDCD7878783839384040409B9B9BF8F8F8FFFFFFFFFFFFFBFBFB DDDDDD9A9A9A4949492E2E2EA0A0A0DADADAFCFCFCFFFFFFFFFFFFFFFFFFF8F8F8D1D1D1646464 1111114949499C9C9CEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFFFCF6FEF6EFF9EFD3EFD3B7E6B7B5E3B4B8E3B7B9E4B8C4ECC3 DCFBDCEEFDEEF6FDF6E7FEE7D1F4D1BDE8BCB6E3B6B8E4B7B9E4B9C5E9C5E4F5E5EEF8F1F2F9F9 FBFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E5E4ADE9E7B9F9F7EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFFF2FDF9DB FAEAC4F9E3C2FEF9F2FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F8F6D7E3D68EC48D34A933 7FD07FE1FCE2F8FFF9FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFBFAEEECEE9CCB9B45AD446EB86DD4DCD4F4F3F4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4F4F48E8E8E2727271C1C1C696969D3D3D3FFFFFFF9F9F9D9D9D9AEAEAE767676585858444444 3535353636364343434E4E4E5B5B5B8C8C8CC2C2C2EEEEEEFFFFFFF9F9F9CFCFCF858585404040 474747DCDCDCFEFEFEF4F4F4BEBEBE717171313131505050A2A2A28A8A8A5D5D5D4040403F3F3F 4A4A4A5656567F7F7FC1C1C1F1F1F1FCFCFCFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDE1E1E16565652424242E2E2E818181EDEDEDFFFFFFFFFFFFFFFFFF DCDCDCA3A3A34444443737378A8A8ADADADAFAFAFAFFFFFFFFFFFFFFFFFFF8F8F8D7D7D76E6E6E 1E1E1E4B4B4B999999E9E9E9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFFFCF9FEF9F8FAF8F8FAF8F9FEF9FCFFFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF6F5F5DEEBEBBCEAEAB8FAFAEEFEFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFADCEEDCBCE2BC A9DEA9B5E5B6E2F5E0F2F8DBF4EBB4E2AF3AE9BF68FAEED7FFFFFFFFFFFFFFFFFFFEFFFEF9FFF9 F1FCF1E3F6E2BAEABAB7E3AED1E1B7E1DEB0E6DFA9F4EDD3FFFAFBFFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F9F18BCD8B 3EAD3E99D399F2F4F2DFE0DFEBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDF9DFF8DF93D693 45B04566C166D2F4D2F3FEF3FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3CE6AD4CE70DFD487DFD487DCD27B DFD875E7DF8F887F43635A28D7D586DBDA7AD6CF7ACEC67EAEA568261E01635C24CEC984D5D47C D3CF6DCEC864DBD273E6D780E3D780E1D67ADED475DCD472DBD273D7CE74DED684BFB6696F681D C8C171DBD57DD9D478EAE490B9B260858025CFC969E3DD7BE0DA78EFE589F3E990EFE58CEDE289 F1E68BF1E88BFCF39BF7F098EDE68EF2EB92EBE48AEDE68CF2EB90EDE68BEAE388EBE588EFE98B F0E688F3E688EDE084F2E588EADD7FF3E689E7DA7EEBDE80F3E689F7EA8DF4E789E5D87BE6D979 E7DA7AEDE080EEE183E8DB7DE8DB7DECDF83E5D87BF5E88BE6D87FEEE087ECDF85F2E38FF2E38E F0E18CEEE087ECDE85ECDF83EDE082EBDF7EEADE7CEADE7AE9DD78E6DC7BE9E082EAE184EDE487 EFE689EDE489EBE288EEE48BF0E68DF1E78FF6EC95F0E68FEFE58FEEE48FE9DF8AEEE48FF6EC97 F0E691EDE38EF1E792F5EB96F6EC97F1E892EADF8CEEE695EBE393EBE392F0E897F5EC9AF7EC9A F8EC9AEFE38FEFE38FF7E895F3E491E5D985DED37FF4EA95F1E792F9EF9AF9EF9AE9DF8AEBE18C F0E691F4EA95F5EB96F4EA95F8ED9CF6EB9BE9DE8EEEE393F9EE9EF9EE9FF0E596FCF0A4F8ECA0 F5E99FF2E69CFFF3A9FAF1A6E7DE91EEE598FBF2A5EDE497E9E092F2E99AF2E99AF1E899F1E899 F2EA9AF6ED9DF9F0A3FBF2A5F9F0A3F4EB9EF4EB9EF6EDA0F1E89BECE396EDE497F3EA9DF6EDA0 F6EC9CF3E793F1E593F3E893E5DB86E9DF8AF5EB97EFE796F0EA9AF1E99DEFE79EEBE39BEEE69E EDE59CF1E79EF3EB9FECE396E7DE8FEFE397F2E69AF7EAA2FCEDA8FCECA9F8E7A4E2D788E6DF8C E9E08FEDE595F1EA9BEBE79ADBD98ECAC97FC7C980BDBF79BEC17B868B48989F61A0A86E959B68 8083585B5B341C1C000A0B001E1C00C0BE8F6B6933BEBD846F7132929552EBE9BE999574070300 BABA79F0F1A4D8D98CD0CC8AD1CD8FC9C680E1E18DF2F2AAD0CF8FCFCE8CEEEBA6E6E39BEEEDA2 F6F2A8EEE9A0EEE79FF6EFA9F6EFAAF0E9A5DFD892DAD38DD9D28CE6DF9BEFE8A4E9E29FE4DC9C EBE3A2EDE5A4ECE4A5EEE6A7EAE5A5E1DF9CEDECA9E8E7A5E5E4A3CCCB8AA6A565A5A3669C9A5D ADAB6ED6D497DDDCA0D5D38FE9E5A3F8F3C29B9674201D05C4C3AADDDEBD75784D303201656436 C9C69F74714E444720212500494B247274508384617272505C5C3A8583607F7D57424019646238 979765B2B976ABB26AB1B970A5AB61F2F6ABD1D288E3E39CD7D290E4DD9FECE3A9F0E7AFE9E2A6 E3DE9AE6E19DE9E4A0E7E39CEAE6A1ECE9A1F0ECA5DFDB94DCD88FD4D087C3BF79C5C087DBD7A0 454218413E00FCFBB8DFDF97D9D78DDDDC92EDEDA3E2DF98F1EFA9EBE9A4F2EEA7F0E9A3EEE7A3 F2EAA8F1E9AAF1E9AAFCF4B4EFE7A6F7F0ACF7F0ABFCF5AFF5EEA9F6F1B0F6F1B1F7F2B2EDE8A8 F3EEAEF7F2B2F4EFAFF7F2B2F4EFAFF1ECACF7F2B1E5E19BEAE69FF0ECA6F2EDABFAF5B5F7F2B3 FCF6BAFCF6BAFFF9BBF8F3B3D4CF8FA19C5AE8E4A4E9E5A5EDE9A9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF9F9F9E5E5E58F8F8F434343636363A9A9A9E0E0E0C4C4C45F605F3A3B3A4A4A4AD1D1D1 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEA4A4A46768674344434D4E4D 6E6E6E797979808080868686727272656665929292C7C7C7EAEAEADBDBDB8D8D8D3F3F3F282828 C6C6C6FBFBFBFFFFFFFFFFFFEBEBEBAFAFAF6060601212122F2F2F646464898989969696979797 9D9D9D9191915E5E5E4343437A7B7ABCBCBCF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD FAFAFAFAFAFAF0F0F0E1E1E1CACACA9797974F4F4F3131316C6C6CB8B8B8FAFAFAFFFFFFFFFFFF F8F8F8C2C2C26F6F6F3B3B3B404040C0C0C0EBEBEBF8F8F8F9F9F9F9F9F9F7F7F7F0F0F0CACACA 6161611515155D5D5DACACACEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFFFBEDFEEDDCF9DCC7EBC7C4ECC4CAF2CAD8F4D7E0F3E0E2F4E2 E8F7E8F3FEF3FBFFFBFEFFFEF8FFF8EEFBEEE4F5E4E0F3E0E1F4E1E0F3E0D8F0D8C5E9C6C6E7D1 D0E9E5EEF6F6FDFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFAF0E4E4ACE8E8B9F9F9ECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FCFBEAF0E9BFEBE2AFFBF9EEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F8F0C5E4C47BC57A 33A93189D088F2FDF1FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFDFEFEFAFFA8D6A746AF446AB769D2DCD2F4F3F4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F9F9F9E2E2E27C7C7C1C1C1C262626767676D7D7D7FFFFFFF0F0F0ACACAC676767454545525252 6C6C6C7878787F7F7F8484847B7B7B6C6C6C909090C0C0C0EEEEEEFFFFFFF9F9F9CCCCCC7D7D7D 3434343B3B3BDADADAFEFEFEF4F4F4BABABA6969692020201F1F1F5D5D5D7F7F7F959595969696 9191918383835757575050507F7F7FBCBCBCF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F3F3CECECE5252521F1F1F3A3A3A8F8F8FEFEFEFFFFFFFFFFFFF FFFFFFC3C3C37373732F2F2F454545A7A7A7F1F1F1F6F6F6F9F9F9F9F9F9FAFAFAEFEFEFD0D0D0 6A6A6A202020555555A6A6A6ECECECFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFEFDFDFEFDFBFEFBF0FFF0E6F9E6E5EEE5E5ECE5E6FBE6F1FEF1FCFEFCFCFEFC FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAF2F2D7EAEAB9EFEFBFF7F7D5FEFEF8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDF4F9F4 DCEFDCBCE2BCACDEADB8E6B4CFE6ACE2DD95DBB74AE6C97CF7F1DDFDFFFFFCFEFDFCFEFCF7FEF7 E8FEE8CFF3CFBBEABBBEEFBED2F4CFEBF3DFF6EAD0F5DEB6FAE2CCFEEBEAFFFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FBF6 9FD79F55B8558FCE8FD2E4D2D8DDD8EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F9F1B1DCB1 7AC27A60B66093CF93EAFAEAFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD875DCD57AD5C97DD9CD81 EBE18AE1DA77EBE2929D945C4B4119C9C77ADAD87BD2CB75CBC37ABDB577292108544E15D1CD87 D8D67FD2CE6CCCC662D3CA6CD9C975E0D47CE3D87EDFD477DCD372DCD374DCD379DED584C9C074 7B732AD0C979DCD67FD9D479E4DD8DBFB9685F5904B8B157E6E082E0DA7BDED679F0E78BECE488 EDE287F5EA8EF2E98CF5ED93FFFBA2ECE58BE5DE84ECE58BF7F096EBE48AEEE78CF0E98EEFE88E EAE389EBE187F7EA8FF1E38AF3E58CE5D77CF1E38AF5E78EF0E388EADC83EFE188F3E68BEDDF86 E9DC7FEBDE7EF1E485EFE284E8DB7DECDF82E9DC80F2E589EFE287F7E990AEA047E5D77EECDD88 ECDD88EEDF89F0E289F1E38AF2E589EFE284E4D777EADE7CE8DC79E1D571E4DA78EEE587EBE284 EDE486F0E78AECE388EEE589F3E98FEDE389E9DF87ECE28AEEE48CF2E893F2E893EFE590EEE48F EDE38EEAE08BECE28DEFE590F2E893F1E792EFE58FEDE28FF2EA99EFE697EEE595F0E897F2E897 F1E695F4E896EFE390EEE28FF3E390F2E390ECE08CE5DA86EFE590EAE08BECE28DF6EC97F2E893 DBD17CE9DF8AF2E893F3E994F2E893F4EA95F3E895EEE393F0E595F4E999F5EA99EDE293F3E899 F8EE9FFCF1A4E4D88CF3E69BF1E79AEBE293EFE697F7EEA1F5EC9CEEE596F0E798F4EB9BF4EC9C F1E898F3EA9AF9F1A0F2E99AF3EA9CF3EA9DF4EB9DF6ED9FF8EFA1F3EA9CF7EEA0F8EFA2F5EC9E F0E799EEE596F5E799F6E99BF3E796ECE28EF1E793F2E895E8E08DE5DE8DE6DF90ECE498F4ECA2 EDE59FEADD9DEDE29EF5EBA5F6ECA4EDE497F4E99CF2E79BF1E69CF3E7A0F7EBA4FBF1A7F1EA94 F3ED93EBE690ECE693E6E392D2D084C9C77ED1D28ED0D1909395569293578487509296653A3F15 292B041B1D020F100020210168693CDEDEA8B4B4779C9C5CBCBD7A494C12F4F7AFD6D4A9393425 1B1600DBDAA4E8E99FDDDF8CCCC97ECAC882B5B26AB9B76BB5B36FC3C180D0CE8CE7E49FDAD78F ECEA9FF1EDA3F2EDA3F3ECA3EEE7A0EBE39EE9E19BE8E19BE3DC96DED790E6DF9AECE5A1E9E29E EDE6A4F1E9A8F4ECABF3EBACF0E8A8E6E2A1C0BE7BB8B673B6B472BAB877C0BE7DBDBB7AE6E5A3 E7E6A3E7E5A3E2E09ED4D290E7E39CD6D08BE5DFA7F3ECC3777252615E41E7E6C0FAFACCC8C996 53531F7E7B4EF4F0C5EFEFC17475454041132525002323044A4A2B56552D7C7B546D6C457A794F 99986E7A7E48959C50ACB564B0B867BCC171E6E99BE2E497E5E69EE6E19EEEE8ABECE3ACE5DBA7 E2DA9EE3DD9AF0E8A5F4EDA9EFEAA6ECE5A2E1D997EEE8A5FAF3B0F2EBA8E8E29FE6DF9DEBE4A7 F1ECB0EFEBACE5E09FECE8A3E4E198E0DC93E4E197E9E69CDDD891EBE6A1F6F2ABE8E197ECE59B F8F1A8ECE59EF5EEA9F4EDA8E9E29DF3ECA7EFE8A1E9E299FCF6ABF4EFA8E7E2A1F7F2B2FDF8B8 F9F4B4F5F0B0F5F0B0F8F3B3F9F4B4F6F1B1F3EEAEF6F1B1F4EFACFAF5B2FCF7B6F6F1B1F8F2B5 F8F2B6FCF6BBF7F1B4F2ECAEF1ECACEEE9A6E7E2A0F7F3B4F2EDB2F1EDB1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEEBEBEBB1B1B16262622F2F2F8A8A8AD9D9D9EFEFEFBABABA5354533334334A4A4A D1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E56F706F3F403F464646 797979B3B3B3CACACAD3D3D3D1D1D1B0B0B0939493B0B0B0D8D8D8EFEFEFDADADA8F8F8F414141 2B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0636363141414242424575757A7A7A7D5D5D5 E9E9E9F3F3F3D4D4D47878782E2E2E373837909090F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFBFBFB E2E2E2C8C8C8B9B9B9A9A9A99797977C7C7C5959593F3E3F4F4F4FA7A7A7DADADAFCFCFCFFFFFF FFFFFFF6F6F6A8A9A84344432627263A3A3A999999B2B2B2B3B3B3B2B2B2B2B2B2B1B1B1ACACAC 9191914747471818186D6D6DB8B8B8F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFFFCEFFEEECFF6CCB5EDB2B9E7B7CDF0CDE5FDE5F8FFF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F9F0C4E8C5 B4DFC1B5DDCCDCEBE6F6F7F6FEFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCFAE9ECE3B1EFE8BFFAF8EDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAF2E9EABDE1E2A6F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECF8ECB7E4B6 6CC56B30A92E8FD08EFCFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0DFAF48B24662B761C6DCC5EEF3EEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEECECECB7B7B75A5A5A1313134848489A9A9AE3E3E3FFFFFFE8E8E88383832F2F2F3E3E3E 737373AEAEAECACACAD1D1D1D0D0D0BDBDBDA2A2A2B4B4B4D2D2D2F3F3F3FFFFFFF9F9F9CCCCCC 7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6B6B6B222222161616505050989898D7D7D7 E8E8E8E3E3E3C8C8C87575753F3F3F464646848484EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDCA2A2A23434342222225D5D5DB1B1B1F3F3F3FFFFFF FFFFFFFFFFFFADADAD4545451818183A3A3A868686B9B9B9B2B2B2B2B2B2B2B2B2B3B3B3ACACAC 9696964B4B4B1E1E1E5D5D5DB0B0B0EFEFEFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFDFAE5F6E5DEF4DEDCF4DCD5F5D5CFEFCFCEE2CECEE0CECFF1CFD6F4D6DDF4DD DDF4DDE8F8E8FAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0EBEBBCE2E2A2F3F3C9FFFFF1 FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6FAF6DAEDDAC0E5C2B3E3AEB9D98DC3CC6CC3BB57CDCD85DAEAC8DEF6E2DEF4DEDDF4DD DAF4DAD0F4D0BFEDBFB6E8B6D4F7D4EDFFEEFCFFFAFFF6EDFFE6D0F9DFC7F6E1CFFDF8F4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7FCF7B5E3B573C87386C986ADD2ADD1D9D1EAEBEAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFBE2F6E2 7CC27C61B56185C785C3E4C3F7FBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D073D2CB71D2C67D D4C77FDAD07BD9D26FE2D88BB0A7713C3208B9B76FCFCD72CAC26DCDC57BCCC48731290E4A4409 D0CC85D6D57DD4D06ED7D06EDDD477DFD07CDED17CDED379DBD174D8CF6FDAD172E0D77ED8CF7E D8CF84857D33CFC878DDD781D8D279D4CF7ED4CD80564F09968F3CE5DF88E1DA7ED7D175E8E182 ECE385EBE286EDE286E8DF84F4EC92F1EA8FE5DE83EEE78CEDE68CEFE88EE6DF85E3DC83E5DF86 EDE58EF0E891EEE38BF0E38AEDDE88F5E68FE6D87FF3E58EF7E891EDDF87E7D982EFE08AF1E38B ECDD87EEE183EEE181F3E688F2E587EDE082F0E387EDE084F1E489F4E58DD6C86FCBBD64EFE188 EBDC87ECDD87EDDF87EEE088EEE088F0E387F5E88BECDF81F2E584EEE280E7DB79EAE07FEBE182 EAE182EDE485F2E989F2E98CEEE588E9E084EBE288EAE086E5DB82E8DE85EFE58FF3E994F4EA95 ECE28DE1D781E4DA85E9DF8AEDE38EEFE590EBE18CEDE38EF6EB98F3EB9BF2E99AF1E89AF3EB9A F4EB9AF3E899EEE290F2E694F0E492EEDF8CF3E491F7EB97E5DA85EBE18CF3E994EEE48FF0E691 F7EE98E2D883EDE38EF1E792EFE590F0E691F0E691F3E994F9EF9BF8ED9AF4E897F5EA98FCF1A1 F5EA9AEFE494F2E798D4C97AEDE193EAE191F8F09EF2EA98E9E090F4EC9AEEE695EBE393F1E998 F6EE9DF5ED9CF3EB9AF4EC9BF8EFA0F2E99AF2E999F5EC9DF6ED9EF4EB9CF8EF9FFAF1A2F2E99A E9E091ECE394F3E99BF9EB9FF8EA9EECE091F2E797F0E595E8DE8CEDE592EEE796F0E999F2EB9D F3EBA0F4E9A1F2E5A0F0E39DF2E89EF5EC9EEDE595EFE695F2EA9AF4ED9DF2EC9EF0E99BEEE89B EFE99AF7F1A3F1EDA1EEE9A3E5E29FC8C688C6C489D6D5A08D8C5A413F133E3E142E2F1021220A 18180014150058582D636331ADAE73F9FABED7D7977A7B36F9FBB24A4D09B1B566F2F6AC838258 130D01120B00B6B386E4E59EE0E38CDBDA85D8D688B8B56EA4A15EAAA665D0CD8BDDDA96E7E49E E5E399D7D388E2DF92ECE89DF2ECA2E9E29AE5DD97E9E099E0D992E9E39BEDE69EF3ECA6F3ECA6 EDE6A0EDE6A2ECE5A2EFE7A6EFE7A6E9E1A0E0DA98C9C683C9C683E3E09EE4E19DE7E4A0E9E6A0 EDEAA4E5E29BEDEBA2EEECA3E2E097E9E397E5DD93E1D89AE3DBAAD9D3AA272405A6A379F0EFBD E4E2ACE6E4AC534E1988834EFEFCC3F0EEB59998615755229C9A6D4E4C261E1C00252607292A08 56572B76764C8082509BA15EB7BD76AFB36B8F9249DCDF94EDEFA5E3E298EDE9A2F4EFABFBF6B4 F3EBABEFE6A4F6EDA9F6EDA9F3EAA6F6EDA9FAF1AFF9F0AEF0E7A5EFE7A6F2E9A8F8EFAFEAE1A2 E2D998F3EDA8F7F1AEEAE29BF6EFA7F1EBA1EBE49AF2ECA3E9E29AEEE5A2FBF3B0F1EAA3EEE89A EEE998EBE598EBE59AFAF3AAEBE59CF2EBA3EFE99FEAE498ECE798F8F3A3E8E399EBE6A5F2EDAD F6F1B1F7F2B2F9F4B4F9F4B4F8F3B3F7F2B2F6F1B1F3EEAEEDE8A8F1ECACF7F1B2F9F3B5F8F2B5 FAF4B9FFF9BEEDE7AEF4EEB2F8F3B5F6F1B0F7F2AEFFFAB8F4F0B2F4EFB4F8F3B9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9CDCDCD5757574545455F605FBCBCBCF6F6F6F7F7F7ADADAD3D3D3D282828 4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E04E4E4E373837 6F6F6FB7B7B7E7E7E7F4F4F4F6F6F6F6F6F6F1F1F1ECECECF1F1F1F9F9F9F9F9F9D9D9D98F8F8F 4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0626262181818535353AAAAAAE0E0E0 F5F5F5FBFBFBFFFFFFE5E5E59192913F403F171717777777EBEBEBFFFFFFFFFFFFFFFFFFFFFFFF F4F4F4AFAFAF6465643737372626262121211818182828285D5D5D9E9E9EDFDFDFF6F6F6FFFFFF FFFFFFFFFFFFF3F3F39292921B1B1B0606060E0E0E212121262626262626262626262626262626 2424241D1D1D0F0F0F1717176F6F6FB9B9B9F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF3FFF3D4F9D3A3E79C8FDD86DCF3DAF5FCF5FBFFFBFDFFFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFC F4FBF4CFECD1B0DEB4C9DDCAE5E8E5F7F8F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEEEFEF9D9FCE4BCFCE9CDFEF9F1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAF1EAEABDE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECF8ED B9E3B86FC46E33AA3190D08FFBFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0DEAF45B24451B750ACDCABE1F3E1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8F8F8CFCFCF6D6D6D313131202020898989D4D4D4F6F6F6FFFFFFE4E4E46F6F6F1E1E1E 696969ADADADE4E4E4F5F5F5F5F5F5F6F6F6F3F3F3EEEEEEF1F1F1F7F7F7FDFDFDFFFFFFF9F9F9 CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A2626263D3D3DA0A0A0D6D6D6 F8F8F8FAFAFAFAFAFAECECECA4A4A45656562C2C2C585858E3E3E3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8B0B0B05A5A5A1919193E3E3E9F9F9FE6E6E6FBFBFB FFFFFFFFFFFFFFFFFF9C9C9C2424240202020E0E0E1D1D1D272727262626262626262626272727 2424241E1E1E0B0B0B161616606060B2B2B2EFEFEFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEFBFEFBECF9ECB7E7B7A4E1A4A4E1A4B1E1B1BCE0BCBDDEBDBDDDBDBCE0BCB0E1B0 A4E1A4A0E0A0BFEABFEAF8EAFFFFFFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FCFCDEEBEBB4E4E4ABF3F3D8 FFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFEFDF9FCF9F6FBF7EDF7E7C4D78A9FBA3B9EB75CA0C67FA2DA9BA3E2A5A3E1A3 A4E1A4A9E1A9BAE1BAD6EDD6F0FAF0F8FEF8FCFFFCFEFFFEFFFEFEFCF8EDEEE8C2E6E1ADF9F7EA FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9FDF9CAEDCA8ED58E7CC57C89C189CAD6CAEAEBEAFDFCFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDEDFDED C6F1C649B3494FB74FA8E3A8EAFDEAFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D176D0C873 D6C983D5C981D7CC7ADBD471DED588C1B78440350DBAB771D3D078D5CE78D2CA81D4CB8C3A3211 413B02CAC57FD9D782D5D071D8D270DCD378DDCD7BDCCF7AE0D57BE4D97CE1D879DFD679E1D77F DDD484E5DC917D752CC3BC6DE6E18BE0DA80E7E093CEC87E4C460991893DF1EA99DBD57EE8E286 E9E382F0EA88F2E88AEBE287ECE288EFE88CE3DD7FE5DF81F0E98EE6DF84E9E288ECE58DE5DD88 E7DF8AEFE793F1E996F0E592F1E28DECDD8AF8E995E8D984F1E28EF3E491EBDC87EADB87F2E390 F1E28DEEDF8BF0E388ECDF80EEE183F2E589EDE084EDE184EDDF86EADC83EFE188CFC169EEE088 EDDF86EFE08BEFE18AF1E38BF2E48CF4E68DF4E78BF6E98CF6E98BF6E98BF2E586F1E484F0E685 E9E07FECE482EEE685F0E788F4EB8CF3EA8CE9E083ECE386F3EA8EECE388E5DC81E9DF88EADF8D EEE391EDE290E4D987E7DC8AEADF8DEBE08EEDE290EFE492F2E795F3E795F2E99AF1E89AF0E798 F0E798EFE596ECE191F2E596F0E493EDE18FEEDF8EF3E392F4E896E5DA88F0E593F2E795EFE392 EBE08EE9DE8CEEE391F2E795EFE492EDE290F2E795F4EA95F2E892F5EB93F3E993F0E691EEE48F EFE592F5EA98E9DE8CEBE08FE7DC8CFBF0A0EEE691F8F09BF6EE99EEE693F1E995F1E996ECE491 EEE693F2EA97F6EE9BF5ED9AF1E998F5EC9DF4EB9CF2E99AEFE697F2E99AF5EC9DF3EA9BF0E798 EBE293E8DF90EDE495F2E89CF4E69EF3E59CF1E498F3E898EFE494EFE594F2EA97F3EC9BF2EB9B EFE898ECE496F5EB9BF9ED9BEFE591EAE28DF0E893EDE78FE6E08AEBE791F1ED9CF0ED9EEEEB9D EEEAA1EEE8B0FAF2C3EBE5B6D3CC9FB6AE868B866145401D3835151A1600221E062C280F171301 242109615F38B6B585B9B781A8A86AFEFEC0EAECA374762BBBBD7296984F5D5D17E7EA9FA2A65E 2A28001E1804150E0084805DF2F1B1E9EC95EDED90DCDB87C4C279BEBA7DD1CD8DE0DD9AE2DF9B DBD78EE9E59BDAD78AE6DF93E5DE91E4DC91E0D88FDBD38AD7CF87D6CE85E8E097F2EAA1F3EBA3 ECE49CE3DB93F8EEAAF2E9A4F5ECA9F8EFACF2E9A6EAE3A0E9E4A2E5DF9BF2EDA9FAF5AFF9F5AD FBF8AFE4E096DFDB91E7E397E9E698EBE79AF1E99AFEF5A8E8DF9AE9E2A6D0CA96938E5D2B2700 E8E5B1D9D49DE5E0A6E6E4AB433C08B4AF6EDEDA98FFFFC49E9960A9A671FFFDCBA1A0708C8C5F 75764922230124270235350A636238ABAA7DD2D09FABAA73D2D093EDECAADCD991ECE99CE1DE8E F1EF9CF1EC97EBE595F9EFA6FEF4ACF8EEA7F6ECA5EFE5A0F4EAA5ECE29CF8EDABFCF1AFFDF2B0 E1D794F3E9A2E9E198F3EAA2F5EBA3E7DF95F3EB9FEEE49CF8EFA7F1E8A0F8EDABF8EEACF2E9A2 DFDA88EBE693E9E593ECE698EEE89CF2ECA0E6E095ECE69AF7F1A2DDD886E7E290FBF6ABFCF8B7 F5F0B0F3EEAEEBE6A6ECE7A7F3EEAEF5F0B0F7F2B2F0EBABE9E4A4E8E3A4EAE4A7EBE5A9F2ECB1 FAF4BAFAF3BCF7F0BAEEE8AEF6F0B4FEF8BAFAF5B3F3EEA9F0EBA7FCF8B8FBF7B9FBF7BAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF8F8F8D9D9D99B9B9B3030305051509A9B9ADEDEDEFEFEFEF9F9F9B4B5B44B4C4B 3030304A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3656665 3F3F3F5656568E8E8EC6C6C6E1E1E1F2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBD9D9D9 8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0616161191919656565C9C9C9 F1F1F1FEFEFEFFFFFFFFFFFFEEEEEEA7A8A7575857131313696969DCDCDCFDFDFDFEFEFEFFFFFF FFFFFFF7F7F7C6C6C6909090696A695D5D5D5858584141413233324242426D6D6DB9B9B9E3E3E3 FDFDFDFFFFFFFCFCFCE5E5E58282821616161919193738375353535B5B5B5C5C5C5C5C5C5C5C5C 5A5A5A4B4B4B2C2D2C1515151D1D1D8A8A8ACECECEF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFCE4F7E4C1EEC0B7EAB3C2ECBCF1FBF0FEFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEE1F7E0C2ECC2BBDFBBCBE6CBE4F7E3F6FFF6FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF6E3FFEDC9FFECC7FFF3DBFFFCF6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAF1EAEABEE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EEF4EEC0D7C080BB804EB24D9FD69EFBFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0DEAF45B2444EB74CA6DCA5DEF3DE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3F3CACACA8C8C8C3A3A3A3F3F3F696969BFBFBFEEEEEEFDFDFDFFFFFFE7E7E77E7E7E 2B2B2B4F4F4F878787C0C0C0E0E0E0EFEFEFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A2727274C4C4CBEBEBE EAEAEAFFFFFFFFFFFFFFFFFFF5F5F5B9B9B96767672A2A2A484848D4D4D4F7F7F7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEDEDEDBEBEBE727272323232424242818181CDCDCDFAFAFA FEFEFEFFFFFFFCFCFCF4F4F48E8E8E1E1E1E1919193D3D3D5252525D5D5D5C5C5C5C5C5C5C5C5C 5D5D5D4A4A4A2C2C2C0C0C0C1C1C1C767676CCCCCCF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEF9FFF9EBFDEBD8F5D8C8EDC8C9EDC9C8EDC8CAEDCAD2EDD2D9EDD9DAEDDADAEDDADAEDDA D2EDD2C9EDC9C8EDC8C8EDC8CAEECAD8F5D8EDFEEDF9FFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8E5F0F0C2ECECBCF0F0D2 F9F9EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1D9CE81BAAD2DC4CD8CC8E1BAC8EBC7C8EEC9 C8EDC8C9EDC9CDEDCDD8EDD8ECF6ECFDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFDFBF5F5EACAF0DEAD FCE9CFFFF4E9FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFDFBD8F0D89DD89D6CC46C66BD66C2D5C2EAEBEAFDFCFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAFBEDEFED C9E4C99AD59A52B25270C070C8ECC8FBFFFBFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D27A DCD480DCD08ADBCE87E5DA87D8D16EDBD287C2B8853B310AB3AF6CD7D57ED2CB74CEC67BD4CC8C 4C44173E3806C9C57ED6D47FD5D071D7D171DDD479E5D584DDD07CDED37AE6DB80E2D87ADAD174 DACF78DFD688E3DA8F6F6723AFA859E2DC86DFD981E6E191D2CD84645E18837B35E5DE94EFE996 EFE98DE8E280F1EC88F4EC8DEFE68DF6ED95EEE88BEEE88BF0EA8DEBE48AE4DD84EEE78EEEE68F F1E995F0E894ECE492EEE595F1E593F6E895F4E592F5E693E9DA87ECDD8AF1E28FEFE08DEEDF8C F2E390EFE08DF3E490F3E58BE9DC7FE7DA7DF1E488F1E488E8DB80EDDF86EEE087E9DB82EEE088 E8DA83E5D680EADC86EADC85F0E28AF1E38BF5E78EF4E68DF1E489F5E98DF1E487F2E587F8EB8E F5EB8AEFE685EDE584EEE685F3EA8BF1E88AF4EB8EF4EB8FF0E78BEBE287E7DE84E6DC82ECE28D E9DE8DEADF8EEFE493F3E897ECE190ECE18FEADF8EEDE291F2E795F1E695F0E595F5EC9DF3EA9D F2E99BEEE596E5DB8CE2D788F4E798F1E494EFE292F0E190F3E393F3E795F5E999F6EB9AEFE493 F3E896F0E593E5DA89EDE290F2E796F1E695ECE190F5EA99F8ED9AF1E790EBE18AECE28CECE28D E8DE89E5DA87F3E896F0E593EEE393F4E999F1E695EEE691EBE48BECE48EEFE891EEE690EFE791 EBE390EDE592EFE795F3EB98F4EC9AF1E998ECE493EEE596F0E898EDE595EEE696F5EC9DECE394 EEE595F5EC9DF2EA9AECE393EDE396EFE09BEDDF98F5E89EF6EB9DF3E898F5EB9AF5ED9AF6EF9F EBE494F5EE9EEFE89AF4EA9AF2E996F3EA97EAE28FEEE795EFE899F4EFA1F4F0A8F6F3AFFBF6B7 FBF8BDF5F2BFDBD2AFB7AC9271674B443A212E26080D0600130E000C06003631164C472D5B563B 868261B1AD81C3C18EDCDAA2939251F0F1A9E0E294C3C6786F7125F2F2AA484814A2A063FFFFC1 585A1D3B39114C4730090200625D3DECEAB0DBDD8AF3F395DADB82D0CE85E4E0A7E5E1A2E4E19B E5E29BD6D289E3E093ECE899E8E293E4DD8ED9D285E4DB90E8E097DED58DDDD58CE6DE94F3EBA1 EFE79EE4DC94E2DA92F2E9A3EFE6A0EEE59FF3EAA6EEE5A1E4DB97EBE49FECE4A0EBE59EF0EAA2 EEE79FF0EAA0E3DF92F3ECA0F0EA9CE6E292F3EC9DF3EB9AECE091F3EBA1E6DF9CF5EFB3D9D49C 2C28057F7B43F7F2B9E7E1A3FBF4B3C4BC76454000D5CF88EEEAA5E6E2A37D783ED4D19ADDDCAA ACAB79D8DAA7AEB07DB2B58186875B3F39242F2A0A5853369E9B70ACA775EDE9B0EEEAA9EEEAA3 D8D586E6E48FE4E189E8E390F6ED9FF4EB9FF2E99DFDF8ADFCF3A9ECE299EAE097F4EAA1EDE39B F3EAA2F3E9A1E8DF93E9E092E7DE91F7EEA2F2E99EECE398EEE49CF7EDA6F6ECA7F6ECA7E9DE9C EBE29BF4EF9EE7E290E1DC8AF0EA9CE8E295F4EEA2F3EDA1EAE496F6F2A0E2DD8BE6E18CFBF6A9 F9F4B3F3EEAEF7F2B2F1ECACEBE6A6F2EDADF5F0B0F8F3B3F8F3B3EBE6A6EFE9AAF2ECAFEDE7AC F2ECB2FBF4BCF4EDB5E7E0A7F1EBB1F5EFB3F6F0B1FBF8B6F6F1ACF7F3ABF8F5AEF6F3AEF7F3B0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEAEAEAADADAD6565652626266F6F6FD2D2D2F6F6F6FFFFFFF9F9F9BEBFBE 5E5F5E383838464646D0D0D0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB 9192915656563B3B3B545454898989ADADADC9C9C9DADADAE3E3E3EBEBEBF7F7F7FFFFFFFBFBFB D9D9D98F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06161611A1A1A6F6F6F DBDBDBF8F8F8FEFEFEFFFFFFFFFFFFF1F1F1B7B7B76D6D6D181818626262CECECEF6F6F6FEFEFE FFFFFFFFFFFFFCFCFCEBEBEBD6D6D6C1C1C1BBBBBBB4B4B49192915C5D5C2E2E2E2C2C2C787878 BFBFBFF7F7F7FFFFFFF5F5F5D5D5D57474741B1B1B3A3B3A757575AAAAAAB8B8B8BABABAB9B9B9 BABABAB6B6B6949594535453262726272727A9A9A9E6E6E6FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEFCFFFCF9FEF9F2FAF1D3EFD2B9E6B8D9F2D9FCFEFCFEFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0FFEFDBFBDABDE9BDBBE8BACEF4CEE7FDE7FBFFFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFDEDD8FBE2BAFEF4D1FFFEE8FFFFFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFAF2ECE9C3E6E1ADFAF5EAFFFCFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEEEFEEC0CBC08AB38969BB67AFDDAEFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2DFB24BB44A4FB84CA1DB9F DBF2DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFAFAFAD7D7D7909090494949232323636363B9B9B9EAEAEAFCFCFCFFFFFFFFFFFFEDEDED 9C9C9C4E4E4E373737555555848484ABABABC5C5C5D8D8D8E4E4E4ECECECF7F7F7FFFFFFFFFFFF FFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A282828565656 D0D0D0F4F4F4FFFFFFFFFFFFFFFFFFF6F6F6C4C4C47474742F2F2F424242C6C6C6EFEFEFFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0F0CBCBCB7878783F3F3F2A2A2A7E7E7EC7C7C7F0F0F0 FFFFFFFFFFFFFFFFFFF8F8F8E3E3E38181812020203A3A3A7C7C7CA6A6A6BCBCBCB9B9B9B9B9B9 B9B9B9BDBDBD9292925353531A1A1A2828288F8F8FEBEBEBFAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEFAFFFAE7FCE7C7F5C7B0EAB0AEE6AEE8F8E8FAFDFAFCFEFCFCFEFCFDFEFDFDFEFDFDFEFD FDFEFDFCFEFCFCFEFCFEFFFEDFF4DFB6E7B6B5EBB5D5F9D5ECFEECFCFFFCFEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2D7E3E3AAECECC6 FCFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF9F5E5E9C678DEA830F3E3BDFBFBF6FCFEFD FBFEFCFBFEFBFCFEFCFCFEFCFDFEFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8FEECD8 FDDFBBFBDCB5FCEAD3FFFBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFDFCE6F2E6ADDBAD5FC35F47B947BCD4BCE9EBE9FDFCFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8EFF0EF DDE2DDA1CAA16AB76A6BB86B9FD19FE3F2E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DBD47EE0D885E3D690DCCF86DFD67FDCD573DBD285C7BC89413610A6A261DEDC86D6D076D4CD7F D7CF8F5E561F221C02B7B36ADDDB86DED97AD8D173D9CF76DFCF7FDACD7BDCD178E0D57ADBD275 D8CF72DED47DD7CE80D7CD856D6527999246D8D17EDCD880D9D483CFCB836F6A266C6424D8D08C E5DE8FE6E185E8E481F2ED89F2EC8FEDE593F1E898EBE48AECE58AEEE78DE8E187E6DF87EBE48D F1E994F4EC99ECE492E5DD8DEBE292F0E592F3E491F6E794EEDF8CF1E28FF5E693F2E390EFE08D F3E491F4E592ECDD8AEEDF8CF9EB93F0E387E6D97DE9DC80ECDF83E7D980EBDD84EDDF86E3D57D DFD279EBDD86F1E28DEDDF87E8DA82EDDF87ECDE86F4E68DF0E289F1E38AF4E68DF0E387F1E388 F6E88FF4E98DF2E88AE7DE7FEAE182F6ED8FECE386EAE186EAE286EAE186DFD57CE3D980F0E68D F7ED99ECE191EEE393EEE393F1E696EFE494EDE292EDE292F2E797F2E797EEE393F8ED9DE7DE91 E5DC8EEEE598F3EA9DEBE193E9DE8FEEE192F6E99AF8EB9CF5E694F5E594F5EA97F1E596EDE292 F2E797EFE494E6DB8BE4D989EBE090F7EC9CFDF2A2F1E696F3E898F4E996F6EC95F5EB93F3E993 F1E792F0E691EFE591ECE18FECE18FF3E897F6EB9BEFE493F1E992F5EE94F5EE96F0E991F0E991 F7EF9AEFE794EEE694EFE796F0E897F3EA9BF6ED9EF7EF9EEDE594EFE796F3EB9AF0E897F3EB9A F6EE9DF2EA99F8F09FF4EC9BE9E18FEAE093F4E6A0EEE099F1E399F9EE9FF1E696D3CA79D0C877 FCF5A4EBE494F1EA9BEEE799F5EDA5EFE6A0F1E8A3FEF9B7FFFFC0FCF4B8F7F1B8EAE3B2C5BE94 958F6B696344433C21271C101E13082C2209271E041B130035300E5B532E777147AFAB7FD0CC9D F1F0C4F4F1BD9C975DD5D091918F49D4D287E4E494D7D888818234C7C780BFBE7D58561EFFFBCA D9D9A32F2F08747347A8A484120B02312C15CDCA97EEEEA3EDED91E2E38AD4D287E1DDA2ECE7A7 E5E19AE5E198EEEB9EECE899E2DE8CE6DF8FF2EB9BE3DC8CBAB164D5CC82EFE69CE3DB90E7DF94 EEE69CECE499E3DB92E4DC93E5DD95EDE59DEDE59DF8EFA9F7EEA9E5DC97D6CD88E8DF9AF1E9A2 EFE79FF1E9A0EAE399E2DA8FF2EB9EF6EFA1EEE897F0E998EDE393EFE495E8DF93EDE59DE7E2A1 FFFABE7D7641393312ECE9AFEDE7AAF5EDA8FCF5AC958F45928A43FEFCBAEFEAAAB4AF717D7940 F6F2BBA9A670BAB982CCCC94D6D79FCBCB99DBD6B1D1C9A77F7A562F270927200668622FB7B279 EAE4A8E8E3A2F6F1ACE4DF97EFE79DFAF1A4F1E89BE9DF92E9E295F3EA9DFAF1A4E6DD90E5DC90 F3EA9DEFE699F3EA9CF4EB9BF3EB9AE8DF90FCF3A6F7EEA4F3E9A2EAE099F4EAA5F1E8A2F6ECA7 EFE5A1F4ECA5EFE897F0EB98E0DB89F7F2A5F9F3A7E6E094F3EDA2F5EFA2F1EC9DEEE997EEE997 F3EDA1FAF5B4F7F2B2FAF5B5FDF8B8F7F2B2F4EFAFF6F1B1F0EBABEDE8A8F6F1B1F9F4B4FAF4B6 FAF4B6F8F2B7F8F2B6F1EBB0E9E3A8EFE9AEEBE6A7FAF5B4EAE6A2FDF9B2F6F2A9FAF8ABFAF8AD FEFCB2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF8F8F8CBCBCB6E6E6E333333636363AFAEAFF6F6F6FFFFFFFFFFFFFFFFFF C5C7C56162612D2E2D363636D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F5F5CCCDCC9091905556553B3C3B3B3B3B3939393A3A3A434343636463919291D9DAD9FFFFFF FEFEFED8D8D88F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06161611A1A1A 7C7C7CEEEEEEFEFEFEFFFFFFFFFFFFFFFFFFF2F2F2B9B9B96F6F6F181818616161CDCDCDF6F6F6 FEFEFEFFFFFFFFFFFFFEFEFEFAFAFAF4F4F4EEEEEEECECECEAEAEAE1E1E1B5B6B5696A692F2F2F 323232878787E3E3E3FCFCFCEEEEEEC4C4C46464642121215E5F5EB0B0B0DEDEDEEBEBEBECECEC ECECECEEEEEEE7E7E7ACACAC444444242424393939C0C0C0F5F5F5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFFFCEEFFEED9F7D9C5EBC5BFEABFCEF4CEEAFBEAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFFFAF3FEF4EBF9EBD5F0D5BFEAC0D0EFD0F9FDF9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF2ECCCE9E0AAF8F5DCFEFEF6 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF8F9E8DCF7DBCBFDE3E1FFF0F1FFFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE1EFE19ACA9A66B7626AC761B3E4AEFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1E4C067BE6653BC4C 88D77FCEF0CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDD2D2D28A8A8A4545452828285C5C5CA5A5A5E8E8E8FBFBFBFFFFFFFFFFFFFFFFFF F7F7F7CFCFCF9C9C9C6464644A4A4A3D3D3D3838383A3A3A444444616161989898D3D3D3FFFFFF FFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB696969292929 606060E2E2E2FDFDFDFFFFFFFFFFFFFFFFFFF7F7F7C4C4C47575752F2F2F414141C4C4C4EFEFEF FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4BDBDBD7878782E2E2E3C3C3C6D6D6DBDBDBDEDEDED FCFCFCFFFFFFFFFFFFFEFEFEF4F4F4CFCFCF737373212121555555AAAAAAD8D8D8EFEFEFECECEC ECECECECECECF3F3F3AEAEAE4F4F4F171717383838A4A4A4FEFEFEFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFFFBE8FEE8ADEBAD6CD46C97E497D5FAD5F7FFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FCF6E2F6E2C1ECC1B0E9B0CDF5CDEFFFEFFBFFFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F2D6E1E2A7 ECEDC7FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F8E8E7E5B4E0C76FE1B751F7EACBFFFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD FFF9F2FAF0DBEADFA9F0EAC6FCFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFDFCCDE9CD60BE6031A731B9D2B9EAEBEAFDFCFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6DBDBDB CED4CED8EED87EC87E34A73484CF84CBEECBF3FCF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDCD57FD7CF7CD8CB85DACF83E8DE84DAD36FDDD487D0C6933D32128C884ADFDD87D7D177 D2CB7CD3CB89787036292301B1AD65DFDE88DDD87BD9D375DDD47CDECD80DBCE7CDCD078D7CC71 D2C96CD7CE73E1D681D8CE81DCD28A7A722E8B8339E0D987E4E088D8D481E0DD927D7937605A1C D9D393DFD98DE3DD83EEEA86F1ED89F4EC94F7EEA2F5ECA2EFE892EFE88EF1EA92EDE68EEBE38E F1E994F2EA95E9E18EE5DD8AE6DE8AE3DB88E6DA87E9DA87ECDD8AEEDF8CEBDC89F2E390F8E996 F6E793F3E491F0E18EEADB87EBDC89EADB83ECDF83EDE084EADC83EBDD84F1E38ADDCF77EDDE88 EFE08BE6D782E8D984F0E18CEEE088E7D981EBDD85EADC84F5E78FF1E38BEDDF87F2E48CEEE088 EFE189F2E48CF0E58BF6EC90EDE487ECE387F3EA90EEE58BF1E78EEFE58DEAE088E3D982E8DE87 ECE28BF1E694E7DC8CF2E797EFE494E5DA8AF0E595ECE191ECE191F0E595EFE494EDE292F5E99A ECE396E2D98EE7DE93F4EB9EEFE599E4D98BEBDE90F3E697F8EB9CF7E799F5E597F4E798F2E596 FAEF9FFCF1A1EFE494E9DE8EEFE494EBE090EEE393F3E898EEE393F0E595EFE491F4EA95F8EE99 F3E996EFE492F3E896F9EE9EF4E999F1E696F7EC9DFAEFA0F5E99BEAE28CF0E990F7F098F4EC97 F0E894F3EB99ECE493E8DF8FEFE697F1E89AECE396F1E89CF5EC9DEDE594F1E998F7EF9EF5ED9C F2EA99F4EC9BF0E897EDE594F8F09FF9F1A0F1E799F5E79FF4E69FF3E69CF7EB9DF2E797EDE393 F1E898FCF7A7F2EB9DEFE79CEDE59DE9E0A8FDF4C8F6F3C7CFC69B8B825E685F3E372E1230260E 1C0F000500000C02011E130B3B321240370F655D326A62317A723ECBC68CD3CE8EEAE5A0F7F4AA F1EFA2F1EE9E868235BEBA70CFC97FABA85AEBE899EBE899D8D688868339FFFFC48F8B57959263 FFFDCEAFAB810E0B03747345FFFCD45A5630060100807B50FFFFC6DCDB88E7E790DCDB8CDEDA9A D2CE8AE5E198F5EEA5EEE89CEAE394F1EA99F7F09FE6DE8DE8DF90B5AC5DD2C97BE5DC8FEBE295 F2E99CEBE295E9E093EDE498E7DE93EEE49AF1E79FEEE49CF3E8A1ECE29BDDD38CD7CD86E8DE97 F1E79FF0E59DF2E8A0ECE399E7DE93F0E79CF4EB9EF0E79AF0E799EEE397E5D98EF1E99CEAE298 DDD993F5F0B3C1BE870B0700BCB680EFE9ACEAE59FFAF7AAEFE7A0736D2ADDD795EDE8A8EEE8AB 837E44DBD69EF0EAB0B9B77BE9E8AAECECADE6E4A5E1DD9DDED99BF2EDB4E9E3AC9D9561413910 2C240340370C756C44D2C99EE7DFB3EEE5ADEAE29BE6DE96F3EBA1F3EBA0DFD78CF3EBA0E9E196 E6DF91F4ED9FF1EA9CF2EB9BF5ED9CF9F1A0F0E798F4EB9FF0E69DEFE59DEBE19DF1E6A5EADF9D F1E7A2F3E9A4FAF2A9F3EC9EEBE695E0D98CEBE59AFEF8AFE7E198EEE79FF7F1A7FBF5A9F5F0A1 EDE897EDE79EFBF6B5FDF8B8FCF7B7F9F4B4F5F0B0F3EEAEF9F4B4F4EFAFEBE6A6F3EEAEF1ECAC E3DE9CF3EFACFDF9B8F6F0B2F2EDAEE7E2A4E8E2A4EDE7A9FCF7B6F1ECA8EAE69EF5F0A7F3F29F F6F5A3F5F3A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF4F4F4BDBDBD5151511111114F4F4F808080A6A6A6ACACACADADAD A7A7A78181813F3F3F1A1A1A1F1F1F878787B4B4B4CACACAE8E8E8FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBEEEEEEC7C8C79999997B7B7B6A6A6A5656564444443737373738374A4B4A959695 D4D4D4F0F0F0DADADA8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0616161 1B1B1B808080F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F181818616161CDCDCD F6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFDFDFDFFFFFFE1E1E1959595 454645171617696969CDCDCDF5F5F5E9E9E9BCBCBC5E5E5E2323236E6E6EC7C7C7F1F1F1FDFDFD FEFEFEFEFEFEFDFDFDEFEFEFA5A5A5323132313131626262D2D2D2FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFCF2FFF2D4F4D4B5E5B4BCE9BCE3FCE3F5FFF5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFFFFFFE2F4E2BAE5B9C5E9C5F8FDF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEDECC7E1E1A4F5F5E1 FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFEF0EFFEE4E0FFDED3FFEBE5FFFCFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDCF1DB8ED1895FC1587CD273BEEABAFCFEFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6E6C673C272 51B84C78CD70C6EBC2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF1F1F1D0D0D08C8C8C4E4E4E3B3B3B515151A1A1A1D5D5D5FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCEDEDEDD4D4D4A7A7A78888886E6E6E5959594747473A3A3A393939525252949494 D7D7D7F5F5F5FFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB696969 2A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C47575752F2F2F414141C5C5C5 EFEFEFFEFEFEFFFFFFFFFFFFFEFEFEEEEEEEC0C0C07B7B7B4141413636366B6B6BB1B1B1E5E5E5 FBFBFBFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2C7C7C76D6D6D222222606060BBBBBBEAEAEAFFFFFF FDFDFDFDFDFDFCFCFCFDFDFDAAAAAA4040402222225D5D5DBBBBBBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2FDF2CEF4CE8DDB8D52BF5272CB72AADFAAD9EFD9F2F8F2FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDF9DCF3DCBDEABDBFEFBFD2F6D2F5FDF5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF9F6F2D3 ECE2AFF2ECCDFEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF3F0D4DFD58ADBC86DE0C975F6EFD6 FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFDF8F7E9E2E1A6EAEAC0FBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEF1DE71C37138A638A7C7A7DDE4DDFBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAEEEDEE DBDCDBC7D5C7AEE2AE6FC86F4AB64AA9E2A9E7FBE7FBFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE0DA82DCD480D9CD85DBCF81E4DB7FDBD56EE5DC8CD9D0993B301A716E32E6E48E E1DB7FDAD383D1C9878C85492E2801B0AC64DDDB86D7D276D6CF72E0D67FE5D487E2D584E2D680 DBD077D3C96DD7CE73D9CE79D0C77AE5DB93A9A15A928A3FE7E08ED7D27AC7C56FDDDA8D837F3D 474106C6BF82CFC980DAD57CE4E17EE1DD7AE8E28BFAF1ABFDF4B1FDF6A4F9F19DFAF29CF6EE9B F3EB97F6EE99EFE792EAE28EE9E18DEBE48DECE490ECE18CE8DA83EEDE8AF4E590EADB85EDDE8A F5E691F3E48EEEE08BECDD88EADC85EBDC87E9DB83F0E388F8EB90F7E990EFE188E9DB82EADC84 ECDE87E9DA85E3D47FE8D984F3E48FF2E48CEEE087F3E58CEFE189F4E68EEDDF87ECDE86EFE189 ECDE86EFE08AF6E791F3E88FF2E88EECE288ECE289F2E890F0E68EF3E992F1E791F4EA94F0E591 EADF8CEAE08CF1E695F2E798F4E999E5DA8AE7DC8DEBE091EADF90EFE495F3E898F0E595EFE495 F3E899F4EB9EF0E79CF1E89DF7EEA2F6EB9FEEE297EADD8FEEE193F1E495F3E294F4E496F4E798 F0E395F4E999F5EA9BEEE393EDE293F7EC9CF3E899EDE292F1E696F0E595F4E99AF2E797F5EB97 F5EA9AF6EB9AF7EC9BF7EC9BF6EB9CF2E797F3E899F6EB9DF4E99BF8EDA0F4EC98EDE68DEDE68F F7EF9BFAF29EF0E897EFE696EBE294F7EEA1F9F0A4EEE49BF1E89DF1E898F0E896F4EC9AF7EF9D F2EA98EBE391EDE593F5ED9BE9E18EEEE694F3EB99EAE091F3E59BF3E59BEFE395F3E898F5EA9A F3E999ECE394EDE59AF6EEA4F4EBA4FFF8B4E3DCAE827B5A3D35240C0500150D00231B064A4132 7368518D836D6B61505F54457F7360BAB282CCC587DCD597ECE6A5F7F2ADF4EFA4FCF6A6ECE792 F3EE95F9F499BEB95C959137FFFCAFBAB367EDE699EEE89CF3EEA4CAC67EC8C37FEAE6A6676327 C1BE87F8F5C28A86620904007F7D51FFFFCDBEBC891814002F2A0EE3DFAFF2EFAAECEB99E3E290 E8E59DDBD78FE1DB92E3DD92E9E395EEE897E7E18EF0E997EBE391F1E998F2E899EBE192F5EB9D F3EA9CEFE698EFE698ECE395F0E79AFBF2A6F6EDA2F4EBA1F0E79DF3E9A1F0E69FE7DD95E3D78F F0E59CF6EBA2F2E79EF5EAA2F1E69EF0E69CEDE299EFE59BEDE399EDE299F0E59DE3D990EDE599 DFDA8EEAE79EFAF7BAADAA7737330A797444E9E3AAEEEAA3F3EFA1EDE7A4AAA76A8E8A4BFBF5B9 F7F1B6BCB67C9A9459E4DE9F8F8B49EFEBA6F1EEA8E3E095EBE795E8E494E9E39AF2EDABF7F1B7 F3EBB8CBC2968A81603E35201B1201483E30A39A6BE4DEA2FEF5B9F2EAABEDE6A4ECE4A2EAE29F F7F2ACF7F1A9EEE69DF2EDA2E7E095F3EC9DF2EA9BECE498EFE79DF3E9A3EAE09CEAE09FF6ECAA F0E6A4F9EFAAF6EDA6F4ECA3F8F4A9ECE69BF2EBA1DCD68EECE59FF6EFAAEFE8A3F2EBA5F4EDA5 F5EEA5F5EFA3F4EEA7F7F2B2FDF8B8FDF8B8FAF5B5F8F3B3F5F0B0F1ECACF9F4B4FFFDBDF8F3B3 EFEAAACECA84E1DD94F6F2ABF6F1AFF4EFADDED998D8D394F1ECABEAE5A1F9F6B2B3AF67D2CD84 F4F4A2FEFCACFBFAADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5BFBFBF5454540909092020202E2E2E373737383838 3838383737372B2B2B1616160909090A0A0A2B2B2B5151517E7E7EC7C7C7F9F9F9FFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFCFCFCF2F2F2E4E4E4DBDBDBD2D2D2BEBEBEA5A5A58282824B4B4B232323 4A4A4A969696DADADADEDEDE8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0 6161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F181818616161 CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB AAAAAA5959591616165E5E5EBFBFBFF0F0F0EAEAEABDBDBD5F5F5F2323236E6E6EC8C8C8F3F3F3 FFFFFFFFFFFFFFFFFFF9F9F9DDDDDD8C8C8C2525254B4B4B969696E3E3E3FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFCFFFCDDF4DCB7E4B6C2E9C2F2FCF2FDFFFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F5E5BBE5BBC4E9C3F4FBF4 FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E0E1A3 F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFAFFF2ECFEE0C5FEEBD9FFFCF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDDF3DA90D8896CCB6397D793CEECCCFDFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9E7C9 78C47751B44E71C36FC3E6C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFDFDFDCFCFCF8E8E8E4646462F2F2F5B5B5B9C9C9CDDDDDDF5F5F5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCF5F5F5E9E9E9DFDFDFD4D4D4C2C2C2A8A8A8868686555555272727 515151959595E1E1E1FEFEFEFAFAFACCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB 6969692A2A2A646464EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C47575752F2F2F414141 C5C5C5EFEFEFFEFEFEFFFFFFFEFEFEF3F3F3C1C1C17979794040402F2F2F6E6E6EAFAFAFE7E7E7 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2C8C8C86E6E6E222222606060BCBCBCECECEC FFFFFFFFFFFFFFFFFFFBFBFBEBEBEB9494943232323939398D8D8DD3D3D3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7F8E7B5E7B586D18668BB6858B05860B360A3D2A3D1E9D1F2F8F2FDFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FDF8E1F5E1BDEBBDB3E8B3 EFFAEFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFEE7 FBF1CEF9E4BDFCEDD9FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF3E8C4DFC368DCC96EE2DC99 F6F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEF8F8EBE3E2A7EBEAC0FBFBF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6F5E689CF894FB14F8EBB8EC8DAC8 F8FAF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0F0 E7E7E7E5E9E5C6E2C677C9776FC96F89D489D2F1D2F8FEF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDED780DED680DFD38ADFD384E0D77AE2DC72DBD37FD8CF98564C2D6F6C2C E1DE89DDD77BE2DB8AD8D18E989154191300A6A258E5E38EDCD77BD7D073DED47EE4D387DDCF7F E1D57FE1D67CD9D073DCD378DACF7BD4CB7FE1D791B3AB646F671CD6CF7EDED981CECD73E0DE8F 9E9A58474009BEB67DDDD58FD6D279E6E380ECE886EEE895F7EDADFBF1B4FBF2A5F5ED9CF8F09C F9F19EF8F09DFAF29EF2EA95F3EB96EFE890ECE58DF0E992EFE58CE8DB83F1E38BF6E790F0E28A F1E38BECDE87E9DB83E9DB83EBDD86F3E58DF2E48CF7E990F4E68DF0E289F2E48BF2E48CEEE088 F6E990EADC85E3D47FE5D681EADB87F1E18DEEE088EDDF86F4E68DEFE189F0E28AE6D880F3E58D F4E68EEEE088EEDF8AF2E38EF0E48EEEE38CE9DF88ECE28BF6EC96F1E792EEE48FE9DE8CF5EA98 F5EA98EBE08FEBE090F5EA9BF8ED9EE8DD8ED2C778EADF90EFE495E9DE8FF2E798F4E99AF0E596 F1E697F3E899E9E095F1E89DF1E89DEFE69BF4E99EF6EA9EEDE092ECDF91EBDE90EFDF91F3E294 F3E697F7EA9CEFE495EEE394EBE091ECE192F1E697ECE192F2E798FCF1A2F7EC9DF2E798EFE494 F3E898EFE494F4E999F8ED9DF4E99AF0E596EDE195F3E79AF6E99FF0E49AF8ECA1F2E997F5EE96 F6EE99F1E996F1E998FAF2A2FBF2A5F6EDA2F2E89FF2E8A0F5EBA4F9EFA8FFF7A7FCF5A1F0E895 ECE491EFE794F0E895F0E895FEF6A3F1E996ECE491EFE793EAE191F2E597F1E496EDE192F2E797 F6EB9BF1E798F1E89BF0E89FEEE69FB1A8657A71324B4417110E004641217E7B56BBB68DCCC89B E7E0B3CCC696AEA878AEA879C2BB8DD7CF9FF7EFAFEBE49BE7E198EFE79CF3EC9EF5EE9EF0E997 EBE48FFAF39DEEE78E938D33EAE18CE5DC8FBCB46BF4ECA3F5ECA5E5DE99CDC684CFCA8AF1EDAD 625F1FE8E7A7F4F3B5534E35050000A2A176FAFBBBF0F0B04F4D230C050087815EF2EDB3ECEA9C DDDC89E5E493E2DD93DAD48ACDC77AD5CF81E2DD8BD8D27FD1C976E6DE8BDBD480F4E899D9CE7F F3E899ECE394EBE293FCF3A4F1E899E4DB8EF4EB9EF0E79CEDE499EFE69BF7EDA5F9EFA8F3EA9F E3D78DEEE298F2E69CF2E69CF9EDA5F4E8A0F5E8A2F1E49EF9ECA7F4E7A3E8DB97F1E6A1E6DD98 E4DF94E2DF92EEEDA4EDECAF8A885678744A524E21EFEAB3EFEBA7F1EEA2F1EDAED8D39C5D5820 E7E0A9FFFBC4E4DEA5706829F2EBA9948D48D9D388FEF7AAEEE796EFEB91F4F098B3AE5EC6C279 F7F2B1FEFAC2F2EAB9FCF4C7DED6ACAEA780544C261911002A220578703EE1D9A7FCF5C0EAE3AC F1EBB1F8F2B5FEF9B9F4EEACE3DE99EEEAA4EDE79DEAE297F3EBA3FBF2ACFCF4B1DAD190E7DE9D F7EEADF7EEA9FFF9B4FFF9B0F7EFA6FFF9B1FBF4ADF0E9A4F1EAA7FFF9BAF4ECACF2EAAAF5EDAC F8F1ACF8F1ABF2EBA5F1EAA5FAF5B4FBF6B6FBF6B6F5F0B0EFEAAAEEE9A9FDF8B8F2EDADDFDA9A FAF5B5FDFAB9E2DD95ECE99AF6F2A7F4F0A7F5F1AAE9E4A2EEE9A7ECE7A5E4DF9CD2CE87DBD790 DAD68DCDCB7DECEA9FFBF8B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAD6D6D68888884C4C4C4D4D4D4A4A4A494949 4848484949494747473C3C3C2625261010100C0C0C3838386161618D8D8DCECECEF9F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCECECECD2D2D2828282 3535352828286D6D6DCBCBCBE0E0E08F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEB B0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F181818 616161CDCDCDF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EDEDEDA5A5A5525252141414606060C4C4C4F2F2F2EFEFEFC8C8C8676767222222666666BFBFBF F2F2F2FFFFFFFFFFFFFFFFFFE6E6E6A3A3A3535353242424727272D0D0D0F3F3F3FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF9FFF9D9F4D8B5E4B4C5E8C4F8FCF8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBF9EBCBF0CBC2ECC2 D7F0D6EDF8EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6 E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF8EDF1E1B4F6EBCD FEFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDF2DB91D58B73C36DA9CCA8D9E6D9FDFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D3ECD38FCF8E60B95F71C071C1E4C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9D3D3D38F8F8F4949493030305454549D9D9DDFDFDFFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEFEFEFD2D2D2909090 3333333333335F5F5FD0D0D0FCFCFCFAFAFACCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4 BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C47575752F2F2F 414141C5C5C5EFEFEFFFFFFFFFFFFFEDEDEDC3C3C37979793D3D3D3C3C3C606060B6B6B6E5E5E5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5D4D4D4767676212121585858B3B3B3 E9E9E9FFFFFFFFFFFFFFFFFFF5F5F5B9B9B96969692C2C2C5F5F5FC4C4C4EDEDEDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE3F5E3ACE3AC99D899A8D4A884C18461B06167B3678AC48AB8DBB8 E7F2E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FBF3BCE8BC A5E1A5EEF9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF4 F2F3C9F5EDC5FDEDD6FFF5EDFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF3E0B5E0B143E4CA70 EEEFBEFAFBEDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFBF8EDEFE1B2F4EBC2FDFCE8FFFFFAFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECF8ECA3DDA36CC36C7DB97D B8D6B8F5F9F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F6F9E9EBE9CDE3CD9BD39B55B95583CF83C9EDC9F1FAF1FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD4CD74D2CA72DBCF83E3D886E3DA7BD9D368E2DA86DAD197594E33 5E5A1DD5D37DD6D074D6CF7ED7CF8BA29B5D110B00A09C53E2E08AE0DB7FD7D074D6CC76D9C97D D2C575DFD37DE3D87FD9D075DDD37ADCD27FE0D68AE6DC95C4BC7561590ECFC877EDE891DBD97F DFDF8CB8B471514A13B8B278ECE8A2EFEB93F3F18FF9F595F2EB9BEFE5A8FBF0B8F6EDA1EFE697 F2EA99F4EC9BF3EB98F5ED99F0E893EEE78FEBE48CEBE48AEEE78DEFE58BF2E58CF5E78EEDDF86 EFE188F3E58CEDDF86EDDF86EDDF86EEE188F5E78EF1E38AEBDD84E8DB82E7D980EBDD84F2E48B F8EA92EADB86E6D782EDDE89F2E390EBDC8AE8D985EBDD84E8DA81EFE188EBDD85F1E38BE9DB83 ECDD88F5E691F4E590F3E48FF1E28DEBDF89F2E791EAE08BF1E791FCF19EF1E693F2E795F1E696 F2E797F5EA9AEDE293EADF90EBE090EBE090EEE394E5DA8BF2E798F7EC9DE9DE8FF2E798F3E899 EFE494F0E596EFE495EBE296F2E99DEEE599EAE196EFE599F0E497F0E297EFE194EFE294F2E395 F3E396F1E495F7EB9CF4E99AF3E899EDE293EEE394F3E899E4D98AEBE091F4E899EEE394EDE293 EADF90EEE394EEE394EEE294EDE293ECE094F5E99DEDE197EEE298FCF0A7F6EAA2F3E69DEDE493 EFE793EFE794ECE493EBE392F0E799F3EA9DFBF2A8F2E8A1F1E7A0F8EEA9F0E6A0F1E797FCF4A1 F4EC99EBE290F1E896F5ED9BF5EC9AFBF3A0F7EF9CF6EE9BF8F09EF6EC9CF5E799F5E89AF4E798 F6EB9BF3E898ECE293F4EB9DE6DE95EDE49FC2B97890874A63602C737447B0B07FF2F3BCF7F8B9 E2E39FDCDD92CBC97BCFCD7AECEA94F6F39DEFEB94F4ECA0F2E9A1FAF2A9F5EBA4E7DD96EEE49D E9DF98F2E69EF9ECA4DFD28CAC9E58FFFCB6CFC47ECCC27DFCF3AFF0E7A6EFE7A99A9354A9A464 BCB878797632F9F8B6EEEDA54844240000007C7B4EF4F6AEF4F5ADBDBA8C29220C30290FB9B281 F5F2A9DFE089E2E28BDAD688EAE49AE1DB8ECAC476D5CE7DE8E28FF0E893EDE591E7DF8CFDF2A2 F4E99AEEE495E9DE8EF1E696F4EA9AEEE394EEE293F5EA9BEBDF93EADE94EFE399F2E79CEEE298 ECE096E9DD92EEE296EFE398EEE298F7EBA3F4E7A0F5E8A2E6D895EFE19FF1E3A2EBDD9CF5E9A8 E4DB98E6E098F6F4A8D6D68EC7C6897D7C4B88865E37340FD3D09BF6F5B1E4E295DED99FE8E4AF 74713BA49E6AF9F3BBF5EEB4787031E0DB97C7BF76C4BB6EDDD584F4EC9BE9E391E9E494D7D086 E1DA93F7EEAED8D091E7E0A5FAF8BCF3EEB1FEFDBEFBF7B7CAC692756D441C140B251D0267603F B9B284E4DEADF0EBB6FBF6C0F4F0B5EBE7A9F1EDADF3ECA5EAE49AF2ECA3F1EBA6F6EFAECEC787 E6DF9FF2EBA8E8E29CF7F0A9FAF4ABF3EDA3F0E9A4F5EEABECE3A3F2EAABEEE5A7EFE7A9F4ECAE F5ECAFF8F0B0FAF3B0F5EEAAF3ECA9F7F2B1F4EFAFF5EFAFF1EBABE4DE9EE3DD9DF7F2B1EDE8A8 D9D494F4EFAFF5F0AFE4E096ECEA98F6F4A4EFECA1E9E59CF1EDA7F1ECA8DFDB96D4CF8BD6D28B F2EEA7B1AC64D2D087F6F3ACFFFEBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CDCDCDB1B1B1B3B3B3B3B3B3 B3B3B3B3B3B3B4B4B4AFAFAF8C8C8C4D4D4D2323232323238E8E8EBEBEBED6D6D6EEEEEEFDFDFD FFFFFFFFFFFFFFFFFFFCFCFCF7F7F7E8E8E8E7E7E7EFEFEFF4F4F4F6F6F6F5F5F5F3F3F3EBEBEB 9FA09F4E4F4E2B2C2B656665C8C8C8E0E0E08F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFF EBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F 181818616161CDCDCDF7F7F7F8F8F8EFEFEFE8E8E8EAEAEAEEEEEEF1F1F1F1F1F1F2F2F2F0F0F0 EEEEEEC8C8C87C7C7C3435341A191A727272DADADAF8F8F8F6F6F6DADADA787878232323535353 A0A0A0E3E3E3F5F5F5F6F6F6F5F5F5BCBCBC5F605F292929454545A1A1A1F8F8F8FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFAE4FDE4CBF2CABAE7B9CEECCE F8FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FFF6E1FCE1 C4EFC3B5E3B5DAF1DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFA ECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF8F7E8E3E1A6 ECEBC4FCFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9EFD886CA8468B367ABC0AADAE0DAFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDFF3DFAADDA974C47374C273C1E4C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF4F4F4D8D8D88B8B8B4A4A4A2525254C4C4C989898D0D0D0F4F4F4F5F5F5F6F6F6F6F6F6 F6F6F6F9F9F9FDFDFDFEFEFEF8F8F8ECECECE5E5E5EEEEEEF3F3F3F6F6F6F5F5F5F4F4F4E8E8E8 AFAFAF4B4B4B3535354F4F4FCBCBCBFCFCFCFAFAFACCCCCC7F7F7F3737373D3D3DDADADAFEFEFE F4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C4757575 2F2F2F414141C5C5C5EFEFEFFCFCFCF5F5F5C0C0C0797979363636292929636363A9A9A9E0E0E0 F2F2F2F6F6F6F7F7F7F6F6F6F7F7F7FAFAFAFEFEFEFFFFFFF9F9F9E7E7E7858585252525454545 979797D7D7D7FBFBFBF6F6F6EEEEEED3D3D3777777484848454545949494EDEDEDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0F5E0B2E5B2B8E6B8E7F5E7D1E8D1A3D2A35DB05D57AD57 72BB72AFDBAFE1F3E1F5FAF5FDFCFDFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1FBF1 C3ECC3ADE5ADE7F6E7F9FCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FAFAEFE5E5AEEAE9BDFAF8EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F2F3D8A5E1A933 EDCE7BFCFCDEFFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F2FDE2C6FEE8C6FFF7D8FFFEF0FFFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FAF2BDE6BD89CF89 6EB86EAAD3AAF3F9F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDFCFBFC FAFAFAF3F9F3D1E9D193CD9363B96362C062A8DEA8F2FAF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D880D9CE79DACF7EE1D481E2D87DD5CC6AE5DC87E0D994 60573145400AD3CE87D8D17ADBD57ADAD480A49D57201600968D53DFD984D8D279D9D175DBD077 CFBF6FD4C772D8CD72DFD47ADDD379DDD37CD9CF7CD9CF82DED48BECE59D9E954FDAD289DCD487 E6DF8AF1EB9BD1C984554D0FB5AE71F9F3AFF4EF9FF2ED95EAE58AE8E08DEEE398EFE49BF4EB96 ECE28BEAE18AEEE58DEEE58DEEE48DF5EC92EFE78DEDE589E9E184EFE68AF5EB91F4E691F6E793 EFE08BF4E691F7E894F8EA95F5E691EEDF8BE9DB86EFE08BEEDF8AECDF87E6DC80E5DB7FE6DA80 E3D97FEADF87ECDF8AE2D782E4D885E5D888E6DA8AF8EB9BF1E38CE6D87FF2E48BF6E88DF1E488 F1E387EBDD83EFE18AF6E793F5E694F1E192EFE38FEDE38AEEE48CF1E78FF4EA93EFE58EEEE48E F2E892F5EB97F8ED9AF4E996F2E794EFE492EDE291F0E594F6EB9AF2E796F2E795F0E594F1E695 F7EB9AF1E594F2E796F1E695EBE192F2E799F4EA9BF3E99AF6EB9CF7EC9CEDE292F3E897F1E594 F6EA99F2E594EFE392E9DF8DEDE493F3EA98F0E797EEE595EFE696E5DB8CE9DF90EDE495EAE092 EAE193EBE192EEE593EEE595ECE392EEE494ECE393F6EB9EF1E799EEE498F5EB9FF5EB9FF1E79C F0E696ECE291F0E795F3E999ECE292EDE394EEE395F6EC9FF9EEA2F9EEA2F9EEA4F4EA9EF4E896 F4E995F4E995F7EB99F8EC9BF3E99AF9ED9EF5EB9BFAF0A0F3EA9AEBE292F2E697FCEE9EEFE090 F5E797FDF1A1F4E798EBE092ECE297E8DD96F4EBA4F0E7A3EEE7A6E6E2AEC4C5997D7F527C7D4B BCBD85F8F7BCECEBAAF1F1A9FFFDACE4E18CE4E288EFEB92F0E999E7DF95F7EEA4F4E9A0EDE19A F7E9A3F4E6A0F4E7A0F0E39DC7BC74CABF77F2E9A2BEB478D8D08CF8F1ADF2EAAFEBE6A3837E37 F4F0AB9B955C979154FFFCB9DFD99F544F2B110C015A5A23F0F1A9E1E094FBF8C1857C572A1F06 696038F4F0AFF2F29BE2E681E3E18AEFE99CE1DB8DE1DB8DE7E393DED788E4DE8DF1EB9BEEE798 E9E294F3EC9EEAE397EBE59BEDE59AF3EB9EE9E093EBE192FFF5A6E9DF91ECE294F2EB9EF6EFA2 F1EA9EEDE59BEDE39AF1E69EF3E99FF1E79CEEE497EBE195F2E89DE2D88EE2D890EDE29CF0E4A1 F1E6A2DBD08AD7CF88F2EDADD7D39BE2E1AA67672F6F6E3C25210C918C66F9F5B7CFCC76C8C279 F9F0ADC1B87772682AEBE1A4E7DD9CB4AA67C8BF76E3DA8CD0CA74D9D378E5DF86D1CE80D1CE81 E8E295E2DA8EE8DD97E0D492E7DC9EE5DB9ED6D190DEDA96EFEEA4F5F3A7FFFAB1DED996897F51 3D3215251B00554C31ACA481EFEAC1F8F5C3EDEBB1E1DFA0F5EFA6F3EC9EEEEA9FE3E398DEE198 CBD088DADD97E8E8A5E4E19EE7DE9CF1E4A3F2E4A3EDE1A1F4E8A9EFE2A5E0D396CFC485E7DC9E EEE4A3DED393EBE39FEFE7A1E9E19AEBE39DEEE4A2F0E7A5F0E7A5F3EAA8E4DC99E3DC99F1EAA7 F5EFACF7F1ADFDF7B3F2ECA8D7D38AE7E69AF5F6AAF1F2A9E4E69EECECA7E9EAA5E4E5A0CECE89 E6E59DD6D28B7F7C32E6E399F4F0A9FBF7B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEFEFEFE4E4E4E5E5E5 E5E5E5E5E5E5E5E5E5E7E7E7DFDFDFA3A3A34444442626263B3B3BBABABAE8E8E8F3F3F3FAFAFA FEFEFEFFFFFFFFFFFFFEFEFEF4F4F4DBDBDB9494948F8F8FAEAEAEC6C6C6CECECECFCFCFCBCBCB BDBDBD777777323232303130767676CECECEDFDFDF8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFF FFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B8 6F6F6F181818616161CDCDCDFAFAFAE4E4E4B2B2B2939393999A99AAAAAAB9B9B9B9B9B9B9B9B9 B4B4B49999996B6C6B3D3E3D2425243C3C3C949494EDEDEDFDFDFDFDFDFDEAEAEA9090902F2F2F 3939396A6A6AB8B8B8CDCDCDCBCBCBB1B1B17C7C7C454645474747939393D1D1D1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FCF7CDEFCCC3ECC3D5F0D5 ECF7ECFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFEFEFDFEFD FDFEFDFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFC F2FEF1CFEFCEB1E1B1D7F0D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFEFEFDFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8 E1E1A4EBEBC1FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1EBD16EC16D4EAF4DA1CBA1D7E8D7FDFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE1F4E1B0E0AF77C67673C173C1E3C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9CCCCCC9191914545452A2A2A3131316A6A6AA8A8A8C3C3C3D0D0D0CECECECECECE CECECECCCCCCDDDDDDF4F4F4FAFAFADEDEDEA6A6A6848484ADADADC1C1C1CDCDCDD0D0D0CCCCCC BCBCBC8585853232323B3B3B6B6B6BD4D4D4FDFDFDFAFAFACCCCCC7F7F7F3737373D3D3DDADADA FEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C4 7575752F2F2F414141C5C5C5EEEEEEF2F2F2BFBFBF7B7B7B3C3C3C2222223E3E3E7C7C7CB5B5B5 CACACACFCFCFCECECECECECECECECED0D0D0E2E2E2FBFBFBFFFFFFFDFDFDF8F8F89B9B9B353535 2D2D2D666666A9A9A9D4D4D4CBCBCBADADAD8383834848485555558A8A8ACCCCCCF9F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF3FFF3D8F5D8BBE5BBC8E8C8F7FBF7F1F8F1D8EDD8A7DCA7 7EC97E61BC6164C4648BD58BC5E2C5F1F0F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7FDF7D8F6D8C2EFC2CEEACEE5F3E5FCFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEF9F9EEE2E2A9E8E9BAF9FAEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF6FDEDD9F2D196 E1B44AEED696FFFEF1FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F6FFE2D8FFE1C9FFE9C8FFF6E6FFFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FBF8D6E8D6 A2CEA255AA5595CA95EFF7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFDFEFDFCFEFCFCFEFCFCFEFCFBFDFBF7FAF7EAEDEA E6E8E6E0E6E0BADDBA85CE855CC05C5AC15A9ADE9AD0F1D0FCFEFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D882E4D884E8D986EADB86EBDD85E0D67BE3DA84 E7E1947D7739423C0ACAC48BD6CC7BCEC866DDD875BFB869281B007E7344D8D27ACEC671D8CF74 E2D878CCBC68D8CA71D4C96DD7CC72E0D57EE3D982DBD07FE8DF8FDFD68CE0D8907C732EACA361 D2C984CFC474F1E593C7BD733D3200B1A869F1EAA7EDE79CEBE591EAE48CF6EC95FCF09AF6EA94 F2E98BECE386E9E083EAE184E8DF84E6DD82EFE68BECE388EBE285E6DD80ECE386F4E991F0E18F F8E998F6E796F8E998F4E594EBDC8BEEDF8EF5E695F7E897F9EA99EBDD8AECE186E2D97AE2D97C E9E085E5DC81E4DA82E9DF8ADFD581DBD07FE8DD8EEFE396E2D788DDCE78D6C86FDED077E3D679 E4D779EDE080ECDF82EFE187F7E894F5E794F5E598F7EC98EFE589EAE186F1E88DFEF59AF7ED94 EAE087EBE188F0E690F0E68FEEE48DEEE48DF1E791F4EA95F0E691F5EB96EDE38EECE28DFAF09B F2E893F0E691F2E893FFF6A1F5EB96E2D787EBE090EFE495ECE18FEBE08EF0E593ECE18FF0E593 E9DF8AF1E792EDE38EEEE48FF2EA97EFE794F2EA97EFE794EDE594F0E897F2E99BEEE596EAE193 E6DD90E8DF92ECE393EFE794EDE592EAE28FEDE592EAE291E9E091EDE495F3EA9BF6EDA0F0E79A E5DC8EECE192ECE191F9EE9EF1E696EBE090ECE191F0E595F3E898F6EB9BF4E999F1E696F2E796 EFDF8CEEE08CF0E18EF5E695F8EA9BF9EC9EF7E99DF5E99DFDF1A5F4EB9EECE396F4E898F9E995 FFF19EFCED9BF9EC9CEDE093F2E69BFBF1A9EBE19AEBE29EFEF5B2FFF8B8FCF9C4F6F7CBF9F8CE A6A5793532064F4D1ED1CE9AFDF8BFECE7A5F7F3A9E6E292E8E392EEE797E2DA8EF3EA9FEFE399 EBDE95F7E69EF1E199EEE198EEE298BFB669D6CF7FEBE49DB2AC73D1CD86EEE9A2F6F0B6D4D087 A4A150F3EEA787804A9D9760FFFCBEB4AC811812002627013B3A11E4E39BEBE99EECE8A4FFF6C4 6154311E14007E7843ECEA9EF7F89EF1EF99E5E193D8D386E9E698E9E49BDDD990E0DC93D3CF85 D9D68AE1DE8FE5E292F6F3A6EDEAA4DEDA94DFD890D9D187DDD488F4EB9EEFE699E0D98BE4DE90 EFEB9EEBE99DE2DD95EADF9DF5EBA6F9EFA7F4EBA1EFE698F3EA9BFDF4A5EDE496E8DE94F0E69F F0E69FF5E9A2DACE84DFD68DEFE5ADCFC99BF8F5C33B3D1034340C2D2813736C53F2ECB6D6D279 E7DE8CEEE297CCC1785F520FECE1A1EDE2A2CFC783C6BE77E6DF91C7C26EE8E489D4D07ACDCA7F E3DD92EDE696DAD080E9DB8FF9EBA5F3E3A6F3E4A9E3D89BE3DF99EAE89DEEED94EAE587EBE593 FFFDBFF3EDBA928D6A2D2910120E00383716B3B58CF8FCC8F1F5B9E0DB98E4DD95ECE9A0EEF1A4 DDE295C4CB7DD8DF92E5E79DEBE8A3EEE5A4F4E7A9F9EBAEF2E8AAFBF0B3F7EEADF8EFAEEEE6A3 F3ECA6E4E098D0CC83DDD990E4E297E4E297ECE69EF4EAA5F7EDA8F5EBA6EDE49FDBD28DE9E09B FAF3ADF7F0AAF1EAA4F5F1AAECE59FDCDB93E9EAA4F7F8B3F0F4AEE9EDAAE5EAA7EEF1AEFEFFBD FAFAB5F0EDA8E5E298F7F3A9E6E299EEEAA2F5F1AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9AFAFAF3E3F3E2828284B4B4BD2D2D2FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F0F0CBCBCB5B5B5B4747476969698383838A8A8A8C8C8C 8787877A7A7A4E4E4E2D2D2D5455549D9D9DDDDDDDDDDDDD8E8E8E4141412A2A2AC7C7C7FBFBFB FFFFFFFFFFFFEBEBEBB0B0B06060601A1A1A7F7F7FF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 B8B8B86E6E6E171717616161CDCDCDFCFCFCD6D6D6888888555655575857666766767676717171 7070706A6A6A4A4A4A2A2B2A232323383838757675BEBEBEFBFBFBFFFFFFFFFFFFF7F7F7B1B1B1 5555553838384040407B7B7B8B8B8B888888696A69525252525252828282D9D9D9F5F5F5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FBF5BCE5BBBFE6BF EBF7EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF8FDF8ECF8EC E2F3E1E0F1E0F5FBF5FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFEFCD8EFD7B3E2B2D7F0D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFAFAF1F7F7E7F7F7E7FAFAF1FEFEFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFD F7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBE9CB5CBB5A3CB03AA1DEA0D9F2D9 FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE5F4E5B7DFB677C3756ABE69BCE2BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF5F5F5AAAAAA5353531212121313133535356767678989898D8D8D8C8C8C8C8C8C 8C8C8C8C8C8C888888ADADADE5E5E5FBFBFBD0D0D07878783A3A3A6969697F7F7F8A8A8A8D8D8D 8888887A7A7A5757572D2D2D5A5A5A9E9E9EE3E3E3FEFEFEFAFAFACCCCCC7E7E7E3636363D3D3D DADADAFEFEFEF4F4F4BABABA696969292929636363EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6 C4C4C47575752E2E2E414141C5C5C5EEEEEEE8E8E88E8E8E4242420F0F0F151515434343717171 9090908C8C8C8C8C8C8C8C8C8C8C8C8A8A8A909090BABABAF6F6F6FFFFFFFFFFFFFFFFFFB9B9B9 5E5E5E3030303F3F3F6E6E6E9090908888886767674747474444447F7F7FCECECEF8F8F8FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFBE3FBE3CEF0CEC6E3C6D7E8D7FAFCFAFFFFFFFCFFFC EFFFEFBAEBBA7BCD7B49BE4950C0508CCC8CCDE0CDF5F9F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFFFCEEFFEED7F7D7B6E0B6D1EBD1F8FCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF5EBF8DEBB EDC985E0C46BEEE1B2FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE2E3FFDBCBFFDDBFFFF0DFFFFDFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFD EBECEBB7D0B73C9F3C7EC27EE6F6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDF1FBF1E4F5E4DAF1DAD3EFD3CFEECFCAEACAC2E2C2 B0D1B0ABCBABA4C8A478BE7851B85152C1527AD77AD3F9D3F2FFF2FEFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD47EE4D884E8D988E6D783E0D27AE2D87E DFD781EAE4979690513F3909BFB97FD4C979CBC563DAD572CEC7782417006D6233DAD57CD1C974 DCD378E6DC7DD3C26ED8C972D2C76BCFC46AD9CE77E1D780DBD07FE2D889D0C77CD0C980716922 A49B56E3D994D3C875E3D784CEC4783C310099914EF2EBA5F2ED9FEBE691F1EC91F6EC92F1E68F F2E78DF1E88AEFE689F0E78AEEE58AEBE286E9E086EAE087E8DE85EAE187E8DF85E9E086F2E690 F5E692F5E693F1E28FF1E28EF1E28FEFE08DF6E793E9DA87E7D784F3E490F5E793F1E68BE8DF80 E8DF82F1E88DEEE58AE3D981E6DC86E4DA86DBD07EE2D787EBE090DBD181D0C26BDBCC74DFD178 DFD275DFD274DFD274E7DA7EEDDF86EEDF8AE6D785E6D688EADF8BEEE488EFE68BEDE489F2E98E F2E88FEEE48BEFE58CEEE48DEAE089EAE089ECE28BE7DD87EDE38EEDE38EF1E792EDE38EF1E792 E9DF8AE6DC87EEE48FEAE08BF0E690E8DD89E4D989E8DD8DEBE090E8DD8DE9DE8EEDE292F1E696 F2E795E9DE8CF2E795EFE493F0E593F9F19EF1E996F0E895EDE592EEE695F2EA99EBE293ECE394 EBE294EEE598EFE698EDE494EEE693EDE592EDE592F1E996EDE595F5EC9DF5EC9DEDE495E9E093 EAE194ECE395EFE596EBE090F8ED9DECE191F5EA9AEBE090EADF8FEFE494F1E696F0E595F0E595 F1E695ECDD8AF4E592F3E491E9DD8BEADE8EF1E495F0E595F1E696F5EA9BECE394EAE192F4E997 EBE087EADE88F8EE9AF3E898EEE398F0E79FEFE6A4F7F0B1EDE3A7DED49AB7AE7768633A54531F 4947143E3C09383419211E081F1A009C9861F4F0B0F2EFA9E8E69CE9E699EEE89AEDE697F6ED9F EFE397F2E599F0E297F8EA9FF4E89CF9EDA1C3BA6DE5DE90F0E9A2B6B074D7D38AE3DF96EBE5AA A6A259B7B463F6F1A9A29B64B1AB73FBF5B7DED6A9211B00595937474513ADAB6EFBF9ADD7D38A FBF9BDD3C999473E1F1F17008E8856E9E7ACEDECA3DDDC8EDAD88DEDEAA4E6E2A0EDE8A7E5E09F D4CE88D5CF83E3DE8CEAE68FECE994F3F0A8E5E09DDDD792E0D890E6DC95EAE197EFE59CE8E096 E2DB92E4DF98EEEBA5F2EEA9EEE5A2F9F0AEF8F0A9F0E89EEEE79CF3EB9EF9F1A4EFE79DF0E8A0 F4EBA6EBE29DECE198F0E598EFE79ADBD599E4DFAFC9C6910C0C0563632F58523D423A27FEFACB E0DF8DDFDA8EF3EDA6F9F3B06F682BE9E3ABE5E0A8CDC891B4B075DBD99AB3B16DDDDC93E4E197 DFD58FE4DA90EADE90DFD284EDDF92F5E5A0F2E2A4EEDFA3E4D798EBE29BF0E89CEBE99EEDF0A8 E9EBA9E5E8ACF1F6C1FFFFD8DAE0B88E956F2B331C0D15003941269BA279F1F2C5E8E5B2EBE7AD E8E3A1D7D288E6E092F2EC9AF2EA9AF3EC9FECE69FE3DD9BE0DE9DE9ECA8F1F5AFEBEFA9F8FCB5 EDF4ABDEE59AD8E194DAE396E4EE9FE5F1A2D9E593D8DC90F0E8A4F5ECA9FDF4B1EBE3A0DCD491 F0EAA6FBF6B2FAF6B2F7F3AFF8F5B0EDE9A4F2EEAAEFEBA8FDF9B7F1EFAEEEEEAEDEDD9DBCBB7A E3E1A0EEEAA6F5EDAAF8F2ABF8F3ABF5F1A9F2EFA9F2EFAAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8BBBCBB595A593738374A4A4AD1D1D1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE3E3E37F807F4B4C4B3738372A2A2A212121 1F1F1F2323233232325454547F7F7FBDBDBDE8E8E8F6F6F6DADADA8F8F8F4141412B2B2BC7C7C7 FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFF F1F1F1B8B8B86F6F6F181818616161CDCDCDFAFAFAE1E1E1A5A5A5727272595A59444544323232 2020201818181B1B1B3434345254526F706F999999D6D6D6F1F1F1FEFEFEFFFFFFFFFFFFFCFCFC E4E4E4B3B3B37777774243422727271F1F1F2423243D3E3D6D6D6DA5A5A5D5D5D5F4F4F4FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FBF5BDE5BC C0E6BFEAF7EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDE6F5E6 B6E2B591D09089CB88DBF0DBFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFEFBD7EFD7B3E2B2D7F0D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF7EEEECBE1E1A4E0E0A2ECECC7FBFBF4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBE9CB5EBC5D49B847BFEFBE EAFCEAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F4F2D0DECF75BB744CB24BACDCABFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF4F4F4A0A0A04444441212120606060B0B0B1616161E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F171717606060D0D0D0FFFFFFE9E9E99D9D9D5656563F3F3F2D2D2D212121 1E1E1E2424243232324C4C4C787878B3B3B3E8E8E8F9F9F9FFFFFFF9F9F9CCCCCC7F7F7F373737 3D3D3DDADADAFEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFF F6F6F6C4C4C47575752F2F2F414141C5C5C5EEEEEEE6E6E68080803838380C0C0C0303030E0E0E 1818182020201F1F1F1F1F1F1F1F1F1F1F1F1C1C1C272727787878ECECECFFFFFFFFFFFFFFFFFF E6E6E6BABABA7676764040402727271D1D1D2121213535355858589C9C9CCECECEF0F0F0FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCF9D3ECD3C4E0C4CFDDCFE6E8E6FBFCFBFFFFFF FEFFFEFBFFFBF1FBF1DDF2DDADE3AD77D17759C55978CF78E7F7E7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFEFAE3F7E3A8E1A8C6EBC6F7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F0E1 E9D09EDDC176DED58BEEEBC6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE2E2FFDBCBFFDEBFFFF0E0 FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7FAF7C3E2C32FA32F69C269D2F6D2F8FFF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FCF7CAEECA9ADB9A75CA755BC15B4AC04A38B238 2AA32A269F26249E24299F2944A94478BF78B6DFB6E6F8E6F5FDF5FCFFFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD27CDCD07CDECF7EDCCD78D3C56D D8CE74D8D07BE3DD90A19B5C352F00BEB97FDAD07FD6D06ED2CD6ACAC375291C00655A2BDFDA81 D9D17CD5CC71D7CD6ED4C470D4C66ED3C86CD5CA70D6CC74D6CC75D5CA79D8CE7FCAC174D6CE84 8F873E9D954EDED58EE0D680D8CD77E1D88A534905756D30E4DE95E7E290E6E189EEE98CEAE185 E6DC81F5EA90EDE587F1E88BF7EE92F3EA8FF0E78DF4EA91F2E890EEE48DEDE38EECE28CE7DC89 ECE18BF2E68EF0E38EEDE08AE9DD85EADE88E7DA84F5EA91E9DD87E7DB85E7DB83ECE08AECE286 E9E083E4DB7EE3DA7FE1D77DDCD279E0D67FD8CE78EAE08BF6EB99D9CE7DB5AB59DFD37CE9DD84 EBDF86E9DD81DED376CEC367E0D57BEADF86EBDE89E7DA88EDE08FF0E48FECE386F9F095EBE287 E5DC81EEE48BF2E88FF1E78EEDE38CEAE089EBE18AECE28BEBE18BF2E893E9DF8AE4DA85E0D681 E5DB86E7DD88D7CD78EDE38EF2E893E6DC87EDE28FF1E696EBE090E8DD8EEFE495F2E798EFE495 F1E697F4E999EDE292F7EC9DF1E696ECE191F1EA96EDE592EFE794EEE693EDE594EFE796EBE293 EFE697F0E798F1E89BEAE194E4DB8BEBE391EEE693F0E895F6EE9BF4EC9BF5EC9DF7EE9FF5EC9D F2E99BEEE598EBE294F6EC9DECE191EFE494ECE191FFF5A5F0E696E4D989EDE292EEE393F1E696 F7EC9CF7EC9CF0E190F4E695F6E997F4E896F4E997F7EB9AF7EC9AF5EC9AF4EC99EEE595EEE696 F4EC98E8DF89F1E592F8F09EE6DD90ECE49CFFF7B5F2E9AEC0B77E625A2F20170C211800484114 8C884BB1AD70BCB87DE2DDA4E3DFA77E794B070200857F52FFFFC0F7F6B4ECE9A4F0ED9FF8F3A1 FFF7A6F7EC9EFBEFA1F0E396EADD90EFE296F8ECA0B7AF61E1DB8EEFE8A0B8B374DBD88ADFDC8E E7E1A48E8A41D1CE7DDFDB939D9661CAC38DF5EFB1D7CFA2140E007373539E9C7254521EEEECA3 E5E196F6F0A9EDE5A9C6BE8E3F3615191006766F54E9E5B4E7E7A8D9D798E7E5A4EBE8A7EBE7A3 F0ECA4EDE89CDDD888DED886E7E18EDED887E6E39DEDE8A5E7E29FE8DF99EEE49DECE29BE9DE97 F4EBA5EBE4A0DED896EBE8A7FCF7B6F3EAA8F2E9A7F0E7A1EDE59CEDE59CEBE39AE9E198E0D88F EBE29CF2E9A4EBE29FEBE29AEAE394E4DF91E0DB9EE9E7B45D5A351F2000CAC9968E8870211809 BEB990D0CE82DEDD95E2E09EEEECAE68652DB8B5814F4D1CB4B182C6C597DDDCACCAC995B4B77F B7B579E6DC9AF2E79FECE496DCD584E8E393ECE69AE4DE98DDD694D9D18DEAE298F4EDA0EFE7A4 EEE4AEECE3ACEFE8ADF5EEB2E9E3A8F6EFB6FFFFCADFD9AA928D6640391F130B003E3B208D8A68 F3EDC1FBFAC5EADC98DFCF81FBEB99F1E48FE7E08ED6D488C1C37BBBBD7ADBD28EEFE29FEEE09D FCF3AEFCF2ACEFE79EEBE399E9E39AE4E094ECE89BF4F0A3F0EAA0E9E19DEEE7A3FEF6B2EAE5A1 E1DB97F3EEAAF4F1ACF7F3AFF3F3ADF2F1ABE8E6A1F2ECA9E8E1A1F9F2B3F0EAABEFECAECFC98B BDB87AF6EFAFF4ECAAF4E7A6FFF8B3FBEEA8E6E39CE5E49FECEAA7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDBDBDBA6A7A6919191999999E5E5E5 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2BCBDBC9A9A9A8989897C7C7C 737373727272767676828282A0A0A0C2C2C2E9E9E9FDFDFDFDFDFDEAEAEAC1C1C1959595888888 DFDFDFFDFDFDFFFFFFFFFFFFF4F4F4D3D3D3A7A7A7808080B8B8B8FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFF8F8F8D8D8D8AFAFAF7E7E7EA7A7A7E3E3E3FCFCFCEFEFEFD0D0D0B4B4B4A2A2A2919191 8383837777777171717575758A8A8AA3A4A3B9B9B9D3D3D3F6F6F6FEFEFEFFFFFFFFFFFFFFFFFF FEFEFEF7F7F7E2E2E2BCBCBC9596957A7A7A7272727676768C8D8CB0B1B0D8D8D8F4F4F4FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FBF5 BDE5BCC0E7BFEAF7EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F5F7DADCDA AAC7A870C26E6FC36E8CCE8BDDF1DDFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFDFBD7EFD7B4E2B3D7F0D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEF9F4F3D4E8E4A4DECA6CE3D489 EEEBC4F8F9EDFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEF9FEBFDDBE5AB75952BA51 D4F4D3F6FFF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF9FBE3EAE27DC37C44B143A8DBA7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9C8C8C89494947A7A7A717171707070717171727272727272 7272727272727272727272726D6D6D9A9A9AE1E1E1FFFFFFF6F6F6CECECEA4A4A48D8D8D7E7E7E 7474747070707575758282829A9A9ABEBEBEE1E1E1FDFDFDFFFFFFFFFFFFFBFBFBE3E3E3B8B8B8 8F8F8F929292EAEAEAFFFFFFF9F9F9D9D9D9ACACAC888888A8A8A8F3F3F3FFFFFFFFFFFFFFFFFF FFFFFFFAFAFADEDEDEB2B2B28B8B8B949494DEDEDEF6F6F6F0F0F0B6B6B68E8E8E7676766F6F6F 717171717171727272727272727272727272727272707070777777AAAAAAF3F3F3FFFFFFFFFFFF FFFFFFF7F7F7E6E6E6BCBCBC9494947C7C7C707070737373868686A3A3A3D3D3D3EEEEEEFCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFADBF3DBC9E7C9CAE0CADEE8DEFAFCFA FFFFFFFFFFFFFFFFFFFFFFFFF9FDF9DFF4DFB8E7B89BDD9BA7E1A7EFFAEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFFFDF4FFF4DDF7DDAFE1AFCBEBCBF7FCF7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBF6ECF1E3C5EADCB1ECEAC3F6F6E3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE2E3FFDBCBFFDDBF FFF0E0FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFDFBCDE6CD45A44566BB66B4E9B4E9FBE9FDFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDF2DDB0E0B088D28872CA726BC76B68C66866C566 64BC6462B56261BF6167C26773C4738FCB8FB8DCB8E3F2E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D883DCD07CE1D181E4D583 DBCC77D5CA71D7CE79DDD78CA8A163262000BCB67CE3D888D4CE6CCDC866D9D2843E311253481E E3DE85DFD782D4CB70D1C868DECE7AD8C972DACF73DED379DACF78D5CB74D7CC7ADCD383DDD487 DCD48A938B436D651EDFD68EDBD17AE8DD84EEE5947A70287E762EDED88DE2DD89EBE68BEDE988 E7DE7FE6DB7EF0E589EEE589F2E98CF8EF92EDE58AE9DF86F5EB93FAF099F4EA95F1E694F3E898 EBE090E7DB88E9DE86F1E68DF5EA91EDE289E5DA81DED47AF5EA91EEE38AF1E68DDDD279EEE389 EEE488EEE588E4DB7EDBD277DED57ADFD57CDFD57EDED47EE7DD88CFC472B6AB58CEC371EEE28B E9DE85EADF85EADF84E4D97DE0D579EDE288F3E88FEEE38AEADE89EEE28EECE18AE2D97DE5DC81 E1D87DEFE68BF0E68DE4DA81E5DB82E4DA83E6DC85E9DF88E9DF88E7DD87EEE48FE2D883DFD580 E5DB86EDE38EF1E792C4BA65CDC36EE8DE89E9DF8AEBE18EF3E898E6DB8CE1D687EADF90F0E596 EBE091EBE091ECE192E8DC8EF3E899EADF90E3D889EBE492EAE28FEEE693EAE28FE6DE8DE9E190 F0E798EEE596E9E092F2E99CF2E99CEAE292EFE794F0E895F0E895F3EB98EEE695F0E798F3EA9B F0E798ECE395EBE295EDE496F6EB9CF3E898EBE090F4E999FAEF9FF4E999EDE292F5EA9AF1E696 EFE494F6EB9BF4E999EEE18FEADD8BEADE8CEEE290EDE290EBE08EFBF09EF5ED9AF4EC99F2EA97 F1E998EFE797E5DD8EEAE194ECE49AFBF8B1F7EEACA1995D4138010D0600231B02665E2EBAB285 D0C88EDFD88FEFE8A2F4ECAAFDF8B8F5F0B2FFFFC598945A28230073713AECEAB1F3F2B4F0EDA0 F5EF9DFBF4A3F2EA99F7EB9CF0E395EADE8FF3E89AFFF7AAC5BE70EFE99CFDFAB2CCC784EBE998 ECEA99E7E2A2918D44E3E08FE2DE968E8753C0B984F8F2B3E0D8AB251F075B5B39EBE8BC3F3B15 A6A164FAF6ACE5E094C3BC76E6DFA5BAB28A251A07190F09686246B8B58AEDEBB8ECEAADDDDC96 EBEA9BF0EE9CD3D07CD0CB79CEC778CDC579ECE49DE3DF99EBE7A2E1DD96DBD38CE8DE97F7EDA4 F4EBA3F1E8A3EEE7A3E9E5A4E3DF9FE1DC9BEAE29DE8E097EBE39BEFE79EEEE69DF0E89EE9E198 D3CB82DED68EECE49CEDE49FF6EEA9CFC881F0EEA5FFFBC2827E510000005B5B21FFFFD8AFAA8F 160D00A29C74C6C67ACECE84DEDE9AF1F0AF77753AC2C18D605D2E181500908E66B1AF86DFDDB4 D4D5AAD1CF9ECAC384D5CF86D5D383D6D882E1E38FD9DD8BE0E397D8D890D2CF87E1DF90EEE998 ECE59DF6EDAEF5EBABE6DD96E6DE90F4EC9AF2EA99F0E89BE6DD98F1E5AAD9CE9C9B8E6430280D 140F01564E29BDB181E3D496F9E9A1EFE092F0E593E3DC8BD4D484CCD185C9CA81DFCF89F6E29D F7E59FFEECA6F4E29DEDDD94F5E69FF3E59CEADD92E6D88EEBDD92EEE39BEEE7A3EDE6A2F5EFAB E6E19DDED995F5F1ACF8F5B0EFEFA9E8E8A2E4E49EE2E29CEDE6A6EDE5A6F9F2B4F6F0B3F8F2B6 D3CD91D6D092EEE5A6F7ECACF8E9A8EFDD98FDEFAAE8E39FE9E8A6EFEEADFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF3F3F3F0F0F0F1F1F1 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF6F6F6F1F1F1EEEEEE ECECECEBEBEBEAEAEAEBEBEBEDEDEDF2F2F2F7F7F7FDFDFDFFFFFFFFFFFFFCFCFCF6F6F6F0F0F0 EEEEEEFBFBFBFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F3F3F3EDEDEDF5F5F5FEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFAFAFAF4F4F4EDEDEDF3F3F3FBFBFBFFFFFFFDFDFDF9F9F9F5F5F5F2F2F2 EFEFEFEDEDEDEBEBEBEAEAEAEBEBEBEEEEEEF2F3F2F6F6F6F9F9F9FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFCFCFCF6F6F6F0F0F0ECECECEAEAEAEBEBEBEFEFEFF4F4F4FAFAFAFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5FBF5BDE5BCBFE5BEE8F5E8FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFBFEFBF4FDF4D8E3D8 A9B6A96F9E6F42AD416EC56DB0E0AEE9F6E9FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFEFBD4EFD4AEE0ADD5EFD5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFDE8F7EFBCE5BF55 DEC058E0D58AF0EDCBFDFAF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF3EEF3B2D0B155B254 58BB57E3F4E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F8F087CC8644B143A5D9A4FFFFFFFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7F0F0F0ECECECEBEBEBEBEBEBEBEBEBEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAF0F0F0FBFBFBFFFFFFFEFEFEF8F8F8F2F2F2EFEFEF ECECECEBEBEBEAEAEAEBEBEBEDEDEDF1F1F1F6F6F6FBFBFBFFFFFFFFFFFFFFFFFFFEFEFEFBFBFB F5F5F5EFEFEFF0F0F0FCFCFCFFFFFFFEFEFEFAFAFAF3F3F3EEEEEEF3F3F3FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFAFAFAF4F4F4EFEFEFF0F0F0FAFAFAFEFEFEFDFDFDF5F5F5EFEFEFECECEC EBEBEBEBEBEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEBEBF3F3F3FDFDFDFFFFFF FFFFFFFFFFFFFEFEFEFCFCFCF6F6F6F0F0F0ECECECEAEAEAEBEBEBEEEEEEF2F2F2F9F9F9FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFCEAFEEAD2F3D2C1E4C1D0E7D0 F9FCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFBF5FCF5F1FAF1F2FBF2FDFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFFFAE8FCE8D2F5D2BCE3BCD6EDD6F9FCF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFCFDFBF7FCFAF4FCFCF7FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE2E0FFDCCB FFE0C1FFF1E1FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFDFCD7E8D768AA686BB66B97D897D9F3D9FBFEFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFCF2FAF2AEDEAE67C16758BC586BC66B88D3889FDB9F ADD8ADBED8BECCDDCCCCEFCCD7F6D7E7F7E7F0F8F0F5FAF5FCFDFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DD89DED280E2D284 E7D885DBCC77D9CF76D5CD78D8D287ABA466100900A6A066DDD382DCD674D8D370E2DA8C514425 463B16DCD77EDDD580DAD176DDD374ECDC88DFD179DBD074D8CD73D7CD75DAD079DED380D2C979 D8CF82D7CF84ADA55B5F5710DBD287DED47AE2D77BF0E8959F974B787128E5DF91DAD580E8E486 ECE986F3EA88F0E785E2D77BEDE48AF1E88EF9F095EEE58AEDE38AFBF198F8EE97F3E994F2E796 FCF1A2F6EA9FEFE391EBE086EEE389F2E68CEDE288EEE389ECE187FDF298E9DE84E8DD83C6BB61 F1E58CF5EC8FF0E78AE6DD7FE7DE82EDE48AE6DC83E9DF88D9CF78C7BD66BDB35DCEC46FF1E791 ECE088EBE087F6EB91F0E58AE8DD83F4E98FEDE288F0E58CE9DE85EBDF88EDE18BE7DC84E4DB7E EDE489E6DD82F1E88DF3E990E8DE85E9DF86EAE089EDE38CECE28BE4DA82E3D983EEE48FE4DA85 E8DE89F3E994F5EB96F6EC97E8DE89EAE08BEEE48FF7ED98F1E793EEE392EADF8FE5DA8BE3D889 EADF90F1E697F3E69BF0E498E7DB90F4E89CEEE297E8DC90E4DC8AE3DB88E9E18EEAE28FEAE290 EBE392E9E091ECE394EBE293F5EC9FF1E89BE5DC8CEAE28FEDE592EDE592F0E895EAE292EBE292 EFE697EDE495E9E092E9E093F1E89AECE192FEF4A4F1E696FCF1A1E3D888EFE494F1E696FBF0A0 F2E797EDE292F5EA9AEFE494F5E899F1E594EFE391EDE38EEFE58FF0E690F4ED98F0E894F1E997 F6EF9FF3EC9DEEE89DE9E1A1FAF1B2F5F0B2A6A1615952201711003C3517868044D2CB94F3ECB8 F6EFB9FBF2ADF7F1A0F3EE9FEBE297E3DC95EAE39FF7F0B2F7F5BCB7B177221E005A5832DEDCA3 F5F2A9ECE797F1EA9AE8E08FEDE493F4E999EDE292ECE292FBF2A3C9C274E6E194F3EFA5D5D18B EEEC98F1EF9CDED998959148DEDC8BFFFBB2AFA874BBB57FF8F4B3E4DCAD2F2B10606138FFFFD4 948F5D302B08E4DF9FE6E198D9D386E5E29AF4EFB9AFA7842F27150A03002F2B1A8B8A5FE7E6AC E8E9A1DBDC88D4D47AC2BF67C2BD6BCBC37BDAD090F4EBACEDEBA4E8E89DE2DE93D6D185DCD588 F1E99DF1E99EEDE69DE9E49CE4E19CD5D38FD1CD86E2DD8FECE798EFEA9CEAE597E8E394E6E092 DDD78AD0CA7EE7E196F0EBA0E5DE95DBD696E1DCA0E2DE9E857E4D151200393510AFAD6CEEEDB5 9C9674080000B0AC7BD9DA88E2DF8CECE899EEE9A0736D2AE4E1A5FBF6C050491F140E002A250C 7C7756A29E73CCC895F3EAAFEFEBA4E7E697ECED98F6F9A2E3E894E6E99BE7E89CE3E196EDE798 F4EC9AEAE790E8EA90E7EA8EE9EA8AEEED8AE9E681F4F18AF9F591F1EC8DF6F198EBE794F3EEA1 E1D9A1C9C0926254381D1100685F35BCB574EBE8A4F4F1AAE0DF94D4D386DEDD8ED8D787DED689 EBE496F2ED9EEEE89ACAC577BEBB6BE9E596EEEA9BEEED9BDCDB8AD2D17FDEDB8FF5EEA8ECE4A1 ECE6A1E6E09BDDD793EAE6A1EEEBA5F1EFAAEFEDA8E1E19BDBD994E9E5A3FBF6B5F3EEAFEFEAAC EBE9ABC7C587E5E2A3EBE7A7F1E9A7FCF5B4F9EBA6F8ECA5E8E4A1E9E8A8E3E2A1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF5FBF5BBE5BAB7DFB7DAE6DAF6F3F6FEFDFEFFFFFFFFFFFFFFFFFFFCFFFCE7FDE79FDC9E 6CBC6B65AC6571B4708DD58CB8E7B7E1F4E1F7FCF7FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFCC6ECC290DA89C6ECC2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF7FDF9E2 F5E4A6E8CD6FDFBD52EED08EFEECD8FFFAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E0E1A4EAEBC1FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2ECF2B0CEB0 53B15258BA57E5F4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FAF289CF8842AE419ACC9AF5F0F5 FCFBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFAFFFADCF6DCB7E5B7 C0E7C0F7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FCF7DBF1DBC5EAC5CBF0CBE3F7E3FBFEFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE2E3A8E8E9BAF9FAEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F4FFE2D0 FFE5C8FFF0CFFFFAEAFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFEFDE1F1E18FCB8F7AC27A87C887CEE9CEFAFDFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAF7EAA2DAA277C47764B96492CF92BEE6BED1EED1 D5EAD5D2DED2E4E8E4F6F5F6F6FEF6FBFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D582E4D787 E3D384E0D17FE6D782DACF77DBD27FDCD68BB0A96B1D1602958F56E1D786E2DC7ACFCA67E6DE90 685B3C3C310DD9D37AC7BF6ADED479E0D677DCCC78D4C56EDBD076DDD278D7CD75D4CA73DCD17E D7CF7ED6CD7ED8D182D9D284645C12D3CA7DE5DC81DCD275F8F09BAEA559696218DFDA8ADFDB85 ECE88AEBE885F3EA87F8EE8CEFE488EDE38BF1E790EFE68CEAE186E6DC82F5EC92F9EE97F4EA95 EDE291F3E899F5E99FEFE492F1E88EEFE68BF3EA8FE1D77CE7DE84FAF196EEE58AEDE388DAD176 DAD176EEE489F0E68BEDE489E9E084E5DC81E4DB80E2D97ED1C76ECAC067D7CD74EBE188EBE18B E7DD86DFD57CEEE48BEFE58CEAE087EDE38AF1E78EE1D77EEBE188F2E88FEDE389F2E88FEBE287 E5DC7FEEE58AF1E88DF1E88DEFE58CEAE087F3E990F4EA93EAE089E8DE87E8DE87ECE28DEDE38E EEE48FEDE38EEBE18CF3E994F2E893F2E893F0E691EAE08BE9DF8AEAE08AEFE492F1E695EBE090 E8DD8DEEE393F2E797EADF90E9DE91E3D78BF3E79CEFE399E9DD91EDE693ECE491E7DF8CE1D986 E5DD8CECE494F1E899E9E091DBD284ECE396F3EA9DE5DD8DE3DB88DFD784E3DB88F3EB98F3EB9A EBE293E3DA8BE3DA8BEFE698F3EA9DF1E89AEBE192F5EB9BEEE393E9DE8EE9DE8EE8DD8DF8ED9D F5EA9AF8ED9DF8ED9DF6EB9BFBF0A0FBEF9FF5EA98F2E795FAF09AFCF49DF4ED95F3EB97F3EC9A EDE696F2EB9EF6EFA4EBE3A2FBF7C8EBE3B269612F2019002821008A844CE0DA9CFBF6B7F2ECAA E7E09EE6DE9AF6EC9FF4EA95ECE38FEEE695F0E99CF2EAA1F2EAA7EEE9AAE7E1A7CFCA922F2A09 585329F2EDAAF2EEA3EBE498F3EA9CEDE393F2E797F2E797F4EA9BF5EB9CD1CA7CEBE799DCD88E BEBB72E0DF87EEEC98DDD7969F9B52DEDB8AF2EEA69F9862918A51F7F2AFE3DCA75552325B5E2A E8E6B4ECE7BC3B340E5F572FE8E1A1ECE69BDFDC8DE8E59BEDEAABC8C691514D261E1C01080701 62602CBFBF81DADA96D1CF88D2CF85C8C37BD9D48DD5CD88DFD791E7E59AE6E598DAD98AD2CF7E E3DC8CDDD686E1D98AFBF7A9F1EEA0C3C177C5C57BC7C579E3E08AF2ED9AEDE895F1EC9AE5E08E E4DF8ED3CE7DE4DE90E8E294E5DF92E9E397E3DCA4E3DCAE635D36060000463F18A7A16DEFEBA6 CAC788B2AA800C01018A854CD5D378EDE589FBEF98F5EA97706316E6D993FDF0B1D6C88FA39463 706338392C032A1F0026140EB2935CDFC287EACE8BE3C87EF0D689E1C77DEDD18BDABB7ABA9756 DBB873F2CE84E7C670D6B857D9BA5BD5B257DEB65FE7BD68E9BE69E7BC67F2C971F9D177EAC569 EBC86CF5D586E1C883FFEFAEB1A76B2E2B010E1000646B33DCE1A7E1E2A2E4DD95F9F0A3F5E898 EFE593F2E999F4EA9AF5ED9CEEE796E5DE8DEDE695F4ED9CEDE795E2DD8BEBE694F8F2A5F0E8A0 E3D994E6DE97E8E098DED591E2DC95EAE69EEEEAA4E4E099E8E69CBFBB75D1CE87D5D28EDDDA98 D3D392C2C482C0C380E0E2A0F2F3B1F1EFABF1EDA8FDF7B0F7F2AAE6E3A0BEBD7DD9D897FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7FCF7CFEDCEC0E2C0CBDFCBE4EBE4FBFCFBFBFFFBF5FEF5EDF9EDD0F1CFA6E4A6 67C56652B75172C171A3D9A3D5F6D5EDFDEDFCFEFCFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFAE9F7E8BCEAB799E191CBF0C7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFEF8FFFEE7F4DFA1E8BE5CEDBE65F7D49EFDEAD3FFFBF7FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF9F7E9E6E1A7EEEBC3FCFCF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFBE8ECE8 A9D0A85BB65A66BF65E7F5E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FAF289CF883DAC3C89C587 DEE6DEF7FAF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1F5E1 B1E5B1B8E7B8F6FCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FBF5CEEACEB7E3B7DAF8DAEFFEEFFDFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF9F0EAE3B0EEE5BDFBF2E9FFFBFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8F0 F8E2BDFAEAC4FEFADFFFFFF4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDE6F4E6A1D7A178C4786EC06EC1E4C1F9FDF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDEDF9EDC5E9C569C3696CBF6C93CB93CBE3CBEEF4EE F8FBF8F3F4F3E7E8E7F1F2F1FEFEFEFEFFFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD07C DBCE7FE0D082E1D282E4D582D8CD76D6CE7BE4DD95CCC5892E2707817A42D9CF7EDDD776D7D370 DFD8896D604141360DDCD77EC6BE68CDC469D3C96ADECD79DBCC76D9CE74D6CB71D2C870D2C871 D4CA75D2CA76D5CD7CDBD484D7D0815D5508CBC375DDD479E6DC7FF3EB97CDC4778F883DDAD585 EDE993F5F192F4F08DF3EB88F4EA88F6EB8FF4EA94EDE38FECE28BF0E68CE7DE83EDE489EEE48A ECE28AE6DC88ECE191EEE296E8DD8AF4EA90F7EE94E6DD83E8DF85E9DF85EBE287F2E98EE9DF85 DCD378F0E68CEBE287E6DD82E7DE83E9E085EAE186E5DC81E2D97ECBC168D1C76EE5DB82F0E68D E9E086E5DB82E7DE85E9DF86E6DC83EAE087F1E790EFE58EE5DB84E5DB82E9DF86E6DD82E8DF84 DDD477DCD376ECE388F2E98EEEE58AE7DD84E3D980EFE58CF2E891ECE28BEAE089E7DD86ECE28D EDE38EEFE590EBE18CE8DE89F4EA95F7ED98F7ED98F3E994ECE28DE9DF8AE9DF8AF3E994F2E893 E9DE8BE4D986EADF8EEEE392EEE394EADE91EADE91F7EAA0EEE298EDE194EAE290ECE491E9E18E E5DD8AEBE392EFE797EDE495ECE394E6DD8FECE396ECE396E4DB8BE4DC89E3DB88E2DA87EAE28F ECE494E6DE8EE5DC8DECE394F2E99BEFE699F1E89AEEE394EDE292EADF8FECE191F5EA9AF8ED9D FAEF9FF4E999F1E696ECE191EDE292FBF0A0F3E899F2E695EBE18CEDE48FF2EB93F2EA95F5EE9A EEE797E8E096F3EAA5E9E19EF8F3BACAC49B473E1B231B006D6633D3CC94F8F2B4F9F4B2FAF3AB E5DF93E1DB8BE5DF8DF1E795F5E996F2E894F3EA99F6ED9EF8F0A3F6EDA4E1D995F9F2B3FCF5BB BFB87F251D06716C34E3DE99EFE9A2E6DE95EAE092F9EE9EEBE190F2EA9AE6DF8FCAC677E2E092 E8E49AC2BE74E4E38BEBE995D0CB8B99954CE1DE8CFCF9AEBBB47C9C9659FFFFB6F0E9B27A7845 2A2E00E0DFAAFBF6C9D5CDA63D3408938B54E9E29CF6F3A2E6E68FE5E58FECEE9AECEDA58E9051 3F3D081E1B00191600817C54C1BA90EAE4B4E6E2A9ECE8A5E8E597E2DF8EDDDE93C8C77BCBC97A D3D081E8E493EEE897DDD787E9E695DAD788B4B466C0C175C5C575DAD780ECE992E2DE8BDCD786 E2DE8DE8E394E0DA8CECE69BDED88CEAE599FEFCB2CCC590352D0F0C0500675E38B0A37BC4BA84 E4DD94FFFCB9A296671103017A7234E9E485E4D475DFCA6FC8B45D695605D7C276D6C27C8F7A3B 9E884DA8945BD6C18CC0AA75331D081B0400301600C2A766C1A45DAC8C44DAB76FDBB671C9A263 B98F4FD9B16EF2CB82E8BD6AD8AA4FE4B15EE3AB5FF4BA74FBBE7EEFB174EDAF6EF8BA73F8C171 E9B55EE3B458E8BA5DCEA74EB79748BAA665C9C28B8989571419081011007B7344E0CF8FD1B76D DDC070DDC272EACF80F2D889F7DD8DF3DB8AEBD382FAE294FFF4A5FFF4A6FBE798F5E094F9E79C FAEEA6EDE199ECE098EFE29AEFE49CF2E79FEFE69DEBE299D5CE84E6DF95D9D388D2CD83C5C177 D6D58BD9DA93BBBE77B4B973DBE19DEAEFACECEEAAE7E9A3F4F4ACFFFDB5EEEBA8CDCA8ADDDB99 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF7F7F7F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F7F7F7F9F9F9FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFEFCF1FAF1D7EED7BEE2BECFE9CFF4FCF4ECFEECD7F7D7BEE8BD89D188 5BBE5965C2648FD28FBEE4BDE3F4E3F5FEF5FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBF7EBC9EBC8B8E9B5C4F3C1E4FAE3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFCFCEDD1F6D297ECBC5FEBBD60F6D49CFFECD9FFFBF7FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF7E9F0E1ADF5EBC7FDFCF6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCF9 D5ECD59BD29A6ABE687FC77EEAF6EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FAF28CCF8B3BAD3A 77C476C7E5C6F2F9F2FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFAFAFAF6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6 F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F7F7F7FAFAFAFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E3F6E3B2E6B2B7E8B7F2FBF2FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F9F0C3E8C3AFE2AFE8F9E8F9FFF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF3F8E4C1F9DFC2FDE4DBFFF2F2 FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FAF8ECE9E1ADEFEAC1FCFBEDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDE8F2E8A8CDA86BBC6B4FBC4FB1E3B1F7FCF7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FCF4C9ECC994D8945CBF5C89CD89CDE5CDE3E8E3 EDEDEDFAF8FAFDFDFDF8F7F8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DFD382DBCE7FE2D285E5D686E5D683E3D882D4CC79D8D189CDC78B302A0A625C25D7CD7CD9D371 D8D471DAD385817354362A00C6C068DCD47FDED57ADBD172D6C671D9CB74D7CC72CFC46BCDC36C CFC56ECFC570CCC470CEC673DBD484DAD383706919DBD383D4CB70EFE589EBE38FD0C77B7E772E C7C172F5F09BF0EC8EF4F08DF2E987EDE483F7EC92F8ED9CE8DE8BE8DE88F2E88EE6DD7FE9E080 F0E788EEE588E9E086E9DE89EADF8EE7DD88DED47BE8DE86E9DF86EBE188F2E78FE7DD84F5EA91 DFD57CE2D77FF9EF96E6DC84E0D77CE2D97EE7DE83EBE287E9E085E1D87DDFD67BDFD67BE3DA7F E5DC81E4DB80E6DD83E8DE85DFD57CDBD178E6DB85EBE18BE6DC86EBE18BE7DD85EBE187E8DF82 EAE183E0D779E2D97CECE388ECE388E7DE83E8DE85ECE289F3E98FEAE08AE9DF88EEE48DEEE48D E9DF8AE5DB86E9DF8AE5DB86E0D681EBE18CEBE18CEBE18CEAE08BE9DF8AE9DF8AEBE18BF7ED95 F6EC93EBE189E6DC84EBE18CEEE391F3E897E7DC8DECE192F4E99BE7DA8FF0E596ECE593EFE794 EDE592E8E08DE9E190EBE393EDE496F4EB9CF8EFA1F0E79AECE396EEE696EFE795F1E996EAE28F E5DD8AE5DE8DDDD585E1D889ECE394EDE496E5DC8FEBE395F9EFA0EDE291E8DD8DEEE393EEE393 F3E898F5EA9AF4E999F4E999F1E696EDE292EEE393FAEF9FFBF09DF1E792EBE48CF1E993F4EC98 F4EE9DF6EFA4F7F0ABEAE2A4FDF3BACEC7942C2309150D00A29B67E8E0AAF8EFB4E9E19EF0E89F F3EC9DF0E995F0EA92EBE389EAE08CF2E796F6EB9BF3EA9AF0E898F1E899EDE498F1E9A0DED590 D8CF8EFCF3B4C4BB7A130D00544F26E8E2A4FAF1AEF7EEA6E0D78AE9E190FAF2A1E2DC8BCCC779 D1CE81F1EFA4CECA82E3E18CE3E18ECAC5869F9B52EDEA99FAF8ADC7C286837E3EE9E598EBE6A6 9693580C0F00B5B47BEFEBB8F7F1C2C2BB8A4A410D978F50F3F0A8ECEC96DCDE7EE8EE87DCE07C FBFCA3BFBE79534F24160F000A0100382E25776F5AC3BE96F2EFB2F9FAA8F8FAA8E0E19AC7C782 D6D48DE1DE96E8E298E6E193E7E195E9E598DCDA8DC4C477CDCE82D5D587D2D07EEEEC9CEFEC9F D8D589DDD991DCD893D3CF8AE2DE99F4F0ACDEDA917B7639221C093128119D9662AFA377AFA174 C1B47AC1B66ABFB26D59491B120200695E22C6BE62D9C26AE1C670B59A4891772BF0E197EBD18B A58A49C7AD6FE0CE93E3C890EDD29BE0D8A2B3B47EA5A66CE0DB99F8EAA2FDEDA1FFEFA5FFECA7 FFF1B0FFF6B3FFEDA5F9E296EECD7EDBAD62D5A763CE975AD39D68DCA272D89F71D19564CD9158 D09E5CE0B56BF3CD7BFFDA79FFD676FFE691FAE6A1FFECB3FFFFD2D7D5AA93815B2C140087692A EDCE8CE1B76CE7BC6EEEC87BF2C579E7B96CDAAC60CFA257E2B66BEDC277EDC87EECC67BEEC67D EDCF86EFDD93FCEBA1FFF4AAFFEEA4FBECA1F9ECA2F7E79CF5E69BDFD185F0E196F5E79BE8DC8D D7CE7EDED786E9E597D3D287CACC83C9CD86D0D58FDBDF9ADEE19AE1E49CEEF0A9FDF9B5F3EEAB F3EFA9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5DDDDDDABABAB9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9D9D9DA2A2A2BDBDBDDCDCDCF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4F5E4B7E4B6C1EAC0E6FBE6C8F0C89CDD9C74C873 5FBA5E60B65E97D196D1EDD1F6FCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3F4E3B6E3B5B9E8B9E8FDE8F8FFF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF8F1FEE9D2F2CC87EABA59EEC06BF6D69FFEF9E6FFFFFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FDF8E1F9E1B3FBEBCDFEFCF7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7FCF7CBECCB94D49372C2718CCB8BECF7EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FAF398D397 4AB34976C775BBE5BAF0F9F0FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEDEDEDC4C4C49F9F9F9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9F9F9F 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9D9D9DA6A6A6C2C2C2E1E1E1F9F9F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE9F9E9C2EEC2B8EBB8D6F2D6EEFAEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FAF5DEEFDEC2E4C2BCE2BCF2F9F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8FFEEDDFBE3CBF5DEC5 F8EDDFFEFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEF8F8EAE0E1A4E9EABFFBFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F5F1C6D8C676BE7640B340A1DEA1 EEFCEEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFFFEE2F8E295D8955CC15C77CE77ACD9ACDFE4DF E9E6E9EDEDEDF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBCF7FD7CA7CD7C77ADACA7ADBCC79D4C973DCD282D8D289CBC488342D0B4D4713DED483 D7D16FCAC562DCD486A6997A2F2300BAB55DE1D984D1C86CD8CF6FD9C974DBCC75D7CC73D3C86F CEC36CCEC46DD4CA73D3CB75C6BE69CCC672D1CA79766F1EC3BC6AEAE186C0B65BC3BB68E5DC91 787129B4AE62EEE995E1DC80EAE685F2E98AEEE585F3E88FFCF1A3F2E697EEE48FF2E98EEAE281 EFE784E7DF7CE9E17FE7DD7FE1D87CE0D67FE5DC85D5CE75DCD47FE8E089E1DA81EBE38DE8E08A EBE48BD7CF79E3DB85E8E088E1D983E6DC83E3DA7FE4DB80E9E085E8DF84E1D87DEAE184E0D77A D9D073DED579E6DD80E4DB80E4DD83E2DB82E3DC84E6DE89E6DD8AE6DE89E2DA84EAE389EDE68B E1DB7CE6E07EE3DC7BECE285EDE489E8DF84E4DB80E9DF86EDE38AEEE48BE5DB85E9DF88EDE38C ECE28BE7DD87E4DA85EAE08BEAE08BE2D883E7DD88E2D883E3D984E7DD88E9DF8AEDE38EF1E791 EFE68BF3EA8EEFE68BECE388F0E68DEEE48DF5EB97E7DC8AE9DE8EEFE494E3D88AF2E798F4EC9A F5ED9AF2EA97EEE693EBE392EAE191E8DF90EAE192F0E799E6DD90EBE295F7EF9FF3EB98F1E996 F1E996EDE592E7DF8EE0D888DED586E4DB8CE9E093EAE194EFE698F2E798E5DA8AE6DB8BF1E696 EDE292F0E595EEE393E9DE8EEBE090F3E898EEE393DED383ECE491EEE692ECE48FF0E991F0EA93 EAE490EAE395EEE7A1E9E1A3FFFBC6BCB483241B00332A04ABA268F6EEB0E2DA9AE8E09BFEF7AE F6ED9FEBE38FE8DE88EFE58CF0E68CEDE393F2E8A0F7EEA3F5EC9FEFE697EFE797ECE191F7EC9C E0D488F5E9A0ECE099FFF9B7C6BF8B0D0600756E41FBF1B4F4EAA6EBE297E7DE91FEF6A6EEE997 E0DA8CCCC97CEFEDA2D5D089D0CE7AD2D07FC8C285A19D55EBE899F4F0A5D3CD91726E28CBC975 D9D58DA9A6700A0B027D7B46FFFCC0DFDC9AF5F0AFCAC286271E006A6530F5F1ABF5F5A2D7D97C FAFA97E1E183E7E499F6F1BC968E6F2920110E06000B0501120E05434511929655B7BC78F2F0B9 E3E0ACDDDAA3E0DB9FECE5A6DED694E1D996E4DE9ADAD792C8C982CECF8BE9E8A1EBE79FEEE9A4 F2EDACE6E0A2E6DFA8EAE4ACF3ECB5CFC8916F682C150E051912004C45148E87519F96588F824B B7A871BBAB6BE0D083C1B06CC9B38B1D0702705F32EADB8FFEF2AAFFFEB7C5AB66C6AC67FFFBBA DEC184C4A76BF0D59BF1D79FE7CB99E7CB9AC8AC80C9AD8C9F7D539E7242B67B45C07941B3642E C16D3BC57041BA6B3A954C14813D057F3A03742A008538059443138B36078A3205842E02903D0E 9848187D34037833029252158D49079C5706B47324D49450E1A569E2AB74E9B583FFD9A5C3935D 401100C09353FFDB96FFEE9DFFFAA6FFF3A0FFE996FEEA98FDEE9DFDE594FEDD8CEECE7EDCBB6C CCAC5CC3A659CAAE64D2B76DD5BC71D7BE73E8CE83F9E296F5DF93F8E296F1DB8FFFEA9EFEEC9E F5E28FFDE993F4E08EFAEA9CF9EFA1E8E298C8C57EC0BE79CACA84DDDC99E8E9A5F4F4AEF0E9A5 F6EEAAEBE49CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE9E9E9B4B4B44646462A2A2A282828292929292929 292929292929292929292929292929292929292929282828272727272727282828292929292929 292929292929292929292929292929292929282828272727262626262626272727282828292929 292929292929292929292929292929292929292929282828262626272727292929292929292929 292929292929292929292929292929292929272727262626262626272727282828292929292929 292929292929292929292929282828272727262626262626272727282828292929292929292929 292929292929292929292929292929282828272727272727282828292929292929292929292929 2929292929292929292929292727273131316C6C6CAFAFAFEAEAEAFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F5E5BCE6BCB8E9B7C0EFC08FD48E59B758 3CAD3A74BE73BFD6BFE7EEE7F6FBF6FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFDFEFDE0F3E0BBE6BBC6EAC5F5FCF5FEFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1 FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF9F4FEE9D3F6D197E8BC5AE6C15BF9EFBDFEFCE8 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFDE9FFF6D4FEE3BFFEECD7FFFCF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7FCF7C8EAC892D29173C37290CD8FEDF7EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FBF6 AAD9AA67BD6681CC80B7E4B5EFF9EFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8D8D8D87D7D7D2A2A2A 282828292929292929292929292929292929292929292929292929282828272727262626262626 272727282828292929292929292929292929292929292929292929292929282828262626272727 292929292929292929292929292929292929292929292929292929272727262626262626272727 282828292929292929292929292929292929292929292929292929282828272727272727282828 292929292929292929292929292929292929292929292929282828262626262626262626282828 292929292929292929292929292929292929292929282828262626262626262626282828292929 2929292929292929292929292929292929292525253A3A3A777777BBBBBBF1F1F1FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF5FEF5DFFBDFC0F0C0AEE3AED1EFD1F8FDF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF8FBF8DDEEDDC5E0C5CDDECDE0E5E0F8F9F8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFCF3F0D4 E5E2ADEEEDCBFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFCF9F8E9E4E1A7ECEAC1FBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F5F295CA9546A846 91D591DCFADCF8FFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF1FFF1BEEEBE62C16238AD38ADE5ADC6DEC6 C9CCC9E5E4E5FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE5D988E2D587E1D184E3D385E1D282E2D782DED484BFB970B5AF7437300A403A0F D8CD7BD3CD6BC8C360DFD789C5B7982A1E00ACA752E0D882C6BD62DBD172D6C571DBCC77DBD077 D8CD74D3C971D2C871D7CD76D7CE79C8C06BCFC975DDD6848E8836BFB864EFE68BC1B65DCDC474 EEE49C787029A19B4FEAE593E4DF85E8E484F1E889F2E88BF2E68EF6EA9EF1E598EBE08EEBE287 E7DF7DF1E983E7DF79EDE57FF0E886EBE283EBE286EAE18AE3DB87ECE48FEBE38FEAE28DEFE792 F0E893E6DE8ADED682E4DC87E1D984E1D984E7DE85E5DC80E4DB80EAE186EAE186E1D87DDCD376 DAD174DBD275E7DE80ECE385E1D87ADED77CE2DB82E8E188E2DA86DED682E3DB88E5DD87EEE78F EEE78BDED877E5E07CE4DE7CE2D97BE8DF84ECE388E9E085E5DB82E0D67DE2D87FE6DC85F0E68F EAE089DFD57DEAE08AEAE08BEDE38EF2E893EEE48FEBE18CEDE38EEFE590EFE590EDE38EEEE48F F3E893E4DB7EECE383ECE385EBE285EEE58AECE288F1E790ECE18DEAE08DF0E595E8DD8DF0E595 F0E995F1E996F3EB98F4ED99F5ED9CF3EB9BEDE495EDE495EDE496E8DF93F0E79AF6ED9DEBE390 EAE28FEFE794ECE491E9E190EBE293E7DE8FE8DF90F2E99CF4EB9EF6ED9FF4E99AEFE494ECE191 EFE494EEE393ECE191FAEF9FF0E595E8DD8DEFE494F4E999EADF8FE0D885E6DF8AEAE28DF2EB92 F3EC96EBE592E8E095E8DF9DF9F1BABFB989261C003A3317B1AA60FFF8ADEEE79CF4ECA0F3EB9E EFE596E9DE8EEFE391F3E692F2E591F0E48EF0E59BF1E9A5F7EDA6F8EFA6F8EFA2F8F09EFEF3A0 E7DC89FAEF9CF6E898F4E697F9E9A3FCF1C4918964090100928853FBF0B0F7EFA8E7DE90F3EB9B F6F19FF0EE9DD7D586EAE89EDFDB96CFCC79D9D687D7D194A7A35BE6E393E9E699E9E3A5848037 C7C66DCDCA80B7B38516140C5D5A29EDECA6F0F09CBCB967F3EDA9DED7A25249206D6737DFDA9F ECEBA2CFCA7CF6F0A2EFE9A1EEE8A9F3EEB9CCC89D736F4C1413061D1E13191B16000000232508 4D4A2B7F7A58B5B185D9D2A3EAE3B0D7CE97EAE3A8ECE8ABEBE7A8E2E1A3E0DFA1F7F6B8EDE8AB ECE6AFE2DBA6CEC696B3AB7F978E66564D2C140B001F160B463E1E847C4CA19B60B1AB62A59D50 D0C37EDDCC8CE9D58FB9A556B8A261D9BE9D1802026D5739EBD99CE2CB95DDC08B8768349C7D49 B1935E5F41137153217155243F25002D110062461C8469424F3318512C138752269D5325983D0F 932C01952803962C0597350BA44B1AB76730CD7D4CD17E54C67141BE662FB05618B65B18C86F2A AF5816964409A75C25B97341965122A65F23B36623994408933801A14100B35411A6490CD07C3E C2793D9E632B643309B084459C7120B98D38C29642C79C49DFB463F0C979F4D485F4D989FAE596 FFF1A4FFF1A4FFEFA1FFF0A3FFE99EF4DF91E4CB7DDEC376E2C678D6BA6AD9BE70D9BE70E6CC7B E5C97BF5D47FFCEC93FDE38EFFF19DFEED9FE8D88CF6EEA6E8E09BD8D28EE1DD9BF4F0AEFAF5B3 F1EAA6F9F1AAE9E098FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF2F2F2D2D2D28A8A8A787878777777777777 7777777777777777777777777777777777777777777878787676766C6C6C696969717171787878 7777777777777777777777777777777777777878787575756B6B6B6363636464646D6D6D767676 7878787777777777777777777777777777777777777878787070706868686E6E6E767676787878 7777777777777777777777777777777878787676766E6E6E656565646464686868747474777777 7777777777777777777777777878787676766C6C6C6464646363636B6B6B757575787878777777 7777777777777777777777777777777878787171716868686C6C6C767676787878777777777777 7777777777777777777777777777777676767C7C7C9D9D9DC4C4C4EFEFEFFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FBF4DAF1D9A9DFA873CA7261BE60 63BA638ACD89BADFBAE9EEE9FCF9FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDF9DCF1DCC9EDC9C6EFC6DBF6DBFAFEFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEDECC7E1E1A4 F5F5E1FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF8F3F8E7C8E7D085DEC35BEACD71 F5E5B6FEFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8FFF3DDFFEBCBFFEEDBFFF6EDFFFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4FBF4B1DEB07FC97E80CA7FAADBA9F1F9F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F6FBF6AEDBAE68BE6672C96C9FDF99EBF8EAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBE9E9E9AFAFAF 7878787777777777777777777777777777777777777777777777777777777575756A6A6A646464 6464646C6C6C767676787878777777777777777777777777777777787878777777707070676767 6E6E6E7777777878787777777777777777777777777777777878787777776E6E6E656565636363 6969697373737878787777777777777777777777777777777777777878787373736A6A6A696969 757575777777777777777777777777777777777777787878777777737373676767646464666666 717171777777787878777777777777777777777777787878707070666666626262686868727272 787878777777777777777777777777777777777777757575808080A3A3A3CCCCCCF4F4F4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFFFCF1FEF1DBF1DBC0E0C0BFE4BFCDEFCDF2FBF2FDFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFFFFFFF2F9F2DCEEDCC5E2C5BFDFBFD9E8D9F4F3F4 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2D6E3E3A8EDECC7FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFDFFFEF2FCF8DDF2E2B2F6EACBFDFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F6F7DEDEDE91C191 50B0507FD07FC1EDC1EDFBEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDF9CDEECD87D2875BB95B5CB45CC0E0C0 DBE5DBE1E2E1F2F2F2FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDBD07ED6CA7ADFCF7DE3D482D9CA77D9CC7ADCD381CCC579D8D293524C1D 362E0AC1B767CBC564DAD673DED888CEC19D291D00A0994DDAD380C3BB60ECE283E3D47EE7D881 DFD279D7CB72D8CD76D9CE77D2C871CDC36DC7C06AD5CF7ADFD984918A38ADA655E4DB80E0D67E E5DC8DF6EEA69088447B742EEBE693F4EF97EFE98FE8E081EDE286EEE18CFAEFA3F0E498ECE18E F1E78EECE383F5EE89EAE27CF1EA85F6EE8AEDE583ECE385F4EB91EEE791F2E994FBF49EC8C16B BEB662EFE793EDE592ECE491E5DD8AEFE794E2DA86E2D87FE2D97EE7DE83F1E78CEEE58AE0D77C DDD478E1D97DDFD67AE0D779E7DF80E4DB7EE0D980DED780E5DE87E3DA87DDD581E1D985E1D983 DFD77FDED77BDAD473E8E27FE7E180DDD579DFD57AE4DC81ECE489ECE289E7DE85E6DE85E6DC84 EBE28BE4DB85E2D882F0E591E6DD89E0D683E9DF8BE9E18BE6DC87ECE28DEDE58EEBE28CE8DE88 E6DD87EAE088E8DF82ECE483EBE282E9E083EEE588EFE68CE0D67FEDE38EEBE18DF2E796E8DD8D E4D989E7DE8BE7DE8AE9E18DF0E793F5EB99F4EB9AF4EB9BF8EE9EF5EC9DF2E99AF1E799EFE797 F1E997F2EA98ECE492DDD582E0D887E8E08FE7DE8FEDE495F1E89BEDE497ECE396EDE293F1E696 E9DE8EE6DB8BF2E797F4E898FAEF9FFFF4A3F7EC9CF2E797F4E999EDE292E8DE8DF3E996ECE590 E6E087E9E38DECE697F4EFA9FFFFC5C2B988251C01685F38E3DCA3E6E18EE4DE89EFE894E6DE8A EAE08EEEE290E9DD8BF6E899F5E798EADC8CEDDD8FF1E69FECE3A3E8E09CECE49BF0E79BEFE595 F3E896E8DC88FFF39EF9EC98F9EA97ECDE92F5EAB8FBF6CD756D4A0C03008A804CFBF4B3F3EAA1 E5DF8FF2ED9AF4F09EDEDA89E2DF92D9D48FD4CF81ECE99DE9E2A7B2AC66ECE99AEAE899F7F2B0 949145CDCB71D1CE81D3CEA44A462E23200BD7D78BF0F094C7C76ADBD68AECE7B0F2E9C0AAA37C 69643874713DD8D199FDF3B9EDE4A5E1DB96EDEAA0F1EEA7FAF8B7B7B77FCDCEA4BEBFA5959689 979689534C3431270922180023190540362050482B7C74418A8551A09C67A19F6A7C7D4980804B 77733F676333332D1C1D170A150D001A110030260F6B6048A99E78C2B691CDC299E0D79AF8EE9D EADD87F9E698F1DA91C8AE64816819A98E507D5E411A010152351F7D653675592B846438715127 9D7B51A18257957751B19567D9BE90C4AA804225111800005F45234037210F000044250D8B5822 A059228F3E0AAF5224CA6E42D98557E79D69C48547AB6B34C98359BE7944B16A29D18A3BE69C44 F4AC4FC78127A76315D99D59FAC38BA97244CD8E5DE39A66CA763CCF6D2ECD631FBD4F07B04200 AB4708B96323DF9B60C9925C9D692FE6A95FE9B969E8B060D49649CF9548D49D51BB863B9D671D 975F15B67D33D7A25BE5B96EE9C775EECD7EFFE192FFEB9DFFF1A3FFF4A5F7E495F6EA9BF2DE8F EFCF80DBBB6CD9B661DEB860D9B35FF2D483E4C87AE7CF85FAE7A1FDECA8EEDF9DEDE19FFEF5B3 FCF0B0F7EDA9FAF1AAEAE199FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E5E5E5E1E1E1E0E0E0 E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1DEDEDECECECEC9C9C9D6D6D6 E2E2E2E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1DCDCDCCCCCCCC1C1C1C2C2C2CFCFCF DEDEDEE1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1D4D4D4C7C7C7D2D2D2DFDFDF E1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1DFDFDFD2D2D2C3C3C3C2C2C2C8C8C8DBDBDB E0E0E0E1E1E1E0E0E0E0E0E0E0E0E0E1E1E1DEDEDECFCFCFC1C1C1C1C1C1CDCDCDDCDCDCE1E1E1 E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E2E2E2D6D6D6C9C9C9CECECEDEDEDEE1E1E1E0E0E0 E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E6E6E6F8F8F8FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FBF6A5DAA443B141 4FB45185C88AE2F2E3FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDF0F6F1BDE4BCB6E6B5D3F7D3F0FFF0 FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF0ECCC E6E0ABF7F1DBFEFAF5FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FAEEEAE9BCDDCF7A DBB43CE9CD80F9EFD8FEFBF6FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF5FBEAD0FAE2BFFEF9F1FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2FAF29CD39B6CBF6A87CF84BBE6BAF4FBF3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6FBF6B0DDAF65C06060C45888D77FE7F7E5FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD EEEEEEE1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1DDDDDDCBCBCB C2C2C2C2C2C2CFCFCFDEDEDEE1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E0E0E0D6D6D6 C6C6C6D1D1D1E0E0E0E1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E0E0E0D2D2D2C3C3C3 C0C0C0CACACAD9D9D9E2E2E2E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E2E2E2DADADACBCBCB CACACADDDDDDE1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E0E0E0D9D9D9C6C6C6C1C1C1 C4C4C4D6D6D6E0E0E0E1E1E1E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1D4D4D4C5C5C5C0C0C0C8C8C8 D7D7D7E2E2E2E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1E1E1E8E8E8FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F4F5DEE3DEBCE1BCABE5ABDCF4DCEEF9EEF3FAF3 F6FCF6FAFFFAFDFFFDFFFFFFFFFFFFF9FCF9F3F9F3F1FAF1DEEFDEC6E1C6BBDCBBC9E4C9E7F4E7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF4F2D8E7E2ACF0E9C4FDF8F0FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFFFAFCFBE3FAF4CCFEE5C3FFEEDAFFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2CCCCCC 91C09161BE616DCA6DA2DFA2E1F5E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FBF2A4DCA453B75365B76593C293 CBD6CBEAEAEAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD9CF74DED377DED26CDACC69E3D67AE4D687E2D881DED77CE1DB8A 685C313E3208B7AD62DFD979D4D06ED6D37CC9C28C362E05847C44E7DF95DBD37AE0D677D4C66B D5C568E1D172E2D279E2D17AE3D47FD4C970D2C96EC9C267D0CB71F5F09E928C40A09A50E8E186 E0D57FF2E8A0F6EFA19F96574D4511D8D582EFEB9AEBE496EDE688F3EB8EE8DE89F2E894F1E792 F4EA95F4EA91E9DF86E3DA7FEDE489F0E78CF7EE93F2E88EEFE58CF7EE91F3EB89DFD576E8DF81 D4CB6EC8BF65D7CF77D9D17CE9E38FE9E291E7E090D7D07ED5CE75E1DA7FE8E186E4DD83E2DB81 E6DB83E8DE85DED47BD2C76EE1D67DE7DC83F1E48EE6DE8FDCD586DDD685DFD984DBD57EDBD67B D4CF74DED97DE5E084DDD87DE9E489DDD87DE9E489DCD57BDDD87DE6E088E7E088DFD982EEE892 ECE48FE8E18CEBE591E4DC8AE9E090E0D98BDED687E4DC8BE5DF8BEBE48EE6DF88DFD97EE2DD81 EBE587E6E082DFD979EBE285F0E589E9DD81E5DA80EBE088EADE8AE7DB8AEDE092F5E89AF5E69C E7D992D9CB80ECE18BF4E891F6EC95F3E892ECE18CE9DE89EFE48FF5E997F2E795EDE290F0E492 EFE595EFE699F3EA9BEEE696EDE594E9E18EEDE591F0E897EDE594F2E99BFBF2A5ECE399E7DE92 EEE598F2E99AEDE594EBE492F0E893F4EC99F1E994F5ED9AEFE794E5DD8BEADF90ECDA93F6E59A FAF099F7F197E9E592DCD992F9F7C2C2BD92221E003C3615CEC987F5EFA3EBE391EDE592EAE28F E6DE8AEFE796F1E998E3D888E2D787D9CE7EF6EB9BEFE494E8DE93EDE39CF3E9A3F0E69FEDE39C F0E69FF4EAA3FCF0A6FDF1A5F4E99AF0E495F0E897F5ED9AF5EDA4F2EBB55C532E1A1200A0986C F3EEB2E9E699EFEB92E4DE83EBE38DD7CF7EE1DB8FDED68EE6DF9AF6EDB0BDB474DDD78EEEE89D F5EFA58C873CCECB7EF3EFA9EAE7ACA2A06A191802BEBC7AE9E9A2D6D68ACDCB7FD7D78DE2E29E E7E8ABE7E8AF78784347480FAEAF74F4F1B6F4EBB1E6DB9EE6D99CE9DEA0D7D08EC8C683CDD08B C6CF88DDE099EED795E9CB8DEAD094B09B645B4918392E021812000C08000C09000404000D0F01 0004010B100117190145451A6764398E8A5CB6AD7FC8BA8BCCBB88F7E3ADEDD89FFCE5ABE6C88D D1AA6CC69A579A6924784300623000926521825A207450201D0000906E40E2C28BF5DA96E3C183 CFA26FEDBA8DB786579E76406145059C8641A1844893693C9156382F0000160700110100220D02 967C2BB59A47FCD488FEEAADFEC291D28150AC6326AE742A340B00401D00C7A781FFF4C7FFEEB9 FFECAEFFE59FE9B56ABD8A40F4C684FDE3A8D5B984B08F53FDD597F2C889FDD092FACA8BF4C082 D49B5CBD7D419149129C4E18A6552198460CC97831FFB369FDB56BFDCA80FBCD80F4D281F0D380 E1C06EDFB263D19448D2863ECF8331C98827BE7B22B87624D08B3FDB9851D89951FCCF83FEEB9D FEF1A5FFF3A9FFEDA6FFECA2FAE095F4DA8FF9DD93D7BB72C0A25BCAAC66D3B56FE6C983FADE97 FFEEA6FFFBB4FFFFB9FCF6AEEEE89EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F8F8F8 F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F3F3F3F1F1F1 F5F5F5F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F6F6F6F2F2F2EFEFEFEFEFEF F3F3F3F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F6F6F6F4F4F4F8F8F8 FCFCFCFDFDFDFEFEFEFDFDFDFCFCFCFBFBFBFBFBFBF9F9F9F8F8F8F4F4F4F0F0F0EFEFEFF1F1F1 F6F6F6F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F3F3F3EFEFEFEFEFEFF2F2F2F6F6F6 F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F5F5F5F1F1F1F3F3F3F7F7F7F8F8F8 F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F8F8F8FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFAC9E9C8 8DD08F93D0A4B5DCCCF0F8F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F2F3DFE4DFB3DBB2BBE5BAE4F7E3 FDFFFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD FBECE3F8DCCBFDE0C6FFECDAFFFAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF8F8EB EAE8B9D3CB61D8BE4DE6C163F8EBCEFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF2EEE9C2E9E2ADFAF9EE FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2FAF29ED39E64BE616CCA65A0E199EFFAEEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7FCF6B3E5AD68C95E5DC05782CB7FE5F4E5FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBF8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7 F2F2F2EFEFEFEFEFEFF3F3F3F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7 F5F5F5F1F1F1F4F4F4F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F4F4F4 F1F1F1F2F2F2F5F5F5FAFAFAFDFDFDFDFDFDFDFDFDFCFCFCFCFCFCFAFAFAF9F9F9F8F8F8F6F6F6 F2F2F2F2F2F2F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F5F5F5F0F0F0 EFEFEFF0F0F0F5F5F5F7F7F7F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F4F4F4F0F0F0EFEFEF F1F1F1F5F5F5F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F7F7F7F7F7F7F9F9F9 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDF4F8F4DDF7DDC4F3C4AFE7AFB4E2B4 C4E4C4D6F3D6E8FEE8F9FFF9FFFFFFFFFFFFE4F1E4C4E3C4AEE2AEB6DFB6CBDDCBE0E7E0EFF6EF F9FCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCF2E1F9E0BAFBDDB6FFE7CFFFF6EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCF6EEEFC9E7E7AFFAF3DFFFFAF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC F3F3F3BFE3BF85D38561C36185D085D5EFD5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFAE1FCE180D18033A7337ABB7A CAD5CAD6D9D6EAEAEAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D87CECE283EDE277EADD73F1E285E4D589E3D77FDDD774 E0DA81695D34372A06B3AA61DCD77ACBC966D7D57DDAD5953B340F787144E5DC95D1CA72D7CF70 DED175E4D576E6D475DAC96ED5C56DDECF7AE1D47BDED57ADFD97BD6CF76EAE592A39D53817B35 DAD378DED57DDAD189E7E090B9B374524B18D9D783F4EFA2E9E29BF7F092F8EF93EDE38CF5EB93 F4EA92EEE48CE7DD86E7DD86EBE18AECE28BEAE088EFE58EF0E68EF0E68FEDE486ECE37EE9DF7D EFE684F0E888EDE487EAE388E1DA82E1DB87D5CE7CD8D180DCD585DDD781DDD67BDED77EE3DC83 E2DB82DBD27ADDD47BDCD37BD6CA75E0D57FE1D580E7DB89DED689D5CE81D7D080DCD681DBD57E DDD87DD9D477E2DD81E1DC82D5CF78EDE792E8E28CDDD77FDED880E4DE87E7E189E0DA85DCD680 EDE791E8E28FE6E08CECE692EBE493F5EEA0ECE598E3DC8DE1DB8AE1DA89E6E08BE8E28BE6E186 E8E386EAE588E4DF7FE3DE7FE4DB7FEDE288EBE086E9DD86F0E48FF3E795F2E596F3E798F3E59A F0E29AEDDF98EBDD92DDD17BEADF87F1E68EF0E48CF2E690F5E893F0E490F5E995F2E693EFE390 F3E796F5E99BF2E89CF0E79AECE393EDE592E9E18EEBE38FEEE692EBE391E8DF8FE8DF92EBE296 EFE69BF1E89DF1E89AECE394ECE493F2EA96EFE792EBE38EEEE691EFE794EAE291F0E595FAEDA6 F9EA9EF3E795F2EB97F0EB9FFFFEC0B8B5851A1600353012BEB97AFAF6A8E6E18CEFE796F1E998 F2EA99ECE493ECE493F2EA99EFE796EFE796F7F09FF2EA99D4CC7BE4DB8EEBE199F2E8A1F2E8A3 EFE5A0F2E8A4F1E7A2F4EAA3F0E69DE7DE93E5DC8FECE491F1EB8CF5EF99FFFABBDFD9B02A230E 342F1AC4C089F9F5B0DFDB87F4EE95E5DB83E9E08BE3DC8BD4CD83D9D18DEEE5A4C2BA78D3CC84 E8E394F3EF9CA8A455BDB96EF4EFABF2EFAEE9E9A94D4B0F757240DAD89ACFCD8AC5C579C3C373 D5D787DADC93EDEEADF3F3BAB0AE74716E315251179D9B60E3E1A5EEEAAEF0EAAAE5DE99EDE599 FAEF9EEBDF89FAEC94F0DB87E1CD7DD9C378C9B471CBB87DDECE9AB9AC7B958D6099956BACAD85 A6AA829FA174B6AE7DCEC492CBC08CAF9F68EDDAA0E8D194DEC382CAAC67C7A55D9A772C926B20 8960229D6E389F6A2F80440EC18F48F0BE7AF1C384E8C289AE9057280900937339B39358B7994F 96772EB49052CCA26FA9824DCCAC6DCFBC73E1CC81F0CC8BF7CA9AD6987A9E624E613F33826C45 C2AF70CFBC6FFFE192F5CD84CC9154A5632C9C5A20CF914EFBC476CEAA6B3323160A0100746F5A 9D997CA19370F0E1A8FCDD97A17F33F7DE97FFFFC0F3ECB2EDE7AAEBE5A5DDD491F9F1A7E3D487 E3D989FFF8ABFFDD94FFD28FDB9358AB5924BB632D993D08AB550FF5AB62F5C47AF5CC7EE1C270 E5CA77D9B968E4BB6AFFD787F5D183FBC06AFFBE5BF8B155F6B05EECAB5FC37B33B16E28C5893C AE782AA6782CC59D56DBBB79E0C783F5DF9BFFF0ACFFFBB4FFF2ABFCE79FF9DE95F1DD92DFC67C D6B86EE3C47ADFC175F0D689ECD686FBE896FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFCFCFCF5F5F5DEDEDEC4C4C4 B4B4B4AAAAAAA1A1A19C9C9C9E9E9EAEAEAEC2C2C2D0D0D0E4E4E4F9F9F9FFFFFFFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFC DFF5DFB9E8BBAFE0BCB5DEC7D2EDD6EAF7E4FDFEF1FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCFDE6F3F3D5E7DCC6DEC7C3E3C2D6EED4 F2FAF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFFF3F3FDE7E0F5DEB7F6E8C7FDF9F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFBF5F6E2E2E3A5DDC667DEB447EBD293F5EBD1FDFBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1EAEABEE2E2A7 F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F9F08DCE8D53B8506CC965A9E3A3F0FAEFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8FDF9C5EBC884D1886AC16B7FC67EE5F4E5FEFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFEFEFE F2F2F2E2E2E2D2D2D2C1C1C1B1B1B1A4A4A49F9F9FA5A5A5AEAEAEB7B7B7D1D1D1EEEEEEFCFCFC FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF1FEF1E0FBE0C6EEC6 C0E9C0C3EAC3C9EEC9CEF1CED2F1D2D5F1D5D4F1D4CDEDCDC4E9C4BEE9BECAE9CAE1EAE1F3F2F3 FCFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFF7EFFEEBD6F7E0B8F4E2BAFAF3E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFFCFDFCEBF3EBC3EDE1B1FBF8ECFFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9E6E6E6CBE5CBA5E2A555BD5567C067CAE9CAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9F8E9BCE7BC6FC36F4AAD4A 9CCB9CEBE9EBE8E8E8F2F2F2FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD177E4D97CE4D870DCCF69DECF73E3D488E1D67E DCD675E2DB8472663E312402A79C55E5E084D5D271D9D77FD2CD8E342D06787142D9D089CBC46C DBD273DACD71D8CA6BE0D070E2D177DECE78D5C671C6BB61D6CC72DED679D1CB71DBD482BDB66C 7E7630D8D177E5DB84D5CD81E1DB87C5BF7A3A3405BDBA66F2ED9EE9E398F9F394F5ED8EF2E98F F7EE94FBF198F9F095F1E78DECE289EDE489F4EA90EBE188EDE48AF1E88EF0E68DECE284EFE682 EFE584EBE282EBE283E9E085EDE58CE3DC84DBD582D1CA78D9D281E7E090E0DB85D5D178D5D178 E2DC86E4DE86DED780DBD37DDAD27DCDC36ED5CB76E0D680F0E794DBD485D4CD7DD7D17EDDD781 DED87FE1DC81DAD57AE5E084E2DC84D2CC76E5DF8BE0DA85E5DF87E7E189E9E38BE8E28AE9E38D E9E38DEDE791E8E28EE4DE8AE7E18DE9E291F0E999E9E293E2DB8CE4DD8DE6DF8EEEE893EBE590 EAE48DEDE78EE9E488E3DE82EBE58ADCD27AEBDF89F1E68FEBDF89E8DC88E7DB89EBDE90EDE091 EFE294EEE194EBDD92E7D98CE2D681E8DC87ECE08AEEE28DF1E591F4E895F3E794F3E697EFE393 EEE192F2E597F3E99AEDE495E6DD8EE5DD8BEBE38FE8E08CE0D883E2DA85EDE593F2EA98EAE192 EDE497F6EDA1F5EBA2EFE69AE9E091EAE290F0E895F2EA95EDE58FECE491F1E997F5EC9CF8EFA0 E9DD8EF5EA9BF6EDA0EBE49BFDFBBFDCD89F332D02352F0ABAB47AECE7A3E9E394ECE491EEE695 EFE796F6EE9DF3EB9AEEE694EDE594ECE493DED685EBE392E0D887C2BA69F2E99DFDF3ABFFF6AE FBF2ABF6ECA7F3E9A4F2E8A3F3E9A1EEE59BE5DC90E5DC8DEDE593F6EE97ECE594EBE3A0FEF8C5 BFB78A0B07003F381DDAD498EBE39DE7DF90E4DA85E7DF8AD9D580CFC97ACFCA7FDED891C4BD75 BCB86BDEDC88EFED96D9D782B3B060E9E59CE9E6A4FCFABE82804E282402D9D49AE5E1A0D6D48B CAC878CAC777CCC97ED0CD87DDD89BF0E3A5F1E4A6CAC487747536585C1B868D4BCACF89F2EEAB F7E7A2EDD28EDDB673CEAB63B9B15EC0BF6BCAC575D5CC81DDD18CDCCC8CC3B375C0B477D2C88A EBE6A6E6E4A3FAEFAEFFECADF0D091E0BF7DCAA661A47E37876115A57C2EAD7F2DB48430E6B662 F4DC87FFE49EB99255AB7F3FC3924BC99D56B38641BD9757B4975C8770352E1A00BDA76BE5CB8E FAE7A0BDA45CE6D390EBDCA0D7C88BEED997FFF0AAF6D793BA8E51774616461103522015D7AE97 FFF2D0ECDDACF7E6ABCD9A5EB067309F541BE0A467E2B571FDDC93F7CB81FFE4AAE7DAB68D8973 393E2B272E191214003A3012A592529B853DA9975372672C2F2D147A7F48B5BA7FBFC27CD8D887 D8D476CEC05ED2BB58EECB6FF2C879E8AE6DF5BA83D08855A85419A75516AA5D19E5A660FFCC82 FFED9FFFDE8BDCB661E6C36DF2CD77EBC36EF9D179F5BE61F3BA63F0B666F7C176FFC478FDC676 F3C16EF1C36FE1B969D1AC63B99451A16E2CC18540BE8742C2964FE8C77DFFE397FFEB9DFFF2A3 FFEFA0FAEDA0F9F0A3F6E192FBE192E9C471E9C571FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E7E7E7B4B4B4 7A7A7A5858584545453434342A2A2A2E2E2E4D4E4D717271898989B4B4B4E4E4E4FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFFFDEFFEEFD5F8D5BCE9BFACDEAFB0E1B0D0EDC3F2FADAFBFDEEFAFDF8FCFEFCFEFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFCFEFCFAFDFAF8FCF9EBF5F3CAE4E2B9DFC8B7E0B8DCF0DB F4FBF4FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFCFCFBF6EDE7E2AEEBE8BBF9F9ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFEFBF8F8E8EAD8A0DEBB5EDEBB61E9D296F7EFD8FFFDFBFFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAEFEBEABE E4E2A9F9F9EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDF8ED78C77741B04077C775BFE6BEF4FBF4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFDFCDAEDE8A3D4B875C17F7AC479E4F3E4FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEDFDFDFB6B6B69191916F6F6F5151513A3A3A3333333E3E3E4D4D4D5A5A5A8D8D8DC9C9C9 ECECECFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF9FEF9 F3FBF3E7FAE7D9F8D9CAEDCABCE3BCAFE2AFA6E2A6A9E3A9C0EEC0D9F9D9E9FAE9F2FAF2F9FAF9 FDFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF9F2EFEAC4E8E4B0F3F2D8FEFEFDFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFEFFF0FDF9D8FBEAC4FBE3C3FEF9F1FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF2F2F2CCCCCCCCDDCCC0EDC04EBB4E4EB54EBCE2BCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3EBD38ECA8E65B665 78BE78C1DFC1FEFCFEFAFAFAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD07AE1D67EE1D670DCCF6ADACA72E1D287 DFD37DD7D171DDD7817669422517019F9550E1DC82D1CE6DDAD880E4DFA049411B746C3EDED58E D8D078DDD475DCCE73E1D375DFD071D8C96FD4C46FD6C772DCD177D7CE73D8CF72E0D980DCD684 BFB76E676019D5CE74DED67EDAD383E7E18BD8D38A544F0F9A9845F7F3A3F6F0A3F5EF90EAE281 EDE487F6ED90F4EB8FF5EC8FF4EB8FEEE58AE9E083EEE588EAE185EDE487F3EA8EF1E88DE9E081 DBD16FDCD271E3DA7ADED576E9E085ECE48BDFD880E1DB87E1DA88E1DA89DFD887DFD986D6D47E D7D57FDFDA86DFDB84E4DE89DAD480DAD580C8C06DCDC572DAD27FE8E08DE1DA88D8D27EDAD47E E0DA83E3DD83E6E186D4CF75E2DC85EAE48FDCD684E0D988D0C977E0DA82E3DD85E4DE86E3DD85 E3DD87E7E18BE5DF89E5DF8BE4DE8AE3DD89E3DC8BE7E08FE3DC8BDFD887E2DB8ADFD887E0D989 E4DD8CE7E18EEDE793E9E28FE5DF8BEFE895ECE28DEEE48FEEE490E9DF8AE9DE8CF0E593EFE492 E7DC8AE6DB8AECE191EBE091E6DB8AF0E592E9DF8CEBE18CF1E694EFE493EDE293F4E999F0E596 ECE192EADF90EBDF93EDE394EAE192E2DA89E2DA87ECE48FECE58FE3DC84DFD87FE5DD89F2EA96 F5ED9CF2E99BEAE195E9DF97E8DF93EAE192F0E896F8F09DF5ED98F1E994EBE390EDE594F3EA9A F5ED9DEEE992EAE392F8F1ABDAD19AF6F0BD514B1D221C03B2AC6DFAF3AEDED589E0D788EDE594 E9E091E8DE90F2E99AF6ED9EF4EB9CEDE495EEE596DFD687E2D98AF6ED9EE9E091F8EFA3F5ECA0 F8EEA6F8EEA7F7EDA6F7EDA9F2E8A2F6ECA4F4EBA1EDE497EBE292EFE796FAF1A3E1D88DF9F2A9 DFDA98FCF6BEAFA9740600006F673CFDFDC8F2E8A5F4EC9CE8E38CD9D981E6E391E6E596E9E79C E3DF95C2C170E1E18AE6E68CEBEB92B4B360D9D78AEBE7A5EDE8B0C8C28B221C00A39E69FDF7BA DFDB94DFD98BD1CA79D7CE7FDFD48CD1C682E7DD98F0E69EF6ECA8FAEDADE5D89978692B362501 523D017C672ABFA767E9D08FFFEBA9E9DD9AECE6A3D8D894CCCE8AC2C883B2B570B8B871BBB46C DECE87FBE29BE1C179DAB56FAF8440754A068056108D6119B88E43E4BA69FFD27FFEEF9CFBDE89 E7BA62AD7F296C47046E500FC8A55FE8C179EEC87DF5D28AE6CD8AF9E7AA807438291E00FAEFB0 ECDE9DE8D890CDC47AEAE7A1C6C884F0E7A7FFF0B4F3CF91B37C40683401AF8552AC9260241407 241707827455D8C7A4AB946D896738A87E46F0C483FCD68DFFE79AE8DC8CDEDE90FDF4B7AB9C6C A5A170ECF5C3DEEBBCD1D7AF42381D1000002705003C1A045E4423836F43260E0C4730017A6C2F BFBB76E2E79BF3FCAAE9ED9BF2EE9EEEDA91DEB974FCDA9BFFCE909C692A8F4C10BF652E9F3700 CB692BFDB76BCC9E478D771ACBBD5EE3CF74FCE792F0CF7BFEF09CFFF2A2FFDF92FAD384FFD687 ECC873D2AB52E7C069F3CE7CFDDB91FFECA9FFDD92FFD986CFA252B27F32BE893DB88137E1AB62 F6C97FFDEFA3FBE799F2D888FEF9ADFDEFB1FFECB4FFE9AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5D3D3D3 9797975C5D5C4F4F4F5151514949494242424343434748474B4C4B404040606060989998D2D3D2 F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEF9FFF9EEFEEEDEF5DDCEEECDC1EDC1C3ECBBC9EBBACBEAC2D3EFD2E5FAE5F6FFF6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6F5E6CFECCECAEACAC9E6CEC7DCD6CCE3D5D6EFD7 F2FBF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFBF1E2E4AAE6E8B7F8F9ECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EFDAECD9A7DEBD67DFBB5EE9CA7DF6E6C0FFFDFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFEFBE6 F5E9C1F1E1B5FCF9EFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEF8ED71C5703DA93C80BB80CDDACDF6F9F6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFCE0E5EAA7C5B667B46D61BC5FDFF1DFFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDBEBEBE7676764B4B4B3D3D3D3F3F3F4A4A4A5555555555554C4C4C323232414141 686868ABABABDEDEDEF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFFFBF0FFF0E5F6E5D9EED9CFEDCFC8EDC8CBEECBDCF7DCF1FFF1FDFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFCF6F7DAEEEFBCECEDC0F0F1D4FCFDF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7D8EEEDABF7EDC2FFF1E5FFFCF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF3F3F3D1D1D1DCE2DCD8F3D85DC55D49B949A5D9A5EFF6EFFCFDFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFDFBFFFBB2E2B258B658 5BB75BABDDABE0F3E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED281E0D480E4D875E5D775E5D57D EADA92E7DA86DDD779E3DC8882754E211300887D3BDBD57FDDDB7CD7D57EDAD595494118756E3E E6DE95E4DD84D0C768D2C56AE5D77AE2D476DDCF75D7C872CFC06DD0C56ED3C96DC5BC5ECAC368 CAC36ED5CE8190883FD3CC75E6DC84E1DB87E0DB81E6E2927A762E615E11DCD889F0EB9AE6E082 E7DF7DEDE583EFE686E7DE80E5DC7EEAE183EEE587ECE385E3DA7CE5DC7EE6DD7FEEE587F0E789 ECE283D9CF6FDAD070E1D77AE2D97CECE288E6DE86DFD880EBE591E9E391DDD685D5CF7EDAD885 D2D07CD1CF7CD0CE7CCBC975D6D37FD3D07CDBD582CAC572D1CB77D8D07DD6CF7ADDD780D3CD76 D6D177DDD87EE2DC83E6E187D5CF78E1DB86E9E290DED786E7E091D6D07EDDD77FE4DE86E9E38B E6E088DFD983E1DB85DBD57FDED884E1DB87DFD985E5DE8DDBD583D5CF7CD6D07DDED786DFD887 E3DC8BE4DD8CE6DF91EDE697ECE596E7E091EDE698EDE193E2D787DDD282E1D686EADF8EF8ED9C F4E997E6DB88D9CF7BDAD07CE5DA87EEE390EBE08FEADF8EECE190EFE494EFE595EFE497F1E598 EEE395ECE095EADE94EADE92EADF93EBE392E5DD8AE3DA87E9E28AECE58CEFE88FECE58CDCD47E DED683F3EB98F0E898EFE59BEFE59DEEE598ECE396EBE292E9E18EF1E996F4EC98EAE28FE3DB8A E9E091EDE595E4E287FEFCAFE8E3A7FDF8CE685F3E160E00736B33F6F1A8FCF6A6EFE492ECE090 EADE8FE8DF90E7DE8FEFE697F2E99AF1E899EFE697F6ED9EF2E99AE5DC8DF6ED9EE3DA8BF4EB9E F7EEA3F4EAA2F3E9A2F4EAA3F5EBA5F3E9A2F6ECA4F4EBA0ECE397EBE393F2E999F3EAA1F5ECA3 EEE699F2EC9FFFF9B5FAF4BD6F67421E1400BAB087F9F1B7F4EDA1EDE793DDDE86ECEC9AEBEA9C E8E89EF9F7ACC2C171EAE994E3E389E0E088BEBD6BCDCA7FE8E3A2CFC992E7E1AD6059373B340D E8E0A6E9E19DF2EA9CE3D886E1D483EEDE92EFDE96EFE095D9C97FE1CD87D4B877E1C182F1CF94 DFC084AE945C897844776E2E656321858847AAAC75C1C08CD7D4A1ECE5B4EADDACD3C390BCA872 B79E65B99E61A78A4A957634A28140CAA466E8C789FEDB9CFFE8A5FFF1ADC5A85F9F813B89691E 7C5E1283671A9A7F39CCB46AECD48FFBE097F6D88DF6DB90F0DB91F3E4A2EDE9AA6E6E37373602 F2EEAFEBE4A2D3D287BEC175EDEEA6ECE7A5FFECAFCEA36C7C3F09AB6933D4A76DFFEFB5EEF1B6 CED79C7D81590F09001A0B00190A002E25094E4711D1C57BFEE897F1DE8DDBD789E0F1A7E8EEAE D1CB964143195A6645AEB99CB4B29CB3A089653A23864831A9634CB77156C88568DD986D965529 65330C4A2E0031290D6B6F42BEC492ECF5BEF9F8C2DDD198F1DA9FEAE4A8F2DD9DBE8F55C26E39 CF5C2ABC480EBC5E17ECB55ED3BC5BD0C664EFE184CBAC59DCBF6FE9D287EDD58DF6DF97FCE79B FCE999FEEB91F9DF81F1D579EED27DE3C177DAB774EFCD7DF7DB80F7D67CFFE088FDDE88ECCC79 DAB767C59246B78136AA712BA26722C78B49E0B178FBD39DFFE7ADFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5 D3D3D3A7A7A78283828B8B8B9E9E9E9F9F9F9E9E9E9C9C9C8A8A8A6A6B6A292929262626505150 A6A6A6F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEFDFFFDFBFEFBF3FDF3DEFDDECBF2C9BAE6B8B2E2B0B8E8B8C9F2C9 DCF9DCEAF8EAEDF8EDEBF8EBE4F6E2E7F7E5E8F7E7CFEECFB5E5B4B5E3B5C2E3C2DAE2DCECEFED F9FCFAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1E9E3B1ECE8BAFAF9E8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBFAF4E6EAD49DE0BC5FDFB243E9CA7DF7EFD9 FDFBF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDEA FAF6D1FBEBC7FEE7CEFFFAF4FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8F8E76EC66D42A8418BB68AD7D5D7 F7F8F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE4E1E5A8BDA958AB574BB54ADBF0DAFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCB9B9B96E6E6E5454545E5E5E7A7A7A9D9D9DB3B3B3AAAAAA8F8F8F595959 2E2E2E1D1D1D616161B3B3B3E7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEFDFFFDFCFEFCFBFDFBFAFDFAF9FDF9FAFDFAFBFEFBFDFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF0F9F8D4EDE8B4EAE3B2FBF5E6 FFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEF9F9F9E6EFEFB9E8E89AF3F2CAFFFEFEFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF7F7F7E0E0E0EBEBEBE8F5E878CF7855C0558DD38DD0EBD0F8FCF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FEF9E0F9E092D692 43AF4368C268D2F5D2F4FFF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D486DDD17DDED16FE1D372 E2D27BDDCD86DDD17ED8D374E4DD888A7E57211300776B2CCDC773DBD77BD5D37CE1DC9D564F27 595223BBB369E0D980E0D878D9CA72E5D77BE3D678E5D67FE2D37FD3C370CEC36BD5CB6FCDC465 D1CB6ECFC771E2D98C7B722BB6AC59E5DC84E6E088DCD77CF2EF9A827F2E575408D1CC7EEDE896 DAD377E0D875E0D773E6DE7DEEE586F1E889F0E788F1E889F3EA8BECE384EBE283E2D97AE6DD7E ECE384ECE283E3D87BE4D97DDFD67AEFE68BF1E78EDED67DE3DB85F3ED99E8E18FD9D281E3DD8C E4E190D3D280D1D07ED5D482D2D07EDCDA87D7D582D9D683C6C16ED5D07CE4DE8AE5DF8ACEC870 C7C267CCC76CD6D176DDD87FE3DD85DFD984E2DC8ADBD483C9C272E5DE90E4DD8CE5DF87E1DB83 E1DB83E4DE86E3DD87E9E38DDFD982DED884DDD783DAD480E4DD8CE4DD8AE0DA86DBD581DFD987 E2DB8AE6DF8FE9E293E9E295EFE79CEFE79CE9E196EAE29ADFD68BDBCF82E3D889EDE293EBE091 EBE090F1E694F3E895E7DD86DACF79E3D982F4EA95E2D685EDE293EDE292E4D98AE9DD91F2E599 EDE195EDE197EFE399F0E49AEFE29AEADF93E9E090E6DE8CDDD581DFD780E2DB83EBE489F3EC92 E3DB84DCD480F4EC99EEE695E8DE95EBE19AEFE69CF2E99CF0E898EBE392EEE692F8F09DEDE593 E0D788E5DC8EEBE494EFF095E8E99EFFFCC6A49C7A281D02493D15D6CD8EFFFAA8F1E78DF8EC95 E6D688F1E596EAE192EBE293F0E797EBE292E6DD8EEDE495EFE697F3EA9BE9E091F2E99AE7DE8F F1E89BF1E89DEEE59AF2E89FF8EEA7FDF3ACF8EEA8F8EEA6F2E99DE9E091EDE593F8EF9FF5EBA6 EDE49BF0EA97EDE892EAE497F4EBAFE2D6AF3328152E2306E1DAAAEAE7A3EEEB9BE5E793E1E293 D3D38AD0D08AF1EEA9A9A75BE3E28FEBEA96E0DE8BCECA7EC1BD76E6DFA0CFC68FE6DDABB6AF7C 0B0300AFA569ECE2A1FBEFA4F2E594FEED9BF5E190E2CC81E2CA7FBEA359D0B069D5B36FF2D390 FFE6A7F4D698FFEDAFF0E5A7F3F1B1D4DB9997A06277774769623963532C69502D6745255C3413 724826774F28B69264DBBE8CF1D9A2F1D8A1E5CC98A58E5998824C7A652D5F4B105C4B107A6D30 B5A96BCEC484F7F0AFE3DC99DDD28BE9D88DE7D488FAE699E4D387E9DE95D9D796DFE3A66A713C 41470BEEEEAFE7E4A1B2B36ABFBC75E9DC999C80417B4F156A2F00DAA16EFDDFA8FED89AF7E8A7 CACF8AD6E19FCDCA961A0F08180A0499927DDEE2BFCED59FE8E89FFDED9EFBE79AFCEFACFAF5BD FFFAC2DBC68F7B6E481412001E1D0E070000200706663017974E2FB76544AF58368A3315953B16 A14D2692472396593993684F462B0C0F0402332F148D8E68E0E5BAF4FACCFDFCCDF9F5B9FBDFA4 E1A56DC96D36E37B3DBC5915B96C1DCD9B44FFE288F5DB82FBF19CFCEA9AF7EDA6FCF2AFFDF3AF F9EEA6FEF2A2FFFAA1FCED8EE8D376FBEC97FEE59BE4C480F8E590F9E483EBD878F7E485ECDA7C F3DD84F5D681EBBB6EE7A962E59857D0783DC0632BCB7B3FBD7131D18744FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFBEDEDEDDCDCDCCECECED3D3D3DCDCDCDDDDDDDEDEDEDDDDDDD3D3D3B3B3B3494949212221 353635919191F1F1F1FFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFF9E3FFE3DFFADEDEF4DDD2F3D2C5F0C5 BBEBBBB9E7B9C0E7C0C2E7C1BCE6BAA3E19CA9E2A2BCE7BAC6EEC5CCF2CBD8F3D8E5F3E5F1F4F1 FAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF4F6E4C1F7E8C0FCF8DCFFFFF3FFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF8F1DEECD69FE0BB5FDFBA5C E9D295F5ECD3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEFEFFFEFFFFFFFFFFFFFFFFFFFEFFFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFB F4F4D7EBEAB6F6EECEFFF6EEFFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF7D8F7D765C46445AC4499C198 E6E0E6FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEEEAEEB6CAB55CB05B47B346DAF0D9 FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFED8D8D8B1B1B1B2B2B2BEBEBECCCCCCDCDCDCE7E7E7E2E2E2D2D2D2 AEAEAE5E5E5E171717343434868686D6D6D6FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFCFCFC FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFCFDF9E8F7E8C4F6DDB1 FDE6C9FFF2E4FEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8E2EDEDB4EBEBA4F3F3BCFAFAE2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EDECEDEDF6ED95D19567C26779D179B1E9B1F3FBF3 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F8F1B2DCB2 7AC27A5EB55E93D093EAFAEAFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D688D7CB7ADFD373 EADC7BE6D67FE5D58EE5D983D5CF70E3DC8791855D2416006C5F25BDB666D4D076CECB77EFE9AA 686133524C17C7BF75E3DC83E0D878E5D77FDED278E0D579DFD47BD8CD78D9CD79E5D982D7CE72 E9E081E1D77BD6CE78DFD688948A43A09547F2E894E7E187D6D176F1EE93B0AF574E4B04CBC67A DBD684EAE38AE1DA77EDE67DEFE786EBE283EEE586F2E98AF0E788EEE586F1E889DDD475E2D97A E4DB7CE7DE7FECE285E9DE84ECE187EFE58CE4DA81E2D881E8DF8AE2DA85E2DC88E4DD8CDAD382 D6D07FD8D584E2E191DBDA8BD4D381E1E08EE6E292E4E28FE0DD8AD3CE7AD2CE79DED982DAD47C DAD579E2DD81D8D378D4CF75E0DA83E3DD87E1DB87DDD685DBD483DCD584D9D282D8D27FE4DE87 F1EB93ECE68EDED880DBD57FE1DB85D7D17BC8C26ED4CE7AD8D27ED5CE7DE6DF8CE5DF89DED882 DED883DCD584DFD888E8E193E6DF91F0E89DF1E9A0E4DC93E9E199E7DE93E8E093EEE598EFE697 E9E191E3DB8AF0E996E3DB87EAE38BF5EF96EFE88EE6DF87E8E091EAE192E4DB8CE6DD90EFE699 F1E89BF0E79CEDE49CE8DE97ECE29AECE29AE9E095F0E898EEE695EAE28EEFE891E1DA82DED77F EFE890E9E18DDFD784EDE594F3EA9CEDE49BF3E9A2F7EDA4F6EDA0F4EB9CF7EF9EF9F1A0E8E08F FEF8A7EAE192EEE496EDE898E6EA97FAFCB7C0BE8D20190033290BBDB183FFFCB8F0E892E9E083 F6EB92F9EC9DFCF0A2EBE195F1E89BF2E99CEEE598F8EFA2E8DF92F1E89BEEE598DAD184EBE295 F4EB9EECE396F8EFA2F6EDA2F7EDA4F4EAA2F9EFA9F7EEA6F2E9A0F7EEA1F1E899E0D887E7DF8E EDE39EE9DF97F5EE99F8F29AEDE694ECE4A3FFF7CCA79B7B0F04006D6639F8F7BDE1E198E0E294 E5E59BD1D08CEEEDADDFDB9CB3AF6AD7D386E5E193ECE599EBE49EA79E5EDCD394F1E7AAE0D59F EFE5B34C4211453B1CEDE3A3E1D68EE1D382D9C573BEA757D2B66AF8D68CFFE398FFE79AECD689 DACD7EE9E194EBE49AE6DE97E5D898EBDA9DF4DDA4F7DBA6F7CFA2BD90685F3910603F17786036 79663B7B663B8369408E6F4567421770441B5632065642116C5C2870612D9E915CB1A770F2EBB1 F5F0B6EEEDB1E5E5A7EFEFB1EDEFAFCECA83DACF83E4D88AE6DA8CE4DC92D9D592C9CF93E3EDB5 4D593051591FE9EBADEAE3A2DAC888FFEAACAF874B5F2D007F4818DDAD76FFE4A9FADB9DE6D490 E7D791EBDE95DEC584885A32250B021106059A9982EDE6C9F9EBC1FDE7AEFFEFABFFF2AFF6D8A4 D29172B25F3C913B0988480DC9A263F9E3ABC5AF8581655124090A301010532F22361E01B6A36A D0A573C6865AAB663AA45629AE5C33B76840C7835B91623B2C150E1213003C523599AC8BEDE2AE F7E4A8FFF1AECFAD64E3AA62FDAB63BE5814A64000D08036FFD987EDDD84E9E692F8F4B1F8F4B4 F6F3B4FBF8B4ECE99FF9F6A2FDF59CF8EC91F9E693FFEBA1FFE6A2F5F096EAF28AE4E27EE6D577 F4D37DFACB7DE1A75EEDAD67F2AF6DE6A362FFD091FFD292E78F4ED0722FCC712AFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9676767 2727272B2B2B868686F0F0F0FFFFFFFFFFFFFFFFFFEAEAEAD1D1D1C0C0C0B9B9B9B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B8B8B8B7B7B7B8B8B8C8C8C8EDEDEDFAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFAEAFFEAF2FFF2FDFFFDF4FFF4 DEFADEC6ECC6B8E3B7B9E4B8B8E4B7B2E2B095DC8D9CDD94B4E4B1D0F2D0E9FFE9F9FFF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FFECDAFCEBCAF7F3C9F9FAE1FEFEFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F0DDEAD39B DEB95DDEB958EBDAA3F8F9EBFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEF7FFF7F9FFF9FEFFFEFFFFFFFEFFFEF9FFF9F8FFF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FDFDFAEDEECBE1E1A5F0F1D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBFCEBC1EFC058C05647AE45 A1CAA1EFEAEFFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F0F4C0D5C061B56044B343 D2F0D1F8FFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5EEEEEEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF3F3F38F8F8F2525251B1B1B636363C7C7C7FFFFFFFFFFFFFFFFFFF9F9F9E1E1E1CCCCCC BCBCBCB7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B6B6B6BDBDBD DBDBDBF7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFEEDC FFE1C3FFDCB7FAE7C9F6F4E1FCFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF9F9EDF0F0C9E9E9A5EFEFB1FEFEE4FFFFF7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1ECECECF1F6F1B3D7B37AC67A66CD6692E392 EFFBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAFBE1ECE1 7CBE7C63B56385C785C3E4C3F8FBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D789DFD380 E3D675E4D675DCCC75DECE86E1D57FD7D171E7E1889F93692A1C00645821BCB567DAD67DDAD782 E2DD9E716A3C47410CC5BD73E5DE85DDD475E2D37CDDD177D9D073D7CC74D5CA75DACF7AE3D882 DCD377DCD374E1D87BDDD47DDDD384C5BA71978A42E7DD8AEEE98BE2DD82F0EE8FE8E789413D00 BDB870F0EC9AF5EC9AE1DA78E0D96FE9E080E9E082EFE688F3EA8CEEE587EAE183ECE385EAE183 EFE688EAE183EBE284EFE58AE7DC83E9DE85EDE28BEBE189EFE58FEAE28CD9D17CD5CF7BE1DB88 E3DD8ADAD481DCD988D0CE7FC9C778D2D07FD9D685D4D07EDEDA87DAD47FDBD67FE3DE86E3DC84 DBD47CDBD67AE6E185E3DE83E0DA82E8E38DEFE896E5DE8CDFD887DAD382E7E08DEAE391DFD983 E4DE86E7E189F1EB93E6E088DDD781DED882D1CB75CEC874DFD985E2DC88DDD684E4DE88E5DF88 E7E18BE8E28EE3DD89E2DB8AF2EB9CEAE394EBE497F0E89CECE49AF3EBA1E7DF94DCD487D7CF82 E0D989E7DF8FE5DD8DDBD480EBE590EDE78FE9E38AE7E188E4DE87E9E191DFD788E1D98AEFE899 F0E89BE5DE90E9E194EEE59BE6DD93E4DB91E9E198EBE296ECE394E7DE8EE0D886EAE28FEDE58F E9E18BEEE691EDE592EAE291EFE696F2E99CF7EDA5F4EAA2EEE49CEDE499F1E89BF7EE9EE9E190 F0E898F1E899EAE194F4EB9EE9E198E9EDA7DDDFA33D3B101F1A007F7549F8EDB5F3E9A1F3E992 EAE085ECE18AEADE8EF4EA9BEFE699E7DE91E9E093F1E89BF1E89BF0E79AF1E89BEBE295EBE295 F7EEA1EFE699EFE698FAF1A3EEE599E7DE94E9DF95F9EFA7F6ECA4F8F0A4F9F0A2F3EA9BF0E896 F3EB99EFE69DE8DF95EFE794F3EC95F2EA99FCF3AEF0E5B2F1E7C04E44211C1502B2B07AFCFDBD E5E89CDDDE96D4D292E2DFA0DED99BBCB774C3BC73E3DC91E6DC94EBE19DCBC183E3D695DED08D ECDFA3FBEFBAA499661D13008E8551E1D791C5B669DFCC7DECD586F5DB8FF3E492F6E895F6EA95 EBE28BE4DD89EEE896ECE093F7E199E1BF7EBD9259A6713F935A25A37131C59F5EDCB677FFEDB3 FEDDA5E6C590DCBB87B1935EBBA16BCFB880E4CF97E5D096E6D298FFEDB1FFF8BAFEF1B3DFD393 FBF0AFEAE09DE4DE9AE2DE98DFDB95ECE8A1E9E59AEBE496E2DA8DE7DF94E3DF9ADCDEA0DDE5AF CCDAA71A250E202304CCC78EF0E5ACFFEBB6C9945F6F31008F5519EAC483F4E6A2D8D18ADDDF95 EDE99FEDD68FFFD48EC98D4EBF85569F7E5131270F080A003330195F533DEADBA8FFF9C2DCB885 A1653E9B4B34A35430CF925DEEC991EAD9A0FEFCC9FEF7CDF2E6C5B19B7E321D04160500362E00 D6D88CFFF7A8FFEFA2FBD289F3B471E19556B15921B86533CF885CE6B489BAA0797E7553120F00 77672EF7EDAAFCF9AFF5F2A2DEBF73CD8A44F79254D86228B95010D68F45FFE089EADC88EFE39C F5EDACF7F1B3EEECAEF7F8B6F4F5ACF1F0A0F3EE9AFCF3A4FDEAA2F9E49FFEF5A4FCF399F7E58D F4DF89F9E08EF4D788FCDA8FFEDE95E9C27CDAAA69FBCC8BE2AC6AD87A32F48A3DFFA756FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDE1E1E1 6262622727272F2F2F8A8A8AF0F0F0FFFFFFFFFFFFFFFFFFC0C0C07474743D3D3D252525222222 2424242626262626262626262626262525252323232323232222222929295B5B5BC9C9C9F0F0F0 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFBFFFBFCFFFCFEFFFE FDFFFDF9FEF9F5FCF5F2FAF2F2FAF2F2FAF2F2FAF1EDF9EBEDF9ECF2FAF2F6FDF7FAFFFAFDFFFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFCFBF4F1D6E7E6B0EEEEC8 FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFB FAF3E3ECD08CDEB443DECA71E6E7B6F9F9ECFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFE FDFEFDF7FEF7E4FEE4EAFEEAF8FEF8FEFEFEF6FEF6E8FEE8E6FEE6FAFEFAFFFEFFFFFFFFFFFFFF FFFFFFFDFDF8EFEDCBE3E2A7F1F1D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDF3DDA7DEA64BB749 47AE45A2CAA1EEE9EEFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F0F4C0D4C062B560 41B440BFEFBEECFEECFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFDFDFDA0A0A0363636181818575757C2C2C2FFFFFFFFFFFFFEFEFEEDEDEDA5A5A5 646464313131202020232323252525262626262626262626252525242424232323232323202020 373737929292E8E8E8F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFFBF8FFF2E5FEE0C0F0DEADE5E4ADF4F5DFFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFDFFFEFDFBFBF2E9E9BEE9E9BBF5F5DCFDFDF4FFFFFAFFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1ECEBECF5F8F5D2E8D28FD08F54C354 75D275EAF9EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEEEFEE C6D8C647AA4750B750A9E3A9EAFDEAFCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D787 E4D885EADD7AE7DA76E0D078E4D589DFD37CD0CA67DDD77BACA074302204615420B4AC62D0CB75 D2CE7AD6D1928E8752423B02C7BF74EAE38AD8D070DACD75D5CA71D6CD72D7CD77D1C674D0C572 D9CF79D4CB6EE3DA7BE3DA7BD7CD76E0D484CFC27A564904D1C679E4DF81D9D479ECEB88EDED8B 56510FA39D59F3EE9FF5ECA0ECE484EEE77DEEE686EEE589F1E88CF5EC90F1E88CEBE285E7DE82 EBE287F3EA8EE8DF83E2D97EE9E085EADF86E9DD87E6DB85E6DC85EDE38EEDE48FE0D883D7D17D E0DA86E4DE8ADBD482C5C06FB6B364C0BD6DD2CD7CCAC573C4BF6CE8E28CD8D27ADCD57CE6DF85 E3DC81E3DC81EAE589E8E388E6E088E5DF89E8E18FEDE695EAE392DFD887DFD985E5DF88E7E189 E6E088ECE68EEDE78FECE68EE9E38BE4DE88E1DB85DCD680DDD783EDE793EBE691E7E08FE8E28D E9E38BF0EA94F3ED98EBE592EBE592EAE392E3DC8CE9E292F5EE9EEFE899E7E092F0E99BE9E293 E0D98AE0D989DFD887D5CE7DE0DA86F1EB96E8E28CE3DD87E8E289DFD984EDE696E1DA8AE3DC8C F4ED9DF0E99BDED789E0D98AE5DD92E1D98EE3DB90EBE398E9E095E9E093EEE598EBE293EDE594 EBE390E8E08DE6DE8BEBE393EFE697EBE295EBE295FBF1A9F2E8A3E9DF98EAE196EFE698F2E99A E7DF8EF8F0A0ECE394ECE396EFE69AECE59FF5F5BF7573422B2800534D17E7E6AEE6DC97F4E89C F5EA98F0E691EAE18FDFD686E9E091F1E89BE7DE91E8DF92F2E99CE9E093EEE598EBE295F3EA9D F4EB9EEFE699F7EEA1F6ED9EF8EFA0F2E99CF3EA9EF0E79CF2E8A0EEE59BF9F0A4F2E99BEBE392 F5ED9AF1E995F4ED9DEEE698EEE696EFE796F2E99BFDF3ABF7ECB0F9EEBAD3CC9D1F1B003B3A16 E0E0A9E7E89CD2D287D7D490E1DC9DE8E3A1D8D08ACFC77BEEE598E8DC91F0E29EEBDB9DDCCC86 ECDC8FDECF8CB5A86EC3B68249401B2D2500F5ECA9F1E49AF4E397E9D287EAD589DAD782D8DB82 EAE68EF8ED97F7E490F9DC8BD1AB5EA978328E56159C5D23D48F59FBD296FDDB88FFE088FAD180 DCB164AF8039D0A561EAC281DBBE7CEDDB96FBF2AAE4E599F0EBA1F9E7A2F0DD98F3E09BF6E49D E5D48CF4E499ECDC8FEDDE91F1E496EBDF90F1E496E5DD8EEFE99DF0E89DF8F3ABEDEAAAEAEDB6 F0F9C8E1E5C0222711050100B1A570FFF9C4C486577F350896561CFBCD8AF7E59BCCCB7BCDDB8B D5E495DDD88CFDD78FD18941C87E3BE7BD81D5BC84EDE2ACC1C3928A93620F14009E9668D6BB93 8F64407A452451170047210CDDCE94F7F6BF727C47576735BBC597EFECBFE5D7A8B49F68DCC989 E8DD92E5E48FD2D06CE3DC76E5D174F2CE7CFFDF96FFD596DC976094501C90501CCE9962FFF2B8 FAE9ABD7C27EF5EFA6FFFFBCB9B86BF4EA9FE1AE6AE29457FFB076D87132BA6621CF9041EAC373 F7E29AFCEAA8FBF1B6DFD8A1E2E2A9F3F5B8E7E8A4E9E89DF2ECA2F0E49CFAEAA5FFE39DFFE29B FFE59BFDE69BFEECA0F8EBA0F5EB9EFDF5AAFEF1A8FCE7A2FFF2AFEEC784F2A861EA9449E48F42 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAEFEFEFDCDCDC B4B4B44545452B2B2B535353A8A8A8F3F3F3FFFFFFFFFFFFFFFFFFCBCBCB8585853A3B3A151615 1312132626264343434848484848484949493333331919190F0F0F1A1A1A3A3A3A787878D8D8D8 F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3D9E3E3AA EBEBC3FDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFCF8F7EAC2ECD381E2CC76DFD187EAE7BBF5F5E1FEFEFBFFFFFFFFFFFFFEFFFEF9FFF9 EDFEEDDEF5DDCFEDCEC3EDC2C6EDC6CEEDCED2EDD2CDEDCDC5EDC5CBEDCBE8EEE8F6F6F6FEFEFE FFFFFFFFFAF5FEF0E0F6E4BFF0E1B2F8F1DAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAF1DAA3DBA3 5BBC5A5EB65CABCDABEDE8EDFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF3EFF3C5D6C4 74BC7352B851A9E2A9DBF5DAFBFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCF3F3F39494942C2C2C1B1B1B606060C6C6C6FFFFFFFFFFFFFFFFFFEFEFEF B1B1B16868682626260C0C0C1A1A1A3535354A4A4A484848484848434343242424131313131313 242424535353A8A8A8F2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFAF5FFEFDFF6EDC8EEEDB9ECECC1F2F2D3FBFBE7FFFFF6FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFAF6FFF0DFF7EDD2EEEDC9ECECC6F2F2D8FBFBF3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBF9FAF9EFF7EFACDAAC 58B95866C366DBF7DBF9FFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAEEEFEE D3E4D3A8D5A849B14965C165C5ECC5FCFFFCFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DBCF7FDBCF7ADED26ED9CC68D6C76CDDCE81DED278D7D26DDFDA7CB9AE7E2A1D00625423B3AB63 D6D17CCCC975D1CC8CA19A642F2900B9B166E4DC83CFC76AD2C36FD4C871DED57AE5DB85D6CB79 CABF6DD3C973D1C66AD2C869E1D779E7DB85DDD080D1C27B594B0DB3A85EE8E386E1DB84E5E480 F6F6928B85498C8546F5EFA3F6ECA4F2EA8DF3EC82F3EA8EEDE38AEBE288EEE58BEDE38AECE288 E7DD83E3D980EAE086E0D77DD4CA71DCD279E9DD86E1D581D8CD78D7CD78DAD07BE0D782E2DA84 DCD682DBD581DCD682D9D27FCDC877C9C372D3CE7DD3CC7AC8C26EDDD681DED781D5CE74E0D77C ECE287E9DF81E8E183E4DF85D5CF77DAD47FE3DC8AE4DD8DEBE494E7E08EDBD581E2DC85D7D177 D3CE72E5E083E9E38BEEE890D8D27ADCD67EE1DB85DBD57FDAD47EDCD682E7E18DE6E08BE8E190 EAE48EE7E189ECE690EFE993EBE58FECE691E8E28EE1DA88E3DD8BEEE896EEE795E4DD8BE5DE8C EBE393E3DC8BDED786E3DC8BE4DE8AE4DE8AE2DC88D5CF7AE1DB85ECE690DFD984EEE794EAE392 E9E291EFE897ECE595E3DC8CE3DC8CE2DC8DE1DA8CE8E193EAE395E5DC92E6DD93EAE196E8DF92 E5DC8EE2D98BE6DE8DE7DE90EBE294F0E79BECE399EAE097F4EAA3F0E6A1EBE19AEDE399EEE597 ECE394EAE192EEE596EEE596EDE497EAE194F5EDACCBC6A125210D211D00ADA661F9F1A4EEE694 F9EE9FF3E89AEFE598E6DF93D2CB7CD9D282EEE59AF1E89DEFE69BEEE59AE6DD92F4EBA0F2E99E F0E79CF0E79CEAE196F1E89DF5EC9EF5EC9DEDE498F8EFA3F8EFA4EEE49DF0E79DFAF1A5F0E799 E9E190F5ED99EFE792EEE892EFE995F2EA9AF4E79FF4E8A1F9EFA7EDE49BE6DE99FFFFCA878557 191700979764F5F5A4DEDD8BD1CD82DCD68EE3DB94DCD388CDC272F0E591F7EA97F3E398CFBE77 A79548C8B763BDAD62D1C484F1E8B0CAC48C292408777037E8DF98DDCE87E7D68DF5E29CFEF4A4 FBF29EF6E18ED8B566B38336A56A1FA6631ABE7D36E4A761FFDA96FEDF9CE1AD66D9AA57BD933D BF9A46B79B48C1AA59FEF3A3F4EA9BE7DE91C7BF72C0B76AC1B768E0D589E7DA91F8ECA3F7EBA2 EFE297EEDF92EDDE90E7D887E2D382E6D784F2E38EEFE08BE0D687D2CC83E3DC93F6F1AD9F9B5E AEAF7EB8BE95AFB69218160A403514F8E4BABF9B6C6A2F009D6329EECB86F8E290DDD47FF0F39F E0E495EBE89FF0D890D09E53B46B1BEBAF5EE4D98BC5B970EEE19AE4DF9CDCE7A81F2C01282613 351B062D08003A1C16665C30BBB783EBE9B3EEFAB5B6CB781D330B101C00544F2B6550365C412D 5A4629978E50E7EA97E1DD7ECAC464D6CF79F1EA9EF5E8A9FAEEB7F9F0BBF6CF9AB37A3E99520F C46D27FFD486FFFDAEF6EEA1EEE398E5D48EF9E4A3FFF0B0CC9C5DE7A565FFC280C46D28B75611 CF8539FEE798FFEEABEDD79FF2E6B7E4E0B3DDDDADD2D49DECECADEFEEA8FAF3ACFAEFA8E6D994 F7E8A3FFF5B2FFF1AFFFF0AFFFF0AFFFF8B6FCECABF3EBA8F2EDA7F6F7B2FCFFBFFFF8C1FCE2AE F4D8A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4F4EAEAEAE3E3E3D8D8D8C4C4C4 A4A4A47979792E2E2E3F3F3F858585CDCDCDF8F8F8FFFFFFFFFFFFFFFFFFE1E1E1B2B2B25A5A5A 2828282929295252528E8E8E9A9A9A9999999C9C9C6A6A6A2F2F2F1C1C1C3C3B3C777777B9B9B9 F1F1F1FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4DC E6E6B0EBEBC1FAFAEFFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFDFFFFF0FAF4CBEBD792DEC46CDDD283ECE5B9FCF8EEFDFBFBF9FBF9F5FBF4 EAFBE9D6F9D6C0ECC0B0E1AFAFE1AEAFE1AEB0E1AFB0E1AFB0E1AFB0E1AFBADFB9D1DED1E5EBE4 F3FAF3F5FCFBF8F1E6FCE2C4FEDCB5FEE3C4FEF3E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6EFD6 9FD89D6BC26976C074B6D1B4EBE8EBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF2EFF2 C9D7C987C28664BC6399D798CDECCCF9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF5F5F5D8D8D87979791D1D1D2A2A2A797979D0D0D0FFFFFFFFFFFFFFFFFF F6F6F6D1D1D18989893B3B3B1C1C1C3838387171719C9C9C9999999999998C8C8C474747242424 2B2B2B555555999999D4D4D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFEFEEDFAFAD7E9E9B3E9E9B2F5F5CAFCFCE2FBFBF1FDFDF8 FFFFFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFDFBFEFBF7FCFAF2FCF3E4FEE1C1F1DEAEE5E4AEF4F4DEFDFDF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFF C7E3C766B46661B861C7F2C7EDFEEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F1F0F1 E1E3E1B4DCB485D4855CBF5C89CF89DCF1DCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD6CB79D5CA72D3C761C9BC57C6B75BCFC172D6CB6ED7D36ADCD775BBB17E1D0F006C5E2E ADA55EE2DD8AD1CD7AD4CF90A69F68231D00ACA457DFD87ED0C76AD5C672DBD078E1D97FE3DB84 DAD07FD3C876DAD079DBD074C1B757DAD06FEFE48BD4C878E6D7918E7F46938740E9E387E8E28D D8D772F6F791B7B0786B6328E7E296EFE4A1EBE387E6DF77F4EA90EDE38CEDE38CF2E890F2E890 F0E68FEBE18AE3D981E4DA82DBD17ADAD078E0D57FE2D681E0D481DCD17DE4DA85EDE38FE4DC88 E5DD8AE5DF8BE1DC88E4DE8AE3DD89DDD685D7CF7FD2CB7ACBC471CCC471E6DC86D0C76ED9D075 E3D87CE9DF83EAE080E4D97CEDE78DDCD681E3DD89E2DA8ADAD384E3DC8CE4DE8CE2DC89E2DC84 DDD87BDEDA7AE5E082E3DD84E4DE86DCD67EDCD67EDDD781DDD781DCD680DFD985E8E28EE5DF8B EBE493EBE58FE1DB84E3DD87EBE58EEAE48DE4DE87EAE48DE5DF88E1DB84E6E08BEBE58EE6E08B EBE591F1EA98E5DF8CDFD885E8E18EE7E18DE4DE8AE3DD89E2DC88E7E18DECE693EAE490E3DD89 E8E28FE5DF8CE4DE8AE6DF8FE6DF8EE9E292E8E292E5DE8EE9E292EBE496EDE49BEDE39CE5DB94 E5DC92EAE194EFE699EFE699F0E79AEEE599EEE49BF4EAA3F0E69FECE29DEDE39EEFE59DEFE59D EEE598ECE496F2E99AEAE192F3EA9BF4EB9EF9F0A3EBE2A34E483028220A767139FCF9ABE9E388 EDE589EDE390ECE299F1E7A3EEE7A0E3DF91EEE999EBE297F2E99EF0E79CE8DF94E9E095EDE49A ECE499E4DC91EBE398F7EEA4F7EEA3F5EC9FF6ED9EEAE194EEE599EFE69BEFE69CF1E89EF3EA9D EAE292E6DE8DEFE793EDE68FE7E284EFE992F3EA9EF4E5A4F5E5A6F8EBA4F7F09FFAF5A3F7F5AC D9D8A042421C2A290EBDBE62EAE78EDBD782EAE395E1DA8BE6DC88DED37AC7BA5DBDAD53CCBA67 D0BD6FDECA75EEDC80E7D885EDE19DCFC78EF2ECB67D7845130F00C2BD73EFE49FE5D691EAD493 E2AE70C58245A25F1DA5641DC8863CE7AB5CFBC979FFE392EFBE6DD6A256D7A155A6782DD3B368 EDD187F9EFA6EBD58ECFBD78FEF4AFEBE29CE3DD96CFCB82DEDB91D8D58ACECD85DADD99DFE09D E5E7A1CDCD87E7E59DF0EDA2DDD98CD8D185E0D98AEAE291EDE393DFD88BCAC47AD1CA83C7C180 1F1A000808000B0F000405003F3829E1D1B3DFC09C6D4519705016E5CE87F4F19EF1F092D9D67B EADC8BFDE7A2FEE8AAFAC685B27A2DEAB75BFFE486F1DE8CEDDF8CF8EB95F8E797E3CC8F654621 411C12956F6BD6BEACF0E8C4F0F7C3FFFFD4FFF7D2DEDEACC5CD8DDBE29DA59F6C78614348240B 3D170575583BA59658EFEEA1F5F0B4F0E9B8D1CE9BBEBE88A7A9726B6830B4AA6EFCECAFF9D697 D99A5A954A0BB26F28EAC97CFFF8ABF8ECA1ECE19BF9EEADFCEDAEFEEFB1D09A5DEAA867FDAC69 B54B06C16C1EDFB15EFFF9B4FFF7C0DBC89C6A5F3D2D2D0A1E20008B8D53F5F4B4E9E6A0F4EEA6 ECECA7F0F5B1FAFCBCF7F7B7F4F0B1F0EAABEAE2A3ECE3A5FAF4B6FFFBBBF7F4B4FBF8B9F4EBB2 FEF6BDFFFABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7BFBFBF808080595959424242 3C3C3C3232323131315353538E8E8ECFCFCFF4F4F4FDFDFDFFFFFFFFFFFFFFFFFFF7F7F7DADADA 6D6D6D343434424342808180D1D1D1E1E1E1E0E0E0E6E6E69090902B2B2B1F201F5F5F5FB0B0B0 EEEEEEFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCEBF5F5CDECECB8EAEAC0F6F6E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDEFF8F0C9EEDC94DEBB4DEBCA7DFBE3C7F3E8E4DEE6DC C6E5C6B5E4B4B5E6B4CCEDCBE1F4E1E2F4E2E2F4E1E1F4E1E1F4E1E2F4E2E0F3E0D4ECD3B7DDB6 B6DFB5BCE4C0C4E6DDD9E2D3F2DEB8FEE5C2FFF4E7FFFBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF C5E5C47DC87B5EC2577ACA72B9D6B5EBE7EBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F2EFF2CAD7CA87C28765BC6399D698CCECCCF9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE9E9E99494944444441414145D5D5DB7B7B7EAEAEAFFFFFFFFFFFF FFFFFFFCFCFCF5F5F5A7A7A7474747262626555555A6A6A6E4E4E4E0E0E0E1E1E1CBCBCB515151 2525254848488F8F8FD7D7D7F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFEF3F8F8E6F0F0CCE8E8B0E3E3A5E8E8B4 F4F5D2FFFFEEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF3E8FBE7CAEEE5B8EBE2AFFBDBB3F9E6C7F6F4DFFBFCF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFC FFFFFFD4EAD483C1836CBC6CAAE3AADBF5DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5DBDBDB D6D4D6ECEEEC9EDB9E53C55375C975B2DEB2EBF6EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD9CE7ADCD178DBCE6DCEC15DCABB5EE5D580DFD475D8D06BD6D075C6BA82241800 766B389E964DDAD57DCFCA75DDD692B1A8702F2903B0A95FE6E088DAD276E0D17CE0D67EDAD379 D4CD75D6CC79DCD17FE0D680E0D67ED1C86DD2C76ED6CA76D2C678EBDD97A192578C823CE5DE87 E2DD88DFDD78DBDB74DCD594595115DAD18FEBE29FF3ED90F5EE84E6DC80E6DC83EAE087EFE58C EEE58BECE289EFE58CE9DF86E5DB82DCD279E8DE85F5EA92F1E58FEDE18BE1D780E4DA83E8DE87 E4D984E5DD88E5DD88E4DB86E7DF8AE1D984DFD782D8D07BD5CD79DCD47FE1DA82E3D880DBD277 E4DB7FDED377DAD071E2D879E2D77AD9D379D7D17AE6E08CDCD585D1CA7AE2DB8BD7D07EE0DA86 D3CD74E1DC7FEBE786DBD679D6D077CFC971E5DE86DCD67ED2CC76DED882E1DB84E5DF89EBE590 E2DB87E4DE8AE8E28CE1DB83E3DD85F0EA90EEE98EE2DD81E1DC80E2DD82E5E085E9E489E7E286 DDD87DD9D37BE4DE85E3DD84E5DF88E7E18BD7D17BDED784ECE692F2EC98E3DC8BDCD584E4DE8A D8D27DE0D882DCD680DED782E4DC87E4DD87E5DF8AEEE695E8E190EAE395F5EB9FF3E9A0E6DC95 E0D68EE7DE94F0E79CF4EC9EF0E79AF5EC9FEDE49AE8DE96F8EEA7F3E9A2E7DD96ECE29CF0E5A3 EEE59AF1E694F3E993F3E898E5DC8DEBE293E9E295F9F1AABEB47D1C1300433A18D5CD8EF8F29E EEE688ECE387ECE28EF1E59CF1E7A0E7DD94DED988F4EF9EEAE294ECE396EBE295E5DC8FECE396 E4DB8EF3E89BF7EB9FEDE194EEE296F6EA9DF3E899FBF0A1F7EB9FF2E699EBDF95ECE197F8EDA3 F4EB9DEEE595EFE492F5EA98F7EF99EBE688F3EE94F3EC9CEDE49BEDE39BEEE797EBE691E1DF88 F3F1A3FFFFC9858156060300636121E7E28EE8DF8DF3E694CABC64BCB156BDB554C7BF5DDCD376 E3D57EC8B767E3D27DE9D880F4E392EADB91E5D795E3D79EEADEA7382D014E4021F1DFA1BDA869 7B5C1A9B5014BB5E22E59052FFBF7FFFD791FFE69AFACB79CEA34CC19A41D8B15AE1B962DBB866 E4D38BFDF7B4E7D897E9D99CD5C589D1C388F6E9ADF3EAAAD6D18DE2E09AEFF1A8DBDF99C0C685 B5BC79F1F7B4DEE49FE1E49FE1E19BCECE86D9D78CEDEAA0DFDC8FE0DD90CCC375E3DA8BE4DB91 EAE6A1B2B276B1B281D0CDA87D775AA39178FEE7CC886444724E25DDCD99FFFFC2D2D88BA9B35A C9C971EEDB8BFFDE9BFFDA9DB47A3BC39449FEEB92FEEB8DFBEE9DF6E594FFF7A5F5DF92A77134 A66940905741A681768575638585625C612A453D12291800362D0895915FEEE7B0F6E9AFFFF4C5 EBBF94C29665FDECBEEEDAA8B0AB728F8966413B211A16000A08000F0E0055531DE7E2A2FAE9A7 FEE09EFFE7A6D39F608E55159F641BF5CC7FFEE79BF9EFA6FDF5B2F3E8ABFBEDB0EBC286BD7C3D F7AF6AFCA254BB6E1EBE883FF7CE8AB3955A2009024D4019B5B48FC4C9A1ECECC0F8F2BFFCF5BA F8F9BAF2F8BDF7FECBF4FEC5F4FEC2F3FCBDE7ECACE9EBACEFECAFEFE7AAF4E5AAF8EAAEF7EAAD F3ECACF2EEACF3EEACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6BDBEBD7C7C7C525252 3E3E3E454545323232262726484848868686C8C8C8F1F1F1FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF E9E9E96C6C6C2E2F2E484948949494ECECECFDFDFDFAFAFAFAFAFA9696962727272C2C2C7D7D7D CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFF7FCFCE4ECECBAE3E3A8F2F2D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFDEAF8EDBFE8C25FECBF62EFCA87DAD6B4 C9DEC7C2E5C4BFE7BFC4E9C4E2F4E1FCFEFCFDFEFDFCFEFCFCFEFCFCFEFCFDFEFDFBFDFBEBF7EB C8E9C7C0E6C0C1E5C0C2DFC6C3DAB1C9DA9AE0E8BAFCFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFBCE1BC6EC06D64C45D8BD284C0DABCEAE7EBFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF1EFF1CDD9CD96CA9572C37188CE87C0E5BFF7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDE4E4E4B5B5B55454543636364343439A9A9AE1E1E1F9F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFAFAFAF414141292929696969C0C0C0FFFFFFFCFCFCF8F8F8D9D9D9 4E4E4E2727275D5D5DAFAFAFF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFF7F7E8ECECC4E5E6B2 EAE8B8F5EEC5FDF4D2F6F4DAF4F4DCF4F4DCF4F4DCF4F4DCF4F4DCF4F4DCF4F4DCF4F4DCF4F4DC F4F4DCF3F4DCF4F2DBFAE7D0FADFC2F0E3BAECE7BBFCE6C9FEF1E3FEFDFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEB FCFCFCFFFFFFE0EFE0A0D0A074C2747ED27EC1EBC1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6 DEDFDED3D8D3D7EDD788D58849BE4998D698D6ECD6F6FAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE4D680D9CA74DBCB73D8C76BDDCE6EE4D674E0D473D1C86ED9D082D0C688 261D006C692EA09B49D3CD6DD6CD6FCFC47CCCC187332B09928E48DDD884E0D77DDDCE79DBCF77 D2CB71DBD47DD8D07BD8D07BD7CF7CDAD280DBD382DED487DACF85D5CB82E4DA92C3B977665E1B ECE499D7D179DCD972D6D468E1DB83625916BCB279E8E09BE9E582E0DD6EE7E181EAE487E5DF82 DDD77AEEE78BE5DF82E3DD80E1DB7EE0DA7EE6DF83ECE689EEE58AE9DE84E0D57CDCD178E6DB82 E6DA81EBE086EFE58BEBE187E3D97FDDD379E4DA80E9DF86E6DD80ECE286E2D97DE3DA7DE3DA7E DAD174DDD476E5DD7FE4DC7FDED578E2D97BDCD679D5CE73D2CB72CFC772CDC572CEC675D7CF7D D9D17EDCD57DD9D278D9D376E1DA7EE7DF87E5DE86E9E28AE6DF87DDD67EE1DA82E4DD85E5DE85 EBE38CE5DD87E6DE88ECE58AE0DA7BE4DE7FEDE789E4DE7FE7E182E6E081E7E182E3DD7EE4DE7F E8E283E0DA7CE7E481E9E583EDE889E3DC80E9E186E6DE85DDD37EE1D985DFD785E6E08CEEE994 DBD480AFA753D3C974E4DC83DFD779F1E88AE7DF80E7DF82EBE088F0E694E9DE91F4E7A0EBE298 E9E293E6E090E4DD8FE5DE90ECE597E8E094EFE79DECE49BE6DE95F5EDA4F3EBA2EBE593EFE79D F5E9ADF5EA9BEFE484E7DE76F4E891E8DE8EEDE695EBE795E5E0A64A4216211800A09749EEE698 F6EE9CF0E692F4E995F9ED9AF8EB99F9EC9AF6E895F0E38EECE18EE1DA89DBD483ECE494F1E999 E5DA89E2D685ECE08FF5E797F5E695F3E391FAEA98F2E192F5E496F9E89BF2E496F4E59AF6E89D F7E99DFEF2A3F3E697E8DC8BF3E795F6EA97F7F097EAE68AE9E88CEBEC8EE7E98BE9EE90E6E88D E8E692ECE89FECE6A7F2E7B3382E092C2605D0C387E9D48DD6BB68CFB85BD3C461E1DE7AD6DA77 D9DE81F1EF9AEEE696ECE096DBCC86F8E699F0DA89ECD384EBCD8BFFE1B0A5835E200000775329 A17D43A58036EAB764FAC673FFD589EDCB87DBAE6CD6A15EC59A4DCDAB57D1B55AF7E282EDDA7A EBDD83D6CE80D1CA81E6DE98F5EDA9EAE2A2DCD495D6CE8FCFC886F2EBA6E1DB93ECE79CE1DD92 D4CF86D0CB83ECE79FF7F2A9E6E298E4DF95CDC87FE8E399EAE49AD3CD83E4DD92D3C26EEBD97F F7F097D3D985E0EA9FECF0B1FFF9C77F6A4496775A815E44613F20BCA17FCABC9A7B75522E3203 7C8645D6DB92F8F2A6F0DB929E7E44583600D5BC7ABEB06EC3C277E1E491F3E49EF0D398CA945A 955914C2904BAB8A4E483727534B345954396F66408F8550ABA176B2AA7DD5D197F6EEA4E2CE7C FAD795C49A5AAF8839FEEEC6B5A59122240D37382265633686854FB6B37BDDD89DF9F2B6F4EAAB F5E7A4E9D893FAE69EFBE99FDCB369A34F0BAD6B1FFCEA99FCE89CFBE9A3FDF3B2FAFBB9FFFCBA BB8E49BE7A2EFFDF81DEA658834A24553414382100C3B479FFF8C9FFFFDAF5FDDBC8C4A9DFCCB2 F5E4BF8B905C3F4729787D5F989D72D0D29EFCFDC7E2E2A6EBE8ADFAF5BBF8EFB5EFE4A7F7ECAA F9F1ADFAF6B1F9F5B2FAF5B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDEDFDEBABBBA A1A1A19A9A9AA8A8A87D7E7D4A4B4A2929294B4B4B8E8E8ED0D0D0F8F8F8FFFFFFFFFFFFFFFFFF FFFFFFE8E8E8606060232423494A499B9B9BF1F0F1FFFFFFFBFBFBEEEEEE8B8B8B262626404040 999899DCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFDFDF4EEEEC6E3E3AAF1F1D4FFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFBF5DFEED897E6C264DCB64D BFC77BC0DEB3DCF0DAEDF9EDEDF8EDF7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFDFAEEF9EFECF8ECE9F4E2DDE4B8BBD88F9BD67BB7E6AAF3FBF2FEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB9E0B86BBE6A74C771A1D79FC9DCC8E9E7E9FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF0EEF0D3DCD3ACD5AB87CE856EC06DACDBABF5FAF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEEEEEEB3B3B36E6E6E2828284949498F8F8FD2D2D2F6F6F6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9A9A93535352B2B2B7B7B7BCBCBCBFFFFFFFFFFFFF3F3F3 CCCCCC4747472C2C2C707070C1C1C1F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F9F9EE F7F8E8F8F5E4FCECD0FAE4BCE9E4B0E4E4ADE4E4ACE4E4ACE4E4ACE4E4ACE4E4ACE4E4ACE4E4AC E4E4ACE4E4ACE3E4ACE5E3AFF2DFC0FCE1D6FBEEE2F9F8EBFEF8EFFFFBF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1 EBEBEBFCFCFCFFFFFFEBF5EBBDDFBD7BCA7B53C453A4E1A4FCFEFCFFFFFFFFFFFFFFFFFFFFFFFF FCFBFCF3F4F3DBECDBAAE2AA74CC745DC05DBCE4BCF1F9F1FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDDD077D6C870E1D17AE0D074E7D777ECDF7BE6D979D7CD75DFD48A DDD3963B330077763BB7B261D5CF6EDBD171D9CD83C6BC812E26098E8B45DFDB87D9D077DFCF7B D6CA73D2CB71DFD87FDFD87FE0D883E3DB88E4DC8AE5DB8DE9E093E7DE94E2D98EE7DD94DBD28D 817834D3CB82E0DA82E0DD74E1DE72EAE589807733857A43EFE6A3F3EF8DE1DF6FECE586E4DD82 E8E286E2DC80DCD67AEAE388E0D97DD7D175DDD67AE6DF84E2DB80DDD47ADED37ADACF76DED37A E8DD84E4D980E2D77EE4D980E6DB81E6DB82E2D77EDACF75E6DD82E1D87DE7DE83E3DA7FE6DD81 E0D77CE8DF83E0D77BE2D97DE4DB80E0D77BDCD377E6DF83E0D97ED3CC72D2CA76D4CC79CCC471 DAD280E2DA85E7E088E6DF86E4DD82E3DC81E1DA81E0D981E8E189E9E28AE8E189E7E088E1DA82 E6DF87EAE38BDFD880E2DB82ECE58AE6E081E2DB7FE9E386EFE98AF1EB8EE7E185E6E082E2DC7F E5DE82ECE688ECE588F0EB8BEBE686EBE486E3DB7DEBE285E4DB80E5DC82E8DE87E6DD88EBE28D F1E996E3DB88DDD581E2DA85E0D87EDBD476ECE686EAE484E9E285E1DA81E9E08EEEE599E9DE96 EBE298EEE797EEE797EDE697EBE496EAE395F1E99DE9E196ECE49BF3EBA2E8E097EDE59BEAE495 EDE69CEFE4A3EBE090EDE486FAF08CE8DD84ECE191E4DC8DFFFDB3A29C651C1503483F09D7CF7C F1E998E9E190F3E997F2E795FAEE9DF0E490EBDF8BF1E28FF5E693F4E995EDE695EEE796F0E997 EAE291EBE08EEBE08EEDE18FF6E796F4E594F3E392FAE999FBEA9BFBEA9CF7E699F3E396F8EB9D FCEFA1F3E899F8EC9EF4E899F3E697F7EA9BECDF8FF0E997EDE894F1EE96F2F093ECEA8BE9E788 F1EB91F8EF9AF1E295F8EAA3FFF3B393824A0C0600605426E2CC8BEACF7EF7DE84E3D573D6D26F E1E384EDF096E6E290E7DA8FF2E69FE6DE97F9ECA1FDF0A1FFE69BCA9F5EA16A3A844A276E381C 1E0000B9A364FFF6A9FFEB8FF4D073C7A552B58B41C29853E5BD75E2C073FEE38FF4E087DFD077 DED57DF0E896E3DD8FD8D287F1EAA2F5EEA9E9E1A0F2EAA9E6DE9ED9D28ED0C983CFC980F1EB9F E6E094E9E399FAF4AAF5EFA5F2ECA2EEE89EEAE49AD4CE84DCD68CEDE79DE5DF95DFD88DE7D884 F1E087F2ED94E3E792C0C679D7D794F2E3AC63471B5B350F1B00001F0300240D0A1405003E3811 939568EDF2BFF9FAC6B3AC76412C0B2B0E00C6A9859D8966281E005B5925BFB86BF8DD97F3C487 9E5D1ECF9045FFD887FFECA3F7EDB5EEECBCF3F1BEFDF6B7FDF2B3FFF6BCEAE2AAEDE6A4F9F19F F1DD81FFE095C99D55BF993DEFD4A4B2A387CFCFA9E4E6B6FFFFD1F7F5C1D9D69DE8E3A6FAF3B3 F0E6A2F1E69EF1E499EBDB90F0DF92FFF1A8D08744904A06BF8B41FFEEA5F6E39EF9EEAAF1ECAC FAECACE6C783A87728F4BA62F0DC915A2B0C451700946834F4D89BD8D099F6FDCEABB28F1B1203 5F4C3BFFF9D7B3B7872C30160406001819001A1B085E6027C1C086EFEAB2F2EDB3F3EBAFF0E7A6 F3EBA4F9F2A8FDF8B4FAF6B5F8F3B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7 ECECECE2E2E2E3E3E3EDEDEDCBCBCB9596954344432F2F2F4C4C4C999999E7E7E7FBFBFBFFFFFF FFFFFFFBFBFBDCDCDC545454262726616161B3B3B3F3F3F3FFFFFFF7F7F7DCDCDC7E7E7E262626 585858B8B8B8E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF5F5E2ECEDC7EDEEC9F2F3DBFCFDF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF6F8EDD8E3B4C9CD7F BFBC55B8BA52CCD185F0F2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFCF7EAE6B1C5DD8FA4E190ADE8ADD6F0D6F0F9F0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFAEDCAD57B75670C46FA9D8A9CCDCCDE9E7E9FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF0EEF0D6DED6B6DBB68FD28E64BA63A3D7A3F3FAF3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEBEBEBB9B9B96E6E6E3333333737377C7C7CCECECEF5F5F5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFCFCFC9D9D9D2E2E2E3A3A3A969696D8D8D8FFFFFFFEFEFE E8E8E8B9B9B93E3E3E3636368B8B8BD8D8D8F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFEFFF3E7FBE9D0EEEAC2EAEABEE9EABEEAEABEEAEABEEAEABEEAEABEEAEABE EAEABEEAEABEEAEABEE9EABEEBEAC1F4EAD5FEEEEDFFF9FCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7 E1E1E1EBEBEBFCFCFCFFFFFFF7FBF7DCEFDC8FD68F3EBD3E89D589E7F3E7FBFDFBFFFFFFFEFEFE F5F5F5F5F3F5F9FAF9D6F3D673D1736BC76B88CC88D9EFD9FDFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD176DACC73E6D67EDFCF73E0D070DED16FDDD071D8CE78 E3D88FE9DFA35148146D6C33ABA655CEC867D8CE6ED8CC83CCC186332B0B87843FEBE795E1D87F E7D885DED27DD5CD73D8D177D0C971D6CF77E5DC88E1D987E2D988E4DB8DE4DB8EE4DA8FE4DB90 F1E9A1A19854BAB168F1EB94ECE983EFEC81ECE78CB4AB65584D15E8DE9CF3EE8EEAE87BF5EE90 EFE88DE9E287ECE58ADBD479EAE388E6DF84DDD67BDFD87DE4DD82DED77CD9D177DED37AE2D77E E7DC83EADF86E6DC83E2D77EE4DA81E4DA81E3D87FE7DC83E4D980E4DA80D5CC71DCD378E8DF84 F0E78CE2D97EDBD277D8CF74DED57AE2D97EDFD67BDED479EDE78CF2EB91E1DA80DFD682E9E18D E1D986DDD582E5DD89E8E189EBE48BEBE489E7E086E6DF87E2DB83E6DF87E6DF87E8E189EBE48C E7E088ECE58DEBE48CDFD880E7E088EAE38AE8E086E8E187EEE78DF4ED92EAE389E4DE84E5DE83 E5DE83E5DE84E7E085E7E086F0E98FE9DE86E6DB83E0D77CEAE184E3DA7CD8CF72DFD67BE8DE86 EFE58EF2E792E0D885D7CF7CE9E18CE5DE84D5CF72DED87AE9E385EAE387E2DA83E7DF8DEEE599 E1D78FECE499EBE494E9E292E9E294EAE395E9E294E5DE92DCD489E8E097F3EBA2E3DB92E2DA91 EAE398EBE298E9E096E6DC8CE7DD85EBE185F3E993E7E08FE2DB92F0E7AB4F48241B15009D944B F1E998E3DA8AEDE594F8EE9CE7DC8AEDE18FDED27ED3C673DACA77E1D27FE2D783F1E997EDE695 E8E08FE3DB8AE7DC8AEBDF8DEDE18FF3E493F2E392F1E291F8E898F6E798F2E696EDE091ECDF91 F3E698F4E799EADF90F1E697F3E899F5E899F5E899ECE192F6F0A2EDE99AE9E292ECE38EF5E88E FDEE93F7E589F4DD85FCEF9AEDD282CDB064CBB675353111261E00D9C98BFFF9B0F1DC88DFCF75 ECE589E6E28AD9D481D5C87CE9D68FFEEEA9FFEEAAE9D38FCEB26DB28E4B946729A4753BE0B27D EFC69161411A352103C9BB7ACDBA64D0B859BDA34EE0C476E3C77EFFEEA4F7E191E6D480E9DD89 EBE494E3DF95C5C27AD9D388C3BD72CEC97EE2DB93EFE8A3FBF4B0EBE3A1F2EBA5DCD58DE3DE94 FBF5A9E1DB8FE0DA90F4EEA4F3EDA3ECE69CEAE49AECE69CDFD98FDFD98FEEE89EEDE79DD5CF84 E9DF8DF1E690E8E490E9E999C2C176E3D895B8A268805E2C9D78497C5A288E7541917F48B9B075 E9E5ABD2D29AC4C894B1B1820B020029160DB19778846B5029180076704FBDB587C0A463E6B975 9F661FA46217FDC577F3C878DBC677D2CF85DEE29CE0E29DD7D38BDCD389E9DF98DCD391DDD88F E3DB87E1CD72FAD58CB2873FCAA544C3A56B14070024270BADAD8996927356522E120E00201B00 5C571CE3DC98EEE49FFCF0A9F4E6A0EFDE9AFEE9A5FED394BD7B3F884607DDAF6DFFE8A2E9D893 F2DFA0E9D798E2CD89CDAC5FCF9243F7C67FD8C184A66632AB6431EEC288FFFFCCDCEBB3494E2A 0B0000221302958E6CF0F3C47A7D6204050198987E898A6005040044421FE9E6B0E7E2AAE9E3A7 FBF4B3FDF8ADF3EC9FF3EEADF4F0B4F5EFB4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFCFCFCFBFBFBFBFBFBFCFCFCF8F8F8DFE0DF878887404140212121656565D0D0D0F3F3F3 FFFFFFFFFFFFEEEEEEC5C5C5484848333333868686D6D6D6F8F8F8FFFFFFF2F2F2C3C3C36B6B6B 2424246F6F6FD6D6D6F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F8EAECE9BFE8E4B0FBF6E9FFFCFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFBE9F7E7B6E1AF ADDBA3B4D697C7BC56DEC15AF2E2A1FCFBDFFBFEF7FDFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F7F8E9E8E6B6DEE9B3D5F4C8BFEEC0B6E4B5DAF2DAFDFFFD FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA0D7A03EAE3C68C267B0DBAFD0DED0E8E6E8FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDEDEBEDD3DBD3B7DBB792D5915FBA5EA0D5A0F3FAF3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCECECECB9B9B96C6C6C3A3A3A2F2F2F7B7B7BBCBCBCF0F0F0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E6E6E68B8B8B2C2C2C505050B5B5B5E7E7E7FFFFFF FEFEFEDCDCDCA3A3A3333333414141A8A8A8F1F1F1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFDFCFEFCF9FDFCF8FCFCF7FCFCF7FCFCF7FCFCF7FCFCF7FCFCF7 FCFCF7FCFCF7FCFCF7FCFCF7FCFCF7FDFCF8FEFCFAFFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFF4FBF4AEE4AE4DC34D75CB75BADEBAE6EFE6F9F9F9 FCFCFCEFEFEFE8E9E8E9F1E9BBE9BB4DC24D73CB73BAE0BAEBF5EBFDFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDACE6FDDD074E9DA7FD9C96DD8C868D9CC6BDCCF70 DBD17BDBCF88DDD3974C43115D5B29999444CEC768D8CE6EDACE82DDD296463E10716E29E9E593 E1D77FDECE7DE1D37FDAD077DBD077D2C871D4CA73DBD17CD6CB78DACF7FDBD081D8CD7EDCD183 E1D78AE7DE94ABA35B958D45EBE591E7E37FE7E479E8E386E1DA91594F13C5BD79E6E184EDEA80 E8E184EFE88DE3DC81F0E98EECE58AE9E286E8E186E7E085E4DD82E6DF84EAE388E5DD83DAD077 E4DA81EAE087E9DF86ECE288E5DB82E6DC83E4DA81DBD178E3D980F0E68DE8DF85E6DD82EFE68B E6DD82E3DA7FDFD67BDAD176DFD67BE8DF84E7DE83E3DB7FEBE286DED77CEDE68BE3DC83DFD781 EBE38FECE491E9E18EECE48FE5DE86E6DF86E5DE83DED77DE8E189E3DC84E4DD85E2DB83E6DF87 EDE68EE9E28AEAE38BEAE38BE1DA82EBE48CF1EA92EDE68DE8E18AE7DF88E9E289E2DB83DFD781 E2DB82E9E28AECE48DE8E189E8E08AEFE394EADD8DEADE8AE6DA82EFE488E8DD7EDCD273DAD071 DFD478E6DB82F0E48EEADF8BE5DD8AE6DE8AE9E289EDE68AE6E083EAE387E7E086E7DF8BEBE293 EBE296E4DA92EDE59AE6DF90E3DC8CE6DF90EBE496EDE698E9E195E9E196E4DC93E0D88FE5DD94 E6DE96E9E19AE8E096EBE38DF0E894EDE493E0D688F3EA96E6DE90FDF4B6B9B084150D003D3606 EFE79FFDF6A7E9E091F4EC9BF6EC9CEFE494F2E693FAEF9DFBEF9DFDEE9BF6E794E8DD89EBE28F E8E08DE8DF8DF1E593F4E997F1E694F1E593F2E794F3E594F5E695FAEB9AF2E796F1E797F2E897 F2E797F5EA9AF1E696E9DF8FF3E898F8ED9EF4E99AF6EB9CFCF3A6E9E299EBE49AEAE093F1E08E FCE690FFEA90FADC82EECD72D3B359D8B962EFD27AFCE89DA2A16A0C09006B602AFFEEACE5D289 D9C878E7D986F6EA99E9DB8EF1DB95FEE1A2F7DF9FC9A76782591E996D35BE935ADCBB79F1DE92 ECEC99F2EE9FC6B46F2D1000532D10E5D187EBE187F3E997E4D78AD2C579ECDF91EDE392FDF6A3 E1DC8CCFCC84E9E8A9E7E5A7E6E298D3CD82C6C077E0D991F0E9A2E3DC95EEE7A1E7E099C3BD73 D1CB81E7E195DBD58AE0DA90E5DF95F2ECA2EDE79DE8E298E5DF95D2CC82E0DA90E6E096E4DE94 CDC77CE6E293F2EE9CE8E495EDE79CE1D58EEED7969A783E8A63288F682DE1C183FFFFC1F4E8A1 F7F5A1E4E392EDEFA6AEB1750D0C006A6246A999756B583524140098915DABAD70CFC88DFFDDA8 BB82428C4F04D99E4CFFD586F1CF82DFD182D3D680D2D981E9ED97F5F0A2F2EA9BECE394E2DD95 EBE89FF1EA9CF1E08CFFDE9DB88F4EC49F41FEEAAEC8C3945D62360E0D00000000040000595235 DAD7ADD2CC99EAE0A7F0E6AAEDE0A5F8EBB0FFF6BDF7E3ACFFEDB0FBCE969C521A9C6021FCE49F F1D692FEE7A7FAEEADE7DE96E3D085C0833FD5A561FFF7B1E29763BD6537D0975CA9A96B2F3C0E 4649308F815E4C432C050200302D17605E480000008A8871FFFDDB908F62100E006A6737E1DFAB FFFFCAE0DC9CF0ECA3FDF9AFEAE6A8F3EDB5FAF3BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0A6A6A65454541E1E1E535353BFBFBF EBEBEBFFFFFFFFFFFFDCDCDCA4A4A43838383939399A9A9AE7E7E7FBFBFBFEFEFEE9EAE99C9D9C 4D4D4D2020207E7E7EE8E8E8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF3F6E9C8F3DDAFFCE7CBFFF3E7 FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFCF0FEF0D8F7D8 AFE1AEBBE6BDD5EBCBDCD691DFC766E6C969E9DC95EBF8DCF5FFF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF4F4DEEBEBC3EEEECCF2F6DEEEFBE9CDEFCDB1E2B0CCF0CC EEFFEEFBFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9DD69C3DAE3B82CD81D2E8D1DFE3DEE7E6E7FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE4E3E4CAD0CAC1DFC1A0E0A048B3478FCF8EF0F9F0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE5E5E5B3B3B36E6E6E393939474747727272BDBDBDE5E5E5FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3C7C7C77272722727275F5F5FC9C9C9F0F0F0 FFFFFFFEFEFEC9C9C9828282252525474747BABABAFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFAFEFAC8EDC878D1786DC76D82C682BBCEBB E2E4E2F9F8F9FAF8FAE8F0E8C9E9C994D99451BF518ED38EE0F1E0F9FCF9FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4C967DACD6FE3D479D4C367D7C768DCCF6E DED173DDD37DD5CA82D6CC8E4C43125D5C2EADA759D8D072DCD273DED287E9DFA3625B2255520D DFDA89E6DD87DECE80E8DB87DAD077DCD279DAD077DCD279DAD079D1C772DFD482E2D785D7CC7C D8CD7DDED485E4DB8CBAB367817931E2DB89E6E281E6E37AD3CF70E8E09672682B948C48E3DE84 E6E27DE9E286EAE389ECE58BEDE68CF0E98FE4DD83E4DD83E8E187E9E287E9E288EFE88EEDE58C E0D67FDFD57EE9DF87EAE089EAE089D9CF78E2D881F1E790EFE58EEDE38CDFD57DE6DC83DDD37A E4DA81ECE288EDE38AD9CF76EFE58CEBE188E9E086E6DC83E2D87FE6DC83E3DC82E5DE85E6DF87 E7E088E9E18CE9E18CE7DF8AEEE691EBE48CF2EB92F1EA90E5DE85E8E189E7E088E6DF87E3DC84 E7E088ECE58DE5DE86E7E088ECE58DE6DF87EAE38BF2EA94EBE38EE9E18EE8E08DE3DB86EBE38F E2DA86E1D983E9E18DECE490E6DF89ECE291EFDE96F1E097F5E598EBDF8AEFE58AE5DC7DECE383 E2D879E1D67AE5D77EEADC86E5DA86F3EC99E8E28CE8E28AEFE990DBD67BE2DC83E3DD86E7E18D EFE899EDE599EFE79FEAE398E4DD8DE2DB8BE9E293EFE89AEEE799EAE397F2EA9FF6EEA5F3EBA2 F4ECA3EBE39AECE3A1EBE498EFEB8BF4EE98F3ECA0ECE39FE4DD8CE6DE94EAE0AA5D52340D0400 857F49FFF8AEF3EB9CECE394FAF1A2F5EB9BE8DC8DEFE293F4E796E8DB89EBDC8BF5E694F0E592 F3E994F3E994EFE591F3E896F1E694ECE18FEDE290EEE192EEE192F0E394F4E798EFE797F4ED9D F9F1A0F5ED9AF5EC99F5EA98F2E695F6EA98F8ED9EF7EC9DF8ECA1FEF5A9EDE497FAEEA0FDEC9B FBE290F9DB86F3D279E7C46AE5C369FBDF83FEEB8EF7E687EFE693D1D49A37360D211908C6B87C F3E3A2EAD991FDEA9EF8E599FFE89FF4D795B28E54895E22946829BD955DF7DBA5FFE3ABFFE6A3 C6A556AF8F38CBAF5CDBC67F9589530F0A006A682AEFEDA1E6E19BE4DF9AC1BD74D5D183F5F3A0 F2F09BF0EF9EECEAA1CDCC8FE4E0A4F0ECA3D3CD80C5BF73DCD68BF2ECA2EEE89FDAD38BE4DE95 E4DE92F8F2A6F1EB9FE2DC91DFD98FEEE89EEFE99FE7E197E2DC92DED88ECDC77DEDE79DE9E399 E7E197D2CC82E7E79BE5E99CE9E79BF5E9A1F4DD99DFBD7D956A2B7D5213C69E5AFFF4ACF9E99B F5ED9DFBF5ABEEE9A9CECB96191300362C26E7DACE3E2F280E0000281E011918070A1302696126 FACEAA9B6630946118EABC6BF8D38EEAD493EBE59DDCE28BD0D87BE3E38CF6ECA5F2E7A2D4CF86 CBC98CE4E4AAEEECAEEDE09FFFE6B9B58F60C4A456F9E5B3F7F2CAEFFAC0BCBAA428211E000000 5550307F7A4BDAD69AE6E09FEEE7A2E3DA96EAE1A1FDF1B5F3E7ADF1E8AAFFE7ACDE9B61975315 DAA860FFE79EFFE9A2FFF8B0F3F0A5E7D98EE3A969D0A25EF9F8ADFDD99DC9733A4C1306311E04 A09F63F5F5C9F9F5C9F4F4CAB3B489514924352E144B4634BAB699FFFED7E5E4B6333017070400 2C290D8E8A5BEDEAB5FFFDC2EFEBACF1EDB2F8F2B9FAF4BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F1F0AEAEAE5D5D5D212121505050 B8B8B8E9E9E9FFFFFFFFFFFFCACACA8383832C2C2C424242ABABABF6F6F6FDFDFDFEFEFEE3E4E3 7D7E7D3839382121218B8A8BF3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFEDDAFEE0BEF9DCB1 FBEBD3FFFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FEF9E0FAE0 C8F3C7BAE6B9D7F0D7F8FBF3F0F1D1E1D68BDABB4BD7C053DDE7AAEFF7DAFFFFF9FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFEF8EFF1E9C4E7E0A7F6F4E1FFFFFFFCFEFDDEF2DEBDE7BD C4EFC4D9F9D9F6FEF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFCFFFC99D6983FB03E9AD699EEF3EEEAE8EAE5E5E5FBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE2E1E2CED1CED3E7D3B2EAB136AD357DCA7CE8F8E8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCF0F0F0BBBBBB7070703434342F2F2F707070BEBEBEF1F1F1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEABABAB5C5C5C2828286F6F6FDADADA F8F8F8FFFFFFFDFDFDB8B8B86464641B1B1B4E4E4EC6C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF5F5F5DBDBDBE7E7E7FBFBFBFFFFFFFFFFFFFCFEFCE2F6E2AAE2AA6FC56F51B051 92B792CBD6CBF4F6F4FEFFFEDCF0DC9ED99E6FC86F6EC76EB3E2B3FAFDFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5CA67D6C969DCCD72CFBF63D4C465 DACC6BDCCE71DBD17BD7CC81E2D8995B53225D5B33C5BF74DCD476DDD374E0D488E9DFA36E682E 3E3B08D3CF7DE9E08BE3D385EFE18FDCD279D8CE74D8CE75DFD57CE1D77FD6CC77E8DD88ECE28C E0D482DED380DFD482E3DB87C7C072797128DAD383E5E083E8E57EE6E280F7F0A3988E4F776E2B E3DD86D4D06ED8D177D5CE74E9E288EAE389EFE88EE5DE84E4DD83E7E086EBE48AE9E288E6DF85 EFE78EEDE38CDDD37CEAE18AECE38CE2D982E7DD86EDE48DE9E089E4DA83EDE48CE7DE87DED47C E8DE85F5EB92E8DE85E4DA81E6DC83E2D87FD1C76ED9CF76E3D980E9DF86F3E990EAE389E2DB83 E4DD85EEE78FE7E088E1DB82E6DE88EBE48CE5DE86E8E189E8E18ADCD57DEDE68EEBE48CE7E088 E3DC84E6DF87E8E189E1DA82E7E088F1EA92EBE48CEBE48CF0E894EDE592EEE693E6DE8BD3CB78 D2CA77E5DD8AE4DC89E6DE8BDFD784DCD481EAE18FEAD994F5E29DF9E89FE9DD8EE9DF89E1DA81 E1D87DDCD477E5DA7EDFD179D5C66ECCBD68D5CF7AE8E28DEFE994E8E28CDBD57FF2EC96E3DD88 E3DC8CF1EA9CF0E89FF4ECA4E4DC91E2DB8CE3DC8CECE596EEE799E8E193EDE599EBE398E9E198 E9E198ECE49BF4ECA3F3E9ABF2EA9FEFEA87EEE88FF1E8A2F2EAADF2EAA0F0E9A5BDB2851D1100 2A2200DBD699FBF9B2E7DE8FE6DD8FF7EFA0E2D889BCB161FAED9EFDF2A1F5E897F4E594F8E998 F2E492E9DE89EDE38EEDE38EF1E693F0E593EFE492F3E896F3E697F0E495F3E798F7EB9CF0E898 F1ED9DF4EE9EECE493F5EB99F5E997F6E997F2E694F3E797F8EE9FF7ECA0F6EC9FFAED9AFEEF9B F5E08AE8CE78E5C56EDDBC63FFE48BFAED92FEF99DF7EB8EECE88BE2E490E5E5AA85834D130E00 716837EEE1A8EDD999F5E7A1F5E89EB5954E734E0FA17840E3BD7FFFDD9BFFE8B0FFEAB8EFCA96 D2AB6B997424C19F44E3CB70F1E699F3F3B98A91620405007D7B43D3D199DCD79FE1DD9ECECB83 CECC7BDADA84CFCC79E7E398E2DD9AE1DB9BCBC47BC6C073DCD689E5DF92D9D386D5CF83E0DA8D D9D387DDD78BEAE498E0DA8EDBD589E6E096E6E096C4BE74C8C278EBE59BEDE79DCDC77DF0EAA0 ECE69CE7E197D5CF85D8DD91C7CE82D6D38BF1DF9BEFD18FC095547F5211926622F5D68DFBE395 E9DC8AE6E18DE9E59BEEEAAEA19A6C0A0000190A0538292C18080E7166629993802C2B11070E03 A8A373D4AC997C542CBB9A56EDD58BF6E3A8F3ECB9E8EAB3CCD488E2E691DFDB8CE2D09AE6D8A2 C9C78ECDCFA1E7EBC2DCDFB4C5BD92B499846A4930816732B2A17FBDBB9FE1EBBEFFFFEBB6B09C 2F2C1B181604484829DCDB91C4C073E6E391F3EE9DF4EFA2F9F1A8FBF6B1DADA9AE8D193FAC587 A55D1F9D5A16FFE196FDEFA3EDEF9FF1F3A6FFF1A8FFE2A2BA8C47F0D789FEECA58B4E24541705 8F6325FFF9C0FAF7BDDCE4AAF1F9C4D4D3A4F0E5BBFFF9D4FFFFE5FBFBCFE5E4B2EFEEBDC2C090 A19D754F4B2F040000343010A09D77F4F1C2FAF5BDF9F3B8F4EEB2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC9393934545451B1B1B 5C5C5CCBCBCBF1F1F1FFFFFFFFFFFFBABABA6869682C2C2C565656C1C1C1FFFFFFFFFFFFFEFEFE E3E4E37E7F7E424242333333959595F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAF5F8F1DC E6E0A6EFECC8FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4FBF4 CCEDCCB9E6B8E3F5E3F5FBF5FDFEFCFDFDF9EEEDC8D9D47AD0BD43DDBB4BEFDE99FFFFE7FFFFF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF7EFFFE5CBFCDEB9FADFB9FDF4E7FFFEFDFEFFFFF9FDF9 E7F6E7C7EBC6BDE7BCF1FAF1FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFAEAFFEA8CD68B3CAF3B99D598EDF3ECE9E8E9E5E5E5 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F6F6F6F2F9F2C2E8C13AAE3973CA72 D6F8D6F8FFF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F3F3B3B3B36969692F2F2F3535357C7C7CBEBEBEF1F1F1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEBEBEB9B9B9B575757373737868686 ECECECFFFFFFFFFFFFFDFDFDAEAEAE5555552323235D5D5DCBCBCBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF0F0F0C7C7C7DBDBDBFAFAFAFFFFFFFFFFFFFEFFFEFCFEFCDFF2DF80C380 3CA23C7DC67DBFE4BFEFF8EFE8F3E8ACD6AC66B66658B458B1E7B1DFF8DFFDFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD16CD8CB6CDBCC71DDCD72 D4C366E0D272E2D476D6CD73D6CB7EF1E7A56D6534403D1BBCB76DCCC568D8CE6FDED384E7DC9F 827B41383505D2CD7CE6DB89E2D285E1D280E0D57BE2D77DE3D87FE2D77EE0D57CD9CD75E4D881 E5D982E4D883ECE08AE5DB84DBD37BDDD685797128D1C97DE2DE82E5E27BEEEA89F2EB9BC8BF7C 645B17D7D17CECE789E1DA80E1DA80D6CF75D9D278D8D176D3CC72EFE88EE7E086EEE78DEAE388 DFD87DEAE389EAE38BE4DD85EDE68DDED77FDAD37BEFE890DED77FE1DA82E3DC84E2DB83E6DF87 E7DD86E9DF85ECE289E8DE85E4DA81EDE38AE7DD84CAC067E7DD84E6DC83E2D87EE9DF87E3DC86 E2DA84DCD57DDFD87FE7E087E5DE84E9E289E7E088D7D078D7D078EBE38DDFD881E9E28AE8E189 E2DB83E5DE86EAE38BE9E28AE1DA82E1DA82E9E28AE6DF87EDE68EEBE38EF0E895EBE390DDD582 E9E18EEEE693F0E895EDE592EAE28FD5CD7ADDD582F5EC9AE7D68FEAD893EADB94EBDF95EBE295 EFE998E9E28EE2DA85EADF89E4D780E7D780DDCF77E1DA86DAD480E6E08CDDD783DCD682EBE492 E5DE8DDFD789E9E196E2DA91EAE19BE9E197F1EA9AEEE797F1EA9BF4ED9FF0E99BF1E99DEAE297 ECE49BF3EBA2F0E89FEFE79EF8EDADF2E99DE8E481EAE68CEFEBA3F1EBB1F1EBA8F9F3B86F663C 180C00665C33F5F0AEEEE69BEDE497F1E89BE6DD90DFD485ECE192F9EC9DEFE293EDE091F7E897 F9EA99F6E796EFE48EE9DE87F2E691F3E793EFE593EDE291F0E595F2E797EDE292F1E697F2E798 E6E095F5F3A7E8E194F5F2A3F6EB9BFBF09EFBEB98F9E996F6E696FFF4A4FCF1A2FFF8A8F5E289 DDC66AD6BD62F2D87EFBE990F6DC82FDEA92EBDC84E2DB83E1E48BE3EB92E6EF9EDDDC9CCDC992 5D592A2C2407EAE1AEE6D499856A278C6C23A47E39D9B271F0C88FECCF8FFDE6A2D8B27AC19060 D2A070DDB374DFC572DED774E4EA86D8DB89DEDB9EE5DAB2898258201B007E774EE4DDB0D5CF9A D7D393EAE69BD5D37ED3CE77DBD582DCD487D0C77DCEC77DCEC87ADCD688CBC577CAC575E2DC8C E1DC8CE0DB8BE8E294E1DB8DE7E195D8D287E0DA90E9E399DAD48AD0CA80E9E399EBE59BD1CB81 DFD98FE9E399D7D187E5DF95E2E89DD9E197E2DC95FBE2A0F8D495A27334895818C69F59FFE99F E6D385EFE693E8E691E3E58CE4E394E3DBA17F714D0E00000500001F11124138373D392B3A3A23 B9BA92DCD7B849322E2712003C2F00463F0DD6D5A2E1E4BAC1C69CCBD195E2E1A0E1D59AFAE2BC FAEEC9E7E9BF9FA589535E482025190804001100001C00001A05000D00000809002031197A7E5F A7A480B6B587CCCB91EBEBA5E0E292D1D27CE4E38BF3F29BEEEC96DFDB89E4E294D1D694B8B26E F0CF8BC3823F9A4E0CFFD98FFDFAA9F3FBA8FFFFB3FEEDA8FFEDA9E8BC74E6BC6DFFEB9AD4B469 C58F50A15D28EAC288FAEEADDAE8A2DAE5A6ECEAB5F6E9BDF3ECB9ECECB1EFEFB1E5E5A8E7E7AE F5F5C5FFFCD9FFFFEDCDC8B4656255000000827F5FFFFFCFF8F5B9F1EBACFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F3F3F3C6C6C6B8B8B8B8B8B8C6C6C6D0D0D0D1D1D1D2D2D2CFCFCFB9B9B99595955252522D2E2D 2E302E7D7D7DDFDFDFF9F9F9FFFFFFFFFFFFABABAB4F504F3232326B6B6BCDCDCDFFFFFFFFFFFF FDFDFDE0E0E06C6C6C3F403F464746A4A4A4F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD FAFAF0EEEECBEDEDC7F1F1D3FAFAEFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFA F3FAE6C7E9C1B5E2B4EEF9EEFEFEFEFFFFFFFFFFFFF8F8E9E8E9B8DBD279D7BF4CE3CD73F2E5B2 FCF9ECFFFFFEFFFFFFFFFFFFFFFFFDFFFEF3FBF5DBF2E0B1F7E3BDFEECD8FFF9F3FFFEFEFFFFFF FFFFFFF2FAF2C6E9C6B1E2B0E2F9E2F6FFF6FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEF7F6F7F5F4F5FEFDFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF4FCF4D1F4D186D18651B650A7DBA7EAF0EADEDDDE DADADAF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEEEEEEE6E5E6EFF1EEC7E9C63AAD39 69C36FC4EBD1F0FBF6FDFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEE1E1E1B6B6B66A6A6A3A3A3A2C2C2C5353539E9E9EC7C7C7E1E1E1 E1E1E1E1E1E1E1E1E1E0E0E0E8E8E8F7F7F7FFFFFFFFFFFFFEFEFEE6E6E67D7D7D474747414141 969696F2F2F2FFFFFFFFFFFFFCFCFCA3A3A34444442C2C2C6C6C6CD2D2D2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF6F6F6DDDDDDE9E9E9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFF4F9F4 B0D4B06FB56F63C3637AD27A94DB948CCD8C74BB746CB66C88C788D8F4D8F4FFF4FEFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBD06DDED173E2D17A E3D379DECD71D4C666D4C767CFC66AD7CE7CF0E89F766E38423F19B8B36AC8C064D3C869D1C678 D8CE90857E43302D03C7C371E4DA89DECD82DECE7CD8CD73D6CB71DACF75DDD278DBD077D4C96F DFD47AE1D67DDFD47BE6DB81E5DB81DCD678E0DA868A8239B6AE64EFE991D7D36FEBE784ECE692 EBE29D716824BBB565FFFCA1E3DC84E9E28AE8E189D1CA72C8C169D8D179EFE890E9E28AE6DF87 E7E088E1DA82E1DA83DFD983E4DE88EBE58FE2DC86DAD47EE4DE88CFC973D4CD77DCD680D7D17B E4DD86EFE58EDBD17ADCD27BE4DA83DED47DEEE48DDBD17AE6DC85ECE28BE0D67FE9DF88E0D57E E9E18CE0D883E3DC84C0B961E5DE84E2DB80E5DE83EDE68CE7E088E4DD86EBE390DCD47EE5DE86 DFD880E5DE86DCD57DDED77FEFE890EBE48CE4DD85E9E28AE4DD85E5DE86E9E18DE6DE8BE3DB88 E2DA87E8E08DF0E895E7DF8CDCD481DFD784DED683E3DB88E0D685E5D588FAEAA1FCECA7F7EEA9 F3EBA7E7E29DDBD48FEBE39AE1D988E0D37EEFE086D4C76BE1DB85D9D482E3DE8CE2DD8BE3DE8C F0EB9AE5DF90C8C276E0DA90E7E098F0E9A3ECE59BFAF3A3EEE797E3DC8DF4ED9FF3EC9EEFE79B EDE59AF1E9A0F5EDA4F1E9A0EDE59CF0E5A3EEE49AEBE689EAE68DE9E59AEBE5A9E5E0A8E0DAAA 2D2512201803AEA874F1EAA5EBE399FFF6AAE9E095DDD487F5E99DFFF4A5F5E799F3E697F5E899 F9E99BF4E396EEDF8DEDDF88F2E38EF3E590ECE08CEEE290EDE291E5DA8AEBE091EEE497E9E093 EAE194EAE59DEFECA7E9E7A0DBD084FEF1A3F2E392FFEC99FFF5A2FFF4A1FFEF9DE7D988E3D684 D7C267EBD476FDEA8DFEEA90FAE58DFFF29AF2E38EEBE38FE4E28FEEF29FEDF3A3DCE091DFD690 FDFCC5B7B07F100A00756A3E695720A68B47E3C177FBD98FFFDC96E3BD7FFDD296DBAA6FA78249 C3AC70F8EDABE7E397E0DF87D3D073D2CB72C2B96CB9B070DDD4A0FBF3C590885F0E06009A926C EDE7B9C2BD84E2DE96DAD785DCD67FD7D076DCD17CF1E593D3CC7FCEC87ACBC577C3BE6DD1CC7A E0DB87D5D07EDDD886E9E494E5DF91E4DE92D4CE83DED88FEFE99FE5DF95DED88EE4DE94E5DF95 D6D086EDE79DE9E399CEC87EDED88EE1E69BEBF1A9F5ECA6F1D594E6BC7E8C5B1D85591AFBDA95 F3DF97EBDD93EAE499E4E291C6CE5EC8CD5DE6E186F3E7A262512040301009000004000045442F C0BEA9FEFBE07C7460010000969075FCFCCED3DBA4FFFFDBE0E8C0E7EECBDFE0B6D0CB9EDCCEA6 E9D0B5BFB0925A5A39000300070F033D4633858471C1B0B15A413C8D7851BBAC9F7B7C76505F42 24271005020027240D9B9875F2F0C4E2E0AECBCA91D2D096EEECB3E4DFA7EFEAB3F4F0B9C5C78C C3C784F8E9A4E7B170934E11E0B06DF3EDA2D9E195DEDB94F5DA9AFFF3ADEBC57CCE974CEFE38D F6EF9DF1CB87C77845CD8A50FEE8A2E8EE9FEAF1AADDDCA0E6DBA9E7E2A3D5D58BD7D78CC9C983 EAEAABE3E3B2ACAB8B74725F99958DD2CFC876766B030100908C5AFFFCBFF2ECAEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEE6E6E68B8C8B6B6C6B696A697E7F7E9090909191919090908C8C8C6565653A393A1C1C1C 2A2B2A575857A8A8A8F1F1F1FFFFFFFFFFFFFFFFFF9F9F9F3A3B3A3738377C7C7CD4D4D4FFFFFF FFFFFFFDFDFDDCDCDC5C5C5C3A3A3A515251A4A5A4EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFDFCFCF6EFF0CEE6E6AFF2F2D7FCFCF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFD FDFEEFEDF8D5C7EABAB8E5B9F0FAF0FEFFFEFFFFFFFFFFFFFEFFFDFAFBF0EBECBFD6D376D8C566 E3C67AF5EBD0FDFAF3FFFFFEFFFFFFFFFFF6FCFCE2F4F3C6E6E3A8F0EDCAFEFBF6FFFEFEFFFFFF FFFFFFFFFFFFF5FBF5CCEBCBB2E4B1D1F7D1E9FDE9FCFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF5FAF5E7F2E7D9E4D8D7E1D7F1F7F1FAFDFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEEDF9EDB5E4B481CC7F69BF66B7E1B7E9EDE9 D5D4D5D2D2D2F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE1E1E1D1D0D1E4E6E4CAE9C9 3FAF3E63BC70B3DDCDE8F4F3FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDC0C0C07272722929291919193434346969699D9D9DAAAAAA ADADADADADADADADADADADADAAAAAABFBFBFE8E8E8FFFFFFFFFFFFFEFEFEE1E1E15E5E5E353535 4C4C4CA4A4A4F4F4F4FFFFFFFFFFFFFCFCFC9D9D9D3B3B3B3030306F6F6FC8C8C8FCFCFCFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF4F4F4F8F8F8FEFEFEFFFFFFFEFEFEFDFDFDFDFCFD F9F9F9E1E8E1B7D4B760C56044C04442BD423EAE3E54AC548DC68DC8E4C8F2FAF2FEFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED372E2D479 E2D27BE1D179DCCB70DCCF6ED6CA68CCC363D1C870DED688726B2F3C3912B1AA63C8C165DCD273 D5CB7CDCD1939A94582A2700B9B464E4DA89E2D089E5D584E1D57BDBCF75DCD076DFD379DDD277 DCD075DFD479E0D479E1D57BE1D57BD4C96EDED877E5DF89A69E557D752CF2EC97E7E37FE3DF7C F2EC96F9F1A8857C39A39B4EF4EE96EFE88FE6DF87E4DD85EAE38BE7E088DED77FE4DD85E9E28A E3DC84E1DA82D4CD75D4CE77DAD47EDFD983E4DE88E5DF89DDD781DCD680DDD781DAD47ED0CA74 DED882E3DD87DFD67FDAD079D6CC75D9CF78E2D881E9DF88D5CB74E2D881E1D780E2D881EDE38C E7DD86E2DB88E6DE8AE2DB83CEC76EE1DA7FE6DF84EAE388EAE389E3DC82E1D984ECE491E3DB86 E8E08AE8E189E6DF87DED77FDAD37BE1DA82E5DE86E3DC84EBE48CEBE48CE4DD85E7E089E1D986 E3DB87ECE490E9E18EEEE692F0E895E0D884DED682DED683E7DF8BE4DB88F7E996B9A95C594D06 726A3ECCC58EE1DCA5E9E4AEEAE5A6CBC47BDCD17DDDD073D8CE6FE5E08AE7E290E9E492E2DD8B E1DC8BE9E396E1DB8FCEC87EEBE49CEBE49CECE59FE9E298F1EA9AE5DE8EE3DC8DEFE89AEEE799 ECE498F2EA9FF8F0A7EFE79EE9E198F1E9A0F0E7A1EFE59CEDE893E7E38ADFDD8CE5E3A1F0EDBC 9893701D1600332C08DCD79AF4EEA6F1E99FF5ECA1E9E095EEE599F7ECA0ECE094FFF2A4F7EA9B F8EA9CF9E99BF8E89AF8E997F0E189EDDE88E9DA85E5D884E6DA87EDE190EEE393EEE394F2E99B E8E093EBE397F5EFACEFEAAC746B2F756724FFF7AAF1DA89FDE590FCE892F2DB86EBD883E3D37E E5D782FEEB97F1DB85F8E691FDEE9AF1E48FF1E693EFE894E9E290F8F1A1F6EEA1F0E79AF7F1A6 F8EA9FE5D697BAAF7B231C081B1000D0BE88F8DD99E5C172E3BE6DF5D086C1A05CBD9B5CDDBD7E F8E09FEFE29BE2DA8FF0EC9EF0EA9BDCD386E2D88BD3CC83C1BE75D5D48EE9E4A8F8F0BD77714D 130C009B976CD9D7A2CCC989D2CF83E3DE8AE0D980D7CD73E1D882D5CF7FDCD688D7D281CCC775 D2CD78CECA73D8D37FD2CD79D7D281DBD686D2CC7FC2BC71D7D188F2ECA2F1EBA1EDE79DDED88E DCD68CDAD48AF0EAA0EBE59BD0CA80D1CC82E2E59BE6E99EE4D790EECF8DDDB475734507AA8345 FFEAA9EEDF9CE6DF9EE9E5A6E3E29DDCE384E2E684E7E08DEBDA97D0BC89C5B48D9A8F71232013 000000130D00463D34483C340B01003F3A277173566A734434410C363F0F50542C4B49273D3415 403315281A010F04001D180B2F3123394026424A2D4B49284C3A2B270C03533D0B524229464334 46522E32341D0F0B040C07040000004F4A389F9A84A8A28AA39E83B4AD91D7D0B3E1DBBCDFDAB7 DADBA7FFFFC7FEF7B6FFE6AAB4844DA78048FDF4B9E9E8ACEFE7ADECD99EF3E6A3F2D48AE0A85A E9DE88E4E491F8E098F1AC73B46C30EBBC73FFFDACF1EEA1D7D795BFBC83C7C57FD1D080B0B060 CDCD82B9BA7A2B2B0439381A6F6D5C44423E14130F21231D090901130F00DAD69EF6F0B8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEE7E8E79293926768675151514949494141413434342C2C2C2E2E2E3333333B3C3B 474747737473AEAEAEE0E0E0FBFBFBFFFFFFFFFFFFFFFFFF8F8F8F1E1E1E292A297A7B7AD4D4D4 FFFFFFFFFFFFFDFDFDDFDFDF696969313131252525565756A0A1A0DEDEDEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9E1F0F0C0EAEAB7EFEFCEFBFBF3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFEFBE5F5DECAEBBDC5EEBFD0F4D1F5FDF5FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFF9FBEEEBEBC0 E1CD82DCB75AE5CA84F2E4C0FDFCF5FFFFFDFCFCE1F0F0C0E9E9B4F0F0CFF7F8EAFEFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFDFBE8F6E8D2EFD2BDEABDD7F3D7FAFDFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF9FCEBECEBAED6AE70C16F61B86077C076BCE3BC E4F5E4FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDE6F7E496DC8F70CD666ECA63BCE7B7 F2F6F2EFEDEFECECECFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1EBEAEBF1F3F1 D1EBD05BB85A6FC175ACDCB8E3F3E9FCFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCACACAC4D4D4D0E0E0E0000000E0E0E2727273C3C3C 3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D363636676767C7C7C7FFFFFFFFFFFFFEFEFEDBDBDB424242 242424535353AEAEAEF5F5F5FFFFFFFFFFFFFDFDFDACACAC4F4F4F202020343434727272BDBDBD F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5D9D9D9E6E6E6FCFCFCFFFFFFFBFBFBEEEEEE E7E7E7E9E9E9EEEEEEE8F0E8B9E6B995D9957DCD7D7FCD7F9DD89DCAE9CAF0F7F0FCFDFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCD172 E1D37BE2D27DDFCE78D7C66CE3D675DED26FD6CE6BDCD478E7E18C8882442A2703A19A55C1BA5F DFD575D6CB7CDED494B3AC6F211E00A49E4FDED484E2D18BE0D081DFD178DCCE75DCCE75DFD178 E1D477E3D67AE2D579E5D87CEBDE82E8DB7FD6CB6ED8D36FE9E38BD2CA81685F19DFD986EDE886 F6F28DF1EB93FFFEB5B6AC6A7A7328E8E28EDDD57EEBE48CE2DB83E7E088EAE38BDAD37BE8E189 E5DE86DCD57DDBD47CD8D179E0DA83DAD47EE0DA84E0DA84DCD680E0DA84E4DE88D8D27CDDD781 DBD57FD4CE77DBD57FDED47DEFE58EE4DA83DAD079EDE38CE0D67FE1D780DCD27BD4CA73E5DB84 E7DD86E7DD87DED683EDE591E3DC84EBE48CE2DB80EBE48AE5DE83E6DF85E4DD83E2DA86EDE591 E2DA86E7E089F2EB93E9E28AEBE48CE6DF87DAD37BDBD47CE1DA82EEE78FF1EA92EAE38BEBE38E E7DF8AEAE28DF0E893E6DE89E7DF8AE0D883D9D17CDED681D7CF7AD9D17CDAD07AD7CC73F2E591 C7BD765852281F1B00373521B9B589F2F0BCCDC887DAD282DAD072DED473E1DC86EBE694E9E492 E1DC8CE2DC8FE5DF93E5E095E4DD95ECE59CDCD58DECE59FF0E99EE6DF8FDED787EBE495ECE597 E9E294F2EA9EECE499E2DA92E6DE95EEE69DE8E097ECE198EBE298ECE59ADEDB85D4D47CE2E399 F4F1C759523F0B0600666127F5F1A9F4EEA3F3EA9FEFE69BF1E89DEFE79CF1E69AFBF0A4FCEFA1 FAED9FFFF2A4F9E99BEFDF91F1E290F3E38BE7D981E6D881F2E28DEFE38FEFE391F2E797EEE596 F0E899EEE799F6EEA4FFFCBE756E3643370ACBB97AFFF7AEFDE597E8CC79EACF78E0C56FE9D57C F7E58EFFF19DF8E79BF7E39CF7E99FEDE399E6DF93F7F0A3F3EC9DFCF0A2FBE79BF9E79AFFE79C F9DD90BDA4559B86438B7D48534A26302500F0DDA7FAE19CFAD784E0BE67D3B260EACE85E8DF98 D1D68ED6D287E6D789F0D98CF6DC94F8E3A0EDE1A1E8E6A3DBDF94D8DE8DDAE187E4E494E1DE97 F9F6B8625F381A1800838551D3D398D2D38CD2D181D2CF7AD6D077E0D983E0DB8BECE798E6E18F D5D07CDBD77FDEDA81ECE88FCFCB75C2BD6AC9C472BBB567BCB669E6E096F0EAA0E8E298E9E399 E0DA90E2DC92EDE79DE9E399E2DC92D6D086D1CB81E4E599E8E69AEEDD95F1CE8CB38A4A795012 CFB071E4D394FBF6B8FDFBC1FFFECAF5F1BEE5E6B3BFBC88B9AA7A9A83574D32183520143C311E 252304282610362E1F2E1D151806001708003E33192D280A7D8050ADB3759CA163B9B786C8C2A1 D4CFB646412104000061592AD4CA94EDEBBDD2D4A6DADEAAD7D298E3CFA79274499F863ADCD5A9 D6CBABCDD2A0C8CAA7BEBCA5A7A490A39D8C262017030000130C09484132312A1A2D2712342E17 3834205B5E307D7C499C925CD6C995BAA17493784FFEF0CBFFFFD8F7EABFF3EAB4FFFABCFBE39B D39F52EDD585FFFFB2FBEDA5FED392CD8A48C5823AFFF2A1F0E293E2E59AB9BF7EE1E29ADAD889 D4D285D1D087B6B778303009333213908F7ECCCDC2C7CAC0484B3F0205010A05006A6241F3EABD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF0F1F0BDBDBD9A9B9A8181816B6B6B5858584949493F3F3F4343435F5F5F 808080979797BFBFBFEAEAEAFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFA8A8A85252525D5E5D9C9C9C DFDFDFFFFFFFFFFFFFFEFEFEEAEAEA9B9C9B6667664B4B4B5F5F5F979897D9D9D9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FBFBDDEDEDB9E9E9B6EFF0CEF8F9EAFEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFDFAD5EED3B4E3B2CAF1C9E9FFE9FAFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFAF0EFDFB4E3C578DEBA61E8CD8CF5E8C7F9F5D6F3F2C5EBEBB9EBEBC3FAFAF1FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFBE8F6E8B3E2B2C8ECC8F0FCF0FDFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4EFE4B4D4B373BD7247B34546B44459BD57 7CCA7BB9E1B9F2F6F2FEFDFEFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDE2F5E083D47B6DCC667FD37D C7ECC7F5F8F5F3F2F3F1F1F1FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F4F0EFF0 F5F6F5DBF0DB7FC77E7BC77A9AD59AD9F0DAFBFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDBFBFBF7676764D4D4D3E3E3E3D3D3D404040 4343434343434343434343434343434343433C3C3C6B6B6BC9C9C9FFFFFFFFFFFFFEFEFEE4E4E4 6D6D6D5B5B5B858585C8C8C8F8F8F8FFFFFFFFFFFFFEFEFECBCBCB8B8B8B565656505050717171 B2B2B2F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3D4D4D4E3E3E3FAFAFAF5F5F5ECECEC E7E7E7E4E4E4E7E7E7F3F3F3FCFDFCF9FDF9E3F2E3CAE7CACDEFCDE1FAE1F2FDF2FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E0D478E0D27AE2D17FDCCA76CEBD65D9CC6BDACD6AD5CD68DCD476E8E2899B9552332F03A49D58 C6BE63E5DB7BD5CA7CDFD594CCC588221F009D9849E0D588E5D48FD9C97BD9CB72DBCD75D8CB6F D7CA6EDDD074E1D478E2D579E7DA7CE8DB7DE4D779E3D878D5D06ADDD87DDFD78E786F2AC0B967 E9E583E6E37CE9E489F6EEA4D6CD8A615A0FDDD685D0C872EFE890F8F199F2EB93E9E28AE3DC84 EAE38BE3DC84E2DB83DFD880E2DB83F3EC95D2CC78D2CC79E4DE8AE6E08CEAE490DFD985D0CA76 DDD784E1DB87D2CC79D9D37FE2D982EBE18AE1D780E1D780EEE48DDBD17AD9CF78D9CF78CBC16A E2D882E7DD86E5DB86E5DD8BEEE692EEE78FE6DF86ECE58BECE688E5DE81E7E086E9E288E8E08B F2EA97E9E18EE3DC85EAE38BEAE38BE8E189E7E088E4DD85E4DD85E9E28AECE58DEEE78FECE58D EBE48CEBE48CE8E189DFD880D9D27ADBD47CE5DE86E7E088F1EA92EAE38BE9E28AE9E088E4DA7B D6CE76DED78DD4CF99827E55141302151205ADAA7EEBE7ABD8D283D3CA6BDDD573ECE791EBE694 E6E18FECE797EFE99DE9E299EBE49CDFD892E2DB95E5DE98EFE8A2E6DF94EAE394E0D989E4DD8E EEE799E9E294EAE397E7DF94E0D88FE3DB92ECE49BE5DD93E4D88CE8DF96F1E8A4E2E08AD6D87A EAEC9ED0CCA8221C0E171100B5B26FFBF7AAEFE99BEDE499F2E89DF5ECA1EDE499F2E79BFEF7AB F2E499F3E699FDF0A2F6E699ECDC8FF1E290EFE088E8D882EBDB85F7E893F1E591E9DE8BF2E696 F1E899ECE498F2EA9FFAF2A8CFC88A2B2102DBD59CFFF4B4FCF5AFE5C77AE2C46FF8DB83FAE187 FDE58BF3DF86E7D681FFF1AFFEF1B4F9F0B0F3EEACEFECA6EEEAA1F3E99EFFF5A9FFE79CFDD78B EDB46ABB87389A7522E8CE88F0E0AAABA176281D0198864DE9CE86B08F38C2A146FCF09AFEFDB2 EEDC97C6BC7AC4BE70D9D77FE8E98EF9F8A7E8E5A2DBD69EE4E0A7E2DD99DDDB86DCDA78DBDD79 EBEF92DFE295EEF2B47B804D0C10008A8F56B7BC7BCCCF84CFCF7FE0DF8BF0EB99E7E191D4CE7F D6D17FDED984E5E188DFDB82DAD67DD5D17AD3CE7BDBD684C8C274CEC77ADDD78DE6E096E3DD93 EFE99FF3EDA3DFD98FE8E298E0DA90DFD98FDFD98FD7D288DBD98DDFD98BFAE69DF0CC8A815818 926D30F1D89BCBBF84BCBB849B9B6979774B615B3724220B1E18021B0903573D195B40138A763D B5AF6DD9DB95DFE39ED6D293E9DBA4957F4B836B36F0DCB1EBDCB3FAF4BFE0E097CBC87CCCC689 FCF2CE807A600303006D763DEFEDA9F3E29CDBD294E2E09EDDDD91D0C875CEB877A78845B99B3A E6CC89D8CA95C9CB82DDE39BE3E8A6C7CA8EFDFECECFCFA44E4D23100D029B9971FBFACEDBDAA8 D5D59EA8AB757B7F5351461F3526052E2707342F072719018A6955BDA08BE2D6B5F4F6C6FAFAC2 F5E7A4B88B3EF5D085F3E097F3EDA2FEE69CDBA05AB4601BFFC779F9E897E7ED9FCBD894E3E7A2 E1DD94E7E49BDAD895EFEFB2E7E7B7CCCBAB5D5C492F3122111504262E181F250A120D00302717 CDC3A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAE9E9E9DDDDDDD3D3D3CACACAC2C2C2BCBCBCB8B8B8BABABA C6C6C6D4D4D4DEDEDEEDEDEDFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0C2C2C2C6C7C6 DCDDDCF4F4F4FFFFFFFFFFFFFFFFFFF8F8F8DDDEDDCACACABFBEBFC3C4C3D7D8D7F0F0F0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFEF2FAF9DAEEEFB9E2E5A1E7EAB8FBFBF2 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFDFAD2EDD1B2E2B2D4F1D4F9FFF9FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFAF4E6F0E2BDDDC16FDABD66DEC87DE2D995E8E7B0F0F1CFF8F8EBFEFEFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEEBF8EBB2E1B1BFEBBFE2FCE2F7FFF7FEFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFFFFFFBEE2BD6ABD695EBA5D81CE8095DA94 8AD7894FB84D8BC88ADBE3DAF7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFDFEFDDFF2DF78C87477C87E A0D9B2DBF2E5F0F2F1DEDDDDDBDBDBFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE5E5E5 D7D7D7EAEBEAE6F6E6A1D8A07EC97C7BC679C9E8C9FAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE8E8E8CFCFCFC1C1C1BBBBBBBABABA B9B9B9B9B9B9B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B6B6B6C7C7C7EBEBEBFFFFFFFFFFFFFFFFFF F5F5F5CBCBCBC5C5C5D5D5D5ECECECFCFCFCFFFFFFFFFFFFFFFFFFEEEEEED8D8D8C4C4C4BFBFBF CACACAE1E1E1FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAECECECF2F2F2F7F7F7DDDDDD D7D7D7EAEAEAF6F6F6F6F6F6FBFBFBFFFFFFFFFFFFFAFCFAF1F8F1F2FBF2F9FFF9FDFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE3D97DDFD37ADED17AD7C973C7BA61D9CD70D8CD6FDDD475DDD479DCD47BA29C573C390C ADA964CAC26BE5D97DD8CA7CDDD38AD6D08B2E27008C8542E0D782DDCE82E2D383E3D87FE3D67E DDD077DED47AE4D87FDDD077DED47AE2D77CDDD176D8CD73E0D579E5E079EBE787EFE79A928947 99914AE8E28ADFDB7AECE888E3DD87DDD58B5E5511BAB26BEFE993EFE98FEFE88FEAE28AEFE78F F6ED95F4EB93E9E189EBE489E2DC80DDD77AE8E28BE1DA89EAE392E7E08FD8D17FE2DB8BD9D381 D6CF7EE1DA8ADFD889DCD587D7D081E3DD8ADBD57ED9D27CE7E08BECE38DDFD57FE2D884ECE28C D9D27CDAD37FDDD680E0DA87ECE498ECE497F4EC9BDDD67FF1EA90EAE486EEE688ECE488E8E087 E7DE8AF4E899F4EB9AEEE690EAE48CEFE991E5DE87E1DA83E8E28AEAE48DEEE891EDE78FEBE48D EAE38CE6DD88E6DC89E1D783DDD27EE6DC89EDE48EEADF8BEAE28BEEE48EE9DE88EEE58FF1E68E F1E48BEBE088E2D988E5DF9EBEB9901E180D070200686543F6F3B1E1DF87E1DE7BE7E181EDE793 E3DC8BE0DA8BEAE397EAE498E0DA8FE3DE93E8E399E3E194DCD98BE5E394ECE796F6EF9EE6DE8E E2DB8CF7EFA2F5EDA0E4DB92EDE49AECE49AE6DD92E7DF92E4DB8EE1D586EDE094F4EAA0EFEC9A DFDF88F1F3A8A9A190010000343106EBE99DF2EF9FEFE89BEFE194F4E699F1E497F5E89EF4E89E F4E89FF0E59CEADD94F1E49AF5E69CF6E69BF7E99EEEE397F2E599F4E699F6E99AF0E493EBDE8E F0E495E8DB90E4DA8EE9E097F0EBA5594F17AB9E5EFFF4B2DBBB75E7C378E4C777F4E08EF8F19D EEE995E9E08DF2E292F9E599F4E09CFDEDAAF7ECA5F0E59CF9ECA1F9E399FFE7A1FEDB96D09E58 9A6921AA7B32DCB166FFDD92D8BA6DFDF4AEF2E9B1251707402F10CBB780D9C377F5E58BFDEF94 EBD88AF9E79FE4D18CE5D88AEEE894ECEC94E5E693E6E49AE5E09AE7E19BE2DB8CE1DC7EEEEB84 E9E783ECEA8DE3E18EE2E097F2F2AF78794B393C076C6E34E3E5A3FAFBB9E8E7A5DFDD96E9E491 DED882E6E288D7D277D1CC70E4E084E6E088E5DE89E1DB89E6DF92E2DA8FE7E095D5CE81E3DD90 E4DD94EDE69DEDE69FD3CD85DDD992E3DF97DDDA90DDDB90E4E398EAEFA9EDEEB1EFDDA6C4A572 4F2E07665126584E1F3E3D0441411059582A72733C828551BBB791DDD5ADF9E9BAFFF7C6B5975A DEBF76FEF9ADDFDE8BD6D982E0DE94FFEBA77B5A179D7F3CFDE4C1E8D4BF7E755A3C3C0BD8D898 F2EDBE9085670C0400727041EEF3B1E6E192F2E393EADE97E7E191EBE58CEADC87D8BE76906E23 BC9E3BDBC177DACA87DFDD8AC7C77BCBCA84CFCE87C8C682EFEDB1F3F0BD666238120C00BAB58D F9F6C8F2F0BAF5F2BBFFFED1F3E8BFEDE4B7D9D6A6C1B589593D17784A2B6E482E534520454A23 4446227D70448B7039D9C594ECE9BEF7F5CAF8ECBDF3C796B16C36CC8B4CF0CC86DDD68DE5ECA7 EAEEA7FEFEB7ECECA5F2F1B1FBFBC1DCDAA88C8C6D3F3F1F494A2672764FBBC095ECEFC54B4832 0000002A2614FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6F6F7D0E5E8A1E3E5A1 F1F2D4FAFAF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFDFAD2EED2B3E2B2D4F1D3F8FFF8FDFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5F7ECC2C87FA3B24C9AAF40BDC96FE6E8B3F9F9E7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFEEBF7EBB2E1B1C0EBC0E2FCE2F7FFF7 FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFBEEF9EE9ED79D4BB34A6FC36EC6EBC6 E0FAE0C3EEC25CBE5A74BE73B0D1B0E6EFE6FEFEFEFFFFFFFFFFFFFFFFFFFEFFFEDCF1DC65BC63 79C683BBE4D1ECF9F8F1F3F2DEDDDDDCDCDCFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC E6E6E6D8D8D8EBECEBEBF9EBB3E2B275C67458B757BAE1B9FAFDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAEBEBEBE6E6E6E3E3E3 D3D3D3DADADAF3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE1D87DD8CF74D4CB70D3C96FCBC168D4CA70D3C972E0D67EDFD57DDBD179B2AB67 2A280095914FBFB764EDE087EBDC8CDAD07DDBD5874D401D746C32E3DC82D3C875DACF7BD6CC75 D8CD76D5CB74E3D982EDE38CD5CB74D8CE76E2D881E7DD86E2D881D6CE73D4CF67E5E27DF1EA98 C9C07C877E3DEFE89BE3DE81DDD975E8E483EBE4927A7032908649F2EE98F6F196F0EA8FEFE58C FAF096F6EB92F1E68DEAE186ECE589E9E585E7E483EAE68DEEE796EFE898E8E190E5DE8EE0D989 DCD585D9D282DCD588E0D88DD5CD84CCC57BC9C473C8C671D3CE7ADCD783DFD784E7DC8AE1D684 E5DB88E5DF8BDAD581D7D37FE4E290E4DB94E1D992E6DF91E3DC8AEBE48BE5DE82EDE486EFE68A EDE28AE9DD8AEBDE90EFE594EFE893EBE58FF0EA94E8E28CE2DC86E6E08AE5DF89E3DD87E3DD87 E4DE88E6DF8AEEE491E9DC8DE4D888E8DB8CE8DB8BE8DC89EADD8CF1E693EDE18DE9DD89F0E490 F2E693E9D98CE1D37FE2DB7CF9F29FE7E1A9383114040000453F25F1F1AEF3F399EBEB8BDAD67A EEE895E5DC8DE9E091EAE395E6DE93E6E094E6E294DDDA8AD9D985D7D981DCDF86E1DE88DDD683 E3DB8AECE395F5ECA1EFE59DEDE39BF5EBA3ECE397EFE698EDE594DCD381ECDB8FE9D78AE8DB8A EBE398E3E093FFFEB87A706F0600005F5C22FAF8A4EEE899F2E79EEAD98BF9E899F7E799FEF0A5 F6EBA2F4EAA2F1E7A1E9DF98ECE19AF5E8A0F3E29CE7DB97E3DB9DE8DF9DEDE29EF1E39BEFE195 EDDD8FEEDE90F6E69AEDE096F7EBA3CCC37E5E500BE6D186C2A558E5BE6EFFDE8BFCE694E6DD8D DEE395DDE79CEDEFA8FFFCB6FFFBB5F8E598F4E292EBD887E6CD7CFCD588F9C77ED59B559E601D B07735D5A965D8BD75FFE9A1FEE69EF6D985EDD984D6C67F7465391F110AC8BD97EDE4A2EBE58D F7F094EDE192E7D88CE4D387ECDB8FEADA90E9DB91E4D78CE9DE91F7EE9EEDE792D6D176DDD87A F7F593FEF79DF2E690E2D883E0D583F4ED9DEFE99CD7D18B3F3B0E413F0BD1CF98F6F4C4E5E3AA E3DE88E2DC7DDDD67BD5CE72DED77CF2EC93E6DE89E7DF8BEEE696F2E89AF1E79CF0E798E7E08C F8F0A1F6EEA0DBD48BDDD894E2DE9CE5E1A1EDEAABEEEDACFCFDBAE3E3A0A6AF7560663734220C 2007022108006A6338999F6FB3B77FDDD99EEBE7A6D6DA92C8D286ECE8A3FBEEA6EEDE92EEE29E A8843AE7B868F2E19BE2DA8AE1DD89E3E19FEDCC936E3E00AF8F3FF8DCBE412D2B070100000500 858B59C8C5A810080452491EF0EBA5E7E496E3DD88EAE088E6DC92EBE48EE9E180E9D789E1C57F 937628C7AC52F8E89DF2E199DFDA83E4DD9BEBE1A4E7DF99E8E097E0D993F2EBB0EAE2B5473D22 362C0DEDE6C2ECE9BBEDE4AFF2DFA9E6E0A5E3E4A6E8E6A5FDE1A49A682DD7A266FEEDB2E1CE9A D0D2A9A7AC909B987847380E2E260628280F464734988C77CEAE91A97951C58F60F5CB96E2CC92 E5E2A8E4E6A4CDCE89F4F4B3E1E1A666652F1816006C6A3FB5B381F0F0B9F8F8BCF0F1B0EAEAAE E8EBCF303326000300FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1FAFBD9 F0F0BCE6E6AFF0F0D2FCFDF6FEFEFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFDFAD3EED2B0E2B0C8F1C8E9FFE9FAFFFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFFFDF4FBF4D8EED785C57A54B0464AAE3A9FD383F2F7D4FFFFF4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEBF7EBB2E1B1CAEBC9F4FCF4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDEFF8EFBCE4BB87CD866ABF69A2D6A2 EBF6ECF7FBF7E0F2E0A5DAA47DC77C74C173C5E6C5F4FAF4FCFCFCFCFCFCFFFEFFF8FAF8CEE7CD 45B0436AC56AC4EEC6F2FEF4FBFCFBF7F7F7F6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF9F9F9F6F5F6F7F8F7E7F5E7B0E0AF64BF633BAD39AADBAAF4F9F5FFFEFFFEFEFEFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2CDCDCDC2C2C2 C6C6C6E3E3E3F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE0D77BD6CD72CFC66BD3CA70D8CE75D4CA71DAD078D5CB74D6CC75E5DB84 C2BB76282800979251C5BD6ADBCD74D9CA79D3C974EDE7985E5130655D29E5DE84D7CC78D9CE7B DAD079DFD57ED6CC75DBD17AE5DB84E8DE87E0D67FDAD079E2D881E7DD86E4DC82D6D169DDDA77 DDD683F1E8A3827A35D5CE81ECE78BE6E27FF5F18FF9F2A0B5AC6C605718EBE792EAE48CE3DC85 E9DF88F1E690E7DB85E9DE85EBE088EAE388E4DE81E2E081E6E288EAE391EBE492E4DD8AE0D987 DAD382DBD483DDD686DCD585E0D98BE4DC90DAD386C8C372CDCA73D4D078D7D17BDDD580DFD580 DBD17CDBD27CE2DC86E6E28BE1DE86DFDD89DBD38BD7CF87DFD88AE0DA88E8E18DE3DB84EAE088 E9DF86ECE28BEFE290ECE08EE8DE8BE2DB85DFD983ECE690ECE690E9E38DEBE58FE3DD87DBD57F D9D37DE0DA84E3DD87EEE491E7DB88ECE08EF7EB99E7DB88E6DA88EADE8CEBDF8DEADE8CE7DB89 EADE8CEDE191E0D290E5DB8DE1DD76F2F284F2F4999B9A5F0702000B0400948E70CBC590DCD991 E3DE8DDFD682DFD783E7DF8EE9E191E3DB8DE2DC8EEEE99BE5E190DDDB88DEDE87E0DF88D8D47F DDD582EAE291EBE294ECE398EFE59DF0E69EF5EBA3F4EB9FF5EC9DE8E18FE5DC8AF6E79AE1D083 F1E594EBE397E4E196ECEAA9342A28140C00AEAB69F4F29EE9E392EDE298E5D586F7E798F6E99A FBF0A4F0E79DEDE59CF7EFA7F2E8A1F3E9A1F6EAA2F1E39AE9DD98E9E0A1E7DE9BECE19BF3E59B F5E497FAEA9CF3E395F9E99CECDF95FFF6AE8479378E793BDCC17C5F4A07F1E994F0E28BF0E48D F0E394ECDF98F0E4A2F7EEA9F4EBA5EFE89BE6E693E8DE8BEACF81FFD58BFBD38CCE8F477F4607 DBAE62FFEB9FFFEDA3FDE197FFF1A7F8DD8FDFC56AC1AD50DECF81DED0A00E02007F7853F4F0AB F9F59DEBE589F8ED9BEDDF95EBDE93F2E19AE8DA94E9DC98EEE19EE9DC99EEE49EEDE39DE2D88E E2DA8CE8E090EEE490E4D884EDE28EEEE390ECE493E9E295EDE69EC3BE793A3717141000A4A071 F1ECB4DFDA87E4DE86EAE48FE3DD8BDBD484E2DB8BEAE394E8E290F0EA95EFE992EAE58AE9E487 DFDC7DE4E085ECE893EFEA9EF4EFAEF1EAB1F4EEBCD5CFA1ABA37B7771493A32102D2F0A57551B C3A879956F42957446F6ECB8ECECB1D5D393D6CB8BE0D590D9D88BDAE090E4DB92F0E093E5D483 E3D38CA77F31EFBA69FBE59EEFE491F0E892EFE8A6FDD7A0865410B69638F7DEAC33230F0F0A00 050E007D86484E5028110E05D2CD90EFED9CE5E38DD4D276EAE489E5DE91DCD77DD9D571E4D685 EAD48AB19745BCA447F7E89AEFE497E2E185E9E496E4DF92F2ED99F1ED93EDEB94E7E497F6F0B1 C9C48C161006827F46F4F4B2F8F2A8E5D487CFC976D7DB84EAE591FFE795AA7627A86F23FDDA87 F2E292FBFBB4EAECB0F4EDABD1BA6DD6C783CFCA948B885D4939162F0D013A0B0075421ED6AF8B F0E8C9F0EDD0F4F5C7F8F7BFD5D49E504E1C32301BD3D19EFEFCCBFDFBC7E8E7ABEFF0ADFCFDB7 D7DA92E9EABA888862343413FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB FFFFF2F9F9E2EFEFCDE8E9BAE8EBB7F9FADDFFFEF2FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFAD3EED2B3E2B2D0F1D0F3FFF3FCFFFCFFFFFFFFFFFF FFFFFFFFFFFFFEFFFEF9FFF9E4FBE4AFE2AF7BC77A60B9606EC06E91D190CEEBC5F9FDEDFFFFFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDEAF7EAB2E1B1CBEBCB F7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F4D5E5D57AC67866C0657FC97E B8DBB8E6EAE6ECECECE2E8E2C6DDC67EC37D4CB34B97D596CAE4CAD8DFD8EAE9EAF7F6F7DBDDDB A3BDA235A53460B55EB8D5B8EEF2EEF4F5F4E6E5E6E4E4E4FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDECECECDEDDDEE3E4E3DBE9DBAEDDAD61BF6032AA328FCF9CD6E9E4EAEDEFF4F3F3 FDFDFDFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E3E3E3 DDDDDDE0E0E0F3F3F3FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDAD176D6CD72D1C86DD7CE74E1D77EDBD177E7DD85DAD079D4CA73 E4DA82C7C07C4241147D7838B7AF5BDACD73E8D986E8DE89F0EA9B5347274D451EE0DA7FD9CE7A DCD17DD4CA73DBD17AD6CC75DED47DE3D982DFD57EDAD079D6CC75D8CE77DCD27BDED67ED5D06A E7E380E6E08DF4ECA49E9550B3AC60F3ED94ECE886EFEB8BF4EE9BE4DB994F4604CECA77EAE48F E1DB84E5DB86EDE18CE8DC86EDE18AE6DC84E3DC83E3DE83E1DE82E3DE84E9E38BE8E28BE0DA84 DDD782DBD480D7D17FDAD481D6D07EDCD585EBE493E1DB8BD4CE7BCECC75D1CC75E0D883E9E08B D8CD78E0D681DED580E2DA85E1DB85D6D47CD3D17CDED68BDCD489E6DF92DFD88BE6DE90E8E090 EBE090E4D987E5DB87ECE08CEBE089E6DC85E2DB86DFD983EBE58FECE690E8E28CE9E38DE7E18B E6E08AE2DC86E1DB85E3DD87E6DD88E7DC87EDE28EEFE491EADF8CEBDF8DECE190E8DC8BE8DC8D EADE8FE7DB8CEADF93F1E5AEF1E9A8E4E389ECF082D3D96FEFF3A19E9D6C423C2B0200002E2713 BCB781DDD88DD6CE75DFD67EEFE68FF0E893E7DF8EE5DE8FEEE799ECE697E3DF8EE0DC89D6D27E D2CE7BE8E08EF3EA9AF2E99BF1E89CEEE49BE9E096EDE499EFE69AF2E99BE4DD8BEBE291F7E99B E5D588EEE492DED68CF1EFA7C9C78C0C040029220CE0DF9CF1EF9AF1EB99EDE196F2E494FAED9D EEE594F0E89AEEE69BF3ECA2F2EAA2EEE59DEDE39BF1E59BF3E59DF3E69EF3E7A4F3E7A2F3E49B F2E296F4E394F9E796FAE998F9E89BF1E298CABE765D500EE3D495C9B6747C7029F5F4A0DBD880 E4DC88EEDE93FAE3A0FFF3B4FFEFADEDDD96ECE192EFE090F9E093F6D78DCB9850AA72279F7122 F2D17FFEF19CF9E893FFEC9DFFE29AF5CB81CFB35ED6C062E4D476F6ED9CF6ECB33B3512494422 F1EFA7EAE893EBE78CE1DA88E6DE8EEDE394EDE296DFD48BDDD18CE4D895E7DC99E7DD9AE6DB98 F1E5A0F2E7A0DACF86DFD383E8DA86F3E692EAE08AEADF8DDFD788CEC67BE6E09ADFDA987E7943 2B2504696232E2DAA1F5EFB3E4DE9AD9D385E7E38BE8E78AE5E384E4E083E9E68CE9E590E5DF90 E1DC8FDEDA8EF9F3ABFCF8B3F8F4B4C0B9817A7240585027382F046B6138958D64BCB188EDE6A9 FDEEA7F2DA9E78470EBC935AF8EAAAD5CE88D2CA83E4D38DE9D890DDD587E0E08FEEE398F0DE8F FBE795E2D088976C1EF7C070F6DD98E2D283DED37FE1D796FFD9A6A06B27C3A03FFBE2A3C7B590 89875E97A161AFB97C1215017B7949E9E6AAD2D184D3D182D3D17DE5E191EBE6A2DDDB8AD9D77E E7DA93F2DD9DAB934DAE9945DACA84DED691DFE08DF1EFA1D6D484DFDD86E5E589EBEA90CACA77 D2D189EEEBAC717033151503DADB8FF2F0A2F6E799E1D98AEAEA9AF2E89DFFE39DB17833B6782F FEDE90F2DF8EE9E599E0DD9BF2DF96E7C36FF8DD92FCF2B0FFFCC2FEF1BBDDC089BC8E586E3D1B 4E2B054B3C1756593D999975D4D1A6F1EDC3E6E2BBFFFFD5F8F4CBECE9BBE5E3AEEBEAAEEAEAA6 E2E397EDEFA2EBE9A6FBF8BAECE9A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBF2E6E9B5DADE8BF2F3BDFBF9DDFFFAF1FFFDFBFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFBD6F0D6B9E6BAD7F0DAF8FBFCFDFEFEFFFFFF FFFFFFFFFFFFFCFEFCF3FAF3E0F7E0B6ECB668C76630AA2D5CB95AA4D7A4EBF6EBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFAE6F7E6B1E1B0 CBEBCBF7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE6ECE6B9D3B849AE4856B853 9AD69ACCE2CDDEE1DEE1E1E1E2E1E2DDE0DD8AC58A41AF3F70C66E9ECC9EB8C5BBD9D9DCEBF0EC BEC6BE7E9E7E35A03360AC61B0BEB4E9E6EBEEEEEED5D5D5D3D3D3F8F8F8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCE1E1E1CACACAD3D4D3D7E2D7B7E0B66EC36C38AB397BC58FBADAD0D9E1E0 EEEDEDFCFCFCFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6CD71D7CE73D2C96ED2C86ED9CF76D5CB72DDD37CDBD17A D8CE77E2D880CBC480535225757132C0B764D9CC72DCCD7ADED47DE4DE8D6054304F471AE6DF84 E2D685D9CE7CCDC36DD5CB74D6CC75E4DA83EAE089D9CF78DAD079DBD17ADBD17ADFD57EE7DE85 DBD672E5E17FEEE894F3EBA3D8D088847D30EAE48DF0EC8DE8E385EDE793FAF2AB786F2AA7A251 F8F1A0EEE894EEE391EFE38FF1E590EEE18BE2D881DCD57DE3DD85E2DE85DBD67DDCD77BDCD77D D8D378DCD67EE0DA83DDD781DAD47ED6D07BD8D27DDFD983D9D37DC8C36DCBC770D8D27CDED681 DAD27DDCD27DE1D782E4DA85E5DD88DDD781D4CF79D8D47FDDD686D9D284E3DB90DAD289DDD48C E3D991EEE198E2D789DFD484E5D983E4D97FE2D97FE6DF89E5DF89ECE690E6E08AE3DD87EAE48E EDE790E6E08AE0DA84DED882E7E18BE4DC85ECE28BEBE18AE1D782E6DC87EADF8DEEE393E3D889 E7DC8EEDE195E7DB90EBE09AFBF3C09F9867878545F5F9A5D0D677E4EA8FF9FCB8F9F6CF554F39 241D0EC9C491E3DF96ECE489E8DF81EAE187EAE089EAE28EF0E898F0E99BE8E193E0D98BD5D07F D4CD7FD7D080DCD483E1D789E5DC8EEDE497EDE499E8DF94EBE297E7DE91EBE293E4DB8CE6DD8C F2E499EFE294EAE18FDAD389EFECAA807E4A060000474122ECE8A3EDE893F3EC98EDE296EBE08F F9F09EF3EC9CF5EEA0EFE99EF4EEA4EEE79EEBE39AE7DE94ECE095F6E89DFAECA2EFE19BF5E49D F5E498F2DF91F2E08EF7E593F7E593D2C071E6D58B8C7D38766A26FFFFC47670309D9A52E3DF8F F4EE9CFEF5A4FEF2A7FDE8A4EFD795E4C987EACE87FCE99EFFD892DDA7639D6B22A97F30F0D984 FEEF95E2D97CF6EE91FFEC94EFCB7ADAA45AE1AD62DCC56CFBEB8CEBE183E5DD8DF1EBAE817E55 161400D9D894E5E596F5F39FDCD98AE9E393ECE793F6F19EF2EC9BEEE798EBE395E9E094F1E89C EEE598E6DC8EE6DB8DEBDF90E5D984EDDF87EADF86DDD37AECE38BE9E18CD7CF7FEAE395DFD890 EBE4A1B1AC6C37300021160D968C6AFAF4BFE7E499C5C566DEE175DBDD70DBDB77E5E48EEFEBA6 F6EFB7F7F1BEE4E0ACCBC59278723E2721063B3301716937BAB37FF7F1BCFEFAC3EFE7ABE9E1A2 E9DC92F7DE8CE3BA726F3601CB9C58FFE9A0EBDE92D9CF82D5C077E5CF86F2E596EBE999FAF0A5 EDDC8EFAE895D4C07B8D5F14F9CA7CFBE09FE8D98BE8DD8DE4DB9FF9D2A0915D21B89239F7D99A E9D8AEC9C69FF8FFCE666F4724270DD9D7B0E0DDACFAF7B9BCBA7BE3E19FEBE6AAEEEABADDDB9D E9E69FFFFBC6FFF8CA99834FB39F5DF8E9B5EEE7B5FCFEBCDADA98DCD895E8E69CE8E79AE7E89B D7D78EEEEDACFFFEC3CDCC921A1900777945EBEBA7EEE39BE8E39BF0F0AAF4E9A9FFDFA8AC6F39 A36326FCD58FF2DD91E7DF92ECE49DFFEAA4E8BF72EDCC85FAE8A5ECDE9FF8E6A4FFE6A1ECBE78 B3843EDEBF7FEEDEA69296674D4C24181200332D159B9572EDE7C3FFFED7FFFBCEF0ECBAE0DDA4 E4E3A2E7E79FD4D286F5EFA1F4F0A0F3ED9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF8F8E9F0F1CEE6E7ACEEE3B0FCE5C6FFF3E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFCE8FCE7CFF4D3CAEBDBD5E9ECF6FAFB FEFFFFFFFFFFFFFFFFF4FBF4CAEACA8CD28B4CBA4A47BB4163C75AB6E3B3E4F3E3FBFDFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFDEFFFEFD6F8D7 ACE1ABC9EAC9F6FCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFBD6ECD6A5D6A45CB75A 80C87FCFEBCFF4F9F4F5F6F5F6F6F6F7F6F7F5F6F5BEE2BD82CC816CC16A89C490BCCFD0DEE6F0 DBF6DDBAE0BA8DC48D56B3537FBC8AC5D1DCF0EDFCF9F9FAF3F3F3F2F2F2FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF6F6F6F0F0F0F2F3F2F3F7F3EAF6EA9ED59D5BB85A81CA85BAE1C0 E5F1E7FCFBFCFEFEFEFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5CC70D7CE73D6CD72D6CD73DDD37AD7CD74CDC36B D4CA73DBD17AE7DD86CFC883302F12746F31D5CD79D9CC70DDCE79E0D67EE9E4928D815B4B430D DCD57BE9DE8FDACF7CD8CE77DED47DD5CB74DAD079E4DA83E7DD86E1D780DBD17ADCD27BE4DA83 E9DF86E2DC79E4DE7DE5DD87E0D78CF1E79E8C8336D1C973F7F094EFE88CF3EC95FFF8ADB9B067 777223F5EE9EEBE493EDE290E2D783E0D47FE2D680E0D682DAD27DE0D984E1DC86DCD77DDED87A DAD377D4CD71DAD379E3DC84E6DF87E1DA82E0D982E3DC83DDD67EDCD57CD7D279CECA71DDD77F E7DF87D6CB75D8CB75E6DA84E8DE87EEE58EE8E28ADFDA81DFDB83E3DD89D2CB7BDFD78CE1D891 E1D794DED391ECDF9BE5D890E0D585E0D47DDBD073D9D074E2DC87E5DF8BEAE490DFD985E0DA86 EDE793ECE692E3DD89E6E08CE9E38FE2DC88E0D881E3D980E7DD84E5DB85DFD580EDE290EFE494 DED284E4D88DEFE399E6DA92EDE39FEFEAB52F2A1128220EDFDBB8ECEDB3E8ED9ED9DE8CF0F1AE 8A89540705003E3E10C4C170F6EE91EEE588ECE388E7DD87E7DF8CEDE595EDE497E8DF94EAE196 D6CE81D8CF84EAE194EAE192E2D98ADAD183E3DA8DEDE497E9E093EBE295DFD689E6DD8FEEE596 E6DD8EEEE195F2E697F3EB97F3EDA2E9E6A94642210C0600716D42F2EEA7EEE991EDE590F1E697 E9DF8EFAF2A1F6EF9FF5EEA0EDE79CEFEBA1F4EFA5F4ECA3EEE69AEEE294F5E89AFBED9FF4E399 F3E096FAE699FEE998F0DB87DDC874E1CE7CE5D385FFFAB18B7C36A09552FDFFC4556724C3C581 FDEEA8FFF0A5FDECA1F8E99EE9DF95E2D68EF6E198FFE29BEEC57FD58B4DA96626E3BA6FFFFDA7 F6EB8FE4DF7EFBEE91F7DF84D5B55FD4AF5CE6BF6EF4D582EFDE85EEE38AE7DE88F3EDA2FAF6B9 8885570B0B00C7C68AF9F9B8DFDD96D2D088DAD88BDDDB85DEDC86DCDB84E5E288E9E48BE4DE85 EDE88CEAE487DDD577DFD677EBE182E4D97CDFD479EBE083E6DD7FE7DE81E7DF84E1DA7FE2DC85 F5EF9CC7C071E2DC90D9D4955C5439120A0046431DADAB6AD8D885EBEF90DBDD7EE9E996F3F3AE E2DEABBFB79396916D3532042C280A666331A8A670E4DFA8F9F4B8ECE8A6E3DB94D6CE83E5DE8F FAF29FFCEC96FFE18BC894477F4400EEBF76F5DD90DFD586E1D789D9C67DDFCB83EDE198D1CF84 F0EAA3EBDF95F3E496D2C382A37933FBCF86EDD398E3D58FF1E89EEDE7B2F1CFA4814E19BC8E48 FFE3AEE8D3AED8D2B5D1D6B9262C14313422A19F878F896F8C87687B7654767251767352767159 626040706D4793866C907C6A664F3467512F8A7A61807961A0A277B8B58BCCC79CCAC698D6D2A0 DCD9A7DFDCACDAD8ABE8E7BCF9F7D05856342A2A16EEEDBAEEE99BE8E996E9ED9FF1E7A4FFDEA2 996126AC7331FAD989E5D77DD3CF73E5DE89FEE596E4B772F3D490FEF4B1F1E4A3F6E59BF8DB8A F6CA73C2913CC9A252FFF4AEFFFFC8FFFED0D8D3AA99946C504B25403B146F6A43A8A37BE2DEAF FDFBC7F4F3BBF7F7B8F0EEABE9E396EEE798ECE596FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFAFAF1EDEDC8F2E9BFFBE9C4F8EECDF5F1DB FBF2EBFFF6F8FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF5FFF5E1FAE4C6EAD3C1E4D3 F4FBF8FFFFFCF9FDEECCEAC69ED79C7CCA7B66BE6566BA6481CC7CABE4A3E6F7E4FBFEFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FDF5CFF4CC B4ECAFC1E9BFDDF2DCFAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF5F5F5FAFAFAFFFFFFFFFFFFFFFFFFF8FCF8B3E1B272C671 6CC16BA2D7A0E7F5E7FFFFFFFEFEFEFEFEFEFFFEFFFDFEFDE2F4E1B6E1B564BE6270BB75B9D2C9 EAEDF8DFF7E1B0E1AF82CA8173C372A1D1A9DCE5EEF8F6FFFEFEFFFEFEFEFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFFFDFEFCBDE2BC7DC77B79C779 A7DAA7E3F3E3FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D074E1D87DE2D97EDFD57CE4DA81D7CD74 D1C76FD3C972DAD079E3D981E1DA96403E23666024CDC571D6CA6DD6C871D4CB71EFE996968965 393000D6CF75DDD183DCD17FD7CD76D7CD76D6CC75D7CD76E4DA83DCD27BE2D881DDD37CE2D881 E3D982D5CB73DED676E4DC7EE2D982E4DA8BF7ECA1C2B8699E9441F3EA92F7EE94EAE18BF7ED9D D2C87B80792CDFD889E8E190E9DE8DE6DA86E6DA84E1D57EE4D983E4DC88E3DC87E6E18EE6E085 E7E07FDFD877DFD77AE5DD82E7DE87E1D880E5DC85E7DE85E1D87EE1D87EDDD579DDD87DD5CF77 E2DB83EFE58EECE28BDFD27DEEE08BE9DE87E6DC85EFE890E9E38CE5E087E0DA84D3CC7BE3DC8F EAE29BE2D895DDD290E7D997E4D88FE6DB8ADCD17ADAD071E1D97DC5BE6BE0D987E3DD8BEAE391 EDE694F9F2A0F2EB99E2DB89E4DD8BEFE896E5DE8CD5CE77E4DC82E0D87FD4CB76DBD37EE8DF8D EDE494E7DD91E7DD93E8DE95E6DC94EEE49FD5D19148461C0B0500938D7AE6E2BAE2E3A3F4F7A9 E0E29CE8E7AD92935B4B4E1CB7B861EFEA8EE9E187F0EA92EEE593E1D889EEE599EBE198E8DF95 ECE299DAD087DED48BE8E093EBE295EEE598F4EB9DE1D88ADDD486EBE294EEE597E0D788EAE193 F1E89AE9E093EFE399EDE392E8E18DFAF6ABE0DBA5373218100B01A4A06CF7F4A9F2EB93E9E089 F7EC9BF1E998F7EF9FF4ED9DF7F1A3EDE99CF0EDA1EEE89DF4EDA2F2E99CE9DD8EEFE192FBEA9C F3E194F7E497FAE697E7D280DCC671E6D07BF7E290F6E598E7DA90473808E5DA99C8D8972E4504 DBDC99FBE6A3FFEDA6FBE098EBDA8FEBE296FEF7ABF5E297C0944A965A12B78039FCDD93FFF2A1 F5DB87FFEE97FFED97F3C673E0B15FE3BD69EAD57EE1DF83ECF091F1E993F6ED9EE1DA92EFEAA9 CFCC927E7B463C3B166E6E39FBFBC3FDFCC1F9F9BBE9E9A4E9E8A0E4E39BD4D387DEDC8CE9E692 DFDB84D6D177DDD879E2DC79E3DD78E9E27EF5EC8CEBE284EBE282E7DE7DDAD372D6D06EDCD677 E2DD7EE6E086DFD983E6DF8ADDD78AE4E0A6C6C48F5D5A331A1700514D23BBB789FFFED2D6D2A6 807C5139351549441A7D7B44B7B871DCDD94EDEEA5E9E9A0E5E399DDDA90DCD88FE1D88FE9E197 E1D98EE7DC91F6E594FFE492B9863B9A611CF7CB82EDD98DD9D486EBE69BE6D892CCBC79CEC784 DADD98EDEDACE7E39DFFF6AEE2D79BC29E5DFFD28EF8E2ADDCD292D6D38FBCBE8BB89F7768370D 6D39129A703D7B63387970526B6E58000000191C0D2A291038321E352D1B403823544F38504C34 524E39454328413E1F4F432D503C2F2F1700321E014635202B25112C2F062E2A08272003211B00 312B09332E12312D194340254B482F88846538381D1C1A0DB8B793F3F5AEEFF8ABF9FFB9FFFFC7 FDDAA8925D2AA47236F4DA8FF9F19CDADC84DBD383FEEA98E6C571F4DE8DF7EFA1EFEB9EF7EB9B FFE693FFD580D79F4DB58339FEE4A7FAECB8EFE5B2F6F1BEFFFFCFFCF7C7D2CC9FA19B71564F28 433D146D673EC3BE92F8F3C2FDFAC7EBE6A8F1EDAAF6F1AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFBFBF3FCFAE6FCF8D6EEEDBA EAE3B5F6E1CEFFE9E8FDF9F5FEFDFAFFFDFBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFAEFC5E7C9 B3DDB7E6F0E6F3F8E6E1F2C882C87542AE3F3CAD3B68BA67B5D2B4D7E8D6EDF9EBFBFEFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEFAED AFE7A991DD88DDF3DAF6FCF6FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1E4E4E4EDEDEDF8F8F8FCFCFCFFFEFEEEF8EE8ED08D 40B03F7DCA7CBDE4BDF1F9F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFADDF1DC64BF625CB55C A9CDADE8EAEBE2F3E29DD69D69BF688FD18FC2E5C4F1F7F5FFFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2EDD29CD79B 6DC16C89CC89D4EDD4FFFFFFFEFFFEFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED579DDD479D5CC71CBC268C5BB62 D6CC72D4CA73D9CF78E1D780DED47CDAD3903D3B226B6629D7CE7BD1C567D0C26AD0C76BEBE592 998D66393100D9D279DBCF82D6C97BD7CD76D9CF78D7CD76DED47DDFD57EDBD17ADBD17ADCD27B E5DB84DBD17AE1D77FDFD679E0D779E8DF86E9DE8DEFE495DDD284A19646E2D884F4EA93EAE089 F2E890E6DE8B8A8336B1AB5DDED685E1D683E9DD87E2D77EE8DC83E7DD84E8E18AE0D985E3DE8C E2DC80E1D975E0D876E4DB7DE7DD84E2D881E2D881ECE28BECE28AE3D97FE5DC7FE1D97ADED77D E5DF87EFE890E5DC85EADE88EEDF8AE5D681E3D57FDAD079E5DE86E6DF87E9E38BD5CF79CFC876 DED789E5DD93DAD089D7CD86E2D58EE4D88DE4D988E9DE86F1E789E6DD829E9644DCD584F6EF9E EEE796D4CD7CD2CB7AE6DF8EE3DC8BE2DB8AE9E291E5DE8DDED781E9E28ADDD67ED5CD78DED683 EAE191E2D98CDED588DBD287DCD28ADFD58EDED68EF3F2A2CFCE8D575228110B00110C003F3D08 6260239B9A65CECB9EFFFFD3EAEEACD7DB87E5E18FDCD785F6F0A2DED68CE4DC93DED590EEE49F E2D893EBE199E9DF97EEE49CE7DE94E8DF93ECE396F1E89AE7DE8FDFD687E9E091EEE596E6DD8E EEE597EFE699E8DF92F5E99FE7DE90EBE591F4F0A6B8B484140D06191601C2C080F3EEA0E9E388 E4D982ECE08DE4D989F8F1A1E9E292E6DF91E7E194EBE599F5EFA2F0E89BE9DD8EEDDF8FF7E696 F9E89AFFF2A5F3E091E3D07EDAC572F2DD88F9E997F4E191F1DF93C5B56E312300EEE5A592985C 475518FCF9B7DBC683F6D990F2D38AECD389FFEDA4E2CE84917227976C1FF2CE7FFFF7A5F8E691 FDE592FFF2A1FFD788DBA052FEC174F5C273F8D886F3EE93E0F391D8EC8DD5D483E4DD97F2ECAF 8F8A514C4A113633013F3E092C2900706F407E7B499E9D64BBB984CAC898CECA99E3DFA9ECE7AB E4DF9DDDDA90D6D082DCD784E0DA85E9E38AE5E085F1EA90F3EC91ECE58AE0D97CCECA69BEB959 C3BF5EE5E083E3DE82DAD57AE5DE88C1BD66D5D680EEEFA2FAF8BDC5C0984E463020160B4A4037 2D24175E563DB9B38DF6F3C1FCFDBDEAEE95DDE087DDE087E9EC93E7E791E1E08CE9E695EEE89A F6EEA5EBE39AEBE19CF6E69DF5D88F9B6A27A36F2EFFE29FE8DA91DFE195EAEBA3E5DD9BE4DA9C E9E5A7CDD293C9CF93C8C889C4C17D98925A63410978490B64521E534F1060631E6B72418F7D54 65360C804712ECBF7BE6CA8EEADEB378765C12160BB8BC98E4E2B9F8F3C9F8F0CBF9F2CDFFFFD0 F1F0BCF0EDC5EFEFB9FFFDBFFEF7CCF4E5C0B5A075D9C58DFEEFC6EDE6BEE6EAB2E7E5B8E6E0BC E9E3C0DFD9B7BFB994A7A37B9D9A6F5A592E43411A353215020100242306272C00485317636734 94855BAF8664905A37AE7E51FDF9BEF5F2ADDFE29EE8DFA4EFDE98E9D279E7DD86E2E293EAEDA1 EAE195F7DF92FFDC8DD99C51945A17FDD299FFEFC0ECDFA5EBE7A7EBE7A8E6E1A8F0EBB5F6EFBE FFFFD5E3DCB2867E572F2702453D1AAEA680F7F3C3FFFDCCF1EFBEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFFEE F4F6D8F1E9C8F9DFC4F9DEC4EEE9C4F5ECCFFFEFDEFFFBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F7F6 C2D3C299B3959DAF9293BE8381C77060A9575FA65D80C37FB5DFB5EEF1EEFFFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3FEF3B6E9B29BDE94EEFCEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBCECECEC4C4C4D1D1D1E5E6E5ECF3EBCCEACB 7CC77B49B148A8DBA7DFF3DFF9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F8EF90D28F 64BC626FBC6DA0D29FBCE2BB76C5764CB34BB2E0B2E4F5E3FCFFFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3F8E3 B6E8B55BBC5A5FBB5EADDDACEBF7EBFCFEFCFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED579DBD277D7CE73D5CB71 C8BE65D5CB72D5CB74DCD27BE3D982D9CF77D8D18E5755325B551ACAC26FD2C568DFD178E1D87B F3EE989B8F69231A00C0B962DFD287DDD182E7DD86E4DA83D7CD76E3D982E2D881F2E891C3B962 B8AE57E7DD86E6DC85E6DC84E9E084E7DE82F3E990EAE08BEBE08FF2E798BCB162B5AA5AEEE490 F0E68EF2E98DFDF69DADA7589B9446F2EB99E8DE88F0E58BEFE489EBE085ECE287E8E188DCD681 E3DE8BE3DD80E5DD79ECE482EFE688EDE389E8DE88ECE28DECE28BE8DE87E6DD82E3DA7DE5DD7E E7E084E2DD82E4DC82DED47BE9DE85EFE189D4C76EE2D57CE0D67DE3DB81DFD87EE7E188E5DE8C DFD787EAE393F0E99BEAE295E9E194EEE295EEE392E3D983EDE289F3E88DE8DF85E2DB89E9E290 EFE897E5DE8DF0E998E2DB8AE0D988E4DD8CE0D988E1DA89E2DC8AE1DB87DFD984DAD47FE4DE8B E2DB8AE0D988DED789DCD587DBD388DCD48ADED68CDFD88CDFDD85EDEB94EEEC9BBEB86E847F3B 65602D423B261E170C140F0054543ABDC38EDCE29FE6E4A0D3CF8CE2DC9CF5EEAEF1EAABDAD391 E8DF9EDCD391E7DE99E6DE96E8E097DED58CE4DB90E6DD91EAE193F1E899EAE290E9E190F3EB9A EEE596F2E99CEDE497E6DE93EDE49CDED687EBE793F2EEA4837F55070000353405E4E39BEEE999 E6DF84E9DD83E2D582E6DC8BF3EB9BDED686E6DF91EFE79BE8E095F4EB9EFBEFA3F5E698F6E394 F7E492F0DD8CDFCD7FD4C172E3D07EFDEA97FEEA97F7E290F7E396F2E399BFB16E6F6424FFFFCE 897F49756D35EEE4A4E0D48BFEF0A3FFEB9FF4DE95B18742906621D0AC61FBE18EFEEC93F2E98F F3E98FFFE895F7CC7EE6AB5EE0AE61FFDD8CFCE690F3EC93ECEF96E7EC96E0E590D1CF80DDD798 E4DDA99B9462A6A36955531852501824210E25220E2623091211000F0B001B14001A1300393117 4B43286059398E885CA59F67C9C285E1DA9BF8F3B5F2ECABDAD48CE0DA8BD5D080CDC875D8D47F E0DC85D6D27AD5D179E4E089E6E18DE0DA87EEEB98DFE08AE1E293DDDC9AA4A075453E233C342D 3F35292117097A7362DDD8B5F5F1C7EBE9B1DBDA92E2E094E7E597E1DF8FE0DD8AE5E38FD8D681 DEDA87ECE895EEEA97EBE595F4EDA5F6DC9D8D6026AA783FFFF3B6EEE69FDEE59DD6DD98B1AE6E 988F558F8D54666D324E561D4B4E10676323857F48755318C59556D8C591DCD897EDF0A7F6FFCA FFF3C7C49665985815F6CE77F7D983FFF9B857552A212510D5DA9DF5F6AFEEECA7F0E9ACEDE7AA E5E099D1CE81D0CE8ED6D788F0F098E1D791E2D091745F1AB7A552F8F3B3F3EEADEBEF9EF1F0AC F1ECB1F1EBB6ECE6B2E1DDA7DBD99EF4F3B4EAEAAAFFFFC5D4D29F1512007B7A57BEC195A5AC81 797754755D4351211341070056260A66512F848357A5A67CD0C3A3E5D3A5CCB871F9F3B1EEF2B7 E7EDB5ECE6ABF7DF9FF6C57FDB9F55AC732AFCD791FEEEADF1E49EF7F3A9F4F0AAE4DE9EE5DFA2 EAE3ADF1E9B8FCF5CAFFFFDDFCF5D2B6AE8D6358383A36136D6C48C2C19CFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFDFEFFFDFEF8EFFEEAD3F6E1BBE7E3AEF1E0B2FDE1BFFBF1DEF9F8EAF9F9EDFCF9F2FFFAF9 FFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFFFAF5FFFBF2 EBEBE0B2B3AC757C714A5C3A36722A3691326492629CA79BCBD1CBE5EAE6E8E9E8EBEBEBECECEC ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEBEC E9E8E9D9E0D9B7D5B7ABD3A9DEE6DDEBEBEBECECECECECECECECECECECECECECECECECECECECEC ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC ECECECECECECECECECECECECECECECECECECECECECD4D4D4B5B5B5A0A0A0A2A1A2B1B3B1B3C7B3 9BD29A81CB7F80C97FD5EED5F9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FBF5 CBEACA87CE8649B34850B64F7BC97A5ABB5955B954D1ECD1F9FDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F1FFF1CFF5CE69C5684DB64C79C978BBE5BAF0FBF0FDFFFDFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD67BDBD277DCD378 DFD67CD0C66DD8CE75D8CE77D6CC75D6CC75D4CA72DED795605E394A4409CFC674DACD70DACD72 D3CA6BF1ED95B3A780312800BCB55EDBCE84DED183E0D680DCD27BD6CC75D8CE77E3D982E0D67F D0C66FC5BB64D7CD76DCD27BEEE48CE7DC82ECE187EFE48BE6DB82F0E490EADE8FD5C87C908336 EFE392EDE28AF0E686F1E88CD2CC7C867F2FEFE993F1E78FE4DA7CF6EC8BEFE484EDE485E8E185 DBD57EE1DC88E1DA7EE3DA75EAE17FEAE084E8DD84E9DE8AECE08EE6DB88E4D984E7DC84E4DA7E E9E080E9E286DDD67CDCD279DCD178E7DC83E1D27BDECE77ECDF86E7DC83E3D980DED77DEDE68F E1DA8AD9D283DBD483E0DA88E3DC87E6DF87E5DB84E2D980E4DB81E5DA81E8DD84EAE18AE3DC8B E6DF8FEDE696E2DB8BEAE392E1DA8AE5DE8EE0D989DED787DFD888E0D989D8D180DCD583D5CE7D DED787E6DF8ED6CF81DAD385E1DA8CE4DC8FDCD487D9D185DFD88CDED784D6D074E0DC78DDD873 F3EC92E4DC94EAE1AFE2DAB87874590000001A2008A2A77DF1EEBCFFFAC7E1DDABC3BD88554F21 252012443E168E8948DBD290E9E19AECE59BE6DD94E4DB90E3DA8EEEE597EEE595E8E08EEBE390 F2EA97ECE393EDE497EAE195E7DE95E8DE96E9E393EAE692F3F1A6544F2A160D0757561CFAF9A9 EAE592ECE388F4E88DE8D984F7EC9AEAE091E6DB8CF5EB9EF0E69BEFE49AFAF1A5F1E194FFEEA1 FFF19FEED684DCC775E8D688FCEB9BF7E593F2DF8DF7E492FAE898EBDA8EF1E59DB4A96992884C F4EDB747351BAD985FFFF7B6FCEEA3FFFBABD3B76790681FA5742FE6C17CFFEA9EEED680F8E88B FAED93E8D07ADFBD6AEBC270FAD683FFF19BEFEB90E2E88CECF39CE6E492E3D289F5E299F0ED9E DFD99BDFD8A5E0D9A6F8F3B3A7A55DBFBB7ABCB785D2CEA2BAB785B1B06E999567726A4E60583A 31290A1A1200221B001611000C07001914052E2913595426868154B4AE77D6D195E9E5A7E5E19E DFDB96CFCC85E6E298D5D288CECB81F7F2ABF9F6B0E8E39FD7D392625F2C2D2A035D591DAEA972 F7F5C7F3EFC1ADA77B514A271E16045B5333B8B18CF4ECC1FBF1C3FAF7C2E3DCA0DBD793EDE99F E7E495ECEA97E2E08BDDDD86F1ED99FCF8B3FFECB6AC7E4CA77745AD90567A7231545B15646A25 858142A2995EB7B47BC8CE92D5D9A0CDCC8CE7E09DF1E7AEA77F41E8B26FFBE4AAEBE29AD8D888 D8DF9FE7D59DBC8A53884201DAA245FFE786EFE0984641141E2114DEE39BE1E48CDEDC86E5DD94 E6DF96EAE491E9E48EF1ECA1E1E188E9E786D8CC7DC8B56C6750029E882DC1B063DCD489E2E388 EEED99F0EDA1F4EFA9F8F3B1F0EBA8E0DE95DADA8BE1E090E3E399CDCC8D0F0B009C9A6FF6F6B8 E2E3A4F2EAAFFFF3C0CA9666A86C3AA97A41A593567C7E3D3A3C022E1F00371E134B3413857B4E B2B38CD8DCB9FEF9D5FFFFD1F4CC90D29D558B5A0CD8B563FFEE9DF1E79AECE89FE7E39BE8E39E F4EFAEF4EEB2F1EBB2F8F1BDF1E9B9EEE8BCFEF9CEFCFAD5DEDEBC908D693C3B16FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDFBFFF7EEFBF3E2F4F2D9F9E7C7FCDEB8EEE4B8E8E8B8E9E8BBF3E7CD FDEAE7FFF6F5FEFFFDFEFEFDFEFEFDFEFEFDFFFEFDFFFEFEFFFEFEFFFFFEFFFFFEFFFFFEFFFFFE FFFFFEFFFFFEFFFFFEFFFFFEFFFEFDFEFEFDFEFEFDFEFEFDFEFEFDFEFEFDFEFFFEFFF7EFFEECD7 F8EAC5DAD9B09A9B88575956232D1C264421426D417487749C9C9CB3B1B3BCBBBCB9B9B9B9B9B9 B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B8B9B8 B5B6B5A6A7A696999697A397A1B0A1B3B6B3B8B8B8B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9 B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9 B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9 B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9 B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9AEAEAEA0A0A0979797878787717472 67826775BB7494D693BBE9BBECF9ECFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFEFCF1FAF1B5E0B565BE643EAE3C4BB54963BF628FD28DE4F5E4FEFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFFFBE8FAE7A2DCA26AC36957BB5684D183DCF8DBF6FFF6FFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD478DDD479 DED57AE0D77DDAD077D8CE75DBD17AD4CA73CFC56ED3C971E5DE9C767450565016D4CC7AC9BD5F D6C96DD4CC6CE6E28AB7AB832E2500B7B05AE2D58CD3C678CDC36CD2C871DBD17AD8CE77DCD27B D4CA73E4DA83DFD57EDDD37CDDD37CDFD57EE2D77EEBE086EEE388E9DE85FAEE99EEE192F5E79C A7994FEBDE8FF2E78CF4EA89E6DE7CE9E4928B8433BCB65FFEF59AE7DD7CF0E683F2E885EBE380 E8E185DDD77EDEDA83DBD576DFD671E3D978E4D97DE4D882E8DC8BEBDE8EEADD8FEADE8AECE088 EFE487ECE283E4DB7FEBE389F2E88FDACF76DBCC75E3D37CF2E28BF2E38BDFD37ADAD077DFD67C F2EB95E9E295E4DC90E1DA89E4DE86E8E286EAE484DCD373D9D071E5DB7FE2D77EE5D983F2E995 E9E191E6DF8FDCD585E7E090F1EA9AEFE898DBD484DBD484E6DF8FE7E090DED787DCD586E7E090 D5CE7FD4CC7EE5DE90E3DC8EDFD88AE8E193EAE395E1DA8CDBD486E0D88AEEE29BE2D584DAD16F D4CB65E8DF82D9D081D1C985DBD897DEDFA55459330000002F3323E9E7C5B8B48E5B58320C0800 0C080328240C7F7941B9B376E9E3A0E5DF96E6E094EAE499EEE49CE9E095F1E89AE6DE8DE1D986 E3DB88E6DE8BE0D887E9E092ECE398EAE098F0E69EFBF6A7EFEC98E5E398302A09170D0C7D7B3F FBFAA3E6E08DF3EA8EF7E88EEFDF89F4E595F3E698F4E89AEBDF93DDD187F3E59AFDEEA2FAE79A F6E091E8CD7DE7CD79F5E190FEF2A4ECDB8BF3E191FFEE9CF4E392E9D98AE6D78EFFF5B0989051 9A945AD8D29D3B2B04DAC187FFF3B3F2D189C29B4D9D7526DDB56AFDDA91FFE79BFCDE8EFBE28B FFEC8FE8C772C8A653E2C56FFFF098F2E78CDFE083DDE78AD3DD85F2F5A1ECE39ADFCB87F6E49E F0ED9CEFEAABEAE3AFE6E0A9ECE8A0DCD987B7B468D2CB94E9E2B4D2CF99E8E89CF5F1ACE4DDA4 FAF3BBF0EBB2ECE8AED7D39A88864E67652F5A572639360D1210050B07010804002924005E5A2F 8F8B5DBBB883DDD9A2EDE8AFEAE5ACE1DCA3F0EBB2ACA66F635C273B35026D6831D0CC8EFFFFC6 F4F2A9DAD88CF2F0A7E9E5A3FFFCC2C2BC8B574F262F240147391C9C8F71EEE1BBE5D9ADD5CE98 EAE4A9EAE7A6EAE6A3EEEBA5EAEAA4E2DF9BBFB47AA6895947190063320992723BB3AB6ADDE39E DCE09AF5EDADFFF3B7E3DBA0D4D498D1D194DED795CEC17AD7C78ABB8E49D2964CE8CA8AE3D483 DDD97FE1E49AEBD492D59F6591410DB87B26F4CE71F5E09DB9B08C4D4B21D1D48DDBDE83E1DD86 E5DB92DED38BE0D788E7DF8EF4ECA5E1DA87DAD378D2C379D2BA78624600B09640F3DF98ECDF99 CDCB75F4F099EAE594DDD78DE6DF9AF4F0A8F6F3A7DBD986EBEA95FDFDB5DCD89A0B07009A9268 F5EFA8E2DB8CF8E89DE4BF78B37733B7742DE8BC6EFFF6A1FDFBABFAF7B6F5E1B4B596698B6E39 4D3E131815021D1F08625D449C8565B68F62E5B77B9B732FD1B76EE6DD91DDD990E9E3A0E6E19D E9E4A1F5F0AEEEE9A8F0EAABF5EFB3F2EBB2F0E9B2F3ECB6EAE3B1E7E0B6FFFCD4FFFFD7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E5FBE5C7EBE4B3E4E4ACE5E3AD F1DEBCFCDED0F9EBDBF5F6E2F5F5E1F5F5E1F6F5E2FBF5E7FFF5EEFFF6F3FFF9F6FFFEF6FFFFF6 FFFFF6FFFFF6FFFFF6FFFFF5FFFAF0FDF6EAF8F5E4F5F5E1F5F5E1F5F5E1F5F5E1F5F6E3F9F0D7 FCE7C3F6E6B1D8D69F9FA0855F65612539253249335B6E5B909890ABACABAEADAEACABACACACAC ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACADACAD A5A9A596A2968391827D877D979B97AFADAFACACACACACACACACACACACACACACACACACACACACAC ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC ACACACACACACACACACACACACACACACACACACACACACACACACACACACA4A4A49B9B9B979797828182 6264625B735B82BE81B8E7B9EAFFEAFAFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE0F1E09FD59F68BE675EBC5C90D28FCCECCCF3FAF3FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9FDFADAF1DAA1D9A16EC46D83D082D8F8D9F4FFF4FFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7CE72 DDD478DDD479DBD278DFD57CD7CD73DBD179DBD179DAD078D5CB72E1DA97807D564B4509CEC676 C6BA5ED8CC71DCD473EAE68CB7AD80251C00B2AB59EBDF96D5C97BD3CA72CEC46CD1C66FDED47D D8CE77D9CF78E1D780D6CC75DCD17BE0D67FE3D882E6DB83E2D77EEDE389E7DC82EBDF8AF5E899 F5E79BC9BB70C6BA6AF3E98DF3E985EFE784F1EC96CDC7738B842DEBE388EFE686F3EA86E5DC79 E1D977E8E282E5E086E5E088DDD779E1D873E5DC7AE9DE82EADF89ECE08FEADD8FF1E495F1E593 EFE48CF4EA8DE6DD7DE4DB7EEEE68AF7ED93E1D67CE5D67EEFE087EEDE86EFE087E4D87FE8DE84 E3DA7FE6DE88E3DB8FE6DE92E5DF8DE6E086E4DE7DE1DC77E6DE7AE2DA77E2D97AEEE28AF3E793 EBE190E1DA8AF0E998D5CE7EE7E08FD3CC7CE8E191E0D989DDD686E7E090E8E191E7E090E7DF92 E5DE91E0D88DE5DD92E1DA8DE9E294EBE397E9E294EBE494EDE697EBE494E5DD91E8D99AD0C07B DDCF7BF6E892F2E593E2D889D9D47ABFC25BCAD16FBDC785111509000102403E2E1C1902110E00 5F5B3EA09B6ED6D3A0F3EFB8E6E2A3EBE7A2E7E298F0EC9EEBE499F2E8A0F1E89DE9E092ECE492 ECE491E7DF8BE9E18DE5DD8BF2E99BF4EA9FE8DF96ECE39AEEE799F0ED99CDCB84272203120806 A2A261FAF9A0EAE490FDF49AF3E58BF3E38DEBDB8EF9EA9FF6E89BF6E79CECDD91EFE094F4E396 F3E092D7C171E5CF7EFDEC99FCE795F2E394F4E694FAEB98EDDC8AE8D786F7E797F4E79CF7EEAD 69622EB2AE77C9C697372D00FFF0B2E1BE7E99641FB1772EF5C97EFEE899FAF19FFAEC97FAE791 F9DF86E1BC64DFB965F8DD88FBF198F2F294EEF292EBEE91F6F19AEADD8EECDE93DFD58DD7D38D E8E89DDBDA87D4D08CE5DEA7ECE3A8E3DD8FEAE68CD1CD78D4CD8EBDB781DAD498D6D784D7D57D D2CE79DBD985E8E691EDEC99EFEE9FEFEFA6EDEDAAECEDB1DCDBA8C1C2939C9B7073704E524E32 39362329250825220244402A8E8B60D4D0A4B7B387716D42423E156F6845D8D298F3EEB0F5F1AE DDD890E0DB91F4F1A5EEEB9EF1EDA1E4E197F5F1ABF2ECA9C1B88076684142341D45370C544724 8D8558D2CC9FE8E6BACBC49A94906A6A67445F5938877951A182557D4B1FE1AD7EFFF5BDFFF7B4 E2E59CE1E29BEAE29EF1E1A2EBDFA0E8E5A3E0DB9AE9DD96DFCC81EED996DDAC63CC8D3EF9DA93 ECD781E4D97AE3DF8EEFD78BF5BD81AF5B359C5912DDB362F9E2ABF7E9CF585234C9C98CF2F0A0 E8E093F0E4A4EADD9DE2D791DED28EE9DCA6E9DE9BE9DE92E6D297CEB07C7B581FCEAF69F6E6AE EBD9A3CBC47DEDE89AF0EA9DEBE29FE8DCA0E9DEA1DCD591EEEA9EE3E092F8F5AEC2BD86190F00 BCB18DF0E4A5EEDC97FFF1AEC18D4CAA6422C9803BE6B86CFEEC9DF2EBA3F6EBB6FEE4C5CFA777 F8E091FFF9B6E4DFADB1B290837D655E4A35290500592E1358331CA59165E4E4B4EBE8B3F7F3B8 EFEAAEDCD699E7E2A2FBF7B6FCF9B6F6F2AFF0ECAAF2EDACF6F1B1FAF5B7F2EBB7F6EDBCE9E1B0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFEFAF5FBFAF1FAFAF1 FAF8EDFDECD9FBDEBCECDFACE0E1A3E1E1A3E1E1A3E4E1A6F4E1B5FEE0C8FFE1D9FFEBE1FFFCDF FFFEDFFFFEDFFFFEDFFFFFE0FFFCDDFFEECFF9E2BCEAE0ACE0E1A2E1E1A3E1E1A3E1E1A3E0E0A1 EAE9B4F9F5CDFFFCD6F5F4D2DADBCBADBEAE64A46254A25367AF66B7D5B6E9EDE9F1F1F1F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFF0EF F0F0F0D5E6D4B2D8B1AFDAAFCBE7CBE2EDE2F1F0F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1F1F1D6D6D6B5B5B59D9D9D 9F9F9FB6B6B6D0D4D0E4F0E4F2FBF2FAFFFAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9FCF9ECF7ECE3F3E2E1F2E0E9F7E9F5FBF5FCFEFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFFFDF7FCF7EDF8EDE4F4E4E8F6E8F8FEF8FDFFFDFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D9CE70DBD172DBCF73D9CC71D2C86CE6DA7EE2D67ADED378DED277DED175DBD282938F522C2600 CBC17FC1B56CEAE087D4CD69EBE48BD1C58C342800A39C58DCD48DE1D887E6DC82D7CA71C9BC63 D5CB72E1D47CDBCD77CDC16BD4C773E6D784E4D884EADB88EDDF8BEEE08CF1E28DE2D680DFD37F F2E692F4E897E1D682C8BF6BF3E991F2E98CE4DE80EFE88CF9F29C685F10DDD589E5DC8BF0E892 EDE585DCD771DBD671E3DE7FEAE38BEAE385E8DD78E7DB7AEFE287EDDE8BE8DC8AECDF91E8DB8C EDE38FE2D77FE3DC7EE3D97BDFD677E6DC7EECE186E6DB7FE4D97DEBE086EADB83EADF86DFD37C E6DA83E5D983E3D986F1E698EEE496E6DE8BE6DC84E2D97CD5CD6DE5DD7DECE485E3D97EECE28A F8EE98EFE591E7DF8BE4DD8AE1D987E9E18FE2DA87DDD684E0D887E4DC8BEBE392EAE291E3DB8C D8D084F8F0A6EBE39AE6DE95E0D88EE7DF94EFE79EE7DF94E8E095F0E89CEBE398DFD88AE8E088 E0DB75CFCB5DE8E67CD3D178E0DF96EAEBA0E3E892D8E08AEFF3B65858430500000400005F5431 DFD5A3F6F2B9EFE8A3F5EEA4EAE294E3DB8AE4DC8BE8E090E9E190E5DC8EE5DB93E5DC90ECE494 EEE693EEE690EFE890F4ED96EAE28EE9E18EEDE494F0E799F2E698F4EA9BF5F3A89D9C6A242406 161600C2C577E9E88EEFE79CF6E9A9EDE193E7DC82F6E29FFBE7A6F5E19CF3E096FAE899FDEC9A DBCA76D7C773EEDD8BFFF3A1FEF2A2FAEE9FF2EC9CE9E388F7ED97F3E195FEEE9BD7C26FE1CD84 F5E7AF6A602CBDBC86B3B18A786332C09D5E916D28CBA45CFDE99AF8E48FE8D77DF6E78AFFEC91 ECCE77DFB65FEBBD69FEE995FCEE98ECE18ADCD77EEFEC92F2ED96F6EE99FAEF9DE2D685DFD787 EBE494DCDB8CE3E099D8D394E8E3A3F1ECA8E1DB8DDED986F0EB98E3DC92CAC47DD6D088E1DB8C E5E08EDFDA88EBE795F1EC9AE2DC8DDAD88AD2CF84E4E199EDE9A5DBD695DEDA9CEBE8ABE5E5B1 E2E3B4B8BB86A4A36F9E9F726A68451F1B001A160D0E0A0254512EE2E1B5FFFFCBF1EBAAEEE69F E3DD92F5EE9EE6E08DF1ED97F1EC96EBE591EBE697F3ECA2E5DD94EDE5A9E7DFAFF6F2C7E6E0B8 887F5B2822001D18071F1B091C190B757150C6C5A4F1F1D0FFFBCCEFCD989B4F21C68B51F7DA93 D5C77BEAE198F1EDA5E0E299D6C986EEDF9AEFE79EEFE89BE4D78AF2E194FFE7A1EFC982BF9547 D1B264F6DD88E7D57EF7EC9EEADD94EAC482C17738A5631AAC7F31FFF4B0F9EAB2766E37C8C382 CECA81E2DE93E2E197DBDD91DEE295E5E69BEAE1A4E7DFA2F9F4B3F6ECB1BCA06ABF9861FFECAD DFD192F0ECB0DBD597CED290E6E6A6F2E7ABF9E3ACF1D99FF6E3A4F8EEAAF1EEA9FCFBBA9F9867 261700DDCFA5F0F1BEF9E4B0FFEFBBB56531B05E22D9974FF0D281F8F2A0ECE79AFFE9ABF2B688 B07B3BEFD97CFCE995F5E5A0F4EBB2FFFFCAFAF6C5CCB084C1936E64381A3C2100272406585938 A2A27EEAE7C0E1DFB1D5D59EECEBAFF1F0AFF4F3B1F7F4B3F8F4B4F4EFB0EBE4A6F1EAADE3DEA0 D5D091FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFDFFF6EEFCEDD9F3ECCDECECC6ECECC6ECECC6EEECC6F8EDC6FEE8CDFFE0D6FFE1D5 FFECCBFFEEC8FFEEC9FFEEC9FFEEC9FFEEC9FFEDC9FBECC8F2ECC6ECECC6ECECC6ECECC6ECECC6 ECECC5F2F2D3FCFBE5FFFFEDFDFDEDF2F3EBDCE7D9B4DBA4A0D8969DDA9BBAE5BAD6F1D5E8FBE7 F5FFF5FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF6FFF6 E7FCE6C5EEC0B8E9B3BDECBBD1F4D2EBFDEBF8FFF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8CDCDCD C5C5C5CFCFCFE2E2E2F3F3F3FCFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFFFEFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE1D476E1D476E1D476E1D476DED173DED173E6D97BECDF81EADD7FE2D476DBD17AACA65D 322A00C5BB80BBB072EAE089D8D06DE4DB80DBD18F31270091894FE4DF99DED481D7CA6EE6D97C F2E48ADBCD74D7C971E1D37DDECF7AE1D27FE7D886E7D887E8D988EADB8AECDD8BF2E390EFE38F E8DC88EBDE8AE9DF87F5ED95B9B25AD9D27ADFD97FE7E085E8E280EFE890CAC173BAB06AFAF0AA E8DF8EE4DE81E3DE78E2DD76E5DF7FEAE28BEBE185E8DC78ECDF80F4E78CF1E38FF0E493F2E597 F0E394EDE28FE3DB82E7E183E9E382ECE383E9DF80E8DE7FEADF83ECE186EBE086EEE38AF3E890 E7DB85EDE18DF0E490F8EC99E9DE8FEDE292EBE08EEEE48EF0E78CE8DF82E0D77AEDE489EEE48A F1E791F4EA95EEE58FEAE48BEFE791EEE690EAE28DE7DF8CE7DF8CE8E08DE7DF8EE9E190ECE493 EAE192F2E99DCFC77EADA55CE9E198E7DF96E3DB92E1D98FE8E097E9E198E4DC93E2DA91DFD88B EAE482E7E47BDADA77EEEC99E7E7A9CCCB9CCDCFA1E2E5AFE3E8ABF2F2BBBFBD931F19091A0F00 C9BD89FDF3B3EDE39EE1D88CE9E291E7DF8EEFE796F4EC9EE1D88CDED58DEFE59FEFE59EEBE199 E7DE91ECE493EDE592E4DD87EDE68FE6DD8AE5DC8CE9E191EEE497F9ED9CF6EB9CF4F2AD71714D 121500272C01E3E692F3EF97F0E39EF1E1AEEBDE95E8DD82F1DE97FCE7A4FFEAA3FDE89BF7E291 EBD683D9C670F2E28DFDEF9DF1E596EAE194F2E9A0F2E89CF9F194F8EE95F7E89EDBCB7496882E E9DA8FF1EAB8665A27F7EFBB7D7354614517AD8743E2C37BFFFFB3F5DF8BF1E188F6E68AFFF293 EED67BDAB85FF4CD77FFE995F0DF8BF6EF9BF7EF9BD7CF7CDED683FFF8A3DAD27FF5ED99F5ED98 F6EE9BF9F19DECE598E5E0A2E8E3A4E9E4A1F0EBA4E9E398D9D485E0DB8AE9E291E3DC8CEAE394 E9E095E9E193E0DA89E4DE8DEBE496E0DA8BDED88BE1DB8EE7E195EBE599E1DB90DBD58CE8E39A E6E6A2E1E5A2E6E9ACDCDCA7A2A2745F6036312E0D4E4D266060373433083E3F1291905DEAE3A2 FFF7B1F9F2A8E5DE8FF3EC9BEEE895F9F3A1F1EA9BE9E296D4CC85D2C985F6EFB3C9C28EB5AE7D 8780524C471D7B774FB8B58DBEBB937A794F3B3C10606133878956C5C28DDBB986A94F27D29358 FEE198EBDC8EE1D38ADFDA90E0EA9CE1D88EE9DB8DEDE694EEE897F2EA9CF1E19AF1DD99F7DD9B D2B56ECDB265F2DA88E0CD7FE4D58DEAE2A1F4DB9CB67538D3965C8D6027D0B178FFFFCE948757 978C5EFEF7C8E8E3B0EEEFB6EFF5B8EAF2B3EBF3B2E9E0ABE9E1B3F3F2C4FEFED0E4CDA0A87F53 F0D9A7FBFAC9EDEFB9E1DCAFF1EDBAEEEAB3F3E9B4FCEAB5FDECB4F9EAAFFBF3B7F0EAB1FEFBC3 595324403719F8F9CDE9F1BEFAF6C5F1B7839A470EF6A866B47C31E7D47EE4E68EDDD885FFE79F F8B373BE8739F4E784FDEC92FFEFA0F4E9A0F3EEA7F3E8A4E5C688FEC893BF8959E8C493CEC694 79794B49492134350C5D5F35B9B88DECE9BDF1EEBFFEFCC9F9F7BFF7F3B7FEFEC2FFFFC0F5F1B1 EEEBAAE3E09DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFDFFFDFBFEFDFAFDFDF9FDFDF9FDFDFAFDFDF7FEFEE7FFF5DFFFE6DD FFDFD3FFE1C2FFE1BFFFE1C0FFE1C0FFE0BFFFE3C2FFF0CFFFFCE1FEFEF1FDFDFAFDFDF9FDFDF9 FDFDF9FDFDF9FEFEFBFFFFFDFFFFFDFFFFFEFEFEFDFCFDF5F8FCDFEAFCD9D7F9D5BEEABEBBE8BB CEF4CEE3FCE3F2FBF2F5FBF5F6FCF6FAFEF9FBFFFBFBFFFBFBFFFBFAFEFAF7FCF7F5FBF5F4FBF4 E6FBE5CDF6CB95E08C9DE395CBF6C8EEFFEFFBFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 E3E3E3EDEDEDF9F9F9FDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDED173DED172DCCF71DCCF71D8CB6DDDD072D9CC6ED8CB6DDCCF71E3D677E5DC85 B9B46A2D2500B2A96DBDB270E1D780E3DC78DFD67BD5CB872D2304898049E8E39DD8CE7BDDD074 DED275E3D57BE2D47BE2D47CE2D37EE6D782DCCD78DACB78EBDC89F0E18EEFE08DEBDC89EEDE8C F1E591F2E691F4E892DFD57EF5ED95C2BB63CDC66EE3DC83DED77CF2EC8BECE68BF3ED9F847933 DFD58CE2D989DED87BE9E481EFEA86EFE989EEE68FEDE386E9DE7BEDE081F1E58AEDE18DECE08E E8DC8CF1E696E6DB87E4DD83E7E184E9E384F6ED8DEDE285E4D97DEADF83F1E68BEBE086E9DE85 F2E68EE6DA84E6DA87E8DC88F1E592E3D888E8DD8DEAE08CEDE38DEFE58CEDE489F3EA8EF1E88C F0E78DEEE48CEFE591F4EA94EEE78FF2EC94EDE68EE0D883DDD580E6DE8AEBE390E4DC89E3DB89 E7E08FEBE392EFE799E1D98ECEC67BEBE398E5DD92F0E79DEBE398E5DD92DED58BEAE297F4ECA1 DBD487E3DB87DBD38CFAF1C2B6AA925C55471D171026230E2F2E12595933969566D1D298DEDEA2 C5C081DED89BFAF5B6DFD999F2EDABE9E3A2E6E0A2F2ECB0F1EBB2E5DEA7C5BD87BBB274D1C783 F8EEAAF5ECA4E7DD93F1E89BE3DB8CEBE293E6DD90E8DF94ECE399EDE29BF8EB9EEFE498F3EFAF 4C4C280F11004D4F20F7F7A3F3EC94E7D992F1DBA4EFDD93F2E484F0E08AFFF2A0F5E28FDDC976 E6D07DFAE493FFED9CF9E698ECDB8FF2E299F5E89EF0DD97F3D992F6E289E3D57FE2D88CA5A148 AFAE52FAF7A9DFD5A04F420ECCB986291100907747F8E69CFFEDA1F7DF90F6D886FFE793F7D982 D8BA61D2B65EF1D67EFAE28BF4DF88F0E492E8E08FF9F19FE4DC8BDBD382FBF4A2D4CC7BE6DF8D F4EC9AF2EA98EEE695F0E99CE7E3A2BCB877DFDA96EDEAA0E0DA8DE1DB8BE7E391F0E998EAE392 EEE797E8DF91E7E08CDAD57CD5CF77DFDA82DED882DCD783DED987DFDA8BE2DF90DDDA8DD8D489 DEDB90DEDF94F7F8B4B8B77F3C382436330B9A986AC3C286D2D38CACAF639B9B5770703F2D2B00 3F380C8D854CDDD997F3EBABFFF8B6DAD490E9E29FEFE7A5F2EBABC9C1838B82457A73377A7438 948D52B2AC72D2CE96EBE7B0EEEDB4FBFBC0D8D89AC5C784DDE09AC6C8809F9C63AC8960964020 D59463FFE5A2EDDF96EBE098E1DF95E3EDA0DED88CDED585F1EC99DFE094F2F1ACEDE6A7E9DCA1 FFF0B4F4DE9DBCA760DECB80EFE095E6DA95DFD79ACCB582AC7353CE9B7E6F452C5E412D988370 49382A342218604F43463A29423F33353928414B2D363E1E352B193B33224746306865466F533D 4E281F5E402C494233585B3A736A4C715E407F6E46A39C64A3A76FC4CA92DCDEA7F7F4C4EFE3B7 DDD1A4050300788259F9FFD3FBFEC7E7D4998C5D20C18341FFCB83B38738ECDB86D7D47CEEE792 F4D989DCA157E3B866F7F395F1E791FEF0A3EFE49CF5EEA5FDEEA2E0BB71F1B36FA76624E7B570 FFFBB4FFFFB6FAFBB4DADA9DA09E6E7A755148422A5B543EA8A284F4ECC7FFFFCFFEFBC3F9F6B6 F6F4B8EEECB2F9F8BEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FFFCF4 FFF6F3FFF3EFFFF3E8FFF3E7FFF3E7FFF3E7FFF3E7FFF4E8FFFAEEFFFFF6FFFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF7FCFFF5F4FFF3E9F8EA D4F0D5BDE9BCB4E5B3BCE5BBBDE5BDC4EAC3DEFADDE7FFE7E9FFE9EAFFEAE0FCE0CBEECBBDE4BC BDE5BCB7E5B6B4E7B3C1EBBED7F4D4EDFCECFBFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFAF6F6F6FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD4C76BDED175E6D97DEBDE82E7DA7ED9CC6FDFD276E6D97DE8DB7FE6D97D E5DC85D0CA813027019E955BC0B571C9BF68DAD271E0D77BD9CF883A3011817743EBE69FD0C774 DCCF73DBCE72DCCF75E3D57CD8CA71DED078E5D77FDACC73DACB76ECDD88E1D27DE7D883EBDC88 ECDC88E7DC86EEE28DF9ED97EFE58EEEE68FF5EE96C3BC64EFE891E7E086E3DD7FF4ED93F9F1A1 BBB267A89F54FCF3A2DCD57BE0DA7AE9E382F0E98CECE58DEAE085EBDF7EE8DE7DEBE086ECE08C E1D684DDD281F2E797E8E18DEBE38CEBE488EAE485EEE688ECE287E3DA7FE3DA7FEAE186E8DE85 D9CF76E9DF86E6DC85EAE089ECE28CF4E996EBE090ECE190EEE48FEEE48EECE289EAE186ECE388 F2E98EFBF297F6EC93EFE58EF0E68FECE28AE8DE85EEE48BEDE38CEDE38CF1E791EDE48FE8DD8B E8DD8BECE18FEEE391EBE394F6EFA1EAE395E7E092EDE699EAE395D8D183E8E193EAE395DFD88A E2DB8DE7E092E0D788EADFA4E1D4B7231509000000625F45BBBB9AB5B39A0804032823132D2A0C 9E9D6CF7F7B3F1F1AADDDC9BFFFFC4E7E5ADFFFECCCAC6978C875D55502A2D270A0E08030C0300 251A009A8F4FE9DE9DE2D893E2D891E3D991F0E69EEAE097ECE29BEFE5A0EBE19CEDE195E3DB91 E8E4AB3A3A17151600626232FFFBA9F5E892F0DD94FFE7ACFAE496FBEA89FEF28FE9DC7CDCCD70 EBD980FCE792FAE393F0D98CFEE89CF1DC93F2E096FDEBA1F9E39BFBDE98E8D37AD8C572B7A860 837A24DCD57CFDF6ABE8DAA73E2D0092814C271000B8A86EFCEE9BECD484F4D584FFDC8BFFDA89 D6AB59D3AB58F4D581FFF09AEAE087EDE891F5EE9DE2D88AF5EC9DF3EA9BE8DF90F3EA9BFAF1A2 ECE394F1E899F0E798E9E091EEE79AD3D08AA5A15BDEDA91F1EDA2E4DE90F2ED9BF5F09EEFE995 E1DA87E6DF8EE7DF8EEBE48BDDD775D4CE6FE3DC80E5E085DFD982DDD883D9D784CFCC7CD4D284 EEECA1F5F4ABDFDB9E605D2B1714007B7640E3E1A3EEEDAADCDA90DEDE91C8C979C8C777ACAC5E A29F58746E372E27061D17048E8651E7DFAEFFFDCCF2EBB8CEC694635D29403A05857E47BCB779 F4EEA9FEF7B2E1DD97E7E39DF6F2ACDBD98FDDDE91E8E795E5E791DDE286E4E78DF4F7A7EDD492 A45621CD9050FFEDA2FBEFA4EDE4A1ECE8ACE8ECB3DBD5A0E7DCA7EEE8AFEDF1B3F2F6BAF3F2BA DBD49FC6BA85AB9C634D3D01423304483B03382E024138023E2A00401500673F1D674722271001 2B16007A6650351E0E6A55438E7F6B9893799B9C7D9CA6799DA772B3AA80AAA47F91936D77764D 7259335B35107D613678734464693B524B24573D0F372000292400182100243200101A0136370F 4039173B330D060700626F42A6B583D5CE98A28B52835F24FFE5A8E5C17FCBAB67FFF6AFE7DD95 F1E49BC2A45CC19247FFE695F3F59FECE597F2E8A1D9D189EEE79BFFF3A4DBAF5DF0A95BC87D2D EAAE58FFE187F2E492F2EEA5FFFAB8FEF9BEFCFBC6E9E2B59D956E524A26342B0A756D4BC9C19E FEFBD5FCF8CAEAE8B6EAE8B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFEFFFEFEFFFEFEFFFEFDFFFEFDFFFEFDFFFEFDFFFEFDFFFEFDFFFFFDFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFEFFFE FFFFFFEDF8EDCEECCEBCE6BCBFE6BFC0E7BFC2E9C4CDF1D5CDF4D4CBF3CDCEEECECBE9CBBEE7BD B8E6B6BFE6BEBFE6BEC6E9C5E8F7E8FAFDFAFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDED175E2D579E4D77BE5D87CE1D478E5D87CE1D478DFD276E1D478 E6D97DE7DD86D6D285372E0290864CCEC47CCAC067D8CF70DFD57BEBE2975248246E6432E9E59B E4DB86D1C469CEC065DED177D5C76ED5C76EE2D47BE8DA82E4D67EE6D781E5D681CBBC67D7C873 EBDD85F1E28CE6DA83E7DB84EEE28CEDE48CE9E189FFFAA2AFA850CEC76FF3EC92F4ED91EAE38A E5DD8CD3CA7B655C0ED8D07FECE58EE5DE84E9E385F1EA8FEFE890EAE085E8DC7DEAE082ECE186 EFE38CE6DB89DED383E9DF8FEBE38FE6DF87E4DD83E6DF84E3DA7FEAE186E6DD82E2D87EE7DE84 E5DB82E5DB83F1E78FE9DF88EBE18AE7DD87E9DF89EADF8DE4D987E9DE8DEEE48EEAE089E6DC83 EBE188E6DD82DFD57BE3D980F1E78FF8EE95F2E88FE8DE85F4EA91F8EE96F3E992F3E992F0E690 EFE590F2E794F5EA97F4E997F4EA9AF0E99AF0E99AEFE89AEAE394FBF3A5E9E193E8E092EBE395 EAE294E6DE90EBE494DCD482EFE6A4B0A67E040000181400BABA84FFFFCC999974070300EFE8DD 6B6555100D00BBBD72DFDF937677314A480C423F0C3330041E1A001E18084844214E4924746E47 ABA26EA49959CBC07FFBF4B3FEF6B1F2E8A1E8DE97F0E69DE8DE97EBE19AEFE59EE9DF99F3E79B F0E7A3DBD6A43433142120007F7D48FEF6A5F4E58FF9E096FFE9A6EFD584E8D773D8CE64E1D670 EDDF7EFBEA90FEE995F4DD8FFFE89BF6DB91E4CC81EAD587EFDC8AE5D486F7E79DF2E086F8E492 C1A461AD9143FFFAA8DDC57F735A2D534317D3C8911E1700B0A567F4E48FF7E28EFCDC89EDC675 DCAF5EF4CD7CFFE392FDE490EFE08CEBE893DDDE89E9E192EEE496F5EC9EE9E091EEE596F8EFA0 FAF1A3ECE395F4EB9CF5EC9EEBE294E9E294DAD78EEAE69DF0ECA1E5E294DED988DFDA89EDE896 EAE490E2DC89ECE593ECE492F1E88FE8DF7EDED776ECE587EDE68CE6E18AF1EC98DCD989D9D88B FCFCB5E4E2997B7B3B251F054D4723C3BE7EFEFCAFDDDC88E1E08AE1E08FDDDB90E5E298E5E394 C9C873B5B462CCC88ECDC9976A66352620043B34178E8963716B44615B31A39F70E1DDACF8F3BF F0EDACE6E195ECE699E7E295D9D688E3DF91F2EE9EF5F3A1D3D37CD5D47AEDF092E8E98CE2E78C EBD7889E5B17C2893FFFF0A2F7EFA4F3ECADEFE9B9DDDDB4BCB895B1A888A59C7881854E5F662C 4748143F3A11584E2062551F7D6E32867733BDAD6BD8C889EDDEA8FFECB4A68646E6C889FFFDC1 AA975E665321E5CFA29980557F674AFFF2C5F5EEBCF9F9C5E6EFAFE8F1ACFAF4BAFAF8C2FCFEC6 F3F1B6E1C78FC49F65FFEDAEFFFDBBF4F9B8FFF9C2FDEFB4FDECB1F6EFB8E3E3B1D6DDB2BBC39D 909877797F5C030500505025696A414D471A220D002105004223008A6838826439856C3EDBC998 E7DAA8EEDBA5C9AC72E3C180F5E69EDEE295E8E49FECE3A3C6BE7DD4CD86F5E396F7CB7BF3AC5C B16512E2A64DFEDE80FAE99BF0E7A4F4EBA8EEE5A2F3EEABFAF4B4FFFDC4FEF9C7C9C49C655D3D 322913504830BCB893EFEFC6FDFCD4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFDFAF0F9F0E9F7EAEAF7EAEAF7EAE3F4E8CAE8E0BBE5CCB4E2B8B9D4B8C2D2C2 CBE8CBD8F9D7E7F7E7EAF7EAEDF8EDFAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6D97DE1D477DFD276E4D77BE3D67AE4D77BE0D377DCCF72 DBCE71DDD073DDD47CE5E1934A400C877D46CEC578C9BF65D9D073DDD47AE5DD8C5E532A675D2D D6D286E0D781DACC74CBBD64D1C36ADDCF76DED077E0D279DFD178DACC73DACC73DED077DCCE76 E3D57CF1E38BEFE188E4D97FEBE087F2E78EEDE38AF1E990F7F098E1DA82C3BC64F9F299F0E98E F5EE95F6EE9AF3EB998F8737ADA554F1E996E9E18BE7DF88E6DF86E7E088E2DA7FE5DC7DF3E88B EAE086E7DD85E8DD89E7DE8DE5DD8CF0E895E0D983E1DB82E9E38ADED67CE9DF86E9DF86E8DE86 EEE48CE3D982E7DD86EAE089DFD57EE6DB84E9DE87ECE18BEEE490E0D583E9DD8CF4EA94EDE38C E5DB83E7DD85ECE289D8CE75D2C86FD0C66DC6BD62D3CA6FD5CC71EDE58AF4EA91ECE289EEE48C E8DE87E8DE87ECE28CF0E791F2E893EFE493E9E091F1E899EDE495E6DE8FF3EA9BF2E99AE6DD8E EDE495F2E99AE5DC8EECE494F3EB95F5EDA1A9A263090200110F00C4C687EDF2B1A6A871070800 322F290C08024F4D26E8E795E3DF8ED8D68CAAA465BAB37DB1AA7AB6AE82CEC597E7E0B1F1EBB8 F4EBB6EEE5A8F0E6A1EBE19CE5DB94F1E7A0EFE59CE9E095EFE69AE6DD92ECE297F2E99CEFE69A F1E89BF6EDADC1BB90231F06211E009E985EFDF1A1F6E28DFDE396FFE79FE4C873D7C261E1D670 F4E986FDEE91FDEA94FDE695FBE194F8DD8EFDE594FCE28DF6DE84F0D97BE8DC83E6E594F3EC8F FFE999CCA266E4B16BD8A65F9D6D307D573079673CDFE0A30F1900C7BE7CFBEC97F9DF8BDEC06D D4B260F8DC86FFE692FBE793F4E28FECE190EBE694EBE898E2DB8CF0E79BE5DC8FDED588F7EFA2 EFE699F0E79AEDE498F4EB9EF5EC9FF2E99CF4ED9FD1CF80EBE89BEAE798DDDA8BDED988ECE795 F1ED9BECE593E2DC88EAE490E9E18EEFE68EE4DB7ED8CE73E2DA82E3DC88E0D988EDE79AF1EDA3 EDEAA396934E30300A605D26D5CFA1DDD5A3D8D491DAD885E2E186EAEA8ED9D785D9D58BDCD892 C7C37AD2CF81C9C77CE8E6ACE8E6B3AAA87949451E2B260B0905002C2709ABA77EF9F6C8ECEAB9 EAE8B2E0DD9DE9E496E0DA8CD5CF80DBD487EBE598E1DB8DDBD689CCC97CE1DD8FF1EE9FEDEA9B E7EA98FFFBAFB67A39A76E28CCB06498954B7B7739524C1C46431C44431F5E5B388B825DAAAB74 C2C48AD0D09DDDD7A6F3E9B8D6CA91E9D89BA89653B9A662EED797EFD89DFCE2A1BB9E4ACEB45E FAE894EED98C9D88407C621EB296543C1E00917A4CE7D996D7D28ADEE294C9CF7ECEC17CDDD490 D8D790E4E096D4B76F9E742BEECF81EFE696E2E394EAE39DE8E89FF6F6B0EFE6ACF2E5B6F8EEC9 F5F4D3FFFFE9465337151B00DDD7AEFFF1C9CAA881734F2DA88863C1A77F9D8760503D1F4D3A19 422C0C3C220A5C431E644B1FB29A62CCC986F3F9B4FFFCC0FFF9C3E2D7A2EFE8ADFAEDAAFBD18D E1A25BB57026E8B465EED680F5E89CECDF9DF8EEA8F3EBA2EBE499F7F1A8ECE7A3F8F4B7F4F1BE F8F4C8DFDBBA9D9777615D384D4B255C5A34FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFEDEEEF0D0EADDC9E7CCCCDBCB D7DBD7E5F1E5F3FFF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBCD74E0D279E0D279DED077E6D87FE8DA81D8CA71 D3C56CDCCE75E0D178DAD178EBE7976258266D632DB5AD5BA59B42E7DE83EADF86EAE28E776D31 564B1CC8C477CDC56CDCCE75D1C36ACCBE65DFD178CCBD65D1C368E3D67AE8DB7FE1D478E4D77C E7DA7FEEE185EEE185F2E589ECE185EADF85F8ED93F6EC93ECE48CE9E28AF8F199B7AF59F7F098 F8F49EF5EF98E9E28AFFF9A4ECE491A29A49E9E291F5ED9CE2DA87E0D881EAE38BE7E084E2D97C EEE58AEAE086DBD17AE2DA85E9E18DF4EC99EBE591D7D17CDAD47CE3DF86EBE48CE5DE86E0D982 ECE48FF6EF97EAE38BE6DF87EAE38BD7D078E7E088E5DE86E1DB82E5DB86EAE08BE6DC87EAE08B E6DC87EDE38CEDE38CE8DE86F1E78DEDE489E9E085ECE388DDD277D9CE72D3C86CCEC368FFF69C EADF86F3E88FEDE289EADF87EEE28CEADE88ECE290F1E696F4E999F2E797F0E595F2E797F4E999 EEE393E9DE8EECE191EDE292E7DC8CE7DF8EF8F0A4C8C37E0F08000200009B977BE4E5BCE4E7AE AEB56A434800848939FBFCACF4EE96F0E791E9E092F2E7A0E6D899E7DA9EDDCF94EADC9CEDE29C F4EA9EE4D98AE9E091E6DD8EE9E093EBE293E9E091EBE293EAE191EAE291EFE794F2EA97F0E893 F2EA97F6ED9DF2E9A9A59E791F1A03231E04B8B16FFFEFA1F2DB89FEE798F0D384D4BA63FAE487 F7E88EF2E48BFFF29DFFEA9AFFE797FDE293FFE795FFE48CE8CF72DFC863FEEA7FF0E482EDEA9A F3EA8FFFEB9CB68C5193601DAD7732EDBE81C29D756A582BC7CB8A1B2604D8D08FFEE191DAB866 D3B864FFEA94F8EC93E0D67DE8DE85EDE38DF4E999F9EB9EFAEDA2EADE92EEE598F9F0A3F9F0A3 F1E89BF3EA9DF2E99CFAF1A4FAF1A4F4EB9EF6EDA0DCD687C7C575E6E393F6F3A1D2CF7EE1DC8C EDE897EEE997E9E291D6CF7EECE594F6EE9AE2DA88E0D887E2D98BD9D082DDD58CEEE69EF1EAA6 C4BF7D474214282300C5C189FFFFCCE7E2A1E4DD96EFE7A5EFE7A7F3ECA5E8E294ECE793E1DD86 D7D181DAD290D2C894D8CFA1A4A46B3F400B565620CCCC9AD9D8AB9695694443170D0C005F5F2C D4D49FFAFBC3DCDB9BEAE69DEBE79FB7B36AE7E39CECE5A2F1E9A7D3CB8BDED699FCF3BAF8EFB6 D3CA94A19E7080704A632B0D3E0100441E0269631F959151CBC68ADED99DDEE8A3EFF3ADF7F1A8 F1EEA9F4F0B1F0ECB1E3D9A4DED29BEEE0A3FFF0ADE7D288E7CD83D6B873F5D696FFE9A8D6B76C AF8C42FEE098E3C881EDCF8FB29156835D26956D39472502E4CE95F0E0A5DED896E4E199D4BF83 DFCE92F0E7A6E7DB95EFC987A97835EFCA81EDDE94E7DF98E7DA9BE1E397E3EB9ED0CB89DCCF9B FEF1C6FFFCD77C7A550302009E9467FFF7CBB6875A8F5A2DB58D62FCEDBEFFEFBDEFE5B1907F50 F7E4B9FFF2CED9BF9C9B83596955204D3F02322E014245066B6330BAAD80DDD4A9E4DEAEF7EAB6 FAD8A1DEA771AD773DF7D496EEE8A2F8F3A4FAF09AECE495E9E099F0E6A9F4EBB4F6EFBBF5EEB8 FBF7BBEEEDACE2E39AF8F8B1F6F3C3D3CFA9706C46FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFDFDF9FCFAF8FCF8 F8FBF8FAFBFAFBFDFBFDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7C971D8CA71DFD179E2D47CDBCD74E0D279 E6D880DCCE75D4C66EDED078E0D77EDAD6856B6032534918C3BC63BCB259E4DA82E4DA81DFD97E 80763A4B3F13CECB7CDCD47AD1C36AD4C66DE6D87FE3D57CD2C56ADBCD72E1D478DFD275E1D477 E9DC7FE9DC7EECDF80E9DC7DEFE285F1E78AF0E68AF3E88EF5EB92F4EC93E3DC84EBE48DC5BD67 C8C06BF4EC96F0E991FAF39AEBE48AF5EE97A59D4B9E9548E3D98FF2E99AF1E995DFD87EF5ED92 EBE288E9E086E9E088E4DB83E4DC88E2DB86EFE994E0DA86C8C26DDCD681DCD882D7D17CE0D884 E7E08BEFE893F3EC96EBE48DEDE68FEBE58DE7E189E1DA82DCD67DE3DC83E9DF89E7DD88E4DA85 EBE18DE0D582DCD27DEFE58FEBE18AEBE187EBE387EEE589F0E78AF8EE91EDE386E0D578C8BE60 EEE288F5EA8FF1E68DEEE38AEEE389EADE87E9DD86F1E592F1E695F1E695EDE292ECE190EFE493 F1E695E7DC8BE0D584E5DA8AEADF8EE9DD8EDAD089F2E9A3FFFFC4605926050000322B1FDDDBC6 F0F2C1E6ECA0E7EC97F3F7ACF5F3ACF0E591EADB85F5E795ECDD8FE2D186F8E99EE7D88BF0DF8E E9DC84EFE386EADD7AF0E588E3DC86E7DF8BEFE793EFE793EEE694ECE490EBE38EEFE790F1EA91 ECE68BEEE78CEEE691FCF3B5ADA5851A1503252108D4CF87F4E497F9E594E1C575DEC36EF9E188 F8E38BFAE898F1DD91F4DF92F5DC8EFFE493FAE08BF7DE86DDC265E3CA67FFED85F5E073FAEF8F F1DD92FDF49EE1CD7F5C3801B18D46E9CA7FFFF2B1BB9F736C5C2CBBB675231E09DBBE80D8AB5D DFBB6BFFEE98EDE188E5E487E2E688E5E88EEBE993F1E696F8E69BFEEBA4D7C97EE4DB8DF4EB9D F2E99CEFE699FAF1A3F4EB9DF8EFA1F2E99CE9E093F1E89BE3DD8CD2D17FE9E695EDEA99D8D584 EBE597F1EB9CF1EB9CE5DE8FDAD382E8E190E9E190E4DB8FD9D18CE0D692DBD390F6EDACE1D998 78703E302700817A50FBF3BBEBE5AEE0D8A0C8C47CD0CB7DECE6A1F2EBACF0E9A9E2DD96E3DF90 D7D283DCD78DC3BB828E835C5D542F646428BABB7AF5F5B8F7F8BDEFEFB7EFEFBAD8D8A381814A 4342153A390B9E9E66EBEAAEFEFBBCD1CB8DD0CB8DE4DFA2F8F4B9F4EDB6D5CD98ADA474897E5A 61552D463A1847412697856B8D583F8D4D29FBCF9EFDF9B7FAF7B5FFFCBCDFD790C3CF7CD6E087 DFDA83EBE494E9E098E8DF9DEFE4A8F1E4A7EADA98F3E198F9E597EBD081A28036E3C17BFFE3A1 DEB371BE9351F6D291E2C383FFE9AEF4D49DA5804F9B7344532D0D492A0DC8B07EF4EFB3DDD792 D9C185F6E3A7F1E6A4EADC95EAC47EAA7931DBB369DBCA7CF1E9A0F1E1A0E3E097DDE097D8D895 D5D096FAF1BEA4976D0C0000886E45EAC698B0824F834E1AA47239F9D99AFDE5A0F5E197E2D489 8B7932F6E0A0FCEEB3E3CA91E3CE92EEE19AFCF9A9E4E596BFBF828479476A5B32554923443F17 615633B194699B6D41825829D9C594E5EEB6EBEDA5F2E999F7EEA5F6EDACEEE6ADF8F0BBF6EFBB F8F2B8F0EDA8E9E999ECEF93E9EC93F6F4BBFBF9CDFFFFD5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1C36BDFD179DFD179DBCD75F1E38B E5D77FEADC84E3D57DE3D57DE4D67EDAD177E9E69193875B493F0DD2CC6FC6BC63D6CC76DDD37B DFD97A91874A382B02BBB869E9E085D8CA71D2C46BE7D980E3D57CE0D377E5D87DE4D779E1D476 E5D87AEADD7DE9DC7CEDE080EDE080F2E585F2E98AEEE486EADF83E9E086F3EB92EAE38BF1E995 F3EB96CFC771D4CC79F1EA93E7E085E5DE82E0DA81DFD7867B7128A89E57FCF3A9EFE796F3EC92 EBE388F3E990E6DC83EFE68EF5EE96EDE590ECE590DED882DDD884E3DE8AD9D480D4CF7BE1DB87 E6E18CE4DE8ADED984E0DA86DFD983DFD983C7C16ADCD67EDDD77FDAD57BD7D277E7DD86E9DF89 EBE18CF7EC9AE9DE8CE3D886F2E794F1E791E5DB82E4DA80E5DC80E0D778F1E789EFE586EFE687 D2C96AD3C96DF9EE92EEE388E8DE84F2E78DE8DD83E5DA81F1E590EEE391ECE18FE9DE8DEADF8D EDE291F1E694E7DC8AE0D583E7DC8AEBE08EE8DD8DE1D695E8DF9DEEE9A6DBD49C4A4424040000 797661F9F9D3C9CC964646193C3922847B57F0E398E9DA86EDDD8BEADB88EEDE8AF7E891EFE187 F4E689E4D776EADE7AEADE77F0E686E0D981E8E089F0E894F2EA96F5ED9AF1E995EDE590EEE78E F2EB90EEE88AEEE88AF7F096F5ECAB8D8465120B023D3912E7E295F2E295CBB367E7CC7CFDEF94 EFDC81E9D884F7E197FDE69DFCE398EED382EACF79DCBF64E2C466F6DB7AFAE17FF6E17DFFED87 DABC66FFEBA8FFE49385661F654D14FDF3A6F4EC9CF8F0A9AB9C6D685A2AC7B676270F03BB955A F5C97DF7DB8BE9D47FEEE88EE2E687E0E888E1E78BE6E790E9DE8EEEDC91F4DE97F5E79AF7EFA0 FBF2A3F0E798E8DF90F1E899EAE192F0E798F5EC9DF0E798F3EA9BE1DA8AE1E08DEEEB99E2DF90 DAD78AE9E398E7E196E5DF93CBC378DFD98AF3ED9DE6DD8EEEE69FD4CD92D7D095F9F3B89D9456 382F09685F2CBFB67BEEE4AADCD399EDE3A9DBD297C5C07BCBC77ED1CD84D0CB84E4E099E0DB97 FAF4B4B3AD726D662D3C3508867E51CFC997D7D796DDDE99DCDE97E4E5A1E7E7A3D8D896E8E9A9 E9E8ADD3D39A7B7A46110F003E3C1BA4A271F4F0BFF1EDBBC4C18DB5B07D665F2F312908382F02 817650C4B792D9CDA9E7E2BAFFFFDAD5A68186461DEFC18AF2EDA8D7D590E3DA97DECF8ED0DC8C C9D37EC2BA68DED580F3E897E6DC92DACF8AEDE39EFFF4ADE6D788E0CC7AE1C874AD8C3E896219 FFE19DDDB375A77436F3CC8BF6DA98FDE5A7F4DCA0FAE7B0D1B07C8160302709012C1308A49855 DEDB91F0DC9AE5D693E0D88FE7DE90EBCB7BAC7E2EDDBA66ECE08BE0DB8BE1D28ED8C98BCFC88B D2D296F0F4B885844D180700AA885FDBA979A36836723C04C49556E9C87FE7D380DDCB72EAD477 D6BD5DA8892BFFF29BE8CF7CBDA758E3D583DDD980ECED8DEEF299E7E5A4ECE1ACFBEEC3EEE4BD CEC79E9A8D688D7247390F002804004C3F1596A673E5EBB0F9F2B5E3DCA0D7D295EFEAACF2EEAE FEFBB8F5F2AAF3F2A4F4F3A1EDEE97ECED97FBF7BAEBE5B0ECE7B1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0C26AD8CA72E6D880E2D47C D4C66EDED078E9DB83E6D880E8DA82E6D880D9D077EAE892AEA279483D06CCC665B7AD54CFC570 E3D981E4DF7B9B9252291D00ADAA59DDD57ADCCE76CEC067D5C76EE2D47BE5D87CE3D678E5D87A E7DA7BE5D878E1D474E2D574E8DC7AF1E583F4E885ECE281EBE083ECE185F6ED92F4EC93F6EF96 EBE38EF1E994DCD481B3AB5AF7F099F1EA8EE7E181E6E085FEF6A5BAB06A635816CCC27CEBE394 EFE88EE4DD82F0E991E7E088F1EA92F8F199E9E38BECE690DBD57FDBD682E9E492DDD886D7D481 DCD584DED786DCD584DFD787E7E18DE9E38FD7D17BC2BC65DFD981DCD77CD6D175D7D277D7CD74 E3D981E8DE89EFE492E5DA8AE8DD8BE4DA87EAE08AE5DB82E9DF85ECE386E4DB7BEBDF7FE7DA7A EDE080E0D373C4B759F1E487F1E488E9DC80F9EB91F2E48BE7D980EEE28DECE08CE9DD89EBDF8A EDE18DEFE38FF5E995F2E691EFE38FF1E591F0E490EADF8DE4DB8FECE49ADED88EFFFFC7C4C28C 22200D090A00787855A4A3852923170400040B0000877A38EFE492F2E793DDD17CF5EB92F0E58B EDE287F4E98EE2D77DE9DF86E8DD85EEE58EE8E08BF0E895EDE594E8E08FF3E99BEFE698E8E090 E8E08DEFE891EFE88EF0E98EF3EC90EAE19F74674D0F0801484217DED887CCBC6FF0DC90FEE897 F1DE81E9DD80EFE18FFFE9A0FFE99DFADD8CE2C66EE5C86AE3C764FFEC88F8E080EFD57AF6DE88 E4CF7BFFE8A1D4A767855C0C8A6C20A08E4EFFFFB2EAED9AF6F7AFBAB57F74692EC3B070260A02 DBBD7FFFEC9EFBE797ECDA86EDE289EFEA8FEEEC92E0DD84D3CD78CDC674DFD485F3E798FAEFA0 EFE796EDE594ECE593EDE593F4EC9BF7EF9EF1E998F7EF9DF4EC9BEEE695D6CF7EE3E28FEFEC9B E3E091EBE79CF2EBA3ECE59DF6EFA7F8F0A8E9E198FAF2A5ECE397E3DC99F2EDB6D0CB9466622B 302A05938D4EF1E8ABCAC081CEC484EDE29FE3D895E8DE9AC1BB7FB5B171D0CE83D6D583CCCB7B DBD89368632D312A007E774ADDD7A1F9F6B3CDCB80CACA84C2C27AC9C97FE5E699E2E394C5C67A D8D891DBDA9BF1EDB8F0ECC0C1BC95201B002421035E5A38403D17312E025450208B8954CCC78F FDF9C1FFFFC9E1DAA3CDC78FE4E2A5EFE5A2E9C284834507C49250EDE899DAD890D6CA8BE2CE96 D5E09DB9C37ED0C27FE3D983EBE28BD9D283D3CD83E4DF96EBE69CCAC372D6CA76F5E18BEDD282 7957109F722BE6AD67B6823BEAC579F2DC8EF6EA9BEDE397EEE19AEFDD9AECD7998F793A352105 0502004A4E10CCC081EEE6A6E2E29BDDDC8EC2A95A9C7626D1B764E8E48FE0E394F2EBA8F7E8B7 E9DCB1BCB4846A663508000080673AC99F6B7E4914A36D34F9CC8AFFE9A1E9D889D6D077BDAF52 D3B656DAAF4ECFA140FBCE70C9A84ED2BE68F3EA93E5E58AE6E98BE1E48CE2E39CEDE3A8F7E8B5 FAEDBFFAF2C2FFF7C4F3D5A19F6F3FAE845065551D3E4B0F373C0D6D693FB4B181DFDDA6EAEAA8 E8E89FECED9FF2F2A4E7E59ADFDD94F0ECAAF3EFB0F3EDADEDE6A5E3DD9AFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D57CD2C46BE4D67E DFD179A3953DD7C971E9DB83DFD179DDCF77E8D981E2D97FDEDB85C6BB944C410CCAC561B3AA4F DAD07BEBE289E3DE78AAA060211501AAA853D5CD72DED078DDCF76DFD178ECDE85EBDE82E2D577 DFD274E3D676E3D675DDD16FDDD26FE5D976EFE380EEE280E8DF7EEFE585F4E98CF5EC91EEE78D F5EE96F1E994EEE692F7EF9C9E9546C7C06AFDF99AE9E381FFFFA4EFE695F6EBA87C71328C813E E6DD8FD8D177EBE48AE8E18AECE48EEAE28BEAE38BE3DD85E3DE87E8E38DDCD783D7D381E8E592 E0DE8CD5CF7EDDD686E2DB8AE2DB8AE5DE8DE1DB87E8E28CE1DB84E7E189E0DB80D5D075E4DF84 DCD279E6DB84E5DB84ECE190E5DA89EADF8FE3D887E1D783DFD57BDDD478DDD374E2D977F8EB8A EBDF7DE0D372E7DA79C3B657DED173F1E486EFE286F8EB90F4E78CE6D87EEFE28BEFE38EECE08B EEE28DF0E48FEEE28DEBDF8AEEE28DEEE28DEADE89E7DA86E6DC84E9E080F0EA93F5F0ADBCB580 E4E1B0D7D6A357592B0405000000000200000D09002A2503BEB670EFE899EEE895DFDA83F1EC92 DDD87DE7E189EEE893DFD889EBE39BE8E09BEEE69BECE493F1E89CF0E69BE7DE94EAE199EAE199 E4DB90E3DB8DEBE292EDE590EDE68FDDD579E5DC976B5F440A0100413C19CFCB76F2E295FDECA1 F8E593E9DC7CEDE689FBF0A0FCEFA1EFD281ECCD75E6C867F9DA74FFE980F8DD78F6DC7FF7DD8A FFF2AAFFEFB1C5A66A906725CCA957E7D0859B8647FCEFA5EBE595F3EFA9CEC691645A1E867B36 2D1D14EDE5A3F9EE9DE7D787EEDD8BFDEA96F0DD88EFDC88EDDD89ECE18DEBE691E8E894E2E38F F5EF9DECE390E8E08CEBE391EFE794F7EF9AF4EC9AECE491F1E995F1E996F4EC9AE8E28FE0DF8C EBE898E4E094F1EDA4F2EBA5F9F2AEEDE6A1E7DD99EDE59DD3CB80E9E094F6F0AEB0AF7835350D 5E5C31DFDB9FF8F3B6E1DA99D2CA84E9DF96FAEDA2F5E698E9DB8DD8D38CC8C682D2D08BAEAC69 706D2E514E138D8A50CFCC93EDEBACD0CF86D0D17FD1D17FD5D38FD2D08CD3D286D1D17FD6D781 E2E38FDEDE90E2E09EEFEAB7DAD4B09C937A4C443327231D161307151403B2B085FFFFCFFEFFC3 F3F4B0E1E097EBE89CE1DF92CBC97BD4D48DE3DA96FBD99A9E5C20A16D28EBE795D3D485D1C27F DDC487CAD68DB0BA6ED0C077D5CC73EAE48CE6E290CDCC82CCCD84DBDE92C0C171D9D480E1D481 EDD88AE1C57C8E621E904F0CB37C36DAB96CDFD180DDDC89D0D583D1D485D6D28BC5BB79E9DD9E D9CD9057582F030F00201A015A5835979E6EBEC38BA8955DBC9B61E2CD91DADB9FD1DAA3C7C69A A59E7C5246372E1C022C11056947218B63308A6028CCAA6BFFEEA8FDECA1FAEA9DF8EE9FEAEA9C ECDF90EFCA77C18732D99845FDC976E9C978F5E394CBC578D0D084E0E095D4D88ADDE394F6F0AC FCEFB5F6EAB2EEE5AAF6E8AACDAB6BA16A2CF2C787F9E4A0DFE398B8BD83919162696A39565725 696834B8B783D8D79DF4F3BCF1EEB3E8E3A6FFFCBFF3EEAFFAF3ABF5EEA2E3DC91FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDACB76E3D57D DED078DED078F5E78FE9DC83E4D67DD4C66DE2D57CEDDF87DBD177DFD986E0D3A94C410AC6C15F ACA54DDBD281E8DD88E4DD7AC6BB79190C049A9744D5CD72DED078E0D279DFD178E1D37AE7DA7E E9DC7FDCCF71DCCF6FE6DA79E5D878E3D775EFE381EFE381E6D979E6DC7BF2E888F1E689F0E78C ECE48CEAE38BF6EE9AE9E18DFAF2A1DBD586ABA34FE9E286FAF493EDE68BE8E08CF3E9A1DDD38F 7D732ED1C77DECE491E2DA83DFD881EFE792E5DE86E5DE84F2EC95E6E088E1DD86E6E08BEEE995 EAE593E0DB8ADDD787E9E292E8E292DDD685E2DB8AEEE994F2EC96D8D27CC5BF67E7E287E4DF84 E2DD82E1D97FE0D880DFD77FEFE793EBE291EBE392EAE290DDD582DED77EDBD47ADED77CECE284 E9DF80F0E686DDD273F1E589C9BE61C8BD60E8DC80F1E58BECE187E5DA80DCD076EFE38CF4E994 F2E691F1E58FF0E48EE9DD87EDE18BF5E993F5E993ECE08AEBDE88F6EA92F0E980F9F297EBE3A8 463F18454128F5F6C9EDEFC0ABAC84A6A47EA19F70949454CBCC7FF2EDA3DFD98EF8F4A2E6E18E E7E38BE9E58EE5E08DE9E396DBD48EEFE7A9EBE2AAEBE19FE0D789E8DD92F6ECA3F8ECA4EEE29C EFE39DECE099E9DD93EFE596F0E695EFE490F3E789F0E49D64573C0E06005E5A23F6F1A0F3E398 FCE89EFAE898EDDF81E5DE86EDE294EBCA78D1AD55EBCD6DF8DF79F3DA71EFD76CFCE27FFADB84 FFE69AFFEDADB0925B72551DE8D696F5DD8CAD964EB69B62FFEAA1F6E697FEEDA5AF9B6A574B1A B7B16C282505D7D793E8E692E5DC8AF4E392F0DA89FAE292FCE392F4DE8DE6D987E8E28EE4E992 E0E68FECE78FECE58EEDE590E9E18DE7DF8DF2EA98F2EA98F8F09EFFF7A5EBE390E7DD8ADFD887 E9E79AE5E396D7D588DBD78CCECA81D7D28CB9B370D1CA86D9D18CE9E19EE5DB9B676035282600 A4A366FAF8B5EEEAA4ECE99EE3DE90EFE899F1E999E0D789F1E496E7DC8EE3DC92E2E09B7B783A 342E009B9662D6D298F4F2ACE7E797D2D37DD3D47BD8D982ECEB9AE2E19BDEDD98E4E49DDBDB91 E4E49AFFFFBFF4F2B18782474F49184A4219746B49A79F83EBE7CDAAA78A221F09252204A6A471 E4E3A9F1F1AFE7E79AEDEE99DDDD83CBCB70E3DF99EFE1A9FBDEA5C288517C4608EEDC90E7DD90 EBDD93E9D88DE0EA94DCE389E8DB83EAE486E1DC81DFDC87D9DB8CD4D88AD8DD8EDADD8AD6D581 D8D27EEFE192E8D68CF0CF8AA66D3083510EC7A45CDECE81B6B76AADB76BA0A861C7C882C8C480 DED697F1E8B2E3E7BEACB59C5C56470605000004000D13041D0B05351509452F13343513181F0D 100F08050402110A0050381E8A6544A67C55DAB186FADFA3E5D693F1EBA4EDE699E7DF91F2EAA0 EDE9A9F9E7A8FFDC9ABC7834D4914AFFCD84FFE19CF7DF9FD5CA8CD9DA9AD1CE91DFDF99E1E696 ECE89EEBE29EF3E9A8F9ECA9FFE29FC2914EB57C36FFD68CEDD587EAE695E7E9A1F7FABAF6F7BD D9DAA8AFAE8265623B252106545028BCB88BF9F5C4F7F3BDFBF7BAF7F3A8F2EB9DEFE99AFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECD7C E8D884E6D681E3D27CD8C871E1D178D5C669D1C265D4C566DCCD6DE2D47AE7D78CD7C8954F4604 ACAC4BADA857CAC178F2E798E0D678D4CA822B20096C6B1FD3CE77D6CC6FDBD073EADF83DDD276 E2D579E3D67AE3D67ADFCF74E3D478F1E285ECDD81E0D375E3D677F3E689EFE587F1E68AEADF85 ECE389EDE58CF2EB93F6EE99F6EE9AF2EA99EBE497C3BD6AD5CF77F6F293FDFA99E8E483E2DD82 F5EE9BADA65B706823EAE09FE4DC91E5DE84E3DC83E6DF85E4DD82DCD47AE4DD82E3DD84E8E28A EBE58FE7E18DEBE491EDE494F1E899F3EB9AF0E897EEE695F1E996F6EE99E7DF89E5DE86DED77D D9D277E3DE83ECE78DE6E088E7E289E5E089E4DE8AE8E28EE9E291ECE695ECE695E2DC8BECE595 E9E291E8E08CF1E995F3EC97EEE891EFE992DDD67FCCC56EE5DF87EFE890EDE68DE6DF86EAE08C E5D889E2D684ECE08BEDE18BEEE389E7DC83E9DE85F1E68EE6DA84EEE28EFAEE9BF7ED9AE9E095 F9F3B59A976A0000006F7151F1F3CAF9FBCCFBFAC1E9E6A1FFFEADE6E18BDDD58AE5DD92EDE597 E9E292F8EF9FDAD180E4DB8BE3DA8CE5DB90E5DB94EFE3A0F4E99DEEE48EECE08CEFE291EDE090 E3D687ECDE8FF2E596F2E596F5E597F6E597F4E492FEE98CE8D28C4F3E27050000828152ECE9A2 EBDA94FBE39DF9E095FBEA92ECE390E5D187CE9445FCCB75FFE586E8DE78E9E47DF4E987FDE78D FFE290F8DE92BD8740986823F9DB9CFFF3B98B7C32AD9A5AAC9164FFE59EFADE85DDBB64A68649 7A662CBDB96F171804D5D190F3EB93E7DC85E9DB87E5D786E2D285E6D589ECDE8FEFE493F0E794 EFEA93E6E188F3EE91F2EB91EAE28DEBE393F1E89DEDE49CF2E5A0F6E9A2F6EAA1F4E89BF2E596 EFE69BEAE7A9E2E29DD0D182C3C270D5D484B8B76BC9C77EF0EEA9F6F3B79F996B251D0063592A CDC278E7DD8DE1D980F1EB8BDCD873E6E480E4E486E5E492F1EFABF9F6BCF0ECB9A89E6D594D18 6F642CE1D798FFF9B1EAE394E3DD87E5DF86E6E086DBD47DF2EB97E3DE8EDADE8DE2E49CEFEFB2 E5E3B6B9B592918B6E453F204C441B908A54E3DF98FDFAA8F4F1A1E9E3A2E9E3A8C5BD8A332A1C 160D00978D6DEBE3BBE7E1AEE0DC9BDAD88AE8E792E8D593F9E2ABF1EDADEBD194804C15D8A870 F0D08CECE795E8F097E5E78DEDE58CE6D97EF5F090EFEA89E4E083E5E488ECEB91E8E78FDFDE87 D3D17CD6D481E3DF8EE1DC8CF6ECA3EAD4957B5719B28740EAC580E3D195D3CE97C8C88EE6E19C F3E7A0F4EAA8EAE6B0D9DDAEECEEC5F5EACBCFC9A9A4A8887E80644A35202A0603240A03261D05 2A260C56492E867D4EBCB485C4B893D0C690E1D4A6C6B997BFB87DCDC990EFE9B7E3E09AE6E099 E8DD9CF9E9ACFFECB0C88E52B16A2EDCB771FAF5A9EBD795F1D099E3CD93DDE7A1F3EDA6ECE29A EDE99EE9E49AF0F0A4F9FAACF1DD95FFD598A1561DCD9E5DFFF7ACD8D98CE2D38EF5EAA4F1EDA7 D5D28DE5E4A1F7F5B8FBFABFDDDCA8868356302D093F3C1A837E62A6A381EAEAA9ECEDA1DEE094 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E4D380E8D882DFCF79E6D67FEADA82E0D176DCCD72D6C769D5C667DBCC6DE2D27AEAD98FDECF97 4F4809999A43BBB86AC0B871E6DB8EE4D97CE0D58933290A5C5B17CECA75D4CB70D6CD71E5DA7F DFD479DED277E1D47AE5D77DEBDC83EBDB82E7D77EE4D57BE6D97DE9DC7FF7EA8EF1E68CF2E78C E9DE84E8DE85EBE38AEDE68EEBE38EEAE28EECE492E7E091FBF4A4817B25CFCB70DDD979F2EE8E E8E386E9E38CD0C87A726924B1A868EDE59CE7E088E1DB81EDE68DE5DE84E8E187DAD379E1DA80 E4DD83E4DC85E1DA83EAE28CE8E08FECE493F1E998F0E896E9E18EE4DC89E6DE89E5DE88DAD37B DCD57BE7DF85DDD87DE0DA82E2DE86DEDA82D2CD78D8D37FECE793DDD886E3DE8CE1DD8BD8D382 E7E292EBE595E4DE8AEAE391EEE893EFE994EEE893E8E28CDFD983DCD681DFD985E4DE87E4DD89 ECE291ECDF90EADD8EEEE28FEDE18BF0E58BE9DE85E9DE85F3E891ECE08CEEE28FF0E491F0E68C E8E18AEDE89CE1E0A38485540103003B3D29B7B78BF8F6C5FBF5BAEEE5A1EEE59CD4CB80EFE69A F4EB9DE6DD8EEAE191F2E897EDE292EFE495E7DB90E2D68CEDE199F3E799EDE28DEEE28DEFE390 EFE390F0E18FF3E492F5E593F4E392EFDE8CF0DB8AF6E28EEFD97CDEC8844C3C2209030088875A FAF8B2F2E59EFBE59FFBE397E6D37CE9DE8DF3E295F3C571FFDB80F5D97CF7E988E4D878EAD87C F4D37FECC678A67729B68A3DFFEA9CFFF1ABDECF9483762CD2C081A88D5FFDE69CD2AF53E9C468 C6A3616D5A1BC2BD750E1000BEB978F3E78DEADE86EADE8AE7DB89E4D788E7DC8DF5EA9AF7EC9B ECE28EE9E088EAE189EFE98AEDE78BE8E08AECE394F6ECA3F7EDA7F6E8A6F5E8A3F6EAA1F6E99E F2E696EBE392EBEA9CEAE8A2DAD796CFCD8AC7C67BD4D486F0EEA8F4F0B7837E503E3811969060 EFE6A5CFC471E3D982EAE287EFE98DF0EB8FE9E58BEAE894F4F3A9F6F3B2A3A26A53501E7B733F BFB478F7ECACEAE19ADAD285F4EC9ADFD883ECE591EAE291ECE495F2E99FEAE29CF9FBBBDADA9E 91915A4846175A552D9D966FCEC79CF4EDBAF6F1B3EBE69DE6E08EDCD781E0DA85E9E297FCF6B7 E1D7A35249271006007F774EE1DBA9E7E5A5DCDC91D7D784F5E599EFDD95E9ED9DF9E99F966928 BE8144FEE49CE6DC86DFEC8DE4E88BC9C369D8CB76F4EC9FE9E199D4CC84D0C881E9E19CFFFAB7 F3EDABF6F1B1F0EBACDFDC9DD0CD8DE4DEA8E8DAB4B38F628B5B2D95653B795D3F7B6E534B4326 6D5F33836F3E806F42574F2F3A3B143939114031145B532E848560797B58422C1A2F0903351901 2920032F2B0D4C3F1E493C28584C32605737979061B0AA85817B62777245CEC89FC3BA96FBF7C2 FBF7BFFFFFC8FFEDB4FFDAA1DDA56EC2814AF8E29DD9DC93DFD597FDE0B0F7E3ADE1F0AAF4F2AC F7EAA7EFE7A5DBD891CED386EAEB9DFFF7AFE3AA6CA0561CDDB56FFEFBACEAF19FF2E69AF7ECA1 F5EFA4E3DF94EBE79DEBE7A0E8E5A0FDFBC0EFEDB7D6D4A6B8B58F7E7A5A3F3B1C423F1D898659 CAC79BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBCB74DCCC75D6C66FE2D27AE5D57DDACB70E0D176DACB70D6C76CDCCD72E0D079DDCC82 D9CA914C440F75752CC2BF70B2AA61E3D88AE8DD81E7DC9142390B464512CCC875D8CF74D1C86D DFD57BE5DA80E4D97FE4D67DE1D27AECDB83EFDF87E1D179E0D078E4D77BE4D77BF0E387EDE288 F4E98FF1E68CE8DE85EEE58DEDE68EE6DE89E5DD88E9E18CE1DA89EDE794C5BF69BBB65CF4EF94 E0DB80D1CB73E6E08CFAF3A3C7BF745C540CBFB669E1D985DFD882F9F29BE4DD85F0E991E9E288 EBE48AEAE389E5DE84E0D97FECE58BE0D885F0E897FAF2A2EBE390E5DD8AF7EF9DE4DC87E3DC86 DAD37BDFD87EE7E086D6D077E3DD87E3DE89DBD682CBC672CEC975E2DD89E2DD8CEBE694E6E18D D5D07FE1DC8AE6E18DE4DE86E1DB83E4DE87E5DF8AE1DB85E6E08AE8E28CDDD783E0DA86E7E18D EEE895F4EA9AF1E495EFE391EBDF8CE6DA84E8DC85F3E88FE8DD85EADE88E4D884E9DD8AEEE38D E7DF7CEDE885E6E38CDCDD96F1F3BCB5B78E4142260807006C6842A69D74B6AB7EE9DFA6D4CB7F F0E798EBE392F2EA98D9D17EDCD380F0E593EBE090E1D688E1D48AE8DC93EEE296F0E593F1E593 EBDF8DEADB8AF1E18FF5E591F1DF8BF5E38DFFEC96F8E28CD9C26CD6C26AF2E1A250412A0B0500 A8A77AF9F7B1ECE096EEDA90F0D88CBFAE56D4C874EEE392E7D175E8D072F0D97CFADE84FEE28A FFE894E9C171966E1FC1A150FFF7A5F7E996ECDE93CEBD7C726215F7E9A89E8451BEA257D3B356 FCE68ADCBC775F500DCAC885121700AEAB69F5EA90E6DB82E0D47EE7DB88F0E492F0E595FCF19F FBF19EEDE38DEAE087EDE489F0E98EEFE88EEAE28CF0E897FBF2A7FDF4ACF7EAA4FAEEA7FAEEA4 F5EA9BF3E995F2EB93F4F396EFEC9FF0EBAEE5DFA9E0DA9FE1DCA1D2CD933F37082E2814E6E2A6 F7F3A8EEEB96DDD67ED9D17EE4DC8DEDE59BE1D893F1E9A6FFFABADDD898454012474305C0BD7B E8E19AEDE79BEDE79CE5DD92DED78CE5DE94EAE298E6DE97DDD691F9F0AFEAE1A1D7D194777241 44410F5C5A23C9C68AFDFCC0F6F3B0FAF5AEE8E49BD7D088D8D18CE2DB95E8E192E9E489EEE691 E0D98EF8F1B1F3EAB2645E320903006E6C2CD5D493D9DB90CED181D4CF7FDAD281E8E794F4E295 9D7631894F13F2C483F1D991E1E393EEF5A4F9F7A9F6E8A2F3E6B2E1D4A8C9BC8FB9AC7FA19569 83774C6B5F346C6237564E223D370C332C024C431C5C49283C1804653409A876506C503364563C 898060BCAB81B7A070AD956CB9AD8EC8C79CD4D69DDED19EADA5739A9C6AB1B3838D7650876041 CCAE8AC3BB8DA5A4719A8F5DAD9F71A5966D7C704871653D5C532E352A0B2B21004136112A1E01 574A1C9B8F5C796C396D612BD4B682A47540C38D58FFF3B3F7FFBCE8E3ABFEEABCF9EBB9E5F5B5 F6F7B7FDF2B6E8DBA4D7D796EBF0ABE2DD95FEEAA9B47C3CBA7F3DFFE498FAF8A3ECEF94EEE893 F4EF9DF8F2A4F8F2A4FAF3A5EFECA0F3EFA6EFEAA6EEEBACF4F2B7FEFBC7FEFED0FFFFD7B7B195 4B452E1C1602FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFDFEFEFCFEFEFCFEFEFC FEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFEFEFCFFFEFDFFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD9CA6EDDCE72DFD076E8D97EDECF74DBCB73E4D47DE0D078DFCF78E8D780E7D781 DDCC80E0D293665F26706F27E2DF92BBB368DDD381E8DD83E6DC915E5418393910CAC574DAD176 CDC469D6CD72E5DC81E9DE84E7D980DCCE75E0D279EBDB83E6D67EE4D47CECDE83E7D97EEDDF86 E9DE84F5EA90F8ED94EEE48BF3EA92F1EA92EAE38BEAE38BEFE791F1EB95DED881FFFFB0B3AD58 A7A14CE1DB86DDD784D1CB77E4DE8AECE693867F2D857E2DE1D987E7DF8CE0D784EDE591F2EA95 ECE58DEAE38BE9E288E5DE84DFD87DE6DF84EAE38EEAE291E4DC89DBD381DCD480E5DD88E4DC87 DBD37DDDD67EE5DE86E3DC84DDD67FDED885D8D380DAD583DDD886DED985E3DE8ADBD682E8E38E E7E38CD3CF7AD8D37EDCD880E9E389E5E085E6E186E9E48BE8E28AE7E18AE6E08AE6E08CE9E390 E7E08FECE494EBE090E4D989E5DA88E7DD89E7DD86ECE38BF0E68DE3D981E9DF8AE7DC8AE6DB8B E7DC89ECE483E2DC7DF8F29FCCC985ABAB73F7F8CDD0D0AC7A78532C271E312B0C1309004F460F CDC77BEAE393D2CC7AE7E18BE0D883E7DF8AECE490E4D987DFD484EBDF91EDDF96E8DA91ECE193 EFE295EADC8CE9D988F1DF8CF9E791F9E58DF8E288F8E085F3DA7FE7CE73F3E38CE4D79C2D2012 0D0700C6C596ECEBA1E3DA8CD2C276EBD988EDDD82F1E58CCEC872EAEB8AF0EA88FDE58CF6D481 FFF1A3E7B86EB07F32C8A656FFF9A6EAE08BEDEC97F2EC9CD2C07A948236E7D895664D15C2A85C FDE187FFEA8FDAC17560530AD0CF8F151D008C8A4BF0E78BF1E78EECE28BEDE38EE8DE89E7DD8A ECE28CEDE38CEFE58DF3E98FEFE68BEEE78CF0E990EDE591F0E898F5ECA0F2E8A0EDE39BF7EEA3 F4EC9EEBE391ECE490F4EE96F2EF96F9F59CEBE796F4EEB1FFFCDBAEA08A2519126E642EF3EF9F F0ED92E9E58BEBE88FE7E18CF1EA9BE9E19BE8DFA3EDE3AEF0EBB99389553E3603A29A5BF3EFA5 F3EFA1DEDC87CDCB75D6D280DFDA8CD8D48CE9E3A0EFE8ABF7EFB5DDD69DAEA6725A531D322B0D 736D3CD7D19FF1ECB3E1DD99ECE79CEEEA99DDD886D3CD7BE6DF91E7DF95DFD690E5DC8DEEE78B FCF198E9E18EE6E092EFE9A1E6E29D5C592C12110078793DE0E2A0C8CA87D3D792E2E39EE8DD9E FFF5BCEFCC9A955F34F1BB93EED0A7B7AB7C969B6A87875F68583B3A2A0F312000271706322314 4839204E4026786B47877C55988F67B5AC84CAC199E5DDABEFE3A0AB8D3EC19945FFF3A3FFF9B1 E5DC97CCC77CEADA85F8E88EFFFAA5FBF0A8F0F0ABF1F1AFF9EBAEE0D698DEDD9EEAE5AAB99E69 A17745F5DAA4F4EDACE9E9A3FFF5B2FBEDAAFFF2AEF3E6A4F1E4ADEBE0A8ECE3A7EAE0ACE4D9A0 D7CC8A8D8041796A27685D235B572C6D5520441904451B00474102515F1E7F804EC0AD82D4CB9C CCDCA0EBEDB2FFFDC7F6EABAC9CD95C4CA8CC9BD80F6D195956526CBA15AFFF6A7F7EC98EEE88F F5F89EEDEB98EEE79AF9F1A4F5EEA0F3ED9EF9F4A6F3EEA3F1EDA4F1EDA7F3EFADF4F1B2F1EDB5 FFFFD6F7F2CDC6C19AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF5FEF4E7F7F2DEF3F3DA F2F3D9F3F3D9F3F3D9F3F3D9F3F3D9F3F3D9F3F3D9F3F3D9F3F3D9F2F3D9F3F3DAF6F3DDFDF3E6 FFF9F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDACB6DDECF71E0D173E7D87CD8C96EE3D37BE9D981E2D27DE8D783F0DF8C EAD986DFCF7FDED08D756E32666421EEEA9FC1BA6CD5CC76EBE086EBE1947B723329280BC0BA6D DFD87DD5CE73D7CD74E4DA80E4DA81E2D77EDED279DED077E4D67EEBDD85EADB83F0E289EBDE84 F0E289EBE087F6EB92F8ED94F2E88FF3EA91F2EB91F0E990F2EB91F3EC93EAE48BE7E18BF1EB97 DCD5848C8536DFD889D4CD7ECDC675E8E28CEDE88FEEE98F8A842D918838F5EC9CE9E190EDE594 F1E997F5ED98EEE78FEAE388E5DF82D9D373D0CA6BE0D882D8D07DD1C976DDD580E3DB86DCD47F DAD27DDAD27DDBD47EE0D983E4DD87DFD782E8E191D8D181DDD686E8E291E5DF8CDDD884DFDA84 EAE48EEDE790E0DA81E4E085E2DD82E4DE81E4DE81E5DF82E8E186EBE58BECE58FE4DC87E4DC89 EBE393E3DB8BE0D789ECE192EADF8FE6DB89E8DE8AE5DB86E6DC84E7DD85E0D67FF2E794F3E897 E9DE8EE7DB8DE6DA8DF7EDA3F6EEAB908A54100D009D9C73F3F2CAE0DEB6DAD8AAD5D19FCCC691 BCB678DDD88BCFCB7AC5BF6DEAE490E4DE88E0D983EAE38DE5DA88E2D785F1E596F1E398E6D890 EBDE96F1E399F1E295F0DF8FF5E28DFDEA92FBE48AEDD478E2C96CEED274FFE78AFFFAA8C9BE8A 1F1508171000CFCD99DDDD8BCDC776C7BB6CD8C776E5D679EEDE83E8DE86E7EF8DE5E080FFE490 FFE499E9AD67884C04D5AB60FFEF9EEFE590FCF8A2E7E48FE6DE8DD3C377806B1EC6B16C695314 DBC477FDE58CF9E086ECD7886D631CD2D49A1B23007F7E41F7EF95F3EB91E5DC84E9DF88E7DE87 F1E691F3E990F3E88FF4E98FF4EA90E8DF84EBE48CF1E993F1E996F1E999EEE59AE3DA90E8E095 ECE497ECE494E8E18EEBE48EEEE98EEEE88EE2DC87F4ECA5EAE0AB7B6D4525170EB2A380FEFCC9 E2DA8FF3EF92E0DD74E4E182DDD989F3EEA4EBE6A2FBF4B8AAA16942380A8D834DE5DB9EF1E8A5 E7E096E3DD8CD3D179D2D279DFDD8BE2E095E1DD9BF5F0B5EFE9B27F7949342E074E4915A09B66 DED89BF5EFAFE9E3A0C8C17FC8C27EE3DB95E9E297DAD387D7D081EDE696F1EA98F0E995FAF59F EDE28DF5EA98F4EA98E3DC8DF8F3A9E3DF9AF5F4B2817F471313009B9B69EAECBBD4E0A8F4FCC5 EEDCACC1AE8192744C52281355241F5B2513321900323510545638897964A29370C1B286D8CA9B E0D2A2EDE1AFF9EEB8FFF7C1FBF3BAEEE6ABE9E3A6D6D093D1CD8AF1E79AC9AD57BA9437F3CF73 F2DA89F3EB9AF3EE9ADFCF6EBFA744CAB254DBCD7DEEEB9FE6E39AEFDC98E3D38DE4DA91D9CE82 A985419B6B2BFAD58FE1D384E2DE8AF5E795F1E18EF1E48DF0E48DF5E8A4E7DE95E9E28FE8DEA0 D6CC84DAD179D7C97EF2E391F6ED9BF1F2B5F4EEBD9D7341926E39C1BF7E97A464838251695B2F 3E3608333D046D6D329D8F5BAA966BB9BD88CBCD94EEDAA3D9AE798D662AEAD28DFFF5ADFCE9A0 ECE095EEF4A3E7E89AECE39CF6EEA4E9E197F5EEA3F9F2A8F2EAA0F6F1A6F9F3A9F4EEA5F2EEA6 F7F3AEF0EEA9F0F0ADFAF9B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFFFDFCFEFDFAFDFDF9FDFDF9FDFDF9FFFDFAFFF0E0FCE3C1ECE0AD E2E1A4E1E1A3E1E1A3E1E1A3E1E1A3E1E1A3E1E1A3E1E1A3E1E1A3E1E1A3E1E1A3E2E1A4EAE0AB FBE0BEFEEEDDFDFCF7FDFDF9FDFDF9FDFDF9FEFEFBFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE1D372E3D574DDCE6FE6D77BDECF74E5D57EE7D782DFCF7AE7D684 EEDD8DE6D584E5D484D7CB83736B31514D12E0DC93BBB564D4CB72F2E78EF2E7998B8240131104 B5B066E8E188E4DD83E1D77EE8DE85E1D77EDDD279E6DB82E5D77FE2D47CEDDF87EFE189E7D980 E5D77EF0E289EEE38AF7EC93F7EC93F2E88FEFE78DEFE88EF3EC92F4ED93F4ED93EFEA8FF2EC93 E6E08AFFF8A7CFC87A8B8338D3CD7DDAD382E1DB84DDD87DEDE88AE6E2895A5108B1A858F2E99A F1E899EBE293EEE694E8E08BE9E289EFE98CE8E282DED876E3DD83EFE794F6EE9BEDE590E5DD88 E8E08BD5CD78E6DE89D7CF7AD5CD78E5DD88D5CD7AE1DA89D1CA7AD8D180EBE593EDE793E8E28C E8E28BECE68EEEE98EE5E085EAE58AE7E283E6E080E8E282E5DF80E3DC81E9E288EFE78FE2DA85 DBD380E9E090E7DE8FE0D789ECE292E9DE8EE5DA88ECE28EEDE38EEBE28AEBE18AE3D984F3E897 F0E596EBDF93F2E69DE4D697EBDEA4ECE1ACE6DEAD3C371D272400B8B588EDECBDD1D19DE9E8AF DDDB9FD9D793D6D388D2CF82DCD98AE4DF8DDCD682E9E28FE6DE8BE8DD8BE1D584ECDF90ECDF91 E9DB93F4E5A0F9EBA3FAE99DF5E495F5E08CFBE48DEBD477DEC468EED276FBDE80EFD276F2E79A E6E1B0574F3C2E270CE3E1A8E2E38DDED985D4CA7BDFD17FFFF194FEEE92F7E68EEAE78AF1DF87 FFEB9BE9B87095530DD8A157FFE496F6E291F2E893E8DD89EAD989F7E291D7C06F705A0DE1CE87 8C7935AF9C4FFFED9AF2DD86F3EB9B685F1BC4C5921D2507616228E5DE86F6EF98F3EA93F5EB94 EEE48CE4DA80EADF86F0E58BF5EA90F8ED92F1E68BEEE48DF5ED99F9F1A0F9EFA1F0E79ADFD78C EDE698E5DE90E8E191F0E997F0EC95EBE790F4EE97FCF3ACE7DCA153472A1E1200E6DBA3FFF5BD ECE1A6D1C982E5E088DDDA71E7E487EBE79FE9E59ED7D38E69641F3F3707CAC37EF8F2ABECE39C D7CF87F8F0A7F4ECA2E0DD8BE3E290EDEB9FF8F5B2D4D0948A85503D37034E4913ACA76FECE8AA F8F4B2DDDA93DAD487E0DA8DEEE89EE7DE9AD9D08DDAD18EC9C07ADCD48AEAE493F1EB95F3EE92 EFE893F8EBA3FAEEA6EBE29AF2E9A1E2DB96E8E3A3DAD49AF3F0BC68663E181500959475606F40 49531C1F0A00190000341C04492A07581F01BC8464F0D1A9FDFCC9F6F9C6F8EBBAF3E8AAF7ECAB F4E9A7F3E9A3F3EAA2EFE79DF2EA9EEBE596E1DC8AE7E390E3E18BE8E392E5D994D7BA6C99701B F6D07EEAD187E0D48DEEE69AFFF099FEE48AE7CB79A99751AFA65FCDC276E6C982E9D086F3E08E F3DC89A47629A3661DFFD889DAC56CEDE285EBDA80F8E693F9E895F0E38CE3D594D5C882E9E28C C4B880554A0EEFE58CF5E69FEDDB8EFAEE9CEEECACFEE1ABA1713DD7B678D9D791F0FAB6F9F6BD F6E8B7FFF9C6F4F5B8B2AC6E7F6D35624E203030012E29006D50217C5022977943F7F1B4FCF1B4 FFF0B8F5E5AAE9F1B0E5E5A5ECE2A5F0E7A6DCD391F1E8A5EFE6A1F8EFAAF2EAA2F1E8A0F6F0A6 F2ECA2E1DC93F2F1A1F3F5A2EBED9AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFF9F3FEEFDFF6EBCFEDECC6ECECC5F0ECCAFCECD6FFEDD1FDEECB F4EECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEECBEEEDCB F3E8CAFCDEC9F6E4C7EDECC5ECECC5ECECC5EDEDC8F5F5D7FEFEECFFFFF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF FEFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFEFFFEFEFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD16EDACC6BE3D475EADB7FE9DA7FE5D57FE2D27DE9D786 E7D687E6D587ECDB8BE0D07EE0D58798914B4C4809E9E59EC1BB67DED67ADFD47CF9EFA09F9653 110E01ABA660D9D278EBE48AE0DA7FE2DB81D4C970E4DA81E5DB82E6DC82E5DB81E5D980E9DB83 F2E48CF5E78FF5E78FEEE38AF9EE95EADF86EBE188F5ED93F1EA91EDE68BF2EB90F6EF94E9E488 E7E189E9E38DF1EA99F1EA9B958E3FB9B263E3DD8BE2DC85DFDA7DECE888EBE48ABFB765797121 D2C97BF8F2A5EFE598EBE393F0E895EAE28AE1DA7FECE686EFE987EEE78DF4EC97E3DB86E0D883 E2DA85E9E18CEFE792EDE590EAE28CE4DC8AE2DA87E5DD8AE3DC8BE1DA8AE3DD8BD9D280E0DA86 DED882D9D47CE1DC83E2DD82DEDA7EE1DC80E7E182E9E17FD7CE6FE9E081DED479E8DE85E2D880 E5DB85E8DD8BE9DE8EECE192EDE292EFE695E8E08DE5DD8BE9E18DE6DE89E4DD84DAD37DE4DC88 EBE392E7DE90E5DC91E9E098E9DB9CDDD095E1D79EFAF3BDC4BF88423F27161400838258DEDEAC EEEDBAEEEDB8FAFBC0EAE9A5F0EFA7E3E097DCD98DE2DD8EE3DC8CE9E190D2C777DACE7EEDE091 E6D98BEBDC93F1E09BFAE9A2EFDE92F3E18FFFEF98E7D27AC9B256EFD77AFBE185E9CF74F0D77F FEF5AC8A885C0A02007F7759E7E1A4F2F196E8E48CEFE796ECDF8DEDDC80F8E287F8DD87FDE591 FBE393DEAB60A1631BE2AA63FFE094F6E18FEFE28CFBED98FFE998FFE095F4CC80BFA5536E570E F3E29C8D7F3796873CFFF4A5EEDF89EBDD8B756E2F9A9A6E3F462466662CD7D17DF2EA95F1EA93 EAE38BF7EC94EFE48BFAEE94F3E58CF7E88FF2E48BE5D980F3E994F4E998F1E595EEE596EBE396 E1D98EE2DB8FE3DD8FF3EF9FEFEB9AE4E290FBF6A9FFFAB5C5BB7D40350F6C6234FDF4B0F7EFA7 EFE79CEEE69DE6DE92E4DE8CE5DF86EEE89AE5DFA09F9A58514D0F92903CEAE68DE2DE84E6E289 E9E290DDD58BE3DB95EDE4A4EFEBA6F6F4ACB0AC69524E2A2C270059542AB3AD77EFEAAFE6E2A0 D6D48BDCDB8AE1DF8CCBC575E4DD8FE4DC91D6CE87DBD28CD5CC86CBC37BE4DC93E7E193F3EF9C E8E38EEDE59CF3E4AEF8E9B3EFE3AAF6EBB2F4ECB1DAD399D0C9979590673B371F080400151106 27321B4D5929988544C9B574FBEBA7F2E5A2AF8346AC7639FAE29CF8F1A1E2E18DF2EB98E7DC8B E6DB89E7DD8AEBE490E1D983ECE58DF0EB90E7E385E8E486E4E180E6E382EFEA96F0E3A9E7C888 A77C34EFCC86E9D090E5D79CEFE5A6EDD88FF8DD93FFE4A2F5E0ACD3C688E4D98ED0AF67D1B265 BFA34FEDCC75AE7422B97324F9C976ECD074DAC86AE5CD76EED896E5D395B4A662332201A89966 FAEFAF5445214C3E1EEEE8A4F2E1ABF9E5AAECDF99F6EFADF6D2979C652ADDBF7AF6F3A7E1E599 EAE2A3EFE2A9F4E8ADFFF7B6FFFEBAFFFCBCFFEEB8E0D99FB6A46E7D5728330A003B2300373300 675C2D9F855FC5B08BE2E7BCFDFCCBF5ECB6F0E6B0F5EBB3ECE1A9ECE2A8FDF3B8FCF2B6F4EBAC F0E7A4F2E9A6F1E9A4EFEAA4FAF8B0F4F1AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFFAFCFCF5FAFAF0FAFBF1FCF2E0FDE5C4F1E0AFE3E1A5E1E1A4E8E1AAFAE1BDFFEECE FFFCE0FFFFF3FEFEFCFEFEFEFEFEFDFEFEFDFEFEFDFEFEFDFEFEFDFEFEFDFEFEFDFEFEFDFEFFFE FEFEFDFFF6F5FEE4E1F0E0C1E2E1A5E0E1A3E0E0A3E2E2A6EFECBAFCF8D6FCFAE6FAFAF0FAFAEF FCFCF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFF EEEEFEE4E4FEE1E1FFEEEEFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFBFBFFF1F1FFE1E1FFE3E3FE EAEAFEF8F8FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D472E1D371E0D172E4D578E8D97ED9C972E5D57F EEDE89EAD987E7D687EAD986DCCD75E5DA869E9753413C05DDD893B9B45ECBC264E8DD85F4EA99 BDB66F141000A19C5BDFD981EDE78FE7E087E8E189DFD77FE0D67FE3D982E2D880D9CD77DACE78 E6DA83F6E792EBDD87EBDC86F0E48EFBF098E2D77EEDE38AEFE68CEAE388EBE48AF1EB8EF1EA8F EAE589DBD57DDFD982E5DF8AE9E390DBD58297913ECBC56FF5EF98E7E287DED97DD4CE75EFE794 C3BB6A6B6214DBD386EDE498E4DB8EE6DD8EE9E18DDFD87FDBD577E5DF7FE5DE84EBE48DE1DA82 E5DE87E9E18AE9E18CF2EA95E3DB87E7DF8CE2DA87D4CC7AE0D885ECE592EAE290EBE38FDDD681 DDD580D6CF78D7D078DED87FE5DE84E9E388ECE68BECE589E5DC7DD8CF71E3DA7EE9E085EFE58C E0D67EE1D780E3D984E6DB89E9DE8CEDE290E8DF8DE2DB88E1DB85E1DA85DFD983E9E28CE5DF8A E7E18DE8E190E2DA8EE1D990E8DF96E9DE90E5DB8CDDD588E3DC94EBE6A5E9E7AC4F4C22030100 3D3A16686746858366A5A47FB8B67ED9D89DEEECADE2DE9AD9D58DE4DD92E4DC8FB1A657E6DA8B E7DA8CF8E99CF3E299F1DE9AF7E59DF6E497F5E390E6D37DDBC76EEAD47BE8D279EFD681EDD481 FAE492AAA65F1E1F050300005A4D2DFAF2AEF2EE8ED6D176FAF3A1EEE092F0DC82EFD177FEDC89 FFE397C9964BA06A20EBBB70FFE293F0D582EFDF88FEEF98F5E08BFEE090FFCE86CD9D51F3D888 7F6A27C6BA79BBB46B574C09FCF1A7E7DA8BF2E894867F406F6D4544472C4C4A1AC1BB6CECE594 EEE693E8E08AF0E68EEDE289FCF198F4E68EECDC85EADA83F5E68FF8EC99F1E696EDE292F1E89B F2EA9EE5DD91E7E197FAF5ABE6E298F9F6ABEBE99DFFFABA948A5C302700A19A57F3ED9EFFFDB3 DBD38BE9E395E5E189EAE68BE8E291DDD694DBD3984941165B540EE2E092F2F094E4E27DDDDB74 D1CF6BE7E28AD9D287F5EDAFF5EBB5B5AF703D3811130D005F592AD9D49CEBE7ABDDD899E6E19D E1DE92E4E28EDEDE82E3E28AE1D994E7DD9BF1E9A1ECE597E2DC8AD9D47FE4E08CEEE89AF2EEA5 E9E4A2ECE6AAF7F0BBFFFCD3FFFFD4FCF0C2CBC08D5B512118110C1C15003F370E706A4C5E573E C1BBA0D0D7A4CAD18DE7D499E3CF90DCD08AF4ECA3CDAD668C5E16C5974AFEEC96EEE386EBE385 EBE089E4D986DED381ECE18FEAE18DF1E995E1DA84E8E28AE4DE86DFD981E3DF87EAE592EEE29A F1D382B58C34EAC76FF3DC8CD4CB7ED3CD7DFEEE95FAE38AF4DC8BE8D898E9DF9DFFFDB6FEDB96 E7C478E1C06EF4CD75BD7F2DC4782AF3B664CFB057D0BE64DCC573EBD69AEEDEA6584A280C0000 A59A67D9D097322500615630FAF6B5DFD199ECDD9FECDF9AEEE49EEBBC7E9E5D20D5B368D5CD7C D9D988E9DE99E7DD9CF1E6A4F7E7A3F7E99FFDEEA8F8E5A6F0DCA1FEDEA7A87D4B9B7642D3C28E BDBB87A49A6E715A3A412D0F3336156B6A3FB0AA77EDE4B2FFFACAFFFCCCF7ECBBF6ECBAFDF2BD F5E9B3F1E6ADFDF4B7FCF4B8F3EDB0FBF5B8F6F1B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFAFEFFE6F1F1C7E4E4ACE2E2A9ECE9B7FAF2CBFCF6DAF6F6E1F6F6E3F8F6E5FDF6EB FFFAF0FFFFF6FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFCFDFFF7F7FAF6ECF6F6E3F6F6E2F5F6E3F6F5E0FBEDD1FBE4BDEEE3B1E2E3AA E3E3ABF0F0D2FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F0F0FEA9A9FC7474FC6262FDA5A5FFF6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFEAEAFFB7B7FF6464FE 6C6CFC9696FBDFDFFEFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DB7AEBDC7DDECF70DDCE73EEDF84DFCF78 EBDB86EBDB86E3D280E4D380E9D885E1D279E5DB81A29A55292300BDB876A9A44CB4AC4AFAEF98 E1D885BFB86F1C18008B8548D2CC74E6E088E7E088E3DC84D8D179E0D77FE1D780DCD27BD7CB75 DDD17BEDE18BE3D480EEDF8AF6E792E8DC86F4E891FAEF96E9DF86EAE288EAE388EFE98DF0EA8C E7E085DFDA80DBD57DDFDA81E7E387DED97DF2EC93AFA951908A34E9E38DE7E18CF4EE9BD7D07B E1D984FAF29F999141595003EAE196F7EEA4DED589D9D17EE2DB84CEC76CD9D375D3CD72DCD57D DED77FEAE38BE8E189DBD37EE6DE8AE6DE8AEDE592EFE794EAE290F0E896E2DB85E5DD87E9E38A DDD57FDCD57DD5CE76E1DA82E2DA83E6DF87E9E289E6DF87E2DA80DFD679DED579DED478E9E085 ECE289E5DB83EBE18AE9DF88E8DE88EAE08BECE28CEFE692DAD480CCC670DAD47EE8E28CE9E38D DED883E6DF8EE9E293E0D88FE0D890EDE69AF6EC94E9E183E4DD83E4DE8AE3DE91E5E19FE7E5AF 9B986C25220A0302000200000807030F0C0A34320ACCCB96FEFCC4DED99BE6E09CF2EAA1ECE095 F7EA9EEFE295F7E79AF4E299F1DF97F4E096F3E092DDCA77DFCE77EBDB83F8E890EAD883ECD889 F9E499BAA75E141300161805190E0080724BFFF3ABF4EE89EEE78DEFE596F8E99DFEE791FFE692 FFDC8ECC91479C641AFFD185FFF5A4F7DE8ADFCC75EEDE86F5E18BFFE693EFC374E3AF62E2B76A FFEC9EA69258C5B97BE0DB91544D0AE1D894E4D98CECE38EA8A0655751315C5B42494517BFB96D E2DA8EE9E191EAE28FF1E791E5D983E6DA82E0D27AEEDE87F4E48FF8E895FBEF9EF7EC9CF0E596 F1E89BF3EB9FECE49BF0E9A2F0EEAAFEFBB7DCDA96FFFFBD72703A211900B8AF75FFFFC2EEEB9C E2DD8EEBE898ECEA98EEEA94EDEB98F0ECA29B9259312800AFA568FFFFBCEFE996ECE98DE7E581 E3E17ED6D376E3DF8DF1EAA5D2CC94645D2D100900463F17C8C184F7EEB3EAE4A4E7E19DE1DA90 E6E393E0DE89E7E389E3E184ECE792F2EAABD6CD8FDCD48DE9E295F0EC97EFEE95D6D480E5E197 E3E09FF2EEB9FCF8CDD2C9A39B926C5F5631362F031F17014E4712938C55BFB882F4EDBBFFFFD3 70673BBEB68AF2F2BCD5D496DFCE95F0DCA2EEE0A1EAE39DFFEDA8A179359A6322FBD08AFFE797 F7EA93EEE28EE5D987D8CD7CE9DE8FEEE595EDE495F5EC9EF1E99CECE497F1E99FF1EAA0E5DF94 D9CF80DABE65AC8524E3C363FFF79ED9D37FE2DF89E6D97CF7E386E7D480FEF5B3D9D594DCD48D F4D593FCE196FFEE9CFFDF88D19444DB9447FFE494FFE691F0E28EF2E193F0E3A4EFE3AB49402B 241B00EFE8B5A6A167080300A49F62D7D291DED693EFE79EF9F0A4FBF1A9E3AE6FC78043FCDC8F C9C16DD8D685EAE09ADED793EFE7A1F7E59EF1E496F9EFA1F0E19BFCDD9DCB9A6283511BF7DDA2 F8F1B5F2EFB6FFF8C7FFF4CCE5D8B3B6B5907473443734082B2600696434B3AB7EE8E1B3FCF7CA FFFFD3FBF3C2F3E7B4FAEFBBF0E7AFF8F2B5F7F1B2F6F0B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA FDFDEFF6F6E0F6F2D4FDF2CFF3EDC3E9E8BAE7E7B8F0EFC8FBFAE0FFFFF3FEFEFBFEFEFDFEFEFD FFFEFDFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFEFEFEFDFEFEFDFEFFFDFEFDFAFFF4E9FCEAD0F1E8C1 E8E8B9E8E8B9ECEDC7F2F1D6F8F2DBFCF5E6FEFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF EDEDFEC9C9FE6D6DFC3F3FFB3D3DFC8585FED9DAFEF6F6FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7FFE8E8FEE7E7FFF4F4FFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0FEC4C4FD8585FD 4141FC3C3CFB5C5CFBC4C4FEF3F3FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8C96BE4D578EDDE81EBDC80EBDC81 ECDC84EFDF87E6D67FE2D27DEBDB86EDDD87CCBE63DBD275BCB56F332C02ACA764C2BD63B2AB47 E3D782D8CE7ADFD88E312C09746D36CAC46DD5CF77D8D27AD8D27ADCD57DD9D27ADCD57DE5DB84 E9DF88E9DF88E7DB85ECDD8BF1E28FF6E795E5D983EBDF88F1E68DF0E78BF3EB90F4ED92F8F294 F4EE90E7E085E6E089E8E28BDFDB7FEDE888E0DB7AE7E281EDE989B0AB51938D38FAF4A6E0D88D F4ED9BE5DE83ECE58FF3ED9B867E3372691ED3C981EDE49AE3DB8BDDD581E6DF85DAD378DDD67C E5DE84DCD57BE1DA82DFD880D8D07BD3CB78E8E08DEAE28FEDE594F6EE9EEAE290E9E289E9E288 ECE58BE1DA81E2DC83DDD67EE4DD85E3DC86E4DC87E3DC86E0D984DFD67FE1D67CEDE288E3D87E E8DD83E7DC83ECE188EEE38AEADF86E9DE86ECE088F0E48DF2E993E5DF8BD8D27CD8D27CDCD680 E6E08AD8D27DE1DA8AE9E294E2DA91E4DB94F2EAA3E3D983E0D87CE4DD84E3DD88DCD787DCD891 DFDCA0FFFFD373724D000000020200A4A492EEEDCCBFBD99E8E6BDFEFACBEEE8B2F2ECAEEAE29E F2E59EE0D48BEADC91E9D98CF3E195F4DF95F6E193D6C371E2CF7AFBEF97FCED95E9DA85DCCC7D E3D48AF4E5A260522A37370C919267090000B4A278FFF2A5F4E981F6EE92E5DB8EF1DF98F3D785 FFE594BD893D986115EEC779FCE692F7E189F1E288F8E88DF3DC85FFE28EECCE79C39C48E6BD69 FFF09CFDE599CEBB87BBB178E7E49B5F5B1DD8D596F7EFA8EDE590D5CC91584F32635F45363003 BBB46ED9D28AF4ED9FF4ED9CF5EA98E5D985EADE88EADB85F2E08DEEDC8AF3E291F0DF92F4E798 F1E697ECE396F3EA9FF6EEA6F1ECA7EDE8A7EFECAEF9F8BD5C5A2E393810CAC780F9F6BBF0EAB1 E9E5A4F1EF9CEAEB8DE9E991F8F5AFD8D49C5E59205E5B1ED7D48BF6ECA0F0E698E4DC8CE0D886 EFE897E8E294E8E59BC9C5808984481D1900403B1BB5AC73F0E7A9EAE1A0E7DE99DCD58AE0DA8A DCD681DFD983D1CC75E0DA83E2DD86D5CF7DDED892E2DA97ECE69FE6E198ECE89EF5F1AAC2BF7B E1DEA1DCDBA4A29F716661423632102420005550369D9967D2CD92EFEAAFFCF7B9F8F3B2E8E29E EAE49DB5AD66DDD58EEFE5A6E6DAA0EBDCA3E4D39AE9DB9EEBE4A4FAF6B5E9CD909F632FC78150 FFDAA2EFDF9AF2E692EBDF88D6CA75E4DA87EFE494EBDF92E4DB91EDE29CEDE29FE6DD9DE8DFA0 EEE5A5DFD18DEED080C39A43E2B963DFCB7C908940DAD88DDCD381F8E798F8E7A4DFD7A63B3D12 989A5AEEDA9ADEC880F5DF8DFADE89C18C3DC8873DFFDC90F2E090DDDB8CE7E099F1ECB2EBE7B1 36311C2D2A00FFFFCC888855050600555623B9B97BFAF9ADE4E290F8F4A5FFFCB7C58B51D48C51 FFEFA2A19E49939242FDF4AEDFE19BECEAA5F8E7A4EEE398EFEA9BFFFEB5EFC68AA16028CB9358 FFFFB9E3DD94DCD892E0D596EAE0A6F9F4BCFFFBC5F7F6BEEBEAB0C3C28D8F8C606660374E481B 81794EB0A87BE0DCAEFFFDCDFFFFD2F5EBB5F8F6B5F9F5B0F5F0AAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFDFDF8 FEFEEBF7F8D3EBEBB9EBE2AEFBE4BFFCEED6F9F8EBF9F9ECFBFBF1FEFEF8FFFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFEF9F3 FBF9EFF9F9EDF9F9EDEFEFCEE6E5B0EDE1AAF7E9C3FBF6E7FEFEFCFFFDFBFFFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFFD4D4FE9C9DFD4646FD3535FB4D4DFA7A7AFCAFAFFEE1E1FEFFFFFFFFFFFFFFFFFFFEFEFF FFFEFFE3E3FEBCBCFDB6B6FED5D5FFEDEDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1FE9696FB 5F5FFA5555FA3B3BFC3E3EFDAAAAFEE4E4FFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D276E8D97EE3D479DCCD72 E5D67BE5D57DE9D981E4D47CE6D680EFDF88EDDD85DBCC70DDD374D6CF883D350F918C4BD4CF73 C4BD56E9DD88E4DB85EAE398524C2C6D6831CAC66ED2CD75D9D37BD9D37BE5DE86E6DF87E4DD85 E0D57EDDD37CE5DB84F1E68FF0E18EE7D886F0E08EF1E58FFBEF98F8ED94F4EB90F6EF92F2EC8E F3ED8FF0EA8AE7E085EDE792EAE48DE4DF82E7E380DFDC76E1DE76E1DD79E6E185918B37BDB66B FAF1AEE5DE8FE3DD80F5ED94E5DD8BFDF4A77E742D665C1ACEC37CFFFAADE1D888D9D17CDCD57B E6DF84EFE88DE1DA80DFD880DED67FDED581D9D17EE7DF8DE8E08FE9E190EEE596E6DE8CEEE58B E9E084E9E085DED57AE4DB81E1D87FE6DC85E9DF89E8DE89E5DB89E8DE8CECE18EE1D67DEEE28C E9DE85EEE38AE4D981F0E58CEDE288E8DD83E6DB81EBE084F0E68CE9E08AE8E28EF0EA94ECE690 E7E18BF5EF99E8E28EE2DB8AE0D88BE4DC93E8E099EAE29CE9DC97EEE39BE8DF96E0D98FE4DD93 EBE7A0D1CE8DD9D79DA5A874050800070B00C7CAADFFFFEAF6F3D8B7B493807B527973428D864C DAD192EFE29EEDE198EADD92E8D88BF0DC91F6DF94E4CF7FDDCA77FDEE98F9EC94F3E38DF3E694 DDD287EBE09CC5B97C2116008F915EC3C59C170900BBA679F4E393F8EA81F4E98DE2D78AF9E6A0 FDE093CE9F52925D11F2C778FFF09BF3E187FEF89AE3DC7CF5E488FFE38DF4CB77CBA24BE9CC72 FFFDA0F0DF86FFEFA4D4C292968C58FCFDB6767439AAA76BF2EBA4E9E18BEADEA74F432A4F492E 120C00ABA663C9C27BF1E99EEBE495F5E998F2E692F8EB97F7E694F8E696EBD788EEDA8DF1E293 F6EA9BF4E99AF1E89CF8EFA5F8F1A8E3DE9AF6F4B9F6F4B94A4818514F25EEEEB4FCFBB4F2F3A8 E6E69CE8E8A0E3E49CDFDE99FBFAB7B4B3712A2900919050F5F3B3F2EB9EFAEF97F6EA97EDE195 E0D491EDE3A7FEF5BE918A570D0900484519ACAB79E7E6ACEFE8AAECE29DF3EAA1F3EB9BD2CA75 D7D076DED77CE8E187E3DB85E2DA89E0D78AF5ED9EE4E087DCD982DAD78AE0DB9CEDE7B4E7E2B7 AAA67D3531120E0C04292802646432B3B47CE6E7ADEEEDB0E7E6A7DDDC9AE1DE99E4E297E2DD8D E9E38DDAD577F7F190F7F08EF4E68CE5D582D9D27EDFD481ECE191E6E391D0D380FCE99ECF8F55 A75221DEA068FFECA3F6ED8EEFE582CFC564DBD173F0E58DF0E691F2EA9AEEE599F6ECA5EDE4A0 E7DE9DF8EEB0F9EBACFFE69DBB903FCEA453F0DB93BCB875DEDE9CF0E79EE7D793FFF9C1AAA57F 060F00ACB97AEBE2A2E0D48CF5EA9AF0DC89B58A3BD09650FFDF97EEE49AF4FBB0F1F3B3EFEDC1 ACA78A17110555522DF7F7D839382A32330B81825776744EC7C88A6B6A2C4E4C0EBBB271A96F38 DD945DFFECA1E2E190F7FAADF0ECA7E3EDA9E4E9A5EEE19FE9E69BEBED9EEDE399AC6D33A65920 F9DC9AFAEC9DE2E08BE9E291F4E99AECE99AECEFA1F6F3A8ECECA7F8FABAF6F8BCF0F1B8F6F4BF E0DDAE8F8B5E574F23322B015D5426B3AB7BFBF1BDF9F4B7FFFFC3F4EFAFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8EB EEEECCEBEBB9ECECB7ECECBFF2ECCBFDEDD8FFF6EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF7F7E7EFEDC8F3EBBBF5ECBBF0ECC3F2ECCDFDEEDCFFF8F1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAFFCCCCFE9192FD4C4DFC4F4FFB6D6EFB6869FC7474FEC5C5FEFFFFFFFFFFFFFFFFFF FBFBFFE8E8FFB2B2FE7272FE595AFE7D7DFFBEBEFFF6F6FFFDFDFFFFFFFFFFFFFFFFFFFFD7D6FE 7474FC4E4EFB8A8AFC6666FC4949FB9696FDD1D1FEF5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFC362D7CB6CEBDF80 E5D77BDACB70DBCB73E1D179E1D17AE7D781E8D884E7D780EBDF87D8D17AD4CD8A3A3212837E3E DDDA85C0BB5CDCD37DE1DA87ECE59E5E55335E5826CCC872D9D57CE7E287E1DA7EE3DA7FDED47C E9DE88EBE18DE0D682DFD581E8DE8AE4D984E3D682EEE28DEBE089F5E993FAEF97FBF199F9F197 F5ED94F3EC92F3EC92F1E991F1E995F0E992F8F396EFEA87E4DE77E6E37AF1EC87EEE789D4CD77 867E31E5DA94F1EA9BFAF699DED77DD7D07AEEE897DCD388776F2B716920C2BB71FAF4A8ECE696 E1DB8AD8D27BE4DD83E5DE84E9E287E0DA7EDFD97CE1DA7EE3DC80E5DD82E4DD83E3DA81E8DE88 F0E590E8DE86E4DB81E0D67BE8DF83E9DF86DED47DE5DA85E1D782DBD17BE2D881EBDF87E0D57D E9DB82ECE086F0E588E5DA7CF4E98BF3E98BEBE084E7DC83E8DC84EDE28BECE390E7E090EDE595 F5ED9DEEE895E6DE8FF4ED9EE6DF90DCD488E3DB92ECE39CE5DB97EBDD9BEDDF9CE7DC94E5DB8F E3DB8ED8D183E3DF93E0DF98EBECAB4144160407002F310F66674F2E2E14090700070500181606 423B20DAD08CF8ECA2EADA8DE9D787FFF5A3EAD77EDDCA6FF0D98FFFEA9CF0DB85F6E38FF0DE8C FFF0A2ECDE95FFF7C096895B1E1500E8E9AEBCBD8E1F1400B19F79FBE8A6F8E88DF5E38DF4E193 FEEBA5CDA5587D4B00F7C571FEEC98F7E08AF8EA8FE8E286EADD82FFEE96F0DE8AC7A04CF9D984 FFF097F7E88BF8EF96FEF1A3F2E3AE877E47EAE8A29F9B65847E41EEE99CF3EB9DFFF6BC645A36 5E5634140E00A8A369C6C181E8E19AE4DD8FFAEFA0F9EC9EEEE191E9D98CFDEEA1FAEA9DE8D78A F5E597F2E595F1E694F1E695EBE398E7DF9FFFFAC0CFCB97302C00636336F0F2AFE6E8A2E5E59D EBEC9DEEEE9FEEEFA3F0EBACF2EDB68A844E45400AAAA65EEDEA9DF1EF9DF9F6A1E3DE86ECE695 F9F1AAF7F4B4B5AE792F290539330FA5A06AEEEBB4E6E4A9E1DFA0F1E7A2E6D990E6DC8CD9D17C EFE88FE3DC81E8E284D4CD72DDD881F2EA9AE1DA8DE4DF94E5E398DEDD95E9E6A5DEDCA497946A 443F1B1511005B582CA8A570E4E2A8EFEEAEFBFBBADFE29CDBDE98ECECA7DDDD95E0DE94F6F4A8 DED989E8E48DD4CF73E3DF7EEBE582FBEA93EDDA8AE8E28CEEE893EAE690E9EB95DFE48EF7ED9F F6CD8CB36832904F18EFD892FCEC8EF1E781CFC05AD6C461F4E384F8EB92E8E090C6C178D3CE8A F6F0ADEDE2A0EBDF9EF2E1A2FFF0ABB89044C19A4CFEEB9FF8ECA2D7D389F7EFA5E3DC9AFFFDCC 716D52232809C3C97EE4E193F8F0A6F2E49DF8E098B7893ED7A95BFBE69DEDE4A6F3F3BFB5B087 3F3921070300000000606242E1E2C814130E9D9D73DFDEB5C7C39FD6D6A09D9F66838148AA9855 AD773AEFB079F8E9A5E8E59CE1E49AECEDA8F2F6B2F2EFAEF4E4A8F6EFAEFEFCB3BAA45C8F5516 DC9D5FFFF3AEFCF0A1F4EF9FF1E99AF7EFA0F7F3A3F7F7A6F4EE9FF7F5AAF2F4ACF3F3B0F6F5B8 F3F1B7FBF7C2FFFFD4FFFECDD4D09E847D4B483F0D423B07968F5DD5D09CF6F3BEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFEF8FBFBF1 F0F0D0E5E5ACE1E1A1E8E8B8F5F5E0FEFEFCFFFDFBFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCFDFDF6FFFEE9F7F6D1EBE9B6ECDFACFCDFBCFCEDD7 FAFAF0FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFFC7C7FE8F90FC6B6CFA7A7AFB9191FD5E5FFE4546FEA4A4FFFAFAFFFDFDFF FDFDFFEEEFFFB7B7FE7979FE4747FE2E2EFE4243FE8686FFCCCBFFF3F3FFFFFFFFFEFEFFFFFEFF C3C3FF5E5EFE4F4FFEBEBEFF9C9CFD6B6CFA8586FCB9BAFDEEEEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7CF67D4CC66 E0D773E5DB7ADDD274E5D77DE7D980E2D37FE3D280CCBB69C9BB69E8DF8EE5DC95D8D191433C19 787435D2D084ADAC56DFDD86D5D182F5ECAC74683C59511EDDDB8BD7D37CE3DE7FE0DB77D8CE6D E0D47AEFE18EE7DA8BD8CC80E0D687E5DD8BE9DF88E3D981E6DC85EAE089FCF49DFFF5A0EEE48F F1E792F7ED99F8EE9AF5EB97F5EB96FCF29DF9EF97FBF396F4EC8BE7DF7CE3DC77EDE682EAE182 F0E78DC6BC698F8334D4CE7BEDE78CEFE990EBE58EE0DC87EFEA98E8E496ABA85B69641A9A974F E7E49EE2DF97D7D181E5DD86DAD379EDE689E3DE7CE0DB75DBD36DE0D970DAD36AE1D873DFD670 E7DC7EF2E599EBDD90DFD37FE9DE83E6DB7FEBE086E2D67FE9DC8AE7DA86D9CE74E4DA7AE8DE7F F2E48BE5D67AECDF80F4E786F2E681E9DF78EAE07DEBE182EEE38CEADE8BEBDE90F1E79BE6DC93 E1D78EEBE198EDE39AEDE39BEBE299EDE49BF5EBA3ECE29AF0E59EEEE39AECDE93EEE091F0E491 EDE38DE3DB83DAD37DDDD884DAD689E4E29BD8D6976D6B3F50512D474B286D714D888B5AA8A86C CBC888F0EAA6F1E69CE1D382EBD982F9E58AEDD678DECB61EEDE75FFE8A6F4DD98F0D885F9E093 FEEDA0F3DF92E4D287B6A3762112015A5122F2F2B0BDBE881C1600D8CBADFCEEC1E6D28EF2D787 F9E596C0994E9D6D20E9C066F8D170E9D078E8D581F4E08BFBE894FDE893E7D17ED7B966EACE7A FCE793F1DE8BF9E894F1E48FF1E794F9EFAE7D7435D4CC88E2D8A36E6723F6F19BF3EEA7FFFBBB A29B6269623D1D18087A7748D6D099DED894F2EA9FF7ED9FE7D98EECDE95E6D890E4D78FEEE398 E8DC8EDFD281F3ED98E3D881F5EB97EBE29AFFFAC1DFD5A839310A878453F8F9B5D8DD85DFE48B DBDA92D7D48CE9E69CFFFFBBE1DA9A534C1F7D743FD9D096F1E8A4E6E188E9E67EEBEC8EE5E89C EBEDA6C0C27A4444262D2C008C8B52E2DDA0FFFFC3ECE9A5E3DF9AD6CF88E2D78CF1E396EADE8F F2E895E8DF8ADED880E6E18AE7E28BE7E38EECE596F1EC9EEEEBA7EFEEC4A3A37B606135242300 3636078D8C54CCCA81FBF6ADF8F2A9E9E29AECE39DE1DC93D4D58AC6C67DCCCC84C5C57DE1DE99 E2DF98E8E59CF1EEA3EBE899D4D07DDBD583F8EAA7F0DDA1EFE3A3FDF9B4EEF1A6E3E79ADFDF93 F3E79FFFEEABF4C489864C15A1682CFFF09FF7E98BD7C05EDBC05CF6DE7EF6E48FE4DE95D6D596 C2C388F7F3B5DBD18EC8B975CDBC79FEEAA8BE9E59B9954AFBE391FAE38BE8DD83F3F09EE2E2A2 F2F2C8312F18686035DCD378E8E785EBE493EED69CF9D7A4B5833AE7C269F9E99BFFFFD4978874 1400004C423445452E000000585F359FA57B0B0D00D6D29CEFE9B2DDD79FF9F7BBEBEEAFFFFFBE F5D68BAC7A34FFD496FCE6AAF2E5A6F1F1ACF0F2ABF6EEA9F6E6A6FCEDB4FCECB8D5BB82865D18 C19753FFEBA6F9E49FF9EBA4F3EBA5E8E09BE6E19CF0E9A3F9F1A9FAF0A9F7F1A7F1EDA3F3EFA7 FAF5B3F7F2B3F7F1B4F6F0B6FBF5BDFBF7C1FFFFC7ECE9AFB6AF7879724849441A4A4526FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFEFEF0FAFADE EDEDC3ECECBDF1F1C1F2F2CDF5F5DFFBFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCFCEDF6F5DDF7E9CAFCDEBA F3E3B9ECECC5F9F9EDFEFEFCFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFFFFFEF8F8FFB5B5FD7777FB8080FBA0A0FCB3B3FD6D6DFE393AFE8183FDD3D4FC F4F5FEF4F4FFD7D7FF7B7BFE5656FD6364FC7071FC6B6CFC6465FE7878FFDCDCFFFCFCFFFBFBFF E0E1FD9D9EFC4E4FFD5858FED4D4FEBCBCFD8788FB7172FBA0A0FCE6E6FEFFFFFFFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFF FDFDFFFDFDFFFDFDFFFDFDFFFDFDFFFDFDFFFDFDFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6CE69 D6CE6BDED472E0D676DCD273E4D77CEDDF87E7D982ECDC87BEAE599E8F3CE5DC89E8E097E8E1A1 5A54206D6928D2D085979742E0DE87D9D584EDE5A18D80504C4310D0CD7ED4CF79E1DC7DE2DC78 D8CE6CE7DA80EDDE8CE1D486DBCE82E5DB8CE6DD8CE9DF8AE5DB83E5DB84EAE089F3E992D6CC75 E4DA83FBF29BFCF29BF2E891F0E68FEEE48DF6EC97F4EA92F5EC8FF2E988F2EA88F7EF8BEDE582 EAE182EDE48AFEF3A0CCC171736B18DAD47CE8E28CE8E28DDED884EAE593E1DB8EF8F2A6ACA85F 66641A9F9C55D8D58DD9D285FFFAA9E0D886E8E08BF5ED97E8E187EFE68BE9E083EBE285EDE485 DDD475F4EB8FEBDE91EFE295EADE88EFE489EDE285F5EA90E6DA85E3D784E0D482DBCF77E4DA7C E4D97BECE186E2D47BE4D97CEEE485DFD574E0D877E5DC7CEBE287F3E992EFE492ECE191ECE396 E4DB90E1D88DE8DF94E9E095E4DB90E9E095EAE196F5ECA1F3EA9FF5ECA1E7DC92EEE097F1E295 F0E394EEE391EAE08EE5DE8DE5DE8EEAE69CECE8A8F2EDB5EEEBB8EEECBCFAFBD4FCFDD4EFEEC1 FDFCCAFDF8BFF1E9A8E2D68FE5D685FBE891E0CC6FDBC464F1DF73FCED84F6DF9EDFC884F4DD8D FFEBA0E6CF84DECA81E2D38A3B2B182C1D05C7C180FAFBB6DBDCA22E2700E8D8B8FCE8B9FBE49F FFE793B793418E651AE9BE72FFE48CF1CD6DE6CF76EBD881FDE792FEEA96FFED99C3A955D8BD6C FDED9AF5E08FDFCE7DEFE08FE7DB8AEFE697F3EAA57F7536B4AA6EFAFABD676019D3CD7FEDEA9E F6F3B0C3BC855953282F2A1758552AD9D3A0C4BD7CF5EDA1FAF1A1F1E498FBEDA5F8EAA3E1D58B E2D78AFBF1A1FEF9A2E8DD88FEF5A7E2D891FEF7B9B9AF78221900A19B64F8F4B8E4E19CE6E798 D3D484DBDC92DDDC9AFFFFC3ACA76C2F2B019C9853E5E295C6C372EBE795F5F0A0DBD58BF9F7B6 E8E8AA808041272700626122CCCB89EAE7A3EDE9A2E9E59CEAE499F0EA9CE8E294D5CA7EEBE091 DACF80F1E696DFD786E5DE8EECE597E6E097E9E19BFFFAB8E7E1A29A955C262502090A00515323 C9C991F4F5B5EEEEA6E7E599DFDA8DD3CD81DFD78EDED68ECDC77FDAD98CD2D085C8C67BC6C57A E0DC95E4E09AEDE9A1E7E197DCD689E8E191F2EB9CE6D995CEBE82D9D08EFAF6B0F3F3A9EBEC9F F5F3A6F3E79DFDF0A9FFF5B6E0AD72854E12D19E57FFE491CAB051CBC057F7F38FDEDD82F3ECA3 FFF6BAFEF1BAF1E6A9F0EBA4FEF7ABFAECA4FFEDA7D1AF6AAB823BFDF9ABFDE28DFAEC97E6E092 FDFABDCCCA9F070300888151F5EF9FEAF096F4F3ADDDC999F1C89FB48847D8B967FFFCB2B6B488 170F009D8B7EF4EACDE3E0B7B0B185EFF1C04C4E27625F31EFE7A9E9DF9FDED593ECE6A2E8E5A1 FAEBA5DDAA61AC7C35FFE29FFFF7B8FFF0B3FEF1B3F0F0A6E8F2A5E7EB9FFFFBC0FFCA9F8F5223 AB813FFFE29EFFF8B4FDECA7EDE19DE2DA97DDD894DAD591DFD793F6EEA6FCF2ABF7F1A7F1EDA4 EFEBA2F2EDAAF3EEAEF7F1B4EEE8ADF8F1B8FAF4BAF9F3B9FDF7BBF4EDB2FEFECCDAD3A4AAA474 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF9FEF7EBFAF6D7 F2F2C2E6E6AFEFEFC1FCFCE1FFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6EE FDE7CBF0E3B7E6E6B2EEF0CCF7F7E2FEFEF3FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBF2F2F2F4F4F2F4F4FD9F9FFC5A5AFA9292FDBFBFFBCCCCF88282FA3E3FF96366EF A4A7EAE4E5F3E3E3FABDBDFE5757FD4F4FFA8F8FF6BBBBF3A2A2F55657FA3637FEBBBCFFEFEFFF F4F5FDBDC0F0797CEC5254F66F6FF9D5D5EFC6C6F59697FC5959FB8686FCDEDEFDFFFFFBF8F8F8 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFF E9E9FFE4E4FFE3E3FFE3E3FFE3E3FFE3E3FFE3E3FFE4E4FFEEEEFFF7F7FFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F6F6F6F6F6F6FAFAFAFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D1C966D7CE6DDDD272DCD273DCD274E3D67ACEC166AFA149D1C16AE5D57EDACD74D9D17BE2DA8E E5DD9B665F22534F10CECC80898931E4E388E3DE8AEBE39BABA067423900CBC87CDCD783E0DA7C E0DA77E1D776E3D67CEADC89EADD8FE5D98CE5DB8CE2DA88ECE28DECE28BE9DF88E7DD86EEE48D CFC56DE9DF87FEF79DFBF397F5EC91FAF194F3E98FEDE38CEEE48CEDE487EDE484F1E986F5ED89 E9E17FEEE586F3EA90F3E895F9F0A0BDB5637B741FDDD782E8E18ED9D281E0DA8AE9E394E7E194 E6E396E1DF93918F45635F169F994CC1B86BE7DE92E9DF95F1E89EF1E89EE2D78CDDD285E3D988 F8EE9BE9E08AE0D781E4D88AEADF8EE4D882E5DB80E5DB7EF2E78EEBE08CEBDF8FE8DD8BDDD27A E2D97BE0D779DDD47BEFE78EE5DC84DDD47CE7DF87EEE68EECE58DEAE18BE9E18BE8E08AE7DD8A E9E190E9E092E8DF91EBE294EAE193E3DA8CEAE194EBE294EEE597E4DB8DEDE496F0E598F3E59B F4E49CF1E497EDE294EBE193ECE397E2DB91E8E09DA49D62877F56D1CE9FE4E2B8D5D2B1C3BF9D C7C19CBDB68AC2BA85F3E8AAF5E8A2FAE99CE8D680D6C165EBD575F9E880F2E27DEFD897F1D997 FFED9FF1DB90DAC67DFFF1AAC0B67826180041360FE1DE9BE4E49DD7D398584E24F4DFB9FCE6B1 FFEEA2B99A408D6A13EBC77AFEDA90F1CF7BF9DB7FF1D980FCE58EFEE992FAEB96D7BC68EDD481 FFE897F5E090F7E697E9DA89DFD384E9DF90F9F0A5EDE59BACA264A49865F1EAA3827B39A59D5C FBF9A6EBE6A1E5DEA95853223A3512242003D3CE9C9D9858F4ECA0F3EA9AF8EC9CF1E498F2E59B F7EC9FF3E999F0E894FAF499EFE895EFE5A1F5ECB6B6AB7B271E00AEA663FFFCB5E2DF94ECE7A0 F5F1AEE7E6A5E5E5A0D1D0917F7D4B535018CBC885FEFEAEE6E789ECEC8DEEEC99E5E19FFEF5C5 BCB98F3C3A0B2724099C9A5AF4EFAEF5F4B0E2DE93E3E08FF4F09CF9F49FEBE692F0EA96D8D083 C9C076CBC276E1D88DE9E198D9D38BEAE4A0EFE8A7BAB47767613B342D042E281B868555E0E1AE FFFFD1EEEEB0E2E19EE4E499E1DF92E9E497E8E297E8E097D2CA82BBB66BD7D486DAD88AC7C57A CDC97FDAD68CDFD990E5DE94DFD88CDAD283DFD887E7DF8EE2D990CBC280D3CB86EBE69DE9E69A F3F0A1EAE394ECDF93E8D38AF7DA95FFF3B3D0A262904D0FD69951E4C46CD5CD69F0F491E2E98D EFEAA0F9E8ABF6E3A8C5B778DAD78DEDEA9AF1DF91F0D489F4DA959A712FF6DA96E0C47AEAD98E ECE39EEDEAB089855A0A0403ACA77CD8D999D9E499D0D69BDED1AAF2D4B3BA945CFBE497ACA969 202408090C06978E7AF4EBC5D8D19EECE6B0DEDA9F272300C3BB7AF3E8A1F0E39AE9DB92CABD73 CAC074EAD4889D651BB7833EE0BD78DBC383EAD899E0D793DDDD91E1E695FFFFB7E8C88AA0592D 9C592AECCB8AFFEEADF2DA97EADA98CAC07FBDB876D3CF8BE9E5A0E3DC96EEE69EF8EEA6F4EDA5 F2EEA8F1ECA7F1ECACF3EDAFF5EFB3F4EEB4F8F2B7F0EAAEE9E3A6F0EAABF8F2B4F6F1B6F9F4BB F6F2B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFFF3E7FCE3C3 EEE1ADE5E5ACF4F4DDFBFBF2FFFFF9FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFBFFFAF5FCF9F0F4F4DCDBDF95E4E7A4F8F9D4FFFFF3FFFFFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF1F1F1D5D5D5D7D7D4EDEDF88B8BFE3E3EFDA1A1FFD3D3F4D3D3E79898EE585AEE 5056CE737ABDCACBDBC5C5EEA1A2FC6969FC7777F3B4B4E6DBDBDFC0C0E36868F13232FE8B8CFD CCCDFFE9E9F99AA0D2636BC7797CE59F9FECBBBBCBB0B0E18F90FC3C3CFD6D6DFED6D6FDF7F7F0 E7E7E7F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFF EBEBFFB5B5FFA4A4FFA3A3FFA3A3FFA3A3FFA3A3FFA2A2FFA7A7FFC4C4FFE3E3FFF7F7FFFDFEFE FEFFFEFEFFFEFEFFFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFBFBFBECECECE0E0E0E0E0E0EEEEEEFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFCCC465D7CE70E0D578DCD175DCD175E5D87CD4C76BAB9D41C5B55BEADB7FF0E386D9D176 DDD585DBD48F787133393402BDBB6D87872ED9D87BDEDA81E5DE90BAB06F302800B9B56CD8D480 D6D075DAD373E3D97AE4D77DEADB89E8DB8DDFD485E0D685E7DF8CECE28DECE28DECE28BE8DE87 F7ED94F4EB91EBE287F5EB8EEEE685F1E888F9F190F5EC8DF3E990F2E98FEEE588EDE584EDE583 E8E07DF6EE8CEBE284EAE187F4EA95DDD180FDF8A8CEC876867E2CD8D180FBF4A3EFE898EAE495 DDD789D8D385EFED9EE5E294A7A3576E6618362D00776D29988D4CBBB071D1C688E5D99DFDF2B3 F4E9A6E8DF96E3DA8DE9E090E2D889E8DD8ADED47BDED57ADED57AEDE38BEADF8FF1E598EFE494 DDD37EE0D67BDCD57AD7D27AE6E08BD9D380E6DF90ABA4529D9646DED786E1DA88E6DF8AEAE48C E2DD83E5DD89EAE291E8E090E8E08FE9E190E2DA8AE5DD8CEDE594F5ED9DE5DC8CEAE291F3EB9A F1E497F2E49AF0E197E8DC91E7DD91EBE297DCD38FFCF5B6B7AF782B2201150D0121190F150D08 160D01231B00271B0031240075672DF5E59FE2D183D4C16BF7E78DFEEF91E5D270EEDA7DFCE5A4 F8E3A2EFDC92E8D68AEFDF97F8ECA97E73470500006C673BEAEBA7FAF9AED6CE8E544516E3CC9F FEE5A9C1A04D866505EECC72EED082F4D98FFEE99AF6E38BEFD97EFBE389F7DF85D2B762E2C875 FDE595F0DC8BEFDD8EF2E294F3E999E7DF8FEEE59BF1E7A2EBE398CCC283756837EDE79CA8A15C 6A6026F5F29FDFDB93F1EAB46B67303C380C0A0500BCB886827E3ECDC77CFBF4A2F6EB9BEBE091 E6DB8DECE191EBE290E3DC86F2ED97F4EDA0FFFDC4BEB687322703C3BA81F5EFA5F2EE99EFEB97 E4DD95EBE2A9F3ECB9D6D69A53531E5F5F27E2E2A0E0E296D8DB84E9ED8EEEED96FCF9AFE6E1A9 6A613C241C06726C42E2DBA3EEE9AADAD68FDED98AECE892DED980D3CE74DCD67DDDD780F0EA95 E2DA90DBD48FDBD58FAEA762EFE9A5E9E4A2A7A15F453F19191300605A37B6AF88E4E0B1CCCB96 CECF94E9EAABD6D793C9CB81F2F0A4E4E293EBE597DFD98CDCD48BE7DF97E9E297E1DE8EEFEC9E E2DD90E7E297E4DC93DFD78DDBD487E3DB8EE4DB8BD2CB78D3CB77DDD88BDAD58DE0DA92E6E095 E2DB8DEAE393F4E99AEBDE8FEEDD91DDCA80F2DF97FDE7A2D79357834000B68B3DE8D47CF8F196 CECD76E4DE92EADF9AF7EAA7E0D590F0E99FECE494EDDC89F3D98DF4D7959D773DF6E0A7F0D79C E1CF93F0E7ABF5F3C14B4525130C09D8D3AFF4F8C8EDFABF424D2D3F3819F8DCC1A1814B604E1F 090C000B1600000200110F00C4BD8CF4EAADD7CE8EE3DB97D8CE84F4E99CF0E595F4E695F6E696 EAD789F2E192FFE396BA7F36D39855EFC684E1CD8BD9D692E5EB9EECEA9FFDF3A9F9CF8C9D6227 83430DF7C58EFFEAABECD89AE6D596F4E8AAD8D392CDC989E3E09DFFFAB7EBE59FE8E098FCF3AA F6EFA9F5F0AEF5F1AFF2EDAEF4EEB0F5EFB3EEE8ACF4EEB1F9F3B4F9F4B5F2EDACE8E2A1EDE9A7 F7F3B4F7F3B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFF1E4FFE6CC FDDEBAF4E5BFEFEFCFFBFBF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFBFBF1E9ECC0E8E9B2EEEEBAF8F7D6FEFEEFFFFFFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF7F7F7E5E5E5E6E6E3EFEFFB8686FE3939FEB2B2FFE8E8F8E8E8F0C5C5F4 8A8BF45559E0565BD5C1C2E7A1A1F46B6BFC6B6BFC9898F7D2D2EFF3F3EBDEDDEE9595F65656FD 5A5AFD9B9BFED0D0FC7F83E35257DC8F90EEC9C9F3D4D4DFC9C9EBA5A5FD3C3CFE6767FED3D3FD F5F5EDE3E3E3F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FF D6D6FFBBBBFFC4C4FFC5C5FFC5C5FFC5C5FFC5C5FFC5C5FFC5C5FFC4C4FFBFBFFFBEC0FDD4E1F3 DCEDE9DCEFDFDCEDDBDFF1DFE9F9E9F3FFF3FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFF F0F0FFDEDEFFD1D1FFE4E4FFF3F3FFFCFCFFFFFFFFFDFDFDF3F3F3E4E4E4CFCFCFE2E2E2FBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFCFC66BDBD277E5DA80DCD175D9CE72D6C96AE7DA7CD8CB6BE0D173E2D374DFD272 D6CE70D5CE7CDFD790A49D5D312C01B2AF61A09E46D4D171DAD678E8E08BCCC0762B2300A7A35D D2CC7CD9D37AE3DD7DE4D97BE8DA81E7D886E4D887E1D686E3D887E7DF8AEBE18CE9DF8AFBF19A F6EC95F0E68DECE288F3EA8CF0E887ECE481EDE581F3EB86F8F08DF2E88FEDE489EAE184F4EC8B F7EF8DEFE785EEE585E3DA7DE2D97FEEE48EF3E896E3DA89EDE595DFD687C0B768BAB162FAF3A3 E9E292EAE594F9F4A3D2CE7DD7D483FBF7A7F4ED9DB9B0628A8139685D1D4D4106302300594D19 8F844EC9BF83EAE19DE0D88FDED78AE7DF8FEBE390E4DD84E7E085E5DE85EFE792E4DB8DE6DD92 E6DD90DDD582E1D980DAD57BD9D682D6D483E5E194C7C376261F007A7339DDD78CDFD98AE4DF8B ECE88DE5E084E4DD86EBE390E9E18EE5DD8AE8E08DE4DC89E4DC89ECE491F5ED9AE8E08DEDE592 F0E995EEE191F2E595F1E495EAE08FEAE090EEE497FBF9B3E0D696FCF3B7E9DFABB5AA7AA59C6D A2996BA89E6EB7AA79DED098E4D497DCCA87E1CF87E7D487E8D683F3E18CF5E38DEAD87DFAE68E FDE9A6E6D091ECDA92F4E499EFE49BFAF0B2584F28100B00D1CE9FEEEFA8E1DF92F5EBA67D6A37 F4D8A9D6B7757D5C07E4C562FDED91E9CD7FFFE9A4F4E69BF7E995FFEA8EF9E083E3CA70DDC46D FEF39FF6E190F0DE90FAED9FE8DD91EFE89AEAE395EDE49CE5DA999C944CD7CD8E665B26BBB46B D2CB87413801D3D082E9E5A0F8F2B78E8A4E5652281712008E895CAEA96CB3AD62F1EA98F8ED9B FBF0A0F1E597EBE392F4EC99EFE896E8E297F7F3B0C6C085342D00B5AD75F6EEAEF4EEA2E8E28F E0D988F1E8A3F4E8B1E5DEAF4E4E20797D43FFFFB9DCE28DE6EC94DEE28FF3F4ACFDFDBFBEBC85 322F0B35320AC9C28DFDF6C0E8DFA2D5CE88E2DC8EF0EA95EDE88DE4DF83E9E38AE6E08CDAD282 E5DD92EFE7A6C1BB7EE0DC9DE6E1A1BFBC7C504C0D110E02666221BAB57CDAD59EE2DCA9E6E3AC DEDF9FC5C682E5E59FEAEBA0E2E093FEFDACF0ED9DEDE799E6E092E5DF95E7DF97E5DD93E0DB89 ECE796E5DD8FE7DF93D3CA7FE3DA8FEFE79AE8DC8FD9CE7EDCD17FEAE08BD4D17FCECF81D1CF81 D8D181EAE190F3E796F4E896E7DB8AE3D888D4C97ADAD284F9EEA3FFE6A1DDA8658C5915BE8D46 FFE59BF0D98EF2E69BE8E499DBDD90E2DD92F0E69AECDF8FEBDF8BF6E399F5DB9DB69665F6D9AB F9ECBEECDDAEE2DCADD4D3A41C190F0E0905A29D7FDFE3BC596736121C000C0604160000220300 1C0A049CA059ACB98A37411F66673FC5C188F2EAA6F2E9A3F0E69EDDD184F8ED9DE4D987F3EA94 F4E693FFEE9CFFF0A0FAD789B0712AE3AD69FFE6A2F4EEA7CFD98DEAEDA0FFF1ABFFC081C67239 A0591EDBB573FFFBB9ECDA9CD3C588DED496EBE5A7D8D495D0CF8FD7D693EBE8A4EAE49EE9E199 F8EFA6F6EEA9F7F2B2F5EFB0EEE8AAF3EDB2F6F0B6F9F3B8F5EFB3F4EFAFF9F4B1FCF7B2FEF9B5 FFFBBAF3EEACF4EFADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFCFFF3E7FFE4C8 FFDCB8FFE1C2FEF0DFFDFDFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEFAF2F2D5E6E6B0EEEEBAFBFBDAFEFEF0FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7F8F8F6EEEEFE8585FE3B3BFEBFBFFFF8F8FEFDFDFD F0F0FEBDBDFD6464FA4445F9ACACFC7A7AFD3D3DFD7374FDB9B9FDEAEAFDFFFFFDF5F5FDC7C7FD 898AFD3B3BFD6A6AFEA9A9FF6A6BFB5354FAA5A5FDECECFEF6F6FBEAEAFDC1C1FF4444FE6767FE D0D0FDF2F2EDE2E2E2F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFF E8E8FFB3B3FF9A9AFFE2E2FFF7F7FFF9F9FFF8F8FFF8F8FFF8F8FFF7F8FDECF0F8C0C7F59BA6F0 ABC4E4B7D6D4BFDFC5BFE1BEC2E5C2D0F2D0E1FCE1F0FBF0F5FBF5F8FCF8FDFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFF ECECFFCBCBFFACACFF9A9AFFB7B7FFDADAFFF5F5FFFDFDFBF9F9F9FAFAFAEFEFEFC6C6C6DADADA FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD5CB73DCD279E2D77EDBD075DCD175DCCF71E0D374CCBF5FD2C463DCCE6D DED26FDFD673D0C873DED48EBBB2722823009B974AAFAE55D2CF6FE2DD7CE8E287DBD180413906 A49F5CDAD488E0D982E7E084DACF73E1D47BE0D27FE4D787E9DD8DE1D782D4CD75F5EB96EEE490 F5EB95F3E992F5EB91FBF295FBF294F8F08EF6EE8BF4EC87F3EC84F5ED8AFAF195F5EC90EBE285 F2E98AF0E887EAE181EEE588EBE287EBE288F3E992E4DA85E4DA89E2D889F2E999ECE293C1B868 989140E1DB8AEDE696EAE493D1CC7AE0DC8BEBE795E9E18CF9F09DE6DB8FDBD18CBCB07490864C 9B905A4E44124B42098A8241C9C47CE9E398F0E89BDFD786E5DF88EDE690DFD883F1E99BECE39A E3DA94EFE59DE8E190E9E389E2DE87ECEC9DD8D78BEBE8A09B984D0C0802C9C47AECE79EE4DE91 E1DC88E8E489E6E184E7E088EAE28EE6DE8AE4DC88E6DE8BE3DB88EAE28EE9E18DE9E18DE5DD89 ECE490EFE892E9DD87EADF88E9DD87E4DA85E8DE8BEAE090DBD285E9E099E1D795EDE3A6FFFAC2 F4E9AFE6DB9AF9EEAAFFF0ABFBEAA1FBE79DF1E194E9D587F0DC8DF8E596ECDA8AE4D385F4E390 F5E491ECD893E5D292F8E8A3F1E598ECE39BD0C98E191100484223F1F0BDEDEEA4E3DD8EDBCB85 745E29B79966866523E5CA70F7E480F7DB7EF7DF92FBE9A4F1E89EF3E996FDEC8FE0C86BD0B85E FEEB95FFEE9DF3E193FAEC9FF2E79BEBE296F4EDA1F3ED9FF4EDA4F9F0B0615717E6DE9D9C9453 6F6726FDF7B57D7535BCB875FBF7B5F4EFAEAFAC6C65603A252208615E38E9E5AAC4BC74DDD685 E5DC8AEBE191F0E697E7DE90F8F09FEEE899F9F1B3A09A663C3709BEB976F1ECA6E7E096E7E097 E5DD93F0E6A2FCF4B4B1A66A373100868752E3E8A5D1D889E2E792E8ED9DF0F3AFDDDCA6706B4C 1D18006C6A37E8E7A3F4F1AAF4ECA8F2EBA1EDE797EBE58FE7E287E1DC81DDD77FE9E291F0E99E EDE5A0E6DD9EF3EEB7DCD6A1AEA96F54502B3632006D6A32D1CE85ECE9A3EBE9A0C9C67FD6D38D DDDA94DFDE94E0DF94D9D98CDEDE8ED6D483C7C573EBE897E5DF91E4DE90F3EDA1F1EAA1E4DE92 E8E391F2EA9AE9E292E9E294D9D085DBD286ECE396F7EB9CE6DB8BE1D782EEE28ED8D582DADD8C D6D584D2CC7BF2E996FAEE9BD2C572E1D583E4DC8BE4DF8EECEC9CE6E596F2E194FBE7A1A77535 8C4E12B9793DFCDF9EFCE39DF0E396E3E191F7F6A5F0E89AEAE191E5DF8CF2E49EF8E9B27C613C 412A154C39249089628484592F331F101302110E0006010025230C24300CA9AE80ADA37F63422A 523013CCB76BFFFFC0E9F2C0E4EDBFE2E2ACEAEBAAD6D48EEAE39CEEE59BCAC073D7D07FCDC976 F2EE9AF0EA96EFE092FBE79CF2CB83B6712CF3CF88FFF3A7E7EBA0E5E49AFFE9A6F4BC80B95F26 A34E12D39D5BFFF9AEF4EDA5F7EDAEFBF2B5F2EBADDEDA9BDAD99CDAD999CDCC8ADBD895E7E49D E8E298EAE299F6EFABF4EFAFF1EBADEEE8ACF5EFB3FBF5BBF6F0B4F4EEB0F2EDACF2EDABF3EEA9 F4EFAAF2EDACEEE8A9FCFABBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF1E2FFE4C8 FFDDBAFFE2C5FFF2E4FFFAF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF3F3F3DBEAEABAEBEBB5F8F8D4 FFFFF2FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4DDDDDED8D8DDDBDBFA7B7BFE3939FEC0C0FFFBFBFF FFFFFFFFFFFFDAD9FE7E7EFD3C3CFD4D4DFE4646FD4E4EFBA6A6FDE3E3FFFAFAFFFFFFFFFDFDFF ECECFFC2C2FE5D5DFB4545FC4F4FFE5C5CFE8687FECCCDFFFDFCFFFEFEFFF9F9FFD6D6FF4C4CFE 6060FEC0C0FDE7E7EDE1E1E2F2F2F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFF E0E0FFBFBFFFC4C4FFD6D6FFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FAF3D1E8D2ABD2BF 8CBAB9829ACFA6B4DDD5E3E2DCF6DACBF0CBC3EAC3BBE5BBB5E6B5BFE6BFD1EAD1F2F8F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFF EEEEFFBBBBFF5A5AFF4F4FFF5959FF5A5AFF9696FFE3E3FEEFEFE7D7D7D7EBEBEBF6F6F6D6D6D6 E4E4E4FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDED47DDDD37ADFD47BE1D67BE8DD81EEE182F0E383E1D473DFD170 E3D572DBD06BDAD26DCFC56EE2D991B6AC6E2720009A964BA5A24CB1AD4EE5E07EDBD577E9DF8A 554D1B8D8749E4DD94DDD683DED77DE2D77CE5D87FE2D380E6DA88EAE08CE2D981DCD57BECE28C EEE48FE7DD87E7DD86F2E88FF8EF94F6ED8FF1E988ECE481F1E985F5ED88EFE784EEE587F6ED90 EFE689F6ED8EF5EC8DF7EE8FEFE688F0E78CEBE188EFE58DEDE38EDED380ECE18FF9EE9EEAE190 F5ED9CD8D07F746D20A8A150EEE796E5DF8EECE795E3DE8BD6D077E6DC83FFF5A3E7DE91EDE39E FCF3B2E4DC9EF0E8AACEC889A7A15F4945007B772DCAC37AF0E89EF1EB9CE6E08EE9E294E7E098 F3EAA7FFFBB9AFA85FD7D081DBD57DE2DF8A86853CB5B470EBE9A686833C302D03E1DE95EAE79B DDD887E0DB86E9E489E6E185E7E087E8E08BE5DD88E6DE89E6DE89E5DD87E8E08BE9E18CE9E18C E9E18BECE48FF2EB94EFE58BF0E58AEFE68BE4DB80F0E68DF2E891EAE290EBE394E6DD91E4DA94 EDE39FDCD088D5C874F8EC93E7D67EFBEA90DFC86FDBC36DF4DE89F1DC8CEEDB8DEFDD94EBDC95 F9E99DEFDE8FE3D188EADA97ECDF9BE8DF8FFAF3A8B8B17B0C03005F5738FFFFC8D9D98CDED283 F9F5AE856C36795D2BE3CA88FFEC93F7DE7BEFD87BE9D587F7E7A1F5EA9FF5EB94EDD679D4BC5F F3DD82FEEF9AF3E292FCEC9FF3E99CF8F0A4F3ECA1E9E397F5F0A2F4EBA1F4EBA8897F42BFB975 F4EEA35C541BDFD89AC2BB7467612BF3EDB1E7E39BD3D08E46411C2C2711302B19DFDAA2ABA65E B4AD5DD8D07FFAF4A5DAD184EBE296EFE79BFDF6AEB7AD78292208C4BF7AF5F2A2E3DF89DBD685 E5DE99EDEAB1FFFCC4AAA063665E18BDB973CFD38AD9E094CCD186D6DA93F7F8BBB6B481494619 322E07B7B586FDFDBCDDDE90E1DE8BE7E08DF2EC95F9F39AE2DD82DBD57DE1DA86EEE899EBE39C E9E1A3EDE5ADF9EFBDCFCA97817B4B37320067632EC7C381FFFEB7E8E798ECEC99ECEC96CBCB72 DDDB81CDCD74E3E290E7E596C6C475C4C170C6C371D8D683EFEC9BE7E293D0CA7CDAD488EAE49A E5DF92E9E492EDE897DED789CEC67ADDD388D6CD82CDC478E3D78AD8CD7DBBB05EC9BF6AD7D481 E6E896EDEC9AE9E491FBF29FF2E893F6EA96E9DF8DDED887E8E797F1F3A3E6EA9BE9E795DDCB80 ECC787D49C627D3C06AB6C33F7C987FFE89FF9E598E2DB8BDBDA8AEBEB9AE5E294EBE3A0F0E2AC 3A27140E0000150A00020000000000545B35D8DDB7B0B08F5951376F6845CBCE92EAE9B1D6C69B C8A17DA87F47F1D58CEEE69CD7D99DE5E6ADCBC783B3B871CACE88DDD892D4CA83BFB66DD8D485 C5C676E8EC9BE4E394D5C880F8E39FD5AB6AB0712AF4CC82E5DD8DEBE89EFBDE9DD49760A54C17 B66327F7BC79FFEBA1F1E89AF2EEA6F1E9A8F2ECADF7F2B3F5F1B2EFECADEDECACECEBA8EBE8A4 E8E49DE2DE94EAE59BEAE6A0E4DF9FF6F1B2FDF7B9F7F1B5EBE5ACF0EAAFF8F2B6F9F4B5F8F3B1 F9F4AFF3EFABF5EFB1EBE5A9FDF7BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFF3E7FFE4C9 FFDFBDFFE3C7FFEFDEFFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF7F1F1D4EAEABA F0F0C0F8F8D5FEFEF0FFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F1D4D4D6C5C5D4C2C2F87778FE4A4AFDC5C5FE FAFAFFFFFFFFFFFFFFECECFEB0B0FC7878FB6363FD6F6FFC8F8FFBD4D4FDF9F9FFFFFFFFFFFFFF FFFFFFFCFCFFE6E6FF9F9FFC7575FC6767FE8B8CFEC0C1FEE9EAFEFFFFFFFFFFFFFEFEFFDEDEFF 4E4EFE5C5CFEB8B8FDE2E2EDE0E0E2F2F2F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFFD0D0FFA9A9FFD1D1FFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFF8FFF6E2F8E1CEF0CEC4E8C4 B8E4BAA9D4BA8391D8A9ABEDE7E9F8F5FFF2E2FAE2D3EED3C5E5C5B7E6B7BAE1BAC4DFC4D5ECD5 E8F7E8FAFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2FFC8C8FF8A8AFF4242FF5656FF7171FF3C3CFF6262FCB5B5F5D7D7E1D5D5D6EBEBEBF8F8F8 E0E0E0EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D77EDCD279DED37AE6DB80E9DE82E6D97BE6D979E5D878 E3D474E4D675E6DA76D9D16BDAD078EBE19BB0A5692E2500B6AE68BFBA66A39E3FDBD673DDD575 EFE48C6F6623837D42E6DF99DED788E1DA81EFE48AEDDF87E9DB88E6DA88E0D682DAD179DBD579 E8DE87E8DE88E3D982E8DE87F2E88FF2E98FF4EB90F2E98BEFE685F5EC8BFBF291F7EE8DF6EC8E FAF194F3EA8DF8EF92F2E98CF5EC8FF3EB90F7ED94F2E88FEFE58BF0E68FEBE08CE5D984EBE08D F3E995F3E895F2EA97E5DD8BBCB463B1AA5AD2CB7BE2DB8BEDE896FFF9A0E1D77DF2E891E8E08E E9E091E4DC92F1EAA3E3DE99F3EEABB3AE6F322F0458551355500FA9A35FEBE69FE9E49AF1EBA5 DFDA99E2DB9EDFD8981E1900B1AD5EFEFBA2D9D888131300949257FBFAB9423F1B6A651EEFEA9F EAE594DAD381E1DA83EFE78FEDE58CEAE38CEFE795F1E996EDE592EAE28FEDE592ECE491ECE491 ECE491EAE28FEDE592F3EB97F4EB90E9E083EEE588DED57AEAE187E2D881E4DA83E2D783EBE08F E8DD8CEADF91E5D885EEDE80F3E17FFEEA88D7BF5CD8BD5DFFEA8DF6DD83EBD580E9D789EDDF95 F1E49EEADC93EFDD92F2E294F2E39FEBDE9BE8E18EF3ECA089824E0100006F6442FFFEC1EAE394 E9D988EFE59E553A1C5B4113FFEDB0E3CF7DF3E283F6E68CFBE99BF3E098FAE899F4E289D6C063 ECD77AFFF299F9E794EBDE8FFFF3A8F0E89CF6EEA3EEE79BE5DE8EF2EB9BF2EB9EF5EAA8C6BC7E 8B823AFFFFB1857C4480773AE5DE99544C20CFC991E1DD93F0EFAB4E4A26322E1A161102DDD9A1 C2BE79C6BF71F6EE9FDFD58AF8EFA9EBE39CFAF1ACAEA668201600BAB175FFFFB6E7E288E5E286 E7E28FE0DA98F2E8B1ACA26F5A5113DED88CEBEA94D6DC82C7CB7DD6D59BD5D2A788845F0B0600 56522DEBE6AAFFFFB8F4F2A6E8E599E2DF89E9E486EEE98CE6E185E2DC86E1DC8ADED88EC7C37E E8E1A5F5EEB8EDEDBF9C94652019067E7843CBC68FFBF7B8EAE7A0D6D284EAE892DFDD82C8C868 C0BD5BF2F18FF8F595E3DE8BE6E291C3BE6DC7C170C4BF6EE6E190ECE795EFE99ADBD587D7D183 DED88BDCD78AE0DD8CF3F0A1E8E295BCB76CCAC279D8D085D0C97BDAD184DFD686D0C875C8C06C D4D17EDCD887E9E593F3ED99F3EB98DED784EEE491E2DB88DFD988EFEE9EF7F9ACE2E396ECE897 EBE093F4E39CFFF4B6CEA369864C12995A1DE4AE6BFDE8A1F3DB90DFDE90E1E79AE8E599FFFBB8 A79766210E00998962C4BA949C9B6DB6BB88E7EFBDF6F9CCEAE7C0EADFBBE2D4A8F9F9B5E2DE9A C7B17ED9AB80B68649EDCC7EE5D98DD7D593E3E1A0DBD285B9BE73C1C781C6C17BCFC27CC7BB73 C1BC718C8F40AFB567DADC91D8C986F8D89DCAA164B58B3DF6D385FFDB95F8D396BF8750894610 AE6A2FFDCD8AFFFAB0FEF4A7F5EDA2F1EDA4F3EFA9F2EDAAF4EFACF7F3B2F9F5B5F9F4B4F1EEAB E1DE9AD3D089D2D086E5E398EDE8A3E5E09EEEE9A7EBE5A7EAE4A6F0EAAEF1EBAFFAF4B8FDF8B9 F9F4B4F4EFADECE8A7F6ECB2F6ECB4FEF5BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEF2E4FEE4C7 FEDDBAFFE3C6FFF1E2FFFBF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF4 F3F3DBEBEBBBEBEBB5FAFADAFEFEEFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F5DEDEE0C5C5DEABACF8797AFC6666FB CECEFDFBFBFFFFFFFFFFFFFFFAFAFFE7E7FED5D5FECBCBFFD0D0FEDDDDFEF3F3FEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9FFE3E3FED3D3FECDCDFEDBDBFFEDEEFEFAFAFFFFFFFFFFFFFFFFFFFF E0E0FF5151FE5D5DFEB5B5FDDFDFEDE0E0E2F2F2F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAFFCECEFFA5A5FFD2D2FFFFFFFFFFFFFFFEFEFFFCFCFFFCF9FFDEF2E4ADE9B0A2E9A2 CDF5CDDDF7DDD9E8E79EA2F2B5B4FAEBEBFEFFFFFCF6FEF6F1FAF1ECF6ECE7F6E7DDEADDD0DED0 B6E1B6C5EBC5EAF8EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE0E0FF9696FF6464FF7676FFA3A3FEBBBBFE5656FF4A4AF67D7DEABCBCE8EAEAF0F9F9F8 F7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CF75D1C86DD6CB70E3D87CE6DB7FE4D779E1D475 E9DC7DE6D778E4D577EDE17EE5DA75E1D780E6DA95C8BD85463D05A09857CCC776ACA74ADBD471 EBE382F2E78E7E7530565018C5BD7CD1C97ADBD47DE8DD84E6D882E9DA86E7DB88E0D681DDD47A DED87BE7DD85EBE18BEFE58EF7ED96FAF098F0E68EF3E991F8EF94F9F094FAF195F6ED91EDE486 F2E98BF3EA8CF0E789F3EA8DEAE185F0E78BF9F096F5EB92F2E88FF1E78EEDE38BF3E891E2D77F D4CA71F4EA93EBE18BDFD682E7DE8DF1EA99D8D0818F8839898233D8D184CEC470DDD27CE9DF88 EEE691E6DE8AEFE896F2EC9DE7E49AFDFAB76460265A5837EDEDB7908A523A3500ADA86AF4F0AE EFEBACEDE7AD827C4F312B0F454112D4D182EBEA92ABAA620A0700928F5BE4E3A7302D05ABA759 E3DE8AE2DC85DED77EE0D880E6DB84E6DB86E6DD8AEAE290EBE391E1D987DFD785E9E18FEDE593 E3DB89DAD281DED684E4DC8BE7DF8CEDE28DE4DA83F2E893E9DE89F2E792E8DD89E8DD89DBD07C F1E692F9ED9AF8EC99F3E48FF9E58BF3DC80DBC264DEC363EED070FCE687F3D87DF5DE88EEDD8B E9DD8FF4EBA3EDE198F3E397F1E28FECDF97EBE09CECE790F9F3A5958D59080000887751ECE09B F4E795FEEE9DA88C49947C4B2F1A01AF9E66EBE194E7DF87F8EC98F0DE92FFEEA3EDD27EC9B051 E1CD6FFEEE94F9E991EFE190FBEFA3FAF1A8F1EA9FEDE59AEEE799EFE897F3EA97E3D98BF7EDA9 E7DE9C857D31F1EB97E4DC9D655D20E1D99C9F966B837C47F8F7B5F7F5B17E7B560D0A01080500 ADAB79E4E19CB7B165ECE499FCF4ADE9E1A0FDF9BAA89F662A2100BAAF70FBF2AEEBE595E5DE89 F2EC97F4F1A9F9F5B37971365E5925DAD493EDEA9EE4E592D1D480E6E6A3CBC895484220494220 999465CBC787D9D689ECEB98EDEC9AE5DF96E8E38FE3E080EBE68AE8E28DD7D385DAD48FE8E2A5 EDE7ADDFD9A36D69473E3C0C7B7645D3CE97F6F0B5D3CE90E1DE99E2DD93EAE695D7D47DE3DF84 E4DE82E2DD7ED8D373969034DCD685E5DF8FC5BF6ED8D283D1CC7CD1CC7DDCD787DFD98BD3CD7F CEC87AD8D485DEDB8CE0DD8FEAE799D7D58AC5C077D6D187E3DD94EBE399E2DB8FE8E092E3DC8B C9C16FD2CC7BE6E08FEEE897EAE493EEE895D9D380E0DC88E5E090E6E092E5E095EBE69DEDE89E E3DB8ADCD685D7D389FEF7B6FEEDB0E1B97C99601F7D3D00B77B36F5CD89FFECAAD7CB84D1C77B F9EAA5CDB87D8C7443CEBA88FFFBC5F0EDB0E7E9A9DEE0A1E3E0A7EAE2B0E5D6A8CFC18DE6E497 E6E195E7D294E9C18DA1702FDEB96BEBDD91DCD796E1DD97EEE592DFE293DEE098D7CE88E9D692 E7D48EC6BD73CECF82B3B96BD2D086DCC987F3CA94BB8C51C5A251FFE397D795589D54208E521D B3874AFEE29CFAEAA0FCE69AF6E69DF1EAA2EBE79FF0EBA0F2EAA2F0EBA3F7F0ACF6F1ADEDE9A7 E2DE9BCECC86BEBC75C3C278D7D78BE7E39AE2DD98E9E4A0E3DE9DE4DEA1F4EEB2F0EAAFF7F1B6 F4EEB2ECE6A9EBE5A6E8E2A3F7EEB2F8F0B3F8F0B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFF4F8EECE F2DDADF9E2BFFFEFDEFFFBF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCF6F0F0D2E9E9B8EFEFBDF8F8DEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F7E5E4E7C8C8E6A2A3F97C7DFB 7575FAD4D4FDFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFE3E3FF6464FD6666FDA9AAFCD2D2EDDFDFE2F2F2F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFFCECEFFA6A6FFD2D2FFFFFFFFFFFFFFF6F6FFE1E2FEB7BCFB92B2D684CC9E 9FEA9CE3FEE3FAFFFBF5F3FFB8B7FFBFBFFFE4E4FFFBFAFFFFFEFFFFFFFFFFFFFFFFFFFFF8F6F8 E5EBE5BEE8BEB7EAB7CCEFCCE7F7E7FCFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFFFFFFFCACAFF6868FF4B4BFFB1B1FEDDDDF7E0E0F27F7FFB5555F75F5FEEA7A7F3F6F6FF FFFFFFF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3CA6ED1C86CDCD175E4D97DEADF83E4D779 E3D678EBDE80E9DA7CE7D87BEEE07FE7DC78E6DC86E5D996ECDFAA4E430E726A30C9C374A59F43 DED776DFD775EDE386948A46423B04DAD291E9E095E6DE89F3E890E9DA85EDDE8BEDE18EEAE089 E9E086E4DF80ECE289ECE28CE9DF88EDE38CF6EC95F6EC95F5EB94F6EC95F1E790F2E891F6EC95 F2E88FEEE587EEE586F1E889F7EE91EDE489F5EB91F5EB92EDE38AF3E990F8EE95F4EA91F5EB90 F6EB91E9DE85E3D97FEDE38CEEE48FE8DF8DDED684F3EA9DF6EFA3AEA65B6E661BA29849F7EA9A EFE591F5EE96FDFBA3E3DE86E8E693E2DF94EFEEAB262300918E60FCF9CEEFEABA5D572358531B C4BF86FFFDC4D8D29E1E18006C673CE3DF9FFCFBAFD9D87FC1BF760D0900C5C192AEAB75565210 D1CC7AE1DD82E3DE7EEBE183E7DE83E3D782E4D887E3D788E3DB8AE4DC8BDDD584DFD786EEE695 ECE493DED685D3CB7ADAD281E6DE8DEAE292DDD283EEE394F3E899E8DD8DE3D888F3E999E6D98A F0E394FBEF9DE7DB89E9DE8AF9E896FFEA9DEDD082C5A655E6C56FFDDB81FFE58AFDE086F8E088 E1D07BDED483F5EE9FF5EB9FF1E497F3E88FF2E89CEFE6A2E0DC81EBE695B4A8760C0000A7936C FFFFBCF8EF9C7D6413BFA563D3BD90180603615725E6E39CEBE997EAE291F4E296FBE092CDAB51 F2CF6DFDF092F3E38AF5E590EEE394E8DF93F5EDA4F0EAA0FDF6ABFBF4A3ECE390EFE38DECDF90 EEE29EFEF6AB9A9343D8D180EEE89F837A3F978C5CEAE2B4645D2AF2ECB0EAE8A3C0BD96020000 0D0A006B693CF3F0ABAFAA60E2DA92DED590F7ECB0B9AF74190E00C7C389FFF4A5ECE28DEFE696 F1E89DEEE59DEEE8A15D56157A7638FBFBB8EFEDA3F1F1A6EDEDA7EBE9AF8E8C54181400635C2F EAE5AFE4E0A0DAD78CF8F6A3E4DF8BEBE695F2ECA1E5E08EDAD67CE5E08DF2EFA2F6F1B0F3EDB4 EBE5B2ABA777221E004E4D22D8D79EEDEDB1D7D593E1DC98C1BD75DAD58BE0DB8CCCC775B8B25E D8D27EE5DE8AEBE08EE7DD8AD2C876D4CB7CEAE393C9C272C6BF71DCD587E5DF91DCD688D9D385 D6D082D3CE7ED4D180D7D484CFCD80CFCD82C5C378D3D187E6E19AE5E19AF3EFA6D8D287D6D083 E3DC8CD5CE7DE1D98BF4EC9EEFE797DBD584DFDD8ACBC976E2E08EE2E192E3DE93EDE69DF4E9A4 EADE97D5CD7AD0CC7AE6E39AE1DD9DD3CB8CF7E2A0EDCB83C6974E88530B915719DAA26DEDC086 CDB669EFD68BECD08FB49659A18849F7E69FE4DC8EE9E494EAE496E1D690F6E4A6F8E6B0DCCF96 DADA86CFCB77D5C27DE3B9819B6B28E6C274FBF1A6E1DC9BD9D68FE9E08ADCDD8CF0EDA3F0E099 F3D692ECD18AE3D186E0DA8DF9FBAFF4EEA5E6CA89FBC893C98B56CB9648BE7A328B3901A45926 E1B078FDF9B5F4F3A6EFEE9EF3EB9EFAEFA9F1E9A8E9E29CF1EA9DF4ED9FF0E89EF5EDA5F1E8A3 EAE4A0E5E09CD4D18CCBCA83D6D68CE2E297E3E297E5E198F7F3ABF5F0ADEFEAABF2ECAFF1EBB1 F6F0B6F0EAAFE7E1A7ECE6A9F4EEB1D8D091E2DA99F6EEAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF6FCFCDC EFEEBDE6E3ACF4F1D8FEFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFCFCF7F4F4DCE6E6ADEEEEC9FBFBF2FEFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F7E3E3E6C5C5E59C9DF9 7878FB7373FAD3D3FDFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7FE8080FB7272FC9898FBC0C1ECDDDDE3F3F3F1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAFFCECEFFA7A7FFD2D2FFFFFFFFF5F5FFD6D5FFA8ABFC5468EC3B69C7 6AAE9FAAE7A3E1F5E1F4FCF4F2F4FDC5C5FFC3C3FFD8D8FFF0F0FFFDFDFFFFFFFFFFFFFFFFFFFF FEFEFEF8FCF8E6FDE6C7F3C7ABE6ABC0EBC0F5FDF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F6F6F6FDFDFD FFFFFFFDFDFFF0F0FFB1B1FF5353FF4D4DFFD9D9FEECECF0D8D8E6AAAAF67777FD5B5BFD9797FD F2F2FFFFFFFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFFCFCFFFEFEFFFEFEFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCAC163D7CE6FE6DC7DE1D679E5DA7E DFD276E3D67AE4D67BE4D47AE5D67CE6D777E3D873E3D984E3D694F7E9B7554918655B2DDAD386 B0A94FDAD372E0D876E4DA7E9A904B272000CAC182E3DA90E0D885E5DA82EBDD87EFE18EEBDF8C E9DF88EDE489E4DE80EEE58AF2E890EEE48DEEE48CF6EC96F9EF9BF5EB96FAF09BF7ED98F6EC97 F7ED99F5EB94F7EF90F4EB8BF7EE90FBF295ECE388F1E88EEFE58CEBE188F1E78EF1E78EF1E88D FAF297F7ED91EEE387F2E78DEADF86F0E68FE3DA87E6DE8DE9E093F0E79BFBF3AAC6BD758A7E37 A3964DE3D888D9D07CDCD57CE5E087E2E08BECEA9EDDDB9A1C1900ADA9829C9879D8D2A9E4DEAF 918C5A8A8450A8A27277724C261F0ADAD4A0EEEAAEE2DF96F0EF97ACAA68201A00F4EDC3686235 807C3DDDD881E3DD7DEAE480EDE483ECE085EDDD8BEEDD91EADD90E9E091EAE293E6DD8FE5DC8D EAE192ECE394EBE293E6DD8EE1D889E4DA8BEBE194F3E7A1F3E9A4E1D58FFDF1AAEFE29CF8EAA2 DDCF84F2E598F5E89ADDCD7FE6D784F7E698EFD292DBBB7AFBD992CEA95ED2AC5CFEE892FFE891 EED57DD6C56DE4DA83E8E38EE7E091EADD91F3E78EF4E99CF0E7A2DFDB81F4EE9FBAAE7D2F170B BBA379FCEFA4A68F398D7222FFF0B0DED1A83C2D0A2D290BCED18FF0F3A4E6E191FEECA1CEAF60 E0B95CFFEE89FCEE92F2E38DFBF09BF3EB9CE5DD92EAE39AE8E198F4ECA1F4EB9BECE08DF2E68D E1D586B5AA64E1D988C5BE6DAEA65CF2EC9AD6CE915B4F29E2DBA78B845399925DF7F4B0E1DFB8 2825140400002F2D01D1CD8DB7B26AC7C079F7EFAEC4BC841D13009E955EFFF5BCEFE689E0D576 FAEFA1ECDEA0E8DDA2494103746F33F2F19DC4C771DADC8CF4F6B1E7E5B3776E551B120B89854C F5F1A9EEEB9AD0CD79E4DD8FE3DD92E3DA91DAD386D6CF7ED5CF7CDAD484E2DF93EAE5A4F3EEB6 A7A1743A360D4B481A9B9A66DBDCA2D0D28FDADD94EDEBA0F3EFA1D6D082D1CB7CDCD785CDC574 C7BE70E2D88BF0E49BF6E8A1F0E29EF6E8A3D6CD82E1D98BEDE799D7CF83E7DF93F1E99DE9E397 E3DE8FEDE899ECE796DAD685D2D280CDCE81CFCF85D3D38AD6D68EE3E09BDFDC95F1EFA5DEDA90 DBD88BECE797E4DE8EEFE497ECDD93E0D689D7D180D3D080BFC16ED5D787DBDB8CE8E499F9EFA8 F7E6A5DBCB88B8B661DAD984DBD48CBCB375CBC383DAD48CDED786ECDA87CFAB5E9B5C208C320C B16135D8B367EECC80EECD85AD8742AC8A41F4D989D4C36ACFC568DCD177E2D181F2DA94E2CC91 D7CC8FDEE18AE7E790E2D288C0995D8A5E1BDCBC6FEEE199D8D796DFDE99E4DD87E2DE8CEAE294 EED98EF9D992F0D188E8D084E4D78AECE797F2E69CFFE7A8E1AE78AC5A28B250129F4708CB8F51 F6D093F5DD9CEEDF99E6E79AEAF4A4D7E291DBDE96ECE2A4EBDD9CF1E999F1E89AE9E094EFE59D EDE39CEDE4A0EFE9A6DEDA95DBDA92EAEAA0ECEEA3EFEEA2EDE99FF9F6ADF6F1ADF1EDACF4EEB0 EFE9AEF6F0B6F1EBB1EAE4AAF3EDB3FFFABDE3DB97DDD690F8F1ABFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFAFAEB EEEEBDEDEDC0F1F1D3FAFAF0FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBEDF1F1C5EDEDBEEDEDC8F9F8ECFEFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F7E2E2E6B9BAE4 8081F76868FA7373FAD3D3FDFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE8E8FE8686FB7475FB9495FABCBDECDCDCE3F3F3F1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAFFCECEFEA5A5FDCECEFDEEEEFDBABAFF8C8CFF656AF94B6BE1 4589AE50B1756ACD6594D594C1EBC2E0F3EAC1C7F9C3C3FED7D7FFEEEEFFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFEFFFEF9FFF9D5F5D5AAE4AAB2E8B2E5FBE5F7FFF7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFADCDCDCCACACA F0F0F0FDFDFDF9F9FED7D7FE9C9CFF6666FF7474FFE6E6FEF7F7F7EAEAF2D2D2FA8A8AFF4747FF 7F7FFFEFEFFFFFFFFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFF1F1FFF0F0FFF9F9FFFEFEFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6CA6DDDD274E6DB7DE3D57A E1D278DFD077DCCD73E5D67EE3D37BDFCF78E9DB7DE7DB75D7CB7BE6DA95F0E5A6776A3E574E1B DED983AEA755E5DE83E4DC7BE5DA88B6AA69251D00B5AB6BE2D990D1C977E1D77EE1D57DE9DC83 EBDD86EBDD88EDE08BE3D783E6DB85EFE590FBF19BF5EB96EEE391F9EE9BF5EB98FDF2A1FEF3A2 F8ED9CF3E897F0E592F4EB90EFE68AF3EA8EF4EB8FECE388EEE58AF0E78BEEE58BEEE588EDE588 EFE689F2E98DF4EA90EEE489F0E78CF5EB8FF3EA8EE8DF86E5DB85F1E793EFE595EFE699F9EEA3 E9E294A6A04FBAB45DFCF6A1DAD484DED68CE1DA8FE8E49698984D2D2C01403C250000005D5B2D EFEDBEB7B38A130F000C08001A1900A19E66FAF5C8EEE7C0D1CC9FFFFFC06D6A2A676232E2DAAC 272000A9A354EDEA81DBD86CE4DB7EECDE8FF0E294E9D98FECDA97E6DA99E4DC96E7E194E5DD97 DED591DCD583E4DD87EDE593E1D68AECE38FDCD081ECDC9CFAEFBD8B7F527A6F37F7EFA9E7E094 E5DC8EE7DF90EEE495F3E595F0DF8EEDD985E1CD7AD3C075F1D98EFFE698F4D180CCA350CDA551 F2D17BF5D681F3DD88F1E58FE1DC87F3EE9EE5DA8DEDDB8DE7D487EADF8FF1EC9FE4DFA979684B 311102DEBF7DBDA0479D8430FAEC96EDDB91F9ECBE4B44201B1900A8A760FBF09CF6E392DEC17A CEAF67F8E08AF5DF7DF5E88CF5EB92F1E990F0E994F0E896EBE393EDE395E9DF90E9DD8EF2E594 EFDF8FE4D889DBD285DCD482F2EFA08E863DDBD388FFFABB847C4A746D37C1BB86474211F8F3B7 F7F6C5625F3D020000080600BCBB88C8C886A3A25FD4CF952D2500A79C6AF8F1B2EBE596F0EA8D E2DC84EFE89FEEE4B242380B9E9660F8F6A8E7E88AE6E889F1F1A5DAD7AC3A2F23403121C3B791 FFFFC4EDE995F1F093DFDE83D6D482D7D38AE7E39AD8D587B7B861CECA7DDAD293FAF3B5DDD598 524D2B48420AA9A46EEEEAADE8E5A2D9D790C2C077B9B96CDFDB8DE3DC8DE6E08FE0DB8AD3CE7C CFCB79CAC775E4E091EAE599E5E097E4DF98EAE69DDED789E7E090ECE697E1DA8AEAE393ECE595 ECE595E4DF8CECE794E6E18CE4DE89E3E18BDADA88DCDC8DD0CF84CBCA81DFDD93DAD88CE0DF8F DBD986DEDA89E3DF8ED1C97EE5D38BE8CF88E9D48DF2E39BE5DB91CFCA7FE4E196EEEEA2E8E69A EEEB9FF0EA9EE0DA8CDFD681F0E492EADE91E0D38DEBE199EDE69CE9E192F0E193F8DE95FACE8D BE824C7F3D077E4202965513DEA161D89456B17130FFD58FE9C67BD5C273CDC475D6CF84C0BA75 ABA162DBD392E2E794D9DC82F4E895EECD838D661CD8BA70DBD288CACD84DEDF94E7E08EDDD685 E9E395DAD88BE4DA91F3D796FDDCA2FEEAB2FFDFA6E7BC81C586509B4113A13A0EC87842FACA90 FFDEA0FFE7A6F3DD99DACD86DBD78CD5DD8FC8D586B7C27AC9CD8CE4E3A1E8E39FEEE8A4EAE19F F0E4A3F1E1A1F6E5A5ECDF9CDFD68FE3DF94E6E79AE7EB9BE6E599EEE99FF6F1A7F3EDA1EEE99C E9E497F0EAA0F4EEA6F8F2AEF7F0AFF5EEB1FDF6B8FEF7B8EEE8A7EEE8A7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFAFAF1 F3F3DAE5E5B1EFEFCFFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FEFEE4F0EDBDE6E0A5F6EFD6FEFAF4FFFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F7E1E1E6 AFAFE36969F66161F97C7CFBD7D7FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEAEAFE8F8FFB7778FB8E8EFAB6B6ECDBDBE3F3F3F1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FEC6C6F19191E0ADADDEBDBDE47A7AF95054F73C4BEA 668DD775BDA858C06743B94153B95387D288B5E1C1A7B8E9B8BDFAD9DAFFF2F2FFFDFDFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3F5E3B6E4B6AEE3AECFF1CFEBFAEBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7C9C9C9 AAAAAAD5D5D5E7E7E6E4E4ECB7B7F68C8CFE8686FFA2A2FBE4E4F4F9F9F9FBFBFFF2F2FF9C9CFF 3F3FFF6D6DFFE4E4FFFCFCFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FFECECFFDFDFFFE4E4FFF5F5FF FFFFFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDC81E9DA7FE7D87C E8D87FEBDB83E8D880E9D981F0E089E6D681DACA75E0D174E3D771E3D486F2E69EECE19885784D 463D0EDAD779A69F52DFD882E1DB7CF4E99CE7DD9D342B028F8646E7DD97DCD483E5DC82DCD175 DFD476E5D77DE9D984E9D889E6D688EBDF8DEAE08BF1E792EDE291ECE18FFEF6A4F6EB99FCF1A0 FBF0A0F6EB9BF4E999F5EA98FCF29AF6EC93F7ED94F1E78EE9DF85E9E084F2E98CE5DC7FEAE183 F4EB8CEEE586E6DD82EFE590F2E891EDE48AEAE184EEE588E5DC7FE1D87BF0E78DF0E690F1E695 F7ED9DEFE996EFED96918D32BDB765FBF2AAF1E5A4D4CC84E4DF91858436050300131101080503 4F4E1BF1F1BFB2AF8D0B070089884FE0E19BEEEEADD1CDA33A331A3D361CCBC79A414000AAA85D AAA2704A4210EDEBA0DEDC6CE6E476E7DD88E9DA96ECDC96F2E198F0DE9DE8DCA0E5E0A0E8E594 EAE49DE3DC97E4DE88ECE68BDED685F0E39FDED480E6D986EBDD9FDFD2A934290D6F6636F9F2AB E1DC8CE5E08CE3DA88F2E694EAD987F7E490F9E28BD1BD64F4EB92F2E48CECD57FFFEB95FFE28D D5A853B78D3BFEE290FEE794FCEB98E6DC8CE5DF8EE4DA8AFCE49FFDE497FAE895EAE8A3A8A383 251203492509BA933DA58423E9D684FFF397EDE28FF3EEB86F6B41040100706628FFF29FEFD080 D9B76FEED28CF6E694EDE789EEE68CF0E98FEAE389E8E187EDE48CECE28BF0E490F6EA97F2E594 FAEA9CF5E597F6E798FBEF9DFFFBABE7DD90A89E557D742FFFFEBED6D0944E490FC7C28B4F4C15 A6A36EFFFFC8AEAE7A0501000200008D8C6CE2E5AE8689452A2900908A5AFEFECCF2E9A2E2DC82 EEEC99EBE99FFCF8B9342F00948E59ECE8AAE2E094EFEF99F7F6A6C6C2872E25085E5139E6D7B1 F4E8B4F6EDAAF8F2A1EDEC92DFDF85EBEB96E2E393E9EA9DCCCC81C3C677EFECAAFFFFCCA89D67 372F007E7636E8E39CF3EFA6EBE599E8E294EDE799DED88AD0CA7CDED789EEE799EBE596EDE896 E8E391DEDC87BDBC69D0D07DDCDE8DDFE093D8DB8FCCCE82D4CE7DEDE695F7F09FEDE695DBD582 EDE793E0DA86DBD57FE2DC86E1DB83E7E189E1DC83E1DC86EFEA99E0DB90CCC87FD8D48AD5D382 D3D17BD6D27BE2DC87E7E090E0D68CD5C67EDECD85EADA94EDDF99E9E29AE1D993E4E097EAE69C E1DE91F1EB9DF6F1A0EDE694F2E392F7E695ECDF8DEADF8FF2E99BEFE799FFFAB0F2E49BE4D38B F7E29BFDE6A0EECA86C6874990450A8734009A4008BF6932E8A66DFFD79BF8D294DDC888D2C587 C1B77ABAAB6DD8C886EDEB9DDBD781E1D27BECC876A3782DE4C27AE7D98FE8E598E8E495E2D285 F3DF96F0E398DCDD92F6EFABFFEAB4FFC198EA9B75A65C33723301914916B15322B35524FFE0A5 FFEDAEF0D795FEEBA5F0E199DCD086E3DE92E3E196D2D58CC5CA83D5DA98EEF2B1EDEBB0EEEAAD EFE5ABEBDCA1FFF2B6F7E4A8E5D595E6DD95F0EBA0E7E898E1E493F0EDA2F7F0A8F0EA9EEEE997 F0EB96E7E38CF0EB97F3EE9DFDF8AAFFF8B2F8F0B0FAF2B3FAF5B5F1ECAAEAE5A3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF2 EDEDC8E6E7B4F4F4DEFBFBF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF7FBEDD3F9DDB3FDDEBBFFEBD7 FFF9F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F7 E1E1E6AFAFE36B6BF67777FB9FA0FDE2E3FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0FFB0B1FD8485FC7474F89C9CEAD9D9E3F3F3F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F9ACACC249497934346F39398B4A49E5546DD9 6899B8AFD0D4D5E8E3C2DDC79ACA9A6CB96C55AF554CA35F5683BC96A9ECE3E6FEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F6F2D7E3D7B7D0B7AECDAED9E8D9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC E3E3E3C2C2C2989898989896A1A1AB8A8AD98686FCABABFFC7C7EEC6C6CEE2E2E2FCFCFDFFFFFF BABAFF6464FF7171FFC4C4FFEBEBFEF8F8F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDADAFFB5B5FFC4C4FFE1E1FF F6F6FFFFFFFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DA7EE4D57A DACB70DBCB72E5D57DC0B058D9C972E3D37CE3D37CE3D37CE3D578E7DB75E4D486DFD48AE5DB92 B5A9785D5411DBD87BBBB465DDD77FE4DE7FE1D688E4DA9A3A31026B6125E2D990D4CC7AE3DA80 EADF84E2D779E5D77DE8D882E0CF7FE7D689E6DA86E1D780E6DC85E8DE89E9DF89F7EC97F0E691 F6EB97F6EC98F2E794F1E794F4EA95EEE48CF0E68DF8EE95F4EA91EDE489EDE488EFE689EEE588 EDE486EAE182EAE182E8DE84E9DF8BF3E992E9DF85DFD679E9E084ECE386E7DE81F3E98FF0E68E F0E690F4EB95E2DD81FBFAA5C1BC6B746B1FCFC679E8E091DAD285E3DF994240175A5734BFBEB0 05050677773EFBFAC32A270D2D2A0F5A5920EEF0A8ECEAA94D48281009000802002C280265632B EAE6A6352D02827A47F8F3ACECE88CE5DF82EBE38DECE091E5D987ECE18CEBDC8CE8DC9BE6DF9D E8E489E8E38CE4DE8AE8E386EFE794E9DE9DC5B9825E5616D9D075F6ED9DBEB583140D00B1AB6F FEF6ACE1D987E4DA85EBDD88E5D481F5E390ECD881DDC96EF0DE82F1E48CE3D47DF6E28BFEEE96 F7DD87EBC772BD9B47D2B15FFDE290F9E493ECDA8CF3E998ECE392F8E097F6DB8CF9E795E8E5A3 625D3C1204004D2D05936E1BE4C868F5DF8EE3D37AEDE18EEFE7A8BBB683110C004C4110E1CA83 DFC278F1D289FFEDA1EEDE8CECE58CE7E088EFE890ECE58DE7E089E9E08BE9DF8AEFE28EF4E895 E4D785EFE08EF3E493F1E391DCD07DCBBE6ED2C779E6DC939B924CBDB674F9F2B6B9B47B65622B D0CE9954521CE0E2A0FBFCC1312D1401000043402ED2D3A32225065E6027F0F1AEE9E1A2E1D894 ECE497F1EAA3D6D39B433C068B873DFBFAA7F2EF9DF6F2AEF6EEBCA69C77160B00847E49F4F0A0 F8F1A3DCD48CE2D995E8E09DDDD990DAD787EDED96F4F49DDADA8BF4F3B2F5F2BEC9C2915D541E 49411ABDB675F9F3AEF6F0A6EBE599E2DC8DF0EB9BF0EA9CE7E193D9D385D8D286F5F0A2E8E394 EDE897EAE895ECEA95DFDE8BCAC976C1C06FCAC87ACFCF83C9C77AD8D1839A9343B0A958EFE897 E9E38FEBE591E9E38FE6E08AE0DA84DED882E5DF89DFD880F2E791F5EC9AEFE59AE3DA92DAD389 D6CF81D7D27CD9D27CE4DC87DCD382DBCF84B6B96AA8B561B9C573BCC777B5BE70CACD82E1E096 F3ECA3F3E59CF3DF95EFD58BF9E094F7EB9AF5F09CE9E490E3E28FE7E794E1E18EDDDD8CDEDA8B EFEA9AEEE698E3D98CEDDB91FCDE98E0B472C18647A6581F903E068D3B03A3561EC07D45D2945E E5AA76FEC997FFD6A2FED699FFEDA5FEE99CFEE094F3C480B57939F7C686F4DB98F0D991FCE099 FFD794FBD699E5BE81CFB173B8935BAD714392401B963F199F5828B78449E4BF7BDDA862C18E47 F7F2A5E2EA9ADAE08FE5E998E7E897F8F3A5EAE397F2E8A0F4E5A2F5E3A5FFEDB2F6EAAFA39E61 BFB97DFFF6B9E4DA9CF4E7A9F6EBACEBE19FE7E09BE7E29AE7E49BF2F2A7F8F5ACF1EAA2E2DC91 E5E08FEEE996E5E18BEAE591F0EB9AFAF4A8FCF5AEF5EDADF2EAAAF5F1A6F0EE9DEEEC9CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFB FCFAE6F2E9BFEEE3B5FBF9EFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF4E9FDE9CFF4DEB1 F5E7C4FCF8EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F7E1E1E6AFAFE36D6DF67D7EFBAAABFDE6E6FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FFBABBFD8889FC6B6CF78D8DE2CCCCD6EEEEEC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F79D9DAD2424480808321515505453C1 6780B274A486A9C2A1C8CBBAC0C2B0A6B6957EA76F558D5634724E29607C5B889CA3C1B4D1DECE DFE1E0E1E1E2E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1DBDBDBCDCECDABBAAB93B093BAC9BAE2E1E2 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1 DFDFDFD4D4D4BBBBBB82828272727173737B7676B98A8AE8B2B2E7CFCFDCD5D5D8EAEAEAFEFEFE FFFFFFCDCDFF8484FF7575FFA4A4FFD9D9FEF9F9F7E1E1E1EBEBEBFCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4C4FF8B8BFFAFAFFF DFDFFFF7F7FFFFFFFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEADB7E E9DA7EE4D67BE3D379E3D47ACCBC64E4D47CE0D078DFCF78E2D27CE0D174E6DA74E6D784DED387 E0D58BBDB17B4F4703DAD77BC1BA6AC8C26BE4DE7EE3D985E9DF9C4B4209473D18E2D98FDBD381 DCD279E2D77BD9CF70E3D57BEDDD86E5D383EEDE8FEDE18BE9DF86EDE38BEFE58DEEE48DF2E88F EFE58FF9EF97FDF39DF9EF99F7ED97F8ED97F4EA92F4EA90FAF097F8EE96F0E78CECE388ECE386 F6ED90F1E88AE1D879EAE182F2E990EBE08EEEE390E5DB85E3D980EEE589F3EA8DEDE485F3EA8C EEE488EDE389EFE58CF5EF8FDAD37AFAF1A6C0B46B9F9543E1DB80DED786D3CE9429230CC2BEAF 6262523A3D1EC2C2824B491C3D3A15D2CF9D525118A5A65DE6E4A33A360B00000005000056522B E0DCAA7972484F481ADAD49CE4DEA1FFF8B5EFE79EEAE490E0D87DE0D87BE9E080EBE081E7DC92 DED68FDFD976DFD978DCD679E2DD7ED8D085F9EDBB7365492A2200DBD676F9F59A817E4129260B E2DF9AEEE597EDE18BEDDD87EDD883FAE390E4CC78D7C369EBD779F4E184EFDE88EBD881FBE790 DAC46CD4BB63FFE992F3DE89DABF6BD2B564F8DD8FFDEA9DE8D786E4DB87F4DC8DF9DE8CF9E999 CAC7893C3919170A007F6130EBD080FFEB90F0DF90EADA84E5D680E7DE94E8E3A5474018281A00 87713BE3C889F9DE93F4E08EF2E58FE9E18DE1D986EBE390EBE38DE8E08DEBE08EE9DF8CF2E692 EEE28FDED27FF0E08DEEDF8DE7D884D3C571D8CA77C4B8689C9346E8E0987A722FECE5A7E7E2A9 5856209F9F6B7E7E4E8B8E4EFFFFC16E69510300001F19173434222A2D00C7CB74EEEE9BFEF8AF E6DE9AF9F6BADED3A7393200B5B264F8F6A0E1E186EAE895ECE6AE71654B2B1F08B2AB77F0ED9B D2D271E0DE7AE6E289E7E096DFD797DBD695DFDA93DEDC8DE7E596FFFFB9EAE5AF6F69452E2704 9E9759E9E29EF1EBA3F1EA9FE6E093EBE595DBD684EBE694EAE594ECE796E5DF92D3CE84EAE89C E3E192E9E795EAE996EFED9AE2E08BDEDC88D5D381CFCB7BCCC97BD0CB7DE5DF8FC2BB6BDDD686 F9F2A1EAE392C3BC6AD0CA76E9E38EE2DC88D6D07AE6E08AE8DF87F9E891FAEA9AE7D88EF0E49D E5D992D7CE81DBD380E2D882EDE28CE0D281DDCF82D5D583C4CE79C3CD7AC0C978BBC374CBD385 E6E89DE7E69AE5DE94FBF1A4F9EC9EEDDF90F2E697F2EB99EBE392EAE493EFE998E5E08FE9E391 E9E090EBE191EFE194F5E699FFECA0FFEEA3FFEDA7FFE8A7EEAB70A8541BB85F28A44C16AA551F A24F1A994413A64E21A54E20AC5C2BAB6C34C2884EC2814AC26F40A74B1FCF7E50C68956BD804A C07E47AC5A29B75D3596471F79411031090055240CD9A678EFC694F8D597F3CE89FFDF94DB9F54 D79A4FF3E395D2CE7EE0DB8BE6E291DBD887E3DF8EEBE89AEEEA9FF1ECA6EDE8A6E6E1A2E1DA9B E6DD9EEFE6A9F3ECADFEF9B9F5EFB0E7E3A0E1DE9CE9E6A2E8E5A0E4E29CEBE8A3F4EFA8F6EFA6 F0EA9FF0EA9CF7F2A1F4EF9CF6F19EF7F2A2F8F2A8F9F2ACFAF2B2FAF2B3FCF6B8FAF5B5FBF6B6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FEFFEEFCF8D6FBE9C4FCE5C7FFFAF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFCF8EC EAE5B3EBE8BAF9F6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F7E1E1E6ADADE36868F77E7EFCAFB0FEE7E8FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FFBCBCFD898AFC6A6AF78686DCC2C2CC E9E9E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F69C9CA925253E0E0E1F242433 706F9F798B917295678B9C739F9F869F9C869999818C93796C757148596623554A2F704956955A 8FB088BABDB3C3C2BEC4C4C2C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3BEBFBE9FAF9F82A282A2B2A2 C4C4C4C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3 C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3 C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3 C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3 C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3 C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3 C4C4C4C3C3C3BCBCBCACACAC8181816B6B6A6464697B7BA69B9BD5B5B5CFD1D1D1F0F0F1FBFBFB FFFFFFFFFFFFDBDBFFA1A1FF7777FF8484FFC7C7FEF9F9F6DFDFDFEAEAEAFCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFB0B0FF6868FF 9E9EFFE0E0FFF8F8FFFFFFFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DECF72E0D174E7D87DE7D87DE1D277E8D780F0E088E9D981E6D67FEBDB85EBDC7FE3D673E6D882 E6DC8BDCD385BEB4763C3400C7C36DD3CC7BCBC56CE7E181E7DE85EDE59E7E753942380FD0C77D D1C978E0D77EE6DB7FE3D87AEDDF85F3E38CEFDF8AF2E28FF7EB95F1E88EEBE187EAE087F0E68D F8EF94ECE288F4EB91F8EF94F5ED91F3EA8FF5EC91F1E78EE7DD84EFE58CF6EC93F2E98EEFE68A EAE184E1D87BEBE284EDE485E9E081EBE289EBE090EADF8CE7DD89EBE188F3E990F2E98DE9E081 EDE485EAE182ECE384F0E88AE9DE82EADE87E5D88BF5EA9A877E24D0CA6AE0DA8D938B6331281D 57544B1919016C704040400A2D2C03D4D197F2F0B5706E2D909048EBE9A8DAD7A17671490E0900 C5C190F5F4CD3D3427A9A46CFCF8B7F8F1B9AEA377D9CF99F6EFA2DCD676DAD370EAE281DFD671 E2D786E0D68BE0DB73E0DA7ADCD57CE0DB84E7DD9DD7CBA22A1C15766E2EE9E98CEEEF934B4C08 686829F1EDA4E0D481F8E58FF4DD86FCDF8CEDD17EDEC46FECD57BF8E684EDDA7BF1DB84FFEB96 E9D57ECDBB64E0D078F9E991F9EA92FFEE9AC1A454D1B063FCD78DF2DB8AEBE087F6DB87F7DC89 F7E497B0AC742321050C0300C0A770FFE799F4DB85EFE295FAEA96EBDA82ECDF89F0E79E8F8554 12010076603AF1DEA6F3E094E3D37AFAED98DDD485E4DB8CE8E08FE8E08DEAE291ECE18FE7DC8A E8DC88E9DD89EFE28CFDEE99E9DA85D8C873E1D27CFFEF9CEFE18FA3974890873CB8B16A7C7737 F4F3B8D0D098515321BDBF8D545714DDDF9FBAB59E150D120C07073938207A7C3BC3C770EEF094 DDD788F6EFABEADFA8463A119D975CF8F69FE8E78BF7F5A2E4DF9C605831251B00CEC599FBF6AE E0DE8AEDEC8FE6E47FE4E182E0DC86E9E399E2DD9AD3CE8EEFEAAAFCFBC4BBB57E2F2809504B21 DED69FEFE89FE9E398DFD98CE8E392EFEA98E5E08EE5E08EE7E18FE8E392F2EC9CF1EB9ED8D68B CFCD83D8D68AE0DF8FE5E391E7E592DDDB86E9E592E3DE8CD0CA7AD1CA7BE8E193E8E191F1EA9A F5EE9EE8E190EEE796D7D07FCBC571E8E28EE9E38FD7D17BE3DD87E6DA83F2E188FFF19FE2D388 E3D692E7DD98ECE499ECE695EFE792F6EB97EEDF8EEADA8CD0C676D5D17FC8C574BFBE70E2E395 DBDE91D8DC90EAECA0DEE092DDDC8FE4E394ECEA99EEEA99EEE797E6DE8DEBE392FBED9EFAE89A FDE599FFE69CFDD58FF4C883E9B673CEA45FBEA25C946F2C9E6827AA6328B05E24A85219AC561D 93420892410992410A9C4814943D0E8F3C107634069055277937107C290A9A43228D3E196E2E03 7E42129C5528AE5731A3472D9E5035925A33220100290B00B08D5BE9C68EEFCD8BE5BF77E7B267 C87B32F9AF65FFE193F2E090FAE89BECDA8CE6D788E8DD8DE3DC8FE5E096EBE69EEBE9A3E2E09D E4DE9FFFF5B8EBE0A2E9E2A1EAE6A3D7D693EDEEAAE8EAA5EDEEAAEAE7A6EAE5A5EEE7AAF2EAA8 FCF5AFFFF9B0FBF5AAFCF6A8FCF6A6FCF7A6F9F3A6F1EAA1F1EAA4FAF3B0FCF4B5FAF4B7FAF4B9 F9F3B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFDF4F6D9EEECBCF7EECEFFF3E9FFFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFEF8F3F5CEF5EEC3FDECD2FFF3EAFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F7E1E1E7A2A2E54D4DF87D7DFDC7C8FFEFF0FFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FFBABAFD8889FC6E6EF89999ED DDDDE7F6F6F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFCC8C9C882847B6D6D5D 69696076759F69789E5F7C908392A6A09CBAA494BE9C8DBE928DBF9688B59687A18594715C9544 3D9329699F41B1B77AD1D0AEE1E1D4DFDFDFDFDFE0DEDEDEDEDEDEDFDFDFDBDDDBB6CFB692C192 B7CFB7DFDEDFDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE DEDEDEDFDFDFD9D9D9B9B9B99B9B9B9595959E9E9EAEAEB0C2C2D3D2D2E8DCDCE5E9E9E8FDFDFC FFFFFFFFFFFFFFFFFFE4E4FFB2B2FF7171FF6363FFB6B6FEF6F6F2CDCDCDDEDEDEFAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFF3F3FF9393FF 3F3FFF9595FFEBEBFFFEFEFFFEFEFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD5C668D4C569DDCE71E7D87DE9DA7FE4D579E5D57CE5D57DE5D57DE7D77FECDD81E7DA79 E3D57CE6DC87DBD180D9D189463F00AAA556E4DD8CD0CA71DBD576E4DB7EEAE295A39B5C473E0B C7BE73D3CB7AE6DD84EADF84EBE084ECDF83EBDB83EEDD88ECDC88EDE289EFE68BEEE58AECE388 F0E78BF5EC8FF0E78BF3EA8EF1E88AEEE587F2E98BF8EF92F2E98FDDD37AE5DB82F7ED94F6ED93 F0E78CE8DF81DED578ECE385EFE687EBE283E7DE86E2D786EBE08EEAE18BEBE189F3E98FF3EA8E E7DE7FE9E080E5DD7AE9E17EEBE280EDDF88F1E191DCCE7AE3D87B9E96369C963DFFFAB94F492C 0800000200000D0F050F120047461DD4D085ECE8A4D3CF8DC2BE799F9C56F1F1AFEFEDB35A562C 646038F9F8CA9D9974130E024C4C16F2F2A569643E170C00443919CFC980F2ED8EDAD576EBE589 E3DC7AE8DE89EADE8DEBE380E9E08FEAE09BE9E09BEFE6ADBDB28B201500B0AB6CEEED9CD5D686 3235009EA057EEEA98E1D47DF6E088F5D881E8C571DCB967F4D37EF8DF84EBD674F1DB7BF5DB87 ECD27EDBC872E9DA83F2E88FECE48AF0E48CFDEA96F2DB8AD2AE62CA9F58F6DA8AF8E88FF9DE85 F6DA87F2DD969C97670B0B00363008FAE7ADFFE59BF8E493F4EC9FF4E392FBEA90F5E988F0E390 D0C288200E03402C16CFBD8BEFE194DACE74EDE28FEFE39AF3EB9EEFE698EBE292F1E899F0E696 E6DB8AECE08DE9DD88F4E791F7E992DFD179E0D27AF8EA94F5E690F4E693E7DB8B8D8438B6B067 9A95537D7B3EF9F8C3A3A572696B3B787A416A6A34EEEAD0332D260D080585846793945CC3C678 E3E48DF8F5A5DBD6954D4206A29957FDF6B4E9E19EF6F4A3D9D08F312510473C22DED98FFAF69C F0EA9FE3DC939A9448656329BAB861EEEE91EBEA90DEDA8DE2DD9FD3CA9B675D3A3A320EB0AB79 F7F3B6EBE69DE6DF8EEBE492EBE490EDE791E7E089E3DD86EDE792DED884E5DE8DECE596E7E093 E9E79BB5B66BCFD184D8D787E3E28FE6E491EBE692EAE491E4DD8CD0C879D3C97BEDE497DBD386 DFD888D1CA7AE3DC8CE6DF8EF5EE9DE7E08FE7E18DF2EC98EAE490E7E18EE4D981EFDF85EEE08D EADE95E5DD9ADED896F3EEA8EBE798E8E390E9E18DF1E694F4E596EEDD8EE9D88AE2D587E5D98E E0D98FD0CB83D7D48BE0DE95B7B76DB3B267D5D387E4E195EBE89DEDE89CE4DA8EDFCD81D5BB71 C49D55C18F48BC7D3AB16729AF5A21B45821AA5E24997232A67A3ABE8547CC884DB1662ACF894A DEA05DD29751E9B56EF1C37CEDC17DDAAB6FD7AE7BE0C8989E8D5E1D07013712045D3314C4A278 CFBD8B6B5A2853371B7044217F5636B49478A78F6D200C001A0100654625835B2980521AB07939 B36F2B9E4E07C67830E2BC6EEED88BFDE89CFCDE93FDEAA0FBE197F1D993EFDA95F3E09BF9E7A5 FAE9A8FAE7A9F1DFA0EEDE9EEFE5A2E9E5A0EDEEA7F5F8B2EFF3AEF0F1AFECE9AAEEE6AAEEE4AA E4DC9DEDE6A0F5EEA8F7F0A8FCF6ABFCF6AAF8F2A5F4EEA4E9E29AEAE39EF5EEABF5EDACF8F4AD F6F1AAF3EEA7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA EEEEEEDCDCDCCDCDCDCECECED9D9D9F6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF7F7F7E7E7E7D7D7D7D2D2D2F4F4F4FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF8F8F8E6E6E6CECECEC9C9C9C9C9C9C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C9C9C9 D3D3D3EBEBEBF7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 DEDEDED4D4D4CECECECACACACBCBCBD3D3D3E3E3E3F3F3F3FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFBFEF7EEF1E9C5EAE3AFF5F1D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFBFEFFEAFBF3D1F9E4BDFAEBD3FEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F5DADAE19393DF3838F97C7CFEDADAFFF6F6FFFEFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4FFC5C6FE8B8CFD6465FA 9595F3E4E4F0FAFAF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7EEEEEE E5E5E5DCDCDCD3D3D3CCCCCCCACACACECECED3D3D3D9D9D9E9E9E9F9F9F9FEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF4F4F4E4E4E4D5D5D5D6D6D6F8F8F8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFBFBFBEDEDEDDEDEDED4D4D4CFCFCFCBCBCBC8C8C8C9C9C9D0D0D0DADADAE3E3E3 F0F0F0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 E4E4E4D8D8D8D0D0D0CACACACBCBCBD1D1D1E1E1E1F2F2F2FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFDF4F8F7E9EBE7D3D8D2B8 C7C4AAB3B3A89696BF778AB9668AB393A6D8B8B3F5BCA9F9B4A2F9AEA9F7C4B5EADBC4D6DED7B8 A6C16B68A02182A830C5CA75E5E4ABF5F5D2F4F4E0F8F8F0FCFCFCFCFCFDFDFDFEF7FAF8CDECCD A4DEA4CEEDCEFDFCFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC FCFCFCFCFCFCFDFDFDF5F5F5CECECEAEAEAEBBBBBBD6D6D6F0F0F1FAFAFCFAFAFDFCFCFDFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFEFEFFFC7C7FF7171FF4848FFA8A8FEF8F8F3D1D1D1E1E1E1FBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF4F4FFD2D2FF 7C7CFF3B3BFF9F9FFFF5F5FFFFFFFFFEFEFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFCDBE5FD3C465EBDC7DDBCC6FEEDF82E3D479DBCC71DBCC71E5D57DEADA82E7D87C E1D375E7D97EECE289E3DA88F0E89958520E9F9951DAD382DAD47CD9D277DCD473E2DA8BA9A160 443B07D7CE82DED685E6DC85DCD177DFD478E3D679EADA82F2E28BE8D982E7DC83F7ED93F6ED92 EEE58AF4EB8FF6ED90E9E081F1E889F9F18FF2EA88EFE785FAF193F9EF95F1E78EF4EA91F6EC93 F6ED92F6ED92E5DC7FE4DB7EECE385F0E788EEE586F0E68CF5EB96EFE590F7ED97F5EB94DED47A E3DA7EEBE283F1E888EDE582E4DC77EEE583FFF0A2E0CE82F0E385E6DC76DED677A29A4FD8CD9D 160F002A250C54512A3B3B1092935CDAD790E3DE91DBD88AE9E59AE8E49D8B8843C0BD7C7A7835 121002E4E4AFC5C2942B270C3E3B1A484A04DBDE8B232108080000140A00A49E5EECE792E1DB88 E8DF92F2EC98F1E794E7DD88E7E089F0E3AD90825CB5A97CEBE1B0877F57281F08E7E3A4EEEDA9 A09D621E2000D1D181E3DE88DFCF74F6DE82EFD076D2AE58FFDD8CF2CD79FEDE83EFD673FAE07F E3C36EB19643F7E48EFAF09AF0EA91E3DF86EBE48FF9EA97FDE697FFE69AD3A65EBD9C4DF5E187 FCDC81F9D785FFF0B06C633D000000615D2FFFEEAFFAE299F9E79AF0E99DF6E596F2DB81FBEF8A EADA81CFBB7F5C49291403007F7243E2D991E6DF8ACCC173CABD78E3DA91ECE396F6EDA0FAF1A2 FFF6A6EEE393EEE28FF3E793FBEE98E6D782E4D580F1E28DF9E894F6E592F2E491F8EC9CE5DC8D 969045DAD6918F8E4E9C9C63F3F6C16163337C7B4F4C4A2197937222200D01000044432DABAB7D BFBE81EFEEA4F6F1A461590FAAA259F2ED93F3EE9BFBF2B6CEC1A1231701776F38F6F2A1EFEA97 F9F4A1EBE693E6DF947E76370C080099974FF8F7A3F3F19CEDE99FA39D62241C00746B43ECE5B5 B9B476D0CD7EF2EE9AEBE690E9E38DE9E38BECE68CECE78CE8E388E8E28AE0DA85DDD685E8E190 F1EA9BEFECA1D2D387D4D286E5E293E8E593DFDA88E3DD89E5DE8BE8E08FEDE293CEC277D6CC81 E4DC8EE0D98BD7D082EAE394E6DF8FE2DB8BF2EB99E4DD8CE6DF8EECE692EDE793ECE48BEEE687 E7E08CE8E49ADAD897EFEFB0BBBD78EFF0A6D7D786E0DB87F2EA97E7DA89E9E18ECFC976E7E190 E5DF92DDD78DDED68FF3E5A3AF9E5D9B8546C0A567F7DA9DBD975BC38653B975439E5D2792561C A069298B5914A4752DB89045D2AD62E5C279F4D48BFAE097D8BB79F5CE8EECBC7BF4B97AA66A28 D8A45DFCD387CDAD5EE0CA77F0E18CEFE18FA292521C1105C5CB9CD9E4BC131800251B0B2B1E0B 3E3A125C67350A13000204000A00000B04003D3B1F9D9A7A6B65440A00008C7A54EDD2A2D9AD77 F0BC83D68C50A45111C46F2CB062219C5313AD6927B87B3BDFAC6BFFDB99FFE5A1FFE8A4F8E9A2 F6EEA7F3EEA5F0E4A0F9E2A1F7E3A2EDDE99F5EDA5F4F1A8F4F3AAEFF0AAF1EEACE5E0A1E8DFA4 FAEEB7F6EDB1F7EFADFBF3B1F3ECA6EAE39BF4EEA4F5EFA6F5EEA6EFE8A1F7F0ACFFFCB8F5EEA8 EBE79DF0ECA1F6F2A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EAEAEABEBEBE8585855656565A5A5A7F7F7FDFDFDFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCE4E4E4B0B0B07A7A7A6A6A6AD8D8D8FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFAE7E7E7ACACAC5959594B4B4B4E4E4E5050505050505050505050504F4F4F 535353737373BEBEBEE6E6E6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFAFAFA C9C9C98F8F8F7474746363635656565555556A6A6A9B9B9BCFCFCFF2F2F2FEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFF7EEFEE9D2F9DFB8F6E1BAFBF2E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFFBF8F4D9EDE4B3F1EAC5FDFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF4F4F1CFCFD68585D43333F77C7CFEDEDEFFF7F7FFFEFEFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFDDDEFF9394FE 4E4EFA7272E5CBCBD8EFEFEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE1E1E1 C1C1C1A3A3A38686866C6C6C5959595555555F5F5F6D6D6D7D7D7DACACACDEDEDEF5F5F5FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDBDBDBA4A4A4727272777777E6E6E6FEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFBFBEEEEEEC2C2C28E8E8E7171716565655757574E4E4E4F4F4F656565818181 9C9C9CC2C2C2EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8 DBDBDBA0A0A07F7F7F666666555555565656666666939393C9C9C9ECECECFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFFFFEEF8F7D7ECEBC0EDE2C0 F5E1D2F0E6DBE7E7E2D9D8E8AFC9C98BBEADADC8D7CECDFDD3CAFFD6CEFFDFDDFFEBE5FBF6ECF2 F9F6EBD9D18EB5A72CC5BB52E5E4A5E9E9AEE7E7ADE8E8B5F3F3D7FEFEF9FFFFFFFFFFFFFBFEFB D0F0D0A6E2A6D1F1D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDE0E0E0E7E7E7F3F3F3FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFFE3E3FF7D7DFF3939FF9E9EFFFEFEFAEBEBEBF2F2F2 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFE7E7FF 9F9FFF7070FF6262FFB8B8FFF8F8FFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE4D576D4C666E7D879ECDD7FE2D376EFE084EBDC81E5D67BE3D37BE7D87F EBDB83E5D77CE0D375E2D97FDFD685EFE9956D65208D8645DBD484CBC470DDD67DD5CD6ADFD886 C8C07E4B4200BFB66BE1D988E3D982E7DC82E7DC80E1D477E1D179E8D880E3D57CE0D57CECE289 F0E78CEBE288EFE68CF7EE92F7EE90E9E07FECE482F7EF8DF9F28FFBF293F5EC92F1E78EF3E990 F1E78EEDE489F1E88DF5EC8FE9E083E3DA7DE8DF80EFE688F6ED91F6EC94E3D981E0D67FE9DF88 ECE289ECE288E6DD80E5DC7CE4DC7AE4DC77F6EE89EAD98FFFF1A9E1D674F3EC82F2EB92B6AD6E 1C13004F4629F7F3BEF5F3B6E7E6A7F5F2B6E3DE96D9D483CEC974DCD885E5E197A29F5C413D0D 1A1800BFBD7BE7E5AF2C2904120E06201F06969B50EFF3A2BBBB7F362F11160E00C8C288E5DF95 E1D994FFFEC262581AA1994BF9F5A3E3DA919F906F0A00009A8D6DFBF3C21B140068633ADDDC99 E3E0A655502C4E490BE8E491E3DA82F6E689F1D97CD7B95FDEBA66D7AF5EFDE693F7D077FEE485 FCDC7DD9B762E8CA78FFEC97EADC86E6E08ADFDD86E8E38DFFF4A0EBD484FBD98DF3C97FCCAD5C CDB35BFDE98AFFE797EBCE972217000B09009B9862FFFDB8F1DB90DECD81E2DB8FF4E392FFE68D EFD774CCB65CE3CE8BD0BE942011002C2502BDBA79D8D288E8DD97C1B372A89C53AAA154D9D082 CEC576D2C778FDF2A2EDE18FECE08EE0D380DFD07CF9EA97FAEC9AEFE08FF0E191E5DA88EAE18E F3EC9BD7D184918C44CBC886817F448F8E58D7D6A654512C95917116140073734D40401A262716 92906ADEDCABEBE9A8655E18777036F8EEA1ECE78BE5E28ECDC58F11030082774CF4EEA2F6F295 E6E189E8E293E1DC8BFDF8ADE5DE997C7835C6C281F1EEABEEE9A7868144251F00A6A063FFFFC5 EEE8A5C5C176CFCC7BEAE490EEE892E9E38BE7E187E8E287EBE589E7E287EBE58AECE68FEAE38F EEE695EEE897F3EFA2E8E698E4E192E5E190DFDC89DED987EBE591E4DD8CE2D98AF0E499DED389 E7DD93E4DC91EEE699E9E294E9E294D5CE7EC9C272DBD484DFD887D4CD7BD9D37FE6E08DE9E48A EEEA8CF4F29EDCDE96EEEFB2BEC389393E03CBCE89E7E79AE3DD8CEBDF8EEADC8BF1E694F2E797 DED385D6CB81E1D58EFAE9A8F2DEA1BCA26B5E3F0E7F5A26936A377C4C19722F05974F269C5929 DA9E69FFD395FFDC98FFE99DFFED9CF9EE9AEBE893DADC88D0D380D0CA82C8B772B39652C7A15C 8B621A957225FFE998DACB76D7D078DFDD86EBEB94DED6972A22152C3413E2EED0A3A78F221704 15040466603547502E000A001B1E09A09581817D68464532100C042C2B0E43461F484D1DE0DDA5 FFF0B7FFE3A9F6B477DB8E4FFFD999FFC684F6B777E5AA6AB97D3FA87133946225B18447BA9254 CEAD6CF0D290FFECABFFEEADFFEBACFFEAA7F8E39EFCEBA3F2E89DF1E89FECE39DF1E7A4F1E6A8 F3E8ADF9ECB5F4EBAFF2EAABF6EDAEF7F0ADEFE8A2EBE49EF7F0AAFCF5B0F7F0ABF7F0ACF8F0AC E4DD99EDE8A6F1ECABF7F1B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FEFEFECFCFCF7F7F7F3535350C0C0C131313444444CFCFCFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBD6D6D68A8A8A3F3F3F2B2B2BC7C7C7FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F8DBDBDB8585850E0F0E0404041818183232323636363131312F2F2F 2E2E2E323232575757AEAEAEDFDFDFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E9E9E9 C5C5C58D8E8D5858584A4B4A4343433535352525252323235050508F8F8FE2E2E2FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBF2E2F6E1B9F9DEB6FFE9D2FFF6EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7E4EBECBBF0EBC1FEF4E7FFFBF7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F3CECEDC8484DB3434F88282FEE6E6FFFAFAFFFEFEFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFECECFF 9898FF4040FB6363E4C7C7D6EEEEEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8 C3C3C38787875E5E5E4545453535352F2F2F3131313838383B3B3B3838386262629A9A9ACFCFCF EDEDEDFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8CACACA7B7B7B3535353D3D3DDADADAFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F8DEDEDE9E9E9E5757573B3B3B3939392C2C2C222222232323303030 4242425252527E7E7EBABABAE8E8E8FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCEBEBEB C9C9C99B9B9B6565655151514646463636362B2B2B2C2C2C4B4B4B898989D1D1D1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAEFF5F4DCFCF4D3F7EFC4ECE8B8 F0E4C6FEE9E6FFF7F8FFFFFFFFFFFFD4F4D1A5E3A4C4E3D0E5E8FBEAEAFFF1F2FFFFFFFFFFFFFF FFFFFDFFFBF8F5D59BE8B03AF2CE76FBF7D5EFF0C8E4E4AFE5E5B1ECECC4F4F3DBFBF3E4FFF8F0 FCFCF7D0F0D1A5E1A5D0F0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5FF8B8BFF3737FF9191FFEEEEFAEAEAEE F3F3F3FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FF D1D1FF6666FF6868FF9494FFD5D5FFFBFBFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE1D372DBCD6CDDCE6FE3D374EADB7CE4D578EADB80E8D97EDFD075 DFD075E7D77FE9DA85DBCE70DBD278E1D888EDE88F958E44797136DCD489ADA555E5DE89E7E07C E1DA86E9E29C5E550DADA559ECE493DCD27BEAE086E9DD83E0D377DDCE73E5D67BEBDC83E4D881 E5DC85EDE38CEAE088E6DD83F4EB8FFBF296F3EB8BEEE684EDE583F4EC89FEF694F1E88EF3E990 F8EE95F5EB92F1E88DF2E98EECE386EFE689EDE487ECE384E9E081E5DC7FEAE186E9DF85EDE38A EFE48CE9DF86F0E78DECE387E3DA7CE1D877E2DA76EBE27FF1E297F1E198EADF80E2DB7BF9F3A2 443B18584F36DBD39DE6E29BE6E292E4DF94D2CC88DED48DE0D885D8D477D7D379474210171200 39340EC4C283EDECADA9A87034300CCAC7A3C6C799EEF3B4EAEEAAFFFFCE494619393617CEC991 E3DD9EECE7AC837A402D2304DBD38ED6D086E0D998392C1D0C000053472E5952332F2A01C8C484 E1DF97BBB57E150B00C2B979EFE591E3D67DF2E183DDC86AF2D77DF6D581AD8737BF9444F3C773 FAD277ECC266F7D682F3D381F2DA86EBDC89DDD682E6E18DDDD784EEE291F6E394F7DC8FF6D387 FCE497D6B763D2A749F9D589997748291906191500CCC88BFCF0A4F3DD91E2D388E7E293E7D382 FFE58EE9CC71D5B962F1DB91FFF0B7665D2E050400444514F6F2B7F1E4A7F8ECACEBE094DCD383 E7DE8FD4CB7CCDC273D8CD7DE4D787F6E999F5E898F5E595FCEE9FEFE292F2E899FFF5A6F1E997 E6DF8BEFE897EFEA9AE3DF95928F4AC6C2848A864E847F4DDEDAB52320041E1D00767845919266 0E0D007B795BE0DDB166632B6E6825FCF8B0E9DE9BFBF3A89F96592318008E8551F0EDA4EAE39B E7E091E3DE84EEE890ECE39DE2D991E1DB8FD6D490F2EDB4AFA977433C1658512BCEC884F2F1A2 ECEA92E0DC82E6E18EFAF5A9EBE496EEE692ECE48EE9E289E8E186E8E186E9E287EEE78DEFE88F EDE591F3EB98F7EF9FEDE697EDE898EDE897E6E08FE2DD8AECE692EAE392DED787D9D083E6DD94 E7DD96EAE19AB4AC62CEC67BD9D186DED789CCC577C4BD6FD7D080D9D281C6BF6ED9D281EBE493 DFDA82E1E082F0F19EE9EBA5FCFFC7C6CA960E1100C0C185E8E59FD7CB81E9D689F3D98EE8C67E FBDB94FFE19DF9DB9970541E907647957D467F6833230C00422A00957D4986703C826F3BB1A16A B2A266E2D291FCF4ADEDDC8FF0E191EBDE8CEAE18FEAE392E3DD8CD3D686C7D787CDD587E1DB8E D7C478B29A4E937B2CF0DF8EF3E895E4DF8ADEDA87E2DE8DF8F0B7B1A07F0500005B5947FCEDDC CFAE9AA58260FAE0B59994640708003F361EE2D0CCCBBAACFFFFEAD9C9B27F765B28300D627943 DDEFAEEFEAA8FEDC9CD4A161B17734FCE098FDEFA2EDE599F6EBA1FFECA8F9E8A7EAC98CD5A76D C48650AE6B36B6703BC77D48BF8C53DBC485FFEDACFFF5B1FCF3AAFDE69DFCE49AF6DF98F8E5A0 EDDE9DEBDDA1F6EBB0F6EDB0F1E9AAF3EBACFEF6B6FAF2B2ECE4A3EEE7A4F8F1ADF9F2AEF6EFAB F3ECA8E7DF9EF0EAB2F4ECB8F8F1BCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFBEEEEEEA6A6A64343431111111E1E1E2525254A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDADADA9797975B5B5B4E4E4ED0D0D0FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8DDDDDD8888881B1B1B2C2D2C636463ABABABB6B6B6A9A9A9 A3A3A3A3A3A3A5A5A5B2B2B2D3D3D3ECECECFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE6E6E6 B7B7B75858584D4E4D6262628D8D8DA6A6A6A2A2A27A7A7A363636202020393939C4C4C4F8F8F8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F3DAE8E3AEEEE9C1FDF9F1FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF2FCFADCFCEEC7FDE5C6FEF2E5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FCDCDCF79393F73737FD8D8DFEF7F7FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFF ECECFF9898FE4444FD7979F9E7E7F6FDFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F5F5A7A7A75858583D3D3D4949496767678B8B8B9D9D9D9191917171713D3D3D2525252C2C2C 848484C9C9C9F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CECECE8A8A8A5353535E5E5EE0E0E0FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6D1D1D19999996666666A6A6A868686888888868686858585 6E6E6E4E4E4E232323303030676767B3B3B3F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEFEFEF BABABA6B6B6B3E3E3E575757808080A6A6A6A8A8A88787875858582828283A3A3AA6A6A6FFFFFF FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF9F0F0CFE6E2A9F5DFB1FDE8CC FCF5E8FCFCF8FFFBFBFFFDFDFFFFFFFFFFFFD2F0D2A7E2A8CDEDD0F4F8F8FBFBFFFCFCFFFFFFFF FFFFFFFFFAF5FFE7D1F1CF85E2BE48ECD88CFCFAEDFDFDF8FBFBF3FAFAF1EEEFCDE5E2AAF5DEB2 FEE8CFF7F4E8CFEFD0A9E3A9D3F1D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4FF9797FF4646FF8080FEC1C1F1 C1C1CDDDDDDEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBFE E6E6FEB2B2FF3333FF6464FFC1C1FFF0F0FFFDFDFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3C564E4D675DED06FD4C666EADB7CE1D275E5D679EFE083 EDDE83E3D478E3D37DEBDB8AE2D579DCD379DFD587E4DF83B1AA61675D29D8D0879D9548D9D081 E1D974DDD77FF3ECA66D651FA1984FF1E997E1D682ECE188ECE086E9DC80E5D679E5D679EBDD82 EBDF89E9DE8AF1E792EEE48FE8DE86F6ED92F1E88CF8EF91F5EC8DEDE683EEE784F5EC8DF3EA90 F7ED94FFF59CFBF098F7EE93F9F095F4EB8EEDE487E4DB7EE8DF80EEE586ECE484ECE482E1D879 E7DE82F1E88DEEE48BEEE48BEAE186E9E082E7DF7DE5DD7ADED674E3D983EADE8FE8DE8DF1E99E 746C36231B00BFB980BBB570D7D37FE7E287E2D982E8DD8EE9DD95D7D07BDBD777ECE78B958F45 6F6932ACA973E9E8A9EBEAA97E7D4A181500E0DDBEFFFFD9E6E6BFDDDEB376763E171702C3C281 E1DEA3FFFFCB9D975E292200BFB882F5EFB6FFFCBE4A46191B10000800001009001E1900C8C47C E9E4A4EAE79B716B393D3015F4E3A1ECDB86F5E48BD7C768DCCA6BFDE88CF5DC88EDCD7FBC9244 D9A656C18933EFBE65FFF29FF7DA88EED581FDEA99EDE18EF5EB9BF6EC9DE0D384978637D8C173 FFEB9CFCE194FAD585F3CF739B6820B68D672813042C2605E9E4A3F6E494F4DE92E8D98EE0DC8A FBEA95F2D37EDDBA68F2CF7DF8DE8CF4E599CECA8C2025000B0F00848053FEF2BFF0E1A1F7EC9E E8E18FDBD282E6DE8DFEF4A3E7DC8CCEC173DCCF81EBDD8FE5D588F3E396FAEDA2F2EAA0FAF2A6 F1EB9BE8E291F3EE9AECE795DDD78AF7F0A9A8A161A59F63C7C08A46422736340DCCCB99707241 2D2E07111000403D20636032737231E9E397E4DF9DFFFCCD96895D1D1300B2AD57FFFFAAE9E38B E2DC8CF3EBA0E9E193E4DE8AE8E28BDFD78FEEE6A8F8F5B6A19E651310008C8555E4E0A4DDDB8F DAD87EEFED89E8E485DCD581FDF6AEE8E095EDE592EFE892F0E991EBE48AE5DE83E9E287F0E98E EDE68DEAE28CF0E893F4EC99F1E996F2EA97EFE995EEE693EFE895F3EB98E9E291E7E092E5DD93 ECE39EF7EFABEEE5A0E8E097E9E196E7DF94ECE499DDD688DAD385DED786E0D989CCC575D8D180 E7E090DCD77FF1ED90E9E697CFCF8DE3E3AFE4E3B7110F00AFA978EFDFA2E8CF8DFEE8A3FFEAA4 FDC485F5B679B67B42A8763B2E07004B2E14BBA672E6DBA75A5627101200595E23B8C0865F632D 373B066E6F33A5A462E5E199DED88AF4EF9CF3EE9CF2ED9BEBE998E6E595DDE594D9EF9DD2E090 EFEDA0F5E599D8BE74866D21F1DE91EFE293D6CE7ED9D282E8E194F0ECB4A3A580000400020801 2420066F5833B79A68F4E5A7DCE29F2231110D130C4D4C4104080361633BF6F2D0FAE3BDD5C497 CAC68BF9F1B2E6D08EFFE8A3C7A25AC4B05DFEFBA5F2E89A8D82398D7E37F3E19FFDE9A9FCE0A1 FFE7ABFFECAEFDE3A6F6CB8CD19F5EA77C3C987839A98747C6A360FAD38DFFE9A1FFEEA6FEE19A FFE29AFFEBA6FFF3B2F9F0B0F5EDAFF6EEB0F7EFB0FBF3B5FCF4B6F7EFB0EFE7A8F5EDACF8F0AF F6EFABF8F1ADF7F0AAFCF8B1F6F2ACEFEBA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF4F4F4BFBFBF7E7E7E4445442526252424242626264A4A4AD1D1D1FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFDFDFDECECECCACACAACACACA6A6A6E7E7E7FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8DDDDDD8787871F1F1F4B4B4B989998D8D8D8E6E6E6 DFDFDFDBDBDBDBDBDBDCDCDCE1E1E1ECECECF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3 BDBDBD7C7C7C383838606160A6A6A6CDCDCDDBDBDBDADADABFBFBF8282823C3C3C1F1F1F969696 D8D8D8F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFCFFFFF4F9F3D3F1E3B5F5EBCEFEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFDEEF6EECAF0E2B3F8F1DAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F7D3D3E68A8AE53636FA8F8FFEFBFBFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFFF9F9FFA4A4FF4646FC6B6BEBD2D2E1F4F4F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8F8F8C6C6C6959595949494A1A1A1B5B5B5CCCCCCD8D8D8D0D0D0B8B8B88A8A8A434343 1414144F4F4FA0A0A0E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE6E6E6C4C4C4A8A8A8AEAEAEEFEFEF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAE7E7E7CBCBCBB1B1B1B7B7B7C8C8C8CBCBCBCACACA CACACABBBBBB9A9A9A424242232323404040929292EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 C2C2C27D7D7D4646464949499B9B9BC3C3C3DBDBDBDEDEDEC6C6C69999994444442525257D7D7D D9D9D9F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFAF0EFEFCEEDEDBFEFEDBCF9EDCE FFF3E5FFFBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1F8E1C1EFC1C8ECC8E0F1E0F5FAF5FFFFFF FFFFFFFFFFFEFCF7EFF2D6ADE6C87EE0CB6DEDE4ADFDFCF5FFFFFFFFFFFFFFFFFEF7F7E6F0ECCA FBE1BCEFDBB6D3DBB5C5E1BCD0EECEEAF8EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FFAAAAFF6161FF8080FE B1B1F7D2D2E2EBEBECFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F6 E8E8F0C9C9F79797FF3E3EFF7C7CFFDCDCFFFCFCFFFEFEFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBCD6CE6D877E5D776E5D777D8C96AE9DA7DE3D476 F1E285F2E387E2D378DECE78E8D78BEFE286DED57CDBD184DDD87CB0A961403609CBC27CB4AB60 D7CE80E4DC77E0DA82F4EDA46F6729807735EAE190E6DB87ECE188EEE388F2E589EADB7EDECF72 E0D375E7DB87EDE291F4E998F5EA98F5EB95FAF097ECE388ECE388EFE688FAF192FAF290EDE485 F5EB91F9EF96FDF39AF6EB93F2E98EF7EE92F8EF92F3EA8DEBE285F0E788EAE182DFD774E5DD79 DFD775E9E081F2E98EEEE48BE2D87FE1D77EE7DE83EAE082EDE583E7DF7DE7DF7CDAD37AFBF4B2 A69D68171005B3AE708C8840C3BF6BC8C268EEE487E3D877E2D77AE5D88EDAD07BE7E27FDFD978 FFFEB3B0A973726B37E8E6A8F8F7B47C7B490603001010003132124947382E2C1D0C0E04A5A85A F9FCAFEEEDAE726B3B302B009E995DFFFEC7E0DCAB58552E232105A099716C643F57531CC9C67B F6F2AADAD495C7C172443D01988B57F8E098EDD381D8C369C3B354ECDE7DF4E588EFD883FFE394 FFD78BD49B4DBA7928C18632DFB965FFEC99F3D887F3DC8DF4E295EFE193EEE294F8EC9EC9BD6D E7D885F5E491F6DC8FFFEFA3CA933AAF7A37A77A581E05003F3511F2EBA4FCEB96EFD88AE9D98E E5E18DF9E58FE2C16FEFCA7DFFEA9BFEE893F3E58CD7D98CA3AB730F1605131000A39769F7E8A8 DDD282E7DF8AF3EB99ECE492EEE494E8DD8DF3E698EBDE91ECDE92D6C67CD2C177D2C67ECECA82 E5E096F3EEA1EEEA98E9E490E4DF8CF1EC9CE0D990EEE6A29B9253A297623F3B0CB2B180ABAB76 C2C2987F7D6316120B020000504F1CEFEF9AE9E491F9F2B7998869130500ADA463F6F09ADED97A ECE786E1DC7DE7E18AECE594E3DC8DEEE796F2E9A4EAE1A785814D312E07ABA96AF7F5B2E2E092 C3C26BEBEA90E9E58CF1EC96F4ED9DE6DD93ECE499E9E090EEE593F0E893EBE48CE5DD83E7DF84 EFE88DF1EA90EDE58DEAE28DE5DC88F6EB96F1E78FE7DD88E6DE88E8E08ADDD582DED786E7E093 E2DB92D8D18EF0E9A9E6DF9DEFE79DE7E094E6DE93F0E89DEAE395EFE89AE2DB8BEBE494E4DD8D D9D281E3DC8BF3ED97EBE48BE7DE93E3DDA0E6E0B3D1CCA5231A088A7A53FFF9C5F9DEA3DDB173 BC8647965A1C925419A56C35D8AC7689632D684C2BFEF9C6F6F3C07978451D24015F6832A4AF7B 696E3E26280272713AA6A265DDD791E4DC90E8DF90EBE291EDE796EBE798E9E598E3E599DCE598 EEEFA3E3D58CFAE49EFFE19AAD8E47EED78DF1E497E5DD91E9E397EAE49BE8E7AE9FA87E000400 081100766D48472A0D89682FFAE599F5F8AB88985A1A2216000000000D001D2A09D4C99AF5DBAB F0DEA7F0E7A5E6DA91EFD78FFBD088A27A2EE2CE78F1ED95E5DF94BFB973C8C17DFDF5B3E8DE9E F7ECAAF3E4A3FBEAA8F9E9A2F8E69BF0DF91EDD68DF2D696CAA7679C702DA3702CC28C44DFA960 F0C37AFFEBA4FFEEA8F8E9A3FFF8B5FAF2B4FAF2B5F7EFB2F6EEB1FBF3B6FAF2B5FEF6B8FCF4B5 F9F1B0F7F0ACF7F0ABFAF3ADF9F4AEF4F0AAEDE9A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9E2E2E2898A896060606262625354532F2F2F2828284A4A4AD1D1D1FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF4F4F4EBEBEBE5E5E5E1E1E1DFDFDF DEDEDEE1E1E1E4E4E4E9E9E9F0F0F0F7F7F7FCFCFCF9F9F9EDEDEDE2E2E2DEDEDEF6F6F6FEFEFE FFFFFFFFFFFFFCFCFCF4F4F4EAEAEAE0E0E0ECECECF7F7F7EEEEEEE5E5E5DFDFDFDEDEDEE2E2E2 E6E6E6EEEEEEFBFBFBFFFFFFFFFFFFFFFFFFF8F8F8DDDDDD868686222222636363C0C0C0EEEEEE FDFDFDFEFEFEFDFDFDFDFDFDFDFDFDFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E1E1E18F8F8F4646463B3B3B8C8C8CEBEBEBFFFFFFFEFEFEFCFCFCF3F3F3CBCBCB616161171717 686868B4B4B4F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEF9FBFCDFFCF1CBFDE6C5FFEEDDFFFDFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF1EECEE7E2ABF3F1D2 FFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C5C5D57B7BD33333F78F8FFE FBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFAFAFFF4747FB5C5CDFBBBBCEE9E9E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDECECECE1E1E1F3F3F3FAFAFAFCFCFCFDFDFDFDFDFDFCFCFCF5F5F5DBDBDB 7474741616162929297A7A7AD9D9D9FFFFFFFFFFFFFCFCFCF7F7F7EEEEEEE8E8E8E2E2E2DEDEDE DEDEDEE0E0E0E3E3E3E7E7E7EEEEEEF7F7F7FDFDFDFFFFFFFEFEFEF7F7F7EBEBEBE0E0E0E1E1E1 F9F9F9FFFFFFFDFDFDF6F6F6EBEBEBE2E2E2E9E9E9F6F6F6EFEFEFE4E4E4DFDFDFDFDFDFE2E2E2 E7E7E7EFEFEFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFBFBFBFCFCFCFCFCFCFDFDFD FDFDFDFDFDFDFDFDFDE5E5E57070702B2B2B2C2C2C7D7D7DEDEDEDFFFFFFFFFFFFFFFFFFFDFDFD E9E9E98F8F8F4747473E3E3E747474E4E4E4FDFDFDFDFDFDFFFFFFF3F3F3D3D3D36B6B6B212121 5A5A5AAEAEAEEEEEEEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFBFBF4F3F3DAE5E5ABEFEFBDFDFDDE FFFEF4FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2FFF2DEFBDEC1E8C1C5E5C5E6F5E6 FEFFFEFFFFFFFFFFFEFAF4E9E5C48BDEC279E1D996F0F1CEFDFDF9FFFFFFFFFFFFFFFFFFFFFFFE FEFBF6FFEBD3DDD4A6AFC385BCD1A3F5F5E9FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFBEBEFF7D7DFF 8080FFA1A1FCE2E2F5F8F8F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA F1F1EED8D8E6A8A8F37A7AFF5D5DFF9E9EFFEFEFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2C564E0D271E0D271ECDD7EE5D677EBDC7C E1D275EBDC7FECDD81E3D479E2D27FDECD81F6EB8EE3DA80E0D68AF0EB8EBCB46C2D2201BBB26D C0B76EC6BC72DED873D6CF77F0E9A1756D35665E21E2DA8BD7CE7BD3C971DCD176EADF80EBDC7E DFD072E7D97BE5D984F3E996F5EB98F4EA95F8EE97F3E990EDE487F3EC8EEEE788EFE888F8F18F F9F192EEE48AF5EB92F9EF96F3E990F2E88FF9F095F1E88CE8DE83E3DA7EF0E789E9E082DAD16F E8DF7AEEE784F5EC8DEEE78CE4DC83E8DF87EEE68EECE58AE7E080F0E785F2E986E6E07AF8F49E E6DDA522160991895EE0DC99A7A54FC7C266B8B156DBD076F1E581EADC7AE9DC8FEDE28DDCD674 EFE98DDDD68CD6CF964E4718DCD89BF0F0AAC0BF821B1800000000040400000000221D11C7C698 FAFFAEE3E79156562D201B00999460F9F4B4A29C622F2A18342F0DBEBB7AF8F4BCE6E3A9E8E69A E7E495D6D088EDE4A59E96466B641CE9DD94FBE094D8BD6ABFA950F6EA8DE5D878E4D67AF3E08A FFE594F9D387F9CA7DFBC979B47726A07625D8B565F8D889FCE597F9E194EDD98DE3D386F0E495 FAEF9FFFF7A5EEE492FDE69BD9A961A57118FFD5916F46261802005F5432FCF2A9FEF098F7DD90 FCF0A5ECE790DFCB73E1C06DFFE79DFBDE91F9E08AFBEF8FE3E591E5EDB48A906E110D001D1004 897B43ECE297E8E191EEE797EBE393EFE596E2D787EFE294EEE193F1E399F7EAA1FAEDA5E5DA93 D9D58FD4D189D0CC82CFCB7BDEDA83E4DF8AF1EC9DF5ECA5F7EDAEF3E9AD2015005D582194935A B3B27CBFBE97A5A38D5450430000007F7F3DECEE94F7F3A4897E4C2D1C09BBAF76FFF6B4E4DA97 ECE592E3DD7CEBE67EE7E27CEDE68DECE49BF8EDB1C7BD783F371F666131D4D096E7E69CDCDE84 DADB7DD9DA7DE6E390E3DD93E2DA92E4DB91F5ED9FE6DC8DE8DD8DEADD8EEADF8CE8DE87E7DC83 E9DF85EDE489EBE088E7DC85EBE18CEFE490F0E28DEDE087E4D781E5DB85EDE38FE0D886E1D98C E9E399D5CE88B5AE6CD8D293D7D091DCD38BE5DB92EBE399EEE79EE5DF94F2EEA2E0DA8ECAC678 E6DF90E9E193E1D989F2E793F5E891F8E8A56F612BD9CA9FF3ECC963504249300BBB9B68926930 815016A06A2ED2A464E4BE7EF7D79AFFF7BDDAC290332201E8DDADEAE2B358542A4D4919ABAA7B 7E7B4E635D329D95676D6432685D23CABD7DE4D48FF8E69FF0E196F2E69AF7EDA4EEE69DE3DA92 E5D994F5E39FFEE7A3FCE3A0D9B26DB38E48F0D58CF1E299E9E49BE6E59FE2E1A0E4E3AAE7E8B8 61663F050200D8C299DFB07DB78640FEE28DF4EB94FDFFC2B6BB980A0400263014BDC48EFAF0BD FEEBB3F0EAA7DDE596F5F5A5FBE394E1AE61AE7325EFC573F9E292E7E49AF4F6AEF4F6B1ECEDA9 E5E5A1EEEFAAEDEEA8EEEFA6E3E597E0E290E6E994F2EB9DFFEAA7ECCD8BF2CD89F2D793DEA862 BB843EB17F38BD934CD4B46EF7DF9AFFFEB9FEF8B8FEF5B8FCF1B4FDF4B6FFFCBEFCF4B8FCF3B4 F8F0B0F8F0AFFCF5AFFDF7B0FEF8B3FBF4B8FBF4BAF9F3B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDEDEDEACACAC5555555F5F5FA5A5A5A3A4A35151513535354A4A4AD1D1D1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2CACACA9596957071705B5B5B 4A4A4A4545455757576D6E6D888988B0B0B0D6D6D6F0F0F0E5E5E5AFAFAF767676666666D7D7D7 FCFCFCFFFFFFFFFFFFF0F0F0C5C5C58C8C8C595959989898D8D8D8A4A4A46F6F6F4C4C4C484848 5D5E5D787978A3A4A3EFEFEFFFFFFFFFFFFFFFFFFFF8F8F8DDDDDD868686232323686868C8C8C8 F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD EEEEEEB9B9B95D5D5D2B2B2B767676BDBDBDF7F7F7FFFFFFFFFFFFFEFEFEF7F7F7D0D0D0646464 1111114949499C9C9CEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBF3EBEBBCEEEBBFFAF3E0FFFAF7FFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFAEDD8F7E1B7 FCF1CEFFFFEDFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEFABCBCF07172EF3030FC 8E8EFEFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFAFAFFF4848FD6767F4CDCDEFF2F2F7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4F4F48E8E8E2828281D1D1D696969D3D3D3FFFFFFFDFDFDF1F1F1D9D9D9A7A7A77F7F7F5F5F5F 4949494747475454546565657B7B7BA5A5A5D0D0D0F2F2F2FFFFFFFBFBFBDBDBDBA3A3A36E6E6E 737373E4E4E4FFFFFFF7F7F7CECECE929292636363888888D1D1D1A8A8A86B6B6B4949494B4B4B 5D5D5D7B7B7BACACACE5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF0F0F08484843B3B3B2E2E2E787878ECECECFFFFFFFFFFFFFFFFFF EDEDEDC5C5C55C5C5C333333696969B5B5B5F3F3F3FFFFFFFFFFFFFFFFFFF6F6F6D6D6D66E6E6E 1E1E1E4A4A4A999999E9E9E9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFBF3EDEECAE7E8B1F3F3C2FAFADC FFFFF5FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFCEFFCEFBBE7BBADE4AD D1F5D1F2FFF2FDFFFEFFFFFFFAF1E4E3B166E5BD6DF1E7B3FBFDE8FEFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFDF3FCE7CEE3B5A6C382BAC58BF8E4C9FFF5EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FFC9C9FF 8888FF6D6DFE7474F3B6B6D2E0E0E1FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 EBEBEBF2F2EBE2E2F58A8AFB4E4EFF8686FFC2C2FFF6F6FFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCC6ADCCC6AEBDB7BECDD7EE3D475 E7DA7CD4C76BECDF83E0D479D6C96FEBDF8BE5DA88E6DE7BE4DF7FE6DD8ADDD975C0B86B1C0E04 A59F57B1AA64BFB771E7E284D5D07AEAE39B8C854E474007EDE79DDED888C4BF64CEC765DED370 CEC05DE8D876F2E182F4E78BF2E88BF2E78BF7EE91F7EF90E9E381EEE986F9F592F8F490F7F38F FAF893F8F491F3EC93EDE68EF3EC94F5EE96F7F098ECE58AF8F197F8F198ECE58BEEE78DF4ED93 EDE384FBF08DF5EB8BE9E187E9E38DEAE594E5E290DAD883E7E386EAE782E3DF73EFE97EE1D88F F9F7C2655B30534A10EEE6A3E8E293BFBA66C1BC69BCB662EEE892DED87DD9D277E8DF93E9E18E EAE68DEDE7A1ECE99CE3E0994A4417D3CF8DF6F3A6F4F0A8C8C3727670226D69268F8A52E4DFA7 F8F3B3E6E2993430042A2500BEB879FCFABEDCD4941B1300635927DFD58CFBF3A5DFD98EE2DB93 E3DD90D3CD81E2DC90DFD78DDCD182F0E38FF3E393DECC7AD3BF6BE7D67FEBDC81F5E68AEADB7E EEDC83DDC671EED480FFE693FFE594FFE498BC8B48A2702CCFA159FFDE91FFD989F6D481FDE28F F8E596E9DD90F6F2A7D8DB90E9D5939E621FE5BF60FFFCA9776C3B0000005D4F2DFFFFBCFBDE8C F2D587FFEA9AEAE282C0B053FFF096F7E18BFFEB92FBEB91EDE28AF3EC9EDDD899EDE8B98E8863 2219001B11004E4D19D4D49AF2F1B0E2DC97E5DD91F0E595F8EC9AEDE090F0E394F7EB9EFAF0A5 F9EFA7F2E8A3F0E7A2EDE4A2D0C87EB3AF4BC0BB5FD4CB88DCD39EF6EBC252471C827937E9E1A0 968D5668622F65632C7477421F2101020400575A28F8F7BC716B371F1403C3B77FF3E79CF7EC9A EDE290E5DB84EBE389ECE58BE9E48DE1DA8BEAE39DDCD4952E2808898343F9F1B1E5DD98DED88B EBE996F0EE97DFDD86D8D783EEE998F3EB9EEFE49AEFE196F0E397F3E697EDDD8FE7DA87F5E993 EEE088E8DB82E9DE85E5D782E0D17EE3D785EFDF8FF6E691EEDE8AE4D784FBF0A1E8DC92DFD78F D6CF8BE6DE9ED2C98BB5AD6EBAB173C7BD7FD2BE83DFCD90EADF9FE5E2A0D8DD98D3DA94E0E79E E2E59CF0EBA2F4EAA2F3E29BF8E796EAD885E2C8A02F1200E0C995F5D9B24B2D1B15000079601A B89F5ADBC184FFEAACFEEAAAF6E4A2DACB8EFDF2BAD8D29E1D1900E3E1B9EAE9C0939269212000 928F645C592D787542B5B27C88854E4E4911C0BB82D3CD92EAE2A4E5DD9DEBE4A0DDD691E4DE97 E6DB99F8E2A9E8DC9FEBE39FFFF4ABDBBC73966F24DFBB6EF9E59CE8E0A2EDEAB9E9E1BDEEE8B1 F7F5ABF3EDB3514625331600814218E1B169FFEC8EF4E687CAD082D7D9AB2F1E191712025E5C42 5546288A804FB9BD7BEAF6B1F8F2B4F6DC94EDB45CBB7D1EF9CF81F5DC9FFEF8AEF5F2A5F7F3A9 F0ECA2E4E096E3DF95EAE79BF1EEA1E6E394E6E394EBE897E9E796E5E392D6D484E8E096FCEFA7 FFF0ADFFF6B3F7D797D8B06F9B6C2A8B5614D9A361FDDA92FEF7AAFFF6ADFBE59EFEEAA3F8E7A1 F9EFA7F0E8A1F3EEA7FDF9B2FFFAB4FFFFBAF7F2ABF2EEA7F7F3ACFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF5F5F5B2B2B26B6B6B515151848484CECECEC2C3C25F605F3A3B3A4A4A4AD1D1D1 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5CACACA9191915A5B5A474747 4A4A4A464646464646555555585858626262929292C7C7C7EBEBEBDCDCDC919191454545303030 C8C8C8FBFBFBFFFFFFFFFFFFECECECB2B2B26565651D1D1D5252529494948787876D6D6D575757 5858585F5F5F565756646564B2B3B2DFDFDFFBFBFBFFFFFFF8F8F8DDDDDD8787871D1D1D414141 8080809D9D9DA7A7A7A9A9A9AEAEAEBFBFBFD9D9D9F1F1F1FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FAFAFAD5D5D58E8E8E454545343434ADADADE3E3E3FEFEFEFFFFFFFFFFFFFFFFFFF9F9F9D1D1D1 6464641212124E4E4EA0A0A0EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E4E4ADE8E8B9F9F8EAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF4E9 FDEACFF8EEC7F5F6D0FDFDF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E6FEA8A8FB6364FA 4242FC9A9AFDFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFE4747FE6161FDC1C1FDE5E5FEF7F7FFFDFDFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF1F1F18A8A8A2424241D1D1D6B6B6BD4D4D4FFFFFFF6F6F6CDCDCD9A9A9A676767545454 4C4C4C4545454747475252525858585D5D5D8A8A8AC0C0C0EEEEEEFFFFFFF9F9F9CECECE828282 3B3B3B424242DBDBDBFEFEFEF4F4F4BCBCBC6E6E6E2A2A2A4040408D8D8D8585856A6A6A555555 535353575757535353717171AFAFAFE4E4E4FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF7F7F7EBEBEBCCCCCC686868383838474747929292EFEFEFFFFFFFFFFFFF FFFFFFD5D5D59696963E3E3E3C3C3C959595E5E5E5FCFCFCFFFFFFFFFFFFFFFFFFF9F9F9D8D8D8 6E6E6E1F1F1F4D4D4D9D9D9DEAEAEAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAF5FBEFDBF0E4B8EDE4B0FBF9DC FFFEF1FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FDF8D4F0D4 BCEBBCBFEFBFD3F3D3EFF3EEFBF3EDFBE7CCE4B151E9C26CF9EFC8FFFFF9FFFFFEFFFFFFFFFFFF FFFFFFF5FAF5E5F4E4CFF3CFBFE8B8BBD7A5CED2A0EFDEB2FBF1DDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFF DBDBFFA0A0FF6868FE5C5CF5B8B8D9E4E4E6FCFCFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F6F6F4E4E4E4DADAE9BDBDFC7171FF4D4DFFAFAFFFE0E0FFFBFBFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8D975E3D371E5D575EADA7B EDDE7FEDE082E9DC7FE7DA7EE0D57CDDD279DED27EE4D989E2DD7BDFD979E1D986E1DD7AD6CE82 291B0D8B8440BEB674AFA867EAE68DD8D380E1D993999159413900EBE6A0DED98BE4DE86CDC764 D4CA65E1D471F6E585E4D176E1D374ECE181EFE585EDE382EDE584EAE482EBE583F3EF8DF1EE8C EFEC89F2F08DF3F091F4EE94F3EC94F7F098F5EE96F8F199EDE68EE9E28AF1EA92EFE890F3EC94 EFE890E9DE82E5D878EFE48AE9E18DF1EA9FE3DF99DDDA94F0EDA6F2EFA2DEDB84ECE78AF2EB8E FDF2BAA1956A322800D5CE88F3EE9EEBE692DCD785C7C270C3BE6DE6E18FE0DC85F1EC97D7CE84 D9D27EE0DA87E5E0A2E3E193D8D68A383105A6A160E6E393E9E198F2EB8DF2ED8EE9E396FDF7AB EDE79BF1EAA170692370682DD6CE87FFFFBEE1D996DED694BAB26FF5ED9EF6EB93D8CE7CE0D988 DCD585E0DA8DD3CD81E0D98ADCD281E3D482F4E38FDBC974C6B45FE6D780F5E58DF3E38BFAEA8E F3E488E3D278DDCB72EDDA84F8E590F2DE8DF6DC90FFDE9AE8C17DAF813AAE8034E4BC6BFFE290 FCDE8DF1D788F7E498ECDE96FFF7B09E7C3CD5A15BFFE985F1EC9191975E100D00584926DFC281 FEDC8AFBDD8EFCDC8ACBB657EBDA81DDCC77D8C771FFFFA8F7E992EFE391EAE193EEE39DF1EAAE FCF6C48A83571C160018180033340F9D9C62E6E19FFFFCB5EAE193F4E997F5E997F4E998F0E798 EAE495E9E195F1E49EEBE09FF1E6A1EBE392E1DC81F0EA95DDD38FE4DDB57B6D5532280FC0B972 CBC083D6CB95E8E0A5B4B1792A2B009BA06A1A1F0681825A8C88641B1400BAB171FCF4B0EFE494 DED37CFEF69FEBE28CE8DF8AEDE593EDE697ECE59BDAD38E5D581BB6B174FFFFC5F0E89DEEE699 E8E294ECE798E9E696DCD988CECC7AEBE494EEE595EADE90EFDE92F0E093E9DC8DEADB8CECDF8D E9DE88F4E691F6E991F5E993F7EA96F2E593ECE08FEADC8DEDDD8CEEDE8CE1D384EADF92E2D992 E0D995CDC888DCD797DAD393D7CD8EDED595DED492E0CF93D9CA8DDED596DCDB9AD6DB99DAE29D D4D791F4F4B0ECE09CF5E09EFDE0A0E8CC84FDECA1BFA182291001A68A4B7D5F2E573922130000 C1AA69FFF9B6F7EBA9F3EBA4F6ECA8CFC689D9D398DFDCA5F1EFBF333314676840ECEDC57E8053 100F00605D2E7674439F9E658281477C7B4254531B817F4785834BCDC890E4DFA4DFDC9CD6D18F E0DC95F1E6A4E4CD95E2DEA6EBECABDAD690FFF0A89B742CC29B50F3E29CF1EAAEC6C3992A1E0F 98925FECEB9CF2EAB0E1DBAACCB28BDB9A74D4A867FDEA91F4F09AC1C97F969B6E937F73584F44 2E271C2F2111241E0E6C7138DCE7A9F7EFBBFFE09FD8A046BF841FFFE093FFEFB6E9E198E8E296 EDE79AEEE89CF4EEA2FEF8ABEEE89CF2EBA0F0EA9DF0EA9DF2ECA1F1ED9DEDEB98EEEF9CEEEEA1 E6E39CEEE6A3F9ECADFDE9A9FFF3B5FCD594D39D5CBD813DB27A36C1904BDBB872F2E39AFFF6AC F2E297F7E9A0FFFBB3FAF3AAF4ECA5FAF9B2F1EEA6FEFAB1FAF5ADFCF7AFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF7F7F7DEDEDE8383833636366C6C6CB7B7B7E5E5E5C3C4C36061603A3B3A4A4A4A D1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB949594595A593E3E3E 5555558080809191919A9A9A9D9D9D8181816B6C6B959595C9C9C9EBEBEBDBDBDB8E8E8E3F3F3F 292929C7C7C7FBFBFBFFFFFFFFFFFFEBEBEBAFAFAF6161611212122525255454548D8D8DA9A9A9 B3B3B3BCBCBCA8A8A8656565393939646564AEAEAEF4F4F4FFFFFFF8F8F8DDDDDD8A8A8A1C1C1C 1616162929293232323434343535353C3C3C5D5D5D979797CFCFCFF3F3F3FDFDFDFFFFFFFFFFFF FFFFFFF8F8F8BBBBBB636463383838454545C3C3C3E9E9E9F1F1F1F2F2F2F2F2F2F1F1F1E9E9E9 C4C4C45F5F5F161616646464B1B1B1EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF0E3E3ABE8E8B8F8F9ECFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFDFCFBF6E9EDEBC0E7E7B1FAFAEEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFE9394FC 595AFA5A5AFAAAAAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1B1FE4949FE5555FEA9A9FED0D0FEEBEBFFFBFBFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF7F7F7DADADA7474741818182C2C2C7C7C7CD9D9D9FFFFFFEEEEEE9F9F9F5454543C3C3C 5656567D7D7D9191919999999C9C9C8D8D8D767676959595C2C2C2EEEEEEFFFFFFF9F9F9CCCCCC 7E7E7E3535353B3B3BDADADAFEFEFEF4F4F4BABABA6A6A6A2020201616164E4E4E818181AAAAAA B3B3B3ADADAD9999995C5C5C4747476D6D6DACACACF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FAFAFAF6F6F6F2F2F2EBEBEBD9D9D9BDBDBD9393933E3E3E3636366E6E6EBABABAF5F5F5FFFFFF FFFFFFFFFFFFBDBDBD6666662A2A2A484848AAAAAAF1F1F1F0F0F0F2F2F2F2F2F2F3F3F3E9E9E9 CACACA676767202020585858AAAAAAEDEDEDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFEF0DFFCE2C1FADFB8FAE6C5 FEFBF0FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F7FCF7DCF4DCB9E9B9B5E2B6DBE1D8ECE0CDF2D8A8DEB946E5CC72F7F2D6FFFFFFFDFDFCFBFDFB FAFDFAF8FDF8E0F0E0C2E3C3ABE2ACB9E8B9DBEED4EAE9C8E7E2ACF2F0D2FEFEFCFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFFEFEFFFBDBDFF6A6AFF4F4FFBCCCCF1F4F4F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFCFCFFFBFBFFFBFBFFFBFBFF FBFBFFEFEFF3D9D9E5B2B2EB8181FD6161FF6B6BFFD4D4FFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D26EE1D16FE2D272 E8D979F0E182EEE183E3D67AD4C76BDDD278E8DD83DDD17EDFD386DFD97BDBD579DDD583E1DC7F ECE39E50431D6F672BC6BE81A8A062E8E38EDDD787E5DC97ACA3632E2400D8D08EE4DD93E1D985 C7BE61D9CE6DE3D474E8D67BE8D37CDECF72F1E486F7EA8CEFE586EFE487F1E88BEAE286F0E98E F0EB8FF0EA8FF5F195F9F599F3EC94F7F098FBF49CF3EC94F7F098F3EC94F6EF97EBE48CE1DA82 E9E28AE8E189E8DD83E6DB80E2D8838D8436CBC582F8F1B9F9F3BDECE6B3EBE3AEFDF8BEFFFABB FFFDBDA0965E140A00A69D62ECE69DE6E18FE8E38FDFDA88CEC978CEC879E0DB89DBD683DED986 DFD689D2CB76D5D07CE5DE9DE8E69AE5E299231C0077723AEEEAA0EDE4A0E7E088E1DC82E9E294 E9E397E1DB8FE0DA90D1CB81FBF7ADF2EBA4DBD48CF3ECA6D7D08ACBC37EE5DE90ECE38EE8DF8C DDD685DDD687E9E393EEE798ECE493E5D785E6D682EAD882D8C56EEAD780FCEB94EBDA81EFDE84 F0DF84F3E386F5E48AE7D57EEBDA85F4E291F3E293F6E195FAE195FFE69AF9DE91D6B567AF8F3F B59344FBDA8DFEEDA0F7D488FFE8A0C4A35CAC8541FCDB92EDDE7AF5F79D7E86480000006D5C38 DAB97ADDB05FFFE99AEFC16EC9A54BF6DC8EDDCB81CEBC6FF7EA9BF1E491E8DC88F1E695F2EA9C F1E9A2E8DF9EF2EAB0A39D684645161211001B19015D5829E3DD97EAE093EADF8FF5EA97F5EA9A EFE797EDE698EDE597F1E49BECE19EF6EE9FFAF398F1E9A0F6EDA5F0E7A0E3D9B3302500D6CD8E EBE49EEDE2A9EBDFA9DDD7942E2903A8A77AFFFFD4676A3D1D1D0626220ED2CD93F8F0ABE1D791 E8DD90F1E694F0E493F7EF9DE4DC8AE6DD8DEFE89BB0AA5F494200D3CF8EEBE5A8F1E9A8DED688 E9E292EDE799ECE79BE9E59AE2DE93D7D489EFE79BEDE595EBE08FECDD8BEDE090E6DD8DE8DD8E F7ED9DF1E895EBE28BEFE58FF0E792F6EB99F5EA9AEAE192E6DB8CE7DB89F5E896EBDE90E5DE90 ECE69DEAE69FE4E19DE4E09CDCD793DFD894EAE29DECE49DCFC984BEBB76C8C782CACA85C2C17C CCC783D8CE8BF3E3A1F5D999FDE3A7FFDCA1E4C07FC0A7626E51302C140297833ED9C490D0B898 230D07A8965FFFF6B7DBCC88EADC90EDE3A0DDD69ED1CD97EFECBAC3C1930B0C000305004C4B2A C5C3928F8D5B4C4915504B1665632966652B8E8E5567652C8E8C53828148B2AD72CFCB8DC9C585 E2DD9ADCD891D5CB89B7A36B5A55198D9151D4D291D8C081B08C4BAF8D4AB9A764B6B378656638 06000082804EDCE0A0D0CE97444225A89667E8AF87D2AB71FCF0A5DCD68FBECC902E3A14281C12 6A6451ADA791D9CBB2D0C99ADBDFA6C5CE95E8E0B3EBCC92BF8E3BD6A746FFE899E3D195D9D18A E6DF96ECE69CE5DE95E4DD94EAE49AEEE79EEAE39AF1EBA1EEE89EEBE49CF5EB9EF4E494E7D98A E4D98FEBE29BF8EDABFEF3B4FBECABF2DD9CEBD08CF8D791FBDD97F8C487D99359A1682C9B7030 C6A663FBE9A4FDF8B4FCE7A1F8E9A2F9F1A8EEECA2F5F6ACF2EEA7F5ECA9F8EFACFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBEBEBACACAC6465643B3C3B989898E2E2E2F3F3F3C0C1C06162613B3C3B 4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E36162613B3C3B 545554909090C8C8C8DADADAE0E0E0DEDEDEC5C5C5AFB0AFC4C4C4E2E2E2F2F2F2DADADA8F8F8F 4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06262621515153232326E6E6EB8B8B8 E0E0E0F0F0F0F9F9F9DADADA7F7F7F3031302B2C2B888888EFEFEFFFFFFFF8F8F8DDDDDD969696 3838383030303F3F3F4949494545453A3A3A242424242424484848838383D1D1D1F0F0F0FEFEFE FFFFFFFFFFFFF6F6F6A2A2A23636361A1B1A2929296F6F6F818181818181808080818181808080 7D7D7D6A6A6A3434341717176C6C6CB7B7B7F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFBF2E3E3ABE7E7B7F8F8EBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFBF3E9E9BDE1E1A5F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3FF A0A0FC6A6AFA6868FAB1B1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBBFE5F5FFC5F60FCA3A4FDD1D1FEF2F2FF FCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7A2A2A24B4B4B1111115A5A5AABABABE9E9E9FFFFFFE6E6E67B7B7B272727 4D4D4D898989C4C4C4DBDBDBDFDFDFDDDDDDCFCFCFBABABAC7C7C7DEDEDEF6F6F6FFFFFFF9F9F9 CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6B6B6B232323212121676767ABABAB E2E2E2EFEFEFECECECD4D4D48383834444443C3C3C767676E9E9E9FFFFFFFFFFFFFFFFFFFFFFFF FAFAFAD3D3D3A4A4A48B8B8B7B7B7B6F6F6F5B5B5B4848484141416B6B6BB0B0B0E6E6E6FBFBFB FFFFFFFFFFFFFFFFFFA8A8A83A3A3A0F0F0F292929616161868686818181808080808080818181 7C7C7C6D6D6D3636361B1B1B5D5D5DAFAFAFEEEEEEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF5EBCDF1DEAFF9E6C6 FFF2E6FFFCFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4FCF4D5F0D5C2E4C3C5DAC2BED0A1B7C676B4B841CAD077E6F3D2F2F9F7E9EFE9 D6EDD6C8EDC8C7ECC7BDE3BDB5DCB5BBE4BBD5F1D6F4FCF3FBF9ECEDEECAEDEDC8F1F1D5FCFCF6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFFFEFEFFD1D1FF6767FE3939F7BBBBE3EBEBECFDFDFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FFEEEEFFE3E3FFE0E0FF DDDDFDD5D5F2C4C4EDAAAAED7777F45050FE7070FFA7A7FFECECFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCC69E3D371 EBDB7BEBDC7DE7D879EADD7FD6C96CD9CC70E6DB81E4D980DCD07EDED288E2DB81E1DA81E4DB8B E2DD82F5ECA86E6035433A0DDCD399A59D5FE2DD8AE2DA8BE7DD97C4B9792E2400BFB674E8E099 DED685CAC066E4D87BE2D376DCCA71EDD882EADB7EF2E586F5E88AF4E78BF2E78CEDE288E8DD84 EAE088E9E28AE8DE89E7DF8CEEE691F0E991F7F098FAF39BEFE890F3EC94EEE78FE8E189EBE48C EDE68EF5EE96E9E28ADDD57EE8DD8AD9D1833028052A2300746C43948E6BB0A987ADA484998F6E 736647281C01180D00978E51EDE6A3D7D183F2ED9AE5E08CD0CB7AE0D98DD1CB7FE0D98EE0DB8B DDD886E9DF92D6CF7AD8D27EE0D995DDDB8ED9D68F262001605A28F0EAA7F2E8A8EEE697DFD984 FAF7A7E7E193F3ED9FE1DB8EF7F1A5DBD589EAE499DCD68BEBE49BEAE39BEEE89EE9E393E9E38D E3DD89DFD886F3EC9BEFE897E9E18EE2D882E7DA83E4D37AD7C269E9D47BF8E38AEBD77EE5D176 F9E68ADFCD71D6C569F5E68CE5D57FE6D784F2E395F1E295EBDB8DECDE89EDDE8AEAD987FDEF9E EFD78AB2974BBB984FFAD58AFFE59CE9BA71AF782DFDD48CFFEA9DEAE481E5ED928D97580B0800 766242FFDD9FD9A656DB9F4ED19545F9CB77F7D992FCE9A8F0DE9AF1E196EFE091F1E491F8EE99 F2E793F8EE9EFCF9ADD2C97FFCFAB7E5E4B0706F391F1C013A351DE5DC97FFFEB4F2E99AF9F1A1 EFE796EAE291F0E999F2EA9DF4E79CEBE391EFE790F4EC98ECE49DF8EEB4FFFDC94F4511938B54 FEF7B1EEE7A1EDE29FFCFBC66E643A8C8952F1F2B9EFEFCA737254141400AFAD79F8F0BFE1D998 FBF4A0F7EB9FE7DC92EBE298EAE094F1E99CF8F1A4AEA75A655E14F3ECA6E4DD9AF6EEADE4DD96 E4DD8AF0E997EFEA99EDE89FE6E29BDBD693E2DE99ECE49CE9E08FEFE58FF1E389E6DC88E9E294 ECE396EBE394EBE494E8E08DEFE894EDE794ECE494EDE596E5DE91E7DE91E5DB8BF3E997EEE797 E1DB8DE7E498DCDA90C7C57BDAD992EAE89FECE89EE8E399E0DC92EEF2A6D9DF92E0E096E4E096 E1D791EBD796C0A566E2BF81FFF0B5FEDDA5B98750845C1A8F782E684E29311D0EB5A670CCBF92 E7DABA453917887F43FFF9B1F9ECA5EADC97F0E5ACF4EEBDF0ECBCFFFDCD6261344140205B5B27 585824F1F0BFFCF7BFD6D095BCB67ACBC98BBFBE829D9B607A783F6C68305B561EB2AD72DBD598 CBC686D9D491DFD993E6DD98FEEFB4E2E2A6BFC88C888B51C8B57F6542115B3905C0B07598985F 737A48050300242712E5EBBCDEE2B06D72381209016031048969389E955ECECB97BFD0A2ECFDDB 76715D1E1A0F211C08372B0F3E370DA0A270878D594B4520BFA576C19B53D4B055FCE797E0D292 DED58FF2EBA4F6EFA7ECE59FE8E19BECE59EF3ECA5EFE8A2F4EDA5EBE49DE6DF99F1E299F7DC8F F8DD93FAE59BFDEDA7F8EAA9F4ECAAFEF8B7F8F0ACEDE19CF5E59FF7E69EFDECA6FFF2B2FFE6AB DEA36DAE6834B5713DEFB77EFDEBACFFF2ADEAE098F4EEA2F2EEA4FEF6ADFBF1AAF5EBA4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF3F3F3CACACA6B6B6B5A5C5A717271C6C6C6F9F9F9F9F9F9BBBCBB5A5A5A 3738374A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0505050 3838386B6C6BB1B1B1E4E4E4F3F3F3F9F9F9FBFBFBF9F9F9F6F6F6F8F8F8FDFDFDFAFAFAD9D9D9 8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0626262181818595959B5B5B5 E7E7E7F9F9F9FDFDFDFFFFFFE8E8E8989898454645141414727272E7E7E7FFFFFFF8F8F8E4E4E4 B3B3B37879788383839C9C9CAFAFAFAAAAAA9696966B6B6B3D3D3D232323383838959595D2D2D2 FCFCFCFFFFFFFFFFFFF0F0F08D8D8D1818180808081414142525252A2A2A2A2A2A2A2A2A2A2A2A 2929292525251A1A1A0D0D0D181818757575BDBDBDF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFFF2F2FFF1F1FFF1F1FFF1F0FFF4F4FFF9F9FFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFBF6E9E8E6B1EBEBBFF9FAEDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAF1E9EABDE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC E8E8FBAFAFFC7979FB6969FAB0B0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6FD7676FA6B6CFAA0A0FCD8D8FE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEEEEEEEBFBFBF5C5C5C313131313131999999DDDDDDF8F8F8FFFFFFE4E4E4717171 1F1F1F656565A7A7A7E0E0E0F4F4F4F8F8F8FBFBFBFBFBFBF7F7F7F8F8F8FBFBFBFEFEFEFFFFFF F9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A262626424242ABABAB DEDEDEFCFCFCFCFCFCFDFDFDF0F0F0ACACAC5B5B5B2A2A2A525252DFDFDFFEFEFEFFFFFFFFFFFF FFFFFFF7F7F7B7B7B76969693E3E3E2828282828282020202222224F4F4F909090D1D1D1F7F7F7 FDFDFDFFFFFFFEFEFEFFFFFF9898982121210505051616162323232B2B2B2A2A2A2A2A2A2A2A2A 2A2A2A2525251B1B1B080808171717656565B8B8B8F0F0F0FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFDF9F1EFECC5E9E6B3 F5F3DBFFFEFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEF9FCF9E7F4E8C5E1C2A2CB838BB94D98B84FB3D183CFEEC3DBEDDD CFE0CFB5E0B5A3E3A3A8E2A8B3E1B3C5E3C5E5F3E5F8FDF8FEFFFEFFFFFFFAFAEEEAEAC0E3E3A9 F9F9E7FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDCDCFF6767FE2A2AF2A2A2D0DBDBE0FBFBFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FFE4E4FFCBCBFFB4B4FFA7A7FF A7A7FFA5A5FC9393EA8383EB7575F75A5AFF5858FF9C9CFFE1E1FFF8F8FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8D875 ECDC7AF3E383EBDC7DDFD071E6D97BE0D376EEE185EDE288DED37AD8CC79DACE81DAD379DCD67A E1D984D8D27BE9E19C8B7E4B1E1509D8CF928F8744D2CD78D8CF7DE1D48BD9CC87493E11A99F5D F0E89FD9D180B9AF56D0C366E1D276E9D77EEDDA83ECDD7FEFE281EEE181EFE283EFE386E7DB80 F1E68DF0E58EF2E691E9DE8BE4D887E8DE8CF0E892F5EE96F9F29AEFE890F1EA92EDE68EF6EF97 EFE890E8E189F0E991EBE48DDED582DDD587F4ECA5BAB2705F572E150D000600000C0400040000 030000000000281D0AA49A69FFF9BBE8E099ECE695E8E28DECE792D7D181CEC77CA59E55E8E198 E6DF92E9E292DFD787D7CF7BE2DC88EAE59AE6E297E6E29D342D0B544D1EF4EBAEE9DFA1EDE399 DDD584E5DE8DFAF8A8EBE493E6E08FF0EA9BE7E091E9E394E1DA8BE5DE90F4F0A3F4EDA0EAE393 D5D07BE4DF8BEBE591E1DB86E8E08BEEE38EE9DC85ECDD84E4D077D5BF64E9D176DCC66CEED87D F4DE83D1BF62CBB95CFDEC91E5D57EEADC87F2E796F8ECA0F0E59BE7DD8FF0E78DE8DF87F4EA96 EEE192F1DF94FDE79FE4C57FCEA059EBB86EAC6E21EDAB5CFFE599EBD788EDEA8BE5EB95B0B577 110B00695334FFF0B4F9CF7FA26712CD913DFFE596FDE19BF2DF9EF3E39FF9E89DEBDC8DEEE08D F3E791EAE08AF3E894F1E594F8EF9FE4DA90DDDAA5D5D39F3D3801ABA564F2ECAAE9E19AEAE196 F3EB9CECE493F0E797F8F1A0F7EDA1F5E99DE9E383E5DF81EEE599F3EAA6FFF7C992855F5A5311 E9E395EBE49BE9E29AFEF6B394894C4E4512E4DFA8FCF9C6A4A27F1E190015120BCECA98F2ECB3 F2EBA2F3ED96F9EEA6F1E5A3F0E5A1E6DD96F8F1A7958E43888035EDE69BFDF9B3F4EDA6F6EEAA E5DD94DFD880EAE48EE1DC8DF2EDA6F0EAAAD4CF91E2DD9CE8E098DBD383E5DC82F3E686E9DF8A E8E397EEE89DE7E194E3DF8EF1EC9AF9F4A2EDE998EBE596EEE89BE4DF95E8E195D6CE80D7D07F E5E08FE4E192F0EFA1E2E396CED183DCDD8FE5E498E4E196E7E395ECEA9CEFF4A3E3E698DDD98B E5D78FF3DC97FBDF9DEECC8DF0C488D7AF77A06E3682511DA17E35E6D379CEB7901C0900796C58 C0BA9DECEAC8504F1C58590DEFEB91E8DC93EDDBACB2A67C4D4B31A6A374C6C391121000B9B883 FFFFD0E5E4A9EFEBAEF1EBABD4CD8BF2EBA9ECEAAAF5F4B6D4D397B1AE726B662C989358F0EBAE E5E0A0C9C482CBC57FC4BE76AAA15BB5A86AC7CA8CAAB57B9A9F6BE3D2A59C7C5368491B756833 8C905777814D74784D2427113E4627C7CC99FDFFC7CDC780592E183F2309180E001410003B4F2F 5B6F4EA5A287F0ECC8D5D2AEA79D80716B4C2A2A0BB9BB8B645C3F38240B82682EF6E18DF3E99A E1D794DED793F1E9A6F4EDA8F2EBA8F8F0ADFBF4AFF5EDAAF9F2B0F4EDA9E9E19DE5DE9CEEDE95 FDDF93FFE79CF9E39BFBEAA4FFF9B4FCF8B5FDFBB9F2F0AEF0EEA9F5F2ABEFECA3F6F7B0EFEFAA FBF0B1FFF9BFFFDBA6E0A777BA6F3ECA8450EFBC84FFEDACFFFAB1FFF9ACFEF5A7FDF5A7F5EDA0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F5F5CECECE919191393939616261ACACACE5E5E5FFFFFFF9F9F9B2B2B2 4646462D2D2D4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5 6F706F4343434E4E4E808080B8B8B8D7D7D7EBEBEBF8F8F8FCFCFCFEFEFEFFFFFFFFFFFFFBFBFB D8D8D88F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0616161191919686868 CFCFCFF4F4F4FFFFFFFFFFFFFFFFFFEFEFEFACADAC5D5E5D141414666666D8D8D8FBFBFBFBFBFB F4F4F4E0E0E0C9CAC9CFCFCFDBDBDBE3E3E3E1E1E1D8D8D8C7C7C7959595484848222222545454 AAAAAAF8F8F8FFFFFFFBFBFBE1E1E17E7E7E171717212121464746686868717171727272727272 7373737070705C5D5C3536351919191F1F1F929292D5D5D5F8F8F8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFFFDFDFFFAFAFFE9E9FFC9C9FEC3C3FEC4C4FEC2C2FECFCFFEE3E3FFF3F3FFFCFCFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF3E7FDEACFF5EFC3F7F6D6FDFDF4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAF1EAEABEE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FFFFF1E2E2EE9B9BF56565FB6565F9B0B0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8FD7878FA5D5DF98686FB CDCDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEEEEEEBCBCBC7979793030304747477F7F7FCCCCCCF3F3F3FEFEFEFFFFFFE8E8E8 8585853232324747477A7A7AB2B2B2D5D5D5E8E8E8F6F6F6FDFDFDFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A2828284F4F4F C4C4C4EEEEEEFFFFFFFFFFFFFFFFFFF6F6F6BDBDBD6B6B6B2A2A2A454545CFCFCFF5F5F5FFFFFF FFFFFFFFFFFFFAFAFAD4D4D4A3A3A38383837171717272725E5E5E4848483838385B5B5B9E9E9E D9D9D9F9F9F9FFFFFFFBFBFBF0F0F08A8A8A1E1E1E2121214D4D4D666666737373727272727272 7272727474745B5B5B3535350F0F0F1F1F1F7C7C7CD5D5D5F6F6F6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFEFFFDFDFFFDFDFFFDFDFF FDFDFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EEFEECD6F7ECC5 F4F4CDFAFBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FCF9E4EFDCC9D183B4BA40BCC775C1D7A0C3E4BD C4E2C6C3E0C3C1EAC1C5F2C5D3F1D3DCF2DCE6F3E6F7FBF7FFFFFFFFFFFFFFFFFFFCFCF4EBEBC1 E2E2A1F8F8D6FEFEF0FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0FF7272FF3939F9ADADE8E0E0F0FCFCFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FFCFCFFF9898FF6C6CFF5252FF 5C5CFF6767FF6E6EFD5959F55959F66969FC8080FFA0A0FFD0D0FFF8F8FFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EADA77E9D977EADA7AE4D475DCCD6EE3D678EDE084E9DC81E0D57BE3D87FE5D984E2D785DBD577 DED878E5DF81DAD47CE9E298D3C88F3A3101BDB5748A8438D3CF75D0C871E3D888DCD08752481A 988F49FAF2A8E7DF8DC5BE63D2C96ADCCF71E5D57BE0CE77EEE080F2E884F2E684EFE282F3E587 F1E486F1E68BF2E78EF9EE95F3E691ECE08BF2E891F2E992F3EC94F9F29AF2EB93F2EB93E8E189 EDE68EF2EB93F1EA92F5EE96EEE78FDED786E3DB91DBD48EE7DF9FDCD69CC1BA86B1A97CB2AB82 8D8561807954817A55C4BC92EFE5AEE0D794ECE498E4DD8AEBE58FEBE590EDE698B2AA62827934 FFF6B0E5DD93E1DB8DF6EB9BDED581DED681E1DA8BE4E095F3EEAC4D47252B2200DCD19BE3D89C F5E8A2E5DC90E8E090E7E191E6DF8EE5DE8DDFD887E1DA89E5DE8DE6DF8FD2CB7AEBE493EEE797 F3EE9BD9D480DFDA85D8D27DD4CD75E7DD85ECDF87E8D880D6C56BD6C26AEFDA7EF7DF85EAD278 E5CD72EED97CE3D072EAD87CD7C76FE0D37BEFE490F5EA99EEE599F1E9A0F8EFA1E9DF86E9DD86 EEE590EBDD90ECDB92F1D995FCE59FFCEDA5AE772DB57828FFCB77FFE797F4DC90E9DF88DFDB8C F7F4B61D1400533A1EFFECB3EEC473C29035D7A248ECBE6EF6D88FF3E097F5E498F5E294F6E593 F3E391F1E38FF2E390EFE290F9EC9DE5D98AECE29AECE7ADC3BE88807B43433D1FF4EEAEE4DD98 E5DC95F4ECA1EEE798F1E89AF0E798E6DD8FF7EB9FF3ED8BEDE787EEE49AEDE2A9C8BA92180900 DAD488EEE995DDD887E3DC95CFC5862A2000D6CF8DFFFFD0AAA37A2521069C98722F2807A69E74 F4EDABEAE591EDE692F4EAA7F6F1B4E9DE9EFDF4B0776E28928A41F6EEA3F4ECA3FEF6ADF2EAA1 DCD48DD5CD82D7D076DBD580C8C275E4DE99E1DB9FBCB67BE7E2A3EDE49FD2CA79D4CB6EEEE27F EEE68ED3CF85D4D086F4F1A5EBE899D9D686E2DE8DDDDA89E4E193EEEAA0E4E096E1DD94D7D184 C9C473D9D786E1E090ECED9DDCDF8FC2C574CCCE7EDDDE8EE4E293E7E495E9E697E5E394EFEA9C EBDE92F4DC94FFE5A1FFE09DCA9E5F8D602372470EAF854EE9C28CF5DC8DF1E683FAF3CA473534 0D040512100C868860A8AF6AAEB54FE4E57DEDE49AC5B09421160D0502000D0B031411082F2D07 EBEAB2E2E0A4F4F0B0F6F2AFE2DB96D4CC84DBD48DF8F5B2EAE9AAEBE9ACAEAA6DA9A568D1CD8E EDE7A9F3EEADF7F3AFF2EBA4ECE69CC5BD75807735ADB1737C8A50909665A09067C6A88194794D 7E7340B6BB8385925C8B9164A3A7865256371C1D099CA25AF3EE9ECEA05FD4B27DEBDDB2979075 7988682D3D1C020000B8B48BFBF7CEE6DFC1ECE7BDECE9B8F4F0C3F6F5DB38291C1F1100B4A95D FAF4A6DED791E6DE9DFBF3B2FFF7B6F8F0AFF1E9A8E7DF9EF0E8A7FEF6B5F0E8A7E4DC9BE5DD9C EBDF98FDE698F7E196F6E49CFAEFA8E9E09CE6E2A0F1F0AFD9D897EFEEADFDFCB9EDEEAAF9FCBB F6FFBFF2F9B7F9F7B7FFF6B8FFECB4FCE0ABF1AF7CB66F3CB57C44F0C788FFF7B2FFFAB1FFFAB0 F5EEA4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE3E3E39D9D9D5656562F2F2F7D7D7DDDDDDDFBFBFBFFFFFFF8F8F8 AFAFAF3F3F3F242424444444D0D0D0FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EDEDEDA1A1A16262623C3D3C4A4A4A767676959595ADADADBDBDBDCCCCCCDADADAF1F1F1FFFFFF FCFCFCD8D8D88F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06161611A1A1A 737373E1E1E1F9F9F9FEFEFEFFFFFFFFFFFFF2F2F2B9B9B9707070181818616161CCCCCCF5F5F5 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE747474212121 212121868686EFEFEFFFFFFFF3F3F3D1D1D17070701E1E1E4949498C8D8CBDBDBDCBCBCBCCCCCC CCCCCCCDCDCDC8C8C8A0A0A05455542829282B2B2BB0B0B0EBEBEBFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFFE8E8FEDADAFED6D6FEC9C9FEB0B1FDAFB0FDB2B3FDACADFDB6B6FEC8C8FFDADAFF EAEAFFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFBECD4F8E0B5FDF5D4FFFFED FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF2EFE9C3E9E2ACFAF9E7FFFFF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFDFFFFEEDBDBE98888F25151FA6262F9B0B0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8FD7676FA4F4FF9 7070F8C2C2F7FFFFF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF2F2F2C7C7C77D7D7D3D3D3D2B2B2B737373C9C9C9F2F2F2FEFEFEFFFFFFFFFFFF EFEFEFA8A8A85F5F5F3C3C3C4E4E4E717171929292A9A9A9BBBBBBCBCBCBDCDCDCEFEFEFFFFFFF FFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A282828 585858D5D5D5F6F6F6FFFFFFFFFFFFFFFFFFF7F7F7C5C5C57676762F2F2F414141C4C4C4EEEEEE FEFEFEFFFFFFFFFFFFFEFEFEF4F4F4E5E5E5D5D5D5CBCBCBCBCBCBB2B2B28989893C3C3C303030 5D5D5DA7A7A7ECECECFCFCFCF7F7F7DEDEDE7D7D7D2121214242428B8B8BB7B7B7CECECECCCCCC CCCCCCCCCCCCD0D0D09F9F9F5757571B1B1B2C2C2C959595F1F1F1FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFF7F7FFEDEDFFE6E6FFE5E5FF E5E5FFE6E6FFEEEEFFF7F7FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF1E0F8E2BB FBEDC6FFFEE7FFFFF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF5E5EED583DFBE3EE4D99FDBE3C5 CBE3C8C4E2C5CBE8CBDCF6DCEEFFEEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF6 EFEFCFE7E7B0F3F3C2FAFADFFEFEFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3FF8080FF4949FDA9A9F9DCDCFBFBFBFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4FFD9D9FF9797FF5555FD3535F9 3030F94F4FFE6262FF6C6CFF5C5CFF6666FF8787FFB8B8FFE5E5FFF7F7FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE2D370ECDC7AEBDB7BE4D575E1D273E6D97BE8DB7FE2D579DFD47AE1D57CDFD47BDED47A DED877DBD670DDD870E4DF84DFD88AEAE29C352C00AFA862B9B460D7D473DAD577F2E993F0E698 82782F574E09F5EEA4E7E18FCEC86FD1CA6BE8DE82D5C86DE7D981F0E686E3DB78E7DD7CF0E685 EFE584F2E887F1E788EFE587F3E88BF0E588ECE184EFE68AEDE48CF6EF97F0E991F7F098F8F199 EBE48CE7E088EEE78FE7E088EDE68EEBE48CE4DC8BEDE79CF1E8A0E5DC97DAD28FE1D998EEE5A6 FAF4B4F9F3B4FFFFBFF1EEADE5E3A2E4DE99E5DE94D8D181DBD57EECE68EE9E38EE9E295CEC982 726924F8EFAAE9E199E1D98CE9DE8EF2E896E9E18CE9E38FF1ECA0E9E4A28B844D251B00B7AA75 FFFABDEADD9AEAE097DAD381E9E38FF4EE99E8E28EDBD581D6D07CE7E18CF2EC98E1DC87E5DF8B ECE692EFEA96E9E38FE3DD87EAE38DE7DC86E1D37CEBDC84EAD981C5B45BE3D077EBD77EFBE98F F6DE84E5CF74E5D075DECB70DDCB70D9C970F4E78FEDE28EEEE394EFE69AE7E097DFD588F1E08A F2E18CE8D687F4E197EBD790F6DE99FDE39EEDC67DA07427D9A856D29C47E9BA6AFAE39AF2DE91 F8EBA2EEE0A36A5A39321D04F5D8A0D9B966F7DE7DFDDE7FB89042E7CB7BF7E38EFDEB96EFDC85 F7E58FEFDD8AFAE998EFE091F3E297F4E69EEFE19BEBDE9AF0E9ABC2BC81BFB97D413B00B9B376 F6F1B1DFD895DCD48EF3EDA3E7E094EEE599E1D788F3E798E1DA82E4DD82F3EB9AFAECC6584A35 9E9260F8F1AFE4DF89ECE88EEBE4A2534818BDB377FFFFC4C0B883191200948E64FFFDD2524A29 5E563BF8F0ACE4DF8CEBE591F7EEADF4EBB0EAE0A3756C29989049FCF4ABEBE398F2EA9FF4ECA1 E3DA8FDFD58DD5CD7FEEE78DEDE792DED88BE9E3A1EFE9ACD2CC91ECE7A8F2E9A4E2DA89DED578 DCD16DE9E188DFDB91D2CE85DDDA8EDCD98ADBD889E3E091DAD789DBD88CECE99EEAE69ED4D089 D1CE81D4D182DCDA8BD7D683E5E794C5C975C6CB76D9DC89C8C777F0ED9ED8D385EFE69CE7D991 F5E19AFEE8A1FFE8A2D6B16C9A712C774C0BAF894BE4C587FFEBAFF6E2A8EADB90EFE88EFAEFC9 746867000000040500434A2FEBF3A9EAF18ED5D871FDF7AB8672613D3222BBB8974C4A29403D14 D8D4A0F9F5BAE2DF9BE7E19CD7D188CEC87DE0DA90EBE49BE8E5A2EFEAABC7C384AAA667C3BD7F E1DB9DE3DD9FE6DF9EEBE49EE5DD95E3DA91D2CA81988F49D2D69592A06392996585754C8B6D46 53370CA79B69656A326A77416267385455357E7C625E5A27888A3FE7DB86CE9A55CDA76DF4E1B5 FFF3D4EEF8D42D39132F2506464011C1BF945E5A3C4F4C23EEEAB4E3DCAACCBFA6282012000000 767732FFFFBAE8E19BF5EFAEFBF5B4F0E8A7FAF2B1E1D998D3CB8AEFE7A6EEE6A5DBD392D3CB8A DBD392E2D992EEE395E8DE90EDE69AE4DD95DAD790E0DC9AF2EEAEF0ECADECE7A8F1EDADF3EEAF FBF9BEECEEB2F9F6BBF8F0B5FCF6B8EEEEABEEEFA9FFFFB9F1DD99B48549B06430DE8E5FF4DAA5 FCF9C4FBFAC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF6F6F6C4C4C46161612828286B6B6BB3B3B3F0F0F0FDFDFDFFFFFF F7F7F7BBBBBB565756262526313131C9C9C9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7F7F7D9DAD9A1A2A16364634141413636362A2A2A252525292929494A49797A79CCCCCC FAFAFAFCFCFCD9D9D98F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0616161 1B1B1B7E7E7EF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F181818616161CDCDCD F6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF858685 323332161616737373DCDCDCFAFAFAECECECC0C0C0616161262626787878D3D3D3ECECECF3F3F3 F4F4F4F4F4F4F6F6F6EDEDEDADADAD3E3E3E252525414141C6C6C6F7F7F7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF3F3FEADADFC7979FA7575FA9393FCC9C9FEE2E2FFEBEBFFDBDBFFC4C4FEAFB0FD A8A9FDBBBCFDE3E4FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAEFECC9E5E1A7F7F5DE FEFEF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF5FCEAD0FAE2B9FEF9D8FFFFEDFFFFFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFCDBDBF98989F95252F96363F9B0B0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8FD7777FA 5050FA7171F5C2C2EAFFFFE7FFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7F7F7C2C2C27676763939392A2A2A6F6F6FB5B5B5F0F0F0FDFDFDFFFFFFFFFFFF FFFFFFF9F9F9DBDBDBB0B0B07575755252523939392B2B2B2525252B2B2B464646818181C5C5C5 FDFDFDFFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB696969 292929616161E6E6E6FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C47575752F2F2F414141C5C5C5 EFEFEFFEFEFEFFFFFFFFFFFFFFFFFFFCFCFCF9F9F9F6F6F6F4F4F4F4F4F4EFEFEFDADADA8D8D8D 4B4B4B2D2D2D646464D3D3D3F3F3F3F3F3F3CCCCCC7070702121215A5A5AB2B2B2E0E0E0F6F6F6 F4F4F4F4F4F4F4F4F4FAFAFAB0B0B04B4B4B1717173F3F3FAAAAAAFFFFFFFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4FFE0E0FFBFBFFFA7A7FF A3A3FFA3A3FFA6A6FFC2C2FFE2E2FFF6F6FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F2D8 E7E3ADF0EDC7FDFDF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF5EDFDE1BFECCA6EE0C045F2E8BE F7F8EFF5FAF5F3F9F4F5FAF5F8FDF8FBFFFBFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFBFBF4F5F5DFE5E5ACEDEDC7FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6E6FF8C8CFF4C4CF87474E6B6B6EEF5F5FD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2D2FF9090FF5252FF4747F9 7777EBAFAFE8D3D3FBDFDFFFE1E1FFDEDEFFDFDFFFE6E6FFEFEFFFF9F9FFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7D774E1D16FE1D171E6D778E4D576EBDE80ECDF82E3D77BDDD278DED37ADDD37A E1D87CD9D372DFDA71E2DE70E4DF84E1DA8AEFE79C51480F968F49C5C168C6C361E1DB7DE8E08B EAE294988F4B494404E1DB97DCD88CD8D582C0BB64CCC56CE0D682DCD27EE3DB82E6E085E8E085 E7DF83ECE488F3EB8EF3E98BFBF192E5DD7CDFD673EEE482EEE584ECE48BEFE891E9E28AEBE48C EAE38BE2DB83F7F098EFE890D3CC74E1DA82EBE48CDED686E1DA8FE8DF94EFE79AF0E89AE7DF8F E2DA89ECE592E6E18DEAE892E4E58CDDDD86DFD98BEBE295EAE390E5DE86E8E28AE2DB88EEE69B CDC37D7F7533E9E09BEAE197E7DE91F9EE9CE7DB8AE7DF8BEDE88DECE698F3ECABDFD9943C300B 483C18BCB26FDED08CEFE49AE7DF8EE7E08EEBE492E8E18FE5DE8AE9E18EE5DE8AE1DA85E5DE89 E4DC87E4DE87E5DD8AE7E08DECE38EECE18BE9DC85E6D67FE6D47EDAC972DECD76F2E18BE8D781 EBD984F2DE86E2CD76E9D77CEBD981EBDB82E0D278DDD27AF4E896F1E697EFE69AF1E89FE6D98D F1DC8BF5DE8DF4DD8FFCE29AF1D791FBE19BFFE7A172520AC7AA5CFFE896F7D27EBF9A48A9833B EAD18CFAE7A5F3DBA1C1AC7F1E0800C0AA77E8D381F4E581F6E888EDCF87B89D4AEBD378FDEA8F FDE890F8E48FFAE896F9E899FBE99EF7E69FE5D694E0D192EDE1A2EDE3A3FAF1AFD8D191868145 464109969153C2BC7DE4DE9DD7D08AE5DD97ECE39BE4DB8EE1D686EAE291ECE492FBF1A8BAAC83 55471FF1EAADF3ECA9ECE795FCF7A4776F307E743AFCF2BBDED49D302800746F41F3EBBAFFF8CD 8E8660433A16FAF8BFDFD890EEE996FBF3B3E1D99E706829ADA562FFFCB5F2E9A0EEE69BDAD286 E2D98DF1E89CFBF1A5EBE194EDE592E5DE8DEEE89CEAE4A1CCC687D0CA8CE8E3A1F2EAA1E4DC8A D8CF71E0D471F0E890E7E299DAD68DD2CF83C5C273C8C676DCD989C2BF6FCDCA7CC2BE74D3CF85 D1CE85BDB96DD7D586DAD889CECD7BE3E693B7BA67C1C372D7D787E8E698D4CF84EAE299DDCE89 F4D99AE8C98AE4CA8AA7803D78510C9B762FE3C37FEBD28FF5E19FE0D494C4BF81C8C583E2DDA0 726B480A03003937283233126C7140CBCF8FE0E398DCDE87E9E79B392C12908672FFFFE4C8C49D EEE9BAF4EEB7F1EBACE8E29BEEE89DDED88CD9D588EAE59ADDD98FDDDA95DFDC9ACFCC8ACDC889 DCD798E1DC9CDAD293E5DD9BE1D992E9E198F2EB9FD7CD81CABE75DBDF99BFCB89D8DDA5AF9D6F 6A4A2541210090844F878B52919A65696D40221E02585239A1996ABEBA72D8C874B47C35D2A769 E7D09DF2E1B994996B0006008D80529A93621918000302001F1E00E1DB9EF9ECB3EAE0C32C271B 040900969E64E8E7A6EDE3A2DCD493ECE4A3FBF3B2F7EFAEE8E09FDBD392F0E8A7F1E9A8CDC584 D7CF8EEEE6A5E6E19BEBE99CF5F4A8F7F6ACE4E39AE1DE9AEEEAA9E7E2A2DBD496F0E8AAF9F0B3 FAEFB4FAE6B3F9DDACFFEFBAEEF0B4E3F2AFD7EEA6D9F0A6E4EEA5FCF4AEFFF1B2F6C98FD1965E B78248D9A86EFAD196FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4F4BCBCBC5050500C0C0C4141416868688686868A8A8A 8B8B8B8787876868683333331515151818186C6C6C979797B4B3B4DEDEDEFBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCF2F2F2D4D4D4AEAEAE9595958585857070705C5C5C4949493A3A3A3D3E3D 808180C3C4C3EAEAEADBDBDB8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0 6161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F181818616161 CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1E1 8B8B8B3738371212126C6C6CD7D7D7F9F9F9E9E9E9BCBCBC5D5D5D2626267A7A7AD8D8D8F5F5F5 FEFEFEFFFFFFFFFFFFFDFDFDECECEC9F9F9F2E2E2E3737376F6F6FD7D7D7FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEEEEFED0D1FEA0A0FD6E6EFB5050FB6E6EFCCCCCFEE6E6FFEDEDFFEDEDFFE0E0FE D0D0FECACAFECCCCFED1D1FEDFDFFEF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEDECC7E1E1A3 F5F5E1FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8FFF3DDFFECC6FFEEC9FFF6E1FFFEFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFF5DBDBF18A8AF65D5DFA7D7DFBC0C0FDFCFCFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3FE 8F8FFC6161FA7474F7C2C2F1FFFFF0FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE9E9E9BFBFBF787878434343414141646464B2B2B2DEDEDEFCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF2F2F2DEDEDEBABABAA0A0A08989897474745F5F5F4C4C4C3E3E3E444444 818181C5C5C5EFEFEFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB 6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C47575752F2F2F414141 C5C5C5EFEFEFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 AEAEAE5D5D5D2424244C4C4CBFBFBFEAEAEAF2F2F2C7C7C76D6D6D222222616161BCBCBCEBEBEB FFFFFFFFFFFFFEFEFEFCFCFCFAFAFAA5A5A53C3C3C2727276A6A6AC2C2C2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFE5E5FFD1D1FFBEBEFFBFBFFF C4C4FFC4C4FFC4C4FFC4C4FFC7C7FFCACAFFCACAFFDDDDFFF6F6FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F8F2D6F0E2A8F5ECC7FEFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFAEEDDEFCF9CE4BF6BE0C160 F6EDCFFEFDFBFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDF8F8EAE2E2A6EAEAC0FBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9FF9898FF5959FB6A6AEFAEAEF4 F4F4FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFE9E9FFA9A9FF6363FF5C5CFF 8383F9ADADE8D7D7E4F6F6FAFDFDFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBDC78DDCD6ADECE6EEADB7CE7D879E0D375E3D67AE0D377DED379E2D77E E0D67CD5CC71CFC86DD6D169DBD868E2DC87E8E094F5EDA1847B45847C3CB3AF57BDBA5BDFDA82 C5BE70CFC7818982432B2604DAD69ADFDB9CEDEAA3E0DE91DBD589DCD589DCD38AD0C87FDFD98D E7E193E8E391EFE895EFE792E6DF85F3EC90EAE280E6DE7BEFE783EDE583ECE58BECE58DE9E28A EFE890EFE890EAE38BEEE78FE4DD85F0E991E6DF87E0D981E4DD8ADAD184D4CB7CDED380E9DD87 E7DC83EADF84F5EC8DEDE887EAE786EFEF8DE8E887EAE492F4EB9EEDE591DCD57DDFD880E7DF8D F6EDA2D2C8825B510DE1D890F7EEA3E9E191F4E896E1D585E5DB86E6E181E4DE8FECE5A1EDE69B 90854A0C00006E6127E3D58EF0E49AF0E697EFE697F5ED9CF3EB9AEEE695F1E995EEE693E8E08B EFE792ECE48FE6DF87E9E18BEFE590ECDF8BE4D67FE9D982EFDD87CAB861D7C571F4E390DECD7C D3C476DFD180DBCA77DDCB75F5E48EF8E890F1E38AE2D47CE1D57FDFD481F7EC9BF0E697DED388 EEE095EBD98AF3DE8FF7E094F8DD93FADC94FEE59DB89A52987C33FFE89CF8E392F6E492F3D788 D8B26A956F31C3A164FFE9AFE9DEAE392612705F33F6EA9CF3E883EBDD7EFEE9A7F3D787B6983D E4C86FFFE994FAE18EFFEA9AF4E195ECDA92E8D893EDE09FF4E9ABFCF1B0F5EBA3F7EEA4FDF4AF FDFAB9A8A465373300979256FDF7B9F4EFAFF4EBA9F7EEA9ECE299F3E899E2D98EFFF9B7DBD199 211501C3BD86F5ECB0D8D287F6EFA5A8A15B4A4213E0D79EDAD09B443A187D753DFAF3ACEAE3AA FFF7C4A19766312800FAF2BBF1E9AAF1EB9EFCF4B3655D1FE2DA9AF7F0AAEEE99FF5EEA0E5DE90 E7DF90F3EA9BEFE69AF2E79AEDE195EFE698ECE498EAE49AFBF5B0D4CF8BD0CB87E7E49CF1EA9C ECE491DED579E8DB7BF5EC96E3DF95CFC97FD5D083D6D382CDC978DFDA89CAC776CFCA7CBFBA6D B7B369C4BE75C8C276CFC97CDAD687DCD988D0CF7DAFB05DD1D080E7E497D1CB81E1D991D7CB89 D5C184F5DBA47E5921714D118D6B2BD6B771FEECA6EED78EDECF88E2DB93EAE7A4E1E3A2D6D8A3 8E8F6B0403004F4E31F1EFCAE2E3A0E8E9A5D3D09AE1DDACE9E9A4EDEDA43D37138D866AB5AF8C CBC59BE7E1AEDBD297E5DD99F3EBA1EFE89AD4D082DAD68CE2E097AFAE66C8C580D3D08DC3C17D B5B070CEC989EEE9A7FEF9B7E1D994CFC77FE8E096F8F1A1E1D788E4D68ACDCF83DAE49EDEE1A1 DAC691B693615E3C09918049787840717846716F494E482D685D48A2966DCDC686EAD88CA86D2A C99E5CFEEAAFE0CD9DACB17C070D00BAAA7BF5EDB7CFCF9C5B5B388E8D58F1E6A2F2DE9BF5E7C1 4B4839000200A1AD7EF7F4BEE9DB9EEFE7A6EFE7A6EFE7A6E7DF9EF5EDACE1D998E6DE9DE4DC9B C4BC7BD7CF8EFBF3B2F2EEA9E3E49BF3F5ABF4F5ACDCDC95D7D491E6E2A0F1E9AAEBE2A3ECE2A5 EDE1A5F7ECB1FFECBDFFDBB0F8E3B1F6F5BAE7F5B4CFE19ECDD994DCE09DF1EDA9FDF4B1FFF7B2 FFF6B1FDCB8ED58C50AC6529FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5C3C3C35C5C5C0F0F0F1B1B1B202020242424 2424242424242323231A1A1A0B0B0B0404040606061B1B1B404040717271C2C2C2F8F8F8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF5F5F5F3F3F3ECECECDADADAC1C1C19C9C9C565656 1F1F1F393939868686D5D5D5DEDEDE8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEB B0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F181818 616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DDDDDD868786343534141414707070DADADAFAFAFAEBEBEBBFBFBF6060602424246E6E6EC9C9C9 F3F3F3FFFFFFFFFFFFFFFFFFF6F6F6D6D6D6848584242424545454A5A5A5E7E7E7FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFFF7F8FFD7D8FEB2B3FDAAABFD8687FD4F4FFE5B5BFEBEBEFED9D9FFE5E5FFF6F6FF FBFBFFF9F9FFFBFAFFEBECFFC8C8FEBCBCFEEBEBFEFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6 E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFDE9FEF6D3FCE3BBFDECD6 FFFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFFEDDBDBE78B8BF26868FB9899FCCFCFFEFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DFDEFEA8A9FD7374FB7676F9C2C2F9FFFFFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF7F7F7C2C2C27A7A7A3838382F2F2F6A6A6AB1B1B1EAEAEAFBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF7F7F7F3F3F3EEEEEEDEDEDEC4C4C49F9F9F626262 222222424242848484DBDBDBFDFDFDFAFAFACCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4 BBBBBB6969692A2A2A646464EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C47575752F2F2F 414141C5C5C5EFEFEFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3F3F3B6B6B6646464252525454545B3B3B3E3E3E3F3F3F3CACACA6F6F6F2222225F5F5FBABABA EBEBEBFFFFFFFFFFFFFFFFFFF9F9F9E2E2E28C8C8C2F2F2F4141419C9C9CDADADAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFEEEEFFC8C8FFB1B1FFAAAAFF D0D0FFF3F3FFF8F8FFF8F8FFF5F5FFDCDCFFBDBDFFA6A6FFBBBBFFE5E5FFFCFCFFFEFEFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFFDFCFEF1D5FDE5ADFEEECBFFFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFBF4E7CDE1C07ADEB96D E3C484F7EEDAFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEF8F8EAE1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDFFA7A7FF6C6CFE6B6BFD ABABFEF3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF2F2FFC3C3FF8080FF4D4DFF 8080FEC8C8F6DBDBE9E7E7E6FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEADA77E3D371E6D676ECDD7DEADB7CE5D87AE7DA7EE0D377DCD177 DDD279DCD179DDD37DDED683DDD776D9D46AD4CD81C3BA74E8E099B2A77B69602CD5D07CC8C46C D5CF81C7C17ED2CB92837D4C181402AAA7779E9B6C7472466464367673436D683C736D3EA19B65 B7B178D8D396F2EDAEFCF6B1FBF4AAE9E292E9E38CEEE98CEBE586E9E480F0EB89F0E990ECE58D EDE68EF4ED95F5EE96F0E991EAE38BE9E28AF8F199F1EA92E3DC84E7DF8BE9E18FE5DA87E5D983 EBDD83EDE083F2E484F4E988F2E98BEAE487F0EC90EDEB91EDE695F1E99BEAE28FDDD67EE2DA83 F2EA98E2D98FFAF0AA655B17CDC37AF2E99AF0E895EADD89EFE393EDE28EEAE680ECE695EBE4A0 E3DE8CDCD2965B4E15B0A357FBF2A8EFE398F1E799EEE598F0E799EFE696F0E797EFE796F1EA97 F5ED99F1E994F2EA95E9E28AEEE28DF4E491EDDD89ECD984ECD882E8D37DDBC572EFDE8BF3E496 D2C579E9DE94E5DB91F2E493F1E28DF7E894E9DA83E7DA81EBE087E3D781DDD17EEDE090EEE194 E6D98DEEE296E4DA8DF0E396F2DF92F3D78DFBDB91EBC87FA38037ECCF87F8E299E2D188E9DC93 F1DE91FFE99FD5B175B49359AA8D53F1DAA8715E4351441CFAF3A8D9D270FEF197FDE7B0FFE49E E2C16EB08E3DEACE80FFEFA3F2DB8FF9E49CF4E29BECDD97E9E098EEE6A1F0E8A0F9F0A1EDE495 E5DD94F6F0AFFBF9BC9B965D3D3A125A551F7C75496E6527C8BD7EF5EAA4FAEFA5F1E7A2FAF2C0 57482A79712AFFFFBEEDE3A4F4EFA0D8D28F504613E0D9A1F7EFBF463C1A524B25F5EEADF6EEAE EBE499F3EAA3CFC68D231800DAD293F6F0AECCC589605B1BD9D491F2EEA9DAD38AEFE89DF7F4A6 ECE393EEE695FBF3A2F2E797EEE295EBDF94EBE199F2E9A1E3DC94D7D289BEBA71D7D389D8D587 E1DB8AE6DE89E6DD83F2E58AF2E895F3EDA2EBE49AEBE496E6E090E2DB8BE3DC8BE3DD8BDAD383 E8E094BFB86DC7BF76E9E196E5DE92DAD587E4E08FDCDA88C4C371E4E192EAE59BD8CF8AB4A567 9B8A51C9B57D8A6B392D0E00BA9D65FFE6A7FDE8A3F0E196D8CC7FD6CF85DDDB92CCCD88D9DB98 C1C59A12171040432AECECCDDAD8A9DDDA8CF4EFA2FFFBC4CCC29CEEECAEE4E8A12523070D0800 110900776F3FF4EAB4FDF3B4F0E79EF1E99BF6EFA1E0DC8FD0CF85CFD089B1B36FC1BE79C5BF7B CAC581D9D592E6E09EE7DF9EE3DC99E6DE99F0E89FF0E79BE5DC8DECE091E3D183C2BF70D5DA8D DCDB95F5DE9DEAC98CAB874AC0AE6E7672384B4B1D645E3C5C543E39311D564B29A59E6BDFCE8E 9B6226C9A15FF8E8A4E6D89DD7E0A6182100BFB289F0E9B3DFDFACCDD0AAE6E6ADDFD287E9D384 E1CEA2565341000700364323837E4FE2D6A0F9EFADF1EAA6DDD692E5DE9AFFFAB6DFD894E5DE9A EFE8A4EBE4A0E7E09CE3DC97DDD895E3E19FE5E3A1EBE8A7DDD996D1CB89D0C887E5DD9CE9E2A3 EAE3A4FDF4B5F8EFB2F3ECB3F8F0BBFDF0BBFFECBAF2DDA9F0DEA7FBF3B8F3F3B3EAF4B0EAF6B1 EAF6AFECEEABFEF4C7FDE6C1DABB94FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDE0E0E0A0A0A06F6F6F7070706F6F6F 6E6E6E6E6E6E6F6F6F6B6B6B4B4B4B191919080808121212565656828282A8A8A8DADADAFBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF3F3F3E3E3E3 9495944545452A2B2A686968C9C9C9E0E0E08F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFF EBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F 181818616161CDCDCDF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFCECECE7171712425241D1D1D818181EBEBEBFFFFFFF2F2F2CDCDCD6B6B6B212121626262 BABABAF1F1F1FFFFFFFFFFFFFFFFFFE8E8E8A4A4A45455542929297E7E7EDFDFDFF7F7F7FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFFF3F3FFCDCDFEC2C3FEC5C5FED7D8FFC2C3FE8B8CFE6F6FFD8D8DFCC3C3FEF3F3FF FDFDFFFFFFFFFFFFFFFFFFFFF7F7FFD8D8FFC0C1FEC2C3FEDEDFFEFCFCFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFA ECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FAF8E1ECE1AC F2EBC9FDFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF7DBDBF48D8DF76B6BFB9B9CFCD1D1FEFDFDFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE0E0FEABACFD7777FB7878F7C3C3EEFFFFECFFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF6F6F6BFBFBF7777773737373737376E6E6EB3B3B3ECECECFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5E1E1E1 A3A3A3424242343434565656CDCDCDFCFCFCFAFAFACCCCCC7F7F7F3737373D3D3DDADADAFEFEFE F4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C4757575 2F2F2F414141C5C5C5EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6F6A1A1A14C4C4C1B1B1B4A4A4AC0C0C0EBEBEBF6F6F6DADADA797979212121555555 AFAFAFE8E8E8FFFFFFFFFFFFFFFFFFF3F3F3A6A6A65A5A5A2C2C2C6D6D6DD3D3D3F4F4F4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFFE5E5FFCCCCFFB8B8FFC0C0FF D5D5FFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3FFE1E1FFC9C9FFBCBCFFBCBCFFD9D9FFFAFAFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFBF8FFEDDDFFECCCFFF1C6FFF9E0FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAF2E7BEE0BE57 E7C16EF4D4A8FCF3E6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F8EAE0E1A4E9EABFFBFBF4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FFC0C0FF8A8AFF 6262FFA2A2FFF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8FF7F7FFF5F5FFF 6B6BFEA5A5F2DADAEAEDEDEEF7F7F6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD06CEADA78ECDC7CE9D97AEDDE7FE8DB7DE9DC7FDED175 D7CC72D7CC73D7CB76EBDF91DDD389CBC46BD9D36DD9D18ECFC587D9D08F908362342A01645E13 999342DED891E9E2ACCCC495504924130D000D0A000D0B001F1D003634153A38151F1B001A1500 070100110C02322D1B6E6A36B5B076F9F3B3DFDA92EDE898EFEA94E6E084E6E082F2ED8FF5EE95 EBE48CEAE38BF1EA91EFE890EBE48CEBE48CEAE38BE0D981EBE48CE6DF87DAD27CE6DC88EADD87 EEDF87EDDD82E7D77CE9D87CE3D47AEFE18BE4DB89E3DC8CECE798F2E99EEFE498E8DE8BE1D880 DDD37DDDD382DACE86ECDF9A897C37968B3FF6EC9CEBE18CE4D884E7DB8DECE28EECE780E9E291 EAE19CE5E088F0E4A7D4C78EECE392EBDF90EBDD92EBE094EADE94E8DC90E3D98BEBE091EEE494 E9DE8CEFE593F1E793EDE38EE6DC87EEE08CEFDE8AF5E38FFAE591EAD17DE0C974F2DD89F3E192 D7C67ACFC57CF6EEA8E0D993DCD083E5D986F7EC98ECDF8BE5D982E4D881E1D57FF1E48FE9DB89 EEDE91FBEB9FEDE397E4E599EEEB9FF4E69AF9E195EBCB7DAF893CD3B167FFEDA6F9DD99E8D797 FAF1B1F9EAA2F3DB8DFFE2A5E3C58AD5BC80A18C5663512F473A17D7D28CFAF593F7E690F0D3A5 FFDBA0FFE89FDEBB749C7731E2C37DFFEFA7EBD58FF4E49BF3E99DEEE799F0EC9DF3EE9EE5DD86 EFE692EDE698F8F1AED9D597C2BF87BCBA84AEA977453E15ADA46AFFFBC0E0D48FF8ECA0F3E5B0 C5B893413112ECE2A2E6DF8FE9E290EBE49D514713C0B684F5EAB6594F36382F0EECE3A4F3EBA7 D5CE82E8E192EEE69BD4CB893F340FC6BC85E0D79F676028E1DC9BF0EDA6E1DE96F6F0A5E8E293 DFD887EDE594DDD382ECE292F1E697F3E698EDE197F3E8A5F3E9A6E2DB94B4AF66ADAA5DD6D383 DBDA86E2DC87DBD37CE6DC84FFF09AF3E798EFE59BE1D88DEDE496F7F09FEBE493F2EB98F6EF9C E5DE8DF8EFA1D7CE82C8BF74D5CD82EDE599DFD98AE5E08FE2DF8FC7C576D3CF82EBE39CFFF6B5 5A4A144833178A73417E64373C2500CDBA7FEBDC9EE9DF99D5D084D1CF7FE5E397E2E096D0CE89 D8D59491946B0002006F76607D7C61282014A19948F8ED99F2E5A4D8CC9EE0DE9CE4EAA55A5D49 0000001C1300C0B989ECE4AAEEE49FF6ECA0ECE494F4EE9DEAE79AD4D48CD3D591D9DC9BDFDC99 C9C47FC2BD79DCD594F1E9A8F2E9A9D5CD89CAC17AD7CF86F1E89DEBE294ECDE8FE4D081DFD987 DBDE8CE3E093F5DC94F0CC87A77F3CC1AE6BA49D637D7B4D54482B39301C110D07150D0359552B A08F5B98602FCCA768D9CB83D1CA87DBEAAB233200857957C9C28FC4C695C6CCA7C9C98CB6AA55 E8D177D5C18D727258040E020711059D966BFEEFBAF0E7A4EEE7A1E3DC97F1EAA5F0E9A3DBD48F ECE59FF0E9A4E7E09AEBE49EF0E9A3E9E2A0E0D699D7CD92E4DA9DE5DA9CDCD493DDD594E2DC9A C8C583C8C684EBEBA8F2F2B2F5F6B9EFF0B7E6E3ABFCF3BCEDE0ABD9CC95E0D39BEAE2A7F4F0B3 F4F0B3F2F2B1FAF6B7F8EDB4FEF5BFF7EAB4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5D8D8D8C1C1C1C2C2C2 C2C2C2C2C2C2C2C2C2C4C4C4BDBDBD8B8B8B3939391B1B1B2A2A2A9C9C9CCBCBCBE0E0E0F2F2F2 FEFEFEFFFFFFFFFFFFFFFFFFFAFAFAEFEFEFD1D1D1D0D0D0DEDEDEEAEAEAEDEDEDEDEDEDEBEBEB E1E1E19696964647462B2B2B686868C9C9C9E0E0E08F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFF FFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B8 6F6F6F181818616161CDCDCDF7F7F7F3F3F3DEDEDECBCBCBC9C9C9D6D6D6E3E3E3E4E4E4DEDEDE D3D3D3C3C3C3939393494949212121484848A2A2A2F7F7F7FFFFFFF9F9F9DEDEDE7E7E7E242424 4A4A4A929292D9D9D9EDEDEDECECECE3E3E3B4B4B46F706F4647465E5E5EAFAFAFFBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFFEDEDFFB3B4FDBEBEFEDEDEFFF6F6FFECECFFC5C5FE8B8CFD6060FBA6A6FD F6F6FFFEFEFFFFFFFFFFFFFFFFFFFFFBFBFFEBEBFFD0D1FEADAEFDCFCFFEFAFAFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF8F7E7 E2E1A5ECEBC3FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED7D7FD8080FB6262FBA7A8FDD9D9FEFEFEFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE6E6FEB7B8FE7676FD6969F7BBBBEDFFFFEBFFFFFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDE9E9E9C5C5C5777777404040272727565656A0A0A0D1D1D1EEEEEEEDEDEDEEEEEE EEEEEEEDEDEDF3F3F3FBFBFBFDFDFDF0F0F0D8D8D8CACACADEDEDEE7E7E7EDEDEDEEEEEEECECEC DEDEDEA5A5A5444444353535555555CDCDCDFCFCFCFAFAFACCCCCC7F7F7F3737373D3D3DDADADA FEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C4 7575752F2F2F414141C5C5C5EFEFEFF8F8F8DBDBDBD3D3D3D8D8D8DFDFDFE3E3E3E4E4E4E4E4E4 E3E3E3D6D6D6B8B8B8686868313131282828696969D5D5D5F5F5F5FAFAFAECECEC8A8A8A282828 3D3D3D8A8A8ACCCCCCF2F2F2ECECECDEDEDEBDBDBD676767494949575757A4A4A4F1F1F1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFD2D2FFB3B3FFC3C3FF DCDCFFF5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF9F9FFECECFFC9C9FFA8A8FFC3C3FF F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFAF3F8E4C1F9E9C2FEF9DCFFFFF3FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF6F3F3DFAE E1BF45EDCD7BFEE7CDFFF8F2FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF8ECE9E1ADF0EAC1FCFBEDFFFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FFD4D4FF 9F9FFF5656FF9696FFF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFEFEFFFC7C7FF5151FF 5757FC9393F6C7C7ECE5E5EBF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7C765EADA78EEDE7EE5D675F1E283E7DA7BEBDE80 E8DB7FE6DC82EADF86E8DC89DDD386E0D691D5CC81E1DA87BBB07B615825453D005147183E3708 A5A061D1CA96E0DAAB756E41171100060101322E08848059C6C498E6E2B4E1DDABE9E3AEEFE9B4 CFC895AAA46F6D6732342E060D0502110B003F370BC5BF87F1EBABF3F0A4E3E18CE8E68AECE988 F3ED8DE7E085E9E28AEFE794F1E793EEE78FEFE88DE9E287F2EB90F2EC93E9E18CE8DF8EECE08F EBDC89F2E28DF8E78FF2E28AEAD981DCCC75F1E390EBDF91E4DB90F6ECA3F6EDA0ECE190E4DA83 E8DE87EEE48EF0E595F0E49AF2E59FC9BC75463A02DCD082F4E998EADE8CD8CC7CECE190F0EA87 E4DB8AEEE69DE9E28AE4D995E2D797EBE18ED8CB7CE9DC8EE2D589EDE295F1E599E5D98BE6DB8C EEE394E1D686E2D787F3E996E7DC8AE2D785F3E38FF1DD87F9E38EF9E18CE0C773E7CF7CFEE998 F9E798D7C87DDBCF87F2EAA5EBE29EE8DF94E4DB8BEEE392E6DB89E7DC86E7DB85E9DD87F4E690 F7E895EEDF8EEDDD8EF3EA9DEAECA1F4EFA4FBECA1FFEEA1DBB86A916E1DFFE799FEE297FCEDA7 F8E7A7EDE2A3E2D68BF2E190FAEAB2998352594612110000352612403311897D4AD8CB84EFDA98 FCDFB6FDE4B7FDE0AEF4D59DE3C183B99652EAC880FFE295F8E08EF1DE8CF6EC97ECE893CEC975 E6DD88ECE391EEE598E5DD96F0E8A8F4EAB1BDB37DB4A974C8BE895A4F18CDC28AFFFFC1F3ECAB FEF6CC463A159D925FFAF0B2F1EB99EFEB92A7A068665F36F6F3BEAEAB762B2200D1C590F9EFB5 E1D68AFDF1A0E0D487EBE09AF4EDAD48401A847E4B77723DE5E5ABF1EEA9EDE89EEEE89CE9E193 F4EC9CFAF1A1EEE592EADF8FFBF0A1F4EB9DF1E89CF1E89DE6DC98E6DD98D9D188DFDB8FF6F0A2 E9E694E7E28FE9E38DCBC56FD4CA75F4E997EAE191F8F2A1F6EF9EE6DE8DDED381E6DB89FBEF9D EEE391E3D989ECE396F2EB9DD4CD82CDC77BD7D48ADAD68EE7E196D1C877DDCD7DF0DC95FFF4B2 F1D7993A24003E2B0FBBAE7AE6DAA5261B00CDC18EFFFAB8E3E193D9DB88F0F2A5D7D894E1DF9D E1DD99F0E7A3A6A775040E00000700010000160C00827735C2B665C9BD71D3CA8DD7D594DADFA8 3D3E392A2711C6BE8EFCF3BBEAE1A1F0E89FE6DD8EF8F09DE4DD8DD8D388E2DF98E8E7A5E4E5A3 FAF5B1E0D993C7C27DCEC685DAD694E4DF9DD6CF8ADCD58ED8D085ECE596F3EB99F5E997E3D181 CFCB78D3D783D8D081DCC67AF6D58B88611ABA9D59E7D89BDEDCAA645F3A171200110F00181102 1510042614007E5016A8883EE6D886A59B54B4BB7D21290087805ADDD69FCDCC95D7DBACB2B371 C9BB6CE3C87BF2D9A54E482B0E1B0A182607898461F9E8BFEDE5A8DFDA97DFD892E1DA92C2BB73 CAC37BE4DC97F5ECA9E1DA96F1EAA4FAF3ADE8DE9DE5D99EDACE92EADEA2F4E9ABF4ECAAF6EDAB F6F1AFE9E7A4DEDD9AD6D793D8D897DFDD9FEBE9AEF0F0B4FFFEC5EFEFB2EFE9ABFFFCBFFDF1B3 F4E5A9F6E7AEF6E8B2EFE3ADE5DB9DE8DF9DF7EEABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5EFEFEF EFEFEFEFEFEFEFEFEFEFEFEFF1F1F1E9EAE9B1B1B1545554303130404040C3C3C3F0F0F0F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1D3D3D37E7E7E7676769A9A9AB6B6B6BFBFBFC0C0C0 BCBCBCACACAC6A6A6A2A2B2A3535357D7D7DD1D1D1DFDFDF8F8F8F4141412B2B2BC7C7C7FBFBFB FFFFFFFFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 B8B8B86F6F6F181818616161CDCDCDFAFAFADFDFDFA0A0A06D6E6D646464858585A7A7A7A7A7A7 979897808180676767464746272727323232888888CACACAFCFCFCFFFFFFFFFFFFEFEFEF979797 3434343333335C5C5CAAAAAABFBFBFBBBBBB9A9A9A6D6E6D4B4C4B5D5E5DAAAAAADDDDDDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFFECECFFAFB0FDC4C4FEEFEFFFFFFFFFFDFDFFEAEBFFA6A7FE4848FD 8888FEDFDFFFF8F8FFFEFEFFFFFFFFFFFFFFFEFEFFF8F8FFDFDFFFACADFDCCCBFEF8F8FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F7F7E8E1E1A4EBEBC1FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFF6969FD5454FDBDBDFFE8E8FE FEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0F0FFCACBFF7374FE4F4FFCAEAEF8FFFFF8FFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF8F8F8C1C1C17D7D7D343434232323363636707070A6A6A6BABABAC2C2C2C0C0C0 C0C0C0C0C0C0BEBEBED3D3D3F1F1F1F9F9F9D7D7D7939393686868999999B1B1B1BEBEBEC2C2C2 BCBCBCABABAB7777772B2B2B3F3F3F767676D7D7D7FDFDFDFAFAFACCCCCC7F7F7F3737373D3D3D DADADAFEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6 C4C4C47575752F2F2F414141C5C5C5EEEEEEEBEBEB9A9A9A8282828B8B8B9C9C9CA6A6A6A7A7A7 A6A6A6A5A5A58383835757572A2A2A2929294F4F4F9A9A9AEAEAEAFDFDFDFEFEFEFCFCFCA1A1A1 3C3C3C2929295959599B9B9BC5C5C5BCBCBC9999996D6D6D4040405D5D5D9F9F9FDBDBDBFBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FFC7C7FFA8A8FF DBDBFFF3F3FFFEFEFFFFFFFFFFFFFFFDFDFFFDFDFFFFFFFFFFFFFFFFFFFFFDFDFFD6D6FFAAAAFF C0C0FFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFBF9F0E9E2B0EEE9BDFBFAE9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FAFDEAE3 F1D29DE1BE45EED88FFFF7EEFFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8F0F8E3BDFAEAC4FEFADFFFFFF4FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFF E2E2FFADADFF4848FF8A8AFFEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FFCECEFF9595FF 4242FF6666F5B6B6EAE7E7EDF6F6F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECE6EEFDF7FE4D472D1C25FE4D675EBDF7D E8DB7CECDF83E1D77DEADE89DED47FDCD684D0C980ECE2A7ACA170261B07514B22BFBE6EF1F299 525306C9C698B3A8A3332B210A0500464323A7A565D1CD86E4E096E2DD91F0E89CE2D88CE7DC8E F5EB96EBE288EFE880E4DE78D3CC76B5AC6873673E2B1F14140A0067623DBFBE82F6F8ACDCE187 E5E983EDE97CECE380F9EF99EFE396EEE093E2D781F1E988F3EE87EDE885EBE68BE9E293ECE198 F8E7A1EDDD93F9E99CE9D988F8E993E7D880F4E68EEBDC87F4E693F2E493E9DC8CEDE38BF2EC8E E7E084DCD57BE9E28BF0E896F7EEA1EFE59BFFFCB68E843E645A19E3D892F0E597ECE191F3E898 F0E592EADE8EF1E797F2E797E9DE90F3E79AEBE090E1D686E7DB8BE3D686E2D786F3E897E6DB8B F3E898F6EC9CEDE594F1E999F2EA9AE5DD8DE0D888E6D580EFD57FFEE892DFC773CDB561E7D280 F2E08FE5D484D5C578F4EBA0EFE297F0E69DE5DD92ECE498E6DE90E6DE8AEFE48FEADF86F2E78E F7EC93ECE187EDE18BE8DC88E6DD8DE1DB91F6E8A0F4DA90F6D990876316E7CC7BF6E894ECE390 F2E99AE9DC94F0DB99E9D98DDCD484FAEFC1A39678120702190F007C714972644139251C2B1100 4125065C4221706850B7B79CEAE1BAFEE6B2E1C381D1A757EEC16AFFDD81F8DF83F3DE86F5EB96 E7E290F2ED9DF4EC9FEEE399EFDF98F3DF9BF3DD9BFDEBADE7D498D3C38891854B4F460BCCCA97 FFFFDF93936739390CD8D589E3DD93F9F1A9DBD591443E0DD7D8A8BDC58E1C2700A9A46BFFF2AE EDDA92F7E599F2DF93F6E4A0F8E7AAF2E4AB655F382C2C00E1E5A0EDF0A7EDE99DF4ED9FF6ED9F F5E99AF3E697F5E698F8EC9DF9ED9FF5EC9FEDE79DF0EDA3E0DD93E3DB91EEE69AE1DA8DDCD588 F6EEA0E6DF91F4ED9EF9F2A4E4DD8EDAD284E0D88AE8E591E4E58CE9E68EDCD47EE5D684E5D484 F7E496F6E497E8DC8EE4DD8FE4E393D5D886D5D987D4D78FC0BF86DCD390DECA78E7C069F9CF92 D4A4699F6C32523027474027EAF4B4E6EAAC393918A19B72FCF6B7E1DE84E4E587F2F2AEB8B684 B2AF7DE8E39FEEE493DAD695454C31585C484F4C39160F00D5CC9CE3DC97D4CF7EE0DD90E3E2A7 77765A000000969275E6E6AED7D593D6D48CE6E397D0CC7ADAD581E2DD8AE6DF90ECE399F0E7A1 E4DB96F3E9A1EEE49DC7C07AC6C17FCBC788D4D191D3D18ED1CF87D7D487E5DF8CEBE48CF2E68F EADC8CD5DA89C7CB7BC2B26AD5C479F0DA8D9A762CC1924FFAE3A1E6E8A79CA169282A02211E00 736951B1A28296804B8A6F20D5BC5AFFED8DE9D78BE1D69A8D86565D5832EFDF9CF4E9A2D3D392 E8E69AF2E1A3FADAB4DEBD9036250E000000A2AB8B5E5D46403629DBD8A6B3B073D2CE89DFD98E DED689E7DE94F0E7A1F4E9A8F0E6A5F3EAA6EEE79FF5EEA9FAF1B3F8EFAFF5ECABF2EAA7E9E29D F1EAA4E9E29DDDD793E1DB99E3DC9BD3CC8DDDD496EDE3A5F6EBB1FBF0B5FDF4B5F3EBA8ECE49B E2DB90E4DD96E2D89CE2D8A6E8DFB0E4D9A4E4DA9EEBE1A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFBBFC1BF5F605F383938484848D2D2D2FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3D0D0D05F5F5F414141555555656565676767 6868686666666161614B4B4B404040707170B1B2B1E4E3E4DBDBDB8C8C8C3D3D3D272727C6C6C6 FBFBFBFFFFFFFFFFFFEBEBEBAEAEAE5E5E5E1616167D7D7DF7F7F7FFFFFFFFFFFFFFFFFFFFFFFF F1F1F1B7B7B76C6C6C1313135E5E5ECCCCCCFBFBFBD8D8D88B8B8B4A4A4A3536354848485D5D5D 5454544849483B3C3B3132313131314040406D6D6DC6C6C6EBEBEBFEFEFEFFFFFFFFFFFFF9F9F9 BFBFBF6E6E6E4646463B3B3B5E5E5E6868686465644949494545456060609A999AE3E3E3F9F9F9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECECFFB0B1FDC9C9FEF7F7FFFFFFFFFFFFFFFCFCFFC3C4FF 5E5FFE6A6AFE9B9BFFE2E2FFFDFDFFFFFFFFFFFFFFFFFFFFFEFEFFE7E7FFAEAFFDC6C6FEEDEDFF FBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FFFFF3FFFFF4FFFFF9FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCACAFF5D5DFE4C4CFEC8C8FF EFEFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEEEEFFC5C6FF6768FE4040FEA7A7FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF4F4F4A4A4A44949490B0B0B0A0A0A2626264E4E4E6868686A6A6A686868 686868686868686868636363949494DEDEDEFFFFFFD5D5D57D7D7D3A3A3A575757626262676767 6969696666666060604F4F4F3F3F3F717171B3B3B3E9E9E9FFFFFFF9F9F9CBCBCB7C7C7C333333 393939DADADAFEFEFEF3F3F3B9B9B9666666252525616161EAEAEAFFFFFFFFFFFFFFFFFFFFFFFF F6F6F6C3C3C37272722B2B2B3E3E3EC4C4C4EEEEEEE7E7E78787875D5D5D5656565B5B5B5D5D5D 5656565050505050503D3D3D2A2A2A2A2A2A525252929292D0D0D0F9F9F9FFFFFFFFFFFFFFFFFF C5C5C57777774040403A3A3A5555556B6B6B666666535353454545595959949494DADADAFCFCFC FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FFC2C2FF A4A4FFE9E9FFFFFFFFFFFFFFFFFFFFFDFDFFEFEFFFECECFFFCFCFFFFFFFFFFFFFFFFFFFFE1E1FF B6B6FFC1C1FFEEEEFFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEF9F9EEE2E3A8E8E9BAF9F9EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF7EE F4E3C1E8CB82DFBD55EEDCA5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFBF4FFEED0FFEDC8FFF1CEFFF9EA FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFEFEFFFBABAFF3838FF7F7FFFEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FFABABFF 6363FF5959FF9090F6D8D8ECFBFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECE6EEADA7AE5D573D5C764D6C865 DFD371E8DB7CE6DA7EDFD47ADBCF7ADED57FDED784E6DD9AB0A672190F00847D4AECE8A3E0DD93 E7E7A3635F2B5B552F130D08211C0A837D4FDEDAA0EAE6A0DEDB8CDFDA87D8D280E8E08FE0D584 E2D480E9DB82E2D777E0D86CE7E076CFC969E2DA8AFFF6B6D5CB95756E42150F00141209636229 DFE199F9FAABF2EB92E8E187EBE48CF3E994EFE590F3E991F3EA8EF2EA8DF1E98DF2EB91EDE690 EAE090F2E199EFDF94F4E495E6D785F4E590ECDE86FAEC93F5E78FEDDE88E3D481E7D985F1E78D EDE889E6DF84E0D97FE5DE87EBE38FE6DE8DEEE597E1D98FF1E7A0877C36655B14A99E4FE4D987 F6EB9AF1E694F2E795E6DB8AEEE391EFE492F2E695EFE493F0E594F1E694E5D987E1D583EFE391 F7EC9AF2E797F1E696EBE090EDE393EFE696EBE393F0E897F2DF8BFFEC97EAD17BDBC26ED9C370 E5D17FF9E697EFDF8FCAB96CC1B465DCCF82E4D88CE8DF93EBE295F0E596EDE390E8DD88E8DD84 EADF85ECE188E6DB82EEE48EEBE08DEADF8FE9E097F0DB94FFF1ABB69149BD974BFFF3A4F0E38E E7E08EF3ED9EF0E49BF0DC9AFBEBA5EFE8A3B5AB82201509160B00786F44E7DFA7FAEDB9E5D1AC B89F7EA4895CAF975F55492232280C25170D7F6937D0B577D2B26ED6B56AF2D585FFE694FBE695 F7E597F1E697EFE79AF0EA9DEDE698EFE79AF5EB9FF4E89DEFE49CF4E6A1F4E5A4FFF3B3A49051 50431298956F231F06BBB677F7F0ADEDE594EBE19D635627A39B65D1D09B1615059A9D5FF6EDA9 F4E59CF2E699E2DD8CE7E797D8DB91F3F3B2C2BF854B4115503E05FAE8ACF4E2A0ECE297EBE596 F0E798F4E999F4E696F1E191FFF7A8F7EA9DFEF5A8F0EAA1EDE9A0F3EFA5F2EB9EECE596EAE395 EDE698F4ED9FE5DE90F4ED9FF5EEA0E9E294E9E294E5DE90E4E18EE3E28ADBD77FDAD37FFCF19E E1D284DCCB7EECDF90F5EA9EEEE79BE6E496E0E092D3D886D2D38BDBD098CEB57DE9C67CCFA349 976124754309D6B079C4A9991B1200D5DAA0F5F5C13B3B21A39C77FFFEBFE6E28AF3F29CB6B477 161509595723FBF6B1F3E79AF6F0B4C7CCAE969A7F615F4D554F35DFD8A8E0DA98E3DF94E2DE95 FFFECA626046000000100E085F5C1CD8D593DAD68DD6D384CBC976DCD783E3DE8BE6DF90EAE196 F1E7A0EFE59EE7DD95E6DD95DED790D8D391D9D796C8C786D1D18DD8D78EEFEDA0EDE794E0DA82 F6EB94EDDF91DBE090DEE396E6D48FE7D68DF1DB90D2AE65C18E4CFFEEACD8DA97B1B77D707343 2A29025B52377C6B4C4F3910887120F0D979EFDB7BE8D58AEBDEA2EDE4AED6D294F6E69FF1E59A DDDC95E9E798F4E0A4FFE0C0E7C5971503000300007E8563FFFEE7837B6B4C4A20E3E0A5D8D592 EBE59BDED688F4EBA0F1E7A0F0E5A4EDE2A2F9F0ABF3EDA3F6EEA8FCF4B5ECE4A3ECE4A2F3EDA9 E9E29CEEE79FF5EEA8F6EEABF4ECAAF4ECAAF6EEB0EDE3A5EFE5A7F5EAB0FBF1B6FEF5B9F6EDAC F1E9A1F6F2A9EDE8A3F1EBB0F2ECBDE7DEB4E9E0A6EEE5A6EFE7A4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9C4C5C46E6F6E4B4C4B595959D5D5D5 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE8E8E88D8E8D5A5B5A434343333333 2828282626262B2B2B3C3C3C636363929292CDCDCDF2F2F2F9F9F9DCDCDC9898985151513D3D3D CCCCCCFBFBFBFFFFFFFFFFFFEDEDEDB7B7B76E6E6E2E2E2E8B8B8BF7F7F7FFFFFFFFFFFFFFFFFF FFFFFFF3F3F3BFBFBF7B7B7B2C2C2C6F6F6FD1D1D1FAFAFAE4E4E4AFAFAF8080806364634E4F4E 3C3C3C2929292C2C2C3A3A3A4E4E4E6C6D6C969796C4C3C4EEEEEEFCFCFCFFFFFFFFFFFFFFFFFF FDFDFDECECECC4C4C48989895253523131312727272828282D2D2D5D5D5DAAAAAAE3E3E3F8F8F8 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECECFFB0B1FDC7C7FEF3F3FFFFFFFFFFFFFFFCFCFF DEDFFF9D9DFD6262FE5252FECBCBFFFBFBFFFFFFFFFFFFFFFFFFFFFDFDFFE6E6FFAEAFFDBFBFFE E1E1FFF6F6FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFDE9FCFBD6FCF8CEFDFAE1 FFFEF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBFF5F5FFE4E4EFE C9C9FFF0F0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4FEB0B0FD595AFD4141FEA8A8FEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5F5F5A7A7A75252522626261919191B1B1B222222262626262626 2626262626262626262626261F1F1F656565D1D1D1FFFFFFEDEDEDA9A9A96767674B4B4B373737 2929292525252C2C2C3C3C3C5A5A5A8C8C8CC3C3C3F2F2F2FCFCFCFFFFFFF9F9F9D1D1D18A8A8A 4848484E4E4EDDDDDDFEFEFEF5F5F5C1C1C17676763C3C3C717171ECECECFFFFFFFFFFFFFFFFFF FFFFFFF7F7F7C9C9C9818181414141515151CACACAF0F0F0EFEFEFB2B2B28484846262624E4E4E 3E3E3E2D2D2D2121212323233A3A3A585858787878A7A7A7DCDCDCFBFBFBFEFEFEFFFFFFFFFFFF FFFFFFEDEDEDCACACA898989505050323232242424292929414141676767ADADADDADADAF5F5F5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FF C3C3FFA4A4FFE8E8FFFDFDFFFDFDFFF7F7FFE4E4FFC7C7FFC7C7FFF6F6FFFFFFFFFFFFFFFFFFFF E7E7FFC3C3FFC3C3FFE0E0FFF3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F8F7E2E9E4A0DFCE71E0C37AF0DFBCFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8FFFAE0FFEECBFFE4C1 FFF1E1FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9FFC5C5FF3030FF7474FFE6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9FF 8989FD4242FC8E8EFEC9C9FEF2F2FCFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDCD6DDFCF6FEBDB79E6D875 D6C865DCD06EE3D778DED176E3D87ED9CD78E3D987E3DB90D0C6871E15006A6230ECE89CDCD98E E5E0A5E1D9B4514A33030000242108ACA86BEFEAB1F2ECAACAC77BD2CD7AE1DB84DCD480EADF8F E1D484E1D27FE6D97FF0E385E8DC78DDD46EE5DC79E1D87CD8D179F2EA9BFFFCB5CCC685555014 130E023A3611B9B37EEEE5A6F5ECA3F1EB95F0EA8DE1DC7CF6ED93F9EF9AF6EB9CF5EA97F8EF95 F0E787E9DF85EBDB8FF1E193EFE08FE5D781F0E28AEBDD84F1E38AF5E78EEEE087E9DA85EEE18B F4EA90EDE789EAE288E9E288E9E188EAE28CEDE592E3DA8AF1E898E1D88AF7EEA1C2BA6DCCC170 F2E894EEE48FE7DC89F2E894EDE38EEADF8CEADF8DE7DD87EDE28EF0E592EADF8CEEE290E9DD8B E9DD8BF6EB98E5DA8AE8DD8CECE191F0E595F2E696EDE594EFE393FCEC9AF7DE8ADBC370F1DB89 FAE592E4D17FF4E393AA9949A49544E1D484FBEF9FF2E897DACF80DDD283EEE391F1E792E9DF87 F1E68DE6DB82E5DA81DFD37EEEE490EBE08EE6DA8CEBDD97FDE7A4EFD38D9D7630FCE399F6DC8C EADC8BE2DD8CEFE99DECE19ADECD8DEFE1A5BFB581271D001C1100534926DBD499F0E8A3E0D68F FBF1B5FCECB1BBA762C1AA59FBE1A6E5CB9E9B845138210E1C07005B4817917F49B9A76AE9D796 FCEAA6F9E7A0F4E29AF2E099F5E69EF2E89CF5EDA0F3EF9FEBEB99F5F3A2ECE899ECE397EFE199 FFFCB7D7C58C382A18352906A89D5FCBC17FFEFDB1827637655927FFFAC4463B1B716833FFFEC1 EFECA6F9F5A6E3E392E8EB97DEE190E9EBA2B8B4776F6630AD9D6A3C2600EAD098F5DC9EF0E59A ECE697EEE898F4E999EFE493E8DA88F2E596F5E999FFF6AAF6EDA3F0E8A0ECE69CEBE397F4ED9F F3EC9EE9E294EAE395EEE799F2EB9DF6EFA1F1EA9CF6EFA1F3EC9EE2DB8BD5CF7CDED985DBD583 EFE796E7DF8EE1D788EBE295F7EFA2F1E99EEAE297ECE59AEAEA9AD8D289EBD497FFE3B4E4B273 71460A76510DD2B77CFFF4BF63543F0C0000BAB284EBECC1333018BEB68FF7EDADE8E091F1EDA3 5B583B34310CE9E7B2D5D088FAEDA7E5DEAD363A2300020000000099966EFFFDC4F6EFAECFCA86 E3DEA1D3D1A1302D0F0000000603006C6828F3F0ABD6D289DEDB8CEEEB99EEE995F1EB9AF3EC9D F0E79CEAE099E3D992EAE098E7DE94F2E9A3EBE4A0F0EBAAD1CF8CCECB87E4E099E6E094EBE492 EFE890EEE38FE4D689D1D688D5D98DE7D591EFDE96F8E498DEB972C08D4DFEE1A1E8E8A6D5D89F B7BA856C6C3B261F00180700110000644D16F1E68DF7E38BF2DF98E4D79AEDE5A9E8E39FF2E499 EDE197E4E39BEDEA99FAE9AAFFEEC9B28E5E190500191709242B0ED8DAC2F1E9D5201C00AAA671 F8F4B4EEE79DFEF6AAEBE298FAF1A9F3E9A6E6DC99F1E9A2F3EDA3F4EEA5F2EAAAEBE3A2F1E9A7 F6EFA9E5DE96ECE59DFAF3ABFAF3AEF7EFADF5EDACF9F1B2FAF0B2F9F0B2F6EDB1F9EEB6FEF6BC FBF5B6E9E5A2F0EBA8F4F0B0F4EFB9E2DBB1DBD3AEF7F0C0FEF8BFFDF6BDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE3E3E3BABBBAAAAAAAB0B0B0 EBEBEBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6CCCCCCB1B1B1A2A2A2 9898989090908F8F8F9292929D9D9DB5B5B5D2D2D2F0F0F0FFFFFFFEFEFEEEEEEECFCFCFADADAD A3A3A3E6E6E6FDFDFDFFFFFFFFFFFFF7F7F7DDDDDDBBBBBB9D9D9DC8C8C8FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9E1E1E1C1C1C19C9C9CBBBBBBE9E9E9FDFDFDF3F3F3DCDCDCC6C6C6B7B7B7 A9A9A99D9D9D9393939595959F9F9FACACACBDBDBDD4D4D4EBEBEBFCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFAFAFAEBEBEBCDCDCDADADAD9696968F8F8F909090969696B2B2B2DCDCDCF9F9F9 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECECFFB0B1FDC0C0FEE5E5FFF9F9FFFFFFFF FDFDFFECECFFC3C4FE9091FE7A7BFED7D7FFFCFCFFFFFFFFFFFFFFFFFFFFFDFDFFE6E6FFAEAFFD C5C5FEECECFFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F4F3D3EBE5A6EAD179 F2DFA5FCF7EAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCACAFF5F5FFE 5454FED8D8FFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDFEC2C2FE6666FE4242FEA8A8FEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAD4D4D4ACACAC9898989191918F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8B8B8BAFAFAFE7E7E7FFFFFFF9F9F9DADADAB9B9B9A6A6A6 9A9A9A9090908E8E8E9292929C9C9CB0B0B0CECECEEAEAEAFFFFFFFFFFFFFFFFFFFCFCFCE9E9E9 C8C8C8A9A9A9ABABABEFEFEFFFFFFFFAFAFAE2E2E2BFBFBFA3A3A3BBBBBBF6F6F6FFFFFFFFFFFF FFFFFFFFFFFFFBFBFBE6E6E6C4C4C4A5A5A5ACACACE5E5E5F8F8F8F8F8F8DEDEDEC7C7C7B4B4B4 A7A7A79E9E9E9595958E8E8E8F8F8F9E9E9EB2B2B2C5C5C5DCDCDCF6F6F6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFAEEEEEECDCDCDADADAD9898988D8D8D909090A0A0A0B8B8B8DFDFDFF4F4F4 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F6F6FFC3C3FFA4A4FFE7E7FFF5F5FFE6E6FFBDBDFF9595FF8585FF9F9FFFEFEFFFFFFFFFFFFFFF FFFFFFE8E8FFC5C5FFC3C3FFDDDDFFF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBF7E7F4E5B4EEDB98F0E1AFF8F1D8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FFEFE2FFE4CB FFDFBFFFF0E0FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFFCBCBFF3C3CFF6B6BFFC9C9FFF3F3FFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFEBEBFF BABAFE6C6CF44343EEB3B3FAE9E9FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6D676DFCF70E0D06E E7D875EEE07DE4D876E0D374DACD71E0D57BD7CB76DDD186E8DE9E655E1D3C3610E4DF87DAD881 DBD691F5EDC58A7D6C160C00363015C9C874F5F1A6ECE6A2E0D88ED6D07DDDD77FE5DE85D7CC78 E1D583E2D384E3D37EDACA71DDCF70E4D779EEE182E9DD7BDED46CE6DE75F1EB83EBE386FBF3A3 FAF6B7978C5E3E32211509007E724FEEE6ABF6F4A6F3EF8FEFEC89F0EA8FF6EE9EF5E9A0F1E597 F3E78DECE279E7DB7BE8D988F7E894F2E38EEEE088F0E28AF0E289EBDF82F5E88DF8EA91F9EB93 F6E990EEE489EDE489E9DF86EBE188EFE48CE6DB84EAE08AEAE08AD3C974D8CD7BF4E996F5EF9D F0E58FECE28BEBE18AEDE38DEEE48DEDE38CEFE58FEBE18BEDE38CF7ED96F8EE97F0E690F6EA98 F7EB99F0E492F2E694EBDF8DF2E694F4E895F0E492ECE08DF0E491F9EA99FDEA9ADCC473E5CD7D EDD787F0DC8BE9D684CBBA68BDAD5ADFD07DF8EC99E8DC89E0D582D4C675DCCE7CECDE8AEEE08C E9DE86F2E88EE8DE87E6DC86DFD481EEE392E9DE8EE3D58BF4DF9CFFEFAE967431CAA863FBE399 F8E193F2E595E3DD90E4E096E8E09BE2D698E2D5A4756B48120600271C00958E5DD7D088E6DF8B E7DE87E7D98AF5E495F7E68EDDC768B9944AD4AC70FFE7AFF3E8B3BAA876635A3B241D01342D06 786F3DDACC94FFF0B5EFD99AFBDB9FFFE0A1FDE6A1FBEDA3F4EE9EE5E692E3E691F4F5A0EEED99 ECE795FAF0A1D6C98D473115D2C292BFAF73E3DA92CABB865E521DE9DC9E98865A5C4919F8EFAD F6E1A0E0DF94E7F19ECFD381E1DA89F7EEA3C3B072745822EADEAFD1C08F231600DED99AEEEBA6 EBE79AEDE797F1EA9AF5EC9BF3E795EDE18FE8DB8CF4E798F6E99CF3E89EFCF1A9E8DF96E4DC90 EFE89AF2EB9DF5EEA0EDE698EEE799F3EC9EFBF4A6F2EB9DF1EA9CF2EB9DE7DF91D4CC7CE3DC8D E6E191E2DF8FE6E393F1EEA0EDE99CEEE79BF0E69DF1E29BF5E69FEDDF93F9F5AAF1D08ECA906D 8D5524B38C33D3BB75FFF8BF9999660300001003003627146B6648140E00E1D7ACEFE39FF9F3AA EFE6AA251F04A6A47BE8E7AD8D873AD9CB8CA398750303000809002A2A16DDDCA1D9D592E3DD9B FEF7BCB7B08019150000000024230486844FE0DB9AEFEBA4E6E397FEFDB2EDE896EAE493E5DE8D E3DC8DE8DF94EAE099EDE39DE8DE96E6DD93ECE49DEAE49FF5EFACE0DC98D2CE8ACDC980D2CC7E DED885E1DA84EBE08DEBDD93E0E598DDE196E4D28FE7D690F5E197D7B36CBB8948AA88554C4A24 87874BC0C186D1D19677714C1003002411009A864CEAD688E8D688EADA95EFE4A4E7E09CE8E495 E8DC8BE4D98CE1DF96E5E38FFBE8A5FFDFB4AF8B570B0000928F75666E471B1B0720180E060300 7F7B4CF0EBAFEAE39CE5DF94E2D98DF4EBA3FDF3ADEFE5A0F1E9A1ECE69AECE59DF4ECABF3EBAA F2EBA8F3ECA7EFE8A0F6EFA7F5EEA6F3ECA6F4EDA9F4ECABF1E9AAF5EDACF8F2B2F3ECAFECE5AC EFEAB1F1ECB1F9F5B5E8E5A6FFFFC89C986A1C17022F270DDED9BCD4CFB0C6BF9DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECECFFB0B1FDBBBCFEDDDDFFF4F4FF FEFEFFFEFEFFF6F6FFE2E2FFC7C9FEBCBDFEEAEBFFFDFEFFFFFFFFFFFFFFFFFFFFFDFDFFE6E6FF AEAFFDCDCDFEFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8EEEECBE0D78F DCB13BE6C369F5E6C2FDF9F2FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6FF 5E5EFE5959FEE5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFDCDCFF7979FF4444FEA7A7FEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6FFC3C3FFA1A1FFD9D9FFD7D7FFB5B5FF7E7EFF5C5CFF6464FF9595FFECECFFFFFFFF FFFFFFFFFFFFE6E6FFC1C1FFC3C3FFE2E2FFF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF8F1FFEAD5FFEACAFFFCE0FFFFF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F7FFE2DD FFDBCBFFDEC4FFF0E3FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFFD0D0FF4E4EFF6666FFACACFFE4E4FFFCFCFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6F6FB CECEFB8686FC5C5CEF5C5CE6D1D1F8FCFCFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDCD6DE0D070 EDDD7BE9DA78E2D471E9DD7BE7DA7BE7DB7FDFD57BE2D681DACE88CAC08B5650047D7A1EE5E37F D5CF81EDE2B1867A5D0A0000413821E3DD9DF5F39CDCD784E2DB8CE7DF8BE7E087E3DA7DE6DC82 D8CD78DECF7EDFCF80E2D27DD0C067CEBF60E2D378D5C56CDDD06FE5DA71DFD76BE5DE72EEE682 ECE48BF9F0A8F0E6AEF7ECC16658370400006F6737F2F0ABFEFDAAE9E88BF3EF96EFE796F3E79C F0E292F0E187EBDF78E7DA78DDD078F2E38CEEE088F1E488E7DA7EEDE084E4D77BEEE185EEE185 F1E488EFE287EEE389F5EB92E8DE85E3D980E8DE85CCC269F7ED94DCD27AEAE088DCD279EDE48A E8DF84EFE58CEDE38AF2E88FF2E88FEEE48BECE289EBE188ECE28AF5EB92F0E68DEFE58CF5EA94 EFE290F1E593EDE18FE6DA86F2E390F3E491F2E38EF1E28FECDC89F1E38EF9E896E9D585EFDA8A F6E192E3CE7FE2CF80DFCE7BBEAD5BDBCA78DDCE79E7DB85F0E48EEEE28CE2D27DECDD88EEE088 E9DB83EBDF88EEE48DEFE590EEE491E6DB8BF2E797EEE194ECDB93FFEDACBB9C5C8F702CFFEBA5 F2D68DF2DE91F5E899EDE59AE7E19AEAE5A2E5DC9FBFB48B3A2F171A0E003B3215E9E4A6F2EC9B F2ED90F1E98AF4E88FEFDF88EDDC7FF9E585FBE593C2974FBD9A56F8DDA1FFF9C3E4D7A5E9E2B3 70693B0B050039300DBBB07DFFF2C0F7E4ADF8E4AAF6E3A5FBEAA6FEEFA4F7E89AF5E596FCF4A5 FEF3A4F2E095F7E3997E5C26895637C39363C49765C099665735048E6B3C8863332B0802AF814C F0BF85FFD999FFE2A0E6CB84FDE39BFFFBAFC9B86E72611FEEE6ABFFF8C4A39E67090900B8BD79 EEF3ABEAE79AF0E999F2EB9AF2EA99F2E996F3E994ECE08FECDF91F2E597F4E69EFAECA4E7DB93 DAD286EEE799ECE597FAF3A5EDE698E7E092E9E294F6EFA1F2EB9DF2EB9DF1EA9CEDE396E4D88C F0E79CF5F1A3F7F7A9EEF1A2F0F2A5E8E59AEAE39AF7E8A2FBE6A1FEE3A0FEF0AAFDDF96AE813A 61280AC29062FCE187F3E6A1EEEDBB252918525130756B481002000801003E361FF1E5B2E8DC91 F0E79CD3C893292002C2C091CFCF87DCD883F6E8A9897C620000000404002E2F17E8E8A2D3D188 F8F6B8E5DEAD38300E0903008A885BDDDEA3F2EFAEF9F2ADE6E097EAE499E4DD90EEE797F0E998 E1DA89DBD485E1D98DDDD58DD9D188E4DC91EEE69CEBE39BF4ECA5F7F0AAF0E9A3EAE39DD4CC84 DBD486E0DA88D8D37DEADE8CEBDB92EAECA0EBEDA4F1E1A0F0E29BF8E49AECC981A77232BF9B5B 131000181500C0C07DDBDC98F2F1C4594C2C0E00005A4A0F72601BA69850F3E3A5F8ECABEDE89D EAE68FEBE08DEDE195E5E399E3E089FFEFA8F4CF9F865F252712005A583EFFFFDE9A9C814C4534 706C4CD4CFA1F0EBB3E9E19D9F964CA2994CE4DA91F1E7A0EEE49FFBF3ABF9F3A7F3EDA5FAF2B0 F7EFAEF3ECA7F3ECA6F4EDA5FAF4AAF6EFA6F6EFA9F7F0ABF5EEAAEFE7A6ECE5A4F7F4B1FCF7BA F2ECB5EFEAB3F1EEB6E8E6AAFEFDC2F9F8C44F4C21050000040000130B061B1404100901FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECECFFB0B1FDC5C6FEEFF0FF FEFEFFFFFFFFFFFFFFFDFDFFF7F7FFF1F1FFEDEEFFF9FAFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFF E6E6FFAEAFFDCDCDFEFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFAFAF0 F2EBCCE0C069DEB247E3BA55F3DFAFFEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF6F6FF B6B6FF5858FE5A5AFEE5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDFF8585FF4646FEA7A7FE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF6F6FFC3C3FF9797FFA8A8FF7979FF4242FF5353FF8C8CFFBEBEFFE6E6FFFAFAFF FFFFFFFFFFFFFFFFFFDEDEFFB1B1FFC1C1FFF2F2FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE2E3A9E8E9BBF9F9EEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDFCFFFAF4FFFAF2FFFEF7FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F3 FFE2CAFFDBC8FFDDD4FFF0EDFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFD5D5FF6060FF6969FF9C9CFFDBDBFFFCFCFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF8 E6E6EBA6A6EB5151FC6C6CFBA5A5F9E7E7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8D878 F0E080E8D876DCCE6BE7D976DACE6CE2D576EADD81D7CC72E8DC87DFD38CA99F69A49F4EBDBC56 E0DD7CEDE5A2958A6310030053471CC5BD7FE6E293CBC571E7E08CE2D983E0D97EDCD376DDD376 E1D67EE6D887E4D486DCCD7EE1D27DDACA70DFD171E5D57CECDD84E6D77AE4D875EDE27CE9E07B EFE585EBE185EEE390EBDF96F6EDAAFFFBC29B93611C15062E2900ACA968F7F6ABEFED9DE9E490 F2EB96F3E68EF0E287F2E285ECDC80E0D376F2E58BF0E387F6E98DE9DC80EFE286E4D77BEDE084 ECDF83EEE185F1E489EEE289F8EE95EEE48BEFE58CFCF198DFD57BE8DF84E8DF83E1D77CD8CE73 EBE184E7DD80E0D77CEEE48BEFE58CEDE38AF0E68DF0E68DECE289F2E88FF8EE95E8DE85E3D980 F3E892EFE390EFE390EEE28FE2D682F4E491EBDC87EDDC87F4E38EF2E28BF2E28BE7D57ED5C271 FEEB9EF6E293E5D283E9D787C6B563D6C573F5E492EBDC87F3E791EDE18BE9DB86EBDB84F6E48D F1E089E9DB83EEE48CEEE48DEEE793F3E998EDE292F5E99AF2E498F6E19AF2D4958C6C2BE7CC88 FCE59DF7E194E9D78AEDDF93F5ECA2EEE8A1ECE7A6CFCA8E7C754F180D04221800867F48EAE49B E8E28BE6DD81F0E58AF1E28AE9D982EEDE88F0DD85FADC89FEDE8DDABC6FAD8F46DABF79EED696 DCC78DFFFEC9BCAF7B2118111A14027E7B50E4E8B2ECEDB2EBE3A7FDEFB1FEEAAAF7DB99EFCD8B E8BC7AB58949A077396A44073509006D39078C5A22936837431B026240198361382D0700714A1F A6773D9D672F9961209F6527B78146C79D5BD4B26D6C560DEBE09CFCF6B8EDEEB690915A8C9150 ADB36FDADD93EFE99AF3EB9AF3EA99F0E794F0E692F1E792EADE8CE3D787FAED9FFBEDA3EFE099 E3D78DDDD589FEF8AAF4ED9FF5EEA0F2EB9DF3EC9EF3EC9EFAF3A5F5EEA0F3EC9EE7E092E5DB8F F5E89FFDF5ABF0ECA0ECED9FE0E394E0E395E2E095EEE49BFEEDA8FFE8A5FFE6A4F5CF8FA7732C A073293F1000A38558FFF69DECE4A3A09C74040300C7C6A3C2C19B2D2A19211C0F958D65FEF5B9 E9DE8BE2D68AC0B581251D09CFCD98FAFAACE8E68AFCEFAFCCC0A47E79714646252B2B13D8DA8B E6E496EBE5A5C1B88A020000999367FDFAC2E0E198E9E69BDED78EF2E99FD0C87B948D3EE7E090 EAE392E3DC8CE6DF91EAE297DCD48BCDC57DDDD58AF2EB9EEBE399F6EDA4F3EAA2F1EAA2F2E9A1 EFE79CDFD78AE0D888DFD885D8D07FEFDE95E7E99DE4E69DEEDE9CEFE29AF4E196F0CC83CB9654 C9A563645C22C3BB81EBE9A4DCDC92EEE7B9EEE2C5726344160802302313847638FAECB2E2D998 DED889E5E183EBDF8CF3E79DE7E49ADEDA80FFECA1DFB884B28A4B422B07171400D2D9B0FFFFE9 B8B2A0D7D3B3EEE8BEDED9A2E8E09ED1C87ED2C97CEDE49AECE29BE3DA94F5EDA5F5EFA4F1EBA3 F5EEACF5EEAAF8F1ABF7F0A8EDE79DF4EEA4F4EFA4F5EEA6F7F0ABF3ECA8EEE7A6E5E09CF2EFAC FFFCBFF9F4BCF2EDB8EFECB5F6F4BBF3F1B9F5F4C09390668F8B69928F738F8A6DB0AB8EC4BF9F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECECFFAFB0FDC2C2FE EAEAFFFBFBFFFEFEFFFFFFFFFFFFFFFEFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF F5F5FFDBDBFFABACFDC5C5FEEEEEFFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFDFBF7ECEEDDAFE4C370DEB348E6C879F3E6C4FBF8EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7E8E1E1A4EBEBC1FCFCF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFF F2F2FFB1B1FF5555FE5A5AFEE5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FF8989FF4444FE 9E9EFEFAFAFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F5FFB9B9FF7D7DFF6E6EFF5C5CFF5656FF8585FFC2C2FFE9E9FFFFFFFF FFFFFFFFFFFFFEFEFFF9F9FFD3D3FFA9A9FFC0C0FFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF9F1EEE2B4F1E9BEFCFAE5FFFFFB FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FCF8EFF4E2B8F7E1C3FDE9E3FFF6F7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFDADAFC7373F36B6BF78B8BFED2D2FFFBFBFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F7 E8E8EFC9C9EC8A8AF14B4BFD8888FFD6D6FFF5F5FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DDCD6DDACA6AE0D06ED7C966E4D673DFD371E1D475E3D67BD7CC73E6DA85D4C97DA8A05CCAC575 E6E28CE4DE90A29A5C1D12006F6537CFC688E4DC91DFD987D2CA7AE6DD89DDD37ADED579CFC568 D8CD72DDD17CD1C476DBCD82E4D58AE9DA89E2D67BE5D878E4D679E9DA82E8DB81EBDC85F1E28C EBDD87EEE28BF1E68DE2D77AD8CE70EEE584E8E188F4EEABC6C0844842221310007F7D43E6E5A0 EEEC95EFE98CF3EB8AE5D67CE6D481EDDC86F3E588F1E487EBDE82EFE286F3E68AF9EB90EEE184 EADC81F3E68AF2E589EFE187F4E98FFAEE98F6EB92EDE289EDE288F0E48AEADF85F0E589F4E98D E8DD80DDD474E7DC80E7DE84E7DD84EFE58CEFE58CE9DF86E9DF86EBE188F0E68DEEE48BEFE58C EDE389E5DB85E8DC88EFE48FF1E491EBDB88F2E28DEFDE88F4E28BE6D57DF2DF88F1DE85D8C46C EFDD8AEDDC8DF4E293F6E595F0DF8FD5C371D7C875E7D885EEDF89E8DC86ECE08AF0E38DF2E08A EAD981F1E18AF0E38DF3E994E8E08CF0E895EDE392F6EA9BF5E698F7E598FEE9A0B29150BF9C5B FFF5AEFFECA0EBDA8DF5E799F2E498FBF0A8EBE29FE2DC9DB2AE7265603D1E1601231C05BAB470 ECE693E9E18AE9DE88E3D785E8D888EEDD8EECDA8DEBDA90EEDC8EEAD784FFEE9BEFD37DC8A44E BD9645FEE69BFFEEACFFEBB5DED0A36F674A000200334525C0CD8FFDF8BECEBA82C0945B9A5C26 8B4610904A168A4A18A9703D4515037D5525C1A565C8AE71D7C38D4F3E1CCFC18E281B017E7141 F5E2A0E2C885EDCF8CD8B56DC99B5AB8844996672E3F1800957730BFAC6AE7D79AFCF5BE837B42 E8E8AADFDA94F9F6AAF1E798EDE191E9DD8CF2E793FAF09BF3E994F3E994EEE291F9EC9DFBEBA1 F4E39BF7EAA0EEE699EEE799EEE799F5EEA0F4ED9FEBE496F5EEA0F3EC9EE6DF91EBE496EEE799 EEE398F5E9A1F3EAA2EDE89FE7E69BE8E89CE1DF92ECE69AF9ECA3EDD690FFEFABE8C280965C1D A56A24EAC3793E22085E5024F2F19BFAF6BB3B2F1A685B4AFFFFE1F8FFD5D8E3B4CECCA6F0E7BA C2BA79EBE289F1E794BFB67B1A1400B4B37BF8FBADE4E68AEEE4A4F6EBCBE0DBCC26250A4E4E1B DFE28FDBDA8AE6E1A3847B50180F0BDDD7ACE2DFA2D8D886E8E393E3DB8EE9E093ECE395DED586 E3D98ADDD686E7E090E3DD8EDCD489E5DD92EAE298E6DE93F2EA9DEFE79DEAE197EDE49AEBE398 F0E59BF1E89CEEE498EDE696EFE898EEE495EDDC93EAECA0E5E79DF1E29DF5E89FF9E899F0D082 BF8944EFCE8AFCF4B0E4DA9EE6E29BE7E79B635C2F7C725DE2D5BE988D66F3EAB4FFFFC6E9DFA8 DDD497E7E192EAE787E5DA86F0E59BDAD88DDBD67BF9E495C29861C19A56BBA26C060100787E54 E9E9D2312A1B312B1CD8D2A8F3EEB7E4DD9AEEE599E6DD8FEBE197EDE39BEDE49FF3EAA4EDE79E F7F0A9F4EDAAEFE8A3F6EFA9F1EBA2EDE79DF8F2A8E7E197DBD48CF2EBA5F6EFAAFAF2AFF4F0A8 F2EFA9F8F5B5FEF9C0FCF7C1F5F1BBF3F1B9F2F0B7F5F3BDFFFED2FFFFDFFFFEDDFFFFD1FFFFCB FFFFC9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9EFEFEFEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDECECECEDEDEDF3F3F3F9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFEEEEFFB6B7FE BDBDFED8D9FFF1F2FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFFE6E7FFCCCDFEAFB0FEC2C2FEE2E2FFF6F6FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFCFCF9F2EFDFB3E1C06DDDB85AE5CA84F3E8C9FEFDFBFFFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF8F7E6E3E1A6ECEBC3FCFCF5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCFFEEEEFFADADFF5454FE5A5AFEE5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3FF8A8AFF 4141FE9393FEECECFFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCF4F4F4EDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECEEEEEEF3F3F3FAFAFAFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF4F4FFB4B4FF7070FF4545FF6060FF9797FFCFCFFFF1F1FFFDFDFF FFFFFFFFFFFFFCFCFFF6F6FFE6E6FFC5C5FFAAAAFFC6C6FFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF4FCE5C5FCE9C3FEF8D8 FFFFF0FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEF9F8EBE5E2A9EDE8C0FCF7F0FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFEDFDFF88585E56D6DEE7B7BFCC9C9FF FAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA EDEDEBCECEE9A2A2F47373FD6161FFAAAAFFF7F7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDCCC6CE0D070E1D16FD7C966E7D976DED270E1D475CFC367E1D67CE4D883D7CE7893913B E0D992D6CD91A79E641E14005F5622F1EA9CE5DC91DFD68BDCD386E3DB89DED57FD4CA71D5CC70 D1C86DDCD27ADBD07FE1D58CE2D591DFD38BECDF90E1D77CE4DA79D0C665DCD176E7DB84EDE092 F1E397EADC91F1E494F7EC94E3D977DAD266F3EC78E8E272E2DD85F7F2ADE7E2AC423D24040200 6F6D2EE4E495EFEC90E7E181F5E88EE0CD80F9E793F4E788EEE181ECDF82F2E589F1E38AF7E990 F4E68DEBDD85EBDD84F3E58CF5E78CEFE38AF1E68DEEE38AE6DB82E2D77EDBD076E0D57BE4D97F E8DD82EFE488F3E88CEDE286E3D980E8DE87F2E891F2E891ECE28BEEE48DEDE38CF6EC95F2E891 EDE38CEAE089E8DD87EDE18DF2E390F6E794F4E48FF0DE8AE6D37DEAD67FF7E389F7E288CCB75C DEC76DEFDD87E4D582F2E390ECDD8AE1D27FE8D986DDCE7BE5D683EBDC89ECDD8AF1E28FF4E691 F0DE88EEDD85F7E991F4E892F3EA96E4DD8BF1E998EEE292F2E294F8E495F8EA9BE7CB81906C29 F4DB96FEEEA4F5E696F3E795F3E896F4E798E9DB92F3E7A2E5DD9EB9B579393417140D00433D0C DDDA89EAE589EDE58CEDE192F0DF97F6E499F7E59BF0DE96ECDB97F1E89CE2D987F5E38DFFEB92 F9D67BDDB056C1913EEAC076FFE6AAFFEEBFFFF8D3BCAE8C362704351E01AC8756885020833F0C 813805C47B48F2B37FFCCE9BC4A7732B1A00FEF6BBFBF5B0FFFCC4766D3A9D9862766E494A4420 DFD990F0E5A7FFF3ACF2E193FFF3ADFFEEAAF1DB987B621CBF9E58B78F4DA87B3E90622DBE9260 97713DFCF3B4FDE9A3FEEEA0F2E193F0DF90EDDE8DF7E895FFF59FFBF19AFEF6A1F7ED9CFCF1A1 F8EBA0EEE096EEE298EEE699E8E193EFE89AF4ED9FEFE89AEDE698F2EB9DF6EFA1E8E193E7E092 EFE89AF0E89CF1E79FF4ECA3F6EFA5F4EEA2EFE99DEFE49AF2E297FBE49BFCDF98D7B46E8A5F1D A76C2BFFD58FFFF7B35E512E3F401DF6F8AFC6C08F312003AE9D866E654BBAC297E3F3BCFAFCCB CEC8974D4306E0D57FE5DE87E5E19B2623080000006F742CEBED9BF3ECABF4EDC4635D41080500 B9B973E3E494CBCB7EECE8AC5E572A231814EFE7B9ECE7A8DCD987E9E190E6DB8CEBE091F3E899 ECE192F3EA9BE4DB8DE6DD90D2CB7DD2CA7FE9E197DAD489D0CA7EDCD688EEE799F4EB9EEFE397 EEE296E9DB90F3E79BF6EDA0F5EEA0F0EB9AEAE092F9E79EE8EA9EEDEFA3F5E8A0ECE095F3E190 E4C473A06A22EDC97FF2E8A0F9EEAFF4EEA79E9B52080300050000312613342B096F693AC0BA86 EEE5B3F5ECB1EFE99CF2EC8FEDE191F2E8A0DDDB92E3DE83FDE496C3965EC09651FFF2BB7E7654 00050022230D0802010B0500706A43EAE5ADF3ECA7F1E89CF5EC9DECE398F4EAA4F6EBA9F8EFAC F4EDA9FDF6B0F9F2AEF6EFA9F8F1AAEEE89EEFE99EFBF7AAF9F3A7F1EBA1F7F0A9F8F1ABF6EFAB F2ECA3F1EDA4F4EEADF7F1B6F7F2BAF7F2BAF7F2B8F8F7BCFAF8BEF8F4C4F7F3C9F9F5CDF6F5BD FAFABCF2F2B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEFEFEFCBCBCB7E7E7E6B6B6B6A6A6A6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6B6B6B6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6C6C6C6C6C6C6B6B6B6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6B6B6B6A6A6A6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6C6C6C6B6B6B6B6B6B6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6C6C6C6C6C6C6B6B6B6A6A6A6A6A6A6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6B6B6B6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6969697070709A9A9ACACACAF1F1F1FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF6F6FF DCDDFFC7C7FEBEBFFEE2E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6FFD1D1FEBBBBFED0D0FEE0E0FFEEEEFFFAFAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1 FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF5E7F0E0B8E2C376DDBA61E6CC89F2E5C3FEFCF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF3FCF8DDF2E0B1F6EACCFEFCF7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9FAFFDDDDFF9797FE4A4AFE5A5AFEE5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FF 8A8AFF4141FE9191FEE9E9FFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAE4E4E4A5A5A56B6B6B 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6C6C6C6C6C6C 6B6B6B6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6B6B6B 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6C6C6C6B6B6B 6B6B6B6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6B6B6B6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6C6C6C6B6B6B6B6B6B 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6C6C6C6B6B6B6B6B6B6A6A6A 6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A686868767676A2A2A2D1D1D1F5F5F5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFD9D9FFACACFF6E6EFF7F7FFFB2B2FFE6E6FFFFFFFF FFFFFFFFFFFFFFFFFFECECFFD2D2FFB8B8FFB8B8FFCACAFFE6E6FFFCFCFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7FFF3D7FFEEC9 FFEDCAFFF5E4FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEF8F8EAE1E1A5EAEBBFFBFCF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFEE4E4F79696E06F6FEB6B6BFC C0C0FFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F6 EDEDEDEBEBECB8B8F26868FB5454FF9797FFD2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDECE6EE1D171E5D573D9CA67E5D774E4D876E2D577CEC165D1C66DDCD07CC0B75E 979539D2CB8AC1B78631270A463E10E3DD81DED979D8CF7BE0D68BD6CC82DDD482D7CD77D5CC73 D7CE76E5DC86E4D989E6DB91DED190E9DE9FE0D592E6DC8FD9D279D7CF6ED6CF6DE3DA7CEBE28A EBDE8EECE092F5E89CFDF0A0F1E68EFAF18FEFE77AEFE974F5EF7BF3ED87EAE390F9F6B4D1CC9B 4F4C2607050068682BE4E295EAE590EDE38FE6D586EDDE88F3E785E2D576EDE082F9EB92EDDF87 F0E28BF8EA93F1E28DE8DA82F0E289EDDF86E9DD84E5D981E1D57CE8DC83EDE189E3D77FEADE86 EBDF87E7DB82EBDF85F1E58CEBDF86F2E892E6DC87E7DD87EDE38EEEE38FF0E68FEADF8BF6EB97 F2E891EDE38DECE28EEBE18CE7DB87E9DA87F1E18EF4E48FE9D780D6C36CE8D37BFAE489E5CC72 D5BD60ECD377DCCA71E1D37DF6E892E6D884EADC88FBED99EEE08DEEDF8DEEDF8DEEDF8FEFDF90 EEDF8EF2E28CEEDF88F4E892EDE490ECE593E1DA8AE7DF8EFAEC9CE7D585FAE694FCE3909E7D2F C4A05BFFF1A8F3E192EBE28DE4DF8AF0E894F4E696DDCB82EDDC98D0C486B4B0741F1A000D0800 595717EAE88EE5E27DE7DC85EEDF96F4E39EF5E399F1E090E6D788E6D78FE0D98DE7E18FE0D17D E5CD75FFE38DFFE28FFFCD7FCD9853E0AD71D5A775B0845DD7AB83A26A40480F00520E00B46E38 D08E56FFC88CFFDB9FFFECAFF7F5BB68622B7F8A51FFFFC7F5E6ABEED2A0735428F3D2A951300A CEB482F0D294F0CD8CE2BD7BF2CD8BF3D398F0D295846A29C2A863FFFFB8FFE39EF8D293E5BC82 AD7C4597662FD5A366FED48EF7D486EED084F5DE91F4DF91EFDE8BF2E590F5EB94F4EC96EFE893 F3EC9BF6EB9DF1E69BF3E89EF8F1A3EEE799F8F1A3F7F0A2F0E99BF2EB9DF0E99BFAF3A5F7F0A2 F5EEA0F2EB9DEEE89AEAE69AEBE49AF0E79CF3E79DF1E097F1DC92F6DE93FFE79DCCAA637B550D A67E36FFDE91FEEEA4FFF3B4807C541F230FEAEFAC75704A0E02001E1100020000565B34EAF3B9 D9DCA38E8858605721ECE396E1DD86F8F9B075754806090122280ADADC98F7F4B8A29D70100B00 67652DEDEDA9E5E69AD5D48CE4E1A65F592720170FE3DBA7EFEAA9E6E292F3E998EDE090EEE193 F4E899F0E595F3E899EAE194EAE194E6DE91EAE297EBE398DAD488CAC476E0DA8BF5EE9FEADE91 DDD084F2E397F3E499F6E99DEFE698EAE295E3DD8FDFD587F6E49AE5E797EBF0A0EFE298E3D98A F0E48FF6DA87B58033F5CF84F0E497F9EAA8FDF4AD7B78320100003E3626484130151102111002 0A07007B7548F7F4C1E7DF99E8E28BEEE196E9DE9BE3DF9AE1DA80FEEA9CAB7B43C79B57FFF8C1 FFFDDC9298742F3025261F15080300231D00D7D299E5DE99F4EC9DE9E091ECE297F5EBA6F7ECAD F9EFB1F4ECACFDF5B4F7F0ACF5EEA8FBF4ABF2ECA2ECE699F2ECA0F9F3A7F8F2A8F3EDA4F6EFA9 F2EBA7F2EBA2F4EDA3F4EDA9F5EBAFF7F0B6FBF5BCFAF6B8FAF5B6F9F6B7F9F6BCF8F3C3F6F2C2 ECE9B3F0EEB6E4E2ACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEAEAEABABABA525252383838363636363636 363636363636363636363636363636363636363636363636363636323232313131343434373737 3636363636363636363636363636363636363737373535353232322F2F2F2F2F2F323232363636 373737363636363636363636363636363636363636373737343434313131333333363636373737 3636363636363636363636363636363737373636363333333030302F2F2F313131353535363636 3636363636363636363636363737373636363232322F2F2F2F2F2F323232353535373737363636 363636363636363636363636363636373737343434313131323232363636363636363636363636 3636363636363636363636363636363535353E3E3E747474B2B2B2EBEBEBFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFFCFCFFDDDDFEC0C0FED3D4FEE9E9FFEDEDFFF3F3FFFEFEFFFFFFFFFFFFFFFFFFFFF9F9FF EFEFFFEDEDFFE2E2FEC9C9FEC5C5FEF0F0FEFBFBFFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E0E1A3 F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFCF8EFEEDEB2E2C375DEBA5EE4C679F5EACE FCF8F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFFFAE6FFF3D0FEE6C0FEEFD9FFFCF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7F8FFCECEFE8989FD4D4DFD6565FEE6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2FF8A8AFF3E3EFE898AFEDFE0FFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8DBDBDB868686 3838383636363636363636363636363636363636363636363636363636363636363131312F2F2F 2F2F2F323232363636363636363636363636363636363636363636363636363636343434303030 3333333636363636363636363636363636363636363636363636363636363333333030302F2F2F 313131353535373737363636363636363636363636363636363636373737353535313131313131 3636363636363636363636363636363636363636363636363636363535353030302F2F2F303030 3434343636363636363636363636363636363636363737373333333030302F2F2F313131343434 3737373636363636363636363636363636363636363333334646467E7E7EBDBDBDF1F1F1FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFEAEAFFB4B4FFADADFFBCBCFFD6D6FF E6E6FFE9E9FFE9E9FFE7E7FFD5D5FFBFBFFFAEAEFFC4C4FFEBEBFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFFE9 FCF1CEF9E4BCFBEDD8FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEF8F8EBE1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFEE8E8F7A8A8E17171EB 5B5BFCB7B7FFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EFEFF0D8D8E2C8C8F09292FC4E4EFF5D5DFFCBCBFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD9C969DBCB6BE5D573DBCC6AE2D471EBE07DE9DC7DE6D97ED0C56BDCD07C A19743ABA857ABA564362F09473E11D0C97AEBE588DCD673EEE58ADACF7CF4E99ADBCF80E3DA87 E6DE8AE1D985E5DC8BDCD387E2D895F4EFB3F3E9ADD1C787DFD78CD8D37AE4DF7DD2CE6DE1DB7D F0E98DEFE78EEDE48DF6EB95EFE58DF5EB90F6ED8DF0E884F8F189EBE57AE6DE73F5EF8DE5DF8E FBF9B8E4E2AE807F5406060057551CE0DA97EDE595E4D880E2D577F2E684F3E686F3E68AEEE087 EFE08BEFE08DF1E28FF5E693F0E18CEFE189EEE087EDDF86EDDF87EEE088F6E890F6E890E3D57D F2E38DF0E28CEEDF89ECDD87EFE08BF5E994F1E693E5DA88ECE18EF6EB99F3E896EFE491EADF8C F2E795EFE491EDE290F1E694F2E794F6EA96F8E996F9EA95FBEC95F2DF88DCC770F5E086EFD87B D9BF62FBE689F6DC7FCFBD62DDD279EFE48BE5DA82F0E48FF2E693EADE8CE5D987E8D88AEFDF91 F2E295F4E496F4E592EDE18BEFE793E8E190EDE695E9E292F1E897F0E292FCE795FFF19ECFB461 997524FFE99FF7E195E6DA87ECEA90D9D87FF2ED95EFE190EED990F6E3A0C2B374A29B5E151100 1E1A01A1A15CECEC89DEDB70E9DF87F2E19AEDDA96EAD989ECDE82ECDE82EDE18CFAF19DF1E796 F5E99AFEF4A6FDE198FEDA95FFEBAAFFCA8FA86A32833F0B7930006D21019E4C1BAB5A29A35A25 F8C281FFF6ADFFE092F3DA8DFFFBB3C0BA7B3F4216F0F7C5F2E8B6EFCB9C7544178D5435652824 6B2C0397562B88461A7C3E0781430A8B4C1F86491E63280E87511BD8AA6DEECB86F7DD96FFF6B0 FFEEADF7E5A8DBAA6DBD8442C5863EEEB467FFDB8FFFEEA2FFE99AEBD784EBDD88F7EF97E2DC84 E3DD88EAE490F1E99AF4EC9EF7EEA3F6EFA1F6EFA1FAF3A5F4ED9FEEE799F2EB9DF4ED9FF1EA9C F0E99BF4ED9FF3EC9EF0EC9EEDEB9EE8E497EBE094F2E094F9DF95FDE69EFCD98FBD9A51734E05 BD974CFDE397F4E48EF0E395FFF9C2999269191606EAEBAF4644240A09004C4B2C322E204B492D EDF0ACF0F2B5595531857D54FBF2B2EFEC9AE4E69BD4D7AC222712272D11D2D6A65755290A0700 44421EEAE8ADDCDB99DDDC98ECEBA9ECE8AE827C46110800C4BE83F3EEACD9D388F1E697EDDF8D EEE391F4E798F0E495F2E798EEE597E9E093F1E99EF2EA9FE8E095F2EC9FF2EC9EF2EC9BF6EE9E F2E798EADC8EEEDE91F6E699F2E597E9DF8FE8E093EDE79AEEE498F4E295E8E996E6EC9AEBDE92 E6DE8CF0E28AFEDE86C59041BD9444F5E595FEFAB5FCF2AED3CE90191100413B32BEBAA97F7E5D CDCEA0B0AE86AEA97FF1EAB5F2EAA9F0E897E9DA94E9DF9FE4DF9DF1EA92FBE599A17037DDB06B E4D198B5AF8BECF1CFF3F5E6DDDAD5A19B7F9F9A6FF8F3BAF5EEA7EFE799F4EB9CF2E99EF7ECA9 F9EEB0FEF4B8F7EEB4FDF5B5F4EDA9EFE8A1FBF4ACF6F0A6EAE498EBE599F4EEA2F8F2A8F6EFA7 F8F1A9F6EFA9F4EDA1F7F0A3F9F1ABF7EEB0F8EEB4FDF5B9FEF7B6F6F1AEF6F1ADFCF7B8FCF8BE F4EFB9FBF6C1FFFDC8FDFAC5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6F6F6DDDDDDA4A4A4959595959595 9595959595959595959595959595959595959595959595959595959393938686868383838D8D8D 9696969595959595959595959595959595959595959595959191918686867C7C7C7D7D7D888888 9393939595959595959595959595959595959595959595959595958B8B8B818181898989949494 9595959595959595959595959595959595959595959494948A8A8A7E7E7E7D7D7D828282919191 9595959595959595959595959595959595959393938787877C7C7C7C7C7C868686929292959595 9595959595959595959595959595959595959696968D8D8D828282868686939393959595959595 959595959595959595959595959595959595949494989898AFAFAFCDCDCDF1F1F1FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3FEE1E1FECCCCFEC0C0FEC0C0FDD2D2FEF4F4FFFCFCFFFDFCFFFEFEFF E7E7FEC8C8FEBCBCFDC4C4FED6D6FEEAEAFEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEDECC7 E1E1A4F5F5E0FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF6E9F0DEAFE3BE61DEB243 E6CA81F2E5C3FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF7FEF0D9FEE9C3FFF1CEFFF9E5 FFFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F7FFCACBFE8D8EFC6263FB7E7EFBEAEAFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3FF8C8CFE3C3CFE7879FEC8C9FEF3F3FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEFEFEF C1C1C1969696949494959595959595959595959595959595959595959595959595929292848484 7D7D7D7D7D7D8787879393939595959595959595959595959595959595959595959494948C8C8C 8080808A8A8A9494949595959595959595959595959595959595959595959494948989897E7E7E 7B7B7B8484849090909696969595959595959595959595959595959595959696968F8F8F848484 8484849292929595959595959595959595959595959595959595959494948F8F8F8080807C7C7C 7F7F7F8D8D8D9494949595959595959595959595959595959595958B8B8B7F7F7F7B7B7B828282 8E8E8E9696969595959595959595959595959595959595959393939B9B9BB4B4B4D3D3D3F6F6F6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFFE7E7FFDADAFFD0D0FF C2C2FFB7B7FFB6B6FFB6B6FFB7B7FFC3C3FFD0D0FFD8D8FFE7E7FFF9F9FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FFFFF9F6F2D3EBE2AFF2ECCCFEFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFCF8F8E8E2E2A7EBEBC1FBFBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEDEDF7BABAE1 7474EB4A4AFCAEAEFFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFDFFFBFBFFFAFAFFFAFAFFFAFAFFFAFAFF FAFAFFE1E1EFBABAE28181F16262FE6767FF9999FFE8E8FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDDCD6DE0D070E4D472D5C664DDCF6CE9DD7BDFD374DED176D8CD74 D4C874BEB26A9992562E28026C671CCBC576D6CF81E0D986E0D980E7E07CEBE280EADE87D2C57E A79D53CEC777E8E191E7DF93F4ECA5EEE5A6EDE4AB908752736A2EE7E096E8E68FDFDD7CDAD578 D5D073E1DD7DEEEA87EEE986ECE684E8E280EDE786EDE789EFE48DFCF19DF1E68CFFF78FF1E980 EDE987E6E593EAE9ADEEEDC15755330600006E6633E8E196FDF593DFD56FEBDF7DF3E686F5E88D EBDD85ECDD8BEEDF8EECDD8CF5E695F4E591ECDE86F0E28AF2E48CEBDD85EFE189FEF29AF4E58E BFB05BEFE08EE6D784F2E390F5E693EFE08EFBEF9DF1E593EEE393F2E797F4E999F3E898F6EB9B F2E798F4E999EFE494F1E696F5EA9AF3E895F4E693F7E893EEDF8AEBDB84E8D47DD7C36BF9E288 EFD679E2C96CFBE183EBCF71CFBD60D0C76AEFE68AEAE087DDD37BF2E691F2E693E6D988E9D98B F4E497F6E69CFAEA9EE9DD8BE7DB88EDE491E8E190F0EB9BF2EB9BF0E796E9D888FFEE9CF6E38F AC8832DDB865FFEDA3F7E191ECE38CE9EB8FD5D97BEEEB93F1E290EAD489FCE5A1DBCB8B9F975A 1A14002A270BE1E098EBEB85E7E477E7DD84F8E69FEEDB95E9D97FF0E47BEFE478EBE07CF3E38A F4E392EAD98FF5E2A1F3E1A5FFE7B2D9B2816933088E4819A44F1B993601AB4B0EB97835F7CD84 FDD887D0B75EE2D576FFFE9EFAF89EFFF5A4715C1C957549D8AE858665393625035742184C3010 5D381AA87D58B78C58C69B5BCBA65FAF8A47BE9D617150247E4D2198592882430D88490DAA6D2E C88D4FF9C88CFDF2B6FFDB9AFFD98ED7B15A936F15D2AE60EDCC81FEE293FAE591F7E893F7EF98 EAE38BE8E38DE8E38FECE796EFE99AEDE698E9E294F7F0A2F5EEA0EDE698EDE698EFE89AF3EC9E EEE799EBE496EAE395EFE89AF0EE9FEDEF9EECE89AEFE296F8E096FFE59DFFDE98C0964E7B5109 D1A95EFFEC9EFFE796E1E181ECF3A2FDF5C6C3B48D1C0E00D1CD9ABABA9FA0AB84F9FFD54B4B3C 4B4226F8F7B7F1F2B5434121837A5BFFFECBE9E69BF0F3A9D2D6AE14180E515545D6DAB711100A 4B4A16D0CC8DFCFBBBDEDD9BDFDE9DF0EEB1FAF7BDD1CC93160F00736C3CFDF9B9DDD48EE7DC8C F0E08DF8E896F6E99AF2E596F4E89BECE297EEE59AEEE69BE6E094E6E094F6F0A2F5EFA1F3ED9D F0E899F9ED9DFFF2A3FDEC9EF9E89AF7E89BEEE294EAE294EBE599ECE295FBE99BE7E996DDE28E EDE092EEE692F1E388FEDD83CC9845AE8634EDDF8CDCCA83F0E4A2FEFAC08F86681F1912070400 1616006D7045D3D5A5F9F5C8E7E0B0E7DEA1E5DC90E1D28ECEC488827E3DF4EA93E4C77BBB8850 FFD5906F512D020000080D0067675AE3DBD6FBFADFFFFCD0E9E4A8EBE49BEFE898F2E999FAF1A6 F6ECA9F8EDB2FFF7BFF9F0B9FCF4B7FBF4AFF6EFA7FDF6AEF7F1A7F3EDA1F7F1A3F6F0A4F9F3A9 FCF5ACF7F0A8F5EEA8F3ECA0F9F0A2FEF4ADFBF0B1F7EDB0FAF0B2FEF5B2FBF4ABFAF3AAFCF5AF F9F3B3F4F0B1EEEBA5F3F0A9F3F0AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF0F0F0EDEDED EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEBEBEBDDDDDDD9D9D9 E5E5E5EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEAEAEADCDCDCD1D1D1D2D2D2 DFDFDFEBEBEBEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEE4E4E4DADADAE3E3E3 EFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EDEDEDE1E1E1D3D3D3D2D2D2D8D8D8 E9E9E9EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEBEBEBDEDEDED2D2D2D1D1D1DDDDDDEAEAEA EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEE5E5E5D9D9D9DDDDDDEBEBEBEEEEEE EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEBEBEBECECECFAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFD7D7FFB9B9FEB0B1FDB7B7FDCACAFDD8D8FEE1E1FF E3E3FFCFD0FEB6B7FEAFB0FDC4C4FEE9E9FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFA F2ECCDEAE0AAF8F5DCFFFEF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF5E3EED389 E1B643DCB244E7D18EF5F4DFFCFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF4F9E9CBF6E1B5FDFADC FFFFF1FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8FFCACBFE9395FC7374FA8F8FF7ECECF5FFFFFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4FF9696FE4848FC7273FDB7B8FDF0F0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6F6EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEAEAEA DADADAD2D2D2D3D3D3DDDDDDEBEBEBEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEECECEC E4E4E4D6D6D6E1E1E1EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE1E1E1 D3D3D3D0D0D0DADADAE8E8E8EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEEFEFEFE9E9E9 DDDDDDDCDCDCEDEDEDF0F0F0F0F0F0EFEFEFEFEFEFEEEEEEEEEEEEEDEDEDEDEDEDE7E7E7D6D6D6 D2D2D2D5D5D5E4E4E4ECECECEEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEEEEEEE3E3E3D5D5D5D0D0D0 D8D8D8E6E6E6EEEEEEEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDECECECEAEAEAEEEEEE FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FF E7E7FFC8C8FFB2B2FFAEAEFFAEAEFFB1B1FFCBCBFFE9E9FFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF1F1D6E1E2A6ECEDC0FDFDF1FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFCF9F9EBF1F1D4E8E8B1F0F0CCFCFCF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F7 CDCDE17676EB3939FC9E9EFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAFAFFEBEBFFD9D9FFCDCDFFC8C8FFC8C8FF C8C8FFC8C8FFADADF48585EA4D4DF55555FE9696FFD6D6FFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DA7CE7D97BDED072D4C66ADCCF74E0D47BDBD07ADACF7B D5CA79A39949756A246E6224BAB063EFE791D6D074CCC76DE3DE86DEDA80DDD97FDFDA87D6D08C A79F6C271F00625B1F877D43988E55B1A872988E5F403518160B003B300DD9CF93EBE5A0DAD487 EFE58FE6DB80E0D779F0E787F5EC8BEDE483ECE383E3DB7FF0E790EAE091EEE499F6EB9BECE080 EEE480E2DB7AE6E186EBE799E8E3A4D9D3A139321309020085814BFDF7B3E1D986E9DB7DDDCF78 EADA8AF1E196E9D98CE7D985E4D77CE7DD7EEBDE86E3D886E1D388EEE090EFE38FEEE18FECDE8C ECE08EEDE18FF7E997EADE8BECE08BEBDE88D7CB75DDD27AF0E68DEDE48BEBE08BE4DA85E8DD89 F4EA96F2E797F1E695ECE192F2E798F2E797F3E597F0DF91F8E696F6E495F5E192FFEA9AEBD684 EED682CFB75FF1DC82F9E085D1B95CD4C06AC0B162D9CB7AEEE292EEE393F0E695F4EA9AEEE494 EEE394F4E899F4E79BF8EA9DEADA8AE5DA89E7E190E5E594F0ED9FF8EEA2F6E398F9DB93FFEFA5 D4B668BE9A48FFE490FFE898FFF2A0F8F09DEBEB96E5E38EF3EB97F7E695F6DE8FFAE296CEBA71 938541201400281F00EBE4A0E9E085E8DD7AE8D77FEDD98CEDD78CEDDA84F2E480F6EB7EE9E176 E3DD84F1EA9FEDE39DFDF1B5FEE7B0C29462783808813505984811A2551AECA362B97730B67E2B F3D98BFFE59DD7C472C9B457EEDB7AFEF197D6C084432900835F1984491B8A5D394E481E9C986E 322C03DAD09AFFF3BDFFF1B2FCE29BFBEEA9FFFFBCA79E597D7A3AFEF5B3F0DB95EBD08AC8A35E B5844297571E9E521DB0612DDA9A61FFDC99FFF9AADECB76AB883AC19149E4B26CFFE99BF6E996 F1E58EFAEC94EBE48CE9EA94EBE89AECE39EE7DD9BE2DA93F7EEA5F3EAA0F0E89BEFE799E8E08F F0E799F9F1A3F2EB9DEBE396E9E396E9E99DE0E497F1EBA0F3DE94FDE39CFDDE9BB38C4A7E5819 CEAD6EFFEFACFBECA4ECDD92E7EB91E5ED9BFBF6BCE2D8A71A0E006F6950F0EFE5E9EDDD737A5C 0B0B00A5A16AEEEB9BF3F6AF474625241E10C4BBA4C0BC9B94926E2B2D16000200AAAC8DDCDEB3 C7C594E3E1A6F7F6AFE1DE97E3DF99DBD690EBE5A1E7E19FFFF8BA746D39191300DED8A3F3EEB8 EBE19EF8EA9DFAEA9FF7E89CF4E59AF1E297E9DB8FF6E89CF4E99DE4D98EEAE092EEE499F6EAA3 F4E8A0F4E89CF2E798F6E89AFEEFA3F7E89DFCEBA1F8E99EF1E395F0E392F2E595F9EDA1E5E397 DFDD90F1E498F7E796F5DE87FDE18AE7B566E6C075B29C562F1C009C8E51F9F6BCF3F1C2E2DFB7 6056312C220E2B2C15161C004D4E27E6DCA3EDE19EE9E293F7EFB2A69D720E0600F9E8ABD8B475 B7844AFDDFA05346240C1901586D513E47321A14004A4131A59C76EBE1B1F8F1B6FAF1AEF9EFA8 FCF1ACF4E9A7F7ECACFFF6B7FBF0B2FAF0B0FAF1ADF8F0ACF9F2ADF0ECA5F2F1A8FCFAB0F2F0A7 F5F1AAFBF6B0F3ECA6F0EAA4F4EDA5F5EDA5F7EFABF8EFAFF8EEB0F8F0B0FDF5B3FCF6B2F8F2AD F6F0ACF9F2B2F9F4B3F1EEA1F6F4A3F7F5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFB FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAF8F8F8 F7F7F7F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAF8F8F8F6F6F6 F6F6F6F8F8F8FAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAFAFAFAF4F4F4EFEFEF EFEFEFF1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F3F3F3F6F6F6F7F7F7F6F6F6F6F6F6 F7F7F7FAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAF8F8F8F6F6F6F6F6F6F8F8F8 FAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF9F9F9F7F7F7F8F8F8FAFAFA FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF8F9FFEEEEFFDADAFFB3B3FD8282FB9393FC AEAEFDADAEFDBBBCFED1D1FFE5E5FFF3F3FFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFCFDEDD9FBE2BBFDF4D1FFFDE8FFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF5 FBF5D3F2DD93E0B440DEC362E3E0A4F5F5E0FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF2ECEAC0E6E2AA FAF9E9FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FFC8C9FE9092FC7171F98D8DF1ECECE5FFFFF0FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F5FFAAAAFC6767FB8383FBB8B9FDF0F0FFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB FAFAFAF8F8F8F6F6F6F6F6F6F8F8F8FAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB FAFAFAF9F9F9F7F7F7F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB F9F9F9F6F6F6F6F6F6F7F7F7FAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFAFAFAF9F9F9F6F6F6 F3F3F3F0F0F0EFEFEFF1F1F1F1F1F1F1F1F1F3F3F3F5F5F5F6F6F6F9F9F9FBFBFBFBFBFBF9F9F9 F7F7F7F6F6F6F7F7F7F9F9F9FAFAFAFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF9F9F9F7F7F7 F6F6F6F7F7F7F9F9F9FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFFFBFBFFF6F6FFF2F2FFF2F2FFF2F2FFF2F2FFF6F6FFFBFBFFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2D8E3E3AAECECB6FCFCDFFFFFF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCF5EDEDC7E4E4A8F5F5C8FCFCE5FFFFFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F6F6F7DCDCE07878EA2929FC8888FFDEDEFFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF9F9FFE7E7FFBEBEFF8F8FFF6F6FFE6565FE 6262FE6363FF6363FF5252FD4343FB5252FD8888FFCFCFFFFCFCFFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9CE72D7CB71DDD278E0D57DD6CC77E3D888EEE496 A9A05470671D9F974DC1B76FE5D58BE6D686D7CD72D5CE6FECE885DCDA78EBE98FFAFAAFDFDEA1 C9C89A605D3B070100766E41746C3F3F370A302800302500524721A69B6C483B25746734F4E8B5 D7CC93F0E190F3E389EEDE86F8E991F6E791FBEC99F1E493F2E796F6EB9BE9E192EFE798EEE694 EEE48CEEE589ECE387EEE387EEE58AEDE48FEFE69CDBD3951B1700151100A19E7CF7EEB4EBDD85 F2E295EBD994EBD998E3D387E8DC81E8DF78E8E177ECE384F1E597E7DA97ECE094EFE492EFE494 E8DD8FE4D98AE9DF8FE8DD8EF0E594E2D883EEE58CEDE389D5CC70E1D87CEAE286EFE58BECE289 E7DD86E6DC87E9DD8CE7DC8AE4D988EDE290E8DD8CEFE291FBE89BF6E396F5E296F8E499F5E196 F8E296C4AF5EE7D37DF1DD84E8D376D6C163DAC474E2CB86ECD990F0E096F5E89BECE293E3DB8B E5DE8DEAE392EEE695F0E897F7EB9BFEEB9EF2E496E6E291E7E999EEECA0F5E9A1F4D895FFE2A1 FFDC99997127E1C172FFEB99FAE995F8EC9BF2EB9DEEE99EF0E99FF5E99BFEEA9AF8DE8AF6DC89 D7BF70AE984E271700372B05ECDEA4EFE095E6D680F5E089F1D987F8E193EFD889CEBD66DCD16C E8E178DCDE8AE3E49FF2E7A9F2D59DAE7A46883E099C4309AA5112C97C39F5BF78FFF0ABF0D68B E0B354A67429D2A66FFFE9AEEEC174DFAA53A77E2A311308472F05B29A45F1D093B8906A6D6445 4C4A207D7B45EBE7A5FCF0AAF5E49FFCEBAAF7E1A1B8AC696F6C23E8EEA0DCE994E6F49CEEF5A0 F4EE9EFFE9A0FCDC9DD9945DA14F1D752800A26830E8C586FFE9A5FBDD96E8B06BAB6D2BDAB66E FFEE9FF9E992FEEF97F0E58BF0F09AEEEBA1F3E9AEEDE0A8E5DC9BF0E6A1EAE099EBE297E9DF90 E3D888F7EE9EECE394E5DD8FF1E89DEEE89EDFDE96F7F8B4F2E69FF1D68FFFE19CB68B4D7E561D DDBE8AE2D09BC5BD84F6F5B8EFF0AFE8E799E4E193B1AF68EAE8AF322E111410062C2724322D2B 0000005D5B34EFF0AADEE18AF1F4A69B9A64040000120C0B161015070503090600858558EAEAAF F3F1B3F8F3B8E7E1A2DFDD93EEEB9EDFD88CD6CF82EBE296DED58CECE29FE4DBA1322C183E3B0F FCF8D1EDE5ACF9ECA6F3E49EF4E69FFDEFA6FAECA1F1E195F7E99BFDF1A2E9DD8FEADE90F0E499 F4E5A3F8E8A6FFF6ADFFF8A9F7EE9EF6EDA2FAEEA7EEE19AE5D88EFCEE9EEBDA85F3E38FF5EDA4 ECE59EEBE29AF2E398FAE496FFE493FFEC9BDEB66DE0BE7F6D54211A0904BDB682EDE3A4D4D590 DED694D3BD82B69B65EBE5ACC7CF95A7A871EEDC9EF8E49BF4EB9BEFE7ADC8C2980D0600C5AF88 DDB783AF7E3EFFFCBF7F7F51000E00A2C09FF8FFDAD1CB967E75571309004D431DE8E1B2FFFDC7 FFFFC3FAF0AFF6ECA7F5EBA6FAEFA8FCF0AAFAEDAAF5E9A9F6EBABF8F0AFF2EFACEFEEABF5F4B1 FBFAB7FDFBB8FDF7B5FDF7B6FBF2B1FCF4B3F6F1AEF6F0AEFCF7B5FCF6B5FBF6B6F9F3B3F8F3B3 F4EEB0F6F0B2FDF7B9FBF5B6FEF9AFFFFBADFBF5A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF3F3F3C2C2C2 8C8C8C7B7B7B7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7B7B7B9B9B9BCBCBCBEEEEEEFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFF0F0FFD6D6FFB7B7FD BFBFFDCFCFFECFCFFEDADAFEEAEAFFF7F7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFDFFF6ECFEEED8FAECC2FBF3D3FEFCF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFDFFFEF0FAF2CCEFD788E4C868DEC665E7DEA4F2F1D7FCFCF6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1EAEABD E2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5FEB4B5FD7979FB6767F98E8EF5ECECEFFFFFF6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF6F6FFAEAEFC6E6EFA8586FBB7B8FDF0F0FFFEFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8E9E9E9 C2C2C2A3A3A39595958A8A8A8080807E7E7E838383999999AEAEAEC5C5C5E4E4E4FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9ECF0F0D0ECECBBF0F0C3F9F9E7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF3EAEABFE1E1A2F8F8DBFFFFF3FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF4F4F3D2D2D27777E13131FB7F7FFFD0D0FFF3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FFE0E0FFA0A0FF7C7CFF6F6FFE6D6DF6 6E6EF06D6DF86D6DFF6D6DFF7575FF8383FF9F9FFFC6C6FFECECFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2C567D7CA6DDFD47AE1D67ED7CD78E0D584 DCD383C7BE70C9C075DED58AD6CD81DFD386DACF7DE3D983D6CE75DCD77ADDDA7EE8E690E0DD94 E1DFA0CBC8952623042E2800DBD390F7EFAEE8E09FDCD493D9D292E6DE9EF5EDAC8E87510D0500 9C9554DAD18CE7DD80E8DC79ECDF85F4E696E7D992F7E8A6F8E8A7F4E6A1F6EB9DEEE48DF2E98B ECE384F3E990F0E78DEEE58AEADF83E7DC82E6DC84F7F4A5ECE5A0AAA46A1410001E1B00C7C086 E6DB89F9EC9EF1E399EDDF93DFD381E5DA7CEFE682F3EA84EEE483EEE28CEFE293EADE88EFE48A F1E58FEDE18FEFE391F5E89AE4D789E8DB8EE5D88AF6E99AF4E897EDE291D2C575E3D786E2D685 DED180DBCF7DD1C573EFE390E8DC8AE4D884EADE8AE4D882E9DD87EBDD87F0E18BF6E792F5E590 E4D47EE0CF77C2B256F6E786F5E480EBDB72C5B44CE8D577F8E48CECDB83ECDD84E8DD85DDD47C E3DB85E9E18CEDE593F0E595F2E698F5E699FCEC9EF2E493E8E391E8E797ECE99AF2E299FBDF9A FFE8A3B88C48B48E45FFEB9CFAE491F1E08EF3E798ECE49AF0E9A3EFE7A0EBDD93FCE699FBE092 DBC072D7BE73C6B36D2C1E00352E0EEAE4AFEDE6A0F3E897EBDB87F1E08EF8E699F2E094D0C16E DFD479F4EB8BEAE592E8DE98FFDDA27036077B32017F3202AC6826CE974BF1C576FFE79CFFE6A0 FFE59CFEED8FF3D382BC7D42DB8A5DD283488642005E2F053E1F00E8D6A0FFFFBAECD698534010 32280B4C390CFFEEBAFADDA2F5D596FFE6A7FAE4A5E6DD9D796625F0DE99FFEDA5F1DB90FFF1A3 F7DF92FFE89DD9C075DDC177FFECA5F1CE8ACEA665875819683402C5894DFBDF9DFFE8A0CEAF62 C18C48D9AA60FEF4A0F9F596EDE187FFEE9CF3EEA2E6E0A1DDD599F1E6A6F1E6A2E7DD96E6DD92 E7DE90E6DE8EF5EE9CE4DB8CDED688EEE89CF1EBA1E8E19AF8F1A9F5E29BFFE79FBA944F7F5718 E0BF88DFC694251800120E00807F48EFF0B2F4F2A6D5D285423F00E1DEAF8F8B6C0A0600060100 060100383410DAD7A1F7F5B1DFDD8FDDDF8CCFD08E34320B0803020D09000E0B0454522BE9E9AD E7E6A0D7D38BE3DE9BDBD692DCD78EEEEB9EE6DF93DED586DCD386D9D086E4DB95E8DFA1D1CB8F 120F05737144E0D99EF7EAA4EDE19AE9DE95EDE297EEE296EDE495E8E090EEE997E1DD8BDCDB87 E0DD8CEDE49DF6ECA6EBE396E2DE8BE9E895E9E998EEEDA2F6F5ABF5F3A6ECEA97E0DD83ECE78C F2E594F6E99AF5E99AF2E493F6E18EFADF8BFFE190EACF85C3AE6E2B2110181707C9C194FFF4BC EDDD9A4F39066E4E17A7844DEBDEA2F0EFB4FFFFCAFFE5B3FFDEA8F8E8A7F4E8A4EEEDB04E4F33 2A2000A48850DBB26EFFF5AECEC1811C220F252E06D9D195FFF6B8FDFACED8D9AE535623A8A872 F4F2B6D9D695FAF5AFF8F0AAF5EBA4F5E7A2FAEBA6FBECA9EFE19FEFE1A0F7ECAAF6EEAAEDE8A4 F2EEA9FDFCBAFBF6B2FDF5B3F5E9A7EFE1A0FCF4B0F9F4B0FDF9B5FFFCBAFBF6B4F9F4B4F3EDAF F7F1B3F8F2B6F8F2B6F7F1B6EFE9AEF1E9ACF3EBAFEBE2A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E8E8E8 8A8A8A2323230808081616161F1F1F2424242020202020202020201B1B1B505050A3A3A3E1E1E1 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFCFCFF FAFAFFFBFBFFFCFCFFFCFCFFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFDF9F0F3E4B5F5E8C1FCF9EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFDFFFFF5FDFAD8EFD788E0B845DCC869E7DFA7F8F4E2FFFEFEFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1 EAEABDE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FFA1A1FC6161F95E5EF98F8FFBECECFD FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FEADAEF76A6BF17E80F7B0B1FEEFEFFFFEFEFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0 D1D1D18787875050503D3D3D2F2F2F1E1E1E1A1A1A2222224040405E5E5E808080B7B7B7E8E8E8 F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF6EEEBC6E7E3ADF4F0D5FFFDFBFFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBF8F8EAEBEBC3E5E5B1F9F9ECFFFFFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF2F2F1CCCCCC7F7FDC4444FA7A7AFFC1C1FFEEEEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFE4E4FFB9B9FF5D5DFF4D4DFE6D6DFA 8D8DEE9B9BE69E9EF39D9DFF9D9DFFB7B7FFD7D7FFEFEFFFFAFAFFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D677E2D577D5C96DD8CD73E5DB82 E9DF89E5DC8AD8CD7EB8AF60BDB466DCD386DAD284CFC878E6DE8CDAD480E1DC87E5E18DD5D080 CEC980DCD8938C87470A0400A09955EBE394DAD384DFD789D4CE81CDC67BD9D288DED991DDD990 76702F201C01BAB66AE3DB82F1E689EADE8BEFE198F3E5A2FBECADF8EAA9F3E6A0F7EB9BF1E78D F6EC8AEDE582E2DA80E9DF86F2E98EF1E68AE9DE83EADF86DAD07EE8DF98EDE8A98B8752060300 575127E5DC93E2DA8DEFE595ECE38EEDE48AE6DC80EFE587F3E88AE9DE80E8DC7FEDE183F0E584 EDE282E5D97CE7D981EEE08DE9DB8CF6E89AE7D88EEBDB92EEDE95DFD084FFF6ABEDDD97FAEAA4 F1E199ECDC94EFE093E8D98BF1E391EDE08CEEE18AF1E48CE6D980EBE189E6E08BF6EC99F3E996 E9DF8CF9EC99CEC26DEADE84EDDE82E6D876E8DA75D9CB63E0CF67ECDA75D6C861E4D571ECE280 E7DC7EEDE58AF4EC93F4EB97F2E697F4E799F4E497EBDB8BECE18EEAE492E6E291EAE596F8E99D FFE59CF8D48D8B6319F3D385FFEF9CF9E490F6E495F5E89DEDE69EF6EFAAFAF0ACF2E39BFAE49A FFE79AD4B86FE3CB83DFCC8A3D3413131400DFDFAFF3F1B1EBE799EAE28FF0E693EBDE8FF6E79C F5E597EFE290EBDB86FBEFA2FDDA98A86D32742A04813403BB7739F4C77DFFEC96F4E48AFDED9B FDE69DFCE29BF6E794FFF09CFFC07BB05023832D00BA793E7E4F2C86622BFFEDAFFFF6C3878648 4D4A0F483517E5C393FAD09EF7C28DE8B680D9B67DBEA76B63511BB59C5BEDCF8EEDBF7BFFD08C FFE29EFFDE9AFFEAA3EACE85DDC97BEDEE9DEBEB9AF8F0A2F6DE97C69256894208A15B1BECC476 FFFEAFEDBD77BB8039D5AA59FFF699F8EB8FFEEA95F3E196EFEBA5EBEBA9F4EAA7F5EBA5F1E79F F2E99DF3EB9DEEE797F0E998F1EA9AE9E394E9E396ECE699F4EAA1F3E099FFEBA2C6A85F916E27 D3B172FEEAB3655624201A010D0B001C1C05D0CE96EEECA2C1C0743C3A01DEDAB2DDD8B78C8963 5C5A3876753FD2D18CFFFEB9DDD394DED692E0DF89E4E396BDBB838D896187845FB2B083DFDFA1 D9D98DE4E290E6E191F1EAA2DFD790E8E198F2EBA2F0E79AF2E899E2D889E1D88AECE49AECE49F F0EBACAAA76A34330EBDB673F3E99FEEE59AE6DE91E0D98CDDD789E9E494E0DE8CE5E692DEE08C DCDF8BE2E38EEDE097EEDF94F0E494F2E995F0EB97ECE999F1EFA7E2DD95E9E49BF5F5A7EFEA94 E9D780FFE08EFFD889F7D083EEC478E4B668DCAB5FDAAA62BC8F4F704C1C1B0600170A03927749 B58D47B1984F8262272E01002500004B331D51452A856C48C09267CB9863DFBB78E0BB77F2D69F D4C49A1F0C02351C00BD9562FFDFA3FFF0B5CFC78DA49D65E2D194EED998E2DBA6E7E6B0EFECB3 E8E6A8EBE8A5ECEAA7E9E79DF1EDA3EFEAA0EAE49BEDE69EF4E9A2EFE09BEDE09DF9EDA8FAF0AA EFE7A2F2EAA5F5ECA5E2D894F1E3A0D0C07BD0C07DF4EAA6F0ECA6F4F0AAF6F1ADF2EDABF6F1B1 F6F0B2F9F3B5F8F2B7F8F2B7F6F0B7EEE7B0E4DBA5EEE5B0ECE2ADFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 E7E7E78585851D1D1D1515154849487B7B7B9494948181817D7D7D7D7D7D7A7A7A969696C2C2C2 E8E8E8FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1E8E3AFECE8BBFAF8ECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5FAF2CCF2DE96E0BE4FE7C369F9DEB5FFF4ECFFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFBF3E9E9BDE1E1A5F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FF9F9FFB5F5FF95B5BF98E8EFB ECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5FBA5A9DD555DC95F63E39191FDE8E8FEFEFEFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E6E6E6BBBBBB7272725050505F5F5F6B6B6B6363636161615D5D5D4A4A4A3838383232325B5B5B A2A2A2DCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF9EBD2F7DDB3FCE1C0FFEDDBFFFBF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFDF4F5DFE8E9BCEEEECCF7F7E6FDFDF9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBF0F0F0AAAAF56969FD7D7DFFB3B3FFE7E7FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFBBBBFF7575FF5757FF7373F7 A8A8EBCFCFEBDEDEF5E1E1FBE1E1FFE0E0FFEAEAFFF5F5FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBCF6EDDD070DED173DBD073 DDD278DAD078C7BD68CCC26EB9B15FA9A150C5BC6EBCB86CC2BC70D5CF82CDC77AD1CB7EBCB66C BAB46ACEC87E979148544F05766E29DAD083D8CD7CE4DB8AE4DC8BE8DF92EEE69CD0C982F4EFAB E5E2A0E1DD9F3E3C103A370DC7C079EEE69BE1D98FDAD188E5DC91E9DE90F7EC9EF5E999F9ED98 F3E98FF9EF94F5EA8FEEE68EE9E087F0E68BEEE388EFE387F4E990E8DF8BD8D183EBE49FFBF6BA 64612D1C1700BBB579E6DF99F6F19EE1DC81EBE589EAE18AEFE493F4E796F1E48DF3E786F6E982 F1E57EEADE7ADED170E1D478EDDF89E4D584F5E597EEDE90DDCD80EBDB8EECDC8FE0D085E5D48F F2E19CF9E8A2F5E59CEFDF93EDDE8DEFE08DECDE87F2E48CF5E78DE6D87FECE18FF9F2ABFFF9B3 F2EBA6E3DA95CEC480E0D68FF8EDA4B3A759DCCF7EDDCF78EADB83ECDE78F0E275E4D669EFE379 F9F089F3EB89EBE286F2E88FF1E791EEE290F5E899F7E798E9DA89EEE490EEE894E6E08DEAE08F F8E798FFE99FC5A559B79546FFE896F4DB87FFEE99EEDC8CECDF93ECE39BF0E8A2F5E9A3F9E79F FEE69AF9DF92D4B96DF3DB95F7E4A37C7646070C00AEB385FAFBC1E6E69CF6F3A0EEE795E3D888 EADC8EEBDA8FEDDA8EFFEDA3FFCD88A25B1A823A00B36D35B5773BF8C883FFEB98EFDE85E9E084 F8EE9AF1E196FEE6A3FFF1AEF7C777964E08984C15E6AA75AA7A4E471A00B58746FBCF8FD2B594 484E142E340084683CD4A26B955520914A16733603663C0F412A006F5F23896E2E82531098520E AE6A26B37431DE9E5CFFC582FFE39BFDEA9CE3E08BECF49CEAEC98F9E799FFE8A4FCC283A16E22 8F6112DEB064FFFCB4F5CE85B57C30C7A14BFBF193FFF399F3DA8BF4EDA2DBDF95E2D993EAE098 F1E89DF4EC9FF3EC9EF4ED9DF8F1A1E9E493E8E292F1EA9CF0E99BF6E99EFFEBA2D1B1669B792F E0C078FFF9B8DACD94272301E0E0B4AAAB82151305D6D0A0F1EDABC3C07E393504ECE9C0DCD9B0 ECEAB5DBDB94E6E691E7E38ADAD282F6E9A8E6D898E3DF86C7C56FD6D38DEBE8AEEFEDB4F2F1AE E7E797E2E188D6D277EFE894E3DA8FEFE59EECE29BF0E79CEEE497F4E99BEFE394E6DC8BEDE696 F0E89EE7E19AFEFEBBE7E5A4D9D48AF3EB9EF5EFA1EEE89AE0DA8CDAD788F0ED9EEDEA99ECEA97 E0DF8BE8E793EBE893F8E89AEEDD8EFBE998FFF7A2FCED9CF8E59DFFF8B6B69F61806222FCDC98 B7954BC09345E3A152C48235AA6A219F611897581191510A945513A0652B764719250700190402 8C673CBA8C488F6F28AA83478F5F32733F2432140022100014000064320E874E178A5915884E0A 9D683146210D1801001500004E230AF5C292E6B77DFFD89AFFEAADFFECADFEE7A9FBEDB2FBE5AB FEF0B1ECDA97FEF8B3EFE59DEFE9A0F5F3A8F3F4A8EDF0A3EDF3A6F4F2A8F2E69EF2E59FFBF1A9 FCF2ABF2E8A1F5EBA4FFFAB2F4E7A1F0E29CF0DF9AF4E4A0F8EEA7ECE89FECE8A1EFEAA5F0EBA8 F7F2B2F6F0B2FAF4B8FAF4BAFDF6BFFFFAC3FCF5BFF3E9B1FEF6BBFFF9BFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9E7E7E7868686232323353635838383C0C0C0DEDEDECCCCCCC8C8C8C8C8C8C7C7C7D2D2D2 E2E2E2F2F2F2FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF0E4E3ABE8E8B8F9F9ECFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFEF0FBF3CFEACA70E8BD5BF0C77CF9DDB4 FFF3E5FFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFFAF6FCF3E1F1ECC2EBEBB9FBFBF0FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FF9F9FFB6565F96C6CFA 9F9FFCEFEFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F7FBB3B8E16970CF5E61E58282FCE5E5FE FEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFECECECCECECE9F9F9F909090A3A3A3B3B3B3B1B1B1B0B0B0AAAAAA9292925B5B5B252525 2A2A2A6E6E6EC5C5C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFFF3E6FCE6C9F7E0B7F6E5BD FEFAEBFFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFEF5EAF5E8C7ECE1AFF5F0D5FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAF9E9E9E9B5B5F18080FD7B7BFFA5A5FFE1E1FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFE7E7FF9595FF5050FF7B7BFF AAAAF4CECEE4EAEAEAFAFAFCFDFDFFFCFCFFFCFCFFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9CB6AE2D473E7DA7A DCD071D2C76AE8DD83D4C970CCC26BC0B5609287338A8332BCB96DBAB76DBAB66EC2BF78D2CB86 C0B974938C47716920A0984BD6CE7DC1B966AA9E52AA9B559B8D47A598537F75317F763781783D 868149A8A471D5D1A2CDCA9D201D0B544C2BB3AA77E9E1A4E6E095D9D57AE4DF7CEBE77FEEE784 F4EB8FEADD8CF1E299F0E299F7EE9AEDE48BF1E88DEDE287EBE182F4EA8EF4EA93E5DC8BDFD88D E1DE98EAE5A54C46174C461EC7C184E3E192EAE78FE0DA84EEE498F3E5A2F3E4A3F6E79AF9E98D EEE277DFD36CE8DB7BE7D97CE8DB7FF4E58EF1E28EEFE08CEFE08CE0D17DF2E48DF4E68EDCCE78 EBDB8DEBDB8DF8E898F2E291E7D884F1E28CF1E38CE9DB84F0E18AF4E68FEBDC85F8EDA4C6BD8B 59512D3C340D2A2000281D00594D25D8CB9AC8BB85493B0887783EF7E8A8EBDB86E6D773F6E685 F0E484EEE486EAE186E8DE86F1E791EEE28EEADB88F7E794F6E693EFE48FF0E691F2E792F3E793 F4E693F6E391EED688A98D3EF3DB8AF9DE8AF4DC86F0DC86E6D581E6DA88F2EA9BEDE59AEDE297 FBEA9BF4DC8AEACF7DDCC273F8E39AEDDD98B2AE7B1B1F0852572CECEFB4E1E29BF1EE9EE6DF8C E8DB89F5E193F7E196FFE69EF6D28EAA5A18A144089F5617EDBD79E4C67CFBEF9FFCED98F5E089 FDE791FAE695FDEFA3FFECAAEA9F6DA35813915F0DD5BB64FFFFCB846F4F4E2818C5894AC4874B 673B27242000302C027E5915865313905317A16329C5965C805C2BAE9860DACA8DD9BD7CAC843E E5A860BB84399A6B21834C048D500BB37731E0AF66FEED9FFFF6A5F8EC9AF4E292FEE699FDE697 FCE48FAE8131935111D1A25BFFE599F9C77BC48434D5AD54FFF296F8EA94D4CC7CC9C579D8CD84 E0D68EEDE499F1EA9DF2EB9DF2ED9CF4EF9EEEE797ECE494EEE596F4EA9BFFEBA0E0BB71AC873B DFBE72FFEEA3FFF1AFA3A1693C4010FFFFDF90946E1C1908D9D2A8F7F1BD908E5E393618DFDEAA DAD99EE0E098DFDE88ECEA8BDAD577EDE28EF4E39DE8D996E7E089E5E08ADAD789E6E29AE0DE93 F0F09DE7E68CF9F699E7E286E7DD89EEE298F4E6A0E7DA92F4E89EECDF93E7DC8DF7EC9CEDE491 F4ED9BDED887EAE698DFDA8EE3E095D8D587EBE795F3F09EEEEC9CDFDB8DE2DC8FEFE79AFAF0A1 F2E496E1D183F9E699FBEB9BF4E896FCEF9AF2E590E7D27FD0B166AB8544B6834D692C17450200 B76A37AA5621B66B2AD9A555CEA253D0A75ADDB367EAC176F4C87EFFD58EF7CD8EA07E472E1806 160705C2AC8EFFE9C5FFF2C1FFFFD0C59C65C39863FFEEB4EEE6AECCB682F8CFA2FFD0A1E6BE85 EAB968EABE6F5535181A010077573D7E4E2C85420DB05E1BA24700BF631BDF8641E9A464ECBA80 F7C58AFFDFA3FFE9A8FFF3B0F9E6A0FFF3AAFBF5A8F3F3A5ECF4A6EEF9ABF5FAAEF4ECA1F4EBA2 FBF3A9FAF2A7F3EBA1EAE398E5DD92E3DA91E4D990EFE399F8EBA3F9F1A9F0ECA3ECE8A1F2EDA9 F4EFABF5F0B0F5EFB1F9F3B8FBF4BCFDF6C0FEF8C3F6F0B8F4EEA7FAF3A8F9F2A8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9E7E7E7858585262626525252ADADADE2E2E2FBFBFBF4F4F4F3F3F3F3F3F3F3F3F3 F5F5F5F8F8F8FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF7F6F7F4F4F4F2F2F2F2F2F2F2F2F2 F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F5F5F5FCFCFCFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E5E5AFE9E8B9F9F7E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECF4E0ADEBC872E7B951 EFC373FCDFBBFFF2E6FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFCFEF1E3FDE6C7FAEFCAFAFAD9FEFEF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1FE9B9BFC6A69FA 8282FBB7B8FDF3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FEC8CAF6898CEF6D6EF48080FB E5E5FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFAF1F1F1E5E5E5E1E1E1E7E7E7ECECECECECECECECECEAEAEAE7E7E79C9C9C 3E3E3E1A1A1A4F4F4FB6B6B6FFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF6F6F6F3F3F3F2F2F2F2F2F2 F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F8F8F8FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFCFBFAF4E4EDE6BB E9E4ABFAF9D4FEFEECFFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6ECFFE7CFFCDEB9F9E0BBFCF1DFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3D1D1D1AFAFE08F8FFA7474FF9494FFDADAFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFEDEDFFC0C0FF7676FE4949FD ABABFEDCDCF3E2E2E5EDEDEBFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D371E5D776 E2D475E0D374DBCF70E1D579E6DB81DDD279E1D77FCEC46BA59E4C6B6A1F7D7C3364621E747032 8B85453F37006C6424B0A75EBCB364E0D781D1C86FBFB265D2C07CC9BA76D9CB88A89D5C9B9153 ACA3686C6731292401221F129B976EB1AE892019042E260FB6B078EEE99EDAD77BDFDD75F0ED80 E6E17AEEE78BEBDF91E7D998F0E29EF0E894F0E68EF4EA8FF3E88EF6EA8DF8ED92F1E78EF0E591 E6DF90E4DF95F0EAA4C3BE8D231E016F6B34D6D48EEAE797E6DF94ECE2A2EDDFA9EEDEAAEEDF9E E8D886E6D975EDDF82EEE18CE5D984DACD79EBDE8BEADD89F2E58FE6DA80E8DC7EF5EB8AEDE37E E1D674E2D77AE6DB7FE8DC81E6DA7DE4D87BE6DA7FEFE38AE5D883ECDF8CE4D688FBEDA0C2B576 1F14013F341A8C8162382D1106000032250E6F6139BBAE80A79A72473B0C766933C4B570ECDB8D FFEFA2ECE092EEE496E3D98CEDE396FAF2A2E7DB89F8E995EBDC85F8E890ECE28DEAE08DF5E896 F9E896F1DE8CFFEB99AC9543BEA853FFF09BE5CF79DCC771F2E088E3D47AE9DE86EFE892F1E895 F6E994FCEA94EDD57CDDC46AF4DC87F2E090F4E79DDBD59D413F180F0E03A5A56AF0EDADEAE499 E6DB8AFAEA97F1D988FFE79BFFE49EAE7936883400BA621EF4B86FECCD80EEE190F3EC97F0E28C F7E08AFDDE8CF6D589FFEAA2D7B172AB582BA1601FEAD374FFFFA4E3E4B2372111DEB795E1A76E 9C5E29572811331F00644D16D2AA63E5C57DFCDF97FFF0AAC0A865927B3DECD99FFFEEB2F5DC98 FEE698FFE08DFEE08DF6E190E5C97AC4994D96641B8A520BAE752EEBBE76FFE094F6D989F6E893 E8DF86FFF196F7D480AA7331733D00CD9E55FEE79AFBC373B37825DAB75DF9F99BCBC16CEEDE92 D8CB80E3D98DE6DD90F3EC9EE9E395F2EC9DE5DD8DEFE696ECE092F1E294F7E699D4B86BCAA256 E2BD6FFFE598FFEBA2F6EDA960602D565F30FFFFE3454A2C3D3A16EBDFBCE4DCB52C2807615F38 DADB96DDE091E4E790F0EE95DCD97FF0E993E4D988E9DA8BEDDE90FAF2A0DBD385E7E194EDEA9C F5F2A2D8D780F3EF95C9C46ADFD981EDE294E8D993E7D894EDDF99F7EBA1F2E699F0E595F7EE9D F5ED99EDE591F0E995DFD886D6CF7DE3DC8CD4CF7ECECC79ECE998F3EFA0F1EA9FF2E79EFDF5AE BBA35EEBCF8AF3D18BFCD690EEC27DDC9E5CD08949AD6926A162227D4513BD8950CA996782552E 451D00F9D59AFFE09DFBDA90FFEB9EFFEA9DFFF1A7FFF1A7FDE59AFFE89AFFE095FFEAA4BB9D60 74602B0B0000AF9C73C9B087CDC08FFFF6C7BE9C715A3719A89C6DEEF0BBDFD79FF7DD9FFFE79E FBEB95FFE692FFFEBAA59A6E07040044473A201A0D715A2FF5D395DCB063CCA053B59249946D2A 9658189D5B1BAE7030C79351E4BC7AFFE3A0FFECA7FFF1ADFAECA6F8F4ADFAF3ACF2E99FF8F2A7 F9F3A7FDF7ABF0E99DE6E094F3EDA1EEE79BEFE99DF4EEA2EDE89CF7F2A7FEF9B1EAE5A0F2EEA9 F6F1AEF7F3B2FCF8B9F4EEB2F5EFB6FAF3BCFEF7C1FDF6C0F8F2BAF6EFA5F5EFA0F3ED9EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9E7E7E7858585282828606060C2C2C2F3F3F3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDCB2B2B29696968A8A8A888888 888888868686868686868686868686878787898989898989878787898989A3A3A3E1E1E1F6F6F6 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF5F0F1C6F3EDC2FCEFD8FFF7F0 FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAFBF4E1F4DEAB EDC470EBB958F0C479F9DDBFFFF4FAFFFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFDFBF7EDD4F1E1B2F9F1D0FFFFF3FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF8989FD 5858FC8384FCC2C3FEF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFC3C3FF8281FE6B6AFB 8282FAE5E5FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF C2C2C25959591E1E1E424242AFAFAFFFFFFFFFFFFFFFFFFFF8F8F8D3D3D3AFAFAF939393878787 8989898787878686868686868686868686868888888989898989898787878B8B8BBBBBBBEEEEEE FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDF7 F1F3D7EAEBB8EDEEA9F6F6C8FFFFEFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF5ECFFE9D2FFDEBCFFDFBFFFECD9FFF7EFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6F6F6DEDEDEC0C0E99E9EFC6464FF7B7BFFD1D1FF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFD9D9FF8282FE6262F6 6666EEC2C2EDECECEDEFEFEDF4F4F4FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBCD6D EEDF80EEDF80E4D778E4D779E4D77BE6DB80E3D87EDED47BD9CF75CFC875AFAE6393934B878742 807D3ACBC686D3CC8AE0D792CCC27AD5CB7AE7DD86D1C76EDFD482E1D38AE2D48BE3D78DEAE098 DBD48BDBD48FEFEAABD1CE9373703B0C0A00AFAC7EE3DEB42C2507464113D3CF87E1DD8BF0EC91 E3DE80F2EE90F2EA94E1D88BE2D991F2E8A0DAD37DE5DC83ECE188EFE489F1E488F0E488F1E68D EEE28EEAE090EEE69AEEE69EFCF7C28B8760090500979454EBE8A4FDF7B6EEE3AEF8EBBEE3D4A7 D4C58DE3D58DE1D57FEDE091ECE097EADE95E7DB91F8EC9FF2E797F4E997EAE188E5DC7FE1DA76 DDD66CDFD870D9D16FDFD775E1D977E5DD7BE5DC7CDBD275F7ED94EDE28FEADF91F2E69FE8DA99 483A0474683CEEE1ACE4D8A4DED2A15F51234F4223CABF8D2F2300B8AD77DFD49E897E4683753B FEEEB4BFAF77EDE0A7F4EAADEBE2A3E8DF9DEBE199EEE495EEE28EF3E58BEDE186E1D984E6DE8C F2E493F4DE8FFFEB9AE5D07D96822CE6D57FF2E28BEADA83E5D480EDDD85F2E385E9DE81EEE68B EDE58CF2E58AFFEE8FE4CC6DE8D070F6E185F7EA96ECE396EFE9ABBEB887272100393318F0EAB0 FDF3B3EFDE96E2CB7DFFE595FFEB9FC5914B864D09C88438E8A758FECE80F8DC8EF8EC9BF0EA97 FDF39CF6E38DEBCB79FFE49AE8C07E814C0F884813FBD793EFED92EAF78E9A90676C4640FFCDA7 AB77413C0F00310C00593810B18C53FFE29DFFE499EDD584CFC1715E5206E1D48FFCEAACFCE7A7 F0DC94ECDA88EDDE82F5E48DF0DE8AF1DF8DFEEF9CF8DA8AD0A156A86A25985511D2934EFEE398 F8E28FE2DB81F8E68EFFEB97F3D285AD7230854C07F6C579FDE494DB9B49B7872FDACF71D7C570 E0CA7CF1E497E4DB8EDCD587EFE799E8E294EDE698E9DF90ECDC8FF8E598FFE89BD3B86BA6883A E2BE70FFE394F9DF93E4D288ECE6A2464A2E424B1CC5CFA50E120896926AFFFED7908765191400 A3A165E9EC9DDFE28AE7EA90C7C674EAE69BDCD58CE0D487E5D882E3D780F0E59AE7DF97D8D189 F3EFA4E3E092D7D482DDD883B2AB5AD5CD7EEADE95EBDC99E8D995EEE198F1E599EDE295EEE594 EFE796ECE490DED782EBE18CD3C873B8AC58E8DC89F0E794E5DE8DDDD686D9D185EADE96FBEAA7 FFF2B15D3E00AD8648D0A1639561228F5214AA531ABE6229DC8B4EC37D464D1400F6D5A0FFFAC8 AB9863130A00E6E79FF2F9AAF5F7A7F8E9A0EBDC96E8D994F5E59FF6E29BFBE298F2D086FFE39D E8C788DDC18D38240042301D251706262609CFC497B49B710D00000D0600A6B073E9ECA9F1E398 F2E389E9E67FF7ED99E5DB9CE6E5BA232F1A041009061109070D05CCC98EEDE094F0E998FAFDB5 F8F5B1FED289E4AF65A8742D8E5A178756147B490AA27336DAAC70FFD59AFFE5A9FFEFB6FEF7B6 FDF2A8F8F0A5F3EBA0F3EA9FEAE297E5DD92E5DF93F7F2A6FCFAADF6F4A7F9F7AAF9F5AFF1ECAA F7F2B0F4EFAFF2ECAFF7F1B4FEF8BEF8F2B9F9F2BBFEF7C0FDF6C0F7F1B8F7EFADF7F1A8F8F1A9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9E7E7E78585852525254E4E4EA1A1A1CACACADEDEDEDDDDDDDFDFDF E4E4E4F1F1F1F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0717271343534191919 1616161B1B1B2323232424242424242424241F1F1F1818181515151717172424245A5A5ACACACA F0F0F0FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFEE6FCF2CEFBE5BF FCEDD8FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFC FEF3E5FBDFBBEDC573E3B64EEFC78CFCE0D3FEF8F2FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFFFCFBFCF8FAF7F4FAF4F6FAF6FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFDF7F2EECCE8E2ACF3F1D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDFF 7676FE4242FD7E7FFEC9C9FEF5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FEB9BBFA6F73F6 5C5EF87A7AFBE3E3FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFA F9F9F9B4B4B45959592B2B2B525252B6B6B6FFFFFFFFFFFFFFFFFFF2F2F2AFAFAF6767672D2D2D 1212121717171E1E1E2424242424242424242323231C1C1C1717171616161818182B2B2B868686 E2E2E2F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDF8F5F5D9E6E699EEEEACF9F9D3FEFAEBFFFCF7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9FBF7EBFDE7CCFFDEBDFFE0C0FFECD7FFFBF6FFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF2F2F2DADAF7B3B3FE5454FF6060FF C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4FFBCBCFF4B4BFE 6363F19D9DE3CCCCE1E8E8EAF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E8D77AE3D276E4D579F1E286EDDE83E5D77EE1D47BE2D77DD7CC73D5CA71D9D27FC3C276C8C57E DFDC95C8C57FCEC986D3CD87D8CF88D8CF84DFD687C9C170DFD581EAE18CDAD07CE6DD87C9C26A D8D179CAC56DE1DC85CAC876DFDD90F4F0AC69672777753DF0EDA8BDBA714C491C2C2700B0AB6B E9E4A4E9E3A0E7E19BF6F0A4F4EE9EE7E18DECE790EEE98FEDE78CEFE68CF1E68CF4E68DF3E58D F2E48EF0E390EEE394F1E89CEBE39AF3EBB1EAE5B96C68372622076A652C7F78418E865AAB9F72 ADA171C8BC85E3D695EBE198F4EAAAF2E8ACF6EBB0F1E6AAF9EFB0F3EBA7DED58EDED689E5DE89 E9E389EAE487F2EC8EEEE88DE8E287E2DD7FE5DF82E8E286E4DE84F1EA96E5DC90E5DC97EADFA1 8E82473A2E09F0E090F3E295C1B165F9F1A8E9DE9980732FC6BB78938A474A4311DCD690E5DE98 73682F7567384B3F164C40157C7342C1B884E3E1A8E9E09FE8E097F2E897E8DE84F1E58BE6E28F F0E999F0E091F0D689FFEB9C9E8534B7A54FFEF39DF3E993F6E894EDDD8CF5E68FFDF291EAE080 EEE588EEE487F3E487FDEC8DD8BE5DEED977E7D276F2E592DBD488F0E9A7FFF9C4ACA376120900 5D5230D5C896FFEDB2EBD38EFFE69CE4BA6F794301965C1FF4CB76F6D67CFDDA88FFDD94FBDE95 F7E699ECE38FFAF097FBEA95F0C67CA05E208F4F13E8D58CFAFDB1DEE190F7F29B6D4222A0625A A46C43654214261200483613C5A3747A4D19B08343EAD086F1E895766F18ADA654F8EDA2EDDB98 EED996F3E399EBE48FE3E587F5E791F6DF90E8DC8AE6E28CF1EB95FFEB9BF4D186C48841995814 C48C42F8D283FBE593FFE691F3E18CFBED9DFBD69297591D925413FEDF8DFFE089CF9D45C59843 F0D17DD5C471F6EC9CF1E999EEE797EBE597F0E89DEEE699F6E69AF9E499FFEAA0F6D48BC69F53 CFAD60F6DC8DE8CF80E4CE80E3D38AE8E3A1ACAF75C3CB9C9BA47A0A0C00DED7AA9E8F68060000 4A4423D1CF90D2D485DFE38DE9EB9AE3E39FD6D296EAE3A7D3CA82CEC56DEEE58AD5CC89B2A96B E3DD9BDFDB94D7D58CDEDB91DDD98ED7CF86E5DC95E9DC96F1E29EE6D992EBE295EDE497E7DF91 E7DF8FE8E08EE9E08CE1D782ECDE8BF1E08DDDC975E8D380EFDB8BDECE80E1D185F7E7A0F7E4A1 DDC78AA3894E300E004F260688571DB17A3FDAA368EBC57FF7D98EFFF5ABEEDB96241200CBBB84 FFF7C4C6BD89191300D3CF8CE5E499E2DE92F2E49EEEE09EEFE3A3F0E1A2D8C481DEC581FFE39E FDDE9BD0A86CF9D6A3B69970100000020000030800746F46B5A1625F460DB6B35EE6F397E8F19B EBE797EBE79AE8F19FE0E793E1E292FFFCB97A78480508000B1005656036E6D096F1CB7DFCD685 FFE69CF0DA92EBD783F5E490FFEC9DFFE399E4BE7CC69C5EB27C43894B188B4817B66D3EDE986B E9C28AFAEFA8FFF4ACF7EAA2FDEDA5F2E199EDDF95F5EBA1F7F0A4EDEA9DEBEC9EEBEC9EEBE9A4 FBF5B7F2ECAFF4EDB0F6F0B4F4EEB1FBF5BBF7F1B7F4EEB4FAF4BAFDF6BEF4EEB7F8EFB8FBF1BC FFF5C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E7E7E78787872121212121214949495B5B5B646464636363 6C6C6C818181B4B4B4DCDCDCF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D08E8F8E404140 1718171515152E2E2E5353535A5A5A5A5A5A5B5B5B3F3F3F1C1C1C0F0F0F202020474747878787 DEDEDEF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFF8F8F3D5 EEE3B2F3EBCAFEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFCF9FEF2E4EFDEA9DFC76CE3BE65EEC881FBF2D0FEFDF0FFFFFDFFFFFFFFFFFFFEFFFE FEFEFEFEFEFEFDFEFDFAFBFAEDEEEDDBE9DACDE9CCD7E8D7EBEDEBF7F7F7FEFFFEFDFEFDFDFEFD FEFEFEFEFFFFFFFFF8FEFDE9F8EEC9F4E2B8F9F1DDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EDEDFF7171FE4444FE9091FDDDDDFEF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FAFDCED9F2 899CEB565EF45F5EFDDFDFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFAFAFAEFEFEF DFDFDFC8C8C88484843B3B3B3A3A3A7C7C7CCBCBCBFFFFFFFFFFFFFFFFFFF5F5F5C1C1C1787878 3131310D0D0D1B1B1B3C3C3C5A5A5A5A5A5A5A5A5A545454313131161616151515292929595959 A7A7A7F0F0F0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCF1F3F3CEEDEDBBECE9B3F8E8C4FEEFDDFFFAF5FFFFFFFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFEFEFCF4F4DFEDE9BFF8DFB6FEE2C3FFEDDAFFF8F0FFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5DADADADCDCE7CFCFFB5555FF 5050FFBEBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFDBDBFF9D9DFF 4040FF7D7DF8D3D3F2EBEBF0F5F5F5FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDFCE74F3E287E6D57DD6C66DF0E088E0D17ADBCD75D3C56DD3C86FD7CC73CDC571A39F56 D6D38AC1BE75CECA81BDB76DAFA85DA7A156BCB368D7CF84DCD488E9E195DFD78ADCD585D1CA77 CEC871DAD67CD3CF73DDD97DCCC970DCD886D2CC80C9C57C7B782FD8D783F0EE9AD4D083A49F69 484112605829D0CA93ECE5ABD3CF8BD6D486F5F49DE7E589E5E085DFD87DDDD67BE8DD83F5E78E F8EA92F3E48FE9DA8BE3D789E8DF93E7DD95EDE7A2EBE7A8DDD99F221D06756F3EAFA9756E6737 574F1A362F002F260422190D352C165F5520776F39ABA26EC6BB89DCD4A2EEE6B4F2E7B5F7EFB8 FEF7BCFAF1B4EDE6A5EBE5A2E8E19EECE5A0E9E59CE6E095ECE79AF5F2A2DED88DE7E099EEE8A8 CDC5891D1204928642F7E286C4AD51F6E389ECDA85F8EA98D5CC7C443709EDE495514A217E782D F5F1A5DFD89C302600888052B8B0825E592B140F0026200CA19B5DD1CB86F4EB9FDFD482E5DB88 E3E090EBE497F0DC91FEE39AE7CD828D6F20F4E18DF4EB96F5EF99EBE28FE7DA8BF9EA97FAED91 F2E78BE8DE84F2E68EF8E88FECD77AE9CF71FEE789F1DD87E5D88BDCD792E3DD9DDACF97FCF1C4 7B71520200004E4324CFC095FFF2BCE1C1808D621C6E3A00F8C079D9C26BF3E789FEE695FFDE97 FEDF9BFFE49CF6E597F5E692FFEF9AAF81398B480AEEB373F8F8A1ECF3A4FBF3B3E2CE945B2605 7E4627926B3E46350D0D0801ABA060FFF5BCE6C5908B652A8D6C2881671BAF9847FEF4A2F3DE90 E6D38AE5D48DF1E79AEEE896E8E88CF7E794FBE497EDE192E2DE8CE3E28CEFE894FFEC9DFFE297 EBBC73A16A229B631AF7D98DFFEC97F7E693F2DD91FFECA3E8B876864607B48536FFF299FCE288 DF994BDFB060FAE691E6DD8AF1EA99FBF5A5F2ED9FF3ECA0EDE196F2DF93FEE098FFE19AD5A75F AD7C32DBB96CFBED9DF1E293F5E496E5D990DBD492D5D59CF4F9C84F532B6D6D3EE9E2AC4D4115 60562BCAC68BD9D897D4D590E5E6A2A1A2646262295E5C35E8E5ABD5D18ADFDA85E5DF8BDBD394 A79E63817B3DC6C280CDCA869F9D59D1CD8AEFEAA7DED692EFE59FEEE197F6EB9DEDE897F5ED9E F0EB9AEEE897EAE392E6DD8CF0E290F6E594F4DE8DF3D889F9DC8CFCE399E0BF77D7B9748E732E 957C4080682F9B834C3E2400624321EDCD93FFE2A6F9D797ECE196D6D687CBCB7DECF0A5383D12 92955EFDFFCDD8DBA7101200AEAE6CDEDF95DBDC8CD6D98CC4CB7FDAE39AE3EAA5DCDE97F3EEA6 EFE29BFFF5B1B7A66BAFA470FFF7CD9F9D842225140007006D6637B39656C5A057F7E594D0D17B DCDC8BEDE59BEAE89DF4FFB3AAAA6369571CEDCC92BE9C6C1D0500524A3BF0EAD1FFF4C8F9E1A1 FFEAA2F9E9A5F4F0ACDEDE87D3D279E7DF8BECDE92F6DE9AFFF4B6FFE5ADF2CE9BDA9D6DB16E41 8F4A1D753E09926F2FC9AD6BFADF9EFFE9A7FCDE9DFCE3A0FEE9A3F8E8A2F1E79EF7F2A7EDEBA0 EBE6A6F7F0B8E1DCA1F0EAB0FEF9BFF6F0B6E8E2A6EDE7ABEEE8ADF2ECB1F8F2B7F5EFB5F6ECBA FAF0BFFEF4C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E7E7E78F8F8F2C2C2C1212121D1D1D212121212121 1B1B1B1C1C1C2C2C2C696969A8A8A8DFDFDFFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFE8E8E8BEBEBE 6161612C2C2C2F2F2F5E5E5EA1A1A1AEAEAEADADADB1B1B17777773131311F1F1F464646888888 C9C9C9F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F3DDE9E3B0EFE7C3FDF6F3FFFCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFCF3F5DFE3DEA1DCC25ADEB841F1E097FAF3D1FFFEFAFFFFFFFBFDFE F3F9F9ECF7F2EAF7EBE9F7E9E5F2E5D4E0D4C1DEC0B4E0B3C4DDC3DBE0DBE5EEE5EAF8EAEAF7EA EAF7EAEDF8EDF9FDFBFCFDEEF9F8D5FBEDC5FFE8CEFFF4E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEDEDFF7171FF4848FA9B9BF3E9E9F4FAFAFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFD DFEEF19FB7E8515DF34847FFDADAFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6E1E1E1CFCFCFC6C6C6 B6B6B6A1A1A1808080535353333333606060B1B1B1E3E3E3FFFFFFFFFFFFFFFFFFF9F9F9E1E1E1 9D9D9D4A4A4A1F1F1F393939787878AFAFAFADADADAFAFAFA3A3A35959592727272F2F2F5B5B5B A4A4A4D8D8D8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F2D8E7E3AEF6DBAEFCE3C2F9F1DDFAFBEFFEFEF7 FFFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFDFFFAF4FDF7EDF8F7E7EDEDC5E6E3A8F5E1B6FEEBD5FFF9F4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2CFCFCFE1E1DEE5E5FA 5D5DFF4949FFB2B2FFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEFFB9B9FF 7C7CFF4F4FFF9E9EFFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE6D57DBFAE56BEAD55DBCB73DACA72E1D17ADACC74D0C36BD6CB72DBD076CBC070 89833CC5C078DFDB90E2DF90D9D482E5E18FCAC475827A2F655D146C641DCBC37FCAC282D9D290 F1EAA4EBE59BD8D384D4CF7DD7D27FDAD584CBC578E5DE96E4DD98847C37F4EF9DE6E18EF5F0A4 F8F3AFC0B97D4F48132B2601878348DEDD9DEFF0A9D7D98BCFCE7CDED97FDCD57AE0D97EEADE84 ECDE86ECDD88FBEA99ECDC8FE7D78DEDE098EADD97E0DA8DDFDE8CFAF6AF78744C1E1800EDE7B4 E3DDA4E3DF9EEAE7A3C3BF7C8883474C4616181108100905130B000F0600191100362C0D4F4427 685E407D74547F75558F8665B5AC88C8C098DBD3A8E6E0AEDFD8A2DED89DECE9A7F4EFAEF4EFAF E1DDA1A59F651E1700E5D792DABD60C9A94DF6D981ECD27EEDD687B7A25653440D7A6E27BAB165 1C1400C1BD74FFFFC9B2B1774D49129D9A66DAD8A79D9B693E3C0D4A470F676325BAB16DFBF1A9 E9E194E8E69BEAE399F8E39AFFE8A1C39D54B6984AFFF19FF5EC96E2DD89DDD786F0E496E5D587 F7E894F9ED99E6DA87F3E593F0DF8BD0B963EACF78F1D783E0CB7AE1D58DF8F2B5F4EEB2EAE2A9 F4ECC3F8F0D98A82750200002E2313BEAD83AB90576B4506CC9E5CEFCB8ADDC971F8F396ECDD8C FBE29AFFE9A6FADB97FFE39AFFE395D3AE60805106C88D4BFFE59FECE98FE7E295FCE0B0A27458 431C008F7534D0C493221B0A56511FFAF0A8F3DF9CF7DEA4F7DAA4977133522601D6A65AFED384 FFE494FAE598F1E599EDE697E5DE8DE4D786ECDD8DEEDD91EFE092F3E698F1E897ECE291EEE08F F9E695FFF3A5E2B46AA1631DB67B32FDEC99FFF2A1F8E299F2E199FFEDAADBA9657F4F02DCB15A FFE992F5BA6DB57D30F8D887EDE28FD7D280E0DB8AF3EC9FE6DE92E0D187FAE39CFEE59EE0B26A AB762ECE944BFEE194F5F3A2E5DE8FF4EA9CF2E69EEEE6A5EAE7AFDEDEAC1D1D00C6C28AFDF3B7 DFD28FE9E297E4E196CFCC8CEEEDB8B9B78B363412090802B3B27DE8E9ACC5C57ECCCC7DD4D284 C2BC80DDD79EA6A2638E8B4BB5B473B7B676CECA8BEFE9ACECE3A2F4EBA2E0D585EEE693E6E08F EDE897EBE796EAE594E6DF8EE3DA89EFE092F3DE92FDE498FFE396F9D387F8CA84CF9C5D9D7037 1F00007C5D24AA935EE8D7A1685A2D50431FFAE9ABF0DF9EEADA96DFDE94BEC276B2B86CCDD58C 3C461E8B935DF4F9C8D0D2A1050800999A58DFE096C5C774C1C671A9B461B9C577BECB7FBEC87F E6EAA2E8E49FDED6989F9A640B08005A5E3CF2F6DCD0D7B9D1D9A8F4E8ABC09953BC883EFBE190 EBDB8ADBCE85E9DA99F6F0B094A05D0E1000B8A86FFCD699C7925C53290918070041402B34330E 6D662AC6BD77DCDD9AE2ECA8D6DA84F2F49DFBFAA7F7F0A6F0E5A0EBD99AE8D097FEE8B1FFF5BE FFFAC4F2CE99BD945B9C6D32713E048F6025CD9E62ECBF83FEDE9FFFE7A6FCE29FEDDA95E9DE96 E9E19AF5EEB2EBE4AFDAD39DEDE6AFFBF4BDEEE7AFE5DFA3E8E2A6E3DD9FE6E0A2F2ECADEFE9AB F6EDB4F8EFB7F9F1B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E6E6E6A3A3A35E5E5E5E5E5E7D7D7D8D8D8D 9090907B7B7B4E4E4E2626261A1A1A535353A7A7A7E3E3E3FBFBFBFFFFFFFFFFFFFFFFFFFBFBFB E1E1E1706F703435344648468A8A8ADEDEDEEEEEEEEDEDEDF2F2F2959595292929212221686868 BCBCBCF7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDF3E5FAE1C0FCDCC4FFE5E2FFF4F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEFBF4F3DBDEDB8FD1C34DDEB63FEED591FDF9EFFFFFFF F0F8F8D0E9E7B9E0CEB3E1B6B2E1B1B1E0B0ACDCABBAE7B9CDF3CDD9EAD9D3DED3BFDFBFB1E1B0 B2E1B1B2E1B1BCE5BAE9F7EBF3F5DEE9E8B6EDEAC0FDF8EEFFFDFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEDEDFF7272FF4343F08B8BD5D7D7D4F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFBFFD7DBFB9398F94C4FFC4A49FEDADAFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9191914F4F4F 313131282828232323191919393939707070B4B4B4E8E8E8FAFAFAFFFFFFFFFFFFFFFFFFFEFEFE FFFFFFBABABA545454252525515151A5A5A5EFEFEFEDEDEDEFEFEFDCDCDC666666222222474747 909090DDDDDDF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF7FAF6E8FEE4C8F6DDB1E9E1AAEDEEBC FDFDE0FFFFF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFAF5FEEBD6F7E0B8E6E1A9ECECB9F8F8D1FDF9E7FFFBF5FFFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF5F5F5FAFAF8 EAEAFE6C6CFF4E4EFF9898FFDEDEFFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1FF 9090FF5F5FFF7E7EFFBEBEFFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7D47EB6A44ECCBA64F1E18AD9C972E6D57EDECF79E5D680DED079DBCD76 E7DD8CBDB66E706A20CEC87BCDC876DFDA86CCC873F0EB99D5CF81CBC47B99924E8F8746675D28 574E1F7F7745898149C2BB7ECAC283D1C987F3EAABE6DCA1FCF1BBE0D6A44D4119ACA360FAF4AF EDE8A2E7E099F6F0AAF4F0ABB1AE696260274E4D10929155D9D99DF4F4B0F2EC96E8E387E9E287 F1E68DF1E28DEFDF8BF5E493EFDE91F0E296F4E69EE4D791DDD683E7E585E1DD8EE9E3A3261D03 8F8950F3EFAFCBC87EE0DF8EE7E59BF2F0B0FCF6C3E1DAA7C0BB89ADA77A8179514D4530372E1F 241910150B010B00000400000200000E04001B10062C241649422C605A3C807B50A29F6CC5C18B D7D49CF7F4BF7C784B635E2DFFFBBDE2C371F8D585F6D98EF0D289D5BB76C0A968C5B373524209 D5CB916C6531605C2BEAE8A6F2F2AE8585469F9F63FAFAC3FAFAC3CCC993605C25918B50595113 C8BF7CFBF2ACF2EFA8F6EEA7FFEEA9FDE19BA37F37EDD88AF7E593F8F29CDFDD88F2EC9BF0E498 E6D68CF1E394EFE294EBDE93F3E69CE7D68BD4BC71FDE196FAE59BB6A15DAFA2657C7744706D3F 6D68446A66487F7A6976716C18120E0700002011024F350C79551DFFE1A3F6D191F2D988FEF39B E8DF8FF1EBA0EFE09AF7DF9DFFD593F6CA879C641F9E6F26F7D58DFFE99FF7E18CFFF7B2C0986D 2907048E8746E7F5997986530F0D00D0C292FEF1A9F5E89DEFE2A1EBD4A07A4F1ABC8042AB6522 BF7D32F5C678FFE998FAEE9DEAE290EDDE91F7DE93F1E596EFEA99F2E397F2DC91F6DE93F8E599 EDE08FF2E794F5E28FFFE89AF8D087A16921968131F9EF9FFEE9A0FFE5A2FEEBA7FFE89FB5893D 955B0DFFCD7CF9E38ECE9548B27D34F1E18ED8D27FD6D07FE2DC8ECEC378E4D38AFFE59FDBB16B 9B6922CF934CFFDF99F8E49AE6E998DCDB8BF0E99AECE298F8EEADFFFFC7B1AE7D1F1C04D3CD95 EAE0A1EEE69DE8E48DEDEC9AEEEBB1847F5C28221513100786865DD4D6A0CDD08DD5D88FA8A963 6E6E3A9992589791588784486461229A9959BEBE816F6D318E894CECE5A1E9E294E9E28BECE78F E4E391E8E795E5E290E9E492EFE596F1E495F0DD8FEBD086F2D288C6A156A77D34A87232B2783F B9864D3913066C4F20F5E0ACE2D8A2716D3F414119ECF0AFE7EAA6EEF0A9D3D08AC7C37CD7D491 E3E0A1605E3C5B592AFAF7CBE3DEB0181100958D4FFCF4ACF1E796DED079E5DA89DAD487D0CC84 BBB56FBEB36FDDCD8DFFFBC47E6E490C0100211B0B42412F7F8167CACEA0FBE9ABD2A458CD923A FDD97EFBE08AF0DB94FBE7B3EEE6BC2C32186B7840FFFFC2EBCA7BBE883CF3CC8F80735856593F 50553B858346D6D084E9E79BD5D78CE4DD8DE3DB8AEDE698E9E299DED894E5E1A0E5E3A4F0EFB0 F3F2B1EAEBA9E7EAA7FBECADFFE9B1EEBD86BE844DA16A329B672EB48349DBAE72FEDFA1FFEDAC F3DA97EFDB97FCF2B6E1DDA6E8E2ABF7EFB9FBF4BCEEE7B0EFEAB0E4DEA3D0CA8DDCD698F4F0AF EEE8A6F9F2ACF8F0A9F5EEA7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF1F1F1CECECEACACACAFAFAFC3C3C3 CECECED1D1D1C2C2C2A2A2A27979792E2E2E333333696969B9B9B9F6F6F6FFFFFFFFFFFFFFFFFF FFFFFFE9E9E96969692B2B2B484948969696EEEEEEFFFFFFFCFCFCF7F7F7939393272727313131 858585D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF8F2FEEDDCF7E2C6F2E1C6F9F2E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCF4EDEDC6E0D78CDDB548E5BF62E9D593 CEE4ABBFE5BEC3E0D1C9E0D7CBEACDCBEBCBCBEBCBCAEACAD7F3D6E6FBE6EDF5EDE5ECE5D6EBD5 CAEBCACBEBCBC3EBC3BBEABAB4E2B7C0DDA8D6DD9EEDEBC1FDFCF7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFBFFE0E0FF6A6AFF4848F59E9EE3EAEAE2FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFFE3E4FFA5A6FE5556FE4949FEDBDBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5 DDDDDDB3B3B38E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8D8D8D8B8B8B979797C7C7C7F3F3F3FCFCFCFFFFFFFFFFFFFFFFFFE7E7E7ABABAB 7474745858585151514D4D4D3737373939395151518E8E8ECFCFCFF0F0F0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBDBDBD4C4C4C232323626262B8B8B8FFFFFFFFFFFFFAFAFADEDEDE616161232323 585858A9A9A9EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFFF1E4F9EBD1F0EBC6 F3EDC5FCEFCAF6EFCCEFEFCEEFEFCDF6F6DCFDFEEEFFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFBFFF3E7F9EFD9F1EFD0EEEFCDF2ECCCF9E2C9FADEC5EEE9C5F4F4D6FEFEEAFFFFF8FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8E3E3E3 EEEEEDEBEBFC8787FF6262FF8F8FFFCBCBFFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFEFF CBCBFF6C6CFF4848FFA2A2FFD8D8FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE9D981EBDD82F1E189F5E78DE9DC80E8DA82DDCF77E5D77EE3D57C DACC74DED37BCEC973A09B48ACA754CAC372E2DB8BD0C978E2DB8AE5E08ADED880E4DF86E0DA7F D1C979B7AD687D74356459234F45143328042D2307372E0D3C341561594351483C140A08110B02 A09C64DDD8A0CDC68DEBE2AAE9DFAAE2D6A7F2E9B9E9DFB09C95625550188E8947D3CE7EFCF7A3 E8E28BEBE48BF9EE96F2E890EADF89F4E995F0E594E8DD8EEADE94E9DF8DD8D279E4DD8CF2E9A0 8D833F483F14E9E098DBD386D6CF7FE1DA8AECE596F6EDA2F3E8A0EEE39CF7ECA7F0E4A1EBDF9D E7DB9BDFD195C8BB7FA7995F8F814874672F5346173C3214070000000000040100030100090801 111008221F0A55513B2D27135C5540BFB894E6DDA4FFF4C0F6E6B1CCBA7FB9AA61FBEDA0E8DA93 493F03B2AE71B1B46B343B00B6BA6AF9F7B2C5C27C4E4707EAE39CF4EBA5F9F1ABC7C0799A934D E3DC995A55149D9858BCB377928549E0D190C8B56FA7964AFCF29EEBE389EFE990EEE890F5EE9A EBE091F4E99AEEE598EDE599F2E9A0F8F0ABDBD095BBAD7C8272493827101506020E03000D0500 2220003A3C08575B2A4F4F2657502E594526896847693F1E5527005C34006E510E9F8C43E5D791 FFF9B5E8DF9AE5E89CE6E499F8DD9AFFDDA6D08D56774A09CEB96CFFF9A7FFDF90FFECA1EDCD87 4B30094A3822F2F0BFD9DFA01F200A6D643BFFFFC1FBECA3EADF88F9F1A46F602DC0A56FFFE4A6 DBA25BBA7A2BBF822EE2AC57FFE58FFCE18DF5DA8BF9E397FDEE97F3EA8EECE68FEBE696E7E197 EEE69BF3E59AF3E293ECDA87FAE593FFEF9CF0D9887A5D0DBE974DFFF3ADF8DF96FCE29DFFE9A3 F0DD92856119BF904CFFFEB3FBD38DB6843CD7B35FFEEE98E2DB88DEDB89DECD7EFFDE90F5BC6F BD762ABE7C31F9CE87FFEDA8FAE8A0EEE898EDE893F4ED95ECE490E9E199FFF9C1A49D73383024 EEE5C0D0C99CEBE2B1C3C28CA9A9804B4531100A02191304ACA672EDE7B5CFCB92A8A766DEDE9D 9592660C0501140C025F5834B8B4838C8C5396985A5B5E1B696B268F8E45C3BF72E2DB8AE6DB88 EAE896DEE99BD0D48AE9E18FF0DC83FFE39CFFE49BEDBF72CA965AC18F4D8A5E139F752CDEBB7F F8DFADFFFBC553481B372F0BDAD699E9E5A8948E5D2E2903F6F5BBEFF1B7BFC386CCCD7FDEDC91 DBDA9FF3F2C583815D14130242401BC9C98FB4B471DAD58AF2EB9BEDE693EBE391F5EDA3EEE6A1 EAE4A0E7E194DDD981D8D276E1DC84BEB671160D033A301BAFAB9B45473117130039271157390E 927427EAD48AECDF9CE2D999FFF6CB928662242200DEE69CFDF1A5E1AE6DA0672DF3D29FC1BF94 F4F9D7FFFFE0EFF4C1DFE4A2F3F0A7ECE197ECE499E8E096EDE59CE5DD95E1DA94DAD48EE7E39D F6F2AEF4F1AAF1EFA9F0EFA8E4DA95EAD595FEE5A6FFF0B2FADD9FF0C789B78B4C8E5D1EA57132 F3BD7EFFDB9AFDDC9BFBF5A9DBEA99D8D68FDDCF93DECE9BE5DCACEAE8B7D8D8A5D1CD97EDE4AB FFF8BCF1E9A8F8E9A8FFF0B0FEF0AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF8F8F8F4F4F4F4F4F4 F7F7F7F9F9F9F9F9F9F7F7F7F2F2F2D5D5D55F5F5F2A2A2A3333338B8B8BEEEEEEFFFFFFFFFFFF FFFFFFFFFFFFE5E5E55C5C5C2222224B4C4B9E9E9EF0F0F0FFFFFFF9F9F9E8E8E8878787262626 464646A0A0A0DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFDFBF5F0EBC9E7E2AEF4EFD5FFFDFCFFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF5F4EDD1E0C676D8B54B CAB03999C14B97D280C3DCC1E9EAECF5F9F5F8FCF8F7FCF7F7FCF7F9FDF9FCFFFCFDFEFDFBFCFB F9FCF9F7FCF7F7FCF7E9FCE9CEF5CC8DD08992C878C2D68FEAECC3F9FDF5FEFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3FFD2D2FF6161FF4D4DFBB1B1F6FEFEF6FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFFF0F0FCB9B9F95E5EFB4848FED8D8FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD ECECECBCBCBC6B6B6B232323202020212121212121212121212121212121212121212121212121 2121212121212121212121211D1D1D343434909090E7E7E7F9F9F9FFFFFFFFFFFFFFFFFFF6F6F6 DEDEDEC5C5C5B1B1B1ADADADA5A5A58484845252522B2B2B4A4A4A979797D6D6D6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFB6B6B6404040232323767676C5C5C5FFFFFFFFFFFFF3F3F3CFCFCF575757 282828696969BDBDBDF3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFEFDF9 FDFBF4FEF1E0FCE3C1EDE1AFE1E1A4E1E1A4EEECBAFCF9D7FEFCECFCFCF4FCFCF5FCFCF5FCFCF5 FDFCF7FFF8F0FFE8CEF5E2B7E6E1A8DFE1A2E6E0ADF5E0C8FFE6E4FDF8F2FEFDF9FFFFFCFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F2F2 CDCDCDDEDEDDEDEDFAA2A2FF7777FF8787FFB9B9FFF5F5FFFFFFFFFFFFFFFFFFFFFEFEFEF9F9FC EDEDFBB0B0FC5151FE3F3FFFBFBFFFECECFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD074DED176BBAE52B4A74BEBDE82F0E387F3E68BE2D579 EADC81EFE286DAD176E9E589D9D47C7C762290893AEDE699D7CF84E1DA8CEDE491CCC66AE1DB7A EBE682D8D06FDED47ADAD182DBD18FB4A8718179468981535F582D423D18433D253A3525332E1E 312D193D3A14645F2B6A632C665B25716533897A4DB1A377DCCFA2F6EDB7D7D094B5B16C807A2D 534E00C2BE6AF4F19BEDE78DECE58BE9E388EDE38CF1E792F3E898EFE495E9DD8DEDE290E5DA8A E9DE8ED1C578766A1EE2D68AF0E596E6DB8BE8DD89EBE187F1E78EF6E891F2E38FF7E794EDDE8A EBDC88E6D783F4E590FEEF9AFCED98FAEB96FFF29DFFF8AAEFE5B3CCC69CA5A07983805E565639 3130181A1C0F0908030E0B00080200030000030000202000484327716A4C9D9265C8BD7CE7DB94 EEE2A2685F2E7D7B49AAAF6E7E8A366E7129F2EDA9F2EBA36D651E807329FAED9DE9DE8FF6EA9E 9C944AA69F59D2CE8D4E490AD2C28E695723796A2F5D510D968E43837E2EE0DC85E9E48DF0E997 EDE495F3E89CE2D691F1E8ACFAF1B5D9D19599925D4D451A0900000C02001F140F4E452C9A9375 E0DAB7F8F6C6EAEDAFF3F8BBFAFAC0FDF1BCFFEDBBF4CB9E9A6032A36B38F4CA8DCAB46C948E40 7B7434C9BE83F7EDACEAF0A3D6D98AF6DE98FFD8A3AE6833966F2FFAF5A5F6E791F9D485FBDE9F 9E7D3D210B009A915FFFFFD3A7A3780F0800E6DDA9E5DA9AF4E7A0F0E795C7C0757C753DFFF5BB FCE4A1F6D387E7B360D59A41B3781ECA953DF9DD88FFF29EF8E392EFE486E4E07EE7E189F2EA9C F0E9A1EFE69EF8EDA1FDF2A1EBE28BE8E089FBF49DFAED9BCFAD6185520BECC680FFEAA0F9E49E F4D995FCF8AED3BE7A795312D6BA77FFEAA7E7B570C38C3AFBE590F0E692F7F2A0FFEB9CFBCC7E CC8131C77F2DFFD687FFEAA0FCE9A5F1E5A0EDE194E6DC87F2EA91F5ED98E9E298E7DDA79F9570 170D06827A608C86686E6A451E1E00020100060000130D0295905BFDFCBCEEE6A6DBD496CFCC88 F3EFB2BBB59718110B0301006A6745FEFAC9EEEAB2CFC98C756F2C6C661E7873278F8B3DACA758 DFDC8BD0D284D0D68DDDD893EBDB8BEFD276FACB89D9A15AA76E23C28753BF8C4EE7C074FFECA4 FFFDBFCFC991D5D49C8C905720290CF4F5C1F4F0BD877E55403516F3EEB5F2F3B8BDC381CCCE7F F2F3A9EDEBB6E4E2BE5352360102001011009D9F5DECED9FE7E693D0CB77ECE793DAD788E9E59D EBE6A4E5E09FE5E194EBEA8EE4E47FDDDA7AF0EAA0837749070000524B3BEBEBD2A79E8B4B3C35 1B0A08342804D2CA86D9D59DE7E7ADEDE9C2393210564F2ED4D485DCC67AB5753ED59B6D624225 0000003F462570785C7C845C9AA570E5E19DFEF1A8EFE59EE7DF97F4ECA4F9F1A9F0E8A0D7CF86 E9E199EFE69EEEE69EEAE199E8DF97D6CF87CEC983DCD58FEFE19CF8E39FFEEAA8FFDC9AF7CC8B B88241844A0AB57336F1B272FADC91EFE898DCD488CDC684D8D399D7D3A0EBE8B7EFECBBE9E8B3 E1DEA5E7E3A5F8F1B0F3E8A1F4E69FF3E79FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB7E7E7E3434341D1D1D6C6C6CDCDCDCF9F9F9 FFFFFFFFFFFFF8F8F8D7D7D75252522B2B2B6E6E6EBFBFBFF5F5F5FFFFFFF6F6F6D8D8D87A7A7A 2626265F5F5FC2C2C2EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF8EDD3F4DEB0FBE3C1FFEEDEFFFBF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FAF0E2EBBD B4CB798DB04198B340BCCB7BE3E7CFFBFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFFFBEAFBE6BCDB9CABD184B3D894CCEBBDE9FDE7F8FFF8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F3FFD0D0FF6060FF4444F49999DFE6E6DEFAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFDE8E8E7ADADDA5858EC4343FFC7C7FFF1F1FFFEFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDEFEFEFC9C9C98B8B8B545454525252525252525252525252525252525252525252525252 5252525252525252525252525252524F4F4F606060A2A2A2E2E2E2F8F8F8FFFFFFFFFFFFFFFFFF FDFDFDF7F7F7F0F0F0E9E9E9E7E7E7E3E3E3D6D6D69C9C9C565656313131515151AAAAAAF4F4F4 FCFCFCFFFFFFFDFDFDFAFAFAA9A9A93B3B3B333333979797D6D6D6FFFFFFFFFFFFEAEAEABDBDBD 4C4C4C303030868686DADADAF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF9F5FEF2E4F7F1DAF1F1D4F1F1D5F7EDCCFCE8C1F1E7BAE8E7B7E7E7B6E7E7B6 E8E7B8F4E7C3FFE9CDFFEECBFAF1CEF3F1D3F0F1D4F3F1D9FAF2E8FFF5F7FFFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9EAEAEAF2F2F1F2F2FDB3B3FF7E7EFF7070FF9C9CFFF0F0FFFFFFFFFFFFFFFFFFFFF8F8F7 E5E5EAC0C0E68686EB5050F75E5EFFD9D9FFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D67DEBDD84D9CB72CDBF66E2D47BE6D880E8DA81 E6D87FE6D87FE9DB82E6DC83DFDB84DBD482E0D98A70681E857C35CBC37CE2DA91E6DC91E2DA89 D6CE78D8D079DAD271D3CD68CEC86CDAD381DED68BDDD78FE7E49AB9B76C85863F7A7A3AC0BF87 DEDEAAE3E1AFE5E2ACDCD79BDCD591DED691DBD28EC2B97AAA9E63867B40766E2FBCB570FDF8AD ECE697C1BA68C4BE69ADA750C3BC62D0C96FDED77DEFE58EF0E691EBE08FF4E698F8EC9CF8ED9B E3D888F1E696F3E899D0C478E9DC91EBE092E8DD8CE8DE8AE9DF87F4EA91FAEB96F3E491F8E996 F1E28FF1E28FEBDC89F3E491F1E28FEFE08DF2E390F8E895F4E796F1E7A3FBF5B5F1E9AFF0ECB4 EBE8B6CCCC9BD8D7AAB0AE8187815B665F3E4A401D281C040F02000600000400000B0000342611 4F4222D4C79E8F856B403A24ACAB82B5B9774D4C08D5D090FAF3ADC5BB73534803E4D78AEADE92 F2E69BE4DC935F5813C9C483B4AC6F7C6937DFCD9B85743C8A7B3EF5EAA6827A35797326E9E298 E7E098E8DF9DF9EFAEF5E8B3C7B8946354412C1D0E050000372A1365583AA69B6EDBD1A1E8E0AA F2EDABF0EFA3E8E79BE2E19CE8E5A3EEE5A6E5D398FFE6B0B07F4C6C3301DDA76FDCB372F5DE95 EEE697E0D995E2D798F5EAA6F0F3A6E5E294F7DB96EEAC748D4A11D1A864FFFFAFE9D37EFFE69C DCB27E6B461B3D2605E9E2A4F6F4C12F2D0E666430F1ECB8FAEEBBEADF9EEAE3A4605A1EDEDDA3 FFF8BAFFF4B0FFF6AAFFF09FF0C56FE0B65EC9A04BB99542DFC573FFF2A1F3F196ECEB8DF6E796 FFE8A2FFE3A1F4DD97F4EC9CF3F89EE8F093E6E68FF3E999F4DD93FFE198B68841A97533FFE29F FFEAA5F5E49CF0ECA2FFF4AF8D6624BC9654FFECA9FAC680B77428EFD07EFEF19EFBEFA1FFE7A0 E7A55EBC792BE7BA63FFF29BF3E697FFF4B1F6E9A7F6EAA2FFF5A6F6ED9BEAE192EFE8A2FDF3BE C0B7921108000801000802000C08000E0D000001003F3C2596926D827F48CCC882F6F2AAEBE89E DEDB93F0EDB3DBD6B02723121C2108D1D497EEE8ADF0E2A6E9D496F8DE9FE5CD8BCBBA75DFD78F C1C378D7E195DEE196EFE39DF9E2A0E9CE81D4B35BB48949A07330BE944AEEC693F5DC9EFFFDB4 F1E59BEADE95F2EEA8E4E3A9B5B788000400656346D6D1B4A4997C382C0DF7F3B5EFF3ABD6DE8F E2E49BD1D08DFFFDCAB9B7920E0D004C4C32959860E0E39EDDDE90DDDC8AF7F2A2DBD787D9D783 E4E095EEE9A6E9E4A5EAE39FF2EB9DF5F39FEAE292F0E4A77A68460E00000A0000141408423A2A C6B4A0C1AA8B90823CBEB46F817B40DBD99EDBD8B01D1700797543E0DF90F3D88BCE8F55C58857 2E0F00464727979C7A1E22102A2F0D010900888444FEFAB5F1E79FF3EBA3F9F1A9F1E9A1F4ECA4 EDE59DEAE29AEDE59DF4ECA4E9E199E9E199E7E199E7E59EEBE89EEAE39BEBDD97F6E39FF1D793 FFE7A4FFE5A4E0BA7AB88949936021AD672EEEB279FFF0AEEEF0AAECF3B1E8E8ADF9F0BAEFE7B0 E7E6AAE7EEACE6E8A6E1E09AE8E997E0E48DE2E68FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEBEA898A893F403F212121666666D2D2D2 F4F4F4FFFFFFFFFFFFEAEAEABDBDBD4444443535358C8C8CDBDBDBF9F9F9FFFFFFEFEFEFB9B9B9 626262232323737373DBDBDBF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF2E5FDE4C6F9DFB8F8E4C1FEFAF4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7FCF0 DEF3C3B3DE9F94C87EB6B95EDAC676EBE4B8F7FAECFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF6FAF3E3EAE2B0D5DDA4C3E2B2C0ECC1D2F6D1EDFCEC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECFEC5C5FF6565FF5151F29B9BDBE2E2DAF9F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE6E6E0ABABCF5656E74040FFBEBEFFEBEBFFFDFDFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF6F6F6E2E2E2C4C4C4A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A6A6A6ADADADCBCBCBEAEAEAFAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFDFDFDFDFDFDFCFCFCFCFCFCFEFEFECDCDCD8383833333332B2B2B898989 E3E3E3F8F8F8FFFFFFFAFAFAE3E3E3929292353535424242B3B3B3E4E4E4FFFFFFFFFFFFDDDDDD A3A3A33D3D3D3636369E9E9EF3F3F3FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFFFEFDFEFEFCFEFEFBFEFEFCFEF3E7FDE8CCF0E5BAE6E5B2E5E5B0 E5E5B0E7E5B2F3E5BEFFE9CEFFF8DCFFFDEBFEFEF8FEFEFCFEFEFCFFFEFDFFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAFAEDEDEDF4F4F3F5F5FDC9C9FF8C8CFF6060FF8484FFEDEDFFFFFFFFFEFEFEF8F8F8 F1F1F0DFDFE79D9DE46565EA6262F78D8DFFE9E9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8DA81DDCF76E6D87FEDDF86D6C86FE2D47B E1D37AEBDD84E5D77EE0D279E3D880DFD983D2CB7AEDE69AE0D8909C9350584F0E7F7635CCC37F ECE49DE8E095E1D98DE7E088DCD678D6CF78D8D280DAD384D7D381D3D37CCFCF75D4D77DA6AA55 7E81345A5B16EFEDB4E8E5ABD6D48DE7E291E8E48CEBE58DD6CA7AF2EDA4FEFEBCB9B167898336 9C9548DDD585EFE895EEE892EEE690F3EC92EDE68CD0C66DE3D982DDD37DD5C977E4D788F5E898 F5EA98E7DC8CF1E696E0D586EFE495EEE394EADF8FE9DE8DE6DC88E2D881EBE188EEE08AE8D986 F0E18EEFE08DF4E592F1E28FDECF7CDCCD7AE3D481EFE08DF1E28FEBDC87E7DB86E9E08BE8E08E E9E393F2EC9FF3EFA6DAD38DECE6A1E2D995D3CA86E0D390F2E0A6D7C0959B82656750384C381B 2115000C0200271E036E6352332B1A908A6ABEBC836B6527AEA768F5ECAAFFFAB48B8139A4984E FDF0A6FBF0A6F6EDA7D1C885625A1AE9DFA3BEA877957B4B846E3A78672FBDAF71FFFFC28D8543 827D3DF9F3B9FEFBC6C7BC8B52441E0F000012000074633CA29366E3D6A3FDF8C3FBF0B6EFE6A6 E2DA90DFDA83E3E17DE0DC82E5DD92EDE39CEBDC96F3D897F5D4978D5920945C21F1BE7ED5AF69 FFE99BE0D985F4E8A1EDE09CF3E8A1EAE99CEFE599FFEBA4C180439F6021F8DC93F1E08EF1E38F FED7908C5F373C17048B744BFFF8B88E8C50161501D2D285E8DFA8DDD2A4FFF7C1766D41BCB58F DBD9B18A855A837747715E2B866B37896A339A7941CBAB70E6C68DCFB279CAB175E3CE85F2DE8E F8E298F4DC98EEDA93EFDD92ECE08FDED880E8E48BF4EF9BECE699F5EAA2F5E198F2DC968A5416 D09E5FFFEDABF4ECA3F9F0A5FFEBA5CCA5629F6C2AF3DD96FDDE93BA712AC49549FFF1A4FEF0A5 FEC985CA8644E1A85DFFF8A0E4EC8FE8F19EF6E8A5F8E6A8F4E6A3ECE198F0E599F3EA9EE9E09D E8DFA8F2E9BF635A3B0600001813000F0A004C4D27B4B78CD0D0A1D3D1A04C491899965AEAE798 E6E492CBC87FE4E2AA46422B0A0700A5A669F5F4B0D6CF8BFFF6B3F9E3A0CFB674EAD18FF4E09E E5D995E3DE9BE7E9A7F3EAA6FFECAADEB779A27C348F6C19B99459DFBE80F3DB96F4DEAEF7EAB1 FCF7AEEEEAA3DAD68FE6E19EEEECB6979870090B00000000655B43DBD0AEA49868FDF8BAE5E8A0 F9FFB4737336060400726F4653512F2C2B15EEEEBBFBFBC1CFD188EFF0A2F2F0A2E5DF95E4E194 E0DF88E0DD8FEAE4A2F1E8AEF1E8ABF1E8A5F2E69FF9EAA7F9E9B3856E4E140000483D2EB2B18B 5D5236080000735B38C2B264C7BD73635E22DCDDA2A9A781060300908F55F8F5A7FCF1A5C18044 EFB27E432403514F2EF2F4D0FDFCE0D7D8B4C6CC9BD7D399F4E9A9F6EDA7FBF3ABFAF2AAEAE29A F4ECA4F9F1A9DBD38BE9E199F3EBA3DFD78FE3DB93E7E299DEDE94EAEAA0EBE89EECE59DEFE69F F1E49EF0DF9AF6E3A2FFF0AFEDD393E2C384A97139A05A27C47F4CFBC48EFFF3B6FCF8B5F1F3AD EFF1ABEFECA7EEE9A5E7EBA4DFEBA1EAEDA6ECEEA7ECF2A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE9E9E98889884446442D2E2D707070 D3D3D3F4F4F4FFFFFFFFFFFFD7D7D79B9B9B3434343B3B3B9F9F9FEBEBEBFCFCFCFEFEFEE7E8E7 9292924545451F1F1F828282ECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFBF9FBF2E2EFE6BCEAE3B2FAF8EC FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFB F2F7E2D7E49BD1E6ACD3E7C3DACB88DCC269DCD380E6E9B4FAFAEFFFFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF2E4FDE4C7FADEB5F3E5C2E7F0DACDEFD0C0E9BF DFF4DEFEFEFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFEAFAFFD6C6CFC6F6FF7BABAEFF6F6EFFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEFEFE8B8B8DA5E5EED4141FFBABAFFE9E9FFFDFDFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCF6F6F6EDEDEDE5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5 E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E4E4E4E6E6E6EFEFEFF8F8F8FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D99494943A3A3A232323 7A7A7AD5D5D5F6F6F6FFFFFFF6F6F6C7C7C77777772D2D2D4F4F4FC6C6C6EEEEEEFFFFFFFFFFFF CDCDCD8383832B2B2B3A3A3AADADADFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FEF6EEF9F5E6F6F5E3 F5F5E2F5F5E2F6F5E2FBF6E7FFF7EDFFFDF4FFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF4F4F4D4D4D4E3E3E3F6F6FBE5E5FFA2A2FF5A5AFF7272FFE9E9FFFEFEFEFAFAFA EBEBEAEDEDECE5E5F38A8AF65151F77C7CFCBCBCFFF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D47BE8DA81E9DB82E3D57DE3D57C DFD179EADC83DACC73DFD179E2D47BCBC067CFC871EAE48EDAD283D6CE84D3CB85DED694918847 50470B766D2FB0A764CCC47DDCD48ACFC67ACAC27DC3BA78C5BE7CCFCB85E0DE90DCDC89E2E490 E5E697B6B8720B0B00646131E1DFA3E7E49AE0DC83F1EC8AE6E17CE5DC7DE5DB83EAE28FFBF4A3 F7F1A0DDD8869C9643C9C26ED9D37DE0DA81E0D87FEBE289F0E68DEDE28BEDE28CEFE390EEE18F E9DE8CE8DD8BECE191EBE090F2E798F8ED9DE7DC8CE6DB89EAE08DEDE38CEBE18AF3E990EFE18D E6D784EEDF8CEEDF8CF2E390EDDE8BDDCE7BE8D986F3E491EBDC89E5D684F1E38BF2E584ECE07C EFE483E8DE7FE2D97CEEE58BEFE58EF6EA95EADC88E5D883EBDB88FFEB9CFBE4A0F4D6A0E2C999 EDDCABD9D095C2BC826F6B3F413A211F18048A825B9C9756928A4A746B2FFDF3B5F9F2AFBCB16B 6C6022F8F0A6EFE299EDE39DF6EAA8746A2ABAAC71FEECB98165359D8651FCECB37A6D30D0C788 FFFDC08680477D77456C633C130B004C3E249B885EE6D2A3FCEBB4DECE90F3E2A3FAEEAEF1E4A2 E8DA96F2E99CF1EB94EAE382EDE588F4E695EEDC8DF7DF93FFF0AACE9F5C784201E0A867EBBA76 FEE89EE9D482E2D983E2D488E9DB95E3DB92E9E59BF7EAA1F9D38F884C0DB57D38FFE090EFDC87 FFEF9EC59859764A272C0B00D1BC93EBE8B11E1D0D848645FFFFC1F9F2BDF2E8BAB5B086312A0B 554F382B250529221A3329216154374F3E26503B24472D1E3A1E075A3C1992724EAB8A5CCEA86F F2CD8BFFE5A3F9E8A2F2E69CF2E698FDEC9AF0DE87F1DE89EFE595E2E196E9EAA3FFF5ABFFE19A C49253A2612AFFE5A3F0F2A6F5EBA1FFEDA5FBDB95905715DDB56DFFEB9FFBC17ABA8A3FFFE097 FBD48EBE8243BE8140FCE095F0F298D4EB90ECFBAAE9DA97EFDC9CEFE29DF0E49CEAE096EDE39B F3EAA7E5DDA1F7F0BFDBD5A7A49F70B9B685E0DCAABBBB92919267ECEDB1E3E2A9373605A19E67 FCF9A8E0E08CFFFFB85F5B320A0500A19968FFFFC5EAE19EEAE19CCEC57FB5AC63D4C981ECDF98 F3E49DE7D492E9D293E4CA8EF1CD8ED09D5BA77539B38943DCC172FFECB7F0DEA78B82442C2403 A6A46FA9AD6A989E5A89864AA9A2706E6B4338381B090C012321018F8860F9F0BFFFF8C1E7E3A7 F2F4B6BDC0840B0900221E10020000141200AFAF79E6E5ABCFD18BD9DA8EDDDB8EEEEAA1F3ECA7 D6D288DCDB85E3E092E4DE9CEFE5ADF3E8B1F2E4A9E0D090FFF0B3FFF2BDC8AE87351701362817 EAEABEFFF8CFA38B68250D059A88316D62145C5617ECECAFA0A0790303009B9A64F4F1A4F5D78A B77639F8BF87B69D692827082D2A097D78609C9776C3C89DEAE8B6FBF4B9F9F0ABF2EAA1F9F1A9 FAF2AAFCF4ACEEE69EEFE79FF7EFA7F8F0A8E4DC94EBE39BEFE9A1F0EEA4EDECA2E5E298E9E69C E8E49DE9E29CF2EBA8FBF1B0F9EDAEF9EEAFFDF0B3FFF6BCE2AF7CAB6634AA602ECB8952F5D393 FDEEA7F8F3A8EEE89CEFEDA2FCFFB3E8EFA7EDE8ACF4EDB7F7F3BBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDFDFDF7979793C3D3C313131 7B7B7BDEDEDEF9F9F9FFFFFFFFFFFFC5C5C57B7B7B2B2B2B474747B2B2B2FAFAFAFEFDFEFEFEFE E3E4E37C7D7C3A3A3A2525258D8D8DF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDF7F0F1D4E9EABD F0F0D1F7F8E9FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFB E9F6E8D9EDC9D2E398E7F0C2FEFBEFF5E5BAE2CD77D6C254D8CE6DEAEBBFF7F9E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9EDD3F4DCADFCE2C1FFF0E0FFFBF6E5F6E7 CAEAC9D2EED3E6F5E6F9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8FEA3A4FD7171FB7D7CF5BEBEECF3F3ED FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4EEC5C5E37070F04E4EFDADAEFEDEDFFF FBFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D68A8A8A323232 2222227C7C7CD6D6D6F6F6F6FFFFFFF2F2F2B1B1B16464642F2F2F606060D9D9D9F8F8F8FFFFFF FFFFFFC0C0C06A6A6A222222434343B8B8B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF4F4F4D7D7D7E4E4E4F9F9FBFBFBFFB7B7FF5A5AFF6161FFD4D4FEEEEEF8 F0F0F0E9E9E9E9E9F1DADAFD7676FF4B4BFF9999FFE7E7FFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D57DE4D67EEFE189EFE189 E6D880E1D37BD8CA72D8CA72DED078E0D27ADAD076CDC668E2DC81D0C874DCD484AAA259DBD38C F0E7A3D9D08E9F985A665E1D4E46064C4315645823A99C6CC2B689D1C69AE7E0AEEDE8B0EAE5A9 E5E1A5D5D39DEBE7B86D6945080500C7C386F2EFA6E5E086E9E57FE9E57ADFD672EEE688E4DA83 F8F2A0F6F09FF9F3A2E5DD8799913CD5CE77E9E38BE6DD86E5DB84E4DB84F0E58FF0E48EE8DD87 E9D987E8DC89DFD482F0E595E6DB8BECE190F0E594F2E695EBE08CEDE38FF2E892EFE58EF1E88F F1E28FE7D885EDDE8BEEDF8CF2E390EADB88E6D784E4D582EDDE8BF2E390F1E28FF8EA93EDDE7D F0E17DF0E17EEEDF7EF0E181F4E586F7E689F1DE83D6C368EBD77EFAE58DFFE88AD6B651B1903A EDD386EEDE92F5F19EECEB9DF8F9B8C1BE93110B006F6932BDB666B8B0682D2401E9DFA1EDE2A1 F2EEA6655B11D0C379F9F3A9DED089FAF6B5AB9D618C7B42FFF5B99C8045664F11F0E1A1D6CA8A 6A6121ECE5A8E6E1A9484212231C0BB1A982F7EDBEFFF7B3F9E99DE3D382E7D683F4E492F9E99E F8E8A3F2E3A2F1E3A0F4E89FF6EA9BF5E895EFDE8AECD583FADB8CFFE19797641F854E0DFACC85 E5B86DF8DC8EFFED9AF3E68FF2E293FAF3A9E0DB90F5EDA6FFEFABCCA3637C4402DAB66AF9E08D FDE894F1CC80A27135663D1E492D0FF6E3B7CCC39D2F2F02E9E9B1FFF9D4FAF2C28C8250120905 2420005E5837C6BE96E8E0B7EBE2BCECE2BFF9EECCEEE0BDF3E2BEDAC49E876946431F004A2305 825521BA8F4EE5C588FEE9A5FDEFA8F5E698EFDB88FFED97FBE895EADD8FE8E59CDFE39CF4EDA3 FFF2ABF3C588A25926DDBB7BFCFEB3F8E9A0F4E097FFF0A7BA7C39BC8840FFF2A4FFE599BB8E43 E7B770D29B59A86E2EFDDA96FCF1A4E8F19DE7F9A5F5FCAFFCEAA8F2DF9CF6EAA0FAEEA3EAE095 EDE399FAF2ACF7EFAEE4DFA2ECE7ADECE9AFF1EEB4E9E7B16E6D431B1B07C3C682F7F7BF3F3D11 827E50DDDD90F7F6A9918D4B090100908961FFFFC8FFECB8FEEBB2E7DE9FC3C57D363E01F2FCAC EDED9FFDF7ACF8ECA7F2C889E5AC72AA6E30A9752EDEAE6EFFE7A0FFF2A6CEBE8E847D4BDCDAA4 1312008D8F61B4BA798184456D673A918768746F5200000091956FC8C89CB0AC70E9E3A0ECE3A1 EDE8B0F5F4C6585833403D27D8D3B08D8A67999765E6E5AAD3D28DC9CA7EE6E595D2D083EAE69E F0E8A8DCD894C9C877EAE79CE4DE9DEAE0A7F4E7B1EFDFA3FDF7B8EDDA99FFECADA68C54997B4D 110300B5B283FFFCCDFFF0CCAD9162AD9941897A2AD0C785C0C0825B5A3602030077794AFEFFBB D2B066AE6D31FDCC91FBF2B6D2D0977E79562F240B10080017190045431BC9C18BF3EBA7EDE59D F0E8A0EDE59DF9F1A9FAF2AAFEF7AFF7EFA7EFE79FE9E199F5EDA5F0E9A1F4EDA4F0E9A0E8E299 F5EFA7F3EDA8EDE9A5F2EDADF9F5B6F7F3B6F5F2B6F4F1B5FCEEB5FFEDB3FFE6ADE8B37AB66D36 AE6128E4A969FFEAA2FDF6A9EEE89AF8F5A9EAE09CFAE7B2FEEBBAFEF2C0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF5F5F5F3F3F3F3F3F3F5F5F5F7F7F7F7F7F7F6F6F6F2F2F2E1E1E1BCBCBC5757572A2A2A 3535358C8C8CEEEEEEFFFFFFFFFFFFFFFFFFB6B6B66162612D2D2D5C5C5CC5C5C5FFFFFFFFFFFF FEFEFEE3E3E37B7C7B424342383838999999F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF7 F5F5E1E5E5B0EFEECBFDFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4FBF4CBEBCBB4E4B1D4F5CBEBFCE6FCFEF7FFFEE9F4E5A9E4C259D6B73CD6D271E9EABAFDFDF8 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFBFBF2EEEDC8E6E2ACF6F2DBFEFCF8FFFEFE FDFEFDECF8ECC6EAC5B8E4B6F0F9EFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D6FE9FA0FC6F6FFD7372EDA5A5D4 DADAD5F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF2F2EDC9C9E18686EE6363FB999AFD CDCEFEF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F3F3F3F3F3F3F5F5F5F6F6F6F7F7F7F7F7F7F7F7F7F6F6F6F6F6F6B8B8B8616161 1D1D1D2C2C2C909090E9E9E9FAFAFAFFFFFFF0F0F0A0A0A05A5A5A3B3B3B777777EAEAEAFFFFFF FFFFFFFFFFFFB7B7B75B5B5B272727535353BEBEBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF7F7F7FAFAFAFEFEFEFFFFFFC6C6FF6363FF5555FFADADFC CFCFEDE3E3E3F7F7F5E2E2FCB5B5FF6363FF5858FFB5B5FFFFFFFFFEFEFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D67EE4D67EE7D981 EADC84F3E58DE4D67EE3D57DE1D37BD9CB73D8C972D9CE73CCC461CFC667D4CC6FDCD57CC6BE6D AEA658DED68DDDD78FE0D892EEE9A5CDC8849F975D44390B1C1000190C00291F00524823756C43 8F865BA19A70C7BE9FC2B8A18F846F0A020088824AD1CC87E9E38EF1EC8BF2EB86E9DF7DF4EA8E F1E691EBE493F4ED9EF9F2A1F1EA92FBF49BC5BE66D5CB74FCF29BF0E68FEADE88ECDD88EEDF8A EDDF87EBDC87EBDF8AEBDF8FEADF8DE4D987DDD37EE7DD88ECE28DECE28BECE28BEAE089EBE18A EFE58EF8EA96F1E28FF1E28FF1E28FE9DA87E7D885EFE08DF0E18EF2E390F4E592F1E28FECDD89 ECDB80EFDD81F6E387F0DD81EDD97EF7E287FFE78EE9D179D2BA62FFED98E6CF7AFCE280D4AF3B F3D06AFBE084EFDE81DBD573E0DE82E9E99CD6D49C1E1A04625D20B1AB55E4DC922D2200BCB274 F3E9A8EFE69E9F954CA0974AF5E99FFDF0AAF0E19DDDCE8E736022FEE6A2AF974F99843D66540C FFFFB9938C457B7333F7F6BBF1ECB4756F3BC6C090ECE3A9FAE996ECDB7FCEBE5EEEDF7EFFF195 F7E693F1DF97EBD999F0DE9FEFDF9DF4E59FF3E597DCCB78DBC170FFE192E9BA6E743F00AC772F FECE82FAD989F7DC8AFEED99F4E893F2E191FBEFA2E8E69DFBF1AEF7DA9EB07E4393611EF0D082 EFD884FFE394E0B671905E255430097D6342FFFACD433B20A6A47EF9F6D0DDD3C1786F460A0000 625B32D2D096FFFFBDF6EDA2E9E197EDE59DEBE4A1E5DD9DEBE3A4EEE1A2FAE7A4FFEDA7DAB870 A77F3563410D321400926D2FB98E55FFD99BFFEFAAF0DF8BF7EF95F4F196DFD987F8F2AAF5E9A8 EEE59AF4E49CFFE2A2AB632FAC8446FCF9AFF5E29AF5E49AFFFAAEDCA25FA36C25FFEA9BFFEE9C FFDD92B67833B2702EF2C47DFFF4AAF3F1A4E3E699EAE79EF2E49EFDEBA9FCF1A8F6EA9AEEE393 F0E799E5DC91F8F1A6E9E299F6F2A9E1DF95EDEDA6CFCE8CF5F3B5746F4C161209DCDC9EDDDBA9 4542217E7A59D9DA99B6B5710C08007B7251F4EBC3C3BA83BCAE80AFA373F1EEB7A1A76B212B00 E4ED9DF7F5A6FFF4A5E7C276AB742DB66F2DE3A45CFFDC90FFEFABFBE099FFF8B1A9A1793B3A21 FCFCD565634D535330C6C488B9B47884794E72674947412C32321ACFD2B2F5F5C8FAF6B9EEE9A1 F1E9A2CBC68CCFCEA335341AB2AE95F5F2D5D8D3AAE0DDA4F2F0ACD9D78AEBEA99DFDC8CE4E096 DAD691E4DF9FD9D491DCDB90F0EDA5EEE9A7E6DD9FF2E6AAF2E1A2EEDC96EAD78AF9E89BBAA055 BA9E56332600ADAA76A09565E6CDA7C0A271D8C167F9E794FDF9B469682E4A4A250405006C6F3D FBF5B2C9AB67B07339FEDFA4F8E1A2F8F8C2FDF6C8F4E6C3DBCDACBEBD95ABAB7CE0DCA6F6EDAA F2EAA2E8E098E9E199F2EAA2F5EDA5F0E8A0F5EDA5F0E8A0F5EDA5F5EEA5EADF98EADD94F2E69E F7ECA4F4EAA2F0E7A4EDE5A3ECE7A7EFEBACF2EFB4F1EFB6F0EEB5F3EBB0F6EAAEF5ECABFEF7B4 FEE7A5D49657A05418CB8245FBCE8EFFEDAAFCE5A0F8E6A1FFF0ABF7E7A4FEEFABFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEEFEFEFB6B6B6A3A3A3A3A3A3B3B4B3C0C0C0C1C1C1B9B9B9A4A4A48B8B8B6B6B6B2B2B2B 323232696969B8B8B8F5F5F5FFFFFFFFFFFFFFFFFFA8A8A8494A49343434707070CFCFCFFFFFFF FFFFFFFDFDFDDFDFDF6767673E3E3E4A4B4AA5A6A5F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFBFBEFF1F1C5F6EDC7FEEDD8FFF8F1FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2FAF2C6E9C6B1E2B0E2F9E2F5FFF6FEFFFDFFFFFAFCF5D6F2DF9CE4C862D8BF4BE1D385 EEEECCFBFAF1FFFEFEFFFFFFFFFFFFFFFFFFFEFEFCF7F7E6E6E9B6E9EABCF0F1D2FAFAF1FFFFFE FFFFFFFFFFFFEFFAEEB4E6AF99DD92E8F7E7FDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9FD8585FB6060FB7878F3 B8B8E6EDEDE7FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF2F2EDCACAE28A8AEE6868FB 9495FCCACAFEF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD5D5D5A6A6A6A3A3A3B1B1B1BCBCBCC2C2C2C1C1C1C1C1C1B9B9B9989898656565 333333272727575757B1B1B1F8F8F8FDFDFDFFFFFFECECEC848484454545414141888888EEEEEE FFFFFFFFFFFFFFFFFFAEAEAE4B4B4B2B2B2B616161C3C3C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEFEFEFF4F4F4FDFDFDFFFFFFD2D2FF7C7CFF5C5CFF 8C8CFCB8B8EBE1E1E1FAFAF7CCCCFF8989FF6464FF8080FFCDCDFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D780E9DA84 EADB84E7D982E9DA83E3D57EE2D47DE3D47EE0D17AE1D27CE8DB7EE2D974E2D976D6CE6DD3CB6E C6BF68A8A14EAAA254E5DF94DBD78ED3CF87DED996DFD89ADED69ECBC18D978F5F80784C807848 332A152D2504120B002016001A0F030C00000E0500666131E8E29FF7F09EEDE589F1E889EDE386 E7DC85EFE493F9EE9FF3EA9BEBE391F3EB91F7EF94ECE48AD4CA73A59B45F1E690F5E894F6E792 F6E791F3E58DF0E189F2E490F2E797F0E492EEE490EAE08AEFE48EF0E68EEEE48CEEE48CEBE18A E9DF88EAE189E4D682EADB88F4E592F1E28FE9DA87EFE08DEBDC89F4E592F6E794EFE08DEADB88 EEDF8DE6D684E8D685EEDA87EFD986F2D985FCE38FF8E793CCB15CE5C977FDE391FFF1A2E7C86A DAB647FFE683F8DF83E5D377E9E07CE9E687F4F0A4DED8A428220C4C4611868135F4ECA94C4009 8E8447F0E7A5F9F1A9B9B0656A6114F4EA9DEADC93E9D893F4E2A17C66259B8336D1BB6BFDEE9F 817022C6BC6DF8F3A7857F35B0AB67FDF8B7C0BC7D716C31D9CE8EFFF1A2EAD880D3C365F2E384 F9EA8EF4E48EF1DF91FAE9A1F5E49EFBEAA3F6E99DEDE192E2D483F5DB8EFFE69CB6843D834C08 DDAC61F9CF81F5D585F9E391F4E591EBDF8AF9E999F8EEA1DFE199E2D397FFF0BE945D2A875A18 FFEB9CEDD782FCDF95D5A76B91602A260A00C9BB86ACA1752C280FECEBD2CCC6B231271C030000 716533FFFFC0FAFAADE2DF88ECDF85ECE087F3EA94F2EB96EEE796F2E99AF5E898FAE695FDE591 F2D17DE5BF6AEFD182967B343B1602956731B2834BCDA866F4E091F1E690F0EB91F7EC99F7E196 FFEBA6F4E89CF6E89DFFF1AEC88951A07436FAEEA8FFEFAAF4E49AFDF1A4E8C07BA76A27F4C97E FFFDA7F4C87AA8641DCC8742FFF8ADF1EB9CF0F9ABF5EEAAFDE5A8FCDFA0EDDB96E3D787F6EC96 F7EC9CEEE496F7EEA4ECE49AF7F1A5E5E292EDEC9CEDEDA1F4F4ACCCCA8CBCB7960F09009B9967 FEFCD2908C68736F4CFDFCCA55522B4F4A24DBD2B5F2E9BEC9C58D6A6C42494B23C5C695A7A56C 362F00E1D38DF7E49BBF9D50AB8031C79444F7BE70FFDE8EF8DB8AFFEDA8FAEAA5F5EFABB2B08F 333318EFF0CCAEAB9748421BE2DA9ED8CD8DEADFA5BEB68A0C07005A58463335212F2D14BDB787 EFE9A9F4ECA6EAE6A7D2D1A03132196D6A4D645E43C7C393EAE8A7E5E395EFEB99ECE996ECE89A F2EDA5D6D18ED2CD8CE2DD9BE3DF98E4DE99E1D996DFD693F2E5A1F4E59EF5E397FBE997F3E28C DDC971D9C2693F35096A693B5E5226785F3BCCAD7EC3AC50F1DF8BD9CF87E9E5A3C7C69E363718 2F3013E8E3A7BCA164CD9961F7CD92DDCF8D616726A49D6AE1D3ABFFFDD9FFFFDDFFFFD2FDFCC3 ECE49FF3EBA3EEE69EECE49CF2EAA2F4ECA4FEF6AEFAF2AAEFE79FF4ECA4F7EFA7EDE19AEBDA92 FDEAA5FEEFA9FAECA6FCF0AFFBF2B1F5ECADF2ECAEF3EDB2F3F0B6F6F3BAF5F5B7F4F4B4F2F0AD F6F0AAF8EEA8F7DE97ECC483C07F43AC6129E49E66FDDFA3FFF4B2FFF3ABFCF9AEF5EFA3FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEE4E4E48484845C5C5C535453696A697D7D7D7B7B7B6D6D6D5353533E3E3E2C2C2C 1D1D1D515151A6A6A6E3E3E3FBFBFBFFFFFFFFFFFFFFFFFF9B9B9B3434343738377F7F7FD5D5D5 FFFFFFFFFFFFFDFDFDDCDCDC5B5B5B3839384E4E4E9C9C9CE1E1E1F8F8F8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFF8FFFFE5FFEECDFFE0BFFFEEDCFFFAF4FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEEFAEEC5E9C4B5E2B4EFF9EFFEFFFEFFFFFFFFFFFFFFFFF9FEFCE2F4E2A1E3BC4E DEC45FE1D891F7F0D8FEF8F3FFFAF9FFFCFDFEFEFDFAFAF0EEEFCADADE8CE9ECBAFDFDF9FFFFFF FFFFFFFFFFFFFFFFFFEEFAECAFE7A890DB87DDEEDBF7F8F7FEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBBFD6C6CFA5858FA 8484F9CFCFF9FFFFFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF1F1EDCCCCE29091EE 6D6EFB8D8DFCC4C5FEF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFBABABA6868685B5B5B6C6C6C7979797F7F7F7A7A7A7979796E6E6E404040 242424202020494949919191D5D5D5FFFFFFFFFFFFFFFFFFE8E8E8696969303030484848979797 F0F0F0FFFFFFFFFFFFFFFFFFACACAC4848482C2C2C5E5E5EB1B1B1F0F0F0FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFDEDEFD9A9AFB 6767FC6868FCA6A6EFE5E5E6F8F8F8B3B3FE6262FF6F6FFFAFAFFFE2E2FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D37E E6D782E7D883E1D27DDDCE79EBDC87E6D783E6D782E4D580E4D581E8DB80E1D875E3D977DBD171 DCD376DBD47CD3CC78716B1A6C691EDAD68DD8D48FD0CE8AC8C47DC6C27AD8D391E5DFA2EBE4A8 E5E0A2C8C282C7C182989159675F35A2977D5F533E2C23027D7542EFE8A6DFD688F0E790F8EC93 E8DC86EADE8DF9ED9EF4E999E8DF8DF3EC93F1E78CF0E78CECE288F0E68FBFB35FF7EB97F6E794 F5E691F0E28AEEDD86E9DA80EADD87EEE292E8DD8BEBE18CE9DF89E9DF86E7DE83E8DF84EBE188 EBE18AEAE089ECE28BDDCF7CE7D885F5E693F1E28FEADB88F1E28FF8E996F1E28FECDD8AEFE08D EDDE8BE7D887EEE093EDDC90EFDD8FF5E090FCE494FFE897E4C976D1B461FFEF9DFEE797FBE395 CAAE57F3DA7AF8DA85EFD482F2DD88F8EA8DE4DB82EAE19BD8CEA12E25113D360C727031FBF3B5 7D7137696028E7DE9AEAE299DAD383484003DDD281F5E799E9D890F6E39FB09B564F3A00F2DD89 FCEC9AB7AA57837A28F3ED9DD3CE80716E23E2DE95FFFFBDCCC781736925F2DE9CD8C57CDCCA7A F8E891F1E089FFF29CEADA89EEDE90FFF3A5F2E391E5DA81EBE28EEBE198FAE39EFED693A3702F 9A6421F4CF87F8D387F4DB8BF9E897F1E592E8DD8CF5E496F6ECA3E3E8A6FFFFD0C6A078672C02 B38D4DFCF3A3F6E391FDF0ACBF8C5A7342153B2416ECE3B52B260D7A7C57D1D0BF221C11100900 3F3215E2D5A5EFEA99DDDD82E8E388F8E994FDEE9BFCF19DF4E997EEE493EEE394F0E091F0DE8F FDE999FFEEA0F1CE7ED5B466EECD85C6B6752B0A00987738D1B173B59952E3C77AFFF19DFDE390 FCE593F6E092F7EB9CF4E598FFF5ADE0B171805114F0C98AFFF3AFF7E99FF3E99BF6DF97A86727 DAA05BFFFFA9CB9F4F8E4803E9B86DFFF29FEFF4A1ECF7ABF8E9ADFCD9A2FFDEA1F8E89DEEE793 F2E992EDE293F4E9A1ECE19EFAF2ADF3ECA1F4F1A1F4F3A3F1F1A5D3D28F716F35F7F0D23A3320 6D694CFFFFDF807E606C694EDFDCB70E0B00A59F7EE5DDB9C9BF8BFAF8BF87966C4A5731EDEEC2 C5B483452702CEA668B58645A87931D2A858FDDE89FCDF86E7D279ECDE8BF2E7A2F2EBA9F0EEB1 C7C3A9161500D8D5B6CEC6B4332A03F1E7A4E0D38AF3E99F9B9656010000201E0D010100010000 A59E7DFFFFCDE6DD9AD1CD8DFAFBBF4C4F280A07000F0C00B9B77EF7F5ABE6E290ECE892FAF3A3 E1DA8FF3ECA8F5F0AECEC986E7E19EE0D994CBC47DF4EEA5E5DC92DAD083F1E596F5E696F0E18F E8D783D9C771C8B65F867F3F161700D1C79B3119099C7D51D0B85CFCE792E5D78FECE6A2FCF8CF AFAD89090A00979660856E39C1915FFFF6BDF1E8A4BEC8825750183E29066E58308B8656B6B781 EEEDB1E7E09BF4ECA4F1E9A1EDE59DF2EAA2F5EDA5F9F1A9FDF5ADF9F1A9F9F1A9F3EBA3EADF98 F3E29AFFEFA9FCEBA6F2E29DF3E6A3F4E9A8F5EAADF7F0B1F7F0B3F7F1B6F3EFB2F3F7B5F3FAB4 FBF5B3F4EBAAE7E29FEDEEA8FFF9B4FFF4B5E6B37BAC6531C47A46FFCA92FFF6B4F5ECA8FAF3AE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEE9EAE99E9F9E6161613535353030303131312424241E1E1E292929393939 4E4F4E747474A8A8A8DEDEDEFAFAFAFEFEFEFFFFFFFFFFFFFFFFFF8E8E8E1D1D1D2A2A2A7B7C7B D5D5D5FFFFFFFFFFFFFEFEFEE1E1E17273723334331B1B1B4142418C8D8CD6D6D6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFDFFFFF8FFEED8FFDDBAFFDEBDFFEAD6FFF9F3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEF5FFF5DDFBDDBCE9BBB4E1B3EFF9EFFEFFFEFFFFFFFFFFFFFFFFFEFFFEF7FDF8DF F5E7ABE7C968E0B74AF7D8A6FFE3D1FFE6E4FFF4F8FAF9EFECEDC6E6E6ACF1F2BEF9FADEFFFFFD FFFFFFFFFFFFFFFFFFFFFFFFF7FEF7D8F8D6BFEABDC5CEC5E0DFE0FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBBFC7070FA 7272FC9F9FF7CCCCECEFEFEBFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0EDD3D3E2 AAAAF08484FC7071FAAEAEFCF5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFCBCBCB8888885F5F5F4A4A4A3C3C3C2E2E2E1E1E1E1A1A1A1F1F1F 3232324B4B4B6C6C6CA6A6A6DCDCDCF4F4F4FFFFFFFFFFFFFFFFFFE5E5E55454542222224F4F4F A4A4A4F1F1F1FFFFFFFFFFFFFFFFFFBEBEBE6666662525252121215353539F9F9FEEEEEEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFCFCFCFFFFFFEAEAF8 B6B6EB6969EC3636FC9595FBF7F7F8F1F1FD9F9FFF4F4FFF8888FFE1E1FFFAFAFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E5D681E3D47FE4D580E2D37EDDCE79E7D883E1D27DE3D47FE0D17CDECF7AE2D47BE4D67BDBD074 DACF74DED47DD8D07BD4CC7DBCB66A5E5A11615E19ADAA67CCC989E1DF98E6E499CECC82C5C27D D6D38DD1CD84E7E497E7E497ADA8628E884CBFB686EFE5BCDBD3A1D9D297E4DC98DFD688F1E894 EADE8AF4E494EFE193F9EC9DF1E790E9E186F8F293F2E98AF3EA8FE7DD83EFE28CF4E894E7DB87 EDDE8BF1E18CEEDE87F4E48CF5E68BF2E58FEDE191E8DD8BEDE38EECE28CE9DF85E7DE83EAE183 EDE48AEEE48DEDE38CEFE590EADC88EDDE8BF0E18EEFE08DEEDF8CEBDC89F6E794F3E491ECDD8A E6D784E9D986EDE18EF2E899EEE295EFDF91F6E390FBE38FF8E089CBB159ECD27CFFEE98FAE48F D2B966DFC671FEEA92E6CD80F3DA8EF8E38FEFDC7DDCCD70E5D78DD6CA9C2C21113B36117C7B43 F8F2B6A99D60534A1BE3DC94E3DD91E9E39161590EA39845EDDF8EEEDB8EFFE9A1A99048483501 F8E895EFE090F3E896817828CCC575E8E294A49E51B1AB5EF7F0A4F4ECA0C0B46E8D783FD3BE7F E0CD85F2E191FFF09BEDDD89F0E18FEBDB8DFAEF9CEBDF88E4D980EAE595ECE8A6E3CF90CBA76A 7C4B0EAE7C3DFFD793FBDC91F9E799F2E596F8ED9DF0E496F6E599F6F0A8E9F1B3B2A276461900 723512CCAB6EFBF1A4F3E697FADEA1AA754C4F1F0475643AA29D7B0A0901B7BE9234361C130E08 706A339B8E5EFFF4BBE5DE86E6E588F6F09DEDDE99F4E5A1F3E5A0F2E69EF6E8A1F2E39DF6E8A2 FDECA8F2DE9CFBE4A4FFF1B4FADB92DEBB6AEED28AB2A0581B0B00B59D63E2BD80B2833FE4B267 FBDD8CFFEC96ECDA81F9ED99F2E695FCF1A4EFD28C7A4709E5A96FFFE7A7FAEFA5EBE99AFBEAA0 B16B31D18146FFDA8CBB8536B06E20F0BD6BE7D47DEFF19FEDF1AAF9E6ACFBDCA4FFE7A6FAF3A3 F4F09AEFE594F6EAA2FFF6B7E2D69DE3DDA07B7431F3EFA6F2F0A5FFFFBE8D8B50716D45FFFFE2 7E7563383222BEBB94646342747555D5D4B7000000433E213E3810423A19F9F7BDAAB285464722 F0E4B7F6DFB263391E552200B88447E8BD7AFFE499F5E290E7E28AEBE88FE7DF8CDCD391DAD395 FCFAC6DDD5C5130D02C0BAA1A59C8C443B14F4ECA1F9F29FFFFEAACFCB833A370841402A19190F 0B0700978F69B5AE74D5CD89E5E1A1F5F5BF54572A18160AA19F6CECEAA9E5E492C7C46CBDB861 E7DF8FD2C98288803FD3CE8CF1EEA7C4C077DFD88FE5DD92EEE796F4EC99F1EA94DCD180F0E395 F2E49AEEDD97E8D793CCBA77F2ECB75B5D35020000240E0058390FC4AB51F1DC86F6E59DE0D993 DAD4A6DFDBB457562F070700170800411D04E6CC93EEEEA8EDFBB2F2EBAFCCB684B29B6C423C0B 3E4014C1C282EFE9A4F4ECA4EFE79FECE49CF5EDA5F9F1A9F1E9A1F6EEA6F7EFA7F7EFA7F2EAA2 EDE49CF8EDA5FAEFA7F8EDA5F1E8A0EFE6A1F0E8A4F4ECABF3EBAAEEE6A7F3EBADF2EDAEF6F1AE EEEDA5F3F5B1FCFABAF4EDB0F7E9B0F8EEB4EEE8AAFDF9B9F3D79ABB7D47A45423CFA46FFDEEB6 FFEDB5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF3F3F3CACACAA1A1A17E7E7E767676737373696969676767757575 8686869B9B9BBCBCBCDCDCDCF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8B8B87171717A7B7A AEAEAEE5E5E5FFFFFFFFFFFFFEFEFEEEEEEEAEAFAE8283826B6B6B7A7A7AA8A9A8DFDFDFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF5EAFFE9D1FFDFBDFFE1C3FFEDDAFFF8F0FFFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFFFEE6FBE6CAF3CAC6EDC5D3EED1F6FCF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFE FFFFF8FDF8DDF2D795EABB5BEFC270F8CE9AFFDBC5FAE9D6F0EFCDECEDBCEFEFBDFBFBE0FFFFF3 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFCFFFCEFFEEFDAF2DABACFB9D3DFD3F8FAF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3E9E9E9 F4F4F5FFFFFCFFFFF7F5F5F6DDDDFDC0C0FEABABFEB9B9FDD7D7FDF7F7FEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEFEFFED8D9FEB7B7FEAFAFFEBEBEFDDDDDFEFAFAFFFFFFFFFFFFFFFFFFFFBBBBFC 7272FA7B7CFCA7A7F5CBCBE6E9E9E6FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0ED D5D5E2B2B3F08C8DFD6868FAA6A6FCF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3BDBDBD9F9F9F8B8B8B7D7D7D707070656565616161 6767678080809A9A9AB5B5B5DBDBDBF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFEFEFEF939393767676 959595CACACAF7F7F7FFFFFFFFFFFFFFFFFFDBDBDBA8A8A87979796C6C6C848484B5B5B5F2F2F2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EBEBEBFBFBFBF8F8F7 ECECEFD2D2EC8A8AF13838FD7171FFB4B4FEA0A0FF7979FF6161FFA9A9FFF4F4FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE0D17CDDCE79DFD07BDFD07BD7C874EADB86E5D681E9DA85E7D883E0D17CE0D17EE2D37F D9CB79DFD381E8DC8CE0D889DCD48AF2EBA5ACA864716D2E8C874B6C6A2F6A672AAEAB69CECB8A D4D191E0DD9ADDD990E6E392DCDA87D4D182F5EFAA676027433916BCB579DED895DBD489E1D888 D3C775FFF6A4FEEDA0EFE092F0E491F6ED91F2ED87EEEA82F0E887F3E98CFEF59BE6DA83FFF29E F2E591F4E592F3E38EE7D780EBDC82EFE083EBDE87ECE191EADF8FEFE58FEBE188E8DF83EBE284 EEE587EFE68AEDE389ECE28BEEE48FEEDF8CF0E18EEEDF8CF0E18EF1E28FE5D683E5D683F5E693 F5E593E1D27FE3D380F6EA97F3EB99F1E996F0E68FF8E990F7E488ECD477DCC465F8E181F8E083 F8E286DFCB6FFCEB90EADA80F0DE8CF8E491F0DC7FE3D064E3D268EEDE87EBDDA52F2612444216 84884AF4F0B0C9BE803F3608DDD68DF1EB9BE8E490928B35918730FFF19DF5E193F2DD93B29850 695611CDBE71FFF8ADEADF928E8639958F42EEE89BEDE799746D1FE3DA8BFCF2A3FFF7AF806B2D 9B8744FFF4A8F1E28CF5E68FF7E795F8E89BFAEBA3F1E39AF5E89DF5E99BE9E7A1C8CA8D5E4F1C 3C1A006F3E08DEAB71F1C886FDE39BF5E79BEBE394F5ECA0F0E69AEEDD95F6F1ABCEDA9D221400 3E11067D4022D2B77EFFFFB4FCF6A8FAD59D8E58342F0100A3947F4A48334B4F2E737B570C1300 888B526F692CF0E5A0E1D489E2D885FAF69EEAE590EFE69FF3E9A1EFE59BF1E799F5E999F3E797 F2E799F0E59AEFE49EF4E8A7EFE3A2F6E694F8E68BC4AD5DF1D999A68A53452405F2D69CF3D794 CDA053C19641E2BE64FFE588FDE992F9EF9BF8F09DF7EB9D905A1DD78855FFE4A6F5EDA4E8EC9D F7EDA2C77E47C96532E8A55FE5A659F0BC69C99C42EEDA81E4DE8DECE7A4F8E8AFFFEDB3FDEDA8 EBEC96ECEA93FAEEA3F8EAAAF2E4AFFAEFC0BBAF7E483F06F3EDACF3EFADFFFFCA6D693A6E694D F9F0D0A99F89040000100E00676832B5B986F0EFD555523D020000433F1BADA767F4E9A7C0B083 574215EBD0A39D79472D0700996F34FFE5A7FDE3A1F8E8A1EFE89CDCDF8FD2D482D7D080E2D799 EEE5AEFFFDCE9084790100004038291D150E645F35F3F39FE8EA8CE9E592FEFCBDE3E0B578775C 040600666548C2BE85565109968F42FBF7B8B9B88C1213049E9C6FFFFFCAE5E39DE4E18BF7F498 EBE58CE7DD90E8DF9B9E965697904ECDCB82E7E398DFD78CDFD786F5EF97EFE98CEDE68AF2EA96 E6DB92F5E8A9EBDCA5756438897849FEF8D4EAEED160593E050000896943DBC069FEEC97EFDD93 F3EAA1F8F0BFF1EBC1DBDBA02C3016060000180000B3A068F4FAB5D4E59BECE6A8FFE9B4FFF4C0 F2EAB0E0E2A1F0F1B2F5F0A8F5EDA5EDE59DF0E8A0F8F0A8F9F1A8F4ECA4EFE79FEEE69EF1E9A1 F3EBA3F3ECA4F2EEA3F5F1A7F3EFA5F2EEA4F4EFA7F6F2ABF7F3ADEEE8A3E2DC99EEE9A5F7F1AF FAF1ABF4EAA2EFEBA7F3EEB2F0E9B2EFE3B2F4E7B8FEFCC8F8F4BAFBF0B2FAE4A3C49A5A814B0F C0884DFFD89DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4F4EBEBEBE3E3E3E0E0E0E0E0E0DDDDDDDDDDDD E1E1E1E5E5E5EAEAEAF2F2F2F9F9F9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0E0E0E0 E2E2E2EDEEEDF9F9F9FFFFFFFFFFFFFFFFFFFBFBFBEEEEEEE4E4E4DEDEDEE1E1E1EBEBEBF8F8F8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBFFF8F0FFE7CFFFDEBDFEE0BFFEEBD6 FFFAF5FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFCFDF2F5F2CDE6CDB3DDB4D0E9D4F0F5F7F7F8FDF9F9FFF9F9FFFBFBFFFDFDFF FEFEFFFFFFFFFFFDF6FCE8CBF6CF92E5B64CE6BD65ECD19EE8DCACE7E4AEF2F2C5FCFCE0FFFFF6 FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFBE7F6E7B0DCAECAE7C9F6FBF6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6E6E6 CDCDCDE0E0E1F7F7EFF8F8E6E0E0E7AAABFA7070FE4747FD5C5CFB9C9CFBE3E3FEFFFFFFFFFEFF FFFFFFFFFFFFFCFCFFD2D3FE9C9DFD5D5EFE4C4CFD6666FBA9A9FCF1F1FFFFFFFFFFFFFFFFFFFF B9B9FC6E6EFA7D7EFDABACF5CDCDE6E8E8E5FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F0F0EDD5D5E2B3B3F08B8CFD6262FAA3A3FCF3F3FFFFFFFFFDFDFFFAFAFFF9FAFFFCFCFFFEFEFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F1F1F1EAEAEAE6E6E6E2E2E2DFDFDFDCDCDC DBDBDBDDDDDDE4E4E4EAEAEAF0F0F0F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE8E8E8 E1E1E1E8E8E8F4F4F4FDFDFDFFFFFFFFFFFFFFFFFFF8F8F8EDEDEDE2E2E2DEDEDEE3E3E3EEEEEE FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1EAEAEAF7F7F7 ECECECEAEAE9EBEBF4B7B7FD5D5DFF5858FF6161FF4B4BFF5D5DFF8888FFCBCBFFFAFAFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE8DA82E6D880E7D982E6D881DCCE76EBDD85E5D681E9DA85E2D37ED6C772D6C773 DED07FD7C779DACD7FDED283DBCF84DBD389D5CC87EFE8A6C3BC7E7A7439A9A36CA19C64726D35 56511858531C504B118F8C489F9B58B4B06CD4D188E7E1A4E9E2AA4C44222D2804C4BF75DED78A F8F09FC9C06DDACF7BF3E795FBEE9CF4E893EEE486F0E884F2EC83FCF390EBE181F2E88AE7DC83 F6E890EFE08CEFE08BEEDE89E3D27BEDDD83F6E78AF1E48BEEE391F0E593F4EA93EEE48AEAE286 E4DC7FE4DB7DE5DC81E4DA80E7DD86EDE28EE1D581E9DD87EFE28DF1E28FEEE18EE2D481E9DA87 E8DB87ECDF8CF2E390EFE18DE8DB87E9E18EE9E38CEAE087F4E588EFDC7DDCC663DCC461E5CE6A FEE682F9E37FFAE383E1D071E4D97EF5E78FE8D87AF3E178F1DF6EEAD96CEDDD7EF3F1AC382E14 575627939854E9E4A1D9CE903B3000CBC37DE8E593E5E288D7D17C6A610FE3D385FFEC9FDEC376 C7AC609E8C44978A44EEE49DE8DE96DAD28A787129EBE59AF9F3A9C8C07491853AEFE298FFF0A5 CFBC716C590CDCCC77EFE18BFAEF99ECE394EFE59FF5EAABFDF2B4F6EBADECE2A3E7E5AD646531 0E00004F281075400BF3CB8CEFD791FCE69CEEDD91ECE297EBE399E9DE97FAE9A5ECE6A75B643E 0C00006F412374391AFADAA8D3C986B1A960D1B0775F2F11512514BAADA3101007646A49151C00 5E662D65691EA09959F2E799EFE48FF8ECA2E7E08FEFEB97E9E494EDE897EAE391EEE791EFE58F EBE28CEFE793F4ED9DF6F0A3EEE79FE6E29AE8E48CFEF798F2DB8BBE9C5BEDC68E714A2983612D FFF9B5FDE496E0BF6B997017E5B75FFFE38FFFF29EF3E792F6E899985C1FB55F2CFFF2AFEFE599 E8EA9AF4F5A5D8945DB74E1ED48846FCE295F9DA84C0963DECD17BEFDF91E0D690EBDC9FFBF2B1 F3F2A6E9EC97F2EF9DF2E89FEEE1A7F8EBBBFFFAD14B401E7A744BFFFBBEE8E5A9FFFECB7F7B58 2D251CD5C9B67A6F5D090200000000C4C784EDEEB5DED7BCDED6B8C5BD8BEAE694F1EC9AEBDE9D E8CDA03A1507916D479E7C49856632B69B62FDEAADEDDE9AE2DA93E0DF98DEDF99D8D88CD2CB7E E2D896FDF3B9FFF6C85F52442014060C0300332C15CCC999F9FCAFE7EC92F3F4A8EEEBB495916E 18160B292A0DD5D4A0F4F3A4E6E48BD8D482E5E1A7827E6308020026240B9A9959ECEBA1E8E691 E4E087E4DD88F8EEA3F5EBA9F9F1B1D9D390F3EFA5E5E196CBC479DBD381EFE88CE7DF7EE6DE7E E3DC85F1E8A0F9F0B7C2B687211308110300444129A1A48BC9C0ADA08977B89970D1B75FFAE490 FFF1ACCCC07FE2D9AEA6A179F5F2C0C3C59A362D0A886D44F7F6BEE8EBA5E5F2A6F3EEABF8E4A9 EAD49BF7EFB0EFEEABF2F3AEFAF2AEF5ECA6EFE6A1F6EDA8FAF1ABF4EBA5F4EBA6F3EAA4F6EEA6 F6EEA7F3EAA4EEE9A0EFEFA4F5F2ABE9E69FDCD992E0DD96EBE8A2F6F4B0F5F2AEECE9A7F4F0B0 F2EDACEFE7A2F9EEA7FEF1B1F5EBB2F2ECB7F5F0C1FEF4C7F4E3B5F9E4B2FCECB1EDF0A7F9FDB1 F3D692A86727965717FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF5ECFDE9CEFADEB3 FADFB5FFECD7FFF8F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE6E6E4B7B8B68E9C8C899F8FAEB9CFD0CFFFCDCDFFCCCCFFD0D0FFE2E2FF F4F4FFFFFFFFFFFFFFFFFFFFFFFBF4FFECD1ECCD7ABBC05B94BF60B9CC8CEFE2BFFFF8E3FFFFFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8F9E697DD91BAEAB6F7FFF6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ECECECCFCFCFC5C5C5CBCBC6D3D3CBBCBCDB7E7FF66465FC5050FD3232FC6666FCB9BAFEEDEEFF FDFEFFFFFFFFFDFDFFF0F0FFA5A5FE5A5BFE5354FD4748FD3F3FFC7C7CFDE2E2FFFBFBFFFFFFFF FFFFFFACACFD5656FC7F7FFEBEBEF6D5D5E6E8E8E5FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF0F0EDD5D5E2B1B1F08283FD4848FC9393FEF2F2FFFFFFFFF3F3FFDBDBFFD7D8FFEBEBFF F7F7FFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1E3E3E3 EAEAEAECECECF3F3F2F9F9FBE4E4FFAFAFFF8585FF6565FF5757FF8383FFC2C2FFECECFFFDFDFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDDD074E9DC7FF4E78AEEE086EDDF86E0D279E6D880DFD178E5D77FCBBD64 8E8128DCD278DDD27ACCC36AD5CB73D2C872E1D784DED584CEC579E5DA93C1B572968A4CCCC68C F8F6B9DFDE99BFBD866D6A37807F3E49441E352E103C380954502C7571527775420B0A00807D32 E0DD92E2DE8DCFCA76C7C067F2E88EEBE086F3E68DF7E991F3E58DF3E588F8EC84F1E57EF0E480 EADE7CE8DC7EEFE288E8DA82EADC84F0E289F0E489F1E488F0E288EFE28BF7EB94EDE38AE6DF84 F5EF94F7F195E3DC81E5DE85F2E893E2D786E7DB8AE9DD88E6DC83E6DC84EEE28BEEE48DE6DC85 D1C571E6DC87E6DC87DDD280E3D886E5DA89F1E596E8DB8BFAEB97FEEE98EAD479D9C063DABE5E CDB04EFEE987EACE6AE4CA66DFC96DF3E392ECDF83DFD269DFD361ECDD7EEADC85EFE490F7F2A8 534A244A45257A7C3AE4DE96ECE1A34A3D0EC2BC7EF1F19CDDE07BDEDA87706426D5C088FFF5AF A3802EDFBF6BD8C480716326F6EAABD9CE8FF0E8A76E6623BFB875F0E8A5F7EDAB918242DACB8C FBE8A3DDC56ED0BA62736410E5DC8DEDE9A1E7E9A7F3F5BAF2F5BDF3F6BEEFF1B7FCFBC2C3C097 1A0E09361D13B37949A05B20FFE493E7D178F9E890EBCB82F4E09BF0E5A4F1E0A5FCECB1DBD19D 19120079673B7F5A2A855122F0C19E432604A1955EBBAE66472902876549636051131806454922 1D1F08888948585410EEE5A4F7EDABFCF2ADF5EDA7F1E99FEBE597E7DF8FE8E092F6EDA3EFE59E E9DE99F1E8A4FEF4B1DBD18EE7DD99F1E7A3E9E09AFAF2A5EDE591FDEB9CF3DA8EC7A964B59957 382000DAC88AF7E9A7FFF0A6E9D1819F7F2AD5A653F9D886FFEC9FFDE19CBA7338B0662BFFF1A3 F9E796F3E593F1F6A3D59F64974513D9B268FFF3A1FDE191DCA258FDDA8BFEEB9BE8DB8BF2E498 DCD98BDDE494F6ECA2F4E99DF7F4A9F7F2B6FAF8CBA59F77332E06D9D89DE5E5A5E1E4A6F6F5C8 918E7800000009000802000035370E83902ED5E184EAE7A7ECDBB0EBD49CFFEB9CE7DB7EEAE694 F6F0B5C9B28D2C160F4D3127CCBA87FFF1B4ECDBA3ECDEADE3DB94EDE897F2ECA7E3DF9ADAD88D EFEE9EECEC97DEDD91E0DBA6150D00ABA684E5E1B4F4EEC9FDF7D495906688874BFFFFBDC4C98E 151401000000958F7BFFFDC7EDEB98D1D073DDDB8CF4EEBC6B644F030000140D00BCB771EBE6A0 F7F0A7ECE69BF8F2A5F1EA9FF3ECA5E9E29DF6EFABF3EBA8E8E3A1D4CF8FF2E9A1E8DD88EADD80 F3E888EEE98DE9E798F5F5B5A9A6750500006D613B45402D110F050400005E45389E814CDCC466 FDED98E5D5990800006E664D231D07565036989162AEA365F3E5A7F8EFAAF6EFA6F3EEA2EFE79D EDE098EFE39BEBE19BEDE49EFCF4B0FEF6B6FBF3B5FCF5B6F8F0AFF5EDADFAF2B1EFE8A4F2EBA7 F2EBA6E9E29DEBE4A0F4EEAAF4EFABF1EBAAF9F3B3F4EEAFF2EDAEF8F1B4F9F2B7F9F5B9F5F0B6 F6F1B8FCF8BEF3EFB0F5F1AFF2ECADE7E1A6EDE8B0F6F1B9F4EEB8F2E9B3F2EAB2F6EFB1F4F1B1 F5F1AFFFF7C0F7D9A7AD8C59FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF6E8 F8E8C2F9DEB0FDDFBDFBEDD6F9FAEEFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFFF8F8FFBCBCC76C6D704547455659638082AFA3A4ECA0A2E8A0A1E8A4A4E8 B6B6E2C8C9E3D6D8EAE3E4EEE9EAEAE3E5DDD6DCC4C1D28A80B7564A9F3A8CAF7ADFCFC6ECE1E0 EAEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEBEAEBE8EAE8CEE3CC7CD073A0D89A DEE7DDEDEBEDEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEADEDEDECBCBCBACACAC9C9C9A99999D8C8CBB7373F08B8BFC9797FD4E4FFE5253FD8383FD C5C6FBF3F3F9F9F9F8ECECFACBCBFD7B7BFD3F3FFD8181FD7E7FFD4A4AFD6161FDBEBEFDE5E5FB FAFAFAFFFFFE9F9FFE4141FE8686FFD5D5F7DFDFE6E6E6E5FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDEFEFEDD7D7E2B9B9F08586FE3232FE8080FBE9E9F8FFFFF8DEDEF9B2B2FCAFAFFE DADAFFF1F1FFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1 DCDCDCDFDFDFF1F1F1FDFDFCFFFFFFFDFDFFF0F0FFC7C7FFA2A2FF9E9EFFC1C1FFEEEEFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7DA7CDED172E4D77AEDE084E4D77BDBCD75E1D37ADED077E2D47C E8DA82D2C76EDBD177D5CB71DAD076D8CE74D1C76EE2D981D9CE7CDCD081DCD086E7DA94AB9F5D 514A11949256D1D189EEECB5EAE7B5CBCB8ACAC5A5CCC6AFBAB78C9792735451374A49202A270A 342F0DBEB980FFFDBDE1DC93E0DA87E9E38AF2EA8FF7ED91EEE287EADE82F4E88AE4DA7AE7DC7D F0E689F2E68DEADE87E7DC87E8DC89EADD8BEADE89E8DD87E7DA84E9DE88F4E991F7EC94F1EA91 EEE98DF5F097EFEA90E7E289E3DC86E5DB86E9DD8AEADD8DE8DE88EFE58DF1E78FE9DF87E0D680 DCD27CE7DC89EFE491E8DD8AE2D786E5DA8ADED383F4E798EEE190F8E794EFDC86E5CE75F2D97C EACD6EF9DD7CD7BA58E4C865E8CC69F8E087F4E397F3E58CEADF72EBDF6DF1E38AF2E695E6DD8B EFE89B574F29413A1E898947E3DD93F1E6A852431ABBB57BEDED98E4E77EFCF9A9897B42B19A67 EBCD898E6D18EDD37DFFF1AD625519D7CC8EF1E8A8FDF4B3AAA36179722FF0E8A5F5EAA9CABB7B CBBB7DEDDA96CDB263FFFDB19C8943908547FCF9C4BBBC8D6F734A8C8F69B2B391D3D3B3D9D7B7 5A5741171000B8A17AB27C4DAD6A2CFFEC96F6F090E3D980F4D88FE6D691E0DD98F4E9ABFFFDC8 766E451E1805E4D5AB7A5C2B82542467391B4A2D17EFE9B2A7A3641E0A00CCB2955C5D49262D16 1B1E00878950696628CDC784F0E7A4F9F0B0F5ECABEEE5A1EDE69FECE699EBE293EBE295F3E9A1 EDE39EEADFA0F5ECAEEDE2A5C8BD7EDDD291F6EBA9EFE59FE5DC94E9E094F6E69AFFEDA1EDD48B DAC27F4431057B6C2DFDF3B4EDDD98FFF3A6F6DF8DD5A957C39544E5BE74FFEBA7B97539B56C31 FFED9DF7E893FCE996FDF6A7AC7137914713EFD589FFF2A1FCE395CF924EF5C77DFEF4A3F6EA97 FEF4A5E4E291DCE596EEE19AFFF3ABE9E69DF1ECB2FFFCCE555129696736E9E8ADEDF1ACDFE1A1 EAECBE3C3B22000000020000454028D1D090EDEC98DDDA85E9E29EF0E3A8F3E4A2E5D182FFE794 E6C77CA6864A816B411907011100003C2C0FEBE09CF5EAACE8DDA9E6DE96E8E38FE7E195ECE49D F0ECA78F8E49999B48F4F5ABC8C592191400B1AC81FBF9C5EFEBBEF9F3D13B3516413E14D2D793 899157000000070100868067FEF9BEF0EE99ADAC52EFEBA4FCF6C85C533E040000817941F4EDA8 F7F0AAE5DE98F2EBA3EAE49AF5EFA5FCF5ACF7F0A8E8E19BE9E19EE5E0A0F6F1B1E5DC95E5D888 EBDD83F2E78BF4EE98E4E497F5F6B6CBCB95130D0550452EE9E3BFD0CBB49E8C8C5D423A593F09 E1CC6EFFF9A6EADBA21409007E7661E1DFCA60584B100500281C065B5021AA9F63ECE2A0ECE39C F7EFA5F7EEA4F2EA9EEDE49AF0E79EF7EEA7FAF2B2F8F0B2F8F0B2F2EAABECE4A5EFE7A8F4EBAB FDF7B3F4EDA9F8F1ADF9F2AFEEE7A2EFE8A2F3ECA8F7EFACF8F0AEF4EEAEF5EFB0FAF4B6FCF7BB F9F5B9F3EFB4EDECB0F2EEB0EFEBACE8E4A7EFEAAFFAF5BDF6F1BAF0EBB3F3EEB6F9F4BBFCF9BC F8F4B4F0EBACFBF2BAFFF2BEF6E7B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFDF8FCF5E6FDE9CEFDDEBAF2E2B7EBEBC3F9F9EEFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF7F7FFD5D5FF8C8DB73A3B4913141F2B2B47676885989AB89798B69798B7 9596B48C8C9E8487A0848AB6959AC2AAADB194A28C75986461AE4B509A424D7F4A818F7BB1ABA9 B9B4B5B7B8B8B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B8B7B8B6B7B6A5B9A36CBD68 85BB82AFB8AFB9B7B9B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B2B2B2A9A9A99D9D9D84848369696C65668D8A8BEAB8B8FDD0D1FE9192FE6263FE 5152FC9292F3DDDDE9E6E6E8CDCDED8F8FF96565FB5959FBB3B3FEB1B1FE6C6DFC5656FC8787F9 BEBEEFECECEBFDFDFA9D9DFE3F3FFE9292FFE5E5F7E6E6E6E6E6E5FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDEEEEEDDCDCE2CCCCF19D9DFF3333FE7575F4D8D8E9EFEFE6C6C6EC8E8FF6 9393FDD5D5FEF1F1FFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7 E2E2E2DCDCDCDFDFDFF2F2F2FEFEFEFFFFFFFFFFFFFEFEFFEDEDFFDCDCFFDCDCFFEBEBFFFCFCFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7DA7CDFD274DFD277E7DA7EE5D87CE7D980EBDD84ECDE85 DCCE76E1D27AE0D47EE6DB84D8CE77DED47ADDD37ADAD077E5DB85D7CC7AEADF8FEEE296D2C67D E5D993DCD59A76733B9998545E5C2446430E8E8D4B817D56B2AD8ED1CF9ED6D2ACE8E6BAE8E6AF B4AC872B220B3B32118A8251DBD497ECE59EEEE896DED881E4DF84F5EE93F9F093F5EC91F5EC98 E6DB8BDFD687E6DB8EECE095ECE398F0E69BEFE397E9E090EBE392F1E696EDE491F1E894F8F09B F5EF99EBE790E6E28AE6E089E3DD87E3DA85E7DB87EADB88ECDD8AE0D480E2D881E8DE8AE5DB86 E1D782E7DC89EFE492F0E593EBE090F0E595F2E797E2D787E4D885ECDC8AF3E18DDAC66ED8C165 FDE487FEE082F1D476C1A446F0D375F2D576F0D782E9D88FEEE088ECE078F0E475F2E48DE9DD8C DBD27DE9E2935E572B514A2A90904CD0CB7EF4E9A9574923A69D67EAE795DFE079FDF6A7AFA267 98814EBBA05AAB8A36FFED97FBE8A4695D24BEB376F7EEADF1E9A5D9D28C706923EFE69EE3D690 FCEDA8988843B7A35EEAD38EF7E09FF3E0A6A59967504A210503000706000402010402011E1810 120A030000003B3E27FFFFDB92663BCF9563FFF8B1DADA8CDAD991FAE5ABE9E3A8FDFFC5EDECB4 ADA87C0B08009C9E78DED6AB695022562E091F0000998555FDFBC89F9F6E2214006853392C2C17 5F6347181A016969308E8C4AFDF8B4F4EAA7F9F0AFF2E9A8EDE3A0EDE69EEFE69BF2E99BEFE69B F1E69FE9E09AE8DD9BE6DB9CDFD496F4E9A9F3E8A7EBE09EF1E7A2E8E19AF9F0A7F0E29AFDE9A2 FCE5A1FDE8A98A773B463613F9F4B8EFDD99F7E194FFE693FEF4A1DFB568B98B46D5B873AF7639 B86C33FFE398F6E691FBE592E8C47C995019A25820FFEDA1FCEE9FFDE498CE9551EDC37BFDF2A4 FBEE9DFFF7A9EAE799E3EC9EE3D491F0E29FFDFCBEF2ECB6FFFFDA59542C696534E8E7AAE8E9A3 FDFEBE6F6E380909068F8B779C9F77DFDEA8FCF4BBE6D496F1DE9EC2B773E9E29CEAE19BF6E29B D7AE69AD6E2EBC7D422E14002010021A08008A7E46EDE49BDBD38BE2D89CEAE199EFE994EDE78F F1E99FF3ECB05E5A26A09F5BFFFEBFD4CFA10701001B170095935CFDFAC8DFDAB3221C03B3B079 F0F4B7D5D9A6B4B3940F0903B7B18CFDFCBADBDA85EEEC9BFEF8BB8D86590A0400958E66FCF7BA F5F2ACECE59DECE59DEBE59BF1EB9FF4EEA4F3EDA3FBF4ACF0E9A3F1EAA6E5E09DE4DF9DE0D790 D0C474E5D582EFE290D8D283E9E8A3E5E4ACEAE7B8928C600900002E280E848166E6D7D4FDE8D4 BFA56EE1CD73F3E392FDF3B95F573D030000C6C1ACFDF7E89C92757668435F5127B2A676FBF0B9 F6ECAFF1E8A5F9F1A8F4ECA1F1EA9CF8F1A3FAF2A8F6EEAFF8F0B2FCF4B6F8F0B1F3EBACF6EEAF FBF3B2FFF8B4F7F0ACFCF5B1FCF5B1EFE8A1F6F0A4F9F3A9F2ECA2F7F0A8F4F0A9EDE9A3EEE9A5 F1EEABF4F0AFEFEBABEAE9A8F0EDADF7F3B6F9F4B9F3EEB6F3EEB7FAF5BEF3EDB9F7F2BAF9F4BD FCF7BDFCF8BBF5F1B2F2ECAEF3ECAEFAF0B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFF6EEFDE6CCF0DFB4E7DEADF1EFD1F9F8EBFEFEFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF0F0FFADAEFF6C6DB83535500E0E37181A625E69809FAD99ACAFA9 B0B0ADACACA99595907E80906F75A56E74AD70788E4D724E2F741E3E9E3A5E9C5E838D839E9A9F ABACACADAEAEADADADADADADADADADADADADADADADADADADADADADADADADADADADACAEACA0B19F 77BB7688B789A7AFA7AEADAEADADADADADADADADADADADADADADADADADADADADADADADADADADAD ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD ADADADADADADADADADA0A0A09292929191918585846F6F717A7A91B6B7EDE1E1FFF5F6FFCDCDFE 7A7BFE3434FC6768F1C3C4E5D5D5E4B4B4EA5959F76060FA8B8BFBDDDDFEDBDBFE9C9CFC5E5EFB 5656F79B9BE7E1E1E0F3F3F89898FE4040FE9A9AFFEEEEF7E9E9E6E5E5E5FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDEDEDEDE0E0E2DEDEF1B5B5FF3838FE7070F3CCCCE6E3E3E3B1B1EA 6E6EF57D7DFDDADAFFF5F5FFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9E9E9E9E5E5E5E7E7E7F5F5F5FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED174E7DA7FE5D87CDED077E8DA81EBDD84E9DB83 F1E38BE3D57DE6D781E8DC87E6DB87DDD27ED8CE77DDD37CE4DA83E2D881EEE490D5CA7ADCD183 E8DC91CFC37AD3CB90F8F5BED0CF8E4E4B1985834A6867255C582A221C0073703A928F5D787540 6D6B2D9890694F43276A6039241C0F2F2903858046C8C47BE0DB8DF6F2A4F4EFA2EFE99DF7F0A5 EDE59EE4DB95DED691E3D996E4DA96DCD48FDCD38CE4DB92E4DD8FE9E290E9E28FE2DB89E9E390 F5F09CF3EE9AE6E08DDDD985E1DC88DAD47EE8DF8BFCEF9BEADB88E7D583EFE28FE4DA86E3D886 E8DD8BE5DA88E6DB8BEEE393F2E797F2E797F8ED9EFAEFA1E7DC8DDDD07AF0E088F3E189DCC76D DEC76AFDE487F9E082E7CA6CE8CC70E5CC6FEBD176E3CD7AEAD990ECDD8CEBDE7BEDE076EBDC89 E4D887E4DC84F8F29D726C3E312B088B8B46D3CF7FF9EEAB665937948A59FCF7A5EFEC89E6E08E CFBF827E6630886D27DBC270FFF09EFEEDA9A29558A19656FEF5B4F4ECA8EEE7A17D752CCEC67B F9EFA4F0E194B7A559725E15FDEBA6F1DE9DF9ECB16F633A2D24165D573746432D2D291C19140D 1A130F211916040400141B12ADA69588614F6A3A27817050E4E9BFE2E5C2E5D9C0DFDDC0899270 303417080700111209BEC496E5E2B45C471F2B0700735321E8DAA4F5F9C8B9BD9C342A0F190700 201C1048492C2A2A004B4A13E0DE9CF2EEA7F1E7A5F7ECACF3E8A7EFE6A2F0E7A0EDE59CEDE49A EEE49AEDE39CEAE09AECE19FF4E9A8E5DA9AE5DA9AE6DB99F0E5A3F6ECA7EBE5A1FEFCB7F5E9A5 F6E39FFCE8A5FFF3B6DCCA913A2900BDAB6DFFECA9F9E195FCE08EF4E18BFFF3A7F5D18DC0AA65 7F4F11CA7D45FFE49BFCE492FFF19EE6A764B05A25BD743CFFEFA5F2EA9AFADF95CB9553E0B973 F7E095F6ED9EFDEEA6EBE89EE8F0A5D7C787E8D99CEBE4A8F1ECBBE1DDB3271F02868250FDFCBD F0F2A8AAAB670E0D006B6A38FFFCDAFCFDBDF4F4A8F0E5A5EDDBA3EAD59ED9C68BEEE8A4F9E9A0 E3C27B9B6224C6743EB4673738200FC6BE92AA9D74E0D6A0E4DD90E9E390EAE19BE8E09BEFE896 F4EF8CFAF1A5F2E8B8463F21C1BD8CFFFFD3A29E7302000007040098975AFFFFD2D7D3AA1D1801 D4D19BE7E9B3FFFFD89A987A171300DEDAA5EFECA3FAF7A7EFECA4D7D09D1B1300807C52FCFCC8 F2EDABF2ECA5F4EDA5F8F2A9E6E095F3ED9FEEE89BDDD78CEFE99EFFFAB2F3ECA6E1DD96EEEAA4 FCF5ABF4E799F0E195E7DA90D5CE8CEEEBB3E7E6B7F4F0C6FFFFD9807346534B30211C0C120200 4B3423674E24D0BE67FEF2A4FAF5BDD2CDA42A27181917043D383163584ABEAF94F6EAC9FFF4CB FCF1C3F7ECB4F4EAACFAF2ACFBF3A9F8F1A2F9F2A2FCF4A8F6EEAFF8F0B2FCF4B6F8F0B1F3EBAC F7EFB0FEF7B6F6EEABF6EFABF3ECA8F1EAA6F5EEA6F6F0A2F5EFA2EEE89BF5EEA4F5F1A7F2EFA6 EEEBA3ECEAA4F2EFAAEFECA8EEEDABF3F0B2F3EEB4F7F2B9FAF5BDF9F3BEF9F3BFF8F2C0F8F2BE F2EDB6F4EFB7FEF9C0FDF9BDF7F6B5F2F1B0F5F2B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF8F4FCE9E1F6DDCAE6DFACEDECC7FAFAF1FFFFFFFFFEFD FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFFE9E9FE9292FF7575D376769E4D4CAB2E35D26A87BCB3DAB2 E3EBE3F0F1F0F0F0F0ECEBEBDFE0E1C6CBD2969CBF54689B337A58399F379CC59BCDDBCDE5E7E5 EEEDEEF0F0F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1EEEFEE DCEADCA8DBA7C0E3C0E9EFE9F3F1F3F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F2F2F2CACACA9E9E9E909090A7A7A6CECECEEAEBEEF1F2FCF9F9FFF8F8FF E5E5FF9292FE3F3FFE5758FBA4A5F9C2C3FAA8A8FB3E3EFC7272FEC7C7FEF2F2FFF1F1FFD0D0FF 7F7FFE4141FA8B8BEADCDCE2E0E0F88B8BFE3F3FFE9B9BFFEDEDF7EAEAE7E6E6E6FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEDEDEDE4E4E3EBEBF2C5C5FF3D3DFE7171FDCCCCFBE4E3FA A5A6FB5454FC6D6DFEE7E7FFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFBFBFBFAFAFAFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDACD70DED175DED076D9CB72DED077EADC84 E5D77FE7D981DBCD77DFD07BDED27ED8CD7DD9CE7EDFD581DED47FE8DE87DED47DE8DE88EBE08E EADF8FDCD082D0C578D6CF93DFDDAB4D4B1982804FDDDB9F959451AAA5705B56249F9B61C9C68B C6C383C3C178A09A5F413A04B1AB70E2DD9DA5A061696628262300312D106C6A2DC0BA81EDE7B4 F6EFB7EFEC9EF1EC9BE9E594EAE595EAE493DEDB86D5D279DEDA7DD8D874DFDF77E1E076D8D475 D4CF7DD3CE7CDBD787EAE695F2EF9DF1ED9BDDD685D4CB79DFD17EDECF7CF3E08DEFE391DFD483 E2D786F0E594EEE393EEE393E9DE8FF2E69AF0E498F1E599F4E99EEBDF91E9D983F4E48AEBD87D E4CF72F3DA7DFDE384E9D072DEC266F4D97EE5CC73DFC76ED9C473F1E098EFDF8FE9DC7DEDDF79 EBDD8CEADD8CDFD77DE5E0879D975D2F2A05656620BEBD6AF5EDA5796D49766A3CFFF8ACF1ED8C F1E896ECDC9E685122816822F4DA88F2D888E9D893B9AE6D6B601EFDF4B1F5ECA7F3EBA4B5AB63 93893CF7EC9DEBDB8BEBD986584600DCC87BF0DF95EBDD99D8D296B7B179B1AE7FF2F1C9DFDBB5 C6C29ED6D3B2C4BE9C0C0F00000100100D092B0D0A2600001207042E3426242920362922262420 131C07545845090702151601C7CE96E6E1AE2510006B4626F6EBADF6F4B4EEF3C17E826B251B0A 311F08403A24343219181500A09E61F3EEABF0ECA4EEE5A1F3E8A6EFE4A2EFE59FF1E7A0EEE59C F1E79FF6ECA5F4EAA4F3E9A4F8EEAAF7ECA9EEE3A2F3E8A6EBE09EEFE5A1F8EEA9EBE5A4F1EDAD F1E8A7F0DFA0FEEBACF9E5AAFFF6BF5B4B176E5C2CE5CF8CFEE499FFE393F8ED9AF5E095FEF0AF F4E7A37C5013A9652ACA944CFEDD8DDFB365D08241C46530BD723AFFEBA2EAE294FDE69EC89252 E0B774FFF3A9F1E79BF5E7A0E8E59CE7EFA7DECD8FD9C890EBE3AEFBFACD61593E0D0600C9C48E F2EFAFECEAA06E6E2958561AE5E3ABF4EDBDF2EAA8EFE899E0D98CECE39EF6E9ADE6CF99FFEBAD C6A055865608B37936FFC69C581D0B3D2C16D6D29FE4DEACDAD3A0DEDB8EE1DF85ECE59DE4DA9F E5DD93EBE581F4EAA3F2E5C3493E33BAB492E5E1B6332E182A250776733CDDDD96E7E5A7B8B484 252000E2DFA9FBFBCBB3B28A06030057542AE4E19EEEEC99ACA757E8E3A6A19D75362E0CF1EEBA E8E8A2E7E39DD9D28BD3CC84EAE49AF5EFA2E0DA8CE9E395D0CA7DCDC77DE0D890ADA55FA8A45D F4F0A7F2EBA0EDE196D9CB85D5C989D6CE96A8A475DAD8B0FFFDD6D7CDA4807343DCD6A7DCD9B2 A694816650384D3308CEBD6BFFF4ADEAE1A8F2EFC06A6A3E0000000701000D01000C0000403218 A69A6DECE1B0EFE5ADEDE5A6EAE39EF1EBA2EBE59ADED88AE6DF95F1E9A9EFE7A9F0E8AAEBE3A4 E7DFA0ECE4A5F9F1B0F6EEABF3ECA8EFE8A4F1EAA6F3ECA5EAE497E8E295EAE499EBE59CEDE9A0 F3F0A8ECE7A2E6E39EECE9A5E7E3A2E6E6A4EEEAAEE4DFA6E5E0A9F8F3BDFAF4C2EDE7B6F6F0BF FAF4C2F1ECB8F1ECB5FCF7BFF6F3B9EBEBACEDEDACEEEDACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF5F4FCEDE6F1EDD0EDEDC8EEEDCAF7EDD2 FEF1E2FFFAF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFFE7E7FECDCDFEB5B5FEB7B7EABABAD48484DF494DF16475DF 9DB4D6E9EEF6FEFEFFFCFCFCECE9ECC4D5C490C29165A57751887E54918471AC97CADBD5F1F2F2 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAFB E9E9E9D4DED4C3EAC3DAF4DAF9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8CDCDCDC4C4C4D4D4D4F0F0F0FFFFFFFFFFFFFFFFFF FCFCFFF5F5FFBABAFE7070FD5454FD6061FD6E6FFE6969FE4444FC8C8CFDE4E4FFFCFCFFFBFBFF E9E9FF9F9FFE5353FA8485F3BFBFEFC0C0FA8585FD5555FCA8A8FEF2F2FBF5F5F3F2F2F2FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6F6F6F2F2F1F4F4F8D0D0FE5858FC7576FDB4B4FE C6C6FE8E8FFE4647FE6A6AFEEAEAFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDE084E1D478E2D47BEADC83E1D37A E0D27AEBDC85EEE088E2D37EE2D27DD6CA76BCB062C5BA6AE2D785D3C975D9CF78E3D982E1D77F E1D685DED382F2E797EBE093D5CE94A9A777151200A6A466C9C8875453109994596863289B9759 D1CE8BD4D189E0DD8EECE89D5A56179F9C56F6F2A8DBD88DCCCA7FBFBC777774342B2805110D00 3731106864389F9A5BC5C07DE1DC97E5E09DD5D089C7C37AE3E090D5D27FC3C267CDCC6EE0E07E E7E58BDCD785BBB869C0BD6EDCD98CECEA9DE7E296E2DC8EE1D889E4D887EEDF8CF2E18FE8DB89 DDD282E5DA8AF0E595E7DC8DE5DA8BE2D68AEDE195E9DD91E6DA90F1E59BF2E699F0DF87F1DE82 D9C467E3CC6EFBE283F7DD7ED0B558FAEA8FFCE389DAC46BDEC872FDEA98E9D88DE5D685E6D87C EEE07FF2E295EBDE8EEFE889EAE6869792552C27006E6F2BC0BF6BFAF4A88E8158625626FAF0A7 EDE587EFE292EDDA9A604A23AD9750FFF0A1F7DF92E1D38CDAD08C6A601BFFF7B2E1D892EDE59C D9CF84968A3CEADB8AF1E08AD8C46DC0AC569B8B3DF7E89DEADE94F0E8A0D3CE8B6A6626E8E7A6 D4D294E3E2A1E8E5A5FCF9B98085550812040A060324020027030227170329311B0810050D0001 0000005F6544F2F2D05E5740ACA784F2F5B4CEC58B321A00AF8958FFE8A0F7EAA1F1F3BF3B3C28 2D201016010082785F231D10403C0EEEEAACF4F1ABE9E29AF1E9A2F0E6A3EBE09DECE29CF0E69E EFE59DF2E8A1F7EDA8F2E8A3EDE39EEFE5A0F0E6A1F4EAA4F0E5A3E6DC97EDE39EFBF1ACFBF6B7 F2EEB1F3EAACF0E0A2FFF5BAFDEAB1F4E7B27E7140655426B8A15FEBD288FFEA9BF0E595F8EAA1 FFECACDFBE81774A0FE2AC6FCF9954BB863ABF8035FFB575C0662FDC9259FFF8B0EEE59AFDECA4 B07A3CC69D5AFFF6ADE7DC94F0E19CE5E19BE7EFA8F0E1A5E2D19BFBF3C2B2AA7C0D0500675E30 EAE5ACDEDB99EBE99EF6F3A6FFFBB3DEDB98DDD69AEEE0A2EBE097D8D484E1DE91F4E7A6FFF4BB CA9A5B9D6816B8842CFFD792CBB28E1C07061208006D6A47FAF8C5F7F0C2E7E49BE4E18DEDE5A2 EFE4B3F4EAABF2EB8EF3E7ABEDDFC73C302C6E674C676249080200CAC59CF9F9BEE3E497DEDD99 928F5C241F00E7E5ACBDBA8A0E0A0023200BB2AE72F6F4A5DEDD81C3BE70EBE2A9978E6D4F4723 FDFBC3E8EA9ADEDA91D6CE88F3ECA4EEE89EECE698E7E193EEE89AE9E396E5DF95FBF7AFC7C07A D8D48BF1EDA4EEE79CCBC079D4C783F7EBB0E6E0AE38341A3C3917D9D6B0D2C89D1D0C003D310E C2BB8EFFF5D9F8E3BDB29A5FCFBA6FF8E8A5F2ECB2E7E5AF535520050503554D4771674A928658 3F351B1B1100CDC488F8F0B1F9F1B0F0E9A4FDF6AFF6EFA7E2DB93EFE8A4F7EFB0F6EEB0F8F0B2 F5EDAEF5EDAEFAF2B2F0E8A7FEF7B4F1EAA6F3ECA8FAF3AFF5EEAAF4EDA6F3EBA4F9F2ABF3ECA6 EFEAA6F6F1AFEDE8A8E9E5A5F1EDAEECE8ABE9E7ABEFEBB2F1ECB4FAF5BEFDF7C5F6F0BEF6F0C0 F3EDBDFAF4C4F7F1BEF4EEBBF8F3BCEBE6AEEEECB1F5F1B7F3EEB2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFDFEFEFDF2F2D9E6E4B0 F1DDAEFDE3C6FCF1E2FCFCF5FEFBF6FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFCFD0FEB1B1FDDFDFFFF9F9FEF4F4FBBABAFA7172FA 5E60F8787AF8D9D9FEEFF4F6E6F1E6C4CFC48AB5894EAB4D3EAC3E65B27284ABB9AAB0F5E7E8FC FDFDFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F6F7F6D3D8D3BDCABDD6F3D6EBFEEBFCFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFBFBFBFAFAFAFCFCFCFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE0E1FEACADFD696AFD3838FE3030FE3D3DFD6565FBB0B0FCF6F6FFFFFFFF FFFFFFF7F7FFBBBBFD7272FB7F80FA999AFB999AFC8081FB7272FBBBBAFDF8F8FEFFFFFEFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFFFFEFCFCFED9D9FE7979FB7A7BFB 9394FC9899FD7374FD4849FD7676FEECECFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDD84EDDF86E0D279DFD179 E8DA82EADC83E5D781E3D47FE6D784E0D17ED6CA79D7CB7CDACF80DBD07ED6CC78D8CE77DFD57E E6DC86F0E593E1D686E3D888DCD184DCD59BA19E701F1D00B7B677DDDC98736F30CDCA88A5A15F 807A3AE5E096D4D080E3DF8CE6E393636021807E38F2EF9DDBD986E5E492E8E79AE7E59FDDDC9E 9D9962534E2D251F0F0C00000B00001D120625190D3125154036234A4029665C379B93666A6333 97905CA49F5CD5D07FE0DA8BB9B467B8B46BD7D58BE3E097DFDA90E2DA8FF3E89BEADC8EEEE090 EEE293EADF8FE8DD8DE3D888EFE495E1D687D9CE80EFE397E5D98DE5D98FF6EAA1E7D98CE7D37C E0CA6ED4BD60FFEB8EF9E183C1A748BFA548F5DE81F7E88EDDC971EAD781E6D582BDAD5F716210 CBBD62E7D87CEEDE95DBCE7EEEE886E8E583B9B474231D028D8D4CC9CA74EFEC9AACA071594C1A FFF4B0F1E489F0DE8FEEDA97614B18BEA960F7E496EAD88CF8EBA4ECE39C6F6620D5CC86E7DE98 E3DB93EAE095918435E3D380F5E18BE5D077FAE69282712CE8DC9BEBDF9CEFE6A1FAF5ADA29E55 B9B66CF2EEA1E0DE8DDBD883ECE993F1F5AAC4CD8CBAB2737D5620C2905DDED49BE8EDB5DCE1AD 7D6C473E3921919551EAE8A3FDEEC5FFF9CCE7E398F9EAA6B293589A6C34FFE698F4E798D9D79D 130F002B1A07391F06B0A188150A0090895AFEF8B8E4DD95F2ECA1F7EEA7F3E9A5F3E8A5F6E9A4 F6E9A1F6E9A2F6EBA7F3E8A6F0E6A2EDE39EEAE09BEBE19BEBE19AE9DF99EDE39EF4EAA5F9EFAA F3ECADF3EFB2F5ECAEF6E9AAFAEAADF4E5ABFFF7C19F935D897B41EBD99AD7B66EE2C678FFEFA2 F8ECA4FFFBBAD2A26E774510F7DB99FFF4AEE5A35BBB7029D18644AB551AFBB579F7E8A2F0E399 FBE8A3A1692BD3AA68F9E199F0E69EF7E8A3F4F0AAE8F0A9F7E8ABF4E3ADC4BC86241C03554D26 EFECB7E9E3A5DBD591EAE59BF1EC9FEFE89DEFEBA0ECE4A0E6DEA0DAD293EFE6A3F1E39FFCE6A2 BF9851976413BF8D34FFE18BEEE3A4423E2111160D5D5D48D0CE9EB1AF7F817C53BFBC7AF1F0A2 F5EFB7938860B5AC78F6F2A2F6EAB9E8DBCC3024210B040005000075704CF8F6CBEFEEAEDBDC8C E8E8A16D6A36383406E1DFA6A19D6B5A5538C2BD89FDF9B6F4F19DEBE789ECE697FFFBC5A19B7A 2B2307EAE8ADF9FBA9EBE69DE1DA94FBF5ADF2ECA2F6F0A3E7E193EFE99CF5EFA3F7F0A7FCF5AD FEF7B0EFEAA2EFEBA2F5EFA5E2D991EADE9DF9EEB6ECE6B78C8A60282518322B0FDDD2ABC4AD81 3526111B100054412EB69C72AB9352D9C47EFBEEAEEEE7ADF6F5B5A7A96B0F0E00413834AAA179 FFF8B8F0E8A6CDC883EBE39FF5EEA7F4EDA5FDF5B0EFE7A4E2DA98EBE3A2F4EBAEEBE3A5F9F1B3 F6EEB0F8F0B0FFF8B9FEF6B7FAF2B1FDF6B2FBF4B0F1EAA6FAF3AEF8F0AEFBF3B4F9F1B1FBF3B5 FFF7BAFAF4B8F6F0B5F7F1B9F8F3BBF7F1BBEEE9B4EAE7B2EAE6AFF5F0B8F7F2BBF4EEBAFCF6C5 FDF7C7F6F0C0ECE6B5FCF6C3FCF6C1FAF5BDF9F4BDFCF2BFFEF5C4F8EFBCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBF3 F6F3E0FBE4D5F9DDC8EDE1B9ECE5B6FCE7CAFFF3E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF8F8FFE5E5FFC1C2FEADAEFDE4E4FFFFFFFFFEFEFFEEEEFF BABAFF6767FF4444FFA5A6FFA8C5CE8AC88E59B0574DAC4C67BD668CCC93AACBC7AAB6E9B0B0FF EAEAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6FAF6CCE3CCB6D8B6E7F7E7F8FFF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF6F7FFE4E4FFC0C0FF9999FF8081FE8687FDC1C1FDE4E4FDFDFDFF FFFFFFFFFFFFFAFAFFCFCFFE8E8FFC7979FB7171FB7171FA7A7AFB8F90FCCECEFEFAFAFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFE3E3FF9B9CFC 7E7FFB6C6DFA4D4DFC4B4CFD6A6CFDABABFEF3F2FFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D67DE4D67DE5D77F E8DA82EADC84E0D17CE7D884E3D480D8C976D7C875DACE7AD7CB7AD3C877D3C974D1C771DBD17A E2D882D8CF79E0D483E8DD8EEBE093E0D489E0D9A1817E521A17009E9D5CD9D8919E9A5CCAC67F A8A45C5B5314D5CE81E2DD88DAD482F4EDA9716C4048430CFBF7ACF1EE9DEEED98E4E28CEEEC99 FDFEABF1EEA0ECE99CE8E39FC5BD8C89825760582E514920383004231B005C55247C753FA29C60 9B9655AAA5629C954BBBB464C5BE6EA39D51827E3597954EBEBB76D1CD88F7F2AAE5DD94EBE195 EEE194ECE191ECE18FEADF8DE1D684ECE18FE7DC8CF6EB9BF4E99AE7DC8DE6DB8DEADE93DCCD80 F5DF87D7BF63DCC266FCE487F6DC7F987E1FDDC366EFD77AF0DB80E4D179EEDD86E6D881CABB69 A49541DACB72E6D67DF1E099E8DB8BF1EB88E9E681D0CC8A2C2606717033C3C36CEBE992B9AD7F 47380AF4E5A4EDDC85FBE99AEDD6915B450EA28F44F4E296F3E39CF1E59BFCF7AC736B21A79F57 F8EFA9E5DD95F3E8A0928337CAB969E8D37EDAC26AFFEC9D9D8E59B3A475F7ECB9F0E5AEE5DAA0 E8E5A49F9853F2EBA1F2EC9DF0EA98F5EF9AE4E394EEEFA4F2E49D895C1FC89154FFECA9E5E6A2 F6F8B7FBEAB0EBE09DF2F0A3E4DA8BEDDBA1F0DFA5E5DD8EFFEEA2D3B06D814E11FFD78CFFF0A6 928A4D0B0200442F1447290FAC997F1A0C00948B59F6EFADE8E299F6F0A4F4EDA4F2E8A3F6EBA6 FEF0ABF9E9A3F1E39DF6EAA9F4E9A8F0E5A2F5EBA6F1E7A0EAE099EFE59EF5EBA3F7EDA6F7EDA6 F8EFAAF4EDADF4EFB1F6ECAEF4E6A7F4E6A7ECE1A5F3EDB67D753E95894FFFF5B6F1DF98B9974A EAD288FFF5AEFFF8B69A5C2D915F29FAECA6FDD991E49E59F5AC69E09C57A45C1EE7AB6DFFF8B2 FBEAA2FAEBA6985B1FCA9D5CFFF0A9FCEFA6FDEEAAF5F2ACE9F1AAEFE2A5EDDFA69B935D6C6634 D8D095F5EEB2DFD796E9E19CECE49BECE599EDE498F0E99BEDE69BE1E69ED3D598B09E73F5CFA5 D9A96D8B5A04C59D3AF3D87DFFF7B3AFB389081400A5B694EFF0C9B5B0891A16060401008E8D56 F4F2B1E4DFAE1C140B9C9363FFFFC5F0E6C06E63540B01000300004D481BE2DEB1F1EEBFE7E7A5 E0E191E6E69D5A5832605C2EF6F5B7EDE9B0EAE5AFFBF5BDE9E39DFAF6A0EBE688E3DE8CEFE8AF E3DDB9120900919052FAFDAEECE7A0F4ECA8FDF6B0EEE79FE9E399F1EB9EE8E298EDE89DEDE69E E8E19CEDE6A2F8F2ADEEEAA2F2ECA3F8F0A8F3E9A7EBE4A9E8E5B3F5F5CFADAA870000005C4C2D D6BD94D8C58DC6B679644D271C01003E2007D0BB74F7E7AAD1C98CD5D78CFDFEBB6C6A40010000 423A0BEAE69BE4DF96FFFEB5F5F1A7EDE89EEDE9A0F0EBA5E9E4A1E6E0A2EEE8ADF4EDB3F4EBAF F4ECAEEBE3A5ECE4A5F4ECADF7EFB0F9F1B0F5EEABF6EFABF3ECA8FCF5B1F8F0B0FBF2B6F8EFB4 F5ECB2F7EEB4F9F2BBF6EFB9F0E9B4FAF5C1FFFCCAF5EFBFF3F0BFF8F3BEF1ECB2F7F2BBFFFAC3 F4EDBAF7F1BFFEFECFFCF6C3F7F1BCF6F1BAFDFBC3FDF7C0FEF2C3FFF5C9FDF1C3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFEFCFBFFF0F1FAE7DDEFE6C4EEE3B7FCDEC2F9E8D0F4F3DCF3F3DCF7F7E9FDFDFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF9F9FFE7E7FFC3C3FFAEAFFEE3E3FFFDFDFFFFFFFF FFFFFBE2E1F3847FEB4640E57779E468999D4DAE544BB6486EC66CA2DBA2CEE7D5D9DFF5BEBFFC AFB0FDE9EAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF4FBF4DCF1DCBCE4BBB4E1B3EEF8EEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFBFBFFF0F0FFDBDBFFC7C8FEC8C8FEF1F1FFFCFCFF FFFFFFFFFFFFFFFFFFFCFCFFE6E6FFB4B5FD7475FC4343FA4343FA6F6FFCAAAAFDE0E0FFFCFCFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFECEDFF BBBCFE7F80FC4949FB2E2EFB5152FD999AFDD9D9FEF9F9FFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D77EE7D980 EADC84ECDE86F0E28AEBDC87DFD07DE1D280E5D683DECF7CD6CA76DBD07BD9CF7AD9CF78D7CD75 DED47CE2D881D9CE7BE0D585E5D98CDFD389EBE098B4AD776360372725006D6D2FE5E59B726E32 CCC97EBDB96C484003CFC87BE9E28CE3DA8DE1D8A09C9566312B00F0EBA7EAE699EDEB95DEDD80 EBE88AF2EF8FE6E282F1EC8DF9F399F4EFA1FFF9B1FBF7AEFCF6AFF6EFAAE5E09AF4F0A7F3EDA1 F2EEA0F6F2A1FFFBA9F5EF9AF4EC98DED585E3DC90AEA65E4E4A06726E2EB3B16ED8D592EEE8A3 DED88EDAD388E5DB8CE0D681E2D885DFD482EADF8DE6DB8AFAEF9EF1E696EDE293F0E596F1E697 F2E493EFD782CCB158ECD176F0D278BEA145BFA546F7DE81F9E486F5E284ECDC81EADC83E6D980 F7E991EADB86F7E990EEDE86F4E39DF2E595F7F18CEBE881DFDA992E270B47460FBDC168EAEB90 CBC292433307F1DEA2F6E28EFFEC9EBCA55F7A6420766418FFF0A5F0E49DF0E79AF7EFA1938B3F 8C843BF6EEA7E6DC97F7E9A3A8984FA69447E7CF7ED9BF68FFE89EE8DAAD867851F4E7BDECE0B2 EADEABF9EDB5A49A5EA49B59FDFAB4E3DA90FFFBB2EBE59FEDE6A4F2DE9B936024BB7E43FFEAA6 DEDC96E0DD9AEED59CE6D695E8DF95F0DF93E8D38EEDDC95F6EB9DFFE99DEBC67F794606EFC280 FFEDAD645D23241D078B765552341A523C220900009E925FFFFFBEF0EA9FEAE496ECE69BEFE69E F2E7A2F5E6A0F3E29CF0E19EF6EAACF3E8AAEBE0A0F3E9A5EFE59EE7DD94F0E69EF6ECA4F2E8A0 ECE29BEEE5A0EDE5A3F1E9A7F4E7A6F0E19EEFE1A0E9DFA1F4EEB49B965EB4AD71F5E0A2FEECA4 ECCA7FCCAD65EEDC97E3C788773002D09F68FFEBA5D3A35EDF9B55FFDB97D89653945B1AB88B48 C6A761F6EBA2F4CE8C96551AE6B474FEEFA8FBEEA5FEF0A9EFEDA4DDE59ED7CB8DEBDDA1FEF7BB FFFEBEECE5A4E5DE99E6DF99E9E29AEAE19AE6DC93EAE094EFE698EDE697ECF3A5CFCE9851361D 93624AA06A36BF943BE9D06DCFC679C4C89C8A957645562DF2FAC7ECECBDB3AE8B0803011C1A00 B4B374EBE9AD9C98701F1A00DFDCACF6F3BC9A9472000000564F346F6C35D3D197DBD7A5C5C190 F3F2B0E5E696F0F0A94946298E8A5CF9F8BAEEECA7E7E4A0EDE9A7F1EAA4E9E491E0DB7DDAD581 D6CE90FBF3CA6D683E3C3C19E7EAA0EFE9A6F3EBABEDE6A3EDE6A0E5DE96ECE69CE8E19AEAE39C ECE59FE1DA97E2DA99EFE7A6E1DD98EDE5A0F5EDA5F3E9A4E1DC9BD6D59DFFFFD574724B0A0100 150200DABD9AD1B980FBF3ACFFEAB1BD9F616F4F0CD4BF7CFDF0B4E8DF9FDBDD89FBFCB0BFBA8C 0B00006A6137F8F5ABEFECA4DEDA92FDFAB1F0ECA3F2EEA6EFEBA6EFEAAAF2ECAEF3EDB2EEE8AE FEF6BAF0E8AAE8E0A2EAE2A3F3EBACFAF3B4E8E09FE1DA96EAE39FEFE8A4F9F3AEF3EBAAE7DFA1 EBE2A6F3EAB0FAF1B7F3EDB5E6E0A9ECE5AEF8F2BEF6F0BDF9F3C1F9F6C5FBF7C0F8F3B9FDF9C0 FFFDC5F9F4BDFCF6C2FBF5C3FAF4BFF7F2BAFAF5BCFEF9BEF2ECB4FFF3C3FFF7CAFFF4C7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFBFCFDF8F6FAF7EDFAEFE2FDE0D5F1E0C0E5E4ADE3E3A8ECECC4F9F9EC FEFEFDFDFDFAFDFDFAFEFDFAFFFDFBFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF5F5FDCACBFCADADFAE1E1FAFBFBFA FEFEF9FFFFEFEFEBDFADA0CF6F61C15A62B7407E7438A63F7DD27ABDECBCE1F6E1F6FAF7F1F1FE C8C8FFAFB0FDE8E8FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFEFADDF2DDB8E3B7ACDFABB9E4B8F0F9F0FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF8F8FFF2F2FFF2F2FFFEFEFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFCFCFFDBDCFF7D7DFE2B2BFD2B2BFD7070FEC4C4FFF0F0FF FDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF F5F5FFD7D8FF8787FE3D3DFC3D3DFB7A7AFBC9CAFDFAFAFFFDFDFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDF87 F0E28BEADC83E3D47EECDD88EDDE88E1D27FE6D784E6D787E1D181DFD37FDDD27BE3D980E8DD84 E1D77EE0D67DE8DE87E6DC89DFD484ECE095E6DA93DED18E8F89548B8960413E149D9C59D2D287 5F5A21CFCB7ECEC97A4A4006C5BC71DCD37EE5DA8FE2DCA4C3BD8A282300D8D38FF1EDA0F4EF9A E6E286EBE688F4EE8EF1E889F6EC8DEAE184EFE990F6F099EEE994EFE896FBF3A5FCF6A8F4F1A3 F1EA9AF3EC9BECE692EFE994F5ED96F0E38BEEE18FF4EA9CFFFDB5CBC583514D173F3D11878546 B8B674D4D18CF0ECA4F7F09EEAE089E2D882DED47EE9E08BEAE08CF2E795F3E896F2E796EFE494 EEE494F7E998DDC26DE3C470F9DB84FBE68CC1A448EFD679F3DA7AF3DE7FE5D374E0D174E0D478 E8DE80EFE185F5E78EF5E68CEFDF88F5E49EEBDE8EE1DB76E8E57EF0EBAB48411F292808B1B45D E7E88CD4CB9B47360CE2CD91FCE693F7DE8F997F38BEA864594900FFF5A8E4DA94DDD586E5DF8D A39B4F615912F7EDA8E7DD99ECDD9BDDCC87948036D8C072E4C876FFEDA4F5EAB68D8352ACA270 FFF4C2F0E3ADF7EAB2DBCF95706527E2D798F2E6A7EFE4A5F2E7AFEFE3B0F2D8A498622EBF804B FDEEAEDDD996E5E1A1FADDA8ECD89FE2D694F3DF9AF6E396EDDD91F6EAA2FBE99CF8DB918F5E1D A37541FFEAB73E381A4846188B7A5474573F4C351B170500766833F7EFABEAE397E3DE8EEEE89C F8EFA7F7EBA6F0E19BF7E59FFEEEAAF9ECB1F4E8ABECE1A0EDE39DEAE099EAE098F2E99EF5EAA3 F1E7A0F0E69FF8EEA9F1E7A3F3E7A1F5E7A0F0E19BF1E5A0F2E8A9EFEAAF666229ADA76BFBEBAB F9E49DFFEBA1F4DB93D4B06DA172377E3708F1C990FFF0AAE4B16EFBCE88FFD891A25E1FB28A46 F3D993BC9B55BE9E58D8AC689C581DDFAA69FEF1A9F9E89EFFEFA8F1EFA5DCE69CD8CE8DE7DA9B E2DD99EBE49DE9E399E0DA8EECE499F5ECA4F1E7A0EFE29CF3E79EF6EA9CFAED9DF3E9A1E9DBA7 3D1F162B0700BA9465ECD188D6CA8193905E313222151709898D53E4E79AEAE7AEDAD4B2100902 4A471EF2F2B4F5F4BD4340298E8B63FCFBC8B3B2841D1908171306C1BE8BE4E49ECECD87CCC98F E5E3AEE3E2A0E7E899E5E59F302D0DB1AD7FFCFBBAD9D788ECE997F1EBA5E6DE98F6EEA0ECE78B DDD780E1DB94F2EBBAE7E2B8202000D0D290EFE9ABECE4A5ECE4A4F5EDAAE7E09BCFC881F0E9A4 EFE8A3F1E9A7F1E9A9F1E9AAF0E8A9ECE8A8FCF4B0F5EDA4F2EBA0E2DF97D0D091FDFECE9A996F 050000443016F7DDBEAF945BEDD688FDE5A2FEE6A3B4924DE8CF8EFAE8ADD6CD88E4E48AF1F299 D9D29F1807095A502FB4AE74857F45FFFABEF6F1B2F5F0AEF5F0AEF0EBAAF3EEAEF9F3B4F3EDB0 EBE5A8FCF6B8EAE2A4ECE4A6F3EBACF9F1B2FFFBBCEDE5A4E4DC99EEE7A3F1EAA6F7F0ACF6EFAB EEE7A5E4DC9CF0E8AAFFF8BBF6F0B4E3DDA2F0E9B0F3EFB6E5E0A9FCF7C1FDFAC5EFEBB0F8F4B6 FBF7BAF5F0B6F6F1B9F8F3BCF8F2BDFAF5BDF4EFB7F3EEB2F3EFB1FAF6BAF9F1BBFDF7C3FBF5C1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFDFEEDEDF4EAD5EAEABDE9E9B1EBEBB7 EDEDC6EEEECDEEEECCEFEECDF2EED0FCEEDBFFF6EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF2CBC6E6A69BD9D3D0D0 ECECCDF0EFCCF7F0CAF7E7CAD9C9CCA6A4BF59818A4993675EBA61B7E8B4F2FFF2FFFFFFFFFFFF F9F9FFCBCBFEACADFDDCDCFFF3F3FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFFFDF0FEF0C9EEC9A8DEA7B9E4B8D7EFD7F6FBF6FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5FFB3B3FF7979FF7878FFA9A8FFE2E2FF FAFAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFFEFEFFFB9B9FF8787FE9090FDBCBCFCECECFEFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E6D880EDDF86E6D782E0D17CEBDC87EADB88DECF7CE5D683E7D887E2D382E2D681DCD278E0D77C E5DC81E2D97EE7DD84F0E68EEBE08ED8CD7FEADE94EDE09ACEC27F4C46114F4D2439350D92914D C2C3764D480FC1BC6ED7D28351450FB9AD63E5DA86EBDF95EBE6A5DCDA97312F0CB8B468FBF7A7 FBF5A1F2EA94F3E894FCEF9FFEF2A4FEF0A6E5D688F9F194EDE789EEE78CEEE88FE8E08DE6DE8E E6DE8DECE394F5ED9CEDE594EAE391E5D983FCEF97F7E894FBF1A5E7DF97E0D99AEBEAAF97975E 17170040400D9A9B58BCBB75CFCA77D3C96FDFD57BD9CF76DED47DE6DC85EDE38EF3E994F0E691 EDE290EBE18FE6D986D4B866F8D885F9D984FEDF87E8CA6FECD274E5CC6CF5E081F4E484F4E686 E7DD7EEFE485E6DA79E9DC80E7D97FE9DA82E7D691EBDF8FECE680DFDC75E5E0A05F5839191702 A5A850F0F193E5DCAB58461DCBB57BFFF09FBFA456A68C43ECD68F5B4B01E6DC8FEEE5A1E6DF8F EFE895D2CB7C504803E9DF9BEBE09EE9DA99E3D18E725B15C6AC61FFE597F6DF91EBE69CC2BE77 78712AF8F0AAE7DD97F3E9A3FFF2AFA59757B7A969FFF6B7EBDDA0EFE5AAF0E4A9FDEAABA26D31 A56A27FBE795DDDF8AEAE998FFE7A1F4E499EFE394FDEB9AF8E991E4DA87E8DF9DF1E098FEE095 BF9150764A23CDB38E1D1B0AA7AB6E7B6F489B7F6D462D12281306453600F5EBA8F5EFA0EFEA98 E6E094F5ECA4F7E9A3F0E09AF4E19CF8E6A4EBDFA5E8DCA0E9DE9EE4DA94EBE19AF1E89EE9E095 E9E096EAE098EDE39CF1E7A2F0E49EF5E7A0F5E59BEFDE95F2E49DF5EEAAF2EFB1343400B2AE72 F8EBAAF1DC95FDE097FFEEA5E7C07F793A099F5C2BFFE5ABDCC882CA9352FFDF95E4B86D8B4609 D1B36EE3DA90F1D48EFBD993B17F3E8D440FFBC786FFEEA6FCEA9FFFEEA6F2F0A6E0EA9FEDE3A1 EADD9CE7E299EBE599E8E292E8E190E7E091ECE39AECE09BEEE19DF1E39CEFE195F7E598FFE1A7 C79F743A1C080E0000A59D6AEAE6B6EBE4C274665A1302005A4928D7CD86D7D277F8F4B1857D5B 201600AEAD6AF8F9B3E0DFA738350FD5D59FCFD29964663A0A0A0074754ACAC989868734A9AA5A B8B677D9D69FEAE9A7DFE094CACA87221F00D0CC9CF4F3AFF3F299E2DF82E2DA90ECE2A0F6EDA3 EAE38AE4DE83EEE89BEDE6B1FFFDD15F5D2F96965FFCF5B9EAE2A4E9E1A2E8E0A1FDF5B4F4EDA9 E9E1A0EBE3A2DED697E5DD9EF4ECB0EFE6ABE5E0A3F7EFACFAF3AAF2EB9DE3E195DADC98F7FBC2 EAE9BB372E14543D25E1C2A5C9AB72FAE693FFDF96F3D38AB8944CF6DB99FFF0B7DBCF8AD2D171 E8E88ACBC18C1C0A0B473A24E5DDB4474014D2CA9CFDF9C5DBD59CDAD699D6D192E1DD9DF1ECAC F8F3B4FEFABBEEE6A8DBD395EAE2A4F4ECADF3EBACFDF5B6F7EFAEEEE7A3F7F0ACF2EBA7F5EEAA F7F0AAF3ECA4E4DD97EDE6A1FDF6B2F6F1AFE7E2A1E5E0A0E2DEA0DFDB9DECE8ABEBE9AEE1DE9F E5E1A1EBE7A8E0DBA1D6D197E5E0A8F1ECB4EEE9B1DDD89FC9C588BBB778DCD798ECEAADF2F1B6 F0EFB4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFDFEFCFAFCFCF4FDFDE4 F4F4CAE7E7AFE1E1A5E2E2A6E2E2A7E9E2ACFAE2BBFFEDD8FFF9F2FCFBF4FBFBF1FAFBF1FBFBF1 FBFBF1FBFBF1FBFBF1FBFBF1FBFBF1FBFBF1FBFBF1FAFBF2FBFBF1FCFCEAF9F6D9C6BACB9F8CBE C9C3AEDFDFA7E4E3A8EFE1B1FDE5C7F8ECE2D7E7DC82C18880C4859ED7A1D1EDD2F1FAF2FDFFFD FFFFFFF8F8FFCACBFEAAABFDD2D2FFECECFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEF8FCF8ECFBECDAF9DAC1EEC0BAE5B9DBF1DAFBFEFBFEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF5F5FFEEEEFFEEEEFFF3F3FF FBFBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFFFDFDFFF6F6FFF0F0FFF0F0FFF6F6FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD8CA75E0D47EE6D883E5D882EDE28BECDF88D2C470E0D580F3E694E9DB8ADED27DDED278 DBCF75DDD278DFD47BEADE86F0E690F1E693E3D889E9DD91EDE198DBCE885E58242C2B06403D20 4E4E15D9DA905D5919D1CA85EFE8A4605320ADA252EBE08AE0D58BE6DE99EEEAA24C471B959143 F4EE9EF8F0A0F7EB9AFCF1A1FAEB9FF1E199FCEAA4F7E89BE8E084E5DE80EDE68BEFE78FEBE28D F2E994EEE692EEE593EAE18FF0E794F8F09CEFE390F1E28EEEDF8DF2E697F5EAA0EDE49DE9E4A0 FBF6B4D4CF8C4C461E231E00726D308E884AAAA362D1CC81DDD984DDDA7DE4E083E3DD84EBE08D EDDD8EF5E397FAE69AE3CC7EE4C476FCE192FCDD8DD8BA68EED27FEAD37BE9D37BE7D67CE1D377 EADF81E9E082F6ED8DE9DE7DE8DA82E9DA87F2E191F0DF98EFE28FEAE480E1DE78F1EDA8807B54 0E0B00969442F7F598EBE7AE5F5223AE9A5FFFF09EA88632DCC275FFEFAA6C621ACAC07BFAECA7 EAE091E2DA88FAF3A5615912D1C884FCEEACF5E29FFFEFA978611B9D863CFCE59BECDB8FE9E292 E3DE8C817B2ADDD486F6EDA0F1E79DF1E59DDCCF8B9F914FE9DB9CF4E6A9ECE5A4EDE8A0FFF6B2 B6864783490BF9D98CF0E48FEBE88DF2E48EECE48EEBE48FF2E393EFE489ECE58FF6EBA9F2DFA0 F7DB96F0CF877453276A5836353306A5A876635D2E74643B856C464A30131A0800D3C582EDE49C E7E197E9E39BF5EBA5F9EBA8F5E5A2F6E3A0F5E3A3FAEBAFF4E5A8F0E5A4E1D693E6DB95F5EBA4 F4E9A2F3E69FF3E59EF5E7A0F3E39DF1E19CF1E29FF3E2A0EAD996E7DB9AF6EEB1ABA569262209 E1D99BEFE4A2FDEEA5FAE59AFDDF9AC89F63803F09D48D59ECB57BBB914EFCCA86FFE69BBA9647 9A6220FDF2AAFBF1A6F8DC98FFDC96E5B36F944F0DC99149F2CC81FBE89BFFEFA2EDE798E0E190 F6E99EE4DE90E0E290E3D88CE2D289E8DA94EFE5A0F2E3A1E9D999EBE29EEBE39CEDDB96FEDE9A C89054854F1A60441E0B0800232E1BD9E5CDF2F1E3594B455D4632F8E3B5F0E69FECE995DFDB96 352D176F6743FFFFC5D5D397F6F4C22E2C0FA8A975F3F6BA6E70436A6C38D3D69ADEE097D0D481 CBCF80C0C181D3D099E6E4A9EBEBAAC0BE86322F07E7E4AEEEEDAAE5E18EE7E28AEFE79DDBD28B E2D98EE5DE89EBE58EE9E497F3EEB1FBF7C3BAB886615E26F4EFB1ECE7A5F6F1AEE4DD9BF2ECA9 EEEAA7EBE5A3EBE5A5D2CD8DD7D092EDE6AAEDE4A9DFD69AEEE5A5F8F0ABDFDB93CBCB85CFD190 CACE94EAE9B9C9C2973426191A030074551FFADE89FEEC9DF1D38DB08241F0D18FFEEAA9FEF0A9 E5DF89FBF7A8E0CD973C261B0B0000B5B1954F49396B6740F3EFBEDAD59CD9D597D2CE8ED9D595 E0DC9DEEEAADF8F4B6E8E2A7DBD398EBE5A7F8F1B3F4EDAEF9F4B4EEE8A8ECE5A4F3EEAAEEE8A4 F1EAA6EFE8A5E5DE9CE5DF9DEFE8A7F8F0B0F1ECAEECE6A8E3DCA0DDD99DE9E4A8E6E1A8E0DBA2 E7E3A6E4E0A1ECE8ACE4DFA5CDC890E0DBA3EFEAB3F1ECB4E9E5A9D7D396C7C383EDECACF0F0B6 F8F9C0EFF0B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFF7FBFBE8F3F3D8F0F0D2F0F1D3F1F1D3F4F1D1FDF0CDFFEDCFFDEAD1F1EAC6EAEABFE9EABE EAEABEEAEABEEAEABEEAEABEEAEABEEAEABEEAEABEEAEABEEAEABEEAEABEEFEBBCF3E6BAC7BBCB A69DDCD5D2D7EEEED3F2F1D3F7F0D9FFF3E5FFFAF4F2FBF2C9E8C8B9E0C1B4DEC5BCE3C4D3EED4 F0F9EFFFFFFFF7F7FECACAFDADAEFDDDDEFFF5F5FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF7FCF7D7EFD7C3EAC3BDEABCC7ECC6DDF2DCF2FAF1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDFD481E5DB85E7DD86E1D77DDFD67BE3D97FE2D87FECE28BE9DF8AE0D583E5D883 E4D57CDDCE76E3D47CE4D67EE2D380E4D784EFE391E8DB8CEADE8FF1E597DFD4885C5722302F14 2D29175B582EB4B47268661AC9C187E8DEA96358347D7320EADF87E5D88FFBF1B1E7DD9E797133 5E570BF2E99FEAE193F3E897F7EC99F4E995F9EC9AFDF09EF6EA96ECE28CF0E690F1E790FBF19A F4EA93F4EA91ECE28BEFE58EE8DE88EFE590F0E691EEE292F3E899EFE394F2E796F8ED9AF7ED98 FAF19DEDE394F6EBA2F1E9A89B8D553325002E28117F7D5AA5A771ADB165D1D77CE9EB8CDFD980 E6DA87ECD68CF4D791FFE29DE2BC74EECA7FFFE699DDBF72CBB065E9D386ECDD8CEDE08EE5D986 EDE58FEEE68EE2DB82E1D77CE9DE82EDDE8DF2E198EFDE99F3E396F4E98EF5EF89E8E382F7F2A4 A7A36F0E0800897F39FEF79BECF0AB76753B7F702FF6D682A67C22FEDF8BF9F0AA868548BDB376 FBE7A1F7E698ECE192F6EEA3665D18A89F5AF9E9A4F8E298FFF8AC947C30816E25FAEDA5F1E8A0 E8DF91F8EE9EB2A758BBAF63F4E89EF3E69DF6EAA2FFF4B0AC9E5DDCCE8FF5E7AAEFEEA5E4EA96 FEEAA7BD93606D3305F3C18BF9DC94F1E48BE9EA8BE7E98FE7E393E8DC95ECE690F0E992F4E39E FFE5B5F6D89DFFEE9C9E8B542C20018A85637572524141089F9B4FE0C7925F42122D1600877537 FBEFB1F1E9A8F0E9A6F4EBA9EFE3A1F1E09FFBE7A6EFDC9AF1E09FF4E5A5ECDD9DEDDF9FF2E4A5 EFE1A0F1E4A1F2E29DF0DE99F7E39AF8E29AF3E09BF8E7A9EADAA0E1D29BF5EAB4EBE1AC483F1E 544A18FAF2B2EBDD99FFF1A8FFEEA4E2C687663C01B87C42F5CE94B76D2FB66F2CFFD991E8BD71 9A7426B9984AFFEFA2F7E197F5E29EFFE8A3C1944CAA6F24F8CC7DE2B061CCAA5AEAD989FCEE9B F3E690F6E38BEFEE92DCE38CEEDC96FBE7ACF0DBA5E8D9A1F5E2A9F0DEA0E3DC97E8E39CF7DD9D D596629B590ECA974CCFB984060502010B0267766DD1D5C3231D09978961E2D79DD5D193E9EAAB ABA772393308D8D2A2F2EDC1F6F3CBCCC7A0181400B0AD7BDBDCA0CFD08DCED287CED387BCC176 CBD088C5C986C2C387D5D5A0DAD9A6EFEEBD5E5B2C4E4C2AE1DFA4E8E7A6EEE7A3F4EBA3F1E9A0 E5DD91DED787EBE694E8E393E7E296E9E4A1EBE5A9E0DBA22F2907B4B169F4F2A7F5F3A9F1EFA5 D9D690EBE8A3F6F3B0EFEBAAEBE7A8EAE5A9E7E3A7E6E0A4DBD092EDE3A4F8F2B3F1EFB2E7E6AC BEBF861F2300BCBC8AF9F6C7E7E5B9A99F74A7854EFBE491F4ED98DCB776A96B35F1D490F5E49B F1E49AEBE29DFFF3BAD2B483AC9066665E4C0F100614130D4A4822F5F3C0D2CF92D6D18FD8D391 E2DC9DD7D29AEAE6B3E4E1ADD4CF96D4CF95E4DFA4EFEBAEEFEAACEEEAABEFEBABF3EFAEF5F2AF F5F2ADF3F0ABF2EEAFF7F0B8F5EEB7F3ECB5F7F1BAFAF3BDFAF3BEFDF8C3F7EFBDF7EFBDF6EEBD EFE8B6F1ECB5F0EBB0F0EBB3ECE7AFDFDAA3D6D09CECE7B0F4EFB7E8E4A8E7E3A6E8E4A4F3F0B2 F1F1B9E7E7B5D7D6A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFFE8FFF2D6FCE4C3ECE1B1E3E2A8 E2E2A6E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E8E3A9EFDFB3 CAC1D7ADAEFCDDDEFFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8F3F5C7E4DFAADCB5 B3E2B4D8F0D7F1F7EFE9EAF0C4C4F7AFB0FDEAEAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F8F8F8F1F7F1E2F4E2B6E3B5A8DDA7B4E2B3D7EFD7FBFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE2D783E9DF8AE3D982DDD47AE4DB80DED57AE5DB82E7DD86E0D681E1D684 E8DB87DECF76E2D27AE6D77FE3D57DE2D380E6D986EDE18FEADD8EE5D98AE2D788E9DE918F8A56 3C3B1C332F12403D0F696929545116E8E0A4EBE2AB837941655A0CE8DE89D2C67CEDE39EF7EEAB A69D562E2605EAE292EDE594F0E593F2E893F9EF9AF9ED99F7EB98FAEE9CF5EA98F8ED9BF7ED99 FAEF9CEBE18CE9DF88EDE38EF4EA95EDE28EECE18FECE18FEADF90EBE091E4D989E5DA88ECE28D EFE58DE3D983EFE492F2E799EFE29CF7E9ABDED196605C25121200575627A5A373B9B780C2C080 EBE59BD8CD7ADBCA74F1DA88EDD185DFC075FEDE8BECD079BFA44FF5E08AE4D37CF2E38EEDE28C E0D683F5EA9AEFE494E2D788EDE28EEEE489F5E695F7E79EEEDD98EADA8DEDE187F2EC89EDE788 F0EB9FCCC896120B006F662BFBF49CE8ECA7A8A86D655513D3AE5CC19940FFE592F3EAA4969459 90864AF7E39EEEDC90F6E99DFAF1A98B813D847A38FCECA6FAE498FFEDA0BDA658705E16EEE299 FFF7AEEFE697F1E89BE3DA8D8C8336EDE499E7DE94F4EAA3F1E7A2DED392ACA060FFFEC0EBE99F DADE8AFEECA8DEBA85662C01D2A16CFBE099FBEB94F0EF91E5E68CF2EE9EEDE19BE4DC88F4EC95 F2DF9AF9DDADF9DEA5FDF09FE3D3A0190F009893704037175E571FE1D689F7DFA8775E2D4E3803 3E2F13E7DCA0F5EDAEEDE6A5EFE7A0F5ECA1F1E297F0DF91F1E095EFDE98F0E19EE6D895E5D796 F0E5A3F2E7A5F1E5A1F1E39DEEDE98F2E096F3E197F0DA8EFFF7AEE7D590F5EBAAEBE8A8B9BA7A 070800B4B273FCF3B5EEDC9CFEE5A4F5D594835C2264370DF0D699FCE5A5BD7A36AB6521F6AE68 AC6B22915C12E5C576F6E293F9E99DFAE4A2FFF1ADAC7E37AE772DFEEEA0F8CC7BD5B768CCB96A DFCF7EF5E390F2DC86EEDD86FAF3A1F0EA9FD7D08ED7CE93EDE1A7EEE2A5F8EFACEBE19AFEE7A5 DAA770904214C38139FCD385FBE9B31B1C040004000914052D30141F1703D7C88ECBC080D9D895 D2D595363300ADA978E7E3B4DFDBAEDEDAAD322E01393620CAC88FD2D092C8C781D4D48ADDDE95 C8CB8ACBCC90D6D79FCCCC99D0CE9EEEEABDA09C6C0E0A00A7A36BE2DDA4D5D194EAE2A2F4E9A7 F3ECA3EBE398EBE596F6F2A0EBE596E9E398E5E09AE5E0A0E9E3A9736F33464105F2EFA5E2DE95 FAF6AFE3DE99EBE6A2F6F1AFF0EBABEDE8A8EDE7A9EEE8AAEFE7A9E1D897ECE2A4F7F2B4E8E7AA DFDEA5C0C1880C0C00B2AF7FFAF6C9EFEAC0EDE5BBF1CE90FDE38DEFE98ED8B26AAE7035F3D791 F8EAA1F8ECA6E7DE9FB39F6B6A4F22C1A980F7F0D9747766040500504E27F8F6C2E1DDA0E1DB99 D6D18FDFD99BDCD79DDBD6A1D2CC9AD2CB93D1CB91F2ECB2EEE8ACEBE5A9ECE6A8E0DA9BDED999 EDE8A6F4EFADF2EDABF8F2B3F4EEB3DFD8A1E5DEA7ECE5AEEDE6AFF1EAB4F9F2BCF3ECB8F4EDB9 F8F1BDFAF4C0FCF7C0F7F2B8F7F2BAF6F1BAEDE8B1EBE4B1ECE7B0F2EDB5EEEAAFF4F0B3F0ECAD F0ECACFBF9C0D4D29DDBDAA4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFFFCF6FEF9F2FBF9EE F9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9ECFBFAEC F9F5EECECBF6AAABFCCCCDFFE9E9FFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFCFDEBF6F1 BFE6C1A9DEA8AEDEADB9D7B7BFC3C5B1B0E4AFB0FDEAE9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFEFF F7F7F8E4E5E4CAE1CAB2E0B1A4DCA3BAE4B9E0F3E0F8FDF8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDDD27FDDD37CD9CF78DCD378E3DA7FF2E98EEEE48BE3D980DCD27D DACF7DD9CD78E0D179E6D67EE3D47CDFD178E3D481E4D683E2D684ECDF90ECE091E4D98AE3D88B CDC7915955304A491A7170378D8B4A5B5816E0DB9BD6CD90ADA363564C08E8DD93E5DC8FDCD48B EBE29BBAB367665E20E7E08FEDE591EDE38DEDE38EF9EF9AF8EC99F0E492F9ED9CF3E897F3E899 EFE494F0E596E1D685E4D988F5EA99F9EE9EEFE495EBE090EEE393EFE495EEE296EEE393F0E594 EFE58EE9DF87E5DB83EAE08AF0E594EDE296EDE199FAF2AFFAF7AE999754262006241D07837B5E B8B18DD6CC97C1B66FE2D681F9E991C5B15CE5CD79F8E084C5AD4FC2AF50EFDE7EDFD272E5DB7C EBE287E7DC88EDE292EADD94E7DA94EEE192ECE287E6D886EADA90ECDB94EADA8BEADD85EDE385 EAE488E2DD95ECE6B5201904544C1FF0EB99E3E6A4D5D499524303AB8B3BE3BE67FDEE99ECE39B ABA86A655D20FCEBA8F2E298F7EA9EFDF4ADDAD18E857A37F7E7A1F7E195F5DD8EE0C878776517 D5C97FEFE79DEDE396EAE194F1E89B877E32CEC57AEBE099F6ECA6ECE19FEADF9E877C3CDDD193 F4F1A5E2E28EFAE69FF8CE968D5724B8844BFCD893F4E28FEEEA8DEBE991F3EC9CF4E69EE9DD8D F2E492F5E29DFCE2B3EDD69FF5E79CC5BA8A160E005149212D1E059B8954FFF4ADF8E2A9E1CD99 6A59251C10009A915DFFFAC0E8E3A4EEE8A1F7F0A1F6EC98EBDE84F3E38EEEDE92F5E49CEDE097 E9DC97F0E6A0F7EEA8F2E9A3EBE29AEDE199F0E098EADA8FF2DB8BF4DB89F8E999EEE99CF6F8B1 4F581B78803DF2F2B4E2D89DFAE5ABF4DAA1966C33592A00DCB072FFE09EE6B670CF974EECB26B CB7B35914300DE9E56FFF5A6E9DC88FAF0A1FFE4A4FFDD9E8A5C18C7994DFFE496F6D384EFD88A D9C97CCDBD6FCFBD6CF2DC87FFED9AFFEB9CE8EA9ACAD087D1D390E2DC9CE7E6A1E6E69AFFEFA9 EBB67C964A1BB96A3DFCC881FEE79DFFEFB745471E091404282E1A221E0CA79B5EF6E7A3E2D992 E8E79FA4A766423F11D5D1A6F4F0C38D895F1A16001D1A04ADA969DAD696D6D08DD7D28BDAD58C D5D291CFCE9AC6C594D1CFA2D8D6ACD5D1AAA8A37B140F00504B2AF5F1BBE3DEA4E3DEA1E8DFA2 F3E8A8F6EEA8F3EBA2F4ECA0F5EFA0F4EE9FEBE59AF0EBA5E6E1A1E1DDA0E9E6AA98934FFBF8B0 DFDB95F6F2ABE9E49FE5E09CF0EBA9ECE7A4EDE8A7F2EDACF5F1B0F8F0B0E2D996DDD593E6E2A2 D8D597D6D59CD5D59C2A2A11605D2FEFEBC1F5F0C8FAF1CDC4A366EBBE65EEE584EAC172C68545 F1D58FEFE39CF2EAA9E6DFA4503D160E00002B1B013E3B266E6F5E212006A4A279FFFFD0F3F0B3 F4EFADEAE5A2F0EBABECE7ADDDD7A2DAD4A0E4DDA5C8C288ECE6ACE6E0A5E9E3A7E8E2A6E5DFA2 E0D99CE6E1A1E1DC9CE2DD9BECE7A8DED89BD3CD92E3DDA2E2DCA1E2DBA3E8E1A9E7E0AAE3DCA5 F5EEB9FBF4BDE4DDA8F1ECB4F3EEB4F4EFB7F9F4BDF7F2BCF9F3BFEAE4AEF2EDB6F5F0B7FEFABD EFEBABDFDB9CE3DEA4E1DEA4EFECB2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFE FFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE FFFFFEFDFDFEE3E3FDC9C9FEC1C1FED0D0FEE8E8FFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFDFADEF3DEC9EDC7BDE8BEAAC8C3939AD198A6D4A8C1D5CAE3D6D5EED6D6F0D6D6EFD6D6EFD6 D6EFD5D1E9D0C5DEC5C6E3C6CAEACAC8EAC8DAF1D9F4FBF3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7DD89E7DD86E8DE85E2D97ED8CF74DBD378D7CD74D4CA71 E8DE88EFE492E3D782E9DA81ECDC84E5D57DE3D57DEBDC89EDDF8CE8DC8AECDF90ECE091EFE495 E5DA8DEDE6AE504D1E4746056C6C276F6E2B625E20E8E49FE8E29EC6BC7E382E00E5DB9BE9E193 F2EB9EE7E093D0C97AE2DB89F5EE9AF5ED97ECE28CEBE18BF3E994F5E997F0E394F2E596ECE292 EEE295EEE296F7EC9FF1E69AF6EB9FFCF0A5FAEEA3F1E598EDE194F2E699F2E69AEADE92E9DD90 EEE392F4EA93F3E992EAE087EBE189E9DF8AE5DA88E9DE90E9DE91EBE593FFFEB2D4CB936B5F44 0E0000382B1A988B67BCB17EC8BF7ABFB665B7AD54EEE083F8E689C8B857F4E582E1D56FE4DB74 DCD671E5DD7DF0E68EE6DB8AE6D891EAD997E4D58BE9DF85E1D581EBDD91F2E197E6D688E0D37D E7DD83E4DC87DED792FEF7C74F47303C360BD0CE82DDDE9FE8E4AA554608866A1DF3D27FFEE996 F5EA9FD8D390625C1DF3E7A4F1E29BF4E69EF2E8A4EAE1A0736827EADA95FDE69CE1C97AE4CE7B 9C8A3ABAAF62EFE79CEBE295EAE194E8DF93B1A75DA1974FEEE49FEBE19CF0E5A3F0E5A3A99E5F A29757FAF5A9E9E593F8E39BFFE0A2A4713A8A581EF1CC88EAD686EAE18BF2EB96EDE595F4E59B F8E89AF0DF91F1DD98F8E1B2E6D5A0F3E9A4635D341D16075E5429251007E4D4A1FFEAA6F7E0A4 FBEAB0DED09A706635171100A7A16AFFFFC8EEEAA7DFD88CFAF19BF3E88DEFE088EDDC8DF3E395 F2E598EADF95E7DF96F0E8A0EEE69EE7DF96EFE69EF5E99FEFE297F0DB8AEBD67FE1D481FFFDAD 9B9D52626A22ECF3B0E4E2A3FBF4B9F2D8A299703D613201C8965EFFDFA0FFE4A0C49B53D5A75C FFDD94AA5610B25F1AF6B16AFFEB9EFDF39EE0D586FFE6AAD1A566764904E6C679FBDC8CFFE89A EBDC8FDCCF85EDDE94DDC87CCBB061E8C97AFFE396EBE999DADE94CCCE88E1E39BE1EC9DEAE99A F2C682A85422BA5F34FCC08FFFE4A1F8E5A0EBE2A8545627272D1FDDDDACC5BC82FFF5B1F1E196 E3D98DF0F0A6575B1A7B7952FFFFE0CDCA9E272300545024A9A563EDE8A2E1DB93E7DF97E6DE96 EEE59CE2DB9FEAE5BBF5F1CAE2DFB9AFAB845A54300F0A05373114DCD7A6F7F5C1EFEAAFD3CD8E E2D99BEEE3A5F4EBA9F3EBA4F6EEA4ECE699EBE597F3EDA2E5E198DDD894E1DC9CEFEBABF7F2B0 F3EFAAEDE9A5E1DC98D8D38FE6E19DF4EFABEFEAA6EEE9A5F1ECA8F3EFABF6EFACEFE6A3DCD493 E1DA99DFDB9BE5E0A6F6F3BD7371430D0A00BFBB8F7E78556E6442CDAC73E8BB62F2E57EE9BC65 C5843DE7CF88FFF9B8E5E2A7D7D29A24150F2F1E0CC0B99AA8A692484A360A0A00525027E6E2AF F1EDB0F3EEACF5F0ADF5F1B0FAF4B9EFEAB2F7F2BCF7F1B7CEC88EE0DAA0D3CD93DED99DE6E1A5 F4EEB2F4EEB0ECE6A8E0DB9CE4E0A0ECE7A7DED89AE6E0A3F0EAADE5DFA3E0DA9EE3DDA2ECE6AD F0EAB1F1EAB3EBE4ADE6DFA8EFEAB2EBE6AEEEE9B2F6F0BCF8F2BEF9F3BFF6F0BDF8F3BCF1ECB3 F9F4B9F1EDAFF0ECACB0AB6CB0A96BF6F0B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFFEDEEFFC1C1FEBCBCFED1D1FFE8E8FFF5F5FFFAFAFFFDFDFFFEFEFF FEFEFFFBFBFEF4F7FBE8F5EFD4EEE1AAC1E27E85EC8FA9CFABDAB2B1E0B2B3E1B2B3E1B2B3E1B2 B3E1B2B3E1B2B1E0B0B2DFB1D2EDD2F4FBF4F7FCF7F9FDF9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8DE89EAE089EDE48AEAE186DED578E2D97BDBD377 D2C870E5DA83E9DF8AD6CA74E6D77FECDC84E7D880EBDD85F1E28FEEE08DE9DD8BEDE091E4D889 F0E596E0D587C7BE825A571EA4A251BEBC6DADAA686E682FCEC982D1CD84CAC387302502BAB179 ECE597D6CF7FEBE494C2BB68C7C16DE9E38CEDE68CF2E88FEFE58DEDE48EF6E998F6EA9AECDF90 F7EB9DF7EBA1F6EAA0FBEFA6F0E49DF5E9A1FCF0A9F7EBA3F4E89EF1E59AF2E69AF5E99EF4E89C F2E69AF5E999F5EB95EFE58EEAE186F2E98EE8DE85DDD37BE5DB86DACF7DDFD387E6DA91EEE4A0 E3D79B8F8252281A080B0000796C4FC1B58D9E955AA9A453CDC86BBCB159BEB157EBE183DCD573 DDD873DBD871E0DA78E5DD80E1D680E3D487EFDC97F4E698E5DE84E4DA85EADE8FE9DC8EE5D587 E5D882EDE38CE2DA88DFD695FBF3C27C73581B1700A1A05EDEDDA1F1EAB176652A765D27FADF8F EDD883EBE090F5EEA5706A29D7CE8FEFE19AEFE29BE8DF9BE5DC9B6D6221D4C37EFFEAA0D3BA6A EAD380CEBC6C928739EDE59AEBE496EBE398EEE69BD0C980746C26E2D996E9E09DE3DA97F3EAA7 DBD28F8F8643E3DD91F1EA98F4DF93FFE3A1D5A56B6F3F05DBB573F2D78EEEDF90EEE393F1E696 F1E295F1DD92F6E397F0DD95F1DDABE9DDA8D2CF8F29260639352653481D412706CDA97BFFE7A4 F4DE9AE5D393FDFCBFF3E9B64E48241C1901C1BD8AF9F3BBE7DFA0F8EEA3F2E695EDDD8BEFDE8D EFDF91F2E598E9DF94E1D990E6DF97E9E29CEAE39DF0E8A0F0E69EF2E8A0EDE094F8EB9EE0D68C CCC47E403A06E9E5A6EAE1A4EFE1A7E2CE948E7039502B00B48A53FFF2B3FBD996ECC781A87A31 F5C378CB873CA0530BF3AB63E2A45BEFC678FEEF9EF5E297FFDDA4A470338F611CFADB8DF1DA8A F4E799E8E196CAC37BDCCC87FEF2AAEED288BB9E51D2B76AFAE79CF9EAA4E7DE96DADC8EE8ED9A E7D386BB7739BA5C2BFFB787FEE7AFF3E1A4F5ECB0FFFDC98385522E2F19DBD79DF1E3A1F1DD95 ECD98DE5D990EAE79F2528069997727D7A5967643BDEDBA5EFECABEDEBA0DFDA8CDCD584E7DE91 ECE298F8EBA3BCB2798F89646E68463731100D08000E0601272008AFA778F7F1BBF1EBAEF5EDAC E3DC97E3DA9AEADFA1ECE3A1EDE4A0F5EDA5ECE69BE1DB90EEE99DE4E097E2DE96E4E09BE0DD99 DBD594D7CF8DDFD894E0D995E3DC98F8F1ADF4EDA7EFE8A2EDE6A0EEE7A0EFE8A2EFE8A2EDE49F F2EBA6E5DD9DD0CC8CDED99FECE6AFAAA5732F2A061C160B2822070D030195733CE2B45EF8E87F ECBB5DC98639E7D38BE0DEA2DDDDA8FFFBC84C3B1D2B1D0ACECDB1EDEFD9FFFFEBD6D6B4BEBD92 FFFFCDF2ECB0FBF3B1FCF5B2EDE5A6F9F3B5F5EFB5F6EFB8FEF4BBF0E7ACEFE6ABC2B97ED0C78C EFE6ABE3DA9FF3EAAFEEE5A9F0E8AAF7EFB1F0E9A9EDE8A8F4EFAFF3EEADEBE5A7E5DFA1E2DC9E F0EAAEF7F1B5F0EAAFEAE4AAF3EDB3F7F2B9EEE9B1EFEAB3F8F3BEF8F2BEF5EFBEEEE8B4F3EEB7 ECE7AEF5F0B6F4F0B2FBF6B7BEB675A9A15DE5DE9AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFFE5E6FFCDCDFEBABAFEB7B8FEC6C7FEDCDDFFF1F1FF FFFFFFF8F8FFEAE9FFD2D1FFC1C4FCB9C3F5B7C0F6BEC1FACDDAEADAF2D8D9F1D8D9F0D8D9F0D8 D9F0D8D9F0D8D9F0D8D8F0D8DAF1DAEDF8EDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD37DE1D77EE5DC81E7DE82E5DC7FDDD477 DDD478D9D075EADF87EFE590E0D37DDCCD75E7D77FE6D77FE4D67EEEDF8CE9DC89E6DB88F1E496 EADE8FEDE394E0D588F2E9AAC6C180D2D074D8D881F4F1AC827B43BCB872E3DF96EEE9B030270E 39320A96914CE5DE8FE5DE8DE2DC89DCD680F2EC94F8F197F5EB92F2E890F1E790F6EA98F5E999 F0E394EFE496F7EC9FFAEEA4FAEEA7F4E7A1F6EAA4F6E8A3F0E49CF5E9A0F1E59AEDE194EFE497 EEE296EBE091F0E594DBD17AC3B961DFD57BECE388EBE286E9E086E8DE87E9DF88EADD8FDDCE84 E3D686EDE190F4EAA0CBBF855C4D271103001F12046B633FC4BE81D2CD85998F47A49A4FB4AC5D D5CF78D6D276E0DC7CE1DD7DE8E384EBE187E9DD86EDDD8BEADD8AE3DC85E0D782E3D786E1D484 E7D987ECDF8AF1E692E4D98BE1D694EEE3B0958C6A161300909054E0DAA3FBF1B68E7A41624B23 FCE99AE4D07CE2D27EEFE6987D7731C3BC7DEDDF98EEE099F0E6A2F3EAA97E7331BDAC67FDE79B D3BB6BF7E18EE5D385776C20D5CD82E9E195E9E196F2EAA1E4DB9669601ED0C785F7EDACE9E09E EDE4A1F5ECA89F9651C7C074F4EA9AF4DF94E9CD88FFE0A1744A0EBA9557FBEAA7F1DC94EBDC90 F3E697F0E294E6D289FCE89EF5E397F2E2ACEDE3AF959459020100545231443A0C876B43754A19 E6C180FDE99DFAE79EEEDE9EFDF1BBD4CC9A2D280F2A230BC3BB90FEF3C3F9EEB6F8E9ADE9DA95 F2E092F0E092EFE296EDE399E7DE97E4DC97E4DC97E8E09DEEE5A1E9DE98E7DC97E9E4A3FDFBC0 C8C1864C4018D4C28CFFF2BFF6DAA7DBBD88755822553900A68E50FCECABFBE29DFDE19BBE924B DCA15DD7934C914B02C8893BFFE696ECC374D5B365DCBB6FFFF2AEFACC968D5216AE823CFFEE9F F4E594F4EE9FEAE79DE2DB97E9DD99EDD893FAE197F7DE92C3A95DC4A55DEDD591FFF1ABF0E297 FFECA0BA853DA35819EBA46AFCD89DF4E8A9DAD6A1E9E6B6E3E3B246452144401DF2EBACE3D08B F6E299E8D68CE2D690EAE5A43C3B0C0A0700000000332F14D6D296E9E79ED1CD7CDED884E0D884 E5DB8AF1E599F5E5A0998E581913000E0800332E19675F3EB0A976D5CE98E1D9A0DFD998ECE5A0 DBD489E8E295E0D692EDE3A5EAE2A0EAE19FF8EFAAEBE59CF3EDA3F2ECA1EFEBA2EBE79EDEDB93 E8E59FE7DF9DE9E29FDDD692EEE7A2F1EAA5F4EDA7F9F2ACF5EEA7F1EAA3EFE8A0F2EBA2F4EDA5 EEE6A1EBE49FE7E09CDDD796F6EFB1E6E0A7DBD4A2DCD5A74F492A10090006000064461CD0A555 FDEF85FAC865DB9747B9AA63CFD199E9EBBCFAF1C2867244392B1D2B2E155A5C4A717160CAC9A5 F2F0C3F4F1BCF7F2B5F8F0AFF3EBA8E9E19FFCF4B6FAF3B7F2ECB0F6EDB0FDF4B8F7EFB1C8C083 C7BF82EDE4A8F2E9ADFDF4B8FBF4B7FDF5B6FEF6B8F4EDAEF8F3B1F9F4B3F4EFAFF4EFAEF1ECAD E7E1A3EFE9ABF4EEB1F7F1B5FAF4B8F9F3B9F6F1B8F9F7BFF5F0BAF4EFBBFAF4C1F7F1C0F6F0BD FAF4C0F9F4BDFBF6BCF0ECAFEBE6A7FFFEBAFAF1AAFDF4AEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFFFFE6E6FEC4C4FEB1B2FDB4B5FEC3C3FE D4D4FFE3E3FFDCDCFFCECEFFC1C1FEB7B8FDB4B6FCCACBFDF2F2FEFAFCFDFBFEFBFBFEFBFBFEFB FBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFDFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD37BDCD279DCD378DDD477DCD376 E5DC7FDCD378D3CA6FD9CF76E4DA83E8DB85E7D880E1D179DBCB73DCCE75EFE08DEADC89E0D482 E9DC8DEFE394EEE394EDE394ECE39EE8E29BDEDB7DD2CE78DFDB938B854C807B35FCF9B6D0CA96 251D08252008535009908A3EE5DE8DF9F29FEBE590EEE891F4ED93F8EE95F5EB93F9EF9AFAEE9C F5E898F9EC9DECE290F3E898F7EA9FF8ECA3F9EDA5F9ECA6EEE29BE6DA92F1E59BF2E698ECE191 EADF90EADF90EEE393F7EC9BE8DE89E0D67EF0E68DEFE68AEDE489F1E88DEFE68CECE389EFE391 EADA8AE8DA83EBDE82EADF87F6E99CE2D496A1926336280808000023180651491FBAB07AE0D59B CAC184B7B36DBEBA6FABA852E2DF87F4EF94ECE488EAE082F6EB8DF7EC92E4DE89F0E895F0E794 DBD07CDCD07AE6DA84EDE18EE2D68AE2D995EFE5AAC9C08F1D1B08706E3DE2D6A0FEECB2937E40 544006D9C678DDCA73DAC66EECDC8A90893FB7B373EBDF97F1E49AF2E9A3FAF1AE9C914E978641 FAE398D0B768FEE898EEDB8E93883EC1B96FECE398EEE69DDED68EF0E7A59E955693894BEAE0A2 EFE6A5E8DF9CF2EAA3C0B8719B9348F0E697EBD88CE2C67FFFE6A29C7839755317FFEAADF6DD9E F7E49FF7E89CECDF90F1DF96F9E79CF4E494F0E1A5F0E8B56566330201005250325F5722FBEAB9 8D6630815511E0C877FFF9AAF3DD97F0DDA3F5E9B7D2C79D423917150B03847650F1E1BCFFECC6 EEDDA7F1DF98EEE096EFE19AE4D794E8DD9DF4EBAAECE2A3E1D698E2D395E9D899F4E5A6E7E6B0 909668413C12A69269FFFED8F8CDA8B28359683B0D64420CCBB271FDF2AAF0E79BF3E79DEBCE86 CB9753C87E3F9C4E0BCC8940FFE593F1D982FAE891F2DC8ED1A962EAB475E7A56C864A0AD3AA60 FFEB9AEAE18EEAE799E7E59EEBE3A2F0E3A2EFDC98F2DD94F4DD92FCE79CE0BC78BB9B58C5A762 FFE6A2DF9C5D9B4405C98644F9DD95EFEBA3F7F8BAF3F4C6EBEDC570703F030000A49C60FAECAB E7D690F7E49DF8E6A0DFD291FAF2B697915E1A15007E7A52E8E2AFF7F4B3DDD88CDFD985DED681 E3D984F2E796F2E49AF3E29CE5D89CD9D29ED6D19BE9E3ADE5DFA7F7F1B6EBE5A6DFD894E7E198 EBE396ECE594ECE693E7DE95F3E8A9E6DD9BEDE4A0FDF4AFEBE49BDFD890F9F3AAF7F4AAEDE9A0 F5F3ABF3F1ABEEE7A1F0EAA5ECE5A0F4EDA7EFE8A2E7E09AF4EEA6F9F2AAF9F2AAF3ECA4EEE89F EEE79FEEE7A1F2EBA5E7E09ADDD691FBF3B2C5BD80EAE3ACFAF2C4E9E1B8BFB693665F45B3976E DEB772F4DF79F5BD59D48F3D51430A363C13AEB087FEEFC09C8153C7B48CC8CDAE5F624A363419 1512042C280CD8D29CFAF2B6F8EFAEEAE19EE8DF9DF1E9A9F5EEAFF7F2B2F8F0B1F8F1B0FBF3B3 F3EBABE5DD9DFAF2B3F2EAABEEE6A8F9F2B3F9F1B3F3EBADE9E2A2F2EDABF7F2AFF6F1AFF6F1AF F3EEAEE7E1A2ECE6A8EFE9ABEFE9ACF5EFB3F9F3B7EAE5ACF4F0B9F8F2BEECE6B3F5EFBEF0EAB8 F6F0BEF6F0BDFBF5BFFAF5BCF3EFB3F4EFB1F9F2ADF7EFA7F7EFA7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE9E9FED9D9FEC9C9FE BBBCFEB3B4FDBABAFDB7B7FDB7B8FED2D3FEDCDCFFD4D4FFDEDEFFFCFCFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6DC84D5CB72D3CA6FDCD376 D7CE6FE9E081E3DA7CD7CE73D8CE75E5DB83EBDE88E3D47CEEDE86E2D37BDED078EEDF8DECDE8B EBDF8DEDE091EFE394EFE495E7DC8DE9DE95E5DD91F3ED94E1DA86E8E298B1AB6A110D005C561E 494519110C00868352E6E3A67A742ADCD587F7F0A1EEE796ECE591EDE68FFDF29CFCF29DF7ED98 F9ED9BF6E999EADF8CF1E790EEE38FF4E999FBEFA4F6EAA1EFE39BEDE199E2D68CF0E496F7ED98 F1E791EBE18DE9DE8FF7EC9CECE190EADF8BF5EB96F2E891ECE289EBE188EFE68BEDE489F0E78C F1E88AEEE487F0E48BF2E38FF3E38FF9EA94EFE08AFFF4A4C7B876706134140404120100201301 887D55D5CD9DE1DAA8B2AD72191600AEAC60CDCB7BDFDB82ECE787E4DD79EAE285E8E390E1DB87 EAE28BECE289ECE188EDE28AF0E48FE6DB8CE9E098F1E8A5E7E0A137372238360CCDBC86D7BD82 907736604C1597863DDEC970C9B150E8D378948A3E848241F2E69BEBDE91E6DD94FCF3AECBC07D 6C5C16FCE59AD1B86CFEEB9DF2DF94B5A9628B833CF6F0A5F1EBA0E8E199F3ECA9E6DEA06A6124 DCD497E5DD9EEFE8A3E8E19AEEE99E82792EEEE397E0D084F2DD92FDE39CD5B877684911C1A26D FFF5BFF0DB9CE5D78EF3E998F6E9A0EFE093EFE38DE4D999E5DDA84E4C211E1C0D404024827D42 FFFFC8F0CF927D56146F4A0AEECB7DFFE39CFFF7B7F8E4ADFBECBCE8DCB2675A32130501524025 978267E7D3A8F5E3A4FFF0AFF8E9A9E9DDA0EDE2A8E9DCA4E9DAA2F1DFA8F8E3ABFBF8BEDAC38A 7E784B151809AAA17EE5CDADB99270764623541F02A87A47E8C588FFF7B1F3E798ECE796EADD91 E4C37DBD8142AA5A20A85B1CFDD387FCEC97E9E78CEFED96F9E498F6CB8BD290569B5318A26622 FFE79AF0DB87E5DE8AE4E093E8E49EF3E9A9F3E7A7EBDD99E6D98DE8D489F8DC95EFD490DFC983 C19F5BD6884DBD4B16E67B43F4C77EF2FCA9CAE192CAC58BA8A77D595B3A020200615B25F0E6A9 EBDE9BE2D58EE9D893F2E39FE6D99AF3E8AEE7DDA7E2DAA7EDE7B1EAE4A7E7E29CE1DC8CD0C975 DFD782DDD280F3E799E8DA92E3D28FE4D798E7E1A4DFD99AE3DC9DE4DC9AF5EEA9E4DD95F2EAA1 E2DB8CD2C979EAE28FECE490EDE499F4EAA7EBE29EEEE5A0F0E7A2F1EAA4ECE59FA39D57CFCB84 EAE69FA6A35CE8E49DEDE69FE9E19AEEE69EF7EFA6F0E8A0E6DE96E9E199EDE59DF1E9A1F0E8A0 ECE39CEAE19AF2EBA5ECE59FE5DE98EAE19BF0E6A1C8BF7EF1E8AC988E5B5D552CF4F2CDF4EECB F0D9B6C8A66EFCE686F5BB59E8A352CFC5841B231245441EE0C99944200C432804CFCFAEFAFBDB FDFBDCCAC7A19A9668E7E1ACF7EFB3F7EEADECE39FE9E09DEBE4A1F2EAA8FDF5B3F3E9A6F2E9A5 F2E9A5F8EFACF3EAA6FBF2B1F2E9A7FAF0B1F5EBADDED496E7DC9EECE5A5EAE5A3F3EEAEF7F2B2 F8F3B3F9F3B5EDE7A9F0EAACF0EAAFEFE9AEF7F1B4F9F3B7FFFEC5EEE9B2F8F1BDFFFFD0F4EEBC F6F0C0EFE9B7F0EAB8F4EEB8F2EDB5EFEAB0F8F2B5EEE7A3EEE5A0EFE6A1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FF E6E6FFCECFFEBDBEFDBDBEFDBDBEFDC5C5FEEAEAFFF9FAFFF2F2FFF1F1FFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEE48CDFD67BDFD679 E3DA7CD8CF70DFD677E0D779DED578DFD67CDCD27BCDC269B8A850EBDB83EBDC84DCCE76EADB88 E8DA88EBDF8DEDE092E6DA8BE7DC8DECE191EEE495D9CF7FF3EA99E7E08FE2DB8EE8E3A0645E24 231C0029250A292603CCCA9AEAE9B3ACA664A59D54E6DF94E6DE91F5EE9EF5ED99EEE48FFCF29C FBF19CFEF3A0FEF6A5F7EB98EDE488F5EC92FDF39CFDF2A2F5EA9DEEE297F0E498ECE092F1E793 F2E98EF0E78BF2E890E9DE8CF3E896EFE494E4D987EBE08EECE18EE9DF89EDE38DF2E890E9DF87 E9DF86F3EC8BEEE788EDE38CF6E897FBE997F6E48BF7E583ECDD7ADAC772FEEDAFB09971422D1A 0900000A0000251C0A857E57C8C39B45411AAAA773C6C384B3AF64CBC770D6D273E2DC81E7E291 E3DD89E5DE85E8DF83EADF84EFE489F3E791F0E594F4E99CE9E296E3DB935D5D2E0C0900B29C65 CFB073AB8E4D8D7B45604F05E9D47AD8BA55E5CB6BB0A2525C5C1BF4E999E9DD8BE7DF91EFE7A1 DFD58E6A5A13E3CC82E8CF83FEE79CF2E19AE3D99669601DDDD78DE1DA91ECE5A0F0E8A9FEF6BB 857C42BEB67AECE4A6EBE3A0EFE9A0F5EFA3A0974ED0C47CF3E69BF2E497F5E499F3E2A1765724 A08253BFA676D4BF86FDF0A9E5DE8DF0E79EECE392E7E082EBE19BC0B6833D38122B251C201F03 A8A768F7EAA7FFF6B0E4C4799667257F500BE6C07BF8D995F7E2A1FEECAEFDF0B8F9EBBAA8986B 4331171701003F2A197C6B3ABBAA71D4C48DF4EAB6FBEFBFEEDCACE1CD9CD1BA89C1A6727E5F30 3C1E0165522DA0946E8A7954654C284929008A6438DDBE8AFEDA9FFFE8A7F4DC93E8D78AEEDE90 F5DB95C09455733600B1692CFCCE8AFFE597EBE188E1E88DECF19AF9E49BFEE8ACFFBD84894204 D2974FFFF09FF7E690E1DA86E8E396F3EAA6F6E9ACECE0A0E6DD97E8E596E8DE91F1DC97FFEAA7 FEF0AFFFECAEC1672FB2430CE6884AFFE293ECF8A434420B1E11000500000D0F00656235DDD699 F4EBA7DDD48AE2D88DE1D78EE8DD9AF1E6A6F1E4A8EFE2A7E6DD9EF1E9A6E9E19CE0D88DE4DC8D EAE08EE0D785E3D889E8DC92E1D48EE8DA98E0D392DAD38FEDE7A0F0E9A2E5DD95E2DA91C7BF74 EAE296EEE599E9DF91F0E698EDE393E9DF94F4EAA3FBF3AAF2E9A2DBD28CEAE39DF3ECA7B9B26D D0CB86FFFCB9C0BB78DAD690FAF3AAE5DD93EDE59BF0E89EF3EBA2F1E9A0F3EBA3ECE49DE7DE98 E8DF99EDE4A0F2E9A6F0EAA5E3DC96DFD891E7DE96EDE29AECE29CF0E6A6B5AC73160F00746B44 BCB78EF5E4C5DDBE95F9E48EE6AA4CE79F51BBB17B08100044421DEBCB9B9D6E36513115171500 5B5C43959472DBD9AFF6F3C4FFFCC6F2EBAEF7EEADF1E7A3F4EBA6F7EEAAF1EAA5EEE7A2F6EEA6 F3EBA3F4ECA3FCF4ACF2EAA3F4ECA5F5ECA8EEE5A1EEE5A3E7DE9CF3EAAAF5EDACEDE7A8F2ECAE F2ECADF5EFB0FCF6BAF4EEB1F6F0B3F7F1B6F7F1B7FDF7BCFAF4BAF6F2BAF7F1BBF7F1BEEAE4B2 615B2ED8D4A3F9F2C2F5EFBDF5F0BAF2EDB6F1ECB3FCF8BBF1EBAAEFE8A6EDE7A4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFFBFBFFF8F8FFF5F5FFF5F5FFF5F5FFF6F6FFFBFBFFFEFEFFFDFDFFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5DC82E9E085 EEE588ECE385E4DB7DEAE182E5DC7EE1D87BE1D87DD8CE75CCC168D6C66EDECE76E0D078DDCF77 E7D885E3D582EADE8CEFE293DFD384DFD485ECE192EEE491D5CA78E2D68FDFD58ACEC779FEF8B1 726A3A27210DC7C29EC3C292E5E4B2D9D8A9413B05645B29EEE59FF6EEA5F6EEA1F2EA99EADF8C F5EB96F9EF9AFCF09CF8ED9AEEE28CE8DF7FF9F090FEF599F5EB96F0E595F1E697F5EA9BF6EC97 F3E98FEDE486ECE483F0E68BE5DB88EFE492FEF3A2F2E797F1E696F0E594EADF8DF4E996FAF09D ECE28DECE38DF2ED92ECE78CE9E08AF4E590FCE993F5DF84EAD373F5DD7BEAD174F0D785F6DC97 F1DAA1918252271A000F05001C12011D1606241E049C9776FCFCD2F6F4B8C7C378A7A550A6A14B BFB96BD6CF7EE9E289EDE486ECE183EADF82EADF86E6DC87EEE592EEE694EFE9989C9C650C0600 947A43BE995BC6A464D3BF7C4A3B01D0BB5CE9C75DE0BF5ACCBB6755540FE5DA88F2E691F1E99A E2D991E0D78F7D6D25A89148FBE297F9E098F4E4A0FFF7B982783ABCB66DF2EBA4E0D996F4ECAF FDF4BB857C467B723EEEE6A8EAE3A0F4EDA4E1DB8FC9C077A19750F6EDA2E5DC8EF0E499FCE9A9 C9AF7D5E3E15250800B09A6AEEE19EDCD887E6E197ECE793E4DF7BF6ECA381774A5B5439211A15 1A1805D3D58DEBE59CF3E598FBDF95F5C586955B1D7B4B08CDA55CFFECA1FFEA9DF6E9A0EDDB97 FFF2B6F0DFA9AB9767503C112A18002312002E1D0447360C5D4A1F5D471D462E064124043F1F03 3F1B005C370A58360B381A02503608715A26C2AD74FFEFB3FAE7A7F0DB97F7E199E4CA83FEE59C FFE8A3C494587D440A9F6328F4BC7CFFEDA5F8E493EBEB93EBF39CE3E592F9E59FFFE1A7BB7E46 934E0BD0984BD8B561FFF49BF2EA95EDE599F1E5A1FAEAAEEEE2A1E7E39AE7EF9CDADE8EEEE6A0 E8D492FFE3A8BF7D44A7541BD58845DBA157CCAC5DCCBA7373642A776336787346A8A673F2EDB1 EBE39CE5DD91EEE896E0DD8CEBE79BEAE39BE7DE97F3E3A0F5E49FFAEDA1E6DB8DE6DE8EEBE091 E4D98AE5DA8BEADE92EBDF94DCD088D4C783E4D594E1D792ECE59DDAD48AF1EAA0FCF4ABDCD489 AFA75CD3C980E9DF97F0E59CE2D58FE0D38CE9DF95E9E096EAE297F2EAA0DFD78FD8D18BFBF4B0 E5DE9AECE7A5F0EBA8B5B16ED4CF8CEBE598D9D284F5EEA0F1E99EF0E89EEFE79EF1E9A1F4EBA5 F1E8A3ECE3A0EDE4A0EFE6A3E4DE9AEEE7A1DED68EEAE098F5E9A1E7DB93D9CC89FDFCBF918852 332E00231E01322212674B2FDECC7DF6BC62D48A40BDB47D060E00696443E8C18FB57B40EABD82 A09A68716F493332140F0C00524C1DA9A16BE1D79CFAEFAFEDE29FEEE49FF5ECA7F3EBA6F2EBA3 EBE397E9E296F2EAA0F7EFA5E9E198F5EDA4DAD28ADCD38EEFE6A1F6EDA9F7EFACF0E7A6F3ECAE F2ECAEECE6A8EFE9ABFCF6BAF6F0B4F5EFB3F5EFB5F6F0B6FBF5BBF6EFB8F0E9B4FFFFCFFFFBC9 E4DFAC0D0700BBB989FFFECFFAF3C1F4EFB9F2EDB6F3EEB6FCF8BCF8F2B4F6F1B0F5F0AFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAD177 E3DA7FEAE183E2D97BE6DF7CD3CB6ADFD678E4DB7FE9E084E6DC82E1D57CE3D47BDDCE75EADB82 E4D67DE7D884E7D986F0E491F1E595E1D586E0D586E2D687E3D783E7DB89DFD190E0D58ED5CE7E EFEA9FC2B98F211906655F41D4D39FBCBF8867663E120B00B0A763EEE5A3F5EDA5EBE398F0E798 F7EC9BECE18EF6EC97FBF19DE9DD89D6CB71ECE480F5ED8AF5EC8EEFE58DF1E793F7EC9BFAEF9E F6EC95F2E98DF0E787ECE47FE0D778E2D882ECE18FF0E594F2E696ECE091F6EB9CF1E696F6EB9A FAEF9FE9DD8CECE290ECE598EFE89CECE38DECDF80F4E382F8E183FADF87D9BC68E7CB76F3D87B E6CC66EDD975F6E8A5D0C4916C613822180D120900060000201B0D817C5FD3CFA2F8F7BBF3F2A8 DDDA8DC3BF73BDB766BFB960D3CC6EE8DE80ECE185ECE188E5D985EBE28DF2EB93E8E38AD3D39A 211B00573B0B977131E8C683FCE8A25A490EA18B2AECC95ED9B84FD6C46B5D5C14BAB15BF3E990 F2EB98E5DD91F4EBA28E7E3778611BFFE89FF8E09AF8E4A3FFF2B6B4AA6D7A732BE4DD96E0D996 E9E1A4B5AD742118005B532EF0E8ABF0E9A6E6E097EBE498E0D78F988E4AE4DC93E5DF8FEAE297 F2E4A6E0C99817000046291CF3E6B5F5E6A6E4DF8EE1E194E6E58FE5E27DF4ECA1473B089E9571 261D17322F19DADE93E7E597E7E18FEFD78BFECA91FFD89FA36C2B6D4001A3802FE6CC74FCE790 F5E590E3D184EFDC97FFF0AFEFDDA6E1D0A2A7956A78663C544221432F1647300F553A14583911 613E1588603393693D946634C4995FD5B277FFECA9EFE69DEFEDA1E6E597ECE798EEDD92FFE49E EFCB89B68044853E0B995522FDCA8DFBE19BEDD88BEBE491EEF29BC6C975EBE698FFEFABE6C68C 7D490EB67A34F1C474C9A851DBC96FF3E691EFE295F0E09DF8E5A9E6DB98DEDF94E3EF9ADFF09D DCE39AF5E1A4F1B986933F0BB87737F5DD8BFDEB94D8B067C38950EBB98AFCEAB9FFFFC8F3F0B1 E7E09BE0D98BE2DB88E6E38EE7E693E0E190E9E79AE1D88DEEDE94EBD98BE3D57FECE089EFE590 E8DC8BE9DE8FF6EA9EEDE198E8DE97E3D994CFC582D9CF8CE2D893ECE69CF1E9A0E3DB92CFC77E F2E8A0F4EAA2EDE39DF5E7A4EDDF9EEBDD9EF6E7A9EFE49DEAE195E0D98CE9E197E5DD95E3DD97 E2DB97F2EAA9D7D292989352BBB776CBC683DBD387CFC677FAF2A2F0E79AF0E79DF3E9A1EAE099 F7EDA7F8EDABEDE2A2ECE0A1F0E8A7D0CA88CCC681E7DF97E6DB92E8DA91EDE197E4D993C3BA78 FEFCC3E6E2AB9995634738201B0604513D03DB9F48CD873EEBE1AE2B321F362D15CEA36DB97B3A FFDA98FCF3BCF9F6CDE7E5BEB6B488615B2B3F381DDED598FAEFAEF4E9A5F3E9A2F3EBA2F1EAA2 F7F0A7EFE79AE6DD90EEE598E2D98DD1C87DF3E99FE5DC94EEE49DF9EFA8F1E7A1F4EAA6F1E8A6 EDE7A8F0EAAEEAE4A8EBE5A9F8F2B9F7F1B7F6F0B7EEE7B0EDE6AFF6EFB8F5EEB7F3ECB8F8F2BE F1EAB8FAF4C3322C00908960FFFCCEF3EDBBE9E4AFEEE9B1F2EDB4F8F3B9F9F5B8F7F3B4F6F3B4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E3D97FDDD278E7DD80EBE184E1D877CDC464D5CB6CDDD475E3D97BE3DA7CD8CD6F978C2CBAAF4F D0C565D4C869E3D87AF0E587EEE389ECDF87E0D27DE0D582E7D988E8DD88E9E08DE2D88FE5DB91 E4DB8FE3DA94F2E8B4A3976F1B100031290B231B0910070082783CEEE49EE9E098DED389EFE497 F1E798FBF09FEFE493EDE28FF6EC99F6EA98EAE088F2EA8BF5EC8EF0E68DF1E790F7EC99F9EE9C F7EC99ECE28CEAE088F4EB8EF3EA8BE2D97CE1D77EE9DF87EBE189EEE48DEEE38FF3E894EFE490 F0E590F3E894ECE18DE5DB87E7DF8FEBE090EDE18AEDDF81F1DF7FFAE384EACF75F0D27AEECF76 F3D579F4D673F4DA75DEC974E9D78CE9DA96C4B87D716943221C02040000020000211F12686746 C4C59DF8FAC0F6F9A7DFE18CC1C16BB0AD57ABA651C1B967DCD382F0E594E9DE8AE6DA84E4D980 E7E69A4C4813220B00886835FFE59EFDEC979785385B4713EAD27FDFC96BD9CB6E8B863285842F EEED90E3DD79F2E789FCEB9EBBA366634A14F0DD9EFFF4ABEFE399F0E6A7E9DFA180772CDDD58B F0EAABF1EDB56964310400005D562CEAE1B0EADFA5EBDF9BEEE196F5E89DA49B54BAB268EDE79E E9E19EE4D9A094834D13000052340CCDAE75FDE09AFBE08FEAE18AE6E489E4E58BC9C390342D0B B0A9821A0E035A5029F1ECA0E3DD95EDE69BE9DE90F0D089FFE49EFEDA96BB98547555115F4105 AD8D46F9D995FFF1AEF8DF9DFAD797FBE1A0F5E5A7F2E3A6EEDEA4E5D69BDCCD91E0D096D8C98C D8C78AE3D192E7D494F3DF9FF6DB95FCDE95F9DB94FCE29AEED78DF1DB92F7E198FFEDA5F7D490 C390519C571D994711A54D16D99B5CFFEAA0EBE795DDE08DE6E495E4DA8E998A42EBD28DFBE9A9 A37236633300DBC775FFF4A1EECD79D2AC5BD9B162FFEEA0EDD98CEDDF94E2DE8FE0E190F7FCA8 DFE79AEFF0AEFAD196994510BF682CEFBB70F7EC97D7D885ECD893F3CD92CDA268B39A5AECD993 F6E59CE7D88CDCD280E8E18EE2DF8CE9E797E4E194E2DC93E7D993F4E09CEDD690E7D886ECE08C EDE18EF1E495EEE295E5D98DEDE197EEE39AEADE97E6DA95EEE29DEDE39DE7DD95F2E8A3F0E79F E6DD95F0E6A1E6DC96E1D792E4D995E1D593EEE2A1F3E7A7EEE49FE9E19AEFE7A0E2DB94E3DC95 F6EFA9F7F0AADED791E4DD97D2CC83DFD991F4EFA6EFE89EC7C075F8F2A6F0E89DE5DD92F1E99F EEE59DF6ECA5F7EDA9EADF9EECDFA0F3E9A9E2DA97D6CF8BF0E7A5D9CF8CDAD08EF0E5A4C1B774 211900CCC583FFFCBEF7F2B2F3E9B9AD9162A78341DDB16CBF9A66FFFFD59F9E712712003E1507 B48842FFF4AAEEE0B0DED4A4EDE4B1F4EDB8F4EDB2EEE8A8FDF6B5F3ECA5F7EFA8FAF4ACF6F1AA F2EEA9F8F4AEFCF6B1F6EEA8F7F0A8E8DF98DCD48CF3EAA2FBF3AEFAF1AEF9EEAFF9EFB1F9EDB3 F1E7AAF1EBA9EEE9A8EFE9AAF5F0B4F3ECB4FAF3BCF6EFB8EFE8B0EDE7ADF1EBAEF3EDB1F6EFBB F2ECBBFAF6BFFFFBC66A663C605A44FBF9DCF9F8D1EBE9B3F4F2B4F6F1B5FBF7BEF7F4B8F3F2B3 F4F4B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD2C76DDED379E4D97DE1D67AEADF83EDE384E3D97ADDD372DCD271DBD170DBD170CEC662 BFB850D3CC64CCC55DE0D772E6DC79EDE384F3E68AF1E28BF4E592F4E695E8DD8BE2DA89E3DA8A E6DD8FE8DE96E5DB96DBD08FE6DA9E5B4E203427005F511FAC9F6BE6D993E2D68AF1E697F7EC9D ECE192EFE495EEE393F1E696ECE18FF0E593F9EE9CF9EF9AF5EC92F5EB91F0E68DF3E995F8ED9B F6EB99F6EB99EAE08BE7DD86F1E78EF4EB90F0E78CF2E98EF4EB90F5EC91F4EB90F4EA91F5EB92 F2E88FEFE58CF0E68FF2E891F2E891EEE48FECE28BEEDE88F1E086F4E183F5DD80E7CD6EFCDE81 F2D376F1CF75E8C66CD9BA5FEFD375EAD273E1CF73F7EA97F9F1ADCECB981817000E0D01070800 030500080A00646841B4B679E5E7A6FFFFC2F2F3B0D2CE85CAC57AB4AE60B0A657C7BB6AE1D583 EEE08DFDF9A6888542070000856F46F7E098EFDB7AE0CC804E3C03C5B778E1D781E5DC7CB1A94E 5F6117E2E592E9E47DEADA76FCE194D2B480472D06E1D193DED786F8F29FF1E7A1F7EDAC887E36 BBB371F2EDB4E7E4B324220B575430B7B38FC2BA8CF4E7AFE4D490F3E093EEDF8F9F974B99924D DED89EF6EEBEE5DCB22B1D13503B0F8C703D947033FFDC95F8E392EAD479E1DC7FECEB9F8C8968 28261978764A150800776839FDF5A7E2D796EFE8A4EEEA99ECE08EE9D989F8E69BFFF0ADE1C489 A6854F633D09744A15BA8C55F8D094FFDB9DFED691FBE59DF5E198EAD78DE4D187E9D98EF9EA9F EFE196E6DA8EE5D98DE5DC8FE5DC8FEDDE8EE7D281FADF91F3D28AFFDC96FFE9A6FFE3A2C29756 804910894409BD6D34DE844CB86122F4C278F6EA96DBEA90E2F29DEFEFA3F4E09CEDCB8BFFF9BC CE9E616E3406A37936F0F09CFBF29DFEE190EFC173DAA65AD4A556FCDC89F3E38EE3DD86E8E590 E2DF8FF2EDA5FFF7BBC6854B9E490BDE8E47FFE292E9DD8BDEE295E9E6A2F8E7A6F9DD98E0C176 A7873ADCBF6FF9E090EAD888E6DB89E6DF8EDCD688EAE399EAE199F0E09EF8E3A3EDDA96EBDB8F F0E494EEE192ECDF91E9DD90E4D88CEBDF93EADE94E2D68CE2D68CE8DC94E9DD95ECE29DF2E8A3 EBE19CEFE5A0F5EBA6EDE39EEEE49FECE29DEBE19CE7DD98E9DF9AEFE8A3F1EAA6FFF8B4F6EFAB EAE39EE7E09AF8F1A9F3EDA4EEE89DFFFFBAEEE899F3ED9FE2DA93B5AE68E6DF97EFE99FECE599 F4ECA1EAE29AF1E8A0DED48DD9CF8BF2E5A5F4E9A7EFE7A2EAE39EF4ECABDFD798E7DFA1F4ECB1 F8F0B44A4202A09856FEF9B4EFE8A0FEEFABD3B26FEDBF6DCCAD73574822B5BF8FFFFFD4DBBF90 6E4716B89F4EFFF7AAEFDAAF7D6D389E9050F1E6A5DED590EEE69EF4EDA5F8F2A8F2EEA5EEEAA1 F1EEA7F6F4B0F9F6B3FDFBBBEFE8A8F3EBAAFFF8B4F8F1ADEDE6A2F9F0ADFEF4B6FCF2B5FBF0B7 F9ECB7F2E9ABF8F3ACFAF5B1F3EDADEDE7ADF1EAB3FDF6C0F7F0BAF1EBB3F0EAAFF2ECAEF6F1B1 FEF6C2FAF4C4F6F2B8FFFFC7B3AF883B3626F7F5E3F7F4D2EFEEB6F7F6B3F1EEAEFDF8C0F6F3BE F3F2BCF8F6BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEBE086EDE288E9DE85E6DB80E9DF82EADF83E0D678D9CF70D8CE6FD9CF70D8CE6D CEC561C4BB56DED570B0A742B1A843C9C05DE7DE7EEDDF85EADB85EADB88E8D989E6DA8CE6DD91 E8DF93E9E195E9E095E5DB92EAE197DDD389B8AF65D3C981E2D990F3EAA0FDF7ABE7DC8CF3E897 FCF4A4EDE191EEE491F4E997FAF09DF7ED97F1E792F4EA95F6EC95FBF197F5EB92F0E68DF6EC97 F8EE9BF2E795F3E896EFE590E9DF88ECE289EEE58AEEE58AF0E78BEDE489EDE489F0E78CF2E88F F2E88FF2E88FF1E78EEEE48BF1E78EFAF099F5EB96F5EA93EFDF89F0E086F8E486ECD477E0C667 F9DB7DEACB6EEACB70ECCD72DCBE61EFD674ECD773E7D776EADE84EDE699E6E1A54D4A1CB2B08D 67674826260C000100060300120905473F328F886CCAC597E8E3A8FAF6ADEFE999D7D17DAFA757 8F8638AB9F55DAD58DE8E5AD1A0B00604C2CF2DE9BF5E485FFF0A07665259A8C4FF6EC9AEFE588 DAD17D4D4C15CCC88EF5EA9AE6D17EFFECA5EBCB9678602BBEB06AECE891ECE88CEEEA99F9F0AC CAC4898F8854FFFBCE97956D0505009596728282613D3818C7BF7FEDE496F0E38EF1EA8FD9D784 736E32EEE6C4DDD2C3695D540E0000E1D0ACD5C48F5839049F7935FDD38DF9DF8DE8DC85F5EEA6 5D58385655384444280D0401978C59FFF6A7E2D893F1E9A3F3EC9DE1D782F1E492F7E699F6E59F FFE8A9FFE6ACC9AB728A632A7A5115865A1DA77837CEA460E6C37FFBE09CFFE6A1FFE19DF9DA96 FADE99F3D792EED08AEED38DF4DC95F5DB94FFE69CF9D98FFDE49CE8C37DDAB16DB68F4C77520E 6744018C621FE2B673FFD795DE9E5EA66921FFDF91FFED9DEAEA95ECF3A0E5E498FBE5A1FFE4A8 F5C9918D541C815213F8DC97F5E99AF1E592FDEC99FAE28DF9DC89BC9544DBB766FFE999F2DF8F ECE28FEDE998FAEEA7DFB77C86490BB06C25FDC478FADD8BE0D080DCDB90E3DF9AF1E29FFCEAA6 FFE59CE9CC80C49F53BA994CF4E295FBE799FAEA9CF1E397EFE59AE4DC91E5DA92ECE19AE9DD95 E3D88BECE192E9DF90E9DF8FF1E598F4E89CF4E89CEEE296EDE195E5D98CE4D88DECE198E2D994 E0D792F3EAA5E9E09BEDE49FF6EDA8F2E9A4F2E9A4F0E7A2DED590DCD38EEAE39FF3ECA8F2EBA7 FDF6B1F1EAA4E2DB95F5EEA7F1EAA2938E44D4CE81F3EDA0CFC97DE9E29ACCC57EE6DF97F0EA9F F4EDA1EDE698D9D286ECE399D3C982D7CD88FBEEABF1E6A3EBE39DEDE69FFAF3AEEDE5A4F0E8AA E7DFA1FBF2B59E96575D5514C8C17CF5EEA7F6EBA7E6CC84F8C974CBA45F150000595B31F8F4C9 FFFBD69E7D54DCC980FFF2A4FDEDBCAFA065C0B673FEF4AFF3EBA5E6DE96DCD68CF9F3A9F6F1A8 EEEAA1F4F1AAF9F6B2EAE7A4F7F2B0F3ECAAF2EAA9FBF5B5FCF5B5EEE6A6F0E8A9F5EBADF5EBAC F6ECAEF4EAABEEE5A4ECE7A1FAF5B2F1ECADE5DFA3F9F2BBFDF6BFFBF4BEF8F2B9F6F0B5F9F3B5 FEF9BAFAF2BFFFF9C8FBF8BDF9F8C0E6E3BB1E1903CCC7B3FFFCD8F7F6BCFAFAB4EDEBA7F7F1BA FBF5CFF8F2D2FEF7D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFDFFFFFDFFFFFDFFFEFDFFFDFDFFFDFDFFFEFDFFFFFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3E48FE9DC83EDE088F4E78FE5D77EDED177E4D87CE9DC80EADE81EADE81 EADD7ED5C967B5AA47BFB351C6BA58C1B653E0D472E6DA7BF1E38AEBDD87ECDD8BF5E598F0E399 E8DE97E7DD95E4DB91E2D98DE3DB8BDAD27FF4ED95F0E98FD1CA6DDCD677E8E185E4DA86EEE391 EDE38FF0E594F6EC97EDE38DEFE591F3EA93F8EE96FBF19BFCF29BFDF39AFDF499F5EC92F0E68D F7ED98F8ED9BF0E593F2E795F6EC97F0E68FEEE48CECE388EBE288ECE288E9DF86EAE087EFE58C F1E78EEBE188EEE48BF5EB92F1E78EEDE38AF0E68EF7ED98F7ED96F1E18AF1E087F8E285E7CF72 EED475FDDF81E4C568E5C76CF0D377E9CE70E3CD68E2CF68E9DB74EBDF7EE9E28CF0EAA266602A A49E6EF5F0C1D4CF9B8885532822000000000C00000E04021B120D50462A857C56BBB382F2EBB0 FDF4B4E6DE97D1CB80BAB574C8C3971B0D0137270DC2B578ECE188EEE28FAFA25C6D5F20FEF6A7 EEE38EF2E999625D2DA8A06EEFE19AF4DA8DFFE69FDEBF82A48D527C6F2AF4EF9FE7E492FFFFC1 FBF6BCEBE8BE6D6744E5E1C25A5846000000101200090B00060800807E3BF8F3A4DFD882EBE793 DCDC9868633A4E4539261B210C0104100600776A40F9EBB1A28A4E644410876032E0C07BF8E090 DFD190322C0B898A6A272C190D0C01B3B075F6EF9EE9DE97F4EBA2EDE596E9E08BF4E996EEE092 EBDA90F7E29EFFEBACFFEBAEF7E0A1E2BC7CA47D3C744C086E44008456169A692AAE7E3ECA9C5C DEB06FEFC182F4C787F0C181EDBE7EEDC080E5B878C99E5AC7A05AA4783474470B6B3F037E5A17 A98A45D9BF77F8DE95FEDF94FDDE95AD7C31C8A758FEEB9AF9DE8FEDDC8CE7E192EBE699F2DB98 FFE4AABA7541844710D2AC6BFFF5ADF9E196EFDE8EEDE791ECE88FFBF099F3DF8BB99446C99E53 FFEDA3EED88AFCF2A2FBDE999F62278B530EDFAE5FFFEA94E7CA75F3E191E0D98EE6E39BF5ECA6 EAD792F9E199FFE69DFBE79EC6A056BC994ED8BA6FFBE499F7E195EDDD91E5D98BE6E091E8E394 DEDA8AE4DC8EE5DC8FE4DD8FEDE396F0E799EAE192EFE597EEE394F3E89AE6DB8CDDD283DDD489 C1B772CAC17CEEE5A0E7DE99ECE39EF1E8A3F2E9A4F5ECA7E9E09BEAE19CE7DE99E7DF9BE9E29E D9D28DEDE6A0EEE7A1EBE49CE8E199E7E097D9D38ADBD58BDBD58BBCB66BD2CB83CFC881D9D389 DFD98DECE698E8E191D4CD7EE6DD90E7DE93E4DA93ECDF99E3D992E5DE93E8E298F2EBA4EEE7A3 EAE2A1E4DC9DEBE3A4F8F5B6888040928A49E5DE99FFFCB9F5DF97F9C770E6B76B3F1A00221B0D DDD7B3D2C2A9543E1CE2D793FCF1A3F6E1A6D9CA89F8EFA8E8E098F2EAA1DCD58AE3DD92E2DC90 ECE79CECE89FF0ECA5F1EDA7E1DE99E3DD9AF8F1AFF2EAABEBE3A4F1E8ACF1E8ACEFE7AAEDE4A6 EFE7A3F4ECA6F6EFA7F6EFA9ECE7A4F1ECAAF0EBACEBE5A9F5EFB6EAE4AAF0EAB1F2ECB2EFE9AE F3EDB0F4EFB2F1EAB6F0EAB7FCF9BFF2F1B8EAE7BC37322546412CF1EEC9F0F0B3F4F4ABF3F1AA FAF4B8FAF5BFF8F3BEFDF7C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFDFFFFF3FFFFEDFFFFEEFFF5EDFFECECFFECECFFF4EDFFFEEFFFFFF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDCCD78E5D681E5D77FD9CB73DED078E6D87FEDDF86F2E589EFE286 EADD81E5D879D1C463F6EA88E2D674BBAF4DACA03ED0C363D7CA6EEADB83E8D985E3D483E4D588 E7DA92E9DF98EADF98E8DF95E7DE8FE9E18EEEE78EE4DE7FD9D371D1CC66E3DE75DCD870EFE58C E6DC87EEE48FFDF39EF8EE97ECE28AEEE48DEDE38AF6ED91F8EF95F6EC93F7EE93FBF297F6ED93 F1E78EF4EA95F6EB99F2E795F6EB99FAF09BF5EB94F4EA92F1E88DF1E88DF3E990EFE58CF1E78F F2E88FEEE48BE9DF86EFE58CF5EB92F1E78EECE289EBE188F5EB93F2E690F2E28CF6E28AF3DD80 ECD275F4D779F9DB7DEACB6EEED276EFD377EAD172ECD976E2D16BE2D56DE1D672E0D87BE9E191 8E854B595018F0E7ABE7DF9FFAF3AAE0DA9E9A8F6E483B251B0F041003000F02000800001F1103 473C227E784EC4BF88E0DD9BF7F2BCE1D8B7392C211B0D00B0A670EDE793E9E28CD8CD7F574A05 D8CC82F8EC9DF5ECA09E97628C824BF6E59BFFE894F5D888BA9D57E4CE8E5E5212EBE6A5E9E5AA 817B4D8F8966E0D9BE908A74716F5B090901565947CED1BB373C2C090C00A4A66AF4F5AEE0DE8E B5B3742E2D060400010E09090E0707040000000000686128FDF3B1FFF0BB573B18200000C89F6A FFF3ACCBBF852A20017C7D5D0910001C1F02D0D092F0EB9AF3EA9FF4EBA0EDE495F0E892EFE68F EBE08EF1E396F6E49DF1DD99FCE19FFEF2B0FEF2AEFFEAA3EAC981C69F59AA793A8F5C1D7A4607 6D3A00673400753F007D45087C4407783E027C4105763B006D3D00825917774B0AAA7F40CDA767 E4C481F8DF98F8E69AF4E092EED384F3D887AD8736E4D681F8EB99F9DF92F8DE93E9D68BF2DF96 FFEAA8CF9760803905A5692FF8E5A0FAECA0FAE096E6D688E1DD89E6EC93E0DF88FFF49FF3D386 B98A42E0B36BFFE89EFFF0A5CB945399490CAA752CFFE992E3D477ECDB84F4E292F8ECA2F3EEA5 EEE9A0F0E39CFBE19BF7D88FFBD88EFFE59BF2CF85B08C43CBA961FEE39AF3DA8CE2D180DBD07E DBD883DFDD8AE2DC8CE0D98CE4DD8FF0E99BF1E99AE5DC8DE8DF90EEE495F0E695E9DE8EE1D686 DAD183D6CD87ECE39EE5DD98EEE5A0F2E9A4DFD691EFE6A1ECE39EDED691EFE6A1EDE49FEBE39F EBE4A0E7E099EDE6A0E8E199E5DE95CAC47AC1BB71E1DB91D1CB81ECE69DF0E9A1C9C27AD7D188 D7D185DCD68AE9E393EAE393ECE595EAE193F7EEA1ECE399E5D892EAE198EAE495E6E094E3DD93 E5DE97D6CF8AECE4A2DCD494FFFBBCE4DC9D837B3A494100D7D290E5D58AD19B44FFCA7AB48443 3725013B3023332719040000918E55FAF1A6FDE6A3F3E39EF6EEA6EFE79EF3ECA0E3DB8FC4BE70 E5DF93E4DE93E6E298EDE9A0F3EEA9F7F2AEE3DC95EEE7A2F1E9AAF4EBAFF3EBB2F0E7B0EDE4AB E5DD9FE9E29DEBE79CEFE99BEDE99EE1DC9BE5DFA0F1ECADF8F2B4F3EDB1E7E1A7EEE8AEF0EAB0 E7E1A7EDE7AEF2EBB2F5EDBBD8D29EECEAAAF8F7BCF5F3C579765C000000BFBC93F8F9B8EDEEA2 F3F2A9F9F3B3F2EFACF0EDA7F4F1ACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFEF8FBFBF1F8F8EBF9F9ECF9F9ECF9F9EC F8F9ECFAF9E6FDF9DBFFF9D5FFF6D7FFE9DAFFDDDDFFDCDDFFE7DAFFF5D8FCF9E2F9F9EBF9F9EC F9F9ECF9F9ECF9F9ECF9F9ECFCF8EDFDFBF1FFFEF8FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E18CE9DA85E1D27EE0D27BE3D57DEEE088EFE188EBDD85 E9DB82EEE185EEE082CABB5BD2C362E8DA79DDCF6EE8DA79CCBE5ECEC163D7C970DDD07BE6DA88 E6DA8CE2D68CE5DB94EDE39AEAE196E4DB8CDFD883EBE48BEEE88BEBE585E2DD78E7E27BEFEA83 F0E78CF0E68FF0E68FF5EB92F4EA91EBE187F0E78CF4EB90F9F093F0E78BEBE286F6ED91F6ED92 F7ED93F0E68EF1E792F6EB98F5EA98F6EB99EFE590E9DF88EEE48CF2E98EEFE58CEDE38CEFE58E F5EB93F4EA91E9DF86ECE289EFE58CEAE185E5DC81E8DF84F0E78DF3E992EADD88F3E38DFBE78E F0D87BF3D67AFADF82F7D87BEED072F5DA7DEFD679F5DE81EBD97BEEDE7EF0E280ECE07EEBE084 EFE390C5BA702D2100D8CF8AE4DB92E1D988ECE592ECE596EEE5A2C6BB8A75684A46372E211511 090000040000030000150F00403B1F6B61458C7D61594B3D130A007A7648E0DE92EAE58EE7DE8C 8375309A8C49F7ECA4F5EDA2CBC6816D641AF0E18BEDD375F6D97FCEB361F8E19F8A7D47CAC197 7C765B0800000600002A241854503E0B0A010D0F07616357696D5E333728646847B0B389DFE2AC E2E2A64E4A30000001231D1B817E7287866A37381B5A5B2ECACA7FFFF9B5D9CB9C2510052E120C 8E6538E1B97BA18857493C1B7A7B5A0A1100222602E2E29FEDE997F4EB9BECDF93F1E697EBE28C EEE690EAE08DEADE90EFE196F0DD97D9C57FF0D992F2DA93F6DE94FAE297FFE098FFDA99F9D08E EECB8AD4A867BD8E4DBD8F4FB98748BF8B4CB88345C58F51CC9659CFA664C6A462D8B472FFE8A9 FFEFAFFBE39DF7E49BE2D184FAEA99FFE695CAA755A5822FE2DB85F0EA97F7E496F7DC92F2D58F FCDB98E8B97A85460D894A12F5D193F1DD96EFE79BF7E297F1E296E4E28FE7EB96EBED98F1E996 FDEEA0ECC77DBF914BDAAE67FFE59F9A4D16A84B0EEEBD6EF1E589D5D878E8DF88F1DF90F8E59C EEE89EE6E399EFE59EF5E19CF5E197F4DE93F4DA90FFE59CFFE098C59D54BA944ADABA6CEED583 E4D37EDDD27AEAE28BE9E293E9E194E8E093ECE597EEE596E8DF90ECE493F2EA99EBE392EEE392 F1E694E8E092E1DA93F1EAA4F3ECA6E6DF99EBE49EE9E29CE5DE98DCD58FDFD892EEE7A1F0E9A3 EFE8A4EBE49FF8F1ABF0E9A2E9E39AEAE399E1DB91DDD78CE5DF95F3ECA4ECE59ED9D28CD9D28C E0D991D9D388E5DF92EAE395EAE393DAD382DBD282EAE193E7DE93E6DA92EBE397EEE796F4ED9D ECE596E0D88DA59D55E8DF99ECE3A0D9D08EF8F2B3DDD79C8C8244D8D692E0D388C78C35FBB55F F7BE75B6A4771205000200000400005B5D2EFDF7AFF9E39BFFF1AAF1EAA1FCF5ACE3DE91DCD687 E3DD8FF3ED9FE0DA8CECE69BF6EFA7EDE8A2EEE8A2ECE59CF1EAA5FCF5B6F6EDB3EDE6AFF3ECB7 F0E9B2E8E2A6EFECA7EFEDA0E8E694DEDB90D6D092E5DFA2ECE6A8E9E3A5DAD496E7E1A4F0E9AD EBE5ABDBD59CE7E0A9F4EDB7E8E0AECEC893E2DFA0F1F1B2FFFFD2BCB89B0C0804626038FEFEC1 E2E395EAEA9FF9F4B4F0EAAAF0EBAAF7F1B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFEFEFDFEFEFCFFFFF4FCFBE2F0F0CAE7E7B7E8E8B9E8E8B9 E8E8B9E7E8B8EEE8BBF9E8C1FFE8C3FFE7C5FFE1D1FFDBDBFFDBDCFFE0D3FDE6C6F2E8BDE9E8B9 E8E8B8E8E8B9E8E8B9E8E8B9EAE8BAF2E7BEF9EFCCFEFAE0FFFFF2FEFEFBFEFEFDFEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF8AE7D782E8D881E5D57EECDC85EFDF87E2D27A E5D67BE6D77CE2D378E3D476ECDC7BF3E17FECDD7BDECE6DDACC6ADFD070EFE183EEE088EFE28B EEE28EE9DD8CE5DA8BE4DB8FE5DC8FE4DB8DE3DB8AD8D07EE1D985E7DF8BE2DA84DDD67DE6DF86 ECE68CEFE58BEFE58CF1E78EF5EB92F4EB91EDE489F2E98DF4EB8EF8EF92F9F091F8EF90F8EF92 F9F196F7EE94F6EC93F0E691F1E694F5EA98F4E997FBF19CE9DF88E8DE86EFE68BF0E68EF5EB95 F0E691F1E790F7ED96F2E88FEEE58AECE388EDE489EEE589E8DF82EBE286EDE38CE9DC87EEDE87 F7E38AE0C66AF9DE84F8D87BF3D477F1D375F2D97CF1DB7DEAD678E6D77EEADD82EADD80EFE284 EDE086E2D382E6D78C342508AFA35CF6EAA0E8DD8BECE38AE3DC7FE8DE86F4EC9CEEE59FE4DBA3 D5CC9F908864453C231B14000700000200001200001A04021406050D06002E2E08BDBF7BF6F49E DAD37DC5B66E574909DED491F3EFA2F6F3A96A621CCCB869FDE78AF6DA7CCEB25BFFF9B1B2A36F 2A210D0600000D0300010000030000040100000000050700040600424439DCDFD1DEDFCC5C5E45 4A4929A9A984E7E0D7796E7F0601000A0905535721E5E99DDFE393E6E69DEFEAAE736638110003 978066633A0B91673253370F736545727151181D102C2F02E7E69FF5EFA0EEE391F2E696ECE192 E9DE8BE9E18DF2EB97EEE393F2E699F3E49AEDDE93F3E197F4E298F5E195F3DF93F1D98FF1D58E F7D993F2D58FF8D993F8D590FBD894FDD895FFDF9BFEE29FFFDC9AFFD895F6DA95F4E19AF6DF99 F1D894F4DC98E9D38BEEDD93DCCC7EE8D384FFE393CDA554BD9243EFDF8FDED787E4D88AF0D88E FFE4A0F8C1829556198B5114F3C887FDEDA9E6D78EE9E095ECE296ECE297E5DD8FE8E191E6E290 ECE796F5EA9AE2CA7FF1CB83CB9450BD7A39A5480CD47432FFDF8EECEA8DE3ED91F3F09CF1E193 F1DE93E8DE93E8E69AEEE9A1F1E09DE6E094E7E492EFE495F4E094FCE196FDE399E8C176C09B4F DDBC6BEACD7AFCE690E3D17CE7D98BECE293E3D889E9DE8FEFE495E1D686EDE292EEE595EFE796 F0E895E7DF8CD9D083D7D089E4DD97DBD48EDDD690E4DD97E7E09AEBE49EE1DA94D8D18BDFD892 EBE49EF9F2AEE4DD99E4DD96F5EEA6ECE69CEAE497ECE698E5DF94E3DD93E8E199DED791F3ECA7 C9C27DE3DC96D8D18ACBC57BDDD689DED787F0E999E8E090EBE293E9E093E7DB91E5DD90F0E797 ECE595F2EB9BF5EE9FE5DD92DAD289D5CD87C9C07EF4EBA9E9E1A0FDF7B9E8E7A3DED588D49744 F5AA51D99D4DFFF2C2AB99872D241C29260FA8AD7AFFFEBDEDDB93FBF0AADFD994FEFBB3C7C177 BDB76BF7F1A5EAE496FAF6A9E9E397FAF4ABD5CE86DFD78FEFE79EFCF7B0FFF8B7F7EFB3E6DEA8 F6EFB9F6F1BCF5F0B6F0F0AEECECA3DCDD8FEAE9A2E2DCA3EAE4A9E4DEA1E3DD9FDFDA9ACEC989 FCFBBDDCD69BDAD39CDED7A2F3EBBAE1D9A6E1DCA4DBD896E4E4A5E0DEADF4F0D429250C1F1D0E CECE8DEEEFA3EEEDA4FCFABDFDF9C0E6E1A9E5E0A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFBFEFEF3F8F8E7F5F5E2F6F5E0FBF6DAFBF3CCEEEAB9E3E3ABE3E3AC E3E3ACE3E3ACE2E3AAEBE3B3F8E3C1FFE3C9FFE4CBFFE4D9FFE5E5FFE5E5FFE4DAFDE4CAF0E3B8 E5E3ADE3E3ABE3E3ACE3E3ACE3E3ACE6E3ADF0E3B2F8E9BCFDF2CBFBF6D9F6F5E0F5F5E2F7F7E8 FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA FEFCF4FAEDEAFBF0F0FEFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FCF3F3FAEBEBFDF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E38DF2E18AF4E48DEADA82EDDC84E9DA80 E4D479ECDD82EFE083E6D77CE1D071D9C664D6C460E7D570F7E782F2E37DE3D572DED06FE1D478 E5D97FE8DD86E9DE8AEBE290EBE392E5DD8CE1D988E5DD8CDFD786E0D788E5DC8EE1D88ADED587 E6DD8FECE496EBE18CEAE087EDE38BF5EA91F8EE94F4EB90F8EF93FCF396F9F093F4EB8CF7EE8F FEF598F0E78CF2E88FF4EA91EEE48FEDE290F5EA98F7EB9AEFE590EDE38CFAF097FBF297F4EA92 F7ED98F0E691EDE38DF6EC95F9EF96F7ED93F0E78CF0E78BF3EA8DEFE689EEE589F6EC95F5E892 ECDC85EAD37BE0C469FFE78CEDCC6FEDCC6FFCE182F7DE81E3D070F3E285E2D380EEE08BF1E38A F2E48BF5E690F1E194F8E6A083742F615214F3E79FF4EC9CEDE38CE7DE7EE4DB7BECE386E6DE84 E2DB88ECE59AF6EFAEF4ECB8E1D8AFBDB6948D8469735C3630130B392613161006020400676C32 DCDD87F5EF96E3D38A4E3D04C2B97AE6E497F0EDA99C9253A89552FFE999E5C76ED8BE63F0DE8E EBE3A6211709746D4CDCD4B9A9A38177734E65623C4D4C2D0706000000003535277B7C704D4D42 0301000000001F1D0C746D6C71676F0904002B2A03C5C97CD6D989D9D993DCD9A0D9D2A21C120B 726631FFFBC2D1AC766B42143F22007262417B775721210F515010EAE499E6DC8FE7DB86EADD8B F5EA9BF2E795EFE794F6EE9BEDE293F0E497F0E498EFE196EFE297F2E297F1E195EFE095F0E196 F4E69BEADA8FEFDE93EAD88EE7D389F5E097EED990EDD78EF1D890EFD68EF2D991E6D98DE7E195 E9DE93E5D68FF0DE98F3E29AEFE196E7D78AEFD789F1CD7FBE8C40EABE72FCDF97F6E699E9DE8F F7E398EABF7C914F14823E0CDDAC6CF8DE96F0E399EBDD94F6EAA0ECEB9DE6E094EDE097FAEBA3 EDDF97E7E193E6E392F8EC9EFCE198FAC281A34E13BA5718FDCA84FAE192E9E38EEEF8A2E1E08F F2E497EBD98DE5DB8CE6E294ECE79FF0E5A1E5E799E2EA97E8E896EFE696F3DF92F5DA8DFDE298 F5D285C7A454C6A252ECCE7CFFE796EAD88AF7E597FAE99BEFDE90E9DB8CEEE192E9DE8EE8DC8C E8E08FEDE593EBE392E2DB8DD3CC85D3CC86D8D18BE8E19BE6E09AE3DD97E2DB95CDC781BEB771 C3BC76DDD791E5DE9AE5DE98EEE6A0F3EDA4EEE89CE9E395EFE99AEDE79AF4EDA4ECE59FD0C986 A9A161F2EAA9CFC885CFC883E9E29ADDD68CEBE396F1EA9CE7DF90EBE293EFE699EEE298EEE298 F2EA9BEFE798F0E898EAE393DBD485C9C176F3EBA2E9E09AEBE29EFAF2B0ECE2A1E2DF9CFFF9AF DEA355E29A42DEA451FFE9B8DFCBB6847568C8C29FF6F9C8ECECB0F1E5A2E6DE9EF6F1B1FAF3B1 EAE39EF0E9A1F1EBA0EAE498E8E295F6F0A3FAF4AAEBE49AEFE79EEDE59CF5EEA6F7F0ACFAF1B3 F2EBB2FFFBC4E8E4ADE4E2AAF9F7BDECEDADFBFCBADBD99CF4EDB8EFE8B1EFE9ADF8F3B3E7E29F E5E09FF6F1B0DCD69BF6EFB9DFD7A6CCC495D8D09DE9E5A7F0EFA9E5E5A3D8D6A6E5E2C66B674D 05020086864AFEFDBAF1EFAAEFE7B1F3EDBEF0E9BDFFF9CDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFEFEFEFCFFFEEEFBFAD8E9E9B5E1E1A5E2E0A4EFE0ADFCE4C2FCF1DEFAFBF1 FAFAF0FAFAF0FAFAF0FAFAF0FBFAF1FEFAF4FFFAF5FFFAF5FFFAF8FFFAFAFFFAFAFFFAF8FFFAF5 FCFAF2FAFAF0FAFAF0FAFAF0FAFAF0FAFAF0FBFAF0FCFBF2FEF2E1FDE5C5F1E0AFE3E1A4E1E1A4 E7E7B7F9F9EEFEFEFCFEFEFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD FFFDEDFCF0D7EEBFB7F1CBC9FBF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFBFBF4D5D4EDB9B9F9E5E5FEFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E189ECDB82F1E086E9D87EEBDA7F E6D679DFCE72E4D375ECDB7DEFDF81F3E180F5E17BE3CE68DFCC64E5D46CE8D870EBDC76F0E37D EBDE7DE6DA7CE7DC82EAE089E6DD88E6DE8AE7DF8BE5DD8BE5DD8CDDD485EAE194EEE599E9E095 E6DC93ECE29BF1E89EE6DB89E5DB84E9DF89F1E78FF2E88FEEE48AF4EB91F7EE92F1E88BE9E083 EFE689FAF194F2E98EF4EA91F5EB93F0E691F0E593F4E997EEE391F4EA95F0E68FE7DD84EFE68B F6EC95F5EA98F9EF9BF6ED97F6EC96F1E78FF4EA90EEE58AE8DF82F0E789F4EB8CF1E88AEBE28A F6E994F1E089E0C770DFC268F9D97FC8A549E5C568E3C869D5BE60E0CF6FEDDF81E5D886EFE18E F2E48CF2E18AF4E38EF5E497F9E9A3D0C17D2D1F00D4CA82EDE69AE8E08DE6DA7DE8DC7DECE285 E7DD82E4D982E4DB87EBE392ECE498E2DA92EEE7A2FFFAB7CCB073AD8750F2DEB38078590E1200 3A3F16C8C977F0E88FF5E49E786631827A3CEFF1A3DFDEA3CFC5956A5625FFE8AADFC273E9D074 FBE990F2E59F7C733BBBB482F1EBB0EFECACF4F0B9FFFECBE3E0B14B471E49462E37341C000000 1A17092F2B1D3E3B2C1A170B080300261F09807B4D676521D7D58AF9F6B3F4EDBDEBE0BD55492F 342A0AEBE598EAE383FFE8A4A7825B371B00352605B4AB8A1C130F807836FFF3A6EADA8EF3E68D EAE08BEFE597F3E898EEE293F3E899EADF90EFE396EFE497EFE397EFE399F0E399EEE198EDE098 EAE195EEE799DED688CEC577E2DA8CE8DF92E7DE91E9DE92EADF93EEE296EADF92EBDE92E5E192 E9EA98EBE797E5DB8FEFE198FBEDA5F0E297EBDA8EFAE298EFC87DAB772DF3C47DFFDB9AF3D18D FEE9A1E1C67D84541486460DE3A767FFDF98ECE092F2F0A0E8DC92E3D58CE6E99CE5E196DDD088 DECA85DBCB86E6DD94E7E396E9DE91FCDF96CB8F4D994107BD6423EFBE73FCDD90F2E69AEAEB9F DDDB91E8DF94E6D78BE4D889E8DD92EBE39CEFE8A5E2E799DFE895E3E895EAE896EEE495F0DE90 EED78AFDE496FAE394E0BF71B69446DDBE71FFE898FDE494F3D989F7E191FBE796ECDC8BF5E799 ECE192EBE393ECE495E8E192E3DC91D6D28BDDD992E4E099E1DD96DFDB94DEDB94D8D48DDAD68F D9D58ECDCA83D9D58EE7E19DECE59FEFE8A1ECE69CEBE597E9E493DDD789DED98BEBE49BEBE4A0 F0E8A9BEB578AEA666C4BC7DCEC684F1EAA4E3DC94EEE69DFCF4A7F3EB9EF1E89CF0E79CEDE29A EEE299DDD588E6DD8FEDE495EEE596EBE293D8CF81F0E79ADCD389B2A861F7EEAAEEE3A3F6F2AC F4E79FEBB06CD99645DBA952FFFECB8F795E15000046381D9C9964BEBE88FBF7BEEDE8AEECE7AE EBE5A9F2EDADE3DE99E8E199EDE79CE8E194FFFAACF7F0A3F8F0A5F4EBA1F2EAA1F4ECA3F5ECA5 F7EFADF3EDAEFBF7BBE6E3ACDAD8A3E8E7B5F4F4C3F9F8C8EDEAB9E2DAA8E9E2ACF2ECB0DCD797 EAE5A2F7F2AED9D492B2AC6FE8E1ABF4ECBCC8BF93EBE3B0E3DF9FECEAA2EDEDAAF5F3C3FEFAE0 DBD6BF1F1C0A504F29F3F1B0F1EEB0F0E8B9E5DEBBFBF5D7CEC9AAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFCFFFFF2FAFAE2F0F0CEF6EEC9FCEDC8F2EDC8EDECC6EDECC7F5ECCEFEEFDDFFF8F1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F3FEF0E0F7ECD0EEECC6 ECECBBEDEDB9EDEDC6EDEDC9EFEFD0F9F9ECFEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFBFAF6D6CCECA696E2726DEA9393FAD7D7FFFBFBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFBFBFEEAEAEFA6A6E27070E99797F3C8C8FCF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDE83F5E488FEEE91ECDC7F E2D273F1E182E4D475DBCB6BDECE6DE2D272E2D06BDDC75FE1CC63EDDB6FEDDC70E7D66CE4D66C E5D870ECE07DEFE484EEE387EFE68CE7DF89E8E08FECE493ECE493EEE695EAE291EEE695EEE695 E6DE8EE2DA89E7DF8EE7DF8EEBE18CEDE38EF4EA93FCF29BF9EF98F0E68DF8EE95F7ED94F6ED92 F6ED91F9F094FCF398FDF499FBF198F8EE96F2E893F2E795FBF09EF9EE9CF1E792F7ED96F7ED95 EFE68BEAE08AEFE492F9EE9CF8EE9AF5EB97EEE48DEEE58AE8DF84E2D97CEDE485F7EE8FF2EA8A EBE189FDF19BFEEC95E9D079EFD47AF5D97FC9A449EBC96DDBBF61CEBA5BE7D877E3D678ECE189 E9DC85EBDE82F0E184F1E189F0DF8DF5E59CF7EAA54A3F00908B43ECEA9FE3DD89E4D77AEFE285 F5E790F1E290ECDC8EE7DA8CE2D685D9CF7AE1D87DE7DF7EFFFB99C2A049B07F3AFFE3A8BEB590 0508007B7E51DADA8BEFE68DF9E6A1C0AF7C4D470FE3EA96E9EBAAEBE4B368582BCCB07AE3C77C E1C76BEFDD80FDF1A5A2995E776E32EBE699DED986E2DC96EEE9A8E9E3A6868047F2EEBAF4F2C3 B8B489DBD8B095916DBFBC97C3C19CC2BD92F4EBB4FEFEC3B3AB66ADA462FFF4BED1C49E3F3011 281A0BC3B97CF9F49CE7E279FFEBA3CAAC862109003B2B098273541503009C8A47FFF4A7DFCB80 E5D77BEBE28AE4DD8FF3E599EBDC90F0E297EBDD92F1E49AF2E49BF3E79DF3E79FF2E69EEEE49D EDE39CEAE198ECE397D7CE81BCB266E3D98CF3EA9DECE396EAE194EBE496EEE799E8E193E7DE91 E5E18FEAE895EFE797E8DC8DEADA8FF1E297F0E297EDDE93FFEDA1D7B469A5762EFDC783F2BB80 FFE9AEDEB574885E197E4F0CD3A25CFEE69DE5CF82EFE898E3E091E9DE94EEE59AD9D88DDDDB91 D0C880C9BE7AD0C681EAE099F4E6A0F5DB93ECCA8581430BB56427E8A65EB28938D3B067F8E09F EDDFA1EAE3A3E2DF96E2DB8DE7D889EDDE92EAE09AEAE5A1E5E69BE6E797DFE090D1D080CDC978 D6CF7EDFD587E5D788F8E799E7D084E2C97CBDA052BD9C4AF6D684FFEE9CF6D987EFD585FBE698 F8E89AF3E697F6EDA0EEE89BDDD78BD3D086D4D088E1DD96E6E29BD6D28BCECA83CBC780C9C57E DBD790E4E099D9D58ED9D58EE3DD98CBC47ECBC57DE8E296EAE496E6E190E5E08FD8D284E3DC92 F5EDABF3EAAD81783C231A04CAC185C0B87BCDC583FFFAB6E6DE96E7DF96ECE39AF0E69EE9DF97 EBDE98F5E9A1D8CF85E1D88DE6DD8FE7DE8FEDE594E0D887E3DA8AEDE495D0C67BF8EEA7F0E69F EFE9A0FCEBA5F7CF95BD8434542D02AF9B63C5AC8A65461F563D01190F000B0A014B4B1ECCC898 F8F3C3F6F4BFC5BF85E2DB9CEBE39EE3DC94FDF7AAF3EC9EF0E79AEAE193E7DE91F7EFA7F0E89F EAE299E7E099EFE9A5FCF8B9ABA96EC8C593F4F2CADEDCBB9D9C7FC8C4A2FFFCCFFBF4C0ECE5AC ECE7A6E2DD99E4E098EDE8A5D2CC8FC9C38CCFC799A1986EF0E8B4E9E5A5EEEDA2F5F6B2E9E7B7 E9E5CBFFFFEC5E5B44474621FEFEC9EBE6B0F8F6D0FFFDF1AAA19B181110FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFBFDFDF7FCFBEFFDFADFF6F3C8E6E4ACF0E1B2FEE5C6FEF5EAFDFDF8FDFDFAFEFDFAFFFDFC FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFCFEFDFB FDFDF6FDFDE6F7F7CEE6E6ADE1E1A3E3E3ABF1F1D5FAFAEFFBFBF4FCFCF7FFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDF7F7EDA9A8DD5655D72F30E36161F5B5B5FEEBEBFFFCFCFFFFFFFEFEFEFCFBFBFCF8F8 FDF6F6FEFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFDF6F6FDF7F7FFFAFAFFFDFDFFFFFF FFFEFEFEF1F1FACCCCE97879D83334DA4646E89090F9E3E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D276DACB6BEBDC7C EDDE7EF1E180E9D978EBDB7BEADB78EEDE7CF0E07EEDDA73E0C95FCEB94DE0CB5DEFDC6DEDDD6D E9DB6EE2D56BD6CB64CDC25FD5CB6BEBE185EAE28DE8DF91E7DE8FE4DC8BEAE290EFE793EFE791 EDE68EE6DF84E4DD82EAE486E9E386E9DF8AECE28EF4EA95FCF29DFBF19BF4EA93FAF099FAF097 FBF198FBF198FBF297FBF297FCF398FAF096F8EE95F0E691EFE491F4E997F6EB99FBF19CF7ED96 F4EA91F6ED91F4E993F0E596F0E593EEE390F5EB96F5EB93F1E68EEDE489E7DE80EEE586F9F190 F2EA89F2E890F8EC96F2E08AE5CC75FDE187FEE086F5D277F9D77AFADE80F1DE7FE8DA79EDE07F ECE186E5D97CE8DC7BF0E280F2E385F5E58FF1E295FFFAB4877F404A481BEAEC9FE5E090E7D888 F2E291F4E48FEDDE85E7D97EECDF80F0E586E2D576EEE184E8DA7FF7E68EBC9239E8B35DFFEAA1 E2D6AC101103292E089E9C51FCF09AF0DC99EFDFAE625C1EC7D277D8E18FE4E2A0AB9D6680682B E1C676EDD574F9E78AF9E9A2E8DCA66F642EDDD689F7F09AEEE798E0D88DF5EEA49A924BB5AD69 F1EAA9E4DE9FF9F5B8939055939257E2E0A8EAE5A8DFD492E1D593B4A8698E7F45FFF0BF6E5C31 54451FC7B782FFF5B2E0DA84E1DB7CEBDB98A7926D0B0000847453614E300F0000BEA55FFFF0A0 F0D78DE0D172EAE489E9E394F6E79DEEDC94F4E499F0E096F4E69CF2E49BF5E89FF4E8A0F4E8A0 F0E69FEEE4A0EEE09AEDDC92EEDB91FBECA2FAEBA1E5D68BEDE094F0E397E8DD91E8DE91EAE094 F3EA9DEFE795F0E592F5E695F2DF91EEDC90F0E095F0E499F5E79CFFF1A6A3863CB18C45FFE5A2 FFCF97CF8D587D3C05915519E1B671FFEC9FF7EC9AE1D785EDE594E7DE91F3ECA0E3DC91D6CD84 D8D38ADBDB91E6E69FDFDD96EADD99ECCF8DFFE1A2C58C4C854503C98743FFE697D7C26CAC8B46 D1AC75F6DBA8ECE3A8E6E6A0DDDA8BE5D687F3E095EDDF98E1DE9AE8E097EDE295E2DC8ECFCB7C C9CA79D5D986D2D482CCCB7AE5E191D1C879EBDF92F6DF93D1AB59AF8733D4AF5CFEDE8CFBDE8D F4DD8DEAD88AE8DA8FF3EAA0EDE69CDBD68DD7D38BD9D58EDBD790E2DE97E5E29BD8D48DCCC982 CECA83C8C57EC4C079CFCB84E0DC95E9E39ECBC47ECBC47DEEE89CEAE593DDD886C5C06EDDD78A EDE69CDCD493E0D79AAAA1684A4011AEA56E4B420B413904DCD592F8EFAAEAE29AF1E89FF3E9A2 E7DE97E3D791EADD98E2D790E6DB94EAE095EBE193EEE594E0D786DFD785F4EA9BEEE597E9DF95 EFE59CEBE097FDF4B0D69E6BB280364427033E2E1AC8AC82B38B57FFF7A9D2C3898E8D663C422C 0D0B003F38139E986CC1BA85E8E1A7E4DD9BDCD58DF5EDA3EFE89AF2E899EEE596EFE699F7EDA6 AFA75FB2AA60E9E497F2EEA3D1CE88A2A164D0CF9E9895721E1C0A0000002C2514AFA77EF7F0BD E4DDA4FAF5B4E8E39EE9E59DD5D08BD0CA8DE8E0ADFAF1C4CFC69CDDD5A1EBE8A3E5E498F3F4AE F4F2C0FEFCE4DDD8C6161201787651F8F4BEF7F4C5EAE2C16B655716130A3D3A2BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFF9FEFEE8F0F1C9ECE6B6F7E5BAFCE9C7F5F1D7F9F3E1FFF5EAFFFCFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFF9FDFDEFF5F5DFF3F3DBF2F2D6EAEAC1E5E5B2E6E6B5EFEFD1FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDF5F5EA9292D83335D83839DE5656E68181F3C3C3FEF8F8FFFFFFF9FBFBEAF0F0 EBDBDAF0CECEFBEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F9F2D1D1F6D5D4FEE8E8FFF7F7 FFFFFFFEFCFCF8DADAE99191E06262D94040D62B2CE47373F8DADAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D97ADDCD6D EADA7AE4D473E1D16FE0D06DE1D26DDBCC67E0D16CEBDD76EBD971E4CF64E6D064F1DD71EAD76B E6D669E3D568DBCF64EBE077EBE17DE0D676D8CF73D9CE7DE6DD92F0E79AEFE697EBE391E2DB86 E8E289E7E184E2DC7CE4DE7CEDE884EEE885F2E891EFE492EFE492F6EC96F8EE99F3E993F9EF99 FDF39EFAEF99F0E68EF2E890FBF199F0E88CF6ED93FCF299F3E994EBE18DF0E593F9EE9CF8ED9A E8DF89F0E890F8F197F6ED96FAEF9CF4EA96F1E792F4EA94EDE38BEDE38AF2E98EEDE486EEE587 F5EC8DEBE284EBE188E8D983E5D27BE3C971FFE68CFDDB81FFDF85FFE185EDD375E0CD6DEBDE7D F1E785EEE282E8DC7AE9DC78E6D874E8D978F3E58ADCD07EEEE69BC3BD791F1F00BEC078E8E39D EBD997F3E198EDDD86E8DB76E8DC6EE6DC6BF1E679E8DB79ECDD88ECD992F4DA9EA8792AF3BF62 FFED9AF1E4B23B381E181804676522FCF2A1E7D592FFF4C26E6A2EA0AA54C8D371DFE189DDD28B 6C5712BFA554FAE487F4E28BEDDF9EEBDFB07B6F3FB9AF6BE4DC8AEDE594DED685F0E897BCB365 786F23E7DE93E9E198E0DB91CCC9807C7930E8E79ECFC982D7CA86E6D799D5C48C9F8E58EEDCA5 D0C086E9DC9AF2E4A0EEE29AE7DC92DED48CFFF3BB827350281906E2D4ADB5A081230500694B0F CAAB5DFFEFA7FAED92F3E58DEEE397E9DC93E5D68FF2E49CEFE399F6EBA0F3E89EF5E8A1F3E7A0 F4E6A1F0E39EEEE19EF3E09CFDE69EF2DB92EDD88FF1DC93E7D38AEAD78DE8D78CE8D98EEFE095 F2E599FBEDA1FBEE9FF7E997F3E595F1DE91EDDB90EEDD94EDDD96F1E097FFF0A79D7D37D3B46F FFE2A0B68045803F09BC723BF5C184FFE49EF1E594E5E68EEAE994DED485E5D88DD3CF82D8D588 D4C57FDFD890DBE097DCE59DDEE19CEEE39FFAEAACFFC78EA35A20A76425F8C980F4E08DF8F09C CCAD6A976D39E4C291F8E9AFE2E099D8D485E0D082F7E297EDE09ADAD995EEE19BF2E097E6DB90 DBD488D3D385D6DB89DBE18FDBE190C1C575D0D082E8E598EDE092EDCB78DCB561A88331BC9948 FBDB8DFBE699E9D286E1D086ECE299EAE39AE1DD96E0E098DFDE98E7E69FDAD992DFDC95E0DD96 DCD791E2DD97D3CE87C3C079DAD68FE2DF98E3DE96D8D189CCC57CD5CE83DDD68AD8D283D1CB7E E9E297E5DE96CEC783E7DFA1E0D69CB8AF78D8CF98A39A646C6331B5AD6CDFD692EBE29CE7DD97 EAE099E5DA97D7CC89D3C584E3D592E7DA94F0E49AF2E699EEE294D8CD7CF0E596F7EB9DF7EB9F E3D78EF2E59DF9ECA4E6CF8EB28151C499589F85362312006B4D23C09860F9D989FBECB1F3F5CC EFF7D1C5C29D756E4C3029008C8550ECE6ADF3EAAED8D18EC0B76EECE596E3DB8BEEE495E8DE94 F2E9A4DAD18AE3DB90F1EA9FF0EDA1DFDD96E6E6AAADAD800806000401000000000801001F1703 B8B184FCFAC4E4E09EE2DF99D2CE89D5D190E9E4ACF2EDBC7872442017089C9661FEFEB9E3E19B FDFDC0F2F0C4A5A2862E2A230F0C02B5B289FEFDD3E8E2B94841310000003E411AE5E5BDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC FFF6EEFBF4DBF4F3C8EBECBBECE7BAF7E7C6FFEEDBFEFBF6FEFEFDFFFEFDFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFEFEFCFEFEFDFCFCF5EFEFD0E7E7B4E6E6ADE9EAB7EFF1CF F8F9E5FFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDEBEBE98484D82C2DDC5757DD5D5DDD5B5CEDA2A3FEF5F5FFFFFFF6E9E9 E0B1B2DE9192E48787EEB1B1F7DADAFDF6F6FFFFFFFEFCFCF9E4E4F2C0C0E68C8CEA9494F4B6B6 FCE3E3FFFFFFFEFCFCF3C7C7DF6262DD5C5CDD6060D72B2BE4696AF8D8D8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9D97A F0E080F5E585E9D978DDCD6BE3D46FDDCE69E5D66FF9EB83D6C85FDCCE65D6C45EE3D16FEDDA7C F6E587F8E889FCF08DF1E57FECE07CEFE385F2E690EEE291E8DD90E2D68AEADE92E3D78BEBE091 E7DC8DE6DB8BE6DB8BE3D786E8DC8BF2E795ECE18FF1E996F3EB98F0E895EAE28FEEE693FBF3A0 EEE693F2EA98F6EE9DF9F2A1F7F09FF3E994F4E98FFCF197F3E88FEFE38BF6EB94F8EF9AF5ED9A EEE695ECE594F8F1A0F9F2A1EBE48EE9DE84F1E68BF7EC91FEF399F6ED92EFE58CF3E990EFE88E EDE68CF2EB93F5EC94F2E288FBE68AD8C164EFD67AEBD276F0D77BF1DA7DEBD879E9D97BEDE080 EBE281E7DD7CF5E589F5E387F2E187EDDC82E9DA7FEBDD84E8DD84DCD37FEBE4963F3916746E3A F0E7A7EADA8FEBDB86F9E88CF7E884F9EC87E2DA76D6D071E6DC86DBCC7DFBE199EFD7909E7929 F9D77EF2D985FFF5B57A6F452A2316736D3EC0BC7BF4EFA3F6EFA89590536C662BE6E992E7E48F F3E4A49D864E937A40FDEFACF5E6A2F2EAA8EFEAAB9A94549D964DEEE596EAE393EDE697D8CF85 ECE49B746B26DBD290EDE4A1F9F0ADDAD38D79722BE6DF97D4CC81D9CF87EAE09BE1D497A4955A E2D497D9CC88E8DE96EADF94E9DF96E3D993ECE1A4E5DCB6403D1E504C29F4EEB7B6A882281000 876B38694704AE8741FFD38EFFDC99FFDD97EDE89CD1D585BABD6EE1E294EEED9FF3F0A3EFE89C F3E69DECDA94F4DF9AFAE19EEFD791F1DD94F8E49BF3E097F0DE94EFDD93EAD88EEDDB91F5E399 F5E399EFDF94F2E196ECE799DCE18FDADF90E9EB9FEDE8A0E4D591F1D494FFDA9EFFE2AAA5692D DB995C9C5C1F6B4102C6A15BFEE59FFAD890E5CE82F3E598EAE393E2DC8DDED88AD4D185CACB7D CECB7EDDCE82D4C780E4DB99F0E8AABDC17FDEDF9AFBE9A4D48650A94211D98850EEE896D0D784 E8DC94F7E19FCDB272A38545D5BE79F4E199ECDC91DCCF86E5DC94E6E4A0D8DB97D9D68FE4DD95 F4EDA5D9D58BDDD98FDCD88CD9D689D6D385D0CD7ED5D283DDDA8BE0D989C9BE69EADA85F0DA8A DABE70C2A058F9D78FF6D690EBD28CECDA95EBE39AE3E197DCE198D7DE9AD4DA94DEDE99E8E29C EFE49FF2E49EEEDF9AF1E49FF2E9A4E5DE9ADDD893DAD686E1DA86E7DD90E4D696E7D79CEFDEA7 EADAA0E8D99AE7DB97E3DA97DFD996E0DB99DCD493DFD597E0D699ECE2A7C6BC7FE5DC9BEDE49E E0D890E3DA95EAE1A1E5DBA2E0D49CDFD491E4DA95E2D893DDD38EE3D994DDD38FE3D895EADF9D EFE4A4EFE4A6EBE0A2EDDEA2F9E5ACDEBC8AB48E5AD9B581614223210600897346EFE5ABDEDD9D E2EAA5EDF8AEF4EFB9FFF9C5E4DC98F3ECA6DED598EBE0AFC9BF8CB5AE6AE2DC8AE0DC85D9D387 F1E9A9F5EFB5EDE59EEFE699F7E9ABFBF0B3FEFABFFBFACD58583E0D0F07999A6E9190652D2712 010000ADA98BFCFACACFD08FBEC17ECECF95DBDAADDEDCB74A492D0405003B3B18DEDD94DFDC96 FCF5CFA49D8A373224000000040900555A2FFAFADDB9B7A03A382A191801B4B289E0E0B4D8D9AD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC FEF9F1FFE9D2F4E4BAE9E5AEEEEFC9F8F6E5FDF7EEFFFAF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFAF1F8F8E2F6F6D0EBEDB1 DEE298EDEFBAFFFDE5FFFEF6FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFFFDFCFCFDF5F5FCD9D9E97879D92F30E17878DF6B6BDB4646E98C8DFCF1F1FDFBFB F4CDCDDD5E5FD84041DB4344DF6060E99B9BF6DFDFFEFFFFFBEFEFEEB0B0E16D6EDA4949DC5152 E37676F0C1C1FAF7F7FDF8F8F2B9B9DC4445DF5F5FE38382D93535E36767F7D3D3FEFFFFFCFCFC FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFFCFCFFFBFBFFFAFAFFFAFAFFFAFAFFFBFBFFFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DBCB6BE4D474EDDD7CEBDB79E5D573DFD06BE3D46DDACB63DCCE65D2C459F1E37AF9EA86EFDF80 EDDC83ECDB84D4C56BD0C264D5C965DACE6DDED275E7DB86F3E699EEE196E6DA8EF0E498E5D98D E4D88CDFD387EBDF93E4D88CECDF94F4E79CEBDF93F1E698ECE493EDE592EEE693F1E996F2EA97 F0E896FCF4A2F8F09EF0E897ECE393EDE595F3E895F2E68CF6EB90EEE389ECE187F6EB94F9F099 EEE693EEE796F2EC9CECE798EFE99BF3EB97EFE587F2E78BF3E88CF9EE93F4EB90EDE389EDE38A EAE28AE7DE89ECE48FEEE590F5E186EED476D8BE60FFEA8EEFD77AF3DD80ECDA7CEADB7CECDE7F ECE282EFE686F1E889F8E68AF2DD86F0DB86F1E08CF4E48EF3E58CE7DE81E8DE86F0E898887E43 281D00D2C78BEFE291E8D881FBEA8DEBDB7AF1E483EBE387D9D37DF1E898F3E094FFE89DE4BF71 B18F3EFCE68EEDD882FAE8A0AF9F6B3A30106D653F98965CE1E092E7E493D3CD8C5B501DEAE699 E1DC8CF5E7A8BCA4716D5422F8E5ACEBE2A0E4DE9BEAE7A1D2CD86837B32EAE195E6DF90E0D98D EEE69DEEE6A079702FA3995AEEE4A7DFD695DFD592645B17CFC77EE3DA8FDDD488E2D891DFD594 9B9051CCC280E9E099F1E89BE4DB8EE1D78EE0D691EAE0A5DBD5B51917007C7C48FFFFC8A5996F 362307F0D9ABC6A666734B067F4D11D1A365F4D492FAE79EF1E59BEDDF96F8E9A0EEDD95F5E39B F4E29AE7D88FECDD94EBDF95E9DF94EBE196E5D88DECDF94EBDE93EBDD92E5D88DDDD085E2D58A F1E499F5E89DF0E398ECDF94ECE299EEEAA0ECE9A0E4E29AEBE29DF7E0A2FEDAA0FFE4AEE7A772 944E188D480FA36628DCB972DCC57AF6E69AFBE99CDECE81DACD7FE7DB8FDFD98CE0DC8EDBDA8C D8D98ADDDA8BDED182E9DA94DACC8CD9CD91C4C484E5E49FD2BA75A14F18B54A1AFDB87FDCE391 D0DF8ED9CC86EBDA95EFDA94BBA15AB1964CE1C67DF4DD95E2D38BD7CE87D6D48EDBDC97D1D28C CECC85D0CF87C5C179D9D58CEBE59CD7D086D4CC81CCC579CFC87BD7D183D5D281C8C572D0C876 EBDC8CEFD78CDABC74A3823BBF9E59F2D791EFDC94D5CA81CCC87DCCCD85D4D994D4D794E2E09C E3DD96E7DA94E8D993E4D48EECDE99EDE39FE2DB98DFDA96E6E193E6E08DE3D98FE8D99AF1DFA4 EBDA9DEDDC9DD9CB87D9CF88E1DA94D0CB8BC4C081CCC679ECE696F3ECA0DED78DE1DA8EEDE796 ECE790D9D47CD9D37FEAE397F9F1AEF1E7ACEBE4A7F1E7A8E2D799E5DB9BDFD595DACF8EE9DE9D E4DA97E4DA98F2E8A6F2E8A6EFDDA1FFE9B3E4C68E875A1FDFB073DFB67B5C381269541AADA368 D8D494DAD992ECEAA0F3E9ADE9DDA0FFF8ABE1DA8CE5DC9AEEE3AFD9CF99D4CC89E3DE8AD2CE76 CBC77AF3EEADF1ECB2EDE69CEEE393EADAA0E7DA9EE9E4AAF6F5CD2B2B1B2B2D17F5F7C3F0EEB5 D0CAA61C15136F6B4DE1E2AECBCD8CCDD292CACC9BD3D2B185846D030300707149E7EBB4E7EAA0 F8F5B3D3CDB21F1615000000282913656B3AE9EDC693957D0907002E2D21B5B491FFFFD3EEECB3 E2E0A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE F7F6E5F2EECDFCEAC5F6E9C0EDEBC3F5F6E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF0 F4F6CFE5E7AAF0E9B5FFEFCCFFEFDAFFF6EDFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF8F8F8E8E7E7E5D6D6F1BCBCE56A6ADA3334EB9595E77E7DDC3F40E17C7DEFE2E2 F3E2E1EDA9A8DA2F30D82E2EDB4647D93838D96666DEBBBBE9EBEAF1CCCCE47C7CD43A3BC95051 CD4748D44647D18E8EDAD4D4F0E5E5F4ADAEDC3738E46B6BEDA2A1DC4041E05B5BEEB5B5EAE0DF E4E3E2F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFFF4F4FFE2E2FFD2D2FFCECEFFCECEFFD0D0FFDADAFFEEEEFFFAFAFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF9F9FFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEBDB7BE6D677E3D370DFCF6DD9C967D9CA65D9CA64D8C962E0D369CBBE54C9BA53D8C865 F0E081F6E58AEDDC84DFD075DCCE6FD5C965E7DA79EEE285EDE18BEDE093E5D88DDED287EDE195 EADE92EFE397E7DB8FEBDF93E4D88DEEE296F0E498E4D88CF1E597E9E190EBE390EEE693F1E996 EEE693E8E08DF5ED9AF1E994F4EC97F5ED99F2EA97F4EA94F3E78CF5EA90F0E58BEFE48BF5EB94 FBF19CEFE794E5DE8DF1EB9AF6F1A0EDE799EDE590F4E98DEFE488EBE085ECE187EAE286EEE48A F3E990F0E68FECE28DEDE38EEBE08AEED77BFADD7FE2C768F3DA7DE5CC6FEDD87BECD87AEEDC80 EBDC81E7DB7EE6DB81ECE084ECDA7EE8D47CE2D07AE8D682F0E18BF1E38BEDE288E8DD86EBE394 E2DC96281D049F9454F4EA9DEADA87F0E086DCCD6EE1D574E5DD81D6CF78E9DE8EF1DC8FFFE194 CFA657D0AC59FFEE94ECD87FEBD98EE3D49B3127019790688F8C52E0DE8FE7E493F3EEAB9A905B D7D48BE5E094E2D593E5CF965B430AF3DFA2F1E6A1E5E098E1DF96E2DD966F6721D5CC84F4ECA0 DBD38AEFE69EEFE6A1A89F5C776E2EEAE0A2DBD291F5ECAA6C631EBAB16BEAE296D4CB7CDED48B F0E5A2A69B59B0A663E8DF96EAE193E9E091E6DD92E4DA94ECE2A6CFC9A61A1700A3A35DEEEBAB 9F956B3C2A0DF2DCABFFE9A7E2C177A37A3A7646078F5E1CC08F4FFEDA9CFFE8ABFFDB9DFFD596 F8D291F5D995EBD890F4EA9FEFEEA0E1E897E2E495E0D88DE3D88EE2D98EE5DC91DFD489DCD388 E3DB90E5DA90E3D98EE4DB90EDE196F3DB97FDDC9CFADD9DFBE5A5FFF2B2FFE4A7E8BD84AE7941 83491283490ED39D5DFAE29FFEE298D6C377E3CF83FFEEA1F7E89AEBDE90E2D68BE0D78AE5DE90 E5E091E3E091E8E493F8EE9EFAECA4EADD9DEDE4A6E7E1A2EDDD9CB2874992430BDF8C55FFD292 D0D183DFE899E4DA92D9CB84EDDC93F7E197BFA65CAF954BECD48AFCEAA2E5D790E1D690DBD690 E9E7A1E2E29CDBDB93D5D28BDFDC94E9E59BD3CC84DDD78CE3DD91E6E093E2DC90D9D384D5CE7D DFD887E1D485DECB7EFAE298E0C67DB69C53B59E54C2AF63D9CA7EE2D689DED68DDAD490D2CB88 E0D892E0D890E0D68EEEE39CF1E69FE8DF9AE5DC9AE5DD9CE7E2A2E3DD97E3DC94E2D995E7DD99 F3E69FECE093E9DE8BE3DA87E0D98AE4DF9CE1DCA4D4CF99D4D181FFFFABEDE991ECE792DCD97D DDDA79D3D16BBCBB55DEDB7BE5E18CEEE79DFAF2B2D5CC94D7CD94EAE0A4E8DEA0F4EBAAF5EDA8 EDE59DE7DF95ECE598E7E090EAE293FDF0AEFFE5AEF2C788915B12E9AF5EF7D481A57A27B79B4E B6A15EE4D598FFEFB9F3DFA7837737E3DB93E8E095EBE399F3ECA5DAD292F2EAA8F6EFA8E7E193 F1EC99F2EE9EEBE79DE7E1A2E5DF8FEDE38EF4E4A4F5E8AAF7F0B3E9E7BA242313282915DFE1A7 D9D49CE4DEB3312D263F3E11B2B478A6A866CACE93AAAB7FFAF9DD4B4839100E004D4D2BA3A577 EFEEB2FFFAC2ECE8CC4E4739100E04AAAB86FAFDD5C4C7A50B0D02403F2DDCDCC1FDFDD4E9E8A6 EEECA3E8E79EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFCFDFEF7 F7F8E8ECECC2E7E6ACF9F7D0FDFCE6FDFDF4FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFFFFDFEFEFAFCFAF0FDEDD7FFE1C0FFDEBBFDE9D0FCF7ECFDFEFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2D6D4D4CEBBBAE4A4A3E06161DC3E3EF4AEAFEF9595DE4B4BD97677 E0C5C5E4B1B0E37D7CDA3B3CE06262E58E8DDF5353D15354C68C8CCEABABE29191DE5D5DD34445 C59595CB7777D14445B76363B89E9EDFBBBBF29A9ADD3D3EEB7F80F7BDBDE15152DF5455E59797 D8BDBCCFCCCBE9EAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFFF1F1FFE0E0FFC4C4FFABABFFA5A5FFA5A5FFA7A7FFB7B7FFD5D5FFE7E7FFF5F4FFFDFDFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDF7F7FBEBEBFBD0D0FBD5D5FBEBEBFDFBFBFFFEFEFDFDFDFAFAFAF8F8F8FBFBFBFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEFDF7EE6D674E5D573E8D874E3D46FE9DA75E3D46EE1D26BEFE079E5D66FD5C65F DDCD6ACDBD5DCDBC61DECD74E1D277E9DB7BEADE7BE7DB78E8DD7FEFE38CF7EA9DF5E99CEADF90 F1E696EEE393F2E797E0D586EADF90F3E999F2E798E9DE8FEDE292F3E899EFE796F4EC9CF5ED9C EEE693EBE38FEEE691F8F19BECE58CF2EB92F7F096EEE88DEAE187F1E68CF4E990F5EA91F0E68D EFE58EF0E692F1E996FDF6A4F4ED9CEEE797F4ED9DF6ED97F1E68BEDE288EADF85EADF85EFE48B F0E58CF4E990F5E993F3E791F4E892F0E38DF3DB7FEDCF6EF3D677FBE184EBD275F1DC7FF0DB80 F2DF86F1E188ECDC86EADB84ECDE85F0DE84F6E48BEDDB85E9D884F3E48FFAEC94F4E98FE4DA80 E0D886FFF8B273692A3A300CCFC77EE5DA8BE1D47FE9DB7FEEE486E6DE82E0D983EBDE8CF4DD8E FFDD8FC39747D9B45FF7DF85F0DC80EBDD8BF9F6B63E34187A734C8A884EC9C878E8E693DFD892 978C548B8345FAF1AEE8D794EFDA98624B0ED4C07FFDF1AAE5E096E4E297E9E49C9F95549D9251 F8F0A6E3DB92E0D88FEBE29DD6CD8A675E1CE3DA99E6DD9CF0E7A57C732E978E49E9E295D5CD7B E0D78AF4EAA4B8AE69A09650E6DD91E6DD8EEFE697E7DE92E5DB94F6EBAE9389641A1504BEBE74 ECE8A8ABA2773C2E10C5B481F8E6A0F1D98BE6C582D9B471A06D2B7E2F00954311CE8750F8CD92 FBECACFFE3A0FEE8A2F4E29BE9D790EDDB93EAD790E0CC86ECDA94EAD792E8D691EEDC96EDD995 EFDD98F5E39EEDDA95E5D28DE7D58FF0DB97FED495FFD398FED297EEC185C69C5F91652C78470D 79450C7F4D11BF9251FFF3ADFEE49DF3DD94FEEDA3F6E69BE6D78CEADC91F4E69BEBE191E9E091 EDE495ECE595E8E090EBE493EEE696E4D98FE8DB98ECE3A3F9EBAEF2CF94AA6A32A1551BFFC98A EDD38ADDDB8EDADC90E5E096E4DC93E2D489F7E498F8E297B1984CBAA056E9D187FDE99FEAD78F EEDD97F1ECA5EBECA6E7E7A1EBEBA3ECEBA4F4F2A9E0DC93EDE89EF2ECA2F1E9A0ECE39BE2D98E EDE394EBE192E0D586E9DC8ED2C375D4C476FEEEA0D2BF72AC994CCDBA6DFBE99BFDEBA1E2CF8A D2C07BD8CA82E2D78DE6DE93E0DA8FD7D088DFD892EDE8A5EDE8A8DBD295CEC78AE0DA9DEAE2A3 E5DD96EBE395ECE68EEEE98BE3E082EBE894E8E4A4E2DEAFFBFAD3EAE4A768611E928B45E8E299 DBD587DBD782C5C167C9C56CE1DC8CE5DE9AF6EDB6D5CB9A261A00ADA170FDF2BDF3E9AEA3995F A9A05CF3EBA1E6DF8FE1DB86EAE48CE4DF84F2E59CFFE3AAE6BD7EA06A20FDC675EABB67B08635 FEE19AEBDA9BC9B9848A754D2D1502453A03DAD585D5CE86E9E29CE7E198DBD689F1EC9FF0E9A0 EBE49DE4DE95E1DC8CFAF5A3E8E49DDFD884E7DD84F6E7A3F8EBA7F4EDACE5E2B2191710393816 E4E5A9F3EDB1EFEAB5514F2D3C3C06D9DB9CC9CB8BD6D6A27D7B56BCB7A2403A2F060000030000 8C8B5DF8F5C6DDD5ABA29C803D371E13120AD0D1A8E6EAC54D4F36030100030100818059EFEFB4 F9F6B0FDF7AEECE89FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFEEB F3F4CDE4E8ACE9EAB2F3F3C6FCFCE6FFFFF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFFF7EFFFEDDAFFDFC0F7E1B9EEE9C2F4F5E1FEFEFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F9F9E9E7E7E0CBCBE5A3A2E06F6FDF5C5CF6C7C7F1B0B0E06666 DC7878E1A0A0DF7877DE5555E06A6AEBA09FF2C9C8E99594DA6B6ACE5C5CCF5556DB5555DF6262 E17E7EE1BBBBE1A5A5DE7777CA6A6AC77575DC8282E67575DD5353ED9B9CFAD5D5E36E6EE36E6E EEABABEBD4D3E6E2E2F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFFE5E5FFD1D1FFC9C9FFCACAFFD0D0FFD2D2FFD1D1FFD1D1FFCDCDFFC6C6FFC1C2FFC7C7FE EDEEFEFCFDFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFCFCF4D2D2EAA0A0EA6D6DEA7B7BEBACACF3DEDEFAF7F7F2F2F2E5E5E5D8D8D8E8E8E8 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE2D270D6C664DBCC68E4D570DCCD68E2D36EE9DA75D9CA64D7C862EBDC76 E9DA74ECDC78ECDC7CDBCA6FCDBC62C6B75AD1C362D2C661DED26EE6DA7BE8DC85E7DA8CEBDF91 E6DB8CEEE394EBE091F6EB9CEFE495EADF90F0E596EFE495E8DD8EE9DE8FEADF90F3EA9AF8F09F F8F09FF1E996EFE794F4ED95F0E98FE4DD83ECE589F4EE8FF2EC8DF7F192EFE58BF2E88FF8ED94 F3E991EDE48FF0E893E8E08DD4CD7BE7E08EF6EF9EF1E999EFE691F0E68BF0E68CF1E78DEFE48B F5EA91F1E68DEFE48BF0E28CEFE28BF5E891F7E890FFF093E7C565FEE181F2D77AEFD679ECD57A EAD57CEDD983F0DE89F1E08CEEDB8BEBD987E5D47AF2E188E9D884E2D17FEADA86ECDE86E8DE83 E6DC82E7DD8AFFF6ABD2C787292000958F4EE9E097E3D986EEE48BF0E68CE1D77EE0D580EBDA88 F4DA89F6D17FAC7C28DFBA63EED77DF7E585EEE18AF6EDA8605736534C22B2AF75B2AF61E5E08E F4ECA3B8AD72463D05EDE3A6FFF1AAE0CB80846E2A97833DFFF7AEE3DD91E5E294EEE79FC2B878 4A3E07F1E89FF2EAA1E9E198EFE7A0F1E8A4736A26C9C07EEAE19FE3DA98A09754887F3BFEF6A9 DED780E5DD8DE9DF95CAC0789B9149EDE498E9E190EDE594E3DB8DE7DD96F7ECAF807751474218 D6D68AEEEAA89B94685D5134CDC18BD8C87FF7E596F5DC95FFE6A0F0CA84DFB779985F258B5318 8E561BA56F33C08D50EBBD7FF5CC8DFFDC9CFFECABFFE3A1EFD38FFBE9A4F7E7A2F1E09BEDDC97 E8D792EBDA95F7E6A0F8E8A2F9E8A2F6E59FF4E19CEDC386DB9D64B0753C814E1573450A895A20 C18C53EAC68AA57838E5C17BF7E398F3DE92EDDD92EBDD94E4D68CECDF94F4E79CE7DA8FEDE192 EBDF90ECE393EBDF90E6DA8AE5DD8CEAE592E4D98FE7DB96E5DB9AFEEDB1EAB880AA5824C37D41 FFDB93E6DF91F1EA9FE5E197E1E091DDD88AE9E192ECDE90F2DE91F6E195C2A85DB0944BF2DC93 FFE9A1EED48CEEE59EEBEAA4E1DF99E6E69EE0DF97EAE9A1EFEBA2EFEAA1E6DF96DFD78EE5DA93 E8DC93E1D288E5D78BE2D88AE2DB8BC8C070D6CE7DE2D987EDE08EFAEA9AC3AB5BB79A4AE7CF84 FEE09CF6DC97E4CF87E4D68CE6DF93E1DD91DEDE92DCD990DDD895DFDB9AD3CB8DCDC68CDBD69C DCD69AD8D190E5E097E4E18FE4E28ADCDB84D8D78AF3F2B3D9D7A86C6851342B13463E21C3BC8D E3DBA4E9E3A4D5D28BEBE69AECE79EE5E0A0F0E7B7ECE1C0706344605436EFE4B1ECE2AED7D093 0F0600ABA35EEEE69ED9D286E0DA8BB6B05EBBB561E9E49CFCF2B5EACF9392672BF7C488E5BC81 A9874FA593614F4930242000332A14897D49C9C376E9E896E6DF9FE1D99EDAD490E3DF8EF4F09F E8E19BF4ECB1E1D99CE0DA8FE1DC8AE4DF97E1DA84EDE488F9E8A2F7EAA3F4EBA8DFDCAA1C180F 2D2A0FB9B779D0C98BE8E3AC494A2854561DE8EAAECDCE95ECEBBDDCD9BA46422E000000040000 0B0800D4D2A1C0BB943F35200000000F0C00838456F9FAD3F2F4D5646450373429100D00A8A676 FFFFC3FBF6BAF4EEB6F4EEB6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFCFEFDEE F8F9D3E9EBABDBDF90ECEFB8FFFFE9FFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF6FFE9D3F4E2B6E7E3A9ECEDC5F8F8E9FDFDF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFDF5F3F3EDD3D3E59C9BE17F7EE3807FF7DCDCF3C9C9 E38585E07676E17373DB4343DA3B3CE8A09FF5D9D8FDF4F4F3D6D6E79191DC4647D72223DB3E3F E48080EFC0C0FDDADAF8D2D1EDB4B3E27979DB5151DA4B4BDC5657E37676F1BBBBF9E5E5E48686 E68080F3B1B1F6DCDCF4F0F0FAFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF FBFBFFEBEBFFCDCDFFB7B7FFC0C0FFDCDCFFFBFBFFFFFFFFFFFFFFFFFFFFEDEDFFC8C8FEA8ACF7 9DA4F1CDD4F1E3EDEEE9F6EBEAF8E9EAF8EAEAF8EAEBF8EBF0F8F0F8FBF8FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEF3F3EDAAAADD5A5ADF2E2EDF3D3DDD6E6EE5B3B3EDE7E7E7E8E8DADADAC8C8C8 DDDDDDFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7D775D9C967E4D56FF0E17CE6D772DECF6AF8E984F2E37EEADB76 EBDC77D0C15CD1C25CDACA6AE5D577F1E086F0E184F1E383EBDF79F6EA86EFE485E4D980E6D98B E9DD8EE7DC8DF1E697E5DA8BEDE293F6EB9CF2E798E8DD8EF5EA9BF8ED9EE4D98AE6DB8CECE394 EDE494EFE797F3EB98F2EA95EEE78EEDE68CF2EB8FFEFB9BFAF493EDE785F6F090F6EC92F4EA91 FBF198F9EF98F6EE98FEF6A1DDD582B9B15EEDE592F5EE9DEFE796FFF7A1F7ED92F6ED92F5EB91 E9DE85E9DE85F5EA91F5EA91EEDF87E5D77FEFE189F9E890EED175EFD06EF3DB7DA88A2EEBD57A F5E38AF3DF88F2E08BF7E494FAE798F2DF92E6D483E5D47BF0E087EAD986EBDA8AEFDF8EE6D87F E7DC81EBE186E5DA85EFE397FDF0AC584F1D58542CE0D995E9E193EBE28CF0E68EECE38CEBE08C F2E18FFADE8DFFD987BC8B36DFBB64D6C166EADA77E9DD81EEE49A9B925F1F1700B3AF74B2AC62 E1DA89F9EFA3EDE1A34C4112BEB47AFDEEA3DAC670BDA7576E5A11E7DA94E5DE92E3E08FEBE499 D5C78B53450CD9D28CE8E198EDE59CEAE29AF7EEA98C833EB9B06DF6EDAAEAE19EB6AD6A675E1B F8F0A3D6CF78EBE391E7DE92DCD28A988E46E8DF91E2DA89EDE592EFE698F4EAA2F2E7AA524920 6F6939EAE89AE6E39D8B855A5E5438DFD69DA79C51EFE18EE9D68AF1D990FFECA1EDDC93F9E9A3 EDCF8BB88E4FA87438894E147E3F0782430BA86C33C89156D7A468DDB273DABA7AE9C98AEECF8F F1D292F1D192E5C585D5B676C9A96AB595569D7E3E8867287C4D0F733900845113B68749DBB275 FCDEA0FFE7AAF4D293A07834F4D78EF7E394E3D786ECDF94EADE94EFE399EADE94EADE93FCF0A4 F1E496F1E495F6E99AF4E898F0E394EFE594F2ED9AEADF93E9DA96F5E9A7FFE1A6BD7843AD521E FCC986F4E999E2ED98E6DB93D4CA82D7D687DEDB8CE0D98AF0E798F8E99BEBD78BFADF94C3A65C B09148F5D58DFFE9A1E2D58DE8E59CE5E198EFECA5DEDD93E6E49AE4E298E8E39BE1D991DDD48D E6DA94ECDE97EDDC94E5D68BE9E093D7D181DCDA87C8C673CFCB76DFD480E5D481F9DF8EDBBB6A AD893EE7C17BFFDF98E5CB81E2D184E9E192E1DD8FE5E396E7E59BDFDC97DFD798DBD195D4CD90 CDC98CBFBA81CEC991EAE5ABE0DD9DD9D895D1D08BD9D99987864B0E0C022B270CAAA482F2ECC4 C5BD96E8E1B4D9D39EFEFDC4D2CE8CADA968D8D39CF4ECC6B6AB94100602C2B988E7DCA8F4ECB6 443B214E4512FCF3B7F8F0B2C5BD7DB8B06EF6EFAAF6EFAAE4E8A8F0F6BCD8C89468431576461F 592D15180102261F0158603FB9C599E5EAB8F3F1BACFD081E3E196BBB580F1EBBAEFE9AEE6E397 DFDC8FFFFFC6D4C998938857EEE7A3E1DC8BDDD992EBE590F6ED92F1E29CE7DA94E9E19EF5F1BF 383317282413EAE7A8EFE7A9E9E4AC37381E868856F1F2C0F2F1C3E0DEB8AFAC8C130F07363018 615D3D7D7A4DFBF9C1827C580901019A9573DAD9AAF2F2C1F7F8CEF5F5DAD1D0BD4945331A1500 F9F8C3EDEDACF3EFBFFDF8D0B5B089FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFEF F7F7D1E9E9B1E8E8B6F5F5DEFBFBEFFFFFFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFAF5FDF9E4F8F7CEEBEBB4E8E8B9 F5F5E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F3F3D5D1D1C9A3A3DA7574E1807FE8A3A2F9E7E6 F6DADAE8A1A1DE6161D93234D72425DE4C4CF5CECEFCF4F4FEFCFCFDFAFAF2C1C1E27373DC5C5C E48D8BF1C4C3FCF0F0FEF6F6FDF6F6F8DFDFE67B7BD82C2DD72627E15556F4B2B2FCE1E1FAE7E7 E58686DE6565DF7171D19898CDC6C6E9EAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCFFE7E7FFC7C7FFBBBBFFC1C1FFE5E5FFF6F6FFFEFEFFFFFFFFFFFFFFFFFFFFFDFCFFEEEFFD BECDDF91AEC489A6C393BCB8A1D8AAA6E3A4A5E1A5A6E1A6ADE1ADC0E2C0E0F0E0FDFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFFF9F9FEE0E0ED8A8AE04343F07777EF7171E05050CD7373CBC1C1E4E6E6F8F8F8 F3F3F3F8F8F8FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D671E3D46FE8D974EDDE79E7D873DCCD68E1D26DE8D974 EADA78EBDB79EEDF79D5C65FC6B654C1B153D5C469DCCD6FD3C662E0D56CEBDF79E2D777EADF86 E8DB8CE2D687F0E595F3E898E6DB8BE4D989EDE292ECE191ECE191E4D989E5DA8AF4E998F4E999 EDE495F3EA9AF5ED9CF6EE9BF5ED98F0E990EBE48AF3EC90F2EC8CECE685EEE886F5EF8FF6EF96 F7F099FBF49CF9F19DEBE38EE2DA85FFF7A2FFF4A2F3E896FEF3A1E6DA88D1C771ECE289F6EC93 EFE48BFFF59CF8F097DFD179F9EE96E3D27BF4E48CE5D47CF7E58CD9BC60FBD87BCFB054B89E41 FFEC90F1DD83F2E18BF6E692F5E493EFDC8FF1DE92FAE799E7D880E9D981ECDE8AEADB8BE6D785 EBDC87E9DE83EBE084F0E58CE5DA88DACE85C8C0801F1D00BFBA79F2E99FE0D584DED47DE8DE88 F3E895EBD987FFE794E1B864AC7A25FFDE89E5D277EADB77E4DA78EDE696B0A86E130B00A39E66 89843CDDD685DCD285FAEBAC6F6237958851FFF29FC2AD4EEBD580523D06D3C584E6DE95E2E08D DED888FAEDAF786930A89E59F4ECA4DFD78FE2DA92F6EEA5C9C17AA09752EBE29FECE3A1D0C786 685F1ED6CE81EBE48AE2D987DAD184E7DD95C3BA6EDFD688F0E897DFD686E9E094ECE29CD7CC8E 231706A9A26EDDDC8BF3F0A8837D53655D42F8EFB5A19A4CC4BB65EFDF93F1DF94FDEA9EF8E29A EAD58EF7E49DFFF1A8FBE8A1E1CA84BD9F5CA77C3C874F14853E0A91410E8E3C0B863907974716 9749189244139949189A4C1B843705813102934514934514A25422BA8546DBB670FDDC95FFE39F FBDE9AF2D08DFDDF9DEEC98799752FFADE94EEDB8AD4C875D7CF7FE3DA8DEDE496ECE396EBE194 ECE094E8DB8DEADD8FEBDE90F0DF93F0DF93ECE191ECE894DDD285F2E49DF8E5A3FCD0958E430D C66B35FBCC85E9E692CFE18CF0E49EEFE29AE4E293DFDC8DD9D587DED789ECDF93E3D285EDD68B F0D58BC5A45AB79349EFD087FDEBA0E5DB92EEE59CDDD68DE3DE94E5E197E9E69BDCD78DF9F1A8 E7DD95F0E39BE6D891E6D58DEBDB92E4DA8DE2DD8FCFCD7BCECD7AE3E08BE1D883E0CE7CECD280 FEDD8FFBD88EC19C56C8A75FF4DA8FF5E395F0E495E7DE8FE9E296E4DF96E5DD9AF0E6A8EDE3A6 E5DF9BE6E19EAEA96F837F4FE4DFB7EBE6C1E9E6BCCECB9C9796650A08007F7D46E2E0B0F0ECBC D8D5A5D4D1A1E2DFAEFCFAC2AAA96B232300ACAC68FCFABFE4DFB24640235D5430F7EFBBEAE1AA A096611E1500CCC491F8EEBAEFE5B2E2D8A5928755C2B786F4EBBAC1C3949094663E2B062D0100 370A0540170A7E603CE0DBB6ECF6C8DCE9B3BDC588A7A663D8D98FE5E5A4D0CBA0A49F7AB7B17E F9F6B2DEDA957067390F0200201409D4CA8CEAE49BEBE9A7E2DE8CF9F29BEBDC9AF1E4A1E7DE9F E1DDAD262110302B12EBEBB0DED497E1D9A63C3B1DC0C09CEDECC8A19E7B211E04070300171200 E2DDB6FDFAC8FCF9BDFDFAB6B4AE8A342C18D5D1AB9C9C71D6D6A5FAFAD75351390D0A00070300 B2AF85FAF7BDE6E5A3E1DEB2F8F6D47B7857FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF9 F5F5D3EFEFBEECECC0F2F2D8FDFDF8FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FDFDE8F4F4CA ECECBAEEEEC7F4F4E0FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F8F8E2DEDED5ACACDB6C6CE18080EAADAD F9E8E8FAEBEBF3CDCCEC9999E77273E77576ED999AFBE9E9FFFEFEFFFFFFFFFFFFF9E3E3EFB5B5 ECA9A9F1C9C8F9E7E7FFFEFEFFFEFEFFFFFFFDF3F3F2AAAAE87070E76C6DEE9192FBDADBFFF4F4 FBEDECE99E9EDF7070DC6767D89494DCD4D4F0F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFFD9DAFFB3B4FFC2C3FFDDDEFFF7F7FFFEFFFFFFFFFFFFFFFFFAFDF9EAF5E9DBEFDB D0EED2C6E0D3B6CBD58DA1D597B3CDB6DCC3C2EDBFC0EAC0C0EAC0C1EAC1C5EAC5CAEDCAD3EFD3 E6EFE6F4F4F4FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFDFDFBE9E9F1B5B5E57878E05757F5ADADF39696E24D4DD65F5FDCB6B6EFE4E4 F8F9F9E4E4E4EEEEEEFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBCC66D9CA64DECF69E3D46FDECF6AF1E27DE3D470 E0D06DE3D371DDCD6CD8C965F2E37BE9D977DACA6CD8C76BE0D171E4D773E9DE75EFE47CF5EA88 F8ED94F0E493EDE192EFE494EBE090EBE090F0E595E9DE8EEEE393EADF8FE2D787EADF8FF4E999 EADE8EEBE392F1E999F3EB9AF0E895F5ED9AFFFBA3EEE78EEFE88EF2EC8FF5EE91F5EF90F3EC90 F6F098F6F099F6EF98F4EE98F3EB96EFE792EEE590FDF39FF8ED99F3E894F0E591EBE18BF3EB93 F9EF98EADF88F4E992DED1789D8F37DACA73FCEB94F5E38BEEDB83F7E38AE2C56AFFE388BEA046 E3C96FFAE48BF3E28AEDDF89E9DC88E8D988EAD98BF4E296FFEC9EF1E28AECDD86EFE08CF0E092 EBDC8CECDD89E8DE83F2E78BEBE085D9CD79E5D88BEFE7A35C5725534E16EBE29BE5DB8BDCD17E E4DA86EADF8CE9D787F3D785D1A956C08D3AFFE08DF7E48DF0E37EE0D873DDD783C7BF841B1404 A29D68928C48B4AB5DEFE395F8E9A8A3966E625521F4E68BCEBA55F3DC86776122BAA772EAE09D E6E18EE6E08CF2E5A398894F837935EFE79FE3DB93ECE49BF3EBA2CFC77F827A33DFD692E6DD9B D7CE8D5E5515C9C173E4DD83E9E18FE3DA8EDED48C9E944BD4CB7EE4DB8CE6DD8EE6DD92E4D997 CBC0831E1102C5BE88E4E390E2E0948C87576C6543F3EAAEC8C274E3D984EBDE90F1E094F9E89B EFE297E8DC92F3E29AF7E49DFFE8A2F8DB97FFE6A3FFE1A0FAD595F0C586DFB072CD9B5FC79357 CE9A5ED09C61CB975CC38F53C89459D39F63E0AC70F5C58AFED195FFDC9FFFE29BF6E596EFE092 E8DA8CEBDA91EFD68FF2D38EE8C57FB39049FBDF93E0CD7BD2C670DFD785D5CD7DDBD383F0E597 EFE496DCD183EADC90EDDF93EDDF93EBDC92EEDD93EEE293EEEA95E3D989EEDC95FFE3A2BD854B A95D24F1A76BFFE194DFE28CD4E491E4D695E7D894E8E396E1DC8ED6D185E0DA8DE5DE93E1D48A E2D287FCE69AFBE195D3B167C29E52EDD288FCE99EE3D388EDE196ECE498E8E395E4DF92DDD78D F5EDA3EAE096F1E39BE6D990EFDE96F0E097EAE195ECE799DAD889D5D381E3DF8DE7DF8DE6D687 EBD386F5D88AFBDB92EBCC84B3954BA58A40D9C377F7E799E7D789E8DA8EEBDF97EDE39CE6DC99 E7DD9CE8E197DDDA8D736D3E221D0F332C2238322338341E2825180805007F7C4AF7F5C0E7E5B0 FAF7C7E6E3B9F6F2C9BBB78E7370420F0D006E6C41CFCE99CDCA9AE7E5C0332D16BCB693FFFCC3 D1CA8D1A1300A09762FFFFD3D9D09FD4CB9EFFF5CBADA379362B193F3423332C14B8AE89B18B63 A96B3DC77C4ACD8C53EAC384ECE19DE5E9A4F0F5B2DDD997CDBE7ED2CE90DDDDA75E593C000000 878456EBE8B0524B1900000033260FB3A67BF8EEB6E7E1A0DFDEA7DCDB93D7D083F6E8AEF0E4AA FCF5BBEEEAC0221D13221E10E3E1A7DBD297E4DDB0A9A88AECEBD1605E430F0C001813001C180C 4A4620FBF5C5D5D095D9D591EEEBA3F7F5D0BBB39E2A270A000000B6B684A3A380120F050F0B06 918D6AF1EDBBEBE7ADEBE7AAE8E8B5EFF2C3D3D5A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFC FAFAEFEAEABDE9E9BAF5F5DFFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFA FEFEE9F6F7CEEBEAB5E9E8B9FAF9ECFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFEFEF5F1F1EABFBFDE6E6EE17F7F EAAEAEF9E7E7FEFAFAFDF6F6FCDFDFFBD1D1FBDDDDFCEEEFFEFCFCFFFFFFFFFFFFFFFFFFFEFBFB FCF3F3FCF1F1FDF7F6FEFCFCFFFFFFFFFFFFFFFFFFFFFBFBFDE1E1FBCCCCFBCBCBFCDADAFFF6F7 FFFDFDFCF1F1EDB9B9E38484DD6868E59D9DF2E9E9FAFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFDF8F4F8CFC8F6AAA1F6CEC7F6F8F2F6FBF5F6FEF9FAFEFBFEF8F7FEE4EFEBC8E4CB B1DFB0ADE3ACCEEDD1E5E9F6A7ABF8B4B9F6E1E8F4F5FDF3F4FBF4F3FBF3EDFBEDDDFBDDC1EFC1 AEE3AEC5DEC5E1E8E1F5F8F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFBFBF5D5D5E38181DE6F6FE27F7FF7D7D7F3B2B2E35858E55D5DF5B1B1 FAE1E1F2F4F4CECECEDEDEDEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCCD66D9CA63D4C55ED5C660D7C863EFE07B F1E27FECDC7AE2D270D9C968D2C25FE0D26AEFDF7DF6E686F2E283EADB7CEEE07CF6EB82F5EA81 FCF18FF4E98FEFE392EDE191E6DB8BE3D888EEE393F8ED9DECE191F4E999E9DE8EDDD282E4D989 EFE494F1E595E1D988E7DF8EF1E998F3EB98F1E995F6EE99F4EC96F4ED95F6EF97F8F197F6EF95 F2EB93F4EE98F6F09AF4EE98EFE993F4EC97F8F09BE9DF8AE6DC87F1E792F9ED99F4E894F2E691 EFE78FF7ED96EBE089CBBF69D1C36BECDD85FEEF98FCEB93F5E18AFFED96E1CC73DBBC64F6D882 A2852FFBE38BF4E48CF8ED94EAE089E3DA85E0D481E5D789F0DF91F7E696F5E78EECDD86EFE08E F4E497F1E193EFE08DF0E58AEAE082ECE186EDE18AEADE8BEAE19CB6B2750D0400C0B66CECE092 F3E896EADF8EE9DD8DF2E092F6DA8AAE8634CE9E4AF4D182E9D783E0D470DBD36ED7D17AE7DFA5 4D461B7972449F9556A9A055F7EA9DF2E1A0D4C69F3E3000DDCF6DC9B749F2DC87937944917E52 F9F0B1E5E08DE3DE84ECDF96BDAF706A601DEBE29DE6DF96EFE79EEAE299E0D88F898139DDD48F E3DA96E3DA99615718C0B76CE0D980E7DF8CE7DE91E4DA92A39952E4DB91E4DB8EF1E89CEBE299 E7DC9CB4A86F2E2100D7D198ECEA94E8E799817C49847C59EDE5A6E4DC8DF3E992E9D98CF6E499 F5E598ECE195EBDD94F6E29BF6DC97F8D895EBCA87FBDB98F6DA96EFD892F0E097F3E79DF0E69B F4E89DF7EBA1F8ECA0F4E79CECE096EFE398F7EB9FF6EAA0F2E69BEEE296E4D88EDDD384E3DB88 EBE594F1EB9AF5EA9BF6E197F4D78FD0AD66B8954CF2D788E3D07BE6DB83D7CD78DED582E7DC8A E9DE8EEBE091EEE394EADC91EFE197EEE097E9DB94EADC95EEE095E9E28FEAE090F4E098FCD999 915218B97337F9C884F7E291CCD17BDBE192E6D796EFDD9BF0E79EEAE299DED990E9E59BE2DE94 D4CC83D6CD82DECD82F5DD92F7DB8CB69548B19145F2D68AF3DA8CE5D486ECE090EBE393EEE797 E2DC8EE6DF91E1D488EEE197F1E39AE9DA92E8DB91DCD388DED789D8D284DFD98BE0D98BE9E194 EBDC91ECD98FF1D98FECD48AE0CA7FF6DE94E0C87CAA9045BEA457F3D98DF8E096E4CF87E3D18B F3E6A0E9DF99DFD789C1BB6D80793C322B011C160004000003000035320EAFAC7FE7E4B0EDEBB3 B2AF7883805395906E5C573B150F00060000010000C1BC9CBBB696B8B3939E997D0C05015F583A F2ECB2655F2029230FE6DFA4EBE4B0EFE7B7FDF6C7978E6310070042381C766C49635634EDD5AE FEDAAECE7E45CA6F29BD6F1DE7B65CCBB75BEDEB95C9C67BF2E6A5EDD7A0E0D6A55B5A34000000 736F4BFDFAD06B67360A0300685F35EFE4B7FCEFBFECE1A9E7E0A8F5F5C9ECEDB2B5B06FF9EEC1 EFE6B4EBE6B7ECECCC2A2617110E07C3C08AEFE6AEFFF9CFFFFFE8D1CFBA040200100C00ACA787 BFBB92A9A674F6F1B8D8D394DBD694FDF7B6D5CDA62E270C1E1C08A2A1708C8A660E0D0137321C 25210EDBD8A5ECE8ABEBE4AAEDE5B0ECEAAFDFE0A3E0E2A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F5E2EBEBC3ECECC6F4F4DDFCFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFAFDFDE8F5F5CCF1EDBAF7EBC6FBF5E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F7F7DFDCDCD4AAAADB6D6D E18080E9ACADF9E6E6FFFEFEFFFFFFFFFBFBFFF8F8FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF9F9FFF5F5FFF5F5FFF8F8 FFFFFFFFFFFFFCF2F2EEC0C0E37F7FDA4E4ED47A7ADACFCFEFF1F1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAF0EEEBC7CACB92B8B474BBCE98BBEBBEBBEABDBAF6D4DAF9E6F9C2C6EB9CB8CB 9FCFB1B3E5B0D0F0D0EBF9EBF4F3FFBDBCFFC1C0FFE2E1FFF9F7FFFFFFFFFFFFFFFDFFFDF3FFF3 E2F8E2CEEECEB5DFB5BFE5BFDFF7DFF6FFF6FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF4C1C1E04747E66D6DF3B5B5FEF1F1F4C6C6E27272E06060 ED9797F7D4D4F9FBFBE7E7E7EFEFEFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8CA61E0D269DECF68E3D46EEEDF7A EADA79E2D270E7D775FBEC8DF9EA8AE4D571D0C258BFB04ACCBC5DE3D374E4D576E3D671E6DB71 E6DB73EADF7DE2D77DEADE8DEADE8DE6DB89E8DD8BEBE08EF1E694EDE290F0E593ECE18FEBE08E EFE492F3E896F8ED9BF2EA97EAE28FF0E895F9F19EF6EE9BF6EE9BF0E895F6EE99F9F19DF8F09C FAF29EFCF5A0EFEA96F4EF9BF1EC98EBE692EFE792F6EE99F2E893E8DC88F2E692F7EC98F5E690 EFE48EEDE590F2E893EFE48EDBCF79E5D77FFEF69EFBEC94FCE791F7E48BFAE68DE3CB73F1D480 F0D07CB19541FBE590F2E48DF5ED95E6E18BE4DE88E4DE88EBDF8DF2E392F4E392F7EA90ECE18A EEE291F0E395EADD8EE7DB89F0E288E9DC7EEBDD80F4E68DF3E48FEADE97F9F2BA6C6222433711 E7DA8BEFE392E6DD8BE2D888F3E396FDE295906B1AD7AA59EFD184E5D382DDD16DE2DD75E2DD86 F5EEB56C643D4C451AB5AB71958B45F1E397EEDD9BF7E8BF5C4E0ED3C55DCFBA4AF5E38EB99F71 5B4525F1E5AED9D380D9D375EEE293DDCE8B605613D6CD88E3DB93E8E098E2DA8FEBE3988A823A D2C984EDE4A1F4EBAB746A2CB7AE63DDD67EE4DC8CE5DC92E6DC95A39954E1D78EDBD287E7DD94 EAE09AF4E9AC9C905B3C3005E9E3A8E0E089E9E89978733F88805BF1E9AAE8E090EEE48DE4D487 F3E094EED68AFFE29EF2D28FF1D590F0DC95FAEBA2F0E59BE4DC91E9E397EBE196EDE297EFE198 E8DD91E0DB8AE5E091E3DE8DE1DC8BE6E192E5E08FDFDB8ADDD889DBD686E3DE8DE3DE8EDDD784 E1D883E5DE8BE6DD8EEADD8FF9E399FFE69DB5914AC09D53F4DA8AF0DE89E9DF85DED47CE9DE87 EDE18CE7DB88E6DA89EEE394EADF93EFE39AF0E49CEDE09BECDE9BEBDF97E5D988EDE191FAE39B D9AE728A440BC08242FBDA8CEBE48CC9C975DED68DE8DA9CF1E0A1EEE09AECE29CE6DD98E8E49E DCDA93CECB83D8D389DFD688E4D486EBD586E5CA7AB68F43C1994DFADD8FF0D889E2D080F1E594 EBE492E6DF8EDFD988DFD485E7DB8DEADC90E2D589EDE196E9DD93E5DB91DED48AE8DE94DED48A E9DD94EADE95ECDE98EFDF9AE9DB93DACF84E1D187FFEEA3EFD58CD3B167D8B46BDCB970EFD288 F4DE94DED086E5DA90EBE294CDC47AECE2A2C4BD89B3AE809F9C6E878553C2C089F4F3B9ECEAAF F7F1B98B844F1512051F1C0D302B266E685D211B180B0400302A225D574C2C2717030000030000 0F0900726C311C1600888241ECE6ADE3DCA4E3DCA5C7C0892F2700BEB783E2DCA9F9F1BFA89D6A D8C08AFFCD92C6722DCF7022CC7A22EEBB5EBFAD51CBCC79D6D791D9CE94FFF6C8A19A6F000000 6D7048DDDDAECBC89C1D180C564F2BEFE7B5FBF2B6DED493AAA061E9E1ADCBCCAB696A453A3710 A39974D7CEA7D7D2AAA1A0850D0B060807019F9E6BEEE7B2D5CFA68A896D8D8B734745300A0800 DDDAB2FDFACDF7F2BCF8F2B7E4DCA1EAE2AAFCF5C153492B282306BFBC8AFFFFDE3E3A1A868471 E3DEC91C1900D4D391F3EEA9F1E7AFEBDFB5F5EDB2F7F2AFEBE6A4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFA F8F8EAEEEEC8E8E8B2F4F4DBFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFF9FEFDE8FAF4CCF4E1ACF9E9C8FFF7EEFFFDFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F5F5D9D5D5CD9E9E D95F5FE47F7FEFB9B8FAEAEAFFFDFDFFFFFFFFFEFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFEFEFFFEFE FFFEFEFFFFFFFFFFFFFCF2F2EEBFBFE37B7BD94848CF7272D3C7C8ECEEEEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFCFCFAEAEAF2CFD0E6AEB8CB83ADB76BAECE8DAEE5AEAEE0A3AEE0A9C3D2ABD68285CC 5782AB6DB08EA1DC9DE1F2E1F7FBF8F5F5FFC7C6FFC3C3FFD7D7FFEFEFFFFDFDFFFFFFFFFFFFFF FEFFFEFCFEFCF2FBF2C6EBC6B8E9B8C6F2C6E2FBE2FCFFFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F0F5AEAEE13737E87676F5D3D3F7F3F3F0CECEE69191 DE6A6AE27E7EF2C6C6FBFEFEEEEEEEF4F4F4FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2C45BDBCE64DECF68D7C862 D4C560F5E583FAEA89E9D979DECE6EDCCC6DD5C562DDCF65ECDD78EADA7ADACA6BDFD071F1E47E F2E77DF2E77EEFE481E9DE83EADE8DEADE8DEDE290EFE492EADF8DECE18FF0E593EBE08EE5DA88 E8DD8BF0E593EEE391EDE290FAF29FE9E18EEAE28FF0E895F0E895F6EE9CF4EC9AF4EC9BF6EE9C F9F0A0FCF3A3FEF7A5F9F49FFAF5A1F7F29EF4EE9AF8F09BFBF39EF6EC97F8EC98F3E793F1E58F F7E893F3E892F8F09CF7EE99F8ED98FFF6A0F7E991FCEC94F3E28AF7E28AFEF59CFEF59CE1C76E FDEF9CD6B665DAC26FFAE795EBE08BEDE791E5E18AE7E48DE9E48EE9E08CEDE18DF3E38FF2E78D EEE48CF2E596EFE294E6D98BE4D886E8DB81EDE082E4D777E5D87BF7E78FFAEDA6F5EDB6E9DEA2 2B1D00B3A65EF7EA9BEFE594ECE192F2E398FDE79A9C7829F2C87AFADF95F1E092EDE27EEBE67E EAE78FEFE9AFA49C76372E0AC5BA83827832DACB81E4D290F2E3B9796C2EB5A93CCFBB48F6DC8B DFC39B675038E5D6A6E0D986DFD875E8DD87E7D993605713BBB26EE2DB93E5DD94E2DA8FEEE69B 877F35BBB36BF1E8A7F1E7A87A7032A69D54E5DE87EAE292EDE39BEDE29FA89E5BE1D790ECE29A E8DE98E4D997F3E6AC76694652471EF8F2B7CFCF76EEED9C6E69347A724DFEF6B6E6DD8CF8EA94 F3E093F6DF94F0D98DEFDA92EFDB94F9E69FF3E29AF0E098E0D48AF5E89FF5EAA0EDE197ECDF96 EFE198EFDF94EBDC8CECDE8FEADC8CEADC8BEDDF90EBDC8DE3D584E3D586E7D889E9DB8AE9DB8C E9DA88ECDD8AF3E694F7E999F1DE92F3D88EFFEAA1A7813ADAB86CF7DE8CF2E38CE1DA7FF4E98F F1E48AEFE28AF0E48FEEE390EADE8FEBDF94ECE19AF2E7A2F5E9A8F0E4A4E9DC97F0E191F1E595 FDE29AB77B41974C13E1AA67FBED97E8E88ED9D381E7D58FECDE9FEFDFA1F0DD9BEDDF9DEBE2A0 E3E09DDFE09BE7E8A2D1D088D1CD80EBE092E7D786ECD583FADD8FC29143CAA354FEDF8EFAE794 E4D582E9E08CEFE895E9E38FEEE293EDE091E9DD8EDCD286EADE93EDE197F2E39AE7D68FE8D892 F4E39FEEDF9BE7DA96E5DA97E0D592D7D38BF0F0A3EFE89CEBD98EFFE298FFDE95F4D189D0A45B C8A45BF1D78CF4E397DFD486DDD389D8CC86E9E09FD5CD8ECBC888D5D48FE1E399EDEFA4DBDB92 CAC685EEE6B1F6EFBCB1B174DADAA3ECEBC2F5F1D75651400000000000000E0B00716E4F9D9C72 47452045431C928E569D975DF6F4BDE6E1A6F4EFB2DDD99A4A4616747131F4F1AEEFECA8C5C37C E0E095E4DB8CF6CB80C17731C46A27D68746FFDE9DF4E8A77B894AA5B27AD7DAA9E3D6A9201B0E 3D3F1EE5E8B0E5E6ACAAA878171100E7DFBAEAE4AED5CE83E7E091F4EDA8F8F0BE373823010400 0402004C4330EDE8C9D8D5B51819090504010404003F3F1BD4CD9DD2CBA131311C919271DAD9B6 171508B7B584F6F2BDE8E3AAE0D9A0E8DFAAFFF9CDD3C5A0181002A6A275FEFDCFF4F2C949452B C2BDB2F4EED92E2B00D1D184EFECA2FEF5C0EEDEC0EFE0B0FCF2B8F4E7ADFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFC F9F8EBEAE9BDEDECBBF5F4CAFCFCECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF7FCF5DDF4E1ACF7E0B4FEE8CEFFF7F0FFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFCFCEEE9E9 E1A7A7DB4949E97E7FF9D0CFFDF2F2FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCF2F2EEC0C0E38584DC5E5EDF8F8FEAE0E1F7F9F8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFCF2F2EEB7B7ECAAB0EDB9CFCEA7E1AC8DDFCDB3DFECD1DFDAB0DFBB86C19460A1 5851AC3A679A44936972BF6DBDDFBDE3F1E3F0F2FAC6C6FEC4C4FFD7D7FFEFEFFFFDFDFFFFFFFF FFFFFFFFFFFFFFFFFFFDFEFDEDF9EDD0F1D0B7EAB7C9EFC9F6FCF6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FDD5D5F39999DF4C4CE08989E6D9D9E6E7E7EBD2D2 F1ACACE87676E16D6DF0BBBBF5F8F8D6D6D6E4E4E4FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D169E9D870F5E47E E4D26ECFC05BE5D573EFDF7FF1E181F3E384E3D374CBBB5AD0C15AD3C361EADA7BF4E388EDDE7F E9DC7AE6D974E7DB78EDE082EFE48BEBDC8AE6DB89EDE38EEEE391EBE18EF2E795F6EB99FAEF9D E7DC8ADCD17FE6DB89EDE290F1E593F0E593EAE18EF1E996F3EA97EBE290F0E897FFFBAAF6ED9E F2E99AF8EFA0F9F0A1F2EB9BF8F2A0F4EF9BF0EB97F1EB96F9F19CFCF49FF4EA95F3E793EEE28E F6EA96FBEC99EEE38FF0E893EEE691F4EB96E7DB86E5D882F3E38DF4E28CEFDA84F2DA83F7DD86 D4B962FFEA9AAA8A3DE9D687FBE998E6DB86ECE790E9E58EEAE690E7E28EDED683E1D483E8D886 E5DB81EBE08AF3E895F1E495EBDF8EECE08BE8DA81EADD80E4D779E8DB7EF3E38BF5E69AEBDEA1 F6EBAE85774751450CF3E899E5DA89F8EC9DF0DC95F5D892AA843AFFD885F8DC8FEFDE90F3E788 EAE17EEEE690ECE4A6DFD8A80E0700B4AB74948B49D7CA7FF4E49BE5D6A181723A978730CFBA4E EDD580F7DCAE725C3DC7BA85E4DE8BE7E082E6D884F0E1996E6429B2AA64EBE398E7DF94E5DD92 EBE29B7E74339C944CE5DD97EAE0A28D8348A79F55E3DC82E2DA8AE6DC95F1E6A4B9AE6CD7CE86 EAE196E0D88DD7CD8DE9DEA95E503B756A42F7EFB0CCCA74FFFFB75B54277C7152F4EAACD7CE7D F6E995F6E39AF0DB8FF1DD8EE9E091ECE496F2E69AE6D98EEFDF94EFDF93EDDB93F9E8A0F9E89F EFDF97E4D68DE2D186EFDD8EEBD687EAD688EBD88BE4CE83E4D084EAD78AF1DC90FBE69AF3E093 EFD98DE9D384DCC97AE0CF7FEFDE90F4E194FBDF94FFECA4A17C32E9C77BEFD684F0E089EFE88D E6DB82EDE188EDE18AE8DC86EADD8CF1E495ECE094EBE198F3E9A1FAF0ACF2E7A5E8DB97ECDD91 EDDA8EF9D28E9E551A985415F8D286F4EC96E4E089E3DD8EECE099F1E7A5ECDD9DE5D694E3D695 E4DB98D9D490E0DF9BE5E59FE0DF97DCD78DDAD285E2D485F0DC8CFEE293FADA8EBC9847CBAC5A F5DC88F5E08AEBDA85EDE18DE0D784E4DC8CE7DE8FE8E093E8DF92E2D78CE0D289F0E199EEDD96 EDDC96E8D692E1D291E0D593EAE2A1EBE3A2DBDA93DDDE92E2DE94E3D78DF5DF98F1D38CFAD58E FBD68FD5B169B6984FE4CC80F6E094E2CE83EFDC94DBCB85EDE39EE0DC95CED085CFD485E3E79B 7F8138241E00DBCF9BC6B888E4E199DFE197CECD8FD7D5A4D5D1A8A8A47E928F63E1DEAED7D69D CECE91E8E8AAF1ECAFFFF9C5FFF9C4E8DCA3E8E1A4EEE9A97E7C3E4A4708E3E09BE2DE97EFEBA2 C8C177E0E08CE9E48CFCD68DC87F3AB06018ECAE65F9D99EF9F4C2D2E0ADA7B882A6AF7B57563F 030300ADB181ECF0B9FCFBCF747156454223F8F4C3EAE5ADEFECA7F2EDA5FFFDC179714B040500 696B4B5D5E372A2316EBE9CB8F8C6D0000000B0B05060500141400E4E0B1FEFFD575775192926E E2E1BB251F17656030E5DEAADCD59CE9E3A9E6DDABEDE1B8CDC4A1221D00D3D2A4F7F6C4F5F4CA 211C02C0BBA9FAF3D73D3602D4D290F8EFA8D3C492EBD7B5FAE3ADF6E3A3ECD394FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFC FFF7EEF9ECD4EADDA6F2EBBEFEFEE6FFFFF9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF8EDF7EAC6F4E0B2F4DEB2FCF4E5FFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFCFC EEE9E9E1A1A1DA393AEB7E7FFFDEDEFFF7F7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF5F5F4CDCDE89190DD6362DF9090EBE1E1F7F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFF4F4FDDEDEEDA5A4EFABB1F6D1E9D0C8FFA0A3FFB4B8FFC5C3FF9B8AFF805CCC 6A3F916252A15C779D55986E5EB15B80BF7FAAD5AAC9DED4B3B8F4C2C1FFE0DFFFF5F5FFFEFEFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8F9E8BEECBEBDEABDE4F3E4F6FAF6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEAEAF6B1B1E77A7AD36262DA9F9FE5E2E2E5E8E8 EFDDDDF9C3C3EF7979E35555F0AEAEF5F9F9D6D6D6E3E3E3FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D06AE0CB66 EDD976EFDB7AFFF18FDDCA6BDBCB6CEFDF81F5E488F3E287E6D679E6D878CBBC5DD2C367E6D77C EDDE82FBEB92F2E28AEEDE85F5E58FEBDC87E2D17FE7DB86E8E189E6DF87E8E089EFE791F2E893 EEE28EF0E490E5D987E3D685F2E493ECDE8DECE08DF3E893E5DA85EFE590F8ED9AF8EC9AFAF2A1 F2EB9AF7F09FF8F1A1F3EC9CF7F0A0F2EB9BF7F09FF6F09CF7F19CF8F09AF5EE96F5EB94F3E994 F2E894F6EA99F0E395EBE08DEAE28CECE48FF5ED99F0E794E7DA8AEEDF8FF5E392EDD784F9E38F EFD17DDEC16DF3CF80A48336FFE89AF9E795F1E391DED683DFD986D9D381EDE594E4D789F8E79A EBDA8BD5CA74EDE38CEBE18BE7DB86EBDF89E7DC82EADC84E8DB80E3D67BE5D67BEBDB83EEDE87 F2E194F3E7A8D5CD932D2906838131FDF4A4F9E59AF7D89ADAB77BA07833FFE68CF1D682F1E090 EFDE85F2E286E9D983E9DE94F1EBAF36340085824E928B4CACA257E7D785F1E596A79659775F29 DBC66EF6E085EFDB92877843A89F5DF5EF9CD5CB79E9D989F3E19C988E59999347EDE892D4CC7D E7DD8DEBDE9EB9A97CA69C55EFE79BE9E1A29991569F9949DFD675E1D987DED48EF0E4A6A09853 D8D182D9D37DE2DD8AE9E19FE2D8AA3E3023857749F4E9A1E4DC8DF6ECB1665A3985795BF5EDA8 E3DC8AE4DB8BEEDF9AEAD98DECDD86E6DB89F2E798F0E595E2D788E3D788EDE193EDE194EFE296 F2E59AEBDF93E7DB91EADE91E7DC89ECDF8FEEE193EDE095ECDD96ECDE97F3E59EFAEBA3F6E99F EDE194EADC8FE7D689EBD98BEDDC8EF5E698EADA8CF4DE90FFE89CA38137ECD083F0D785F0E08B F4E993EBE18EE2D787E9DE8DEFE494E9DE8FE8DD8EF1E697F2E69AEFE398EBDF94EADE94EAE199 EEE4A0FBDD9BF5BB7BA64F0ECEA151F9E78FF0E28EF2DA91E3DE92D4E594E4DE93E3D790D6CE8B E1DB97E0DA95DAD38DE7DE9AE6DE98E7DE96E1D68FDBCE86DFD189E4D48CEEDC92F3DF94F0D889 CFB362CCAB59FBDF8DF9DB88EFD683F5E594E2DB8DE6E69BDBDC91E7DD92F0E297E7DA8FE8DB91 F0E29AE7DA93E2D590EBDF9CE6DC9AF0E7A4F3EBA9E6E09CE8E29BE9E49DE1DC95D8D38CDFD791 EDE19AF8E79FFFE9A1E6C880B69148C8A054C9A253FDDD8CEDD789EBDC95E5DF9EDADC9FD7DCA2 D3D6A026240E0A00009F905CD5C48FDCD38BE5DF91E6E097DBD591E4DE9DF5F0B0E4E1A1E1DD9C 827E3CC0BC77E4DF9AC8BB7DEACE9EEBD09EFEEBB5FFFBC2B0AA6C2422009B9A5FFBF7B6E3DB9A F2E8A7E8D796E9DD93E7D489FFD39EDB9047A45B00D8AA35F9E893F6EEB7F4F2BDFFFFC0D5D79A 111300666D38FFFFD0F0F2C7F3F0E9322D28757449F9FAB5EFEFB8E4E1BB949363979272130F02 A2A289FFFFEACCCEA9060500C6C7A09FA177141100C8C7A24A4A23020000B3B088F9F8CC696A43 696643EEE6C64E42203F2F0AAE9F71DACD99F1E8B0E0DAA4F9F7C59594690305002D2F0BE9EBBD D1D0A1191500CFC99DFDF6C72F22009F8D61F2E7B2F0DBA7EFD69EE2C577CFA954C6A04BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFAF5FEEAD3FCDDB8FBDEB8FDEDD5FFFDF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFBF3EFECC8E5E2AAF4F3DC FDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F1F3F3D4CECEC68787D63637EB7F80FEDEDEFFF7F7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9FFE6E6F09898DC4849CA6667CCC1C1E9EBEB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFEFEDEDEFDC1C1FCC8C7FEDEDEFAEEF6D1CFFF9894FB827DFA6B66FA3430FF 4440DC6E69B5A68FB0BEB0B3B0C8AA85C5854DA74D5EAE5F7DB58E889BD9B5B9F8EAEBFEFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3FEF3DDFBDDC8EFC8C5E4C5E3F2E3FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9DEDEE88888D45252C47070DDB5B5F9F7F7 FCFEFEFDF3F3FCD6D6EE7373E23838F19F9FFDFFFFF5F5F5F9F9F9FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0CB65 CEBB54BEAB45D2BF5BE3D16EF6E383EEDD7EEADA7BDDCD6EE8D87CF2E285F9EA8DE7D87CDECF73 DACB70E0D077F8E890FFF29BFDED98ECDC87F0E08AF0E08EF7EB96E5DE88DCD47EE9E18BE7DF89 EDE38EF1E591EEE28EE4D884E7D886F1E28FE8D986DED27EF4E894F0E490EFE590F2E794F6EB99 F9F1A0F0E998F3EC9BF7F0A0F5EE9EF3EC9CEAE393F6EF9EE9E38FE8E28EF3EC94F3EB93F2E890 F6EC97F4E996F4E799EFE294E8DD8BF5EE96FBF39EEFE794F2EA97F2E694F9EB9BFAE795F0DA88 FFE996D5B562F0D27FB69647CAAB5EFFE798EBD987EDDF8CDCD381DDD685E8E190F3E898F1E496 F6E598F1E093DCD07DE2D983F1E892F2E691EBDF89F1E58FF5E690FBED94E8D981E1D179EDDD86 F4E38FECDA8CF1E49CF7F1AD868542221F02D6CA84F4DE9DFFE2A2C6A25EAA8436FFE58FF2D986 F1E291F1DF88EFDE84E5D67FE6DC90FAF4B65754246F6E44BAB5779A9147E4D581F7EB96B7A669 694F20DCC671F5E183F5E39496884E9A914DF3ED99E3D98AEEDE8FE8D792A39966A39E52F5F098 D1C879DFD585EADC9DB19F77978C45EEE699F0E7A8A39D61AAA354E1D878ECE491E5DB95E8DD9D 958D48DAD284DDD780E3DE8CE1D997ECE1B53A2B169B8E5AF6EAA0E7DF91FFF6BE766948766A4A FDF4AEEAE392EAE294F2E29FEADB8EE8D981EADF8DE7DC8CE2D787E0D585E1D687E2D788E5D98D E2D68AE8DC90E9DD93E8DC92E9DE90E6DC87ECE191F0E496F0E499EEE19BEFE29CF1E49EEDE199 E7DB92E6DA8EECE093EEDF92F0DE92EDDF90F1E495E9D98BF6DF90ECCD829C7A30F7DD90F3DA8A F0DF8CEFE48FECE18FECE191E5DA8AE0D585E3D889E7DC8DE6DA8EEADF92ECE094EADE94EADE93 E8DF97E1D794FDE1A2D58C4D9F4806D2A856FCEE96EBDA8AF1D48FE0D88FCEE290E1DB8FE3D78F D7D08AD9D28DD5CD88D6CD88EAE19CE6DD97E8DE99EBE09BE7DD98EADD96E7DA95E8DA94E5D88D FEF0A5FBE191C8AA59D3B05FFFE291FCE492E7D385ECE095ECE89FE6E39AE8E096F0E59BE6DB93 E5D991ECDF99E8DE97E6DC95E8DE98E8DE9AE9E09BE6DE99E4DB97ECE49DEDE49FECE7A1D6D18E DDD991F1EAA3EBE098F2DF97FFEAA1EBC77DC59C51AB8031E7BF70FFE89CFBE5A0DDD190EBE5AA E3E2A9D0CF982321005B5525C6BE85E9DFA1E1D48EF7EBA0ECE29AF7EEA7D1C984DBD391E3DB9C EFE8A8E3DB9CECE5A5EDE6A6EEE8A7D1D091DBD9A7807E5D46432C120F03656237E8E2A4FCF4A5 EFE18BF4E08CEBD085E9D995EDE3A3FACD93E39E59894400D7AF52FFFCB3E6DAA9F9EFCCFFF8D8 7A6A4F1E1407E2E2ABF8FBBAF8F6C96C635A0F0800BEBA81FBFAADFDFAC0C8C29F201D024F4A2D 3F3929EAE9CEA5A780ACAC860C0A00A0A076F8F9CEC0BCA0F4F2C4ACAB780E0B00545124FFFFDE 62613765613CFFFFE76C623E4A3D15E8DAABE2D7A0E4DC9FC2BC83E5E3AED6D4A41617093F431C F2F3CCE4E3B7211D00C2B987FFFCC865541FC0A873FFF2B9DEC186C4A769D2B370EED08CFCEAA6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFAF1F3E8C5F0DFAEFCEBD5FFF6ECFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF7F7E6EEEECC ECECC4F2F2D7FBFBF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8FAFAE6E0E0D99999D93A3BEB8889FEECECFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFFEBEBF1999ADD4546D76F6FE1D4D4 F3F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDFDF6D2D2EFB0B0F9D5D5FFF3F2FBF6FBD2C3F09671D87A49CD6D3FD0 7267F57788D787A2ACB7A39FDAB4B1DBD8CAC0E6C28BCD8C6DB5775A9E7A5484AD8BACD1D6EAE7 FAFFF6FEFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFBEFFEEFCCEFCCB2E1B2D8F0D8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D3D3E66A6ADA4040DE9A9AEED3D3 FEFCFCFFFFFFFFFCFCFDE7E7EE8484E23E3EF09696F7ECECDFDDDDEAEAEAFCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D6C25BD9C65ED9C660DECB67B6A440E4D270F2E181F5E586DECE6EE7D679F1E285EFE085EEDF84 F6E78CF2E388E3D37CEFDF88F1E18AE2D27DE2D27DF4E590EFDF8DEBDF8DF2EA97E7DF8CE1D986 EFE692E6DC88ECE08CE8DC88E2D782EADC88F3E48EEADB86DDD17CF6EA96F6EA96F8EE99F6EC98 F5EA98FBF3A2F1EA99F1EA99F8F1A1F8F1A1F4ED9DEFE898F8F1A0E9E38FEBE590F3EC94EAE38B F2E891F8EE99F7EC99F9EC9DFBEEA0F4E997F5EE96FCF49EF0E893ECE490F4E896F0E190FFF7A5 FCE693F5D986DDBE6BFFE18EA17F30EACB7DFEE696F4E18FE3D583E8DF8CE2DB8AF4EC9BF0E998 F4E799F1E194F4E397F6EA9AF1E694EFE492F1E593F1E591F1E58FF7E794F7E893F4E68FEADA85 E8D884F0DE8EF7E598E4D985E2DE89EDEDA13D360460522EF3DBA5FFE6A1C29F4EC09F47FFE493 EED889F2E392F2E28CF1E086E8D881EBE195F6F0B27A794A4C4B2BDAD599887E37E9DC8AF4E998 C6B5784C3505D4BE69FCE78BFFF8AA9A8B53817935F0EB99E8DE8FEDDD8EE6D590A99F6D9A9548 F8F49BDCD484E8DD8DF1E3A4AE9D7480752EEEE699F0E8A8908A4EA59E51E9E083E2DA89E5DA95 EFE4A48E8540D3CB7DD8D27EE3DE8CE0D997E7DCB0302203BBAF78EFE497DFD787FCF2B6877A55 726643FEF5B0E7E08FDED688E9DA97EFDF95F6E792E7DC8AE7DC8CEADF8FEBE090EEE393EEE394 F0E498E8DC90E6DA8EE4D88EECE096F3E79AE3D887E6DB8BE8DD8FEBDF95ECE099EADD97E7DA94 E5D991E5D990EADE94F0E49AECDC90ECDC8FE8D98BEADD8FE8D789F9E294C3A459906D23FFE296 F3D98AEEDE8BEDE38DDFD484E8DD8DE4D989E2D787E6DB8CDBD081E6DA8EEADE92EDE195EDE197 EDE197EDE199E3D493F9CB8DA55B1DB45F20E3BB6BEFE08AF1DF91F7DA96E6DD96D5E494E7DF96 E9DC95DED78EE9E098E4DB96DFD691E4DB96D8CF8ADFD590E8DE9AECE19FF0E5A4EFE5A3EEE5A1 ECE29BEFDE96FDEA9FF5D98CB29242D7B667F8DB8CF8E195E3D187F1E49CEAE199E7DF97F0E7A0 EBE39AE6DD96E7DE97E7DD96EDE39CEAE099EFE59EEBE29BE3DA95E9DE97F2E8A1F3E9A4EEE5A1 E1DB97E6E19BEDE59EEADF97E7D68DFAE399FDDE95FFE298D3A95CB18638CBA55CF1D28ED8BF80 E4D496E5DB9FF6F2B4BCB97AF8F7B6FAFAB7DBD992E5DB94FDEFA9EDE09AF4E7A4EBE0A0CEC486 DBD195E9E0A7F8EFB7F1E9B3F2E9B3FEFFC9D9E4A8676F470006000F100B3F3F24ACAB7CE5E29D E2DC89F2E893EFE094EFDC9EC8BF87E7DFA4F9CF93D79454874100DFB674F7E2ABF9EEC8D0BFAC 604B410B0000867762F7F2B7F4F2ABC2BB87080000796C4FFAF3B3F6F0A1F7F5BAAEA983211C00 2D28171510001916021512009D9B730702008A875FFEFBC8F6F1CFF4F0BBF4F2B746422C59521F F2EFBA77744757542AFFFFE3958E67332C09F5EEB7F9F3B5D5D190D2CD8ED4CF96F6F0BFA5A477 BFC39AF2F3C9F5F2C4171000938759FFF8C2EBD49AE9D091CDAE6DCFAF6CE6C886FAE2ABFFF0BD F8E4B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFDFDFAF6F6E5EAEAC0E7E7B6FAFAF0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FBFAF1E9E5B4EBE7B9F9F8E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFFFFF6F0F0E9A9A9DB3D3EEB8E8EFEF6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFFEFEFF19C9DDF4749E67A7A F9E5E5FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF0CECEE6A8A8F5D9D9FFFAF9FBF8FCD9BCE2A45CB6892699 872899BDA7E0B2CEC59DCF94BBA985DFACA3F0DBD2EFFBEAD0E9D08FBAA2508C7B34798263A29A ADDDB7E2F8D7F8FAEFFEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFACFEFCFA6E2A6 D1F0D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFEFEF4C2C2E55454E43D3DFAC4C4 FEEFEFFFFEFEFFFFFFFFFFFFFDF4F4EE9999E24E4EF09191F2D6D6CDC5C5DDDCDCFAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD2BF56DCC960EAD770F5E37CDCCA64DED06BD2C260DBCB6AE2D473F0E182F0E184E7D980 D3C56CE2D47BF4E68DECDE86F4E68FF6E792F3E48FF6E793F4E592F8EA97F2E796ECE494F0E897 EFE795E7DF8DE3D786E3D783DDD17CD7CC75DCCE77E0D37ADACC74E7DB85F6EA96F3E793FEF49F FDF39FF1E694FBF3A2F6EE9DF3EC9BF8F1A1FBF4A4F9F2A2F9F2A2F8F1A0F2EC98F7F19CF4ED95 E8E088F7ED96F5EB96F1E693F6E99AFBEFA1F8ED9AEFE78DF2EB93F4EC96E5DE88EFE392FBEC9A F6E492F8E390F9DF8CD5B661F0CF79AD8F3EFFF1A2FCE595F6E492F5E794F2E997EBE493F4ED9C F0E796EEE193F0E194F4E497F3E698FCF1A2F1E697F3E697F5E999E2D683EDDE8DE1D280F9EA96 FCEB99F1E08DF7E594F2DF90EAE081E0DD7CF6F6A4B5AD79261603D2B88BFEF7AFAA8A31CBAD51 FEE896EEDA8CF3E897F0E08AEEDD84E4D57EE4D98DF7F1B3A2A06F34320BDAD59B7B732ED6CB7C E8DE8ED5C5884B3405D2BC68FCE98CFEF0A3B1A26B716927E4DF8DD3CA7CE2D384F1E39DABA16F 837E32F2ED95E6DD8EE9DE8EEFE1A2B9A77E675D15EAE295F8F0B0938D51A0984EDFD67DEAE292 ECE29CEDE2A0928942D4CD7ED9D380E3DE8EE4DC9DBCB1851D0F00CBBF85E5DA8ADFD684F5EBAF 897C5A584C2BF4EBA7E4DD8DE0D78BEBDB9CF0E098EEDE8BEBDE8EF4E999F4E999E8DD8FE4D98A E7DC8DF0E498F4E89EF3E79EE9DD93E7DB91EDE194ECE191E9DE8FE8DC90EBDF95EFE39BEDE19A E8DB95ECE097F0E49CF1E59CEEE299EEDE93F4E497EDDF91EEDF91EDDC8EFDE59AB494499D792F FFE399F5DC8CE9DA87E8E08CE8DD8DE6DB8ADFD484E6DB8DEFE495E5DA8AE8DC90EBDF94EBDF95 E9DD93E9DD93ECDF98FFECAEEAB57A914408C17331F4CF7EEFDF8DF4E197FADD9BEADF99D8E196 E8DF97EBDE96E5DC92EDE39BE8DE96E6DC95E9E09BDBD28EE0D894E7DE9DEAE1A2EDE7A6EEE6A7 E8E1A1F0E9A7ECDF9BF1DC97FBE299EDCE83A08033CEB065FFEAA0EFD58BFAE59DE9D890E7DE98 EDE59FEEE7A0EBE49EE6E098E2DB93E9E299E8E097ECE39BEBE199E6DC94E5D992EDDF99F3E4A1 E1D692E4DB98E5DE9ADCD48FE9E099E2D58CEBD98EE8D085EFD487EDC97CD2A85EB78E48CDA865 DFBE7DF9DE9EEED899F1E3A0F5EEA8F1F0A6E1E494C8CC7DE6DC96CDBE7CEBDC9CE1D395ECE1A5 EFE5ABD2C791DAD09CC8BF8DDBD4A6C6BF92A9A37A58563E181604938F61DAD69FF2F0AFE1E097 DBDC92DBDD9BE1E5AEC9CEA4898F712F3009C7B57BFFE5AFCC8149924B10E6B87CFBE6B9786F52 140904000000423723E5DFC3E4E0A0E7E199AEA46F170800E1D5AFF0EAA5D7D080F2EDAF837E57 26220B8E8B6E4743361410005D5933EEEBBD160F00989464F7F2B8F2EBC1E6E1A4E9E3A1DBD39B D0C98BF3EEB2948E5C36310AFCF9CCA09E6E1E1E02EAEAABE9EAA4E5E29AEAE5A1EFE6A9F2E7B3 F3ECBEF4F1C6E7E2B4FFFDCF4B410E7F6F45EDE1A5E2CA89CEB370DFC279FFEDA4FFF2ADF8E8B4 F9F3C5FAF1C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFBF2F2D7E8E8BBEFEFD0F8F8EBFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFBF5F8E4C2F9E6BEFEF8DBFFFFF3FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F5F5D8D3D3CA8C8CD73739EB8283FEE3E3FFF9F9FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFFFFF1ABACDE4849 DF5D5DEFB9B8F9E8E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAD7D7F7B5B5FDD2D2FFEEEEFEF7F9F5D9E5DF8FAF BD3E71A31D59A587B09CB1999ABD68BEA364DDA77EE4CC9CDBD7B4BFB0BB9B8DAF7779975F946A 51A34B58AE4299C970E0E6B6F8F7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFDFBD0EFD0 A5E2A5D1F0D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAFAF1D9D9E39494DE4B4BE55353 FBDBDBFFFBFBFFFFFFFFFFFFFFFFFFFDF6F6EEA4A4E25C5CF18D8DFDCDCDF0E5E5F5F4F4FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE6D569DBCA5ED3C258D5C35BECDD76EADB76E2D470DECF6DD3C564E7D977F4E589 F7E991DECF7AE1D37BEADB86E8D984F0E18DF5E693FAEB98E8D986E2D380EEE08DF5EA9AE7DE91 E8DF91EFE697E3DB8AE5DA88E0D581DBCF79DACF77DDCF76E2D579E7DA7FECE08AF3E793EBDE8B F6EC97F8EE9AEFE492F6EF9EF9F2A1F3EC9BF3EC9CFBF4A4FCF5A5F5EE9EEEE797F2EC98F2EC97 ECE68EECE58DF2E890EBE18CE8DD8AEFE293F2E597F1E693F2EA90EFE890F2EB94EFE792F2E692 F6E794F8E694FBE491DDC26EF5D680D7B861BCA04EFFF2A2F3DE8DECDB89F0E28FE8DF8DEDE594 EBE291F4E999ECDF91F8EA9CF3E396EBDE92F5E99DF2E69AF4E69AF5E89AEDDF90F4E496DCCC7E D8C978E1CF81DDCC7CD6C572DECB74EBE17FE9E785E5E492F3EDB47060455B4218FFEBA5A78B35 D6BC60FFE894F5E597F0E596EADB86EEDD85E7D780E5D88DE6E0A2ABA874262500D6D49B928C4A BDB468E8DF90E6D699543D0FCAB562FBE98CF5E598C1B27C675F1EE0DB89CAC274D9CA7BF3E4A0 B2A876787327EFEA92E8DF8FE4D989ECDE9FC7B58C625811EEE799FCF4B49E985CAEA65EE5DC86 F2E99BE6DC96DBD18C8B833ADBD485E5DE8DE8E298F4ECAD92865C251807DBD093E4DA89E7DF8D F3E9AD8D805E4B3F1FEFE7A3E9E192E9DF96F2E2A4F1E09AE5D583E5D889EFE495F0E595E5DA8B E3D78AE8DC90EBDF95EEE298F6EAA0F3E79FE8DC94E5D98FEBE091E9DD91E7DB90E6DA90E7DB93 E8DC94E9DD95E7DA94EADD97EBDF97E7DB93E9DA8FF3E398ECDF91ECDD90ECDA8EFBE196AE8C44 AA843CFCDA90F7DD90EADB8AF0E895F2E797E6DB8CE1D687E2D788E3D88AE6DA8DEEE298ECE096 E7DB91E2D68EE2D68EE6D590F4D699C1824AA04F15E39C58FFE393E6D787EFDC94F3D999E4D695 D4D78EE0D68FE9DB93E9DD91ECE096E2D78EE6DC94EAE19CDCD48FE2DA99E9E2A3E9E3A5EAE6A7 E6E2A5ECE7AADDD99BE6DC9DFAE8A5F8E29CFEE19CF9DB94B39249C2A259FFE39CF6D68EFAE29B ECE19DE5E09CE9E39FECE7A3E8E49BE2DE95E2DD93E6E096E3DB90E8DF93E7DC92DED188ECDB96 FAEBA8EADD9AE0D794E4DD99D8D18CDED68FD0C57DDBCE83E2D185EAD68AE0C77BFADB92E8C881 CFAB67B5924EDCBA77FFE6A4F0D791EEDD92EDE595E9E793C1C26FF7F0AC8E8346BAB072F2E8AB E8DEA2ECE3AAF6EDB7C7BE8C221B06140E070C07040D0600483E17CBBF8FE6D9A1E4D598D6C88B FDFAC3D1CB9C888865868E70495B3E42583A393E0DC8A969FED6AEC16C3CB16523EDC378E9D8A9 0C0A00050600383E0DCBD597D6E2AFCED089E7E19AB7AC770F0100B3A677E9E19AD7CF84F6F1B6 A29D7826250EDBDFC6A4A78C2E2902AEA874EEE9B5382F06C0BA7FF9F1B1DBD1A2EEE7A2DCD48B E7DCA0DFD790F9F1AFA0975F292201D7D3A0A6A470818247E2E6A2CCD084E7E498E3DC93F6E9A8 DECE94A89761F7E9B3F7E7B1FFFDC362521E5E4A2AC4AF6ED5BF7CFDECA6FEE9A3F5DD94FAE59F FCF7B8F0F0B4F0EFB3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFAEDEDC9E3E3A9F1F1D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFCF9FFEEDEFAEBCBF5F1C7F7F8DDFEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F0EFD9C3C3CB7B7BD73636EB8586FEE7E7FFFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B0B1 DE4A4BDA5C5CE6B8B8F5E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFE8E8FDD0D0F6C3C5F7D2CEFCE7DCFBE5D2 EBB19ECD5755B22537A67B9D9C928E989167AE8F81C09DA4C2B4B5C3BEC3C4B0CFBDA8CFB4A8C6 A7C4A086BE606DAC2B99B646D8D28DEDE8BFF8F4E2FFF4F0FFFAFAFFFFFFFFFFFFFFFFFFFCFFFC D1F1D1A7E3A7D2F1D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDEBEBEBDBDBDBE3E3E3F1F2F2FCF6F6EEC2C2DD8080DB5E5E E57B7BFAE7E7FFFFFFFFFFFFFFFFFFFFFFFFFDF7F7EEAFAFE16B6BE98989F3BCBCF1E5E5F7F7F7 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF4EFEFEADFDFF4E7E7FEF5F5FFFCFCFDFEFEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0DE72ECDB6FE4D36ACCBD54E2D36CF5E782EDDE7BF5E784EEE180E4D675 D0C366E1D27DE6D885F2E490F1E28EECDE8BF7E996FBED9AF4E693E5D683F2E491F1E390ECDF91 F0E79CE4DB8EDCD384EBE392E9DE8CF4E894F2E68FEFE48AEBDD84EADD81F3E58BECE08AF2E692 E8DC88EEE48FF2E894EEE391F2EA99F9F2A1F3EC9BF0E999F8F1A1FDF6A6FAF3A3F2EB9AF7F19D F2EC97F0E992F9F29AF2E891EEE48FF0E692FAED9EFBEEA0F4E996F4ED93F0E991EEE68FF9F19B F7EB97F7E895F4E28EF9E48DDAC069FFE78FCCAE57DAC06EF6E291F3E08FF4E491DDD27EE9DE8C ECE392E6DD8CF7EC9CEEE193FBEFA1F0E395F9EBA0F1E599F1E599F0E297F5E79AFEF2A5F5E598 E1D183BBAB5DBBAA5CBCAB5BAB9B43DBC968E1D777DFDA81F5F2A6F4ECADE2D59B331A05987C3F 9D823AEFD784F4E18AF0E493E5DC8EE7DA85EFE088F2E28BEDE095FFF7BABAB783100E00AEAB77 A0995BBAB168ECE395EDDEA2513B11BEA955FBE88DFCEB9EBDB17C66601FF1EF9EE0D88AE3D487 F2E39EB3A9767B7529F3EE96E7DF8FE6DC8CEDDFA0C3B1895F550DEAE396F0E8A8878145B3AB66 F1E697E4DB8FE4DA93E5DB94A0984FE1DA8EE1DA8DE3DC95F5ECB1706638322513E9DEA0EADF91 E6DE8DEFE5A9958863544924F3EAA7EEE698E6DD93EEDE9FF1E19AEFDF8DEFE394F4E99AEEE394 E3D889E1D689E5D98EEEE298E6DA91EBDF96F5E9A1F2E69EECE096ECE094EEE296ECE095E8DC92 E3D78EE8DC94ECE098E6D993E7DA95EEE19BEFE29CE8DB93EEE095EBDE91F2E396F3DF93FFE59C BB964FC09A53FFE198FDE396EBDD8CEFE995F1E89AEFE495F1E597E9DE8FDDD285E0D488F3E79D EDE197E4D88FE1D58EE2D78FE6D490FFE3A7A45C259E4C13EFBC77FEF2A3E3D688EDDB95ECD597 E3D698D5D18EDED48EE5D990ECE095EFE49AE6DD94E5DD95E5DD98D9D18FE1DC9AE5E0A1DBD89A D3D093C7C588D6D499E1DCA2EFE7AAF1E4A3EDDA98F3DB96F2D58FEACB849A7830E8C780FFEAA2 FFE4A0F1E5A2E3DB98E4DF9BECE7A2E9E69FE6E499DFDB91E7E195E0D98DE6DD8FEADF92DFD088 EAD993FBECA9F0E2A0D9CD8CE0D794E0D995EFE8A2ECE49CE7DD93E1D68AE8DB8FEADD91E6D78C E2CE85FEE49CBF9E59A07D38CDA964F0CF88FFE79DF1DE91EFE492F2EA9BC6C18368642D8D894E EAE3A5EBE4A5F2EAAEEBE3ACDDD7A234301D322F1A706E4BCAC8A0FAF4C5FBF2C2EBE0B4F8E6BF ECD6B0A9926C715F3C22160033310F29301B1F2A112E2D0BD0B275FFE0C6C26E479E5512DBB564 D3C597141400070C00BEC97CD9E791768544A4A862B8B5759289580E0300A79B67C0B973F8F1AA FFFFCA82825F282B14C7CFB80C120057512AF9F7C1D0C9911C1200BBB271FCF4AEEADDAAE0D88F F6EE9FE0D593EBE196F1E8A19E9459685F26E9E4ADD7D59CEAECABDFE198E1E292E2DE8DE6DC8F F0E09BEAD498FBE5A6FDE3A1F3DE9CC8AD6C9B8441B8A45FFFEDABF5E7A4FDFBB8FAEEAAF0E4A1 EFE6A3EFEDAAEAEBA6F1F2ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDFAFAFAF5F5F5F1F1F1F1F1F1F4F4F4FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F4F4F4F2F2F2FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF7F7F7F3F3F3F1F1F1F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFBF6F5F6F3F3F3F2F2F2F1F1F1F0F0F0F3F3F3F7F7F7FCFCFCFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFCFCF5ECECC7E4E4ADF2F2D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFFFCFAF6F2D9EAE7B4EEEDC6FDFDF7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7EDEDE4BABAD67271D83435EB8E8FFEF6F6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F1B1B1DD4B4CD76969E1CCCCF3F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDFAFAFAF7F7F7F5F5F5F3F3F3F1F1F1F0F0F0F1F1F1F3F3F3F4F4F4F8F8F8FDFDFDFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF8F8F8F4F4F4F4F4F4FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFAFAFAF5F5F5 F1F1F1F1F1F1F5F5F5FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCF7F7F7F4F4F4F2F2F2F0F0F0F1F1F1F2F2F2F6F6F6FBFBFBFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF9FCEBE9E9B8B5EAB3A8F6CDB4 F4DEB3DEBE8AC16642A92F23A6758D9B758A926576977BAD9C92DD9F9CE7AEACE9CCC7ECDDD7ED E7E3EBE6EDE3C7D595A8B53DB5AE40D3BE76DCD195E3DDB2F2DBD3F6E7E6F6F5F3F8F8F8FAF9FA F5F7F5CAE9CAA1DBA1CBEACBFAF9FAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF2F2F2C9C9C9A7A7A7B7B7B7D2D3D3EAE3E3E7ADADDC7B7B DD8282E7ABABFBF0F0FFFFFFFFFFFFFFFFFFFFFFFFFDF8F8EEBABADE7979DE8383E1A5A5E1D5D5 EEEEEEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEE5D5D5CEAFAFE6C5C5FDE5E5FFF8F8FDFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD0BE54D5C45BF4E67EF5E67EE0D16BDFD26CEDDF7BF3E684E1D573 EADD7DEDE085E9DD8AE9DD8DEDE18FF5E997F9EE9BFBF09EF2E795E7DB88F4E894F4E894DFD380 DBCF80EAE195EDE497E0D788E2DA89E8DD8BE9DD8ADFD37DEBE087EEE087F0E487F5E78DF5E993 F6EA96F4E894F5EB96F7EC98EEE391EFE796F4ED9CF5EE9DF1EA9AF2EB9BF7F0A0F5EE9EF1E999 F4EE9AF3ED98F0E991F1EA92F4EA93F0E691F3E895F7EA9BF5E89AF1E793ECE58AE7E086E8E188 EDE78EF5E995F5E691F4E28DF0DB85D3B962FEE188BB9A42F5E08BF3E190EBDA88E6D985E7DB88 F2E795F0E595F1E696EFE494EFE294F2E395F5E799F7EBA0FAEEA4F5E99FF6E89DF8EA9FF4E69B F6E699FFF0A3F8E89BF5E496FAE99CFAEB90EFDF76EDE386F1E99BF1EBA4EEE69DF9ECA6B29B5A 3116008F743EF3DF9AF3E58DD7CF7CCFC87AF5E995E7D87FF5E58EF7E89EF5EBAED3D09D211F0B 828051C7C187ACA460D1C97DE8DC9F452F10BCA956FBE98EF7E89CB1A670635E1DEAE898E1D98D E2D689E7D994A39967807B2FF0EC93E0D788E8DD8DE9DB9CC4B38A574D05E9E194F5EDAD6E682C C1B876F1E59AD7CE83ECE298C8BE76A9A158E6DE94E0D88FE8E19DD8D0973C32043B2F1AE2D799 F0E498D9D080EADFA58D805D382D0CEDE4A0F2EA9AE3DA8EE4D594E6D68CF8E995ECE091F7EC9F EDE195DFD387E1D58BE8DC92E3D78CF3E79FE6DA92E7DB93F2E69EEDE199F2E69DF4E89EEEE298 EBDF95E8DC92E9DD94F3E79FEBDE98F1E49FECDF9BEEE19CF0E49BECE094EDE195FBECA1EED98F FFE69EA27C36BD9750FFE8A1F5DE90EBDF8DE9E491EFE697EDE294E9DD91E8DC90E7DB90E5D98F F0E49AF1E59DE8DC94EADF96E7DC93D9C582E2B77C964813AC5921F6D08AEFDF90EDE498F3E09F ECDA9EF0E2A7DCD494E6DE99E2D891E8DD95F0E69EE9E098E4DD96E6DE9AD7D08EE2DD9CE7E2A3 DFDC9FE1DFA3DAD99EDAD89EE5E0A6ECE5A8EAE0A1EDDF9DF7E4A0F1D892FBE79EE1C37BAC8A42 E0BD76FFEAA4EBDA99E9DF9DE2D996E7E19DEAE79FDCDA90D1CF84DDD78DE7E195E2D98CEEE197 E8D991F4E59EF9EAA5E4D793DDD290E7DE9AE7DF9BF4EDA8F8F2AADFD88EDED88BE7E094E6E598 E6E599E1DA8FEBDA91F9E098E2C27BC19E57B5924BDBBA74FBE7A0F6E099F9F2AFC4C1882B2D00 AFAD75E8E4A6C0BA7AF1EAAAE6DFA2EEE8AFE9E5AFE1DEB1E5E4BDE2E3BACED1A3999674A89F8C 8C766A5C42302A0E0052390DBDA569EBE3ABF7EBC2E5E0C8EAE8C2FFFCCDBF8C7D9F593CB7773F E1BE79FFF9D17D7A633C3A1CDED992FAF6A4C1BE7BC5C6845F5E27645D360D0400B2A870F6F1B0 F6EEADF6F2BB6F6F4B090D0521291C161E04DBD6A4FFFEC1BEB578180C00D4CD88F7EFA7E0D39C E4DB90E8DF8FE8DA96EBDF93E8E095DBD292E8DFA2F3ECB2DCD79BE1DE9BDCD98DDBD585E6DE8A F0E293F5E19BFDE5A4E0C47DC6A051CDA85BD7B56BF6DF96F3DD97FBECA9F1E7A6E8E2A5E9E8AC F3F4BAE3E5AAE5E5A3F4F2ADF3F1ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF3F3F3D6D6D6ADADAD8787878B8B8BA5A5A5E8E8E8FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDECECECC7C7C79F9F9F959595E3E3E3FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEAEAEABDBDBD9495947F7F7F7A7A7A7B7B7B7B7B7B7B7B7B7B7B7B 7A7A7A7C7C7C7E7E7E7F7F7F838383B5B5B5EAEAEAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDFDFDFB0B1B09898988A8A8A808080808080949494BDBDBDE5E5E5F8F8F8FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9EDF0F0D2ECECC5F0F0D0F8F8EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F4E3F0E2B6F4E9BFFFFDECFFFFFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0EAEBCFB3B3C16969D53233EB9091FEFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF1B0B1DD4C4DD66F70DFD7D7F2F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDEDEDEDD9D9D9C3C3C3ABABAB9494948383837F7F7F888888959595A4A4A4CBCBCBF2F2F2 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE6E6E6BFBFBF9B9B9B9E9E9EEDEDEDFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4D4D4D4 AAAAAA868686878787AFAFAFE6E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEEEEEEBEBEBEA1A1A18C8C8C7F7F7F828282919191B7B7B7E0E0E0F5F5F5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCF7E5E5BF9FE0A182 E79E86E8AC90CCA17D8B533857180C593B47604B566C586280779D8B8BC68E8FCB999AC9B1B2C8 C0C1C8C9CAC6CCCBC3B7AE7E9D8B30A18C40B1A177B3AC87B2AE91B2A29CB1A79FB4B3A4C0C0BB C7C6C9C4C5C59FB69F7AA87A9FB69FC7C6C7C6C6C6C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5 C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C7C7C7C1C1C1A5A5A58D8D8D8E8E8E8D8E8E938B8BB77575 DA7C7CE8ADADF3DEDEFDF9F9FFFFFFFFFFFFFFFFFFFFFFFFFDF9F9EEC5C5DC8585D97474DA8585 DAC8C8EAE9E9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFCFCF0F2F2DCBEBECE9191E8B2B2FDDEDEFFF6F6FDFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D46BE3D46DECDD77EDDF79EBDD7AEFE17EF1E483F0E383 DCCF70D6CB6CF7EC93FEF2A2FBEEA0F2E496FDF3A5FAED9EE6D98AE8DC8AEDE18FF4E896F0E492 EFE390EADF8FECE394EDE495EAE291EFE796EADF8DE4D985DDD17BEBE088F3E58DF6E88FF3E58C F4E892F6EA96F5E995F6EC97FAF09CF4E997F6EE9DF4ED9CF2EB9AF1EA9AF2EB9BF3EC9CEEE797 F0E998F9F39FF9F39EF3EC95F4EC95FDF39CFDF39EFFF5A2FFF2A3F7EA9CF1E692F1EA8FEDE68C EEE78EF2EB93F6EA94FBED97F0DE88EDD881D1B75FFDE890C8A84EFDEA93F2E391EADC89EDE18D F1E591F7EC9AEDE292EEE393EEE393EFE294F1E496F6E99BF0E498F5E99DF5E99DF8EA9FFAEC9F F6E99BFDEDA0F7E799EBDB8DEEDD8FFAE99AFEEE93F6E67CF6E793F0E59FEDE59FF1EA99F8EB9A FCE6A0896D42523621FAF8C1DED082DDD788E6E094F6EC99E6D77FF9E993EDDF93E6DDA0E8E2B1 2F2D1B636134D0CC959F9857E8E095E6D99C3D2711BFAC59F8E78DF1E398B5AB74706C2AEDEC9C E7E095E0D589E9DC968C8456827D33E7E38AE7DE8EE9DE8FECDEA0BEAC83635911F0E89BF4ECAC 655F23CCC383EBDE98DBD289E9E095A2994EC8C075F6EEA5F3EAA5EDE5A6D3C9925A4F1F53481E DCD195EADE94EAE094FCF1B89C8F67544920F7EEAAF0E897E7DF91F1E29FEBDB8FF6E790F2E598 F6EA9EF0E498ECE097F2E69CF4E89EEDE199F6EAA2E8DC94E8DB95F4E7A1F0E39DEDE099EDE199 EADE95ECE096EEE298E5D98FEADE96DCCF89E5D893E3D594F3E5A3EFE49DEEE59AF3E79DF7E89E EED88FFFE7A0976F2AC09954FFE29AEDD589E4D788E8E693EFE697EBDF93E9DD91EDE198F1E59B F1E59BEEE29BF9EDA5F5E9A1F3E6A0ECE09AE5D08DE0B87C9D4917D07C45FCD58CEBE292F0ECA2 E6D799E3D79DE7DA9FD5C98CBEB977DBD68EE5DD95F3EBA3EBE49EE6DF99E8E29EDFDA97E1DC9C DFDB9CE0DC9DEAE6A7E2DEA1E3E0A3E2DC9EE8E2A3EBE3A2E7DE9AF1E49EF6E59DFBE59CFFE59B CCAF65A7883DE6C87FFFEAA8F4E19FECDF9BECE29DE4DE96DBD78ED9D88DDBD58BDFD98FD4CB81 EFE29AE7D992F0E39BEEE19BE5D894D9CE8CE2D998EDE5A4E8E19DEAE5A0E7E39AD6D288D7D48A DEE398E0E69EE3E39AE6DD95F2E098FFEAA4F5D794CCAD6A9A7B3BD6B87CFFE9B0FFF7C14B4819 4C4E2BE4E2ABEFE8ACA59C59E0D790E1D48FE4D695E5D99DD1C691C8BF8FDDD3A9D1BF9F3E290E 2C1400110000381D009A7F4FF5DCA1FFF7BAD9C594B7A588A594898488767F8B725A42326A3B23 8552309D8057D0C3A3FEF6E1E3CDB8FDF6D2FFEEC1FFF8C5F9F1BAE7E6BAC2BB9E0D0200D4C78C FFF6B5DDD292FFF9C279754C000000030A00828A5AFFFDC8EAE29FC4BC7B4C4010EBE29DE8E096 E5D9A1EEE59AEBE293F1E3A2F4E89EEBE399DFD795E5DD9FE5DA9EF1E6A9F1E3A1E6D98EE4D585 ECDB89FEEC9DE7D288B49B58AB883BCCA651F9D481FFE99CFEEFA4EED992EADF9CE8E2A4DBDBA1 D8DDA7E5EFBACFD8A4E4E1A9F2EAB1F3ECB2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDBDBDB999999525252202020262626565656D4D4D4FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDBDBDB9595954E4E4E3B3B3BCBCBCBFBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC9191915152513132312B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2C2C2C2626261818180E0E0E1A1A1A7A7A7ADFDFDFF9F9F9FEFEFEFFFFFFFFFFFFFFFFFF FCFCFCF4F4F4E2E2E2A7A7A76869684F504F4141413333332D2D2D3E3E3E717171ADADADEAEAEA FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F3DBE4E4AEEBEBC2FBFBF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF5ECFDE8CDFBEAC4FAF8D6FDFDEEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEAEABFB1B0B16A6AD33C3CEC9697FEFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF1B0B1DD4B4CD7696AE1CDCDF3F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAFAD0D0D09F9F9F7979795A5A5A4141413131313030303A3A3A4444444D4D4D818181 BCBCBCE3E3E3F6F6F6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CFCFCF8787874545454C4C4CDDDDDD FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFADDDDDD 9292924F4F4F1E1E1E1F1F1F696969D0D0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF6F6F6E2E2E2BABABA7A7A7A5A5A5A4444443232322E2E2E393939656565A6A6A6DDDDDD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFCFCE7F7F3CAE8D49D E2B188E29588E79897CB94916A4E4B1811101A16183642355C755B8595889CA1A2A2A3A8A4A4A9 A7A7A9A8A8A9A9A9A3A6A78B988C56896E2B948056A5A299A7A6A3A0A09D918F8E8C8B7B8F8F70 9C9C88A2A3999DA39B8496856F8B6F8C9A8CAAA9AAA9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A8A8A8A2A2A2979797808080636464575151 996363DE9797F6D5D5FEFFFFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFDFAFAF1D1D1E29191DD6666 DB6666DBC2C2EBEAEAFCFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF7F7FDF4F4 FBF6F6FCFCFCFAF9F9E8E1E1DFA3A3DD7373F0A9A9FEE3E3FFF9F9FDFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDF78F3E37FECDE7AE4D573E0D272EFE181E5D879 E4D779F6E98CE6DA7FEEE38BEFE295F2E59AFAEEA1FFF8AAF2E698E3D787EFE394F5E997FAEE9C F5EA98F7EB98F0E896EFE796EEE694EBE391ECE490EADF8CEBDF8BE4D884EBDF8AEFE08CF6E790 F2E38CF1E590F6EA96F6EA96F8EE99FEF3A0FCF19FFBF3A2F6EE9DF3EC9BF5EE9EF7F0A0F7F0A0 F4ED9DF2EA9AF6F09CF4EE99EDE68EEDE68EF6EC95F6EC97FCF19EFEF2A3F9ED9EF2E893EFE88C F0E98FF3EC92F3EC93F2E690F3E58FF8E690F5DF88F6DE85F1D278D9BD63FBEA93EFE691F0E490 F5EA95F4E995EBDF8DEEE393EFE494EEE393EEE193F0E395F5E89AE7DC8FF0E497F1E598F5E89B F8EB9DF3E698F0E092EFE091EFE091F4E393F7E696F9E68FF1DF80F1E291F2E79EF1E99DF0E793 F0E38EEDD990F4DCA92A1200887546FAF1B1E8E49DF4F1A5EAE18EE8D981F0E089E5D689EBDFA5 DCD7A8383623474519ACA975767132FEF8AEE1D4983F2B10C3B05DE7D67CEEDF96AAA06C746F2F F1F0A0E7E397D8CD80E7DA97807745A49F53E6E28AE1D889DDD383E8DA9B9F8E657F752DE0D98B DBD393565014E4DA9DE5D896F3E9A2DFD68B948B3DE4DD91E7DF97E5DC9AE2DA9FB3A9734D4212 5C5129EBDFA6E9DD96EAE197F3E8B186785C281C00E3DA96DBD482DCD483EDDE98E4D584EBDD83 F5E89AF1E599E9DD92EADE94EDE198EADE94EADE96F2E69EEADD96ECDF99F3E6A0EEE19CE5D892 E5D893E6DA91F0E49AF6EA9FF6EA9FEDE196E0D38DEEE09DEFE1A0DCCE8FF0E59FE7DF94EBE096 F0E197F1DA92FBDE99835A16C89F5AFFDF99EDD589E0D384E5E38FE1D88BEBDE93F0E498EEE298 EADE94EADE94EEE29AEEE29AE4D891E4D792F2E59FFEE8A5C6945AA44A19E29058ECCE85D6D484 D2D48AD0C587C6BF86D8CD95EDDFA5C6C481DDDC96DEDB95E1DE97DFDA95E3DF9BE8E4A1DBD696 DFDA9ADAD697D1CD8ED7D393E3DC9EDBD495E1D898F2E9A8F2EAA8E3DD97EAE29AF4E99FE2D489 E4D285FFF0A3E0C7799E8338E3C785FFE9A8FCEAA5E9DA96E6DE96E7E299E5E198E2DB93E3DD94 D8CE87F8E9A5ECDF98E2D990E0D48EE1D892D5CB88DCD392EEE5A4E0D898E6E19DF3EFAAD8D78D D6D58BE2E39CD6D794D7D590EAE39CEFE49CEEDD98FBE6A4FAE7AAE4CB93AD9462E4CA9ECBB487 120B00A9A678FEFBC8E9DB9EF3E19DECD68BF4E094FDE9A0F0D895E4CC8EE8D39AEDD39DE2B98A D9B0829973469E7B4EC2A47DA288637E69454C3D201C12000000000704000E1809081408261606 2600002802001200000500001D16075E49417E574EB0806DCDA383B2A375F0EAC58E80692B1800 EDDA99F2DB99F8ECA9F3E0A36D602E0B01004A4829F9FCC1EBE5A8E8E19BF0EAA5E1D6A0F5EDA6 F5EDA3F3E7B0F1E7A0EDE499FDF3B6F7EBA6EBE49CEBE8A4E4DC9DEADCA1F7E3A9F2DA99F5DE96 FFE697F5DE8CCBB263A68F44BCA560EDD285FFE998FAE797FEE598FAE79CEDDF99EAE2A1D7D496 E1E3A9E8EEB7E2EBB6E0E7B2EAE5B0F3E9B4F7EDB8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCF4F5F4B7B7B75C5C5C2121211919191E1E1E484848D0D0D0FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBD8D8D89292924F4F4F3F3F3FCCCCCCFBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5AEAEAE848584777877747474757575757575 7575757474747878785D5D5D2323230000001A1A1A838383EBEBEBFDFDFDFFFFFFFFFFFFFFFFFF FCFCFCEDEDEDCCCCCC8484846768675E5E5E7272727E7E7E7777776363634949494243425D5D5D D1D1D1FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F2D8E3E3AAEBEBC4FDFDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FEF4E8F4EDC8ECEBB9F6F6DE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3EBEAD9B7B6CB7A7AD95758EDA5A6 FEFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF1B1B2DE4B4CDA5B5BE6B6B6F5E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF6F6F6B2B2B26A6A6A4B4B4B4848485353536666667272726D6D6D5B5B5B3A3A3A 3E3E3E595959A3A3A3D8D8D8F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9CCCCCC848484474747505050 DEDEDEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEBEBEB B8B8B84E4E4E2727271818181515155E5E5ECDCDCDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF4F4F4CECECE9292926464645C5C5C6D6D6D7F7F7F7A7A7A6262624646463535355A5A5A B9B9B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FEFEE8F4F4CBEBE9B3 EFE8C1F2DECAF2D1CCF6D3D4E0C7C88D82834446474647476675668DAE8DADCCACC3D6C2D2D9D1 D9D8D8D8D8D7D7D7D7D4D4CBC6C699BCAE6EB89A58C6B28FD6D4D1D8D8DAD4D4D5CCCCCCCACABA C9C9A6C5C498B9C099ACBFA2A5BAA6ADB8ACC4C8C4D8D7D8D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7 D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D8D8D8D5D5D5CACACAB6B6B6949494848484 898787BFA8A8EFD2D2FDF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBFADCDCF09F9F E46060DA5252DBBEBEEBE9E9FCFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFDFFEDEDFDD6D6 F4C9C9ECD2D2F5E7E7FCEFEFF4CBCBE87E7EE14747F19F9FFEEEEEFFFEFEFDFEFEF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D471E2D270E8DA79ECDE7EE9DA7BE0D476 E3D67AD1C46AE5DA7FF2E78DF4E892EADF92E5D98FF3E79CF5E99CEEE396F2E798F4E999EFE495 F3E897EFE492E8DD8BE2D986E4DC87E3DB87E2DA86E5DD88EBE18CEFE38FE8DC88E7DB87E2D380 EBDC89EDDD8AF7EB97FBEF9BF7EB97F3E994F7EC99F6EA98F7EF9EF5ED9CF3EC9BF5EE9EF7F0A0 F8F1A1F5EE9EEFE897F0EA96EFE994EEE78FF0E991F0E68FEDE38EF1E693F6E99AF4E799EDE38E E9E284EDE68BF1EA8FF0E98FEDE18BECDE87FBEA92E9D37BFDE48BC0A248EFD278F6E78FEBE48F E8DF8AECE28DF3E894F1E593F1E495F1E495ECDF90E6D98BE4D889E4D98AE7DC8DEDE293EDE293 F2E496F4E798F0E394F3E493F1E291F3E493F3E290F6E593FCEA98F7E092EBDC8BEBE28EF5EE98 F8EE9BF9EA9BFEF3ACF3DA9E856F3E140500A29765F1EEB2F6F4A9E3DB89F0E18AE9D982F1E194 ECE0A6E8E3B3524F34333206B2AF7C6C682CE2DE94DACE9238230BC0AF5DFCEF95F3E69C9D945F 888444F0EF9FE6E197EEE398F2E5A2635A28C6C175E7E28ADBD283DDD282E9DB9D7D6B42A89E57 FCF5A7AFA6675E571CFFF9BDE5D799F5EBA6C0B66CA59C4DEFE89AE5DC95EAE0A2EDE4AC978D59 3F35045F5536F0E3ACE3D595E7DD97F7EBB7958769211600CFC681D7D07DD8D17EE5D78CDED07B E2D577EDE191E9DD92E5D98FE9DD93EBDF97E4D890E4D890ECDF99EBDE98EDE09AF0E39DEDE09B E9DC98E6D993E5D990EEE298F0E498E9DD92F2E69BE0D38DFEF0AE9A8C4B7C6E30FCF2ADE3DB90 E4DA90E9D991F0D892EBC984835814DDB672FFEAA4F6DE92E0D585DEDB89E2D98CECE095EEE298 E9DD93EBDF96F3E79FEEE29AEBDF98E3D690E1D48EECE099F9E3A09B692DAE5221F1A069EAD588 CDD282B6BA71AFA669C7C48BACA36DD8C890E0E09ED5D993D9D794DBD997E1DD9AE3E09DD5D28F CFCB8ADFDA9AE1DC9CD1CA8BCEC787E3DB9CDFD594E8DF9AF2E9A3EBE49FE5E198F1ECA3DDD98C DAD285E8DC8DE9DA8CF1E08ED8C173BE9C59DBBD7CFFEBA8F8EEA9EADE98EBE39BDFDA91E2DC95 E5DD97E1D792EEDF9CE8DC97DCD58BDAD28AE1D993D8CF8CD9D190E5DD9CDCD493DCD795DEDA96 C9C67ED1D189D5CF8DD0C689D3CA8ADDD491E5DB96EAE29DEBE2A2EDE1A7FFFAC9E6D6AE6A5839 24140B190C00574827DBCC9DECD399F6D792FFEB9DFFDD8DE9C475DBB567CAA35EBB9756C29757 B4813BA7753380551A7854255539171D09080F0100221B1254533E939670C4CC94CCDCABD9E0C0 9F8566764624B48452866F409F9A73656350372B1F0D000029080854372995855D9485611E0500 6D5420C6A962D8B56FF3D38CFFE7A274581F3E270DD0C291E4DD96DFDA98DAD58EF5F1AAE8DEA6 ECE59DE1DB92EADFAAEDE39EE5DB95E7DCA5D8CE8FE1DB96E4E49EE6DD9FDFCF93F7DCA5FFDEA0 F4D08CD8B367B18E3FBFA254EEDA90FDF2ABF6E69EEEE197EADF96EEE39AF3EAA3DDD693E7E3A4 E2DEA0D5D59AD4D59AEAEBB3E6E8ADEFEAAFF2E9AFF9F1B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F8D7D8D78E8F8E3939391718172C2D2C2C2C2C4A4A4AD1D1D1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE2E2E2AFAFAF828282797979DBDBDB FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2D8D8D8CACACACDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCCCCCCCACACA9999993D3D3D0A0A0A3E3E3E9F9F9FF9F9F9FFFFFFFFFFFFFFFFFF FFFFFFF8F8F8D2D2D29697963838384A4A4A7F7F7FB1B2B1CBCBCBCBCBCBB2B2B2797979353635 202020ACACACEAEAEAFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF9F4F6F0D4EAE8B5F0F0CDFDFDF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFBEDEECCE1E1A5 F0F0D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBECECEFBCBBE48786DF6C6C EEB0B0FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2B7B7DF5555DB5050E89898F5D7D7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F5F5AFAFAF6969695B5B5B6E6E6E8E8E8EB4B4B4C6C6C6B9B9B9979797 5C5C5C272727101010616161B2B2B2EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAD9D9D9A5A5A57C7C7C 858585E7E7E7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5 CDCDCD8B8B8B2F2F2F2222222B2B2B202020606060CDCDCDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAFADBDBDB9999994C4C4C323232707070A3A3A3CBCBCBD1D1D1AFAFAF7979792D2D2D 2424248F8F8FF1F1F1FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF8FDFDEAF7F7CDEDEDBA E7E7B6F7F7E7FFFFFFFFFFFFFFFFFFF4F6F6C0C1C1939393949394ACB7ACC6E1C6CAF3CAD7FAD7 F3FFF3FFFFFFFFFFFFFFFFFFFDFBEFE6E0A1E1CE83E7C888F5E2C2FFFFFAFFFFFFFFFFFFFFFFFF FFFFF7FFFFE3F2F0C2D4E2AAB5D8A2BDDABAE6E9E5F8F7F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEE8E8E8CDCDCDB6B6B6 BABABACCCCCCEAEBEBFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFE7E7 FBADADE95B5BDA4040DBBABAEBE9E9FCFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFEF2F2F9D8D8F7B8B8 F59999E98B8BDF9494EAAAAAF7B3B3F79191EF5F5FE84444F4A9A9FEF7F7FFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF7FEDDD7DE6D778E7D97BE7DA7C D8CB6FEBE085ECE188E4D980EADF86E6DA88F8ECA3F2E69CE8DC92E5D98EE9DD91EFE495EDE293 E8DD8CF0E594F1E693E9DE8CE6DC89E1DA82E1DA82EBE48CF0E991EFE590EEE28EEEE28EEBE08E DED07FE8D988EDDE8DF4E895F9ED99F5E995F0E691F3E995F4E997F6EE9DF9F2A1F8F1A0F4ED9D F4ED9DF7F0A0FAF3A4F3EC9CF7F19DF6F09CF7F098F8F098EEE38CECE28DF0E591F4E798F2E597 EEE48FEDE689EBE489EDE68CF0EA90F4E892F4E58EF9E890E8D37BEAD076BB9D43FFE68CF3E58C ECE690E7DF8AE7DD88F0E591F2E694ECDF90ECDF90EADD8EE5DA8BE5DA8BE9DE8FECE191EFE494 EDE292F0E394F3E697F0E492F1E292F2E390F2E390EAD987EADA85F6E298FAE3A0F2E18FEFE586 F4EE8DFAEF9DF6E69FFDEFAEE7D18EC5B4759385511C120CC5C28FFBF9B0E3DB8AFAED96F6E690 E9D98DEEE2A8F9F1C3666443201E00B8B584676328E9E59CCABD83412D02D2C272FFF69CFAEEA3 756D37A7A363EBEA9ADCD78DFCF1A7C5B8754F4715DDD88CEBE68EE4DB8CEEE494E5D79968562D C9BF78EEE79A655D1D90894EF6EBB2E7D99DE5DB95BDB367D1C879E5DE90EAE19AE7DD9FDFD69F 807643615726645936F5E8B1E9DA9DE8DE9AEDE1B0908267090000D3CA85F0EA94EAE38FE8DA8F E4D67FE4D776EDE191EEE299EDE197F0E49AF1E59CEBDF97EDE198EFE29CEEE19BF0E39FF4E7A3 F2E5A2EEE09EE9DC96E5DA91EBDF96E8DC90E3D78CEEE298F4E7A1E5D8943F3102AC9F60FFF5B1 E6DE93EDE398EDDD95F7DF99EBCD887B4F0EE3BB7AFFE7A1FCE49AEDE293EBE896EAE094EADE94 E9DD93EADE94EBDF96EADE96E9DD95EBDE98EEE19BF0E39FF2E6A2F8E29F845115AE5221F8A971 DDCE81B1BC6AB0B86EC9C287DEE0A6BCB47EAB9A63DEE09ED6DC97DBDD9AE3E2A2E8E7A6E6E5A4 D7D393D2CD8CDDD896E5DD9CE6DD9CE1D897E0D695E0D38EECDD98E7DE96E4DD95E8E59ADFDE93 CFCD80DAD989D8D282EDE594D7CB78FBE898ECC882B48F4DDFC07DFFF1AAEFE199E7DF96E4DE95 DED790D4CC89DCD18FDDCF8EEADF99DCD78DDFD890E3DD96DBD490D4CC8BC5BD7DC4BC7BD6D18F CECA86C2BF79CECC85D6C68AE3CC94E7D49AE5D799EEE6A3F1EBAAF1F1B1EFEDB68E8C60262200 100A061B1003100100432B19DFC197FDE5ADEFCC87C59547CB9744C28E3AB78232BB873DE0AE68 FDD18FA984478E6C3C5E411F1F0C00140405584F2DADAA7DEBE8B3FFFAC1FFF3BEEDDEADEDE2A9 FFFFC99C6746985323FFDC90BDA24AF0F0B5F3FCDFF1F6DDB6B88E61603A0907032B1E00432B10 341409CEAC75CFAB60B3893D9A6E23C2994ED4AF6DF2D1ABFFEFB5E5D785F0E9A3E6E299F6F2A9 D9D39AEBE59ED6D088EFE5B1EFE5A3D4CA88AFA36F8D8148BFB977EBEDA7E6E1A1FAE6ACFCDAA4 DBB076A97A39C8994FECC478F7D78AFFF0A6FCEEA8EAE5A1E7EBA8F7F8B6D9DB99DDDE9DE7E7A7 EBE7A8E7E3A4D6D293D0CA8CE9E2A4E5DF9EEAE79FE8E69CF1EEA6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F6768675253524D4E4D4A4B4A393A394A4A4AD1D1D1 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFCFCFC FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFEFEFEFEFEFEFEFEFEF9F9F9EEEEEEE4E4E4E1E1E1 F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFDFDFDFEFEFEFDFDFDFCFCFCFCFCFC FCFCFCFCFCFCFDFDFDFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF7F7F7F4F4F4F4F4F4F4F4F4 F4F4F4F4F4F4F5F5F5F0F0F0D8D8D89595953C3C3C1E1E1E757575C0C0C0FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFECECECA2A2A25859583131317A7A7AD7D7D7F2F2F2F4F4F4F3F3F3E7E8E7BDBEBD 5A5A5A1A1A1A797979C1C1C1F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFE8D1FDE9C7FBF5D0FCFDE8FFFFFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEEEECC E2E2A7F1F1D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAECEBEDBBBAE28585 DE6A6AEEB0B0FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C5C5E17070DA5050E27A7AF3C8C8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE0E0E0CACACAD8D8D8E1E1E1E8E8E8EFEFEFF3F3F3F0F0F0 E4E4E4C2C2C2656565131313343434878787DDDDDDFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFDFDFD FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFEFEFEF7F7F7EBEBEB E2E2E2E3E3E3FAFAFAFFFFFFFFFFFFFEFEFEFDFDFDFCFCFCFDFDFDFEFEFEFDFDFDFCFCFCFCFCFC FCFCFCFCFCFCFDFDFDFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E5E5E59797975A5A5A5E5E5E525252424242262626616161CDCDCDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2A4A4A45757573A3A3A606060CFCFCFECECECF4F4F4F6F6F6E7E7E7C3C3C3 606060232323666666BCBCBCF1F1F1FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFEFEE9F6F6CCE5E5A9 EDEDC6F9F9EDFEFEFBFFFFFFFFFFFFFFFFFFFDFDFDF2F2F2E8E8E8E9E9E9EEF0EEECF6ECBEEABE B7E8B7E2F6E2FFFFFFFFFFFFFFFFFEFAF5E5E3CB7CE6C675F5D4A2FDECD9FFFDFAFFFFFFFFFFFF FFFFFFFFFFFDFEFEF9FFFDF7D3E7C39ACC81A9D396EFF5ECFEFDFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9DADADAC5C5C5 E3E3E3F0F0F0F5F5F5FAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD FFF2F2FABCBCE95757DA2F2FDBB6B6EBE9E9FCFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFEFEFFBCECEEA7575 E14747DF3D3DDE3D3DDC3A3ADF3030E12626E12020EB5454F89898FDDADAFFFBFBFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7D776DBCB6BE3D474EEDF81 F0E385DBCE72DDCF75EDE188EBDE86ECDF88E4D886EDE296F1E59AE3D78BEDE195F4E89BEFE496 F8ED9EF3E898F0E596F2E796EFE494EDE290E7DC89E5DA86EBE08DEEE390EEE28FEFE18EF0E28F F0E390E8D987EDDE8CEFE18EF1E690F3EA91F0E790F0E791F4EB96F2E895F9F19DFCF5A0FBF4A0 F6EF9BF5EE98F9F19FFBF3AAF6EEA5F9F0A4F9F2A2F5EC9AF1E996F0E692F2E994F3EA95F3EA98 F3E796F1E691EBE289E5DE84E8E388EEE98DF3EA8FEFE086F9E88FE9D177DEC269C5A74FFFEB92 F2E28AEBE28AEADF87E8DE85E9DB87E5D885E8DB8BEDDF91EEE091EADB8FECDF92F6E99CEFE493 EDE392EEE494F2E898F5E99BF5E89AE3D688E7DC8CF0E494ECDF8DEEE18EFAE999F3DC91F9EA93 F3EB8EEEE88FF1E596F4DD95FFF7B2BC9C53C4AA66FFF1B760532C3A3517D6D693F4EFA8F0E799 ECE391F6EDA0EFE6A2EEE9AE746F43252000BBB5896C6536EBE3A0AC9F6259450FEFDC8FF8E695 F4E89D433C07BCBB74E7E89CDFDA91FAF0A8716523797232F6F1A1F1ED98E1DA8DF5ECA1C4BA79 887B47EFE5A1D9D18C5D5519DCD699E6DD9DE3D995C8BE79BEB56BEFE796D8D17CE3DB8AE0D793 DCD4A173693A70693979733FE9DEA2EADC9DE5DA98F0E5ADA1976A191000C1BB77EFE89AEBE395 EBE194EBDF8BF0E48BEADE8FEEE297E6DA8DE7DB90E9DD92ECE095F0E499ECE096E6DA91EADD95 F1E49CF2E5A0ECDF9FE3D791E4DD8EECE592E6DE8DE5DE91DCD38EF4EAA98577494F411EFEEFAB F3E49CE9DD92EFE59BEDDD95F2DD97E8CF878E5715EEBA74FDE596F2E492F0E796EEE293F2E095 EBDF91E5E292EBEA9CEDE59BE2D28CEDDA95EBDC98ECE29FE6DC9CF2E6A8EDC98C944A0DB4682B F9CA85DFD688CBCA7DC7C77CBAB973C1C47FC3BD7CA09052C2BF7ECACB85D2D18AE2E09AE3E19E E9E5A4E2DD9CD8D392D1CD8ADCD895EEE8A4E3DF97E0DB92DCD38BE6DC93E3DB92DBD58BE8E399 CECB81D1CF83D0CD80EBE697DBD486DBD284DFD287F4DA98E6C684B3924DCCAB64FFE79CE2CC7C F0E191EAE092E3DB91EBE39DDAD391DBD796F1EFB0F5F3B3EFEDAFE1E0A1E8E7A7C3C281A9A766 D8D695D5D390C9C782EBE7A3E1D4A7F2E0B9F3EAB2F4F0B9ECECC1C0C0A18688602B2C10171400 7A7045DFD6A8A78E649C6F49B58055AF7B429B6424B78232CA9540D8A653F1C377F8D391FFE3AA DFBD899676486C55284933191A060063543BCBC59FF5F0BFFDFCBCE8E59EDED890DAD08FD6CA91 E6D69AF5D69D95532F95571BFDCC76B2832FEBDB8EDCE3A2DBDDABEFF3B7F6F8C3D3D1B05C583D 000000281811CAC0A1FFF6CDFADCABD2B073DEB76DBD9448B28547C89B53FCD180F4CD88FCE099 F3E39AE2D896E4E39BE0E09BDDD8A2D5CE92E5DB9FEBE0AEE5DDA6F1ECAFD0BF78CDB571D5BA7A B7985AB39253C7A966F3D68FF5E59EF2DC97F4E29EF2E2A2ECEAA6E8EEA8EAEDACEBECB0F3F2B9 E7E3AFF9F3BFE6DEA8EFE6ACEDE5A6EBE29FEDE69DF9F6A6F2F09DF6F4A2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE9E9E9C2C2C26C6C6C606060888A888B8C8B5859583B3C3B4A4A4A D1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF5F5E6DBDBBEBBBB A3A4A49797978D8D8D8A8A8A969696A2A2A2B3B3B3CCCCCCE5E5E5F6F6F6EEEEEECACACAA5A5A5 9A9A9AE5E5E5FDFDFDFFFFFFFFFFFFF6F6F6DBDBDBB6B6B6939393BBBBBBE4E4E4C5C5C5A4A4A4 8E8E8E8D8D8D9A9A9AA9A9A9C3C3C3F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF7F7F7C5C5C57575752E2E2E2D2D2D9F9F9FD9D9D9FCFCFCFFFFFF FFFFFFFDFDFDF4F4F4C9C9C97373733738375D5D5DA9A9A9F2F2F2FFFFFFFFFFFFFDFDFDF5F5F5 CECECE636363141414575757A7A7A7EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF3F2E4BBF4E8BEFCF8E0FFFFF7FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFB F6F6DDF0EDBEF7EDCCFFF2E6FFFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E5E4EAA4A3 DE6D6DDE6767EEB0B0FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C7C7E27878DC6161E58D8CF4D0CFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F4EEEEEEF9F9F9FEFEFEFEFEFEFEFEFEFFFFFF FEFEFEFBFBFBE9E9E9828282202020222222717171D6D6D6FFFFFFFDFDFDF5F5F5E4E4E4C5C5C5 ADADAD9A9A9A8C8C8C8B8B8B9393939D9D9DABABABC5C5C5E1E1E1F7F7F7FFFFFFFCFCFCE7E7E7 C2C2C2A0A0A0A3A3A3EEEEEEFFFFFFFAFAFADFDFDFB9B9B99A9A9AB1B1B1E0E0E0C6C6C6A2A2A2 8D8D8D8D8D8D989898AAAAAAC8C8C8ECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC EBEBEBB8B8B86E6E6E5252529E9E9E8080804B4B4B272727616161CDCDCDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF3F3F3D4D4D47272723C3C3C575757999999ECECECFFFFFFFFFFFFFFFFFFF5F5F5 D5D5D56C6C6C202020515151A2A2A2ECECECFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCF4F4F4D1EDEDB9 EDEDC5F5F5E1FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFF9FDF9 D2F4D2BCEDBCC5EEC5DEF4DEFAFEFAFFFFF6FAF2D2E3BA54E8BF68F9E1BDFFF8F1FFFEFDFFFFFF FFFFFFFFFFFFFFFFFFFAFDFADEF4DEC0E8BAACDE9DBEE0A4E9EECCF9F8EBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEAEAEA DEDEDEF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFFFDFDFACDCDE95C5CDA2727DBA8A8EBE0E0FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF7CCCCED9292 E15D5DD65353CE6363D77979E98484EC7676EC6A6AEC7575F4A0A0FDD1D1FFF1F1FFFEFEFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDE7DF1E181DCCC6C D4C568E5D679F3E489EADC82F1E38AF5E78FEFE189EDE18CF4E99AE6DB8DDDD283EDE293F6EB9C EBE091EDE293F3E899EEE394EBE091ECE192EEE091EFDF91F3E395F2E393ECDE8DF0E291F0E18E EEDF8CEFE08DF2E38EF2E38FEEE18AF4EB91F4EE91F1EA90F2EB93F4ED96EEE691EFE792F5EE97 F6EF98F1EA90F4ED90FAF29EFFF4B1FBF0B0FCF2ACFCF3A9F6ED9FF0E896F1E996F3EB96F0E893 F0E893F1E893ECE18CE3D783E2DC83EBE78CF0ED8FEAE485F4E486FFEB8EE2C46DDDC069DEC46D FDEA95F2E288E9DC81EBDD84EFE189E8D983E5D683EBDC8BF5E595F7E79AF0E095F1E097F9EAA0 EDE392E7DF8DE7DF8EEDE496F2E99EF2E99EECE298E9E093F3EA9BEEE695E8E08DF2E48DF7E288 F9EB92EFE893ECE896EEE193F3DF93FFF1A6C99F55DFC078FFF0ADEDDF9F564E1A322C0EE0DC9D E4E09DDFDC94E5E096DEDA90F0EBA78780471E1300A298714E421FF0E6AA8274337C6A29E9D58F FFF3AEC3B66D463F07E3E397E5E59CE5E19CD4CA89393000C1BB69E3DE8CE3DD8FEAE49BEBE49F 847C3B908749FEFEC4A1995A8B8244E6DEA0E9E29DFFFAAC817833C1B871ECE494D6D071EDE68B DED68DCABF8F716840635F2F7C7A3DEAE29FE9DB9BE1D796FFF9BCB6AE70211A00ADA867ECE6A1 E8E299EEE598E9DF8EEEE290E3D889ECE192E5DA8BEBE091E8DD8FEDE193F3E799F2E798EADF91 EBE092F2E798EEE29BDFD494E1D98FE1DC87DDDB81DAD781E3DF92ECE6A6D2C78E443600CDC07D F4E39BEDDC90E9D98EEADF95EDDB96EAD792E4CD82A15C1BF3B268FAE990ECE78DF4EB98F5DF94 F4D98EE9DD8CDBE18BE0E996EFEB9EEEDC96F5DA9BF4E2A2F4ECABE8E2A3FDEFB5DAA9719F3E00 BA8338F1E190E0DA8DF1E29BE1D68CD9DB89C5CA77D1CC80E5D793D1C689BAB36DC5BF73DFD98F E1DC95E8E39FE4DF9DD2CE8DDDD999EDEAA6EDECA4E6E69CDFDF93E3DF95E4DE94E9E399DAD48A E9E399E2DC92E3DE94DFD98FDFD98ED4CE84E3DD92EDE69EECE09EF7E3A1DFC17DC9A259D6AF61 FED988FBE28EDCCF7BE1DA8EC8C681C1C181F2F2BDD1CFA886845C57552C494A1E777849ACAF7C D6D6A3EAEAB7D1CE9B756F3CCDC7969C967AC3C1A4C0C589757E4A313A21090C0B0000007B7753 D9CE91FEE7A8FFE9AAFFDA9EE5A16EB36830BA752EAD6B1AC1852BFFE18BFFDC8FFEE2A5FDE2B4 CDBA9865583A70624725160336270CA59671FAEFBEF8F0B7DCD595E4DF99DEDA93E1DE96DCDA94 D3CE8CEADFA3E3C5959B5633A06F2EF2CE79B36D30E3C067ECE987E2DA96EEE7A4D9D196F5EBC1 6F71431E24052628160B0706726960FCEFDAF4E0B3E4C885F9DB88EDBC68E4AE5DC88C429F5B18 DDA563FFDE98F7E29DE5E09BCFD18DD3D596DDDBA0E2D8A0DBCD98FAE9B4FFF3B9DBB06CC29B55 C3A35DE3C983E9D892E7DB96E6DE9ADAD190DFD597EBE0A3E9DDA2EAE5A0E8EA9FCECE8ADEDA9F E7E1AEE5DDAFF6ECBFE1D6A7E3D9A2DDD496DED993EFE89EF5EEA3EBE498E4DD92FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBC7C7C78888884A4A4A6D6D6DC1C2C1C0C1C05F605F3A3B3A 4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF8F8F2DCDCBBA8A8 726D6D494A4A3B3B3B2C2C2C2828283B3B3B4D4E4D676767989898CACACAEBEBEBDDDDDD959595 4C4C4C373737CBCBCBFBFBFBFFFFFFFFFFFFECECECB5B5B56B6B6B2626266D6D6DB7B7B78A8B8A 5757573434342F2F2F4141415353537C7C7CD5D5D5F4F4F4FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4A5A6A54D4D4D242424424242C1C1C1EDEDEDFEFEFE FFFFFFFFFFFFFBFBFBE0E0E0A0A0A04B4B4B2A2A2A979797D3D3D3FAFAFAFFFFFFFFFFFFFEFEFE F6F6F6CFCFCF636363101010464646999999E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E5E4ADE9E8B9F9F9EAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFDFEFFF0FDF9D8FCEAC5FCE4C5FEF9F3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7DCDC E68C8CDA5555DD6363EEB0B0FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C7C7E27A7ADE7372E9A8A7F6DDDCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F5F59090902A2A2A1C1C1C686868D2D2D2FFFFFFFAFAFAE0E0E0B9B9B9 8080805B5B5B3E3E3E2B2B2B2A2A2A3838384848485B5B5B8C8C8CC3C3C3EFEFEFFFFFFFFAFAFA CFCFCF868686434343494949DCDCDCFEFEFEF4F4F4BFBFBF727272343434595959AFAFAF8C8C8C 535353313131313131414141565656878787CBCBCBF9F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF F5F5F5C5C5C5818181555555636363D7D7D7A6A6A6505050262626616161CDCDCDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE1E1E1ABABAB474747333333828282D3D3D3F7F7F7FFFFFFFFFFFFFFFFFF F6F6F6D6D6D66D6D6D1E1E1E494949979797E9E9E9FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCF7F7E6EAEABF E8E8B6F9F9EDFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFFFCEBFFEBCEF6CEB2E9B2B9E9BAEAF8E9F6F9E1F3EAB5E1AD37E8BD63F9EDD4FFFFFFFFFFFF FFFFFFFDFEFDF8FCF8F3FBF3E8F8E8B9E9B9B3E9B3CCF4C7DDEFBEE3E3AAF3EFD1FFFCFAFFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFADCDCE96565DA2525DB9696EBD4D4FCFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4EEA5A5 DE5959DC6464D28686C8ABABD9D2D2F9EAEAFDDFDFFDD7D7FDEAEAFEF4F4FFFAFAFFFEFEFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEADA7AF0E080 F4E485EDDD80E5D679F5E68BEDDF86F0E289EFE58BF0E48DF2E693EFE495EDE293F2E798F4E99A EDE293E6DB8CEBE091FAEFA0FBF0A1ECE192E9DE8FF0E193F0E092F4E496F6E696EEDF8EEEDF8E EFE08DEFE08DF0E18CF4E590F5E691F2E68FEFE68BF4EE90F3EC91F1EA92F4ED96F3EB96EEE691 F7EF98F6EF96EEE78CEFE98CF7F098FDF3ACFEF4AEFFF5ACFDF4A7FAF2A1F8F09DF2EA95EBE38E EEE691F5ED98F6ED9BF4E996F2E692E8DE87DFDB80EEEB8CF8F192FDF395EAD175EBCB74CBAD56 F8DF88F9E28CF6E68CF3E68BF4E68DF2E48CF0E28BF5E693EFE08FF5E696F9E99CF7E79CF5E59A F5E89AF1E696ECE492E2DB89E9E091F2EA9EEDE499EFE69BEAE194F4EB9CF1E998E5DD8BE9DB85 F4DF86EEDF8AEBE492EDE899ECDF91F1DD91FFE59AB1873AE3C075EFD58EFDF0ACE4DDA3433D0E 353010D7D395DFDB9CDFDB9BDEDA9DE3DEA78C8656383008BCB492504626D9CE96534708A69453 EFDA99EEDA97695B18A19A52E9E8A3CFCF8CF6F2B26F6629766B2AF3ECA2F4EDA2E3DC95F8F0AE B0A869433B07E9E1A5D7CD92665D22F2EDB2E9E1A3F3ECA7CBC57B887F3FE6DC99EEE497E5DF83 E5DE85E5DD95C0B5868D845D575323848243EFE7A4F3E5A4ECE2A2F0E6A8A59E603832008B8646 EDE7A4E6E097EBE294ECE292EBE08EE7DC8DEBE091E7DC8DF1E697EBE091E7DC8DDDD283EADF90 EADF90EADF90EFE495ECE196EDE39DF1E99EE8E38FE2DF89DDDB89E3DF98FFFBBE7267375E512D EFE29CE9D98CECDB8EE2D288E6DA91EEDD98F2DF9AEFD88DA45E1DEEAC62FBE88EEDE98EEDE491 F7E096F6DA90EBDE8FDCE28DDFE794ECE79BF2DC98FEE5A5F8E6A7FAF2B1F0EAABFCEBB1C9955A 9F3F00CE9B4EFCED9CE7E295F4E39DECE096E4E595E1E692E9E496F5E3A0EADF9FDED792D8D286 E4DE94E9E29CE4DD99DED998D4D090E4E0A0E3E09DD5D48DDCDC93DBDA90F4F0A7EDE69EEFE8A0 E4DD95DFD890E4DD95D9D28BE2DB93E7E098E2DB94ECE59DDFDB92E0DD98EFE49FFEE9A2EACC83 AA893ED8B96DFFEA9EEADF99F0EBADD8D7A1F2F0C19591771B15150200000500000A0101000000 0D05052B211E281E1B3F35321D14113F37331411030C0E000005000A12011E23106B6B59FCF4E5 8C7E5EA7945AF5DC97D1AD6E9A6A38AB7240D3985DFDD38BFFE090B0812DB18838E9C683F8DDA7 CFBA917164426A6144130E003A341FD5CFA1FFFAC8E1DBA2E6E0A2E2DB98E0D793DDD38FE3D998 F3E8AAEADDA2EBDDA6E7C99C7636157A4D10E5C777C9864EF4D681E5E182D4CD8AEAE2A2F3EBB2 ADA3790301008A8A60EBE9CC6E6B570500006B6249F7EBBDE5D698F2DD92FDE593F2D381F1CC7C BD8E4DA67438B48349E6BE83EED396E9E09CEDF1ABE2E59EEAE19EFFE2A4EAB37CC58B51AF8444 E3BF7CF5D996FFF3AFEFE19CE5DD99F0EBA9DAD596D5CE90EFE6ABF5EAAFEAE5A3D0D089C9C887 E7E3A8FDF8C1F7F0BCFFF9C8D7D19BBBB57CE1DB9DF1EEAAEFE9A5F4E6B2ECDDACE5D7A6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEDEDED9494944141415C5C5CA3A3A2DFDFDEC5C7C5606160 3A3B3A4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECEBEB9A8F8F 5D55553C3A394546466464646F6F6F7575757C7C7C6868685C5C5C8B8B8BC4C4C4E9E9E9DBDBDB 8D8D8D3E3E3E282828C6C6C6FBFBFBFFFFFFFFFFFFEBEBEBAFAFAF6060601212122C2C2C5F5F5F 8282828E8E8E8D8D8D888888757575505050444444828382C2C3C2F7F7F7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F48686862B2B2B3030306C6D6CDCDCDCF9F9F9 FFFFFFFFFFFFFFFFFFF9F9F9C6C6C6767676404040444444CCCCCCF9F9F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD6D6D66767671414145C5C5CAAAAAAEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1E2E4ABE7E8B7F8F9EBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFFFFFCFCFBE9F1E9C0ECE2B0FBF9EEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7DCDCE58989D95050DC6060EEAEAFFEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C7C7E27A7ADF7776EAAFAEF7E0DF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCEBEBEB8181811C1C1C1F1F1F6F6F6FD5D5D5FFFFFFF1F1F1B0B0B0 6C6C6C4242424B4B4B6161616D6D6D7575757A7A7A717171626262888888BCBCBCEDEDEDFFFFFF F9F9F9CCCCCC7D7D7D3434343A3A3ADADADAFEFEFEF4F4F4BABABA6969692020201D1D1D595959 7979798D8D8D8C8C8C8787877A7A7A515151515151858585C4C4C4F4F4F4FFFFFFFFFFFFFFFFFF FBFBFBE5E5E58B8B8B454545646464A4A4A4ECECECACACAC505050262626616161CDCDCDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC7C7C7797979323232494949B1B1B1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDDDDDD717171212121545454A6A6A6ECECECFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFCF2F2D9E9EAC0 EEEFCEF6F6E5FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEFAFFFAE9FDE9CEF6CEB9EEBAB6E6B3C2DAA2D0C986D9B042EBC87BFDF3E2FFFFFF FFFFFFFFFFFFF6FAF6D5EBD5B5E7B5A0E7A0B0EEB0CDF6CEE9FCE7F5F0D5F4DEB0FBE1BEFFECD9 FFFAF6FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAE1E1E97272DA2F2FDB8787EBC8C8FCF8F8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF5F5FFD6D6 EE8080DC4040D98686DDC1C1E5E1E1F1F6F6FEFFFFFFFBFBFFF9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDB7B ECDC7CF2E384F4E588F1E285EFE286F0E288EFE38AEEE38CEFE38DF1E591F4E999ECE192F0E596 EFE495ECE191F2E797F5EA9AF6EC9CFBF1A1EFE495EDE292F5E798EFDF8FE8D889E7D887E6D786 EDDE8BEEDF8CEEDF8CF0E18BF4E590F5E691F3E78FEAE186F1EB8EF2EB90F1EA90F6EE98F7EF9A FCF49FFAF29CF7F096F5EE93F3EC8FF1EA91F1E89BF5EC9FF6EE9EF5ED9BF7EF9AFAF39DF9F39C EBE38DEEE691F4EC97F3EB99F0E491F1E591F4EA93EBE78CF3EF91F5EC8FF4E385D3BA5EF0D47C B79B44FEE68EF6E18BEEDE85EEE086EBDD84E5D77FE6D881F2E38EF1E290F2E293F2E294F3E396 F4E498F2E597F1E795F3EA97ECE392F3E99AFBF0A3F1E69AF3E89CE5DB8CE6DC8DEAE08FE9DF8D EEDF89F3DF88F1E28EF0E998F1EB9DF4E799F8E093FFEC9FB3893BE2C578FEF0A4EEE19AF2E9AC C6BE88352D123F391BCCC58EF2ECB9E1DBACE8E3B8696447201B008E886A6A64438C844C453910 D5C387EBD79AB09D605E4F16F2EBA8F1F0AEEAEAAB828047574E1CE1D69DECE7A5EAE5A2E3DE9E DBD5984D450CA59F66D3CD945D551DBAB479EEEAAEF8F1B5CFC887867E3AE5DB9FF4EAAADDD38A E5DE86D8D07BE6DD97ADA174B9B0895C58288B8947DED691E9DC98E9DF9EEFE5A7B8B071342E02 777132F6F0AEE4DE96E7DE92ECE293EBE090F2E798F1E598E1D588E4D98BE8DC8FF1E598E3D88B EEE295F0E497EFE396ECE093E7DC90F6ECA2EEE798E4DF8CE9E694E2DE93F7F2B2CDC78B201400 C3B677EEE299E8D88AEFDE90ECDB93E6DD95EFDF9BF6E39FF5E097A45E1CE9A65EF7E68CE9E58B E6DD8BF5DE96F4DA90E9DD8EDEE28EDCE491E6E094F1DC97F7DF9FEFE1A0F1E9A8F1E8A9FFECB4 CB945BA24302E6B466FBF19FE3DE92E6D690E8DC94E5E395EAEE9AEAE598EFDE9AECE2A1EBE39E DAD38ADFD890EFE8A4EAE39FDDD899E0DB9CE6E1A1E4E1A0DFDD99DDDC95E3E19BEAE6A1F2EBA4 EAE39DE2DB96E6DF98EAE39CE2DB96E8E19AE3DC96D7D08BE8E19BE7E39DD7DC94DBDA90EAE097 FEECA5D6BF7897803BCCBC7CF2E9B0F9F5C3DAD6AF59544305000048473297927D8C85714E4532 2319081106000000002F28140600000000000203001A1D051F2504373C1C848653AAAA75FFFFDC AE9C8B270E0080642FA1813AB28C5176492AB68E58FFE8A7EED68FFDDE92F8DE92CCB16C9E864C 9885566457307B7253090500605E3ED5D49EE7E8AECECD90D2D290F1EDA8E2DA96EEE3A1DCD091 DECE93FCE9B4FDE9B7F4E2B3EFD3AA8F533780571EFFF7ACEDB27DDFBF71EDE890CBC789D8D094 F6F1BA48402A312A13F3EABDEFEAC1F8F1CA7C785507040057522FEEEAB3E0DB9AEDE79CE1DA88 EAE08EF1DF9BF3D79BD9B37AB38650966832BE9257EBC385FBD794E1BA74D3A55DCA954EDBAB67 F4D596FFE1A4F3DC9CEDDB9AEDE4A3F1ECABF1ECADD8D494CCC589E8DFA4EDE2A7DCD597CECB8A DFDA9BE4DFA3E4E0A5EEEAB0EEE9AFDEDAA0C2BF81DEDB9CE9E7A7EEEAABF7EEBAF3E7B9EEE4B5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0F0F0C2C2C2707070363636858685CECED1E6E6EDBABBC0 5F60603A3B3A4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2 5D5C5C302F2F424242777777AAAAAABDBDBDC5C5C5C5C5C5A8A8A8919191AEAEAED6D6D6EFEFEF DADADA8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0636363141414292929 5E5E5EA5A5A5CCCCCCDADADAD8D8D8B4B4B46A6A6A333333414241979797F1F1F1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7D8D8D86666662020204C4C4C9A9B9AEBEBEB FEFEFEFFFFFFFFFFFFFFFFFFF6F6F6ACACAC4A4A4A292929383838999999B3B3B3B6B6B6B6B6B6 B6B6B6B6B6B6B1B1B19595954848481717176A6A6AB5B5B5F0F0F0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFCFAEAEBE3B0EEE8BEFAF8ED FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFAF0EAEABEE3E2A8F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFFFFFF7D4D4E58787DA5959E07373EFBAB9FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C7C7E27878DD6A6AE79B9B F5D7D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEEEEEEBBBBBB5E5E5E141414454545969696E2E2E2FFFFFFE9E9E9 898989383838424242717171A5A5A5BDBDBDC4C4C4C4C4C4B4B4B49C9C9CB1B1B1D1D1D1F2F2F2 FFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6B6B6B2222221A1A1A 575757979797CDCDCDDADADAD5D5D5BDBDBD7272724343434F4F4F8C8C8CEDEDEDFFFFFFFFFFFF FFFFFFE8E8E8B8B8B85F5F5F3B3B3B878787D9D9D9F4F4F4ABABAB505050262626616161CDCDCD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0B04C4C4C1B1B1B393939868686BABABAB6B6B6B6B6B6 B6B6B6B7B7B7B0B0B09A9A9A4D4D4D1E1E1E5B5B5BAEAEAEEEEEEEFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFDF2F2ECC6 EBE3B3F6F2DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8FFF8E9FDE9D2F7D4B9E6B4B5CE85BAB85CC1B34ECECA82DBEAC9 E0F7E4E0F5E0DFF4DFD8EED8C6DFC6AFE1AFA4E8A4C9F6C9E8FEE9F9FEF7FFF4EAFDE6CAF9E0B9 F7E2BDFDF9F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE3E3E97E7EDA3E3EDB8383EBC2C2FCF7F7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE2E2 F69D9DE86F6FDD6060E1B1B1ECE6E6F8F9F9FFFFFFFFFFFFFFFEFEFFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EFDF7FEFDF7FEDDE7FEDDE80EADB7EEFE287F0E48BEEE38BF2E690F2E58FEDE18EF0E595E9DE8E E7DC8CE9DE8EECE191F4E999F7EC9CEBE090EDE292EEE393EFE494F1E493ECDD8CE9DA89EDDE8D E9DA89EADB88EBDC89EADB86ECDD88EFE08BF0E18CEEE188EAE184F0EA8DF3EC91F5EE94FDF69C FDF5A0FCF49FF3EC93F3EC92FBF599FAF496F1EA8FF5ED98F5ED98F6EF97F7F097F9F297FAF398 F7F196EAE389EAE38CE6DE8AE7DF8EE9DD8BE6D986F3EA92F5EF95F1EC8EF2E78AF5E285DAC165 E5C66FCCAF58FFF9A1F8E68FE4D37BECDE85F0E289E9DB83E5D780E3D47FEFE08DEFE08EF0E091 F2E294F8E89AFBEE9FEEE290EEE390F2E795F9EE9EF9EEA1F5E99DF3E79BEFE496F2E797F5EA98 F3E994F4E48EF8E38DF6E796F3EC9DEFE99BF3E499FBE396FFDD8DA77D2DE8CA79FFEB9DF0E498 EFE6A3F6EDB2CBC28A2A2109241C089F986BF2ECC7D9D4B123200D403D1E615E3E34310B171000 ACA063C3B179BCA76D5C480DE6D99BFDFCBDC6C68757581B3D3A0CC5BD89FBF1BBDDD89CE5E1A6 F7F2B897925B928D56C3BE8778733CAEA871F3EEB6E2DEA2DBD79A928C4CD1CA8AE7DCA4F6EAB0 D5CA86ECE490E4DB89E4DB988E8256BDB38D4E4A19969551E7E098ECDF9AE2D995E8DF9EBEB779 393301645E22F5EFAEE1DB93E8DF93EAE090EDE292E7DC8DF1E599E7DB8FE8DC90ECE094F8ECA0 EDE195F7EB9FF6EA9EF5E99DF5E99DEDE195E5DD8DF0E998E2DC8DDDD98EEAE5A3E7E1A53F3814 6F642EFDF5B5E6DB91DECF7DF0DF90ECDE95E5DB94EBDB98EFDE99EBD58D995615E7A45DF2E289 E4DF86E6DE8CF5E197F3DB91EDE191E6E995E1E694E5DD93F2DF99F2DD9CE6DA97E6E19FF1E6A9 FFEAB4C68751A44807F6C97BFDF4A2EAE79CEBDB96FCEDA6F3F2A3E7E996EBE497F9E8A1EDE39E E4DB95D7CF87DAD38DE9E29DE6DF9BDBD494D4CE90E3DD9FD5D191C7C383DAD794D0CC8BDCD493 F3ECA8E6DF9CE3DB99ECE5A2EEE7A3EBE3A2E9E29FE4DD99CEC785D9D18EE1DF9CD4DD96DAE096 E8E49DE9DA97F8E4A4CEBC7E988B52A097665E5A30191102190E00B9B490F4F8BBDEDFA0F2F0B4 ECE7ADF6EDB7DDD29DC5BB88C9C58FB1B27B9DA26A90985FC4C98FC4C491D5D1A6D9D19A9E9456 E7D6A154391B260C08977744CBAB68D3B17A240400B59F63F1DF97FEEBA2DDCC81EFDD97ECDB9F DCCC9B50431A655C340B0600706D43BDBD85D9D997CECF8ADCDE95CDCD83D9D58CE7DF99E1D795 D3C489DAC994F3DFB1ECD7ACF4E0B6C3A882996449BE9C66D1BD77814F1EBB9D56E5DE8DDAD79E F4ECB4A99F6D191500BEB186FBFAC9DDD39BEBE5AAF9F5BD83824D0A0900626436D9DDAADCE2A4 D7DF92CCD480E1E19BEDE5A4FFEFB3F8DAA1D69A67CA7D4BA95520B26027BF7936E3B061F6D57C FFE595F6DB9FEBD296FCE9ACEDE1A3EAE2A3E3E1A1EAE9A9DCD899D6D194E3DDA1DDD499D4CB92 CDC78BE7E1A4FFFEC1FAF6B6EEEDACE5E4A3EBEAA9DAD999D8D797DCDA9DDDDCA0E5E5A9E1E1A6 DDDEA2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFADADADA8686865E5F5E5A5B5AB4B5B3E9E9F1E4E4F7 AEAFBF5E5F603A3B3A4A4A4AD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DFDFDF4B4B4B303131646464ABABABDDDDDDECECECEFEFEFF0F0F0E6E6E6DDDDDDE6E6E6F3F3F3 F7F7F7D9D9D98F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0626262171717 4A4A4A9B9B9BD6D6D6F1F1F1F8F8F8FAFAFADCDCDC8A8A8A3C3D3C1B1C1B7A7A7AEBEBEBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFA7A7A7464646272727707070C3C4C3 F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFF3F3F39595952222220D0D0D171717383838414141414141 4141414141414141413E3E3E323232191919181818707070B9B9B9F1F1F1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEFFDF9DBF8E4BBFAE9CB FEF9F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1EAEABEE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFDFFF5F5F7C7C7E68383DC6666E59291F2CCCBFEFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C9C9E27A7ADA5A5A E27F7FF3C9C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8D3D3D37878783939392020207F7F7FCACACAF3F3F3FFFFFF E4E4E4737373212121616161A1A1A1DADADAECECECEFEFEFEFEFEFEAEAEAE1E1E1E7E7E7F0F0F0 FBFBFBFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A252525 363636929292CBCBCBF3F3F3F8F8F8F7F7F7E5E5E59D9D9D5252523030305F5F5FE5E5E5FFFFFF FEFEFEFFFFFFC9C9C97C7C7C4848485B5B5BB0B0B0FAFAFAFBFBFBABABAB505050262626616161 CDCDCDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E9E9E292929060606181818323232434343414141 4141414141414141413E3E3E343434171717181818606060B2B2B2EFEFEFFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FDFCE2 FAEBC4F8E4BFFCF3E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF9FFF9F2FDF3E5F3DCCCD285B5B53DAAB65AAAC882 ADDEA5AFE6B1AEE5AEAFE4AFB8E2B8CFDECFD7E9D7DFF6DFEFFDEFF9FFF9FEFFFDFFFCFBFDF5E8 F0E7BFE9E2ADFAF7E9FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE6E6E98B8BDA4F4FDB8383EBC0C0FCF6F6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8F8 F6C8C8E65F5FE06D6DE09F9FEEDBDBF9F8F8FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEEDF80EEDF80F4E588F8EB8FF4E78BF0E289E9DE85E6DB82EDE48DF0E691E6DC88EBE090 F2E797EEE393F4E99AF2E797ECE191F5EA9AF3E898EFE494F6EB9BFAEF9FF4E796ECDD8DECDD8C F1E290EFE08DEEDF8CE8D984E6D782E7D881EADC83EADC84E6DA81E7DE81E9E384ECE689F5EE94 FDF69DFAF39BFBF59CF5EE95F6EF95FBF498FAF495F4EE90FDF69BF6EF94F3ED90F6F091F2EC8E EEE889EDE78AEAE389EAE28BDDD582E5DD8CF7EC9AF1E591F0E78FF0EA90E5E082F2E68AF5E386 EFD479D6B860E3C770FEF39AF4E38BF0E289F6E88FF2E48CEADC84EADC85E7D783F0E18EF3E491 F5E694F3E493F2E392F5E896F2E692E5DB88F1E694F6EB9BF0E597F8ECA0F2E69AF6EB9CF4E999 F5EA97F4EA95F5E48FF2DD89E9DA89EDE597EEE99BEFE195F9E698F2D0809D7422F3D885FCE594 F2E799E3DA90F2E9A4F3E9AAE6DCA1413819080100352F13433D23322F092725003B3C136E6E40 E2DCA5CEC28A77652F56400A98844CBEB075ADA56B626227414212ABA770FAF1BEE7DDAAE0DAA3 C8C38C817C4949430F837D4A8C8652E1DBA6F0EBB3CDC98FBBB7798C884A9C9657C5BD7FBAAD7A EFE2AEEFE4A3EDE597DDD588E8DE9E8A7E55B2A983353100A1A05CEFE89FEADE96EBE19DE7DE9C AAA266474206494308E5DE9FDBD48FEDE499E9DF8FEDE292EDE293F2E59AE9DD91F1E599F3E79B F9EDA1E3D78BF5E99DEBDF93DED286E8DC90F2E797E1D986F0E998EBE599E5DF9BF2EBAF958E5B 3A3303EEE4AAECE09EE2D68AE7D884F2E395ECDE98EAE19BF4E4A3F4E2A0E7D18A9D5919F0B069 F6E58DDCDA83E5DD8EEED893F0D890EDE093EAEC9BE3E597E2DA90F0DC97F6E2A1DDD490E1DC97 F5E7A9FAD49F995420B05715F9D889F7F19FE8E69CE5D492FAEAA5EEED9FEDEE9CE8E191ECDB92 EEE49DEAE39AE1D991E6DD98DED591D8D08CDBD391E6DF9FE8E3A3DCD598DBD798E8E4A4DFDB9C DBD395EAE2A2E3DB9BE7DFA0DCD494EAE2A2DED697DBD393EEE6A5E2DA9BD8D091DAD897D8E19D E1E7A2E0DB9AE5D596E3D194EDDA9F80723E1B1300473D1F887D55F1E1C2F4EBB9D3D987E0E392 E4E396DFD78FDED28FE5D998F0E5A6E5E1A0C3C381CBD18CBAC37DC5C485EFE2ADF1DFB1CCB67E EED798896F381D00007E5E32F2D6A4FFF8BE6E57352C1800E6DB99F0EB9BE5E092E4DD95D1C988 F6ECB6574C21999066110800433C16AAA66A989450E0DC8FB4AF61D0CB7DD9D185D9D288D8D089 D2C989C5BA80D7CB98E6D9ADDCCEA6DBC9A1C7AA85B9896D7B5E352A1A00411F0EB89D59DCD085 E3E2ACFCF2BD372B08535135F9F3C5E3D29BDDD48ED7D085E6E399F8F8BB908E5F040400B1B28E F3F9C6CBD490D2DA8CD8D98EDCD890F4E6A1FBDC9CFFD49BF3C08BB95B26AF531AD58945F5CA78 FDEA8DF3E18FF5E0A4EAD79CF7E9ADE6DC9FFFFCBEEAE7A9E7E5A8E7E5A8F2EDB0EDE7ABD8CF95 EBE1AADDD49DC4BC80E3DE9EE3E19DEFF0A9F6F7B0E9EAA4E0E19EDCDC9CEEEDB2DCDBA2D8E09C D4E09AD3DF99FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE2E2E2ADADAD4748475A5A5A939493DBDCDBF9F9FF EAEAFBB0B1BF5F5F613B3C3B4B4B4BD1D1D1FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE2E2E25B5B5B3B3B3B5F5F5F9F9F9FD6D6D6EFEFEFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCD8D8D88F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0616161 191919656565CACACAF4F4F4FFFFFFFFFFFFFFFFFFEFEFEFA6A6A6535453101010696969DEDEDE FEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5C5C57272722A2A2A373737969696 E9E9E9FAFAFAFFFFFFFFFFFFFFFFFFFEFEFEE9E9E98383831213120F100F2626263939393E3E3E 3F3F3F3F3F3F3F3F3F3D3E3D3333331D1D1D0D0D0D1B1B1B848484C9C9C9F5F5F5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF8F7DCF3F0C1FCEBCC FFF1E2FFFBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAF2EFEAC1E9E2ABFAF9EEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFDFFF7F7F7CACAE68484DD6C6CE7A2A1F4D5D4FFFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D3D3E58D8D DB5E5EE07171F2C1C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9D7D7D79999993A3A3A343434595959BABABAEFEFEFFDFDFD FFFFFFE5E5E5767676242424585858969696D1D1D1EEEEEEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6A6A6A 2727274D4D4DBFBFBFECECECFFFFFFFFFFFFFFFFFFF7F7F7BABABA656565272727474747D6D6D6 F9F9F9FAFAFAE7E7E79999994545454B4B4B939393D7D7D7FFFFFFFDFDFDABABAB505050262626 626262CDCDCDFFFFFFFFFFFFFFFFFFFDFDFDF8F8F88F8F8F1C1C1C0F0F0F2B2B2B3939393F3F3F 3F3F3F3F3F3F3F3F3F4040403232321C1C1C050505191919707070C6C6C6F3F3F3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAE7 F4F2C8F8ECC5FFEEDAFFF8F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEAE3D17DC4AE2ABDC781 BBDAACBAE5B8BAE9BABAE8BABBE8BBC6E8C6E4EAE4F7F4F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFEF9F2F3D1ECEBB6FBEFD7FFF6EEFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE9E9E99898DA5E5EDB7C7CEBB9B9FCF5F5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F9 F5DFDFE9A0A0DC3939E17878EBD5D5F9F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF3E485EDDE7FE8DB7DF3E68AEEE387E9DD84F1E58EEBE189EEE48FF4EA95EFE490 F2E795EEE391EBE08FEEE392F1E694EDE290EDE291F1E694F2E796FBF09FF7EC9AF3E594F1E28F F1E290F2E390EDDE8BEEDF8AEBDC87EDDE87ECDE86EDDF86F0E289E8DB81E8DF80E8E383EFE98B F6EF94F8F197F7F096F6EF95F8F197F6EF95F3ED8FF5EF90FAF494F6F091EFE98AF6F08FF0EA89 E8E280EFE988F3ED8EF7F095EEE790E2DA86EEE695F8ED9BEADD8AF4EA93F6EF95ECE487F2E489 E9D578EDD277D5B75FF6E48DF3DF86F6E990F0E289F5E78FF5E78FEADC84E9DB83F1E38BE6D783 ECDD89EEDF8AEDDE8BEDDE8CE9DA87EEE28EECE08CEEE391F1E495F1E496F1E597EFE395EEE192 F9EC9DEFE390E7DC88F3E38DF4DE8AEEDE8DEDE697F0EB9DF3E698FAE495E8C4749D7321F9DF8C F9E38FF4E998EAE18FEFE795F1E89DF5ECABEAE1A86960340A03002E2A096E6C3E4F4F1CC3C690 E7E8AFDFD69FC2B47B523E089C854D6B561D5A4A0F564F13706E3496965B76713C5E54266E632F 4C46193631076C6634C6C08DC7C18EC4BE8A8E8952645F265C581E2C290044410085803F675E22 5A4E1A675B279F9456DBD287E2D88EFBF8BB90835BC8BE97231F00ADAC63CAC376C6BA6FEDE39D F2E9A8C2BB7F4F49103D3701D5CE90E4DD98EBE296EAE090F2E797F2E79AEFE398E9DD92F2E69B EFE399E2D68CE2D68BEFE399E3D78CE3D78CF3E79CE8DD8FEDE591E3DC8DE9E19AE5DFA0DED79F 443D0CA9A36CF4EBAEE5DA95F3E79BEDDD8DF3E297EEDF9AEAE29FF8EAAAF2E09FECD891945213 F7B974EFE48DDFDD89E4DE90E5D08DEFDB93F1E599E9E799E5E497EBE097F0DD97F6E6A1DCD58F DEDA94F0DFA0EBBC888B400BC8722EFDE190F2EE9DDCDC92E8D796F0DF9DEDEA9EE4E393E6DD8D ECDA8FE5D990DDD48CE5DC94DBD18BE2D992D3CA85D6CD89DCD493E3DC9CEAE5A6E9E3A5E0DA9E E1DC9FE5DD9FE0D899DDD596E0D899E4DC9DE8E0A2CBC384D4CC8DEAE2A4EFE7A8EFE6A7DFDA9B DBDF9FE4E3A6D6CD91E1D095D9C58BDAC88BDACC8FBCAF72B4A56BEFDDA7FFFACAD9C78BD3D185 E0DE94E3DC97E8DD9DEADCA1EBDCA5DBCE99DAD09AADA770B9B87D9E9F63C9B881E3C490F5DBA5 AF8D559A773E3213005A3D17F7DFA4F8E5B2E1D5A72B2400868356FCFBB1DCDB89E5E395D2D086 E6E0A3756D3B968B614035203B3110D3C98EB9B16BB1A859DBCA7DE5D285E7D88BE6D78DE9DD95 DDD48EE4DC9DDDD79FDCD7A4E1DDB0F7F4CAEBDCAF806032380D0B351701B2A362D9B987AE9153 F5E59FF0EEBBAB9E640C0002B9BA8CDDD7A2EBE0A1E1D98CE9E38DDAD482EBE5A1FAF1C4605539 493F23B0A881C2BE87EAE59EE1D185EDD78BE6CA81C7A660C59E5ACFA661F4CA87F5CC85D8AC64 A6772DC9964AFBD48FEDD79CEBD89EEBDEA1EBE0A3F2EBADDAD596E0DD9DEAE6A8EBE6A8FCF7B8 E9E2A5EEE3AAFAEFB9FCF4B9F1ECABC4C47ED3D48AEBEDA3EEF0A7ECECA8E3E0A1E9E4ABE5DFA8 E3E1A6E7E6AAE7E6ABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECB2B2B26D6D6D2B2A2B6E6E6ECCCCCCF4F4F4 FFFFFFF8F8FABCBEBD5E615C373936474748D1D1D1FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEAEAEA8B8C8B5151513C3C3C5A5A5A919191B5B5B5D0D0D0E1E1E1EAEAEAF0F0F0 FAFAFAFFFFFFFBFBFBD8D8D88F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B0 6161611919196E6E6ED9D9D9F7F7F7FEFEFEFFFFFFFFFFFFF1F1F1B6B6B66B6B6B181818636363 CFCFCFF7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFADADAD4545451A1A1A4C4C4C B5B5B5FFFFFFFEFEFEFFFFFFFFFFFFFFFFFFF6F6F6D8D8D87676761B1B1B3738376F706F9F9F9F ACACACAEAEAEADADADAEAEAEAAABAA8C8D8C4F4F4F242424252525A5A5A5E3E3E3FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCFDF7F7FDF6F6FDF6F6FDF6F5FDF8F8 FFFBFBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEEEEC9E3E3A7 F6F4DDFEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF3F7E9C8F4E1B3FDF6E9FFFDFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF7D9D9E68A8ADD6B6AE7A09FF4D3D2FFFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7DFDF EAAAAADF7574E17676F2C2C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDDCDCDC9898985151512424245E5E5EAFAFAFE5E5E5FBFBFB FFFFFFFFFFFFECECEC9797974848483939395A5A5A8B8B8BB2B2B2CCCCCCDEDEDEEBEBEBF1F1F1 F9F9F9FFFFFFFFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB 6A6A6A282828545454CDCDCDF3F3F3FFFFFFFFFFFFFFFFFFF6F6F6C2C2C27272722E2E2E434343 C7C7C7EEEEEEEBEBEBAEAEAE6565653232326D6D6DCFCFCFF2F2F2FFFFFFFEFEFEACACAC505050 2323235F5F5FCDCDCDFFFFFFFFFFFFFFFFFFF8F8F8E5E5E58282822020203535357474749B9B9B B0B0B0ADADADADADADADADADB1B1B18989894F4F4F1818182626268B8B8BE7E7E7F9F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3F3D8E5E5ADEEECC6FDFBF4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF5FAF6CFE9C76BDDA82E EEE0B7F6F8EFF6FCF7F6FCF6F6FCF6F6FCF6F8FCF8FBFCFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFBFDFDE8FCF6D2FCE3BEFDECD6FFFBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAECECE9A5A5DA6A6ADB6D6DEBADAD FCF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9EDEDE9B2B2DD7171DF4343ED9393FBF1F1FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3E485EEDF80E8DB7DE3D77AE1D67CE5DA81F0E68EE9DF89EAE08BEBE18C E5DB87F0E594EADF8DECE18FEBE08EEADF8DF0E592EDE290E8DD8BF0E593F6EB99F3E896F3E693 F3E491F5E693F6E794EFE08BEBDC87EBDD86F4E68EF3E58DF0E289F2E48BECE085F8EF90F3EE8C F3ED8EF4ED92F5EE93F8F197F7F096F3EC91ECE58AE9E385F1EB8AFBF593FCF696FAF494FEF896 F3ED8BEDE785F5EF8DF4EE8FFFF89DF8F198EBE48EEDE592F4E996EEE28FF5E992F1E88FECE487 F5E68AE5CE72E9CE73BA9D44F7DE85F6E68BF5EB90F1E78DF6E890F7E991F3E58DF1E38BF2E48C ECDD88F3E48FF2E38EEFE08BF0E18DEFDF8BEBDF89F2E691F3E793F5E997F4E799EFE294F2E597 F2E596F9ED9BEFE38FEADE89FAEA93FDE791F5E693EEE797EFEA9CF5E89AFCE696E4C26E9A711F F5D380EED784EFE492ECE38CF2E88FEEE491EFE59BFEF6B5CCC287534B1469642D434109828244 9193508283409C9254736327604A0EDAC286F6DFA3FFF3B5FBF2B1F1EEADDBDA9AB0A96E70642E 5B4E1949420A5C561E847F477F794167612A565118686327676123544F0FB7B36FFAF6AFE7E29C ECE4A4F1E5B2C6B987716629655C12B8AE66F1E7AC7F734CCFC59F262300484719E0DA89E0D587 EEE59CF0E7A5DAD396746D35383101CDC688F4EDAAF1E79EE9DF8FEADF8EF5E99DF1E59CECE096 F0E49AF1E59BE6DA90E2D68CE1D58BF0E49AEFE399F5E9A0F6EB9EE7DF8DDBD38AF7F0AEFFF8BD 4E47136A6436FCF8BBDDD492E0D58EEADE94E3D287FCEBA4E9DC98E7DF9EF8EAABFFF2B0E7D590 884609E9A966EFDF8CE2E18EE1DB8FEEDA97EFDB94F2E69AEBE89BE8E598F0E49BF2DF9AE7D994 E9E69EF3F0A9FAE6A9EAB4829F4C19D78741FFE693F5F5A3E7EAA1F3E4A5EFDD9CE9E59AE6E394 E9E090F4E195FAEEA2EFE69CF4EAA2E7DD96E8DF97DED68EDFD68FD5CE89E3DB9AF0E9A9EBE5A6 E4DEA2EAE4AAECE4A6E3DB9CEDE5A6EDE5A6ECE4A5E0D899CEC687D4CC8DE4DC9DEAE2A3F1E9A9 E4DD9FDADB9FEDE9AFEFE3A9F3DFA5E5D094E1D08FE2D390E9DA95D0BF78AF9750E2C47EEED690 E6DC96F0E7A4F3E9AAE4D59BE9D9A6FCECBCE5D3A5F6E8B9F0E3B3D7CB99E8DCA9FEE8B7FDCE9C CCA063986F398C6437411E04DCC47AEBDB93F8F2BC9F9B77090D00C2CC8BD0D185E6E495E7E599 F8F5B1A9A3696C64349A8E6A1E1200BAAE7CFEF2B3E5DA8CD9C775AB8F44C1A45CFDE39AEEDA94 E6D691EFE5A4E2DB9ED9D89FF7F8C3D3D9A674794A291B0323000077471BCCAD70FEF4ADEEE1AF B39455FEE6A3DCD9A42A1B1163531EF6FDCDE3E2A8F1EAA3E6E08EE9E38BDBD47EDACD87DBCA9A E5D3B0301B1255411EF5EDC0FFF3B7FCEDA1D4AF5FB08C40B6964CD5C175F3EE9FE4E797E8E89B F1E098DDB572CB8C4FC38D53D5BE81EFDD9FE8D89ADBCF8FF0E5A5E1D998E0DA98EAE5A3E1DC9C EDE8A8E8E3A3ECE2A6EEE1AAE9E0A3EDE7A6E8E5A0F0F1A9F3F6ADF5F5AEF5F3AFF8F0B2FFF7BE E6D8A1E0CA95FFF2BEFCE7B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAD2D2D27B7B7B3C3C3C5151519A9A9AE6E6E6 FAFAFAFEFEFEF6F6F5B7BEB1515F45283022383839CACACAF9F9F9FEFEFEFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3F3C1C2C18788875455544747475454545A5A5A6161616A6A6A818181 A2A2A2DBDBDBFCFCFCFCFCFCD9D9D98F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFFEBEBEB B0B0B06161611A1A1A787878EAEAEAFDFDFDFFFFFFFFFFFFFFFFFFF2F2F2B9B9B96F6F6F181818 616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF2F3F29696962E2E2E1E1F1E 636463C4C4C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0C8C8C8686868222222636463B5B5B5 D7D7D7E1E1E1E2E2E2E2E2E2E3E3E3DCDCDCA7A7A7474747272727393939BDBDBDF2F2F2FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCFAECECF3D0CFF1CAC9F1CACAF1C9C8 F6D5D5FDE6E6FFF5F5FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6 E0E0A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF8FCE9DAFBDEC4FEE7D1FFF3E7 FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7DBDBE68B8BDD6A6AE7A09FF4D4D3FFFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7E2E1EBB0AFDF7978E17676F1C1C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8D5D5D5989898585858343434535353989898DEDEDEF8F8F8 FEFEFEFFFFFFFFFFFFF5F5F5C5C5C58E8E8E5E5E5E5151515454545959596060606A6A6A808080 A8A8A8D6D6D6FCFCFCFFFFFFFFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFEF4F4F4 BBBBBB6969692929295D5D5DDEDEDEFBFBFBFFFFFFFFFFFFFFFFFFF7F7F7C4C4C47575752F2F2F 424242C4C4C4E3E3E3D1D1D16868684646465757579F9F9FE7E7E7F9F9F9FDFDFDFAFAFAA9A9A9 4D4D4D171717525252C6C6C6FFFFFFFDFDFDFDFDFDF4F4F4D4D4D4767676212121505050A1A1A1 CECECEE4E4E4E2E2E2E2E2E2E2E2E2E7E7E7A8A8A8505050191919383838A1A1A1FAFAFAFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F1D6E3E2A8EDEDC7FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF8F9E6EBE8AFE3C669 E1B54CF7E9CAFFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFF6FBF8E1EEE1AFF3EAC8FDFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEFEFE9B1B1DA7676DB5F5F EBA2A2FCF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8DFDFE78B8BDF5656ED7878F7BBBBFFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE4D87AEEE183EFE286E4D97FF2E68CF2E88FEDE38BE3D982E8E08B EFE794ECE491F3E994ECE28DEEE48FEDE48EEDE38EF3E994EBE18CE5DB86F6EC97F5EB96EEE48F F4E793F0E18EEFE08BF5E691F1E28DEADC85ECDE86F6E890F8EA91EEE088EDDF86F3E68CEAE182 EDE785F0EA8BF0EA8EEEE78CE8E187F5EE94F2EB90F0E98DF1EB8CF2EC8BF3ED8BF6F091FEF899 F9F393F4EE8CF6F08EF7F18FF5EF8FFBF499F7F097F0E892EDE592F2E794EEE28EECE08AE7DD84 E7DD81F1E085E1C96DFADD83BFA249F2DB82F4E68BEDE68BEEE48AEBDD85E7D981ECDE86EEE088 E9DB83EEE088F2E48CEEE088EADC84EDDF88EEE088EADF86F3E791F4E894F5E997F4E797EDE191 FAEE9EFBEF9FF1E593EDE18DF1E68FF6E68EFDE990F3E58EEDE693ECE896F2E596FCE898E8C673 A9802EF4D17EF3DB8BF4E999F1E890EDE387EDE38BE6DC89E8DD93E4DA95D7CF8CE2DC99C3BE7A EBE69FCBC97DD8D589CEC37DA49250B59E5CDEC482FFE8A4ECDA93F2E89FE5DF98E5E29DF7EEAE E8D99CCDBE809C94539A92519C96559F9757AAA1639F9958807938968E4ADBD58FEFEAA0E0DA8D E4DD92EEE6A2ECE1A9F4E8B1FDF4B6CEC57AA39951887D4371653EE3D9B2141100999852F1EB9A EADF8FD8D085DFD694D1CA8E6D6630312A00B1AA6FF2EBA9ECE29AE6DC8CE8DD8CF5E99EF5E9A2 EEE29AEBDF97F0E49CF4E8A0EADE96EEE29AF3E79FEEE29AF2E69EECE197F2E99DE5DC98F2E9AA 81794F221B04DDD897FBF6B1D7CF85EAE097E5D992E1CF8CEFE09CE7DA97F7EEAFA89A5DBBAB6D E9D6928B490DE2A361F5E997E2E18FDAD48AEAD796EBD994EFE39AEDE89EEEE69DF2E39DF1DE9A FCF0AAEAEAA1E7E49DFBE4A4DD9F6D9F4714E4964FFFE694EDF19FEBEEA5EDDEA0E7D596EDE79F F2EE9FEFE595EAD78BEADE8FEBE295F7EFA3EAE197EBE297F3E99FE5DD92D9D188E5DE97F2EAA9 F1E8AAE9E0A6E6E1A6EAE2A5DFD798EFE7A8EFE7A9E5DD9EDED698E7DFA0DBD394E2DA9BDFD798 E6DE9FE7E1A2EBE6A9EDE5ABEEE0A6EFDCA2E8D69AF8E7A4E5D991F6EA9EECDC8CD5BD6AAA8936 E2C675FDEC9FF5E79DEDDF9ADED190D8CA8EEFE4AAEFE0AAF5E3AEF3DEA6EDD69DFEE6ADD9AE7C 8C5A28956529EAC08F7653298B6F46FAF0A3DED688F3EFB92F2E17424825DBE69CF7F6AEDFD994 DBD593EDE8AB5A541FCBC597261D09746749EDE1B0DCCF8EE7DC8CF8E897F6DA95BA9B5AAF9250 E1D293E8D698DFD294EBE4A8D8D79B5C5F2F292F00303818766235A87738B78550D1AE69ECD68A FAF1B8BE9A59FFE39FA19D6C251100E4D29AEBF2BFE3E7A5EEECA0EDE999F6F09EEFE496EAD994 F9E4AEFFEBC0B0966E1D0400BDAD86D9BE8ABF994CB59240D6BA6AF7E798F0EA9CE1E596DEE498 D9D990ECE19EFFE9AAEDC48ABC975AAB914DCBB470F9E8A4DFCD89E4D490E2D490E4D995F3EAA6 F6EEABF6EEACDFDA98DDD294EDE1A4F0E6A8F0EAA8E7E4A2D8D693FDFDB9EFEAA8FDF6B6F7EBAD FAEAAEF7E0A6FEE1A5F7CB8EDBAD70FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4F4BCBCBC4F4F4F151515666666A0A0A0 CACACAD1D1D1D1D1D1CACBC9939E8B3A4F2915210D242424A3A3A3D3D3D3E1E1E1F1F1F1FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEEEEEEC1C1C18788876060604A4A4A3434342323231C1C1C 2B2B2B515151A8A8A8E4E4E4F5F5F5DADADA8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFFFFFFFF EBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B86F6F6F 181818616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5D4D5D4797979212021 323232858585D3D3D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEABBBBBB5D5D5D272727818181 E3E3E3F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFF4F4F4AAAAAA3434342C2C2C575757D1D1D1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFBFBFEF7F7FBEEEEF5D7D7EDB4B3EBAFAFEBB2B2 EBADADF1B9B8F9CDCCFDE5E5FFF7F7FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFA ECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFCFFEDEDFFE0D7FDDCB9 FEEAD4FFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D8D8E68484DE6663EAA7A0F6D9D5FFFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7E1E1EBAFAEE07978E07576EEBEC2FBFEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF7F7F7DFDFDF9C9C9C5454543030303D3D3D969696D1D1D1FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEDEDEDD1D1D19A9A9A7070704E4E4E3535352525251E1E1E 2B2B2B585858A2A2A2E6E6E6F9F9F9FFFFFFF9F9F9CCCCCC7F7F7F3737373D3D3DDADADAFEFEFE F4F4F4BBBBBB6969692A2A2A646464EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C4757575 2F2F2F424242C3C3C3DBDBDBBCBCBC3434342B2B2B676767A7A7A7CBCBCBD1D1D1D0D0D0CECECE 8B8B8B3E3E3E0A0A0A3B3B3BA1A1A1DCDCDCDFDFDFEFEFEFF2F2F2C7C7C76D6D6D222222616161 BDBDBDECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0B04444441D1D1D545454B8B8B8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFA FFF3F3FBEEEEF9EBEBF8EBEBF8EBEBF9EBEBFCEEEEFFF3F3FFFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFFFBFCF4EDD5E8E1ADF0EDCBFDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF3F1D6DFD78E DEC870E6C776F8EED6FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F8EAE1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF2F2EDBFBFDF8383 DC5050EB9696FCF0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFDFDFCF7F7F3C3C3E56B6BE44D4DFAB2B2FFE0E0FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDF81ECDE80E9DE82EDE287F3EA8FEBE189F2E993FAF19C FEF7A4F3EB98E7DE8BF5EB96ECE28DEDE38EEDE38EEEE48FF3E994E8DE89E4DA85F9EF9AF6EC97 EFE590F4E792EBDC87E5D681ECDD88F0E18CF0E28AECDE85F2E48BF5E78EEBDE82E9DC81F4E88B E0D877EBE583F3ED8DF6F092F4ED91E9E287EFE88DF2EB90F8F294FAF494F6F08FF0EA88EEE88B FAF398F2EC8DF2EC8DFAF493F7F191F4EE8EF6EF94F5EE95F4ED95F5ED98F8ED99F2E692F3E791 EFE48BF4E88CF7E289F1D57BFDDF85D8BD65FDE990EADD81E7E186E9DF85E9DB83E8DA82EADC84 EEE088F0E28AEFE189ECDE85E8DA82F0E289F9EB92F4E68DEDE087F2E48DF0E28FF2E493F4E596 F1E193F2E294F4E595E9DB8AF6E793FAEC94EBDA81EDD97DE8DA81E8E28CE5E18DE7DA89F3DB8A DBB766B68D3BF4D180ECD485F0E496F1E693FAEE97FFF6A0F4E894F4E897EEE294EBE093E0D789 F0E89ADDD586EEE698FDF5A6D5C67ACDB96FCAB168DBBE76F4DB8FF1DC8FEFE292F3EC9DEAE396 DFD58CE2D18DDFCF8AD5CC82DCD48ADFD78DDFD790E4DA93D4CC84DBD28AE5DC92DFD88BE8E091 F2EA98ECE696EBE59BEBE0A4E6DBA0E4DA99ECE397F9F6AEBFB47C5347229B906B100D00AEAD63 ECE693F7ED99E7DE93E7DE9BD8D1956E673147400B958D55F2EAABEBE199EEE494F4E996F1E49B F5E9A1F2E69EEBDF97ECE098F2E69EEFE39BF9EDA5F0E49CEADE96F1E59DDFD48CE6DC97EBE0A3 C4BB80191100B6B172FBF7B3EBE799EAE393EBE194EADD9AEEDAA0F9E8ABF1E3A2E7E0A155481A 857538F4E29F86460ADB9D5CEDE191CECE7EE6E198F7E4A4EBD893EDE199EFE99FF0E79FF2E29C F3E09CE5DC95D9DB90E2E197FFF1B4CD895A953706EDA55EFFEF9CE9EF9CE7EDA5EBDCA0EEDB9E E2DA93EBE597EDE292E7D687DDD280D8CF80E7DD8EF5EA9CF1E798E1D789E0D788EDE598EEE69D ECE5A1E9E1A1E3DB9EDED69BEDE5A6DFD796ECE4A4EBE3A3E5DD9DEDE5A5EBE3A3E1D998E6DE9E DFD796E3DB9BE4DF9DE3E39FE9E4A1F1E7A6F1E4A6E2D494EBE19CD0CB81DCD587E8DE8CF0DD89 DABE6A97792AF1D790FAE4A0EBDA9AE5DB9ED5CC94EAE1ABD7CA97C3AC7AFCE3B2FFEAB9D5AA76 794B12A0743CDFBA86FFEABFC6AC80DBCC90E6DE92E3E198C5C28E080400999A61E3E499E9E1A7 FAF1BBF2EBB4B7B17E7E7A4B6F6B411B160FEAE6BFD2CA9BDBD195E2D98EDECF85FFEDB0FFE9AF C7AF748E783ECAB880EFE1A76D62301B16053C3907AEAD74D1D296E5C885CE954DECB675DEB667 FBEA95FCEAA9BD9752F1CC87615C368F7847FFFCC2E1E9AFE2E79FECE99DF3EEA4F2E9A2F2E49F F4E3A0EFDB9BEDD99FB7A16B513B153C2613C5AD7FF9DE96FAE697EBE190E2E092E5E398E3DB94 F3E0A0F9E1A5F4DB9FF2E2A2E7DF9BE1D48CE0C2789E8035CFB36BEDD48BF7E29AEDDB93EADC95 DCD18BC8BF78EAE39DE9E59EDBD28DE2D794E9DF9CEBE6A5E4E0A1F2EFB2FAF5BAECE3A7FDF0B3 F7E3A4F9DFA1FFE7A8FDD78DCC9B4FDAAA5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF4F4F4BCBCBC4D4D4D000000161616 2424242F2F2F3131313131312F2F2F2224200D12090508030808082525254A4B4A787978C5C5C5 F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF0F0F0E1E1E1D8D8D8CFCFCFBABABAA0A0A0 7C7C7C4646462121214D4D4D9A9B9ADCDCDCDDDDDD8F8F8F4141412B2B2BC7C7C7FBFBFBFFFFFF FFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B8B8B8 6F6F6F181818616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFEFEFEE8E8E8959595484848 1A1A1A616161C2C2C2EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEABBBBBB5D5D5D242424 737373D0D0D0F4F4F4FEFEFEFFFFFFFFFFFFFBFBFBE4E4E49393932424244646468E8E8EE1E1E1 FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF0F0FBDAD9F2C2C1F0BBBAF8CECEFADFDE FAE8E7FBD8D7F5C3C2EFB5B4F5C7C6FFE5E6FFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAF9FDF1E5 F7E0B2FAEBCCFEFCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6CFCFE46A69E1554BF7BFA6FDE9DBFFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7E1E1EAAFAEE07978DD7277E0B0C2E9ECFFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D89696964848482A2A2A545454959595D9D9D9F4F4F4 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF3F3F3E5E5E5DCDCDCD1D1D1BEBEBEA3A3A3 8080804F4F4F2626265353539B9B9BE2E2E2FEFEFEFAFAFACCCCCC7F7F7F3737373D3D3DDADADA FEFEFEF4F4F4BBBBBB6969692A2A2A646464EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C4C4C4 7575752F2F2F424242C3C3C3DBDBDBBBBBBB3636360B0B0B151515262626303030313131313131 3030302121210E0E0E0202020D0D0D282828474747757575C1C1C1F3F3F3C7C7C76C6C6C222222 616161BDBDBDECECECFFFFFFFFFFFFFFFFFFFBFBFBF2F2F29A9A9A323232333333868686D0D0D0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFEAEAFDCACAEFB2B2E3A7A7E1A6A6E1A6A6E3A7A7F0B5B5FECACAFFEFEFFFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFBFBFFE9EBFDE0D0F9DEBAFBEDD6FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFAF2E9C6 E0C66FEACA7EF8D9ACFDF4E8FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F8EAE1E1A5EAEABFFBFBF3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF5F5FACBCB F18F8FE04242EB8A8AFCEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDF8F8F0C5C5E28383DD5B5BE46E6EFAD9D9FFF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E98BEBDE80E5DA7EEFE68BE7DD84F0E68FEBE28D EDE590F0E896EBE491E7DE8BF0E691E7DD88E7DD88E8DE89E9DF8AF2E893EEE48FE6DC87EDE38E EFE590F3E994F5E893EADB86E4D580E9DA85EDDE89F3E58DEFE188EBDD84ECDE85EBDE82EBDE82 F2E689F1E987F4EF8BEEE887EEE88AF5EF92F2EB90F4ED92F3EC90F2EC8EF2EC8BF5F08CF7F190 F5EE94F9F298F2EA90F2EC8FF7F193F1EB8BEEE889F9F297FDF69CFBF49BF7EF9AF9EE99F6EA97 F9ED97F6EB92FAED91F1DB82F7DD83D2B359D9BD64FCE68DF1E68AE0DC7FE5DB81ECDE86F0E28A EDDF87EFE189F7E991EFE188ECDE85E9DB82F4E68DFCEE95F8EA91F1E38BF3E58FEFE08BF1E290 F7E798F5E597FBEB9DF9E999EBDC89F1E28DEBDD85D8C76EE6D273E2D578E7E188E2DE89E1D583 F3DC8AD7B361C69D4CFFE291F3DB8FF4E79CEEE396F4E896F5E998E4D884ECE08CE2D581E4D783 FBEF9CE2D585F7EA9BD5C779F2E596EDDC8BFCE797D6BB6BECCD7CF4D986FCE590EADB85EDE38E F0E895EADE8FF4E197FAE89BF1E794EEE390EBE291E9DF8EF8EC9FF2E89AEBE192EADF8FF1E896 EEE590E9DF8AE8E18DE3DD8FE5DC99F3E8AAFBF0AEEDE498EEE49CDFD49C4B3E1A6C613E252200 A9A860E2DD8AEBE18CE2DA8ED5CC89D3CB8F605923625B28746C34F2EAABE7DD95EAE091E5DA88 F1E59CF0E49CF5E9A1F2E69EEEE29AF0E49CECE098E9DD95F9EDA5E8DC94E8DC94F1E49FEADE9F FDFDC3483E1B756D42F2ECADE4E194DEDC87E7E18BE4DB8CFBEEAEBFAA79CDBC83F6E8A9E3DC9C 4D3F18827536FFF2B196551BDB9E5EE4D787B7B868E5E098F6E3A4EDDC97ECE098F0E89FF1E69F F1DF9AF5E19EE0D890E7EA9EE7E59BFFEAADC07346AE4D1DE8A25AFFF19CE3E996E5EBA5EADBA0 F6E3A7DDD38CDAD486E1D685E8D586E3D785E5DC8ADBD080DED382F1E897F3EB98DFD786F3EC9B F0E89CE7E09AE8E09EEAE2A4E8DFA4E2DA9BDFD795EFE7A6EBE3A2E7DF9EEDE5A4E0D897E3DB9A E6DE9DE1D998EDE5A4E9E4A0DFE193DCDD90DCD88FE4DD97D8D38FDAD893D3D58EDCDE93E6E396 EFE091FEE498C9A85ED3B16AFDE19EFCE9A8F6EAACE9E4A9FAF8BFCBC08ABDA670FFDBA8BE8B57 743907865A1CFFE7A7E5D9B1CEB791FFFAC8E0DC95E1E199FEFDC1726C41393103E8DEA1EEE39C F9EDBF9B90697A72485E5930A6A47B19190680805CDEDCBAE8E6BBDCD9A1F4F1ACEAE39EB7A870 CABA84FFFAC5E3D39DC4B57F3526003A2C04BEB077FFF8BCF3E8ABD5C98CD2A861C38030F8BC71 D2A54DFEEA8EEAD58FBC9149E3B871A5A063DFC68BFEF0B4E4EEAFD9DC91E3DF93F6EFACEFE5A9 F4E4AAF7E6A6F4E49DB5A65C4B3F067B6F36342700EADDB3F7E7A6FAF1A8EAE59DE3E39CE7E19D E2D395FAE3A8FEE9AFFDE5A8F3E5A2E9E59CEBDC90FFEC9BFFDC8EC3A253C9AB5FE9CC82EBD48A E7D58CE3D58CB6AB63D4CC84E4DE97F5ECA4F4EAA1F2E9A3FFF9B9F0EBAFEBE5AFECE2AEFBECB7 F6E2A9FFF1B4FFF4B4EECD87A88539D3B160FEE999FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9D3D3D3828282454545 4A4A4A4B4B4B4C4C4C4C4C4C4C4C4C4A4A4A3D3D3C2324231010100D0D0D3B3B3B6364638F8F8F CFCFCFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFAFAFAEEEEEE DDDDDDC3C3C37979793233322F302F747574CECECEDFDFDF8F8F8F4141412B2B2BC7C7C7FBFBFB FFFFFFFFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 B8B8B86F6F6F181818616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFEFEFEDFDFDF646464 2F302F3031308A8B8AE2E2E2FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFC7C7C7676767 222222676767BFBFBFF1F1F1FFFFFFFFFFFFFFFFFFEDEDEDBABABA6A6A6A2929296C6C6CC5C5C5 F0F0F0FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF9DCDCF4C8C7F2C8C7F5D4D3FDE6E6 FFF4F4FFFBFBFFF0F0FAE0E0F3CECDF0B6B6F1B1B1F4C9C8F8E5E5FEF9F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFD FAF7E9EDE1ABF3EBC6FDFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6CCCDE36262E25049FAC7B4FFEEE4 FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBEAE4F2BFB3E4786FDD6062E4ABB9EFF3FFFCFCFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8D7D7D7989898555555373737515151929292D2D2D2F5F5F5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF1F1F1 E0E0E0C4C4C48686863333333A3A3A696969D3D3D3FDFDFDFAFAFACCCCCC7F7F7F3737373D3D3D DADADAFEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6 C4C4C47575752F2F2F424242C4C4C4E3E3E3D3D3D37272724C4C4C4949494B4B4B4C4C4C4C4C4C 4C4C4C4B4B4B3737371E1E1E0707071515153C3C3C6363638D8D8DCCCCCCF6F6F6D4D4D4757575 222222585858B3B3B3E8E8E8FFFFFFFFFFFFFFFFFFF4F4F4BFBFBF7070702F2F2F5B5B5BBBBBBB E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFA FFE9E9FFD2D2FEBCBCF3BABAEBBFBFEABFBFEABFBFEBBFBFF5C2C2FEC8C8FFD8D8FFEBEBFFFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFAF5F4E4CDF6E1C6FCE8D1FFF5EAFFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDF9 F3E1B7E1B44CEECA83FEEBD6FFFAF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF8EDEDE1B1F3EAC2FDFBE9FFFFFBFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8 FED8D8F7A0A0E14040EB8686FCEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F4F4F4F7F4F4FBE8E8EC9D9DE05E5EE56969F09A9AFCEBEBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E88BECE287EBE086EBE087D9CF77E9DE87 E5DC87E9E18CECE290E9E28EEAE28EF2E794E8DE8AE8DE8AE9DE8AEBE08CEDE38EEDE38EF0E691 EEE48FEDE38EE8DE89EDDF8AEDDE89EEDF8AEEE089EBDE85EFE189F3E58CE5D77EE2D47BEEE185 F1E488F1E688F0E886F5F08DECE685EAE486F4EE91EEE78CF7F095FCF69AFBF597F3ED8DF2EC89 F6F090F6EF96EFE890F1EA90F6EF93F5EF92F1EB8EEAE387F2EB90F2EC91EDE68DF1E791F5EA95 F2E792F4E992F5E990FCEE93F1DC82E7CC71A4852BF1D87FF8E58CFDF297D7D377E3D880EADC87 F0E18AEEDF88EBDD86EFE089EBDD85F4E68DF0E28AEADD83EFE287F3E58AECDE85F1E28CEFE08B F1E290F4E494F0E092F6E798FBEC9AF0E18EEDDE89ECDE86E8D87CF0DE7EE8DB7EEEE78DE5E28A E6DA85FAE591CEA958BD9343FFE193EED78CE7DB92EBDE96EBDC92F0E395E6DA89E9DD89E8D884 EADC85EDDD89EFDF8CF5E496E3D284E4D285EEDA88FAE38ED8BD69F6D784FFED98FCE78EECDD84 E7DC84F6EC95E9DC8AECD88AF4E08FEFE289E8DD83F3E890EFE48FEEE28EE6DB89ECE08EE8DC89 E8DD87F0E58EF0E58CE6DE86E7E18FF1E9A3EAE0A0DED491DED589F6ECA5CABF873E3210B3A984 322D01A3A25EEAE494EAE18DEFE79AD9D18DE2DB9E5A531D8B844F615924EFE7A8E1D891F4EB9B F3E796EBE097E2D78FEBDF96F5E9A1F2E69EEFE39BECE098EEE29AF3E89FE8DC94EDE099F0E5A3 FAEFB68F8449382E0AD5CF94F5EFAEDDD98AD4D27AE0DA81ECE293FFFABD836E43897843F2E5A5 EBE5A65A4E1A7F7035FFF7B89D5F25D59B5BF5EB9CD0CE7FE2DD94DECE8EF1E29CECE199EFE89E EFE59EEEDD98F5E29EEDE59EE8EBA0DAD98FFFE7A7B96737B65322E19E54FFEB97DCE391E3E7A1 D9CA8FEAD69BEBE19BECE699F1E494F2E090EADF8EE8E08EDDD282DCD17FE2D885FBF59EEAE38D F3EB9AEAE394E3DB93EAE19FF2EAACEFE6AAE2DA99E7E09BF1EAA5E6DE9AEBE49FEDE6A1E4DD98 ECE5A1E1DA96D8D08CF3EBA7EAE59DE9EC9AE3E795D7D98BEBE9A0E8E7A2DBDE9BDEE49FD9DC99 CCCB84E0D58FE3CE8AF3D68ECBA95BC0A155ECD58AFAEDA3F0EDA3E9E7A0F7EEA7FEE6A39F7535 834C0DC28747FFE496CCBA6F604B30C2B593DEDBA5E0E598E5E7A8D2CF9F261C01AFA06BF2E0A0 FFECAE958763372B19A59D7F575432878764060802171B082C2E14D4D5B2F9FCCBE4E6A77C7C47 272100C1B986F5EBB9FFFCC990844C322407BEAE76E7D69CEDDDA1ECD698F1D998C59346CA832B F5B563D5A448FEE686F5E396B4893EE1B26BF2E8AAFBE7AAFBE5A7D4DF9CCFD184D5CC80F0E5A6 ECDDA9EADCA7DACB8DC5BB6FD7D17EC0BD6BAEAC6B3633187F7C55FFFFC7EAE1A1F1E6A8F1E2A5 E8DC9EF0E7A7E0DB99EFE9A5F2E7A2F0DB96F9DA98FFE099FBDF8EFEE696BE9D4CAF8F40A9893B E9CB80EFD58AF5E096DFD289E9E098DAD38AD0C87BE9E093F5ECA6F5F1B1F5EDB5EEE5B1F3E7B5 F7E5B0EFD59DFFF3B5E4C27EC19D57CFBB77F6ECA6FFF9B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFC6C6C6 A5A5A5A6A6A6A6A6A6A6A6A6A6A6A6A7A7A7A3A3A38585854D4E4E2424241F1F1F838383B3B3B3 CECECEEBEBEBFDFDFDFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBF2F2F2F2F2F2F6F6F6FAFAFAFAFAFA F8F8F8F5F5F5EDEDEDA2A2A25050502B2C2B656665C8C8C8E0E0E08F8F8F4141412B2B2BC7C7C7 FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFFFFFFFF F1F1F1B8B8B86F6F6F181818616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFF9F9F9D0D0D0 3D3D3D282828545554B0B0B0F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6D7D7D7 757575232323565656A7A7A7E6E6E6F9F9F9F9F9F9F8F8F8CECDCE858585464746414141999999 F4F4F4FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFCF2F2F2C9C8F0C1BFF7E0DFFEF9F9 FFFBFBFFFCFCFFFBFBFEF7F7FCF0F0F8DFDFEBA3A3E27979E69595EFC4C3FCF3F3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFEF8F7E8E3E1A5ECEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6CCCCE36162E24F4FFAC8C4 FFEFEDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEF2E7F9CFB8E87564DE4B4BEDA9ADFDFFFFFEFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8E0E0E09696965252522626264646468F8F8FCCCCCCF5F5F5 F9F9F9FAFAFAFAFAFAF9F9F9FBFBFBFEFEFEFEFEFEFBFBFBF4F4F4F0F0F0F6F6F6F9F9F9FAFAFA F9F9F9F6F6F6E9E9E9B0B0B04C4C4C3535354F4F4FCBCBCBFCFCFCFAFAFACCCCCC7F7F7F373737 3D3D3DDADADAFEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFFFFFFFF F6F6F6C4C4C47575752F2F2F414141C5C5C5ECECECEFEFEFBEBEBEA9A9A9A6A6A6A6A6A6A6A6A6 A6A6A6A6A6A6A5A5A5777777404040101010303030818181BABABACFCFCFEAEAEAF9F9F9E4E4E4 8383832525254949499E9E9EDCDCDCFEFEFEF9F9F9F5F5F5DDDDDD8181814949493E3E3E8B8B8B E8E8E8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE FFF4F4FDCACAFDBCBCFEBEBEFDDADAFBF0F0FBF3F3FBF2F2FBF1F1FDE6E6FFD6D6FDC1C1FDD1D1 FEF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFAF9F0E6E3B0EBE7BDFAF6E9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFAF2F0D9A5E1A934EECC88FFFAF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF8F1FCE2C2FDE9C5FFF9DAFFFFF2 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFBFBFFE5E5F7B0B0E14040EB8585FCEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFAE6E5E5EBDADAF6C8C8EA7979E24F4FF08585FDC9C9FEF5F5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDE86EFE189F4E68EEBDD87DACF7A E9DB88E4D986F1E593EEE192E9DC8DF0E495F1E695E7DC8CE6DB8BE7DC8CECE191F2E795EADF8D ECE18FF4EA96EAE08BE4DA85EDE08CF3E490F2E390EEDF8AECDD88F0E18BEDDF87F0E289F2E48B ECDE85EADC83F3E78CF7EE8FEDE785E9E384F0EA8CF7F095F6EF94F8F196F9F298FCF698FAF496 F7F18FF5EF8FF9F499F7F297F5F095F2ED93F5EE95F6EF96FAF097F8F095E7DE82F6ED90FEF79C F0EA8EE1DD84F0E890F7E68FFFE68FF2D57DDBBF66BAA147FDE990F1E289F4E990E8DF86F0E48E F3E992E3D683E2D583F5E898ECDF8FEFDF90E7D885EFE08BF5E58EF0E087F3E489EBDD84F0E28A F4E590E7D885EDDE8CEEDF8EEDDE8DFAEB98E7D885E6D881F6E890F4E68CF4E98AF7E48CF1E38C EBE68CEDE58AFCE98FCD9F4BD4A44FFFE18CE9DC8AEDDF97EFE397EDE293EEE391EEE28FF2E691 EBDF89F5E691F4E591E7D883EADA85F2E28DF4E390E6D27CF0D885CCB161FBDE91CEB56A8E7B2E EBDE8FEBE392F0E797ECDF91EEDA8BF2DD8EF0E18DF4E591EEDF8BEADB89E9DB89E2D284E6D688 F6E798F2E394EEDE8FE8D88ADED483ECE494DFD58FEEE4A6E1D69DE8DDA3FCF1B8B2A970655B32 ECE4B2251D00B2AD75F4EBAEEEE3A3EBE19EEFE8A2E7E09B4F4B169B9758524B11E7DFA2EAE19F EFE59EEAE194F4ECA1E0D88CE9E093F0E399EDDF96F9EBA2EADD95EADD96EEE09AE8DB96FFF5B0 EDE2AEADA6800F0D00B8B36EEAE2A5EEE4A6DDD28DE7DA92F0E299E2D588FFF7B36F5A38938652 F4EDA7E0DB9B675E237C6D33FFEEB3956C30A17938FFF5ACEFE095EBE399E7DF99F2EBA5ECE19C F1E59EEBE59AE6DD94F3E29DF8E3A4E3D894EEE79FECD68DBB7133B45C1EE4B76CF5E394EAE59A E6E59EDDD594E6DA9CEFE3A2F4E7A2F3E49EE8DB91EBE395F2EB9AE9E18EE4DB88E0D982E4DD84 EEE78DF4ED96EAE292F0E79EF6EBAAEBE1A6F1E6AEF6EDA7F2EA9FF4ECA1EAE099E1D991F0E8A0 E6DC95EAE19CD6CD88E4DA98EAE09EF5ECA9F6F2AEECE8A3F2EEA9ECE59EDBD58DEEE8A1EDE79F EAE39BE7DF98E5D995E6D894E2D591E6D891D1AB6BB88545FBDF98E1CE7FBAAE5CFFF2A69E6B2C 834711F3BE8AFFFAC2CCC077151106BCB57CE0D8A4BFBB82CECB8DDDD8A4575026686141F7F0CA FFFDD6AEA78419130346443B9390776665485C5B420404000202003A3928FEFEE7D1D0AE323116 010000221B08E4DAABF8ECB9D7CE94221905ACA666F1E9AAC8BE7ABEAD65F0D486FEE996BC8D30 EDB554EEB157EDAF58FED57EEDEC94D6B86ECD9C5AEFDC9BF6DF9FEBDB99D5DA92D9CD7BF3DE8B EFD991C0AC6CBAA769E3D391FBEFA8FBF6ADD0CC89E8E6AF807D58252100F6F2BAE9E3A2E7DC96 E8DD93E3D78CEBE097E3DA94E4DC98ECE3A0EEE19FF7E6A3F7E09FF9DD9EE9E098EBE99CF8EE9E CAA65EC48E4AFFCF8CFCE29BEAD288E3D98DD7D085F2EAA1F7EDA8E8DF9CE1D799F1E8ADF5EBB1 FAEBB1FEF7BAFFEAA7D7B46BC99E4FF0C677FFF2AEFFF9B8F8F0AFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC EEEEEEE4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E6E6E6DFDFDFB0B0B05E5F5E333333393939B9B9B9 E7E7E7F3F3F3FAFAFAFEFEFEFFFFFFFFFFFFFEFEFEF4F4F4DCDCDC9A9A9A999999B9B9B9D2D2D2 DADADADCDCDCD8D8D8CACACA7D7E7D3030302728276D6E6DCCCCCCE0E0E08F8F8F4141412B2B2B C7C7C7FBFBFBFFFFFFFFFFFFEBEBEBB0B0B06161611B1B1B808080F7F7F7FFFFFFFFFFFFFFFFFF FFFFFFF1F1F1B8B8B86F6F6F181818616161CDCDCDF6F6F6FEFEFEFFFFFFFFFFFFFBFBFBDBDBDB A3A3A3272727363636818181CFCFCFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD E9E9E98A8A8A2626263636366F6F6FC3C3C3DBDBDBD4D4D4A6A6A66F6F6F4747474C4C4C8B8B8B CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E9E9F3CFCEF2C1C0F7CFCFFCEFEF FFFFFFFFFFFFFFF7F7FEEAEAF6D8D8EEB0B0E88382DF5F5FDB5F5FE28686EDBBBAFBF1F1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFDF7F7E8E1E1A4EBEBC1FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6CDCDE36163E24F51 FAC8C8FFEEEFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEAE4F2BEB0E2645BDD4343F0A9AAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAFAD1D1D19A9A9A4A4A4A2C2C2C3131316E6E6EB1B1B1D1D1D1 DFDFDFDCDCDCDCDCDCDCDCDCDADADAE6E6E6F6F6F6FAFAFADFDFDFABABAB8B8B8BB8B8B8CDCDCD DADADADDDDDDD9D9D9C8C8C88C8C8C303030323232616161D1D1D1FDFDFDFAFAFACCCCCC7F7F7F 3737373D3D3DDADADAFEFEFEF4F4F4BBBBBB6969692A2A2A646464EAEAEAFFFFFFFFFFFFFFFFFF FFFFFFF6F6F6C4C4C47575752F2F2F414141C5C5C5EFEFEFFBFBFBECECECE5E5E5E4E4E4E4E4E4 E4E4E4E4E4E4E5E5E5E2E2E29D9D9D4E4E4E1D1D1D4F4F4FB5B5B5F2F2F2F3F3F3FAFAFAFDFDFD F7F7F79595952C2C2C2A2A2A6B6B6BB4B4B4E1E1E1D9D9D9B8B8B88A8A8A4343434B4B4B818181 C8C8C8FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFBEFEFEEB3B3F3B9B9FCD9D9FFF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFCE7E7F0B3B3 F1BFBFFBECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE2E3A8E8E9BAF9FAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBF3F0EECEE3D188DEB142EED499FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF8F5FFE2D6FFE2C9FFEACA FFF7E7FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFEF2F2F7BEBEE13434EB7B7BFCEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFEFEE3DBDBE1AAAAE77979E15252E16464F3AFAFFFEFEFFFFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDF8AEADC86E9DA85EADB87 ECDD89F5E693F1E291F1E190ECDD8BE8D789E6D98AE2D688E0D586ECE192F1E697E9DE8EEDE291 F0E593EBE08EF1E693EBE18CEDE48FF1E491F2E390F5E692F3E48FF0E18CF2E38EF1E38CEEE088 EBDD84E7D980E5D77EE3D67CF0E788E9E484EAE486F1EA8FF2EB91EDE68CEFE88FF4ED92F7F095 F7F193F6F091F7F191F9F496F4EF94F3EE93F4EE96F4EC97F4EB96F7ED96F8EE96FCF297EEE485 E6DC7BECEA8BEEEF95EFE78DFAE48EFFE38DF7D57ECCB158B6A146FFF196F7EC92F7EB93F3E590 F5E993F6EC95EDE290F0E394FCEFA1F1E497ECDC90E5D586E9DA88ECDC87E8D880F2E288F0E289 F2E48CF8EA92F1E28FF9EA98F8E998F0E190FAEB99EADB86E7D982F4E68DF2E88EEBE186F5DF8A EDDB87E4DF85EFE98AFFE88DCC953ED9A750FFE68DF0E892F6E89DF1E597F2E794F5EB96F5EA96 F7EB96F1E58FEFE18BF3E48FE6D87FEBDB84EEDE86EEDE85FBE791EED682D2B768E9CD83A2893F 7D6B23F3E89EEDE79BEDE698ECE091F1DC8EF7E091EADA8AF0E190ECDD8CEDDE8CEEDE8FEBDB8D EFDF91F3E295EFDF92EDDD90EEDE91EEE292F4EB9DE9DF99E8DDA3DED29ED9CE9CEDE3AE4D440F 7C7437F7EFB7554E19918858E0D4A3F1E6B2E7E2A6D7D08AEDEAA0666423A5A161615D1FE5DDA0 F0E6A8EFE5A0F0E79FEDE69AEBE596E8E193ECE094EFE296EFE195F2E199E5D78FF8EAA4EEE39D E9DE9BF6EFBE413D2B838340FFFFB9EEE8ABEBDF9EE9DB98F0E1A0E2D294EEE197FAEEA8A1906F 6E6531EFEBA4EBE6A6867C43796B34FFE9B0AD90509E7E3AFFE9A2F0D990F1E59CF1EEA6E5E29B EDE39DF2E59CE9E394E5E092EDDF99F0D598F3E3A1EFE99FDDCB7FBD7933B56623EACD82F8E89B EEE399EAE59EE5E09EEFE7A6E8DC9DEDDA9DF0E19EEADF99E8E097EAE495ECE492E6DE8BD8D17A DAD37AE8E187E7E089E0D988EEE59AF2E7A5F6EAAEF5E9B1EAE09AE8DF92E2D98EE6DD92F0E79D EDE39BE9DF98F2E9A2E2D993E8DD9BE5DA98EEE5A3D2CA8CC1BA7CC4BC7BDBD28DEAE199E4DB90 EEE59AECE098EDE39CF3E8A3EFE4A2E7E29ED9D492E9CC8EEFC281DBA660E4B66BF3CA7B9E7126 703A0DE9B880FFE0ACF2EAB33E3F216C6D33F9F5C2FBF5C4CCC493E6DBAE988E620A0100676042 A5A1864D4D351012000506041615080D0C006C6B5935332A040000030000423D318C87772F2A19 4A472A9E9A73BCB389F8F0C2FAF8C6756A36554C10FFFFCAEEECAFF0E8A9EFDF99C1A458E7BC6C C4973CF6C260E9A951D79040FFDA8BF2F59BD8BD73AF7D40F1D392EFD694F3E39EE9E79CE5D480 D8BE69D2B86AE5CE88F3E09EF0E09DEDE49FEBE2A1DAD499FEFACCB1AD880C0800BCB47BE6DD9C EDE59CF2EA99E5DB88EDE091F0E29BF2E6A4FDF2B3F5ECACF2EBA7ECE3A3F1E3A9E0E19FE0E59E F7F2A9FFE39FE3AF6ECF9051F1BE7AFFE89FF1E294D8D284E8E29DF2EAADF0E5A8ECE0A2FDEEAD FDEDAAFDE7A2F3DD95C7A75CBD9A4EF2DA8AFFF4A7FFF0ACFDF6B5F6EEADFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFEFEFEF5F6F5BCBCBC5E5F5E383838464646 CECECEF9F9F9FFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1CECECE646464525252717171 8989899090909191918D8D8D808080535453303030525252999999DBDBDBDDDDDD8D8D8D3F3F3F 292929C7C7C7FBFBFBFFFFFFFFFFFFEBEBEBAFAFAF5F5F5F1818187E7E7EF7F7F7FFFFFFFFFFFF FFFFFFFFFFFFF1F1F1B8B8B86D6D6D161616606060CCCCCCF6F6F6FEFEFEFFFFFFFFFFFFF6F6F6 BCBCBC727372181818494949AAAAAAE8E8E8FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF5F5F5ADADAD525252393A394546458181819191918989895959593E3E3E4A4A4A7E7E7E CECECEEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5DAD9ECB5B3F4C6C5FDE5E5 FFF7F7FFFFFFFFFCFBFBDDDDF5BBBBEAA2A2E47C7CE15A5AE16161E37F7FE69897EDBBBAFCF1F1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFBFBF2F7F7E6F4F6E0 F8F9ECFEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFFFFF6C6C6E35F60 E25050FAC7C7FFEEEEFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E7E6EFB6B5E0605FDD4445EFA9AAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6AEAEAE5C5C5C1A1A1A151515313131636363888888 9090909191919191919191919191918D8D8DB1B1B1E7E7E7FCFCFCD3D3D3808080464646717171 8585858F8F8F9292928D8D8D8080805C5C5C313131575757989898E1E1E1FEFEFEFAFAFACCCCCC 7D7D7D3535353B3B3BDADADAFEFEFEF4F4F4BABABA686868272727626262EAEAEAFFFFFFFFFFFF FFFFFFFFFFFFF6F6F6C4C4C47474742D2D2D3F3F3FC4C4C4EFEFEFFEFEFEFDFDFDFCFCFCFCFCFC FCFCFCFCFCFCFCFCFCFDFDFDFAFAFAA8A8A84E4E4E2323235E5E5ECACACAFFFFFFFDFDFDFEFEFE FFFFFFFFFFFFB5B5B55A5A5A3131314444447373739595958E8E8E6F6F6F5050504848487A7A7A C4C4C4F1F1F1FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEF9EDEDE3A8A8EABDBDFBEEEEFFFFFFFDF7F7FAE5E5FAE1E1FEF5F5FFFBFBFBF0F0 E5AEAEE8B8B8F8EAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7F8E6E6E5ABDDCF76E3C36BF2DFB2FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE2E1FFDCCB FFDFC0FFF1E1FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFAFAF7C7C7E13232EB7474FCE5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF9F9FAE8E8F7D7D7 F7CACAF3C7C7ECC0C0DFA5A5DC7575DC4C4CDF5C5CE79898F6D7D7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E58DF1E38AEDDF86 EDDF88F1E38CF4E591F7E894ECDD89EEDF8CF3E491EBDF8CECE091E4D98AEBE091EFE494E9DE8E E6DB8BE6DB89E9DE8CEFE591E7DD88E4DA85E9DC88ECDD8AEFE08BEFE08BEFE08BEFE289F1E38B EFE188EADC83EEE087F1E38AEADE83EFE687EEE889F2EC8EF5EE93F2EB91EBE48CEEE78FF4ED93 F5EE93F1EB8DF1EB8BF4EE8FF9F498F5F195F5F095F7F199F7EF9AF5ED98F6EC95F8EE95F1E78C ECE185E6DC7CE2DF80EEED93EEE28AFBEA94FEE28CF7D57ED4B85FD3BE63FFFEA2FCF299F2E68E E9DA85EFE48DEDE38EEFE492F6E99AF6E99AECDF91FBEB9DF3E493F5E692F7E792F6E68EFFF095 F2E48BEEE088F4E68EF2E390F8E998F2E392F3E493F5E693EDDE89E6D781EDDF86F2E88DEEE488 F7E18BEEDD86E0DC80ECE688FFE98CD29B42DDAB51F8DD83EDE58EF4E699EFE395F5EA98F8EE99 F5E995F6EA95F2E790EADC87F0E18BE7DA81F0E089F3E38BF2E28AF2DE87FBE48FCFB463E9CC80 F5E297F2E397EDE395EBE595E8E190E7DA89EDD988F1DB89ECDD89EEDF8BEADB87E9DA87EADB89 EDDE8DF1E291E7D888EADA8DE8D88BEBDB8DF3E697E5DC8EE9DF99EBE0A4DACE99F0E6B2B2A971 3D3403948F51F9F3B9726B35958C5CF0E4B6E6DAA66A6025C7BF7EE0DC9883803C868244625D27 C4BD84EEE4A5E6DC97ECE49BEDE59AEEE79BE9E294EFE397F2E698EADD8FEDDD92F7E89EEBDF96 E9DF98EEE59FBFBC87413E1DEBECA9BDBB75ABA569EAE19AE9E093E9DE98F9ECB3F3EAA7F6EEAC C2B690413904FAF5B2F7F2B482793F867841FFF3BAB59657916F2AFFE9A0FAE499F2E79CE8E49A E1DB93F0E59CF2E297EBE493E9E494E2D68DF1D797F8E9A6E7E299EFDF93E09F59BB6E2AEFD388 F6E79AE8DF95E7E39BE6E3A0F0EAA9E7DA9CE8D799EEDF9CEEE39CE5E095E4DE92F2EB9CF3ED9C DFD985D8D27BD3CD76E0DB85EEE796F3ECA0D5CC87EAE1A2FAF1B5E7DF9AEEE69CE9E198E6DE96 F0E89FF0E89FE1D991EAE29AE3DB93E6DD96E4DB95E5DC98CFC7899F9757A29B58AFA662CFC77F E8E197E5DD92E5DC93E6DF96EBE39DE5DC99DFD493DACC8CE5DE96EEE196D1AE63D6914EC97937 A35F1ED0AC65EFE39EF2F3B1CFC68D1A1403645F43F0E9CDF6EDD0C3B997978A7011040041351D 130B00100A003A371EA7A68B25211C0000000F0C0A0A07060F0B07322D273D3931020000221D0F 847E67F8F3D1F9F6CEF3EDC1FEF5C5A29764322901D2CC96EBE7B3E4E1AFEEE5B7FFF0C1DCBC88 B48950B9873CE9B056F7B565E5984EFEDB90FFFBA4D3B26A9E6529FBDA9BFCEAAAFAE9A3D7CF84 C8B765DFCB78F6E69AFFF3ADFFF3B0F7EBA7F3EAA5F4EEABF0ECAEEDEAB7DAD7AE191405918B52 F5EDADF5EDA5F0E796DCD27FE9DE8FF8EBA3EDE2A1EEE3A5E4DB9CEBE5A3EBE8A5E6E4A2ECE5A4 F2E4A2F1DD9BFAE3A2FFE7A5D4AC6ABA8D4BDDB670FFF6A9E8E290E9E8A6E9E6AFF2E7ACFFEEAE FFEAA2FFE79AEACC7DB79345D0AF63FDEAA1F5E8A3F8EAA8FCF1B3FDF5B6FAF2B3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAC1C2C1656665404140 505050D3D3D3FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9DEDEDE7A7A7A4E4E4E 4747474343433D3D3D3C3C3C3F3F3F474747575757707070A9A9A9D9D9D9F0F0F0DBDBDB929292 474747313131C9C9C9FBFBFBFFFFFFFFFFFFECECECB2B2B2656565212121838383F7F7F7FFFFFF FFFFFFFFFFFFFFFFFFF2F2F2BBBBBB7373731F1F1F666666CECECEF6F6F6FEFEFEFFFFFFFFFFFF F4F4F4ACADAC5B5C5B1919195E5E5ECDCDCDFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFBFBDADADAA2A2A26D6E6D4647463F3F3F3C3C3C3D3D3D4242425F5F5F909090 C5C5C5EFEFEFFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D7D7EBB1B0F5D0CF FEF3F3FFFCFDFFFFFFFEF8F8F2BEBEE68484E07575E68282F09C9CF5BABAF2C4C4ECB5B3EDB9B8 FCF1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F1F1D5E5E5AF DCDF95E8EAB9FAFAEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF8F8F6BABA E35A5BE25152FAC8C8FFEFEFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF0F0F7C9CAE66D6EDE4647EFA9AAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4A4A4A44C4C4C1818180F0F0F1B1B1B2F2F2F 3B3B3B3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C353535757575D6D6D6FFFFFFE4E4E4979797545454 4C4C4C4444443D3D3D3B3B3B3F3F3F4747475353536D6D6DA3A3A3DADADAF5F5F5FFFFFFF9F9F9 CECECE8282823C3C3C434343DBDBDBFEFEFEF4F4F4BDBDBD6D6D6D303030686868EBEBEBFFFFFF FFFFFFFFFFFFFFFFFFF7F7F7C6C6C6797979353535474747C6C6C6EFEFEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEAEAEAE5555552C2C2C666666CFCFCFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDDDDDDA9A9A96A6A6A4545453C3C3C3C3C3C3D3D3D4444445858588C8C8C BEBEBEEAEAEAFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFEF9ECECE2A7A7E9BDBDFAF1F1FFFFFFFAE6E6EEAAAAEC9898FBD8D8FEF2F2 FAF1F1E4AEAEE7B7B7F8E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7F7E1E6E5A0E2D67EF2D69CFAEACFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFE2E3 FFDBCBFFDDBFFFF0E0FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF7CCCCE04040EB7474FCD6D6FFF9F9FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E3E3ECAEAE E57A7AE45757D95151D05252D95454DB5555DD6060E89999F5D6D6FCF3F3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7DA7EE7DA7F E9DB80E8DA81E5D77EE5D77FEEE088E5D77FEFE18AFBEC97F2E693F8EC9EEFE494EADF8FE5DA8A E7DC8AECE18FEDE290F3E994F4EA95EAE08BE2D881E8DB85EBDC87EADB86EBDC87EEDF8AF1E38B E7D980EEE087F1E38AF1E488F9EB90FAEE92F5EC8DF5EF90F7F193F5EE93F3EC93F3EC94F2EB93 F5EE95F5EE93F1EB8DF1EB8CF4EE90F5F095FAF49BF9F39BF5EF99F8F09BFCF39EFFF59EF9EF96 F0E78CFCF196FCF394EEEA8DF6F59BF6EB92FDE791F1D37EE9C770D4B85FE9D479FDF094F6EB91 F3E990EADE88F5EA95F1E793F1E694F6EA98F6E998F2E697F1E193EBDC8AEEDF8AF7E791F6E68E F2E28AF6E88FEFE188F3E58DF2E390F7E897EEDF8EF7E897F7E896F2E38EEBDD86EEE087F2E88D EFE589F5DF89F4E38CE4E084E4DD7DFADF82D49E44E4B357FCE386EFE88DF1E493F0E493F4E997 F1E792EBE08CECE08CEBDF89EDDE89F2E38EE7D981EEDE87F2E28AF2E189F3DF86E6CF79E0C772 F2D585F2D98AF3E191EFE595EDE896EDE793EEE18FF0DD8BF0DB88F5E790F3E58DEFE189EADB86 E9DA85ECDD8AE9DA87E5D683EDDE8DE9DA89E5D685EBE18FEAE394E2D993E3D99CDDD29CD6CD96 716A30756F31908A4CE4DFA457521B8C8555FFF3C796885F443910C9C183D8D4938C8848605B21 716B3E9E9864FCF2B5E8DF9AE8E095F1E9A0DCD489E5DE90F2E699EEE193EFE293EDE091F9EBA0 F3E79DFCF3ABF7EFA64C4812908F67FDFCB975733C615A2AD7D287E8E290F4EDA4BDB383A8A26D F4EFB6CCC89C423C07DED999FBF5BA8C824C64571FF7E5AACAAD6D87661EFEE194EFD98DE4DA8C E8E49AECE49BF2E499F1DF92EFE895ECE794D9CC80F7E09DF7EAA7DDDB91EEE395E4A55FAB611E EFD58AFBEB9EF1E99EEFECA4E8E5A1EDE7A6F2E5A6F4E4A6EEE09CE8DF97E8E298E6E196EFE79E F6EEA2F5EE9FF6EF9EEAE490D7D17DE4DD8DF3ECA0E5DC97F4EBA9E4DA9DE8DE9AE0D88FE9E198 F1E8A3E9E199EFE79FEDE59DE7DF97E4DC93E9E198F2EAA2EAE19CF3EAAAE9DFA0F3EAA7CEC782 CCC57EE5E197DED98FE8E298E0DC92DCD78ED9D28CD7CB88EBDB99E1E398E2E192DABA709E4B11 96320BE09052F7DC93B7BD6EDFEEA2B5B272150D000A0301201805342A0E10060313060081754E BDB284DBD2A3DCD5A2F8F3BFF7F4C4A3A2875856451E1D092522103F3D2BF6F6DCCDCAAABAB790 E6E4B5F3F1BDCCCC91DEDDA5E7E6B689834E0E06006D6635ECE6B6F8F3CADCD8B4FFF9DBE5CEB2 4A28146A3B18BC884CCC9140CC7C33DC8945FFEBA3FCF4A3ECC27DD4965BFFE3A3FFEBABEACE88 C7B96EE8DC8AFBEF9DFFF2A7F7EAA4F9EBAAFFF5B2EFE8A2EFEBA8EBE7A7CDCA94F4EFC44A451C 67612DFCF5B6F7EFA7F1E899E6DC8CF3E89AEADD97F5E9A9FFFBBDF8EFAFF4EFADEDF1AAE0EB9F F5E8A5FFF2B6FFEAB0F8E7A8FAEFADFAE9A4EBC987C19853EFCE82FFF6A3EBE6A8FBF6C3FDEFB5 FEE5A1FFE99ADEB05BB68832ECC872FFF5A7E9D893D5CF94F4F3BBF5EFB5FBF1B6FEF6B8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBD3D3D3929392 797979838383DFDFDFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1AFB0AF 8485846A6A6A5757574C4C4C4A4A4A5050506161618A8A8ABBBBBBEBEBEBFFFFFFFFFFFFE5E5E5 B3B3B37D7D7D6E6E6ED9D9D9FCFCFCFFFFFFFFFFFFF2F2F2C9C9C9929292636363A7A7A7F9F9F9 FFFFFFFFFFFFFFFFFFFFFFFFF6F6F6CFCFCF9C9C9C616161929292DCDCDCF9F9F9FEFEFEFFFFFF FFFFFFF6F6F6BDBEBD808180595959939393E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF9F9F9E3E3E3B1B2B17D7E7D5656564A4A4A505050707170A2A2A2 D6D5D6F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D7D6EBB2B0 F5D1D0FBF1F4F7F5FDF7F9FFFCF7F8F1C1C1E68B8BE58888EFADADFCDFDFFFFFFFFCF4F4F0C7C6 ECB7B6FCF1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9F0F0D2 E1DF9ED2C758DCD481EFEECDFBFCF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF8F7 F6B9B9E35A5BE25455FAD1D1FFF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FDD8D8EB7878DF4748EFA9AA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7BBBBBB7B7B7B5C5C5C5050504E4E4E 4C4C4C4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4444447E7E7ED9D9D9FFFFFFF5F5F5C4C4C4 9191917070705A5A5A4C4C4C4848484F4F4F606060818181B5B5B5E1E1E1FFFFFFFFFFFFFFFFFF FBFBFBDDDDDDA8A8A87676767A7A7AE6E6E6FFFFFFF7F7F7D1D1D19898986D6D6D959595F1F1F1 FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9D7D7D7A1A1A17070707D7D7DD7D7D7F4F4F4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDC6C6C68787876A6A6A939393DCDCDCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9E7E7E7B2B2B27C7C7C5959594747474C4C4C676767909090 D0D0D0F1F1F1FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEF9ECECE2A7A7E9BDBDFAF1F1FFFFFFF7DCDCE68888E06969F1B7B7 F9E2E2FAF0F0E4AEAEE7B7B7F8E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9E8EEEDB7EEE5A7FDE9CEFFF4E9FFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8 FFE2E3FFDBCBFFDDBFFFF0E0FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF4CFCFD74A4AE57171FBC5C5FFF0F0FFFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF9E0E0EEAFAF E07575D94747D83535D23D3DCF4C4CE05C5CE67777E89C9CF4D5D5FFFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D778 DED173E2D577E8DB7FEBDE81E2D57BEADC82E4D67CEADB83F0E28AE8DD87EDE192EFE494EEE393 E4D989E4D987EEE391F6EC99F4EA95ECE28DE5DB86E8DE87E8DB85E4D580E3D57FE6D782E9DB82 E9DB83DFD178EFE188F2E48BE9DC80EEE185F2E68AF3EA8CF6F091F6EF94F1EA91F1EA91F6EF98 F3EC95F2EB92F3EC93F7F195F9F395F8F294F0EB8FF2ED94F4EE96F4EE98F5ED98F7EE9AF3E994 EAE08AFDF399F5EA8FECE283F1EE91F1F096F5E990F9E38DF6D782F2D079D2B65DF8E489EFE287 EDE389F2E88FE7DB85F5EA95F6EC97EEE391EDE18EF5E996F2E694EFE08EEEDF8CEFE08CF4E48C F3E38BF0E088EEE087EADC83EFE189EEDE8CF4E593EDDE8DF0E190F7E895F0E18CEDDE88EEE087 E8DD83E3DA7DEED882F6E48EE6E286E1DB7AF2D373C0882DDDAD50FFED8DF0E98CECDF8DEFE493 F2E795EDE38EECE08CEEE28EE7DB85EFE08BF5E691E7D981EADA83EADA83E6D67EEFDE84F0DB82 E2C873E5CA76FFEB99F3E08EEBE08BE9E38CE9E38DEEE28CF0DD89F0DD87F6E78FF4E68EF6E890 F1E38AEEDF89F1E38CEADC87EDDE8AEEDF8CEBDC8AE9DB89E8DE8CF4EE9FE8E099E9E0A2E8DFA6 857C448A834A756F31969151F2EDB266612A90895ADBCFA31A0D00382D084C460DE7E3A7BBB77B 4E49128D88546E6730FFFBBCE9E09BE3DB90EDE59CD7D085E5DB8FEFE396EADD8EF0E494E8DC8C F3E898EFE69ADCD68BF9F3AA716D29A7A765FFFFC855512B484221E4E399ECEA99E4E19D1E1600 120C00A7A577EAEABF393509C8C284FFFDC4837A43887A43FFF0B4DBBE7D826118FCE799F9E498 E3D88ADFDB91F0E89CEFDE93EFDD8EF0E892EAE48EDFD283EED791F4EAA3E2E398ECE496E2A763 BE7733EBD185F7EA9CF0E79DEEEBA3E2E09CE7E1A0F5EBABFDEDAFEEE29DE5DB93E9E49AEFEAA1 EDE69FE9E199EEE79BEEE799ECE595E5DE8DDFD889CDC67BDAD38ADCD48FB9B16FD7CE8CC4BB79 D6CD89F8EFABF1E8A3E9E19BF5EEA6E7DF97E3DC92DFD78DEFE79DE9E299E2D999CDC484C7BE7D E6E09BF1EDA6C6C37AD5D288E2DF95DAD78DD4D187D4D189D1C681D6C280DFD68EE4D48AAA833B 974C0DCC793ADA9654C8AA5FAAAB5AC2CD7DAFB269565230342D18211B1040381C61592AABA169 E6DEA1C7BF7BEFE7A1E6DF95E7E193DCD88FEDEDBCB7B89253542D75765240401F858559CFCE9C C1C088C8C988D2D38FECEDA6E9EAA95654271A170987814AF1EABAF8F3C7EAE6C2DFDBBCA99D85 654E3C190000461505DAA873FFD58BCE7D3CAD5F1FDEA560F8E99BFFDC98DA9D5FF3BD7EF3CB86 E3C981EEE194E0D988F2EA9CF1E8A0DFD795E4DC99EEE7A3EFECA5E1DE97DBD795CECB94F8F3C5 60592D37311AEDE5A8EDE6A0E8DF93E3D98AE2D78CD8CE87E1D696EFE5A8E1D998E6E09EEDF4A8 E6F5A3ECDD97FBDBA0FDDFAAF7E9AEF5F4B5F9FBB9F8EBA7D3B068C7A153E7C876FBEBAAF3E3AE FFF3B6FFEFA7E4BA6ACB9D47F7D079FFE996FFEC9FF3EAA8FAFBC3EAF0BDEEE9B1F3EAAFFAF2B7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7 ECECECE9E9E9EAEAEAFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC F1F1F1EAEAEAE6E6E6E3E3E3E1E1E1E1E1E1E2E2E2E5E5E5EBEBEBF3F3F3FBFBFBFFFFFFFFFFFF FBFBFBF2F2F2E9E9E9E6E6E6F9F9F9FFFFFFFFFFFFFFFFFFFDFDFDF6F6F6EDEDEDE4E4E4F0F0F0 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF7F7F7EFEFEFE4E4E4ECECECF9F9F9FEFEFEFFFFFF FFFFFFFFFFFFFEFEFEF4F4F4EAE9EAE3E3E3ECECECFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF9F9F9F1F1F1E9E9E9E4E4E4E1E1E1E3E3E3E7E7E7 EFEFEFF7F7F7FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5DAD9 ECB4B3F6C5C3F6DBE2EAE1F6EAECFFFCFBFEFDF5F5FBECECFBEBEBFCF1F1FEF9F9FFFEFEFAECEC F0C5C4EDBAB9FCF1F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCF6F5EED0E2BD54DDC057E1D891F0F0D1FCFCF6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6C7C8E36061E25A5BFAE1E2FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6FDD8D8EA7878DE4648 EEA8A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F4E8E8E8E3E3E3E1E1E1 E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E0E0E0EAEAEAF9F9F9FFFFFFFDFDFD F5F5F5ECECECE7E7E7E4E4E4E2E2E2E1E1E1E2E2E2E5E5E5EAEAEAF2F2F2F9F9F9FFFFFFFFFFFF FFFFFFFEFEFEF9F9F9F0F0F0E8E8E8E8E8E8FBFBFBFFFFFFFEFEFEF7F7F7EEEEEEE6E6E6EDEDED FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8EFEFEFE7E7E7E9E9E9F8F8F8FDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5EAEAEAE6E6E6ECECECF9F9F9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAF1F1F1E8E8E8E3E3E3E1E1E1E2E2E2E6E6E6 ECECECF6F6F6FCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF9EDEDE3A8A8EABDBDFBEEEEFFFFFFF8E3E3E79C9CDC7373 E09696EFCACAFAEDEDE6AFAFE8B8B8F8EAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFBFCFCF3FCFBF0FFFBF6FFFDFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFF8F8FFE2E1FFDCCBFFDFC0FFF1E1FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF0CFCFC74A4ADA6868F8B3B3FFE8E8FFFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCEDEDEB9999 E06060DD5858DC7070DEA0A0EBC6C6F7E2E2FAE4E4FBE8E8FBEDEDFDF7F7FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E9DC7CEADD7DE4D777E5D879EDE082F0E386F0E387EDE084ECDE83E8DA81E5DA82F0E494E8DD8E E9DE8EE6DB89E3D886E8DD8AF1E792F5EB96EDE38CE5DB84E6DC85E7DA85E9DA86EDDF87F3E58D F1E38BE8DA81E4D67DF5E88EF5E88CE9DC80EDE084ECE084EFE689F7F194FBF499F4ED93F1EA93 F7EF9AFBF39EF2EB93F3EC92F9F397F9F396F3ED91F4EF94EAE48BF2EC94FEF8A2F9F19EEDE491 ECE18DF1E790EDE289E8DD83EDE386EEE88CE1DE85F5EA91FFEE99FFEB96EDCA73BCA047FFF195 F3E58AF2E88EF6EC93E9DF88F0E691F9EF9AEBE18CE4D884F4E894EADE89F0E18EF7E894F2E38E E7D780E8D881F2E28AF5E78EF1E38BF5E78FEDDE8BF2E391EBDC8BF3E493FEF29FF4E590F7E892 F8EA91E6DB81E0D77BF2DC87F8E790E2DE82E2DB7BFCE181CA9437DEAF50FFEE8EEAE385ECE08C F3E896F1E694EFE690F8EC98FDF19DEBDF89E8D984F2E38EEBDD84F1E18AF0E089E8D880EDDC82 ECD87DE9D079DCC06DF7DE89EAD680EFE38BE7E086E6DF86ECE189F4E38CF7E58FEFE087EFE188 F4E68DEDDF86E8DA82EDDF87F0E28BF2E38EE6D782E5D682F0E28FF0E594E6DE91F1E8A3FDF4B7 BBB277272107C2BC7D6F6A2AA6A262FCF7BB534D188F8859463B22564924786F3B282200E3DFA5 E5E2AA423F0C9A96623B3600FCF5B8E7DF9AE6DE94E8E097EFE69DEFE699EEE394F1E594EFE492 EEE492F0E697DFD78AE5DF96FAF6B08583419D9C5FFAF8BF7A7650352E12CAC989E6E89D727137 2922140F0A096A6745E6E6BC524E1DB3AD70F3EDB5655B259B8E54FFEDAFEACC8A77570DF6DC8F FCE79BEDE296ECE89EEAE097E9D88EF1DE8FEAE189E2DB85ECE08EFDF2AAF1E89FE8EB9EFAF4A4 E0A764B97431F0D98DF6EA9CE8E096E9E9A0E4E3A0EAE6A4EFE5A5FBEDAEEEE29EE8DF97E7E399 EBE79FEBE3A1EAE39EEFE8A0DFD98EDFD98CEBE597FBF5A9E3DD92E5DF96C6BF77C4BE78CFC786 DBD393EEE7A5F7EFAEF4EEA9F4EDA7F0E9A3E9E29AE8E299D4CE83E9E497EEE69DE5DA99DAD08F CDC484DFD995EBE8A1E4E19ADADA91E1E197DAD88EDDDA91DBD88ED4C982E1C583F9D594C89A59 9C6825E1B06AFFE09AB78D45AF8A42FFE79EF4EDA3E4E49AECEBABDBD59DD9D599F0EDACEDE79F EFE99BF3EC98F2ED94EDE68BEBE687EBE585F1ED92E3E4A4C6C9952B2C0B2A2B07535334A09F71 C2C28D737338D5D598FFFEC0FFFFCC706F381D1B08D4D3A9F1EDBDF8F3C3B9B4865F5C39221F17 0A0000090000361500794B2DE5B780FFECA7BF73359B5515663600CEB96CFFE19AB27C3CF2C383 FFE19AFBE99DEDE393ECE898F3F0A4E8E29DDFD998EAE6A5EDE9A7EBE8A3E4E29BDFDB9AE1DCA3 FEF7C88D86592B2512E8E2A7EAE2A0ECE599F4EEA0EEE59AEFE49FEFE5A6F3EBADD5CE8FD5D28F E1E69AE7F29EF2E79FF3D79AF7D7A2F5E5B0EEEEB3F3F8B6FBF6AFFCF0A5F3CC7DCC9C4DF4CC86 FEE5A7F5D28FBC964EBF9A4CF5DB8BFFEB9CF7E396F3E69FF1EDACEDF0B4E7ECB5EAE8AEEFE9AE FBF5B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAEDEDF4D5D5F3C4C2F1C9CDEFE0EDF3F5FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF9E8E7 F3D0CFF3C6C5F6CFCFFDF6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1FEFEFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFCF7E9F2DD9BE7CB6EDEC460E3D68FEFEDCCF9FAEFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF7F7E8E1E1A4EBEBC2FCFCF5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFFFCFCF6BEBEE35C5EE25C5DFAE6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFDE5E5EB8182 DC4546E49D9EF1F6F6FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF0F0F1B7B7F5BABAFDD4D4FFF3F3FCE9E9F2B4B4 E78383DF7575EDACACFCDFDFF2B7B7F4C3C3FCEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9EEE3E3A9E9E9BBF9F9EE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFF8F5FFE2D3FFE3C8FFEDCCFFF8E9FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF3D3D3D25959D96868EBA2A2F9DFDF FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8FCBEBE E86868E15656E88989EEBDBDEFD9D9F7F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDCD06EDCD06EE6D879E4D777DBCE6EDBCE70EFE284EADD7FE8DB7FEDE084E6DB82E2D684 E2D785EADF8DEFE392F2E893EEE48FE8DE89E9DF88F3E992F9EF96ECE289E5D880E5D77FE9DB83 EEE087F0E289F0E289E9DC80E9DC80E9DC80EEE183F3E688F0E586F3EA8DEEE88BF0E98EF7F096 FAF29CF7EF9AF3EB96F9F29BF5EE94F7F095F9F295F2EB90F7F298F1EB95E9E38DF3ED99FCF4A3 F8F09DFBF09DF5EB94F3E990EDE288EDE286EFE88DECE78FF0E189F7DC88ECC975DFBD66CAAE55 F7E488F6E98EF0E58CEAE389ECE68DECE28DF2E795F4EA95ECE18BECE08AFAEF96E8D984F4E68D FAED95F3E38CECDC85ECDC85F0E389F1E38BEBDD85EADB88F0E190F1E291E6D786FEF3A1FAEB96 F7E992FAEB93ECE187F1E78DF9E38EF1DF8CE4E085ECE585FFE887C89336DCAD4EFFED8CEDE688 F1E48FE0D482E5DA88F5EB96F4E894EADE8AF0E48EF0E18CE9DB85F0E38AF5E58EEDDD86F3E28B F8E98EFCE990E8CF78D0B55EF7DE87F6E289EBDE84F0E98EE3DC81EEE38BF5E791FAE892F3E48B F4E68DF2E48BF4E68DF0E28AE7D981EBDD85F4E590D9CA75F4E590E3D481DFD685DED78EE7E19E F0E8AD3F3806585223F3EEAF666222A4A062FAF8BE6662304A4516120600DACD9E7E764A211B00 CFCB92FFFEC8575323A6A271312B07CDC689EDE5A0E0D88FE9E199E8DF97ECE396F2E797F1E694 EEE391EBE190E9E293DFD990E0DD98FFFDBD5E5D22888652FFFCC99D97791B1502C8C694E9EAAE 403F129089828C857A9693758D8A66585320E0DA9EEFE9B0665C24A69A60FFF2B3FFE49E84631A E2D285FBE59AEADF96EEEAA3E8DE9AF3E29AE7D589E7E08AE1DD85EBE18EF5E098ECE49BE6EA9D F4EE9FD7A15CB6722FFCE196F6E99AFDF6ABE8E79ED8D894DBD794E7DD9DEADD9EF9EDA9EEE79E E4E096F0ECA3D3CB8AD6CE8CF4EDA8EBE49DE3DD93E1DB91EAE49AE8E298F0EAA1E3DD93C5BE77 D5CD8CE9E1A2F6EEAEDFD796CEC783EAE39DE1DA94EAE29BEBE59CE7E197E6E195EEE69DCDC37E E3D996DAD38FE8E19DF4F0ACDADA92E5E69EF2F1A7F2EFA5DED98FF4EFA5E9D58FF8E1A1FEBD83 A15C22D29C5CFFEBA0EAE190E8D98C98742EB98B4BFBD694E8DA93E5DD94E9E199ECE499EEE696 E3DC8BF7F19AD6CF74E5DE83F6EF94F0E78AE8DF82F2EA95DCDC9FD4D6A81F1F0F0D0800746F58 FDF7DEE0DCBDD8D3B0DAD4B1B7B1935B533B0A0403A5A27FFEFBD3F4F0C27D7847120E001B1A02 545224766D41B19C6EE3BF8EB68752ECC484FFF3ADD08C50D69B5DA4823BDECE81FEE398BF944F EDC583EED68EEDE494F0EC9BE7E598E5E59BE9E5A2EAE6A7ECE8A9F0EDABEFECA7E1DE97DDDA99 C7C188EEE8B7B2AB7E27200FD3CD94E4DF9FE2DB91F7EEA3F2E8A1F2E8A5FEF6B8FCF4B6FAF4B5 EEEAA8E5E299F4F5A6EAE69DFBEDAEF7E3ABF5DFAEF9EEB7E6E7A7E8EEA5DCD386FFDF8EE6A85C D7994FE5AF64B4843ACEA760FFE49CFFF5B0FEF5B0F8F2AFF5EFADECE8A8E8E4A4F0ECACEDE7AB FCF6BAF8F2B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDF6F6F2CACAEFBCBCF5D6D7FCF0F0FEF8F8FFFDFDFFFEFEFFFCFCFEF8F8FBEFEF F3CECDEFB9B8F7CDCDFFE8E8FFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3F5F5E1 FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFF9FFFFE7F3E09CE3BD51DCC158E3D995F4EFD3FFFDFCFFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF8F7E5E5E1A8EEEBC4FCFCF6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFCFCFFF2F2F6B1B2E35759E25D5EFAE6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF2F2 EB8C8CDA4445DD9394E8E9E9FAF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF4F4FECECEFFBDBDFFBCBCFCD8D8FAE1E1 F9C1C1F08B8BE05353ED8989FECBCBFFC4C4FED3D3FFF3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAF9F0E7E3B2ECE7BD FAF6E8FFFEFDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFEFEF8F0FBE2C0FCEAC5FEFADDFFFFF3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF6D8D8DC6B6BD86A6ADE9292 F2D6D6FEFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCBCB F88888E64A4AE56767F5C6C6FFFFFFFEFDFDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE6DA79DFD371E9DC7CF1E484F0E384EBDE80F2E587EADD7FEBDE82EEE085E6DB82 EEE390E9DE8CE8DD8BEEE491ECE28DE3D984EAE089ECE28BEEE48BEBE188E4DA81EBDE86EBDD84 E8DA82E6D87FE6D87FE6D97FE3D57AEADD81EFE285ECDF81E9DB7DE9DE7FECE386E7E084EAE389 F1EA92F5ED97F2EA96F8F09CFBF39EF7F098F6EF94F6EF94F0E98EF9F49AF8F29CF7F19BFDF7A3 FFF7A6F9F1A0F4E998EEE490F1E78FF0E58BF0E589F1EA8FF3EE95F8E890FDE490F1CF7BDEBC65 DBC067FFED91F3E78BEFE88DF5EF94EAE38BEEE491ECE18FEAE08BEBDF89E9DE84E3D97FEFE189 F4E68EF2E58CEDDD86EFDF88F9E992F1E38AF6E88FEDDF87E7D885ECDD8CF0E190EADC8BEEDF8C F6E792F6E891F1E38AEDE289EEE38DF8E291F1DF8EE4DF87E9E285FBDC7EC1892DDCAC4EFDE787 EAE485F2E691EBE08DEBE08EEEE48EEBE08CEBDF8BF4E892EBDC87E3D47FE2D47CEBDB84EEDE86 E9D981EADB81F7E58CF2D982DDC26BFBE58DF8E48AE9DB7FE5DC81F2EB91F3E891D9CB76E1D27E F1E38AEDDF87F4E68DF4E68DE9DB84E6D881F4E590EFE08BE9DA86EDDE8BE7D886EDE295E9E29C F3ECACA8A164120B00CAC488E1DC9F4F4B0DB2AE72FAF7C0A29E71020000837951F1E7B690894F 151000C2C084FCF9C5585424A09C6B332D16A59F64EDE7A5ECE59CEEE69EEBE29AEAE194EFE495 F2E795F2E795EBE394E8E196E9E59FE3E1A2EEEDB3747147474425EEEBBCACA68B1B14079B9975 FFFFDB5B5835352D2A514B431D1806201B00ABA577F0EAADE9E3A8CAC087D4C88BFFECACFFF3AB 89681DDAC276F7E095F3E7A1ECE7A5F4ECAAE6DC97F6E89DE3DC89F7F49DE0D785FEEAA2EDE59B E2E799F5EE9FDDA662BB7633F1D68AF0E495E9E298D5D58BD5D592DFDC9AEAE2A2DFD595EBE19C EEE79EEBE89EF2EFA7EAE3A3E8E1A0DDD694D9D38EE4DF97E8E29BF3EEA4E5E097E4DE96E9E39B E4DE97E6DF9DDDD797DDD696E9E2A1F0E9A7ECE5A1EBE5A0ECE6A0E7E19ADED991E1DC92EDE59C DDD28EF1E6A3ECE5A1ECE6A3EAE7A3D8D892ECEAA4EEEAA4F7F1A8DFD68DECDF97FEE6A1F3C285 BD753AB9773BFBD693F0E599ACB363808233F0D693B68B4DDFB175A18040C0AA65CEC078F0E297 DBD183ECE393EDE796ECE393CAC272EFE899F1E59AB4A75FE7DB96A4A367D8D9A8272612070200 746E5BCFC8B50D07000F08000400001B1201342927AEA597FCF9DDD9D5AE534E30312B06AAA670 E4E3ADFEFCC6FFF5BCFCEEB1F7D794AA7C33E3C77DFFE4A0945920BB8C4CF1DD93FFF7A9FFF0A3 B6924BD3A25FDFC97FE3E291E2E392C7C579E0DF97EFEBA9E4E0A1E3DEA1E0DD9CFCF9B5E8E59F E3DF9ECDC890E5DFB08C845B3D3714E8E3AEE1DB9EE2DB94F1E9A0F2E8A1ECE3A0E9E1A2F3EBAE F1ECADF0EDAAF5F0A8EEE59DE4E29BE6E5A3E6DBA0EAD4A0F3DFAAEEE5A8DEE39AE3DE90FFE295 F3AE67B96E1FAF6C18E7B566FFEFA7FBE8A6F1E8AAF6F7BCEEF3B6ECEDAEEDE8A8F5EAA5FFF6B0 F7EFAFF7F2B5F7F2B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFCFCFCE3E3F4BBBBEA9897ECA0A0FCDCDDFFF5F5FFFDFDFFEFEFF9D7D6 F1C1C0F2BFBEF9D0D0FDE7E7FFF9F9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6E1E1A3 F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFAFCF6D9F5E5A6E4C65FE2BD57F4D69FFFF0E3FFFDFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFEEFDF8D8F7E1B6FAEBD0FEFCF8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFCFCFFF2F2F6B2B2E35859E25D5EFAE6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDF3F3EA8C8DDD4345EA9293F8E8E8FDF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFFF1F1FFD6D6FDB9B9F0AEAE E5AAAAE39B9BE16D6DDC2222ED5757FEA6A6FFD7D7FFF0F0FFFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F6F7E3D4 F9DEC8FEE4CDFFF3E6FFFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFAF8ECE9E1ADF0EAC2FCFBEDFFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF1DDDDCA7C7CCC6C6C DC8282F2CDCDFEFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5AFAFE75555DD5555E39191F5DBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE2D575DFD272E8DB7BECDF80EADD7FEDE082E8DB7FE6DA7DF0E388F1E38A E7DC83F3E795F2E795E9DF8CEFE590EDE38FE2D882E8DE87E9DF86EAE087E6DC83E5DB83ECE087 EBDD84EADC83E9DB82E8DA81E9DC80E1D478E8DB7FF2E586F3E688F0E385F5EA8AF3EA8DEEE78D F0E98FF6EE99F9F19DF6EE9CF2EA97F5ED99F4ED95F6EF96F7F095F6EF94F1EB93F6F099F7F19D F8F1A0F7EF9EF5EC9BF6EB9AEEE491F3E992F8ED94F6EB91F3EC91F5EF96F7E68FFFE893F2D07C CBA751E1C36BFCE98DE6DC7FE2DC81F5F095EAE48DF5EB98F0E592EDE38DF5E993F7EC93EFE489 ECDF83F1E489F3E58CEFDF87EEDE87F2E28BF6E88FF7E990EFE189ECDD8AF1E290F2E392F2E392 E9DA88F2E38EF5E790F3E58CF3E890F0E692FBE497F6E395E9E48EEBE389F9DA7FC68E35E8B95D FDEC8DEEE78BF7EA97F7EB9AF6EB99F0E691EEE38EF5E995F8EC96EFE08BF1E28DEDDF87F0E089 F6E68FEADA82EBDD84FAEA93FDE590E4C974FCE18AF1D97FF5E68CE2D87EEEE78DEFE58ED6CA77 E8D988EEE089E6D87FF4E68EF3E48EE8D983EDDE8AE8D986B5A653D8C978E7D887EADB8AE5DA90 E5DD9CE5E0A33F381C766F3EF9F4BCFBF6BC4B460CB6B479FFFFD6908B631F1B0AD6CEA0EDE4AD AAA5660E0C00C6C486FEFCC87E7C4C8986586964386E6930E9E3A1EEE7A0E0D890DFD78DE1D88C EBE090F1E694F3E898ECE498F3ECA6DEDA9BE6E3AEF3F2C22F2E075A5538FAF8C7C5C1A0140E0B 343314A7A7825653340000000C040048421CCAC399FDF9C3EEE9A9E1DB9EFAF1B4E2D697F7E19D FFEFA6AB8B3FB4954AFFF8B1E3D593F8F6BCBAB4794D4011D8C883F1EC9CEBEA96E4DD8CF8E49C F0E99FECEFA0FDF9A9E0A865B36D2BEFD689F1E596E2DD91D4D68CE3E4A0E7E6A3E8E0A0E3D898 EBE19CEFE89FE9E89DE9E89EEDE8A6F0EBA9EBE6A3E8E39FDDD994D3CE8AE8E49CDDD993D8D38E E5E19AE7E29EE6E19DE7E29FDBD695DAD593E8E3A0EAE5A1E6E19DECE8A3ECE8A1E2DD99DCD792 E0D993F4EAA5EADF9CECE5A1F4EDACE3E09DCBC985E2DE9BF0E8A3F8EBA5E3D48EE7D28CFCD390 AC6629B37434EFC17EF5DC96DAD78DD0D68C8E924AD8CF8CD5BB7D9B7339B88B53D9B87BEFD897 EEDB98FBEAA5E6D892FAF0A9FFF6B3DACF8DE5DA9CFBECB2E3D39CECDDA7DBDA98C5C7881A190A 040000746F5DE5DFC288835F807B5488835DB7AE8DEDE2CFFBF3E0C2BD992621143A3408DCD9A5 F5F0B7EDEAAEEFECAEEADF9DF4E19AEDCC7CC0903CF7DE8DFBEAA5B17C42B99151FFF2A8F2E698 FAEA9CC4A65DDBAA6AEEDC92E6E99AE8EA9BE7E499F4EEA6EDE8A5D9D193DBD599F7F2B3E2DF9C E2DF9BEEEAAAE5E0AAF4EDC080784F1D190CD4CF9BD2CD93EFE9A4F7EFA7EAE29ADBD190DCD496 EBE5A9EDE9AAE8E6A4EFE7A3F4E4A4E9E9A5DEE4A1E6E6A6F6E1A8F5DAA2FEEBAEF2EBA2F6E99E EECE86D39450B26919CB8631F4C170FCDA91FDE9A6F2EEB2EFF4BAEAF0B6ECEEB1EFEAAAF2E4A0 F9E9A3EEE7A6E4E0A1EDE9AAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6F6F6E0E0E0B3B3B3A8A8A8A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A7A7A7A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A6A6A6ABABABC4C4C4DFDFDFF7F7F7FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF3F3F9D4D4EFADACEFA9A4FCD4C9FBDED7F7DCDCF7CECE F4C7C6F2C6C5F7D4D3FEE7E7FFF6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAECECC6 E0E1A3F5F5E1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5FDF8DCF1D68FEABD5FEFC372F7D6A2 FEEFDCFFFAF4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFFF7E9FFEED3FEDFBBFFEBD4 FFFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFBFBFCE6E5F0A3A3E05152E25D5EFAE6E6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDF3F3EA8C8CDE4445EF9393FFE9E9FFFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEFEFEF CACACAA8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8 A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7 A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8 A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8 A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8 A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8 A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A6A6A6AFAFAFC8C8C8E4E4E4F9F9F9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECFDD3D3 F2C2C2E9BABAE7B5B5E79A9AE86666F38787FEBDBDFFEAEAFFFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFB FFEDEDFAE3D0F5DFB9F9EED5FEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEF8F8EBE2E2A6EAEAC0FBFBF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF2E2E2CE8F8F CE6F6FDC7272F2C4C4FEF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8F8 F5E3E3E38C8CD34040DC7676ECC0C0F9EDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE2D577E0D375E7DA7CEBDE82EBDE82EADC82E8DA81EADC84F4E68E F2E48CE6DB83E8DD89EFE590E5DB86E1D783E2D881E4DA83ECE28BE7DD84EDE489EAE186E5DC81 E9DC83E8DA81ECDE85EEE186ECDF83E8DB7FF0E385ECDF81EDE082F0E383EBDE7EEBDF80F6ED90 F0E98FEFE88EF4EC97F5ED99F0E895FDF5A2F8F09CF5EE96F0E990EBE489EBE48AF5F098F8F29E FAF4A0F5EE9DF7EE9FFCF3A4FAEE9DF2E795F2E790F8ED95F7EC92F1E98EEFE68EEEDD86FFE893 F6D380BE9A44E5CF77FFEE92EEE487DED97DEDE98EF3ED96F2E896EEE391EAE18AEFE38DF4E98F F4E98EF2E588F5E88AF4E78BF0E088EDDD86EEDE87FAEC93F4E68EEFE189F6E794FAEB9AF5E695 ECDD8CF2E390E8D984E9DA84F3E48CF2E78FF0E596F9E29AF7E39AECE696EEE68EF5D57EBA822C DEAD54FAE487E5DE83EDE090F0E494F3E896EFE590F1E691F6EA96EDE18BDFD07BEEDF8AF2E58C EFDF88F1E18AEBDB83E5D780F3E38CF6DF89E1C26FF7DA84F3DA83EFDF85E8DC82E0D981ECE390 F0E495FFEFA1EFE08CE8D984F5E692F2E390EDDE8BF8E998F1E291C2B262E7D789F3E395F2E294 E2D68EFDF6BAB3AD76211A00CEC997E9E3AFD9D69C504E13BBB880FFFFD95A56314C4731E8E1AD EBE4A4C3BF7B141300D0CE8FFFFFC9B2B080706D40B1AE7D312C06F5F0B0E7E19AF1E8A0EEE59B EEE598F0E495EDE292E9DE90E3DB91D7D190E2DDA7FBF7CB9C9A7200000087825FF6F5BECAC89C 1B160B0604000B0900080400443C21E0DAA8FBF3B1EBDEAAE4DA9FF3EEABE7E2A0EAE1A3F0E5A2 F5E09BFFE39AD1B166A7893FFCEAA7EADCA0F8F2BA453F11332913EADC9EF7F4A9E5E393ECE495 F0DB93EEE69DE9EC9DFAF2A4DEA460AF6625EFD388EFE394E4DF94DFE197ECEDA9EBE9A7EEE6A6 EFE4A4E8DE99E5E097E7E59AEDECA2F5F0ACF1ECA8F1ECA8E6E19DE0DB99DBD694E7E29FE2DD9A E0DB99EBE6A2EBE6A4E8E39EF4F0A9E8E39FD1CC88D7D28DE5E09CE9E4A2EEE9A7ECE7A4E2DD9C DCD796DFD894FDF3ADF2E8A2EFE8A4EFE8A7E4E09FDCD896E7E19EE8DE9AEAD995FFEAA7E3C682 CCA15BB67B35E9C078D2BB71DAD187ECE8A2BCBC7AD3D694898B4BC4BD7FA58F56754E18C09B62 FBE0A4ECD193F2DC9BF8E6A3F5E7A3F3E8A5EBE19FD9CF91E6DA9FFDF0B8E9DDA2F4F5AAE3E79F 717138151100645E48F4F0C3E2E1A4E4E29CF0EEA6FAF6BADDD7A89E9976302E12585126E8E1AB F1E7ADD5CD8FE2DC9DDDD495EEE19DFFEDA5DFB96BAA7522EBD081FBEDA7D29D63D1AB6AFEF0A5 E6D488FEEFA3DCBF76DDAA6DFEEAA3E8EB9FE5E499F1EB9FEDE49CF6EEABF2E8ABDDD597EBE5A6 E7E2A0ECE7A6F4F0B3EBE5B0F9F4C97D78511F1A11E8E3B2DAD59DD9D491E7DF98E5DC97D5CC8C DDD597E0DA9EEEEAAAEFEEABEAE2A2F6E5ABE8E2A4D7DA97E1E4A1F1E5A5E8D193F9DD9DFFF3B1 ECD491A47D38CB9A58FBC77DEBB161BE8B3CF6D388FFF6AEFCEFABF4F2B0EBEAAAECE8A9F0EAAD F7ECAEFFF4B5F4F0AEEDE9A8F3F0ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCEAEAEABABABA535353393939 373737383838383838383838383838383838383838383838383838383838383838373737363636 373737383838383838383838383838383838383838383838383838383838373737363636363636 373737383838383838383838383838383838383838383838383838383838373737363636373737 383838383838383838383838383838383838383838383838383838373737363636363636363636 383838383838383838383838383838383838383838383838373737363636363636373737383838 383838383838383838383838383838383838383838383838373737363636373737383838383838 3838383838383838383838383838383838383838383636363F3F3F767676B5B5B5EBEBEBFEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFEF4F5FBE8E7FBDFD5FDDBC3F5C9BBEDB7B7 ECB1B1F1C7C6F9E6E5FDF6F5FFFAFAFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFA EDECC8E2E1A5F6F5E0FEFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFCF5FCE8CBF5CE8FEABB5D EABC5DFAD9ACFEEDDCFFFCFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAFEEDE6FEE0D0FFDEBF FFECD8FFFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDF8F8F4D4D4E78F8FDD4C4DE36162FAE6E6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDF3F3EA8C8DDE4344EF9191FFE6E6FFF9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF8F8F8 DBDBDB868686393939373737383838383838383838383838383838383838383838383838383838 373737363636363636373737383838383838383838383838383838383838383838383838383838 373737363636373737383838383838383838383838383838383838383838383838383838373737 363636363636363636373737383838383838383838383838383838383838383838383838373737 373737373737383838383838383838383838383838383838383838383838383838373737363636 363636363636373737383838383838383838383838383838383838383838373737363636363636 363636373737383838383838383838383838383838383838383838343434484848818181C0C0C0 F2F2F2FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFB FFF4F4FBEEEEF9ECECF8EBEBF9E4E4F9D6D6FCDFDFFFEDEDFFFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFFFBFDF4EED5E7E1ACF0EDCAFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF8F7E9E3E1A6EBEAC0FBFBF3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF5E6E6 DA9F9FD66F6FDE6262F2BBBBFEF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFC F7E9E9E6B0B0D36D6DC74545E29F9FF8EAEAFEFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D87BDDD073E1D477EBDD82EFE187F1E38AF1E38AF1E38B EFE189ECDE87E9DD88E9DE8AE9DF8AECE28CE5DB85E2D881EAE089F3E991EDE48BF2E88EE8DF84 E1D87DE8DC83E9DB82EDDF86EEE185EADD81E4D77AF0E385EADD7FEEE182F4E787EFE181F1E687 F6ED90F0EA8FF1EA92F5ED98F6EE9AF2EA97F7EF9CF2EA96F4EB97F3EC93F1EA8FF5EE94F1EB94 F5EF9BF6F09DEEE796F0E798FBF2A3FAEF9EF4E997EDE38CF3E88FF7EC91F0E88EECE48CF0DD87 FFE490F5D17EC29F49F2DB82F4E185EEE386DAD579D4D075E1DC85F0E895F2E795EFE590EFE48B EEE388ECE283F3E688EFE283E8DB7EE4D47CE7D781ECDC85EDDF87ECDE85E6D880EADB88F0E190 EFE08FF2E393FBEC9AF2E38EEADC85F3E58BF5EA95EDE195F5DD97F3DF98EDE697F0E793FDDE88 BC822ED7A650FFEF95F0E98FF5E799EEE293EEE391EAE08BE9DE89F0E490E5DA83DECF7AE8D984 F3E58CF2E28BEFDF88F2E38BE4D883F2E18EF7DF8CE3C471FADF8BFFE992F5E189FBF097E9E28A EBE290ECE092F0E193F2E391F7E796F9EA98F2E390F1E191F6E697F8E898F9EB9DF8E89BF5E597 ECDC8FF3EBA8F3EDB3433B12524C2BA29C6BDDD7A4BDBA83413F05BEBC86B5B2820A050057523F E7E1ACE9E59FC2BF77202000CBCA88EEEEB6CAC999545125CECA9A1B1500DAD593E6DF99F0E79F EEE59BF0E798F4E899F1E797EDE496F3ECA3E9E2A5EEECB9B0AD830E0E00060300656043EEEFAF D7D6A01E1B1000000009070049452BDFD6ADFDF8B1E6DD88FCEDB1E6DD9EF1ECA7E5E09DDED694 F9EDAAF2DD97FEE49BE5C479AC8D47EAD091FAEEB5928E57000000AEA670FEF5BCE0DF98EAEB9D E9E396F2DD97F0E79EE1E294F1E599DFA15FB76D2CEFD58AEEE293EAE59ADCDE94E3E5A0EAE9A6 F8F1B1F4E9A9E1D792E1DC93E8E89CDDDD91E7E49BF4F0ABF2EEA9E8E49FE8E4A2EBE7A6E5E1A0 DBD695E6E2A1EDE8A8EDE9A7EDE9A2EDEAA1EAE79EE3DF99E1DD98E7E39EE0DC9AE3DE9CE1DC9B DFDB9AEAE6A6FBF5B4ECE29CF9EFA9EEE7A1E0D998E3DF9FEEE8A8F1E7A7DFCF90E1CC88FFF0AD CAA864AA843BD9B464F7E090F3E899CDCB7FEBE8A5EAE9AAB2B375A9B073B8BA7EBAB4799F8952 755618AC8948F7DB97E3CA83F8E59BECDE8FE9E190EAE292E8E193E4DB90E4DB90EEE49DE7E7A2 D5D49D67643D000000484130E5E0B8D6D497DDDC92E2E092E0DD985A541B2E280CA29F6BF9F5BE E2D99EEEE4A5EDE4A4E9E0A2E9DEA1F0DEA1FCDF9CCB9E58B47B30F8D88DE3D38EA77038C39C5B FCEEA3E6D085F7E79AD6B870C3864CFBE29FEEEEA4EDE9A1EDE49AE7DB91EADF9CEDE2A4E3D89C E1D99AE8E0A1E4E0A0E2DEA3DDD6A5F1EBC36B65412E291AEDE8BBD2CD95AAA564D8D18CEDE6A1 E0D898D9D297D5CF93E9E5A6F6F5B2F5EEAFF4E6B0E5D9A0DBD697E3E49FE8E7A0F4EBA4FFE8A7 E9B679B0783DCC9B5FF8D897F2CD88FFE198DEB268DEB86BFDE699FBE99BF7E79BE9DE95E4DB99 E9E2A5F0EBB4FCF9C1E9E7A6F0EFAAF6F5B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0F0C9C9C9757575 6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E5E5E545454 5252525A5A5A6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6060605D5D5D5454544C4C4C 4D4D4D5555555E5E5E6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F606060585858505050 5656565E5E5E5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E5E5E5757574E4E4E4D4D4D 5151515C5C5C5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6060605E5E5E5555554D4D4D4C4C4C545454 5D5D5D6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6060605959595151515454545E5E5E 5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E5E5E6565658C8C8CBCBCBCEDEDED FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6FEEDDCF8DBD1 F2CCCCF1CBCBF7E0DFFEFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFDFBF5ECD0EFE0AFFAF6D9FFFFF3FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF7F2FCE5C7 F2CB85EBB959EEBF69F7D6ADFFF0F0FFFBFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF6F5E9D4F1DDBE FCE9D2FFF4E9FFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7F7F1CCCCE48D8DDD5B5CE47575FBE8E9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDF3F3EB8D8DDD3F40E88182F6D2D3FDF5F5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FAFAFAE4E4E49F9F9F6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F 5D5D5D5353534D4D4D4D4D4D5454545E5E5E5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F 5F5F5F5959595050505757575F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F 5757574E4E4E4C4C4C5252525B5B5B6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F606060 5B5B5B5353535252525D5D5D5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5B5B5B 5050504D4D4D4E4E4E5959595F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F6060605858584F4F4F 4B4B4B5151515A5A5A6060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5D5D5D6A6A6A949494 C5C5C5F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF1F2D6E1E2A6EBEDC7FDFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFFF5F5FCEAE1F0DDAFF4E9C8FDFBF5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFD F3E7E7D2A4A4D26969DD4F4FF2B2B2FEF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFE F4F4F4E9D0D0DD7373D96060DB7373F1C7C7FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDF83EBDE82EEE185EEE187EBDD84F1E38AF3E58C EEE087E4D67EE7D981F0E28DE2D682D9CE79F0E48FF2E690E9DE85ECE188F0E58BF4E990F5EB91 E5DA80E5DA80EFE389EDDF86EEE088EEE186EEE185ECDF81ECDF81EADD7FF4E788F1E485E0D373 E5DA7BF0E78CECE58BEEE78FF6EE99F8F09CF6EE9BFAF29EF3EB97F7F098F6EF95F3EC91FAF398 EBE48CF4ED96F7F09BECE492EBE392F7EF9EFDF2A2F8ED9BEEE38EF3E791FDF19AF7EE95F7ED96 FAE58FFBDC88E7C16DC29D47FBE58EEEDD82F6ED93ECE78CD8D479E5E086F3EA95F3E896F6EA95 FAEF96F5EA8FE7DC80EEE183F1E486F3E68AF3E28BEFDF87EDDC86EFE188F9EB92F1E38BE7D784 EEDF8CF8E996F5E795F1E591FAEE9AEBDF87E6DB82F8EC98F1E396F4DF97F2E299F1EA9DF5ED98 FFE793B88532CE9E47FFF098F0E592ECE092F2E797F7EC9AEFE38FE8DC88F4E894F0E48FF5E692 EEDF89F2E38EF6E691EEDE88F2E38BEDE18CF8E892F7E08BDABE67EFD27BF4DB83EFDE88F6ED97 EEE893EFE695F0E496FDF2A4EFE390FFF7A3FDF19FEFE292EBDE8FE8DB8DE8DA8CF8EA9FDFD185 F5E89CEBDE93F9EFB0A9A16E110901615A272D2701CFCA93F7F3BE54511FAFAD7C4B4825464122 413C1CD4CE96DED78EBCB76F444100DAD796EBEAB0EAE7B54E4A1BE6E2B34C48149E9C60F8F5B3 F6EFA4F1E99CECE496EDE598EDE59AECE4A2F9F5B9FFFFCE97936A0502002D2D11635F45342E15 EEEDB7EDEDB7302E17585537C5C19ED8D2A6F5EFB4DED784F3E88BF7E6A2F5EAA7E2DC94E7E39B E5E198E8DF97F5E29DFFE9A0EDD0848D6D23FBF7B7E6D6A4292114494519F7F1BBF4E9AEF0EEA6 E3E396E9E297EEDF96FDF4A9F4EFA1FCEDA0E2A764B87230E9CD7EE6DA8AE1DE90C4C77DCCCC86 E4E09EF8EFAEF4ECA7E5E099ECE99FE7E89DE0DE95FBF8B0E3E09BD2CF8AE9E6A2E5E1A1E6E2A2 DAD696D5D191F1EDADEFEAAAE3DF9EE4E19CE5E29BEFECA5EBE8A1E0DD96ECE9A3ECE9A4EFECA9 EAE6A6E1DD9DE0DC9EE7E2A2F5EDA7F5ECA6EAE19CF1E7A7F6EEAEE5E1A1D7D593E1D391E5C886 F4CC89A9813BB3944AD9C879A89E4ECBC67AB9B56FD7D695CCCC8DA5A66AA9AE717A7C41525416 BEB97CC9B06F88611DA3833BFBE095E5D17FECE089E7DF85E5E185F3ED94FAF49CF3ED96F5EF9F F9F5B9EFEBC29A937A0800002E251CEEE7CBDFDCA8E8E8A3E4E399E2DE9BECE7AEE5DFABFAF7BB F4ECAEF7ECACEBE09EEDE2A2F1E7A9F3EBACF5E6A8FFDEA0CF9859C4904AFFEEA7FFF2ADBE8546 BF9651EBD98DE8CF85E3D084D0B16BBB7E44E9CF89CDCB80D6D08CE8E097F9EFA5EFE4A2EBDFA4 F3E9ADDBD292D7D08DD3CF8AD4D092D0CC9BD5CFAB2D290C505128E4E1B3D7D09ABFB777F5F2B0 F8F0ACE6DF9FD2CD8ED7D696E0DF9FE8E5A3EFEDAFE6DEABDDCF9BE9DB9FF5EAA5F5EFA1FBEB9E C39E58C6894BEFB479FEE7A9F6E3A1FBE4A4FFE8A6F5DC90C29C4DD0A154FDDA8AFFEF9FFBECA2 F5F0AEF2F2B8E8E9B4E4E2AFDAD998EEEFA8EEEFA9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF2F2F2 D8D8D8D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0D0D0 C1C1C1BCBCBCC9C9C9D3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3CECECEC0C0C0 B3B3B3B4B4B4C2C2C2D0D0D0D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3C8C8C8 BCBCBCC6C6C6D2D2D2D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D2D2D2C6C6C6B7B7B7 B4B4B4BBBBBBCDCDCDD2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0D0D0C2C2C2B4B4B4B3B3B3 C0C0C0CECECED3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3C9C9C9BCBCBCC1C1C1 D0D0D0D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D7D7D7E1E1E1 F7F7F7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFDFB FEFBFAFEF9F9FDF9F9FEFBFBFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFCFEEFDBFDE4BEFFF3CEFFFBE4FFFEF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFF7EFFDE5C8F3CD8CE2B649EBC27AFAD9C4FEF4ECFFFEFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1EBE9C0 E4E1AAF9F7E9FFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7F7F1CCCCE59494DF7070E68A8AFBECECFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDF3F3EB8D8EDC3D3CE37774F1C6C1FCF2F1FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFAE6E6E6D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2 D2D2D2CFCFCFBEBEBEB5B5B5B5B5B5C1C1C1D0D0D0D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2 D2D2D2D1D1D1C8C8C8BABABAC5C5C5D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2 D1D1D1C4C4C4B6B6B6B3B3B3BDBDBDCCCCCCD3D3D3D2D2D2D2D2D2D3D3D3D4D4D4D4D4D4D3D3D3 D4D4D4CCCCCCBEBEBEBDBDBDCFCFCFD2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D1D1D1 CBCBCBBABABAB4B4B4B7B7B7C8C8C8D1D1D1D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C7C7C7 B8B8B8B2B2B2BBBBBBCACACAD3D3D3D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D3D3D3 D9D9D9E4E4E4FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF4F4DAE7E6B0EFECC6FEF9F2FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFBFCEBE5FADDCEFCDFC1FEEDD9FFFCF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFDFDF1E8E8C8A8A8CB6565DC4242F2ACACFEF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFBEAE2E2DCB0B0DB4B4BE86B6BF8B1B1FEE6E6FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7D77FE7D67FE8D97EDECF74EBDC81E3D479 E8D97EE3D478D8C96DD9CA6FE2D27BE2D382E2D280E9D986E1D37BE3D57CEFE285F2E486F4E688 F4E789F2E488ECDF83F0E387EDE084E7DA7EECDF83EFE286E8DB7FECDF83F3E68AECDF82E8DB7F F3E689EFE488F8EE96F3ED95F1EA92F1E995F6EE99FBF39EFEF8A2F4ED93F0EA8EF7F192F2EC8B E6E07DFAF494F7EE90F7EF94F1E78FF1E693FAEF9FF8ED9DF4E99AF6EB9CF6EB9BFEF4A2F7EF99 F1E88FFBE68EF0CF76D0A64EC79F48FEEB94F4E590ECE792F8F59DEBE68BEBE085F6E992F1E490 EFE08BF1E28DF0E28AE9DB83F6E88FE8D981EEE088F6E990EFE188F1E48AF1E38AF0E28AF2E48C F1E68DECE08AE7DB85F7EC97F3E994F2E993F3E995F1E893F1E490F5E391E7D982DFD686EBE39A F8EC91FEE38DBE9246C79E42FFEB96F8E297F0E697F2E697F2E594F5E695F8E998F4E594F5E694 F9EA99F4E592F5E693F4E593EDDE8BE8D986F9EA8EF1DF7FFDE788E6CC6CF1D97BE4D078E8DE8B EBE597F0EA9CECE496F2E394F8EB99EEE88DF1EA91F3EB97F5EB9AF1E69AF1E59CF3E9A1EFE69F 948E44D3D083E4E295E9E3B14439233A3417ADA7700F0B00EAE9A1EDE9BA3D37198985602E290D CAC4AA2B2801D7CE8FFEF3AAE9DD95F0E5A0E5D998F5EAACEEE4AA605822E2DEA97A7A456D6F41 EAEDAFF4F09FEEEB98F1F0A1E4E29FF4F3BCECECC1C5C3A35D5B412D2A13141100BFBD8BDCD8B3 130A039189797B755B120C00B4AE79F5F0B0EDE69DF1E89CF5EB99EFE391EBDB91F3E19CEFE39B E7E392E4E593E7E69AE9E09AF4DE94F6E592967A23F9E7A48F7D5C070000DBD298F3E99EEBE197 E2D98EF1EC9EEDEB9BE2DD8FEBE495F7E698FFEA9FE3AC65A86C24E8CA78FAEF99E2E391D0D78B C1BC75DACE89E7DB95E5E497D7DD8FD2D88DDCD894E1DC9BDBDA99DCDB9BCFCE8DC9C887CECD8D D3D292DCDB9BE2E1A1E7E6A6EFEEAEF4F2B2E8E4A2ECE7A3F0ECA6F0ECA5EFEBA1EEEAA2EEE9A2 E6E29BE8E3A0E8E3A3E2DC9FE5E1A1D4D28AE5E199F3E6A2F7DCA1E7D69AD1D793C2DB8DD6D389 FDE4A1BA7A3AAF7E36D0B770D5CE90494508979456666426908F4FA6A565ACAB6BA3A360959650 AAAA65C8C581E9D093F1C8907D581AAD8E4EFAE49CE6D68AF0E798E8E192DED98AEAE498FBF5AB F5EEA5F0E8A3FCF3BBD7CDA5110700130C00D0CCA9E0DFACE6E7A6E1E39BE7E6A4F9F8BBECEBAC E2E499FBECA5F6E3A1D6CD8AD8C88AE3D899EAEDA6EAE79DFFDB98C98041E7BF70FCEEA3F2D892 D7A04CE8C06CF4E295F0DF93F8E99DE4C884BC874AE6D27CBABB65CCC68AE3E19CEDEBA5F6F0B3 F7EDB8EFE5ADE4DB97CEC97BD2D07DD4D48BC9C893AFAC8E0B0D055C6A33D3D99DC7C088E1CD95 F8E2A8FCECB0EAE4A2DDDF9ADBE09AD5D68FDAD38DDDDB9FE2E5B6EEE7B2EDDB9FFFF7B3F2D488 BF9645BE9041E2B96EFFF2ABFFF3AEF4ECABF9E9ACFEF3AFF5FCA4E8BD6CC5752EFBC07DFFE9A4 F6F6B4EDFBBDE6FABEE7EAB2EDDEAAF0ECAEDCDE9DDBDE9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF6F6F6F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5 F3F3F3ECECECEAEAEAF0F0F0F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F3F3F3 ECECECE6E6E6E6E6E6EDEDEDF4F4F4F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F2F2F2 EBEBEBE5E5E5E9E9E9EFEFEFF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0EFEFEFEBEBEB E7E7E7E6E6E6EAEAEAF2F2F2F4F4F4F5F5F5F4F4F4F4F4F4F4F4F4F5F5F5F3F3F3EDEDEDE6E6E6 E6E6E6ECECECF3F3F3F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F0F0F0EAEAEA EDEDEDF4F4F4F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5F4F4F4F4F4F4 F5F5F5FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFDFFF8E6FFF1CEFFEAC3FFF0D7FFFBF5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFCFEF5EBF5E5C0E0CC76E2BF64EAC273F8E9BEFEFCEAFFFFFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF1 E9EABDE2E2A6F9F9EDFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7F7F1CCCCE59595DF7272E68D8DFBECEC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF3F3EB8D8EDD413FE98577F9D7C5FDF6F2FFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 F4F4F4F5F5F5F3F3F3EBEBEBE7E7E7E7E7E7EDEDEDF3F3F3F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4 F4F4F4F5F5F5F4F4F4F0F0F0E9E9E9EEEEEEF4F4F4F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4 F5F5F5F4F4F4EEEEEEE7E7E7E5E5E5EBEBEBF2F2F2F5F5F5F4F4F4F3F3F3F2F2F2F0F0F0F0F0F0 F1F1F1F3F3F3F1F1F1EBEBEBEBEBEBF3F3F3F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5 F4F4F4F1F1F1E9E9E9E6E6E6E8E8E8F0F0F0F4F4F4F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5 EFEFEFE8E8E8E5E5E5E9E9E9F1F1F1F5F5F5F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5F5F5 F4F4F4F4F4F4F6F6F6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAE9F5F3CBF8ECC5FEEDD7FFF7F0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFBF5F2EACFEDDFB6FBEDDAFFF7EFFFFEFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF4EDEDD6B8B8D46D6DDD4141F2AAAAFEF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAF4F4E8C9C9DA9191DB4F4FEB8787FDD9D9FFF9F9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDD83EBDB81E4D57AD8C96EE5D67B EADB7EE3D477E2D375E5D679E4D578E0D178E0CF7DE7D684E1D17BDBCB73E5D67BF1E285F3E487 F4E587F5E689F5E68CF7E78EF4E68CECDF85E8DA80EADC82EEE187EBDE84F5E78DE9DC82DFD177 E5D77DF0E288F4E88EF5EB92F3EC93F4ED95F5ED98F6EE99F7EF9AF9F299F2EB91EEE88AF1EB8D F3ED8CF2EC89F0E885F6ED8EFCF396F7ED93F4EA94F7EC9BF2E797F4E99AF5EA9AF1E696F9EE9D EEE793EFE68DFCE78EF5D47BC79B42CAA54FFFF39EF5E693ECE894F3F099E7E186E8DC80EEE087 F0E18CF5E691F9EA95F4E690EBDD85F4E68EEFE189F5E78EF5E78EEFE187F8EB8FEADC83EADC83 EFE189F4E990F3E891EEE28CECE28BFBF39EFDF7A2F6EE99F3EB98F8EC98F0DF8AE7DC82EFE996 EBE39BF0E588FFEF98BF974CC49F41FFF5A0F5DE96EBE292F7ED9BF0E18FEBDC8AF7E895F7E896 EEDF8DEBDC8AF0E18FF0E18FF1E28FF2E392EADB88ECDC83F5E384FEE887DBC160E5CE6FF1E188 EBE18EF5EFA1EEE89CE4DC8EE8DA89E9DA87E5DD86EBE490F1EA98F3E99AEFE59AECE29BFFFBB7 D4CD8B292500BABA77EAEBAABFBC880A01028C8652E7E2B1211E04C0BF79F9F6C6898662504E27 0F0B002A261E130F007A7034F2E49AF1E39AF3E59EF6E7A2E1D592FDF8B97B7341AFAB7ABCBB8C 404423EEEFC1EEEBAAEFECA7F8F7B6FCFCC4CCCDA06667421B1A0E000000151200B2B082F4F2B5 F1ECB9453D29020000050000736A38F8F6B8E3DB91EFE797F4E998F7EB9CF6E89CF2E399F7E49C F2E397EBE598E8E99BE7E99BE8E296F5E396F8DF90AA8E43A6905415050070654EFBF2B2FBF0A0 F4E899EBE295E8E396EBEA9BDFE091EAE394FBE99CFFEEA4E7B56DA66F24F2CE7CF3E490F0F29F E3EB9ECCC67FE3D58FDDD288CCCD7DC3CD7CCCD488D9D392D6CF91D3D18FDDDA9AD8D594B6B472 BEBC7BECE9A9E8E6A4DBD897E4E1A1EEECA9E9E5A5EAE5A3EAE5A3E1DD97D4D089D6D289E7E39A DDD990E1DC95E6E19DE0DB9CDAD496DDD899D5D68CE4E199F7EBA6FFE5A9EDDEA0D5DB95D9EC9E EBE199EFC381B67635D5AB5FEFDD95E3DEA5928E56C1BD84928E54A4A164C7C585B5B26FB4B16E AAA862E9E79FCECA84EDD99DFBD7A0CDAA6F785A1AC8B06DDDCA82ECDF92F4EB9DF0E89DEAE49A EBE69DE6E198E5DE94ECE3A2FFFBCB433A1B030000989472F8F8C7D7D89CE2E39FECEBA8D3D090 E2E19CDDE08FEDDD93F0DB96CDC57FD4C283E9DF9DE6EBA1F5F2A8F8D491BC6F31E6C374FFF5A9 E8CF87C78F34EAC36CF5E596F2E598EDE196FDEFA9C99559EDDB80CDCE73D8D298DEDB9CE4E3A1 EFEBAEF7EEB5F1E8ACDDD58FEBE597E6E394DFDE97D2D19D92906F020000A4A366D8D593D6D291 E2DC9BF1E7A8F0E4A7F6EAACF1E7A9F0EAAAF3F1AFE0E5A1D2D496E1DCA4F4E8ACFFF7B8EECB85 BE9448C39547F6D588FFF7ADF5E29EF4ECABEAE9ADE4DAA0FDF7B2EDF19EFFED9CEDA45BF5A968 FFDFA0FCFFC1E9FCBDE7F8BDF3F4BAFFF2BBF5F0BBEDECB7EEEDB8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 E0E0E0D0D0D0C6C6C6C2C2C2C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C6C6C6 DBDBDBF6F6F6FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFF1FEFBDEF9E3B9FAE7CAFDF8F1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEF7F9EAE7E6B5DFCA70DEB844EED783F9EEC3FEFCF1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAF1E9EABDE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7F7F1CCCCE59292DF6868E58282 FBEAEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF3F3EB9495DF4E4AED917FFCDEC7FEF7F3FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1E0E0E0CACACA C7C7C7CFCFCFEBEBEBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FFFDE6FBEBC4F8E2BDFCF2E3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFCFAFCF4E6EFE7BDE8E2ABF9F9EDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF7F2F2E2CACADC7676DE3D3DF2A7A7FEF7F7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFEFCFBFBF4E1E1E6A4A4DC7272E26E6EEFACACFDF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE085EEDF84EDDE83DFD075 E4D57AE8D97CE2D376E4D578EFE083F1E285E7D87EE5D580E4D480D7C770DFD076E7D87BE5D679 EBDC7FECDD80EFDF86F0E089F1E18AF2E38BEEE087EADC83E8DA81EADC83EBDD84EDDF86E3D57C E7D980F0E289EADC83ECE086EEE48BEFE88FF3EC94F2EA95EDE590E9E18CF3EC94F3EC93F4ED92 F4EE90F9F391FCF694F4EC89F9F18FFBF293F9F094FBF199FDF39EF0E592F7EC9AF8ED9BF2E894 F7ED98F4EC96EFE58CF5E188FFED94C99E44C59E48FFEE98F7E895EFEB96F3EF99F0E98EF4E68A F9EB92F8E994F7E893F5E691F7E892FAEC94F4E68EF1E38BF5E78DF5E78EF0E389F6E98DF3E58C EEE087F0E28AF5EA91F3E790ECE08AE2D881F7EE99FFF7A2F7EF9AF4EC99FAEE9AF8E692F2E78D F4EF9CE9E299ECE084FEE48DB38A3FBB9436FFEE99FBE59CF7EE9EFCF29FF2E38EEDDE8BF9EA97 FAEB96EFE08CF0E18DECDD88F4E590FAEB98F3E48FF3E490E4D47DEBD97EFBE487EDD574EED778 EFDD84F1E693F2EC9DE8E294EAE291F5E792EEDF8CE8DE90EDE295F1E599F3E79BF2E69CEEE39E F0E7A7E8E2A528240062613CFDFCCE58553B363306F8F6BDC6C1961E1A03B1B171F1F0BA6F6F3D 484A0D1C1B001B17000A0500312800F1E69BFFF5AAEADC91E8DA8FF4EAA0FFF7B2958E50817D47 E6E3B72B2C05D6D7B3FBF6CFEDE9BCB4B1836C6B3C2C2C08040400030100504E2DCFCCA0FFFFC7 E3DF98EBE3A2B6AD77837A42B1A86AFCF3AFEDE59CE6DD90EFE698F0E596F1E497F0E298EADB92 F4E395F4E496EDE59EEAE6A0E4E499E2DD8BE9D988F5DC96DEC28C2F18042E1F12E2DAA7F9F1A9 F5EB9CF1E599EFE69BF0EB9FF5F3A6F2F3A5E9E496F1DF93FFE69DEEBE78A87227E5C16FFFEF9A F2F2A0DBE193CEC881EFE19BEEE399DBDC8CD3DB8CE0E79CEBE5A4ECE5A5DCD894C8C582DDDA96 D9D691D4D18EE3E09DE6E39EDEDB98C9C683C3C07BD4D18EDBD694E1DC9AE4E09AE1DD96E3DF96 E9E59CF0ECA3E8E49DE1DC98DED999E0DB9DE4E0A0EEF0A8EBE69FF3E4A1F8E7A7F3EBA8F0F0AA CFCB84B89959BC8E4C9D6D28C5A85AC8BA70C1BB82CBC68ECCC78D969256ADA96ABAB676908D4A 84813E9A9750E5E29BDFDA94EDDB9BDBBE82FFF9BCBEA8676E5711D1BB74D3C175ECDD90F2E89B F0E89DF0E9A0D7D388E1DC8BE3DF97F8F2BCA19C79000000464221F1EFC4DEDEA5CFCE8DDDD996 D5D08ED0CE86BFC16FE3D587E4D38AE5DB94F1E29FEBE29DE0E399F5EDA2F0C281BD7335F6D486 FFF6ABF5DB94DBA349F9D67EFBEEA0EADE92F1E69BFEE5A0BC894CF5E288F8F79DE8DFA5EFEAAE F0EEAEF5F1B1FCF7B5FAF2AEE5DD96E4DD95F9F6B1F1EFB2EFEDBD6260451B1400F1DC9CE4D68E E6E499E1E69BE6E8A1E6E2A0F4E4A8FFF0B8F1DEA9E9E3ACE0E9ACD7D897F8E3A1FFE9A4C9AB64 A58238DCB76EFFE79EFFEDA5FEEFADF7EAAEF4F3BAEBF1B9F3F1B8FDF5B4E1D489FCF19EFEDA8C E6A461EEBA7EFFF8BEF1FBBFE7EDB1F0ECB0FBF3B8F8F2C2F3EDC1F5F1C4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE E7E7E79394935859583232322828282A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929262626 3232327C7C7CD8D8D8F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBFAECE8E4AFEBE8BDFAF9EDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF9F9ECEAE5B6DDCF7ADEB945EACB79F9F0D9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAF1EAEABEE2E2A7F9F9ECFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7F7F2CECEE48A89DD4E4F E46667FAE6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF5F6EDA8A9DE6867E48A85F0C2BCFCF2F1 FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6C7C7C78A8A8A 3F3F3F353535525252B3B3B3F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF4EEEBC4E8E3AFF4F2DBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFFF3E6FEE2C5FCDEB8FAE2BFFEF8F0FFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF7F6F6E1DCDCDB7878DE2C2CF29E9EFEF6F6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFCFCF1E7E7E2B4B4DD6D6DE15151F4ABABFCDCDCFFFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DA7FE7D87DF4E58A EADB80E4D57AE2D378E6D77CE3D47AE8D97EE9DA7FE1D177E6D67EE6D67FE7D77EEEDF82CBBC5F BEAF52EEDF82F1E288F3E38CF2E28EEEDE8AEEDF88EEE087ECDE85E6D87FE4D67DE6D87FE9DB82 E9DB82F0E289EFE188E6D87EECDF86F0E78CF1EA8FF3EC93F0E893EAE28DE4DC87EBE38DF1EA91 F5EE93F5EF91F5EF8EF7F18FF0E885FCF491FEF595FAF195F7EE94F5EB93F0E691F4EA95F6EC97 F2E891F5EB93E6DD85F9EF96FFF299F8D27AD1A84EE9C36CFFE791F5E995EDE995EDEA94F0E88E F4E58AF3E48CF4E590F3E48FEDDE89EADC86EEE088F4E68EECDE86EDDF86F3E58CF1E389EBDE82 F9EB92F4E68DF3E58DF4E990F3E790EEE28CEDE38CF2EA95F7EF9AF6EE99F0E895F0E590FCEA96 F8ED93ECE693EDE69DF4E98CFFE790C9A156CAA346FFE691FEE69DF2E999EDE390F0E28AF2E48D F7E892F2E48CEFE089F5E690E3D57DEFE189F9EA94E4D67EECDD88F2E38FF5E38DF5DE85E8CF72 EBD275FEEC91EFE48EE1DA88D9D382E8E08BF5E890EEDF8AF4E69EF0E19BEDDF96EFE195F1E59A F1E8A0F4EBABEBE6B0666341131300ACAD93161700848449F3F3B5C7C49B150F05808046FFFFCE 85864D9EA458CCCE9CE6E4CA252219817845FFFBB0F3E89AEFE492ECE28DEAE18EEEE599D7D08D 6F6C37BCB9910B0A002B29194F483B322C170F0C00000000141206434127999768DFDBACFFFDC8 EDE5A5F6EDA4E4DC8BECE38FE8DE8AF5EF9DF0E897DDD383EFE495EFE496EBDF91EDE195EDE297 E8DC91F3E392F4E393F1E5A3F0EAA9EEECA1EDE994E6D98CFFEDB6A089661D04009C8D55FFFBAF E7DF92F4EB9FEFE399EAE197F3EDA4EEECA1F1F1A6E5E093EFE093FFE69CF6CA86AC762ED5AC5A FFEC97E7E694E6EB9EE8E29CF4E6A0F3E89EEBEC9CE2EB9AE7EDA1F1E9A8F1E9A7E9E69EDAD791 EEEBA5FFFDB5E7E49EE7E49DEDEBA2E3E099C9C680C4C179DDDA94DBD693DAD593E0DC96E8E49D E7E39AE1DD94F3EFA6E6E19ADFDA95E9E4A4F0EAACE7E3A4EDEFA7E8E09AEADB98E4DE98E2E59B F2EDA6FFF3B4D1A1669A6727B5944D958636ACA85DAEA96ECEC98FBEB97EC8C487BEBA7B848041 A3A05E8A8743A6A35EC2BF7BD5D28BF7EDAAF6E5A4DBC985E4CE8AB9A25D897029E8D086E6D187 D9C87EDBD186E8E095E6DF92D9D780D9D787E2DE9FE1DCAF2A2413161100D9D5ADE9E5B2E3DEA0 D7D08DDCD58EE1DD91D0D17BD1C977EEE294EFE69CEFE09AF6EFA7E5E79BF5E79DDFAE6CCF884A FFE596F5E69BF8DD96E5AD53F4CD76FCEEA1F4E99DF9EFA6E0C683B88649E8D378FEFDA0F0E5AA F0E8B2EEEAAEEDEAA6F4F0A4F7F3A5EAE49AF8F2B0E6E0A8ECE9B8DBD8AB22210E787140FFEDA5 EEDA8CEAE394DEE292DBDF93E6E5A0F8EBAFF3DFA9DBC896EAE1ADEBEBB8DFD594F4D383C9A456 AE893CCDAB61F6D790FCE29EEFDA98EADFA4F4F1B9EDF2BCD4DDA8EBEEB6F9F0B3F5DE9DD9D181 EEE290E9BC78CD935AFCD8A0F9FCBDE7E0A3EFE9AAF5F2B2EEE8B3E5DDADEBE4B2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEEAEAEA9F9F9F7373735959595353535454545454545454545454545454544A4A4A191919 060606181818757575DFDFDFFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAF0E4E4ACE8E8B8F9F9EBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF5F5E1E9E5B3D9C65EDCC563EAD89F F7EFDAFEFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFFFFFAFDFBE6F3E9C1EFE2B4FCF9EFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF7F7F2CDCDE58E8E DE5B5BE47474FAE9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6F6EDAEAEDF6E6EE38888EDBBBA FBF0F0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCE0E0E0909090 4242421E1E1E191919343434A5A5A5F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF5F5E0EDEDC8EEEECA F3F3DAFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF8F0D9F1DFB1F8E5C2FFEFDFFFFBF7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F8F8E1E1E1DB8080DE3434F29797FEEBEBFFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8FFF3F3 FFFCFCF5F7F7E4E2E2DCB8B8DB8383DB5F5FE26666F9CDCDFFF2F2FFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D679DECF72 EEDF83ECDD80E5D679EADB80F2E388EEDF84EFDF87EBDB82E0D077EDDE83E0D176E1D275EEDF81 E0D172D5C668E8D97EEBDB83EEDE87EDDC89E9D888ECDD89F3E58CF5E78FF0E289EBDD85EEE088 EDDF87EFE189EBDD85E5D77EE9DB83F1E58CF5EC91F3EC92F4ED93F3ED95F2EA94EFE792F3EB96 F6EF97F8F197F9F297F7F292F5EF8DEBE37FF9F18EF9F08FF6ED8FF3EB8FF0E68DF1E78FEFE58F F3E990F3EA90F4EB90ECE389F5E991FFF198F1CE75B0872DF1D17AFFF099FBF09BF1ED99EBE891 F3E990F6E68BF0E088F7E893FBEC97F1E28DEADB85EBDD85F8EA92F5E78FF3E58CF7E990F7EA8F F1E488F4E68DF5E78EF4E68EF1E68DF1E68FF3E791F4EB93F1E993F4EC97F6EE99F0E995EEE38E F7E691F1E68CEEE895F3EBA3F9ED91FFED97CDA75CCCA548FFE793FFE89FF2E999EBE18DF1E38A F6E990F9EB93F3E58DF4E68DF8EB92EFE188F1E38AF4E68DEBDD84EDDF88E9DB8BFDEB9AFFED97 F4DB80E3CB6EF8E489F7EA93E2DA87E3DD8AECE38EF0E489F4E48EFAE9A4F5E39CEEDF92EEE190 F2E894F0E79AF0EAA7EBE7B3A2A07A0A0900292B1F181902D2D492F1F1B4E9E6BF242107434320 F4F5C3626433A3A765FCFDD179785F030100A89F6BFFFDB3F1E899E7DD87EAE087EEE78DF0E896 DDD79157521C9F9A760E0B00060300080300020000000000383810989762F4F4BFF4F2BBE8E1A6 F8EFB1EAE09CFEF9ADE4DA82DACE6CDBD06EEEE386EFE38DFFF4A5E7DA8FF3E69DECE097F1E59A F5EA9CF2E697F1E192EEDD90ECDF9BEFE6A1F0EBA1F2EC9EE4D797D2BF952F1707200900E8D896 F8F095ECE595F0E79EF0E59DEDE39BECE59EE1DE94E8E89FE4E096F6E79EFFECA5FFDA95B48139 D6AA59FFE794EAE595EFF3A6E7DF98E7D992F1E499ECED9DE3EC9AE6EC9FF2EAA7F2E9A4F0ECA2 E6E39AD8D48BE2DE94EEEBA2EBE79EECE99EF2EFA6F6F2A9EFEBA1E2DE95EAE5A0E3DE9CDBD791 DDD992E1DD94E2DE95ECE89FE6E29BE5E09CF3EEAFF8F2B4E7E3A4DFE09AE7DD98F1E39FDEE196 D6DE91F0E49DF8CC93C4814ADAA668F6E499DFDE8CB4B56BD0CA8EABA56ADDD799E1DB9DCCC788 DBD898E7E2A1938E4A908C47A29E5A7B783197954E9F9A54EDE29BB7A761A78F4BC0A35E967A35 EAD189F5E198CEBE73E4DA8EE8E292EAE98DE0DF88ECE9A3E9E6B38B87620702007E7850F8F6CB EEE7AFE7DF9DFBF5AEE5DE8EEBEA93EEE994E2D989F5E89CFFF4ACEFE89DE7E598FDE79EC79151 CD8D4DFFE596F3E69CFEE39CE6AD55EBC46FEADD91E8DF94F3EAA2F3DA97C69356D9C569F9F597 F1E4A9F3EAB6F2ECB4EFECA4F0ED99F1EE99E7E399ECE5ADEFE8BCFFFFE199956E252301D8D698 F5EA9FF1E494E5D88BEAE096E3DB92F1ECA8ECE8A7F9F3B6F1E5ADFAEDB8FFEBBCE5C487B28B39 B6913EE4C373FFE89FFCE6A1F3E2A2F8EEAFF1EDB3E6E5AEEEF0B8EEF1B9E7E8AFF5ECB2FFF0B4 D8D98ED4DD8AF7DF99CB8F59DEAA74F2DFA0CFC485EAE4A1EEECA6EFE8A6E5DD9CE8E19DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF3F3F3C7C7C7B5B5B5B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0ACACAC949494 2F2F2F0F0F0F2C2C2C8C8C8CEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFAF1E6E4AFEAE8B9F9F9E9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF7F8E6DDDF97D5CB6C DCC26AEBD5A1FAF4E7FEFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFDFDFEEEFCF8D6FCEAC6FDE5C9FFF9F3FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF8F7F1C8C7 E48F8EDF6D6DE68A8AFBECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6F6EDAEAEDF6F6FE38888 EDBABAFBF0F0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F0F0C0C0C0 616161151515212121222222353535A4A4A4F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F8E9 EBEBC0E7E7B4F8F8E8FDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDFBFBF3F0EFCFE6E4AFF2F0D3FFFDFC FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F8F8E1E1E1DB8A8ADE4343F29191FEDCDCFFF8F8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFDF8F8FBF0F0FBE6E6FBD7D7 FBCDCDFEE1E1E9D7D7CCB5B5C98181D95B5BDE6969E69393F9E5E5FFFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DA7D DDCE71E8D97CEADB7EE9DA7DE6D77CEFE085F0E086F7E78FF1E189DFD077E7D97EE5D679E2D376 E4D576E3D475E3D476E7D87CE7D77FE9D884EAD987ECDB8DE6D784EADC84F1E38BEDDF87E9DB83 EDDF87E8DA82ECDE86E6D880E7D981F1E38BEEE288F4EB8EF2EC8EF3EC91F4ED95F7F099F9F19C F8F09BF3EC95F3EC92F4ED93F4EE91F1EB89F5ED89F5ED89EBE381EDE486FAF196FFF59BF6EC93 EFE58BF4EB90F8EF93F8EF92E8DF85E7DB82FFE68EE7C36AC1973EFFE58DF7E28BF2E893EBE793 E4E18BF1E68DF7E58BF6E68FF9EA95F6E792EBDC87EADB85F6E890F1E38BF5E78EF3E58CF0E289 F0E288F1E488F4E68DF7E990F5E78FEBE187ECE089F1E58FE7DD86EBE38EF1E994F6EE98F5ED9A F7EB97F5E48FEBE086F7F29FF2EAA2EFE487FFED96C29B50BF973AFFE691F3DB92EAE190E8DF8A EADC83EFE188F4E68DF2E48BF0E289F2E48BFBED94F0E289EBDD84F7E990EBDF87F5EA9CF0E192 ECD782F7DD83EED579FEE88DF4E58EE6DC87F0EA94EEE68EEADE83FBEB94FBE9A2F9E79EF7E695 F5E891F7EC92F7EF9BECE79EF8F5BEB1AF8A0607000B0C046C6C51C8C7907F7F45F4F3C6615F37 1C1C0EE8E7C072724F9A9D6AA7A9840000000605009D9562FBF1A8EFE798E0D67FE7DE82E3DB7F D8D27CFFFFBB56501CA5A07C6660490704011B180B5E5B3FA6A47CF8F8C1FCFCBAF1EEA8F1EBA7 FFF8B4EFE6A0FFF7B1E0D38AF7EB96F1E381E2D575F0E289E7D788F0E298FEEFAAFCECA8F1E59D F3E89BF6EB9BF1E691F8E99CF6E49DF2E59BF0E89AF1EB9FF0E7A7FFFFD7817056120000543F10 E7D589F6E889F6EE9DE1DA91EEE49DF8EEA9EBE39FE6E39CF1F0A9E9E49CF2E79FFDE7A2FFE19D BD8C44C48E3FFDDF8CF2EC9AE3E597D7D088ECDF97ECE095E5E794DFE795E8EC9FF4EBA8F1E8A3 E8E49AF0ECA2E5E197DDD98FEDE99FECE89EE9E59BE5E197E4E096EBE79DF4F0A7F0EBA6EEE9A6 E9E59FE7E39CEDE9A0F8F4ABEBE79EE6E29BDCD793E0DB9BE8E2A5E1DC9ED7D793E1D893EAE09B D5DD8FD3DB8BF8E49BE8A971AA5F28F8C98AEAE79BCFD686E8EDA3E7E2A4888244A9A366DAD595 F6F1B1FAF5B4E1DC9AFDF8B4B0AB67918C48928E47B9BA71C9CB82DCD88FCBBE798B7732ECD290 7E611F977A36ECD68EFFF3AAE0D186FAF3A4EBE78CE1E087EAE99CF4EFB7EBE7B9231F0D17120A CAC298F3ECB8F6ECAEEEE49EF6EF9EF3EF9AECEC96EEEB99E7DA8DE0D287E2DB8FECE597FFF2AD C58A4BD29757FFF1A3FFF4A9FCE19BE8B059FDD784EDE096E3DB93E8DF98FFEEABB98548CFB85D FDF89AE7D89BD0C391D2CC92DDD98EE4E28DEBE993E8E59CF8F2BFEEE7C3E5DEBF58552C919058 F6F7B4E9EEA1F3F0A6E2D68EFCE9A5F3E3A0FEF6B1ECEBA6E7E7A0F0E7A6FFECB3E3B381AE7F40 C5A151E3C473EFD689F3E09AEBDE9EE4DC9EE3DFA2ECE7ADF9F5B8F8F4B7F8F1B5F3F0B4F4EAB1 F5DEA5F3F5AFDDE89DF8F7AEE3B378D79963F1C78BC1B470E9E69FEFEBA3ECE499E4DD8FDFD88A FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBECECECE8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E9E9E9E7E7E7D2D2D2 A6A6A63333332424245B5B5BB1B1B1F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF3F5E3BCF7E7BEFEF9DF FFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFAF3F7DD E7DCA2DDBF67DEBC65EAD49DF7EFDAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFBF4F4D9ECEBB9F6EECFFFF5EDFFFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF4F4 EDAFAFDF7272DD6364E68E8EFBECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6F6EDAEAEDF6F6F E38989EDBCBCFBF0F0FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDCECECE 8282825757573D3D3D3D3D3D303030373737A3A3A3F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDF6F6F6D4EEEEB9E9E9B9F3F3DBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9EDEDEDC7EAEABFF2F3D9FAFAF0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1DB9494DE5454F28C8CFFCECE FFF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF6F6EFD0D0E79C9CE86060 E74B4BE74949E86161DF6363D25656D04545DC5353E99797F5D9D9FDF7F7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E5D677E4D576EDDE7EEBDC7FD9CA6DE8D97EE8D880EEDE86E8D880E4D47DE8D880E6D77DE3D478 DACB6DE5D677E7D879E9DA7CE6D77BE9D981ECDC87EBDA88F3E293EDDD8BE9DB83ECDE86E9DB82 E6D880E9DB83EEE087F1E38BE5D77FF1E38BE8DA82F0E48BECE386EEE88AF2EB8FF3EC92F5EE97 FAF29DF7EF9AEEE790F1EA91FCF69BFCF599F3ED8EEEE684ECE482ECE483F4EB8DFBF297FCF299 F3E990E9E085EEE58AF5EC90F7EE90F7ED92F9EA93FDEA93DCB85FC59D42FFE890F8E28BFBF39E E4E48EC9C56FF5EA91F6E389F1E089F7E893F4E590EFE08BE3D47EF0E28AF3E58DF0E289F1E38A EFE188EEE086F5E88CF2E48BECDE85FBEC94FCF198F2E690F4E892F2E890EFE791EFE792F1E994 EEE693EEE38EF4E38EFAEF95F5EF9CE7DF97ECE084FFE891D5AD62BB9336FFE48FEDD68DF3EA99 E6DD88F7E990F9EB92F0E289F2E48BF1E38AF3E58CF2E48BF1E38AF2E48BF1E38AEEE18AF0E799 F1E598E5D37FFEE78DE1C76BFCEA8CF8E68DECE089EBE38EF1E68EEEE286EBDB83EDDB8FFBEA9A F6E78FEEE385F0E786EDE78CF6F2A1E7E6A7C9C89D1C1C130A0C06B9B8A23B361624230BEFEDB9 C0BE8D08090047442B403C303E3D220604002A291A5354256C672CFAF1A9E5DE90E9E28BE6E084 E8E286E1DC86F0E9A08A844A686339FFFFE5272211A7A684FFFFD4FFFFC4F2F3A9DAD987E9E692 EEE697E9E196D2C780B5A761E0D48DE3D687F3E38EFAEB98F1E295F0E09BF5E6A5F6E7A8FCEDAB F5E8A1F1E698F0E690EEE48BF6E8A1E4D695F0E592F4EE98E7E197FCF4C5C2B69A2E210C90815D A69253AA9241FFE790E7DD90F1ECA5F2E9A4F2E9A7F4EBAACAC682D6D691F6F4ADEBE09AFCE8A4 FFE19EB88943D19748FFE996F7EB9ADCDC8EDED78EECDE97EEE296EBED9AD9E08DDFE296F5E9A5 F6EBA5E8E39AE4E096E2DE94E3DF95ECE89EEAE69CEEEAA0E7E399ECE89EEAE69CE5E197EEE9A5 EDE8A6EFEBA5F2EEA7EFEBA2EBE79EE5E198EFEBA4F4EFABE0DB9BE7E1A4F1ECAEE7E5A4DCD490 DAD48BC8D181D9DA89FFE69EDB8E54E59A62FFE3A3E5E599E4F0A2C6CB83FAF6B5B7B27246410C 9F9A59948F4EEEE9A7ECE8A6DCD793D0CB87DAD591F2EEAAC8CA81C0C47AD1D189F4ECA8D6C582 DFC887FFE8A8B39655A58A46F1E6A0F8ECA5F2E297E7E189F3F199F4F2A4EBE7A6FCF8C3BBB78A 100B00564E33FFFFD6E3D8A1F7EFAFF0E89DF2EC9CEEF39FEFF09EFAECA2EEE096EDE597F5EA9D FFDA98BD7F40F0BC7BFFF2A2FCF2A7FEE39BDFA750F3D07CF7EFA4F4EDA6F3ECA6FFF0AEE0AC6F D8C165FBF494F9E8A9F7ECB4D7CF90D8D487DDDD88E8E896E3E29FEDEAB9FCF7D467614428230F D5D397EEF0ACE5F0ABF6FAB8EDE8A7F7E9A9F2E3A2F1E6A0F5ECA3F4EEA5F8E29BE5C582A66B2D DDAB6AFDE69CFBE89FEEE19AECE3A0EDE7A9E8E6A8E6E3A5F0E9AAFCF2B0FDEDAAFCEBA6FDF2B3 F1E9AEEAE0A6F0ECAFF7FDBBF0FAB2FCE2A3D1915BEBAE76F1E09BF2F1A8F0E7A1EBE39AD4CC81 D2CA7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFEFEFEF9F9F9 CDCDCD8D8E8D272727353535868686D1D1D1F9F9F9FFFFFFFFFFFFFFFFFFEBEBEBD3D3D3C3C3C3 BCBCBCBBBBBBBBBBBBBABABABABABABABABABABABABBBBBBBBBBBBBBBBBBBBBBBBBCBCBCCBCBCB EEEEEEFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF8FEEBD7FBEBC9 F7F3CBFAFBE3FEFEFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6EED5E9D297DFBE68E0BF6CECD8A5F8F2E0FEFCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFEFBEEEFCDE3E2A8F1F0D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCF2F2EAA0A0DD6666DE6B6BE99E9DFBEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6F6EEAFAF DE6C6CE17C7CEAABABFBEEEDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAE3E3E3 9E9E9E5858586D6D6D838383565656383838383838A3A3A3F6F6F6FFFFFFFFFFFFFFFFFFFFFFFF F9F9F9E3E3E3CFCFCFC0C0C0BBBBBBBBBBBBBBBBBBBABABABABABABABABABABABABBBBBBBBBBBB BBBBBBBABABAC0C0C0DDDDDDF8F8F8FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFBFEFEEBF7F7D2E9E9B2EDEDC4F6F6E2FCFCF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFEF4F9F9E2F1F1CCEAEABCEFEFCEFCFCF6 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1DB9E9EDD6464EB8686 F7BFBFFDECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF9F9F9D9D9E79C9CDB6464 DC4A4AE14646E44A4ADF4F4FDE5353E25858E36464E78686F4C8C8FFFDFDFFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE4D675E1D372E5D677E9DA7CE5D679EADB80E7D77EE5D57DE2D27BEBDB86F5E58EE3D47B E4D47CEDDE82ECDD7FEADB7DF7E88BEDDE83ECDB84EBDB85EAD987F1E08FF3E390F1E38DF0E18C EBDC87E9DA84EEDF8AEDDE89EFE08BE7D883EDDE89EADB85F5E891EFE687E9E384ECE589F3EC92 F7EF98F3EB96F6EE99F1E994F3EC94F9F298F2EB91E7E183EAE181DAD171F1E88BF8EF95ECE289 EFE58DF5EB92F5EB92F8F094F4EB8EF3EA8BF6ED91F6E68FFDE38CD4B057C59D42FFED94FCED95 FFFAA5CCCB76B0AB56FBF097F7E289EDDC85F5E691F5E691F9EA95EDDF89F1E38BE7D981E7D981 EDDF86F1E38AF3E58BFDF094EADC83E7D980F2E48CF6EB92F5E992FCF09AF7ED96EFE791EFE792 F3EB96F0E895EEE38EF5E38FF1E68CEEE895EBE39BF4E88CFFF39CDFBA6FBB9235FFE38EF4DD95 F8EF9FEFE591F5E78FF6E890F2E58CEDDF87F1E38BFBED95FAEC94F7E990F5E78EF5E78FF5E892 ECE597F5EC9EF5E38FFEEF95E6CC6FFAE385F9E68CF2E58EF4EA95F1E78FE9DC83E7D981EADC8A F7E894F4E88EEEE483ECE383ECE689E6E08EE4E0A0D4D3A230301B06080374715719110E4A460F F4F0B8F2EFB95756240100000E050001000043402FC8C6A4C6C78D4F4A0AF1EAA5EDE59BEDE593 DBD37CF3EB95EAE38FF6EFA4C3BD7E2A240BFBF6D1635F3D696735F3F2B6EDECA2E7E590E8E48A E8E288F0E794E8DD90E6DA92D7CD86F1E79FF4E79DF4E69DF9EAA3F6E9A4F8E9AAF6E8ABF1E3A5 F5E6A6F5E9A1F8EC9DEFE58EF1E78FFCF1ABFCF2B4EFE693F9F29EEDE6A3DFD8B3211A16312910 F2EFB8DDC97EA0812EFCE197F9EDA5E1DC97FEF9B7EEE5A4F0E8A84F4A11AAA967EAE8A4E7DE99 FBEBA7FFEFAECB9C58CA8D3EFEE895FDEFA0EAE79AE9E299EFE298F2E79AF0F29EE2E894E4E799 F7E9A5F4E8A3EFE99FF1EBA1DDD78DD8D389DED88EE2DC92E3DD93DAD58BEBE59BF3EEA4ECE69C F1ECA8EFEAA8ECE8A2ECE8A1ECE89FEAE69DF0ECA3EFEAA3F6F1ACEEE9A9F1ECAEEFE9ABF3EFAE F1EBA8F2F1A8E4E797F6EA9BE3BB73C0793BFAC485FDF1ADDFE096D8E099D5D793F8F3AFEFE7A6 A9A25FBFB875A69F5CCAC380F1EAA6E8E19DEEE7A3EAE39FE7E19DDADA94E1E29BDFDE98EAE3A1 E6DA9AE1D293F0DA9DD9C081BBA363977E3CF5DF9CFEE9A3F2E696F0E796E1DA8CF5F0A8EBE7AA FFFAC9918C670A03009D936CFFFFD2F9EFB7FDF5B5F1E9A1EBF3A4E7EC9EFFF0AAF8EAA3F0E89C FFF6AAFBC686BC7A3EF3C785F5E896F5EEA1FCE399DEA74FEFCC79F0E89EEDE9A3F8F1ADFFF3B2 EDBE82E2CA6BF5EC89F9E4A2E2D794FEFCB4D9D589D8D688EBE9A1ECECB0FDFACDBEBA941B1700 BAB685FFFDC2E4E3A2E5E5AAE2E3A8E2E6A6EBEDABF6F0ADEEDE99FCE39DFFE29ED2A45EB08138 CC9D53FFEFA7FFF8B3FFF9B4EEE8A7E4E2A1E9E8A8E7E7A7EAE6A4FAF0ADFFF0ABFAE7A0FFE8A0 FDEFAEF6F1B3F1F1B6F6EBB6F3EEB5EBF8B3FFFDBBF3D194CC894FFFF1AAFCF8B0FBEFAFE0D69C B8AD75E5DA9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFBB4B5B4626362191A19454545A8A8A8EAEAEAFCFCFCFFFFFFFFFFFFFFFFFFC9C9C9868786 5656564141413D3D3D3F3F3F4242424242424242424242424141413F3F3F3E3E3E3E3E3E454545 707070D1D1D1F2F2F2FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF9F5 F6F0D4EAE8B4F0F0CDFDFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFBF5F7EED8EAD49BDFBD67E1C170EAD499F9F4E6FEFEFCFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEFCFEFCFBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFBFEFBFBFEFB FDFEFDFFFFFFFFFFFFFFFFFFFDFCF8EEEECBE3E3A8F1F1D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCF2F2EA9D9DDE6B6BE18080EDB5B4FCF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF6F6 EEB0B0DD6666DD6666E68F8FFAE8E7FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 B5B5B56E6E6E4D4D4D939393C3C3C36767673A3A3A383838A3A3A3F6F6F6FFFFFFFFFFFFFFFFFF FFFFFFF0F0F0B1B1B17878784B4B4B3B3B3B3F3F3F4141414242424242424242424242423F3F3F 3E3E3E3E3E3E3C3C3C515151A1A1A1EBEBEBFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFFFFF9FDFDEBF7F7D0EEEEBDE9E9B8F6F6E1FDFDF9FFFFFEFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFCFEFEF0FBFBDAECECABEAEAADF2F2D3FBFBF2 FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1DBA7A7DC7474 DF8080EAB0B0F8E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFFE3E3F7AEAEE66D6D D95858DB9898E8B1B1F2B9B9E3A0A0E59D9DF1ABABF7BFBFF8D6D6FCEFEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE4D674E4D675E6D878E6D779E2D376DCCD72E4D57CE4D47CDECE78DFCF7AE2D27D E2D27CEADA83D6C66EE0D175E1D275DECF72DFD073E5D67BEBDB84E6D681E3D37EE7D883EFE08B F6E792F3E48FEBDC87E8D984EBDC87EDDE89E8D984E5D681E7D883F1E48DF0E788ECE684EEE98A F4ED92F7F097F6EE98F4EC97F1E994F6ED99FCF59CF9F298F2EB90EEE588E3DA7DF2E98FF8EE96 ECE28CEAE08AF4EA94F2E891F7ED93F5EC90F2E98CF6EA90F9E791FEE78FD7B158CFA84DFFE990 FAEB92F2EC96B0B05ADCD882EADE85FAE58CF4E48CF3E48FECDD88F6E792F4E590F5E78EEDDF87 ECDE86F0E289EFE188EEE086F4E78BF8EA91ECDE85E9DB83E7DC83EEE28CF9ED97F5EB94EEE690 F0E893F3EB96ECE491E8DC87F2E18CEDE188EBE592F0E8A0F8ED90FFEF99DBB56AB1882BFFE18C FAE39AFBF2A2F6EC99F1E38CF2E38DF2E38EE9DB84F1E28DF1E28DF4E68EF6E891F6E793F7E891 F8EC97E7E193F2EB9CF8E994FEEC8EE5CB6BF2D87BF6E388F2E48DF4EA95F0E590ECDF87EFE08B EEE392F5E997F4E990EFE48AEEE58BF0E991E3DC8EF7F2B2C0BE8A0F0E020303000A0700171000 C9C487EFE9AEF8F3BDA29E641610030B05012D2715D7D2AFFFFFD4DBDB983B3701E5DD9BEBE39D F2E99DE9E091EBE392ECE395FCF3ABF5EFAC332C04D3CF9DB6B481312E0BE7E49EE7E397F1EC95 F7F096F6EB93F0E593E5D98DFCF0A8FFF7AEFEF9ADF7EFA5F7EEA8EEE4A2E8DD9DEEE3A3F1E6A5 F2E4A4F4E7A3F0E49BF8ED9FEFE591EEE48FF2ECA3EBE4A2FBF3A8E9E098FFFFCBADA684201D07 9D996DFFFDB9DEC777A1782AF4D792ECDC98F7F4B0F2EBABF2E9ABF0EAAC433E0A9F9F5EF6F7B5 E0DA96F0DF9DFFF1B0E1B470C78739FCE290FDED9BECE99AEBE29AEDE096EBDF92EAEB98E2E894 E8E89BF8E8A5F5E6A2F0EAA0F4EDA5DED78FDED88EDCD68EC4BD75D6D087EAE39BF6EFA7F2ECA2 F2EBA3F0EBA7EEE9A7E6E29CE4E099EAE69DE8E49BF2EEA5E6E29BF1ECA8F3EEAEF3EEB0E9E2A7 E3D99BEBEAA6F4F6ABF3F0A1FFEA9EC5934BC48845FCD48EFAE59EF0EFA8DADC9AD5D291E1DA96 E4DD99EEE7A3EAE39FB1AA66ACA561EDE6A2F2EBA7E9E29EC9C17ECFC985F7F2AEEBE9A7D8D695 D9D494DAD294F9EFB3FAEBAFEDDA9FF7E0A3A48B4B917333F3D695E7D591F3E69CF4EA9DDED68B F8F2ADF0EBB1EFEBBC463F2D080100BEB991F6F1C2F4EBB4FAF0B1E9F5ACE6EEA4F7E3A1EFDF9B F5ECA3FEF5ACEDAF72C78045FCDE99ECE390ECE69AF7DE96E0A851F0CD7BF5EEA5F3EEABF0EBA7 FFF9B8E7C184CAB052FFF792F9E69FE6D98FF1EA9BE6E297E8E2A0E7E5A9EFEDB9DFDCAF33301A 89865EFFFDC9EBE7AFF0EAAEF8EEB5E4E1A4F2F3B2DEE19DF5EDA8FFF9B7F0CD8DBA8342B8823E E6BD72FFE290F2E295E9E3A0EFECACEFECACE6E7A4E2E19FE6E4A0F0EBA7F8EFACF9ECA7F5E39F F5E39EFAF1ACF8F7B6F8F8BDFFEFBEF9EBB7EEF7B8F3EEA8FDF3AFD69B5EEECE8BFFF3AFFFF8BD E6DAAAA3976BF9F3C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9FAF99999993637361C1D1C616161C7C7C7FBFBFBFEFEFEFFFFFFFFFFFFFFFFFFC2C3C2 7575752B2C2B0808080404041212122828282C2C2C2C2C2C2D2D2D1D1D1D0A0A0A0202020A0A0A 242424626262D0D0D0F3F3F3FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F3D9E2E2A7EAEAC1FDFDFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF6EED6E8D091DFB95BDEB957EDE6BCF8F8E9FFFFFEFFFFFF FFFFFFFFFFFFF2FAF2DEF2DDD9F0D9D9F0D9D9F0D9D9F0D9D9F0D9D9F0D9D9F0D9DAF0D9DAF0D9 DBF1DBEDF8EDFFFFFFFFFFFFFFFBF9FFF4E6F5ECC8EDECBCF6F6DEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDF2F2EA9E9EDE6A6AE17C7CECB0AFFCF2F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDF6F6EEAFB0DD6262DB5959E37F7FF9E4E4FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFD C7C7C77777774C4C4C6C6C6CBBBBBBE3E3E36E6E6E3B3B3B383838A3A3A3F6F6F6FFFFFFFFFFFF FFFFFFFEFEFEEDEDEDA6A6A65A5A5A1818180000000A0A0A1E1E1E2D2D2D2C2C2C2C2C2C282828 1212120505050505050F0F0F3B3B3B999999EEEEEEFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFEDF4F4CCEAEAB0EDEDB9F4F5D0FCFDE9FFFFFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFAFFF3E6F8F1D0F0EFBBE9EAA5EFEFBCFBFBED FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1DBB1B1 DA8484D87A7AE3A2A2F6E0E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF8F8F8C3C3EE8383 E26161DA7272DCD0D0EDF5F5FCFFFFEFE6E6F1E0E0FCECECFFFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDFD16EE6D875EFE180E9DA7CE1D275E3D479EBDB83EBDB84E9D984EADA85 EBDA87F5E491ECDC89DECE78DDCD74D6C76BDCCD70DBCC6FDCCD70E3D479E4D47CE5D47DE4D57E E6D782EBDC87EBDC87ECDD88F1E28DF4E590EFE08BEEDF8AE5D681EBDC87EDE089E9E081EDE886 F0EA8BEEE78DF0E990F6EF97F4EC97F0E893F2EA95FAF39AFCF59BF9F297FBF298FEF49AF7ED95 F9EF9AFBF09DF5EA97F4E997E8DE88EFE58CF5EC91F2E98EF1E58CF4E18BFEE68FD3AC54E0BA5F FFE48BFCEA91E9E48D888933E7E38DE7DB82FCE88FFAE992F5E691E5D681EDDE89F5E691F8EA92 F6E890F5E78FF7E990F4E68DEFE287F3E68AF4E68DF1E38BF0E28AEBE087EBDF88EFE38DF4EA93 F3EA95F6EE99F5ED97ECE491E7DB87ECDB86EBE086E9E390EEE79EF2E68AFCE68FDCB56AAD8427 FFE18CFAE49BF5EB9CF7ED9BF5E692F3E491F4E592F0E18DF6E794EFE08CF3E490F9EA96F8E996 F5E692F3E694EDEA9BF0EB9AF7E991FCE788E6CD6CEBD373F1DC82EBDB85EDE08CEDE18EEFE08D F2E693F4EA9CF3EA9BF3E999F0E693F1E794F3EA9DECE49CFCF4B86D683D0B080035311B130E00 989156FFFFC8F2E9B2E4DBACDFD89DC9C4987C754F8C8748F4F0B9EBEAAEDEDD95322D03CDC887 F7F0AFEBE29DF1E99FEBE197EAE097FDF4ADFFFFBB918C4A9E9B5CFCFBBF413B07C4BC7DEDE59D F1E899ECE18FECE090F3E59BEFE29BF4EAA1F0E99BEFEC99F4F19FEFEBA3EDE9A1EDE79FF5EEA5 F3ECA3EDE59AEDE499EADE93F1E498EFE195E8DB8EF1ED9FECEDA3F3EBACFFFBCAD5CCA61E1A04 818256F7F7BDFAF7AEFFECA4AD7C37E6B878FCEDACEEECAAFAF6B7E7DDA1FFF6BB5F5B1C787737 FCFDBDF6F1AFFBEDADFFEDADE2B772C17F32F9D382FCEB99EEEB9CEEE49BF9EBA2F4E99BEBED97 E7ED98EDECA0F8E8A3F5E7A4F1EAA3F5EEA8EDE6A0F2EBA4EDE6A0D8D18BE5DD97ECE59FF5EEA8 ECE59EE1DA94EDE8A5EEE9A7E5E19BE4E099EFEBA2EEEAA1E5E198D9D48DE9E4A0F1ECADF2EDAF ECE4A9F0E3A7EAEDA8DFE89AF5EA9CFED68DCE954EE8BB71FDE89AE6E095F5EEAADFD89ADED696 E6DF99E8E19BDFD892E3DC98E5DE9AE4DD99EFE8A4E4DD99EDE6A4E5DD9DE3DB9AF2E9A9F0E8A9 EAE6A8E4E1A3E0DEA2C7C588E9E2A9EDE0A7F1DDA4F9E3A7B39054CFAF72FCE6ABFAEAAAE9D98F F6ED9DFCF6ABE0DB9AEBE7B5E9E3BC332D1C28220BD7D0AAFFFDD1F4E9B3D4E29FE0EAA7FFE8AC EBDC9AF0E9A0FFF4ADE19C62C87F44FFE49CF3EE9AF4F1A4FDE49CE3AC55F3D080FAF3ACF1EFAB F1EEACFEECADEAC688CCB153FFF693F5DF98F4E792EEEA92FCF8B0F0EBB1F9F8CBF1EEC33A391C 25250AE0E0A7FFFFCBEBE6AFFFF7BFF7E7A9FAEDAAFEF3B0F5EEAAFBE5A3DDBB7ABE8C4EBC8949 EDC380FAE198F6E99BDDD78BD3CE8DD9D591E3E09AE8E69EECE9A0EEEBA2EFEBA3EFE9A5F1EAA8 F7EDADF5EBAEEDEEA7E5EBA2EEEAAFFEEDBEFEECBDFAF5BBEEF2ABFBF4AAE2BE78C79A5BFFE8AB FAF3B8F4EDBE9B9165F1E8BCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEEEEEE7E7E7E1919193939398A8A8ADEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DFDFDFADADAD5656562626262626264C4C4C8484848E8E8E8E8E8E9090906363632D2D2D1B1B1B 3737376F6F6FB0B0B0EEEEEEFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4DCE5E5B1EBEBC3FBFBF1FEFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDF8EFD7E9CA79DDB540DED180E9E8BDF5FAF0 F7FDF9F8FCF8F4FBF4DDF2DCB7E4B5B1E1B0B3E1B2B3E1B2B3E1B2B3E1B2B3E1B2B2E1B1B0E1AF AFE1AEB1E2B1D2EED2F4FBF4F7FDFAF9F3E3FBE6C6FCEAC4FCFADBFEFEF0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFFFFFAF2EFE99F9EDC6362DD6666E89898FBEEEEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDF6F6EEB3B3DE6969DC5D5DE38181F9E5E5FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA E8E8E89B9B9B4242424A4A4AACACACDDDDDDDDDDDD6D6D6D3B3B3B383838A3A3A3F6F6F6FFFFFF FFFFFFFFFFFFFFFFFFF5F5F5CDCDCD8484843939391A1A1A3434346868689191918E8E8E8E8E8E 8282824343432222222828284E4E4E909090CFCFCFFDFDFDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFCFEFEEBF9F9D1E9E99DEBEAA1F8F6C9 FFFDE9FCFCF4FEFCF8FFFDFAFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFAFCFCF6FCFBF4FDF5E8FEE5C7F1E1B1E6E4ACF3F3D6FCFCF3 FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E1E1E1 DDBBBBDD9494DB7474E49393F6DADAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF1F1EE9E9E DF6363D97878D9A4A4DED5D5EEEEEEFDFDFDFDFBFBFDFAFAFEFBFBFFFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDED16CE7D975EADC7BE6D779E6D77AE0D176E2D27AE0D079E5D580 E7D684E4D381EDDC8CE2D17FE8D882E8D881DFD075EDDE80EEDF80E6D778E7D87BE7D87DEBDB81 EADB83E8D984E8D984E6D782ECDD88F7E893F5E691E9DA85EDDE89E5D681F0E18CE8DB84EBE283 EBE583EDE787EEE78CEFE88EF2EB93F0E893EFE792F3EA96F8F199F9F29AF6EF97F6EC95F6EC95 F5EB96F4E996F7EC9CFCF0A1F9EE9DEFE590F2E891F5EC91F4EB90F4E78EF9E690FCE48DC5A148 F0CA6FFFE98FF3E389EDE992C6C771F6F29DFEF098F8E48BF8E58EFAEB96EBDC87F2E38EF6E792 F4E68EF0E28AF0E289F4E68DF2E48BEDDF85F0E387E9DB82F2E48CF5E78FF2E78EF1E68FF1E58F F6EC95F6EE99F5ED98F1E994EEE693EFE48FF2E08BF2E78DEAE592ECE49CEFE487FAE48EE2BB70 AE8628FDDD88F2DB92EAE191EFE593F3E493F0E190EFE08FF4E594F4E594F0E190F4E594F6E796 F3E492F2E392F6E998F3F2A0EEEC97F8EB91FAE686EAD16FE4CA6BFBE88DF1E18CF3E795F5E898 F2E492F1E495EFE79DEFE79DF3EBA2F0E59DEBE199F1E7A2F5EAABEFE6AE282100353013EEEAC5 C0BB82EBE494EEE79BF5E9B6F5E9C3EFE7ADFFFEC9B5AF7556551CF9F7A6E4E19BF7F3A845410E 9B9556FFF8B9EDE4A3F7EDAAF5EAA6E6DC96EBE29AF8F1A9C7C47C686624FDFCB8938B56827741 FDFABBEADC97F7E9A2F9E8A3F4E49FE7D996E6DD94F8F2A1F3F298EBEB93EEEF9EF0F1A1EEEF9C EDEB97E5E28ED8D280E7E08FF7EB9DF7EA9FF9EBA3F3E49DEBEA95E7EC99ECE4B3ECDFC5584D35 2A2912D3D998F2F8ABF5EEA6FFE9A8BC854AC68A4CFEF1AF8E8C4CD7CF91FEF4B9FDF4BA656022 413F15E6E6A4F4EFADFEF0B0FCE5A6E5BB78B47124EDBF6FFDEB9AEBE898E5D98FFAECA1FAF0A1 E5E891E5EB95EFEFA0F5E49FF0E19EEBE49EF4EDA7F2EBA5F1EAA4F1EAA4F0E9A3F5EEA8EEE7A1 F5EEA8F4EDA7ECE59FE7E2A0EAE5A3E2DE98E4E099F2EEA5F2EEA5ECE89FE1DD96F2EDA8F2EDAD F0EBADF3EAAFF0DFA7EDF3ADDCE999FFEDA1DFA760CA8B44F8D887F0EC99E2E496F6ECABECDDA4 F7EAAFE3DC97D7D08AEEE7A0DDD690E7E09AF5EEA9F7F0ACF9F2AEF0E8A6E6DE9DEEE5A4F5E8AA D8C98EEFE7ABF0EDB2B3B27997985DFDFDC8CEC88FE7D69CFBDEA6EFD79F885F27977746EFDFA5 FFEFA8EADF8CF1E898FDF9B1ECE7B2E8E4BED2CDB01510003D3820C3BB96FFFCCDF8FECBECF9B7 FFE8AFF3E4A5F1E8A2FFF0A8E29861CE8449FFDD94F1EE97F8F5A7FFEBA2DBA54EE9C776F6F2AB F0EEAAF6F3B1FBE7A8EBCB8DC7AB4CFFF58EFFECA1F9ED90F7F294EDE7A0FDF7C6EDE9C463603B 3D3C0DCCCD94F8F8B9F4F2B6EEE7B4F9F2BDFCF4AAF8E69AFFDE97FFEAAAECBB7DB07D41D8AB6D FCE4A2FFFDBAEDE098EAE29AE9E29CDBD48FD8D189D4CE84D4CC82E7E093F2EBA1EBE79DE6E4A0 E0E0A2E7E7AEEAEBB5E4F0A9DCE79BEDE3A9FEE9BBFCE7BCFFEEBBF4FAB3E9EF9FF4E094DEA16A FFD8A1FCFCC1E0DEA4DCD69DFDFBC2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDEEEEEEC0C0C05F5F5F171717606060AFAFAFECECECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3F3D2D2D26868683030303D3D3D777777C3C3C3D2D2D2D1D1D1D5D5D58787872D2C2D 202120595A59A5A5A5E3E3E3F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAF0F2F2D7ECECC5EEEECBF8F8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF1F5E6B4EBD077DEC057D4D085 CCE6BFCAEBCBCAEBCACBEBCAC8ECC7C5EFC4CCEFCDD5EFD6D6EFD6D6EFD6D6EFD6D6EFD6D2EFD2 C8EFC8C1EFC1C2EFC2C6EDC6CAEBCAC9EBCBD4E5BCE5DFADF4EAC2FEFDECFFFFFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF7FFF8ECF2E1E19D95DD6867E07878EBACABFCF1F1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDF9F8F1C5C5E28484DD6A6AE38080F9E5E5FFFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F1F1F1B1B1B16E6E6E444444717171D6D6D6F1F1F1DDDDDD6D6D6D3B3B3B383838A3A3A3F6F6F6 FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEEEEEEA0A0A04444442424244F4F4F9C9C9CD5D5D5D1D1D1 D1D1D1BDBDBD4F4F4F252525434343848484CACACAECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8FDFDEBF4F4CEF4EEC2 FBECC4F7EBC4EFEBC4F7EBCEFFEFDEFFFBF7FFFEFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFEFFFFFE FFFFFEFFFFFEFFFFFEFFFFFFFDFDFBF5F5DFECECC5EBEBC1F0ECC4FCEFCAF7EFCCF2F1D4FAFAF0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7 E1E1E1E4C5C5ECA4A4E26E6EE58484F6D4D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9FCE1E1 EC8484D95252CE8282D1C0C0EBE7E7F7F7F7FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D36FE3D672E0D271E0D171E9DA7DE4D57AE5D57CE6D57E EDDC86E5D47FD7C774F3E291EFDF8CE1D27BEDDD85E2D479D9CA6FDCCD71DECF73EBDD81EFE086 EBDC82EBDD85EFE08AF2E38DEEE08AEBDC87EDDE88F3E48EEDDF89EEE08AEEE08AFCED98EFE28A F2E98AEEE787EFE88AF3EB91F4EC93F1EA92EEE691F1E994F6EE96FAF29AF9F197F6EE93F3E98F ECE289F7ED95F6EC94F2E892FEF6A0FBF09BFAF09AFAF098F5EB91F3EA8FF6EA90FDEC93FBD781 BA8E37EBC76EFAE589EBE086EBE48CFEF8A1EEE78FE9DB82F7E389F2E289F9EF94F3E88DF7EA90 F2E78DEBE085F3E68BF0E589F3E98CF1E588EADF82F3E88BF1E48AF2E68DEDE38AEEE38AF6EA93 F9ED97F3E992F4EB96EFE691EAE28DEEE592F4E997FBED99FAEE95F1E592F0E69AF3E88CF7E58D E4C372AC8229F9D27DF0D586E9E08BEDE590F7EB99F5E795F0E290F6EB99F7EA98EBDD8CEDE290 EEE190EEDE91EEE291F8EC9DF4F19DEFEB94F4E98EF8E589E8D075DFC66CFFEA97F6E292F5E396 F8E79BF2E195E7DA8CE9E094EDE397F5ECA0F0E69DE1D898E9E0A7FFFBCD958E620000007F7A51 FCF9C5F0EAA5F1E895F1E799F0E4A4E3D79FE8DF9BEBE1A0C4BC7576721FEFEA98DCD78DFCF6AF 635D236C6732F4EEAFF4EDA8FBF5B2F4EAABF1E5A4E5DC95EEE699D4CE83504C12E6E2A5D6CE9C 524814F9F7C3DDD195F1E6A3F4E6A0F1E59CFEF8ABF8F0A0F2EC9AEEE894EDEA97EFEEA1F0ED9F EDEA9CEFEC9BF2EC9DDDD787E0D789F9EFA1F7ECA2F8E9A4F4E6A1F4F39CEAEC9EFFFFE28A806B 060000989A57EEF3ABDFDC9CFBEDB0FEE4A2EBC582B57E3FFDEFB2584D276A612EFFFDBBEEE9AE 928D58504A12EDE6ACEBDFA7EADC98EBDD95E3C378B97727EDBC6DFFF3A4F2EDA1E0DA91F4E99E F0E795DEDB84E0E28BEDE99BF1E29EEEE19CEDE69DF9F2A9F8F2A9F0E9A0F6F0A8F2EBA5FCF5AF FAF3ADF2EBA6E6DF9AE7E09CE1DB99E6E09FE0DA98E3DE98EEEAA1EEE9A0EFEBA2E8E49BF4EEA9 E7E29FE0DA9AE2DB9CEFE7A9D9E299CED282FCD08AC88440D09D52FAF19BE0E18EE6E398F9ECAB E9DA9EEADDA0F4ECACF5ECADECE3A4E0D798F6EEAEEEE6A6E9E1A1F0E8A7EFE8A5ECE5A0EEE7A3 F0E4A9F2E5ACFFFBBCE7E2A1D2D195EEEDBADFDCABE9E4ADF0E3A4F6E3A4FDE4AAFFE9B6CEB285 A68654F4EAABF7E69BECE091EBE399F7F1B2F1EBBAF2EEC7B7B38F211E100D0A006B6548CBD2AC F1F1C8F5E1B7F7EEB6FFFBB5FDF1A8E8AC6CE2A769FFE69FF1ED9DF5F1A6FFE7A0D59E4AE6C174 FAEDA7F7EFA7EBE49EFAE8ABDEBD88A48334FFEB94FEF5AFF9F7AAFAFCB3FCFDC5BBB387201500 382F10F1EBBFFFFFCEF2F2B7E7E6ACF4F4BCFFFDC2FCEEA5FFF3AAF9E19BDAA463B78445EBC081 FFF7B7FFF4B2F9F0ACF4EFAEF3ECADE1DA99EAE4A1E8DF9CDAD28BCFC77FE1D992F2EBA4F4EFAC EFEBADE2E0A5E5E4ADE6E8B4E6EEABDFE59EEFE4AAF0E1AEE8DAA6F2E4ADEBEEADEDF2A8FDF7AD F0BC7FDFB173F5E5A1FAF5B6FCFABCEEEAA7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFCDADADA8A8A8A4242422222228A8A8AD1D1D1F5F5F5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBEBEB7070703333334C4C4C979797F0F0F0FFFFFFFEFEFEFFFFFF9B9B9B 2727272828287A7A7ACECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFAEDEDC8E2E2A7F1F1D2FFFFFDFFFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFEEAF7EEBCE1BF57 C6C15DAECF84A4D799A6DCA3B0E1AFC4ECC3DFFCDFF2FFF2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFFFAEBFFEBE1FFE1E0FEE0CAF0CAB3E1B1ACDDA3B6D799CAD399E5E4C2FCFCF8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3FFF4E4F1D9DC9689DD6866E48B8CEFC3C3FCF4F4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFAFAEDD4D3DB9B9ADA7676E48080F9E5E5FFFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7F7DADADA7474744A4A4A5F5F5FA4A4A4F3F3F3FEFEFEDCDCDC6D6D6D3B3B3B383838A3A3A3 F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2B2B24545452A2A2A676767C1C1C1FFFFFF FFFFFFFEFEFEE0E0E05050502626265C5C5CB0B0B0F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFF6EEFEE7CEF2E0B3E7E0A9F3DEB3FEE1C6FAF3E2F9F8ECF9F9ECF9F9ECF9F9ECF9F9ECF9F9EC F9F9ECF9F9ECF9F9ECF9F9ECF9F9EDF7F7E8EDEDC5E2E2A4E1E1A2E9E9B4FBFBD9FFFFEFFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F7F7F7E1E1E1ECCFCFF9B3B3E86464E57171F5CCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDECEC F8C5C5E97070D85353CC9393D3D9D9F7F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDAD06BDFD570E5D977E9DC7BEADD7DE5D679DFCF74 E4D379F1E088E8D780D7C770EADB84E9DB84E3D57DE6D880E7D981E5D77FE4D67EE9DB83F2E48C E6D880E3D57CE7D981E9DB83EDDF87EEE087EEE088F0E38AE9DB83F4E68EEFE088DDCF77C7B961 F9EC93F3E98EF7EE91F7EE92F1E78FF0E690F3E994FEF49FFDF39DFAF098F5EC92F3EA8EF3EA8D FBF293F6ED8EF5EC8DF7EE8FEDE487F5EC8FF6ED91F5EB91F0E78CF1E88CF2E98EF1E889FCEA8A F9D27FAC7221F4D983F1E98EF0EA8EF9EA92FDEA93F3E78CE8DF82E7D67AE1D577ECE483EBE282 E9E081E2DA78E7DF7EE9E081E7DF7EEDE584E7DE7FE2D979F6ED8DF0E68AF5EB91F2E88FF4EA91 F5EB94EEE48DF0E68FF4EA94F0E691F3E993F5EA98F1EA96F6F09AF6E591F3DE8BF8E692F2EA90 EDE387FBE38CBA903BF7CD79F9DA81F5EB8BEEE78CF6EC97F2E893E8DD8BEDE290F5EA98ECE090 F0E595F1E697F1E597EEE394F2E999F3ED96F3ED96F0E790FCEE9AECD685E0C676F6DB90F7DD93 F0D88EF3E097F8E69FECDD92F3E696F1E592F1E695E1D98EDED89BF9F4C7B4AD8C1E1903211C0E D2D095F9FAAFDBD689F4E79FEBDF90F4E896E7DE88F5EC98F4EB9ED6CD85766E2AF1E8A5E8DF99 FFF8B3A09A70504C24F4F2AFF2EFA2EFE79FF7EDB1EFE3A6EBE298E5DF86EDE9945C5514DAD3A3 E5E1B0292504C6C18DFBF6BDEBE5A3E9E498EEE791F2EB90EDE68DEEE492F0E59BF0E5A0F4EAA8 EEE4A3EDE29FF2E8A4F6ECA6F7EDA7F0E79FEEE49BF5EBA1F3E99FF3E99EF0ED98F7F7BBD6CEC4 1D1612686A31F4F99AF8F4B5E5D7AEFAEDBEFFE699E6C97B875C20F0CE95B49D6A50450AEFF2A5 F8FABDB8B485342905DFCB9AEED7AAE5DA8DF0EF98ECD882C58833DEAB5CFFEEA5F6F0ABEAE9A3 E9E59AE7DF8CE8E087F0E790ECE495F5E8A2F4EBA4EDE699F2ECA0EDE79BEEE89DF9F3A9F1EAA2 ECE59EEDE6A1F2EBA7EDE6A2DDD694EDE5A6F2EAABE9E29FEAE39DE9E29BF2EAA3F7F1A7F1EAA1 F2EBA3E2DA94E5DE99ECE8A5D8DB98C2CD81F6E698FFBE7ED68D48E7C876EAF99FE9E89BF7E7A2 F6EAA6F1E8A2E4DC9AF0E8ABF3E9AFE5DBA2E9E0A7F6EFB6E6DDA3D1C88CD5CD8FEEE6A5E5DE99 EBE49EEEE6ACF3F0B9E9E49DE5E298D0CB8CEEE5B9C3BB92C4BD89F3EDA6E4DF93E1DA96FFF8C5 FFEEC4D1B083C1A26CFFECACFFF2ABF9E99FF0E79DECE5A3E8E5ABFDFBCCD5D3A9666A52060C01 2319156753454E3A2D827D53ECEDB1FAEEA8B48C46D8AD68FFE6A0EAE89FF0E9A3FFE8A2DEA556 F4CE86FFF6B3F7E599E5D88EFCECB1EAD9AEB28A51FCDA98F6F5B4EBF7C5CAD6AD54573D0C0400 574726DFCCA3FFF5CFFAF2CAF2EFC2DEDDA8D8DB9ECAC281FFFBBBF7D291C09754B79450E8CD87 FFECA7F7EAA5F4EAA9F4ECAEF6F0B5F8F1BAF8F1B8F4EEB0EBE4A6E9E2A3F1EAABF3ECAFF9F3B6 FAF4B8F3EDB1F8F2B7F8F3B8EAE5ACF6F2B9E9E7ABFBF5B8F3EDAEEEE8A9F5F1B4E8E7ABEBE7A8 FAEDACEED087D2A85AFEDE8EF1E8A7DFDF9FEAE6A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFBC7C7C75353532B2B2B373737B1B1B1EFEFEFFEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE9E9E9616161222222454545979797EFEFEFFFFFFFFBFBFBEFEFEF 8D8D8D2626263C3C3C949494D9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDF9ECECC7E2E2A2F2F2C4FFFFEDFFFFFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF9F7FBE9 E2EFBED6D079CAB748AFC875B5E1B1D8F2DCF2FCF3F7FEF7FCFFFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEFAFFFAF7FFF7F7FFF7F1FBF1E8F4E1D8E5AFC0C894AEAF96CAC9C2FAF9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFEF5EEE7E47D7ADC4A4AE37F7FEFC4C4FCF4F4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAF9F9D1CECEB09292C67272E58181F9E5E5FFFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFED9D9D99F9F9F393939424242969696DDDDDDFBFBFBFDFDFDDCDCDC6D6D6D3B3B3B393939 A3A3A3F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAA353535292929767676C9C9C9 FFFFFFFFFFFFF3F3F3CECECE4848482B2B2B6C6C6CBEBEBEF6F6F6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFBFFF9F3FCF8ECF9F4E6FBE6DAF9DBCAE7E1B0E2E2A8E2E2A7E2E2A7E2E2A7E2E2A7 E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E2E2A7E3E3A9EDEDB8F6F6CDF8F8DEF9F9EDFEFEF5FFFFFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF7F7F7E2E2E2ECD9D9F9C2C2E84F4FE55353F5C1C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F4D2D2E69393DD6767DF7979E9C0C0F5F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDED571E0D674E9DD7BE6D979DED171E3D477 E2D277E1D076E7D67CE7D67EE1D179ECDD86E1D37BE4D67EE7D981EADC84F2E48CEEE088E8DA82 F1E38BEEE088E8DA82E9DB83E9DB83E6D880E3D57DE5D77FECDE86F1E38BF2E48CFAF098C4B65E 978931F7EB91EDE288F1E88BF2EA8EF0E68FF0E690F3E994F5EB96FCF29CFBF198F5EB92F4EB8F F7EE91F9F093F3EA8DF6ED90FDF497ECE388ECE388EFE68BEAE087E9DF86EEE48BF6EC93F5ED8F F6E381F8D27FA86B1BF9EA93F6EF93F2EC91F6E68FFBE891F6EB8FEFE588EADA7EE0D576E5DC7D E0D779E7DE81E5DC7DE7DE7FECE386ECE385EEE586EFE689ECE385E9E083E8DF84F0E68CEFE58C EEE48BF2E890F2E891F6EC95F5EB95F2E893F7ED98F8ED9AEEE793EDE892F8E692FAE491F9E791 F1EA90F1E88CFCE58DBF9541F5CC78F7D77EEEE483F1E98EF2E893EBE18CE6DC89EFE492F6EB99 EBE090E7DC8CEEE393E8DD8EEADF90E9DF90ECE595ECE594F7EC9BFDEE9BFAE792D5BF6AF3DD88 F5DF8BF0DB8AEAD98AEEE092F4E99BF4EA9EE6DD90F0E89DDDD792F6F1B9DFDBB0282215060100 726F42FEFEC6EAE89BEAE497F1E39CEDE192F3E893ECE289F3E995F6EC9FE6DC957F7735EFE6A4 EAE19CFDF5B0CDC79E302D07E4E4A3F9F6A9EFE89FF7EDB2F3E7ABF5EBA1ECE68EF7F29F7B7438 969060FFFFCD6A6736807D46FDF8BEFAF5B3EDEA9DECE58FF2EB91EFE890F3E799F7EBA3F2E6A2 EDE2A0F1E6A4E1D694EDE39FF5EBA6F0E6A0F0E69FECE29AF1E79EF5ECA1F9F0A5F7F3A4F8F4B8 574F471A1500DDDF9BFEFFABD5D198CEC19BFFECBAF4DF8CEFD284BB9763C9AB75DED9A12D2404 BDC276FEFFC3E2E2AB2C2200C1AF79FAE6B1E7DD8DE8E98CFAEB8EDCA14DC39244FFE9A0F2EAA4 E4E09AE8E699E6DF8CE4DA83FBF19BF1E598EEE49EF8EFA8F1EA9FECE69CE1DB91E2DC92F3ECA4 F1EAA2F0E9A1F2EBA5F5EEA8F1EAA4E6DF9AEFE7A6EFE7A6E6DE9CDBD48ED6CF87D8D288F2ECA2 ECE69DF5EEA7EEE7A3F1E9A7F3EFACDCE09CC9CE83FFFDB0EE9B5CC47F39FFE995CDDC83DCD88E FFF2B1F6EAA6EFE69FE9E29BEEE7A1F8F1AD766E2E7F7739FFF8BAF6EDB3E9E0A5EFE6ABF3EBAD EAE2A3EAE2A3E2DBA2FAF4BAF9F6B1FDF9B4D1CB8EE9E2B1CFC79999925CE5E09CFBF7AEF7F2B0 FBF1B9FDE5B7FCE0B0EACE99C8AF71DEC580FEF5ABF8E99EFBF1AAFEF6B8EEEAB3FFFED3EDF1C6 A3AD84201907120000200C003F3A1DABA681FFF4C4BB9560E6C285F7E19CF4F6A8FFFDB3FFECA3 DEAE5DF5D88EFFF9B0F3EC9AFAF9ABFFF7B7EDE3B3A68246F4D68FF3F6B39197653539104D4B1D AEA675EFE4B0EFE6B5F5EEC0EDEABBE5E1B2E3DBA5E0D296C0A868E3BB7CB38B4ACFAC6AFEE5A0 FFEEA9FAE9A3FCF0ACFBF2B1FAF2B4F8F2B7F9EFBAFBF3BBFFFEC3F1EAAEE0DA9EEDE7ABF7F1B5 FFF9BDF9F3B7F4EEB1FEF8BBF4EEB0EFEAAEFEF9BEF2F0B5F9F3B6FAF3B4F9F4B4F2EEB0F3F1B6 E8E2A8F5E9AAFEE49FC69C4FE8BE6FE4D797D3D190D8D18BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1B2B2B23434342727274D4E4DC4C4C4F9F9F9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBDDDDDD5656562626265E5E5EB0B1B0F3F3F3FFFFFFF7F7F7 DEDEDE7F7F7F262626545454B3B3B3E7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF4F4DFEBEBC0EEEEBEF4F5CEFDFDF6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFE F2FCF1CEF3CCD2D88FDCBE59C6BE59C9CF84E8E6BFFEF8ECFEFEFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFFFEFEFFFFFEFFFFFAFAF2E6E6B1CDD29CB9C5A9C1D3C1DAEFD9 EAFBE9F5FFF5FDFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEDEDE77575DA4647DF8B8BECD5D5FCF7F7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFBFBE0DCDCC6A3A3CF6B6CE36B6CF9E1E1FFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCFCF0F0F0AAAAAA5F5F5F3E3E3E6D6D6DC4C4C4FAFAFAFFFFFFFFFFFFDFDFDF6E6E6E353535 2D2D2D9F9F9FF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFCFCFC9E9E9E2F2F2F383838929292 D7D7D7FFFFFFFEFEFEE9E9E9BCBCBC3F3F3F353535878787D4D4D4F8F8F8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFEFFFFFEFFFCFBFEF2F0FBE9E0EDE9C6EAE9BEE9E9BDE9E9BDE9E9BD E9E9BDE9E9BDE9E9BDE9E9BDE9E9BDE9E9BDE9E9BDEBEBC0F4F4D2FDFDE9FFFFF6FFFFFEFFFFFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF4F4F4D5D5D5E3DBDBF8D1D1E84F4FE54444F5B2B2FFFFFFFFFEFEFFFFFFFFFFFF FFFFFFF2BFBFE06D6DD96565E19A9AF3D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0D774DED472E3D776E5D878E5D878 E8D97CE6D67BE4D379E9D87EE5D47BDDCD76ECDD85E1D37BE9DB83E9DB83E8DA82F0E28AEDDF87 EBDD85F3E58DF2E48CECDE86ECDE86EDDF87EADC84E7D981E7D981ECDE86F1E38BF4E68EEFE189 E4D67EE6D981F0E48AEFE48AF3EA8EF5EC91F2E891F0E690F3E994F0E691FAF09AFCF299F4EB91 F4EC8FFBF295F2E98CF0E78AF3EA8DF9F094EDE48AF2E88EEDE48BF1E78FF7ED96F2E892ECE28C E5DD80EFDD7CFDC572E8AE5EFDD985EEE98DF2EC92F9EA92FAE790F8ED91F5EF91F6E689F3E78C F0E88CE6DD82EFE68CEDE488E7DE82F6EC92EFE68AE5DC81EBE288F3E98EE9E085E8DF84EEE58B EFE58CEAE087ECE28BF3E992FAF099F4EA94EFE590F3E994F0E593E5DE8AECE791F7E692FBE592 F7E58FF0E98FF6EE92F9E28AB58B36E9BD6AF8D87EEAE07FF1EA8DF1E791EAE08BE7DC89E8DD8A E7DC8AEADF8EE9DE8EF1E696EBE091EEE393E1D78AEAE199F1E99FF7EB9DE6D783F6E38BE3CF73 E9D578F9E78CFCED95EDE18EE5DC8CEBE397E0D993F3EDA7E1DB98F4F3B5B5B37E2C2A12070200 0E0A00C3BE8FE3DE9EE7E695EEE597EADC95EBDE8FECE28DEDE38AEEE48FF3EA9CEFE59E7C7331 E8DF9CF0E7A2F7EFA9EAE4B82D2800C4C080EEE89CF9F2ABEDE3A4F6EAABECE397E2DB84F3EC9A BFB876574E1BF8F4BDCCCB94353205E3DEA3F5F1AEEFECA0E7E08DEFE891EFE693F4E89CFAEDA7 F7EAA9F2E8A5EFE4A1ECE29DF4EAA5F7EDA7F7EDA5FAF0A9F5EBA3F4EBA1F6EDA2F7EEA3FBF5AB C1BC85050000827E59FAFDB9F1F7A55451227A704EFFF4BEECDE89FFF6AEA68A5F8A7144FCF1BB 393517626827FFFFC5DFE1A42B2500AC9F64FFF9B9EEE796E8E98CF7EA8AEABD6BB28133FFE29A F6E7A1DFDB94E4E295E3DE8BE3D883F2E795F4E89BF6ECA5EEE6A0E9E399EDE69FEBE59CEBE49C F2EBA3ECE59DEDE69EEEE79FEBE49DE8E199DFD891E8E19BE9E29DEFE8A1E1DA91DCD68BDCD68B EAE49AE7DF98F5EEA9F3EBA9F4ECACEFEBABEDEEABDDDF95FDF0A5C87C3CD5964DFEFCABD1DD87 E1DE94F9EAA7F2E7A3F0E8A0EBE59AF7F1A3F6F0A4D2CC83DED894F9F3B4EDE4A7F2E9B0FCF3B8 F2E9AFEDE4AAEBE1A7EFE9ACE4DE9FF1EBACEBE4A8F3EFB5F1EDB5E4DDA5D0C990E7E1A5F2ECAD F0EBAAF2EAACF9E9B4EBD6A4FFF3B9D6BE7FB49A55EFDD95FFEEA6FBEBA5FAEEADEFE7ABEEEBB4 EDF0B8F0F7BCF1EEBC8071502A1A0F20180B5F5841B3A17E9B794DF2D8A4FFF5B5F6FAB2FAFFBF F2E4ACCFA666F4DBA0FAF3BDF4F4B1FAFABBFAF9C7EBE4C2A5855283673B444215100B00A29B6B FFFFCDFFFDC3FAF8B8EAEBAEEDF1B5F5F6BEEDE6AEFCEFB7FFF0B5E8C0838D6929C1A05EF2D491 FAE49EF7E59FFCF1ABF3EAA6F6EEADF6EEB1F3ECB1F3E9B3F2EAB3FAF3B8F2EBB3E2DCA1E6E0A5 E1DB9FDFD99CF0EAACF8F2B4F8F2B3F3EEAEF5F0B0F7F2B7F8F3B9FEF7BAFFF7B8FEF7B9FAF4BA F9F7BEEFE8B0F5E6AAFFFBB9DEB56CC79D52F0E19EE8E19FE3DB96FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9DDDEDD9696962121213030306C6D6CD0D0D0FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0C9C9C94A4A4A323232818281D1D2D1F8F8F8FFFFFF F2F2F2C9C9C96F6F6F2525256C6C6CD2D2D2F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBF7F7E6EBEABEE8E6B1 FAF8EBFFFDFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFEFCEAF8EBB8E3B9CADBA3E8D38DE0BB54DEBA52EBD188F8EAC7FEFBF4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF9F9ECE8E6B4DCE5AED4ECC6C1E9C3 B6E4B5CAF0CAE5FCE5F9FEF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEDEDE77374D84A4BD99B9BE6E7E7 FBFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF7EEEDEAB8B8DE6465E05253F9DCDCFFFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF8F8F8E0E0E07E7E7E2727274E4E4E939393D1D1D1EFEFEFEDEDEDEBEBEBCCCCCC656565 2A2A2A1C1C1C8A8A8AE3E3E3F3F3F3F6F6F6FEFEFEFFFFFFFAFAFAEAEAEA8E8E8E2D2D2D4D4D4D B2B2B2E5E5E5FFFFFFFEFEFEDEDEDEA7A7A7353535404040A4A4A4EDEDEDFCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFDFEFAF9FBFAF3FAFAF1FAFAF1FAFAF1 FAFAF1FAFAF1FAFAF1FAFAF1FAFAF1FAFAF1FAFAF1FAFAF1FBFBF1FDFDF6FFFFFBFFFFFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF1F1F1CBCBCBDCDCDCF6E0E0E85A5AE54343F5A4A4FFF2F2FFFCFCFFFFFF FFFEFEFEFEFEF0AAAADF5050DA6C6CE4BABAF5E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D775E7DD7BE8DB7BE5D878 E4D777F0E184ECDC7FEAD97DEEDD83E5D47AD8C96FEADB83E7D981EDDF87EADC84E7D981E7D981 E8DA82F1E38BF2E48CEDDF87EDDF87ECDE86ECDE86EEE088ECDE86EBDD85EBDD85EDDF88F1E38B EFE189F2E48CF4E78FF3E78DEFE489F4EB8EF6ED92F1E791EFE58FEFE590F9EF9AFFF59FFFF59C F9EF95FAF195FFF79AFBF298FAF296F7ED94F7ED93F1E78EFEF49CF6EC94F6EC96FCF29CF2E893 EBE18CE8E083E1D170FBCE7CD99E4EFEE994E7E085F6F297F8EA92F6E48EF3E88DF1EB8DF6E78C F8ED93F6EC93ECE28AF8EE96F5EB92EEE48BF3E991E8DE85E0D67DE9DE87F5EB92F7ED94EEE58A F0E68CF2E88FEDE38AEDE38CF5EB94F4EA93F2E893F0E691F6EC96F6EB99ECE591ECE891F5E490 FEE795FBE993F5EF95FCF498FEE78FB88E39DEB35FFFE58BF2E887F0E88CEEE48DEFE590EFE590 EAE08BE7DC8BEFE492F0E593E0D586E7DC8CF2E797F1E599F8EDABF2E7A4F4E79BF4E590FAEA8D DFCF6DE2D170F6E889F5EA92E7E08FE3DE93E0DC99E6E3A5E5E2A7E0DEA589874F1716070E0C00 08040049441FE2DCA9EBE4A0E2DE8BEFE698F0E39CF3E697EEE48FF6EC93F2E893F3E99CF9EFA8 7B7230E1D895F5ECA7F2EAA4FFFFD0403B0D9D9959F8F2A9F4ECA5F2E8A6F8EAA7E9DE93E9E18E F6EF9FF9F1AE423B07CECA8EF4F2B73938039B975BF5F1B1F2EEA5F3EC9AF8F09DF4EB9AF5E99F F7EAA8F7EAAAF6ECA8EDE39EF6ECA5F6ECA5F3E9A2F6ECA5F6ECA4F3E9A1F2E89EF5ECA0F2E99F F9F1AEC4BE89030000797749FFFFBCEDF3AB4D4A25585331FFFBC0EEE692DACF8B301C0D271507 CAC293949559232609ECEFB4E8EBA8322D00908650FFFEB5F0EA9EECEE92F0E584F2CC79B38337 EBC880F8E39CDDD78CDCDC8ED9D583E1D686E5D889EEE197F4EDA5EAE59EEFE8A2EBE49EEDE6A0 F0E9A3F2EBA3EEE79FF4EEA4F7F1A8F2ECA2F4EEA3F0EAA1F5EFA5E6E096E3DD93CFC97DE4DE92 FAF4A8FFF9AFF1EAA2EFE7A5E6DE9FF0E8AAF8F2B4DADC98F5F1A8F1D28AC98542FAC379FFF4A4 E9F4A0BEBD73E2D491F3E7A5ECE49CE8E498F4F09EFBF5A5F9F3A7FDF7AFF0E9A6F4EFB3F2E8AD FBF2B7F2E8AEF2E9AFF6EDB2DAD590EAE6A0F6EFB5FBF3C0C2BC85A19C5CEAE5A4E8E2A6EBE3B0 FFFFCEF0EAACF3EEA8FFFABFFFF8C1F1E0A5FFF1B2ECD795B79A55E7CD87FFF3ADE6D690F6ECA9 EFEAABEDEDABDFE59CEEECB0F4E9BAEAE1BC837B601F17001605002D110A785E33AFA573C8CC99 B9BF96DBD2B3E3C097E2CCABDDD9BAC7C99D93976E6D6D512F271D1B01003213007C7655D1C595 F8EAB4E4D69AFBF9B4F7F8B0F5F9AEE2E9A3E9EAA9FDF2B6F8DDA1C193569B692AC8A968F9E6A3 FFEFAAFDEDA8FFF6B0F6ECA7EBE3A0F1E9A9F2EAADF0E6AEF2E8B3F0E6B1EEE7AFFBF4BDFDF6BE EFE9AFD0CA8EC8C285EFE9AAFEF9BAF1ECAAF6F1AEF4EFACE8E4A6F2EDB3FAF1B5F9EFB1EBE4A5 F5EFB4F9F7BEFFFCC5FBEFB6FFF2B5F5D38FD8B169FAE5A2FEF7B3FAEEAAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECB1B2B16263621414144F4F4FA6A7A6E5E5E5FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDFA9A9A9393939383838989898E6E6E6FBFBFB FEFEFEEAEAEAA0A0A04F4F4F1F1F1F7D7D7DE7E7E7FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFAF4F5E7C6 F2DCACFDE8CFFFF4EAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFFFDF3FFF3DDF3DDB4CDB4CED8BFF2E8C9F6D295EDBF65E8BD59EED388FEFBE3FFFFFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF5F6E2EBECC6EDEDC9F0F5D9ECFCE6 CAF0CBA8DBA7B6D7B6D3DFD3F5F8F5FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCEEEEE87475D34849CA9393 D6DEDEF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFCFCECE9E9D9B0B0D65B5CE04A4BF8DBDB FFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEF7F7F7DADADA6D6D6D0A0A0A2222224949496363636E6E6E6C6C6C6B6B6B5D5D5D 2D2D2D1111110A0A0A3C3C3C6F6F6F8D8D8DB9B9B9F3F3F3FFFFFFF4F4F4CCCCCC757575272727 5C5C5CC7C7C7EFEFEFFFFFFFFEFEFECCCCCC868686252525464646B9B9B9FFFFFFFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8E6E6E6EEF0F0F9EAEAE87373E65656F69F9FFFE2E2FFFAFA FFFFFFFEF7F7F0D6D6E58585DE4242E58181F1DCDCFAF7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFD574E1D776E4D676 E1D474DED171F1E285F1E084ECDA7FE9D87BE5D478DECF74E4D57DECDE86E9DB83E8DA82EBDD85 EDDF87ECDE86E6D880EDDF87F5E78FEDDF87E6D87FE8DA81EADC83E9DB82E8DA81E9DB82F2E48B EADC83F6E88FE8DA81DFD178EDE188EFE488F4EB8FF8F094F5EB94F3E993F4EA95FBF19CFAF09A F7ED94F3EA90F5EC8FF9F093FEF59BF7ED94F4EA94F9EF98F2E891FBF19CF3E994F3E896FCF19F F6EB99F2E795F5ED92ECDC7CF7C876C38738FDF39EE9E489EDEA90F5E691FBE993F6ED93F3EC8F F9EB91F5E892F4EA94EEE48EFAF09BF7ED96F0E68FEFE590E8DE88EFE58FF2E893F1E792FDF39D EEE48AEAE187EFE58CF0E68DEFE58EF5EB94EFE58EF3E994F2E893F6EC97FAEF9DF4ED9AEAE690 F1E08CFDE794F7E590E9E288EDE589FFEB94C99F4BDBAE5AFFE990F5EB8AF2EB8FF2E891F6EC95 F6EC96F0E691F5EB96EBE08EF6EC9AD0C572E7DC8CECE191EBDF91FAEFADF4E9A6F1E498FFF29C F6E788E7D775E9DA78F6EA8FE5DC8DE6E09EF3F1B8E9E8B3D9D8A2C1C18E49491D000000212202 44441D060300A9A578E9E3A9EAE29BE6DD8AF8EC9EEDDF98F0E394E6DB86F2E88FEBE18DEAE193 FFF8B1807735D4CB89ECE39DECE49EFFFEC868643676713EF7F0ACF2E9A2F0E69FFFF8B0F2E69A F4EB9AF2EB9EFFF7B2706A2A858243FFFFC8A3A1654E491EEBE7A6EEEAA0F9F2A2FCF4A3F6ED9F F6EAA2F7E9AAF5E8A7F6ECA6F8EEA7F1E7A0EEE49CF1E79FF2E8A0F3E9A1EEE49CEAE098F1E7A0 F3E9A2FCF4B8E1D9A8645F3A383800E7EBA1F8FDC0525131292613EDEDB0FFFFB4847D44271803 0C0100766F47D3D29F111201CCCE93FBFFBB524D2A6C663AFDF7ABE5E19BE3E38DF5EB8FFCD888 C4944CD5AC65FBE199E4DC8EE5E796D8D886E9DE8FF7E69CEFE298F1EBA3EEEAA5F2EBA7E5DE9A EBE4A0F1EAA5EDE69EE5DE95EDE79DF2ECA1EAE498EEE89AEFE99CDCD68ACEC87CDCD689C6C072 D7D183E6E093EDE79DEEE79FF9F1AFECE4A6EBE2A6ECE6AADDDE9BF3E7A2E4BF79C48943CDA158 D6C777C9D080929048E4DA98F9F0ADE4E097ECEA9FEBE89AF2F0A3F0ECA3F3EFA7EEE9A6F8F3B1 F7F2B2F8F3B3EFEAA9EEEAA7F3EEAAF3F0A3E5E399E6E0AAC2BB8D403A05C5C27DF8F5ADF3EFB2 FCF5C8A9A275716D32EDEBA0F7F7B7EAE7ACFCF3B5EEDB9DFDE2A3E0C483937431E2C883ECD891 ECDE97F2E9A1F9F5AEE1E09EE0DBA0F0E9B2F9F2BBFFFEC7F7EFB675662D3822082D1908080000 0000000004022016003514002A14001311000D12000D1104201E095F534A9B775CC7A37CFFFDD4 FEF5BFFDFAB9F0E19BF4E698FFF5A5FFFBACF9F2A8FFFEB7EBDA97BC9B5BB58645E7B976FFFAB7 EBDE9AEFE39DF0E6A2F3E9A4FDFDBAF9F2AFFBF6B6F7F1B3F0EAB2F3ECB6F7F0BAF9F2BCF2EBB5 EEE8B0D5CF95BAB478C5BE81E1DC9CE9E4A1ECE7A3F3EFA8EBE7A0E9E4A5EFEAB0F2E9ADF1E7A9 D4CA8CE2DB9FFAF7C0F6EFBBF9EEB9FFEDB5FAE5A6D9B370F4DA94FFF9B4FFF1AEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE8283823233321F1F1F777777D9D9D9F7F7F7 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC8788872E2E2E414141A9A9A9F4F4F4 FDFDFDFEFEFEE4E5E48383833C3C3C212121898889F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7 FEECD9FCE0BDF9DEB4FBECD2FFFDF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFAFFFFFEFFFEFDFFFAFA FDF8FDF4F9F9E0F8E3CDEECEC5CFC6DEE0DDFAF6F1FFEDDAF6D49DE8BE5DE8C460F7E8AEFCF8DC FFFFFBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFEF8F0F1EAC7E8E1ACF5F3DDFEFDF9 FAFEFADDF3DCB9E0B8B4CEB4C4CEC4F2F4F2FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCE8E8E87171D44849 CC9494D8DFDFF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE5E6E5CEAAAAD1595BE04C4D F8DCDCFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEF9F9F9E3E3E38888882D2D2D2424242B2B2B2E2E2E2F2F2F2F2F2F2F2F2F 2A2A2A1717170A0A0A0505051919193939396060609F9F9FEFEFEFFFFFFFEFEFEFB0B0B0606060 2828286C6C6CD8D8D8F7F7F7FFFFFFFDFDFDBBBBBB6868681D1D1D4D4D4DC4C4C4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEFEFEFF5F6F6FAEDEDE78C8CE36868F09393FCCDCD FEF7F7F7F7F7EDE1E1E1A9A9DC6C6CDD4A4AED9A9AFCF2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4DA7ADED474 E2D576E6D97AE8DB7CF0E183F4E486EDDC7FE5D577E4D476E2D378E1D27AEADC84E4D67EE5D77F F0E28AF0E28AEFE189F5E78FEEE088E9DB83E9DB83EBDD85EBDD83E9DC81E9DC81E9DB81ECDF84 F7E98FEBDE84EFE287EADD82F0E388ECE086F0E589F4EB8FFCF398FDF49DFAF09AF7ED98FEF49F FDF39DF7ED94F5EB92F8EF93F9F093FEF49BF9EF98F9EF98FBF19AF7ED98FBF19CFAEF9AFAEF9C FFF7A5F9F19FF2E795F0E88EFEF192E9B462CA9244FFE996E4DF84E5E188FAEC97FCEC96EDE48B EAE589EADD84EEE18BF3E995F2E893F8EE99F6EC97F1E792ECE28DE6DC87F8EE99F2E893EAE08B F1E790EEE48BEBE187F1E78EF6EC93F5EB94F6EC95F2E891F8EE98F3E994F2E893F7EC9AF4ED99 F0EC96F1E08CFDE895F3E28DE5DE84E8DF84FFEE96DDB35EDCAF5CFFED93FAF090F1EA8DF4EA92 F5EB93EEE48EE8DE89F0E691F3E894FBF6A3E9DD8BF5EA99F0E594EBE091EDE39CF4E9A4F0E495 F5E78EEFDF81F7E786D4C56ACCBF6ED1C882D8D29EBEB99395916B4646250608000D0E00535435 92926D6D6D4B292702E1DBA6E1DB9BE7DE92EBDF8DF6E99CF0E29BEFE394E0D580E6DC83E5DB87 E5DB8EFEF7B07E7533BEB573ECE39EE7E098F3EDB29C9664645E2DEDE3A4F3EAA4F4EB9FF4E99D EBDF92EDE194F0E79EFBF3ABC4BE774C4A0BEEEDB0E5E3A647420FD5D192EBE7A1F6EFA2F3EA9B F5EB9EF6E9A1F3E5A6EFE2A2F3EAA1FDF5ADECE299ECE299F5EBA2F2E9A0F6ECA4F1E79FE7DD95 EFE59DF3EAA3F1E6B1FFFDD2C2BD87171500DADD96FFFFD08C8C6C171805CDD094FDFFB65C5B27 B3AB9E41392A3F3A27E0DEB2191400BFBD89FFFFC17B7454635E32FDF9B0E9E4A5EBEA9CF2E892 FFE79CCCA059B88944FFE69EECE091EEF19EE0E292F0E49AFFF1ABF3E39CEAEA9EE9E8A1E7DF9F E5DF9AF1EAA6F3ECA7ECE59FF2EBA2F8F2A8F6F0A4EFE99BF6F0A2F7F1A3B0AA5DD1CB7EF1EB9D E7E192E3DE8FE8E293EAE498ECE59DF4EDA9EFE7A8F2E9ADE7E1A4D4D390FEF4AFC39855C3914A E2C578BFB566C7CA7DE8E6A1E2D896ECE19DECE79EE2DF95E8E39FEEE9A6F3EEACE7E2A1E7E2A1 ECE7A6ECE7A5ECE8A1E0DD91E1DE91E8E597DEDD8AC5C47AC2BD8A5F592E928D5AE5E39DEBEAA0 E5E2A68C865C0D0700868151F3F4AAE5EAA7E1E3A5E6E1A3F3E5A8F4DEA2FFF3B6D4B879BBA05E F3DC97FEEDA4F4E599F0E69EEAE2A1CAC487E6E4A5EDE9AAF6EDACFCF0AECDBC7FD9C6908D7F59 130B005D5D53C8C9B1A4986C7A58309D8758A1A075ABAE76CFD29BE9E7BBFDF3D4E6C090C69D5F FDEFADDCD893DFD98FEDE092F3DD8AF9E08CF4D889F9E096EFDB95AA914E9C7E3AE3BF79EAD18A C6B974D7D38FE4E09CF0EAA6E1DB97D6D08DDCD796E8E2A4E8E2A7EAE3ABE5DEA8F7F0BAF9F2BC F1EAB4EFE8B0C8C288A8A266C4BF80DCD795DED995F1ECA6F3EFA8EBE79FF1EDAEF2ECB1EFE6A7 F0E5A4DBD290E0D99DF5F0B8E7E2AEF3E9B6FFF4BEFDF0B5D4B272E6C57FFFF1ABFFF2AFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D06061601A1B1A4141419A9A9AF1F1F1 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDBDBD6C6D6C2C2D2C535353BDBDBD FFFFFFFFFFFFFEFEFEE3E4E37C7D7C3F3F3F303030949494F4F4F4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFEFCFFF7F0FAEED7EBE0ABF2EBBEFDFCE2FFFFF7FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFEF2FEFDE8FEFDF6FFF5F4 FDE9EAF5E4F1E1E4F0C8E3CEBFE4BBE0E7DFF2F2F2FEFCFCFFFAF7FBEACFF0D492E8C463E8C664 F3E2A3FEFDE6FFFFF9FFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFF7EFFFE9D1F9E1BCF5E0B7FCF5E7 FFFFFEFEFFFFF4FBF4DCF0DDBFDEBFB9D8B9EFF7EFFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFDFDFDFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FCD9D9E76868 DB4E4FE1A9AAEEF5F5FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCFCF4EDEDE5B6B6DC5F60 DF4B4CF8DADBFFFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF3F3F3BEBEBE8686867D7D7D7E7E7E7D7D7D7C7C7C7D7D7D 7C7C7C6E6E6E4040401D1D1D0F0F0F474747818181A3A3A3C9C9C9F6F6F6FFFFFFECECEC9C9C9C 575757343434828282E9E9E9FEFEFEFFFFFFFDFDFDB0B0B05757572222225A5A5ACACACAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF4F4F4D7D7D7E5E6E6F8EDEDEA9F9FDF7070E47D7D F0B1B1F8EFEFE4E4E4D1C0C0D88A8ADA6A6ADE6767EFB1B1FEF7F7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D97A E8DF7FEEE183EBDE80E6D97BF0E182F2E283EFDF80EBDB7CEBDB7CEDDE82EFE088E5D77FE3D57D EADC84EDDF87EEE088F3E58DF3E58DF3E58DF1E38BF0E28AEDDF86E8DB7FEADD81EEE185E8DB7F E5D87CECDF83E9DC80E6D97DE8DB7FF0E387F6EA8EF0E589EDE488F1E88DF8EE97F9EF99F8EE99 F8EE99FDF39DFBF198F8EE95FAF194F8EF92F9F096FBF198F8EE98F6EC95F9EF98FDF39FFEF6A1 F7EC9AF6EB99FAF09EFBF09EF5EE94FEF394E9B665C58F42FFEF9EE0DB82EDE990F9ED97F7E792 E9E087E6E186EBDF85E3D780ECE28DF0E691EAE08BECE28DEFE590F3E994E5DB86F5EB96E9DF8A EEE48FF7ED97EAE087E9DF85E7DD84E9DF86F0E68EF7ED96F1E790F6EC96F5EB96FAF09BFCF19F F5EE9BF9F49EF0DF8AFFE996F2E08AEEE88EF0E78BFBE48CE6BD68D7A855FFE68DFCF291EEE789 F3E990F4EA91ECE28BEBE18AF4EA95F1E792F1E792F0E593EDE290EEE391F5EA99E8DF94F1E79C F2E694F2E48CF6E68AF3E287E1CF7B63541D170A04271D0A20180708030000000036360FA2A377 F4F4CDBAB893232200615E36F9F4B9E3DC96EBE193EDE18FF5E89BF0E29BE8DB8CEADF8AEAE086 E2D883DED487FBF1AA918846B0A765FCF3AEE7DF98F3EDADBAB57A585018ECE2A5F0E5A0E3D889 E7DB8AEFE294F5E9A0F7EBA4F7EEA4FFFCB0474502CFCD90FFFFC96C6738918B58FEF9B7F8F0A6 F6EDA0F8EFA2F9EDA5FBEDACF5E7A5F0E79DF9F0A6F3EA9FF4EBA0F7EEA3F4EBA1F6ECA4F6ECA4 F0E69EF3E9A1F6ECA6F4E9B6FBF3CAD4CE98131103B8B876FDFECEB9B8970001009CA168FFFFC9 5F6034A4A0935953472C250D7C7449180A01C7BC8BF3EBACA9A07C4F4B19F9F8B4F3EDB5EDEAA6 F8EFA1FFEAA0D6A864BD8643FFDB93FBEB9BE0E490DFE596FAECA6FDEAA9EDDB97EAEEA1ECEFA5 E6DF9BE7E09CF7F0ADF6EFA9E8E199EBE59BECE69CEAE499EAE498F1EB9DE8E295A6A052F1EB9C EFE99BDFDA88DDD887F0EA9CF3EDA2F3EDA4F3ECA6EEE6A6EEE6A8CFC98BDAD894FFE6A4A37130 CAA158F7E395F0EA9CE4E49ACBCA86C2BC7CE8DD9BE3E095DFDE97EEE8AEEEE7AFF4EEB3E5DFA3 D2CC90DFDA99D9D58FDEDA90E4E190DDDB85E5E48BE7E893D7D78FC9C592454016E1DDACE2E19F EDEDAAF4F2B9544F35373211F3F0BBFCFCB8E4E9A6F0F4B4E9E8AAFFFAC1FCEBB4FFF8C0FFF5BC D4BA7E947D37DAC680FFFEB4EBDB8EF8EAA4F4F0ABE1E2A1E9E7A8FFF6BAFDF0B6A28B4F32220E 362D11AEAC8DF6F5E1F9F6CDF7E8A2D2AC5CF7DC94EDE9A4E0E090E9E99BFDF7B2FAE7AEEBBE74 B68A30F5E489E3E594E4E798ECDE8DFDE491FEDD8BFFE295DDB26BA37F3BB59855FAE7A1FCE99F EADB91EBE6A5D2D190CCCB8AFBF7B6F7F3B1EBE6A4E5E0A0E5DFA3E9E3A8F7F0B9E6DFAAEBE4AF EDE6AFF4EDB6FBF5BCE9E3A7D6D092E3DE9DE8E3A1E9E4A0F6F2ACF4F0A7EEEAA2F6F2B1F6F1B2 F9F0ACFBEFAAF9EFABF4EDADF3EEB3F9F6C0FCF5C2FFF6C2FFF2BBEDCE91CFA85FFEE19AFFEFAC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5F5F5B4B5B44646461717176C6C6CBBBBBB FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEAEAE535453303130686868 CDCDCDFFFFFFFFFFFFFEFEFEE1E1E1717271424242444444A2A2A2F6F6F6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9FAEFE9EABEECECB9F4F4C8FCFCEBFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBF1E4F8E3CDF8E3DB F8DAD9F6CDCEEDC8D6D9C5D5C3BBADC3C19FF5ECE5FFF6F6FFF7F7FFFDFFFEFAF2F8ECCCEBD189 DEB94AE8CC6FF6E8AFFDF9EBFFFFFFFFFFFFFFFFFFFFFDFCFFF7EFFFECD9FFDDBAFFDFC0FFE8D3 FFF8F1FFFEFEFFFFFFFFFFFFF5FCF5C7EBC7B1E3B0E6F9E6F8FFF8FEFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6EDEDEDF6F6F6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2FCCFCF E66263DC4E4FE5ADAEF3F9F9FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF6EEEEE9B8B8 DE6061DF494AF8D1D2FFF8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBD4D4D4D1D1D1D2D2D2D2D2D2D2D2D2 D2D2D2D0D0D0B8B8B86666663131312020207D7D7DCFCFCFE7E7E7F2F2F2FDFDFDFEFEFEE7E7E7 8383834B4B4B404040959595F3F3F3FFFFFFFFFFFFFDFDFDA5A5A54747472A2A2A6A6A6AD2D2D2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF3F3F3D4D4D4E2E2E2F8EFEFF1B4B4E37E7E DD6D6DE49696EEE3E3DDDDDDCCB7B7D76F6FDE6C6CE68E8EF4CDCDFEF9F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E2D67BE3D87CEEE183E8DB7DD9CC6EEFDF80EEDE7FE8D879E3D373E7D777ECDD7FEFE088E6D880 E6D880E9DB83E9DB83EADC84EADC84E9DB83EEE088E9DB83EADC84ECDE85E7DA7EE7DA7EE8DB7F E3D67AE3D67AE9DC80E9DC80E7DA7EE6D97DEBDE82F0E488ECE185ECE387EFE68BF5EB94FAF09A FAF09BF5EB96F8EE98F7ED94F9EF96F9F093F1E88BF7EE93F4EB90F5EB92F7ED94F8EE95F8EE97 FBF29BF2E893EEE48EEFE58FEDE48EEDE78CFDF091F4C170DAA356FFF5A2F0ED94EDEB93ECE08C EDDF89EFE98FEBE68BF3E88FEADE87F1E792F2E893E8DE89EAE08BF2E893ECE28DE9DF8AF3E994 E8DE89EAE08BF8EE97E8DE84ECE288EAE087E8DE85F0E68EF8EE97F1E790F0E690F5EB96FFF6A1 FBF19EEEE793FAF69FF4E28EFEE996F5E48EEBE48AEAE186F6DF87F1C772D2A450FEDE85F8EE8D F4ED90F6EC93F4EA91ECE289E7DD84EDE38CECE28CECE28DEBE18CECE18FEFE492F4E998F1E899 F4EB9BF5EA96F8E991F7E68DEEDC86EEDC8BE0CD87BDAE767C714D3B2E16706842B4B276ECEBB3 FBF9C9E7E4BC8480581D1A00AAA76BF0E8A6EEE59AEBE191F8EB9AEFE094ECDE98E8DB8CECE18C E5DB82E6DC88E3DA8CF3E9A2B0A7659A914FFCF3AEE9E299F3EEA8DDD8994F4711D6CC92FAEEAA DDD17FF8EC95F1E596F7E9A3F1E5A0ECE396FFFFAE7673309B9A5EFEFEC7AAA475423C0EF4EFAF F2EAA0F8EFA2F6EC9FF6EAA1F4E7A2EDE19BEAE194EFE699FAF1A4F7EEA1F3EA9FF5ECA1F0E79B EEE49CF4EAA2F3E9A1F3E9A3F6EDBAF2EAC3DAD7A617140697965CFAFBCBF7F7CF444421414222 F6FACA838467110F020B04000900000500008A7348FFF4C0FEF6B9D2C6956B672FFCFCBEF8F6BD E1D99AE5DA94E9D993E6B977C78A48F1C97FF2E08EDADF8BE1E798FCEDABFDE6A9F6E4A3F0F4A7 EBEEA2EDE6A0E9E29CEEE7A1F0E9A3EFE8A0E9E19AE4DE94E5DF95E8E298ECE69AD4CE84B6B064 FFFAAEF1EB9DDED88AE8E294FAF5A6F4EEA2F5EEA5F6EFA8EEE7A3EEE5A5D7D291E3E09DFCDA9D A66A2FE9CB81EFE596EBE99CB3AE68D5D493F2EDADE0D693DCDC90E6E7A1ECE7AEE9E4ADEBE6AE DED9A0D0CC8FDAD697D4D18DE0DE93EEED9CE9E992E4E48BEAEA9AFCFAB99D9A68444011ECE9B8 F2F0B8FDFBC4CECA98171102B4AF89FFFFD5EDECB1EEF0B0EEF0B0EEEFB3D7D29B746D3DF5EDBC FFF7C496834E2D1A00A8924CDAC17AFFF8ABF2E393F6F3A7FDFFC0FFFFCCE4D1A7B1926E2F1103 62501DDEDBA4FFFFD3EDECB7F7EFB3EED88EC89B47F1D086EDE19BE6E18FF0EB9BF1E6A0FDE5AB DEAB5FA77318F8DF83EFEF9CEDF0A0ECDA8AFFEE9DFFE697DCA75B92611CD2AD6BEFD795FCF5B0 DEDA91FCFDB5F3F5B4E9E9ACE0DFA0FAF6B6F4F0B0EFEAABF1E8AAF6F0B3F5F0B4F2EDB5F3EDB9 F1ECB5F3EDB3FEF8BDFCF6BAF9F3B5F2EDAEF6F1B0F7F2B0F3EEAAFBF7B1FBF7B0F8F3ADF6F2AE F5F0ADF9EFA8F9EEA3F7EBA2F1E8A4F0EAAFF8F5BEFCF8C3FFF4C0FFF2BCF8DB9FC89B4FFDE095 FFF8B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8CFCFCF8282823333332C2C2C9A9A9A D6D6D6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0A0A03D3D3D373737 7B7B7BD4D4D4FFFFFFFFFFFFFDFDFDDCDCDC5B5B5B3B3B3B525352A9AAA9F1F1F1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFCFBFBF3EFEFCBE5E5ADF3F3D9FDFDF9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF9F9F4D6D3EBB3AF EBB0AFEBB0B0EAAEAEE8AEAFE1A3A4DA8984DC8780F2C9C7F9D9D9FADEDEFDF2F2FFFDFCFDFBF3 F1EDCDE0D68BDEC159E4BC54F7EBCCFEFCF8FFFFFFFFFFFFFFF9F2FEEAD2FEDDBAFFDEBBFFEBD7 FFFAF5FFFEFDFFFFFFFFFFFFFFFFFFF4FBF4C9EAC9B0E3AFD3F8D3EBFEEBFCFFFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E4CCCCCC E2E2E2F9F9F9FCFCFCFCFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFFFEFEFFFFFFFFFFFFFFF2F2 FCD0CFE86464D34546C99191D5DCDCF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE2E4E4 C9A8A9CF5859E04445F8C1C1FFECECFFFDFDFFFFFFFFFEFEFEFDFDFEFDFDFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF7F7F7F6F6F6F6F6F6F6F6F6 F6F6F6F7F7F7F4F4F4D5D5D56B6B6B3838383434349C9C9CEEEEEEFCFCFCFCFCFCFFFFFFFEFEFE E1E1E16262623737374A4A4AA2A2A2F4F4F4FFFFFFFFFFFFFCFCFC9C9C9C3A3A3A303030737373 CFCFCFFFFFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF5F5F5F9F9F9FEF7F7FED0D0 F39797E36868DC7D7DE2D3D3EDEAEAF2D4D4E05656E76D6DF6BBBBFEEDEDFFFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBD075DBD074E5D87BEBDE80E9DC7EE3D475EADA7BE9D979E6D676EBDB79F0E083ECDD85 F2E48CEFE189E1D37BE0D27AEBDD85EADC84ECDE86F2E48CE6D880E0D27AEFE186EEE184E8DB7E E5D87AE4D77AEDE083EFE285EEE184EBDE81E8DB7EE8DB7EEBE082E8DD81F1E88CF7EE93FAF099 FBF19BF4EA95FBF19CF8EE98F4EA91F8EF95FBF296F4EB8EFDF497F4EB8FF3EA8EF6ED92F2E98E ECE388F1E78EF6EC94FAF098F8EE98EEE48EE8E286F3E688EDBB6BE1AB5EFFED9AF0ED94E8E78F F2E793F4E591F1E992F3EF94EFE48BE9DF87EEE48CEDE38CECE28CEEE48CE9DF87E4DA84EFE58D F6EC94ECE28CE4DA83EEE48CE7DE84ECE288F4EA91F7ED94F2E891ECE28BF2E891F3E994F4EA95 F8EE99F6EB99EEE793FBF7A0F7E591EED886FFEF99F2EB91E9E185FBE38BF9D37ED1A34FFDE288 F4EA89EFE88AEFE68BF4EA90F1E88EE9DF86EBE18AEDE38CEEE48EEFE590EEE490ECE18DE7DE8B EFE897EDE694F3E894FAEB94F9E68FF2DD87EBD584ECD78CF4E8A6FAF0B6ECDDABFAF1BAF5F2AD F5F2B4EBE6B2F2ECC04D471D251F0DDBD694E7E094ECE393EEE290ECDC8EF5E69CF4E69FF7EA9B E3D883CDC36AE7DC88F5EB9EE9DF98B6AE6C736A27FBF2ADECE59CDBD78CF2EDA95D54289A8D58 F1E6A2F1E590F8EB93F1E495EDDE9BF2E4A1F8EE9FF7F09BC0BD7C5D5B24F6F2BCE8E2AD2E2710 A9A363F1E8A2E5DC8EF0E698F9EDA1F2E69EEEE299E6DE8EE3DA8CF4EB9DEFE698EAE195F3EA9F EDE499EBE199F6ECA4F4EAA2F3E9A3F1E8B4FEFBD4948E6B0D0800615E2AF4F2C1FAFACC898961 05050092917166654C0300001C120045341543290AE1C38AF8E6A8F6E2A1F3E4A4C5C081ECEAAB E3DE9EE9E09FCDC281DDD38EF4C887B57331E9C075F3DD89E7ED97E4ED9FF3E4A4FDE1A7FFECAE E9F0A2CDD385DDD88EF2EBA3EFE9A0E7E098ECE59DECE59DE4DD95DED78EE2DB93EBE49BCDC67E CAC37BF7F1A6ECE69AEDE79AEAE496F9F3A5EEE89AECE69BF0EAA0EDE69FF5EEAAEBE5A2F3EDA7 AD8044B4743AEFD68BDEDC8CF4F6A9DCD290E4E2A1EEECACE0D693E9EA9EDEDF96F4F0B3F5F0B5 F1EDB1E2DDA2D1CD90CDC98BD5D291ECE9A5E5E399F2F1A3F2F1A2E2E09CF5F3B84C4B1C9A9867 EFECBBE9E6B8FFFDD47A7654403C21F8F6CAF5F1C4F8F7C7EEEBB0E6E6A9EFEFB76D6D41272813 EDEEC0EFE9BC3C312061501CE1CF929E813FF4E59EFFFCB2F7F5AEF2F8B9A4A277402B1F320E00 8B6643FFFCC5FCFAB5E8EA9FF4EEA3FEF5B1EED08EC69148F2CB8BF2E1A7EEE5A1FEF6B2F4E4AB FFEDC0EAB676A97122F3D584F2E49CF8ECA6FFF1A5F6D486C69547B7863CEED18BFFEFADFBEEB0 F3EEACEFF1ACEAEDA9E3E5A8E7E8ACE7E5A8F5F1B3EBE5A6E4DD9EF3EBACE6DFA3ECE6ACF1EEB6 E8E6B1D1CE94F4EFB0FEFABBEAE5A6ECE6A6F3EEADFAF5B3FDF8B6F5F0ADF8F3B0FBF6B1F9F4B1 F4F1ABF3EDA5F1E99DEFE295EDE295EEE69EEEEAABF7F5BCFCF9C5FFF4BFFFF6C2FFF0B4CB984A F7D388FFF9B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5B7B7B76363632828283C3C3C C1C1C1EDEDEDFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9595952A2A2A 3233327E7F7ED6D6D6FFFFFFFFFFFFFDFDFDDFDFDF6A6B6A3839383435346C6D6CB3B4B3E6E6E6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7E7EEEECCECECC5F2F2D7FBFBF2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF1F1F4D6D5F3C8C7 F3C2C2F3CCCCF4D1D1F1D1CEDDCABBCBBEA4D1B49DD1A89AB29C99AA9898B2A3A2DFD9D9FCFBFC FFFFFEF9FAEEEDEAC3E3CA79DEB44AE8CF8DF3E7C8FDFAF3FFFFFAFBF8E0F3E7BCF1DFB1FDEBD5 FFF6EDFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFAFDF9E3F4E2CBEDCBC1EDC1DBF5DAF9FDF9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9 CECECEC6C6C6C7C7C7CACACADBDBDBF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDFAEBEAF5D9D8FAEBEBFFFFFFFFFFFF FFF2EBFCD0C0E7635BD84B4BD9A2A2E6EDEDFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD EEF4F4DCC0C1D86364E04243F8BDBDFFEAEAFFFDFDFFFFFFFCF2F2F6DEDDF7E1E0FEFBFBFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDDCDCDC6D6D6D3B3B3B383838A3A3A3F6F6F6FFFFFFFFFFFFFFFFFF FEFEFEDEDEDE4D4D4D2E2E2E565656AEAEAEF5F5F5FFFFFFFFFFFFFDFDFDABABAB505050292929 464646898989CDCDCDF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF7F7F7E0E0E0EBEBEBFCF7F7 FFE4E4F6A0A0E55353E06060EDCACAF7DBDBF9BDBDE24949E97272FAD2D2FFFCFCFFFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE8DD81EADF83E9DC80E9DC7EEADD7FE5D677EEDE7FEBDB7BE4D474E7D775EDDE7F EBDC85E6D880F2E48CF1E38BE8DA82EDDF87F4E68EEFE189ECDE86EEE088F3E58DF0E388EDE082 F1E486F0E385E9DC7EEDE082E9DC7EE6D97BE5D87AE8DB7DEADD7FE9DE7FECE185F2E98DEDE489 ECE28BF6EC96F5EB96FFF5A0FAF09AF3E990F6EC92FCF396FAF194F8EF92F3EA8DF4EB8EF9F093 F5EC91EFE68BEEE58AF1E78EF4EA91F5EB93F5EB92EFEA8EF8EB8DE5B465E6B367FFEB98EFEC95 E8E78FFAF09BFCEF9CF1EA93F9F59CF1E68DE5DB82E4DA81E3D980EAE088ECE289DBD178E9DF86 F2E88FEAE087E7DD84E2D87FF0E68DF3EA8EE8DF85E8DE85F1E78EF2E890EAE089EEE48CF7ED98 F6EC97F4EA95FAEF9CF8F19DF5F19BF1DF8BD3BD6AF4E38DEFE88EF1E88CFFE991F9DB86CE9F4B FDE68DF1E786EDE687ECE388F3EA8FF7ED94EDE38AEDE38CEDE38CEDE38CF1E792F3E994EFE48F E7DE8AE1DA89E1DA8AEDE290F7E794FAE792FFE994EAD47FEBD580F5E08EEFDF8EEFE292EADF8E ECE693EEE69FFBF2B9A9A06D0D0500878045F2EAA4EFE796E8DF8AEFE391E0CE82F8E79FF4E6A0 F7EA9BE8DD88DCD279E1D783EEE496E7DD96C8BF7D655C1AFDF4AFEEE79DDFD98BF5F0AA8D834F 706330FCEEACF1E68FE8DB7FFAEB9BF1E3A1E9DB99F2E997F0EA91ECE9A8484516D6D3A0FFFFCF 7E7742332D07F1E8A1E2D98BE5DD8CF1E697F6EA9FF4E89DF0E897E7DE8FEFE697EAE192E6DD90 F0E79BF0E79CEDE39BF1E79FF1E79FF3E9A4FDFAC9F0EBC52F2912100A00161108DAD8A5E8E6AE D4D2A21F1C0A0E0A02030200383618E5D9A9EFD8A4B29258C6A254FFE69CF5D891F6E893F3EDA5 F0EFAFE2DD93F2E7A1E8DE9CDCD692FACE8FCB8544D8964BFFFCA6DEE48CE0EB9DFCECB0FDE2AC F0D99CDAE293D0D988DBD68ADAD48AD9D389DCD68CD8D189E4DD95E4DD95DBD48EE0D993EEE7A1 C7C079E4DD96EEE79EDBD48BEDE79BE5DF92F7F1A3F1EB9DEAE497EEE89CEDE79EF5EDA6EBE7A0 F6F0A9A47037B16C33BAA85ADEE493F0F3A6E5DA99E5E3A3FCFCBAE3D996E0E195D9DD8EE4E298 EFECA7F0EDAAE9E5A5DEDA9BEAE5AAEDE8AEF6F1B6F3EFB2EDE9AAF4F0B1FDFDCBD8D6A3222200 DDDCA1E8E6B5FFFAD7BDB899171300989667FEFED2F7F6CFE9E5C0F2EBB4F0ECB1FAFAC5484C1B 687149F9FCDCC9CFA4161500BCAF7DFFF9C3E6C68BA17E43D8BD858681482227032423009A7E59 DAB188E2BA85FCEBA4FEFAABF1F29EDDD180F5E39CF2CF90CE9653FFD79CFEECB7EAE1A3FDF7BA F6E9B6FFF5CFFFD299B77F38EED388FFEDACFFF7BAF0CE8BC49D52C69E51F6D88CFEEFA6F2E5A2 E7E5A5C0C182D6D899FBFBBCF4F3BAF5F3BAEBE6ACEDE6AAF1E8ABF4EDAEEDE4A7D6CF95DAD59C F5F1BAE7E6B0CBC88DE5E09FF5F0AEE5E09EEAE5A3EFEAA8F4EFADFBF6B4F1ECAAF1ECAAF6F1AF F3EEACF2EDA6F2ECA0F0E798EEE290F3E796FCF2A8F5F1B0F9F7BDFBF9C3FBF1BCFDF3BFFFF1B5 E8B05FF2C77BFFF3B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5B3B3B36566653D3D3D 5F5F5FE1E1E1FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D9D9D 3A3A3A4748478E8F8EDBDBDBFFFFFFFFFFFFFEFEFEE7E7E78E8F8E525352313231474847888888 D3D3D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFBF3EAEAC0E7E8B9F2F3D9 FCFDF5FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF8E4E4EBB3B3 F3C2C2FDE0E0FEF4F4FFFAFBFAF7F4D2E5CEB0D6ABC2DAB5BEC5AE6C6D675353525F5F5EB0B0B0 E6E6E6F1F1F1F2F2F3EEEBE3DFCD9DD4B15BD9B351DFC989E5E3CEE9ECDCE5E5C1DBDAA7DBDAAB EDECE2F1F1F0F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1EEF0EEDBE8DAA5D2A2BFDCBCE9EEE9 F3F2F3F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2F2F2 E4E4E4CECECEA8A8A88E8E8E8C8B8BAEA7A7EFE0E0FDF5F5FFFFFFFFFFFFFFFFFFFFFEFEFEF9F9 FCF2F2FBEDEDFCEFEFFEFCFCFFFFFFFFFFFFFFFFFFFEFAFAFAEBEAF1C4C3EAA5A4F2CBCAFDF6F6 FEFDFDFEEFE2F9CAB1E56457DE5656EBB5B6F8FFFFFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFAFFFFF0D5D5E27272DF4748F6B7B8FDE6E6FEFBFBFEFBFBF6D9D9ECAFAEEFB8B8FCF2F2 FFFEFEFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDE1E1E1808080535353525252AFAFAFF7F7F7FFFFFFFFFFFF FFFFFFFEFEFEE0E0E0595959454545757575C0C0C0F7F7F7FFFFFFFFFFFFFDFDFDC3C3C37C7C7C 3D3D3D3636365C5C5CA5A5A5F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1F1F1CDCDCDDDDDDD F9F6F6FEF1F1F2A6A6E44646E54D4DF7BCBCFABCBCF59797E14949E98181FAE2E2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0E58BEDE288E8DB7FE5D97BE7DA7CE8D87AEDDD7DE7D777DFCF6DE5D573 F0E182EDDE86E4D67EEADC84E7D980E6D87FEADC84EEE088EBDD85E2D47CEFE189F5E78EEADC82 E9DC7EEFE284EEE283E8DB7DECDF82E8DB7EE1D577E0D375E9DC7EECDF82E4D87AE4D87CEDE488 E9E085E9DE87F4EA94F3E994F6EC97FAF09AF4EA91F2E88EF6ED90F7EE90F4EB8CF4EB8DF8EF90 FBF293FAF194F6ED90F2E88CF2E98EF2E98EF1E88DF3EA90F1EB8FFFF296DBAA5AE3B568FFE795 E6E58DE6E58FEDE18FF3E491EDE68FEEEA91F5E991EEE48AECE388E9E085EEE58AF2E98EE9E085 E3DA7FEFE68BE4DB7FECE288E6DD82EFE68BFBF297EEE48AE6DC83EAE087EFE58DEFE58EE7DC85 F4EA94F4EA95F3E893F4E896F0E895EEE992FBEB98EBD582EEDE87DFD87DF7ED91FDE48CF9DD89 C59642FDE289EEE383F4ED8FEEE68BF0E78DF4EB91EBE189EFE58DF5EB94F1E790EFE58EF1E793 F1E792EDE390E3DC8BE2DB8BEAE091F0E28FF3E08BFEEA93F7DF83D8C062F1DD7AF4E47FEBDE75 E9E07AEEE58BE9DF93FEFEC08277472E2400DCD395EFE79CF0E895E5DC84EADE8BF0DE92ECDB94 F4E69FF2E597E7DC87EEE48CEDE28EE3D98CF1E79FDFD6945C5311F0E7A2F8F1A7F2EC9CF3EFA8 C0B883473A0BFCEFACF9EE95F5E98CF2E594F1E2A2EEE1A0EBE290EAE48BFAF8B66C6839868152 FFFCCBE8E1AC1E1700B9B169F7EEA1E9E190EBE090F9EFA2E6DB8EE9E190E8E08FECE493EEE496 F0E69AF3E99EF6ECA2F1E79EE8DF97EDE49DF6ECAAE3DCA55753371C1606989172140E0085804F FFFFC6BFBC89140D013F362A78735CD9D5A8FCF7BAFFE9A8CDA864885F07FFE48FFFE699EBDD7B F5EF9EF4F2AEEDE998EAE094F3E9A4E5E2A0FAD494EAA462C57F35FBEA95E5EB93E4F0A2FDEFB3 FFECB7F2DC9ED9E494D5DF8CE0DB8CD9D387D5CF83DED88CE0DA90DDD78EDCD58DDBD48FE8E19D F1EAA6BAB36FD6CF8BEAE39DD8D189EDE79CEFE99DFBF5A7F4EE9EEAE595F3EDA1F4EEA1F1EBA1 DED990F0E8A2D7A066924C134D3E0C8C9642B7BD71EEE1A2DCDA9AE3E1A1EEE4A0E3E597C3C775 D1D380E0E293E7E79CECEAA5ECEAA9F2F0B4E4E0A9E9E7B3F9F6C3FFFECCE3DFAFE8E4BA777546 494924F3F3B4EEECBBFDF9DE48422E1A160CCDCB9BFDFBC9928F6949432D998F5CE6DFA6E2E1AC 2A32099CA97FEAFBD56A754F575932FFF5C7FDF4C2FFF2BCDCBE8D58371B4338187F8355DFDEAB FFFDC5D9AE6CC2994DFFF59BE6E387EDEB96F5E69DFFEEA7F7D78CCA9544F5D48DFFF0AFE9E398 E7E39BE8DFA1FEF0BEFFE09DB78432E7D582FFE7ABEDC28DBB8F4ED1AA62FBDF92FCEB9BF9F5AA EFF3AEDFE4A7E9E9B1E3DFA8E5DFA8E8E7AEF6F6BFF9F3B9EDE6AAEDE3A6F0E6A9EFE5AAD7D096 C5BF86E4E0A9E3E2ABE8E6ABF0EBA8E5E09CDBD692E8E39FEDE8A6EEE9A8F8F3B2EFE9AAEEE8A9 F5F0B0F1ECACEFEBA4F0EB9DF0E897ECE08DEDE28FF5EC9FF6F2AEF4F3B6F4F2BCF5EEB8FAF2BC FFF0B5FDC677ECBC6FFFF1B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBE5E5E5CBCBCB BFBFBFCACACAF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DFDFDFBEBEBEC2C2C2DADADAF3F3F3FFFFFFFFFFFFFFFFFFF7F7F7DADADAC6C6C6BABABABFC0BF D5D5D5EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFDF9F9EEECEEC8 E0E4A3E7EAB6FDFDF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFDF8E3E3 EBB0B0F3CCCCFEF4F4FFFEFEFFF9F9FDEBE8CECDC4A6AC9DBC9588B6766D4A3D3B232322202120 595A578B8C89A6A6A4B0B0B1ADACACA9A393AF9C70D4A539B69B3F858C5C78836F87887A999988 A7A798ACACAAAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEADADAC9CA3976584567D9173 A6A9A4AFAFB0AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE AEAEAEABABABA2A2A28181815C5D5D4B4848725151D48686F4CACAFFFFFFFFFFFFFFFFFFFFFEFE F7E4E4EEBCBBE99F9EECA7A8FCF2F2FFFFFFFFFFFFFFFFFFF8E1E1EBA2A2E06565DD5252E68C8C F2CFCFFCF4F4F8E2DCEEB5ABE26F6AD66767CFA4A5DBE0E0F9F9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCE5E9E9CFBABAD37878DF5E5EEBA3A2F6D5D5FDF4F4F5DDDEE99F9FE06262E87878 FCD8D8FFF5F5FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5F5D4D4D4C6C6C6C6C6C6E5E5E5FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFF5F5F5C7C7C7C1C1C1D1D1D1EBEBEBFDFDFDFFFFFFFFFFFFFEFEFEECECEC D4D4D4BEBEBEBBBBBBC6C6C6DFDFDFFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBEFEFEF F6F6F6FDFCFCF0EFEFE2B0B0DC5F5FDE5858E59B9BE58787E36969DC6969E8A5A5FAECECFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEBDE83EADB80EEDF84F3E589F1E387E6D77BEBDC7EE9DA7CE6D779 ECDD7FF5E68AF0E089D5C66EE3D47CDDCE72D8CA6EEEDF82EADB7EECDD80E9DA7EEDDF83F3E58B F5E68BE7D97CE9DB7FEADB80E7D87CF0E186F0E188E4D57DE8D982E8D981E7D881E7D881E2D374 F3E586F7E98EF3E68DF6EB96F5EA97F1E995F5EC96F4EB91F3E98CF6EC8CF9EF8FFBF297FAF399 FEF79EFEF9A3FBF39CF4EC95F6ED98F7EF9AF9F19CF9F09BF5ED9AF3E890FFF79EBE9240DEB764 FBE58FE2E185EBE28AFAEA95F8E995E8E48EDEDB86F3E292F0E38DEDE38AF2E88FF6EC95F3E990 F2E990F1E78FEDE38AEFE68CEBE189F0E68DE8DE87F6EB94F5E891EDE28AEDDF8BF3E692F6EB96 ECDE8AF9EB97F0E590F2E592F3E592E9DB8AF5E495FBEE9DF6EA95E5DE85E3DE82FBEC91FEE48D FADC89C39846EECD79F9ED95F1E892EAE48EF3EC99FCF7A4F3EA97F0E796F6EC9BFDF4A3F8EEA0 EEE294EFE395F1E596F1E492EBDF8BECE18FEBE08EF3E690F3E18AF4E081EED778E5CF70F5E285 FCEE93F5EB91EDE790F2EB9FF2EBAD2E230C7E7445FFF9BDE3DB90E5DD88E6DE84E4D883F3E395 F1E29AF7E9A2F8EAA0E9DD8EF8ED9CFAF09FE9DF91EFE69CE9E19A5A510CE3DA95F9F0ABEDE39E F9EFAEE3D99F302601D3CA88F5EFA1E8E18FEEE597F2E8A0F5EBA0F3EA98EEE790FDF9B1BFB88C 382E0BEEEAACEDE7A87C723A635936F5ECA5F1EA99F8F0A3F5ECA3E8E193E8E38CE9E28BEFE492 F3E49CF8E7A9F9E8ACEBDE9AFDFBB1E1DD96F9F8C2EDEBC8545037040000564F2EFFFFE15A5337 151000868355302C14595337F4F1CAE7E2B1F8F3B7E3DB9EFDE9ADF5C886925E11DFB760FFF19B F1EB8EF6F1A3F8F1AFEAE094E7E192E3E091F4F2A8FAECA1ECC178CD843FF3CB7AF9FA9FDBEC92 FBE9A1FFEAA9F8E7A2CFD98AD3DB8BE7E295EFE99CEBE599F6F0A4EDE79CE5DF93E7E097ECE59D E8E199F5EEA5ABA55DBCB570F4EDA7D5CE87E1DA92F6F0A6F9F3A7ECE69AE6E092F4EEA0F6F0A2 E8E395E1D58AF9DB97A97732D1A159EEE39CDBDA8EA9AC5D9C934CEEE9AAF3ECACFAF3A5FBF8AD E2E29AE5E5A1EFEEA7E8E49DE5E299F2ECA6F6F1AEFCF6BCECE8B7FFFED7AEAD8C403D25333026 2322043F3E24C7C698FCFCD4C4C2A70C09064B4836FAF8E08A8A6F09090000000036310AFFFFD4 8181533F4418E2EAB8E0E8B3161C00ABAD78F6F0BBF8EAB7FCEEBCF5E5B7583512AB8966EDCCA2 FEDBA8FFD598A26D26CAA251FFEC99F8EEA2E4DB9EE6D4A7F8EAB2FFE79DD8A850F3CC7AFFEEA3 F9F7AFD9DB91D7D693FBF5BEFFEBB3C18A49F5BA71D4A260B28849D9B571F8DC95DDCB83F6EFA9 ECECAAEFF3B5F8FAC2FCFBC5EDEAB5E9E3AFEEE9B1F8F3BAFAF4B8F3EDB1F0E7ACF1E8ACFFFBBE EEE8ABD0CA8FCBC78BCBC88CD6D293F5F0AED6D18EC8C380F7F2B1EFEAA9F7F2B4F6F1B2F2ECAF F4EEB2F2ECB1EDE7ABF9F4B3F6F3ACF2ECA4EDE59BEDE49AECE79FEEEBA7F7F4B5F7F3B8F0EBB2 F4EEB5FDF0B6F9CE89E7BB75FDEFADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD FBFBFBFAFAFAFAFAFAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFCFAFAFAFAFAFAFCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFEFEFEFCFCFCFAFAFAF9F9F9 FAFAFAFBFBFBFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F6E1E5E8B3E4E7AEF2F3D7FAFAEAFFFFF7FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF5F5 F8DBDAEBB0B0F3D1D0FEFBFBFFFFFFF5EBF1E0C4D2C3959EB5706FC5625FBE5A596A55553B3A3A 28292C4E4F637D7D969F9FAEB4B3B4B7B6ADB2B1B0AEAB9FB3AB4D80942A497D2A60815B939791 ACABAAB7B7B6B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B8B6B6B6A5ADA16E8F61 869C7DAFB3AEB9B8B9B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7 B7B7B7B7B7B7A8A8A8949494818181747575726F6F916D6DD47979EBA3A3F5D2D2FDF4F4FDF6F6 F8E2E2EDAEADE27979DE6767E27878F0BCBCF9E4E4FEFAFAFBF3F2F0B8B8E0696AD73838D8393A DE5D5DE89494FAE7E7F4D0CFE69694DF6766D97373D5AEAEDEE3E3FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDE9ECECD5C2C2D78585DE6767E69A99F3CFCEFBEDEDEDACACE16F6FDE5858 E97F7FFCD1D1FFF1F1FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBFBFBFAFAFAFAFAFAFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFAFAFAFAFBFBFBFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDFBFBFBF9F9F9F9F9F9FAFAFAFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 E9E9E9E6E6E6E7E7E7E7EBEBE7C7C7E68989E26363DC6161DB5555DD5A5AE39898EFCDCDFCF5F5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEADB80EADB80EFE085F3E489EFE085EADB80EBDC81EADB80 E9DA7FEADB80EDDE84EDDD86DFCF77E9DA7FEEDF81E4D576EDDF7EEDDF7EEFE180EEE080E7D879 EADB7EF5E689E8D97CECDD82ECDD82E9DA7FF6E68FF7E790F0E08BF5E590EEDE8BF0DF8DEEDE89 EBD879F6E583F8E98BFAEA93FBF09AF8ED9BECE490F2E993F4EB90F4EA8AF4E985F3E987FDF49D F9F19CFBF39EFBF3A0F2EA97ECE493F7EF9EF3EB9AF3EA9BF6ED9EF6ED9EFAEE9AFFF8A3A47C29 CFB05AF2E388EDEA8BF1E289FEE892F7E894EBEA94E7E592F9E599F3E392ECE28BF3E992F8EE97 F3E992F4EA93EEE48DE7DD86F2E891ECE28BF4EA93E8DF87EFE08DEDDE8BEFE08DF6E793F9EA97 F8E996FDEF9CFCED9AEBDC89F2E390FBEC99F5E493FFEBA0F9EA99F1EC95E4E588E6E185F7E58A FFE68EFDE391CBA151E5C372FFF7A6FEEF9FF3EE9DF1EC9BF2EC9DECE597F1E89BF1E89CF2E89D FCEFA5FFF4AAFAEEA4F6E99DFDEB97F5E48DEBE08BE1D986EFE993F2E88EFDE98DF3DB7EF4DC84 FFEB98F2E195EDE195E7E393FBF6B2A39D67150D00C7BD8DFCF4B8E4DC90E7DF8AE6DB82E9DD87 F3E295F0E197F1E39CF3E59CE9DD92F1E59AEEE393E9DF92E6DD90EFE79F665D18C4BB78F8EFAE F8EBADEEE0A4FFFABC54490B928B49F2EEA8EAE69FF0EBA0E8E393E6DD8EF1E895F7EE9BFFF9AE FDF5C83B310E999451DBD58DD7CE94463A0FE8E7A9F6EEA2E2DB8EEDE59DF7F0A5E9E492F2EA97 FCF0A3FAEAA4F7E3A4F9E6A8FAECA9F4EEA9FAF8C0E9EAC777786B070200201602DDD6A3F6EEC5 D6D0AC302B190601001A1607B7B17EFFFEC6EEE8A2D3CF84FAF5B9FFF3BAFFDE9FBA8036AC812D FCF59DE2DE8BE6DF97FAEBA8ECDE98E7E796DDE18CEBE799EBEF9BFFEEA1CB8644CE9A4FFDF9A1 D9E686F7E895F5DD92EFE397D2DA8CDDE497F0EB9FEDE79CF1EB9FECE69AF0EA9EF1EB9FF0EA9E FDF7ABF4EDA1FFFEB2D3CC81CEC77FFBF4AED8D18AEDE69EE8E298EDE79DEFE99DE9E397F0EA9C E9E493DEDA89EFDE91F7D290B08133E0C16FFDEFAEE1DA91B9B866CBC87BF1EAAAEFE5A5F1EB97 EDE79CEBE6A8F4EFB6FBF5B9EEE9A7E7E099EDE59CEEE6A0E7E0A3FBFAC87B78521210010A0902 141301060500030100202001EDEDC98686670706003D3E2EFAFAF197968A0000001113020C0C02 7C7D5B23250D737447FFFFDC8E8F5668672EECEAB2FEFBC6ECE5B7F9F1CA4B3F1860472FDAAF7D A16434F2A976FFBF84B57D37D3B260EDDE8DEEE69DECE2A9F1E0B5FEEEBCFDE39CDDB15AF9DB83 FFF2A2EFEEA9EEEFAAEBE5A1FDF5BDFFEDBFBA804DCE722EBE873EE9CB83FFFAB2F6E39FDFD393 EDE8AAF7F7BBF1F1B9F6F6C0F6F3C0FBF9C7F8F2BFF9F2BAFBF5BAFAF4B8F6F0B4F6F0B4FAF4B8 F9F3B5FFFABCF6F0B2EBE5A7EBE5A6E8E3A3F6F1AFE9E4A2DAD594FCF7B7F3EDAFF3EDB0EEE8AC F9F3B9FDF6BEF7F0B9E8E1A9F7F3B7F7F3B4F1EDAEECE8A8EEEAABEEEAAAF2EEAFF4F0B2E9E5A8 E0DBA1E8E3AAF7EBB1F9D89BE1BB79FBEFA9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDF8F7F7E6EDEECAE7E7B5F2F2C8FEFDE4FFFDF7FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFA FEE9E9F8CECDEBAEAEF3D1D0FDFBFCFEFFFFDDD6ECB296C3AA587FC13B49D04E51CF706FA89493 7B78775A585E7776A49FA0DABFC0E6D7D8DFE0E1D2D1D6D6B5C6C785B86E54A73B3C9E3287BB85 D7DDD7E9E7E9EAEAEBEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE7E9E7D5E1D3 9EC999B6D4B3E1E6E1EBEAECEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA EAEAEAEAEAEAEAEAEAC7C7C7A0A0A09D9D9DB1B2B2C9C6C6DCC1C1E29898E38484E58A8AF5DBDB F5DEDEEDB3B3E27070DB4546DB4F4FDD6363E17373EEB6B6FAEDEDF2D1D0E68C8BDB4747D83536 DA4C4CDA4343E05959F8D7D8F1BEBEE07778D85959DC7C7CE7C4C4F3F8F8FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEF7FBFBECD9D9E29191DD6666E49494F1C9C9F8E0E0E67878DC4F50 E17777EEADADFDD8D8FFF1F1FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE F3F3F3D1D1D1C7C7C7CBCBCBE6E9E9F7E4E4F8B7B7EE7474DF3636DC3F3FE16A6AF2C8C8FAF0F0 FEFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDF84EDDE83ECDD82EDDE83EBDC81E9DA7FE7D87D EADB80EFE085F1E287EFDF85EBDB85ECDC84E5D67BF4E587F3E484EBDD7CE8DA77F2E483F2E484 E7D879E3D477EBDC7FE6D77AECDD82E5D67CE3D47AF6E78CF0E187F1E189F1E188E8D882F4E48E EDDE86EFDC7DF1E07EF2E284F9E992FBEF99F7EC97EDE690F4EB94F9F095F6EC8CF3E884F0E684 F5ED93F1EA91F3EC93F7EF99F5ED97F2EA96F5ED99EFE894EEE695F1E998F3EB99F8EA96FFF29D BC9542EBD079F2E587EDEB8AF2E389F8E28CF2E38FEEEC96ECEA98F9E59AF4E492EEE48DF0E68F F2E891F1E790F3E992ECE28BEAE089F4EA93F3E992F4EA93EFE58EEEDF89E9DB85F0E18BF9EA94 F5E691EFE08AFDEE99F7E893EADB85F2E38EF9EB95F3E291FCE79BF3E492EFEA93ECEB8FE9E287 EEDC81FBDB83FFDD8BC9A150D3AF5EFFF0A0F5E595F1EA9AF3EC9CEEE799F1EA9CF8EFA2FDF4A7 F0E699F3E79BE8DC90D7CB80F5E59AF2E28AEFE188EBE28EE0DA89EDE695F1E591F8E38DECD47B F0D77FFCE793F1DF8EF2E699F0EBA3F5EFB1362F074C4429FAF3BDEAE2A1ECE596F1E991EADF87 F3E795F7E79BEDDD95EEE097F3E59CF3E79BF3E79BEEE394EEE496E5DC90F7EFA77A712B918845 FEF6B5FCEFB1DFD194F5EBAD83793B58511CEBE6A1ECE8A1ECE79CE6E192E7DE8FF3EA97FDF4A3 EEE7A3FFFFC7948D594A4012D9D091FFF9BA6C63378D844DF9F2ADEAE393EBE39AF8EFACFDF2B1 EFE2A5F4E6A5F8EB9EEEE589F7EF92EAE395E4DBAAEAE3C4716E58000000191305BFB875F8EFB4 E9E3ACF5F0BED1CC9D9A9663B3AF78F4F0B3ECE6A2F2EBA1E6E094D0CB8AE3D092FFE39EF1C375 8F640FECD983FAEFA0EEE29BF6ECA7F4ECA5EDEC9EE6E694EAE499DDDD8FFAEDA1D9A15DBB863F FCE190E1E489F5ED98F7E699F4E89EE7EB9FDDE094EEE99FF3EDA3EEE89EEBE59BF0EAA0EEE89E EAE49AF7F1A7F2ECA2FCF7AEF7F1A7A49D55F1E9A1EAE39BE8E198EAE499F7F1A5E3DD91EAE497 F5EFA1EAE594E0DC8BF8E79AF4C785B28234EBCC7AF4E2A1D9D189D2D17FEEEC9EE9E2A2F2E8A7 F7F19DEBE59AF1EDACF6F3B5FBF5B6F2ECAAECE5A1EBE29FE8E0A0FAF4B7B9B382201C049F9D7B D8D8BBA6A38489865F5B5733A4A379F7F6CB6160430402000B0A03595749BAB8A23C3D2829291E 464532100F0A3A3820EEEECDBAB991131100A4A172F4F0C4F3EEC6FFF9D6B2A9880300009D9C53 FFFBB4E4B173C47D46D08C52B0813CD8C773EFF297DBE387DDDB87E9DB8FFFF2B2F4D090C2953E EBCC72F3E895EBEDA4E3D590F7E2A2FFF9C4E8C4948E581EC0772AFBD890FFEDA7F4E19CECDB9A F2E9AAE4E1A4E4E4A9E9EAB1FDFDC7F9F6C1EAE5B0D0C993F9F3B8F0EAAEECE6AAEEE8ACF2ECB0 F4EEB2F0EAACF6F0B2F6F0B2F9F3B5F8F2B4F6F1B1F6F2B0DBD697E2DD9CFDFBBEFFFFC2FBF5B8 FAF6BAFAF4BBEBE5ABF2ECB2EEE7B0F8F2B9FAF6BAF6F2B6F3EEB3F9F5BAF9F5BAFCF7BEF1ECB4 E1DCA5E0DAA5F0EBB5FEF8C1FADA99D1AB65F9DF97FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8EBECEDC5ECECB9F1EEBFFBEEE3FFF5F6FFFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFF8F8FEE4E3F8C7C6EBADADF4D2D0FAF8FCE3E4FFB4B0F18170D67035AA8B2D87BB718DDFB9A7 DCD4D1C0B2B1A68C91BAADCFCCCFFBCFDBFBD4DEF5D1D8E9A6CCBB77BF8959B66261BD6481CD82 C8EBC8FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF7 E1FCE1B3E6B3CEEFCEFAFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE9E9E9CCCCCCCECECEE4E4E4F9F7F7FEE8E8E9A7A7DF6969D85051 DBB9B9DEB0B1DE7474DD5353DD5959DF6A6ADE6767D94141E28F8FECDCDCE6ACABDE6C6CDA4546 E05A5AE78080DF4E4FDD3D3EF8C7C8F0B0B0DC6D6DC46161C18989D4C1C1EAEDEDFBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF0F3F3E0CDCDDC8989DC5E5EE07B7BEAA8A8F0BCBCE05354 D94747DF9797EDD7D7FCE9E9FFF7F7FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF6F6F6DDDDDDD5D5D5D9D9D9F0F2F2FFF7F7FFE2E2F9B2B2ED7D7DEC8989EFADADFCEBEB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDDE83EDDE83EADB80E8D97EE9DA7FE6D77C E3D479E7D87DEFE085F1E287F0E086F4E48DEEDE86E7D87CEADB7CE7D978E7D977E1D370EEE07F F6E787ECDD7EE6D77AEADB7FE9DA7FF0E186E4D578E0D174F2E387ECDE81EDDE82EADB7EE1D176 F6E78BF5E689EFDD7BF1E07EF3E386F5E68CF5EA93F9EF99F6EF98FBF299FBF296F8EE8FF7EC88 F5EB89FEF59AF8F095F5EC92F3EA90F1E88FF0E68EF3EA93F0E690F0E692F1E793F0E792F7EA94 FFEA93B28B39EDD47DEFE284DFDC7BECDE82FDE791F4E58FE7E58FE2E08DF4DF94F2E290EEE28C EDE18BEDE18BEFE38DF0E48EEFE48DE8DC86E5D983E6DA84E7DC85F1E58FF5E78FF0E28AF4E68D F2E38CEDDF87F0E289F6E890F4E68EEEE087F6E78FFAEC95F4E38DF3DD8EF1E28FEFE78FEDE98E EDE68BF4E489FADD86FDDA86CDAB5AC5A250FFE998EFDE8EF3EC9CFFF9A8FBF3A4F5ED9EEFE697 EBE092EDE294FDF4A6F0E396D1C477EFE293F0E387EAE083EEE691EEE89AF7F0A4EDE192FBE797 F9E18CE3C972F1DA83F6E38DEBDE90F6F0B39892580D0700ADA671FCF5B8F0E79FEFE893EFE58C F3E890F2E595F0E29AEEDF99EBDD95F0E297F4E79BF2E799F0E596F0E799F1E89DFCF4AB958C46 6A611EFFFBBAEADC9DEEE1A2EFE5A5E5DC9C554E0ED7D28EEAE69FEBE69DECE799EFE697F2E895 F6ED9EEAE1A5F3ECA7F8F4AC695F30DBD29DFBF3B4C5BE7A312703E6DEA3F9F6ABF7EFA8F7ECAF F2E2A9F9E8B0F4E7A7EEE695E4E182EBE98FFFFCBBEFE6C550483C040000282506C7C687FAF1AA F5ECA6E5DE99E1DC9BEAE7A5FEF9B8F8F5B0EFEAA3F6EEA4F1E89BEEE598E7DF9BDED18BD8BF73 FEDF8DB18532C79B4CFFEDA4F8E6A0ECE7A1F0EDA5ECEBA0E9E59AD9D189C9C47AD8C97FF0CB84 DAA55FF2CB80F3E793EFEC99F9F1A3F1E29BF0EFA5E1E196EBE59BF3EDA3E9E399F4EEA4EAE49A EDE79DEAE49AECE69CEFE99FF2ECA2FAF4AAC8C278CBC57BE3DD93EAE49AF2ECA0E5DF94E1DB8D E7E093F6F1A1F6F1A0EDE997FAE99DF2C786B38033EECE7CEEDA9AD9D189E0DF8DF2F0A2F3ECAC F5EDACFDF7A2EEE89DE8E3A0F1EEAAF0EDA9EAE5A3EBE6A5EFE6A8F2E8ADEDE6AE241F00656347 F2F2C2EAEABDE7E4B7E3E0B1E3DEABEAE8B1D3D09BBBB8861613000100000805000401005A5A33 E0DFB9F3F3DAD0CEB5F1F1D6B1AF8E0D0B0074724BFBFAD2FBF9D2EDE9C3A6A07A1B140B55552C E3EF9DD0C87CF5D798E7BA86A87644A58048D7C783F1F29FCDD577DDE07DE8E27EFCEAA0F7C98E C79643F1D77DF3EC98EBE79EFAF5B1FFDEA0D9A974AF814D986623DEAC53FFFAAEFCE6A3F0DE9C F0E5A6EAE3A5EFEDB1DEDFA5DBDCA3E9E8B0E8E5AFEFE9B2ECE6ACE8E2A6E9E3A5E4DEA1E1DB9D E4DEA0E9E3A6EEE8ACEAE4A7EBE5A9FAF4B7FFF9BCF9F3B5F2EEADE7E2A2D4CE8FCEC889ECE7A9 F9F3B6FFFABEFDFABFECE6ABF1EBB0E1DBA1EDE8AFF6F1B8F3EEB5F1ECB4FBF6BFFAF5BDF9F3BF EDE7B3E6E0ADF0EAB8FBF5C3FFF9C4FEEAAAD8B067F9E193FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFAFAF1EEEDC9E7E1ADF9DECDFDE9E0FBF7EEFDFEF9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFAFAFEE8E8F8CCCBEAADADEDCBD0E8E8FBC0C5FC9A9EF87878F64840F33F36EA8F93D9 DFEBD5F4F2EFEDCECDE2ADADF2D6DBE6EEEFBFDEDCA4BFDB92A0DD609E873DA53D5DB75C9DD49D DFF1DFFBFDFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFB EAFCEAD0F3D0ACE0ABCAEBCAF7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF9F9F9F9F9F9FBFCFCFDFBFBF8E6E6EBAFAFE06666 D33A3BC48888C87677D54647E16465E89F9EE9A4A3E58686DB4344DA7677DCAFAFDB7B7CDC5E5E E06A6AEC9C9CF6BABAE66A6BDD3B3CF5B3B3EE9E9EDA6666B87171AB9898BBB8B8D9DADAF9F9F9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCE3E6E6CCBBBBD38686DD5F5FDC6060E28282E69797 DC4C4CD95757DFAFAFEDEFEFFCFAFAFFFEFEFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFBFBFBFAFAFAFBFBFBFDFDFDFFFEFEFFFBFBFEF5F5FDEFEFFDF0F0FDF4F4 FEFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D277E8D97EE6D77CE6D77CEEDF84 E6D77CE5D67BE4D57AE6D77CE7D87DE5D67CE3D37BE5D67BF3E486F2E385E9DB7AEFE17EE4D673 E8DA79F1E383EEDF80E6D77AE6D77CE7D87DEFE085E2D376DECF72EADB7DEADB7CE6D877E6D876 E1D371F2E482F7EA86F2E07EF3E281F6E78AF6E78CF2E78EF8EE95F6EF97FAF297FAF194F7ED8E F7EC8AF7ED8BFAF191F6ED8FF4EB8DF2E98BF2E98DF2E98EF2E98EF0E68DF0E68DF0E68DEFE58E EEE188FBE38CCAA350F8DC84E1D376E1DF7DF3E589FFEC96F6E791E4E28ADCDB85F0DC8FF0E08E EFE38DECE18AEADE88EEE28BECE089EEE28CE8DC86DFD37DE6DA84E3D781F8EE95F2E58BEEE086 F2E588EFE187EDDF85F9EC90F2E58AEEE086E3D67AE8DB80F4E78DF9E891F6E391FAEA97F0E78F EBE58BF0E78CF9E98EFCE38CFADB86D9BA67BD9847FFE593F4E091ECE595F4ED9DF8EFA0F5EC9D F6ED9EF2E798EEE394F5E99AF9EC9EEFE293ECE08EF8EE8FE8E080E3DD88E4E193F1EBA3E7DB92 EAD589F9DF8DDCC26BEDD57DF9E78EE2D588E8E0AC342D15383213ECE4AAE3DA98F2EB9BEBE38B E6DD82EDE28CE6D98CE8D995F1E39DF1E399F0E297EBDE91EFE495EEE394F1E799F7EEA3F7EFA7 C3B976544B0AF9EFB2EEE1A0F3E5A4E5DC9AFFF9B8423B00B6B170FBF6B2F1ECA3EBE598EAE191 EBE28FF2E99AF2E8AEEEE89CFEF9A6A99E70A89D6EF7EFB1FEF8AC453C177D7541FCF9B6FFFCB7 E5DB9AF5E1A5FFFBBBF4E8A2E7E398FDFBB4F4F3BAC4C09A231C07070000413909C8C079F6EB9E E4D88CECE194F0E99AF1EB9DF5F1A4E3DD90E8E295EEE799FEFBB0EFE297F5E99EF5EBA2E8E092 CDC36FFFEC98EECA7BAF7830FDCF8BFFEDA8E9E49DE1E49BDEDD94DBD48CDBD18DDAD18AE3D991 E9D78CCA9753D8A45FFFF3A6F1F09DEFEE9FEBDC95F1EDA7F3EFA7E6E197E9E399F1EBA1E8E298 E4DE94F0EAA0EDE79DEAE49BF1EAA1F1EBA1F6F0A6FFFBB1E6E096B9B369908A3EF5EFA3F6F0A4 F3ED9FE9E494EEE998F5F09FF1ED9CFFEEA1EFBB7BB27D31F7D483F8E4A4EFE79FF5F4A2F0EFA1 F6F1B1EBE3A1F6F09CF2ECA1EBE7A0F2F0A5EEEBA4E6E29FE8E2A4EEE8AFFDF9C3B1AB720B0500 BDB97DF0EFB5EBEBAEEFECB3D6CF97DED89BDED899E3DF9FD5D297B8B481736E427E7A508E8B5E EBE8BBFBFACAEBE9C1F1F1CBF2F3CA3A380E505026E0DFAEF0EEBDE9E6B7716E44090400686342 FEFDCEE9EFAEEDEEAFEFE7B1FFF0C2B99E773F23006D5325EEDB9FF3EB9EDEDC80D8DC74F2E193 EDBC86BE893CF1D781FFF9A4FAEEA6FEDD99DBA262B47841D1A26BDCB166DBA949FFEDA0FFF5B5 F7EBABE8E0A2E8E5A9ECECB0FFFFCAF3F3BAE6E4ABD4CF96DED89EE6E0A4ECE6A8F0EAACEEE8AA E9E3A5EAE4A6EFE9ABF0EAAEEDE7ABEFE9ADF5EFB3EAE4A8DFD99DF0EAABF3EEAEE5E0A0D6D092 E8E2A4F2ECAFF4EEB2EFE8ACDFD99EE9E3A9DCD69CEBE6ACF9F4B9F6F1B9F1ECB5FEF9C2FBF5C1 F8F2C0F0EAB8F4EEBAFEF8C5FDF7C3FEF0B9FEF2AFE4BA6CFAE08DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF7F7E8F3EDD1FCDFC8F6E1C1EDE9C2 F4F5E0FEFDFAFFFFFEFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFDFDFEF3F4F8D9D9E9AEB0D5B3D0C1C2F7B3C4EEB6C5EFB3B8F96F6FFF3436F8 7070DCBFB9CBF1DDE3F4C9C9ECB2B2F9DDDDDCEDDB9BD0A96FA19E6879BA64849070A370A9D1A8 D7ECD7F9FCF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFCFBE7F1E7CDE5CDADDEACCBEBCBF7FCF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFCF5F5F5D8D7 E78B8BD74849CD5151CF4D4DD84F4FE99090F5D2D1F6CFCEF0B1B1E47D7DDC6B6CD86060D74041 DF5D5DEDA3A3F9DFDFFAD8D9E77778DB3838EB9999E67D7DD9494ACC6B6BCDA8A7DBD1D0ECEEEE FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF2F4F4E5D8D8E2A8A7E17A7ADC6060E07979 E59191DE5F5FE07575ECC8C8F7FEFEFEFEFEFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D479EADB80E7D87DE5D67B F0E186E4D57AE9DA7FE9DA7FE9DA7FECDD82EFE086E5D57DE2D379E7D87BF0E282EADC7AEEE07D E2D56FDCCE6BEADC7AEFE180E7D879E3D477E3D479EEDF82E5D679E3D476E9DB7AE8DA78E0D26F E8DA76E5D871E9DC75ECE078F4E280EBDA7AEFDF81F5E68AEEE389EBE287F4ED92FAF296FEF597 FCF292F9EE8CF5EA88F4EA89F4EC8BF5EC8CF5EC8CF8EF90F9F092F6ED90EFE68AEBE286EDE589 F0E68CF1E489F2DA83B7903CEBCD75E8DA7BECEB87F4E789FFEA93F3E58DECEA92E7E691F2DE90 F1E18DF2E88EEFE48BECE188F0E58CEADF86EFE48BF2E78EEBE087F1E68DE0D57CF0E68CF1E488 E5D87BEEE183F3E689EFE285F3E688F5E88BF7EA8DEEE183E9DC7FF1E486F7E88EF6E590F8E994 EDE18AECE188F0E58BF2E389F9E48BFADE87E2C26DB08C38FFE390FCED9CEBE293EBE193F0E898 E8E08FECE191F1E696FCF1A0F4E997F2E695FEF2A0F1E38FF1E785E9E382EAE690E7E498EEE9A2 E5D994F1DD95F3D98BDBC16DEED67FFDEB91F6EA9EB5AF820F0900A7A16CFAF2B5E5DC91E4DB87 F0E78BECE388E0D681E2D78BEEE19DF0E39CF4E79BEFE295E1D586F0E596F4E99AF5EC9FEDE49A EDE69EF5ECA9433A00E7DD9FFDF2B0F9ECA7F1E7A4FFFBBB6C652E86824EFAF5B2EFE9A3ECE69B EEE595ECE290F4E99BEFE5AAEEE698F5EF98D7CF9B514618E4DBA4FFFCB0AFA966221B01E1DBA3 F1ECAAEFE59DF7E49CFCF4A2F5EE9FFBF8BEF2EED1847F74201A13040000554D20E5DB8DF8F09D E2D381FCF2A3E3D686FCF2A0EDE692EDE794F0EA98ECE594F9EFA2E0D38AF4E59FF6E7A1F4E79A EFEC98EDEE95F1E48DFFE597B57933D09856FFECA6F0EBA1E8EDA2EBE8A1E5DA97F3E7A7FAEEAC F0E8A0ECE89ACA9B58B37132F9DA94F8F5A3E6EA9AF5E8A0F4EBA5DDD790D9D28AEDE69EEEE79F EBE49CE8E199E7E098F1EAA2F0E9A1F0E9A2EAE39BF0E9A0F4EEA4E5DF93D9D387A6A054E2DC8F F4EE9FECE698E8E294F0EA9CF8F2A5F2ED9FFFECA3EFB576C0873DFFDD8DFCE7A7F2ECA3EFF19E F2F2A4F0EBACECE4A3F5EF9BEDE79DECE79EF2F1A1F4F2A7EAE6A4F0EBB0F9F3BEFCF8C5645E2D 35300EEEEBABEDEDA6F2F2A8E4DF9CF6EDADEEE7A0EFE9A0DDD88ED2CD88E2DDA0FFFFCBEFEAB7 DFDBA5E0DCA0EAE8ABF4F4BCECEDB7FBFBC7CECF96F4F4BCDDDEA4F4F3BB97965D0706009A9964 E9E9B7EDE7BBFFF6DBB9B4956F754F788258433F2B170000210000C18E6DFFF0C0F2E79FDDE890 F2EAA4E8BE89B57E35EFCE7CFFF5A5E8CE8AC09552D39A59F8C68CFFF7BBFBD88CD8A544FEF5A8 FEF7B7F3ECACE6E1A3E1E0A3E8E7AEF1F1B7F4F4B9F2F1B5DAD599DFD99CE7DFA0F6F1B2EFEAAB F0EAACF7F1B3FBF5B7FBF5B7F8F2B7F5EFB3F3EDB1F3EDB1E1DBA1D3CD91E6E0A3E6E0A2EBE5A7 F6F0B1F2ECAEF2ECAFEAE4A8DFD99DD8D296E4DEA2DAD498E9E5A7F8F4B5F3EFB3EDE8ADFAF5BC F4EFB8F1EBB6EAE4AFF1EBB5FBF5BFF9F5BCFDF1B6FEECA6E2B867F4CF77FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF7FFE9D3F4E3BA E7E4AFEDEEC9F8F6E5FDF7EEFFF9F4FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFBE8E7EBB8BBC2A1CDA19DE8B7C6E0DBE7E4EDECF2A5A1FD 4947F6594BD99175C4E3BBCBF0BFC0E5B8B4D8D5C4AFDBAB73C076549971647BA68086B0A9A6BB EBE8F0FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9FAF9E1E9E1C8DBC8BBE1BAD6EFD6F9FDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFAFAF0BDBDE37777DC4646DD4C4DE37575F2BCBCFEEEEFFFECECFBDADAEFBEBEE47C7CDB3D3D DC3637E87879F9D8D9FFFFFFFBECECE98C8DDB4748E28181DE5D5ED93132E26B6AF1BBBAFCEBEB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF6F6F4CCCBE79796DD5C5C DE6666E37F7EE37979EB9C9CF9DFDFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDF84ECDD82E6D77C E7D87DEEDF84EDDE83F1E287EDDE83E6D77CF9EA8FF1E187F5E58DEADB81DCCD70DED06FDED06D DACD67EADD77F1E47FE3D573DED06FE5D776EADB7DE8D97CEADB7EE8D97BE9DA7BEDDF7EEBDD7A DFD16DDED16BE3D66EE4D76FEBDE75F6E482EFDD7EF3E485FCED90F3E88BE8DF83E0DA7DF2EA8D FEF597FDF392F8EC8BF6EA88F8EE8CF2E886F3E987F4EA89F8EF8EFDF493F6EC8DF0E687EDE384 F5EA8DEFE488F5E78CFFEC92A57E29F0D178F8EA8AEAE985EEE182F8E38AF7E990EEED94EAE993 E9D587EBDA86F5E88FF1E38BF0E28AF0E38AFAEE96F7EA92EADC84EBDD85FBEE96E2D57DF8EA92 F4E788EEE181EFE282E6D979E5D878F6E989EADD7EF5E888EFE282EEE182F5E888F8EA8EF6E68F EDDD86EEE189F3E78EF0E58BEFE289F8E78FFBE58CEFD17AA6812CF5D27EFFF3A3E9E091EEE695 F0E696E5DA8AEDE290F1E593F6EA96F1E28EEDDE8BF3E591F0E28CF4EA88EBE481E7E48CEAE799 EEE9A2F2E6A0FFEEA6F5DD8FF7DD89E7D17BECDB84F6EAA3605A3F36320FE7E2AAE5DE98EAE291 F3E98FEFE48AF0E58CE6DB88E7DB90EDE29CEADC95E9DC8EEBDE90E4D888EDE292F5EA9BEEE498 EEE49CEAE29BFFFBB9665C1EB0A669EFE39EFEF2AAEEE59FFDF4B1B7B072474205FAF5B5EFEAA6 EBE59CEAE194F8EF9DF6EA9BEEE4A1F5EDA0F2EA98FAF7B344391AB5AA7AFFFFB8FFFFB9524B18 968E68FBF7B9EEE697FAEA9AEBE08FEFE6A5ECE7C07E776D050101000000777441F4F3A5F6EB92 F4E38FEFDF91FAEA9DFBEFA0FCF1A0E8E08FEEE896EAE393F5ED9FEEE39BF1E29EF6E9A9FFF3B1 DFD384E4E58AE7EF91F0EA91FFEB9EFCC27EA46827F4E39CF1E89BEAEDA1E3DD96FBEDACF6EDAC FFF5B4F9F1ABF3F5A6F3C885995417E9BE7CF6EC9CEBEB9CF9EBA4F2E8A1E3DB93DDD68EF4EDA5 E9E29AECE59DEAE39BEBE49CF1EAA2EEE79FEBE49CEBE49CE5DF96F6F0A6EEE89CEFE99DF2ECA0 E0DA8EEFE99CE3DD90F0EA9FF7F2A5F2ECA2F2EDA1FFF5AEE2A366BE8138FFE797FAE1A2EDE79E E7E996EDEFA0E7E2A3EAE2A0F1EA96E5DD94EBE59CFDFCADF3F1A6F6F4B1A8A66BBFBB89F0ECBB 2C280C868148DDDA97E1DF93EEED9BF6F0A5ECE29BECE497F0E999F3EC9CF1EB9FEDE6A2F6F1B2 EDE7ACE3DE9FEDE8A4F5F2ACECEAADF1F0B8F4F3BCFBFBC4FFFFCAF8F7C5ADAD781E1E04676637 EFEEBCECEBBAF5ECC9C0AAA219100E000100000C000202001E0500875235C98C6FD6A580E9D29C D9DD96F5F0B3DEBF8ACB974DFFD68ADDB16AA27D3ECA9E5BFCDA94FFEEB0FFF1B3FBD98ECD953B FBEA9FFEFAB9FFFEBEF3F1B4E9E7AAEDEBB1EBEAAFF9F9BFE1DE9FF3EEAEEBE4A3EBE3A3F6F1AF F6F0B0F2EDAEF7F2B2FBF5B7F8F2B4FAF4B9F6F0B6EDE7ACEAE4AAF2EBB4E6E0A5EAE4A8F0EAAE F7F1B5EFE9ACDBD599EBE5A8F2ECAEEBE5A8F2ECAEF6F0B2E0DB9CEBE8A5F3EFA9EDEAA6EFEBAB F8F4B6F4EFB4F2EDB5EBE6ACE3DFA3ECE8ACE5E1A3E7DE9CFCDC93DBB35FEAC56BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFFFAF6 FDF9F2F8F7E8EAECC4E8E2ADF6E1B9FFEAD5FFFBF8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF2F1F8D4D6C5A5C8A089C2D5BED2F6DCDCF8DCE2 CCBBEE8381FA4F4CF55241E1CB96B7E4BCBED0CCC077BC7348B14654B55380C785B4D8C8AFBCE1 ADAEEEE9E9FBFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4FAF4CDE9CDB8E1B7E3F4E3F5FBF5FEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFEFEFCF0F0F6D7D6E9A1A0ECA2A1F6BDBDFDD5D5FFE4E4FFF1F1FEF7F7FCEFEFF0C1C0 E79796F1A8A7F9CCCCFDF0F0FFFFFFFCF4F4F0BCBBE38383DE6F6FDA4647DA3032EB8182FAD3D3 FEF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFCDFDFF2A7A7 DD4041D82B2BDC3F40ED8F8FF9CFCFFEF3F3FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDF84F2E388 EFE085EFE085F0E186ECDD82E4D57AE7D87DE9DA7FE9DA7FE6D77CEBDC82E8D97CE2D374E4D674 E2D471DDD06AE3D670E7DA74EDDF7ADED06ED5C766E4D575E5D679E3D477E1D273E3D475EADC7B E9DB79E4D673E3D671E7DA75E9DC74E7DB74F1DF7DF3E082F1E283F4E587F5EB8BF4EB8BE5DF80 EDE686F6ED8EFAF08FF5EA88F0E482EEE583F1E785F8EE8CF6EC8AF1E786F1E786F4EA89F2E889 F3E98AF7ED8EEDE286F5E68AFFE98FA37D27F6D97EF8EA8AEAE985F0E384F9E489F9EB93F4F298 F4F39CF8E495ECDB86F8EA92F9EB93F8EA92F1E38AF4E68EF0E28AF6E890F0E28AFAEC94EFE189 F5E78FF2E586F4E787F3E686EEE181F0E384F9EC8CECDF7FF6E98AF5E889F6E989F9EC8CF6E98B F5E68CEFDF88F2E28BF6E78FF6E890F1E78CF3E78DF7E78DFFEA93BB973FE7BD69FFF0A0EFE697 F4EB9AF4E999F1E694F8EE9AF3E793F3E690F3E48FF2E28DF3E58CF2E48AF7EA86EFE785ECE78E ECE998EDE99EF0E79DEEDC90FEE99AFFEB9AD6C270E9D98AE5DC991C1A0287865CF7F4B4DED98B E6DC85EAE184EDE187F2E691ECE08FE8DF93EDE39AEFE49AF6E99AF4E798E9DD8DF0E595F5EA9B F1E89BE1D78FE3DB95FCF3B27B7134887E43F9EDA8EADE94EDE39DF0E7A4E5E0A2423C05C6C081 F3EDAAF4EEA5F0E799F2E897F8ED9AF2E99EF7EDA4F1E89CF9F0A28B7F495B5025F8F1B1F4F0A5 DBD79D2B2209DEDAA1F6F2A5E8DD91FFF4B6E9E3B85E573F0000001B18028A8853F6F3ACF0E895 EDE18EFFF0A5F8E89EF8E89DE9DB90F3E69BFEF6AAC8C075EDE59BE7DE97EDE19DEFE09FF0DFA1 F1E09EF6EA97F3F397ECF398E5E18EFAE498FFDF9ACF9955C7A055FFF8A9F3EB9EF3E7A2F1E6A4 FDF6B5EFE0A2EADF9AF1F2A3FFDD96B37634DE9C5BFFEA9FF4ED9DEEE397EEE49CEBE49CF0E9A1 F1EAA3E9E29BEEE7A0F5EEA6EEE79FF1EAA3F6EFA7F7F0A8F4EDA5E8E199EDE79DE5DF93F5EFA3 FDF7AEF0E9A0ECE69DF2ECA3EDE69FE7E099E7E098E8E29AF9E29EB7763AB4732BFFEA9BFCE6A8 F2EBA3E5E794F0F2A3EDE8A8F1E9A8F6EF9BEEE69DF1EBA1EBE997F1EFA4E8E8A4CBC98FCBC996 9F9B6B221F00E4E0A3F5F2ADE6E394D8D581D8D184D6CC84F4EC9DF4EE9AE5DF8BEDE597F4EDA6 FBF4B1F7F2B2F1ECA7F3EFA4F2EEA5FBFBC77674451B19002D29053C3916302B0C161300221F08 D6D5B2FFFFDBFCFAD5C1B99F140402584B37AAA77B939051897C38AB8F52FAE2B1C29067BA8F63 DFC18DD8C98DE7E0A7A28B55C58F4AC78A409A6422D4AD70FCEFADFAEDA7FFECADFCEBB1FCDF9C E0A351FDE79DF4EFABF3EEADF3EFAFEEECADEDEAACEAE6A9E5E1A1F0ECACFBF6B3F8F3AEF2EBA6 E9E4A1F5F0AFF7F2B1F3EFAEF5EFB1F4EEB0F7F1B5FDF7BDF8F2B8F0E9B0F3ECB5E9E2ABEFE9AE F3EDB1F9F3B7F5EFB3E8E2A6EEE8ABEBE5A7E8E2A4F2ECAEF3EEAFEEE9AAF5F1ABE6E49AE0DD96 ECE9A6F2EEAFF6F2B5EDE8AEEAE5AAE2DE9FE8E4A3DCD996DDD48FFFDF96DEB865F5D176FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFAF3F4DDF0ECC6F8EBC4FBECC8F1EECDF7EFD6FFF1E2FFFBF7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFFAF9FBE9ECC9B8DFA591D2D7B0C6F2C1C2 F2BFC1DDA6BBA979BA604DC9403ECC8A70AD919A957FBA7C51B84B55BC5088CE87BBE1C0CFE5E5 BAC3F5AFB0FCE9E9FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEFAFFFAE6FBE6C1E9C1B4E2B3EEF8EEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFEFEFDF6F6F4D7D6F6D6D6FDE5E5FFEBEBFFEEEEFFF8F8FFFFFFFFFDFD F8E6E6F4D1D0FADDDDFEEEEEFFFBFAFFFFFFFEFAFAF7DEDEECAEAEDE5959D72E2FD92D2DED9191 FDE6E6FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFDFEEEEE F5B8B9DC3A3BD61A1BDA2E2FF0A0A0FDE9E9FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9DA7F F0E186F4E58AF1E287EDDE83F2E388F0E186ECDD82F5E68BEDDE83F7E88DECDD82EDDE82EDDE7F ECDE7CE6D974E4D771ECDF76E8DB75DACD68C0B24FD2C463E6D778E0D172DECF70DECE70E3D475 ECDE7DE2D574E5D775E6D876E7D977EBDE7BE6D876E4D172F0DE7FEADB7CE9DB7CF1E886F0E886 EEE887F2EB89F8F08EFBF190F8EC8AF3E785F2E886F1E785F6EC8AF3E987EFE584F2E887F6EC8B F0E687F1E788F6ED8DF5EA8EFDF094F6DF859D7820F9DA7FEDE07EE2E07BEEE181F8E388F5E78E EEED92F2F198F9E595F4E38DFBEE94F5E78EF1E38AE9DB82EBDD84F2E48BE9DC82EADD83F3E58C ECDE85F8EA91EEE184F3E688EBDE80ECDF81F4E789F0E385F1E486F4E789F4E789F4E789EFE284 EADD7FEFE186F0E088EFDC85F1DE87F4E58EF3EA90F2EA8FEFE186FFF49BC9A34BCC9E4AFFE595 EEE394F1E696EDE290F2E795F5E995F4E591F1E38CF5E78FF9E991F3E48AF5E68AEEDF7FF0E485 EFE88DF0EC99F1EC9CEEE695F8E897F7E291ECD788DDCC82F3E7A2928C510C0B00D1D098F0EEA5 ECE591EFE78BEADF83EDDE88F7E899EEE195E5DB8DE5DE8EE2D989E6D98BEFE392EEE390F4E998 F2E797FAF0A3E5DB93E8E099F7EDAEB7AC7172672FFBF3ABE8DD90FAF2A9E0D794F7F3B45A5422 979152FFFBBAF0E9A2EEE598EBE290E6DC87F7ED99F8EBA4F5E9A3F1EA97E3D8992D2300C4BC84 F8F4AFECE9AE544D32898650FFFFC3FFFDC3DFD7B4534A380D04003E3A0DC6C675FDFC9EF1EE9A F4E99DF2E3A1F4E4A1F7E69EFBEDA1FAEDA2F5E9A2FBF4AE857C38DFD594CEC484F2E6A6F2E3A4 F3E3A3F6E7A1EEE38BEFED90F4F59FDFDD8CEEDB91FFEBA3F4D186A88032FCE897FCEB9FF8E7A0 F5EBA8F3F3B0EEE1A1F5E6A1EFE99AFFE89CDAA962B27130FED68DFCED9FE8E091EDE69AE9E298 E8E19BF0E9A3FDF6B0F8F1ABEBE49EEDE6A0F4EDA7F5EEA8F5EEA8F8F1ABF2EBA5F8F2A9EBE59C FDF6AEF1EAA2EFE8A1E3DC96E5DE98F0E9A5F0E9A6ECE5A2EFE9A5FFEEACB8733ABF7C34FFEA9C F6DC9FE8E199D7DB87E0E293E7E4A4EEE8A6F1EB96ECE299F7F0A8EBE99ADBDB91D6D693C9C88E EBEAB37A794D5E5C26FFFFCDE7E19DF1EB9FE2DC8BF7EEA3EBE199EEE698E6E08CD6D07CC7C172 EFE89FF8F1AEF7F2AFF4F0A8F2EEA2EDE99FFBFAC8928D6A3E38241E1909241E0F3F382E827C72 DED8C6F8F5E3CCCBB48382680F0E054C4C30E8E1B5FFFFC3FFE69AC3A151DBBB6FE3CB866C581C 725C23BB9E64C7A266937A43534008542100B67A30F1CE8BFFF0B2BDA9656D5F2BAFAC6BFAF2BF FBEEB7D2964FFBE39AF7F1A9F1EBA4FDF7B3FCF6B4F5EEAEFCF5B6F3EEADF7F2AFF4EFABFDF8B2 EAE69FE9E4A0FAF5B2FFFAB8FEFABAFFFABCFFF9BCF8F2B6FDF8BEF9F3B9EEE7B0FAF3BDF4EDB6 E9E3A9F2ECB2F9F3B9F5EFB3EBE5A9F2ECAFF5EFB1EFE8ABF5EFB0EAE5A5EAE5A5E8E59DF1EFA5 F2EFA9EEEAA8FCF8BAFBF7BEFAF5BDF8F3BAEDE8ADEDE9A9E5E2A0F1E8A3FEE7A0DDB867EFCC73 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFBFDFCF2FDFBE2F6F4CAE6E4ADF0E1B2FEE5C5FDF4E5FCFBF4 FCFCF6FDFCF6FFFCF9FFFEFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF9FDCECCFAABA2EDD4A9C1 E8AFACE8AAA2E59089C86D79825A944A50AC4E53A741797239A63E51C0478CD883D0EECEF1F3FB DCDFFBBCBDFDAEAFFDE6E7FFFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFFFDEFFEEFD5F8D5BEEABDBCE5BBF0F9F0FEFFFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFAFAFEFAFAFFFCFCFFFCFCFFFDFDFFFEFEFFFFFF FFFFFFFEFCFCFEF9F9FEFBFBFFFDFDFFFFFFFFFFFFFFFFFFFEF8F8F6D1D1DF5454D92D2EDD3C3C EFA5A5FDF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEF9F9F6CBCBE04D4DDA2C2BDE413EF2B3B2FEF6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E9DA7FEBDC81EFE085EFE085ECDD82EEDF84E0D176D0C166F2E388EBDC81DFD075E8D97EE5D679 E7D878E6D876E3D670E6D971EFE27AE4D76FEBDD79F5E784EBDD7AE4D674E3D574E6D877E7D978 E7D978ECDD7EE2D374E3D475E3D475E5D677EBDC7DEDDE7FEAD779F4E283F5E686F8EA89F6EC8A E8DF7DE2DD79F1EA87F7EF8CF2E886F1E584F5E888F6EA88F3E686F5E888F2E585F1E486F4E789 F5E88AF0E387F3E68AF4E78BF1E488FFF094F4DD81A27C25FEE388F2E584EAE984F7EA8AFFEA8F F6E98EEAEA8DEBEA90F1DD8DE8D580EEDF87ECDC84F2E28AF3E38BFCEC94E1D179EADA82F5E58D FAEA92F9E991E6D67EF5E88CF8EB8FEEE185F2E589FEF195FAED91F4E78BF2E589F2E589F2E588 EFE286EDE184F2E687F7E68CF2DD85F2DD86F4E48DEFE68DEAE58AECE184FFF196D8B159BA8731 FFE493F3E898F5EA9AF0E493F7EB99F5E994EFE08BEDDF87F1E188F2E388EFE083F2E286ECD97B F2E385F0E58CEDE890EEEA93EBE48BE7DB82F6E690E0CE80E0D38ECAC0862F290050512FEBECA8 E5E392F1EC90EBE283F4E68CEBDB8CF7E79CEFE198E8DE8FE7E18BE6DE8AEEE290F3E795EFE391 F4E997F0E595EEE496E8DE96E5DD99EAE0A1F5EEB37D7238F6EDA4F6EB9BF5EDA2E6DD9AEDE5A7 989255443E03ECE5A6E7E09AE1D88AF1E796EADF89F5EA92F5E99DF7EAA4F4EC9EFFFCB6867D43 6F6641EDE8B0F5F0B9BCB8860C0A00DEDCAADBD8B338331C07000048401AE8E397F4F392F4EF86 EEE48BEDE197F7EAA6E3D78FE4D789EADE8CECE194E7DD95F9F0AD908749C5BD7FC1B97BEDE2A2 E8DE97E9DC92F3E697E7E183E8E387FBF4A2ECE79DEAE399FEF0A3FAE191CAA553BD9444FFF1A6 F5E09AF9F3ADE3E9A4E7DC9BFFEBA7FAE99EFCEB9BEECD7FB1732EE9AA65F9E69BEAE693EAE796 F2EBA2E8E19BE2DB95EFE8A2ECE59FE5DE98ECE59FF0E9A3EEE7A1EFE8A2F5EEA8F5EEA8ECE59F E5DE98F3ECA6E6DF99FFF8B4FFF8B6F1E9A8FCF4B4F7EFB0F2EAABF2ECADFFE8ADB36B33B56F28 FFDC8FEED496E7E098DDE18DD3D587E2DF9EE8E2A0E4DE89D8CF86DDD58FE1DE93DADA92E1E09E A9A96CD2D39941411AA9A874F8F4B6EAE4A1FFFCB4F5EBA3E6DD97E3DB93E7E095EBE494F7F2A0 D4CF80EBE49DEEE9A6EFEAA8EBE8A3EAE89CEFEEA1D2CD94F8F4C4FEFCD1E0D9B7DBD4B9F9F3DD DAD5C2605D4926240D070602040500858A64EDF3BFFBF1AFFFE89EE0B364CB9B4EFFEEA8FFFABC 7E7941362C068A71338A611C7D5C235A40085B2C04DFBA6CFFFCB2F6E8A8DCD49161571A0B0800 5D5937FFF5C9D9AA6CE6CF87F8F1A4F2EA9FFCF4ACF3EAA3F0E7A3E9E19EF3EDA9F1EAA6FCF7B3 E5E29BF7F4ADEEE9A6F0EBA7EEE9A6F2EDABF1EBADE8E2A5EDE7ABF1EBB0EEE7B1E6DFA9F6EFB9 F9F2BCF1EAB4F5EFB5F5EFB5F1EBB1ECE6AAEEE8ABF0EAACEDE8A7FDF9B9F6F1B1F1ECAAFFFBB7 F4F1ACFCF9BDFFFFCBF1EBB4F3EDBCFFFAC9FFFDCDFFF9C6FFFEC5F9F4B9FDF9BAFEF0ABD7B366 E5C56CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFF6FBFBE9F3F3D8F8F1CFFBF0C8EEEABC E7E7B7E8E7B8F2E6C1FEEBD5FFF7F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFEFFD0D1FFAEADFA DCCCD9ECD3B8E4C89BE4B887E2A584C08E918E72A04A4FA24F7D8A70BD77A4DF9ED3F1CFF4FCF3 FFFDFFEDECFFC4C4FEABACFDD6D6FFEFEFFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFFFEDFF5DFBFEABECDEDCCE5F5E4F9FDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEF9E4E4E68888E67C7C EF9696F9D3D3FEFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFDFDFBE6E6F2A3A3F09286F19D88FAD9CFFFFCFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEDDE83EBDC81EADB80EDDE83F1E287ECDD82F7E88DE9DA7FE4D57AECDD82F0E186E6D77A E3D475E9DB7AEADD78EBDE78F2E57DFDF088EEE179E8DB73F0E27EEBDD7AEADC7AECDE7CEEE07E EBDD7CE8DA79E7D879E9DA7CE5D679E6D77BE9DA80E8D87FF3E589F1DE80F2E081F9EA89FBEE8C F0E684E9E07DE8E37FF7F08CF8F08DF0E684F3E686FDF090EEE280F1E484F8EB8BF4E788EDE082 EDE082F2E587F3E68BF9EC90F0E287E2D579F3E488EDD67AA37E25FFE489F7EB89F4F38EF5E787 FBE688F2E48AE5E588E5E48BEBD786E9D681F4E48BF7E78EFDED94F4E58CF2E289E6D77EF7E78E DDCD74CBBB62F7E88FECDC83EEE185F2E589F2E58AF3E68BF9EC91FDF196F5E88DF5E88DF9EB90 F7EA8FF8EA8FF9EE91F7ED8DFEED92F7E088FAE38DFAEB94EBE389DFDD80F0E88DFEED92F4CD73 B7812BFDE18DF0E595F4E999F6EA99F6EA96F6E995EFE28AF1E38AEBDC80E7D87BEFE083F0E083 F1DD82F9E78CEEE388E6E185EAE689E7E182EBE181F2E48AE9DA8CFAF2B288824B040300A7AA66 F0F4A7EBEC93E6E181D9CF70F3E48DEEDC8FF3E29CEEE199EDE694EFEB8FEDE68DEDE18EE6DA88 E2D784F3E896FCF1A1F1E89AF6ECA4E3DA97DFD597F7F1B66D6228E8DC92F2E897E1D98EF3EAA7 EEE7A9DCD698272200C7C180F5EFAADED589EFE694F6EC95F0E58BF3E797F3E7A0F4EAA3FBF8AD E7E09B39300BD8D0A5F3EDBBF9F8B96B68363F3D25242515000000534E23EAE5A7FBF4A6EBDE87 FAEE96F9ED9AECE08FE7DF8DE4DE88EAE288F3E990E8E08DF2EAA0F1E9A9574F17C1B980EFE8A9 FAF1ADF6EDA1EFE792F1E78DEDE887E9E086F5E79AE9E19AE7E69EECED9DF6E893ECC973996818 FBD387FBE8A0F1EEA5E8F3AAD7D18BF2D895FEE299F8EF99FAE490D2984ED38645FDD58CEAEA93 E8E894F0EC9FEAE39DE9E29CEEE7A1E7E09AE1DA93E3DC95EAE39DEFE8A2F3ECA6F6EFA9EEE7A1 E6DF99E7E09AEBE4A0F2EAA7F3F0AEBFB774FBF3B4F7F0B2F0E8ABFBF3B6FFFCC2FFECB4BD733D B26923FEE397FCE4A6F0EAA1E7EC97E4E899EDEAAAEFE7A5E6DF8BD6CC84DED691E8E59CD0D08A E3E4A1F2F3B4D8DA9D353600EAEAB0F0EEB0F1E9AAF0E6A4E6DC98DCD390EBE29EF0E9A0DED98A EDE898EFEA9EECE8A1EEE9A9EEE9AAE5E29DE0DF94EDEC9FEBE99FE3E19BDAD798DDDAA5E8E4B7 EFEBC3817F5E1A190A3A3B26757748CCCF9EFBFFC9EAF1AAE2D78AFFEEA1D7A960A6773A644013 7967457A7251B8AF8496824A997932EAC78C8A6734966D23F9E693F5F3A3E9F3AEF7FABDFFFFCE 9A906C1710075D4B30C9A66DDDC980FEF6A4F4EA9BFDF0A6EDE29AEDE19BF4EAA5F2E9A6F9F2AC F8F6AFBAB76EDBDA8FEEEAA3EAE5A1EBE6A2F6F2B0FBF6B7F5EFB1EDE7ABF4EDB6FCF5BEF3ECB6 F9F2BDFAF3BDF4EDB6EDE7ADE4DDA4E5DFA5EFE9ADE9E3A6F0EAACF0EBABFCF9B9FDF8B7F5F0AE F1ECADF6F3B7F8F4BCEAE3B0ECE5B7FFF8D0F7F0C8FCF5CCFDF8CDFFFED1FAF5BFF8EDB4FEF2B2 D2AF64DFC06AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFDFEFEFBFEFEEFFCFBDD ECECBFE6E6B2E6E5B1F2E5B7FCE7C5F9F0D6F5F6E3F6F6E2F6F6E2F6F6E2F5F6E2F8F6E5FDF6E9 FFF6ECFFF6ECFFF6ECFFF6ECFFF6ECFFF6ECFEF6EBFAF6E7F6F6E3F6F6E2F7F7E2F2F2E3C8C5E6 AAA3E6E1D6D8F3EBC5EBE6B4EBE1AFF2DAB4EBC5B7CCA8BA8483BB7DA2A494D196D1F0CEF8FDF7 FFFFFFFFFFFFF7F7FFCACAFEABACFDD4D5FFEEEEFFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFFFEFAFFFAF3FDF3E8F7E7CDEDCDBFE9BEDFF4DEFEFEFEFEFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFBF1F1F0C3C2 F4C6C6FCDBDBFFF2F2FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEFEFFF7F7FEE2E2FDDDD1FEE0CAFFF3E9FFFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFECDB81EBDB81E6D67CE9D97FF0E086E7D77CD3C367F3E387F1E085ECDC80E6D67B EBDC7FE9DA7BF1E382EEE07DEADD77F2E57DF4E780E8DB74F1E37EE7D975DCCE6CE8DB78E8DC79 E8DB79E7DA79E9DB7BEDDD7EF0E182E1D276EADA7FECDD82DECE74EEDF84F8E78BF3E182FAEA8B F4E686EADF7DFBF591FBF490F9F28EF3E987EEE581F6EA87FEF291F6E989F1E484F3E686F2E587 F1E487F8EB8DF9EC8FF3E689F6E98DEFE188ECDE86FEF297F4DD80AB852DFFE388FAEC8BF6F48F EBDE7DF3DF83F0E287EAE88CF1ED94F6E492ECDB84F2E488F0E286F7E98DF3E589F4E58AF7E88D ECDD82ECDD82C0B154D2C366FBEC90E8DA80EFE188F6EA90ECDE85E2D57CECE087F2E58CF6E88F F9ED93EFE289EADC84EEE387EEE484F2E285EDD77FF5DF89F6E790EDE58CE5E286EEE589ECD77C FFD980B07C28F7DA87E9DD8AF1E594FBF09CF5EA96F7EB94F1E38BF9EB92E6D67DDBCC72F1E386 F0E185EDDB80F6E48DEBDD88E6E084F1EC8EF1EB8AECE481EFE388F0E399ECE4AF413C232B2B00 E6E9A2E2E692E9E98DE7E281E3D97BF1E28BF4E297EEDD98E7D88FE9E08DE9E487E4DD81E7DB86 E4D883E3D783F3E896F8ED9CEEE597FAF0A6E7DE99F4EAABF8EDB1786E32D6CB83ECE292EAE193 E9E29AEBE5A1FFFFC2544C118F874ADCD393E0D68EEDE396EEE390EEE38DF3E596ECDE97EDE2A2 FBF4A6F7F3A7776F3E928B69FFFFD6CCCD894B48210000000000003E421DD2D28FF1EDA3EFE09B FAE7A8EEDA99ECDD8EECE287FBF594FCFA9CE0DA7CFEF69EE8E18FF0E9A1ECE4A4282100ABA36E FFFDBEEAE29CF9F09FF2EA8FE6DF7FEBE787F3E992FFF0A6F4EBA7F1F3AAE9EE9DFFFAA4FFE691 CB9646BF8D41FFEDA2F7F0A3F2FEB2F1EBA3FBDE9BECCC84E7E48EFFF59DE5AD62C77332FAC87F EBE893F3F39FEFEB9EEBE39EE7E09ADED992E2DC98F0EAA5EEE7A3EEE8A3EDE5A1EDE6A2F5EEA9 F2ECA7F2EBA7F3ECA8E7DF9DFCF5B7C9C1851E1600CCC586F2EBABFEF7B9F8EFB4F8F1B8FFECB2 D98E58B56A25FEE599FCECADF1EDA6F2F4A6F8FAAEF6F3B3F5EEAEF5EE9EEDE49AF5EEAADBD894 F1F0AEE8E8A6F8FABAA9AD6E5B5E25F7F7BBECEAADF4EFAFF6EDAEECE2A0E7DF9FE5DD9CF4EDA6 E8E196DAD488E9E59CEAE6A2EEE9ABEFEBACDFDB9AD4D18AE1E094FBFCA4ECEC95EBEA99DBDA91 D0D08EECEAAFE5E5ADE3E4ADF5F7BBF8FCBDF8FDBBD8DC95E8E79EFEF5A9FAE398D7B06EB18B5A 9F81642A14070D00006E5E46CDBE92F1DE9EF8DBA2F6D09DEBC67DFDF2A5F6F9BAE2F6B5E7EDAE F8F0BBFCEFCBC2BB9D0E02004C350DDBC77EFFF6A4F2E595FEF1A5F2E69CF0E59EE8DE98EFE7A0 EEE7A0E5DF97EEEBA3E8E69DEBE7A2F1ECA9F0EBA9F5F0AEF9F5B5F8F2B5FBF8BAF8F2B7FBF5BD F3ECB6FCF5C0FAF3BDE7E1A9ECE6AFE9E3AAECE6ABF3EDAFE0DB9CF1EBADF5F0AEF6F1AFF8F3B1 F9F4B2F9F5B6EEEBB0FFFDC9AFA87B3B351D948E69FAF9D5FAF4CFECE5BCF5EEC2F3EDBDFBF1BE FEF3B6D1B168EBCC78FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB FEFEF4F8F8E8F6F6E3F6F5E1FBF6DBFBF3CEEFEBBDE5E5B0E5E5B1E5E5B1E5E5B1E4E5B0ECE5B8 F9E5C4FFE5CBFFE5C9FFE5C9FFE5C9FFE5C9FFE5CAFDE5C8F1E5BCE7E5B2E5E5B1E6E6B1E2E2B2 BBB2BCA390C6DFC7C3F9E9CDF9F5DDF8F8E6FBF6E7FBEEE7F1E4E8D6D6E8AAD3B38ED888CBEFC7 F8FDF8FEFEFEFFFFFDF7F8FECBCBFEADAEFDE1E2FFF8F8FFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFAFEFAECFFECD7F6D6C4EBC3C1EBC0D2F6D2EDFCECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFBFB FAEEEDFCF0F0FFF7F7FFFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF9F9FFF8F4FFF9F0FFFDF9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE8D47CEAD67DF0DB83F2DF84F2DF83E1CE71AD9A3CD5C264FEEA8BE9D775 F0DD7EF0E183EADB7CECDE7DE8DA77E1D370E5D873E7D976E4D675EFE181EADB7EE4D67BE1D579 E8DD81EADF85E0D579DFD576E7DA7BEADD7DE7DB79E8DC7AF1E380EDE07CDED06DF4E485EDDD7F F2E185F7E68CEDDE83E7DA7EF1E486F1E785F7EE89ECE37BF0E87DFEF58CEDE081F1E486F3E688 F8EB8AFCEF8FFDF090F3E686EEE181F2E587F9EC90FAED91FDED94F0D881A78933FFE990F6E587 EBDF7FEFE384F0E385F1E78BEFE78DF0E68FFAED99F6EB90F7ED8EF1E68AEEE389F2E78DECDE86 F1E38AF8EB8FECDF81F3E485C5B757EEE080E7DD7FE8DE81EEE588EFE58AE8DD83E2D97EE7DC83 F7ED94F4EA91E7DD84ECE08AF8EC93F4E38AF3E288F1E189F8EC92F7ED94EFE88FF0E68FFBEC94 F9E28EFFE796D5AC5EE2C673F5E78EEFE68DEEEA8FEDE98EF1EC91F3E98FEFDF8BF6E591FEED99 F5E794F0E590E8DD84F3E797F1E59EDED383EFE895F9F29CF4EC88ECE58AFFF7BBC0B1A0130B03 838134FFFEABEAE48EF3ED95F5EE96F2E994E6DB8AE7DA8CE9D98CE9D98BF1DF8EF2E28BE6D87E E3D679EFE188F3E88EF7EB95F2E893E3DA8AF4EB9EEAE29AEDE6A0F5EDAC847C41A1995BFEF7AF EBE690DCD97CEFEC90FFFCAA978D4D594D26F8EDBCE1D49CE2D895FDF4ABF6E1A6F8E5A9EFE09F EEE4A0F1ECA1E6E69DCFCE924341158580621812031005020702004C4D1EFCFDBAE7E1A1E5DB99 DDCE8BEDDC92ECDB87F4E78BEEE389F1E996ECE39AFDF5AEE6DD99F6EDAEF4ECB2B6AC78231900 D6CC94F4EAACF4EBA4F4EC99F8F094DED576EEE591FBF0A2FCF0A5F4EAA2F1EAA1F0E99CF3E596 FFEFA0F7CF7FBA8A3AF1D080F7DD88DFEC90FFF9A9F8DA97F3E19CDCE08FF1EE99FFE697D38940 C68B40FDEA9EF1DF9AEADD98EADF98D4CD87DBDA93ECEDA9EEECACF5EEB0E9DFA2EEE3A5FAF1B0 F4ECABF3EFACF1EDA9DED78EE4E097FFFFCD80785E241F00E7E6A4DFDD8FE9E399F4EBB1F8EFAE FFF0A9DF9D5EAA5B13FEDA8CF5EBA4F3FABDF1F1B5F4E6A6F3EEAEF3F1B6F3EDB1EDE9A1EAE79F E9E6A9E8E6A9F5F3B6E5E4A76666288D8D4FEAE9A9E9E9A8F5F3B3F2EEAEF0EBACF8F3B2F2EDAB E4DF9DE6E19DEEE9A5E5E09DEDE8A8EAE4A7FDF8BAF5EFB1E4DEA0E2DD9CE5E198EFEBA3F0ECA5 DDD895D3CF8EDCD798E8E4A5F3EFB2F0ECAFE7E3A6EDEAABE8E4A5EBE5A4E8D891FFE79ED39854 B69551FFFFC9EEECC0917B621B0B002C2B0DDAD1A3FBE9B1D4B876614708A89771EEE7D1F0F5CF FEFFCFECEEB1ECEBB6FFFEC6A19A6E000000AB9353FFF39FF6E496FEF4ACE5E098F8F4ADEFE99F EDE59AF0E89DEBE39AFEF9B3EBE8A5F4EEB0EDE7A9EEE8AAF7F2B2F7F2B2F3EEACF3EEACEDE8A8 F2EDADFBF5B7F4EEB1EAE4AAF5ECB5F4EBB4ECE5AAE7E2A2F0EEAAEBEAA4F5F3ABF1ECA8F6EFAD FEF9B8F8F0B1FDF8B0ECE9A3F8F7C1DAD6AD1713001E1A08EBE8BDEFEDBAEEECB5F2EDB6F6F0BD F2E6B7FEE5ACDABC75F7E08DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FCFDE4F0F0C9E6E6B5E7E7B6E7E7B6E7E7B6E6E7B5 EDE7BCF9E7C8FFE7CAFFE7C1FFE7C0FFE7C0FFE7C0FFE7C0FDE7BFF2E7BBE8E7B6E7E7B6E8E8B6 E4E3B7BCB3C0A391CADFC9CDFEEEDFFFFDF9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6F5D0AAE4A1 C1EABDD8F0D8DEF2DDECFAE9F7F9FDCCCCFFAFAFFFEBEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAF9FAEDF2EDD2F2D2BFEEBEB9EAB8CAF2CAE9FEE9F8FFF8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEAD57DF6E188FDE88FF8E489FBE68BEDD87BC2AE50A99536D8C563 F4E17EF1DF7FEBDB7EE8D97DECDD7EE8DA78E2D471E2D471EBDD7AE6D877E0D174F4E589EADA82 DFD37AE5DB82EBE188EADF86E1D67AE0D778DFD373E1D673E6DA76EADD77ECDF77ECE078F5E584 F7E789FBEA8FF4E389EBDB82F0E186E7DA7EF1E584F4E784EAE178F0E87BF2EA7FF9EC8EF7EA8C F4E789F5E888F6EA88F7EB89F3E785F1E484F6E989FAED8FF7EA8EFBEA92EBCE7B977D25F9E68E FFEF93F3E384F1E485F0E687F0E78CF1E58EF0E38EF3E792E9E084EDE485EFE689F3E88EF3E88E EADF86ECDE85F1E488EEE182FDF091D3C563EADE7BE5DB7DEDE487F1E88BF6ED92F3EA8FE9E085 ECE289F1E78FF4EA92F4EA93F4EA93F6EA91F6E48CF6E48CEEE287F1E88CF1EA90F5ED94F7EC95 F9E692F8DF8EFFE597C9A558DBBF6BFAE88DF1E689ECE88AE9E78AEDE88DEFE48CEFDE89F4E18F F5E494EDE290ECE492F4EA90F4E89AEDE09CF3E79EF3E79BE4DB8BF2EC8EE3DD89FEFBC764564F 292202D1CC77EDE189FBED97ECE18BF0E594F2EA99EAE291EBE091E9DC8DE7D786EBD988EAD884 E2D37AE2D87BEADE83EFE48CF6ED96F4EA95ECE492F5EC9EEBE398F0E89FFBF4ADAFA962716925 F7EFA6EBE68FECE887F1EC92F1E99FE0D69F55491ECFC297ECE0A7EFE89BE7DD89F7EBA5F1E09F F5E8A8F1E8AEE6E0AAE3E1B2B7B58B23210D0000000F0900373123A8A17D47440BC2BF7CEEE7A3 DED68DFDF0A4E7DA88DDCF7BF6EE9AE7DB89EDE596F4EBA1EAE2A1F9F0B7F0E7B0F4EFB72E2406 706441FFFCC1EDE3A2F1E79FF4EC9CE0D87FF2E98EEBDF8DF2E89BF0E89CEBE397EFE79BF3E79B FEECA0FCE195FFE796D7AD5BB88432FFE088EDEE8DFCF19EFBE8A2FAF1ADE9EAA0EEE799FFF7A6 E9AF61AA6F25F0C680FFF5B3F5E19FF6ECA5EFE8A2F1F2ACEFF3ADE2E2A2EDE8ABF0E6A9F6EAAD F9EDAFEDE6A4F0EDA9F9F5AFE8E198E9E69EF8F4C72E280F747053F9F8B8EDEE9EEFED9EF5EBAC F8EDA9FEF0A5F0B572BF6F26FFD78AEEE79EEAF3B9F7F5BEF7E4A6EEE8A8EDEDB1F4ECB9F0EDA4 EBEBA0F4F1B5F8F5BAE9E7ACFCFABD555315BCBA7AF4F2B2EFEDADF5F3B1EFEDABEEECAAF1EDAB F6F1AFF5F0AEF0EBA9F3EEACF3EEAEF1EBADDFD99BECE5A7F5EFB3F6F0B4F2ECAFE6E1A2ECE6A5 EDE8A7EBE6A4E3DE9DD2CD8CF0E9ACEDE7A9F3EDAFEFE8ADF2EBB0F3EDB2EAE0A9FFF9B9F1D593 C58344F0D38CF7F8B3F2F7C1FFF3D3BAAA880409006D693FFFF8BCD0B972543F16382513211309 332F1B6367499DA368E7EBB4FDFDBEF8F5C1483A2B5E4405FFED9AFEEEA2F3EBA3F9F7B2EDEAA4 F8F4AAF7EFA3FAF1A3F1EA9FEFE9A4FCFAB9FCF6BBFCF6BBF9F3B5F6F0B2F5F0AFF7F2B0F9F4B0 F3EEACF3EEACF7F1B2F8F2B5F6EFB4F6ECB6F5EFB5EEE6AAEFEBACF0EFADF5F5B0F5F5AFF3F0AC F8F1B0DDD593E6DD9BF3EFA6FEFDB7F3F1B9EAE6BF1D1A005F5E46F7F6C7EFF0B5F5F5B5EFEAAF ECE6B2FCEFC2F8DEAEC39F63EAC680FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFBFDFDF7FCFCF5FCFCF5FCFCF5FCFCF5 FBFCF5FCFCF6FEFCF6FFFCEDFFFCDDFFFCDAFFFCDAFFFCDAFFFCDAFFFCDCFDFCE9FCFCF4FCFCF5 FCFDF5F8F8F5CECEF5B0ADF6DDDBF7F8F6FAFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FDF9 EBF8EAC9EBC8B3E1B2B2E0B1C9E7C9E4E9F1C4C7F7AEB3F6E3E8F8F6FBF8F8FDF8F8FCF8F8FCF8 F8FCF8F8FCF8F7FBF7E9EDE9D6E0D6BADFB9BCE9BBD1F7D1E9FEE9F9FFF9FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D077F2E187F7E38AEBD87DEFDD81F1DE80E7D475D5C464 D1BF5EDBC966F4E385E8D97FE8D97DEDDE80EEDF80EFE07FF3E581ECDE7BE1D272E1D273E5D679 E3D478E2D67CDBD077E4DA80EEE488E2D77BE3D97AE0D374E7DA79EFE380EFE27EEADD76E5D972 E8D876F0E081F5E586F0E082EFDF83FAEB90E8DB7DF6E98AF3E784EAE27BF8EF86F0E77FFBEE91 F6E98BEFE284ECDF7FEBDF7DEEE280F5E986F4E787F7EA8BF9EC8EF6E98DFAE68EF1D380A68C34 FDE48CF5E286F2E383F2E586EFE586EFE78CEFE48DF0E48EECDF8BF3EA8EF3EA8BF0E78AF0E58B EFE48BEBE087EADC83F2E48AEFE284F7E888D7C967ECE07DE3D97AEDE487ECE386F4EB90F9F095 EEE589EFE58CEDE38CF3E992FAF099F8EE97F2E68DF0DF86F3E489EEE286ECE386F0E98EF6EE94 F2E78EEEDE87F8E08DFFEB9BD4B263D6B862FDE589F7E789EEE586EEE98BEEE88CF4EA8FF3E28C F2E08CF5E492F1E793EDE690F6ED91F6EB98FCEFAADFD18FE6DD92F4ED9CE6DF8CFEF6B0CCC28F 180E00928C57EFE899E2D37CF3E38CF1E38EEFE491E2D787E5DE8DE5DC8BE5D98AE2D684E7D986 E9D984E8DB85EDE58CECE18CEDE38EF5EA97F0E895EDE594ECE394E5DC8EE9E096F3EBA0D4CC80 4A4202ECE497EBE491EEE893EBE497EEE6A9FEF5CB716542978D61FFFEBBECEA90E5E37DE9E182 F5ED9AF1E9A9FBF3C6CBC3A9696153120C05080300070200868353F0F0BDFAF4C27E7650413B0D F8F0A9EAE38EDED37BEFE390BAAD62DACD86F8EEA5EEE695EDE991F3ECA7EDE3B0E2D8A2524726 0E0502D4C98CF1E7AAEEE5A1F1E79EF0E799EDE492F2E794F5E997F8EC9DF1E798ECE696F4EC9F F8EFA2F6E799FFEEA1FCE293F5D180B18735D5B15BFFF59AF3E994FCF7AAECE5A2E4DB98FBECA4 FEF2A2FED98AB47D33D39A56FFF2ADFDE8A5F9EDA6F3F0A9F2F4AFECF2ACE8EAA8F2EDAFF6ECAE FBEFB1FAEFAEEFE9A3F2EEA7F8F4ABEBE6A0F9F4B59F9B6B110C01D3D2A9F8F6BAF0EDA4EFED9F F2E9A2F2E9A2FEEDA4EDB671C7792DFFD989F7F3A9EBF2B6F5F3BAFFEEABF3F0ABECEDAEEDE7AF E9E59CE9E89BECE8A8F5F1B4F0EDAEE3DF9F595516F2EEAEF3F0AEF1EEABF7F4B1F0EDA9F1EEAC EBE7A5EFEAA8F3EEACF1ECAAF5F0AEF9F4B4F9F3B5E6E0A2ECE6A8F3EDB1F9F3B7F7F1B4F6F1B1 F6F1AFEDE8A6F2EDABF7F2B1E5E0A0F9F3B5E0DA9CEFE9ABF3EDB1EEE8ACEDE8B0E7E0B0BBAC78 512B077E410EB89D60F7F7BDFCFFD5FBEAC8FFF7D28285544B480CF4E5A4DBBF7DC7AF69F1E8BA CDC0A394906A67693E3639061C1B0B625E2CFCF6C3AFA683856928FFEA99FFF1A7F8EFA9EEEBA6 C5C27CEFEBA2FCF4A9FDF4A9FAF2A9E3DD97F8F5B5FAF4B8FBF5BAFBF5B7F9F4B4FAF5B4FCF7B5 F7F2AEFDF8B6FCF7B7F6F0B1F5EFB3FAF5B9F6EFB2F3EBB0FAF4B9FDF8BDFDFCC1F5F4B8F9F7B9 EFEBACFAF6B5FAF4B0EBE29DF4EFA8FDFCBAEFECBBFFFCD75E5C3F4A4934FAF9CAF4F5BAF6F6B5 E5E1A4D3CE98EBDCADFEEEC3C99966F5CB8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFF9FFFFF1FFFFEFFFFFEFFFFFEFFFFFEFFFFFF0FFFFF8FFFFFF FFFFFFFFFFFFFDFDFFE0E0FFC4C4FFC5C5FEDADAFEF4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFEFCE6F6E6D1EBD1C3DDC6B0C3C59BA6CD9CB1CDA8C7CBC2E2CBCBEACBCCEBCBCBEBCB CBEBCBCCEBCCCCEBCCCBEBCBC4E3C4C0DEBFCDE8CCDDF3DCEBFCEBF7FFF7FEFFFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D379ECDE82F1E186EADA7EEFE184EEDE7FDACA6B EFE180FAEB8AE0D070E8D97BF0E18AE8DA83E8DB81E8DB7EEEE280F7EB88F3E783E7DB77DED270 E2D575ECDF7FEDE185E1D77EE7DE83F1E78BE8DD81EBE182F1E485F0E382EFE380EFE27FEBDD7A E3D671E4D56FE7D873EADA7AF1E181F8E98BFAEB8EF3E789F9EC8FF2E485E9DF7EFDF390F3E987 F8EA8EF3E689EEE183EBDE7EEADD7CECE07EF7EB88F4E787F4E788F7EA8CF8EB8FFDEC94F6D986 AC913AFDE48CF5E286F3E484EFE183F0E687F4EB90F4E992F6EA94F1E590F1E88CF0E788F1E88B F1E78DEBE087E5DA81E4D67EFAEC93FDF092F0E182D6C866E8DC79EEE388EFE68BEAE187EFE68B F6EC93F0E68EEEE48BEFE58EF1E790F4EA93F2E893F1E58EF5E589F7E88BF5E98BF0E687EFE98B F7F092F7ED92F3E28AF9E28CFFE794DFC06EC5A34DF3D379FCE487EFE081F1E788F1E889F7EA90 EFDE87E8D680F1E18CF3E992E5E086F4ED8AF9F198FFFBB481763A968C48E9E292F1E9A5F5ECB8 7166381D1504D2CB86F5EBA0D8C36EFAE992FEEC98F4E391EDE292F2E797EDE594ECE493ECE290 F2E793F3E894F2E894F3EC9CF0E898EEE696F3EB9AF1E998F5ED9CF2EA99EFE494EEE293F2E899 ECE193574D09D4CA86FCF4AAF2EB9BE6DF93EEE6A6FAF2C0A19A6B514B18FFFFBEEFEF99F7F996 E6E385F3EFA0EDE8ACA0987731281B0200000A03017E776667633BA09C62E9E79AF4EEB0E9DCBB 170B07A59B58E1D987F4EA91E4DA86EFE69AF3E9A4E7E099F1EFA1E5E390EDE6A8F6EABD786E3C 0E0500877E3FF4EAABF5EDA9FEF7AEECE298DFD68BF3E99DF1E699F4E896F4E996EAE290E7E08F EFE898F2EA9AF5E99AFFF3A6E8D184F5DA8BDFBF6E997322F9D883EFE991EEF4A3F1EEAAF9E8AA F5E3A3F2E99CFEEB9EE2B46BBF813DFECC87FFF4AFF2E6A2EFEBA7EFF2ACE9F0AAF0F5B1F3F1B0 F1E9A8F4E9A8F9EFAAF6EFA7F2EFA4E3E095EAE5A4FCF8C22F2C005C592EF3F1B9F7F2B8F2EEAB F4F1A5F4ED9DF0E89EFEE9A6F1BC76C47A2BFEC877FCFCADEDF1B1F2EFB3FEEFA9FAF9B0F1F4B2 E8E2A8E6E396EBE899F5F2B0EAE6A7F4F0B0D4D18EA3A05DF7F4B1F8F5AFF6F3AEF6F3ADE5E29B DDDA95EFEBA8F4EFADEFEAA8F0EBA9F8F3B1F4EFAFF4EEB0F6F0B2FFF9BBF2ECB0F0EAAEF6F0B3 F6F1B1FCF7B5F5F0AEF3EEACFBF6B5FDF8B8EAE4A6CBC587E4DEA0F9F3B7F7F1B5F5F0BAF8F4CA F6E5BBA17D563403052910011B1B00757C53F3E8CAF8F6CEE6E7ACF3F3AAFFFEBDD6B878C4AA5E FDEFB1FEF1C1FFFFCDF0F0BAFFFFDBB1AD91595327BAB27DE7D7AABA9E5AFFE595F7E39AEDE49F ECEAA6D4D18DDAD68DECE59BE6DD92EFE79EE8E29EF0ECACFAF4B8F4EEB2F7F1B3FEF9B9FFFBB9 FCF7B2F2EDA9F8F3B1F7F2B2F4EEB0F8F2B6FCF5B6FBF3B2E7E0A2928D54ABA571FEFED0F8F5C3 FEFBC7FDF8C0F9F5B5FAF3ADFAF2A9FFFEBAE2E0A4F8F4C9FFFFE2C0BDA2151400D5D4A6FAFBBF F2F2AEEDE9AADBD49CF1E0AEF6C891B07C3CF6C680FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFFF0F0FFD9D9FFB0B0FDB6B6FDD8D8FEF2F2FFFDFDFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5F5F8D8D9E7A2A6CF6D78B88AA9B2B1E1B0AEE1ACACDFABACDCAB ACDEABADE1ACB0E1AFB2E1B1B2E1B1B2E1B1BBE5BAE8F6E7FDFEFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D67AE2D67AEADD81EFE285EDE283F4E788 F5E789E5DA7AEADE7EEADC7DEEE185F4E592ECDD89E7D881E1D478E5D879EADE7BF3E783E7DB77 CDC15DE7DB77EBDF7EE0D679E5DB81EAE186EADF83E2D77BE3D97BF2E688F0E382E9DD7CEADB7B EDDF7DF0E280EDDE77EADB74E8D975F2E27FFBEC8BF5E688FCEF91F7EA8DF5E88BE9DF82F9EE90 F2E889F9EC90F8EB8DF6E98AF3E686F1E483F0E482F2E684F3E686F4E788F8EB8DFDF094FFF49C F3D7849E832CF8E38BFFF297F8E889E8DA7CF2E889FBF398F6EB94F8EC96F5E894E9E085E9E082 F4EB8FFBF097F2E78EEADF88F7E991EEE087DBCE71D3C467DBCC6CF4E886FAEF94F1E88DF4EB90 F5EB91F3E990F6EC93EFE58DF0E690F3E993F5EB95F3E994F2E58EF0E284F1E485F5E98AEEE586 E9E082EAE184F1E78AF7E68DF6E08AFAE18CF4DA85BC9841F0C96FFFEB8EF8E485F6EA89F4EB8B F8EC8EF5E58CF0DF88F4E38CF6EC94EAE489EAE580F8F194FFFBB36356255E562CEAE599F0E8B2 D2C7A11C1300635E1EF6F0A3F1E29CE2CA74EEDA83FFEB96ECD987F7E997EEE493F2EA99EFE796 EBE492EFE693EEE590EAE292F0E99EF4EDA2F0E99DF2E99DF2E99BF7ED9DF4EB9AF1E594EBDF8F F5E996F9EB9C75662D8B7D49F8EDAAEFE898EAE48FEDEA97F6F2ACD0CD8F302D01BCBA81FAFBBD EAEBA8FBF9B7E2E1A576733F0E0A000A0400332D16AFAB8FF6F3CFE1DBAB3A3504EAE6A3F3EEAF FFF0C7C7B98A372B00E0D692F8F0A5EDE695EFEA98F7F2A3EDEA9FF4F2ADF0EDB0F0EAB97F7348 0E03005C521FF3EBACF7EEA9E7DF95E6DE92EBE297F0E79DEEE39DECDF98EFE391F1E590EBE38E ECE490F1EB98F0EA99F0E897F0E495F1E093F9E89AFFEEA1D1A95BC38B3CFFF9A3F6FBAAE5E69E FFF3B8FCEAADEEEAA3F1E79AFCDC91C88D46D99B55FFECA8EFE09CF0EAA3F4F5AEEBF1AAEDF2AB ECECA7EDE8A2F1E7A1F4EBA2F4EEA2EFEB9DF4F1A6F3EEB0A7A06F030000B8B675FAF9B7E4DEA6 E4DEA2EFE89DF2EE97F6EFA3FEF4B2F8D58CCD8634F6B864FCF6A5E7E9A6F3EEAEF1E298F1F1A5 EFF5AFEFEAAEECE598EBE596F6F2ADE2DE9DF0ECA9F5F2ACFFFCB6EDE9A3EBE79FEFECA4F1EEA6 E3E096DEDA92F7F4AEFAF5B3F0EBA9F3EEACF9F4B2EDE8A8E4DEA0EDE7A9FDF9BAF3EDB1F0EAAF F3EDAFEBE6A6EAE5A3F2EDABF5F0AEF3EEADF7F2B2FBF5B7E5DFA1F4EEB0FBF5BAFAF4B8F8F5BE F3F3C7FEF2C7ECCDA2B380569F865B8C8B674F54394C4227A59973F8F4BEE4E498FFF9B7E6C387 CAAE5AFCEB9EF6E9A6F7F1ABE4E2AAC3BE9DD6CFC3FFF5D1FFFFCEE6D9A7B89C56FFE799F4E29A D9D08BF3F0AFE3DF9CDFDB93E0D88FE1D78FE6DE96EEE8A5F4F0B1FAF4B6F4EDB0F4EFAFFBF6B5 FBF6B2F6F1ADFBF6B3F8F3B3F8F3B3FCF6B9FDF7BCFAF6B6F7F3AFFBF8B7958E5E201C02908B60 FCF8D1FFFCD3F9F3C1FCF6BCF8F4AFFAF4AAF5F1AFF6F6C5C0BD96A19D81FAFAE23434258F8F61 FFFFC4F1EEAAFFFCBBF7EFB4FFFDC7F0BF80BC843CF9D789FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFFECECFFB8B9FD9394FC8889FBB8B8FCF8F8FFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECFDC1C1F7ABACF1B9BDEBD3DCEAE5F7E4D3F8D3CDECCD CCE0CCCCE9CBD2F5D2E0F7E0EAF7EAE9F7E9E9F7E9ECF8ECF8FDF8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEADF83E1D57AE7DC80F0E587E4DA7B E8DE7FE9DF80E2D878E5DB7CE3D97AECE088F0E091EFE08FEEDF89E6D87DE7DA7CF4E786F6EA86 E3D773E0D470E8DC78DCD06ED2C96AE4DB80EFE68BEAE084E6DB7FE4D97DE0D375EBDE80F5E889 F0E182EBDC7DEDDF7DEADB74ECDD75E8D972EFE07BFBEC88F6E887FFF595F7EA8DFDF094EFE48A F6EB91F2E78DFAED91FBED90FBEE90F8EA8AF2E684EFE381ECE07EF3E686F9EC8DFCEF91FFF296 FFF199F4D784A58A33F9DF87FCE98DF6E787E3D677EDE384FBF297F0E58EEEE28CEDE18CE7DE83 DDD477DDD479E5DA81E6DB82EEE28CF8EA92E1D27AD8CB70ECDD80F6E788EBDD7DFAEF93EFE68B FDF499FBF198EEE48BF7ED93F2E891EEE48FF4EA95FEF49FFBF29DF4E891ECDD7FEFE282FDF191 FCF293F5EC8DEEE587F6EB8FFEF195F0DE85E9D37DF9E08AAE8630E6B961FFE78BF4DE7FEDE07F EADF7FEDE182F8E98DF7E68EEFDF87EEE58BEBE689EFEA85FAF798FEF7AB867C49534C1AECE9A3 ECE3B86A5F46060000CECB65E6E08EF3E39EDCC06B92761DF5DE87F1E18DF1E28FF3E896F1E898 EEE796E9E391EDE793ECE48FE6E092EEEAA3F9F2AAF1EAA1EBE39AEBE196F4E99BF6EB9BF0E492 E9DB88FEEF9CFFF5A4BBAA796C5D33F3E8AAE3DD8AE5E283E2E482E3E68FF2F3AB4C4C1767653C FFFFDED6D5B58785643330170B090025250084834FF1F1B7F2F1B2F3EFB2F2EDB0726C34877E46 FFF8C0F2E6ACFFF2BF645836857950F4ECACECE79CE6E590F8F8A2E3E39BFFFFCFD9D5AE4F4729 0F0301463C15E7E1A7E8E09EEEE69DF6EEA1F2EB9BEAE195ECE29AF7EBA8F3E5A2E7DB88ECE188 ECE28BF0E894F5F09BF1EC98F1EA99F6EE9FF9EE9FF3E597FAEA9DFDE89DC28237DEBF6EFDFDAD EBEFA3EBE0A2E7D79CEDE3A4E3DF96FAE89BD4A85DB9732DFAD18BEEDC97EAE098ECEAA2E8EDA3 EDF3A9EAEBA3F4F0A7FAF1A7F4ED9FF2ED9CF3EF9FEBE8A1F0EAB55B523D342F00ECE9A1F0EFA0 F6F0B5F1EAB0F3ECA3F0EC91F2EB9DFEF3B3FADC91DB9845FCC06AFCF8A7E4E19FF1ECAAEADC8F E5E797ECF3ACF8F2B6EEE599E4DC8DF6F0ACEAE5A1F6F2ADE8E49DF1EDA6F2EEA6E9E59CEAE69D EBE79DDEDA90DEDA90EAE5A0ECE7A5EAE5A3F0EBA9F5F0AEEAE5A5DCD698DDD799EDE7A9F3EDB1 F7F1B5E7E1A4F6F1B1D5D08EDCD795F2EDABF1ECABF4EFAFF4EEB0F5EFB1F9F3B5EEE8ACF1EBAF F5F4B9F8FAC3FFF2BEBB95658F6439442F0581805DBDC2AAEBE5D1D7CCACFAF8C7F2F1ABFBEAAC EDC68BD8BA61FEF297F9ED9AF7F3A1F7F2B84F482C160A0A4A4021CBC08CF6E6AFB89C55EED286 F7E39DE6DD9CF3F0B0D6D391DDD893D1C882EFE59EDED590D1CB89D5D192F0EAABF0EBACF0EBA9 F0EBA9F2EDA9F5F0ACF3EEACF4EFAFFBF5B8F9F3B7E2DCA2D7D190E3DE95EBE6A4F8F7C56A653B 0B06007E7859F7F3D1FDFDD5EBE6AFF2EDABFAF4AAFEFDC0D9D8AA120E001916049B9982464531 5D5D2EFFFFCAEDEBA5FFFDB9F8EFB3FFFEC6F3C084CA9551FCE49EFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7FFD6D7FEB2B3FD9A9AFCAEAEFDD5D5FE DADAFED4D4FEC4C4FDCCCCFDD8D8FEDBDBFED4D4FECBCBFDCFCFFDE4E5FEF3F4FDFAFEFAECFFEC E8F6E8E7EDE7E7F4E7EBFDEBF6FFF6FEFEFEFDFEFDFDFEFDFEFEFEFEFFFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7DE7FEAE282ECE387EAE184 E6DD81E0D77AE7DE81E4DB7EE4DB7EEAE285EDE48AF0E493E3D785E8DC88E8DD84E5DA7EE8DE7D DFD674DDD371DED472E0D675E3D977D8CF70D3CA6FE2D97ED5CB71DFD47AF3E88CEDE084EADD7F EBDE80ECDD80ECDD80F7E88AF1E27BE8DA70E4D66DD7C861E7D874F5E785FCEF8FFDF093FCEF93 FEF49AFBEF97EDE289FAEC92FFF698F8EB8DF8EB8BF8EC8BEFE381F3E785F7EA8AF7EA8BF7EA8B F9EC90FDEB93EFD07D997E27FDED94FDEB8FF6E787F2E586F8EE8FF5ED92EFE48DF2E690F4E893 EEE38BEAE186F3E990E9DD87DFD37DD5C973E3D47FF0E28AFEF196EFE084DACA6BDFD173F4E990 E5DB82E8DE85F1E78EF1E790EDE38CF3E995FEF49FFDF49FFAEE9DF5EA98F0E48DF2E487F7EA8C F5E98BF9EF90F8ED91F0E58AEBE086F2E38AFBEA93F7E38DF0DB85D2AB55DDAD55FFEF93F0D679 F3E483F7EC8CF7EB8DF7E88CF1E189F2E28AEBE086ECE48AF0EA89EEE98BFBF5A7BBB4803B3604 E0DEA1E4DFBC251B0F3D360AF1EE85F3EC95EFDD98E5C870E0C46AFFE68EF6DF89FFF19FF4E794 F6ED9AEDE695EDE795F4EE9AF1EB95FAF3A5ECE7A0EBE49CEFE89FEDE59CF1E89DF1E698E4D989 E7DA89F5E794F0E28FF8E998FBECB34C3F0DD7CD8CECE495E4E189E7E78EF1F3A3F4F5B6ABAB7C 1C1B0352503F211F1500000014120E54532CCFCF96FFFFBDD7D887E7E691E3E092E6E29CC1BC86 342900ECE2ADF3EAA7F5EBAFD2C78F201600BEB87FF5F2B1E5E59DF0F1A9F3F3B8CFCCA23F3925 040000574D1CE7DEACFFFABDF0E9A4F4ECA1E7E192F5EE9EECE397EEE49CF1E6A2FCEFABF6EA98 F3E890F8EE97F8F199F5EF98FAF49EF0EB97FBF5A4F1E899F0E79AFDF3A7FFEEA4E8BC74C3994C F0DD8FEAEA9DE2DF9BE3D698F5E1A8EEE7A2F6F0A4FAE091D9934DCE944FFFE6A0F4E199EBE59B DCDD92F1F4A8E9E99FF2EEA5F3EAA0EDE698F1EC9BF0EC9DF3EFAECDCA99140F02A5A066FFFFB1 EEEC97F8F0B1F4ECB0F7F1A7F5F196F6F1A1FDF4B3FBE093C38531F0B35DF9F6A5E4DE9AECE4A0 E5D687E7EC9BEDF7ADF6F0B4EFE398F6EC9DF8F4ACF5F1AAF2EEA7F3EFA8F4F0A7F3EFA6F3EFA6 F7F3A9F3EFA5E2DE94DDDA8DECE7A1E4DF9DEAE5A3F0EBA9EEE9A7ECE7A7DCD698DED89AE6E0A2 E6E0A4DFD99DE2DC9EF8F3B3E3DE9CEAE5A3F6F1AFF0EBABF3EEAEEAE4A7ECE6A8F5EFB1DDD79B D1CB8FE8E8A7E6EAA5FFECABC59F64A8834DC9B588262305000000494939BDB39FF5E6C3FFFFCD FCEAB5DBB279D1B153F8E180ECDE84ECE78FEFEAAD30290F040000190E0B23170094844F9C803B FBDF94F3E09BF7EDADE5E1A3D2CE8FE0DB99EAE29BE9DF98D8CF8DCEC789DEDA9BF3EEAFE9E4A4 F2EDABF5F0ADEFEAA6F1ECA8EFEAA8EEE9A9F0EAADF5EFB4E5DEA7D7D190E0DD94FAF5B5F1ECB8 FFFFD78B86681A1700736F57EAE7C0FAF6C4EAE6A7E0DC95F1EFB7C0BE98100D0024220F000000 0807004E4E20FFFFC1F9F7B0F4EDA9FCF1B7FEEDBADFAB7EB27D50FAEEC0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFFF7F7FFE6E6FFD1D1FEBFBFFE B5B5FEB1B2FDA6A6FD8484FB9495FCAEAFFDB1B2FDC2C2FEE2E2FEF7F7FFFBFAFFFEFDFFFFFFFF FCFFFCFBFDFBFAFBFAFAFDFAFBFFFBFEFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8DF80E5DC7DEAE084 ECE286E9DF83E4DA7FEAE085E8DD82E7DD82E9DF85E9DF86ECE08DDCD07FDBD079DED379E1D67A E8DE7FDED473DBD170E4DA78E1D878E5DB7CE6DC80E0D77CE3DA7FDBD076E4D97FE9DF84F2E589 EBDE82E8DB7EECDD82EBDC81EBDC7EF6E783E7D970E0D169D9CA63EBDD76F8EA87ECE07EF1E485 F6E98DFCF197FDF19AF2E78EF7E98FFFF395FAED8EFAED8DFBEF8EF4E886F5E987F9EC8CFAED8E F4E789EDDF84F4E38BFCE08D987D26F3D981F7E387F3E485ECDF80F3E98AF9F095F8ED95F7EB95 F2E691F4EA92F5EC91FBF198F6EA94F8EC96EDE28DD3C46FDFD07BF4E68DF5E68BE8D97BEDE081 EBE087E6DC84E8DE87E8DE87E8DE88EDE38DF0E691EEE390E9DE8BECE18FEEE392E9DC88E0D277 ECDF82EEE185EEE187EBE085E8DD84E9DE84EFE088F6E791F5E48FF3E18CDAB35EC2903AFFEA90 F1DA7EF1E484FAF091E4D97CF9EB91E8D880F1E38AECE18AE6DE86F7F098D6D179BBB867E7E3A6 44420BDAD8A6928D71000000B9B377F7F28DECE28FF1DE98F7DC83E5C76CF3DA7FF6E089FAE894 F6E896F3E795ECE493ECE493F2EA97EDE692F2EA9CE8E198ECE59CF2EAA0EEE69BECE398EEE498 F0E698EEE293EEE392F0E594F0E294FFFAB4605A18C0B975F2EBA8E3DE9DF9F6BBE3E1AD9B996B 4746210000000000001E1D0B6C6B56C5C49FF7F7C9F3F2B5E9E79DE2E08EEBE793DDD989F8F0A9 F3EAAD756B366A612DF4EAADE7DFA0F0EAAA908C4F282507E6E4ADFAF8C8ECE9BE7F7B511B1708 080200686134DCD29EFBF2BAEFE7A8E4DD97FDF8ADF5F1A3ABA353E6DD8FE4DB90F8EEA5FAEFA8 FBF09EF3E993F1E791EDE68EECE58EF1EB94EAE48FF6F09DF4ED9DF8F0A3FDF7ABFCEEA5FFECA5 B28640BE9E54F5EC9DECE99EF8ECA8FAE1A6EDE2A1E6E59AFDF2A2ECB169AD702AECC47DFEEEA5 ECDE91EBE699DDDD90DFDD92E6E397EFE79CEBE496E6E190E8E597FFFFCA8D8A65181300E4E09F F7F4A2F3F097F8F0AAEFE7A5E8E198EEEA95F6F1A3F5E8A3FFE293D19642D69943FFF3A2EFE6A1 E8DE9AE3D584D4DC88DBE79CF0EBAFECDD94EEE194E9E39DEEE9A3F5EFA9F8F2ACF8F2ABF6F0A9 F8F2A9F9F3ABF2EDA3F4EFA5E0DB90EFEAA5F8F3B1F6F1AFECE7A5EDE8A7EFEAAAEEE8AAECE6A8 F1EBADF5EFB3F2ECB0F4EEB1E7E2A2EDE8A5F7F2B0F8F3B1F4EFAEF6F1B1F1EBADF2ECAEFAF4B6 F2ECB0E7E1A5E7E4A3E0E294F5D88FBD934FDDBD7AFAE8B169643C0000000108000600007F6E56 E9E6BAFFF7C9DDB278D1B255FFED8CFEF096F2ED95FFFFC29D9879271D19A59B7CA79E6D2B1D05 5C4009EED68DFDF1ADF1E6A8FAF7B9EFEBACF2EDACF7EFAAF9EFA9FAF1B0FBF4B7FBF7BAFEF9B8 F9F4B3EDE8A6F3EEAAFDF8B4F4EFABEEE9A7F5EFB1F4EEB2F5EEB5F6EFB8F2ECAFFBF8B5E2DEA0 F6F1BFEEE9C2FEFBDFC4C2A9231F0D282313D9D5A6FEFDC7E1DB9AF2F0BDF6F6D123210F2D2B1B 0100002F2E1EC3C393F8F8B9EFECA6F5EDADF3E9AFFEE8B6B28251BC8C5EFEF2C6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFFF3F3FF E2E2FFD2D3FECFCFFEC8C8FEB3B3FDBDBDFDCDCDFECECFFEDCDCFEF5F5FFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4DA7BF1E788 F7EC91F5EA8EEFE488E9DE84EFE58AEFE48AF1E68DF1E68DEDE18BEBDF8BECE08CEDE18AEADF83 E1D778DCD272DCD271E9DF7EE7DD7EDFD478DDD276DDD379E3DA7FE6DD82E5DB80ECE187EDE288 EBDE82EFE286F4E78BEEDF84E6D67CECDD82F4E484E9DA74E9DA73E7D871F6E882FBEE88F1E581 F3E786F2E587F4E990F6EB94EFE48BF5E78DFDF092FBEE90FDEF8FFDF18FF9ED8BF6EA88F1E484 F0E384F2E587F2E589F9E68EF7D9868F741DF2DB82FBE78CFCED8EF6E98AEFE586EFE68CF2E790 F7EB95FCF09BF1E78EEFE58BF1E78EF0E48EFCF09BEBDF8CFFF39EE4D57FD7C970DECF73E0D174 E4D779EFE48AE9DF87EBE18AEAE089EAE08AEFE590F1E792F3E895F7EC9AFDF2A0F4E998E5DB85 E4D77EE8DA81F0E289F6E890F1E68DF1E58EF3E791F1E28DF2E38FECDD8AE8D884F7D27EAD7D28 F4D279F7E386FAF192E8E182EFE68BF8ED93F4E58DE9DA85EEDF8AC9BE6AB1A859E2DD8BC7C572 FAFAB3676732999870282308403D1BF5F1A9DED77DEFE293ECD88CFEE387ECD172EBD275FCE68D EFDC86F2E48FF1E694EADF8FE7DF8DEEE391ECE18FF0E696E6DE90EEE599F4EB9EF5ECA1F3EA9F ECE398EAE196EEE197EDE096EBE297FAEFA5F6F3A693914C81804CFEFED1F4EEC7B9B495383419 00000024230A47472A30301FE0E1BAF9F8C7ECEAB4E8E6ACF1EDABF3ECA5EDE59BEDE599EAE097 F2EAA2EEE4A3EBE3A3494107D3CC98E8E2A8DEDB9AFFFFC451501984825AC0BCA22D2714110B00 1E1700858045F2EFB1F5EDAFE1D899D8D08DE4DD97F0E99F7A72279C9446F9F0A1D3CA7BFAF1A2 F4E99AF6EB99F4E996F6EC97F2EB95ECE68DEEE78FEEE792F3EC98F1EA99F3EC9CF2EB9FECE098 FDEBA7F2CA89A9803AEADA8DFDF3A3FFF2ABF9E1A3F0E2A3E1DD96F2EB9DF4CB81B58037D09E52 FFEA9FF7E396F3EA9BE3DE90F0EEA1E9E397E8E095F5EFA1F6F3A4F0F0A3FFFFD3666240767245 FEFEC0F2EE9AE9E68EE9E293F6EDA4EFE8A0EAE598F0EDA0F0E89BFFEA9AD8A14EBD7F2CFFED9E F7ECA8F4E7A2DFD281D3DC87E1EDA4F7F1B7F3E29DF8E79EF5EDA9F7F0ACF8F1ADF6EFA9F3ECA6 EBE49EE5DE96F8F1A9F8F1A9F8F2A8E4DD94F3EDA8FDF8B6F2EDABE7E2A0F0EBA9F2EDADF7F1B2 F0EAACF0EAACF5EFB3F3EDB1F4EEB1DDD898F1ECA9FBF6B4FAF5B3FDF8B7FBF6B6FEF8BAF6F0B2 ECE6A8EFE9ADF6F0B5F4F2AEE9E797F2CD80A27226DCBD70FFEEABB1AB7848502B252F16756F5B 170403504C23E3D5A4DFB478C9A94DF2DB81F3E493F2EB97F1EFADEBE7C2FFFDF0FFFEDFFAF9C8 A296631F0501BEA458FFFAB9FAF0B3FDFABDEBE7A9FAF4B4FAF1AFF5EAA8F9EFB1FCF5BAF0ECB0 F5F0AFEFEAA8E5E09CEEE9A5FBF6B2F7F2AEF1ECABFEFABCFFFCC1FDF6BEF9F2BCF8F1B8EDE8A8 FEFEC9D3D0A0F8F7D3F2EED0F7F5DCE8E5C8403B22353216E9E3B1F4EEB7FFFFCFF2F1D0A09D86 08060311100064634CFCFACAE7E5A7EDE9A5E5DB9DDACD98D1BA89B58649D4B173FFEBB2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFF FDFDFFFBFCFFFAFAFFFAFAFFF9F9FFF7F7FFF8F8FFFAFAFFFAFAFFFBFBFFFEFEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE284 FAED8EF5E88CEDE084EBDE82F4E68DF6E88FF3E48DF3E38FF1E18DE8DB85E7DC85EBE18AEBE287 E6DD80DBD273D6CD6EEAE182F3EA8CDBD276DCD378E0D67ED6CD73E6DD80E6DD80E3D87EE1D67C DFD57BE9DB82E4D57DE9DB82F6E68EF1E189E6D77EEBDB7DE8D877F1E17EEDDE79EEE07AE5D871 F8EC86F4E886ECDF80EADF85EFE48AEDE289F4E68CFAED8FFBEE90FCEE8EFCF08EF9ED8BEDE17F E7DA7AEBDE7FF1E486F0E387F6E38BF7D9868D731BF6E58CF5E287EDDE7EF7EA8BF0E687F0E78C F3E890F3E791F2E691F2E890EEE38BF0E68FF0E490FBEF9BF2E792F6E693F3E58FF3E58DE8D87E DFD073EFE286F3E990E9DF89ECE28BF1E790F0E691F1E692F2E695E4D987DCD180E9DE8EEFE495 EDE18FEEE38BE5D780EFE18AFDEE9AF9EA96F7E794F7E896F2E793F7EB98F5E998F6E998FFDF8D AA7D28DDBC63F3E085F1E98CE5E083EEE88DD9CE76F8E893E4D280FAEC99C5BA6A554B07E9E299 F4F29EE9EA9B93935F27260C080500A1A15EEAE796F2E9A0F1E39BD7C474FFE888F0D676DDC769 F4E085F2E089FAEC97F4E895E9DC8DE5D989EDE08EEDE08EF5E897EDE492F0E493EFE494F2E699 F0E79AE8DF94E4DA93EFE69EF6EDA6E9E19AF0E8A4FFFEBED6D69E5A582BC8C3A4645E4D0B0502 020000322D1D928F6DDBD9AF3D3D12CFCF99E3E39FDEDC94E8E29BF6EEA6F8EDA8F2E7A0F0E29D FBEDA8F4EAA5EEE59FFEF7B287814978734AECE9B9FAF9C6E6E8B7979871121100090600110B00 585334D5D094E9E69AE8E398F4EFA9D2CB83F8F3AEDFD892726924ADA55DF2EAA0F8F2A2E5DD8A E5DD88F3E992F3EB9AEFE595F0E692F3E893F5EB95FDF29CFDF49DFBF19DF7EE9CF6ED9EF6EDA1 F1EAA2F8EEB1FFF6B7D8AE68B58C3DFDE895FFEFA2FAECA6FBEDACF8ECA9F0E69DFDEEA0E6BF72 AD7326E6B96CFFEC9CF8EA98F6ED9EFCF5A8F8F2A6F5EDA2F4EDA2F3F0A3FAF9B1CDCAA5241F07 C0BE84F8F4AAE6E290E9E38FE9E28BECE594EDE69EF5EEACF3F0A6E5DF8EFFED9DDBA655AE6F1F F3DA8EF9EAAAFEF0AEF8EB9AE0EA97E1F0A8EFEAB1F2DF9CFFF0A9FAF1AFF5EDACF1E9A8F1EAA7 F4EEA9D9D28DB6AF69E6DF98F8F1AAECE59DEBE49DF5F0ABEEE9A7E4DF9DE8E3A1F5F0AEF1ECAC FEF8B9F7F1B3F5EFB1F7F1B5F4EEB2F3EDB0EAE5A4F2EDABF6F1AFF9F4B2FBF6B5F8F3B3F3EDAF F4EEB0EBE5A7ECE6AAFAF4B8FDFBBAFBF6ABF0C37DB77F35F7DB89FBE89DCDC688B6BF8E83946E E9E5CB8B7355020100AD9F69E6BC7DD6B55DF5DC8CEEDF96EFEA9BEDECA9EAEABBB3AD97B8B38D F8F7CAFBEFC870541EB89C54FFF2B1F8EEB1F2EEB4F4F0B4F9F3B5FBF2B1FCF1AFFDF3B5FDF6BB FAF5BCFCF9B8EFEAA6F2EDA9F2EEA8ECE7A2F2EDA9FDF8B7FCF8BAFDFBC0FDF8C0FCF5BFF9F3BC F1ECB3FDFDCA312D057E7A55EFF0CEFCFBDDECE9CBD5D2B0241F0B858054FFFFD6F7F5CCE8E9CA BFBEA8656353878673262606E7E5B5EEECAFFEFAB9EAE0A4EFE2B2E0C999A9792DE2C373FCE89D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EADB7EEEDF82F0E287F1E289F1E289F6E68FF4E48EEFE08AF0E08BEEDE8BE7D883ECE189EBE189 E5DC80E5DC80E6DD7EE7DE7FEAE183E8DF84E0D77DE3D981E8DE89DBD278E6DD80DDD577E2D87D E8DD83E9DE84F0E38ADED078DDCF77F6E68FFAEA93E7D780F4E387F4E485FBEB8BF0E07DEFE17A E9DC74F2E680F3E784EEE080ECE186F2E78EF2E78DF6E88EF9EC8FFBEE90F9EC8CF7EB89F7EB89 F1E582EDE180F6E889FEF092F6E98DF6E189FFE08E90751EF0DC84FDE98EF2E384FAEC8EF2E889 F4EB90F9EE97F0E48EE7DB87F1E791E7DD84EFE58EF1E591F4E894F9EC9AFFF6A3ECDC87E8DA81 F4E48CF0E185E8DA7EF2E88FEBE18AEFE58EF2E893F3E994F7ED98FDF4A3E9DE8CDBD07EE7DC8D F9EE9FFBF19FEEE28DE7D885F1E28FF8E997F7E896F9EA99F9E99AF3E797F6EA9AF3E898F3E697 FFE191CCA24FD3B45FEBDA81DAD579E2E083E9E48BD8CF78EEDF8BEAD988FAEA9AD1C47861561B C2BB79E2E48CFBFBA7B7B9830908043B3A17DDDF93DFDE85E2D599E1D08EFBE895F8DF7EF2D978 D8C163E7D478F6E58DFAEA96F5E694EDDE8FEBDC8DF1E192EEDE8DF6E793F1E590F1E38EEBDF8C EEE393ECE193F0E59DF1E7A0EBE29DF9F0ACFDFCBDFBF3B6CDCAA396967D1B180C1F1B0F000000 3B3825A3A081EBE9C3F9F8CBFFFDCD5D5C395D5A27E8E59CEAE596EFE898F6EB9CF4E899EBDB8E F9ECA0ECDF96EDE29BF8EDABEFE7A6EBE9AE3C3815C6C49CA5A38B403E2F17150F000000141300 A09E75D3CF92E9E69AF1EB96F0EA98D9D587FEFCB3AEAA5F5B540FB9B270F8EFAAFAF1A8E1D889 F5ED96F3EB8FECE386EEE694E7DE8FE6DD8CE9DF8CEFE48EF9EF96F9EE95FAEF99F9ED9BF7EB9B F8EC9FF8F1ACF1F1B7EEDFA0FBDA92BA8335E9BD6BFFEF9CEEE99BF3E6A3FBE6A9F2DE9CEBF1A2 FFEC9ADC9C4DC79141FBE08EFCE896F4E998EFE899FBF4A9FCF4AAF0EAA0F6F2A7FFFFBC706C4C 161209DBDA99EBE99DEDE698F9F1A0F1EB8DE1DB82E2DB93F2E9B0EFECA4EEEA92F7E796EDB96A AD6E1EE1C57CFFEEAFF2E3A1F1E494CFDB88D2E29BE7E1ACF0DB9BFEEEAAF0E8A8EBE3A4E9E1A1 EEE6A5F6EEACEEE8A3D1CA85F1EBA6FCF6B0F5EEA8ECE59EEFE9A4E5E09EE6E19FF3EEACF3EEAD F1ECACFAF4B6F7F1B3F9F3B5F7F1B5F2ECB0F4EEB1FBF6B6F7F2B0FCF7B5FDF8B6F8F3B2FBF6B6 F8F2B4FDF7B9FCF6B8F3EDB1EDE7ABF0E8AAFAEEADE7B074C28540F1CF7CF6E08FEDE79F586332 3E522095936DEFE5C3ACAC7EE0D197E1BA77DAB864FDE59AF8E9A8F0EBA0F3F5AFF0F2BE9D9B7E 343307403D29C0B592CAAE75C5A964FFF7B6FFFCC1F2EDB4ECE7AEE4DEA0DED596ECE1A1F4EAAC F1E9B0F8F3BAFBF7B6F3EDAAF5EFACF2EEA7E9E5A0EAE5A0FDF8B7F2ECAEF2ECB2F1EAB4F3ECB8 F9F2C0F0EAB6FDFACAB8B68B0D0B002C2D21B4B490F2F2D0FFFFE0C7C29BA9A47BFFFED4F7F7CF C9CAAA1E1D0C2A29193C3B28171601CDCB9CF2F0B3FCF6B6FCF2B9FFF8CBD8C195AB7830FBD68B FFF4B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7D878EADB7CF4E587F1E286E5D67DF2E28AF0E089EEDE87F3E38EF6E691EFE18BE9DE85 EFE389EAE185EDE386EFE488EDE487D7CD71D9CE74F6EC91EEE48CE5D984E5DC82EDE487D4CB6E DACF73E3D87CDFD478ECE083EADD80EBDD83EFDF86F0E088FBEB91F7E88BF6E78AFAEC8BEDE07F F5E884FAEF89F1E581F7ED89F5EB8AF6EC8DF9EE93F6EB91F4EA8CF8EC8DF9EF90F6EB8AF3E686 F3E987F1E686E7DA7AEDE284FBF094FEF195FCEC92FFFAA2A1812BEBD078FFF196F9ED8FFBEF91 F4E78BEEE488F1EA8FF0E78DF3E690F4E990E3D980F1E58FF4E793F1E591FEF5A2F6E693E9DA84 F0E289FAEB90F3E487EEE182F0E58CF3E991F6EC95F2E890F4EA93FEF59EF4E994F8EE98F9EF9A FEF2A0FAEF9DF2E893EFE38EF0E48EF7EA94F4E891F6E794FAED99F7EA98F5E997FAEE9EF8ED9E F6EC9DFFE899E0B866C5A14AF7E185EEE58AF2ED9AE6E081F1E687E4D885F3E997F4E794EBD98B 5D5115B8B473E8E99AEEF1A7696740050100848350F2F59FF3F296F3E7ADF1E39FEADA83F4DE7F FFEB8CEDDB7DF2E086FFED97F5E493F3E395F0E093F2E295F3E397EBDC8EF1E28FEFE189F2E38F EFE392F4E99BF2E79EECE39DFDF4B2F6EFB2F4EEB7EFE8BB99926E302A130D0A00030000070300 3B382A6E6B5B8B8971A2A182A3A37FD0D0ACD2D1AF44441AD8D699E4E19DE2DE98E6DF98F1E8A2 EEE5A0F9EFADF1E7AAFEFCC3EFEBB7E6E0B1CCC89D5A572F0100000D0A000702000D0B07757457 33320D7C7C3FF6F4A9DED88BF0E99AEFE89AF6EFA2B1AA5C423A00E0D88FF3EBA3FDF6ADE3DA8E ECE494E8E08BE9E189F6EB93EFE794F0E998F9F1A0FCF1A1F4E997F3E695F6EA99FBEF9FFDF0A2 F5EA9BF4EA9CF5F2A8E7F2AFF3EFA7FFE297F5C67BB27B2EF5D485FDF5A7F8EBA5FBE8A9FDEBAA E6F1A1F8F4A2FFD384AA7221E1B965FFE993F5ED9BF8F4A2FBF4A3EDE593E7E297F0F0ACDCDBA3 16140C57532BF0EFAEE7E599F2EC9BF1EB97DED881D8D280D7D088CDC887D1CF84F9F8A6E9E29F FED38FB8762ADBB96CFFF8B2E4D792F5E69FD7DD8FE3EEA5F1F1B1EADA95F3E29DF6EDACEEE6A5 EBE3A2EBE3A2EFE7A6F6EEADE3DB9AEBE3A2EEE6A4FBF4B0E3DC99E7E1A0E8E3A1F2EDABFDF8B6 F0EBA9F2EDADF9F3B4F9F3B5FEF8BAFCF6BAF8F2B6FEF8BAEFEAA8ECE7A3F8F3B1F6F1AFEEE9A8 FCF7B7F6F0B2F7F1B3FFFBBDFDF8BCF7F1B5FCF3B8FFE9AED39B5DDA9E59FEEE9FF2E399E9E39D 80823E1A2806212311C4B692FFFDCBFFF8BDE2BC77D2B360FDE5A1FFF5BFFDF9BBF9FBBAE8ECB1 FEFFD4E2E3AD2323005C523FDEC08CC2A058FAE29CFBEDADF3EBB1EBE7ABF3F1ADE1DB97F1EAA8 FDF6B8F4EDB0FDF8B7EDE8A3F3EFA8EFEBA4F9F5B1FFFCB8F6F1AFFFF9BAFEF8BCFEF8BFF3ECB6 F0E9B5F9F2BDFEF7C2E5DFAAFFFFD0CDCCA13B38170000009F9D86F7F3DAFCFBE1F4F0CDFDFDD8 FFFFD9A5A58407080000010003010048432EF4F2C0FCFDC6E5E5AAFAF1BAFFF8C5CFB17DB1823F FFE6A3FFF8BDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE8DD74E6DA75E5D976ECE081F6E98DF0E289F2E48BE2D47BD8CB72E5D77DF1E389 EADD83E8DA81F1E48BE4D77EE1D27AE8DB82E6D980EFE188F0E389EDE188EADC84E6DB81E3DA7E DCD375DAD170E4DA78DFD572DFD370E9DD79EFE380E5D776CABB5BE3D677EFE382EDE482F3EA89 ECE383F3EA8AF2E889EDE484F1E989F6ED8FF4EB8EF1E88BF4EB8DF8EF8FF7EE8CF9F18FFAF18F F2E988EBE282EBE283E0D779E6DD81F4EB90F1E78DF0E287FFEB909C7621EED57EF4E58AF4F193 FAEC92FAE58DEBDE82DCDC7BE4E382F0DF84F0E089E9DC87EFE08DF7E795F5E693F8E895F2E38F E6D882F1E38AF8EB8EEADD7EE8DC7BEEE389F5EC92F1E88EE5DC82E7DD83F1E78DEFE58BEDE389 F1E88EF2E98EF3EA8FF7EE94F0E78DF0E78CEBE286EEE587F0E689ECE387EBE288EFE58DF3E994 EEE392EBDF91F8E494FFE493C18B34F4E280F5E68BEFE5A2F0E278F2E571E6E08DE3E894E3DF88 FFEB976C621E7D7C3EF1F0B4DBD7B7180E05130900A7A561F2F297ABAA51B5B06ADBD788EDE78C F4E88BF3E58AE9DB81E0CF7AF0DE8DFEEFA1EDDC90E0D085F2E69BE4D98FECE399F2E894ECE187 F0E592F4EA9EEEE49FF0E8A6F6F3B6FCF8C0E2E0B3949174322D2100000019150067643D5B5842 0A07010E0A030501000000000000010B0B0C0E0E0A48494126281D6C704BBCC296C5C89EC0C199 CBCCA4B9B992B6B491A6A4847E7B5E514D372A2516110B010C060008030016120644411EB0AE7A DDDB9CB1B0660D0900BDB970E9E19EE3DB9AE5DA9BB0A3635C500CD3C97FF4EA9CEDE393E5DB87 F0E593EBDF90EFE397FEF1A8F3E9A0F3EE99E9E68EEDE694F4EB9EF4E7A1F6E4A2F4E2A3F4E4A3 FFF7B1EDE59AFEF9ABEDF29FE1F499E6E793F6DF91FFE39BE0A966BA8C48F4D891F5E59DEDE59B F1ECA2F3F3A7FAF4A8FFF5A8D5A151AD7B28EBCE79DFDF8BE0E48FE3E085E5DE7EE0DF8DF3F4C1 97947D0E0A00C4BE7EEEE9B0EAE799DFDE82EFED8EE8E29FEBE3A8E2DE97EBE993F0ED9BF2F1B4 82855EEDD1A1DA944DC98F38FEEC9AF9F0A9F7EBB1F4ECA9E5E697E4EC96EAE798E5DE96F6F1AB F3EFABF0EBA8ECE7A5ECE7A6EBE6A7EBE6A6ECE6A8F2ECB0F3EDB0ECE6A9E8E3A2F1ECA8F3EEAC EFEAA8F4EFADF8F3B1F5F0B0F6F1B1F1ECACF6F0B2ECE6A8F2ECADEFEAA6F5F1ABF5F1ABF3EEAA E6E19EF8F3B0F3EEAEF8F2B3F8F2B4EDE7A9F1EBAFFFFDC3FFEEB4BF8F46D8AC62F9E6A7F5F6C0 ECEAB1F0E2A1E7E6AE292F0F172004E7E0B1FFEFB7E4B976C6A855FCE7ABD9CEA7ACA97BD7D79F FDFFC0F4F3B5FFFFBFADAE7B010000916E42C89D52FFEE99F4E196F5E8AAF0EAACE6EB9BE9EE9D EBECA7F5F2B7FBF7B2F1EE9EF6F3A8E5E197F3EFA8FAF5B2FCF7B8F0EAADFDF7BCF9F3BAF5EEB6 F0EAB1EDE7AFEDE6A9E2DA9BE1D999ECE6ABFFFFCFF4F1D08680700400006964645E594E423F2F D2D1A6FFFCCEB9B28D050900000000141208655A3EFBF8C3F3F9BFE8F6C1EDEAB4FFE8A9D09750 C6A360FFF7B9FFEFB4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBE076EADE78E7DB78E7DA7BE9DC80F0E289EBDD84DFD178E1D37AEADD82 EBDE82EDDF87F9EB92E7D980E6D87FE8DA81DED077DCCE75E3D57CEADC83EDDF86EBDD84ECE188 E9E084E2D97DE0D677DFD573E1D874E3D773E5D975E5D976E2D474D3C466E4D678ECE283EFE686 FEF595EFE788EEE586F9F091F3EA8DF2E98CF5EC8FFAF194F8EF92F0E788F5EC8CF6EE8CFCF492 FFF697FAF192F4EB8CF9F092F3EA8DF4EB8EF5EC91F4EB90F1E489FFE98EA9822DEED37CF4E78B F5F294FDEF94FFEC93F7EA8EE7E785E9EB88F9E78CF2E18AEFE18AF7E893FBEC98F3E490ECDD8B E3D481E8D983EDDF86EDE083EBDE7FECE282F5EA91F1E78EECE289E9DF85EBE288F0E68DEFE68C E5DB81DDD37AEFE58CF5EC92E8DE84F1E78EF4EA91F1E98DF4EB8DF2EA8CF1E88BF9F094F3E990 E7DD87EDE290F7EB9AF4E190FFEE9CBF8931E9C25FFFF297F7EAA6F6E77CFEEF7DEBE693DFE794 ECE994F3DA87D1CA84404102EBEAB65E583E1B120C7A73545E5B16D7D77EB1AF58CAC47AF0EB9F E7E08EF3E894F1E38FFBEB98DFCF7AE3D07DFFF5A3F8E896ECDD8DE9DE8FE6DC8EEFE89AEBE392 ECE490ECE48FECE593EAE299FAF3BAECE4BE8F876E2D2717080501141300595B36B8B597EFEBD3 DEDBC62F2B170200000000000502000806011A180D0E0D010E0F030B0C0006090014160A12130C 17180B21210F0E0D09100C090D08050B0501020000000000100A00504C306C6746282500C5C48D DEDD9DDAD893FBF8B0746F334C4715DED798E7DEA46A5F23776C27D1C67EE5DD8EDED581E3DB83 D8D176E7DF86F1E994EDE494E9E093EAE296EDE896E8E58FEDE694F1E79BF6E9A1FFF0ACF7E7A5 F5E7A5FFF6AFF3EBA1FEFBAEF2F2A1E9F29AEBEB97EBDE8EFFF6ACFEE09ABF944FC9A35DFFE79F F0DD93EDE397F4F1A4E9E696FBEC9EF9EB9AC39042C58F46FFDF95E6E08CEAF494DBDF80E2DA91 F4E8BD29231A5D5827DCD694EAE4AAE6E395E3E383E6E586DDD897ECE5AEE7E39EEEEC96F5F2A1 D5D3980C0E01CEBD8FF9B873B0711CF5DF8EFFF5AFEFE5AAEBE39FD9D787E0E58CEBEC9BE6E399 ECE8A1F1EDA6F5F1ABF7F2AEF5F0ADF3EEACF4EFAFF3EEAEEAE3A6E6E0A2F0EAACF3EDABF4F0A9 F2EEA8F2EDA9F7F2AEF5F0ADE8E3A1E9E4A3E7E2A2F1EBADEEE8AAF6F1B2E7E29EEFEBA3EEEAA3 E8E29FD7D28FE7E2A0FCF8B8FFFCBDFBF5B7FAF4B6E9E3A7CABF84F4DBA5C19654E7C381FFFFCA EDF0C4E5E3B4F2E2A8FFFDCC474B2D0000007A7044FFF7C1D7AB69D0B35FFFF1B3D4CBA489855D 5555219D9E61D2D191FFFFC17E814E0000007F5C33B0843BF5DD8AFAE49AF8E9AEECE6ABE9EB9F EEF3A4F3F4B1F8F5C0F6F2B1EAE497E6E298E6E299E3DF98E9E4A1F8F3B4E9E3A7F5EFB6EFE9AF F1EBB2F3EDB3EBE5A9E2DD9BE6E095F5F0A0F0EDA1F2EEAAFDFCC7FCFAD9A19C89241F0F110E00 0000009FA169E7E0AEF8F7CE5F654F43483993927A251B00ECE6AFF5F9C1E4EFBBF7F1BCF2D693 B3772CE0C37DFFF0B2F8E9ADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE0D56BE2D66FE4D776E5D87AE6D97DE6D87FEFE188EEE087ECDD85 E8DB80E3D57AEADC83F2E48BDED077DFD178EBDD84E4D67DE0D279E5D77EE6D87FE4D67DE7D980 EADF86E2D87FE0D67DE2D77CDCD273E5DB7AF7EC8AF1E483E4D776EEDF80EBDC80EEE082F0E688 E8DF81F6ED8EEEE587EEE587FBF293F7EE91F9F093F8EF92F9F093F8EF92F1E889F1E888F2EA88 F8F08FFCF394F6ED8FF2E98AF8EF92F5EC8FF9F093FCF399FBF297F7EA90FFF096BC9540ECD079 F2E489EEEC8DF9EA8FFEE98FF5E88DEEEF8DF3F592FBE98EF8E88DF4E68DF3E68DF4E68EF2E38E EFE08DE9DA87F0E18DEEE088EDDF86F1E488ECE185F0E58CEFE58CF2E88FF6EC93F1E78EEAE087 F2E88FF2E88FF2E88FF6EC93F3E990EFE58CF2E892F3E992EFE68CF2E98DF3EA8DF3EA8DF8EF92 E5DC81CCC26ADED47FF7EC97F6E28FFFEC97D09E44E4BC5CFFE88EF2E39CFEEF88EADE70EDEA97 E4EB98DCD986F8E394FDFDBB65662F79764C0F0A004D4732ECE7BE9F9B59D1CF7DDDDB83F8F3A3 EFE89FEFE49EEDE195F4E496FFF6A4ECDC85DFCE76F6E58CF5E68EF6E791F1E793DFD685EEE798 EFE69EF2EAA5EEE6A2F3EDABF6F0B78C865C2C250C110A000A0500454521ADB176F9FEBBFFFCE0 E4DED7615B4C0601002C2916A2A07965623B3835121613081110030F0C001C19070703000F0B02 110D021B17090B0800211B07161100140F0527210E423D1C807A5ABBB78FD0D099F1F1B66E6E3A 6D6D36DFDE9CE2E09CE4E19CFAF6B64641186F6935655B2C766D35E9E195EAE293D9D17CE6DF84 DAD477E3DD7EE8E284F1EB8FECE58CE3DB88E9E291F0EB99F0ED9BF4EF9EF1E899EFE599FCEEA4 F5E7A0F1E79EF8F0A7F5EEA4FAF5ACF1EDA1F2ED9CE9E492F6F29FF1E695FDF4A7F7E29AB28844 CEA460FFE9A2F9E69AF8F3A2F0EC9AF5EE9AFEF3A5F1BF7BB96D31E5A364FCE997E9F393DEED94 FEFBBA9180590C0000C0B981FAF6B0EFE9ACF1EE9EF3F394E9E88BF8F2B1EAE4ACF5F0AEF3F0A0 F9F7AEE9E6B0242301B69A6DFFD894B17725EDC476EBD790DFD998D0CA85D7D184E5E390E9EA9B E9EA9EE8E49CEBE7A0F0ECA5F4EFAAF4EFABEEE9A6EFEAA8F5F0AEEDE8A8E7E2A1EFEAABF6F2AC F5F1A6F0ECA3F3EFA5F8F4ADF2EEA8DFDA97E2DD9CDFDA9AEDE7A9F0EAADF7F2B3ECE7A3E8E49D E2DD97E2DD99D7D28FE4DF9DEBE6A6EEE8A9F1EBACF5F0B28F8A490900001C0700401B009A7947 D7CA9FE5E7C3FEFCD8FFF4C4D5CFA211150003090071683FFFF5C2D4A664D4B662F3DFA1FFF7CF F7F3CC91916046470EAFAD73F1F2AC848754170F0CDDBA91D4A964F4E391FFF4AEFAECB3F4EDB5 E2E49BEBEEA4F2F2B3F8F5C3F9F2B8F0E9A2BEBA70E2DE95F6F2ABEEE9A6F8F2B3FCF6BBEEE8AE F0EAB0F7F1B7FBF5BAF5EFB4EEE9A5E8E394ECEA95FDFBA7FFFDAEF2F0ACEBE9B4FFFFE0C0BD9A 111002444616D2D59EDEDAA4E8E4B7E3E7CBE9EED7D0CFB3180F00D2CA94FCFCC5E9EDB8FFF4BD E9C581BB8135F1D690F0E3A3EFE4A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2D670E4D873E8DB7BEBDE80ECDF83E6D87FF2E48BEEE087 E8DA80EADD81E8DB7FDED077EBDD84EFE188E6D87FE9DB82EEE087ECDE85F0E289E5D77EDCCE75 E2D47BEBDF89E6DC86E3DA83E5DA82E1D67BE8DE7FE0D474EDE081F0E385F5E68AEEDE85EDDE84 E8DD83E1D87BF2E98CF7EE91F3EA8DE3DA7DEEE588FBF295F8EF92F7EE91FAF195F8EF90F7EE8E F5EC8CF6ED8EF8EF90F3EA8DF0E78AF7EE91F0E78CF7EE93FFF69BF8EF94F2E48BFFEA92BE9744 E4C570F5E78BEBE987F8EB8DFDE88DF1E489EDED8DF2F393F2E086EBDB80EEE184F1E387F3E58C F2E38DEADB88ECDD8AEDDE8AEEE089F4E58FF6E890EEE389F9EF96F5EB91F1E78EF1E78EF1E78E F0E68DEEE48BEDE38AF2E88FD9CF75D5CB71F1E791F7EC99F0E592E5DB84E5DB82E7DE82E8DF82 F6ED90F8EF92F0E78BF6EC94F4EA92EFDF88FFE790D3A74DC09B3AFFF096F5E296EBDC78DBD069 E2DE8CCFD284D6D184F2E299EFEEB2B1B28A1B1804090500343019E0DDA6E4E09FEAE799EEEA92 EFE991E0D68FEBE0A2EFE19BEFDF94F1E190F1E18AEADA7EEADB7DFFF598EADD84F2E894E7DE91 F4ECA3F7EFB3F7F2C5FAF2CEB3AD90443A2B080200090400504E33ACAE78E5EBAAFFFFBEEEF3AE 9F9B82261C1A000000393419605C2FFFFFC7FCFAB9EDECACCCCB8CAEA9727C764E5B5440413935 0E0605463E373C352D605A4B807A5B928E62B8B47DE3E0A2EBE8A2E9E69CF2F2A4E6E999DADB8E E2E2962C2D01ACA861F4F0B0F3EFB2D6CF956760250C0500847A3FFBF2ACD4CC7CDCD380D4CC73 DCD677DDD776E4DE7CE3DD7BE3DD7EE6DF84E9E289EFE993EDE898F1EDA1F9F3A4F4EB9CEEE595 F5EC9BF4E99BF4EA9DF7EFA4F7F1A8F6F2AAF7EFA6FFF4A9F4ED9FFAFCA9DEE591ECE695FCEFA4 F0CB86AA7836D9B06BFFF5ABF7E898F7F69DF9FBA2EEE29AFFE5ADEFA573CD7439FBD285F9F9A3 EDFAB0CDD1981D1200584329F2E8AAF9F6AFEDE8A5F6F3A3F3F298ECEA93E6E1A0E9E2A9FAF4B8 F2EDA6EFE9A5FFFFCD474122715F36FFF2ADBE893BC7974CFADF98DAD38FC4C077E1D78CECDE91 D9DC8DE2E69AE8E59CE5E197E8E49BF0ECA4F5F1AAF6F2ACF6F2ACF1ECA9EBE5A2E8E3A0EEE9A7 EFEBA1ECE99BE8E499EBE79DF2EEA4E9E59DF2EDA9F7F2AFECE7A7F1EBADEFE9ACEAE4A7EFEAA7 E9E49FE8E39FEEE9A5D9D491D6D18FECE7A8F6F0B0EFEAAAF8F4B6E9E6A8B8B078695642432714 240B000E04002C2F1D727157E0D9B1F9F4CD6A6B4B01040050461FFFEFBAD7AB69C5A852B4A160 817852918D63A09F70A9A875F0EDB8F3F4B2D6D9A42A2419563720A27A35F1DC8BFAE6A2FBEBB3 F9F0BAE9E9A2EFF1A9F3F2B7F7F1C4FBF3BDF7F0ACD6D289D8D48CFDF8B3FCF8B6F9F3B5FEFABE F2ECB2F9F3B9FBF5B9F9F3B6F7F1B4F8F3B2F8F5AEF5F1A5F3F0A0ECEA99E8E79CF0EFB0EAE9B6 EBEAC1262514A1A37BFBFDD2E8E7B6DCDBA7E6EAC5DFE4C3BEBD990B0300A39C6BF7F2BBE4DEA7 F2DCA1D3A663D59E52FFF2ABF5EEACF7F0B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D772E6DB78EADD7DE8DB7EE4D67DE5D77FE9DB82 E5D77EE7DA7EEEE185EEE185E3D57CECDE85F4E68DEBDD84E7D980EDDF86EBDD84E9DB82E6D87F E6D87FECDE85EADF89E7DC8AE4DA87E6DB83EADF85E6DC81E8DB7FECDF83E5D87DF8E88FF9E992 E0D179F1E68CEDE489F2E98EF2E98EEDE489C4BB60EFE688F8EF92F4EB8EF6ED90FBF294F4EB8C FEF596F8EF90F5EC8DF7EE91F4EB8EF2E98CFBF297F9F095FCF398FDF39AF4EA91F3E68DFDE590 BC9542DDC06AFFF497F3F18FF4E787FDE88BF4E78AEAEA89ECED8CF3E089EEDE80F3E687F6E98C F8EA91FAEC95F0E18CEBDC89EBDC89F4E592F6E794F1E28DF4E892F6EB94F6EC94EEE48DE8DE87 F0E68FFCF29AFBF19AF7ED96F8EE97E5DB84E7DD86FCF19DF1E696EFE492E9DF8AEEE48BF4EB90 F2E98CEFE688EBE283EEE588F3EA8FF2E98EE1D37BF8DF85EBCA709E7B1EF5D87FFCE794F5E787 E3D97AECE999D9DB90E8E39CEDE1A0FDFCCFA6A89214110A110F00494721E0DFA0E9E5A7F0ECA0 E6E288E9E582F6EEA0FEF5B7F1E49EEEE194F1E592FCED95F3E688E6D979F0E287E9DD8AF3E89D EEE4A3FDF2B9FFF8CBC3BC9D524A33130C040200002F2B10A7A57BDEE1A8FBFEC2FFFFCCC5C699 4B4C280D090206000037301BE2DDB47A773FCAC583E7E39AE9E599E7E298E1D894EAE0A1F7EEB4 EAE5B24D4A1AA7A470FCFAC6F2EDB6F0ECB1F0ECADEBE6A4E9E59CE8E296E6E190E3DF8CD7D881 F4F3A1E7E59AA29F59221E06DED89C7B743E57501AB0A872AAA46B322C00BCB36AE4DD8CD3CD7B F5EF98DDD87DE6E183E4DF80E7E284E4DF81E2DD81E7E189E1DA86EAE49AECE59EF2ECA0F1EA9B ECE693F1EB97F0E795F6EF9FF5EEA0F7F0A8F3ECA8FAF1ACF6E79FF7F0A4F3F6A5EFF8A6E5E894 EDDF91FFF7AEEBC0789F712AF2CB81FEEC9EF1EB90FEFFAAFDEBAAFFE1B0FFD6A4D38544CC8B42 FFE59EF5FCC3495F25070E05C8BB88FAF1B1F1EEA7EAE7A0F2F19FE5E48FECEB99E1DE9BF1ECB3 B1AC71EFECADF9F8BCFFFCC68C82623C3309FEF5B3D4A55EA26C25F6D18BE4DB90E3DE92F3E69C FBE59EEEEFA2EEF6A8E9E69DE2DE95E3DF96EAE69DEFEBA2F1EDA4F3EFA6EEEAA3E3DF99DFDB94 E4DF9AE3E094E3E08FE1DE90E5E294EBE79DE6E29AECE8A3F5F0ADEFEBABFAF4B6FDF7B9F5EFB2 EEE9A9F1ECAAF6F1AFF7F2B0E3DE9CE6E09EE5E09EFCF9B8FEFCBCF6F1B1F9F4B3FFFCC4DBCAA4 C3AD88E9D7B4B7B0935D5D440909002F2B10D2CEA8F9FAD6AEAE84635A29F4DDA4D5A967C2A54D AC9855352C000400001D1B044D4C1E848050BEBE7FEAEDB8E6E0CE77582EA27D35EBCE7AF9E29A FAE9AFECE2AAEEECA1F3F4A9F3F2B3F5EFC0F7EFB8F2EBA6F4F1A7DFDB93F2EDA9F8F3B2FAF5B6 F9F3B7FBF5BBF8F2B6F5EFB3F6F0B3F7F1B3F6F0B6F7F1BEEBE5ACEEE9AAFCF8B5EFEAAAF7F3B9 F6F4C2ECEAC428251AA5A48EFFFFF0EEECC0FDFDC8ECEFC0FEFFD9CDCEA31E1905958D60FFF7C2 EADBA3E4C689B88B44DEAD62FFF0A8F6F3AFFDF9B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D875EBDE7EF2E587ECDF85E4D67DE0D27A E2D47BE5D77EEFE286F0E385E9DC7FF0E289ECDE85E2D47BDFD178E9DB82F1E38AF7E990EADC83 E1D37AE4D67DE3D67CDBD07BDED383DED481E3D882EFE48BE7DC82E1D479EADD82E1D37AE3D37C F0E08AFAEA96FBF098F6EC92F3EA90F4EA90FDF499E5DC81F5EC8FF7EE92F2E98CF7EE91F7EE90 E8DF80FEF697F6ED8EF3EA8CF5EC8FF4EB8FF2E98CF1E88DF6ED92F7ED93F1E78EEEE48CF2E58D FBE590BD9645D8B962FEF395EDEC87EADC7CF8E386F9EB8EE9EA89EAEB8BFDE992F7E789F6EA88 F1E486F1E389F6E890F4E590F0E18EF1E28FFDEE9BF5E693E8D985F2E690E6DB84F0E68FF1E790 EDE38CF3E992FFF59EEDE38CF1E790F5EB94F7ED96F5EB94F2E894EFE494F5EA9AEDE38EF0E68E EDE28AEBE285EBE283EAE182F0E789F5EC8FEFE68BEEE085E7D378F1D37BAF8E36ECCD73F3DB84 F1E188ABA34ECACA7CD5D48EB0AB6CB6AF799191752D2C280B050D110E04929262E7E7A8E6E4AC E0DC96E5E187EFEC84EDE795E5DA99E4DB92EDE395F9EF9CFCF29BEEE38AE0D57DF7EC99EDE19A F1E6ADEDE3B4BFB38D645E411A1700000000242209888760EAE8C1FFFFD5F7F5CDCACAA666644C 1411040100000C0700524F2BC7C390F1EEB78983489E9857EBE39EDDD68DE7DF94E6DC91E3DA8D E6DE92F1EDA7949053413D00FFFEB8E5E099DDD98FE0DB8EDDD885DED982E7E287EDE888E5E085 C9C774F2EEA1E4E19CCBC78A4640082C25007B7343D2CB97EDE7AEE7E2A386824948410FEFE89B EBE497E5DE8DE7E08CE0DA84D4CE78E3DD87EBE58FE9E38EEFE997E6E08FECE5A0ECE4A1EEE7A0 EBE599E9E393EBE693E5DF8CF1EB9BF2EC9EF2ECA3EFE8A4F5EDAAF2EAA2F6F0A7F7F4A8F2F0A4 E2E091F9F1A2FEED9FFFF4ABD8B66CB1863DF7D892FEF39EEAEC91FAEAACF9E2AEFFF0B8FAD38D C9843EDCA368C3C18D071305526628FFF6BAF9F1B3F1EFACF0EEA6F3F3A4E4E393EFEEA3F9F5B6 D3CF941A16019C975FFAF5BCEEE8B3DBCFA91D1B00DDD699F6D390A46C27E2B46BFBEFA0FEF8AA F9E8A1F6DE9BF0F2A5E9F0A2EDEAA1E5E198E3DF96E3DF96E0DC93DDD990E7E39AF3EFA5EEEAA1 E3DF97E3DF97E5E296EDEA9BF0ED9EEFEC9FF5F1A7F3EFA7EAE5A1F0EBA8EDE8A8FAF4B6F9F4B7 F3EDB0EFEAAAF6F1B0F7F2B1F5F0AEF1ECAAFFFFBFFDF7B5EBE6A5E9E4A3F8F3B3FFFBBBF5EFB6 BCAD83AFA07AEEE7C4FAF5D5FCFBDECECEB03A3B29B4B38AF7F6C6FFFFD0FFFCC2FFECB0DDB16C DCC165FFFAB3F3EBBDB9B58D65633C363321201B0818170052542AD1CEB6FFFFD1C5A056C8AE57 FEEB9FFDEDADEFE6A6E5E593EDEE9DF1F0ABEEE8B3EFEAACECE69DEAE69DF0EBA6F3EEACEDE8A9 F8F2B6FCF6BAF9F3BAEEE8ADEDE7ABF7F2B2FBF6B6F9F3BDFFFCD4F4ECBFE5DEAAF1EAB0EDE6AA F0EAB1FAF5C3F6F3CE5553394442384B4B4351502BFBFBBEE4E5AFF8F9CCF4F5C83F3D278E865A FFFFD2FEECB2F7D493CA9F57FBDC91FAF2AAF6F7B2FAFAB8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD070E3D677F1E388F3E58CECDE86 E4D67EE8DA82E4D67DE4D77BE8DB7DE9DC7EEEE088EFE188E0D279D6C86FE9DB82E7D980ECDE85 EFE188E4D67DE2D47BDFD279D9CD78DBD080DCD27FDFD47FE8DD84E5DB81E3D57CDFD178DDCF76 E6D67FF3E38EFBEC97F9ED97F0E68FF7ED96F4EA93F8EE95F6ED92F2E98EF6ED91F7EE91FBF293 F8EF90EFE687F7EE91F9F093F3EA8DF5EC8FF7EE93EFE68BF4EB8FF4EA91F7ED94F3E990F3E992 F7E892FFF39ED2AB5AD4B55FF5E788E9E883ECDE7DF4DF81FAED8EEBEB8AE7E789F8E58FF4E487 F2E685F5E88BF8EA90F6E890F1E28DFCED9AF7E895F7E895EFE08DECDC88F0E48EF3E892EEE48D EAE089ECE28BF4EA93FBF19AF8EE97F0E68FEFE58EEFE58EEFE58EF1E692EEE394F4E998D7CD77 E9DF87E7DD83EBE285F1E889F3EA8BF2E98BF7EF93F1E78DE8DA80FAE890F9E68FAE913DB6943F FBDE84FFF0A16761189A9953EBE5A63D39016563391B190B000000150F1A161205828155BDBC84 F4F0BDEEEAACDAD985E1E07EECE995DED992F1ECA3ECE599DDD688E7DE90FCF2A5E5DB92DCD191 C4B884786C453A2F200E050000000023230C7A7A54D9DAA4FFFFCBD1D3A2959372524C3E1B1214 0500010200002B211CA6A46CE6E596EFEDA4EBE6A5CAC3866C632AEBE0A7EFE5A6EDE39EE5DB8F E1D683E6DE8DE4DC9FEBE5AC2F29009C9656F4ECACD9D28BE1DA8DDBD580E0DB7DE9E480F3EF84 F6F192D2CC8388803F6B6328726B36ADA5755B532BA79F71FEF7C1D6D094D2CD89D2CE83484207 776E2AEFE6A2E9E099F7F0A5EBE499F4ECA1ECE499EAE397F5EDA2E7DF95F9F0A9FBFAB8FAF2B1 F3ECA8E8E49BEFEA9FE6E497EFEB9CEAE699F3EEA3EBE49EF1EAA6F6F2AEF0F3AAEDEAA2F5EBA3 F7E9A2F2E59DEEE79AF7F2A4F7F0A2F9E69BC9A25BB57E3EEED286FAF09DF0E6A1ECE6A7F8EFAC FFEBA1E4AF6CBF8751634A2B131A00D1DFA2F8F6B1D5D396EAE8ACE9E9A1DEDF95F0F0A9F5F4B1 EFEDAFE6E5AD1F1C11433E18E6E3B0F3EDB8EAE5BC292A1291925CFFF9BCC08A48B27F34FFED9B FAEA9DFEEDA9F9E7A5F1F1A7E6EA9EF1EDA6F5F0ABF5F1AAECE89FE1DD95D9D58CE0DC93EEEAA1 EEEAA1E8E49BEAE69DE9E59BF4F0A5F5F2A7EFEBA1F5F1A7F2EEA7F4EFABEDE8A6E5E0A0EEE8AA E7E1A4EAE4A7EDE7A9F3EEAEF3EEAEEBE6A7F1ECABFEF9B7FBF6B4FBF6B5E4DF9DE3DE9CF4F1B0 C6BD811A0A001A10042E281C48442F67633F91936FE1E8C1FAF9D2F0EEB5FDF6B4E8E59EFFEAA9 DDB16CCAAD51EBD98FE4DCACF8F4CFE6E2C3E7E3C3C0BB986E6C4330330D4B4629F6E7B7DBBA70 D0B75FFCE99BFDF0ACEAE29EDBD882E5E48CEAE89CDED89CEAE5A2EFEC9DEBE79FEEE9A6EEE9A8 ECE6A7EDE7AAF1EBAFF1EBB1E5DFA3E5DFA1EFEAAAF7F2B1F4EFB7E2DFB5F8F2C4EEE8B4E7E1A6 F8F5B5F3ECACF0EBAFFFFECDAFAD8D0B0B00000000000000D0D090FEFDC0F9FAC1FAFACE7F825D 3E390FFFF7C8FFF4BAE2BB77D2AA5FFFE79CFAF5ADF2F4AFF3F4B0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDD071DFD275EADC81F4E68D F7E991E2D47CEEE087E8DA81E2D679E6D97BE9DC7FF2E48CEDDF86E3D57CE7D980E8DA81F2E48B EEE087E4D67DF0E289EEE087E4D77EE8DD88ECE191E6DC89E3D884EADF86EFE48BEADD82E8DB7F EBDD84F2E28BF7E790F8E994E9DD89EDE38EF0E68FE9DF88F3E990ECE289F4EB90F7EE92F6ED90 F9F091FAF192F4EB8CF5EC90FFF699F3EA8DF6ED92FCF398F3EA8FF4EA91F6EC95F9EF98F4EA93 F3E992FBEF9AFFF5A1CDA554D0B15BF9EB8CEEED87F1E581F5E182FBEE8FECED8CE9E98BF7E48E F2E288F0E385F1E487F7E990F9EB94F9EA97F6E794F1E28EF3E48FEEDF8AF0E289F9ED94F6EA95 EEE590E9DF8AEAE08BF3E994FAF09BF9EF9AEFE590E8DE89EAE08BF0E691F2E893EEE391EADF8D D9CF79EFE58CF1E88DF3EA8DEAE184EAE184FBF296F2E88FEDE38AF7E990F4E48DFCED9BCFB267 96701FEBCD70F0E0992F2A009C9B5EFFFFD1302A0821230E0301000B0604040000140E00030000 232200716E44C7C491F5F4B4F0EEA0E7E49DDFDB9CCCC888D7D292EAE5A5F0E8A9DBD0979D935F 2B2100170E00060000160E0557504A989585D5D6B8E4E5C5B3B3945554381A15020D0600070000 080000130B00534B25CDC792F6F5A2F0EF90EAE894E0D992F6F4BC7B713DF3E7B5F6ECB7E7DDA1 EEE69DF2EA9AE8E28DF7F2A7F3EEA98B86443B3518F1EEB4EDE3AEEEE2AEE0D4A0EADFA8E3D69E 9C90547A7031564D0D7E7437D1C78EF8EEB8FEF6C39D9461322B00E1DB9EC5C17EEDEBA1DBD98C DAD490453D00A09859F0E8A7DCD493E7DF9DEBE4A0EDE6A2EBE4A0E5DE98EDE6A0DAD38EE5DC9B CBC382E5DD9CEDE8A6E9E6A2EFEEA9EBE8A3EAE7A1F9F5AEFEF7B1F6EDA8EDEBA4F3FBB2F6F5AF FEEFABFDE6A4F9E7A3F6EEA6F7F9ADEDF0A3F5F2AAFFE8A6B27D41B88242FEE79FF6F3A8E3EC9F F5F4A9FBE59DFEDE9DD9B47F2707009B865EFFFFC8E7EF9E3B3A07A19E6BF5F5B0DDDC9BE2E0A5 E3E0A9E5E3A8F5F2BC5853270E0804BCB88AF6F4BEF2ECBE40442D5E6231FFFFD4EBC27F925A0D EECB77FFF4A7FFF3AFFDF2B1F3F0A7EBEAA2EDE8A4F5F0AEF9F4B0F7F3ACF1ECA8F3EFA8F6F2AB F2EEA5F1EDA4F4F0A7F3EFA6F5F1AAF8F4ADF0ECA5EEE9A5F9F4B0F7F2AFF1ECAAF1ECACE8E3A3 EFEAAAEBE6A6F2ECAEF4EEB0F3EDAFF0EAACEDE8A8F0EBABF5F0B0F2EDABF1ECA9F8F3AFD9D490 DAD691DFD5956B5A234F461E4E4B28332C0A0C04000202002E371DB7BD8FFFFDC0FDF5A8E0DE91 FFEBA7DFB36EE6CA6CFEF0A4F3EAB995916D302D125E5A41948D72BBB985F0F3BEEEEACCFFEFC2 E1C17CC5AC57FFF9ABFBEAA7FEF5AFE1DE84EBEA8FF0ED9EE4DF9FEEEAA1F3F09FEFEBA4F2EDAA F1ECACEFE9ABF0EAADF1EBAFF4EEB2F1EBAFF4EEAFF8F3B3FBF6B4FDFABBF0EFB6FFFBC1C9C486 CEC681FFFEBAE6E091EBE89AEDEDAAF5F7C71C1F040407005E5F31E7E6A4FFFEBBECEBACFBFFCC D4DBB20F0E05BEB184FFEDB2C09A53EACC80FFEFA4E5E39CECEEAAF5F6B2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDF82E8DB80EADC84 EFE189F2E38CF2E48DEADC83E7D980F0E387F0E385E6D97CF4E68CE8DA81E3D57CF4E68DEFE188 FAED94F5E78EE6D87FE4D67DECDE85E8DA81E1D580E7DC8AF0E592EFE48DE9DE84E4D97EE5D87D E8DB7EEFE187F6E68FF8E891F4E48FEADE8DF2E796EFE591E5DB86F7ED96F1E78FF2E98EF5EC90 F3EA8DF5EC8DF9F191F6ED8EF5EC90F5EC90F8EF93F6ED92F8EF94FDF399F3E990F4EA93F6EC95 F2E891F1E791F9EB97FFF09FDBB363D9B963FFF391ECEA83F5E883F7E382FBEE8EEEEE8DEBEB8E F8E590F3E38AF0E388EEE187F2E48CF5E692F7E895E8D986E9DA87F3E48DEFE289ECDE84EFE48A EBDF89EBE18CF0E691F4EA95F5EB96F3E994EDE38EF1E792F2E893F5EB96F4EA95EDE38EEEE48F F7EE98F4EA91F7EE93F1E88BEAE184E8DF82E5DC80F2E88FF1E791EDE28CF6E892DCCE7AF4EE9F FFEBA59B7426DEBC5FA59453120D01B7B775E2D7A64640230000000B0A000F09032E2914080300 120E010A0600100C002420064C492A949263C9C996D1D19DDBD9ABACA97C827D584F482C1B1200 0500000A010018100D554F4186827CAFADA6A09F905A59491411060000000200000200000A0300 251F04544E19A7A257F5F29DF0EB90E0DC7FE9E78EE4DE8CBBB46C61581A3C32008D8350DFD59D ECE4A8D6CD8ADAD389F5EFA5E8E3A5EDE9B3F3ECB8413909A69B72DAD1A8AB9F767C70475C5021 62552372662FB9AE73E8DF9BF8EFACECE2A1DCD393DED598E4DC9E746D2B5E5922E9E59EEBE99E D6D488F2ECA7B4AC6E3A320FC3BB7FF2EBACE3DB9DE3DB9AECE4A3E8E0A0F7F0ACBBB36FCAC580 A79E5B362D00423C06908A4EC5C287F0EEB5F5F4B9FFFDC0F0EDACEFE8A3F3EBA3FAF7ADF0F6AD F0EDA9F9EBABFDEAAAFDECADFDF5B1F3F4ADFAFAB4FBF2AFFDE9ABF6D299B38046C9985AF5E99B F8F9A5EBE696EBDA95F6E6AAEFDEA9381600AC8052FBE5A2D1D280120F073E3A17E8E7A8D1D094 E3E0AEF8F4C7FAF8C0E9E6B2D5D1A90A0300908B61FAF7C0F6F6C572774E31340AFEF2C2FAD592 C89140D39C48FFECA2FFF1AEF7F0B0EFEAA3F7F1AAEEE9A7F1ECADF4EFAEF7F2B0F9F4B1FBF6B2 F9F5AFF1EDA7ECE9A0ECE8A0EDE9A1EDE8A6F4EEAFF9F4B4F9F4B4FAF4B5F5F0B1F1ECADF8F3B3 F4EFAFF8F3B3F4F0AFF9F4B4F4EEB0F5EFB1FAF4B6FDF8B9F7F2B3EEE9A9EAE5A3F1ECA9EEE9A5 DED994EDE8A3E2D896C5AE76EDE8C2FFFFE5FAF1CFDDD3AEBAB6941B2414222807E4DF9EF2E897 F1F2A3FDEBA6CEA25DCDB050FFF7A8FDFAC9AFAA873833260A04000200000402003D401C939078 D3BC93EDD096C9B063FEF5B0F9ECAEF2E7A6F8F29DF6F298F7F3A5F2ECAEFBF7AFF3F09FF9F5AF F9F4B3F8F3B3F6F0B3F5EFB3F4EEB2F3EDB1F9F3B5F9F3B5F6F1B0F7F2AEF7F5B1F1F2AFF1F0B0 F8F4B3EAE3A0EDE599FFFBA9FDFBA7E9EA9EFFFFC85E643D202612E8E9BEFCFBB9F8F1A9EEECAA EBF1BBFBFFE14C4D2B6D5A31F2CC92C8A259FFE99CF9F2A7ECEDA7ECEEA9F0F0ACFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8DA80E9DB82 EFE189F2E38DF1E28DEDDF89F1E38BE9DB82E7DA7DEDE081EFE285F3E68CE8DA81E2D47BEFE188 ECDE85E9DB82EFE188F5E78EEADC83F1E38AECDF86E0D57FE6DC87EDE38CEADF85E0D579E3D87C DFD274DFD274E4D87BEDDD85F0E088EEDE88F3E795F3E898EFE592E6DB89F7ED97F4EA91F0E68C F5EC90F2E98CF2E98AF6EE8DF4EB8DF8EF93F4EB90FFF99EFAF297EFE58CF5EB92F7ED94F7ED96 F9EF98F4EA93F3E994F9EA97FFEF9EE0B869C7A851F9EC8BE8E77FF5E882F3DF7EF4E787E8E987 E8E88CF7E392F0DF89ECDE86ECDD86F1E28CF5E691F6E794F7E895F2E48EF5E78FF1E488F1E486 F8ED91F4E892EDE38EECE28DF1E792F3E994F3E994F5EB95F7ED98F3E993F7ED98F9EF9AEDE38E EBE089F2E88FF2E98EEAE184EEE588EAE184F8EF93F4EA91E9DF89F4E996F0E592EBDD8AE7DB88 EDEA9DFFE7A5C99F57DBB2523E2A102D2A10DAD99FDCCFA647402A000200181600747144BBB983 413C1B0400000A03000D09001411050803000D0903201F113434162523181210060B0600040000 0B01000C05010E0406201B153936302A2B1F141811080A020908000C070104000200000033291D 867E5AA39E5DCECA71F5F28AF0ED80E6E277B0A856ECE49F867D39625B17CAC27FB3AC6A2D2700 48420B585313615C1C6662215D581D4E461E473E1B443C18382C131B11056A603A766A3F9A915D C7BF7FDED68DD4CD7FF0E998EAE28FE1D888D3CA7AECE594DFD789E2DC8EE6E091454200AEAC60 E5E499E3E098E8E29FEEE6A69A9255302801DAD391EBE3A4E3DB9BEEE7A4F2EBA8D4CD8A847D37 F2EFA8E7DF98C6BE7D8C864D5D57236E6A3A7E7B4D605D2D65622AB0AC6FFFFDB9F4EFA3F4EDA3 F9F5AFEEE8A6F1EBA9F6EEADF3EAA9F2EAABF7EEB0F6ECAFF9EFB2FDF0B6F5E6ACEFC993A57037 B59145FDE992FBEA97F4EDAAEAEAB2FFFFCFB4935EB9854BBE8B48FDE19937280A19160CD9D89D F8F6C2EEEDC67C785293925BFFFFD0F3EFCD191300464226F3F3BAFAFECAAFB28B121300E2E0B1 FFE5A1E4AF5BB6721EF9CF85FEF7B3F2F5B3ECE49FFAEFABF7F0B1F2ECAEF1EBADF4EFAFFAF5B5 F7F2AFF4EFABF5F0ACEBE6A2E4E099E8E49EEFEAABF8F1B9FCF5BCF4EEB3F2ECB1F6F0B5FBF5B9 FCF7B9EDE9A8F0EBABF5F0AFFCF8B7F7F1B3F3EDB0F2ECAEF9F3B5F9F4B5F5F0B0E9E4A2FAF5B2 E3DE9AEBE7A0F9F6AEADA160624617C7BD99EEE9D2FFF5D9FFF2D2EEE6CC747F6A00060080793C EBDD8EC9CB80DECB88DCB069E8D06EFFFCABE9E2AEFFFEDCF6F2DCCCC6B8ADA4966A673F1E2100 121000200D07816231B79E5FFEECB1FFF4BFF9ECB2F5ED9EECE693F0EAA1F5EFB3FFFBB7F2EFA1 F2EEA8F2EDADF6F1B1F9F3B7F8F2B6F6F0B4F4EEB2FBF5B7F5EFB0ECE7A6F0EBA7F6F4B1F3F4B5 F8F6BBF7F1B9F5ECB4F6EBACF6EEA6F8F4A8F4F2ACFCFEC8C0C6A2070B00ACAE85F0EBABF8EFA6 F7F3AFF1F7C2F5FFE1BFC3A72A1800BA9558EDC77EFCEB9CEAEAA0EFF1AAE5E5A1E1E19BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1D479 E3D57CF0E28BF5E692F3E48FEADB85F5E78FF2E48AEEE184F0E383F1E486EFE187EEE087EBDD84 ECDE85EDDF86E4D67DF0E289F0E289E4D67DE6D87FF2E58CF3E890F0E691ECE28BE2D77DD9CE72 E9DF82E9DD7FE6D97AE6D97BECDE82F3E48AF5E690F7EB99EFE494F4E998F0E593F4EA94EFE58D F0E68DF7EF93F5EC8FF2E98BF5ED8BF4EB8CFCF397F2E98EE9E085F4EB90F9F096F3E990F8EE97 F9EF98FAF09AF4EA95F3E994F9EA98FFF0A1DFB769B59540FAED8BE5E47CF3E680F3DF7EF1E484 E6E587EBEA8EFCE898F8E793F4E591F5E692F7E895F9EA97F9EA97F7E893F2E48DF4E68DEFE386 F0E283F8EE8EFDF19CF4E997F2E795F8ED9BFAEE9DF7EC9AF2E795F4E997ECE18FF2E795F8ED9B EBE28BE6DD82ECE387FCF396F2E98BF4EB8CE7DE81F8EF94F7ED95E7DD87F0E593F2E697F4E594 EADF8FDDDB91F9E1A3F2C681C99E4155410F3E3A19BDBD86A79873211808050E00BCBB8AFFFFB4 D6D788E8E4AF928B731C130C04000003000002000807001402010400010000000004020409040B 08010C10051506000D0F09120C070B000000000200010600060A000808031F1F0750501F85844A AFAD6DBAB671E1DA94F5ECA3DFD688E3D986E8DD8AE6D9A057491D645A27EAE0A2F4EDA5EAE699 9F9D4EA3A154B9B972A8A868A5A36AA7A46FB8B581CDC797C4BD8EC2BC8E433C0FBEB684F7F0B8 F2EBABF1EAA0E5DF8EDCD87DDED879DBD373F3EA8BE0DB7AD9D372D1CC6DD8D478D7D37BB7B563 4A4800D1CE87DDDA96ECE7A3DAD38EE2DB95564E24494205EFE7A5E1DA96E5DE98E8E29B7D762E C5C179EAE69EEEE69DFAF1AEF4EEB2E6E0AFB4B08643411A2C29071C1808544F17DBD691F7F0A1 EFE699FFF5B2FAF0AFF6F6B3F3F7B4F1F3B1F8F0B2FEEDB5FFE8B2FFF3BCFCF6BCE2E4A7F0E6AD E4B880BB762ED79D49FEEA96F6FAB7E1EAB6F6EEC0987C43D7AA669E631AE4A5687F6246090400 9E9D65FBF9C8BAB6920F0B030D0B00A6A572FFFDDD645D4D201C03E6E9B0EFF8C0B5B88F100D00 DEDEB1FFF2ABFDC972C87C28E0AB62FFF3AFEBF5B2EAE29DF3E2A2F5EEB1F1EBAFF0EAAEF0EAAD F2ECAEF2EDADF3EEADF6F0AEEEE9A5E8E3A0EEEAA4F0EAAFEFE8B4EFE8B2F0E9B3F3ECB5FAF4BB FEFABEFEFCBEF1ECACF6F1AFF9F3B2F6F1B1F7F1B4F1EBAFEFE9ABF4EEB0F6F1B2F4EFAFF0ECAA F4EFABE9E4A0FBF6AFFFFFBABEAE6E3316000B0000201A0565523DBAA287FEF6E3909A8B000600 989157FBECA0ECEEA6D9C585BF934CEBD06EF8EA98FDF6C1D3CEAB686351A8A297E9E0D2FDFCD2 F1F4BFCAC7A7452D131F03009A7E49FFF8C8E4CDA2EADBAAFDF3ABF8F1A3F8F0AEF2EBB5F9F4B5 EFEBA1F4EFABF3EEADF6F1B1FAF4B8F7F1B7F4EDB3FAF4B8FDF7B9EFEAAAE2DD9CECE7A3FAF7B9 8C8C5967623BF7F3CEFCF2D1F8EBC2FFF8C7F1E7B2B3AD7C403F1C3D3F2C000000848663FFFFBF F8EFA5F5EFA9E7EDB8E9FBDBE7EDD50F00009B7443FFE79EF6ED9FEBF2A9F1F4AFEAEAA5E5E39E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E9DA84E7D983EDDD8BF0E190F3E493E9DA87F2E38EF3E48DF6E98EF1E388E4D77BE7DC83F1E48B EEE38AEEE389F3E78EE8DC83EBE087EEE188EDE289E7DD83EADE85EEE48CEEE48DEEE48DE4D982 D9CE76E4D981EDE28BE9DE87E8DB86EBDE89F0E38EF5E893F9EB98F5E894F8ED99F5EB98F4EB96 ECE58FEBE48EF0EA93F6ED95F7EF95F8EF94F7ED92F4EC94EBE28ACEC56CEEE58CF7F097F2E98F F7EE95F6ED96F2E993F1E893F4EB97F8EA9BFCECA0E5C575AC8F38EFDD7FEEE17EF7E688F5E388 EEE38BECE791F3ED99FBEA9BF6E594F8E997FAEB99F6E794F0E28DF3E48DEEE187F3E68AF5E88B F2E686F3E784F2E586F5E894F4E796F5EA99FDF0A0FCEE9EF3E797F0E492F3E694F1E690F7EB95 F8EB95EEE48BF2E98CEEE587F7EE91EDE488EBE286E7DE83F6EC95F6EC97EDE290F3E898F5EA9B EDDF92D1C677EAE393F9E49EDEBF83A5874C392E14575925E0E59E5F572D03000026270E7A763C C6C175ECE89BE8E0A8F1E7C0322813050000372F183F362038331D3F3B1F3634152F2A14241E0B 1D1807171001150E010D0600150D001007002F250D4F432265592D8B8349A4A260C8C67DE3E290 D7D47DE1DD87E0DB8BD4CC83CBC17EE3D99AEAE2A1A29958574A14837440EFE2A3E6DC92E0D88B EAE294A6A057797331EDE7A7E9E6A3E9E6A1D0CD84D2CD81E7E299EAE49FF4F2B175703E352F0A E1DB9ADED692DBD385E4DC85EBE285DCD372D6CC6EE1D877E6DD7BE0D977D4CC6CD3CD71CBC471 E6DE9488804C4B4210E7DDAEE1DA93E8E288DED787EBE49D3127126F643AEFE5B7F8F0BF878147 A39F5BF2EFA2F0EC9AE4DD8EECE39AF7EFABF2EBAFEAE3AEDED9A6DCD6A2F1ECB0DED797EEE69D F6EF9EF6ED9DFCEFABF7EFAAF6F4B1F1F3ADF2F0ADFBF5B4F7EAACFCEFB2FAF1B6EFE8AAE9EBAA D3D48EF8F9AFFACD87BC8039DAAA60F7E59DFBF6B8E5DFAC1B0D00B69968EBBC79C8833EA5744B 1600007E784FFDFFCB76865A0001000103001B150CE6DEC5ABA291252503DFE59FF7FBBFBBBE89 111100DDDFA3F8E8A1FFE697E5A156C79049F5D792F0F0A5E4DF91EFE89CF2ECA7F3EEACF0ECAD ECEAABEAE5A7EDE6A4F5ECAAF7EDA8EFE7A3EDE8A6F0EEADEFEAACEDE6A9F2EBAEF9F2B5F8F1B5 FCF8BCF4EEB2F8F2B6F7F2B5FCF6BBF5EFB4EAE6ACF1EEB6F0EDB5F4F1B7F8F5BBF7F5B8F3F4B6 F9FBBBF6F4B4F2ECADFFF3B7FFFCC3DABE84A88B51C3B68C9B8F746355483B2C1B2D2615313724 161803C8C68CFFF5ADEBE59BFFEDA7DBAB64EECF79FFF5A7FFFBBFD4D0A05E5B423B3424201A04 3F3B246C6D4FE7E8CD9E8A6D100000684E28FEF4BBFDEFB9F6E4AEFBF2B1FAF5B5F3EFB4EDE8B0 F9F4B1F7F2A9F6EDACF8EFB1FAF1B2F7EEAEF6EEADEFE7A5FFF8B4FFFDBAF5ECA8ECE49EEBE39C FAF5B5AEAC79181301433B2BBCB39EFDF7E2F8EDCAEEE8B9E3E1B342402F0000000809008B8B68 FBF6C3F4E9A5FEFAB5EFF0B4EBF4C9EDE8C443260AB1804DFFF7AEF9F3A9EAF7B6F8FCBAFDFAB8 F9F6B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEEDF8CEBDC8BEADA8AEBDB8DF4E496EADB8CEFE08EE9DA85E7DA81EADB83E4D97FE6DC83 EAE087E7DD84EBE188F2E88FF1E78EEEE48BF2E88FF5EB92F5EB92F1E78EEEE48CE6DC86E4DA84 EDE38EEDE290E8DD8CEDE292EADF8FE9DE8EE8DD8DE4D888E7DC89F2E48BF3E68BF5EA91FBF19A FBF4A0F9F39FEAE593EDE796F5EF9BFBF49DFBF29BF9EF98F5EE9AFEFCA7F4EC97F5EE95FAF399 EDE68BF7F095F5EE94F0E891F2EA95F7EF9CF3E99BF5E59BF4DE8EB49A42F0D377FDE588FDE88F F8E895EFE595F4EB9EFAEFA0F8E99AEFDF92F0E190F6E795F5E692EFE189F2E48CE7DA7EEDE082 ECE07FECE07EEDE17DE8DB7AF6E892F6E796F7E897F9EA9AF6E699F1E392F3E493EFE08CEFE189 F0E28AF0E287EBE182E4DB7CF0E788F8EF92F0E78CEDE38AEFE48DF3E994F8ED9AF2E796F9EE9F F7EC9EF3E79DE7DC8DEFE389F0DF93F1E0AE66573C0905007C823BB5BD720E0D02201B05A79F6A 8B82402F2600847A3FE7DDA0F4EAB2BCB17AA49A64E7E1A3F5F4B6F0E99EEBE593F3EC9DDDD592 DBD395D4CF92B8B579AAA86FA8A36AAAA266B4A667D5BF79EDCE84F9E495FBE690F4EF91E2DE82 DED87DD3CC73DED683DAD384CEC67BE2DA96C6C0806C682A7D783CC9BF81F1E29DF1E497DCD27E E1D784E2D68CDFD495746830DDD397D6CD87DCD683C7C265CCC664DAD578DDD882E1DD91CDCA85 4C480E989250ECE4A0DDD186D8CB75E3D479EBDD82E2D680EBDF88F2E78CEFE586E3DA7CE4DB82 D0C777DED491DFD29D5D4F287B6B48FCF2A6D2CD64E4DD86FFF7B5CCC19424180A9C9079AEA486 423B10F0EDB0F9FAADE7E891F4EE9AF9EF9FFBF2A5F1E9A1EBE29DF1E8A4F7EEAAEDE59DF0E89D F2E999EDE391EBE392F9F1AAF4EDA7FAF3ADF7F1ABF2ECA6F5EEA8F4EDA7F5EEA8F6EFAAF4EDA7 EDE7A1DFEC98D8EA90FFF5B1EEC78EAE7538D5A65BFFEFA5FAF5B81B1A00A99974FFF3B7DDA551 BA8145350B00473A1CE9F8B56E8C512B432B1E2623070100CCBEACBAAF9C323408EAF4A3F6F4B5 D9D8992D3300DEE49AF2E8A0FFF2ABFACF8CB87E3CD7AA62FFF8A6F4F39AE9EB94F3EC9EF2EEA5 F0F1ACEEEEAEE9E7A6EBE3A0F5EAA2F8EAA3F3E8A4F5F0B0F0F0B2F3F0ACF2ECA2F5EEA7F4EDA9 EAE3A0F2EDACF1EBADF3EDB2F7F2BAFAF5BEF8F3BFF4F2BFF1F1BDEEEFB9F5F4BCF8F7BFF5F5BB F4F9BAF9FCBDEFEEAFFBEFB3FFE8B2FFE0AFC79D68C7AE6AFFFAC2FFFFDDFFFFF2F6F1E7CECCBD C4C7A8B8B887F6F2B4EEE49EFDF0A7FBDF95D8A45BF7D388FFF0A8F8EDA8F9F4B8F8F6C3F6F5CF D4CFB0B3AE994F4E3C1A190B483B176E57288D753AFEEAA6F3DE99FAE9A7FCF2B8FCF8C3EFEEB9 EFEDB1FBF7B0F9F2A8FEF7B8FDF1B5F3E8AAE3D897E2D892D3C981D4CA82FDF4ACFFF6AEFDF3AC FBF0A9FDFABAFCF8C5A8A38539331D0F09044D4635CAC6A7FFFED3F5F6CDD4CFC8130E0C242611 D8D7ACFEFCD3FAF2B7FEFBB8FDF8B5F9F3B9EDD7A0CBA46AF5D593FFF4B1F2ECA9ECFDBFEFF0B1 F8F3B4FBF7B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEADB86E4D581E5D684E5D685ECDD8BF2E391E7D886E8DA84E9DB82E9DC80ECE185 E8DE84E5DB82E8DE85E7DD84EDE38AF2E88FEDE38AF0E68DF2E88FF1E78EEFE58CECE289E2D77E E0D67DE9DF88ECE28DEADF8BECE28FEADF8DEAE08EEBE08EE5DA88E5D986ECDF85E3D57AECE188 FAF099F7F19AFCF6A0F1EC98F4EF9AF8F29BFBF39DFAF199F5EB94F5ED99FFF7A3E7DF89C6BF66 F5EE93EEE78CF7F095F6EF95F3EC94F7EF9AF7EF9CF1E798F9E99EF9E897C4AA52FCE287FEEB8E FDE88EF9EA95F4EA9BF4EC9DF7EC9CF7E999F8E998EEDF8BEEDF8BF6E792F3E58DEDDE86F1E488 EFE285F5E889F6E989F0E482F0E383E9DA82F0E28DF8E995F7E895F4E594F4E593F3E492F5E691 F2E48CF2E48BF5E88CF4E98DEBE283F3EA8DF7EE92F5EC90F8EE95F7ED96F3E994F5EA98EFE493 F6EB9BFCF1A2ECE093F1E693F3E98AF7E7A9CDBB952C210E121100C0C38B5857380703005B5624 DFDA88DDD689B4AC5F4A42144239008A8044D8CE92FAF0B2E6DC9CE4DA95E4DC92DFD889E1DB87 DFDA84DFDA86E7E592E6E494EFEDA0EFED9DDFDA88EDE28CD0BD62C3A94BFFEE8CF3DD85FAF1A3 EEE798E1DA8BE3DC8EEDE699D5CD81B3AB646D651F575009A09A55E3DD98FBEEA9EDDF96EDE190 F2E890EAE08BF0E498F6EBA9968B518F8549F2E9A3D7D17FE3DE83CFC86CD8D279E3DE8DDDD990 FFFCBBB1AD6F534C1EDFD692DCD086D3C674E1D17ADECE7ADDCD83E8D88AF1E38FEFE489E4DC7A DED776EAE488DCD583EFE79FC6BE7E322803C1BB6EE0DC82E6DF94D6CD90FFFACBBFB590100500 342C09DCD6A6FBFBC4E7E49DF5F5A5F2EA9AF1E998F5EC9EF3EBA0F1E9A1F7EFA7F1E9A1EBE39A EEE79BF4EC9CF1EA97F0E798F3ECA5F4EDA7F7F0AAF0E9A3E8E19BE9E29CF6EFA9F7F0AAF5EEA8 F2EBA5F2EBA5E2E696DAE28EFCF2B6FFEEBBEBC892B28F4BC3AC66FBF6B9372D0A98875EFFEDAD F3DA86C3A263331800221501EEF3C2828E66475345D0D8D50005005F6049312E1A4D4C2AE1E29C EFEAACEAE9AA9FA561E9EFA8F3ECA4FFF2ACFFE9A7D9A461C19048F6DB8AFFF69EE9E48CECE697 EBE99FEEEFAAEEEFAEE9E8A7ECE7A0F3E8A0F5E79FF7EDA6FBF6B3F4F3B4F2EFABF2ECA2F3ECA4 F3ECA7ECE5A1F2EDACF4EEAFF7F2B6F1EDB5F6F1BAFFFCC6F8F5C0F0EEB4F1EFB3FAF5B8FBF4B7 F2EFAEF0F0ACF6F6B1F4F0AAFFF7B5FFEFB3FFD6A0B08544E8D77FFFFDC0DFCFB35347464E484B 949384EAECC3FFFFC8F1F0A5EEE7A3FAEBB2FFE8AADFAE65F0CC81FFEAA2FDF4AEEFEDAEF3F2BC DFDCAEEAE5C3F7F3D8FFFFEDDAD8C0726541DAC494C5AD73FDEAA8F5E09AF6E5A1F4EAADF5F2BB EFF0B7F1EFB3F8F3B0F2E9A5FEF6B9F6ECAFEDE3A6E0D796E4DB97D9D189B4AC64D0C880E1D992 ECE7A1FBF2AEF4ECB1F0EBBFFEF8D5DFDAB6494525120D000F0B008E8C68D7D7B9D2CDCF100B09 30321AEDEEB9FDF9CAF2F0BBF6F1B5F8EDACFFEDA9C8A563E4C280FFEBACFFF7B9F1EEAFEDF2B2 EDECACF4F0B0F6F2B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBDD85E5D780E9DA86EBDC89F0E18DECDE89E3D47EEDDF86EEE185EADD7E ECE284E8DD84E4DA81ECE289E9DF86EAE087F1E78EF0E68DF2E88FF0E68DEBE188EAE087E6DD83 E7DD83ECE388EBE287E4D981E7DD84ECE28CEBE18BF2E892F6EC98F2E894F4E893F8EB8FE4D779 ECE285F8EE94F0E991F5EF98EFEB93F3EE96F2EC94F6EF96F8EF95F2E88FF9F19DFDFAA5ECE38B E5DD84F0E88DF6EE93FAF296F6ED94F2E991F7ED98F8EE9CF6EA9BFAEA9EF7E291BAA148F9DD80 FFED8FFFEA90FEEF99FAF0A0F9F1A1FAEF9FFBED9BFEEF9AF4E68FF2E38CF5E790F2E48BECDE85 F8EA90ECDF85F1E487F3E689ECDF82F3E689E3D679EADD82F5E88DF6E791F7E893FEEF9BECDD89 F7E893F5E78FF4E68DF6E98DF3E98CEFE688E9E083EBE286F1E88DF2E88FF3E992FBF19CF5EA98 E9DE8DEBE090F3E898FCF1A2EBE08BEBE281CBBE7E4032170900004F4B1B85805B0D03032C240B D2CD81E4E278D4CF72EBE491E9E291C6BE7481793B51470B685E2EB3AA65E6DD97EAE299EBE396 F1EA98E6E087E1DD83E6E58DE1E18AE0DE8BD5D37EC8C26BEEE388E6D575CBB450EDD06BEAD682 E5DB9AE8DF9FF6ECABBDB47189813B5B520D6B621EB1A963EAE295F1E99BEEE598EFE296F1E493 FDF29BFDF499EFE58EF2E797F5EBA5C5BB7B4F4607ECE49CDED687E9E38DD6CF78E0DB87E4DF8F E0DC95E9E4A3E1DC9D5F571A9A914EEFE59CDDD281EDE08AE9D986DBCB7AE3D484EADC8BE9DD8B E0D582D7CE78E4DE87DCD77EDDDA81DDDD82959541373606D1CF8AEBE8ABEAE6AFB1AD78514C2B 302A0B2F2A03D0CB95F3EEB4FBF8B8EDEBA3EEE798ECE592F2EA9AF6EFA0F7F0A4FEF6ACF2EAA0 F9F1A7F8F1A2F1E899F1E999F6EFA1FAF4ADFBF4AEF6EFA9EFE8A2ECE59FEDE6A0F7F0AAFBF4AE FBF4AEF6EFA9F2EBA5EEE99FEDE79EEFE2AAF7E6B6FFFBC9E7D1928E7B39CFBD83574319A18E5F FFF2B0F9EE9AF4EDAA5D5532040000A79E82C9C3AE1A1916282C27060F020008000A0D00ABAA7F F5F0B8DFD49BE5E2A4EDF1AFEDF7AFEFEFA7F9EAA2FFEDA8F9C984BC8B41E3BC6CFFE790EADB85 EFE799EFEDA3F0F2ADE8EBA8E6E7A3EFEBA4F4EBA1F4E89EF2E8A0F1EBA8F3F0B1EFEBA7F0EAA0 F7F0A8FAF3ADF5EFABF4F0AFF6F0B2F9F3B8ECE7ADEEE9B2FEFAC3F3EFB9F4EEB0F4EDADFAF1B0 F9EEADF5EDA8F8F2ABF7F2A9FDF8ADF8E79EFFEAA7FDD596AC8036E6DA7DFFF8B5847659000000 01000001000051552AF1F3AFEAEA9FFBF3B4F6E7B7FDDFA6CFA258E9C77CFEEBA1F3EBA3F2F1B0 F3F2B8F9F7C5CFCAA27A7451635F47B5B393FFF3D1FBF1C4A58D56E3C988FFFCB5FBEEA6FBF3B0 F9F8B9F4F5BAF6F3B8FAF4B5F7EEAFFCF1B8FCF5BBFDF6B9F4EAABFAF2B0F9F0ACCFC581F6EFAB E5DF9BCAC17FF3EAABFFFEC8F6F1C8F3EEC6FFFFCEF1F0B39A976B1E1C09000000262117372F37 080301282D0EE5E6A1FAF8C2FAFBCBFAF6C1FDEDADF6CC7ED6AA59F2D388FFF5B8F6F4BCDBDAA0 DED897F4EFAFF9F5B5FBF7B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE8DB80E4D67DE7D982EADB85F1E38BEDDF87E4D67DE3D67AE5D879 E9DD7BEDE383E1D77EE4DA81EDE38AF1E78EF2E88FF3E990F2E88FF3E990EDE38AE7DC84E6DC83 EBE287E3DA7FE1D87CF0E78CF3EA8DE8DF84EDE489EDE38AF4EA92F7ED96F3E992F4E992F9EC8E EADD7DECE282F3EB8EF0EA8FF5EF97EEEA91F1EC94EAE58BEFE88EF8EF94F2E88FFFF7A2FFF8A3 F0E790FFFBA5F4EB90FCF398FAF196F9EF96F1E78EF2E892F7EC9AF1E695EEDF91F5DF8CB89F44 F5D87AFEEA8BFCE78CFAEC93F6EC9BF8F1A0FBF09EFAED99F4E58DEFE188F2E48BF5E78EF1E38A F1E38AFCEE95EFE188EBDE85EFE189F0E28AF4E68DE9DD7CE8DB7BF1E486F1E489F0E28AF9EA95 F0E18CFBEB97F8EA92FAEC93FBED94F1E68AE9DF83E2D97CE5DC80F2E98EF1E78EECE28BF3E994 F7EB9AF6EB9AF3E898EDE292EADE8DF2E690E8E080584E1B0D0300746B428A805F190D00150600 B7AA7DEBE68ED5D55DECE980DBD778DDD87DD7D07DEEE699EFE79E8E863F463E05362E025D550C 958D42CFC87BDFD88EE6E097E0D994C9C682E1DC99F6EEABEDE49EE7DA91FCECA0F5DF91D6B967 DEC882C0B57A90864B6F64274C43028D8442D8CE88EEE59AEAE092ECE190F9EE9AE9DD88EDE18C E9DF86E8DD82F3EA8DFCF299F8ED9BE8E095FFFCB78077329A934BFFFCAFE8E190D9D37FEBE594 E9E395EDE9A0D0CB86E7E29EC4BD78524A02E9E195EFE494D3C974E2D67DE5D57DE4D67EE6D887 E5DA8BE3D88CE4DB8ED4CF7DECEB94D8D97AD0D56FE6EC845C5E185A592CDEDDAE81804C191700 2F2D12D4D2978E8C5A251F00AEA96ED1CC94ECE7A9EBE599ECE594F2EB9AF3EC9CF3EC9CF9F2A4 FCF5A7F4ED9FF4ED9FFEF8A8FEF8A8F3ECA1F9F2ABF9F2ACF2EBA5F1EAA4F8F1ABF9F2ACEFE8A2 F5EEA8FCF5AFFDF6B0F6EFA9F7ECA8F7E9A9F8EBB5F3E8B4F4EAB4FFF5B7D2C289C1AC7D352009 665632FFFFC8E4E595FBFFC3999E7804000029190CA7968E332526080700000800000C00AAAE85 EBEABFDED4A0EADDA5DCD899E7ECA9DDE9A1ECF2A8F8EEA6FFEAA1FFE7A1D6A359CEA051F9D07E FEEE9BF4E99CF3EFA6F4F5AEE8EBA6E4E5A1F1EEA5F6EFA2F6ECA0F1E79DEBE49EF0ECACF0EDA7 F2ECA2F8F1A9FAF3ADF5EEA9EEE9A7F9F4B4FBF5B8F1EDB2F2EDB5FAF6BEF3EFB6FCF6BAFCF3B4 FEF0B3F8EAABF2E8A6F9F2AEE7E099EFE79EFFEFA6FFF0A9C99D5AA17A30F5E68DFFFFC1BDAF87 170E06000000262613000000A7A770FFFFC5E2DAA1FBECBDF4D59ACBA057EBCC82FBEA9FEAE49A EAEBA7EFEEB1FEFECF8C85580F07000802000804005B4E2CFFF8D1A9925FD0B87AFDE8A1FDF2A7 FFF9B0F9F8B3F5F6B5F5F3B9FAF3B8FEF3BBF9EDB8FDF4BDFFF9BEEFE5A8EDE3A5F0E8A7F8F5B3 FBF2B0F7EDAFFAF2B5FDF3B6ECE3AFFBF9D1F3EFC0EBE9AAFEFEB7FFFFCBB9B7881C1A04050000 050007030000373D19F1F3A7F6F7BCF0F0C0FEFBC8FDE2A0CB9643E0B056FFF19EFBFEBDE5F0B8 F8F6C0FAEDB0E4DD9EF0EDAFFBF7BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7DA7DE5D77EE3D57CE4D67EEEE087F1E38AF4E78BEADD7E E7DB79EADE7BE5DB7AEAE085E9E085E7DE83F2E98EF5EC91EEE58AEDE489F1E88DEBE287E5DC81 E8DF84EEE589E3DA7DDDD476EAE183F2E98AEFE688EBE385E9E183EDE489F1E78EEEE48BF0E58D F4E787F0E482EAE080EDE487F1EC90F4F094F6F297F6F196E9E489EDE68AFAF294F5EC91FBF19B F5EB95ECE38BF0E68CF9F196F2E98CF5EC8FFDF499F4EA91EFE58DF3E994F3E897F7E89AFCE995 B89F44F0D473FFE887F7E284EEE087EBE28DF1EA97F7EC9AF2E58FF3E68AEFE285F4E78BFAED91 F6E98EF2E48BFDEF97F8EA92EFE08BF2E38FF9EA96F2E48CEDE07EE8DC79F5E988F8EB8EF1E389 F5E78FF7E991F8EA92F0E28AF8EA92FDEF96EFE48BE9DF85EFE68BEEE58BF4EA91F7ED96F2E891 ECE28BEBE18CF3E895F5EA98F1E694F1E68FF3E990D5CF774E4C1E898449D6C9BD32211E120100 7E6D41FFF8B2E0D578DEDA67EBE77CE0DB77E0DB78EAE388EFE792EEE597F0E79BD4CA80BAB066 8B813A584F1B473B0D3B2D05483A1A5245255046256F6142807253746343735E3C8E744F81623A 56350B553E08695D1A786D2A9E9550D4CB85FCF3ABDCD488D8D081EBE08FF1E591E7D980E6D77E F3E88BE7DC7FE8DD80EEE588E6DD83E0D581D7CE7EE3DA8FBDB56B433B00DFD78CDBD486DAD584 EBE693F1EC9BEFE99AE5DF92E4DE91E0DA8D67611D7E7729E7E08DE8E08CE9DF88EBDD82E4D67D E2D57DE5DB86EAE18CEAE390E8E391EAE898D3D484DADD8CD8DB8ED2D3A4212005262608050700 45471CB5B772C5C680D2D38C585832363107E0DCA7EBE6B2DEDA90E6E291F0EB9AEEE796EEE695 F9F0A0EAE192E6DF8FE4DD8DEEE89AF0EB9DE5DF94F5EEA6F7F0A8EDE69EEDE69EF7F0A8F8F1A8 EDE69EECE59DF5EEA6FBF4ACF4EDA5F0E6A5FAEFB3FEF5B6F3EAA6FDF6B1F9EFB2FFFECFB3A687 140700201700E3DEAAF9FCB7EFFCBCADB7920907020D04010400000B000020160E64612FB5B96C E1E1AFC0C08FECE9B1F1E4A9DFD799CBCF8CCEDA92DBE49AE8E79DF6E198FEF7AFFACC81C18E41 D7A354FFEB9BF6E99BECE59BF6F4AEF0F2ADE6E7A2EEEDA3F8F1A4F9F0A2FCF3A8F4EDA5F0EDAB F2EFA9F6EEA7F6EFA7F8F1AAF9F2ADF6F1AEF6F2B1F6F1B3F8F4B6F9F4B9F7F3B8F6F5BAF8F4BD FFFAC3FFF7C2FBEDB9F4E8B2FAF1B9DFDCA0ECE7A9F0E3A4FFF7B8BC975BC6A363FCF0A7ECE09C F5EDB5CAC699868262B2B1963435242F2C13DDD9AFFFFBCBF8F0B8EFD290D5AB61F5D68BF2E296 F3EEA4E6E6A0DFDE9FF1EEB5E4DDAA453C25282008665F34190C037D6B4BD0BB8CCFB77EF0DB96 F9EC9EF2EDA0EDEFA4F0F1AEF3F1B3F8F0B8FDF1BDF2E8B3EFE7AEFBF2B7F4ECB0F4ECADEFE7A8 F1E8A9FFFDC0FBF4B7F8F0B4EFE6ACF9F2BAFCF7C3EAE4B0ECE9A9E6E79CEEECB2FAF9C79E9B6C 1C180D010000544C45BFC27BE7F0A6E3E8A8EAE2AAFFEAB2E1B36FCC9541FEE187FDFDA7E2E9A0 E3EDB2EBEAB3D6C891DCD598EBE8A9FAF6B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E385E9DC7EDFD277E1D37AECDE85EFE286EBDE80 EBDE7EE4D875DED26EE2D976EFE689EEE589E7DE81EBE286F0E78AEDE488EFE68AF2E98DF0E78B EBE286E9E084ECE387E4DB7EE1D878E9E180ECE483F2EA88EDE584EFE685F1E88AEFE68BEBE188 ECE189EBDE7EFDF18EF3EB89F1E88BFEF99DF7F398FAF69BF9F59AEEE98DF4ED91FBF396F0E78C F4E993F8ED97FBF197F5EA90FFF69AF3E88CF0E689F9EE94F9EF95F0E58EF0E591F9ED9DFAEC9C FEEC95BDA346DFC361FEE784F6E484EEE085EBE28DEDE591EFE590EEE18AF0E388F7EA8CF9EC8E F8EB8FF7E98EF3E58CF0E28AF9EB96F4E591F2E392F7E896EBDC87F6EA88E8DC78F2E683FCEF91 F7E98EF5E78EF8EA92F8EA92EADC84EADC84F3E58CF3E88EF3E990EDE389EFE58BF8EE95FAF099 F6EC95F3E992EDE38EE8DE89EEE490ECE18CE3DA7AEAE282E8E198D7D791F6F4C76154510C0000 281102D9CB73DFCD72E2D474D5CC63DDD66CE8E178E1DA74E6DF7EECE389E6DD89E5DB8AEDE395 F1E59AEFE499E9DD91DCD389C1B872C9C17ECDC683ABA562A39A588D8442978B479E904AB29F58 C7B168C0A75EBBA757EBDE88EDE28BDED680E4DD89E6DF8CE6DE8CEEE693F1E692EDDF89EEDE87 EBDB81F3E687E5DC7BE9DE80E8DF83DDD37AE9DF88E7DF8BDFD786F1E99B716923ACA45BEAE299 EDE895E6E28CE3DF89EAE690EFEB94E6E18BEEEA93E6E18A3D3900A8A44ED3CE79E0D886E2D485 EBDE8AE7DD82E1DA79E6E27DF0ED8DE8E690E6E39CE6E5ADDCD9B08B886A3C392A0C0B01000000 4F512AEFF3B7E9EDA7EAEDA1E4E69BE9E9A2645F34322C11D9D19EEAE6A4E5E296E3DD90EDE697 E3DC8BF5ED9CEBE393F1EA99F5EE9EF1EB9EEFEDA0F5F3A8F4EEA6F7F0A8F6EFA7E9E29AF0E9A1 F3ECA4F7F0A8EBE49CE6DF97F6EFA7F4EDA5F8F3B6EDE9AFFFFDB3FAEF99F3E691FFFEBCEBE4BF 313020010000010100646137FFFBBFF4F8BECCD4AF181C140A0B020200000D0000B49B75FFFFBB F2E18DDAD091CACC90DCE0A0E6DB9CE2DB9BD6D792D3DD94DAE399E8EBA0F6EA9FFDEBA2FEE39A D5A256BD8739E6BD6EFFF8A8F1E499F3EFA9F6F6B0D3D38CECEA9DF8F2A2FAF1A2FDF5AAFBF6AE F9F6B4F5F2ACFDF6AEF9F2ACF5EEA8FFFAB4FDF8B4F9F4B3FBF7B7FDFABBFEFABBEEEAAEF5F3B9 EBE9B8888457ECE4BAFFFFD8FCF4CCEFEBC1F7F8CBF1F0C0958F5E6B59317E612FD7BC88FFF6B4 FAF1ACF4EEAEFBF9C1F9F7CCFAF9D9C2C1AA332E202A2412BDB788F8EFB6E8CC89D5AA61F9DB90 F8E99CEAE69AE2E39AE4E4A1EDEBAEFAF2BCEDEABCBCB486DFDBB1AEA37A140500988454CFB983 FFF0AFFBEFA6F8F2A5EDEFA2F0F2AAF8F6B6FAF1BAF9ECBBF8EFB9EEE5ADFAF1B8FFF9BEFFF7BA FBF3B5F7EFB0F9F0B4F9F6BEFAF0B8F4EBB3F4EEB1FAF7B5F5EFB6F6F2B7F6F3B4F1EFBAF4F2B8 FFFFCAC8C59819130B7E766EFFFFD5EFF8B7E3E8A8FEEFAEFFD996E0AB64F5CB7DFFEB9AFEF9A4 F0F3A4ECEFADEFEDB7F5EFBFEAE5ACF7F3B6FAF5BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDE081E4D779DACD71DFD177EBDD84E1D478 E6D97BE6D979EBE07CF1E581EDE47FE3D97CE4DB7EEEE588E8DF82E3DA7DEAE184EEE588EBE285 EFE689F0E78AE7DE81ECE387EBE287EAE184F0E886ECE482E9E17DE7DF7CECE382F1E88AEFE58C EEE48EF3E992EFE282F5E987F2E889ECE386F0EA8FFCF79CF4F095F9F499F2ED92F9F297FFF99B F7EE93FDF19BF8ED94F1E68DF7EC91F3E88CEDE286F7EC90FCF197FDF298FBF197FBEF99F9EE9A F7E896FCE890B79F3EDABE5AFFEA86F5E281EEE185EFE68FF1E994F2E891F3E68DF2E589F7EA8C F4E789EFE286F1E489EFE188F0E18CF9EA96F4E591F0E190F6E797F0E18DFAED8CEADE7BECDF7F F6E98CF8EB91FBED95F5E78FFBED95F1E38BF0E289FAEC93FEF399F6EC93EEE48BF1E78EF9EF96 FAF099F9EF98ECE28AE6DC87F4EA95EAE08BE7DD87F5EA84D4CA68F0EAADF1F1C7727057020000 341F0B937C43C9B050EBD66DD0BE5AE3D578DFD671E0D96FDCD46FDFD776E7DE81E7DD84DBD17C E3D888E9DE8EE7DC8DE7DB8DE6DE8BECE786E5E27EEFED89E0DE7AF2EF8BECE684F1E886F1E581 F3E780F5E780DBCA62C9B84FE4D66CEBDF77E2D975DBD574DCD679E4DE85EBE48CEDE28CE7DA82 E8D881EADA80F0E383E9E07FEDE286EAE087DDD37CDDD27CE2DB83E3DC87F3EC9AAFA85C665E1D E4DC95DFDB87B5B158B7B35AEDEA8EFEFB9DFAF79AD9D579E4E086ADAB54868432F0EF9FE6E293 F1E998DFD782E3DD84E0DB7FCFCC70E4E38DE8E59CD4D19C9792703B3422120903060200333119 9D9D7B292A02C2C387FBFBB8E2E598F0F3A6EDECA6F6F3B5443E13403913E7E5A8F8F7B3F0EDA6 F2ECA1EEE697E0D787F5ED9AF3EB9AF3EE9DEAE899E7E79BEFF0A4EBE59DECE59DF6EFA7F1EAA2 F6EFA7F6EEA6FCF8B0F4EDA5E4DD95F8F1A9F7F0A8EEEEB0FDFDC4F8F4A2F7F291FCEE92FFFCBB 99997B000200050B0B0106041D1806B7AA7CFCFBCDE9EAC7262B210007004E5429756741B2905C E0B76BFFF49BE3C882EAE6A0E7EFA1EBE19AF1E7A2ECECA4E4E8A1E0E89EE8EBA1F3EEA3FEECA3 FFF2A9FEDB8FD8A75AC19345F6E08EFFF8ACFEF3A8F7F3AADBD98FEEEA9EF9F2A2F8F0A1F5EEA2 F2EDA9F2EEAFF2EEA9FBF4ACFAF3ADF8F1ABFDF6B0F7F3AFE9E4A2FAF5B3FAF6B6FDF9BAFBF8B8 FDFBC0F6F8C9333419322E0FAEA788FAF6DAEFEED1ECEED0FFFFE9B3B08D453B200D00009C8859 FFFFC0F3ECA5F0EBADD8D49EFBFACDF5F5D3F6F6D9F2EED36C6753020000C3BE8AF6E5A6D4A95E F0D284F8E99AE5E194D9DA91F0EFADEAE8ABFEF8C2F0E8B6FFFDCDF3F1C3FFFACF3C2F0C342208 C8B482F9F6BDEDE19EFAF6ACF1F3A5F0F2A6F3F2B0F7EDB6F5E9B7FEF6BFF3EAB1F0E7ACEFE6AA F2EAACF9F1B3DFD899F4EBB0FFFAC0FFFBC5FBF1BCFDF9B9F9F7AAFFFAC0FEF8C4F9F2BEF5F1C2 F2F1B3EFEFA4F7F7B97D765F2D251BDDDEABEFF6BAFBF9B8FFEAA1EFBC6EEFBD73FFEBA5FAF0A9 F7F4A6F8F4A2F6EFA7F2EDB7F0F0C5F2EFB8FEFABEFFFAC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6D97CDFD276D8CA71DCCE75E4D67D E7DA80EEE184E5D879E8DC7AEBDF7CE1D775E4DB7DDAD175EAE184E6DD80E2D97CEEE588EEE588 E8DF82EFE689F4EB8EECE386E7DE82E8DF84EBE285EBE382E3DB79DED672D9D16EE0D876E6DD80 E6DC84EAE08AF4E995F8EB8EF1E384FCF294F9F094EAE489FCF79FEEEA91F6F098F2EC92F3EC93 FAF197F4EB91B2A651EADF87F4E990F9EE93E8DD80F1E888F8EF8FF6EC8FF0E58BFAEF96FDF19C F5E995FCEE9BFCEA90C3AB49E0C55EFFF089F6E481EEE183EFE78DF3ED94F8EE96FBEE95F6E88E F3E68AEFE287F0E289F3E58DF0E38AF4E590F8E995F0E18EECDD8CF4E594F4E591F3E688EADD7E E5D87BE7D97FEDDF87F6E792F2E28EF8E995F6E890F3E58DF9EB91FAEF95F3E991F3E992F3E992 F4EA93F4EA93F4EA93EBE18AE7DD86F4EA93F4EA93EFE58DEFE47CFAEF8FE4DEAA78766A000000 0F0C00AA9A5BF5DF92AD8B37F2D669DEC95FE5D57FDED475DFD773D9D16FDAD271E3DA7CE7DE82 E3D980E4DA83E2D881E0D582E1D684DFD882D5D174EBE78AEDE88BC2BC5FDAD475F7EF90E3D97B E2D576E8DB7AE9DA7BE2D271D9C65CD2C04DEBDB6AE8DB6FD7CD66E3DD7CE3DE81E0D980E6DC85 E9DD85E3D47CEADA81E5D77AE7DD80ECE08AEDE28FEBE08FE3D985F0E98FEBE48AE0DA82E6DF90 827933C8BF7CDCD987B5B25BC5C166F6F194E5E082DBD679E0DC80E7E58EEDED9F3B3C0291924F F4F3A4E3E07EEAE98BE4E090EFEBAAD9D29FA9A17A61573C27200A040000000000352E1095906E DBD9B4FFFFD58C8B56292900D0D08AF1F0A8E7E69EEAE7A2F0EFB0E9E4A7484323484620DCDB9E FEF9BAEEE6A2F5ECA0EFE494F3E896F0E896EEE998E9E798E8EA9DF0F0A6E5E096E9E399F4EEA4 F5EFA5F8F2A8F3EDA2EEE89EE1DB91EEE89EEEE89DEBE59BEDEEAEE9F0B3F9F5A2F5E98AFFF29D E6E1AA353520000700728176161D1407020034210B837250A7A0821E22180E1C00E4EEB1E8DCA5 BE9659BD8637EFCE76FFDB97FAEFA4F3F39DF7EC9FF7EDA2ECE79EE3E39AE4E69FE7EAA1ECEBA2 F7ECA3F6E196FFEEA3FAD386C69949E3B964FFF7A6FDEFA1F1E59AF0E99DF1EB9DF1EA9AF2E99A F3ECA2F6F1AFF7F7B8FAF6B5FCF5AFFFF9B2FFFAB4FCF5AFF7F3AFEEE9A7FFFDBBF9F6B3F8F4B4 FAF7B7F1F0B3F6F9CAD5D8B08A8864423D2A342F19989780E1E4CBF3F8DEFFFFF0918A700C0000 443411F8F2A3F7F1AAF1ECB65E59322F2B16807D5AE5E6BEFBFACDE5E4B2292614342C11EDD099 D7AC62EDCE81FAE99BF2EC9DE7E89FEBEBA8EEECAFA6A170A49F6EE7E4B3FBFBCFF9F5C3BCB380 2E200C3A260CD4C08DFFF9C0EFEBA5EFF1A5EFF2A6F2F1ABF7EEB3F8EDB6F9F0B8F9F3B9F5F0B3 EBE6A6EBE7A7F6F2B1FFFCBEECE7ABA7A165E9E5AFF5EFB9EBE6A5F1EEA0FDF6BEFBF4C6F1EBBA ECE5B8F3F0B1E5E695EDECA5AAA486030000B8B684FEFCC2FFF8B5E8BF6EE1AE5AFFDD91FDEFB1 F6F2B6EDEAA8FCF2A6FFF9B3F7F2BAF1F5CBEAE8B0F4EFB4F7F2BAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEE085EBDD83E6D880E3D57C E2D47CF0E28AECDF84EEE183E9DC7BE2D674E2D877E9E081E0D778DDD475E9E081EEE586EBE283 EDE485EBE283ECE385EEE587EEE586E9E085EAE088EAE086E7DE80E5DD7BE7DF7CE4DC79E7DF7D E9E083E9DF87EBE08EF2E695EEE087EBDE80F4EA8EFBF298F2EC94EDE791F7F49CFCF7A0F9F39B F7F097F8EF95F4EA91827620E3D47CF8EA91FBEE92E9DD7FFEF193F8EB8DEEE185E0D378F0E38A F7E994F0E38EF5E792FCE88EE4CC69DCC159FAE27BF9E682F0E383E9E186ECE58BF4EA91FBEF95 F7E990F3E58CF5E78EFAED94FAEB96F5E690F8E994FAEB97F5E693F1E28FF1E290F0E18DF7E990 F9EB92F5E88EF1E28DF6E793FCED9AF6E793FCED98FBED95F6E890F4E78BF3E88FF0E590F4EA95 F4EA94F1E790EFE58EF0E68FF4EA93EFE58EEFE58DFBF198F3E990ECDF82F8ED9CA8A37C101108 060A005F6127EEDF88FCE48FCEA454CBAB3DE3CB61E8D686E7DA81E2D77CDBD075DDD277E4D97D E1D77AE4D97EDFD57BDED47AE3D87FE5DA81E3DA80E3DF82E2DE80E1DD7CC9C365D7CF70ECE482 DCD272DED172E2D575DDD070DDCF6FE5D169D9BF51E7D063ECDA72E3D572ECE286DED87DD7D279 E2DC82EBE188E5D87CEADD80F3E88BF2E78FEBDE8EE7DB8EEADE91E5D988E0D97FF5EF91E1DC81 E6DF8DCFC781A09857E8E599D2CE7DCAC572EBE68EE1DA7FEFE990EBE68FE5E193DEDB979E9D64 2B2A03C1C37FFFFFA6EFF0A0A6A3686C6642312717140A07090000020000251F0299955CE8E599 FBF7B5F9F4BEE7E1A8F9F9BF9692574C490CE9E5A4F9F9BBE9E6A3F1EEABE6E4A1F0F0AD4D4C25 413F21F7F6BFFBF9B9FBF0A8F3E899ECE28FF0E895F0EB99EDED9DEAEEA1EBEDA2E7E298F0EAA0 F3EDA3ECE69CF2ECA2EEE89EF1EBA1EDE79DE2DC92EDE79DEBE59BD6D393E5E5A8E0DD95FFFEB7 EBE7A9625D3C000000575D45ECF5CE83875C0000000E0100110200170B07000000808749FDFDB5 F3E09FF1C787CA9549975F0CF5C988FFF8AEFDEB93F7EA96F1E797E5DC90E4DE95EEEBA4F1F1AB DFE199F6F4AAF8EFA3FFF0A4FFE699EFC775D5A34DE8C16EFFE898F5E496F6EC9DFBF3A3F9F0A1 F7EEA1F6EEA7F5F0B1F5F4BAFAF7B7F8F1ABF9F2ACFAF3ADF4EEA8F3EFABF6F1ADF7F3B0F4F1AD FCF8B6F3F0ADF1F0B0F7FCC1F7F8C5F4F2C4F7F0CBB0AA8C3936181517104F53356B6D4C151108 160900332600F1EEA4EDE9A5EDE8B3C6C29C6864470000006D6C45FFFFD0EFEEBB46431E100B07 D4B781DDAE65F2CF84FDEB9DFBF3A5F5F5ACEFF0AEFCFBC0807C480D0B003B3A21C6C897FDFDC7 FBF7BDB3A97D200C004A3826ECDFAFE7E2A3EFF1A6F2F5A8F4F4ABFBF2B3F8EEB2F1EAADFBF5B7 FFFBBCFEFABAFAF5B4F6F1AFF5F0AFD0CA8C767034DED79FFBF4BEF7F1B4F3EFABF6EFBBF9F1C0 F9F2BBF1EBB6F5F1B0F3F1A5F9F8B78C856B110900908D52FFFFBCFBD18ACA9D4DF5D180FFF6AC F4EAACF1EDB4E9E2A9F8EBABFCF0B3F1EAB4F8F9C7F9F7BEFDF7BEFFFAC2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFC F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFC E6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDD83EADC83EADC84 E5D680DFD07BEEE088E6D77FEDE084E5D879DDD070E2D877E0D677E6DD7EE0D778EDE485EDE485 E2D97AEAE182E9E081E7DE7FE8DF80EAE183EFE58CEEE490E5DB83E0D77BE6DF7CEBE381F0E885 EEE684ECE387EDE38EEDE293E9DE8EECDE85EEE085E5DA81EDE48DFAF39CF1EB95F3EE9AF5EF9C F8F29DFBF39EFCF39CFAF097FFF29CFFFCA5FEF198FDF094ECDF81F0E385FDF091F2E589E9DC81 F4E68DF9EB93F7E995F7EA93FDEB8EF8E885DEC35AF8E079FCE985F0E383E5DD83E7E087F3EA8E F8EC91FAEC94F8EA92FAEB97FBEC97F3E490EFE08BF7E893F9EA96FAEA97F5E693F1E28FF0E18C E7D883F3E390F3E491F1E290F5E695F7E897EEDF8DF2E38FF9EB93F5E78FF2E589F2E78DF1E691 F4EA95F5EB95F3E992F0E68FF6EC95EFE58EEAE088F6EC94EAE087EAE087FFF4A9CABB85504A2D 141B062C390DDFE48BEADB85FFE08EDDB258D4AF3FEDD26CEDD98CE3D481E4D883E1D67EE0D57C E2D77EDFD478E5DA7EE2D77BE5DB7CE5DB7EDACF72CAC164BFBA60D6D176E5E085E4DD81E1D87C E4DB7FD6CB6FE6D97EE8DB80E2D479DACD72E5CD6FEAC865E4C666F0D97BF4E48AE6DC84D9D37D DCD67EE1DD81E5DD80E4DA7AEADE7DF7EC8FEFE38EE8DA8DE9DD95EEE299F0E494F1EA90E6E07F E6E183FCF5A2EDE59F766E2FD2CD89EAE79FD7D184F4EE9CECE592F0E896D8D184E3DE9BF1F0B8 F8F7CE44441E3E40176A6B362828000E0B00050000090100170D04362D148F875BEBE7A4FBF9A6 EBEB8AF2ED99F4EBA2F7EFACEEE5A5FCF5B758522C4D4714F4EFB2EEEBAAF4F1ACF4F2A9F2F3AC FFFFD443402558522DE7DEA4F6EDA9FFFCAEF5EA9AF9F29EF5F09EEEEF9FE7EB9DDFE397ECE69C F4EEA4F0EAA0E9E399F6F0A6F5EFA5DED88ED7D186F8F2A8E7E197E3DD93ECE3A1F1E7ACFFFEC2 D9DCAD4F55340000004F4D3BFFFFD8F1EDA8F6F4AF6E6C3C1815070C03020E03020A00009E9455 F6E798FEE7A2FED696FED38CCB974CAD753DE8B773FFE790EFE188F2E994F0E495F4EBA2FBF6AE F6F3AEECEFA8E5E89FEEEEA4F9F1A5FEF1A3FFE895E2A84FC99944F6D684FFED9DFBEC9EFAEFA0 F6EC9FF7EEA3F7EFABF5F1B4F3F3BBF8F4B5FCF4AEF8F1ABF5EEA8F7F0AAF4F0ACF9F4B0EFEAA6 EBE9A3F9F6B3EFECA9F5F5B1EDEEA9E3E2A0F8F0B6F4E7B7FFF7CDFFF9D3A6A47F35362221210B 130D05271A00C0B384F1EAA9E0DB9BEEE9B0F1F0C0FFFFDA474523000000B6B38EFFFED9595628 120F05C3A669D8A65BF4D084F8E598F0E99BF1F0A7F0F0AEF1F1B5FFFFCDE6E4B5282903353823 E2E2A5FFFBBDF8EBBC7D6A480D0000BAAA84F3EEB6F7F9B3F3F6AAF4F4A8FBF4AEF2E8A9FEF7B7 F9F4B4F5F0AEF9F5B2FCF7B3F7F2AEECE7A5FCF6B7F2ECB0FAF3BBDBD49EEBE4AFF9F2BDF3EBBA F7F1B6FBF6B2F2EFB1EFEBA8F2EFAAFCFCCB6158450D0500939148FFDE8CE8A85BDCB366FCECA2 F3EBA5EEE9A9FBF2B8F6EBB6F5E9B9F1E8B4ECE7B0F7F4B9F5F0B5F0EBB2F3EEB6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5 FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5D77EE3D57D E9DA84EADB86E7D982EEDF89EEE088E9DC81ECDF80EEE182E7DC7CDDD474E3D979E6DC7DE8DF80 E9E081EEE486EFE586E6DD7EE8DF7FEEE585EDE485F1E790F0E593E1D780DED57AEEE585F0E887 F5ED8CEFE687ECE288F4E996F3E898E7DB8CEDDE86F2E589F2E78DF0E890F5EE99FBF5A0F0EA98 EDE795F4EE9AFDF5A0FDF49DF9EF98F9ED94F9EC93F8EC92F9ED91FAEE90F2E685F5EA8BF5EA8C FBEF94FDF197FAED95F7EA94F5E790F1DE81F2D976D7BD55F9E178F8E57EEEE280E9E183EFE88C F8EF93FAEE93F5E690F0E28DF2E490EFE08CE6D884EBDD87F3E38FF3E68FF5E891F4E590F1E38C F4E790F2E390FCEE9BF6E997F4E594F8E898F5E795F1E391F3E490FBEF96FAED94F7E98DF8ED91 F5EA94F6EB97F8EE99F9EF99F6EC94F4EA90EEE48AECE287E8DF85E1D880EBE18DDAC78F5E4B2D 241E0C2B3705C5D777E9EF94E2D189F7D587E9C457D2AB3AEBCA69F0D589D6C578EDE18FF1E591 E5D984E4D880EAE085F3E98DE8DE80E5DB7CEBE082E6DB7DDAD175CFC977E0DA88DBD483E3D986 E5D987E6DA86E8D986EDDD8CDFD280E6D887EADE8EECD380ECC770D3B05AE2C472FDE697EEDE8F E6DC8CE9E38EDFDB81D4CE6FDED773E8DE79EBE085DED382E8DC92F7EBA9F8EDAAFFF6ADFFF8A4 F2ED94F9F39CF4EDA0FBF3B1948C526E6930FFFDC1FEF8B7FCFAB8ECE59EE5DD97C8C17FA49F66 7E7A4C43402A28260F0401000D080C0500000100002E2B196A6740ABA869EBE79FFDF9A9F5F19C EAE590E2DD87EDE48EFDF8A5E8DF91F4EBA6F5ECAFEEE6AB423A196E6937F6F4B5E1E19AEDEEA2 F1F2AAF6F5C8F3EFC94C4929352D0CDED897FBF0A8F1E798F6F09CF1EF9BF2F4A2F3F7A8EDF0A5 F8F4AAF5F0A5EEE89DEDE79BFBF5A9F6F0A3DFDA8CDAD487FEF9ADECE79CE9E499F6E8A8FFF2BE DDDBAB3F482D0002001C221BD4D1B6FEF2B6FAEC8EEBE38BDFDEA6BCBFAF87847E80746C99856F 9D8546C8AC5EF9DB95FFE4A5F5D692FFEAA6C18753A15F20D59C49FAE68CF0E48DEADB8BF0E399 FBF1ACF3EFABF0F1AEE3E7A1ECEFA6F0EFA3F6EFA0FFF19EFED278D69F4AD2A756FDE697FFF5A6 F7EB9BF7EC9FF8F0A5FAF3B0F7F3B8F3F1BCF2EEB1FFF8B2FDF6B0F7F0AAFEF7B1F5F0ACF3EDA9 F2EDA9E1DE99EDEAA5F5F3AEF4F3ACEDEE9FF4F0A2FAEDA9FEEEB5F5E6B3FAF3C4F8F4CAF0EDC5 C4C198898154BDAE82FFF8CAE9E1B0E3DEA4E2DF9BD7D68DF6F5B8AEAC8108040047442DF8F5D7 D1D0A5A6A569E8CD87CE9C4FFAD688F8E89CF4EAA1FFFFBDF5F5BCEDEBB5EEECBAFDFCD1C5C8A1 060A005C5C25F8F7BBFFFACAB19C791500006A5A3EFFFECAFCFDBAEDF0A3F0F1A4FFF9B3F9EEAD FDF9B6F8F6B2EDEAA7EEEBA6F5F1ACF4F0ABF9F6B4F3EEAFF4F0B3EFEBB2FAF4BDF7F2C2F7EBC3 F6EBBDF5EDABEEEC99E5E39BE6E3A1F5F1B7F2EFC944382E070000B5AE5AEDB75BF4AB57FDE39A F9F4B2E9EDABEBE5A4FDF2B6F9EBBAEBE4BBEBE9BDF2F0B7F1EAA6F8F4B9EFECB5F5F2BCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4D67D EEE087ECDE85E3D47DEADC83ECDE86F1E38AE6D87FE6D97EF4E78BF5E889E8DC78EADE7CE5D978 EADD7FF0E487F2E58AF3E68BF1E586F3E785EFE381E4D874E2D67DE4D989E9DE8CEEE48FECE28A ECE38AE5DB81E5DB82E5DC82ECE28AF1E78FE5DC84E9DF81F3EA88F6EF90F1EB8CF2EB8FFAF399 EAE38AF4EE96F9F19CF7EF9AF6EE99F9F29AF3E98FF8EF94F7EE93FAF094F6EC8FEBE283F4EB8D F6ED8DF8EF90F8EF90FBF293FAF496F1E98CFFF296FCE989D8BA58FCE07BFDE881F0E37BECE17E F4EC8AF6ED8EF2E68AF0E48AEFE48CEDE28AEBDF87ECE289F2E98EF5E991EDE389EBE187F1E68D F4EA90F0E78BF5EB8CE6DC7CE7DE80F3E88DF2E78DECE189F3E890FCF198FFF599FAF092F7ED8E F7EC8FF6E892F6E794F7E896FBEF98F9EF8FEEE77DF6F282DDD96DD5D170F2EB9BD1C8866B5E36 201403231A08B5B170FCFAA1E7E083D8C86ED7BE61E9C95FC79D34DFAD4AFFDA80F6DE87D8CD79 EADE8AE3D483EBDC8CF0E192F4E596EBDD8EE6DA88EAE08DF1E692F1EA92EDE991D2CC78C0B969 EADE92EEE095ECDC8DE5D685E4D880E1D77FDDD57DE9E38DEAD97EFEE485E5BC65E5B768FFE39B FEDE98F4D991E4D586DBD47DDED77AE1D473E0D06EE6DE84EFEE9EE7E39EE9E3AAB8B082837A51 6E663E7C774E8D875F807A5177724988825C2B26067975566F6D5049462B312F0F28260C201F08 0D0B01120F00140F00120D000E0A00050300585640B7B58EEBE6AFF4EEA8F4ED9CEFE68EF2E98F F3EC95F8F29DF1EA9AEAE08EF8EE9BF3EB9BF2EAA0F5ECA8FDF7B7F0EAAE3834017D7B4FFFFFCC EDEEB3FEFEC4F1EFAEE3DFA2F8F7C37C72513B311AEFE5B1FBF7B4EAE696F3F19AF1EF99FCFCAA F1F1A8F9F8B8EBE9A9E0DC9AF0EAA3F7F1A5FAF3A3F7F19CF8F3A0F3F1A0F1EFA3F0EFABF7F0C2 DBD2BA241F07020200090B00C3C398EEEAB4F3EAA5F7EF9EF2EDA2DEDCA3E5E4B9F1EDC5F9F3C6 E6D9A7F7E7A5C0AC62A1873FD9BC77FFE19CFFECA7FCDD9EDDA967A8742AC69847FEE998FDE89B F0E19AF5E8A9EADBA2EFE2A9F4EDAFEDE8A5EEE79FF7ECA0FDEC9DFFF1A1FCD790D99A57E0B26A FFF9A9FBFAA6EFF19EF7F9ADEBEDA8EDEDB1F8F1BBF5EDB0F2EBA5F5EEA8FEF9B4FFF7B2FCF5AF F4EBA8F6EFABF4EEACF7F3B0FAF6B6EEEDAADFE79BFFFFBEFFFFCCF3DBAFF7EEC1E2E2B5616444 18130A1A0E0B1D0C057B6F4AFFFFD0F3F1C0EAE8AEDFDB94EDE798E5E19ED8D4AA211D120C0D02 C2C592F7F8BAF2EEB7F9E29ACEA84FF7DA84FDEBA5DCCF9FAAA186E5DEC6F8F3D0FDFCCAEDECB6 EFF2C54B503A0E0B00A39C72FFF8BFD0B1773B1A00614E2BFFFFCEF0EDAAF0F0A2F4FCACF6F2B4 F9E9B7FDF8B7F2EFABF0EDAAF6F1AFF6EEADF3EBACFCF2B4F8EFB1F2E8ADFBF2BAFFF6BDF4E7B9 FBEAC1FEF0B9FCF2A8EDE893EFEBA2F5F4BAFEFCD4E7DCC2352017200500E1C175C29C40E2BC60 FFEA9EFCEEAEF6ECB4F1E9B2F0EAB4F6F5BEEFF2BBE9EDB3EDEDB0E5E5A6EFF7C6EAF5C9EDF6CA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F1E38AEEE087ECDE85E9DB82DFD178F4E68DF5E78EE6D87FE3D57CE9DB82E8DB7EEEE07EEFE17E E9DB7BEDDE82EFDF87F2E38BF5E58DEBDD81F0E182F5E785ECDE7BE6DA80E3D888E7DC8BEEE391 EADF8DE3D985EBE18AEAE089EEE48BF3EA8FF0E78CECE386E8E280EFEA86F1EB89EFE987F4EE8F FEF89AF0E98EF9F298FDF69EF9F29AF8F19AFAF39BF2EC91F5EE93F3ED92F7F095F5EE93EFE98B F5EF91F6F092F4EF8FF2ED8DF4EE8EF6F192EEE689FCEC8FF7DF81CFB150FADD7BFAE37EF6E87F FBF08BF1E985E6DC7EF1E589E9DE84EDE58AF4EB90F1E88DEFE68BF4EB90F4EB90F3EA8FF5EB91 F8EF94F7EE93F3EA8DEBE37FE3DB76E9E17EF1E988F4EB8EF6EE91E8DF84ECE489F3EA8DF8EF91 F7EE8FF6EC8DFDEF95FAEA97F4E593F4E891F0E685E6E175E6E472DEDC71FEFBA1EBE5A16B6131 251E001813009C9353FCF2A5EEE386E2D871D8CC62E7D66DF9DF7ACCA23FBF8623F8C362F6DD7E DED476E4D77CD9CA73E9DA86E8D986F7E695F3E491EEE28CEEE18BF2E68EF3EC90F2EE8EC1BD5F E0D781F9ED9CDFCF7FEADB87EADB82F0E585F3EA8AE2DD7FEAE68AEEE487F2DB7DF1CF75E0B45F EFBF6CFFDD8CF4D985E7D981E6E38BF1EC95F2E791F0DF8FF0EAA4DADA9CE7E6B0656239010000 0100000801000800001009000F09000F0900201B01292510080600000000000000020300090B00 0E10001516061E1C103B351B7C7556A9A58838382584825BFFFFD2F6EFADF3EC9EF2E993F8ED93 F4E990E9E08BEEE594F3EC9EEDE394F6EB9BEEE596EFE79BF5EFA5FBF5B1FFFCBDD5D0961F1D00 A5A573FFFFD5ECEDB7ECEAA0E9E59AFEFCC1EDE5B45F563838310EDFD89FF8F4B1FBF8AAF0ED9D F9F5A6ECEA9EF4F6AFF2F1AFDDD99AF3EDACFBF3ACF2EC9BEFEA90F8F49BF8F8AAE8E9A9F4F2C0 D9D7BA2A2819070000150F00C3BC87FFFFBEE7E097F2EDA2F1EEA5EEEBA9E5E1A3E4E2A9E7E3A3 F8F3B2EBE5A1E8DF9AFCEEA6BEAB6290762CE2C67DFBE29AFFE9A3FEDC98E6BE79AC762ABD8B3E F9E9A0FAEAA6E9D89AFCEDB4F8E8B0FFF4B9F4EAA8F7EFA8F5F1A3E7E194FBEAA3FFF2AEF2C582 C79752F2D287FFFBACEBEC99DEE696E7EBA5EDEDAEF5EFB7F8F0B2F3EDA7F5EEAAF5EEA8ECE49F EAE19DF6EDAAFCF3B0FCF3B2F9F3B4F7F2B2EBEAA9E8F1AFFEFABFFEEBB3F1DAA7F8EEBEA7AB82 0000001A110D1102002C1510030000737243FDFDCCEAE9B1E6E19DF7F29FE4DC9ADBD5AC2C2A23 0305019EA365FFFFBEFCF5C2F4DF9AC6A847F4DD83F0E19B98915F0B01000E07006D634CD6D09F F6F6BEF9FDCA9DA37A080201615839FCF8B8DEB871AD8541D1BE84FCF6BEE3DF9DE8E498E9F7A8 EDEAB2F0DDB4F6EFB0F5F2AEF8F3B1F2ECAAEBE2A3E7DD9FF1E8AAF9EDB3FAEFB5F7ECB4F7ECB4 EFE3B2DED1A6EEE0A4F2EA9DEDE792F1EEA5F8F7C2F0EECEBEB59E1603004A2B00CEA862E6CF7D F7EA97FFF3AAFFEFB0FFF3B7FAEEB4F6F0B1F7F7B3F7F9B4EDEEADEDEDB3FEFCCAFFF9CDFFF9D1 F0DFB6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6E88FF1E38AEEE087EBDD84DBCD74F0E289F5E78EEDDF86EFE188F3E58CEDE083E8DC79 E9DC7BE7DA7CE9DC7FE8D980ECDE85F1E38AE6D87EECDF81F5E888F3E784EEE389EADF8DEBE08E EEE490E9DF8AE7DD87ECE28BE6DC85EFE58CF3EA8FE7DE83EBE186E7E183EDE787EFE98AEDE788 F2EC8EFCF698F1EA8FF8F196FBF49AF8F197F5EE94F5EE94F7F097F7F097F5EE94F3EC92EFE88D EBE489F5EE93F6EF93F3ED8FEFE98BEFE98AF0EA8DEEE78BFFF195FFEB8DD6B958F9DD7BFCE882 F3E47CF3E883F5ED8AEFE689F0E389E4D87FE9DF87F4E991F6EC93F3E990F1E78FEAE087EFE58C F3E990F4EA91F1E78EF0E78CF6EE8AEFE784F0E887F1E88AF0E78BF5EB91F8EE95F4EB91F5ED90 F9F093F6ED8FF3EA8AFAEF90FAEC93F6E995F8EC9AF7EC97F1EA8FF2EE91EFEA94E1DB947D7641 1B10031B180097974BF2F09BE1DA7BE6E077E0DA6EDDD66BE1D66EEDD973EAC865BC8C2AD8A945 F4DE75E8DD72EDE078EBDE78F2E480ECDD7AF1E17FEEE07CEBDE78EADE77EADE76E8DE75EBE67F EAE37EFAF090F2E689E5D577F1E181EADB77F2E57FF9EE89E3DB7AE6DE80F1E991E9DA85F7E189 E1C368CAAC4AF5DD77FDF18BEFED8BEAEF95F3F6AAF2ECAFEDE2AFBFB89087836047422E0D0700 040000261F142C25151D160A1710021611001611001C18001A16000A06002A28154D49386A6951 7575558C8D67B4B484D6D5A2F4ECBFFDF5CBF4F1C8BBBA8D141200ACA96EF5EEAFF0E8A1E7DD8E EDE28FF7ED98F7ED9AF2EA98F0E998F3EB9AFCF1A1F0E798F2EA9EF7F0A7F2ECA8F8F5B5F2EEB3 C2C08C1F1F009D9D69FEFECDF4F0AEF0ECA3F6F4AEF9F4AFEFEAA768623A1F1800C7C18DFAF9C5 F4EDAFFCFAB8EDEC9BF6F99CF9FAA6E5E19BF5EDB0F5ECACE8E197F1EE98F3F39DEBEAA4FFFFDA C7C4AB2A2817020100201C00ACA879F8F4B5E6E299F0EC9CF7F2A2E8E596E3E197EAE7A4EDEBAD F3F2B1EAE6A6EEE9A6DCD28DFCF1A9C9B86EDAC479C9AF65BE9E57EBD18BFFF2AEFFEAA5E8C176 AA772EB07C37E7BC7BFFEEAEFAEEADF8F2B0F2EAA7F1E9A4E9E59DE4EB9CF1F0A5F8E9A5FBFFB5 FBF5ADD2AF68DA9D5DF6CF89FCEFA1E3E394E4E49BE5E09EE3E6A5F0F0AFF7F2AFF9F4B2EFEAA7 E5DF9BE9E4A0F1EAA7F2EAA8EEE6A5EFEBA9F9F4B3F6F3B4F1F7BEEBEAAAF9ECA2FCEAA1F7EFB4 D0D4AC32341C0200001B08009983626F644D05030098986BFCFAC9F5EFB1F3EEA1FBF2B3EFE9C3 38352E07080083884BF8FAB2E8E2B0E5D08EC2A74CEAD481E9DE93E5E2A1C5C58B8C8965161000 2B240ED0CDA1DEE1A9D1D69718140828200EE0D89CC39C5ADAB574FFF9C0EDE6ACE1DB99E9E59A EBF8AAF3F0B6FBE9BBECE6A5F0ECA8EEE9A7EAE5A3E7E2A2E6E0A0EBE4A6FCF4B8F5EEB2EAE3A7 E8E1A8E9E3AFEAE5B7DCD899DEDA8CE8E591E9E89EDADBA5F1F1CF757259060000564411EFD690 FEF0ACFFF7B6FAEFAFFAF0AEFDF7AFF3E99BF9EE9BF9ED9BFAEEA5FCF1B6F7EEC0FAE6BEFFF4C2 FFCF9AC27F4AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0 CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEBDD84F5E78EF3E58CE5D77EE2D47BECDE85F5E78EEEE087EDDF86EEE087E5D97C DED575E1D778EADF83F2E78CF4E990EFE38AE6DB81EBE086ECE185ECE283EFE586EBE087E7DD88 E6DC87E2D883DED47FEBE18AEDE38CE6DC83F0E68DF4EB90E5DC81EBE287EFE88DF5EE93F9F297 F7F095F6EF94F7F095F7F095FBF499FEF89AFBF599F9F296F7F095FBF49DFEF5A1FFF9A1F9F29B F1EA92EDE68CF0E98FF3EC92F1EA8FEEE78CEEE78CECE58AE8E287F9E98EFFED90D6BB5AF0D471 FFED88F3E47DEAE27CF9F18EFAF194EFE289EADF86E6DC83E8DE85F3E990F5EB92EEE48BE6DC83 EAE087EDE38AEEE48BF0E68DF3EA8FF2E989E8E07FECE386F4EB90F5EB92F6EC95EDE38BF2E890 F3E992F3EA90F8EF94FAF191F6EE8BFBF094F8ED98F7EEA1F7EDA5F3EBA1EFE89ECDC585918A56 322A04261D06ABA67FFDFCC3EFEAA8EBE497F3ED98EDE78DE4E184E8E384E9DE7AF4DD75C2A033 DDB948F1E06EDFD665E3D96AEFE478E8DD71EADD74F4E77EE8DC71E7DB6DEEE170ECDF6DE2D666 E8E07AEAE27DE9DF7AFAED88FFF18CEBDB74F0E17AE9DC76EFE382E3DA7DDFD57CE4DE8FE3E096 EDE397F8E696DBC972D7C970F0EB93D2D583A9B16B889059595A332A250B150D020D0501050000 150D005A523BE4E0C5E2DCBCDBD6B1D7D1A9D1CDA0CAC697C9C693CECB96797545747146FFFFE0 F6F4CCFEFED5FDFDC9FFFFC3ECE7A8E0D99BE7DEA5E8E3AAECEDB4A4A36B353312EAE3A4F1E8A6 EDE39DEDE499E9E093EEE595F6EE9BFAF5A0F1E997F4EC9BF0E798F9F1A5FDF5ACF2EDA6F8F3B3 F4F0B2F8F6BCC1BE87282800B6B47FFFFAC0F5F0ACEAE697F4F29BEDEB97FFFDB8A39B6A1C1300 C8BF98FFFFD4F8F2B5F1EEA0F7FA95F4F395F5F29FF6EFA6E9E29CF3ECA6EAE4A0F6F1B6F7F7CD 8F8E70231F14040300181A00CDCB96F3F0B4F2F0A7E2E090E4E18BECE891DDDB87DEDC8FE4E19B E5E5A0F4F3B2EEEDABECE8A5EDE6A0EDE49AE5D88DFAE89CFBEDA2D3B96FB39650CBAB67F9DB96 FFEFA0F5CB84CD8648CB7C44D2995CFFF9B4F8FEB3DCE999DCE597F5F7ACF0F0A6E1E19AF0F0AD EAF6ACEEF3A6F8E79DE4B471DDA160FED794FEEFA6F3ECA1DEE195DCE097EAEAA6F5F1B1FAF6B6 F1ECADEDEAA7F4F1AFF5F0B0E4DF9DD2CD8BDDD594F1E9A6F0ECACE9EEB7E6E5A5FDF5A5FDF09E F1ECA6FBFFCBE4E5BF8F845D48330A99835BF6EACA625F420E0F00AEAB7FEFEAB0FFF8AFFFFBBF F1EBC83A372E0E0F007B7F44FBFBB7FEF5C7E7D198CEB168FFEAAAEDE5A4ECEDA7F5FBB2F9FBC2 D5D1AF1B1108130C00EBEFBBEEF7AA28240B130A03C6BE85DBB475CAA062FFEFB3EEE7A9F0E9A7 F2EEA4E6F2A4EAE8ABF7E4B3F7EFB0F3EEACEEE9A7EDE8A6E8E3A2DAD696EBE7A7F9F4B5E1DD9E E5E1A2E8E4A7D5D59EE3E8B4E3E5A3E1E092E6E490E2E096E0DFA7D2D2AD28260B030000908853 FFFFC6FCEEB2F8E7B3EFEAAFEAEFABEDF4A6EBED96EDE58AFFF09AFFE89EFFE4ABFFF4C9FFF3C9 FBC87EBB7D27CB8C38FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFA F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFB F0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE6D87FF2E48BF3E58CE5D77EE4D67DE2D47BF4E68DF1E38AEFE188F5E78E F3E68DEAE084E4D97EE8DD82E9DE85E5DB82E2D77EE5DA81F1E78DF1E68CE9DF83E8DE82EBE189 E9DF8AE7DD87E3D984E3D981F1E790EEE48BE8DE85ECE289EEE58AE5DC81E2D87FEAE38CF0E892 F4EC95F3EC94EFE88FEDE68BF4ED92F7F194F9F395FAF494F6F091F3EC90F0E992F5ED98FAF29E F6EE9AF1E995F4ED96F2EA92F5EE95F6EF96F3EC91F2EB90F2EC91EEE88EF0E186FEE98DD8BC5E EED472FFEE89FDEE89F8F08CF4EC8CEDE487F0E58CF3E991EBE189E8DE85F0E68EF5EB92F0E68E F2E890F1E78FF3E991F6EC94F6EC94F5EC92F2E98BE7DE80E8DF84EDE38AECE28BEBE18DF1E793 F5EB97F4EA95F0E68EF2E78FF1E88BE5DD7AF1E88CF2EA96F4ECA3F4EBAAF2E9ACE0D99F8D8752 35300B050000211A066A66506661488A825C93895BA89F69C7C185D5D291D9D791DED78BFCEE96 CEB858A48B22E7DA73ECE47EE1D974EBE380E8E07FF1E988F3EB89E7DD79E2D872E9DE75EADE74 E5DB75E7DF87E6DD86F2E98DEDE382F8ED8BF5EA8AF1E588EBDF87E9DF8CF0E699EDE49AEFEBA9 EBEBB0DCD79DD4CB93AEA06B776D39716C3A4F4F221F2502080B000000000000000C0500241C0F 807A58BAB48EFDFACBF4F2BCF9F6B9FBFAB9FCFCB8FDFCB8FDFCB6FFFCB7F8F3AFDEDA9A555117 DCD9A5FAF7C4EBE7ADF0EEAAEBE99DF4EFA2FDF8ACF7EDA4E8E29BFBFCB8EDEDAB6661276E682F F8F2B5F1E7AAEDE2A2ECE39CF5ECA0F4EC9CEEE892EBE391F1E898E8E091E8E095E6DF96D9D28A F5F0ADE9E4A4EEEBAEFCFAC0C1BE872D2900B4AE78FFFFBFF4F0A3EDEC92EDEB94F5F1A6FCFAC7 A49C72271D00A29A6FFFFEC7FAF6B1F3F09CEEEC90F9F798F7F498EAE595F9F4B5FFFED4EDE6CA 7B7562100C030302002B2C0DD1D49AFBFBC1E3E29CD5D386EDEA98E6E28CEBE791EDEA97F5F3A5 E7E59CDFDF9AE5E6A4F7F8B4E4E29DECE8A1EEE89EF1E79EEDE195DECE81F5E198E9D28AA98F4B BA9B57E4BD79FFF7B4FFE5A0E3AC6AB07635C6944FE8CA80FFFCB0EBF4A3EDF4A6F8F3ABDAD895 DFEBA7EBEEAAE0E098FBFAAFFFECA0E9BB77F2AF6FFDD694FFF1A7EEEE9DE5EA99ECECA6F5F1B1 F5F1B1F0ECACF2EEAFF2EFAFFCF9B9EDEAA9D9D492DCD591E7DF9BE4DF9AD1D598E1E0A0EEE09B FBEFA3FBF9ABE9EEA6FCFCBFFFFFD3CFB48C907553F8F3D1DFE0BC2829171B1701A49E6AFEF7B3 F9F2B8E6E3C0312C26080900898C51F8F8B4DED4A788714B6F4F2BBCA778E7DEACF7F8C0F3FBB9 FBFFCAFBF7DCA79E9A1C14095C5A34F8FDBD514D290800009F9563EDC48AB5894CFFF6B6E8DE9C EFE8A4F6F1A9EBF7ABF4F3B3FFF1BAFAF0B1F9F1B0EDE8A6E9E5A2DAD796C4C180E8E6A5EEEBAB DDDC9CE7E6A6ECEBAAD5D79CD9E0A8E1E3A2D0CE81DED786F9F1A9EFE9B15C5934000000272708 DDDDA5F3F0A9F5ECABF2E6ACE8E0A5DDDB9DDBDE99E2E698E7E894EEE692FBEA9CFFF3B3FDD8A7 D89D70A07836472500B4904CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECE FAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF0E289EBDD84EFE188EDDF86DDCF76E0D279F8EA91F3E58CE9DB82 F2E38AF2E68DE6DC82DDD479E5DC82E7DD85E6DC84E8DD85E9DF86F2E88FF3E98FEBE287E3DA80 ECE28AE9DF87E5DB83EDE38AEEE48BECE289F5EB92F4EA91F0E68DEFE58CECE188DBD179EAE28E EDE593EFE794F1E995F1EA93F1EA90F2EC90F5EF91F9F393FAF492F8F290F4EE90F8F19BF6EE9B F9F19EF4EC99F6EE99FEF7A3F8F09BFDF69EFDF69EF8F199F5EE94F4EF95F0EA92F2E48BFFF499 E1C669EDD172FFEE8AFCEE8AF8EF8CF3ED8EEFE78DF6EB94F8ED97F8EE97F7ED96F2E891F2E891 F8EE97F9EF98F6EC95F8EE97FCF29BF4EA93E8DE85F0E78BEBE285EDE48AEAE089E8DE8AF1E694 F2E797F1E694F4EA97F7ED99F4E994EFE68BEDE888F6F095F1E998E9E09ADFD698EAE2A9D6CF9B 5E58244542147B764E5A573524200A1711030900001205001709021F160A2F29183733193D3919 756C3A99884D937E3BBFB168FFFFB3FCF5A8FAF5ABFEFBB2F3EFA6F6F2A6EFEA9EE8E193E4DD8C EDE492F7EFA1EFE9A9E4DD9CEBE79CDDDA89DCD788C8C375E5DF9ADBD597BEB77FB5AE79ABA26D 9C99656F6E3F55512930271524190C1B0F020E0300080000020000070400221F0C4A492F9B976E DEDAA7F7F5BEF3EFADF2F0A5EEED99F6F59CEFEF94E9E98DEEED95F5F59FF5F4A0F0E998FBF5A8 C9C37D726B2CF4EFB0FAF7B2F1EDA0E9E590F6F097FBF59CFBF099FAF29FECEB9DF6F5ABE1DE98 332D0693894FFCF2BBEDE2A7EDE4A4EFE69DE9E090E9E18AF0E995F8EFA0ECE597EAE397EBE399 E7E19AF3EDA9EFEAA9EEE9AAF0EBADFFFCBEB2AF7A322B00A9A369FFFDBAE1DD91E8E497ECE99F EEE9A8FBF9C2C6BE8B3C350B7F7846FEF7BFFCF3B9F9F3A5F1F08FF1F389EAEA91F5F4BAE7E2CF 5C53550702030000003E4119D5DAA0F7FBBBF8F8B7F6F5ADF1EFA2F4F2A1F5F09EEEE997EFEB9E F5F2A9D9D791DCDB99DDDE9CD2D590DADB94E6E59EEEEBA0F7F1A6F4EC9EFBF2A7EFE197FEECA6 F0DE99D5B372D78F5ADDB070FFF4A6F9F59FF7D98CC78640B46A2BDEAE69FFEAA1F7F3A8F1E6A1 E7E5A4DEE8A5F6EDAFF9F1AEF9FAAFEFF7A5FFFAADDDAB67DB995AFFDB96FBE99AEFEE9AF7F5AC FEF7B6F7F3B3F7F4B5FDFCBCF7F6B6F4F3B3FAF9B8FAF7B5F8F1ADF8F0AAF5EFA7EDF1ABEAE7AB F5E6B3FFF3B8F1F1A2F6FBA2FCFAABECD69F30140E2D1105524829B9BE9492927D040000867E50 FDF6B7F2EBB4D6CEAF28231D040400888A4FF4F1AFF5EDC08F7557411F082009001F160E434422 757C4BB4B68EF6F4DAF7F3E82018183B371CFFFED6676242030000908559FBD49EB58649F5DE98 EADF96EBE19BEEE8A3EAF6ACF3F3B0F3E4A9FFF8B8FDF6B5E9E4A2E8E3A1F0EEABEBEAA8F1F2B0 F0F1AFF8F7B6F2F0AEEEEBABF3F4B5F2F5BAEDE8A4ECDF94FAF1A4F6E49F90824F0A03000F0B00 908F64E1E2A9E4E4A0F3F5AAF1F0A7F2E5A7EBD7A2E3D19DDBD397D4D790D9DE8EFBF2A2EBC883 BE793EAF6231D6BB8F60594339300CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBDD84EEE087F4E68DF2E48BE7D980F0E289EDDF86E1D37A F1E38AE9DA81EDE288E8DE85E0D67DDED47AE8DF84EAE186EAE185EDE489E7DE83EFE58BF8EE95 F3E990EEE48BE9E085E1D87EE1D87DE8DF84EFE68BECE289F2E88FF2E88FECE289EDE38AF1E78F F5ED9CF2EA99F7EF9CEEE693F3EC95F2EB92F5EE92F4EF91FEF898FDF795F2EC89EFE989F6EE99 F8F09DF7EF9CFAF29FF6EE99F0E994FFFDA8F2EB93E9E28AF6EF97F8F197F7F298F3ED95E7DC84 FFFAA2EBD277DBC162FAE584FBED8AF4ED8CE9E387ECE58CF8ED98F2E891F5EB94F4EA93F4EA93 F9EF98F3E992E9DF88F3E992F1E790EDE38CF3E992F3E890E7DE83F3E990DDD379E2D882FDF5A2 FDF2A2EEE393F0E595E8DD8BEFE490FFF8A3F6EC95F7F096F5ED98EEE696DFD88EE3DC98D7D094 8580484E4910D4D398F8F7B7FCFCBCEAEAB1D5D3A28F88573D320C201304160D03100901060200 0F0902070000100000220E004739146B6336888054989469B1AF84C4C398CFCEA3E2E0B2CDCB9B BFBA8BCEC896D3CD9FCECBA7C9C69DA9A977B1B279B7B880A6A67585845D6E6B4E48442B312D10 040000100B000A0400120B000B02000C01001303020F010044332295856CC4BA98E4DCB3FDFBC9 F4EEB3F8F2ADF2EEA2F6F19FF0EE93EBEA89EEEB8AE6E483E6E587F3EF96F4F09EEEE897F2EC93 E6DF8BFFFAAD67601BC1BC76CECA80F1ED99FCF79CFDFA99F4EB89FAF08EF6EE92EFEC97E9E698 F1EEA7BCB7772C2503D8D099EFE7B0F5EDAEF2EBA3DED686FDFAA2EEE794F6EFA1F0E99BEBE397 F7EFA4F3EBA4F0E9A3F3ECA8F0EAA7EAE5A5EFE9AAFFF9BCDBD49D211A00B8B17BFFFCC7EBE4A9 F2EDAAEAE79DF2EEA3FFFEB4DBD5922C260C675F2EEBE4BCFCF8BCF4F1A1F7F99DECEDA0E5E3B3 605A4B050000080300626140DEE1A5FEFFC1F0F5B3ECEDAAF2F1AAF4F2A8E5E197FEF8AFF5EFA5 F0ECA5F7F3B0F2EEAFE7E5A7DEDF9DDDDE99E7E9A1F0F0A8EDEBA0F1EBA0FBF4A9EFE79DF1E8A0 FBEFA9FCEFA9FFEDAAF8DD9CBE9352C19551F1D085FFF3A1FBDF8DC8944CBB682ECC713EFBCE96 FFF8B6E1DC99F8E7ACF8EEB0EBEAA3F4F6AAEEF3A3EFF09CFFF6A5FBC884DF9F5CFDCF88FDF7A5 FDF9AFF9EEACEEE5A4F2EDACFBF8B8FCFBBBF3F2B2FBFAB9F9F6B2FBF4B0FFFEB7FAF6ADF6F9B3 F8F3BBF5E4B8FAEDBAF2F0A8F0F49DF0EB98F2D6A04D2306260500483D19040803787A6614110E 2F2A10EEE5AAFFF9C4D9D1B21B1611080701ABAA70FFFFBEE7D8ADF0D4ACC5A177EDD4A6AFA476 797A512E32180204003A3A16A2A0768D89613E3B1BD0CCB31D1808161106C5BA88FFD9A5A77736 E5CA7DF4E99AE4DA91DDD490EBF3ADEAE8A4E0D190F4E7A7FAF2B1FFFAB8F4EFADE7E5A2E8EAA5 EEEFABFCFBB8F9F8B5F5F0ADEEE9A7DDD796FBF1B4F5E5A2F9E89FFFEBA1D4B874A89057605121 958B5DE8E3B4DEDBA4F3EDADF8F3ACEDE9A0E9E3A2F8EEB2D7CB90F4E3A7FFE5A4F5D48EC29951 A5732EAA7533D7A46BD4B993B9A7891B0C08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E38AF1E38AF1E38AEEE087E5D77EDED077EADC83 E6D87FEEE087ECDE85F6E88FEBE087E3D87FDFD57AE7DE82EAE185E8DF82E9DF84EAE085F0E68C F3E98FF1E78EF3E98EF0E78CEAE185E7DE83E9E085E9E085EAE187EAE086ECE289EBE188E9DF86 F4EA92F7EF9EF5ED9DFCF4A4F4EC99F8F09CF7F098F5EE93F2EC8FF7F191F9F392F5EF8DF8F292 F1E994F3EB98F4EC98F9F19DFAF29EF6EE98FCF59DF3EC93EFE890F9F297F3EC92F4F097FAF59F F3E690FFEC95E4CA70C4AB4EF6E282FBEF8DF8F091EEE98DEDE68EEFE590EFE590F3E992F3E993 F6EC96FBF19AF5EB95EFE58FF4EA93F2E892F3E993F9EF99F8EE97F5EC90F4EB90E9DF86F2E891 FFF5A2FBF09FF7EC9CF8ED9CF0E593EEE390F9EF9AECE38EF8EE9CEEE592DFD685EBE395E7DF95 7E77351C16005F5C27ECEBA8DEDE94DDDF8FEAEDA0E6E79FF3EEA9FAF2B1D8CD92B3AB7D7C785A 3F3D2A1512070700000D00000F00000900000C0000030000080300060300070600181905212209 111100131100302C1039351C2927183C3C294447272A2F121A1F061B1E09070903000000000000 0200000807000D06001C10002A2010453D26786E42AC9E6EB8A470C1AA73FEECB2FCEFB2F7ECAB F4EBA6F9F2ABE8E197E4DE91F2EC9AF7F29BEFEA91EBE68DF0EB95F0E99AEBE39DF1E8A8FDF4B0 EBE48CF7F19AFEF7A8ABA45E706B27EFEBA0EDE894F8F296D0C967E6DD79DDD06EEDE486EFE994 E7E192FCF9B3F5F0B39690594B4415F5F2BDE3DB9CF0E8A2E9E292F6EE9AEDE694F4ECA0FAF2A5 F7EFA3F7EFA4EAE29AF0E9A2F7EFA9F7EFAAF0E8A3EBE4A2EFE8A6FDF8B9CCC48D3A3104B6AC84 FFFED1E3DDA0E5E393EAE990EFED94F3F0A1FFFDBD6D6434473E1FD7D4ACFDFAC6F5F6BEE8E7BB 3836170000001813058B8866FCFBCBF2F4B0E9EDA6EAEFACEFEFADEBEAA6F0EDAAE5E09BF7F0AC F6EEABF2EDABEDE9AAEAE6AAF3F1B4F0F0AFF6F6B2F5F6AEEAE9A2E8E69CF4F2A6EAE59AEEE89E F8F0A8F9F1AAF5ECA8F5EEA8F6F5AAFAE9A1E2B875C08A48E5B46EF6E499FFF1AAE4B172C77C44 B66E36DEA56BFFDDA6FFE0AAFFECAAECE9A0E9EC9FEDEB9DF5F5A4F8F1A0FFEA9FFACD88D7A55E E8CC81FFEFA6F7E39DEDDC97F9EEABFEFAB9F7F4B3F8F7B7FBF9B8F4F1ACF4F0A9FEF6ADF2ECA4 FAF9C0F5EFB7F8EDB7F8EFB5DFDE9BEFF1A8F5EAA4FFE5ACAF81563C1C09695F3F686D51000100 1410031E1809D8D49AFFFCC8CCC5A5231C12070701C3C386F1EDA8F8EABBE2C490D4AF6CFDE49B FFFEBCFFFFD9F3F7D3B1B48B5356345C5E2CE8E9A4E2E2B04742300703007E7A47F1ECB8FFD19C 9E6D29EAD47EFBEF98FAEEA2F2E7A7EBF3AFE9E9A0F2E49EF9ECACF9EFB0FBF6B4F7F3B1F3F2AF F6F7B3F6F6B1F9F7B4F4F1ACF7EEAAFDF2AEF2E3A2FBEDADFAE8A4FCDD94D0AB63BE9C57F2D798 FFEFB7FFF5C2E8DEAAEDE2ABF6EAAFE6DDA0FFFCBFF4F1B2E7DE9CEFE19BFFEBA4EEBA71BE742D C27B37CD9858F4D89CF5E7ADECD29AE7C993644714FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E38AF0E289F0E289F1E38AECDE85D9CB72 EBDD84EDDF86EFE188EFE188F1E38AEBE187E8DD83E4D97DE9DE81E9DF81E5DB7AE8DE7FECE284 EBE084E9DE84ECE188EDE387E6DD7FE2D97CE2D97CE2D97CE2D97FEEE58AE8DF85ECE289EDE38A E4DA81EDE38DF7EF9EF7EF9EFFF8A7F8F09DFCF4A0F8F09BFEF79EFBF49AF8F294F4EE8FF1EB8B F3ED8EF9F19BF8F09BF3EB94F4EC97F6EF98F3EC92F9F298F8F197F5EE94FCF59BF3EC91EFEB91 F1EC97FDF29CFFF09AF8E086B89F43F2DF80FBEE8EF9F396F2EC93EFE993ECE290F2E893F4EA95 F4EA95F4EA95F4EA95EEE48FFAF09BF6EC97F1E792F0E692F1E792EAE08AF8EF93EFE68AF4EB90 F7ED95F4EA95F6EB99ECE190F4E997F7ED98F5EB96FEF49DF4EA96F5EA9BF8ED9BFBF39EF3EB94 FDF5A4ECE5988E87451710005A5621DBDA8EF5F6A2E8EA99DEDF92E5E091F5EC9DEDE295F4EEA8 F0EFB2D2D3A0B6B88B9491687B73496D5E36291400110000120000070000030000090700010100 0E11000D0F00100F001511000C08000906000000000A0C000106000003000609000E0F0E0F0E14 010000080700605F459B9372C0B189D7CD9BEDE8A6F4EE9FE9E085F5E181C7AE4DE1C465FDE68C F6E18AFDF09DFDF4A9F0E9A1FBF3A9EFE79BEDE599FEF7ABFDF5ABF4EBA6EFE5A6F3E8B1F4E8B5 ECE2A7F9F29EF5EF99F9F3A8F4EDA95C5717BBB671FEFCB1DAD47CD9D374DED474F0E385EDE288 F9F5A3EDE498ECE59FE9E3A4F1ECB356512E78723DFFFFCBEEE8A1F5EE9EE2DA87F1EA9BFAF2A7 FBF3A8F5EDA2F5EDA2F1E9A1EFE79EF7EFA7FDF5ADF7EFA8F4ECA5F8F0AAE8E19AF7F4B7DAD2A2 322900A1986BFEFDC9EEEB9DF2F197E4E386F2F09BF1EDA8F8F7BC79754A292303ABA68FD5D1C1 34301D03020011120093945EFFFFCAF1EFADEAE7A5E3E39FDCE29CE5E6A3D5D493E8E4A4EAE5A5 F3ECADEEE6A7EDE8A9F3EFB0F0ECAEEBEAAAF3F2B0F3F3ADECE9A3EAE89FF3F1A6F0EFA4F8F4AA F5F0A7F6EFA8F1EAA6ECE4A1EEE9A5E6EA9AFBFAABFFF5ADFBDB9CF8BD83CF9157D8B170FCE6A0 FCF6B0E5B476CB723ED27544FFC18BFFF2B1FEFEB5EEEA9CEEE397FFF4A8F9E99CF7EC9DFFF7A9 F6DA90D9A765EBC47DF9DE93FCE79EFFECA7FBF0ADFAF4B2F4F2AFF5F4B1F1EEAAF0ECA5F9F4AA FDF5AEF1EFB5F6F0B5F9F0AEEFE9A4DDDD9EFDFBC3FBEEB5EEC586BA894CD6B27C453A17151A0B 030501010000565132FBF6BCFFFCC5C0BA980D0703202000E3E3A6E3E199FDEEBCEECD8DDCB257 F5D878F5EA95D7D695F1F3C7FFFFDAF5F9BAF6FBA5F4F8A5DCDDA05D5C397B7A4AEFEFB5FFF7C0 FFDEA7C7954BE9CE6FF6E889FFF3A3F5EAACE2E9A8E1E199F8ECA0F7EAABF6ECAFFDF8B8FAF7B4 ECEBA8E6E6A0E1E09AECE5A1FFFFBBF4E4A1F7E3A1FFFAB8FFF8B6FFE19BE0B870CDA55BEECD84 FFF6B0F9EAAAFAF1B6FAF4BBFDF7BEFEF5BCF6F1BBF3F1BCFAF6BCFFFDBCFECF84CB8734BE6C15 E79440FDD084FFF2B4A89B6BBDBD8EFFE99FCAA856C09E51FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6D5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E289EEE087F0E289F3E58CEDDF86 D8CA71E3D57CECDE85EFE188F1E38AE6D87FE8DA81EBDD84EADD80EBDE7EE7DB79E5D976EEE27F EFE282E6D97CE1D478E9DC82EFE587E6DE7CE3D97BE5DC7DE4DB7CE8DF82E3DA7FE2D87EECE289 F3E990F0E68DF7ED97EEE693EEE696F8F09EF2EA97F5ED99F3EB96EFE890F7F096F8F196F6EF93 F6F092F5EE94FDF69EFCF59DF4ED93F2EB92F3EC92F1EA8FF4ED92F1EA8FEDE789F4EE90EFE98B F2EE95EFEB96EEE38EF7E38EFFF29CDBC267FBE88AFBEE8EF5F093F2EC93F5EE99F3EC99F2E994 F1E792F2E893F3E994F0E691EDE38DF2E893EDE38EEEE48FF3E994F3E994F1E791E5DD7FE3DA7C EEE589E8DE85DFD57FEAE08BF5EA98FAEF9DFBF19CF2E892F5EB94F0E591F9EC9EFCED99FAF095 E4DA7CF6EC92F4EC9DFBF3B1928A500B04006E692FE7E29CF3F1B0F0EBAEF3EBA5F4E89AF0E48F E3DA83DDDA84DCDF8AE5EB98E3E492F6F39EFFFFB2E4C591947148B0946B938158675933433C17 403D193433111F1E0D201C0C2C280D2E290E3731134F4C254B491D5556296669476466531A1916 100C0C1D1710383417FFFDC6FFFCC6F8ECB1E9E29DE7E792EAEB89EDE77AFCED7EEED567D5B249 F9E783FEF394EEDD83FDF6A5EFE69AE9E094E9E095E7DD95E7DD96F0E6A1EDE2A0F2E7A8FDF1B6 FCF0B6F2E7AAF0E998EAE493E8E19BFBF5BAB2AE744B4709EEECA7EAE496FDF69EF2E98DFBF195 FEF39DF9EFA3EDE39BF4EBA8EFE9AAECE8ABD3CF91262300AFAB69EBE69DEEE799F8F09FF1E99A F8F0A5F5EDA2F0E89DF2EA9FF3EBA0F6EEA3FAF1A7FBF0A8F1E79FEDE39BEFE79EF5EFA2F2EEA4 FFFFBFB3AD75352E00ADA76DF8F3B0F4F0A7EDEA9BF5F2A2DEDA8DFFFCB7F5F6C4A5A586222014 2A26270300021D1C0E9D9F71FFFFC0EAEB9DF4F1A5ECE59FDEDC96D9DE96DFE09AC3C27EDAD894 E9E4A2EEE7A5EFE7A5F1ECAAEEEAA7E5E39FE7E8A1ECE9A3EFEBA7ECE8A2E7E39AEAE69DECE89E EFEBA1E7E399EAE69FF2EDA9F0EBABF2EBA7F2E499EEE697F0E89DFDF5AEFFFCBDFFDBA0D8B278 C4A163E3C17EFEEBA9FFD091D69656AD7130CD9352F3C984FFEAA0F7E499FBDF98FDDE99EEE89A EFF6A4FEFCADFFD897DCAF66EBC775FEED9DFFEDA3F2E19BEEE49FF6F0AEFCF9B6F5F2AEE8E49D E8E399F2EEA3FCF8B7F1ECA6ECE69AFFFBB3DFDEA1AAA66DFFF2B6EDCD89BC8A42F4D898FFFFD0 6F785D0F120F0200008C8867FDF8BEF9F8C5857F5A020000605E37F4F3B3FFFAAEFFF0BDE5C27C C79634EDCB6CDDCB77ECE6A2FFFFD0CED0A23C3E0E767540E3E2A7FFFFC9F7F9C8FFFFBFF1F2AE EEE4A7FFE3A6E0AE5EEBCF69FBEC85FCEF9CF2E4A7E7EEAFEAEAA0FBF1A1F9EDABF5EAADF8F3B3 F5F3B0E7E7A1E0E09AE2DE98D5CD87EADB97F1DC99FFE8A7FFEFADF2CA86CFA259DFB468FFE294 FFF3A3FFF3A5E7E096E6E29EFFFABAF7E8ACF4E3A9F8FBC0F4F6BAFBE1AAE89E65BC601DCE7625 F5B857FFEC89FEFEA4FCFBBC6E593C3C220FD4BB82E1CB87FFFEBEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2CECECEFAFAFAF9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FBFBFBF0F0F0CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D5D5D5FCFCFCF9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9 F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9FCFCFCE6E6E6 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECDE85E9DB82F0E289F2E48B E9DB82D9CB72E1D37AE9DB82E9DB82F2E48BE3D57DE3D47CE9DA7FE7D97BE7DA78E5D875E5D873 EFE27EF1E482EADD7EE5D77BEBDC84EEE285E2DA78E3DB7BEAE182E4DB7CE4DB7EE8DF84EDE389 EDE38AEEE48CF2E891EFE58FF2EA98F2EA98FAF29FF5ED99FAF29EFAF29DF9F29AFFFCA5FFFBA2 FCF59BFAF398F6EF95F9F298FCF59BF7F095F6EF94F9F297F7F194F9F395F5EF91EEE889F5EF90 F4EE8FF4F197EBE795F0E593FFEE9AFFF49DE5CB70F0DC80F7EC8DF2ED90F1EC93F6F09DF6EE9E F0E594ECE18EF0E692F6EB98F4E996F3E895F4E996F1E793F6EB98F6EB98F0E592F1E791E9E082 E9E080F0E78AECE388E7DD85F1E791F5EB97F9EF9AFAF098EFE58DF5EB92F5E893FDEC9FF8E991 F5E886F6EC86FFF897E8DE8BF4EBABF6EAB9968B5E31270349411AC3BD84E9E5A8F2E9A1F2E591 F9EB8FE9DF7EE8E483E2E386E3E58CDDDB85E6E18BEAD986FFECA5BE8F4EBD9757FFEAABFFF4B7 F3E6ABF0E9AFE6E1A9D9D59CDCD59DE3DDA6E5DFAAE8DEAEF5EDB7E9E5A9FFFFCACFCDA058553C 322C253E36291911018C854EF7F39FEBE38EECE293EAE793F1F69CEEF194E7E084F2E287FFF79F E6BD64E5C269FFF194F6E788EBE186FEF8A2F6EF9AFFF8A7F3EA99E9E192E9E093F4EB9EFAF1A3 F4EB9CEFE796F1E997ECE594F6F0A5F0E8A9F9F3BBFFFECC6E69318F8C4CFDF7ADF4ED9BF7EE97 E4D881F5E898E5D891F5EBA5F7EEACF3EDACEEEAABF9F7B69B9A531E1B00C6C174FFF9ACE7DD8F F4EC9FECE599F0E89DF7EFA4F7EFA4EEE69BEEE69BF5ECA1F8EFA4F4ECA1F5ECA0FCF4A9F2EE9B ECEA96EEEC98FAF9AACFCA82302A007E784BF5EEB9F1EAB0EBE6A0E9E693F5F4A8FFFFDAC0C1A4 12130C000000000000B5B6A4FFFFE0ECECAEEAE79DCFC97AE8DE91ECEA9CDAE192E6E89DCECD84 DBD892E5E19BEBE59FF4EDA8F5F0AAE4E198DAD98DEEEEA2F2EEA6F4EEA9F9F3ADEDE89FE3DD94 F4EFA4EDE99FECE89FF5F1AAFDF7B6F5F0AFEFE7A3F7E799F4E998F3EEA2F1F0A9FAF9BAF8EEB3 FFF3B9FDE7ACD7B071BF9650DCBF73FFE596EDC679BB7B35B26E2DE3AA6AFDD796FFEFAAFBEBA3 E9E399EDECA2F6F1A8FDF2ACFFEA9AF2C670D6B05CEBCE80FFEDA3F3E7A0F2EBA7F5F1AEF1EEA8 E9E59EE9E59BF5F1A3ECEC93F1EE9CE9E29BF2EEAEE7E7A7D3D18CD7C177D8AC64B9803EFFE3A4 FDFBBAD4DEB420251F00000075714FFFFFD17570371510002A2415CAC8A0FFFFC1F3EFA0FFEFB8 FAD996DAA14BFFDF91FDE9A5DACF95C3C190F1F1D3A6A39321191D292314D5D2B0F9FBC5F7F9AF DEE195F7EEACFFE6A7DAA754F0D668FFF186F7E794EBDCA1ECF3B6F1F2A7FAF09FFEF4B1F4EBAC F2EDADF1EFACEFEFAAF6F2ADF8F2ACF5E9A5F8E9A6FFF6B6FFECADE6BA78CE9D53EDBD71FFE696 FDE694FBEC96F0EA94EDF09CE6EB9EE7E59FF8EDAFFAECB3FFE4A9DDAA6EB07439AF6E2FECAB66 FFD686FFFBA2FBE388DFCC79C1AA6CA284581A0000A0925CFFFFCCFBF9C6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CECECEFBFBFBFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFCFCFCF1F1F1CECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D6D6D6FDFDFD FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFDFDFD E7E7E7D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3D67CE1D67CF2E48B F8EA91E9DE84E6D97FEFE188EFE389E0D479F1E38AE6D87DE1D379E4D579E0D171E2D473E6D874 E6D874EDDF7CF6E887F5E787F0E184F1E287E5DA7BD9CF6EE5DB79F4EA89EAE183E8DF81E8E083 F1E88EE7DD84E3D980F6EC94F2E791F1EA93F0E893F6EF9AF1E994FBF19AFEF49CF3EB90FEF79D FCF59AF9F298FCF69DFAF49CFAF299FFF89EF9F298F8F197FAF398F8F196F8F196F6F092F0EA8B F5EF90F4EE90FAF69CF8F4A0F2E893F7E996F1DB86DCC56EE2D075F6E88AF4EA8FF2EB92F4EE99 F0E898F2EA98EFE591F4EA96FAEE9CF3E995F4EA96E8DD8BECE18EF7ED98F8ED9BF1E793F8EE98 F0E78AEAE182EEE588F3E98FF3E991F3E994F8EE99F7ED98F7ED98EBE189F3E992F6EB97F2E393 EFE089FFF999F1E783F6EC8FF0E696EBE0A0F4E9B5F9EDBFCEC494473B0E322C00878344EBE29E FDF2A3EDE189EDE284E0DA7CE9E58BF0EF99DFDB8AE7DF91F3E195FFEE9CE1C16D936615FED687 ECD585F0E392E9E294EBE69BEDE59DF0E69FF4EBA2F5ECA2F5ECA6F3EBA2E5E096FAF7B69F9D69 0F0A00514B35231B03231A03D3CB84ECE687EBE381ECE68BE7E78DEDF19CE6EA98E2DD91F3DE98 FFE9A3FEE298E7C474E7CE76F4E384FBF095F3E98FABA149D5CB74F3EC97FBF39EF0E892EAE28C EBE68BF6EF95F5F093EAE589F8F3A3F5EEA7FFF8B9F8F2BCF3EEBBF3EEB74D480BDED996FAF3A8 EDE698FAF1A3E8DE92F6EBA6F2E8A3F6EEAAF8F4B0E4E19DECE9A4FDFDBC908D4F46410DEFE9A1 FAF2ABF2EBA3E9E59AECE59BF8F2A4FEF7A9F6EFA1EBE295F2E99EF7EEA3F3EA9DF2E89CF6ECA0 F8F1A3EDE994EFEB92FBF79CFAF7A4F1ECA84B4418726946FFFFDBE9E6AEFCFBBAEEF0B0A4A685 2828110000003B3A2D454630303014CFCDA7FFFFD1F9F4B5E2DC92E0D886E2E08DD6DB87EFF2A2 E5E496E9E79DEAE69DF3ECA5EEE89EEAE69CF2F0A5F0EEA1E7E599EDE8A3CFCA87D5CF8BEEE7A2 E7E29BEBE69EDEDA93E2DD97EBE6A2EFEAA8F2EDACFCF5B2EAE092F0E396F6EEA5E9E7A1EFF3B1 F6FBBCF1EDB0FEEFB2FFF6B5F5E19AC1AD5FA68F3DEBC372FEE79CF4AD6CCF773DCA8044D7AE69 F0DE94FFF8B1FFF0ACFCEBA6EDEDA2F1E090FCD785EAC576D1AD62D8B870F8E098FEFBB3FDF3AD F6F0A7F3EFA5EFEDA2EDEC9CF3F392FAF49FFCF2B2F5F1B6DFE19BEBE895FAE08BC4934ACA9454 FFE8A9FFFFBA7E844A000000000000423D20F0EEC2AAA773565129C6C2A5FAF9CBE0DF9FDAD48A FFF9BEF4CE88E7AC5CFFE49FFFFCC4B7B07F0D0F00A4A38DFDF5F45C505E050000434129F2F7BD EEECA3F7F3A7F5EDA7FFF2AED4A14ED4B049FFF891F8EC96EBDEA0F2F5B8F7F5AFFAF0A7F9EFB2 F5EEB1F6F4B4F3F5B0EFF0ABF4F4ACFAEFAAFEEEAAFFF6B3EFCA83DDAF68DBB16BDFBD77FFEDA3 FFEA9DFFEB97FCF09CE2DA86F2ED9EE9E299EEDF9BFFE8A9DDB479BD7335B05819CE8C48F6D189 FFFEB1FFF1A1D9C274BB9C50B89550EBCA8EFFF9C27A6E3A15110AE7E8B8FEFFD8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2CDCDCDF3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4F4F4EAEAEACECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7D3D3D3 F5F5F5F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3 F5F5F5E2E2E2D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE688F2E98C EEE487EFE58AF4EC91E6DC81DDD377EBE385F0E688E5DB7EE7DD7EE7DA7DE5D87ADED273E7DA7B F1E485F1E485F1E485F5E889F2E587E6D97BEBDF80EDE07EDFD36AE6DA73E8DC77E6DB79E8DC7C F0E589EDE286F3E88EFAF196F5EC91F2E98EF1EA8EF1E98FF6EC94F9EE97FCF197DBD172D0C663 F7F18DF9F492F1ED91FBF7A4FDF8A8F8F19EFFF9A4F8F29DF4EE99F8F39DFAF49EF6F099F5EF98 F6F099FDF79EF2ED93F1EB91EBE48BF1EA94F1E995E7DD8AE5D580E1CC73F2DC7FFCE78AFFF298 F4EA95F1EB9BEEE794F4ED95F2EB94ECE58FF0E992F2EB94E4DD87E9E28BF0E991F4ED97F5EE97 F4ED96F2EB91EAE48AECE58BF0E892F2EA96F9F19EF1EA98F3EB9BEFE796F1E999F3EB9CF0E797 F2E895F7EE9AFBF19EF6EC9BEFE597F7EEA4E5DC93EBE19AEBE298FAF2A6C5BC70403B0B161300 605928E2DBA2EBE2A3EEE79EE7E18EE7E286E3DE81E1DC80E5DD86EAE28FE9E690F6E28FC19142 DFA556FFDE8AF8E78DDFE28AEFF09DEDE498EDDE92EFE796E7E48BEEE788EAE58DDFDC93EEEFB6 3E3F172C2B16615E41141001504C25F3F1B2D6CE7EF1E794F2EB98F1EC9BE1DF8DEEEF9DDEDC8C E6E090FDF4A4FFF3A2FCE38FE1C66FF4D983F7E498F6EDA4807127CFC175FBEFA0F2E796F1E999 F6EF9FF9F4A4F6EFA1F0EAA0EEE89EF3ECA4F9F2ACFBF4B2F8F0B4F7F0B7FDF6BF9A93627E7842 FAF5B6FBF7B5EBE7A5ECE9A2E6E49AEDEAA0F5F1A8ECE59CE9E19BECE4A0E7DE9DF5EDB03C3517 635E32F0EBB6F3EFB4EEECA8E1DE94F6F4A3F3EF9AF6F29DF5EE9DF1EA9CF5EDA2FCEFA4F8EC9E FCEFA4FCF1B1F4EAA9F6EEA3FEF9A9F4F09DFBFBB3E7E5A837361C585934EBEECFEBEFD26C6F58 000000040100423E23E3E2B2FFFFCC8A8657221E00A4A071F4F4BFE5E5A7F9FDB2E1E493EFEE9B EBE996EDEB99F2EF9EE9E696E0DD90EEEAA1F5F1A8F0ECA5F2ECAAE9E4A2F2EDAED8D395C4C081 D5CF92E1DD9ED3CF8FD7D394C1BE7DD7D492ECE8A9E8E5A3FBF7B3F6EFA8F6F0A8EFE9A1E9E59E EEECA5F7F5AEF8F5B0FCF5B1E7DC9AF9F3B2FFFEBEE8D38ECAA255E8B266FBCB82FFC781E19E58 B97C34BA853DE2B870F4E8A2FFF3ACF7EBA5EEE8A6F8F0B2FEECAEFED798D09B57D49951F5C97D FFF4A3FCF2A1F2EE9EF1F4A5EEF2A5F8F3A7F5E6A0FAEAAAF4F2AFEAEFA4F0EB9AFEDC8EC08E44 C69C54FCE39DE8D392F9E9ACC0C0857B7858120B005B5446EFEBC8FFFFD1F3F2B9E4E1ADDDD8A4 CFC98FDDD38EE8CC72DFB44EEFDA83FCFDBCF7FFD37B8B670C1103140D00170B04181100434721 EBF3BCFDEBB2FBE8A9EBECA3FFEAA0DDAD65D39D51FFF19CF5F29DF6F8ADFBF3B6FFF9C0F1E8B1 FAF0BDFEFAC1F3F6B3F1FBAEECF3A6F3EFA7FFF4B1FFEBAAF1BC76DB9E4DFDBB60FFE89BF2F8C2 F2F2B6F9EFABFEEAA1FFEEA7FFE7A6FFF1B7FDDCA6E9AD76B87135B56120D38F46F5C275FFEFA2 FCF3A6F1D78BD3B269C7AF66DCC57CFFEEA8FCEEA9FFF9B4FFF8B8333710474C2FC6CCACFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4CBCBCBCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCCCCCCD2D2D2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEA CACACACDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD CDCDCDCDCDCDCBCBCBDADADAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E081 EBE283F3EA8DEFE68AE6DD80E3DA7DDED578E9E082EBE283E8DF80ECE284F0E284F0E385E8DB7D EADD7FF3E688F4E789EEE183EEE183F2E587EFE284F0E384EDE07DDDD068E8DB75EFE27EE9DD78 EADD7DE5DA7DEFE488FBF096F3EA8FE9E085F0E78CF3EE8FEFE78CF6EC94FDF19BFDF399E2D475 A19832E1DA72FDF894FEFA9EF9F5A3EBE899F8F09FFFF9A5FAF4A0F6F09CF8F29DF9F39EFBF59F F8F29CF7F19BFAF49EF0EA93F6EE95F8F095F0EA92EFEA95F9F29EEADB86CBB55CEFD579FFE88B FDEA91F9F099EDE798F2EC97F6EF97F2EB93F2EB93F6EF97F3EC94F3EC94F4ED94F4ED95F3EC94 F0E991EEE78FF2EB94F2EB93F6EF97F3EB97F1E996F6EE9BF1E998F2E99AF4EB9CFAF1A2F3EA9D E6DD8EEFE792F3EB98F4EB9BEEE598ECE399FAF0A7F0E79CF0E89AE3DB8AF5ED99FCF7A4B7B16E 55501C1A1400605A28D4CD96FFF9B8EDE79AEBE590EFEA90EDE68DE4DC84E2DB86DDE48EFDF29F F1C374C08131FFD37DECDC7EECEF95F0F09DE8E093EBDC8EEFE795ECE88CE5E07DDFDA82ECEAA3 B4B5811515007C7D5C32321F060400A4A067EEE5A3FFFFB7F3E898EBE291EEE797EAE695F2F19F E9E896F4F3A1EBE691F7EA96FFF09BF3D882EFD07BFFF0A4FEF3AAEDE097F1E398F8EBA0EEE295 F4EB9DF2EA9FF3EDA1F6F0A5F7F2A9F6F2AAF7F0A8FBF4ADFAF3AFF5ECAEF4EDB0F7F2B8F1EBB4 3C3603D0CC90F9F5B7EAE9A8EEEDA9E1E397E3E196ECE99EF8F2A8F7EFA7ECE39FFAF1B0EFE7AB DFDAA3241D007D7A4BF9F7BFE0DEA0F5F3ACE5E395FCF9A6E5E08CF0E998F4EC9FF7EEA3FAEEA2 FAEFA0F9ED9FEFE5A1F7EDA7F7EDA1F3EC9BEEEA9BF2EFA7F9F8BDECEBC1777B5C393E2F454939 00020003020074724DEEEDBCEDECABF4EFADFFFFC1B4AF7D312A065B582FDDDCADFDFFC9F0F0AC F2F09FEEEB9AE5E292F1EE9EF6F3A4EFEC9FE3DF95E3DF97EFEBA5EEE9A7F2EDABFBF7B8EBE7A8 DEDA9BE5E1A3EBE7A7E6E2A2E0DC9CD6D292E7E3A3F9F5B5F4F0B0F1EFACF4EFABF0EBA7EFEBA4 F2EEA7F3EFA7F3EFA7F7F2ADECE7A3ECE8A4F3EEADF8F4B3FFF7B5FFF8B2F6E8A2F0CF85E1B56D EAB970FABF76ECB068D4964FBA823CC5924DF4D18CFFFDB9FCFAB6FAF2AAFFF5ADFFF0A6EFCA81 D4A75EE6B76FF9D68CFFF2A3F5EE9BF9FBA9F9F4A8FEF0ABFFEEAAF2F1A7ECF1A2F1E999FBE095 C7964CDEB96EF4E69CEFDF9FFEEDB0FDF9B5D4CEA90700000300008F8767FFFFD2F8F4B4F3EBB4 EEE2B2E1D5A0E5DA94F2D177E2B04FFDEA98F4F4B6F0F7CFFAFFEAD5D7C68B7E6F1B0701251600 E1DCB1FEFED0F4DDA8FBEBACEEF4A8FFF7ACE2B670D79D58FFF2A4F4F29FF3F9AAF8EDADFAF1B7 F5EFB6FAF4BBF7F0B7F2E8ACFDF6B7FCF4AFFFF2A3F6D37DDBB55BDFBA63EFCD7AFFEA9FFFFCBF F9EDC0FAF0B6F1EBA2FEFAA8FFFBB0F4D090E3A976BF6E3FB96733EBA260F9D182FFF4A2FFE595 E5C377C69E53B9964CE3C67FFFFBB4FFF3ADF7E8A2E6DC96F7F0A9F5F2B1DCDEB91D200F080A01 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFDFDFDFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F1E889F0E788EAE184E7DE81EBE285E5DC7FE0D77AE5DC7FE6DD7EE7DE7FEBE283ECE082F1E486 EADD7FE4D779EBDE80F2E587F0E385F1E486F2E587F0E385F2E587E9DB79D5C862E1D46EEADE7A E4D876E8DA7BEEE485EBE084EFE48AF4EB90EDE48AE7DD84EAE388E7DF85F1E78FF7EB95FFF399 EEE181DED670FBF68EFEFA96F7F397F6F3A0F2EFA0F8F19FFEF8A4F7F19DF3ED99F8F29CF9F39D F5EF99F4EE98F8F29CFBF59FF5EF99FEFAA0FFFFA4FEF79FFAF49FF5ED98F5E590DEC970F3DA7E FFE88BFEEB92F7EE97E9E393EFE994F5EE96F1EA92EBE48CECE58DEAE38BEFE890EFE890EEE78F EDE68EEDE68EECE58DF6EF97F9F29AFCF59DF5ED98F0E894F7EF9CF3EB9AEFE697EAE192F0E798 F1E89BECE492EFE890F0E893EBE390E6DD8DE4DB8FF0E79CECE399F8EFA1EDE496EAE291F7F09F F9F3AED9D399565126100900534C13B5AD70FEF8B3EEE89DEDE696EDE594DFD785EDE695E4E893 EDDF8DFCD181D19746EBBF69F0DD81E7E58CE3E28FDFD687E5D88AECE492EBE78EE6E386FAF7A5 F7F5B45A582E2424027B7D5D121200131000DBD89CFFF8B1EFE697F3E898E5DA8AF7EF9EFDF7A6 F3F09FE4E190F5F1A0E7E08FF6E997FDE997FCE28EE8CE79E0CC7AFFF8AAFEF4A6FEF0A5EDE095 FAEEA3F0E79CEDE59AEEE89CF3ED9FF5F1A2F3F0A1F4EDA4F7F0A9F3ECA8F2EAA9F6EFB2F7F1B7 FCF6BC9F9A5F353008E5E3A5DEDD9DF6F5B1E6E79BE4E297E4E196F7F1A7FBF2AAF2E9A3EAE19E EBE4A5F6F4BDCCC78F171400A7A46CEEECB3E2DE9DF2EFA9F1EFA4FBF6A9F3EC9EF7F0A3F5EDA0 F7EB9FFDF2A2F9EE9EFDF5A2F1E995F3ED99F4EF9EF8F5ABFAF8B7F0EFBBFCFCD6A3A389030600 010400040702989A6EF9FBC3F3F3B2FAF9AFDCD891EDE7AAFEF6C4F7EFC87570521C1900B3B188 FFFFC9ECE8A0EBE79EFFFFB6F4F0A6F4F0A6F9F5ABECE89EE9E59CEFEBA2EFEBA2F8F4ABF4F1AC EDEAA7E9E6A3EFECA9EFECA9E9E5A4E2DE9EE4E0A0E9E5A5F3EFAFF5F1B1F1EDADEDE8A5F0EBA7 F4EFABF8F3AEF7F3AEF6F1ADF9F4B0F4EFABFCF7B3F2EDA9EAE5A3F2F1B0F3F7B6E3E4A2FBF6B2 FFFCB7EBC881CA9E56ECB46AFFC980EEAC64C9833DB6712BC4893FE5B86BFFF3A3FBF1A2FEF9AC FFFCB6FFEFACDEBB78CCA45DF3CE81FBDE8AFCE68FFFFAA9FFF3AAFFEBA4FCF6ACFEFCADFCEE9D F5D487CA994EFFE093F8F1A5ECE8A6E8E3A2E8E6A3D6CFA64D42300B000099916DFFFFC8F1EAAC F4E9B3F5E8B5EADDA5E8DD97EDC875C88E39FFE399F9EEB7E7E9C3F2F6E2E9E4D7FFF9ECB39C8B 2611035D5130DBD5ACFCEBB5F8F1ACD5E091FFF5A9EDC981C8924EFFF5A9F4ED9CF0F3A1F3EAA3 F8EFABF5EDACF4EEAEFFF3B7FFECB3FFEAAEFBCD87F0BC68D9A848E5C05BFFF095FFFFB9E9F4B7 EBE5B2FFEBBAFFFABDFEEFA4E5CC78C1A04F986821B17036E29A62FCC686FFEFA4FAD77FD5AF5C BD9B51C9A85EEFD088FFE59CFFF0A9F9E6A1F9EBA6FFF4ADFFF7B2FEFAB3EEECADEDECD08D8D82 070605FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFECE386EDE487EEE588ECE384EAE182E2D97ADED577E1D87BE7DE81E9E083EAE184EDE286 F1E68AEDE387E6DC80EBE084F0E58AF1E68AF6EB90EDE286E8DD81EDE285F3E585E4D674E3D572 E0D472E4D876EEE081ECE282ECE283F0E488EFE68BEDE389F4E990ECE58AEEE68CF6EC95F0E48E FAEF94FEF192F0E880FDF78EF8F48FF4F093FAF7A4FDFAA8F7F19BFBF59FF1EB95EEE892F7F19B FAF49EF9F39DF5EF99F9F39DF6F09AF0EA94FCF79EF0E98EDFD87EFCF6A1F7F09BFFF19CFAE68A F4DB7EFAE386FFF298F7ED96F4EE9DE5E08AEEE78EEFE890E9E28AEDE68EF3EC94F3EC94F3EC94 F3EC94F3EC94F4ED94F3EC94F1E994F2EA95F4EC98EDE590EBE390F3EB98EFE796F7EF9EF2EA99 EFE697F4EB9CF4ED9BF6EF97F5EE96F0E893F3EB99F3EA9AFAF1A4F3EA9DEDE497EDE497EEE597 F8EFA0EFE9A0F9F9BADFDA996862292822002C2303ABA368EBE3A4F4ECAADBD38BE7DF92ECE596 DCDF8BF3E895FFE192ECB865AA7F28FCF297EDE68FE6E18EE5DB8CEDE191EEE792E9E68DEDE994 F3EFA8BFBC862D2A0666654622220A040500716F39FAF6B4FAF3A8D5CB7AF0E492DBCE7CEBDF8F EAE292E5DF8EE6E394EBE696EFE897FBF0A0F1E290FFEC99F6E38DD6C56EEDDE88FEF09EECDF90 F9EDA2FCF5ADF8EEA6F9F1A8FAF4A7FAF5A4F7F4A0F3F29DF1EB9FF3EDA5ECE5A0EDE5A4F3EDAE F2ECAFF4F1B5948F55534E197F7B40D8D699E2E19EE7E89DEAE89BE3DF93EDE79BF8EFA4F3EBA2 EDE49EE9E2A0E6E1A2FFFABFB4B27C2B2801B7B47DE9E7AEDFDB9EEBE8A4FBF7AFF8F3A8F7EFA4 F5EC9EF3EA9DF8EFA0FCF29FFDF79AF2EE8EFFFEA6EEEA9CE8E4A3F1EEB9FBFAD2B3B1911A1A07 0201002B2C223A3C1F9F9F71F9F8C3ECEDABECEAA3E4DF99E6E0A2EFEBB7F8F1C4FFFFD4ADAA7E 2C2B0C747142DFDA9AFFFFC0EDE7A5EFEAA8F2EDA8E6E29BF4F0A7F5F1A7EAE79AF0ED9EF3F0A1 F4F2A6EFECA4F0EDA5F8F5AFF6F3ADE8E5A1E6E39FEAE7A5E7E3A3E7E3A4F1EDAEFAF8B8EFEAA9 F9F4B2FAF5B3F4EFACF2EDACF6F1ADF0EBA7F6F1ADF2EDA9F2EEA8F5F1ABEDF0B0E5F1BAEFF9C0 F2F4B9F4EDADFAECA8FFE8A2FFE49AFAC57BE9A95FF3BE74F8AE64E6873DCF651ECC7730DCA25D F0D38EF6EFAAFBF9B7FFFFB7EDE495E8C776E4AB58E1A550EBCD7AFAEA9FFFF2ACFDEA9EF8EA9B FFF7A7EFBA6EC69045FFE99CF6F4A6F0F3AFE5E8A6F3F7B4FFFFD3C7C6A31310023D3B15EFECB4 F0EDAEFAF5BAFAF3BCF0EAACEEE7A0E6C476DDA355FFEBA7F1E2AEFFFFE0A1A8903B3E31534D41 E2D4C0CFC3A72017102D290CC1B97FF6F9ACD9E895FEF4A7F3D691CF9654FFE79DEFDF8FE0DD8B E6DD8EFCEFA5F9ECA6FFFCC0FCF2B2F1D18BE6BB6AD39F4AD09B43F9CD79FFEB9CFEEDA5F7F4B2 F5FFC4FAF7B9F0CC8BE9AC6AD98A47B86620CE873EE5BD72FFE89BF7F1A2E0C676D9AE5CD39B48 CFA85DE6D08AFFF0AAFFF8B3FEF6AFFCECA8FEF1ACFEF5B0F6EFAAFCF7B3F9F5B1EEEBAFFFFEE0 9592820C0902FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE6DD81E9E083F6ED8EF2E98AE4DC7BE5DD7BDCD374DFD677E9E083E8DF84E1D87C E4D97CE6DB7FEADF83E5DA7EE7DC80ECE185F1E68AF4E98DE9DE82E6DB7FE9DE82E8DA7DEDDE7E F6E787EEE080F1E484E3D676E7DD7CF2E88AF6EB8FE4DB80D9CF76E6DC84F1EA8FF3EB92FCF29C F1E590F7EA91FEF192E2DA72F7F086FEFB93FEF99DF9F7A2F4F2A0F2EC95F8F29AF1EB93EDE78F F2EC95F5EF98F3ED97F1EB95F7F19BF5EF99F1EB95FAF298D6D072BCB65CEFE992F9F29BFDEE97 EFDB7FEED579FDE687FFF095F6ED96F9F3A2F8F29EF9F29CF3EB95EFE791EFE792EAE28DEEE691 EFE792F1E993F1E993EFE792EDE58FE9E18EEAE28EF0E895EFE794EBE390EEE693E4DC8AF3EB99 F2EA99F0E898F0E898EFE793F3EC92EFE88EECE58EF7EF9CF3EB98F3EB9BF7EE9FF4EB9EF6EDA0 F3EA9DE9E092EAE397EAE69DF0EAA4F6EFAE766E32170D002118019F965FFCF4BDF2E9ACECE49F EFE89DF3F3A2F4EA99FCDE8CFCDA85B89039E2C972F7E894E8DD8CE6DB8CEDE291EBE48DE5E08A EBE89CE9E4A77672452D2A136C694D1816001F1F00D5D495F8F4ABEAE393E8DC8CE8DA89C7B766 EBDE90F1E898F3EC9CF4EFA1EBE599F0EA9BF2EA9BF9EE9EFFF2A2FEEF9BEEE084D6C86BF9F29C E5D889FAEDA3EFE39EF9EFA9FDF5AEFBF5A9F4EF9DF1ED96F3F19AFAF4A7FAF3ABEEE7A1F1E9A4 F9F4B2F4EFB0FDFBBFECE8ACD9D5993C3706C2C086EAE9A8E8E99FEAE89DE5E296E3DD91EDE59A F8F0A6F7EFA6EFE8A3DCD795F7F2B3FAF9BC8482501B1900CBC792E7E4AEDDD89EECE7A7FAF3AC F1EB9FF7F09FFBF3A2F3EA9AFAF29FF8F492F2EE8DFCF9A7EFEAA9FFFAC7F5F2C86B6846131104 0000006F6D4CE0E0BDD8D7B33834146F6B40FFFFD5F8F3BAF7F4B6E6E2A4F3EEB1F0ECB0E2DFA1 FFFFBEDADA9553511F3E3909B3AD71FFFFCBE7E2A7E3DE9FE8E5A2EEEBA3F4F2A6EBE999E8E694 E6E490DFDD8EDEDC90E2E096EBE99FF1EFA6F4F1ABF0EDAAECE9A7EDE9A9EFEBADF2EEB0FBF8BA F9F4B3FCF7B6F9F4B4F2EDADF1ECADF5F0AFFFFCBBFBF6B2EEEAA5F2EEA7FAF6ADF6F2B6F5EFC0 FAF3C4F3EFBBF1EBB2F6EFAEF8ECA7EEDC91FFE99DF9E89BDBAC5ED7A254F5A658F38D42DD7331 C66026B25821C07940E4B072FBD995FFEDA2FFF2A2FEDA87FCC06CD0A352CCA255E9B972FAD88E FFE698FFF5A8EAA55CD8964DFFE59AF2EA9EF0F3AEEEF4B2EDF9B3E6F0B6EFF7C5C0C596606130 8F9055E1E2A1F3F2B2F6F5B6F1F1ADF9F7ADEFD889D5A556F6D995F7ECB5DDE4B9263318091501 4B533921230EE5E6C5C9CEAA060C00545418E0E394E1E897F2E298F6CD89CA8A4DF6C27EFDE196 F8EA9AF2E393FFED9FF2D38BEEBF84E1B26FC9A353DBC163F6E98AFEF6A6FFFCB4FFF2B7FFE6B0 FFDBA4ECAE73C67C3DB36323C47933F1B167F9C577FFD385F8D286DAAF67D3AB63DDBB6FF0D885 FDEE96F9EA9FFCF1B0FFF8B6FFF5B2FCF1ADF6EEAAFAF4B0FDF7B3F2EEABFDFBBAF5F3B2EDEBAE F4F3C16F6D50211E04FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0E78CF1E88BEEE586ECE483EDE582F0E886E1D879E0D778E9E083E2D97E D4CB70E0D57AE0D579E8DD81E7DC80E6DB7FEAE084EDE286EDE286E6DB7FEADF83E8DD81E6DA7E EDDE82E5D678D3C566EDE080F0E383EBE080EBE180F1E789F4EB8FEFE58CEFE58EEAE38BEAE28B F8EE99F4E894F6EA91F7EA8BE5DC74F1EA7FF5F28BF9F596FAF8A1FBF9A4ECE68DF7F297F5F095 EFE991EFE991F1EB94FBF59FF5EF99F7F19BEDE791E7E18BF3EC91ECE687DBD47AF4EE97F7F098 FDEE96DFCA6EECD474FFEF8FFAE98DF4EA91F1EC99FDF7A4F8F09AEFE792F4EC97F9F19CEBE38E E7DF8AEBE38EEFE792F1E994EFE792EDE590E8E08DEAE28FF5ED9BF8F09EF2EA97EEE693EEE693 EEE695ECE493F2EA99F8F09FF6EE9AF6EF96ECE58CE9E28AF4EC96E9E18EE6DE8CF7EE9FF5EC9D EFE699F3EA9DF6EDA0F9F3A5FDF7A9E8E296E5DF97F0E8A7A49A62281D0814070075693DE7DDA9 F1E8ACF2EAA5F2F0A3EFE694F7E08CFFE088E4C76FC8A953FEE694E8D687E2D787EEE491F2E891 EDE794E6E49EADAB752825003F3B21332F15100E0058562CF3F0A9DAD786F5EF9DE5DA8AFFF5A5 EEE08DFFF4A2F2E798F2E99CF7F0A5F4EEA2ECE69AE5DD91FCFAADF7EC9DEFE493FCEF93EDE180 EEE086FFF3A0EFE197EFE29DFAF0ABFEF5AFFAF4A9EEE997EDEA93F8F69EEFE99CF1EAA2E6DF97 ECE59FF8F3AEF4EFADFCF7B7E3DFA2F5F1B4A7A16747450AF3F1B3F1F1A8E9E79DE9E59BDFD98E E1D98EEFE79DEEE69DF9F3ABE3DF99D0CD89E8E7A7FFFFD6787644343013DDD9AADEDAAAE4DFA5 F9F2ADEEE89AFAF5A4FFFBAAF0E797F7EF9EF7F297F1EE96F9F6B1FEF9C7EAE8C3757254090600 000000838254FFFECDFFFDC9EFEDBCE5E0BC4C46214E481EE2DFB0FFFBC5FDF8BDF6F3B1F1EEA6 EFEEA1EDEF9CF7F9A5FFFFBF948E590C06005C5629E3DEA8F2EDB4EDE9ABECEAA7F1EFA5F3F2A1 DEDD8AD7D781F1F09FF3F1A4EFEDA1E7E59BEBE9A0FAF7B1F7F4B1EAE6A6F1EDAEFCF8BBF3EEB3 F0ECB0FBF6B5F5F0AFF2EDADF7F0B3F9F3B5F9F3B5F3EDAFEEE9A7F1ECA8F0ECA6EEEAA1F5EAAC FFECC0FFEBBEFDEEBBF8F1B8F5F1B2F3F1AFFAF7B0F7EFA6FCF0A6FFFBB0F7DD91F3C377FDBB6E E79852F09152E47B40D1652CC96328CB7030D68542FBB26BFDCF85FDE296FFE698FDC077F1AC69 DCA45CD7A55AFBC87CEE9651F1A55FFFEDA3FAE49AEDE3A1EFEBACECEEAEE6E6AAF0EDB5F2EDB5 FFF8C1EEE2A7F2E6A9FFF7B8FDF1AFF3E7A0FBEDA3EFD184EDB76AFFECA6FFF8BEEBE9B7323A12 1C2602949E730A1000909871F7F9D639432D3D3E02E2DE91E9E396FCE399FDDA99D98C50B96E31 F0BF79FFE496E5CD7DD6B86AA77E33C5944EE5B66CFFDC8DFFFEAFFFF7ABFEEBA2F9E3A2E5BD83 CE9259C46F34D36A2EE27939F49C59FFCA82F6D082CFAC5EC5A559D0AA63D3A865FED996FFF7B0 F8E89CF5F6A4F9F8B2F2ECB0F4F0B1F3EFAFE6E4A0F6F3B0F5F2AFF1F0ADE4E2A1F5F4B4EDEBAF EAE8ACF4F4B44A4A27706F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEBE287EAE184F1E989EBE281EEE683F0E886E6DE7DE9E081EFE68A F5EC93E9DF85F0E78CE2D97EE8E084EEE58AE1D87DE8E084ECE388F3EA8FEEE58AE6DD82EBE287 EFE289F5E68CEFE086E8DB7CECDF7FF5E987EDE382EEE483E9DF81F2E98DECE289EDE38DF7F098 EEE590F4E997F7EB98ECDF88F0E384F4EB84EDE67BF3F088F2EE8DF7F49DF3F19BF3EE93F8F397 F8F397F5F095F7F297FAF59BF9F39BF5EF99F9F39DECE690E5DF8BF7F096FAF395F4ED92ECE78F EFE991FBEE96EEDD80CCB454FDE685FDEC8EF5EC93F3EE9BF9F39FF9F19CF9F19CF2EA95EDE590 F5ED97F3EB96F2EA95ECE48EF7EF9AEEE691F1E994F5ED9BEBE392F0E897F5ED9DF2EA98F1E995 F0E895EEE693F7EF9CF1E996F2EA97ECE590F3EB94F2EB94EBE48CEEE78EF1E994ECE490ECE492 F1E997F3EB9BF0E798EAE193F5ED9FF1EB9AF1EB9AE6E192E8E299FBF2B7C9BF8E4B3F1D0F0300 44381CD6CD97F5F2B1ECE79EECE593EDE18AF4DD83FFE187C09E49DABA69EDD789E0D383F2EB96 E9E087EEE693E5E4A44A471D201C041C17070F09001F1B05ABA969F3F2A2F4F19AE5DF8BF5EA9C F0E394F5E794EDE18FF1E797F2E99CE8E095F2EBA2ECE69DF1EBA1FAF1A8F1E99FF8EFA2FDF298 F6E98AEEE086E9DD8AFDF0A3F3E79FFCF2ACF2E9A2F8F2A7EDE897EFEC98F7F5A1EEE89BEFE99E EFE99FDED78FEBE69EF7F3AEF5F0AEF3EFB0F6F2B6FCF7BE8C8951737136F0EFAAE5E29CF6F2A9 F5EFA6F3EBA1E2DA8FEBE39AF5EFA7DFDB93CBC882CBCB87E8E8ADEBEBB8514E2A443F20DEDAAF F2EEBBEDE8A7EEEB9CF8F39FEFE994F2EA9BF3EA9EF2EC9BE7E29AFFFFCCD8D3B1595441050300 0E0D017F7F54FEFEC5F8F8B5F6F4ACEEE9A5FEF8C8FCF5CB817A503B3414B8B786FBF9BFFDFCBA ECEA9EECEB9CECEA99F1F09DFDFAB9FFFDCDD7D5A5635F3827230194925BE8E6ABE5E4A5E6E69F EDEEA0D9DB87E3E690E6E596EDEB9FF5F3A8E8E59CEAE79FE7E49FEFEBAAEBE7A7EBE7A8EAE5AA EDE8AFF8F4B8F7F2AFF1ECA8EDE8A7F0EAABF5EFB3F8F2B6F0EAAEEEE9AAFAF5B3F0EBA6F5F1A9 EADC9DFEE3AFFFEBB7FAEAB2F3EDB1F9FABBEFF4B4EBF3B2EFF3B1F5F4B4FAF5B4FDF4B3FEEEAB FFEDA7F6DD92E7C371EBB35FE99746EB8035E86E2AD6591BC8571DCB662FC76D34DA8945F0AB66 FFC282FFBC7AE59E57E5954DC35B17DD7633F8C47EEBC880F9DA9AFFF2BAFFF5C3FFE6B0F1D097 F6D49DF4D5A1E1B483E8C491E3B77DE0B474E1B772DDAF6ADAA056E29B52F2BA76FAD399F7D6A1 F4DFACC6BD886D6331342D15AAA678FBFBCEC4C699D3CB8DEFE8A2FCEDA6FFEDA9FFD99AE2884C BB5B20B56B28DEB065CBAC5FDFBA73ECD389FFF79FFFF5A7F7DCA0F0BC91E08B64D07646D27C3C E19045D58D3EE29449FFBE7BFABB74EEC272E6B368D7A560E7BD7CF2D797FAE8A7F3E5A0E9E19B F1E7A3F6EAA7F8E6A7F7F0B5F1F1B8E9EAAED7D999D4D594EAEAA8F3F3B2D4D594E3E3A3F0EEB4 EEECB3E9E7AEEEEDAC3B3A06B3B07AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFE68CE7DE81E8DF7FDFD774E2DA75E7DF7ADDD573E2D87A EBE286F4EA91E9DF86F5EB92E7DD83E5DB82EAE086E6DC83F2E88EEEE58BF2E88FEAE087E4DA81 EAE087E9DC85F2E28CF4E48DF0E386F1E484EEE280F2E886F4EA89EDE385F2E98EEDE38BF1E792 F4EC97EEE591F5EA98F9EC9AF1E48EF4E788F8EF89F4ED82F7F48BF1ED8CF2EF97E8E68FF2ED90 F8F396FAF597F5F093F3EE93F4EF95FDF79FFBF59FFCF6A0FDF8A3F5EF9BFAF398FBF495EFE88D EDE88EF2EC92F9EB92F6E285CEB656F7E07EF7E588F7EE93F7F29DF7F19DF6EE9BF6EE9BF2EA97 ECE491F2EA97FAF29FF7EF9CEEE693F7EF9BF0E895F4EC98F6EE9DEDE495F2E999F7EF9EF4EC9B F2EA99F2EA97EFE792F7EF9AF3EB97F8F09BF5ED99F8F09CF6EE9BF1E994F3EB96F4ED95EEE78F E9E18CECE490ECE491EAE291E8E08FEDE498EAE296EEE795E9E38CEDE795F4EEA7F8EEB9D4C8A2 655A3B0F06004B4411918C50F9F0ABF3EE9DE9E58BE7DA7FFDE188D8B05DB18A3BF5D98CEEE290 F1EA93E7DE83E7DF8DB8BA7D1D1D0637341B110B04130D00474219E7E49FF1EF99E8E489E8E18C F9ECA4F2E79AF1E792F0E593F3EA9AF3EA9CE9E196EEE79EEAE19CF5ECA7FFF7B2F3EBA3F1EBA0 FBF09BFBEE92F5E78EECE08CFDF1A0FAEEA1F6EDA2ECE49AF2ECA2F1EB9FF8F3A6FBF8AAEDE79B F0EA9EEDE79CE0DA8EEDE99FF6F2AAFBF7B4F1EEAEF2EEB2FBF7BEFEFDC859571DBAB978F5F2AF E5E19BEFE8A1F6EEA6F2EAA0F7EFA5F8F2AAEEEAA2E1DE97CCCC86D5D596C0C188DAD9AB2E2A14 5C5831FCF9C8F1ECACEEEB9AF8F49BEFE993F2EA9BF3EBA2F3ECA4FCF7BCD0CAA2312C17030000 0A0900959671FCFDC8EDEFA7ECEB99F2EE9AFCFAA8FEF9AFF5F0ADFDFBBFABA5702623058B884E FAF9BAEDE9A8ECE9A6E9E4A3F2EAADFAF4BDF6F1C1F6F3C3F0ECBC928E64332F05565327BBB97F E8E7A6E2E198EEEFA0F9FAABF5F4A9F5F2AAF3F0A8E4E19BEEEBA7F7F3B2E7E3A3ECE8AAF6F2B5 F5F0B7EFEAB0F0ECADF1ECA7F2EEA6F4EFACF4EFB0F3EDB1F3EDB3FBF5BBFBF4BAFBF5B8E8E3A2 FBF6B2FAF3B0F7EEABFBF4B3F5F1B2EFF2B3F5FBBDEEF4B8EEF2B9F2F3BAF8F3BDFEF4BEFEF0BD FDF0BEFFFCC4FFFEBCFEFCABFFFA9AFFEA7EF7C860FFB75BF7994CE4763BD96335CE592ED3672B D56325DA692FCD6F2FED9853F39751DC6725EF7B3AF99C57DB9E5AD9A165B67A4CC88666BE764C B36734AE5C27B1582E9F401DAA4825AD4C1DB85C22BE6224B2581BB65515B24C0AB55217BE642F B16031B36E3CCB925ED4A76FE0BD85FAF0BFFFE9BEFFF1C7F1DEAAF7DEA0E2B778E3A968FCAE6C DF7737DF6E31D67B3AF6CC84FADB93FFD797FAC58FD19F6CC18052B36034C86537DF7840F5944F FAA852FFBB5DFFBB5EEA9E4FEE9C5AD99650E5C471FCE397FEE9A8FFEEB4FFEFB7F7EEB1E7E3A3 E4E3A2EFEAACF5EBB2F9E8B4F7F1BBF4F5BBF0F1B5E3E5A7DFE1A0F1F2B0F5F6B4DEDE9EEFEDB1 F8F6BEEFECBAE1DDACF6F6C647441F58552EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF end %%PageTrailer %%Trailer %%EOF ������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/epicycles.png����������������������������������������������������0000644�0001750�0001750�00002301113�14435153342�015524� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��V��ô���Ö¢vä���bKGD�ÿ�ÿ�ÿ ½§“��� pHYs�� �� �šœ���tIMEßkù9~���iTXtComment�����Created with GIMPd.e�� �IDATxÚì½i¬%é}Þ÷{ת:˽Ý=Ý3MRÃá*Š”ÄH"ER€-ÙŽ$ëƒ ‘¥D‰Vk Hv$ØLL9†>$AD2`0Äß‚,fÀ0¦,ÁFœE2'Ô-”(î”gã,=}ï=çTÕ»æÃÿ=Õ#¶’ø¡`0Ý}—S§ê­ºÝ¿÷ù?úÌoüTíûÐG¬uxï)¬µxïH)s<žÈ9Ó÷=Þ[JMcÐZqssÅ48gÑJX×Ó÷=¥Æq¤”B)…Z+ðû¿¿sƺ®£”DΉÝv º’Räx< 5ôC9³ß P+󨵠”"¥„R c µV¬µäœ™ÆD 㛡GéLc41FjkJi†ÍŽãxâúúß9jLT2ÆJ C”®ÔZ¹9œØ w(µÓ„1š~p@!ƈ֎yíqv çL­•yžqΡµ4ÆX¬‘ßçœ !RkÅ9‹Òr¾”RäœÇ#ÎY¬5¤$Ç7 F[´v”9grΔRÚõKì÷{j­ÄQJQkEkRjùþµV”R(¥ˆ1._/Ç•(%c­&—„ÖŠ”"777ôýÀf¸àp3Bäþë^G‰‘뫣麎f¬3xï™ç k¤8çä\ö[Œ±Gj…ÝnÏÍÍ Þ÷cÈ9“R†*káü^6› )%‡1F6› »ÝŽãñˆ1ã:²RœŽGº®Ã9GŒqY‡¯^?}?`LO ‘”1N¤4ã¼ÃZÃÕÕ C¿ãb‹2!LhɹbŒÁÚ£ (UÖr­q>a l7[y±àœ¬;…ÃC3s1Fᜣ”ŒÎ;ºÍ-j9Þ¼D.Údœ×˵O3J)†aƒ*=Z›vÜT!¥€µ–ÍfÇÇWPµ®ÃŒíéü€59C ™JFkˆéHˆ'ºÎã(”9âØ®›!«ÊáæÄnwÖSÌ8Û3l6”Z)b´A)GŠ ”¦ï!L¤<¡TÁzƒ·•xs ¢±®ÃêŽ\-9ƒóUi´Ö”Z q"‡bÃþÖ%§ãW_æÖåkÔ²–© k%e231”,çÝûPÌóŒwPË}g]¥¨µdŒ‘{·VCN•ZÖj”*¤AÉ}T+Ä1Æà¼GiM-…’åyÓ %%æ9°Ù<*Š_!—Œç¶(.8]G†ýæãŸÿÂ'xâ5·Ø]z”‚Z4nû]¬ZµjÕªU«V­ZµjÕªU«þèeþâŸÿ?Ukešæ©@k@­…œ„ÖZ8F 6àS˜¦‘”Rƒ ¥N˜ÃÌÊTrÎh­ñÞaŒ–0ƒ¬°0Ï!*­ú ,Xk°Zà ÐÀŸ|ïyžDid)% ’bn Øs$ưÀC‹£í4SÎÄpÖ¶ÓT)%æ‰R )DJÍXk±Ö“t}RPJn R¡”�»’ÆXœõ(¥œ´ô}ßડäÒ q¥”ºÀL­5•GpÓƒ1º½¶*T0Æ ´"ŲœË”Rƒ³k-ó</à4ç¼ÀÓóy<_Ÿ3À<¿~)…¥¼÷íšœ¡¬&¥Ä8žÈ©rqq‹a8ŽÄH)4ø®)¥â¼m0¹.×í¼†´RÄ�…uv9W¥dŒÑíØ4Ö´Xìœ#„Àét"F9Æ30Ÿ¦‰®`–JÆûn9–ÓéÄ8ŽíX ÖÚÖ©¬ÿR „�ª D3`åé§Ÿ‘k×u¤,×i³È%¢P(¥Ñƶ5SH1€m@+Õ6díyß‘Râtœ°ÖµsQ°Fc¥¬P¥ó„s¦ûL©Y6Š¢ëdmMc@+C­s¤RPZŽÅ9Û67*——8çQÊ€1r?`¨¥’R*÷ rP ¥$zïè¬cOœÆÎ;Œ±œN]×ã|G­òú)f¦Y�lç;J.Œã‰yé¼'çˆR­¡ÖD «Þ÷€!ÅBYc9ƒR �•e (HqƨH­3ÖdúÁ¢tA©DŒ31Íh ÊTBÛóAžAZ«ö|“ç–6mƒEk¨‰i¾Æ:Y¯9J m-™œ£<3SXž™çM ¹‡ ´MŒe³¢VRÎk±~Tj¨D´Qh J{œß¡*X«¹óøm6ÛŽy©À`ýW­?¹V­ZµjÕªU«V­ZµjÕª/ÙRÄí霣ïûÅMÚ÷J)NÇ™Ãá@­ï £ ¸rα٠8çNqýi­š;2Ðu}ߣ^@¨sv\ÎBˆhmÈu‡9Ÿ¡šbžÓT顿„jðJ`†À‘ZëÏ Ö:Û\¶F\—56hœÛ±ê9Äë:¿¸Ik©Xß à˱qÌJJâÕÆBÆXhÒUBb»Ù“s¦ë*ZYœó”R aÆ{÷žœŽ €N(ÆÈ¹QJÑuJ—Åé ,nËö[r.¤”©¥â\(JÉËuõÞ7ø9âœJn6¯rúž?–sÆ9·\#¥Ôâ^-j\Dn6†~‹µ¹RLt]‡Ñоw(%ršFbšéºnêòºr}N§±ËŒUŽR39fºnCΉ”ê²>ÎÎgç,ÎÙv^ÆÆ˜çD²Q�Š¢4U™åüɺs‹[µ”²@æÝ}‚RŠ‚¶Š8Žãˆµ†‹‹ÃÐ3±!ï‚5–Ü~§¨r~r¦·XÛ“ìLòcŒ„ùÀn»çòò¥ !|sÅB&åØ iBw=ºz¦ñšš"Jk¬ñ¤š°Öàý Ð4ŸÜ—Í�m*Fkª1ÄȹRK]Þo®×÷(4JÕGìRF³�cç1L\__q1lú U+œï˜¦€Ò”AUƒ1ŠZÅy=ŠŽê 5'´×{œQ²ŽPX#.ÔL¡b¨U£Î÷’2¨åA |© Ž:C‰r¼Á;Kßð’@XG¦¹* K×YR:¯ŸÜî½@× ”’ÐÊ`œ¥¦Ê8Oìv»æ~Wdµdj y®ÍÉ.�ÔZq�[k !4G¼ù}©9íÒ@iÿÑî/¹&FEP‰ù¨ú­g<žÈE¡´ÅX·þÔZµjÕªU«V­ZµjÕªU«¾Dd~ôGþøOmè{NIÆVs—¢8²t§g÷j%׈Vâ0UÅeZ+…Ò cus„*úÞ7  aÂ:ËÅÅm1DN§©9e¼Vkµ¸5¾i”ÝÐy¨­+9‹+Õ:ÝÀj!—$îVg0å‚÷?cÇã‘Ârì9W´¶íÐN TŒÞ·±îœ°ÖÒyÒg­ÂO­ P ›¡E)T@޿¢”] ÊÙõ{¤)e”Ö˜æz˜išXŽ_àij®JÝFŽa¹kÇãiáçhè3 Ãâæ†­9´¶t¾C¡I)£µA¡Œ#×TØ\Óš¡R¨E-€:ÅÌ<G¬u¤$·©µ†®ï–c—1xqyzï a°§ ¥Ø¶…ív ÿ'pm.Ú™”bƒÑ×µ×°s–ívÃ8ž0VÓõ!&¦ij®[ýÈü*P{Þ¸¾¾ætºU@…aè†A`>EŽ¥´H(®UÕ¾Ÿ8¬c „0ƒª8çÑÆŠS°Î¡£T0Ö¡dŒ9J¢Pq®£”È&”e5ã<Q*T¥¨r”+J;ÆñHʧÅõ:‡™˜ÚªRrcÂ:ZC­ ª*t•û bÕL8gÐTއ#…v£e½å²þç”)Eá¬kÑo JijÉ8cØ]ì¨9Qs¢ä„¦b´Â(Cͦt ZæÈ¢D€(Äáj*ŠùÀñúY¦ðœŽ”|¤Æ#WW/’sÍC¡;×6{²¬%UѺ¢´B+‰l¨”ævLÓ c`š'r*WSbžgŒÑ¯Ú¸°XgA)j}tíÏ!ÖZ|'ÎäsÔIÎYÞk)ä25‡-mýJ˜o´&§™nðäT±¶Çšeß²þäZµjÕªU«V­ZµjÕªU«¾d¡ ÚXõ4INãíÛ·9LÓL)k¨Jɉ ”€<o¹B­¥ÖNÀX¯çqqvNSÄZµ¸UK‰”É91M'¦)Òù ›Í€ÍRwû-1dt¼âÌ<œ1h Z—–ú('ô ,Ï®1¥ª”R‰-çó ÅÁ©¡jºn€ª©:œo¯©Zîk&žÞ{R°jC«ž\pTïT8'´Vx/P5†ŒuåU£ñeŸÖX@·|³œW\g kÖ-ËÓR«€PyÿcÖF¼÷X+×§”²@Ä3dõ޷ׇ®ó¿oìß.,¹¸r\ ´n S·ÉëŠÓÔ²Ûíèûk� ÑÞO%¦€÷¾}9Ó4ruuÕàdi®ßº¼Î+¯¼LÎqÐ÷ ÐF1lzqÖz m”ßùŽ~%Ç—ÇH¿ÙµƒôÿÈ™}µk[¢ ZTÄi-Ñ¥oÙHiD)K×ùæ~np±Êç>rE&N'øûýŽív‹Òrþ½(¥2ž&ÉÕŠS‹4H ÄUéT`ž)Eö[\׿™ñ4Š£Ùiâ\H9£Tm#ÿ 0- T¡5Ëæ…ÖæcJ8×£ŠÀñh(E·ÎYŒV”†JE1 =¥žÝ¸šqˆÞuŽœ+a–ìbçP¥È)PsiŽÚÊ|#Ï­5VCI ªÁYGªc F;J­¤¶þ$6"a¬Âh)ƇÄùZR1ädZÂè‚ÑèO§¹(¶›µ²¸³ÏÀ|ž§vBÎ_­Õm]œ]õœnщ’3UeJ±¤$Ÿg´ÿ}k©”‚V ÝuôÍímÚŸ—Äõ^3ÖÈó4ä€ë%~m))Ɖ‚Çû J{T{έZµjÕªU«V­ZµjÕªU«¾Àj¥b!‹½uë1Fœs2Îmì26\½[ Ÿ�ªBÎi)´zu’ŒñŠƒ0„@Œ®å_žGËa@aÍy<ÜP«mãЕ³Œ­;gÅ}h5ÓxÄ»@ÀóH»sŽívËÍÍ §Ó‰Íf‹3VJf(œÆ#6Êøø8Žâ@Óµ‚Ö‰+Ê©Åqv~?!H¤n@¶¦º@ÏZ$v FqÞÖª1Æ¡”d‡ž]jµF@ ŸÎ�F\³âP=ö?Š' 9iÕ’*cäç|SÓ gyÕñÎc–Ò°óŸ{ï‰12Žã#8œqÎì/öh­™ç¹ezN§Ó2*~myýˆ1ªA¨¼”õxßãý@Œ¹ExÂ<7çn¥ë:¬µ-C•%Ö`q;Ç‘ívC) cZ¯6”R›sµ§k�ÉÆTJIÖfËÊDAŒÓI zJ‰a3,Çn¬Ä]œÏû9þâ ÏkUÑF2r%o5-?³€äJ×ù–éš êæè=qùxßwí8b,Ä03ÏòßíÛw¹¸{©BwdQXëQªPÊÄÕÕ———l·ާ´»KÉÓ5½ïPbžãx@Ýœåçs] ܺuKÀª²ãÉiÞõäTÛƒä«J©k±•Zd z'ëÆ™ŒâáÃk´.\Þ~Œ¹h´‘ÜU(Ä ‘}çÑÆæyÞ›í€6=1œ3-!¹ØìPÎcRakÎ÷w&¶œß¨*‡ÃCÒé5Ìt}OÉ¥eñz¬±Íq-à´Tq_+Ôr­=?×Â’Å zYýಸªÏùÓΉ“6å#9²ÊòœSŠªåH[k—È›3ÚZrŒä7‘KlÎú -;U)Ëx¸ÂjÒk;¶·oC¬  »vý¹µjÕªU«V­ZµjÕªU«V}IÈü¹ïùºŸ’ò#Éíûžq<‰£­µÂ—’˜|”•™sZÆÙ¥ÈJÜ­µÂ<ÏÐÆ¹^í÷û%7`'œ³\^ÞZ`$°Œá ”ôܹs{‰ðÞ¡j!4m[¤w $òæCnà¬ÔÒœ«e%f5 Øï.)¥p8Ø_ìðYË<Ohm˜Æ§Ó‘’3¾è¨%åÒ@’ZÚÆk‘ÑêRóâö,¥0ÏÓâõÞ3Ï3§ÓÈ~·ÇËf»¥–GEJç‚%q›–õdjs >rëÆ–ozvbž³o§iÂÃv»%¥´�ik¥•>çG€ö Ïy¬’E+€¸ï<Ó4cŒj%YŠaØÉqÅLÎçz¼ë˜¦c‹oÐ œÑâÎÇZ®&¦Øòtå¼*%�¸ë:¼ï–÷5M3!D¬é¨¹2ÏayÓ(ëÐË0l$^¢²ŒÛŸ¯ý0 Ëq¼Îk­)9á¼kð8‘³8—[1&†aƒÖ0M§¥�Mi°îQá–VÒ8ß÷”2Ð[ާé,Ú8jÕP*9CˆßugÉ¥¢­%¤ÈÅÅL¥ €3å‚÷=Ê”¶ *+œëp£ÖŒïUUNã‰\+ÃfKAÎCU–\ ëœ8F¶Û9e¬uLÓ¼¸¦«¥5‡Ã }?Èõõž¤z{×Ñ [R¬Xë1ÖBà¿üÛ›ižùŠ/3ó4á·[Ò4Q•8Ï©Š1$Œë[WAS ¨ª˜&yÈfKfè{ŒQÄy”|åÙov ý¥Z¨–aØÓõhÕ“Š%E©–ÎËûȱrZ6CÎå|ÖZ$æ¹´ÈOnkZ ¿Ä£„ùDiºÆh|ס•[ÎÙ9ú¼žæqdž¦vËfŠÜ¿ÆHüHJ¹mî(Bœå+JÜ«ªJŒ öÍëO®U«V­ZµjÕªU«V­ZµêK@ööíÛ€¸éªI)/ÿ°?ë À¼?—©¼¡(rʤ˜©¹Ðõžó¹¼¼�Le//ï´B™J×”z·”ǦsŽyž—ŒÎyžÑµE¥$”Vø¤MJ­4}'cãg'¦ŒÅb ÔR¸sçã8q¼9b]ÇÕÕÞwܽ{—q:cdӌӥ`š&rJ¥Ð¦9Kbè7XçI)Ë8t˜Q(ú¡cšÊ’Ï)Y£ÝRf£µf³HI€€éºo圼”øW-i¥ˆ±ó¼€Âínǃ—_^ܘçüPïýò}µÖ¿Ïµ9ôCsì=Í?ÍùÎö j;ß“òÄ4Mt­èËVzë¥T¶ÛRvÖŠÁr¡ÔDßõ”’˜%9´ïº%â@�»dZNÓ̽{Sy ô݆dó^U<•é:÷âœqªŽãHÉc-Úø%"¢ÖÊÅÅÅqŽA8çúÊ9)Kvè¾õÝ–Óx ç,ãûÆR«}N'J±€Œ—ç\軡A3ÉUJQjÅxÏvÛBdšƒ8-]G©Rµ„VÌsÄûž’+¹dŒ6Í íÄAšÕÖk©¤š–B0ÉÝ•ñt…¢dú)VbÌH̨¢äŒÖ–3Ö÷P+wn3O\ß\3´‚³ívë:Æy棿ð‹( ïüš¯á‰×½ž›WnÄ¥êj)üøÿ(Ÿüä‹|ûw~'ÓéúÃÕ5ZC-¥eõ*úaC)â´-EcL‡¥EHèŠqRskE œ'Æã‰~ð<þš7Èh|Uø¶¡Œ!É=6ºC+(YR\§d?‹‹YÀ¦sž&É7V†TaŽP-JK,I­…'æy–ÜTß6V”mnÿˆ÷Ýrß7&Œ‘R2YÇÓ«ŠàjË\PÚ‘óQ ºjÛĪ…¾W ç4¡tEW…îþÙô”WWW‹[yÕªU«V­ZõG#c òï¬ÿ©Mõ­ZµjÕªU«þ(å½çâââŸV§V=WZ-#Þgp*“±Y{.¢i9‹gøéœ‡ !ȸ{H0ì÷›0œŽ'†aXœ°òõÎ*´v”"DºÔ’Ãy<ŽâTURÖÔuÓ)·úŒL]kj…AcÈ9’¢|ŽÀ_%™—%-àuž°Ö°Û_¢Èá\Çõá!©¯*¾ÒZñØcI¶b‘ñ_`ɜÑñH©2 ¶ÛmszªÖ¶^QºJášý~OΙëë@ÓõaŽh­ an®Q½Œ±+UØ-Q«5ªsËq\=|(ãö͉kŒY ô9[ô<Ö_k%§ó˜}+Ùñ~¹öñ<²œ ¥ÔeÄý bÔ �—¬ÖæJÕ ²¢rv ?¯¯Š@9§¥,*çÌ~¿_ ¯ga'‡ûýL =!ÎUùšÝîku+]“Òª®ë˜ç¸”aí÷·( ÚŸAn­uqŸÏß9úÁ9Ç8†=` e Ë{Rh\˵m3@Ñ÷¦•‡É½á}ËØ4rýí¡r.Ĝк¾G‹Ju¹®9ËšWTæpÀãñ›ž2Í€Á9)2ʨ–ª$ß³´ÜOÉßµ-«¶à»Z*µj´vÔ©E~mM¶ã4‡Ã‘Ýy:±Ûìényª5ô݆0È>8ðóÿçùÜç>Íßøþ›ÿöƒP _ýU_Ë—½þIbŒü¥÷ÿ‡¼ï}ïà‡~øùßÿÑ/ñ]ßû]Œ¯¼D,™Çn=ÆáæŠíí[”˜ˆS¤»¼ÍÍÕ¹xüµL§º'å mì^Ѳs» i>1™Ýn/Ù²º‡¤´O¤Ä5lÅx´îñ"™\Àh‡Q´dœæÔžõQF3 Ôæ\ú­<s´äªºRP­°Ï{Uœî1Êk l”WlŒA[‹kóÕYÇÆÈ†ÏápÄ» àñÎR‰r‘ˆ2©m è:“©tÛö}G>ùÉO²ßïן€«V­ZµjÕ‘Îñ]ïz×»þ}ýÇùüç?Ïn·[OæªU«V­ZõG¤yž†w¼ãÿ|°z<Øíö­ÐFFœC˜ÑéìðLĘ[ z¦b›3Î#ôZë¥^\‘ç`ž&¨ ­ 7׌1¤”ÐÚTR†0KFç« ¨jÍÔ*Àí SJԒȵ•ÙTqë)¥Ér®ä,NVçyΜNssôUPç\S0 Œ”\±¶C!Ðežf>ò‘ŸãµO>Î[¿üÍÔZӉͶ'¥¸ä,–”)$qujÍ4Ÿ@i|gè{‹1¶Ò €¶fb’È‚œ+½ßr8ÑÔ£°³Ã-ƸD'ˆÛÖ-ÎGç|7/ÒâÞܳµÖ%ëö Ë_=Zv¼Ê(2t]Çé4µ1z€ÌÜ20÷û}Ë}Í žVœ3k—ßùG%<¥BÑTL»6ɵV‹ 5çLjy¹ã05€*`q§æ&¥9HÁ»Çï]`´'©ÐΕjǦH± •¡…V…€øñ4¡´b³\ûŽ¢X6 ÎÎÁã)0 Æè‘ ÖX”’’0‰hX™R ¥Ð@™âx<¶\UCJ±_O²^µÓ” )ª’DÏ0G”:;&1Îh­Z¾±&ç Æjœq+ðº`)´Â-ëˆqF‰ÈdR…\r‹ÐhmÈ5SâæFò­¥€-ňv–~wÁ³O?Ë'>ñ ^ÿäë¹¼uÉÕõZ¼w ›-Z)žá%¾þ½ïã[¾åOóÛÿ$¿ó;Ÿä¹/¾À§>ýi~úg>Ì{Þûe|àà™¾ÈÏýüÏSËÌ»ßý...÷\ßAÆ›c‹ë0_¹¦šŽñúH¿ßr ´")ƒ3âþÍ-“5Í‘ñ4²¿—2GÆ9à»K´Qä8rÆGV†Z*¤Ô )¨Z‰)5¸¡M.ç !Lâ´6ºÅ=ÔölqâމR"Jk:?H¶t:GÈsK€«]ò‘—rº5pŽ?y”-,×°‹uÆXR8¢”ÅZ‡ÖEÖ³'¾s†2ó<þÿóƒu­®ZµjÕªUøRJþ^øéOú_èû\^^òö·¿}1²¬ZµjÕªU«þðdŒáùçŸçÁƒàçZç¬8½”´»OÓ ¥ Jå%ŸSFÆí€-Î-×mŒ:¥„1k=ÖÂṎ֖́Ýîc ÓÀJ­ÈÈ£µjNÙ®Ó¯?0ååææFrC¨ *qš¸Ø^b¬5.…Rz¥1FÊÄ9“K�%£ìVI©ML‰*Æ8¶—Ñ_Þô†7±½Ý³Ýn$ß…1šR4!g\SWZÑùëùp`Ž‘Îo°ÎPr]F‹K\1ERžQXP0Ï}?°ßï™g¶µA­5Ûí¶ì›Åmëœo®ÒÈ4å–Yð¸MÏŽSqe@ÆþC Ø,¥.àGÜu­-ÔJjñRZöh<þìº-E�ž5’'ªµbžósŠ’Iv­ñ¾k`¹,X­5§Ói—µHyÚv»mëÂC&„Ø�«£ëzR*ã$Z"$¶ÃžI'BÈ­‘Ý i•íö¢9eTÍñt‚–E{þ ª8LíÒΖG+ qz¨Zã„Ñ¥,Þ)¬3Ëu8çÓ–’8×wC‹�”¸IQPj ç‚6™R9ÕÖ>ï�M­âÆ-5RŠÜn•JŠòùÆ8¬ÕŒã m*¾³¤\¥-Ié™uºÅ*€VJál‡÷%Nljã<ázÏÇûüôOÿgܽûß÷}ßÏSoz3w¿ÏsÏ=Çv»ÅZÇnÁ8ŽÜ}ì.W××Üâ>_ñÕ_Ç+/¼Ä¿öí?Ê{ß÷?üÃßÏÓÏ>Ǿð9~èG~„¿õ7ÿ¹V¾â+ÞÊÅůyí}\ß“b¡ï7<xùŠŸùëƒã;ÿ-Þùîw£8àÅ©¨YIq÷·»=µÀñt¢ß=NQ^rr{é:Œ†ÒÜž9O-×Và¤ßlˆ±´HˆQc¬fšF¬uíu%S×Ù)”R(²�p ÊjŠÔª¨5KÜ‚‘H�­ër¿œË±–¬Ô¶®Ä-.¥~ÎyŒÞb´d¹–æúvÎR+âÎ’‹KM“ð¶üõW»ÒW­ZµjÕªU¸:ÿýù_T¯.]µjÕªU«Výáëÿí¿©í~w‹ãé¸À€««+qôÉ8Ck-%Pj#ãÔÎ:J•íZAI%ùÒÈ~}}̓¯0 =]ß³Ùqyã�� �IDATn°ÆršFŒÖ’7©4ãx�vt]GÌ•œ2Úyb‚ÝV\‡Zi4UŠ­ŒGiq¦UU) PYàW-(#ãõs˜I-çÑ ÐÖ¢&GÁÕŽ«— |ÅW¾kEetmÄIC`³éò’H Rޤ1qy篼ü2§Ó ª”u]·@q=*¥Æ£ªçÞ°§PÈP…¯®0Jỿ¹”LH]ÉY²F‡~À8qKdB‹oh™­!Ìä¤p}'åX¦à:/@ØhNÓˆK#Ú€ÖHÔ¬bW ³ã,ã<ãŒ!×Jÿ àH[GiÙ—µV´±­¥ì)jÑ’K‰nP¹´¦v)¼ê”^¥1jAiÍõõ k\Ë®7²³†ãé„‚¥$Ëj‡:Ìx@iC7x”ÖRš–ÁûžZ!̩໎ÃÍã-Xkç!ææf‰(EìÞ•J©¹êZQS&Æ@)–»®ÇhÍœÛý-n®.Íñ!Τ0Ö¦=Q OQ™\ÆØö—eƒór ]g[S}lÅš³Œ­c(ª–ó«m¥ª‰Š8;•n÷¤×”š3Û¡&ÆB© 4”‰yæáõB®¼é5_Ž{«£ïzîß ÷Ãÿ#?÷÷þßøMß„V…7½éM<ûÜó<ûô3ãyòõoæúá‰{ßçåçŸå‡äý¼ï½¯ãÇâßÅøõßøu¾ö]ÿ——üëßþgø_þ×ÿ˜?þ/¾ø O>ùO¼öI>öË¿ÁG>ü³üÂ/ü2¿Åcwo“ÕöÛ­$óÙ÷ŽÞ;j<ËD7xÆã5ÇãÛ[3Î# ÎSï-µÄæxÏ’«4ÊJV1Cc&—H­š”ã47 í›k_¦JR[&®€óR4¦•˜QµhªÖÔj8/˃÷œUüO—£ÿ¡¥[ÜIÉ™ÓñŠ”Û]Ê9b,Ä2ãä4aMEÛ~ýé¶jÕªU«V­ZµjÕªU«V}‰Èƨ¡Z6›Çã ûý†}ßQj$L¹D‹Sòt8‚Ñ(­É©Ð9#íÞt)”I1r¸9²í·Ä"ÎI¥ ÇñHLž;Ý!Nº~Çq<b|Gžµ&R±ëxðð†7Gž|òIŽãˆ3o:â8¡«¥bIE‘R"•Šq’™s¢Òœ™�´µt½4ÊÏÓŒEa}G‰o;/ ] 139Ɉ÷á€sV�Èi¤”D×[ …ªd$øpuCg®ÆÛa/™)0Ï‘ª›íÕb�:¿%Ì™ÜFßµ©XkHóİõ”\pÁ÷V\zsÄÔŠÕ•i:@ãj¢ó®¹e¼YaHESñôƒ“œÎ@bÎtCOL£5Ue4Š‚¸’S©m YÚ×û#Ì4øÞ1µdRˆM ¤œÐb˜¨ÖamGJâÜì†-”,± 6û ŽÇ#1:ï˜b§sä’@it²”*€ÖyHÖd×;B¤pÞ³ÛíyðÊËLéˆïz®ÆQÊÐ.n3ÍT$n¢è‚2ŠLáâö%s˜¸9<Ä9'ÜZâ-Nㄳ=Öú™à I\Î1*‰R*!$B v‹s9CNEÇ8fJuÔ’0^ã´#ĉª nŒâ2JWœ³ Ý–’3Ç㉮ëäxËLˆAÀ9•RÄ5æ#½ë0ƃ�_J%—‚u ¥3Çq$¥–;XæxÂõŽã8âýÐܶ‰Ý°ãpsM)™1½Ì÷žd:¸ûø}ö›=ßûo›ÍÀ³Ï>ÃÇ?þ›<xåE¾øüÓl6=¯}Ý]¾þÝßÁ­‹{l†È³/<Ë_øóÿïüš'øÀ_ù‹  O?ý9Þñ•÷éûÏ>ûOxç×¼×=õZ>õÉÏðܳ/óÜó×|èCÿ€ÏþëNÜâ5|ç¿ù]¼ð‹|ðƒÿ=ßý=߆³Šœ9fŽ×·o]ãÄ~ßqýð%ú¾g¿ïPt é§HM†R%çÔÈ)r íÈDZ9Ø3}¿¥ïa’ñ{Ua:’#í4¥dP×A¥¨ª“hÛ‘cÅ4w¼RVÜÒFâÂ8 ÐoSgëÙ)®”lð¤0“Ë„ë,®«@”Ížâ¨JáF!À7׎lUëV×·jÕªU«V­ZµjÕªU«V­ú#«ÒôÞ1OÓéÄv;`­%¥Œ1gçÄðÆ2l¦VˆTMmœŠÓéDç=}ßÓyOœÃÐã5¸VŒ4Í3!^ypE×÷¤F9¬ñ<¸~™¾Øxϧ?ó9~᣿D×wü«æ_ÁYæ(¡P«dTGŒ³­hIܤÎ;bHX«QZF§­um¨U6ç9²1•ª(”ŒõRAe´Uh Çãç-ÞwXÛr[K gÉ~•pÇv»çxœ©œ‹¶n¸¸¼Å+b}'¸ ®BU©Uá}Gˆ“œç<“l·›et¸”Â4ÎR^CeðÆHéŠËðªB¨6*”JÁY/íëUвhÎemäkæ0ŠCSKf«V¾ŸGåX)FIönaVJ¡*¨Z˜çæpv–R îÙq<q<Œl·{@Fÿ»®'Æ7‡ƒd¿ƒÒk+§ÓH%á;Ë4N\n“2¤ÝÞɃ !´XÍ)LŒã‰Je³Ýâ]Ïáp`<ÍPo$¡$”…ínƒÒŠÃá€QïÓ” A`Ün·[ …Σüga(u¤Ô*Ã…6ú]ðÞ5'ñÐÊÚf¬õ3Άa`'Ja¸$§Ò²nÕ)ÝJE+%«šÞ÷Ìs@+ÉSͱÈû®A⪥f‹¶’k[kÆ8ÅÍñbPè®Aåqfsy›«—žÃ˜=%w²®˜§ c,¿ú+'—È—}Ùëèº=}¿Çé§?ÿy¶ò³'žxŒ®W¼ëëßÉÕÃW–؈œ3µX>ûÙÏpïñ;üÀwÿ5¾þ=·ùþêûyåáKì/öû J‰äyýßȃ—Žlº ßôÇþ8××#¿ú+¿Ág?õ»¼ûë^Ï»Þýµ<õÔ“-$òŸÿ“ŸýYÅw|ç·óÌs_à±Û·yâî}¾øÂ³h4›¬é7ᇞ¢‡-[ !°Ýn˜NGJ”Bj+ªÓµ� cu+$«Ô,9É�ÆZ´·±u„8¡-ÊA/nçµP‹¼Õ’±FA+¬;»TÏ÷Î?ýë¥$¬“˜œ#ˆ!I|éÚ½›$/Vi‰¦À¬?µV­ZµjÕªU«V­ZµjÕª/°šS`:ÆéH 3lzJ)ĘPt-gU£`,ã4-%Ú¹år}‡µ¶•Us­…”Ê#”Ò\\\p8Ž\_¹ÿ5ÔªÇİÛóÜŸç?úQ^|é·.oñÞ÷½Î;¬ëÖõTqNL1¢ŒÂ{‹1RÜ4Ïs+‘‘èišä×E p´²l·{¼wÔ, BJë%ÏQkƒV m䨶RŒÓ\°Îv¤$cÄF;¡O‘›Á³Ýn%ViœµXçÑFŠ‚¬’¬Ú’Œìçˆó†Ë2Ö_JFZÉM–ÜÛ\2 qçæ"Ž¼ÜŠ¬Îãù2ºÝÐ7HQZ½j̽ˆ3ÄV(f)9b€ßuKéÕ¹Èé1,rÖAª”¢$G…Ö•i[®ªj¹ž•ãñš¢*æÇZKŒ ï».IWEið®#„Ä8OÔ\$Bâæš&îÞ½Kž2ý°>WJ.ø®ÇiÕ|ö³_àëßû¾øÜó(¥ðÞ·l^Yo <3šý~KŒ3ã8q<qÎ6˜ª¡VJɤ$Y¼k¥H0Tº®gšæ6Æ-¥`Þ{|§—\Ë !T”‚ÃÍÄ0ôl6¦åÖªVV †¾cžFwr­c•öz]¥«j,(ÕKK½ÒÍý|›íæ1®¯®¹¹ÎP=é}—ùêŠq4 ýÀxÊüÖÇ?ÇsÏ>ÃoüúÿÅŸøSßÈ;…çžý"Ç›ÊÕƒ‘}ìÿäozŠËË Ï¿ð »mON3ã(ŽZïzœuŽ#¯yíüäOþ5¾õ[ßÄOþÇÿ ÇŸa»Ýòàå(]¹wï nW\½tÅ’Sâïüò‰ßþ]¾å[¿•¿òŸ`è:¼ò"›Ý@Š»ý?öc?Èý_}ˆ¿þ3‹oû¶?ÍÛßö§ñDïïà¼g>+ÎÛ^8ОæÞý'¸¹¾aH ç$U®•¬ýÒ ÇÂ1ÖHÔ…µ¤$ñç|]e ”LÍ•"1GPmÔCK)¨³TÕã²ÁDM d³d¬žÁý9à\F—s¢ÉÎUÊêºrÍP ª$”rËÆdG¯™©«V­ZµjÕªU«V­ZµjÕ—X…Œ5 *ìv;:ï9žNä”ID(‹�ƒÀ£”1'qj¡°Ö³ßïpÎs8œ:É}œ¦µH!Rk;žyú³üOÿðòž÷¼—ífÏÍኧÿɧyݗݧyÏ{ÞÍÛÞþvq9ªÌáx ä‘ËÝï ¥dzÛµr 6†i%‡t(%µ’-�…µš¬‹”[)" %cÏ”"#ÚJŸ‹g<›í–¾Hi&)ЙBàxÙì|?`­¦ÔsRÅhE*™ë›Ãv/nCe(¥¹b‹&e>çlO¤˜©uÂZ)Ý*E²=•’¼Ñ\‹�)gL‘ ÙZ Zi¬v}´¡…DÉUÓ²T¥PJ‘3(%ÅK›Ý³Ý¢¯¯ÑZ3Ž#Ã0,.Ös!VN‰“DTÕ ©jƒX•R¥NĨ¤(ª “2,K×yR(-9÷HQ”÷ªX¦4cœáæxäá×¹¼sIª‰)N(4Ö;¦1`•fœûÝžÏ|ú³¼õmoãÎ;þÇbæÇé¹$-¥‚ÖJœ¼JЏb Xg1F“b!gyÏÚt¶Æ·lXÝÜÏ®5ÇjÛl|ÓÂt:¶uàqÎ@éè¼dì‚&§@$£1ÌÇÀ<Œ1¼øÒ l†-wï=&PÞ;üÆ‘R}¿E)CÉ[-•\�4~÷Ã=t0lH7×\ßö¯#„À4GúnÇnw_üG—ßýÝßaë1b†ßüÍ_çW?ök¼ûkÞÇ;ßù•<vµÇw†~³ãå/²ÙyîÞ»Ã<%^yåšÇïÞg3À~òýܽw›ïß?×/<K˜F®o®¸wï1RФ—û»Tàüýÿ™ßþø'xË[ÞÊ¿óÃŽÇŸx×J:âLf_¦ï,/|ñyžzÓ|ÿü úÐGøð‡ž‡N¼ûÝï&eKo6LaäðàŠ§Ÿy†ÿã—þ1_|ùÞÿþãîãs:Üp8ØívXû¨(J+ƒwçß·Ìc49bˆ8' äÜî»Ú\ªUFù[VjŒ™Ä…Ý÷@˺G Òj˜J‰s­Q-ƒøÕ×ç¯êü§he–{µVÙ<€„ÒFò‹ƒR4^µjÕªU«V­ZµjÕªU«V}I€Uç4…DÊ3›nÃiÐJÆÌSsá9ëPº’cÄXEˆÿºN22SRÍ-*à ¥‰if'TkCIFÕkQ<óôó|ðóæ«¾ê«øê¯þJ¾ñOþËx?qívËÕÕO¾á)^ø½ß£¤@Œ…­4qq‰•’8M©AJEßwÔšÛ˜¾_ ‰œíP$œÄe˜#aNôã D)bjuN•æÔÍœNÞ[:/ù­]70ô[—ºÒ÷=)VBJLó(ž}þ9î¿Æ`]OÎ…¤"C©šT ›¾2S8-Å`1ͤT¥¬*eR•_£qÀ9×c–8ƒÍ8™Ö ,͉Ôê֘ʼnºÛí(N'iBÏT)Œ/½Äç¿ðž|òIú¾_�µvÉ…,YÆå¥¸©£TÍápÀ9}fØ(U™Â‘í~Ržãi i 9er.8ï¨dú~Ã<Ÿ˜çæúôtY¸¼¼d»ëÙl6LÓÄÕÃ+RÊܹs#ÚXö»[ôýÀë^÷z>ö?Æ7ó73Ž#µÂn·Èiä}œÿ_JÆ:C×ÉZ)E2nµÖKþ©Öš\Ä1rZ΃÷ ƒÖF6jÆyK.9Ü`L¥ðÞáÙ,Ñ ZaÔD)×u\Þ¹d'bŒÜ¿cJb à=9BÈ8»i‘e Î{:e)fÃç>ñ):¿åSŸù4^y‘ßú­ßæ­o{;ßð ßÀÝ»w%KôÖ^óÒËhmø³ßñg¹ÿŸúÔ§yüñÇùËé/óÇÞ÷§øÐÿðßñÖ·¼™ãñš9ÝpïÞnn^Áš0ÃíÛÁæ’ÿô¯þoxÃëù ?þ<ó{_h÷¼âÎ;¤TC× üò/ÿ2üàù†÷|?ô߇ï:ž{æ¸až ó4qy¹'…¡¢‹á…g^b»å:~ô£åW~í׸sçÔÊg>ý9BÜ¿Ÿ~»ãæ ŸÅXÛí¹ì</~ñ‹  ÚHDHR�朓u›âƒÀϨÒâ ]ŠÙ´Æ:ƒ±š\ Z5™"En¥p:qÎá½@w)8«Xc–ˆ�h%°�žŸ5)%”Z<AƘŠV‰“¬E¥0Nµ(¹67u%g©*[µjÕªU«V­ZµjÕªU«V} €Õ˜FJ‘öõÎ{jxÖw¥ˆÑY‹µ­õR´“Ë çÎYTÖ„”™çiÉ!” QÉk5FÆoK-o~ó[øîïþ^>ò‘Ÿ%„ÈSO½‘~ ÆT‡£´Ó;ÇáÁKtÃû-Þ;Ę1Ö¡ª&¥Â8NXkØívh­™¦qa?Á#i}ßB ä‘’Ó$Y‡1´ÈŒ¬’qü9|ç%#³‚udjÎ'¦yäÿfïMc,;ï3¿ß»œí.uk¯ÞÉ&›d«¹ï¤H‹²dmÖbI´%{<ö `;#;žcL`O€NdàI ™I€xâ%Ø€<±(YËH¢)ª)‰¢%6Å­["E6ÉfoUÝU]Ë]Î9ï–ï©KúÃ̇ùëÃù}éÛÝUçž{¶ <ïó!4išG÷ä̃YMve“½{PÕ±ÌF)…ÒqôÝÔ5‰Fj”ž@tS:çB‘çytŒ Î6‘ÑâêC bŒ[È�Y'Eø·\±Îy&“1½^à4È&3U(¤ôÔÆpéòe666X\\$ët¢€þ¶|ÕèÚ3çPBÄñy¡‘rLUÕ$‰&Í4!äSQxÁc›¢*%0&p9ïp.àC M=#¤ŒŽc-Éò>ãII§ÓŹX%¥$/r´n®O¥¸í¶Û9qâi”RL&%iš „ÆZCUY¤(¹ë�õ(G³'“Iü!xI]Û˜ù›h2ÝŘzš;;½¦Þ&Äíþ»±†@EVdÄS.¸(˜{ðH” (-põ˜ÚƒµŽñx‡n¯Cšjªª¯9OÍd<ÆZÇÊre¹7©ºHÕåÄSOògöäEçO?s‚Ó¯z¤ú*Çnü·\}õµ,,,0ÓïòƒgOÒë%looð;ÿÕoâ|ÍÖöóƒe^>ùçÏŸãÁwÝIQÀL–³µ¹Þ8³‹óloŒøwÿç2;?ϯüʧ™ wèv»dY6=®EQpqu•Gùë—×ùùOü¼ó¬‰ ,ƒA—à-Z'X4;[“(Ì&sýln1õ+›[¬®®"„en~¥`qi™……9ºÝ7Üp”íí-ÊzÌ•ÍMæççñJÓíõ¨«š¼(¸²v‰<Ϩ+‡’»y¨ˆÏ·g³ls(­°6Ƙ$^5åU1_:Š­ :IpÖ±¹¹4"øf‘':œ…~Kö¨*¥ŒCüÓ+…ïÀ‹ÒšX ñzUŠàÆ:‚EJ\bi««ZZZZZZZZZZZZZZ~b„ÕTÓo}LU!¤Q,O¢)ÀÁ”ÒH%Éò”,-¢¨–&t:¦^GÁs<¤ÛéÐét¦ŽU)um)Ë ÇŽÅÔ–ï>õO?ý}Þ÷¡Ÿ¦®&h¥ Ä¥±3H@)bñ€T$YÊpgË—¤G©cê©à¥µnò.=EÑ¥jÄSÔµi2 3¼w8kÉòDtŽ¥iÂdTQÛèfÌ;ž�!5Ʋ¼GŠÊ̤Äú@šu©kGš8ïñ.DÀoÄDï㺵± ¨ë’D'H%¸´¶Ž’n·‡µ1®�]xBtš‘)…NbL@]ÇÒ£,ËðÎáC4W2ir]Îz´N¨Êºm‘ÑU© ôz=”R”Ã!I“KZ5EeÓvó˳jcHtÂL–Í­f´:F&äyÑ|FCš%ø3b…”H4B‚ Z+„Ñ%ªvsr¤ Ô¦I’‘åÒTà¼@¨x³,áG§Nñæ™7x×»ÞÅöö6i’¡Ôn»"iœÓVv!QRá•#Ër L]¨RD—¡”š²!!›1ò˜y›dS×@t9WUIUï÷$àp¾Ä¸ Fë”™AÎx<f<‘ç ½^—4ãq‰ðPt;H-1¦ÂØšn¯`4!„¤èe˜ÊPš(@eñ®ÄA9žpë=·s÷©—ùÃ?ü3þ×ÿí÷xøS¡ÓMJÖ/m0ð.0ÓëÑd,/ÏñÍÇcíÒ›h-�Ëh¸ÎsÏ>ÍÁC{Y^Y¢ª7ÙÚ\Çù@QôX[½ÂÞ|–ÿåþWô{s|üCbnn޳gϲ°°€”’ªª˜››css“'Ž‹­Ím~ý׃<Uln®ãmMšdÌÎÌDQ½öÌÍ-¡TÆúÚ:¯¼zsgÏsöâ›ì»f‰ù¹yÞÇž=³ìÙ³å={PRsùòeBôû9: \wÃùÜçùÍßüMff(]Ä{·ªét¢è»ë¢ŸŒ+-›œ[‰±®®,EQ ÓQù¸(š,T©ñ!`kï§$A�E íŽfí çÃÍúý>¢)•“Í5·§±[j%¥õÞ®¹4Bb~«Œ9¬N¥9ÁG·m\iiiiiiiiiiiiiiiù‰V-qÎ4åMQl0ÆFÁ1K±®ÆØ HêªÂ‡ ºƒÍ‹”À+ð¾&KsÒ$Çx‡ÜÍþôž^¯`{kĤqû73ïðâ‹Ïóýï ¸úšCÌÏÎP–†TK¬­ôúXWa«<ÎG‡¥5k-½^g<ÆTôz=¶·K¼÷MvjÕÒ4Å7cèÖÚ¦¬H¼Æ:…©+¤Ü-ÁòMŒÀ®8'Þ*ójì¸ÛÛ#²,'I266®ÐëΠ… ®<.x²¼@ 57ccÄB¢b&¬oò“D#DŠkŠtò¼;uµBø¿#ȼ½°j·X*kЧÊI‰P ZG'q)]ÿ÷q\Ù{3•Š3ĨÝíL3UÑu×ý›e)xÚªÆÔ޼H)²>>8LíðÁOL©$Ά©àB ¬KÒ´ Ï„ˆ¢¾1Z ¬ HuåðÒL“g¶¶¶›¬œ¤®kÒ\0¹xñB€s^¯h„¬Xc4eY¢TB§S�j§ÆÙÐ|f a·õ=^3ÞÅâ-ï=ÛÛÛ!˜™™…UU㜥,KÊjDnï£p®´Gk1‹¸?SVïUéÑZ’¤)å¤D£BáTvBG*Ò¢`<ˆ èçB@ÀK‡õ%IÒÛ’[n¹•d<ÿ³üÞ÷ß°¾všAwkÆX$Šîü<¡žðo‹ƒû—™›-v¨ª1£­Ξ•_ýG¿Êh´ÅÅÕóìÝ»‚s5ë—¶Øwà üGÿ7ý~‡_þåO³oÿ.]º„Ö ëëäyÎÌÌ€W^y•¯ýë<ðÀ;ùÿðröÌÒÁ ‰« •kØÚ"„bnv‰sç.²½=懧~Ìæ•æþû~Š}‡;ÌôûÈDséÒ%¤Ðìl­³½=$Ë ææç©ME–i®¹ö0õWŸçsŸÿ<ýèG¬¬0%I·‡«ª¸ÐÒí“ù€­')Dj¢5NÓiùZ]AÝûXç<ÎX”Tˆ�EïoãKï§¢­1ï=yžOŸ»îïÝX âx¿Ô¤Œ‚©3±èÊy¼‹™Ì*Á;×ܧIû­ÕÒÒÒÒÒÒÒÒÒÒÒÒÒò‚ú­_¿õ¤TY…?aŒ¡,+Ò4!iÚ­¥Å×à=ÆÙèkFÝukˆ2‚ˆµ.2:wÅÉÝŒK¥$JKʪäàÁ½¼rú¾÷ô3,.,3¿0 ‚,KÐ*ÏL ˜„¡›Þض.¥š šLWÑd¤†æ½-!êÚR×uӶݸh…`4!¥ *+vv¶évg¦¥5²y…÷ ¤Bˆèšt.0;3O·;Ķv¥“·Jª´$ð!Š”iš ƒŠ­ð€÷ÑÁ÷+ 0Y–£”b8M3X}¸Æí*„@'I“ *A¼%;/ñn÷ÿU“5YO˲bË9øà£p$Ô4's×Õ¹ëüÝuÿîž»4Õ·Û¸.R<8E 0ÆaMŒrP*Á‡€@¦9Z7Åaµ™ŠÃÞDz¨º¶©›¬Q…±ï£[U…u!5R&…}kJöî]ᆮ§ª*ƒA3ÞÛßã{Yœõ$„è¨õ>PÕumH³$±é]"…Ž…`I¶­µÑ]«cVjm*@<~:QEÐt¼F ÓÜÍãQE9vÅ,Jw©k "§Û UÆxbðA07·DY9ŒñäEŸ¬èÓ)úx§ÆÔfŒTÑUY–|Nf‘×^?ÅSßûï~÷Ýt: [kHe5¢©G[”Õ„§¾ûö¬,qô†ëÙÙÞ¤×)¸tùu]qìØQ¤ wFäyï$ Ë|ùK_f<ñë¿ñë ]¶··ð!eºƒD€Çûgâ\R�� �IDAT^}õUÞùÀ»ù&Êñ,KÙÞ¸‚V¤¤Ó›!QšsçÎñâ /ðü /`¬áðÕWsßý÷sãǘ_ì!eÅpg[WdYŠŠñxÄìì,Î{Ö×/333@Áì`žåå}¼üÒË|ë[ßæWÌÚÚ%.^¼Àw¿ýöíÛ]âÆ€|Œj ÞÓZ'¤i†©kl]cm¼' d×i„�”±ªM@ )¥j~V+MÑí¢š…‰ÝûiwÑB7!„8ãqÎà}w%Ö–ø`Âãƒ%àqÎB¼—1£x<“õŽýGèu]³±±ÁòòrûíÖÒÒÒÒÒò÷€±àõÊ•+ìÝ»÷?kÃáÉdÂâââß)Áliiiiiiùÿ)%£Ñˆ²,YZZúOþ¬–‚8íå¤Ä[H’4 Ù·ÊTêª"I Ò4¥6†ªœDgÖnûvšÑëõ¢(7š€§)[ñ$‰@JÑŒÑloo“e9W®P·ÝviÞçÙçO2??ÇýwÝÉöæ%’4ÁT–4×ÔÎb­'HA@N”u]“$9i–DÑ!KI’¬ÉFŒ#æ£á6‹s’àõTx›L¢×éˆT²µ¾˸\Ì^Œbç®[4þžTÐéæQ {f)G–$MÐR/pÓFrÙ‘¥B<1"à­p×D%ЈÀk a×ù©¢Ûw×—ìF�ó6á8 Ÿ¢‹©cÜA¢dÝ—~×)§šœÖ@h¼ÐˆÒD'æÛÇþwÅ Õ8l½wS‘$‚¢èJðÆFgŒ.¿ÄyŒ­¤âçRIo‘$IÌY†=ѸƒU©Q©cI“LB1©,B&$J7£ùB¯bŽjEžçƒ×#„Gëì-÷!ñ3UUIYÖqìMšHDPXÏW¢3¤LÄ‚ñx›àYž!ìlètãx¹Ò)JÅFx­ ‚H‘"àBIYíPÛ1Æ@Òï.ÒÉ{à Þ|ã"?zé4o^¸Èp¸ƒ÷Žº®@8¤„…¥yî¹û.z½.u]2?¿Àüì2[›%&ìÐíI”Ö s\¹d VøøÏýÿî .œ¿@–­àL‰HSR I¯ƒw9åhÈ-7Þȕ˗QLYóòK§8vÓ TõˆN§O–v"GiÉ_~öÞ8ó¿õ;¿M9Þfk»d0³ˆ­c,Âk/¿Æñ'çªCùÔ§?Ý”%IƒÁ &náâÅ ¼ðâsììl³²²ÌÇïÿY¬ Xã1~“áØæŠL+йYœ ”e”’nÖe¦Ó&± ǸŽwýÔC\søZNž<‰µ–óçϳ±±Á믿ƫ¯¾Ê'>ñq¾šáöN®pX‚·HéItŒI² [W(6Yº&>óœ!IcñĘˆó‚xbT‰÷Óª]‡vaê4ßu˜[c"Þ÷"€ĵ£I!Í6å‘*GZµ®ý†kiiiiiiiiiiiiiù Aï u�!4mÙÆR¬5Ô•‹e*A✡®£k2I£ám¸¤Ó±ñèΔxÛzlWªMI·W°vi¢HÙÜÚàØG9tÕ|ö³ÅN½Ì ×\K·(¡©RS'ì '¤ENž'dYFU•øç™”‚H©PJ1H“œ$IñÞ“&­¼“¤©B Ñ*akk‹‹/pèðAº½“Éxšù[¿›LDbÞh·Ûù8†ßéô�Ô)Î’4E6®&ϺXWãñM¦b]]’Éyž£µÄÚ ‘ÐŒ ’D4BN|-Sgçn‘޵vZ¼]°)Î9vv†ôº XÎ5%Î:fffp¶&ōָF|«LjW�ªªj*¶–eI’ÄãímºT#¸ºªF P*¡®ãØu§3 àÒcÜ!J6×…·8Ë´-ì:B¥¤ÓéQ߈Åèé$Bh$º®ÑJFáÛBYȲ(`í K’T‰Â}][Æ£’4M)ò.Ö:BpdiÞ×5µudi†R1†Á9‡’)<ÖvvvHJwE`OQD‘°®ëit‚÷ŽÚX²t.– ™c<ÎHÒ¤ÃÎNÅw¾õßÿÛ“œ~åãʲ´w…dzoÿ¶··ÙnbåÏüˆ<óC®»îZz÷OñÆ«|á¯e2Úf~)aq%gvnž£7ô™[ºSkÞ÷ äïóÆg¹þÈ~––Ʋ½3FÅh8ÁT›ë›Ú{€,ÏQRrîÍ7Y»p‘ê>œ¯X]¡T‡ª²¼øÂI^ùñëü£üËøÉ$Šä:ÄÈÙ=<þõ¯ñÇ㓜;3uò<›Þïu]²ºº†³‚—_~‰€ãÖ[oæšk¡SÁ•u¤ôhðÎRcQ.ÃNlGEÉ,Ï Áry}ƒ+W¶OJ._Þ`cã ygç“Ég-KË‹¼ãè1ÊjÂ-·ÜÂ3ÏœàÏÿü/xøáOrÝuG°¶DÈ€Qp·.:¥óà©ëŠ4ÓÍ"B,‘Þ“ß-q |@„Š„�ïpÞc‚@'fùTD}{é™ob”RXc›ò?…J428œ3 Á£šÅŒ¸(₃àu…‚~¿ß~kµ´´´´´´´´´´´´´ü¤«©î�ѵ—&it¤Öf*àI)Étе5;“1yÚ¡èvÆb¬C©Ø–­TÂxgcHWC’D‘¤QSR!¤d<Ñíö(ºyŸ4)N³²°Â½wÝÇ‹Ï?ùsg9|x? Á¡œ@!èN4I0¾¢ªJÒ¤‹PV ñªÒPN,i’à­Bˆ ©ˆ™«F“1Þ ŠO?ÍŵóôÝ^Ó"'W ÎÙ¦ +ŽÏçyJïc1–1e,œ!å¤B*I‘æ”e‰Ô ­4ÎÇ|Æ<M±&–ÕÄ,Ï€ó¶Ù^ˆe:uE§S0™L2ÃÔQ´Ö⬀ Þ5å<*ŠÖ8”–XS£¤À;‹©*”’¤i†#`Å0•!I5¡i=b˜@)Ùˆ>æëZÓ]Eg­q‘tR3©&Œ&´¤Y†W%%:KA \]Oóa‘Q0¶Ö4e=r:fÝ¥žªª(ŠÆ]y´Ôxá©&.fƦ)A8$k£hÝï÷£(­¬çg{{‡¹¹yê:PÕ5‰±8Ê&£8 Ž(¡©¡Ô»‹!MS’$E% JIªªŽb¤”e‰5!ãõ8©ì˜ª>Çp²E·—€ x¯HÓ9Æcøìgÿšï>ù·ô3|àcï¦Ûë!u›w¶·Y^.¸çÞ£¬¬¬°¸´Ä§Oóøãßà¯ù+²4ãÈ‘yÇGyùÇ/°½­Ì 8ñô¹råï{ïÏÒëñá<ĉ§_â£z¶Þd<Ü¡*k:E‡ù¥E6.¯‚n€ ¥Sž}ñ·Ýv½þÃí1Çüü€ž?Éñ'¾Á/|êa稪1YV03˜ãâù5ÿÆ_²¹¹Å?ùÌÁÊÊ ;ÛC”lŠ :uYsúÕ³\¼xŽÚmsøÈ!öïßÏLw;©ÙZ#DJ~™Ñö™h’4çâ…ól¬^`g¸E]W)°ÞQNÆtz]„ôz}ÚÃÊÞEò4§Ûí7&X[s誫†c9zìZþù?û]6Ö ¹þµ¤:AkEp ZC]Æ‚6k<®²¤Y,“Jã…š<*‘ Ô�¼elZx¼/©j‹3ˆ­§I’’õ–ÃÕ9&¥<I¦ÐRã\1%=Z§X^ u>`Í$n³ýÎjiiiiiiiiiiiiiùÉVG#‹÷5¢Gš%”eÙ^qäT…sàt:}Ò4£Óé2—±µ^§±µ:ÄvõD'ÔuÍx<¢7“Ñ)ºL&JGbžXëÈ“S;Š¢ƒ³‚ɰbÿò^^+bQ‘R‡PZl‚þÌ,Jh¤Êi‚.'¤I/–9‹V™È˜Ùi<Ýî R$X E>ƒðMA"‘k-s‹æ—fX\š‹J³=¥`:B# ,13Ó’¤ … ®+´ö¤ZN¤YÑ%I2¬õXï‘JGghS†ã]ˆîÙ$ºàtÐEç“É)Þ9úó3x›’è$hÕ#Ò"ŽÞCÀC»¹µWNP*P”„`*1÷Á{ÉÄX­@†(0 ¦cô»¯»ELYÛË£«5 X@ º½¬qÚ‚µ”µ¥¬K´Ê�A^D1Ò G¯“ø9ʲÄZ;ÍrµÖ2™Œp!ŽUk­°6–¢i¥ð6§ÑY-¼!Øçj”„àÿNɘ֚4͘™P×5å¤b¦ßçÜ›¯¢Å"£R©ñ¼óyË—WщdvnT HÒ©R±³3"IºÌö°µu…Ëk;(%™›]fsgÔ{ŠNÂÖö:™'Ë—ùÜ#_â‹_þ6wßs;wÝwŒ,w,G¯»ž^¯Çx4av0ÇêêENü>s³sÜu×=Üyû?åÌ™3|î‘Ïñâž%ëßǽ÷¿‹—~ô2¯¾r›nº™™™Š?x’Û˜›o:ÆùÞ*LYpÔ’|çÉ'Ù³w?H…ð0ª*„Ö¬ì;ÄÎVI·;Cš9ÖÖ.ò—ÿþ/øíßþm¤”TÕ˜º®™ŸŸçµ×^ãþèÿâŸøŸø¥OñúK?f8ÜA«ç<½^ŸS§Nñüó/pðàî¸ý’îý~A£àXÅ`°ÂøJÍö–ãå¿Ä3Ï=Ï… ç¸æš}èD23Óeqi–ùùº½KKóäyFUÅÅ›<ËÑRÇø©ØÚ\çÔÉ‘jËÂÂÂyúEÊÞåý.Ù9äæ&‰H0¢ÆÛšà ½Þ ›WvHtN‘÷1eMo0O9Ú¢®›ç†ÈfqB*‰kâ7ÑQ/°,ÎX@’¥x© Ây¼‹q ¦ŽÀB`jGÐ!f7#I’ ­3œ… $R$ÔµA«�˜éBDKKKKKKKKKKKKKKËO€°*„ Óé ¤býòe.]¾Ìòò ÝnšlÊ4MÑIJåÃÑ£ñ‚ Ï ”X×ä‘Ê8f?™DGbžèD£Å;OiK²¬hÚ×iJ‹jŒqdYÊ`®ÇÞýˬ¯¯âý (dtŽ 33Q¼ŒFd¡k‰sž²š�QÜ-`J’S[¢SP[Kð1˜Žú_ýõ 5 Þ{„8ç‘":+©€˜S*PM‰”ù€—Žñx‚sˆ‚³JðÎSÕŠ¢ Ïh4Œù!2•UI1S ÛB1@íÃ1„­ ¬±äEÊx<Ä9K·×a25cû1;u2£CŠ1ß<ÎÆãºÉfj]×H!‘)x?&Ë ”ú»c»£Ø»cÍQÀõ(¥§ÇOH”ñ<îæG ƒ@2™øXxÕäNc°Ö’$IÌšlÄU!D¼š² ªšP›šºžP'Šàl“A μ·h¥P‰jö;^O‡Tѵûå/ûî»—ƒ¯fXW$:¥(Џ¯¡ÆC±HK% YšÓ›™¥(:äyFP;Ô¶•B¬^ºÌ©“/³zñ J&œ;w‘$Ièu{Hèv{ö-pðPÆüâ>„ìòþÿògú—üì‡?ÆmwÞÈ`6af.!Õ‚Kk«<÷ÜPRqÛm·sìèõ¹ö0Ï>ûž9ñ}f3Ü|Ï}|æŸþ—<úµÇyò»Ë•õ5>ùðÏsâéïsüñÇxßûßR’S§N²ÿ^{ã4«k«ì]L°Ò#ÐlnoѱžGÿæQ>ýKÿ€+—™™™á™œ`ß¾½ ý¦ á2Y–ñ¥/}‰|ä#,..6ž¢(øú׿ÎsÏ=ÇÇ>ös\wý \>wŽÁ`@–eŒÇcΞ;Ëùóç©«Š;#G®%ëõØÚ¸€­E–C¬]ºÄúÚeNžú§O¿Á¤6ÌÌÎsÿý·sèêÑï¤$ZÇÒ·`ãýïkœµTã’I9AIEÐ<ÛÛ#„€¢Óc0?ÏÎhLšÌÍ/¢kË‘ë¯çÔ_âöÛïÂ9Cð©GÀ`]Ík¯½ÌÂÂ2ATø¬™ IEJ’iʺl®û˜us§5ÆD—¹’‚ø´ð(4Ï693ˆ‹SL ìDð€£èTµ£®ªèžoÊ༇ºªñ^ UŒV0¦Š !Â!E[`ÑÒÒÒÒÒÒÒÒÒÒÒÒÒò#¬¦iŽók+Š^C½HÒc U]ˆNu]’ç)Y–‚ÀÇñ›‚¥JÇL²F8“dYs8«zê.Ô‰B Õ”MAÑɰÆqôGxíµ—Øm3P]”–˜ÚNó\Ç£ Æù˜—ê=!8¤ˆ…VeYÅ|Î$c<¢uß×ıâ$M7nl¤—Mƒ·1UE¤,OIU†³k|#ÒÆØ�!Ji¼Mf¢Ž"¦”(%¢x)cF¢Tl$Ó4!„(Z¦iB¢cn«wž@h>Kt«*¥HÖ ÛÛÛ(•Ðë)&ÕOJYQJbL4ÕÍçð8ï)Ò(vBÀÚFìDLÅ¡]¢€ê ^NË©v ²âqUX£âÿGQ9ËS”R”åˆj\¡›LX­G·,`mÀû·„Ó]ÑvWXÝÍ­Ç7‰yšÝ”Ñp„u5I"Ѳ@kWRÈx¬C@)Mžh|Œ®EÉ�1–ºªè÷gX[=©'ln\ŽÅTi,T²Á‚ˆÍìBzóËL6‡è$¡è jFcƒP=²¼Ã›g.ò•/}•Ïü€óçÏ“è„w¼ã(“²DŠ@¯ß!MrÞ|ýË{(ë1³ƒn»ãμ~‘_ý•ÌÊÊ^οy†Õ‹5ƒ¹„,O8°ï�ïßÏ08qâ'ŸŽn8Ê­7ÃÔž×NŸæÔ3ËÊž}|ô#âºëŽðÇòÇ|þsŸåñ—8ríaŽÿ&<ð zK±±±Îƒs(-ãõaH3µâÀþýXoY[_ãÕW~Ìûßÿ~Ò4aff†ápÈñãǹ뮻X^^ÆC§Óakk‹Ç{Œ³gÏòž÷¼‡«¯>L·Û§œ Éókkk|÷»OB€;ﺓùù¹ƒ!õxÈüì!.ž¿Àë_çÂù79óÆ+\¾´Ê{ßûÞûþqÎSôfèfÙÚÚÀù!å¨FHÓ%%Rz,fº€’=cÆ¥$/fÑR!TÊž}QB2™LØŽ‘Bs÷½÷qü‰oc=[b^¬T ¹ÅY*3âì™sÜrë]ä³9W.0Ó_h\Öë 2€RšªjÜÛB h²T¥Dˆ‚Ã{p2^ë!¤’@À»˜=œ(‰P )ÃÔé/bËuÕ8æe‚0H£ñ6Bz„t{íWKKKKKKKKKKKKKËO„°j§a¿ßGJÅx<ž¶­ï¶ÎƒÀK”c eYÅqú$A*sñg¬µTÕ˜ªŽÌèPô¤)hgct= !¡R¡µDÊÀ¸Üf~¾GY¯PNFd©¢“EÑ6„ůÂã…$ÍRë¢XhlE]×t:yCËaLÊšDê©À›µ}#×$‰¦ßï2PJ6b l#4ê¦L& …n„É(¦ ]uišÆ’#i»GBÅ|RD ÛËÑJŒ–Û8P™¤×ëcLüÉdLU•œ9s†ÙÙYæçg)Ëm^}õ<×\s I’`L,gÒZOÝ¢RªS DŒ"¨J@’eue§îãèŒÕïHóë,夜ºxw ¬â6Ãô\+¥AÔ7»è΋B ®b^¬­Utü6ênAÚî1ßµw³e¥”¤‰fDŒ$HÓ¡!x’Tá¬Ã{ƒw„'ˆ˜ë›Â´·Î­§ÓÉø…_x˜<Ï ÁÑíæœ?³N¢%^:’DãCt0›ÑcPi—ºX«éõØÚ|þ‘oð•¯|‰+W.qÿ÷ñþþÇŽ]Ç‘ëbý„Éd‹Ñä Á¦\µç6Î;ÇêÚE¾ýíoñÄOqáü*ËKX^šçá_ü§O?Ï™3/aí„gNœàÔÉ“ÜsÏ=|üç?Å«§^äùçŸ'M+++ì?°ÂêÅU6¯¬¡Åì\—ñ{¿Ëÿô/ÿ%ÿæÿ¸ÈgþÉoqóÍ7òÄÇùÀ>Àk¯&ÏsªºÂúxŽ¢Spâ™çXXœceÏ2YQðÍo>ÎÜü€þ CYMP2á«_ý* =z”áÁ`ÀÙ³g9~ü8ÛÛÛ|êSŸbee…óç/4q‚o}ë žþ9î¹÷nÞùàT“ ;;;Ì/ yÎ¥syäÑ¿ag{‡º²gïï|ð<´‡ÉhDg¦ƒŠÑdÌÖÖY–§ ÃQÉdRáCM·Û%ItSh&¹²¹Áææ:ƒÁ,½ÞÎk¶¶w@J²¬EeãI‰w‚ý¯"ÏO0®+ºÝnŒ’ðj ¥†`™ XºgÉ©ϰ³=⎻@ ¦®mçˆÑ.fK !§®nUi§Îw­“˜™\US!„Ǹ éã¢.Š®Z'(¥£ƒÖKÒT7ÏÈ$Ƹ(0& ˜º¿[ZZZZZZZZZZZZZZþþQ¿÷;ïýƒ,M Fã“É„,)pÍØ¼ï•1 ÇC¬±ŒÇãFT¤i‚u¦ËD3Â3u’ƼQg£‹MHâh¾jD‰(¼ïñÁP–±ðªßï’9‰–Teٌȱt¨¬Jœ·ä¢qA„�$dYŽsÑ%*¥ 65!D5øÐd…zÒ4CJ‰Öš<ÏšÃxœñH¹+"Æ}Áh4&M3”Ôh•$)�ÖNHRÅx\R‹|꥓èĵïZ+`ª8†žeeUF¯ÖìììP“IIQtéõúÌÍO†¤i‚ ´jÃ0u€z!?o5$à™LÆììlã½£Ûí2 >eJi­©LÍx4Á:Û8}uSÊÝŠQ¸M¦B¸”ñœEG¢ˆÇ-Lm1&n# BQ˜{Žjaêj®ªŠ4M±Ö6ŽÞX Vš ÒÑìÅÚX‚‚.F3k}°k'°ob,Á U,ÝÊò”ÊV”“$ B,îÂã‚c4©hœOȳYú3Ëœ<ušýoþŒÇã<ø ·ßq•-yéÇ/raõ ç/½Fi®àÓëu±µbvn–k\Í-7ßÌuG®cÏÊ'O>Ïw¿û-N¾ð,7Ýô®¹ú0ûöïãØ±èv»œ|ñ.ž=Ã᫯fnv–W^y™,MYXœ§×ë0I²  ½^‡ëo¸žo?q[WÜ|Ëͬ¯o°±±ÎáÇùê×¾Æ}÷ÜÍ¡ƒ‹8g1µe0¿ÀWÿÃ׸ꪫ¹ñ–[Y߸̋/>ÇÒÊ"?øÁ3ÌÎÎsòÅyýõ×yøá‡©Ê’¥ýûyò‰'xôÑG™››ã“?Œ‚­­-B€S§NrâÄÓ€ç=?ó‡ÀÖ%Û;[loorêÔ)Ž?ö7œ<uŠ^w–믿ŽÛn?Ʊ›®cÏþEj;ÆaOFÔ¶ÆRÑ):ìlIT1‚ªôäÙ€A‰D÷Ѫ dH‘ã­DÈœõ+#Ο_¥×›áâê*@H´NRÒíö9aï<{Wö¢…Æù@UVXçIttXW¥áÒê%^{ùÇt:=޹$Á‡øœP 0]Àè=¤TÔu\¤"‰³1/5Ñ)J*¬© Á‚pMÙC§‚@‚s¢¹§ˆÙËi֔lj©‹<OÚ§û!³[þ£ôº®ÙØØ`yy¹ývkiiiiiù{@1†+W®°wïÞÿ¬mʦ ‹‹‹í¢jKKKKKËßRJF£eY²´´ôŸüY];G’$lllÐëöéö3*ã°Æ U×! µ ϛ⩼Cžç€ÃZ׈u!`2S–%:Ép>–ùàqÖ£•Ýnc J)†Ãiš‘êŒn¯C’ê(Š Âãkâ2$<ý~—­íMÆcAQ$I—º®©ª²q˜ÆÂžº®šÑó8¾NˆÅUZ¥£Ñç4½^—­­1RI:i‡4Í)Ëòm.Ò ¢‹V±1ÞZÃxTa]ÍÒò<;Û[±M>ËI“œK—*2ÀYK!ÄìR½àÃt > +±¨Ûí1 ét: Ü4jannke5Æ;Ažç͸±Ÿ¾ÞÞÚ$I4I’F‡^3]äJÆqx­´RS·«PP9BDIkM’$ ‡1š ÏœõXk‘’&j ЍÖ†Ã!I¢étºÆÔ`šOóSß>òßétPIB™egg‡ÁÜ ŠëÕc u]‘§ ý™.ãáç0D¡\i¤ˆîâ²,ò$à ‹­+L]ã“2Bm˜›°µ5¤ÛË1M¦mšu):W·Ø³w€Nz|îs_æOþôßqúõ $i`0Èyæ¹!AmQU#޾ãƒÙytX[Ý`íÒ‚9I¯˜áž»ïg%ì%Ï;\ux…NWðÓ⦅Ç{Œ¯íQþà¿ý~ã×~[îxR*öîYaßÊ Ï?÷<_ýêà#ùY|׃üí“ß¡Sh²4eïÞežzê{ÜrË­ŒÇÛ9r˜ÿìù“?ý8zô>ø�_ûÚ׸æš#\sͶv†H‚tû3¬_¾ŒÔš{ÑpÈ«§_an~«®ºŠŽ^Ïåµ ._^çÃþ0Ýn—4Mùîñã|ãñÇy衇¸÷Þ{yýõ×Y\\ÄÃ#|ž,Ëù™ŸùiöìYF'’‹/`LÍk¯Ÿfgk‡,ïpìÆ›™›]`ÏžXk·ÙÜÙ@¤*ãÑIŽq’á¨bi~ÖLÒí\E¢R†Ã 6¯¬såÒšM¶¶¶ Îriý2I"ÙXsl±6�� �IDAT_guý"Y7aÏž=|ãßàÂųÌÌôèv»Íµ¯è}Ο¿Àúå n¸î(yš2Õè¤àÒåó8[£I–i”ÊÙð½^ïb‰ZÌedY†vŠÑhL·Û‹×¯k²™…GI…T­£sÝZ »1!2>­‰YÇJ*Œµø€Ï¥šÈTtd‡ø<@)°AtèË&#º¥¥¥¥¥¥¥¥¥¥¥¥¥¥åï Ma“ÓLM)uSD•!¥šæ¢ %ð®jœ‰¥2Œ)§ÂYldO€@–w©§*£Èe9uG`cRÓ&Ïá‘2#Am Iš TÚìC x‹u­`iÏ"UUalÇy‰ã·»ãåÎy¼Ó2+)%ÎFÑuw„}W@‚©{�Áôõî¾çyNx[!·@“&’¼H™Œ'ôûêÚ°viƒ¢èEQ¨jÓ¼ŸÀ9O–4í4mã4ÍñÞb­ÇÙÐD¨©ø*D܆sŽN§‹1‚Äû(ˆÇótÃá½î iªI’ìmŽÛ] ÄEouQôIÒ\ãú”Ó|×¢»bá•÷ç=>8¼óH]¼išR î»sfêNn¼·œµu]7ãú–ÜGq\ PÔe‰JÆØæ÷ã¨ÿpgˆ’2æýVÂÇUûiÐmêBLㄈY·º(â±qQˆ–:cnnŽÞL—+è,%ÏgX]Ûd~a?V×ù×ÿû¿â±o<ÉUñ©_|ˆ›n~‡]ÅéÓo`­¥,'¬o¬³¾±ÊÂâÇŽÝÀ7Þ„–õKgøÚ£ÉÕW_Ï5Weyi…×`çÒúÐ{xçýwqü›ßáøïÿG>ó[¿ÆﺃÅÅ66Ö¹ãŽ;ȲŒ'¾ùzø“Ø¿µÕUn¹ãN>÷ßêIöïß˾½û8sún¹õfî¸íV¾ð×ð›Ÿùgx¯¼r`4š°³=dks‡¥¥‚_8EQôèözlmïðÌ3ÏñÁ½ŸÃ‡syý2WW¹ë®»¸êª«8wî_øÂ¨ëšÏ|æ3äyÞ¸“%_üâ±ÖòÐCqàÀAöÚÏ•µ‹üð‡§xòÉï°¸´ÀÕW]Ã]wÞKYÖ(™3Ì¢5¬^¾ÄüÂÎål*ƒ%ʲ&‡”5/ýøÁéÓ¯³¹±Åd\³zi%$ŠÊÔìßwgk²NJê3ssì9°—q5deÏý~Ÿ÷6÷™iÜšÓ¯¾†spüø7¹pn•ì“ìÙ»DGÞÎåK©ê ½~'ºÉM©™¬)677ÑZ333Ãh4"4‘)JGǽsѱ¿yá½ÇxV1ý7:êu“é\cœÂûè~ìÆ™Ô¤iŠ÷¢q®†&&EÅûØIlð¤í÷VKKKKKKKKKKKKKËO†°Z×­ È;ÄaÚ8.ž¤SÇa‚àâÈyðïBt•¢£œŠRJœÇÝ£ÓM_Bªªb2)éõº„àHÓØ€¥½èz¬EÖ!Aˆ©o@ï-[›«øãÒ¤@H .ŽÔ‚l„è(^4‚GS1.º6 ãñdúJ Fãmvv†¤IF¯×¡,+¢ioŽ‘V( ã‘E)K]9Œñ9h•’w;L&BA–'ï±Æ „¹ )Z+„H°Öàœ…¦©>MS„ŒÇ%ÖF5x…4¢wŠT[ %y]‡ÑM3•TÓ±ü(Üœu$Yo¦Ÿß9㟒$‰ù¥õ´¬Ç!°8Ç«ªj>KTœ“D!e¤œ7ø6ñ b*¦{ïcÄ@’L ÒºÝe9¡´%UUO¯oc~mðˆ‘Â{„8¨*‹!4!¸¦+ etQ É´´+Ï3jS±µåQ*g2ñŒÇ’t–Új¾ð…¯röüE~ÿ_ü>ËËK,/u™L†ÌÌ ¸ý¶E³3$‰¤Óɹ¼~ž“§žã{O:°Ä;ßy;wßûž懜xæ)æsÜ~ûmôzu0ÌÏç|ä#ïg~vÏ}áß³¹s‘Oú— Ä{â†ë®ç!øö£òÀý÷òì³?à¹'èŸüÄÇÙØ¸Ì}{™ÌPV%þð‡ùçÿõïóÎw¾›»ï¾‡¿ú:›[;¬­]Æ{I§˜AɜLJ~ôc€ä…NrÓÍ·0˜çòú_üâ—¸ûî{Ùw`?§Nâ+_ù ×^{-üà‘R²¾¾Î³Ï>ËÖÖGŽáºn`Пaccƒ'¿ùMÞ8sšÙÙz÷»Ø¿ï�R*ʉÇÁÂò2Î;¬÷ æ™_ØËêå-.­¯±¾9ä7ÎñÌÓ'H”f¸µÅ5‡¯B*KÒ±Ì-õ¹ï¡[ôçQ2Æ{t{]ªrB–+º39ÃíM²¤Çdâèw;Ä”Çúú%æçgY»´ÆÞ=ûÙÚÚ¦Ûí󿙳<qü)þíŸü×^{ úÐ@ ξy–c7C6×J–w�AeÆH<“Ɉn·G’ô¨ªŠªªÉ󂺮¸�rB,Ekœð!x|Spe]\4ÊÒœºG§ºÖ¨7‹.º)‡K›…$‡ó`­Áû¸ EP dëXmiiiiiiiiiiiiiùIVµ1‹°Ó¡¬j2£Uг–�QD BÀØ8ªª”$ÆDÁ++²˜‡éum(Ë(: 4NgZXä=EB®)XŠÍöR ’$ÃÔkÞ;LíqV¢UÂaÝ[NÆ€EiH´"K3”J¨+?mÓŽ"ªo²\ã~wÇÑ›Q݆(ÈE¥ 0›ýu$iKª”M6¨@€ˆnYúý¬5h±¸¸ÌLo–º6X06 ‚€]³BzLK¢¬ ¤©ˆâI#nÖ¦¢S´®s³‹¤ùÿÇÞ{F[zÝež¿½÷Oº9VÎA•\Ê28`ËÈ`Ó´ ``‘zš¦a†™5¼¦×š™ž7ݸ ¸Ý0ƒcƒÁ8È–-ÉÊRU©$UIU¥ ·ªn<é{ïù°Ï½ÆÍ0Ók0½lsžµÎ’Ö­Îy÷ ïûìçÿ{"’N‹À]ZTXò<[)Ôñ<Z½†ÂGàcX¹™^‚×É¥FµÖ(a@€ç¹B*keáÆ›ãX’eÖˆ^:Ù"e±Úý\Yg®[àû!žiš’vºø^¨ïH¯.§„—·Û%ІÀ“qäž/JJ‚ÐÚ‹ ÄqhÐËæº%íæxÊ:d¢g¤j¬v¦”KèZŠ<#C—ÀÌ, ¨ÆÃ4†§yýÜE¾ô•/óÄ“‡) þøΞ:Gø -µz¥`çέÜzûMì¸n#Õªâ®;rç×süÕyãs|ñ¯þš={ÞÄÎmûغu=p?ŸúÔÿÉ?ø>j• iÞ¡Û6ÜxÃn6nZÅGÿÝ¿!íüÌO¿,)B²}ëvž~ú .]¼LÒMHº]vÜy'a5â™3\<ÉéÕT¢˜ÆÀüÀ‡8zôe~ù—ßÌÉSçð¼V;¡ÑæÚµf®ÎEU6lØŒçûœ={ž›o}õZ‡yí×]ÇîÝ»xú[ÏðÄOð¶·¾•o¾™«—/sîÜ9N:…çyÜrË-¬Y³†¥¥%Ž}±ÇZÕìÞ½‹ÉÉ1,–ÅÅEF†'ˆ#Ÿ¤ÓAàG „¯xìÉG8òâ×9~–$…"‡$Í8°oìfrbZÌødĵùW©×« <®]™'É2¼XTAÅ'ËZI-2êq´O{©I¡s”'é¶ZŒ RcЬËäø(íN—­›7°nÝ:Þóïâà·ûw8xðz>ô¡ç)†{ ·ZM<OQ­UÂ%Uó<' <¢(Æóò,uï¦ì¬®lJJ‹`ùõäa¤@I(mÙã(Cž'äYIµâËpe“ÂZÇe5Æ!Üþ†Á˜‚Rç(|ÇÆW_}õÕW_}õÕW_}õÕW_}õõ=`¬ú¾k¯VžG²Ø¤Z­º¢'ëÒVËcòÖJ” ð<…ïHIÏ죡,mÏ�%~Q”ôاÖZªÕêw˜iË Ã�cAà¾&„ Žky–áÊi—&5¦ /Ûdí!|¢°NÔPRb¬]NÎ:æ§vIT¹üxìJcý2æÀó|ŒÑ(©˜_š£Z­08Ø (4­ÖÕj¹¹9 ì}¯À÷B@³Ùv¥VBPäš$É\‚M-ß WÐC/ñÛ3—ÛÆË²D)…Ö ¥k /ËO)â¨Jš´š]¤Tª.Ý&¤FkÓc¬jŠÒáJëSäåÊq´XŒY1v)MÏS()iwšT*W¼c@öXyž#„¢ÈÙìÆfeòJX+‘BÑh4Ð¥&/R²¬ÄRâù½Â1 ¾ï#¥CMxž·’¤]Æ $IBÇiz#÷Z»Ç_­”ððE^Kó�:›ÉÒCXÈÚÁbJWˆVssót:]&¦×�Š1Z-çþôs|ãþǸ2¿H‡ŒL޳fí4·ÝqU êq©'Ožâô™|þs_ Õšgëö ÜsÏpëm7²iý^ÆG×1?7ËᎡ³ k§7²cû^‚@ñÄ“óÖ¾Ïói Å\»4ÃèèÿÝ?û þèÿ˜O~òOøµ_ýšÍ&£#ƒìßÏ?÷4;wî`~~–Ë—/SC*qĵ+stÛJÛ¥Ñìݳ—çžÿ3Z­£#¬[·—ÆöŸ˜â£¿ûûÜtãAêõA¾ô¥/±oßöîÝÏ£>L£1ÈÄø_øÂ_±0;χ>ô!yõ•W¸tégΜaÏž=lÞ¼)%GŽáÌ™3AÀ¶m[Y½zå ––ˆ+1ú ¾Qä‚n'åø+§YXhóØÓÏsï}ߤZgzÕVæ2®Í.159É¥Ë%Ç>ó¶m”^zåÞöö;8xÓM<õÌ“ÜßC`ãS“DQ„÷'ŒéU#¹%mÍS‘aè34TGJC–,±¸8Ïôô4‹‹ dI—<é‚6 À˜ŒŸùàO³eËzèa´ÉlÐn5ÉóŒz½†Ö† .pæôqvìØI­V§,4ž'°B’¦9aè» –Þël™- 9BD¸­¡ÃkKŒ-Â#ËRü4Å Ü•+æ”ÄhCa Bh�¤cJ”ô0Ö1¤Õ÷ȇÇ2f¥¯¾úꫯ¾¾ß¤µîè]+‰þ諯¾úêëûJËáÈï)cuyt¼(\qQ³ÙD)EàhcȲk¡^‚ÞX¾µDö’Œ+ÅFB!<EW¹¦(²»µ$}Œ‘´Z-ÆÆÆ°Ö²Ô\By £¡Z °Öà{aèÓé´(ò å;Ö§Rß÷(M‰9eQRÈAŽÀÃóB¤ά0ËCûfeôß%WBHÀ’ei/ñ¤]´Ö  `Œ¦,sÂ0ÂK’v]‰”'{cû)-Z $yžS«×©Õ^Dkn!<<?ÀÚ²—î5HWVg*¥H’IÒ!MR¢8"ªÄäEI…T«=„K—.²{÷uHéŒeå ¬Õx½4­é2)¥ÈzœÒ(Š‘Ò'/ea‘J¸Qû¨Nm A1ëFó…–”Zã{‚Ðw‰\ß÷©D!Ú:|ÕéÑÃ?„u ^aEÏì,Èó!-¾/‰}WtfµK$ ,Z—½’žå9|AGœ={Šzc5kV“%)ƒ ÇËÔ”F£´‡.Üšú^à·•…Kšå¢4ãî‹Rî9Eš…Å€Bk›T«£,.¶øøÇÿ”/|ñ›DQĦm[Ù¼eõ˜±ñaJ@Ñ¢Õ¼Âèè8üÀ»ga¡É}_ÿG¾ÌÇ~ÿSÜwïSÜyÇ]¼éà~Ö®C˜AΟ›á¥ÃßàÝï~'·Üz+gÎå‘GæÆnd¨1N} ¤Ýž§^¯òSï{ý½Ï_Mþ5ï}ïÑlÍÓ¨±~ý:¬ÕŒŒŒpõêUVí½]ĵ˜J¥B;É\áW}ˆ´›súô™¹2ÃŽ[Èò‚—_:ÌÂâ"o¾…—_>Æ.±s×n{ì ‡FѶäþèØ¸a#÷¼óG‰+UžxâINœ<Áu×]Ç»ß}išñè£R«V¯bß¾}LNNQ¯×étšH)©VëT*.]œáð¡—yõØY.^˜Ã÷*òÙ/<Bc`€Õ[6S˜¦VˆÂ9¬5\¼x(T¼ñÆUöîߦü�ó$ÿƒ¯159Ϊé](åa xøñçˆ"Ð哬Y7ÅúõÓt—®`óº&cc£ìؾ   Ëk4Æäx _’– C£U–.sý {¨V}ì!.]|ƒ ›62==E–¦œ<u‚'^ã¦o`dt[:®°ði«‰¯$Ö”xJ |,OIò ©|¬¡·qá¹Í’²�é|V£-q‚$M‰D@Å(¿—FµåÇ`- |_áù‹-Ýó[~]û(¥úŸê}õÕW_}õÕïccµ¿IÚW_}õÕWßXý{^ÿÚ/Ýþ‘¢(i6›+ÉÂ( IÒ.ƒ ´)(K®ô©Ôs󳫩Ö*äyFš¦„aHšf”¥î•T¥`KŠ<E—%z Œ! C KSÇ‚N³C»µ„R‚Z-D˜ŒnwÈ©Öb’¤M*Â( Ëgîʈ(ÀS!FK<áø>Yšx‚N{‘²L¨ÕBš‹‹”…AII$ÝF4X.3º6Vk|_öL?ÛK–\!Žc[€p8‚8ét[„•f§I7i#D‰.ufm.s£K×üm¾’eJ ‚J€?ô1ZÝ6Ú”øOPxî‰o2>6ÄömQÊg-|i¢ÀšîýI‘⸊ï{=«!IªÕ*yV |¤õ©Vj€ ÈJ<G1:/H“ÄU^™’²È°¦À÷@ M™ŽÉj eY …!yÞ!é¶ñ}Ih]’& ¾'ñ•Âê’RYFäxž;¦2Tk!çΜ¢âÇD¾Gké õ<ïUj$]‹!YVú>˜Œ¥ÅY„T(OQß{†¹KßfYσ$m’eê)ühœ¸:Ä¿ûØ¿çãÿñ[¼yŠ÷ýôs×7rÏÝw±}Ó;7M³cÓZVO±yó:ÚE.]<ÃÜÂ%Ö¯›à¶;rç]w°gߎ¿zŠ?øƒOÓlÎs`ï^jlX·žsçNqô¥ÃìÝ·‹J¥ÆØØ*¾ùͧgpdˆn²À@ݧ^­a­åcÿá/8pÃux¾"ˆ@%KK‹¬ß°ÖR›Ê@ øÌ/-R9õjƒ0¨†,.t¹xùãÓ“<øÍûyÓÁ}¬Y?Ê'ÿä¼åíogrz þ…¿â-o{ÇŽŸ$ŠbâjOþ§?ág~öýÜý®{˜¹2Ç—¿ú5.ÏÌð¡Ÿû�W®ÍðüóÏP ƒƒU¶mÙÄ–Í©Vb:‚ lP” TÀÉ“§¹ÿþG¸ru–ÙÙâjn¼‰Ûn¿?ûÔg¸ãŽÝüÿÓ?çï¼™·¾õzöìçàµTT‹¼{óçϰØì0ŸX~á—~‘›Iš—˜½ú:¿ù›¿ÈîÇØº}’oÚ‰±ǿʡCGØ¿ïzÞr0öIÒž¬rüå3œ»xš×μŒõ,(Ÿ¨˜2q[,­V‹JT¡H ¦×¬#KRΜ<ÅÅ‹opâÄq®\º@µ±uÓ&Ö¯Ù„´¬¡È»”eB ²¬I‘·(Š.YÚA—žHzeU¶[¢(iÑeŽ.Ù¯”c>'icJÂ@!¬!K;xacb ¤�%¥ÛÈ0&š0¬b@†;ÿÎ7ô<Ï™ŸŸg||üüÃCô˜Ó}õÕW_}õÕ7V¿óó±( ˜ššúÿõ;Úí6I’0::еöô¾öÕ¾úꫯ¾úÆêß–”’N§Cš¦Œý¿«¿ùÏ~ø#�N‡,ˈ¢ˆ(Š(Šß÷IÓ !À|ò¼Ä÷=êõaP–ßn€O’„<ω¢ˆ0 )uŠT <éLOív)ÃÃC!ˆ¢ˆ ˆÂ(QR‚4Ž+¨$Zç”Ú±X=O–$Éðƒ)<Œ.%¦|?Ä–i–R©øØ¢@JWH#•¿¼ä¹+ŽRJ¢”Ä$žïõФÖš•'­ Ë2JJW¦d Aây’²ÌAJ¤rÓý^µrÿ¥·bZK©½ BHg>c1ØÞ±4hk±<ß'ŽkÌœ;‹)3®¿éz´)h5çQR¸4gY KgøZmÐ¥¦Z$MW$¥y^P«UévS|?pœHϧ(r’$uØ?$ð<l‹…!B¸B+O¹+cJt©Á‚îí„0E*(µ&Ë2ŒÑíà‘RW°åúÑyå•WˆÃZ-¦(RŒ.á¹¢Ðclj¥JºiBµ6ˆ±Â 1)J"X)‘ÒCIá&ªEYæÌ-\ň‚0òQá(q<ÉW¾öu~‘_ùÕçú›n¢Z 8yò8—Οæì©W¹xî,‘/Û·majzŒùù+¼~îŒKMCüЛßJ¥æóçŸÿ/žg×u;X½zŠÉ©qf®\â™gžaçÎÝHéS”šÙÙ9‡² Õê�i ¯x‰×Ï]âÖÛoÂØŒ,ïÐn6©UYXhÄ!^àÑé´¨W«(åÑ\èÒ娱Ú°aÓ^8üû®ßƒçÁ‘òž÷¾' k¬[¿™7.\⥗ñè£ñ ¿ð Œñê«'8|ø(ÆÂu»®ã‰'Ÿä¥£GÙ¼e+›·lfýº øALY‚ ¦Ráò¥YN>Íýßx‹—.³mÛn¸á&FGÇXZl2:2ÎSO=ÃRsŽ÷¾÷4[3,µfX\ºÀÕ™“T#Íš‰7Þ°‡M6p~æ g.\áÀ]¼ù–m¬š!MÛœ:}Œ}¶3:ZgÕªIvïÝÃÆ›yõø Ž9ÌÆMëÙvÝ6öïÙÎäØZn<p Ók‡)I™™½Â‰Sç€.yÒ¡Û,˜›¥Ù\dhpȽ¾c¹ùÖ[Y½jš±‘!&''™žž`td áʨ$XSbtŠD£”EFà)¢ tÏKQ%Æ“ŽG­Ë‚²(1Z#…\Iå¹î•Ïyº (¾ÞÎÓ )l¯xO •ÄCQ”X#{›H ¢í}cµ¯¾úꫯ¾úÆêw墱o¬öÕW_}õÕ7VÿžÆê/øàG\‹µ»cF!D³)HÓ¥T¯\ÉfGQÔ+^rÌÌe4ÀrAQ³¹D^d¸Ò+¥$Júxž×3Þ,išQ¯ P–î€t» �ÆjÒ4%Â0DùФÛ!Ïs¤tf§¶†1•JŒ„ÎðÓÏsÜÔN§I†øG·›öZ¶ËÞˆ¹ÂEB V U»ró<$ÏK¬¥|„Žå©¾ïƒuíôA÷þþ²áꣵí±^{¥P¥&ËrŒÄAäšíM¯ÉÞBž—=¬K”ú*Â÷cjqH Öºí#£c½­A—n ¬)=¤ðh ¯ ÀRÎìÎÒ¤wâäÊÁ¤Tø¾úŽ54F;¦j`­î™ÊÏSîëJQë •B*wܤR„a@Æ B‚ teaÊÇó¤ô(¤t#ú•jìPºIB^”4ƒ´;MüPa0H¡(JKµ2�Ú·Øl‰úà „”X)°B ¥Ð9y™ƒ° 204ÀüÂ"R qêô Ÿúô§Ù½w?ç߸ˆ1008À`£A­Z¥Ô%IšråÊUŽ;μ;!db|œj­Æ‰WO°¸°èðÆróÁƒÜrë|î3Ÿçðáظq#Fƒ]»v“9—.^dõªi†‡‡yå•W%Ž$k¢¸Žï‡<ýôS¼ù‚PR‰+,Î-0Ð"OKJ㘵W¯\F)é6¢có MÞ¸p™¡‘1^8tˆwüÈÝ<õô“ìß{•êO>ù<k×lä/ÿòË=zŒíÛwr÷»Þŵk³<øÐ#yI£>ÄÌåʰgÏ^Þööw25µ†ÁÁ1„ˆi63NŸ¾ÈsϽÄK/½Êå«W©ÕTªU†ÇÆH“ŒÇûínÊàà(ÝNÆ—.óK¿ø‹D¡¢>PaÓæ 4˜œbÓºi†kLLŒ0µzŠkó |ë©§(²&7í߯¦ ‰¢{¿v/Ó«W³nÝFŠR316ÁÔªUlÙ²‰C‡qøÈóLMNðäãóå/ÞKk©ƒ]ܸ—õ73=µŽF„¯¢ ©Ö«„QHµZ%Ë\aØðð0Y–Q­ÆŒŒ302F³°¸@­:H‘çg¢ ”øŒ6„A„„…ÑC¤kÑ¥FkÀ‚”>¾~»|ÊJ” žD›]:¦²§@¬\à(%{¿Ï`´îq•RZd¸£o¬öõƒ|šô_û ìªï‰uè¯G_ß­ç×ÛçPßXí«}õÕW_}õÕïš±úóï?ð‘0tfƒ”’ VN8<ÏCkã°†#Ȳ Ïó( W–¤zœÐJ¥Ò+r]x(O¸vváîÖ2?¿ˆÖšzm�)Ƹâ!¥\ñP¥RAë’<ψã˜$鮤c»Ýn¯H ËcµÇütU2A µ¦ÛmG!Z—…Áó¼å¢.%ÑZ÷ÌU—P].TB P.ýjÅ _Ö÷C´v øIQh|/Dz½B)!ñ}Ç«H‚ÞÏ80¼ãº¾F d¯ù[X¬6m>J…ø~äj&ØŒ¸ƒHå‘åE/…ë!¤OÅT* ªµ–––ð<éüU�� �IDATŒ×Ó4M‚Àï•e• \yÖò×\‘ø¾ãBZ¾]ªÕívÉs·æB*’nÒ+Ûr'aÆò¢$Ï2ÂZË | APÁóŠRSj‹T•jRk éyX)”Pt;m—æÐFSo `4„~„1)Á˜‹ÏÒJw̼�zÇ·Z¯‘—%KKKäeÁ¹ ¸xé §OÏñÕ¯=Æ‹/žc×îíìÞ½—[o¿µ«×pÝ®ÝlÙº•ë7²eËn¸þti8vìe®\¹Lµ3<2L–$LOMqõê5æææX¿v-¦,Y½jšoÜÏC=Ä7¾q?·¼…z£F½Vçð‘#Da… 6°°°ÀÙ3gbh`4-𼘑‘1N>‰µ%{öì¦Ñ¨qúäi°P­T9{þ<µz<O©Öc S’—%V{ä…å™ç39µ†'ϰvíz¾ò¥¯sç]oåÓŸúÏìÞu=÷Ý÷¯¼r’·¿ýŒŽqÿðú¹ólÛ¾ o\¦7ضuïºûGÑ%´Ú)­VÆÓOᡇžä¥—OÓl ªt³‚±ñ1ºIÆðÈ(«×®#Ï5§OŸcph„={¯çK_¾‹dhxˆÆ@ÌäÄ0£CÌ^½ÌüìE¬iÓ¨ù\»z‘Z­ÊÈè8¯Ÿ»ÈÜ•+ؽ±‰Q‡8{ö Ï¿p„Áa.]¾Ä‰“¯reæ"ë×®FXÃg>û�kÖŽró{xê[ÏñÄãOðä³ÑM—fl|5Ö$LMNWF¨Æ>¡:Ež“$Ž™œåùÊ‹-5yš€pE{¦”Žï(¼Às0JÑêt°Â%¥³¢¤(KÇlÊ] gø{~ˆòB´,+ÐFn³¥ÐAèø!y^Rš Y¾v2Æ µî]ø ʲ,~à!‚¾±Úט²t®@2G™ÎÒM/ÑI/’¦—ÿÖ-Kg ]D¥MD¶e ^Ü+Œëëï¹`[,Pv®ÐI.Ðý;ÖaùV¦W‘Y U¦à•¸¯(ûúÛJ3è´ ]¤l£3ÿÝÙ—È›gY Ï ðB×ÚØ7VûÆj_}õÕW_}}?«ÿüWïüH†A°’Útíñ]ʲ\AXkzÍñrÅXuôö;.꥔4 ÂÈÇ —ȲÖ83¡,&Šbš\¹r«W¯±qãF„ÔjU|?ÀزgFJ²¬ÛK™Uzãô. éù>EQ’&e¯ÀHy ¥IÒ%ŠC¬Ñt“µÚ�Ùû¬†J¹Çb1+'XR*<ày»ÏE龿ùèRcŒèÝ­]㽸²,ÜñsI5Ežç=ælˆRîB#ôFgØµÔÆj¤xž‡ò|<壤3=%Ž£Ún·iµÚøžE ¤.-F[ !™Ûí¶ñ|ò$~„®JIÕKâz=óÜôظyž÷îĪ,‹£¹,Éç9Xƒ§~àER¹$«6Î�ræ²ûÇ‚®õ\kW*…u&x§ÝÅ÷}Ê¢$MºÎBò¼ >РÐ%y–³°¸Džk„p¬IǸÕaÑ¥E…Ò ‘Ò'Irš­­v—,+©Ö I7ejzÖ6øüç¾Ê›Þ´ŸUkÖpþ78|ä—.^â™gžäÚÕ«LMOS–m`x Áž]{À‹/¾ÈÌÌ cc£T«Ö¬ZE\ yྯ±wïn昚^ͶmÛxà§9sæw¿ën¾ò¹pá"“ süøqjµ˜8òBWª$IÆ·œýö³×f™½6˺µëQ*`bb’¥¥9*Õ¥$a#¥G’ž}ö«1Zröì6nÚÊ…ó3ìÞ}_ü«¯P‰ëüäOþÏ>û<ß|ì1¤ôغuei¸é†›ØºqNÊ¡CGyñÈK<ñä3>tŒ7.\ÃóL¯ÚL½1 "¦ÙZbzzœñ‰I—ÚÜÿ<øàÃ+†ÿï}ôH :ü¯}¹ùkaÀÚ «² µtÁz@‘u±Æ"UÌñWÎpôèKìÙµ“É©Q„ÔAÀ}÷=HàÇ  ‘¤K(:%vc¯œâð‘çùµ_þ9nÜ#oyÛÛ øôç¾F7YdÏ® AÚjɈnÚFzk,µZ0®®äc–ÓÜeY8Ó_÷Šø$„•**Œ@kò¼Àó|¤T^ØK—zø~ð7RÜ )<” \™žð]RUºM!–’0ôQÊ#Kf£,M/áîp�Æ”½×”CXë6 dx]ßXíëûðìÇ€)0&w¬òåÿÚ:WÍóÎSs´óËtòò|Ž<ŸýŽ[‘Ï£ò.A–"Ò¶Ì0AƒÁØcr¬)V»×w¯p±¯•…�ÌßXƒåõ(À¶å<´¯’wfhg—þÎuÈóY²ü&_$È»ø6ß`�cÆ”` °¦·}ãæý3¯ÓÄ.Ì@ëuÒ…£,]{žÖÜ‹ä­s¨¼o@„ „úoc®öÕ¾±ÚW_}õÕWßXý®«¿ýoýˆ”n|^)EEÄqL»Ý^ïo4Î8ÎLÓtÅp]f².›²Ëcåe™öNØ I·K§Ó]Iªž9s–gž~k!Ms6lXO«Õ Ûí¢&Žc²,¥V¯Òív0½±y—  ÒC) RQfI×±E•”4—ˆ#רðÒGH±i×˳º½ cŒ»iCUPʧ,KÊRã)åFم縤ʣR©õR`¥ã®‹¢\I©:䀢^¯#„KûB‰ç•”:#/:h#„FHÂ`¬»?Zkò<'M–ÅÒÒ.\¦^ox!Q;£Ò*DÏÀtç]šN·ÕK+:6Aàáyiš¢µ+ó|·–e®)Š¢g”=3½¤,N R©I’¦iEë’­EÏ|õŸ ñ=7íLÚ€(¬¦E^R©T‰¢ ei\:ÙóÉó|åo4[M‡†È Ç©m réÒegâçAôP kí$¡4.ãy1E)( ¨V˜šZƒ§"æç–˜]¢ÕNøÒ_?Äë¯_axh„m[7³oÿ>¶oÛB%öÂðû¾ÎW¿úU®ÎβiÓf/ÀWŠ عs;N‡'Ÿx‚;vP¯×Üx9†'¾õ8·Ý~ÝnÎêÕkغuŸüäŸÓn]åæ›oe 1À™³§™½6ÇÄä8Õj…"ïR«ÄTªu:.íN!àᇟæúë÷1=µŠjóÂó/080ˆõj«³3 `Œf±Ù¦ÑÁpôÅã4[ ÓS«¸vm–éé5œ>sŽÇ{’ññ)6nÚƒ>Hš¦lݶ…Ûo¿õ×13s™î¯|ñ+<öø·øÆ}‚t»%YÖzh£xñèk<ðàãÌÌÌ1<\ã3Ÿù¿xêég¨Öª\·sïý‰B­Ö ÛM™eÿþëøÙ÷¿Ÿ;î¼;o»™gŸyšC‡Ž°nÃ:t™R«xI“ÀSH«˜ââ…Ž;Å@£Ê›nÞGQth4j¼ðÜQL)¸ë®;ÉóE*5·y²zr-Ç_}•Ç?ɺµ!{víaÝÆM¬šnPè6?ò$IW³oï6%Y·``¨†6` ㈤ÝÁ«Ð{íK) Ã�?ð1ÆÆ5²$¡ÌslY K5ß I“ !]B+(¡È5Ö€µ.¡®¤Rx*@—c¬Û¸ –‚R væz7Á‹ïDQÐÛŒq›Aè60,/ÚÓ7VûúþSÑÅ6Ï“¶N²Ø=I§{–n÷ÝîëнŠ_äˆJŒ¨¡âIÂx5q<ý·(ž"Чã)<QzY‡Åòu:ݳt:¯Óí¾NÙ½ŒŸ4QVBÐèûªßi'aY¤Û=ËÒâ1:3t»çHºç°køY‚ð"nüëðíõ˜&ŠÇÂ)4¶³D·s‰ÅîÚݳèî ^ÒD¡ ¬õ îä2éòÖ1Z—¾F«}Œ,P”µŒ4èÖiôâqBéÕÀ¯üƒ›ñ}cµo¬öÕW_}õÕ7V¿kÆêÿ/Þö‘,Ë7SJNŸ>Í믿Ύ;èv»+&+¸qÖ0t)­,ËV.¬=Ï#Š"Ò4¥ÛíöN(²Þˆ­¤ÛÍHÓ¬gH‡Ø·w?6ldíÚUH)I’ËH‹¡(rÂ^‰RµZAJÑ»¥<ºIF:¶©5Oyøž8³Óó%Vk‚Й°Öºb%`wP–…3…%+åRžç¡K—æ´Ö®<Þ</PÊ™ŠµZ•Ç{œjµJ¥V#MÂÐÇXÖåŠq[®ÊÇW-ŠlÖ-¬ÎÐ:áÄÉc´ÚKLMM�†J#€4K#ŸÐ—äeA½>ÈôªÕhÀXAQZ¬ð@J”çã!V€.Óž)#IÓ ­5RJŒ¶ÄqLYÎ U ?ŠÈÒÌñbmo5 C¬ui\c ž§h4T☹¹9T/™WkXcд¶(åFA!„"ÍR¢(&ŒB—b)¡Ô% ž Z«àùy™¡<Et“”0Œ‰¢*£Ã£T+UjÕ*qÅ1ž“ç† n eD7ˆÂ³³‹¼~ö</¿|’¯~õëÜ{ï}|å«_ã›>ÁÃ=ǹs ­æe™R­Üpý>&§Æy×»ÞÅêÕ«¹rå <ú(‘ï3<<DµVÅ÷}Ö¯_‡Ö<òMjµ •jÄÄØE–ròäIÖ¬ÛÀÈȵšä_ý«/³iSÌš5ëh0;;ËÈÈ õz3§N°qÊ¢@ù>ÆZÚ.N%®ÛyžP$I—n»ÍèÈ8 ‹‹T*!R <ß§R ÏàÊÕ&gÏ\ KJ®\½Êµk³,..òêñclݲ™é‰)æ |Ÿ²ÌÈÒ./¿ü"GâÒ¥ LMLrËM·ðCoy oûÛbfæ y^2?ßd||Šf³C£1È}÷=Bµï¼û-ìÞ½›Ý»÷pë]oá‹ùΞ=ËÐÐ 'OždrjŒK—.²cÛVlž°ß~y‰çž?ÂÝï|‹ ³xÊàK¥*äEÈððž{î0cãƒì?° ?4H!xâ[‡˜ŸkqË-7qáÒ«Ôj’v{‰¤Sâù Ž¿ú"qXðCwÝE{qžÚ@Àþöó⋯rìØYFGªlÙ¸…GšwAj@’e¹{=÷§J¹÷´²W´·Ìl.´ã  RyÄõF¼^Âß`ñ¼�%= ?ŒÂ!=ŠÂP”š$I1‚0&Ë Œµx¾ÛH‘ÒÃhCY¢°BÅQ„Û%±+÷+¼•yPÙ×7Vûú^?Õ2Šb‰<Ÿ£(›˜|Q, M—\,‹Åâ˘0FÔG‘Õ1¼p‚0'†¿ã#Á*DxU¬õÑRÑ·ib1x,Mfв….:ÈÒ¥áþy|EÑ$Ë®RKØb‘/PæMò2ÅZ½RVØ€@Ö•!de /œü\‡¿¹~0€ z ÃÜ’Û‚œ0øV „‡5EÙ¤(šÈ"C `¥T´¯ ïùÒK$³OS´.A8„?¶›`t'~4„ÊZˆÎ è áÈêBÅÿ f|ßXí«}õÕW_}õÕï–±êãù9¶©æøñã=®dddd †!Ö”+eVqSÅJÉÕ²ÇñJy‘”n¤uhh˜8ª‘¦N—¡¡$í�‚¡Á!¬-‰¢èÛ#úž3OÓ4£^¯¬<(ÏóÈóŒ¢è¢Y椺‚@îàê¼7¶n±Æ"�Ï÷I3½²�.‰Z’e9AàjÅD,ŠÒ%/@ëòoŒÄk²,eb|ŠC‡ñàƒP9·ÿð[zf®EöŠžNVP "LŸ „EÊ�_˜Ò•,%I‡JF!Zg/`2´±` ¬ñPžGdiÅR‰*C/ X‰ÅR”Ž)Ñ)ð}0pŒÜ ÉÒœ4M)KÇ‘ÕÆBî8¹ÖZt¯Ô˃0“` Z»c&pÖåõÎÓ”$ɨÔj½¢.KQ¸'·)Æ8F¤Ê•’%)H‹!ž¯zÇF Ë’$/°xã‘g KÜIµ,5™p÷_UgØ^œ™á+_ü yøI’t‘é鵬_¿†ý{°nÝ:†GFð<…1!Ö*šÍEν~’S§sôð“|öSŸdzõ*n»ãöìÝÇ]?ôÃ<ÿü ¼ôÜs<ñä“ÜsÏ»X·z¥Õ¸þMÔC<øàÜõæ;ؾu7Üt=Ï>w„×ÏfÓ¦­´;KüäOþSŽy™ßÿýÏqðàA&ƦÈò„v§Ãš5ÓŒ“¥9*ð gRŽ ãygÏœÇh…>qTenv†‰É šKK$y‹0¬ =Ÿ$3ø~C‡¾ÅµÙYŒ–$IÂ{ÞûŽ?η½ŸN’ròµ×h·Ût’67l ŽV­YÍŽ[ñ”B 8qì5Ž=ÌðÈ0Q³k÷Ö­ÝÈÓÏ>ÏñãG{…hð¿ý¯¿ÃªUlØ0ÆØØÿøÇy䡹󮻸té"¯¼ò2ï~÷ÝìܹO|â¼ëo¦(ÆÇ'xïÿSþøÿ‘§¾õ"7Ý´•"½ V#=ÀŒOŒãÍV!5ÍÖ,¶lÚÂ}_”ZµÎî];è&WX˜oa+šµkÖ04Ô ,3”g±ž%I[h¡xÛÛ~„?üø§˜_Xìm T)²¦Ð(eP2D›’4uèˆ8ŽÃÀ•ãM·ÛÅó\y^X«“¦˜¼ÄS!ÖjLïùíØËϲ‡PÏw:­ö"‹KM¦§WS¤èt�Çx6„Pøž‡ìäY E®16Çó||ßC—î¢Ê•ÒõÕ×÷ªyÖj »Hš^¤ÝžÁ˜’8¨R‹Gý Há>{Ïk<„À@üÿoCÅ µü8¤Á–å)¢@Ù.Y¾@³ùÆ|bí:Deêuð<gîý@:¬kMo=J’äÎiŒÕT¨‰ q8‚×X‡òo¬ƒß[ÿ¿~.YTa"›ãá˜Ð Ï¥†³ºyž®]¢ `ˆADuj“½¿CÙðý¾cõ5²æË¤³/Çû Çß„߀­BÞ†ÑòÚ³/PF’úÈ$ž‘{ŽõÕW_}õÕW_}}Ës‚G’$T*î¹ç²,[E—ðt‰Q7*EJ©WÓEµZ¹¹9–––¨ÕjE‘ãù¾R«xžã¢*¥(Ë­ ݤMYÔkC½„§»0ZÞ=•Rôœè^±”p»Ìa¯$Cui0¬«BªÕ*i·K–¥ˆ´q )]ÙÖrQVäE²b*.?NkA)oåïI)ÐÚ0;…µkWó;¿óÛ€ ï,†>BZÐ)!œA²\�Õé&« <´Ôn)c£îxäcJ”/1ÆR…C I¥R©”e‰ï4›Ò4éq©•Ô°”SŒ–X#WŽÑ!Z[‚À}¯ï‡RfA@ ¬ Wvŵ.\ÒÕ± zx‡¢÷wWÎã9ôƒ+­ÒX+0Ö}¯xdÝ”ÀVŽcú ú �Ê2'IÚ€F*¾GQX‚ âƧ­Äó}¤gHÒ%ßwaWP«NÐiwùô§?Ãç?÷&&¼ùÍ·sðà›X½fšN§µÂ¶Â0ŠÈSµ’õkÇ9°o+Yr;YžÐIÛ|á/¿ÀücDÕ:ïyï?áŽ;ïbóú ¼täŸùÜçyûÛßÂ-7äÄÉÓ¬[·½çÇùÏŸÿ,•¸Æøø»÷îá«÷ÞÏÔÔc4—ÚüÎÿð[¼ÿ¿ÌG?ú þõÿñ?Óh48þ6®A I’¤ŒÖk  Í3¢È”¿qa†8jö8 K‹’ЗXcȲ‚ sIO‹¢Ý)8sæ|Ïð¶8p=_þÒg¹xa†¯½ˆTŠÛ·óãï~µFÏs¬Ý¥ægN½ÊÑ_di±Í¾}x÷ý(ÛvlgîÚU>ÿçŸçcÿáwÙ°a#·Þ¼‡;w±cû.Ž}™·þЭü§?ýcH;mv\·“,érþìëŒ ×Ù±} ›7®gnî2‹ ×X½q‹ WY½z5»vàøkgÙ¶}¡TX¡ =m%a2»0‹æHqìQ«G\·ó:þâó_'KK×i!5ë×O3P™Bª êõ­öÖæHÏRè«$;vì@—†sçÎqõêU¦F'1:ÇÚŠÂW€¢È©j­ím¹Ñ{Ïó¨×ëX ¶(À¸çÐ{“¢Ö–”V e€µmzÈ%žÇÄäZãÒ§%Wúg5–¬DJ$.ýÝÃEFYjJOãy’¢È@˜~B´¯ïaiŒi‘e ˜¼ED,” Ax¿ŽˆÇPÞ8ŠèïÿçøH|"êÿÅ?,Kî3¿HºD‰Hæ)l‡\DÕA�ˆàŒcrÒô E±Ôû¼m!eˆ°A„ƒ¨`Uùn$Ûà q¢*>ð·s¨³ˆ¢‰4 "'/®R´ÛÄ^¢Á~‚õõ!o’Ì¥;‚<ëИÚNeüMÐåž>P!·ŠüÚ3”K§׎P ¼x­+‡ì«¯¾úꫯ¾úú^6VÂ0¤ÙlÒív©T*H)iµZ+cðnT?q?Ðãk.É/³C—“ŽËßïÌHO…Ë! —NMÓå ‚ ËÛ(å¡Má8®B ­¡Ã�Ók²w)gŒ†¡" C|ßsfª°ŽŸÚKzd™û¹<Ï‘žce®U{ìØåÇW–ÏsI‰<Ï{ãïçÒcÖê6©Ö%N—¸¡¤ÂŒ\i4)PJ€€¢(z#v®t&<¤‘(á Ã(pŒÆn𥆍R%ªéƒM0Ú"¥Å cŠ<g±Ù&ŠB¼P¢´ÄJC¡5H‡Aˆ¼€2ýv”WRáwYôÒª%] %=³Z ”ÄX—^^^[kmï1¸Â.ßóz®Ä÷oZ[„©|<å!kÝhs¥B”…¡Óé" AàDQ„5kÝý”žDi§@¬@*‰²K7Ë FF×qøù×øÜçþ’C‡Ÿægæ=üü‡žK—.0??‡§Jêõ�]–„‘O–%,-.25µ]@–5Ñ…AØœFÍg°1̯üâ‡ùð‡?Ì~âOùä'?ËÓÏ>ÏÞýn½ó.*ŸýìgAHn>ø&º«V¯ãÇÞóÜûõo𡼟v{‰©é Ž¿z”Ûn E‘±jÃ&~ë_þ:ÿò·~—Ÿúé#ìܹ…+Wfxíµãc˜Ÿ[drÕ$ÖõÚ ÒD€“v¯’åcã£dY—j%"®Ma„344Á³Ï¾DTiðü¡—¨Æ’R/Qè&ïù‰a Þ`ýÆ lZ¿¥iž±0¿ÀÓO=͉“§Yµjš»ßñV&§Vá‡W¯\å_ÿïÿ G_:¦Më¹çžfÝšõìÚµ‹¯DÚÕ’?üØ¿¡1<D–´ù¿ñëœ>}–ûo_ÿµ_åÞ¯ßËÔäÝŒŒ6¬ÑnÏÒi+„Œˆ‚aö8À§>ógais²"E–)Bf(Q`”FzmsŒÊét—E ˜»6Çö]uÆÇW1УèNÐêVßmº(§¤{¿QÍVƪÕkH“©AP¦Â¡4zïUÖ–dYÁðpƒ¼‡þ°VôÌWEiKŒ‘”e@¢d�JkÀ ,¸D·Ñ#ùvÚÊö0(–2u£¶nS)ÅM”EáÊs<d))s·Qa€. JãûYæJêd?¹Ó×÷˜¬Õ“!D‹<Ÿ¡Óþ¿Ù{ï(Ù®úÎ÷³ÃI;wß,Ý ”HH$!’eŒ=æ½1ȉ3ö³Ïö0žq¶�“½ll“³Q€Ñ€@(K…«›CwßN•NÜ{Ï»ºÁ^~ËÏo-+@}׺kÝзêÔ©:§Îùîïïó=Šôˆä$Icñä&jø]£Ÿ S h‘Äu¢ðdÖ((·^yœ^o@]ΡÅã j~ã霘tl…PKôz‘¦‡‘2¢Ù<…vû,„PÃŒ®ñ¦ß“qTÔ¢O3 VH{‡éuÒ4:Þ ÂB2rø¥W$Φ¢ì.²úø-”ƒªýLÄä6\3Aüð:a2{ÐSç‘w°vàv¤˜£¹y£I‘Fi¤‘Fé)n¬:çèõzCvhƒ~¿O†Äq„1–^¯GÇ:ðƒ{CSÒyƒs0°¼¼L’$4 ?Î/5µzƒ0ˆ(ËëÌÐp(-½y¡:‘Ò'Xu¢´Âƒ1)•çP*±‘�õÜA=,›ràðÛúfh*S‘ç=PW5*«Ȳ*)Ëbh 8¤d£´)Žã †B‡„¡F)ßn«œßæª(ha­!ËR&§¦À9²¼Ö !¼qY”ù°ÁÞo›Ò‚@û±o*‰r¦ª|rU LYø}ZjJ)P„óÍâyÖáY·ív›<Ïȳܧd…ÀXã'è¨0â(ÂX74V%Z „”8 Z«aZØøDg!RHTë%^f8ÆïÞ$ò†SUU8gB“¯Úß4K…Vee(2oŒËÐQ–küs¯›²ËËKXkPÂPû¶õ²¢V'u¬Q(+PT”e†V6´'§¹çîûxÓ›ndye‰w½ã·¸è²K9ôØ#„¡bûöiŽ=@£Y' (Šˆ^¿Ï ß# EJ:ZÍg ŠÔ'1«ËË$üâ 7ðÊŸêòÞ÷½7¼ñ¹ñFÃå/x!Aò‘\pî¹;¾ÀÉ;w3·éöîÛÏ9çž8ôxÆ�� �IDATM½ÙäK_ú ÿN?ã|ŽÜÏÅ?›³Î:™÷¿ÿ¯øƒÿñßo±¸8Ï)»vsâØ"Î9²l@¯ßAª„cÇæ™šØ BÑj…!µZHE¬d]pŠÖÄK«9wÝù�øàÇùò—¾ÃYgoáÌÓwrÁ³žÉž=Û˜hûò$-Ù¿ïî¿ÿâ$ÁY˦M“\|ñlÛº!w|çn>ù÷7Ñëu8í´=¼ö†ÿÀi§œB»ÝàØÑC<þØ=œ´cŸûì‡X\\‰€«®º’«_ü"nþâxlï^^ü¢+¸ãŽÛk±cÇ6–Ž273ƱÃûxþÅ;Y™_W²{×.¢(Á:Iœ$äÕi™F9'VŽbl!YÑ#+—Э©éYÍ6Ui Ã�+ ý~“¶YY-A8ÆÆšD‘/°ÒF!I"Ù²y ÆfrjDE­–`…ŵ!4µZL‘çk‡É|I–¥Ãc<#b¤( THUV:ôÇœ³8Wa÷m„R©z„oÞÖÚ'ûóÂs˜“$Âë_Ð?ঠ‰Rb¸ãJQ«q­†b;F驤¢8Á`pªZFHPºMÜÞ†¤†Œ'@ן“L�˱ò´·˜6u7 ª Ìê1RŽB8N½¾ ¥ÂúÿO3åkØÁ R³B.+‚ Iž‰Š(šEëÆ“·mBRCK=$a¬hÐ"r%•«È²Çfžz})›ø$ñÈ\}ZËXèuqËG1«¶N¦±õ…„c;ÿ4¬4ª6IkÇ%ôåä‹ßÇ.íÇ5ÎF´‚‘¹:ÒH#4ÒH#=µÕ</8餤ƒœåå%êUiPJûñdÎB§Ó£Ýg0xÓL ¬­¨ªbh@Ôë5ÖÛé«ÒPäÕ°%Ûbl5L±Bœ„¤é€4Ðn·É² )ôÿi7Œ[3Ý ÃhÃX5Æù±sa¢¢¬üȼ¦/Œõ†¥C€¹cÐa²ÁV]õ M–¥ô{)Žh4}s½1%y^"E…³h¢0brªÅ¾½{‘RÓ¬·ÈÓŒ¢,0¦BÅÖž&U”tû}fffPÊ·ÚKé“:Æc-BEè@×=/Õ:(ò©<×TkA­Ö «RL/EJ1LÚÖIÓBºÄ©µP%*ôÈ�‹%Âï!°Îx³F la¨L…EÞG)t-ý…®'Rj¤ÖÃD’CiIR¯Æ¡ÇX¦Bê…à (Ë‚Ê y¬ÚàÞ(lƒÒô;êõiÖ§,3¤„H…„:&Ô£*2låÈMIÐ#-Æjì?Ê[Þò7ì;´È'?þg<ã”M¬Íab¼Í‘£‡xà{Y\\`|¢M=©±ió&ò<¥Óé‡Mºkœ«˜š§^ i48ëÓ;IR3ã¼é7~Í›ßË7¾ ‹\{Íõ\öü+ùÒç>ǶÍÛ˜›âÈ‘£œ}ö9<ôÐCl?ù$œ+i¶Ü€Ís›‘2G*͵¯¸˜?yË8|è8[6ŸÄCß¿—4ÍÈó‚ÕåUòj@UùR³ññ˜SOÛAoež^w•Õµœéém9¾B½Ù¢2–¯|å›|ñK_ãÑÇpèP^{ ]x>Ï{îù¬®ÍÍ9ÁâÂ÷Ü{'wß}““ã\ýõX ›ç¶Sä†Û¾ußüÆíÜvÇm¼üº«¹úå/gÉ=:EÊ¢Ãôô$'Žó‡øû4 ž÷ÜKÙµçt„r|ãÖÛ¸ésŸã ŸÅéÏ<ƒ·¾íÏøåÿô툭[OF«IÊ*¦WV™‰{,.,aŠœ"+P² *°8gx|ïã>¸À³Ï{Sã›_& ú•amu‘¸fÉKGÅ8`­³Ì¡Lai6›H)Ȳ[dt:+h1F– ÒQÒ$”ˆ Dˆ gÖ*B×Úäý|ãÜ£”?Æt1ÎBšfà öxr¸"†hßýæY¹RH¤ò‹ëç0©$‘ üÂPnQ@iéÏ3Åz:¿†ÊŸ/-8|ù]e ¡Ðú⻲dé)à˜à\AYõIÓà û(Ë.Q4K­½…ZmÇSo“U�MDl"²¬$O»U¬c„ªŽTì˘žr®¢¨V‘ýdwÜ.RÖš´Úg$[Ÿ‚[¬€&QÔ$ж�²ìy÷¢Z¢Œ,°¢‰ÖaÊy¤§£œ)¨ºó”+û°f•¨½™æ–K‘AóŸùi ê4æ.Àô§X¸‡jõ�UëA” ‚±Ñi¤‘Fi¤‘žºÆêÄØEn°Â0Á”ÐnOÐï÷) ‹@c¡^÷Bq oú ¤tâG-©¡u@¿—!¢¢Ê΃,Ã:Ÿè\ëZ­&I?+Ð*¦ª4µ°†PŽ ˜¼OžëYæÔ’RÇUNÕ6J¬’¤Î Ÿ±VôiµÛ Îè0@Š¢›ÒK "ªªÂT%ý<CIÉøôŒg,VŽZ½…h‡"Ï ºT¶ …ÌÚÏx«IQTزB!±N(m• ÏK‚0¤5Ð2 L A£NRd–0LB_Ô$"?œ%R³‘P+KoŠª(Àº ¨Õ'‡¥\)R‡TÆR»F Œ"Ô5ƒ(’8aÐïpTEÎQ«5è÷{µf²ÊÏ ÀÁ O«1†++Ðíöˆk<x?[6mevn ]deAF *”8a¨¬Å ç[×EA8 @a ×-ˆBE ,¯gr²u‰GÄ ¦ôMÎYºL r—‘W%cSc¬®å4šS|ëö¯óÍo=Â;ßõ&NÚµ,ëÐív¹ï¾ûXX˜çÜsÎaÛ–“˜™ž¦‘$% †¬[ n‚0ÄCwmùÅUŒY"©×i©€$é÷:„‰âß¿ê%ÌN%¼ÿ½ï¥¡Ç¹ê¥×±¶Øã¦Ï|‘_øåÿƒ0‰“˜AjØûØN?cÏ>ï|¾üÅ›ÁeDASö¸êªçóÞw‚ßÿïïá=ùg<²÷Qjµ«r)$q¡CA¯œµî>N?ó¥?ñ(’®Á©9Lò¥[n㦛nÂVSScüäu/æ¢çœM³S#–æÅŽnj¸÷¾‡8v|ž‰É&×_=[·l¢Õ¬Óï¥|ãë·ðÉž#¸ê%×ò×ïýc†•ÎÊÆñg%Ÿÿܹó®{9åÔ3yéÕ/£ÕjñèþÇÈN¬ðþ¿ý=û\¶nÝÂÊÒ­fsÎÞCV¬bJÉüÑU¦&gè–ã4&$†‚™é„$€ñ¤í‹ØêM —á*ËIs§Ò5›g,ºRDf’X7±eI•¨øYÚ&ÇÉͪf˜™™äèþE®yù °Î±¼ºÆÌä,‰Ò1eÚe|¢ÍÍ_ûíÖ6.~Îv²þq”Ôh¨ÝåaÒ$Šké°¶�øÅ¡Ê›µB(TQ˜’²(ÐZ‘—©/鋜Å/®Pb…À5Lã`­ (2ÂH¢µ¢,s_’åJtRù*ÎJ¢(!pNÄAP–Up%F ‘ž êQVG8rüh2ÖÞEœ‡m”j=õ7_(hn"¬MÐv9i¾Àêòw¨ÛˆV0ã{ j>-Þ‰¢\åÈügH²˜Iy ­ÖÉØf>¶_� Âp'íÖ"]‚¥ctí>² dbâÙ„áÄèp{šÊšÝî]¬öï¤?µ‰¨=û/,XÀ"ØŠ6ÑI÷aV¿E{¼EÜ«#4ÒH#4ÒSØXm4ôz¾@Jkå©kž1èGñ3ªÊz8&; JQmX°R ÓW~L¼^¯“ç%•­?VWUÅFZ4©Åh£”ç¶6 nÔ0•óÈ€¢ÄZŸtôÏ©P* (|9R%T¥%©ÕÁ ¬±cïUá9¨UU¡uÈ †!“S(©‡cðÖú>â(Ðéîr­Å:‰߬ ¦(X[]£V«c­ObšJ2¢(&‰ÒlàŸ7 °ÎbJK\K†Q=d¸JÏc¾œÆ˜Ê§N•¢4%EQ†» uHD¹ÃY‡§¸ œp'‡EVR‰aê­$ŽÍæpT˜V¦M)±®"5…Žù+aÑA(¢(A!¢ò,Ý(ñEc{vŸBR‹È‹|#ÔšÃB)gRþ€™ºŽj„BH­<ÕÍÏ£4Æ0HS¬-°V€Sëcÿ8¤´H-pÂc ¬üñ½•«_v/¼ò òt•{î¾¼Ÿ];wqÕË®"OSfgg@:ð ßZ’fÊ #â(¦ßï#CI«ÖÆ”½^ƒ‡:ÌÌÌ0>6NiRö:À5/{1c9þâío£Ýšäºë®åÿä÷øÚ×¾Æ/|>JivìØÊ>ÈÎ]ÓXã¹›Çaz&¦* Ó³›yñ‹.ã¯Þÿ92ÏܦÍ9~ˆ(VLNO²´t‚ɱiüÞC z‚²TDaÌÔô,ß¾ý;|ù«Ÿçæ¯|…ÊÎ9ë^ñŠk¨ÇšV3 2=ÂБúì?p„}fmµÏɧîáÂç\íKÍTD6ÈøÊ·ïâ3Ÿü$cc-NÞ¹7¼þçÙ½gó GÁ5ÐÚ³DëI¿¿é&¾uë·9å”gðš×¼–;Nbß¾ýÜ}÷=¬zÜúíï²sçfš1^zõ+ø•×ý'~â'¯¢( zœ±–¡ª,y.™˜ÜÂʪeéÄq(Ök7)òœ¨¦1ÆRo6˜?2àðÁCôz†=»7S­ÆY?#dÔk‚±ñí±1вç?£Ò’æ=Ò4c÷îT¦`||œªªÃ&yVpôØq^ò¬ 8rü8_þÒœyÆ/#mÀòZÙ™6MR 7nôŠ2§(<ÿ¹–Ô(+C®ÒZãè@SµZâ?Ë•/¶ÓZo Œ0 >ÐíÇ1BZŒ©0ÆóŸ¥ôˆgÁˆ’0I¨!çX`>¦ / ””ÈQyÕHO¦Êòe°¤íëI‚hœ8ÚNÌ�<2ÕB€Ž:&p+¦ì¢Ó>6]&Õ#ÍQ<ƒ”áSðT87 ÏWHÓEB=FXŸ@³èú4D<- <EJMÆà4¶2h+ÐrÀ`°cRâxv”\} ©( :�ía !MSÆÇÇ1¦¢Ûí!Tˆ.¬í¥ÊŽ!Æ.¤t›étHé±^ÿXc,i–A¿I\;‹<¿jð(¦|6YaYYš§^¯“$ +++h­‡÷9išÒh4¨×ë£7h¤‘Fi¤YkÉóœ²,_:¿Þƒ4Òl¬æy†svã^#ŠBƒAx3ÀÃ)Ë‚¢ðŒR­5Jú›!ñð‚¸2~\VáK£Ö9Ã2(!õzk Δ¥¼ùæ\‰±%Ö8<f ,=Ç5bú}o”%qÂ`"œ@ë€ÂVıF«p8z+‘ÆR Ùœ!•)7 Õª*1•Ç�Ö:o¸*IQTyÆ`ÐÇØ’(ˆãĆ®" crW1è÷At¢”OÉ)-Gútš³vãy¬õH( BE-ô%6EáË¿¢(&ŠêH¡½±Rù{#ßAå†ãÇ)ZI¤T8AèS¡RI”ö£ÊnøóJé¨*6Jª¤ÐC†j€s‚@Ç~Ô_†˜ÊQURHêõ&E‘b?`=S7¦ÑˆRÐï¥:PCž¬& C´ö¦™uÒzcTIÿo¾ÈÇïçܘ”JS–fÈ«4 8‰±–z£Åí·ßÎÞýŽ_ûç°¸¸ÀÂÂî}à®~éULNNbLIRkóè£ÓëwX^^"øÏv¿ßG*Es|‚];w²yvµFHYÔ›1c z݃´ƒ¡öX…µµ5®~嫈à >ü‘°yË ×ÿäu|òÓá‹Î'Î=ï<î½ïNªÊ0=½™­[·Óét™mPV9y–sÁðÞ¿ü"ûßÏ–uzÝ”’Š¥ÕU1ypøà€SOyÛ·žÉ±ù#¼óÝïâ£ý2'Ÿ\ãâç\Æe—]Á¶-Û‡¥a)EYÔ"xà}äQ"]ã”SÏ`ÏîÓpº`y¥ƒ&ba~Oâ³|õ«_çßÿÌOòŠë®¢Ñ’Å*…=Be”UH­Vcuu|òìÝ·—½üå<ïÒËpHVWW9pà�Ë++,,­Ñï¦\yÍ ˜?‰/~þë,.­pö¹§‘¦ÖÄ(]‘Ô|ºrqa¬èÑ 8ºïišÒl6XíDiYeš;'•UÉé§Ÿ>übVV–PºÉÄÄÎI- Šî»çÖ–”.8í´Ý8[Ñl6YZXF×ô²ýÁÏ}î…XŸùÄïqû·ïç%×¼Ü<EJ ƒ>I£´zv±qDQ8äûE#%2 ÐÖú´¶H¬5Xk(+K:@"‡_fR ”R”eJžf€!N°‰³ceQù" •ÂZ¿˜"¤À!‘BRÚ‡CŠaòH#=r8œ) [F®îW¢tÄTëYˆx ¥|Úìét'†×=Š(œD·"$‡±½Ãôû¡H‘*"Цž:¯Ë9pЧ2ó¤é²lÀXë\â`%k õð¢ái&¡ l#ÇB×BU‹¬­Ę©BÂpÜ—n ë·Fzò”ç9‹‹‹�Ãk‡U–––¨ÕjdYÆñãÇ@hšzúÇUIžƒu[èv@úÏ>nY–œXZb\5˜kì?BY,aŠUÒÞÇŽezz† ˜ŸŸ'Š"´Öt:–––Ø´iÓÈXi¤‘FéÇÎXí÷ût»]œs´Ûm‚ @Â8O¼±º²²B½VÇ9G¯Û#NbÂ0ôlLØp¼«ª¢,K‚ À9K–•H)üx{ú¢¥¼¢2å†k­E)_r†áÆèì`0Lwÿ¾,KOè”54[óÜçQ” ƒØ›CóÓ9Ȳ) Æø"%kJo\šŠ0 ÉQì ÄA§K­V÷MRŠ0 )ŠcÖ bßDk ÄID©N R JçpÆb75Ã8 Aô]?FhJSQYÿÚÖÖÖPAD&ÃÛ�I -eY€)}Á•ÖJ„:Â!©JKe nh¢‚DJR!pàEQbŒA Ò‚²Ì ㈲¸JØa1OUor+o")¦‡’ †äYI&EN•P Â8$Ï„aƒ¢° ú)QÑð¦„ó†’o(éͧõû;çÖŒ-©Õj(m‡?¯Q2@R¦™OåÏ›BšäLOGœyÎy >ñ‰OðÓÿîZf7Írüøqn¹åë,..2;=Åî=»™˜žB IhP9Áâ‰e~ôaöî}Œ±±6³SSLOû1ÃP;LiôV81èQ–þs|ø±¹èâ 9xè(ýø‡ùå×ÝÀöÛøæ7¿Éµ×^Çüüss³¬vºLOj&&¦˜?¶Ÿ :‰º„A:`ÇI'ÇðÈ£‡9ó‚K9vì1¦Æ[,­¬‘ $Û·Í Õ;wmá¯þú#|äcŸ"-¼ú?¾+¯¼œ]Ûö \H·ŸS«%…dañ(Ÿ½éfÆÆì>åì>ùTÚ­VVº4Û5:kó|é 7qÿýßãâ /áÃ}?q q"%Í:8¤½.NøFú}ìc<ðÀƒœ{ÎyÜpà ìÙ}*YVðý‡e~~SO=GÛËÁƒÇùÏ¿úkÜw÷7¹äY/à5?÷óK¿|%q¢°&¤µ¨LAšuèt»|÷Î;0¶ÇÜÜ Ri’$¢¬2’¤FV¥=|„Vs{÷=ƹ絘™ÝDw5§(s¦§§Ù`/R@:(èõ´Ú3¬,¯±°°Äò‚cóæqjµ€<ËÐ"Á)G½UçË_½…8i ©#6ÍnãÖÿu§í9“©éI”²,./ÑjÕ(J È0ªcMEQ”äy0L™Â0 Ðív±ÎÇI’àœ¤( âD{öôm¥*+ô°¤nKá Àó\Ã(AM–¦$I Ü(ÂBâ°è(ÄØŠÒ˜‘±:Ò.SõôÇõŽÑ,,2žD46$³ž]ú4— ¶¡á@Ô\La3z½ïcÌjµmO 3Ïd¸þ<yq”>+ ëÔë;©Å[CŒËÓZR‚¬£ÐD*¡^I³cœXþ&­ÆVš]@ ¥WŸL…aÈää$�A 9çrx/™˜'+O`Òã A2Gsü$T27¼2ýçK1H¥h‘*É{Û¨)½ô02>Ääd›F£ÖšÉÉÉ{ˆF£‚$IFoÎH#4ÒH?Vò ³a® !hµZ#cõÉ0Vã$BH‡t×B‚@S™ë*ò"s¥$qâ[³ÁQäåð¢FgÆhí Zœs(­†#úbØ$ïpÎÑï÷ɲŒ0ÔÃVô çÝn—¢¨š XO’x£.PF›²¬P*¢ÝŽ)ËŒ¢¨|˸qT•ÇEáGl£k+Ä0yEñ•_Y¼o,‡¯„0€¤²†AàÇô„AÂ2 ¨Õ)ËŠt£µ&I¬óÏk­Á¨lEYXëS€B…(¥é÷3Ê"%Š%ˆ‚^¯CÇÃ{ í÷‡…¢,Bãœô&²0ÃÑ`¿Ý8�²<Û0¿-îPT•/ÓZw4}Š×E!y^ø?;ŸE½Ö¢ªJ‚ ©Éó”Z³…´–EJ{bœîªó泓äyNÄDQäÓ…Ö³Z8+‡ŸNõûv=…j0UEhJycÕVë,Rz“Ï®µJ£TˆR‡¬qÎ9›‰Â~üS\ý+9íÔSøÔ§>Î÷ü§z*×>÷ùÌÎLκY–Q–[7maëI0èõHû=N,.²ïàaO07=Íx»E–ædiŸñ‰qZmÒ4eË–­,ÌåEW^ÆŸ¾åϸó»ßåâ‹/áÝï~'ÏyÎs�¸àYçsç·³sû3ؽçO¥, i ì8i7Ïxæé:|„8©³¶šÑ¨³¼Üá”=g19³‰oßñnnþò-LM79çÜSù‰ë_ÂÅ—œO§{‚Ng‰vsé ¾sǽ<üð÷Ió>¯¸öjÆ'ÆèvûTNPYušw¿ãoùÞCráEçó‡ôfªêPä)i6@«€0Ðj’Åù%þúoþ'­ñ1^ûÚ×291…Ò,åK_¼™4+xù˯á­o}+ÇŽÍó¦ßþ}>ð¡sé%gñøß˜Ý¤¹þú«JQä†ÒdKýA—“wnfÇŽ­t:‹à$½nŸf£FU pÒ¨„©É-d©ä[·îãå/&°®‡’!Q\ãž{îf×î9¢°N•¤c9vtMs›¹ï®[yá—`)0¶¢Óï'5ò"㳟û4gussÓµq®|á‹yÏ;ßlj…wrõ˯äê—½ˆ–³¡c0XEÅeå@† ÖøÄ©ÿ%¨ŒâOÄp±Àâ‘!Ž"Ë ÂÀ/,„1*’0`«’@$qBUÉ¿(Š|AÜ0•.„_|@H¤b˜zþr)‘£ ÖHO¨•IÉò£äÅ1¤ëáâ9hn‚Æ&o„ý()j!ĺh#‡è÷‘¦¥b‚`ìIÄ80 N@÷(¦\¤Šµæ&]ñ£vñ"åÍÆÆ :è§%A)Ç`#½:Ò-¥µZÍ_ë+ÅØØív{X®Ç’µ¥}t;{‘aLï¢ÙGךÃ÷Íý¿>öøø¸_P,»¸±íTf38FRßÏÜìóÂ6Bfgg7Ê[•RÄqŒÖ#Ã}¤‘Fi¤E1,–w$Iâ á¥a�ž,cu«*¥¤^¯û¤ò†¨sŽ¢(†#à  P K“,y^ d@Y–äy9\5öüOñCLÓ,ˆ­¥¬Šá…¦·J¤”Œµ‚�­5Ö:ʲćµ>íUÞ˜ تÃD¬çÒsA×Y®RºýB@­V÷¬TcÈóœ,ËÐZo\ˆ­_œYk©Ê’V#¡Èrò<ûÁmu$µ®×g-í?´ž;5>I¿ßÃZë‡Ô„ 2%‰H”T¡BIE)zýA¨‰â‰ 2>íé·Ñ"…E(K²BJ¿O¬sëÍœ¼(ˆÂá¨re|R7 IÓ”²¬ˆ6Fí×/6¥ôF²þñ„A虸U…Í+ÖV×t€RŽx¬MçÈ bÍ‘¦)aèH’º/›2Þ$×ÚÂÎUC#·¤,K’$Æ)·a{L@€ †I[ç‹­”R¾\ªrÔÂ!+*ìÐh p(ŽÎÏÓï÷9ãÌÝìß-[·sÊ3ÎàwÞü_‰“˜Ÿ{í/Ñn5 UÀáØ²6­ ¨%1.vä¹¥²­bÆÇê´Zãdƒí,-gi¥K–´[-1Â0ÀˆdÅÁƒû9iÇ©t»)7üüÏñÁ~7žùF¶oßν÷ÞÏU/½’}ûö¢u„u’0ÔT•AJE£Ý¢×‘ ²œ¤>ÆÝwÝÇêj—•ÕœSwoaçɳ<òÈcüÑŸ¼/|þN®¹æ"^ýêŸbnÓ4­V“Ç?@lß:ÃC÷Þ˾ôuÊÂñüç¿€Óžq*Ž‚²ô í0hð囿Ÿ¿åmœyúÙüæo¾‰í;f8:¿—^¿BiãK窌VsŒ´ïøò¿Æ=÷ÞÅ5×]Åe/~ýµJj:Ä­·~›];÷púgñ»¿û{ÜwßÃüþü>ø�q\gb|ûÄ÷øÕ7^‚sŽ<5~£Òé•ì}l…ÇßËôœfffœ8¬3dÌÌNRoÄôijˆÂ6÷T4ùº�� �IDATbaq+®¸t#E^K"œìÝ÷W]uÓ³›©Žb0熭[Obÿ¿åºë®B`PZÑí•LL¶¹íŽÛ8vì8¿ñÿüUU.-°ÖéÒlLqϽ±¼²ÆØX“‹ž÷,Òlð%gY–Óéôˆ£I­‰-Rú±Óõó1­V ©ØX4²Ö^u ÀU8Ÿ¤—Î!µÄ¿ÿý1 4þx°ÆÎé€(p¶3¤óÌg*ÏjUÚ—Æ4Òdæ“Óï>JY.F1q})f ûJhž¦Dˆ`œ(2iºL·û}êõ$ÉÖ'g»L‰ë…þ<Ta8E«¹ Oýˆ²G‡ãþjÉv„TäÙz½#4êÇŸ\¥1ž ­£�œsÄqLüãÔºÙ}µü=jµ4ÆÏ jˆsÆ¿|Ãgt€hoBdS¸tÖ¡§íð;™$ŽsŽ<ÏÉóœZ­62WGi¤‘Fú±1†ååeVVVh·ÛÌÌÌÐjµˆãx#88Òl¬®'F=µôÖ…g©–¥/UŠ"Ÿf5Æ—JEaB·Û£(*&õ:¸�c ¨Roœ¦iFxSÀ:ßh?ôhµZ> Z¯±¶¶Š±³3s¬®®QU–‰‰I”ôÆgžçEŽŒ#ÊRR9Z ªªD Mci6›(¥è÷;Ôj B@·Û$eéqëi±u”OÞFäy)%Ö9œp„q4,ð*©5Z ú)EU×jıg;•UµfÈ­6Öዼ$rDe¢ôeTQ@e"ŠäYJ#•¦,ªB>§ 4%ƒ4Cë�­ÕМ®tè˰DIÌêê2E)©*oø–U94©rjõx˜2 ýc—vcl*ËR¬©(KA%lÚ´‰¢ÈpHÒÕ&iÖõeV¡Oë”e94ý{Æ!¦òéT)$VyS½t†²,ƒÈã² ©½n*_à£u4k – !Á9É í“玲„……‚g<ó ö8Ä5×¼œwüÅ;H’¯ýëIê íßËÑùãÜóÝï²pü8k5œµÔ’„¢,*`brŠMssœvÚ©œ~ú3iÖ'Ñ:¦Q«q`ÿã<òØa¶nÙJ½.A S019ÉòÊq„ˆØ±c+/¹ò*>û™Ïqùe/æ _ü Ï~ö¹ŒOL £ˆµµõz I³‚ÖX“8Ö¤YÊôô_ýú1n½õvÊ<`ÐWÜøçïᓟúϹøTþâ¯ãŒ3Î�Nd?Þ%Ôu¬üÁïþýÞQ®¸âeœyÆùÔëMÊÊÓa øÚ?|•›oþ‹ó+ü_¿þFÎ;÷tÂXrèÈ#$õ€zRçĉ6ÍnÂÙ>_ûê­Üõ9ÿ¼‹xÃ~•zSÐ_[cþø<{÷î£4† .¸€É‰iÞüæÿ‘#ǸñÆ?¢?Èxlï£¼á ¿Æ«úuìÚm¹âÊ‹¼Ah$a¤QAʼnÅ.zÀ _tµ†DJAšæ<øÀƒÜpä?è „%Ð ã3;øÛ¿þ"ÛwÀYgŸN°‚Öç,b~>ã̳žAw­G’Ä9|”PשJXœ?Áî]Û™?öµÚ$ˆeéøôg>ÃgJ’,.ÍÓnβenÆ tqèÈqÞööw°m×ÿ`jºU:ˆÑ•c¢=NRk “ïÁ°”94áõÄjHœõ :R(œ1[QU†0Ñ¡¦(Êa"Õb…£(ý± 0&ÕÕ-j Êl€s'À …p³-G,€‘ž�•U"[ ïC KRßBXÛü¨3 ¢õÔpá/g08A–Eˆ€0šD>‘ffYá²>E÷®ìDãÍí­OO–ê¿Ra8AŽÓqY¶Ÿ,[DEÖ~“ºO9çþÑ$Ú?ùWœàz‡‘½cÄcçO<Tü¯; …&lî ¦ìƒÎAœíñOQëÆj¿ß'‚`¤‘Fi¤ S5Ë2²,óå Ãp”X}2U?:n°¶¢ª<S°Ñh e8\ùµ¤©š`’4íá\f#! #ßâ™zsRkEžç8gI¢ˆ¢ôoúºYcÕÆJóz³ý`0@)…ÃÒétŸ¢,K굫«k„a>1ò#ÞYÞ£¬JÚ-?6¤H§‰£ˆ¢,)Ë „Eë�‡¥ª œñøŠz=¡^¯£”ð F)¨ªœª*£3L½"Ú)å$½^J½žè`c¿V¯“g9BxÖT Á‰$½^ ЉEéJoºc ÊÊècÖ$‰¦ªìÆ>/«­Z(¬óÉ9!ðåSQL $ǧ^OPõ:A€s¾\j‚PEáÓ¸am¤v±H©�KQX ¶ô)äõsð#[¾èÊ›DfXæÙ¶¥ç¹:G¬c ì0µY":|âÕC$J“€pëœUAi )±®¢¬ E Çç‰cK¯Ÿ1;7Çß}à#Üs÷¼ço¥ÛYão'?ô Çç”=»Ø¾m;Û¶lGàHâc}Óìj§ÇwÜÅ'>úI&'ǹö'®ã/xBJÎzÖs™:p€Ûo»-[7è‚é™qÚ­6{÷îåС£\xᥜÉsùæ­·±wïã´[ì?p€³Î:)|zØC^ òŒ ²E "âXqöÙÛØºußÞÿáÕ¿Žu¿ýæÿ“—\ý\œÐé.°yóVæW8iÛî¾ó{|ðåôÓ·qÞK/ã¬3/ ×Í)JoÂcxË[näóŸ¿“W½êyüÊë_Ïöí[YííÃ9Ëødt`(²“v]Ìwnùû035ÉK®z!ϹäbÊ|€%ßì¸ÿ^pùÄõ:ƒ~ÆÞðÖ:9oÿ‹çOþôOyí/¼‘è£ÜrËwyå«N™„š•åB†LÍMpìÈ Ýþ*k½”Ù™MœXìpbi™©-s´k’}ï§ÝÚLМá+7ßÎUW¿öxÕ¥%>5ÿÀý÷1;g9çœ³È ‹%Yž³gÏ™|ìcŸä™Ï<‡$ ÂÐ#BZS|ý–[x衽üÏ?ù}:e’FÅý÷ßDZ£K«‹œþ9_8È·oœÏ~æÓ¼îu?O¿ÌÈSƒ’!R‚5A¨©Jß³žÐ÷7Œ>ù„~Ñ&˲¡áªÈÉ�F…u†¢ÊqÂ` á±: Qô¼µRQÈ Ä€uþÆUJ¤r”Æé‰pN,Ùà ½µ‡©-êÉ”˜j?F;!@ˆq=AB·{ŒÕÕe&'.B-Ÿný·# íaVè”KG´Æ¶¢’-?vSðÍæn‚ N¯÷0y~‰‰Íh ùø#=‘J’„mÛ¶ù£$ø§Œå ç–€>.¨áZ[¡½ý_ýRjšSPý¬¹[qÙ^œ9†£… Í�ëSg#4ÒH#ô#{iîÜÆw^žçt»]jµ³³³A@žç,--‘$Ɉ±úd«ë¿Y7¤ô£ü>±åÍ›uS´, z½Ö8šIRC IQzf`­V&<JÏ<RÁÐE×ıaõcæ?`¯FQ43×Ôë ¤ÔŒ±²ìS«FsxÑä|»½)1UéAaÁ±a [[¢”7&«È X„´DA}hz3׹«uð¾V¥% 0Ãqy„¤, a!U@¿ßemm•(ŽhµšgŒ5¾JxSSÎ:,‹µb¸O®ªˆ£yVaMA½î™¤Ö”(e)«„7!×ǛֹªeY‘ç9ÍfµÎ2E‘Ón·A8ì%»Îž EU•€¿ÿ½iF`*14M-ΩajW"¬ò˜õr/áPZ å:f@ Ÿƒ‘~c+Â($M3$Š0 "ÄYƒsRB¿ßõŒU©T(e�=äû¦XQzSW*ÊJ •FjÍÞÇ0=³•ÏþýçyëŸÿ1ùð‡øÔ'>ÆîÝ»xþó.åü Îc¼Ýfjj’¤–P R‚@“ÎAe Ù gqi‰[¿õ->ü¡Oñîw¿‡Ë_ð®½öZ¶lÝÊÙç_Àc=J¤-†ÿœ5[!š@Xxŵ¯ä½ï}7¯úéë8zô§Ÿ~:Ö ªÊ¨aásaÀÊr\!%ã|áó·pÇí÷3=ð[¿ý+4ÛÃêÚ a°pô(JEüÕûÞÃ#ïç§_õ*ž}ÑÙ¤EƉZÍ z½ÿø'øèÇ>Îøxnx)¯ü‰W2H3yø^&ç"‚ àĉ%fgw³´Ðã/ßý§,/.sÅå/áÊ?Ÿn÷ƒþýAÊwÞͦm[yÒh6éç9ïz×;™˜˜àÏoüoÔë >øÁqÉÅ—°¸¸Äoþ柲gÏ&vï>™( ‰"Éôô8«VOtxß_¾ŸÝ»æ¨ÕbjuޏóίsÞ¹çÓŒ5ïû>aX£ÑhóÀ­wpäè?qÝå¤ÙI\cqñã[7óo~‡Ë/J+B°°r˜,KIâ&7髼ì¥/¦( Ži´&I;Š~è&.¼ø2Œ-q®"ËR6ožeº¹™÷½ÿo¸üÊKùú×¾ÊÖ­ûùÊWîàgög©' ò|@)œ5¤yJÅ3,ŠæÐ¥Tcˆ?ŒÙΛ«y1 $ÄQˆ‡.ŠŸò¤ …@¢Uˆ¥7\•_ 1§ÞTUX!qÖ¾µFú·5òªúóýj•$N¦Pi„®ñã忉¡¹Ú& µÄbò²wâ ’‰csµzdæ©=†¬MÖgQÑäÛöÿÃ{!„& 'I’äù ºÝGH’ÍÄñ摹ú«,KVVVpÎ133óÆï‹²Ã {˜AU@4áØÿÏdµïP*A8Kž-ÓYÛGMM‘$-F|Ý‘Fi¤‘~œLÕ,Ë(Šb{ãC‚ž1¾î«y¯ËŒvØ“e¬®ò¬›ªBÒ4ýÁ¥”eEUõHj1Fƒz½‰ÖƒA†R‰O(–eIGa¤}@o0× ÛZ½6d¶Fff’$H)ÑÚ'`»þ°0KE!e™cLIQ¥”eŽE@¯·6,<rUUP™Â`…~4_A<U·„a€Rrh`ú$¦g‚&Ôë‰VŒ±˜Ê¡µ@IM^*ë0Îaqĵ:RAš¨ÇuLQçUf}ruøšóc÷JjD ‰cè{Žb%X“c­£ª<ÿUJ¨Õbt ©LA–¥Ãd›üè±DR¯Õ™œœ$ 5RX”òæŽR 3ô‚”RHF½^w˜*ÖÛª*16§2‡ Œ"Â0ÙÀ¬›HRJ„„(Š‚ƒÖ9‹nSUå€Ûh@O?¿Þ|®µ@ioçyŠZi`8jí Y‘ƒ¬Hj ¥¥cnn RF>|œûî}SöœÎßý݇xðžoñ‹¿øÎ=ïlŸî• S•äéic,õÄ' ©7›4› ¢p‚WýÔ+xåO]˾ý‡øîwsã_¼•Í›·ð¢_Ås/»Œý?ÄñãGp¢b÷);i6ǨªŠ^Àîݧrö™çñý‡A‡Ýþ€$N0V ´¡HÓ”¥¥%V–KÎyöó Íw¾û�ÝoÞË¿û™ xõϼr˜ºnð÷Ÿ¾‰+^x;·ïä»ß¹~ð=\rÑÅüêþy’z Héõ+æ¶žÄwÜÅoüÚïÒé.sÃk~’—¼ô9LN¶X>1Oר<3ÃÂò æ6ÍpÒö1Þý®÷ó¿þáVžwéó¸æe?˦ÍÓå€V+¡Ó]æ®»ïæÜ žMEÔë 8Ä[ßþv.¿ü Î;÷ò<çöÛï ÏsžwùåüÒ/ý–—àÍ¿uÝî! ¡4ªR266…w|ç0ÿõw^ÉôÔÌÿfïÌÃí¬ê{ÿYë÷¼OΜ“$@ 1Ì‚pGPТ¨Õ: h©Z­Ö[ëÅbµP­VêlÕVÅÖ¹Å!ŠÌ‚ Æ@NÈ|’3{|§µÖýcís@{Ûk…PÔó{ž<ÏyžœìwZïZßõý}¾LNïÃwóLMÍòò¿”Zm޾¾n´v Ã"ŸúÔ¥ ô¯`Í¡«ðƒ”é³ &Ü·•7^ð^´Îh42~x+Ç*ìØÍÖ‡&¹ôƒ'a”¡˜¯¸y¾òÍï’¦/~ñ ˜žÙ&aùò ÂÀð¶‡80Þ&W„Wœ÷¶l¹™Ùiöì=ÀQëŽ$‰Z)\)ðÇ“$ʆŠns]‰t¢v„Ò©Ý4¥icTBà[g©ÖÄ6+�4#ŒÐ ´ñçÑF+ЄF R[<ˆpÑ*³Ÿ±X‹uPKaTUÛ‰—En7¢Ô…Òï&Sõ×W§›|A‚œ@LrÀ-‚¤v|ƒ1 J1JÛ«S.m Ÿ_‰”ÞïíÝé8y …UHé3;{ggÎQÂu‹‹X€'±â8frr­5ÝÝÝ¿,¬¶§©Oo'IÂÜ2¤_}|O tÁË“Mmv'2\I.GˆE&Îb-Öb-ÖbýþTE¶ºƒ½™ï™ÏEZ¬ÿù’V|³¡Fžçq/¨Þó-°Y–.0´6ÔëuZ­íVŒ6†\>¿ ¶ *S ©¢Ó‚®ZÆ]×YŒÊçó‹e¤„AÞ†/yΣá0Òt‚¡žç`Œ"S IÒ¶œU<ßeÞ…êºÏTL³Õ Ic<ßÅJ£Úº_u¶ðsš%¶½£ôYÑÙúÕ²,£ÝŽˆ£�ßÄáv»Ýq„Z#‰ç=*ÏŸWéÈŽ;VwDR‡VË&ÖkeƒæÿMœD´Zu2Aàš4MHSû=óçellœ|¾@wïÂ9w‰ã:¸®]h¤iÒ‘õcv34Eº2”ŽÐ&#Ëb’$¬“wþº-1F“$qÜ&Ib²,Å @(’´Mš&dYB£1gQ�R ”eÚfYƦ‘š]¹àVYF’X†®6 0(­:ˆ 㸜rÊ1LŒOòðÃÃÜu÷½Ü~ûm|ð’wröYgP*¸” Íú$ŽLÉ’iÜÀ1q4‡J,[ÚƒQ-öí¦Ùš&M›Ô3¬ZµŒ—û"Þù磄æSŸýÙ½+ap`ˆÙ¹:ÃÃÛɲŒ©©)âvÌÔø4/yé¹lÛöŒQíêBJ{Ý}ß'Žc¦gfŽÃuÄ'?ùúúùîwÿWœwýKs<²ýnÆÆFX¿î¶?´ùê÷øþw~«Ï{ ¯x幸n„Àº£ å ÿüµ¯ñ'ò.Š—¯õ3¼å]o£§» £Ši¢(eÅà Lì¼ýmï皟]Ëëßð ^ÿÆ—àåê¿NœÎróÍ·pï=ÛxÞs_„J­cûào>òúúú8ãŒ3H’ß÷¹÷Þ{yík_˦›oæßÿíN^þòã9ëìg³wï~’¤“áøŠ|˜gÓõ¿ á…/~ë=‘uëÖ111A©X¦ZíbÏž=Ôê³ E¶sã÷qî¹Ï´÷’ÎPZÑݳ„[o½…ÁÁ^–.íg®6Ë=÷Ü‹1†®r™ï}ûßY¿n€Õ+WƒxnÈž#üô§?ãÙÏy>CË–qâ‰'1¸t�) í¸ÅØØ¤„Þ2§œv"ŽÙ€ã¶>øÂÍá¹!Yf¹qÒ`t'LÏél8Y,À|8]à[^±Ý4‘þ±²c¦ÌgŸ¥RÒ4ëüII’#‘C"D!rã“¥Zy`ûw ]$ƪZté,ÖÁ* 4ɘ`Z笠˜®5ïù=tHþjyª±”f¦g!Jà LfiÚfzz¥]*]ÇË-ý½UÎŒp‚ Õê 5¦gî N&1,.*ž¬r]—R©D©Tú¦±ÜN>nÒU9‚0ì}\ße‚ ¦gºrznÓÜ LÉâ…X¬ÅZ¬ÅZ¬ß“¹X0B> °ˆÁyŠÍ<߇NƒëØÖÔ|¾„ï‡>¾ëâ%Z­6BÈNp „aé8di†ï‡Ý&II¬ÒÇ•VT5:&Íbš,sI’6R¢5x®…Úc“²³L!„¦Õñ;\UǸžƒã†xžO–ÒÔºNÛí£ÅB€�#¬€™¥)Y¦1:E#‘Ò2T•´|Ó0#Ñ©mo/ò€¦ÝjwØ®>*‹‰ã̦Þ'Ça[tßÅAÝ"I¢ ƒ©28ÒA+C–ƨ,!—ËÛ ¯,Ñ ¥&ŽAØE+Æ%R Ñ¤©•Òè,£§TªeWPk6 ¡ÉçòÌÍÕÈ…´ÎP:¥5P*¥T*aŒMTU:EkƒÖ¹ª”ÁhÇþéˆÁZ2¥1F1ŸŠÞjµP:Âd ßwqé¸-H"ŽæÀ„>F'¤©uÄzH²,Æu\éÙ®S‘¥¦àÈ®QªAÔª!¥ƒR RÁÛÿø®øÔ—øÞw¯géP‰Ë¯¸œ¥yf ®[dªVÃxeŠ]ÖE˜eø¾O£Ñ$Š#ê³iêRèÀ󭨉㠴Œiµt÷”¹à¯áæ›7óÙ+®`Ãú ¼ô¥çPé-QŸ›ffz–|X¦U¯Q©ôP.„,b¶¶Ÿé‰)”ð¨.é&J}ŒMÑÛû4Ò¾ò•«øÖ77sü±ËxóEç°lHSkÆÜqç&Î:û…Ü|ãÝÄ툟n¼šTµùË÷¿‹îž"ÓãÌÕ#–øýD피õ=üü¶‡¸øâWpÞyçâ¹PÝI5A ….24é9nûù5|ç;ßbp¨›üÍ%¬]»’={¡X Ù¶íAvíÚ˺#¢¯{€™Ùù|•-wÞ˧>õY^ÿº?àÙÏ;ƒ‰ñ V­ZÆ¿|ûkœþìص÷�ÿç_àMo<Ÿ»î¾“¡¡!– Ç“Äm‰«c®ýéfN8f ÝÕ<»ÞÄò+س{'«V «6~XÀq+(ðÃ?Â àœ—œAרכ„ù.y~vÝuuÌ1(¥Ø·wYV縧î]Ãüpã ¼î ÏÇ/‡¤&G½™ò_º W N?õ~¶ñ{}ÌT» (“'Wîf¦v/ý½°fy?I{‚³Ÿ÷,îºý^î¿oþ°€ãÍ‘ê:):“$i@óÑƪ”¥²ŽÀª@t‚ä:În×É{ÈÒŒLùR¹ƒ*1‘á¸~'pOQd:Aé ¡,*@ë Çq1 ²‡E 8ÒºgÅ¢x°X§ŒÉH’ ¢hrKá mw_LKÃ&Ôûà” 0@Ò®“Å{ñ•‡Ë’'ô›´ÎH’)âx0ø~¹p)ÃÅËÐ)ÇÉ‘ ‡ÐQÓG85„.C‚\\düóo7‘ç‘8Ä>)é¢5Š—;„ ëpœ°çñ}—_!\r*©‘¸ Í�’EÀb-Öb-Öbý>TÇÌÍÍ-˜Û%²XO1aÕàà¸Rº¥h6Û,©VqA#2E·0"O¦žâ îtÉ*­Ð(â4Áõ:-ÇÇ>FY ð}|O tD–¶‘"Ãqžg¦*‹@Z!Áë6MÓéH+d¦ Q”áù6•Ûh‡4J(w-Á£æp]—4I-+6SdaÍwó¸NjC¥2:Åu4ÆH²,%K Ià‡(@+ƒJ ™ŠˆÚVXÅdhÕ& ­SÖu<</�YªpÝкSAʬ3ñ”(¥É’”VVÇßA)ƒÎ4¾çá{Ž ‹Z´ZuG0Fà˜©Ò,"Óvg>ŸË-$ :¾Cf2”1DQJ†4ÛRH¤cqŒQ(•Q,bž)rïáH—0¨`4Háâ:Å …1 ‰”>ÆØð*ÏõIT Æ`´Be²ÃŽus9‚p®,0*Wá8·1£3æã}´Rà+‰*Ñ„¹B ¢tÏw‰¢q:MWµŸ×¼òE|ë_®ç-o|Çžô,¦'¶3>>ÎŽ²oßFGÇH’ŒJ¥B–j*Õ*ýýý ††èééf÷®íÄiµG¬BeM¢¸A»]#øØ»—³Ÿs&‡,]Êõ›~Î'>ý).~ëôö-e×#;1I“•C‡ ÇM9tõ2~´ñ.¹® n ¸qÓ„ù*ív÷¾û¯ÙùÈ$ï}÷Ñ?è°|¹O½þJIV,?ŒûZ›ÿõ?ò§ïxž¯™kL iÐÓ=@_ßZ¾ÿÝ«øÀ_~‡3žÝÅg?õ^žñìSß=Œ=Ç¢6JÕ>FÌð‹ÛïcjzŠoü>½õMœxÒñ¤iD«ÕÄq<6ßv;…B‘ÓÿׄaŒ¤ÙLøé¯æúŸ]Ãÿèµ}Ô¡øR“ %›o»)[sü>}ÅØü‹}¼þ5Ïdù²2?ùâ¬\ÞÍ#;&g9dÙ:šµ6[ØÆkþðeøž Ph5æØ±}ç½êU9ÉÄtJ_°„F þõÛ×ó–·¾€Á¡ö“ËNž‘ÑnÙ¼7½é ´[MêµV¯^ŠƒdÛðNV¬öxÍë^Á\k†bµ›Û¯ßÊæÛ~Îß}ôÿPÎŽ^wË––™k4‚n’4 6G¯_FÁ3¸^Ì@ßu˜nAlˆ²&Æ­!‰1ª€ë”~iÐ÷=Ò4µApkìFãyngQ •K¦ì‚Ïu=¤´‚T–$h„ݸr$¤Ä*âÎf8øD©¥áæÂEgŠTe6ÜÊ^ë`”Î"Ú­I¢xŽRù(¿á‹'æ±âª›‡Ê bñ0­ö>ЦD— °�� �IDAT iŠHñÄ'­[´Z;‰ãT*Cø~ÏÂX²Xë€Kȉn|áÔ›3‡pðÏÕ“rþƒK&êh=hD¾QY Aùñ-R¼ÅÒáÈúsɵ˜4•‡Å…åb-ÖoGÙ óÆÅ/ý°XÿBØ?FG<æôË_rC !“åŸÄšïзΟûùŽïf³Éþýûéêêb```¡üwÜx´a ‘‡NðÍSSXµíêB8˜N‹Ö„$j·ZÓÝÓM+Np=Ç<¹.J™Ô!ßÁ�БÌ|ßǨÇ<ël¶q¥Ýíž°B)ˆÚm|/Ä÷m{­Ò¥ù|©Ó’ÎŒW ëvm7hcð;éV«µð¹ó7¥1£mà’ª“Ìý莻V±uæz9|? Mì̶߫;ch4ÐG›ŽÃÓdZ‹Áå±ÒüƒbŒ!IS”Ö„aˆïYŽìÜÜI†¹¼O¡P ‰mÛ½VV˜•ÒA‹x4(lj¥4T+UI’ËåHÓ” P¯×ç;(•!ŽõzÈí!MZeärùÎqÛÿ·½®¶õ_é ©±\[) <ß"”F+& àæC<ÏYBË´´Îd:ƒ´,B ·s®À‘8®ß"NÀ‘yTÜE–j²8¡Ò«ífÅ!ðŒ“O㣗ü 7mú££m’ØcùŠ€åËÉ2ÍC3Ó#¨×Û`Iª™©ezxG®=”O:ŽV=AÈŠ,êe|t‚åËeç®=l8öxú†VòÕ¯~ï~燼í‚7Óß·”f}Žf<C£ÑÀ©¹tõ–˜™›#_좫«O–èë^Á5?»üŧ‘¢‹÷_r'Ÿ´é$ìxä!†–Å>ÂÓOZÏ—~øî¹÷v>tÙ«è§·§—áá¬ßpÃ[wó©¿ÿ4WýÛݼñÍ'ó¦ ^ЉÝ{©T—Å-êµËWÎu?¹ž»îº•Jî»ï>þäocíÚ5´Z *Õ"QÔfÓ¦M,]º”SN9•F½ï‡Ôjun¼ñf¾óoòž?»˜SNyY¢ÙãGŒŽïäÌ3_ÌähÀ•_ÛȪ•}œ}ö3iÌÍኌO<†žž"YRÁŸÑã4Úœ~Æ©Œ“/u±kǤôèïïÅõ¡Z-BþéËÿF»=Ź/{Yª)sxaH’ >ó™/²t°—#Ž\ÇÈž=ôõ ÑUíÁõrlüñž¶îâ9¦§'¹ôÒðö‹/fÃQëhÔFÉ—–!H©V— (0<¼›»ï¾›s^p*RšÍ&•JÙ¶”†yp-ŽB¡<Ïó‘¸HÇÁ(Mª5Y¦‰ã¤ƒ0‘HigÔü8“)tž[i')BÚð©4Uˆý}­4p‰”t0Æ»Ááy߃ÌÕI߆ÒéÅðªÅ:“—¤hãêŒ ¬}8NañÜüjIü"N±‚+'‰ÒLˆC¸nþ Xô(Œ™#M'HÓžw,®[]\xþ?ÅÕ�'èGÍú($š.‹Âê“3l˜_bºiÑŠ÷ÑNæPnÂ>ðK;àM ñ½*©ßƒp ˆ$C4ç €»¸ñ³X‹õ”¯(†8zT\@( t€ÂâûíI«T mi‡m–8@‘vQ››#I‚  R©†‹2OÆ»ttt”±±1Œ1T«Uzzz(•Êí(&Šò…ù|ž ø=yïe1¦9F»9NœÍABw€P.GEðœ§äÐáZ©uCÉŽ(˜ežt™«Õh�Ý=]cP©"VB<×EX"Ž”&³jC†±"-Š4Ép\Ï÷I’–š"¥$ŸÏãHcXà° ®kÅW+hº %ËÞLÒO†(­)•J(¥¨×kT«UZ­V'(+ež·šeŽKçótGø3„aÁ¦k T†ãÊ3J š8Ž-ö@:¶5WÏO*í1?<ÏUB†áBhWE–5êfÁ<pxž_«ÒŠÖÆ8hi:Âl‚Ö¾çZñØ@–¥xŽC;jÓ¨Õp=—j¹Œ#A!Î¥RΊŋ1E’$& -ûÓó¤°×ÍŠË.¾’eÍ_bv8ŽC+¤#ñ}×¢R ÆÅ÷\G“i…ц|®ˆÒšv»‰Ò ÏõÈç‹H4ÆèÖ†‘yžïû(¥ˆãcÀó Jgô€$ð]”h£O–˜›fbºF”xÓ¯aiÿJžsÆ™{Ì‘¬X¹œb¡d­QYF±T¢^«Eív›Gvîe÷È=8Ì•_½ÇÉóüçŸÎ1ÇC XÈS,ø¬{ÚÑlß¾$I¹è‚ ùÒ¿ÂW¾ü Î?ï\($x!'áÀغûú(V–àÈõé©üì'7ñ•¯lää“Öò÷Ÿz•²Ëæ[obù²CX±â0¶Þ;Åa‡?ƒ‹ÿø¬Z•ãìžÎY/<®¹Ž¡¡å¬>dÿôùoòµþͦá/ÞÿG\ôÇ/gbr•Ê:F„Ö†F#åóÿð9ŠÅ Åb»îÜÂ;ÞùVúª ­V“-[î"M6l8ŠžîÆÇ&Pʵ7ÜpW]õc.ºèÍ<ýÄ£-Ã7 pÕ¾ÁëÖS –óŽwü=ÛªñÁ¿~ëׯ䶛®ã„ãdp B>—#jTØ|ÛfV¶ŽþÁ*{GGÉKüû÷ÂêU‡øÓµI •*{÷îáò˯ä/Þ÷F²¦¦g¨VsŒŽ¡u™k¯½‡^òföŒ“e†þþe”ªUîÞrm½‡·¼åC41SS³¼çÏ.᜽çœy:{öî`p Š£ŠÌÌNP,IÃ@o?sÓœxÒñ–Íœe”Š„€ÁÁ^ð¥E˜¼å2§.qfÖZw8ËæQæ²ï»d*AeÖêvž{éŒZ´Ê:ò)cŸ#•Ú@+át\ßÖi¯´" BŒd™Á1*³ãït6!¼ÅôëÅz¢K££)tc„\©H¾Ü‹,ÏÿªrA®L™ž~€4iáºù'DXÕfŽLMvØì½@žÿ™¶šëB»mµ)§ñUèB°xΞ¼R(Õ¤>½v«AäzŸ°k`Я€)®@¥1éÔƒ¸^ˆp{¾c‘5·X‹õ?9P ”ÉРU‰Djh4¡Ùýaµ¬1”¬`´�"qqœ¢ÅÉÅÞ¬ßt´4dèŽ~ðØyž#È8‚š„¶�Ð#°Ï(lfjz†%KºX»v-Ë–-_ÈÚY¬'¾æsz†‡‡Ù¶mÆ–,YÂÀÀ�+WR.Hâ×8¬X¾|ÁHø;}ÿê6*žú>²é4jûi¤SPU”Ä*¤\‡ß¢Òm]O±¹žEQljåãJ‡4I0J!œ\…u‚"Ï@Çh­ñ¼�ÇuÉÒ´Ó–Ü }Ò£ iš€P(­h·SÂÐǸÆØ :Iôžà‡ZYQrÞíºîBš}X§l–e¤2#tCÆÆÇØ³g7k×®% Cff¦qgÁiú¨ÐIGØsÈ2Ý-3’¤ëø®‡Ö)qáû¡å1¶­W`]˜Iby©®ã!¤» j’eÖêºî‚k6Š"Â0´ÎXm’4M;Ž]‰ïç;¡=Öý&°ÂªVf IÚ&\$ÐŽÚVdñ}\)i6ê”J%ÂÀ§Ùl�µZÍ 8Öõ†ív»ãj-øyTf…ð0ðHÒJe–gšYñ( C’$YpþZAZYæ#.ÍfÆõ]<ϳO‡©j žçá‡.Y¤PŠÇ¶Ïs0išuΕD LKòùí¸ÁÌÜ4år¹\]LóÁ¿ú[îåìÅ ^ø\Ž=úH|3\PHiƒÍ\´#@·ñ=…ÀÏ«N&—/S›m0WkrÛæ;øî÷¾Çõ×ßÊù翊é™:cSST*Eúû{1J1=5ƹ/y)_ü—¸öú8ó¹'¢œ:íÖ KWô’$92å‘Ä.+W.ãÝïz×]7žʇ>ò^”#Vã<í¨ÜzË^ü¢·pÍïä²|‚ÁÁç¿úe ,-rËÍ›8þ¸g"M×Ütïú³+yÅKãÒ¿~½½9ví~ˆ¾þnff¦éíícûöÜ{Ï}$IÊ™g>—/~ñ‹H>ú±¿Æõêijõ¶m{˜b±À† ÇÑn·ñ<4ñý€Ÿlü)ŸûÜU|âãÆÚµ«™œ˜Ãsr¹<?¹z#K‡áèãÏ⋟üw~ðï·rÚ©+ø_gOsnœ¹é)^tÎÙ´â@ÑnåXÚ×Ï×¾ñMÞû¾ ‰uƒR¹ÌÏo¿í;wñòóþ€ñ‰i å}=ƒ\ö7ï¥Úµ„ó^ù|0Ðl4HcC.,ò¹Ï›g?çhV¯:œ ( ´Ú ]Ýy>óé/pÒ‰ÇsÈÊÃ)•˼÷½ïc ?Ï»Þó6¦Ç&¨T Ôks䋾½OëͦfÏî1й<==UÒ4&Ÿ/’Æ)ssmÊ•¦]#S–  ÝÏÔn¤Hi7y|ߎwÒwqb»É3?œ !ð<ÏNá’½Ôf'‰£2;N ÑlRx×ÁEàt–YA·3—q¤C5ñ<;þÎO Dló6¬žŒï» ÷T:~sŸ=ÑíYÆ("Ý 2³äD•œèÛlÿKMOpœnŒñ€ÆÌU ‡å?þfסÝ'jãºÝ ƒ×ðâfÊ~!$ÂËQ¨ B\ÇiÛ€¿BßâÂüIS· šBÏì@ÇMd±QèyÜnÕ_ºÎA ªËh7g`æ>ÊKÖàç–€ÿéx¹X¿=ïû_ýyþ}÷XÑü`çóíÏ}¿>YÇ=ÿ½¿zÌóxÎÁ(ˆçÐÍý´um�räÈ›"N€rÓ~n ÕB« 1BÒA´ö’s{ÉWžŽ,-ƒ°j°Xÿ?Aj~,6j–VkŒv{zaŒ– Â%Ìrˆ¤�:�4´šè¸A»½Ÿn¿‡ïÿôvìÝϲ¡eœzê)¬_¿~¡#Y,^‹ƒRY–111AÙpï‡zˆ;ï¼õë{9öi+è+vS* ¸=ˆßå Y“h‘4 9¾™tv²ŒXVÑAj5Ú0j'¥ð Âòq–ÀS 禩m?÷}§Ã)MH’ÏwÉårôõtÛdv×Åó-×±Õj“¦Š ˜gf(uD4ÐFãºiá8Åb‘$±?G±Á÷CŠ)¡Ÿ£ÝŽÈòh‡Ž°jlºJíçic™®FtN õz™™”RX8^H)UʪóîK׳ÿ.M“…¶zû;aàwÚ{•ýÎÎÉ™wZZw` ×ñ:».ÒXGšR! I’üÒÄ`se ÿ‡|>ßùMšÆ$‰[­ãÍŠ—Æt^ðóÖŽ£8Žã޳Ø~¶ïûH)‰ã¸#,Ú]ÏwHÒh!X§ÙlvlãVðɲ •Y„°ð¹µÚDQB¡P Š"|ß2oCà†ÈŽ ø>®ï’Ä1Ífd]Æ· H$q„Ê” ÷rü΄Å%ËZƒ”aè,à ¢v‹TûDÑaÞaåšÕÌN×ø·ï]Ã%ù%;¬ÿÝÿæÔÓŽa®±8žY@1Aš¥d*Ã÷]¢Tãû.q+ê…EH9†Öý½C¼ôeçpòIÏà«_ÿ:Ÿûüç¹ð­o¦»»‹fTcÛ#pÄš”KŽÈóŠ?8—?½ŠcO<”ÌÌÐNj¸a…mïEPbßÞY®øûK¸é¦Þý®çò§ï~;¾L³¼ÔÁ¥¬Y³–ûîÙÂwn"È'¼û½sß=÷ày«©M‡Lpùâç¿Ì·¾y¯zùÓùà‡.f`yޱÈh·|ßã¾ûà†ëoæÔSOcÅŠå|ö³Ÿaýӎ䬳_@XÎS›'Ž[ìØ¹ƒJµLoO/žçÙŠ°@É ¸öšøÁ~Ìå—¿‹¾¾^fg')™™™bÿ؆y€¼ø2îÞ´Ÿ¿ûØ?ÑÓçòGo>›,™cûý;Y»úr@KGúô¯<’+¿öo¸A‘g<óêÍi´6\ýÓë9ï•/cõêCØ6¼‹|ØÏÍ7ÝÉ7nç¯.} F´‰ã6M£%Ù7Í~°‰¿|ÿ…ø~€ç‡8Â!,T¹þ†[øÙÕ“\}Íû©»¸ü²Ë™ác÷aF÷í$ŸÏÅ‚Œf#£§{€™¹:=Ý%>úÑÏòœçžë êõ~&Ùµk„±qZVÅtœèªÓІy´V “_­YxþŒRh£¸¬Vkë:7¤t‘Rá.`1hëV5h„¤³Á#q]¿#”Í¿X,NE aŸ4®k¬Òq¿m®QQ«Õ˜œœ¤Ùlâº.]]] ”ÝÚù`¾ééiææ,¯{õêÕÿcí6­V‹©©)êõ:I’tî/çyT«Uººº(‹ cçã;ö„4%25_à;¹Ž8¸Xÿuy@ßïC©i²l–,›Âq–>Ú¹óß]™„,š%k7)UW“ϯ\<Í¿FIá’Ï-Cë²Æ(Zƒ›ïf‘Fýd–Õ„¹=8dxåÃqK} ž¨k n ¿°œ¨>Jcn+ùä ü/P)E’$ ¸°ÅúíZ­ív›V«E«ÕZ0 Ì¯s<Ï#ŸÏÓÓÓC†n¿'¦’$Y˜kDQÄàà ýýýÿiQŠÙÙYfggŽy~W(èêê¢Z­Á“&ôþÊ0d ­c2ÝD´Æ‘µ2Ñ$víÚÙÅv}"»!È?F”3@‚‰™š¡=}jò6Da ¡¿íûhR<<„‚>eyŠO A5³×!k!uôY<NÏ,«!e;¿s}ps@&ÆDš¬Qg|ÏÃ<p×<¼{”zíp‹T*ö~uœ®[\ì 8(’Õy‚ @)E­VgÿÈnºÊS>0‡H«øzJ]ë÷wÏ)LÚ ko¥5} õñM¨x /¿Y^CS“dé0ÍöA2Ah»9ð3‚¸ÆJ¥¹\‘´ã†Æ ¥¤R.£2E£QC/Ì‘Ïì‹Í·®G­Ž`k@ϬPëøÖ¹éy.¾ï=F0t8HÇ õzßóHÓ)]ÒÔ&ÖK)\`v)IÓ¬Ã1¤iŠË9ì°CBÐjizzºzÇ‘4›M²,é´Ø„‡$AÐNÚ(éQ(æ‰Ú1ZÙ€ªLeÄq !0bAuëºT™m•—Rþ[ô±âê¼7˲αHâ$18ÄqÊÜ\ )%®kÅÛ ­»UI’$"Mc?À ,B Õl- õÚÜç¶·¯é™i¤´ç. Cr¹œ ÒJ Ƴéæq”á8ùQ7ÍR„èŽóÖqZ­¹|ØqšJ|Ï'K­ø+¤ èÉ’d!ËŠÉ, ´R ÁóœÎ"^aŒ" ýŽHe»iš’¨¿ ‰ZÅòsS)ò¶sÍ5wóÎw¾œ7¼é(–B¦gÆ Ã"Â|/çyxž$Ic!:ŽX++QÚø¾OOW‘¹é)‚°H«9M3Rä e.þã·p÷='ðÏW~‰s^ü"N;ýD¶ïxˆ£ÛY9´†$iñ´ ‡q×½}lÞ|/|ñ™ÌÔ ìÞ= ”ˆ"‡ÏüÃ7Ù³w7Ÿüø›9ïõçS›ÜM£Ñ" +HÑ…ët37½“K/}ïûów±vý‹ÞþKV39¦ðå ¯í‡HÓ&ïùóWqÁ[^ÉÔÌ.ÆÇ÷§ Â\™(jñóÛîbv¶ÁÞð¶n}˜ /|'çŸÿ^òÒÑhÌ â:ûöíâ‘ÛY³f «V­Æ‘.33³x^@Ùõøò?ƒÊÛÞvGu“¨”Ë´“­xŽëo¾š ßúˆ \þ‘3>sáŧqÆ™G373Ëhx€§­?Òº¥ŠÅäÔ ýØ7xõëN£Z-£u‹Í›ïà°5‡sò3Ž¦Þ˜¡RîÇÝ|èCW²aý�/|á h´Æ¸íŽ[9ó´sðEÿrÃ(ªôôV¤Vk’ót&ùìg¿Í_ýÕ+9ìÐ#¸ì²ò³«¯æW|˜0pÈRÍÄÄÝ=ÝäÂ*­VÄÌ\éä¸ýö;¸ç®üŸ÷¿—j)O¢<09†Þ‰1°æ°å(ẮSÀ¤éŽã<!È…¸Žéð’Áó2•¢”鸤%Žç‘¥1Æd8Žkza®Ò4µÜT F+RÛIŽâºvÃ!1<‰#F[‰Ý!¶?»NÞN°ÅモpÿþýÜ~ûílܸ‘‡zˆr¹Ìé§ŸÎE]D__ßAYÜíܹ“k¯½–M›6ÑÕÕÅ%—\ÂÐÐÐÿÈñïÚµ‹Ÿüô'lÙ²…ɉIfffH’„%K–pÊ)§ð¬g=‹ 6ÐÝÝý¸'¹q<N­ö�R&tUÁózX¬_SГ>Õê1´Z»hµ!I4]]}ˆßèÌR§ ‡EväãJ�U"&©‹ž¨b}5OÚ¢^�Ðehæ‹”+ËÈ‘OÛZ (³ÄJ-¹‹vk/¨Ö¢´Ñh0==½`^X¬ß1¡Ñh0<<Ìðð0<òÛ¶mcdddaƒ³»»›žž=ôPÎ>ûlV­ZEWW×&6NOOó‹_ü‚7²k×.^ûÚ×rþùçôco·ÛÜqÇÜ|óÍ 3::J½^'Ž<òHžõ¬gqÊ)§°bÅŠ§.OQk¨ÕIZû¨éÝHÝ K,¡T>‚|i 32K\¬!êW7Yzp²!ºæfq“1êsB¡‚*h¦»Ifï¡[ôà•VBe,â‰þ³ Ô‰ã=ÔçöàF ¯—ra5…þÛÂïâ ®Çü3Ô‹cVR•k÷ì㌇¯ãèuEVs2ŽbåJÐÚ¡\^M¹¼¾¤¹ØðD•‚$Iسg»wïfrr’£Ž:Šç=çY¬îuèʶ’Ž^ÇÔþëY"}ܾc¡¼ì‰ëyj¼  ÕDï`vø3´Ìª…•¯¦RÞ€ôª¶å¿/¥>0E³>K†@öbMO­ûѵ”>1äóyÚÍ&J)‚0Äd6eÝõ<âDÙ–XÏƒŽø–Ä1I’à{!®ë.¡J[ë¸eu&¤©M®Ã< Q*!}”Ê0@.âº>IÇ1kŒu–ËåÇTvÆòN@”ÎPÊ ¹ÖÍã’$Qà8NG¤t0Æ2NÓvJZ1ËšÍfGðd™Âuž"¥@kÐF!„îàù9‹éˆ§žçáHm¬cÕqÚÔqÙÿƒ]dYÁXZÛVxã<×M³!61®ë`ݲ)¹0èߨà)¥¹\Ø ¸ø¾·Ð&\«Õ üÒ©©)’$&—"‰3²L†ùÏUæsLŒR,–0Q”EÖ]<ï\v{jãà TJ–J@‘f‰=v£‰¢Gw^+Õ*Ž)­HnǶ ºÝn£µÝ±<É„|>@øDé©ï{ÏÇØtËÝ|ë›åÏÜÀ\}áh|_à¹9ºa÷ðV|èAfgg¨Õæ¨ÕjäBŸ\>¤§·‡ Ö3¸ìâ8"Í"Ðj§4ê1ND‰æˆ#Vò†×ŸÏ—ÿé ø¹„SžqsS#Ì6&ð½.Rcý†µ|ó;ßâygŸÅÔDFèõ²sïn¾~+­F~ô-¼æ‚×19²d‚Ô‚vzWr÷í÷sÅ߉·¾íuô úô Tؽ§ŠÊòl¾yŸüäwYµ²Êe}g<çvï¾/0(-èí]Á½[îç¾û`ÍšÃyùË_Éöá|ä#WðªW½³Îz>£,é®°cÇFGG9ꨣéîî&K…J ¥ì½õéO}–Í›oã’K>Ààà ŒP­t‘$Ù$·Üv g>ûy”ò«ø×+¯åg×ÜÉ©§ òÊó_Àäø>µˆžž2IÖfb¢ÉÒË@VùÞ÷oÄ j¼ñMo˜ÃÃÃÜzË-¼üÜó1dŒMN±|éÓùÚWÀ½÷ìâ/þò•ܺù&=¼g?÷t ~Ñ=MþéË?æÃûFÖv( .§>×âÞûïÇuÚ¼åâwðñË/cãO~ÂÇþöRÖ­=”éÙ¤ -ë'N2ff§É2ÉìL•+å_¯ü6/}ÉÉ,_¹”é©Ý ü ÌÍ7mæ°C©våiµ§ÑJz\ᣵ ´ ‚\Ç9.BõÇ¡Ýnv\¦VÄ·ns”ö™ÂÐYØ`±¬ÁHƒƒÝˆ‰“„,3�k±Ze:ã¦}þÅ CJéÖºú;Z󮣭[·rõÕWsçw255E¹\æÀdYvÐxó.ѱ±±ÎXûä:Ÿâ8fff†{{ï»—ááa0044DWWFƒZ½Æ–-[¨×ëär9ªÕêã^`je </Äu{‘r1°êןK'‡ãäP*"~ÓNä4­GûpŒ&,.GøÕÅüßÝìd¶DXèÁQÑ…°üââé9ˆ Â…EQÔ€ú&žCæÊxn7’ O$ÆBú9¼RÒA·ÁÌi"d‘r¹üK]a‹õ[ iÍìì,wÜq<ð�ûöíëäY„”Ëå…,†±±1ÆÆÆ˜œœä¤“Nâ„N`Ù²eäóùǽ±˜¦)µZ±±1ÆÇÇi6›u~Óh4صkwÝuÛ¶mcÿþýT*r¹Fƒ©©)vìØAš¦ÄqÌyç÷”Vãx‚¤u€°™ & ºnB–‘¹^¿ëÿ9FÿꦌšH vjèp „Ë‘ÁJnnä�� �IDAT�¾› 3ÙŽ‰[ûHDƒ °ß[ rüå 1‡Ž¦h›1ÓÆõªøn!+Ȱǯþ'¢“ø¥ë TI¡%Ï8¶L–;„¡§ÅÀÒ^ÊecšH™àº“Ë-ïlÀç°NÁE‘õñ¾GÓ4¥Õj‘¦)ýýýT*Uz»»èÊ œºG”N’LÓØs ¡ã–J Êð;Ñ•£€Qó.¢ÙŸ#¥C¡x4¢çd®ã ¥顔¢·yb®Ÿ Px _U?µ„ÕùŪëºbÜWÓ,Åa�ž ž2(Ç„וãâºp%*³‹Ò(é$Ë“¡RP`„ey*M’hr9Ï HìfásíÍfY…iš`0xŽýŽ,K‘F!A·ëz• ¬0æì‹¹ÕjcŒé°d­,SVìUJã{>Ž“Òl¶Ãž—§ÙŒð<;Q‹ãžïÐnGdY‚ÖV t=‡45 Âãc[ô•R6ý»#¶Î§„§iŠt°ÜWc³¬7#Š’’Á!ŽÛöštܵó/åùÏóƒ€,Ëp]‹l0ÆÄ¥J•8¶Ðê|®ŒçÅ$qbÙ¥í¨Ã¯¥ *I;¯é¸Tmˆï[ž­ëVA\×A)H¢éy¸žÀ˜tA0—®cq ò1®^)QIJ¦¤’`„ 0†v+Âq%AèÑjµh6tu÷cd£^ô>n¹y;ßûþÇ8áøãØw`/¥B@+öìåÆënå¾î¡kéééŒåOJ‡F³ÍØÄClÚt+Õ®.Ö¯[DzÁ*‡¯YNš*²òæê-ÚÍ:^à²nÝa¼ã·ofjÍJºªKØ¿”Ä›#Î4'?ód®Úx5ŸøøWxÁó_ÌÌÔÿ»¯µ|âãÊ«.8É=÷àzª#òKJÅ^6þð:¾ü•¯ñž÷½› GñðÎÛÉ2ÉŠ¥Çpù‡?É÷¾#'Ÿr—ýíŸsÈê&ï¤Ôåà9%’(Ç·>ƒ[欳Ïf劕\}õF®¿þFÞ÷¿/à¸ã¥ÝjQ,å¹óÎ_$ 'Ÿ| AàQ¯7¨TªLOÏR.Wùö·¾ÃÍ7ßÊ»ßýNŽ>îF÷ïÃõµZ“Þ%ý\{Ý9âˆ5¬?òöíɸôCÿÈ’¸äCogåÊA¶>x##»8aÃq ¾_bמiV2Àׯ¼Š‹ÞöGôôvq÷]÷ò•ü2/Ù¹ôwWÙ³{7GyÃïäŠ+¾À ^p #£ûè_±‚šãÄã«4g§¸ðÂñÚמŋ_t6“Ó“øK£Yg®Ñäò]ÁÇþöR>}ÅÇùÁ®â _º‚Õ«–1¾7žgð|I»Ý ÕNp½É±iúûVpÍÕ73=UãOßy1õ™Ç3”Jnºi˜³Ï9‰Þ¾.Úí¹…|Gxàj’¬ù…—]àwÙ0+cÂ<RX¶Ötîy¯ã”Vátëv79Ë4J§\€Å§¸®ƒëÚM-¥ Zi|×£ÙŠl×€Ù±Ï(´B[çüï `~lãþûïçöÛogzzšB¾°€²8¨/B×¥\.344DOOÏÚnøëûÜÜÛ¶mã[ßú#ûGèïïgÆ ¬Y³)%333ܽånîºë.¶oßκuë8òÈ#©VSζЊ;[Ê"BTaÑ)ùLŒ]¤ B¢u„”žírùoT’Ô¨Õ÷ú½¥A„³(ýwËóK¸r¦>Š®ïµ!‹ÂêA³æ»8ŒQèÖ8ÙÜvŒjƒÈ¨ò„¶ç ž •*"_ÀÒ3(=‹ts”Ëòùü“:n/Öã¯V«ÅÎ;¡Õj±lÙ2Ö¬YÊ+ð<‘‘¶lÙÂ}÷ÝÇ–-[Ø¿?®ëR, Ãðq³Ð¥”„aHoo/Zk*•ÊA;Ö(Šá†nàÇ?þ1žç±jÕ*N8á*• Qqÿý÷sÇwð‹_ü‚8Ž9óÌ3°?Oç^£uLí§Õ܆T¹pˆbù«HH÷×?š˜ºº¶w�YéCW#Ý a€‘½ˆì’l’Fc ãø82@Êð7Äíü.¿­#Ds]ßCËŒC¾—bi aÐgÆãâÿ{Ð ff]Þ Öu‘<Ž%kÎÄ ÊHaÌ$ƃ´ZÛqœÇ8N_gŒ_ºoI)0–]]] c›”‘ ;sʳ{7¡+ÜÁe8á„(þ‡ó?¯‡Éß «Á˜6*ÙK«y­öf*}'“ë9Ñ}$„Ýh&Ó¤iF£ƒ¶,•˸ž÷”½óÜù­ëúÔë ¦&'Y³jZ+|ßÇw$ÛVµ„aßµ†rGplš}ä¬Pé(´vHU‚R¥¬“Ëó<Úíĺ,Û&Ç Ž‹MÂFÛdø,#KUÇYª¨T²TtDYÛ+…"ŽZ”Ê´ö‚MæL Ãè±ÜÑ8JÈåò$ic¾ï":â‡êpl\Úí¨#[A!R£?ÃÐÇ+îJ)p¤ƒçù NY+FÎ#¼î)`Åê4%Ž[¸ÂŠ.ÚhtfÂ%<ÏÇ÷Ý…vú$IÓ˜ñÑ:ŽãP(óYb^ô¶Év«…ëHÒDá¹Öyë8y‘#,—hÍΡTF–%8އï;H×ò|’$¡Ùlø!œ…”0ôi4ëd™mçRcHì n@cð|? H’ ¤ÀqrDQÄÄÄÅ|€Á`Y’ÖÜàz²ã Έ“6i¡»¹ì²Ë¸îÆí|îó²vÝŠ&}KùÑU?æÊo|“|±ÍYgŸÉE§ý!K– Q((•Jd™¢Ý²lÙjµB80ÊÞ½{عs?»w {Ž8Œ§¹ŽþÁ^&§§’ÿËÞy‡ÙuUgÿ·O?çöé3j#˪V±,lÜÁà�‡’5 B¡ŒÁ@ÀB „H>Ü›, Ûª–­2j£ésû=uïïsçÚŽ!¸È¶£ý<zÍèêÞsÏÞgïµÞõ®÷E×HÕÊ +—.#k9LŽN2Ø·„Þ^£c£H=¤Úh²|ÅÉÜ»ã;¶âò}ÏùÚ×ßÁÏ<™Ñû6Q*¥lN%Á6®þÁ÷عmŸùìetuç‰e…óW21Zãﻌ]³•×ÿé¹üõ;^KO¿ÉáÃÛð²†nQ¯EÜzÓVl½‹?~ÅëÑ͘ür&&ÇyãßÀÒe'røðaººŠüìg?§·· N£Qoµ%0b Ã'“Éò•/ÿãã\vÙGéïï§^-“/æi¶ªôôörÛÍ7³`þbNßx")ò7ó·ì;<Éç?ÿ æ/ìÂÐÛ·îäÌ3×18¿¿a˜âªÏ-7ßEU¸àÂg29u„üÒ—yþÅ—pÖé§S™å„…'qôÈ,ïûÀ'8ëÜ•\ü¼s©Ög¹o÷}œ0<Ý»&¸çW7F>¯~ÝK9|h…R7Fƒùó‡yã_¾‹—.æžm÷ð«»6ó‰O~ˆÁ"»¶ßÁ‰‹‡ñ[-‚fÃÑ)–²ŒUÈeó %¾úÕ¯ò¡¾™øhZŒe:d3¶Þ³ƒÑ#pòÉ+*DªJ¥1%´ö:Ó\δ:ºÑ(ÐLDH†°/ŠZ­‰ )Jm#?:,p€$(âNuM×´´€¤IT”&©1IÇø.‰#‚ÈGʸ½T1 §m¢õô¬Ú¶Z-n½õVFŒP((–RF¦ïûO¨)‰iš sÉ%—pÆg`Ûöã�,ÛØ·o7ÜpÛ¶mcÞ¼y\pþœvÚiär9tM§Þ¨308@µRåÚײmÛ6V¯^ͪU«[2˜ÄP;ŠÔ(x½hN/âx«Ýc\?%r¹•Á$•Ê<o!ž·à‘NÐB© IÒ QÝ ™ÇõäË‚z-&ñ“1\ÙÇqxú‰QQ©TRÑÓ§žŒRŽö.¦Ùâ *ÐèÊ*!­ªqdc ×-2;R­–ééé¡T*Ÿ §È™_*•8óÌ39å”Sp‡R©DWWWÚ%iÌÎβdɆ††øú׿ÎîݻٴiÃÃÃôöö>n`µT*u°¾ï3<<ü„}ß©©)n½õV®¿þz¦¦¦¸è¢‹xþóŸÏÐЮ›æÏÃÃÃ8ŽÓa®þêW¿Â0 -Zô¤Ð¶Œã•Ê=Ñ"›ëÃ=hF/Ø¥ôÜz´°ŠŒH*÷a„ÓdskÉäæ·‹”Â邨É�J5üq’¸A6{"¦ù¿·£Ca\¡VÙŽÓ¬áÆ‚LîDvËîA<êyP$qHuzoJ42ñ2 pÝ<hi±ÝÄuu„è¡Ùœ Ž÷’ÍJ cpŽƒ«ÇXõ<×uú¬;%´žU!‰Ô$õø�rä{ü1fvÅÃöTÓ4éêêzŠ€«‚¸9Måðµ4[#$ù"¢oFñ$°»hµZ¥ƒí¹®‹ã¤ÝñOægÄqLµšj¨jš†eYDQ„ïèšI$%~Ðìè…jšè+ÉD"“-EüØR€Þv.Nõ8SÀ1ޤTضƒaÄQjäb».AœȤ`Åâ®·uPé°?çØ•QE)cs®uóÁŽŽs‹3ý9•Ðô^›ÍfÊül3Lçfq£iAôP„aÊRšÂ4L„ ]-KÛôu]t@Ý9ùHPŽã<ÌÕR‘´¥\ MC’²x]×FJE´ÒïH‚eäÜ3ñ4�–iÒh4RvªóõZZ-^óÅQ¨ôÿkšBÓ¡Y®´¯a®_Cè‚8Pm£1ÏË`-?mƒ"4Â0Ä0tt=eœJ“¨%ºnc¦©Ç1awtl-Ëlkˆí‡=n†%›R£)]ÏÅ1Û¶nçÛÿrÿ™×ñò—¿”ješû÷ÜË—¾ðOÜ·ë~^ÿ†Wó²—ýµÆDÊÔ´= a£JÇ(L]§6;É¡rÛrذv 'Ÿ´Šj3drb†›n¹Á^.~îù”+S¸ŽIµRÁµ2Œ:J)×EЀo}ãÇœÿì Y¶âd¶lÝÌèØÎxæìÚz5ï~ÇU”Š:ßúÆå¬?m>GGïÅu LN1Ø?–ñ/ÿömþëç·ñÙÏ]†BÒ! à¥/y;w•¹â/ãuö‡TëGØ»çÅR†f-ÆW7Þx«WžÆÚ“Narr‚½÷Ã:r”ýèŸñ‘ŒÝǼù½\{íuÌ›?Ä©Ï8££ShšŽ” ž—¥«ÔÃ?ü׹ᆛ¹üòËèO™Ð¦`jbšîî"SS‡©5Æxγ^„)ðÕú>ßýÁíüáËÖðœ‹ÏÂ0÷ïÙÅÂEƒ 119J±Ø‡åäéÒzùàGÞÄKÿðä W~ö3œ°x9çœ}÷ÝG>Ÿ¡Õ°øæ·~@­v/|ù½Ü»û>¤0XsÒFާ<5Êûþ殾ú -ÈS¯¤Lè\>ÃW¾üªÕq^ò’çóý«ÿ7¼î•¬X¹¿5ËÒ¥ó©Ï–1t˶P"fϞݸNËÖ¬æO^ú*6žz:+—@—1Œˆ™™&¥Ò0?ºækÌŸgžy.Õê,Rµ0u¥Ò½C7M,ÒàIJÎs†!®T) [Ó°í´€•JÓ`4}PZÚÂß~…0:R! ‰ Ò¢Ê@%d[–%!–1J%íB�„<† é)(¶›{÷îåöÛo'ŽcÎ8ã ffgÙ?‚ßòñ{ÍÝßr¹ÌÌÌ Ífß÷;çˆmÛ8Žƒçy ²Ù,¶mwŠbsçÇOb|ß§R©0>>Þ1¹( ŒS.—i4躞¾·ëÑÕÝEÿo l’$avv6eén¾ÏóX»v-§v+V¬èHäƒ<š®144„‚½{÷²{÷næÍ›÷˜€U¥b¢Ö(ˆ�;3€n÷qÜ}þ1QFM"Š«4û1Í<°à‘ÏC4J’4±¬n,«ëx’òØQ7P )$ˆ�ˆ8ΪybÁÔ» M̃ÖÍÆž;Œåˆö„1®EÊbÉ Ò¬Max£Xæ0R‰v7–<>9O!`µX,rê©§bYÙl¶?iíü±···ÓAò‹_ü‚J¥Âý÷ßÏÔÔTg®¥”„aH¥R¡R©P«Õ:g¾Þ!þØxž×1~œËÍæäÚ~d£Ñ \.366†¦i à8£££T«U‚ èke³Yz{{) {Ÿ¹ütß¾}lÚ´‰ÑÑQ–.]ÊÆÙ¸qc'7L’„l6Ë¡C‡( 8p€Ý»w³hÑ".\ø;V•Jˆ¢ A0N’´pœ^v]ëIµÇdR#’ÌL`&à–`å‡ÐŽÔtðz°èFO|éÇ |ÿhûÜÍÿïc®*‰КB6Ê(L4¯7·ì"B{lÌf©BZ­=DQÓš‡¡÷·M¦Û{.¦¹Më!ŽwEZ­£8ŽÂ4Úàêq³ÈdzÎó>ì9ØôœE0~-õÉ­èùÝxf7–Õý©93÷¹Îã'«Ù˜R a8C«r/‰; “Ãí?£¸œÄÌ…¾ßjwƨŽÔišOz5#›É¤Îö(Là “qÑt$‰‘Ò@ÓT§ÍÝ4í6“2$ŽR]Ò8‰h4XfB½ÑH5?M ˜¦E’H¢(ìÜ)–i¢-)†~⹆i¢™:ºž‚A¤ «ÐÚ“B)‰í¤ÊsZ qaÛabè:žç„!p=MèMè²êº†m›)P†8Ž…¡›´Z-ÇCˆ´UEˆtƒñƒ&Q£k:®›EÓt*¶¾V×5Â0B)‰ë:4uL35jªÕji0jÚ(!p)Áo¥N¦I"‰ã(m;¶M4=ձ𠻧§4–RRž%W(¤&MI‚eÛ„A€¦›hš ‘*‰Û¯e¥ÉEÚº¥IBȶ۟m›Ø¶“šX‰T ^Oµü<Ï! }’8B3ÓE®éB“Äqˆ_ ˆc…í¸hB Š…"aÐ@h Iœ€HÉQ¢©A…˜¦B119Æ•Ÿÿ2Ës<ï’—Òª[ÜzóÝ|üòÏqÖ™'ñµo]A_‡À02xVžf}:§Ûl6 !cdœà¶eµ–CÖ+P\6ËvùÙÏ~Dë‡?â¬3OE× X,Ñjøt廨Uš,^Á~rWÿàg¼îÏ_ÆØÑ4‘áö[~Ì÷ÿý:ŠÅ,ùð›YÚI”+wFãšE1×Ey¦É׿ù-öì?È•W½Ÿb·‰ï‡DIÄ‘#³¼þ5%C®ºêOøÃW< C7|úû@¹ŒÍL±éÖÍ,=q)ëŸy*ï¿—¿ÿôUd³_úâLMNÖ¢Ôå—×ý'óæ-¢¯w͆O©ØMËJÇq\>ÿù/pûíwðÎw½“¡¡yLOO"e*EQ,åÙ?²‡»îÚÄ™Ï<›È/òóë·sÙeßdx‘ÆÛÞñ ”Tȶm»‹K.¾�” \® Ù¬Ç'>q%¹L?ç_xWÿà»DQ“W¿áMÌNÎ’ÍäÉd\®½aÿùãëyÛ»_õ×]ÍÉÖ#Œ÷†˜z/_ùòwxÁóW¡´*wl¹–.'—ïæúnãß¿ÿSžsñ³Ùµ{¯yÍ«8íÔõ”Ëã õæ,B3ÚŒxE£ÕB(žž^~ðÝab¼Å‡ÞÿR‚8•E-”²9|x‚믻 /<›îžªÍ½xYeéCG "’8F&- ÓNŸ]G² L©~³H[r<Ï¥»§‹$ ;ZÈR*41œ¤ ½mt—j¶ê$ dœ ë&ºÖ–ÑÓ’"•ø I Pè†DÓ¢§]P{÷îeÓ¦MìÙ³‡µk×rιç°éöMlß¶ß÷ÑA:Wp›ššâž{îá®»îbtt”ÙÙYêõ:š¦ÑÝÝMwW7ƒCƒ¬ZµŠ¥K—Ò××ÇØØ7ß|3wÞy'ù|ž à88oÎÎβuëV~ùË_rôèQ.¸àÖ­[Ç­·ÞÊÎ];9|èp‡qÓÛ×Ëúõë9ïÜó( ¿\3ïØ³gÛ¶mcÿþýœ}ÖÙ<ãÏè˜tÍ1r ÃÀ2­N!qrr²ò>¦@š„ªšE9‘A'<º}\±@•¤áH’ˆjõ��™ÌgèQˆÝtáaˆºŠPÌ"(ÇÙØÇrضMoo/ C½>‰=;F¡ëdr«ÑÜ4ÁÂëB䆠rUG+… ý8¶‰ëºÇ'ç)&Ì­#]×-ûÔ²,J¥tuuQ©T˜¥Ùlv^ãû>ãããìܹ“;vpðàA¦¦¦¨×ëî“b±È¼yóX¿~='žx"CCCèºN­Vc×®]\wÝu:tˆK/½”… 099É]wÝÅOúS4M㢋.¢¿¿Ÿë®»Ž½{÷255E.—£¯¯E‹±qãFÖ­[G&óPò8Ž9rä;wîäþûïǶmÎ:ë,–-[ö°ÿ9Ï“ÔÔ8`zzºãò»qÜ Ù!¦ÈdNÀ¶‹èz†”ÍøXÀM…R d<UÌDv!dúdÊ#:šî’ÍžˆïÅ÷'ˆã:ùüIèºû¿«h–ø¨Æz}мìG÷Šˆ|ع¶ÃcB¸@H9‚eEäŠëp3MÈÉ*„Ž®gÈf—ãû‡ðýÃ$I@.g ëÝÀqÙÇ»þæcÏÀrz)tm V?L£v”Zù^¤ÕE¾¸¶Ãàž#9r„B!5~²²Vã¸N£z/õòÈd’Œ»’\é\,g>a ©Õ ŸÏwºÒŸ  *€áÚ6žë P”˳ä<T€ëhhBbš.¥’ƒ’‚H¦ i…øQŒíêH$­¦ë* ;m±O’ÍHµkZ­ Žn@ÆKA\)|~à“1<âD⚦fÓ¬×q]‡”Ë©hÖk˜–‰ëfÛ62i{­•Í„AÜ]¢+P*ÂÔAʈZu©ÃtpÝ,‘ߢѪ£é97Cœ„ ¦¦c:.h‚ ÕJc4Ÿ(JHdªÏ*%í¤V¡¤@ÊT ÖËx躎íXLOM¡” ŸÏÓò$q‚e™Ø¶…ïû$‰J?a 4ƒÈÐu3ÕyµMײÓVá8Iµ›¾D]¤ ­DÉdQB€¡c[š)P€åX(blË"еZ MÓÉåó­˜(‚\&ãxA‚=šÂ5uZ¡OTȸ‚VØ ÕJ0u°-‹$ö‘a„¥»èB ÌT†@A‚$ },SÇÒ-’8AÆ ŠTwRÓÒ�C71 –h´Z˜¶I+ŠºM[lºóNnºy?õW¯Às ~ñókø›÷]Á[ßr)/¾ô", ¦Æ¡IÈØº¦PV†°Ù"LLÓB’V»R“+dSΉ2–f`z]ä»}=y^õÊ—qý ?çÎ_ÝÁ†õk°u¡ÇÃÇpBt×ç9¿:ßúî·¸oïN¢Àå¾]G¸ês?bxQ–/}ñchÂgb|Ó IT€ ùBñÞ¿¦·¿È'¯øRÄÔëË`ÿ}‡yÕ+?J&7Å·¾{%óúsLíG3™ÏÌãÀÁqîØt;gŸ{«VÄ};·óÞ÷\Áé§.áu¯ùcdl¢T„”‚í[ï`ÁÂúûJèXLLN³pá"š¡iöòÏ_ÿ:ÿö¯×ñÉO½õ§¬frlǶð›1®íqpd„ƒpÆYÑ?oD9>ðÑ1=]çãトŋºÈçºùç/~—•«Öb™6åÊ ýC‹©UcvìÜÉ5×ü”·½óO©MO3;=Æþô(ö˜LK›Rq [îÜÄk^{9ùæS0„bÍÊõüçÿýÏ:ç9¬^3Ÿ÷¾óË„qÄ¥/{NÎçç7^˼ËWðÁ~SO^ÅîÛxË_ý}Ý%tZt2Ô’Dâ9.Õ™&I3D·– /`¶RçÊÏ~w¿ëÍ /fòкJ‰4(fVpåg¾Ãèx™½ö1S®àåshzHÕp-‰ tfËM4!ÈäR†ºa¤Á»e ܬ‹Šc’ÄGH*-ld½ Š|» !“¡¥zÉ)‹_tº{ #5°S2ië«&HÍB TªÑ›ÊMa96ª­Å,cù´’ÁTJQ.—¹ë®»¸ñÆq]—eË–qÒª“Ø¿?†n<ª÷ª×ëlß¾[n¹…Í›7·Ù÷)Äó<Z­`br‚\.G?¥R‰r¹Ì½÷ÞËM7ÝDOOÏC7H]|:Ô1ÚÃjµÊÑ£G©×ëªêÔô‡¢\.“ÏçYµjCƒC¿Ü”’J¥ÂŽ;8pà�2‘¬_¿žuëÖ=LŠ`.ñœc·hmþ± ðñÑ”…§LÌ㌾ǻ’11ðp±„Z(éT*Á÷ËFËêÅ0Ž''3;Á°ºÐŸPÖi6ã:4í8kõXïÛ2G)Ѓ–ßÀÍcçñÄ�œ ËìųÐlmE4&PIˆÒèìÁÇÇSgÌ1ŸÛZ묷_BLOOsçw²yófvîÜIÐ6TŽã¸Ób?33C½^g``€Î:iµZ9r„;ݻw³aÆÎûÖj5FFF¸í¶Û¨V«ÄqÌŠ+£ÕjÇ1õzZ­ÆáÇۤ›%K–<äüÃûî»]»vQ©TX¹r%gœqÆÃd4M{HûîœVâï–©*‰¢ ¾„8žÁ0t\wýq3ÒaT¦Õ#Nlt·œÞé‚þ÷m]ë€GqÜ Šk4šqœ~,óƒô‡¤¬£¨¨fŸÅ›�� �IDATŽ›Y‹ÈöÀã)&) Œ Y‡xÃíÆéZ„‘üµ,ä”tUL1ЏIÍÐlÆqLLóxìò„î•ÂÄuç#Kk‘Á$éí„JCz}ðߤ1Ü}÷ä\ËNNl"š¾›Lq˜L×Z\o) ‘$ ‚6–ãºîSD/öA÷?h42L¿€­á>ž­#°Ú†J>ž›Áò2H?¤åGÄIB(A'i’ÖfÎ €$¦“ü…Q€l¤ÌWW³Ñu0Í´\Ó,db>„ÖŸ¶Á* Å\ûl!…¦é†F¹R}H²iÚ)’‡Q”¶Ÿ"ý>Qcév›1jÄV )%v’‰T×Ò²¬”+jµô`ÖuË´Ñu$Qt„&:…žÔå¾ÞÖ”Rmê|Ê I ¡¤”d2fgg¹÷Þƒôöu‘ñ²m¶¨‰®ë(™~I™$>Q`š:(¥B×PB'‰#ü ÄÍäP$H™`Z²Íµm›zc)^ÆA)A£Þĵ3$èºE’â4C‡$& BÅ$±Di C‹A“H)P±Rz»eÆJÒD¤Þ'J¢¤Â¶Ü*¯J Úbª*‘M ”@E •BW…BXI¤n¡ëåj“­Û÷à:]¼îu¯âÛßú&ŸûÜ×xï{.啯5S‡öRz»KÔ+uÆGGp½ …bºzè£P‘LMÓ 0ÏA·� bÙB(ŸZ}׳X¹j9ûGî§V­¡—¶c2==‰ëº>º¡!4Sgÿ¾qZ “Ï}ú øèÇÞÂIkç¡k-êõi‚–AÖ[LÎäþ[æø«·¾…VPG‹\v?úá-üíß^Aï€ÅÇ?õw¬Z6Èìø(¥B‘é™I2^ž{wífç®ûxík_I3hqtb‚w½ûýä²KxÃë_Aµ0MVÓgÛŽ»Y¹f˜LÁ¥ÙÐí„Á¡¦¦fp½"›µ•Ï}þÿrùåoà̳ÎaìÐú˜§««Äl¥Ì›·pâ²¥,Yr2³u‡/]õeîÝ=ÁÅÏ]Ì Ÿ ‰sý­?¥«Ëeáü…LOÖqó¾/ÈåûøÔ§.ç¢çlàÔg¬äšk¾ÇK/ýJ…;ïÝÅÂù«Ø¶kôÊ¿ç‹_úžóÜ 8pè0×ßp3žû|n¸é6²Ù…ØÅ{ßÿNLžâäuç19-ø£?~7ç<k=}=¼þÕoÆ6’¸ŽßhzÊp¢˜$ª3S™¥»g�ÏËÓlé¼ç=ŸâÙÏ>Ÿ ÏXÍÄ‘=”ºs$2"Il&F«\óß20¤³ÿàff§ZHÃG×% Í0pl¥t¿Ab¥:ÆBk³Ð’0 I’¶´…LýMXØv³]PHƒT^D7@)½s¨<P¤I‹(†naè6Jiéþ"JÅm6z„™èè†Õf¶'O—PQ)###lÙ²…]÷îâO^õ'œ|òɸ®K.›£¯¿8‰Q¬”bff†ë®»ŽmÛ·áû>ëÖ­cùòåtwwÓÓÓƒeYlݶ•‘ý#d³ÙŽÌ\5Ô¶mlÛ~X23gÊçyq³uëVLÓä /ä‚ . —Ëáº.[·nå?þã?Ø|Çf¢(âÅ/~ñoVç@å{ééi …B§­vv¶óš¹älŽ…#„ ¿¯¿Óšøèo¼cMjT€ŸôxWd±µnP1RN D?BØ¿ÐBk]’ã7òqO„n7‰õê6‚ÖQÌža,ë¸Úê±¾ï3vô( Á ºÒûnº¨|•õú³§!ðD/†XHÔ!œD†5fªSÌÌL088tœµú4I’055ÅÈÈH§%NþfÎ$øÐ¡Cüô§?eÿþý�lܸ‘E‹Q,±m›F£ÁÑ£G‰¢ˆ|>ÿÖÓx9'ô`éœL€çyŒŽŽ²yóft]çœsÎa``�˲h4ÜqÇÜrË-\ýõDQÄóž÷<Ö¯_ÿ`uûöíìÞ½)%]]]8ŽC³ÙìxpÌ[­³³³¶T*‘Éd~gg´RÍæÆ^²Ù>r¹Åaƒ÷•´êc”Ë{H²=8…ùã·3 #O>·’Fc?Ê.D`å³ Œ§¹.¹BQ%’4ô‰«a•ræãdY(‰l”IÊã¨H¡²]¨Â"pÿg [Ó,’ϯ¦Ñ¸Ÿz}¥òèzšfr¼€ù„š¸=Ë0Ì€xt$w!{W¤Loò‘Ê‘-\¸ð7vüî‡j$õÝ0¶»1EqÕ«1 ë:’žJ©N^öTF³Ñ$‘J¥FD¨4hÊx9lÛ&ðâ$†(D'@[—NC×5</‡eY´ü&qÒ°mðÚ:¦6–•:;ëF Ð ¡¡” ФŒ±-³­sš>”RJ4ýl)çL§4LÓjëëD$¤Lž( QJá:6¶i¥:­a*G eÚ¦¯éZ'yVJ1JFW&ºž2SMòl‰ŠÛ‹ÕÀЭT^�°,”Žm»Ôëu¦¦¦ÚÂ=H™FŽíbš‚(öÑ´TkUÓE[ !eÎÆIÐî~ÐÐ4]7º‰h·±išh2©ñB¢¤D‘JÌé@†‰aDQ„” ‰T †©§:²qBaè:~ņ©·ïQŒm§]RJâD¢kz»YÇ!RÒþ9ý}’¨”+%½ kÄÊÇÔL„‘!•hÙ„~ÇÎÄ&õZÀöí{xÑ‹ObËæÛ¸âS_ãë_{§¬?‰=;·QÌgÈçŠTk-lÛ¥¯¯Ÿ‡³ëþ=  –1Žmc[h Çw¨ÔfÑt빸ŽNÆLNN'qâ·–5ìÚ±ƒÜT†åË—“Éñý�™XÔk ÏÜð|®þ·ÿâ—¿Ø:¼õí¿Ï³Î9F}DbÑ¥6ã’/-æûšñž÷½‰J¹N«q‹|óŸ¿Ïg?û}†ðÉ+ßÌš“VѪOÒ ÊØá<oÿõóŸPê¶ø½ç_HLM¼ùÍocùÊùë¿~ JiäsEöîßÁ¡#‡X¾r5¶‘‡ÄÀušm ½Ioi?ÿ¯[yÏ?Ï{ÿæD¡dóm[X¾t3Óòù,‡äÖ[ngÅʵ̛·˜©‰wÞ³Ë?þ¯ôôÁŸ¾éù†K½2>6˲U=Øž¢6¡!k1…b/W]õ%îgã3ŸÍ–»näÙ_@ ’Ð¥§´˜CóÁ†7üùF.ù½05}�7£qúƳ©–gñ<.~Î[ø«·?›Õ'çÙrçNÖ¬<•Ûo¿‹/~é;,9!ËiÖqîÙ§a[2 I¢¡tLÇÁUšaE‹ç#T%r¼ó¤Ù èîõ¨4&"ATêå…Ãk¸ò²Ë˜­LòÊW½˜+>ý=¶Þ³•õ§¬Ä]lËN[î“´ýÌ÷SÓ¨$ËL™á©Ž²@( ™€Ò=eó«©ÄI˜¶r H☰m‚¥i¢Ã¼PJ¢Ð‰£„8NÀ4Ûr!ºf¥ÏRHÙ®ì%¥§:µ ÇqÌÁƒ¹ãŽ;¨Öª,^¼˜µkצŽÀ–‰ÐDG摵µZmÛ¶ÑjµX¹r%gžy&Ë—/§P(¤æšF¡P`劕 Òßßa˜é$¥Ä¶m†‡‡Ù°ak×®eppÏó°m›Z­F__;wíäž{îaãiÿÇë-—Ëlß¾‘‘„\}õÕÜ~ûí¹¦9¶N³Ùäž{îéè'͵ >ÊŒZ3h­ ²va0 çxÀú¸‡†pJÑJƈªûÉf‹ÿc²¨1Ç,ùPºI¢$Iü·û||‹aÛ6]]]¨°ŽVEÅ 8`e~#ëìX=gš›EÏu# ‚ ¢v„œ[DïîÆóŽèO§Ñl6Ù¾};7Þx#år™•+WröÙg³hÑ¢ŽgÃÌÌ »wïÆ¶mÖ¬YÓaƒf2 ÃhkàWÃÞÞ^ºººP©”"“ɰtéRžñŒg°víZz{{1M“(Š:Åá»ï¾›-[¶°~ýú‡�«Q122ÂÞ½{i4lÙ²…/|á ©ÔÓƒâŽ9)£pðàÁÐû»B Š”³H DMë†cQÚW ²y�UÞFÖ[@6?ý°ÜSGË@b`5Ê BnŒ§¯‰’R ­æ8~0‰nváxýh¦7'‚ú8àÚ˜–<H#ÙA¬rXb´ì#šÃpqÝ JOS­î ›]ŠadŽÇ3O`p£éEto ÚÀiDÍ1j[QZ·ë4D[s||œL&Cww÷“\UIDkvõ£[#0²«Ð%‘G«Uíà€s9ÕS‘øa„QˆikÄqDùmËrplÇ1ÈV«l·áÏlslÔ8ޱ,Ûòpl…¦¥IaÚ’a&ºnÇQ+"‰eÔÔ@K­°R@ð ;I Ó"R ײRýÓ$‘(E'I®×ë©”ntZ)怉¹Ó„‰”-â8H]ì-³ÃôI’„$Vi0.J :ž›Axi¯” 4”i¢¯kB¤LR€ ŒÐ´˲p—( qœ¶.iÛ|¤Ñ¬!4^„繄a 䚆E½Þ$NÂ($ŠB\ׯ²lâ8±SwNJÀlë×ú¾ç9覞2_ çeÃVÛ¸K£Ñh¥²Ó^†Z­eº€B…aꘖAjDqJbŠã¸Í:NAÙÔÐìVpœ„m#3 ¥Œ3/uA7Hâ@p¡iDaªM© Ôb4M`:Q”€Ò=:ÃÁ‘1îÛ]á/?‰w½ë\ñÉ¿ä¬óÏeìàýhB#“ÉâÚ6ÓÓ³ÜxýMŒãº¥þ^úzºÈæs˜¦IÔj5ªõ:Q›ÅšÉf1uƒ®Rº®Èf=¤Š�m;l8õ4<­·ÿеkN&“ÉR¯GìÛWåо*7]»fCñgq2ÏyîiŒÙI©+G…ÌL+úûþìíd öÆ·räÈ$®g2hßüÚOyÿû¾ÊçõðÉO½‡Å‹OààÁ½dÜtý6[1×ýò&æ/XÂYç­£Þ¨0²ÿ0oyˇ¹àüóyëÛ_Ë‘Ñ]ôusÿî;@>Ÿ#›ÍcZ:I.WåñãÿŒ}ø+üÞ‹O¦Pð¸à¼‹Ù|Ë&ذq5cc{¹ûî-tuuÑÓ7baA”áò}ˆLž{ÉN?}G̰cëÎ8ã™H}†FkÛó°Anºa ?üá&^òòõ¸l<}-}= Q±ƒßœá%ð!.¾doøóP®¢ë&»Hû´8ÿüÿÃ_¾é<^øÂ ¹÷Þm,]6Èî]{ùÚ—¿Kê¼èpáyg`™±M“$LÙ a3 Œc ½-á: ³|áóÿÂŽ÷ó®÷¾…®^ø·|‡K_üBÐ º{†øåÏn㪫nâ#»” Ÿ} W^õï<pMxhx B¢0@WÓTH“ËwáÁCªgš¦a˜FZl‚¶v´‹R~¦À«00Ü”…¶šÈ¶‰‚R©–²Mèh˜†‰iØ©F£ •J‘)ÓÝÐm„¦Ðu¦ZÓ¦ùôÐ L’„J¥Â®]»ØtÇ& Ãàô§³lÙ2º»»i6›©­sNc5›Í2þ|/^Ì¢E‹:I–¦i©6àƒFОãG ¬zžÇêÕ«9ï¼óXºt)žçuÿÞÞ^±-›Ã‡3==ME¿VD~ÎY{dd„ÉÉIÇᦛnúµ¯ã˜V«E³ÙÄqœŽ;棚‰?ƒlÆëêGóAV¼+ÀÊ"5A«|˜f}×]…ñ?å I„ˆ| ia`§­ÇÇ1ŠÞçLǼ'$q0M …²VGÎì%Id¦¥?ÁlQ8 àd‘I@ÒÅÉ cå`9Ç÷²§”‚ŒGŽaóæÍÜ~ûí8ŽÃš5k8ûì³Y¸p!š¦EQ8?>ÃÃà ³`Á\×íœù'9O’„b±È)§œÂÙgŸÍðð0¶ý@ÁlÉ’% ³yóföìÙÃäädç;(¥Rv÷ØSSS(¥Ø¿?GŽyØ5)¥Ré¼¶¦êŠ+p]÷wó¥9óbšt½£Â… ¡q½r/ÙÕxùyÓ}Ä›€¥e0õdX%J`¸%„î<=·{™ ¢&a}†(òÉO “=á“ ¾<@-ÞŽ¦w¡ƒÍ~äó`•дAfgwÓhÅuç·Õãã‰ý˜ .$»™ÆÌ½h"‡“]¶IÇÌÌÌ ”¢T*=¹€U%QAÖÑ»iŒíB˜è½‰dVB­VCA6›%—ËýV™˜'m|”Vý$QÇ)cÒu]â(¢Å(©£k:h‚0p= ¡‰L“¬”}Z­Vi6[mÐÒC&ªmTå`Ù©6©”ª£y“‹:I,ˆ¢Ç1¢)3Hº®Ûi™°LÙ®X)`ª¥nô¦i’q½”½êhšŽ’Àq\Íf3ei‚8‰ñýfÛËl3NçŒq£Dª…˜$%S D©¸ý:”åhµR×oŽã´ï H™àØ&¦eÒl6@èØ–EDÇJM×p]Û±hÔSV›ã¸ØŽA³©:çDGÄq„e¥†`éçëÖ­eºfz­V)¦i£” Z-£iºBSh¤sF-tCChI£ë)h>wÈ‹¶v¸R©Ó¶T©S¹ „F"C¢Hb™v ²ª,ˆ¢T*¢4Hd„.ì”í‹T²À1lM˜´a�ž'¸mÓ]¬XÙùçÉÄ‘ýÈ$¦¿¿—££cܹùöïaé Ë9ÿ‚gc»™|…ì�Žcu®=Ib‚0$ CªÕ‡DA!_ X*Rê*Ѩ7hÔ/£Vعc',^ÂlÅgß½Ó|ã«ÿN£åó‚žÀ›ÿÏ©5ŽPmÔ‰e…¡a¢–Å?þi­)Þúž7ây6F8„ëføñoã­oùϽd%Ÿúâ_Òßï11>‚k05‰(d¹æÿJO÷|ž±áT&ŽVi4B^ý'ïc媓xíë¥Zx‡»6³ç¾},Z´˜u'o`ll+©“É:ĉ®™ÜvËÝ|àý_⢋Oåï>ò¾÷½«¹å–[8eõ©<´—;nÛÂøÔý,fíºS©V L³‹Oæ¹çW÷±jÅGþî=¥³wß.Š%“þ.ªuE3(Å>QSòío_Í)zèïïgÕꘖ…®Ù(¥31>ÍÛßñžyF/ïyï›HTˆÒDW.AËæï>ô~.~ÎBÎ8ëtjÕ*ù\‰­¿ºï~ë—ø-›÷¼ë"^réK8tp„žÁ!åü0 ŸËP)— ‚C7ÈgòØY+“ã®ü6_ûÖø‡ü{öìÛA+iqÒêuìÚ½‡Åó\Š^—âÛœ}^–—¿âRFÇʘ&Üu×vn¼þN>e9­F€Lº¡¡ mj÷@`=·Ípš¦µƒÿÃÐq\Û³‘IjèÖ¨6A)¤’íâ„@)Ù6¦"ÕhÖ4SC™H4a [s:šsŸ¥ˆã„8’O«–íÙÙYî¾ûn®½öZ¶mÝÆE]Ä\@©TJ÷4TGOô‘~o!™L†•«V2²„›o¾€J¥Â‰'žÈààà1iÕu|>OWW×Ã@P×ubppÉÉIªÕ*333”J¥‡ I’P­V)—ËH)dùòå¬]³–îîT”RTkUvlßÁŽ;¨T*Ì›7ááar¹Gg£P4¨Ó¢L^ ãïtDÇøyD½J 1ŽQ=J)èE˜=oa>ÆØj»›ç8¸z¬G³Ñäð¡ZSÛéRw˜e’\iiÿZrœùøq™µñ=IJżyÃôööŸ §°ºwï^~üãsýõ×3;;Ë‹^ô".ºè".\Ø6… .\Èôô4¿üå/B°nÝ:–,YBÿã”R˜¦I±X¤T*=ŒAê8ÝÝÝär9fgg©V«T«U<ÏÃ÷}fffh6›‹EN8áÖ¬YÃàààÃ�Ó9-ֻロ£G’Íf;æš¿‹Ø/ÊÔj#hšC±¸Óì:F»r Ì@cfËpÂ<È/xäºÌB€Û…P«íÂ&è"Æzº> þ,Zõ0Ù†À3‡Ñ)Kôc蕊ٳñrCú#-N‰6ÐÞ8(UiË9?oŸè¡ëÅÒŒæõò]P¿f÷"НÈòåË1 ãaæx¿ûµ\†™=¨Ñû0™e°œK¹„qg?Ïd2Oi‘‘Ëå¨ÕË8ŽM6›eôèh Tz.RJjfZ™p\×j'ü B›èºR`èŽí¡ F«ŽiZ†Eà§ú«…B Ë6˜™™!ŽclÛn30ƒ6ûF#‘"Õñ”²SµLµHÓ–Ð8IÃÍšÓòÐÐ ¥aj¢~ˆ@`·µQ…DqH£Ñ ŒšFç÷®ëâØ?" câ8Är¢8Âo5Ð4£ °&†…i¤í—²}sr(EàGXNÊ<«×븮E&T본®‡çY4MÛ#µáR´Z ÝÂô<Ü$Ahm@TJB]O[ïMÓÀ¶MšÍLV šÍ�¥$¶- BŸjµL&›²™âXÇ!†©á:^[‚âXú>-¿I)ï`ÍVØ™-¤LR£™¸‘Œ $2Dª[OçJˆTš!ŠÂ6«OGª„( ÑÚ ­aºn¦lb)Z5ÍALµZgjªBuVñŸ?ÙÌ׿ñ„–`™ž“aÇŽíüì'?cé²¥¼ôåDÎË“Ä n6G$¢(¢åû˜†B7ìÔÉ^ª¶6®…ëêx^‰þ¾~¦¦Ç©ÕjLLŒsßîÝœ°äDŸ°”‰ñYæÏ?_üüzr¹ÊŸ+?ómöžà…—žÀGþîmxžN»rõjLØ|ó?`ß¾{y߇߄fÕ0l ×^ÄW¾ø>ðþÏð¬só῞bÑÀ÷'£G/1>ZῸš“V/añ’AWìØz€w¼ýoyñK.ä-oû#¤‚48tà0{öÜͧkͧVÕ0Í®aRÇ6»¸ñú-|àÿÄ+^ñ<–Ÿ´ÿüÙ5¼ìå/áêû “,˜7Ì·¿û¬=y˜…Ã'Ro„ŠC|ç›?äŠ+¾ƒfÂg?û>2^ž÷l'—5XÊ*¤h&a cÚ®üü×›à5ox%ËW,CÓŽYÂp=*³eþôaÍš^þöoF7#êõ®ea˜ž×ÅŸ¿áý øðeocûŽìß»×ñøÁ¿ÞÀ¢óù§/¿šl&ÃÔÄC%¦'GÉyY@199ßl¦Àx¡Ô.€è|ñÓ_äk_¿•×¾þÅDªŽé)ü0¢1ásÑùÏfÏ®Ã|èóïb|rš«þñ2ry“ð@îؾý0;vìæ™gžŽï7Ð5Mƒ( 1M‹ ð¡]È‘RÇ š–Â&–e£”ê˜éQˆ¦û˜)ã5u>MôÙ ÒâLºi 62މcÕ.é [$‰TÈDáyY¤LˆB‰ýÆ_æÚÚGFF¸é¦›Ø»w/ÃÃì^½š¥K—’ÍfÛß]Ðl4™™¥\.Ójµ~kr!„ X*rÆ™g`ûöîcëÖ­LMMÑÝÝM¡P ŸÏÓÛÓÛ2ç>ïÑ\¿®ëär¹_[ Öu½Ã&M bq‡û`©›8Ž©V«ÌÎ΢”bÁ¼lܸ‘7Ò×Û÷÷•RrdôF¤Æ|¹ƒƒƒôõõ=„9óHGBL@„T:©[úñ@øX¢y⮣0®G“Øîbt·¡¸ÕÐÐp•ƒ‹F«�ÚÇ×ú±J Ïs‘fH<»3×KÆ^‰©åþ¿ÜcM·É–#êûñý*ºÙÀÎxO›ŽŽÿÍ£V«±wï^n¸ánºé&¢(býúõœsÎ9¬\¹’l6Û9G5Mchhˆg=ëYlß¾ÉÉI¶lÙÂÁƒéêê"ŸÏS*•dÁ‚ ?j”R ˲:èÿXÓgŸ1RâPØÑQVs¹+W®ä¬³ÎzØu!h4´Z-víÚ…ëºtww344D>Ÿÿ�«I† 'ƒiv¡ëÇ‚ ®ˆ“:­ÆA‚8@Y]à”ÀÌ<Š‚Œ�Í�;Ñô°Ð4AøÀÓO Jê„Ñ$†‘ÅÊô"ÌcÅU êP«¢•¬ž…˜ùG¦uûà¹Ð4Çé|Z­HaÛ=ÇD‹÷øøM¹ŽŽ©g03ó!;¿1Acæ6ÛC™jµ®ë¶I~Ožç!ò'ðËÛ ´&²0ØéG9L«…a¦¡™LæIwÝ:>²mÝ(bYaäÓ×ׇãØèšŽïû˜fÊ@F N&q‚ã8AÚÆ˜j ¤ ž$‘T+µNâ)„†ïû„a€ë:A€¦‹¶;s“F£A©duPäò^›)™21«Õj§õ1‰e[³Õ"Hbâ(j‚DÊ”ZoÏç)Ï·a[ø›Ž©–L’T#µ­a×l6‘‰Àq2DQ’j‡èR ¢H¶Yœ:AÉd‚€8JÚ÷ÅAÓ®kÓjµðÃ&GŽN3oÞ™L†$ iù-¦§'ñ<—B!O'$fŒiê´ZaÚ^,$ÓG¢k:¦mÐj5‰¢�ÏsÛn”³¸Ž‡¦ êõj4 h6k8Žƒi:DQˆaêíkôñ[a¬ŽcI£Y#—MÅÃ0@èɺ´Zõ¶Ökʶ#I£‘λf¤LÕ9@À04ÂHá·|t=ý,]—„aŒ Ü-ìD.�� �IDAT-KÇ4$ CÁÿcï½ãì¬ÊµÿïZOÝ}ïé%e’LBB B1RzôUQQQ°aï"ˆ{=*6¬¯œW9âQQ@&„PBBIO&3“©»>u­ßÏž-ˆzŽ’ få“òI&{ž½Ÿ²Öºîëþ^ÕZ•®Ž,& ë¨áÕÈæÒ(m¡E"P‡aÄĘâ…/îæ¨Õ«˜œš�óó«¯æÎ»îàõç¿‘B>O*~ÂÕ5a´µuÒÖÖÅøØ( Ó0UH6“'Š’ðµ„¡1«§¨#Æv]¶nÝÎ]ëîE+—R{'a30°˜mç›—ýŠJe”ó³|âÒ7 ãqj5“ÞÎ^ÆÇ&ä7×ÜÊOök¾ý½w£Í!¦¦=J…¹üǮ咋¾Â¡Ëúxÿ‡^G.¯Ú½ ­c¦§|¹óÎÛ8té Ö»­%×]{#o}Óçyå+_ÌÙ¯8“†7A¡h³cÇ6ÖÝõGŽ=~5VÊ!•Ê¢#CFÄ*Ä2]n¿íÞøÆ/sÂq‡ðš7žGOO–ïýà ü⪟ño/;—믺–›~ÿ[æ0Þ"&'+¸)›Ý{¶ò ¿Šðž÷Åâ…G²î·32ò Ï<ùéLLîeçŽôö΢«}!ßÿá•ÜtË-|èâ—qÌÓV19QÇ”Y5‡8öxÕ«ßMï,‹·¿ëlêIÚÓí8V ©5®ÓÉ;Þñ>Ñ}ø›ÜtÓ-ttæ9ã´óºW¿ž®<¯{ݳ‘f@yªB&•%Œd2.Ó•)¡Ò¤3yJí cÒtøÆ×~ÂW¿~#¸ø%Ì[ÐÏ]÷ü–“žq 7ßt;+x>0Æo®¾‘ë~·‹ï~ûMôö—ˆbM„ïC&†@`aÐÀ5mRé$Í;Œˆ$|. ÃÖ"{æÙ1ÃÞŠã˜Z½Ža& êÄÕ>sÏÌ8ð£„}ì&!TQ(1L‡Èš‚œ$ C$lÃÀL¥A@y²B{gV*ƒjÇ:fX¡[¶lá¶Ûncdd„ÓN;þþ~”RLOOc“““ ³gh{÷îebb‚ññq²Ù,¦ibÛöãDM!¥b‰µÇ¬ q3<<̺uë¨V«ø¾ã8̘ËGA*bþ¼¿¯¥j ‘ÉdÈår!ðß- ¢(¢R©0== @oo/‡~8Ë—-§­­­…³B´Š‹ÓÓÓÄqLgg'=== …¨"Ý$·$O>É lCשË2m¹4F:›¤ÜûFxi™C‹:†*ƒrAZ€qðÃÙÃv:ÚÛp½Ñ12,$ï¬Â’%Ä~VsÅň JTÝ‚ãä:;He¶¡°OÄæšjûöíÜxã\sÍ5lß¾Ã;Œ“O>™Ã?œžžžÇˆç3ÂêI'D¡P`ýúõìÚµ‹Í›7·Pp…BC=”µk×’Édèêêú»xÓ4Éf³8Žó¸9ÿÏ;kfÞ@£Ñ`jjª‰nK3gΖ,YÂܹsóZB&&&ZLØl6K__íO 7X'!ÄZ%9"Â|L°ô=ÇaP¡<¹…QDØ…$üîxƧdGª‚R©fxÒSkõñ©P&•Îaåòˆ'XÕZ6Pñ(º^‡š‹HÏ…LÍÄçÿùyét†$adqˆeå1®gþ÷V§ YX†ç]O¹r;ç!ì ·‚ïþ9 ’Ρ 1D¹² cAa #‹òò¹Ö^yÆôx Óu]Â(ÑÇq@øH™&Žc´N8¦i"-Ù|è'!*ÃMÑ1¤\.'ŽGÇ�-1M)M¤ÓL„OÏ«ãõ÷F©¥®ëàyAÂø #,Ûlm,[Âi#¥²åvUM'kǨ(n‰}‰»ÔÂM§˜Jxˆ¶máùuj5ÛžA�HTœ¤ÛÛ–‹a¸D*A$©uÊåiR©4ÓÓÓ‰kÔµ›‚ áÒ „FJ(•J€&ŽÂ(À²ÌV»¦ÖN§ÑZEaÓ9û'.lÇÍð§<CÜ {22qÁ)­ £DŠUŒïC… 5Fdàº&±JÎI½^oÞT"qû A!èf"¹eH¤!“dbf’2eóó—–n "I;´m¥°3‰^¯7š×‚�âV¸O³…ãØ(_%¡Zq’¤.Dòu¶k2:>V ßóÐ(Î:ë¹ ¥Î>®øÁwÙ±cüÀ‡1Mƒ8R†Æq\Úô0›Ú–-S®Tð=ÑdÁJ‘°fK¥ Ð××K¾˜&Ž#Ûell’ùó’É–øõ¯¯cÕÊcXqØ”Jñ¥¯|ŸM›†!†¯~ó2®I®˜gh÷‚°@)?ßýf=—~ò³\xÑëèîÍÒˆ&¨Ô5?úÁ/yï;¾ËÜ…½|áËï£onŠñ‰­d29TdÑQ²¸êªËÉçÛXµæuͺ»ÖóÉO|‰—žý ^ýÚç#D@½®˜fãÆM¬Y}sg/ ^ؽ{ ®ÓŽR‚YŹ\÷›_ñÁý;§ž6ÈË^ñRî¹ë66X‚ÓO{wߵޛ¯û/|d«\Îܹ³0,i9Ä8¼áocl:äÔSòÊsNg÷®]LOÔX8¸Ý»·c;mH™â¿ü߸ìg|í²w²`a7SS“ÄQŠöB7=¸™‹.þ,K-ñ¡‹ßNëà7µªGàÛ¸n‘Ïî«ìؽƒÿÚE¬¿çVfõÏeÎì¼âì×°hÁ|Þóþ÷#ŒiÜt7ÅvlGPžšÄMe@HÊå*]]=¤4£cchóãþ€ÛîÜÀ7¾q óéæá­ë8êiËøÃ­7°ôÐcس{šûî~„ï~û>öñçsüI«Ñx¾ÉÈð0dz­¶mÛ€ë:ØV¡#ÂP!EâzÒMa5Y8ËŠdy‘ð…¶ecØ¢x7¹^²Y J„4¥h2©c$&(ˆ¢¸ne˜!5Ž›0е ¨ÕªT*òÅ"¶0ˆÂû�w¬ÎˆŠ{öìaóæÍ‹EöìÙÃ5×\Ó=Ïãî»ïf×î]xžÇÆùâ¿ÈÂ… ™¿`>Ç} ===Y4̇’ôà¾~ÆÆÆODÚ={fûöí ãº.'œp þ]‹™Éÿo ¨ÿ³uF¬‚DX/•JÌ3—¶¶62&h­[@úT*ÅÒ¥Kéëë;`ùCO}Étæ‡ø«èˆ‰ E„²$˜¿}ºáF:²µ2ÄiHåÿ—ƒ•þuF„LM•©NŒcE5,7S˜Vz¿¤s ÃÄhëŬ:°w˜J´• =N»‘Á²nèÄÇ1›6mâ7¿ù ×\s {öìaÉ’%œxâ‰üñtww?nΓR’ËåZÝ'ŒŒŒ0<<ÌÈÈCCCŒŽŽ²aÃÆÇDZ,‹#<’ÁÁÁÿqQòOEróoÎù.´Î¼§ Z]—étšl6Ûb¾?ú{(¥˜˜˜À÷}æÎË’%KšÆ ý,2ÄÔöbGur™vL§}Ÿƒò+„[±´K¶m–Óö½¾00R]•Æ. ¥H¥rO9AO¡ °¤ËÜ'†\­a4Fµr? Ý@§g'Îá(ÈÔÀ0Š˜¦Om$Žkh­>ÐöðÝn²¥ÕèêCDãw *;I¹t¶Hesÿ$¢jó™Ò˜BU¶;pÚ—cu­¢á‰ÂD'û§Ã<aµV«Å~âP|”À7Dd™V³}<"Œ"T J i¶3¢a8NÂ%U:" 7˜aJBÏOZßë>–e$Û­ÂqlaYqœˆ…)ÓE7a”6…Õ$iž&T …‰4C¤’–YP¦ÕdnZÄa„çù¦HÚéMƒ02ˆã¥âfÀ cbUGEƉóUÇÛNÞ{„8NœˆR6=a.šf µm›0Ô”ŠyªµjÒ2j&bL.W }´NÞGòY†ÕÚ`Û¶ƒi&7RÈ&K5Â4%Ò€8ö Ã!†•e-'®e™­VügaTœˆ¤¶85<? '2Áh­(W+A€ÖËÈç ‹Eêõ:qcIi@ÄqÜ’JgŸ h4ùCF“;¡Q‰oÙhL¬ØAÅš8Rcši( ¦V›Æ0»vQ,Áš•GaÙi¾ð™Ïï|ßÅlÙ´ƒƒ¨Xñãÿ˜ë¯¿߯ÑÑÑÍ+—±º{…b‘t:›p/„QÌ®;غm›7?Lè‡ØŽæÌgŸÊÂÁ…´·w21>E.[ä”SNç§?û=ýƒ|ÿû?ä·í êÁ^»œ3Ÿ{ ;¶=ŒçMà:&(Ey*àË_ü:oç›9åÌcxäÁ;(•ú¸ïîÛ¹ð?%[4ùäçÏ¡{–Æ÷')•zQA¥¦¹ñÆ8lu?mímd²¿üÅxß{>ÃgÇ/y»v>L.[`z¨Æ–m»9ì°Õò‚é)C:´uäÝËìÞe\yůxÛ;/ã¬Â[ÞñJþð‡[˜Ýw(;¶bZŠËã]ï|Ï}ΙÌèD ¥Rtô.ämo~77ܸ‡Y³á‹_ù ÕÚn¶ïÜâ…‹AÔbœB!C©ÔË7läòË¿ÏE¿EK3>¶ ‰A.Sâ?¯¼’}ìÿrö+ŽáÜó^ Âgtt˜ysS-k2©vÞýöóà–‡¹èã/eº2ÎÊÕˉ£,/zþy,ZÔÃG>ñ¦&F˜áÁEøÍv¨T:C¹^G`ÑÞÝËî¡=X¦C&eqÉ%—±e˾ÿÃoÒÕ3Ÿÿºú‡Ì[ØÎîᔊ%†÷ŒqϺ-|÷›¿æC:›—¿ò¹LNmIÚ÷c—õë×ÓÛÛÞ=>{öìÅt$RZx ‰Wóq- ;—‡(D5‹I ¦9³koVðe«ø¤tÜä¿-W£m»­p¿8V gž]²‰Úh†½YBÄhmE>š­õ%•²˜3wa”ü¶00õnoog`` åL{\û{¹RnOìÝ»—[n¹…ÉÉIb³|ùò¿(^Î×-ZļyóZ“““ìÙ³‡x€«¯¾šuw¯ãºë®£P(Ðß׿ßïÉõa·R/g6VŽ ‚€Í›7sÏ=÷055Åàà GuýýýOhÑtЭú¿t}#01q°„"ø [1e=ˆÝ×7¸Y´¨íBÁpÕÁx l09µ›ÊÔ"…Nçй4ÂØO9i@ªˆvlt4A½º•Fz;Ù\r]«Ú¨V«ìÞ½›k¯½–›nº‰ÑÑQ,XÀgœÁÑGͼyóþê|7Ã<Ïd2ÌŸ?¥µZññq†††¸ë®»¸öÚkÙ°a…B\.ÇÀÀÀ~ÙÈ›¦‰ã8­}rè$ø¸G±±1|ðAvî܉ã8,_¾œ#Ž8âBý<aÑM…DÕ`D¤ ]H·±¯œþ:�9ñnvÙ¶Ã1ìölòÜ‘TT÷Þ‡­L'ÄxªÔδ‚8ÀP1Ž•Á2Ý}¸NÐÞ^ª“ëQ2ÂiDZépe(H«™æZç`çþ–™#›™¹¥ÔËÛѵa”}/¹ü ìTêŸFXÕqƒxânÂÚf0¦Û‡cÏBc~êíFL¥’„yÃ0BßOþŒ ç�‰ïDZ„ g4I¾NRºÃ0l1h´Žðƒ¨)ÊÍÏK#”l:W-¢(@“@jÝ”a€RBØ­@˜™ sþ‰ûÇ1a!¥eÙh­Z)ݶe Ð:á#6«š5?qÁ:ÂDHE…¡[“•ç%î[Ët‘ÒNx¯2BJIÝ«EŽãP*å[ßOHÕz°%œfA¬B‚Pá ×!V‰¸éZIˆ—aXK††O„a„m ,ËE«ÄÅ%„$<@#&‹/*Æó<|?$NE?Q±ÂuR ÚQx~½å€5 š­ÃA„”É$Ÿ¸ð$±/Éf‹¸n†8ÒT«UâX“J¹­ ¸nþ*„D)ðaSÜMDì$l&"Š–.ŒP&[$˜ t„)JÇHaPoLcÙ’l6ÅÔT•åËûééíçÆß^Ë}÷là+_ù*#;wqèò•üòç?çK_úéŒËsŸ{:+;œógQ.á˜&~E ¡5HI:•eù¡ PJ395ÅÎí;Ùµ{?ùñÐÓÛËÑkײlÙa(m’Ëšœyæs¹â'ÿoç×>œpÜ,.ºäƆwÐß?ÈÖGîÅN Ü\†öãœ|ÚZŽY»œñ=#ª›‰=9>ý±«©y—~}ú‘lÝöG &†§±™Ã¯~ykŽ™‡cd3]üöú›øÀ…Ÿãøã#}?´Žl֤јäæ[®gõ«èëîcxt ¥R7CÃc¸®ÁÜ9 ¸ö׿åíïø«Wg¹ð¢÷¢Ä$G¯]Ɇû¶qÔÚ#ñj_û÷o0¸h.O?î0´ö©L7èí™Å÷¿õ¾õ­›ÉdàË_û©ŒÉý÷ndõÊC‘(â D¡Eº‚?Þ¾\üyÎ>ç…¬=n){öŒãXEz»ûøÖ7¿Ã׿þ+Þ÷ðŒSNÄójàÅô÷-`j²N±ØËkÎy#ŽT|ø’7cZ>ÝÝLMxœñ¬sY¶|^ô66oÞH!/h/¨–˜RrSQLgG7ZX<øÐ# Ì`hh˜¯|æë4‚¾sù¥ØŽ`høaž¶öHî¹ÿV­|:÷Üý0ÿù³ßòó+ïç¬ç¯äŒ3N¤VÁu4ãzº;Ù°a˜µkW!Ä4Ž…5Ð>Rêf‚‰P‚ Š‘¦Rª5Aý©pa´ÜRÊDLq›¬ç`fñœ¬ÐRÍ«¦ë>Ô­‚‘4$ßÀj¤R)´†0Ž’{T œ”KÈž äS© .äÙÏ~6K—.mu'<z„aÈÎ];ypÓƒìÚµ‹|>ÏI'ÄâÅ‹Y°`ÅBñ/¦êΔBˆ–hé8©Tж¶6r¹CCCìÚÍØÞ1Æö޵Îé~xͤ“¡X,"¥dbb‚mÛ¶ÑßßßD¸$ÏíÉÉIn½õV®¹æ¤”,Z´ˆ5kÖ<έû÷.ƒEóÇÁ±¯o$iÒ8d1u tDîàfc¿d–HÖ™Öl]#ËAauŸ=¿Œ€tjŠ8ë#Œn°‹ûÙ ,"È,Iή⦧q-ÿàÉ9ÀF†<ôÐCÜ|óÍ\}õÕ”Ëe/^ÌñÇÏQGE__ßãö†3®Ð¿4çضM:¦³³Ã0غu+CCClÛ¶‘‘‘Ç ›û\Hhg*•¢T*áº.““ /~zzºº<óu›7o榛nbdd„¾¾>Ž8â–.]ú¤«Š˜Šš@J›¬Ì!ØWÜätíï†é-ˆÜBdq>8¹Üå. ‰±aÆìô”q�Ó;°©“Ïtc¸û É€Vho=¹•³Èµ bZ™'°&Lònþ´®<Xºßo+Ã%YŠ‘Æ«matøÊÓ6m݇Òe÷b>ÙÝPZGeÊ7P†ˆ2x¢ü¤Ùq¬~_û¸õ‘”FËy*¤Ýlá—’°¨  à C&?g‚‰Ã&N ¹Ž•„½ 1íäæ²L‡ ð}TÊE°ÐM§¥ÑJ‘S*q:J™´ýGQH£ÑHž/qœH§éÊ”MAÃLþR'·s Žã!¶•„Daˆ0b¢(h. ÓĶ’`*­ „HÄX%" íX UE 6ðà ×2,,[7O˲ˆU€m[Äq@>Ÿk~6´À†abY3©B©ÏkJe0¤C£áµZ•ЉÂä{#"RÒi†P9Ék«(ФÄQ¦‘´Ï,@�¤‘ˆB‰cÓn DIÛ±Ö`;¶ÈÅ1aèG 2 åZh¦i1*Ö¡DA¨ñ½:¦)1­fK¬Ð 5š8 ¸Ra$“p/;ƒZÅ*@Ä¥À¶ 4>éŒbõêÃh„Šÿø¿ÿ÷_t Ž›#ªqá{/åæ›Ëùo~-Ï~Öi˜†ddd”0ôñLû ù)×& #T¬™š*3:b™ÅbCÏañâAžqÂÉ<¼e3Û¶ïdÃý³äÐåôÍ™O6“áWWßA݃ù|äã¢ã?¨°í‘ÍØfiËåãù8^´——½êåDÁ–îÂ)ž÷ü×°k÷_ùú¼øe§±{çFÜT¯ž\÷×ÿö*Ž=q9 Î¥V‹Ø±u”w¾ós<íéËy×{þSå=t´wâyU¾qÙ×8ú¨#9äÐY “r;(—§( ¸v‘í[÷rá…_§oV–/}íÓ@„i¤èìHQjÛK¥6Ä®­uâXðÂ=‡j}”zݧ­0ŸuwßÃßÿe‚÷¼ï/›Ï7]Ãá‡ÎÇ0µê^£ˆßÈqïmøô§>Çó_ø,žÿ‚ÓfjºÊàœå¼ë­gÏèV>þÉWqê3Oàá‡7aÛ.^#bV/{«»9ÿ¼7²øn^ÿ†³i+u/ôðÀƇ¸à‚7qÖóŸÆ»Þóz‚F•LÖ¡25A`+T!Ža‘ÊæÙ;F©½›¹óÙ3<Êû/ü(kVÉE½‡z¥L—"ÄuÚ˜Ý7ÈØÀý¶pÝu÷sê3—rÉGÞÍÞ½[hëÌ£Tr¿û> íÞÁš5çqãïÏø„‡çU"À×M¡CI­R'V–kµø¨0³´N&„G³µ4ÉóPfâþ—)ÌäùÅÉóEš ´j ¸t¬Ðq„ï׆ub˜Ó°ZŽù(ðÂj†É)œx™“gcÕjõq©”’z½ÎíwÜN­V£V«1{ölÎ8ã [®“GOÆ3íòSSSìØ±Û¶)‹¤R©Ç0{fxÝŽãà5¼Ök·Û™¦I¡P ½½×uaýúõÌ™3§Uó<M›6qûí·³iÓ&/^ÌGÁÂ… I¥þQ„ÀÄÂÅÅ8È›Ü÷×7G; ÓÓóAzÍ`ŽƒÂêþ>Z;ÄÚ¡†‡Æ'sp³·ï6s"$eL¹5”QBÙÙý|ÍûIäfWûäÌ1Ñ8xr1ÓM²k×®VñpãÆ ´›ÄqÌøøøcÖétÓ4 ‚€±±1†††H§Ó”J%ÇiuºH)[s¾iš-^¹ÞO.©t:Ý ÎeçÎlݺ•¾¾¾VfÇää$üã¹óÎ;q]—•+W²|ùò&Vnÿ…¦.˜B’Òæ>Z'({ñ½=¨¨‘´g:“ ªü*â©Ùî¡Q*$¨ïDÚn~Âê`ßh}„7˜Çé8„tÛB°sOã"¸¸X 8XPÞK+3Qœ Vˆòô½Lú‡àæ»Ðº‹'—+¯!¬£j#Ô÷Þ‹g¦  Êš…ÖDZq]ç)wJÌLÆÅ´’Öòz#IwO‚¢’Dë ôÑ RnŠ0ÖH‘Lˆ–i"­$éZAàyI¨Œcbõz“=ªa³³ÄQ„”‰VJ‰ï{AŒc;¸n2ñFÂŒcŠ5¶íP¯×ÃB¡@:•¢Z­'ÎLiü©b…H)p¬Äëy¶k£ÑTëuRމkºøAâ¾u-+ NŠcâ0-qS¶m2Yž¢Ø–Ç÷}¦&'H§Ó!ho+1].ãy !p\ÓÔu”J¸Š•J™RɤÑð°m—l6MyºŠÖétÂÕ±]ƒòô4““f„í8ŽÉdÜ Þ¨û!¾ïcÚ6¶ea&Ò”§ËMÁ6ÂkT±L‘ˆ¦CÊMÄìXŘÂDÚ±)ñêu¢(á¢uŒÖ CjQ˜èHk,ÃÃ" #¤† ‰ã�©A"iaÖ /Š%©”‹RQ%Ýw)Cº˜¦EšXŽc[„>HC¢c“Xé¤Õ»Ze|jœtÖ¤³³“~{#sé(µ³sçVÎ;ÿÃtt(¾ýݯÒÞÖ†Š#&¦¦‰£�)-\WàØ)Òi›©©),˦½£FÝÇ÷} ÃÂq$aE‚±½“”riúŽ>œéJƒûØŒ–)6=<ÌÝ÷î¶àe/;™ùÝT*#…"_Hcê.®¾úZ¶lÙÉ¥_8îQ®˜XQŠWŸó~¶lçüןÉI'φ{ÖSìÐ<pÏ6Ö}<?øá·X¸¸‡¥‡õQ–¶ñÞw_ÄšUK¹à-/CÊ2côå{ùÂg¿Ìsž{K—Ígrj”|®JÕ§ØÑN½¦Ù²y˜½èbœT–üè"ÚÚ v³‡Ð\0;îø#¿¼êÞñ®óQzŒ ÉçÛˆµÅ'>þ)N:qçŸõL|à6z:³´·˜žš`ddù̵©"o8ïs\ð¶ã¤SW°wl”R®›Ð·yÕ+ßc6øÂ—?†–Ólß¹‰R[–À3Y¸êpn»þ÷¼ãŸâäSVpÞùgcX ´Vüì?®â¢‹~ÂG?ñ:Ž?i9*ž \¥^ó¸H Ôžg²R¦ÖðÑ2E&•gûöÝ\qÅϸýŽ{yó›ÎáÌgJ­2…’>vÊÂ1³ŒMLS¯*~uÕ5üüª-\ð–gòÖ·œÇÄÄnúû LŒÐÞ^"ŸÍs×]¨V¬\uÿþ•ï0oA?Ù\†òTz£†-Ý„µ*$±Ö8ÂD iØ TÓ¥ïcšIqb†¹*DÂr–Rµœ±ž)¨˜$¢GRTÅARäqmRVM2ÍÂŒD 1 3á+àáUÞpÌž=;áJÿÙbNA¥Rá`š&ù|žþþ~,X@Kx|Ì¢½|uß}÷qùå—S,Y¾|9=¿SÀ�� �IDAT==¸nâ¾÷}Ÿí;¶ó‡[þÀ–Í[8äCZA¯ƒå‰nÌfÚ»»»éééaïÞ½ÜvÛmtww399 ÀŽ;X¿~=;vì`Á‚¼ô¥/eÕªUOˆ­*ÐdÈ¢ û�r­ ›'Ñü“:ù½ÈS$3I?êM8Ç;ãÐ>8öá'4ÐÓ{ˆjÃÄÅB÷I⣙9pûñË›abfq»xðüC)ÅÈÈ¿üå/ùÍo~ÃÝwßM±Xd``€b±Èøø8SSSY$Em‡ÁÁAÚÛÛ[W^y%}}}¬X±‚ööö$ƒ£Ù¹qãFÖ­[ÇÔÔ+V¬ ¯¯ïqë‡G»aŸˆPüèß…H‚š;::˜5k[¶laãÆäóyR©étš©©)î¸ã6mÚD¥RᤓNâôÓOgΜ9Oò4¶ï;Z¢°N¹¼‹jcQDdzÞcÄÄLŠilQ$¯³Xì«p…�­&ÑÞ”MtW7”惙~Bs»‰II´!0‘z p€ GÿÛ7«„t ]š‡˜êÀ©I:Û&Ée«Hù$³nUŒ®ìFl‚ñ‘ÔƒäróÈgs-ÃÒSNX­7ªIˆ”X–Ùd˜BzÔj5,ÓÁNYA7BG1¨8À&¶í„:ŠI;.JCìkÃEb«�CH"?ÀkÔ@4bí¦ÑÂ%Œ<²¹R˜xž‡ã8¤Ó)”‚lV…B1 ϯ’ÍeÐÓ54Š(¨%‚1aá Ó²ˆTÌÔÄ^rÙ<NÆDËÏ(×j”Šm(aéÏ1¥4,bJk2iÇ2ˆÔ1qS̘Ü; RRÈ–@i„²¨•«X)“jµ”’B¡Ð iÒ„¡Ï䤇®“¦áÕH§Òxµ­l´’ìÚ9LGG;Ùl†ñ‰½”Ëå&/(àÚ)ˆ Ï' ’Ͼ-R­T)äóX¦D«ˆ0¬P¯OàZªÕÙlCÄÔje,Ûåc¯QF…´‘8y…D˜¦eC¨C"¢T„à¤]\ÛAëzµJ¥<M.›¥­£ƒé©éVÐÙLH–V´…ThxU";…a¸Ä‘²Ò47å’Îìܹž{Ö?ÌÞñu÷ÝÇyç½’­»wðÚs߯³O?†·\ðj"?¦25B¤Åb;QØ`çέ]#Š"FGÇñ=Ã4˜žªâûét C&‚×ÈÈ(]m³ÉºšQ¹ÿ&º‚O:ŠÛÖñ±Ï~rž}ú^þ’qôCdJ9F÷XfÌîÑ-\õëŸòªsÿl¾DeZâš|òÒoñû;àô3ÛyÏ{Ï"vᘓ# æÍ:”Ï~æË,^ÖEOo7;wïÁ¯e8ç%o§·¯—×½æl¤¨á¸a=䪟þ„ž¶<«WN¥R«z`xX9/L³s¸ÊÙ¯¼á„|ê³çP(ÚÔjãd3&~}š|®ñáˆë¯½…·¿ítuÙQ7ÛvŒÒ½ôp¾uÙ\só»-ÞýîW3´õvõYÛÚÐJaI—޶ÖÝu—}ý ¼þ‚çðÌÓNÁ ªerýmwñ•¯|‹Á%>ñ‰w¢©" ‹ò… BŠÅv®ùùò¡‹¿Å¿½h oxóÙ½síéN¾üåopùwoã}ï;‹g<ãp&¦v29YE²m\Ûeltè$&BZØV–{ïyK?ýY¦&m>uéÛXµfåÊ.B’\|RlÜ8JcºÎ]ywÜ2Ä%8ãÖ®¥6¶Gh_`‰WÔÞÑÁ¾ð.N9é9è†dÓý8ãY'¢¼¯VAˆ7E"ˆ5¸©4¦ébš ì]E Û6ñƒ aTAJ ËL‘NDAÃH®­#Ђ Ò $–á (¥›‹&Ùì ñ \7…ЂHYHm†i'CE %¡nEÑSÌ/¥ü›mnQ%]B „G:ã4ý[¯—J¥PJ±mÛ6ÆÇÇ1Mó1&¥¦arì±Ç²víZV­ZE:nñM÷¹�ñ7^Ó²,æÌ™ÃgœÁú{Ö344Ä 7ÜÀ·ß"éÔ0Lƒ¥Ë–²há"Ž8âzzzž�.*H|$†›@4éÿä׿JƒJC­ª‘<|ž¢jŒóppü/ïú=DcۛƲ–2òOÊÚvÚÈ!ê{PõÝèpêà¹9€F½^gûöíìÙ³‡©©)”Rlܸ‘Z­F.—{\ÁSkM>Ÿç…/|!G}4étº•|½uëVFGGû8‚0 )•Jœ|òÉœ|òÉ,Y²ä¯Î¡k¾þŸ¬þük„är9N8ᤔlÚ´‰M›6111Ñ2ÔT*J¥«W¯æØceþüùd³Ù§Ü¹ÖQUÞ¬—É–VàfæpÐÑø·f\MLDŒBïÃÊl7hÔöPõ§Pn8]`¦žpè 0-Ì|;Ä5¨MA* öþ 3<8À°K¤³ËÐå ꣛1ÜùÐvî“w DZMÔwÝF”ïÄî\Lªm6™tÓ4ö0ßþVz¦N+Á:ðÃ$…]š8Žã:DV„ç5°L›8 i4<BÛ!' TEЬã"¥A½Ö Ž)i È™Ob¥0L‰ç¨,Ë!Ž¡<9F6—Á¶-FÓJÞ•ŠCt:+û~ƒL6C£QÇ<D,H§,Ûeº<™ÄG˜IµÐ0MˆA ´ ««)ÌfÛ8äóE´ض‹Öš0Œ0µAµ\&l;ÙÈËf:¸cÙ 4åé*)7…e»Hâº.q'SÓ¶¦ˆ’„×8Ž”!žçc[´Tʪµ*Ù\šB1‹ãØd2i,+Á¸®C( Ž5®“Âu\¤auD,ˆu‚M0-AÊq ƒ˜”ãÒ¨Uñeâ(Ã$L)!M"‘¸áLÓB)°l³ÉK ã�©Tâ¤3Œ&ëUD!Z…˜–IÊu† .l:í DaD&.<I„X¦•0f…LöfÒ$Ÿ/ÐBLÓdÁ‚ù,?|„ï}ïž÷¼£8dÉbN:é¹÷ô¥¼é‚³©7Ê4Êu´2gýÝw“/°lM.kâ¦Â0$›-$×na˜6?ˆ™ž®†1“ìÞµ•Ëz˜?8C¤3m\uÕØ±¥Bß\—s_órŠy› â!¬"–•CJ“Ÿÿâ;yÌ\ŽzÚ*öŽLÒÛ}(?ùÑ5|÷{ÿÅ©§ÍásŸ{™¬&­m,» t†ïýðÛ<ýØUt÷vS® ³mËv>ýÉë0ÉG>ñfÚ;–•¡IóȆ[‰£Ç»)<¯ŒR^CÐÞ9À}÷qÞyÓÙirч.`å‡Pž¡Q›Æ æÌ™ÇæÍså•¿äÜ×¼šþþ Ädéí9”ï~û§|òÒŸPÈÃû/|)Å’$—j#ëjbB2Ù<[¶>ÀÕWÿ޳_þžsæóBR”9¾ô¥¯qíµ·òÊW¼ãŽŸKÍcj²Ò6ÙL;™L?ýé•|ãWó¦7¿g>ó$†‡Æ›æ£‡±ñ!>þ‰—päš%T;1͈¸.@d°Ýž`Ù‚@{Øn¶ãò­Ë/çß»‘•+ûùô§_Iÿ¬~vïÚJ*í HS«…Ü¿i wÝ»ÿüÙ­ÓßýÎ[Y<8—Û"ò#0$µzL¡­ƒ”ÛÆm·ÜÎ#ñ‰O>[n½ß³Y±tÕjÃHib;&° ¼*†i'ARq²g†À4%°I¥„åBl¢#qâØö¼:BÈVœ”‰kßóë-䊊! ˜V"¦l‰~Q"¥Ùd^‡ŒîerjŠ%Ë6»â‰E‚”’L&CGgQÑÞÞþ7¦„d³YzzzXtÈ"6mÚÄðÈ0ã-¤Œëºôôô°bÅ Ö¬YÃÚµkéîîNBú,‹R©DOOmmmÛx™¦I&“¡«« à¯n|f’;;;éëë£X,þÕã–RÒ××Ç™gžIGG7ß|3÷ÝwH)éííe媕<}íÓYµj-nì?&Œ…@¹)(mÑ N â ÐE„Q@ZÄ?kˆ›”Nƒ‘o¨‘´ÄðJJ•Qñ„nó<äò Nâ_r¨:ãØ±GÁžMÊj{R|I¶Û†Q\D<±Žz}:ª<7И ³,•Jôöö¢”brr’ééé¿8Ï)¥èèèà¸ãŽCA>ŸgΜ9,]º”7²cÇ&&&ð}¿… ˜5k‡~8GuG}ôcæäGÏëÕjõ1óºeYär9z{{“ÐÞ¿‚ß1M“l6Kww7†aËå3ç§R)Ž;î8²Ù,®ërçwrÏ=÷E™L†yóæqøá‡s '088H&“Ùïašûg Á›ÆŠ!ßyVvö¾c†ÿóÓ5hÔFðcÙ1ˆÌuí‹;9algòPö Rá}¿³ß–žF†LvF¦Š¿ý ÈlƒYÕñðd-‚*µ±L®Ç8ô2³–‘oëÆ¶ŸÚ…y3igMU' ?-gUâŽ~ÂóT±&"jµMDaŒÒªÙÚŸ8J•ÒhTÂ=Š8ŽÂ�#HxŸJƒ%FC¡P" ƒ„{¯cªÕ •JMLWW ¯†nЇ†‘°XMÓ Z­"¥À0’ &ß÷“ôí(bš¦™$î†"Ž%QS¯ù˜†BÊ$­Ñ÷}6?²•y´·wày tR©T’¶}ËÅó<r…,££ã8Ž‹ëºø^ˆF7e)+…×hø–•aÅqL¹\Á4-êõ:AÏ•h4j†Áüó1ͤE8 Cr¹lS€ _U ´)Z<¼(ŠQAŒ!œB…øž¬©à˜ÄQDljPÅ AJ´FJ;a›*iÙ4üFkÁ!q¬°,Ët2y(†aD‡iÛÆqRXf⸵L)L4* ÿ"DÓrI§òMì€l†÷Pšz½ŽÄX©,‹/äéÇBOO“SÞñö‹\á _ú;6o¢³£Ä–áž{6ÒÓÝÏ«V2gÞ¶my7e$­–RÉd° ›†çÑhxX¦M½î! ƒl¶H½æ3op›·o¢§»ƒtfë×mç·¿¹“LÎ<ã(-è¦2=+³T¦#L3Ã/~q%ºŸOöBêõ=mËùýïîå½ïý}sK\üáóikËQoL11>M©0‹ûî{ˆ^Vµâ,ÂäÒ¿—Ñ‘2ŸÿÂ̰ñýI¢ À·mbãÆGxÎYÏÆµòìÙC¦à²cd„Ùí‹Ù±¹Æ _p³fÅ|ô’wrÔšåŒí$㦱 »Ñ`ïèWüäGœvú™ôÏêflb;Åb?*.qýïï㋟ÿO"'4ŸÃW ­*B¤˜Op³ÚùõÕ×ò£þŒ×½ö\–,YÆî=»h+µsY.ûæ'H¥\œT¡áÍD‘IJÒ|æSßá—¿ºƒK/}+ËW,ãŽ[ÿÈõ7^˯µ…cŽéâ#—¼Û ±ï#¥ëä¨LT…Ä6}³ "x`Ón>xá©{U^wþÓ8î¸cÈL&§FèéëãáMÛ©Uc®¼â&®½þ^Ž?n—~ìò™˜]»ïÇr…RCÃS‹ýÔªAóîwžW¿æY,?l9o}ÃôÏê »·éò]ÝY*å ¶nÝBg{/¹|F-ÁŒ 0¥…a›¦Ãžáa”ÊภµƒŠá!&" y£UŒIÚÖÍ„SMâB”Â�£M˜‘„âi°m!“{Åa(hòŠ„ØÏù Oâ°m›5«×0{öl¼†G>Ÿ§P(ü·blww7/øÿ^Àtyšz­ŽçyÍ`@Ñ=ÛÛÛéì줳³Ó4‘R2wî\žóœçpôÑGcYmmmyíöövŽ>úhfÍš…çy,X°à/C¡P`ÕªUôöö299ɬY³hkkò¬¿ˆ<p]—Y³fqâ‰'²dÉ&&&ð<ï1m„ÝÝÝ´··ÿÅ×øûÅUÅ, âêð}TGnm‘î\E®w-†SøgV À {¼Å€;Àu4S©ì¢6q' ÝK¦ãHróž‡8Øwý¯¦¨’8ß'A{v ·í¬ôì'‡#ì¦míˆÑ4:£(!@JúûûyÉK^Âé§ŸN­Vk9Tÿš;Tkëº,Y²¤Å²Ÿ;w.gu'žx"•Jß÷[ˆ¡ѳ½½®®®Ç:‹Å"kÖ¬¡¯¯J¥Âüùó[ÿÖÛÛËñÇϼyó0 ƒ… þÅcêèèà˜cŽaöìÙø¾Ïœ9sÈf³­ïc¥R‰•+WÒÛÛË©§žÚz¯–eµ@½½½-÷íSqhÃFg{ÀvKéÞƒnÆ'CôQмŽIçÚ½ó°²ûæ<DÀ´u@5×™OEüí?ë0D~"ƒb/bz;˜p²ûy~ÖÔ`j•êãJ0жš\q)–}êßcZ'‰ô3™RŠB¡€Ö)%q·[ÚÛÛñý  7ˆBE½^Dz,LÓ¦^¯5]ž‰ø(„Àó4ªÉ%´mƒd21CEŒnÈ3™ BÆhaÙ­i‰ƒ¶´©Çqèä8vr|ÂÀr]”Љã á|ФýÛ3­Ž’0P¤RyÌŒEµZÅrS‰C3ˆˆ£äukµ*¶máû>…L ϸ<ÁóR©,¦Y! #‚ hŠ®6"öðê–c6ܨ)DÖ‰cM±Xdtd/*ÇIx±®›¦V«5'›0TM×i¦A¥Aèi™HaEšFc©lÓ0hx L-0ma$ÎѺà¦òõz\.›ˆ¦JcK0¤ FPfšqSPWJ7Ãx ” QQ" ë&„ZÅŠºE -4±Ÿ ‚8"ŠbLÃF6*Òx~„ëfiøA$ȸ6†RÆø‘ƲLR)ò°Ü õz™õë×óÈ#Ãüè‡!ðêH øÃØpÏ<ÿ¹ÿÆì%KÙõðà íÞ…’½ceÊÓ妫y< ¬)•0 7iK°“çz&›Ç°=,[a¸óPA¹ü›?fd(`ÉayÎ{íYXN°H9¤²6=òÿõ«yÏûÏÆvMÂFЉQ“K?öM¢(â’KNaÞ‚N&§ÆÈ¦óØøÀ#ìÚÈ‹^üvm§­Ãäû—ÝÄ×mãå¯>štÞ§Rµ *Óuî½g§žrÕj‘ AFÔS,[z#Ão<ÿ³{¼ýí¯`ùÒTÊè(AXx^l.Ãg?÷9-bÙ²…Ä*¤·o6~ÃÅIwsù·?ÌØÞ:}s ¼ù-/ «×Eq]ÑÞ>Ã2¹âŠÿË 7\Ïk_{kÖ¬a||š;vñú׿‡5«åÍœK._@ë˜ÚF{g†L³uó>üá÷cH›ýèSÌd×ÎÜõÇ Üð»a>ôÁÿñ'ŠÖ¡'(¦ç2<:D:g22>Dÿ¬^¤”4ª&?2ÍÕWßÌ÷¯ø5«V÷ñº×½Š¹sg3>1ÂätŽRw­ÛÈðîqªÓ’o^ö¡àÒžÇiÏ\‹ŠÆ˜šÜM:!ˆ¨{“)˜˜ªÓÕ=‹o\v›7×8÷µç°uËF®úÅ-œwþé¤3.•º&Ž“âL­Võ¦1¥‰’Q† 3’ÄªÑ Aˆ¢*–¡paXè8qøk¥ñý„szQ“£l†!J)ÒétÓïµ\íJ¥šÜd:yî¦ryººÚéîî Z›À±Ý‰È!Ó4éë룧§§%Bþw.!’Ë!‡Ò*þý¥Ö<Ù ù›)¥”‹Eòù|K0ýsÇj*•¢¿¿Ÿžž´ÖõXÇ¡§§‡®®®fX |LxÖ_Ú\º®Ûz¯ž|üècÿ‚›DÞØ:´ÙÒæ2L#õÏ·j×Í:Hƒ¤è§Ÿ:gBˆZ;Ôü]ÄSbt6éŽ#0ÝÒÁÝÓ¿ÊÐTüB¦n #Õƒ°ž$WŒüÿÙ;ïpËÊòìÿÞ²Ú®§Ï™>Ãt`è EAE£±AŒ±‚%FcL$–ÄD£ß{‹Å’ X(ƒÒ{˜a€f˜>gÊ9gŸ]VßïµÏ ù¢4†aÞë:×8»¬½ÖÚïó<÷s?÷í×N¬AÄ¢ Óþ³§ ùLÝQºŒÓåË—?.)žÉ\`2W«U-Zô[cþÃcüäÏÿÀå}ŸéÓ§344ô¿âz¥R™b¼N¤¿m•J¥©×™|‡ç“�o?½½½ÿë³N>ö‘ò„ý÷qÊø=‹±&A”‡‹ñóqãQÓ‰';…PÊG–fâ}P›‡P}OÂu°˜u 1 À=pŸÚ ëV 4 ¥$Y‡ÎèÍ¥:Ê[ü”†1–$ê=H¾õ&džR:ŒružÛxT°º`V®×“#JX[lø“îö`étÂÂȪT¢8Sàgš¦h-I’‚ÙèºÕ)m!è²2®«‰’´«AZ@¶ÉsƒïXkÐŽÂqJdYб9yž’e¶ VZ’4!Ï THÓ a,Z+@uÁàÂ}[*EžQŒâ¢I‹£åƒÕäYÁþôýË–Lš¦t:\OƒQ0\Ó4'Šb&&š8ŽC–e´Z-ò¼8V­$B8(%»£üe”Ò´ZÅ诒Û·ï ¿¿0o6[c¨V+Ź˒‚‰‹,L±”Âq$R‚–“¹,B"…@:…‘Ž£½ÂÜFº¾Cà#¢IÞ¶½ _–Šr¹Jb2CŽ@tG3Šó•¤)RNäädÙ¤¤îÞúae®$…D‚@v¯™‹° R*ÇíÊ�$x^©È!Ë Q§ƒ11µ¾*­°M–&hé13g ríµ;yÇ;N¤^+3¶w—_v)67¼â•¯¦\®²cÃÖ=ø�N /ü JT«}ÄqŒ1†45´Z-šÍ&aâ{Á¢í°Å¶72gÎ,†pýÕ¸èâq8óŒç°lé#[ב%0ÒhãV%—]~9g¾ôd9t9»FÌš6ŸOñGÜtû>õ//ç_y;Gö …Âs+lß¼ƒëo¸š×½é ìÙŠR%~yÉ |êSßᬳOå}ï\üE͇8dÉáÜxÃUœøÜç084ƒ]{¶¥!Íν=CìÝcyû[>Ê–Í çç¯8äÐyŒíÄwê•*qQJ|ösŸcþÜù¼åœ·°yË&¤V$IGú|ìcçñë«×±xio÷ÌšãcÌ(a'£Þ3ÈŽÍ{¸âŠËID“þÍß±xÑFGǹæºk¸råµ|ìãïå9Ï;‰‰±=ìÚ³Æø8C3f3<<“ùÔ׸햛8û¬×ñGgž†«=®¿þ¾þµo0{æ~qÉ'ñ|Ç Ûë84;»˜5gÖ­§VŸFØvq=Ÿ‹.¹ŒŸüäJ꽟øä[8áøÃ±V²{dŒJ0‹f³CcL³mó^¾ûÝ‹i4<yë¹g1m¨<ÃäÊG§ÝÄq}vìÜKµ>‹Àëcëö]|÷»?擟<‡ÞÞ®¸ü?)•áE/>+ S¼4 )•jÔjýh©H¢6AÕCˆ®.ª5ÝQý|ê»kŒèæ¥ ö¼5¢�GÝïMÁäŸtªM’dÊèMéÂ0®0©#UUQ!ݽY‘¥! ÐêÙ“ˆþ6“ªÇRt= Òÿ¿XûmŸ:íuËãÏ{?™àÈn¢þ߯>ût®(5AßÁH!ÉÇV‘¶×3±÷¬ãS©,B)ßúèXhZ0¢Ëxæg¥t‚ÙПÑê<@»5ŠÝ~ )O;åTÉÏŠJ?‡æ¶ÕŠ*øý ŸÎÚQUc0í]0± êó»Åýµ¯ƒ«O\3ü÷GŠ×5.?ÖÇý6`÷Ù´´®P©,,R�U=[+êí"ƒxáU]ET–�yÁf|ÒôÒ3¬a²"8ÀH~êfuPGuîÀŒß�ý (Õæ"Ué)9„$M˜˜#Ú¾¹åzʵYôÏ:Ri!žÚü:˲îx=S£“ÀÔ¤þM øXJúqœL‹)ì®Æh«Õ� PV ¢á0Öàû~`´(˜F ´Æ’‘$IR0eµ£ñ}Ÿ$IºNØß/MÉ´Z-Œ5"@)IEt:êõ¢û’g–4Íq´Æ÷Ëä™eb¢ëºä™E{.¾¯ ÝXÇ)̱tÑiLÓ”$I)$®ë2ÎÔñ§iJvHMF©äN1| PZe]p9㨣ŽFJÉèèèÔãÂ0$79Rv»ªÖ`LN’„$‰šJ\Ç%K-q¡¤‡VYf1¦¸nyžw¥ Ð7M ®ëÓn‡¤i‚ç¹4Æ›8ÚÃdi€†<3ä™ÅÊŒ8Nð<¯SOsÒ,&Ï-nW{yž!…Äq\²$NWj@âh1)ijº�“‹Ö’‘Ý£¥€j©ŠÉLwŒÇCàû¸Z3>1AoeÎÌéxŽæ%/9…ááiÜ|óoÝ;Î{ÞýnvïåòËW’dË;”yÍ¥\ªP©ô"„ddd„5÷ÞǪU«'Ë2FGlj¢ˆ Xºt •šÃi/>T¿<̾òt¨Uà-o>‹]Û Ž”ü9hÝË}×që×óŸø;Fv¶qÕl®þÍjþõ_¿ÅËÎ\ÆkÎ>m[71mp.c£!í–àW—]ÂQ+–3¾g„þiýl\¿—øÈ9vÅB=l.wÜ~+¯{ÝŸpÇ­wòÉO|ž7Ÿó*ª=‚‰Ö(Bº :ý�� �IDAT”k(ƒïðo;Õ÷4ùçO½‘£:˜Fsý½uvl¡Ól1}Ú4.¾øb\ÇãØcŽcÓÆ‡P®$ðj”J3ùéOÉw¿ Ó†=>û¹¿ã°Ã—±k×zÒDP¯ sëMwñÃüŒ… ðŽ÷¼•z­Î-·ÜÂ7¾ñ-†ø×/|†Ý#;Ø´a=åJ€ç¹,\´€»W¯ç=ïý{fϘÉG>z3¦ÏÀbøÎùßäW—^ÊKÏ|!o;÷MìÙ»ƒFs7ÒJJ¥*IÞ¡§×eóÖ9ö¸ã¹ïÞMüò×ò¥¯üß×¼ñM/æçœÍöÝ÷3²k%¿8rÈ¢œÛ'øü¾ÊºûÇyÞó†ùâ—ÿžáé}Ä&퉇ÈÒ¾§‰â­ëxn…%K–¥{öƼáÍÉÉ/8…SO=•ûÖÞË…®ä¸fqÄá‡ÐšØC»3\WaLNf •jÀDg GûXÓ5QRÈÂÐÍÓ¡±¹ƒ@!¬!Ë-¸U0ʃ‚:É ˜d"$IB»Ý¦TòJÞT¢]4°r¢(ê² JM‹)´]…DëšTÖU5P!FÒÂ'eŸ÷äí÷#û!Ÿ{2­ÑUD»o¡i L”Êóptuß9^k ‹ ¡@ຫûÁýã85De!=3O§³õF’‘ûiÚk�Ai`9Úïßïù© s` xRn±•ÖÄB ºRÇ>í÷·ºãÔ‰Lï¤dg!ÙÇš.ÖõlÎ@„ÆqjNÄc\IÙ–PV!ED¡‘¯ÿ=M:øö$¯œŒ{Ñn /èEºåûïÓ‘ó¨2T–“%ëÉ£ÕÈÖ½ØêB‚ÒÜî”×(7°–0ŒhwZt½Äñ6´ÙJ¥g9ՙǂWÖÜZkãh\×›býU«Õ‘X)¤’äYNšd¸®Ožãÿ«§ºuišv«]VVB¥R# ;LúÛu:×% c Šz½)£{G‘U¯;Ç1I’Ç1®ëá:¹Íˆ¢¥<Ï£Ý ±¦ÐÑ)4u,AP)\îQ´Ú”tÑÊâyÒwº,Ìœ°Ö€(¥§FR:NWËUaŒ ”ñ<cÀsKÔjÅ;ïÓjµð|—N'¤R«E!Q4†ãïU)×§ÄØǧTª†áT‡4Ë3òÜ UqžçQ*äy6u~Ó<§R©‘¦†f³ƒv ‡ìv;¢Z©eN”D+‰_ @XöìØËÈ® 3þ|¢(Â+i¿L«âúŽ£iµ'‚ •J™‰‰žçQ.—‰â¾¾>q¬5ÄqB)¨F)¹eêG(PRg ,A’¤ø~@ÍUkˆâ A¿$iLìÅõdP�ôÓ¦õóÀëY²¤ÎòCáž{îbÍ=«yÕ«^ŦM[¹ôW+Y¼ø`Ž>æâ$¤\-%1?ÿù¯¸þúëyè¡MT*ƒÌ™3ı+ŽcxÚ4*•*`ñ<‡=Ä}¬âÿá¼þÉ ×íä²ß¬!P‚w¾ó5ô×ãÍ6ƒ½}d‘F%¾öÍ/óš³^ÊÀ@ÍqŸÖX…}äãÌ™_åƒç½’r-e÷.Áöm»)ƒÜ|Ãâ ,Z<‹(‘˜Üç#þÃÃüè´S8êØ…¬ßt7w®ê°yÓ^–,>×õ(×\ò,FYÔ5f̘Å×¾øcn¸aõþWrök_F’ ¥$‰Cæ-˜Os¬ÁÕW_ͽ÷®åô3Ng&#Î"ª•î¹gûØ÷pøë¾ŒiÃÖ¬^ÅÂ…Ñ÷øú¿}“Õ«îåÏþô5¼è´SY}ïj¾û›ï³aÃF^ðürÆé/a|ïŽv Ó ÍfƒoýûOX¹r¯>ë,^xê©8JrñŲrå5,˜×ϧÿïß³téAìÚµ/”¬¡±7FjE½§—8JÒã[ßü>ßúÆ/ñü^Þöö—rê©/Âó}¶oÝMš¦g[6näö[àÖ›ï`¢1ʲ¥‹ø«÷¿žc=ŒÌ´ ;»ˆ:ã¨<Åõ|ü D–;¤‰ÅQ=4'\¢,áÏßõA?âpþñSo⪕ױwÏ(ëÖoãßø0V¦›âúJ(¬1hUtˆÇÇÇQ^Á"ÍrC¹Tȇ´Z ²«­•¡øYh ÛÌ#ŽÓ®”)ņÊå€Z­B…E?ZŠ©ä#Œ:T«UÒ4-ö4“¡ÅØØ%ÏÁØŒVÒ·䦓¸v»ÍÄÄyžȉ „àûSFEÓëñ,Kh1$AcŸ¹ŽtJT¼ áú؇.'Úu(=(pj˺àå¾ðI F41ºªOGxÕýXí&Œ*`°çDZ!L´ÚD±¦0±,O;©¼§Gkó·Ö9‚Iw>°~ÿ»Û¤´[h´Ö•ÂPV>ÍçV„®“{ý´EŽÉ÷â‘ð߇cELLLÐétž•7w)¥(—ËA05ýô¾JZQO3@¦„¢¦ûAfȼQH'ˆú> VæäLÐÄ÷*8µ2Ò= ðô$iÔg¢ÒÙÈVas=wâè*:˜ùÜ× qvva’Íhogh�90*3@9ÏžK E1®¬$K3”Ôx^@š¦´š­©VjhÇ%Š"Çëj¯¶»`j©&ÍÈRƒãlFc ®£1Òb±Xk ¦fž#ÂxI`²`ccÈ,Ë s)·„íŽà «ürÁŠ’Âm^+*• y^Œñ‡a„@.åR­}\×%‰m—õZlXëU µšzýB31Ãq”uðÜ�)e¡•˜GÓ cšIat¥B Ò4/˜eVÇ…qRoO?ÖÒ4# #Ò4GëžWœ;)®ãÒl5q´¦ÞS"ËŠ/M#’$-䄦Ӊi·C\ÇÃ÷¢(íê×õ\´*ÀZÇÑ´Û-굪µ ®ë o¥Bs¢ÐÀ•Bî䯂ÅuÏr</Àó|ŒÉð=;Q÷ï‚<Ÿ”c0¸®‡ãxÈ<ÇšbdAuͱ pDBR.Wi¶$qF½\CkA«9N½ÖƒrR)jµqsÇíw°dñ�CÓgð“›[ÂvÄ¥—^ÁóN>•9s"I2zúøÙÅ?â__IàÆ¼åÍgóڳϦ¿¿pòÖŽ.Ì¿òŒN'¤V«2cÆt?l1'>÷dÖ­kòõ¯ýz]R/{¼þgbL“²WYÍÏ/ÿ9© yþ©'S«õTò¡¿ø$7Þ³‘|ûMqÌc#xºF9è᪫n -Ï]t,¹gúÌÞý¶O³fÍ~þ‹Ï tÎêµ×rô±K8ÿü³áÞ|öÓŸàλo¦Ù £AÐCà/⢠¯å£ùï{ß¼ö /¥1±‹Þ¾€û×­aÑÒÃIâ˜[o»…›·pòóŸÏÒƒ!3Tjô•ËìØ1Î;ßùA6ïŠyï»NáÝùV^ù+Â0dtwƒÏýë8è ¹|ñK_btl+ßüö¿±aãf–-=”w½çe`{㸎Ǣ¥‹yhÃ:n¼é:~ýë• MãóŸÿ4óæ-墋/äW¿¼!á5¯>“Ó_ü\¤Lxhóz¬MÊ5”'˜9wˆÑ½!÷®ÝÌüàÖ®ÝÈÁ‡Îç¯?t.‹ÏÆõ+(Ði\?B³5Î5W]É7n!(Gœ}ö 8õ…Ï¡·¿F½^f÷È,ßq <‰ s:BÔ𽪵iÜ{ÿÞþççqÔŠ%üŸÿû¶ïÚA¥ZásŸý7Ž?îH;æHöŒlÆ÷=<Õ5`Ë‹„Rˆ ¥´x~ ÙÝ›@e,)J%Åè—°diH–<OS¯÷bººÔ:/̨Tà“v ‰J¥Œö}œ,C;E÷¹Ðâ„RPÆ‹ã¸Sz[Ž£éïïÃæIL»û‡>MžçŒqÛm·±råJZ­Öc*°~›fêãyÎyÇû¼ÇZ(>žÏ2ùØÅ‹sÄGp衇288ø ,‰rÌ3«t¡† Ž-âÌÈ-˜‘Û0¦ T 2\$”OsÑaÈéÐ"¡IM.FË ìWšR)\‚že`,Ím×¶wÐÜ~-&© Ÿ€r«û@ñg¶d‚}�\}Rª§íÀÆ#èÊA8ûŠfštÀL{”|bv0=p­öQP5I6nÜÈ•W^ɪU«óÿ‰—ûR ¢ù@¹\æè£fùòå,X° hhü=ÑXŸ0$ìwt8¥µ>HÆ¡=yJµ}öcZ,¹Í1ÂìWÍäg"(tðË‹ðe“v¸Ó¸S;þ€À*XüÀ’G#tÆnC¤;©õ­À¯,zVªÐט̲,ëŽQáy®ãbòÂ¥1Ë‹q°¸®×eUnË®ë”<‚À# #â8"Ë3¬Í‘J‚0䯒& ÕZ!FJ”(:UY!KC¤,tOAv ÝV)%Z»]ýÔ!<OÅÅø’†2¾Äi,ÊG% G[0X›Ç1ˆÂ K事O:²“`©º(@MNžçXki6›]C¬ÿi.’ežçuuf J)ÆZë.€ët%4ZkZ­&Æ$…Á¨™g…V£”Fk‹”J9´Û!ÆŽö ‚¾ï‘Ä Ææ(%qR­%RI¬µ”Ê%”.˜ua"•"ËSŒ45híb)LY Õe Zç¤i6Å^õ¼Bb KsTIáºÚ)\¡¤”)‰ã˜,+ͺˢʥ±g7®ïL±î¤´8ZvYº‚¸ãê2Q'bÍÝ»9íÅG€”ý­±=üú××rüqÏeÙÒCÙ¶c„Y³gó¡¿;ëoº?yÍ ¼êe¯aÞܹlÛ±,ˈ£NÖÛ–e‰¢i"Éó˜Ã—¦ÅæÍ?¤NñRªõ˜°³_{Ä¡ƒ[ªðŸ^À^ÿGX+T¸ë¦»øÖù?ã­¯}>/{ùiD=`=òLñÐÆ­ŒqÆ/c÷îQ\®»ö2¾ó»øÂçÞÃî½[XrÈA,X4—«®º–Zu—¼t)¿ºôB^ræ«Ø²ý~¤g˜Vã—¿ü5o=÷‹<ç¹ËyïÞÂΑÉ;–0v蟉29þìBFwïaÑ¢ÅrèÁå2adiN¤HGó÷ý4÷Ü׿¥§-ⳟû?´š» ¼*_ÿê·ÉSxß{ßÏ‘GÆWþ‚ÿúÏóY°ð Î}ëÛ˜5sëÖm`öìéAÀØè8çû|.ºèBæÎ›Åyç}ŒiÓ†¸óö5üõ_¿ ®ãõo|¯9ëlß¶‰‘‘C­gWC³Óbb<cdÇzþãûqë-#sä,>þç1sæ0QÜ Ôe§ÿæê˸øâKÙ°®MØVtÇÛßv/9ódü’ellN‹F#ÅwJô÷Ncb¼M;ˈ¢ˆ$ôõ ÒWŸE³sÃÍ·qök?ÎK^ºŒýí;¥ÑgÍ=«Y}OʉÏ5˜¸C’E¨°¡d×HÊ"Ea8d<Eáh]ÒÒ,C;­œn#(,ž/ƨîo;Õ|É2CÒ,Ãqò<GSˆÒÛâ'Ë2”Ò…!`–’“cL±w¯—ì7à€1†(ŠØ²e 7Þx#£££Xd<\n&˲¢––EƒHJù;/„…éa—[Äñ; /kmw/̦$&ßãÑž7Ù¼{,Ç4ù“.ÈZë)0ý‘L<Úí6½½½ÌŸ?Ÿß³yfzà¢+˨ø=˜¨E¸é& kHe-W JO;¸j°„D„t(ã£ð÷K@Ï)MC{=X“0±y%Ñèjòt]›'ç¢uùi�Éš¨l‚’SFé�q€Ãø{NØÒQdÚFŠ:ކ§[7MÐ5Pu·![!O8Rï£Àêäßš5k¸êª«qòb2NÆ×ÉØøHñr2æOÆ×É<aRšé‘Þgò9“yÂïzýÉcz<1üá9ÌäDè$¨üH1_AOO¥R‰iÓ¦1gΜ?ð×Iâ¸e™E SPzý2eR4ÎþÖ<“ʽä¦M>¾I Ø{Úõ˜bµ̧âû¤ázÒÖÒpYu JØÚ“¹Šý6F©Wn'ŽW£Œ¢ÒsªtгîìkÏóH’cL×8©(SÌÒnç!Ï ý¿BÏÒ4í‚znÞEm”*ܬ“$Áu]\×%Mc„,Ø¡i*‹qñ.˜`»£øŽã …E*Ažåä¹%Ï-­V%5Žv‘BuÿV°8Ó4™:®0ŒÐZS*•¢øÿI’’ç€U]­Žâ6ƺSFTiš¡µ˜¯È3‹QÈiL¡ëZŒÞ·q]=Õ¿+‚µ"3ٔɓ1 Q˜à8¾ï¬N)©T*Ð5zʲ ×ñIÒ¥4år•$‰‰ã”$‰»I†Ei×ñHsC©\eîü*Ö ¬4Ûm¬,XGÆf$YH”´rPÒ%£pLâœÔdø¾O»ÓÁu=”rHóå@NØjOÝ a;šbão0mÚJ9¡ðýÇóH³Œ4.LÌ<ÏÇq¬X)ˆ³Œf§Mžç8ŽF*AàûÒRŽ‚(i£´&Ër‚²FÑÛ«h·:`,R(vŽìbù!‡°bÅñÄ©$o|ÇYÿЃ|ùkæ°Cfbï({v@žQ-Ø,AIKwPZS«Ô ÍÌ4¡âû´[›7ì¢Óiãú‚ç:«v‘$”õ|rYçö;×`TÈQ+ŽÀ=»Þõî¿bxšËÛÞù2¬°dQ@Ù¯ÐÈwqݵWqÚ‹OGjC©\fǶQ>ü7ðÚ×-áÍo}5W\y W^õSNyá ¸ÿ‡»èäøãfݽ·sÿýkY°h);¶·xÿ¾Â 'Í峟{7#{6R©¹82 Ma˜pþùÿÉðp/?„+ŽZaH»•Ú_øÂ÷¸àÂû9ü¨>>ù™pã·ò‹K~ÁÍ7^ÏA-æ´3ŽgÛ¶‡øÎù_çðÃåo?ü âûvÄÀÀ�«ïYÃõ×ßЕápù§Oü 3f³råÜvÛ­¬¾çnN>ù$>ðþ·1{îlÖ®]M¹\aph&i’±sÇ^î]s?«VßÍØÞ â¶ÏsŸsï}ß¡¸®e|l/7Üp5×\µ–=»›ŒnÁJ—ƒ]Ä«^9“;ÇQ('Cˆ¨Ó"ðœÂøA½Z)“˜Zß0ƒ(J•nYußþÖO¸ëž‡øè'^ÎYg¿†í;¶ØÅüÇ/˜5ÓEIM’Æø~×�N)´r±BÈp´Qš`rPÒÁuJ$IJåÔ=Ç‘$IDg8ZáùÆXÒ$EJA”Š1QTìOƒƒƒäyFÇ(å"º:Ô‚â»h­AMž§¤iŽ×ç:aD ®v1ûÉļã8 qê©§2oÞ<’$y”d¿�#'&&¦¤*• õz×uga"¥¤Óé011”’¾¾¾ßY`M>Q1::Ú¼ýýýEì ¦I®1†Z­FS×o{|’$4 Z­B“·V«Q«Õ…‚¹Ò××GOOϳt„ÒAÈ!ªý/Ç §ÑÞûk¢?¤…<ê³@<½ º¢¸Û/94ÿósJ‡êŒ“PRÓXÿ}Âñ;ݳˆš4Ôª?éÉûãÌô¡ÙBÆ!n}ÂD¨.ñ¿ß 1  ”€¹ÝŸ§™"¨ ½ ˆ/Î&0é�b_ÄŠ¤Ä÷}–-[ƹçžËK^ò’Gœº˜Œ¹I’0::ZLÜIIOOårù·ÆK!ív›F£AÇxžG½^§\.?"°šeDQ‘ ÿ®&ìÃAØÑÑQ¢(š’“{¤>™Ã´ÛmZ­•J…jµú˜€U¥õzááa<Ïûƒ^#¥\z{":£¨æ6Hs¨Í*€¾}j …f‚>ªª¨ýj:D}DŒÐø¢M»·l¸û´Zꯂ_@Òzˆññ5d^=µå]Ó×'ou:!»ÉÍFL{#6‚9ؾPxÖ{=¹IOyžaE·k'„Ä÷ò.KµèÌi\×!7YaDe»fJžƒŠ(Ši¶Æ)UËÔjµ‰’,âð\„!IãBë­‹¤{ž*@R)»Ì/ H”’@N–¥$iŒTß÷ Ÿ(Ji6[xnÐýÑe¢ÆqŒ%&Ë iãyZK²,ëšE¿ÈÈmŽn—±”uËÄD!@é.£Kj2Â0dhxõzN;"IbòÜçEwÖó||ß'Ï-ÖX”rð¥ƒ5 • Ž Í²,ŸÒ|µFtK4UŒA ÈÒUééé!Iã®á^N*ÁäBk²,Áu\Ò4™bÓº®ƒïù€$M³.3¹8°Ö26Ö §§í8X 0kÖì®yXÜ5¤Rä]FsÇH))•ƒ®ñÖ$,#Ï‹.lP hvÆ£&a%žF….­ë8„aF؉I"͜ٳhŒ7@*|? Õl1gÎ<:íˆN˜ñþ/Œ6vñ•¯~„Þ:Q”`ó‚Í\ò=JGc,%MBÒ($W’rÉŘŒJ¹Š”‚4ó™QÊRïw9áäeäv”8n ‰Wíãç—]ÉK_qÃÓ§±wGÆE?¹ŒÝ{Züñ«fÉ¡}lߺ“iýóIc‡U«V28ÐüyÃlÙ±“ᡃùòg/A¢ùÛ}Œ«¯½”ù‹ú˜1oßþ÷ÿbáÂ%œqúìܲšC–/¦Õ6lÙ2ŠcÏàï;AÉð·}#sôÐ7äiD5ð¼i\pÁÔëujõ^RÓ ;¸^™0ÉI˯¯ºŽo}ëúúà o:•ïýà[ŒíÎÈcŸ—ùz®ºæç|÷;ßæ9'ΫÏz Gy<½³iµ›lÞr7Ýt3›6oaÆôY³b³gÍ¥^¯sã7pÞß„4‹yå+_Áëÿì5¬ºë&6>t/¥²dÞÜÙL4#Vݹ–Ûn]Ū»ïg``˜Ã8‘'Î¤ÙØÍž=»ùÞ÷.âšknad$¡R¶,YT爣–²`Á 9x!sçÏFäiaL±Q{ŽÇPß´Œí¡âU‘¹!I› –¨÷ÏÂk”ùõo.ã›ßþ!k×mçO_{ ÿô™RªxlÛº)Ú­˜ï~ç{œõêWsÇko˜©Dº·§—$²X©°F`¬EŠBwÒsòL …‡ÉÕ•Q€é2Ò‹&SÞnãºÅx–v\„°Xc�‹£=„,dD¤,ŠÐb<OÑÚÅÑŠ0 ±X´vº¬Ç®¼‡vˆ¢° ­Z¿žbÒÁeúôéT«Õß BþDÁZÂ0¤Ý.$h|ß§\.w¯ƒ}DsRÛz²{¤•$ ­VkŠUR©’*˜âw ¦I îG{ SÃB¾&Š¢bëê¦>X:©Ï]*•~/`õ™«Ÿ&@xÈêLÜi‡‘›Ä»h\o D¥´ÚÇ?…ÀÇGRF#ètÁªg«RH¤.á÷.&Ÿy<b Þu mcJ¥IæêS_p›çMò¬I æ Uí™un÷ÁeÒ&Y{'Æp@õ€Ý ¢¨ èÞâßñbb+8=à÷p¦Þc­VcÑ¢EÌš5ë1ű,ËhµZ¤iŠ”’r¹Œçy¿õ¹B¢(¢Ýn“¦)®ëR*•ð}ÿQ'[:išR­VU¢ ÏsZ­I’ „xL1ÜZKÇ…ç…çÁã:o¾ï?fé„'~}Ž"‘Q¶•ùøÌÜç`3ksâhi¼ B{ƒ…$ÈþóMIj3²}40䣢=TK8~?RêÝÓ½¤ƒð|JµC06ñÎdyÊKá÷V1Äq\L€S TºŽ$}�š[ ô,ÊÕ#‘nÏ>Øy €Õb#-LT&Gß“$Ai…ïùX&GíÔè«ì‚ÖBnJI|¿ŠµÐj6ÉSð+^ל)#Ž""Ç!M3|?@J!4žëc­ ŒCʵ RJ’俵‘”R4›ä¹)ŽÇ°¦èjÇ)FÛ­ÅuKDa“(LüJ¹”Ë…;½ç¹x>é’çí¶DIEšfÔ5M `8ÍR’,Ç÷ Î81ä¤Tä¹-F†s °Ñ‘ ƒCÃÄQJLÝr¹Jÿît©s:9ž¢¤Áq|²,ÅØ|‘¢`ÿš‹Ý?†ÜdHe°¶�Li’ •(dÈ ÐÇZ¹Jj\×ǘBLØu ó­Vg‚<Ë Æ›T ‰t­v ¥åJ‰<Ë Vf–Ñh4èt"zzzqR‚£ I+’r ¤õ=Ÿ RAÊ­V“ÆXH‡¸>ZJ¢0"–¥n‡W 39AÉáØc–ó•oüŒ5wÝMßÀ0Rõ²}×(•z/ßÿÁ÷Y·a_ýÆ»èïCŠ ‘gx* Ýž`tl„ âÒl¶iG)vŠï•*&Ë" šžþ”p¸wõýL4 óK*žG«Ù¢T IÒv“ÖÞÇ+^{ ;wïÂÕ³ùÙÏVEšW¿êDr3ŽFµc¤J¸wíœóöshµÛÔê½ÜtÃÎÿÎ%¼ÿç2gÎlîY{·þì"^ñòw±mÓn_¶œ¸5Êܹ³Ø¹}s¨”øèG>ÃÕ+Wñ…¯¼•c^Ìî=é­1Ú qt‰ïÿàǸ®Ïóž2—^öþôO_‹É,I*°y™4S|îóßa¼sðÁUÖ­[KµÔÇÜÙ3ÙÑâ—¿ú%óæÏàù§žÉ´á 4—(θöºë¹cÕ]4›cÌœ9““N~13fÌàÖ›næ«_ùw¤’,[zoxù·bžïF fÏnÑl6¹öº{¸é¦[X{ßzãm‰ z�� �IDAT,<”#Ž8¸ñú{¸ëžGk*1Þlþè§²üÐ¥ ö1Ð_föìi´&FY³f-ëî_Oß@í&«ÉŒÀÅ¥1‘¥í–q´ —9ÊsÙ1Úà’Ë/äŸ]ÇŽ#œ~Æ1|üŸßÅœ¹ÓiNŒ3¾}7{÷Œ’¥ŠO}â3œrÊËù³×¿–+®z2èG:>BhšÍ6å © 3“ ¬Ñ…¾ª«©lɲ M2(]!aØ!K¡^/ó=#ËS¤�ÇwÉ’„f«EµR.ô¤­}[ìC“Í)×õ»M¥¬hZh¯â‘&)b?Ò.š,cR»ûá ã£f“ã‡Àãzü¤Àú=&ŸóXôRþø' ¬J$ ‰ÀR°>ža,!!ðÐýs(qRÆv^NnKh5 ¥!ÊÕ§¹úhÀj +ø²†´0MP.ðÌ3|Ð¥A*s^€òÆîÿ)1·+3ä¡J³Ê{ÊÉÓ¶m:¸¢‚Ï0Ðz\y8N<¾Ì:X:BWö-B( kb²‰QÁ Ò«v¥¿¬}jÏКjµ:ÅØ|,qïá1y2.?Rž09®ÿxbøäÏc}üàààÿŠÉö¼ÿ?·xì@âãÎ[ ¨’áÑ&Â5M¼<A½O5)ŒIè„{;;qû ýAûŸa’©Šé:c"„POï4Èÿº13Lg7"ÜA­á �V÷‘(¥K¥~0Œí$ßu&¿—|îÒ Šïó¹Ü]¶~§Ó¡Ý.&žË倒iò6£R?rÏq<+O½n·£.0ꓦÉã¦ÝiŮƜ"ð=Â0Çu»æ@&íƒ[ÈçU(­V›æD+B‚’‡V. ·„0ªÐÍsL\ŒÈj¡°™%µ1Jâ,¥9‘z¥Râúžï`(–jo…v{œrP-X—B u@³ÑD» µªã{€%ÉCò<D`ÀŠ‚5¦€B)ï—ÛeÃv‘š¤h„»Êq�öÊ] ÓŒ8K!/Šû8κ­Š8N©T|¬-¨år™,˦S®ëúzyŒÖ’´+ µ&ÊDaŠ”‰" 3„Ìy‚Ö®VXÕýÆ !€FÙ‚mk+4±1X£Â#Ir²¬è¨Öê5°°Õjàûë©°N"•Äq5i–b…Àñ|*Ú'7?¨¥´´h!ñ]“v5k­%¶GK%ÀäTJ>ŽVh£PJR #1¥$"+±rÛÁ$-N~þ\ðóËùìç¿Î?üÃyô®&6kÖ¯ãß¹€7¼å8Ž>ú`öîl¢²ølÚ4ÂÞ‰í Ï®Q ¨ÖØ´yœÈ2ë‘Ù:nÉ }M”*Õ:Û·ïBË—Uè) Òˆ+¤6Ã-eÜpÝJ†û{X8c>™Ê¸óÎ{¹sÕNN:q.‡r Qk;}Õ^<OpùÊK9ê¨etZ ’ÜE;u>þñ¯pЂY¼òU'cL›£?Œóøà»>ȹ缃SO?Ë.ý)³çÍ¥\šÉŽm1Wýúg|õËñÏŸ|röËÙºã^Œu“¾Aþë?.böœ…¬8îHnºårN;ýd¶lÝÈðÐ|LR¦3¡øü—¾ÊÍ·íá¤çÏãmþr6=p[b÷ÈÏ=é8Ž:f1IÁ…^ƒãRè#KƒÖ%æÍ]Îøø8\p}}u†‡†xÑéÄŒáaªµ »Gvó“]¶í#Œ7ÚlÞº“Í›w"eÄD3c ¿ xÜÿÀf®Xy/Jz{+,;xÇ´€jü9󨔫¤ID'c¬•²îªûep`€RÍ'5P* º¦¹¥§oÒöŽîfÓÖÍlÚ¼…ûÜÌM·ì$N63cÖAyü2>ûúóž>L‡ŒîA+O—øáþ“{W¯áCó.Nyá©<ðàf¢´Áâ¥+HÐnµÐ`Ææ!tGòÑ(©É2Kž§(-puW«Y[’î¾e‘Dq‚Ö>¥R€±¡4Ưi¬Á`¹�Qh-§Y!¹v:¡ºû„i Røe²<äi1€D*Mž/@îg㬥ù à,*Ôã<oê œç§â=ž@�m«x"Fˆ6P™ì±>³–WAõ-FŠ”,ßJ»µ»õÔj¯À­TŸz0Mʨ“®Ž2¿ƒÏ'²TÙ6äM(ÕA? C᡼Ù'b³˜æî;I6_Ž55ÄÕéO9kÁF2ò.Pp�Tý}WÒ¥=¶‰Xily:Â-ƒ5ûÆ-(,B9X·—(+³3y€z6‡;É`u_\7–?žx)Ÿ¢ô‰áòÒwð¨Õi!å– ÒïÙ< Cˆ&Æ4‹)7©°ÒÙ/‡Ñ=oˆjÍÇ»iL¬¥\ž‡ï í;¸*Ð6ã$ù^êr!Jö°v>C—µƒ»>Õ¿FWÙ­Œ·®£¢WPò>!P5 C:RJêõb?0v/íp=q{ލ¡êK=‹öËFÇcV1RŠ(ʧÆ%Çe||¬;QAIšNš²¸ÈnǤp®vÀJLn(•J¤iN»ÓÆ Sh–j㸸Ž"ŠRŒ±Z? ˆãR‚кkb•Ç!J+„0“am†19i"ºz5]Ñ ÇÃ÷r…ñL«ÓÁuÒ4¡ÓnQ«#i?×Z?LP¼`^Zk©U«Sú«ªkE1Yž¸žçcÉHÓ‚…:iDòð€99:Z°aÓ)õÉß.]ÝÙIf°Ö­\”rÉò¸ ¼jíÐjµ¨V«]]a:&„ì:Œ[”.®‡µx !,iV�½X Çs]èÀÆQX§`’Z[€ÁJ¦]6o—u‡di„ïÿw'×t»ÈÆÒ("MӮᕋҊ@išÍ&¾ïS©THÓÇñ»_М$ IÒz½Îôéƒ|âãçñÖw|ŒOüÓ'™=s ,æ'?¾˜°ãñªW½‚<É‘ÒR)y\±òRæÍZÆQÇÍXs££î¼ó†¦Íchh.s¦/`ÇÎ-$q‹»îØÀÖ]›ééYʺu¡€“Oz.I’S«÷°cÇvª•^ø#Ž;î98ÒA{U.¾ä¿ØÛŒxÓ›ÿßsé´r*•€FÔáž5wñ¿y­ÐPï™Å÷¾ûCn¹m3—þê“ Í ÙÜBš†Üs÷&æÌïà 26>ø'œx<7ß|Ç®XʺîàK_¾ˆ—ÿñbÎ}Ûؾc=ÕJ•±±ˆ (qñE—Ðî´8áÄ…lzèfϦ§§—+®¸€ÿð+ìÜšÒ7ÐÇ]«ws üà…Ç¢”döœyÄÑܳj-›¶m`íšõL›>“î_O_›ÖnàC—±páB°à9ãc{짯¿ÎÝwßÉÞÑÝìØÑ`ÏHŽçY´¶¸*=%²,¡ÓɨÕ`Á‚óçÏeÉ’%xžÇÍ7ßÎð´ilÚ´…±Æ.ûÅVÍq–.YÈÐÐ0¿¹òÂ(áèÃçS©TÙ¾};B&&&˜3{Ãsû¦ô²sÛÏÙºe;wlaç®6Ž¥šÏŒó8çœOsÒÉ'€ÊÛ»“±=ã´š :áë×=ÀücšÏþ#tÐA<ðÀ=ŒMÄìÝ“°lé ÊO’æiÉâÏuq´™"I Iœ€€Á‘ª{Ï ”Sfò{.<Uè&dž4M™Aª‚õ›Œ4±FM5n =Õ"%™dH<œ½E1¥R0ÅØ¯T*¤yFžƒ9Aù@Îp`=ñå:e\¯‘u i€öŸ™ã:Bb½:²w1¾}!ñŽkhÝÜs-eGâVCèúSW^ä2šÀ͆ž‚ñþ»‘ pËXÑCÚÚ€°.ÊÏž¡ðŸ�<T0‡ò¬a’9~-é®ÛH„Æá(DeÆSk€"þËøÒ? +ÇHš›PA `t€ÝGÎm’$ĉÅq†Ñå1ZÉ(~:†Å¸pÖõD€UUFyÃäÄmh¯ŒÚ'€UÈó1âxBäÁt”t÷[…OÇ©#¥‹‰ÆH£¬[¯Ÿ¢Yøt~jKžGÄñ.aü�+KS7äWö• ûæáÎ<˜´qᎫðDü9úèïZ%IBET«Ujõ ؔƮ‡·_[H>ö.EÖçAWïY ¬ã÷I×$eppv»]¯tÏóÈsC§Ó™"¥’(S$ÊZy€$Š"Ç-œä‡A`T‘x¥Y$XR)”è:'SŒ¬{žGšÆdiJFJ¸®Kšº"YWßsÒMZÈB\+%JZ\' ËršÍQc|‹Ö ×+Ñn‡cñ¼Rw|7Ä÷ý) 9M3²<éêßÅäyqܹ1ÆSº²ÖæHé"T1\•S¼ëMiçˆ~ÁRs§«‰W˜b=hïPª�\¢¨M’¤x^©0ìÊs‚ „�¢(¤\.ÇZ;Hi§L¼¤tH³œ4ñ\wJÓ qQ)—IÓŒ$É»ÌÙ�­<¶ìÚL©P¯Wq—$ Ý?%!/FE¥k3r“Þ”Á‹ïûc¦ÎaÖu>ŸìjÔëu Üýï6qFmà.ZëîuMQÊãCñ_?úW>ô7çª+ï ðsî¾c-Ç;‹e‡ÁȦuhm¹âŠ+˜>}:K—/d݃زm¥J—¿ìuìÚµ›Õ÷¬åKŸÿwvn_Ë´>zûªHO1m¸F³9°xÑÁŵj7 s¯v“»înrÎ9‹PJÓhn¸v5Kx{Üá´Ú£ä¹„̰ö®Û˜5kaSò¦±mË_ÿ·KyÛ–ð‚® ÝLi¶öî¸}-ñ®·$Û¶oÁ fpøáÇ‘%ßüÆO™1+à###ëÙ½g;aX¦^ïåW¿¸’m[·qÎ9oåöÛo§ÕeùòÅ´Z!g½úϨóÈÓ>¾ôå Q Ž<ò(6oÝÊɧCe>¸Ž­;¶qÇ÷P.÷â¹'>ç¹…¼‡•ä™bÃúÍŒ1¶waÔ!ÏSZÿ½7Öý*ë<?{ú ïxæùÎcÆ›@FH‰LÁB†f‰S[ÕXZÝÖR)kµ]–K«Õ²lA”Q´U†V, ®0(’„ÌãÍçsÏüN¿qïþc¿ç "Z2܄󬕕›uϽ9çÝ¿aïïó}>ß6JGLMרWC.¼¾ÉØØ$¡Ž˜ž™!/R¶letl¥$ZK6mšÃá¨Uë¼âåW²¶Úæñ8yrž™éÌÏ/ðÈ£ÐYÍØ¾uŽíÛ·Ñm§Üÿ}”…ãÄÉ“5NžZe-I9~t…Örνß\bË–œ«¯>yÝVvìÜÉðÈ$QeŒ,•ÜûÍûÐ@ˆ’ýûâĉ#|âŸdjªÁå—¿€ŸyÇO3?†4ï TÉ¿ø9°Êyçí¦Ói„’¤×#P k òL€Õ}γ¡—&}@‰s%y‘ sžh,ôÔ8Ït–Êg¦¬‹¦BÌÐgý÷é9ÎyŸIìYÍJkò,£Óm F+Àõ›5>hI)Nü€mÔS·ÑˆÈ;%]gÊ5Dm‚ç&¹WH GhŽ^FËt¤ 576+¨o!jòŒÄƒ;é2¬'Î ¡Ü‚þiÈD…R4Xs]”ÓÔ\ñöUJ1ÒÌPi^†Mé,Ý=REÕIPÏŒ{PX‹p}FýÆ!啕ÄóUDï$q°-†èŠèœ­ý~´K¯[P çhTùÚè$k7ÌSµQO¦‚:¢±‰”Iv–ŠëPéïMŸÍgªµ9izšvûQŒÙL³y>Zן×Ïy% Q£tkh—àXAÐäÙœ4r¶$é¢ÓÙïˆÍ-(³1r¼«¿%mª“Ôg/G”gé»íÂ_†cß“¸ú­ !‚X†åûàäW©Î^F}úrLuêúó×B<‘rèY«þ°/4¾è')KG­VÃZ/ž•eÑg²Z)ZdYNÛµÑÚ ´A)‰Œ%ÂÉÁ¨üºË´t®òä™*Ö�v0.^I’—&}—§1f�ΕB£‚�œDIIi:I’R­6(Ëœ¤—!–\I #¤’}‘1ë ë ´)išxG­PR"„‡¥·Ûm¬µž}h=1Šz½Œ4M©A`¨×k¦jYyg/>°Ê:/gYFQd},öpre2 ÏK¢ fmm£5Íáºw•RRZ¼°eúx(Â"œÄÞ©êž ë4eéC³ªÕ)Ö :í„‘áqò<%Ï‹þqOöy°}$AD8— Fw××͇ìÈA€ÌºXꤌ8ö,Ùn·‹T®/F ŠÊRyrÑÂXîíÛøÀûþnþìMœ:¹Ìo9Í{~ÿ%´V¨U‡¹õ›·ÑlÔ¸áe7ð©›o¦H5—]þ¦&7ñ©›>Éðc½Ì+_q#?ûŽ×0Ô¡Y¢2\çÔ™’¾çËõ:Yf™Ÿâ®o܆1ŽÙMS4‡†¹íæûyðe~îß½ŒFÊ\ ƒn4xøÑxÛ^Ož[ª•&ñgÈ¡Ãó¼û÷þ- K‡X^j373ÅM7}†=»w£C’¸ÇŽždÏî+x÷»ßÇ¿tŒwýÞ5<øccSà ÷Üý‡Ÿàío;ÇO¦ÝZ`nn’¥ÅÆÇ&Q*æ¯|=oÛ;yxÿi^óÚk¹øÒRQ¼ï}ÿ/¡J¸ä¢‹ø¡zQØdzzŸøø§™žž!M3&&'èv»,.®Ðn/14ÓÈ5Ž‚«_÷ ªµˆ"óiª““SD&¢Vk062Béz VNìn¯…–k(­Y]Ydfjœá¦â¼½×pâÄ<÷|ó�;¶LqæÄ!ªÕû.:•Õ5ÆF W]}9R(¾tÛ­Üôé¯QY¸~Ïö]t —½ðRV—Nsæô1uÅ]ß¼‡½—0hpêÔ Ë‹=JA5fþÔ¶ï˜%—_v×^÷Ò´K»Óá(JR÷_¸Ÿþá}\|é¥;üqd¨U«´×Öˆ¢˜0ô!qÖ9JÛ­ÃbŒÂ9! ÓiÇU¤h#±V ëÆ¨A³È7a$8‰”ôï)JjÊÒ»½UŸ›•çù ¡(JœsT«•AÈœ+=^ ÚØ7lÔ÷S¦‚“C$+§å¦’?§µ)âh7zIwa?Ýù‡ñ7º‰©N#žvÞª#ÏWÉ“Ó=MTÙ2üŸlX ކ”Šx®;+PÁ4ö¢JEÚ;MÙ;KræpÁä‹ Ò�ý4¼œƒ"AôV sƒd¹¡¬}¿RP€]Ck„ºNM‘Qé/žå«Nc¨6F¨E5*¥!<û TÚÞÔ7j£ž´šg ;Ší®’–ËÐ=NMBXŸéòÉ3$Éi�Âp„(š~þ¯…˜p msÒ¢CÖ;NÕž4'óû_IÚËÈd… ÚJÍñ\dÄ?ߪ,K:Î? õ•ºAÔÜKÞ<BçøÝd­“ôï%ºiF¾«¿w=¸Ü›éb¯Å’•{I[ûAt ›Ûˆ†ö€hþ@¯^ßøûd悵µ54AÐnw(Ëœ(Š}ÅÚfFGXëȲ!|ò¢-é³WKýp(ëúÈ�ŸZ/…+•òŒÁ È“6`ÑJ Œw†:gÉóÔgPX/lH (J¬u8'RY–Ý–’¦ïõNÊÒ–DQÕ A‘; á¼S­Hq®�J¬+ L…"·XëÕw=€1Æ_X®|ëbô·ƒÒ¿}ìß9×Oµ,¨U@zEHù„ãS)ïÔÂ;b•€£(KŠÂ§V†¡Gh¢µ¤(s~¬ymy™ ˆÂ»ŠƒÀx|>¬Kõ…sW ò¼¤R©R©Dd¹ç©VkX—Óë•~C-�QRºœ¼H Œpbƒ $hEA¥R¤^zñ;¡Ý]% B¢8 IzH©ûØ‰î ±35 È’VrÐÒðæ·üùÐß1\ƒ™éIzŒ<ïrâøQÞô¦7ñ©Oýz®ä‡®-i/æ]ïú#~ç¿}‚ŸýÙËyÇ¿ý ÆÇ+,-.2><Á™K´³”ÖšâìÂ"q Yæ:CéV»Í‘#§Ùµ &&FQBsû­÷pÕ{AvÁ4ê#<t÷=dy†6š0jrçWäÏþìã¼áµ—±ynŠÕ•“X×åÌiÅm_þ?õoÞHsh‚vw3‹‡xõËßÌ_}øïùÀûîàíoÙÍßørWµjÄÑà <ôÀ£üèßÄÉ'xèá»Ù³g;Z8z© ÝÉ©Uc~õW~“[¿rœ .œ¡14Âß|üo8µp¡¡€wý·ßaþôYþüCÅáÃǘœ˜áŠ«¯âÀc–^Òâw}•É©q¢�.¾p'{víàØ‰#Œ×˜œœdtxˆz½Ž@š€¢ttZ«Ô!ØyÖ& yšúp9Rö<N‚³5BSðÂlÆ:Ai·£´fhh„»ï;ÍÌô{÷nBHÉ/ø æ¶Ö¹ë›rï}rðÐ º½׿ä* ×bvºÉŽÝ¯cþÌ)ÒIJeÓδyìÀa.ºô8@*Zí6ož%Œ wÜñ333LOÏb#ÇNqÿ½=~åW^�ÂqúÄ1z6{Ïß3ÀvX[‚“8úáʇÜå¹çI{G»àO¤1 4¶ç›#q£´¦ÈKвÄ5L•2H©ü=å4RI¤ô¿o‹ëlßáoÜ ÐZ÷Ñ+m"¬QnŒ6nÔ÷+~Å”®ÁªHÂѤx^HOQ4¾ &Ð[x€µ“_ÁZËÐÖW£¢‘§U\u8z¤´T›zUaš>Jä»8¿ÊÀclñ<¹¼†‘ê<†øQ:§n¡µðu²Ü1$'ÑÛ¡>ü4 «×›G¬§ZÆÌ!9’ëŸË•ãÜεp*€ú,¶±‰²kqýû³-¬ŽŒ Ól4в \éà²yÈ LÁÔ6–p£6êI>Ϋ• ŒÎhµN°¶¶„RWÃÏ‚¨ç9£íµG¢ËÐð 1fæd!T'(´ Ózˆ|u­æ0F= ë`!é V—‰{–ÈL#Ä$ÐØxÏž#Âj»Ý& Ãoq®JuÄÐ>ر@wå�ùÏ2ºwްQEÊï0ú­ºVš¦´Ûm´Ö4› ¤,I[§X>ø92:Èí/FŒœss+\íÙV‹Â‡ÇqŒsŽn·K£Ñ@J”!èåŠÜ§Û÷z=d?^kƒRÞéåGÃNë®,}(UæÇÕ㊠0A_tt^ u[z€ÎÞÅ )Úâ0a€ÃƒÂ…( E!ŽPœÂ–ޤH�á/(kÊ‹ˆeác»¶tdYŽ”’z½†s%I*Éó„¬(°¹Eõ­eYø ‹’,KûâgŠ2Ež£” (s¬-ûn5Mžç$I,Ë#þZû]»ÝbmµEuK,Ëú#¾Þåæ¿Æ‹«EÙF û`†f³9péFQ„ÖŠ4M°Ö€p¤i²ÌÉóœÉÉ)„ôz]¤òŸE«ÕBA«ÕFŠ c2*•FOà“¹‹2£Ó^i‘’AèVQä~ ºÏ×Íúk ž ›¦é€­êÇ›×ù·žÕº´Üë»[­V‹v»ÍÔÔø�-QÚŒ¸2ŠÀ!äi†–OáòŒ…³púôi^zÍ ·Þz µfƒ•åUî{ðAÞò¯Šv7å×ÿóïó•ÛóÑÿg^rýåtºÇ8qü08X!Ãcctò”JMS­ò"gqq•]c5–—WÉ•åÔÉeο`/RÁÂÙE¾rë]ÌŒlÚ2ÎòÊi²v‡-³{xôч¸üª+èt{ låS7}”ã§à/» c$*ÐDqƒ/|ö>¦&çØ´y–$IY^^aÏž<tœ|ô3ÌÍüØOü(Ë+g)]M›§Y˜_æK_úW]ùR!îüúíŒ ÓhÔ¨Tªd 5fù‡/|¿ýä}LNF¼ùÍoåÏ?òQ.zÁ6^rÃe8 þËy#ÍaÆÇǸáú 9rø ·~ùNœ8ŒÑ053ÆÎÝ“\wíÕŒ SClžrÑ…»™ÅÚ­­PK‹êãêµ›÷Xé´±6§ 4yžÑlÔ0Z’%g©Å5( ¤Ë¨ÄŽÒ9.¸p†²t©¹dßV–WVI‹³t{=VWÛÜxã‹Ø·ïBÞóÉÉ“'xøÑ¹âŠ‹ˆª1:RôºÂXÒhÔ™œlR«Viõ–P:áU¯¾–O|üã$½.­Vç\yÅÕ<òÐAÆÇ¶²¼´ÂŸþÉ癜„±áéê<{wï¢(½+W›€¢(I’È ƒˆ0ˆ eFQfeNš&”¶�•JÕ ¥výȨT"ßt‘þeT”Ò)\?à£,K?Î/EÿÙ©÷”‚ PÆÐ^^FißÀH’)@GÜØ¶<‹µ¾Iùö1›ïæàÿ­ÿ~öKªï6+Ÿ7B)4&¥1{R×è-ÞO÷ì=P¼Œhh×Óyqø0FQú€IõÝm,•2ÔsÈ<AuÏ‚Ux6Ösv!4uäÈ^¤]Áºº­ÓÈùOS¯#¬_Ty:f´ޤl“º%¢x3Qu¼Ïvݨ'û‰EJ§sˆnÖÅcˆhŒE§ÓÁÚ‚ñññgý¹¼¶¶æ÷d*¡ À¸î"nõ(ÈLåœJ4ߨ½ÁúžàÜÆ; „¨aÌq\¦‹´ÛE›ˆãÙg̹jmF·{„¬s“jÂhFÍ DýHåHÓ ªlA¤ó´ZdzÄñì30‘³¾9t桳 Y‚ Ô' apnTÌ> à�� �IDATÌÌÇñ·å‚Ê&šcWÒé![¹ŸÕ•»©)C¥² ©ÂòLëõzôz½¸ê3t"¤,éuÒY¹‹¬»ÓÜAu쥄• 6Â"uƒ ¼8êE€PT*À3þ:î@X‹¢¥ J„°ÄqÜû,à0CýظpEKëú.HÒ>À)C’ö ZKŒ6 äÀù©”òœB£qÎØz!7ó¢¤ößC§Lè¶zDqŒÖmIÒÅZ‹1š4Iü……ý ®œ,ͼÓRYHLàÝ®Q"X[âœÀ„yž€€"/HÓ„z½Š¦Iß©™P–%Q¡”ìscsŠ¢  µZœ Œ"¬³ô’E‘ÒnçÔêÂ0DJ1Öý@©õîƒ6 n€Z­A·ÛBHªãœç¬úÑ|/x­­yžèøÔ‹gÎzq¬Qï»F%eY „ I¼ëÀ„†0T}g®w°zÁØ;újÕ®Ô¥”ˆÕZëou»î\][‹â ñ^JM½^éFç}ëz -¥ÇGCT­!•Akèu ’¤àûâWìâ#ù—¼êÆEsx‚_úÅ_ãöÛæùÀû+/¿„³ó‡ãœF£³’Juˆ“ÇçyìðãÌnÚÃÐPÄÉ“9YêÓÙëµÊÇ­ò¿ü苨TbN\æð¡#ìÞ»…]»7ãŠÓ˜j•<K9|ä/yÅK)KDZ#ó|ꦯñÒkç¸á†ëiuN0:Ù`euÛoÿ"¯{í›X^ê ´%éæÔj|ôCŸäî{ó÷½“­Û¶Ðî!ªÆtÚ ý±¿æê+_Æyçïå¶Û¾„s%^tRH–—Ù±ã":Ãø¿O7ßþÝÿˆ†^v…íð×û»vogÛ¦Ýìì ÷Þû0{vmÇhÇì̳³MNŸ>ÌlâÚk¯Ä–JXf§G‰¢)Áh‰‡Â¡•@‰)P"N ¤!4Z+²$£TþºhTëþk-T£ˆ^ÞFI RS–0:Z'Ëz¸"¥V‹hÔkH [6OñSÿëOð¿ùßùÌgïgëÖ ^õªëÉmFn-s›7‘& K«§q…bhØÐ,'¨7 æÍ¡:ËK«\yå5ô:ŽJ<Ì{>ô§,œ=˦9¨Õb’¤’’¸R!Ï2´¡ßYw›;¬Ë)“‚¼Hú hCH²<£,ܹþõn­¥Ýi¡µ& J)†']_@ѤiæŸMaL‘öúF;@iØþ}„a_"ðìæ</PeéÓÆC‡›‡gº’$ammn·;x—}·'c cccÞѬÔ9rh]c=€ÀÚ)Ÿû¡RETÆ/A¨›·éž½‡ÖÉ/#¤AG#¨ xªƒÎB™"Åèè{:lJi¨×6c['±«ó”V¢¢æs[X]W+#ˆñ‹P2!=úZk_E¬F¨¡T¸ ¡*Oùõæp$$´e+¢úFÒß÷[e‘°¶t4é¡â‡±ò<ëïŸ]€sŽN§ÃÒò ¡„Â1e¶B±ü(2C˜ˆ ØêF=µîäj·Û¤iú]ßë{ƒñññ¾aæ\l�yl›”#T*­KKzñ@W1f)ŸÞPBkSòl…nëôj3‘Þ‚wHþ`ÝÓJET*›Q*biéëýówcª}çêÓÈ·9.mQ¶ŽB²ŠR1¢: õ™gŒ¾QßÝ3eddd€i|â÷$i¢çáêwQ´ï¥³øu$¡l +Sýæ£èçå$IB·ëu´J¥B½^'0EoîÒ´îDSP­n§Ñ¸õ]bž÷Âê·Šªei£§EaÑZcŒ!Ë2²,# Æhpªî$À Ò¤@øP%£@X@‘çev+‰ãÍf“^¯ç]¦ý‹À‹t~”6Í2jµ:®´Ú>uLkë ŠÜX­óZµ–Hµ�:dyn¯è_Tþ:ñï9;Œ­+ ¬+ûâ⺸aú ÝÞ)œ£(½0šçÙ`t¿Ûí`Œ¦×낈QÚ_ŒRù°+©!Pzàt âLQÍ:­Vk0òŸç¾+àÿ~( ë½*8x×Ý yžbC–£‘ÒslžëZkÐË-­å%††LNÆ,-/aûãÎ’Z½‚³‚²ôB°ڋݬ;usÒ´÷-n[ífç °ëBÜ’ƒ8ÏóÈêy²–ÀDÖ”šÉÉ)Ò4!ÏKÂ0²ÆàrÍ¡qšÙÙJ߸ë(o}k J±°ØF(Í•×ÜÀŸ~ðÃ|äÏð_ëµ\}õÅœ9u„¸"è´Û˜HÑi÷øòmÿ@4¥Z ­ððgÏ.cX«N#È©×käYÆÚJ›µÕœÉ©‘$¹¥^krøÐ*5C5¨ Ìþÿn汃Ëü×ßþ7D §Ï®PëŽpëî£Ýç¢}»8~tR­Ò™âèáUÞûÞ[xÅ+/áÆ7¾œS‡Ä(C5ªñŸ¿…ñÑ ¶n™#M–9~ì ¯{ýÓí´DLÏìááGŽòc?þ ,.ÁÏüïÿбñ&ï}ÿ²¸t–}—œÇË_z<ð0ûü'Ù¶}ŽÈÒn UÕ´[ ^¼ƒ}û昛¥Q—h1ÒÊ@+¬+q6GJ³¥³žc,$ÂyǴц@{g&V£íá$‘6Xç9ÃRxqÑ¢ÈË’"KAj‘šzl uµ%PBS:Á…ìä¼=ãÜrËqþôOnæÐ¡#\{í¥(²º²Â¶-›(‹k ÆÆG9pð�Çâû.¤Õê°°ÔfnÓÇg×yçóæ·¼Ñá ÞþSoåÁ{nfë¦i––V¨×ýfB€Ä!¤B~câ„#·9XÏ\¶VÙ Á…¦Ï›É0:¤(<+Y*8´–ƒ¯]G‚¸¾3¿Ä¡yÂÁ¸.´I)½{¿(ÿ]ä9yž¡”Bé¼(=†bã½õŒ×¡C‡øüßž;¿v''Ož$ÏóÁ¡þ[Rë”'¸å‚ééiÞñŽwpñÅ322âƒÈÎ úðð éõŽÓé<Nž/Óh\ÐWŸû6¶2´í5¨pˆÖ‰[iü2EºÄȎס㉧ødÝB´Sq]‚¡m¨`ô{Y `„D,Ðf*už?Þ(œDŽ^‰BÑ>óeÖÎÞK±v†á‹Þ‰®<õ¢çzÃ˹òœI¬N—sP¤°x l†žÂÆMªµ[·Öpβž5 _J/ÃI‘µèMì é¬Q.?Àðð.¢ÚÔ3çêÚ¨¨:rä·Þz+wÜq‡˜¾½ùúösssüôOÿ4^x!ÃÃÃßæ0;§$=„hbŒddÄÑé̳¼|'ÆÅT*›žÖÿs·{Œö꣄‰¡b¶a3Pk€üÁtH ¡‚QFF® Û=ÌÒÒ4››ˆâ9COŸØÜ]À®b%9ˆÔ; ª›|u£Î‘×µŸ:?xð CCCÌÌÌü“÷³ÒjÓ×¢dñÞÃjá0A<ŒÃ7‹VWW1Æ0::ÚŸ×h¥ )`þ$ü2jñë oùIâÚ5H¹Ü«y>Ù½¤ÓÉ‚€^¯‹s¶o'öBœµ%q\õéñi‰”!½¥UÒ4EkE½Qamm â«­vc •j„$CÒ,Ã9Ï'-ûH'¡‰üøynéò&°¸¨ê;4!E™Ñj­ uH„DÑÝn‡^Ï¢”UבÖåØÒâz ¥&B”RýQ\‹”ë„Wõƒ¨ïB…jTížùGcîµZ^Ò!Ïýçµ.HÛþϳ.¯wò<ï»YC¤ñ Të$A ÑZaÙGøÐ(%}(N§ë±�JKŠ¢$Œ"‚À;aõ!в ÛYF 8~â4g—ס¨Z’4A"©ÖêY†”>(ª×KˆÂ˜z½Ö9ó>òÁÑë%dYJµZCJà…Sà¬ÝÂÿišþaµ,½¾îf•Òô ôExÏÀÕ*ð"¼6}A¶D C)ŠÂÒn¯F“lݾƒ‘Qxàþcœ™_`d|ŒÃGðÒ^Ik©ÍGÿü¼øE“¼æÕ7²ºr”Ò-ÑéZ²,çžû$ ëì=ïŽ?νÞËÖv‡¹¹qÜgxôÑGxÅ«wRK­–—:DaDiKÛ¿Ÿ¢„ɉ:½n‡<uTÆ*8°ŸÙ¹qJ+ Œ¸ùæo²e+\ü´OÒ¨ÕQ²Æí·ÞÇ+^yÕª¢VmÐɰÞý®?¥9$øÕ_{ ‡¾ƒ¬È™™žæØ‘£:8Ï«øUÔêU>õÉOò¢k^ÐgݦT«c$YÄû?ð1‚‰i¸÷Áû¹ûþ{¨T\yå>Ž=½_ÿ:ã“ìØ>F\ŒŽŒ²eË Óӣđ`ß¾=äÙ£cuf§GÉÒÂirÝV)µz(ɺ=œpD&"Çâ,>TMÐJß|@ZœõpR{$GQ8”*)2G!R‚ @*…@R)ãc1ÕJ•µÕ5—–0ÆUëØ²ÇßøjîúÆ¡d•oÞu€ýŸæ o¸)ròì${wï¤^k` Çî"„#ISNœ˜'ˆcvíÚÅG?úWÜvëŸcüÂø÷Üu××¹êªË+†ôT›F½JÒm34<B§Óõײ2HÖyçSYä(­¢ìßËôƒý Îò0 1ÁÙ×oP…Ç_øp<oj³¶¿tž=í®ÖÅ9;pygYÖgDë#ÚÙrànݨg¾Œ1DQD«Ýâ‘G!é%ÄqÌÔÔÔ€Ñ+¥¤Õj±¸¸8€Ç155…ÖÚ7©Î‘±?!Æ ‘¦‹äùBèç•%uLXߌ¼›wIï¡{úK¸æµÑKˆãÍȧˆMVØYv¡a°©¾—ñDá­N÷V{:@çƒGÊ€ œ :r)®ÌHºŸ§»t�}òv*ã—4¶<e‚WQ´IÓ³8—S©l%6ÜOI•)´¨˜Po"Ô£ØÒï}€ë³§˜¦)I’R«ÅhU£^ÛKÖ¹‡¬}"[YwWlÔF=-bF–eœ>}š‡zˆ4M©T*LMM D )%kkk,..ÒívÑZ3>>ÎÜÜÜÀ¤rŽËy€AÊ:A0KQh¬]$MÏ@Ñ%”©CØüþ‘ÎBºF™¯‘Ð#/ÑF©I‚pQ©ƒþÁn’H†ã”egSdҥȑ‹y¤! ÇŸÎ¥Šr•´wÝNЙE‡Sˆê(¢2ÆÆøÜ¹WJùIs×ü÷¢Ðèx3ñPJ£~/®Û¡{ô"+&÷!¢¬Ã‡Œ!мHé Û!ŸŒÞ‰¯ ’.æÄc—£k[ûÂêzh’ÑVƒ ¥¢(|½óÝ/5ø‘~)}Jv–Q244ÄððíΚwþ™æ–0Љãô’„#IýX~”Γފ¢ B’$EhE½^ï;[¶Ü´˜´.dú¢K[ô™ `ûNVKisïÂQ)Z9„±Ö;ÍŠ¢ÀƒÒZi²ÌsR…P}ç¨ ½›µŸê­µZ•²Ìñ-ß$ι>2Aõ/xje´!˲܇á ì ÌKÊ‚²Ìéö|Nšf(僬¬µäYAD£É²‚$ɈãµZ“'æyç/ü¿ðóoãÆoÄáÈsAÒM(mNÅ(åCzJ›Cáù±Öå()¼kTD(½ÈÕŸr,K×’² …ÿ~ÖÅ‚õØZûD˜˜ ) ‡Öš8úx ϧtú|Z;@<a�2gaq‰Q=Ëì¦Y^ýškøà߯û?ðAöž?Ëèè µæï?ÊC<Îýá/3:RE]ºÝ5VVÚ<øàA¶m¿€áÑ~å×~V'åõox ã#¼åmoàöÛç+·ÝÉO¾íj††ÆÈº‚²ô’„<+9xàRÂܦqŒRäN±²´Ê]w•«¯¾cBZâÖ/~“ÿíß_Ïð¨‚^NŽÑk[V¸ü²«I³¥í±w×e|ì¯>Íç>{€ÿþþ·Rk†,ÌeltŽ^¯ä‹_¸‹]ý2jÕ!ÛÿÈ¥ J›P¯51á(ŸøÛ/ðá|•{+¼á¯§Z#ÅßýݧøÚ×â…_J-ÐÔjuÆgFqÂrýK¯¥µ¶D·»ÂÎmsdÝ5¶l™&«‹k8gnÔ0¢t:-’$a¸^#h(’´G ²4ÇY‡2ÊŸO„ësBKp%Eá™ÅB ,mq\%+JÊÂ’9i/íó„ $PšVk™^·E%’„ÆsŽÃ(â’ ÷1Ò¨Ð錎LsðàãüÅ_ÜĶ­c\|ÑNõQ¶oˆé‰ÖZ«:gßÅ£Üü¹ÏòéOÿ2ŸûÜAÞð†ðú7¾M[Çø‹}ƒŸÿ™Ç:K¥’¦]’$§ÅoáÒÑÿYò"éÅQ¥ü=ï7ÊF@Š-…¿7”ò®n·XçÒúfF JLáÐÊ€ôã:ιÁ½"¤o$EqìÝ­}uý×YáÃç6„Õg§ÆÇǹô’K9tð=öF&''¹æškh6›lÍÑ£G¹ë®»8vìÍf“}ûöqÝu×±eËjµÚ9·~Rú IóáI"xÞ°… ‰‡÷øCmvеÓ_`qþ³²Äè&Á÷ä,ý—„Õ„Žë ¨Òâï}#& ±ŒdX»ä›Ö<?�R*•9äH+'étÖX;þe¦4ÑÑÈSrÍeÙíöcHÓl^€Ö×÷­Y(zÐ;An§)7©1ZYÎÂÂY¬µ4gU²Ö²¶¶Æòò BL0Ѭ1îaÇè&¡Xʵܨ§¥›7ofzzÚÊÓÓÓ¼øÅ/’j­9|ø0wÝu'Oždxx˜K/½”ë®»ŽM›6Q­VŸ{;/® 1LWÑzœµÖ#”“(j¨Ê,V™ÁX¸Dx¤üËãénV÷íS”ã´d‹ Ú Þœ#3ÑØ`f¯¯†PDñ,ª£['H:ót衪Óh]ùuß²ÿÜZXú‡q#G¸UÊì(­Ö=ÄÙ$u¹›Z}*U”Ž7᜻&<uÝÌñßË!ê¨p;ͯ¥{ô+tÏ>Œ³%JiÙ… „+ý¹@ô1tI·x’îÑÛé-ÜIet+•MW¡&v â\ùwÜÏûd÷”$IÐZQ«Õ|R½òÁU>4)ë‹„gÌeRÞ}h„€ÃGóÈ#Ç!£c£LLÍõ»*’,˱ÎR­T½�ç<«Ô‹q}n tº¾x¡iµZdYF­Qëûh,BøQþ<‡¢,ȳ­Â@S–™w^ö¹¨yîEв,‘Ò¢B+CY‚-E?\ʹÇÑàïÀ0B)ƒ³>ȪR©°²²‚s–jµJ·Û%ŒL_tµýQw?Þ¿ŽOXbÒ4ë ®ÐI:ßâÌ~B\‘()‰¢˜"Ï)­3Çëã8ç¦ÚtH’„(ªàœ ×K}ˆŽäYÁÌô&Þóî_czzš^¯‡µþÏ­¬,Ñj`¥,s”òBf»½ŠR>k}-d?ðË9ï¸-K(rKD­R†A_ôy"-.‚ÁÆ`]t•²ÄYÑïœÉ>¾A‘$)Ö ÊÜsdã¨B^$t;] W�ž³†Ÿýw?ÍÍw?ù±›¹ö%»¹ðü ¸ÄœÇ¡ý§(ع}'R—´Û§évyüÀ!vì¼-ëüÂ/þ23Süê¯ÿ<;wO"\Nw.bvnˆGçþûïãºk_FU‰¢gç—HwäôáÀÔÖ$IJ‘öH’Ó³ðµ¯ÞA’Á½ìJ²|™ÐT*›øüg?Þ½ÛÑ¢ÊÒâ*aUqúd—÷ýÁM\wÝ,W\õbΞ=J‘­›ùìÍ_ath†K/¼œ…¥#<pïÝ\ýâK€W”(©™?³Êïÿþ‡ˆ«’w½ë=?s‚Oßôq¼ï~ο`Û·\ÂôØùHA–%TªŽ™™qÆÆB†›#„ÁK‹ ìÚ±•@”p4†êdi†@ƒ ŸRï»RyæY ¡‰)ó­4Âx&oi ‚(ð‚¡Ë±Ö „zÛ¿–ã°ŠT÷ J¬(q2%+ ÒÜÑkw¨Æ±,¥wg:×£,­Å’©é½¼ùÇ’wþŸŒ *ŒŽlfïy[XX:ÌçÿþNîºë^ÆGÈ" Ñéu8uú8ݤK­1Ä®=›ùø'~“¸ZcqqýßK­)Ù¼mQæÔ+Uæ–h4†IÓ”0®Pô1(¥°haÐBQ­Vq®¤ì?G¼#;AJ³^]w½çyŽ %¶´€C®ÿkê?ï¬s¨~ØÞxG·ÀZàÀ˜`à`<,\k’´,=âg¾êõ:[·nennŽf£I£Þà¼óÏãå/9“““Hé™ÚwÞy'?þ8ÇOgó–Í\uÕUÜpà LNN>ë#³ß©Œ©R¯M¡òÙ> ñ8„ÏAJHCØØFmö*œ\aiñ~Qa-§>´À ?y"™- »„n¯å5„Bž ãLÃPÝNRœ¦Õ>F\ ƒçÏh•@Uf±Ó×"DHëÔWhŸù:Amúj‚êì÷¯ºœ,[! 5Z7ž±`•çmYݱւ¤…ªLmÂ&ïÑl6û†Œg÷@%„ Zõg‹8ŠAG„ͽ˜è„MÀ­"è©ÕõT×ÐлvíbóæÍ>ÛÁ9vïÞ=ج‹·ß~;û÷ïgqq‘½{÷ríµ×rýõ×311qNî þyqU¦>ãx'c¤+HÝ"Õ,¦&jèh*ãÿ“ÆY¼X Û™'/zhëˆ{ º,‰ã L4NN ¨Ãë•’!*ƒÂ¢UHà:ä6ceå>…¦FסRñ/}†]ÈÛ¸n‹nÑ¢ !¡DAlÁ„S5®4Álˆhçb­³Q—––¨T*Aðψ« ¡›è©Ë‰J‡³Ek?+€±½ˆÆEÔÕN"eqb™nï0Ùéû°G‚ÕE¢¡ÂÙ+ÐÓW@<Ô7 mÔ`?†!iš‘ç…HÒÞ•fK0ÍÖ* Ñ¬±¼´ÌéSg˜œ˜bh¸âGöX8;Ï_¿“ýûa||”óÔùŒO!BhZ«­”@+¢(¢V‹ð#²‚À„„¦Ó‘H uD%nÐKŒÐÊóI+qDže¾ëâ ×îõŽ+-R(Þ=Jû‘ýÔyg¤a2HéA@žûYŠÂöGØeYPX‹µ%ByIšæ„aD^–ÔªUÚÝF¤Œ½Öå:@I… B´2Ä‘DjÏ” ¢ˆ²(Hz=† ¬#åHÓ¥Õh!äY† ‡’Š(lxÆcž£MLa…õ|¿¨¢1± ÛîÒív‰¢ˆí;7Sd%eQUB”Äq ­B²,§p‚0¨b@Š-rléCs¤h©)ÿ™ƒÀ „B8’Pä=¬Ëý«ÕôCɲ¢ßñ\ÉõÀ+ç½$§R© tH’t‘RQÚ‚N·C† 5Ö ÖÚ\™Fý )¢Mkm•½{6ó®ßý%Þñ3ÿ‰ÏÜô]`÷®ËyüÑ6FB’¬ 5‰ YZlß9ÎïýÞ{™žšâw~çÿfx¤ÉÂÒQΞ=Mžì9”oÜsšÏ~öA^üâ7Ñcx|Š$­2>º‹4+qFÆF "C¥¢¡p„ÑCÃÛ‰+›¹å–ßcËæa¶L޲px™ñ±qÚt¹å‹ŸáÆ×\C7Y!é–ìÚýBþìƒÿƒûî?Ì{ßÿSDÅ–u²ÞG-r÷}wó¶·ÿk:Ù _¼ýK\tÉὤ¤`˜NGòÎ_ú ŽYã­oÿþðÿ„Ç>ÊÌÜ›7O16:Aœ]<I5ޝ3>Ue×Îl¶F`$£cŒÔBÈ3”ÈsÀ»¿“´Eø SXl!éöœÈ)‹’ ©T¼ðhe‰Ä’–-„Se( Gž+¬•8é¼»(èe=Ò¬ Ò†°“eör\iѪI*:ÝUVV晚%i¥Tjš ’ìØ¹Í3 Ê̲ÿØ „²¼üW2<ªØ²e„(’¬žYD’f³ÁÐhƒ0 ®S«×ˆÂˆû¼­y˜‹ÏÛC^HÊJ*S L• Œ(l™a /0#¶�k=&Å»øËk]õ¿‰@…PÊ"Eô]ÿÎy'/ÎR¾‰QæÖ82TQ"µA8…”ÞÉn­Çøæ†Ç tÚkôz]†ƒ�! ´*±În¼µž…’RR6‹² V«133Þ={˜L`>|سÕlšÛÄîݻٱcÇ9LÚÔ¨ÊYìÚIòö1”4Èðùåô* ž¸ FØn—´³DçÌíÍ‹ÀÔžœcÒ•c¸¤CEŽ!ÍÔ“¿A¥ vµMÖ>AàÖ@NÓïÈ<OÖ!$=ej”ùéêã´Ž~ÆO¼L]ŽÇŸT°˜ÃR–=Ê2ŘÆ4ú{‘úþNi%E²LÖ=KaBÊZר¡^¯Ÿ3ÂjÇcÃT�õ)\e§+å yq­*6\V?pýkS‹‹‹ƒŒïU°RR­V™˜˜ Ã`Ç1“““T«U¬õÆ›¹¹9öîÝËôôô�÷ØcQ–%J)¶mÛÆyçÇŽ;ž³SHBHª•­OâÜ YïÉÚ ¬Í1NSÉk”E‰«Ã¾ÑàÛ«ÄСLÏ’&gHó.0²NNSonCÄÓÊôœ± ¨Ža*cÔ\F·{”VëQ¬M08Ú”bRUAá'jä?zƒ JmdÒÂõZÅ*©(0¢NLÐhn!¸Ñd�� �IDATFè¸oÄÙX‡s¹Š¢`uuu€¦üg§I”‚Ê(jâ"Éá%º+÷â’3„Ešõa$IÊZï²…ûÑÝãÔš{¨m½=vTF7®‡ït®òIÕOåyÑ_‡³­4¹ÍIz9ZÔkõ~`’Źœ"/i6+ìÛw{öl%Š&'§ÊÐM‚@…¬ÍÈ2û„PÑwÍEI·×¢Ri�¥*„AèÓ�ó”²Ì CåE¼ó3Žb´6äyIš¤}w©çZk)r?²!²/¢ZkÉó’ Pÿ(Û¹œ²ôlS©Ý$ó<Ô("®T2¥,=K±´ŽÕÕ5FF|À’2š´·Œs¥9ZG¨À D1±ÿepN£‰@c­w¹)«°e€@â0¸ÒØŒÎ9TÐKJ„3”V M„ínc|x—K „rTj!Z)ïÜ-‹~莦,_Sg¬s8ˆ¢Ê” 0ý 2Ÿn^Z‡V %•¿g”À–Θ@ñDà™¤Tahú+Ï¢õŒUGdYIšv£Ýn‘å©wèIÕor8²¬@H¨¸@B!Ð&¡ÝnamΫn¼œOþí{ø¿þÓosÇWNð¿þ^?~’І3‹§hL„Cœ]9ÉØäþæo?ÇÜáÝïþEjË7îø"­Î2Ý´ËžÝû¸áåWrÛWäŸ8̾}_âç~îÿàÅ/¹Žì#üäÛ‰(ª¢ÿ|êõª\£µ–Q¯OPo̲´ >v€Ý»êŒ×kœOÉ3Éü™#<x€É©Aë‚Ñ‘)VáÿèƒÜðCs\ú¬®EXŦÙKxðÁû˜™›frjˆ;¿ñUd ™Û²‹cvvãc3üæoý._¹ý0ã·Üò%¦g'™žšat´I5žd~þ(ÕÍDÕ€¸"ÐAÆž]Ò¨ÅF3Tk K‹‘…àÄñc `xd„Êd•PäY‡Ò‚+a¥N=¨aL…¢„Ò•¬®­‘ãSSd½%H%EáÀj J–®†þ@\«GeJ/邲6+étÒžÀ˜ Ízn§GT©!TÊÈøI}8bm­K«=϶í3ìܵ•;ï¼=çíâĉƒ|òSŸbïÓdå.^û#¯àüW¾„ÖÙ%’^,Ëfyyò„ÆäCÕ˜‡z„Ïßôþà~‡2“Hb´¢ÖXw…úŸÅO!I¤PH$®tø>ßd²¾% Eá¹§Æ8pž“èݪ~ÜFôÁªÎ­?O ç;úN‚1¡A>ØÊÚEêÉ‹Ê ¯y‘‡£Ý*îY®$Ih­µˆã˜0 Cÿ@–eôz=ÊÒ3¸7mÚÄèèè9íFD ‡ÈÄ<=·JìºTž²8B`3´+ uú6’…±e窈æ¶'áÒu”.§m—A—T«5TµÙ·{r+!DH,ª˜"ÆtRp+Ðhx¦õóe%TDPŸ£¹å•´ätN~‘ÖÑ›±eF}æ‚Ú÷„b‹”Vëal™P©l&Š6‚ŠžAÊtíÖÄIz£Ó)œyâY·°°€µ–¹¹¹gUr১J«ÕbllÌ3¯¥Føp’Vo×:AMŽÿÿì½y´­YYÞû›Í×®n÷{ŸsöéëTKõT  D"ˆØÄ†˜›a•¡^3nîMLLìÛÍÕ`»H0 ¢ B)TÕ©îôÍîWûµsÎûÇüö**A)(ªj¿cœqÆ8{µ×úšùÍù›Ïû<„ÁX}¶UUU\ºt‰|ä#¼ýíoo:ÝßÉï|׆îÚk¯åU¯z Õz<|OJ9MОŸŸg~~ÞÏ¢hêÁºÜœ$ KKKôz½§·êÿ陥@xðF!½Þœ$Ô=()Š1cû1ji Uº„h•ÒIŽ“¶5Ò Bj!ƒ6ìåŸÁ©P @‘4Ï?s5 ‡yµÃx°†q AðIÚŸ‡ˆP‡ˆV‹XθPÄÍyè|s›½úü1v/ðXYYyÂæÏ§ºJÙa¤Xü"l2Ë·©F›Œ¶ß†¸ °Q@¬Ð:~iïZT÷zˆç÷®‰OV'“ÉÔ·AL)wY–DQäUyAF,-ï§,sŠªôJ+¼À¡ÃÇJMÆ”•AáÓí'“1 ˜™é5ÉÚ<á¡æÛÍk’¤…lÚʵš`­_OXk§DüÿOœxe¨µ9¦öŸW…Šº®Ñ÷µÖ·çë@azÉÚÆKb7Ùy÷3yت¦ŠËÝ]Ê4M¼ªÕxEÚþýÃííò<§—F%ÈóÜû´jí¢¢8!ËÆÍ÷ Ô€k¾4R ´€õ5MËu]UÔ´T ÖV8+P”ˆ(ŠŒª²á?¯’A³ó¤‘xPdjÿù£0¡65Z7ß ‹³÷MÒ¤i?ö2rc}0™µ’ ¯±lhÀõî¹Ø…þ<š,5!;B2·0ÇÎÖ&—.§Ýé „ MSâ8jÞß[ RØFXW5A¤GQípÛó®áõ¿ý³¼ñÀÿwÒê¶pÕƒ@ª# Îm²v)ãþð]ü³úrn¸áFþú¯ï$ÔW]y‚´•ð±ûOqýsžÃýØñ½ßó‹üð¿üo ^ú¥/`{Ðç®wý1W\u%µ}=vµmÊ<cÔ÷›3ós¼ç/?Ω³—øÊ¯¹Îl¢(A+Ο;‡Öm<Â8‚T¼ãÏßÎÇt¼ü•GØá§OãÝï~7/Å?d’g<xòA^úe/#IRÚÝ¢°ÍÛþäNÞð›ÕXrŠ"#Mc,q¡5tg:Ü|ËMlo^âøÑU’8d2.ØÞèsèÐ!t/FZA»×¢*2–V ¢€ÚVŒ‡ˆ˜ ˜g2ÊhLsòä%;õa¶·Œ³ EU±¼¼ÌÒÒ<íD²8ßcõà>´¶¬¯_$Jcº3-Ãm¬+&“Œv»…–©US•%B:‚PÒêÍ„’íãJÎ?t†N¯Õ(`wX]½‘ÛTï…¹…£¼ÃÂBÂu×ÝÀÎöÿí׃«æÀâ Í$6++ú;}Z­6•=Ge¿ÿ¦7óªW}% Ëû ûè`W¹y‘SV9IÜBJׄ÷H¬­1ÆRT5Ä!aªhzÝ+¥¨kÓØÔÓcüøâ‘¬ Öù )A Ù¨«jŒÉ”D„źj:שªŠÚX‚@“¦Þ2ÁY‹µðîM3ŸšÚU½x;–˜Ù¹Ù©'¹1†~¿Ïöö6UU133ÃáÇ™ý‚‡Žbu*ÜDº1ªX#fŸA­ÔˆÁ2ÉÊ2®Áúǰ÷QÈ6ZXÔÌH~Æ‹8”´A¡Jt”âÚ)Ÿ�Â`– Ȩʂ||‘¨z•È3 së”táF\~3ü(“ûË�ÕZD$sh™|æÊߪ†|ŒžG)Iç‚'É;w¬–äùi&ùèöqtë0B†Í³Î˜zü§v·o7¢(Š'ªãlk?E6@õÏ“$' Ø»6žu×±µ ‡CΜ9ÃÝwßÍÚÚÚßë=¢(ÂË_übIÓtºÊó|j_×ív§‡»k£vvv¨ëzúóvû™bõ"„ H‚¥æiÁì`˳Ôf“Údüï*Išfu‹&fZ‡öž„ ‚AÐÛ½rmÜØRçŒÉâ çA4öަˆÖ‘šƒgàû³¡vmÉ‚ ø´›G^hXQA/ V^€®N@ÿ1ÜÖ#˜GqeŽ0A°tæ:‡nDÇ«°gH÷éÁjQdçìnhŠU ÃÑhDYzˆ†€TÐ…1E™ƒ$IŒ±5Æ ‹"ŠCaó´W¿º'N„”’S¨¦”Di…³*äyî5„¤¬K”Þ D²(éáiÞÏš“ó°Q ´VSkkÊÒQ› !œ_�7]´ÆxÿÃ]˜ú‰^¯8Gš´¨êºñhuDQH&㜺®H’„¢ða<++K w6h§-Š¢ Ë&‡«eYÅi%ý flÃcQnå°8gPÊï:Wù¤uå�C•åXÆV„¡"MZ  ñ*9!Íp0ñmQZ5êWoñP›Š@Xg°MÂ8¸i´µ†]ÏH¥uåA´ÖÙëÔõã°Ù9ºw• »Çq7èKkÅæö¿õ[¿Í+^ñå¾êjD1!Ïeó»› 0Äqˆ %Œõ å,ÏHÓ8lU1Ǻ1ßòÏ^ÉW½êE¼ïÝðýßó‹<ðÐC»f‰XǤíÞú'¿OE|ß÷¾–|ð„‘fa®K·Û¦¿3$Òšl4âË^ò%üÆëæxç_þ5?ñ“¿ËýáÛY^ ùñŸúU^ò’›¨-\º¼Aw±uAœÖÈ0f4žpæÂÁ‰«®ÀØŠ(ˆÛNŸ¹À•Wenv™áhDVæü¿þǼøÅGùÒ—þC>úÑ“ç’믽;ÿê÷¸êªkX]=Àëû7yþí·!„äÁfßÊqÞü–·ñŸñw*VWSãŒ#÷Q”c–W–xäч8°oWáòå \wí eÊ‘Æ3tÛÐnu1FajCgD¯Ýfyy– ¶·G¨0`g'ãòÚ„|ô>zßÇŒ2òÜÐßÒL¨*ˆcÅÂòù¤àüÙ ×^9ÇÕ×ᦛ®à+^ù%ÌÌ„ Ç^¥¬¬¬Po%P;ˆuHœ(ju]1. ò:`kg)Á˜Š}û#¥e(JÐ5RH÷ÞûqâÔ19Ò°ÅÍ7¼ (Ù·4Çxg›K—7X]]%ŠÙ¹Úíín›ù·?νð…|ãk¾‹r°‰¢ié/©M‰µU³qS£´h ªÅ8 Â03ÛÅÔ†²,©ê‚²¬qÖ1?†Î*L]ãšv~çµ1^ê,U]!¤m<‹i¼diîYƒ%®ô÷°µ®Qàg~²#ý8,•@JoÉbjË^‹ëSSyž³µµE¿ß'Š"®8~7Þpãtqe­egg‡íímêºfvv–+®¸‚ùù/ü…¼’4=‚ÖmF£“loý óó/@3ÏÈé¸{úÀ+èŸÿSv.þ ±Û"áÌuÝúL–ٌǧ¤Ýž#M¢TëI8Òej%ö?NU¯1Ï~´ Ÿ„„ß/¼J–oE'âco ËNÑß|uÜb¦wú39Îá&#ÄÎ63Uö{ÛNO^Õbë¢ eîз‘¨«QÄ�¤iÊ¡C‡š…üS»#¥diié“»Ò9Äì~ÄÚˆÁe˜ÏöÎé³°”RÌÍÍqýõ×ó ßð ŒF£¿ófÀ®¨äÀtÈneYÆææ&Ãá0 Y]]娱cÓN–ݹÁÎÎÆ–——Ÿ6sƒ¿ÿA0Ó%qWqtºÎü¤G…ø?{õdÏî€Ir5axüS®üyP©¿Ì½çèÓ±œsL&yäfggY]]ý”Ïgc [[[h­™éÍs8»–®†º�[Ò€!2ˆAìݧÿG°ºkàœ§×Y–¡µ¦Ýn7á->:¼*². â8@ë©Bjê² ÎŒADYyc¯×¼Gè®JÓƒ½àÕ5ZGL&c¢(&IZi›¢,°®b2ÅÊ+Êœ$ˆc¤”Hç! Ö[;¤ç qRy1Á9¯ú C/“/‹ªÙi¯°¦$ŠÂOP`z•jU– a!eHêÚû+î†2ùÏ7Jß`zì‚ À8‹”>)r0š�†!Æx )°HéðaRbMEY–XëšÏ‚²Ê" Š%açÞ/(I¼‰¸Ÿ8:ò äÄ)%ކS>p*Ë&äùxêIF¨ªªù^§Èùc«µênhXE]ë'ìÄZk‰£àì$ôô<GQÈh4$Ï3F—‡ªªpÎPVBFXgN€Â¢«˜I™Q™’Á€V'e{{Õƒ«looGŽ[n»†Ù…EþÇßÄóc³Ç™ÙÏý[㵯}5NKîûÈùÚ¯{9ýÍm&Çã]ù>nÿ¢—°~ù2·¿ày|ù+¿–¯ûú¯â‡~à9tèwÞy—.?Š”’{ï=ƒUí4IÒáÔÙ3¬o^Æâ˜YèU*çh÷?ðW¿k53½%{dƒ“'Oóc?þÝ,..±¾5ÇÚÚ&ôØÛ †¼à…/äGcskÈâÒ>Ö7ú¼á ÿ“3§3boÍ t 8vì(÷|ð’nÄM7=‡²„ŽV+ÆT:Ý[k}–W‚"†ƒN=òYQpêô£ÔÖWwßóQú#áƒG0¢¤2z³3¤­ˆ¤3@)Åöösç.“ç‚v;æã^âý¼Ä[þø.þâÎ;ù®ïú'\Ã1–—Z\¾|޵õMʪB¡*¦¨,y–c­%ˆB)‡áèÍÌ1™t»3¬o­ÑISffæY\:BG8é•çiÚckc‡·¿ýllga1B\{-'ŽcÿþÃÌÎͲ¹±Aœ¶hw;¼öµ?@œÎòßùäÃM²<CI ª¼*{ê—ª¦×«RÞúb÷þÀd2f4!”#ŽRÂ8d2ÙU¹ZWYœS>¬ÔX„p BºéÃÎÚÇUúÆXÂÐ+»5) u€”’,3è@zàlËé@Jé'«{õ”Ôh4âìÙ³¬­­!„`nnŽ•••餥ª*N:Å#<Âh4buu•¥¥¥§‰*Eø0 Ý!±u^"ûç e!™}ƵâÉt ½x3i= ßþÕöI2« ì2¢«!þt»ñ50ÂÚêz‚GPj!¢'å< 2lµç ($ŽW‰ã}ϸövÌt¯£sôËë"brîÏÎ’vNGKŸ~e\ž!«¦“ì#JW{IÅOÆò¬ùÓ‡ja ÂÎ *GH=ïv[ªŸRiç£ÑˆÉdB¯×£Óé�‚8§;s˜áåBvê=°úl«½^ãÇÓét(Šâï7: A»Ýfqq‘(Цó¹ápÈÙ³gY__GJÉìì, OX'?žsçΑeN‡¥¥¥'X <óxž�­‘h䞯ñS V}ؘ”{çáÙPa2??O«Õú´=»»¬Gë�¯Dm} �¿·þüŒÁêìL—ÑxLQÞs¿Ã6™äMÂ}ˆ1áj”Öt{>I;ŒŸˆm‡¶f2RYÆco†QówØxÑÔSÕb]×àBÚí.RhŠÜð@4%J{…«1¥4B(‚@âœñ/Â{¦S¡µ¦ªýƒSkP›Ç}K¥ôÐ'§–µ­aP”ެ¨ Cÿûò|<….7M†š­íMZ­6áW2µ’V³P¤iL^fÞ@ì*5BX‚ "Ë2ª2§®ýë…€º.Q @É‹ ¦¶Íâ]àœˆ’2hT¤ÖûʪÀ'•;|«¸õÊ@)$2p¶q‹þ¦ £�)u]'qtwûÌÔ+Ò{Ъæû¨©WÐîͺ ›N­ÖŠÉÄ ¨èv»|÷w'Rvú}º4àÊQãÊç´ÌÒ!¥„ , ‚0mZl‡,ÌÍñÈÃ377G»Õâ¹ ®¿i•·¾íCüÇŸ}ÿò‡ÿÏ¿ýÅÌ/FÜzë-|äÞqãM×Ón§TyÁ¸?áÏßú6n¹å¹tÚ‚¨ËúÚy’4å/ïü nºù¾ó;¿ýÑ.IÒæ'~ê¿òú׿…s.²oa–(h1?¿Ìåõˬo¯aDi„ 4£ÍZ튵MnþS EÄ{Þ÷!’ÔðòW|[ý3B‡-Ξ¾@Ún±µ³Íd’óÕ_ýµdyM·»ÀìÜ~^÷º_ãþû,-'8’$Ë€••e66Ö)« W<‚$<ø0/yÉ P ”ÐH ‹sD±&M#leŽôû[„‘"íôØwày¤íR+n{þs‰Ó„Å¥ßJW9Ã!ëklhÒô9þÎÂÅK%>xžõµu66jÞô–ó|ôc?Ë7|Ã|Ó7~5ZÏRVÖI-EQ“B ”°T¦âÂ¥ ,,¬5Ýî<Ö,/ÃØš<\¾4duõ8íöûH“„á c42Ürë·ßþ|‚`‚V©Cʲ¤?D1EUñK¿ü«5Ï¿þÑÄ8á7Rhá7_üd[4²±�ÁƒNS­úͱÛí' aac2žçaE um¨ª!Uc?"PZ{=x#“ßµ4‚f,¨©Lé}ÜBhI]”(½«·Há­Vªª" Rœå jï½úüÕ`0àÔ©S\¾|ÙïðÎÌ0777݈ªMÍ™3g8uúYžÑjµèõzSÕÊÓt¡HUG;< ¥ ža-aQ9{œ–ôÝ;—ÞÁäÒ=$úz¥ÑJ“Å''çJŒYr”J‘rhód*<” IÓe”¬ØÞ|a,‘ê"‚Î3,( F+´¾ ¶p¿…ñÚÝ ƒ…&Ö=áßú³Ôõ˜‘;ÇP>FÜ9AÔ^ò¯ß«Ï¬:ƘzGAÝDš‚l|ÙÊ’­­-¬µÌÍÍ=å`u8²µµE X…(žCuQJpå6®|8Þ[$>›Àj»Ý&MSVVV>K^èçgŸ¨X œ9s†õõõ¿}nЀՋ/RUÕtnàÅ3{µW{µWOFo‚òv7;?Xõ¼ÌL³•>Ù2`ïùøYÕI>¦(³)«*⤔ueÑ:@ê¼ÈqÍI±Ö’ç9Ýn—‡­aˆ³†²EQ£ªÓÉå•´IÓ)'æÛ;}Vö-!€!Ë2¢(¢,KÀ·`Sã,äy1Hò<Ã9Ð*" }*¨Ä1ਪ’²ÌQJŦñxõŠÍ˜(òpS)&U–ΫSkƒ³ ´&h”d‡{UL²1ƪZE!ÂÖÌÌtɲœ¢ÌHâ”,˰Lm|k¿ñmüB(´Íq¬½ç¤òÁRû„›AI…Ž5UU`-”ƒ¢ñ¼ åØË ­Œ1äyI»S9E‘#(‡ÀQ@ 5¶9î>Œ+¤^(#%R ï-Y–¤q x;ƒ]Cdk#²|Œ”’v»Ý´0¯Nl,²ÌûnÕÔH!Ñ:À9CÚŠ©M‰¶‚ÚT„aH…8gšß“»aòPÝÔ†¥ÅUœk>SУÎ%•¬î?Ìø÷?ÀÖÎwð;¿uIð+üìϼŽžsëk¬m\àË^z <p’Ç:ÍÑÕ;zKËûIÛ=vÆû÷¯°½u‘ÿüKoäG~ä5¼ï}ï¢FÜòÜÀ·}Û?å·ë-üäÿ'~àû¿ƒ[žûB:Bk.@(ŸWÔíRYC'¨@3·°D’v©+Áö`Ä»þê½9v„Áp›K—/òÂ;^Äúå o~Ë[øæoþÞ÷Ýíhwç}z<!¿ñºßåw~û­$‰ÀÔQ”bmɉG)Ë’µµË;z„Ç{Œ›o¼š(©«Šå•%ª|Œ1JhâX"•Ù ¥-++ „¢Õí0 )ª’0Ñ?v�c „$Ý Xèµ9¸Óêul÷)«ë®§.+r—r~mÈ{ßõî|Ç]œ=ÓçìÙ’ŸÿÙwðàýgøéŸùwäù%ÒvÄp¸Ekïj+­ÔÞ7IÛÄI‡ªè°C·;G>1ŒÆ–¿¹ëoèöèv÷Uììä¤qÄâlÜ{–o¸›o>ÈUW]C S²,çÁæÎ;ßÉûß?_ù•wðoþÍ÷±²¼ÌÖæ†·Â¨<8Åù‰®çdsFSo¶]ÏÌÉdŒ”Š$I‰’¤Ä%UU… ãñØ+Ý%àjâVH]æHE³1âàÙ,©2lƲ÷ª©Z>Ï'„QÒØ˜fCÈonh-Kƒ©-v/½ê)©ÑhÄù çކôz=™ŽÕÎ9jS£¤¢ÓîÐítŸ~Á*D´÷SKÁηˆ\HGÌ4‰¼á3h²%¼—[ïÂMpì­}ˆí ¿M'}­ù—½¿– ê:c{û$Jµ˜™¹™(ú\%i¤œ!3æz4BšSÐ;ìC¶žQp5�æ‰fo¥wÜ!/¼‹É…¿ÆUÄ<ô~’ïžÊj‹~ÿ#(iXZ¼‘8YFìµ’>i 2+6 ÎPLVAÅO°I’„ø3ø`0??O§ÓiÖ»wk )WÑal¶A5:M=z•®N½b÷êÙvmΞìÊóœíímŒ1ÌÍͱ´´ôouc ÛÛÛŒÇc’$¡Ûí>ÍC«öj¯öê õÙç9§OŸþ$¯çO|Íh4"˼�$nì(÷êIœÁ{ Zi‚ @)Ý(#½ï¦5¥ ¯ðTZ£¤¤(‹¤ùöš4IÂS×è d2™`­! }kÎh4âôé3,//DZO´oZqÓ4¥È ” ‘R¡”F Ae|Z¼£n H„ J•Tõ¨ šÒÓð¯4Ó˜Ú`mT”‡W}–EEY¤iS{0¼Û •$RRyœ+kª‹Ýp&¯„­ªŠ²Ì=Ì3‚@{ŸÅÆcT‡h 2B0N| < á,¨ƒ0@+í[‚EÛn›²­%U…?^Öû8ZëÀtä¸7!ö:$ù× ƒhÚºò2ÃYÛ( µ©qÂ0˜î^ìªá„(­˜¬೫ìÕ8ç|`S3©V*ôêºæýwá&¦qÑ�� �IDAT°“k+ªª¤® a¨½*¸È1¦ÄZÓW9²,cqq޲,©‹Ê6G>)(JC¯7Ë‘ÃóÔµa8R%W;Ä/üüàç~þ—øŸ¿/û¿8vd™ÿñ?^Ï¿ýwßÃqþÜ:Ï{Þ‹‘F37»„A0ÎJfzsœ|ø!¾ùŸ|/7Þ´Ÿ¿èÔuA¨¡ß_cqß<¯ýþ¯å§~ìœ~øG¸åæ«yîí·sEû ¸¥á‘GáÈþ#DQ€µ5aâŒdfv‘ÍíuzøÿäÕßÊêÁ}üù;ßD^õ9zø¢$amó2ýá/ýÒ—ò§o{'×^s3çÏ­ñ_õ÷ØØ„*‡CG[\qìjNº—²(9xxŽ0ÉŠZ«© üÌ™³<°ÀU'ޱµµNiÚí¥-‚Œ5(Ë nT“RKL]PI&^^ä9“|B™Ì´:q@!,ue)„ca_Bo1âÊã¯ä«^ù<xÿÞúGïäÏßvÿëN2ýK~ôÇ~€ –0É2taŽ|H^§ Æöí;FQ:Ò4e{{Ì{ÞýAþò]àî»a8¥1­NáÈ[MT,--²¹õwßý~Þû¾¿¢•¼žV¼€;;;?~”ý¯¿—;¼˜pñÂùæú)AY•c‚`ê}še9পrøkßZK•çÕú€¯æÿû ¦ ¤Zr8W7j*ÓÀÕp†W×5ue¼Ÿ´3Íø¤PRM7²ŒÙõ|V!8ÒoxYãžò gkÇc.]ºDY–Ø€ÙÙÙ'LXœuŒGcêºfff†ùÅù§TÅõ÷[}J;Þž¦ÞO%+&Ù¹Æ2gá™¶Ô¡º‡‰Üó(]ÎðÒ_ã¶ïB^ЉænC†KS ì\MYn“ç—€˜ X&IV‘2úÜ|6B”š!ISåkdù9‚VŠŽB 晥(Èp™hþ6\YÀÎ&®ÿ(™|'‘{!²s¶ÊÎB1„Éb’·hµ"ewozÒVg–z²M¾}–MØ=ø·†Êìš~!<“vŸ³Os5N¶¡sˆÚää£sèþ#$ñÊXÝ«'­F£/^¤,KVVVèõzOPŠYkÙÞÞž‚Œ™™™=±W{µWŸ»Ù­OP¡Zk)ËrÊ–|ð²ôy<ÿ‡«½ú{€Õ0 ¼ÒÔ¹iX“WS…hb…£ªjʪĹ­4Z‡S‘ÄmêÊ>ÌÅÓB‡Š4IOÆôû}â8& C”òÞŠ»Þ§»-è~(Dà@`LEQä$©Æ#HqN`j‡’!}À• çÂI´Š(k• š©‚¢(0Æ4‰i!¹5SušW¬ÖTe…T…-Æã>BH’Ä{‚J¡e£æé<8 %´Z)ÆÖ:¢¨kÆã1ZÄ-j�²Ò*)°h<@–>ðI+IÆÔµmŽ‹·9Øm·oµÚÚÿ\ÉÉ$C)= ¡’ÒïÈfÙįµD©pS£¥ô°Ø™æ÷h¥%ªm”r»ÕRWõ&»7êî1ÇÄqìC5œ·HðàÕÛì&ÎyűòíÿÎ2ö½ô\JÂH„ºi¿ö¡ZE1ñçM%8+©kKÄd㬠óŸ½+.ž}˜ç\}Œÿøÿ7/¹ãN~ù?ÿ9Îræì9fg»¤i‹ë®¹%gèvz¬mm2;;‡‚ŸýùÿįýÚŸrÍ5GøÉÿ>X[5¡r\ºø/zÑ­Ürý>Ž<Á…³Û|ôÁxä‘‡ØØØ Màâ…K¶vh-‘Z±±½ííÂB«íÈë17Ü|išð»¿÷{œ¸ò8Y9Dšñ¤äÀ¾ìl•üÂϽµuHI·QU%'ºŸ,ﳸÔ"MSÆÙ˜3gÎÒ›kSUçÏ_àÈ¡[¨åcÿK‹sŒÇ%½n‡ªªÐÒûBy€Ú¢25Z Â8¤¶%C"5‹¨%E^Q–’@´QAD66”EMwˆcE1ÞD˜ [ôIãyÚ«óœ8z·ÞxÏÿÁÞðû|ø¾3üèþ$¯ýÁogi¹Çò¾eN?vÄ„Q‹²rÄÑU [›}îûØ=üÞïþ'\c<‚²„0KÉáÃŽ^O‘g`ecm‹c'òšoù òòÎh$Ò8aye‘çÞö\²É„ª(puÍül@kvúÛ()I¢F^ñ®C”ÒÇŒžnìŽA`hBç8VBËæÞ5E†sµÊËë©âTI…³!½ruwZUµ©‰ƒ¡×l Xë¨+‹j6Švïko+ µÄÊ=€§ª&“ ëëëÔuÍÂÂÂ'y§îTŒ'cÒ4¥ÝnO½«?ÏÑ"\UA‡nïz&“G.â\4í~Ž âS< ztz×a]ÁzužÑà4œ|³W„s· õP×CÆãǨªmÚí«ˆ¢…Ïññ SDï¥Ì™L£eב.Eй®>“*Bê%âîÍÈÅ!“Í{\|32"p1s‚6¢#F Æ[tí>”\DŠEžYŠêϼv»Ç€iKßg½Hr7Ù . Â9{¤«¿oQ¬¯¯ãœ£Õj=å (Ïsò<§Ýn?AA+d€ìÀ—È'kèÁYâÅzï¶WOZõû}Μ93õøýDÕôî=:nìö’$™vczñÌÐØ«½Ú«'¨FQÄþýû ‚`ºö(Ë’ÑhDžç(¥|–Q«µU?Wë Q¬³TesfôIqʃNç*ªlB]8¤³`j¢$F5º*Ï›ÉÂU]5=~Ç1³r®IdôJÉ]hèÿX &Ða£´ £ªòþ®A`ŒôjJúVtãÛ²µR8E^ú ÊIŒ©J!¥a2£¤¦ÝöæåÎ)¢(šúLXk<@u©<”"ÒU%RZ­“ÉxÚÆ{èe†‹,Rjâ$"‰ÛTÎQ¦Ç2RHÆ”äyAU¤TD¡k´üûùp'G‘—US×qœ"…¡ª ¦ñù)˦59öÁFeY—y\‚ QÛ6ÅUiPÚO¼u¸Ê D5¦ÞrÁ „?»ª_kAk…TrÞåSÎ%žÙU6«dû ®ÊV)²·™0ªÊ`Á– S• Rþûh†1ÎJ*ãP LåUÑ×|f»1ƒµs8*¾é뿚;nÞ"ÿèU¯æ=sW¿ú›`~á“шý«Ç¸çƒ÷ð?ø|ä¾5þÕ¿zÿô[¾™ÅÅY;ëÌuS;›ÄAÍÊJÊÙ3g¹åæç0Ù.¹ùùÏãö—¿ŒÑà4ú�¿þkïåž<Ê?þJØÞ¶ósó<ú裦>|œ¢€¥}sôûœ:ý0Ϲþ9œ9sŠ£ÇÐê¥|Í×} —. (sÁÏýÂopÏ=ç8p`­­>•1ÔÙ˜²Ê™‰(Ký÷~˜ÚÖLÆ9­nÂh4æàê!–ØÞÚÆÖ9i£• ®,Ö„P±ö°7ˆ0V`mMžUÈ@Å]t4KQäE . •Ĉê¢DH…R©oqî€ri&ŒûCÊ|ÌÜœåà¡E¾éÕ_α+æøó¿x;¸÷Þü–?ãË^ö%$q zÝYpÇ…sëè ág~æ¿ðÞ»."„cqŽïqötŸk¯;‚ÓŽápÀ™ó5i¬™éÎj…1JF„a›ÙÎ 3};vk ãበ¬±L†C¢(¤ÝN¨ò’¢ÈID8ÖBDÓÍç ® ÞUaêªYLz°j­W¢a@‘W)PAà­j¯à÷›(²¹æ…˜êq¥»WøX”ð~¬Öú +k+êÚ>0o7ðÊ¡»á}vªšß«Ïoí*Vûý>:ÐhõÉjÔÝ0Æõ >öÑñž÷¾‡[n¾…#GŽ<­¾«š0œÃ˜¼yVmŠ8Þÿ™¥µ?­&¢Š0œ§=s¥é“gog²vêÔÛh׎hñ‹©‘dãǰ¶OÆ$Éòç'B*ïk÷!EN^ p“³$ (µÐÀÄg\M­|µ™`ÖÞO¶þ*1Fé1Q¼Qäo"#ê¬B2âÙ«>ÜÙÙamm )%333ÌÎÎ~–­ù˜@q1¾Hܾ…tþ”n=[{Bô‡v7-ó<g·ïq°ªHfaÆRì<L=:nïºWO^ ‡CÎ;Çd2¡Ýn’¯º”’V«…Öš­­->üáó®w½‹[o½•£GîÀ½Ú«½zRáê®X ˲†y¹é¿GQô´ÊxÚÕ²,)Ë )Õ4µ=ŽC²‰ßŽ¢„V+ñ*R7çÀY¢H7­å‡9‡i‹RJ¢F-:‡t:íÆu§Ù¹‹Ð`‘òq X*ïC*€4M û8 I’RËg%aƒ(°Æƒ œÀ �×xšzxh­WßZ[M'`^5›ã¬BÁp8¤Ýî4pUÅ!eUO/À¢(¼òÒ9z³]ªªlÞßCDzÊIT�xo ©‚ ¢6A˜P›]Ùµj‚r ­VËOF5œ(>,ÇV!I’RÅ%y1"MÒ¸EY¤ÐTUÖ¾5¹6Æx¥e–ˆãN;«ÜØ©* Ó©²µ(s„+¦†ì6ÙÆÏÑMÕ¼Ó€¯àq�†>Óƒ‚Ú톅É&Ì{ÄZkȲ )ýÍÞj·(мù=®9ï%R ¢(õ _j²¬¤®jT‘¤šº.j[bêEH$j”2Ô±vñöæº|Ý×}1¿ð ob}½Ïõ×ÜÆƒbĽ¹‡{>ô^>pÏI–÷/ñK¿üm|ý?þ\=fsãJTäY–!,Q"‰¯ØG] Y˜]d²µÁ¹SÒZÔ\wíµì[’<|r‡<+X\Xƺœë®¿šïùΟ¦;“ðÕ_ó :¨ê‚ѨÏ}ñí¼åÿsgÏò¼ç߀µN=vŠû®áÝw¾“?þÓ{™ë…¬]°°¸ÈÆö:í¶$J[S0??Ϥ(Œ†,..qësobv¦Ëp J‡yN:tˆÍõm¯ø•‰ÄT¬¦*ˆ�-†šP'Äé,¸-i( SW”…·òhµ[LŠœÉ$c¡7çÕèR²5Ù Ó‰b›õKŒ‹š›Ÿ{ˆåƒ¯âÑw–~F]¼ï®÷óœë®Æ9Ád\à\Ÿ½ý¯øŸðv’´Í­·,sûíÏcaqŽ£GsöìŒÌéõÚì vøéŸø²±÷#Þé8dº,.ì# #ö-/3êäÙ„$‰©Ë‚Á`‡´³¸¸€q†aPRRõÔnD‰RÞcÕ‡’ë,JFHIósÿ:صáð»uUQ•aìƒáŒ-‰ãˆ<§ÏdãcìÕá‡hlJü¸äáU]!„¡'›Foàë­7üÆ‚·`Q8ªfÃi¯>ßÝN—……fgg‰þ·äø 8zì(Gå¡“ñè£r÷Ýw³´´ô´«»ÇËhݦßÿ“Éi„ÐH¹Š”šgš:0Yš ÃQÍ «ÿ�΄ æ)ƒ€¼¼@»½L«uèsà©úé+‰÷è6;;÷2™¬7-\!æñ¥Ïs!€0AÌ%u_‚’].Ÿz3ýÑ_RmnÐK2§:J#“ÊïügãêÔ©SÜÿý8çØ`?GayqHiT"‚¿›‰£À˜uLqY®“†sôºÏñV:ŸpEQÄâââtŽø…p,þ6À+¥¦“®"Ò¬C¹îÙy½ìÕç¦Â0dff†8Ž9tèÐ4<í~õÕWsöìYî»ï>}ôQîºë.–––öÀê^íÕ^=iµÛ濵µ5íœFÔuM·Û%I’iÐø^}ÁjQæ´[‚ $Ï &“ ­V€Ò aÔÔ趪3Œ™àœ%I-Iœ0™Œ‰£Ä·Ì§1“É„"ÏPÚ{†q@ÒJ¨›öÚÑЫF½w¡‡‰AàkÚJÉÆYӞᨠæ^I>8ÊC¯8óðÃa M ¯¢Óé1 Ñ"ŽÆ“ãqF *[#Ä„8NȳªiU÷a3B@Y e%B“ç)!M¬³ ‡¬1„aË«a(R;ƒÖEY¢¥" #мÀ¸’$mù «] ‹ È+Þ˵®Í´…~<bjG„ã(Ë’V˜€äyAÄ8g &è@}À±ÄIÜ�1¯²ójQÝøI†ŒÆcFãŒ8ŠP*¤Ý””eÑ…I¯Är‚Á`H»Ý" cŒ­E ß:]¹Š8V”E ÂÇþø8,UUP9QãœAjsªQDæ„eDÈ©êWH¦PU«ˆ²ª©¨1Æ¢´ Œ5¶*|À’²W!eE¬#Æ[:û:0 …ÃÖcÖ.=Ê·}ë·Ðjk67†Üõ¾»÷cj[pÓÍ7ó­ßþn¼é:fçzTåkJâ( . L]ƒuÄQDnkÂ@ e@žMÈ2ÁüÂ<ýsÌtŽðêoz¿øKȯüòïðÿü¿?Œ w¼èKøÞï?ËÑcyô±‡áá‡ÏòÒ/û"ÞþoæÀþCy7ç/^æë¾ñ´âeÞü¿þ”ÿ‰ßae¡ÃööýûøA°ÓF–4Õ„:e<SšŠÕÕý;~”NóàÉèvBv¶¶˜›mqåGØÜØ&Ð Î*¢¤Ä!£¶®‘J“µ1€ 6#rª:'Œ4ab*‹Ó“QÁ¤D!­ A&“i–N`kÁìBÌ0_'ˆ2{1IêèÍæWþËOó›¿ù&.žÛ í8<y’¥ÅC\ºØçÌéKü÷7¼ƒ+Ž.ò•ÿè•D±æ¥ÿðKŽûıâÄUË<zú$«÷“¶fxýoü>,ÑZ2¿¼B’¤Œcl»Q“ºšV’gc¤‚^·…”’"›`…#Ò‰ÃÖ5Î<ue½5F³”gåÔ§ØZëÇ)¡ ^3¦Q‰º]ë¯Ö€ Ô v¶M†ìß¿ìá§m6)¼rãYí(‹jz/VU cœß§rÞOXk?>ìzßc¿ 5uÝ|–=;€§¢®ºê*^óš×0™L8|ä0‡þß dÌmϽù¹y666B°ÿ~®|ƒ…Ö-Z­cÅeòü"ÆLhµŽ£TôŒ‚«IÌ.݆šÁc5ùà <ö&‚¥khÍ_EíGˆ9@?ç¡M»}‚¢¸@–mcLI«Rö€„gT°X »‡© ÃùGNñŒÎü³Ý‡¸òð,-­Ð길�ñìõ*B°¹¹I¿ßgk{‹ÓgÎðàýp|y‘`öð•}§°³ª1œa<>³5R|b†ÁãU–%›››XkÙ·oßðBM3HÙ„ðÙ ¸>0ì)vö곯k¯½–þÏÿ9ÖZŽ?ξ}û>inpË-·0;;ËwÜ1½g:´wðöj¯öêI‡«¯gÝôoP¾T?/`5µÉ0¶Â!QÚ5äùgaqÓIÒ¡5ƒq†µ ­%MSªÒP;PA�R`ªWç(§!¦¶h† ¥É yžÑm'g1U¶¤2Ýn×·É Ð:"+&tºàc„3EM%‘ÆGQT>>ÐÄíØ«Âœ#ŒSÈÆÄ±¸EQyè!¼?k·Û¥®k‚@33Óc{{!"jWS›‚8 Ⲭ¨mIo®G]&YIF´Ò.R¤¸Ñ˜<ÏÒFÞw*Ÿäàq˜6µÄšÝIlÕøðÕ²à¨ÍÄ·ò»Œ²* ”$ gjÒ&$) ›tsC™iµZHKjï9+Î8²|Bærfgç(òŠÉ ó\uF{HTUJ:´ 0¦¤Û™z…aBUådyE’vР( d Ѫ2g© ×ø Šlʪ�[[’@“t;”eé­#L‰4ÖXB¥ÉÇ9q# ˜d#‚@‘¤Ùh€Öœ& Ú)ô‡äÆ’´{loA)ÒN—²,)Š!ÅhÈ7}ÍË}ÐP­ ƒ2ÐdŸñ#²³¶î•·‘Æ:2©q"a0wS¶¶·h·:8¥T’± ÛZ`ùða¾å¿žS?Èë~ý½œ=õC|Ë·ÿ3öíßÏ+¿úHUóÈC÷³z`÷¼ûÃü‹ïùvfZÞ† Š[Üxë xëŸ|ˆçÞü"þä>Î`§fe!3Ä”9ƒÑûWçÙlÑJèö66Îó¢1›Û›X;@IÁd¼É¡GY^è1ô‘Æ2?³ÀåËëT’VÒc4ÏÌ0öiµZØÙz¨]›©´r˜ªÄ`D¸ˆ8Ö´’6¦QYooèÎõ¸¼y‰…à 7‘º•$p1.SŒÛ´Â.ßüÊ—ó®÷¼Ÿv0C˜œ<ù0‡áo|?¯|å1^ú’—pÓ­7²²²ÈéS1®Ð"t’›®ÜÇÆvÎÂÊ23­EgAÆ“œ‹¹tù,×/¯�I'`}ç½N—@Kòl„Rƒ’!ÂJêZÊT®$ŽÛÔuÑ(\ B ¿  ¼Ô:K–QÚCPœB뜿gëÚF ¡i«…ÔçaQYCUÖòÚ‡™ÕU4éñt Ài¤PÔ¦¦*-a$1ã~¿y�‚µŽªÊ}ð^æP*&Ú =xJêØ±c;vìSþ< C®¹æ®¹æšg¼Q$É~¤  >N–] fÃnWõôÚ~úYIÜ;ŽŠºŒ†Q^¾‹bãÃ$ÝeÚé*"XyÊ`Œš$9à¡ï`H–mè˜@Ö(1Aü ‚ŒÍ`;‡×pß#ðÖ·}”ùÅ5^øÅm®³¬ƒÝY{ÖKÖZ¢("Ïr.^ºÄcÎ2Zê±Z íh‚Ù9j!R"üºö£»aO»›xARç}Æ›'ÉF— µ©*ã=¾§¯ (Ërš„¾¼¼ü·°¬*oE¦”Â"¨«Øy¤ÕPM *@îÕ½úìëŠ+®àŠ+®ø´sƒ'Npâĉ½ƒµW{µWŸ—ò‚¾j T÷¼T?`5Ib¢Yí¶¼Ú¦U?$ b67·¸¼y™ù…Ö9ò¢�2È‹‚þ€²¬ £˜¹ÙY?5V‚ÉdHž—8«ˆÂ33óœ9}ŽÁ`Àá#‡XX˜§ªk„üÿÙ{Ó`ÛÒ»¼ï÷NkÚÃï|oßÛ·'u·%!,b 6¶ƒã(P$!e*åàJФâTŠ" qùC>*©;6ªØ Ǥd¤€‘„Z¨¥FR·º¥¾=ÜéÜ{†½÷ß)Þuv ›$%RKÞÿª®>ê¾}´÷ZïZµÖó>Ïïß÷£Ð! RT¿,+²¢ ïŒÖÌ·¦ÄWg=mÛ!„ÄEžgX7`t¶ŽÀçyNU–é:›"êFá\7*ùé´"¬[º#1zò"£ˆçšz‰‘"S8Û“ç™Ìè‡RÜ×d  ”¡( ”Ò¬VËñ¥H¬YTB(œuIb ©9Üdš€ÃYËd’ ¡ÛaŒ¦,*ä¯o»çÓé„é,Eþ»®Ã9Ç0 ‰1•Wc4KŽ–­ }—M“I¤,0Fc<h“¬ueQ er×åY‚¡·Xg×,T)$Þùõ œRŠè-nŒâI¥0RƒÉïÖ5„àJ¢£ë[”ÔÉñg2²läç*‰ÑrtæhÊÐ&’6W’XktNðš¡ó(1ÅK‡ÌJ¼·4C èÚŽ"ßÅ(E×aûfÛ»Hi×k)#™ÉðÖ²XœPU²bB]×äÓm¬m)Š)&›  Í…¼b2ÙÂ;I}p“‡z€ŸýÙŸÁˆ¿ÅûÿÉ3üƇÿSΞý3†'Þø_¿ÎûÞ÷CüüÏÿ}þ‡_úŸø©ÿàgyî¹›<ûù°8éØÚºÈýó¿È'>ñ4W8Çî|;´:¦SÅ݃®\¹@9 BÃ¥Ëg¨*jNYN–÷Ù™OY-ŽiêE–ѵ-~:P<§årÉáá}„L‚aÝÖEB $h£ÈóoÏ`´Êp †ÕŠãûG¼¼¼Éç>÷9nݼÍž¿Á€Cû»s®\Úç~໹töMSSe†AXúÕ1W¯=À[ðÙ—ž'›ì°³»ÍÇ?þâ<?ò¯¿sçÎqûÎMžyæ‹ìlϹ~íG‡Lòо®±]*«ª›–Ù¼¤( e®¹þð|0FáÜ€1YŠ& GD¡´"Ïò䆩MŠî µv‡gY¯É€Ü€©lJÊ8:M³’+>ÅûBòÂ0 =Þ»uô_ˆÄáEUVx—ØÄR ‚„‘ߣ!(ò¼ (NyªŽÐ÷#6$ޏ "¢ÃŒå€Àf¾“e;lm½‰¶}™ããO2™œe>¿ìòÍÆúŒÚ‰DŸ}Œm}…éî·!äÙ×Å÷̲=¶·ßLÝ|‰£û/0·™™‹°û(dß<ü[! WìÞàÒìUîÙÝÝç‰7<Î;ßùNºþІ7Mj$¿wïyž3›Í‰Ñ²¿ßÓ\z™Vž§88ÏQèIÅd6£ï:‹EzÎËsvvvhÛ6ïìœ%Ö·áî'aXàϾ“¥ÜÃÞgow‡®ë¨ëšÙl†Öšííí×U9ßé‹£µ–ÃÃCŠ¢`2™°¨ÚãÙ¿4â°�aº¹¯of3›ÙÌf¾ù¦i¬µÌf3ʲü#²×7ó «CïFN •FE× ¡qÎbL†6’HÈ„Xk1F£¤@E!r¬³ÃÐÑ÷©“0–çy>Þ®=x•Û·oaí@]¯ Š"#“ŠédJß÷±6[í”Á9ú®#fcÙL , ´’e�� �IDAT2(¥ÇxnÚ‰÷> ”'Ä׬ÐJ%q$Eî³´Ã?–\5MC''ÇIL-r¬…\)„TÄÐã†!`:™°ZÕD¼õL«Š¶ï‘"O1jï !`m».…ÆÒšˆ¥R¤Xx…Ò Tr¤· GG‡ìíí#„dU¯°Ã02m‹$Ûžaè×ß+Æ$+%)Ë£S;®sïR†ß!¤'âˆ"â‚Ǻ†±L,_‡ ѬV5B2£)«ëw!b²œB"ë-ˆÄSU*CF Q”e‰‹6¹`]HXƒyÉááQ* ‚±ð'q\cè‰xBtXç°.¤r®<K…K}@ˆ HÅ`JI· #†¡k[†a œO‘RᜧmlX›ÚÖ…ØÁ¢MŠggY†R%IŒM/Óçw–ºkÐ*–€N? Ëõë—ù¹¿ùŸðïýõ;ܹwLˆ-.íqíÁËܹ},ŸñûŸ}‘_ø…H9/¿zÀ•Îò±ßù$¿÷égøügް¼zóÍê˜{‹ž¼½=MÛEî°d×°5¯8:<Æá™ÎJŒ0<ùäHé9{ö,³"G›$懨°ÖÒ÷Ëå’ºYŽœÝ$w]K×¥c´Z:Ž#ÁGNNN¸{pÀ­›·¹{wÅÐ7H¸wo@)°DËv܆‘Šÿî¿ýíßý—øñŸø –w^ÅãØ9»ÅññM{ò'á˜{ÇGX;pñÒžxüqf³¯¾ú*çΟ§*§Ôõж DŸ³¨““f:ßâÞýîÞ?a2ÍñaÅÁaƒ.`=gÏÅ]Š÷Ar¡«TVqÊ8µÑ“)ƒ bíÀà#.BÈÆ¨„£ëZŒQH)Šõõ©ì Ä: ™^Ü$aŒðŸn\ ã½ Dt™c—5~°©øKiDH,e¡éò<±êBð„àpÎ#d  Ñ¡dƒçè}=ÞGÓÍ áf¾æ¢…Ƙ9!œÇûçZ–'ÏQr|'•-}£Žm‰Ý}úPÓ†%Õü1ŠiF©Ï#'—A¾>âöRjŒÙ¢(.‚ëÑmïîÓ.>‹š\ /Îÿ¡Ñíoœqĸ¤nnÒ4/±un—wþ™ïAî|;;gäío{+×®^cgg'ñõÿŸ¶miÛ– .péÒe„ð˜ü.Ùä ôÃË,ïGÚüAŠü"1$lÔ0 kAô%Õu=rµ‚ž>¢ÈvÈöߎåvè !ŽÏµvLx™uãëÅ sºBHÏš©2â쀕%jûAB!‰¥þZÓ<6³™Ílf3›ù~NOšÓt:ñ˜©dÒ³q¬~-…Õ¾·kV©VŒmó–,cLÝc´àüùóTƒÒz’K4‰—‚Ù¬JŽG<Z ©Ì(Ï3м ï-]ß …âúõkk¶fvt]¦˜‘’eë…`­¥iÛuñKÓ4dYŽiY–\$Ã"ºBŒ<P)0™;¦“lÍR\.— ƒ%Ïóõb‹D„HδiUŽ"HdRV8¯S;rÛœ#Ê€‹ÁG²LÑÛät !ýïÝXÐU~+1ñGO¤I„í‰8úÁ!D$Ë5ÛzŽ‘zµ¤('›J©‘í­-æ[¬u„`RbÃYOD"ƧÅÓªýø¹’ãÍÚvÝ\‰ø` ÎŽß !Æò­™Ï·@„Ñ•—¢UˆQbx>ýy¡’+0¾ÆˆLDAðD!Ç"±À08@ ”A¢(´Êñ2})Ç‹_$\ÃdZ ¥Âï<ÊdÄ„,¥Þ3F¾œKÇš¦£*Š¢ úÄ¡•2¹�‘£cÑ3 étJŒ‘¦iÐcÌ͇ˆÎ41&6n–kL¦ˆŒtík-ç/ìráâ. ZNV÷úŽË—/ñôg^à•WhÚÿìç~‘½½Œe=ðÉ߻ɠïáꕌ‡¯]áÒ¥Kx×qpÿ€äEº¼wŸðèò³S0ŸO©û†²ÈY¬jvvwX^zéWΟãÑGbk>§í,;Û[„8çâÅóôCr¤œ={–º®Y.´mËÉÉR¬¨W+†Á¢3Å… ç¹tñ"UUqåÊìíí£”áì™3©ø»¿ô«|ì©g¸wïŒéYœÔü‡?ý¿qóæ=þÆüSd…BÉÈd;£Vœ9»ÍË7oðÔSçÏý¹?Ï{”[·î@TœÕSPdI¾|ñQºfÅrÕâ•æÕÛϲ¬ó]ÁK_ZRUp¸¸OyÐÑ:‹‘ 7¸Ñå YQ£¤h)™D˜ £ƒðI`á´ìBŒ‘Hõt!¥4RibkΪ©X-ˆä(•R •"D=2ŠÓ†.9£#rÜø1Ę„Üäp¯;ôˆ]ñÞ"dÂL&åX—îeé³´‘xF~òf6óõxhSäù>Jå,—Ÿcuò"™oR#²ézóá…ù‰DßCwÇ_¢Gt&²½õ-Ù”ÌAè×UÌ^E‘Ÿ%“"¾Œ_½Âª~#”ª0z+}!¿"¾æ×W Ähçn³¬Ÿ¡n^åüÙ7ó®ïy7oýÎRUTU±~æÛ¼($WÊññ1W¯^åÚµÑ Úîe–G+ìý8i_"îo#ÅÅuÁÓi,ðôï‰ý¨÷ˆËCˆ’éäfÛo¢îKú> þÙÿFh×Ó å?û9½Ub‘'À¶l³v6³™Ílf3ßd¢žÖlmm­7=7€¯Ã90ºH»Ñ>ÐÙ~í¬ÌLÆd2–æO^¦8¾t¤ï{¬M⤔c’ðÙ¶mj{I°†ŽÕª¦È ²¬@ʈÒÅb‰s6EìË’I1¡mS<?é1Ï ”ÑãïÏÖ<(€Éd‚÷aÜMOeVIŒ Á‹J®…ºÓÒëºvÀ¹äLsn ï3ò<¹ÃŽŽŽØÝQôMGˆž¢ÈñÞÓ=!²,§*GÔ€ tí ‰\ –BˆõçL ÔT%¥ÿÙ@UU £ð©M)­µ´íÀt:c{{›ÁzzÛ'ªí8¸×­_*’1=Hc(Š|túZ„P£‹5E£IÔéû6ÛÜ$.¬T8Fç$g»‡¡ÇèlTJ¥Ø˜ u³DÐ:‰ÔZ¨±É<1="£Ð*RI”)8}öÎób<‚Òg=uþ¥cÓ'W´ é’ÚÚÓÍB­Î%Œ‚1ji5Ãàˆ!)²Y–Óu=Ë傲(Bà¼MÌM!×çÉ9O £E«€ÖJHò*'BrqgrT«}oÄØl»%'‹–ÅÉ1û{»´]‚a°¼ðâ+|ôw>ÍC?Î VõÀrµbµJ/)Ö¿óW¾‹wýé·3ŸÍyã¢c{g‡ÿã×ÞÏßú›ÿ=_zqÅî®ãÖ­ÛÔmƃ>0"'’c°=Ûó’è /§š–´]M?„ävv–ý½}ʲ¢( (Ë’íímΟ?Ƀ�&gS6Fì©ãc¼Ö‹<çÎÝûüþg?Í;´MÍ»¾ã-üôô“|øŸþïïý2oxüß÷½ßEi½¡$Õ¤âÉÇŸàèþ/^¢k¶·öiGUͱnÝy•Å¢¡È+NŽѹáú££t‰àäd‰ðècW�…’g>÷g¶ç쎱ÄÅ MkI*‰6©H‰È ÆyüàGá?¢´¦, º®AˆlÜ:½n4Þ ä¸¾Cp ¦x’›:Æ€Ò ­M“îyýТ”DjD¤2iSb`t«‹„#‘~h×iF$­Å´Ö’F¥M>Þß6.­Í|= ‰1sªê&–è…¥oŽiÃ=òù>“ê0¾1Ü«ÞÕÔ«ç‰Ë›Ì†H^î §g(‹‹(U¾®Ene¶`ˆYÎ”Û ¾aqü4U<G™]@Læ}cœçV¬VÏ3ô7AZ”˜±»óŠêA´ÚcúM†›øãš½½={ì1ö÷÷™ÏSy.ÎcŽ®³ê?Gß|­é_ šÎÑÆPR®ªZk”R”U±cqó)úþbëbÿIL¾ÃÔäE*x,Šbm R2£_o€‚ªª¾,y¤ØÞÞ^—·N§Sò<' È È\°)®ÚÌf6³™Í|ó=£¿–”ÞÌ×IXMnU!9øNE§~èÉ‹D$Ožg´'5Â%›ñ0$7«”’¶mɲŒªªð>ñ>C”TUAÛö,—‰w$£h»ï-UU°\-1™f:qpp�$·XIÌ«›†é|NÛµk‹ób±X‹{Êhˆ2‰z¬u£8hñ>²µµÅ$TÄØ#¢ ,K²,Ç»Q^‰!ÚñLÒvŠL ¬HâK ï,Ád2%Æ@ÛÔcȳŒ¾ïº$¸Sç\r¤:çBb­ý²cãéú–ˆÇûH×5äEbö6qJ§Ó*‰fCŸ˜°BpþÜ„ܺu‹¶mÆ8w*µ)Ë’<Ÿ µbѬЪ‚˜ÞG°I|žN+œ8e–úQl!ŽßáËäîûÖ:f³ð©Ü, D¨CHͰ*+)‹äÌz‡·“;”\„Þ'7±RŠÅbÁlº½¼µ6äeÅ0 ÔÍ‚¢(ÈsC$à%Iß[¦“-�†¡%‰Ûõd™Y;‘ó,#Ï ¢1hmhV5zŸµ–dy†÷q‹‡ÄÃ=¶’C:¹\ãxŒ•R˜ÜàœC˜Lrº®E)ƒ1‘²LY®_ qÕ”;÷ïñ±~ çK>ÿì¹uû>e1ãà^‡Òà-üÔ_{?ù“•_ÿûyàò¿ýá÷óâx×»¾ƒãÇþ2ŸýýøÛû×X­Zf³9}wÂ7ØÚsþÂ>—.]ÂÚžãã),{û{8ÛsrrÌÎîYfó)«Õ ë–Ëå:0™LX­VÝ"Ë2òB"õ€šÁ¶Úh¤x‘Ñ6i³YqÿðEÙpûκŽNnƒèù7ÿ­滿û|䣿‰;ºÁ­õlO÷8¸{ÂÅóWPÑpt\³¿wË—Ïð»Ÿü4÷ïü2ùðÓ(•0!Μßã}?ú>„kLFf".(îÞ;á±7\ç÷>ýçwf|ç·¿Ùl†µ-Ãà0™çÒæ‘¶iqnED’%]ßœÝ@–¤TTUE–„HkÚYÀÓ´ŽªªÐÚ< >]ãÎyªIŽ”‰ÓšðeY¦Ò*eZƒÄZÑ„À»€Ðd2“¥ë(`ŒNÎê¾Å9;ž—S¬Hb8'F²A© 'g3_÷G7òü,¹ÜFøÑÞÄ…;ÐßF ‹[H¹1Ûñú+¶ò¾Å¹eºvÝ‚Á#E€b|z™|z!õ7Âi€| •—L˜As“f¸KhïbIFOF|ÎëìaÛD×ࢣ³X{ë(5c:½Îdz}ÄlÜÿo³»»ËööökâfŒ(Q1ɯ0¨9Cè‰â.ˆc„H¬ÓÍùÓ—°\*¤ð´Ë§ñîúì㘽?…T†Ü$ÓÁ©óå”Óöå/o_o7Œ‚,Ëþ€“y2™¬.Š‚¢(Æ?ÇN‰Ílf3›ÙÌf6³™?faõt÷: š©<È3"õ´mËÖ|Nù|›;wîQÞGʲy¬b±O¥+]×1 )¦~ ‘?m]­äyTéA­©–¬ãó§`|Hî°ÅÉ BÉÄ»¬ëñsªõÏÞGæ³-îÝ»? ›©¸gkk ïmâƒ:‡V†º^0 ùl;=TæGÇ÷iÛ†ù|JQ©ÐFäøR#d¦D ƒÛº»¶Åj‹69Þ[L^ k1®šT,'H%Æò&TÉ]ºZ-ñÞRB&ÜA׺Q“›¥™NK”ŒëbªÉdBY–t]‡”‰ê½çæÍ›c˜ÍæL§ŒÊiÚ†u]#¥ ®k?ŠáÆhš¦ÅD·v1„à׎ÛaèhÛ†’Cs2­hú%Δ҅AKÉjÙ$—ŸR­É«ŠvµÂÏryŒ19Æh¬µìíí%ôƒè±è«ok Œ®ç@Ó-)‹’,ËÖE §ˆ¢(p΃õÄXô#Sa˜mðN$”eµþ½Q™‘ÁëGAË­ñÚhœux×Ç¡é:ʼd°=MÓ$ÁŽH–™t¾³‚™™°Z®ØÝ†žnˆ }ÇÇŸú*Ëùà¯ÿ&u1›m¢f»äxayÏ÷>Á¿ýã?Ê?úÕÿ™w|ÛÛxìÑyø¡3¼üòE~÷é§yðá'ø‘ù~á¿ù5.\¼@«WH뛊Ÿî¾ÌÖlB×,)sÉjuÂ+/ß`{>CJ8>>úëæÔÝ|xx8^£9Óé”U}i!ð®E鄬èúÄóÌcNo;¬µè|‹ýœŸøÉ¿D5ùÇ4mÇ_ÿ©çÑGÏðÜsŸæäø€øï#ǽ{÷1&gw÷,]çØŸãéÃϲ½u–®·<õ;Oó±§~—øÞÏó_°¥ÂÛ€1+¢€O~úˆOüîÏñ¶w¼‰"‡® xñVQMö8:é‰QR]Þa2K.Ôz,™Oçôø`Öz@¬7b²˜î3OÄNœlí`v.ŒüÕ­sìà‘"#«¦(e©ëUÂ’(Íе ŸA7šÆD„0 b*ÖÒ|Xß']@D”†ªªF·v‚Œ§ûæ€6&ÏqCÒ£*ÒÒÝ8V7ó:Ðô„LMôsI Ó¸M׿ÌÉÉ—�1gÙÚz¥ª/_Ä×I$‹ã3N]w›º~ç´žQägÉ' Éf òhóBH G°C‘çhöÐñßP¯^!Æ‚­ÙHµL§˜†¯“–øÕé&ÚCâê&u8ÄOQL™N/ÛdÙ.Rl\ªÿsº‘ÿe&ä9b{y|‘Postò \‘³«ßIfvÿy!´kǰü&WLç2™=†Ù¸LÄ* ¾žâ…ÿ_Ÿíþ»¨º™Ílf3›ÙÌfþ„„ÕÓ–ôWcÑ“b¹XQÇÀåK—yõæ«Ì·wiÚ–ét‹ºnä B0NQJÑ÷Ã:‚žçÕèàÔ̦©¥»ï{NNŽÖÐ{ç<ÓÉ”¶ëB‘eZœM€}©$EQ"”Æ÷cŠÜ·mËl6[‹Eu£©ª’aHBjY£‹5½TI™\¸BHªÊbŠŽç µÂÙž¦­ÑZƒ A F†”ˆèÌP7Á»T,£Ú²<§é’“Mk=" ×µœI¤Fà…OŸÎ: ŲÊrB×õXPR ¤"‡ 9–òxÐ:‰¨ZëÓ.Ê‘ù¨¹wïóùÖ謳8gÇ—ÿ|¤mzBÑÚŒ‚h*— !9jÃ(š[;PU%]×Ðu=Ú(œ‹·Dr ÎSæ)^æü€sqÕspÿ€j2)Ð(b”£Ã/}_!"ýÐÑu‰Ÿ›Ò'Ö%Þpr²@n¶íÖÜXçbL@>$A¸iâ@HEßÛtì”$Eð©í‰ãú"1G?ö”G;âô}‡·Ž>JBôm(²äPô>ñ<WËà‰!ж …Q£è;ÇÖîÏ<÷YÞðÄ“|üãωô]˪^Ò6’¿øCïáäð6o|üa¼z‰`[f“‚oyãã<õÔ'øüg?ÃSO}!E¿ñœœsöÜŒé´äÙnp|rÌdRQ–ÁwÌçÏù giV5!&áû4—Ö†¤®k¼ ( yVP–¤ ØaÉbÙ ¤d2™•©hÉ;‡í{šÆ±ZÜ¥m[®]}€¿òWÿ"ó­Šé¬ä“Ÿø ¸xñFEb”lÏwÒЬ:Œž³8Y¡DÆ~ýƒüâßù CÏå+—¹~ýq~ìÇÞÆ+¯ÜãCü§Ü¸qÄdVò½ï}3Ÿyæžþ½gR«ïªco{ÆÅs×8¼{€’ž½½’££%‹“gÎî“)ÁñÉ!ZéñåD)G‡Š ëÛq³F!¤^o¬Võš©|Šò£$/J¼‡æøc2æ;»ôÍ’¡éG·þ !§×Z‡@§r+ï AƒMNÕAaŒ©ñ.ŠZâˆ7IlJ¥4ˆ‚ïy! F�ì) e3›ùú«@‘¡ÉPl¢ejb´x_Ó4/!Dr…çùZOIܯ¥¸á‰±a C*d†BXŒ ò=ŠòY¶÷ ~"r´ÎÑjB†•Â�®#6X¹ÂQ‘£õ ²Ù×¼l,FOßßÇÚã„0Z­Ðõ’¨{d>¥(/’™ @µ¹¶þHj«@L¦˜ý‡ÉíK†ÌLóÇÀìþsÜÖ·i>=¦z€²º‚Q“ÍqÜÌf6³™Ílf3›ùJ„Õ¢4ôý0 Œ‚§ã“Ÿü$Ï?ÿo}ëÛxë[ÞÂÖÖ.>œÐ4 RfÜáܹsXë°6‰ÖZ¼÷‰gCGG…¤©“ó±®S wUMÉLŠð˜¬ÀõŽÌdä&©0&E{–õвª˜Us�ú>ÅnSt¶ObÇ|†]&}ŸœcUUÑ÷ÃèhM…ZZ+ta0:Å”O9±�ÙiüÜÛ$tƒ’ÙØÔ JçTUF×7„¢äƒutvAïyˆkço*Ÿ #2aX¿üxï×bïd2c:º¶e6Ÿ¥XUyEž)Œ.ÖÑ@ RÒ¶5Æd8ë2btFU*Bt´MG`ík­¯IM<©Å<±S¥ÈÐZ"U:ovð(yV¢²ƒ”R ¥`:›Ò4õ(P§ß™X–16ÍÆèQJ`&vèY®ŽFv— ï^;¤TÄQ€NÎÑ\¼™cÙ‘ÅbAžçloíà½Ç˜|<·bdÝ ÃùÉ|ŠÑ†¶MÑüÙö$‘×Ös2K¥Â.¾ŒQ)8g“ &$E‘„6"E^ „"‰Ö£ !x¼s(©iÛzÜ@0¸a@åŠÎzŽ'4uOUMqA²³»¤E Ëá}Á›ß4á;ßõvž~ú·xìÑG(Œ¢iV«ŽóÎ!•bï Ïáÿ¤kU™ó¥/½Â#^fgw—7OÒÔ5ïøÓoe¹¸Kß)zè:Yf°CÃ… g‘ò4¦'^+æóyÕCÀûÀr‘â°1ä”Ù>Fk´P í@–k„ŒäZ³é ‹Å‚çžã³7?Mg[žýì1ËÕoxã¼å-o"¸äžQh„Q%@•—\ºvßü­ÿ›¾ïù3ï~3á‡ÿW¯=ÊñqÇùóò3?ó_rïð$œ9»Åþ_ü nß9àW~ùä#þ8 Š;·oÓõ'lí¦“3 ƒåÖ­»”eÉÎî<]'R¢¥"Jêôsï#Q¾Vlqz­ !(GEºOhôãO¬bAÓÔQ9;§/£Î‚ðH•6 „äY‰:qjQcÒ}5&Çlˆ‰«]bBK¡‰!ƒ‘ÄÕ„A 8P””Ä(FqÜ@È7óº•öªê*eyiÐîq|ü4Þ×(•±³} %.€Ø&22½ÉA)ÿ˜Ê®b€ˆ„5GYˆ–àîR¯n°¬ï@„éô ;;¡õ`†”ßD¼Ear]í0ÑÃÉ‹Ôþ& Û~Žš\†­+Äl 1|Ùyøcrǘþ"Žç"ñî­]P×ϲZ}!³pž¹¾ÌÖöÄI…T¯C\Á7ê2šÉ™7 ³ÿ©O“-^†öE(÷ !F‚o©ëÏr²ün÷²³o%æÛ›¸™Ílf3›ÙÌf6ó• «]׌‚‚Á…Š““/^áÂ…+|ô#¿Ã|¶ÍÛöÎSæ3êe‡õŽ|àCüÙüA.\<s)Î¥²#ïA ƒVRE¼°.PW®\aµZatHîÞ=LQå\›nlš!¬Ë°”Ö%Ljnj¤Ïóœ¾ï†nlœO‘ç¦]¢¤Á‹÷6‰—}KÁkŽØºå´ï{BðL¦Sœ³ô} B¤×>¥q=„¦·->ŠrŠ1’¾o’på-Y¦‘2¦‚/™ø²‰½ØNÖTþÕué#DĘŒmßcLŽ ©Z ”4ÎF¤!I "±G¶¬÷cròir§Öó$p ‘XªÆdxȲl-l:çˆ.¡ò"yfŒNW7ãžél²F$èQ¨% ŠÌ(BŒ4uŽÌž²ÒTƒé{Ñ:¹•´8? ÃÆ�žÅâxiK¥ †ËuµlFWnbWŠÜ¢Âi)Ù©X-ðÒ$Í <Á[”Ln?!%‘÷"$ä…Î0FŽ8ûe˜€tœ’°°6Á­QF¢tFžв ‚¦µ!² îz®?ü0ÿø×~‹7¾éI>÷éÏr0Ñ®ïûËßÏÎvÎ|ZpåòEÜ`ÑÒ  Å+/ßæøp…’šGy”"ÿ ýÐqñÂ)/½ôßÿƒïåSŸzŠ;wïàìŠÝööwXÝ#Æ@žåD1:‰€ÂI�O®ÛÄ1¶Ö®hCUV@*Sr–‹mײ½='øäþ½zõ!²L%W2![Ûsú®a¹<&7erÚ¡%xÁdºÍÑñ=¦ó)çÎnó}ï}/.8¢Ô4í=\p,V¯2ßVì"O:Þõî9s.c±ôìîܹ}BžKº¦Å(Íů1 ‡¬š#.¿ˆ¹¹ +‘ŠÊ ×ÁXfc¤,ƨq£%¹ô•R $Yž¯cúJ)„ÈŒ%E>á왥ô¸^’ë|¹:"/Òú=9Y0Ÿí§cäXœ§F½' d ºˆ÷ÃèäW¡"]O1Š1!+A¤s•\ü&‰J ˆcAÛf6óú“V¥Ì€ŒÓ¨÷tú0!tH"¦ØîZ^ÆQHJ* ½“ó ³?¢ ¡;&´÷¨ã‚‹ ’#(b 1Û"y¾1»H9?ï7™Ä-5R1Ýÿ¦ž,l#|‡©C×Ðñ9¬Žè¨(©Èõ¦P L÷¡¯VTm[èjˆ5–- ‡ „e>¿LÉÙEÊ]D9½aGÿ±_z]Î5(N�� �IDAT]Gí¿ÛÜbùÒo‡–âÌ·#ä¶=auûc4Ÿ"ø–Éö[™l :ÛÚ¾Ílf3›ÙÌf6³™¯TXE„TLdCE<ó™Ï±¿†w¿û»Øß=ÇoøÃ\¹ú0ReX¹téßÿÞ`:ÝbµJ<F)%™É)Ë )$ËEâ€ïè‡Étâ²E±Ž (©G¡‚ud%ÇØ»g>ŸSN*¤R‰õh4yfX,N(Šbä¹ö4MËl6Aõ% ˜˜É¶7@Šä{çÇçÿäD<m7Fã½KœO)q6©zRjP’Á¤Ê1‚R8ïéCëÔ–zÚÔ®µ^»âš¦EMƒR!ìèn“‰Ûše”e1º =Y¦>Ò¶=Þ¥²,ï-!$±3±Qó5 5•X t]KYVÌçÅŽ©Å<„u™ÑRÄ‘Ÿ*p69X}pdYAU•x'ÖeEƤ§1†££C¼÷Lg³tÜ”’Û5}&…÷Ö 8ëÐ:²½3E&ã"Ê'WŸ6g“SUMêJK¼sĘÎÃÞÞþ±îˆ§âm–DÕ8:A™ e$!¤ãè|Rœò¬À»!9DâPFãBb× !Ö¥ó•›§\ÙSÑÍ(ÒÁ0tÄÄ�BDÁ$/ÑÆ ‚@¢ Z`”fg7c¶µCo{ûûòÜsŸG„ÀÕà{ßóNÚú>Bx|ßá,|èƒâÃù(˺æíßöNÞô-oƺ)?ÿóÿ+·nÝçßþ/^d:êzÅññ17oÞä±Ç®rísh£0YÆîîø€Râ¸VÉFÁ=mœÄ0 •¢iZªª`:Í"•…eª²`çÌ Ûµœ³\öh%É3C5™sïÎ=Œ²œa›ž²œàòtñ!½ ) xöögòâç8Y¼…¬Ð,Û£KuÍ‹¯|‰w½ûÍœ»¸ÃñÉ=¦SÁÿõëÿ wîÒ¶‡lmÃþÎ9œ“ܾù ӭ˨lÀ…š¶o!Jº¡gU7ô½eÁŠÙlŠVŠè_s¥&wrBG¤k4¬îÚv<^éþCúotQ­…ùgÚºGÆc¬PR•„4ø!"trß9ç„„V1dݦ~ýÓ:B¡Tb¬ž2YƒØÁ£LLßðí"áKb¤Ú¤47ó:u´ž±µõdJ ¸qôEÚîUÚpD'z à Ì0!x^ão~ÅbbŒÈú€¸|…^ÑÈ>É´±¢Ôç¨æW)g!~¹ë[|ÓŸL…Øz€2Bé,„†î%šö%z±$#Ã0%϶!Û"è-<³QX_ÝyhV¨Åä'i8¡™©˜Ï¯0^%Æ£˜¾1áÿÉœ{ „>¾ð´¯þVw?…ˆ™O‘ú,ÝÉ]/€àZLuÙÖ©¦×röÝÌf6³™Ílf3›ùŠ…Ug#D…ÒEr,Šˆ‹‚KW®óùç^`{ŸO}úÞõßÅ™s3¦Ñspp‡~;wn3)&äy>º -!xÚ¾Æ9OYe†Ù¼"Çjµ¤,‹1æ˜L'„hÛn]|eŠ<12‰Üº}‡sÎ3›Ï“)¥èšÉdÎ`{²L‘wžžƒƒ»\¿~¢Èhš“— —(MÝ}™ø©ÆØoÀû$hž"—S«Tôà ÖbE(‘bá^2™NiV5mÛ®—ÞGú¾Æû±¼†„08åÊžpñâ¼÷Þ?f6ŸQäÉdR!D‹÷IlÑJS“ÑY“Üöte>ϘÍfk‘ÚÚÄzM"q¤m;¼OåaÃ`S?Jú¾KÂódNÓx›0BH2#ÑYFS78Û£3Ã7ºžGßðRçd&KBÔO¶Öc¤ÈK¢èûšzÕ£AÈÔ¨n” ‚,«å“©hÊZ‚,Ï�CÛ ÎRZ)ŽO˜N§ÄÖmîZ)tf\Ï` ;Xdˆœ$ÀëäF´¤ðB€2¯•lÅ®kG'¢Y;¢µ¬š“j‚)þ%Q&‡p^¤ù¾gp­sN+šÁ|ä¹Ï?Ëc<Ä~ý·¸zõõâ„¶^PÍJVCËÁÝ»äå„ahyæ3Ÿã[ßò6Î]¾Èõ‡âÕ›7xû;¾•í}ßͯüÊYÔ5‡÷—œ9»Ë+¯¼Â¹³gyéÅ/òçÿì{Xl7°µµ…B ”@™) Öö„ŠœN«Z¤†ÌèÔFŸi¼k !m8 }ßpxë>R Î_8‹sŽÕj·ÕH&U…RÌæsVË%;[{Ô]GÛ÷”YE Ò÷ ÝjàÌùs„à¹yë&W¸‚Ðõ ŠLò쳿˹sÜ‚i%úcž}åE~ø_ùQ¶g_àC¿ñ‡Ç÷)‹9[Û3æÓ –ýÝ}¤¬VKfó k{”JßK�ÁBHåf‰hš~}ã;å§Öà ¥’[ÜùN¡ð«†Sž7L¡È&%ø!J«crç(ç[Ø`_[Gþtó#ýÿEì0ºè‡q‘Š×RÔ?Ž›' P8—˜„ƒŽøÖ³ˆ’ `3ßHâŽ@€Ê`ë²évâ€I@Ç|‹/Ò¸%KxüW!x&¬ÀÔí2ûÌç2) Š !sГôYþ…¼€FñRØÚ"Ÿ=Ì x$[p5Òø—YÐ_õy˜Ù’™˜#æ—É‹kìŸÊ;¥Â˜ ¨°QTÿäÏ»Ò;;ߊ‚¥ÌYžîãÿIˆ5“ ßÁüÊw“o]GÈsx3›ÙÌf6³™Ílæ«Ve,hš½U‚Ìèš–gŸ{™+Wçñ'ŸäÓÏ|†.Fdž³Z5ܺuƒé,§l#/íÑ6=Ëå’í‹Õ$EcˉÄè@Û5„Y­RáSYVë&S)“ ÕZ‹É墣뇳ª*‹cv÷w©ëšf•âò“ÉÁ)$†¶nÑFðè£o`µZ DĹ“)ú¾áÔœ"3ç<R¨$:ùT¤ä¼ÇÚ@f*¼‹ÔÍ*•ÿh…·!Ó‰è)²’¶í0JB‘ÜŠy^b­¥w–Âè" Õ!øô{ˆLŠ‚IQ⇵–IQQè’ÌäÄè›×·d¹AËÐh]â\ªô�EYL!Ê„pО¦i) ÍÖ|›®ë)ò xé°ƒK¥`.±D³,_³7µ0´CV‰CÛ5 M½¢,KœutuÏ£_GKEg-™ø¡£µ©Å<„T4f²rŒø+†¡A¨‚Ùd—#«å  0Nz&[Sê¦Å[ˆée·(*D6Mb±!¢”Cå‚;¤Ô¨Aà'„HQ(vpTy”ëP¤ "‘2OØ®A„õZ\÷ÞÑw©ÐLëtþ’8Q&bCÉr¬Ó8ë˜Oæ„99>¢é¦Ó m Fjº&Pæs·ä¥/Þà•_bÿ<¿á~ûá^Õܺ ‡«ž+ΰ½{Žå²ÅºHÓ[ê®áüù]._Ù§î:n¾ú)þýŸþ1²Òñ~õ£tEkÇ;¾ýOѶ‡<týŸüóŽw¼…b^m±XœgÑjꮣ¬2ïÓáÐ ]Ñwãw‚ªÌ臎BëÄ\ ’gÃJ/ðÁAˆH"rdÔªlÀ Že½JÜYQE¤î;”1äEFSw´]*—›VsšÖñàõ'yá¹Û<ùøÛ©›fÓ„ôøW轜7ÄGrîܹÍlZ2›ïsáÒC|î÷osx”8}“™äðä íhO@GK7 „`ÉrØÛÛ¡Y.i–KrS¢UÆÐH:Ól%Cçˆ(t&ð!`LÎ`ÚˆT65Zg!FM–i¬ëðmk[ÌD~móÙÁ„%•»¹¥4Ú$7·2Á¤”³=bo)ò@o„Ô` DðDÊ t†õž,O…tIY±!9‚7³™o,}G‚™ Lõeó€`n Ã2¥)HüW-á*³‹”çP“-bž#R{ãŠLI@–¡0Hfã?ôj° °Òe²QXýjÏÃäLvQÙÉÖо9!_›S®ÉÌÕÖãDq¦B,^�oA•äù9ªsßB±ý0RoJÃ6³™Ílf3›ÙÌf¾jaµ÷¸àr‚T­‡G+®]{œÏ|êEþþ/ýïìí=ÊÅ‹o`µ¼Ãƒ?Ä»/sûî-|Ü'Ë&ôÃ@;XŠjÂbyD^HDô)<FÅ¥”Xk×¢êiûÔå9›ÍÆ$™gÉùÚ4 <ú0yQ18‡T 'Ð÷=1HLf°ÖÑ–É4gww—U½Äû°.§ A Q—À<Ï)Ërl„O/ÁG¤cÔ<$Æ©NlÆaèºnä/š5›4ɤï’ç)Ò–b÷)*o´!Ïs¬ÖPïˆ\ƒRcL*ÇB‰øà‰DLvê ôgé»)Ï´®kʲ`2™à|O?´„àÈòTØÓu©,+ÆäR”J¢Aë ï<BÄÑÉ ΓçFiì`“³Dbð£ Á¯Ý¦Þ;Ú¦Ædé»9—²Ö&ÊhªjJ×u ]OžçTeI0´=Á:Z›œ-yV ”¢iŽ™îä)ÓqŽ×[ìУȒñxX)éûô]C ɱ*%yžŠHº®C)5²RF„L‘ðX3b«jºvªZ›‡Y–³X UZ_1J¤ÒÄÚò¢¢mWÔuƒÉ’Àï\dw/¾|ƒû÷xâ‰Ç†Árvÿ7š[ŸÔÜxñU.]Ø£œTÜ;¼Çƒ>Ì¿üƒßO]/X®–<óûŸáñ'߈pŠ|ô£xïé:˃×¢nîñܳ_àÚƒg‰1ðâ¿È÷¼ç]h%Y,ãšÊ fd™‹ÏJEcBeçM[£U†Ñ©l)Ïs¬‹Ò‚3gÏ ¥ „?ÏóÄèmꆔÅk®s€</°ƒcèˆtM8Ñ\¹|•—_~5]?ÖÑóy5ªA5-)Ë+H mxå•›ôýÀ™3È’Ù|ŽSº¶gjš¦'3‘¦iÈóä >99" –"Ÿ!PãùÊ0¹@g‚4A“¸ÇF&>noÇc–Ö†þØ{óXÛ²»Îï³Æ½÷™îøæz¯Ê®ÑeÛx((ƒžÒ†ŽRÕʉˆhº‘:‘襑èNé(!¢›$t€¤Qš“ À°«\.×ðjx5½ùNçìiMùcís^¡¦[iÀjƒö÷é©^]Ýwï9k¯}Î}Ÿõý}¿Æ¢”Áõqp5“#”Äû–)t]÷ ¥4Rå½%Å©šrìHJ‘™ãÐû!ãWP%ˆ@èêM|Gާ­±Ú  ›³] ôC)Oc½Ë¨?ŸP/{FI`º‚Å.EòÂP:øïî”$‡Æ DÃûÕÈïþXòÉÆIüÆë`*XìQ$&lÖôOvr~4º¡ÆKðe ¢8Þ­H³ó௓#iÈe/ u9.Ò¨Q£F5jÔŸ¬NfùÇá¢H%(Ë’SÄ`ù‡?úã¼õáwð~øGxù¥§™L-uS£µa¹\ò‡Ÿ{œûï e5¡i:btH¥9>9ÆjÃbž³š2<ÉîÔõvn¾ö„pÞåñ|)B£1©”¢ï;|HTÕkJ¼Oha›s ×µô}Ö%1DÚ~ B5RjRˆX]²X,ðÞãߊuŽX2I}—áS]¯èûbh}/ˆ1Ò÷=“‰òMócsо­‘RQ–Ù…«uÉ:æ1ù ”- 8„Ìß1€J%‘)á}ºR‚-ªáëôeA5Í…R>äÒ-¥$Z—8×S7+¼[1›Í0&5§p.dÀm5F—híè{ŸG¤FI1Œé±_çQ®Ë¶”Îî[!ÉpX)œøèi[‡ÚÔ¥4D‘³&C¤(px\6ç·E±Ù«¦ãøø˜j2ÁZB“DBN&$rÑpŒò?Ý24¿““™Gøõ¦˜k×»ø€åüËü÷ Zç ËõõíûçܹP’³jÃ�ÑsœCl¬µH9r1×6;Yëšw¿û+¹zý©)B]·H"û{ð…'Ÿåë?ôf[S¾ðÔ“”eɇ?ò!®¼x™Û7øôg?M9Ýb{÷,—Ÿ{‰Oþî§) ÅÝ÷ÜÍÑQÁ3_|œ+/¿ 4¼÷]oãädÉ|V1NBR¯j +" À.#yŸ ¹”24MCÓÔ`Öä{M„4”€Eb‚Ô'ùÿ¥¥ ´‚ss^»r“áË&W5ïõÂZäI‘óoO=õ$>úU9ZÃ;z—÷p×u“NNnÓ6°j—9Ÿ¹k©Û;Äyt½d1ß$}ï¸}û6MÛ"Õ."äƒ[D/HI¢´Âû/ƒBŠü|‘É$;tRÌ{J Pá1dW·T!çC#PÒcîhñ>@ÊEq]±…öÖPðF"†@$Ç Äo”VÈ!ÛzS˜5|þú5Ò“?#1¤,HI’DßµFý‘ÊpÇä�ŒQãuõ¥”)wÀÌ»É?õ¯3tÿ´Åq£F5jÔ¨Q£dJ„&&A! UUñw~àûyÛÛßÁª]ñ½ßûŸðâ•é:¿ÉCB²µµÍãŸ{‚岯ƒÖ†ÙtÁb¾½ZkhåœÛ@´¦iX­V›ÜQkìP,u§p)„€ë{ÙjŒÉÎ2Îõ·dQL§3´ÊåQÖC›|.ëÑÚ`M.'ʆkó˜|ßu„“÷lUeç«‚“å 1FʲÜÀc e™£³Ù”Ùlžak\²Bc\­qó|Ö¥V)å¼±„Gªˆµ*;zÀ„e°šR¢mkÊÊ0ŸO躆”<RÂññ!Ëå1Ëå1u½$¥\5™”¦ìŽ-Ë‚ét‚÷Ž®ëXÕ'ÔÍHL&½óÔmϪiéCÂGh:G竦§÷¦s4#„@ŒùZv}›3$ÂV̦sÊ¢B ‹5S&Õœ%'«š£å —Ê”Ó)¦¬0eIÚ–Ì ””¤š~Æh“ª1ÅÍþiÛœÛ÷ý°J)7NÝu¡X†…)gë)4!@×õt£ë1Öc Äà:ÌÅb¬-6×| ‚Íðx´Ö, ¶÷¶©ª!#‹ù”|€§Ÿþ"UYòÞ÷¾‡ßòvλ‹S{¿ôÿ~ŒeÝr×Åó\¸tO<ù8/¾ð,“ù„{ï{3'''ÒÕž?üÌç)Ìœ­Å6¿ò+¿Â~öùËù/sîì¹Í^<<:¤( šºæÖ­[ìíïS@H±Y‹uo¾/âÆÙk­E¶©¦(¨¦SLQà¢Çy- ´É^²Rfo]·8!bÂè‚édNU q ƒ<™L*æ‹·)Ë’Åb¾qDZ6Ãý{¬Õ ³yÉÅ»/0_Ì!róæ7oÞ$øÈ|>çèp98f¯¿öÇGGÒæû¯³Q‹!ö¢ï$µùÞ]g¡®ïËüËFÇ@JùàÄûUÒu-Þ%´.軈­ ¬-Q*ç®ô㫔ʇÃkK"ß“J œs9–ä þ;0ƒóÕ{‚s9ÂÃHS ÔX,2jÔ¨Q£þ$R@L€éð{«£F5jÔ¨QZiÂ.’ˆïË<–®$O?s…w½û]|Ó7}e >ù©ßãÿøÇßûþïck§ÄÆ–\þìg)Ë)¿õÑòUx”W^}…ßü­_ç[¾å?dk>¡*ÝfÄz ¢ÖpêÎx|†cb¶È,„Ο[V«åвš€P´¡ÉÎGç7@SˆDïZú¾#ML‰åàä4›ÌN)]×a­¡,-ÎIL¡sIVJL&å0¢/™*KŒ‚®ëÞàxTœõ7jv’vy,½ï‰”ÊIqR*ªª ŠBJÁã¼#¥žJ” ¤¨QèyŒ‘ªª€ e»¾¥ïk”Ò( 1õ)¹}p“ÝÝ]¶··xíèš–)BDÚºÍP¨W´]MUUÄ˳ú>`L‹6ù¹­Ÿ)mFé3—ìîîf¨#JG„Ì‘1Ä!·µ§mªj†RçzÙu›A,$Á'œ vú„4Ùqè½§,KæÓÊzú> ŽÂœ)bvªn¢#D†u9”-)Šbp͆  rîfQÆÀ€ÅƯÑw×ð%%¶0žÜfRM!â\Ê×Je'ržÕj…P”58y'Å„­í9¯_½ÁÝ÷ÜMß;>ùÉßæø¨ãä¸æÌ™Ó<ûÜk<õäÓœ9oxð¡¹|ù2ÿÔïòmßú·hêMS3™ÎÙÞÚá~ÿ9Ž{ûSOjÞñŽ7£”ÄÍjuˆRŠkW¯ré®óL&BL4u” ¥ܦkmÞK]GŒ „¢ªôÜ+¡†Ïa(\JX]‚ˆ¤$‡=ã"ÏÏç9×ê<¯¤F)µ9Éßš¶¦ë{¤Ôœ;wk ìì.6‡RJ´Ñ(%òØ;‚°ôÌ·&Å„ª*±æ„­­9RBYUÔ«–›·^ggçÍœœ´e'¨RŒ¦ì0VJS>@‰„Ê1"E‘³L»®Ëeoº@ëõŒ‘"V[°„¤mkBð•!Æ„16»{£^g<«U=˜!jD"DÀ‹@ ÎS) •À ëc^75ìCr$J¾VgË6$ÆÑÚQ£Fõ'‘!ê¨Q£F5jÔ—@ÒûŠJê:Q7“eÍññUÞòð›Ø?»CYÁ_ûëæ}ï{'ÿâ~‘Ý}Š¢bgg‡G?ø(§ÏœáðèˆOýÞïqãÆM®_k)ŠŠ¾÷CÎ`7ZCŒ Ì0kmvZÃáá!�(»ÉÖ®Ö5³…e±XÐ4+BF±Cà¥EÉœÿ9Ì)ŠŠ”`U¯èûœ÷B`¹\¢”ÜŒùw]‹s޾ïX.—¬ê¥óùœ¢(69°ëÇžK Ä�Ú†–yÄæãÙíXÑ÷}"0€Á Œ§Ó Œ´ÎÆùìœuÎexSX&“IvjÁÕ«¯ñÊËWP*Cã£ÛL§E‘áЭ[·8>:BJ¸~ý:«ÕŠCv¯f�¥=ˆœ¥©uŽW888 Ðø#¿i[ÜpœÇBÈÏ{OÓ4S×ù™ÁLʰz:]°»·Çþ©Ó›±k­íÆÍë}Fïã­ªHÉ@6ùš÷½»ã@634گ݆ëÇ¿~.)åì;Ï !„¡í CDk+¦ÓÙw lbRʰJI”Ò˜½³NJ)ʲDksŽº^a­%„|ýnܸƽ÷ÞC×Õ“ʲäÒÅ7CâþÉÎt²MçáCþî»ï~žxâ :×ðÍßü7¹t÷ÝܼyÈ·|ó_E©ÈÖö>/že6›ñÑþ6w]¼È=÷Ü3ÄE(вÜìǾï†ç6÷Inœ¶k÷¤RÙíY7ÍæþJ)7Ó'$EY¢uAð‰ÁÚ’ªš¢•ÅÚ‚Ùd çrnh]×4M3<&9¸Âe™áûÖö…-xå•Wé{‡µeQQUUÞS:粞œs²<¢( fÓ|Hpt©ëeþ<©X.—~xxˆRš­í­ÍëE\—“yOÛ´¬†½°9@�ôdBQX”’›„”"Îuô} " M–[˜áp!åΩ‡ÌhO]×tÝåõšc‡ß&ßÇU~]* ƒ. Ea1E€ôÚI¼þs†­ù>‘J‡¬æu.ô¨Q£F5jÔ¨Q£F5ê߿ԷëWü.,Át6çÆÛ¼øÒ«|侑۷Žh:Ç?ÅóϿ̿½÷'%OÝœÐ÷-JjΞ=ÏK/½‚sïøŽoc>ß"%Ï|VB2?Íf|Ù{¿)-èÚ\jdŒagg›é|¶XB ´Fù]Î*¬Ê*ç‰z78@Óélˆ(麞¦i†foWš¦,‹8Tk˜!(Ë‚”b»/ ä0ÚÛu-]×b€xëB«­s4RÁàJÀ©’w€ðt6F×´RÄè8>9" Ì0Þkm†¾UUcàøäˆÉ¤äÊË/"$œ9sоï899Fk3¸ó2ÈÑÊn@N5™b¤mÛœ©)Óéd“ûCÄË|±`>ŸsxtDˆ©ÆZ”ÖùÏÆ ­Í`ri‚ ¸3ºÀûÀt2£(ªÌïR�UÎõÁÀ[Bć SóõU„Gô•Òô>C£¢,reLè!•˜ý¥1F”Ìp])EÓuLª ÖÚ ÐZ»‰3ÄÕ¤M¹e]YÚ¶ä&:Á{7Œký*ä|Y3”< $BÈMƒ¼àŽ›×ŸŸJ ô-«v‰ºí9þÏ=…çž}çÖXNŸÚâw>þExð<ï~÷{QÊòÔSO1›UÔõŠóçÎÓ4ž½ÝóììžçùË/ñò«¯#•`µ:¤*5—.Çh8wæÖ*.]¼Hßµ›=˜ ·Ò«rN®2H±ÎþuÙýYy¿KMÓ¶„˜òu–yÉc©5¶(‰)ÑvŽ$RÑ4ù{ÆiÛ†ÝÝÝ âÈI(%iÚŽÙt‹/~ñ9yÛÛÎûˆ4d�;´¶ÃßëX­ZªÉ>(âžyöUööÌf3¶wf¤ÔsáÂY.^:Ãlf¸çî»8{f®«)LAŒ‚I5åöÁ!J+„HLf¬©hÛ±Ñ7«M¡œ6K!sÞr0œR€˜0Ö ë)(Š¥3…„”ë‘ê y©lè)F‚w¾ÏŽÚ˜B¾‡Ã€õáÍÚõ»>4pΡ¤Â…|_…ÐÅ}ÿÆô¾ï¹}û6§OŸþ’¿y¬aþ¨Q£FõçMù=üK÷þèœãàà€sçÎý‰¾Ær¹¤ižÒª�� �IDATö÷÷ï” ´Ž$5jÔ¨Q£þ<imHúRJJÉjµ¢m[N:õoÿܤѶF=«æ˜²,¹uóããÀÅ‹oçéÏ_ãŸÿ̯òÏ~ê3ܼÕ!„¡šLIzï(ª’ÉtÊÎÞ.GPM¦Ìç[™Ücÿóù|U×α­­­Íˆý|>çô™3Te9ÀÌ ÆŒ1¸µ3¯(r‰ŒXîK¦Ó)ÖX”ÔL'3¼‹EQ1›-ØÞÞfkkk“©($™Gç!â\eÏÀ¤ØÀÞ8ŒçQðœ/Ú4ͦ´*Ãué“¡šL6`% ß2‰M‘Rˆa�-Š®Íù”Rhä`XJ çÞw\¿þ:]×°¿·Ëb±�`kk›ÅbAYN0¦€”Á¥R!$ͪåõׯ³µµ…÷¢(HQÐÔ$‰”ï¾Ä�ÓéôNÞ¦Öô}ÏjµÊ?ë°e!æ2"ŸÝ«“Ék ´^•·ÔuCçê¼ÎBBÂ9s>¯§Oô­Ç»€j(!38ïs|ƒ‘Ø"_w¥ Rjóm¤TÖÙé£ÛÄ”e9€06.ÕÙl–]¿:»[óˆzv‡àÐ:ïËü}r‘s1z¤L…%ÅD×µ›ÌV=ŒÔ¯÷õt2a6›m�îáÑ«zEYvw¶˜Í'œ>½‹z®]{¢´”¥â¿ÿþ)ÿê“­íóœ?w‰²œ"¤FhÅ|>#‘øå_þžáªªDJÉÁÁÓé”MÛ „àÔ©S”e¹qt;×Ã�4•Zçwª¡(ÎÓuy¿gð?d±Š„¶S‚Á‡„m ´)Ah”.p.;‰sI›Ù¸ºµ¶ÔuËjµÊed«Á‡M¡˜Ôš·>üv®¾~ùbrYL'óÍý¹½½Ã½÷Þ;8ÅÕp-a>Ÿ‚G˜Ïf\»þ'ÇG̦S¬Í…\»»»ÌfÓͽºvâj­ˆ1Q× ÙÙ=ßÎy=ä,'´ÎV>t4Í 1ö$áp¾Ï1ë†Ûü[6@]þ kõP$æ"¢¹(Ïw„_ƒ„H(%ÐVç¼eÉðù cT.#$1:VG5jÔ¨Q£F5jÔ¨/éé\¡mÀ—àÔ™ ìì\â[¿õïñÈ#ï ï/¿²doÇò·þ£¯ãí_ñ\¿ñË&g‹J•ç¹sç™Ts~ý×㛾éyÓ=§YžÜD A]×´mKQäFû5$,Ë’££#Ú¶eVTt]GUæ¼Ì®Ë_2™p²Ê£ùI(Ú¶ŠÂÐÊîiÛŽ0@Â\ZS D†”''5M½Âê nrQ”2Ó�AzR²„˜l¹)ƒV¤m[Ú¶a6Û®ëç­„ØQŽÐ<¤¸]—›†ï8ÀbIUÍ‘"Aœœ,qÎQ–ÎuøÐÓu ¯¾ú û§öqÎñꫯm@¥ÖlÆ 6Å^ é;Ç|hL7ºÀÚ‚ºnÑZ1N‘2Ãײ)Ì0F¯´6y´Ýg�ªµ�Á[*‡ÌNV–à^E´2ôÎ `Mo´Hgð”a¨È®N#1ÊÒví¦e½œ¿%ñwÜ{)Ÿø“`¹ª1ÚæR®àèº:»]uµ›~cYÚóV×ÐÓ;‡žKŠTà½ÀM×·TUIJÃØuò()ÐÆprr‚1[cþzíjuÐ.WrDÄlR1ŸÏXvÇܸuÀõ›' ™N Î;MS;DÌçî{àO~á*?øƒÿ/>ùßþíówmóÔ“°¹/nݨùÍÇ£©¡9â«ý�¯¾òïz×»X®®söìeY°XÌ ³}ï˜Nf›\\!$…-JNkð!_«~È?U:¯þìCÎõÌy²ç<1BQTc𮅔˩V«ZëáPA"„ݦتȑ¦Â÷‘óç/ñÄ?I³jQª@аq,{Y.—ÜDPrñž]´žrxxˆ U~LeU TÇ,•8×aíÞ[°¾ÎÙž£) J+?\Û œZÙ<î?¸4òVËŽh!t> ð-JƒˆšàJkl1!zGL )Sv¸&OJ w!†(“7‚V)óý&eb¹j6¯ÐJô)ëh�¥½ eBnܰ£F5jÔ¨Q£F5jÔ¨ÿRÿÅöÁ QS˜9 KŠ©àégžææ­Û¹”)¶·>p$ÏîÞŒ²2(-ØßÛ§mçÏ]â _ø"çÎç™gžáÒ¥ó(hÛv3ÖÚ¶9ËtÝÖ¾ntWJ±¿³›`ÑÓ»üñù|Nï\-ׂ´~]†BѬZ2 !Y­jÚ¶A EH �1—D¥6.?¥Ä矨Ê)-}Ÿ#Ô­¸vЭaìJ%¡GI5Ä©Š!2`p{Š´74B½ôhe0ºD 5äѬ5cØÚ^ ´äÆÍë8çrQW„Õr5Œ{+R¼ãÔÚ"’ Äœ‡YUêºak±Íòä„ù|NJd@òJÐu=BI„”H¥saTˆ$Õdš3`“" 1‚D% Ö¤$èš2!ô}KST ~hŽIZÏ•Î08!`X¯úæEbH1¦;ãÒ"AŠ ²1söé€Ë²Býn…X­”Ö›�c! ¢Ãû~€í¹`Èû@YN ‰<>ʺüãsLBÊЬ°7o_§îjв ¤ˆÔ–S§Ïst¸äÌ™Ó(W¯½JŒE9Á;Á/ÿòg¸òòã|ÅÛbk{’ËÀê!K>õÉÏ�š½S§˜ÍgÌý­OpÏ›NóUx/{;[ìî."!TUEYVÙu©Tv&û8'exl­A©\n%$y¬_Ù¼þClBÎ ÖÚk [ d†„J ú®J˜$1´Ñœœ¹³ÙeÚ»~(lË_¿ïÁª ?û³ÿ>úA¶óœçšbÎiužÕjIvyNxýê7nœðñÿ¯_=È÷Yô¥¤ª4½å~f³‚­Å„½Ý§NíÐ4Kú¶£,§CÌ„A*IŒŽ˜"“jŽ÷q³>k§rvŽæû_Š\îc�`€î)åèU1ö‘Ôùï‹áà‚¡TOl ½\ïÉmâ&bÊNx=äL¿¤®×ëƒ!>ÊÈR©Ç(€Q£F5êO£1 €ÍÏÍcÀ¨Q£Fúó¦/·(�­ÅnqúÌ.¯<w™_ýÕŸãúÍ›|×wÿ þÊ_ù«¼ôÊΜ;˯ýÒoðó?ós|æ3 >òï瑼€ƒƒ¶·wijÏ]wÝ…Ñ%—Ÿ{žO|âwùȇßÏl6£ïóÈíÁÁ“Édãºjšc ×®]#´=ç/œ§mkNê%»»»t]GE‘ÛÙI¥nȈœN§CSyEUM V«åPžSaŒ¡iV8×3),R)¤ÌÙ©º© T‘J®50F#{ÿ†ò"·ù!)k »Òú®§09o36eGëؼh­Bhª2g«¦$éûa$^éᇒ‚gÏžÁZ›Ÿ'­óŸËbJ]·€Èà¯éw¢Êyµ)ÅårIQä\ɪœ èIIÀà¬SJcÊì^Œ1Ò÷ë‚ÞàüÌN»ü\<F™¦dÀšA&›¼Z¡ô‘ ( ‹÷‰”ÜWVßylQ€a(?ò¤*g«†²W* ;‡ONŽ‘*2›–iÚ>Ãסáv TóÈÿºëN”An½Ï9®BXzסµÊš"R‚R d†¥(æüæï¯œù`À‘HX›»së¬ÐìÐT‡G¸º¡¸t÷y®¾v“²2”¥ewïÎ#¢æ¡5¿ùØeDúoøáþAbê8}f—ÐKnݺIYÎ8nž~úiî»ïÞŸ°µµ…T’‹ïBëì žÍfƒ³Xá}V¹m½1”Î{7¡óãOZçÌXµy~)fhê} FR¥,Þ·t]ÞwÎå5[,¼ðâó¼òÊË<øà,³ g×É"çíºÎ3;u3§ÏñÂóW¸ÿþ7qpÔ’R@+Ñ%Îy{V«šW^¹ë×ÙÇŠ½ý]nߺ•³ŠÍ„££ÛœÚŸ3™æ 㺮)‹œ¯Û÷=](‹)MÓS4¤\¹!bÊ@]AY–Ęè] GsØBk—P2»ÜÅà–!`¬„˜ŸcŽ@ÜDc¤”HDL¡ÐI¾áu!a KQ”Hk‰}ŽH)Ñ4Íaa§®BÅ€s-IæüæeŽ5jÔ¨Q£F5jÔ¨Q_ÒÇ5—_¸AÓÎùùÿû×øß|’ïÿ¿Ž);^~í Œ.éëc¾îƒïá‘wßÏÇ>öQ~÷w?ÉÅ».pï÷AJ¤¤8Yðž÷¾“ŸþéŸæÑ¯}?¿÷{Ÿä©g¯ðî¯üJNê[°Ð—¦P’àmï¹üü«¼V^c÷ô)\LÙ‘)$‡ÇKʲÈPEŒ1 ¼ïsáTxé}ñ„UU.ˆêºÚ¢#‡ #en‡O ©Bj”^·žç²ïs@U(eè;‡sž¶í‡LQKJ)=ÞçÒžÂNð>mÜžJ*’H(­06T{ç@H´.ðIt]vÕJ Ú*„L8ßrë åääˆùbÆéýó¼ví&m½b6Òô€ˆ["‡B¯ÎÕ eQ°nìšL¦aŒb¹ªi›<Þ9lQnN¨ƒXŸTçü²¬r™QÓlƦ3œÌ§å!E‚”<Îg‡µ†#‘ˆ– [VXkð>â}"F »Û¬µÔ«(‡¬Ý<V­´ÀV’Rv …ï;BèI@ŠaˆJèÐv–”%Ä’yÄÚX|¸àh¦³¥ÖY«‚AI³qO+¥@×µ(¡ xbSPØœƒ›Ç¿EvÐ<ŠuáPÏÎî.«ú„U³âæµëURÚ-‡¯SMf( ¯¾ú<FosõõH:æ3Éc]çƒ_÷)¾þ#PT[üÎ|’}ÃW³˜Ÿçã¿û9>û¹ÏñòK/ñÕ_ýÐB0U¸vIHž”,}Wã}¡±†!×#å6ç=¾vLB\ØaˆÐÄq¾Aé ï8>i�rœµX5Ã'OÝÔÔMϧÿðq~û[˜Ì'¥a¹<Áj@$‚ˆ¸@†¹þ„».^àég>Ï7þ¯§¿Þb‹|�)4¾í¹ví:³jŽÝÙFÛˆó`LÉÖÖÓIÉ™3ÛDq‚’ÉÄb CÛ9ªb†TŠÃÃã|È!51ôÄäP² oO2€œï‰1löeJ … & ÙáªÕ‚Öw›hŒDŽ}Pƒ ZFA !$¶˜BŽË@DCÆà2É Uü‘è £BAðu½Â;O¶ƒ”zˆËhi±G$‰z|×5jÔ¨Q£F5jÔ¨Q£¾\Àª©oº÷~~ñ_þ6ŸýÜÓüýÿê;yó{øþˆÉ4PUEÓ,éâu¾îCïûžöS?ÃßýÁÿï[lÑd ˆ–w?ò^xþ2÷=ô¿òØÇ¹ëâ½VŒ†óÅQH´ Øxû;ßK×!eRVLæ BˆLg[9cqÕ1›Í†,OÁd2gÙÔ)@„ì`ìI)RÙc$1xH dÂZ5€ÔõØ»Á¹\HcŒÁù¥ó !{”48ç(¶¶v¨ë†¢(snëñ1>:¦ÓŠÉÔà|b:¹tÀH"Í#!åìF! ¶´y¼88¤m2¼L"¢,ÔË<H¨[5 Ĥ© œ‡UßRM*Ù.gŒA†¶Y¢”¤ëW©›k Îwh­™ÍæH©X-—¸èñI1™Ì3„Šäò/IQâc@iKß78糫Qå1iclntŽäÎ9„ˆCQ— Æ )…’Ù½CÊ ¶0™6×.:?¸-õ0Ní6ë(¥�­˜N'´ÝŠÎ5…fk{±û›vzçr1‘1BzŸy×f¨’CJ‡ÑÈY±JY‚tM~ÜF[$%¶¨bI"¢•"„ìdÔZcÆ»~37KxßÐÔ+&Õ”¶ëñ]àìÙ&³-NN–ÜsÏyž}îÞúÖ¹üÜË\»ºä¡ûïçÊ•ç1…¤>©ù'ÿÓÿ Æqóú¯Ò´‡üø»t'JW|ô·?Æé½KLª’矖G¿æ¬ŽIÉQM b …@5™!¤ÄZEÛæ§¢0¬[î­-Æè¡ÈÉÑ÷)$GŠ×{”VL&Š"õjEð‚Þ¼ª°“‚ÙtÆ /¿ˆÖ†³ç΂\»v•²ÐL§n”a¾ØãðöU¹àü]Û¼òÊ‹:ŠJ“b@iV–VJÎÚg>­Xv;YpêÔ6ÕäŽWœÚÛek» ª$oyëýܾuƒ˜j¶¶öÑÊ¢¡í\Ÿ˜M+¬„}H]‡K=¶* Á ­ ”ÐøÞ£uv´'çPÊ“Dë )9„Ð(­A”VÈ B¢G)‹²úUƒ÷ŽZ l¡ú®ƒ$(Ë‚!Iô52yD„ÐAÌ{jRUH±>ÇPRH´”ÙIÍVG5jÔ¨Q£F5jÔ¨/°Z¨ÈÙ {|êãñ¡¾î½Èöv"¸EÏÄB©=Mt¤XppØòî÷~€ÿñŸü>=öøÀ{X5'œ;wŠƒ›·xðÞ{¹òüΜ>Ë}÷ÝÏo<öé¾A šÎ蛡‘\JÚ®G(Ãîî6Jä±Ýé4ÿw­ªª6cÞ lú¾Ç3ŒÝçr¨8d¶ö}‡ô’ªšàú.-¡`u/Š‚²,QJѶí&‹3„¸÷/ç§” ­ÌÐ&/999a6›RM*œÏÆ9†è<¶\×]^Ø¡¸&G1´Ñú¾£°Ùñ–ÇÓóH¶±–ÞKR”¹\'|ÈD“É4—K9·Éù >4YksÕP”cÄ»DŠùÿ˲¢, ÈÎßD5™à\ÏñªA«HYjR„”r$‚6ÃÞ˜P²D7ОìÊË9µw2Ÿrû»Ü<ƾ÷(%9Bu€­ÙÕcÎÕLIn2sÙÝäÞ )I1ˆÖèQ^ ì"kû>;.ñH• ©ŒÑÙ9œ€ P:<ø.» •€ˆ1g¹®×�‘0Fãû.»Pc¼y„H8× ¥O‚¢(7ŽÞDBÃd2áÆ­›ìíî±µ½EH’gžy¥JV«U†rZ°wz—3Û÷rýÆ+ÄèR3Ÿïðá˜k¯ãü1ÿÇOÿo|ô7çã¿s™Å–f¾¨¸téO|þ5ž|òó<xïyŠ¢`R–ÄÁYY%RdWª”š¢(hÛ–®ë0ÆlÆà³ƒbL*C]×Ã^¶ƒ“ZlÜ¼ÆæÃˆ0y&[ûœœÜÆXDrt¸bZn㻞Vv·îá¸íp]ÉÖ|›Òìò•ïü�?ù¿ü+¾ë»žâÜ…=®\y ­-Rhn\¿ÎÔ [ÛB±l¼÷ø�·oÐ6KNŸ½ˆøhèÚ–­­-.]ºD[·Äà©ªŠ½í-ŒÖHè…'"0ÄøaKÖB)3ä@³qîeIßy&ÓùfOw]÷¯½€ ‘ãÂzÏ„@ˆ!äp'~@©5„[–4ˆ8€URÀXżœ!„ÎyÇë‹$·± „„ñ]kÔ¨Q£F5jÔ¨Q£Fúr«õñuÜ2°<êøÊ·¿‰i…€d Áuc±Ê™‰3æ‹-ö÷N³··ÅÇ~çwx÷{߯tZÒ¶KH ‰àÁûäò /ñMùKüðýC<xßýÜûæ{X®j £XÕ+¤ÒH­è\ËÉñ—.ž§ïÛ XÛÞÞÞd~®Çµsæ¥ãää„ÉlFÛv@¢(,…-ÑJqûæM¤”ÌçsâsjŒF¨ s$+5;,å¦;ç¶EIQ¸Þá\ƒÖçR†…Ò¹œcM×e`cŠ®rQ’RwÊ”r©Â¹ïEaJ ã骠*X;Åh I£”Dk3´­G”‚²¬6%ZëQþƔĘÁkŒC.¤ÈãÑ‹Åu]sxxÀ©S§¨ª))Y S!¢@¤ìä”ÒÐu-Ö¤‚ÜìZº®ÉÏKdج¤\÷s¡¤‚ÁBŒ”•ÆÇ›|Õ µ"!¸áy«M¾gÛeð­ÔM�xïÐbU ˆ!R×-Îw¥ÁØrXßœSi­Ö\ ëŸÁsÔ¢GÊ\XCˆ!1Ì1¶Ì�>%Úº' ®Y!)¤Í5šLª „s. „d¹\²³³Ã­[·ÐJsï½÷“䵫7ØÞÞfR-Ò²¿¿ÏÕ«78<ê9Z“C*Aß×ô]AU–<òÈC¬ê[ܺuÀ™ÓgyäËñ²æÒÅ <wù¦Ó)çÎãÆ›, £ ÞC¤\T9ÔåR-¥Ô¶÷}Òy-Aà]À{7�é|͵VCk ÂâæçÒ/AßP–Súå-ΜÝã™gŸi) X=ŘîìóK¿ðÿðÌóWøÞÿô?GŸâi>ù‰ÏPZˆQ0ÎX,�ÔuÃb1¡oŽY5Kº Y®/]¹BÓhfw<òÞ÷ dVšØ'¸ïAöv÷ðΑbd6›ÑÖõP,ær.iì‘:Ã|[úCùZða“+›ÁÀG‡îÙ|e¨žìú�Àl¢4ÖåhÁçœÚ²ÌN×]ׂN°òëZv„;bèi}Š­ó=Þ»†¢˜äR°äH1!% %BD¢÷#cÅĨQ£þ씾Ä__ŒK<jÔ¨Q£F5ê/6X=µ»Ë“O¼È¤ÔÜ}ñ.öv÷9^¾Žµ27GhÛš˜û§ßŒ†Ÿú©ÿ_¾Á²–(•˜N nÞx­­m®_½Ê…3gùØoÿ>ÏŸy‰ïþÎïá7~ýWxËCqÒ6(!ÐZ 4]óžÓgö©ëš¢ÈÙžkqrrBY–›2¢#]×eç\ˆL&“Ê |ßÓuçJEš¦#ø~p” „HL§SRJ´m‹snãô\7r¯±Æ¬V5~¹b:™!¥¢®ÛÊEœëqΑÒÐ)”ª6íÞ¹}\oJ“�¤LXcœylÞèb€•v�¼+”’“›Ãót]?äDŠÁý™6 R+“ì“@k¹i·ï»ï«UÍ­[7Ùßßg2™Ðw)4ÖX´4ô.à#)­E)M×µˆ$‘H´ÔÈ¢ÌÀNæB.™ÃïSŽ`kõdç¼e÷Þt:ÖÑm€³1š¾ïP*(¥5"&qh–S’¢#t¾sHÝb¬Eòàú\H¤¥A$98I=Þwh  ×A ´60dböý*;©“ÀZƒÑ!óçºè ÁÑõ )$Æf7oÝ´¤±Ö¢µâèøçr>gÓt$¡¸|ùrvGw§OŸfµZ1™T®xùµ+T“kIÜæmo€»/¾™/|þiÎßç}ïyO?ñ:O?ý2“Iŵë¯óð[ïew§ä«¾æ«¸öòóô}Þ‹"EBŒCUÎöΣMvN+¥÷´Ínj!èû>;¶Ë s‰UÆvëý[Ùåº>äP*ÐvK¦‹)Ëå!g/^`Ÿg¿ðï{äk¨Z^{í5~õýY^zée~äGŒ~ìãüüÏýO~þ)ê¦ã¯ýráü]t]—3wzêô>˃DÛÊ¢"Š’ÃÆ½½ “IÅ|1åå_äâ… RÅ›îyÓé ×÷(¥©J‹ïZ|è !B«)悲Š9‚ì`NQáz‡R À?· ²»Ü÷c'ÃA@zC!ZºÓž+Äæc)%¤‚® Ää7÷mŒz(@B$‚÷L&šÆ³\žP–vˆ‰¤äIbpm«4Da Y! ˆã»Ö¨Q£þŒ˜j„ÐC‡Ç“þ 5¿zå_�aøõoû|BÊt±ÉŽ5jÔ¨Q£F5ê/$X­ª÷"¶¬˜.ö¸zí˜`1¯˜L· ]`U¯(&[¼ðÂuþé?ûç|ìcŸGk¸ûî)w]¼HÛÜdk1Ç*)-®ëyëÃoá3ði¾ã?þ6ž¿ü,?÷óÿ‚|äƒlmÍiÚaÈ©Œ¡‡è(ËjŸwÌf º®ckkg3ªk­ kÏl¶@ICa«uøH1QU —̤1¦ ‘[ä#”e‰1%ZÛî…7ÀH÷étN×eè·þB¿i–ïûž˜"1JV«;;;…ÅûµKÐ`L1€à>7£+EL9 �riÛå¯)„Àõnóý³;R£¢kyÊp} µ>YcÌàïr€@¹ '7ÄgP&™L·nÝ»ÈÞ… Ü|õUŒÖCœBÀÇ@LDBÊ�švEŒ²š HtmŸKž„Ú4¡+•×MH‘„1amIa-!ù!+5 6>­V+¬µÈƒëSoàùài•ATL•BälP!$.Ô¬–'h¥ÑZau.¬ÊNÒ| ¤¤(P2¡¤"ˆˆwïÖeN9×Õù’äøøˆÕªæÔ©}&Ó"ç‘ ‘Ý‚ÑçÂ'¥©ëåàö›1úÙÌðúÕ«9â¡,xåÕ×ÙÛ?Ã<ÀS_|–›7ŽÒòâ‹/2›/èú†³Ùïk´�‘àæÍ—9½·Ëñá-Ž–¼pù2·nÝàžíûyê‹ÏrêÔ‚IµOpŽ7½éM¸¾¦šTÄÎS‡ŽÕj…1R“¡tt›qò;kž†(†2® Yóµ›r¥ìÒŒ›×÷8Q¦DJ‹±¿\ñžw½‹ü~œÿö‡”ùlNt‚÷¿ÿQþÁý¿ø/Ÿø‰Ÿb:Ýæ#ßøµ|÷÷|'—î½ÀÑÁ+¸fÅ|>GIU.HѳlVUam‰o¯½š8{¦Ó ?þiÞöð%Þýžw2©Ëããœ)[Mh›šço߯jEUÃ$<I„Á‘ÛÉæ#õûû!�� �IDATm×!„Bk»ËÚfpP75E4,†¤%®oQ kIÑCŠ—Ф€óžä�^ׇ%ëõô¬V5Ö­s9ŸÖzpX«á5Bäìed>ˆHÙi+£DVfãD5jÔ¨?Ç/ã–W¸-𸽒P(l1gZ–qŒÇ G«T ÍNÚ¢œ\BlÝ ¦×zÔ¨Q£F5jÔ_\°z¸LÜýæ¯àæÁÏò™?|¯ýÈ©›c¶v*^¹ò/<ÿo¾ûö§øì¯ý:w]x3ßü7÷ÙÞ)ùȇÞCUÍHq‰•‰¶é°Fᛞî¿Ï|îI>ñ‰OðÈ#ïçû¾ïïs÷=8ÿÁ¯AiÉÑñ!ÓÊRØM½Â¹Hß{¬µX[ cû~•Š(Ì™§ÆX꺹ãüDP”ˆÙ(’ ©<â‹ThŸž}ï6޳M&bˆœœ,麎Åb FJEQè2åñ着8Y.I$>ýéÏPØ‚GÞÿ>B¹M^åqý! Aßõ„ÐZR1ä›rQ”÷h-q.!ȱﲻӻ% Ì�`¥ÈîU­¦¬†ç’ÐR°Zž°µØ¢ëÚáqËa-}ï8}úJIn]»Æ«¯¼ÌÅ‹—(lÎ=UZã\=€Ñ‚¦]B"ÅHUIb‚¾«‡ëL•3bý0Ríú~påeÀtxtcÖ–H½Ž^Pä| 1�J)¼w¨'¥D*Ò­-'‡Ge1%ò8¾Ñ!):º¶Š¥$Î;¼ó$c RŒev2k…Ñ×û  !Ò¶-)%&Ó‚él‚µ†¶m²ãuÆÌŽfEUU·mÅî.‡·˜Í¶ðÎQVuÓ°X,ðÁ³¿¿O]Žã“cb’\½z•‹ÆÒ´ E1%¸–_<;»s «Q¶dµ <ôÀ½¼íá‡øø§>Ï'>ñ8úº·²XLxûW¼é¤BëH×Eš¦A%AQX[€XkåœUcÌó›]¼Zç{HkCˆk%MѺÀMÛ¶H)è}Àûnc}ˆ¤ ˜”{x¯Ñ²¢ïJ þößþ^{õ*U9ckï4gÏ\ ö<ð–süäOýçÏ߃V%>z®¿v™ƒ£kÌæÆ,rÌF8ç™Íç$J´q|tÃÃÈýΙϦ\¿vûª4ìïná}›!ªTU‰ 嘉°¥†$r¶¬µ$uÛ¢µ¥ë:º6_CA‡÷i €KïX­VH9¡i[¼s›½àC ,ËMÌȸ�HªªÚä5 )HA|dµjp½g±ØÊ±õ1†ÜÛ|X£wq×6hS ¤¤ëŒ±ˆÖÓ4u~}ß·Fõïªè ÍU\8Á%O�TŠ©GU§Ñ¬#>剦@5€Ó’’ OøãÁjÕh|sL'žÆ•ߣD…Us¨vɧ£þ¢Éã©SÍk'¯qõäu„ŽìTÛÜ?}˜Jýÿì>zž?zžW—¯’ˆlWÛܽss5g|5jÔ¨Q£F}ÙU¡œ»kÓçßÄ?ú‰Ÿáµ[K„Œ\yõE>÷ø§yô«ßÇÛÞù~>ñûŸæòsOs󿓲ä+ßõuÜûæ9:¼A ‰ù|º)ƒ*ç3’(xøáxöÙgyäýïåk¾æ|ì·‡‡zˆù"ç‡Zcp®ƒ”ç¦\¡¹ÈHë 6³ 4 ”ÆÚµ#3n2$½÷ôm‡‰Y5!Ĉ1yt·iVÇ+<°¿¿sŽããcf³Ù�ú ֛⪣£#¤È¹«½ë‰)Ãc «zÅjµ¤ª*ÙÑ|âàðÛÛ;üì½y°¥é}×÷y¶w;ëÝ»{¦g¦§G3Ó#{¬É–¬¶"Ûñ›’Á„EŽ„„P„¤‰ƒ“T€ŠP©¡b’¢B&12¦lƒƒíAƲ%Yk4›fëé½ûîgy×gÉÏ{ÏÈÁ6r,Ù:ß®®;Ý}çÜó.çœ÷ý<ßß÷›$!HšÎâz7ªˆù–]_0dtÖGD(cŒA+ˆ~^ÒuYš3ÈÓ^Ú8fîã~h›)6”2 ‡EÅÊ Œщ7N¨ê’²Z¢H™ÍÞ.²mt¼61Ž¡È‡„�§³}Œ1Œ†#ŒI¨ë€žU5'Ï£ƒñ,‹TÈ‹K”bu¼0NWãåqô¾wí¹)q=\Ž…@y‘c­¥ªª= ⿦ÏKuлþD#èlt­QR`ƒ§®¬µ«³²\"„&IÌ žŠ³1l!Vàý‹ÇÀÏÎñ<ÏY,„®EIIU•ƒ£ÑˆÅrɹsç¨êŽ·®ßb±Xpnﯽq•étJÕƒï®íȲkkê2£·¸wó.KÛ,¸sç:?þ[çÎó÷¿‡ãã›t]ƒu‰ŽŽHçR¨>‡W³\Î1YŠr•ÚuF§«‚°¶µÑÝ/L¬n¡{ÇóÙèæYéZ]×´mǨØÄ;ÉrÑ¡U̽ 8ŽŽîòàC¢S;Êò€eU’Ží½‚²: 1÷îí3fC’ö÷pVAH99Ù§iïqùò“Ì—‚ëoÝÅhOšælmOyüÑ÷1f¼òÊ ŒŸ~'»»[ ËEÍ ÈÙØØ ®k’$©•óS–ËQ:¼÷à ]×öÝøš 'TUC’¼]쥔$ËRò<åøèç›››(¥8>:b:þ ûL*6„{b;OYV„�ÃÁc i–ä hÛ9ó²Ä{Gž§¤*AJAU5 I‘c‚îÿ®êÝïë‘ÚµÖZë_‰¤öñ"}Y¡«°Ë7©›}ÊÐÒáHtŽžgP\dÌøõ`g,(<û„M=„ýuòY­Cû9U{›Åò*X’ƒdL¢wñÊ LßÏ„ZGüR*n67ù¥{Ÿäsw>‹L-—·fËì±›îa¤ù—>† –“ö˜Oßû4ŸºýIl°<¸ùL?ÈCƒ‡Ø’[¿&Ð_k­µÖZk­µÖú’Õã“A øÈü^þ“ÿô¯òçþ«¿ ž~j‡û»¿‡7ßüé/ÿn\¿ÇsŸZPä- ?ýO^âßýþçùÈþ.„œž,QiŠïuWbmËåKòÙÏ~šª*ùð÷~˜ÿò‡~ˆ«×®óôSOâ½%M3šº¢ÈX9IÏ€©Rr•!ùÅESÞBˆnÆ8ÞÜÒÖ-Î:ê&Â3² %5J*ŠÁ€Î{‹JE×áYÖp8\A»$MV>sŸâÎYš¦BkMQd CÞõ®waLBžeTYÆp8ÀÙè†}»¸Bµ5Ëå !ÀC–¦=¼ „ b!–Š7B™1ÖÉ$ƒÅù¶/ïrá£CT®Ï)í0I,Yª›’4‰PÚy‹©ÀùŽÅbÎlvÌææ6ƒANÓVXÛà½`¹l1iMv®ÆOYyò¼À¹ï;”LiÛø<Ò\³,OélEt„ÂZá=&híû8¿‚çÎu_äô bãy’i|p–zGð°²èuÖˆÇE @Å›:¥ô ì®w:Ÿea†�ƒRŒîœIï|6œžž2™L Î:ò\#DF-JÒ4ChÛ˜Û¶y>@JCÛ:†ÃeÕpîÜ9îÝ»Ç|1G(MY·œžž²¹¹Ép¸ÁíŸÿ>z… $[[[ÜZ. Fìì4Ë%;{SÊÅ]Óñ&G‡Ç<úȃÌÞ÷Þ¯åÕW_ÂÚ%ãq‚T¬ /Þƒˆ¥L@Û5-zÀÞ‘$&I¨ËšáPÓ¶mÌ “ȾäKá},C}vh×µR÷%iiš¢MŠwšLç(¨ªSªÅœK^äÎ;H­AJvvÏóâKÏñèã—±®!Í šºfsk‚J$iišQU5Ák‚S4c8š2N™—–—_y‹ñ’$åÖÍ·ØÛ¹DÛÍØÙ°··…À÷Pٯ⠲4G) TÊh²…µ-O‘b62¬2ÏFëϜ߿zðÎ1躎¦ªHŒa2ÒÖu¿páWeVÊÄ×]@ ±ÖS•5uÝ2ŽO&¢[Ýù%Á«þ$«%¤(ÝôQ ñ¼¶Ö1NQ2Ye段ÖZkýÆZÒuÌç7q®E (4¤É.’ dŒ-Ê7Ao )þ•Yö¿])`œ¡­f¤4(zé誚ùñ¯¨ŒBN‘£û ­×ïÝ]Üå“w>Égnÿ2·æ7dм’½SÁ¹üJ¨ßð1®WWùÌñ§øìñ§¸¶¸†óŽÒÅâJζ¶¶Öhk­µÖZk­µÖ—XŽ2ªÅO<þ0ñÏÿ‡üÂ'>Ïýßáî#þÆÿï~Ïyþøÿ~n\»Ê×=õúà7²»}?ëoþ(÷oÿ<Õ¢äýñ玲[ò<–YíÞes|Ž43¼ã—ùÂ^æëÞÿõ<~å)þïŸy–§Ÿ~Šºîƒ±´I£MNÕ´h¥Éòœà=mcc–diF’¤_ǬLk‘B´@)C–çˆ�y–Òu-¶ë¨ª!IšazˆR× m[S³Ùœºn˜N&pr|Š!JEª¢i*꺢m›XlӾDZöS†Ã!!Äq_c2ÆB,J| íjÚ®EkÙ»]ã¸5Œ‰ 1æ‚J„Ð83=ÛÎá<RH²Ì¬Às]·$à�wúåEJbbl€o,úÑö’4Ó¤­&M5R)ªjÁp³-Eð¤:!MRš’TÐÔÕ²¤È†´­ãðÞ>B(ŠAŽÖ Ëù J”´})AhƒíkЉÆp¾‹€“;ۦؘ۩µè£b–­¡o²—H‘ D œ/QJ“¦)M×ÅÑk)=R)R“Åkl/A’'9Ú˜èˆõ£Pm"hµÖÒ4 ñºÎõC¥"|õÎA(¥1:Ù­Öc²­;ºÎ‘gJó¡$ÖZ®_¿N�ÊrÉ›wQÊ0xååW¸øÀEÚ¶e²±I×z‹%Ež| maksƒ¦)äSn\•ñxÂöö„ë×ßD}:ãÆµ×xê©'Èò”ÃÃ#¶&Ã8òï=ZôåaL¢QZa»˜É™ç92Ëv†sq{Ó$‹kZ„´ýßw+ÈšCÛ68ב¦)ƒÁ wJ·$‰¢s e¹ˆÎS=àøè„'Ë#|­›†££ª¹d9_"µ¤ é~GžçÌšˆÏ;‡P%G‡s¦“yåå·\¹òWßüY®AtùªžS—Kv·÷È’ç X‡Ô ]çX,–øHÓ£ >t}VsJUÕhmØÜR•%Z'½Þà¼íóƒ%>š:F!¤i`êzåŒ=ˤmš†EY’¤Š</b,Fç�”šºn‘rÖ*BX¥èê­R¦Ó!à躚ºiR‘èŒ ¶sqáE&H‘`LÌÄ]k­µÖúµ°v‰s'„pBÛÓ¶'xß¡UŠ^$IwÉÄ„ q]IüË0鿾P¤è°ËØi-ˆ9Ýr믡|E]- ~‰–)Rf`2ÖÔì·á™ ®]ç37™y7ãáñeÚÐÒ4ŽOÜùR(vÒí¾0ò×:{ã¯W_àÙ»?Gé.m>ŒšE;ç—o~šséOl¾“Bë¾ÖZk­µÖZk}ÙHQqþ\A‘4üžïúÝ|÷wûÎî?—ðC?øýüàŸý“\87à>ð$ìþ.=xžA‘ògþìŸâû~ß×ó÷?ú^üük\¼ø0eÝ ´F'HÚ¦ââÅs¼öú«TeÉ?ôµ|òSoò‹ŸüRª>ƒb>[bŒé]cte±XP×5]ÛQ×±˜ç¬¹Ýè)UÓ–z5ÝTmÎγÇ].–x‡ ‡#@0>pxxDÛ¶H!ûÑük£Ã5¶£G袵&Ë2BˆðÏ96šº©©ë“Œ1”eÅéé )åj„ÿÌ („ ,KªªÂÊ…kmGÝTÔMEgk¤òi¢0¬­iš%Þ7#ú&q‰V‚¥ëJêz‰p8×bm‹µÖ68ß’e†ñxŒ6çbyXn ŠlÄp0%19…V Z%lLwÐ2Å;ÈÓE1 ËŒ‘€EªXt¥T „ï[¤ $©BÉ3èûv%Ú¶îs%}?^Þ¢¤b8"U›BD§^ ¶Ü§ý¨~ÛF j;·r»z‹±@à]ÌÚB¡•Æhƒ@|�/XÎ+ö©«A<ÿŠ¢èã$ÎF¸Uà{ó/›¦¥m]̸4 ¶s“Ðu–ù|Ž2~‚4‹Á‡G‡«8‹ë×opé¡K,—K”Žßb0"I2ƒ ˜LFH°¶æsÏ–×_‰¯ýÚ§ø/~ð?Ç{ÇÞÞ.·nßà¹çžÃZÛg¨¾] •‡XâvµÖTUÉüð©Tï¸mÑ?÷¶s«¬a+÷gÒ;Ÿ#�×XÛl ¢"ˆxDè89¹ÇÑñ>›Ó1yš1LhÛÀñIÉ}çgsûQðCÎ?ü5üÜÏ|‚¿ú?üOäƒ1óÅ‚Ù씓Ù!ÖÕìîn£uÆdc›®q¼üÒ ´Î˜N¦<øÐEFãŒÍEnÂ÷ žªZ"ðEAÝ´ýë –‹šå¢Áè”a±Áb±¤,—t]·‚ÇÞÎWí§Z³=d>ƒüBÌŽÎÒèUJõ€ØÅŽ~4VI…ÖšápÈÎÎÃáïC_F,ªS :ÉBÑÔ–ºîðÊE%Mú&Ë(¶ 8ÖŸZk­µÖÿ‹HùX¨çÊò-NN>ÇÉÉhÛŠáðQ¦Ów1&¹ˆ”‘#¥Fêÿ)B*„ÔH¡:C 'èÍûMßI>}FC–ö&ËÓÏc¿�Ë»×Âo3°Ö—ßéGÀ:Ëéì”›Ç7¸¾¸Îî`—o~ð[øºsï¥0~éÎ/òòÑKÔ®ùuÇb9âˆ7çoñúá[läÛ|ÓÃßÄw<ò|õö“Ü©os­¾ÆQ8¢¡!¬Ï‘µÖZk­µÖZëËDZ†Šfq€ëGûð÷ÿÞßd:Ìø÷ÿƒ?ÈSOž9³Ù]„×+q]Šm*òdÂù?ÆÿÃOðñ?Ç×Ã{È‹kÙÜÚ œ-ÙÞÚAÍþþ³\½z•û/\äÁ¶ø¥_ü%¾éƒäê믲5ám ®¬³}ŽeÌ%̲,¶“w–å2)E1"Ðõ7q„W qÁѵ-H�”V´m‡pëóùœ¢(¢›3Dx4 9==åðèñhÌææ&Þ ‹ÞÇB © \Ö±e>D@¢’„º©IŒBÈ�Œ‰.Á¶©‘R÷£¼±DJkµŠ8Ëy<ˇµÎ¢M¼¹9+qR*‚¯¦­!8œë�M ޤ“ ´ `c[¸T¤‰¦ª—$&AiTç=MÛ‘$ MAk×IÚ¶‰`UónÓ!u½¤m-Y–QÕ ÕrIšFW¦†Ét£wâ.B2)ËÖYÚÎbç%yÖ‘eCž²j2€•¢µ!„.^ ‹³<Ù³œP‹Ç»˜ Gˆ­ô™Îb›V$ÞŸ q÷`0º%MÛÒu“hÒ4– ,&IH{ÀUUU_†¦Bat‚6 ï=MïÒTÊ`mGÛÚUAQ±<k0!¤b>?b0QW³ùŒ .ðÖµ·°!PÕ£ñˆ“Ó>ô�]×âœ'øÀp<æpßRU5I–‘fÒåÅ“{Ç<ñÄc”‹’Ѱ`4´<óþ÷ñ“?ùQ¾ú«ãÕW^æää„ÍÉ�£ˆ@/Äck-RÉä Ó\ i[ÚÆ“˜4Âk)q]üùÚD¸]©’¦ih;KÓ´hËÈÚ6Æ$ †¯¼úóÓ.?ô .MBrù±Ç(Sðü‹_àWžïûý?ÀìÔòìÿF'\»þ&.Ôln처-q6æì&&a:"D  7ùèG‚»÷NyúéGyùå—yüÊ.‡û\~hƒÁ0g:™0 '}þm<榩QRÐXO’¤t­G* 2áðø„®­¨›ãñ„.™Œ71&‰‘#"–É ã"„!‚Xz§¤ äE¨ª Á KÐéÅ ëGý-Öœ‹ Ƥ(­ ïwÞC�ç“$˜4!ß¿ÇÅq­uÌl.+”NãBXßH®µÖZ_$ï ™a}IãKÚö¸ÿOrƒÁàR~”ý IIBΨñáˆ`KB{Jsl'h+‹I'3R~ÓÝ´ký¦«£c–TûÖ‡¸à¸0¼À{öÞͽfŸ¹›ó ·Û‹ÛÜ­î’é #Í¿“ZÙŠWæ¯põäMm¹¿x€÷콇©˜b»- §Ý)wêÛ$yÂHŽHIûüßµÖZk­µÖZk­/!X=]8„¬8<: È}šê€ïùî÷óž§åäô6“ à˜Äs<›‘$[4Õ’Æ×4¶cc3çùç_@xƒ"¥m-­õdé�g-YfÂrûÆUv·¶ùîïü~ø‡ÿ>¯½öi’0«d¹ähvA„KRýȬ¦ë:ŠAAÓ4}1MÁd2a!4UyºræyЩ‰£òmCÄJàƒC«xá5?=!Ç`0@*6šÍénR×5åò£3&£‚ªئ¥à5™Î(«ŠÌäh©F±±1âd¾T¶[²\D¨šçC5YV*E]òl‚m,mÛ±,`ŒÆ»ÐgDXgq®£m¼’ˆ�B*LšáƒÃzG¢b‘“¦˜$#&Ìfeï‚kñ´6Ø Ñ*¥ªJ¤L° „Ø@�‡™ÑV%˺ŠnE£¨;Kð­:´×$™ÆduÓ€LȲmLb¨š9Å 'Ë ªº!ÑiOW‚®kñÁ²hci˜ÑQi”Á;Ap ABU• ‡’ሦª¨*‹1)BkÚºFJO–æxe©[!“„ÆvxE–Ò9‹Pš$I‘lðѹë“É¥wïÝFJ´mEšhÚÒènœ’dɪÔÈ:‹ ‚²^²\,Ù=¿‹³ë;æ³R‚1’ãù1ÃÉ^|‰G»LÛ•L¦#zøA>ó™çùº÷½›W_½Ê}ç÷xög~‰ó÷ÝÏæÆ¸Ëx²EW Úºa<Üåâý;<ûì/ó©ç^æÚÛ<pñ~¼ø�_óäã\~øhHµ¢k¼sxÞFƒ!i‘3Ÿ/�Åp<A—5Öy²¬Àâ8º´¤vÐ;h>(•G0<i’Bp”ËïFæT•ãâýóüÑçùç¿ð2'ÇK´2¼ÿw}€,ÍxöŸýS>ú~Œ¬ñíßó=¼òÖ«ü7ùæßü¦wògÞÇ7}èië÷nß#ÉuÝrnï>|TMC1Ü™ò£ÿ࣠F’.m2›ßãèPðàÅMp)Z qN±±ym\Xâ«%B:”l e vö69>žá%H­8¸s—sç6b™Ûd‚ãÑ&Ú¤,æ(ÝæàÐ&Åú#%ºÀ(ƒ³%$iš U ñ Aud*ÁÈ4Í)ë†\(lÓ2£³¸?ïÛ²ÄHõ-Õ²$É y‘!¤Ây"f߯|b‡ CÊcÌúSk­µÖ Ýqüuw‡¹¬ÉG3™¼!’¾ÀðËõ=#AŠÆ£M–ˆpBUÝb6ûÅ`—ñè[ ²XpµÖ—Ù¹ù‚,Yr{\ oPëšûóûÙ1»™p±¸È»7Ÿæ…ç±ÁòÜágIUÊ…üJFÃÁ™Ùá¤:ág_ûYnßæ¡ì!.%—¸HÈtÎ¥Á%d'yëð*zÛp>;ϦÜD¹r¯žå¦¯µÖZk­µÖZký–‚Õl0áäôímFã1§ó’““S¼÷ÌçsÊÊ1êÎ2lr°_1]äÎí}þ·ÿõoñÙ—*¾íC;qÜ:HFù©uYrppÀù‹çyçóæë¯ñ®'ßÃ;.?Æîv§>õïûú'I“¸J-}tvi#P ¬m)ËeËw­5“ɤˆà/I¢ ãl”·i☹r ¤ÀƒVЦ)‰ýXŠÖÖä:Ãû@]-IÒ­M³dP}æilŸïÚŽÄÄÂ)£R´ê³Éz÷jš¥˪Ɠk=Ö– ÚYÓY%$&§í*¤„¢(b!•ÏÇÚŽ¦iÈ2Ÿ³ÑŒF–óyüùýȱsq ¾,ë¾l(øXkYJ³)cIT! yža­%IrÒ4%ðÞ¡µa¹ˆ¥\ÒhòᘼÏC5ÆÐuݪ¤Çc±BÚ6 UÒmçWÍðÞ‡è(q<ß»’®¹·ñbZ"E_äåù úŽú¤Z•Oµm»Ún)AxœHZ§© .`­'/†è®£ª*N³>_WGè©LñnÑZ %X×öå`13U)]ÂM‹½û3„•§BÁáá£ñ˜º®™ÏçH-IB8ZÛÒ¶G‡œ»ïÉ|¾`Yµ”Õ’ÇŸx”kׯ±\Ìø•ç^dckDk-&/PF2mà;A’Äqzë$³²a4³ð+<ýÔ“\¹r…<×ÔuC–jq Tó;…²˜/pF»{œÞÞÇv© F@ Æ]H)Z‘¦R ¬õ8Kt]·)B¤8Û@Ðh-‘x„HP:áÑGŸä™ßu‘W¿ð?ýO~Ž¿ðßý/lïl0Žùº÷&|îùçyáåù–oŒ?ý§ÿ{[ÛT‹9`ÙÜšö‘‚,Ë(ëš|0FéÏ}îE¾ð…ëlíLÑÆÑuKNÉ.߇VÃá„DetÖƒìÏ!Ùô®ew–e}LžOO6è¼@Õ+O2Ž—]od &›Ü¹~cR’$a"fvk�� �IDATYÎð¾CêÙp“exÀ[Og-ÁÇÈd,µ³¡)ðα88Š$Î’¦Yj(ŠœeËàlç*ÆÔ6ºÌµ1(3»¶¯3Á"H©0ZTÀ‡ŽªéÈ“õ×Zk}¥ËûŽººI·¼Á )1:gPì‘äÐzÒOó|9+V`)e�M“irŸãÜŒÙñ« 8F§{oZ/*}¹èlê äxé©\Éó7˜ÌØžï°Óî œÀ9GbSž\æÅ<{óY¦aJ:IHdº¢.8î.îòâÁ ¤¤<µñ4¸@³l™@Kš£òˆ×ö_g[ì²;Ý%享iÚ†,ËHÓt}€ÖZk­µÖZk­ßz°ê}ƒI$I’Pä#žyÿûù‘¿óϹÿ¾wðÌ3 i—Ù�#¼ãá~áãŸáÇ?ú<û³/óÐ.|ó7�!Z¤tt΂ø>S4øÀ•+Wxãõ«Tõ’‹<ÂûÞûõ¼ôÒ«|Ë·~#BÖÔ­c4Œ­°JÇñì45=|Œ.<­cyQÛv_”}j0F3 (Š‚$IW£ôÞÑÃÇŽ¦®¨ë’$IȲ ,BÄ|Ê@X5G°VÇ!ûlIG’¤xïIR…”ñbᨫ“+–e…s–4Íú–{‹1‚eY"¥Š…?¶f±8EP*Ò‘˜åcƒ!!ؾ4´V¾†õ¬uXÛ¡µ¦,«~ûSBx{T]ë){ÙQ ‡¶Þû>Ÿ3‚K@JIb†¤1†º®WˆðÖuý÷E‡1º6èVYŸmÛ® °1ºt!F!Ðõ \¬ÆëŽqÖZ”1xÛÔ‹¢ Ë2NOOÑÊgi?3DCˆûNkèÇÀœ‹y®ñÂ:‚X“ô€™˜êœg8‘$šÎ6h­H¬mcq“ŽÙ¤§uEpá=I_8}<EÜŸg9¤u]cŒb>_°¹¹IÓZòáˆÏ}îy._~Žæ,Ò–ÍîÝ=bcs““ãçyß3â—?û"§'§ˆþAcïTbxæïç‡øgÿÞ1¯½þ&¿÷{m»Ä{OÛ¶x "tïüÐZqZWXïQiÆdcƒår HlëVóB”Ž‹mSg¯÷ç-­Ñ´–¢û[È@Q¤,ËõrÆùó;üÀü!ºü·n¼Á;×ÙÝÝ⥗_`<ðýù™6îßeT,g3Îïì`c4â´uƒ%3þÙ³ÿœƒ{ððÃ#¤Ð<òÈ#\¼o‡Í y–°µ5Eá)›x~*¡Q2xÒÃJïM-8ÕäÅ€4-.§YÌ*U†òtN cc:FkÉ|I³¡Ùßßg<šô9ΊÌ”ŠC‡ÖuXëè‚G)’‚ÄHÌ0GÉxÞßÛßïÿM!‚CàÑ2žK¤’Xˆ&•D IÝ–H!B¼$ˆ³×†Ã脘?íןZk­õ­@Ž®;¡ª¯ÓV×ÈÅIqdò�Bÿv,õÑ1"IÆ(µÃlöyÊùkdv‰x„J!¯«_F`u¹\B Ë3Ð6-o¿A}ÚðXó;n|¼VRVñÈÆ;x}ñ¿rï9®˜+œ ç› Rį…smq•[åMž Oo<ÅžÚ£­cÏ–šD'ÜZܤë:Þ•>…Ì$¤Ðv-UU­îÖZk­µÖZë+æª0„žE#šÖ:òõÇoýÕlÕÌH³”¶©˜Ï—ü[ßú]¼úò>å¿ÿ;üäÏrå‰ÇxàûPZ3›×\{ë&ÿä‚›7;6§ðUO>ć?ü­4Ý1EnX.«èÎÌsœuŸœ2ä¤iÂÍ›79·÷ O>ùU\»ñÃÁÙ¢¢È‡dYF×z‚ó8A¦Ö±5¾ë:¬ëúRÈócTïÔl©ª~$ú¬€³óIHCšÄ†ycbÁTÓZʲìœa匴¶c¾˜‘çyt‘–yžSU ¼«â%ïJÅñ%k£{R+Kd,Ajš©$E‘÷?WP R´VXB’eYŸ+ú«··Ã˜58kcKù• E°G=2[=÷<ÏišØl~V´Õ4 £Ñ­õ¯*ÒŠE]fUÈÓ¶í¯r¨Zkc©—”=Ì<s¡ŠÞ¬ÒcŒè]Ä)Æ$«ÿÑ;‰[º.^ü ¶‹í¯gÛ[t¨Þ»w@–eÜw߆Ã1ÖZ´NVe`!„xïú¿œm@–åý(u‹÷v­íÈrCš¦Ñµ«"Ôn[¡z}Jš<+µ*nrÞã¼#Ë2–eÉd: ªª>¸f±,O¦lmmqíæM”Ò“RU÷ðÞóÙÏ>G‘¹uý.—~˜Ãƒƒ>õƹŽÙl†R›ÔuË|¾d{o@Qä\ºô0O¡µ¢iº®ev:ã¾ûöÀ[$ ½URäB+\SóÖõ›|òÓŸæ{ÿÀ`¶B¢Tº:þ”!b‰Z’¤HÖ5ئ‹Ð>šHqZ*¬rܼ~•ε|ó·~ï I4ÓÉc<ôðB°\yì2I³C]Û°1Q.f\¼ïζÔeƒ6O, ónÝ8äýäO㜠ÈSf³»{[llMÙ߿˹½J öïÞE¨¥S$žTç–wMŒÆ™QUŽéd ™¤œÞ»Íöæ„D”ݬw’ƒ–¦]²(º®f4šš,7€¢mT� 8Á³DÇ5 t¶c>;e<ÇŒâÆsxxm4ÃÁ%H‰éî©9{ÍpxêªEJEš*”’= Õt]MSÛ¾ omW]k­¯l ªê6óùç1ư±ó8š=„ž‚Ê[o€TÃÁ#äj‚9º¨ãgÏäAì®ÿ—ÝPB{ÐòÆáLõ„û÷îçüîùÕõS’%l±Åíå-‡”jÉi:cw¼ÇVºÅiw‹GÏñû Fé‹Ó‹\ع½b/<B FnÄCq³ºÁ[ÕUô@3ŽHL¼6̲,.Z®µÖZk­µÖWXÍfs||ÌÎÎ.\@k½Þ9¿Õ`5KÚ®!I1§ÔµüÁçüÿÉ‹/^ãÅþ)ã 8 U›ríjÃŶøÐ‡¦|û·}?q?RµݽÇt2DIbrŠ<Çv‹c43™N¸}çóùœsçÎ1™Œyå•WÙ;¿‚"I4ºw¬:çišåªy=„€P’,‹Àu¹\ößçVбiš¡?#öJ)œãÝg®Ê³FoÛË4ÍV`N©5ò<£ëZʲmW¯\¤ÖYñBÎ9Ï|¾`<“e9ÞûÕóÝÜœP×5ijp®Ã¹š\?¦@€gP‘¾ˆ'n¿”q\Þƒ’rÍâêƒ`:Ý x”4hå (B}1•é¡VXm×Ù~9ûYÎ9¼ó(cÎì¿àž­vDÇlÌL=»x=+àÒZS×õÊÛu–</zǯì¡oƒ³ÑÜuþ‹Jx”Rm8™/ɲœ‹/ÒuuÝôÎ×è •RõÏ]qÖ^vÜâyàúÇÓx飯,yž¢Ttúà躸º®%ø€Tq¿FcÚ¶]9ˆÓ,Eö9¿m×âCÑãñˆáx̽;wðÞ±µµÉÍ›7Éóœ{÷îÑvû÷¸òøãœœ. Àöö6óyÍÎÎ9®½y‹'Ÿü*Þº~@Qäܾ}›Á !/Rœ³Ñá¡U¹ä¹ÏŽüŸ!”âwÿîo£®k¢á1ngß‘( >£ !‡¼öúë ÇCöxãõ×ðu…6 çJ³*\BâÜYdC|sVJöYŸ’$‡s-‚@p’ùâ!5ç/l³Ó öïÞBiÃd:%àHSÍrY1_“¨”阦Z’HÞÒ6 uUѶ–œ!ÎzÒ¤ÀYÉÏüyî3œ?ŸqþÂ}xßrt´Ñ5Yjc1Z×5$*pB鈉Îë²´Œ6‡œà½Å†š?õïýY¾ï÷~ Ï|à½lí Y,Ž@¶Hå)«Óþu¢Ñ:Áó¡¥!€ŠTÖv£A M5é¶B ¢C[Âd2a8 D xk-Þ9$‚Îy´1˜D÷±-U£LL’ {—ºL5‰7d\\Xß8®µÖW¬¬SÖ7hê{H™‘e;¤ù‚1ˆd'{cc1´H# :%4–v~O…ɶÑj°>¾„rέ•½÷`!ÔžY3c2˜°³·ÃÆÆF-+1ÆPPpit‰×'òVõÃňíé6;Ùlx³y“/,^åñÝ+<¾{…Ép‚Ibüƒžtƒwn}/}ž«‹«4IO=ž@UUÔu½š^[k­µÖZë_®E»`ÖΨ¨p¸áߊœœq2f˜ ×;ì˨ZkWSÆÆò<_÷q|)Áª1 Êh¼”eÉ`8Ä;Ãw|ç·ñáçܹ{›£ã{Üñî¿øáÏÿEÞÿþ÷ò‘?üûpn† 3Nf·É3Ag[ÀP•ßÕäyÎáÉ!MSóÞ÷¾¿û#?Ê¿ñßÌÖÖ&ÃáˆO}ê—ùÈ÷Î×ÿvQË0¯ë!©!ËS¤”4mݺ86$Ï i¡±±Í=BÊ3W£Òbõÿ9çûÑvCÓ4@ ª–$IÂ`PÄæöÄPUMÌ£ì[ëccz MSºÎ J*“®Ü•óùç2L"1F!lÙÏóA|ž­]eŽZ¦gãóÞ{Zçp6~ÏY>jÛXƒ„º‹õE¡ú~¹‚ÑYVcú‹ÅcLÌ»J”RÔu ¨~¤þ‹÷y„{“É„$I°Ö® ¦Öš$Iúýëû¨Kžç!X,$i‚R’®u¤IJ–AY:œ+Wp7F0@Ûv/0&a0âœ#ϤilHOÓnÛ¶ÅZ·:ÎñbUÜÄÙh{Áq_žAÛUü¾ßÎcÓ$#9Ýßg6?%I¢ã¡ë]¤&ÑxhÚªyËãö:Ëñá>e¹ Iö1&aw2b„¢m;ꦣ,KvvvyóÍ(­yíµ×ØÞÙBˆÀññYž1i너¯¡½ãåùóçøð‡¿—ðœû±ã÷ß÷rå‰Gó8¾y’¢´\¹lÛ¦æá‡æÎÝ;ŒÆþ£?ù'ð>fË6e]ÑA"„F«Á‹êÖH0Ò4:$».¾a«Þ¥iŒFEÛtŒÆcŽƒÃC¤!…À†@U/1ÚÐ,—Ø<C ‘•¤¸®ÃYË ’$mWSC3ä£ýi´jyô2O¹pÿ×Òqùò%ÎÛe>Ÿ3ñÄh“è˜õk[¤ óóyÃòtÆ_ÿkÿ#?õß`º!yí¥ëüÑ?’±µ=¥($W¯ß!IaPd Ãá„®ï)]ëIR a~ˆ _j…'‚DK‰RÐv 6 BŠ8–hRlgqÖÒu‰˜,ÛT|]Ù..ðdEF–edYJÓ´ØÎ2LÁÑ¢eB ‹îíõçåZk}¥]>‚ª¹ÃÉégB³½ù i2EˆP¿# êÛtU"t“‹ '„ùUyƒ.ì3  Šîõ¥«eY®¢™|ð¸à @–æL§S’ÁÛÓBŠÝÁLä§®}ŒRT\ؼ@1*¸ÙÜäêü§å’§.¿›+[W(ÌÛ€T É4™rez…sù¿Âi8eæ$$œžœr|r̹sçÖ`u­µÖZë7=' ÷Ê{Ü\Üä˜cZÚUæuüt$$lˆ îÜV£ ’#¸Öoîgª÷þÿÓø~]×”eI–Ež0Wœg­/X=:šÓÙ†íímÆ“meuÄgžûy>ò‘ðÈã; †ÅrI¹l‘rƲ¼Î²ºAY£TCžKŠñ�ßIšJ\‚Åã½¥kmOÓK¶·6ICšfloïðÜsŸ¡©;æ‹9E¦‡TU…÷–ápÈ¢/ ŠîK÷–¦‰™ž“É&ˆ@U[”N0‰ÆVÞGÐ)U„•OÛµYÞ—QE«uqì}>Ÿ#D`ccƒ¦iú¼ÑNã˜~t“¶­%I’UΧñëññ *Q¤© mF'$I†”Šå²Â]H¼{ì]JI¹,c~b_ŒÇæ+BðHƒAÁã¬_O9W¥ E¡ äÛ.P躸 gÒ$I(ËrUôõÅ ´( l]¤‹ÅâW嚦iJÓ4+(iŒ!Ër¬µ,æetÖõãùI£”R"ÈöN°X”t]Ëp4`2™ç)eY2©ë¦ÏMðÎsz2£ÙÞÚê»íÁîWmÇ™k·,K„dÙ ^¿*Gö̵+Ôu‰ÖŽétJÓ4,ñ9Xk±UC1q|2GJX,f´m˨ÄcÑ?Gm4BJºî,[U3Ìçs¹|ù\¿y‚¤m+.]zˆ—_z™‡.½ƒeYâg:ÙàµWßäÊcOðñÿ>ú5ܼsÈ×(+ÝÃOÝŸS ­¯xá…Ïsrrƒ^äcûúÐ_âøè^<¦ý¹jm\H ʲ¡Š½½=îÝ»Íõo±··Çì4æ¬ÞwñA¤J(ç5Jj¼‡år ´m×a]ƒ$¬\ÊX–5Y¦°}™Øb>#O‘'×Ò†Xê´»½Ã|>g²³C°­Tã‘QõÞCÛ:œdƒ)/½ðÿø/ñÀƒ›ŒFCªzÁÕ71™åþûçÑUšh¤�$:MÐl#R“Ñ–'tNÐÕŽý_/qt¼àè?æ™÷=ÍîÎ{û·ðÒ 52?ÄbY3lL7¸{÷“J:‹ËêºæÂî:UœÜ!MÒè~$I)«ï$uë1ÊPÍ+ðpáÂÌg3”2¤™ŽQ!RÑÖ5]hÐJcg0pëÖ-Š"'ËbN4xƒ‚e9'M ‚·cÖZk­¯0¬<eyººÑc²l,ÝEˆßÁ«,B€Îa`hÌlI¨ â6.î±sûRÈÃÆÆF<LJ° Nå)“tÌv¾E‘þÚpóüà<On5Ï|ŠÕuþÑ›?Á'ï|’Æ5œV§¼súÕ<1y‚óùy4¿úØJ!ÙH6ØËϱ“lsRpP0ÎÇ ŠλÕuîZk­µÖZ¿¶š¦á¨>ân¸KZT®Øbë×ÿ(Fp×ßåxqÌî`— ½AA±†«¿I²ÖrëÖ-f³<òY–ýk\&‰U¶xšFSß|>'Ïó5\ýRU£S„Œ.ź* AQ GÇ7¹që²\²¬#¼Ë#.]žr|r—ΞbLGškŒtmMp)Z¦•b]…Ò‚¢(ð>°½½ÅÎî.¯¿ñ_ûî=.]ºÌOýÔÇxî¹çyêé'™ï#…ìÛäãw–e}&¨¥,]_Ê/— ò<'ÏóÕ¨û`0Xųqö<Ï ½‹µmc~h’$=¸ô#MKš¦é ±4ÎÁrY²\–=LMHÓ‚d±X¢”d<1›Íxíµ×‘ ¼ûÝïF Â „äæ› †C¥%R„8z ËTïš­ì]çVPw8bC×ÕXk)²$6û°Ê˜={®ñ†«/òïÎù>wU®Ü»Iòv>éÙØüÙ‹m>_Pù*gu¹\®\­gWˆ«)‹Åkí*"à‹ãÎÓ¹è•R²½³³Žº®(Ë%ÆèªÖ}þh‚R×ËIžQUå {ïúWÑÁÙ {ܾ8Žft²j˜»À*[9Š}’°XÌ@žEÞÇ8‚äyÎÆFl©—R2äY޶–eU2›ÍHÒ”Ñx´ŠW@Æã1ÇÇÇ<þøã”}áÖíÛw8wá<¯¼ú*<p‘7n0™n±µµÍ{r||ŒuœÎN9>^0è:K×¶ mÛ Ó„éÏ<ó~^óÍÞ%aýt2¥,g4MCPŠ<Í0}VQ1æBÉ“Û!y‘àƒ¢*K”ò«"²³q½$Õ ‹Å¾k±®¥m*¼w#dCò¼àädFQ úsÈ“&†ƒý’$acsƒ®Ïæä9“ÑÛ6tM‰R}–°R8i6`Y:†“-lî¿þKàkßû4y¡HrÁdcˆ i® œ³´M`”gt­£³5­õ8[%† uS²½s¿÷ü·£ v÷î#Iaÿö5êÎâJ‡Ð9›;ŒÏ³µ=äà`Æç_x™w?ý^~â'?ÆË¯~žïü®oçoüõ¿ÆŸùÏþ4ç÷¶Ð:¥i:‚ðP S‚¤™Æû@‘ðãã9‰‰¹Ã¶ótmËp4Ä…@Ó¶èLQÖKòÁ€Á`@Ó´²³»Ãòäm$J Ú¶¦ëڸϒŒõ­ãZk}åÈû–®;¡,ßÓñ»È²ó1¾å+‚âiÄhB&]dØêÖ!Sd²‹­Öú-U’$L§ÓžxÂ=à–»ÅÞp ÅRùk“­t‹+Ó+|ðÿ‡½7Öì¼ë;?ÏrÖw½ûÒ÷¶ZÝ’Z’­Õ²lËvl¼�Û`0a3‚IȨ(˜B1ÉL%S$Uf&C‘–0Æ™xc›µK­^nwßî¾û»žõ9Ï3œ÷^ÉU6ÆrÉòûíººRwë¾ï{öó=ßßçûF>}õÏ8³s‘“Çh1¯]~-oZ}kþ¡ ¿djÇáèxmƒE’4¡Ÿô0AÄðoj¬N5ÕTS} ã.ÏsÆã1ÃáA:`ÏíÑköXh/°ÖXcFÌàã#j ÚÑ÷‚‚wÀ¥Ñ%..Ñ3=VãUÕ"MÑœš«Eá¶¶¶ØÜÜ$ CºÝnæò¥(›1y•ãkŸ¶ß¦íµÑ<nô<勤q<³··G·Û¥Ýn¿ìŒÕÃÏì¤CÈz楶 j)%žòÒQšºÞ÷[ÛÛ<ôðý¼êžÛZôÇ,/­3¿ÐäÑG÷p”T&‡L’ؒ؋ð´¡)K;1åjó0Ï3â¸A«ÕäÂ…sÜuǽ¼ò¯¤Ûåá‡åîWÝE7ŽøV Š¢$B”ªGçë"‡çé£Ñð8Ž‘².<Êóß÷ŽÌ@çž_Zk„”euTΤ´8bŠL‡¦k ­‹š´&m÷ÆX¤P~4)¾ñxÅ+n¥9ÆäØJbLN#†ë®?ÉþÞÞQÂàʪÆäõ}à°°<zýÃ÷søÂTµIeíó Ö(jPem: …T íi´¶dù­ÕCµ,K|ßg8~QÌüðõÚíÖ‘ çù‘1õØÿaºÖZ;AÔë@)uÄT­ ^7Iš–Æ©EQâû84r’,­—·¥(JpJiâ8ÆÉz™7ñ3¤fÍ &^&ÎYœ;äçúÃïtuž_›°¢Þ;Æ”c8 ª,¸99(4›­£í@ʺ0M*EÕÛ˜˜¼ïñxLǘ²¤ßïs|ý8{û ú#*j–êææeaÓåAˆ­ F“V«Åîî.a°yå Z+vvà¦×µYZZDH‡ç{ØÉèxV:^ÿú׳qé2çÎ=G«qis“¹™V½n&X„C<‚‚ƒ}ZÝ6JA¯7"+2¤RÌÎÎÐë'ŒÇ#ffxZ3¦4 æçgqTT6GJ* QÕ?—úç§YÁÂÂ"—/_æsŸ»Ÿïþî÷°·¿Ï±c«ØIZURãZ­.eaj“IUÙea ßÄ"ÉÊ‚°ð«ÿÇÿÉÇ?q‘·¼ùzVVg8{î^qÇ ‡;¼êžW$çñƒéaТ¬2TP’Q™)–ÿ1·0C…anac5Ë/ÿò/Ç1?ôC?Ìììsy½n~á~‘ÿ±ŸäCþüãÿÄÏÿüÿæ7~“3Ïmñ‘|Ž3göùï~,aE­�aa+‡öCJc­yæèv;”eAY´Úó\½v_g¾ïiªÊâûi™2%´š3ä¹å·ç?ðÎï|++Ëìíöi¶ZŒ“ ßWä…!ô}œ+ÂéãTS}³È9Kš^!M/¡uƒ XÂ÷çâ›(… �¥Í6Zäˆq“ïRöŸA7O k ¦©Œ¯§ò<gww`fq†Ýd‡KÃK,4Ym­è/m¬J!iû^7ÿºb•'õ%6G—‰ý‹÷pûì´½6ê/XŸJh´ð¨l…±õødا×ï17775W§šjª©^ Á`ÀÆÆ÷ß?W6PÅÒ‰%NŸ>M[µÁ@FFIùE&•«ï èäLn¸Ü¿Ì¶·ÍZce™†k ‘_„˜ê/qy3Á/ú¾OÇ<øàƒ(©ˆÛ1ÁZÀn´Ë{Op%¹ÂÂ̯^z5¯-ój[XÒ4Eë:´vˆŒ\ZZzÙ–9¦YÊ(QÅURM<^Z“[Z‹T‚ ð1dYAÄœ8qœÞÁ%Ú­&Â)Z³3 v ½;ý1aèh·„a¬¦H  !½ƒ³xžÂ9ËÚÚ1Úͼf$¶º¼ãÛ¿“gž}‚~oÀÂ\›Ñ¨”‚ÈoRNF›kcÏCJ© „<4%Y–PU%õ´~EUAQõ™E °•%ôŸOeÖ†`Í­  Š¢ MSâ¸YØT P”EIQ”G)=ç ×ë#„daa–½þL•ÓiÏa+M–Ò$!ðú®úK =I“ ¡©lÅx<Æó‚£ôlž§TÆ`ª:]*0“B+ŽŒOœ&Ï Â0©^`T>Ï›=4Cëå!hµZGÆuUUEA–eø^mb²H Õ<ÏIÓ”¢x¾ô«æ ¶&©W ”òPJ¿ÀàTH©QÊco÷�¥aà£}91K+¬uG©ZS:¬-qŒÍ=×Õ�� �IDAT3“ui)ŠŒª*‰¢à(…ªXk&&« ªÜ$‰[Q–RzG?ê4­T „#nÄ ú}F£TFÚ‚v»Mžç”¦œ˜×ë,e•c K5It E‘‘çu ÔþÁ>žç±ßÛ¥×ëãy1—/^daq‘²4?qœ‹—‰£ÁÙsçˆm<ÏçÌ™3\ò$ýAAU9®¿^£=K£ÕB0$KR*ãèÌÎ uÈüÁûyà™›ëróÍ7㪠WÕ<ßC y®Ž¢¨æÑ–fr¢s8W‘å#F£Ñç {{{4âRHòâp?r(ÏR–Ö™Éh]8I$;Ê¢D þ~Ÿ¥¹%îºó.†Ã![×®am}òž™c}ý:¤ÔŒÇc¤Óõ:QNÕiéÒXÂXSY…Ô![;üîï}–µµ€[^qÛ»—XZé²¼Ò%jhüR²¼¼L«Ù‚JÔE-Ò!UˆòªrxºF yVPÚ g}ðì™süʯ|Š(ÔhuŒ;n¿›^oÀÇ>öq~ý×?ÁƒlòÌ3çØ¼Ròà#?ÄÎ6(Oqåj7¾!âºõ\ݼÌâÒ,ãÑíxB’e)Ynh´ÍYTЦ?¸ÂLwq2 [øžWñW·vXZZ Ý^ /JâÖ<>ø ÿô—?Ä­7ßËÂÜ:Uéc«€Ÿÿ¹_äío3ïùžï”C”ôPrzÓ8ÕTß :LªæùUŒÙ%Žï"Ž×ù¦äŠ À× »(;«FäãË/B7æ˜)oõë§Cƪ@жmúù€Ýd—›nf&šÅSÿåOx\ÝÄÂâ)N†}¶³«HoÀ‰Ö:«ñê—Ù ¡húM²2#-Œ5Tyý~ÚíötåL5ÕTS½@£Ñˆ |ücç¡g¢u²Å}å}Ü:+²”$*!!ù/š£'<ºU—çöŸc³Úd?Þç :à˜>†‡75VÿŠæª”’(Šøìg?Ë ? êDtoë2Xðøàq6’ bSŠ’ÀÜÙº“ØÄGÏa ïpzû«aµ¾¤¯‡± —‡—ÙØÞ µØâXxŒHDø/±9N-•à [s=…‡ÖÆHÖb{g‡"WX…šþAJÎPd%e®ý°9Yj1Åk’FÜAiŸ¹¹yFY!êâ—v«ÍŸÿ žnqû¯âæÓ7óÀƒŸŸpíÄ(­J`m51 R õß SL.Ò<Ÿ x>U™¦)AÔ�÷üE`Ýä­ŽšÒ”G‰N�=ùý,Ëi·fð´ÀP)FH’$hå¡”¢Ùl£•Ïp˜pÐÛeiy‘,OQ"BkÅÁAN{[Y„¬&‰” ÏS€Æ˜úbÐójÃS©º„Ji…˪Ú,+3Â0˜ÖR!‰£æ„«ZMvL…'½ÉS ÿ‹X«I’�uêõ['d«#>‡ïûGLÓC¾©µöˆ3{h¼b�^øgƤT(¥Ž’®‡œ‡«™œBàyš$)ŽþÜù‚,-)ò§-èõRò¢æ¥ Á„¡*Ž^׃ÖÞQƒ½Ö;Y6ιI2²æ´Ú«MÖ,C*&˲f“&IB„õؽ''ÌWŽFب›f'f¶ÖêȔβú Q·ÛåÌsgXY:Æ¥‹×¸íöÛI’„ÁhÀý÷ßO–•ÌÎ-R–ŽápH0f<ÊYXX�`gwå7) A£ÑÀךt˜Ðh4pN$#ž>ó úЇ¸rm›×¾ö^æææiµÛ\¼t‘…ù´ªœeY’eeY2;;Ë0¡ÊšÜv-Fã>ÛÛ[¬­Ÿ@kÍÖµ]Ò8gvv,ŒÇCš­ˆF³)S¬µ„^ ÆaLmZ‡¡_#,”ÅÖ×SÃÌÌ,ÝN3A� ƒ:©­||/BJAUeà*/Œ(JƒÔ!+ןà¿ÿ©_âìù-þÅ¿ø@ÆùçX;¾Èµ­ n}ŤـV«Aw¦ƒ)ö1ç“%ŽÊ@YJ/@+A^”ø^LàE|èÃåø‰›Ø¼²‹1[;?÷sÿ% r‚¬p(àÃ{(ûxß~o~ÓkØÙºÄ»ßõNvvw9¶v¶ÖÛ­äyÆÕk[$iÉÜ zŸùÑ¿ƒR¿ú¿ý3~ïýàøú ïøöocØßg0Øg81gçIÆ)qc[*®]ëÑ;€,“Äñ"ÐàìsOñï~ã Z­.ïùîïÔ„fo¯ÏüòôBdª©^ÎrÎR–=ö÷?ï{ÌÌÜ€çu9,±ú¦• ¡½ZBo"Á¹½ !œš«_'Åq̉'Bb¤9ºùv“__É=v¤%×u[¬Ú!*‚¯�é …d©¹ÌuÝëxvÿY.÷/qûÌ[>Fw®;mBžjª©¦úÆò,go°Çîþ.íÍ6§Ÿ:ÍuK×Ñj·¾¢qjë,ëv“ÎlŸaÇÛAv%‘ЦÆê_ùš¯ö ¿oïo“7rn¿•·Ýò6\äøüþçyjó)~óÙßÄœ4ܳr³Ù#¶ê¡×sæÌfffX[[{Ùœ †}öùôî§ùäÙOòï ,Í-yP/)cU+Iikþ†VŠ(lâ*ýÝ>yf™Ÿ_Á÷4y>&®;~š"ÿ0{{)™ÊV‘š‰ÂV–ýƒ¤Ð¬ŸXÃì$dŘ(P¹ckû K‹«a¹õ¶[èt:<üÐ#¼ãßB«Ó¦ît¯Xc AÐ�U5iàV^=ŠoÒ£¨sžçõè¶„a„çÕReYMè')N!pÖ‚(¡Pžbh5×Ò:|_>n2N~X¬”$I&M3šóM œ@+ÉØ”tÛ3˜²b¦Ó`8Èôû,,,Õ¼S-ÐÚ¯Q e,Í2ƒR ¥š �l=>lŠÉgöAú8O£u€sJ:´òÈó k,ÖÖIÚ²°„A@Ðl0× ã¾âyîè)F†G‰×PÿûÂü iš2PJ"„<bv¼Ðˆ•R’¦EQL–{mÚS 4HåÒR7¹/ˆB=ÙÙm=¶e LUE!Ö:†£BÖŸ/ôcJ“àMƸ‚ÐÇó4i–EQmL˺•gaR’•eYmX 4ͰÖE!R© ÇÕÃ&†{=ŽmÊçÍãÃåÓˆcÊ2¥šà�†Ã!¾ïÓh4(ÊH¥Ù¸p‘q’pË­·òéO}†ûî»§Ïœeye)TBŒÛ4qÐiwyöÌ'®;ÉæÕm.œ¿LÅ€¤ÓšeóÚ.RTÌvÛ¡&;„¨ÉÆ*“ò-o} žñðCf)Ù8!'ø«K`Ê#CÞLðQQ˜’$2‰[­Vg%ãј h°²¼À —²½³E§]›–R:Æ£g!Ž›uRØQ p‹ÄXGÜj’ ðü€å¥*kYZZB+Måj”‚RõÃp˜²Q†!QäcGcn¼ÿùßÿõâío»Ù¹%†£K¼þ÷âÈWR’qŸÙ¹Y¢ ªdŒFˆXarCܞņÜdäiADTR×¥s*àÉgžåg~ößòK¿ô#¼÷¯ÿ·ü›ßXåÿúðñý ™Í8^u÷¬¯.ÑðàCsç]ëüËùϹåÖ›éí'Ëo¡ÕŠðýÎ>÷,íVƒÕåeò¼ ËrÆ£1JûÌÎtøó>ÅþáCt;páÜY>÷Ù‡øäŸxÜy×Ý(WRÙŠ¥¥Edà3Ú9@yM„’8šX •ñ sü  ;·Âü|æÓ[ôGvRR±³smj¬N5ÕËZA‚´C¢Òàù3xz)§©ÌúérˆŒñìM®G>¼HÇx^8Ýt¾N*'($‰$è Ê>;Å6wÇwÑ;abõÈ#—‚Hz„x0aú}YcÉœšeY­ðéñ§¹^%5)É8¡7êÑn·iµZÓ4ÕTSM5Qd‹w¿énæNϱÛÞ%ïä|ªúûìsgëNN4N«øËƒ…¤5jÑè50•A¶%­¨E+˜w¿ZÓ»,K®]»Æp8d~~ž…ù¢FÄÜúëÇÖYŸ]GhA:JÙ’[\sר0¬Ûu:ªóEæ¢ÖšÙÙYÆKÒtüªLgƒ|Àgv?Ã3é3TíŠvÔ¦)šhôKÎÔ×TšFaª>ƒƒ!I6äø‰ší$ÓéHƒ}Úíž’t:³d© Éméhu5ÆŽ°VèEjÑJ¢4\»ºT‚Ø÷(Òq£Í±c³<wînß½™,ëqý‰užxâ)’$¥4‚0öP²NGÆIRáig͸¯i2œDœë‘ôz¼_ç†4ɱ"%QXXe–’ŽÇPY‚(¨±y]´07Ç wÀöÕMâfL·Ý¢Ì •)°•% =’æÒÃÑ?0¦`ÐÛev~T€s–ñ C:I§Õ õ�ï{†£t¥¯0‡Ràtm%ãR”0(O ¥¡( y^¨š&q# ªRúÃ}°%Q É³RhšQˆ­RŒõð´Oi Û[{t»ÄdL<ŠÄ„QZ§[•yÅh4žXÅuËûh@UUõˆ|‘’ç9ž¯¨lE£ÑÀ˜:I;÷‰â�©*Ò,AJEUZ:9ÊÒ¥9^`È’EQUDQLàkrS2¥QŒïù¤E‚ïX+(sƒ’uò´ÈË ß6›ji<O’¦ y–à«Ð÷G4 ¢fÄxœ „E8W£dÏ÷ ƒ&EQbJ3ÁXšÍYžzªnœwZ *ãPJã„¢, ®t(-q¥ãúõ“Örp0âú“§9wá q‚Çžx–…¥%z)ZÅÜ~çÝl\¸Äh˜õõ†t»]ŠG¿ð4T 0>’NK’ûT²¢?´˜ÜFšÅ…+ëËüÖ¿?sóóœ¸î:|OsãÉ“DÚcœ¦ìõèvg&æyAZ’4§Ó™$q-yž ŠÂ€KñtÀ©›×Ù8{?ð¸rå FŒsŽ¥¥%Ò,Á÷BJcðÿ ÅI>D8Òšq2®Ç;]LiH²Œ¢,h·:¤iBàGh¥1Æ5:¤¹Eë¨Ñå±Gžå‡ÿöÿÄʱeÚ3+üö゚w¿ë¬K BÉÚ±%ÒqÂêÒqlaJ67¯²vÌ„мH4e>Dy +`œÕ ìÊ>ù©‡ ƒ„·½ý]„aÌwÏ;¹ïßÉ·¼ñÕYî{ýíÜxêþÉÿø?p°×ãŽÛ¾·¼é$wßq3ŰDÒGÒgÿ`DÜhñ7øyï÷¾žû»?Fà·É®Òm7™›ëP¤;DAÂêJ‡w~ÇÜ|ú?õ÷ŠïûÞÿ†2-X:¹ÎÖæ3”nÌþÞínß+ñ°¼â¦;hE TD¯Ùù«ë]^óºëøÌŸ^dãì·¿ê8ÃþÎEÓ+‘©¦zËapv€´CZ²‹”óÑ…imÝäND"ý6ZÝD:|œñx©jãY©hj>T{{{�,4æÙ+öØÊ·éÄæây|õ•o«âÿüJnê»r†%¹D/ë±›ïW£ñˆím´ÖScuª©¦šêJý”b©à¾wÜÇ[x Ü>×û÷_¾¿é³ÒYá†ùXŒièò/(ÆB°”,±z°Êµô¹—3×ãxûø4µúUHJI’$ ‡C¤”?~œõõuÖ¯Ól6‘J¢¤¢È NéS\h_`—].‰K\0X·ë4i­ß÷Y\\<BB¾,®7ª‚d‡O^ü$C9äÔÚ)NÌœ #;(ÔKÏXM'#ÒVVTl RV,/-pqãY6BiHÒá$5iRÒëõ¹î†5ÐÎØÚTIûx2¤ø8eÐ^P'J˼϶¯yÍ=<õÔs »{×xå+_ÁŸþéŸòù?¿öæûp*k¨¬¥iÄ]’qF<aGyÆÌ û{; 9ív‡ª*ÉsC·Ó¥ª,QãyEQâûáûZ‘¥I=ZîÜ$ÑX7ô”e]|åk²Èñýˆñ8Ãó4Aà1 Ã?òЙ�g ‚@¡” 4eepÖ¡=Màû„‘Ï`0ÀZT“F{Qß—¦¬S¯V!%8*¤¬Ù­ÆT“1{GÅx"ÄU–d<¦ÈGyŠ*ëP¤�!ëÑ«¢Ìñüˆ ÐG#ùGKŒ)v¼:…*ÁiL•Ç!aèá\]Vtø÷”Ôø¾@ 'ÉO‹µÔœQ­ÑJןCÖOIŒ©(MAž×Ÿ¯(2Š2AJ¿.3§êB« ñýàðHÐuë|} ¨ù·ynëoePRÇQÝ|'ÜÄ€­£ïÝnc*LUÇá„9¢‰¢€,K‘R£=¢(¨*ƒR“í²ÈÐZNкNŠ9RHÆiJP¿ xÚ›lÇŽf£IÜhðÌÙ3¬;Î(Í™_\Ä÷Cööö ¢˜óç6ø“ÿõ­ßÆg>óY:3]vΰ³»Ïé[nåÉG.37;Ëù ¾B*G…¤äƒQré“|êþ§yê™§¹íôÍ\¹²É'×ÀTÆLÖWº5U…˜ðpçææAZ†Ã>¾¯¨*‡çIÚ{{{lî]æ&ßcie¥k ÄÞÞÖZÆã„F³IY–¤IŽñê‡ASÙOHYC±ß‘e9•©ÀI|í£¤&Žb´ÒøAH–äaÌ8)hwæ±hvvúüäOþ|–—=Ò,áôM§8èíÑlK®\½ŠV‚{îy5®rt:s€" C,¤#Œ<ªR ”@{aQ‡T>‘ók¿ö~^ûÚûHÇ)O<ù$_xü øà'9¿q†þÑûX]YâÂÙ³8ö@$t:’z DB¯w@{¶çU |Œqó‘~š0hòƒ?øýÄí˜0r4>E>ä–[næÃúgx^„R‚ÕÕyºsýá€5WᇦF麮r •HéÎÅø1|þÏrëó$ùF{‰ïyïÛùÃ?üu~ô~îxõ ­NÈq}lz%2ÕT/cÙÊ0mbòº­Óˆp¡fJOõEvœTQ¼€c’ô¥ÓlÜ€çMµ[Q±²²‚†‘7bÌë,3b–Žì Ñ/ÎZ‚fÜd¾;‡ÒŠÊÕ×<sósèH¯N5ÕTSMUËI‰4 Ý%®Or’¹>½Ó«·ðäàI>²÷qÎ.ð-KoæM+oú²X–v³ÖšÑpÄ^¾Gé•hOOôW©F£Á©S§˜ŸŸ'Š"Úí6íVû‹ž7~ÀòÜ2÷6îE xöÈJr{çvÂ/èœ#Ë2.]ºD»Ýfqqq2ý+c ;ãžë=Ç™ä ·ÌÝÂÛÞÆéÆi<QOƼäŒÕ<Kñ=ðbª„^¿‡1%»»;ŒÆC„°(¥h7›xž¬9˜ý>žw’4Í"MÐŒšaa4âdEÕeB…1€%Ms?b{{›</ 3––fèõR>üáòš×ÞKØFTÆø{{»´šzý=¤¬èvbv¶Ð~ÀþÞJéÉH·˜^YÆãaNÆêƒEšÇ1ZÖè€ÃÄk³Ù¤ÓíŒÇôû}Z­Vm¾ ŽZâ=¯n´·U…79xâ²<Ãó=œ©ÇÝE¥ˆÊ ¥ ý£1íÑhDYÔÆoÍ®¨l] UUJIâ¸Ö>išS•¥ÍqV •ÅØŒÒä …’>N8ÊÒ`«ŠÑ8¥Õ–xAÍc­GÃs´ÖX[Mv¼: l=<äFõ(VU<ÏCk=išó�11¨#ŒÉpVàœ$ êä/H”vuù—(¨_Fx!ÖTUm¼â$(519C´'QžGi,BH? Ì‹£;!$ZûH)ЕÆ:K’¤H©BãyŠ,IPÊCJ5I-[T ÑÚ£ªjÖˆµ¥|dQàùq# ÈKÒl|„Èóšçªµ¦,R|_£&¦±”¤­o~½.Eeñ£sçϳ¾¶Æ¥K›T(œu\»v“'¯§4–x˜oý¶·³yù*·ÝþJÎß`kk ÐäyÍ€µÖÒ;p¬['Ë Š<% g¡¥&æ·d{g‡7ÿµ7ÑÛÛAôìoxós3qÍv8</¨=J1NÆôz}â8ÄQáW ‡À|ºÝ*kqÆàœ¤ÙéqZÏ;DZcǘÅ÷ý#|„¢.ˆ’ãñ˜,Ëêý§“¥ÙѲdœÀd;K“”²²„Q­"®\ÞæÔ­wñSÿà'øä'ŸåÝᄌÝâmo{+ÛÛ±vH–e¬®®âlÔPî ð ”RŒFCŠRx1Â)вDÈz¿4¦¤6yôÑ/°»3äÉ'ççþg¹¶½ËÙ}._±ÜpÓïû‘ïãßþÚïrþÜ%ž;û;[¼êÕ«|áñs<óÌ£”©ÅXÉp8Dy!^ÐdmUñ왌WÜv Q3¤°’%£ý}Fã ߟ'É-ãýmZݲ2£Ùmpùê%VÖ †ã‡¡×ß!ð›,ÎÅ,,­pò†9Î]8Ïâò,euÀp|oyëë¸îú_gãòy’ô€ápÄoýæïóÓ?ýmÓ+‘©¦z¹Ýü8GUÉók3ÄI‹ç@7ALS˜_Jž7ƒ%åèq°{- ê;’é2{Ñlm!RU×Òk ÊIHH@𢾶ïûDqT?̯ê *ã™IÁtO5ÕTSA 6ƒbãË0ºF%;È ÅŒÁ,íù[‘f—ÏÎóäðd!°¹ã¶™›™fý&òK`]„ø¡¤yJáŠéâþ+HJÉüü<sssGÿ}xùb­­»€ÄQÌÉè$…WðGÕqet…ñk­5|éátž/iÿÆW^å<3|†$N4OpKãfÔÌKö=kDEYåJÇá„‘8ÆT†4Kp®æ¯FaH–%T•‡(ú½>J)ŠQçûH\]¼„“ŽÂ”eEQ”híáÎJ</äê•-leY^^&B~ð¿—ÝÝ}°’ñ(ÅZPZ‘¦uÚѺ:yDˆŠq2Ä/ +‹ eIÿà€0 ñ”O‘&Xë<Ž­«›\Ü8ÉSNž<I»Ý¦,k¨ïûT¶ægÖÍç5“Õ”aX'˲<jŽ †„áó%OUUái’u±Ñáסu˜þ¬9“JL™á+´èÀ›ìH‰D ¢ÂØŠÒd()Â�íXR¬5(åá{Þ„Íè^P씣}5iu¯ÍUpÒ•Náj4@h¤tŒFuš7Žà,Z)<?jYk!jNdÕ]UU"Uýù´®9¸¦¬�‰T’Ò€±àJ‡£ÂZ‡V²fw*9yÀ„É)Q˜ÂR9ƒ ”Æ÷k¦là)в 2žï!•CP³EËÒÁ›‹¢$ðC d8Ól¶ÒÖïݤnÂÜ ‡}Z­6RêÉ—‡ïשX¡rpvr³[Qz<Æó}òq2Y¿!¾ï³°8Ga—.]¢×;`ie…'~çFƒ‡ý7Ýt3£ÑˆÛn»K—¯ñЃ±<w‚4©Y·Íf—™î,»»ƒÁb\¡Tƒ ˆÈ’¥wß}'FƒÝ]ª2'ô}JkHGÆ*ë»-@0 É‹tbvª ã¶.öò<Õô¨ŒÁ‹IK¬uGÆèöö6£ÑˆãÇÁ[)E·ÓE(ÈIŠÓây’ªrW'¸Ë’$×¼^Qôù³O|’Ó§ïà̳›¼ÿ>Î'þó§xó›Nãye‘à–^ Og¼úÕ·±rlA¢Èi5ºìïPf!%ãñ˜¢t˜b“ñ0ggï�ßévv%+ËktÚ ~â'¾ƒßùOó‘>Mû¼æ ë|ûB‹;n¿‹“'æ9q|‹Ïmpöü3¬®ç-o{+_xüir“5}ÊÂà,ø^H»3Ãëî»'žú§n¼‘þpÈ™sgiµ=æ:Ì.-óØ#›ìîî07?ÃìÜY>æÔM·òÀÃñº×¿ŽÕîI´öHÓSv(rdzO÷xî™'1e“'¿Èÿú¯þßÿ7ÞÅâÒ+Kó¼å-÷RæGëx þäcOñÓ?=½™jª—Ÿ*’äizž ˆ‰ãã(MžLNõ%ì=„ˆQbžóõ$‘NŒÕÖÔX}1ovŠœím¶Ò-®5®2ʆõµ+ê+b¥þUM])êñHSzlŽ6ÉÊŒååå£ÒÔ©¦šjªo*¹Iy Ü�Ì.bx žÄõÏ‘ZËÀ¥xÒ£ÂÒv÷xóÌtïàS½K<·ÿ,Û»›ì,ÜÅ›×ïciæQ<wt¾}á9õðA–‹.û¯¹ú%¯ «ê($Öõº´T‹Uo•SíS Í3£3,–¹±y#¾¬Ã_+++ø¾ÿ²@ ÍÇFñðèaNuNq}|=!/ís¼Vª6ؤ8 Öší‹‹sTÖ<_$U¤YŠ”¸ÉÞþÁdT>d4PŽGx¢Iè9%ëÄ¢µXçÐ^m !°(LåÈ‹’……67¯püøq~ø þ쳟çßñò²tD«ÝDIS¢ÈGªŠ¢Lh6c¤ÇH)i4"²¬`{{‡0¬£RÖ†ØÖÖUffÚÌvÖév;5&À—Œ†C”VEIQÄq<)Û)ÑÊÇ9‹µBÔˤ,  ÂZƒµ ߯ӸÚS ‡CŒ­›ê•X[§?µŽÈ²Ú8ó}¿.U’’<Íȳ ë*¬=,RªŸò÷ûC´.B¡¤‡q®2”ÆbÁÚrb:J´') ‡R_GXjî¥Ò ¬DkEYŠIU]$%eml RA^$¤™¥×Òˆ(¥'ÉâtЧ, QÔ M2œÏ P²6l•Rت¢,*<í(K‹­,êÐ<Eâœ$7õg ,h!BáD]W •F‹±_û U)°Î!pUåR PsZQöy.Ö�� �IDAT–9aT——)¥^€8Г”±GGxžFi‰^]VDqD4j3²ªÓØE^Qç$eQ—™ªDyµÙ8ÉóœV»[—s•ëkë<{þ,+++ì]¾ŒxÌÍÏÒëpÐß§Ùœaãâ%Nž¼ž 6ðýó.°¼¼Ææ•G˜m•ìí` “B1ƒs‚ÀñH©HÒ”ãÇóïÿY^øVD»ÉéÓ§ÙßÝ" 4BB’$uQ›ƒ,/Ñ8z}:&Q¢”À¹í)<ϯY³U‰±ubÛT‚¼(ñ}Ÿ¼rlý8žöˆ›“¦H¾­Ë%м Rf’ðõ(ËŒ,KG^$õz’5žbœ ãRh^yÛô{†ÿøÿ~Œ?þàg¸á†cœ<yœÊ¦?µÆ…3ÌÌ´ˆ‚KKK“spÐciq¹.4«,a3Fy‚$q„±¦Óî WCæöûH©h4Ú¤i†)<~ôGÿ.óoým>ùñqlý+ÇæðCÁÌ\â¾{ÿÿêŸÿÏ>}–·½õœ?;äê5‹šD Iä QèÑéδg¸õÖWÒ|”$1,-¯²¼zsóm¬+(R?úÀGùã~ž;ïZãúS7°¸<ÃplùÂcO’äŽÏüÙgÉ3Çsg6xü±§ØÙðÄ£EÁöÁ€È‡ôŸ{^uósËdÎÐiÏS”†ÊdôûC6.îL¯@¦šêeª²ì‘ç»Äñi| ˜Ž×}™KX„hâÇ×aªm²|)$¡ß@L éÕÜTJá„#É<ç3çÏMR3/²w€C Åœ?‡4’ýrYf‰Tô²§šjª©^¶2ò”ÒôÉÄ>Î P.!ÆòAùHå#e€”Â9<qº5ÏZãf‚ø \ù,¯=Ħë±8|F8NE3Ñà‹8ï®þ“_S½¸çÛC“T¡hË6wÌÜÁ3ƒg¸8ºÈùáyN6NN¼u7)sÿÆ>:ç(«’kÉ5Î'çÙ­vyïÌ{Y«ôv{ȶ$nÄ/É)}˜hÃU”eA𼨧Ûí$Y:ÆB*kCŸÐkÑl6é÷‡H©évgèJ\^®t¤YŠòJùh)¨ªŠ,³hí³¸´LFœ;{–…ùyŠ"§Ñh±´´Êù³`%Íf\‰Ž,Oè´»\»º‰¥`i±Cž%xÊÇZK«Õb4ÑëLÆúÛôû’tT@O°vl…<KØÛÛ¥ÓmER¶ !Ž’¥Y–á>Q‘$)ÎY´öFch6›dYm$Õ#ëŽÑh„R²NfºItrÔ)Š¢e×Þ„AZüã ÆHZ)¤:4ïÒ´ ŽÒ«ÇÛk”eEiRŒ)qÎE!ÖV5WÔX/ÐÄ2¬9›âùQ™ÍΩ£ V*‰Ò 7—‡(ñ}Íx<F*Éè ’ù¹’$Ek…Öª6‹‚V«‰µPh Å 9az8”ç#´_ðq ¼sP`$NVx5¾”2+Z<_wõû4¥# Cúý>EQÐéÔ…\•qi‘Ñh4ÆÍF‹ª²ø¾O»Ýf8e)¥Í‰q#$M3ò¼¨SÎ^€š,Ë)Ë ÏóqÖ!¤!j¦«†ápÈx\7Àk¥‰¢SŽ;Æù Fã1ÇÖÖÙ¼|•Ë›—ÙÝ=àâÆ5Þùî÷ð©OÝÏìì<¥qt»3”¥eaÁg4Léõxt»³þ„D+MAEe ¶¬¬,ñ_ýï§ÓŒÉ’!ÖYвD)À¸Ù¡Ø?èÑôÑÒcœŒY\š#ŒÉQZç9Ãá�qÜ$§”f@£ÙÁºú9ç`0dqqé¨Qp0¢”$ ë}¤,2ò$¡Õjç4a Ä¡Á[†>ž§ÙÛߥ3»ˆ17Þzš¿ÿ÷þüŸáío{Û;{<øÀCÜpÓ:E‘ç)wßs¾<õô3ÌÍ·VWW‘ÒcxÔÆ{U eÍüEH<ß›¤jk´G½Í;‚P“%#¢ äÝßõNÂ8fûÚEòb@2èã3È*&KBvw´\#qÖa˘¹ùÛžgñÒÄÌÏ/RZË{‚‡¿ð$Ï<ûýûßÃÍ·ÜÀ¥ |â?ŸáÚÕÛ}šßúíßãÿÂÏpãMóüùç/òá}šù[ÿ3Q¯é ³3š0jq×Ý·rê†5¾ðØc4#^}ï½xZ2î0îÓlÄUpéò•M^ ‡ã-yž¡Y<Ï£Ñh¼hL ªªÈóœ¢(ŽÎžç}Í/êÉC‘×|說^p^¨§#^øåM:~%ªÀ䓇BÏÿ\­5¾ïÁ„=½Ðýƺˆ´TUZ—ÞëBt`RH0Õ—‘RÐY£匆WðŒ#˜YCˆ©)ýb) C–––(“‚‹½ tÃð‰tÌ‹´ôX‹Ö”†Þ5/Xk£L÷™—’ªªÂst¾:üîœ; zH) ‚zðöµ:¿ðœÐn·¿f¯qøó?ß ÏÉuYq}_§Tñ<ï/evTÌÅ!*®ªª£ûº ŽB&/—‚š©¾ê-ëJÈÆÐï‘› Ô¬(ð½a÷m¤ß¤Ù¾…ùö-xÒ—ÒÑvŽï\€|Ǫs¨l"9Ë`¨Ñ^ŽRëxzÉ H¿¾W‡ÿ÷´°êE5é´¦ÝnϧZpç쌋1õãRt‰b© ""Ïs677év»“RòoÌãƒu–­ñÏî?K’'¬+ÜÖºæ ÉÎÞZh¢8zi«q\ÒE‰R-°6Å„”ıà ×çÄu38 E‘aŠ!aØ`ëÚ.B†ÃUU'2ã¸--•4¦$3 aP7¿e‰³ÐëõX˜ŸZ+ü@²°0ËsÏáé§Ÿãü…ó„±c~¾Íp0@*‰µ ÂÐ'Ësªª¤Ùl‘ f‰ÀSš¹™üÀÃV( ËS’ñ˜•åELU—SEQDžgHQJùff®¬ÙMAžGOäë߯ObBÔ&id­M@c óóó¤yFôz=¤”ÄqLY–A@YÖéNç½^Ã÷=<©©¬áêqwíS C 5Ífkrc^¢<91!*Â0Àóêö÷"¯¦J Š"G(ÄQš¼N“ZCxážOªNṄãÚð-X]]%ÏkÞk«Õ¤2ss³híc*sd>çyNø„aÈx<B{º6é’tb"kв@`qž`va‰,Íq¶. +«Š8nÕ¯íy¥ÃCQTàÒ#ƒEk~¿_7ݧ‚N{k-Ãá€B͈l\ø¦´xºŽ½†ÃI¡X>1ßêåa©(Ë!j£Ö÷}Ò¤ Ï3´ ÐZáyMš%PU4uSžäGŸ¿ÑhP9Ç´º.^¼ÈÎÎkëk\ÛÞ¢¨*öö÷' ¯ã›xä‘/Йé’¸Ãâ ŸúôŸ†Q1;Ûekw\£6Ò”ápÀl§A£ÑÀÓ‚¼²¾¾Î}ðC¼þu÷ÒŒ#†ÃÍV lIåEY1;;Ë¥Ík,--£ÑD~@QubW)ʲ¨Gè‹­<ÊÂàyíNDͤÝÞÞÅóŠÂà\=ú_åäà\¯[),^+¢ÅŒÇ#J[’ö:6q«ÁÖÖZ üÈçºëOQº˜qšñwÞ÷üÞø¯Ý+°N>Ë+ËÌ/Ì¢4tgfXJã8ûìÓ,ÌwX^™c0† :J(®^»ŠR¸š§:ë÷%%e™£”¦Ñh²¿·Oô÷·èí:­6íf“Þ`ŸùÕôöîGZǽ÷¼™'„ßú¿ÿˆt\ñ³ÿð—yï{ßÀ»¿õ.|­I‹‚Þ•+¼êÕ¯ãÛ¿õfþñ/ü*—73lüàüØÿ k«§É‹1BBQÂÿò+ÿßõžïâÞW¿ž}äOqøœ¾å8ýƒ>»;c¢þÞÿ×¼ï}ïãºëÖp¤dÉa\‘—¶w6™››¥Ñóš×ÞNiRŠ"%I^#7ƒÁ€³gÏòè£òôÓO£µæøñã¼ë]ïbyyùk~1`­eoo'Ÿ|’ÇœápÈüÀ°¾¾þ5}­ªª lllðä“O²³³Ã`0`8N*šÅÅEVWWYXX`uu•n¸0 ÿ „ÃNÏ=÷<ò[[[ Æã1�³³³ÜrË-Üzë­;vŒ(Цæê7ŠbŸ$ÙÀ¹1Íæ*¾ß.”¿„Õ†�-C.BZ‹p@‹ÌûüæÝ^ öö÷¸4Øà²=O®Ä^Œöä×,xÒCIEIIRd¤YF BüÿŸ½7 ¶ë:Ï3Ÿ½ö¼÷î¹ó€‹Žà’bdQ²%˲)]rÚqìŽt¹SQ9©ŽÝq·;Ýí!N+nWÜiWºRr”´"ÇŽd[¢d‘¡DIæ ‚ 1¸¸ópî™÷¸ÖêûÜcR”µIš°ñ¡øžiïsÖZï÷~ÏkÞ z{·ˆª,--±²²ÂÊÊ kkklmm!e+•JT*<È¡C‡¨ÕjÅ9ì-¸‰¤”,//sêÔ)Ξ=‹eYüÈü###oÉãgYÆòò2ËËˬ®®²¼¼Ìúú:N¥•J…0 æÎ;ïd×®]T*•?W37ÏsVWWyå•WXXX`ccƒf³‰aT*n¹åî¸ãfff¢ËÍúë)ªJ™Ðé]At·ð2×v)‡ÐÂÀ†d ,aù˜V€ø¶¦£‰Â&eF%äq„v36ó~‚p ˶ètñt‹@Œa„Sà–{Ò›nÕ·y­ûìpÛ´Ù?´ŸÓ[§Yí¬rſ–ÚÂÇÇqÆÇÇû·é"µäzï:§§q —ÛJ·aÅày”J¥wíDz,•I’$Ã$CŸ$éÒj6Y\PÄQD’$H•`žWˆŒK+k,--ãøE “Ê ’$Æs|,×°ÁÌAéŒ$UEb|* J%J¥�MNwq\ ©î½÷¾ù­—XZZäèÃwÑélb»¢@ä)aâù&–i Ï·ÑJcYAèÇÑ �*—Bhצß—Ó,¦¦Ô9i\¶mÑl6QJ166Fšäô¢nßZt \ÇA˜f_˜,ÀÍZK aàqÒë ;)Z Ë(ê½]ŒÆ§iB–¥˜ÂÀD`ÛRæÄq‚¸˜–‰0 ¡IÒ:yžáûZCÅH© ¨a¢$aP|o$yž ò‰'1J)|?Äq\lÇ"ÏdßA+ÃòÀ.ž¦ JA§ÓÅq\§8ˆHS“e²Ÿ*ïöÃÀ$º/~À…øÜëõúaWŽk!ضkuF†GÑJ£ _®"³ßèö"</$’=|ßÅÅu¯×Ʋ¶Ã±Â4ûcæ&¾ÓÁ¶"¸JJÚí6žçõ;à… YÊá`[†ecZEØ–”9ZÛA@¯“¦Y×�N_ˆT¤iŠVÅõTJ ºÑŽë ©oÖ¸çž{Øjµ rÍÅ §Ù¨7˜Ù±‹'žxŠÝ»``³µµ‰0’¤A/Šáô+—Ø9»“ÑQƒ³çÎqÏ=»ÉeÊÊÊ2Óã³ä¹¦ÙÚbýú*K‹ ÀýLML÷·aá¸NqO˜½$¥T"S×±f€ê ¯hE§¡ÐôâSäxAˆçûØŽK»‘K‰ÕwÎ !0-‹,MéE®çÇ1 q\ÇôŠ©“TÑhw1…ň%1FBÔ†‡(Õ†yö^åù¹ÉÚê:÷Ü»‹8IwÍMƽ÷Þ‹¢ƒ!2~ïó_àÇ~ôǸí¶Ûètê8¶K­6Lçt»]ËctdÃÌȲˆ8N°ÇuÈúáZŽc±¹±‚Ì ŒD»™ãØvÿ^î0\c¨4 ÚäÔ©SxžÍ¯üâ§X^‰Y^n–_}ü$Õ’âGøCĽa¹ÌŹK$y‰Ù݇ùê“çø›}ŒË—¯ðêËWyö›¯ò³ÿä£ü¿Ÿù,.œáW?õpöÌ[› êõ&†„û;—G~Ÿÿݯò›¿ùi––®óýÆoó…/|…£îçŸø!<zY;&Ž›„^HÚKù©ð÷›F¥‚]3·`‹Û…¥uÁƒ^]]å¹çžã‹_ü"/½ô®ërÏ=÷ðÐC111ñÖw?•bkk‹'Nðøã³¾¾Îc=ÆÌÌÌ[ºùȲŒz½Î©S§øò~™å¥eZÍõz$)‚wìØÁî=»™œœäà-±,‹ééi*•Ê›6 Û®˜(ŠØÜÜäØËÇøÚ×¾Æââ"­f‹F£Aš¦ sÿý÷Óëõ(—˦P{³Þ]•euºÝKx^‰R鄸yXþnË>¶5ФKžo`BÜVߎʳœf£ÁòÖKîu"³CÉ÷ß1°0¾ãÓ–mâ,¡ÙiÒ’…¸ë¸7…Õw‹°º¸¸ÈË/¿ÌÙ³g™››cqq‘­­­Aþ@†AÀý÷ßO’$:thŒý]—•R¬­­ñ /ðä“Oâº.þð‡1ÑJ’„K—.qòäIΟ?Ï•+WX]]4;«Õ*®ë222Âææ&<ð�`ddäOœ*QJEëëëœ9s†¯ýëƒÇÝÜÜ$Ë2J¥wÞy'½^Gy䦰úײ#eJš¶ˆ¢EÌ´ƒcᆓ8Õðíg­ÉÉÉÈÞÄÂÖ:CêUœx©DŽÝÊÐÌ÷!ì2q¼ÊV}3ßD›iYh4&Zj,m!¸éš~G…;aQõªTÝ*½¼Çr¼ÌJºÂ=Ä3ÄøøøÀ-£VBÂ|wžKÍKìªíâîÚ݈Là•=†*CóÝ{ÏYq’’çX¦i£±–Ãpm Ï!l</@i0 <Ï¡R iµll¬3=¢ÑE{*±-¥Aä†^ß™žçSªÒjµHòÓ„(êà¹.³;g®ù¬®­bš׳±LQ"­¾ LA'Eh’V E1†aÇy–bÙvª“+4 ­A)Ñg¦J’¤¯ê«Ëƒÿd^ðNó¼y×Z‘åBI:Î =^keš¸®Oš¦8¶M¬ÉB°ëõG^ ‚ê t¡wb´*X¬Û“ï†a`;&¶]`´N1 Èò‚©Õþ¸ ¢Û‰ ïžÝ^Œ5ExQ–ëþ8ª¤Ûí’ei!–ê"PÊÀèZm+ëÅø” Ã0ˆã¸H˜×…í\ª Íiš`[R‚Ö†QŒ¡› ÀX–@© …##c!Øhl%>÷ÙÏñ_ÿë“üô?þªÕ°úî×ÂijY&JK„Ð}—°9püZ–Ež§Ìû^ŽaÛdyÚæ’hMÿ³Ó4±- LÉÊR*¢nŒi^ŒBôa²,Ær Ò,¥qL§ïV¶H’„úVa[lnl`yçÎ]ÀõC¢$ec£Î<̋ϿLmh„V³K©TãØ±Sðâ Ç8|Û-|ýkÇ™™™fvvŠã'.Q©ôâyž±º²A%¨bÛE§êÚÜlÇddt˜^/bx¤‚VŠv§Cœ¤Tk5â,!N,»Ã7 “n·À³?’%iš!eŒãz$iNçä²pâ–J¥{!%¶Ö¤Yáê;Ò’,£I:Zâùt3¡Ñê0¿pŠZm˜Re‚¡ê0/Ÿ8Ë“O<Å¿ü4s—2î»o7YšÓëmÁ‚¢RÙ¹{/Ï=÷GìØ9ʵùKT«Ã\_X \v1M‹ÀŠkÅ”ƒ y*1M‹,•dy†ãº†(‚µúx€­ú&Íf“0p©–‡�…AF­VæÜÅyVWêìÚy�ÄQ²Åz§Cçµoâ9Ž£ |Ém‡ŽÐnÁã“Ý{³cçaV×;|ñ÷Ÿâýïÿ�ÿáÓÿžOæßñÏþ3®Ï/ð>ó¹åÀ!Ö7–Y[]åðm{vï%êõ8}ªÃ¾}û±DÈØè,iÚ¦T4Q7âÌ©UžøÃøü~ÉÉÓÁ1ò8ef|v‡ê¨`¸æóË¿üS7övP)Ò4åüùó|õ«_åøñãAP 7ÞQÀ÷}ªÕêÛ‚HÓ”z½Îµk×XZXb||œ£%˲Ap`·Ûeye™sçÎñì³ÏrùÊe¾ÿû¿ŸGßóè›Ü,ZkZ­çϟ糟ý,+«+Ø–ÍÑ26>†ÌeñXgÏqâÄ æçç¹õÖ[»¹û¼‘Å.�€p3€ç».·Šôº—è5æ(•Âpäæçò6T†ìÚ½›­°Î±…cä¦F{rp'¿Ýå˜û‡÷oÄ,¶){eöº{o^˜w“øžç\¼x‘§žzŠk×®á8{÷îe×®]Ôj5z½ œ<y’/~ñ‹<ÿüó|âŸàÑGeïÞ½Að–ì7¶'Ã0|K1�½^—_~™çŸžååe|ßçî»ïfÇŽT*šÍ&çÏŸçÂ… œ?žcÇŽñÑ~”÷¼ç=LNN¾iÿ¡”"IN:Åã?ÎñãÇŸÙc=Àµk×8{ö,¯¼ò ›››ŒŒŒpàÀ›7Û_¿oP§Û£Û]'vãWîÄ6\0]0Ì7ݯ99-Z4ibb⼎—*eÊVó ½¬‹ªÌ@ibšé85FFBè6J5ivη<”žFJ¨RÅÇ¿yIþªêUÙ5´ )$ך×㔬õ­:®ëR©TnH×jJJƒ+½š&ÃÚ<Ĥœ$´Âwý{²×õ± —¸§–`|b‚‰ Ÿõõ-¦§;8T+\סR-‘ݺºÊÄô.Ò<Æ3y¦‰“Åt£A¨Â$ÉRLQ„7eiÂØø(­N‡\ÆT‡r3<\#Í V°A·—‘g9žW& ÆŒa ´.IÕwfyZ„UŽW  4¦¡‹% Cô»ƒË*ÄUËh­ˆ¢Þ è¨Óé ¤AXòÉóÛ¶, Ã(•¶m÷G«³~H•Äì ­Û£öÛÜ< ?’_0÷,ËÂ2|ßDæ²À·TÊ -%h‰) ,”qœ�! yŒe¹dYF‘Š RæH Rk²<Ç\×&I²>¶@£tPR÷ãÂí+eŠaš8¶eZ´šõ¾;5/6#_$·çZ+„Y$Ë+¶mbÛ6£x®\æ€"Ï2â4/„_igŠÕå:ßû259 †@KE¦ÒþFd (ÐIø­4a©Œe ò<G#¦ƒÔ…¨V\[QˆÒNJIlÛî¿—´}0úL'£p£Fq‚ëúý³€Fk‰Ö9¦Y8qó<E+I¦²˰ptìÕÑÑQN;C¹:Œ0L–WÖ¸ã®#¬.o053ËËÇNpûmG¸¾°ÆÁ[ocþÚAPæ[ß<ŽšLNŽE]ªÕYšÎVaãº6Zg˜¦Áž½{¨·º\»z•=;g¹xq•À/\ÎÍV‹V·K&5›[[ÜrË-ôz úü[Û6BR),ÓíÜä4‘tòJAH©TðiÓ4íó{ !S)M·Û¥Ñh‘k?¨¥9­Vsç®#sH’ŒVSÐh̳±Qçäk§xñØq´pè¶€³ç¯rÿýw3ø\›¿B/ipð¶ÝtºKKKLŒO2>1ÎåK—Ùµ{š»¦èE=666ð½(^£Ö’$U6—! &³’9Ýn™§T˾ïQ©„$qÄÆÆ¶c115ÄV=£T®€Õá±ÞÆõÅûÙ¹g‚û26:ƒ´X]ÝâèýßËÿøÿÈ /žgfÇ$»÷î§ÕN¸~½Éìl‹~sW/÷àé§ÏñôÓç?ª÷Ü3ÎOýÃÿŽ]³Ó(™p×3\ºtÌè1}×uš Ïš6–móÜþÝ{J#eFg+frÇÒN“¨“`ûK ,~à#÷ÝÐ,Ë8sæ gΞ¡ÛëR®Q)WÞÐìy;JA­Vã®»î"â8tußʲm›ááaî¸ãŽÁØÿìììOÝn—“§Nòä“OråòNœ8ÁwÜñë kÛwÅ<ûì³¼úê«Ìì˜áá‡æðáÃÔj5�Ö×ש ÕxâÉ'¸xñ"§OŸfdd„ééé·Wû¶Šï(bb:Y‡NÜAj98øŽOÙ-Š›¾TI§ÊalÆ0ðà¦äÿÇ—ÜBÛ!¹a¦¤Lo~&o£hÖívYkl°Ü^£ZfÚº_Tß‘{W‚’SÂ6mâ<"Î⛬¿wÛ×QFGG¹ýöÛÙ¿?år™©©©ÁøzE,..222Â3Ï<ÃÙ³gyöÙgc||ü/,¬ !çþûïgddÇq(—ËoéZ?33Ñ#G¸í¶Û¨ÕjìØ±ƒ‰‰‰~I“;v0<<Ì“O>Ék¯½ÆÔÔSSS×귧Ο?Ï3Ï<É'ˆ¢ˆ÷¼ç=>|˜ÙÙY,Ëbqq‘±±1šÍ&W¯^åÌ™3ÜsÏ=Œ ŒB7ë¯r) FÊ-¢hž<pœ<oÛy]`ãÝУî({ýD2b©·„ë¹o@¦h™’n]ÂH‚ò-¸¥ÝƒÇÂÁq‡%<Ù¥ž¬±ÐZCšUf†wQsj7/Í_B¸#®æj÷*×¶®±ÏÛÇli–$IøÉ±Iƒ‹õ‹¬·Ö©šUj²F9-ã{>–ùî?ÓX–åôS¼Z.D”ÂÓÓ³4›-Ð& ˆâ†Žð=©`m}<ŸÆš4KQÒ Ž{ØH¤Jéõ:€I–k|Ï&I:½÷Üs7Ë«‹´ÛM”Nà aà³oß$AØ)UŽVÅøºÙ5’¹#/YÄ�� �IDAT½nŒƒE®ò‚Ój[(­ûNG¥@©)5UiM–ئ…iÂgšd…Иeä¹B+ ÚíÝ?Ì<ÒBõ<Ó,FÍ;ûS)Y`�òaäRÒíuˆ¢ˆ(ŠFªb„^£ˆ“#/ºIJÓwÚ(­2'ÏS,ÏIJiR¸Mµ0û¡=ày>Íf£ÚA ܺZ€ãؘÖ[À·…2ÇñŠü¨×¥Ë¼žq“ç’F£Î… 瘙™abb¥r ³À9BázV?Ëè ³…à\àr,[a[R÷ÿ ËrÁÐôò™Ìùûÿè“DÍRJ<ÏÆ&­V‹\HÃP‡išt:ݾ+×Dª ¥¦ùÇNYÓ.0�ÍfËø~‰\f‘Û¶MLÓ@J¥q\üØA !,´Îû�˶Q²Sv]—NÔ&ÏSLC ]¸ƒ€­F ß÷ñÃ'Npøð!¼R…—ŽŸ$ŽŽ…½»oa}cïùžÇ8þò)ÚŒ$Éñ‚€¯.26¦yø¡û¸çŽ÷òïë?!LLNàz.iš0:<F¹R¢ÛiÐètØ»w—®\çà­·BžR©”I’¡aXbcs“°\Ž(a½¾ŠÐP®†8މje¸ŽÓœ¡Ýë"[â8E‹4SÔ› &'' nr§Mc«A. &¤ÞXgnn޹¹k¬®v0íÝnDµ2Ä•+ó” /ÎQßl²´¸Éøøår%KTkC¬®¬qï}÷áz6›«dYÂøD‹Ï22\ezf†3Ó\¾|‰Ù;1 Ù_ T…i¸x¶BŠv§‰”1¦¥èE BØ ¡µfccdÎØØXÑDP9Z儾‡V)iÚÄt}^;ýU¹÷è~Ï?Çqm´ôyùØq´ñ=ïû ¿û¹çxüÏãZðÚk+œ<¹B_§æ_Ó†»îšå?ò>dõz“±±î¹÷0S3¬,ÏS-»|åËŸæÌ™ó¤©bfj7BØÔªÃÈ<Fê¾—Åul»Eže”|Ð3ˆšó¬¯.3:1Ú"OÚºqÛüÑ—Ž½Ä•+W˜˜˜`tt”8Ž‹k÷Ýl/ûhŽ,ËŠfK?4jû7{›‘½ítB044Äí·ßή]»R¾‰µ¶ÍÌNÓ”,ËpÛ¶ßN±ýøB!}®ë¾Aœõ<ÙÙYFGGyðÁ±mûMÓ4™ššbþÚ<׿®±¾¶N«ÙúŽ› V«ÅÉ“'yî¹çˆã˜ƒ·äCú333Î÷ìì,žçqúÌésuzzšZ­ö–$ßÖ{CK¤–Ú 1b¶tƒµtµö*¹Ì10ZQ ªLŠ Æì1B]B¢fcݘ¬/•¡Z×°¢˜2sƒw|ë/½ ÑߘEW¶?©r‹ñVV𦬭¯1·t…ëíÆ‚ýìó $jïÈ÷Ð("[1´A®rrßVßeeÛ6ddd„J¥ ~}H•”’ƒ²wï^:Π)xðàAŽ9Âøøø`­ß»Üqz£ÑA Æ^·/ÛëÿØØGŽáÀ!¸íµ>˲û|;o#MÓAîÆöãn›e¶ÏU†a†!÷ÝwGŽ! C|߬÷…1#8t/]ºÄÅ‹9uê‡æÈ‘#ƒÜ†íêv»?~œgŸ}–­­->Ìþà²cÇŽAÆÇää$Õj• .ðôÓOsáÂN:ÅÑ£G¿«Ì›u£VŽRM’d‰v{ ÏÛA¹|Ë*÷µ›ï\î¾és¢q‚•t…5ªAµàw¢AFèú%œ,£R»¯´÷ÛÂ`dÄÝ5®Åç)»S ï¦ê–o^š¿„õF¹}èvêQkkl ma”nü߀µÎ¯.¼J½]gWecb ³kb8†ùîV¦{…ë151„ÆvkõÐ! i52„e!eDs+F—»x¾ƒÖÐi% ]\×B‘ö7±yŒ·L.óþ¢eâ¸YÞÃqCÖÖ7XYYgÏž]¸®I.%Q²ÅcïE—%l[%)¦°±ÍbüÞ4 r“)E¢s¤RXžƒ°LÒ8&KsLË@õ]œi–¢•ÆSÓDQÔ_ô džÂñ¬"è*ê2TB)‰”)š‚j˜Jeä2CI)s £8T€¡ú’©,ÓDu{ôâˆ^§ÅðP¥à®Z&®c‘Äà¸6†dR£E\À00,…@iB „IäRaY™Ö$ív±…´l 3—h¶ib»Yž#ó!¬³Çód.ûáP&ºøÜ£išS*‡8þ(ûä^fgwÒn·‰“x°uÓt@ŽM­UŸ …åÓ@k0´‰”­¦mcš­ã#£ÄiBo«Ží8(%IÓ˜Xæ¡O–% Íþ5,žË²r\×à ò\ö»hº`®j°,Ö)J 2ÓëE€0 ‡ªF`YI“¤ÂØŽ ˜–ƶÁ·-”†LK„¡¡Tɲ¼Ÿî¤)˜.¹mŽ•ý·²¾þ§)  …&,Uhµ#†ª£¤±`çŽý\¸p Ã<ýµ?âÖ[†0„Í'?ùü«_ý4SS5LsÏ}îs|ê×þ)k«Ë”Â!¤¤2'I»4›MÞû7ÞCõH’‚#<::B’¤T‡ªdJ2>6A¹Ô%étp,­T­ÝnB,3”Î1 ‹4ÎIÓ™)lÏB˜‚õõõ@µ°°�@mh„8n³º²AšæLŒOR.eœ;•ßû/_Çv²4Ãõª$qŒãL[“æ1PæÎ;ogie…¿ñ¾Gilmâz¾røð!’´Cµ²¹¹ÆP¹Æ¥ sìÚ³—é™)._>ÏêZƒ±Ñ*nÂÆú£Ã1iT\ññ¥r3ÍèE ½^0ð o§k”Ëe²4Á4µ¡¹R¥O=þM¾ð»Oò¯~ýŸ°cç8Íö VäDš[n¡—jrqîÂ1í¯ñÉOþ$ð¥/súô<Y–á¹&;wOñÐC·ñ±}˜Ý»§ØÜXâðw“')Ý^—¥¥ëôzuzí5L«p§—€]‡öãØ­V›$]`bzŠF½ƒT1ÓÓ¬-]Áw}Z­&¥° BR®•ÉuŽ…OÇ”*7.3p›öâ /’e?ô0Žãð­?úõzý»U“$a~~žsçÎ1}ž­úív›<Ï©T*Ô†kŒ³svç@èŒã˜ .pæÌºÝ.ÿøÇÙ±cÇà0Òëõ˜››ãôéÓœ?ž#GŽpäÈΞ=Ë™3gX\\DJI­Vcl|Œ½{÷òðC†áo?_—Øû§ÕÎ;Ù½{7cãcoH-~ý{Œ¢ˆ+W®püøq.]º48ÄíØ±ÏóÞðœµZÀ HÓ”K—.±°°ÀwÞyëõ¤Îbw‘T&äFNLLnäx¾O@€‹K‡6±N˜o]g•U\\L,ÊN™}å}ØâÆs°JÓÉÖ¦CìDøCpópüÜ<¿†É®L ¹�å‰b<òf½e% mÙ– Õ o19Tųíwäö51Õc8™ÃF´AÝØDiuSXz7Ý#B066ÆÈÈÈ›DÄí*•JAÀÞ½{©V«lnn²ººÚgú3Ù­×ë\¸pk×®±¼¼L½^G)E†”Ëejµ{öìaÏž=LMMJ)gÏžåüùóX–ÅÇ?þqFGGɲŒk×®ñÚk¯qùòefgg9zô(sssœ8q‚¥¥¥APÔÔÔ·Ür ·ß~;ÃÃÃoŽ·¤’[tÛu»k×.®^½Êúú:«««ošÐi·ÛÌÏÏsìØ1æçç9pà�>ú(»ví¢T* þ]¥Radd„r¹Œ”’õõuÞ´¸Y5KÊŒnw‰$YÃófñýYlûϺ´…MŪêFÔࢾH¦3ö…{1CnÀæi„7U݃QÞñ&œ�(l.G VÓˆª]fD@Í‘[&¦;qó½Ã5ìs`è�ϯ>Ï•+Ô'ë˜âÆmÌ«þŸ«ÑU^ÜxÃ0xßî÷±¿¼Ÿ’_ºaÞ›ÕIÖqÌ€’7 ¤îË&Q²‰°LZ-_.Ñí´)5,ËbjjŒ8†µ•&2sAK<2#& \\Ã#NSD#L Â@é™[˜¶‡0,Ο½Äí·Ý†=RF©Œ 0¸õÖ¬m\GÉ7 Q¹…-Ld–b 6 ´Êp\ Û Ð†À4‹QñLJüÀG÷™:RæX†ˆ€¦0±,ÏóÉó ÓDQË ÕJ(ª®Œ‚ejš&Ž-¬UÛ±‰ã×óH’„êð0­FƒÐ/œ3J)„ãGa@5t±MMÒë%0”$ËÑØäi±kS¥Y‘`nÛ8^1ª§ÏU«"$+ÎST"q=Ã2PÒÀÇñ¦T Çvˆ’ ©ÌBØ®çø ¥†*0†Bæ9y–áú>aÉòÂ4™˜§Ñ¬¿|¼ÍŸ50És=èð ÓÀSxÇ%îvÈsƒ<µÀLI ´�ÝÇ&‰# ƒ‚‘j;H™’ç)žWA £?þ/ðÜB(ètºxžWˆ´Z÷¹©ÂÈéõ"Wa;J%¸ž…i»hm€.^³Ô`{5"E6ω:ÝÂ)-ºÝË´qíCXè\#u!’÷’”$U¸¾6Úr‰’˜ÊØ(í(fmþ:Rk’<&¬TÈdÌ¥ó ìš¹…µ•¯_çüù+,.®ð¾÷ÜÅèX…{¸…óoþ7Þû7~€ïyôûøØÇ~œ÷<ú i’áUl»B/ÊɤbbfŒJe„ÆVB®…eDI‰ñQ’$aÏì ŽiSv¢^L½¾é˜¨,¥<<L¥T¦ÑhẦaáÚ%z½.˵ñBv§G’$.‹ç´;]¹~} ‘2#ð-Þ÷Þ#„A…OúK`8 O1wõ󋚣qÿ½÷ð¹Ï~•fkƒñÙqê­e2™ÓK 2™S*W¹øò%¦§Æ±¬€W_9Cw©TkŒMÍ0>µ“¡¡€^Üf ‰¢ÚHÙÜZfrb‚‰Ñ1LÓ&ޏ®ƒahâ$¡Tñ|ßw‘R1·p Ë´¨·Û(a8Ã+/_ãɧVøõ_û·ü³_øŸª±¶¶ŒíXÄYƒ2i¦Ù³oŒ_ù•å‡þÖGùÉÿþ1WÖi·[¸®G¥ÇèE:[sŒ—Y½~× ˆ¢˜±aŸµµ6NèÝn— ðPY IŒï*â¤Ec£]8¬´ íFøÞB˜”*&¦iÌiÖ{\½z¿ä1>6ާo¼q¯í ¼sçÎñôÓO³±±Á¡C‡¸ï¾ûȲŒç_xþ»YIÓ”ùùy^xážyö®Ï_'Žcz½J)jµ¥r‰‘‘ŽÜ}ÇqÃV«Å‰'øò—¿Ìúú:<òÓÓÓÇiÇ\½z•o|ã<ñÄÌÏÏÇ1sssœ={–ùùy´ÖTª\×åâÅ‹”Ëeì?@­Vûsa¶]7«««ôz=\Ï¥Z­¾)¸J)Åêê*§Nbnn­5>ú(‡þŽ©ÂZk4Åïã¶ãöÝ>”#ÉtJ’%¬Æ«¬¤+()‹`à ôB&ËS ‹a<<šF“µÞuzYDlÄ2Q¶+f Ëðð- ëáJ)4]£Ø‡¸¡‹éýÀüe «†ëŽà9²¹JÚ»†Ô0L‡›®Õ·ðs¶À, ¬’‰Ù4)yÃ% û ”° ‹)w’P„4Ó& »qÃŽ=þUþ.þyÆÓ·§?¶3 Š|=X/8}ú4Ï?ÿ<óóólllÐl61 ƒr¹<W[­VY&¤”o ¯zÿûßÏÈÈÈàqŸyæž~úivíÚEžç¬¬¬pòäI®_¿>Ø*•J³ÁÝwß=`µnçKüyÞß¶Ûu{ÒæÛkmm“'OrñâE„Ü}÷Ý<øàƒß±A«”*Öûþ”Îë?¯w­ H1‘¢ó>MÜ20 óætÆŸw”1I²Fš6�‹Ré�–õÝ—9ctÓ.›ñ&—ôe|á2dfˆdl? Á(ØþëžY“‘˘VÚd>ZG Ÿ}C·1$Tg‘\TqÅXæÍÆð;X®å2ŒÚ!½¬G3nÒI;(­nÈ÷“«œ¥l‰«í«l¦›ì©íáÐä!v; o˜Æ©åØnôLûNm03³Ï`zj†‹±-—ѱQ².´ÛÇÂq ’$Ŷ #&I²4Ʊ\ÛŲl„©±”@!‹°&Á€UÚéF¤iáhUZaÙKKË;þõà:…+Ös\¬À%Ïs””xž¢€çgRÒëõ°m ×ó�ÇuÉ2˜X6X–‰!%& µÙwqf˜¦i©êRnóFsâ8Å0T\Ä$M wßvÇÆ0 ß§™tˆ»],Ëì9Ñ‘×ZCŸíÚ‹ ¥ÌsºYŠÔ&¦e’Ë´1±E] û.PA¥Zƶ¾ Ë àÊõ<<Ï#í' o¼ ÓDjE»ÝÁrýþ¦FcŠbV¯œ$ÊŠ…ÞvRE1f‹ñ‰q’$¸ Ò4l¶Ó+•RXfá@íõÒâçV;ä2%Š"JF! ¤ÔÅõpÝ~à×z_¬+6>½^ß÷ú„ ¥ÀÆàï\׌ýB¬K¹,á/Ûc6èâÞ1M Û±hµÛC´T&Í%†iaP„xå¹Ä”&Z{h!0-Û2ɲ„Üè ȆƒÒäv­±€åY˜†‰:XvJœ&´:¶M$½^‚iYÌϯ0<:…ç—‘‰ ôJ<÷Ì7ùÆ7ŽQß‚Ñ|æ3¿ÆïüÎä#?ø¿ÿ¥Ïóàðßþ7?Ìç÷Ë,,t˜žšÅ¶]Â0 ÝÞ Óµ‰“&“^­ 677ÑZ²kvš8îR©”qíBÄGi\ÇÅu lËFÊBXQ2#Žc|ß'<²Tb»åR@),�йVDiÄÄÄY–#¥byy™Ó§O£•AEÌÎNqèÐ!\Ï'޶å{ßÿ7Ù9s€_üå_çSŸúçLÍŒð›ÿöÿäÉ'¾DÜÛâKði~çw¾À‰3¯qæô«ÜzË~öì:@m¨ÆV}‹Ñ±öíÛGšF|ë[ßdïÞ]Ô†Ë8~-:H#%J›ìÛ”¹K1Õ¡!LmQ«Ä=e™˜F@šwZiàÚg#L°L‹½» ûŸÁÖV‹VÚàýÔOpñÂÎ=ÃØè(׿Hãyj3T«ÑmuÑ®äÃú>\Û¤¹v¥ ÚT‚­P\£µZ@­æcÛI’b˜v_è5b¢@LXÕju0ú&e†ãØ´;`á86B؆m›ØV±‘6M©%Ý^Äüõë|ðCÆ0 òìÆÚ´l‹ªœ8q‚gŸ}–Ý»wsï½÷2==ÍÂÂÂw}(ˆ¢ˆcÇŽñìsÏrùòe‚ àŽw†á`Ôpccƒv§p°nD¶®Ýnwànýöךç9Q±µµÅ±cÇ0 ƒðÀðàƒâ8N‡—_~™¯œÀu]{ßc<üðÃßñõúƒT¯×£Ùl²ºº:HJNâ„ûî½ÙÙÙ7³Û‰Ê§OŸ¦Õj1<<ÌîÝ»©Õjäy>xÌí÷´} µ,‹ÑÑQ†††ÞÕ|Õœœ–n±•m±ÞZG’‘ÒQÆÓ>Â8¦Ch†x†‡‰‰ p#ä*¬±Œ¹Ö¹†¡B1ÊÎrªç!Þõ›0Ý?¶h´ˆ›\Õ¿x B”¨ÒÓ dºÁ9ÖÍæ-­””ºQgÓØD£ð©Uìw` ‹¡JRXÂë…ºyaÞ…âꟵ7¨×ëÔëõ~: \.Ö®(Š8y²Ï#¿r…r¹Ì­·ÞJ©TÂu]ì~hp³ÞÄ)—RÇ1Ngp†¬AyÞßnQ¯×)—ËìÝ»—£GòÐC‘e­V‹S§Nñꫯ„Þ£G¦Tþ¬ƒ~¯×css“ÍÍM²,£T*}Ç@™ååeNœ8Áúúú€Ë>111˜"Û~®(ŠH’„<Ï¡\årù]™þ½-î(]£K/ë¡»ÎϨ„fHH¸}²F7׿?ñ³T9½Þ5âxÛvð¼),+øSÇÿ¿½LÃd2œ,tž64’&gš§˜ f$Z%ñ†°‚Q¤éôõ}QµI“åh™h˶˜ ö0¥‡£&º³„ÝMÐj £:öÍæð;Y¶° F™'èe=®6®âH‡¥î½ÄyÌk ¯±¼±ÌŒ3Õ;˜t& Œà†B}YA¢¥M¯Óò,†G«ô’M,ÓdllŠo}ó ­V‡ZÍ ÏÓ"n¨Šiº4[Íbl[˜ÈþÁ5ŽTÔw_XJLź ºb*…e<Ï+F»µAšH×ãÂù9î=Rgbb )¶š †kà eÙH­HÒ˜ R¥ÛmÓn÷p]— èt:˜¦Àé ³Yša(ë{() ‡K*qƒJyˆ,O‰z)¶­±lÏ Ée‚Ås@Ï+%år…4Í©Õj|å+_áÁ§øqÂ@˜…Pgˆ"„&ê&8nñ8I’`Ú.žm÷ƺ8T˜¦mYýà BX,:¹î`QÕZEQ!¦ ñ†n¥RrÀ2PýE¹$W Sœ1­5y–¡û"&†1à eYFø¾Ïêêê`0`‘ U1#D!váY’(îb;®m³²¼YˆšÆ6‡µ,<Ï&IŠûIJL02/øy¦eö¬}ØØfè0 0ŒÂ‰\0]%®p0-T®ëaÛ6R*’$F*0 Çöðý€$‘ÈØ�<Ë!ðm"£m×&ÍÓ>nÁ Lªf ajâ¤àãv“ˆÍQ”â…Ch-8vìÙ¢a{¤‘Åg~ë?±µ±E«¥è´µšÁýØ#üÌOÿΜy…#÷BÑãÂÅ«üâ/ýSæ/¯ó[Ÿþ}FG`ÏîÛˆã ÛŽì ´ÅÆÆæ:y>O¥R£\.M‰NǵÈ(0††8޹B)‰ïûX–E–¥ýNgq¯ù‡eZ}~iµÈÓœ¹¹9â8F©âžw‡‰ñ1>D?ó­¿Él0R+³¹¾BžZüíO|”K—®ðïþŸÿ›_ú•Ÿçÿןço}ìûù—¿ú/xüñ/ð ?ÿ?‘éœ_ü¥ÿcÇŽóÅßÿ=”²8xð ¥PÅšÍ&Gz€]»vqméÊ^gbj­%ãCtÚ jÃU„T«<·„Ê º©c ×ò-2)‘YN·Ñ¥\­03¹£p2FÃÕql;Àñ|þóoÿ½n›Ææ:¶00l˶ȓ„,IH£˜°ÐÚÚˆõNßÑZ³Y_í uIÓ˜‘Ña´¡i5› Õp§­û¢Þvsb»é¢5T+ÛÿÎ"M3”¤ßà2Ȳ„^¯À‘LOO02ò}T«Cd©º!9r­V‹cÇŽqòäI666øà?ÈÝwß=`…u:’$ù®„՗޽Ĺsçp—Ûo»‡~˜‰‰ |ßG)ÅÜÜ×®3»c–Z­ö† Âm7þw:m³Ù„vçÎÜy猎ŽÁ`ñĉ<õÔSŒsß}÷½IXÍóœååe–––h6›4 êõ:‹‹‹\¾|™ÆVƒ;wòÈ#°wïÞ7¶”R,-/qêô)Ö7Öåüùó´Z­Á½ôúÃéââ"KKK˜¦ÉÐÐ¥Ré]y؂½ÒÑmæã9–¢%¬ÜfÔg2œdDŒàòǶ]\\Ë¥f½1(¡™6Ùˆ7ÙŠl©Œ’0ðŒ!<ÇÃïæÍX† ÁÓ6&†¾éôx«ÄU¥=CQ¹)¸½ wî'LK$á;vø1„<ßC˜¢»£MJ:knÖ»¿Úí6§OŸæÊ•+DQ4ºÚ㘳gÏòüóÏS­V¹óÎ;yä‘GÜQ­5›››,..2<<Ìððð›&:¶×ûo3_Ïgít:´Ûm¦¦¦xï{ßK­V¬«­V‹_|‘çž{Û¶¹ë®»Þ€ÿùÓj{êd~~Ó4Ù·o{÷î}SÓsmm×^{ÕÕUÂ0dnnŽçŸþ û¢mSÒÚÚ×®]ëç~SQï¶µ>SëÉ:‰JP(£ÀéN_Xµ \Ó¬õ¡2lß8Ÿw@Vz$É"q¼ŠïÄóvÀwÙ.† tB¦éâ\¯Ð–¬õ®ÑiÏU&°|:É:Vdƒ*¸ÕI´A¦2¦¼)¦¼iª”0Í ä&qo· ¸y ßéæÕxiœC;‰²ˆ‹õ‹ìw÷ßpgÅœœ¦lòÒÒK,·—90|€»Çî¦l”7X˜«•ÄŠ<‹@–ÐJ±µÕD‹C%ŒŒŒÑlnÑhtq“,Ê0M‡juÏsèõ:h­P}§e”p,‘Û(Y„I%‘J"úÁJqœR­>Zk C 4ZMÆF'‰z6W®,rÇG0ÈI²”8°„‰Â Žc2©(•Z[›$IáÈÓºX„³,#ŽÂ4ñÇöPYJ’dÈLáyv?ÜÀB&2×…ËÒ( Zض¨"�¡\dš6†!ÑlÓannŽÙÙY‚ Ït…F©B‰hÇEJ‰ã˜ä2Gk0m™gý[Þ@ãXäyN/ê"„…ah’$îþ „m‚n·3ßÚ¶»—¾ )ž´6fß„Œ M£AG7ËÒ"Œ) IÒ¢ûéû>Y–‘¦)®W0-˸b·]«¦i–<´Òä™àZ­$ Q¯‹iZ4šõbE¥Z&MSZ­-ÂR�†&Ë3 Q´†m ªŽãôYA!,@“ç¶]lŠâ8&cÙ¤ �� �IDATŠ"LÓÄu\,Q¼¾^ÒÃq A%J"l×ÁB˜ý*…k ”gôº ¦ŠL&˜–i ”V$2"ŠÀ0ËÇA!sÎóþ¨±mó•¯<Á—¾øR4š9ívJÔë‘KøÀûï ->üñ‘ü�W.ŸçÙç¾ÎÏÿÂÏñ±ÿ0?ù?ü]”–ü—Ï ç/¡\<?Ï÷LbZP­¹Èܤ¾i±¾ÖÀ±]f¦wP.€&,¬¯®–?ıl²,%Ï$–)ˆ“?(\ªŽ³íBÖ€"ËS”²ú—’&1¾çá{ÓÓ3…ÓÙ4,Ë Ž#<ßÅumÀEQ-{äI›F¾ÌOü½¿Í}ìïðõ§¾Ê‡?òvLó¯ýS|òï’ßø×ÿ‚ŸùÙŸæç~öòÛÿùwùÚSßà{¿÷øƒ?ø*Ï?wW^½€eÜqÇ>r) JŽ]!ô†‰{]N^8Çîû¨ ÕèµÛ^€ã€[ñˆ»š<spÝbƒ+¥Ä5M,×§–ˆ¢ˆn§‡)Cå!Z­6Q·‰ç8¶C宇mú¤‰Àõ|¢^D­\£\®Ð‹Ú8® †¤Ýi�Û6h¶Úø¾K.c²<Á´!—1NË* F° Ãlž_¬´- Z–…ÌA 0,„(¾Óõz×µp\¥2GP« Óí¥ýF˵iɲŒùùy>ûÙÏR¯×¹ûÿcïMƒíºÎóÌg¯µç3Ÿ;ã^\Ì�‚�($RœDQ´[¶éAC$«ÓÕN9%ÇÖ§"ÇIWw9—;éN·]IÚ•”#ËN9Š,Y¢9Ó¢(R¤‚A�1÷¸ã™÷¸öêûÜC‚¤$JI°……øqï=ggŸõ­w½ßó^¿‹|à¬^½:Jk·™»8G·Ó…Ñ·ÿš'Oä›»vîâöÛog×®]”J¥ÁâiíÚµ$I‚eY'þÛuÆæÁ|&;wîäñ¹é¦›©»¦iR«Õ˜X5A­^ãÈá#œ?~à°ýˆ¢ˆ}ûöñõ¾ÎK^byy™$I‚€jµÊîÝ»¹ë®»Ø³gccc—,Ž”RÌ]œãÈá#ÌÏÏsáü~ï÷~ï-1�+®ÕV«…뺃Ͱ+qh43É ›/°Ð›ãgF‰ o[Ø?RU´ŠìÚÉ«Íãœne±•á)M½ZÇuÜ+ôÉР»Ý jÀ(#Œ«¾ÊËy}ó­ä«bõ;´œChÔiHòýž<FŠŒe–™e–I¦¨q5¡úý0â8æìÙ³<ðÀ>|˜R©Ä]wÝÅÞ½{¬mX^^fïÞ½ìÝ»—›nº‰Z­6VB,¥”ضý¶ðoœë·lÙÂý÷ßÏM7Ýĺuëu„çyìܹ“Ó§OsèÐ!<8à¿þ EäÁdff†M›6q÷Ýw³{÷îKé�ËËËœ<y’¹¹9z½gÏžÅ÷ýKj–•sã˜ÅÅÅKWÒü®´¢•¶8Ð<Àb¼@‰]ÀÈŒ|ê[ÖtŒ:¤:e¿†kË×2⌠ÑW¿·/Z/!Bx@(ç_~?ÂpL‡5•5L•W¤ Ÿ:Æ«KûÑj"Š—0Âã 3 ,,jÔ˜*N±ª¾ ×t11óZÍ­¡êÐm¼LÍ2¤'±µû|Ö«ãÂŒø#L–&Yj,qlù«GV÷gé÷Çs”錖nq.9Ǿæ>lÓfÃÔ¶LlÁ2ÞB½i’L-m4*Õ˜® UŠZuSZ9‹QÚØE•ÚÃÂód|Åx MîÒÔÚ S-r·¢m»(må-ßý…n‰0ŒètºŒM !#cqþÂ<½�’Ø X¨17ߣV«a)¦#™ Ц4IÒ˜N·=ØqìõzHibÛ.Q˜ ý[‰†JraSæÇŸ)H5d ¤È±�Z«\piöY¢6 P™-ˆÂÜÝE16lì;Ò,0tþ>Fî°¤X—ƒ@z&ZDqŒ4e?¥]cš`Yfßšáú."Šû¡&Iœ §RØH!1ÈïLÙOÙLZˆ>> Ë…›,C¥ ¶i÷EE…AîVJyû±Î Œ~xTv(Ê}<‚"Ëòã’~k}H–Ê2²4#NblË&ŽC„ Õ)WJ´{M@aš–-Q*AJ£ï´M0 ÝOì&¦B œ¸qR½óõèÑJkƒ$Ñý`0'¶µÆq\¤%sVªÎaß*ð Ç…^Ø#ŒSll)A”`¶,  ƒLÐ&:« !â°Í…ó9{æ</y•‡~”v7äÌéy\ׯ÷=æç[”Ê.?õ‘=|ìã?ƒ)ËÍ‹üüý?ÃÂÒYþä?ÿ!ùÈGø“?ù†ªenÚ} õW_åÏ¿ø &A/åù}‡¹íök ’€’o²¼äbV…¡¡*•j ! :íår i L ¢^‡0càrNS…Ö®ca96h•‹ÞAÀÈÐqòÚu• k§×&¥R×Í¿„\¼ FÂHÒÀs$¶€R½ÆÜ\ C¦,.7øõ_û$ÿòwÿwß½‡n«I±èñïÿèøÌ'?ÃöíkÙví6~õïÿ –¡)M¾ò•?ãOÿëŸ1¿°ÌŹ9¾ô¥yþ…ÃÔÊ.;®ÛÁ}÷­aËæ­¤K¯©©•,¢ ÂsL—¨ÖÊ`$¤:õ>6##ËRº OrOŠ…ÊÀ-ôZÔëez¾çSð\š%ŠE‰À–&Ú¶q,•¤ZÓl-Q,È�iXtº-ǤÓiaÛ¥’Ïìùs$IÈðð$†(…Ñ ý,çý9ƒï¨8Οi­A¥š8R8Ž›ãM´ ÒSÛ¶,R• fÍæ2ÅR-ç¿ Î(Š8}ú4Ï?ÿ<¯¼ò k×­¸3]×%Iס\)Ón·ßöëJ)£Ùlrþüy>L¥Rarr2qê»î/Ù }CÛÿZl†A½^gÍš5Ôj5<ψ•žç1::Êøø8_:H«Õ¢ÙlR¯×ó”ÕþïI)cûµÛ±,‹N;oG¼xñ"ÍV“™™öïßÏää$¦ix¯J)Z­Fƒ$IbzÍ4S“Sý.KY¬Íf“ÓgN†!¶m399ÉÈÈÈ[аWBÕŒš,‹ Ë1ÖTÖ2âŽâIïG.¥!ñMŸz¡B›&­v“Ù,ï©3„‹{å˜ZCØÅH·�NäU§Çåÿ®Žwh1—8—ZPgÒ¢bWÞÓãQ¤ÄÄ(ÔÕ›ó>N‡Ã‡óä“O²oß>Êå2{öìᦛnbÕªU¶¨”’J¥B©Tbvv–£G244ÄÚµk©T* …·Å9ý¾ß†A¥RazzšáááK¸¦žç122B­V„a5›M†‡‡ß$޾¾~X^^æÅ_äÉ'ŸäÈ‘#lݺ•;î¸cÐù²²‰ºR+¶Z-â8fllŒ7222B¡Px“°º¸¸È™3gXZZ¶mFGGYµjÕ%F›÷JPMHhe-ÃEaƒº]§f×\\œKæá€`°!sªwŠ%µÄˆ7BÑ(æk´«ƒ(j†ç0 —bqÛù±æ·Ì€¥}F‚€^»…¿væððK è\à61)P`ئd–.E6`HG¸²5 ^ÄÕâwe.FP–e*²Â }‚¹tŽ[ô-ï›ãO“”V·Å±î16âiiošµÞZj¢ö¾s«˜Â0)}Ht¦ð‹6í F¾¸LRE&˜V‰¤×#Mcl»@½nÓê˜ùUŸ÷¦µ! \×#LÂ<ÌIXd*wI’i¬¾³°Õ XXX`ÍÚ ´6ÐF†iÙŒWhµB:„ááq Èù…„˜™Äq\¤G¡PÌ[Òã”,×ÍSë‹ÅRŸ——¡3ÄÀ²]¤T(•a¹XgY¦i&¯¬ß掑Ò$IŒ”9g4B,3w,ÅqÌš5kˆã•*,;ŸZlÛêO€­I’æ-ÆIÜY|)Èú3¤4)Š}îOÔ ¤´Pi.<Z–E¥Rí·‡è>¦Àè·vC¦Á²$Y–ß‹4Mz=TšâV´Ê†Ä+X€j¥†!òÓ21„A·Ûë»í „xíø¤4ˆTB¯ZöÓ4E¥fÙìóQÁó|z½<¬ªÝiä‚°)Îו–èü^¨þkAö†DôÝ£ZåîÉ(Š"©U¦ˆ£ˆ$‰Ê"Ó ×³1d~=…9.X˜fSLÎ)ŠÒÓ²ITF¦Âð)W\0„t°¤ Â&޳§<{t??ò/½tˆ¹…óœ<b»…°íÚQFGǨTÊ\»}3×^»–úp‰‰‰aþæÁ/ó™¿ûIΜ;ÈÙsçH’˜›wïáßüŸʧ>ùsŒ¬ç¯ý3jµë׬á±G^àÄñSÄ‘¦Õî2>Z £E±Xdxz=†‘ ‰0ŒÜ­'!õZ…4Î]ªÝ^@Á+àº%zÝ^ß9­0 HÓœ1ªµ&NrÑ/w;¤iB8ž‹cYDa—LEdJ!¤Ö)õ *Ké…=|¿�Z±4‘B±J»ÓcÓ¦Õx¾ÍøÁÿÑðëó4–ç®–øñ9~çwŸûÿËó§¹ï§>ÄÿÑâÚk·rÛm{Ù¿?ýÙû¸eÉÁGyè«Ïò»ßþ7lݺ{ïÛËÑÃg˜œXM½6Äùshd*Æ*‹H‚(Oˆ­T±“Ærƒ,ËHUn/ÆvêõÝ^ÃÐt:Õj‚ï…Â0Ñ™Æ22Ònv¦fdd”v;/x+e0Œ°m›R©HtÑFÖo1O<n¥õÅ}ýz>ÖŠ˜˜ã,’Dõ÷QÑn·ð ~? 7Àr­‡9U½þæ”xßðWødÏ=÷½^5ÓkØsóÆÇÇ‹�ß÷bqañžØ÷®ë²}ûvš\œ|úé§I’„72555B]×¥X,~ÏÐZlù¾O½^S€„”’j¥ÊèÈ(–e Ü¢¯çTC>—lÚ´‰jµÊõ×_?ÖŸ8Îw¾ó¼x€'žx‚B¡€mÛƒÅZE4 Z­–e±fínÝ{+»wïàYVÄß4M9qòO<ñDÎÞÆ`Íš5ŒÿPÎwzÑ•‘¡´"JC–Ã%Â0d}q3Іø±…OƒŠ[aÂçŒ:KC/#•Df&–°0¯´§FgdA—¬ÛDÖÇ0üRžtu\&IÕ@h SÛiR‘·©\—e$@üÐcÒ[EÕ©¾'ÂŽ0$¶°óÚHÇ(}UX½’Ç Çüܹs<ýôÓ<öØc\¼x‘;3û￟k¯½ö©mÛLOO³aÃ.\¸ÀóÏ?RŠùùyV­ZÅÐÐÐ`Ž/ ?ö\ÿš浟­„cY–Õï¾kå!ÆŽó¦Ï|–e´ÛmNœ8ÁÃ?̾}ûÃÛn»{ï½— 6\²á™¦)ËËË´Û¹IhݺuÜqÇlÛ¶ÑÑÑK‚®LÓäå—_æßøKKK‹E&&&X³fÍ{:×k4))Kj‰SÑ).v/’¥{ë{©[õ÷Æ9~EP†àt÷4‡Û‡™Wó(S1fQ5ªÄO¼{5Ž[´Ûð¼)ŠÅMHé^¶û–%ªa€•HFF¯Ç¿C:ý{óšsØXù÷ßñÂx¢Œk”ÉÚ³(ÃD:å«Âê»Xë”E™ª¬ÒÖm.¤ˆu|Å£�V‚vƒ0 ÑnpäÂ^X| {‚µLÚ“W^Ýþ¶…UabšRØDQ80M ­2,ÓĶlÚí.޳ „a"…¤^w9t$eiiáÑ) Ë##ÒD“ ú)ôq“¨~ðP¿­È2“¹¹EzÝÓ´Û-T…b™‹—i·B@bÈ!ó:Ó‚L›$IÞ¿ÂÌ™£¥4¶e#¥IFDQ‚myx””’0 q]wàÆ\Y�†1B E7“z=Â0oÉ×}¡XÇ ½  X(á¹>©Šû®JÑO­ÏùІa U?|JdÊ@¹S0ìå©ô®cEQ”®ôíÓíónK¥ŽS¤Û û‹éÜá*¥ÙoËg0I+•âû>ËÍNŸ³écYÊVdRÇñ MT%aÞE i¢HUš»üRE„ý÷˲a-y¸–êZÉAàVŽ `Àr·Ï_Í–ãz@ŸÇ* Û# ã~ Wîš•ÂÀ2ó÷êõzhc#”RdZá<Ò4Ešf¨,ÅÐàØ>qœ‡M¹¶M’dœ:s•el¿î:º]úN!‹¨(AÉðØZ ÛCuCíVÌ«¯žá…sðà+}å8çN-!åŠA’&tº)×l+³yÃZ¦¦'سwëÖM³nã¤ñ_ü/lÜp#_ÿúŸó¡ÝN§=OÐëðø£òÉš}ß}‰jÙç3Ÿþû=ú ‡_žçÃ÷ÜÁ×§Ÿ:ÀþýG8}ê<ë6NÇKyHY‡|‹(AgŒOŒ©„^¯iHÊåZgzù ““Ó¬ZµŠN·3a³LõCÑ ÚÖ ð´,‰iJ‚ ÇüÅ‹Ôëu<ßÍS¹ûB»Nò¿µ-‹,³r÷oœ M“n§…cû´ÚKlÞ¼žŸÿÙÛxøÁýüÆçzضCuÙsËMÜÿsæ±Gá×ó·h.5¸ùæøoñE~û·ÿ)ßMΜ|•é©1üB‰Ñq>ös§×îñ?¾òeþÝ¿þ„‘â®»æçîÿinøÀNªå)Ê%Ÿ¥¥yÛÆ4óð‚0¢ßu)W yrl+¢\.‘¦¦))]4šn§×Ç} Ì>·X£²Ë´° Ë1I¢ž— ]Žëáy)•Ê E’8y„8nÓ̶Åb‘8Ž› a¢”´o\²Ì@e1*K2GUô‚•J‰å¥††ªDQ€”ù¦i^ù»w+æéÓ§ùÆ7¾ÁóÏ?Ï?øAî¼ãN6nÜ8p˜Ø¶ã:H)éöºƒï×Ä ó}Ÿ[o½­5ßúÖ·˜å«_ý*Y–w xžÇÚukÙ±c÷Ýw›7mîo>ýp…F©TbhhÛ¶/)(_Ïf[9ß·zíœ \Áó<ÆÇÇɲŒ,˸îºëظq#¥R‰§¿õ4?ü0•J…7211AE,//Óh4°m›7rë­·²cÇJ¥ÒàX„DQ”‡b5šd*cdd„±±±A`Ú•022Z´˜æYè,똑ò(5§†¼Œ-c>Æ¥EµZc.˜c®7Hõr+mÓ[£éêAÖ b¬Ç¦Œq5bé² ‰MIOÅ.r)€’¥âÕ€°Ë4Ú´9ªrÌ|³¨1÷æ8*V™)Š…l–óé)ÚÙµWoÎ^9r„|Gy„³gÏrË-·p÷Ýw³sçNjµÚ%ó–ïûÜpà �|ûÛßfvv–‡zˆ¯}íkƒð¦Õ«WsóÍ7së­·²}ûöúx^/¬¾Ñýº2×®üÿF¬ÓGìÛ·Gy„x€r¹Ì‡>ô!î¸ã6oÞ<¨_/2/,, Øé“““ìØ±ƒ;v066v‰°ê8Ífs^Y­V`Þ«¡P,é%ž^~š'.>ÁµÕk¹}ôv*Vëmò6ÇÜ1¤œìäÕÆ«„ÅéKŠß·âÊå¬2c÷ŒËT/iÅó4û‰Œ�YY‡é”1¥·1þP»[Fi©)i,?M›"y`øÕñÎaF £¬-¯Å8k0·4‡šPWü†D†ÌÌÌÐŽÚø«|ŽgÇy®ñ÷_s?ÛWo§êWß·÷Ä\I4RfFѵhuS¤x¾Oš fg/b›ûœM…ÎbV­ÃqÎÇIî0T†È‘:êïlè|¢ITî“ÂÄ�LË¢Trh5Û¸®‡ét:µzr¥ÆÙÓ3Ò!NbLázý¦u|¯œ‹zÄ@Úg9ÎÀÊÀÝn·/lB%$Z#aÀ£‰ãÜAjÛ+íñY?h&ášÂÌ'2•jt–O¼ ‹T+5Š…r.ƤÚÔæJú´a cE\í_à M™¡±ÛVýVu!,,S’ez€È…Î ƒ<TªP( ”¢Óé\Ò"²òžZëÜ=kYôz*•mÓ´é†!cz% «ïÍÉX+lÂv»”ÏóéØ+“xþ)–abö±™JûaG¹/O¥¶Bt7j¢1qSÚ¤©"í3mÓ$Åq\ CEIß=üš`#DE Ýn—B¡@µZ#ìEè<¤ E¦rQeÕÄ*L+WÓÇëß?“N[2<¼Hk^ÜwGý&ÇŸbÿþƒDaÊÂÅ›àƒzÍgõËrØ´y–¥©VKüü/ý,®+«SªøÄIÙQþàÿ˜={n%Ž–X5Qcl4Oïd`{öÜÿý×ÿžÞöa&‡œàä±îÉøÄ'ïç«_ýïü÷¿|¿þÊCüóßý<ÇÍP(º¸^ŠR!³ç/04T¦Z*ÅY’P)–°m›å¥%,i’$JEôzm\ÇÆq¢(wrúžM'8¶…ì_Ó$ ‰â˜0èbV)Œ,wt À2M²4ÏÚZö[CLzÝ€bµL%ô‚½^—{î»—ÿëß=Á û^ä†¶Ó »X~O}òÓüîÿñûœ|õUªµ!öÞ²—ýû_bæÜY>rÏ<»ï;¬žEš’¸’D H™ñÿáÿ̯}öã|í«_ç _ø2ÿèÉßgxÈc÷î=|æ3Ÿbdt Å4šK¤iB©T4 y«•i£²C ÝGuX¦…ró½4ÉÐ #çFQ.˜¦Ä¶M4a@&é´» `&I¬ð|ßvˆ“0ìÇ*ç·Úö `^y6WBåVž‘• °j­Šï‰‚Cdd:%ŠÒA8œcÛ,..äÎÚ8G$‰Ä¿ÂÃWοÕjqöìYNœ8ÁÔÔ/x‘ BeÇ=z”ÇO°¸°ˆeY|ýë_çÌ™3ŒŽŽ2==ÍÈÈÈ›b¶m³~Ýz’$Ás=Μ9Ãòò2 ,--Ñn·9xð çϟϯ{œ055õC±ÈV¹ol½ÿ~Bê[½F¾e^²`[9ŽS'OqìØ1¼p€3gÎ077G½^ïsÂCâ8çêV+UÆÆÆîœ×/òVœ²K‹yªñÖ­[©×ëWŒ[uPh`’¨„F¼ŒcºŒ¸#äå ™±°0 “¢] Hfºçèêî¹s¯„„Ј)b6W[×/ß0„‰åAjbÄ-HLÐ>pUX½#1g™Èï1Z˜¤`¿7“’%lŠf‘¹4zMÂ$¼zs®ÐÑjµ8yò$>ú(O=õ½^­[·òá˜]»vQ¯×ßêdYÓÓÓƒLˆÓ§O3;;Ëüüü`®?räÈ@p4M“ééé79Oßî\ÿÆá­æù·ríi­i48p€ÇœgŸ}×uÙ¹s'÷Üs×\s årùM›yàs8X“ jµõzjµ:q_ß¡Òl6) lÚ´‰±±±÷œ§d³Á,§§˜ŸÅl†’!̪Ʉ7AÑ)þ@‘Ç“cαŠIƒ”VÜâ¬q– ÎÌŸXçc¤X( ¸ØÚ¾ŒBF.6‘V}#Ú* ”*Ä`Ȳ2¡P@ü¾ Ù}ßÖ:†4$5·Fͪáh‡¥îí¨MM_y­ô+ëÃ0óîp#âTçMšŒVFÙ4´‰©Ò®tß·÷Ä4-™ó630ÈHU†!4®c‘¦6Yæ23{!gf.‘0 zÃ#CXVOeÄq‚V Ç‘XŽƒ2L0òT¹T¥…:Œ FJuvîÜÎÅ‹38ŽC£µ@£ÝeÔ.bÛ6çÏϱ¸°ŒçgŠ)†™§Ç;– ^öm\!H“¨Ÿ8¯Q*EÊÜÁc¹8"$9§E¥¤Q· Ù&½^D’}Þ§"I™R`dƒEiæ¡':ëwR*•Ðèm6Ùÿ«×çÊg%ø)Ë2¤01¥…2²>¢ ç%ê,·Ò¯„5ù¾ƒm©<)<0úÈ£ß.’c ´^ Õ’Çn¦ußk÷Ó­M„m ½"i’$¹Ø#2!òVþ,ÓýI]ôAîùy§©"Ž£‹Ì4-²L` R#?wÅ-›õ/GÄq‚iZø²Hwéõ|¯ˆm;ôzRH´4p]?w§9V AJ”‚<Í>íc�D¿E6 ×£ß~"¬üʧY "ç†BŠͥ6žç#€B©Ê¹s1ÿò_ý<üû_8†çB¹l³eóv¶nYêÉ)Nœ8K§ÝeíšIn½c=õ!‹jµJµVÎ]Ì*ÀuæiÜŵM¾õ­oR©îºûù›¹ûö;0X¶K«1ÃÝwÞËüù39òŸúôÿBvxõÕÓ$‘¢àAFü½_ý;<þø |ùËó+ïï2:¼ž8]Æq,)QÊ"c––±m‰eIzA7çËZ&¶íðÁÛn#Š"|¿@Öÿü™¦D)R0<<Ô¿ÿyc.FÞZäû¶)s&«)ISKZ˜R¢…Îú؉>£8#GUtÃ¥rËqXXh°}»Ïc?Åu×mÃrL¢0 Ãäæ½wò•¿~€ßøŸ#M·ìÙÃ?ÂOÿô½:ø<7Ýx-Bdiߥ4Aoϯñ©_þ8ÿø'8røO<ñ_ûÚßòÅ/þ ×mßɧùVîºçfVMÓé¶HÒˆRi” P”k£ A·ƒéØtÛmŠE—(JHh2Li´l�� �IDATQ¾ec[h4®k£²”8ޱÜQ¬¨×‹ÌÍ/b`Q)׉¢œ{¬Ò Ã0q"Z›¤iT·ÂÙ\)¢W\ò…r™¨×#æ.é)ÇÀ0BçÌê8ebbŒ¥¥y*µO~ó ÖL¯fý–i\ÇCeÆûf²_ù~ Ã_|‘“'O^Â*ÕZÓét˜ŸŸ§Ýnc_øÂؼy3×]w?õS?E­V{“H(¥¤\.sí¶kY=µš ‚-sþüyŽ?γÏ>Ë‘#G@ç­2÷ÜsÏ›mo÷<.ǵxãëø¾ÏÈÈÃCù{±Û¥Õjõ9ÛÆ›þæ.YÈéKKKœ?žv§ÍæÍ›¹ñÆ©ÕjWT …@àããá"´ÀƦB—Ë_8­,àò@&#ÍÒ¼]ø .uÿßÊ‘_—óC'1ü…^šl †¯^—Ë&\k„%¿À¤µ–ª¨¿'Ï—4dž$ž ¢žF%WïÍ•6V6"OœÈ‘5?ü0/^dûöíÜu×]ÜvÛmŒ¿%|…±êº.###ôz=ºÝ.KKKÌÎÎrâÄ öïßÏâãG?úÑA8æ»1×kÏß/½ô=ôÏ<ó ËËËÜqÇÜu×]ÜtÓM Ïúã{ÍõðÚ&ì 2`nnŽV«ÅØØ»víb||ü=¿¿Ý¤Ëùöy¢^Äh:ÊìÌ,\x€hMÄŽ±¬«¬£`.es¾Å°…Í”?…%,ŽõŽq::Íêúj<áý„â�Z/aé„’(#âå»ZCØ€¥¶ÚváG¯C Œ<4Õ¨(WÇ»9\Óe¼8ÎXaŒóóÌ÷æ™ÔW^;½Öš^¯GGø%mkž=ÿ,pÇôl­l¥&kïk§º™© !@Úy {„ã˜ô‚6Z™œ"Ëb’8!MS\·@–™‹æç5½^' S‹$Sý–ñ|ÑgÚyKw†”Yš;Ó4Ã÷}Ž?Îòr×wp’i &''AK al´N¤æÂÄ-ø¨T` !3rH¾æDÍC§ò]ËTÅ}¥@Æ -!ÀvòÖÿ ì¡ú¢¯Ïsû‚¥—CѨ/˜X¸žK§Ý8‰„d*Cét0©¯L‚Q Ú6ó‚¾c5ðX¼LÓ&IR’D‘ÄŠbÑéYåÔh£Ñ`qq‰ñññçUJÙç“æ­Þ�Ýn0h÷ÃKJ\×!È’~h”Â4úM‡"× ãèuÌSƒ8Î]²¶mãû>I’ Üv†a’¦ñ� »PTª±m ™è§Óç!f®ëa ‰ãPø~98_Ð8Ž—s)]Êb:ía ¥ì·lƒç¹¤iÒhÒ`€î³Ss§qþ¥ž© ËrИ„aÂ7Ÿ|šgŸÝÇ‹/ÍðôsÙ}Ã:~óó烷ÞL­^fr|œ™Ù³œ9s†u›¶2<4ÌÈpµk«tº ¤J!€4Ž:í(ß@° tÚM^>x˜OüÒßaöÔ)„aâØ>‚F£ƒÄÆê»G“4dËÖµ¤Y›g¿ýi 6n"I—øÀ[¸ù– <öàq¾ð§_æüúÇ@·ˆãáJÛ$ Úí®ëP*ûôºæ.\`dd„Fs™‰á –q‡¨òU«Õèv»´ÛÁs·²!s@%Ò„ÆbH¦RÒþ¢Ä”e˜"Åu<’$¥Óé`L¤éÄ Ò21m›v·Ëñ'¹ë®;yåèalÇC‘éÓöÙ±ýüõW`a¾Áøä$×\³•¯}õK|ò÷c ÍÜ…3lÚ¸f‚ç9<ñøS Orý®=*5¶\³ë?p=¿ô±ò‹ùâŸ}‘ÏÿÖÿC­öùÙŸ½…Ï~ö³LNM±´´€ãY˜Ø®‰R’åÆ"…b%gÌ&)žWÄu< aqþÂÉü9ǵ°}H {=ËE–MºÝ€‘á Ê•!ºíR8H!úÈ>ÝGˆdØŽ8 ’$ E*• Ýn—ÙÙY&'')W+ Õð‹’éCH ŸjÕ"Ibâ8á•#/sÍ5[ÑZñÊáWY³f=•rý}!ªZ–ÅØØ7Þxã Èë5ç»îw?äŒÚ$ίUš¦”J%ªÕ*•JåMlÓKvh¥¤T*Q*•^+C•¢Ñh0;; ÀÜÜ'NœàðáÃìÞ½›‘‘‘wåÜß–î#r<ÊŠ«\1p*¯¸s\×íóvC‚ x“{fqq‘§Ÿ~šgžy­5[¶laïÞ½T«Õ÷ÜÅòFQ¡HIÉÈ}qõÜI·M›j¡JœížaÔ£î\yÏÎU9õ¼°–IšôŒe,\\²«×û²=Ô†8¡OÝ¡P)½'Ÿfßò+Œq¡{”èç\WÒH’„£Gò·û·<òÈ#ÌÍͱiÓ&î¾ûnî¾ûn¦§§¿ïF ”ß÷/q¡j­i6›œ={ß÷9qâgΜá¹çžãÖ[oÍב?‚ÿG™ë———9tè>ø O=õZk®¿þzî»ï>vîÜù}ÅÏlÔçú×#��â8æùçŸçå—_&Žc®»î:n¾ùfV­ZõžßßT¥iÀ3Äú‰õ[<Æñåã<uú)ηγcl;Çv2^úÁ"°#êvÝÖ´¢V^+þ„~k+Ó Î Ó×›@¸Ã?|›þ÷acéU܉ëð‡6aÚÅ«n”Šº€e„Ñ\À¼Zå¼KÖ6«Ê«X]_Íro™FÚ¸"™ãB<Û#J"fÃY^n¾Ì‰Æ vŒîàΉ;Yã­Á6ÞßÁuf¯×!Sž%q=  ôðœaÂL#…ÍòÒ\ÎmTQØÁ „ï{„aîNT*3“(g &J¥!%ÓÅ´$9ËP ¤IÑ)`Y&µZmÐÆ86± E†6«VMäCiBeh)ML;Å6m¢žM& ’4%ޤ)"ç ‘/Ö3ö'¦¬ø¢ñ})DÔKóTúÜUf „Ù¼Ý^eºDã8¾ïÓjvHS…ïçüÒ(Š Âiê`•»Ör14 <ÏöÜ* IS×%U:g˜Z.IÜÅ”6Òí3Geî`UJ B lÛfhh×uõ•b@ë ÈÑBýТ”4U 3 !……Ö Fî–Íò‹ÓàyMðB „a÷…º\éOôQBÅè,gª4&I2¼² †$‰’,Ee�Jå(åNZ×-&Q¿UºÏÉ  %о+L‘·õ÷ßÛ¶í¾ø q¬ äÜ)¢Ž•$ ®gÑj÷plŸZmˆÑÑqƧbþ×]»øàm{¸ûCIJóó³tã“hy‘u›«W¯Â÷<¢°‹RŽeS)»$QB«ÙÊÒÄÀs*èȦ9Ÿ1QÛÄÈä6^øö·©–ë¸N‘N'À÷ªìÛ÷•Z•Å¥%ÆÆ†¨Õ*t»Ët{Ë$ÀÑ£Gˆ“=˜–æs¿ñY޾ü/øoñ>pýn»óÚ½ETFŠjµŽã˜\¼xtÊÐpwtx †{¾Çää$q’ ’œ§=T’à;†V$aˆÖ²H‴ï`ÎC×2”JÑ,+c¥'¤Û ÈTb&……)²,@H“úp•Sgfi6Ú.Õú03³Kœ›½À†M£,-ž#ÕÚc“<öø7øØÇ~žZ5w ,5–¸á;˜¿0‹)RÆÆÆè q”²qý5ø~ RÅÑCû©T‡qË’‘q‹û·ÜÎÏÜ3û÷¿Ê_þùWùžáK_ú4wèƒüÂ/|˜k·oEc!MDŠëUs÷¶0”BЋb,SÐé˕Р: @š‚4S4í<ä+ÖØŽÉòÂ"F_øB  „)sG¯R9×èo®t;´Öxž;Zã8ÆHb„4r‡¼È7â(Áõ   š­&ÝNÓ4ã‰ÇcÝÆ ø^ Ó.½o„Õ©©)>üá³uëÖ7-œ à IŽ?Î7¾ñ T–�ÿøÇNŒ•M¤K‹Íüo6›è¾CEÔZã8¬ž^ÍĪ zÇ{„Qø¦…Ê;uÞQÁÀi¿ÂÜ]ùù ÖäÕW_åðáÜ9{Û²©×댎Žöñ4õzZ­6H>}ú47nìo¦å›u‡âÑÇåСC¬[·Ž;wrÍ5×¼‰ ûž/´b^ÏÓÊZXÒÂ3ýÜáðŽ‚]`TŽr¶}†í“Hú"…Õ«ãÔþ´Fé„-<ªØè«Ü·Ë&¦(ºÝˆn#F(¿7òGÑ)2Yžd¦;“wÎ^WÔó×ëõ8wî>ø O<ñÇŽcË–-ÜsÏ=Üpà ŒŒŒ 6^_/6š¦9Àu:¢(Âó¼A—ÞJÇÞèèè ¬qnnŽF£A’¼;¶e¥Q œª=öív›½{÷rï½÷²mÛ6J¥RŽÚëÏÙ+›Â+çgš&CCCT*LÓdqq‘sçαqãÆK°@333<þøãœ<y’‰‰ vïÞ=Àþ¼çó; [ج)¯age'[‡·r`î�Ÿx˜}÷q!¸@@ÀŒ0ì ãŠ>rá{|add8¦ƒ«\"«xbÿôôe íÖ –YÁªŒ .gý’†60žY \Z‹”þõ’&ecC‘4@¸`¼7n?‘ª°Yå­buq53ÝZªEvMŠ™ÊÑx™ÎˆeÌ…ìOÏ=Í /PrJlªlbki+%«ô¾¿f©P$ìEh²4Ã0i$ží*/cfv‘,ñ±¤BZ)Zw"¦R€^TE1Â0¦A§ÝÂr%QÜÃÅ”yPL.<„d™Á5[¯áƒ·ÝEÁ¯³¼Ð£P(P(V˜ 1eŠJ#J…RÞ¦ŸöhvºdIˆ-NËIPi—$yMEƒãZÄI†0r'¥)llÛA'y¢¶0–e#…Ä*x¨4%ŠrG®¡sáÐ’L§h¡ITJØMp’aš9;1N ã¼¾^% ›t»9ŸÔq,’4ÁuMâ8!NŽí¡uî¦4MA’FýšŒ0ê’éÑ_„[HŽ#ó`•‘e! V«¦)Iâ8¹Pj™™Ê7²´T ™Ä¶–i …À0$½^۱Ȕ´LÒ$w°¶:MLËÆ¶-¤•‡b¥™Â‚Lk¢4E©,g B‚,SC  ! L[ ”&JrnFfh¤¤I‚i™yê|¡Ò„,;Ž-û_º ¦™A¦ »¼`ö< C¤Û4‰Ã$G�$1ݰƒcZø®C»ÕÂvÛ&èèL1B8ŽÅŽײ}ÇÂÄåÄÙyzø!¾»ï»Üyç^nÛ{3Î#Ãc”‹’™s§ÃÏ'UA/Ų$:K±Mϲ±…‚ âÂܦ׭¡½¸Àr#fÕÔ0i–!¤G”v¸8–O}æüùŸ}…éÉõئdv!¦Xp¨ Nœ|™4Ih.Ïsûí»ùåOýOüÙý2õ?þ†[oßÁP½N£3‹Wð°,AhÆÆÆ°]›^§Kšf”Je ¡Xh´ð}Ÿ4V§Dª5Â0IT„04~¡@§ÛCšéæÜG-:Qý”zsžD”Êp—”ˆvPð‹XŽEªb‚n‹TgK#ªÄäd…¹ù/â:M–?ú6oúyæçNõ$×︑ŸùÈm|å¯þš|h/irÛÞ›¸pî$S“£,6.fšmÁÂr Œ ‡Í勸¦iÄüÙ34{-Ü›Úp™k¯a÷¿ÁgýøË/>Â×þú)äìºþz>ñÉûùнwâʈ$¥ÑZf¸jã¹&I–Òº$Y åt²¡lR-h,µñm£_8›:wØ-]œg¹¹ÌøøÚµh,7(U‹˜¦ÈÅB"ÃÑѤ”å~öp‹éÕض9pK»Š6ÂÖ$±BjP™Âò}âv›ñ¡aÎ;Çó/<Ïî›w“)Eu1ß'èß÷Y¿~ý[rÀV6o:A»ÓGFFؾ};Û¶m£P(¼)uwÅÑqþüyzè!’$,ªVX¨+l×#‡pîì9,Ë¢V­ Ø·ïäR277ÇóÏ?ÏéÓ§±›ZµF¥RüN’$ÌÌÌpà¥8p€F£Áú ëY¿~=CCCƒvÈjµÊøø8Åb‘ÙÙYž{î9ÆÇÇ!Ë2fggùÎw¾Ãìì,ÓÓÓ|ô£e×®]ßÓåûž.¼2ÅÅöB1éM1æŒa¾MŽYi—ÏÛÌÞ^‘ncSU–Xd1[Béôjå}{+ÏÑßœ½ò8_¨kWÛ/ßÓˆ ÁEfÓYz…�å*4ï¾»L[æõ|ªV’b¯Ž+a$I‘#GøÖ·¾ÅÃ?ÌÌÌ Åb‘ééiªÕ*ív›cÇŽ]•eµZ-¯sm›ÙÙY¾ýíosâÄ ¶nÝÊðð0Åb)%išÒh48tèçÏŸÇó<¦¦¦.Á ½Ó¢ñ¾}ûxôÑGùæ7¿ÉÂÂSSSLLLP,™››cyyù’ºCA½^gbbÓ41ÍÜd4::JµZåÂ… ìß¿Ÿz½ŽRŠ 8sæ ‡âÅ_¤T*±{÷nöìÙsIÖ{"”Ñ£GHˆ‡GI”¨ÚUüªc9˜¾ÉáÅÜmŸåë¿Î±ø{K{Ù^ÞN¡Xøžáš¶°ñGÐRs¾sžÌËóóp«Ÿ´ ¥¤©Ð—óÜÓ�Ý9ŽšPÃp'‘bˆŸón"¨CÔ„VJepKWuÕwKX5l&Äz‚ï¶¾Ë|}ž4{wë^ݯ_ÏØÕ:ǶÛmÒ$%ÎbŽGùNó;n&s3î\}'× ]ƒoúÿ¿¸¦DP𠘆@ˆúŸù5²LḰz­Ë™z&Ò5èóTª&'ë¸\˜mE=zß“8žASExÒësFÁóŠHÓ$SŠR¥D(:í6'Nœ¤\®³yóÚEÖ¯óèu–¹0Ó$C $UŠ,KA ÊE»/d¤Y�F‚ÎijôSê3 áõ• •¦(!ÐÒ!M2\×ÁqdßYštz}1ÔÇór~]«ÝÄ05iÇñÐiJœ$X–Deš(‰)•*8¶ËÜÂ"IÐ ŠÂ0IJs©ç9}Žiž žs[m„a“¤1Òtð Q˜óS•б,—„×’'¥4±ì\ÐÕ¤$iî$-—Ë„aH”)(• ôº]šÍ.è Ó´P*ììj­PÊ Š.i–æNÇ‚Ÿ_¯~æîOþ¥r…4MòVµÂY50D.¾eZaÈ2M»Ûî·–Û"ßeîv;8+müŽ—;`³ 4MT”<a€ {h#/– ¤icK“,ÍÅ\iXFεÂ@%ÕZ•*Ò$!ŠÛÃ+”i4šAÌÐÐ0†´QF‘êÈjvß°›/}é/ùíô;¬šçÿÿíÛ6±87ËP}5ËˉB°ÍŒ$‰òkÇd*e¢’$¿J„q—±‰Q¢$¡&D*¦vqaÎÌa݆ t–²0¿ÄèØ(`ñòKgxê›/32ipúÔV ßói6ÎòOþÉopìÈQ¾þµo32þ‡|î7?ÍH}5qÐiaDm¨™D EšIΜ›Ãv,\×"íu¨Õ† ‚Œf£ÑîG¦4ðüÛqi¶[˜iJ¡T&Õš Œq…Ûgó$iL¦S\ÛÆ÷]’4ç‰JSYãº*„°ëÖOpðÐi¢ ÅuΜZ$ 4Ž-¯ÑmÍQð çf0PØ–Íäê)‚ ƒ´,‚0f|Õ MÒÔbt¨Že´z-œ‚ÁÄØ(qh€!s²•‘ÄZt[§(‹|þŸ}Ž_ûÜgùÏÿ坸OÿïùÕ_ûçlÞ:Ê?ýgŸçù Ów™Ÿ=‰)n±@¡\d¹Ù$JºdÂGéDZ‘Ê@ Ë´@¥8®‡´c¼’Gy¨„eKš­¨î)Ï\ib›9ç7Ë2Â( èu(—ËxžRŠ8ŠÉPÄQ€åzÓG-,§H¤žã122ÎèȽv]MøÇ¿õ[,/7ˆã(w9¼O„U)eÎ(®¾uºcÇ‹Eâ¤ÒÔß*°jPöSÏ<ó ¬_¿žU«Vå ð~{}»ÝæðáÃ$I–k¶°eË*•Ê Lle²ÿ~íÛ ¨zãï!hµZ:tˆ}ÏïCA¥R¡Z©’ô]ÿqsêÔ)N>EFŒŒŒpËÞ[ضmårypÞ¥R‰uëÖ±yófΞ=Ë¡C‡¨ÕjT«U”Rœ>sš‹.R*–صk÷Þ{/SSSWäç Ó˽e¤a2ZeÈz[ZœÅt’½¤K–iFü<óíñÖ$Ÿ¸ZÙÿø‹¼Œ4í T¯ÿlû˜fá²¥¿óãêgàrŽ8‹YŠY2aH#|ñž¸äMLí€ÒªG¢¯BV¯”‘¦)'NœàÉ'Ÿdß¾}†ÁúõëóùëôifffÞ4ǦiʦM›Ø³g£££´Z-8À“O>ÉÌÌ £££ ¹(—‡€¶8~ü8I’pÍ5×pà 7P©TÞ´!ûVsùëk·³éúÆßéõzìß¿Ÿgžy†—^ziÐQ×ív)—̃Y†mÛlÛ¶mÀ\Bà8ÓÓÓlݺ•ðÊ+¯àº.çÏŸ' CNž<É©S§PJ±mÛ6î¹ç¶mÛö–LÚw{^o¨½¤G!+P‘¤!);ÿ{ooÉUÖ{×Z5מÎ>óÐóÎD’Î@Bì0$ æI|EÔ�r½*¨ Þ�¾*(ê½ x¯À« á‚÷ePD„È$‚ ™ÈD’NHz>§Ï°Çš«Öý£öÞI èNÒë¯|ÒUgWÕÞµÖ³~Ïó|5|Ûgº9Íx}œ¯íùW·¯fùð2"8…ÃwÞýTHšÒdÊB ÍÚ?@ Ÿ;Žz ö1àÆ?Œù¢"é“¶÷FkèÆ&ð€ ÍØQ Î÷!éBÖ;[_zFÃ&“Æ$“r’ƒýƒ,F‹„:¤Aãg6ôòݤKÄEL¦3Ò¬¬º_][%MRâ<æ†ànInA¸‚S;8oþ<6XŽ9£­Ÿ8.I³ Ó°([ÉS’4DZYžc+Åìì y~-ý~Ï,U§9õz,+ù2RÉQ{ƒa˜Ø–ºl{LÓ)MœÁ†1‰Úí.Hƒ~Ð#ŠúŒ5´ÖÚt:íA%&Zܦ¥ˆc°mÈé Bhq·ÛvQ@žge…c20hR)MòŠ\—¢h^rb‡}Ά!±m“n·C‘çTª<Ï%ÓVQ>ÇqÈóœ~/$ÏKÇî,H’¸4ËJbú½.¾çŽ*¦@—-鎇0 Â0 ŠRÐ ÃUæÐèªäV¢Å¨5¤(òÁß(7êq`Yö`’-g(Ó4Y[[#ÏsÇ!IŠân&ì°íuØ&žçÓ´Bƒ.µR”È�Û¶‰¢hÔ¢*D)<ǃö!Ä  Š"ÃgÇ2]#²¬<϶m”di)î¦iŠçyAP™æ½„€¼(F¬¡^ DŒmÙhQÞ{D&!¤vÐý.µF“4Íʤ½~J¥>MÐ ¸ó‡¸åÖÛùÌç¾Îrk?ý^Ÿ~¿’ã|ïº%žó¬K¸ô­¯ä¥/}.i# A‰ð+.JAFmÄYŒã:dE>rû®×Çÿ-ÊjÄ Gž9|ï{ßc||¥$óósÔu²8椓vàºpæÎsX]ÞÍw¾}=ÏyÎÙ}ëíÔÇfyýfKïàï?ôeq~éå/Á0C¢´4m £Be4êÓe •î“Å1Ò‘˜Á*¶=m¹DaÛv± “ ˆ1 ÇöIÒŒ~/Á«TiŒUÈÂÃtФdyŽI–k¤²q<50z ÉÒ˜©é ´”,¯.395Åu×]Íu×ôù…_8‰þZk®¾Jm¯;A” *õ:§î<—ÆÔgÉ¥W&KDÕN‡ÉÄeyM3y4Æj¤½‘äQ‚)’㛤#s(¡ËyÉD“fÊŸ K¯P©Mò›¯ÿ¯<ã…Ïá_>÷yþöï>ÅÿóŠßå”S¶óªW¾—<ïY„Ýt‘’tz$­.›''©T(r„̈ X Br!qk>ÚÌH’Œjµ‚6s·×HD†7=Ží»¥èõÚô‚˜™ÊB ×'ˆ„4°=¡L”2±”‰a$LO“ç–0ʤ0èw»Ü|Ýõœ°};¾ka+ƒñF)BÕë ò‚ZãÑ“‘¯T+ÌÏÏÇñ4…T*fffغm+­v‹«¯¹š¯}ík„aH1@·Ôëu6oÞÌ ^ð.¸àN>ùdjµûöíÍ¡$Ü—yÔwÏ“ïû¬[·Ž¥¥%:ÈwÜÁêÊ*«««DQ„RŠÙÙYvœ¸ƒu ë8éēصkóóó÷ªà0M“3Ï<)%ßøÆ7¸ò»WòÉO~²LÞ&³ó³œ~Úéœ{~úéÌÏÏØÚǦ¬UÊ¡Gꫵf5ZåÚ•k¸mõ6¢4âÛ^ȦÚ&ÔŠyú¸7íÃø®&ôz·ÒíÞ‚Ö•Ê6êõS1 ÿøÃyŒ)U§Êú±õŒycGåªT™Õ³‘fO¸‡VÒ:þÅCë{´Ûm�ºÝ.7ÝtwÝuרÃä‡GEüüÏÿ<[¶lannŽÙÙY¶mÛÆwÜÁM7ÝÄ7¾ñÕ6@ƒÕj5æææ¸øâ‹9ÿüó9ûì³G{V×ß×gÝ38’¤ÀSN‡ ÈóœÕÕU®¼òJn¼ñÆÑ>æž#Ïs|ßçùÏ>;wîÄuÝÑ¿zꩼìe/ãK_úW\q—_~9„u°�� �IDATA`lÙ²…‹.ºˆ;w²yóæc÷S­v‹ àç>u³>JzJ$*<¾ñx¶Ø[ØÙÞÉ«WpUï*–×–ù­éßÂã¾…U…¢¢+ôéÓ4ޝäãHÓ€vg/½¨˜ØÞÃiê¨ïÖY+ª?ÛõXI*µ •f…®Ñå0‡Yf™&M,~úæ­I‘pK÷®]¹–ÛÖnã@x€5½Æjg•N»Sv{ëS˜Ì{óœ5u¬¿€ÓgO§nÔ±±5<e£( ¢(BjIQ$„QÓµAÚVŒïûAˆ,ÛBÚþ@@S˜f¹š¦‰v Žû¤I€’,ÏR`Y&y‘Óï÷Ñ…A^@’DTª Ö¯_ N"Ò,¡Zóé]Æ'Æ™ž1Ù½{n e¤h˜¥1YšQ¯Õ‰ÒC•ŽèY–#¥ÂPE¡É²¼dIŠ¢äŠËT9äEF–§¡È³ Ë3@•©¡^X2‘BÜ-ò‚4Í0Œ‚(Ši6Ç©ø5öîÝÇîÛwsÒŽ-x^É)Š”~ЧÕjÓT6Ê¡5B),ËF锪W¥ÓéÐívq’+ªµ&ËŠ{-â†a`šæÈù:˲S°ÝncÛ6ŽãÐëõ°-×µI’dÔÊ­”­%'Ó0,LÓAë¸ä÷ÄÑ€Í*GÁÈP˜òü„PÄqL’„ØŽU2M¬É¡ åP„.Ȳœ<ϰm‡<K Ã�oÀÆíu»#N’Rjäú­Ó„Bß0K~ê õ¾ tr—R •Jk‰k» ºý–]a¬1E·óo]ÅG.û _ùòíÑã„'¸èégÛ¶mø~•íÛN@HÅ?ðQ^÷bñ`›·¼ý¿bÚ>ýn i¤8–m˜­1”¢ßëÓé¶1M Ã0èõ{dyÖRaB–GdY¡C‡8ù”Ÿcqi‰4Í™™#Iâ8¦Û…¹¹žzáù|üãŸäÉO>›Z­B.3·Ðàmoÿ-Þü¦wòçúO:Xð†ßžoÒiµHR0-›BgøÇ™ ÕZ&M åÐëtq|Ç)"O°ˆ‡$N©Të„qJ·`»’Z¥J˜é‰NB>¨”Ž¢Œ HÃß«"íç¡…$)’$Ç´ª˜ŽÉûÞ÷QÆ'R^}É«ùÆWoå½ï~?ÿþÕÿ¤9Ù§Vg­Q©8ĹäšïÝÄÿú›òë¿v ÍÉÍHÕdzf7ß¶„*N;aß$ÉCr©!Ð"!Ê"â(#Kc,ß/…àÄ@÷,”.°LµYZ9ÈB½ÆïüÆ/ñü‹Îç³ÿò%>ýÉËyÓkßÉeïÿ8Ï}î3¸äWg|‡ô×™ôg’€~¦Yë%^ë’$š“X1TQV€×µ@JƒLj i§íØÔý™™‡1…Ö¸ž‹–Ó¶P†Aœ&e«":+HóSiâ &³3tš#¤¢½¼ŠÈa¼V§ÈSt’aûU² Ïj¿‡ Ûr5€RŠ6òìg?›ÃK‡q‡‰‰‰Ü0 ]‚wíÚÅüÜ<kkkt»Ý‘¹“a£vÃÍ›7s '01QŽFƒ;wbYÝn—™™™{Uƺ®Ë–-[xÚӞƆ 8÷Üsï³]Ͷm6nÜÈ“žô$êõ:'žx"SSSH)©Õjœ|òÉÔëuVWWY[[£ÓéÐëõH’Ã0˜œœdvn–©É)æææØ¸qãl4¥”ŒsÚi§áº.ë7¬gÿ¾ýDQ„aLMO±uëVvœ°cÔþø@ LjºzD# "öÜ˵‡¯æ›é7ÑÖùë~¬«ðýÇøŒ¶õcû»“X¦‹­ 8paï Rçxµ±ÌÆÀDóøx,ˆe¤Ðë•m}®ò˜4'©¨ÊQÙ¹¦Ëx¥ôˆ‚ˆì8ò㘦i²cÇž÷¼çqÎ9çŒÖè2Ó4åÔSOel¬ê«Õ*gœq¶m³¸¸H»Ý&‚Ñ>¨Z­–‰Ö­[Ù²e˽º]¤”LOOsÞyçÑh4F4Cüúõë¹ð ٰa7n¼—Ð9Ú sssìÚµ‹©©)\×evvv_ŸsÎ9Ôj5.¸à‚Wý¾DØ¡iÛ6;wîüdÏØØ§œr RJÖ¯_Ï¡C‡èõz(¥gݺu£j¥R9&êBÛ!HÒ8%"ºÛƒÀÀ fÔpüòYù†ÏÞÊ^*FGÝ[Pˆ„„óøËôpÆÝ–3~¢2ެ5qüu#ó^Ü+ö:>~Æ‚ž2ð )1EçìéîaÚœfBMüTçŒ;ºwpýêõ|¿ó}–¢%â<¦jVñµÏœ7G¡ ´§±”EEVX°8qìDN?™Y{öÑ÷=X–MÅ(©°,¿lW̤Q$¶eÓnC‘ç¸N…v°BšfÔëu&'›¬®–màX‚4é‘d U¯I’FH«tµÏ2M:0V2ÌÖ­Q†Éµ×^ËSžü$Ò4¡Ñ¨b9'œ°Ã*H’Cg¸®D“‘ç hMšÆä`†$MÉ’ ³bá8I’‘g) t‘&yžâ86ŽmE%«/Nbj”í½JY,//3æX $RÉ8\)5-«lë½å–[8xð�³3³ÔëuÒ,)S²P›Í&Õj˲Ë6P@È’5D!q\VÏÖj5e i)lй–,Æ¥²’O:ÈÒ–mÛ·ß~;AŒª ­í°išŽÄÒa¬‚,ÍȬ’+Ç1Z t‘ŽË²¢Ä#XN)Æ%)®ë•ÕP¢dÄ_ÐÒH&G 5pKQ» j˜ÉDQ„ëºñOấð—eÙ¨jµ(JZ0€ºëA0Òh4Hò 4¦DkAšjòÂ$Î$i/cr~Yò‘üþÐGùîÕš©IÉÓž~ /zÑ/05åRoqLÃÁ­Ôˆ¢„?|Ç[˜›¯óîÿñ1V;‡xó›ßˆí6ÈÓeò,#’´HA—Ò.BcX¶ïQ«×©ÕjÔÆšLL4hŒÕJSž¨|†Íf](ÚíA¢”Äu]ÆÆl:À›~ïµüý‡.ã Ÿû/zñ38¼tˆ;vïaË–Óøƒÿö{¼î5—rÙ‡?G§Ûáy/¼ˆ³ÏyZ÷iw©ÕL‚‡î$OsŠL³¶ÒeÆ­„iFaä$iHT}Ÿz½J^hò¼¼6¿Z# #ö÷z¸V™TQª¬-ñqœÐív) ¥ÂõêÜrë÷Ù´}+õê:þèþ—}ìJ~é—6qö9Oaÿ]1ý~Ⱦ½ûpªk4&ÊÔU¼J…±F“_ûµ·ò¦7_¦MyÜã‡W™$Ozì;x�¿"ÁȦ&&£FØV…4)ù,a®02( ÏõÐ…¦ÝY" j5,mÓ^Ümä¼ü¥ñô'ŸÃüû·ùëüÞù'ïç;ßø¯þÕ—²}Ë$sséõÛÓ Ë" 2üš‡gyŠM0%2Ž‚" ñ\ŸBç„IAÒê¢Íe¹˜VY¥Æ1Y–‘*ç•a&1ñàÿEÉ�7€À²œQÒcvf†(qm !%­ýû©5›H°QÆ£⯔1RKˆÀó¼+ú¾ÏÎ{gŸu6yžæ{šï™¦‰išX–5ú{Íf“³Ï>›ÓN;¢(¨V«?"¬nß¾7ò´§=m4Ïþð°,‹Í›7³°°À\0š“•RÔj5N<ñD¶mÛ6êîvÜ˼Â4lc…iš?ô «þçææ˜˜˜à¬³Îýv†¦Ãûv;ó¢L1@ÜèÕ95š\çÄ:fßê>®»õ:¾yè[\_¿žSfNaks óAŠ7¢4ÖHŠ„âtG}$ )®7ÊfÈû‹ÄÁ2!ÒÆ¬žˆø’GEAØév»¤iŠeXÔ©ã⥠ŒAµVÃsËê·¡ âp®=>Ž®°:4T,±p÷æîÝß°, ß/+áÇᤓNbëÖ­£õô‡×úáZ8,8¹g|133C³Ùäñü¨ãexm›6mbnnާ<å)˜¦‰çy÷)¬.,,055Å®]»F1ÊÐÔø‰O|"çwÞèº~ܽ ;�ø³lÛqVx­vÚ¶=Âk‚”Ôý:!!kùݹÏÊRKZ,x L9S#¯î¿Ó!'§—÷è}ª²Š/ýGM‹ð1w; *3;ñu²4Ê~øÏ¥A6J9ÇÇÏ2ÙÀ“[¬-¨T±wm/Û¼m4ýæOåÊuN\·|—|vÚfÜg]uÓÎ4µ¼ÆcÔÌ4Á·}¢+\Lib+ûQù=–i‘&9…Rƒ*IÓ$+Êöm¥K‹°´´Ä¦uQÏ4pm‡ññqºÝ6q# ‰eY(iPsktûšL—NØšr£k(‹^`Y.šœ¹¹¾ûݫȲ¥ IBŒm'lá–[oǶ úA˶ *•’ŸÚiuð«u´.™Ä`´,“<n`%®ë¡¤M ²¼_âÐ@éÔmÛŽcÓë•j‹‹‡˜ǰÕ@˜T*>–å”â³2iµZ,."Bff§Ù²e#i–9ß#IbŠBÓh4Gbhš¦H¡Ð:'M¤,×a†SŠ»]"…¸[Ä¢­¶].bÀc(˜nݺuX¸®K’¤¤i2Çâ8-Úƒ¼ÈI“*ÝÝ ˆ£­ïÞô†BI—UÂRŠ(>M@Ý«Š+Ër9Z›#^j)ÙA@s¼I1hñ?xð •JeÄc½§(’¦)¶í¡Œ´d¸’—ŸmHâ<!KË*bÓ*«bs †áÑhŒ‘jøÄÿùG>û™¯ò•¯Þɶ­Ó¼ù-§ò¬‹ŸÇ¦M[QJ`ª™î’å9ao…µÖalÛC/嫨°n¯ûÍ?ãàÁ?äÿøw˜žr û«diN˜†mYåæ?‰pÒÃ0££ßÅõl”*ƒ¹ÎZÙ“f›6laÓ¦M¤Y  CâU\LK31=Ë_ô Þõ®rÁç#¥ÁÔt­ú<a×i¼ë//åíoùûã[ß¹—½ü©¼ìeÏÆ¯ú´:‰£kk+P¸VƒzuÇ®#ìˆ4"'-bza†ë—`ò¬Ðå»C§×%KBDÃÅó\”¤i\>ÿ¤ #ráú†mÐïöYí„4'6ÐiÅüõ»ÿœ÷¾ï³œwvƒ½àbÖVogey?.Ô6ãU\ÓÀs5yÜ&‹ZlÞ8ÃßÿW¼ø…/çßþ¦¦+¼àÏdû ë8é¤ÍœxÂÉd¢O”v1mWñXYë Di€–¹ž%±”$(ºtò.šUÍ0ôã6¾ïb6ÂÈ0MhÊŒ—¾bO»x‡¶yÿû>Æ+^ñ6.~ÎÙ¼è%Oä´3O/9¨Éè”fÅ!±b´†¾Œ±‡0í±{ïíô‚'Ÿtr9Ÿ9.Õ5‚^›Š×`z¼JÄ„a�º@ý~Ã4P†‰mZeåwcWlšcM¢()9ÆZÓ‹Ö¯[ —‚$Oñ+U<YæiéN‡¤×ëÑ{”ƒÊ‘Ë “²LPÜW…Érè¼á;¬ ?’ën�ìß8Òçóã®ù#ÈP&é:íµ¢†ã9)îõïËz™/üàó\uçUÄABeÊçâMsródN¬žDͪ=(±D èä«ìIv3“OºÚ6)ëXÞvÛžOwñ;„‡¾M‘ˆ…*ÔÖƒylþF5o%}8Ÿg¡)ŠÒÝWiuÔE%ËBˆ"/èw‚v€íÛ.üñq4×wÇq¢f˜`üIL‡ HÃ0~DÈ<ÒØãŽЬ÷%È>Öz‰¤!tT‡ýb?}¿.ä†(ÉG‚IÍóœn¿K7îR¯Ö©ÚÕc¿ç§¶v €Fc’H…xØçF d@ Üü¸.Ǖ՟ýœë¹'l:ÃáaZ­ý±>Úûé°nWãU¾°÷ ܸt#y”ó„©'pÊô)Œ;ã™AÞËizMšÕ&¸%ÖÀxÔFÅX¦Îrâ8Á÷}zQË´ƒL`µ*Y[ka¦EwµKÍ7˜žžæ†›‘g«Ë-¦'ëH)hµZDq€í;˜¦$Is’$AÚ&¦eRÒ08åÔùüç?O4›6aÐÃq,êµív‹$1­ƒ¹NAhÛFW… %AP¶ÇgiF’:²¬þIÒ²] „ÀrŠ"GŠ^»…e;Œ7K3Ó`eu•‰©Ir£M^h”2ɲœ0 (Š‚Ã‡Ç1F­[7Š èEõz8IIÓÓ²É M¯ày®ç‘¦ ¦iPˆŒ")[a†›òa+~éf©‚`À 41ŒÒÍÚó¼‘+ößãyÞ ª4T¼‚i”‚qÉVÍB)„Q­Y–¢5Qг®ë¢‹‚4M­ª¶íà8&QÑétB•£ª;Ã0h4¸®IÆ%+¨Tª†IQ”FXa’ç9+++X–5x~ ’$ EQ”™d­!Õä¹Àw]¤¡ˆâ]h”QV"‹Lc6QXМÚNky‰·¾õR>ÿ…ëpxÞÅK^ò<ææ ƒ.½Þt‘Ѩ™E@'(âjÛH!I“>Yqúé§ó©Oþ¯xÅyËßÁ>ð‡Xv…8èã{U’¸d8š¦‰TIã8¦e²¸¸ÈâÒAüZF­:†.Š2ØÒšn·G«µÊž=·ós»NG“°ý„ͤy‡ÅƒwòÒ—¾œÿïÏðoz7ö®×3>>I7èÐ öpÁ…'ðþ ÿ?{ç_sÕ5·qé¥áæ›®â—_þbæç'ÉSh4|‚^@m¬IG^ÞSsÑDiHVÄTíË+‹Ê`ný‚0äÖëoF’‚¦2°,Ÿ4±m“^/DkÂ.ãQÐïu0L§¨oÛŸrÙeWð¤'ÎðÊW½˜']p·Ýz=S !¸õ–ëØvÂ)øþ5[“¤!y°ŒŒV‘I…w¼í·¹ê»7pÕ57òåÏ}ŠOÿCNÖ¯ño{§žv2~Å Lº5Ÿ¢ÝÃój¬,­qçîÝlÚ´Žé©1òh™µÎA”4È¢ ×ppm—¾(ùÎ~ÕC9º×!RЉê89ûÁß矿ðe.ýãÿÉÇ>s%/ù¥3yÓïÿ.¦ªÑð“ã5²¨O’§(C!ó Û”lݼ0 1„ÆR‚8‰±¤ >9Iµ2FD„ýÊ,¢(ˆ‚Žç‚ÖAÛRÜqë]4Ç›,¯Æq<‚8a­Ý¢Ð)9ÕJ %ô£•ŠG’&aÊ÷o¼‘ùù¹ãÑÃññÈ’ä„d™ whÇm<ÓcÚ Ñ Q±7ÚÃMÝ›ùöâ·9œfãäFΘÙÉÎu;™±g¨‹zijx„ÑaZ¤¬%«E×vÕáÇÇCÙiNáÍ=¹Äö´WЫ7 ¬"EŽme ’@Ç $ …q¼âéaÛèÄ2Â1|ÓðˆŽŸÂ–~ôÎÇ+,‹Ìz³I³›ããøøYί&&¦6IHˆ‡%Uè‚nÜ¥wØRÛBŪõ9æh ×F¦QBƒqì •)+¥ˆ70½ãÂêQ¦2iVš,Æ‹ŒÒM»{b¹Ð­´ÅmÛøÖâ·P™â´æiœ;q.[j[ðl4Né=<ÏÃqÇÔOÁHÓ„´È1¥BHEQ0ÈFgÔ|……õŒ™,^.ùnd8®KœÄƒL(Ã@낵V ËøFÛvæU)Y^öþEqH@©’Ó™e9qÅQTfÓ4cÆõlß¾4MŸ¨á8­:-ÛçmÛ¦Ð&q\:-[fYýE!‚ˆ¢€$)Ê–t‘“¤•ˆ·¶¶†í¸1Jà¬8Ÿ(Ìâø^-¥iZ:&I‚mÛÔj5LÓ$NbŠ¢|iš„Lð¨50–*ȋҭßƶ] à Ë2â(1ƒ”£ìÜu:ÌD [a†™Ø{вe+ʰU¾ (R²¬¬º…’=˜¥9¶ma(cÀŒ-9³RÞÝRcYÖ¨BU)5ã8Fߣ Uk] ×Ò$ÍÒ‘»åð\)JJ¢°:ÌÆ–U°²¼ï¸ä¼³ÂQœ ‹œ8 IóÓ6@K”¡ˆãœ4˰évbêÍ®¹êz.}ËÛÙ}û~žýì3¹ä’W²mûF„,Ðynw‘,‹0 Iš:R`™&B%'VIŠ<gmy•™ÙõLNLðîÿþû\òëïämo{¯ý¯Sñ=º½.†ÔT|›N·ƒí*z½q–ÆqY…«Êç—ç9Ý^iÐ¥”Äóæ¸kOˆSµ©†ŠmÛÇù§ý"Q0?=ÉÞÿ7¼æÕ¯âÿÿgyÉ/<ƒééIZÝ¢´ÇÖ>üðÛøÈeŸä3Ÿú<_úâ |þ_oà5—¼ˆ']ðsœxÒV²ñ>–•‘å’$$ˆc/BÉ2a:6~Ågm­ÅêÚ2ív—vwJµŽi@¸®CÄ$qŠeÛX¦MµRÇq|:6•j•‰éY®þμö5oãæï·y寜ËÏ?õB&¦]úUÎ>û .»æÓ˜Z+‡˜;pm™Îþ,.­w×h/¸Èå_ø*õZ“sÏØÂ%¿ò"–yÃÞËkç£L6á¯Þs :9|è ;ùd’µkËtSÄ)ä"Lß®£ƒ1g[xôºE‘`%è^ŸX'ä6++mnºæ?qëëøàÿzÿþ­ïòçïþ ŸüØ/òºW]į¿ìb¾ëT\RR­Öp\Ó40‹œ<Ѝ6fÍÅ·=j(’8CôC<Û#wÌ’,%v½t¯ÍuAõi¯fllŒ¹™qâ$¥µÖblbËvˆ“>qš‘êœ(K‘Z“f)*7ð}'.¨W«ê‘`1iš‘óîññnrÄÝ™aGÃ1èI“ÍÕ-8Ø;ˆQ4héˆÃña¶påâ•|oå:<Ãg×üœÖ|ÛÛi:Má<誸vÒæÎÞdºàäæéÌÚ Ç$‡¸*,`§v:r" Xú6½ÅÿÀ§À•Ô׃a#*<,LŒG1ÂÑÝ<¬°BGv¨;5&)”0Žö¯…¢«zE}ˆ =ñ¨2ÃxDþVlCÙññð¯ùÃõþh®ùrP¤£…&ÓY‰Ä{ï]Z¤ô‹>‘ލ‰žðƒ(�ŠšC$Ùé�.Tüc&qùÃ#'£­[XLP5Ç…Õ£ò>;°éF]ö±–.‹vÎ!»»»¹fíºY—Sk§ò„™'0¥¦Ð±FÏõ0•‰2ÔcËcÊ"+Jó'e Ç÷+´{!½^!%R)îÚ³—¢(ȲRKÓŒ‰ñqú½.K‹KLMM#EJžEDýe*Š¢ ŽŠ74Ï5¹)s,ÛA)ÉøÄF0\¡9Ö0M ÖÖÚ¬,¯0??Ešv1Œ²)I3<Çý4Jî¨ÖY–cÛ¥2®Œ‚<(Dަ`ié0žç£d¹Ù–M?èã9Š ± ×õVVIÒd$ª[I²,cbr| ÖçôƒZk¤,QC ºïU"-ùS–M–•­ÿRŒŸÔH¨-…ŲZÕ0a£u1úì4ÍG¢Y–ð ÷.†‚…”Ã( ¨¤*E%Ô4K*Ó4ÉuJ…¸¾F¡¤W•ßq† DZ©TªDQY¥êù>Bh¤#QQ…†*@%—6Ʋ-j• ½n{äÖ=üü¡p<¼,Ëèv»(»s’<A%ƒP£p×-EÕ‰æ×Ýp+¯zùﱸò—ÿýÕ<í©Ò¨{´×–°m2 |O‚°Iã8¶‡aØäZ“¤ "MÉ2M£á³ïí$IÁ®óÏæC÷»<÷ï`ïÞï{ï[™Ÿ%Ï#.îÃõJ|D«ÓF ÉÚê7m¡R©¡ AÅ$IŠeYT*U ­©Ô<ÚÏÒ=HQca~œ=wÁ7^G½RcóÖþäÿ/úŽ?Â02^öÊ—bY6­Î!”Ñëîá7ÿË 8ãq;xß{>Á×ÿ}7ö'Ÿäóÿ|O|òÙ<ë¹?Çig,Põš1ì ±ñ}ßs¡DqŠçÕ@+¤2i4Æp=Ç6‰â©<ªµ*‹‹KˆÔ I4aX ‚©™,-íç=oy'ÿصÔ+ïyÏ«hV'ÑELžhn¿å�·Ýx Ÿÿì¿ ´fmy•Ûo½qÃÁ1,VfǦíÌnØDÚê1Õ¨±yËff7mE%9Ó;¶ó©/~€ëwï¦ÓYeýY§2Sw1UÉJ&—e«©© ìôÛd2Cµ"Ú n…´:=\³ Ë5qe=TÕ 1]g|¶A¥Z0½0 yR˜V“sv=ç<ë…|铟áýïýßT‚\ò믢·x'–)1ₘV¯K·Û£„„ø• X6ºÈ‘H"×EÖªÔk5”ëB’9‚"Í) ‰§žÔ'Æéö;˜"Å–)¾_!™h&«Ë‹ô{|ÏGIHÒ˜$˩תlߺ DñˆY\†É—C‡qõÕWÓëõ”¸:\Œôœ^¼Ìy?ÉuÉg<”k:ÒãK&²Éüü<6l`nnî~]—ÆPBQ3ktí.w? #Útt‡==ܰrß?|3‡;‡13“ó;yÂüùl«oÃU?yKd”G¬D+(Ó`«w Ù8q?œ2–¿gZ%-¢Õï-_RáT«&਎h1RD¸XÈŸ+îcEX-+VcÃ¥jT‘Bå_¤ bT¨[u´ÒôèÝoKòññ3Yòœv»ÍÍ7ßÌm·ÝÞÕ…Î�� �IDATöˆ^ÃŽxäHÎy0Çk­q]—………§þáÀý$ÃR §Aì ÷1ãÌ0fþd¼ª X VÑ™¦J ë1ù ib{ dýU¢d •XÚ;fQæ!!P 9V’«µèLà*—õþzü¶O»ß¦•¶ –Dã°òu5[å»ËßåÛ‹ßf¾>Ï MÝÄ*Fä¢ôû±û1ù=YVeq¥Jƒ¥8OpÜ:¥i•¡‡¯bÛ6qÞ¥ÛëÒ¬O²mûvâ‚^¿Ïü¬IkmÛV(e"… @ŒÄÁÒøIaI·Û£@c6–erhñ 'l[àºë¾‡2«lÞt"I’²²Òètp=G™QºÎ»®çTÈŠ¨42%¦©£R*Š’4G Ó²“„ƒJÅ#ˆ#&BYIB”äT*.kíi®±L›¼ÈÈó)åh‘ó}— ‚¦Y lE‘SHP–…a; ÒLƒT„qŒãšH% ú}LS¢L‰k¹qº¬r5ŠþÐtjÈH-…Î|Ä?5Ms”Vzaæ¥�¬ˆâ�ÃP¦DHC‰½ , 'ÏKŽfV¤Héâ˜B0ª„Ís]¢Šœ<ϬÔÓ4q],‹Gî–J)’$WEQ„iÚž®"Ž"¢(eV³,1g‡æZC ÕjQˆ)E‘cš&Z@E ËJà4‰˜šÛ—/ÿ2¯yõ¥Ôëÿó¯_ÃÅÏzËËK´Úm¦¦Ç‰‚6ý CžÆØ¶©96¡²ÈȲ-4:O°©#ÖÍÍÐZÙÏùìâ³ÿüç<ýé¿Ç_þÅßòŽ?zyáûU²,Á0L*Õ E!X^k•ÏòYYYEJ“"·Êß`IQñ}ÖZKìÙw;µÊ ãã3™äÛߺ’g>ã©Üyç÷9óìm¼ýßÌ/¿ì-\Óüù_üît…=ûne˦yì¿“Û7rÙGþ†ÿígyï_}„›¾×ß¼›~èœñø Ï}þElÛ¾…óÏz2J7I’g¶M§½ŠReJŠÜÄ0}„p™ŸBêre8Ô|ÚÂ0 ¦'\vïÞÍ_¾ëí|ìc·`)gž9ÁSž² IÀ?¸Û·“„m¶m›å®;ùíßøm¾ñ•7b‹[×ÊÄô<¢Reßþ€³ÏÞ@}n ?¸ó 6¬Û̉;NAHƒ OHbÍ¡[ï`JÔX¾ùF¾òÝ›˜q^‘Ñ=¼BÍ­b(‹~sÛ]·²Ün—LµVÎXͤî×»=tVd9•zÇ÷Ø¿|˜Tkæ6Œ“†ê5ÍÌÂz6n:…êØ,ÂòizuþËKŸÉéMÉ¥o½ŒóNúO|Æ…0nCÅ…8¡L ‰6LCDÑjwX[iÓj·“Ûñq\e–ïäX£ÁØÄ8Å b»éyÔ\-K29?I¦X¦IcÝkÝ;÷ Õî’T|Æ›“ØŽ‹e˜t[-,Ó¤ßïRy„hDEQÐëõ¸ùæ›ùà?Ⱦ}ûF† G"çÝrþáãøœ#9oxMGÂñ2¡ä3Ê5=˜{/è‘óÏ?Ÿ /¼Z­†mÛÇ\–X 0¥E¨CníÝÊ5û¯æŠ½W°7ØÃ¹cçqñ³Ø1³ƒzµþCí5å³ËuŽ©,|éQÕÕÇìæì§·›® ›©ð, ³Açð׉‰ñÙõ˜êd„š:Ê«Š.²èbÊJ¹öÇ<<O¶Èï6Ñ“ÆQß>K¡hZã¬óÖá›>™N3uâÐZ“e‡æòË/çSŸúÔ­ûÇâþPâ‘¢¸[Üÿq¥öø,˘œœd×®]\tÑE4û4ÁüYŒŠYa]uwõïâûíï“æ)^ÍÃ’GžÌÒ”¦Ù‡z‡8Ô9„_ø¬·×?¶×miA}‘ étöàba28&'B!áøü{tbl!ðmŸSÖÂ5k¸véZZa‹ÕbOyØ<4¡SS&.w»¹jñ*v/ïæù[ŸÏl<ËÒ¡%f«Ž=hߌG°êy.y¦ÑYiTèÛtÉrÉÁý ¥4ÝnFGd”n…J)6¬_OšB§ÓGë‚~?Às¤YŽTÖÝòB¢õ BQ¨QËb¥â33;C–%墀Äs+¸ŽVVV.õ&E¡ÑRc(«¬\S´ä™&/bò<ö%PrE•mc$9 ÐÚ VmâºZƒë†‰iZAˆm»æ¬ÜþÉ’ÍU²Hï^D;EQ x¨¥€Øï÷É3‰aX˜¦A烶~kàæhyžb˜&B ‚°4ðVei6h«—Æ©M’$ôû=|¿Šº‡{ô°Ýüžn×£ BHº½.Žcå3/´T¡Æ˜¦¢‰´ª…ó¼d‘IYš„¡( M'e—Õ̦i¢‹‚(ŠFReÅ®Ä÷|²,1[ËÖA‘¥xž72©BeµZ ˆ¢ˆ,ËÕz½–]вRª²-4yI–1Ö\Ç¿åëüÆk.ejfš7¾ñçyÎsžÊÚÚ2ͦ…ÖíÕC$q„e–U®CqZI-LÐCH¼‘aU\™›Ÿ ‹#K“´–9gçyüñýozÓÿǺ¹&¯}Í/£LIkíý~Çq¦E˜&¤i†çWiµ[ØŽƒY¯bYišP=¦¦&h6ëdyD¯ß¥V¤âzÜùƒ½¬¶06!ùÖw¾ÀãÏz Ÿ¿ü#üîëßÊ›~ÿ/xý^Ãds;7^{+'lßNk¢p…_~Å39ç ããÿGþþ£ÿ†ëW¹é&Å—¿ø ¶ls8iÛgÙyú©œóøSÙºi=žãGmÆ'ǦÂvsoŒ¢(¨Õ¦ :]ŠÜ Õ Y>ÜcÿþEöí=ÈW¿úM¾ò•ð}Ÿ3NŸå‚ Ǻ 4’^g•'?ùLªnŠ«¸öÚo¡sŸ™…&i yd#Š*ûn9LÚ¿‹ÿøòÕLNNrøàGùô§?G³YãSŸ¾œ«¯ÝÍê2œ}ö›·lçÊ+nBÆ)çlG Mº´DºÖAfaH„kQŸª³ù¤“™šZÀýî Q•NkË„æD“ƒ‹Ë\nsÒŽÍ4§¸ýŽ»˜˜ªQµaÿuûøÁÞNÍÕ4ÇÇèöSN:s':×üÊ Næ£þWZíË+·±na×õ0-›™™9Æ&§0ü ˜•éƶlÄyÙ¢§ôƒ.­åe‚~—$êÓëuPF öÛ>:‡†o g&pH[ ³‚;qNŸV§‹!$ÛÅ&¹ˆP ŠGP[Ýp>X¿~=]t«««G\¹QAç9Žã`Ûöýž;Ĥ ç”áçç¢:/Š"¢(²JcÆû;~xMQ†!Z—x•J¥r¯‚ûº‡áœ9tšÞß5Åq\²|¦tÃM™eYlÚ´‰ÉÉÉ£¶Áúq£nÕYï¯ãšÕkøâ]_dµ·Š§|ž³ñ¹œÞ<ƒ“ê'1î?$Ó™´HÙÛÛËJ¶‚ïúLÚ“˜Ò<&«Ëk£õ‘Á—¢¾YôÑz•¨{í;þ&ƹ!⦸È!èA"üpš 37²¨ªs{‡X W¨ÚUæjsòè›Q²,hçËJ÷‘éôø—u‡Rб±1vîÜyÄ b`ö™$åÞc¸^>К<4é ÃÛ¶>âÃ0,=,ËÂó¼Ñ~æþÖätàÙ¡µ¦R©Ü¯€;üŒ,Ëèõz£âß÷±,ë>¯m‡ »‡×Tvbêû}V¾ï³eËÆÆÆPêèµÛÚ¦©šd"ƒVû«ÜÈl«lÃWÌ`bzI¥þ‹½E0áM0áO”†W]• „BKI!R´ÎŽÑ8¡� èQ>Etñ1´Ö¤IÊòâ2YXvw¯¦«ìïîg¬6†m<4a5+2v·wó}ß!Žb¶Ú[OÇ™´'±¦,ªµêSù˜Vƒ0 M2\³lŽÂ>$¥0Y­¸ÌÎÎ1¿0ξ=+,.-ãÕršã¥èáz&ZC¯“’¤yQ066F¨ÊªË(‰ÈÒÓ(7zq’¦!e™HU:z®®¶é÷ûlظ Óªãx33óÜzËxæÅÐh4I“ˆ0ì”›$-p\“$IJÃ&ÓFˆ ôP*Æ0-Ì�© ëÚRáúW]uA?äŒ3ÎÀ¶,Ë&Žcjµ*Ýn‡4‰A”â¡mYäƒ §eis‘çÄq\"”.ä@�.‰¡˜WíV MF–gxÒA AÆäY€iÛ8Žƒ’R©rÊ,4i–‘¤J™X¦MEA„ë: !OËÅ·  È ò,£Ðš,°Wè"§(J(Ã`mmjµŽ(ô€» ½^e–Ù%©¶eae–±d±*òBcšåsŒ“Ë*+¡’$¡Ýn£”9rý'q—ÏK—"w’$$IR$ƒÅ¿^¯ÐÃ@̱|Ï%Îzýþ€ÅëQ©7ñ |ýß¾Î%¿úf.¼ð\þàÒסÌÃì?°ßóét i`H :Ç6}´ÖôƒJ( × M Â0Æ04†]$¤ªD®›†Dç  èöÖpÅ$¿ñ›¯eß¾¼å>EÅüÎレJeŒNo•jÍ/ñ¦" {$qŽ©ÆÇ§Ècßõ±,›BkªŸÆX Ë,+ˆæ7pÖÎÍ|ó›·³tx?³³.~Mqhñ.ÆÆ¶óá˜/üÛ—x×»Þ_5ùµW¼ [M¦ËôÂ*õmÛ=Þùg¯ã¢gœÉÔô6ÚmÁÍ7ïC_ú×OðÏŸú —ýÝ? „ɺuó4š>§œ2Em¬ÁÔôB)n»ãJv{´Z=¾{Å"KK«DA€iÀÔd_xñ3¸à‚Ó™™Å¯8ŒO f¦µ%êîQ/ææ®çÛ_ÿ:;¶?ž~é£H­ÙÇþê/>@ÔëS÷«¬¬t™_Gk-æœs.`aý;N<‘ÃË-Þúïá_ÿmOªMÛp¹æªCtã„§Ÿ9ÉäÂ8¡HÙ81ÇüÂzêÓ“ÔfšÜ~èî8pˆõ3ÛˆE7NØtÖ&›.µ†¾1'Ú£Ùù„³Ø´}'­¼œ­ ³LU\¦7a†Š MkùysÛ•WP[˜çÉçîâäÓÎà†›¯ç™Oz"ªá¡Ãå‹´îÚOq•ƒ‹Kì¹kI±aýz6mÛAmz£fcZ.cø7‚e’D­Ú²Èz=òv›åµez+}Ì}w‘¦šÙM[éôB”ícÄ)“•*––h)ñL“"ͱT‰y$±j¤”T*¶oßÎøø8Y–±°šç9­V‹4M©V«T*•{UtÜׯ§ÕjÑï÷BP­V©×ë?VÄìv»t»]|ß§Z­þXaµÛíÒn·GbæøøøHȼçyÃ{h·Ût:�*• õzý7qRJz½ÝnÓ4i4x?|egÁ±é*ì> Þ:®\¼’k^CE58gâ<^ºí™¯Ì=dƒŠ"/“ˆ»ºw˘ucë™t&I›²¡ÞÄÔ6òÿ²÷žq–]å™ï­÷ɧrWWç¤n©»•AY‰h‚‰†kÏ8`lãÁö…±ñ`<Ó8‡{ìkc{p�’…Œ„„$$$$$”¥nuªîª®xòÎ{­ù°«‹,¡‹@-¨·~ú îÓ§NÜk½ÏzÞÿ“%Å`zð|bQ N1´CöÑz@çÄ­hj˜þ¬ò„á>'ÏIç9yØCG}̱»ÂÚhâ³ÐBkÅÂ`¥`‘Éú:¥ÆiØ-¥ — Ëi—¹hfMX}Nõ ¢æòË/çœsÎù–9Y–±¼¼L†�O»†ŸZsƒ  ÝnS*•¨ÕjO+¬v»]:yžãû>µZ Ïó¾éþBJIE«ëþÐÐÐjÎÄS‰½KKK«è¶f³‰ïûßTX=µ¯HÓ×u©Õj”J¥oú˜¾òß:Žóœa� àW¨`®€å‡8¢fÕhZM,aaH£ø{ŒUÑ-É’<A ÅR°Ä|ož ¨ºUªåêj¾Ç÷{I$¦61òÒ°À¡F‡„š•wPY‹²Ñ@˜5k‡˜ÏU¥YÊòò2hhT,'Ëíe“»‰¦Ùü¶î;V1.?Ê='î¡I“½Õ½”‚µáͱæ74™|_ «J¸žÖ]Â(Ç/7TP2¡Ù40ÌÑú0‹3 Aʆ-c ™Ñ'&•†ÅñéJy1žÐï÷éwûS.û”´@icÙ‚,ÎI³Ñ±méÒ맘¶M–ÄTÊC RjÕ!nºé^–Z-Ƭq²ÔÁ²lËfÐK‰âÂP¸¶dD‘Áòb€ïWй0,Ã$Ga`±8¿„”(û(ƒ“'#¥E½9„i9DqÆ ˆP*¤\.ÆÆ{ÁÊɦé Ðïõ©ÕjT¼*ƒD„!Q¤†FQ0Bã8Æ÷=ÇCG!}ý>åZ^§‹Ê2d¦@”æÔjuT–“å9Ž_&câT“d…Iš­í:$iB¦çÚ¨4e‡”½2¦0‰Óˆ,WH §©c• 7ñ]”Dgƒn¡Ñ®ã M“<Ë ƒÞª#VX.ùJðŒ!%¥MLS"¥I½Þ\—†½‚€jµJ§Ó'É2„!ñJeÒ,!ÎS,S@.“¦i““Óë÷±¤…™Ù™Iµd ‡n?¥ÝK™jLpÛgîåß¿í=¬[7ÂOþÌ«iAÐ7¦Iš›hË)gƒ b±UlЦ¦¦Ší¨ey”<‡<ÏȳÃðÒdx¸ŽRš4ÏÈÒÓ·À8F.ò¾_}³3ÇùÝß¿–ÑñM¼î×`:¹Šèv:T<ŸÅÅEürKVH‚œzÕ£äVé,÷i4j¨|@„*lÙ¼‹02xó[.á—Þó³'Z4›cÔj›èdâIJ¥—^½K¯>—ßûÝ?äç~éyûÛ߯5/zŽS¦Û^"V"+fÓDNp˜ZÃåìjÆ Þtå’ö#„åpÇîç?z-‡Nãów?L?(úË(¯$è  T.&Þ÷ž9Áyîc玭ìÚº•f¥Œ)röìÚN0èR«”™Ÿ>ÆãfÐ^à¡ûîåЙ_‚ýçoæñ{î' ÀКË^¸™|ý+/±<»ÄâÑE6Œoàî{î&×-þå_®åâÎ%XÊáµ/ÞëÏÎøßÿðyfPÚ¶‘ ëù.úIäèvxì8Ý|3Ÿ»ã&dÃä¿ÿÕ#”›÷ðß~ãý\ù×@Ò5€¸Ãï Þ#Lž±cjŠ3_r¹ý_DmïVJ®GžÄ$AÈ‘O0wìÝó%¦?ù)|Ç#í,0]“\pñ PV‰‘ó.D[‚õB³ciÕÐ=v‚ôø4óG!±½”$•ŒLRª4Él»àäúu04ŠYG}C:#í÷H’Ë0éͶ˜{â(þ“Gñ<¡áa†G†q£RÅ0=òp€é<¿F,N‰}ÃÃÃψ¦µfddd•Ïüt ¶RŠÑÑÑÕÀ¿Slì§¢¿òwœºý©æç+ÇÿNŽŒŒ¬ ħ8Üßl4ð+oêðèºå©ê”} ñò­¢¾òõ>]xSšl«mãå_…Í[Ê»¨ÚÍg%õ7 ZÝe‚0Àõ]Ô©P=-å4A‰1ÜLcµ©†êú‚#ý<+ˬR­í3—Í’wî%`šæîwà í{NÍœœžî’²LƒœïïÁ´g»Ñ7ˆtȉô(é©>ï9^cÀp†§ˆBMÒ/ Ëkõ\‹Ý’J¥‚ïûÏhÍ&kø©úÉÉI ÃxZç¦ÖšáááUôÙ©IÀ¯Í­øÊ5ÿÔï/®wO³¾žºýØØØWaÜžj¼ÿ+žO­ûO·çùr¶†|Î]bB\×etd´˜ÎÉ\ì=ˆ•ZÔef­I³Ô¤!«ãý ƒŽt0¯çqs—5ÂöÒvjµ¾í¯}VÊÅÃRUd¿‹T‡‹€H¯yÚ<>•gtû3ÄÑ CÕýXÎH1X«çä{èû>;wî¤×îÑo÷9Ø>Ètgš~½߯×*%¥%ZäHû;‡wráÐ…”Œµ¯ës<ÏÅ÷…Ò±Jôz¡š­-„0ˆ£"&W‚0Ž(—k4†<,Û§?X™¼ #lKá—|lS µ¦?fϯP)•È…¦R¯)ƒAŸFcˆC‡ŽÑív1¥Åɹ9*5‡uSSX¶ƒËtI¸;µÀ² w¨Ö$!ñÊØºë”ÐJdZÉÂI/ ‚`€Ö¾ï`;ë§Ö-Ä(Šè÷†Y¸_¥A–%ä¹^aEaX„Pi0 ­%IœƒN‰Rˆã)5–-V;Ë2VB§Q˜R¯y”|ƒ~¯‡4¬U÷ggäy±ˆg ”S×Ã÷+aDÈu©F ‡©ë"%h „ƒiÙÄq‚t ÷± X¦ƒaØh%R¢rÈób¦ÙlÒiÏ¡ªåbÔV)lËÄpÒ,§°ø+äŠ3WJ‹\ ò\ùå ˆ)Ji‚ O„†‰ëžÅÍÑêTrµQ0^Wx«BX–m˜øÕ:ˆÃmJ»ÂèöÍÜpýmüؾ—ÉuM>ðkoã̳6³¸pÏöW^çÂA›¯°,˵j!šLŒ“& 'NÎR¯ ¯ƒVHi¢µ@J“<WDIN–%„QŒRŽ+FŠij*•1~íCà‹/ÿþðO>ʶ]SœþNffed¨Igi™f£B’eôˆ4Õ¸¶e›ƒ€RÙÆr4ë§&h-·H\Wò’—]Î?þãßrý¿ÞÁúõ›ˆCˆ’„`qE‚• j®ã½ïý%núô¿ñÙ›oâÃý7¼âå/ãšk®¦äyH2ªÄŒŽ”¨øöµrJöˆd@ÔK™˜¨ðó?÷6†F§8pè(žÀtK ¯#Ésâ°ËXÅc|t„<K8~ø —]üÒ°OÐ]fqî÷ßú0>pQ¿O8 WG‘YÈÌy^öÊ—²oß9Ë'Ôw|ñ‹\{à +æK_ºóÑdzab9ÐÍö^pg_s.Íz•>Žªqø‹G¨”G¹íÉl>«ÉWí¡RÑìß¾•`±Ë£ÿ÷<þÀc„aŸs/ÜË™çîbÓWò¶_þG®zËægÞù8gìÞ‚™ôyõ«^ÀЮ³8~÷]\4>„\?ÎÏg|ï–UJW'8S#ÌOšÃž¼š='æxÑ^ÅÁÏÞÅýwÜÃÖ©ÍÜÿ¹G9öä!^þÆ×A’€k²ÔîbºQœPòö^u9A’a·f1U‡¸— ´G ½ÿ!–{–Ú Ìµ–‰lܾ›Ñ [±Ê>#ãã”FÇ ä²kdœíƒ>yéœå¹y>ñ(•r™,OiŒ “‘Sk>ÿBxN Ï´ç;>/‚cæææ˜™™¡Ýna®òŸëõ:ÃÃÃT«U†‡‡¡T*=#ø;ùžjsuÚ~„d´<Æ™ãgDTʱÁQÆu•!§‚>ðÌšÄ$W,…­Ádº[gÈkR5ªÈÓÕ¥(¦SG–r¢ðQD&pô(’矰*„m×)UÏ 6þbÒôV¢å#ôf?GŽ[ß4ÝïêcÒh2‘“ ×‚Œž½ë¦V´Ò­¤Å„Á“þsŽÙ iO²ÞÝÍL4Mž®ñýN›ó[¿[ëå©Ó~¿O§Ó¡ÝnÓjµh·Ûôz½•Àa{#´nÝ:¦¦¦¨V«ß»õkë™LŽ|;ŽÓÓe½—†Ä3<†õ0†i SI"´ÐôÒQ/bžy 4š8‹Á†:uÊ”£4Ý&žãa¬a[V˰ªÈÒzâÁ1ât;ÂâtV5[u€•%èD"¬Êóoòæ{¬ò</ÂÀe™MµMÜ??ÇÚÇL ¾­ûmÅ-´Ðê¶³ÇØRßÂæáÍä:?­ÂrO‹u/ŽS¤�tLÆHÀ²FPº ŸHaày>I’Ñïöñ<Ÿ8-ãAL)pý~Ÿ$Ið]‡,ÍHâ×¶p]3„aHg±M½ÑÀõÒ,¥Ój³nb‚?‰RÇu£ˆ$U”Ë6'ç–8>=ÍÄè$ˆiH²$Á² ¤!0 Ë60Œ"øIHcÛ„aŽÒ¦a¢•B«bÞÅÈ>¤(%1-)3¢8%Ë2LÓ¢T*§A䘖[ ,›<ËÑÂ8F A©äã•Kô—:ÿD„0R`˜ÆªÐ—g…˜E1iš¬²üNzž ¸«+µâ•Â$Mcò¼`²¸o×-B¬¤–† Ë´6p—ÎRÇô±$Nˆ¢­LÃAÊBØÔšîj‚eÙ¨Ò$[áš 4Åýª\‚¯’h%PRÎÓ8F“cÛæ [7\áUqJQ˜ eÐJ¤y!¢JR_·@%€e”|Ã0i-Ÿ¤\©`Ø%aJslO>q˜÷¾ç}LNø|ð¿þ{÷žAkiÛ°VO†Oµ¤i²Êsêv»T²ŒÁ`Àòò2¦¶Pò«Hà ËrÒ$[9h­PZ¡T!& ab%‚ %èŸ`ãÆíüÑþ ¯|Í/òÞ÷ü!ÿëÏßK£6J¯ÓCk‰Òš H³„4Ïh÷L¤‘3·8K©nâø’³Ï=‹'?Ä è€p^Çùç_Îß}øZ~âÇÞÂèð(ž ß_bÐn#eHÐéS) sÅùgsåçðø‘£üÃÇ?Ƨ?ûiöž½Ÿ¿è2vmÜ‚‡ô¦éŸgzÐfÁNqª|Û§<^ǵJ¨´‹ï$ìÙ9Fsxˆ‰ ëIUÎp©„•k:ÇÓnuÐNÌõþ¦§±ar×Ð&°ßh�� �IDAT8–Á+/¿€êŽí”Ü1þí£×Ó]šçª]—b—JÜöù;ñ£„X<~ävvŸw»¶med}“Ûnº‘3ö‡åÕ)íXÏX£LclˆpvŽÛ¯ÿ 7}êsÜ÷…%ʵ&ü°ëÅ/diá %OóÅk?Éô½ÐZZàÊ×¼Ùð™Ü¹…¤µÌÙǵ׿‚¿ûØMüÓuŸâ“7ßÌÂÌ,öMÞñcWØ>Ÿ¸áFîºÿ¸éŽ“¼âÏãâ‹/ÄwsR3�Z³'i»õõ1Ìܧ29ÂËôßqà‹°ÔY$#çºO\ÏÅ/{ ëvlaÞ}ÐYäÉÅy¤_¦´‰ƒ³Q#X QžKž”u.yÙJ*‚4BIA;Hh÷=þ'Ÿ8À¦±ar)1kvœ½—±õë0*.¶cSmVIhà ﴰ€åéÃ,·{~ž¤žn›n·Ë#<ÂwÜÁ¡C‡XZZ¢Õj¦i²qÓF¶mÛÆøØ8{öìaÿþýLLLüÿj²ÖêËŸƒºWg½±ŽÙÎ<íÁIõçP ácxÆ0)L¤ßP´Ñèâz­JkzqÂñN‹Vºˆ’¶W¶2^šÀ3¼Óù…�ÏCºiˆ‰‰Aö¼êÂÄu'¹Šî ¥?éÍ}…4ÜêÖb<ð»t(¢SY;]Ûð?k×M³ϳµÙ¦¶3jLbŠçÖl`0"7±ÑØO‡T%Ïèðk­¾¿Öþ¥¥%}ôQ8À¡C‡8vìsssÄq¼Š¨T*œ{î¹\rÉ%lݺ•jµú}Èò-‰«HÊ¢Œk¸ U†èë>]Õ¥3è°Ü]¦§{„„Â`¬4ÆD}‚º¨ãááà`Jsmõu§ U´4ˆô2q²HI˜úTÜsùÝ*¢ŒÈ—pµÀ•M a­‰ªÏå;²‚!™™™A4“õIb3ÍÒ»ßÖ}Ï÷æy`ú‚^ÀÞÆ^¶o/œö*[Õ³ÖjEXEä¹\ÝŽf©Æ04JkR•!DŽi˜ô{zE€TE8“-h6›Œ ¥–eQ)—‘2G p<•gQD–ËÑÑQÒ<#‰cjÕY.‘B27?GžçÄi‚e[ضÉÐpu“>O:ÌE/¼ӰȲ%ƒ†´1MAœ¤Å)ÉU‘v/„F“)MEŠikay…‘ꑦ¥Rm2nÛ¶UQ©Q€Æs¹VØŽG‡ !Í5$–£‰âÛ6È•@J0 Yügôz}\Gàº>¾i’Ónw©7J«#+ŰH½¢Vø3Y–V+hFžg€Ašæ$IÁ°5L‰aX  Ü4|êõ",WEk!¤»üR„¨€m;`€VŠj¹Aœ$h†é ”&KŽc“e9¹*ÄË<É*'WŠ,OWHÓ202A–%DQ€eU(•}ò¬8ÖJ¢ÉR`Û®ë¬ÅI’‘e9R r¬²É ©Vë´–Z”ÊŠÿø®_¥Õüîïþ8W\~Ç@JM¥Z&M2´ÒredÈ’Äq¼ÒK btd Ï-@ðQ<À6 BcšžÂ0 „´Ñ:C©) L£Ì 7ÏøºŽ{K/?ÿõ»yÓ›~‹?úƒó;ü[ žDVÊôÃ6˜‚±uc - i³ÑÙÄác0,I4‡ëˆƒÐî.Ó¬OÒYîrÍ‹.å¯þüÜ}÷}¼å‡^K’ôñ¬!ºelSàÚÝåY|kϳ9s×föŸñK,,,ò¿÷ûüìŸþ+ëÇa÷î3¸êŠKÙ}Æ.¶L^À|·ƒáy,v;ôƒ€¥0¤½´„m Œ,¥lשgfâH?àáû¾ÄwÜA©ìS)yì9k7W\òz&ÇGÑSSä­%>Î ó×ÜüùH¯Ä[Þð6­_‡í˜œyþytRZ·‰{~ûwHM¸ô¥WÓm-±ÜiSß´s¸Á£ÓìÞ¸•šW¡øInùçqݧ>ËK^ûZÎe•÷|àïùŸþy~ä‡_Å_÷jn¾÷.=øÇFyí¿ŽrÓÇhT˜t †jl¬W¸ýS×1>nòÉëÿ”nÓ[ìñ ?úNÞñÎ2fÁȈɖÝyý‹öñ7ÿãvîýø œ{É^®~õKØzæv&wGÐé` ƒl±GЙfxÓ8û†+ÜsôazÓ3ì¯oàß~ï¯8óœ=œóª+¸oö Ÿ}üA.»æÅŒ—&¶m£rŽê9-KmÒ~ ƒVw‘™ù㌌ŒÑbý–ö^19ÈúÜ×=L?y„Gn]æþ(áŒÝ{Ù0…³c" ˆ:-Ê›·£“Ñ][ _cÇ=›,ËX\\dzzšcÓÇÃr¹ŒišÄq¼Ê‘~â‰'¸ï‹÷ñè£rüÄq.ºè"vîØùœ2Íž×M6_øLØxe—¶U¥§ûôtÄ£#H}תÓ, ѰxßÀÁ)̇óÌ…'IU†ÎLTä2äTðË5FKc”ÌçÁx’a -“Tfh²ç}Ž®&Ž3Feì"¤pè¿…`îóÍ¢×_…7v1ˆïôȪ2 âk[—WRŠ×êÙùþœµ,Îðú%ªýrè9~}5Ø‘Äì(º½e·KªÒ⣰Öã¯Õ׬ý‡æ–[náᇦÛí®N§œbz†aÈc=Æìì,ફ®âÜsÏe||ü´å—Ÿnâª-llÓÆÅÅã¬ÊÔD@ÄÄ á5±G(S^ ;zÊ‹®DØ>NeEÄéIò^F¹¼}¥Ÿ}îÞé8:I<ˆgŒ‡§†»vÑ}®?.+è‘’U¢l—©ù5Õ"sáí°MÅ©<#G¸Zù9æîÅ»1„Á5¯aãðF„!°Œµ§¯V é U!2™®¶‹e•ÈѨ<öÊå2Y¦™;¹@ç”+5’D GHp=Û-³8©$C^\,­Ñ:'ŠR•a˜šn¯ƒÕ�›Ñ±!ÎØµ¥®m“jƒ8 ¨ÖìØ¹‘;︇]ñb†‡ƒ.Bg†$Ž¢(A)…eY+#'’Á ”’,Åȼ”R¢¡Q9˜¦! ’6§ïû(ý^Ÿ(ޱ<‡,Sh q¦1¥•t{ײ‘–…i[(¥Xn-á¸6ia˜C”ÖJûg µ@+Çñ°"éÚ4M,«pžÆqŠRŠ$I0 kÅÑ©°-—þ O’¾ëx+\ bÒÊ�m®Ü^¢”Ð6ý^Ÿ4M1MÏsq],K À^¿‡‚’_Âó<Ò4GP‘Jq)%y¦QJƒ6@K4Š<+ú¢ÂÍ ¹J1 I¹\*ÂfZ]â8)¸…,Ód*PŠ4Ɉã¨ì2L´N‹$L+Ç´LÂ|Àºu»˜ŸØºó<ÞñöŸçs·MóÃ?|./¾úb¤Ѩyä™"S´hô*“éŸÈqLÓ¤×ë$ Y–bÖ Çˆ.¢þŠÃµ-Ò ŽÃã úm†š†òŠW¼ŒŸ~ûùØ?†W¼ìf.¿r?i6e:˜V‚íyh%É•dt|ŒÃÇâ¹>q2 I|¿D¿7 VÎ9>sŒ·pÙ¥ò§üa®~Ñ¥ø¶‡ç¹˜:Ee9ߦîû sæ¦âš.½…6¯Ä/ÿäOóö7µ¹ï¡Ç8pü$ŸºóNþîÆcÓölß¶—±á1F‡GØ4¶ E̥Ǚ;qŒ4ˆ90ÿw-ÞÆòâ<•R™][wð®«^Æèð¢âçrÇõŸàÓwÞÈüÉizƒ>Žç26¾‘ÿ~’M›¶S+»¤Q�†A‚ ÒlЗ°œhªã’Hk´m±Ðéä)›‹7S³\îûä§øèŸÿûvïægßõ³ìyéKiIÁ?\} û‡›øí_ÿ{þôOþ­adÒcÓ—3^r>g5‡é=zi޵n’…$dǾÝüü{~ë>÷0¯Ý›°cø…ŸúY>!ÿ'›«U¶NNR­ú4†›¼å7vsÃM7rßOò›·þ³i…‹®9Ÿ×½á5ì=ûL*LZ¡Ã�“xtœ7¾û]Üó‰Oa>Îþí»Y:<ÍÍÿOìÓKp6 “{6åfû>w'¡Qâc ˜†çûØÃcäRÑñ©ŒU‰‚ˆ4ÌÌÌœfdÔíì:o7û/»�¥ µÜaya™û§×.ؼ۷ídbÇ>&·lÇ®¯­ZÏbÕëuvìØçz ­v)¥X^^æÈÑ#Üü™› \@§MµReó¦ÍkÂê·!¬ZXÔDŠWaÄe– ´ú-¢l[FH¨CªºŠB«Âé"ÌÅsÌÄ3 *ŒÛUšå•Jëy”$,48ÚY õȾ'Þc§ºÃ*£Ò€àä­'ï(ž«7]žBšßIqB“«6*]À–6ž=kÿg«r‘ci‹Rêã§žë¹{Í,ED=:á<=Ñ[ ¯Z«o*¬¦iJEË~hˆõë׳uëVFGG Ã'Np÷ÝwóðÃsÝu×Ç1®ë®"Öê[¯SÁVe·Ì¨3Š^ù\z¹ò³VO¿oòÜQ ‘Ðo! ºh³ N ç9ø%¤éQt”$maù¡<±¦©ž¢žiáw^‰\æLú“DiÄÉä$GGÙeïzF®™Î˜Mg9Ò?ÂB¼Àö¡íìßɰ?¼öb³÷@J‹<Qy‚! „VDQ̈T¦86¸+‹Ik¹C·Û§ZwQJá{.•jãÇOððñ}ÇõF¸›—)qË„,íªKš¸®ƒéØ¨Ì R*±0¿Èô‘ã4÷×°,A¦4‡]\‚ dÐШWè÷Ø–"ŽlÇÇu¼ÕÄÈB¥7W2M†D‘^m€}¯Œ’4Ï©WjHaÐí·°,×uô²,£Z­"L“8IÑJaYÅh‚í¸¤iŠZI¯,•|ÊÕ BÀÜÜ q®ŒŠÇäBH|¿Œ&Ýnååë×ûT+U„LW£§MlÛF©5pêï,ÓÁs,Ë MS„,D?Ã01 HaA‘EžIƒˆ,Nq=gE0Vôz}lÛ¤R© ¤¢×í¡tŠíTY^lS*WÍ`¬üN—4Ë€Â}kš­ ÍcT®B’¤!Y®‹ð,ÏÆu=Ç&޳•íŒ$Î1 Ó2±mPZ’¦çŽSÂ0Rò,&9Ò4(U«Ì/µ›ØÅßþÕ?qËgnçÜ}#üø½σîÒ,žë²<PªU‰³lE …8ŽHÓ Çqˆãx|_ Lò<'Ï Ö4,,ËŲ,Ò4Yš“ç ¦%±m›<³ˆ¢†­H³ ¾3λ~î?pûgäÝïúÏ|òúãU$¦Y|VAL·’çàÙ%fgæÙ¼y®[aÐP¯ Ñë…¨yŽÎo|ãÕ¼áõwqççnãÒK_€gP©RvÂþ€¥…PŠO<A³RÇ2l“T††0“×þÐëèDFÙçèüInûÜ]Üû…è.tI:=ì\ ƒÖ2£ÃCXŽäò«.á¼ó^Äèä(hM¿rÓ­Ÿ¥×ïqlú('f¦É [6qñ?ÀÄägœ¹‡ÅÅy’ Kn*û†š æ—–±JUÚ½>vÙ$3,ü†Gdh¦â•È–{|òÃÿ‡Ã÷=DëÈ?ÿÿ¾“­—]„ˆ»Dq—ƒ³Ó”›#¼æe—ò¿ó1Tšñþ_ÿe®~Í‹h÷Ž06ÚÒøžÁæFe6°<‹^z”‹öìãÏ>ü)n¿þ.榻L86לѠ1\¦*#¢Ùyn½õfJ® Ü¬sÖðg7Ï"¯òÉoâµt Ûö4yË¿{=¯{ÓbŒ4’‚,^äÒ×¼š™;îâäçïbçÆ}<~è1î½þf†÷í䜗¼˜ NØõUˆX‘e,ËCÈÒËÌ®‹!sÂþ€¡u¨™Ì>7^GèÝ<3g„8“¾KÃtÈ–û¨Ö€…#3´;ÆB;àÉ[n`xtˆ½ïùÁµ•ëÛÙ¤ mÛ¬[·Ïóعs'–eáyÞW…WAÀ‘#G8|è0=þ'Nœ`aaáë’z•R_tñLJJù´ß‹M‚ 8l´……Ű;¦¯ôòݸK{ÐÆÁA"HtÌlz [Ø YãøN‰±ÊeQ)7QƳÜçÝé¹Ä "ê4R÷EÂÀó·ÙÒÄô†©N]‰”’þ‰[Ú‡aúFÊë.Ã:óȤzõ3óTöå†O…K„Á Jæ8fiÓJã¹Öñ}»ÑÖmBb˜ÕR•Z©vZð}Ï£Z)cöL2•}•€³Vkõ•ëíÆ¹êª«BP.—©V««ŽÕ4Mi·Ûlܸ˲¸á†xðÁÙ¾};[·n] °úv×þ"oB>e Õ÷ÒZÏs=µþ=ðJBS ãÓF'KÈÎ4”º4†ßÝÃä$™c0x�¥Ú”J[pœñ5ÀiÖãHQL„OÉ)Z²Å¢Zä¨:ÊV½‡o]Œ’ˆŽ?ÀÉÅ“LÚ“ì©îaÜÿ†Ódkµ"¬R†9®[¸³ÄÄ0\0s¢ H)tÀA?¦ÝêáxI*X7Z¡Ù,3¿pœr¹¼Ê-W*ÄiŒ4™Îˆ“Û÷h–›tmÖ¯_O& œ<Ϙg~n™J¹Î .’²µŽÙ»ÿ î¹ç’$cyy™z}ˆ0\¢\v‘Â#K¿œyŠKjY‹‹‹X–õå?3ml»aK¦Å ?@)ð½ IšÒjµ¢HŸìõzHË¢VkÇ qP«×±¤‰rs²4¥R)“«œ$ÈÒ„rÅcØm!Y–cÈÑS²šX?4Ô¤ßï¢É)—]êõ:išÒívÉóÂ!E1Nou$µÓéÐhÔ°¤RZg$INž+<ÏD© a»a¦!–eaßŶ,„ÐdiR${6ínǵ˜Ü4EGt]l¿L®5I’ MÛsÑRbH‡<‡x;� …Äq-”Ê1M‰et»z½�Ót°m, ‰ãÛrѶƶL³À(Žc#¥¤Õj1:>Nžé‚…kJÂD3<4Ágo½“_y߇ª—x÷»ßÉûvÓY|‚8°L‹¡Ñ Ó*„CÛ^qñ *•:ívϳIÓœN§‡”&•J(Š(—Ë(e!dYŠ…7M,ËDk—V{™$I±Í:Y–áú×tô¢¸ÏÔæ3x÷»~’Ÿúéò[¿õ?øÍßû¯ÌÍ@ e8¨<fÃÔf–—Zøn~'Dj“²S¥´nˆÿí&G7°eó$­å>/¼àB®¼¼Áÿñ'¹ì²‹˜™‡¼Ïl·Ã‰cÇ® ±cÓ¦®¸LÉR«ÅÉp™05‘U›nç$:؃€MF‰­¿öeÜñÙ;øëürÛa|óFš›G‘€kX<öäQ>þ/ŸÄ“&3Ë P/1ºn Ӳػ¾è*®|ñ•–Eœ§„Q@¤%þÐ( Ëóä9øžÃb¿^‰v˜ÓNëFkLŸìSo“æ C vl`û–müË_ü%·ýóÍlšç]¿ú‹l¹ð\Ò°Ïb Z!›k%zÇOð‰?ú(¥,a13ŽEÍô™Ý‚™-!eŽ,™„3ÞpG¾x7‡ÞK¥brÝïþ8û¯|)÷Üó7þë=ü͇oàî#1[7ö˜næ¿|ð§Y'=‚£³œ8r„¸ÝÂï'üÂ¥çQó$w>ÂÿúoÇ?ø§ì¾ü|~ø-oäõlÅ·L6¼òJ–ÝrÅ•ûwðÙþ8ÿí'ºìû¡×²¼x’Ì«RóÇÈ0 ·¶o±ÜY b˜n•ú„J2LÛgrË¿Ï@:$*%ít©*;Š™=x”²íQ²KôK°ïͯ)8yÓÌM·IçgÖV­géT·ÙlÒl>uÀèè(×^{-‡" ƒ¯k –––˜¥ÕjÇñ× ¯ßhÓsê0°^¯³}ûöÂiù}ÈpjV’U"$d>çd÷$ݬC,"4šDÅtÓŽp(ÉÃæ(• êÔWS†Ÿ—¾0ñÜ rÝ&M—È¥…eºñüvñiáT7ƒ.&Ÿú3·2˜½ éV1*ãØVñ4X�&&F"±°*))ýu™֚8é„-¬úž×X»Ø=KÕÏûÌEsô²nÁú÷<<ß{Î…¡Se~©TL©œˆˆT¤Ï¨\«ïÁajjŠÑÑQjµÚ7ä®_¿žÍ›7sôèQî¼óNfggyòÉ'ét:_#.%œ<y’……Úí6iú­¹¤‹žÚaÆ ¬_¿Û¶×ø„kõ-«RÖpíqˆ5ˤ2™c»#ߦ¼Ö9iÚ!Šfɲ¶]¡TÚ…CkoÑiV…Å{'Ì,f‹MŽ’=ƒÉ¨,Íh÷ÛÜ}ìnæÂ9v6w²x?UQ]sš?U‰¸®i¤$IB$Hé`¬p1MKP­–±mˆâ ­EÁ$u,zý>žç1 PJ!¥$Ér¤Î‹ nš¢2RóAi°,‹^¯‡e98¶…Ê3ÎÞ¿—îÿƒA€S6)—Ëh2^ð‚sø½ßùÝnÀö›°€0\¦×ëâ9 1M‰¥r²,G)M¥R]q#¦+¢›EšÄ\P㸘¦Mšç„ÝLiÊå žï†!Ò4Y^Z&Žc<Ï! BzIŒï{dI„ë¬P”*‡B`š&¥R‰<Ó¸žcyA€ÊSò<§\ö1 “AÐ 7”ïû¸®KÆäyN’$ضM©T0XÓ$Cél%çÂ[PS´ø¾GE¤Y‚eÇqúý”~¿H¸ô|Ƕ‘Ò`aažz£Ž”ûT)…Ò`HA>UñHúÁ�Ó0±L¥3¢8Á²‹ð«,ÍHÓ„8‰ðñ(—*Åx½+á_EèˆÖà{>! #4…kÐn·q]^» nàA`”ëLO/ò¾÷ýZÀ+_y_rý¥9 ID¨<Ã/W0-“`å±»®»:²E8M£Ñ \.E†!‘RE`› ^·ÐJa;&µÂZªaYªÑ™"‰sL%°L ß+ÑYžá导šË?òw|ìcwqõËoâå?ps ‡‰‚CÚô»=´Òx®ÏâÜe¯D’¦X–ɶ­Ûq ÁÒÜ4ÕÚ(eßáÍoz¿üŸþ'ÿß_”×ýàŸžeÝè0{÷îó=RÏ@™9È]–øN Ë‘¨(¦aØÌÏžà±0wx†¥¹êce¶ì=‹÷½ïíl½ðt»ËÉ“ AÈÃ=Š_­påË.fdl¬À!HÉÄä”<tsôØ<KÑjÏ’¨…¢,S©”™œCêŒ01,áÙ ×kÌ-u¹÷žCØ*`úàQ¶mØÀö­{¹û#á–¸Žý»&xëÏý þ–<¾p«Z¢^­ÁR›fsèówsážmŒmÛÈïä3¼ó~•?û“?áÌ­ÛøÍ_#Íu<yóm|îŸo ™ p½ŒËÞôz6^xY½†5±¾t g]xû/8‹÷àCÜöH›MgÀ¦ó·pÆÆõ%dÓ³DÇN²|ô÷ßþ:yËvœÁþòU<´Øæö‡Ÿà—ü?rèÍ{ù/úrW°ãê˘»÷KÜÿ…/ñ‹®àèýqôþ'x´öÎxí‹YÂ|Û¯#M‡^?¥T#Í¢T!¥‡WñQ¡"S9žUÅQ©aû–°HÌ„ÉsÏFš6 Çgé§Y–0{ä0ÁÂq¶W)MM¬­ZßMÉŠ%Š¢Õ†é” þkë‘GáÚk¯å®»îâäÉ“E°à7€¹ŸB |esuÎ9çðÎw¾“;wÓßg§þ&& «ÎIs’±úy5ÿªmbª/–°1 ã4–eØPßL48@¯÷Nª©ÕÆ¿gÌveõM/EæºÇ¯§×þ"ieˆ¡æXVã Èzeê(!a‰%llªT±±‰ˆèÒE¡f ëkœP ©YᬯճYݰËLk†^Ø[mõO«(]<¦\ä,é%úº%¬µp­¾ª\×}Z”ïû4 ½^~¿ÿU©ÖEuûí·sóÍ7sï½÷Òjµ0 ãë\¨§ö§¾+yž366Æ[ßúVÞøÆ7Òh4ÖÐBkõ-ÓC/ 3ÈSkœƒçN®`¿×VµòÙ h·¿ä”ËâºãaÃó}ö½©¬bJ“ŒòDï ¦[Ó¤£ßÚRŠÞ Ç‰Å|añ xkÖ_ÃΉ˜Â\{}Ÿ²¯¡`”Ú–Ežg˜¦Ä´ R•ÇAУR)aÛ&y¦‰Â”`!œ,é355Ê—¾ e!žö²”<‡4φ@³HaO çIš…Ôj�’8Æs|×ãæ›oå¢K.dHº„a„_µ±lƒ‘á3'æ¸à‚} %¿Œ4,Ð6h) ¤41 ÈsEšæ/Ö´‰ãB,vQ ” ŽÕŽã â­‹w`nv–No€ï{x¶I§µL’Ä 77ÑŽz˜BbMNŽëZ8ž»Ê#•–�%QJcY6I’bÙJ§ 2ÇZuY¦iŠa!ÏsJ¥BT«U”VX¦BH… Çñ0 “(J�ˆ¢€8.„XËvÐäô<ßC 4Q¥²‡mÛ„a@šæX–$M3<×B1RJ,Ë$Ëq“Ê„Ì,‚³ ‘�T®ãø˜¦…4ÄŠ“VEI1^oZ+g1ž[!Miš!¤BJMšâ‚ëºô{7M3 ÓÁsÇù­ýËKmÎ;wŒŸú…·±Ü:Fµl!¤m—IRÅ ÑÒÀuýÕ‹‚0 W¢z¿�� �IDAT¹µ®ë"„ Š ¦«ÖùŠÓÖX¹Mñ<³<¥dzÄqLœ„ø¾K–¥XމÆ@kE–‚!%‚Ç‘H™ðÁ_ÿ^ùêç¿ÿÆŸ³wÿ>ý–ôÐyŽïÛ¬Ÿ% ;”<‡$Œ±„`Óºut:sÔëÝöwÝõ6N­ç̳&ùË¿úoû›©W< 3hµ$ í,F™Ð,•©–Ê”ÃÙðØ}òؽqâÐ4U§Ê ι€?ú&¤×EZv"ž¼ýã<xßÃlÞ¾‹uS›Ø½gÍ©uTdž™ëµ(Ù.^&è´g1zE š-bâþ<2 ð¤Ä´­BÎÄq„_®Q­:¸¥*ƒPãeìr“WLÌ8qèçžsŸûí?àÓû8;·¯çm¿ôN²ñŸxQ¯ãZÐn-±I<pÝ'у„]—_è6¸ñ'ÞÊCGg¸ëþûùàûÿ7—z/ؾ‡þéÓ,áÑøeþø?ýÞ®=¼÷C¿Î‰…e~âG~Œóvîâ¼Kvóü»vo¦<ì‘;9>~;²ÔŠÊºö\Á†+®àÉ[ïæS7ÜHöù[¸ìe×ðþ÷½_y÷›yòñQ2ð›Ü~ó\|Îy­…™%v¾êUðÙ9öèAb‘1yî9¸›Xy†6}:‹Ëôƒ”ÆP Šäh¥PI‚o{ˆåCK £Šr@غ1 ×/324ÄÐö£T¡œÆÔ³}‹'iŸ\drmÝúŽV𦠖––xì±Ç˜žžÆ4M¶mÛÆ† 0Œ¯ÞD–J%¹ÊiwÚ¨L14<ÄÔÔÔª UÁüü<333Åõ¸Tb||œ©©)jµÚêšðýV‰ùUÿo Û°¿?öêEú&Zdy‚™§ÅŽø{åéIÓ¡´î0ñ€xþKt°(UwàyëV«§Ü¨}ݧ¶éDúô10qq11II‰ˆ°±‘BRu««k=i€pÂ>B—ÖÜŠÏrå*'ËsêVCK<Ã?m„U­5–4i:C´³ó½Zö25¯†kÂêZ}¹ž.ÁZ)E†ôû}‚ À0 <ÏûªCÕS£ü§¦ ƒ‹‹‹T«U&''‹œ‰•CÔ4M9zô(ív€F£ÁúõëÅ÷ý¯ÛO¬ÕZ=å~Á´Á­#j±•‹¢CCå}<oÓ¬ÏVˆ”†4‚`Ž(ïb.¶ÝĶDz´öžœ¶ºªÆ”&Sµ)¦ºS˜s&:tT‡µ§œôJÓ”þ Ï‰Á ŽåÇŽdÄa½·ž¦l®V>°Z$ѧ$IŸ4IÈSGy3Ãqm¤!¨T}’4[ c²m‡ ŠÑ*ah¨ÉÒ²¢Ûí’Ä5Â0ÁÈ4Ò’x%Ç.Ñi÷é÷û¦@å­åejµ:õj`"ÒãØ±ŒMíÂu â8¢Ñlrþy1wr©ÕG`ÛB*P.Iœ‘äy®ÑJ#Ѝ{¢0F+M%ô{}\7¥RªE a¢Ã°iÈUwk–e(UˆræÿeïÍÃ,« sïßÚkÏûÌuj®ž𦛩iiAPcŒ#†8}I|¾ä^¯Q£1&j“G£^5^£ÄÜDƒQT "34 4 tÓsuwÍgÜóÞëûceÐx£ÑäSo½ýO=]U§ÎÎ^k½ë¤Äõ<È3ò,atx¿ß'KclÃÆ” 48Ni·:†c{¨<GJE–¥¤YŒeét: ¤YB£Q'Ë rofff±ÄÊZŒ?(Ê—Š¯s4a i‚,ËK—!„F¦²"Ç4QD±J‘eý~ŒiXH)H’Ã0¨Ö "»ÝîÐív(•<tÝ„Èq{1Ô=&Ër £è3•€P¦¢P„9y®ˆãB«TA¤ ‘“g9Q/)™5M ÔbA—¦ã÷ ¥©R‚$‰ñJ }è_ýʽ¤)¼òϧáùôÉ0L›8ÎQÊ"ͺ}Ÿ8M4\·Džç¤iN–)<¯ÈÿͲP$I†¦¥èº Ë2’$Åó¼"Ë·¡Im16_œ)ò<#Kú)‘Â@Ë Pišâ‡-¢8g˶Óxóo¿œ~ôùÖ·n൯}A_§Ûê`h9š2ÑeNžhDT+&i³ÿð~ÛýkÖŽÓ÷kY½~ ï}ßïsÅëÞÅŸ¼ïCüþÿû›ôZ¸¶I¥T¥Ù°Éò˜d¡Å`ÏÎé›BD #cœóÒ0¾m;Ê09¼ó¬͑©£h–C(4›Wsòó.ÄB²žÏ÷í}AΪ•k ›z£Q(ô‚>ŽgÅIZ¨õôH£TrÉÒ>I”rxá(õZ Ó©qí×¾Fµ¹·:Lfø çœÑä¹ç?Ÿ[>ÿ|ùÿ‘mgœÈKßü²A“£ GX¿i=­¶§»$<|çm9ôg>çÙD.­“ŒªyÖM¸Œ¯¿˜ê*>ø×_¦Üÿ,á\L¹9Ä–‹Nå²W½ŒÊø*Ýç9/>7½ùc\ÿÍÿ‡çl;‰ºðÚ¹q+ϼä^òêçR-78vì(%oÒÄZüÜèVXñŠ \¹ãlnúò¹÷úkð¹sÞt›Î9• ÝeáÈ^¶L¬ÃˆuV^x1÷ÿÓ5ýNx鋘ýò?püŽ¡rÊ•ºdþèÕ:qÊôñ>ý bl¤F¦%xUÒ”c õj»\EK3P4€m‘õúø ”i ’ÊŽs§=wzŽÐï/Z?g<µ*ÔìÑÒ"éÀìÚµ‹©©)šÍ&§Ÿ~:6løËþÐÐ[·ne×®]ÌÏÍ#„àÄOäÜsÏ-ÜJ!¥dçÎÜ~ûíÌÍͱzÕjÎ9÷.¸àFGG—”öËø¿u½$‘Òr²,@ùïZåiŽM؃'#]uøNºsOÐ)ZžcÉ2B–IÉIIèÓg6Ÿc:˜¦Õ_ø±yªnîb*“¬œRÑ«hš Úè#رm5`yÑ÷sEšóÙšYÅÓ=<Ý!'ÿÅYD ƒs€-Zý:n‡ÜΗ³—ñSôQ199Éää$ív›jµÊèè(®ë>íg-ËbõêÕ¬Y³†ÁÁA|ßgbb‚³Î:‹“N:i©T·Ûírà 7ðä“ObY›7oæ9Ïy[¶l¡\./Ÿôeü´#*.TW`SAO§YXØK´‘2@ˆ¥ªhš…¶KøÓ=ä*O AXÔAk"ÎæL¨ÖNÅqÆÑ´e•õ/:¤&©5Æq*I…¤Ÿ0›ÌÒ°4Dãß|þ%IB„t{]FyR=É@e€õ•õ ÿü.±ÿ b5I‹<Ó<ìâ÷}²DÇqM,7EØY¡I‡n\×#ŽJ¥ IÚBj:†¡ÓëA·Û&IGŠ$)1m©ä(tÃÄq,K"=vÛ6©”ÌÍueûgq`ÿ!žqΉX–C«;I} Î–“Ná_ÿ*n[óHUL’ö©xŠò& ]ê !ÏJi¤i@§$q†iZè²P¯*ºn`;6ŽãDBh8† Í2¤¦¡”B×Mâ(&I¢(@×$Ži0=sDZ¢(`B‘„N¥Nh¥X–Ê ˆ‚BE©eÙ@‚iéXšq„ÕâèSªÐ§àÑR— 3MslÛZøCLÓD7 M# C¢I–ÔÇq!R…aHEi“b)&$žW¢ï÷1 ³ ýMH©!¥Ž²´8N!¶í€*T 0 ×ý"+Ïy¶å’¦)a#„øAF+  Û6—Z9…(HæN'àOÿäÃH‘ñÒKÏâÅ/{>sÓO¢k‚^?E)Ãð°íŒz3Çsm²(C׋lÜ(ŠRE1ŠÂÂkYåre‘,-"²,Å÷ýB¬%cQ'?ˆcÈUFœô±­ sYUšá–tʆNèâ×_ö<n¸év>öÑ/±ñ„œ­'n!‹¡R²× ›Ý»îÃïúTËMtisæö­ÔQj`:#ìÛ¿M›6sé¥Ï䟼_{á¹l=a ~§C¿0wß#~dO>ùÒ€ukWqÆϤ¹rúØ(­={Ø}×-¥x`÷cl=çN=ïTJ+WÑ9zœ#ǧA”ˆTØ¥ÃUâ8b>L(Ù6a/Æ´tŽÏ´± üÙi’<ÇÖ B%‘Ò@i!aØe~ŽLÎñÇïù<Só…C%òáœm'ò¹O}c{ñ•/]ƒ¹fˆK~絘놉T´—OͲÂF`“ÎåÐÞ'Øñ‚gÑܺ‰N,Ø´q×MpS™Éc\<¶š½¶¹ôÒ7pÁ‹/`lóTU»aÎþ#OPÕùÎ?”{nz€‡¿»›o»‹~7fÇÏ bÛØºKeàTK:'sÿ#ÓLÍL󽛿Ãó.<K.¼€‹_ý |o‚¿ú5æ?ýyv¼òRO9-‡<—àºdYÎé/»”ïùŸGqÖùð/W}†Î±IÞs«/¹œÆêAö>´—òsܶó~Ú]Ÿ·¼åeüö›~“…Î,žmb 9.ÒrÉ´„,ŠI㘸Ó+”Xõ:†eF*Šéw#ÜfO_Î üy#Žcî½÷^n½õVüq¦¦¦ˆãß÷QJ±aÃÎ9§ A±ºiÓ&Š2Œj…“O9™g?ûÙÔj5”*J{½·Þz+R—¬[¿Ž³Î:‹íÛ·ãºîÿ•jÕeü�¶]EˆÁ ­ÖC”Jëqœ_mº”Ñõ”Gs¤¡ÑÚ=*ŒQy…ÀXÁLr\M³ æAƒak˜5k Uµ¤ár•Ó‹ºnf²w3ò°µ ¦>£i’SFT×U[¾±~ŽXðçÙ×ÚG—yª®ƒ4Ä/”¸Z,6äˆEn@-_²eü´÷ôz=n¼ñFî½÷^‚ àYÏzçwcccOûYÓ4—\,¥R ×uY±bÛ·oç¼óÎ#],מžæöÛo_Êw=ûì³9ï¼ó˜˜˜X>áËønV‰ ‚®›T«UÂð(Ýîæç÷`UJå•xîðÓŽƒü9²Þ!ºù<YP‹ulo£2‚a-“ª¿d([eV”W0•Lq¸}˜¦lÒp”X ‚€£G’D CcCL‡Óìlïd­»–«'R5ªË'ó'!V¥Hi¢²Iœ"”`¨Y!V}¢4#ÎÀst,ܲK»½@vɳ„’£á96¥’D7l,ÛÅõJ˜ÊC#ŠcâØGSza¥0`P«ŠcGgÈs Ã4¨3Óš$M ¥¤ešL9̆ «™ŸŸ£»¡×lÏÁíù ÑuM+¦Þy–£ëÓ45E¹\¦\*“&išÒóû@N’„e ëƒT9RhÄI‚&r„H‘š¢^«`˜’,ñ<DZ‰Ã ì*#%˜%Ï®ëá‡AàcÛ½Nǵév[Tª®gÑZè’Ä…šshp é÷û‹–’âx¤Ôˆ£ˆHèºVÌÉ1 \å„QL¤°nH¤ž“f AÐíæx^aÑ2-EF«ÕÂ2*Õ ¦iÒnué÷ÚØŽI¿ßÃ6 Ò</Zš (RË#V9BH\Ë!ÏÝnŸ$‰±lÓ´Ñ tQ† Iœàº…J«°æ›,r¤H1tJ[Ê¿ÍѨ™%þþÃì¼÷AN8a„+^}iÔÅg9¨CJ #ò{$i€Y+ãG>q¢”"Ë,Ë"zTËe¼jßïô:ضEž§Ø¶MÙõŠŒØ(FhN©DšÇèRbh`JÍ0ɃÝРωTPäw¥)YãGÆ8O8‘gŸ6ïý“/ñ÷_¸™÷½w eÛÑŠ‡§Óï ô×uXµq–f3yhŠ»B’BÙ+ã‡=†jí™ã¼åWrÃ7oä¯þô+|᪓yìûño|Õ½˜Õ• Ï>};c§l…‘T’Éý<pË·é}†‡Gql›íÃgጯ£¶þD¦FÓ+˜vÂÃ<Ά°íŒn/@7êCÃÌη™<6Kßïqî9çPÏrbq/¢Ýñ‹r½I§³€й™iF‡‡Âdt¢ÆÇþæm(<VŸÀ5_º–c+Y14Ê?ö §Äï¼û­Œv"?~7»÷<Àê¡a5´ ‚4áÛ߸ŽúØÍ3ÎD‘àº5’ À*ÕðÏñ½«¯æ‚u«8©.¨7<þù[ß‚;»÷ÞÅÔÞãÙ3OyÐæŠ×¿œW\þR^úügóÊË^Áì½°{÷Cœsù+hÏOsëM÷°_k¯½Ç÷ì§ÕÄ‹/ZÁ¶gg!†k±ñ…/ 6Ln¸î›Ì}ú*.óëqÆ'(W<tÓÀïFØ†Æø¦ùþ·¿ÅÙÛ¶òÜ—¿ˆ›ï»‡ý»2²âQn¼óAÞòÖ`ë™ÃüùŸ½Ÿê`ƒMëV!sÅ@Õ$ÕÁTìƒe¢ “ µ€æ8H!éw{mÐ ”¥)za\tƒ.s«?W(¥ÈUá ˆ¢ˆ4Mqœ"#»ï÷é÷û„aHEK*”§“b6ÕjµÈ…LŠx–æ@“ñññ""`ñwLÓ$MSÊ¥2+W®dåÊ•ÔëËs e Ë&戢ãØöȯØj­ŒY^™O|ô^D’Þ±[˜)meÁ µr\éahCÖcîøRa?D¬¶ô½¬G˜Ey4Åt2C‹)†ÝÕLØÕ¢„u?7iH;ì`ê&u»¥[¿0ä¥B!5IÕ®PÂzQ—\åËn?ò<çØ±c<ôÐCÜrË-t:N9åžùÌg²yófªÕê=³åROFÇH)i6›Œ1>>N–e‹“p)w}ppÕ«W366F©TZ>éËøY)„ð°¬Ò¢¨,$Ë54tDÔ%WGˆ˜%ÿ ­Û ¹Âì÷! ÑtÜ(!ô †7†á #4cù´ÿ’¡d”XQ]A»Óæ‘…G¶‡Yï®ÿQJ]¤. ³5Ãt<ù¬«¯c}e=ž¾ìú‰>•žmÒïõЄ‰kV0Ê%z¥ˆB‰m—qK&š~î£)QØÂ’ùiÆG‡Ñ5“C“Sl 7`Y’ç aã8%²4'U)I$RÇõ‘ Mr”Ȉ²„µ'¬æö«¿‡e6˜™;€aÇ$‰g-àØ‚C§©TKøa‡ œÅ2R'Iº.õZ(ŽÈ“ÂÒ­TAë–N”„$QL„¤iŠáºäiŒeVÛbð‹ð{],˶M,3Ç4Lü @ƒ&P*#Šl×ÁT6q-2)Ò$bvæ(Y y³3Ó8ŽM„8¶CèG„A€mÙ”‡\)t]ÇuœBå«Ô¨r‰Ô@£KUˆ:Y¦>†.Qªˆ[IÓˆ$ BVS¸uMäèÒÄïèšIµìô#úÝ.Ý,Ç¢Q®173Ëî]²~íêU’ħ\²ñÐÈâÛ,…)J„Iˆ4sL]#ËúAŠ•[¤IVä‘"ÈQd* t;CjCsA„Äq ?ìPvÇ‘š@Ó50»òWú†¯yÍiŒŽºäiކ‹iJ Ý@åBäžÀILÂN‹`1C·^«S*»ôÚ-ò4% šec‚<KÐÑH£˜8-òwÉ3Ó@“•Æ¸Ž‰Jbú.%’[¥ëwQZˆfk¤Y†fdq†e¹DAJÔßÇ[Þø¾~Í×¹ûö#LŒ­›ÞûF0<àQ¥ŸfdºK¥>ŠW!aa¶EµbaªZš bŸ¦»·\þþðÝŸçoýs6ocóú .:ódjÕ*Fuˆy?g~÷’n‡…h»îQkTXµu~’K‡™vŸ¹‡ïg°9L©ZF8&N—“‡ˆâ€uëV³Ðš#ó{˜yDÓÔ —¤5ÃhÅe¡µ@žg¨8¢:8@ÇôÚ=êµ*–аUÒÐ{§ŽpòŽ)™ œ!þù3ÓtŸþÁÛ9pp/¯ºò æŸ}Û_óõ›¾Æ‹.½­—íÀnÒžšå+_¼–oßx;ïþÀ;¹åö½ ‡•ku”iïíòÄ­w1ü�[Ï<#–|暯á5˘ŽÁPcˆm—ldâõ±‹u'Œa[=f<ƈ3Êã{î`®³¡ÙÜyïÿí=Ÿf°9ÈÉ' rÑóOæÔ“·p†µLŒ’„}’,b!ìS7aÓóÏÇi:Üù·Ÿç_®ú;^üžw"#Ÿ<Îp½*™mÑ<û òûnãÎ{¿Çoxët«¿xŸü§rxn–/|ùœûœ—€UÇÏß¹“aÛah¤Ì'þé3|ã[÷sÖ3žÁêÕìØ¾…-'È‚?…cZx幌 ú¤š!± ¥Ä²«ñ?†a°fͲó36lØ@ET*v=º‹û￟ýûösûí·cÛ6¶m³iÓ&,Ëúr¶×ëÑï÷B`Y†n iZßíÒï÷QJÑl6™Ÿ R©,Ÿüe,ÂBˆšVZ(•¿ÒiþŠÐÇ­†´Wcí œ¾ö&³ÂÞÁ„wug�¸º‹ÿ¶åLU³ÊÆÚ&r•‘¥>½Ö£ì‹öñX>ËD^c@¥x,»ÀžÈTJ–gÔd“!cG+¡~Q¢�””&CÞm½ÅÑÎQf˳E¼Ó²sq?Úí6<ð�7Üp<òkÖ¬áâ‹/fÇŽ þØ‚©8ŽéõоˆF£çyKÄkt»]¢(Â0 h4?âzYÆ2þã(F9Ó¬£i›ñTŒÈRô`–¬5M—I\ø«š’”Ó:®6„ç•È]§ j¥ˤê/%<ÓcEu{â=ìêìbcu#™Ê~dŽe&ƒƒƒdaÆý˜ fijMÖWÖ3^ÇÖ—7«"b5в<Åv\”!°,‰aëÄqŽih˜º^.18^¹ÌððHQT¥iHÇbn!&I(ˆ')‰ú1¦Ð‰’¢$J×5t]C #¥QX°•D7Lò¼È×”Rcdtˆñ±QŽ›¢\u@&†‹c™¬\¹‚»ïº‡mglFw<ÂxC/’º¡c&ó TÊ‹*Å0Ä4 0Lü~@ÅUXî …k‘—!Z£i©žßïSªh$I†Ež©”qœP©T‹ÝÇ4_,Í’ÄqŠ[*¡Kƒn·‡”:†!›è%¶m`˜E RQôT¨š”*^)%žçÿdžB'Rj˜ –i’“¦EÁ•¦éø~€RJ 4!Ñuƒ’g ›’$IÈÓ T†&I–`;:RÓÈ•ÀÐ Û²9ùä“K«"Ò,#ÉS¤¡£rFؘ–G?ðÑô¢àÊ@G©"z!ÏsÇ! #¤4(—Ët»] CG)\)âÄ'MûhºÆ@cˆù¹.º^&ðCÆ×lä W]Ë÷žcËf‡3wlCJèv{¸¶EžŠÙ ê’$ ¦Ô1tÝÔ†µ"/ã 0 „�"Wªt”Àq@9± t«PQˆˆBÓðܺÔé÷{èÊFjnñw´ ‘gdQˆ§;X–MÔõ±ìBÉýªK/àﻎ¿þÈUüÉÛß@³9D¹:Ál°@·×Ç«R*7èw|D¨ðJ5¼†@˜6å¡4?æÞëoãº{ÿ™ÃæxÑŽ þ÷5»ùôKÎáâ—]ý£ô'pÿƒw3tr¹Áº k)ÉA&ÖMàg!Çç[(äQ LD¿â•ÜâðUÎÐP“^¯O·§Ø·ïIµÚ* ©1Ø ^¯“$ Ia/*ë,Ó ×íR¯×i4ÄQHshÓ’$YF­RæÉ½O0\Ç,%yr7{çïå–{ÛènÛù—´BŸÍÛê¼á·ÞÀ+_órJ¶Å·¯ý*úã3}¨Ï§?ý~îºÿ ùñÿŶs6ðú+.fxÃh·xäîïqö™§qê%çBs‚üVƒ@Y††kD¦hºÃÌì<R‘2¡Z50$2¡V×iÝG–û\óå¿ep¸Ìøè8¡ßâÐÁ½xžƒi H±K&í~C×XwÞùôÙÃ-·}—Û>÷<ë·^OÐFHr'u6ßýêÕô÷¤ñŒ³ØýþoКíñê—žÁië×òøc²rëv®ûæ­üÞëÞÊsÎÞÁß]ó·l:á$>÷wßæ¯þâs4@ÓlžsÑ*~ëuWpòæ-„aˆÈS„T¤ªxžJÍ"Ëù¿¡˜\ÆÏH÷HÉèÈh1~œà#„Àu]Ö­[ÇÈÈ_ùÊW8räßùÎwð<ááašÍæÓ¢\z½Åq)addMjKߟŸŸ§Û-Ú´GFFXµzÕr¾Ú2ž¶8ÂÁ²&È• Íút{Oâº+‘¿J¶;eÈ ÓÞ ÚÞqü¸MÔÝMÓui6WQ5?ÑËšAÝ,,ŽJ÷Z„k€£âk’Ãý#Œ9cTÍeëÚÏ ý´Ïl4˨9Š-\$¿X‹l©I\ÓÃÎüØ'HÃ_˜ Øeübcvv–;wrà 7pûí·S­VÙ¶mçŸ>ëÖ­[\?<…€§ØP¢ˆjµÊøøøÒ¸®”Z*Á ‚�×ugxxx¹°j?whšùò_)È%*C˜RÿþF£4$šÕDÓ‡^Ìå{õ—%³ÄªÚ*šA“™c3Lö&™éÏÐt›èš¾ä0&Ó2ITÂÝ“w&!'•Nb…·‚’QZŽ,ûI‰U„ZlJ׋fô("ˆC”ÒÂB× L«ÌÐ`ßiZ À4 C#ŠbJ¥ ~V4¶*©$>Q†…=²Z®“fY¡kLŠÅ„&Yž24ÜdõêÕ;z”•«·ä)s²DrƧó5ü¶S�� �IDATÅÏ•(ŒÐmã”pL)‹LL×q‰Â¨`ÜM‹,Ë—”Biš’f†&±mÃ(TDš”Ån¶ä Tž-}/Ïrz½–eQ*•°m›4íÐíöȲ¬È7ÕJê Ëv(•*¡‘§®ç†…¥TJ½(òÓ‹\Ó4-ÈТ(+_| jK‹tÃ0–šV Ã$ÏAÃÀ4†nä¯e @j: Hâ èºE¥RYªP¦B©”^ÏDzÛC—‘§‹™¢ ¥’Gš)úAN§‡çy޶HNBEx¦K–=õ¾‹Ò'¥½~ŸÀ(•*X–E’JRÛ±ÈÓ”4‹¬ÖLÑÎ"¼R•^’+ƒötÈ5ÿt3ŠŒË.»±± :í®çb óó$qL»½@¿×ÇÒu,ÛF:ÕF“4+ÊÊ’$A K ¢(ªRJ-Ú|‹BªTå$q‘µK²H®‡¹•/5…æyšÄ´<‚($ì…H‘âÛ²‰Ÿ´ÓÃk Ò>¼Ÿ]û±ãŒ“8ñ¤;¹ãž'2X±õt:‡#5††Æˆ3Áì‘Ò^B³2@Év)ÛÓ““LîßÇ‘½û8ôø>j•¯~óåT›Mºø¼ë®¢62„®¦‘y?O9é¬íHi3vÂFÂîÇÛ HÇ¡Ô\A˜v=q„f½ÂÌÌ ~Ðl R.×p\‹( fzú8–cáº.­V‹8NŸFî?U8öÔÎ{‘¯kÓj-àÖ0%~bZ’Q‚;n¾‘ÃuVœv2k6ì§1>Št-6¶•S·?ƒ©¹v?º‹¹©y^yùYÙ,óçñv¾óÝ{¹úš¯ò¢ßx1Ͻhbv/ób×_ó%L#âäí§Ókµ9>ß"p*”†ÑiÏcS.Uéö"„‘ã÷CòNÇö˜šžfd¥Å#ÝÉ•¯ÿ8µÕñ?bjò&n¹ån¼ñûTÊpî¹üÙûß…g[TJ5¤f‘„1*Ì8ù/a®—p÷ w°rýÖžµéé)«ÌB’š&¶ŸÉžÇ²©´‚?úÄÛÙyõW0ÒŒxzŽžùžœä³ûiZó·Ýy'ŸøøÇyÕ~ƒ½píºŠ?~Ï»iwñ®wþG}Š«¿øò0FzMñ{âÔ@hB-·1þÜ)­§¦†±d÷B°uëVšƒM:×_=»víbtt”3Ï<“R©´dåëv»LMMÑëõ(—ÊlذuëÖ-©R’$áØ±cÌÍÍ‘ç9ÃÃì\¹r™X]Æ݇®;.mºí]øþ1Y³òWC)’Š”®ŠÙ—'•õXÎGo¦ÑÚ…Öš sÊ(9‚&,´Ÿ@ošç1qÚ!Ç`´´žš7Ètr ·]Ó)›eÄâ¿eülè$]ŽG©{u,i¢kri®úÿ7²,+zH)IHÈòåMÈeüû÷M«ÕbçÎ|ýë_gçΤiÊ%—\³žõ,Ö®]û#¥UKϲ4ennŽùùyò<ghhˆU«V=-2 ×ë1==M¿ß§R©°bÅ FGG—‰Õeü'O&�wé4¨¢ž§óïÿª@ !D±–^Æ/?lÝf¤4ªÊ*ªsUfýYžy˜-õ- ¸H)‰ã˜(޹`2œä‰ölt6rzót?á†÷2‰Õ,‹ºÔq7F©¡E5RJ "Nz$IFkÁg~~uk AE½^c`À`zzº ¥Aˆ44 ©#h ò$Åï÷Hâ]·¢È«Óuôðû]\ÏbÏÞ'9íŒIó”DÄe°õ”-í+<¹ÿIÖ¬÷°œBjYqS.—³ìŠ(×u—2mJ¥IœÐïö0- ©ë‹e"ùT#|EØBP.— £z½Žã8KVާˆ:˲pg±œJ`[íV‹jµŠ¦IrñR*Ë2¤DqPX«UFŸnéiMôº®ÿ€Ôý!²µÈåKH’Œ(LH’”(ŠÉÒ© ,ËFj’4KA Tl TŽ.3P CêäRC—‚$ö!Ïȳ×)áZ&†ae9ºn02<R|°ÐÈ2…aØèÒ\<Ž¢T+ŽS²,]TæšÅAe”Ëe’¤˜hF¡LV¹F®R¤ °l›,µèvúØŽDåã£ë¹ñÆÜqû^6hòë/»”RÙ& ",Ë"ÏÁ¶]¤¦˜X± h*'Š":~Ÿ8 É﹊ë u½È3T ¥ D.B I8MQB`Ø&(ÐdA¬*T¡À6Œ¥±Z£ÉÜBmñ5 À’Zš!ƒˆ Ýbÿ£`˜k׎PZÇ[~ïüö›?ÁG?yÿóCBÏÄ‘$éeÔêÈHǶ,Êf™¨íóý»îâúk¿Åps˜ 7pÉ¥/apÝ(IÅBj&oøï—ñ¦W„þ·OðÑ/þf ÖV£=ße~~§=‡ÐÃk×qäèóÇ[ŒMl`íº*kÇ1ÝnQñ«8~|²(+ë÷8vü(•J] â8Á0LÚí6åryé¾L’„n·K¥R! Ãâ3†d²Š°ð#ô\²ª9‚§‡}×Hé´Žð†7½Š•çGê�² sóÇ_ÑdïwàŠWý%W¼îbÎ?ó¾}óM\ã½¼õݯa`b€Æ€É©›.âÆ«ÿsS“¼ðÅ— ÕªäqŠ®0zÁ$ÃÍ!+ÃdqDE˜®Žã¹˜Z†‘×1í*qÜåœ_{6߸ñD>~ÕçùÍ×ý.èÀe¿¾÷¾ÿí„ýY,½‚¦IÚ­Ï«áÕÊ„s Øcœ÷²—³÷nþÚ7Xµýtì\Q²-ìj™¹VÎÜÈ“»°oÿ!6ÿúKpÝÏžph×#Üpì0øØ.¯å}ï}-7}w'¿÷Öÿɧ¯ú2§žvi¢è´º¼íü!–¡ñÇïù,ï}ïŸño++W¯ãà“ß§V³(—kÌÍE8–ýcíhËøÙÉÕ^ìH)©×ê¬Z¹Šæ@“}Oîc~~ž……Â0\"VçççÙ¿?­V«ÈWm6©×ëHYAðøsèÐ!Ò4¥Z­Òh4ŠŒîe,㇖5ºæàâE-Dû”rðAür/Æ32úªÏm"oŒ1£‚EŒhï¢wì.‚¸‡6ñ\\k÷ÿøzJeÁ$A0‰iáÚ RÃ#LŽÐÉ[tòmÚ”)££/ßZ?ëõSÅ|iÌcmy-å¤üS-Øÿ³ðÔ36è¸U—ŠQe*šb!ž/b©–±Œƒ©©©%¥êý÷ßO¥RaÇŽ\xá…lÚ´éÿ˜ƒÇ1䨱c$IBµZ¥Ùl>MÝ:77Çþýûét:4›M•JåfCb¿Â̪&Èå-Åe�`J“1gŒ“*'Ñ÷ûÜuü.DKpÂÐ 7‡ñHDðxëqôLgÜgc}#«²¬VýiˆÕ8 1õbHâ© tYØÜ•¦F1" Šª0h â:.º&Ð0ðÊe&V48rä~ßÇ2m² ²-¢~ˆÐŠø‚4ÌHÒÇq‘RÒï'¤iŒ&5²,¤Z+ñè£ø!º¥‚ÙÙiëá`åšs‰Â )L’$ÅqÜ%b0\T­Deñû†a"5$JI’ Ã�!$y½žã8T«U<¯Lžç,,´°,“ É3…m[Scvv–¡¡¡Biªrò,CeĆa†1Rêèº Ï3 #Ïs ÃÂ4M,ËD©è/½Ç§•O)?Ÿ"ö ÃXR® 4òL ÐA(â(±KA€Ê3PäyŠ)-H4,颿(I%SŠZ½†ß÷Q¹@¥)q’äPi Ð÷»(r4iÒ÷ÛX¦²ˆq0Mò ¼²C’F‹±BJ¹t B+bÊå‚„B %rt+G—:R·)©íîš°™›íñÅÏ•0€Kž÷ljõ*½î<RJLÃ"‰#¢0Â2Mâ0¢×ë"…†ë:ضƒÔŸ²Ú1Y–-•b‰T["¨•Èɦ‰¡KÒ4¥Ðu “EÇnA££i]Ë)»2ä~FÖ÷ ‚.½N›\)6mÙŒ,yDID7÷9eÛ©œ´µÌu×ïãÎ{dëI1,›z™$I*×é/ø|ãëײûÁx®Å9çžÏÙ_‚m› Cî¼ùëLMbbõz‡×ñæw¼Œw¾÷ÞÿÉ/ðþ÷ÿÝ^ v…pÙé°zí úqHu W‘<t”áæ ¥’Ç9J¥¤YŒ&Á+¹ÌÎLãz.kÖ¬¢ÙlEI’’eEœC¡`ŽI’„4MI’„r¹¼Ônj&°é& K[3°l™GH:stfxÞ žËÊm'O?04t*¸¦Í½süΕɉ«7òî·ÿ9/¿ì•<øÐcŒ­¼÷ϾD;I¸âEëùÈ[ÞÇ#óØ&õ•«ˆr›È0(Õ]²lžžß"öû§™ÅñÙ‚ØdÔDÚ: ö 0l’Äà”SžÁGÿf WüÆ~÷Mïä±ý‡Hó„«¿ðY^õê“¢ ‰÷ÈDÊ€iê‚NSâÂç=—ëÿåìûÞ­l8ÿ<Ð ס¤Ué%!ë6nf.ê‹”ñ ÏæØÞݼë]_bÒËùý÷^Áe—¿xÃÜ|ËÍ|öãŸf׃÷ñkŸÁ©'o‘rÙe—ò…Ï}“Ï|æn¾ûÝ+¹ò7_į{%Õz™Öü4–åbÅ3`ÿµóSÛ¶q¹øŒ‰¢hiì_«½^¡¡!êõúâF›ö´ØÌì BÊ¥ò¢+`y¢²Œ…&t½’>Iÿ(J·ÑÝ_~bUe´Ò­tÏð˜pÇXãMš&mbz“·Ó˜Þ zíT\{`ðoó ’.Yÿ(ip¯y6޳’LåÔeŸ–Ñ"T!3ñ ¶a£‹ebõ?L\¢ÈÉIIÑ4Ɉ3„·‚´Ÿ’dÉ/Ä{Ìó]è4ìmÙb>žg>™'T!U–ã –ñCÏ¢,£×ëñè£rÓM7qÇw$ gžy&/xÁ ضmÛ¿›ž$ GŽazz!µZz½¾´aª”baaC‡áûþ’Xû—±Œeü§…q\¸ÄÿõŽ†Æ˜3ÆéõÓ¹½w;Ì<@ͪQ³k4 \Ç¥öØÕÚÅž…=¬°W°¡º±ÒÆr¶îOG¬H1’$MAhȬ ì9š¦ðJÕZ ”ÁÈÈx‘™ªr´ÅÁ¡T.±÷ÀQzýn½‚aäX¦h¤i²Hp†$MsÇD7tò,#W9‚ EB¹ì†aãÒШQ­”Ù¸q=ûì¥1?ßF1Y–Ñl6s6`M/ˆ?<Ï ‚�Çv(—Ë´Z-„&Ñ4 ß÷©T*˜–EE$qŒã:ØŽKà÷ñ<o)/4M£¥¯°m×u±¬ÂNÄa£iàº.Q'1†4ÉòÂ_4C ‚ PÃ>SðÔ�œ¦)išbšæÓâ�ò4MGJA†´Z”j300€R’,Ë£2ô²IžäxŽƒ.5ò\'ŽÒ\'íÇ$iŽcZÄABk¡EÄ´ú=ŠB¦(¥S« ÐnwH…æ»^ºnÐïwȉà§ÔXqcèf!DK¥ã8¨Ì.HMµ@H\LËô¹2¸ÿî=Üró}¬X —¿ü%¤B§×í¢dyÎÜÜ<O<þçûL¤Q(fU–!¥N–Äøý>ú¢Ý6ÚRn­®ë ²</rlu4KÉ�£Ë,ÈÕEåªÈ†e£rEø”‰.‚ÞÝùy²À' ú¬Ý´‰Ä± RµÓ¦¯éøiF³^ãE/|ú˯óå¯ÞÀ¦· ± 3 ®»æŸùÎõ·ròæÓxå¯abõD¡BÒlZöqøà.~`'›NZÍÈD“Êø¯Ýz6}»Ê;ßúY>Ïå—_Žcš¬^½™¹ùI|¥ŠC¿Ógdxƒu, ØóØ’4dxxDZ8vìÈb>¯K¿ßA×u:¾ï“$ žW& CöíÛ‡®ë¬[·MÓXXXXºÎùâ¹lû> í6UÃÁ.ÕÈ{>ÛÍôñ£ 6뜲cé­¨OfHd˜c<üÀ£´ç€`?/}ñk9°ÿ(¿õÆ+Ù´u%û›0¸Ãù¾'ö-pp>åü‹ÏCŽ®&¯Œá8uúyLka†¡Æi?av®nÛôCÝ@Z#Ìw;Líë²°÷^®ûöƒ ¯Ô˜ÏîÃ[ÍúSWñ싞ˇ>òŽw½‡Ûîx„nñšß ØwàqÖ®[I­Y(ÉSºØU‡ýG悈‰Í©|×å¶k¯cÃYÏ ¯”i èºÅÈÈœÕd÷—®fõþ½T'øîžil]ñÚ‹ÖpÅ+_C’÷847ÇààkVsÕß~’jsÌ:i:ÍÑ£{p]ÿõ;Øÿä$_ùÊ·yÛÛ®æïÿþ›üî[ÞÄ¥—þ¦ž ò„8Ž0–‹ÿË&)“““?~œ8Ž)•J <MmÚjµ˜<: @³ÙdhhhIµòÔs\ë¸ÅÆs—Oì2~<¤…*ëó ÷àˆ>¿ì! I–0Û¥µÙ\=‰†ÙÀFiùp@˜/MÝùÈç`ݬyÐ�~H¥¯Ä]Äü^¼¨#HLP9šÐ÷Æqt‡ýý™?ÌÈÀ¶a/ÇüGŸ¤´hÑ¥K¦#–È!ÔªPlž Ól’Ê”……yt¡ãã3Ï<5j˜˜Ë×K‚€Ûn»ë®»Ž;î¸Ó4yá _È…^ȶmÛ–b°~”RK1O©U‡‡‡i4O+¶ô}Ÿv»mÛT«ÕåÒªe,cÿ¹ó¬$avv€Œ“BcÌc{m;|”û;÷3³~†^¥G¢%L÷¦yðèƒÜuà.:y‡Wl{[ê[ÚrlÉOM¬š–AE¥R%ð{˜¦…¦éô¢”¤Z-Ñh4xø±caD«Pr,„‘’g)Íâ8CåŠ,ÉQ :í6ºÔ0 §°…/æ\J‘“&Y£ëÛv‰’?ì14TÜc{dŽí‘$!§ž¶•ûî¿‹^Ïgdxœ~7� «EAþä$IÊÄÄÄRq”R9Q.æ—jX®ƒ4dA¦)åje‰<Ò4~ ë:Žã"Äb˜ï",«(JŠ¢ˆ¡¡!”R‰ Ψ‚øL’Û¶Ñ¥†Ô‹,ÕN§S,º‘R/,èJ‘$ÉÓ”ŸP¨›4M#˲żÒÃ(rKƒ `hhh)6à©\©§È^Ïóèôûô}‘@Ó-·Jùˆ0(J¥²€†iá;ºW¢ÓéR*Ç+„$ S4aÇ)aE ¶åb&ö¢²QJ)‹"0A‘±+¥ŽeYKÊQÇt‰Óœ(‰Ñ4a4tÀÆqj\ûO’$pîÙÛ¤;7…iÚèºÎÂ|‹,M9õÔÓPJÑiuÈó×6B KÓ4ˆãÇvÒÅB­,+ìýYž!4$Mñ£ŒªW¥;?G¹^CD!†e@#£,³ˆE–‰?=Íá#‰‚‰ñ œñ’n‡Ü´h/tæÛ(ÇF³,t«D0×á’‹/â±GŸä†äï0Iø›?ý�––2Ò⯿’á¡•¤äŽÅž{îajßQêµÞ€ÃÅ/}ª¡!k·0û“¼êy/Aµ}>ù©@¤o|ã•´;Ó8v›™¹ÃèZN¯3P½®”R·�ÅÑ£“(rF†‡Q(,[Ƕ‚ eÙ„aDÇ8ŽÃÐоï/©ñt]gaaa)‹µV«‘96B7q’WdÒäо¸¦Åg‰;ÐàØôQœ 9±j“D^°ÿñû/äÃþ:÷ï~„±zƒ¿¿‹û¾›JµÁµ~/ëVlä-¯zû<Â-{Á½ú[üõ'>Ž'MázeH<´8f¤±JeD}ÿrã=|àÃÿ›ûï|ˆãûá¤à¹ÝOí$q`dÓ(¯|áÅlݸ†?û‹ßehÈeÕê&ý`ŽrÃ!'='Ž{ÌÌv1, …}÷°cÅ VnXÍîûî‡0‚ÑLaPÒ=Ô|áYœ|êVüÉ#T›už÷Æ‹8û‚cìÝù3wßEmËr=djö#ÃuL¥ÑëNñ$R" ŒR¶mÿÿØ;ï8Ù²ºÚ÷Ù'W®Î}cß'ÞÉ3ä¨ ¢  $ÓsQœAD1�‚OQD%(ò2äaff€aò½sÃÜØ·sw媓÷~Tß–‘à{‚‚P«?ýOu÷9uNí>û·×^¿µ.áš«ϳ~õeÜñµ[ùËwÿ=Ïùµ?äÌ™y^ýºõɲx0k}Ÿ8*qï½÷®=›‹Å"¾ï÷Õî«Í‹‹‹<ðÀÜpà Ì/Ì342ÄÔÔÃÃÃ"V›Í&sssØv?Qó[ÛµÖdiFm¥F¦2††‡(•Jµ¾;„@˜.†7Œ›mGé”Nç(ž·Ë*ñ?/ë^)Z·HÒ.iš’3sxÒë+·„ÄÏMQy†ÒÄ+÷Ò©E:ßÀ¾iW¿åšÐ#UËÉ,–•ÇñÖ!¬<¬Rg¶a“3sh¤CS7±°p«�Zé5Õ½çyC|ONg1sáq’0âŒP´Kd™¢Ûí’féƒÔû?Ìçy„xyKX ¡eÔÚ “Ra ìX+ÓÓÓ<x믿ž»ï¾›,ËØ¸q#[¶lÁó<FãAsŽýÖy?IΜ9C£ÑÀ÷}Êåòƒ¬šÎËz½¾Öù­¤ë� 0À¶m3::J>Ÿ_ëšcµ:’B2âŒpAåê­:³Ù,Ÿ¯}žƒÁAÂVÈ|m› †.`ga'#ÎÈ fúÏ«hÑcÂAA?å!H´Äu=´ˆñ<Ãè'Ó§IJ"QØ!NšHi†Šn¯KµP M2)q®yˆJ)QJ“¤1IõýH•ÂHúE™ÒT*ffæØ¸y?ó‹'°-¥¶n¢P(pöì»ön'èN¯¶Ø{,,,år00 “0ŒW•¬A£t?JiÓrúaM½f«ƒeš¸ž×o}Îçȹ.ËËËk¡=qœâû’N§Çúõ±,›N§ƒçù½^¾H8ŽÃñãÇÙ¾}+Y–×õú„T¦�I–f¤iº&Õ‚€(ЍT*†AõUŸç<-MéÐëõȲlMÉjAÐív×Ô¡–e±´¸„¥%CÕ*†a“i¦è=:-A¹4B¯WC§Š\Áe¥±D!ß×Âd ,Ûí·|;.q¢XXZ`|ÜÁ±]l×%MC<Ï¥ÓéÐjµ¨TªH)I“l• þ7ŸØ,ËÃJgHÃE#ˆã�›8z½Å—n8„›—<î '²L1<4ÄââA0>2ŽŸséµ;˜fŸÄ5„A%Äi€&Á³„ÖDq„±äÕív±miÚ„q¿Ý´<â„göÄi¶Nm¢ÓªSðÈçû*˜$biq‰4Ké,O3\-QݶAÿ½ÑqÚÍ89 ~±Œ&õ•2Ö\pñ%üÒ/>•O~üõ¼õßFgå רÉ5—^Àøø8¦t8{zIŒ_ù&w>Êú=;Ùñð«¨÷–‰Òæ2ÓË4j1A0ǶmpÝ Ÿc;¼æ5Ïúuùù§>‘ƒ‡¾A.'±LC ’¸ƒ%l¦6Žqfn™$íîaÔ£X, tB·àº.Âð0Wýhû!jÛ¶Éår˜¦¹f§`YÅb±òµ:¾¥cS-Wñ“ŒÞBîü"‹ó ¤Âà’«®¦Ó ±ü"‰²IUÈôò=Z³qx7/~ÉS™>u/'N6øÚ]5fnûÔù¼òoæ!×\Æk^þ:>sÇ=¼ëm¿Çÿúí§sÿÉCìÞv§fرë|ÂÖµÅyò2O=‰8tÇ!þúŸÿ‘~èVœ¼äÒË.à7žý4®Þ÷0þêíoåâËF8ïÀÏðå»îçàôíüó‡>Î[5ز¥À‹_|-;¶_LÐõˆCMmÅÂ÷Æéµ;”K°l›Ó3÷’Åœ`Ûùr×í÷púþ 1ÛicÅËŒibé¹ÌÞsoçf¶\u€dlc¡Ëôm·1¼c’¢aH—æÒ±öNL­=aZ­€©©]Ôj+\ÛW¹íÖûؾõ<žÿüQåõoxÅBÂï¾à7ˆƒAxÕív›[¾z §NB)ÅÈÈÕJõA¶,GŽáà}93}†b©Èþ=ûÙ»w/ÕjõA ¨N§ÃÒÒ–mQ©T¾mñ”¦i_Ù'T«U¬>£ìÁ:Àw!W L³@±¸—vç0ÝîabRºÿ£ÈUFë.±ªƒˆÒÂƃ.Áv†©V/GJ‡%‘Ñm5àômH{#nÉÁ°r«×‘©:‘Z¢#|§¸¤û æL ‰mXCPWuå`6’ŸÌÿ·s]'‘Šh…-Z­&*ÓLŽNâÙÞ÷lõ‹²ˆ³i’$bÜ¥l—ÑY#>[µ†úa_[»Ý¦Qo0$úA–aG‚z+%ô2 ¾†Áq@¬jÍÉ“'ù¾À 7Ü@£Ñ`ݺukb™ééifggô7Y–122ÂîÝ»¿X=}ú4µZ±±1ŠÅ⃈ è e‚UÁŽ”rm-w®Ãr€àV6Š>Ÿ766¶Æ™œ{îi­Aƒ…Å…Ãâàð¡æ‡øzíë¨L‘6SFÕ(WL^ÁU®bÒžÄÇ«ÿbUJ SØ Ji”Ò¸žKœÄdQDw¨ÕH³€8Žˆ‚ŠžïE&¦”ŒŒŽÇ­fÆú’´ $ýVq!Dß6ÀиŽÝ/µUÚ'Éâ˜v§_ò°,ÉúXÜÔ�� �IDATõë¹õÖÛ¸ú!S.— ÃR¡Š“Ë1<<ÂüìÝV—|>×÷AUЉ‰ ²,[#ûL}Óv» ÂÀ¶ÿm±+¥ìs…!ÅbqÍo§X,¢4šÍ5Ei–ex«¤kÇk©÷çÂ¥×%ŠSlÛ!Í"ŠÅiš`YÖ·W1*3ι°)Ï“kéëçT­ç”«†aà8N_U ûÞ°†!ð},S(ÕOQ®ª¦Ù7©®‹ÜpÃçù»÷ÿ3.ç—~ùg£X® EÈâÒi*ƒZcÓ11-‹¢“[#u•ÒDaJšjlÛ%çç×Ès÷øœ’7I’~ÁžilÛÁ¶‚ Žûª]­B†Oœ„q ÛvÈÖñOüfÑQ—óÎß4¶¶éõúÇ®TªR²²\g¨Z& ƒþ?¸Ö˜–‰iû„a‹$‰ûd¿ÒCâ8Þj®À´Lâ´ï æû%âÞú¦· Ò.ô¶7£ƒ�e(tÑkwˆ²Œ4I0L“»/ Ý¨‘¤&–ëÄ]‚N„²lTœ2\ª Rˆ£€u•„1ô¤Nªº|ðƒ7ñ¯ÿòvmª°röó3'¨V'81}œ£'޳yËžü¬_ 0RWÎR¬–ðÔ0iGc»B„èV‹µæ4×^û,æj¼üïDXð‡]ÊâÒ¶­¨”r˜RtÚ4Úu E¿H’FC!„¢V_Æ÷òt»mâ8Á4-‚^D£ÑZ ªËçó¸®K³Ùüw"ýqÚît¨ $a—z­…gaÀÜâ"—=ä!˜åa’n›ÄpÂEc2:²[‚ˆÂv—ßyÞoÑ M;˾ýøüîæŽ¯ý"_p OV øÐ?‚cÓ§‰¨ñõ;®ÅP’É‘ $Ý„ÖR ©a~n™¹EMq8ÇùçmÅ/I,3æ«·\Ï­ŸþÇî9L”ºÜòõÃtDJ1ÅBßë03ð×¾•O}âf~ögŸ€çÚ$i‹3ǶnÝB–z(02¼ŽíÛ6£Ã:ã—\ÉԽǹõ®cü£ž@9ñ±mAÐj¢Ú=œR‘j¥Hœ$t»†G*ì9p7ù‹l¼ïnÆ~­f—•¤Ë™™i\/ÅÏ Nž:ņ [¸ó®;¹î…D±0Ê¥—<‚ôã¼ò5o P.b»‚7¾ñƒüÔO=Šõ““ƒYëÂ[ Ç!MS9uòaÒn· ÃpÍëÚõ\öîÝ˾ýû¸êÊ«¸è¢‹¾-%¸Ñhpvú,¹|¥¿]½%¥¤P(÷Ý{ßZPÞC®ySSSƒc€ïR$Héá{CZ„á)², ŸßŽiæÿÇ\‡ÒŠ… ÎLoeZŒûU,ù`"O``™%Š¥óA zñMD‹‡iœü…É«É_‚!]²l‰Nç$QÔÁ/ìÄq×é}Û9mÃf}n¶é°Ô^Âöl*~å'¶­M%Šz»ÎÍ‹7sÓÒ4ƒ&£î(6îê.&ü Œï`6¡µ&R§ÃcÔÅV.òÁó<&'&Ét¶ÚöÃa”Ëe|ÏÇölœÐa½·ž¼eé%½ÍÀ~e€þx^^^æØ±cÌÌÌÐjµèv»´Ûmî½÷Þ~&ÿÛ(ˆ¢ˆ /¼ç<ç9Œ=ˆ4={ö,õz7®u¼|+Éq.Ðjff†[n¹e5[¤Ëå—_þmuÄ� 0À÷û|‹¢ˆ™™ …£££kÙív›(Š0 ƒ‚]àÂõbT h?À|g£l°1·‘ý•ýì(îÀ—Rõ?M¬*zµ[eI’’ÏyR€)±m/g2:6B­vF‹rÙGJ£ŸÒ.ãc,-.oÞŒ)’$C‹¬Ÿµ¢5)Á0­µð#Ûî‡u ˆ“\Î`ß¾}ÜtãWXY©S,9”JI”a \xÁ…|åÖ/ñèÎÃè¶K}¥è¹Ôú4Mñ}Ÿ4M‰¢­5¦iâz>qÜWáó25MÓ4ét:X–E.—£×ë·GKÝW0u»]z½¹\Žv»M>Ÿ'Žc°ï“Ç1 H“„œ_$ b6lØHt°,›8ŽÂXm/5}^&çûA@¡Ð7êt:k*ÖsÄo?¼J‚-V¡’8ŽPª}QaYQ’$B+ÚÍ%®¸úŠÃ“¼ý]Ÿàçá:Æ'§xÃë®åŠ«.Æ0O£DZcÛæÚ=SJ¡µè«3Ó Ó²Ch4š”ËUǦÛmE…BqÍŠÀs}â8¦Ñhcš×uû»´B ‚°E/ vÓÌqã wRkÀãz“%tcÖHYµêßZ*—׬,Ë"^%v ©‘†AöÐ ~žLôˤi’*Ò Û±q^¡Êë®{wÞ~Œ·¼á€I>Wdiî †Ôôz^¹ÀpµŠ›/õ¶;†–’F7&JM*•2iSp-t/B )a//ò•[oáÄ™Àâ‚ó6rüØQ6oÚ„av­2;7͉3GÙ}ÞnTeˆ… Ç‰Ö<eË hHìFÃÉS)®#± \§ÉXÕÇ Ë,Ôê¼á÷ŸÇRm‰×¾þüVíÉüìÏ<M‡z» *Æ”&Zrù<ù|8P*Áv$Rz‹E¦§gi,-à8.­f! J¥âšBúœ_±išär¹µqfÛvC…‘i\ÛB)‡ÄÎ娾3 KŒmÝFÉò0¤G¯Ý¡Ñå衃ĵNù:ŸüØÌ×RœŠ!›ìÚQ¦è–˜?ušÅ…%òè¨ÅþõSüìÓÃ˯û-êµF·RÊ­#_áºëžÇß\â™OßË^ø\&¦v3³°€ë›dù¬ÄÇ>ðªM®yÒï÷ §K:ôZŠ…ù%Ò(åo|+Ÿúô«(ç=.¹d7 ó¤YˆãX˜¶ÇÖ=e¶lœ`ÓèW^vö†,ß ‘VÛD¸4GZqÈ—]Ò,¤„‚ŒÑ©)ÒZ›ÂÎMLœçèWoeøÒóй¢C<Ÿ°eÃz¢^m[¶“)ƒ,ëõÇw1µe Ï|Îÿ"ɯýk9}æ,"…·ýñûøÃ·¼j0ký�ày{÷ìÅu]æfçX\\dee×uéõz˜¦Éúõ뙚šbllŒ]»v±wï^†‡‡¿íX8p€\>Ç–©-ògBËå¸èâ‹ÈTÆÌÙ<×#’$|ü‡°í †‘’eÇótºàyë±­!„øÑW°+­iD]Ã.£Å1&rãXXß±h·Í åÒ˜Õ°GÔ8Ž”.Òt0 %â¬N’DF ßß‚iæ¿céo&CnßZêtûM£IÏëQ ð ÄwÌ÷æ¹kþNnYø ÷÷¡…&̾<w™Ê(ŽÉ;ùïh ª”•p™LCÕ›$g•‘†ì[;é 唲/f&¾•c[i))µè ½l š*0èöøI‡‚¡¡!vïÞ ôm|έG¿[÷ȹuä¿W£zžÇÞ½{™˜˜`Ïž=LNN>èB6mÚÄÕW_ã8Äq¼fðöÏ`€~<¡”Z*¥Vóo‚µ× ß½]ô‹<¬ð0öä÷0×Cº’áÜ0Y!/òEý÷C¬šÒF+ÐYª‚ÃÖÑ7¨…CCE<wµ€1MlÛ¦×íw_MLL DqŒ!úÞ›A7#Æ0$™ŠIÒ~»±iŠUò²¬Ÿ>^(ø´Ân‹B¡B¹\áô©ÓìÞ·žF³Ž¬FÍS›ùð¿ÌÑí´ÛªCUFGG×Ú-<ÏÃ0 ’$Y#mÇ¡R©ròÔ4a˜P­VÖ|<»Ý.acYîj[~ŒRàØÖšBóœ·j’$k“a‹¥Õ¶wã¸k è0 ðýˆlõÞõ >-%–eã8Y_½¹JbeYÖ6Yݽ´,kí<ýÝS…idYJ½Ñ^ó`õ}Çͯ…ei­A)’¸ÍÙ…Æ&ÇxÕ«_È¿|ì ¼ã]åÏ|ù—/ç!×ìgeé0I!­¾/«Öýv—\.‡4l⨯òì„=”Šð¼ÜjKkµÝ?&Š"|?×où"²4C©Œ,cÕ %M"LÇdz󘖅‘uq=‹Žæk_¿“|žôäÇaÛ‚N+D% Ë4‘¦¹ê“k ‡ÎJ a°ºó¢È2…!i–!´À”˶љ"Œb¼UfÌ9˜¦É]·ßΧ?y;ÿçSïfÛ¦q2•°pfš,ë1:6L¹ZBš&½8d~¦ÍøºóÐX$:ŶR Ä –HÏ F5ÔŽŸäŽ{ïàdm‘Ÿyúÿ­naó¶Ûyõ«ÞÊ?}èƒ<ùqWp럢Z-r哞‚Q§qr†îì2Êè!'Jå^iˆúJB»âù6޲HT ¶d‹ru‚ÙåãüñŸ¿Š‰?ý+þð­Ãñ-öïßÎȇĢXªPÎ z!óss<ÏÅqMâ8¦V«a¯¶+»®‡V¶e¯)³,#Ÿï©ååe’$! C´Ö«^lA§ƒ‰¢Z¨Ò«w¹ãŽ;˜Ø°‘-»öptnÃó·sòÔ '8ÃüÙen¾õ>â^@Ö\}`”b1ášGíaï°mß.l×#¨wò*|äýÿHmy‰ç¿ð•$”ÆóÌ.fiÞA(Éûöó¦·¼ƒ/Þt’ç¾äÞðÒßÆì¶™Ÿ»ŸrÑ'ÉÚôzg #Ã)Õ!ðƒS¤:O­021½1‡WT\zàì»hœ×¾æµÜôå“üüÓÊs~噜:u”8éqï¡û¹÷¾Üwëí|æÔ,ïxׇ±]h/ÆM›‹/»”í—¹JBJbzÌ,/³%Îé(äÈ ùG«Ì}ù^8xoj#eQŰ\+G!ïÐîÄ\qù^®¿þ¡Ìœíðö·ÿ-ïý‡÷sæìF&†Ù°Ù£=ßã«·âè‘i.L\ßïâÊ÷|öíÛÇæÍ›éõzAÿ™Ç1išbù|~Í{µT*Q*•¾c±qùå—399‰i™ŒŽŽ222ò s‹EñˆGpþyçÓít1m“ááá©_à{l å…|F§w’v÷^Âx‘áÊ•«ÊÕý8Ó ¥Á'G™ò÷lÉ7Í"¹‘‹Òcåä'h5ŽÒKš˜•qìâ:\®³ÓÌ}ObY ‰4úÔhÑÂYýúIQbh4ÁÑö>½ði:Y‡+×]Åp~˜nÖå–Ó_¡¤Jl1¦°†7¬Õ»úì2M·á3ÎTá�ÃöF’8¥¶´L¶êÓúïI§ÿî…d³Ù¤Õj14<D.—cKe Ç›pºy’ÆÐùèÂæÀ�!ؽ{7år™V«µFvžS©~'[ ¥•J…-[¶<è8•J…g=ëYÄqL¹\^k¿ýÖßÙºu+…B+®¸b5(6ÇØØØÀku€ø/y¾9ŽÃøøøv.xwh¨ŸïpŽg’†D"óÇ(ÚE„8¦ƒ‰9Pª~¿Äª´,Ò8#Õ ‰Îˆ²”œÈ¡8×¶/é´Z8Ž…ç{xù<¦é€ê·ú+ÕÃÏIò.ÔW"0b Æó]„e‚Òı0%¶i…!Â4 ƒ$ŽHÒ ×µ)—KØŽIžÉÉ 9<Í®Ý[‰¢€BA³RŸÆqM²Äàø³\rÙ. %z$q‚mYr¹¾òR) A$Ý^R±‚·¼Ôl6ðý<qœb[.¦´Q™Æ÷Š$IŒ0]*S‹%”Ó´ÒÂ÷]&a’‘(…4òN¡o¡àzÔë r9Ÿ(Nð\¥ M5Zi eóóX‰AªR,Ë¢×푦)Žë`炬úä¡Öš4NA ’$F%Š‚_Âq-²$²8E'–ã Mk–qìŒ J¨”-®¾ê*þæÝŸaa±Íç? üÅôB/_Æ–6ƒ )0 P"!¤iâå•„mHR×Àw]Ò$&ÍžëáØõZ Ïsû*Ý($I´JɲO¸H#¥/“i…ãø98Ïɳ-.¾ÐæÒËÎ#» ÁÈ Ò0Æ54ÐkvPB!J LCâûy„”±ƒ_00h!Ð: ïåvR­ÈR6ôÂë^ý ¶må[o$ïJ´©©®ß•0$ B<™§ZrèÖWð E”NÈ¢�ß± ±M=»Â=7ßÄ׿ñ5ÊÕ ]z€GíÛÇ‘ãÇØ¾c}ÜU¼â%oçŸ>t3_x1»<”õ[†:fåØaŠ¥6ŽTN¯ì£$,×–ÚÁ÷Á”jcŠB9O’jD’`ê”Nmš—^÷«d‘âcý8gNîç¥/ý]ÆFG©-/So5ñð}‰ëÛ4uÚ툡áa+‡V‚4ËôpÆsX¶M­¶ŒmK&*SÄYJ§ÓC!±m‡8‰@@¡RÆÎWÚ¥[ïrðÈ<wª3¶µÈo¾äMÌÖgfžñ±I&ÖU™Ú3É/=ã—Ø²q=ë‡ ØÅ<Ÿþ»w²{×z6_y§gNôVðóUF ’Ùc·³eûv n™¥†âM¯ÿk¾tëÇù›¿ù&GvðÎ?ÿ+þøþŽß}þÃyÕ«_@P;MÞ”ò&™hã¹ …á*µ^…ÙŒŒŽÓíÖ0<ÅhÕeþì)Léáš’oÜö)vî<Ÿ¼ïݼèºWòÒý›Ö¯ç¡¿Š(n±yÃ~ñçGé,ÖˆÓåVù“Óüå[þ”ÚéC|üäf>ТeItª¹bÏŠ$LuK Mì$çæ‰u›ñWsèöøæWîe›U ç;LŽNb0<¶•Z­ÆxaÏ/±²4Ç—o¼…3Ó‡˜œpx䣚ÇÿÔc¸ðü xöÓŸÏ¿~æžùk/æà‘gf®ï–e1::Êèèè÷}¬M›6±iÓ¦ïúsÇqØ2µ…-S[7~€ÿL™†y,{=®êDó¤É½à ž{.ÐêG¾â_-Õõœ&/VnKÚÌÌÞÄéæq‚ÖQ¶ŠóÙ]ÚˆçŽcÛÃÿ1©¨áÜ©~R ™Îh'mNuOqºwšmåm<zÃc˜,M2Ý9Ã=sw³Ð[à`í¹|žqgüÛj™ÎXéÔöK¬Ëm¢â !âxíç?* Êsß–´¨úUî«…L7§iFüÄccc?MMß÷9pàÀ÷üJ¥B¥Raç΃›?À�ü·@ë~VR–eôz=ÇÁóÎÙ$þ»µ´¾Íši€ï³bW¢´¯ÒÑhLÇ!É@k‰ëykAåR™Z½ÃüüÕâ®ãcW-ê&–å³ibós ¤ífGؤQŒ!™R½žïÓlw‘Jcú9ü¼ßoƒïµPq‡Ê‰íV¸ì²KøÒ—nı+$i@³¹B.WÄur¬_7Å¡ûNpùÕû1¥$Ž",ióÒ$%KBHÏÂreßS¢ÐW7(R(”H’i˜ I¢0¥EaL«ÓBŠœëÑ B$×ÉÇ1Q”’/”èözÄ™¢÷ƒ”L)â$ƶsÄqB§HÛD&€4ƒ `:&BJ„Ö!‘¦E¦4JA–¥DÑ¿¬†0p$LQBãxhM&Bö=“´ÀÐ!L‚®"Œ„›1<4†±k‚É ‡Ùù6Çž!QÕá*ahR_ª3ìض (ÒXaÛÐ š¤:A‘Bš&Íú ¶åà»9T¦‰£ Ïõp— ìày6J§Ô;mÊn‘4è‘$=¤[Ä9й2wßy+°wïzJ%‡N£‹©­¾Ú×±ÂÀqÂ$CiÚ@)IÖOªÏâ”N7"ÅÆ2Á’3ËÐÊÀÐ's>Aœâçò<|Kt¸êâ]Üüñ²ub”ñuÈ\Å "l…hÓ¡\¢P(‚ÖèÅi‚î<A¯KÒí’wód­‡î»Ÿ¯ÝrÕ±q®zØ£Ãe¶îÛ‡Î26n§1sˆ…•„'ýÌE|ø#w“Ùc Oå豄!Àð\jÍ0é’¶Ò>)œ&˜Ž¢X.Ћ:Ô‹8މçP6|:õ6½ Êº›—¾àÉ<ûiãÚ羑gýÒµ¼ímÂöíûÈÒYâø¦™ô=aÓ„B.O1_¢ÓêaƒB.‡i˜h×@“R­æ¨”+(¥™™]Â0=J•1¤´p=ŸœËEæfgù—oçs×ßÄ}_8ÈòL!¿¤ÊフÉñ2{¶l¢XtYj/Ó ;l­R²#ÚºQžöÊ)¼¨Hg¾†L59ÓÁ9j§—iŸ] zÉ.’0ãéO>_½ï ‘ ýä<òÊ2¯{ã{xÌ£7òšWþ:As†,íJH•eg¨´‰‡çxH×"WcÃÎÄQÊJ´È†ÑÍ8¦Gªº¡h.Ÿ¡ZÝÀ›^÷jN{>¯zéë¸þsÿŠ–‘tÈVjtDJf JeͶ}ë8²w”k®¼‚?ý¦OÏS7KÜtŽÎò<ù»¿à}Ÿ¾ŽØðظi;?÷èGré–IÂÂ:"³„¥ËX½z‚ØL¹ó®{عc++m^üâ×ð‰ßÍSžòP^òâ_åªk.Çu%aÔ!ŽxÏûÞÃã÷‹Üu×ÑÁ¬5À�?y”�àâ:SŒ yôºÓt;ÇÐJ‘/lÃBH~TeyÈPtèÒ¤I…ÊwmÉW(‚4àl°ÄÍYÂ*¦§cžêsIi Û.ü?ŸsÁ£J÷'fÄ(­èÄîXþ& ½6å7qñжçv90áñëŠÃ+‡ùJãfFFF(抸FÿIC§1­^“SSXžƒçw±­OzØ““kmÒ?L†ÁÐÐåR!´A¦2êQéÞq“8M±,»¯à´80À� ðcH¨†aÈ™3gèv»˜¦É† ¨äÿ;‰U­Õš'ƒiZ …¾‚Ò±év{kÜår† a`Û6µ•Tfë„ɱuT*C4›Áª?£Dë> fYÖZ›å¹( CÂ0ì³å–E±X¢Õí†1ag‰]»vòÙÏ}–ÙÙYÆ&|¤©(ò˜¢ÈUW_ɇ?ü¢èñ„YLFØRbˆ˜^·‹!Á0úªÅ$IQh#a®z¬öÃŽÎy®ö¢I©”Dz j�Ë4†"‰C„iF}oÖ8Ç÷É|’4!I"Ò°oiàj‰0Yf¡2ƒ,5HuŠ”¶e‘)EÄYL¦…BÓ4×|-ÏÝ¥T?}Õ¯Gé×í§¶7u´Ä8ŠWÓ^!ŽS¤‘‰åI"fÈ ðk¿õÓÜyíßóÕ[Žñ¾÷ÜÄe—m¦2lã¹C4k+ †Ìa¬’»Z ò…Z§„±BHAÐ °V ]­û©°Ò°Öާ뺡hwû¶ ~.ÇÒÂåb…Xõ‰ä•å&ŸûÜg)æáIOz,q“$}+ƒ$MPZ£ ƒ Mœ&dJãû9„`õ[ „Â0¶4Q*Fk0$˜ÂÀò DQ„”}z7—ã3Ÿþ,ì¾€^£Ç{>ð1ÞñÞ?¡ "|ÛÁN%¦°q´ [¯“d=‘`¤F3á–H•ààm_ãã×™g\ûËl»æ0LT§®M¼<ÏÂò gægÙ°åBžû¼ßäÝïy×þ ì»øiXV™Vc™B¾ J¢l[:ô¢!L|¿ïµô�#¡h.eØf›^§CÎïo„ALŒŽ ñ¦7>—¾üoyäïåmo{!O|Â#©Ëô(=l'% "õ×Í¡tŠaj2’d!Zg„iåF„ë²Êd‰Dš9NŸžáÐ}G¹ýŽ;¸ùÆ[ig1{vTø³7?Ÿ{nýX&¿ò²ëè±0w†¨µB7µ2¡Zô ÛuLKôš(£“�×x¦$“ÂhŠ9ÁøhljÐFVï,®Ê„0©óæ·¾a ^÷¦ëÐF€ÒÍnÑêZiší:™ê^)ÇÆ© tÃ.šŒL*¤c`É„( (4)VNÐæ('yÃ<—'>á¼ë¯ÞÄu¿÷Û˜*båÌI»uÜj‘!¿€a›”‹1wó‹ì¸|ŠÊpŽÉ‰I&'7ã‹u\ºåÙX…Q"Yá _úÿè{ùß÷-‘Sš«.ÛHeó^&¯xX¦0\YÇñã'yå+^Ù3šÏþoÙ»w?Z§,-ŸEcP(ø[8FµœçiO½S¬ f­ø %W…ð±Ì <ÏCë%Âhž0™¡RÚmŽ€Èñ£ê%)1pqññ¿sPš„„¥t‰oÌ}ƒÛg¾ÁLg–Éò.¶V¶pþø%8öðÿ¶@ÐߢŽßÓ~àÇqôf›³|éÌYŽW˜ð'µFI:1]ŒÔ`JnáHz„íÃÜS¿KY“"U¿J¡PàìÜYž:H£Û¤guè̵H͘HB«ÑBiõm-Ð?Œkm·Û´š-,Ç"´BT¦ÈȲˆ™N‹3:ÃfŒo›x¾ÿCµ.`€`€ÿ ض½f‘)¥¤\.G‹Ÿþ ‰Õ8îhœ ¬ñ<8ŽÈç ´ÛU…eÙLN 3;;Çæ >#eR©�Vßô»Û ¨w’4Á0 ¤4£píÃ<—.Þ'ÒúDä¹Ôh-ð=ùHS°~Ý:Nœ8ÉÆM@$ÄqŠ– 矿Ÿw¿û/™žžaýä8JkÒT‘iŸ(•&Q“¥ ­4™J‘Vß?5]%5…P¤™F¢HÓ¾¡o.ç’i‹|Î#V1Yš‘Ïçð\—úÊ ®ç¡´¥I¢˜ne³Jaà8.Q¡2‰eõCâ8 5RK ÉP*圖BëþîyŸUkAiš®yý„Q€a@…H³ï! Iš$€”}/ „Aeh˜1í8%Vss‡xÊÓ”ÞÿÞøëÞÆ¾CüéÛ~‡©©<QØ^Uœ „a ”@L_àé�� �IDATiJáXΪ_jB¯×%M3Ê՞롵@kA–*â$!S †!²æØÂ˜–E¦ívÈÐÄ:žæðÑÃlؘ碓e)®ëö2 ¥"Ҷ脱¥¶ãôÇK–¢•Â4úÄ¹ï™ d‘•Eè,A …Î4ŽÝ÷U³¤ä·ÝÆ‘ûïçÍoúfÏœdÃŽ-˜¹<³õe<ÓÅ7lŠ–‹UªBQk­ ÍO+|Ã%s n¿ñfN½Ÿ®NxÑ[_F~óâ ƒ-| !é=ÊÑùã8“­;wPXzˆýWùúíw’é§Ðk÷†daeË´q,›D§q€ÊŽã!M“(ê_g©PE0??‹efxŽÄ6M‚8-é… õú,[·Lñ÷½ž÷¾÷ÃüÁïÿ9·Üt#/ÙïR©T©×çèõ–(–„©IÒZi¢Ôm’Æ6i¦ÑÊadhÒrISÁm·|“Ï}öNœ˜ãÔÉã\|ÑöìÛÇ^û2.¼dв«è.üë{ßÅ£žð Õbáì ²4¡êùX²OÐKL|׆$`t¨ÊÜB›ÆÊ ®í„1ín‹T¤HÓ¤l”™£à;˜fÀ;ßñznºçŠ“’ññu¼ëÏ>ËsŸ÷8Æ&&™>{’ÌÅv+„Y©@Ê"®ô‰S—¬2}f3_@ø.n.ÇÊÌ4‰2°]‰m9LÏN³ä´Ø¾s+¿üœýüù_|‘§=ãñŒ Qª’Z¯TÆUpŒ<–—"L²”Úâ Ahà £žAe´„9²ž .:ýÖ³8y眼ãN>ñ±›yÙ«^AV©’Û°ƒG>ìr®ºüB6¬ßÎ_¼ó½Ll˜$êö¨­4ˆâ6¶#IâÙÙEFGʨx™½àiüú¯<v0k 0ÀOnɰí†Q&¨ÍÓiÂwm ¦Ð ýþNãˆzU †‰mº8ÚÇJ=„4ôö2¤+Ù ‡º‡øìÌõÜ6}+ûJû¹tìR»é± {Ãÿ_çÍÈHIÿcëSbµ¶8[›æÎù»(ø9Œ^°3B„$$crŒ¼Q ›v8Ò<Œ¸LFÃ&Â1˜^˜æØéÀÐHÂ…”¤’SoÔQJ1<<üC'V»Ý.Ë+Ëx¾‡Y4ñ¤GÁÌc ‡å^›³Íe¤“bæ ¸ß¡r€`€þ'ãœÇêºuëôÚ�ÿÍUzš&kÉõI c•ô ÖçH¿J¥Òr½5Ѥ˜ õvÛ²0\› ˆ¢xÍ÷ȶí~àU¯¯‚µ,kpu]‡ ¥4žÛWC^yÕå|ä£ÿÄe—ïÇv D™!£cãìÞ½ƒ#‡²gçnLÓ‚$C ð<Ÿ,MúŠÔ,Åq]„€0 ‰¢�0HÓSÚX¶…‘©Õ”´Œ4 étûÄo§ÛBš?—ïã·Z˜–Õ¿³ßÊÆ*ÉVÛ‹2¥ÈR‡$V¨4Ŷ,l×A©ˆ,I@¥hR`Ú>‰‚8Ž×B²lÛ"Šb”꫈mÛ&Kb\»ß^ßiwV“Om¤!IÒÓ”«Äj‚~±Êû?ð̯œàw^ü²¬K7¨ñËÏ~¿üô_ãO.wÞqB¡ŒíX”òäIH’„  ¤´ðl„AÆdqF7衳¾wU§Ó% LËÂu= °¥TÿZ̾Q+I’ ¿'ÉÒ,Ce’ë¯ÿq 7’÷Ò¨mZ Jéc9.†a' a$IL¦2Ò$Fß=>`K£¿„Ê”ÈP†*ãØ±# LrÓ 7119Îú½çóçó×ìܳ›ÚR‰ÑõøŽ ™D÷2gOÓmµ°-¨®CÖ;œ¸ó.¾ü•Èyìo>“âh…³‹s˜YÏ”4NgéÈ)Ï¥0^dÓŽÍ4zõF“|±ÊcÿHÞõf~a…|AR.Ñl-áZÚÔø¾‹å[¤IÖÿÊ\×%ËÝ ZS)ûÄqËQ‡v§C©\Á÷MÂÐÄ” ‘JxþóžÅÅïæÍoz'½ú·ù½—<“_¿ö©¬44'N“‰õ%²4å ̾3JÁ¯ ‡•z{î™å£ýûØm W.½ôR~õמÆ5¹Çsh®Ì÷7 z ÄaLóÔ,A½MÉS8ºÇhÙ§ÖlÐ\Y¤\*12Z&2%y'O{¹‡Ðj´éµ{~C:ØŽ‹m¤Ê#bš­˜n+& ¶l݈Q)qþçó;/x9Õjžg=ë7 ‚”];.ᦛobçÎmØVi–„ri„Ñ‘™ÔŸ`rý87]HOAqÌáÄ`›<Ï¡H• Pclt#•ÊÏxƳùЇ¾É{þöÓ¼øº_%M#¿‚m—0" ©& lZ6*ÐàJT‘wrì"½TÒ­·)äº4–ëä]‹-;Æ)©Í½Yö^õë”7íäýŸ¹‘O}òc¼öåoeݺ®½ö™üÜÏ=™êØ0Ž#i65æ"¦­°L—¹é³LmXGÎâ˜Ù`Ö`€Ò§Z:€ïNÐéœ MÛQdq+äGdÞ§0Õ|…ÈÌh‚ãµS•®e®q«arã~nš¿‘/Ïß@".Þ°ŸŸ_ÿtÎ+_@Ù)ÿ’ªŠ®èÒM”V?Q«BÑ Á²\fÈ«²­¼KF.a{q;"œûR(:‹Ý–T‹¹¬Â0 {…t2¥¤JLÕ7³ÉÛÍÈÐ.§‚—Slܸ±¿mýpýÙ Ã`dd„R©„! „)ÒCÌuçXéÖ°­8 òå1Š~i V`€àÇš`à‡H¬öU“¬î8ÿ‘ÚhÔqÇq°,ÓÌ8~|…© yFFG@÷•”†!°l‹ýû÷ò¥›ŽÓë¼aÂ( —ó±í~êx¯× X,Ç1q¯¬†8¶ƒÎA·M+™ŵmæffÙ±s miLÓÀ² þðkøÒM_àgžðD²TchM§ÛAe)†!P¨ ²T#¤`Ý]Šc [ mÛ²I’Û2‘RÇ ÒДJy‚0IJ$žkS_î`�¾ë`˜¶c#-cUb`’n·‹m¹8¶ Z’ÄÊ–Há DJ’D$i…À“.Rš(QÔ·$ÒBkM–ilÛEJÙW¿¦)A–`š&¦ÙÍ)x«Dx‚ÀÄpúv†´è]ÞöŽ& 3žö /býØÕ¤,qêÌ}Œ õ¸äÊu|âÓ·ò{¯x-o~ãs¸hÿaзHbz•lÖ”Àwsôº=¤!©VÊ€" CºÝ.Ji|ßG½öºãØø¾O†¤YŠiILKâå‡èEš¯~å~löìÛŒm›¤‰"ŽBLÓ!Œ4ÂH)ú§WŠ$˰]2‹XiŒ&CËP¨4Á±%žïÐjÕ™ŸÅ´]†††™Ø¾­{öîC'ƒOÜ{>“¥ #C)IÓ "1<^Á’ú§™ûêÜwìyÊYÿÈË jóÌ6˜!m¶9tè:Ψ®¦8:LâIÚ¡"Í,Šå/‡ãt¨Õzlž:Ù³'è ¥C¤ŒiuÛ(­ðÓ$*Æ$$Ó AÔÀ`Ù941­nF>ïãùIÒ!ñsF FÇÆ¸çð‚müÃûßÅ_÷~^õš¿àÿ\ÿI~óÚ'²wÿ& ÅZbqß§¾”qב¸ÿèQÞû÷ÿ› gsåU;yýï?—«¯¸œ‘‘2íNåÅôÛuJå<#ÃeŒØDv#fޤ\Ôlݺ‘^§A'ìáºa§Ij0»¸„µÎGI‡((é0:¹ Ãòiµ#äX*‘ê!ÂN‹F3ÄLK¸þ0Í”ò£¹‰/ñ› #ÜvÛýÔçÉTD½¾Ìç>sèÿ²÷æá–Õõ™ïç·æagï3OU§¨* €b*¤*€ N¨Phé¨1MŒm'&×$÷¹I'7Á›¶c“КNŒ³ "¨(SAPÔpj:ó>gk^¿µî» ÓvÚÄÜDïþü±ŸgŸçœ=¬µÏþ­õ®÷û¾ý|ˆÌ¤Ñ\¢T4Ù2¾ég<ýÔ=vŒgiø9l:k„±ZúP•”BÁÂ0M,½Jc-'Ž#ÎÙ±‡=W^ÌþfïþÕ= !’"Ó!ÏXï¬SrÉ´˜nÜc#ô*‹"iî°‹V( §²< ò›8…„r1cíäSlÞµ“wÜös¼ãßÝÆÁÏqÿýð¥/}üvîÜÉîÝ—rÙå3=³… ì¡jÛ,Ðë­¡k Y–Q¬[ ž…ŠaÔQ ™ÆhJ@NF”œBv:¢‚¦Á2ÿEÍ« EµDdHü&d‰YQ@ ˆ³O­?Ë“ëOs´;Ïjo• &˜¬ŽqöØvί]À°9Š&~8Gd”… ްždتS·j?ôcü8$ I’ ëúß8e.9âæÑÖ£Tœ*såÍŒ9c¸†ûÂ4ÔóÂêCgæ!Ÿí|†¥xYŠ(˜žÐð…‡gô˜®Ì2Wše´>„e«èºŠ®kÿ*Nâ„X–…eY/Üwr›Ùâ,såÍ„²Çz´D¦lAÕÔÁÇ€ 0àŸGXÕ4 Ëê u2ÍÐuý´óP#ÏóÓåU CCÃTÊU:í.ab뙆d2¤\ö6Ö»}ÇgÚCQTdEQÿ±eßiåy†a ( ºÞulWÅ0t¤LÐT CW¹d×E<º÷1æ6ÏbÝ®&ZŒÕ±M›ÕÕ5lÛ$“MUOQÅhšŠf¸ä䨺‰®åbB$ºfcŠè_išŽ¢@Gh ¤Rb™4Ð5 Ë0¡ÛêôG˜³”0° ý¼ËT&}S€¦«˜†Cè÷³O“¸?†f:¾ï‘“aÙNž8ÅääY®S@UU n(Šð½€Œ¾s7M$]¿I¹ä% ½n€iY$R¢+¶[¢$¥/ /.f|Êå[÷⋟€o¾ŠTèLŽOÓXÛàMoºË1ùÚ=÷Ó ÚD©$IsLÛEQÝ®ihH™E¨hŠÑÜóUQ)J 鬯¯Ój5)•J¨ª‚ý"UÕPU¡h$2"I††ë¬oÄ´[š.¸è¢³Ñ ¤Bø8T)ûn]U3@I ÄQˆ¡ëhªBĈ<ÃPò,AÓT cee¯×ÆqªCurÕbùØ<_ÿú“|øŽ·°÷àS<zŒ±Ñ1²0A1U²^@7P,“©ÍÓk îÿü]<ýà÷ؼm;7¾û¨Ã%ü£Çpj&Kãôž=ÌúZƒRÁÁÜ4Làè„Õz¤ k.Ýõ©49üôA|¿Éçð‰OÞÅÅ»v33»ƒTÆ´Z+§$IB«Õ@šcȈÎʦ© ›ý홉”j­‚ï‡@†È2º^—T¦†aæ´Û«Œ¡©1šóûï}¿ø^Çÿô£¼ã—þ”]²…_üÅ·qíõ7ñÌþý|ð¯ïäk_û6•²ÎÅ/:›ß}Ï;غu Õj•4IHã6§—ɳ¨Õê„aÀúj‡²­b«&íNÉé)ìB?•Ä9 •‡Ð…Íâ©%šiƒÂH©Ú¤ZLa¨J¥«3»õl4ÕÂ-Ól-°°Öfqmôxƒ¥•ó©‡9zÂãx7!+NÐÉ žÛß`|*âþð(Ù%d"q]‹úè0©LQ®×$MæŸ^DD ó‡ö¡š‚ùSmZm„ã¡$ ‘Ÿ'’JÅFQm²Üd¨VÀ²®¼âŽX¡Ó xøáƒ\¾g¡J³„A‰ìÐq¢T#ÌubaPŸ˜Å[[Æ÷b(((¥áH¢¤EfJ` â"Ã¥*G/‘·"Ò°…ÅÌÌÔyÛÛßÂ[Þòž>ð,?þ$Ÿýôg¸ý/þœ³Ï>›×½þ&ví:Ÿb¡LJTCÁÒí x^TRд¥ÒDÞ…¬…ï"í,#²q4k‚L-"4èÇçü,„ %bNÉ:ѯFnÁF|‚/½‹o.>Lœ§œS<‡Æn`ndŽ‘ê0%½òD#r¬{„þ<¯y-ãöšò“'¬A@·ÛŶm\×í) ~ês¨yˆÇVãʉ+™,NãhÎßBÆìq’Jñ­ä™œCMëÞKÞÛ†¶³¹>Éð‰irZ¨ÿŠþþîkQ„ʰ;ÂleûV÷q¢s‚v­ÍSý+Žž 0`ÀXXÕu4M Ã߈£˜jµ‚ªö‹§Ìç3.ó)stÃÀ±â A.%èýLMU è;1e_TZLçù2¦$IÈóü±UUU|ß§P(å1iÒ…¹Bö˜œ˜dþ蚆†Êg$I—úHÇqxò©ýœ»ãLT2,S#ŠcLS'¡)„aJFž%äÒG Ð4…$ŽLÃ�únÖ¾U 3¨T*8¶ßóЕr±HàûdyFpz$ýù¨„–×!M%I£ˆ0ô‘R¢«ŠÚÏO- XvÏ8øìAFGÇ% C_ȪB!ËrúÙ·ÛvÐ ‹(î!”þ¨¾¢hx^Hš¦H™#PQU0Ž™Ù\ç?ýþ/óû¿w;¿õ[ïá·~û=œwÅ–-“ì¾ì.º`7ïø¥_ç–7ü4ëë‡ðAàgË–«†C«P)— ‚ª år]׉â™g/冡“e’,“¨j¿Ô¬ïxî ò†aÐñ4S#Žž=8Ï‘CØ.Ìlª“ÆAèõójéF)õ±1¼n){EEÓ$Žc“D‘×ES–ÞwUªUz ­u¯ÇØØ(f¡LÆÈ8áè¡£¬®…Øn‡¿ðÆ+u6OÏ0ÿè#LÖŠ¤qŒ §Væä3¹ë£wbÄ!oüÕwP<kQ³è¶qF'`a‰Ã=Ì–Ís(Õ:êHd¤ˆ¯g4¢¹æS¶5ªCÓ|èÃwpï7¿ÉêJ ÛµøÆ=ßå×~õÿ¢T°Ù47ÉôÔ&Êå:š"žÃ¶°_Až‘çý¬[ÛÖIeBšiXN¿”+ bzA@«ÙB7tæ6oEf)IÚŸO-¥>îsæŽ9>ôá?dï÷ñïù3~þg—³Ïþ,'Oã‚ ·ñë×¹òª‹1œ”ö³t;Z.…BEËÐŒ˰ÑËpQ2„Àïv8qª]¦v0йn‘ë06³Ýu9µÞ ÙY"|Ž=Æþ}GØ{×]|ùSŸ¥a×hÊÅz ·¼…3Ü2Ï+Ák_½‡Ø­¡Õ·òÇößqùË¿ú#ÎÙ¶™zµRA( FQ¥ÓnK›\éQ)äq£Çý÷|‰3¶Ž±õìÝ4ƒHë!ƒ<é ÿ¾pìØ–W—ðƒ÷Þw÷Üû%dœ°¸Ôå—~é]¨vÌæí£LÖ§¹`f;“Â&“EœÂöìN¨‰n(تA»×C-Ztóˆ¤ÛÁrK$½�²Ë,¢HùgŽ’otЧǑñ:žïáù«$q?ãŒ-7𦷾•SGŽpçã—nûŒŒŒqÛmoãe7¼˱ét: â ðýâ*XäX™‚š¶P}ŸØ;Œ˜ª‹£–¡0šõ/ò:ui"‹Ç޲šÂ/·Ù°×™?±Ä´œaóô»¦.a÷Ðnª…ê?©ƒK× LÅÆªv [ýÉüÖŒã˜ÕÕU|ß§X,R®c ŽÇØ6°…ÍŽêæÊsX?`¿ëŠNͬqNí\ö˧x°ùM½ÃTeŠƒÍƒœìäe›_Î\e×2~l¶MÕ­2Q྅ûè4;œQݨ3JÕ¬¢ŠsuÀ€ ð#V¡?r­( Žm#SIžó‚ðÙo«OÈ•Œ‰‰ ­æ2Ý^K”Ê%SŲ Eeu––V˜ߊbSp‘RÒív_p§Öj5öíÛ‡çyìܹ×uUÓɲ ×q‚„4®399ÅSO>ÍîË.Á0t’ѱ!¶œ1ÇêÊ õ«®Àï61MÃì? E!Í3R™¢êB€ªiý‚ Å “!´~>ëéò*USûnYMÃP ™àõâ0Bs„"h¶×)•J§­ýÜPKq¨”kÄQ‚[p0 ]ï7ÒëB€x¾¦(BCQR®½î:LÓ$Š"‚ `jjŠN§ó‚SXJI†E j~#3A¹Z#“9~ôK¦Èûî¹È 4ÖN23]æƒñ.žxä)üî£?ÞáÈ¡ˆ¯åøáí\uÝeÜöΛ˜C(‚ ”41£cs¤©dee‘8ɉ“ Ý8Ý®›&AØïYF–I§_4–ç9º¡š¦“$ Y.Ií~VíÞ½ûèvcÎÛ®3·e’$‰iŠ® |ÏC3m’8Æëõ°lË0‰¢˜<MqM =“™B–>‹ x½.år-[·"€(ŒúûXQ‰SØsõT'Î"Xú(çMÓY[G/YX£5D’âu}>ÿf~~ž«^r;v‹êêt;«ÌÜ |îÍùcè¥2bj ÓÖ •H¨˜‘ QN;‘Dª ÓŽ)8UþÍ­·p×çîBJX8©ó¥/<† �CÁî§-ÌÎŒ24Tex¤Êy;·0:êrÆ–ÆÆF(W&ˆ#ŸååãFŽçû„a„[ahh ß÷hµ}Êå …‚KÅœ{Þ…´½Ýn›æzÈü±#a—©™9<¯C¯Ûajz+gl=“<3h6Z´ÛÓ(¢ë*a7$ÏtC§Ùj`h¥R‚j*È$!3+(tüœòXª£]ðóŒFÇãо§Y:¾Då<sì(Ë+kȰËÔp™©­ •¹áš=Ôο­fP«`—·`÷$߯²ÿÏá”S\×ÚԙŸŒrYgzF§Z÷ñý ©#³Œp£Icc™œ"†#D…öR„ˆà¾û>†¢_ÊìyÛ0¬˜L´1Œ¤:ä:ªš2wF©Mã#ÜðšËžäÀSÏqõU?Çë_ÿÓ¼øú=,­5Ø¿÷)Ž?»Ì½ß~‚Öâ:ó_}ê(3žÉæ-[Ù1½áJ‘¥Ås/¿/7ˆ’ ]w ê¬CQ5ÆÆkäzHž¯£ëFÁEJAôðz1±æ’Ä1ããcüÆï¼‡ÿãÝÿ'wí>óןâ½ï{?]²‹›o¾‰+÷\=X¹ ð}¨Ê8v”ˆS„Á2QÜE•™h‘)™**:ª0AÕAùgrðedBô6h[åðC‡9pì!#-˜µ8OœÏ¥Ã»ÙY:Ÿ w’8ŒiÄ܈yRJZa áéT²aZ«-¤žýD掭¬¬°´´ÄÚÚŠP(•Qê Ëñ¢±qní<&œ å‹¢†jpùØåiÀ püÔ v;8åŸÄ6lf ³ [#¨üø¸~Kf‰ñâ8%»Ä©ö)i<BÉ*±käŠZ…AÖê€ 0àG(¬ ¡�ý�ÕÒH’UUå…,Ô,“8EÛ6Y]l¢k:–)HNúW†'¥T‚4MûB¥*ˆ¢˜4M^hít]— ŠÅ"Š¢ÐjµÐu¡¡*Qè£ëz9 pìa0>:Á=÷ÜÍe»/E¦1Òë4Ùºõ ¾øìYŒm›t»ë}Wk˜“‘„<ï»)É2 %“’,MÉ$a@&ˆ“ÿá¸4UE!ñCò´Ÿ5še^Ç´q‡DJR)û®Lݤ%ÄIJÚî»U%GU!M%2ë羆aH’¨(šqÚñ™“e9Rö ³òôÓ™¯YÖϽ9„a¿ *‰3b5ŲLZ­.š¦aš&ª¢ž~ìÃ4É㜕…c8ÙM:».~=í–‚¡OF6úá÷ßû |ä1~ÿ?ý¯¾þ§ß±'OñØãÏñ'òç<±¯ÍìŒÆË_q!7¼ì¥”Ê}Õ²,²,EJ‰eH™öÇöUå…m$ RfˆÓ®`·X ÏûY·ûž8@¹h277ÌÈH‰VcCÓúeNi@¹R¦Ûó±tƒr¡H’HLMÇ0LüV“R±jFsav›B¹ÆôÌIâyýÏjX´;>†[Æ ¶œq&ÞÆ ßøò“¼í-×R­ Qrr„k±ÿë_çÞ¿ù*Ã… ¯{Ã?kŽfãŽébé'—h¬·(èõ[Ñ'ÇhÅ]™â˜â¶Ü®T¨Ì”h6$I’rÝu×26QD(=ÆF¦‘©ËÈè4Ë+' ¢–"Xbc£Á¾}Oðøã+X6|ù«ßÅ÷¡XÔ.±cGsÏ=óÎÝÂÜ–êÃS¤i@‡4[MFGfh¶Z¬®…œµýlM§¹Þ$ìZüÑ{ÿœ½{ŸáüÜöö›yÙ+o&cîþêÝ|ôÎOsõž;¸òÊüÌ›nåŠËwaê ¹‘³²p”0éR,PJº¡àû=™P¯Ô°Üj^evfIñÙýž8Äs+§¨”+lfzlŠÙÉiv_½‡¢["ì6˜¨WqÌ*_þ³÷³ezœÚì8­¬ÅÚòqh†”ýŒ°·AkµÁ©ý±õº«i-£ÙXE¦¶ÑØ8‚ cLQB( ºž06RIJj´¼%¢`ƒÀ h­4é¶—Y:yˆ‡îý“glÃ(ç¨N‚",4Õ´,4]Ðê,.=ƒièœ:Õ$Š{ÄlÞ4Æ¥»¶ÐX/sÞó(ÚUöÞùqŽ>½Q2ILJyfm‘üé§ḛ̀óõ¸ìú#œ{é¶u.Û¦ÏF)Þz› ƒù¥>ú$ÛG  J<Ï'Iú9Ä…Br )cÒ´‹·ÚDæ*/}ŨFÖ�� �IDATÕ¼ä•/åÄ©%>×gøÍßüM¾õí· V®|žrÖ PœD·Ëó�ÝÛ Út»Ï Pqò!u¥P"·-þv·“ø[·ÿàÔtþj¡„@Ä]ro™8Û Ù\cyù0'Ž,ppÿ ÔQ©d”ÊÄ8‚åcË´WÛÈìWЗ“#¥¤ÝnÓê´ŽÀ):8ù4º¢ÿD «žçÑét‚€V«ÅãO=_ò(í.2;9ËöÚ™Œº£èÊÿ:BÆPM¶U¶³ê¯q´u”ƒ­gy¢ñ8cÎ8»jS³kÿàcükÃÁa\g÷èe|/û.G;Gq.›k›14{0û1`À€ øQ «Y&Q!ú£íŽãœËTÒ´Ÿ©i*¦i222Šß)¢ÍÖÅB ¡ <ÏCÓT¤„$I1M‹v»A,û-ö¶m#¥$Š"Â0¤^¯S.—ɲ €v»ƒªp:×U¢ª*Žc“ɈM³›'M$¦­ ¨*^‹Ñ±t]ãÑG᚟ºß_'ŽCTM!M Ÿ*³™„h"…<BA®£i‚ÐTEɰ4™¥„QD©XÄÔ –—–èµ:X¦Iµ^Ý^¯Ÿsjèèºe¨ŠÌ"TM¢i (^)3 n©ŸYš+8—œ™e4›M\×Å4-tÝ Ñh�àº.B‚ @Ó \×!Ššø^€iÚ‹EÒ4Å4MEAf’<Žd”ÝQz„Þqìã™-¼^ÎzÔÆ)ñ¶·¿’à ÏñéO<ÊÿóÞsýU/å»~—;?úQþæs*SS6—_¾“gŸG©Z!M}d’¡™:I¡ª*žï“$Š¢$ qœb[.ªj@†aàVlz~›N§ÃáCót¶mÝ‚ý臢c f`:2J° aõ#:#õª”؆AÐiÑYo“2>1‰]­³±²„iËe<ϧÓî 3z¥Æ©¥e¬B‰S ‹ôüÎ=ëLH%þÉEžxøÛzî 7Üð 6mÝŽRt½ÅB?§lå¹yŽÍgbvŠúŽ3é=šËd¦‰ï'TŠ:äÝÈC(}çs¥Z!‰4RÓóÖÙuñÙ:tœÉÑ FëC FÆG)Úš°ÿÿ¤2em­Áß|á‹ÌÏ§Û ˜Ÿ_âk_Ÿçó_8„”9›7Á®KvrÁçqιۘÛ<‹i®Õ ‚€(2ùúïå+_þ*Ï<Ä…íäÎ;þˆ]Š×=ÉÉ“ßall’+öœÉko¾o}ó!>ðþÛy÷»~±áIn~Ýͼöµ/G‘Eâ D&ªj’¥’‚["ÍsڀǾû]–Ìó‘Û¿ÈÔ¸ÍΫ.d÷îݼåÒ‹ÉeÊx±†c8œZ^¡…¤aªk³tü¶Q¡^¶X=uÆ&Iœ]OÑô-ÂÎ =xœ‰sÖ0†Fy×;ÿzûè¶;8N€!TÈ2B?@Ñ$¦e ZZß5ÜéG/øC¥îÜE„àøòa†¶Vñ½.ë¶U¤T-12<ÄÂb?›w¨6Eä-¦…yÔ‚pC¯²ðÈC¬”²sÁ53zÙEdºÃoýÆo¬f|óK_âégŸào}‡÷ÿÅуëö\Áegnf‘ì<s•ñ爗¥f Í)8ò¬ÿ&D±"Td&JŽ’× ‚[Ñyç;ßÎ;åßV­ü¯Q4°ªhTO{ I³ȼAšFˆ\%‚•XôH1û#§¥Y „ª úÿL`Í!IÈÒ˜$‘|Ÿ *´¸‡š4Èò 2ÙD×%VÁE)Øôãb‚©êåJ™$MˆZÑ?*ºS eH;j³Þlû Ê%§DäGDD?‘»ùù‹ê�IœÐnµˆòˆIu‚3ªÛØ9²“¥0ST*%½ÄŽêVGWQQñ3skçrÅÄ•”õòßÉ UµÆ¥Ã—’ËœG×éwFõÍ 0`À€?Êc8Ž1 ƒ<ç…vÑ0 €Ó40 $é;OÛÀóºÄq?ÛSQ5 KAÓP$A�I’c;ÝžŠ¡$qŒïeK%â8F×u¤”A€¡hº†zº >BÜ‚K–õ]Ž]†<gnn3‡âÜ[ÈóÛ¶Ptk^|߸÷nvž{–í jÐétIe†i+X¶(„REEUÐ!L¡‘I0M„F–Gè† èú€@Uº®aš Žc“¦ B}±ØuHÒ„^·‹”&ªª"T !$i ³Ç5O»V n]· Ä0Š)—K§…U‡'N0<<ü¶y^ä¶mò~æªë”úŽÞ4Á²L,Ó&Ë%Bä .YfG’8ÈÙX (– ÌMo!•‚ØòAksjõiÜrÛþýk¹÷ëO³ï±y^ÿúÛ8|h?ž—qã{¸úªó¹äÒ ™ž£Û]CÑr”\Áv,’°• j‚0ô0 ÃÐúÙ²Š‚®kض"4z^_0ì¶;(†`yy ŒI•­ÛçÈs‰¦©8Žƒßn£iQ*W‘YŠkÙˆ,#Mb‚,%—)§Ž£T*26½‰<Iéµ[X®¡klll$)åJ‰NIö=y„—½òe´{1©’²uçNìÝËW?þÆjen¹éìÙIRÛ@&! ’‡!'ž8H&ç¿hj½BW¤¤®AÁÔqU›žß#^éÐ bBË £åt×׈üÕÒ$¦.¼&¥¢ÎÄx…˜ýezz”æ2Íõã$QJ§X, c“¿pÛ-d™FŽIk#`aiCðÌ£Ì=Å¡Ãmöîý©Œ™9“—¿â^rݵœ<yŠ»ïþKöí{ŠsÏ>Ÿ}è—™œCQ3Ž|ULŒÇ–¥²°p€‹vmâöýß<þÈ3|és÷óñ}šÿþÉÛ)WÆØ½çb®»þzF&&9yô=òO?ó^§Ç™›Æ™°5.¹p–·¾ùg™yéOprc™<x^›´çai ;.¡`+)Â5) 34¢Z±éÊ�ABžôÐTɦ™)f&ÎäÔÑ#¬,´™ª—سûBþòŽOz9›§¦ñ[],³Š®D„q +Q¤ÀÒêXšK!×Y^_`|h–™ñ³PÍò®GYD¡ÀÐmJ®‹ŒÞFD7hQÃó{$nÄâBƒ’s³[I<IA¸˜v•#í'Xo2;5N–fä~Š—‡h¸Øj•‰j‰ÿÊ-üêøV}ê$Oî=Àßy‚½÷ìåü³jäº3ðSçn¡äæ\0ðYo¬‘e‚úpýtY[D&MAÕr*¶AèCÐîǰŒÌœ9X¹ ð¿3ŒjU¨öÝ¥YŠÚkuNÒí¦ç/Ho**ʨy !ªàXPÍþnæ© %ô:¤½u:Y _øGÀËó Ç®Q.c›5¦K)Š~¥™³Ð­¬M¡è²}Û6.»K³^h¬ÿax¾ŒhÁ?Å‘ÎÆ•q¦ŠSŒ£”Õ2?ÀOûc‚……æççY^^fzfš‹w]ÌÄÌõ©:%·„……öCŒï»ãÜ0w×μ˜,ϰt›‚VÀTÍËÂ'MQ™v§©ÍÖxñä‹ÑŠQAgP9`À€ øQw‘É2A&3ºiúÐP¤_fçh†J®QJ9~<@&6IRb¨>Âêú ÊYÎÄXrÚ휶P(Ð5“öF“N§Ówµâ(¡±º†iX8®M&ÀP5TMÅÒmÔ\àÅ¡ô0M EÑ›bieè‹N^ÐÃ>çì8‹ÛÿìCt:ËÔq &–Óì4ˆ{1–UÂÔ è…YÜ%ÏÀÐt²T!‘ šjº¥âõº=ÙÏf }È’]WɲŒ”¼_Ö%T’D¢(J®!“ŒRÑîg>ÆÈŒLæôz~¿�Ëq ¼ˆ ÐM4Ë02A¯×¡àÚ(Ê%Ïë¢**¦¡£©ýŒÖ(Nñ¼M›æèv{ýò¯¬e`X&aè“gÝÒɤ N|l+ 2Ól-ãf‚µFJ±4Cµ6ŠSà C¶ÎÃõ/¾ŒÏ|ò^¾ýÀ“¼á¦ ø¿ó+ŒNù«†ÀëFF>Y,Ð4È I“Œ8AHLKCQr òûÎ]ß Â.šj`Y:JžõÝxF‘'öíC**Z)fÓ–šÍ µDä‰Óˆ8iR6§Q¤IK²<¦äZ¨šàèÑäR2:5Aud„<HE‚.ñ‚ªYÆÐ]ªC÷ïÇq‡©OÔY†[*³ºÖåêK.äþÏ|š}O<ÌeW]É…×í!I<V›§(åElÝd}i‘îò2Ó¡vþ9dºJ«Õ¡å÷¨ ×1…2§2Tfyi…z¹H»ÛÄ2†Q‚ª§è¶Žfôº1³3›è¶cü %M[¸¦…¦;ÄzL¡XÄÐuÚ­.a* ƒ˜¡¡al«@ž´˜³9{Ûå¼ìåW#3•§Ÿ}’Æò qªòÈCOñ_Þ÷W¼÷>C¯çñ’ëÏá¯îü+¦gFè4æIÂ&^Ðel¤D»ÓD¦T‘‡ ¦n%Ýv‡sÎ=‹mÛwR®ÑÚhsÇ_ÞÉíúï{ÿ](ª‚Ìn½å:Þø¦ËŽsΡ䤴ž|„O?ú GŸbda˜£ëË OLcŠ4½åeÆFêhІYx͵áEÃELÏrbåÏ>»­;Î %•Z…n擘CS*~ÃâñGgîêWû'™™RÉcŸÃϧ^"–]"bTWÃÔD’!3“¡á1d)ãéÇžâÚ«®á‚+¯åØÂ)ª“3TÒ Ž¯úŒÕG(è:¦„~—b©†¢¨%Í(päÐqŠlžƒâ8..d.½g0b¨ŒÖq&†‰ •Ø (*Ý'Ÿäøþo³é«ÑZUÃåÅ»çxÕ —‘ OÞ}ÞÉUîüاùàûnçwßÿ.Øu!/ÙKxéu× Û*Ýut;B×AULËF H“”v³‰a˜¬·»t:mFf ×€~T¡êÿCbË3p¹�3¯Âßrt*€&€D‡P‚ßáƒ"ù{vÒ§€…ó?I¬Ì1Œª1ª…eÃØX†R(aNû4d©è¨®ÆºÖ`È¢¨õÅÀÿüËœœ¶lq´ó]µ‹[w¨[£LØã•"&æOôn ‚€ Nk:Ôj5ªÕ*¶c£*?|A“¡ÔÔ9CÏË·ü8(((Xª…¥ZäfþðŽ 0`À€ÿj…UË8h¯ºŠ.ÂÀò,Û&Ë2 @ÊñQCƒ8ĉ(hªFx8…22‡õ�Ë-{ËøuÊå“㬬¬â{ŽS Z*£ª:B(¨ˆÓ¨9ŠšªQ,–û èaH&<ê£5ž=ü,‹++¦ŽeDqÐxó›ß‘CǹꪫØhž"Íû#òyžõûò~V)y¿)V×u¤PQ…†"´~„Až 4M(¦†…L%©ŒÐ4 EQÉsÐ,]7iŽaX¨ªŠeÙ´;>š¦¢+*ªá ¨†a†!–©áº:ªÚw¯æd¨:XªÙKJ%º®£ëý °</D1˜†A¹Tå™gžåèÑ£\qئEš¦t:mLÓBA¯œŽU(ZŒ©¸ù†1M}¤Â©.¢%™ÆµRÔ\ç~þ5|÷þIü€_¼íff*´Z ô¼ ,G'“’B¡€®[¬76RP­ 9išÄ!º¡ „‚ïyØvNš¤ä¹H*¶­#3ÈrýN²ÑŽlÞ<‰cêÈžB’édRA^h¶wl“,ˉcŸöF‡,™œšÆ-Vèt<¢4ò C¥T —šisäÈÓÜ÷à}ÜøÚŸ#UmÒ8᲋vñžßûsVN,°~F•Ÿ~ÝL_q)þ±gII©\Ävmš§–ÙX]fbt wj†¶ïcT*¸¥*kš«m6ÏmâÐs‡™œœ 6ZCµŸÍ+4¢Ä¦RqB’ç)–åÒj‡´ZlÓd|¬ŒiZäR€ÈHHˆ‚dkÊ•”,íaè q “ ¡Zä œwÞ6üÍ›yðÁGñÂ6Cµ"Ó³ã Õªìjo|ÓÏpãO¿‚[o¼ŽáúnÁ¦ÑX¢T*‘$1®[€,& Ž/ž$“pƶY9DãñÇxòÉ|ç{{¹ñæWsåž=†Á׿ñuîÿÖ7Ykdû™[سûEŒ% –‰iêŒ ×ð;¼(DT ¸e‹$í¢å&B¨”jCäAFDZêãÔ6m'‘©„(¬¯41ŠuœQ /ƒó.º†»Þ˾{¿ÇÎW½Ž™ñM<þÐa~áí¿Èjc£`P4úG„ÈÉÖ#Å"Ϊ¸CÎ<÷¾ýù/Ð^™:ëEt¼†9Æ–ª‹”ý1XÕl‹4KPt‹<ˆQ°¹ûž{™Ø4ÎäÙgÒÛ8CÃtîÿ 'ŽðÆŸ»…oìßKIÙI¯·AÔ ¨•u ¹F©¡—,„*q ðâ zMbÉøˆÆøØV2ÿ§8ëòËXTŸúÂWøÄ'îäOÞÿÇœuöY¼ñÖ[­ÏB¦à’Ä'KCœr ·RÁï´q…sZÜ0`À€B«ŒjqÉq^puŠþú-Zˆ ìçÓG>xð·„Õ<ïG‹h…! J…<·áûÜ¡Bô�EPpsÇajØ C̺LYj¯°,ªÃ"¥œ—QQB )ê ßÚ™I²<#'§C›¥d‘':`©6çÕ.bÚž¦Há‡rjþ¸bÛ6###8ŽC¡P@Ó´&žþIŸ@ñq ¨0`À€þY…U)%Ð/R‚~ù”®ët»]ò<?]’dàX.ÅR‘$õu\[%Ü‚K'ÄqHšj„A¿Ù¾w:b Œ"dÚÆ4MLS@Þ/Aò}Ÿ(ЍV«èº~ZdLI“ÕÔqE¬­7(”JضM¯×cÄ&êÃeâ8á¬sÎῼ÷¿²uëª&Ió·`c:ä*¹ÔÈeB¦ôÔe–‘f‚<OHÓÛqˆ¼¡ž/p›À ‚Ã�]׉㤟7«j}7i£(!â8"Ïu5'Ïyºn⺲,ë;,eB–¡ë AÕÕ~L‚ï#¥Ä¶4Í Š"Ò4Ý@Sû™¯CCò|EéïŸbÁ%Iâ8& # ÅŽã°´¼H脡æ™KøúמàãŸú0÷?ðv!Ãv5ÎÞ±™+¯¸ˆË¯¼û¾óç,˜gxl©¨tü„Úð, Põ2WÐ ›SóÇ8rä�#Ãe¶oߎÌb:í&Žk“g1YªÑPÐP<SÈ3…(ŠÑ4…C‡!Sضe–zµJêµ üŽb )¦©¥]Tׯo5Y^ZÂ6Mêõê£ãÄQJ³ÑÁ0\Ó"é¨i‚ŒÖ»>¹Zäá§÷3¾í ªÓ,]fey‰ïåÓþ4¿ð¶ëyÅÏÞŒiê„ÇŽ ¢„R¹HØirpÿ3Ä©dvÓ&ŒBÏï‚îÐi÷¨V+‹e‚ Msâ8¥ÝéQ*‘R†1šf’d°ÿÀSl™›E3‚ÀÃ2 ËÀ4ÌþI¢¦§19 qÒÅó×%Ï Ëda$Q34—È\â‡>h1ã㛸ÿ¾½üÞï|Œ8Yâ­?ÿ³¼õͯ¡\5xîð3\~ù&Xæ¿Ý~'Ÿýä]¼ê†«xÍM¯`dhŠBÁåÐáçHâ Cw°mÏ[çûà“ýy‚‰ñ vœ³‰W¼êZÆÇ'P b©ÀÄ´É+^µ‹±ñV–9¸ÿi–Ö%ëíU¸ÍAÉ2œ¢‚ŸKU#!Ë#jÕ½„Zu˜4MH“˜R½ÆÜY ß{è[4Ú!Õá‚</âÄÑeül’DŸãÄÂüñû¾ÄeO†|éKO±¶ºÁCßZ`qm‘TwèÆ…!¯Û&_O0,›B­ÄæÙÌ€ù'øòýYSLÊã&“å!²^RÅàŒófÀuÙ¼e cõa&aò¨ËüÓÇùôçó®ß¾a é6§Ÿäcÿ»®¸{Ë4ùü“è¦EkcƒÑÚ^g•åSl½à\ÔB•^/¥¨©$I„¡ëXFƺ·B7ÌX>²—3Ïå‚—\Ë»ßN’f›_áÁoïãþ{¿ÍþÃQªsë^Â+_þbÜZ…<í'>B5AFÆêƒUkÀ€?qU(¾ß‡ªU0S¨ä S`øï‰¦†ª…Àü;è|J!P……ÊCd8jÆPi˜µpo‰ÅöS7˜¨L`ë ýrQ?óYë¬ÑñÛ &F*’sÜ ±G1Æþ#ª>/¬>a^Ó´ÁgzÀ€ 0à_JXõýÇqpët†gß iÖ åHY–‘£#£¨Š ÑØ ´i„ååeª5CwÐ4A±X$ bTU!Œ"4+'KûQ¦aây†a¢j‚,O�!rÚí&†a i:Y–ýßw]‡J¥BÅ\tÑE<öØc %ÂУÝîQ­ÔÑ5…í¾˜‡þ7Ýô*ŽèøäÓ0y4_*I–’%)ÏHS‰ãº(†Ño<)9’0JÈQÈ…B”¤ $dYN»ÝîŸL(MSPUÓ°,«ÿcµo•2%Ë%Q”cŽc“Ä)Q”¦Yšà>†aPtûͤš¦“Ê M( ú£xÊiwèðH Û1IeŒe›ÄiÈÆÆ•J…BÉÁ󺄑O¡à>åÂK'=Þñöwsd-àÍ?{·¾ñfânüéÛxüác|ðç—ßõo¹õß\Oœ\Z`nÛ–W›<›½ßÛË÷ßÃC=ʳÏãøñˆ,‘ŒÂ¯ýÚ«yõ«_E’@»å#„Ž®¹äY„¢ô…Õ4Mñü�?NÑIÙØhbè0\ÂÒ ü4ÃÖJŽE"U„¡£–tVWÓm÷(W*TKCd)´-Jå ºÐ “Xª…fh(B°Þ^Æë„ÌŸ<Îу‡¹õ · æ ¶nÒ\ëðà÷$ËáÌ ¶£Y9ë‹'±¸¦ ]Ÿù'ŸA’3wöY¸㬵ÖQmËp鬮“&åRMÕ ýˆm[·ÓétiÞÏ%ŽStS§±¾ÌÊÊ)ææ&ÐTMS)•K¨ªJ‡®›@ÓrT%"Îc4ÅF1tâH’å)I&ñ;mtÃbbbÓrX]êrÛÏ¿›¯|å�o}óUü»·ÿ6nÁdc}ELMŒ05V§Z5¹pç-<ùø<¹ãnÞ÷'_å—ßy·Þú3l=ë º :Ì>øŽ9Ìu×^Ã5×^Ã¥/:Ƕ9¹¸Ð/sS–æi¶*eb¹H˜4˜™-rÞÎk‰Ž¬ñ•Gï'L×Á‚’S¢ãI\Í%ÍMB ÓD¦¥ªº‰Q€Ž<¼…G¹ã#ÁóU +§Õͱ e ¶Ÿý0X:=>Ï£žâÕ¯y ÷|õ8¼ôºkpê%T[C8)BDŒ¨%‚8g©¹ÁâÉc$½uŠÅ6³›G™*Ñðæ?‹ÞYãÁ“m:_†¦„BË‚mÓ%Å"‰}„«ë+|æËŸcçø0Þ{7¢±çÍ¿Àâág;c'µÉ³H–Q¥Ác{&o·ØsÝzŠC’…ôÂŒÕõu†Õ!œ‚MÒkÇ›GmÔhŸ¢«ºàÔØºi’3f7“)ëKM¾ø…¯ñן¼ƒ÷þÁ{¸úš«¹é¦ÙuÙ‹P¥G/mÐn… ®üsb€j€õüýS*ž¿ùaÜ€ `¢àš4Tâ4"—§Ýªý‹Í ¤dy„šd"éf%æÿeïÍ£å*ë¼ßÏ~ž=Õ®¹Î<ä$9™Hs€æÄT´…·´m»Ñ¶_íV[¥Õî¶»EATÛ E[DÑ0HBHÈIræsjÜótÿØG×í?Þ{×½ïu]»»>ÿœµjíUµj×>õ<õÝßß÷k`bbbƒñÂ*jz U¨ÿ­œ‰¿Tÿwª]ºtéÒ¥K—.]þ7…U˲PU•$I‚€(Š(²Öyß÷—J‰4„¢ ›*†¡Ðj6)•WEIœ’J¨õ”ìaa¡N’FôöÖX˜9DETª5Z­Ö’€(‘RbYy„"ñ}ŸÙÙY …½}54Í ð\|?+ÐJDQLµ·‡ùùyØÏš5«P”<Žã>ƒƒ½Ü|ó8þ„£éíëÁ÷³ªlT[! ÉʶT E)X*ŠJq=© ÂÈ#I"„PðCÃÈ ©¢0"Ž’8¡P(bš9<ÏGQÂ0$ŽÛ(¨ø~€¦éhzmø : ó ¨ªF©TÆ0t‚�¢(ü½˜†�2U¦†*Rfñ(’ ðÑu4͊Ī•*i’¦) ·,¢(BUv ðð#ppÎe°þäò³Ù¶íD®¿þ&Ò4摇~ËÇ>þ>ø—ײl…Îêñ•|íëßä¹ûð\h6=æf#HL6lbåø0\°ŠS7­ÃwçX·n-µþ~¤Hè´8ŽCæzEÉrW“$Æ4u¤^b®îø1 –ô“†i““*ˆ�{q_Ôi¸Mrfj­D)_A¤/(—˸m›v³žÓ‰£ŽQëÀ*ÕAfÔÙ0°œUk6²ûs\÷åÛèëàÜ Î矯û^ìã9ò% -Yœ¥>3ÃØø*òýý$JB£ÑB1 4‡‚¯P(�ÇÉDpMÓ~ÿ#RÊlD1 #Â0À0TÎ?+º®Ò±[¡Ç‚O©T$ŽB!–\Ô)šªdå\(ärŠ¢¡( ù|‰¹…&VÁ`Õê LOæ_¾oáõ9�� �IDATp=7ï·uÔ?ºùœ~Ö xiI[ éQˆ–ƒ¡(óóuþä²7ò¦ËßÊ 7|“¯^ÿïÜzÛüîÒ 94qFc­Û.àŸ¼Šþ¼`V{ÏSѵ„V{Ž(ê0ÐWFj’ý/íC( ƒ£ƒ„~Àbã9h¶_ Q ºY Š 4›!ÙØi:/ÌìbÿÁýLOLãµb†zËXFÊñ'œ@.§pê)›£¯9µR\ÿ%ÎÙzC'oæ–ëoàž{~ß½÷µ,Ö˜œ²¹òC—áD.j>Ç‚3‹15YÕDè*n»Áâ®=z~§¿æP)bG1y,§qŒ/ :>í@áÈä;wîefêÿôÙïñêW­ÁS~ð¥¯ð±‡'I=X9ÆUWãE ÒÔ¨Œ@¡ÚCìÆf?ÃÇ­Æ!ÇÜ‚ƒ%, Â(Æè¯0::Ftð 3ÓGöVÆ>¦Ù‹ã§Øq#+õËå¨Ör¼ýŠ7ð¶w¾‰íÛwò¯}›÷^ñaÆ–/ãýùN:õ$JÅRwÕêÒ¥Ëå?üáÿs±RùÏZÒŠŒÇIFÿ˜'Lu<šñ<~<Ö‚\bQì/Q¬('$©HŠZ1»9þßñ“ꊪ]ºtéÒ¥K—.ÿÿ «¦i†a˜e} ‘'¥i漌¢Ì5‰šR.ÐS³pÝ sw¦ Š"IÒ” ´)äu|?daaK É™yšÍíV›B¡€¢dy’®ë†á’ЪR­e‚£®ë$ID’Fº‰ª Â(Â4 <ÇáÄOdbb]7p]›|>’×(•Šl8z=;wîdÛ¶­ÄQLÅØ‘›‰_A€7s¸^HdÎÊ\Þ"JbòZÛé ˆM7ð\])T„®¢ë:¶å¨ú~6¾oè:RJ¤)qœMÕÐõ,ß5 3qU× ZÍ6ív‡……צX,f‚µ‘ýð}!$Að»s¢¡¢!AFQ‚išÄQD†x®CÎ4èt:hªDÓuÚA€ ô DŒAà‡`$‹í#Ë1hpÞ²wÏÎ;-ÇlXEèù¼ý-—óÌ“{¨”qÝM5èchd+o I‚Bñ ÃÙ©ƒ ’$B )1I¢* U®(Y1™f1yäõù¤°|IXq‚*ÄÇn×i‹X½ezzúÉiyˆ$i †ªáÛm KgÐ(D.AØAš&õÄ¥XÈaÄùDcÕŠ£Øó£»xè‘X±díê5k4 õa˜&I»ÃÄáÃ8­6«9 Ã*) ~˜+*$ %«ŒÛî`r4M|ßgh¸ŠëºKùe’Ìu£dkªdzažjµHºx^Ö°\,P5-+=#%IcÒ8A ˆ"ÜG†(B!ŽÁÐ}½ÃD1\ÿ•¯qý ÷pü1£üä'ßÀÔaºÈ /ìÂÌ)˜9ú‚‰Ž ææ¦ÉJôöä ÎÙºf˜8¸Àß~ìVçø»O~˜×\ôJÚ&-»c7É NÛî k¦nP_¨„¾}½}¨I1ûŸ—1½«\>Α#3<ñëxüȇ&Ù½ó$ÃC³n ëׯåܳϠTè¡häè¯Õ8tp=%‹û~u7‘ïÒ_.¡6±ãÓ7¨2=¿“Þ¹<Û¶K»9ÁW®ù§l:…ï~óNj=‚7¼å•4w0*s ³L¶Ê=½„ 9vã%öî|˜ Ç¢ø}´ã‡‰&(•ªøeaÑWíaùÀJ¶q!¼þ5Ôúá_>÷Œ°ý®»ù¡ù#N>톖òÂKù÷;ï#Žîýõ_8 +Vöb𠝹è<†MuÇKA –ŒvRŠÕ<š£è.³ÎK¨ù^ôÒ  K!ò|̲Jªƒç,¢Ê2­Ù:…b/G3Î5_ù<SS-~uϽÜxã|ñš/Q.—ùîÛ»+W—.]þëlD…FY/ÿ‡Ç¢8% ZèQŒ/@)y ”r%Jz‰…î‰ëÒ¥K—.]ºtéòDZŸµ;nVœ~„iš!è´3ñ3—Ë!IGèºÊàà0““SLM¢±8ÅÖóÎE*¤`hØàÀþ9Z­&®bSÎåÐu0 B°0¿€¦Kj=5rVß÷³LN)1 8ÉòYMS'It]CÕ4ÏÇó[ °kçn’$ÅÌWˆÃ€v»AÿÀ0ú§—qçwãù!…B•……9’$ÄÊ[ k„¾GgãlŽ‘Ëc*Å|×÷p=)A¨*ÅR… ÈB¾ˆ™7‰–2`‘/ 0óQ’à.*!VÞ$ŠB';Î4³ÿ0 $Š#¢(BJI³^'ŠB&M†'œ´‰¹™YòVŽ ²<V ˆ"„jbê:RE ¤¡“ÆBL]# |Ò8ÂÔUÏ# Õj™å+GÐuh6a÷Ž+–ç9ëì3ùÁ­>_¾æ:>rÙiüÏ}¿5K„DWT^~Þétš>ŠÐpl‡bQCŠ9d*hÔçÑ ƒ8Ž‘RC7Àó›!P”„0ŠÈY)!I\¤ª¢J(Š8|h†(ŒQU•á¡*"È0 ‚æü­k7¬%V Â0Fä Å Ä D¨–±ËÌÂ$®ßdùø()±¦C‚ÌÎÎñȯgx ‹/¹„:ÜôË;™ž›¢PT©ÖzvÀ=ûðIظy¾H98;‹išhš‰iЄ†"TR$1½½Y¦¥çy¨j–¯kY�A]¯“3S8ŽMzT*%¦§')K(Š Ž2Çs§í`å XEùùE’$‡•/â:.ª¦R­ÖÒäÙgvsÕU_áàÁynøæ?²å¬ó˜>´“8lS³z~T-ÁvêôT4l§Óqè)÷ã9*e³È=¿º¯ã[ ô÷qÕç>F±PåÞ{Åm·ÝÆÛßõi^{÷m|øÃbíºÕ´Ú3( _̱{Ï~Ž?þDt*¥2‡©—1Ò¿’(Š˜xi?O>÷žù)‡~ùûvµÑ²—5ç/cã±'rñE—ÐÓÓejÞÂLB‚XA “(‚öB›¹™C öרV,Î>ãdC¦¾Àò±UH#ÏÈÐ8{vîâø[°ë6_påaÇ#Oó¦‹Nã§·ÜÉë^ÿ †j#,:MFj#4³ˆ@08Ô‹Û©3R$¯Z(!$^‚¦¨ÄaB@À‚½È‘9 jññ Š©òñ¿}?÷þø1¾þ¥÷0¾bw]ýö<û,[Ï:™ Þz9R¤ëth{ Þó®÷b–úØûÄ“<ðà½<ùÌ#|ýÆoqäڔʀÆú± \ôÊ‹Yµn=¶£` H£—XëÇ3(¯8·V@æ%Ó¡ÕY ŽT ½Bä±Lƒ8ˆ1r1mç0Ò\äò·máMÿãB^|a’n¸¡»juéÒå¿<R*,+IR‹”èÍZÞ¡ ÝÔ¥K—.]ºtéÒåGX¢˜8Ž1 UÕ°mMËÆÖÇÆó|,ËB7têõErfÉÉIJeC ŽRb²–ø\.‡ÝqÑ R®„]o ¥¤¯¯8ŽÑMœiþÞµšÅ H²1ò8ŽQMײüÊ0DHÓ4¨7š´ÛJ¥;ž~–&ŠCªÕ ós“XV)wüû]œ¿í*•RBë3ô÷õâuiä^³r HüÀG7³ì×f³Ioo/¾Ñi9ä ÃÌ!U•8NQa˜$iB¥Z%ð}Â(ÄЗJ¦â˜$I²2+?ÄqzzjH©Ð4!FF‡±m›v«ÅôÌ4õùyòùQ”,• ¢0$MS4)ø]nkŤi² ð}ß÷³ME(‚f3$o¥œzÆË¸ä’›¸ñ{ùʵßcë¶WÑ3 ±ùÔS8íÔc(äû\ˆÜÀéP(Tpzæ „ÄE—~à ®vеí(AIctÍiª$)iš�))1Q R…( (1aº¡2:6ˆm;VžCû_$N|Ö¬[C’J$ïc/Ø(q„ejĉGà†L>€n V¬Çi/b•Gq=¬2{òýý„K/=ŸÍgžFí¨ãñ>€P:ss˜ž†\l²wß‹•kN:†ÅvO¦ˆJžXèHE#ŽcÔX i: sóket]#IR’$!—3 ‚Lp ‚×u1MÃÐÈ,¤K…g:V.*3G²e¢lE´ÛB1pýCÓRchp”¹ùy¾ò•oq÷]pÉë.æg·ÿV›ƒ{žczþLCÁÌåѵ<q„‚0pìM/0u¸ÅöG÷òÔŽg1*>û·Áé[ÎBH Ï xÓe—°õ¼-üð‡?àû·óîw½Ÿw¾ër^}áËé©–xöé ®"Žtª}D~ŒMžzr·Üt?Ïï~–#GæPŒo;Ÿâ16ÆgùÀ§?ŒØ0Dœ$hšÁKûžãðÔ<^5O.ˆ(XU’H%M5 ù<"_Àwštš6µž2­¹Yô7s&V1i”2^Ë' µ•ËÙz^‰vÝÇiÛÌ<ïúáï>{%Ï>™™éhB0Ð×G˜ÆHÂÐÍbf¦þå«Áƒ(Žl³XÀ÷B"<nþúu\ýÙ[øÌÎçÂOàöÏÿ=Ï>¾•«—³íÂÍ(ÞNäÒn·ƒ ÒhŠ8 °ò6/Õi¼îÍçR,3=¿À¾½ó<ô‹‡øÉm?enñ»ÔËF¹ø¬S˜Ýó<Ssóll&†{‰ƒ:F”’·*¤©ç+¨šA’‚TÁv£&V! Ù™ hZµa5_¸æ ÝU«K—.ÿåQ�U芨]ºtéÒ¥K—.]þÈ‘ï~ËIŸÌçó@&dö÷Çñïó$MÓDUU¼Ð§ÜÓÃÌá€]»Ÿã‹N%S%k"UdÂÄK ~ûèsl>scý„~–ÙšÏç—¨*¦™[ÊáLQU) EJYé"%qø>A¡i:)`è9iµš´ÛåJ‰V+s¶;6ËFWpï/ïÇ÷#Ž;þ|ߥP4q]Ó0ñ<ÓÌQ(•PPÐ4f³A’BµZ#B? / ›I’b;žç~011¦i¤i6Úí^&-eÑò¥L`EËýNlsˆÂˆ(ŽpœöÒ¹M1s&®ëÒîtèëëÅ÷}‚0Ä0 ‚ÐÏÄhÝ N2a5^)W!~—ñ¡i*R ’4,RÂÀaÓI§°wï.~ì�¹\ÂùçoeïÞùÀû®â[_ÿ5óGœrÒj¢Ð#‰’$Ä4%ªƒâ£é)ŽÓ@Q"Pb¤fàza? eQš–åÖ¦i J‚” )1()¹\Ž(Ô¹çž'¸ï¾'_Uä-o~Zš²ëég©VJŒµœN§ã'èJŽœ‘CUœNN§Îìô¾Ód`°R¹L„XÅ2ûŸÜÇðò(vƒ/ÿëu؉Ê?ûQ”’EªHžÙy€÷ïç”c×ñÓdËqCl\?Nqh€ÅÆ"²”Ç'&J–e›*$^HÄ$aL¥·B¾TD×4‚ÀÇ÷=�<Ï%MÓì:U@J㺘ù9ÓĶÝl¬_3 ‚ߘ<2E±T¤R©à99«J³§’ãkùþ÷¾ÇG?ú%*•úлxÍ…ç3==…eèØv›ŽÝBǵ©×çQuIÃÐÀJ¶ÿv7ßÿÞm|ïÆÛY9¾œ7¿õœuî©ôõUiÛuÂÀ%‰]¦©T‹œ|Ò&Î<ë4ìN‡Ï\u3¿þõƒè†Î–-çP®ô±wßvïÚË—¾x×^s#=ö +WŒóº×¾ž×_úzÞxùë8ç—Smv>ñ(Çz QÅäà¡ ¼V“Ø ¡hàØ6‹‡§1uA¥”Ç÷=õLK§·¿ÆÂÂ$ÍÅ9¢Àe~z†ûï¹—ÓÏ>‡úÌ"{w<ËšõGQè©"U•ˆ„cO; C ê­yxðwÜõ½c«Çè+•i¹mì ƒPdÐaâ…ç¡26LËuð;>NÃÇî¤BgÙªq®þÒ—øû¿ù._ýÌ[Øzì:î¿ý6{ä^yñœ|þfÙa®>’´i̼ˆ·x˜ãÏ:…¹;y~ß3ôŒ”°“¨>zΤZàÔOåâ‹_ÏË^ñJN>e2…é‰Üø­{ؾcžÇ÷m'©”X3¾š’Yen¾ÍÜbb)Oª„XE• j¡È]ÏnØ(,£Jca×®cÖý/¿Ðƒ `qq‘þþþ?¼ð¡dYÃ]ºtéÒ¥Ë6²=õn} Ãz½ÎÐÐÐÿ«çèt:¸®Kooo¶Çþ!Döû«K—.]ºtùÏDšfæ·?$BlÛÆó<úúúþ/UÓ4Å÷}J¥¬ÁüСCü®ÐJJ‰‚$IHSP„ÂÈÈiâÍf“\®H±˜GѬ¼I³•Ðj5èØUTUÃq)‹hšF’d±�™0ÆuƒL˜C'—Ë!$x¾Kšd ½U(¤ …B»“¹‹Å »wïaÕê@Çm£ •Áþåœ}öV~xÓX½z ËW‚ášžCQ5ÄÒûŠ’)3—" èz&„%(„ALe”ÃÊ„ÓÅÅyÂ0DJIœ„DQ€¢E …"š–‰·Q” i­v]Ï„MÓªBš†žCfåU%+ÇáÓxÎ0RQP’CUÁ0±m{É ›Ç1B(!J‚*Uò–iüŸsqc¤ jú4«>¿ùÄ<ÿ§¸úÚ#6}<‡^LØ÷âO=²™äŠ÷]†” Ù‡ûñŸD¤F‚AªäH“”$51 Ó´ˆãÏóÉç4’X.eæf¢¯‚Š¢@¸v‡©CÓÄqJ>§á:-ŽžfÍúõ” íú,’¢çòKñ 1¡Û¡ÓžGŠÄÑ5ãø»`äJ™h³fãéì¼ç>n¿ãF´J/§Ÿ»Q(à †Ny¨F¡¬i˜²â¨5X«–…>2 Iƒ¢i’ I«Ùb¡±@àGÔJUz{zÐMÛs²kŸM—HUP4 A€dMÆA€mw(šUE ( ÕJ C5‚�˲è©öÑl604_°€±«Ù¿?þâ·îåïxo¾üOÙóü.^zi/ËÇFpìyŠÉ•F³ÅȲºÓs”‹ƒ|à/>Êc<Ë«_ýJ¾ý¿btyçv>A»­âÍ9†Æè²aÂ(daq‘ÂblxŒðoxÙÖ‹xË[þŒOþÝ—øÅÝ0qè�Íæ«ÆÇ8õ´M¼ûŠ·r‰'"t“‰}{™_˜$ODcršÞQIœÎ²sÇì_WFJh7:Ô<šj0Óh1` ©/èÐv<‚$sïηÏÏR0T– pÎ˶ñøögøÖÿ• N?ƒrIÃõ1…Mâ'A0v̶†¾Í÷oÚÎÛÞw ç_øK>ýÁ+_»†8²q‚6Gö áytℼª‚Ô¨VzéË´:Ï>ÿ,_½ößøæõÛùÈ{¶°| Àw¿õuÖ¬^Áç®þ,ú²fëÓÔ½E¦¿D¿¡bøëûˆ^ØÉÁ½ûé¦ÒW¡ºQBè¶QR‰.T¢ E!g±ñèÕœpüZ:û_¤{”ûªÜµã nºñ|ûºë9嘹àå[9zãB"üÀ%h5Ñ5 »íàyÕr?RêxN¡x8ŽÝ]E»téÒ¥K—.]ºtéÒ¥K—?Ôžžõz$Iˆã˜§žzŠM›6‘Ïçñ}Ÿ$IÈ[¹œI§ÝfphUÕIÒˆ(Éçó˜9/r)—JxžBœxžGNê”ËåL µ,Rb\7\ʦÌFÜ£8d,H’,– Š ]ES Ò4Í\œ"Ëkã„‘‘¸ÿ!ž~z§œv<žß¦t9©gœ~Üÿ(¿¾ï.¹„…Åzzzð<MÕñ=?s†YW±T¢ÓqX¬×©ÖªH?Àn¶0 ]×HbjµŠeåÐu ?ø ]ÄkÛH!‰ã86€!4Ò0Âu}’ÄÇócH#4]R,”iwÚ´Û- #+»ZX˜§§§]×IIRÉÊÁH–\aéïï*'I‚ãØ¿w‹ù~@Ť"AÓ"T]e`p9÷ÞùsŽÚx<wÜyŸ¼êøç¹…(¼äs°lTrê›A5ˆˆ9ƒH…v +W@I5b¥€PkÄ1 €ªz(H%Í„2/¢R@ !() ó3˜†ë¹„~Šší:k×®%oü^¢ZE V•8Uh:LvP…OO­ˆ^îÇo6HRÓ¬`ö®`¤jðð]?gûý¿â‚W¿Š‘uÇò³; n´Q¼XôVk4š ~³ýaŒžµ£Vˆ€ÅFC×(›yÚí¬P«¨hzûH5•XHê¡KqÅRjHU"eæCÈNˆ®kÔzªxqLÅ(HtÝ„D¡X¬Òé´ \ÝÔØ³gý}½ôôð‹ûà3Ÿý2ë×­æÇ·_ÏÐà�3S‡0-É@_b^bª’ŽÝf`°ˆÑ–aòüîý<pÿC<x„3Î8“÷¼÷ÝŒ-âÐá½ìÞ·USä1uEÌÏM¢é‚eËúˆÂUH’8en¶Á¾ÝGظþ$ö˜åîŸ?EªDÜð«xõE¯$¥ƒm/pxj–©æˆy­„TÏ18ÐÏÈÀ/î{žuéùø‘Mâ„"Â6u\·zŽV;ÂÈQ¬™šm1½¸H¹ZÂIRÊ–Å|Û¡ ç¸âïçÖ¾ÃÍß¹‘UÇl Ñi£ BÚ~€’ ´D§>³Èeï|'¯|ýøÄçÿݵƒ]’-gmâ̗ƺ5˘—¬Xs:Õþch¹%ÜTeêP‹ýÏ?Ç­7ý’vm'±%o»`%ùÈáþûïå5o{#'m;“$ñ “ˆr?JÔCy97Å3÷þ’Áj"ÔY±r…áQví;Œ–/P©Téx6¹¼G®XAK!Û™C^ÂÞ]¿E„ l;ïå¼ê­3™zìÙ;ÇžçpÇÏïæ;ßÿ=Õ2]t+V 3::ˆ•sQ’6åJVCOJŒã¸ÝU«K—.]ºtéÒ¥K—.]ºtùcV]'Xƒ�xík_KÇî.9ñJårÖ:ßj šÃ}@B%øa‚"tâ0EA0:2„çJõæï_ ËM±mÝP1 “v»EgÅR¦$iŒeeqžë™+4ŽI“LØ´m›B¾Œçµ)4Î<çž~ò1ÆÇG©Öj,NM ªôyÛÛÿ”o}ëߘ›]ddÙ0ŽÓ"N*å*~à år&zù•31sQ”@œdqù<)`wÚ�KET)h4>|ˆñU+PU•$IÐ Ž²b£‚DWLP ™£Ýn¡,‰YR5±r&ÍŽƒaäˆÛV¾‚nZÌÎ/`å‹äry:Ž‹ïû¸žG._BÓudœå«¦iJf¥I†±$ü&1Š*È é"9S¥Õ ù§ú*©¨ð“;¾Íu×}™×¿îAB/ [´íܺùhÖ­\ÍÂüC#½x¾ãúŠU¢0% %Q¤¡ª%HâÐÆvL=¥T®bê9ÇË¢ ´q J‰¢¤¤IH­Bëøž‡ªÁ²1‹uk7·<Ò(FH Ujx^ Q‡dú0“‡^dxÅ µAèá,ÎSÌ÷øšUPrû7óÀoà¯?õQІÃÝ?€‘¾d‘WfqpçÚ͈N9…ïÜü³­¡’’h]7h7ÚX¦…PÀ CZ^€P"C!‘àz-)šÈ²Q=/BÊ,ö¢P(bóósDA/Œ±Ê=aDÛîàºí¶MÎÌ3qð0ƒý˜†NÿQså_~ŽûÞÎÇ>þnÞpéEtZu:Î4BuY6Ö‡P`rvŠj±H¢(äsV±Ì×¾úoüü·yÏoçÝïzc+ziÛs™ÞÔ²ŒÓÞÚ Ž£E1º¡áºr¹##k°Û-®¹ú:}d¡¯°aýñ\~ùÅl{ù+¹ï×÷ò‘üúàßÑéÌsÖÙ›)–ttC"ô˜Èn‚°)çÇ(ˆ Ä«7žÀ/~uÒéÍåQGJ$a€¬ÔŠ#¼�‘“¸žM‚N¡lÆ q1<:D乸qL)gbToÿó÷sç7¿ÏÓ;Ÿ§÷¨µ ôõ±gßA\ÚM‡u+V"s¶ï382Î?á \ú§ûùÉ·oáæ[Î÷´bY¥â) Z*•áŸR×áðl€×±í€‚žpö±cl9f-£U6|+Ž]Ɯ۠GD¡Gà{äóedZ¤`Ðkaó^BKC¨%ú{ñ"‰¥õ¢Z%š‹.¥j!c¯…´0 ‹¼¡ ;öä!zkŲÆbsŠ|µÄqÇ8ûÌSIcÉ¡Csìzn/·Þr7¿¾o;Ç7ÎW¼ƒ3Ï< Ïõ1sy¢h‘8)sÝU«K—.]ºtéÒ¥K—.]ºtù#A^yŹŸ4 )$J óóó(iB»]'ŽÂÀ! ] ÍÄP tÚ!¿zàÆ×£GW bwê(ÂâŽ;ƪøœtâq$±JJ±\Âó=XÊAPU bP E„¢ÒnwˆÂˆr¹ŠT5$¾‘¢ ˆ¬8J™åQ6v¸¤¤”«% % Çmb» úû{è8.·ÿô.ÎØr>I ªâBdNÐf£Ž”JV fÎÏ8Š0uœa¢k:†®-5ÆkH!ÐT iJ¹\Âs]<×E7 ¬B¨!¿f�� �IDAT‘ ¬QHÇ(@Ë0ÌiªR(ÔˆSM/P(÷¡ÐÛ?„:³óu +Ÿ•fiBÕ •8×u‘2ù—*O)ð\]71Í<Bi6cʵÂDå‹×Þ…í,pÞyÙÈñÆ£GÎqî¹'¡D6ÍÅ6†®“Æ1¤P)V™šE“q¡«’0ð04ÃHPÕ…ˆ$ |Çn"EŒ® 4U eA�RòjJsÞã‡7ÿ†Ýû¸äõçrüñë‰:.¦PIÃ3o¥*~Ýfò‘‡9æè£( õ±ùDf³Ðƒ&,TÅÄbøÎ·™xaõñQYÁ¯½šju˜ÐÕÙpÔ(øsÜõ/í› JBֻи[Þ|ÙùôU¡ïE~œÐv|Ü0!ÕTôœ‰¦ªhRßŲt¤„AŒ:¦Q$ 2ÑQRI$¨B¢IÃ,’(eÂ8¡ã4X\œ¡X*0qøÕZ•Uk×Që]ÆO~|?ïxÇÇY6Rá®zÇ=F³~�ËòY\<€‘K ’€0‘”kc˜ÅQ½Ü÷‹G¹ö_¯E’«ÿõÓœ{Þ&HtÚS»ä 4ˆê¤ÓvðRݰ(äû!écç3³ÜqûÃ\õ©/2yxšó¶Î_ôí¼öÒÍŒ¯)¸s¬«qÎ'ò«_îäæïÿ‚á¾!Ö­>†$Rql( éïïC¶JF·¨Qèã‰ûaeïÕR´ª“Tu”À£ˆBä»k%TU!ŽC C¡R4Ñ%$Qˆïy(REÑ4"‘Rdô¨<ôУT-ñ‘ôô¬ o P.ÖX>ÔËh_B¡ˆKڮˆ5+¸äåçóÚ×nãÌ­›X»jŒ¸1ÏÜÁ: È›’ÓŽ[Í›Þx W^ùfÎÚº•õ›×°ö¤M̸ æ_"&•ò2l¿…¢¨D”u ]Õyìæ[©OÍ1¼ådŠ'G}¾ v (¤½yF{ŠÈ(ÄÐtâ(B/š˜%ovÃI¸ÿ»73~ò&†ÎÜÌD»ÒI¨Š„¡ÇÄKû(• ŽÙ¸ŽW_ô2^}ÑËX\Xä W[nùÓS.S3mF—÷‘È„¦íR­œò¿üBïf¬véÒ¥K—.ÿ÷t3V3º«]ºtéÒå?#t«º® ¾ïa:µZÇí`9Å]rI HMb„ÆÂ¢ÇøØr×§ÓqP¥J!o`æ p©á>ŒÂ0BIg™¥ª”ŠeHSÛ'NbtÝDJªj$QòûB¤(ŒZ¶Añ½4!T¢(eó©[øìç>Åk.~¥R.{³©GÇn²j|9ýæ1yô1Î8sAèÅ>–aáy.…b‘V+ÅH‰‚8IfŽðw¹šJV2†>Ž"DÖ{oÛ6B@©XÂñ=â(E¨*QÑi;èºAoo/Íf]×IÒ×uÑtUªø‘D¨š@Q2Go¾PDH× ‚MJ„¦a*I¢-‰ÂÑØ ±4zŽ‚ã8 BR%¡cOqÁ+Nãï?3ËÇ?ñ#üy>ö7oçܳ·P+QŸšÂT«,:‡©U+hšÄo¹´Z-ƒ!$ž†‰®‘&&)B( ¤ ż™eñ“&)A Ä º¡Òl4p“8 Qe–c[*Wð¢ˆLVÌÍL!óUJÕ¥6"+yœŽC¹Ra¡ÞÀÁ†ÐÃkûüâöÛ©ôôòžOŒ2^؇¬Y»Ž]Oì'Qžßñ$}}¬X6È#Ï=ƒ¦ê¸^ÄÌô4cý}H¡�AJJŠ¢©ä y„P°6± * Qè“$ I’¢JMÕÑ5•4̲l%E(’D ‰bÅP0Kï%Í›´ZMF—0:<Ž*JüËç¿Æ/q?W~è­¼é çóÒþlj"›\Î I½=£Ù5!sXù>7ÿè6~rÛÏ8jÕJÞýž·²yó&Úö"ûö<Çðp¶Q,–Hb¨VʘªFÿÐr8Äo½‰»î¸—Z¹ŸóÎÝÊ?þÃÇX»v ¡úØö,3““8nUªä̧žv ·Ýú9®üàßóÑ^ÃôìAÞþÎË1,‹Èu¨7ZŒUúp¼YL*ƒyú—õ0¹ç9Öž±‘i{_3Д„öï§l)õ” Ü€ÆüQä34ÔËÀÐv‡ ©7›4› ¤ÐPõålÞü ž|;‡öÿ’ÃžŠ¨öòôÎg-Ò_É£²û¥Í!Mb O22>ÌúO$ =<7@“/'t$hš‚ã4øÍ}{yæ©Ã˜ySOÛÀÐðjvìxÇ=ÄßpÏí8Àæ371ª™ƒÅyXX o`” í1zôFLÍ¢'*c•t3›‹Q„ oñâ„V§M»>Ïèà�}ÃÃþ÷{II© ÔHU¨ ö`Ú!BĨJE]FtZÓÄ ¬X¾‚÷¾ïm\|ÉÅLœáᇶóµ¯~o|Cá‚ ÎàÜs·²ryw!íÒ¥K—.]ºtéÒ¥K—.]þP]¯ƒâ+A5º§ Ad‚`bEŠ¢‘$)ív›(đΠûfX¿æs âx(suJ“rEav6$I@5Ô¥¦û]ÏòR‰¢0ÆPAªŽ³Ô². I|ß'N ÃÀ4M\ÏG I „a¸ÔÈž1­vƒmÛ¶1?7ÏšÕ›™ŸŸ§ÙhÓ×7Ć£×sé.æË_þ*¥’ÂøªÑ¥¬®ëašV6¾Tü†!i!dŠã8T*5r9‹fs‘(Šèééeaa–”ì®±”ß (-@GY |Å8Žƒ¦é˜¦Iút☠ðH5 DÙû UEE!š¦‘Ëå°mwÉ ¦c&ºÐˆƒ0Ë´BÂÐG„ ù‚…m;¸Ž»äàÕÑt‰ï7Ðs9ü°A[üù®à„·ðÏŸÿ*—\üaÞù¶­l9ùD*%‹“6EV8•àz…¢ÅÔÔ$Rzk=„aHzÂ0@Q$Rê(dθ4Š1t ¡¤Dª *% ßq8øÒ~bF—oFÕL„€+V,eæzDA€H"öìÛKßðÃ#cøÛnaæ,,;bت¡è³{^äÖ[oãè“Nà¬7\Š×jb/LÓXœ¡>?ÚõëxüÁ§¹ÿž_ÒW•ôŒÓöh9-Ì|Õ€F«‰ƒDqDà{†E¡h"1 -Y•…tÉɬ""AÕ$š®"„F{¨ª Ä„Q€"S MA˜¡/éïÄî„„¡ƒ"æøó÷½•z³ÀÝ¿ø2ÕªÀõ)ÕŠ8^„"óHY¢Óö¨T(U{Ù¿?W\ñ^„lóÑ¿ùkŽZ½MWpÂaä¡jÍV@Þê#ðS\/`tx˜f³ÅBÃæ_®þ,O<õ$ƒC½|ê“bÓ)§à» T‘°X?H}~EQ±¬KE‘.š8|h7ƒÃ«øö·?Ï•õIþéŸJÝÞÏ{®xª‘â1f'Ñ¥ dõ† F1Çö'ŸbÓyg“ï+º«VåøMcÄMŸ8¨àµì†C£Ñ`ÇO01ñ¦§§Q¤dv~Ž©™YÛah`˜Š^१^`ý¨Æy[/`÷ÞCx~ÌYgnᤣWÚu;â´³Æ)—(”¬Pá©çv²àº ¬¢7ôf›œÿšWà%3‡±çæé©ôâ¹»÷îcïÎxè7O°g÷‹8®Ío|œ™éÇlaÛùç°ÿÅéØ-ÞséyúégX>8ˆQíg¬£y¸ŽbJŒªe7:tRš3‹D©Æ²ekpfIÓ€Ï<Íðú•Œ·ž0v‰M$R„Ìn0õõTŠ‚í‡˜R§UŸ$UtÆÆªµn%/{Ź(Êǹû§¿âÚk¿Æ5WÿC3ïì®\]ºtùBšþ~Ÿóÿ”lHEéžÊ.]ºtéÒ¥K—.ÿ}„Õ$ 2Çše *Žã  Q¥š@S!gš¤(8Q‚a †G2GãŠãìéì"]4M£#EöñHâ¬l)Š"\ÏE7t4¡’áy7%Ÿ³Ð4$I0 ƒ0 ‰£”(1MÃ0‰“4;ˆµllGS5L+ÇÂÂ<[ι€ŸÝvÿþÓ»Ù²e …B•¹¹9’$aͺål8z%?ú ã«.Ã4 ¦ŽÌP,eñRf¯¦™…8•}¬¼Et:-\×CQR³c<×EÊÌ%E †n† Aè#„¤VëÍ:EÁót] ˆ”$ qÝa$(æs("ò¤TR#M3a9—Ë!¥J§$QŠ9ø¾Ÿ9$¥‚"ª®' a¡ëRÕ‰…ÄÐL»ãÑß?ÌäîIžzò..|õeŒ qóM?à§?ÞÎC¿ù-û;œqf™O|êýQÈôÌ4}}U CË\¼iŒï»$IL!_D ¼ÕHEÆ)i’àªB ê‚4ñ;aP*ú†hv^<0066J»ÓÀ êÓ³ Ô8ö¸¨¦Å‹‡^btÕ zšP ³h�mÙÓlç±GäÄͧrêë.fnê²P@/åPeÂøŠ•4ê <ú؃¬^}Ž=¡j$Z‚"ctÃBê°ÿÀáãä t#FQd%‘*™ãT!”ìs#’$AuiÔY!|âÈ' C,5sẾƒ¢¤˜–N•‹iµ¦)—GÈ—NäÇßû1ÿó£ÿÀ+^µ–Ï|þJâdžVËGH+_ÂÊ•ñ\“B¾‡Tä¹ö _ç–[oãïü.¹ô•@ÄÜÂ$õÙErFžœY ˆ!¯д<Å¢…;5Íwþ†Ýz Ï?ßàÜ­ÇqÍÕW3<ÒK£9I}©/.àØ6=µ~T<7$Vbrº d„¡Ãbý ¹\™OÿýŸá…_à{7>‡U¼™+Þûêu­˜Ç,Àüà¯}Ã{ùþ5דºb·—]Ïìä@c7Íy›ƒ;^à™gžÃuš8®N¾P¢¿¿€nèl8z%åj‰ÇϲeËèëëcd´†¥ÛÜsó7é/œuÙëx£^bòÐ$SsGø?Ø{Ï0IÎú\ÿ~ßÊÕ¹'ÏÎfI«°+­¤]i $ D12Ùalø›hL0[€8dƒ ˜` $HBB(í®vµywòLÏt¬®ôÖ{>ô ǾÎñÿŸ °ûžý¡¯«§ºªfÞª§žßó¬0)×àTGHƒB˜¸±FZÇ“96y7»0ͬèpÒæqô€Ë é0ÃùibZ&íöÙd™Gœ&C“)‹8jÓjÍóoÝÂÁ}÷±ÜJiÅ×}æŸxôîI„L‘ßú þš N]¿•‹¶lcpÍ8aÅÄ®TñÊCK&GŽ5¨=v«ÕfpŽÌÍsÖùÛ ZBµÈ4Á)—[1q¨Èù>Iš`Š Û´"Ó!*Iè¨�!-Tjð´g^Ä…íàîï¯Z}úôùCÒEÇM¢¬K*ÒÞÇÿ½‹@``àà!í"عþ¾ìÓ§OŸ>}úôéó_GX퉀!ÔãnÕœ_À²L² lËÆu=â8FYS*åit–Éç ØŽIu(ÊÂ`õšUÜ·sA'bh Œ«B t¦I2Õ¬VJŸ¢$Áqt–aš6š^f_– D/¤tŨl»7/„¤xžOsq†“NÜÌM7}“Ltƒ4É0M‰)¯|ÕËøÔ'ÿ‰›¾þ ®ºê*Ú² h-ñÜQÜ%MˆŒ8 h4—(GÄ(ŠÈç}lÛ¦Ûí>žáe$ Ó4‘"ÃóòÄQÃ0Èù9”J£Ó”H†aRÈ9˜¶I¦Iöö¾hXÉ”5{Å]h,Ã!NB¢nLÞ÷°m›4B ÄQD"Jex®AÐ%S’80XG–ºÜýÃxÇßÞÀû?�Ï{Þ•¼â/çÿðJ’¨C·Ó¤^Ÿ¡\)35;CÐn1::Œi+¢8Â0ç¬À¶-È$Q¤ÑÊ@ZŽí¡UŒid˜† SŠf³N§Ó&﹌ŽÀÀ»÷¥Ù ð=ð\ƒFsžzm8 ¨-A¡dà Áøð Ê4è4Jf¯<Êüíwó¹Ï|šË_ú"N~ÒÔç©ŽŽ°°X#Š„¡Xœ›åÐÞG1lÍØÄ*0-â Kux€B¹Š´rØ6´ÚŽë÷òU;½è Æ÷|¤ÑséÑ;&QaX½Üá^þ® Šb:�˶è) P™Â0è¹z5Ôk ªå5͘¿û«øÊW~Êû¯}Ïxþ¥L¼—ÊA7œÃ4‹D¡C¾à!­Œrqˆ¯ßø >ññÏñô§_—þå“ä íFƒTt:M,ÇÄËå0 ϰɆˆ#Å5ïý(ßþöŒ¯*rÅÏá]ïÞÎÈÈ ívƒGwý„fÕØ¶#Q‰À4lÇÂ4%ž~¾D«¶DAÎóYnvð|—vÐàºOþ×¾ïc|ø£ßcã†Í<ë9W0ß®Q[M|x†}ïº÷>îüé!î¼çZlÑæÑv &ÊlX"Û7næÜó¶³ví0#£C¸®C¡T _ð°=4hµ$*¡V«±X?ĺñ2kÖј9L{ÿƒèÜ0ÅJ…bu ‹Gv²ëþÝäre*«Nb`ÍÂ0!‹2 ÕÁTËs“Ôgö·ç±’f¦;ˆœM5I㌞Ë2GâRÆè¬B³5‰iu¸ìÒ'°j|�Ó÷I¬qŒÔåúw¿‹NrÚsžÌî©iÖ¸þk7²kß^:Nʹ[Oe놓(8eJ›VS-çÙ¸z„c;w “µ§Ÿ ÚÆR.P¥±J±R‰RÐnuÉòItc9+ù¾IH¦"lÛ¥±üH“m;&ú«VŸ>}þÏÑt†&û5gªD@°@Ö:BG-ˆî¿Û¹*¸ÚÁb�Q\‹6ÆY š_¹Ô‘+×t+ŽÖ>}úôéÓ§OŸ>}þ3 «Žk!¥$Žzcö¶m#eOÜTJ¡MA– Ò4ö,šÝ€Liæ4›mâ$DëÞØ:X”Ëæç":A„çå°,'˜¦EE¤I‚çyèT¡”êå…šæãÂ¥eZFOÔûeX{ªRÓ4+#f–mâJ“v»Åƹä’'qÃW¿ÎÓ.{2…B( éår½äE¼áÿ{;ëÖÝÎE]ÜGb”ÄqŠß÷1 °,ÃŒ”Fp‡n·V›Ïç©ÕjT*qS.— ‚i8DQh £€e9ô:]4R‚–mbYJfè,CJ‰RI’ „ĶÌÇ£,³—ŪÒV²f{VOðÖ)hHSJi¤°ðr>ÍzL»!†àyÏ}>7ÜøSÞ{ÍûY56Äö³·395ÃèH•v I”t0L—‘ñ2q¢ØB¾Ð˶5 Ò$%‰cX½=ÇDz D“$@Ú%‹êõ­zƒr±H!ïS_XÄ Ìê'°ãÜm<ºçAKhÙ¦R-½ìØñUCh•…)­0Å×89æïßÅ _ü"ÏþýßcÓ9gÑmµ0lƒÅ©Œ žKC…Ô——YµzOXÏÎ={8î¤Dá"Îà�Iªi6B¤t8:9ÃÒrƒJ¥J±(‘BE!­ö2¶ecÛÖJœ…ÄsT&0MÓt t³ˆT¥ø¶K††Àu=0zÇÐsÆGÖ°0×áÏþôÝÜwßn~òÓfl|œÚÔ–—[¶R DZ(‡ º1KKuÞö¶·²û‘YÞwí_pêi[h7LÏeýúu¤i…ư,|¯DÎ`ÿ¾£\ÿåOró7o¦R-ó—õJ.¼è<òy—©é#LMíÁ¶mNØ´–(Hi6[tÁòr‹Á2*S˜Bc˜ŠN«MÎFv›RaùÙ¶[`êð,¯{í™™éòÖ7œ8Êsß¾û˜›ÜÏî[&‰X5a2T4(%KüÑ¿œm—?™Â)눔B6Û$ª¾R^•¢IA´¢%¢T%!A·íØ* –ti7cŠ…!¼ënÎ??G»›Ä-ŠÕëÖŸÂÚ¡ æf–ùÑÏvbï=Êš‰Æœ<¶câÛ‚RÑá¾Æ,nÒÆ2b¢ú,¥1‚Ö…ü�BJºI—¥Zfk‰ÁqŸýæCþoüã'߆-;˸9Aw)tÌ,åÉO{"rt€ÓÎÛ—:¨fŒW)ÑI›ÜqËw¸ÿ‡?æØ‘~ñGÈ"Í7­§„`ÕIë)¬Ý„JÁprxi“¶²É” q$h5c\G‡žçG!Ic¹6Yš2?7Ee¨ˆ0vÁjáêÓ§Ïÿ!I,¦uº+⩉Ež<†H9—5üÿª²Ñ`%hÂ`žn6û¸$+„ë–ð¼!„ÈNÿü'åîWúN„øÕÏï§MôéÓ§OŸ>}~«„Õ,K‰"…çú˜¦I.g’&½<SßÍ“iAÆØ¶C»ÓÂó=Ž?aœ½öày9lÛÀϹÔjKŒ¯ª288@¦AÓhÔ©V«tTJ¬RZÍ&åJ¥7:f¦$Œ#LiËåo˜ŽÒ)%F!%~>Gªzcú–eaš&q7"S1†aÒl6Ù°a=~Îazjš“O9­ã•²© KJþø/æÖ[ogýúœpÒÉdªEª\×'Ž;4-ry‡J¥‚Îl,Ë V[x\ü5M“ññq²,c` Jg(¥(—ËdZP.—‘†`©VÃqm²,%Ic\×AMªz©¶%1„fi±ÖÛ7aˆ%MZAð(ø9È2,ÃÄÎyHÓ Í0 ”Ö¨4%Ó Aá{9Â$!M²^ÑRÜËjm6˜NÌØÄZ®¹æOyÛ;>ÃK^ú—¼ú5À _ô\,+G¥ê‘/ºÔ—¦°mI«Q'Œl'O+lËbnz×qÈçzŽMËpQI‚möÚÑLC‘/å™=v”£‡qÂñÇ‘÷s,--ã¸9òÅ*ŸøÈ Ü|óݼñÏÇ$%Wô„¦R¬ Â.K ‹äl‘À€ë“™’CwÞÃ]߽˯|«Ï:®Šˆ„"oå)äKÐUt昚$S‚êà–Ì,ÔÀÉ‘ÊeT³N¡4Èî]ûÙ°~5–iÒlu)äè†] ž‡@“ó=¢nˆÌ4qÑît(–Ñ©& ;(*ûe+\!¡X,‘¦ bdp ÓÌsïÂ[Þüa6o9žC7ÞDœt©7!-ÁÐP™,‹q­!s€nWpëmßã›7ßÂE—láoÞù°ËRý ¶m²°°„ï•(Wáx6·~÷û|þó?ä±½»Ù²ådÞô¦7pþvÐ Ì/¡ÞÒX–dia‰±Ñq‚v‹f3À2-â8B®ˆÁJ4:í&–,’¤¹Þß•01¥KµRfzf– Èøüg¿Ê#¡¾ ïx뇨®â„MEþê-Oâô­[9ã¬3éÆ ßÿ§/Poî¯ì éìa±¾HÙÏÑi·Ð:CH騹¼0 Ò¬ƒã R`H‰ãä ‹mŠù1¢ÔE›–‘GhŸ¥Ù9r–ÇèØ(ϸôLNï§2`3¿{/ÂÈXzdžSO:?‹ÈâFjÎ¥6=EÎÊdÃtÍìæíýÞøÌ›.åƒïaTF£¨È!ïçh6–ñË‚°±@Ò®a{’±‰aŽ+ ›l9 Wò¸üŠgpù³Ÿ Í”# 3ì¾ï~|ó­|çæ=¸ä³·~Ÿ­'maÇIgpÂ)›Y}öé¬YEX_ ‰cÆF7Ð –YÄ4ò„Q@Ü ‘Ò¤\¨ "È9y„éöW­>}úüûOR”JȲ„@Fˈ`Š$Y ŸŒBY"g àk+Ÿñ¿ ×4ŠCtºHœ¦Ó™$#Ý+Ø”zÇÐ c2|z £W¼ÙçwŸ4…VK ” P€R þoËæµ¥  ^)5ŽÅ¢À¶ûkŸ>}úôéÓç·DX5 ) ”RÄq„iÚ´Ûmòù–c&JA–õÚÏ=ßŶ]:í”v«Cu©-γzÕz’$bͺ © ‚Ûñ†…c»!ÉK¤i†ahÑ])jÊçs˜†M'è€ÖX®Ûk¤Crù|oô]¥!ÑüÒå)h·Û˜¦Eš*LÓæ)O½„Ûo¿ê@ž“O>‰fk™f£CÐ Ùºõ4LÓâºë®ãÏ_û:ª•*Q˜Ä`˜YËË |ß­zßY§X¶…¹"ø†A»ÝÁ4-²LÑl¶Èçsä 2•!„&Ž*‰‰â!@¥Žmáx~O8ÖQ·’8V½ÌOË! #´NȤÆaš&Q”§ EA¦3|Ï#—ï9‹{Y«ZK #CmÜ\J·˜› Ø´i5_úò»yÅ¿‰w¼ýËÜúÝ;8eËVVO¬cÝú1ªšõÖ248ŒÎjt»-r®M’(:ÌömÛˆã„j¹B)²T£ÒǶÐ:cfrŠN§Íú Ç%tRL«€_¨pÃ7n棿ž(ƒ}»w2Pù}Âtž¥Ú<Çm8…v”"‘t—ë”rUDfóó›¿Å£;wñô?ø}7m¤ÑZBû6¥r™n£……X ØûÐCl;ïlî¼g'ì9À©Û·ñ©Oü¯x•$J$¹¢G¥Ra×#b —éÉ%æç—A È”&Šã^4…a"„¤ÓȲŒr¡„aXD±"U Óö0-ƒ8N¦ÍÀà ‹µƒ¤™iVøØ?ϧ>ý^ûú+¹â÷žŠô &MR,û¤YË•d©M§í´3^óš7QùÐGÞE¹,i6çHT—åF—ᵤJ1Z‡ÌæÎ»oãš÷|ŽÝ»–yÆ3NæÆ?Eu D³±D·»D¢:‹qÚF.Ãk1pð 6®gt[d7Ä4�� �IDAT2bl°‚ï:˜vŽ £0 |¿‚›C`6–xàÁûøà‡>Ê÷ï\À4ÛlÜPdû™°qÝZ^~ÕË(M˜Äñ«<iÒåÈÔ1F'ÆXsò:~ð›¸ïÛ_ãœßy…áÊ9¬ˆÃ„¢iá¹>–éR_^Æqíž#:˜¶E"SLÝÀÏÅË$søåÕY>ÊR 9eý(i§C' i§†Ç†^3Ƹt™›;J¹èá(år8‘"®-q,n!Ф£°=/—ç _¸—½5J™åàáCœvúVòÅ Sû&)äm‚°Ó@ÍÏ Ã€°½Ä¡Çvaæó¸„:Bš.a=�™b[I7£lHžvî94÷`ÍŸ³ãÏ`>Š˜94ÃýwþœÏù&šžÍŽm'óä wð„sÏ£TÁ¯HÂú2Q¤ql ‘õ"Tr9 …å"1û«VŸ>}þ½ršE:#´ZSd™ÂwŠ ƒäÌS°p�‰Db`ƒia6B¿TNÿ÷¿F°]ÄÀ0¾Îa³VZ…VXa½8CKï£M„@P(l¢X< !úÿÓþ3Ðéhn»-ã¾û`iIpÉ%’ç<<ïÿîs{׿pÿýpã×Í8ùdÍ¥—¬Y#úÂjŸ>}úôéÓç·CXu) Z­Q”àûylÛÆ¶”RDQ¼RìÓCG$˜†dv&áðácÔëK$aÆi[¶13·ˆ”àº0?W£Õjá8A’$DqŒkÛdYOͲ ÛîÅÔjKär>®ëÒì´1MƒÑÑQ–ëu„– À´VÙ "Œ“• z4 ÆÈÈ0££ÜsÏ=¬Y³´ÅðÐŽuÓlÖ9ûìíìÞý(o{ë[ùЇ>ÂÀÀ033S$iÏ·Y^®‘eq¬ðÜRJ<Ï#Ë2ZÍ&Je+ÅU6®ë⺽üÓfkCJLÛøÙe:#—Ë#½-ˆ£”4‰PiŠm»$qüø~¶, ÛvVÊ´4Bj4)ŽcÓì´h6ë‹EŠÅâã9 ®“CYÖs”Xމgg´:- ˆ€0TH£È'®{?ߺùû¼÷½ÿĽ?¹í8–Ãñ'À'®»–3N?•ÃE‚¼oqÞ¹ó=°‹Î²Þí•P¨¤7Ö=??ƒ4¡<8D¡P Yo¡°)ËÜy×=¼êÕŸGZÃE8áø5XB“0:<B§ÙÁ÷rØ™FøeRîÿÚM<òÈ#¼üÕ Ç­%œ›f¹Û¢äUè6[ø¶KýÀÚ‹K ‘fÓ‰§£µäøM' „`j¦†!q³aýñ<ôðϦ6¿@– ‚NŒãHi!„$ìvˆÂyâ0¤˜/àº>†´1 Û6=Bà8>¦åDšÑ±µ<tˆÇoâõ¯}+_¿þ^>þoä©Ï¾œåÅÇ8vxå¡B‚E-LlÛçæ›náþáK¼í­¯äÙ/x.õùLj£.†Ñ{ß2%©2]ÅCS|øC×qà pÖY#|û[ïâ´-§Ñ ¤qSvAhÕÅ`Ïr±Ý&MÒéfŠ.År‚Ì13½€9²0¦TÇ÷ÙýÐn~úÓop÷Ý÷ðèÞ‡™›Í8mk…·¼åR6oÞÂöí竎òÚW¾•̳aÕ;Ú$ŒS*Å*9Stcθðbvþüvý|gs!•‘ ¡‘Ò qœ XŽKšÀ`uœTe$2¡sAÚ6ËõiÄòݨN”¶ZUÅê¶ðò9ff¨ø>­0fdý‰ì;|„Ö£2*l†V¯Á(ØÐXdphƒü©[Ù*T!µE&}4À`t\öÌgrË÷¾Éîƒðº7ŸÁýûq,‰á[½ì]a1ÛlpÒÆl:i÷O¤äyGÐívq} 2E¬B¤- Ó˜¼ÜûÙ·óAÞpíß#X› O¸¾à%LOÎðÐÜqÇ·øû÷~ˆ·4ßÃlã²§^Æö³¶38<‚t=l±LÖn¢“ lãæz9ËÿjÖ²OŸ>}~„,ëE HÛ8$È4Å2‹d:ôËwÃÀÕ.¬ ý‹_ ¤ÿ^1õÆ ,Ì_º\)„öPJcd&6½ŒùTuh·öa ÓÈ! Âè;ò×Ж—5û÷ÃÝwÃÃk² 6nÔ›„Õàyÿú| Ch44Z÷Ü­Žæ¿¡±·ÛšÇÓüâpà€&I4õ:œz* B.×w­öéÓ§OŸ>}~ „Õå¥ù|R©B–i”R y CÐí†h2\×CJÁÂô<¥Á*ã«Æñ=Éòòcc#Ô—&™›§Û Y·n-Cƒs³K„aÄòòòã#þ¦i%I/«Óó( �ÄqŒçå0 è¹g»Ý.*Kq\«Wî$%¦%IÓˆplÏ•t£6¶%ˆ¤¢,qÁ…;¸ëGð•¯|•«¯~ Ó“3¬^½ŽFc–f«Î ^ôjµ&×\s ô‡/g|ÕAWÇ££c´Û-|ÏÁuºÝîãÙ¯J)jµ%†††PJ’|¾H»ÝÄqz[†˜–DHs¥øÉ@kA¦@)…RZi$ùBž Ð*#IcÛêE¬dIÀ”Òär9²¬×Tßn·ñ}Ÿ8Ž1¤ƒaؽœZa`™µÚJG˜–‹ÖQ€�Ã\uõÕìyìïÿo7#%|êÓà²KÏå¡ïgbÕq9”K#˜fJÔq-¹ù¾kw»ø®‡H‘qøè!òy±u«YF­V§ÕŽq\Wx|ñ«?gãqy^ðÂò—¯¹Žm[·€Ž! q ˵iJ’°M¾X⎿ξ={xÞ+®B H§ˆMÍØÄ(I;Ä7 j³Ó<ºw'ׯgìÌ3È: 'žtµ ãùäŠt•díøA0Ë–Í›¹éë÷㘵…EÒDÐ Sª@!T HLÓÀô Li‡ Ú–„Ý6¦k#Dï¡€#M|?G’ ÒXÑhtY½f/~ák9pð(×íœvÚy4–I—R¢´A–™äók8|¨Æß½ûm 3¾xÃûX;:Dcf? McJåa"¥¨VŽžâ‹?¸~ì»lܰŠùç×sÞygÇ]êõi:ݦiÚ% $ÍV“R±ˆ4 æ–ð<È\ü¼KœD¤©çåY\˜îµÐ+ƒ›¾ñ]îþÑC<øÐ/XZªsúÖ³¸úUW±}Û)¬^½šBÁ'M#êËǺGyòSNaíZÕš§bûX®A»ÛÅrM¤éxžöÜòø ?ÿƽìxþ„Vˆéhl;&SIbÛ*ÉXî¶ðœ—N;CJÏ®ˈRu#CkÑÞy[˞u92±¨«Tò9Úâe¯|/~ñÓxÞ…2?3ÍHVÀÒ‚zÑMà¸0¥eB-Éð-ß+’$šZ£W‚òÈGg–P|ã–24>ÆEžÁüÜ1¼Â¦[ä裔òEŒöüèVšíâU/û3:µÊ0¨4&Hbʫǩÿd»ï½—§]üÜ #LÜG”d,)?Wfpb˜K7n碋N¥Ýn²gÏ~þ³G¸ùÛß㓟þ4gž~&§¶…­ÛÎdíúµ -¬ÅL:#MâþªÕ§OŸCàÊÐ:Aˆq2K§3 Ý–¬àù#Øå¡^€´0 °/ ýcEá¿*ÌJ niùø¤¸ô®q‚àíöc8iŒïŽaŠã0Ü!„Ö½â«ÿèmëóÿ¥`f٩ٻWšÑÑŒNvï’¸¬YóëB¬�5{÷jâÖ®ŒŽB¥ò¯EÒF~8ã±Ç4ƒƒ0=-9zT0= ëÖõŒfßôܧOŸ>}úôùM «ž—Ã4m‚ $Š"<ÏÝËÍ2…iš˜¦$Ë¥b)4ããcø^©©N<ñD$-lÛF˜¶ë³~ÝF¢$)PYo¤Àó<„=Çj†!®ë’ÏåЉ&ºx®&ŸÏãû*KI³iJRÕVªçTu¥,Óèh‰”8M‰“³ÎÚÆ‘Ãßä®ÝÃλ„…Ú2­ð\‹z½Î_¼é üÍ;þŽ|ä:^yõË8ýìÓ9zp­fÃ4ð<ÏóHÓž˜©3m١к7š¤uJØ IÓב$I„Ê*‰°mS ¤fE\í]|Z–éút:ËLlÛÁ²¬Þ÷öL”JÉ2ÕO—È^©—a˜ŒŽŽ’¦)I’P,‘Ò$ŽRºAÓt1M‹0Œ°A,Ç$NÂ8µM¿ÀôLÇöüŒ3ÎÚ„åÞŒ4`ã «¨T×pöYy~øÃÛøé@Öð¹üéOa¨’§P( Ò­5*I± ƒ¥¥EÇfÕÚ5¤*%îFøùíPâæ«<´ó1~x÷n^ó–—pÆ™Û)z×ᘂNc Ó4IP©Â͹˜¢È·ÞÁ®;ùÃW]Mᤠ´‹äFXœ<JUæÉ;.Ù9=º“¶žÌðé§Ò8:M©¼Û‰Ø÷ÐC\ôŒ ›àá‡w1>|iš0T ÛéÆsì߯¨7;ë FG‰“ß2( Ø–…NIÔmB–b¸6Ò0zwRbY6HI³Þd`x-�Ïyö qœßþÎ( kii˜4;Æy&&Öð½ïÝÊ›Þô®¾úÙ\õò—£ÂL£ &x–G+´È’2Ã#|äc×ñ×o¿žóÎãþ+Î;ïL\™‘Æ-<Ï!YX\À²Žcã¹9LYFk“,¬[³žåÖa”6\l³ŠcÓlÌÎH^ÿº×²w_“Uç¿•·¾óÏ8óÌÓqmƒ(ê-šíy:aF–86Ôó\ü¤“Ag¨`š XR)¶4pí2±†Ýö³yb [7ŸÀž»~ÎÈÚQÖ?ã<º¢Ò1Q²L·›‘ÏÙXމ“óH…ëx&ıÂ÷ÊäÆ×b'  eq¡Î† [Ù|ÚvL»DµTa¹ÞatÃjî»ãî{x‰×®]‡r]d>¹As™v–Q* áš#«†Q¡Aùá?åÈá9.¸h a˜ç7íbË–›7oãû·=B±Tâ Ÿÿ<ÇŽåÕ¯x9K“3Œ<(ÍE—<•¡±Õ´šf¾H˜¦È8!± ¤a°45ɾt=Vr꥓Ô&ÑF—‚e“sLBÚ´’_÷\Ï…ò�gžu[N;Ûp˜Ÿ[æë_»‰/}é˼óoÿŽSN:žç]ùû<í)“e1vn€¤¾Ø_µúôéó¯ˆã%‚àJÕ"CÛ¯"Eéc8•ßÜÆ°~-È$ËbÈb̬E&B:Á~d0MN–þ8ÅþAý@ëžû´ÓÛьÚµ‚¥e¸çþuaU)¨ÕààÎ;3³pÜF¸è"ر£ç\ýÕ\Ö  –—áüóû÷ñc‹‹’Z *ÑVûôéÓ§OŸ>¿yau©±ˆëú " I§ÝAÐwï5Á ¢(Eë”òÀµf‹,“(eÐl¶ðrUçh,ÇGJ›¼çШ·ÒÄqŠ…qØ%K#’X‘óó8ùN‡8Vt„4‰ÑYF&5*I0cË6qL‹Œ I2aHßs�CB±4H·Û@%]¤eó ¨DrÉÅòÍoÜʉÇD¾œÇËûL™ìuåò¼ä¥/䓟úgþù‹_ vØqÎÙ4›Kt:mš­Y¦WDeƒnØEë×’¤ª… Ž2,ÓA⢳„T%H!0M‰eZt:]Û%]ɯuñÑ’(À°L¤Ì"Á4õJÖkŠÖ•öBú Ã&Q ç2¤±P,•iª&AbÓ0ˆÂ[šèT U†%{Ù¸µùcT+e OyÒÙœþ0wÝ5Ï+¯~gŸu!?ùñ=ìÛ»H–A¥bsòñã\~Ù…x¾Isi­bFÖL°ptµ¥¥u¬ªhÔæ°]•hJ…"Q^00r_½þ( Ïÿƒg³sçaÜ8Ö�*‹ T}˲xà÷pÓ _ãÍo~-ÎñëëËX¾Ëüü"ްñý"z›GwíâŒsÎÁ \XÀ-—ÑR³fýÛ—YZXä¤M›yìÑÝ<éâÓñý*ùÜC#yâ4CJPÊFi›n˜ö\¢¹ ¦²étZ$aÂàÐ%Óa©V£`˜½sRh@Ðj§¤©ÃÄÄ <øÐ£üÑý gž}ïÿÀ_Ktçl\×�aày¤çó÷~œÛn¿w¼õ%\ò¤'’¦ó¸9“¹Ùe<·D¡<„?àsÇ­÷ðæ·\‹ïû|âã¯âÒ§_Fuˆ£6¾+év[ÄqJ«SgõšqÚí&–m°¸°€—+1Tb¹Þb¹ Ì ÒT¼2@ó•¿Ã_ý=<ÅSžº™×¿á%œÿ„äò6ùBžÉ™£tº)•b º Mµ:ÈìTÛ1‰ã”Å¥%\Û¤lUp­ £ ±m‡4S–E©R$1›.8›É½øæ×oâ¥;N¦0‰Ô$-…Y­`ºEꀃGf)ªlܰš-Z%ib—Š(,ZAD±œçüm[843ƒS™ e¥`æøñOaõ˜ÇHÙ$Ò F'ƉÛ]\³„ÔÎ@ŽÔ±Ñ™‡KÜýýŸðÞ÷ü#?ùÙ!"¹òó uöí›ä=ï}%_t1³S󔊂3¶ŸËèÈËÓ“˜®¤:1A¤Ll3Ïü|œW¤äy¥ÈÄÀõlÜ‚Åí·\ϱÙc\þ´K±GQªEµ4ˆŠ Û&g`¨n—œ—#Ž›mb›.* Y5>ÈŸ¿áMðúˆ]?ÄM7ÞÈÇ>úa>ðÁkyîsŸÇ/z"ë7nè¯Z}úôù¥L…Ö)JE„áÝîaÒ´ƒãŒP(¬Çó&þ‡ô· ǶKHÑ" gIZSˆ`Ÿ2j%oÞ4ó¿’õÚç·•$,Ó¬]›Q* FF$÷ÿBpà�lÝ*ؾV×hµá4?þ1ìÚÕs»ÎÍi<OP,À¦!ŸÿgkM0?/¶mT«–±\×ÌÎÁêÕßïƒ>}úôéÓ§ÏoXXuóJÅt–é`8&®å!¥AkÒD377…Öw<…\‘V'Åó:A—N ©5bÖnðh·«E†<¦æ¨ Œ‡ Ò4D‹ˆN+Àµ ؆M) Ãõ”X¶IG„q¯ðÆÉùÂx<JÀ¶ )PJ­´‚:(#ÑXÒÄi” *‰ña.¼`_¹þ³<ùéOel¬B¥:@šf4ÛuF*¼öÊ]wß×®¿ž=ûrùåÏB˜­» :e 3C©ˆ8 ±lƒnãX^ÏÑ+‹H*ºá2~ÎE¥)–e`JÙçGª&Rj”Ψ–Š´šË¦)m y‹NPC !,Ç'M4Yja{9â(¤ÝÈÒ^6¨cÙt; Ž•£42@·ÛÅ”édIˆž Jga€”1qÔ@e½"®øoøØÇ¾Ì±é%ŽLî剗œÃ ^\`Ýê*×Mpü†5ˆ4`næ0¾ ¥¢ËÒ‘]´;sT)ù#tZMP`(“b©B{¹NØîpË ßá}ïù"ç?q¾'"FIØ´yÂdir–¼á=~ôµë9°óaþì¯@ä5 “‡Ñ–GÁ€[DÚšÙc³ÔggÙxê©ÅÍ¥6®ïv""#ÃÍç‚%æ'§¹ä píîÀu5JåÀÒ\pÑf~üã}x¾ËÃ;qê–­ݘÁj•iêµ:–å ´ffn ?ïe2_›gpÕ…9ªÃÄ©dtÕï›áU¯x=WþÁïñÚ7¾ŒÃ“â86iàÐ\Ž©VË Mptß!^÷º×sò‰ëøè¯et´H§;IšĪŒô‡Ñ–Ïzw½óæfã¥/»‚ç]ñLVoØHmþ(*éЩ/!\“RÞ'J4c#cÝIª1,›¡1q’R®VPÚC«¹ãÎ[øþŸåîÝGuÀáÊç]Î5ïÛÂi›7£Ò”F½êL/Mщº4-K‹DQÄÄØ‹ uüü�žç02–gnv’І1Œ)$ÅJ…Fؤ´!ÉH ȯ_ËE/º’G®¹–o~ðyÉ5¯ÇV 3MIL&ifS\ÃâRa¸,-¡6;ƒe˜œ~êiØÅ!Ân6‘ÄTü˜TDhÛ¥ÕI¹óG÷òä›ócL»I« FÓÃy²8¥<V$32ªc§ò‰÷|–·þåµì¸x\\à¶Û&T-î¸ëfºq“s¶ŸD9§ÈabÝ*†F/e°R"xô~n9z=åãV£”…À+Øh¡1Ã.„ Û+‚2yô?ãçß»ó.~ŸùTâF I·›Ò S|×Às é£R…N#„41m! ›$QËrØ´i#oyç_S›Ÿåg÷þ”»îz7¼ám‘çÛ·îí¯\}úüWG+4mÒt‰Vk ­còù!„XaT±íÁž(ù[š?)„``Ù&¹|A :uºÁQ"½D¡p"–UZ‰,èiþV~Z#d™`iI3;£¬['€ýûaß>8p(cïcšõë%hÁÜl/‹õÀÍÄjÍI'÷„Ùƒ‡$7Ü(¸êª^á•Ö05ñØ>M½!ð=Áðp/¿uaQ0?¯™™†0ì=üîmOÿéÓ§OŸ_²’.ø¿X‡ýµÏïþºÜ;žýúVµ–H)É”&Ñ)zåǶ Á2,š­:‡cbý: Ó£\.32êÐé´�ÁüÂ"bÅ©FÆFÙ³o'­f S*²L …�4Žm“©^™!%–e­\.÷¶ã—'E·ÓáØ±c‹EFFG@ôZÛ³,[‰HJ‘)E.—Dz ‚  ô2Mwœ}6¶åò™Oš«ÿä*ŠÅ2 ÈRÕ+Óê&\~ÙÓ˜ÜzûmX–Í9çì@ “ñÕ9rð�I,©–VÑj×)åLâ8$çI¤„z½N¡T¡Û 1-‹\ÎòY&q]Ÿ$ÖÄIŒRR€$MRb#Ae‚0N‘–E£ÑB–©±m ˶”Ò$iB¦ÊR2ÝËü´, ­ǵRÒ¬·qL C®`Ž•C> °Ü"Ræ)Žø›wü“|i)¡Õ¨Q,zvh7æhÔ[˜†A¹”gjò IØaxU•\±D·²°°ÈЇ+0st’0Q˜žÇ»¯ù<¹œÉ«ÿü%¸žÍš5ãT+P.ä ªV06ß½á«<úð^^øü?`ø¸qšsGP2Ã2Às„”Ã`ÿžGa`í:ÂV‡¥z“²4 “7ç']¤>8ÍSž½( 8°’ñÕké†Ö¯ßÈ-ß½—jµÄÁƒG1 ‡é©cŒ a‚Ÿóñ½JeÌ-ÌÒn7Áp™ŸœfÕê˜<6ÏÄÚ¹õÛ·ð'¯º†·¿ó*®|þsYœ¤èP«-⺶[dxl7~ùzþö]ãÕ¯¾‚K/»˜#GöSÙH©4ÊôÔk6œÈr£ÍÇ>òq¾ô¥pÞ¹¸æïßÚ‰q ©™ŸÞ‹ÐŠBÎÀ2òÔfçñ<‹z£Áˆ;L7Lqœ"¶é'`“‘ÕÌÎÌsó·¾Íµü"Ǧ2žvéFþå‹â”ÍÇG ¢n‹ÉÉô[mò~¡W:ÑhP¨Èû.A Ðè,Å0-,Ó"hµétš VñýKKKÌNÕÈUóä XÒÀµ,ü|ž¬Ý%“¹Ó·ð‚?z1ÿò¹Ïòð׾˩O9—V½…(ÛL U˜™o1TZϪÑô´ZË ³ñ„Õ¤!4• MEÃÜQª¥AëmVŸÂ>Êî³\yÅ9ŒMl¢#ºxÆsS‹:A[ÝŒÑnùö·xÇß_Ë{Þ÷6®|é³Xæ¹ÿ¡_ðÄ ÏãÅ/¾š+¯8±¡qPCdmZË3(­ITÀìÎÝ =ŒJ‘B” fÖ¢ij´3ZÌǸõãŸãøÓ6qÁÓŸ…"¦hQït¢˜$S½"À ‹=2€mZ(‚4MÐY!LLÃ& »H!‘†"n‡TŠy.¸à\žö¬ç²×|èÁþªÕ§ÏuTŒNš¤z‘0] Šjx^•\n†1 ü.•@ÙFϯ‚¨ePé"q\£Ó=„— ã8•ÇEØ>¿yÒ4¥Ûí®Œì瘟×;¦Ù±Ã`íÚŒB!ehHbYš£Çz$¡RñЙÃô´Éþýš(RœsJÊæÍŠ™É·¾mñðÃ&—<©'ÌZvÆC-öL1-Ÿ‘!|ߦTrxø!ÍÐà/…UE÷¢Ë~ÙéЧOŸ>ÿ•IX^î½þ[½·B€ï÷dÙö¯G°ôùÝT“$Yé�beâÚì ¬¿ a5I¶e¢3H3EïÉoÆ‘£‡8røÖ­gÓ¦ã™X»Šv§‰çY†I>'™žž%MšÍeLK``“e1kÖ|¯N’däK>:‹Ðh<Ï'MS ©ð<Óê�©J±- ÃpWJžV„Ï(IJª–D¥1† ®e… Ýn!@“� Ó’d™ M–é`Y6N‡-§F£ÝäsŸýg^öò—“óó$±"ètñ<Ÿåå%Î=ïl¶Ÿ½›nú&ï{ï{8ÿܳ˜žæ„6!´Aš8xÎå%’Db;CC¤©ÅâbSxh¡ˆã˜De@†eyX¶ƒ¥ T–¢²Lk²,£ÑêP è,×»ø¹Ç齟fa„Ö­@šË’˜¦ ù™¡uŠ&Bh¢( <ÏÃól „(tBHË$cŒXpë÷oåØÑ6—=ëRǘ™>wˆ-/�� �IDATÀRmSj‚Ζ™pú©Ç3PÀjÿ½÷޲ë¬ï½?Ïî{Ÿ}ú4ÍH3ê’%ËM.`L° ƒ1l²\J ! ’î½tH=„0„1$L³qÇ\å&[’UF#¦ž~vßÏsÿ8rïû®uß÷âÜø|Ö:ÿÌšsÖÌÞû<åû|ßßê1‚~ÀèHÇ-ôcò8¦V­S¨8t-zaÌ–»¸õŽ{Y^]`jºÌäº)–O…);¶mÆ·ÈÃÓ¹þëß`ï#òŠß|=õúåeœR ¤ àdÞw;vžJmdŒ  YžïÓêöñ|Ï+ÑëìÚu­FHØšgjj=ì9ÈöS·ÑZm³qãf …BÊÝwí#I3öxŒ3NßL'ØŽAvBgl|„,Oè‡]<ÝÄ.i·ê#[øþu·ñ‡oþ�ù¡ÿ ~ýÌÍ=†çø¸^ ¡ŠH•²²Üæÿí<ôà=|öê÷°ûÜSXX<ÀÖS¦Ð0hµ›ÖŸÏM·ÝÉ;Þùv–—$oyëKxñ‹®B˜«Ks-£Z)bNÇ1Ð-“CGŽ£i`»!žW£ÕébZ.®cs×Ý{øÆ;þŽ{îþ)I:Ϋ^u%/yÙo03½‰fó0•E4=%Oc<ÏÃu<°´´L£¹‚W´q“~_a&I¢ò!’$Bf a(Q2'C#7$IÑn­"Éñ<›~«–)ú+«”í3—\Äeý7_ó Ì4arçm7'†_ “9I§Mžæ<ôÐF×’«"F?$èGlÚ¹“ŸÞvñì2KK«x£Ë«Ðju¹ñ†Ð…Îæ­;™[JùNƒ’SEè.–?ʦgðo|?ú³ÏÓÉ-=ÑoŸà‚svÒ\<̇÷ñÇó6 !Œ,Å¡Gî] ŒpË ×39½‰ÙûHgQ#P ¹%1\ƒé5Yüé|ÿc_¢hÛ\ôœËÀ/Ó=:G„àÈü ºQÈØø(cc£$a@EhäJ!„&JiRž<Њ èǶmâ8.Qw‰™ ã¬yæpÖ2䉌Ì!l [Ñ“K„†¢\>Û=Ù”êÿâÀI»ˆV߯RŒt…Ë?ÀuÊŒÔÎÀ¶f�AkÏ!'ApìØ14M16¶™•‹cÇ岯ÈHt³™œ‚ÕÖî{°ÉÖÍÓ¤IcÇKÔjP*ÅlÙÒeýúÓ4¨UK<v Èž=’jUcÝÚŒƒG޲Ôì³mû4[7ÙÌϦß#ާ˜›ÓD‘"Šú´Z!¾ïãûþð 2䉽LƒÆwß=WYXU LÖ­ƒ™ddÿ²'†•"ÿÁÔuoþÕ­Éóœn·K¯× T*Q.—‡Âêã#¬*,SG×-²l tjš†e™dYD¯×fÍä(c¥‹i'‚Z­Êƒ¡Ù\EÊœ~¿‹©YhX”+&4V[ý’8ÆÐ%®e#¤�RI’4Fh`»öÉ?G;)*\×fËÖÍ„a@Øk§!º¦c˜š.±,…"Ë2e9aR*•é÷"²,ÄsMŽÍá§?“j½Î×¾ú¼ðʫشi½^Ÿ4Ë ‚i–1>¹†«®¼‚±‘ÿrû­|꯮㢠OaÃúMlÚ´…±±qFê£L­# »´Ú-ÒTÇuËÄQŒ”IC>xê,G)Ûr‘*£t‘yN¦©T„qN/Ì(ú#üèŽÛètz\tÑ…èº6RM(Ñ3…i:(©ÈeŠ…$Í¿lÇ" ûä2År]dœ!ÐQ9¤iŽ`˜D’ÉÉ5Ôkc¼ÿ½Ÿçþß/ÑëÅbŠ%…x.<ãé»xÇ{ +'è´–Ù´u;¶cpbî0®S¤T,’II«Ù"NF×L§Š›n¼Ã pɧâ}*%›ÎÒ²°Csuž©5·}ëî¹ë~ëõ¿†C ÅÉ¢¤ º(™!=H¥Z§R¡Ýë¡„Žžåxå 20­Q˜#eÎúõ3|í+×ñì+ÎcëÖMÜvó<ÿEO§×ïQ+ש”8v|‰ùã9‹KKŸŸgßÇ8m×VÒ0&ÉbÒ4ÃÊ ”PDI€fV1Í…ÑMÜüƒÛyûÛ?Àg?ûNÎ:g3ÝÎ1оN¿ÓG¥.¾7ÂÜÒ,ïz÷‡ð}—|üHöÜKµæ¡áPòLjú oxÃsý wò¼ç_Àüþ«ñK6ó'f1ô”RÙ¡ÓnsøÐq\ÇEz}Ï+¢>¸ç¾¹èâ§SÑ=n¼ñF>÷¹ëyè¡<ëYçñ®w½‡ÓÎ<……åã4ó¸nÎêêÝ^ƒS¶l¢ÓIÐôÂ>yªe|b”( )•*8¦5ˆEH2Ò4!BÛÆt­Uz]…W¡\4üJ“ˆ,yŒgÙ„i˳™_]fÔÔØõÌ ±Û}¾þÕ¯±û²§rÖ³Ÿ†“›:v­j’Š„b¡ÈÔô•Z™,é“å–i b&¬XU*u‹vR.1Ý*·Ýr®cqê©»Y;³†X yÑo¿‘|y…|ù8±Ú䵿ó¾vÓ,ša�o{çûØuz3vm`îØ!ü¢Ëµ×¼‡µSdYC«`°~r Çs)jë&§X3:NÙõéØ6MãúøJPu=’=óO_ÍüÒ<ô®wâ̬cui•$W”êuJq‚„Tª5ÆFÇYY^ IbJE™)„0AäÙ/J“$L\×Âõlâ8¤ÕZÅ´-<¯8,×2ä‰LA° ýDbÙ5„WÁ¶Ç0Œÿ×—Ëkh: [”Š;Qy‡ ?RÃ²× D0‡ÏÂãˆeYT*„4ZMSHSAµ ££à²k—A§ wÝ[cnÖ& }޶¸óÎ3jÃéi—‰ ]ÓٵˤÑPÜw/Tʃ¾Ççª4W<NÝâ²c‡I¡0B¿ïÑï @$ƒfXR惽ÀÿÌ–5dÈ!O â‚ãÇ¡\†Jå-Ò¥)8(iË�Ç@  œ Ïñð,mx ùø.ý²AƒÈFº]¨×÷Öuù嚦aÛ6Q±¼¼Œ¦i‹E´¡ ùW/¬êš…aؘ¦C–õÉóœv»A½^c×i;p,‡(êÓ»ä¹$ËC<·À©§îà7ÜK¿×cÍøi ÌÏò¨UlÒ6kÆ+ض‰ëéˆLbèÆÀ•ŠDÓš&�‰RRJjµÊÏݪY–â8&iŸlꔑ$r þdŠ4KÈó ¯`£ëQ¤…1Q£”†¡ÛŒ1t–™u3üÆ‹_Êìì,Gå‹/¢ÙlR,(—ËìÛ¿Ó²¸êªçsùs.áŽÛïàþûaÏžûùÎu×3w4á”k8÷¼s8ÿ)ç°aã$¹Œé‡ ®c¡ ]H šaF)™L� šÐ5d–¢6­^D¹4ÂìÑ£üÙŸýW]õd.¼ÈB*‰D =¨<G…ràöÕu4M¡TŽR9£ƒ&c¹L‘y6°ë ,7Ö5˜Ùº™cðÌg<›nÜÍÝwÝG«3¸§–©Sö lÛ:ƒe(¢ ÅÊÒ–i02:A–(d–aZE|¿ŠÐ5'V±<_*“¢¡.û›¥P€×¾þ5†àÄü1fÖMpÊ– T}G¸›þðz^ÿÛ/§¼a†•# ª•QúyˆnyTl$è³²¼J¡X`íÎD6h&…r™F«ƒmY膅R‚^7ä{×_ÇSž|1ín“{ï¹;vò·Ÿú{šcltÛÑÙ´išååˆûåû÷rêÎÓ˜ŸŸg󦵨ºN¥R&è‡$2Åu Ë"èC¹Zá_n¿•·þñŸñî÷½…ÝgïBªA/ cªå)tÚ€?ù“÷±óô-¼ï]oåàÜCxž¤€g¯ÃsëÜzóù£7¿]WüýWÞÏÙgïfyñ('Ž¢X²(• ä2²t Þy®Ñëô»9Åâ‡z”™ 3<éü§±çÁGøØG?Æ­·õyÑU3¼å­ogýú8vMO©¸œ81G–)â»àdî‘'¶m¡¬A¹\–f(™’§: òŒfc…J¥B¥R'î÷iwºx–M©ì³Ôî‘H =;„Z¥Œkè 2²<%Ê%¡JXè®2SöÙ~åsxÉh‰¾ö›8šËE/~ý 4Ç%’cÝElGƒ<…4Eêºí£"ƒ53Û!6pG7’µ[túŠÎÊ÷?´DšgÜyçìJ‘·½çmì¹ïA’%ƒéÍOÃ×!± >ñ׿AeÍ™|ðŸäô­ëF†$fjj™§$† ÕêP®‘™dt¼šAzb‘ Ó£rÚ•õÓ˜ŽÉåyªšFÝ(À={¹ç[ßGC^ü¦×᜻“ÕÃsœXmP(—0ó„ŽnYô‚€•ÆêÏ3à²,¥£é2—diŠi:hšN¡à“e)i–bšžgáû.B3éu;ÃÓÇ!Cž(P¢tAÔB3=¼Â:Tq M3øÏ•A*0Œ"#µóé÷Ðë�Ž¡º.¢Ä0sõñÃ4MjµB(‚@G©XZ,B¥baš&Ž3p“îß7É‘YÅò’ξ}‚€sσ ,&&,|ð޳΂^¾u-Üw”J:Ë ˆ\16ª³i“Àóz½ÁZßq"jž^J©¡°:dÈ'4RB«^z)ŒŽÆØ=<*$ý(å¡Gr;œ²jôðk-· ZŒn”D‰ª^%W9&&ºÐ15M ź_µ¨ÚnÃáÃ0;;W×­ƒM›`j '#Ë$¶mS(8zô(Q çÃÇKXµLFžK”]×Ñ…MGôz=3Âó<4CÃu ÚeIÆGG CÅâÂ"#ãe¤”8¶ZF¹ê16f‘g Çñ±ÌC×èvšØ&()1LǶ‰’>«¦7Ç I’"eŽi|PäRCJc ®2ˆ p\=A†ÌY–&†aã8'3EMƒv»‰À ßíQ¯×(ú>ï}˜Ï}îjžýœçà|Ú­J渎C«Õ@&!^øvíÜE?È™=¼ÀC{¥à•øöußç‡7ÝÀÓ.|O»ø)¬ŸY‹mê4›ËXŽe9t:]ü‚‹ã8„a‚_(  ´‘Úx¥1V–X¶ÏC?Âü¢Æ/¸ˆr¥FvÉó,“𮡔$Ï3”’H9é·m‹<Ïèõºäy†a ·iI’Š4—†E–Á‘}P*püØ!|¿Êsž)ýæ*Î2õzKdI�yFP,õºØ¶…ã–éõ{DqJ¥R'•‚Ng¥ üR•8ï“KØ»ï1n½íQžtÞ&Öoœ&“'ÐdÆü‘Ľ·ßz#÷Ý}#¿õÆß¦6Y!i¬Rª¹¦£HMpbaV«Ëi»ÏC¤’¯ä%ºibš6†i"0ñ}Ÿ;n¿‹ç<çœûä]\÷íøðG?ÂO=›Å….Û·G!6NóÈÞJ‡~Œ—¾ìMxäNVVVq,ËDGd©Ä(Z$YBµ<ÉW¿úm>{õ—ø‹¿|+»wŸA»³�dnP)Ö)øU¾ó­ïò¾þ5Wüú yù«¯ä}{¨–]4áR«N±´ò‰|ˆo|ã:®xáy¼ý¿¾ß³ ƒ<_a:e¤Œ£I’¥³PÂs‹Øæq$1ì*SS›¸÷ž{ùÊWÈÑ£sÞ“Îâ–[®djjEΡƒ‡)KØÒF3`jM^oÓÔˆ‚>?ýÉ6oÚL%(¥(—ËȺ½6Žã`é¹™Ëd}º®M¹\DªŒ4 14Ãб,ŠHÂDZ°M“Gy„r¥Šn;TÆFpŠ%VÃ.~&™~ÚLݳ‡{o½›t%äé¯{5ä IJjFFëÄ>RÓH¥À&Vi„ßõü«oR(—yÆó^rÍ?ÿ˜^ÒE7%¯yÍ;™Ù裊ð©¿£¯øî篡ÙXämï1»/}K]xÒ×ÏAöWq\ɱÅcŒ”KšbµÙ$Q)AR­““Ñêø¶GÔK°Ð¨lœ¢I7Š+Í,ú÷=Ì_ú KÍv_ñl6?ã)ô;+ê5¶O¬!Œ#Vš 4ÓÆ3 ºÝ6-MÃ÷„Ptº]übmpÀ”IùÒÓ4IÓ¥r¤Ê‰ã !~–'­‘¥9¥Zm8k ò„ÓU%t篸V*3§†Ðþ³º7š0qÝi„°ÃôZ(l{(0Œx|ˆ¢ˆÅÅ%ÒT¡ëë)¥‰º>0L”˰n-LNê<ú(|á ‚8VT«’ÝgiìØ¡ýÜIå8°e ¤©â¡s?®Q,êìÞ Û¶ ªš®„Ç8³Z­“G©a–!C†<qÉs8vl ÀU«áígcå/¤Ç£Ã,Vi$œØ;ÆæÉ§Ÿ^®G4“6ݨËrw™D$xxÔŒJ(ÚÅáÅþ åÝîà°ñóŸÌuž7˜ë.¸�.¿\áû+,,´¡P(P©Tð<ohÄy¼„U×õPj VZ–…m[XÆ`a$„Bæù )U£2‰Ê†©“&*¥A/äð¡Ãœ½û ºÝ¥R‘‘QVñ\Ÿ8n†1Žã¢ <hº@è ¡)Ç" 4M§Óé�ŠBÁ%ÏR¦¤YBšr˜ à Iâ(ÇqÜŸô*¥c[QŠ$#ËR\×¥ÝêP*•±M“( 9ûœ³ŸçÿkÎ>û .¹äFê#ØŽMt;+äiÈšÉõ,,68s÷.|ú¯±°¸Â‹^ü|9̾}{yÇ;ßÃYgíâŠç^ÎÖ-›º¤ßïàyU‚0Ç÷ÊÔ'j|ó_aûöf†íùôß~žÓO?›ú9S,/7Ù¼E019…$'Nt]!Ð82Ræ(%îîÕ´ÁÏ~ö¥1 P躆åƒDBöû8Ž3xŸV@ˆÓÊ ÃŘæê"q´B­:ÃÂÂ2##5ŽÍ&K%k¦Ö’KE„躇í LË!èwãÛ-Ó #2Bj#kX¸÷ÝŒŽR*Ø¿3™Þ±“j©Èm?ºƒßù½×2¹±@ÔY Ê!Iú”œ2†.@HZKKôz=6mÙ †I¯ÛÇ- óËu¦E?ð‹Tš“ʈíÛw²ïÀ£¼ø%Ïç–×ý„£³Çyæ%Oãï¿ò]Î;çzÁ*›7odvö›Ø¦Ë}÷Ìô#N,-Ñj/²yÓF6nžâÈÁÃT«5Â0£\åúïÝÁŸà‹|æê7qæîí4VçˆÂ ÏÁ)NS®Õ¹æËŸç‡7}‡÷}àÍÔ&Ç ¢&iœÓë 6LOsóÌ'>þ7,.4øôÕïã’KÏåÈìCÄaŠ¥i|ß7Y\êG)–éR­ÖÉS821 z­ÂÞûùÖµ×ñÝï}‡3Î<7¿ù<é)粸8 z€ G3»ØŽF«s‚±ÑµºÅüñEdž¢i‚Z½†adzÆâÂ"AQ©ÔbÐ=0•9ý~H«Ù¦\,' ³³G«×è]ææf)•}J£ãø»\"‹B\×% zlÞ²™n?¤'xÓ¶I¤"Ô–æ™/|! àk÷e:Ý€ç¾ü*Ê3¸¹Æâñyb¥¨T+êÄJCÆ 7ýøQÚ·‚í-óÝy \õÒsøÚ?þ >ø(_ûÂ?06^âe¯»œ™©V.1õÊ+9rèN¶Lo yâ1]A©Xañø#,´Œc÷ÂN›~P±ˆ‚@ ²XÒ^h°iªÈÜ‘$HDž0¿4U¨RItþöõÜÿïQ¯pÕ_súv:̈́哧 ©R˜¶Åøø8Iš"QÔjeTž‘g1I–áØ6½°O+jµ:¾e“$­VÓÔq¡™'³”%Iš¡k&qž#r†U°C†<‘È¢“NÕö¢ª?ÞèöþEªáãºk‘2&Žç‰¢€Sá ÄÇe³—†í¶<YÉÕªÂ4{‚ŸQ«ÃYg)’D±¼¬áûŠõëá´Ó`llñ7U¥›7 .¾X°w/t:°y œs¬[§ÐôÁçšæ@(д“'Šþ×ÍY† 2ä‰$µZ°´۷ömÿþ°)&d)^f%Z%  XKY§ ö?⢇jV’›`mÙ¦“vÈÈHÓ”nÜeN›£®êÔ¬¦6œ{ÿOÓïÃþýauaa…;1wÝwß33³qc‚”êä\ªáy¶m…ÕÇkͪë‚4U(À4-„DQ H ÃD"BPð tÃ>…B×ñHâÛ„µëp}ɱcû‚>–©1¹Æ!b4ÍD]—=™ædº Wƒ�ü$dY ÄPóäj+I¢@G×]³-ÓBJ c+ i±À0 Í@)yž¡ëÅ¢OõQJâº2™œœàÿàwyä‘G¹ýö±aÃ*•Ê }j”£‡Òí6ZN–wYXìQ,UéôšlÙº‘ãóó,.<4Ï?ôI®ºòù\üô Ñ Ç.ÐhöHÓ•Æa~ÿ¿À'þê\þ¼gpàà<úðxçŸâ’Kêüð‡‡9ÿIS”|4í“§ †¦aé.RèäLÃEÓ%Äyž£ëú¿±xK)BG cZæ ïÖ4I’„ÄJˆÂš¦!sp]Ÿœ”<ËqœZÉ'í¯0>â±ïá»R°mׄ݀0Αš‹á8X¦K»ÛÇ:åªÂ!N3ÐqqÿýÒÏ¡Rô@ÅT=EFÐj±çÞy,;dí¦í;z•ºƒí¸øz™( ±A’ôY\Zbbj tœ¤Ÿe9¾í’÷{èR‘¦ Y’§ £+xêS/àŽÿ /¹€S¶ŸÂ>ÿw¼öõ¯duùë<öØj#ëfÖḖ-96·€TŠñ‰) 1=½žã³Ç™žÞB·×¥àU¸ö›×ó¦?ø>ý™·ð” /`aî4]âûq¤(JøÆW®á›×~“÷¼ÿO)Ö–; Ë]ÊÞ4*òùØ_~™w¿ë \öÜ]|ñûcdM‰~w‰‚í’$1š‘’åŠ^£ÊÀ²òÌ`ßãl˜ÞF±X'R6_úû¯ðž÷~W¼ò©üÕ_}„3Î<…fkGº‡‘±Ýv‹Ååy¢~—m[×159Âòb€B'†®“g9¥B‘<MpN– dYJ¯×F*…!5ê~¯ 9tdŽ,S”J>º©& ¶ë2:1N…äyNÐj£}<×!ŠcVšm*Å"q6È�¶mËri·ºX¦Fi´Ž£»ìÜu:/°m¾ÿµ¯ñÅý5—]õ<Öœ.U"V 2°u“‘± þá³ÿĉ+|ðÏ“gžÅ£³û˜\?Å™gŸCÙ+Só\Î?ýT¢þ*ã[Š,?N{ù5O§akda‡ÈYÈT§RÐh„a³Øíâ cZ,.¬p׃÷±Ôl³sÛtaA_ÒÌÉ:š­3)âåˆ]w=wÞ| [6Ïð¬ÿòR´][QIˆ 2%Ñ,%sò<F7,<×¥ˆ’V·C§ÓD‘S¯×pL!ÒAÌJ¯R Ër.uMC7Y¦HÓŒ8Îð ›‚]@Èá¤5dÈh«„ W¡3qaùPšotë stÝÆóÖ£i6Qt„4=B¹lb£Qf ð«» <ϣݖ,.¦IÖ®U¸®öo6s¥’à¼ó4¶l ˜¦¢Xˆª–õË÷x÷Œghœ}6$Éàýµº¢èÿâ3säà÷…øEÀp9dÈ¡¸:8púÙ8 ƒC')æã÷…÷ѧÃÎâNÖhkÈ ~µ€ïôa”ý2©“’’ôº½.³ýYZª…VÔµG‡üÿ0Ü{ï@\=ûlصK11Ç ~ò“>¶msÚieJ%)ÕPP}¼×GaǦ®cš #å ôÜqrR*lÛ4‹ÊÒ8abb-&KKMN]3ƒë@JJå2º®Q.yðÁ½>4‡ïK¼‚N¬'ÈT¢kBüÌe)º@©AÙºmû8Žƒ®kA€@ò\„pκ4# ®Ô\Fäù áVÅX–…ëÈÒì¤r¯“eÙIGl—Å¥UÖ¯ßHEôú!ŽSàœsÏåÄüßûþ÷I’„+®x³í§\ò ÃËv‰¢˜‚ï#´Ãx¾ÏµßúÛOÙÍ'>ù¾tõgøØÇ¿€axÖ¥Ï M%¥¢Ã'?ùEþùŸoaÛö›6ofµÙâöö@æ‹‹ %.ºø*z½e”L1Œ%a¯hƒfj XA€”Ïó0 ƒ ÃhPžmÙ$I‚¥ Ò\§@Á8–‹Ì£k7èR.—qìJ)RSb‰Œ$ìspö1læR,’g yšà¹b¥‘ÊÛ.¡ç&†¦*"Í"ÐL KòMüBXS/³zt?ž-ðFGùÇÏ]ÃÓ.>Ï|î»|óÚïrÁÓO£—w©z>ýNH¹R¥qì�z‰uÓÔÆ'Iˆ QTª#¤„¦†!BSxž‹P­f‹‘‘6Nsó­!•y^ùªßàï|7YªsÙs.ãºo—·üÙQ2ãŒ3Ïàæ[®!M{x”óÎÝă{~J$¬›ÙÄêj—‘‰i®ùÊ×y×»>ͧÿö¸è¢'³2™ Š¥*šY£V÷xÇÛßÍñ…&ïx÷;(× „i4’ÌLmåøÑÿõmΰ�� �IDATŠ�>üá×rÖî4Z‡f!4ò$Ç2,’¬¦h¡Fè¤Tcëæ:€÷~à#Üÿà<õü'óíï|ŒM§9xè�ó'f*ad¤ÊêÊ~ÁfíØ$ReÌ=ÆM7ÞÊ%—¼�×5Є Z­'1ËË« ºfEiš"t ˶0Œhvû¸n¿\¢à©×G£�ËÔ1,“ùãÇiŽWv0uƒ0L0 4ËèD!¦é` tB²HQ0‚î qš²’l™äŒç<‹úXïõKüíG>Éù÷Üů½ðJÖÏlàÑÃûie!UÓgë†q~÷uOçœ3·ræEgrjg-a¶‘µ—°5—4ŒX]=ŽQñ0tÉú ch͘å;æi¯®R¬Ö1¥ŽÌBêõ"F¥„’&q£EÍñ2ãðâq.¾ðbŽ/-õúxÒNH{y•Êøn¥Æ£ßº•ßüÚ2gÇEçsÙK_H樕%t2Ã$ÉSL#CS™èr)£„~¿Çjc…V«‰i阶‰æâWÒT#Iržç“e9y.I’Œ( ^M ,š"I#ìá¼5dÈ€ˆH²%’xÛ¬aùQÕpž`×B`\wŠ<‰ãyúý9\×À¶ËÃGåWŒ¦iØ–®+ÂP ëŠrYý;±Ô4abB01ñ‹ûøÿ„eÁÚµ‚µkÿí½ÿ× "Ë ^WhôúŠnwï:dÈ!Ot~YW‹"X^QìÝŸs èЙl05-sǤ™Áä(Ø'ãU²TÇ5\\ÓýyAHL̪X¥‘7è¨Gãä*gÔEúð¢ÿÿÌÏ¢m––ày¹—_®8õÔ]O9å—½{G,/¢-kÓ3äq^¥i (,ËDˆ ôg¢¤¦é躮%Ð4Ó4Ú¼q ŽåòÀûÈ3IÅèºI¯×%Í"ÆFÇXY^att”‰ñ) žO¡à£k:†abYžç ÛÄ4 „$IBdYŽeÙhšŽÌQ˜…(ÓpɲAçr!§çºn`YšEÑÏs¶m¡éŠ‘‘£##4›+ƒü§Ò ÃöêÊ2S“kyýë‡-›·óןü=´É‰i,ËÅvLÆ×­¡´’€4MèôzÜvû~Î;÷Êþ8¯|Õo±iã&®¹æZöÜ÷(•ÚËËm>ûÙkyÊ»øÜç>Äö»h4VA×`÷YçqçOîeë–[·l@ª¡Å=ÛÒÉ3‰Ìy"‰ã„8NȲœAv¬u²›_FÇdY>p¹é­V€çVX(eÐnü 2ŒÖ'ðÜF“v§eØXf¤§±t¬£ù” Ut¥ã9.ºÝn‹~ØCèŽg#hX®‰aYôúm:Ý3Së0€™µSÔg6`86ÿý­oe|Í$O»è™,®h|ë7“j†W¡ăÒôN“#ûä”™µ¬Ý´‰~? ËJ3XmµH³ … R­R,zäiL¸–IØï3>Qft¬Æ‰ùE<_czÝ ßýö-\öÜg3;;GÒOév;\|ñ…ôƒA©ÚM7ÝN¹\&ŠS‚ æèì¥B…~÷zþð÷?ÍÕ_üsžùÌsh·cïÅIñšWÿ&ÂÔ¸ú‹Ÿ`tMÃvpQ&GOç¾r-—?÷w™š,ó…/}„ËžûÊ“™õ“D½.2I) ä¹" 2’DÇ+Ž23½“5k¶ ëEnºåNžþÌ—3{ì�ŸþÌÇyÓ¿ÃÎX^™£Ñ<Nv2æèìfÍÒï&\½BÙç‚']LÔ1 C7h¬6(¸Fê# ß/]×1-ƒ,4‰k¶ÚŸ_¤ÑhPªšVi†…ã ˆF« üb‰r±BÉ/#´ÛmÚý> @3,r¡‘Kc9¸ºMÄt:-zAŸr¥ÊÜü >ôc§læªß} Ï~Éó¸ÿчùì_|”ß½±¾FÖl¬Ì33QcûÆ1¼÷V¢åýôš‡ÐÒe|£ ñµ€zÅ¡XréM—ŽÒh-’D=’4Æq]*#£˜¦IG¤iDžÆÔŠÖÔªx€™g¬©S+¸äâg°qzOh8RQR&V/äæO}†ë¾ü5lÓâÊW¼”ç¼éw ª}Cš†ëƒ²iŽP9šžCž"ó˜4 ÈÓ]X¦E±T¢>22hP¥rtJåµZ…‚ïŒ÷ÐP ²,'MNtß/1{ô0KKóH™g­!Cž ë„<_ ¤IÏR¤å5¨âš' ¨ú tÝÁ÷·P(l& [Á2YÖC©¡•ÿWTŠ<W$ déÀõ«(Ǭùk×J|_Ñl(M…”bèZ2dÈPXýWã`À‘Ãð/?•\ýõ6_û^›ù£‚Bn#CI’ÇäBR,a@¯ý�ä/å–cQ¯ÖÙ>ºŠ[ápx˜}½}Ä*^ðÿÏk=E’$„aˆ”òçÂj»=T——îãíÛ¡\މ¢;w¦lÜh‘eeZ-,xâäáHù³¦•ÿñªUŒ0ìS,úx‡4ÉHSAšæ†A¥ Bӈˆ\d $ä’‚WĶ<ºíœj¥FÁóɲ Ë4ÃË29~<£Õlã:%r™ÑÉb,ÝDÓu2)Q¨“y­ éC7È2qòáèºI–¥†‰úɮں®0mAž¥èºy2cU‘å92—H9xÅq Bázyš`š®[¸[m—4Mp— °mÉå—_ÁÄø$?ºõ6¾þõosáÅO!X^F7Á-H’¯P§±Ú$`íÔFþîó×pÁùgðþ÷ÿ%ßø§køñwrln…ûöìDZ=Þø{¯¡P(1ìãã<øÀýÔ«pú©gòGoù;vìÂ÷m4RlKGL¥aY‹ …ÒBÓЄR’,©E¿„c»¤iŠÌ$B×M§±²ÌÚµëè´;˜Â" –ñýIœt\ÏD:­¥>åˆsw?•÷ÜÍʉUN½à\4]¬®Ðïw(:tûMT®£çàê§€ƒ‡Úu<,ËfÓx‘J‘¼µÀ?ýÝÕTJe.¼ìrÏFlÞfs÷ó,4ºlÜ8J­â ì¹ýfê¥Å™µä:V¡€La' Ò¥khTyŽnA§ðÐÃqêé›Ù¹s{~ŒÉ©I®¼ê…¼÷ÃeW\ƶm§ðÕ¯|ƒWüæ•lØ8ÊÖ-#<v`…ýè|Žãq|þgœ~÷Üó¯yÍ_òÞ÷¿‚'µ›VûzÝU&'wÒi*2¥ñê×¼š§ÁŸüÙkùéÝ?`ltŠÉÉ-=þùùò—¿Ç¾ù¹¼á /'N–™_8ÌHeŒåMÈ-š½6Y¶ˆBbš¹²ˆ ×µ¸îº›øÄ'ÿ–j­ÈŸ¾ýu\xñôƒUV[ccE,CÐï ƒ6šæ"¤¢ì×ð¬"«2pÁ&9›×¯áÈñÄAÄæ-ÛXZX¢àù']ÎI:hF§TN£Ù$ÊR¤hB§T©¡ë¹dY‚Da9.¹Lq „¦Q°\¢vŸ^eQ7£ExaŒeHŠnß- Üöj›¹ålÜ´‰~»ÃìáEÊ•s _gëÓŸŒ;Ráîkoã[ý<[N?…m/< ôÑ„IÜ^¤ +òî­¥YRMRôËXxdA«³LŠÄ¶ &Ö®!]Ž8øÈÃ4»]‚$¥Ûê¦9¶ã‘æ ,¡‘ôÛq‚«ä©ÄT‘çtW°”Éšu3ý—=ÌÝ÷�V°Äjpá¯?Ÿ]Œ*º´ç9£è±ÐXÅÈ"ªF -ìŒ<ÄQ‚ÊR*ta`ºqc»åJ ÍÐÑQÈ44§“ƒñOƒ±̓㜎m»|BÁ"IÃp;dÈÿä mI–õéõfQJ§PÚ†åN<!2Uÿ_¶ŒèºmW)&Ȳ>Î^üÂfL«z²jȯæ¸E“´Z‚BáW+Xhº"ËY6ÌX2dÈA_–Á˜ØlÂÝwk<ð�ì;”ê}¼éÌë{¹e¾ÅR£Í®±Ó˜q¶“ie4i¢”@ÊÿÙ˜+°t‹:ušZ%¼CK¶Ð4 gxéÿ7ɲŒ¹¹9[·n¥X,’e⤨*¨×¡TTe 6RjlßnpäˆÆž=ƒìÕü ´5Ìó_4¬tÝ_dµÿ‡V}×Ã2LP )A% q㺤ÊIã Ï·HZ­r¹Jœ5Ù¸a+GŽİr¤´(ª(!¤ÇÚÉidËK‹LL”h·;TJ6YšâØšÐÑÐ ÓP±N”§¸žE±X"IR¢0¥P0 ]³0ôÛ.MSò\b0è ª”$Ï““;CÓº¡“ËhB…šÐAhHßE*…i*ò,Âq-¤Lèu›ì>ó46m™áÆ›nà‘Çæâ‹ŸÁ¡CsĉnèdFÄ 7~j]ð‰O|‰[~t€—¿tÿøÇغí ^ö²·ÇPªÂûßû:ÖoØN¯Ñ\m³nýn½å<ëÒ³h¬.róMwñ®w_E¥F!k8zÃ0‰ã]XdhH•£›…C'„qÇ1pŸ´—Q(Z´V;8Z»´–}ô“4[Çù¯ïx‘Œ:¼ÊÀ%'òœz­Lž„,8J§›2=½£h±uûF}`÷Ýx3[NÝmZ¬›˜B:6­0¢V§³ÒDïA/£jÕiZm›¯¿- Ù´ÖàÖk¿DØù½·ýåY¦¦vQãðÃGØ¿÷~vÍ\€¥ Ž<¼°™Ø¶ƒ ÝWGw,‚¸Â P0MË4~· Râ:6yœ¢ë:[·o Mv¹›Ÿ~êjO48åÔÝœ²kÿøG¹üyWð¾÷W¾ú%Œ9ÿüSØàvöíS,7Rªck9°Åò ~û·ßÎ_üùïð‚]ÊJk?¦i Ù%ú±D³ê¼äªßàe¯x9/yÕ¥4;GÙ¸a‚‚»†ùÙ”W½ø±4É?üýû¸àÒÝ4–îǰ%åªG'è"”C¥RA¦³‹sŒ×Öbêe&F62wtŽßú­÷ôóûo| ϼäi$iŸv§A§±Àâ‰>æÆ *•"I:pàj–‰® 4Ç"’~ ”À’ dz±l¥$^ÁF7 Í"t „ÈQ*8®nÆ9šfÒë†Daˆk›¤YL³•«]Ó £Ær áåèYŽkšÔjSt£€,Q”½2^Ñ'‰"úYˆf(̲Á¶Âzª…I¢Ø¼~‚BÉG3u²4À@pÊîóعét~tÝÍÜzà Üó‘{˜¨W¹ô¹Ïcgq„}÷SÈ,Fõ*+YD»+q :‡ŽÌ²|b•3Î:Ã2éôLÕñÏÞÊ=÷ÜL&«í&4cÄ© k6qb]VTN é”­£¦(Uý ðà÷±÷†Û±â”µ¿v6—¾ðy˜#p-zA—•Æ*³H‚>Ý(¤¹Ú£V¨156JžèXæ SZ(CJÌ“‘"Kp\“,ON:ó%Ža‘§É z#K‰ÒÛr‘2¶,Óe)Sk7Ðj7  »4\ˆ òŸ[TílúÙÃó¦ñýmhÃF¿X¸ŠÅ:Í}݃¸Z SsÀpa(®þJ„M¥ è+q¬Ñ0Œ_kTÓ*½I<x …Õ!C†<±×Š(ê²²ÒäðaI³iqË-£ìÝ/Y »ì¸8 |FœÞaßÊc,Ò ›÷è•övªf•1Ýädáò¿÷XX”(áã¥KÁ–ká˜Caõ_(ÌY]]evv–B¡@­V%Ï-ŽñhµÖ¯¬]›!å oQµZÄq VÄ<4¡ñ‰‡EƒÿµÛª¦ùïóÚo´ÑÚ¾S@ä S7ñÜ®ãRôK¼ºn‘¦9a’e¾[À÷]²¬C©T¦Ùì’É€(ÊIE®åògî>›rIcÿ˜†M¡àc˜iD]’$DfY$Ñ•‰i8¤iJ„DaŠ”Óq”Rä¹<Ê«ašŽía[.†n‘gŠ<ËIÓMûì½w˜\åyþÿyO?gêÎìlßUGB‰ÞL·)ÆØâŠMüƒÄ$&¶Üã$ŽK·8¸;Æ8‚md1„@QÔP—V«í;»Óçôs~ŒPšfà‹ñÞ×µ×îµ»×93ï9sžç¹ßç¹om× ]Sˆãz½ïƒ¢„aD£ÙÀ÷=ÂÐ%›Äxá#Åš.ñÊË.bçî<ôÐ#Ì8†|¦‹ZµAàûL'ص3fÛŽ}ªLµ6ƒ¤ü@ÆqàÃ{5nüG.»â"vîÚË¥—¾ÿøÃlÞ¸‡íÏ>Ëy.cãÆGX0?Ëù_J¥:E"i!Ka x¦a¢(’¤# ¡€ªk¨º†aª¦B¥R%“*P­T°L•XÈŒ.rû~AÃŽ‘d /p@‰|EбëUtU"ij”Ë“Ì[ÖHDL—ÆHô8ñì31d‰ ÷ÿ 3™iI8h&**ÕJ™˜Œ™£#›%kj¸Â#ìáÇ?º—®v}ÛÅøð>.½òu¨º�=“<.žÇÄ8l|p#Š$ãNÏà7Ì]°ˆH³pŒ$n~âz.ŽS# šˆØA>©„Ži´ÞšfËd˜ÛßÅ‚ÅKiÌ”ééêâ»ß¹ ™+_÷*öìÛ…¦«–Âÿòs SæÒWŸ‰,Z¦[¶ ÓÓ¿„Ãc£¼þ ïäºw¼«ßþv<§Œm‰¤$fª—T¶‡ /¹œ+_9—_ù*&'‹z†¶t?;¶ ñºËßÄÂùüà_à„`ÏŒ’0“A B¢ÐÙN"k"é2uÛ#™î`Þüå,Z~*wþè'¼á 7pÜÒßþÎyÕ%§úE«´gMúºòt¶e‰ƒ€D"‰ªê¤RI …™¶4µFb¹HÕ­ãPl†ÆGhÚu4M%a$“ *ÕBЍ7*ØÍÍFß³‘eˆ|]ŠÈ§“d“IDáÚ6¾ß¤V-â» )B™Tšr­F3 šŽD(ºI.Ó’×±‘‰Ðt‰TÒ ŸjC—d$`%%tCB!ÝH²A±Ñ$lOsö¾Žw}ö£\|ÁExe›Ûÿþ[<üãŸv$&¶ £m. ²óÈ*y‚¦ŒU2V‚°Q'¡˜H~Ìôä(‘_£#×FÒ°Hê:]íXjK7µÃlCGFRur…’ù¤‘&Å»×sÛ‡?ËgÞ÷16¯”Ž\†\o'ßpê‚*nƒX‰ d0t´¢c¡‘6L’©$V&‹j´d¢*I|'"ÝV@Ä2nÓE×5RÉ$BDx®ƒe˜˜º‰çÚøAIòˆâ›U 0 YŠ Ÿ [;a0›…Ìb/ë$»A­¶“Z}™Ìr’É…H’2»0ÿ¦¼ AžäÃ4ziQ9 ¾=»</v!AG‡Ä‚…‰ä‹C¬jš`Þ|‰TJ0:1:鲚Õ˜Å,fñû‰(òݽ÷þŸþôßñ¡ÝÆ3OQº‡8îò§xåy!×.;?î¿–«Ûþ€nºyjÿ“|õáor×Û8P¬b%[ƒÒ±?™æÅó0§Mî;ÈÌÌÌìâÿPU•žžºººX¿~=wßý/üò—²mÛa</bÑ"X´¨ÆÐÐ&&&""•‚X´¨%á08ØêP~¹Ëá> ?##/]ÓJ%ŠB|?8jeY öîÝKww–ÕÒó3M¤�E„!LÏÑtƒãOXÆ®} „D¡'ŠCTYfzºˆ¬äÐ4Ø·÷ ~àâ86º¦‘NgpœÐêÌpì&ºnáû.~è’¤ ¸ÍžïAÄ€, ªÕ:’$Ž]É(ªÄ„aˆišÄqD³Ùl%~BÂó|,«Õ1Û´XV]×[Ú¤RËH&Æ'Œ V/ÒÝ¿ãWžÊOïú¹L;Ý=]hš Æà—÷âª×­æ×ˆ /z=K–.À2Þÿþ1A†-[¶ðŽþ€È øÐÍŸâÙgGq\xÛÛnàÔÓ—qÎY¯ä’‹ÞÄe—]@ÂH‡sqí&ª¦"B×m‚ªÒ’ Ë b âÆÖEE’„‘cdz‡ù‡o|…›?øVúû;Ù¶kƒÃ5>|Á©¨Š€Ð'Ž" Y¦63M6“¡Q¯P©L3gÞ�¡ëQ-WȧÓIJÀõ=:æÌa¼VgûÓO³ì„Ã-=eázAàù ä¤IÁºu÷1] YÒ°{ï^ó†ËHšDZÒín™K/9—ï~çAöígh×0‘ãÐÕÛCº·@©2E¬Ëx~€a(H’B-r2Ž‘iI;T«BÓCQT¢ bôÐ¥™ º™à¬³Î¢V·yàÞµœqƹ¼ó7òÍo›ân¹å“œvö*.»ü"Ž;îë<³­ÈÚŸ=ÌÌ­·>ħ/æÚë_ÇÔágqì*‰d9²Ÿt¸æµ—qõ5grý—c7jXViîúÁ/¸é]ÍŸ¾ç•Üôî«QD•áÃhª‰¦4܈0’Òk³aÉâq’íÏlãK_|/Å逿üôŸsÆ™§†F Û®“Τ!˜fKæÁóCtÓluªÊ2’ªÖÓÌŸ?Ÿ©©)F††0ªnºŠerÇwÒÑQàì³Ï&NE¦i¢i žçE1QQ’Ϥ‘%AƲc Ûµ‰‚EH€4jUâ@âP­HµdÓæä%×v)drtê혚Žu·Ù$™0‰‘*F>^F.žç1sx"ŒiëÌ`!ÅZ«-ÁIW¿šžåK9´u#[w±eÇvžÚº…ŽÞ^ú/&×ÙM¾£‹ãæÌCÌIc#$ƒ¶\/Øj‘œH’W’„’IPwI겚!°e&Çǩժ<<ô8ãŒ<½ %Ž0»3\ðš‹Y~ú*܉1†GGpr0åqLFTCÒcúÌ¡Z®b¨&mJ‘–±¬¶rÇÏ~B_oçœy# F IWÐ’A`ÛH2mé š¬â6šT«5d%Â4u¢¨¥³£ÑXŽEpDÃÎCÖbÉFÑgÛrf1‹—'b DÄuÔÀF]mCQ³„Ño W½ƒ(`7†Á4z܉Lbvy^dbUÓ!‘�E~ñÎiY­‚Òvb*‡Z­Žï›³d³˜Åï)±Q©L±wïÓ O’J pöY'‘ÏWH&¶ãU'¨ùÝDv“dÝ'W‘™Œ”hÌü U$ÕÕÅ §‡´œkMÿÝNÏóhÖšÔ‹uÆ›ã$ƒ$¦k3[Ÿü_¯[£ÑÀu]&'')—K1‚,§ioÏ ë1†Ñ@Ó, Ã@’Zù`>sç¶´X¡PhI¼œ19 Ï> BoïK”XTUÁJ$ˆÃˆ(I&“$V‹ÈŒA–¢ @VA’#â Ä÷\ C¦Z«Ç i*SSEúúòHrˆªJ´µéìÛWbt]ÇuâÐÇvl,-a(„¾@74b9@Ž@QT$©eàâNëüJë÷²,ˆ¢¨Ubh!IŠ¢„>A†!–eáûõz Ó4±I\;Â÷"‚�YGUŸ3ÌŠA„DQ@ â8 ŸKsp÷N]s:±Ï<½‰\áLU£\ò;Üàc¹™oÿ»¬9¥‹K.9Ÿ+^ýäó_þò_ñ±OÜÌÏ×ÞÃ+κé™Ã”í–±Þ±Ç.åæ|”Ïÿí7ééíâš7\EqªAoÏRÊñ~X¥á%V‘Ah8vˆð¦‰0h±Jy:f^ÿbîüñÙ¼yIÈFÈúÇ Ðà„ÕË(—¦H ø>…L†É‰qjv…öö,Š,á{†¢ ª*ûž}϶Y¶b%'uv2vhˆÛ¶sÌ’e´eÛ˜šž P†ÐPe@ReϾý¨¬Z½ŒkÞ~í½Y*uÐu §QE 5–/ŸÏI«»Ø·{œÜv/oºúrŒ¤E£6¢ËØA„çFGs‚„ "BVZd ç{$Mß÷p]»Q'•4)ΔشùI.»üJ¾øÅ¯²r剬X±‚o}÷ŸxzËVŽ=nÿüã;y‡3Ï8“­Ûîbßî Þþ¶bôÎˈÂi íŒ:¤rsÙ?Íuo}úØrÞùg0:vSÏ Eð©~žuë~É­ß~g»C[H'M¬t lÛ#ŠUTE¦R²1MX´hS£M>u˧yð¹é¦«¸ä’ 0LÇ®ÐhÖQU ׳ñ}8U“I&SÌ”ª4?б@H¢e*'A{>‡m»xŽGè9èŠL*dÉ’%ôöö¶> Ÿ];w‘J'éîîB’"šÍ*†a`ê:ºhI'WkuRÉ R UßA º*aj*AÓ#$bN_7%·%;±ª 4ÕЩ{6‘ëёϥLêµ*ª/1R,¡KURˆbCS!Œ l™\*…¥é ÉÌ9u sV¯¡´þqÖÝþÏd)ŠÓ3LîÚÃÐÖØ —”•&&FO'ˆ³&}=à0Ó¤ºo”]ê&섆mב£â¾!r’ƒ““ö*Ü»±ÌÂÞ$·|âF:æöafd|·J²-Á¾ÁÝt$ ‚J™òÔéT !¹Ô›MÛÆ0“RŒ¬(Têe|×å¼³ÏÄ4Ô›uzæôc7m*õ2^bzkÄ7 p›’.PU…t: „èFËÐO’$„PZF D¨ª†ªjHŠŠª„ˆYwŽYÌâeK¬ÆÔ *c¢"¤²PgIÕßÈ­J5Ìi�� �IDAT`戙f0ŒM”ÈaÖŸøÅ,Á÷ªŠU…AG$ "pÝ–é­ïÏš;Îb³ø=Î!â�!šhÚ4™Œ ¯ï�f¢Š[9ÄОišò„à…>iÏ¢s¼—ÚXƒRðÛÇŸÄßÞF±´‚e©e˜j!)ÄñÎAüÀ§Þ¨Sª•—Ʊ|‹xVåŸÆˆÖT¶ëºT*•£?»®Cgç4mmÓȲ‡$IôöÎ%‘°ŽÖé4ô÷·ÆâaÁ˜;7&Š¢—嵈c(aÿþ©,ÄK”X­×ëH’„®› IxžG_o†iàº.aØ*î2ŽWG–" S§i{Ùgz:dºX%—kÃq+Èr+­U4‰O<žGÖ?ËÌÌ Bòɤ5E`™–n¡)’!Ë š^èâ¹.aš¦¡é*õZ?ˆ £–9•$I„aH³ÙÄ0‚í<•%|?`jj Ë2I&[†Z®ë:A I š&£*:q´¬ÔÖ!”õR“l"ÅÔØkNZÉc›î£TZL6»€_ýòi µ/åVÞ°–×^}6ùÈ_1]t¹íŸ¾ÄÀœ.ú LMN¡ª*ßþÎW¸õë?äk_û9ïz×;(t-à‘‡rãMW2a/+q×??À²ãæÓ?7Gµ:JzXVõzY¨H¨ …+KD‘F&ÕÅcüü盹ôʤó4<—MO=ÆÙçÎ#“¶(í§«-MøºIefϱ)är$3&º"LÚó&'Ç©ÙùB-i²håJ^»ŽÝÛ¶³lñ±XŠ‚«†H¾GIàGŒŽL16^¤áÂ+.<‡öÎnå"±ž%›ÈQ)¢¢X\|Á|ò¡S*Ť;úñ¤ʵ"=LM£ë:aØzH’‚ˆ#¢ Õy,„ -›"•LR,©”K¤S úçÒY­qðà ?¼íûœuöé|á‹_àýú8ïÿàûùø'ÿšo¼‘¯~íÓ| —^z·}ÿ!¦gÊôÌ1¹ââÓ[÷€ärðànº»P™˜á†ëÿ˜?|Ç›8ïüÓ)W¦èhïczÒãCø$Ö?Íí?ú–ŸP`d|½=¸N™(t ‚+™Çõd*•:}}ý¤Úz¸í:ÞûžÏ0oAÿr×?Ò–Ïw™™™Á´4LK£ÙlbYï#$C7Pƒší222†iê„‘ŠªH„A€ïû$­$ª¤0m»¨BÐÙÑD¬\¹EQ(•JhšF{{z£µ ¢ë:† C\É&•MãûAµ¢k:º@ Eˆ®¨ˆP"ð#jÅIÚ&µzƒÀ X¼h®P­×Èe³ØžÃÐÔº®b$L€ Â÷}TU%©h$ 9Œ‘d™¨TîU©Ï”Ù=S¤…<ûä3X®OÒ–I¹VÁ°tÆŠG¼@öNÃß)3æ4é™Wcbh¹ê1ÐÓÅ¿zœCåI²íòä$“â´ƒavÐo§â<Éö±:;Ç“ÛNH³:C}ø�ÓûpÂêÑ¢ˆ¹¹†‘ Z­@,¢§Þ@Rt4-Y%ˆ}dE¡»³›âÔ$^à`{M¦Ëe:º:G øB7@CEŽU"?ÂH˜˜–Ex¡**pl0MI¨DQ (¿VT~³˜ÅË¡$‚¦=…×ÅTsV/ÈÚìÂü—욂В˜Ù^$·Ò,B¨@"b–b}KB ‰‘A¡ èêÆ‹WèDQ«ÐRA>ßFoo‚ÔïƒÈÜ,f1‹Yü¨ªÆqËçðæ·žÉÔÄ‚@FÓ <¢YYJ[GÂjGqB·%¨sl¾É±¹"¥Ô3ìÛ8=ÍžÒóõ*ùÕdÛŽ!ŠZS3qkŒ!AàdjÕ…tÞLïlÇêÿ‘Xõ<ÁÁAJ¥íííô÷÷“Íæho_@6›Ç²BR)™T*$ýk^cšÐÖÖ’7<x°%†333ÄqL6›=ÊÉý®# Á¶[R�;wÂòå­)M{éé«+¶}¤û, ±¬$†aàû.FÀsAà¡jŠ¢ø²¢G>½ýy¬šà´SæPœnR¯705ƒ0´YtÌ|+¶Ý$™ÒÑ4 EjéIÄq„ãØÈ’ŠºøxHŠ„¬ÈDQ"" }U&ŽÃ#$oˆ¢(ȲN šGã Ãh‡GQ†­Î.I’$‰ ñÝ&¦i +11B´:`ƒÀ'=E!öa H&Õæe:»rlÞ¼ëþðÕÜÿÀ·Ø¹ë0[v&‘QùÞwÅ)«û¹íû7ÐÕ™âÐÁ]\yÅ¥ì?°ÍÐ)t$9Ìë¯>…Õ'ŸÆ÷¿sÏîÙË÷~Xâ•—ŸÊûÞóÜùÇY¾¼›Ï|áz,ìb||!(š‰*µL¾„š" 3-I hZ–ѱ4Ý)N;ójT%ËØØ$c¯}Ý Â°Ž ò]„ïSœž¢^oÒÕÓ‰biÔÊe4UGAfzlœj³Nßœ9˜é$5ßEABAá„“ObpÛ.žÚøǾ Í0Q“0€À)NÕŸôY¶Üà´s΄hÅLƒaáÙ5²Ù4^ìà{U^qæjþ.u›6ïãÀÁæ.4±}ZÃ&—)  ß’ƒÐ48 ñ¼!†­ïžïÒ´ë–NgWM»Žª*œþyüàö;ˆâ>þú¯þ’}øS\yåkøñïdá‚å|ö3_æ–ÝÊÀÜvöì­q饑Î6 6hÔ]zú9|h’wßøg¼é­¯áo¾†âÔ$é|C{‹\sÕÇéèÌqߟ§¯_¦Q¯ G&wüðžxúW]u «O:ž0° ìL&Çð`…/½ç lÛ±ò&.ºøLêµ1l»‚ª*$ ’ã4+DG>ƒ•J]3ñ$ßik˲ðzz»A„È K¤Iâ(FÄ@# *+Ì”JضMµZ%—ËET«Õ–¡•e‘Ïèeœ…”J3‰~¬bûɶŽ[Æ |<¯‰¡ëhšÄ€Ü…ï¤YÑñ›jÝ4hVìÞ½—À÷˜?o.¤Óèº$b¢@P/•˜œ9Hih˜°ZߩҘ,ÕÔššL©=M.‘¦«#EZÖ9°ŸÅËŽ!Ó™§n×éèÇH§[æT“UB9‰ÙÓÏå³?ù= ™c¬*׿ë9·7Ï­ßø;ö×èO¹drÖœu.¦ß úÉ“TpÏ}›ØöÔS„v…ãÏAnV™:¸(ŒèK™$ûú‘ AVÑÙv"Û¦éDQŒBˆ¦ëdÌD‚êä8r¡¨ ^ÒÑÕŽaH¾‚ˆ±RkÚ—j£8GÆ:ZÝÉ ø>Aã8.B((Šq€¬ ¢°õl{9P-¾ïS¯×™™™¡R© „ ‘HÐßßaÏ{gîs»Àår™r¹ŒïûÌŸ?˲ž×sÅqKºaff†ñññ£T¿n÷XeYtuu‘L&Ñuý¿}-Õj•ééišÍ&žçB´$q²Ù,ÙlÓ4_6ÉÔï ¢�¼a­HàÕˆÒ}ì˜]—ÿ ·*dVa4FP™BÄÅÊ"f‰Õ qẕJÄÔ” Žùè/Rp’$H$² M["4t]FQfµˆ_:÷H+æÚ¶ýï¾\×%Š"”#“rš¦]ªª>oñ8ŽcšÍ&årùhŽ1þ|t]ÞŽ†!Õj•J¥r´cú¹ÉI!º®cY¦i’J¥H&“ÿãØì8ÓÓÓÔëuÇÁóZƧϭW[[¦iÎÞó³�ZÆFQØ`Á@‚×_~&¥j•b)âðáNÕ=B dÛÑ•êGi*8.xzDG²Fg¦ˆœïdã¤ÇÃ÷Óm”hÏû´·‡dÛ"âX (Y% ˆzT«Ufª3tf:È Ì«ÿGbÕqFƒT*Eoo/==½XV‹Ð–¤Ö†¥ô„o‰Öø?´4G«U$q„'“_6ŽqÜ2­:x&&ZCØ–ÕúzÎHó%E¬:ަi¤ÓIÊå*ù|Ïûˆªe¶ï{x~€¦©¨šD¤ÒYrù4º¤Û.Aú8nƒ(n¢i-­Ìl6ƒnÈ· CY(’@WLU¦iÛÄž ›Èã8Š¢ „Àu›†aj¸nDzH’®i´··#Ër«h1š¦ÑhÔÐŽX„ !eUÑH§,<ÏÃ0L¢(dbbUS0 MS B Ûn`™IÚÒ=:0H{!AÓ­pÎ9¯à‘Gv±{Û0=ºù‹’{Ü�c“£\}Í¥\|þjL]P*ÒÑ‘¥PÈòø¦M<½ùIÖýâ>î]÷,[·ßÁæM›øÜç¾Æ²å]Ñ$ÅQÖýr•:<³eŒ;Ð?°]Ëz&™l†Øh6뚘ò�ßþÖ],Z<—“N)°éÉÍ–Áɧœ¨<ñØ£§àÄŽ¥Q/ù6D*žÓ`rbŒå+WS+O£Å* 1¦ª0qxŒ§¶íàÂË/AN&iz6¶`¨&‚D"ÅòSNaû¯᱇×sʧ¡G„ fGÏl¾F–-_ŒªKøõ¡êa„&)Ø•)Ìv“F¥BìFœqú1Ü»n'ÿrϽ\wýå$Û:8xp˜(PéîïÆ4U‰4Š"¡ª QB ë t]ejbUÑI¥RˆD,Æmmm\sÍUÜý³{9ÿÂK¹çÞ_ò½ï›«ßðxà!òÙv†¹ýöïRªQw||ðQ®¿á G!iu1ùÉòæk_ËÅ—œFÓ#×Ö˶'§¸êõïæuלÌG?ùG¸N“8RñƒÖ½<<Tâ¶ÚÉêÕÇpÖÙ9|ÏEÊȬýÙz>þÑorÅ«Ïã'?½'Ÿ~ˆÝ{62^ …>ÐïWuÄø¾ƒ$µ´²,·>S’FR“J$‘e° BY EVèïéáÐà0㓤³)‚0DÓ tÝ |¦§gÈfÓT«5êµ&šÞzðƲE,¸^ŒÐTõBgŸÚÈêWP›ÁT¦iQ+W‘t•Ñb‘®®¢H"t|Ò‰$…L;÷ß·ŽâØ‹æÎc¾ÞÁ£k@+94KeFƇ©» ÒùSå)ºûºiïíbÞñKÈ:ÉärhÉ$öÑŸ/`ÏLc„1{†öböæXy,[öìÄ.˜èY$d6nÙÁ?úSn_÷UN¿ú-4?ó]fd§¦l>øµ¯3°|wÞ· §F�B9Ȫ‘ ®}ë¹äÎç[ÿx?‹W¯äm×\Nqï:3IFŸy’ÊÐ(‘ðÔ~J±R¥­£D®Å'ÏÜ•+H'Ó Ë¸""T%BB¦) "¡Ðtm’™$±,ˆ}B‘„kÛȱL.“Ç0u„ ( ŽÛ V«a%L„ZΛšŽa$0’IšÕ2µZUUд—‡óf¹\fûöí<öØclÙ²EQX´h×^{-Ï{BEÓÓÓlÞ¼™M›6Q.—ùÓ?ýS.\ø¼’AP*•xôÑG¹ãŽ;ŽÄ;ù?%Dq£( sçÎå’K.aÉ’%tvvþÚ÷ÇñÑ"n×®]<ú裌ŒŒP*•¨ÕjÄqL¡Pà„N`õêÕ,X°€d29+ñ»¯ÕaŒf UJ ŠY­Èÿ9dm„¢Dƒ&J\%‡ÔÙ¥y¡Êø  ÑhP­Fø~«‹IQ^¼nUEáh‡ìäìß_el¬F"Q ›Õg/ÐK�Q199Éàà CCC>|˜ÑÑQ¦§§ ‚�˲H§Ód³YV®\ɪU«èìì<²ÙüÛkJ„aÈØØ?þ8O=õªªò®w½‹®®®ç%6†aH­VcÇŽlÞ¼™Ã‡S¯×©V«Ø¶‚ŽŽúúúèííå˜cŽaÉ’%žcBþ ÂÖó<†‡‡Ù°adllŒR©„‚l6ËòåË9餓X°`ù|~öfûýݾ82ú_Ç÷&¨×'|èÏôÐÕ¾�[è³HãÙÊ!ö5†é±b:T5”034ºl8Ñ{–Œž ›ŸÏÜžãQT™ju/B$óÑ´ùÑâW!#+òц8I–f/Çÿ†a0gÎr¹º®‘ãLü·Ï©dúúZß+h6[µcOOÏÑIî— ±Z«Á“OB½‹Cw7<Wº½äˆÕÎÎNÊ•2AÐÖ–¥^¯“J¥1 £erF„Qˆ"ëD1- Ha¨‹€B>ÇÌt!$Êå:¹\ Ç®!+>sæ  ë.ããÌ_ÐOz$ ÂsZ»—Qá‡a�FE• Ãß1Œ–ÙUµZÂ\‰º¡#�? !ß÷ BEQÈf[ïÁ¶TUF× 4]…8¢^¯P©´L|Òé ãùžçÓJ Scjbš9 34ò¹Ž4É8K{Þæü ¯ãÔ“—òÃ;¾L„CµV!Ì0S¤Ùœ¦Ñ¨ ð1ÍÝ|ücÇî½5î¸ãfd×_cc §È_\{)í…N¾öõ÷qó{¿ÈàÁ ‹ëÈ%霳‚ëÞp g¿â®yÓ5LŽÌp×Ú‡ùàG¾Ï>û'ds9¾ôåÛ¹ìÕ§ÑtaŠ{~º‰ã—&èÌgñ›:; øµã$“ivmÝÊ1'¯Á&Óž#ršõ:'¯^ƒa˜L‹ŠBAGh–Iqp˜¬j2wÁ<Üáˆ][·süI+Ñ¢Åc¬ýÙz&œvú‰1±§m¦§*(é49C&•HRcèà8]+y“G6ÞÈ?}³.>‰Þ® }} Ùýì^6<ü0’*X¹rFE’X¶ìXÊ¥i\×gº8Môôô"$™F½ ×F CÒÙ4¯xÅÙü|íO9ãŒsYûó¸õk_å/Þó>|ó_òÊ‹®à£ÿo~ëe<ùä“ O062͉'¼‚Àù‹›n¢£s1—_z1uw×÷Ùsx7çŸûgüÙ{/åÝï{=Ð2˜r�×sèë›Ïõ7¼HŠX¾l®mú ÿðµoð­oÞÏ'n¹Ž?xëÛ)M ’LA‡8Í&ŠÒ"V[Ú¾ ËR‹l‘!™´ˆBPd•0 PUŽ|ïAbÛ.qc&®ãã¹>FÂ"ۖô,Â8"J1qƒR©D½^Çu]E¦Ñ¨£j ©TY‰‘•T2ÇxÑ¡½³§·ïä#ÿ _üÂ_Ò×ÝNЬâ6ldIBW5 Ì£XœÁqVŠîönœ†KJIs׺»îdÛ†g˜¢y¸È¢¹óP-™‹/¾ŒEkŽS†” JŒ'"ªžËh½A³6“mÃL¤=a1âT)=µ‘ÅœNÊéÂVqà‘L§9ãü Ha=×ÿÑûX»î—|áóŸç£7ý9“pú¹ÇrhÂ¥iCoɧÞ÷~±aã&Þóî¿¡oŽÅ©Îáþmóºë^Ã1çµ*šSG•b^ò*˜žÂ®Ô(Õjlß¶ƒÇ7läžµëèŸ?3¢½·‹ù‹’ééË€0†ØG DMÛ!F"ô#$E'©éH’JEDqDFÄQˆ¢è¨j€ÝôH&“¨š†$µ:ÝzR©‚™H!P±þ; ã#»«#<ôÐC¬]»–;w¢ë:“““\qÅô÷÷¿ ç­V«ìÙ³‡ 6P,yó›ßü¼ëEQD½^g÷îÝܳöš&íííôôô ( ¾ïÕ?REQ(—ËGäj~s‘U©TØ·oßÈ›ž Z«â:.Õj•r¹LEŒŽŽR¯×Éçóÿ£¤l/!¢Ê¯ã;cÈq„iô€’œ]”ÿ1 Ë "ÃhšNô,(Æìò¼ ˆc8ŽtÑaük¡ó‚Ÿ]‚LTEP­ *•˜ ˆŽŽªÎâ¥A¾ ñ裲sçNÆÆÆ(—ËxžwD~NG–eÂ0ddd„™™Ö¬YÃÀÀ�étú·îÄ ÃR©ÄÎ;Y¿~=†apÝu×=oï/ CÊå2ûöíãñÇgxx˜(ЍÕjGåËR©û÷ï'›Í244„ã8¬X±‚|>ÿŸÞ_·´K¥`ëÖ­lÚ´‰b±H£Ñ \.Óh4B022rD Ϙ%Váû|o›Ø¯@è KiLµ+#cètuߘ Y²éÄ¥SP% Ý€t @hô))2f+¿3<u·F£>†®;@AÇDQ“E§%Ïj«þÖñL"—Ë‘Ëåþwž¹\Kk5ŠZäc¹ q,¿¬ò×m™V=öX+ö¯ZÕÒ–}©æ)a ë-}GMõ1 ƒF£Ž¦ȲŒçÙ¡‡¡[(²IÓ®Cì¢i&Qì±déB†W¨ ¡§g5–ãy0oþ�ù|Š™Ò ËK(ÏÔZf3aHCz(‘„¡¸A„ë!G`ÛöbTÇJ$ñ}—f³‰®kX–JÐô‘$éȘx¢•àÙv«WQâ8Äó\šMUÕÑ4¥eŽ%$<ßC7t1¶E!BŠiÔ›èfšj¹„i&)•\:»²|îs?âŒ3Nâ“·\O©´°‰B‰ý£‡H*º"'d|¿Î;ÿø3<óL™ùóÓüèGŸdé±Çrÿýaè÷Þ÷Uš,9®ßorþù¯æs_GÖ;Ñt“(2I¤ÓÜò¡ðÄ“|àæóØ¿÷0–™ãë·Þ‰Ü·î!Üð(í‚kßö*9b׎]üêÛ¹ãΠ‹–°tà Š¥zP"…Ÿÿd-ã#£¬>q%òL•j¹ÄÀœ¹aLm¦„d즃™HШ۔⠉L–Àõ‘-ƒãO>=Û6³ãY¼âî¼ýAtI#ô8áø¥„µb« ]ÓQu…Z¹D"—Äk„˜²F:¥Ñ7^º‚oݶ•OæùÉßï–9ùÔÓ¨ÕçS©•H$’-ƒ*ÛfïÞ½$-‹\.‡iX†ÈŠA­^C6¬Vçj½eþ]Ý\ùÚ×p׿ÜÃçÃ#lâŽÛoãoþú¯¹àÂWc˜ «¯¹òR>|ó×™˜¨ ›?øAL+ŧþêƒLN‘+ôóýïÝÍ-Ÿ¸â5¼ý†×ÒlØ„a@ùVˆ"rŒ&–"Þð¦7Ò×½_þb=_úûoQ(¸ýö[X¸t€é©'©×ËÌ›ÛE{{/•Ò4D²ADÄqH„HB KrK9–PUEÑiÚ TI ê*®ã •J…ày>¾ (>¦•BVž|b#==Ý$ TMƶ]|¿¥'E!Õj|>ªhÔ›%¤�2zŽT*C:[ÀЇٱ-¤Q *õ™ZÂÀ’Uƒ“ä ÌKwáïûÀ§˜;)ª395͆'« OUyík_‰¥©h æÓ³j%BÇ/!œ×Ee|ÙqñCŸX–A’1…‚+kÔS-Q`ÅÂ>š“,vWsèÐ*Í&Ýýs¨Ø <?Ä®¹ôô˧?òǼîÚów¾ï|éË÷ÕÏn”«ÞrßúÙ]üêÞ­,ì*pîé—019ÈG>ñ ölÚÈî¸Û×ý„Ó^yaΤìUȸuLO²b„yzŒX:€Ý´iÓ .<÷,¼ ¦rh„©‡(<Ìà›_ÿ4m©N&Aß)«X¸t1zÎ"Œ\58òñ‚I’i¸.Q¬ §e$I1a‘0-dI¥Z­`ÛBÈHR«àÂYR‘¥$2‚ßí±¯çº<vîÜÉ#<¾}ûŽîÒ>gÞõ‚;E!•JÑ××G&“Á4Í$ùhé}ˤ’)8ù䓹ø¢‹I$Ôj5<Ï;ú©TŠyóæµžc¿æµ„aÈÌÌ [¶lá;ßùfƒB{5kÖÐÝÝMìÚµ‹û￟gžy†‰‰ Ö¬YCGGÇó6ò8‹žp¨I 4#’ƒ¤Î«ÿ[èzUžõ)âÊAHÍA¤zfæy–š¤Ó½d2 Ë*‰DKëM}Ñ›„cE¢££Àܹ92™Ù.å—R¬fË–-ŒŒŒL&Yµj .$—ËQ¯×dóæÍ¬_¿žM›6qÍ5×pÁ°téÒßZ/WˆÖHl&“a``€D"qtšñùÀs$ªïûd2òù<}}}H’ttótbb‚ÁÁA¶lÙ˜˜˜Àu]Î9ç’Éä¯=ÞÓO?ÍÝwßͶmÛèîîfåÊ•sÌ1H’ÄÁƒÙ²e Ï<ó ¥R‰þþ~V¬Xqtƒc¿/ˆ‰"Ÿfsfu™ÐÀ0{QS AÏ"b¹Å@=wo)V0I„è²òï§ |¦÷x“xé4ŠÕ%w‘N- ™XFGÔû¨”ž&ÈV?~²»Õ )­ZvÿoձšÉ@©³m› ¤¯¯­5éú;ݵ-²øÐ!Á“O '´ôU{{ÿÝ-þÒʪÕ*mmm­®˜Z•à C|ßŲ,TU¥Ùl†¢¢ë&^QcÛ-sž­Oo$"Êåõªƒa:‘ŒeYd²9êµ&ªª *:’@Ó4 dˆ@ÄèºA ECˆ–Ϊ$ÉGÉTIH8^Ï÷MI’Qd]× ü�I~NS•£º>Š"¡i² ÛF‹M,+ŠJFDQKB ŠQR«7På"ºš$"E&ÝÆÍøǹù#708´¾ ÙŒAäùt´%èÌÔfPthËæ¸ü²5,Y<͙缂EÇCìØ±‡á‘:½Ì™ßËØØ(¶ó·uOm™àÇÿüQò…}ó–ðͯý=?øá¯øÊW>AO߬”Á%¯z#CÃcÀ/ÞJ: ?úç1�«ÊÆ�� �IDAToî\„l³ví/X²¨Àªc—à4GÈ¥Ó Þ*Ë$Ú28õ€s.¼˜§7l`ôàaÆïgÅšU}ý8ãؾK®G²VŠl"Ë䨷ÿô§¼âô3X|ìR¦ÃÂù¸]Y¾û÷_¥ÑEÄ^D>¯Òß×…W/Õ�r<›ÞÎ<µ‰ ê36ý½h²O£1Ä òÖm|/m*ò¹ÏÝÊß}#ÕÒɤE(|j•¹|]‹™Ÿ`ld ÇñȤÓxŽK:$Yœ0ÂIA’5MÆu}<§Á;ÞöVî¾û^z» ÌŸ·˜nx7ùv“¯|õoùþm?äÖ[¿ƒ,ÆG60>¶“lNã/þìFÆÇ¦éXÅW?û>ý7·ñå¯_ÍeW¾–ÉáC¸® -ÓN³)ÑlÚ(Ê a¤IuÓÙ“æöÛïâÝïþG>ðçWqÍ_ëO1>¶B!aÈÔ+5ä‚JÄH*ÈŠ‚"d|ßÅó\EinaD†„¡ÔJå!Z]Ʀ $ E–i.¦™@ךf‘H¦°› V¯^ƒ­Ýï–žq|DŸX IrK¿6Ž ‚–fg.Õ†Óp(á9Ýó#(×ÐdÚ”$…\BXS6ÎÞ~±áqª¾Ë?¢q“›Þÿ^ó–5ìùkïßMç¡=¼õí×qÛ÷n㞯ßÊÉ«—S“ÎɸOG>‡Ñá BdIÆ2 4ËÄ­ÔH§²´[ „°}Û6D,xÕRYQ°2)œ ¤ª |n»k?v,—œ²œ‹Ï]ƒ§V9ïòÓéýÆ<µ†w~èÏùùýóæ7žÂ—?ÿenþ“·óúËÏ !Õ铦GÉv¨ —ü©K‘zSÔ§|û߆ âÿ»î,Ã"×Y 00.‰lw|”½Û·2¸ÿ�»ö3žZÿ0ý}ݬ>~9jG;&F­Ž=ôTŒ$^„1ªªµ®k#I ‰D ÇqƒùÈXªªdÛ’¨FŒçÕ±]—ßeºÌu]¶lÙ®]»’ ½ÐÞÒ þ-Ђߴ[þoùÜŽð‰'žH¡PÀó¼ß8zÿÜ1ÿãßþíyþ»×û\Gêœ9¬Y³†åË—“N§q]÷¨a¢UUI$X–õkã8;wîdÆ ²déÎ?ÿ|/^L:&Žã£º´ëÖ­ãðáÃlݺ•öövæÍ›÷¼’³xAèÀAÁÅDG‘RÅäEµW™@IÎá0ƒN`ÄíÌn-¼P¤™m—°í˜8. I /¦Ô£,C*ɤ@’"ªÕ*SSMR©,‰Dzö½ Ë2sæÌáÌ3Ï$ŽcR©ííítvv’L&q‡Å‹ÓÝÝÍ}÷ÝÇ–-[xâ‰'èë룯¯ï7«¿I¯ü׿««‹ÓN;4M#“ÉüÚ¸þo÷ÿ›b½¢(ttt°jÕ*ºººÐ4¶¶¶•§*• ¤^¯sèÐ!vïÞͲeË8ãŒ3þÓñ|ßgÛ¶m¬_¿ž½{÷’H$8ÿüóY²d ]]]ȲÌÀÀ�¹\Žb±È¡C‡Ø¹s'{öì¡¿¿Óœ•ù}!U}¿J£q€(ª`&ò(ä´Nв ÿ稗12ôÄÝø¡Cѧ`°ëèñÂУYÚ×jþH-B$ç!$IÒ‘$ˆ1n¤0DkT©ÔÆ®ÒÔt§Ñ©wÎ^–ÿG$Èç[D#@¹¬1o^tÚú&U[Ózå²ÇáÃ:##‰tuµÞk2ùâIý¯‰Õçôlt]G× fffhkËãyî‘Ή8†À÷Q•ÖhC©Ö$B"×%Ža÷îAjÕ]DQÜ ,BFˆI²8xp×qQlgK²„¦š8qklÒtCEÓ-dIC‘A×5Y:"´©DDD­ÚÀГGw}ß'ˆ|TU9Ò©ú©$ãyfMSÿöÎ;L®ƒ:û¿Ûï>³3;[µ«¶ê¶dË–»eãˆI�‡@€�bšI0¡äûJJHõ#�Á”Ä`Œ‰ .ÈVµú®ºVÛgvwêíåûcv7VŒä#XæÓÑ3ôh÷™rçÞ{ÎyÏ{Þ—0òÅÿH¢Fƒ(ŠP5ITPuuÎq͡ҰX¼øb¾õÍ»ùê×vó…/½•»dÓ¦5Tg')fûð£&®k# y$ שצyã[nã_¿õ =ô—]þ’éa13ë7^Ãâ%9: ŒŽŽr|xœøÜK¹hóy4«ïxó[¹ÿÁGy矾‚«ž{§Žð®×½‹¡#e>ðWocÇö]”fñöw¼’ukÏcd¸Äôô1öí}Œ[oýäÀB°=NOœ¦\)³jÍ*¬ÀÇó=rí¶\w=y§Òdïc;YäAÿÆ ñË3˜µšªãš6‘ ÐÑÙÅ›."]Ìa:M/ÄèZÄ_ûù\‘êt³æ³xICP©7LAFQ$BÏ¥2S%—)ì^DÚxA# ñÁwðæ7}Š¿ùÄ·é+¶sË‹®dlì0±¤NGgqÎh¦%8¿|ùò–™Õjƒéò,(¾,SlÏ“JÅQõ`á\ÉrLNŽóÜë®æÛwþ+G â8£¼ç½·sâä1^üÂß%_Âßæ<ôðI29ŸþÍûp›…¶~>÷Ñ/ðÞ÷~•Ï}ù5\»e'?A*• r,fˆ"Çp= U1ˆåRØvÄÇ>ú÷Üùí{ùì?¼‘ç=ïJ¥“ŒeåÊ帶¡'I“㣨šÚºž$!‚0æ� ¢ uî6šdÓ)<߯6¢9뙦 ÊF’ Œ(ÏTÕ8¶`è*¶c-€;ÉdEQ¨×« b÷Ífß÷(¶w`[ BW"ŸjC dJårq#{ŽðÂ>78ñøœ8°ŸÃûà»m=l¼êjný½'&C¶üö-Ø®Kß’E$s‡QciʳMbñ,³Ó>²¨!„¶i£)*JI‘æø˜‘éÑ“n£16I1cÅÒV, p|$5F:݆¬ª‚Œí¹øRkõO5"^üükØsߣte|¶Ü¼Îö¯{ý|ê#ÿÎ]ß�’ðï[wqüÐ6ç²tweÀH1=yCð'F92¸Ÿ«n¹‰z­Bʸ`Óf =F,Ÿ§4Y"J`Ù6º¤ª>bwš¾üFz6‚Áàž=ì}ü§Û¹ƒ¾žz{{Èvu‘^¹$Ǭ¢¥snsC,EQ$…tZŸ3àóæ\8%I"ðƒ9s¾gïªã¼©Ó¶íÛfQï"Òé4G}ÚUø§K¸abÛ6–e-˜8ͳD$Ijik+Ê\^ÓP…d2ÉÒ¥KéèèÀ÷ý§4YA`Û6¦ibšæ‚ÎѼé†ëºg¬ðëºN2™ü™+‹ó£ƒ•+VÒÞÞ¾ðz?  }ºæmfffa%P’$Ö®YËu×]G>Ÿ_8$ Nœ8Á‘#GØ»w/‹-ZhöÎÅÙ\<a )´IHD)ͼiè¹ø¥ËY ‡Œ…„F8w<ÏÓ_eø¾K­6Kµ¹¹cÿëm&UµeÞ!ÕjƒÉÉYŠEõ°z–„¢( ÐÝݽ°•"ŠâB®‹¢ˆåË—³téR¦¦¦Ø·o‡æðáÃ\rÉ%gäeÏórð|¾o­íYn‘l ÃXØ|E‘l6ËŠ+èééY0‹„;ÔqšÍ&–e¡i-߆ùÿ›7œ¯#t]om€=‰’­( Åb‘B¡ÀúõëŸ6—OLLpðàA&'')—Ë”J¥§ÔqaØìܹ“mÛ¶aÛ6]t7Þx# ŸµP(L&Ù»w/ÇŽãØ±c8p€B¡ð?búy.ζz!$,g Ó<F,–#•Z‚(´O?ÍjY)àôôiFQTYÅP „¹¼.õ™ã8¡‡T\…”\ “ïéºÞ&g¢cÌÔ÷qtöÉÔ"Öç×S²ç¾œgXÍç[Z« P©(d2m$“ò³Xm¿|ǦR±9qBâôièëƒ%KZ@òÙìÏ+[¶½,ñ$$A#Â0šs!œcÍÉ-¹€T>‰b»ˆ‚J¦-F"^aºlS©TI$RÌÎÔÐb¶ÕÄO¨j‚±ñ2¶ãÑl4ð=CWH¥b­•g4U% TMA[͆,‰8Žƒ D¨º†ç¹4-ÃÐH$“4ëöB±„D-6žm[X¦…ç{(Jœ(Ïõ0t•t&¦8^ˆiÛ¨šŽªi„‘癨¢B<fа,Z¼ŒÒd÷ÜñÞ}ÇËXwÞ*Ö dÉ£2[aºœ¢½DZ"Úr9fã´µur|pˆ¥|éKÿD£VG‰\{í%|ù‹?dtöía·ÿKz³üøž¿eã%íLN óŽ·|mîãŽ;^Å­·ÞÂW¿ôy>öñ»Q”&ŸÿÜ;Ù|É5<÷¦‹¥*QèqòøqŠù^yh?+Vtó¢_Ž„Oij’ñò8›®¾œÙ™¶]#Ë€®ï³üüõ¬8o-?úηùÉ}âøÐ¿t²#ðÛÅtDQ`àè*³ÓÓ¤c ß{?GŽç寽ƒ·¾í3¸ô÷-&¦)ˆ¡ˆ®¨$Û T¬c#§£Lo?~£A(:èi…"×\s5ön½÷S¼ûŽÏ36r˜×¼þüÈÅó[.„‚(âº.š¢!I"’¨²xÙr$I¦4=CÃó™­Ö)•ËD‘C:­£*-Ý—B[Q0xéワuk›Ë·,fxø0}}KüˆÕ\qÅÅÜù½û8ýb‚È%•nãý¾ö¥ûøÆ¿ü ×^£#§I%:°Ì)b1߯!†ž"¦¶³û‰­¼ëÝ_gÅê_ýÇ¿¡­]etr/aàÐÞ‘Ãs p5œ¦(xds)ª³3ˆøAbHyˆˆ„¾ï{ø~€¬hÄtײB—ÀudEÑ$AP%•úÌ,'OŽ€ÐÒï4.†®¡êa$àùz\'Œœ¡§³ƒL:‡m›D®OLV‘äzÇyãÝÎ’%«¹ê¢Í<p÷=lX\àЮǘ£¯«ƒËnº\Wm=èýKyQ{/{ÕÛ˜GTTNeýòžwÍìÛ±w¶ÁŸþñòÄîí<ôãûYÖÝAW1G&—Áö,ÄHFÑbXŽƒÛhbD"Zè“É ý€Ã{ö¡" †„"²#d|_@Œ|n¸j3ðê+ùÚ~«_ò"´-ÏaðàÃÈA·îñÎ׿ó–^Á-7¾ž¥yþþoßÍÀŠ¥Èž‰5˜öªttçQgf;´—„c‘´<ôf€©è<çòK‰YË$Ð$, ¢˜‚'„4Í&Aà Æd‰É(Æ’e¬X±å=»9zä(æÁAO쥸x K׬…‚ŒLˆQ„ ‰ˆºN`»„ø@„¢H¢€ H~KnD‘ž½Àêèè(»víbÇöÄb1¶lÙB…|çÛßaddä~ž0 1M“ÁÁA¶ïØÎ‘#G(M•˜Åó<r¹íÅvº»»Y¹b%tuuÑl6Ù¶m[·n¥R©ð¶·½åË—/˜W5 8ÀÖ­[Ù¹s'W^y%W]u;vì`ûöí;v ß÷)´èîîfÍš5<ïæç‘Éd~æûœg¤êºŽa EÎ/Òü„aHµZepp]»v1::ÊÍ7ß̆ V¡µ¥1ï®Ü’îq9uê ’çâì p©TŽ!!‘H.FÔŠpn­î¿FC(ø@HýÚ¿ßüóÖÀ²º1­ˆ Pˆ¢gÎ@BDâñ¹\Ã8§©{Ö\‹‚@*•"‘H ªêÏÌ{±XŒÎÎNºººäfggrW†4›M&&&صkƒƒƒœ<y’©©)Â0$™L’ÍfioogõêÕ¬Y³†%K–L&¤{ì1¶oߎ¢(¼ímo£»»×uä‘GaÏž=,_¾œo¼qAõøñã [.‹-bÆ \rÉ%tuu=å3þ<óËx<N>Ÿ'“É,HügVì¼VëÎ;)—Ë\tÑE\}õÕ¤Óé3À‘ù¡ñ¼6m¥R¡T*-�Áçâ7;üÀ¤^?„뎓JÑ´.D±èÀÓƒh1bd…,Ç¢c”£2‰¹?qˆx„ÓGЉT/±DÂSêAÖhdóTí4Öl@¼14{²"Äòç¾ gä>Û0Æã0:ÑhX 'X½:Mww×ÿ³Võ3ŽãÐh4Ð4ˆÅÒ «ìß_ Ë–ÁÙ®r&Ç4ßuH§³ ‰Ì¡Þ4‰'S4š&fӤОÃõ*õiEF•`zfYŽ˜-KLMO‘ˆ'I%“±–m¶Ö-;:Ù»o/ñd? ˜ŸÄ DÑ¥2=MWG'1]CT5¨Iàƒ¢©DB„éVQTÕQô–¹¨È„~ˆ¢Ø®‡*ˆˆJkBYoÖH$’hF‚F£NˆH<C–DRI× i4]UT#‹ø”ku’q I©Û3$bq<»€ -ãýï» j¼â×áú: E\WBV´uô0])á¹餌y¤2„ažt›‡eøA„eÕP¥8nàÛßz;ßùö÷°™%‹×ò’—¼„|>Aùô/zÁ;0›>_úâ\qÍuœ<|;þôKÜðܼç=·Ó³¨“‘ѽH¢‚ T*UÒé4µúW\z/~þHDœžÇV®;Ÿf­A&•£ÙlàùÇÇÆÉ¦Òd{Ú!¸ùßÎ}_ÿÛ~¼«Ü`ýå#y6†g“I§ðÙ™*ÉB‘)+ÄsmýÑý\ÿŠ`Eú@‰{zR² ÿÄi<ÛCw›„^S£'¹òª-ØÕô¤†F­î‰å™*òš—ÞŒl7ùÛO~‘OýÝ}<º÷ üÐÿbQo;Ò8’à’J¥Ð5…fÃ$ÂAI&_È“t|Â("àôÈQxŒd"O>³ ]o§«£—WþþËyõk7ñú7üß¾ón~𽻄€t¾í{@”aðH‰„±’;nÿ3¾óÍ|í«ïaýú^ls Cw°ÍºžDˆZSðF#Ä0DFÆGxý›>Á­·^Ê[o»ry«6K:›CQfgg©5ê´ç (¢Šïø¸ ‹˜C’Àµl\Ï#•NàXM\ÏÅÀw<×ÇW!¡K¨šŒm€D{¡‡ér•(20­Ó1ð$ˆD†Oœ$™Hd¤´‚"«X‘@=”™)×H&3tÄSÄT9‚˜ £àQ«Ô°+iü×¼í &âô$džر¯ÉýþW^yK—ܲU+‰±]›Óãe–za&Å”áÉ 4MãÒ+®äãÿ{ÆG'9~ü==:z tWzøé#'0C…YGBõ<?D•$J“ÓhºŠ$häô ÇÄÄ'ŸM ÆTNŸ:ÊìØ�]«ÏÃòT´XÉ—Q”F²Î§>t;•“cÜzËëyÁÚ^õ–!ÄpëìÜó ‹­byW'Ó|å³ßç³SŸã9›WpþåkÙpÉEH¾„çÌ’P=’1‡X,…ï&)ö¤±\ Q‘#ÛkÒ¬4ÐtMS‘Â�IQ" Ëw¨ûMªšC.‘#ŸÎ²¸óf«*ö©N òð=?æ‡ÿøÏ¼àùÏgÙ¦ ½HŠ„?[E0ü DÐUlÇERU9Þ’NQT|·Šçûg0&ž-1Ï.Ý¿?<ð�¾ï³|ùrV­ZE£Ù •N¡L)¿TÒdëÖ­<¾íq¦ËÓH’„ïû‚@†”¦J4MbFlUbYÃÃÃìÞ½›R©DµZ=£Áñ}Ÿééi†††xä‘GÖöëõ:a.B‰‚ÈñãÇ)—ˤÓiÖ­]GOOÏŒ ¸®ËÐÐ÷Üs ‹-è‚g³Yºººèèè ‘H<e²<ïh|àÀ&&&0 ƒM›6100p†vê<¸úd¶Œ¢(Ȳ|޽ò¬˜Ì‡8NYN)1PÎCÿo]†ˆ¢e‘ /°q¬ÓèÚò¹M¤s×ï¬ñ±eÊå8µZD.‰Ä3¥ñE®kÐhÔëŠÒb³ŠçÔ4žq`u^Šê¿’Ü ‚–þÿ“Y¨ó¿ï8Îà¸sçN¦§§±mß÷6ëõ:¶m“N§éîî^xžùŸ8q‚;w¢i–e-¼æÌÌ GeëÖ­;v EQ°m›(ŠH$„a¸�Àš¦‰$I úå¿HfÛö‚ÀÈÈA,€ÈÿŒ˜˜`Ïž= ck×®eýúõOYï—$éŒí<[÷\®ÿ/À·šHæ *ºÚ…,~.¨ !aF'‚'0ãÎ †"=t“ B0'(!+ÝèzYÌ>å9MϤâÎ2•¨*…üRÚ<ËDòóÈœVŸ‰Å–UGœ< ³³"¢¨!Ë ÏÖÛB8ŽÃì¬ÂéÓããQ«VÁ¢EÏ„–û/ ¬&’q<×Çu]Em­Jˆ…B¾5$4#F½^GÕâž‹Hë‹ko/’LŒN²ñ‚^*Õ:’܃$ùX¦M2ÇuÂHA¢¿o ““Ç1­&mù<©dš™r•@¬OµÌw¼¦sÉ5ð\×#Œ"Â0@ BdQX0© ÃA™jµŽ®ëH’2çÂìã{!S%b‰ ¢k9jM׃öÂRDѧ\&•("‰2=]køÚ—¾ÁÎOðÕþ0Šîؽ½}”J%DQÆvDY§#ßÅØð4¢ì¢éŠ* MÓbfz†}{÷Ñ–W‘B…Õ+»YýÞ7c™:ù|¡åm¹|äC᲋Wñº×½œU61|xQ„/ù-\zéùa“cG¡Ç¸®…<×|…KàYhRËÒf|ì¥R‰þ¥‹I¥’-9YÂ0bTf* DªŒ¸N€úlùí3yú4[¼'ŽpÑe›èXÞb®6k¤’šåYVôôóå|”MW^F×êåÔ*t­YJ&ù(žëpòáGéë20t VáÔá¬Y}ÇžÂó\V\¼ j QаšM²ñ’Øä¶Ûþ�ßkð©O“mÛÇyå«ÞÉßðÛÜxÝåtv/¢4zYÐ Çwq‹(�]2ð|UéîΓÍ_D:•gzÒE‹ùÀÿþ4'OÕ¹íí—2|â4W]q%/þíßbÇžýüÉ»?Ä{ÞÿFÞÿþ/°zåüí'¿Á¿|óq¾üÅ·qÉå¨WF(•'è_º”é²Oà‡(ªŽ,ÊÄã233UþâãÃõfn|Á‹¨Nb’b „"Žø"f³AôAð]"Óq¢–Îf£Ù$®è†A„ˆ˜ð¼�×óñüÐ ‘À‡ÙÙ*n�‚¨b9ªã Çt–ô÷·ÌØ¢�Ñp<—È´U™M7hTêô÷öa—Ë(ˆ(”F')ô÷òÐã§pCŸþän8M"ÑZ¢¼á¦ßâŠßz>v­NI'–L3<U¢³w1í]yþòCâø�¥™)fga×®mtu·³bÕvîÞŽëz¨±?yäQdYæ†ë®£XÌÓ°m/DRC²ñ$åñ2a6‹a(eù…ÏáÁ{~Äé“ÃäWœ‡Kp`è$¯½õO¸íörËË.G>ñ™P:tŠôÄ$u«NJkÃrFÙ±ýa^û/çÑ'öðÄöA·ÉîÁ1n¨N²tõy$õ†g¸<…¬ ¨ÙjºÈÔä0‘¢(2‚ ’I%ˆÅŒ–DEÓŒ¹Ä& >¾,b$: R˜j4Ñ%Ÿ¸j.ÇŠ-ÏeÙòåzì1FŽeèÐÒíºV® ¸f%ÉD ·\B#Òmmx¶…U¯£&“X³e’‰8’'>ëV;æ]í'''4Ô.ºè"6nÜH±X¤y¢ùK7¦i²mû6{ü1FGF)‹¬Y³†l6‹aH’ÄÈÈS¥©3‘ù†Êu]Çy käÉM^³Ùdß¾}ˆ¢È%—\Âe—]F,Ã0 Êå2÷Ýwû÷ïo²žO¡P8X×Y{20:ß0jšÆâŋټy3_|1Ë–-[�]Ÿ Fqààêõú+GUUêõúë”¶m/0aæuß²Ùì³rRýÿaÇ4çdÓUýU 9`´ŠÐl­N¡´-BÏéþ*Ãv T0ÍˆŽŽLF|Fš8Ql= ‰‰–‡ªB&sX=›�Ö§« Çarr’©©)ù|žl6»�\Ú¶ÍÞ½{¹÷Þ{™˜˜ ««‹ 6Ïççú<‰jµÊää$ñxü)õQ†ø¾¿À€}rΟÿ™iš<xT*ÅÆ¹êª«0 ×u)—Ë<üðÃ<xß÷ ‚€ë®»î)ÀêüêêüÃqfffáàÁƒ<x0 Y±b+W®|ŠDÏÄÄO<ñår™E‹Q(H$43€TÓ4©ÕjsÛœñxœd2ùsY³çâÙ^&DæB}ŒX�h$1Bü炪ó¡ *KKÑmcÍc ×O£G AÔDµâêM„˜J(¥€ÖqHDDDHHÉ,1\?Íd4IJM²¤x>i¯íŒ EMQ«O=7ÀüõçÀ|z{aÛ6z]%Ÿï “QæÊg÷¼ Ÿºíâ8ͦÀÐÈîÝ•J P]¾ŠE8Û[Ùqˆ¢(@’[ ²×õ¨V«ñ$ñxœfÃÃsƒV#éƒH€,)´zX±2ÃÈé—nN255C(²†,É´åbL—`zj†DR'ð\’i�� �IDAT\+ ‘I "Q«šÈ¢Šë›(’‚ª¨Øž ‘€,k8®Gà - 5’„˜êZÞ‚ÖmÛˆb˨Ê0 šÍ&¦i¢ëz+‘F‚¤So8|ëλ¸âêç±ní&Q¦^7‰¾Þ͈b�’ÈWþá+ÜþÎäSŸ~5ÅŽõzQl5Ëš¦£©-6’ç…LOÏ¢ë õf ? ÉÈŠ®‘L¨”J{ö憯"r¡Ù¬àú.ºªR.—禣ðêßgõÚµX ‹£vÑÑÑÅÈÈÙlšJµ†¦„d²š–ƒ ˆ†J*Y$ <œÐCˆÌfÀwY¶t1¹|žÙÙidY"ðA’[+-µjƒ?d"âò^nêý]Ž:Èö}ûÙshˆç^#Éöœñ Úò<zç¤ …›71Óœ@ïì`zvŠJ m9<ËáÄþã,¹äR*ƒû gÄÅ$µ̦]ªãzŽcaÄ’rD5(OVxÃë_FgW–¯~ã;ìØ1ÅûÞûeü÷­|ð·¡I`š6ñ¸Ž€HDËè!‚(@$=ÄPTT³ERhË{Ôk!?¸ç[üó7>N¡˜A ã„Ô¬ï~×GxßûÞÍï¾ôåìØ¶/|þN Eç‡?ú4K;=} Mhkë 6Ó ‘Ì2==Mh»qŸ<ôÿðÙ¯ð‘}œŽö.jS§™™)OÄP"U‰c貤†.‚ �¢ ’L¥q=Ë5‘£¹,!)2¡áGAJ& q£X2Iˆˆ¬ëEØ–¢¨Äc:¢§GÇ™­Õˆ DI¶,bªFBÓ‰f«N€‹#:.~Ããáÿ„ï~o’,PuêüÞ¾«¡³ã%oa¼lB 0rê錎¤eHe 4,‡öÎ{÷îgp¨Ì{dôôrÇ»Þ@6©sß¿ßKef‚ÙÙ1QdåªÕ´å²$“ Í&££ÃˆR€ëÚtvp=‹‘ÑQ†‡ùê¿}‡—]ÌõW_ÅÐC:ú˜®¹üôÑÇy¾{׃®253K¥)Ó˜çöÛ?Îko¹†«:û±ü€HÍ316E eùì—?ƒ;rÍ Wòþ—¾“µËc…ÄÛLŽ—Iäb4ÊuÆgš—®�]edø&M’©‘,b[fÓÆ4mdIƶ]4]ké¹1MDr|ê354#ALÓQTÀ iNãx6Ë7?‡•ê¥ãNíÞËO¿w/î=÷³æ¢<gËÕˆé AyšPPt•F½‚‹Ñh˜HaKOLz‘ÚA Ñh°k×.N ŸBQÖ®]Ëš5kH¥RA07ûÅ‹1Û¶Ù¹s'ÃÃÃtvvr饗rñÅ“ËåZF„aÈøø8S¥) ùhš¶Àœ™×_{º÷;ÏI&“tuu±fÍV®\I&“Á0ŒÓˆí;¶³uëV–-]ÆÕW_}Æó$ zzz˜4±Xl°˜˜`bb‚R©D¹\æ/x}}}¤R©…ã0ÿöíÝÇÈèéTš;3\.·ÐÈÍëµAÀôô4@t]_Й;gûò ÿ3¶Ký›u@A”ˆ”~àº9àú\üJY ™€l¦Õ=S«y±´·‡ €ë sƒ+8Gà{vÔ•J…Ç{ŒC‡á8çwçŸþ‚¼ŽmÛ=z”}ûö100ÀƹôÒK)‹ ¤š–qY‰d2I±XD×õ§¼ÎÏÊùOÎõñxœÎÎNV¯^ͦM›¤&&&˜ššbbb‚Ý»wc—_~9©Ô™:¾¾ï344Äž={§R©Ðh4(—ËLOO/°]¯¹æÖ®]û`µT*±ÿ~FGG‰¢ˆþð‡=zô Ù�Að¼V_¾{÷n<ÏCQE9ÇXýMÇUË›Á÷gÐõ"j¢T•~©ëM—t:ôßaÚ›aÊœâ´yÇ<@y´Ë ‚à“pm,³Æt8MQaZ&¶c“ÑÓtÝtÆ{чZSÄ Lêõ!âñÅHÒ¹!æ¯÷>Ú(æó-#ä©)ŸÙÙ–e`êÏt8{Âó Ùl=‚�‚ Ķ›ÌÎzŒéìÜ©14$Ðß›6µX¹ú³ ÿ•=×CÓtt½%|lY’¢R¯×PÃ0ðý`NCIDÕ–£¹  †cQoû÷ òÇoîàĉ㸮"Ɉt´·0>6ƪÕËqD…x,Eèy4&ÙT–„Þšx‡aˆ"*„x®Oè…¸¡K$ŠD~„Õ Ð4QbÁ¨j~õÃó<šÍ&’$‘H$ÐuF£AÃöˆë ,Óá«_ÛÍ¿¼›nÜBÿ’•ôt÷xåÒ‡ ñƒ»ï¥Rø‹¿|×ßx5S¥“t÷©×kT«5r™ÕZ BE ¸a`9-¡`ϳ±ßdɉD4DY@ÓØÎ4ÙBÓSer¹ 33³ ,ãäñ£¤Ó1¶›´µe)väñ¼&^ Šù|¾5uL«" ŽÍty–\.G*c¶<…ëÚ¤ yÆÆÇ±l›¾ÅK[Ç4ˆÐ™(Ûµ$!¼€›7ѹd)?ø¼ÿ!®¼üRôlž©½{(ØÃ‹~é8«Q1›¤³â:jŒåË–søñ£½ûû˜¦Åú‹. dú­ Ñ¬áZa†n é2®c¡i"ñ®4ŸØÍË^ñ[\sý üõ_ÿßýöc;Ö@Œ °h1õÒ²¦aš-QyUÓ1ˆp£:ކ:ž )yÒí^ùû7ðš×ÝÂÊÕK©T*D¡I¶gñGŸä÷_õ[Üxó•T*& ½ˆe¹|êï``éZ&'‡èêMã[•jYUq«ÉdM×¹ûî»ùáïå_þ埩VÄ …™ÙITMDÓ"ÂP&|â± A ø.ª¢Òtl$5$ˆ4L BYU"0Añ‚QRƒˆP ¿a"†MÓ¦T*Ñ–/’É&‰ð=Óvè[µ„ØtM‘ÀJCáÀ®'ˆUMz7\H4]áÞo}—í¶ïÉ㊑`ÑÒ ¨{"ÝK–°dm†““# ¹,êï¥Z©!‰ ŠYÚˆt6Ë—ÿÏW¸èÂ~ºº5‚Àeíºulºp×oÙÌØØ(é¶,¦ÅñcÇikkãøÑcÌḬ̂~íj±8ÏÁ²,TE$›K³êy7²æÊK966Æ÷ô W­>ÜýSL«Áþé['•ÏIð_„×¼é6D±Áªõm¼ñŸã+%V]|!;¦¦YÑ%JœûÞÊGnÿß|ã›ÿÆïù!íi -òê7½†ñÒ$¼g+·¿êw“„†H…B€")$©93±Öª¹(H(І ÈH¢„ëøx^€¨®GV6uIOà!¦cK$QeO†@–ˆ„ueç­a ñbNÜ÷O<´•{·fós¯&uáyhš@i¦D,#°mºAീègM1E4›MNœ8Á<€i™\tÑEœwÞy‹Å…{¶c; ÷ð_$‚ `vf–À(‹,^¼˜žžÒéô ØÝÝM «÷Áœ1Ü/’$±bÅ ®¿þzÎ?ÿ|r¹²ÜºÇ§R):;;) ìÞµ›©©)lû?¾MÓèíí媫¯"k5lmmmxžG¹\æÀìÝ»—#GŽP©TÈår‚ÀêÕ«˜'®ëR*•¦R©à:.wß}÷Ó2ešÍ&õzx<¾`àñlo¶|,ëIxc’ÜZ’åß�FZà!xФ"É:Â9 üWxóimÂ9ðÿĉ‹¢D¤Óé´@¥=c3x<¢X išø"š&ð4fòçâ,« *• ƒƒƒÜ{lÑßßÏ•W^É\@:þCOݶm:::X´h===äóydY^È—ó2@óú£¿Ìû$‰¾¾>®½öZ6nܸ £Úò‘YµjƒƒƒìÞ½›£GbšæSä æõ\}ôQ8ÀÔÔÔ0,Š"ëÖ­cùòå,^¼˜l6{ÆÍ<À<>>ŽišLOOóÐC±mÛ¶§Ô,žç-üN:~Š~û¹ø Œ0 òM\ÁÆÕeäd5ÞÙ"ý7"&ÅX–XFNžåxp˜‘ê0“õC$I ¯JÓ£Q¯1Æ3Ò J¤âä´ýé~Úbm¨¢Š %H "•Ê^LóºžC’ÎišÿzÕV.lý]­zŒOÓߟ!“I•¬UË‚™‡ÉI¨×çNõ0bfƦR¨ÕŒŽêè:¬] ›7ܽÄÙ¬& dYAÓtlÇŶm4A$‹‘J¥‰‰jµ†ïGˆ¢ƒoÛˆ’�’„e9hrƒÞEí|ïûñ}‡©©Q*•NTQÁP Ð–¢»+ËÔä$.XCµê1;[A• ›ÎL&AE ððý¨„ á:.±x’( Ëwñ7=Öb&Í'”yGèT*…ã88Ž3·*! Ó´º»—𑼉ú§ûùÊWî£Z¿UÛoM„`eoŒ~ì•ÜúÊ39~œB!‡Ù¬£i*šª133Ë¡CC-ã•ÐEÒ4Ìf–ã¤n(øšJ*£Q7‘¦UG–EBJãcºº©–K(Š€ã˜$â:Qä¡ÈàºMÒ¹6|JÓ3¤ÓI™Ùš¢ JÈ’Ðb,…ÇÈéar¹,éd’Á¡A\×å‚ÏabrE3ÐãiT%†íxø¢‹a´Øw‰lšj­¤Ç¸ù…·0~ü$û·ï¦·£ÀÃwßÅÕ—_Š˜MRž.!µÅðB‰¥‹úP%¨WkÐV Õ*¾ùÙO³fõÔ®>B_¡išHŠ‚ªHÔà96öÜ*‹c™ ô3qr‡øÚ×±óñǸí¯'™icêô>‚(ª¢¢ë‘/F>!5L;Ä 4Õ@3 |úÃG<¿óÒ«™žž" # ùNþîãää©AþäÏn#®%ùÆ7À·¾~'B§¯·×oÍŰª”!fÈD„˜^“”ç‹_üõZøCĒɹZ€@ˆë™¸žŒeGd³Hbœ™iM“ætÄŒˆTLF’d"ABTTÇÂ]RÉdkÐ4‰ÂQRˆ„A„je–Z³A*“ARŒ¸…h Qð|‡(‘ĈD*† Ä4·^G erŠŽ.©œ·b¢í1øÀC<þÀ Ÿ§o]7×½äZ&FŠ|ÿÅo呟Npý Ö¡dRÄÛž8¼Jí$NUD‰:yè'Oðùú/{éúû{ùÞwwðõoüϽþùŒz³4½€00¹è9çãFF,A¡P ß–ãÞ{îåòË7sÅ—ÑlÖ˜™õ©Ugp‹±Ó£Äµ4¹%K(MÏ’ËwÑÝ;À¦Í×°cçcüàžû)®\†¬)¼åÏç{ß}„—Ýú&þêƒoçû^õ’ñÑ×–»ïÝÃÐ?=†/þ#+®<Ÿþþ>nÚx ïþ³71:6ÆÞí{Ù¶kùðçù›Oþ9ÇvqÇû?ÃM×.åö;^‰%JJ�D¡H ¨ªA"® É"®ã‹Åñ<‡0€(’|U’u׃�-DŽ"IÄEDJ&A±]›(ñm1Å¿ób_| §vìaû=’Ù¹—å_HaÃJH(yD¾‹(Ï¡MÏ’°,‹#GްuëVvíÚÅÊU+¹tó¥ôõõ¡ª*®ëb™år³iÒ–kû…žWQúúû¨×ëœ>ÍîÝ»Ñ4¾¾>òù<ÉdrÁÐéÉ Ð_XovÒé4]]]$“É3&š¦‘/äéèè�Z¦WÕj•|>$Id2Ö­[G{±UQ†|abY6l`×®]Üu×]>|˜x€B¡ÀÀÀÀ‚VlµZ]ЀíììdùÀr–,^‚agè©A@yºÌÐÐ#§GPU•ÞÞ^:::žÂŠyVôá|£ ³³pòd„ë27t…dòyL ãìvý¹ÀŸ5hM4rˆZ²¤q.~… ǹ•Äÿ‰+hâºå²F¹¬¶&ÏPÌKÔªccÍfĹUÔ³?*• »víZÔ)‹\|ñÅlܸqAòZä™|>O[[ÃÃÃìÛ·x<ÎÒ¥Kikk#•J¡iš¦ý·‰¢(’L&éìì$“Éœ̪ªJ6›]`ÐÖëu*• ííí-Ù¼¹$‰ÞÞ^6oÞLWW333‚@¹\fjjŠÉÉI¶oßÞòŒÐuúûûQU• h6›Ôj5‚  §§‡µk×ÒÙÙI2™<£fE‘ññq>L£Ñ@×uŠÅ"½½½gõ uþ#üçòkþíž#ÛþœpkÍ t@Iu¡h™¹[ÜïÀ ¨’JVÏÒ—êB®@N¨£§žƒ¢öÒ0]šá$‰X‚Œž!¥0ƒ˜#«gÑDíIç¥:·=eE³D‘ $ùE% ÎůÌ“!H§5âñE?+Ùª¶ CCðøã°?Œµ6OâqZ„¢RÈd ¿Ö¯oI�<[,Fdq°², ×õ‚€ H&Sxžå˜(Š‚¦*¡€†ˆ¢€¬¶´|n¸éZ¾{×ÝŒŽ ã 1ÀvâFI#f0[)‹¤RIé$¢*㲤`Y©œ¤JBà‡È¢@ÌPQ”Ð4pDPuæØ­óI XpFœgÚÎ¯Š Ê¨rŒñ‰IÖ­;Ÿ÷¾-¯~Í•YAT9røõFK·nË5—³fU§Ž‘HÊØVMo¹­·Š<úÈ6Ž9ÁË_ÚÁØøilߥ˜Ï31åâ»VXERc¤Si:»º8tàcÓhš@Â0е’Ó““Da‹E5;S~’»³L¹<…ªJH’Œב« žçÒ¨×ð=5“!ŒD"ßcjºADWwº¢!"V³ BD.›AÓc>r#‘ ¦·ôMÇA’5²¹ÕÊ(B®çø­æµQ3éèï§cå�ÿö‘cÄ4rýÝ †ŠN³iãú×_y% 㯘Ÿ?¢Ùlпj)±lœé¡Ab]‹tQð]Ÿ¸¡„!¡¢K*¾ë‹%)O•Ð º¢36rš-[®á³Ÿý17Þxž"D1AA”|AÄ6mLÓ"›Ê‹é¸®€kK<þÄã|ð/¿ÂCÛ?Œ¢ÂìlUN±g÷>þîï¿ÏßýÝý+ùÖ×þ…ÿõþò¾÷¿Oâ3 î?ÊÀÒ6LgId%‘¥>=E±ØÅ»ßý.º{:¹í¶ÛC—0ð˜˜Çqšˆ’‰ÀôtIL*ãS´µ­D%,Ëı›jEÓl^ý‹û°¬Se ]Ãó}4-FL‰àáø!‚$S«Ï"jºÃ}\ߡѨB&B“DßÙµIh:¾¢a„"q#žÏѽ{yø¡G/qùWñú[~‡D—€3YÛ¿™5k/äo?ûmþákßçöwÝÂK_õTu”¦[ÆÐ{Ü1Á[ÞúIFÊu|p/šªÐÛ«qÁçsúÔ~r™¢Qž,Aä099BïâåÔ Ší:ÈW^ÆÊ•¾G*•ä¼ó×áÙM\ÏFˆ"~|3 ö#Ÿ(pßý±zíyØË”[gõšµì>4„šÑyÿŸ¿“ï~÷_yÉ‹ÞÊŸàEüîó®åo¿5·ˆâšçpç]3l×ùþ¾Ï×?ùoÜýý¿fË–-d“m\wÓåüÙûÞŒ®Å¹|ó ¹æÂ«ùâ7÷rÁÕOðÜ›o$˜)¡k b±²,/ kÌYÃ00 Ë´ð¼–¾s J IØ®K$©ŠÌÔø(O¥™˜˜¤½½=–Àö#$%ަ§±\-´Q»sôe/§ç’ iîÞãwÝCôàƒ\zóµ¤×¯FP"p‚gM¢Ÿ™™a÷îÝ<ú裘¦IOw6l }n‹a~Ýqœ¹üãþ—Fó¡ë:l¸€z­Îá#‡Ù¶m¦iÒ××GGG™L†t:M*•¢X,ž±bÿ‹O[úe¹\î)’$‘L$i˵Íéx{4 \×Å0 âñ8ñxœ¾¾¾§}þb±È‰'bçÎ\pÁX–…¦iضM¥R¡V«¡i+W®d˵[ذ~ße~5ppppAgU%-Zô lœMP.GÔj­ùA½ã-6œ$ë¶´§5ñÎd •:ûBŸXõis ½Ð‡hsÀê¯TU"…ð�õÜùÕ\©8ŽÇô´L¹‘Í>óØZ ¦¦šMpPϬg#,†4›M†††øÉO~Â#<‚çy¬]»–›nº‰“Hh 1—.]ʺuë8vìû÷ïDz,Nž<I±X$—Ë‘ÉdÈf³´µµ-� ¿l†A6›ý™2º®ÇQea;Äqœ3†œ²,ÓßßO6›¥R©`š&�ããã:tˆ»îº‹ Š"†a,¼Wß÷™™™iånIbñâÅ\qŬ]»–b±¸ÐãοÆîÝ»ñ}Ÿ±±±0¸§§ç¬ÍõAÐZ÷5Mpœÿ�W¡µÒkçŒæ~î1tkøæ(r<ŽëáWCÛÓ™nÕ &C»¢äVcÅ–S‰$t]'›È’3rdÈüƒJYN¡(i<¯Œ(Èrìܶȯ9$©Ug22¾ŸÅ÷E¢èìÊÍ&ŒŽÂcÁý÷‡œ<éãyÐ×§ ªŠ""I1b±–¦ê† °n]ËœëÙTç˶ã3b­/@h’’$áyÞ\£+~ä!É„6¶c‹ç1ÍÅ®žQ«Ïpþú•ÈJˆ¦ª¤³qÂ@aýú<ð ¯xå­ Š±‘à“Hg™ž*‘ËæU…j½†,Ê-ù(@’%¢( }\·¥5‰à„a(b¨ñ…fTÇÁuÝ…Ïëí©Š‚“JÊ4¡oÓß—#¹¦ŸD:Åõ7\€šˆS›¡ÑlÒtJ(”§'‘ä�ÝÈaÐÓ×σ<„ã¸È²Šo;Ôëuòm,ÇQB7☦É—¯dpÿŽ æ†Þ@éô1Y£RŸ"IOÆi4šø–‹g{dÿ/{goWYŸûïšÇ=ŸyJNÈœ‘„À0)¢VÐJk­s[kk­·­¢R'êµ­bo­¶jõz¯Zà S@C€$@æá 9ã>{Þk^ëþ±sP´·Tbóæ³ÿ8'{Ÿ½ö°Öûþ¾ïó{ž\Ë2¢~ࢉa˜Ídð}+—%ò<üfÙhËR©Ì@_arÆÄNJ•2Žã1~PŸ³ð‚Ï $•¦ã03]!oɲH³â`[Yœ¦‡¢iqByÿ>ª‘Ïæ³V³ç±Gé,ÕÈ-[Cd²9šÓE^qÉfîßñ Íé"S^ùRTDn½q«S)²VUÓ©V*-(èXvš†ã!‹*/`ê9Â0AÑb’ØãüóÎá®;ʽ÷ÞÏÖó¶016Âøx‘Îîvêµ š¢øaè1Ss$ȤAú¹þúëøøß¾‰þ%LÏ “ÕHÂ×~ìcüýß¿—ek6r×Í?äÏþìã|àƒoã­o7Ýø¶o¿+®Ø„ïhª‚$«D~ˆ *¼ï}WsÆÂAÞö¶·P*Ñ4f³N¥<ƒtRµÚÙÙI‚‚$Y(Jk!6 7Qh-¢‚„™Ò ©¬mÛÔju&&&H’°¥¬[Žã¡ëªª399EGX© ’¤ÐlÖ5™‰ÉȪH*m151ÁÒÅK?1Fg¡“¸é£Æ13ƒ€À“;àž;ïäðÁ£lÚz¯{ûÛè]¼Çñ¨{ã(¢a™ë×sóƒ!7~z÷#¼ýï'‰G™¦{^Ž»î¾‰¾¾vþñkŸä³ŸûõÚÿðÅëH[:Nc‚ZÅ¥\žÆqäó,Ó¢\.£)ûöï# }zººÈ¦34›M<7AQÀ÷â($•²éêjcÑ¢Œ–ÊàÁèè(S‡rÿ?ã5o{ßûÞ÷PRܲÃÎ{cå’3±å2Óã£Ô‹ãà7ñe YâÞúFJ üèßæÌE*Ÿ¾îã–Á—¿ô-*Õ1þù+Ÿ¥4=ÆÄð0e§Éñܽëq^þÛoÀ4¤Ò9E*• ¦iÎÁ®¾¾>Êåò\B­®ëD*Td©e© È83Eš~€ª˜ØqBg[¡P¯ÔQ1’¨Uk¤tƒÄ÷‰T‰ªè@&&÷[[Ù²ªŸßú>w~ù[¬Z¾šŽË/AŸ7Õn?%Š'Ïó8~ü8÷Üs»wïæÂ /äì³Ï¦P(<£ ζm:»:;1F±XÄó¼¹þ_4LÓdÓæM­V_QàÈá#ÜyçÔëõ¹�§ùƒóY³f W^q%«V­zFÒðs«¹\îYÊÏ$IænO¿ÿsýû¹|Ž\>ÇÈðÅb‘b±ˆeY'Ó0KT*t]gõêÕ\zÉ¥s^±³Ï#Š-ëžÑÑQ&'&‰Âˆî¾n:::°mû”ktœ„{ïy衘0„‘³Ïéî0 (—ab"al<æØq(`éR¾ÞS $$ÔiЪä1ÑA8Ý>÷¼H¤„1Md*'A[–Ó*š_vˆ@ˆ„äWœµŽC@B A«÷¬�(§?®Ùð}ŸG}”ýèGìØ±ƒJ¥ÂÅ_̶mÛX²dÉ3 êì\¿~ýzt]çÞ{ïåðáÃÜÿýÜrË-ø¾ªªôöö²eË.ºè"6mÚôœæ½Ù ÓY°jŒ»\R�� �IDATÆi®Ÿ°Š¢Ë忀èÂ… Yºt)²,sûí·ó裢i+W®D;I fÁ*@WWK–,aÙ²ettt<¬ªªÊ±cǨ×ë„aH¡P ½½t:ýœlŽ~ÃuazŽ…ññ§®$ úúZj´¶¶d=­\ýï¡àRªؤ’4¢ð<¦$·L<}€¸1… j¤3ó(d—Ó#ªÄI‚8k­ñÿñq•$Û^„ªf)—F×2™Ž“–�§Ç¯¬Ú6HRÀƒÎJétwgåωuäÜ~;Ü}74!Û¶UÙ´)bá¶-#Š­ÍAhTÃh©YOµ^Y‘e ¢¨ œl¡ B‘8ˆH„V³¬ˆ¸‹ª Hrr²¸kÉsûú2Œ±zÝ<J¥z»úh:.¢(ÐÑÙÇ}=Ît±FE˜©ã'†‚IÚr4¼P”àx1Š¢ K*Baš“Ó“øžC&!I|4<ÏÇ÷½9ƒo×uiooÇu]¦§§I§Ó˜¦ÙRâÆ54EÁ´T,ÛÂqÔb ü0@n(ø‘çûˆ¡‚m˜äó‚ yÒÓ4ƶR$~@ÊÎP©T„´Íf-fŠ3 ¨ZL໘z×¼öR~ðÛùì美¢û,è'×–&e§ˆ£§Ù 3 ÙNF!¥™bË;6 qÝ!‘% CÕZ^+$(’DàúÔuº»{ÉäÚh6›”Ë 4E$ŠE4SE5lN“‰©):;úˆb0uÄkB#‰¶¦£ Š$"ÊsݧxíUW°ø¼sp'ǹÿþ˜Üù/yå«Ñ %yÝ—ð£»w?ÉÒe½Dx’Ɔó/æÁ];X¯¯"ßÙIÚ¶Â˲IÛHF3åA“Êf‰|—MVqäØ_r1ŸúôßsøÈaV®X΂ó#JK"’¬2SšÁ°3ˆ¢€®¦¹ãÖŸE“\yÕû]·Éf2|à}×±båÎ?ÿ"Ž>¾Ÿw¿û^ÿ†—ðÆ7ü6çž»‘ÿè&D½@à`š ²¢295Åg>ówlݺ™+^w%µâ’$1>>†®i­Pà\ÖHâ× Èfs„!>|YVCUQð}]‘Ñ4XÐ ‚YoÄ2’,ÑV(0>~ËJ1vb¼µ@K`zjšž¾î“­Ä.v6¡Z©bq3Þ #C'è(´33^¤ÓÊQ/S`ÇM?ä±ÇáŒEgð'ïý ôL3“åøÄ(#SEdU¤Gìçcûÿð¥ílÞ¸/œdÙ’Ç ½ÍDS;˜.—ùá-?àu¿û&.ºô¤l•Å‹úQ•·YE•@U4MF”-LˤZ¯ƒàãˆ.º¡rÆ‚-ï,!ÁiÔ±,fÃA×UŒ´I½VfÝꕆ̙+ÓïãIùnýîMÌLÖ™˜8Á‚Áù˜™ûöd×λ‘#™—]z!ýƒ:•â '†Ž1°¢Ziœ™on¿‘=ùÔû¯ UÈrÕïü ““­E]­2IW®MÎ"k²ó—¬cb|EÔS?†aˆ¦ièº>†P­V1M“B¡€4‰TT®€(Ê8Ñ š ²34êuêÕ:ímmè’Š$Å)ÇGÍ딄„FèP'@ Y𦫳—ÿÉ;pöæàðÿ[_gÁâÅ .[ «Î9%àªëº”J¥¹dÜ(ŠØ³g²,#arüøq:L©\¢Z«òõ¯]»vÑß×ÏòËéïïVº½¢(twu³~ÝzRvj.,b6 ªX,R)W¸çž{Ð4 ÇuX²xÉs³þ¬¿<!ЍŠ:§‚ñ¼§æ±(ŠæÒ…Ÿ~-¥´ñ {ƒÙ”àY¯ÖU«V=#UùT¥RÂÐ0Ôj†ÀÐPKá²yóS~ªù|k­aÛ¾ßúÝL ¡§GàTr>H€˜˜‰çBqzü'`›$!)$± Dèé¹°°Óã—ùæz@ˆ (X–LO@6ûÂo–%ÐÕ%29#I"-Õwr ¿Çää$O<ñ7ß|3?ü0º®³bÅ .¼ðB–-[ös7eY¦³³I’0M“+V011ÁÔÔSSS‹EªÕ*;vì˜{ÌòåËŸ“ruÖ›Uþ%«÷_äï*Š"ƒƒƒäóyöïßÏøø8ÓÓÓsA[AÌ…xjš†išs^é³p7Žã9µo¥R!›Í²bÅŠ9;¢› @ÀÔT ª‹-PÒßÿl4>Þº ÐÝÝ)§Ç¿ƒ4ÄI€’€€Ìó¢ÄO¯Lcæ0n#±YÉ¡)6‚(óÜ U$É@’,¢È'мӑ/ XM¥$šM×U^4y¨AвözòIس§K×®…åË#–. ™7/ù…¡“§â†‹,+2ÍfA1dyÎóE’”“ûV‹zœÄÔë ü0$ŠC-A“%4ÕDUÖ¯?›™b™™¦%' ‡Œb9*5·U(Š’%—ïD72ŽK˜�‚N±Ø “³ÐuAŠ‘d™0Œp\$E‘Aˆã¤ø…s“ïìp‡f³I?Íf“F£ª4ë jS—±L ’]04Aò‰ËÔ%1Ô04Ï©:’$¡k)tMCQ:€ë6èè(P­Íø>¾ #àyq$BÒ$ÒxÍkÏ烸‰Å‹¶ó—ñ‡€¡$€ª)ÄqLHD‘‚ï·&×(ŠðIj¥ÄG~€ëÔQ$ CÓ9xð�©T–žž&'§i8>vʤ\q…„B*$‹xãù‚ÄÔô]]=x~Hqj†l*…ï5Z6’BxŠ„$‹Üüðxù26w^Ð$É·qÖÖ =8Ä·¿ò V­[Ϲ/}9K×­¦w Ï÷|¿àDñF“BÏ2¶è°ã®›Xµf½ƒ‹#E•i8®çƺi“1lt]ÁókDQƒEg ðÞ«ÿ‚gÌç3Ÿùoz£Ä–-ç’Íå!ô[¾zIŒ–²(UôÏ_Æ¡}Cüá;þš¯}ëoE‰áèà;ÿ÷&öìæ†/üGŽãÿø^ñŠ­\ó×ï¤\.cÛ&…œÊÌÌ$ø!ù\ˆu®½ö#\sÍhïÈR*N¢)µFƒTÊĶ,Â0Æi6MU Ø\.ÃäÔ$a  ë¾§£«"ЬRsBµ*ª&“ËepšM$¡u?ˆB‘‘R–e¸õ&VÊ"m§(NLâ6›ôtt“Me™ ›ÎRœ(7„”É ×ÿOjõ2}=üþ¼¥6Pž§ìz8~³£?“¦ÑøÎ÷ó¹ØÎË_¾–¯}õQ©?ª*L5ü<)ÛF–A¶"\núþ·èèÈà¹uŠ˜–H:­FM·‰ªš¸AÄîÇŸ¤»³ËJQoÔ¨–jÌŸ?@/ÃÇ33S¤»»U1M”a0Qž¤·»9 Y±lÚËÎ¥^A}*u‡Éb]4X¹|Y+ƒIdì6òY•z¥ãÔèìÉ34<BWWMƒ3—/cË…ç²áÜs¸îºbýºùd-¯:Že¤™78ÀÞƒ£X™2©.ªcÇ(ZžŸõz×uçü››Íæœ_¦iš-OÏ@¦Ò¬¢ R+Î ÜEV±49-úu/À´ltÕ†F„WwÐóà–JÄnI3h¤dlMÂXu«Î\ÀÊdz﮻¹ñ§·rå?¾ãÅ6N ¶m#IàèѣϸV'I‚ã8T*<ÏCE¾÷½ï±wï^Ö®[K:“¦§§çYÏl8áâÅ‹œSÈÎÌÌ066ÆÁƒ¹å–[عs'7o¿UQÉçòÏR£¼# C‚0˜SçÎqÌBûÙ"-Žã9×ÞÞÞgPžç199Éè‰QšÍ&‹/æì³Ï&›Íž2ÁUq ~�“04”`ZÐÕ-rü¸@±ØjñM¥Z-„¹¤ÓÝÝ P®ÂáC SS`Û­0S‰''Ïð¦<-×y~w.$0m©I\GˆSˆj|š_?/`Õ|Á²zûZ!V/Ä%Ƕ »G`dT8 åô“çÒi°úâ¹ÆÇø¾Ïþýû¹õÖ[¹óÎ;q‡-[¶p饗²iÓ&r¹Ü/„’¶mcÝÝÝ­y3(—Ëœ8q‚ƒ²cÇî¼óNâ8F’$:::þËö?¿’K‘(¢ëú3:+ëõúœ@+ 䩬§«Tg+Š"&&&£V«ÑÓÓúuëæÀê‹ ªÖë0<Ü ¦ñ<X¼Î8ã)Ä(j×?ÞºO¥ÒR­ÎÚœV¯¶à'IŒš$(’‚ ÊÏ›oxB‚ï•©VŽù"еA°æÞøçú,³çNK9œþì^˜™  I’&Š„…@’´”ë´Àêä$¬_ŸpñÅ…‚€m‹(Šðe"'q‚ªjH’‚( €„‚€(¶ ë,øKÐ5ÃTI„aX§Úð)±hñ"V­<›ŸÜü^ýš ¨ÕË4 ¢”F’søAq&æÑÇS¯7xâÉ”«eò™NÃCUDV­ZBG‡Çà‚zzz1 ‰$öðh:>Šf#H>~ä£iÄ a=#¤D|ßGQ”9eYEH¢@&kz$!"!² Š I 2Q"DŠdB,ÅQÔòO”D ˲˜ž.²téRLÓdzj’\ÎDÓdšétš8 ˆdQQIâÇ«pù+.çÁ²mÛºú{¨Wʈ‚H'~D’Ds?K²LJK†’$Å "J"Ç1º¤@ã5›äR9Úº»I•ºÑÙ3@E ’ØG”U*Õ11†má:>¡Ѭ7]U@ðN¦œ'aˆàè²Lqxˆ©£¼æÊ×àù“¥&še¡kK6n J,ŽðíýW.}ÅkÙ´i-ÇF÷#6ÃG‹,𷄤i`§:Y¹l-ýlªš£}ð jÓÓhF ô7 ñ"‘ÐI0tz½ÎL©L®ÐË•¯}µªË×þõÇìØ±“ó—S-áw¯zgž¹EȤ Ïàƒïý,WýÞ2Îݶ‰™‘ôõw34<É·¾±¾øi:;xÕ+^O:—â}W¿›0„"õšÇªÕK¨–áØ±}ô ôòÄãS|þ†k¸úê¿"Û–axøííDÕ@S$DID74œzƒ0ˆ‰ã„8ÐtJ­Æ¡Ãû™œ§»»‹Je _•P¤]71u(LȦS芄¡­tw´ã4]º;–ðä¾ýH‚Àà¼ù„QHÃi kÐ^h£Ë# 2šl°ç¡'dÕŠ•|áú/ð½åSŸy;¿l±Rm”™lTˆ%„É#¤ÒY¦Š"×~âœ{Ár¾ü•bbâ’8MÞî sÅr¾o –çi5Ƨë|ø£7 ðp>×|à/éÈ÷S«OÇþI–¢\kÒð#DÅhµvûšª²pÑR–×t­UQ…ÁÁù„§¦± §R¥Q.¢[&¢ ÓÛe“={úKh_²Ñ{àÀþÃtæ‘¶s<¶÷qffŽ#éÛȯ9ƒZ#I¨¬X½œ\(zš Éf³¼ç/ßCw‡ÄÌôL!Â-kX– |á†o0ôØc¼ñªW“Õ5ÜÀczz]×1S&ñTH‚ˆe›,Yºˆ0 ŸÅcTä:ÓDUT„HÀw\&ëMÚÛÛ‘ AH(äsAD=j¢´[(€è$„•ƒ‚ÕÓƒK€#Dx"DˆnH~Ùf–ö®Gy|Ï)Uu]§¿¿Ÿ‹.ºˆB¡pÒÜþ©–ºYÅê±cÇØµk¥R Ó4Ù²e +W®dñâÅtuuý„_AhuVÌ*3mÛ&—ËÑÝÝÍ‚ p½–ZvôÄ(CÃCÔëu¬ÙØÌ_ñkÿÏŒJ¥ÂÔäåry® qViªiét˲ˆ¢h¬þû‚«Z­²k×.}ôQEaùòåœsÎ9§ XM’–÷Ú &òù‚@WWË"dd8á‘GE¤§G@ÓžéÅf[Í ¸^“û ¯/a _8u­NçqH ¦E—j¼5IcŸÆm¿ü0 Q”¤–Ræ…*бõü²‚#­€­ §“©_Ãó<vîÜÉöíÛ¹óÎ;8ÿüó¹øâ‹Ù¼y3ù|þ?œ¯A@–ågl°ær¹¹à&Y–9vìÕj•Ý»wó²—½ì¿Ôÿ\óŸc%IbjjŠññqšÍVfIêdXílØ¥iš$I2'Š¢gzéû¾Ï=÷Üî]»ˆ¢ˆ•+W²qãFzzz^TŸu¶”ªcc-ëžLÚÛ¡§çÙ‰Þ³a4¶ÝòSòÉåt9D>TGÁî½ýùë¸b*$ña ½“Tv!ŠbÿÒà6™Û.>MÆÝCQZªï}û‡…bUZëüÛnƒcÇ`` aÑ¢:ù¼K>¯`š©Sζìÿ VÍ–i·@j!+ 1-HÙ‚ª­tl‰¶¶.ªu—™JƒtFB‘SØ–J¥ÜäÈ¡1|àq>óé16lXÍÅ¿Š¶B/ÃC<üÐ>/æ­oý[Z-}íÈ2ŒOøðùÏßi‰ vsîÖ^.½ä.ºp+MÒiA  IR‚8މ¢8NÃpn²Dz,$I¢V«`›6в(“ľã à‡1v*‡ï‹xnˆaÙ¨’JøÄaˆ,ŠžÏÔÄ$Q S-•Y88Ÿ÷ß˲e h4ü Š}M@ B„$DCÚò9®¾újºúdÊÅqˆEˆD’â8$ˆtME’%\ÇEÕ4D‚Ð'ò#Y$=tUEÑuÊÓÓ¸®CgW'‚¤124B„D*ÛÆäÔ“Óe C"oZHŠNè;x®OÇ´r¸Ž‡" ´çóT],›XU‘ƒ�E”(OŽsÏ]w°fí óðË5T5C®½‡Ä«P¯L±|íÒmíT&ß¿ñߨ֦i6áŒ3ÎÀ«xxÅ]¤ÉZB_åÆÿó.¹ürúW.gúÄ8FÆF³U‚8DTB$Q`º8ŽiØè†Š($9t%Ë–ó¡/¡ZªñÅ/|…?úƒ×²ñ¼mßÿ]]9Ä8˃?ÛÃäÄ8_øÇë;ö’$7R\ý—×òîwÿ9í¹vÞò¦÷R­Õùæÿþ$qä34|B!KŠ(JH__†éÉ*ªbó¥/ý3ùȇÉä,Jå"}ý½T«3”G&I§R”ŠEâ0B‘Y"ITÍ’>Œ8tuç‘ Ah©À-C'ee©;1¡ëѬװmƒ\6C½^GÓdY¦$TÈfRtu´S©T™žž¦««³ð¨Š†$*”fÊtµ™,Y²‚~à“ÌLH”.(S÷b2PèïaºéKÓ•B ÚÚòDQ‚,$~È£<ÉÌT™Õë‹Ï^ÿy¾ý¯?äê«Ïâu¯y5µÉcئHµ:ƒll8gßüúOè+ÀË.» ×oâû t]¤é6‘Ó²¨»‰ °tÙJTb&ÇOàº.yZAZÃ#ÇhÔ+¤Ò6=ݨªa€Äô÷tÊ šCè J¡[E bÕŠhF;O>|„Ññ ûOqèÐ $S$¨”‰bI58>|7‘1ó ±rð³ûvafUYETó Q<¾‹uKP¯MÑ7¯Yyl×xåKéëî¡êN¡ª ¶mQ) ÀTÊB }dYÆ0l</©{ÔTÊBTÃlmî$1ÃÃÇ@tM3‘4Ç™©ÕéÈæ$‘ééi´F3cc¦[«ÐX]·ñ"jÆ¢õüS¬ ‚@{{;›6mbppðYEˆ(ŠxžÇ®]»˜™™AE2™ —\r «W¯¦½½|>ÿ,°Fƒ¡¡!’$!NÏ©bá)Ň(ˆ¢ÐZ(&¿¾×]¯×çZã8&•J‘J¥æ6ýår™G}”}ûö…+V¬`ppûdå¡iÚ\GËzdœ}ûö1oÞ<Â0œSú>öØc<øÐƒT«U6lØÀÚµkéëëû¥[Ã÷áÄX‚e ôÍèê‚ö6ILø°gOBwwÂúõÏVÄÉr«…Ðõàðá„”-÷r¬ž'çb8Qiâ>&§ÛŸ°Úòþ¯Õb§eÍñBy$ªjëù“D¤Z×=­˜z±Œ8Ž™žžæÐ¡Clß¾;wR.—Y½z5ëÖ­c``�Q)•JÏP¼©ªŠ®ëˆ¢H­Vc||œjµJ[[†a ªê\}:Ûñ1ë¡þëôõ<ááa\×Ûµ9š}-µZ¡¡!î»ï>FGGI¥RÌ›7öövLÓD–eòù<¹\MÓçàÁƒô÷÷Ÿ´±ó©V«=z”»îº‹R©ÄŠ+ظq#¿–ÍâçÄ£VëÿØX+\²»»u3ÍgßײZç¯eÁáÃ-VMƒÿ óó¿ÕH’�ßAP”T‚Zx~€e¸‚[FfPí…˜…EŠýKý} 08Ý9ðë«mm­Œ‡jmRÄñ ýn©Ñ…Ý»AU#Î:ËgÁË0 ]ÿÍóÿ]Ç; VE<ßC7 üÐó´Ñ Y’‰#‰j½$Y˜zº¦rà‰"ßüÖÿedô ¶Ù…™ÒxɶW²rùD±ë®û_ûú”Ê+ÏÔ¹âŠW³í¢ó™?ÐG8èªÔ2ä>zœƒ‡°cÇî»o/ÿü¥1¾þÕXµò |ü$ŸëFT<"ÇEQbüÐC“cÂÐCâHB$A’!Æ÷òù qéT¾’BY’QuE pÏ­“Î(h²€&˜ŠB„ﺄ¡‹¦j¤l­e(ˆ‚œÇ5ý).¹øBºº;H"˜™)ÑÖÞ†,i¸uÓ²IB‘zc†tÖ ‰ŠÓ3äry¼F€•²Ñ$ƒ¨œ´p]Ï Èå3øžCÄ(šDÈÈ$a@³ÙDÓ l;C¢„­™„a„eXDª@:8Žƈ’ IKõ#‰é”ãxT«%ÔT†H”Q% M‘uò“E†Fó[¿ÿ’F)›%ëC­R¥QŸ k)zŠ›n¿Ÿ;wÜÉö[fX¸8•J¸ñÛ·óªWžCg¦”#Vp:z–qéežØóº"ÑÞÓŽÖðü=mÑ ›9>DW[(JE(NÓYÈÓÛÞÃΡñ±ÿŸûìg˜?0Ÿu[7R/NbåúøÈGßÎï½ù¤ÓYœÀ!Æcû¤½ë ÎÞzÛ·og÷žøæ×¯'eç{œ¥g 0<<†dëÌ_°ö¸ýîŸQ«Wùë¿ù¶ú R¦J­2ƒmä3iêõ );E&Á ¤Ôjõà4ë¬X¹ŒÎöµf•8 …˜‰‰q<Ç#*àø>é\ÍÌQ.•¨ O¡ë:Y«Z½N„Ôë zû{‰p}ÉRI”Ñéñãtè…TL®ƒêñŽ˜FÖ2¬Ý²™+W𭟼´ m=ŒŒD¶dz;;QÂÔ r‰ŒiÒ^0‘møìgÿÁƒvŽ)òÀ·Ð43ÕGâhH‚Íðñ2Ë—äø§/^ÃÙÎdfæ²åÊ ùB†éb™z3 mgQõaÓ‘M#D>c“T+bLÃ@òmm„Cy膂K8µ*åjÙ¶ˆ¼^Ó£'“ãøÐ ý\¸e真áã#׳ãÇAI¹íÖý<|Çã\un‡Ž?ÁykxhÇÃd*MbDM¢­-K¹ÙÄÌ(Ü7Jg®“À‘éïêâÐ{0S:¦1=Ó$ð¢X¦Ú¨AP.9~ü8º®cè:¹¬IÅ1MÃ0peIÁ<TYÁ´ 2RQ@–Ñ,“F³ÉÔô¢ £):¶ÁLH–6é0:ÈÚˆuœzQT™FФ閑dÈdÒ§Ìä2«Zíìì|ö"Lq=—z½No_/ŽëÍdY²d ‹-šk‘{:Š###|÷»ßÅu].\H__ßœ÷h†”ËeöîÝËÈÈ–iÑÞÞŽ®ë¿ò¢k‚Þ}÷Ý<¼ëaœ¦Ãàà ,� \)·ÚùNŒqôØQŽ;N.—ã‚ .`éÒ¥sê[UUçÔ·Ùl–‰‰ x຺ºhoo' CŽ=Êž½{8rä\~ùå¬Zµê”‚ª³ ¯0lX¹\ËcMÓ`ÑbãCðÓÛD††&&Zšª>p$©eI· ê(|á’¿á¥ÞÏl/r¸ŠpREsú‹ñ|¾¯®Û:'«UèhÉd^˜iš…D1œ8¡P«Í‚¦Ó»+/ô‚€}ûöqÛm·ñÓŸþ”R©D¡P §§UU™˜˜xV'FÇ´··300€®ëŒqÛm·ñøã³víZºººZÖK²Œïû”J%vïÞÍØØmmm b𿝼ccšÞqÇŒÏuÌ>÷lwΑ#GØ»w/{öì!I–,YÂÚµkçÖ$‚Ð ¶íì줭­ééiyär¹žçá8‡fïÞ½ìß¿Ÿþþ~¶mÛÆÆ1­|Áaz+ù»Ñ€¥K[ªÔ§;0Í~Ô³íþ³ó~*Å\pMrz_Hˆ’ˆJ\B!EJH!c=?snÔËĵ$ XmÙAPÌ_jwLB&#f‘“*-¿k“ÓêÕ_Ì“!nݪÕXtq™�� �IDAT ‚Tݵ«X.ô8ãŒóçKd2š¦þf~šf (FâL‘Ð ( ‘e†ë#‹M·I")”k%úº—pç;yÿû¿ÈŠ5½¼ÿ#ïbÝY+xó›ÿ”…‹72tÄâÃû+ž<p”sÏ;ƒ7¿eË—R(d‰#S§Ú,'"ª®Ó×Scþüçœs ¥™‹:Våö[Ÿ`ûö'xÕ˯æÊ«¶rÕï]ÌÆs–sbâ †"„uI&e·Ñ¬G­–I§J&¯aÚàû âXAGlÕ UÑ4ƒryšLÖ¢ÑlÒÕÓÓt0LMZyYKP-‰ ¨7ê¤dMÐT ×ñ9û‚—ðÒËvò‰O~‘ýõÕ¤Rmí­Ë(Q¥Ið‘•„¦aâz"†e'ÑIc…\.‡ B*e#É2‰²¬±  1µjƒŲ8~ô8333ôôÏ£î8Ôê â( »¯›À©¢È*~£)\ßI@WÄÖ5$E¢Ñ¨"ˆ2AáÕʱŒÊàUË |çÛßáMïx;ŽÐBÔ°†ÓðÑM™¬ÕHg0 ‹¹ù®ï£gàÒ—o¤Ysùþ·vóµÏßDG›Jo/m‹Wsé«.gýòzsíÄbÌØÑ'½Ir} ŠU#•¥»»ËJ!&"¾ãcŠ"’S#‰k\°i “SL—Êl<{=½ö#\síu¬ßðR>ÿùOPK¶\¸œ‰âq:Ú:çË_ùÿ_â¾Ýò®~’O}ô¬:s€™ñÃtd24fjtd»%߉éŸ7À·þíÇüøæA·BB¯‰¦ˆˆHh‚Fì~ˆ©YºˆÆx!HªF¹\FJb,Ó ˆ߃8&ò"Òé Š¢t 4M¦K5ô”Ætm Ei6+’Jâ„ ]Pñ¥×÷p‰,ÝVˆb…‰q‡¾6‘”(`Ô¦1Äv¿ÿ'<xÿNºì%4²°ú’s›.….öaõ†eÄQË”18~ä(¾7ÁÙg- ŽÊœµz>/9o-…l'N¹Â};îãÊ×þ!él@¥6†–”Ÿÿüì¸û>nøÜ_2é|í#I<²¢Ådišº[C× Ò¶Ž* Ȅԛ <9&m™ŒÅnàUêøAD"Ê4ü– ˆç7IÐD ͲP j¥J0V¢Ïà+"ùö<Z£IÁR™V"6m[Í=ÞW¹âå¯â¼Ík=²“zéqÎ<«îv‹Î݈›dø“7ü6îÞGÞØFg!ÅÑÉœ½~f` {9F†1~x˜êh“Ïûï¸íÆ[¹ô•Ì—¾v ûöbÞ@)K¡¯·C·0 “$JÈØDêõ*©¬"™âQÔò¡všMt]ÃmT©7šÈ²JJÑ)—«(z‚¨ª¨¢DX-“V$šaDqüM§(ªÄ ˜¨šIk„O½æ¡çNÉEELÓü…€™¤³­–w]×ÑuL&óú£‰¢HE?~œ¡¡!Ž=J6›S¬ÌZ×LNNÒÑÞÁšµk8kÃYò×yF0ÔÏ­³*˜Ù@‰ÿ¨°zúýfÓ…=ÏcjjŠÃ‡35=ÅÈÈûöíÃqê:µZf³ twwsæ™grÞyç188øŒvÓ4Yºt)çœsûöíãèÑ£üèG?Â4MÂ(dtd”0 éííåœÍç°yóf:::NML#´vÛuý©¢+Ÿƒþ~ŽNjµ]z)ôö>µöŸ-Ìt½õ?ht’tꥈžPÕ‚“…’rò&¼ÈùTÀ§4ƒz]Àu[Š3M{aÞß8~ÊÓ±Rñ<íô‡ó"a2<<ÌC=Ä“O>I’$H’Ä‘#Gp]QŸeok×®å²Ë.›óOŸœœd÷îÝ”J%,ËBQ”¹uÀ,\mkkcݺulݺ•|>(Šssüìœÿôùu6ê¹ÌõaÎÍõ³¯¯X,rðàA<Ï›;.Ïóð}€b±H±X`Ù²e\pÁœ}öÙd2™¹ã‘$‰… ²eËvîÜÉñãǹå–[xôÑG ‚`. «»»›7²eË–g­^l׆0lž§·ÿÇq øDQKÍ:ÛY"Š­kˆm·ætÇiÍßÿÝçð˜OpI0‰õy›Ã¢¸ŽëÁñF‰“,È<E…(ÉhVœ$(ÆiÃÜ_Ó˜¤R-ŽFã…ߤˆ¢–}×®Ö&Ëòå ˆ´µiȲþ› ¹g'3A…jµŒÙº…ÄQD¥RARD:Úz¸çžùÓw]Ï;ßuôÎß¡Þ(Ól˜äìE|î3_dûöý¤3"W¿ïU¼þ ¯Æ¶¡Þ˜&ð+x®‡*ÅÄ‘K†Ô“:^Ø n6Ðt“0ªqæª\vÙ+yËÛŽò/_ÿ.ÿòÕÛùî÷âU¿5Ÿ~èÝ´åòx•1šqƒj£†®ê„aDÎÈ‚‘„ ²�‚"ù¾/ ŠAàÅa¡¨*ªÚòguͦ‡¬ÈȲN¶|eeYnMÊ‚G³é k&C‡÷óÖ·¾…¾pýØG¹èÂ-lÙ² Ó4ˆã–ÿf½^C×5TU$IdY"“I#P¯µ û0ðÉå2ADàûÄAH'ˆRKÉkY&¢#‘JÙLŽv:Cœ$hªNdÁèè8ï¼—ÞÞ~tÃDÖ4’8ÂÔT¢<Ïb\×Á?²¥R""&"’¤â×êd:{ùÉ¿|…³ÏÚ@×’eTÊ“h²Œ¦ à&äó]¨QÌ­·ÝÅ5ú,²óÆ7]Ä;ßõûÒy¦FjìÙµ›éÉ#Xi‰oÞ¸ƒüùmÔJ¿{År^}ùˆV'ãõÙ•Iå2H„¾€)kD~D,A"%²ˆ(Ë$QLÕ+‘ʤr6ïZóG,•k¯þ�/½b×_÷ÏüÃÿœy½ i6ƨ–ë|â#7ðÆ7\…ïÖøßz/×~â¼âeçѨ͠ØSN Å´¨Ô+ôvåyô¡=œ:̼B·dãWë¸ø8a‚"ŠÈ¢€@Bø˜¹,n­aY±GFòy’ÐÃ÷] CǶ-â9?É–ŠNQT2Yõ$Ô‰H„˜j£F’töö0zü£cãdÛò¤ÒY¼(Â,ݦæÖIÂÞ\žêÐ(½9™ÃÇøþWoåÈÐ(oþÓw³hë|^÷Ž?dêÄ4ó{EQPtEVI¥òì¸{'ozóç¸p[/»ôÓ¸•€¾ž>úákxd×c<xï.ο`¦mÅe2Ù’D ¯ï ¦&§xÿÿžüo®¾ú½H¢@¹\$ˆBDñéiå –©S¯×I€ÎÎüP@Jå2†©¡éyb¿N­6ƒ•Ë#I"ª,ÓÙÕ‹n´!ˆ1‚ ±iÓfJÇÆP,‹êôím¼ôe/á–›î`|âî Ø³ë^6oÊÒÛ?òÌ IœÁ4tÞôûW11sM“BÓ„1PTC×8z¤Š:°¯~õ«\{͵üù{ÞÏoø"¶mP«I¥l¢09¹ÈŽ1L¢Öë%‘j­$hF+8ŠlÛ"e§[¡{@!ߎÓh…Æ%IÒ²$$QFQTÚÒiœ¦,¥„ªƒ¢‰(ŠŽ þæ(¯â(F‘2™ …Bt*=Øôó¼UAÀ4MºººXµzA01>Á‘#Gh4ÄqŒ¢(är9–,YÂêÕ«Ù²e ‹-BÓ4†‡‡±m›¶¶6 ¥ ý÷ÐÖ0 ²Ù,]]]¤Óé_wg!pww÷œ7j’$ضÍÂ… i4 355ÅÑ£G)‹H’D:¦¿¯Ÿy,_¾œU+W±téÒgÁdY–9óÌ3Q…{ï½—ìdÏž='ƒ&[þ²kÖ¬á²Ë.cóæÍ´··Ï)^OÉïBÜ*Æž>z{áüóî½Wà'?IX³ædp•øô¢÷©Å£çµ�‹a´™§×óÏs™WHâ"D.‚X@”»@PO¿5ÿ ‡ ´ÎÃYåÙ u®5› S“ Õê¬Ís˳>=~•ßI’0 ƒÞÞ^jµFƒ½{÷²oß¾Ÿû˜ÙË­[·ÐÕÕÅÊ•+™œœddddÎK5 C4M#›Í200ÀÖ­[Ù¸q#«W¯~ÆF®ªª¤ÓiÚÛÛQUun]1;‡ÏªEg7gÞkPU•L&CGGÙlUUç¿bÅ ¢(âÈ‘#LOOS.—)•JÔëuDQ¤³³“U«V1þ|V¯^͆ ˜7oÞ³Ö7³+ù|žûî»Ã‡óÈ# ( ]]],^¼˜K.¹„3Ï<“ÞÞÞ_è=ÿb¹6ÌÎͳÜÜ÷[ÃíŸW¯~¦’UU[@ZðuÖ{õ¿ý9tòßóioR§!Å‘Jê"D©’ø—ôo@’ÁÎB}ªeš‹Êiùñ¯ó¼3ÍÖ&…ë¶Àªç½°ÇT«Á‘#1G&\~¹ÈæÍ:==*²ü›=GËI’Ðh4°m“\.G¹\níâ…!£h:¾ç£Ë:ˆ“EÞõgŸæÕW®áÞyåʆ։_Í03¥sãM38¨ó‰ÿùf.Üv ’è±ïàcèjB&m"‹ & $Ä Q‘¶Ó¸ž@£Þ¤£% «ì?¸ƒþy øä§ÿ¯»êBþö“ŸáûßÙÏ“{ßLJ®ùS6¬[JÊÊ&U¢Ä¥ê”hÏu"‰Q(’ É1qX%Lb¼ AUå0%$Œ|’¤•ì-Ë2‚ØúEkM¾a"K2’!CI¡i*Fl&M¹<É»ßóN|è!LM"Iáz <×Dz-4]& [ê7n´|1%Ïó1 ƒ ð}MרÕjH’ˆ,+H¢ˆÄ¢@„˜© nµL¥Ú £»Ã4˜œnÁ¬[o¹? Øzþôôöâx.ãcH’D.—F–EÂ0A× Iâ{º!1a¡H²³”‡†ãúœ‰q|A ¢(¡Z©‘(î=Â{Þó!¶ž·˜·¾ýµFȉ‰'还‹z×sÇ­#¨’Ã7ÿáZ&']nºù‡|ùË?åË_ÙÉù/éäìëXZ…5kr YÄÈG |„8AR[Ái’"‹ .!¦eà4b‚™¯ÿ“?`ý†-¼ùíב7¡86ÎÞÇv³þÜu\{õÇ%ø½7¾‘K_ò:^å*Þþæ·PžÅÌšLÎL£¦-šM\6ϽwÝËOn¼™·üÞkùÌßÞ@y|ËV‘ ‰PˆˆOžÿAáyÂÌ ’,!"ª$âžãD†iÌÐGQ„aÄqŒ,Ë躎¢(DQD©T¤V¯b˜‘Skº¨)™DR)9QÓÔ™/‘•®ÚÈè#wðµ¯ß…bI¼á/þ˶^ÈÛÞôa*30ºo„Žü ná·§ ·4ƒkÄÆ7þõú$®¿þ38ð‹úç15ãñgïú+¸ÿ0Äð¿nxóõáTUöÜG[[/{÷<É®‡w¶ ™†Kʶéííbxèÿ½÷޳¤*óÿßçT¼ùÞÎÓ=92Ì�CEe�PÀ€ «¨«këϬ»‹¬Ši]÷‹¸¸®® 0£Iƒ8: 00©gº§ÓMu+s~Twƒ„]„AûáÕ¯ûnÕ­ºu«ÎsžÏù<ŸŸóèbI),Tbˆ¢ˆ(Šð<¥Szºº‰…ãå Ã�Ç+]tš-[S)— ÄN'&À`[Šœ°ñ}Ï• %&ÌL³Mµ\aù÷Y>iòãË®çª=Yéíq¥<¥±ì0$çytÕ ¤:&UÏs±-›sÁÉqËwoÄ–Ðד㢋¾Å/:‹·¼å ´þ|n¼a#Ï{Þ‚æ‹/e|l‚J¥F*‚N;i 4Š hOk„9X2Ó`µ,DZ� •šÌ¤Î’”J%  ”A+° ÇÏÓœ 0‘ÁóK`rLŒµˆBÅüƒx¾Áüõ:[–Å¢…‹8ùä“™šœÂu]úúú–‰!¥¤\.óôcžÎòeË©×ëA@†³Œ˜B¡ÀÀÀ� ,`áÂ…Ùµ6†®®.Ž8âz{{ ‚€ÁÁÁ?b‰®\¹Û¶9è ƒX³fÍŸl­w]—¥K—r '°dÉ-Z4k´U©T8à€èïï§^¯Óh4hµZA0Ëà-•J³æýýý”Ëå?*”„”ËeV­ZE.—cùò匌ŒEÑl±7þ|ößúúúf Ÿ¬EYA庴û—K°r• ÙÊœDg-3zmŽ3ª>öÀ·¢ŒÒiü3ö[üòZòÇcù½sço0f3\73¨y¢4Vs9èꔊ02÷ÌïSá8ÎìâàØØQýCõ@Ÿ4eùòå³ÝÅb‘ƒ>˜jµÊøøøl.™WçóyzzzX¸p!óçϧ4ƒÎMÏ/8æ˜cX´hRÊY£¬Ì8u ÏyÎs8à€ø“5¶m³`Á6lØÀòåËñ<¡¡!üéöеk×ÒÛÛ˺uëh6›t::Îlž®T*ôôôÐÝÝM?ƒƒƒrNQ*•X¾|ù,{uïÞ½´ÛíYs«V­Z5+!ðd#Â0k¾ã¸óÎŒI78˜É<XY¨ÑzNà/>ïÆ¡ zpJ«ÝýøÕùÍà­€¶„�Hôôª7së\cH9£;ž1¿wìÈ, …Ç7?k °i“aÇŽBĬXQdñb‡|þ¯_¦ÇÎårDQfªáùaDšdÌ:i;h­‰CC¡Tæü þ…Kª¼ïŸ^ÌÄÔ.„®R--æü/\Ìõ¿¸•õëz9X»ú:í:õÆÅœÄó$¶%ÂŽ°&[]nÕ›tƒç稕zHÒˆ(¢\ÊaÄÆvïå ráE_å Ÿ½˜‹/º–¿;ý^ÿúSxÛ;þ¿l¡’ÊÕ±JqE£%iš UHš4ЩÄh ×sHC.çÍ&þ8 ±B¦S(µa¥‘Rb[6NŽÆsaû¶{pl•YØ:’ Aw¦MŒlÒ4 Žk‘¦i¦¹˜Ïôt×öÉ®{v]ÇÂó<¤¤©"N’ÌÇóv Ï—HSMÐÉZNî¸ãvº{j,]¶Œþ^ÆÇG £ˆ¸ÓÆ÷=t’` B ¤ådŒ9˜¬G%†²ã ý<ùkzèz ß–DaB»aã`ç 4[†üàFöŽ@o{ü¤é$A§ç§Œí¹r¡ÀSŸ¾–ám[øÙe_ch`%¯þû—ó’W¿Š¯¾–o\z=ç}ñGT«Ç{¯zÙ‹Y±| AcEéb#Ñ®…F™„8‰“Z¥BF¨8%iblAÅS|â?>Éøø6æu³ñg·sÏ=Ã|âãäsŸü,}e͹ç¾ÎŽû¨ë¡“glj’.Ïg^Ï q?ýú÷xÿGþÝÛïg÷´r»â£Ò’L¿SH­%Úó‚€b±H§Ù@I1W`lbœTÅØŽ…eY‹EÂ0œHÇ!MÓYf¸c»Žåãû6Í0¶ªý]¤IJ'ŒFâac ›°Ýbɲ%„wïä–ï\ɵ×ÿcOXÍ⃎eíÓ6ð__¾˜/}ûJ|àŸæ°§_Ƕ­{X¶daРÖ=  7ßxüð»1$ü臗b÷|n¾u„[oº߃¥Kú8î„õl¹óWäýp8W^y¯zÍÙìÞ Ë—Ù¼ê•'qÆ‹O"M"ªµ2ƒCLî݉J5¸‰ÖàXR8äó’$ÂCœÄ$Ž-©”Š4 FFvãXšbÑÃ’†¼›ÃóòT|•jT=" c\Ë#Šc’4áÛ_ÎW~qG?mG=åh^óš3)85>÷ÿ.§§‡u8ÑTB¶¢P*&M„„©(7OHDÙ)B}/JE48÷=obó}¿aÃ3ÇQÃ{áöÛïæ„ã!M »GFQqD.—i&c… ßËL ¥4ù|ÏóH’­„°ÀHÂ0Ķ%–ã¢R¥ RBµÚÍäTþž¾ð¹¯pö¿\@wµÀ%—^B´hLsÔ3þz€Õùóç3þüGYLçX¿~=ëׯ«¹‚Z­F­Vcݺurß÷Yºté¬&êCx. .dáÂ…sÌ1¿÷^±X¤X,²lÙ²ÿãês6nôôô̶9þ5G’fEX’<�Œæó°h¡Àv ít÷<<©Â÷³öÃ9€¿H™Lœ„´#¤÷ÿ‚´k Ë[€ßí#ÂcçV<OŠHÓ¬nvœ¬póž üBA08˜™ØmÝjæ�™} X]³f kÖ¬ù_†ëº¬X±‚+Vü¯æ}}}ôõõqÄGüѹ-X°€ <|lÛÌ›7yóæqôÑGÿÑûK–,aÉ’%ɵš™Ÿü5äz¥²…Ò©)غnº){õýLà•f:V¤ÌÆ9—Nþr Èc;K(Tú «¬Úc€~Pš D€å0§sýøÇŒ¬VWW6—Þ±#ëüšéâzœ`U¢H³clÜ(˜šJ˜7/dáÂ<ÝÝËúëGÚíN§ƒeY”J%R¥2wò\K‚çÛ„qJ¡P %Û·Soìæ™Ç "ìdJ2н˜ÿø· øÐG¾ÊG.á+~€®>Ãî[qmÏ3Y‹ ´BPq‚@bY»O›ˆžŸÝ;Gñ ~Þ!Š Šœ_¥^ßC©èðÒ3N坸{Þú¦wñ‘O}Ÿz{ÿú±wP,±wï6òžG†Ø¸• Ò£ E»3E>o“ªˆ háº.QaIk6gà£Ä÷s4ãæ¬ããðî]¬Y³†]»†éïï¡Ñ¨%-’`Ïõ"cªe“Îc4iš"„Ä÷=¢hxu|¢0DZJ)‚ E1—Gh…V a¤) cã“t÷õãy>ããã˜P LB³Ùdá‚…h2996í–i!UB¾P@JM’DHÛ!M ž—Ã&ƶÐË5ÊU~úï¥ ‡m8–æÞ=àÛXžKÞwˆS¶‡å*¶Ü¹›ë¯» ߇ž¾^^xúsÈùmmLj°ŒCÜi¢U‡ù °pán¼ô§üì²aŽÞpÇŸö\ö?è œÂ{8÷ÜrÞg¯åšk~Í9g¿ãŽÝ@ØG¡Ð*ÁQ‚¼#°¤V)žqÈ»6­f•†|ý¼Ïq슥Ô7m±%÷Žnæ?ÿû‹qø‘üϹçóÕ oãCï=‘ð×wRìaQ®Èî-;9p`9ÐÃÍWýœK¾ÿ}>ð©ORëêåÊ«Äp¶ì¼ÃÁ´¦AUJk×w¦Wa#\× …‡NLª:ùBŽ8Ž)—Ë„aHE³Æd3`‰1×v¨« œ¼‡t]:q„I'Fj(9¶m°”!WëÇŒŽqÕ÷¿ÍeÿšW¾î%<å´tœA&Û)Ÿüô¥œrÚ:– ðùÿü¿Ùò#?lÕ²K§Ó@´;·w°…fþü>vïÙÂ)§=‡Áê¾÷ýß¡ˆlGP( ö¶Í[ÉîÝu>xö§˜š€ôL^pú³é­ð,ÃøÄ(¶-¾+ù¼‡ë8t‚€8NѤiDš& 9òùB4æ|¤ÐTKòžÃèHŒçgŽ®¨MÎöÚ÷|„oã’bD‚% ½}½üúç70°º›o¸‡·ÜÃQGB¾ÐÅûÏ~Û゚+.ßÌÕ×]Ë[nãÐ#ã¹'½ÇwÑi„Ò1ÂÎÚéCi¡UŒ]´hïÞË›Åü.øåM7qáÅ_âó~•K¿q§®àE/|`c´àÇ?ü–Ç>óxT)ÓÚÊç h\âXã:JiR5½°â8ØŽEš¤ÓFL­ :I鄚‚ç+0$Ó÷˜Åd½EßÀ|â(å²ËÈȈfÏH“Ã9?§i·“Á«æfsñWù<tug¯3+ëž—9œV*‚Te«ðrŽýðÄLØ¥K±¸[ &F¶NnEm>êŠ3(,8aÍIü-„Ö»|j*kï}¢ÏËÌoŠÅ90f.æb_‰ €ÛnƒM›2PµVƒ£Ž‚CÉØª¨²†Ù˜R­f¹ÜÜ5œ†+yÌ׊œTäŒVúc)0ž}®©2g\õÄÄ °jYÙ3Õé<¾ÇOÓ„©©&wÞ ·ÜRch¨ÈQGåé볟Ô]u X1 ÀVЦP(P¯×ñ½<¾ïv:ÔªE”²¹ï¾{yÞ)'2oO+ú–ñõ /åãû*ÏyÖ|Þþ®—c9¿ûÍVæ ‘D¢8!C`[‚r¡‚N a"-Èçs8^KÚô ÇZ'” RmÆÂ¨˜vs*uq½”Ï}õvôÿðÁs.äç¿xÿ|öë8é¹; bÕÄòÀ2)*Ï*!T‚e ƒãd93m fV,ËFé du]Ïó(‹t:õÆÅRŽN§EšÆhctJ½1E¹TA)5«8#žîº–eÑl6I’„jÅ1­C)˜ÖotÂ� xž‡p%ÅÄø&Æ›¬^}�a§´mlÇæÞ­;`pp lãòÄqL'äryÏɤ�ËÉè;FZ8ÒÁh‘É–Àv%ÍÝ#lúõmœùŠ—¡â§àÑl!ñK„eÐÆftbŒ«®¹Ž­[ÇÉà¤ç®GÐ&¦ÐI@ÞÏ¡T&oà89:¡"ožú¬c¸gëv®¸ôBX·žžþLìÚÿŸÿ)N>áR^óúÏrÖ«?Ì«_û[þáͯÂwL èròDÐl7Ú4ïYâ�� �IDATØÉ­·ÞÆÞ‰)n¾õWÜr}Ä‘ë<nºq/^¹—ï]v ‹VôÓR¾yÑ­œ°a Îw¾þMÒ¸Žk{ Ì_Du~/¥Þ.¾úµ/ñ/ÿwÊÕAƒñf“ýè©´ƒ€±Ñ=ô=,)Àd:™˜þÝ¢(Ì4±i5ÛÓ-ßÕZ Ý&IÇ™Õp´m{V,¿Ýn£E­Ú_*Òì´IÓìÙTP´]<ÇE$ 0÷íâÒ¯}ÅÖ=ÛÚOëí#š\~ɕܷe_ùÂ'H’ý|­FÀ‹_|¥ªGÅ4&#ÆÇ;¤Ê£TòX³fˆ‰±­¸žË†ãŽåŸU…_Þz9»vM0Õ¡»»Lsrœ{¶ìâæ_7øÏó^Ë«_{&;vÿŽN'd¬Þ¤§«ÆÖûîáºë¯å/x>–%‘Ò¢Pð±-—F£E«Õƶ%åJ ¥¤0ÙX Àwm††˜šš�­ñŸ‰F“þr¡ÊÌè,e¶™–å,_¾÷9í䥜uÖYì·zõæiÐæüÏ~ŽyýÿÂ×.üƒC6]}{ðr%öŒ“š:^.Æ59\Ï'VŠ(Ø;²‹µkV2´q;WýôüvËoxÍß¿Ž…}‹X´¤›þÞ;É{‚C9!2]Õ$Iè„^Ιµø'i hÇÆ˜L*�‘±Ä…aXÕ JBÜÄÇ÷Ëx¾$ŠÒL¥\£Ýê -ãŽ;žg<ݲó¨$fÉ’%ôôÔæfsñ×U<P)$qÆd™ÑG•2NfØp8'›i5l·³ýÂ0ÓX-•æX«9°ŠÀ¶K䊋)/8`øâ©;iŽÜ ^/~×þØ^mŸ;ëß/Qçâ±xVÓ4cÃ(µo€™Ž“=ïZgEd’dcÈÐ:sñøA�ÃÃYûÿÄôôdšª‡«VÁƒ=6Éž×v;Ëß3,ø¹g,,Ц€……%:@‰Œú§¤2ÿyòŠ” ,·€ëWn~N“é ɇŠîîah39éÑéˆÇ¥“ÃCGLM…ìØ!عÓ!Žóç[|p¶˜ò·r;Øív›F£‘éN»#ÎqDQ dNËí ŽMV®XÅüýèÔæŠ+~ÌG?ú5Îzռ╧ÑÛ—#ê´ðœF)’¸ƒ†f£AÎσ­™jN’ÏÉùEÇ l%F+”ÒHÛÃl<´J0ÒÆu$õú(A'Àr'h´¶òÒ3OdÍË8çœ/òÚ×^À›6ßÍk_÷2|ßA©�ÛÑ´§Úíàù.Ý]>ÚdíØÓ,븳4Q³ú˜*Õ¸¾ÄÂ÷<:õúTÖŠž$¸®C1Ÿ§Õ²i4§ÈûE<Ï'Š"|ߟu…f]/ƒ Àó<ǦÑlb Ï÷°„$ç¸hbKc[4“óŒQÔ''ZÈd}Ïu©uwÇ1•raI­&žgÓn·±mÏ÷JÑj·ðüžŸÇr<Úß–ÄqLÎÏaR…#Àó].ÿÞX¿n«WB§Ád;¢X­ ”Áµ]‚ C'î°cçNFöNàæÂv8ô°ý2Ä(ƒ%<šGX¸N>-©I£€‡¬¥·¿Ì]›6±ãŽ<óÔÓajžú®úÑ~üÇ^Ì9ç~+n¾ûèxÚšƒØô‹ëhl¹‹-¿¼…úè(Ží#Y´rwoJyöÉ+8îÔgàåŠTzçóÓßíâÍ|;/=ãÿãô7<“wÿãYŒï¢àyìÞF}xœÉ‘In»ù·|ãû¿áô³Ö±yã¯Øo¦wárš£{xÍ›_G§1Êà¼>Âúq˜±.sy?ŸI7ä >¶í`ŒFcIzº»é¤S““0 ŽK)ét:äóy¢(¢Ùlâ8žç•±¢ƒv¥ ‰NñŸ¨÷| ®ÏäȺæ 1òÛÛùî}JÙãÄ—¾ˆ/^r?¹e#§$(w ðùóÞÍ«_r"Gu -¾uåç F,êáºëÎêýªTjÌýuÚ»†w°úÀ^R Ñn³ÿšUô íÇ׿ý9ö[]ÃómÚA‹‚WâÚko ¯Rà¸ãŽg×®û £ |Y±¡Ói1hŸýlÒ(&Pé´c¹"h7Èår”ËC™Î°1ضM«ÕÌXáFãH i *¥2Ff’&UèPO3Ç–-°]CjZÍ)Öy8œò\ö OD …ï|绘×w o{ûûX¹ÿRÎ|Ùó(öv1zÿv’Ä/å°\MÜŒq\M³ÕDè„8l±ãþ{©T ¼÷ݯᤳ>ÃE~|ãRÞûž÷ƒ\|ñ'šßK}r  †Z)¤´3¶ª2ÄqL>—±r“$Ó•MÒxTŸœœ¤ÕlÓß?Ûvð\7'ÑFE®SÀ²¢8F)1ŒâMoyˆÒ´°|‹Ì•ûÉ¥±ªuÆÜŸÑE›‹¿Ì„fFwÕu]lÛÞgƒÿhŽ/3Gñ$‰Ið|(>Hêá&bi õÔÛ(•«¾?g^õ)…Äòª”ço@H¥©my5H‡Bï!!÷!Y�@#‘æ*õÇ*Òô)€}ã¾Ìþ”Ê�šF#+âæÀ™'6'i­g;·æâ±¿¾RÊٚ¶÷ 6Ø PÚlfÀêÐ}4y$,]úû†TJe¬÷©)¦ÍçÐWŸ e«h¤n…ipU<&ŸÿX‡"¥NßóqÊ¥l27÷[>ιÐà8)]] öìÉ15åÐéXñ\mLfèÜn·ÖÜuW‘‘}}’¥KaÉ’Œ ñ7¬ff+î´›fÆÔŒSÆÆÇèêîÍX˜NÂÞú}Ùs8S{ ›6ý–¼ïk{ÜRÎùðkh5ÚÄqŒR†Z­Bt:°*-ÛñÑÚ¢ZëCàèßq1J`¤`lbŒb¡F!_FÚ%ÆÄXÒÊ[©v€ãµˆUÌĤâàCVó?_ú8gžù>ü᫘šÚË;ßýZ ¾M«]§ÚÕÅÞ] º»K$´Qq<ëT©h \'‡JCÂNŒïû¸®E'(¥QJe:¨iJe’�qlcÛžçS(‰ã˜ ã8–åL_C3ëøíºþ¬¾¦RY{¹c;XF`ÛVÎ#:í6‰%©•‹` ·ß~]Õ èD!Žg†Úí6Ý}½³.ØJ-lé`Y’tZŸÕõ=”!I•A aiáÊ,ƒlÛÆÖ»ïâÕo}3& èÄ~ÉG …´${GɫĉÁó<6oÞBÐ1´ÊcÙÊyh`Ûàãù®#BE ©XE‡V="h7¨ôr°u�;·Ü͵ßú*«:’Þ•‡²dá|>ýã¹Ï:–÷½÷=¼ó´·óî׿ˆ{nº™dr Elذ<‚üÐ|~y× óZ>øåÏ¢LÛëáÝÿø.žwÆ \üŸ°tõ"^ùºSH,kVÑœØÍªåÏ€DÑŸàÚs?ÄÙy a½ÍÈm›Ùôƒk9pÝzz‚„žB!*ˆ0 Š,9¶;Bâ86B,Ç#²,Û& ±J T`‹ÌŒÌó0Æ$ RJ”R³@Gš¦ÙȱHµÆrlrŽ‹g,’$Ás|¬T!uH%çsçõ×rÙ·.aAµÌK^ÿjXºœÅ]Á¶ÉIl¯‡¿ÜLPá„cŸÊ[ÿá œü²“Y}ð –ÎëgóÆ|âcÿÆyÿï½Ä9ÍÊ5‹)V|N~î‡yë;Öò÷¾Çxhñ¯çüÛï8ï3¯Ç–cõIj rl¹g …\Ž®j EJ „Vd ¸Ïq)‹x¹õz£`rbŒ¤T*3Õ¨m‚0OW­F>¢ $_,àä|Œ€DÅ$aL¥PdRk|ßÅŠNØÆ ­VmÛ¶r`Ò&hMÑÛS#!ä›ßù^¼ ¥6qÅå?Àrî¸g3§v2®9€RŽXíŲ–'‘–ƒe9¸®Mö}´N8îÔSxÏ;÷pÎ¹ßæ›^Éð}-,ËpÁŸç}ï•J ¶©TÊt: ž—C i[ËÁu=ÒT#¥AJR)R ,GÒÕU%ŸÏOßC‚T¥Ù¢‘¤QˆI)@b®ƒ‚(h`L)mSØŽ! CäϰσªFƒ{Ë.»,“2yþÁ…Â#Ù/s…³Û?Ò}í1f^g¶¸ýs2&Ÿ÷ßÖ­[ǪU«(•JOж߇•+{G ÃÆ|^P~„÷wšÂÞQÃä,Y Õª Xœc«þe'î–[¢Ðw(B84vüŒpê^„t0*¦ØÂòö…Ñ!:Ø¢CŰM9®þß‹g ““0:j‚ ÙÀœrÎë7ÎÅãú¥iÊèè(×\s 7ÜpÃ#Îûûb¼æ f{­5år™µk×rÐA±|ùò?i¾õx‡ëŠûTëL`húûÿ¸ýj*c¶gÿ^¼æÏŸËß³÷„ea•» i@»ª¹â> V ©IQ–Á8ö¨ú…ãjµ„ÑQwV à/ ¬FQHtÐZ0:šã†<ÆÆ$6dÒO¿½ÇX•R"DòI‘±S]×E+Ñš©©:…|…‘‘al[Óh„LŽ¥|üc±ßþU>tîYŒOÞKH|¯J¥‘G!BfíÁ==UŒ²Ò' 2¬N§I¬a¢Ða7çãå\lÏEO·±Š|ߦLÐ?0@;°HUL©”CkI³¾ƒ®žåüû¿¿›>û\pÁoˆ’Ïò÷½×®&×wiuÚ¸9E«Õ¦P(â¹9Z­6Æ$˜ê@'l£”"ީ֤©"M<Ï£/ Y›¾¤iBš(¤°Ñ *•.Z­6ív€ëzHa#%ÄQ ff2/ÒAµíð=ËDQÀÔÔ$]Õ –€½#£ä\›r1Ïøø(N®ˆíHZí˜\>G­VÃõ¼u·I´³ žV Œ J5F(”Ê´l»KeÆGFðkdÔæ‡—~—C=„B_­©QB‘)E1—Ç6КšÂ.{÷L$ ÃÃ#D ô (•’xûxVÛö0&!IÛQx´êžï³wb' ì`é!G±tÁ¿ºe3ÁxB;¶¹ûÞ=¬Zµ’7mx*]x5ûM^õŠ#™Ìáô”Ã3g‚Z•0WäkŸù4/|Ûiˆ\‘x÷ͱ{P»'8ý5Ïâå¼’}è=Ô"Z»Øqç$Õj•Vc/Ê(>sÁgxÖ Ïâi/~ì&šl3>:É/¯¾Ú îúÞ¥¬>x?"BÒTã•K™yT¨˵1IJ’*Rc°X®ƒ”NÎ 3Ö™™X:Ž3ë^Z©T¦pEª©Ñˆ0Á±$Å&ØR`ç\n½á—\ò­o²fõj^òŠ31ÕnD*Xºf%×\üZÅ%ßû ÷nW¼íïcç$ì FøÌæ¾ûïäꫯ¡»gˆb¹Ÿv<Eÿ@/§<ÿüÇg®ä²Ë·òÆ×) ”øÖ7¾Íw¾ûsÎzÅzèá„Q|®LÅ©P&¡Õš X‘äsòžKlB„™¼‡mÖ¸nVL÷t÷`ÛîôDÑÇ!¶]Âó\ÚS š&½ÝÝ8¹–”DQH’*¢$& CжBa¹’8éDmì‚CW_½}5|×!I; }ry—{⦅HÁÓ_I¾çÖ_ÿ†{/þ%Ÿÿâ üã[žÍþ彄{÷ ¬— Áµ}t2(ºìÙµ‹ù‹{Àuù๥géb¾pÁ÷Y¸`Ší;÷rÙeWñÚ×N¹•²M«ÕÂ’nöý…ÀžB²ÑzÆ™^bÛ6qÜ¡ÓÎØê3&V–tHS ,˜GHlÇÅ :Æ”A©ˆ `;­Ö“XY`˜œœdóæÍ ?*Öj¦Um°¬Ìî¡ 1·Ô´„ÄÌá ‹ãáö›ÙGJ9­ƒû§·Ÿùÿ3ÛÏ0FŠ)2³}š¦¿wN321䜲¼l?¢ëœËå°m›–,Y2ËbÝ·AºlµxQ6ß±êuƒç l;+ÒþÐÍ4޳VC­¡Ý6„a¦Ëºxq¶­”0ØžÏÈ“uòžë£8pZÇ´v]K8q;:žÂr xå¥X^å ¾° Ò&VÒ¤èVÀ)ͱV ¸ZgÏh£a°¬Ì<j_yÖ”‚0‚ •ÊÜoõÄÞ'šN§Ã¶mÛ¸õÖ[qÞÏŒ>õïåðGr¬4Mgó럿Oþ8‡ÿ¹œ<sŒ ¸øóš”3sŸ™<üp]$YM™þÞ9ý¹9RŠîîn|ßghhˆÅ‹ï9ßq2vZ­–åö(ÊòóÔÓ¿éãÈÄŒgù¼¯/Û¯§gîÙ™ iA± Õè šHÊØ¾Ù‡KñÀ¤fÎEð‰õlèêHÉ㬆aÌÞ½m¦¦ÊlÙ’gxØ¢RC…?ãø×ùÌ´ÿÛ¶”™¡R®˜C§000ѱq�¶Ý¿‹žî…ܵe Ÿøø…ôõû|ì¯ÏŒ™ê úúú­³pÁBvS,U±ìŒ‰aœâ:6} bâ˜=#{(WŒ”ª&&§ÐBàxÆ­„Ñh×q]‹4U‘Ç÷+4[u’hŒJm±‘-ìÀþœÿÙòß_¸ˆœûm&ÇÏåc~?¥‚F[Y ´ã—¨Õª@Ö:/…Ñ’(L±mß33]ÌJ‰íZÏ߆ڃV ßñÐÓ€šÖòù2©2-p=—œ_ÈÀ³4iš±J1Žm#ry¤ÉhÛR‚N|\Û¦T*Ðn5h5§X¹z5I°ct/eß'J#ŒÔ¸¾G'ŠIu–¸-cáy6–e#¥�‘‰$ Gâû>¾ë½]U¬|Ž__{-IØæèçG85N3jãVs´'”Ë’VL­\Æ÷|“Lì%è@­KðìGÚ Q³IÁÎcK›¨¢LéD¸˦§Z£D”+Ñã D¤ ×pˆªò/}•»o¿‹ Þ檺àà5ƒüýI« I9î…ÏÁ;t-Œî¢OP¬ôpÓϯæŽû÷òÑóÿ‹æÈ$jWsßû~« yûéïgÐŽ¸é+ßàÇS“´ÂqÇ"Ÿë%Q†{ï›bùê}2ÏäÆ_‘ëªâ/_ÀàüAN\½’×_Ïö-·3µãNV¸šÚªý Zƒ$dl¢IjÅ|…½ããaãy ÏÉc¹6–Ì�Ô)ˆ8ŽÑZÏNÚ:̸l„‘¶e ‰"ˆb$à/bšu~öÓËùÁå—sâsžÅ3N>‰¶è¶ëTú2¯¯—¸ÙÔbÓæ-¤ø”µôìhÑžˆ°T“þ¾.n¹õ.Öî·žJe>Vl36¾—³^õj¾séÍ8Ž!ŒË¼â•ÿÈe—ÞÁSŽ^È¿þëÙLNŒ!„¡¿(‡eËqé%w±mÇ=Ô½šf= ÐídE«•éÏb˜þnI’R(dL¹ èg` P ~έH“Œž¦1qbDÖV/¼Z'XŽÈZéÓË‘ |ÛP­–ùåõWsäi§áTKè0â%§¿œ/~îWXN‘w½÷Ý\sÝå<ïÔ ì¸DÄA‹B¡ŠÖš¨¡À±hªÕ.T¢Ú-úz÷c×]w°iëÍœñÒ3yåËÞÎè®I®»æ›h3Å’%KPÉ8qÔ P( µD +Ôm2Ý#¥IáºlÛ& QMß.–´l;3±²,Ù¢ˆÐ‰BM˜„€Áu àHÂNB¥TÆö<JÅ'OÅ(¥¤X,²lÙ2žÿüçS¯×UaÖl6QJ‘Ïçg,„m·ÛA€‚B¡@¡Pø³-ñA¾ïS(¶01&[ jµZ“™“U*•‡,þ´Ö´Z-Úí6�ù|žb±ø°ÅŸ‚N§3+ïR*•þìw˜[úûûšî@yr ‹BdÅV__6!Ü»î¸#³lèê,]*ð§;Ê„„‰ ömÐj|_ÐÕ•cÅ¢x]O«2$ûï/dQñ>y‰å–)DѼÿRâ±›©Û>Å¡c) Ž”O Q+LЄ¨‰(”ÁŸs7zL~v©Û1ôöæÍËòO hé1ô4›vdÄÐÓ-æÚŠŸ°ß#{zz8ú裩V³ùןËIJ)ƬtÀL¾|¸ügLÖÅÓjµÈçóäóù?›ÃÛí6ívF¤Éår‹E\×}X`5Š¢Ù<^.—6‡Ï€ªõz}ð-—˳Ĝ‡š‡´Z-Ò4Åó<ŠÅ"¾ï?ä9ÍÔóæÍ£¯¯Çqö™œï8°º~}& 06Û¶=�ð‘ÉÔj0o^¶ò‡ŒÖ¹°€*±¥­›x¦E½OâªÆè¬ÎY×ê\<q¹ðÁæU““ °jLö§õŸþ¬Fð};Üx£`Û6ɼy™QÝ‚<iˆ@-¸mÛ³+cq#-‰§4A'Âh‰ïçÃC«¸ûþ1Îÿì9æéƒœõò3p]vKc[%¢¤A­Û&hÓ 4µ‘Uû/gpp£%óºˆ#AÔùêW/fÇŽ{xÇ»^GεètÆñ½­v�J¥<B‚¤“µÍ¦.`!U›*®°è™gÑhÔñó{ÇîÆõyË[ÞÌ¿»K¾u+ýµÿæ}ïÿ{æ-èfûý÷E.¾—› ¥ I¶íbÛaÏ®,FQ„mÛøù<A³Å=woeݺõt:Ùâ8Ž\7Gär˜’-¶J</e©é¶`ƒmËé÷tª‚ ƒJcT‘¤ ¶”ÄZ“Ëç!‰i7€¦Ù®ÓÕSÃqÆ'ÇèíîÃ÷=Ò$E1mÆå`Û’Éæ8Z+\kzÕ×qqÐiBTúzè4êÜ»yÇmxætßEŠ›sPŠ4kS%™lÀ¼~îÝ9ŒcA±”çO*ÆŒ“ËyèHáziœ`L€í¦i54>í ‚ÈCS¢X*±åÆÛøôÏeEo%Õ*íN@×þ%Êk9æE§à,~{ßtÝ×fÁêýðb ®óý¯|™Óׯgϯæ»?¼œï]}3KôrÇ=wS«æÙpü‹¨T R±p 6;wî¡Ò=Èe—]ËЊnj¾Ç7?÷%\–._ÂÂÅK8øè§áî¿?Ë>€å-áÎ;7ráO¾ËÓã“Z¸„Z_•r eI@à{^Öo2mT DqLš¦”Ëe’$™ΰÎfVÈ3c/á: ¶²°´ÁÕdŒÏ0æš«~ÎÏ~ò^~æK9pÃ3 ›ºzЩÍþK—c…1»·ïåïz?gÔwñÒžÆóO~-tF)x¢D3:6…VvqñžŠ¥2S’F=åiO;Û®ñãŸlã™úøð9o¥«»L«=ÛòÉ‹œrêsùÌy?æ’ï^ÉQGŽ-\‚ MÎøŽƒ©5RXh•â8J)Â8š\¬i­-C'ä\‡R¡'¤iŠÀ&µR@kƒÐ Ïsi’Ð ZxÒÆw]„ À(<ßfdb’0î°û׿¢gpkÖ®ã]ï|Ÿ>ï›<çÄS邉Æþá5¯`åâeLìÝ:Dëˆ4ÔŒ¶¸üÇWðö7ÎÈöí Ìc銼íçsÞ%¿Å-ÁYgœÁÞñÎ8ëزÎèž;‘´°mƒÖ ßÏ“IÇJ„å!¥Àç¹Èi½X!Ä4‹PbŒ˜ÖÀ´I’t:IMéYe2y�•hl+c. ;(€Ð4Ûc8± ž,ØêÌ5X´hÝÝݳÌÍG²ßL‘•¦)ÅbñaÕÆG£Ñ Ýn#„ T*ÍŽÓ·ß °:S`=\q¢”¢ÕjÑh4˜‘ЩÕjXùÍfsˆ-‹”J¥Y3»‡V[­¶mÏq¤ýp¦xÍårO:÷ÍbQËeEØø¸¡B§cCC¹,Èå²ø±ñL‹5Š2FLw7ôö>ùÐ8¸äŒ‹EŠ |žTýsBâäú(ôŠno¡n'Øs-Â+aUæãåæaÉ'FÀhE5Pa¯6éŸPðﯧrË^\j5C­¦R“9K;OÌ)‰ŒW,jâX09 JÍ!ªO($dYT«U;ì0Ö®]ûˆöQJ155E†!Èçó›ÿf˜¤aÒhd‹ÞÅ‹x>DÌäð™EÛr¹üÀêŒ4Adzy¼V«Í«ض?óÇ1“““³Àj¥R™%^üáq„Ìx$IÖEY.—X9ÖLGÜ#aÑ>¾À d�ÏÄD& 05•É÷d÷G–¿çÍ˶™kÿÿS!—ÄXt¢…!̺äö¡\fŒ"I&‰¢1\7ãæÀÕ'xa£»;[GžœÌž»0üß·ãÏVÖëÙ³Üje:ÊŽ]»î¼ÓgãF߇g>žö´láäÉFxxLÆ¿b©‚6&cÕábðét U.Æ”Òܶé×üfÓÝD!|ò£¯ä°#d÷ȂΥÊ<’‚ÈB Nàpû–]œ}Îw8ú©‹X±t9µZó°{xœ¯_|%¿ûÝV¬(јTtõÕH:!½5ŸNP'Ž#¤ÊÚ-Â$ÄA+¢T¬§‚F3Å÷*ŒìBÚÐî4±]ƒcÄA‡sþù-l¿÷í|þ¿o¥h€÷¼ëuH»‰N;ŒN5(ºð¼aÐAé láÆ ÛšRÉÅv-Œ†‰±HÉŠïû$Z«“„Œã6ÆèîéÆMF@Œ±-›b)™Î@5eefBKÒ8Åö|§€‘>ùŠ%=Ú­˜mÛ†YºbÚH†G÷âxeÆFCrö½ýÔªE4Ûvð "#ºØЧ1eÐbeж ÒÆ:T䬈[»‘®®>–®] ¢Ø�� �IDATI¿VAhE3‰¨æ»q°±m‰“7hÕ¦99Lkb7. Ã6yÛG·A( â„v:lËA"°=‹X…LÅ1åR/¿Üƒ®ýÎ÷øÁ×.b@*ò„h7Ç ÞüJnÝü+”=üb^i/»ïÛFѵ©ö-àŽÛ†ùÍ­;é:\ñíÏÿ·g!ˆ8þÔSùìgÎçS|œË–n£ê#˜b™CkÝ|ý¾@qÿ>Î~ÿ{i o'i·¹÷·›ß¶“Ûn¾ß]ÿ+º*Uö?êPV{$û=ûT¼ÁùÜzÕuLîaÙ’e q) IPÍ娇!Úu0ÚFÅ6I¬HTE j,iaŒ& Û/O!Ÿ'Šc¢0"NR$¦æåiŒãøèHóƒï^Ê-oã÷<öRRZ¸å*Q¡s‹–¢/þ÷øàGÎ'Ò!ï{ÿ¿põÕ×ñ_Ÿ}Ak'N¡Û±ùò×®à™Ï|©€Í¿»žÿüü×mðÒ?×NùÁgþü.zzsìÚqŽ”„6IÇf¼9ÁkWñò—Å…]Çß4Jßàþ„ÍaüœA"1Z!±QqŠŠBò¥Z‚(ÆõlÂVßÍ#´…!ŠT¢ð½:58–ð,¢¸ƒÑҲж‹Rd"±=WdÌpc{ -XÂà~ë¸þª›ù§³¿É›ß~/{ÝyõÏà/=…~÷ûظñ^~öÓ_óoŸÉ‡¬âsŸú�ž£Hm‹®î¥\ÿÝ«ùäG¯åÝox ­ñí¤iŒÎWÙÙîŸ'8ù…§rÇ–;9â¨ýYwÀÁœyæñœpüÑ”ªe$!FÇHìiF} &D’ S B#…Cš¢D#'çŒHË&Mc”ÖØ–Cª@›Ì`EFc°ÒCMËXÒ±%J§X¶~RNX¤” …G™Ì ¥Ri¶5î‘°6ËåòláÌ>0Î,®ëΞÛÃCJ‰ëºäóyz{{g ¢ù€‡ûôœf¢P(ÐÕÕ•±ÛÁöª¨}R––,…þ~Áؘ஻4?ú‘¦V P. †==‚rùÉ«Ý$D‘œ¬!ML„ý„Sÿ'ÅôDì|ž‰;¾C§±™t¬®Þ§âûƒHùø'…¦)ÚÄ¢M)!)Ì«Iý€Ž©V­c Ef¬R~B„€žÍ¢E†ZÕÌõûPd¦½Î#¼·]pŽíîî~Dó€b±øˆrøŒÆëŒÄÚŒƒ1#í3ó93ïi­©V«³íù3Û<Ôw) ôôôüÞöÔ€rfû}`°³Ž’JåPõÁï9Îß&ðòèÆ7‰6˜�c&Ș¬…}æü´Žhµî¡ÓÙF­¶Ï›‡e¹s?ÜøÌU*) SS0:š¬ùü£×DŸ1£›˜ÈÌè6m‚ûïÏôÕ•z@zr2G½îQ©HÖ¯u¬\ù·Û$dOµ´2¸žG±R èÄx¹åj™ŸüôgÜxãM´n'?÷$–/œ {†·a„bñ’¦ *•~*µÅìÚÙ F\ù³Û¸;œÒ½”ñÉ”ýø êõ�,]º„OúM|åKWòù ¾ÌÙü ca‘*J~Ž$qñe@Ù/„1nѶ¢¸ƒ° a!í"EÞ÷²é²®#E@_w‰¯|ùžqÜùô§¯`þ‚ƒ9ýÔ#iMn¢·{€¨cˆCI'8¹ÛMA„t){ÝmÐ(,¡–ÌP£Çu¨·:ø~ŽFs’b)Gß@{FvSoHrù|ÆF”6I¢h4êXÂAR!4I’â9Å\~ZG`YA'¥Tìbã­¿dÙòE $“Í:Žïa[y–Î'_Î#µã;tâf»Ž´2WHtšéò›žZ­(¤¥¤í @¥ÓVäòeoqýO~γO= ¼\ƺŒb#±´OÁÍ!uŠgbÚ¤qLÎ1 u—ð,¨DlãÊ*(¡’Ï‘F ^¾H§£¸ç®í”{\ŠÕ"‘piÄP±‹´wîá§~ƒ-×]Ëò‚ \.±hÍ*Önx:ùƒ×sÄúÕLÝ{—}þ‹¬=äØðt&ï¼úmwqåæïññó·Ò7ßá £×òôßÇWßÁŽÍE¾wé¥ÿ?{ç`gY¦ýßóö÷ô3gzË$“^H!MÐTÀýD×]ËZÖú¹¶µ»nQW…]uUìˆ" Jï $H€ô ¤N2}Nûû|œÈ·nqut®æü1çÌ™÷}Þç¹ïë¾ïëâ‚‹Ï$ß–$ŠÆñª5L;KXq¸ÿÙüÄ£|ô³ŸàÙê!–H²°÷ ’BT‰xæ® l¾wWù{,zbç¼ár¦Ï\LÏe}Œ?½“ï]ÏbMaÖÊ¥¨„hªŠ.$q`¢‹4"ò‰%xnˆï{%&Ž<Ï#›ÉR)—ðü€T2C„ Tsiïì%˜%vÕâÎoaëÖ§yãÛßÞ”gÓ{Xºrª–$tF¾Ëo`ÕªsiïËsíOîàþNÇ0Lžxz'o¸bç_|“¥ƒì$—^z:ïø‹osѫކ¦%(Õ&PDÄßþÍŸpÆÚØ&t·Ìdrb„¡ãGÉf’”Æ'¼:DNµÎ¸€÷½çí<°þ�öæwñÀýñ*Bññ\¡¨Ø‰Q€ŒBb[5M@£�q�šj`fÒ „¸õn,ÑŒåJÇ©ÒÖšcrì8– DÅTL ]EÈ5ËHeá%Npï][ט>w)Õñ!Ž—ÇH¼íU9û§ž.#ÃÜ;€E@BM × ˜1k6xì‘gh·2¸~¥g W-âÆÍœÿš‹¸üô—±÷±û¸ñú_ðžwÕ«{¸ú»_£­»” 4†¢ÄÒ'ðB¡ #BÙЕÖUÕ$Š$ž/°9! ŒH$sÄA€P”FF‚n Ia5~† ]ÓMâ8"Ì ”˜Ð^‚áo¦ú{%^¢Çqضm>ú(“““ÿ%!E}}},Y²„þþ~²Ùì‹6‘yi'` ©€, 4­AžærâD ¹\c¼è%í2*Š]@IèŽKÕN"Ô—±* ÍîÁjYEÖ¯Q+Ä?ö Ê1D…SH$§¡ªöï—�D!Q§HÕç-‰–ŒI†7’+!4 ¼PÝÖB4’IÓ”(ª˜’÷{á·!_lð<R©ÄÞ½{9tèÐs1õz8ŽÑuÖÖVZZZhkkcÚ´i´··¿d ›¿›ûÏ ù«©kñ?…i6“NÏ& G©VbÛVC&ìE)c¢È%Š|Tµ€ªfN¿SxaÎèz½Œ”Ë’8”ËÐÒòÛ«®Û f7l€¨T$qìbÛ>RZ@c"©©I!“Qèî†9s�ÌÛ æ9µ£äösµ( ™˜§··›¾¾é´´´àº~„©TžJ­Lq²†P ¢HpìÈ Š’B!`Ó¦-Ì™o}ëÅtw÷R*•¨V«D±$J‘ÍfäSŸü9sOúkO[‰VÒCSS„‘N¥’˦15Aû@ˆ®¨Š‡ï{˜FŠ(@Dè{DQ€Ä'ßÞJ^j|åKïäïú:ŸøÄç˜=ãï˜Ö¥‘IØH†>¡ï£Ä‰DMS|IÕ°,“ ¬¡¢ ]Ó01t›ÉÉIÜTL,-C,#Ú[-E‘ \éQQ¯×éííÁó|!Qè.bPG×4 Ã$Š}&+„G¬ºd›md䣯!“•aú§7“ËT a$pk‚šã`˜6šj¢*E‚7ÆbbC"Ä11>‘'±M …»¯ÿ9]=½ôΟOàÕpÂÅTñ#‰¦ÛÈ8¢^w1mU±8rø H•ö®iè&ĪMl$JHÚR¨WŠ #-Ý@•E³PÕ$©DŠo{i©òþ?'ÉÐGC[>“‹gÑÒ3fB½F6›'³úeúNbËõ8:ãrÛú»Ø3®“Nüà'ß§m^'㻟åê›~Ì¡€Î¼à³øÁäÞD‰D>OàL†!¿¸ç>>ó‘‘•:v9$c™¸“Xv’}{v¢ …Ùrí«±hÏ~î¾å6>ýÞó†Ë.`ùå—жòTú¥Ãñ]ûÕ2³Î?ƒ@Ô‰Ê!M±BUTjœšKs> œ Â†v aÓUòƒ;)QU [Õ^ 5 IäsÜ{ãMlyl+ozÇûf‚u罕ñ:¼çýçñÞ÷¿“T2Í¡Ñ\uå7X²ø\Þð†+øØÇ¾Ê¾}�¬\–ã7–n"B±Ñc,[>Ÿ%''Ùñ¤ƒnÔ0 sÎ]À[ÞrQXâèð(©d×u"<q€›ÈȧT*ž0‚¨£i)¾÷½óò³>ć?úÞýöבРü($ô¼ÐE ‘*8N ƒ— Ѽ´©¡h6cãÃ8A 3‘�¡¢k ¬æ<fœ¢è”¨©1B‹0Ü" Í@ja@¡G©ŽvöæÇ'‰3*©dMùvðë¼éõïbZKžUË—ƒWg^ß4V.9Ž ƒWM‚p˜½ —¿âÞúþð×o¿„Ë–€7ÉÅg.á;×<Àß¼çm¬¸æ+œ´ Ÿ…»’×½åµ|ìdÃ#¸ðü³<z€éÓ:QP‰ŸÀ Oh'«ønXÉšï£X6±ï¢H[­â»éB®ar¥ë(ªNèû'$B4MCÓ' ïG¸®‹BŒ¢¨¸NLsb*xx>ˆÕZ­ÆæÍ›ùæ7¿Éàà ™LÛ¶Ñuý9£ hjœzê©X–Ekkëo¤{:…ÿ9Tµ¡·–JÁ̙ʯ˜QýòõK^;Q(`5!U oô”Pb]/Ñ`T‘FOÏ#ÓŸ‚gn"<t?5E¡b¨IÔD÷ ÞmjDû¥½o ÆÇb††â+/¼„…DF>žoàyæ¹:…ÿ5\×ehhˆ‡~˜-[¶0>>N¹\~nÄß²,z{{éííeÆŒ¬X±MÓæÂÆTÇÞžFUMPž¬ãTŽ£Ñ„¡5ƒP_à@¨áKEBhhZ!ò4 mSçü G¬6 Ò-+ PAcŒ?~ÛÏitªîÝ ÷ßÅ¢¤¯/¤¯Ï%“qOH´4ˆÕÎΆl{{£ùá½¢åó9¤„Jµ‚ªd2Y4M'Œùl†ƒ‡S­–˜6­@ÆÔ¼€T6‹fD躉¦Œñ<Èd%¿XG…|ýk—‘Ëi9º ]Óq}Ïõ:nPáâWŸÎÐð³|îïoä[ßjeÞ¬v2Éž« ©TM3‰âK1ª š* ”˜ÉRS7°ª�×õBáÈÀ^2ÙNÖu:þðûøÏ¸òªðå/¾‹á‰IÒI ©dò6ž+i8e©~WÐuÃlH Ô2 :¦™¢ê–iÊç)«ª…[ (•'é›=ƒt:ãÔ†RšÄK¸(tMÁÐ TU! bM! Éd†(Ѝ»uZڻعksž„ã„x~EQinkÃõ‹Të1#cdÒ9¬t–„T0lÓ4nä(B £˜ÉÉq„¡6ÆŽŸXÕ1L-”xc#<½ûIÞþ¾wғ蚉:B†‰&Ü0 Ž%ºiá¹ÙB3VÆ$ßZ`×Áqj47åqëÒ´šFÅ­“´ÓÌš9?òpŠuòÍm(µ:?ýç+ѪFBaõºå¬ºä,’³:¨¹UbC‚!#‰ïë¤z:Y·n7_yO?ó +.\‹»k‚¹I[[›«oº ?!iM§øæ>Npø(Qy’JµÂÑCÇ,Mpíõ7ñê Î *Õ˜8t˜¦|J–´@1ÈgrT‚:ŠKÜ“cþŒ5Ì]y2Ûo[σ7ÝÂÀSOpÁ;®`éůdbýfžxp#!ó/<ƒdÂB†8>v2‹žÌ¡Ê!TÂF(1B ô ‚t6ƒëùOG¤l‹`²H*ióÈý÷³{ß.}Ýëè]°€·½ëýŠ ˆ$ßþÎý\rñEôö¦›˜ÄQ¨rÑ+/ ж?¹“Î.“׿þ•ÌšÓγ;÷#TÕöi)$øüç?Âö'žÅb,œÉ¢Å½‹IÚ*ÙŒAÒ6 ½v"†FÂ2IÙÅb© ,[b¦õõðo¼•/üã8ÿìÅNYˆÐ ŠB§QHH¥“¸qH)Dª�ECÑ}ÜŠƒ®ƒ™L+ a,P±¡LÓ •ϡᑶ¨Ôp]¯Z£\.âÖb©rxpœÛîœâ`©©l¹ãvÆ»•0iqʼéÜð½½ÜyË­üèçÛ1šÒ,›ÓËËfO#i„4÷· 4uÍåï>ø6.8ïí\õÕ›ø‡¾‰™#5–.^Æ­×~’»ö`#™<rª2A6àÛ_¿ϯáÔ')471YžÀ2 bÙ€Peˆ©j Cb7:We aˆ[e|l’l2Ågö 3íy„ h¡†"TÂ0n\=çßL¤+TªNÃà s*rx¾ÂÂ&¾ï“N§9ù”“9åäSèèè`||ü9r5Š"º»»™6mÚ¯5 ˜ÂóÈ;ž0µúƒ®z A,5é£á£Ëø%Üç¡�6ŠÞC²ë,T3ÃÄÁ»áèF„Ì@kM¿¿|K('´¬ã©‡éyOÜäsr� ó…-2IáÇ-Qs;)ä;ñV0•ÜOá…z½ÎÈÈ£££�̘1ƒT*…ëºÄqL†Œ³oß>vìØÁþýûeõêÕô÷÷O]À)<oP…N’¶o —F!2 Ó Ú GàK$uç(Õê3zަ¦SÑ´4SÓ!/dH)°í3gÎdÁ‘Umt¬ž°~ù­°{7Üwø>Ìžíqê©UæÌl6ûœÜƒ” ™d²1]6Õsšë9(BÁ¶ " ®S'ŠëŒÑu¡HÆÆG°, 'Œ14 ìãº>Ž3::HÇ477sïÝ·³yó¼ëóX½â$ÆG†He2 ÍVÃLpøÈ1ºzú)Ujüå»ßÇæÇÞϧ?s _úü»˜3»'¨R¬I&=êÞ™LE P”†¶ªšXºŽHIß#Ž"â(ÆÐ5tÃ&F§X¥ ›¼ï½ogï¾ýÜuÇÓìÚ{Œóû0S:££c$l MO€´RÅ2TÕCUB‚0 C<·ŽªZ†EàÈ(‰i(LN6¾W:•äо}èZ]Ó±LMSñ}]Wˆ£7dÔ.êƒBS7†iQ)WðÉÎ=ÇijžA&Û½÷Üμ¹³øäs}(j M‹Èd,’i‹DÚÆÀuBâ0l´á‡Ó°QTA,ctUGÑB×k”4“ÇŸ|Œ…'/"Õ’§66J²ÐÄäD…XA³ð=)¦¦¡É�ßuA4Ô5;ÃégžÂ£_¿‡m;vqáy§Q©’Ëçq«5\ßkà±@AÒ\èg¹æËÿÄÁÇ8}Ý©( ƒ5¯:³¿…by_‘hBâi=(àîÚÂ÷¾|JœæÍŸø mßË–­yÏ»Ï!<|ÝÇùÅæÇ86Râòe‹˜<°‡›n½°VçðØ8#Åþ‰'ÚÏŽ§žæñ;o§UÆ´¶·£'’,˜¿€ésfÓÒÛAÁ+O`7ç)»u²¶ÂªË/bù’E\{Ã÷¸æ;ßæâ± ¦_x «ó6üì_);e–]rBÑ XFO¥+qüËÔ1-EU4Ìm4M£Ti˜ÝØ'Äèa'mžÚô;ŸÜÎů~ÓVÁþl|ü6lº•G·>Á_¾ýo0”ª°QH*™l†b±ÈŸýù«™,-%™Œ‘Çþ[èn›Mq²HD•#‡÷ÒÑÞËIo|%šn j>µú0ªP.ŽÐÑÚC¹8N.“%Š"âÐ'Ž"4]#LâxB Q §>Á¥¯}kÖ®¦<y ‰™0A¿!1íš¡#‰ <„Õ(x$u•zÍ!©'Ð2 ¢ºOè Ìl–‡7Þãþ‚ÿõ‡Øx÷رŸIsèÐŽ Qs\ÇÃ÷<TÍ&•kÇ"ª¾Ä/VÐ[RìÛ½—¹Óûøó?Mrô`™õ;(>Þ»‹'gèï¶Q“1q­FKç~z÷�^-æ`®úòu¬\´„Òž},™ÞÃ’Wž È $mØàz¨š`bb’¦ÞnJã#¨šŠfèÄBotˆ«*H5 Otm7:ÿU!Q…$‘É ƒ0è›6 M7Ð4뻄a€ª4:^…hŒ16^+¨ŠŽ¢iº…®’éBš©z¾Ã0hïhçe«_Æš5kèííebbâ9bUJI2™$—Ëý·®ÃS˜Âo›œ„„@„|É/+Xè©™"ãØ>âÊ(Îð# %FëR°  þ‹CRBè¢xXªŽ’hFQ¦öÌç†é´ Ÿ¨ª|AIL¡@&«Ñ\0¨•J%9e^5…ça -ZDoo/…B\.GÇÏ™= ±eË}ôQ¶mÛF¡P ¿¿ŠXÂó~¶V3Qàøøîa¬tA–D—= À+"*Ch^ÓìÀ²Ú™*f½bJãyɤ ­­Ñ©Z.7ÈÑßA�ãã°oìß ÀâÅ3gztuär扎Õ_æQ “dϱ‡!¦m£&µºC­V¦µµßsq½�S ;¡Ç9yùËpƒˆÁãcXv‚\ÊBS-žÞõ4w>s‹/೟ú££ÃlbD*¥r™D2žgža (ºý3úç²hÑR¾òå/ñš×¼‡/ýã-¼ñO/dùŠEèf‰JmdB¡L¢¢#ã$N5"ÖHtì”@ÆBQaH$ta’JZDT«Ô}¿ûÜGü¿\uÕµ|ìcA¤d°“j•™D3šH #®j¨ Ô¼¥R ÛÊb[)„¢b:šªã5„ªaÚEb¹BÒ´ðü†™$Š<\¯B"a�?ˆˆ#EÑÑ5ƒTª…Ç·䟿úCŽ9ÈÄX…8‚¥Kfñ©O~–æ…¼û]ÃÚ5ËyßûÞIµò,uoœ¦\7~,©U£†éMRWˆ‚ˆÐó±õ†Ó´‘0Š@‘1iÓ@HˆCÉJ‘£CƒœÑ…øõ*Iib× @I%-‚À%Š"2–F½\¤^©`Ùº¥Sój,_y*Í?ÝÈ~ôÖž¶˜ ”AŒë:èª ©ë(¨Xº…38Êm_º9R¤§»Õ—œ…c«¨sº‰bCÑȘ‘Êd‘ÉèÏÖs÷Ý?&Èëœõú‹é8ërö=ü9ÌL;9EcË]÷qÍm Ž‘J)ø¥½Ürónhä; ,»ðîÝ´ó^ÿ*ž¼Y™äéG6²jæ v ìåÀñ!¶ÿì:šÉì9³Y´òTz×®B(5‚ÀE×@Ìl抽›[¾óCnÿÁ¬-;œ´n-g]p[ï¿›}÷ý‚ùgŸ‰ž³8°š‘µ’ÄQUK‚¢!H! ã]Õˆ‰ˆC×±…¡íÛØ¿k'g½Ži'-�×aËŽ´ôd™6m7Ýv¦¡¢*†ÖÄãOÑL¥6BL•jÝGS«šÊÄä8…\±_ktK •Þ®.jNHàQ«{äš k´µäÑEŒ[«‘´²èBÁu«XF 7©¸ur¹,±ˆ0M‘ÑaR™<‡žF3L¤ˆpCK·ASB`é&ÒIÛnµ†(»äÍ Š¦àE™¦õzÚþã 8ÎþÏ’Œmnýé£ ìæ^ë{TÆF-6õÕ Hôõ2{Ö,Ò©4éL–„i‘Lçp]øéÍwsדã”&%ËÏ~5kÖ¬àl;„t–MßùËVÅüãåW2éú<»} ;ú0…äøÄQ´àè&w=~å`…7¾v ¦3É•Ÿþ º3”‡éé6‰Þ~ÔÖn’ÉZg…l‚ˆ„P1 B%Æ#¤¦¢è:B¨(¾R€± *ÔÜ*Åòq$R’LØh¦ŠP4M# ÆvŠ¢4Ldƒ\U„d ~à!ô:aä Ãß^'g ¿.‘¨ªJOwóçÏgÆŒtttÐÚÚú+޼¢žŠ¦iÿA C $Š£çŒ7~S¨ªŠišÿ#“ª)üa$LBшơþ’GC@1{H´®Á‰Æ)íD†ªb¢@ªãw˜ÅHgQ;†m[ØÉ6TÕœJøžÇý2 º&hm´w4í…½¶ª¢ÒÒÔB_w†£±NOé�LáL&C?mmm„aˆa¿bÄÇ1Q‘H$8rä:tˆR©ôŸ<3!axB*ì·Ô©øåß’ú#†¢€ÝB,bêå2a<&‡Ñ¤@ˆ¿wMS¿Œ(b:e4%…*¦Æÿ_,ç³ç5 >¾Ÿ%›µT˜œüÍ;Vã*•†À¡CÏ“,Y"XºTbUmœùSéʯ!VM«Á<~€¦ªØ–çÖijÊã8.--Íd²Ivï;ÄÏo¾…¦¦fŽ%—i¦­¥Àm·ÜË¢E39kÝZR)ƒ„­‘ËÚÄ^B¦ Ç÷Éå›Pu›JÕ!ßÔ†‡¶pÍ5wáy>ú‘×sÕUŸä½ù1öí;Ê?|á¬\5›ª#b”‘¤^­&B1¨;Û6ðü:ª¢64F U1PT ÏHÚÂo˜ºäÃùögÅu×ßÄÛÞñ:Ì‚¡ëÄq?2Rˆ�ßóˆEL&ÕŠP8®K­\CUù¦á2�� �IDAT#¤Œ±,ƒj­„•¨f„ëVÑ­'GÓtŠÕ*qSsl;IIÔX¡Zôhkëâ‘ÍOñ†7~‘¾¾.yåeÜpÃÏyâéIÖ0ÿòõïqá+ÏåOßøN¾ÿƒo1Yú"]¸†¹³{°íê¥"Цá¹u‰v2Åøðqò™4•J‘t*IÆÄaLÒ²Ñht 'Óiî¸åZºZHµä9vàY×¥µ£Èõ04(vÆLšDáye*µ Ú;{ð£:f"ͼ93˜Ý—ãþ;ws÷wpÁyëðêcÆ4e38“%2™Dp×O®ãÙ}Cœ|R/«/nÎ$ÑœÃ\¢z N@è¸èZš=lfÇÝ[)þÏ.£eáŽçÖ[6ò“¯µ¸—{ï¼—âøY K§7sé«^I¡«“¶ÎNÔ|_Üu/MÓšXûòÓ)´¨OcÖ¼×!ü+á •É¡lš§¶>Áîk®eæ¦Í¬yÅy4Ïè%öܬ ìThkÊñŠ×\Ì­å›ùáÕ×òºÐgé+ÎfÅé§s×í· 'l¦¹§VdVÏlFÆ'PU‰ç9V†ºã`Û¥‰I¶ aŒª€*bv>µ•úÈ(Ë—/£gÎlˆ$Žô¹ýCtNë4n¿ã¦OÏДnf|ÔåÛßú)§®XJ¡šš)I™iÆFGhmî¦Z¬Š t]'ÝÔÆ¡Cƒ¤3Y K!ke92ø,]í-lâIZ[ÚÈØ|'À“!†ÙØ Ó@“ (˶pÝ:Mù ““8ŽCZÉúGËôöLÃ4,š²MˆH’Ìäxàg7±dáBš µèPgbà�ÕÑqž9ø U/dàH‰3ÎZC:×FǼ6JÜù—oÆHª„~-Ÿit™ !ѸZAQ7ÀjÉÒ5­ƒsΛſ|'ãÅA}d#ZÎâäå+ñHñíï]Ç –àœK/¢0½iD´tåЂ4´Ïå’·JnÙöO<^Œxú¯:cgð/8þÌ‹Ev•ëز etSUÉ·´ÐÑ?žyóèš3¼M70ƒÝ2Q|‰[/aØB€¢)TÊUêŽC:FÓT„Ò0šó|ij¦Õ0óm4µaz§ë&nÝ# ãÁ/Å#EQ@Æa@ÇLñªÏw̪Édhii!ŸÏŸÐ¸ýÍ»Ü:Ä®]»8zô(Õjõ9rõß“¬ÿÖ½7ŽcE¡³³“µk×ÒÒÒ‚eYSäêÝÚÓH¦ÚPÃÕL0Ó6¼—0¹*Ô fó2ˆc¼0&¬ R|�;Ö0”f°5Bð¿ƒÄ",á£XÉ^ ½“¤£çq,˜˜LL*ttA2ùÂ'XR ÏÆ«YÄa„¢L«SøßC×ut]'“ÉüÚß›={6]]]<xJ¥‚÷ï ß÷Ù¿?ÏÅ¿,¤ÿ{’õßXã8FÓ4–,YÂ)§œr"–œê¾ÿã„�UCØ4ÙMäFTj;±­*¶=Èð{Á—œ ¨gU¨©N0rS·èEUUI§Óäó6““ ;wÂñãà8¿ùgŒÁÆ’±1—ž—¶6I.ªj¡ëS…êÿ–X üL* @ÝuÑ4ýÄ*1 I&ÌŸ?D®£ƒC$’Y¼ºË/9ç{6é¤ÅØè¶ ¦¡ƒ”ôÍèA‘9!ªÂ™ëN£T­�ëÎ]Ç[ß6ÄxïÿÀ?qÍ?ɃßÄ+Î} W^u5_šöWd29²YƒJi’l®BŠç $ ‹¡Ña’¶©7ÆìãöBÑ#ÍBiŒë†>«VÊÛßñF>ùÉï3w^—^z míM”Æ\©£ÃÔJ“ds&1 L3K, tÝ&I“Îdð÷ÄD½G8ŒMކuEÃ÷ Œ†‹·¦!A­^'_h!–:Q¤É÷ø»¿ý2—]ú2þú£ï£î¸¼úU§ó™O}–b ®øÓKyë[>Àç¿ða¾ñÍâúë¯cý†­¬^u6<ÈIK—`Q\'}J“¦¢îyX¶AÍ«SsctÝ" #¤’Ig86x„‘ñaVŸq•r=™�Ý$ˆ"²Ù$N cP 1¶­ã8%’)EQmƒšçÑÜÜÂ'>ú^ÞñŽòÕ/ÿŒ Î>‡B¶“²1tè=í ilºþöìxš3/YI_‰Ö<Z&Ɇg:ŸÃ+–˜£¹c:û¸þêï`†øÊ§©¶JFÝî¼áANµ˜é­Mܰái¾ónjÌ]˜ã•§¯aÑÊÕ „L”F9|xß½þüÍg?O.Ÿ&òj„8Õ*Bó±Œ$ï“j-°úò‹Yöò5ìyä1ölÙÆÿr5«×®aá%çãû~àÕ\¬¶6^ñÆKQ¥ä®ŸÝ¼931§OgnÿL¶?íͤ4òØ]T‡ºë`'ì†~£ )*QÝ#eÛ˜ªÊŽíÛyzû6N[¾œžY3ñý€ÑñcXÍ„bŒMÛ7²eó�ÿðé7Ñ<­‹«>ÿeÆÇ<Î<sÙ¼I½^EU vï9@߯ÆJhR"4ß«¡V¤RM”Šeº29&&&‘ÂÈðÃÇ‹¤ìf’º@Uu¢(D(ßw £¡J\Ï#Š|Ê•2éD‚jqœÁ£ƒ,Y²”îöVjŽGi|‚0äÓyò©<J¤òëHù¼óèïêâá ëñKeº„As6Ëâys9^v¹á–{øè•—`ÏšË!rÕíO1Þ¤“jJ¢Æ ¢²G¥R'ŠÒ©$"èQ„S,‘V-ÍŸËŒ™‹xè¡ðÏ_½ž#LJY•Ÿ~÷ËÔ%ܺå8·nûg¾Ùl°î´åøÎ$AX‘u2f'Ïæå\H÷‚ذeŠ€¯ßº‹+Þë1}ÉRšm“š{ˆÝã™={f€‡ÞÌ#lbÃR­Ô™3!+W­fÖ¼ùS!‘FË$A™ Ѝ»5T¡ )*åb AS¡p‚„ÕQT• Œ1ͺfE’8ˆ H$Rø~p"à–'b™…8QHšÂó‹(Š˜˜˜àÀX–EsssC²ãžN§±, ]×ÿSâóèÑ£¬ß°ž|Á£ƒDQ„®ëÿ( ‚�Ïóˆ¢YžN§Y¾|9sæÌ!›ÍbYÖÔÍø£ ‚uÒé>duY9Nƒj$_âÄ*ECMt‘hY)r”ÝE¥´©PÕf”öi3ùë“AÙx6C¡   UUM"$.ŽðQÐ1HM-²ç•X…ñqÁÈ̦Á‹€X•ÔÝñrH©ªuUâ)iÝ)üŽ×\†H))—Ë�¤Óir¹\Ãûâß«Üu×]lÚ´‰ÁÁAt½á‘ñoM®ÝfA< ®¸â æÌ™C2™DJ9U|ýc&l‹Tb:š¢P*m@ ¢ªItÑŽPR ˜¿³ 9Ž}b¿ŒR>„â”@Ñ ÕÙP§b×EÜuBÚ¬¹¹™0Ô©TŠEC¨Õ~³Ïp8r¶löö€+j$1ah“JeþÃþ6…ÿ$®ÿØûÏú´ëx„QL:•AU4¢H!ã8DQ„i§ŠNOW/+—ŸJGG;º¦¡ª…¦Šm[¡)ßD2¤V/a%5‡"q)UFÉæL>KSSŠ Î?—á‘'eÝYKX¼´“­íã;WÿœùófÓÑ1UÉà{*‰d;aÆuP}’)MWQE(¨BE 6FqQ½¦†Ä* .¥RÙϵ?ÚÈ჻yìÑíìÙ{„¡ãÇ864ˆed2)ìT+ÑŠ¢¦°¬ªš@7RÄhŒŽNâ1š®c˜ L+M&SÀNdQTƒPU7Q5MOP¯ÇÄÒDÆ×þøz¶m?Ê7¿ö4Åa׎-Ì_2‹5k–qôÈ“LŸÑIGW’k¯»…ó.XÅ)˱~ý&î¿ïn¾m=7Ý|'Ï"“i"ÛÚŽ"%QÜÙ®»Là R-v éÄŽ‡•LrÃu×Ñ3cK–/'Ë´A*X¶I"c⸊¢"d„ŠDS†$Ó”§VsQÍcÅ*Éd†¹óÑÑÚÌ÷¿{7{÷0wö,z:» œ†¹ÎàSOqíwD[s'g_qVO ª•@WlðÎæe§†¶±Ói*¹íêk~ȾðQì93›¤`¤¸ö3?`Yï<vî|ž|Š]#uzæøà»ÞÌú;î :6D¡§£5ÇׯþëÎ9›¥K–R)–ð]ÍÖ ‰£IlÕD‹TjQH%òPÒ ¦ÍšÍô9³‰kužØú8Þä]]d²y !¨z.Vs sæ,d÷æ'yìáͬX·šB/Õ‘aJ‡‡˜Ñ?“q§F¡½Íа,“(–˜ºR’Ô ,UÇ4,œÑ ïÝCGg'½sf1Q,Ru¤j Ì$-.¼èRvïÞÇ7¯çËÿðAnºö:ÞûÁoñ²Õý\ñ† ©9“˜–¡§H&Û)Nxäs­LLŽR®ŽÒÚÖ̱ã;vì§·o:ÕZºëaš @#—n"›) Hi˜ø¡‡ÐDQD…È8" E£)ÁVU !PcAµ\E“ ­]˜ŠÁуǸýÆ›¹é_÷rhà0^u˜þÞ>V¯9y篥ÿœÕ´®[CzF/õí¬=o=½”êun¼é>.}õTbj¥2ºÐ ÍLG‚Á#G¨•k´ut1ÏîÚOÿŒ9ôvOã«ß¾‡¡ZÄd-$iLï6‰ë|úKÂÊ3#”�ÅDJ‚8Y ä:HÐÝQ`øÈ6=´C¼þÕK¹è´eX•!Ra€IjãcTEÌôn–žq:«Î8é3f7¾GÍãÁ;×óÈ]PÚý,ÚH‰ ð1[²ºA„XªŽô •J#AµVÃB¼ÀÇóbÒÉž"¨šNG(ŠFG„Q€P¦t~¢ M¤0´ è}ÿå†îû>´¶¶þ^qõ%ê.EŽãðä“O²uëVFFFâ©§žbóæÍ<øàƒlݺ•½{÷†a`Ûö¯Œþ¥Ré9bvttKZ[[Y°`Ó¦M£««‹îînE¡T*5º¿Óif͚Ŋ+X¾|ùs²Sø£ …Â$ÊÔœ!bUG·ÚŠúð)ÕDè |5¦•a¤7ˆÞÔ†Ð'\åOõ!YKjhÏF!åJ™áÚÇÜAêN%T“JšŠ”²ñžÆf„ÀYoÍ1¬6T3?µÄžG8lØ�££‚ÅK$K—²Yñ‚º�ÇRR“£u‡£‡Tœ²ÁÚÓ¹ÜßME¿;ù !A099IGGÇÿè3ªÕ*Žã<Wìû]AQ”©Qóÿ†H•R>7þ_©Te``€M›6ñøãcš&Ë—/çä“O¦³³óWÖØää$GåÀŒaÛ6}}}ÌŸ?Ÿ®®.ºººhmmÅó<Êå†'C¡P`ñâŬ\¹’… bYÖÔ=šBh(ŠŽ¢ØDQŒWCuj¨ÍU§q>ëÿoîpœAêÕ}¨N UK Rj=9%®ù"Ú§\×åøñã(ŠÄ²lzH¡^‡SNéÓýû=á©§à±Ç Â9çètw›¤RÖ‹Ö¼÷—{óP«Õp]—–––_O¬þå›W|º©©‰À#›ÉQ¯;A@­R%¦¡AW«»ì8Âôé}?~Œ„m291ÂñcG8zì(QH¦I¥2¤Òyêu…b©„PfÂD(Uxžƒ©Œ gáÂyìßÿ4ý³Ú™=»å§ÎeæÌ¹|÷Û×±yÓ,\´˜|®™ÃƒG©ÔË´u6ã¸Ï£^«Qw„Ó0Ð48’¸NˆëùÄâP‚*Aœ|ò~ðý[Y|Ò,N]¾œíÛ·³õ±MÜvç½ÜtóF¾yõ/øùÏbë£ØöäÓÔj>®IÓÌ‘J4“ÍwËwcjM¡EÚ„‰¦eP´426Ð4é\Ñ‘†‘ÄJä8tx÷½÷Û¼í/Ncùâ¶m}ˆeËN¢V'“±éèíàÃõ>û¹wsÇO04´“³ÎYÇ‚…'ówÿu.¸è\.ºäbÚ¼…¿ýûŸò¯×ÝEg—E:“¢Ð”§T,I…Xi蜪~D&‘føØq¶nz˜W¿ör!Ptºã1ÉD)#*®`ê6†ªSÃÔ …¤°¨:’PØD‘`øèqV­\KµZäëß[Ï‘{™7w>3æ-àðÎüëµ×2:TæC|'G¢*©®V #ˆT„ÐÑ¡(Da€išÜõ“Ÿqtï³üùÛßJzÙ *^@«ÝÁðÀ8·}÷z„â"šl¶8ÊîÁ€Ï|ærνôÕÌŸ9› ¿øO?µ÷ßϲE'qÉe—áNLPwêq„ž2AU@‰±1Ð…N(¼(ÂCbEÉåè;—iÓzytÓf¶=¼™…§®@K[Ä(xU»ÐDOk+[6<H¹2Æì3VÓÒÕ8†„ô-œÇDµŠaZ¤Òi$‘ßÈõa€-D³ÿñÇ9¸w/=³ú)ôOM'™JãÅP«û45w0wÞBþáo¿ÀË×Îã¬3Vò…Ï‘˧óÁ¾…T&” ©D3÷ܳ‰ïÿ:6nÜÅYç¬Áõ«d² $qœàÐÁ£Ü÷À´¶µ#%<ºõ MmtuO£Z©’J%‰cTÆ&Rb,ÓDÑÕç©£0"mÙXº‰#’ºEÊ´°¬ •ã£8¥:?¹æG<ýä^yäQÉ {öÑÝÛËG>ýW,9} é–~!É Wãб£äzº¹é¾ ä; œºê4œ(äWßÈšµ³ii-ÄEÏáðä"e[&ÒÔhíé¤î{Ø-­lßó » óÊÿóÚgôòÔ(Õ9eA33 N;y6«O[ÍáÁc@BK+*ÉB îÜÀ®ú!«úç’ô%÷Ýú(kÏXÅ×¾öMšÛZŠDÏfñ…Ù<“A‘‘Ò1àEɘ¾b5s-å¤å«ènjfxxŒÍ<ÂÝwÝÁþ½»aLgs;šj y–nb(*q(‘±Ä¶mÂ0F†šš`|bðH¦ÒDQL±8A|B«3Žã†V¯Œ!ÒP”F@%ŒÞ)bõy"V÷ìÙÃŽ;£X,288ÈØ»w/{÷îåÙgŸÅó< à —Ë‘L&ÿƒê/¯ÃáÇ)‹d³Y–,YÂ+^ñ –.]ʼyóX´hRJ†††R2gÎÎ<óLÎ<óLf̘mÛSQá)± ¾_Áu‡˜zKÃñ¡;]QÁH™i|B¼ên¼ÊôdUÏ ê*a,q‚€jèP‹*Ô£U¯Êhq”˜ñhéÅhF¨†xЇ:8‘ƒ{hвFŒ úu,‘CµšÁHN-±ç™XݸQ01²x±Ë¢E!‰„Ö0g}¡’*$æ3ZöÙý´NqÄäÜsù<SÄê±ú¼Àu]†††8tè‡f``€Ý»wóØcñä“O266ÆüùóY·n³fÍúù�)eÃĶTâÈ‘#T«Uº»»Y»v-çœsóæÍcá…̘1ƒÉÉIŠÅ"ù|žÅ‹sþùçsÊ)§ÐÙÙ9u¦ðožWÃè ¼ú0f½†G„ªB¬ !NĨÿ‹5#câ JUpÜÃxî1 LôD"ÝsB¶hŠT}1Áó<†‡‡I¥TÒé 6¨T*°x1Ìžý˳é?o¥;w“OB©+Wjœy¦I:ý_OìM«ÿšiÚ<öØ6¤”ôôö222‚i6ÜË£8Æ0t4M%®F;zŒÓ'èíéBÕ ™¤æÏ`ðÈ1îºãŽÄ4mÞøÆ7!¥J6—¡¯o~à0>1Œ@à{ ™T3“ãe:;z‘RÁÖ,ºÛ;)—KLï›ÎÌþ…tw6ó•¯|+^ÿ^ÿ†syíë.#_Hqxð0n­B6©6Fþ5 EÇ©MçñÜ:Z£ I¥2ŠÔ$==ý\þÚsøñnã#ùË–-ÅÇ´töîÙËÃmå¡·q÷}C¸î ßV! ‘„ž®4íttvÐÒÚŒ"¹|ŽÙ³û)4ç(r$Óž[ÅuPtZÛ¦‚ñ‰2{ö ô×¼êŽì= ¡î‚Q›äð®}dÓ_úÂ?ñŽ·Å›Þ|5ëÎÞÆÚ3/ã³_ü0WãjZ:›ùø§>Îégnä?ø?½á6mÞÌk.:—ŸqÅQ¤n"£Ë´ºÉÀö§˜7o>É\õÀa|¢HàGÒ9ÆF‹4Ò˜F†je!u\Çåèáa:[[¨}&«"Q »§Ÿ0Œ0u7|âSO6ßÏG>ùEü$W~á}ŒÙͳGFøó·¼'™G‹]ôTš‰‘:Y=ƒf& Ê%lKbv¬ßÄ“Ûç¼³Ï&òBÆKžˆSløñC Õ–-N³öâ˸ò¦ÇxÅ+z¹ø’ó¨Ž$ßÑÌ»>ø×|ÿ_¾ÂÃ÷ìå²ÓO‡‡Iås˜¦…ƒ ”®ã =Ÿš!PÐPTAÞJ+’À÷™tË$ ƒæ'ór×aýÏoeý¯åÜ÷¿ +•A„.•Z¶S—qÙ›ÿ”ýø;Ì]?“þ•+i>ƒ >HÇÜ9˜ ‹cCDZí…| •r¿R£³©…C?Æ®mÛèïí¡î\Cÿìw´d•õ7ßÊñåØñuÎhè†&HfAè8Ä0(¦™Q³‚Š`DTTTš&t »_ί^媛ï÷G5=ÃèÌ7ƒÎæíÞZ½Ö[ouUÝ:çìsöÞ”ò±p€ˆ¨@ÂŒ °í…—ùÈO¿H:âÆ>F0®cû>ããe:¦-àÅvñ­ïd×îwÜñqr¥UÛGW}&ÇʬZ{<¾ Ï=ÿ"]sçÐØÔVKÊõ¢‘8Š ¹IP¢˜V-ýÜó}|ÏûW“}IÅu<‚jQñ°ryœÉq²‡‡Ø¶û�7|}'—_>“E«Žãħ°uo/#£"­ä+E,ɧìzŒLd)U*ˆÁaä@Óó©Z6FÕ¢\ñ‰ A`l|Çw™ÌQ¶ U‚á¢(ÓÝ;ÌHÉä½W}‹óÞÂÍ7ßÊÒãV"ˆYfÄ$¶Üýsª#ãÈŽCK0F®`áx‘ú:~ð£;øØÕ?掛ßO,¨¨äX53À¦Ç6qÁ.¥XìgíòVÞxñ9ÔwÎ@•$ Ç¥cúLj§âc–-ʃ¸U—úæffu]À¬Ë/¦¸ûe^|ö)º÷ïåç7ܳӧqâ‰ëè˜6dG+‚,!Û&e£ŠQ5@’ G’”JU̪ƒôqm£jôlÛD’$Âá®ë¡É<ßÅv­)Õ?a1N§Ó,[¶ŒeË–ÑÑÑA<G’$ÆÇÇÙµkûöíãî»ïfll ß÷9á„hll|Õué+IÀ±h = “L%Y°`ëÖ­#ãû>Š¢000€aˆ’ÈôéÓY±b‹-z•p ÿ7¡££xqIJ€èe!&B(ø·A "Á@+BÝqŒ¹“G‡=?'Þa›ÙލÆ)Û=ù,£Õa,aŸšÖvl¢¡(MáfÂÕ0FÉ` ?@¡˜¯~A9ÀÂäR‚^‘J±Y ÏET"S¬ÿ‘÷l»B.7Èä¤O,6øóÉ}_ÄÈ)õêØé¨ÇêÔ°?…?FGG¹çž{xüñÇéëë£Z­U*:;;Y·n7ndÅŠ$“ÉWý®¢(´··ÓÖÖF0DUUY¸p!ëׯ?æ·žÉdxúé§±m›ÎÎNV®\ÉÚµkinnž’ÿOá"ì Ç‘'{0ÌQйd7I<6AHÄbÑ1ðó}Xå>²B5'Y7E¨G£Sòÿ¿ÈÚ, ™={6Š"‘ËÉÄb5’thzz ¥å?@.aïÞšÀâÅÐÙ9õš¾È‚/P­Ô××S_ßÀÈÈŠ,ãz>u©0¦Uö[ÛZY±Üã—wüœ7¿ùMøØ$“q†‡˜Ý5›P(L¥l±mÛ.žyf3ûöô‘ËW™3w6Á ÌÚãV¢k*š&3}ÚLÂZ…úT3ƒ£<¿©»žæÜ ΣX*bc¬Z½Ÿþüf{üqî¾çq®¾úClÜx*§Ÿq³fÏÂ3†¨TóµkUY<×ò,$QDiȲJ._Äõ+C"ÃÃÝ|àýsç/à¶Û¾Ç•ï| ûö ®!ÎÌÙ,^º‚(ÅàÀ�ݽ}d&òìÞ¹—-[ºÍòòË£<»ù�•² x@X†HX%‘ŽÓÖ^OCcœÎii¦ÏleÆô’©3Ø»ˆSO_HóÌùôOt³xÁ,<ÈØ fhI>øþwò•¯ÝÄ›._Àù,å‡?|€¹ó—±~ÃjvíÞŽ¨¸tNo¥sú¥,^4o~ãFæÍ™Ïo½h4ÆòåK¨º²ï£!â ôôõsæ/Ä(•"\|êêêð AP°lð,Eƒ Z5¥(©d;®¬°é…§0…q¶Þö�¥Šk+¸žL]zÕªD}2ÊþÃÞ~å?±xfy ,?åtª¹IêôTQ¢PñÊ%tYE)T¨–K<ÿ´·w²øŒ“A†á¢×·ñ»=ÂõßøïøçÓ¸äª ¹ñ†‡É*|ìB쀀a¹8Ÿþ#üûÒ ¼üÄsŒîÝǪ×FpF'(2¹R™ ¦biž"!™~ÅDE4M§ìU0';FÛŠOÇÖT�� �IDAT%\ÜÚÆ/nù·|ëf®¸ê*TMCsD|ÏeæIDZªgÝq/ïnŽ<wMòðOÍIW^Š€O¥\Fd&†Ç¨'QD‰C[¶ð䃲bÞ<–œu¦$¯T¨º!¿Fd†Ã1´D#›ïºÑ—‰„Bd2cÄÒQ,/G@МÅM7þ„Ÿüø!Æ'Ë|òSobÚÌ ÷O%صc7ÏnÚËü™í¼üò>rŇ 2sÖ~ôãÛéhmáÍ—]D¹Z$QñO±}×¶‘E‘€ª#*¾ia«ø¢ÈîíÛè=t¡ìT#´Ö×ÓœRÉÎ:ç\2F…@*I~x‚‚&c :š¢ÔÓK@Pijm!Š3³±—žÝŠz¥D*#�§X¥-]ORƒÌh?3Ós([Ãe<3ξñ­t4·3}Ñjn½ùn6?¶óϺuë×pÖ9kÑâ!’!ÛtIâZ%#n¦X pópù»ÖsúÅ2ñâCT+=ÜúãÏñ•Ÿ=Ïž¡abuqÛBÄS"A‰ñbj€üp;dã8åŠCP¦ ùHn‘jÅÀmrâ%ÇÉ®Lv÷˼´y3»·¼Ä¶ç·ÐÔÚB×ü¹ÌXº˜dªRfÇuÑd™ ³D4%òŠt'ŠP.Éd& ‡CDãÇDRjAVŽ;^õ§€$I„B!æÏŸO @’$Òé4¡PI’Èçótuu±wï^î»ï>zzzxê©§H&“¤R©W«²,£ë:¦eR­TÓ"áp˜x<N"‘Àu]lÛ>v…Åikk£¾¾~ÊWu �ˆJ!ÜŠY£â  y *Á¿‘ÿ€(Èh&bÉÕˆŽ‹[x”êØl~Â`¬‘¼B¶SÄ @ðŽ’f>‘@˜˜G5 Ñ@òEB„000ü*/Žo!lç©§BCtÈšÜþdpœÚàe5²(•Š’JùvÕ‚�„2ɨO@ƒ’U#§¸¨¿}ø¾OµZedd„={öpðàÁ×tÙëyáp˜%K–°`Á‚c=Á+ÐuææffÍšE À4MÇall ¨X8p€––t]'‹½Šìx¥ç0 ÏóH$¤R)âñZèÏ+—Ͷm#‰D‚¦¦&’ÉäT0…ÿ¤Õ‘T "’@£Œäûø…1ªL`ÍËÑ´šžDÂüÁ0GÏÊ–SÀ Š‹‹ìúhUÉ‹ ‡"¨zUM#Qà_-|¦ð—õ}è8“““„BAA¦¥E¢R©©M2øCâ‰W¾2ÇÆàÐ!…SNæf˜:” ΍H¬\»UÖU‰x*Šï‰ø– ‚‡¢H8ŽMµ’%‘RX²tGº÷ÓÞÚŽ$(È‚B!—'žøœuÎÛ$òr†²<»y+÷Mòì3/2Пò%‚!EÕ™5k¹¬Éæç³<óÂm”L™u'œ@n²„,&ð\Ÿ¥sNdÃñçS­T¹÷þ{øÄG>ÎÚµ‹9õÔÕÌ;‹‰ñ,Ï#aZåj…`(Œãx”ª9TME‚d3„CÕåïßyÝÿ —^|ñN%—G9(ØÈndÔ#2'E ÐÎ)뺰mÇñ0*£cctéadd”Á¡aº»GpyqÛ»! 5ŠDÕt]#Y¾l)ûöìcñ¢…<ùØ^ºf-Gkh¥ZÈs¨w™Ü8'o<‰L¦HÕµ8ÜßéçÇg®ÿ[v>Ã)ëÎ`ýºU|á³_â¬k êÎiäï¯|=»víæ‹_ú¹öãœrÊF:Z:سs'çž}:#ÝÈ )bÍi²ùqäªK,¤#‰>¦cME±MÓP´¥1“á|ˆ;o¸—ûïÛÌáî¦ëá‹P×­:mÓ=‚.èlXÞÈ’kéÙ»—‰‘>ú»K¼ÿê÷°ôø•œvÖ¹DÔf`’ë È>Ó=ÅŸæàпÿ ô™Í04Š©crÏË|éæï1mi;Wþõ õrûwàÍÏâu‹q2}”«ãÄ’­\ó©/pÁ.⤓VsèñûèÞ÷/<z?3†æÒ¶v I¿–H,„Pqʘ’€Ô(Ûš ¢*!°Mª†"ÉhuœwõßóÅë>˦ŸßɆËÞŠ91ŠìjHšÊñ¯¿ˆ—öâɧ_býUÏÂ}F¡;è:~-™Žoª´„T*{_¢oÓÌHŘwüñ!Úºo EtdÙÆ±mòÅ êCiŠÙ MéNZçÓ7pˆ–¦:ödâ¶ï}›M›vˆÜrÓUlØp }‡9xh?«V¯&3*ñƒooFמ㬳—ñÆËÎCÑC8¾À÷oýÑHA1Ù{`­ÈxjKU˜ÏÒQÐŒ<1­ ŸÉ¾Ãtï¡jy~û³Ô54qÒë.¤yæ"´ÖF¾óÔ6^ìg°’!‹1cZ;=ú A%Œ)è¼´s;‘ ICS®%žœÉŒÓ¸áÆg9ãuçsý>Ì÷~üfOk¢RÍâø.‘T#Á`’€éáx> uq*FÛ¥¯÷IÖŸ1‡›ø0MuqÞ÷î÷rÓ÷nâæoaz:A{Òåøã›h³Ãˆj’Šç‹5ò“¯#7‡®º¯ÐOe @_wž•jœ gŸÀ‡;… Wî%—ë%Ph°ÄšG³/ãØ&’åâ$‘X U âùš >£ã#¨6¤çt²aùìL†ÊØ›Ÿyš{ïú O?ɹgŸM¸½Oð¤"V¤Hu¢B9##ø:Z4Q²ÊRD4EHàš&~Õ©) ¦ÿdÄj8fÞ¼yÌ>ª‘$é˜ÜÎó¼ci¼CCC¼øâ‹¼ð LŸ>•+WþžtßqŠÅ"ÕjI’^凿º.ù|žR©„ï×[---D"SuS8 5Œ/I˜^†juÑ¡zuµ«¿†H–BÄb‹Ñ1‘£˜}™ÂÁÛÙžHâ%V² ¸Îè|±©ñŠª(Ô|UIÀÓ<Ò¤ñ¨¯ šý<1ôŠ‘eI´´ âÊÔè÷'…a@¡PÐE%•J‘Nüy‰UQ„HØ%r è"Å‚„ëÖ‚¶$iê}û¿@¬vwwóàƒòàƒâºîûÂÓq¸ì²ËèììDUÕW«±Xì˜$bbÇq0 ƒîîn¶mÛÆþýû1M“@ €¦i¯"V_iš”J%�Òéô«ê¿išäóy*• Š¢H$H§ÓS¾ëSø/4³ „P¨Cöl„Ê^¡—ª7I‰ZbQ$T*Ùø’‡‡þªÊ( ":&”‡q¬QÊ~ Í!ÑBPï ‹"(‚ Q³˜ª¬©°,‹±±1‰8±X„–‰\®V¿''ù½`Gß÷±mRÉgpP`pP¤ZhkƒtzŠX}M½n©ZDD~ Ó4Y½z5Ц §Éf'Ñ5p$Èx6GKk=¡P€ßv;}C\~ù[(—L|_D—†'{¨«‹ ë• ]]IfÌ<û÷ö±uÇËèz„={Ð?8Nß@U:fÖãù6ßÿÁoxæéͨ²€c˜„‚Qëš™3wóÌçÒK.âøã—q¤w¿þÕ]ìÚ½‹÷_ýn–-_J©RÀ÷<|ÙÇ´ªÈ²J(Äq\,êâ †Eµ<ÉÆ“×2:ÜY)P—ŒS©”EßÉc[Š áãmàZð<|Ǧ.¡£½…Ëšð<EÓ@Ë8Ü;Êþ‡9Ò3È®=9x ›Ñ‰*ã%zxVöì’ŸýòIÚ:aÎŒ.ævÍbÁœ&æÏoab²„¦ÇèèœÏ‹[÷±pÅ,Î<o>ð',?‰…s»èhoয…}ìÃd3c,ž7‹—wïàé§Ÿä£×^Ë'>þI®»ö:~½ó�ÃC aíºU\ÿå¯sù›/& ÈhJ£b£ë!&3ebÉ�Ý==<ù»Çøí½ñè#CH"¤’1Öž4³Ï}§~2­1 ÕQ¡0š¨ UDǧ|¤ŸÛ¿õM š¹à-±g¬›ìæ¦ïÿ˜sÏ<E‹çR”ªLŒW¢`¹9x˜ŽY³YpÂZª“cHå2¢ãîßÜÏžƒU®ýÜ:"±4÷Ýû¹‘ ×^{C÷‹¨¨z„mÛw©‹sÒùgãf‡hYº€pBar¸—[632:Äâ3Î"ØX™/Q¨”(;’"ˆ H ¾ë¢èŠ¢aä &í )%H0â¢ó_Ïý?½ƒE‹—“šÙ‰ey¹áŽVνümÜþ­›i˜7Ÿ¹K–°té í}™Ë– ÑÂQô¸ƒÓÛÇÞMO H¬¹ø nÂu\ª.øŽƒi—P¢ARÙgd`Ûpé>ÜÇ7¿u+Á°NßÀa~óÛGèÙ‡HD䟼˜ Þp&ù±1™®YÓ©KÔ1{ÆRÂá ã¹2¡X‚ÓN;U«ÓÛ}€î½;©V Œö±Å5iaùÊåŒM‚ "-¿ZÄΪtïÙÁ¶­ÏÓÒ´O¸üío£qÁH´ðÒ–¨å,kÏ8oÞrÍsÀv(æ ’á®i!)6nhÄ6"äs&/íØO&ë±mÇ »÷lã¼sOÆ6Ké9Dkk+ÙRO´ Û©ý~4Á´<ÌJ…e+ó¾wŸÆu_x€ßz+·ÿäG<zïCüäwð̶]Îfý4A šL3Y¬ò³_Ýɲ…‹¨LŽÒÝSfÿæ¬\±ž÷_ý9~ðøAN:mK—­&†öiiÎ:a!MñùRÛ÷Ð4p8BµZexxÑ a–rø€sô±P.`X,RN…€*ÑÁu Öo8‰ßÝ?7|åË,»€N:�¤ÃÏ$W-×lDª%Òá éz¬x”R¥€5>J"®æq*U|±©Âõ§ÈE4MûS.u]§¾¾žŽŽ^~ùeFGGéíí=º “ð¿8Q©T̘>ƒiÓ¦ ºr]—\.G±X ©©‰éÓ§¿Ê‡m ÿÇ!’Š.‘­4~�"Í ÿí¤°JR9Ò8ëtõHì|ŽP¡Ì¬ Mg]”d<…¬üG¯ˆÒ«»| AuYJ‘lò¢BŸoÑFS ¶Jx^íº¥Z5gdÄ'nýƒ¡~ÿ{䚇aŒS*±¬$¶"›­¥ G¦,�ÿöy%I"‰ÐÙÙÉÒ¥K_“מëº$ ’É$¶mÿÞÕ«¦iÇ.HMÓÄ;j™µtéÒcÖ@äá‡&•JÑÞÞŽ®ëH’ôªÀ+Û¶‰ÇãL›6Dâ_ƒõªÕ*“““”Ëet]§­­¶¶¶?ës5…¿¦fVF�Q½¦ úMÈX€€êT!;FÑï§Š{li) &DH ‚ꡈÐJ EˆCTõ).õ¯¢¬ɵµµ¡ë ‘H€¦Õ®PûûÁ¶ÿ=k’É9xÐaÏßÓÑ¡ÓÜ<U?_3±ª©µ [{[gÍ(½bbË¢h!Kj-hÅw‡"T*6"*W^ñ.¾þµoróMßã´ÓO'Š`PŸî TÌR-WkF¯æ$¶-ùÌ[ÔÌÜÅí#!vîjbËö]”K6§zí3P$Qp©–³àU…Z€Îðð#ƒ£Üñ«+f9íô œqúV¯œÏË»w âóÐý÷Q_—$‰FIDµt4³J@ ˆÅ@ð©T t]gúŒi\zé¥hª†m;ˆbM7TÛpKÈ‚‚ëØ¢ˆ|¬Ëð}b±Œçyµ‚éú8eQŒ°xq³f¤ð%Ûé$бoï^öî:@÷‘~z»9rh˜á>‡Ç{öóècûÑ€¹³´´&øìg?A×ìuÜ}ßC,^²–Õ‹7póS7Ðß?̬m\ò†‹øêW¾ÎØXUÓq—3ÎxÿÄ?3cÖ<ÞyÅ;¸ãg¿àšk>Êí?û ç-å-—]ÁW¾þ5nùö¸úý¤ZÁ× ‡¤’ ì|©—ï}ï×<ÿüVö÷X6/Åe—džSV°rÕr"±�Áˆ€'NË`YžQÂF¢:Y 9ÕÈ£¿½“»¶ó_ÅÈè óçÏeæ²ùŠ¢'Ṫ* Lìît÷aã›/D ÉÉPŸjçð–n¶>„Ö…ó.8•jy’Ïñ&.¾l ¡XŒ€˜$—ï9Æ-ßùŸúÌgAò‘â1É�¶F/¿D¨µÑ± O>ø0³—,¥sá"l_F·ª�OÛ§l™8ª‚­Š¸Q¯â`”„’Å’«>ØÃcwÝËÞ÷^T]ÃÁ£T*±`ÕJÒ?¿ƒ¡C‡™»l©Dœ—F&)O›ÖYó2ud&ö÷3,æoX­iJ¥*áh¥\AQD’é$U£L©TEÕâD L›>˶øÜõ·‚�² ¢R³X{Â,.~ÃLd²}˳̛7‡¸¨#]\O sZ±¤†wùû÷ý¹ÉDˤ9ä3ïÿ™ìC™1ÒmÍôMŒb(A¢± Q#èKä&&¤gÏ.&ƆiŸÝÅ‚eëÑêC§ÕSÆìÝÃŒY Ês»–Òsð|àªÏò«®¢­¥ £ú ²EšZ¢„Õ0݇X´p?ü<òg¹Œ×½ˆS6žH>ŸÏ¢«k>ƒƒø8ضA0@–ÕšÕ‡ KPöŠ`iTó.ðà}›˜;w‹fOçº]ƒ]gû¾»™åéÍsé›ß ¾ÄÀ`Žõ§,' ‘’U Í ä2clÙzÓNïâ‚‹.äúÏÝD8â²÷@‘ë?¾‘k®ù�b¥J8FQ Ã@–eêëp]Ï÷Ñ4­&ÝEÉ$È ²¶íâX!j^©Ñ–&N¿â æ¬Y˾íÛ¹íλh¾/†³ÎbƉ+ÉâàINÙ!ªKTªe<ßBkø–Åhv -àbxDQ$<U·þ÷†v|Bá¡p9#cY•JÛ¶«…B¡¡! …Á`öövZ[[]›˜¦Ioo/###¸®K:¦©©‰Ph*Xg ÿ–7Д$ŠZı ˜•~Ôp=Âß9èã‹àè*~j6š«Ðžï¡Ý¶ÑÝQ2H~Aø¯I(ŽMÜpY¤¥u&•(%AfÔCV4iŠXýSÁ4}ÊeEHÄCÇÿ Uú¯~¦<ÏÄóÊx^×­]ÕZVž ÿö‰„¦¦&Ö®]K[[Ûkú<úGû¹WÑõÊVUU"‘ȱ¿ÑÒÒrtá>ÌáÇ9pà�ÝÝÝd³Yêêê$ ×uett˲ˆÅb´¶¶¾j±Z,"ŸÏó`mjjšºXÂJ�AÑÑðÑŽZŒQÇ·ñ=»v8ˆˆø¨µ Ì`E‰! @>Ö“€0Eªþ•}'¾¢¾¨¯‡húú`d^Ékô}˲0MËr9|Ø£»Û'™„ùó!‡©½Îk$VeY¦P(‰DH§ÓGÓÄÂø¾O0IJ¬š¼QÕ@¨V ’ÉF®¾úƒ<úÈ“|åË7ÒÕÕÅ9çœIç´vT5Œi¨šXÉ!‰µPÇ5q©PÉf¨o pÞ'²s×>ê×:ÐÇ·nü¦á`¹QA´‘Û€%+6N¼‘Gîý%[·=KOÏ>6¬_Ç¢E ñq™7§ E±,‹þž^QÁ²lŒŠE,š ‘ˆƒÈ±"•Édèèl;êGQó´q=DZEË7±L]רªÊøø8žç¡iápÓ÷±,ÇÏa˜#øH’B ¦kFˆá~NXÓɲùiòù<‘@d¤žÁž,Ï<õ[¶íbp¤Ÿ—²ïP–}¿ƒÓO=b¾Â@÷‹–5ÑÞÔÁþ½ûèlm渓6ðì³Ïòäïžá—\‚ÈZ˜^ýAn¸ñ[\ÿÙ/ttî¿ó7ø–Çd±Ès›^䓟ý _ýÜ¿pËwÊG®ùŠáùßmâKŸÿ=Ú‡¼ýЏfÉ<6œ²ŽæéxF‘R%G±4D5SDÖ,\[Aâ("¸¦ET¨LsøÀnæÌí$Ýc ?N0¤2ž#kÅ4l<ÏÆªØ%=â…ÝÛIÖÇéZ±˜Bo7z<Ÿ/ñ›_?ÄŽ£œwùéÔ×§ùÚ7¿ÆðH‘÷^uÕbމ¢ÃôY3øÈ5ÿÌeoú�®åK_¹³arx€ºHÉwHÄ¢,]¶˜…³Û˜àÅ'vÓÔ' Ê"e«‚åÙ’[2(Lä †CDCqŒªG £R­pÂë/âæþ3;}’Åç¯{dªN:éDvm~ŽR>C°1…䊼¼éEŽŸ6IðûzèïbÖâe4ž¸ŽÁR9C*•= ÌDYÂT*6ãÕ1–-[ÈßýÝñüøöM$“µaÝú.ÞõîwÐÚT‡$ø\ûÑ_ÒФ½£ǵÈd2¨Zïyï¿Ð?0ÉwøÌìl¢÷àAævÍÁ,öìÚMKK sgÏ%oV™Þ2Y|¢L÷‹ÛyfÓ#drƒÌ›³ž“ÎZMº­AjD K¸–…«èäò%ÂÅ ÁP#}½#4øî÷Ãåš|øoBU&sefL›ÅÇ>üi¾qà ¼÷=§ÑÛ7J{{·Ýö"•Ý{6ÓÙÑŒLfŠ‚¯„ãZ8¶ƒ.‡ßµp‹1½ü0!UGŽ[·ˆwør~ù£_ròÙoå=oZÃy/@ Èôõ÷!È2[_ØÁè44'i¬o@v<Šù,‹–G]DH×xÓ%oào}'í&[&¡yT²%UGQe|ßÇ4M‚Á áp˜¾¾>¢Ñ(ªªR©TeYS©šÂá0‚‚(b FBä ª¬Ó±j%‘¦&æw<›ï¼{~~'3·îbõ©'#/žƒ—)ÛEzè¶‹oÛ˜’ÒE…°yJ—ñ¿6®û>¾W#U!  Of˜Éd8rä¹\MÓŽy§I’ttÁg°ÿ~úûûq‡X,F"‘ø/e§ðµ#!ÆÃ¥R:€íæ‰{²¯•àýõÃõ]l»€™ßG»ž ³ãT´MˆÕ^òÙç°‡tâx9Z{=þÓÔƒê$Ra€¸£ÐÛI†ò+L'‰„"$‚É£sáÔdøÇ¢X„±1MóioWèèH“Nóg'A ЉDB躊 Ôü`ÿ‡C‚§ðB"¨ªzÌ}Ú´i¯¹Ö‹¢H ø=Õû·þÅ@8>VÏs¹ù|žB¡@*•j6 bÍÍͤR)‚ÁõÐÎårôôô099I,#‹›Ã§0…ÿæCÁïU<=’FÀoF}ÕÅ*(‚‚ Š¢ŠÀ›ö×<³X–Åðð0±XŒTJ§µU¤¾¾¶hœœ¬ÕÆW¼X‹Å¢(¢ªa2‰‰ ùó/†@`j)ùš‰U˲…B‚@¥R%‰à8.¡Pl6‹¢¨H’ÈÈÈ0²¤¥µÌÄ(Ž#°zÍJN>e#÷Þs/×]÷efÏžÉqÇ­¤µ­‰x<B± b;¦a Ê2ÁH€D*†ã™¨ºÆI'œL<z¯|ñ«ÕOòÉO}D<‚iŒ’ˆk”ËbI‰âd7Fyœ“O9ׯehxˆ'Œ… æOÄÐ4<P0Hggg-É<DŒËøžO©R:JªX–E2™DU²Ù,¾ï"+2š"£("º®â.žg“”¼"ûð}Ÿp8L(Â0 ,Ë&ÑÐDËÎ#ɦ嫌ǨKJhr O*"E]TÉ ª0sfˆ¶úã9ýô„RI&JcŒNdøõ]±sûv&2cXFž#'èš5ƒgŸÙÌygŸƒeX,]²ŒßÜõ�¯¿ª…"ž 3kú ’ñ8;¶ncãÆ3xú±ÇiÖÊ[Þùv>õ/Ÿ$ÕØÀ?úI®ÿÌõ\wÝ—ÉNTùÙÏŸaíò™|ùóoæ¬3O¥¾)A_ÿ!âap+ãT+%ÌJ‰x,Œ/ʘÆ$R@E$¬Jž°¤¢§Ø~×=Œöò®w¾Ë1˜»v%c㈊ÀäÄ0š¡bWPƒtEÇgó–X¸t>šìRuLⱞ½ïÆÆsäJ§q9“¯ßðW}`# ž€Ut\îh<öÝ}UöìÙŠçÖÔ4ͯçHOÁõ¨ƹõ§ÏÒÙždͪ•45F‘«±Y­h!„°çY€CT‘=Áò°‹Š#àÊõéLd9îÄuì|úEŸ¾'"!˜6ª(³xÕrž¹ç^Æöíeúªel8ÿ|žx~d‹¸¥*O?ô8ø.ËÖ¬!oä|Æ`˜âhUT@%˶<‘`0L¡h¢hðÑ¿— §®¤®¡Ž®Ù³8Ø=ž½/³fÕ,ªeƒñL]LÆ`Åêµ¼õ²ñÌÓ/óío¾‹Kßxã}ûI'lß¾…áá:ÚÚ£|ÙG,¹È¦=QÄ“`ÇK[Ù»ï‰tŒãN=‘óO%_ÈqóO¾Ïn{‚ýó{‘6Ù|ŽüHŽÎÖÙlzþ§¼°u3¦Á¼…m´w&˜9猌IÔóÌï¶qóM/ÐÚçë7<L2 ßýþµÕ½ý=*“ã$b)¢‘$ýC½¨M‘°, Eð‘%ßñ˜œ§£3 bSÖ¯å7¿¸—ÉñQÖ¬]Î9§oä´oܧ?ý}ºšì:ÐiHÄcª¦ „B1ÇÅ¢R)ˆøÐµïäƒ_­XÄ�� �IDATü!ǯZËùç^LGG=]K»Hµ¶ …$<§@µZAÓtâñ8¢(R(H§Ó躎 (Š‚¦iȪJ Âõ¼c×­Žç!x>pEÕ±pK+ñ¶NÞ°| ý=Éó<È]ß»•isg2ïÌ „[ÒØŠ@Å)#(*uɹ’© )!$aê‚ár]*• ù\£j K2¡PˆP(ô*‰Þää$===T«UR©©TŠX,†x”r‡±ñ1Êå2ªª …¦)¦ð‡&¢šD!T‡àðÍQ*Æ .šV÷WO:žÃ¤™!WÆö]êƒõ4„PõªdF²”²»qì ²"‡®Öÿ‰hËÎbCèjšp¨p¨ÏÎãÚ&E«Ìˆ0BJO¡ŠS‘,LJePŸpÈC–]\Wø‹ E% LJärÅ’@¹"ôkŽ€SøÛ…$IÇÑ?gŸ`Æ1‚öß°¯„\e2DQ<\õo‰Õb±Èðð0Õj•ÆÆÆcjaŠÙ˜ÂŸ„éÑdm*øöÿÐwbírµv±ZWWû÷lÆÇ}ÅB <ÏÇóÊå "–mmµ‹Õ©åxÜA<J¤†PUjµŠçùLNf1àžç‹Ç(V F‘J¥H8gÛ¶Ý,]ºœ·¼å2Î8ãtž}n ÷?ð##£xnŒÆº(§n|MÍm„à êëÒ¨ºˆëšØŽC.k°rñi¼ýÍ»øî÷኷÷3A'ž3a–‘dJÙ Q)•p½šÄ¿µ¥•×¾‘ßþö>NXw<ñxײ±LÓ´ CpÔ @pÀ—Dª†I"¤R© ày¡`�Óª"J"Š"ẞï# µÂèûþ±Âæº.@�Çq°,ë˜,DÓdÊ¥²$€k£  ë 26’àa•ÊL R—®' ‚;ÉÁ›9x`”N9A4i&ÕÒªu×òü¦ƒœÎûÞËò+°­$ßýÎüã‡'%Xµîx~qÇíìÛµ‹¹K–0x¸‡ÈìFV/_ÍÎí;8õugÐÒçùçŸäÂ7Ïe—_Ê7¿ým>ÝÞÉ[ßövÞþ¶àà“üàÓœ¶ñô`«0ÆðÈ6º€ Šø¶&+0¾å!)!š†ïYX•2ži"©>ä3<¿éi"á0Í3ÛŸÁ*å¨oj¤d–ñ=‘fhd˜°B¶¾ô%£Ì¬µË°p‰†#÷qxÿ!rÅ*mÓcÌêšÉžƒC$’eÞqÅ{ÁJ!0Éw¾ó >wý}$lŸïÞrÓ§OC$"áåBEîëá×?ý9wÿú4YaͲVÖ·ù«Ž£ifr ŒQÍQÈNOÆqllÙBÕ#TL“²¡D‚ÅËWrdó.ŽìÙGÇ)kpªÊ塺$ófͤ{×.¦¯[<³aëóŒìÝÏøÀ(cã\ôÞwá'¢¾I*! (hñ•r Y—e «`š®T42Ù~ÉgœyRM‚nºÜ{ÏÝüúÎgX¶¢…Kסkaz{F项©¿ú î¸}×þm¼ùo…LŽt0Íh1C¹ñ<úø/±óE‚ÁŠÄ:Ô‡30ÊCO=ޝy¬^»žik—AHeû–½ÜÿÄc\rù[ùü×ex¼@×üFöí=ÈD]0PåÏ=7È ßz?«—/dd`7¹b/RQ@UbHÄùîÍw±rE7ßôî{àÂÕ«–’Éôa™EÒ LŒO ÅEáèÖ¬Ÿi XUÛ¶PDǶhëšÃd/Édš#G¶rå•góÑÏßË‹ÏmâÌ3Ïä²w\IPµ@例ÑäŠsÞÄîÝ»xäáÇðCÝC£ ì~â)ªU%äÔ‹ÎáŽå‹øÕ/žàî_þ’Þ2ZÍkáºO]ͼy­Ø¶ƒçUq]—p8L8FVLàZ­¢( Á`Ûq}ÀõBxž€å¸ *x²Š'‚çƒíûè†IÛ‰«i[½”Ñ­[Ùöð£<ôÕo±êŒ ´lX‹/äq*Ä|™ˆVìIàOm“ÿðŽà¯,ÏDQ<&ÿ{e››Íf9|ø0GŽa2SóUM$Äãñc6��ù|ž¡á!DQ¤®®ŽT*uŒxõ}üÚO= “J¥‡§Ì¦ðŸ4e¢F84EŽËmÇ÷,T)„ ÿu[G˜žI_¹ŸQs„Îärd­OÔ 6-Æ'‹x¸Âèv&dß·QS'"Š8}Ø÷=\·L™2†ê#ƛу¢J£¤¡‰  ûªô³¦n-ŠªL]­þ‘ð=pÏ©T †‡GhoýÁ ¿ÿÝïsYö¨¯÷(=&&D²YhiþÜÙZSø+…eYX–u¬?ø÷«¯,úúúØ»w/ãããÄb1Òé4©TêØ%·çyd³Y*•𢩡¡á÷+Õj•|>¢(¿×_La S˜Â5õF€ÎÎΚ­¥,!‹Õ.P Ø¿ßöˤÓÒé$ããŠd25OÕÖVhl¬ÙèLá5«µBaÆ1ð|>O(:6|úž øžIflEÕA0hmM³k×–,Y‰¬‰lX¿†ó.8‹îînvnßÏOo»“}ø›¸ÄS0wî fÌ줹¹‘dºŽÙ3“ezË<D÷~÷Ä3 :º¦ ø6$TYE (Š!$Ñ' ñö+Þ /¼®KWW¥R Ë0q QQDð$@‡"X–ç9ä E‚Á Š¢ ˆ>¾ï`‚ #øwT}lö‚plw]—R±ž„ï hªŠåX¸–‹PÑ…B1‡SµH×73Ü×G}JÅ3Ç8yýôˆGÉË24Ћˆáz>uõ"1™bi’R9Ëò¥ëÀóÙµk«W¯À1*wÜñ¼´{³fϦ£sÅñ–-]ÈsOÿ??Jª!Èò• ¸æCïá–_þš¹OÍäk_ýŸøÌçùÅ·qÝg®§®!J¹2Žäd(Fï¦sZ'¡ˆ„Q.c™2–%¢(*¶ãÕ$Ñ8d2“øƒTçtÆöïåðÁ^Ö¬YŒ,ºÔMkÅÅÁÇGe|ßCpLôPUÖ1Fs ì¡¡­•úæF*F•¸¤‘Ë3™É1YgŪµêùÈ%ÿÀGþñÄ#9á»ßû,7Þð0—¼iWÿã•,\ÜEurb©QRñ|™‰¬ƒªjàytÎPùèuoãÂóæ±uó&}j¿ùì=¼õ½tM›ÍigF°>‰m1D7 PÎ4EZˆT=L£�U“p[3`€íÏ¿Hlj+pM A– ¨1}öl6¿ð,UHl<ï<øîp ›3ßpbsš’ka—´Š‰ëšZˆ`2Œe(•MTM¥\6ù…b‘d*Îxf„p4Á‘žÃÌž5U `WEšê[CUâ8N�Ç ðÄÏññßÇ?pW¾ýí<óÈ#˜%—b¹ÈÉgmäÈó[ÏøòyRz�Ñ5ÉîÙÁ3÷<@Ȇµ«Óºf¤Zpò“ȉûÇyà±=|ôŸ–òwœÃ³ÏlgíÊKX³d9/–÷ÐÛÓËËúY¶¬™×Âìõ,[ÔF©8‚„ÀÇõ"‡ óÉ}œ¶ŽYœõ: =h‰ .-” E’ñ¹\‘`@Àu\R©&T5€,Š%Ï—DŸüà\·„判Óéd€é3À0Šüè–›9mÍɤ1;fsö¹"';yïû?F6WE¡\)âVªTmQÕR)Üì³çÌçŸ>¹”kÞ÷>†‡GéÏ’™¦¡¥I”Påè2FÀ4M$I:–Ü*B$ÀªT±<=$ áÚ6®[cR-ÏÂõ|$YÇG¬…¸6’ïá«õãŒóÙs×=<úË»˜¿ÿKÎ~‰ŽVÜ\…¨ª LŒjMž’ÿÑïS(ؼy3™L€x"N$A Ã`||œááazzzؽ{7º®³bÅ ,Xð{þB¡ÀÈÈš¦‘N§_u‰ò I;1>c;$SI‘)bu ÿi{Œ$i¨j”p¸Åq j5üÿ—Èÿ…Âó=lÏÆõ|¢rA)Žˆ $Ðã ‰¶aôYJ™Bš¼œ$ž…,¿:AÁ÷]LsŒlá%$A%›¬×#H5VD@E&1Í~–xK‰øÑ©ë¯?…¢ÏРO>ïÓØ¨’J%I¥„?;©úo‡JY®ùÂÙ¶ëL½ßSxí8tè;vìÀu]¢Ñè±ÀÊWUÃ0èîîfëÖ­ìܹ“`0Èüùó™6m±XìØsñŠÀøø8ªª’H$~Ï>£Z­’Ëåe™h4:Z5…)LáµõYGy;EQŽ]®†ÃÐÔTStwC(ä‘LzH’ÈØ˜ÄîݵkΜ©Z«§S¯åA¬ŠÈ’Œ €ëzTÊ|¿ÆV‹‚„¦j‚ˆ „@¤T®R­@°±ì [¶læøu멃C}$IÖoXÇI'm 3že˶ŒŽf�‡{ïÙŠeÿŽÁ!‡h,S¢w‘8Ò=LC}#шO¥<Ž,IÈr€b¡Š®G‰ÃXŽC¡RD×Á±MºfÏddh”_üâÎ>ë,BÁ0‚ï>®çà:¢¤‚¤á¹6²"¡jŠ,#ˆàyÂÑf]Àó<lǦœ/¡**Á`÷¨Ó¯®ë8ŽC @ELÓĶmdYÁ0eD|_AAFtLdú{úijlÁ«˜4MŸÃÈÞçPµ0áú&LÓ§R®@Ui:e‚ºÎØhž—÷ôpʆ×ÓÑ`çÎ]¬X¹”`(DsKwß}¯¿ðB2£ø4¤ST‰ïÿ›¬Z³’s/>Ÿ‘O†Íý–ÿÇÞ{ÆIVÖiÿßûäS¹ªsO÷t˜œó�Ã Ì H–$iaU‚®º&Ìè꺫¸fWVWTÄ�¢ ŠH–,Ì�Ãd&OOçê®xê¤ûü_Ô0þ]uŸ}VŸÏ²l}ßTuUº«N¸Ãu_÷õ{ëÛ®äË_ú ÷Þýo¼þõçræë×óÓ»™·_ùFš¦5#'FÐuM3ð\—PHÒ™ ¾b~äáÔ| ;NS¦ôÏmØD:i±dÅR|Q´X‚j­†ã¹¤biÂ(Âñ ÓÝ=‹C{)‡é)äÇ‚JÁC(:/îtøÐOæö[Ìðø§œz›ŸßÇ[¯ø[^Üqˆ÷¼u_¹áËøþ8÷=CŒU(z’H(¨*hJˆI!²Ðޑ䄵+8íü×sëOîâG7näÒóÜJ•)3¦0ëØyxŽO¤ Ú›rDcÄb"UAA€ {f?ÛG—X2C¥2‰tª$¦v¡ýV¡²÷ ñås¨ìÜCql„éÓf\¾˜bi‚(•&XŽ$òkL:ãTƒM-ilÛÆ©yärM”KeRéùÉaÉà3cf/Û¶nã´ÓÎàÆ~ÉÃ>ÍUW½“3Ï8•ƒ1½ ¿æ_8iýt.¿ü-HécÄcÜz×ÝìÝ»ŸÖiýRТAxx²’ßÜ{7c÷ÓÕÛÆâ¹ó±z§â†¦ ‰b ªŽ‡n¥æ:”ʧŸv7\-]­­Tm%s1/mà†ó>ÌÙçÂ[®z/A­ÄW¾ð–.íGUCzz§04êȈûø5wýü®zë¹Lki¦T¦µ9M(C’‰†§X&ɤJH¹P&ôCd’°-ÄTÉd’š[`Úœ.·F"móàÃOPeû†­\pöIŒŽî¥cêt†¶næ>ñ!öì÷ÿ=²•ñ|…R5¤{ælÜ|žÃŠÏµÿt-'­<™5+×1}ñB¦+K€ 2,01ô2¦©aÆQgcE¤R©£Îõ(ŠPUQ¾$®™U# Ä2l"EÁóBBJ„ª j:‘© £¸ÔÜ*Š©2í´µ´/œÏK÷ÿ†;¿v#Ç®YCǺ5˜-iˆ\ô\ §Z!Öè·þl*• 7ndûöí85‡ÖÖVš›š‘R-F5::J>Ÿ§X,²|ùrÖ¬YüyóþÀMR*•EÕTÒéô¼†a}ÑÏ÷ÐT §ê0>>ަiœÕzp¦Ù¤R½01ÅA(*höÿHq5 B¢¡‘$‰uÄEª Æ¦‘èN ¨:ÑÎÛñ ;)é l%j)õjÇŠV/|”qj‡(W¶’N-$™˜uÄÙú;"$¾pqd…ŠS&-2˜†Õ˜,ü9Âj#j5H$ ÚÚšÈå¢è¿_X"P0LÐ pkàù ×Mƒÿ:<ú裔J%²Ù,Éd²>ò}¢(¢R©ðâ‹/rèÐ!‚ `Μ9¬ZµŠéÓ§ÿ^¿ŒŽŽÒÞÞ^ úwű¤”„aX¯÷†äóy …‰DâU³pÑ AƒW7¯9^)¤ûJäX"!™:U2:*xùeèìÔÐ4)ƒƒ;v’IX´èw± þŒ±{H!žç©T ߀èHuVDD‘@]Õ0tËN‘LføîMßçѧ6ðžw¿]·(VÊÔª%¤ ÉåÚ8ûÜ“0ôº›ó´3VEðÂóÛØ´ñeŽ?ö4|àž{þqÚš³˜†ÉÐád³¦¦â”K¨ŠEÌŽãû•j™xÒ@ú.nàƒ”tuu1:<†¡›DAHEø‹ôüÐC¨MWð|U«oñ÷ü2ªwdª¢õ­ŠPp]UQ:^q©&“I\×=êîUU×õ°bi¢ DˆC˜š†ª© íß‹®êtΜITóŠ%gÎüe¸eÇ IƲ1±B…ªïàU U§0é36`š –,YÈ®—÷ã8<?¢oÚTöì`xèí-í” Š,_±„›nú _ú"é³rÕ |è~,YÌÙçœÉw¿÷–.[ȉ'­%׸áÆëùä‡>B~<À6[0ô$µjT®‰Ñ¡qÂÊÙ–J“c”œI +‰lAW ¢É ãcEÚÚ;h›6“HƒÈÐ@7CŸP*~ˆP43I×ü¹<uóÙ¼i;g]q&¡eb'Òˆd#OpàÀ(-­L›½ˆ+ßy ç\tã\tÑ›ÉO°zi ï»úýLŽî _&n$Œ4ºn© µša@HdâKI2#Ù=(:xˆKÎ?Åǯã­|‘w¿Û¤ÇžÍ#÷>ÂÂ…³éš; Y,i*Ne 5#ô|Ð"Úg÷òëß>Fu×Òsg ê:ÕšCª§ Âám»™±rÛ¶máð¡Ã¬»à\ðŠH['”`ù*Q¹†ª âI%Â�ß 1Í•’G*Û„ë•I§Ó („RaüèG·ñOÿøæÍíåÅçj’Éb ×S8°oœ{ïÝÂõ_ÿ{bqm[ŸcÉqËyè…½ì`öìÏ“®)ŒoÞÅKûvS*1wÑ,æ­\B$B†J£è‰\}Ë“f"#ƒ–¦Nbx`„Þ)ÝŒ ‘NH7ÄŽyìÞ÷,ž|ò)ö,ACƒU2­ÓÜó£“%æ,\Ê”î4ßùÎ/Ðu¸ð¯Ž'™lgbܯ;�âYÇ0s)zzzÙ±c;º¦âÖ\FG‡™3w6…ü8C£hkiBS¡Rs©U å*§ž±’¯~óîÿù\~þ{˜>µ•åÇ'ˆ[& KC+–.á£~—¾ñ#üì÷’ß¾ƒÕÓfbÍ™Gsq7^ñ×|ësßà†/}›Å‹æÒ½p&ó–ÌãØ•‹ñƒ�ËÒ!z¥-¨/¨hG‰žçJ‰mY(ºF„Ô¡…UGÝPy¥ºfÔÀRA[¸U‡‚ã`d²4MéæÄÅK|øIž¼ëW´¿¼ãÏ= æ÷ã–Êèf£’ü_ÝÐéœÒÉîݻٱc»_Þ‚R©Ä+¹ã™L†þiýÌœ1“åË—³råJÚÚÚþ`¢S*•®ç“‡Áï½÷Jo[{Ûwlç¹çž£T.1Y˜äŒÓÏ`Μ9“Ñà �hJŽÃä~<Hw׫ÿSûD88Lˆ œ?‘É©#”ìÖzŒâq÷Þ ´ â.¨Mj&ЊåmxîaÚš—bY½(ÊæNÛZœ9Ù…dÔ†ö fë÷{à öçIMƒÎN…)S|°ÂädD2™ýo¢L:;Ê%ÁÁC’¾aÆ(Õà¿F6›¥··—mÛ¶±gÏŠÅ"Åb‘ÉÉI‚ @×uššš˜5k}}}¬ZµŠ•+WÒþŠåëa2::J±X¤§§‡d2ùîù\.ÇÔ©SÙ½{7=ö•J…|>Ï9çœC6›mœŒ ü—I$|ººJlÚ$xî¹ $Èål\WglL0>3gÂÒ¥¿s¬6ø3„UUU®”½ÒØA€ï{G·»K)‘‘@U Ï%ŠTTÕÄ $3Ï<—ïÿðV>û¹/qÖYgÓÓÓOÇ”)èº`hh˜ñ‰1²Ù ¾çÐÓ_—ÃîcÖœ6º{l¾ú/ÏX~�U©”‹G&¤Åb•„•ÂëÚP:ÅE7 ¼P¢§ê ¢±bÅ &''1T MÈ0Ä0 LE'Œ4ü >˜¯gå@xd¬(Šª Pk$“ TE=º2©iZ½˜Ž®]itUQ0l Í4¼�Â�¡FD‘[«08t¾¾iùaí[·ÑÒÞI<ÓÎÐÁ<Éd Ý8Å<µb ‹#ƒ42�‰N,ž#ŒóçÏá'·ßO =?$IÑÑçÉ'çŒSOGWÁ6ÜJ×ñ¥r•Õ'œÈ†/°cûvºº{X¶x!›ž{š–\šÙ3zxý™§sã ?à”SÖbY6ž ©LŽüè8†ià{!~ààõÉP¤š(jŠáÁ†¶ïdÇ®½,]²ˆ¸• Ð%"ná†!¦'Š´z%cMÇÐãüâ·ðõ~ù]9:¦öIA¨„ù £ÃE^Þ=Áª×­äW÷=ÉÞƒeÖ¬?ž«þ抗_±ŒyÓçÑÝÓÊá‘ýØ–A*ÞB%`š‘0±´ Y:¦fP)–± Ô´•ÌHîáоíÌîêå³ß¸„w¼óÇÜ0s ¦/dÓ#FÇi›7-mP­Œ’Lšø"$ Ò}Sðª*ûHOíFµ ÊžO&nck1œý£°ë “‡éŸÙ©K†ìÁêîG„"ŒˆTl%®`„!~ÅöR؉òã‡q‚ß¼þ:®ù»Õ]‘éî»÷§ 3Xé '¯?‰û|˜‡¸›CÈ䚨֠XïÞô¾õ­ASlîyð‡LëêàáÉjµÂ’y‹˜šëâ³ÿ&W]y*kO>¶Y=T¥C­µß ™›@¢Ñ?k ­¹ˆ°¦040ÊÀQ²Ù,ªÒÑÓ‚‘ˆ³|ÅŽ;æ.L»× ˜/P,Œñ«ŸÝJoO ÍÍíøX–B*ãóŸ¿’eËæ‘ŸäÀ—©–+̵ÂD‰[où9gžýz¦Íècó‹Ï3¥½ÎŽ<·@:c’He¡9ׂ¢Æ1 ‹t&C©dð®w_–=U–÷VúSðÀ1{áz*•2ÙT#¥ùü6/œÇÙg-âê÷}Œ€ZžáGÇ/ÇêoaѲÅÜxãõì|f ‡†øêÍ7ñ‹ûâÓŸz gõu7AEG2k´£Û,^i/£(BÕ5tÛÆG"•ˆÈP ¥DDšªø.¾¢ë‘"м€Zà€•ÀNg@1P}p+Põ*´r§Nïá··ÜξpóÎ=‹…gœŠâ5,8 bvŒùóæ£**ÝÝÝÔjµ£E(¤”¤R)²Ù,---ôõõÑÛÛK{{ûfæÎË\€³Y¶t™Læ÷ÞO&“¬^½šL&ÃðÐ0étš®®®ÿ¶b þ§ �˜9H¸PgT â­`$ÿÇ8W AñÚ81-F[²S5þ]â©�a¢˜XÙ¥„“#¨Åµ‘ ˆD39_-R5 Šmg‰ÙýhZ,ƒU:mFŠ¥±Oì¥D Ék¯L|¹\¦Z­'ˆÇMÀ§Z29xP0: ©TÄÔ©ÐÛ+°¬?<V““Ã#°wÔjNGôôº»ÿ¾¹S°c`Y’(òð<^5•Ë,,[PsêߥáXmð_¥½½+VÐÖÖÆØØÅb‘R©D¥R! ࣣƒÎÎN¦L™ÂÌ™3éîîþƒ+±XŒO<‘þþ~zzz˜9sæüNww7ëׯ§©©‰R©D{{;­­­РAƒÿY¢(Âuk(J®.A_ŸÎ¦M‚—_VyðA•±1ÁÎËA_45Acíù/ ¬ú~ÝAöŠ`èy>Éd]@Ð4 )%®ë"C"ô%†ea[q” $+WÌf²èñÄØ»ûÿæ·ÈÐçä“O¤··ž7‹Ù„†JùT ³æôrÚ©§ñþ÷}‚k?ýU>úñ«èŸÖ…S+chp`ï~æ/ZDäJÅúë¶@‚jm%ÒQQhkogh`ˆL&‡ Ãú–|P­º„ÒGÓÔj EÑP”ºp!Ñ4q$ƒdEJ]HU5EAJy4OÕq<Ï#“É`[6•J…P’Ù,¡�ÕD¡DQïR)OmJHë¸ÅQPT’9›îÞÆ&òIJ tC¥VËS.bê¶éa6ª.°VÒ$½}½Œãy.Í-)·Â’¥³ÈOŒ’Ë¥©NV)•‹Ø–E__†-[_féªÕŒLeyzÃsôO›Éé§ŸÆgÿéŸXê[ýj�� �IDATºhííœxÒ:~sÏÃüöé'xË»ßB1ˆjµL,–@ƒXÌÂ);Äìb1IY¼|`o|æŸÙóÌ!–M·X¼h9ÅB‰Ä”<À•>j¤‚¢Qs|¬„ÊÀðW¿ÿ t…ñx#‘AKe°u ¹·Â¡ƒCì;pÁâ×qëOɺSðÀƒO°}÷!>þ‰óܳ“ /^Ï}ZD{{+“Et+M¤Bø(B ¡I‚(ÀskD††«©”‹y̸Bç¼>ž}êEN<n_ü¤ÏW?û}n¿ëzÖ]p!;Ÿ~˜Ý÷î¤oö4ºgMG.Ø6Aäbudimj¦¸÷0ÇGø2"TU¡ÐÚÔJíÐ(ÃÏlfnß4âÇ,cÇÞmÌè>‘ÊxËÖ‰”8Z6¤BÁDÈ”A&¥|öŽi<ò›‡xî™- „"€ûöŒ hÂ+ä™7w&ÿôÅïpþÞÅÅ—.eÝÉ'3eÊT.< ·ßñëNœÂß¾ý,üâ­R’õKøccÜ~ÛÙ°ñ�ïzûrN½âr¤ôp5ðP©8%ªc%ô@7;H¤ZPU‹_üì§äK’øûϱ{÷�§ž1‹È”L8ãˆR‰EKVqÛm·ó¯×ßÊcOnåÊ7ŸÆ¼E]|ýkײö„ãxëÛ?ÌC<ÇCìäKŸ'oºü2ÚL$]/žO¹P&¨ Z[;hmmãñGee¸œiÓú¨•ËxžC&—ÅóJÈPÒÚÑJ¹N6ãÖ¾üå¯ÑÜœeé o䟯û6zðn~t룼uñrÚZÚIf² Uš²)t£×W¸ö3ïcËγóù¶ xî¥-¬[øzö¦]$Y¶l1ËNH°öœ“É× dÒYô¨ G–4M;âʉŽ8ÕÝ£b«¢(–…'d=�††.TUC§R¥\­’H&°*A]`¯VqTA(øèR#Ó2¯VÄêhçÄ·ý5~uwÝú= ‡öpâ¹çB®Ñqý9!ˆÅbÌ;—¾¾¾£¢*pôñ•þO×u,ËÂ4Í?év;öØc™={6Š¢OÄIÄ¿÷¿’É$kO\ËÊ+ñ<UU‰Åb$“ÉÆÉhðºZÁÊ‚j€”àä‰J Dº4ëU-®ÊPRq+ vFèNôÒ˜† ¼PÄ…#‹û&ŠÞA,»­21xŽ_ÁP5‘"²â©6b±)¨j+`þQaUE%!Ô´ÕdǪ"ÅkOX}¥šxSS3ªšB‡ÑQÁs›xò mÛ"ZZ$k×B"¡ÒÕD¿;daÁ† <"˜ÈGtvJN:IÐܬþÞ$KJP¦×ÏYô*S.u1Õóêßí•'呟õèõÖh]üiZ[[I¥R,X°€ ‚€0 Ãðˆ G9ZÄØ0 lÛþ£E§‰^x!®ëbš&‰Dâ «¹\ŽU«VuÃÆãñßËkoРAƒÿQ5*• R†ttÄY°Àfóf…ÁA¸ývÁÈH]T7úû¡Q3ï/$¬Zv=?Pˆº¨J¡ün°äû>ÕjXv€ïI¢È! h:÷वëikîäž_ßÏšãÖPsk<þè³üø–Ÿ¡(µZ…×C&¡¥¥™Þ¾.ŠEO}êÓ\uå5¼ï_äúëßGg{ mí­ °kÇ6:Ú;I¤b¸žCÍ)¡huA4fÛLä õI 8Õ"¡IIàûF}B¬„‚0:2YÖ!Š|"¡âz.D.BhD2BU ]¥\­`Y†n „QD(%¦aPª”Ñ4l6K(CŠ…I„a‚"¡¦ üZ…Éâ ¦£½?t™ÒÞÌÀÀ~T;IÜV™, ·%©t ÷È1µšMlK¡©9K:£R.Éd¼ùñIâiƒPÖxÝ)§òµ¯~C†èêèdï¶m´4gX±ržÝLßÌùÈH㬳Îã»7ÝDF¤R.xÃ…ÜñÓŸñ¦7¾‰LJáœóNæ;ß¹‘ÝÛ—ÑÔÒŒnÇ(–}TEÃP,é,®ëRuªH5Æ·oü*?¿óëfg0Ÿ–Þ) H¸Õ B7¨:.Ò—dŠ•€/áfFÆàõëºqj³§Íå¥ /²gßNzÍ6^ض›þéÍ´uLçÉ߾ė®çû7߯ùoXÀî=ÏrüâãQ—TÆÀ¶:ÇŠ[xn©¨„ÒCS@’ ÑtÝŠ¡¨:5§F-òqeÖ¦$ .äÙGåÔÕÇóÌo¶rݯããßü‹“ wmáž;ÿ³N=Îù‹1l•r¥Œ*L,Ea϶mÌN]ŠW]Æ-²­­ì}~ñƒƒÌ¾ôÂÚÎΗŽG<¥Q˜#2|ÔÖ5$ÒØzŒš¸±X=žå«×}¥+^G"•cxd”DZËM原<ÎË—æ…ç_BW`²o|óùÌ™µˆüÐ Ÿ¿öï¸ú›™1ÇÆ4 œb•ÙÝÝÜ\ä–ïüdZá’7/¥{þB¤n0Y.Qq\¤®£ÃÐB<§VH:×cÓÆgèi6xö™mÌšÓÂÛÿö-v†²["žnerÂá®;ïã{7ýŒÓ“¼÷½—ÐÓ£ñÕ¯}Šâ¤ÃÈÈO?¹êDÀç>÷m‚p„óÏ?À7›€PМm# .»ì2öØKgW Åb±ñq2éú¹­9E¢ªÒ'•œ‚f¥Ø¶ñyþígÏ39Yãþ§÷ñÆ«®äo{/kG{Æ¥êLÔ\2Í]<·i3­Iÿí3œsÞ©\ÿ¯×ò·_ÍùkWqòEQ( ’MÆ1·Z¡¸oä”ÒZ E Ð#?¨¡ C7Q„z¤J¬‚¦ê¨Z=&% B| T UhT2¥R MÓêN¢D 3G ôñƒ€šç3ubj ǃHÕQ“1lÍ :8Ž.B„QLh¬¸êb­>–»¯ûW®ÿäÇxǯlô\&Š¢ljÇÿüh…t:]ðøS¬¦‘Íf[úü/V­îNMu#•ˆ°2�å*ºè3õªýèÃ#ƒ¼ðâ‹l;´_Uñ;§@«E(뢗¦Õö¹½µiN½-”Cl*ígGþQføóYÙºŒ¤1Ô6êQ ÿÁà ¡F ŠƒÄT ñ4†¢( btT`Y:ÃÃ^z)M¹¢`Û‚­[±tO…X2™ºZJ(—aó‹ðÐC×ðرCÐÚ*8î8ˆÅêç¨.â ††²YASNðïj¼¾:„| އ+LN*G…Õj†† ¡¹  ^•Ÿ¿Á«ëÞ2þJƒ¦i´µµý‡¿cš&¦i’Ë5VÍ4hðçãºîѹN}ÑÇdÁ…óχ­[aß¾z?8s&¬ZUw¬6âœÿBÂj¥Z$‘ˆ[xn€if(•J†IÕ©?VªE{üqÎ>ï\Œ¸ÂDaÛ² È´•CU`ïîÍôOíäÔuDZeËNV®^ËÅ—^ÈàÐ>öíçŽÛï¤Pªr߯·26RÄŒ¹´·O£¯o&ó–ôòð“{xࡹüòËÉç1b6ã…1Ú;š˜,° [„>e -DUT% Xö1n­a̤@?”D¦aS­Uqt&CRŒŽ!T"ÅäD d€e™„‘ã…X† ª‚fi ÐÒÖŠúJå#ƒZ•„fáT+d34U06Q ô@È¡±CtLé¦04„ÈÈ$×ÔŒS+àx8~d¬TÅŒ£‰€)]J’ÁC‡ñ½ MMM¤“)W`'lÆ&†0í†ÚFq\…þ O<økVŸ¸†lûj¾uÓ-XFŠÑ‘C´uvS­x¼´yK/fÑ‚cxúÑŒ—IqRvÈ[®¸ˆë¿ù-ÞÍ'ž…o¤0M„¨T… ˆT2™žzb ¿ºm;³»›xËy+?°D‡ÉÐø�1¥0_Äné Ðm„"PÔCc<tÇ£¼ûmÇc”&0œˆê`•«ßú÷¼é½—2Ò1ÁW`íÚS¹íw Zû÷îÀR-æN›ÂóÏäì³ÎD7Lbz3®ï³3x^ éûø$•ÌáÖ|<×ÇŠÅI&’ìÞ½›D¢¾â«JŸl¦ƒ‰ü™L–',ã¥M[9ùœ…|ú³·qñ¦-t÷uÓ³äxÎ͵ò«;ncåD™éK—‘hî@VBúÛ:¨–J•‰)!š ›0n²Ï©Ð?·5›@äºSÈÚD"†LbZ.ûw"â6V éù¨‰z,‰bd¸åG·0”â+où$‡G "ã„äšzÙ¼ëÇ,?æ|\j,;&ÅÙÕK¶B·HJ³‰Ü1úfš<€K+‰\›_ÚNQX<ðø>>ùù˹☌L0Q'¬ ¾º–¦P* èžÖK(]ölG‘-üêþøÆ·®eÕñ‹I'[°í8ßüú¿PrøÈ5ïç‰-/ðŸþ£cŸøèß1wÎ,òù"ï laøð¾„üp…þ©íD~D:ÖJ…2‰ÄïîÓÉÂÝ]SƒU‰cÇ[ikÍQ-¢¢`Ç-|¡S“54]28™çÐx·_q<Û÷¹ú£Tð¹ôuDzvu3Óçu¢Ú‡³zí?ò7ózî¾ç>~þ³Y¿n>×|ø2^·~=Â#¥  p¼ÀGO«”‹£(ªJ2“CQ „01íº Ý$†™ R-¡ª*Aá8UEÅŽÅ�AàFd’ÍÄ­ 2Š04!UPlÓB+nà(áú•ª‹aÆÐt…ªç ‰+@SÁ1‚²$Ñ·sÞÿüêw5z­ þ·!ˆ5‰�•Õ<²t)"¤¢k©zôΫHàò}غõ wß};vn!››Š3§—J7¡ ª·q¹œG®IJ›$†àù%JN‰Q=ÃÎËlÚËúL'3U“0 ‘±ÉºýðO.!!‡Ýà ”`û6ƒá i-C…¯™Ë¢\.ƒƒƒLNæ C•Ri*•r ³f,[ ÷üZal<bÃÓ‰DÈÂÈ(•öîUÙºÁúõJxöÁÀ�¼ü²DU%--º®Q* FG‹ ÚÚêb­|•˜€_)^eY ª‚‘Áøxˆã„$“0:*ضM% æÍFCXmРAƒ¯]a5r¹±X EQéè€uëê9ª»vÕw L›óçCÃ÷ñVc1‹J¥„ïûØv §æàûBÔ‹<…aHw÷TN>å”z^ƒçJ&R>B ñŸTÜ©–˜9£Ÿ‘‘Q>síg8é´×±æÄe,Z´ˆys±ÿÐÎ8e Šˆ‘/ìf÷®A|øqªµazºcüò®]œ°:Ϻ“×É­D™,Ž`Çl4µ¾6|b1‹±|UQ±c6–¥Q«yÔ¼¡˜ ¼@"#I†(šF<n€�Í4† B¥æºh†Eà…”J%LCC "…Ķb(ŠB­VÃ)×/ÐÖ¶v,ËÂu]tÝ@Q4\×%T0 „ E|/ ££ƒZ¹HOÏTv¼ðÉTMÓhnî$@Ç4ldÒF ¡k „§ìT¡ZBÓuœÉ éd’( ëÛQ®¦©ÒÞÑOG[/ïÜKkR0:>Bª9Gnê Åû¤³«“D"Îê5'pß}÷±dñbd(9î¸ã(L(¦cLŽWXzæ9<»i??½í>ÞõÁOððcOóË{~@wW3§Ï¦¯·C«pýõ?!T>uíûðvm&™N€¥’îigdx’l2M±ZÅ3CšM¨Ù6nüÔ×Ñ w¾çj¾ñÙ@U>rÍ'0Í&ξà~}ß]lÛ/ùÌçÏbËOISK†­[öð®wžËþÝÛùÐ>Xß*¨ê¸žëzD„PÐÔzѱ0H B˜hZŒ‰|™ñ±I¡’Ne2`tdMSq…$ÑÔÄÌy³Ï—IdunþáøÔg?K~ä­ý3¸øò«Ø»a|ˆþ9‹é\°ŒH膇!¶¦"ÐØöâf<Z§õA‘¢Qš¬R/bw¶“ŠX±$EéR µJl.ËH±ˆeؤb*?¿ë.V·˜L&ƒfG'+”*?½ý'õ’'­Í—¾úvºº,&óãDÂA³ªmpøð>:[[Ü7ÄÏþ»Æ EF \ýþÏñ³_~™X:C© ª ¾_ÃsóغE2ÙÉMßû>±dÄe—^ÅKÏ¢™`!­íYÊÅ z`qË~ŽaKÎ8w+OüöiFÇ"L…ÂQà ª‚—_ÞËú—`Y àÝïZDZ+AUòù<Édœb±B<Ç4L4M¥P˜D F ýýýLŒ‚�T]%ŠT #NµôÏè%•Ô9x¨Äð/ UØøÈvþÕÜÿЃœtæ[Q)t# aC&ÓÌC>Æ'?ú\óÁïÒÞfpûò8çœõ¬?i ˆ€xÂÓÄ<¤ ªà{ª¦Ô'Ž!x^€çyxžŠ®™Ø §Z%Î „B¥RBÐ4¸hŠB !”º^A¯G­Ê5t</Äu},Û&O!Aè¡ê*†¡£ê‚À¯Qs|áau´qúe—6z­ þ—¢˜´ät„‚ÊNe?®'•š‡®¿zÄUσ={àù&Ù¸q;v줽M!›ÞJ{»M$% 2dhh„š¯€ÚJ6“ ¥i‚‘Ê.öW·3Ö:ÈĘƒ:¡’¼IJ'šúh É„2ΤVa@ñ¾‰E±×TÖªïû8ŽC¹\fhh˜a‚p’3±` ½Càùð ‚›$étö¶*¶18¨óøã FF:;aéR)!Ÿ—Œ ÃÓO‡@Ó ÈfÓH©!eÝå’ɼº¶ÒGQ=®©IÐÞ&"¢Rq™˜¨`!CC/k&3gÖ¯ 4hÐàµÆÿ¿8^=b©¥(JÕ]ª-õrG¤Óõ×ü…ÕúWðýUõBHÄÑ4 !““")I%3¦A–Ð4õÈ ±ŠªhHé’ͦÐT“C‡Yµj%KV®á†ïÞÌoŸ’|ùñá´3ÖPšŒ³dñ±ôôçèšÒËyœ TxöÉí|äÃ×ò‰^Ç9O¿ÀyçŸB6Û†¢ÖËb˜*Ùtš¸A Éæ¦R˜(11`êCO¡è*šª…^袪J=›Kú„‘Ц™h‘Ä«9Š%a(AF(BAH‰¢@µZÃó\ £îÊB!KbY6BTÕ •Š-î5YÇÒt|BFG†¾C{k? Ó T.32’§££EÔWÔЭ�EhšŠ@Åq*•"ªnaZ ™LÓÔÏ’ÚŠnØŒzø®%3gÍ`pï Ïo.ÑÝ=•\g'ã`Zq‡èíï¡\)²hÑ<ž|òQ"é’ϲté¾}㌠MaÙâÅÔæ¹øâ«¸ëÞG¸à¼7r÷½{QTƒúÍÙÙš¦\,‘¯†Â,N}Ó|ím—³fÑ1˜Â¡»€,mÉNTÒÝÕÍäø÷þô—üë ÷sÝ7®Á0Qvß3ÈÓ/:|ì3’ʵR bh1øöÍ?äù{8î˜%Ü{Ï}Ø·3ûY¼d1N±ÔEþHF F¨(¨¦EÖsÜ‚0 ’‚ÂD×õ˜?Q$©T*¦†ªdÒIœb S¤³­dš§rÊ)+yàáíBCAPËç±Mƒ9gžÁþGžâ¥ç^dÒ‹¨ °Q ê©õbFc·0¾÷�Ùl’L{;a B%RUjÄ’]3ª†¡[DºNe¢„"tš;û¨LÖ@M ©*HI…ø5—©ÝݼÿêñÜÆCüó?B²N:q Ý­MŒìÛEs¬ƒ¶laÖ¼9‘Ív°ý©lýÍ´¦›ùÜmcÚ BDœ}þ1(ZÄá὘zËVÑ )=4%†‚ͦgw³þu+ˆÛÍ$bUòãð·ïü$ÜÅÛßö.ì;Ààà8×}ýÃLížÎY§51ïk¸ì¢÷²dÉ "5`tlŒukO'h㟿rwÜù(×}åoxÛ;.Àõ‹TJLSÇõj˜¦NE85Ë´±, !TÊU‡|~ŒÀ÷™£%›BÓuŽ’míe2_¥§kŸüäe|äƒßãu¯;‡‹þꮼè=¼ù¯OãÑo�¡S£©}gž½†Ï|á&N;óL¾sÓwX½êËìܺ‘ááCXféT~PÅs«X¶†"C4Cbš:ŠAˆ¢¨G DGî}]WQŽ<¥¸€¦¥¢ª×­¢k(‚šëáz ªn *Z=§K†¨BDzbÄlõˆÀêaš&a¡iP@‚¦™è†ÄñÊÀ´Éâ ü¯0+&j¬„… %Ò"(PÓR`w¢ÙW…¸êº°}ìÛ'ð=ßkg|b Žð1›ö“T2h¢Þ)–¡PÑqØ¥íg·÷(”çI]ô*Ó™‘šÁ”xžP <Üÿs¶g$"|5 K¡&µZHFD¼v*•J%ŠÅ"QTïŸ C'ט?_e΅惈áaxñزU²di@.18¨°aƒÄ4K— æÎ­;PGGáÑG#6m’47ט6ÍÅ4“ø~]Lµ,°íº#9^=Âê+±ííu‘Õ÷#Êåx<dtT²ooD: º.hÔjРAƒ¯5Aõ•ìçWê¨ÿn¿¿‹_jðÿHXuœ¶GʧêÖ·N«*RFXV=÷EU4Ý@F k&žç¢ëz½ UÐÖÞÊàáLÓ¦µµ™ÁÁA4«•O}êÓlßù<wÿâ N\»š;wR.èÜ|ÓO8ï‚UôôLãðáƒTªãÌ›±šé}]LéÎqà ñ£[ï⢋O⤓WÐÞ–#×Ô† %U×Ç2-ªIŒˆ€PêÔ<¨yD!–e€¡+’ZàÖE ËD³,d$ðÝÇõÑT·æŠ'iÎdÈã×\Ò©4•šƒïÕCÄQ•#…­ªªaš†a¢(*º^¥Z'‘IŠˆÐŒºøáÕj•Y³çRq= ݤÔ0)d¨ •0øA€Hì˜I:£¹¥‰Í/m`•ß…ª t]!i&?^$—É WÊ ÒÛ=…M?Íä˜Ã.<TãŽ]ÎÁƒûXkž@(}ZZZH&löîÛͼ9s(Çèénåþ{ïá”ÓN£\r°Rq6lØÌî.¹à†Çª ž`l´@àG¤ÓM½vìåŽ[ï£ê7sã§m×8W}ô½È@e´,ñ4øÒ×~Ê­ß¿•훇±ã6ý3§b&lJNÈ–¼¡s.<‡š„Ω ɵ¦¹ó—Oa¶d><@.q`ÿA>ò¡wQ©–ˆB‰„ˆ(BQ„€PJ¤/@…@Õ4,˦P(R(""‹¡ëžŒÐWâz†n Ä“œÿ†‹øù]ïåñ{îfýºÕx•1BÏ£6>Bï 'ÒÚ5ƒgvlçùÛ9sár*†¨Éòà‹´Å$;Û@Ѩú,?$D¡T­Ëˆ’6Š"„Ž®™L”†Ñõ8þІÕÄ=;ØøÌVÞ|ÕÙ´´4QªŽrûí·qÓM¿åÊ+Žåê÷]E(RsF)F0Í$®ãÓ–nG7,â"`dÇ.ÿåýÌËu’©K¤ùæw?Í¡½XyÜ|w’TFGÈ))˜Vˆ¡Ô‹¡Ÿ¾©K@4³qÓ/ñ#U“(zŒšëà’¾¾~œJÀÜ™KyâáïcÅBfÍé 89LOw?•JÈŽíøÊ—oåÃלÏÛÞs%ÕÂAˆ<,ËBÓ5òù1,KÃó&& är92ÙfÊÅ2Aè’L¦Hµ¦hÎØ^€Só ]Í ¥FÌNñî|”üàa6oá;7ÞÂWþñŽ[:®NÁ;®>‰î9Eã~Ï<¿‹7\t Óû0³·ƒË.>c_SÃU1LSʺÛEQþtÇ¥jNµÇAJ‰aè@@¸‹ª(UE7T‚ Ä\„hšŠªê~ý¹išDRI®›€<RÉQ‹ÙX–‚§×ð}_HÒjƒÿ˱R(¹Ù$ -åa&'w„U’©¹èzŠzþ‘à¿Ã™Eງ¶5…uëΦ½-ÉþáY$¦ŽÐ¼ Êâì’F"|ŸR¥Êàhç_ç¡góÎňÍèàM3¯`IëRÚíØ†}¤ÿÿÏ}§P†äý<VÁ¢Ýê`Nb1åµãXB°}ûv^zé%ŠÅ"ýýýœ~útu÷bš),³~.ÚÛímñ¸ÂädŒýû-¢HP. Ë—+¬^ --‚(‚åËUŒxôшÉIßW‡R©þ÷„xåQ¼ª\«š&0MA&SV…ˆ‚ˆrEpø° ŠÉd=;¶Aƒ 4x-¡ë:¹\îèb«¢üçÇL þBc‘ pœ*DߨV«$I‚ þ¼VóÐTIä‡x~ýD™fŒ(ªWÊ®V«x^ÖÖf¢HP,ŠDÕT‡ÆùÄǿȊ+¹ä’sùõ½wÑ’í!’óçÍbî¼¹„áLBYa÷ŽAŠÎn®<ót®ùÄ[xì±ÇyüɧxÓ›ï#Ëpüšn.8÷,XF©(æ IÓ æF"ˆ$žppœJ¤áù¦¢¢ˆÇ(–-FFǰì8étŠ–t†HJƆCÆÆò8Å‘”´d³BÁ÷BTUŲl¤¬;|?@SM¤”¸5UMÕHØ6š¦à”KX–N:˜é˜Å�� �IDATž(drr§æÑÚ–£PªP®ÖðBT“…Œ¼PAõXCW©xUÆó#Ì›×Ã=ÅÎ];Y¶t:ýS=ššsØwUÔ‹èÄ-‹îî #£E:Ú £½ÒÐqÚ:Z¸ë®;ùë7]† B×TŽ]y O<ösföã{Ë—/àæ›oeïî-4·uR, ñŽ÷þ5§}/4XwÒŒŒ188L&ÛL~t„ÓÎ{ c‡ó\õ¶2_ª2öÜnn|+ÕŠG…I_2^dÝêرùA4­†y<ýô~N9q&ŸþægÁ6©y.O<±‰BÁ§½Ý"=¥™±áqò£ðážMS&M(]¤ QÏ×a}@¨ªŽ®HÙ fÉÛ¶Ðu­îPAÖ·a£R*T!Rˆe™xÅ2Óæ/¤¯¿;ï|˜ÙÓ{èhI""‰KPÏc÷ô³¼µ•n¹ƒ½Cðó;Y~ú:ömzŠÂ®Ý4Çã¸RBR«yÄÍaXMÍËE"<B)‰"Ó°(L”ÉÅrÿ{ï-ÙUßù~ö>ùT¼9ô½Ý7t”:¨[ÝÊ9 !„@D6ÆŒm<€ÍØï öm`062Dcƒ ¡„BPnIÝêVç|s¨|òÞóGµôÆûû 6 ×g­úãÞ[u«Öª³öÙç{¾¿ï¿ØÍ»~ãÝLM+®¼âšõiòð÷⺗ó¾÷þÍê T6O¦ªTuò~7ùb‰4Nè2<~ô­/óà]w°ir3ç¿üxýk߉UÊQî-°rì<ZÍJ)²4 gˆ›mAÑΚ`)Èrº›(°™:~‚?ÿðY¿ÆáúvpõK.bfê9Ž;„ëjŠÅ"½ÝƒÜyÇ7yǯÿ!7Þx¶¡Iøæ×¿ÃE½‚Çž|ž+ò¼û7ßÎÂÂ~t’P[^"Ž#û)• ÌÏÏáyõz•J¥JOW'ŸÜI¢×_­V“$ÎX˜«*a¸ïއضýBÊ<ÿÔã@Æÿéã±oïäÁûïfêÄÓ(m"¤Geaž±‰.»r-·Ü2ÃÒÜNž~t'û廨¾m·½ý5¼äš+1Ì EL+ q\“8©×+¸NŽœß{:bB$ñ‹m­/ˆ®YÖŽæR¢”&h5QJ!¥I–…HÓÄv\Tš§I{3´!Á4h5C„0èééE “z½çy˜¦‰Öm7¼Rš8Mi†RB t® ;tøŽ0Àò0ò=ئE›”F}.ŽYFx=`ýÛ®JÁÜœfj &'5kÖ `çP,æHí&^*0·?À¾ ‡bÁC©ŒÊb…SÍ<<ÉsÞ٘ø·‘ÑÂ¥lî¿€Õ£äs¹Óçñ4IYZ^"l†¬(0àPöÊØòg«övåÊ•F{â©\.322ò÷Šô²¬=¶¿~=lݪ9yRrÿý’bQÄ`ÛŠáaÍè¨Ä÷Û‚éÐŒÁîÝÅ'NX!‰cM¿¦PX–‰ëæÉ2ý/ú^~R³çyX–‰”6¹œfÅ …i ff âfg¡V‡þþNAG‡:tøÝ ñâ$e‡'aµ§§—F£À Ÿ/­V‹œŸÃ0 ’8­i„!SS x¾Ëèè ªµ IÒv¸FQÛ)šeý}”¢”¹%Ác=Á#?šæõ¯`aq†ï~÷»\}ùK)LÒ4<4o“ÏçØ°n ÷ÝKÕ)zûÎãœó6²îŒ•ÜtSÈ=÷<Àw>Ã?ÿ»¬]]fëÙë9÷œIÖ®`ddÓ´©T¨ÕŒŒP«-³T©ãû=½eJ]šµ˜#ÇNbY5„´¦K&X¶‡)M ¾c¡…$ C”ÒØ¶ ¢(:-NiL#iófm€ã¸(ZdqÈÒ¾ëàº6q3}jŠ3vœ‹Œb¦æ1M‡Õk×°°Ô$U!Bj,ÓÆ±<¢4¢Ü•'Qq’e ž—CJåôõ–ØýÜ!’0! d–"TJ 6nÙD®ˆp¹Êr#b|bš iæÉ|V¯çØ‘}Ô—q,˜>9ÍÛßvßýþC¼ñ瑸0ØŸ'I»ù«}‚sÏ_G3Xbt¬€eÔY»v”÷üökøÀo'nÄDi†aHúÊš$krrzŽÙJJÍ›ÞzñÁ?åú]ÜðÊ«8sÝJ>½—‚W]¹ /«¶^Žî{�ײ9u¬Â¯¿Ï~ñ¬_Wä†ë_†04Q£…븧E¬!ÛÑ ‚vnˆJ%$Iû{B`;iÒv J£m‰/w Â!5™H~S4«u&×n`úÄ»žÝ…½u½ƒ=„aŒëçiÆüÞÃ$qÊù×\Íââ)øÛÛ0ã„Ëv\Æ÷NÞǪ±UP(bÆ!Ø633s¨œË*äՌð,A†F"èîí§ViQ.÷r÷×oç«_}ˆ7¼þ,ÆÇW²°0G¡hñ?ø¯xn#GO1[_¦ËwÉP„IˆH긦ËК ÿÒgØûÔ÷ضy5×üÜyâ@‡çZósüÕǾÌ?ô~²0£ÒHÚ‘Xäü.,; :uIb“z-âÎ;î㶯ÝÍs»gxèûŸdËö ææ÷„5öx¾-\Û}÷»Üüºßft4ÇÍo¸–٠ahƒV5dhh€|Á#X ‚€,Í#Ic‚ …ã8X–ÅÐÐiªéfzfŽ®Þ.²,#KS9çøL®^ÇrSñáÿwLësÜzë_“$·þõ<ðÇùƒ?ù=^ÿæ×ñªW\Ä}w‘™D7W ÙZfvþ8–epõW12l0¾ªÈm·Ÿÿü;Áº3VpæÆ a„Š|.GdZ­Ï+aÛÎéÈ“ö…dûn I«Õ¤X*P¯×0MÇqH’ß+¡•Âvâ8!U`ˆ¶Ö–éµ×I B˜ E<ÏÇQáy>Y–aš¶eŸ>æ3šõ&†má˜6*K:g­:´³<Ãó(0@£qFm/F¤°íÁ¶/S‚Ô!-?ùÍv’ÀÌ,œ<©Ù¼Y2<ÜK’tšÅ%XœâÀ¡²ÆÆ¶‚¬Âá©Ãüpê<Üz˜ŠSeÝÛY]ÃZó"F ùœDÊ™ã"Éæ–瘫Í1Ô7D—ß…!~öµ¾¾>zzzк-pþC‘Ó0Úî̵ëÚÂâÀΧa…‚fýzÍêÕí±ÀÇbFF4«V ’Äaÿ$©btzº5¶mà8¹«ÿÞ’í8¡v4”çÁø¸FHÍ‘£‚“§Úe\RB>/øwÖ;tèСC‡?«ÂªÊ Ÿ+R¯×i6[xž‡”‚8IQaŒi¶EB0X±bÃl6†Öút™’‹ï¨VëT«U¢(Åqƒ?]Ý]ôöv±jdŒíçl!_°9°ï�½/½˜åʆ4ˆ“žïsìøqÒ¬ "bh¸‡‘Q—õÖó¶·k|àaîúÖã<ðí½|á“ în×qÈç]J]E|ßfd¤ÈŽs·°óé°iÓ %غu’5ìÛƒްj\“ÏåÉ”Ä6¥bž Q!°iÚ(¥¨×ëäójµaQ(´Ý¼ ±,›êò<ÄM¢ FEŒ¬[GÜjòØcµ›q5¤_À°lòųósì}þw~ë¼áæW1²bl¨T*ôø.JgLL¬"hIV­ÇËy4Ã+W ñøã ,ÓÃÔf2„hÒÕ]&l4©G1ƒƒ4Â˶ØóÜnº»»iµºººHâˆ(l‘³sò>\ÄC?ø8Õ†Â0\´¬[7Áyçmá™?äüóv°TY lµ0Í%Þý®×pÕµçÒ:5Í÷¿pW_p1#W]‚?4L£òÙ?ý8ß{r?ÛÎ*¶vñé¿údÎafî Î\³‚ß{ïë˜ÙwTH¦aæäažßõ<ƒ9‡É•6›7l ¶øY^ùŽ7P.æ™:uˆb)%-R†ëb d€�Ù§þÅ B´³µ”Ò8N;ÊB)EÜj! «9â¹$Í:q¢Èu÷3>1JΜ}Þ…,ÚMШ0ºá ¢LB©Hýä"$‚¾-g0:t)S·ßÆž'ŸâÙgv2¿<Ï…“c„•RiTª©./3YØH<¿€çû8ÒÂthǦ»ÛåÑGæ7ó¸öÚµ|àCD,‘Å!:•$QDÔ è*»d„±¢ÑHè]…ÌR\òànáù'bý†q.{õkY–ÝüΟýWš%‡ë¯¹‚_~ËMÜ}÷}<ýän.¹lÛ¶¯ÇÔ}|ê¯ÿ–‰Õƒ\þ’3@IR‹F£É­·ÞIœÂ»Þu=›·n¡Õ<A6)äû8p`?½}íuàä‰c\ÿ²óxûÛoä‹6„Ó|— ë×ÑÓ7‚_(pðàIçèê)a¤®ç¡…iZí²*!Éç Ha"”âÜsÏ¡Z¯¡”Âq=†q­<Ò°±mÁ«oz ŸüÄ=¼þ5oâ+óIþæ³ÿï~ï‡yýk~“ó·~†_ºù*¢¨Žï¯Â°=Ò(¡Tvyõ«_Æý÷~”…ùE^óê«yÍk/å~é=ÄÊdª…ÖŠB>O­Ú8í-a>F“b±H–µo"8n»tÅ÷ÛŽ}ß÷iµZ€Æ&†á£T†&ùœE’)Ò4Ã÷|„”hY¡´"I2r~[<£&®›CIEÔjUÊå"–e tJ±XÂPiXÄ*융:tèð‚ªD»ª <oS8XÕ&iT§QÙ‹nd”e/F~%ä~bCëvaÕâ"ÔjfíqlÛX–ÉöííçÝv<ñlÚÆÂó7dçÌ£4Ò&ÃÝÃ\Rz +õv˜ŸÀŽ} ù¯,I2 ÊEDDt™]DÉÏž¢ö‰©ÿýý‚óÎôöÀY[`zFcÛpá’ÉIpœ¿/Æöö FFósðü^�…ç FW zzÅ‹B÷OË„á â®m!ybRpâ„fß>ű£¥“°c8vgÙèСC‡:ü„Õ(Š€öõ a·­fxÚ‰©_ Æ7m‹,SmwªÈP*Ã÷= äV¯‡®—Ã0,²´¦ÍÑ£ÇIb˜ž>ÅÄÄ0gž¹‘, 0ŒŒûöSYš§Xr š-†‡F)æWñÈžÀ{o‰þ>ÈtB«YÃ÷ ôuóêîKxÅ+/ í_äá<ÎÞ={©VkLOŸäÄ©yο`5ýC.޳õì J%›Ze–©“§ð}Ÿ¹Ù9Ž;É‘c'X·v==Ýݬ]3ÁÒü¶å�¥³ïj+•’e1¶mÑ×׋RÖŠF£F³Ñ`¨;Çñ…i\Ë&‹"²$eïÞ½\}õ5ÄQ„È4ŽëbÚi’P(úœ}öVJÅ2Z iR(0Œ ¡ûñ<““'¦‰£1Ò,¤P(²´P¡Ym†)ÅBµÅ€8nqrê$™:/W&Šʽ]˜–àÙ]Ïpã+_ÅâÒž›ChÉôÔ,}4ku†Gr¬ÝÄãìçªk¯"ŠšÌŸªñ’k^ÁÝwÜ; »XF©–%Y^šãŒ‰AÌ.vþÝW±EÀø`‘©h‘á>Þÿþ_¥ÒZÄ)ÛÔæf¨…Q5Qª…óícç·ï…jƒÜÐ0÷~þoë04VÀˆÒ0À’`JM41-Ó4Ú¥UZc®e“D!ac9BhÐàº.iEíü_Û¶²mÁÐ/^�h ²Œ˜Œ0UèV“ÃÇ1ØÛEïȶ­xäžoâæËôM®…,å‘û¾ËððFWuê:Q\pÑeÌW–ˆ“…VƒÁr³ZµA½]*cè ¡MB)ZÆ1*ìÝ»—k¯ÛÊ;~íÍØ2¡Ò¨RÌçZ“D1Bk ¡× ,¾wÏÓ\½u‡ö?ÂÝÁWžÃæ ¯„þõ|ïþ=üpÏnýÜ_rÝ;øáƒò«¿òGÌÍÇüI×Mì8ç\–þøÏ¾Âïýîëð “T øpàÐB ×]»‚ßøOo% „Q€eY(•²¸”²~ýzúú»¸þú«yéµWÑU.²0w”®ƒ@k‚°IeqŽ+®¸”wÿ§?äo¾üE~õ7ÞØuïîEж‹8b|?GÄ(-@%$I˲Éås´Â&Y¦è ‰4µVLøü꯿“ñ±uüÜMïåwß÷ßxß»…Ïúÿf©ºÀ§þêk¼í­bb•ÃG>1A¥œ8~³7½æ•üà{ÏñÑ[DȽ\võq”°íœm´ê5 �!I[Mâ,ô} +ÒÂsÅ‹­ËB@šf§×HÃ!^¸°5P™nÇL(ˆ“Œ4ÑHÓ-ˆ¢?_Àò<”jb ° M5°m\Þk»RM ·Xƶ ’$B£p|Ò ¡ –Ô³V‡þ÷Íœ™Ãð\DÖ"1:EguˆBb1CB ˜fÛîBÊÿ³iÍíõäéìM­ÛÑ�RBWWÊúu!£ƒ!GöÅ<»KS­ïäTßQnƒÉþÕlï;‡ù³É…cœj8Tc…þŠ¡ZkZY‹™`†ŠXFyŽp°±OËÏÿ1q€|V¬hg¨ 6r9þž‹SJ¬]+˜š‚gŸmgÒnÜ(8kXÐÝýÓëú<ÆÆ$'O*„S§4“«[6ÃæÍ`;µ¢C‡:tèðØ‹¿nk&RJLÓD`Ðh´Ò P(EacÙÒ4�RÃm±JK’,U­ùB‰GŸÜÃñã§(açÓ»¸æÚKÙ½{›·LÐ×Wfqq™8Žq¬"³Xœ8sÃZüîƒ4 q’bXqÒÀIÍj‹f£NÎÏQ(çÙ²­ .z©ÊZG ËÕ ¥rÅhÑn×ö<—V£ŠÎs³‹¬\9Aî±§øÌ¾Ì}G¹üÊËp\Ÿþž.*•yÒ$&çš$I)M”R(¥NgÊAˆm·Eh!ý=Äõešµ&cc+i,Uyj瓬[·Žá+¶Eª®¤:¡Ù´y=cc£Š>A³…a˜ø–eÄY»<K ‹={rý;ÐRÑÝ×Cšdd‘³=LÃdçΧXµª›ÝÏíæçßüfª¤" ÛŸåÔ©“(­Zb ƒþ¾A8Ìh:S ^vý«ùÔ§¾ÀåW^Kš˜XfŽ’ëcÉßüú=¼þM73uô #ã´Z‹è�ˆ¾iQ_\•µÌ!ÅP’ˆˆL‡ä-—°±žCW©IÂ`7aؤ2ß Üïðì®= ­p¸æšËùÑw~À—>ÿy–à;6^¹‹8©ÑhÔÒÂÀ�­ ’•¦hÝÎMÕZ‘$ ÃÔí¸†,Á¶­s1ã8AšÓ îJ“&!yº¨H±r|Œ¡Zó  yÎ>{GÂôK4ç«Úý¯çÛ°´f÷cO’ÏRü-› ¿}?òÌѹ½ÁYW]Ž:1…ŠFÑZŸÑÓÄIH#Œ‰g—éíîå—ßò Ç`qzŠJeÇ5@(Ticš/\¼hrŸ¥™˜Ï~ìï8±q/wíœËê³·qp)¥Y™åÀñE.¾b/¿êlâZ¥$K‹ ƒC°víJ‚ åž{¿a7¹ò¥/%hüÝ×îâ#·~•›^±¡QÁ[ÞúKDQƒÝ»Ž°yëJWñý<ËKW_uvû˜7²$¢Öq‡å¥E‚ I›Ô+ÇX³æn~Ó%|å«?â¦7Ü€+m´6¨Tê€hG4hI–´Ç£(!ŽÚNÏz«EÞu1D{mi… šQƒá ~ôÈÃøî½kï·MÐX`ÇÅgsþöóøÎ·¾Î7¿þLÓÅö|ú{¨«9”jòs¯¼žOßò ë×m¤X*GbÕØ*’$EJƒ,Ûö0\!Lâ$¡\ÌS«UȲ )Zk Ódiqž(NçºYd*#IR–ULÃÂu},Ë"Jbêõ¶e¡²Œ Qoƒ†‰ –Ý.dzCdA­ÓvÉ•!*¡ÑlQpJ ÒèdçtèÐá••† ¹†k‘Óe›ˆj0œ§‘BéÏAÊõXVZg§_yÚ÷*Ú{¹ eYP,*W£•B)NgTk„hQð+l¯0¼Æ‰ÙSÖ^ÂÂ<W¯¾Ë†¯`µ¿†>³Ÿ$pXžT« }úü¸¹˜))³Á,kh¤ V):³ßB€iB¡�®ÛN¡-´þCש”í,Òuë$>¢™™i?aÓ&Áðp»ê§¹ ÃsadDà:’FCQ*i6¬Wœu–d|\t2V;tèСC‡?aÕuÛ®Ó8 Z!žç#¥ø_r ©ð¼öXªëØX¦IÇh­±mÓt‰ÂÇñBQ¯¶8pðë7làðáCœµå X\XÆÐU."1h5ZÔ«žÓ…6MÖ­_MÂÌÌ CÃ]RàZ6(…Ôšœí`Õ¥y,7O BÂ(AhI>Wb ¿H˜$¨,BJA«ulS’MÊyÛËsãk_Ëèª5üáþ’'ÿìó\{í¶nÝÌÈŠAFVŒà˜1õJFFhR´P˜–$ ƒvæ©ee ¥Á³,æççè¤à‘9Ã0ؼu+iŠZ³I¢�ÃÄõ]°A.ôtNh;Çu¹5‡ã»tuu3<Ü˱ã³4êM²,ÅóJ˜†Euy™á!‹°VåÐþ}\uÕU|ⳟË Ñ ˆ’®ïP.—ùÎw¾Ðí,Òf#dÇöó¸ûÎÛ©Vä½"X6…²‡“Üóí;ø¹W½Šêò<*Ë8wǹ|ô–pÉE—R. P™­ãe²T@ –ô1¥‹2]t–ëwTbÐ šä<‡bÙ ˆÐ)1…¾nú¸óŽïñÆõç²ÿ@Àê ]`j&&×ðüáƒ-x~ÏnÂÊ"q%!9߯s<tª‰ZMÓ$çåH”…Rmç`‡dYÚ¾A`€>]heš&®ëE1RÅí¢32¤)ñ —$Mxü‰Ç¹æê+°sIX£g|·«—£»÷ðäCá86ãg¬Ë¢«XfàÌ3 ‹yì‘'X¹e#Þð2}è!¹ã.†‹elà j5A Ta:F[˜ a@šÅœœ:Œç˜(’¤Mò~ÏõI“KHLKb ÓD­”áB‰…Ùˆ=sÿãƒoeÓÅ“ÌE?vˆO}îo9yjš÷üöuÔwaÓ˺µëpmÁæM£\réeÒão¾|/ï|÷/3ºj„»ï¾Ÿßÿƒ[è±ùõw¾–ɵ=ÌÍÎ…!c«¨T*˜¶A³Ùbzú$““7a0?Œžî¦´hÖ”Ë% #¦ZiâL‚°ÂûÞ÷>οäZfg*¬XAÅ€Àó|â8áÄñSŒO¶EgaR.ù@[¸ÌåÊ”ò.QÔ@Ëa¤ÄIŒÒk×­&ѰeK?£c«¹çîï12êR. sù5WÔè-w“…KK³$­Ö,Ã=ÊrÈý÷>Ê3Ï<Ãûþ¯÷ ,3€ÊR ÓĶlâ¸íRW(â8>£jcÛ6–ëbYiÚþ½”•) Sà¸&­f Ë6±œ©ŽÈ²ÓsH²ZµÎÀÀ €Zµ‚çÙ(Ö[ÑŽVA ¤ñB1VHk\ß#NBL@ EGZíСÃ?½«3¦‡Ä£ŒVŒ ,2´n uFc?B´'tŸ†Û^׿R¼S¸n‘4ˆ–êÔ–r¹ ÓÐ8Bᦰqƒ$2wÚ…×]geïô_ÀŽžs(P�ÀÐ`š,ƒFr¹öx÷?ç’T(Z´XH¨$ºì.VæVýÌVýÿAÊöØ¿ãü‹°†ÃCpÎ9‚4h [Ï‚•+ÛßÅO«°*Ø6 À¶mxžfãFÍä„À²:Ç@‡:tèÐá'´¢ÇѤ‰&ËZk”§KTL¤!ÛîÔ,ÍÈ”8]†�¶éàºI µ¨EÎ×8¶ÃÌÌ<ð�†ÓCD4› *Õe–––¨U+ô÷÷áXj±•}Ø– Ž`h´€—ÏsôØ>&W_ Jw‹®È!} ”d¹yœR٤Ѫ 0ÐÂ`qq¥ ±-ÏwZ’Ä­Ê2ý½$Q†éxÌ?N_ï�¿õc|õ¶Ûù½ßû6üˆ7Üü2&ÆFé)IL’ÏçI’„fCãº.‰!±m¥ÚmÝJk–›5‚VÄŠ±U 4F”°ní:²4¡Õ )÷öQê*ƒ”ÔƒǶZ â$Ae)  Žé r9Ÿz«I–4æ™='h4êxžCWW™®r³3sŒN®æûß¹›B!ÇæÍg"¥`zz?׌<ÏfËY›¸í¶;©ÕꘆE'Ø–ÃáGXÚx&ëÎ?‡ ¶HË Ùqáîºã®¿á‚xÃγzr˜ÛÎâ¹gŸáÚ—ßÀÂô,¸ BhrÝ~Î`jî *š»‰åJ,nchð]HTB´Hšy<‘R°LÎ:ûlî¾wO=º—#'*üɇßÂî‡÷³nýfžÝ³‹®¢ÍΧžD¥¹¼‡•‚VˆcºH¥Ak²4#cêQB–%©H¢ -~9A�!‚¶;Š"t–" *Ag1ÒvÛ¡óÔ³{¹þú—’¡‰Â3•äzºé)wóü#ϲvÍ$Å‘z~/KÇO²bó:Ní{žÙ™9¶¼æTDÆŽóÏÇ·,îúÒW¨.ÔEd† B LÓ «¯—,NÀDŠV®#IÒ™@ ‰Ji!Lƒ|ê³ûá'ɲ'"˜÷,TßfúTžc{öqüéÃ\sÍzn¸ìlêó‡Ÿà ïG¢�� �IDAT·ü-å‚â-o»ÛÑÌLÍÑlNqÍu±kï3|ãλX¬†üÚ¯_‡—S|îó·09¹–R~”B¡LWK3h0?·D­VgÕªQ°ÉðŠ.–g!‰ðÝ2h•jÇÀ÷’$`pÅ—^¼…>¼“oÚÀÒâ<Z+êõ€þ¾! …"ÍF€”’z½‚ã8”JÝ$qB‡$މeÛda„ ?ïg ^ùÊë¹õ£_¤\(1wjšá å2jÐh40¥¦˜Ïa¹>–”,-NcšP[–˜†dq®ÉÖ-—ñù /ÙaÎܲÃ÷¢EFšDäò9Ê¥Žã’+ôPYX¤Z­R*•B¼(²ú¾ÏóH’¥R‚ei ™ PÊ‘aZšfP!k¶ÅÒJu- ZÍ*­–ĶšˆV«E©ÔE>Ÿ'Ë2–——XXœ¥V«0>6F¹§›ö{•üΉ«C‡?ÎO Êe|]ÀeBT‚)êõSÄqët6¥ÀÁÂ¥„¡30L2)Ñdíæ-ÚÒ¬Fˆˆ,^&iÔˆªuZõ õz„e ´ò(šý¬šD­,spôQ”±’•=# [+Ñ (K!‘èvºJA«QÔ.$ú§ß_g1 Ý`I-Ðít3žg¬0Ž!ŒÿÐ1�ÿZ\®¸.¼°ý³eqºpö§Û±jí®‹/†sÏmß¶­±íÎ1СC‡:tøÉ!kµ&õfB`96Ò6‘&4š ‘/p\—4M‘@F„­€,ÉNëJlÛ"—óÛceBQÈ{tw÷pèðq·‡ûx„aÊ]>åâ�ƒý㔊]4šËضI³Õ" t—s¬,qèТ K4–°ñ¼*…úr+º»{X^®Zk„CB>gãºRjš:†„b!‡ïhÖ‚ "hÖ(æ< 9WyË›nâ{þŒ¼ÝÅÿþ—¹ë›ßæ»ßÙÅÞýujéÑ6(SÑŠ[„ADd¸Â¡dåÈê!å|Ó+`˜ûÃvË(á`:%j­„Åå:­(A&Žçb˜&ZI¤pñœžç`/ä‘ä .ã“+h6Õ…Žiaç œ¼Í‰S'ÍìñƒœsÎ6z†VÐ50ÄÉ“ äSHêµ:ë×o ««ÄÌì,]Å"y×fdå lÛfïþd˜´R…J[ŒõáùpêäAJe¥bjõ%Î=o;33SÌ:…çydÄdf€Ì;ôõsøÈIT- Ç²ºI=[$¤I*šaD„¸9—b>Ð.Q"Øzɹ(ÏäÖ/~™ÁÁ•¹Ì,M±ïÔS\zév&F <÷,Þ¿Ÿ°™ÃhgUJiaY.Ršd™¦”÷É{.Žc“¥š$N0 ›œWÀ·=<ËÆ5Mdš 2EšhTf‘$‚f!p¸÷®{¨-yl9sA’ï.“YªÚ䨑“8ìØº™Å§ŸæÈ£O°íÜíàØì9¼ŸÒÈ�/½ˆÁ~×Ç4 ¶oߊ“S<õØ÷©>€V)ˆ”$¨APų3bÑ " ¬×‰+D&®UÂÆ!‹™Ä€ŠN$yôöÛøÎ׿ÄÚõýd.¼ÿÏ¿Á²À)ŒsêÔ<×]µO}üƒ Ñ7°’ééS|ýë÷óНäÆWÝÌ¡ý'éï[A+€]»÷°zõ8¾ïñ‹¿tozó+é(rÝË_ÎÄšµ¸9Ÿ8ŽII>×O«¡)—»‰ã„ÚrËp) ,WæYX˜'I4Ž“#ISlÒ¸ÆÍ7¿–Çùa"-A¡œ'ÍbšA“8SíHiÐZÔê ¢8>]2´"T&X¬´˜™«Ðl†ìÚõ, øÈ_þ>GgœùÍ|åïnƒ°….8( Â¥&q«…ŽkLޝ¢§8HOi%}ùc#eþáAžÞ} ×[Ã_ßúZ­M;/9ÍRÂ0d¹R¥DÄqBœjÀ@¦e#¤$ÕŠ ŠQJ*Eše¤iJ&Ôj!BÚHi“ÄŠ$ÑX¦ƒJ!I2|/Ge4k lË9ݨlbš&Ai5†a/ø‹Eòù]}½˜¶‡íúhѹ8ìСÃÉéàSaX†”=8ÎJòù ”J›(–6Q*m$WZƒQìTõÍågY^~Šåå'ÿÙGeù –—Ÿ¤¾ü,qåB€Óµ’|i¥ÒFŠÅ3qKë‘Å•8ÅnVôösͺË8ä"úÕÌ·jo§×ÚB©nß@5 ÈåÛ¢ê?åVÕZeGêGØ»¼—ÕãØÊf²0É€7€)ÌŽ¨ú¯½8mwjWWû‘Ï·ã~ÚOA/dýz”Jí‡çu"�:tèСC‡?YLÇÏc9&B ’8 Öˆ0 “ro ßÏÑŠZq„cÛèL¥ [š) ›1q¤Èå X† ÓÔ˜6(­0Í"‹ +V q`ÿqrAH¢–…aõòô3OqñÅ;° —¾žAÙtÆ þð~þuo¤Öñ’L¥¸9 aÆè8Á”.®mžnõi—pe¨4Æ0 T£• l5ÑZ"m•$ 4†ã{ ÄÚâQ&Fúùâçÿ„¿ûÂm|ìc_!1Žqãk^JbVpý«×Ïy´–$YŒZè8ÆÊåÑ•¹bÃr8|ø(õVF—p0ü„QH¾ä!„¦ÑlÎ-ŸŽSÈa9²L`ZÂÖØ¶‡ÒÛJY·~dPŸp¤AÓ˘ä™=OsíÔ$ªUab´ŸXÀðäfêõ‘Äl)i¢°L›½{÷°~| ƒ¼#+ú893‹r},Ã" ªô•»Ùºq3‡b w©Á°,&׬áéÏR¯×Éç‹® ™¶Ð §0ÄÜ\L<£ñVX7 °Aib“,’˜¾ƒiHTؤ`D3”VõqÆy›øÐGoãÞúK<ýØAŸÜÏ/¼á.ßx%û÷<AOîüú·xÏûÞG+Ð(4­0Df ßqh4¤YŠaÙ¤aDÞËcY6q+A¡*M1-¡!ÑËö©Õ‚È¢wpˆf=äÖ‹ÍëK PŸFJHÏçı|êÖOñªË.güò yèÓŸ@Ë ãÚ+™Ý»‡£‡°êœ3YH\k¢ll‹ƒÇÑ?6À– ·3wò(ûïcå–-t÷uck ^$WvXlÆMŸB©Ÿf#"l¤<ÇÒÔã�˱ÈK‡½÷ü€]ÞÇÕ×^Âuçñ¥ï½ŸÃ‡¦ùП†_{ÓM<öìüç¯c®1C=nÑ;4ÈOüÓ®ò«¿þ&êK)ãcÛÙ³ë9æfª¸¦ÍÌÔoþÅëÐ2&É9|l™R©›8VíË¡ÑÌèóøÔ­ÿ‘ÑI⤅0$žÝ‡mB¦2üœM·ðÜYÖΓmµ*„AÈÚÉžzü>t—]~ Z$º}¦§§éîî!W,…1CÃ+ÐJg:ËHã­|.ݽ«ps1{÷íçÍoy·þõŸpñsÇw?ÃC÷}5µa»´DÂüÉY¢ÙÂq4ÖØF/fÚMmú�ïúµ—qßSS¼áMïÆ2ÎÑ}HSÆ-L™a[žãÒleø¾ÍÂb@eiÐDq†' Û¯0 ÇFÇ4PJ!”I·ÛÓv²+…žcà9‚®n‹8ˆO ÅÒÔh�®kÐÝÝC«‘ÏgX–ƒÖšr¹LWWÛ´QÂ`y©Iey‘r©sâêСÿXr\LÓ%ŸøK€%¨/¡ƒE’l‰H´Ï½ü˜Â¤RÃÎãtáæ |ÿ;/�ç œËl£Å‘ê'Â=º‚% „‚°.ˆc)m §…Õ(æ)¥H’„HGT³*G‡©Å5òVžá VæVaÊNhJ‡:tèСC‡¤aHLÓ"MSÒ,ò,’4Á0Œÿ¥[œÎa±LÃ8H»»= +I’„j­Šï{œ}övòyÛN8uêßúÖÝ,̧¬Z5ŠaJÆÆ ÌL/ ´dqi‘Zm‘rWM'yzgLÕ1LA–¥$i»8 ¡‰“Ó´ñÜ<®“ö=´’AD³ „e9XfÛŘ&Š4S„aH³Õ¤^¯ÑhÖ Ã&³3SH¡HÓ�5xãoâ+_½…mÛ{ù‹~‰oÞ~a­ÈÌQ“}Ï5ÈçWP«×YnÌKË3d¦ Ü›gqî(ÇO⌳Öжe»H*Ëp­BÙÚäsÝX¶ƒëºX¶Öš ˆÂˆ,Ë´‰¢„5kÖa05]#Ëiš²íìmL:É¡ç÷³bt%Âvˆã˜r©‹]»v“¦A+Äws˜†ÍšÕk8xà0†!ÛŽfƒ g¬g¹R¥ÑlP,q›(ÎØzöžÙ½‹(Mh„ A­^cÛŽ<ýì3øý¤IL«Ñ�)_·†(J9rôÒ´ðDzQYF.—òlÂVˆi¨4%C ÛEIƒ«¯½žÅeM±Xàñü€Ñþ®¸ðûYÁø„ÁÝ÷daqÓ´É2M’Ø Cšá<ÒLP*"M#â$$ ”P¶´�…&ÉR‘Åuœ²E–Tè*ÑR žÚ÷ß}ô8¿øö›‘ÂÀк‘Òš®ðÙ[>Jòœ÷†×â taš­&Ás{yøkß ˜Y`ã¦õ*Òµ±¤ žÏüÜ<¦ëaOLÒ?2ŒW(rüè1N;Ì ôrƒ•å>dÑãàìq¦ëKX®MDŠÛ•ǵ úMíâÛ_ý&ëןɶ‹ÎgãY[èèHñ¹O}Œ7Þ|#isÙ¥›˜=éHfççøÓ?ûïùíwQêêfqi‘™éã¼íWÞÌøÄÃ+z 5¢ - J¹"y¿R—®â¾×M)z»øÆ×nçë·ïæõ¯½¡`qn‰4Ñ L¤a`Û…b‰\>! ¤§¿�Ïu¸ê%ùȇ?‰Ê‹ó xŽïz 4¨ö�©m·¹cxŽ…íZ§GAA†RJg¡Uo"¸–ÃU/¹†ë^zR§$i‹4i`Y aÛ8nž4•ÜùÕoð±O|š¾¡aþü#ä­¿ò‹TjulÛÂ0$¥b‘œïŸ.>SX–Aµ²ÄÒü"*ÍÈÒ”b¡ˆÎi’¡ÒŒêr…ù¹yÂV€Î@g`›&™J˜››£V«Ñl4¨×kA‹4ŽH³„L¥HryŸ\.‡ã¸8Žƒïç(‹ôõö½(ضC¡PÀu=²4Æwçg0ÍNK‡þOcÝà!û¶P¼˜þ«x WÿXž+ñû/ÄôW‘e°¼ Õ*$É?þŽÝžËêînúü<­´Áž¥=<rôöì{ŽÅ…Åö“ô?òB qœ°°¸À¾¹}<½°“¥h‰n§›]›/ŽcÈŽ=±C‡:tèСÿ¡°š$)FV«…ÖíŒÕÞÞ^<Ï#McÒ4%Š"ªµ*R¶›ÕÛÅ* BT–Ñl6‘Râ8RJâ8æ’‹/dt¸—a—­g¯gõÄ8Ža0?Š3Θ ZKAûôô÷°\]¤Ñ¨ÐÛßÅyç­ S‘©˜äôÎ\kˆ¢­A)M’( ¡ÕŠi5#’\'‡ezHé µ@J˲0¤…ïûäry £—(%$iˆR Š˜V¸ÄÈøÿÄóGðjv>v„ß}ß_òØÃ‡iU ÌO§ÌÎ6qòÜ’ÇóG÷bLb±ïÐŒœ V Ý¢.¡Hpl‹0 I"°Œ<B›(¥¨ÖªÔë5”JE–*’ %Ë Vk1¶rŢɩ©Í #‰36mÜÈâR…çabÍ:”çE}½]<·w–ëcÚî‹Bø+^y#M’$dYF«²ÄäÄŽ#˜žž¢RYFeš(Š(‹$IʱcÇ0¥…”Iœ‘Ïç9pð ‡wíÂsÛ£õi0ÜÛź3'™:qÆDA‚JRlÃB(…cXÂB…†a`X60& 2ŽOÏ‘i¸÷®o°8½ÄÅÛv°råj„!øµw¾ƒ‘ñ [äŽo=€_è&É4Z¤ –/HtiDhb,Cá¸Ó 2,Ç@˜’XghC QˆÍ“èêõˆT\Ùã–O}–wÿ—‹¹ä²Ë™:5CÞ+Ñjf|ö¯>Íž§ó_ÞûVJ¾ÅÜ3Ó=:Èå/¿Žçž|’SÏæåW\ÅðYgQ›ÇÄBÂB•Ç141†hµPŽÇðø…r7KKUöï?ºÊ½XaBHBˆØÊh&M"3e)X¢·Xbqç^îÿüWذ~ç_s-²wÓ69ãÌa¼²Éªá>šK!øï7³jUCÝ”J>Ï>û ù|ë×o¦P(ñµ¯}ƒ‹.ú9æ Þó[/¥\t0I(å|l! )ŽQ&‰L’Ð ï÷`yî»÷;¼ç·þ’+.?ƒnx%B@±P@e µÀ®ëã9>:ÏóR’ËåBÆ¿ý;¿Ã«^už—#Ë MSlÛ&ŽãvÜ@ú?Ù{ïh»®úÞ÷3ç\}·³OoÒQoVµ%Û²ä^äN Í`ìP Bh!¹à†$ÜÜ„„—B€k¸`Àظ÷Þän[²z9½íºú¼¬ƒ“÷2îËxwa¼ýc ICgìu¤qÖZs}ç÷÷ý€Æ´¶káº6Bhf«ÓLÏL135I³Ù¤«³“ùóËÜ|óÏ©×},Ë¡oçÕ»˜Úû:nÐ^rèíj#MSšAD˜*´0¹æ{?åº[÷ó±O•m—\Fèṵ̂xÇ;ÞŽíiïè £³“ÎÎÊím´µµ!…Àq,ÚÛÛi6›„aˆï¤iJ§˜¦D““ÓÌÌÌP«×¡VŸ%Õf•z½F³YgjjŠ™™É7KAÆFG¨×kÄqL’dׇçå(–ФIæ³-ÏóÐ:ezz†‘cG)äm:Û‹­§V‹-þ_F�&(aå1¬6,«ýÿÑa˜íN]½6Có%õšfxX35aøïÏh*IÉv*ÌcAiˆ’Wfv6ÏŽÝy†3å×8îf÷ÌnvÏÎý:³›Ý³»ØSyCÁ!bÓëõ±¤¸”…t:ØÒnÿ·hÑ¢E‹-Z´øÿÃËy@‚š0 ¨×ëøA@f/ý=Ø–G­:ƒ¥4J*‚ À0LÛA*E”¤o~`.—£ÑðY04¦?E’ŒÅ©a[ŽkàØEúú8|Ø'I ˧»T¢^¯ÓÝÝÁ¿ô{‹9Ð Íz„ÖY;·D–~H˜ÄÙŸ‘8žK[[& Z¦•9hEˆC™€À}´N1-‰e›s¹†u„Ðaƒ8J1 ‡é‰ÃH[ò‘^Å–gò­¸•ÿþç?dÕ ýüöo_Æ’e= Øwp~ìãvx`™¨œÃº5'093‰éš4£¬>ç•iÔ}Hl aѨ51½”(‰1Me(jõ„0ð±±H´$ŽÚûÛY·v5#c{9xd”BÛ<:ÚÊ(e²÷Àa.Üv"Jpm‹5',ãî;n§ÇhI õZ“¶¶v¦¦f¨VktämŽŽðK—.æØñ#ôÏŸG:ç<n6}V­<W_ÙÉ‚¡¥Ôë L#›á[´h1O<ù8ïYòvle’&1v{žžþn^Ùñ*›/< MA›8žIØX”r…,7P†&ÐK:|ïÚŸ`;6…œƒ_‘\tÉeÐÐiJÿ¼>ûGŸÃ*|—/}åZ mÞsÕUL`dä}%Ï%öCtªIu€i*Ð  3Ç_œÄ8¶ƒ©ZjÒ J5hŒûÌ_¹šÿñ/? £Ý泟ù •éiúiåGÿü?Øþä üÁ'®bñºµ`ÀþcG(·é8a%^w= ûéí脆OgO7Gc¨¼„Wž~”‰É †Ö¬&ö¸]ÝÔku”å²`a/3c#¼¾cóúúèéDYжbÊL Ý–#´bܪ»_çïÝÀ’®>Îy×ÛQƒí©¦Z¥Tr™ß7À·ü #vqÚæuT&Ž!ˆp\›Û︃ͧͪµ§ñÂöùÎw~Ài§-áï<“³ÎÜL­:KÁõÐZãØµ†ÂñÉåKLNMóüsÛùéoâλv²by'ý×_Dù|Ž£GPʰ …P ‘RÒhÖÑ:ÅqrTjUüfŒa8X¦àê«?€ß )ÛË„Òb±ˆaH´–s›91霃µP(095Cä7±-Ëô(wôpѶùηàê«^࡞dfb’«/Ü@’LcEU´öi„½Ý+9>:M¥Ú`Çk ççùæw¿ÁȤϿ\w£c!7ß|3çœu2¹œ@ M.—¡ð\¥2Ñ16>J­V£Z­’Ë{8ŽC©Ôd.ø0ŒP†If­Òtt”ñ<z½AED±Æus¸žM‡45äÜÏhÆ(e …‰œ ÌçKH¥ ‚&Q(‘Ò \nãᇆTsÁ¶ ZO­-Zü Öÿ<RBo¯ÀËÁŽW5ÿ:Æ_(dHÿ¶üH¤ÝÆ<<YfBT˜ ããåÒ:úŽ0œ€¬þûó¤:EÁo!‹Š‹P"›˜0E«ö½E‹-Z´hÑ¢Åÿa5 zW(C • ŽC Cš¨“Ä¡ð©V+´rÙȯRXs"f’f \!²ÑÝ|¡@…~mžïxç¥ô÷2=ñȃOqüØ”!1l¿)Ù¹k?'nœÏÑ£‡èêê¢R™¢éW±…¡À²I’F!®éaÙzƒ\¾�h­1”E¦èTI¢”db…RY“wš¦(¥³2¡(�¡±“F½‰4pDJ½ÖÄ4<¢úúûJ|á ïfÉâ"ßþç»øÌç¾Í'?ñ.¼è <H®¤902ÂôèhÆ‚ƒ8Ñh QQoVˆ#i‚ëXx…³þÊ4Ð"¥e\¦ibY.õfŒÐŠ$ŽX³zß¿î%^~å N?}ײY8´ˆ™j‚]hczz’Ô)0o ‹b1ÏÑáqz;r¤qB4IñÑQºÚQ™¡§¯›O<‘Ç·?ÏI'Ÿ R ´Â2C‹óص7pö9Û°m›j½F[['n\ÏwÜÁèÈÅ‚M\÷± ‹ 7°ý;Û§gÑ�q*‰ýC)’8$ñ“9‡bB(ÇáÀñaž|æ‡P¯ÕìÑŒîÜÃ@ÇJ’´ÁÔè4C«WógöUöþ$Ÿû·è\À©'o °ÒD¡Ó4ÉšØã8FY*k#4¥L”a#¤$JR”å¥ …¶NêãS<ÿÔË\Íüø§ÿB:U#‡Áðž½ÜôÃëyô¾§øðÕ¿Å)W¾“xø³#ã=°Ÿ m㹟ÜH#‰¸èÒ‹˜¨ÎRØ»‡ÒÊetÊÐ yuûóôõöÒÙÕI#MPZ“˜6Sµ H$‹V­¥ìåyþ¹g›šaÅú)æsL!©UŠ^ždl‚gn½›vÇåü÷üzùja™ËÓYîcݺØóúS¤á,«—Q9JûHa3à…ç'8gëþô¿ü1cc‡¹ûžë)—-R]§2=FùXª€eØx–Í ÏïâÕÝOpàÀažyæYvížA¤‚¾~›/|þà ôw6&±TJ[)ãã˜ÔBã¸& i4š(#‹¶0-‰”šÙÊ~D8®‚œëÒÞÖF‡Æè4%I#ÒXišÐÝÓAµÒd|zšbÁ Q­pÊÆõÜÿ‹Çxÿû¾H>sìPÈòRÈeg/¢M BícÈ Å¡cc$ÚbÅʵ¬XVäÀáIŠ=¬9yï¾â vï~†‘áýôÍ›OuòŽe"¤`v¦†Q4±L…NbÓ`ÑÐ|´Ö>°Ÿ$,Rbzb2s¶jA[¡ˆmÛ¡O©-û½Ö)–e�)IcÛ62·= …bôh65B¤’ !Ž3AÕ´²ÃP(¥°-‡bÎe||„é©QÜVÆj‹-~]•FÖʾd©`dX3:ª9>œ•uw º:³¿¨Ì FF ¦«|mQЂ³¶”ú(ôºèl¿êß¡)$v9#×úOoÑ¢E‹-Z´hñ¿w \¯×0 a*¤ضïûH!°Ó40- Ïui4ÏCA ¤M”$$ZãØ&–•’¤Ù(ë '¬àû ùR Ë)pò¦Øùò^¦¦gX¾| ¹Á~y¾üÕoòþ«Ïá-—K,X¸0l⺖©HÂHM–©5†aàŽ#1”‰ÖC¡ý00ͬ¸ ŠB’4A§š$0MÅøÄqFF†ìGJ‰2ùB Jm9DjS­’Äu¼œÇïüîål=ý$¾ùòÏߺ•n¸“Kß¶…+Þw¦i°oÿärí{X¸x�¡R<ÏÍFò-ËP¤±&¥F£©Iµ ItÒ$MR,SaZ†²Z£ÑTg¦èëk'Šaz¦L$žmÒÛÕÃŽ—#½ÍÙIÒ0° ‡‰©)ºËÙyÛE6år£££¬\2„ P,҃ɱcÃŒŒŒÐÙ٤ضKg{7õšÏÔÔ4Ë—-§R­†!ýý}´µ9zäkV-ccìÚr2æõ×rààQlÚH£2I˜Ä˜žABJ£Þ¤;—Gh!l{âY^ßòö·å˜9ÎçÎ?ø}½¥gÅ<,7Çìá”:æñ_û<W\ù9~ï#_åÛÿüçl9õ$¢¨Š¥<šÉ®•I’b&–V$ ¤I„aX¤R!iª‘N ³m#»FøÚ—¿Ã?|ý/è.ôÑáØ‘C|ç»ßáà¡ý¼ëCoå«ÞC<3†tL^Ùþ,—¯æðK;xòñ'9åŒÍäЬ�� �IDAT·œD°o?Ç''™|îeŸr&ÑžFaáúe˜í„Í:Ø’”ÞÞAl)™>>J¡TbëYgóÜöí<ûà#¬\¿‘ÞÁ~ÜÙ JÚâ¾ÛîfôÐA.¼ôm$ »ñEÈp=¡dZL屇_¤»lÐÓYböØ:Ú‹4M˜©IO‡Å~ê48i]'~s–0ï0r|?…œƒ¡ MLÛ! ö½q€¿ú«©×aé²>Þûîµ\tñ©,]ºˆ|Îadd…¼ÃØô(…b¿¡Ü‰Ž Õ(™]ííh’ËeyÍÕZÏËcKYÈQ«U)—ÛPJÇ!¦i"D&Œ§i‚RÙO˜fÑRi 9ÞîvfflX·ŽŸýô|æ³Æ#ï"HàÅW²åÄ>l‹bÁ¡½\ä•ݯѽ¼H?Q#ä´S–39ó:ïÿÀ‡Y·v=]Ý\ñžóÙxÒê•iLË$IB"?ËëUB øø) yÂ(À²Mš~ƒ4M(•ŠxžKŠƒ!$IšàX !$Qãzö››@Z'$IŒm[xž‹Ö‚$ÕäŠEâ "Ž,3¥ÇÅ0–e!¥¦Þh6êœ}áùDÕ”j²´hÑâ×%¡¯/ó¿6›09¥™š$±Æo J¥9aµÕª¦Ñ$©Mw—`Årãu dù?<¤•9Ý¢E‹-Z´hÑâ×`ýû;ý+¿ÌLã,ÏÔu]¢(!‚7óM-ÓÄ4T–7Ølf­à^4MñƒÀ²¬ìkí¬p¨Ô–GÈÍz@ öî9ľ}»¸äÒ·±÷õ#\ý]4MÃ?@­Zá„U+èîêDh„ÐRËrQR‘&i&þ†M¤Í”)#kúMšÍ&†!"sÃ%ILª Cá8M.çR.—’¹Ï·PJÂ\|€!AÊ!¢¨Á`7›7obÅò^víÚÉ=÷íã_<ÉîÝ{8ÿ¼mlX ‡‘ñi|?å}ûœ·€R±DG@D®`c;6Í0¥XlÃvlªÕ¢8@*‰Š0HÊÊŠm“›o{„þ¾§¸ž6׿ùíO±çl8qZD~DzyãàaŠå.úºÛ1M‰4LÇáàŒ ³~Í*ÆF†œG’¡cÃJ%zº»1 ‹©©iJ¥*•:oìÝÏҥ˱,“0 0Lï7ym÷.V®XFÐhâ×ê”:Ú9rðÏ>ÿ"Û.½œ4L±©AèãØÊ$:"IM¤•ãÚoâņY¾¼ŸÎvÅ×ÿÛ_²ó¹§xúÑ_°påÚ- ©Tñ!]}œ}æi<þøcüý7NÔœä¤u›ÉÙí„aˆ1© õ¥Š¥6ЊfÝ'j(ò¹"Ìó½~Î?~ó»üö;ÞÁ9︊`ç>îûùmüð»×ÐêüÁç>Îùo¿˜š?KªÕ±1šÃãÔóü“Oròé§±éÊwQ©M‘ïï&Wê`lÿQäð$õcÃ<÷â3l>ïtº‡˜ šD(’Ta+'ËžÕ)©N�ÍÂ%K¡³óÕŒ:ÄÒEË8xûý¼xÇ=¬:uCžA½ìa•:ÉúH°ùo_ÿ7Þð_ýâÛY·r)_Çu\\7O¥ÐÝ3H%<ûÌËüá§ÞÎß}ã‹ôö—™?Šc H ))JˆTAªZ°ˆ÷¾ÿ­|è×ò;þ-N?ãDÖ¬Yii‚`Ç•HB\ÏD*@á:y|¿‰i*r9¦ß`ff–r¹eÄqL[¹Ó´:Á´L,ÓĶ-’$¦Ñh`˜ Ó00ŒÌu'YôB`Y&QEíå2;wì `€žîÎ?ïlÎ=û #æòóÏ`^_;Ÿ’Ž1ql’ÿþ£{¹á¶Gš·€UCƒìyùeÞÕ;xË•Wñ /ðÂöÇùǸžÿèÇ\xÁ©t´ÑiL½VE§zÎ¥³&©Ž1”¢½½ DZ)·—‰“¬ÔÏ4 ÒTãû>F=»†e6æ*æf]³ŸS™ýã8s¨JAµZGICš4M¤4Ã�¥² fCI4šT§Ù&Q쓦1Iš`8«ÿ—7ô0 ™šš¢»»ûWþðȲœ[%1-Z´ø¿Þ2QÕ²¹äó%¡Þ€‰ Íô´fbBSo@wôöHò9I©$èìJ …ü_Þg[´øÏ$ɯôùEÓÓÓôõõý§>£V«Ñl6éìì|³0øW”òÍ8¢-Z´hÑâ7­5išþJÏ!¥Ì¢R}Ÿ®®®ÿ{aõ ŸÙö•Z­Fe�QËysn²¹"ÛÆTaà“ÏçIu&@8v˜–RBf Ý @C’´— è'ïûüñŸÜÊ®Wãö;bÏÞ>þû—ó'òÇ<ôà=¬Y½šB¡H’¤s-Ý 9ÇCI’ h Õú,–-‰ã©$¦iÇ ¾Ÿå¨AÛVXŽ�Ò4A§‚|>G½^4måv�â(F§!E&h ©b„J0M Sº˜ÒÀ44RÔ9eËZÖ¬Z€klz˜ƒ{§¹÷¾Çq\›Õk70п˜#G†ùø'¾Ç†ç§eϤZ›&IA(—z£Ž)žká86†i ”"IÁ´LËÀËÛÜyï ;º³N^Oeô8{÷ìdj¶I”4Y²°—ɱC 9^{㎎²åäu„A? Éç èTsß/îæ¢ Îe|lœžâXSm¼ôʶœ¾M溳ùóróÍ·pâÆ�¸ž…ï7éŸ×ǃ÷ÝǦ›¨U«”Û˘Râæ <öø³Ý"KN>úô$•F…\ÑÅ0]|¿N*BêMˆÁzF‚㙜tâg_z «æuóÄãñÈ}OpʪŔJí8=½¤µÝ==\|ñEŒ¿Æ÷®y˜—žŠé‰ K—,Äõ Š¥v„0‰‰iziòvŽ’W 70È‘¯ñ½ënæßü9_þ£?äô§ñÔÏnæ{ßúß÷8_vüèÕ,Ûº‰zuœˆ„¨áNU8¾c#{bÚ6ç~à Ò6ª ©åàbQ6‹~yýânÚ{ËœõÌV&ñ$•(iáY.RHÂ8Ä›DAˆ¥ÊñðÚKLÒxòEŽüâNÛx2ó¶m!^µ€=SŒ½~Œg·ïäï¾ùm¾wÍã\ýÞ¥|òã¥QŸ%ˆ’8E©–(e±háB>øwpú雀&ÍÆ4ZûÌLOâ86q˜ÏiÔ5¤Â-¸"t‚öqA­6E¹­@£1ÃÄØ¹œ‹@c(;së)³ô0 “[o½© òùwß}7ƒýýHQàc(e$ILÄQ4çV»Ö£„$N°lg®Ø*ƵmÒ8bjjŠÞž®ýÁµ\ó½kùÈï’mœÃ¼ž~íßÃü%$cc©ÍIoß¾ö)í}…3ׯâ/þË?ñàƒ÷pñ;ßɇ>t5¿óáröÙjgíšUØ–Çavs&E pm‹ Y#‰Câ(À2 LCb&qà¹q1|ü8:I0,“(޲ edEÊœsSa�Ó4BRlï¤^©b&…Î^ÂfðŸ4MÑ:!Š#’8ƶLõ q‘Ä)Na]KXmѢů=†¹œ P˜¦ M!I²,Ve@Î Ít÷@>® ¶ý¯¬-Z´„Õ–°Ú¢E‹-ZüF«ÿåó%Õ1–eÌ9Å"´Öh JI Ó" cÆÆF8¸o?½½½˜fÖtoš6Iª‘J!„Â|’$Á4 S23=A!ßF’BF -XÂÈñ<öèªõ”|1åsŸÿåŽB¿Á¡ƒèíë'Žbò…†RÔëulÛBJ‰a˜Ž‹D5מk—ÄqLG(••#(3+6Ò:Æ4 â(É©ˆL€M!M4Iš¢TVfQ&TkÒTa›¶aG L0;;ŒHB®¸âJ–/ìåÐÁüv°Ê£îâ®»îGª”5kOaçÎçÙ°ádr^CÇ”&R¹h u:­1Œ,ÖÀ0,Û¢6ˆBŸ—vìàчpÁi‹ÈGN±“^|œ‹/< íÏ`š&5?åÑg_á² Ï  %iše]>ñè#¬_³šb!OÎ˦’¶Î^n»íÖ®[MD8NIGG/¿ü*Åb‘~Ò$Ʋ¶epìÈq\Ûc`p�” Pììã™G·cZ9fÆ'ItÂÂ¥CLV&Q†CBH˜T±Ì"¯í>Ì]w?LŸ<»¯¸€%=%òý,›ßÃäÁ£<p÷½,_¾+ÑFVváå¶]p>‹yò‰ùÉððÃOpøØ¤IBAwÿrnq3¢Q©3rt˜}¯½Æ¿üÝ?ówsŽmó¡«‹cösóoäÞ{ïà„5Ëùä—~Ÿ­gœB¾¯“úä0õFCƒ›šìxâ9î¼éN/ä­Ÿøª«ÄT0KÓP¶‹Jìr=Bqÿ½wqú¹[éÙpˆ„ª`Y9;ÂÄ÷›D:BzH‰Ð¥öNJ=ý,Xº’Ý?»êØý+Ó¾e5×âŠw}ŠïãN~xÝ£ì?|„«Þ»‰?ùÂ'(,¦fFQ† Ö)/—G')JBª›8¶&ŽøÍY )h+ˆãÓ°IAÄX¶G…4ƒårÇ1ˆ¢&õz…£GQ,æql×q°-jâ8Ų,ò4IÃ0MÇejjŠ|¡È¢%Ë™š˜Â²-zº:¨Ug1 5—q¬0M˲‰ã„ÀHâ¥,lÛ%êõl£GIhÚÛÛB2[©ò7{+Óãûqr6Cƒ‹ÑAL¡]0½÷u$u™kn¸—ù½E®¸à,¬à‡Žûüå?~ŸWwìbtô«W/cëÖ͔ۋ4”t‚íX8¶M’Æ4ý–%ѤH©±ìÌE›¦RJšÍ:I#$ä ,Ë$MR*Ò¹—5ÓtæÄóÍòl´„A„idù´Óã|úÓÄšu«éîìÊÜ^2{XŽkÇY$JŠÀͯm «-Z´øAÊL4íì ô ³£¯/s´sÏzËʾ¶E‹–°ÚV[´hÑ¢E‹ß(aõ“ÛúÛ¶ñ¼,ÛOJ…ë:ü²VI„A@g{{Ö¸EhÀPVVd˜Ê ^¯' ¶m#dJev†4¶‰Âˆ©éI/^Ê#½Ä¾ý3|ÿûÏ%—ŸÃüùƒT*M¾üÅ/3;pÑ…g“/@’Ä„¾T™VhM†4U¢¸N.ç  …ïDQŒT™#̲E>©ŽH‚ A)E©TB5ç*“¤‰Æu\lÇ#Š"¤2P–Eœh’(Å`Jˆƒ:µÙ<ÓD锨¯±lÉ ï|×EtvIö¼¾›Ñ±ˆW^ÞÅOoº‡jµÆ¦M[¸ä-ïdhhÃÇòúÞ½>t„ÀO0 ƒ|ÞÁ42¹$IâLh C„(¶kÒ$÷Üñ›V–)Ð^ncÕúÜzÇ#œ²qˆ®‚IÐh`äÊ<òÌ œ½u#¹œƒi»Tfk�¼¶s~½ÎI'žHk´aÓÙ7Ÿž‘BÉcÉâ¥ÌÎÖÈçÛ0”Åã?Íž×÷³eËɤ:Ʊ &''pm—;w³zÝfk”a‘³ò´•zøÉ ?ã[ÿtOYNï`Õ ÒD™š(ž¥”ïå†î&Nrìß?N|úóïÆ²$©_¡-W`Í¢•ì}y'>x?Eæ­\ŒHøqƒÆì›6oâ-—ŸËŠåì}ãeb/·Þú4·ßö wÝ~ ÷ßs/÷Üq?ºî'ÜõóxðÞ§9ôÆ0C~e†ûï|’éÉ}ôôùO|€+>ú~òe—ZTB¦'&éíêÆµ <{ûýÜ÷ó;X¾l1—¾ëíØ+DuB×ÂôòøÕ&9ábD’ûo¹•Ù©ãÌ_6ŸÙÙ z—/F*´H%¶rˆ’ÄH!gPõ}\·Hebš¼pxøŸ¾Íðáì<ýDÒ¾6Œ03R¥z|œu+rÚ9'ð‘ßy+Ÿø½÷cÈ&Æ …6?‰ÈŠ!Ã&¶2¦PPÌÎŒ¡ qLƒ$ŠHScy˜†MµZ§Q÷±L­4¥¶SSäóår™ÉÉqöïßmÚ¸NÛr¨ÌÔ š¦eÅ!~ÐÄ0 ‚  V«ÓÝÝC.—§½£‹( Ø·?…|ÃH˜¦½£ŒNõœ3 L¶æœ® ßt(Õ rž‹ß¬ãXžãÐlÔ™š˜ää³ÎÆQUn½óNnºé^nøÁ-Üûk7 Ñ)RŽï¦Ñ³€ënz”ó¶nâŒU ¨ÝÏG?úlXN­Vãç·ÞÍ×ÿòû¼ôü}ˆ$¤³ÜF±Ão6æ²^ÕÜMTÓlV £�C€¦^¯aÛÇŽÅ÷<Ï%—Ë¡ E„˜¦='nf›S¶í¦Ù&•ž‹,‘RG)a‘oïÅPŠ™™i>þ±¿ç¢KOeéÊUD$iŒÖ)%¦i …@ Ã01-aµE‹¿1d%©ÿ* þÛã_ãSZNÕ-aµ%¬¶hÑ¢E‹¿¡Âêï~èä¯H)šÍ&Ê„ññq”20 Û¶°ÌÌÉåØÙH~>ŸÏ²…B*…ã:H©‚„ Ž"¢°I.—' ŒlÌžËvh/-æg7ÝÃleš³Î=™ƒGrÍwoàÁûð¹Ï¾…¡¡E(Cd™…‚7K³²}ƒ™©)Æ'†)””’ÄQBf.2˲2gœŽ2AU¤¤:¤R©‚ΡQ#Da„ãz!1 ) õR$©’è8ª€0�×Ìsxÿ0–éàØ)•Ê>¤Uá”-çpιg’$3ì?0›5šO¦¼øÒ+TggèíéᄵkY²d1år'õF“Ù™)&&GIÒ×q²(¡ˆ£©$–­ðƒ:åÎÅÜvËí$³cì”Ó¶nfhÙbî¾çònå ¨Öª¹6ž~i7}ÝæÍ煮¢„ör;»^ÙÁ¾=opÁ¶ ˆc”†éP«×yô±Y»vi ZK}ì ¾öµk)K\zéY(CP«W²r2ÓáµÝ{™74¡4…Ö ›/|é'¬X:ÈþüÓ˜*!Æ'D øØf™¿ù«¿ç²Ë߯SOî ½+Ç{®< Ó€0öI›ùØåä .äøÞ׸óž™ÛOWO‘bÁB £Ça‚OYÏ…Û.àïz K—ôQ,˜Ôk 㣠šõ¥œGÁ3énÏqêÆ•,œ?ÄPOW]q—\rW~ä}”úKø* U¶ BºËÌOðÐnæé; ·³—|òwQó{˜™'°$*ç²g÷zJ]¼6†÷ág?ºžµëV°vË&ŽM ÓŒ …:‰Â êWñ‰ŽDx. ?¦Ã*ÒÜ}û®»µKXwÕet­^LíØ4³;ŽðÖs/ã’+¯àü·]Ä‚ùÔ+c4ý $•òhF†i4ê"%ô+ÌVFq•9ÐÃe˜”Še’âT ¤I­Þ™mD˜ŽA1_ R©pðàAæ ÌcÉâ%x^Ïòˆ‚C9”K RRÓð€@‰iÙT«5JÅ2#cãÜyçtuuc( iH½V¡··‡( ! ü¦ãd…mQ˜ P¦Éñá&§&i/·‘Æ‘ïcÙ&B)^}éEÞñ¾«¸ü²‹éê*pxßqb;w<Æ©‹»iTC–÷6n¿ïi&åÌÕøGY{Æi¬Ù¼•sÏ¿„·½ír¶l]ɾ½¯sッpùå[)r¡‘ ´HIu:ç@)afzš‰ñqÚJ%´fÎýíÎÅžh JÒ쎴þ¥cU�’À³Í©æœ¨ D4juÚÚÊÜrË÷éïäÔͧÐlÔh4êÙ÷$E¶©¤æ^z¤Â´–µ„Õ-Z´hÑ¢%¬¶„Õ-Z´hÑV „UÃuB?ÀP×qi4«„AHƒŽ› S „ éWyè¡X¼x1ÝÝÝÊ ÔV¦/¦>i”¢“&(SYÃD(eëÌ)j•©ÍÔY¿n)ÿõO/üñ7yîÙg©TR&'š|ú·rÆé[ˆ¢:3S³”ËEÃ0PʤÙðÁ“ %„ÒX–­ˆB” Ë´R$F“4ñrYökC&è4&I}tfnU%I’¬& C’Ä@‚ h" )@dñ�†ÉÌÔ=Ýí¤I IJÑ+€€‘C/Ò×ÑË—þø*Þóîa~vë“ÜzûC>Zå«_ûÿrííl»p#W^õn6n:‰¾¡~FGŽqøàöåµ=Gèîèf €Îöv‚ Amz–TÇtv´qš¶?6Ɇ5=C¤FÓ·®âÞû÷rѶ…XLJÅÚUóÙþê6nÝD}æ%¯ ‡˜5K×qãsû˜­kJ=ef¦§ðk›6mä¹ç"ðëtt-@(;î~€## UJ˜†˜¨$¢«\$_ðصk''m:™8„J=äŽ{ï$ò¹ö<ý0ëO\JLÓ Ö­ŠìÜ=ÍdEÑÞY¦6;ÁÆ“–ÑS,P™­ã¹yB»N%ð)å ¼ï“§÷Á¹÷¸ÿ‘orù¥gsé¥oapÁ*‚©i¢áòž‹ÕesÉå[ÙvÑis¥e eâ HSržƒ¡$ù\7°$‰&iÌ¢ëU”aR¶,œ|rœÇo¿×ŸzŽd¦Æ‚RŽœ†\ÐÁTR§¢%.ÁH•Wyž¥ö÷”yটp|¬ÂÒËΦ¸f5K]“£s|¤Ê²ÓÏ`j|‚ºn«)…NFÆ+t:1pÝ_ÿ«W.dýy›‘¥<{&¦èZ±šy'°gç.žþùKl>s3^Þ–8¬“/ ãÛ00õ�KXXÒ!Hb eŠ4Nq$…ééiÇÃ2èéêÈŠÜ„M+gSȲ‚¸Tå.Ç4¥O§Yö1)‰Æ¤TÌQ­ÕBÐÑÑŽ‚ááa 9‹Ó6o P(ÒÕÝEøLLN‘b€È¢=òù†i u "skK$JHÚÛJÔê5\§ÈèÈ0BHºsöí‰ßþà_óÓ›rœtÊ®zÿ[xï;ÞŽ7þ˜°r�Ù¾„JÒ99ŸýÄÛùúgÿ–O}ú;|þ3[ ¿ÊD™Ú¥¶gl^Ï›WF JÅ,GÖ°Ê´‰“h„aR(yØv!! !—Ï6º{úÑ)èDà8.¤’$ibš$ 1M‰e{Da„m;s¥U I‰âR*”òÃ7ocšŠSOÛÊK/%NŠX9…ûX®@j2Lâ$$Öz®l¯E‹-Z´hÑ¢E‹-Z´hñë€úÀûÖ~Ŷm¤„Aˆëäho/#¥$I"â8"ŽB¤tõv¥>ù¢G5q];Ÿ5¶iâXy/m;„qB'‘90•´A f¦ÇX¾|ˆ½¯¿ÌÔÄ8×ð¹Ï\É[.? ߯ÏY´µA•:% Zk,ÛÆq²ìB´˜Ëm´ßlÓ€$I0”T¦iáynæ¾µL”¨¹ïÌ— çšÀmÛD ÄÈ$Å%i”à7k”K’$BG)šÏøØ4íyÒ¤ŠL³tùç_xgŸ6·ÜvB f*Mž{a×_G¶L—°ú„Ó˜·CšipèðaöïÛG„äryònžŽîŽ;Îm÷àŒ-«Ùtò2êõ#Ì\έ·ßËÊõ§PêiÃÉ™~“Ç·¿ÎÖ3ÎÄV>I½Š«=šÅÏn¾Ÿ .=›©ú0í]m$QŠçåxþ¹gq½2ó†–Ñhj¾ø§ßæÜsOàýW}€ÊÌ$óz¨ÏŽãYFMvíÙÃäTÁ•t´/ÀðÉ`Ë-›×3rh§l\GdBP' ÅËõsÛm/óôöƒäK Ï=¹‡³¶.å¢K¶P™òq¼<ÒÖ$*¡Ö¬bò,Ûp2Ë­ÂR÷ÞñO>ô$bºÆÐÀ�–ã ü*Òè¤IàO“DU\OÒÕ]ÀvÊJF‚¶4öAÅTk3x®_©SrrØÅvŒTñØ-·sÝ?\ÃÈk¯s‚…œ´jÍ`–Õçm&éô—V¡DÎðÈÅË»é8a=/ÿìîºé>¶\pÞº 'Mì(¥19ÃÈÞל׋¶ H|lˤ:]¥Ý+SrÛyö×2}t?ëO^Mß§0Õh’: ·ˆWÌÓÓWƳ¹÷.Š®AoWGV §S¤4¨WxNC*å`)‹(MR`ÚÙõ–$)q’$)JIÒ$Å÷³�&¦ƒRŠ0Œ°-˲�°me(LË ŠCâ$°mLË¡ÔVƲlÒ4¥ÙÌîŽk£ -]…ŽkH ³3u:J[© Ã2‘R`™&A!„`ll”z£A[±-µŽã`ÛA˜Ëq½ó‡ñàƒ7ÒÕÕɺu«¨W')Øš´2Êú¥] ×mþëïÂìäo{ž²ŒÃû¶³üÔE,Y»–`Zò­ú[FGÞ`ÅŠ…LLÃqd–Ál)¢4Á´˜–ƒ”ÊtiÔš %íärü¹lTÓpB!0Щ$!Âv%¶m£S‚!Žãf]:s ‚aJ+TqÒÄttbsÛmsåUD§>)5,+%ŠBlË#N$S9æ‚ÿå ½åXmÑ¢E‹-þcZŽÕŒ–cµE‹-Zü&òkð_¿ôÖ¯¸îœH B tš½ GsÙŒ HÓ$+oIR:Ú;Ø»ç FGGISM¾™¯k$�� �IDATP„DE Q”©–ȹq© „€4Mðò6õÆ4ƒCeÞÕ[¸èÒ³X½v1åîvüFÛ¶°= Ù�™ä:®af߃&R,Ó I²FqÓ´R¾Y¼õËsi Ù‚DE1qÿrÙóæBEˆì³…�w.À4iƒÐX†¤Q«ÑlÔɹ.õZ$Õ(Ó Œ¼¢ „¡ˆÒ”X \·À /<ËŸÿù—Éå$³3#ŒŽ†ìxñ wþìž{j£<Ç¥¿¿Ÿ…‹éíéÀñL:ÊSOogr¢Šå¶qÊ©pí·B¹ä²íÂ͘NDWï|^zqI*ؼåD¤Hð¼vn½};›Öoa ³‹ætƒbÇ *28ptí½9æ/í#Œj ²b.¯ÐËóÏïæÌ³/æº~Æ?yœ~ì½¼±ÿßýÎY·~Þˆé Ê==Ü{ï³\pH¾þßáñÇžç¶Û¯ghÉ�×}ÿZjÓ£œ¸tVÞ#Òš\®“k®¹•Îî6öæÐþIÞù®­l:y9•J×u0”¦2;I>_@ EÆtvv±fýzzû{™æµ=»xþÙg8¶q#µ X,SÈ(Z.f"±FûÒ1µ$gÚ¸ZRôrX‰ÀpòÌŒŒ1|ø(Ï>ú×|û[léEú{xχ®fýç03;ÅÞ±Cœxñù˜®G¢5–iãW›””M.ßNcïnúÁµEÉGþè3%ü&–ë`ämJ½ÝìÚ¹­¡wpgãâ–ë’S.GžØÎ?½‘ù‹û9yÛ9ÄžÅtµN"-„Zcçr”ÛŠtwwqxϼ±g/‹V@ÑõðlK™H)ñŸ(ŽH$$q¶§)c»xž‡išhbši“¦ –mÓðCÍ&Åb?HµÆõ<edYÄÕj• 0-˲‚�×uHÓ„F£ã8$IÂu×_OΑ´·wðÆû)—ÛI’„B¡ðfA^6™ššÄ¶,¦¦¦BÒÓÕE…DI„RÏs,Ë¡^¯‘Ïåˆã˜|þ^úûûH’™”Œ˜ÑÑ ¾öWS‹Ç¸tÛ6º­bäýlزŽöö–ÝA¥:Nÿü>–-[Œi[4u¦g§çr—q’`Îå¾ÎÎV0„€¹û‡2l”œ+¸K MR’$"Õ IÅA`Û.Q”Òh4(ÛR"„D*œ‹^°m›8˜–P q’ÒÖÖÃ7þæï9笳˜?Ô ¢Ž2üf‰©:º€¥Š£«%¬¶hÑâW½\ý?úßhú͵T‹-aµ%¬¶hÑ¢E‹ÿ¿Vÿô³—~%| eór4k š&¦i’s=<×Ãu\\Û&ð}FGFiÔ” %,Ób ¯%Ží‘¦ …AÎ+¢ ›$•h qÇ!ˆ˜Zmо2ýíÌÌC™B„T¦¦p‡$ˆÃÇ5‰¢�­5š¥¶Í†DÈLI“ðdªË2ß,AHu’Ȥš$NѤTs…?!À›½8ŽIæÄ!i!Ðhêµ9ÏÅsfgfI58®ƒ² šQƒ(‰03‹@àºO?¹Þî>õɰí¼MÌŸgqhÿnŽŒ§Œ摇Ÿã–›áÅç^âàþq„ȱråÖœ° â<Ž›¢Ù°ùÉ wFMÖž´„r—GF$ZòÌÓÛ¹ìmã7šK<öØ.ÊÅ2 »ñ„ÀR£Ã#iÌö—Ÿã¬óΡ$tõ®Fk 7÷?Ù{ï(Ë®úÎ÷³ÃI7Õ­\ÝÕÝÕ9¨[je©P a6˜$lcÌà0Žã±±ýÆ6ç„yÀC ø‘,„„ „r�I(§Vêœ*ßxâÞ{þ8…ŒßxÞ,í±ñÜÏZgõZÝ}oݪS'}÷÷÷ý®áËדݧîáÚ_Ï£½À½÷ÝÇíw<¡c]VO\zéÌ-œ@ùU2SçŽ[ŸäÓy3ú'Ÿæž{îGùçfùÑ×½’,ér÷]óô“‡Y¿a c#MNÌöøó|–+^ywÜón—wüÔ•¬]ÓÄäŽ ôȲ)ËŸ4ÍI“)$:˜^?Ã{Îâ¤ÍXn/óðcóÝäÙǟ湇åàÓ{é.,az}TfQ¹ÁõSl7Ætbºs‹<ýð#=r”;oú_úÂW¸û®ûXì,³ûÌ3xí_ÇËø• 7qJpû­_gæ¬ÝLoßJÞîR$yVàiëç^…Û?ñ:ÈkÞþfVŸ¶ ×îå±´¤¢F©µkyì;±°ÿ0wŸNÚj142 ‹=nüÈÇImK_ýr†OÛÁܱ£4Ç&Is‹·R&מŸÇS’Fs˜Õ[¶2¿ÿ�ûžÙ‹É FFÆÖ¬ÄXdˆ@ᔣŸõÑJc¬Ã� ”$É’•ç_‹ïûdyJ’ƤyÁÁ‡É²Œf³IQ/Ý`O8‹ã˜ ÐZ㜣0†ùù9¤,'”$IBžg¬Y³Ïóévû;v œ(10äyŠR‚"Oév;øžGµZÁó|LžÑ‹»X !Ê÷Îó|åü‘sæž=¼øÜsÌÎαqãF¦V¡òÕ™CKÍ·=ÀSz¼æ5Wrxï®ýÄ_ðÊ×]A­’µc‚Šf×î“XXZÀóË­%‚0 Ûí€�GùYMQ”4½>õzcÊãß …Â9ÊE'2¤²HíО&/ÜJY•@ QZÓj/c­YY˜*~ŠÂe–$MB¯³â+7ÞË=÷ÜΫ_ó Û¹%žòA8úH™"ôº°:`À€ÿÂjè)Ä tbHp)x ÎÂê@X0`À€þ÷Võ‰'ˆ¢ˆ"™Ÿ›Ãó¼•QÜ�Ï/Gðó</Ž¼à’‹/a~~ž½{÷Òjµª7 ‚-B¬•äyB’”WAz>R(„ç,R ªµ!–[³ôzm)AÒç­¯!ŽKç[½QYU˘,5(€uXc´Ö¥ÃVŒ1H!²,¢ÒZ✇s cWÚ¸…ZB”"ªµ­õßÙ9yžáy&7e±•€<Oñ”ÂWš¢(Ê’¬ ÄBI¢°A?é‘f).·8iÀylß²¯Þø^uÕ…Œ65¿ðž7ðÆ×_ÍÍ_}„/ýõ×xü‰}ôZn»å)¾~óSL_Çö3œsÁ.^þŠóX³nš­Û60{4gÝÌzØÇb+AøUò<eÇÎM|îsŸçÙ§žcýúi Š Î;‹Ã_ Ð'ýå<ÿâ“\|ÉÜü{·Ç>RLñ;ÿé4«xíkÞȦM§ò?ú(×ßðM~ìM¯àWõ—x׿ÿy{ä 6oßM!+¿Æýà×~ýÏxêñœJ‚µ$® È G‡ðã?ýs|õ†ûùè'â’‹ÎeæŒÓ˜ß·—¤Û§Óépðð1FG%kׯ%+ *µ°àA›ƒÃBœp´Û TµO02Ìš³Oç-§lãåû®àù§žáð³8rèû_xÛn¹“,ƒFB?,¬,G¯Œ¸ÇÆ×LÒkw8ûܳٴ}“kW36= ¤Èú6ž§ ê±f÷2Ê’¡ªÔ½„ ÒÔ‡Fx些¸÷î»ÙrêIlÝsyÜA8ˆ“ŒÜ ¼¡ G––˜Ÿä¼‹.æÞ¯ÝÂ{¿ÍÌYg€U<xÓÍdÇŽ0³k=ëÏ?ƒÃ³‡ˆ†K×äÔè¹T¤y†_« ­#i·Ñ8ö\qÙYnýÖ­t–ÚœqÞ ÓKz¤qBíXg±´V(ßCàVÜçßó0¶t…j]~ñ‰q&&&‰“„( ÑZ³°°@³Ù$Ë2zý>ÃÍ&J)J» Ñ¨­y Æ9z„8ŽY¿~=ËËËLO¯a|l‚½{÷Òj`m1e²”’©©IìJvk¯—öR‚Èe(Š‚V{ )4­V‡‰ñ)–——›šâšk~œO|âãüÔOþ ô§BCeÌ?ñ§ì>›ÿø³—ñ»y+o}Ó{Iâ>î=Æ…_»“wýäk <ÃêUãXg !ïqàÀ‹lذ‰$Ž‘Ú+f¼ˆ‰±qægÑïwP2$ «8¦°X““¤)Ú+e`mE¯gЪ V¯S¯WÉócJQ$I’âûž.‹ô9Ä5jõ”Œ¸ôòsøý÷†‡ºŸ=n¡×[Â×Îå¤yks ëQ Òüc±8—cLZ.Î ñw$UI†¢‡$#¡«ÊÍUSæcë †ˆ¿Ïµªœ@(T7 0`À€þm¢ÇÆÆHÓ”$I ‚¥$a!¤I9.ìù­"Ò8áù½Ï219ÉÆõ¨V«>|k{,8‰T‰*u ÌdTB†>XK–’,¦¦B*•Aà'Z+jµÂ@¥R*IÒ-ªÎ •Dk¥$qÜ'ÏsªÕR´œ+W¥V/¹§z½Y–àyíILa)lñ’ðêœ%Ïó¿ýÿýy^ Ô÷2IœùžÖdýœ@{øaˆIS´§ €¬(¨V‡èçµú(RË•ñk-眵…O\ûUŽßG­rìè jµ ?òcÛyÝÉ3OçúënçчóÜ‹‡8>·Ä‘»_ä–»_äþ‘»fعu+Ö¬aýÌž}q÷?ò §ž»‘J ®³kçNî¼ý>fÞþ–“wÏð©¿ø:Yq1ñâ,‘_al¢ÂØè0»vžÅ¾çÚÜøÕ»ùÀû¿‚>ö±9i×V¾vó]hß§Ziò±k?M‘¼åšWP«Ï0·`QzŠ~øS<öxΦµ«yë;Þ€&|ùÆØ´i”Ÿx×k‘¾æÙÇðГ 4FjÜ{ïC¬Z=ÌS?ÏÌšÕ/Å-øŒŒÔ16AKAÒMðM–Å(­qXÒ<Ã*^8¼ŸÉ¤ƒ­ÍU왜„óY¿G//8ú œ8z„¤HR|­I“”z­ÌüUÍ*±µŒ4›l;ó|Šî"…°ÌÍ`jÕ8U˜î¸$O±ž&q–ÀÓDNS)$'~Œ›®¿Žh¸ÎkþÝO‘&}¬ô¥ ZkÐ!E8EµÑ¤Ý‹©M¯æŒ Ïçñû"Ë ¶œs.ã.†¤äò+/¥]Ä´µÀÓe´…N3r%IòœHzdÖBT–R¥½õ‰I^ýº×sï·ná–¾Ìú­›žDZKšÅT+!Ž2_µtGHÊ9í)´¯Ë‘~O† âÌ’f/ð ¢N§ƒç,•Z•~Ç1J)œ�åi¤EÎððIS'5“““EŽÖš6‘¦'NÌÑlŽåø…$`Y\\xi’Ô„,ݯ•($IRº>?ô�—]z9Í¡Ï>ù3·ðæk~‚(¨ ´$7–~«E1w„ËÎ;¹þL®yDzœ—ñ÷?¼—wûE{žZcˆvSo48vâiž033C£QcaaZùqš’g)Q ”¢Z­‘%†8-ðý¤DÙ¿"@¤¤i—~¯ éI††ò,'‰Z­õz)Ja»ÛíQ«J?¢ÓéÐï÷è÷$^ÒhLpÙ¥ñÁ?ûŸþÌ_qÑ¥Èl¯ƒ ~¥ŠÍ-…Â\µ ð?û>×›CˆkéõŽÇ ˆïkÆs8U||$8 Y l¥QÓÛêЗGˆW¦ ¾_\•B§ Â^u áà\ô’¸*-|ÿ&¿°„�ñÏñ½8Šî¯3`À€ ð@ýʸü·ó<Gk� D A§ÝÁ¹ç,Iœç)㣌 ãpdIJœÄÔª5V­ZMµ:D¥RAk¯¼y'À˜¼,{ÂÇI9ìiRç­*H"Vr»¤,§¬ä¤j]:L¥”xžZó—H¥q””ãÊ)qÎQ©DÄq¿lW!Ab-+“~9ÆŒÅZƒ” ÏÓS¬XŠÁœA X8qœfs—%+ ß§B+â,¥Àƒ•ñk­=p’n;ftx”/~þNvìåä;0EŒ”q²¶ÏÚõcœwþ.^ùCò£¯»‚ ÇÉ“q‰¥%Øw¨Åó¼È÷>ÆsûŽ’YËÜòaÎÞs ›6®f~ö8“#S|îs_âœóΧ21¹jŠo|í›ÌLN°aã4&K˜Ÿ_`Í©g²x¼Ã»ÿÃûùÊWÄW8X\ì²wïÒ†G}’ZµÂ§>õ—¼ì‚‹ùЇ>ÆuŸ¿Ñ±µ¼ûg~ߎòõ[¾Â}÷?Hµ9Ë'?õ[\|É)Œ4Ç0¹ÇàƒÜsÏ~õWÞÆ£ß¾…¥Å%n¾ý¶ì:•BHž}þ8C”·¿õÕTC¬ßÅó4y^`MuU+à@ë2Z!¨x¾‡ôGa I–‘2ð@ Ƨ§X·q=¶naÓŽml8e'›NÛͺÍY=³†¡éULlœ¡9>JÜëP¤1ín +¡Ûë`’”Zpbÿ~´“¬ß±“¥N—,/PòƒGù«~ «ïú_"Ú°†¥öN É ¤q˜¼@H…ÀÑnwÙ°nGŸyŽgn½“ìÈNÙ¹…u¯xÝP¢jC4*M\f0yAšç_£´¹£CFæ9¤§1E°vófê¾Ç¾_Ä×’Šï³jr‚å…%íiҸġ•¢ßëx~yÌ(…T‚8Ih·ºd¹ËËË/Æ !ð<k-IRþÞk­©Õê´Ûúý.Õjc † Ð!±ÖaŒ¥Ûí35µŠC‡344D–å,,, ¤ ÏSÆÆÆËÏñ½ñ3ë(lAài²<Ç÷}jõ*SSSt»]Úív—±‘a–Ë^þ ¬°dIyì( ‡NÌrî¼Më¶òô3{üô»¯áä];hÍëÔ81¿ÄðØ(O?ù$óóólÛ¶^¯Ëøäý^jµÆÁýû±EN%Ѝ ¡¤^ùžb*• Ê ð+ÁØ‚v·K½>Š$"Ò4Ř!an~–µ7râè1œX •¨A·Û¦R Éò.ÁÒB›­[NåóŸÿ$Ï>7ÏÅ—lebr)Qe˜ ¨³¼Ô%ŽsêÍ]ÿÝú `À€ÿ-ÎÅdÙY¶Œ)ZˆbòEÒt‘4ï`möÒfl‚²ßh€Ó «àWÁó@ZœËHMÔö06ý;¯ÇfhkФ0›“å}ò¢‹µ)J…qõß9Î$­6./Z#þ9FËÃôz˜NáyˆäõgP2ˆ0`À€?ˆü«ËXýO¿tåo{Z„e‚Üä8[†!¾¯K±$Oè,/²ÜZÂ÷ãcT*yQÐëõÈ ƒ±¶ô-ö}´§0¶À˜Ò *D)ªJáaÀÙÒ «T„5Æä€@+…ÖjELõð}ÿ¥1}!AÒëöp¶¼Ñ( ‹5­5J*úq! Ùl>΂RÆŒ1h­K7«R8WйßûzBH¢°Š¯5yš’v»äIÌèÄí…yLQPi‚,u[Ô‡†éÇŽ0,Ë¤Ôø:Ä÷ªÔ+M–žãÛ÷=Ì•W]AP 0EŠs)Ƥ@Nšµ1®ÇðHÀ¹{vó†7¼†7¿ñG¹ê•rÊŽ6¯–ÌZbru•NfØ$%¬ö8åäVOŽá‹®ÿ&»N;•Z3Bʈ¥¹Ýå.'ïÜÉÜÑÃ8éð”fõ¦í|øC_æ?q%×^ûAÎß³… lß>Îôô/¾0KžÁØh•N»Ë_~ò3\ÿ×ßâÙçæyà;÷ÓZÊɳŒ‡ù7 þËþ,ƒË=LÒmåüò/ÿ×üøIüÆü ëGšÜüÛÙt‰U33DÏ<ý<;·‡üðU—w:˜¢5†JµŽR©¾ç“gEéH¦t­ZQ ÿ‡A€§ÑÕˆ^ž Mlrú&+ÿÎdÄyJQdÄEJ.¡MF¦%¹-Hòíy•'A ¥$[n±ïñ§9y÷i4‡'‰ª g©†–žßÏ'ÿøC,Í÷yÃ;¯¡¹y-}›‚Z­FîI²,#”>Íê&µeÓ¼-›˜ ôC&Ã:ßþòMLÔ"Î~çÛ(ê}뛣´æ—‰´O–$ RzH©È<Gá•‹ B lQ`Ò„¡ñI&ÇFxñ…çYœ£Z©25µš8ɨ…õj›çdYVÆ}˜“çgWb4HEg$I‚‚F£+ñyž3¿°Àüܽ^?Ȳ!•(B*såñíy¥µjkss‹|û¾سç<Ž9JQ¬Y3M–å4êu´öȳlå÷QRá)òõKPI’ÐívXZ\bóæÍ¥k ÍáaZ‹ $yÆÌÌZzÏ=OÚ]BD†×í¦R™ÄZÇ/üÇŸâe—^@»µˆ'ËÝ„±‰)0ŽJTaíšµX[žú½F)ZI*• ÖZ`ŒEIÔÕÆ‹‹ ô“”¡Æ0Ya˜œ\Éc‹LŒ®¾¯jÖ)Š”jµŠ¯%NŸééuôº)‡AJ¨4†«äEA¿gq.âðáÃÜ~ûã¬]§¹ü²Ëɳœ´c1ÆGË ããÓ V „Õün7WN¥ASgyù)Úíg‰{½E‚Ü'¨l :|2µêFjµïm›ˆjëñjÓˆÚ$TÇ¡: ÕT«Pm ªcxµ5Tj¨Õ6}ßk7R­m$¨o@SνÎ~–ãèõç-‚`)ý•ó °~±`ÛØî1:>éöÑõ2ü§Ï¬qÆ¿øý½Ï¢k5dý£ܰ:V 0`À@Xý'Vý½—ýv–¥á(ò °EF–¦8›£dYU­ 5"l‘“å Y^º²|ߣV¯®ä/Z©ÔJ†©AÊï} ò¬ Vk!Rj”ôðý²¼&‰»[�©$Ö–ãúB–âgš¦Äq‚se¾ª1v%/µ,È’¢FÓ4Å÷=ÀÑn·°Îâé�g%A ´Z RÀQ˜‚4MPªtÄ$Iޝ}°†Îâ"ÎT<'Œj½F§×åøÜ: ÐA€u>¾ç#%`’>J‡ŒŒŽñ¡ÿûë\þŠ3ˆªUò"Ãåe)Tk,CQ¤X›`L‡¢XbffˆK¯8Qϰ{ë0¿õ¿C! ß}â Àpáù;©EÔ‚ž~j?GæŽqþ¥ç±¼d©¯æúÏßÈÕW]ÍÂÜ1͈¡‘!œÓtzǸìò‹Øºm”[Æ¸ä’ øÑ׿– Ï?‹§ž¸—Í›fHâ6ŸýÜÍt[ÇÙ0³Šm[×1?·ÄwÜÃììc¼ëg¯bd4å’—]À¦™“¨ú«Qfˆ_|ïoS˜>òñß ×yжÓ^pÜýÇ9pü×üø5ÜxÝ]¼òÛxå‘tºTkŠÂ9@—îãÜ (EJ)Uù¼%Äʬ¸À:CR‹Ó‚v¿Ëñ¹YüZ…¤Îà”Äy x Œ_¡¢•r1Sày•Z<ÏÀZê•:Y«Í“ß}˜'BXi’¶º4GF9¶ÿ�Ÿø³PôRÞöη0sönZ2GUÉú Ýv…8cé.·é,,Ó¼ D(EÇT<rÛ|üiƦÆÙ¶ž°Ñ�¿JV’~VŠxyŽs…FÔ †¿u’²Rì”Ä}jÍ!¦ffÀXyè”P¬Y;´†¤Ó.Ý($Ibª•:V\c]™‹l!ªT¨T«ä¦(XçHÒ”0 ©5pR =MFø~ùsÌ‹ ks†V«CšeH¡ÅèÈíV‡§ž~ ß ñ´fbbœ¢(‚z­Š” )5 ±¶ÜÕ K‹àRJ””¾µ†j%byy‰‡zˆ 6brKc¸NÖn#çÚtZ‹P 9ëå|òCÁþðã<óôCXÑ&+,›·îÀXÈsG’d„Q…v§5íi¬)hŽ “§  X)¹Ê'p8¤’ôú ½~‚ãRARAÉ€öÒòJÔ…æØñ£DQ@³ÙàСC<óô^ÆÆ&nŽqüØÓk¦Hó.JY<?dtdšáæ¶mÝÁõ_þ"Ö:^uõE8«ÀFt»0<2Í£=êéauÀ€ÿ’Ð#Ïgév÷áâ9tš€¬ ½&¾?BàáãÈp å7P*ü;›TBù ¼•MƒR+›å!Uðß¼®|mˆ”A¹x'4èá×ð|­!Ë:$Éq²lae1ü;¯~€jŠ‚äÙ½tÞí÷!z áĪÙü§×/ XZ¢ß}t︃baœC !ƒ` ¬„Õ 0VÿE…U]˜Œ(ò‰*y‘ÒïwÂÚ‚8î“åI9ÞnSò¸‹ö4¡A–¤YAVda¨âœB(…I Bx/•C}Ï}ªµ� ŒM)lŽ09y ž¯Ò#Êò¬²ôÅ¢UÙDîyAélS¥S­zXSޏR8õ<$íAà“¤}ºÝžѺ‚ cMùº•Võ,Ëð<Eø¥8¼R¤*AEøõ  øÚc¹ß%-rF¢~UC²<Fƒ§$κÒM+<¶íØÎÚõpËwpÍÛ®! „1¥+Ö«â¹³äÖw:Äi0R¤É<ˆ˜þòS¨¤EÝëñ² Ïáÿø“ÏrÉEç32<†³-W^u5ÿ×G>H7íP©Qó×a¥Ïw¿ý““I¼D·»Lclœ­[7qËÍ_æÔÓ'étЪI–.á+Ëù{vðî÷ü"RGÜ}ç½lÚ¼›¿ñ-NÚyÚópEŸÓOÙHetˆ¯^÷ižzø¶ÏœÉ3Oïç=óÄ/�� �IDATïþENÌf|ì¿@cH³¸ØåØtÒNfauSóзï']n±fd„ ×j“›¿:D/I +˜Ì ±+‘B#-2æÁŠ•|- ¶°¤IÊâÂãcãT«UÒ4-†J‚RXgpÆa ‰–<鯄|JíáU#ŽÏÏ“9AEùtö¥~Ê)ì{ð^¾ðù¿"Ë^Ík˜¾èlŽž8BeÕ­å¾TT› æ–Zh¥é$ i?#†”GEˆ¤ÃòÒ7ýÍ­œ¹i=;/=‡»¸‡ íÝl9õ\òTRGHŠh‰g,ž(’¹,PB¢) ——)Ò„È÷‰üˆ¸Óf´9L0<Ê®³Îæ¹§Ÿbÿ‹{ÙsÞyÔ¦¦ˆçæèv-Cã!<D$yN¯³L?Í”ÙÃRJÚí6I’¼tüŒŒP©T¾ïÙ&çð¡£ k×®BÊòá$Œ|:퉊nbä®»îæSŸú6Ÿýìûh·û<ÿÜ>N?ë ŽÞ_æ¼jVeæ«t‚J5"_0helE¤ôÊ÷î,3<\cݺÕ R¤q—ºöQ3;xì‰oóá‹·´‡9ûŒ]¼æå3´âƒüæ/_K;\|ÉZÞ÷›¿Î®;±¢àáîeíšI”'é÷ú¬žž Ûncò‚,K1ÆÒž M²,ÃØ.aTCˆ*÷Ü{'k×laõêmÌoqÛí·°sû&Î9÷dФE«5O³9D¿ß!ËûŒ’®78x�_/²wïslß±+}¤2QH·Õ¥Ûžc󎓹è¢ó81÷Õú*Ž£Þœdh|_üÌxÏ{ÿ#Ç_?¸’0àÿ{{ ¬-p6A¸eŠôýîa0>¡£ÖÜŒ ”)¨”™×ÿœ#ù^áEnŸX&ËŽ³´´<ï#eˆ”B(„(ÿT*`à`ýAV ñãÏÓúòmd{ŸCœÞ%߸=6††•É0k ƒ°¶ãÿ¾âØ—ÞËZ\š¾dÐ@)œÃõû’=ö8ý»î&yê)\šâOO£êõÁŽ0`À€ü‹¢»ÝRÌFJÉÐP$é>~ Ðª\L&è¤]fq.ch¸‰ +H³œÙ¹cÄqNÕ˜˜XR!ÖHò¬ÀØÒÙZ:B ¬3 úHeQž)u²B¯8[ËMJÐÚ_q´Y„X¹ [ÀàœJ¥ÚY[ 4²ã-Š c ‚ÀÇS’¢PÄqŒµ† ô Ÿ"Ïñ<‡senªT GäyNÖíQcÃ#çØuÊ)hO14>JŒ#.2*¡ÃP˜…Ã[i×Ú§0)ñ).¼øbnþÖ3¼ù U€ ÎXŠ¢OnR<_U}X.¨E²4'™ë‘µ—9÷ÌͤlÞ°†j¤øÒ—¿Æ¦uðÖ×]Ew>a÷©§3>>ÄáãJ©‰a.»â|þæë7ðŽ·^Mm(*&‰áå—]Éwx„öò2«WÇ–öÒÆ'&ÑÜuÛõ\páÅì:i‚ñÉëŽóÄS³¼ú‡_KèÕ˜;ñ"rV ŒâÀsû |ü#d|¼ÁüþOrî§ràÈc¡˜O{¼pô³1üäU¯ä…gŸ'3°qz Š”áZåì^½ç{(©Qh´” J«µ)$Qî#Ö ´³¸4a²ÞdóypÎ177KX‰ð•"I3ŒÈ‘RÕj&Aƒ'@)]ÖmX ZFh{œÆÄ$rÝ õÙ|æ |éúë[5Æ›~æ¬;ûrŠPaM¶PiÔX^naz1Î÷©Ž3±®AÇ` 9±ÀèÈ8Üù ´LÛ´†É‹÷°åùO~çYlÑ`Ëî3èkÐA…8ŗŠÌYºiJ ž´eäE^P«„tòœ¬›@%b>é±zr{&&yîÁ{ùÆ ×³eûNÚ}*ž'HãýÜ`¥GUGeÞ§+Ûé¥TdY³1Ôl"Ûmº½žR,,.R¬Æ ãûþKÏð¾ïS˜˜8îsüøq¦&×P©T8vì8ZìØ±‹m[Ÿäðá|üã§§|ìÚ?bÍê)Úå2:C(¬KK‡¼ƒJXE+V!ÊQ|œ£09ï³nf ­Ö"¾PÄ9b¬É¾‡ï¥WH–3Áðk¼ÿ?ÏðÃWœË«Þý~p?·Üÿ_úê½\rÙ¿ãô“GyÛÛßĦ«ðý*iÖ-Ëûú)EQ „Ck…çù`·Ýv;J Î9ï”gyò©‡‰“>a¥Êg>ý9þË‡ûìÚ2ÆïþÎÏråU‘$ SMŠ"AHÇñãG±V2³v#Óà 4FËB>/¨Q­6¨TVñâÞgùú×¾ÅOüÔkÈú=jqÚó-Þ÷»?Í¿ô¶íØ0¸j 0àï!ǹ%:ݽªNãë:CõhYAÈ‚&Bþ/,À(sòå4ƒïG —°ËI’9ºÝBEkÚ5p¯þ a-æÄ,ù ûQDÞëÑzðAl£Aõ¬³J‘C«×CÌÍâuºT×o@7ÿ‘¶ ÷Üsh­GÇCC†8kÉNœ uÏ=ij'õÅ‘£‡áâx° 0`À€ÿâ¨_}ïE¿]¬”ŤI)’äyFaRúýE‘£<³g êµæ0Y^†ÂÒ,gtt”¡æ étû$}ƒT©TÊìQç,½~„ŘtEt0øB)¼ 8…5!ÊdMcLÙf®}¬±ôû}Lañ´O¯ßEˆÒkŒ#Ësß÷±ÖÒj·Zá¥û!ðý²¹V8„€4Mʘ�ßCWŠvB’Ä)¦°Ä.I¿‡ÍR††›¸$Á"”ïÓêvhõ:Õ ^€58—#°diYôãù³ KefkµÆG?~翃ÉÑUèÂÃÓš,ïÛBv)\ß8+®‚´C¨¼Á#wÝÆÎ3ø«V!Ôß¼õnŽiQ«&\}åe´{Œ­ÞÈ­wÞŠ_“Ô‚©Ñ1n½ùk¬šl²yÛ&r£ˆ³!<ôÐ#ÔëµzˆÖŠ$éøŠ¸ßåöÛnáŒÓOF+ÇÒò FÇê|÷Á{Øsþé=´Š‚JX'ôª,.,3³v57Oó†7_ÉêéúýXE–zL¯ÙÁõ7ÜÂÁý/ò?zcC£ÜñÕÛIûû™høl<åtªua�Ç)YVà!V€ø8!¨²Ö ¬±8ëð€z`òœ¸×Ãæ9E–ƒµäYÏÇ÷<"ßÇ׉ÃX‡+,¥k\bMù`„Þy/»N=‰‰)¾ö¹/pë7¾ÉËÎ:“W¿õÍŒíØLÛôiÙ˜ Z¥³ÐB9ɱ…y ÓM‰j5lPH‰@QÑõá ÔÁcÜqÃWãâ×½Š4’ŒÎ¬'[NùÎ÷³nÝš“£tÒ6iÜAæJE'Ë©{žsÆ"„Dhéi‚J…°ZãÀá#•*ÕFk _ѨÕxäÑÇ9qb–õë7¡+5âN4+žuà„B‡!J{TjUúq Ε¹ÆÚ£^¯c!IS†‡‡ñ|krŽ<OI’kÊÆ{%}F†GÉ2ÃââÍæ(SSlÚ¼‘-[¶02RþÛðp•( |Ÿ4ÉÊÜãÜÑéöè´ºDAˆ’‚0ðñ´ÂK«µÄøèžöð”G§]þ¿j¥ÂܾÃ<ñÀ“Œ¬gzKÄW¿ñ ýŃœ¶k«G<&Ömg÷žKxã5¯ç—œE§Õå³ÿïgkpú§S*´Ú-ž}æ)Æ'FèöºøÚ#K JT¢ˆµë¦©Vkeï’­ÛNæ±ÇŸç§ßùû´–s,Ð^ês÷]wsò)›9åŒS9qâ …ÍY˜_DJŸÉÉuTªM~çwßü°n}ó/:‡ör‡‘Ñ5d©æº¿¾‘Ÿû¹ßdaq™_øù·³ý¤SYœ]àmoû%>{Ý-œqî8ŸûÜǨ×ÿûâê `À€ÿÝ„-I‹";N’#Í:+ñE ßG×Ö¢‚„W©ø—uƒJ„Ѻï u¢èaLHq$¦‡­<à_úóøáZ-ú÷ÞKòè£è-›!(æðFLj¶oGxÙü<Ë÷ÜKúÀƒ˜gžÆÅ}„”ÈJáy8cÈ#~ì1ºwßMqø0$ ª^G6eæúóÏÓºé&l–!GF°G¬ž¦rÎÙè±±ÿ©Ï>ˆX9*Q� 0àñä_[�ÀèèèKâgš&ø&Ë2*•±ñ1^xáy|ß'ëgÔëæJ­1Tjz½6ynP2d¤9JQ²Ü‘¥ ™€4M #OØÔ¢hÏÃs²,Ã…:cèöS´ÖÔëu:Z;´öˆj£+-å=´PøZ÷ûyAµ!µOa-iš£ýêÊè® /`³EÂ0À÷}‚ÀC*Kšd$R‡Xk1ΧR 0ý.Q=à…㘟`~~Ïó® ³Ö÷©×«X)è÷ca ðÊ Gò²µ>ɨÕ}³}ÛZÖ¯žà¦/ÝÉé¿¶›L´I²˜FÝÇÒ@êaN,.qd6¡Ygi©Çúñaºý6}þÔ:ós4ÖLsÑ9ÛXšK¨…k¸ûþg9óŒíÄùQ¶m݃·<ÍË/z"7ÔFÆ9m÷<ñä</{åDÜÇ } 93[Æ9|ì g½“†š#?¶È©§Í׿~Ý®ad¤Áªñq²¤À¤96Iñ”C*Ž$µf/t“6QMâdA’geþ©4êS=‘sëý±ýŒMŒ¬® BW…uëwð‰k?ËáçóÚWý^TaY¬E_8Á“{÷±mËVêÒÇó<²$E;AÒ =_jzq®QQ„( Œ5„•ˆ<Ïñ”&\)NȲœ¸0d¾b9K°V0TBA¡EÝAï@[Î÷ ,ðñÏý9Ä[~âMœ{ùåGgÓ˜œÀ3ޤŸ‚öXJâ"'/ †"Moi™æØ*jaï>ÿ$ÖMS÷ž¼íNüã-N}ùEôg&8¸´ÈT°ó̳^Èmwý §g2³i=•°Ær§Çbfa„Í s½.ÕÀ§92NçøQ*^€3Ó+]ÙCa„'½^å,':-6lÙÌ•[v0{ø(÷Ýó�çœsu]A$"òZPV¨IzÝ/ ÒŠ@*TRäCSÌL¯¥Ó들)Ævˆ"ªaR%|ÂZ•<L±q†”†ñÑ1’¬‡ð›·L£„ã Îâª+/ãÙgŸÁ÷£29OQÆ#j4†ªäiFázínJ¾²àãù£t:Ž,�Ïó¨Õ§Hó‚<µŒN¬c×ù{xê±G8ïÔ«yÙ© ÜôX·u»èj–ZóhÛ¥ÚˆØ}òÎ;ç×8rèU 5̘£^¤µhéÅý¸‹9sKSQ~ѱ )r|WC«ÆÚu|ñ‹ŽüéŸÿ I?æÚ_Ç{é%à3·Üb©µD³1IMÑK*¼ã?ÏÍ·<Î9gOqé+ÎàÀ‹/°vÕ>ûÉoòÁý?|ç¡çѼöµ»¹âÊ×ñÍ›ïâ}ï{?ûö?ÍßÜø‡ì:e'îòà*:`À€•JEÑ9Lš§'ºx•i*•5x"å#TøO—sù—›VD§rAF©ˆjuQ4‚µ‹ôâ,µ¾ƒµ ôNÃ@ðÏW0àþ{GY$Ešâ¡ÛC(…·a¶Ó¡xî9ŠÙYlQ Š{ø0æºëÈÄ(E¾w/ùì,õË/'\¿ÓéÐ{ðA:ߺ•ôùçaDzð õj•ÊØJ\»9x5½½i#Å“O–†<ÇÖ˜•Ú?`À€å=BYáVRô^º V:pþÝ ø‡íØïíÈÿªÐív‹(Šˆ¢)a’å ¾¯éõºÄIŸ¢È˜žž& jô{Ö(ú}ÃñÙÃ&Å ž¢uJ jÕQpk,¾ï“ç9i’“ç9µZ4M‰Âa'1~P bB”#ùA”‚h¯O£1DQ$IJÑ+W¹}%°Öe)yž½¤T áHÓ „Â÷ºý%aQˆ!ÊŒH)Ër¬ò=,Æ)ÎH!œ¥³¸¦ 96ÆòÂ<Ê÷HMS ¥N–¹”¾¢¬ ËÖ‚ö*Zâ„¥›ö¨U<-¹êŠ“ùä'¾Å[ßôZÖNû¤ý)Ú­>~EÃÄiŸjm„º.Ц÷âF'ÆQCMòv—¼3ÇY§nåö; KÏ<{€ ›'ñµàeîáÞÛïG›€8é «š™u›¸áË7÷¡o,iÒÁ|ÎÝs:7|é¯) Ga ý~ÆÄä ð¼ˆoßw?W_ýC=zOz̘çÄñcŒ“e)IÒÇ EœÇÌ.ž`íºU„¡¤Óé` pNa Ÿ:ö>{Ÿ|ç•T‡‡Yj-Ð x×{~‘§¾ûM®û«Oòè½ð#?ö:6v2õJÀúæk*ÃTƒ ýåÒ÷ñœ£Óïáy19=›!+Y“ËrµWº–“$)³|£­5GV+F¢a¬ƒ$Î(F«Ã™…JƒãwÝÍÒ‘9nÜ÷&Ö­âçõ½P IDŽ7\#í·8vüõFcRk)Ñ¡‡'"Ž£ÕêÐk'Ê#ð<ž~ôQþη #6Ÿº›}ya…ÖBÕlܾ‘Å¥ã<ÿÌãÔBÍèä¾öh·;¸$à #ú…¡×_f¾Ý¦×n366ÊH³Éü\ùàR¤9.7HVX\qt±ÅôØã«Ö€Õ|á‹Íš5ë8cϹé8zì±-À kC`AûŠ<ÏpÆ"œ£ÈsÂJáx©,.Šêà2ŠÔá)Mä‡dy%aii´ ¬Öhµcº½>¡Ÿ°~ýZ?`nî(Ó놫9Ži1ND’±‰I’¾%3U|%h-·ÊsQ–a ‡_ ÉòŒ,Ïi4(­1½_øÍãÞÃΫøÏ¿ôFòþ‡Ùà n½õ[ì<mEÑ£B糋ǘ^3ÊÁƒ‚JA³Y§ZŸAHh/·HSÍêiMa ‹3nCY‰©7xüñX·®É5?þzò¸ÍEç]«®þ9î¼óNÎܳ‰Â††Ç(2Ÿ$ÑÜxãM|ãæÇù¹÷\ůüú¿7Ïpu”§Ÿ9ÄoüÚÿÉÙ9¶ïåÂK·ñ{¿ó>ú±OòË¿ð»lÙºk¯ý^yõ¥,-ìG’®Z �ir‚<9NE$HÏGËq‚`š Zýò=<¯ÔG–¥¨,‡ö1 Á(„͸ú¯ˆ,MY^ZÂ,-Q;z”¢ÝBhMeíZŠÇé=‘‘,/ÓiµÐ­e²çŸÃ<ú(8 S«Èžy†Ì÷é­_OµV%<pþƒÒùîwéML û}‚GeqjŠht”‰áat·^­F43CZ­aº]âƒéÔkdJ1Ô¦V« vЀwú}X\„åå²ÿJAµR±1¨ÕÀó?«8ò•gÁïÅó ø×#¬6›Mò¼ ßïRe™Â’ee–©jÒ,ç™§÷2Ôajj QÇÕjc5iÞ§^«„5œóȲŒ$ÉH³ì¥B)ÏóH’䥛i©$…)HÓß×c’—FK‹¢X)•ÒEöRî¡1•Õ—r…Zâ�)BúqLMk*•¸Ÿ’).Þ¢0¤iŽ-õÊ{: J1É9iÜ£Et£îòý^PÀ¡ÿ+{ïeÙUß{~öÞ'Ÿ›oåªÎ¹[êV+G$�‚± c‚ǃm’Á˜g?0&ØÌ8ƒÍ3Æ€ócr6H€²Ô-©[ê NêX9Ü|ò>óÇmÄ›{fÍZ~è=t?kÕZ]ÕÕ·ºîIû|Ï÷÷ý™¤QJåXfô<5qª±,Çw,Ã&I4I’òK¯þy>ù‰²wßp+IØ£Û‹h¶:˜qŒáÉÒ„°×ÃÑ"X˜™fͪI”c‘·2šÍe.½ì"‚à¯Ù¾cAož\g€ÁÚuk¸þ†ç°´Ü¢TpYZ^`ÛŽM|â³$qËÄ:#»T*WXXXaÍÚ)ffæç«,víºGÝÏóŸÿÒ4ebbDZY˜_brrŒfs á*jÕQ|ßáìÙ3L­!Šú`R t&‘RÐé4À–-ì,ž!NS,ÛB*¸ê¦ç25Yå‡ß¹›Ï~úÿ—avトçÜþBDiZ-ìXu{d¶À)ú$† ˆT£Å䢿ßÄi_ø–E§ s²i¼8%‚²ãc‹Ðê2wü8÷}ïûxlò’_|1[n¹ƒˆÃ§žbinŽ©5«Ÿ§Óë„ B䘦ÑULCRª#µ…PÊv)eU¬(æäÞ'hvÚ<çÖÛu:ËMÊ£#˜%ƒåæ CÕ2×ÞpÜ{/<ú×]=£cÌ--“æÇcÃÃDIB˜ÊèG%“¦Ï÷)W+(%IÓŒ èPtû½0" "ÖnÞˆå¹<x»ï¿›bµÌèä$#¥)i’!ZôK¾2­)K¸ª@%dQ‚:¬¤IrAŽ 7r¤ DT‡xeÈr‰2ªÕ †Ñ9K}|˜åùiJ“FkF;¥´˜›ŸgýÚÍ$ºK··BÁæì‘Y¤€z½‚Ö)Ã#e„ì»ÔµÐ˜–¢Σ¤¢^Ÿ„nBIÄx¢—/PZ½[o¦¶n ¹îQ“#ëè4–ùó~ˆ×þÚ/37ÛÅs‹8®ÏÌôÆ'G0Ì2ÍÖkVo@H“0jÆ&Z·qŒÏ3†…t\Z­%¢0İ$óóg‰Û]††F«óØã÷°oÿ:e6n¾“Oå%/º‘ûîù#Š>?všï}÷nî¸õl³Ìø¤Ç®ÝiÞ¿Â{ßûV^òÒóÐCñÎw¾Ÿ+®¼¿ûø‡Y·®ÎüÜ~L#òÂê€Ïf14:Oˆã&ÝÞq’x»ºÛÁ%„pþ'ýÝŠxÎc¢=­9ÈVÐ~\仌Æ`øAXc–—–g¦ÉçæHƒ�é{¸ã$@Pð ã˜üÌŒÅò'ž€BgËfÌ vß{­¥e–öíÃi4šž&=uŠÜóHo¹yú4ÙÞG˜>p�Q©`®ZE}iaYØCÃx“StªUt÷…UÇ&(—1mg ¬0` »%°²gÏÂÌ ÄñO„ÕJ¥ÿ=µ”Šà¸ý¯ø†èNÎë+â##ÈJ©:ÏŸ.žVçM€ƒ Žg@X5 E’DçÝh†)ûcÿqÔÏk,–0•E£Ñ/›9~üäÕje*<¿@IȲŒ8‰±-Çöp\—n¯ƒa „(¢8@åj\çA€ëYH%±¤…iZçóO²,Ų ”!Â!-Là JÒ(Æ6MD¦i‘œa“D#•ÁØØ(AölËBb“DÿƯÏÿ¬¾œh*%4BRr”aÐn­P-—ql›Ð²0 ƒ<He¡¤D$kÐý¢*Ïë‹Íi–£”í˜ÄYB6 »-Ö¬½€ÛïØÌÇþîÛ\tÉvFêE‚N‡b©ŠéÚ„qŠçùH4JHH:Í#«Æ›M CˆŒ‘U“‹£œ9s–ʰdn~Ž5«'YœŸ!K#¾þ¥ïòæ7ýËÁ4¶/±ƒS§Ž³m÷:q¥¦irÑÎKx྽lظÇqh¶šø^‰;wr×]? Š|ß'I*• ÇŸ`×îí™#UŽaJjõ ³³3h u†ëº„a‚à¹÷üà›  &'GÑYF¡X�Cñøáƒ\rñÊcCÜtû ¸üê+¸ÿ;ßåÎO~…_ÿWÝ|=ÛŸw#jÍvÐ!7%yÑ]jb 7Íèu{J%t¦Ñ:ÇR&Ži …eY„A@…H•£ø‘Fä)"ÏiœåðÑ#<üà^fNŸBèË1¹á–›¸àe/!o6èF)[·_@…ÌÌ-`˜&žçƒê¡súûƒ€4IP@/ éµ›ÒEæ5¯@tvšðÌåZ…µ×]Ʋ)º>I'À²,üj™nØÃsÊ\uí5|ç›ßà‘={ص{7ccc,-7(ZÊ4çN• c›ƒbÁÇ4 òL“Ä d¿RAkM·ÓÁ¯V8|ê8R^ðÒòľý9rß÷X¿fRZœ;;GØmæ1^ÑÇp,ZA› á8¥JP,Ï/Ñîv©Õëx®E’´ ³ÂJ0ÄA‚ïÉRûlÙ±‹•ù'ø_}+Û·oáe/ÿòÔ#— ­Æ2Eo%ª•p¬qŽ>y–Ÿ{ñøàßÂK~î…ô‚&_úâW°ìŒÛn¿…(Žéö\×"N:t».E]¢ÓëQ.—eif¿PâùÏ»ƒ¥Hpâ©9þñ“ßàÓŸüc›/õ‹hµCC#tºm„Ë€8Ê£Ý Ét›ññQ–Wbâ ‹Ôàz9Re¤YDšät;k×)LC24>LšIÖ®·YXê²eËF N™Ç»›Zá^º­½|ók¸þ9ãÚCœ8zŽ{ï?ÀJãʰؼy=‹K þøþ‚°£¹ûGóÙÏ|”7½ù•TJ†Ð¬4›ƒ«Ö€ÏZRò¼I¯wšfç)LiQ(N Ì¤ª�ÿsf’öì !QF ¼PК&çhaÖà¹?)2ðŒaÙ6õz ³³P*¡V¯FŽ!¥@NN¢¤@=JrøùñX»vâ_~ö¶m¶Mrð Ùc!|ˆˆ£X¤tõU”6o†J…¾§X�� �IDAT ¨·Ûd‡‘=K§Ý†‘aäÔjl ¹j ¸CCX££$¥2¾ç 6΀žõ¢êÂ,.BöM›6õ…ÓO§)4›°¸–™³y ”Ëÿ¶¸*YçÏ8y–=Jï‘G`ï^(•»wã\|1öø8a’Ðn·i·ÛT*†††=Ï„°Ún·èt:˜–ë:DQDžçضM£±B¯7ÇÐÐCCÃ(iP.×XYn³²²L”„ø¡r …"Ž£ú ÛÁ †i’¦)†aeÇ1)—Ë$IB–fäyß›¦Yàú†ñãÜ­¾ÊnZ‚0ì†!•…a€ëú„‘çX†Î!N4J ‚ àÌÙsý2­r…$NH²(ÃÀ0ͧ# Ò4íG蔜¼Ÿ¿j*œâ³óÓTku:½†aD ‰Ò e*LÃ"Kr²$¥›´‘Ê Ír¢(AÈ€(Hég>ÙÊ�ñšW¿Šo~ëw¹ïÇø…Ÿ»'˜®‰”‚$ AK) ‚sçN1µaŠ qK:ÍÉ‚ë7¬æÉ'òškž¹™9¦ÆFfݺÕüéŸÿ¿úÚ_atb„SG²~Ãwß}';®Ø…ΤT˜ÊaÆüÑþŒ_xÙ‹(—ËA€a*&''(<¦§Ï±nÝ:Úí67nfvv†á¡!ºÝ…¾k°Û¤V+sæÌIlÛ&ÍBtž‘f †tB°´¼Ä…166‚”Ðh5Y·a#NÑãäé§X³jCyŒ¯[ÍèH•Ûº|ç¿~ïïy€<ú0£ãcL®^ÅŽ‹vá•KŒTÊP)CУ‘æÊR­‰£~£{¢STŽ’ø¥"…R±ÿô&ÍX™gùÈ >̾'Ÿ¤táÖ[žÇ¶«¯à_¾úE6ïÚNØX Mbb l4‰¢Çup‡v»e+È5y®É“ Äd™ÄtúvüMÔ¼͹EXn±~ëf¨¹D†fÈ/Ñ BÒ<&M# E—nb!¸åÖ[ÙsÿÜ÷=Üø‚0\«±²°@æØ`ZÄaHn›ÄQ„ÖåròœN»C†XÊÄR&•†©Ê Ê3zYB©Täì “ë¦Øºc+þð‡|ï+_â¢Ë®fª:ÆP±Èr»Ñ¿ê Jb—<²DÓh4Ê$ŒBò\’¤9­N@šÄË6¹æD‰¤ô˜œ\Có\—ß~Óæ»D­^╯|IäS*ù,®Ì°yÓ%aEߥ×qùØG?ÏÕW_Î7=—•F“…ås¼áŸâï>þj’$£Ý°“={öcšŠ»ÆðÊ>Fm˜Væë:‰(‰Y>÷Õûùü7åÀ¡Ç({CüòëŸÏ Ï»r½J¸„AN”„¸¾‰2 ÓM(ø#ôº ä"fff¥ŠH –m DŽÎSЂ8Ö(‘ÓiEØÿ£µcë“„±‰QÊåvÄÈð$¯yõ¯ñ›¿ñ6~pß~ ÀqàÏ¿™î{„w¿ë營¤\€·½óelÛ¶ƒ(–ŒOpé%ÛxòÉClÙ¼ŠJ¥LAŠc9ƒ«Ö€Ͼ%5 Éu‡8¥œ ÎáT¶R(l�ªÀÏÈ<ŸýÑÆ4"‹ÎÅ3èPa(Ó¬ å`üí½q0 …†ãF¢RFU+ˆáa¤”¨5kúwí?NúØcäaDéöÛ𮺠gr Q,¡Ó ùo’;SS˜;vàßp¥‰ ’Ѻåƽ÷>ŒŽcz~{ÃŒµkÈ+ÄØ2Ž1- ÇqÑ¥–m6΀ž«„²¬ê…ùyp]˜š‚5kÀøožI./ÃÑ£93óÝ0Æ*ÂHža¹BjžÎCG`bâ(˰ë3I>Lû»ßE>ñ”Ëèv›Ø¶q\—XºÝîÓFÈZ­6VŸ‰õ‘iš(¥p]›B¡€”’0 9ï@ ÁÌÌ,B€ë”ðý"##£äB#dNœöðý"QœÓí&H,´Îžn‚�)%®ë¢”¢×ëQ,q]—ÅÅÅ~‘MÇ1R) C"D?k+Ï5¥RB¥@…´Û- CaÛ6Z÷Ý¥B(ÇeiéçΞa|lô|SXF¥Z!ì5ûû:§tˆãøé‘¡¨Û#CÈ=<ÛfåÔiߥ§|ók_ç¦ÛïÀ+UЩ& ÓpQÊ ÌcÂnÿýÑyŽ×õ1Lƒ j" Ù/_ŠK‹ìض‰]»Vq÷½'¸ý6ëÉt„”¿P"ÏÀ +Ó˜ŽC¥\!˜ŸcHUÉ•A‹k®ÙÆûÞÿ)^ûºœ<¤qß1xÙ¥»±Œ"ûö=ÁõWo#N\uÕ…|åkßeöÌ4Òhe1õr×6™_¢\.`IS,¸Œõw… €œ‘‘î¿ÿþó!ÅB•4ɨÕjdYF’DÄI„aH ¾ix$IÂþý²uË:†j¨K£ÙB(ƒÚpî»Ññëˆã”4K(¯_EVkñ+úÏt¦gyø®{hLÏñàïáί~ Ã0ؼm+k7m \¯a•|f(—+˜–‰¡FNƒÇNÑiwX\\dvn–…¹y:Ó3‹Mªcu.»êr6í¸€uì@¹Ý…9RÊ#u ¥upy~±H’$ô‚€á‘aº¨Ó4Ѧî»E%(Ç‚8"O T.":]ÿÁݨ8æª;n¡[²Hœîr‡••T¡ŸÁ„!•R K*ÚË ®¼â ¼ÿîüÆ7¸åæ[¨sfq«RÆ9®e]Ò$"ÖC(’8Ag9B ©0½a`».ËÍe†&FY\\$Ê"2×#ì´¹üÒK8}ì÷}÷»\}åuŒ­^…Hc2™aú‰Öئ´M …DãXB&´Ú ZÍ.år…Úн°E”„„¡ÀqK|øÃåƒø«&=Þýûïà/¸‘Ç÷íÇ´*4ólÛqOì{€£G±cû¥” eî»ç>ùé;ùê×>@+%ÞøŠ?åúëküÜK^Aš%,.<E»=Ë ×ßÑ_DšŽa³ ›çÝïýÎÌô¸ë‰%J«s.~îsøÈïý.Ø´†’-9öÔýÄ>xŠË/¿­;ñ ‹ Ön¸‚íç®»î╯¹ƒvw–(N( ¸Ž$ìÆôÂi{Œ ¯cjÒ¡ÑLÙ}Ñ.LqËË=®{ÎU¸NM†Y^êòøãO°wï“\~Ñ;.ÜÄÔª [¶¬å‹ŸÿÚsŠ¿ýÈ[¹áæ+Eë% ¼ñ oäož?÷Ò²¼<‡%ëxÞßþöw¸íÅ·®\<«Ð@›(>C«u’<÷™y–U|Î÷þl¡l¨®ÇÍ«zžvgšFã1ŠÅíxÞÔ`—xéõzœ9q‚ÎþýTŸ|Û÷17l@úJkÌ©)’cÇHö=Žn5±·n¡¸söäÂqð6n$_X 9}F†qvï¢xÅ•ø\ˆ°,LÀ/–ˆî€ÞÑcäqŒ½kÕk¯ÅÙ¼-%Ï#j6iÍÌîÜÉÔÆŒü4ö0`ÀÏä*A÷]ª'OB§ÓÏQݸªUø¿ëk•2lÞ’Ó3gyüÔ9¾·?Ç›íRšjaú1¹66uQgmi-«J«£åÏ”bž$°´'O¢ææ¨Üz+yÓ|ê)fðt©Äø¦M¬^½šñññþ„«1˜îyF„U§x¾ƒa˜dY_ ÕZ377‡mÛç3­«W¯bffšÅÅyffæª`»AÔ¦Xîß¡ÆqÊèTE¥r )B@ô€¾KÕ0++Ë!¨TJ€ JR,ËDª¾¨šç sI’¤aÐi6‰ã)yž#”2Ôù³… Ûj²¸¸ÄúõkY¿f-N×4h..púäQ&'Çð<8Š%JfNfbÕ*–Ûªµ*ÍFÇP,,,°~j’'¢2Tght„V³0 ³/è†Ý�)Cõ–š3DQŒ2]t&Â�ÓtÐ2…\ãûÝn“……eÞòÛ¯ãå¯zO:Ë%»6³¼ØDçžçã{EÂf‹b©Èé#‡h¬¬°vÃ&¦;Ë É ÙÏìt ±Òbzú;¶oà̙Ӭ߆u›8ôÄ!žûœMÌΜ`ç΋ùÈ_‰Å…õñ*9 íÎ ›6oaÓÆ<ºg/w¼èvPJQ(ø\÷œk9tð0Ýn)S¡8qâÃ#5‚n0Ì(ªì¸`+AP­•YY^ÁóJdiÌÂü"û™æå¯xíN“‘¡U„a„ízŒë„G±cãξ0­3|˦¹¸@q¸Æó_÷ Ò búôŽ8Ìüñ“<õøaŽï?DAdIF˜¥TKýÙ…$IúñJ1¿0OgÔ†j�L”KŒ]yëvogýæMHÛ#Mz­%|‘¢,Á²-:afs…NQðK(K"MI®ûÎÍ4é áqœ`žo6Τ&KbÚíõ1Tš’­´Ø÷ðC\¹u+¹ÊéfKaÌ:·†kÛt‰Hâ˜(ÍXn4)9a#s¸p×.<ú(?ºó{\yÝs˜œg¶ÑÂõ<–çg±›<Ë0Mƒv³Åª‰I–—p-‹^·YŠeÙDqŒ_(±ÔXIJm†êUt’ô"ںņõ›X»j#÷Ýó�§¦ÏrÁ%!\‹DœoØÍ!‰,aà—Kd™&L»©8uò ÷Üû¿òÚ×ã»#¸n¹öIî¼ïAþð½ßàío¯{ÝoR*˜ž;EyÈ'Ö1¶lä _ø¿û®ðÇüz6nÙÀì¹Eþü#Æ _´“Ë.¿„vk…/|þŸ8rä)¾ø¥¿ MA°jr+_þÒ—ñìc\|é¥?z„G÷ÝÉÿ擬Œñ\·hò믹š_ýOï¢0Y£Ñ^àðÑǘ?u”Ý—\€4J x|íë? ^3¸ñ–K9wö ¿ýú·ò‰ÝOµæòÜ/cd¢‚0 Ýs”Šeº±ÆóŠôbÍââ2ËËž'†ÃÊÜ Ê,cªœ«¯|iìðõ¯~÷¼ç™>—R)Ãþùï™\U#Ï»Ñåâ‹/fÇŽp͵Wò£»ïãê«/eãÆ‹ùåW¼†ï~§/�ÿÓÞÈc¢0 µ1íaî{àn{ñàÂ5`À³k]g‰ã%”*cYc8ÎÄyçæÏèŽ`zH$¦6pÝ”0lEgÉó ×@ÊAëÆ3rã`š‹Ep]D‚_@z>‰Q­â_°# Iª5P kãF¬ÉI”祰ׯ§xãdæÚ58«× J¥þ¦shˆÂ®]Èn—<Ͱ7mÂÞº U¯“G!ÆØñü<Y¯‡¦ø¥¶3˜è0`À³—V»?Þ_.Ãäd?CÕv~²JHtL#lÐŒ[tó�§.ؤ«:Fà1lø¼ýıj`0ŸÍÓn¶©S§döËÇnÈŸž°š6ô \^†¡!ÌË/GÏÍ!Ã]\Äêvñµ!h6›xž‡aƒmôL¬z½.ZëóSý‚§ááaZ­6a¡TF'$iĪUS ÕSšÍ.:Ë1 IÕ«bÚÃTÔý2JƒÓ²Èóüé–vÓ4‰¢ó|D€ÖÇéçõº]„i s´&ËLÓ¤\«³²¸@šj”¡pˆ2ú…UI’¢spœ~ üÊò2åRÓTt»m<ßežÀv”2I’.ÝNùÙiîºó.®»æZÖ¯[G¸¶ Z㺆_d¥ÑbÇŽ$a‚4mâLôzäHžÕ/æò<$IQRbÈóÙ­"#lÛ&Š":í¿Æðøj®»zþðÇùè‡ßiÙ½˜4ÕA@®¡ÓhÒh¶ªƒ4¨ÕFˆò&½n—Fs‰ÑÑ× Ï%®SàÐÃ\så•hré¥Wp×]_£Û¹šBÑÆ±-6mœbæô2£“ã " Ç ;¬]»†£G‘$ †Ñ‚Ȳ Ë29}æNÛv±m›^/ ÝnQ*Kl§€ýŒÜ£GŽS­V0MÛvÈ2M%t:]’8ejjÛ6Yi,âz¶#H’ˆ-[·29Z!Í3,iꌀ m÷ÿ¶»8†ÉhµÎêç?’Œ¤Ó¥×h²²°ÈòÂqöÅ©H’„0 0M ß÷(‹ Oà|„„V’K(L KÒí4‰Ó‰É „Èiµšhà;­vƒ0ê1\"’¥¥%J~%û'ª$ËQ¢_ĆX¶A†m“;¿ñM&'FÙqíåÃeziˆ©L:­�%s _‘!ÈRíZD9hiÒMS&†ê\~Ý5~l??ò0;ä匎Ž03?O¥T"W’4ÏH¢�¤i‚Rç4DŽëº)È…BZaR"IBÈ%–í‘kƒ<Ë ’K9l¿h'<x?_ùòW¸ôª+X½q=AÔ!OslÓEZ’^¯‰ e¤t£÷Þó(_úò>¾üÏcZdB£sòä,¿ó;·ñÎw¾ƒF£çû”JCTÊî½÷^þâ/>Ìß}üN^óšç²aýnö=v”‰ÉÍ,-µyÇ;Þ‚St8rô ïúýOð÷ý*—\s#Göí!Irvl¿É©¼ím…ëztÂ&ïïÛyëk_Exò««E¬ŠËª+v#­¢ö2C…b¨L%š$î BCñ§úQþás÷ðÁ÷½ŒK¯¸˜·ýöûøâ7f¸ds™÷¼ç lܸ•ö<a YfsâÄ,kÆv§)ãUZ]“4U´Úa/ Ó`o|ã¹`Çe¼õ?þG¾ôÅïãÚ0<\`çÎ!ÆÇÊ>¸ÃL©qÓóŸ‡mñ‹/{ ŸìñÍo¾½{r×{ÂâCú5®Îå4 Li#=E®ð^5PU x¶‰ªiÚ£Û'Ï3 …M¸îÔ³(kÔFÊž'Ê Ûž¡·°ÌÂ,2WŸ,Ë¢^¯ãÔët~Ü'ä9F¹ŒÚ¶·V'¿òJ(Õ²TìÏy̱1Š• h°L„iý_þ^:þWà®_yŽ(—QSS`[ˆ,؜ĘžFŸ=KÑu)ã 2V ð¬\(hÒ0¡·¬ –`²“C 4äÒ Na1lq¶{š¹ä©‘²®¸‰]îš'%EK³£ ªääZ“Ó ÁÙÎYÎvÎÒJZLyS Cxjp¾ýélZM¼¸HkÏ’ Àغ¹};Ú4¾OYk*I‚™e„IÂüü<•J…B¡0VŸ aµ¿ŽÉéõºÑwaj­)•Ê$qB¯×#MSâ(fye…r±ÎÔT™4Í£ÃÇ·žÎe Ä<W@_x˲ ß÷q‡4M±¬¾x›$ RöGåmÛ¦Ñi“¦)žç¡”"M‚vŽe: r¤”H Z÷ó-µ¦ß@Ÿç$I‚© \×¥¹²ÂÜÜlÿgZ6 E?OÕýìÖCa’¿èEÔjutš€Î©Öêœ~ê8qtcΞ›ãº›n!B`ú.A»K¬3²$ÅTi–Æ`˜I’Ã0û®ß<Æ0a …ÁÐP•,ƒ$Žø¥W¾„—¿ôãÀû¸`ûfJ£>A’ë×õQqÈñã'X;6B·Ù¥k ‚¬E’kR°ví.¾x”CޱyCn7ıâ d÷E»ùØßþ%ss§I²9‚©±õ:t’ëo½žÅF­Câ¸Í¦ÍëØÿ•GH“¾pýãØ†jµ‚m÷ã²,éœRô"Ò4Cɬÿ{b`š6•JÈðýqœ‘抹ÙE*M­^Á±SÒ̤Ûm16:Bœ„LMŒS.šô1¦ï’fYÞ/îRò0&JCÚ­ A’k"•!&« ­¥šk )QÊ@ˆ¼ßlÅ(%q›<¤iB#MèõVˆ‚–càx\¿„‘ D¢{!³³3˜¦"»(CÃuš­6®ãáÚ6QÔ?.jµ*i”!¥qÞQ‘#04$aŒmÛX(²^À{÷²uÝœuã„"cie…re)Ži! …ÌY&q}Ÿ(Šh‡R䜞™e´RaãöMÜõÝSÜs×÷yî-·P± Zív¡ŒXމÎRš­e’n€Qì—7„AH.r:aÐH<Û#‹5–ã"-‘iR ˆBº:á¦[oe~~–‡xs§NrÙe—cZ‹+ riP¦Eôz-Ξ=K± ©”ZÌÍ7™ï'�^|q‰Ï}îÝ\yånz½6?ô�ûö¥V™äþû÷òoßK³ ðó/y%‹³1Y–±ïÑïóäá>ýŸãòË×ðáüåJ™ç½àFÏgdtŒR¹ÂG?úQ~÷w?ÎÅ»§¸ôÒÍ,Í/pÙ–MT/ØÄcŸ9MÚ|ŠF»ÃÄv—S±þÒ«yrß!¶­ÝNeÜ¥›ü§ßÿ>û¹=¼õÍ·óŽw¼‹7½ñ×ùö·gxýk.ãƒï/Eߡњ‡ÜadtAèóàc¬_]'×mVš)ªâ¸3³N>u† 6o¤R_ÃËÖ_ÉþÇöó™Ï|Ÿ‚þð©ùÌ/œ&IÛ(•#…¢\¨søàAÞú¶7ÑéjþáSoáà§yï~Œm›&Y^iqÛí×$ Èr¤°fLcù$Åâ` gÀ€gA0M¯w )]gÛ}–‰‰0¢Šmåä¾& —ÉZGÞj or°“ü”‰¢ˆù…º Øyÿs®ó¾�jÓìûeY¿9å_†:Çõ¯¢rl 94ôôçü8CU„mC’MO³rü8Ýéi†‡Êy×ë€<[HZMÚ‡Ž‘>¼ŒwZA�í�ò<§0ºU[ÃC'[iDN34üLº¸±ËHµŸÁ*"0bøqƒFcaaº&żÈLs†8‹Ñ¹f”QœAîêOC\]\$»ï>œÍ›)^~9öÄÙÊ ùÄÉò2áô4rÃì‰ ÆÇÇŽâgRXM³Çqžv¬ú~$Ö„aÓ4ŸX…Ö 3,.ÍðÔ‰“ uFGGR% aÒ=/*¦„!8v…’¦©È²„( úX£” T*`ÆùÒªY& Cò<ò\²,8/Æ(iôc”IJ$ín¯ÿÚÒ,<ãÚët9ýÜS’i’$é ‚•Jϱ¨“õzˆT#• ‰d#cSÄaL¹Ri¢óŒ A*$ÂP†ÂÒdYв%¹P¤¹&N2âÊœ<MÉ…Æqmr% â„›n¸…×¼úŸùÃ?ø,Ÿùô»P R‘&žåb;>§ÏM³mã&$iªÉt†]p°)P*WX³z=?~k¯z9'O>AÅd©Á†õY½ºD¯×ÀReÛlÞ|!ÿð_çµÝ¬ß¬J¿\fíšIz½ KþùœÛ�ßï—Ou»]*•¶íQ¯Ê5YÖR’,͈“%C”²(+ÌÎ.R*›Ôj:½S¸N… èQ)ÖÎowõ´Àž¥ I¯G½0D»Û$Q)¹mâÕ‹˜E‹¹ ‡éXHm äqB”F„:Â4m´NÏ»®û#òF õóuÇK@:Kˆ£€$Œ1”-·\âÜÙ³ø©$ÅR‰H¤Ø¶ïšJÇ1Y*P®J‚TH!10È5dyJD8Ž‹%Ç"jµ±Ë>²æÐ’ Y£º ÒðÊ$‹"¤T8†Cž+â4'ÎÁ³m„ÊY :Øv]v1ûî}Gï¾›«n¾ßP´ ÊÃCÄY‚¡ ŠûånQÜC E”Dø…"E)Iµ†Làš.½^ È¥ -$™Œˆ“˜…v›5›·P.V8{ì(玞À0Mêãc˜—ùùilÏ£àûÜ"oø_çæ›_ÈJ3`qy™Ù¹s\sÍå\|ÉE„AϲxòÀ!þò/¿‰ç9TËã¼â¯âk_ûæçfyó›>À…nçÑÇæÐ“s�|ù+÷Qz7ßúÖIÞð†çbÙ.A¯t9üä~>ú_>οü‡lÜ´™Ñá¾ô…baáµ¢CØ™ÅeÏÄ6%V›§ÎR¬Ž13»Âæ­—òõÏ|ŽÏþãÞø–ð›o|<²‡¯~å wܱƒþÑ{(ø9§O?Áž=pýsïàà¡Óüýßÿ-ûö>ÌòœÉ¥—]†â¡Gá̹’4áØ‰SìØ²•ƒñïþ=JZÜtÓEÜ}÷cì¾dk×N‡Û$Ü"–å’kŸÿü{o'Nc>õÉ÷qÃM¿Àõ×\Ë;ç-¼ê—þW]sQ²ˆm¡s‹84ñœ ¿V Óé®Z< Ð:!IDÑ4Y¶B¡° ×z7™HYÅu Í!^:‰Ô¤VäÀ¹úÓÛ7û¥¡Q§ƒÙj¡j5¬¢0ŒŸ¸W•úûýÿÒÓ˜fÿã_½ÓÌ!MÉã˜$ ÉÃèéû† xVnYFº¼Lxnšdfš]T   q’.ôçhÉ”éq ;ÉÈÎ3\Z,³³¸›‚,¢e?5Í Ûƒ^†R‚DâããZ.U!ÌBZºÅL2ƒ2ÆŠ€÷ßoçÐí"––Òu‘«WIIê8kÖ†!Ý™ÌV Wõ;ˆLs“ôŒ «q÷݊ ÓéÐl¶X·v•J…••gNŸBëœ(êR,™š\‹Î$FÓ²¨ *Y¦Èsùô‹÷Ç´åÓša$IBÇ(¥0MóéÏ‹•~3}ÇOÿ{˲1 ­£¤ )%žç"„$˲ó#øý¢,´¦R©ô_7 °”!%¦ã‘ë Ë4Ù¸e a»‰îõ{= À®÷ó8õ©S&§xòþÙváNriE 2d Ž'�� �IDATNÉÉQ–‰D SM¢,)I2TC˜d™&M3tžF ¦i]â$¡V¢R.“$)¿ÿ{ïáÆë_Íž=sóÍ×”d†&G‚))ËL®^‡Sª"E†#S´¹p‰“˜+¯¼Š‡ÚK¥\cii‰¹Ùy<»ŒaŬZ½–ÓgŸb¢V@D›7n§àßO§b[yÞ%N:x~œ;7Í–Ò&²,@©¾>7?Ú5ÈÒ Ë²XYiâ81 %\ÈûŽUT+uÒTG®Gž\`dtœr¹Ìôñ%J«ëôz]dÞ¢X,Ðí¤xžƒY°P9dJÑ;àšx¾Oœ&ôº=ÃCà ag9H-*—­Ñ:ïÿ¿µFgÇ}¡_)d–K(%±C™Ä݈¸ÛŪÕi5lÚ²eH´ aÐcd¸N–$h­q] Ò$A³?úmYç£3R¢°ï¸}F–sbu[7AÝ'K*^7—†Bç µ Ϧé¦Êr_µ†ùÙi¢8d¢^# :ؾËÍ/ºƒ¾þu»ï^.½öj¼²Ïüò2¦ïõ á ™äZ“fq–ádY?ÞA*d¢!ÖŒ”‡‰Ó”(IHÈI’@GŒ¯[CF,.,0T,P¹p'Ýv‡cïgqam—ìf¤^e¡¹B)|§@¦3ªÛÏY¿y…ò Ÿ™Ù'YYh³qíüÖo½‘ÍnbÛ¶]Ôªkp­afçÎðù/ÍòØÁœ8u‚×½îÅüöÛ7ðùÿã‹h²vý&þà.à¯z-¥9ªõsó³üáþ„[nÛÍåWï Iböìÿ>WÞ´# Ë$¦n›ÔF×PÝp=—yüÔ§Ù¾MpñÖ]œ=yŠwÿÁ'¸îúÕ¼ó¯òÔÉcÄQ‡¿øó?#É:9v€Z­Äm/|>†ªò†—ÿ/<´ç8JC­ð=n{ñ/²°´Èïüîû£„œœO~êË\¶ëb´6øÜý¯ý•_ä¯>ü®»ö¥9ºŸñ1ŸVs™°×ñ<†G7ðĞǹ÷þCüé_¾•ëŸ{ Ýö¾_åÚ«žKµR¡VƒL·Iu•ri”F�q»A±æâ =¸j ð³·Dš4i5G)M±0†íT™¢˜QFŠ.p,’碼ìÒ¿êŒðïmÛ  õ›ˆçç1׬ÅE9ÎO¶Á¿Ç¶ø{ !ÀsQ##TV­ÂÇ÷£© xöˆnº×£³w/ºa—× 6Öèzš|3Ø«¡ûœ:xš'<ÌÁ¦Ï™‘–ªG1ËSj-²&)ŠQrŒ³˜J PBá+Ÿ-¥-œ Ï0Π2ÅPqW¹ƒmñß‹0$?w½°€&¬×Ñ–¦aàON"Ï#ZYAw»ÄqÌìì,¥Réi nÀOYX­ûo~¡Pbe¹ÁÂòR?Ñ+à8žçÓh4XYY"I¡×I`b|Q†ý–y! ,ÓòÒ0#És”Ù„X–…axžÇÒÒN­5¶mc(E¯ÝAüXŒ‚0Œ�I¹^'huH“iA–izaˆe›$YLš¦rLe=]¼•eš$é;q ©‚Zk,ÓdåÜ4:K)ù>I†$çf0•¢Ýê ÍOæú;nCœÏï´ì~Ú’,Õ½�¥Á6™J°LÓÉ‘¹À´B@'d™äùxƒwè… Åb‘_ú¥çó÷Ÿø"7Üx ½n—zmˆ°vcJ…*ÅŠO”Åh)°l îa˜‚, ¸æÚ‹ùÍßê±ÒlR«’åšJͧٚű œ>Ña¢Z#ˆºŒoÀ/˜œ>û«6Z(YD‡žkQ*Ž„=\§Ÿ} Š,… «9uêÛ·_€©|êõ„h†!†TøžKµR¥ôp=‹0º`š³3]6lØHžEd‰¦Z›di¡MiÕjzÍf“JÁE)‹8ì" A¤r”!‰Hè\ˢ컄í…b‘‚íÐ BºÝ.:‰(Ò0ìŸö¥"hµû¢«ma›žçÆiÇ)^ÃêR.W1•m[ qR.÷ÓBš”J%Z­6¶e’$ ¶]’4'G#dŽid:û±qE¤aÄÌ‘'Ždtë¢<' <¯ˆ©<LÛ"é…DQ„F LE/ ±}e”ËeÒÐd¥ÕÆ‘à:.†ipå­·ó£;¿ÃÞ½{Ø~ÑNª¾C/ŽÐBôÓAI…P&…¢AFè¤G¥\Á¶mò:í6Qš“+‰W,a¹‚$h²´¼‚‰Dèœ^i7À5Lv\|)GŽáÞÞÍÎKw3:4Äâò µJ•Å…iÆÆÆiGËq³‡4$ŸùÇä³€o}åc,Ì-qÉE›Hèpúô^\g˜w¿çõ¼ôçŸÃüÂ9^üâÛé…+a‡Ûïø®aR*Ž�9sgžBš‚8øÔ§?¢Å›ßü~–—æ(}”N€�Ó+)b;.³s3lݲ†8˜…I^þò×qàð=°Ÿ¯|îÎ̶ø“¿~+¶ãRñGxèÁϳs÷ªÃ.­f›‰ÕQBãWÆy×Û>ÄÞ½Çyýÿz;ö"{ï} -$ßúÖ·™ ð}“$N8pà•úk6róó.Cá8&%¯Ìÿé ìܶ™ èÒe±`yv8xEÍ…í"ŠºiqøÐ!´°LMÙ—(QÀUÝÏX}åBFÜ\ l4ñÇ®~fÑÄ-èÎAg³4†ëM!DqðÞôW‰UA¹d½Ez½³8…QƒðŸ:qLÞh"«Tþ·Ý¥ÿÞ{RXÅ"q¡@lþŸì½i”¥Ç]æù‹ˆw½ï]sϬ}WÉ¥}·lƒlÛ`Y족¡OÃÌÐÐp˜aàh0à†6c`7 ==ÐÀË–,Ù–l-%©¤*U•j˪Ê=ó®ïóáͪƒ·YÚ²œÏ9•ù¥2ï͈¸ï?â‰çÿ<Ne ®¬-la [ø@#VW±ëk(¯?3‡lM1,aÁ…´ÏŸ„Kϯ±<ߥ6{ÛŠÌuYí¯ñð¹O²¯±+¼–µþnZaDüWÝ[B2æQP°^¬3,†¬'ëŒùc„î¹ú’l‡C²Ó§ž?Ïpj j 7 Aœ("˜žÆ(E±¸ƒÁÕ‰³Ön ÞWRZA2ˆIG)QXçÆ›n%¥¬®®U>¦Â¡ÝgÛ¶]LMï$ÍJ—V釀b¬5C=œÂW ·A™–$£Ma Ò2FÛMI©s†ƒaàAåU*E–S9¡ï2ìmP¨Fà(Š$¡4%®ï‚äel•gJ8x®‹çyXkÈòÊn�)p<PŒ’­ yžaŒAHEXo"e@QJ„ð0ü°N:L¨ÃK—ɳŒ©±ñ*­>ˆèo ˆ‡)k=<åá éñi”tén J’f1qÒ ŠòŠ_-X+«û4%K×ðÕ�]æ|ó·~§/æüÚo€™¹mˆLã—.—Î.3húdù�)¡L4(t¾ÎظÏ5×ÁÓÇObP<wâƒÁ2õÖˆƒûwqîDF½¾›0rIíE&·{œ¿t‚N§ÃúJ‚. ŵ×ÞÈÂÒ<ÒÍY[[BR@©¸û¶7R Bj5+ Þl’æCÊ|€µš4ͰF²°¼€P%ý¤«›#ËçÎ-Ònøè¼ÇÌØ,ÉZNä!B•Ô› Öû1i ¹1¤è"ÅSc J“3L‡ x‚8ÉtAI‰r‚FDj DàD2¨´Æ šã„Í ÂÖ8…rÉ… P£\ZíF /ˆ³”Ì–P¦H×E…ÁæmÄ®Wg[J­ðƒ&V(’,Ãõ¾+)ó„ÞÆ"i²ô$ÒoÑT Ê¥5‚|Èío~b2¤ŒSšy�ÂaÑ-$ë$ù€^š`Ü*„JXo-"Ëð­ÅµQ ´v¦ÐÍ-™ëqë×}=Žpü©§ñ¬¢)r3Ùlc¬Àu¥ÁhF~à‘æ)ÒuÈ&·†Z#Âó}<W>‘9!¾bÜ€ùáuÇeP¯£;m®½óNn¼ñ&žùÔ£<óàƒ,;JS¤ŒÕL–àªz}Ž ØAwÃå?üáó\¾�<ô­ºOÚï㙜™ñ�‡5Zoþ¦›yÛÛî»ÎŸþñïÓ_¿L™t9þÔ“¬<÷«ÇO2Õczn'Ÿ|èa>üáOò-oÿ6f¦·!´Bi—ÝS»µéj”î0Þi0,Y-Bk„ÎGìkóí÷Þà ×ìâ£<Ä÷üwò¶·¼G6IFs|ücÏpãÍ^·1Mð}øã|àýÎï#üÞï¾—ßüw¿Ïþëæô…eNyŽöd‰<ð±ßåu¯ßÇú*<uô8E–0ô9~ì9ênÄá}!'Ÿ:Éc}“j×'×õ©}”ó‹ðÎïü^ú£ŒÓ§“f†VsˆR]ú«†ÏýÍÓäiÓ“8v‰Å Ÿå…Oÿ9'ŸøÈVÕÚÂ^ÎÐvp Õ»HGŒÉi„í�Þq Òkãu®£¨OÑsRR›`l¾56_&$IÂåK—¸tù2¥Ö _Îcœp¢ÙY?À^Z`åùãœ?wŽ~¿¿59[ØÂ^þ°»¼ óó´öí£uËu8;Ò^É“Ÿ*øðüö‡á‘‹mœk÷óºW·øî»¦xׯâÐĵ<±ø$ùÂ_ñ—Ç?Ês󗤵º¥V³_´Y r#vµv¹ç{çYK×¶æã%B9Ò?~œµ'è5›¨©)&&'™žš¢95…Çæ9v~Ñëx»víbjjjËcõ+§, Ö»œ9w–‰‰)†ñÙÙÒ¼ (rÖ×׈¢&õz?8$IÂp8$Ï|¢Z“F»ƒ)4¸ŽÂmµð£€õAŸ$Nh4¤iŠç¸8J¡µÆZ#%Ö””EFœ¥LSDµ äy^$Y‹1¦ Ÿr\¤””eY©&ˆÁp€µ–¨æU­q¿òØÔk¯µ¡ÑŒðÜ€á0F)ET¯á»>¢Ì)”ƒçùœ¾x‰m;vðð#Ÿáà5×€5ôû}¤çb´A i5[•½@£Q)`½�ß Å ­V ßõȲ”ZØÀURüÚêYšø Ï H“W Ù»Žïøï_Ň>ø oã9vNÌÕ\VWæ©ÕX…PVŠ*è¨,)u‰P%aè³g÷~–Wcn»÷Î>Š6%žív›~7A °Âà’V;¢ßïbŒ¦Ùìàº.£8&Šàf‡Þ×È·¤qA¯ÛÅZƒïyÔê¾gRE5²Ä!ÍF£RH”£¢RÿFáe1`jºƒ¥ÂZƒv«E¯·Aà{ø~�VâàRÊ*hÊñ|F£!Åf ¾’Q<BI­+;!ª�2‹Áb@J¤R@åZ‡Á ŽÉó kK<¯ZwÒ‚†Òh¬µHk—.“eQ£A©s´E‰@P«ÕȲŒ$é¡”ƒã8Œ† Žë …¤ºªÖç Òª59÷ô3dYŠã»(ß§ ñr6;­-Ò’&qe/�¨¦¤,5B(jµ:ž¢¨þn,I™1;³#aÀ=ʉ§ŸáÈÍ7£Â+ë=jvå1ç‡]‚r°Â©>;º ”p¤DÛ)%Y– “F¼ÐC ‰¢:£Q†‘à„!ƒxDn-³{÷àZÍÉçŽqùâ9vîØÁÌá#”ÚáÂj—ÎÄ©¶¬ 6кϷ¼ã�‡®?ÌĶ1ÒÑcõ£$§3;ÅÉS/’Œ†AD³Qç=ßùnÂZåé{ðºk™_\¦Nñþßøc>ý©§xüñã¼ýíwðæ7¼¡7¨{=dÚGeF¶ñZsË]‚æ—–àwÞÄnÎôŸÜY?ú_¥!|~òGÿ Y¹Là´ø‘ÿé‡xñÔ ~å}ß$¥ó³gù•_ú}n¸î¹öo¸÷õ|øßõð\8ùÂó|Çw|;{¶æÈ+öòÝïy<ô‹üÁ|ˆozë·’%C.Ù=ìܽ“3ňWÞýJr=b0ÜàÂ…‹¸a×~ÝÝŒýŸŒMtƒãã9A�ƒî2Ò{·ß¼‹=ÛÆhD>gOãòåyšuŸ]‡î¤97·Uµ¶°…—3¯JIbúhS¯B†Ó ¼­ù<fM"ˆ Ú‰•i¶ˆ±a¸lj¶Æç%†ïûŒáŽU‰'aÍf¥Xý2Ø1ˆMÿU!$Bka@m|œZmË ` [ØÂ×±š‡dÔ@MN ”‹ö0/.’ž!cÅ=wÀÝSОKèˆÛ1D{7íæ ^àsaq…—VÉ—Ž¡:){ìmZ8ø¾py ÆÔl°¬—7ã[óñRMóh„¹po}¹7¼öθn’Nb:ètÀó°IB¾¶Ær¯GÔh066¶E®~%ˆÕ8‰‰¢QTÇu}ž}ö®¿þFš­~0°Fc8Nñý€V«MY–ôºC’$%Ërz½�cãã¹f8LhÔ[Há¦9ÍF$ޱ޳Ùoð\)-R‚µ)%žç!…1k,RÊ«-þBT>ªÖZ\×½ê¡Tõ=IS׫~Ê©L| T70BXò<#p<’xDkj’º5ÄÝ.AÒjµXYZâÖÛnÇZCl ‡Ôëyi¨G¥Ö8JQäJ9ÌÍí (sLiBây`¡,,õF)ŠÂ „%Šê¬ —0ùßû}ßÅGþü“üÒ/þßüÆ{ ‚’Rw™ÚÖëPZ…#(i JJ”[µíï;pgž9ÏîÝ{yò±qým$­V‹ùË—HÓß P)å²°xmÀu]ì&aíy>½8F9Ѝ¾ç£fiiis kkkLN(‚ "ŽSu|ß'K«¶vçWéðEQ'kìÞ³“,OHÓ]¦t: VVׯzãVëAá¹>~àÐ¥€$‚«s bs ¥c0ƾïÐí%ä6§”%=„p0¥AëÊã,®ëá8ec°”ºD‹5¥Ž?Îp0 p=†eޱk ƒAB†+++‡ápHTk€!ÅÕu§º¤\^áèSG™œž£3>É ?Äs}<\<¾4xŽD ‹% k…¹ê3<ñ=0¬á:•¿°¥²0Ú§·Þ£YorÝ ·ðÀýÿްçÀ:Í6+Ý>MÇÇ‹¶¤‹Xм¤°¬Å÷}´Ö¸®Sy±æ%ž#ñ!E©‰j!®çPÖZFILàHƦgxå¶mûÌ#|ö32wy•ƒ×ÝL±Þ'SÒ9¸o;¿ýçU÷¼ ©çÏž¢æ{xNHlrt¦™›ÞÎüÅË`<7brbY^"€úÔ+¥àW~ù÷ùíߺŸV-âÆ÷pï_&ãòâ*íz"8õ1^˜_b×îVÂ0.0/éå”ñ‰]?zŽ_û•÷ó§õ ~âǾ›Év2éñäcOð¡ßý0?ô?¾•WÝu3E¼Žp\^¸ˆ°†3g–Y\\â†ën¥, ¿øÞC‘Âòž̹ý¶0f•7Üûî¼ã/qÅ€A÷4“ãmΛJ9Ìg>û9u·Æé3§hw"6VÙ»ç0¿ú¾ÿ™¹]û�M§Õ ÀÓO>ë_s7ÿög~S&<ù±¿D ËÞ=;˜˜;€Û#·lâ·°…—çcJòrH" tPkmC9[Þ¡ÿz ˜ÁQë+“#|¯[ÄêK×­B`U»M_)ðÜ*ýäËuˆ¢"t•BJE+Šïtp}kr¶°…-| ì /K’4Ås<ß#ð³>Í•3´^œ§!áöïk3:´ÎŠXÄ9ÙÃM:j“»i«&ŸX{†ùõ¸8zŽV¼ÆÞÁêÍÝLÉ<!¾€¯»ƒCD„B1C2²­ y ˆs”ØåejZ3uíµ8Û·#®ø¦*LNB» EA±¼ÌúÆÆÚªFo«_~bµÔ•h³Ù&ª×1V“›‚sçφ5ü0$Œ*‚)ÍJVWWiµZŒF5\ßG EgÌE)c,aä“kKžkÂ0"BÒ4E†¤HÈóŒ¼ÈÈ¥$Ny–Óhu�ÐZÔÂMOÈà:Ú˜ÍuT)+rІ!®ë Ë £5n­R7–…ÆU©ªú$ µÆqT¥‚´’zT#Y[CZƒãy¤iLo}…z»ÉäÁèá�©cc´T¨¢¬6tÆç‰�º4DQ³RoRIÖÖ–‰‚Ãမ™)Æ:5F£!žëQä)ž_ë„0ÜÆÿòc?Ê}ÿ/qöÅËyÍ~WæÙ³o7ÖQ ÂuÑiŠÑU8Q™¦ÔÛ‚kà£÷?H£„µ>V:´Úm¬¥ u’›fLOÏpüÌ1†Ã!«´Â€V{)%KKËäYN-¬mþy†¨Vcaq²,i6”R¹&Žs¢z ‰1%Ž#R „¤ Œòxî¹çX[Ó´Û âx�V“eRº\¾¼H'hmª 2á"DIšÄ8Ò!ŒªCÑp“e J)ÂÀ¡^ob-Äñˆ¢(†5´6X#®ìWHxßó*ų¨Ö”” ÏsÈŠX×ÅQ½n—F½B!•¤( ¬t Ãc4EQàû!a\%ÿ…Æl†}I—í3ÛXyìqV—VØ~Ãa:ãV¡¤W©]¥AéÊ\Jð]G)¬©xåTŸ¡, ƒBK‰°‚¼È ‚:¥2ìWjè»_õZþâ?ÿIn¸é•wSÆ„¢ øÂ ÐÆ¢„CQæ•G±ÕX Úh°%-eQP$)ž0è÷P®‡Õ–AF½Fa-½x„N|G2·{7ÖJ.]^FªãŒMÍ0Y å9Eo•»n»ž,ëÒ®³6X!jÏrô©gÙ¹s7kƒQ³Íž=˜¿pkGœ={™ñÉYVVV™ÿègøÿâ|ðÓüÆ{ßý÷ÞÃÌ\›î"q>1Ɔgq=æÁ‡žàÃð>ðó?ÌÌ·2ZÕÚø2ÀqšüÔÏþúàf5)ùú;öñ]ß÷ÖÖ_D‰ŒÕ¥EZ|ß÷¿›8é³pù,Ûv4yî¹c¸^Ä{¾çÛ¸ÿ¯å‰'>Ëßx ßòÍ÷ñ¿þÈûh6\²¤K™‡ ã%”Ô¼ÿ×QÜEØ”s“|â‡ÑùQÛg¥Ÿ1*‡Ø2£Ý©á*W”É·¼á^„0ØXafÛ6n½©Éêâ*ëKó$ñ«K ŒMÔÙýŠW€’Å>¹ -åÚ¶ðòÜGkF£‰ã‹øþ$Íæ+*õå©úEÉU%Z¶‰°%.#`Ô€­Ð†— qsi~žþü<¼€áÖÖ`jêË£ZUª:H¶ZXÙü<ñ±g©)‰7½eB¾…-láå^ù †ø^–Áp„ #¶ïPx·dœ¹p‚ËgY<7MR[ÂÔ¡òãd {Éé6^ð©¿ØàÐÚvZÛže]<ÆŸ>°ºz=÷îøFf:7á_øy*¬@ °lyy¾0eÉðìYúÏ<C‘$øSSˆéiD½þùõUJˆ"h6eI”$ìÛ½·ÕÂqœ­üJ«SãŒF#–V‘«Šé¹mŽãRš^¯‡ë:4êc´Û ’8¯®QåYZ*ƒë:ø~Èúú:yžSo4ðkÊµÐø¾GYꊸ* ŒÑ †EJK£áº!š&)Êu6ýI EY¢çER ¥Y–‘eŽ+6ŽëR9YV¢Kƒq¡,5V”(§² @ ja e¡(òJh,æ/°{÷..\8O«ÓI–’éÇ÷Hu†ëù$£¡š‚ZQd9iZ •‹@Uh¢°ïzlä=Ξ½@è…”º ËbOÒ˜Šk!ëëÜóuwsß}_Ï{é}üû[Þ‡Q«…ÀàG…¶äE‰#JJŒ… ÂÀ¥?QZ˜žÝÎÂÒ*ct:°FšåX h·;ÄqByå† K§£ð}ŸÑh´I> Š<G¡i6›E‰ãV-ðQÑlJ</$ðC†ƒœÑ¨K–§ø¾O­ œõZ›çŸûAèÓî4±Äaˆ1Çq †e‰ë¸¸ÒÁWÖÄ$I ÊÃñÊM2´Äš*¤ (4Æä›ajuF£iZàù¬ÄZKQ”e¥jRPä£AH(ËiËŠŒ¬±`ªWž4¢:IÊAƒ„H+GH©(Ë‚áP£¤Âó‚j]E¡«‘ÕŒ’Ž?q”VÔ`ïáCD“, ‡àúX-ÉuI)2R+]GZ¬.ȳÇõ®¾o)]¤ãa…D[AY</d­Û#T’f½‰Î:ã³|Ç»ÞÃG?òW û÷óê×~I¯G§Þ o%iQ©ª•ã"Ñ`4Y‘ã(E’Žp…À’¦1¾tðë>¡ç9Žt)µfÇô»=¢ÐÃW)±±\sË­LíÞ`aþ2Ï{]æì;r½ÞYÞÇŠ@Y²¸Ogÿ üñø3Žôcî¼ó.â8iÙð O?ýïúΧ?¤™FØ’»ïœæ/þä—Ù67†).ž8Í¡›ïäØÓ/ð‘Ãx?ñ$™.©5ÄpÛ³ŒVìšÇJÖû]þÝïü'2 wÞÓཿõ#ôÔ*éú³afðÌÓrûÝûÀ:8ŽÏ®]{@)Þüß};SÛw²pùq¾å­¯“²w·Ç5·!mÆÒåeƧ`}m™z8‰ã¸xJSƒ^©“Çð<É÷üËד– ËËå¥]c�� �IDATØ61A–ô©7|/ç³=Á[ßö6Ú®†LwÚœ=u‰ãO>F§Ý䆻nGhMÜíâÎØ,Ãl¬¥µU·¶°…—!±j)Š>E±NÎáû[ƒò9` ¿¶B¯‘d«H$¾·só²w / ŠÑí"66ÀêŠètª©/ËEÀ•×p]’ÂZ ž­œˆ·°…-láe^øp;Ô¶md½‚s¸“M¼zL}ïíÙ‹Œ.0®ÁùÆZºf²¹¹ØAÔš¸ÔÙ»m‚ÙmÓ ¶‡œÍcÖ?kÏ“†;ÉtO¼Úç… ¹yfÝ´àÛ‰j ëëët»]‚  Ùj9zi‰|u3>;v`ëõªÎþ—µ0а­iY"7633›‰/?Œº]ân—ZPk6¾_‘Ë_MÄj- ñ<4-X\^&ŽcÆ'¦P*#C²¼$8}æE:­i‚0¢^°ÆP”?q‡,ËÐZÓît°Ö’ŒÂ0b8ì3®Ñj71EN«Yǘm Ê,Ç¢ ƒYa+?T£7ýS«võr“L…JyXµ2»›Dl‰ë*Š"ÇQaÅ•ÊÑu=j~„’¬ˆA±†²(ˆ¢:&/AÊ"CH‹6µN‹Ñ‰˜»w“t7@J/`i}­RLnjõZT²®Kše4MÒ¼’—ÚàºŠÎø$É`€ëºœ={¬EËFw‘¯?@+L&™š™Àæ?ü£ßÊ·¼þA~û×?ˆë¹ÌnÛÏ(‹)UÈ(-Öâ*Ey&`lz†Vë<ËKpâøišZW„¸*K€áp�Và{¥+‰IÐUj¬5JJÇ!E#7Áe©Ñº¤,5Ãᥥ%&Ç÷P¯uè÷‡`jµ€ÉÉI</¤,-ÆhDÍá̹Ó4ušÍBJ[R–%AàÖ\å`]4)(mRTÞXŽ_“åyÕöoAkƒç)Ò4CkC­Q«ÕÈó0¸®ÄKYVêR×õPJ¡Ë­ ¾ãáø.Y–Phµà{¢Ô8ŽG£á6[(?@HƒÈK¬�‹" C¢ZDš¥•7¯44ÕûÓÚ`7-05›ÌŸ<…цúî]ØV=a¬ + V(DFYJ£ñ]å88ž‡EP”%Zƒ•‚Òâ4!M3†£­V‡( £€¤Ì(Ó’Bl^pÇ]wógÿÏäàCLïÛ ¹Á’$Ž)¬­¼o¥ƒã²$Åu$Úh”±8J!,Õ¼ çzlt«ð‡ iµ4› Š,!ÏŒëR›šb5Ï)=‡îºîGà‘‡¢·±Æ¾ƒûé´'é'C¤'¸éš#<õôqNž_Àz7Þr Ê«”ãxÄÔìc“Ó´'4÷¼æ&ÞùÎwpã‘£é®÷i4"Ñã?~àOxô‰£üùG¡³­ElëÄyLK‚°Ž¨Í dÄZwƒõþ*©\'¨A‘¿ýå¤9–ó»¿÷~®ß·“åÆ8§^œ¯ìF]ŽŸx;_9Á¹K HÏcµÛçû~àGxÓk®åMo}3ÇŸ9ÊÅùœ"í£”¦Uè÷.177Áò€zÝ#MúóšW`¬ÓছŽðº7ÜÍh´ÆäX“"á É“uÏáíoy=2_'. û³¿á®›÷±c÷Nî¾çÕÄy­1ÊAŸÂo qŸÂ”ø/“VGc*ËŽêBdSù­A¼d­+W¼º¯x8×jµ/ùkcÈó¼²»1æœÌéû~eƒó÷lʲ¤È ô¦Oô•J)ǹj‘³µÑýgG«bm±Y“+k–-ü!]hn§Œ F£S8¥ÅsçbK­ñ’´!Jt#Œ­<V[­Ï;xyÈ…j_« Љ Ì–ÇêWe×Z_µòºR…WkÕ•Ú%„ø’Ö.­5eY^Ýc„aø÷ÖØ—jã8•5Ý?tÏqåçÿöØ]Ÿ+ãu¥ƒs _›Ä*c¬ žxѧ^Ô1Ë ±Ê°µFR[…¼‹×äÝKSGXW7¢k´Ú’Û³mA­n°µì^q>y‘FšS¬.±aŸ' h™=8õqh6ÊE Ia ²4#Os2?£È‹-õê?eû"%I’pæÌΜ9C»ÝfÛöíÌ´Ûè•lQ ÷ïG>ŒÃ/¼¢Ýl2ÊsÒ¥%˜¥±Éí½œžÖZz—/³tò$3SS„»w#ÆÇá«ì\ìœ;w×óÙµwñ VVÖX^Y¦ÙhU!@ÃaPcÇŽ6¥vE¡-AÔ+ei’T!F­±ªee•²„Ö˜C†”eN’$xJ2ÅÄñ€z£:ÔJG!¥$ «`¢z½ŽP)$e¡¯)+-Ïó«þ ÖX´Ö› Ç’¦)JJ¤%ÕfA*ÑVS¤IJ$$6¶ÒSvÓ'6Ãæ«+¾ùV´µ¤yF‘ijam³5ܰFš¦!H†C\ÇÁ�aU-êªj‡1RvîÚÍôô º¬H?äÑð2Æiáx“”™A]¦§#~úgßÁOÿćùÿâœ` ë XX^"Í ÷l£¿QÍ‹ë…ÄÃ!³³st:Çž;Éë_{;—æ_àÒåE¦Çk ‡C¥(´a8¢!Ër„PXiÅ1Ýn×óÐF“¥Wù· )HÓk ®ë²°°À+ï¸ ¬b0291ÉéÓg*+Ç#Ï \?`þâeüqÂÚY–Ñløl¬nà´JÒ4çâÅEò<Ãõ$ZÄÅ)RÆÆC†II \¬)( ƒ”J9ŒFCÚíqƒý~Ÿ(ŠBáº>R ò<¿jí%DERXžçS%RB”e†Ta1X[_²pymÛæÀIã ‚¼(ñ®¬·"ÇZA-Œ*ÿR]²Ž£ñüÊ+¶¿¾A9¿Ju©NbœÞÚµf¯ôɬ¥„dý’ æRæ)¥ÇsPÊPèÊ›×X‹)%ŽãÒl…øa¶Ú”ic(Jƒr]W‘ë’Îö9î}Ó›xäáOrk³ëºëÉ»#<×%Ë3 )Qž$ŽF£!&©ÕŠ4!Â0¤V0¦d8฾ïU·¡®GX X¸ÜÇJu]J× À*ÅZ<â•_ÿö]ØËÙÓ§ùÔÃsðšÃì¾îE–¡šÖxø±g¹÷oÀÁ‰çqÓ7RlzîþÕ_ý¤™Äñêh«9öâ>÷©§i…3\<~†£š'?Ê5¯hð;¿úý\Ï×S¦Yy¸AÎäDă¿ögœ[1»÷:¼p’ý·¾’ïÿWßÃ'¼ŸÝí)¶·ÆxÓ]wà!üÀâÚª}0j„Ü~ç«1Z“ z¬­­rþBw¾ó_R«;üÜÏÿ8žë« ”9Ìn›¦(2âx„ú½.ëƒÑ$éWßs÷½éÔ—ÁÀ’ô»èbDY¦D¡KÍóp-4:uæÏçòécøAV£Í»Þõ´”ÖP"YYXCx>µö,Ý^™f´5ìËdßÇ1óóó?~œ“'Oâ8sss|Ã7|“““_òÃ1† N:ʼn'ˆã˜·¼å-ÌÍÍ}I_kmmgŸ}–ã'޳²¼²i["þÎæ@Jùy‡Ê›o¾™Ûn»v»ûEȉ‹/òô3O³¸°H¿ß'Žc�&&&8|ø0×\s ããã/» ÕËy¾A’\ õú><o+ âuÀT.JÖð ‰#3$#@îÖø¼È´a%Ëè')¦ Åû hEm5ÿÖó1Q„Ýj}üª"U»Ý.«««,//³¸¸ÈÒÒ”eI†4 Z­‡âСCÔëõ/)©º¼¼Ì /¼ÀéÓ§QJñÖ·¾•N§ó’ׯ$I8wîÏ?ÿ<§OŸFÁ5×\ÃwÜÁììì?èwôû}Ž=Êüü<+++ ”R´Z-<ÈáÇ™œœÜ lûZ† ÔKJ™bi½â š5ÖG>»óøÒòÓÅo·¨7êLŒu‰²%”vÉAy–aáÀ „¦;¿ÄèÅ™hSN äz+ÏÂpë*TÝ¥Þ˜Æ÷šh[rªw’SýS˜¦¡l—U&ˆÝ"Wÿ±Äjžç\¼x‘ÅÅExþøq<­Ù¿¼Ì>ß§ùŠWÝtò‹«¦^GolPž;ûöNL¼¬æâJm²´.TŠÜÙYØ´ ýª"VǦ¦HÒ$CHIT¯|¤rÑÚRäšQ¼Áž=‡ð½º4$qLPk¢óŒ•¥U¤ªH,”eI»Ý¦(«60Ô¢×u)Ò„<¯Bˆ@lÞ¸ÉMrôJ¸Tu#§ϳH×ÃØŠÐº:À›ª#)+ò,¹Õ ô«÷!¥Z¦”vó6´òÇta-®ï1J´.1Fcý€F³NP e+¾\½ŒãôjA¬)ɲôêaXn»Rïø¤IÌp8DI‰»é«YW òÒASà¸%Ö¹ïMßÈñgyø“gùŸ;ÄÅáuZzå½i+Eê0‘ÉäØÍf›óçç £×1&LOÏ`2MšVáOÚXò²jéo4Õ¸úÙhˆT’¥• ¤tH’ß÷”rȳŒz½ ¨²Ö’$ QÔ Ï ŽS±'Oàà¡C´Ût y!(²;wl#Ë,y^’ç–N{‚±Î8­VíÛ'¨Õjdy‚ã*jADžSà¹ÖTê«F£ç¹› ö•jYJ V …BÉ*˜‰«ªÏóH’„$Iè÷„a £ív‹ÒæH×Ã•Š²Ô›rÉh0DIòŒ4ÉȤÅñ«‚ÑÕCÉuçŠj¢¨ZF[²<§Eƒ_8ìß·Ï•Œ”Ä j V4Nš’R.\šgÇŽiÊu‘¤-ʹê-œfBBßAXƒ]¦”ÒE)A^hn#cعw7+«Ë|æsŸÁ‹Bf÷f”$(Ïi’`µ©,´!MsFý°‰EPMžÄ›Jå’¢0Dõze…à(‚¨ÎÆÆ:Yã·šHå¢Âˆ"/È€×f|r–ãÏ?Ï'ú ¯2‡oºÜ¿ð ¿Îž=¯à¶ÛnÇw—.œe÷Ž)„¶˜d€Pݵ!If˜œ˜C­—üÑo|õ•>—VáÐø×?ôVÞõo£¶m–“Ožäñs/²¾!8;\£P%§>ò í¬Ç¶¬Áåð ·¸Ïð³?ù¿ñ¯ÞþævÌ!Ó îyåòlÄÞ_¼SÏ]äOþè³ìݵÐu9sþ{MRóÉ àÂù‹üôϼ“ý‡ö³rñ8ž¯¸õÖ6Ó““ôz¸^DX«¡u†çÔQnIR8.h£é¯¯2Ùj‚NxÚÒlÖXº¼Â';J²6ÏžS9rorÖ è.¯“ 0È4º”>¬r&C“:•Búe€ÅÅE~øaî¿ÿ~ž|òI<ÏãÆoä†n`bâKß}…X}òÉ'¹ÿþûY[[ãöÛogffæKJ¬öû}Ž;ƃ=ȹsçȳü 샪ˠ+Äh½^çÝï~7×^{-­V몚çoÓ4e}}G}”‡>ù ô{}úý>yžÓét¸å–[èv»¼úÕ¯~IÆp /%±ºÎpxߟ Šöm%ÛÿSΘ"Äñ¦1"¡(–Q®DÊÎÖÀ¼(°t¦/cµáy|Åný¬Eä92Ž›êÀ-|塵f~~ž§žzŠ“'Orþüyèv»Xk©ÕjÔj•håÖ[o¥×ëqèÐ!ÆÇÇñ}ÿ¿¹.k]ð>úè£|üãÇ÷}^óš×Ðé¼´Ï„¢(XZZâãÿ8<ð�O=õBî»ï>öìÙóE‰Uc Y–±ººÊ‰'xðÁj±¼¼Ìúú:eYEGŽᵯ}-wÜq{÷îÝZl_s°@‰Öëå%Ô¤A÷=Š‹àæ>¶œàl1ÎC™ƒ<õ4Ûìà൙ݹB§îâI)ñ’„ÈÑf‘þ¥ôæ ¢±)œ©½È¼F–çô6zåÊÑhÌàù $ ƒeF£k­5æó[ŠÕr «8®Z­ÆÒÒó/2\[ÃãЭ·Ò¼æ‚={_¨Æ ª×ñêuŠóç1ý>äyu†øç*®0ò£5FJ„çaµ&ÝØ@]ºDë‚™„ë~ù3ÿ1Äj=jà:>YQÄ¥¶´Z-†Ãkann;ÝÞ€$IIc‰R.A-Bº.£Á�m4a­ç©Š¼”)@l¶J[k´Î‹ef%eaQR`  Rrµ=ÄQ2PX©(Š»™¥Ø !0W[L4ùf+¾Üüê¹ …‹TaDÕþ¼éÏ P%º(‚�-àÀ¡ƒ —éLNb�­À |\ÏÝ Ò œJô·[0­µ$il†•‚ÍÔûA’`±8®ƒ«dåªKŠÌe®EH‹Õ9iY cÉüà÷ò·ÿûOý<?ü“?Àú`•z#`Ø]Ú”ŒÇ¤ xá½QB\¼x‰Ó/žãø §ø®wó§—‘ŽÅq666ðÃÑ(ÅQ.Žã«‚4MðÝ&ÃÁû¯ÙµPäe‘ùuÎ_¸ÀöíÛéöºyJ¯×cfzŽ<Ϙ™žeum‰~ƒí;¶Óëõ1Z¡Ë¹sç ´ZÓ´šŒéVêÞ$cyiıgϱººJš¯"x5Ÿ,Al©E5Š¢ØTÕJŠB uy•°—B"•ÚT,ÛŠ4G ¤¡V ñ<— ðI’ÇqƒB(––V™˜n“æ ZH\!PRQ&«+«ž›$jY–]Ò¥Ô¼�ß÷1²¬Z_Žã1*¯P+h6ŒÍÌðè#Oà ÉØÄ8Ý,cŦ”ýÓÓĹe¬Ùbfj–^1Bz™±¬†˜Òà¸Þ¦—«Åq*‹Š Ž©‡i<ÄsµF­"Jó™å»,¬,#MÉ-¯½‡‰™ þúoîçõ¯óؾwЬu{HêQT]PäB åúZúñS„ãPê²òIÒ¤À ¡ÑlÓ*Ÿ\†½aJÆ›u´€ÁF«Íõ¯ü:fvæ±Çž¢9¶ÎÂòq>óð¿õ;ßÅÜìVÎ=Ï[^ÿ:²Ñ:A=¬”Ã#¬§qu\†¸ù¿ó ?ƒ?‚ì?|ç.^æ½ïû÷<yìGŸ;ÇÅuðð'BòÒ²SXΑ–ÿÓQ?ó'ÌLù¼ö–W²»ÙàæÃ»Ø±oŠKô¹çÞoæñO}ŽS0;Þ`pé"Ûæ¦.œg¸rHÀkî9Ìýð÷²ºxcKŽ\-ïÿÍ_£y€‡ñªÃA½5Ažv¡4Ô;Ù0Óž†"Ii¹µFHœŽxâÓŸæÔ‹ç™šÚÎ]wÜÇØô8…±Ø²¤4)ÖóA¹lôûÔZãøQ“¼,é´šxÆ ¬ÂùgÞÞªµ&ÍRNŸ>ÍÃ?ÌSO=E–U~Ýý~ÿjÛÜKõÚW:ÇyIT+a²cÇn¹å<ˆ.õ罎µÕsùÒ¥K|úÓŸfqq‘z½N†Ôëõ¿ó¾´®|ÎÏž=Ë_ÿõ_3qž$NØ·wõzýê!ìòåË<ýÌÓ¬®®²ÿþ¿Wùº…¯¶µÆÚróRØ£Š¦ØÂ?«C}YvŽt0O- Ã-bõ¥@ `Îó¨·ÛxÛ¶#Z_!ço!€ê÷p—–³³ÐlnMÐWʲäÂ… |îsŸãüùóh­ãÀÔëuŠ¢`}}³gÏòÀpâÄ î»ï>n»í6vîÜIø…ÔYÿÄš/7íÎ^j¥ê•z}êÔ)>ö±ñ /lZ‡é«Y_ŒTM’„“'OòÈ#ðÌ3Ϧ)ããã8p€¢(X\\äâÅ‹=z”ÑhÄøøø±ú5IªæXÛ%M/’ÄKøû©Õ®ƒÝGdÃ!ûÖûIK¤€Ý×ïâÐ]‡Ø½sSµ)Zª…oýM…)h=¤ß‰ýʦ¤9sí½w"²¬øcÖ±v•²è3,a`}‚b‡Í!¦Û3L´&¶ˆÕR WŸ«««›]±î¾}ܳ‡Îµ×âoÛVí¿ÀóKAEØf“až÷ûÕã?GµjEB·‹YZ" HÃpr?¨//éSdÇŽ!Ž©B»\÷«îouªª/ Â]jzƒJ:¬¯wÊ£Ñh"…Kœhâ$GÈ*„ªÔ†V»Sµc%Æ”eA–eäeTbsœ,JI<ÇÁ‘Φï&IcÊ2D A­éã8ÎU5ª5UÈp½¿#g¾¢jÕFcòrÓ—L\•TWJÛWùc)ʂҦ8ŽÕè¢"9ƒzDomÀD§Ígå†o¤Ð%¥]•¦Wùßa+Ú¶(Kò¼ÀXSÝ(…ÞLˆÖ`mE¢*G`LÕöiMåï©Ü/W ó èR«×Pà¶;Œú¼ë;ïáW~í£ÌíÝÅ[¿íÍH•åEÕNž¦Ô£1 +¨×#æf;œŸŸÇó|â$çâåËd¹!K ´…ÉÙY’Äc0019Y‘Á¦¦fpdùùy¾ñ¾7#€<Ï‘Tíèg^|‘WÜr-Û·oç/þüA?`Û®Ý\>s)Ο;O§Ó&ŠBâaëDN‹/Óôßëx ú'85V«A–Ãêê A­DAš É‹C‰tš”eåïêlŽ]žWã*…ÚTW¡Š ðк¸j ‘çY–onÈÚíúÐïráÂ%~æç~ŠÁRmÁXoÝ•0†Ééˆ"B›1HJ²4Ç !%ư©ŽVA¸éyTÙP£É‹œÂž{îYƃ€V»Cæ+³´¸@¶š2³s/Çž?Á‘û˜Û¾ƒQ6Â1mÀs\’µõuò¬ Ýjã{.ÉpH2̨!ްø¾ ²¼D:¿²´¶„6%ÍZÀòòÙI^yÏÝœzîiœ°ÿú#´&Æéw7B2Lc”tHÂ0ªÂÌ´%/ Œ±ø¢ò}ÕÆ¤)ÿ?{ïf×Yßû~ÞÕ×îezS—¬bË’%Ù’ÜBÂ!'¦Þ@BB8)Ü$$7P''$ÜKIJ.¶  ã‚dI–%«Kcf¤é}×Õ×{ÿX3ƒ…M1˜k9g~Ï3Ï£g4³gïµ×~Ë÷ýþ>ß0 ›®çQ™«`¥ÓÔ¦+Nro×dËÔÑM“ù0F‘Ý[w±;ÝÍŸÿéùêýÇ0Üó¯ŸcûúuÍ5ô(·– :ÏdÿÕJ•¹Y‡JÝÅDP¦Vw»8†+Ó|ùëxìh…ªëRî*qÃÝÌ-?¾m»ÖbÚÉj­ìûä§8ýÐ×¹ùæk865KçæëØwà<Ç;ÂçNÑcYlÞºŠ{åþícÿÈñ ^õª•œ=r€R&Kw_/™–6L·Âuë³¼÷]oajè$A¤M²…<¦%p\‡F³­™¨ZŒë†LºsTª“ØYÕN&j•,YͤQæìÉ~ÎöŸ!×ÒÊOÞöròÝxõs®GK4-ÁZÌ;ó¤²iÒ©µj…ZµB[['¡Ðu)”y«c† àÌiΟ?OÓiÒÚÚ ’)TA*•Z=Ç!ŸÏ?ï/›Í²iS2n>Kmq¬:r䃃ƒŒ±víZzzzÈårÏpé„aÈÈÈä‹_ü"¥R‰;w²ýºítuv066Æþýû¹ÿûyä‘GxÕ«^Egg'årùÿžÜrý0 É51õ4ºn/_“x5k"Õ2ž?L£9¦wb/_Α°ªÐ¦ë¤³‚ÖD:õ‚¸c„¡#R6¢Ñ@¹xV­JÚ—ë Ø#Ë¥µz¡P \.³råJÖ¯_O©T¢V«100€‚C‡qìØ1,Ë"ŸÏS.—haUA6›eÕªU¸®‹mÛÏ‹XûÝÊó<.^¼ÈñãÇ"Êå$ ú{ÍÅQ166Æ¡C‡øêW¿Êèè(7ß|3×]wW]u†a000ÀÁƒÉZààÁƒìܹ“n¸T*µœ�þ¿‘¨ÇU|Ï›#ŒU2…õXíK?Õâ8\ç{ÅAÇÚº6u¡•4²f–½‡ ßÂnÄá<#§¬VŒ®.r]בêÝÈå(˜¦V¹ÀÅê8CM—¢ÒÂÆüfJ¹2¦e.¿=?ÄX999¹´gÐ4R©DߊäZZP¾Ç8§§Ó¤s9¼ €ÙYx1vn„!ÒqFG‰‰‡†hT«4m›¸­ ŶQ0‡† ŠPS©„í.ćÐÒé\Ò~à2!prkžît×uq]0(•ºñ}F£I…hšŠABX(Ê\[U âÄå—J¥’DöP"£Ã0ˆbp.Q$Qt(ŠQ”x ú4Û+(R¢é AVarú¸NÇ1šž8HhÖêH)r”.ž¾^¡.@Ä‰Ô„Õ ÌL'<¼BK õ8B(’DTÓT E¨ø~ BqŒ,`4TUAQÄBàRŒDLƒ)#\Ç“±ÊhjSÌ©‰£UÂPA êÎ<·¾ôzrmeÞõGŸfÍæMìº~ He2ºA­æ¡Û Å\–Ö<Oñ1 ‹ 1M‹ñ¹1ì”C©ÜŠjš˜ÒäÌÙ3lßµ… h6›´uuq`ÿLÏÌÐÞÞŽ¦)ضBʶpj!SSS¬Zµ‹jµÆ½_¾—íÛ·ãT(ŠÆüüQ°eËšÍ&ºž" #Í“¬^½U]דö~ÑlzAÌød2htv•€†¡H®­®›hZ¼�e_ð+IûÂ&ÔT…"„@LÇDQ!ºnÐÒÒÂØø(Ÿüä—ù­ßþ%TUCUUL]?ÂT4MËÛñ�� �IDATu| Ý‚(Â0,²š 6T¤/0U¿ÅHt'yB%N£(Zâ  #&ÆÇ)‹ ¦m1íy ÏN c®ž>Z{ºiÌ×8~ì8×uìE¨ZÒb¯[èºFÇ(BCU&°¡´–‹‰ˆxˆØG‹5‘”h–Îlužj½N:c3ßlÐZ.1::ÌÚ ëh1ó<¶ÿš*X¹íjtUà†º¦á{Õ†‡¥̹U²…4( úïXÕ5<7`pp)cJ­-¸žƒçèFˆî ÊFÍ2ˆU‰N¡ê&&q¨ó×û|ôïÿ™Éqƒ´á4`úR­áSìl£:vŽ#_ÿ†á8MuMO³nÃfz×là®/|…1G00­óС~®ÎOÜv¯{ë¹ùæ]´”ràEÌNÍRêµyäâ «³’Û^3ö¾¯rÝ+_Âkßô›Ä~Ì7þ<ŸýÌ]|æÓ8=všŽl¶¼Í/¿þu9Eÿ‰'xø¾/rÕæÍ¼ñg_ÉÿüÛÉö¥?J±ÔGÓ!©4ê”LF£I®Õ<ææ&é?{޳l¿a+[v\Kùt·w¢Ô]ž:qŠ'>Šmìݵ›t¹„ÕÖFFÔ¥J”*RÈæ¸xéZà“*¶,Œb ê5×C:)däXOFÈ(õ¢N=v‡Çö?ÆÙ³géìꤥµ…(Š˜››û#‹_ßiÁ±øÙU…öövn¹åvîÜIE´µµ=c³óôÇ\üýgûOܧW*•bÅŠÏêLB,¹NÂ0DJIKK ×_=«V­zÖW½^çèÑ£<üðÃxžÇµ×^Ëë_ÿzº»»“;)ééí!I344ÄÈð‡¦µµ•íÛ·?¯ÌºåúTäÃÜyLÑDÏv#¬e9¸ê‡Ø¡ `év¹~TÛ{I¼Ð9$_ÀMÈåPº»‘ƒƒø/W*ËoÎR†a°mÛ6º»»Éårضiš˜fb¢‰¢ˆÍ›7³yóflÛæž{îáøñã¬_¿žÍ›7_†³yúülóý¢íis¾¦iôõõQ*•¸é¦›BP.——þÿ¹ÎõßO°Öüü<äÈ‘#lݺ•z½Îüü<ÃÃÃßów]×åÀ|ýë_gvv–k®¹†Ûo¿ÞÞ^,ËBQÚÚÚ’½ÍØ<ò§OŸæÐ¡Cìܹ“l6»<æý—¯)+xÞ%ææÎcY½”JÐõË]ú¶i²}Û6®Ú°!ÞL؈9V?ÆLc†t.MÆÎ,æ‘ß$šêG<r¹«±RíÃ办”md³-HçqFê_'oÖ±3ÛãÙrýÀÕj×u¹úê«Éf³K!íBÊï~h¹ÀX•ù|"¨Îͽø„U)¡^'ºpʧ?sìq³‰âE¶j³ ¾OjÇ ¯}-ú¶mˆ+ô0Is]‡z½eÛ¤-EӨכTçæ)”ʘº@!ŽcÍšª©T Ó4€t:MèDQ’2oq&)èq¡ ^°ø ¹Ðî¯ Rv",)ª ŠdÅÉM$AÅè*¨jbWOÒ$#¡ 0P"%(1¡F!Šj ©É¢Z‰*üü0@Õ%BHEº.ºj#âzµF*•Ý@:.•ˆXÄxÍ&a£ªºf ©*ÄES^hà$‚ª¢ h‰«(*³³³h††mY(†¢4SàÕ*˜9 _Xø¾ Š<TW¢Ëœ<ôM¬\™ßüÍ_ãðýüþï½ü—?¦¯³¦[!ŒÙ–2žçÓp§È¥AW@EGWr(±ÆÅ‹èèÈÒÛÕ‹7ï*‚'Žåe¯¼‰0VPUX îºû6m³• thÖ˜V–S§Î°r]ë×odrr × yù+nc¾:E„ËÈ¥a„¢Ñ·¢—‰ÉQÒ©QhÅ9j5‡|©Œ2¨7+Â0Æ2#Š­*…ÌVªôÄ­ ÏÕ”¨z]Ïàû1šãyM„H° ¾A# }|?¹…0"y ~ Œab/B1uf+M:Ú‹üó'>C¡ÐÃÿñêÛ¨ÏM¡J‰¢¨ÄDqL¤HÊ–IZúÄqƒ&!ª®!ü O„šÀ°l”@Ò˜©¶lbbMÃõ"2)›ÆØ0ÏÅèkC¬jA±TºreÂHR©N㻘vL£9Çð…A¬Œ‰eè˜ù¯ahé”MI½QG¦Ó” y"' #Â(—Qœªes3³¨šJ³îÐÝÙÎììš™axrŽÖRÛ¯¿žÃ`fjŒën¼K#—ȵ¶âÛ ºfaYææëT܈¶Ž5hšŠï‡Äj•lÙ`®yŽÑ‘Zºº0A…ôv÷ÑœÑÈgJˆ”‡0LÜÐâØ‰Aö=v/Ÿü·ÿ`z|ž_ù…—òæ_ûûÊý4†Fè,f8úÕÏrÿééËQ.çÈæË¬ßrf¡ ³ÐÉ๠üߟ¼S†8?PáÉãcü÷Wîå-¿ó«lÚ¼+15q‘ ç ]Iè+26ÍÓ'ð¦'@s‰çGi Leº6ƒômvïÝÈ­·¾ŸßýÞÿ—æß>óWu [¶°s×6pæÄcdLŸ çû8u޶¶ ;v];<B[¹ˆS©`ë!^,HÊÌÖ*¸ÍyŠÅvn¼i=»ö\O&osáØ¢¦Çœnsq`Ð÷èÛz5›¯Þˆ’Ï8QÕ%FC±tbj&¥b;–aS¯4É ÌLMÐÙÒI,}âÈÃ2%™¼•p‰µ/Cn1HâðáÃx®Ç®ëw¡**‡¦ò\6Äq ®Ëøè(g™˜ ^«Ñl6‰¢ˆL&C&“¡X,ÒÙÙIgg'Åb×Mýýý4 n»í6:::.;8¡¿¿ŸóçÏsÕUW±qãF†††¸pá“““H)—7ººº¸öÚk//ŸŽ›ùN›§™™©V«äóy6mÚDggçe›¢Å¶ÀóçÏóä“Orá¶lÙÂÖ­[éîî&›Í.ýœ¢( ElÛÆ÷}eË–-Ë+Ö+¼bÒ'“ƒ6µUÉûnf¹ž‹Ð&–UD‘í¡µ1H•A]Þø=¯û Ï#š˜ OÀó/T) ²PŠEÔr ±ìšºbJUUZZZÈår¤ÓéËÐ4‹"æâ÷{{{Éf³ÌÎÎ299¹„ÞŠã×u™››chhˆññqfff¨V«H)±,‹T*E.—£««‹žžÚÚÚ°,k)<«¿¿ŸTUå¶Ûn£XLL ###Kì×ööv¶nÝÊèè(O=õSSS�¤ÓéÄ9Ö×ÇÚµk)—Ÿ=Tpñpøøñãœ>}×uyùË_¾„Bø^‚g½^çâÅ‹<ñÄŒŒŒÐÛÛËîÝ»éíí½ìoJ))•Jd2¢(bjjŠÑÑQ‚ X¾áþ7¨(òqÝq<oËêÁ²ºÑõ<B¨ß6,*d³Ù¥µ©?öi‰[˜ô&¹ä^"ŒCzR=è"„hæÎ è-hÙn”Lˆo_Ç*„R0ìŒ1#J¥JЉï ¨Ã\æúÿ0ce¡P@Ó4Êå2–e}ÿ‡$ Â*ÅbÒïºP­‚ã¼xp�Râž?Osß>œñq™ nOv[¥tµZ…zÒi¬Í›Ñ·mCio¿"ùª�šeš¤Ri¦¦¦¨Tê‹E:ÚÚq\MQÐ ß÷±mÓÔ¨VkøKJX(ª tÃH¤A0å)°T ÍÔÄø¿Ðª/pîR)„q¸ÞT–Ü( ÔfÃÔÜ>n‚0š0A1J"" £L¨BaÁ1”½à6}¤†¦¡h «4¥ UâÕšÈ:{ûˆ¥ Äľ‡"TLMÇ |ˆAÕÀ24EÇ#@   X&íÔ‰Œ«€n€�;S ŠTÃ$V¾ïâut#�‘"ŒtbT#ðëdU…¶¶È&þÐïñÖ·ý¿ð3Ä=ÿñ×hšFªxQÏ÷)uÊE ¯c—ƹx~]Mqê䓬Y×…ïA¡½“C<ˆªÂ†«ÖG`˜iÎâ±CçyßßÊÌÌH;•£éÆ|ãá‡Édrä;×ðŸ_¼k®ÞLÊ2QµˆÎÞvþéÿÄ­·ÞLÅIJA*§2ï3;5K, jΙ¢†Ð"¤'Ȉ–<­íV ¦gæ‰b“HJ Mø*q¬àù^â�%F×µ%¢ª‚¢*$š{„PCÂ@Rkx(z Ò£Ò¬…`[E åÎðàƒ_æýx7Íú<¾×€(&ð}Ô8qp†q@Y7ÐÝ:‘æãÇ–f Üé{ÄZLS‘R#oXdR)ÌXOX˜)›—´åüàéz £;‹ÛžFxë;ú˜¯Wp[²LÏÍ’±l^ú²cz®ÉÄø0éŒAÖÒQT©ˆœF@&“§PÌ"•ÕÔ 13)b)1tÇs@K±ˆP  ^sðü˜|>GÊÎàúPìíeKà19ô§û&WmÚ@$"¦ggÐÓeÎ_Æ `Û¶¹p~Š/}é‹<ùäQª*×\³™×_ÇÕ[o¢ÔÒÂØð0w}æ.^ÿúŸçÈ‘a6lÞD¤ð¥ûâþûOsæØ$N½Á½ã§ù¥Ÿ½™uíEaåË÷0ºÿ(Oì˜t6&6›¤T“/¿  i´!ÉóÄéa>úOŸ'ÊrßCý‹6¼ãwxÝϽ‚Xx œÂJiøjÄJL»hv‰ÙÑ*†ª¡w”i(*bRàŽœ¥°Ñ£éä‘uK“Xݵ™r§AßZXÓù±—½™_ÓÏó÷¾‹Õ×ZÌãÆ—uSÄ©6xüksúÈ)nþ©ÛX½{'ZÊd6Š™«TÑ4›T6GÁ|u’==è¦NºRglj‚¦e±eÛFŒ|žXÕ¨©õé*ºf’ÑtâH"Ô„9=<<E!ÓJhÆÄ¡ ò p%QÐÄê=¢˜Oº^3 ê5è~"µÂ0d``€}ûö100Àš5kØ}Ãn¤”œ8qâ9¥WFA@slŒ“‡óåo~“ÓçÏS­T¨T*„aH¹\¦T.ÑÕÙŶmÛØ¾=9Q¯V«:tˆ/ùËLMM±mÛ¶Ë\«Íf“sçÎqï½÷òµ¯}—½ìe„aÈñÇ9üøaΟ?O”J%J¥7n¤T*±bÅ R©Ô÷µŠ¢ˆÁ¡AΜ9C³Ù¤¯¯Õ«WÓÒÒr™c5Žc¦§§9}ú4gΜ¡V­±gÏ6mÚ„eY—mPŸî¤ ù¹¹9¯v¹ž§15ªhdÐE‚Z®FXU°ì2¦ +3DÎ3‹Pu–¹µÏã€ãŽ'ªúB3M¥TDëîFY8pZ®+ãc1 J|6 ¦id2r¹©TŠjµŠã8Ks×¢xxöìYöïßO?—.]bff)%¹\n 3°mÛ6®¿þzr¹Ü’°:>>Σ>Ê<€aìÞ½›B¡€ïû rß}÷ñðónÝ:â8æüùóìß¿Ÿ� …­­­lÛ¶m!T7»Ð1wùá—çyœ;wŽ066F±Xd÷îÝX–ÅÑ£G¿çúfvv–Ó§OsòäIÇaóæÍìÙ³‡t:ýŒk¶øµ(:/vërýW(‰”1AP¥Ùœ%Ž#ŠÅ«žUTýöûeI¼ST:Ó„JÈpm˜zÐ £¥É—ȽD\»…<dÚÁüÖ˜˘ d@#jÐßèÇ>+Û6Q üú�¾Ð1´<(Ú‹70éVËå2Åbq¡[W<—6ùÊç“Öø8Np�õzòoõ é88gÏRÙ¿Ÿ8&ܸÝ:Ò6Pèè@k4Á¸\F¤RIX¦våÞkZFŠJGG'žàzÞ‚SPCJ‰'b¥®A€id2é… %‡ ÐuÓ4±,‹J¥’ÀwUÅ@'UQ C± ¨.¶]$îÁ$ðI'|tU_h©_Lc×¾¥Hb¢($– ª>ªP5%Á+ÈMWPT3/]/iû6M*ªP1tƒ¦Û ^¯“/dÈe³èŠÊÔÀ ¶i211ÁÕÛ·ºIðQJSœº˶Ð5+á}.°\“P£˜0öÑT ) é8(BE7,?@ÕTâ \U¢(Æ |MàÔ]"ÝBÑTâ8Hõ:ãã#t­ZÉüÈ…î>þê¯ßÏíoü ^÷Úßã_ïü ,ËÂ$`R«näéêµèêY…¢™LŒOóäñ“üô+nÃÐSÌMð©O~–7¼á6 =ÃèØÖ¬çñanÚ»‰íÛv#ÌÍÕÈeÊ|å+_ãÁçSŸú'Îy‚o>úºãœz…TÊäñCG0Í ëÖ^…BL>_Âu}L³@³Y¡§§—ƒG.aY-躎¦ê¨‘Iefš¹ùyÚ;``à·ÞrS‚} BU5¢8DÓ´…vÃ0ð}?ð™¯Ì/9´¹M±ŒÉåm4#…ãƒ:åÖÞû'CW÷Õ¬^½‚FsUQ𼄪©É½ª‹4ª¢ø>–ŒŠÀó<RBG E„ˆ‘qLG(Øé¾PP +†ÌMO€€–Ž6Ò™ Má¡ …t*…ªK¬´kdd ÝÊ-ÚøA=±úk&ïã‡ÉçÁ4MšM‡j}Ó2qDk[ ^ÓAQRvšfÃA×uõ&¶m¡ë:ªb`[6ÕF¡¨šÉЫ֑N|㯡¤2lض\!‘iÁ‰êtu®äÎOÜË{ÿüŸ›šBt!øò½Éê÷Ó×ÓIE´··3páû8'ÏÅ"ꤲ‚–bž7ÝþJþæýâŽü!Oì;@ÏOÞÄSOžæÀ)ZW]{5›ö^ƒ’Õùü¿|œÿüôÝÜpómäÛ;8}þ<ÿöÿ~ÝNqç]÷±aý >ö±?eÓæ \:‡®ƒa¨„® C©ÓžoÁQ]D¬¢i&ýƒÑœ€šÓÖÙG±­‹ŠP­Õ±¬ ]]=|å+_áïîx€¿|ÿùåÛ“?ûÓò¿>òÏxÞzÿÛ¹2žâSظ}v–}+h(i9ÉéQ¶ï݃ÝZ¦+ŸG+æiÔkX!ô¦2L|Œþ3'™ôjìØ{¥®.R]ÌÏÎÐ #ÒÙ<u'¤éyŠ-šF#¨3>:JàÇØ¶M[kß °l›æHá C¬_¿ŠB9KH7‹ðl„ï¿(EÕjµÊáǹï¾ûèîîf×®ôõö2:>öœÛ׿k5îùÂxdß>.Œ cg²lܸ‘t:a˜¦Éôô4õzZ­†ïû X˜d#R­V©T*ÏpyH)ñ} "ÿàƒR­VY³f ×_=»ví"fffèïïç±ÇÃ0 n½õVvîØy™àùÝjhpˆ2™ ›6o¢»»›L&ó Çêèè(§N¢ÑhÐÕÕÅÎ;Y¿~ý3œ?‹-–š–`RÚÚÚ(‹ËáU/"qU!F. χœƒ C¬iÈq‚xž<ËôÁÁ~(ŠA€Œ"ˆ_XgŒÐ4„i"ÔeŒÆ•&®~×±/Šh6›T*ªÕêÒ¾m±ëÃqŽ=Êý÷ßÏ©S§°m›5kÖ°uëÖd ¯ë8޳t¨º„ùô½Ââÿ/š+Çazzš‰‰ �V®\Éž={ؽ{7AP«Õ8}ú4Ly 8ž§ ža2??Ͼ}ûxôÑGY±b·Þz+­­­ßw‹ôèè(O<ñSSSKîÙgë8yú\¯ª ’,ŸÏ×.™åzñW,cõó8Ç2×£ë¹ï*ª~{)(äÉ›Ég`ÊæñÙƒdês俆±Õ4©tšqùA™z\¨\`0dŠ) f^«£“L8‹ ª˜Õˆ.@®t‹åCÌç^Š¢üp™ºÙ,¤RP©|KX½ÂEUqñ"ô÷ý·ÿFzï^Ê+W’imE·mD±˜¼– rBB$‰ëª†iYhºž´Ì« Rd¼È£‰Ñu×õ–8¨RÆd2iTU%ŒÂDàQU„HDQßu¨×$1RJLó[®!äe‚{à(z"f‚LÚý5Û¶‰ãˆ(öÄÌß÷ðã¹$åQI¦Š"Q5Ó6ñ<wibeL™L5ÒÑ5(ˆôvõ1=;‹a¸A„ëú ˆng€ ™tÒš…Qè.0¼âH‚"1 $˜†…e艤š¾K5ðÐ4MQÐ ‰DU5Ý@(ªe¡y>˜‰°,u•|wó•Yr™ö'ïâmoû�oùµ÷òáýë7lfn®†®g8?Pa|Ê娉3tõõò…{ï¥ZµØºua$øæ¾4ê1¯yÍÏ uƒîî|è¯>Âøx¼ïOð5Á5(6—F&ùøÇïäM¿z;“Ós|à}äoÿÂ($_(qúô1¾v߃Üþ‹o&—K311ˆ•V©Uä²%f¦gÙ²e GNÂ45ææfH&¨ªªS. C…é©il;…ãT ã]€B:m!ch6¢¨Ž¦j¤ì4a£©úS0 #‚0"_ÈàMÂ0Â4Ó %-å.žxü0÷Ü}€;ÿõH’ûT]x,_QŠš,LD H‚ÎÂ8&”’È‹°„ž°=¤D! ËòCÏ÷qℨšŠ"ª¦ÐÑÙÔTÂ0¢êÖP ¡ ì´N€U4“l&ÃܼKà‡¤SBxO&A‚•”!– 3·Ùô±–>{Ó´Ð48†F„4†abYiæ=‡ é&-+W³e×|èêjžõWïÀL•Q¤Â¯ÿêŸr×]ðã/ÛÎßöµ:ã!Nž8ÅìŒËÉ ÙzU û=ŒÌ¦£K'm 6·wðŠŸºžõkWóº×ý:Ÿûø§øØÿÊÏýÌV˜nç© Un}éJ¶¼ú§˜›'+üä/¾™ÇÏñ¥oÀ—ÇyüØ9Ú»×ðÑÿu7?ûs7óûðFJ-YŽ M‡¥*3ur™³3ó�»"•Éâx!AJ£³w5mŒ®kwbMLM̓۸Ç÷˜­Ò·ªƒ}üó\³±Ì[ßø‹„4øÀ{\6æƒú,Óó£üÃGÿœÙÊ¢P7Mìl–¯y%Š £O]àðc‡¹tñ"WmZÇÕÛ®¡³%Ïè¥ANLMàÌWh[ÙÉÖM/%ÉQ\fǧÀ¶É¤-@!–1Žã% ÿ0¤Z«‚¶R Q06>L*•Æñj˜¶Ž™Ò‰¸^„®¨–…)LóÅåB”RÒh48yò$O=õFƒ›6²yóVL3O£~ñ9w«4‡Gæø¹s”Êe¶oÛÆu×]·ÔBpéÒ¥dlïí¥T*aÆÒ¡Íb»þwrѨêÂX¿¼±fÍ6lØ@.—ðÈ_ÇxðÁimieë5[¿§°êº.ÃÃà Òh4زe ×\s ù|þ"hEŒŽŽrâÄ &&&Èçó>|˜±±±gl¢‚ `xx˜¡¡!TU]j½\®ºÒ+@ÁÖ:*&Š\~¿žaT¤4ñDŒ‡K–xù²<Ÿ!!÷H#l­\FdR/ ê×êDÓ3ÄŽ³ü½ˆªZ­rôèQΟ?ëºlÛ¶ 6,)\×åìÙ³<þøã¤R)Ö¯_ÏŽ;èèèHr2H¸¦ããã´¶¶ÒÚÚúŒ¹ôésþ·Ïõ‹bÆâák__»ví"›Í.ñÐ]×åÉ'ŸäàÁƒ˜¦¹tˆ»X333?~œ'NÐl6Y³f ;w&­ßo'ÎÄÄÇgbbÓ49yò$¶m_Öu"Dbü˜œœä©§ž"Š¢%CÓò\ÿ_ZVEÈ&ø3(^ ËêÆ¶»~€™Q £“Wò`‚& ÆÜAjõK¸s§1Õ ÅdÞC׈“�Ï÷¨Ô+øŠfjtZt[ÝÈah*±Õ ôçp›ÃÙv–#_ e2™Ä¹†àûW> @J♼ýûñçæ+WbmÞLzÝ:2å2梪ªW¾óöéÂêb’`âÞ ‰¢Ý´AQ‘’Äy*%A! ‰¢ ð—&«Å‰©^¯/¥:+ŠBDq„P@× Â0\jíN„Pea&ˆBˆ’o²±5- ¤¶ðÁv�‰e›H©â4=4="EIî)ˆ¨BÂHâV=„ÐPâˆ( È3¤,›0òAˆ*Á4MÕ­--ˆref–fu+nÅqšU©TÈdrÉ ‡Š¢€®k¨†N­^! “„wc!ŒHS“`¬”BUª*ˆeˆš”ÄšE¤ê„QŒ%Vp*³ÔëU ] E‰"‡k·nâï?òNn¿ý=¼þgßÅýñ¯ðÓ¯ýÆÆ'ùêýûX¹ºã§NpüøaÁGîøfg«Œ r×gïæóW¤‹­8x¿ùÛ¿côb…÷ýÙ»éêîãâØ–¢¥¥þç;yéOþ}+VñÉO}†×üôkÙ½ç&ææ§™™™æ‘G¿Ém/5ŠÐQ0p|1…L«Ä±`hè"[·uR­VHgRØ)U*4} ¦…®Kffæ‘24MǪ¢Ðh4HÙ Ã\j2M‹TaÛ©ËÀòÂu™«L‘Τ‰#A½æ“Í´2?Wãwçý¼êÕ×°ç–›™} שa™ePd$ ãdLè4i¸qœÜßA¡TŒš¦b™A$‘‘D¨ Aá Ië)ˆ!¨5QtBk+ŠªbÚ)DäS,pôˆºSC“ ú¢D¸®C&÷¯ï{ R! pšIRyµ^¥Z­Rn)23?OƲ°;Z CŠaØ(ŠÀ¶ b™¸ÀÇG5¬\ŽH(I˼f05[5NçM�� �IDATeõº-¸‘ÁÁ#'8Ñ?É×9È×¾| ¢˜/~ñöþÄf&ÇFh)¶ðÆ7ÝHÊH162ÊøÄZÊd|fšéù9jÍ;¶] B1ÛŠFo>r?㧿ɧ>~2¶h/·²iÓZ,£Äï¾ósÜò3»©:óZË\º@©ØÆÊM×QèÞÊÛßñZ;»¸ãïîæ×ßòã¼âÕ/AÓ=ÆÆž"WLS™›e|<$—ÊR«×qê.¦žÆiFx®‹e§8qò ©b‰­7l娾CüÇÇ?ÍžWÞÀ¦=ä ­tµ¶ñ…{¾À“'OñÉ|/V!ÃųÇÈ•ò¼ûÝoÁL¹üå_~ô»þŒwüáÛ Ÿ@O1UŸ¥5›%“³YãnVlØÀÀ7öQ¿4Ì×ÿöcØi“lgžµ×of͵×`:qš6Ó•*Åö6|×!Š¡Ùh&VšN*“&ˆ#® CeÚtôö¸ êNÇqÈl:d~ךEű“à½0 )¾ˆæú0 ™œœäÑGevn–µëÖ²uë5tw¯$ êuùœçþ(Š˜›EaõêÕìØ±ƒíÛ·/97„¬Zµ Çq°m{©}ïûÝäH)QU•U«VqÓM7-p˜¦‰¢$…§NâØñcœ;wŽK—.áNâññqŽ9Âàà ¦i²víZ6n܈mÛÏy£(bbb‚3gÎ055Åìì,ŸøÄ'ž5Õ8Š"êõ:cc‰û×0ŒäÐq¹%ëJ^Q"e!+dEEdÑIJ¯òù»ºbñ*/_Œç[Xu¨Õaˆ’Í¢¯èC-•^˜¶¼…Å4?O0<L\­-¿G/’ò<‘‘xàúûûÉd2ìÙ³‡;vP,—ö¥“““LLLpë­·ríµ×²sçNJ¥Ò’Pºè<5 Û¶ŸuŽü^s}OO{÷îeÇŽK]!RJ …ƒƒƒ 200@¡PÀu¿eÜB044Ä£>ÊÄÄ+W®dãÆ¬Zµê9Í¿³³³œ?ž©©)¢(â®»îâ¸Ìa»8×7›M.]º”„éúò\ÿ_¾\¤œÇ’1†È ‰N¸40((l#E9k16ý$Ñój/1¨õ§PÂq¤ŒR`Ç6í²«¬«°²³@J¤ÐÑÀ*‚ˆqª ¼`–bì¡ÈèYø¬Ëõ#/UM« c'q|Å «qàŽ2ÿðÃø¹ê-·Ý´‰t©„þtwê‹l|Ó ¦i¡&a1žï''b¶‚ªhxƒ.•¥S4Ã0‰ã×u±m˲Ãp©MÁw‘TÓ!2iµt‰ã!$±TH«BÏsPUÛJI •PÄ‚`»°¨C¢jËRñ<(QUçG„a€”biè8.–•¢Ïã{QÓhÖÉAk¹…±á1Ú;:¾G…dò9 à £¥É+"~š›I%Ž%~ࢢi µF“L:á‚ú¾‡eÚ 'ŠFâ]ø}À÷§†–M#ŒBb]¥V«Ñt¤s"ßAQu*µTUpÕ†•Üÿµò†_x'o}ëGøûø ¹\|>dlü"l°ç¦¼ý³ofzt„¿ó“\èïç%?ñΜ>ÇþÇò¥îgrÒá·ëWÙ¹c'ÓÓÓ¨ŠÉ¥‹£üãÇîä±ýûسg/;Ä[ßò?Ȳœë?Ëìì$O>ù$…\–z­ÁÄ¥Sìܹƒ®®^bQÇó]Ò¶AJÍ&ccc¤Ói,Ë$h:Ø–EÅLOÍË댌Œ2?WÁ÷B2vŠ0h&¾a HÞïÅSX!Íf˲h6›Ôjµ„Û”6©»ƶ3¨¾‚ed¸óßï"æxÏÿõ÷ÌMM¶m¢h:*º¡b«ÄnXAS5ìLMÕp][Uðœ RES ¢0$Š<bcŽSGS@3R“S?|„ö|5ŸÃ"b ‘G’€C7Ü5'@±Ó–N*N¡k&Z?PUR1¢i˜šIKK+Ùl]³]§é…M3™Ÿ«’Ëå¨×DQH¹\¢¥¬Ðl6ñ¼�Í61 ·î¢’©™yVô­â?ïýû—{زioûÍŸæ­¿ú[¨)‡ C“M¥©Öšuj�–i³ySÐÇ«t­XÍ\µ‚šlê» %Òè?}†WÿøKøØGÿûGøå_ÚÎn#ÙÕ]¼íöw`µÀ¶w!3 cyÌb §+¬[³‚ßøßà¿¿âå¼óÿ7ìjcÏî ôŸ>Äš·Ð?x¥§‡ŒaAR©Ìã{Pk:”Šyj~HÓñ‘Õš¢²rÝZxø1>÷?Ñ®ç¸þ•*NÕÅ.å° ›¿úÐÇØsãNö¾äÆÏ¥ÆôÔ$A<ÇïÿÁo“Í”xûü ¯zå0/yÙ œéŸÆ428n@60E„©lܳƒúôZæúiÖj´mì£ÔÕŽÙZ¤îø(zF¼ ¤såŠd¡JÒÙ<m­ "¤Q­ÓÞÖAµVã|ÿS„‘ª$“ÏP,g©Õê–NĔЭÌÎÎS j„ÄHñâ Â0d||œãÇóÐÃQ.•Ù½g76\E¡£R Q”ä$ýûIÜýÖú!½ÏÏÏõzÏó–hªª’Ï矱!y.ª¢(tww³uëVúúú.s¨”ËezzzhooçÄñÌÍÍQ«Õ–B&¾ÓëåСC S(X¿~=ë×­F» ”’f³Éìì,ó•yU!ŸÏ#„X:œ\Z˜È˜f£ÉÔÔõz\.GKK˹®T}*Æ÷f¼Ql³ˆj´²¼ó¼émtT$ÚBÔ²ð𼊙IØÂ0P Û~A®°’J¡–ˈáaâj¹ z-ו]¾ïsáÂöíÛÇÃ?LìÞ½›½{÷²nÝ:R©ÔÒ\ºè6u‡F£ã$X¬oÄúÁog…ööv®¾újV­ZuYe©TZ :yò$ãããT*ZZZB033ÃÑ£G9pà�†apà 7°aÆSÎå¢è³­ ’\’€J¥B­VömÊå2¦i>ƒ‘.„ ^¯399ÉìììÒ<ßÒÒ²,®þ® ¨â»£hB`¦ºAÿá8Ò¡d-‡Xº¸Þ VçO—6!Í ¨ ÈägÓ¤iµZ)§ÊXö·ue© ØE”¸„ê:w¤VnY\}¡„Õ|</ùº‚…ÕØ÷qÇÆ¨Ÿ9CóÜ9ô[n!µkéîn óŽÖt]Ç÷}êÍi¡DAaY)ü0 hÒ´$Ù^UuÂÐ_h‘—¨ª‚×uÐ4UUÐu-8ã]O´B°$¦ªªŠ®«H$B$›äØKœ§I‹|"¢Ÿ8Ãä{qãzŠ’´?{~Ï÷0Mß÷p]ÓL˜;šmâ8º,¹<×#•µQt…PÓ!–Ô«U´8qA–{{iLO£¦RàyHÉÒ‰¨”1©ŒE£ÞÀ0Œ¤]_ @à8 tËÄ\["ö<ÏI¬AD:¦éÔp=—Œ©£®©H±Ð¦¢«ˆ8¢Y¯ƒ”¦I‰ÈfJ¢¸‚",ò…ÿþïÍ{Þó!þåÎÇY»¡É­/ÙÉÐ¥ÞþŽ·³võ ÜÙyêÕ ýgÏòS/{)Gž<ÊÃû!Ô5ºV¬âu¯ÝÁ¡ƒó…»ï¥·¸4ÉäÔ,»v^Í»ßý?6ï!wßs§NÀõ\Ž>y‘Žø±[náÐc‡¨Í»Ü}ÏÝܰ{+7Þ¼ Ó0)wõbèm­-ÌÎB&cÒßšÐñذñÒV†ŽÎN,3Åìl…ùù ù|‚yX¯A% ã…{F! cææ¦b!®ë¡ëét†F³F&“¦Vk`èY@gzzžÏ}îó¼íÿ|+†©Qi:‹Eüf!¡ - dk6ÐMÇó1í4®U5BÁq}RiM7ƒE‚a˜H!‰âˆÀuhŽOPžbëö5h¶I#Š©7›dTfÃE¦Žç „!H§Qà B,Ë¢Q¯aZ&†G¬F4 ¦e“+ä±Äiz(ŠJ*•¢Ù\8ˆb,Ë&Ž“¤ä #I*Ïf2Ì×넱‚jT«iUÃm88ŽÃÏÿük¸ñ¦¸M½7ÜH®ÓâÜáŠAW±À6r(º†@cj¢†T“ÃsdŠ!#c£lîì£~ñ¥öV.>Í}ƒÿ·Ç¸é¦vþðO~aä¸x~‚â ¿ñ3´­ì`pð ¶•av¾Bk{/ïù“¿à–[nåÓŸü*›6¸ãÃïdtü<¦bÌβmÍZÃ@JÕ°¨;™LžtNA¢h*Ýë×Rá“ÿp7_¹û,QªÉû>ô&6´­ãä™Çélí"°ó|î®Osò¤ÏŸþõÏ2<|ž\Î öb2y‹Je]±ø¿òfŽî?ÇG?üd³F©Í`ņvœé12†Aux¡§.»>)ËdïÛ~¡Ä\¼ÀçïþkVô²ýæ—RUDH½QG×4jssÌÏÎ`X&);繋ÂÀGÐÛÝÊ•=4Ü*ÇÏ'_K>#º¡¡*)œºGàxØš‘Ü·ºö¢*• GåßøÃ‡Ù°~»oØMgG'†¹œ$“‘J@„aô]…ÉŲ,‹k·]K³Ù\ ”ªV«¬]»–îînŠÅ"¶mc©TjÉ}ò\˶í%ì¢;eq#V(èhïH˜×¾O¥RÁó¼¥öÄg«E‘y~~žÕ«W³bÅ ÚÚÚžñÜSkµ¶eÓÓÛà 7ÜÀµ[¯%›Í.!Q„„QÈÅ‹yäáG8yòä’[·««ëûæ»]±âãÃñ[‹C ŠŠ²Øô"ÞHJÓtfh4FQ‹»°¬vÄrrýóV%Mti¡FÄ(ËÌáçETµ¬dóf ãÄó±Ü”L½·m|, ½]—®øŠã˜K—.ñÐCqß}÷199Éž={xÍk^ÃæÍ›Éd2K­í¦i²jÕ*Ö®]»ä m4lذ®®.J¥ÙlÃ0°,ëšó„˜¦I.—{Æü-¥Ä²,²Ùì’ØY©T–£öïßÏã?ÎÌÌ {÷îåÆo¤»»{éq× ÉÚ=zÑ,a¶×j54McýúõÜrË-lذÖÖÖË~GÓ4Μ9þ}û8pà�Ùl–îînV­Zõ¢Ÿë—ë;—çU¨ÖF°ÍNôlŠú|`W$‡0ÁhÎÒék;wauÜ�𕬵ÇXTTñì¸ E(¤Sí¤T3cÄ‘DÑS - «/ˆ°šÉ|‹±z «a½NýøqêO>‰šJ‘éî&×Óƒj¿øQÚÓ7²ó•yb© i:R,:‰Ãf@:¥%<VE!ŠBÂPbzÊä8X–E$NפE_YrF‹g!1Ø3Q”<–¦kdòi™ˆOq/´h,b üwj€e醊aèhšŠ¦%ÏE×u CGJeYˆÿ½7³ëªî|¿ûÌçÜùÖ­AR©¤’T¥Á*I–%Ù266Æ„˜@BHB: !é$ýòò2±»_†ðÉKg„Î�4!t @˜B€yd[–¬Ñ²Æ’T%Õxç{Æ}ÎûãÜ*²Ih[ö«¥OýSºu«î>çìµöoýÖï'R³¨$I™¬š®#’„кAä€`br‚5ëGQ-ƒD¡k‹I1Õx»#–:¦i,Š¢ !P„F$CLÓBˆôó&±B†)0«1 *Ó4Pµ‘(øâiv”Bj„%㘨ÕÂ×4DNEQ$ªˆ¢ˆXÆTz—ó3?ý6¦gÎÑ·lG>Ê÷¼î5<¾ÿnîúVå… ÇŸ8L>kðÚ›wóc?öÃØ•2Qщ"¦gç8Ús„»›w33=ŒêŒŽô3°¬‡o|ã«\¾<Eµ6O¹\@U$ž[çÿ÷ËÜzëæfçÐ ]ä9zä(ÿùOòàÃwò¶ü! …!ªµ:¦i¡jð—ù5>ú'¿aŒPâX20ÐÏȺî¿ÿ1<ÏcÕªåÈ …ç¥ÀxÆ)( ªÇÉâØí‚ùM¡Pè®—F>_ Þªâ¹’J¥‚exË[~˜Ñõ›xÛÛßÂø©ã¨"Âuüv@aY?z‹˜äÊ%._¨ÓjuhÔá�ª¦#ƒ„œã� ×W Š]SQ’„z³I®TÀq2˜¨y•lžBoŠ®¢š™¼F&Ј|—(”(]æ¶¥éäs9Ú^€®©Ž°"Èdm‚Ž×Á4M M%Œ$š¦a q,ŸeàÕjµÿ ðÓ4ÐU0Û±Éô  E "B„*»f-—&.p÷7?Ãuc[è-—ñŒ ŽGU ê³utM§ÜÓGàB©·B_Ï2.]ždëºÍôeó$“x`/Sç/ÒjÇ2¿óÁŸ¡UÉõ °÷kpf núÞ9v„¾ž"BhŒŽ\×¾ðu\×GSmΜ>Ç_ýÕÿÍ5G(—bZsxˆ¾Þnúž×Rw<?¢\ê£Ù ˆ ­^Å©ñ üÉÞÇ?~ò’º}oÿ¹Ÿeûí7S›SÐO>Ž-4.ÍLñÞÿòy~ämƒÜ|ë똛8‰a…„(éõ%¢zy’šôùÀ{~‹ï{ãOó·ÿã¯ùÄç>‰c¸HKåÉ{÷rêô8†“eÕ5ÛDÍ÷ЄƲJ×ÛyæŸæáoÜOùÚ-,_5„ø4Ý6½z¦¦È’Žë§Ì}'­F0ñÑL•uÃk°²6ª®¡$TAVs0Í,—Æ/ -7lD¶Û¯�Ð(!Š"&''Ù·o`tý(›7o^ü’$!ŽCBZ4ã)êî,"I§¢(Zd¢<ÈjÛ6»ví"Š"öïßÏÜÜ÷ÝwûöíÃ4MlÛ¦¿¿ŸááavïÞ½8–÷0:K¥RʤÆÏ.°h¡ ÆX/ÞFQ„ë¹LMM155…¦kôô/²jŸûwA@­V£Ñh`š&›7oæ ·½5kÖ<ËayAsMFé䈪ª”Ëe^ñ†‰”DµþÅ ÄAš§Ibôl³TB)R€ç¬-Ç)#¡¥nºKñâ«BG§Œ&#Dý2dcp*Këüb¬B<}þ~¹�MUAzê,ã«^Rn $ò9}ú4÷Ýwwß}7.\`ëÖ­Üxãlݺ•žžžgå-Û¶Ù²eË¢‰U³Ùdß¾}<þøã˜¦‰ã8ôõõ±aölÙÂèèèw”÷”¶mS*•®ÐI_¶[Z8ûµÛmæççùæ7¿Éøø8###lß¾}QûuÁ‡dákÁHÓ÷ýÅša¡6¨V«´Z-„¬X±‚±±1ÆÆÆèëë{ëuÁ¨ë¡‡BA¹\¦¯¯ïŠ5» Âi³^z0¾ÝòÅ1± I„�ÅxQÖ+I‚°N³qŽ ‰ÑrCØv–‘ûß`šª(JžHñiƧÑcÉ’êïË�¬f³é×Ô´ÛWµyUÒhŸ821A~çNœ ÐìW‡>¯VoµqlÓ4ˆbŸR.ŠJ¦&QºicBÕQ5PdZS%�]Óž0 qˆafIIùªF$%QtYž 1Ê¢`¸ C¤ 1M3u„4TÔ.k#–1AÐ"—Ë‘$ š¦¢+ YU5Ü…Ä(„ ŽÓd•$ º¦!åBK¥B�]ÕˆÂÞJº®§úš€†ˆ8!ð½Å¾¢¤@©®ë$¤:‡Q¡ªZZ[&1B<ó€'’ŒítGÙ[ÄqŒiD]c°8 Sƒ¤8AÊ´@Ô4=ã]3º‰’Ä„¡ hxž‡ïy äyÿû›L.Çøùq6láÜ…3ä²Y:ó-,"J¯Ù‰¦Dض`îÒŒ|––ëãX:·ß¶‡¶mabâ"Ž&ŽcMC ×lXCÛk3~î}½en»ý©ô–˜¼xMÕ1mƒ0tÙ²u׿æxâ‰û9zä8ùóÐh„T*=ÌÏïýÀnJ¥~«Íô̦QÀu|?Ä÷.^¼ÄÈÈ0a˜÷Š�hZ Ô‡¡D×uòù"N§ë‚©wÀóÉ8Ebú¿÷¡?æÈ‘:øGï"‰;a“žR™Ð‰¥N³íÇ År‰/~î ô”Šl¹fUÕðƒ¬“ÏÃ÷ClÕD¤ØŠ¢¢ %†$‘ôö÷1¸´Z-,Lš33†ä y@àEšf´B/Àpll[Gº: 4Ë6Qµ”ÍÝÛS¢Ñj„ Šš®…¡jÄ D2BÉbCN›8NX¶l­VzoµÛíôžÔTJº Q”‚R¢=¥"s9rEU© ÇËyø¯sÃÍßÊÑMx¡×éDZí&FFÃÉé$a5ôèËh”“>ÀW>÷9ìŒàíÿîçøý?ù Þô·0´y#''°¤ä¿ÿÉ'Øýš–-/1X,sùÂdº¨_úÒ×øÕ_ýmþݾ›~û÷rÝu;8sú$™¬^ÃÊžÕÜÏ|ù¾Æö=·bj&µ¹Ùr…N³ÉÏþü/²ÿà˜ö�o¾};Û{U ùtá3þ4ù[ÈBF<pÿ~ÂN•ÿúÞÑn7@—HEbÚlSÇÂvL!SÁ0‹¼ï?ÿ8ÿ×/ý1ßý ƒ%É“÷Òñ[ŒnÙÄðØ|UcÞu‘Iª¬YyÖì¸ba€‡rìðct:U¶ìØÛ®ÒªÎ¤V*ºŽ­«dí h4jÄ^D±PLMïT¤Âå‰iFÖÒ˜«’ÏæS9• FÉÒ1í"Þ‰ƒ\<žu?xÇU¬AÀôô4GŽáĉlÚ´ Ã0¸xñ"33) Ý<N{Š©ÚEæê3D-…'N`Û6ù|žb±ø,öÊBX–ÅØæ±ÅCý‰'O0==͹sç¨V«ø¾O¡P`tttQw­T*}ÇÀêS广ÿ™ZÏÿÚµ8þ<.\ ÙhRé©°fxÍrÏV›Í&ív]×Z9Ä–-[èíí½‚QÓn·QU•¹¹¹ôµCCT*•g°¯œDR’DÒu gf.^$£´h CÈfP=-IPÊå”5÷ W—ΔÿF늆ªõ€"‰ÛçAUv‰.—`)¾Û|ù¨¦@Ñ•—g˜"I÷ ñôöA”€ºôl]uáy—/_桇âÎ;ïäÔ©Sär9n½õVvïÞÍÐÐÐ�¡išlذl6K6›åرcœ9s†ññqjµ¾ï“Ëå#ŠÅ"===߃s±º ÅþÜüý|9Ýó<fffxì±Çp]—ááa,ËââÅ‹LOOwÇ1çÏŸ_óŸššâäÉ“ôõõ-Ê©j*çº.BJ¥ƒƒƒ -J =·öiµZhš¶(GôbÈ!ü›E‚ï…!±”O÷aH'BU]O¤K²E/PÅ(Q‚žè¨/jîŠ ½­êYÅÄ*oBèÙ.íè;϶`!±iÒÁÆÅ"^V_êšGUÑòyô\ùÔS)cõjVã©&ú¹sè®KîÆÑGF^QUßXµL“XJ$ ¶m!4Ï 0-‡þ| Ͱh·Zx®‹mfž•lž9æ° þ´\Bú]­Ö”}§Ea\T‘q@'˜Šžj‹jY CAUµTŸ2 ‚T;ϲM¢(ý^hª‰ße.0g“D†©Öª¦§²j—í"„Š*º&PI1›GU–­$“Ï3ת#5%NRÇS!RÐQQ0M³{Hö‰"‰e¥Ì¨0 I‚€DFÈ8FQ¡¢¡àµ:(ªÀë¸ä²6š.¨ÏÏá&¡ÐÀÊ AèG!hÖ›]V¢‚ïh¡D(*¹Lݲi7Z€JHLäíÖÛ´š¹¹K¬]¹‚B!Ï“õ#l\¿ éùÈ E»9ƒ®€ šäs\×çò¥3¨‘ \rØ}ÃVLËê4*ºªRkÔ¹i÷vÇ"ˆ|üNr1CÅÈćD¡Ñt©5|††Vr͵;xpïãüéŸ|š¯ÿÓ7ˆ"èí-†>¹¼ƒL4ÀÄSÖX__†‹&!QGm ]! %šž2Á¤”‹`¢®ë8Žƒëº]@[¥Ùlc†`hY:ÆG?ú%þúïfhÕ µÚ$=•<"–èš…ÉãXÕ¥Öhðù/|‹mcCì¾~;¡”øAˆçÌÎUèYNNÍÒjUSÖìÓ­k¸65;C+ ± ­ØOmzŽN­](€mũƪƒiX´š-ìXC‘™DtZmB Qè“Ïå‰dÄüü4 •J!t‚ÐCF„©,G¡â”ÝÔÕ.rÄqŒahhšŠ”!RFI‰!,3er^@3P˜iÔp£Y[gÅêUèþñ+ÿÈýä ì\‘N(1<nØ!”‚¹éYfÏ_`÷õ7Íöpìîoñ©ÿùW¬ß¸‰ïyÛèÝ´·¾ãGè]]dv¾Šž)rèðQN›â~ñMX±¤1ã³b`=^àóÀƒ°nt3Ÿúôgiû¿ùÞßdââ)lÓ$”>“—溆۾ÿí<üà|þÓÏM{nadãzÞóžÿ‡/|õ(Ãk>ðž_gíÈ**Sûfhx„ • ¯“HŸÆÔeî¾ë~áçogŦ œŸ›CËSÏù1*6º#è¸s´ÚuÌŒdÇõ½¼÷?þúà/rãmoBX‚zè3ã¨*(^LYw0¬aÐÁŠ#Åí$ó³ìÝû-´$dhx5NÞ¡ãûHS—&˜ŸcͺœŒAÃkÓîÔ0- %,_¶ é ¤Ÿ€!ÁsIº{M\›àèÁ{É¿�wµFÇÌÌÌðÅ/~‘½{÷>Ë­>Žcší:3óSx€&ùJt �� �IDATßùFFGزe o¾ãÍ\wÝuW€‰ Zª[·neõêÕ¸n*u133Ãää$§Nâ‘GáàÁƒ)Û½Ùà–×Ýò²±:šÍ&÷Ü}À|¶nÝÊÍ7ßÌòåÿ²³«”’F£ÁÜÜÜìÙ(ЍÕjLMM-Ê \ýõ‹ÅW¦ÞZ’@»œžÂ½|™Ø÷É,_R*‚m#j5‚™:—/cÊ¥ô`¶KñìMrYbÍ#¨ú¨ÂC[´´ZŠïúQu]âÉ ÔêerFÑàå’©I÷JA£á<”ò /)?\U1>>ÎÞ½{ùò—¿ÌùóçÙ´i¯{Ýë¸õÖ[Y±bÅó:Û+ŠB>ŸgÍš5T*n¹åÚí6sssLLLpúôi8Àã?N†ø¾Ïí·ßÎààà¿y\˜6<wîÓÓÓÜu×]Ïjh&IB½^gnnÏó8tèüàYµj[¶láŽ;î`ûöí/à>3¢(ÂuÝE}Õ¾¾¾E†ìUµñ¹s´._¦Õnw?§"¹|ž|o/bd$•Yê„<·øƒù¶¢Ç92(/Ö›$$^ Q'£È¶ eÄR†|—<*¹l-›¥Úh\µÀj†´œÆÝwÖj˜Ãð~=ô÷¿¢IÏVÇYd»–M«Ùƶ3ø~@IT5 ŒB Õƒ ÃpT]pn7 ƒ8ŽiµZ‹ãÛ¢ËêyæØ¼aj$IŒïûÏЫKÁËR©ˆjh~@JLÓÂ¶í®ž\Üu]–¨šÀ4-b©¥± JÊúLAܘŒc£i:qœ… "IÐ4U5hJ‚Ûì`XGÁt2$RbÚ6ÕN=Q0U}à[èhzžÛýìt”j÷óÅ¡Ä Uךè®K„"Â0 Ýñ˜››#ŸÑ‰TÝ4‘R…˜&QR,–È”J$~ŒP ‚( ÂУV«¥&Nívj®2°ŒK“S,ïíãÌé3hC+è+Q^ÉSGŽP*»d²ó&±ˆ0tlGµ0L 7ñSs¦DKI!W Ÿ7ñ}$–d³¤ pÛ E%Œ|”$&Ÿ+aYy­iÚóó¬^½Ïõxâ‰ÃôöBJ:®Kú„‘B³Ñ!N +V¬äìÙ³‹C’HÜN‹l¦²È ^Ð3Z©©Õj‹Žœ®ëR.öàP^¹š÷ÿäoóã?~ 7½æ5LM„Ml]C‚þžåÜç£äË7ùM<7F“)–)J ÜN‡©éiúËËIPº.â"‘@"cTE#ŒBòå<„)c£9=˲¾~B (6I–eS­ÍãML%ÁL†®c9:­f·Ó¢§·—r¥Àìì<†©"£ßóhéh¿–²Òèê§`sÚ¸h·ä�ÒÏqìTòA6ñ#I3L°t‹Nâ¹ ª“['ÖU²nt ÕéçŸzŠMÛvP*ä „†fg(V*ŒŸ=KtP½wýÝßòµ/|‘òp/ïüµÿ“ɆÃý‡Øýýodüü~BUcåàþðÃïãÚ1•·¼~F’Éð??þYΞ?ËÅK—yã÷}¿öæçá‡iuBúWÓjNRè§Óhðõ¾›žr…¾ï\·‘ñóçyÃmï@74þæ/~×½ñ6Zµ*çÇÇ™;wŠö̲ë×195‰Êzfg&I—Æì4¯ý7Žn i5PuhÏ7ª‚S,àGªF`Kî¹÷[üùÇ>˶ÛøÆ×adÛb»‰ê($­6"NPbô$¦•ýišJ‡�E8R£²i-ïZÞÇý>À)¯Åêáµ(–… ¦&˜Ÿ!›ËR,÷°|y?I,‰…\±B½ÑÁïH‚f‹‚SÄo4° EP¡zâ0ßüú—¹fózÖݰûêïœv5“ûûûÙ¹s'žç¡ëúãøqÓlæ¨ÌÅsH)éëëcÙ²eô÷õã8Îó¶òN¡P ŸÏ/î#­V‹jµÊÚµk‘R2;7Ëù çyê©§ØqÝÓNÃ/u¸®Ë¸tù}ý}lÜ´‘Õ«W/J{<7t]'›Íâ8Îb^­V«WW5 Ž;ÆñãÇÑuÑÑQ®¿þúE£«WXÇ„³³„óó`èå2z¹%ŸÓË&±lâù9ÂËS4¦EèG\‰Q© –tæ–bq“�4 iht„A€º¬¾ˆ‡þ˜ÄóaŒjåQô—g„O³U¬¢N¸Èù&Zèb˜¯šóÙ«"|ßçìÙ³ÜsÏ=Üu×]T«UÖ¯_Ïk_ûZn¾ùfͪ^(×/0VΓN‡5kÖ,ê‹^¼x‘K—.ñøãsà 7,êœ~§@é¿¶¾±,‹nºé&úúúÒ©»®ìÝ3ßÏ4M¤”ø¾eYT* “É,6‰íî¬ëºt:+Œ«|ßgÿþý;v )%›7ofçÎW/°†P­ÂÔ¢Ñ@³,¬\îYŒU]USàgj ¢(W—º!O×ÇI€žG>†ÓjU@¼X[‚ðêˆùÓh}×c”7!ŒÜwn«¨dÉb ¢Ð,º³Kó¥(yT-—Ã(•éèöU£±Ç©\¨ h­Ñ“OŸ<‰•ϓټ9>3_=æ­Z”€ÐL %! "&ŠP‰bÐtDBLŒª©(BM⻊"”E uá¸0–¬wuèÇ‘ ãˆ(JÉN§ƒ”’lÎIÁI’®ÖÒ}ÃHÇŸmÛF7,’Dâyd!4 !:E]ÕˆãP‰Âß÷ñƒ€0ˆÐ„†¦¦�iœ€ NÍ/Ôªó:tˆ7¿í‡ˆ’„l.Çäܪnwõ£‚(’x®G$%¶mE’ŽÛ!Œ4UMÁ@M<£ÑE1BèzʸŒ¢!ÅRËPð$†NJ„®`Ú&nÇÅí¸(„Qˆßê ©®¡›*Š¢#¥ÄPUMИŸ#ç˜ÄAH>“¡1WűTâÈEQbÇ®”‘AEIüÛÄC¼ „D'V‚0 “ÉE‚N§Šç‡ºŽ”!nÛòLLC¡ãûhšc9¸n‡™Ù:þANÍœ§ÙêpûßÀƒÝGÄX¦C"}r¹,®ÛÄv AÀµ×næØÑ£©voÑ“wHLÏq]Û2qœLw-å"Ø„©>®®é$B£Xêá?ø»ÔjU~ê§Uø^×o¢X&Y«Œ–-pÿý`80²q –í+(È0ÝÄt)Y^ée™ë!eÄåùiz*yÂDvïÍôЯ©Ëå …B£Ug ŸÅoÕ± ? ñƒSKu“ÈfÉç =FCDá%1q×´,Ž%õÚ<ËV.#“5!IBŸ(L0 ˲QL¶±lEM]ÝÐAH4]`Yf×)µC¹\@>NÆ$CZ…¬ædhº>#KèL^ž¡âdhù 6mÙÆ“‡÷sßÝÿÄæ;É,ô¡Zg󖕘£ËøÄþ?É÷ÿnþ‰·°ÿðÃüéÝÃOÿÂÏpvü4Š£¢)Ž:ÃW¿x7zÿ/à( 9»ÌŸÿŧøä§¾Æ/½ûç8}þ+Œ_˜b®ñ‘¿üŸûÂ×ù»ÿõ1FÖobfúýŸáïÿöüÅG—N½ÅàÆÍ|þKÿ€ŒM>ô;¿ÌÆÑæ'&H|—Áb–#3˜jˆô¨I‘G&_ÄóÚÄAÀ›ßx;v²Ý¤´ ÛM¢0"gô =•0‘Ôª—˜©gÍ5kø÷ü,óUøçûÏógÿ$ïûoïfæüS˜z3‘¸¡O¾Rf²U§`dQIÜjQL Ã&j6Q‹0ô™›ãÜ™Sì¹å6,ÇÁÈdÙ¸~'_ Þl0;}‘ed³=t<]1ˆ‰Ró?ßÇo¶°KY&ßÇé“'X¿ëµ¬½v+"—E�«†a088Èë_ÿzÖ®]{Ð'„ ŠR㥇÷íãø±c„aÈßøF¶mÛÆŠ+¼‚eºp°rÝ´É¥iÚâøžã8˜¦I±XäìÙ³?~œ“§NR¯× ‚àeOœ8ïùlÛÌèÈ(¥RéGø>C>ŸGAµZåòåË´ÛíE ¸$I?7Σ>ʩӧ`llŒ­[·.Êâ¼Ò@ÕØuñçf‰}sÕjÌeË‹ZŽ ‰i¢‹èI‚wôî±chƒƒØaˆ–Ï£.«KñÌ{Jb:$DØ, p¾ˆ«ÛÃ7@A¼<Àªj©˜EM¶ f¦°ãùlÚ _Š«T½|ù2wÝuwÞy'GŽaõêÕ¼öµ¯åÆodíÚµhš¶xŽ\`.äýP2Š" ÃXÔ:µ,‹¾¾>lÛfvv–|©©)&''ñ<ïˬò_ ¾.HÏe³Yî¸ãfffž×˜*I:ľ}ûº„’ÜvÛmìÞ½›ÞÞ^V¬X±( ÏçQU•z½ÎÌÌ ­V‹¾¾>Â0$Š"¦¦¦¸÷Þ{9qâ…BmÛ¶166FooïU¸5$ÄããÐh gh«¯/$HH”vQ«OM¥²"¦‰XV÷W™„4’ èF-¿¶ ¬¾8u],}¤7íË èˆÂ*Ðíï UÑ(ˆ"QQâ:`Ù¥Kù’%C‘ËA±øôsx•„”’F½ŽÞn“™Ÿ'>u ¥^'³~=¹­[Žóªb¬kA'Ë× ×õ¨ IcÙ&2J¡Ä°¬.Àô´#±ªêèZªý¹ðúN'e¿ê†‰¡§¬Ò( ‰Š@IM°ºã A…!vÆF3T:n)Ó.ŸªhXVšDew™ª6RúÄq‚¦«Xj*ÉU¨èš†³‰‰©ÎÏQ(䱜 fƒz§C!“ÅŒT!üV³Mßà ÙR‰–ï¹>¥lK·PuÚ\$žž^\×ESLš6–e±2„¡J—™KŒ®©K½a"„‚ë†hZ×uIˆ( Ä–jL!T¢CSP2:Š“tšô—²€O¨ÇªŽ¢Aœb",Ë@Ó|3½Ífƒ0ô)m¡Ò¨Î¢Ä6­–‡næ8ðð!î~ð~~âgÞ…f¨¡‚ªš(q@,„ÐÈZE©µSä†&KE¢("òC‚ Æ‹$ù¢Îüì,…B?ª’Å4Ëz—§eýÆ5ì~Íšµ„B¦Ç\N൉‚¾þ^<ϧíù{lê9</À¶ó„ABù8Ùm¯M,$aà!#I6›¥ÞhËb Q(÷ö3?ó•z„÷}èŸøÌ§‰Þž~Û_¥ÇÀ¶LÍ*=½fgÛ¬Û¼ÅRhÏ·Èm¤ŒÁ ñr;sšMΰªì©QIGØ6t\ !::™Ødf®F¥Pd®:‰âD„v„ºl€Ž'É+6Q,Ñ2:‘&°]@‚N;l¢Z&Ž¥#„A@L]žÄql„A“Ëf1´ íN€¡[TzòDÒCQ"4%¡ÓN¼”DG!ífƒ|®ˆÛvÉd³C§µ)ôVÜ6ÍÚ==’$Fš ùJ…8U§*%+¶îbæðS<öÅæÖ{õê%Nœ;Ím¯ÿÀ‡˜85Á¯üÖ!{Ó ìðùÞùÿëS¿ÉÐÚgϦPÌPÈeùÀý ·Ü¶‡7¾õX¹,ÿðÙ/ðþßÿc×ÞÀ|Ó£Pêãè‘3ÄQÌÌ%µC«Ù´q'‡=Ä»ÞõË80Íð ‹µÃ#¨ž<ô(ügßà÷þà]\÷š?zNu†íë‡Éõqƒi6l߈µÈ¡êáõǬٺً³ä[uBU£ˆÄlj\–—‹D­Ž>IJ6nÞÀ®»ÁÔñÃSlØ8Ê›Þ4Çß~êïø­ßüYEÐéÌ#„$ }T?ƒšHÚÍ&–i¡6±®áJ¬3ŒÝñVrºÂ¡¯ßÍÉûá5¯»™ÓÉàûm¤ Y³f]5©7Zø^“b©‚ihèDhYKwyòž¯Ñ˜¾ÈÖ(l¾Lßu1_!øQ.—cÆ ]ñŠ¢àû>O<ñ'žJ †a°k×.¶lÙB6›Å4Í+ N‡Ë—/³wï^’$aõêÕ,[¶ ˲PeÑèîä©“œ;wŽ(а,ë í´—"€ãÇ3==M¡P`ló«V­ºBÞà¹Àj¹\¦··UU9wî?ü0ƒƒƒ´Ûm|ß_<°=ù䓺Ám¯¿ë®»ŽL&óŠ,DÂÙY‚É ð<Ì|½P|šêy$Í&Þü<Þ“O>„{ê4Qz“».ÉU,Ò¿/ß?â´=º´/fÑ=„+€ÉËC•žÄ¯zU—ÄóPLS–HR/ÿž†œ8q‚}ûöñÕ¯~•óçÏ“ÉdذakÖ¬A×u¦§§ŸJÆqL6›¥X,¢i<öØcœ;wnHÌår¨ªºhütêÔ).^¼ˆ¢(”Ëå+Ì&ÿm0 •l6Ë–-[ð}ÿ 75lNM%?N.—cÕªUìØ±ƒn¸aq RUUzzz(—˘¦Éøø8û÷璘/õþð<³gÏrèÐ!î½÷^,ËâÖ[oåæ›o¦\.?ïDÏÕQÒœšB7 ì•+Q—/GynmbÛH!h>ˆcœ+–°Ÿ­ÆDx(ŠC¢/ðE-Ú­S4½ H+Vé»UÓ-WC¥~êµÔ¡ÞÌ,I<¼„Àj’ËA>ŸÊ�t:WO¹ iÈN‡ðàA¢Nœ€Þ^ÔM›PFGS¯„WQhŠÐR£*?B…r¾€m;DQ Q Ü$aLG¶‰dLœ¤‰/Ýô] ÃHM…¢tTÑv4”®îª‚úÓ£Š@ʈ0ôG½ýªO®”%’)kUšg…aˆ¢¤:©q¬‚ˆI¥;æ#»šª©¦iw•ôí­ôÒhÌS«Î`ä‹äÊ¥´ðŠSö‹Ž Þh‘ X†ª@"ÈЦ¦#ÃÙªÐ0M›(J=ŸX ‚@"£ˆ(òqkÑàJÓÇÁ²ÒQpÏó�ª d,ˆcI¬(ø^€kD‘Ä×b2ŽŽš¤Àª^.ƒžÊ„2@Uª¦CJ×,+4U#!B(Já{{{iVë†É|µÁ‘#G©ÖÚXN ‘ÈD‚�UIõT›¾¨ÄqÊ0¨(vÊ“á ÃÄp, ÓF::/‘‘ îùèF‡¿ü˳uÛ2m×.ãìÉ Ì®ßB©\ÀOZÌ^¾Hßò>ú—åp›B9OÇØ¦M’xF?ðÉäd$‰djòÕé4±4f§C¾'¾ÏôÔ ¹ÒZþô#ϯÿæn¿ãû¨N5n“¬Á4,µÙBÐm³}×õì?z/a,Éd2¬ZM³Z‡P2°n5õùihu~ˆ‘51 ÍVKQÄÄq@¢Æ2BvBŠù‘So7P,ŽŽÑׇª›ha XÛ´ðÛ.±Kjð YHãù!ªª!U‰×e]kšŠïGø~‚¦ZDQHƶI•V³IœxA”Ž@ç³È0mˆX–A6›I™ÓA€ïë\<sj­†ª$ô÷•)²tšÕt´Zƨš†agˆ¢/Žh4Z ¯e¨¿s=Œ]̰{pïû8tàÿñ=¿FvÍšµ:ï~ïgù‘ãæ=o@Aav¶Ê@q_þÊWùÊ—žâ'Þ9Ⱦt'÷¹à¾¥ÝÒ8øÄ~zøÞùÎwpàñ' êÊk6ÿï‡þ;ó7ŸdÅÊ ý?Áв>*}ý(–ÆÇþê“\w]†·½ãßS›`æ­$n'¸‹Ñ –“ÅÎei^ª3©JùšëÐmE×9?>É:×ÅW¬œCES‰‰sgÁÈš!òå>$ ¶KÜôq¬"}••\»m¿ÿá¿ãÁ{ïaÓÆaLÛ@×%Íz…€œå h6™l/ð “@‚®¸±€(!kgØyóë¸øØÞó�k¶l¤wÓ MÛwéxŽ•Å2²h" k�‰G{ò"GyˆN³ÁÎ=7‘[¾¢˜XÊg¹Ä^ýy^}Ö¸þsU×sÉfÓŽ¶®ëär9z{{G ¼+:Ÿ<òóóó¬ZµjщwÛl69vì�×lº†Í×l¦P(¤S Ý©ŠZÇÓ ù¯Xë…÷y!3«0 çÀÁÔëuÖ¬YÃÆY¶lÙ·=)ŠB6›eíÚµlÞ¼™K—/qìø1öîÝ»(‡rðàA&&&Èf³lß¾[o½•áááWl!Õkø“X¥2F_Ê‚nªŒˆ&' Μ¡}éÁSO!ÏœA1M¬¡!Ôr‰%å¥À(c¤lE-d ©Y ½ˆ¯³¥;äÅ«|bÙÕIJuß_Žˆ¥‚ôtâH¡,ÁçWÓžEœ>}š{ï½—ƒ†ábsðøñãœ={öŠüEëÖ­c×®]ôööÒjµ8zô(>ø “““‹ÆŒjwR°ÙlrêÔ)„ŒŒŒ<¯Æø åügJÕýK¹~¡.XÈ÷ õM©TzÞÜ¿�¬.4: àP(,Ãq×Ãc}»zõj¶lÙÂñãÇ9qâ–e1>>ŽïûŒ3>>Ž®ëlݺ•[o½•7¾lšñÿªç²;¹j:Vo/d2Äž‡œŸ‡(BëJ÷$¶M; Q}3Ž—€Õ+²VúïÅdF²IÇ=MÏc”7¢e–=½¯WùU2´A¶Á À\Ú‘_º›E¤~¶Jlø>xÞKÿì²ZEV«Ðl-LLL $<~µXÄÚ±uƧ¶¯&`U7TÔ˜®¦‹@ÓT’$Æ0TÚí6Š¢’ÉYxaˆ!L¼nw.ŽÓ.cj£ª*qEÒ÷Ñ»nêªúŒù$DJw²/YìØùaúžº¦§Z¨Š†”1q¼ð¬‹.3uáwi(ª‚PD"P„ ]£©$‘ív‡ôOtÚm²y‹$”Ë!éÞl–i²råJÈeÑ[.V·íb8q P C7Ͳ …ž¯v ª ILlǤÙê,- ¡t'!‚nòºÝÕTX]·MTUAA ”„H†H©‚ªtˆ¾ÛAZb‘φ®¥àl¥®}Š # ºæNªšÙ®Û!—Ï!e‰ämïøQ¤€ t‰QHøˆ$D ¨Ç!qu÷VÙ]_huš¨ŠNǨª‚e9Ôëu45ƒª ¢(¤`÷ÞwµZ‹ËQ4…•+Ñ4b±‡v«Æû÷½üÄ;ßͳrpããXœ=w‘Më‡ñ<ÃÒ‚ô÷‰UQQUçºÄHÊ¥ÍvƒÝ4Ù·ˆÿáÿx{3ùéßsÓµ ‡øú—¯"ˆ[Dh ó‰Ïü'” ‘ŒR}CÇÁ2L.Ök@Œ“±ñètZD¾êØ C%AÓÚÅA7tZ~“r¥‚::ÊÉO q’D‰¦ T¡ª$qB(%"VÑ4WFD$Ÿs0m? ðý3³Urùù| ]78î<½½+({0M¡D)ÓV(¨ºB«ÓA¨ B˜D$¸n)%gNŸDÕ3Ó—X=¼’eËp=Hbbx ˆÊz¯Egö<áÉ LÜ÷ú¼ÇO½ûG1®¢YÔ9}ø)N=Ïèê5¸­ †¦â¶5¾ô÷òŸþÓǸ~ÇJ>÷÷{ùÌg÷²ilˆüé‡yÏþ#Nž½H!ëð±¿ú<º&Ø2¶žLÖáîûpîÜ~ú]?ʯÿÆ/ TIà61t•O}üc|ë®GùÄßü³—§ðp´<¥Ò�+ªìßÿ0z Íùùl…È’$B'gØ„m—êå)ÓF ĉÏÅÉqê—'è¯ô0´b v®Pñ<—(‰šîä¨Öfظi”\VçèñãìÞ½ðƒzÊZWM2‹¶+©×t<Ó1AWhG>YMÇHb‚™ªa2xÃõÔeľO°Öë°fÏn\"„aãF ¶¢Ñ“7 jô˜™¸Àþ‡fÙà»n}^¬àwši"¦½²:{ß@Ô5ÝHõ”-ÛÂqt]_d—>Ÿ|€eY‹Eúúú˜žžæØ±c:tˆ  ^³gÏvïÞͶmÛèííeff]O%6®Ï}UU1 #• y±´ç¾Î0ŒçýœqS«§æRBz{{Y»v-•Jå_dš†ÁØØo}ë[yô±G9qâ{÷î]ÔYÕuááa®½öZvîÜÉððð j¶¾"BÆ$‘D8"Ÿ=½Ï“HâŽÓÚ· ^ÇÈåÈÞr úÐÒqêÕ«ÓùôU‡§Et:hµžÂ &ÉfÖQ.îD×KK‹óÿ7`5RFL¦šB¼l¬$Ív°zzqs<åòÒõ¹ÊÀµN§C­V#ŽSŸŒééi{ì1ž|òÉ®Ƴß÷Ù³g### P*•èïï'ŸÏsòäI>ŒïûÄqŒ¦iX–E6›å¦›nb×®]\ýõT*„‹² ž Ï€QU]×søó±\…‹ïñܺṚñÏ÷³†a`š©Ñ±eY‹5Åsóÿ† xË[ÞB±XääÉ“ìÛ·}ûö-2[+• 7ÝtÛ·ogtt”l6{uËý,x¬�É‚¬CµJëˆçç)ìÙƒº|9‰ék’äª]~uïá!ÐF7- æ(Vf%/^ãQI{lq÷z&,õ4_Úè:É™¥^‡J%Õ.~‰ö‹pzšÖ£â?öÉéÓ´ƒ�WlEA¥RÁÞ½›ÜÍ7c ¾*/ƒÖj×"I"ð¼jÈø‹ãd°,ƒèƒ.¿�� �IDATDQ0Œ ª–v ;EIuBŒ©„„¡Jú$Â0Y<ˆªB¡Ói/&9DŒeØ‹0AUQ5m„ ˲µWÓ9ð…ÎHª{ªkFWj FÓ0P(K h¸©p8q‚Išõ^«@__q£AʤÒT Ã"’1$D ¦A§Ó!]Tl+ål6ÚhFÊÈ](’äi}XHÐu8yÚxDtA`Ã0ÐdŒç¶ EU0-ÍPQÔ]ZÁ÷?@�I"QEQ!I %Ez"affšROÛÖ‘na™(šª@QTJ‘ÄÛ±ˆc‰PÂ@’$Q÷>ˆãÃÐI¢”!K¨ ›^'@ ¢j*“—.r×=wqÃk¶…!3³3L\šdùòÕ %>ý©ÏðÔ‰EÇóBl+Ë‘Ã'(WòÔÉsܰóZ‚°MØv†™™)lÇĶt¢0@×µôó© –ebgó„QÈüþ‡y˼r±È׿þ³—æÙ<6D©h“Í•¸ÿÁƒÌT§¹ãÍß‹SÎ"T•‹/±rpÇÎñäÑÃx½ý}:Ø"ñZ´=Ÿ¶HМ<ÛBI$‰ Ñ ™$¸&½•"‰t|ÓÒÐ ƒZ³Š’JQ8±jàû²Û±vP¢A”²Lc!‘‚ijôõ.Gˆ„V;uþÖ—BÁ¡X,â8&ÓS—Ñ4h4šØ¶MÆÉáù à ›Ívµ#AÕ²¶ƒç¬[;Ìò~œŒÉÉÓ'‘q„üHâØ6^Ðñ<dû•b‰ŽžÐŠìlŽû¿ù¼KoúÉÛéß¶…»Ÿ:Ȇkw09;AèK>ý©½Üù¨”mNj£"ù•_ý~nºyC«W!Ô„Á¡•$B'Š"þñ«{yð¡û1u‡å+VðOßøÇ<ÎÜÜ$›ÇFÈå,Žœ¸›r©‚m—øó?ÿ(øo_æ?µ“åËW“ÍV¨OL³bx“GóK¿øû¬îÑøÁ7ïàÂø4Ìœ¦˜+#Š=H?aY±‡]×nG³-‚ù‹Ôf¦¡§§Muð\EXN†Z³R¦£Û&Y?²k¯íçØ±“˜–M¡â89'C£Ñ"“-ã”+8­1¾" ‚€‚Tqœ x¾ô-Ñ›o¤åJŽxŒò“eú7 3[S(+(~ƒ¤3‹Ð|Î'Ÿ<ή={èÛÉô…Yf]Áªuë‘Q€¥º×¯ž« \*366F¥'e¢,0X¿àØÓÓÃÎ];q2““ÌÍÍÑn·÷ÔR©ÄƹöÚkÙ¶m•JHMà†‡‡Ùµkõzý f‹aô÷÷366FǬ[·îyPMÓ¨T*lܸ‘[n¹…Í›7/j¤=T.•JŒŒŒ˘;w>¯nì󅪪¬Zµ Û¶) ‹EN<y‚V«…a¬^Íök·³ãº ¯¾âÐø ¬ö»©=îˆ|@=éÌL½§{d„ìöí¨«W#ÛmâLjjµ¥‚ú%9+K¢ Jçò}›ÅÔ*dó&šúÝ.Å+ìY]�AT5eȼ„·gí±†QÈ£gü¥‘Ó«*TU¥¿¿Ÿ­[·R,iµZÿâÄHض½˜#K¥cccAÀÙ³g™žž¦ÑhE¦iR*•fÇŽlÞ¼ùY²CŠ¢P(¥Õj¡i™Lfñ<Z©T¸æškMãyÆQrø† p]—\.÷mõÑŸ½_& °}ûvz{{Ù¸qã 6? ¼lÛ¦\.súôiæççÑu+V°qãFöìÙ³Ø@}%æzÙéà9C0>޾jÖBu)^bìÍIJú“Œ¶ÅY¾”¾_E!U×qÐ¥$©VÁuAÓþÍósE„t õÐCø‡‘ÌÏXI¡€Y,b¬X22Bv÷nœõë_µ.“š”Aðÿ±÷æQš\g™çïn±}ñm¹gUÖ¢*•T’\Ú‘¬ YÆÆ˜­iÜÌÐ ^`` Çôp†é¦é馡›ÆlV»±˜Íx9Þ°eÉ`Ù²,ÉZ,k+Õ^¹g~[ì÷Α™v–d!¹Jr¾çäñŸï}Ÿû¼ÏS µÆó<_‘$9e™ã\E‘g ¤EEQ8¤’h­É󜪲[l#kKÒ4¥(Š:AU¶ÖžÁ¡¤Âº‚¢¤iJ!HÒ”ªªÐÆ ´Di³5h `Lí¨¸ÉÒñ¼�)ë„•f9UåB’ÊV8ëHŠœ$1>Þ&MF$é�·(Šmí «aˆ]]¦ÝéÐëõ±BbŒ÷UfIš4É)‹|Ã0Äb]±!m�UUlµ‡¤iºÅøu•CJ…sŽ,ËðýšñYß§c4QT9 kLŒ”’¢¨HG#–æ Û1*ò¥«Ù®Æ«ÙºeÍPÝÔ& Œ·µø(Ër㯠<¢8¤ÌrúÃuvœ³ŸÁpHYäX[ƒÒFÔÊcH‡ÀmíŠJ™S•¥%6«!R ´Ñ†cl•#ð0žæÝ¿÷nfgw°¸t Ï7´Z-Úí6Zyä~ñ—ÞÅî½ÿõ—~…·ÿÞïrÉ%Wpëß~ŽC‡®àî»>ϼî5!È‹cJв$¬êq(ËÏ÷(ò‚¼J)äñc³kטfzÆ"U›Ç[¥¿žÐ쎡}XdüÈë~žÁœŠø¶—¾œ$“,Ì/r鑤 çî?— Ñív(Šë"¥ z$IB·Ù åàêçn«ÏS$É�/ò0+5ãS“”eAél-I!yQ3Hƒ¨A 5ù0¡ÊJ´ñ ½[ZúýãÕ›RZÍy^òÐCÓl¶IÒ”G}œÝ»v±¼¼ÌØX‡}ûÆH³”¸Ù¨™z8F£a ‚‹ŠÕÕUÉóŒ=ûvÓh6¸ÿûh·[hÏ#/ ò<¯¿›"cñÔ)‰Æ–ÜýÙ;ÈDÉU/»„Ü“Üó…ÏÓÇ?LNÂM/½”Ç>ÍòJJÜŠùžï›ã•/¿‘ënx!GŽ<ÄĤ%I¬®ÜÇ0)y嫾…‰©…=;}¸ãswòæ7ÿ<¯|Å·á‡)GOÜKùì=gšªRüÔOü4Ÿ¾í(ÿþç^ÉOüøñÃ&½~ŠR~óŸóñ÷}˜»\¢œ4ìÞ{>Íp×»ßÇ=<„ü›[Øñ’ëß±“•‡2xèahd¶àüƒçÑK$…Ãe+«CŒÑDe„0Š^o•<³Z ¦&ºÜ}÷2ëk=EVÏw««=FIA’9Z¥£7XÃøþD„i’Ó=¼~Ô.ò(ŒŽcšR1vêÞ{{óû¯$]^$îyœ¸ã³,//qÓË_F0» ’”hl’ݬ st^b…ÅÏhU)ŹçžËìììÖßétž”ÍÙh4xñM/æºk¯«;$¾ª•ï«Ù¤› “͘ššâÆo䪫®¢ª*ÆÇÇÿ³ÑhpèÐ!Î=÷\¾÷{¿wKòæ†ïû<x½{÷òò—¿œ h6›cþ—‚'®¾êj]tˆ,Ïj´Ý~Ê ³1†©©)^tã‹xáÕ/¬åv6$u6Ù:A|C4å¾/B*Ä O±°ÂÀ›€FÈXÛ#¾òJ¢‹.ª7=¯– p›¦`-Bm;Ï>ûŘGŸ‹±ñ؇(²èéBjâø�J…Ûé›ãE�?€Vû+ºh.| W÷o ԻታÍz;[Â÷}®¹æ:DQOIÆÈ9GE[y2.»ì2<¸•ÿ6Ûñ7sý&›ôê–+¥˜››c||œ½èE�ŒoÝÛyçÇ®]»HÓß÷ÿÉMÝÍΙ™¾ýÛ¿} ¬}*Àª”’K.¹„sÏ=wË|ëk«ÆÆÇÇ·Ö'›ÏK±Q›{DQôO‚¿gel°y 6jjáûˆ‰ ÊÅEV¦=>^û­l2·7F¾!aÌ8­öõЪx Í3¸~²›Îæ ÛÏû%°¨$¡ZYA§i­wû¬&`‡íõè}ô£ ?óª4E]pòÒK?ï<â¹9””­Áäó̬ê«Æh<Ïl�¥9Æ„´Z @ ´ÄYGš&T_’f5CNJ¨*Gžg(]Oþb°³V ã¡MÝa­%IFcð|Mªs®n›Ç ý�­ Ö:ª ’À÷HÒ!à6 nGQ”hm ‚ vg,²’A¿«J|ßcmu¢È1ž¢Ê ú£qŒ×ˆ!Y9ü( jƃ!NÕº¢R«Ü C*[%)¾ï‘¦C<U'ð¢Èé÷{!ˆ¢c4jãü4)·vd=ÏÃ"ªªÀ÷=„t¤ëkT•E›š¡Zæ%AÔjÅBÖI)ÏS¤ðÑZm16ðn•]Y©e”ªÛË=ímÉ3XkqUxôפý5’4Á4¤UŽsµ¾ªç)”ôH³6Šø²,)ŠÚ¤Éó4R(ƒÎA#n‚2ôÖz4¢1âx‚O|âSüá߯ÛßþÿðWïù+:Ý.Q²¼´‚sŽÿó'ÿ?®¿þ\ö7Í{?ðw”¥å‹.a0Êi¶ZÜy×ÝTy‰u¥jgЙ© Üú ÖY¼À£²Žµõ5Â0F(‰©FÜ"K8pà�ûÈ­œ<¹ÆÜž ~í-¿K#ž`}0ä¶[¿À7½”ÙÙ —¬­sôÈQ®ºâ¨ Ú­&ÃÑ|8ÂkÄDQŒóò4Ãå'Ȳ„4/i¶´ÇfŒ†xG+ô (*‹ fB*¤ªß‰<Ïñµñ=i¬s5º’iB²¶¾Xâ¸ÁÔôÚÌ#¥æÈãGh4CÒ,gzfãc8Êóh˜ZY*…Q’õÞ:Q3ÂhR”4ãýA-ÕaÝ»÷2Ê܆ËvFX[‘¥ '™qwýýôN,ðÊ×ÿ»/½”üÕ_>¾Â÷ÿÐÿÎÐ3¬Mïâ†k^ÌêBKÉôÌ8UÞ¯MµTÂEÏRd ¿6ášœlÒKNÓî*|ð1¾ô¥‡¸àà!v?Xçýx/¯}ísáAÄüô’Ï|æóñw±kǾçñ·ûIþäÝà¶Ûãô‘yph®¸ê v¦çXe¬ŒFüò¯¿“ÿc"沃óàáG™9ï\šS¢—ˆÛ„0êe ^㤤*K”ÖèÊ1Þ ñ´âСpÇç?JQ¹ÚžÃóˆÛMò$§Ù4 |´g Èb¯Ä‹5^®åèRb½Yn±º"h\ð¢Hy/ß}7MÝ¡1{£ÃGøÌ§?‰Ò–«nz A§Kšæ” ¬¯éשJ®ªuiÕóg‡o³µÿ«Áϧ ȶžÓAkM³ÙüšÅ”’0 7: ž¸`Ú¼ïÎè !h4OÛPj³•Ðó¼§õ{ŸS‹ýñ Ü9%Õê2ve3Ý@‡!B dÕ ±Í5\U‘/Ì“Ÿ>or a¶ÕÙž}ì;Àgéì}Õ{I–î¢o-nº jîÇ3í‡ô|çjédeµÑz¨Ï\‘äyÐl"Âë,£á•$4<ï¬Ö üfˆnþÛ̵Q= àþ«óç?ÜÐ|ªkMÒÉ™M>Q<Õ{ßÜH5Æ</r½RŠV»®*äÉ“` ÚóhÌÌÀ©S¤‡c§¦““ÄA€lÔ>Ûñø.5JÅÏtb�* ~Q\oÀm#«ßøoOkí6诮"’ãܳ; ðÀTwÝ…h\qÞ•W"ææ¦§ ž"¡äy¬ö7Z⣠u–••%@211AUX Æ3ØÂÒë­ÁFB ƒej³$IÂm´rFôû}²Q‚u„Þ�bëb4Ë×4FaŒ¦rµ¡N’$H‘ׯMÆ«~Òß(Ë [Ùš±jÚh|?"IR„HýˆF£¨õDkÒ“gaD‘¤¤EÂpy™þ O«Õ"í÷QÆ#/-ƒb„òk€1K Â0DàHÓn“•…´qQ€ &˲ší+Éh4ÂY…RÏóè÷û4Ú-<Ï£²%RH<Ï£Çø¥ MK¤T~„R»Á€ÅÕšµZ(–—–0žG§ÛÚr¼ö<ƒ‘Š$Mjé�©IÓ”FÔÀø déäij™‡ÄqȰÈõØHmÚ „@;kí†æm=Z[ A¿ßgçά®®SJ!B8Füâ{3—]¶‹Ë.¿œ›ÿ䱬PŒOÎð±[náów,pûg~Ÿ›ÿì/É2XZZæÒ+®brbš8n3úÜsÏ=ìÝ3M¿?$ Y–£µÃÓ çjre…-AzVbü&_~èJu1:bÿ9ð®SïÇV ”ìò…/<ÌýØ)Ë”¨Uð§7ÿ9žQ:t1eY „£Ç`4“34ã&K£³aƒª- ¥-iD1ƒþ*4®ö6#]Y¡Ð +%y^ä)•µÄAHî,“S“,®÷ G(±R¤íNre)a¨9vüJIvï™#n´I³£QŽsëã!»vÏqôÈñ `¥Mà‡œ>}šÕµeææv$ aà#•d||‚ª² §çO055  ¬öÖiÄMšZ-–˜žfX Úñæ‘£|ùÖÏrÕ‹®e÷uW±8Zã²ïxï}ûò77ÿ/~Õ+ÐÚ‘eó´bƒR`³F£!“m?öív›n·KžŽH³aYZÐjŽ3èkV懼ò%çòC¯ù)Ž8Ì~x?Ò >ò{¹ùßÍ_¿ïÞþûÿ‘ ^Èh¸Ê/ýÒ/òÛ¿óQÂXrÍ ÷±ïÕrÝ%‡¸|ÿ^î½ýÓøM ¾Gwv'×<Hxê1:““8iiÎŒSHXpÊC…IV‘ 7tR›RJ”–H£Q‰u’Ó'OÐŒ'8pà�eñ!—éŽ5°YJ#ŒÐÊ4qk k-Î;Á¨O’®ÓT#—К U[¡ÏòêCß28q„ýã]vÄmŽÝùYZSq×ý°cÿy\vÃõШ%‰|‡¬,YVP&k„A@åÍV›²,·þ·ãù¬Ž¡Â°–tè­â5#üB!Tð•6ckqeI•$ä'OR..LLÌÎÖ­NÛñl—d¨ Csßw ” |ôƒd‹Ÿåa¤×j~Esó¬¸[‹ B£QÈí"ï™kk·áþ†Æªw†û'”ªÙ8ëÙh„î÷ ;m`u;¶ã ‚;ÍéiÄê*œ>M¥56 ñ›MlÝ}7LL ÷ì¡ÙlâÚmÄóÌüŸŸ¿$še%¢ÊÁmšÎœyÌQP±Œð ²9‰0ÑvÎ=ßž1Dcc”ÎÑ_[Ãß�VŸÕeÁ±c”ŸûöèQô®]4o¸èškp¬ûo¶ÐQÔ ËR”V4‚qܤ(Ê-×ÅÚ)¾~0q3¦(jF¦®–’ß7HYk«¦é¨n÷<pv ݘ)¨Ê?ðk@µ* ‡ $ÊBQY”2¡ÑJPU5@)…DJs%Uµ©)ZkTÖ;’EU)²4%/J”r +­=Œù†ãtwlŒ ä9NIQƒá AK<ϱ®¬~\ÁüÂ<qPOišPl˜SEQDš§£)Ë’¼¨µµÖhcX[Z$<Ž$MBR•àÜÆ¢ÏIªÊR& Ù(©5Só‚ÊZŒ”4âš=œe)Uù•Ö$’g9Y–úJIFÉ‘A3jEÍfí{T®ÂVÃ~Ÿv»ƒ¨àø±~@§Sf9¾_'µ,«Y­aР( :.YV µ!ŠÚ”øDQ‹~ðÃÜ{oΛ~õ ¬¬¬1?¿H«Õ'¹þú›øá×¾™ÿòᅦé3ŒCè{TEÝò›ç9R¶yð˳÷œ9âf)jö µ9U%Pªþ­UépVÅ1y©X]15q€O~â^~ô }Úí1p†{ï=ÂÕ×¼Œ³ûùã›ßÍÜîY>çm(•ó¦_ùY:6Y–òú׿Ž(ÐgÐnbŒ"][§luƒ˜¬’Ä­½µe:ã,–˜š™aþØiÆÇ'H‹Œ²*ÚÃ3Fk†ÃN5è/-³Üï>¾ ŒaØï#åIü @*ÍôÌ,ÖVÌÏ/QV98Ä7š0 éõú C</`ÏÞ½Há1  ÄqƒîX—²Ì‰1B@Qä$iŽR_;:í­f“Ð5@HFI‚µàk2«}¨,éZÉîÃGŽówù03;g¹àÚ«YÏ3nýâ½Üw×ݼñµoàï?ø7ø·Þu{.<@kjœ}ûö°¸¼Lw¬ÃhT25±‡Ç&Ц¶Ãçoÿ;®¸r‚Ûo¿+¯º‰ÀWä9à_¼çK|ë¯B ¦0=&˜>›ßõ[¼ú_|;?tÿáßÿ=ú�o{Û¹ö†Ø1;‹ÈFTÙbþƒáu¬÷ùôwsþ/à;ÿ·×ÐÚ1YNbKN>úñù{Ññ.I8qô³;vÅ-†ÃgkC½¹¹Y²,E ‡ç$IÆC_~”©iÃäÔ²t ªu˜©e+ˆ¢+jy”N«M¶6$¯,‹ni…Î ¤$ðkÃ!~#ehz î½ÿ6F÷f¼ð¯fæÚ›(3ǨŸcÚc¤6ÇÚ4=AiÒÌQ”lûoÇóµð<¢ÙYÒõu†·~Š$é\jv¦v;í÷)NŸ"]X@XK4=ƒžž†nwXýÆAàÀ8áÔ H±z䣨ã·Bè@sÄÙ0ˆ>Fô£…"F"·‡ï™«úÏžšYå é-çØ†T·c;ÎÜ÷H öï‡'°ÇŽ1xà†e‰]_Ç=Jy×]uÎÞµ .» 1;[k5oÇÖ«ñè°™ ÐÕ h[hL8;g·’’U·ŒÏ$±è ØVÏÄ·WÃJ·‹\[£³¶Vk¬>ËÀjzü8½;ï$i4ð.¼&'ëÛ‘ßœk.]%¸ÚA±Mk@r4J±Î…!‰(-F´6$iÍPBâœÝм©°¶f° !Rà*R D­9*¤£(ì†Ë¼@kŸJkŒo°(dU3[®™“b¼UJ⨵儨ÁÖ4É0ÆC]›.Ù»¡?NŽžÁÚŠJP›sY‡ÔµÉÖòâSs;¨Ê’þp@‰d<@H|ß§Ès*k ¼�© MGTEŽ´ …BJ±¥£j6 ¼j÷Èš…+„$ð}’d„ÖÌ8)ñ”¦²e FXŒ�é ¬Í1& n¶Áxh,FyâpäE |Ïß[­e•£6˜°eY"¤D/ÖôÖzˆ²"K‡ÄÍ&Ë¢ï *'ðýˆªrdY­1älÍö½Á`ÄwÞÉþýh·Û(¥IÓ”OoðÖ·~„׿þ[¹äÒ+‘Ê¡=L±²Üc×ΈïûþvÌM“• µD*Åy2¿°ÌUWï㳟û</yÉ ­é­¯á\…h¤¬ÿ„€F£ÅâÊ lcL›Ýò).:ÿ2âfƒÙ“d¹æþî·š…ãŽ{àK_z€ë¿uŽ_ø/?ÏW]ÈúÚIÒtÄ¥—âô‰c¤Ãu²oÿ>º÷>\uÇ=Êä9pë'ná7õm¼é—ÿ³çÎ2ehϯe+Œ&òA¢¤"MR,)Y‘á„ Ýj¡¥ÂæÕV‹‹‹%É´ ð”‡2Šª*ކ¬û iVRäÍ–Fi¿Öj #Öû=Z¢‰”µ±ç{ß§(kYŽ~•0=3Íh˜ =Cà‡¬ö×é¯÷‰¼V ò mEˆd|ôæ›ñ[ ®å+É=ÅBoÀ¹û/àèáSœÎ2ö\z)ÿÈÇÙ5³ƒÙÖS3sØL°wv‹+ËLÌŒc¼ˆ•¥œQO156Å%/¸#\}õe,,?N¿ŸRY@H¦¦›üÜü7¤é ¹ä¢K¹êÊÓêvùûO”׿þç˜ðïùf§ÇHó„õµÓýU"Y‘ O3521Ý¡ô »öïÃCkr’þê*Ö´&Ætƒöø8© …`ïž½4£&Y^2\ï!µÇÜ®œ<y pÄ6331ífm´ðøÑ”¥¥e¬MÙ5×Åóý~ŸõÕByHí#µ ¨rœpxΧðâ$hxÄžÄe)8F =Íê‰Óœ89OVäÌ횥GT‹ Èö$Âd•­;,…BJI•§äý>‰UŒ²^í.û1wΑ¦) Ü{ï½ ‡Ã¯[oÓÝ÷©ûÕ×~6®ñt®ótîëë¹'çjƒÄÙÙYvîÜÉÌÌÌsÒÌJêt0³³˜Þ:”)¤K”ó9¥5ÐëQe)ÂL«…Ÿ@´¿Jëñ9ϽmT8G Íõy²änŠå{IQø³×"3`gzò¬@&¾5ˆmžÿ36§ÛAŸ|}*Ëg™¢C0üm½Æ3UUÑï÷yøá‡yì±Çžó9ü«Ïy¶~Ë×s¼sŽ0 ™ennŽÉÉɳKU)hµjV{U!WWÑiŠm4À9ü,Ã;瘞†ñqˆãúœíøÊû A4K1:FRÌ£‹�ã&ÏÚ©ÍâÈD†Àâ0°½‘yfÞcÐããÐïó ¬Ú,#]\dåÑGY[\$¼ê*ÂK.A}S¹á</pnØ©œDKƒVÞp ÃÑ�?ð)Ëœ4MÂniE†ç5Óµ*Kœµµn©X[39Ûíæ––§R‚¢((Ê‚F«CåÜ–!”sõ1Íf“¢È©líº] ˆâRšÚü)¯H|?ÄZiœ-�UƒYUI™W¸$%h4ÑJÓï÷ÙǨ áóµáˆ4« FªÏâÝ�� �IDATÂÖ:¯×4žÄƒ¥Ä–pú¦©TäyÔš:Z{EÍæ ÀÑh€EA0ÆZ… %’˜ Fƒ„*ÍIò' JëZëÖÕ€·‚ápHom­Q÷ U^RÅ´¬õWËŠ*+(²)4y–áiM¯7 ŽÚìØ±›v#fm})êÂÃ:‹1F“,ËhÆmÚ­.q#®A’AÎιÝ|èÃçèÑã¼ù×޵Õ>kýeLàc´(>wÇ8ô‚óobI˜Ý1‰çC…%¸òÊ+ùÄ-Ÿâå¯|)ÿù?ýâf›ÞúÝN‡ª*€ é*ʲ¢,SòJ°¸¼@#žfrbïú£?åž/f¼æ_œOY%¿Äà‹÷,ñú×þ'ª^rý9¼ã÷ÿ;;gCÖ3Ny„öDŒçKÖÖViµØ"ƒÁ€óÎ;Ÿü2Uo„ï7¡´¼éMoceA26±/h0X] ðCÒ$Áʈª‚*+°eA™åP¹ &µ¢ÑðÃWZ”§ðµ&ˇäi4 Ï´·!hos”4A„³ªÞXž �IUåÄÍ!`~~žªÊiµÚhí!…ÆÚ P€Æ9Kõ†²~/tÛ]ŒR¤£„¼(˜›šåø#s÷Ã_&šŒ¹â¥ßƱ¼O0 ›ÞÉÑûä¥/y%ïûà‡¹îò+‰ævqË'oåU6û^Àúú*‰1ÖêR$9YZÒce¥‡`™»æXZ^`vçAÓç^s17¿óvÖViw?ø¯_Š)q;òeÞ÷á/ð¿ý.¿t‚·¼å­„žäñG¤ÙnQ¤)Ýf@#n°øà* 'N2è è´%çœs®åãlÅ`exçNffg‹ V—QRe9±ï‘F„Q›Ùé——ôû¥1ÆÃóBª¢Âø!) Óôz‹,,.ÓjøØÊ‘%ö‡´:1~àS |ಌ,¡¢ˆBk’µu´*hNM°|äq>ò×ïçü]{yÅ¿~=k ÇùÜç>Ï _>CØ ˆ²ŒÔZÊ<ëRc‚^àS”NJ<ÿ¹³ø´Ö2 x衇xç;ßÉÉ“'· žj¿9×>•s6ß,R¾žsžÎ5€'5ÚúFÜ“µ–0 ¹ú꫹ñƉãøikÂѳ÷â‰qHVå ÙâqÒ•—瘩I‚½{ÑB›çt1&H$‚ 3ÉçT!"õ,±ëÑ) —¿@qòc(¡'.E´÷€:ƒ`fåp£ úÂé í6Øöφ/«Šte•di‰ª(Pg S\|Eÿµªžu†Îv<qþ*Ë’¥¥%>þñó|à)çý3‘ßÊyÿðøgú_ïñeY211Á5×\Ã7ÞH«ÕúGæ™gE´ÛÈ Ü¹Ót,ËàúëQaˆhµj)mPõk€Órqš~¿Oè†hìÙ™Åì†ì¢Û̲۹öŒ½6Zw:”€|U[Uäëë¬ßy'kGŽ00†ö_x!¦óÍ­·¯kÓ ´Ö UZ¤Q[‹•ډѢ¤Ù0UÚlϨª ƒ&ßCH0ºU˲Diï«’ƒÛ�!  jµVh­qÖ"·µ6’Bo'¥Ü�Ss䆤õ=–E ZamÍ•Ô�/çey‰­%ÎAe-eU¾ÆÐŒ û5K°,KN:E3îÐŽ;µ—uà ò¼Àº_ò<«µ³Z¶ÀM¿?À9Kž¹Ãój�Õó|ÂÐ,i–€p(åQ䎲¬°R ”@ CFH$YVb-&ÇØ¬È±EAY8kqž#ÍÒ-Ó/ã(¥¨ª ?Ȇ)ÎÊÚ˜oƒ½D>£4!Òëã”UÅz¯‡R†v+B*IU¥5^9|Ïçêk®ÃU–ª*I’”îäFIÆ[~í\vùEÜwï}´[MŽ?Åúz¥=>ô?ã½}ßù7âpXQà(‰›P”««ËÌÌÎrüø vÍíba>çĉcÄ‘·µ°´Ð'A:¢ ‰çKL4Æ?ôþÝÏüž‚Ç;Nš¯×ÌNcÈË:ÝtÓEüίÿ»vkæO|‰©Î,¬ °¶ÄÚŠd4`çôY:ÄiÍÄø8F¬œ\ ³û\ÞöŽßãc»Ê{þäLÌîæèÂ#DqD•fx²~ÇÒш$+•#ð}rkÌÓ,¯õoµGÔhP¦)½~Fà†µõU"?£w¶ŒÉ‚0¤7Éóœ,+hÄ1RÖRi²<EjÇØxkëöó$MkÉ ë°ÎÑjwè¶[¬.Ÿ¦Ùl2LSz½Êó댡œcåô<²Jaz†SGòø±Ç¹äšKhí! B:v’.Š‹]Êퟻƒ½2¨“ösa^òÁ}ˆ¥•“¼ê{¿‹¥•ÓL†3$é€J „´Ç$e¾Î©Åu¢°I¿½e˨oX\…ãÇN³¾6d0èã¶7bmµÇÏÿüå¾ûÖù™Ÿý7üÀ¿ü>æ?ާ|f¦')K‹idU/aéÄ2‘עĜ>yŠû⦅¹ì¯õ‰ËŠ,MȳœåG³û…—ãÅg$e–‘' UQ±xÊ0 ðýzÌFÉE*ñ¼œ•å5ÚícBÒ4åÁïåâdrr’F)ÈrGš ÍFŒ‡Æ¦‚*¢+XYïèâUŠ…Ûnç3·~šƒûÏç7¼d¸ÎÄ¥W³Wøœ>qŒ=ã]܆$ŠMrŠJcüÂ6ÆÄ ûëøF™çÎtÓ<¢Ýn³oß¾ZKëë`aŽF#¬µA€çy_ó\!UU‘$ išnS„aˆÜø.¿Öyiš’¦)žçÁ“?Y–‘$ Î9´Ö4RËosãmóžœs[÷¤”zÂ{ʲŒ4M·¤fžJÑçû>SSSø¾ÿ¤`ïÙ^LˆF„nD`Û¸5Å£Šz~œÀLL"ΦÜÓ…ÒEh‘!D DÏ!pU€ Qíóñ«’ª‘­ÜÇàä-„• PÐh>3–u%i¹BY­Ðˆ'PA÷¬m¡|Ž¡fTi­+O»˜GÈ3ÿ\…�W–dkë$KËøí6r[³ñŒÅ¦äìì,çŸþSÊûÖZF£yžàûþSÊyžoHÒùOÉ3MS’$Ù2ÃcÌæä¢(¶òx£ÑxÒ[–%Ã᪪¶L¼¾£ts’$ÉÙ¢¾§'ZóXki6›Œoªge‡ŠÖ 5ú˜íܹý‘<•IM *-ÈEަª5ÌÏFP5MÑÔf¢]°-»s&‡CRc ÏqËË5°úŒy-m9<uŠä¶Ûðú}&.¾˜öÁƒxccß´�[Óžïxž¿Qʺ½Ø«ÛP‹¢`4JPJ†1½Á$M˜žšÂk4HÒ!R8ª2Ç7!UQ¢¥Â÷=lY!„6˜«²N8@mè´î? ! ¥u&£bƒ +PJR–ejF-HŒÑŒF””He°UIå ¬<<¥Ñº"Ï%8‰gB¾(‘Q&)½µU°–0Šé§‚N—1í±´¼\_SVàƒ6E‘Ñë¥HW»6>ø‚²*±•CJA5IÓŒÑ Ãê’(Ѝ¬c”%„˜¬ÌèƺM´´µ’hmÐJ iP*M’&uP*’ °1Š4±deVóQL'n“e ÎJ´V”eýñ„aˆçk\š‘ä#†ý5LP(ƒ¨Àx!ÂJ„4[-zëK4;Ml^2Jsʪ"ÉGàÎ8§æO35=“%žxïû?ƾ°ÊwÏ$ozÓïpèâƒ\{ÍuŒí`}}Ä;Þþg\ý>eyy(LÉÓ”sÏv³EUæìÝ=Gž˜™™å²+&øôgîäÿÕ÷aóuм¢(,•€Âà…SÄ㓼í·ÞÁ¿ý¿~‡ƒu¹êò+¹ë wƒ ˜š÷¹öÚ«ù©Ÿü1Æ»S³>GßÍd×§ÈÖi7C–×–1¾ßЬö–iaAÜàÈãÐ=ÿ</óÖß¼…W¼t–W¼êUŒ=:íýáž”ÒÑn6Ð…"°ŽuÏ Œ&OT ]qz~™Àô˜™˜/�eÑ¡z΢„fbb’Ó§Y]]ezz†²pX[2Ž(Š’©FŒ­*ÃBÚ-s8!ÃáãŒç¡”¡ÈkPi4J©Ê’V£AYU”yA·ÕÆø>«ý>½AH tf>ò‡¿ü%¢ñ6LLò¾O|‚ý_ÀÊꨱÆp”ÒïÑÏ­·ÞƃÞÏO¾áG¹ðü]|ò}ïá/ßÝç5?ôƒ,,ÇoG5h-¡·ñý˜,Ë‘RÒð¦ tÈ—Ü@Àmœ<¾Dè“—k„qAYŒÀJ~ã7“,­˜œéטo1ôRø>R+dQ¢R‡ÎÉøS;˜ÓÓ“-Ê|ÄêâÒÁÒüyV/„W–8>Ÿš˜±Nƒ±‰ Fʲ€N·ËéùŒ’>¥«" ,CÒã§¹õÓw°ÿàI–b”arlœ]看²%Yfé W1a@’g¸µ ?ˆIÒ‚tTЊbÏSâ•9ŸþÐß ûÜxýõ´¯¸”´L ã&hÉô…¹óS·Ð›ŸçÐ5WLN¢O®c*1JJó+Œ’A‡4Ï£çFr‘RÒl6¹à‚ xÝë^·U0=¥Äm-ëëëEA³Ù$Š¢'-|z½ý~!­V‹V«õ„Ð&û0l/ÆOxü&w}}½ÞÈò}ÆÆÆ0_ä³ÖÒëõèõz8çh6›[Ì’'ú-£Ñˆ~¿1†v»ý”RcÌÓvP>; ‹�ÑÙƒ×rxÖÕÆnR"žì!¡jè6²B¹Êá=—~MÔØA„ôY¿…jéN”šFï<ˆPí3¢¹j)±D¦—Z¡¼1ÛÀê36ô¾œœ@NN‚>ž«ÀÙ’bÔ£¬àU»k–ζ$À™ÛŒ1LMMñ²—½Œ+®¸â)WU«««$@@ÇOšÿœs$IB¯×£ÑhÐl6Ÿd_ÀÑï÷éõzTUEE´ÛíZ íŸ`Ên2aÓ4ÝÊãcccOhŒ¶IzY]]­¥Ã”¢ÛíÖfÈ_ã}‡¬¯¯“ç9aÒn·ë®·'�¤77®Æs³Ce;žR(©ñt„vQ$µÌÎY°:WaGkØþ2±Cê.b{óŒ«#­QeIÔïCž?ãŒU[UŒVVè?þ8îÁiïÝKç[¿oÏžm®2 ‹´•*F4›Mzë«c(Šœápˆ’"ËAø„Ú'&¤ù)q3DººýÆYA3 È‹aÉò´n£Wв¬Ö0¬Y`eY1>>EiQ8‡­*Š¢Ä˜ºPTF“C²¼À÷5®ÊYZ^bbbš*¯òŒªÀiÔö,AÐBù`y>"Ža…ùG0R <£Ü·ºuËs”«(Êša[È }W§ü˜ÞzÏ—a@™Vh£ÀA’¤H)‰Ú!E^±Ú[¥ÓCVŠ´È¢ž³diŠFÐË×I+M,&ðà W–xÍ 2 (,AeH=ÀA‘åxÊ#l†”e‰‘µÖm½n5 ÅhTÐí¤Ãeâ $n¤kÃ!º5N™‚1!e™ã9K‘ q¦¢×_A / à$R’ÒòÁ[>É/¾‘îØkÁÛßöA.¸hŠïøÎWðž÷}™{ZŒF%ó'szð8ÇŽœæoÿ=~äõ?€"cïÜ Ïç/o~'ÃAJDIV匵|ÊrÄÅ—_Æ]÷á;¾§$R•,1qƒ~ÏÒéî"Í ŸÿÂQÞö¶_æî»¾H» ¿ñ–ÿÀ®¹úòïæÞq+ KG9úØ<¿øŸ_Ë¥—Œ‘Ž–)³Ó“äiJš®x š¾OJ‚Ó'|y…&„“-Â&صeþìO?Âc‡—xÿûÞF™#M3’µ„öx‡ÒU zªµ%b©PÚGÁZ>ÀU9“mNRâN‹õ Œ¤bµH°¡¤W¥«"jÉ„ÇÎ×FfNñøÑãaŒ! Cš£,#ºã zkh%ŒÖ´[ I G2ê!…Á÷<ò¬Ä:ÇáÇè¶Û´Lˆ欭öYë^ÎDZrþÜNnùÿ‰§Kví?Ò›æ]úf^ý]wÝ}7^ôxÍ~ó<’á*;w´¹ôâï"Š {§ÏåÇìÿæWßò+¼ÿ=å;ÿå«Yê­uÇIóœÅ¥qCÓíN’g9Ifc†®½ˆÐ‡§ŽsôÄctÆké‰ ‰„4»Mè¯szù1fƒ˜")Y\^BÐè´ñ'› ¢ª ?}šý7^BEÉèä"³;=º{w†¥çщ"D Káa*Õgyiž±Æš]à„0îÖßW:$ +óh_"´ K‡?ÆcÇ3.¹©ÁjºÀ`m…}S»Qk): ÐFÑ‹±†£5òE%&š¦;ããËDÍýGïçÓ·Þ‚ËKö\zˆÎ5—ƒPØLb+‹LLpÞ9{xô#·b÷\€lï hvHMHæ"Í Ë‚x|Š¥ÕU–îs¨ËBJI£Ñ`÷îÝÿ¨Ýí‰ k-Y–m±Jž ŒÜ<þ«Ù.›:£OÄúØ<GëÚñÉ«eYR–åc5‚ íoñZù¬µ ôlk3q“Qúd ñfAöd¿aóœ¯. ÏÊ–À§ Ü ½UC<¿l6²Éª>4º Ÿƒ,;¯‰èìG’bÝI7ÿ×´:¯Â ^€P]økœ:ÀŠ +JzT}6¾M)Ϫ^¡^Kt5B‹ínÔ3ÆÆÇÇi·ÛOš÷7óe]~…|ãyÞ×Ì—›y¯,kù3cÌV¢ã7sòæÚÂ÷ý­.÷Urt›çH)·r9°•óŸèUU‘¦)Õ†ïGuä?qo›f¾Y–QUÕÖºBký„넯tøÉ'z·ã¹ž×¦Õ܉Êrœ€h‚öY¬æŒÜ…<M«u."ši¶î åee ­NˆMyœgz̳ {êöȄ֨¹9ÌÁƒˆññz]ðͬ¯nÇÏòºÀ¬[ý Y–ᜥٌ7’WUQ·Í¦Cò<%jÔVQµ¾‘@ ¤¦xTÎR–Übu*eƒÁpÈh8¬Y«¥ÃxUUÖ/…Rˆ Oϲ,±®ÀZ‹µ%y^ÿŸ8Ž ÖñLˆg$xšªTU­Ë*¥Â¹ZÿT)I’åg·ŠÎd8@EMD!Šaí¤V””E( Òdˆu’ÖZS”EQ`­Ã<Ïାoè­6ÆøÈ@#¥d8ÐîŽ#µ&K¨FÒ~t:Ê\f ~ÜAJETý%q#$¤dEA7êß“$ŒF£-¦”`Œ_ Æ÷†„¾AW;ÕKEs|–œº­4Û`ò•¶ I,¥rx¾Âó¸šÕ_UŽñ©)îÿâ}üö[?Îy/¸‚éçsÿ=_âïo?Ì/üÒwsíu716þ[<ðÀƒ\sõ¾ã»^Ágnÿ;Žíóïýæçô‡Ìÿû3?Jà$–n+bqñ$sûÏgçÎ=Üyç=¼ø¦—ñ‹ÿã­h9Vò"À÷Û4v´¸ûžGøÝßýC>øÏsâdÉ1øý?ø¾å[.¤Ê5—_q?ý³ÿüÛŸx!/yù,žø2qì¡„@¢ñME…à\‰–B+àdP™—LLìå¯þì½ü·_þK~ü ¯fïÞ`Wj9á“$)Ê7Tª^Pi¥At`DZ“ Zí6"p”«Bßc”ôYí Ip„~Œï y2¢’–(lú>§Nž B.>t1eUÐïõ‘D8O1ì'H!°Ö××é÷{H Ýn—Ñh„Vc$y^’g9ªT-q€6š TxÒ¡«‚én—±aAïðã”eÁy—]ÈŽó0^ñŠWsáSä–±±çìÝËÊò×Â7’o¸–ÇN ÃˆÈW|÷÷~?ñÞ¿`ç¾=Lî˜Ä â¸Aà7ÈËŠµõEQ઒²p¼ø.¿b'ŸúûÜ~ûgùá×?‡¿ŸFCcŒæ¡ï§Ý)܈Þz޲Š$âWÏ×”¶ Ýh-ÏÓ_]Ãiò=FɵÕÓŒïß[Ëj(Ã0͘=ÿ�'î¼?ÔŒ·hèE‰,‘J"•#ËSvÍÍQØŠ¬PØÊãØñ/’ô ^~͘rD{,DD™4Mˆ½_ù8%PÝI–=z«CÚb/hÌͲzßÜýÙÛ0BrÅK_F¸ï�£Åu\ÔdTIòõ>³­1ÒaÎô¥—bN­’Ï/¢÷ìÇ›jÒ¯j™‰8 ˆƒ‘…n+|Nf›m_oÄqü¬Ÿç9§NbmmÑh´aºøÄÏV)Åää$;wî|RÙ€íØŽ'¦üNu(z‹ˆª JäsÑcI*ˆÆ‘úB|1$=þ1+÷ W:Fc#TëŒØÏE‹°³>ª F#ÜpX/Ïtø>²Ù@ÇÊ—ÛsóY y_—©Ò×›óŸN4¯ÕlÖÕÕU¨ªŠ ˜››c||üë~§Z­§>ç=oºL¶ãcšµ“2}Œ|tmbÔY¬:¨J\¶NU­P¨!6¯³=hg0”1Äccäaˆ(Ë:W?cC^oåËËØ‡F9‚·gúÿgïÍÃ,½êzßÏZë÷X»æ®ê!t:Ý餚C”Iàpe™Q‡Ã¹***ÊãìQyÎ9/¨÷ˆG¯(P/ƒ Ê C'!CÏcu{|çµÖýã­"Aƒ­ïóôÓ»»jWíý¾ï~×ú}ßß÷»kWeï±i¿S«JI¬„*¬ˆð(‹”'¥$Ž3Œ–hSÇ#‚ÐCJ‡]B%½Jd" B ¤H©*Õ¢\©Èȳœ  Ã<Ï)A:.Âqpcô†WkT BVA>ÂລÒx„rD•"¿>R/¥"Ë\· yÒÆ`lç*ŠÌ’Ñì,RIŠ,ƒ"_ïöU¤b8®ƒëX#7º¡JJZ­yž¯¥ØŠN^ïd†a¸%„ÀšêÆiB­Þ$põ)T©ßžGžiʢĎF @–áù2 pA!+B¹RFY„°¸®¢,³uÿÁ€,«‚²zÝV ¼ZHgb!LYâ…5´.ÉóÏSÔ\‡,ͱÖA R „À Io¹ËÄ䬅¿xßg¹þÙ¯ä=ïù¯ìÛïð£oý¾xÇCèÒÒ매ù³ç!-ÏÒhC¯w’$†¿½áN~úmÿ‘f«ÅÒ¹scŸCÚŒ-s-î½÷ üཕ¥…“,,ôÙµ}ýÁ ÿñÏqÃÇoäÓ7ÝɃ¦X /}ñeüâ;~‚+®ÚÍéã÷8ÿù­/æÚgÌò¤'] _ø\zk§QÒ‚”¥AÛky–#…‰Õ’Üd˜bİÔÔU“«¯~>ÿá?Ãì–ÿ×O}Æ&”E‰Öà8®ëà>~‘ôzÄqBÓøa ©ª´ø-lc€ ‡H)©×ëXa2ßB£Þ¦f‚î`¥¥&''¸pçvŠB“$C”(%8sæ$yž266ŽïV›Så(RVdÕøø8i𓥯<ßÇqcí:N(³‚L ¼FÀœq쑇9öÅûqFÎ%Zº`pä2Ñᚃ7<‰ÃÀcÐëñÈ#0™šêP%cí6Ãñ3gØÿ’ï¡gRþü}Æ›àÍÄÉ€Ùù9¼Z ÏQ Ë+KD¡Â”Š,éñº7½ŽOÜúë|èCÅ÷}ÿË𽕥ŠZˆÄ°º²ÈÚà<ÞÄ Â(f¦&©û5r Iš‚¤«]„ãÐë€4ê &&&iwaÄZ·„ˆ8a0ø—Îo¥»à×B„®R¸(GŒ|²Ô09»•4´[5î¾û/˜€ï¹æ�ƒ¼ìÔ($ŒD¦²"hÖÛôW{Ä™¯†ëÄLû_¤Üþ‘8ü¥ûxÊ“páW€çcSAí×ÆÒ j`J†§–hmdìÀ•,Ü~?Ù#G›ÝF $ñ¨¶–ÒP2ÂÒÙT&üË÷–ÕÕU>ü‘óÙÏ~–‡z˜8ŽsäðQJ½^ç/x¯yÍkضmÛ?‹,ÞÄ&¾LøÕж`MÄ(áÐåw¬3™@à»ctÆŸBÏ nD÷ä͔Ø֮)¼VóÛòš6ñ-8®RbÓsöÖXlY|{_Tȉ ì–­$™‡:=¢>aP>›ªÕM|ÃHÓ”x€[n¹…~ô£ÄqÌÖ­[yãßÈsžóœoÈ¿u›xü`h2�rѧNJí ±‘6,#׎Ñ( jÎŽUüÈ&¾]¬žƒít°RÂÚÚã^eŒa´¼LïÐ!ŠÛnÃ=}šÎ«_MpÅ›žæÿðTá7•v­V[W­–8އֆ,[O›Ï2\·Kl·›øÃ‘#G \qÅ(U%”[+«Q£«|)7Æ'Yxtü¢". <¥J¬üYŒ© Ù¢(Hç;8Ž!ªÐ'S©Qƒ @ ¹ÆT`ò„E›b½HÖcé÷ûŒwÆð”";~‚ Š˜™ÛY†‘ÆXò¢@Ùêžg9B8c#ÚhGâyÞ:á[ub•7N³Ñ^Íà+Æ3jµEYºéyY–”º îz Ã$Áq"| Œbjz!»¦(Q') âQ‚²%®§0¦ (s@ãº>ƒaå\ס×_#ð#š­ Cž§¹A)Íødƒ^ZÐ_]"ÍrZ„ êA“²¨ü8¥,‘Ne¿ ”ƒ².×>óY|ð¯?Å ^ôY>yógùñ{>…NÆåó¦�� �IDATÊ%Iîºë~^üâ×25Ýæò'¿_ù•ç°eêI<óÚ—ðÒ—î£99Épe7¨ˆî8Y%/2žýìgðî?z?<ð0Ǽüe?ÄEÛwrêôaŽ?Oog>c7¯xųø®ç<‡;çY={„ñfÕµs80Ãþ+ŸGclœáhîê2±CQHé€a±h„8ÂE9ŽX· ë¦Dc;¸ùƒÍêrÉ/þæõl½ `áô)õFEò›’ÐɲåºÕ5(ªk5¨7qŸîÒ[´f” ©E5[B\ÇÁJC;l“Xƒ+]¼Ò,f„±š±±c6 çÎÏwк�4BÂÐÔUhއ"|¬­ÆŒ¢(Âh1šZ­…ï$ëÁf:/H CO%_Ñ–5®¸ä î}à$·}ñ‹Ì]v1w=Ì4 ) fƒn·ËþýWÇCn½õV¶ïØJžgÔëMŽ9Îøx›™¹)Â(äðÝ·qñÅò¾ˆ>úQ^ÿ†×’V–V‘a@£Õ¢U¤«P”,.Ÿâºë°÷¢qî¾ë gÏÓn7pÛÃþ ¾+¨5PuV‡]¶ÎnE8&/¨µäéò‚µå%:““„cmân%%QQ$)‚¨VÃõBN~é¥Ö z]¦æf<LÕdHËÖ”¸¾C³9ÅÊb‚¶Y[[åÓ7ÝÆk_{ͱ½Ò¥´iiÈuJÍkàx>õ‹‹+´f§©ÉV/PvOrÏ=‡8sæ,—ìÙÖ;Ñ  ×u&ɬäüò2ÓcM<k™ˆ&8rü“c-ÔÌ4Ǿt˜æ¶m%ô±¡On%Y\Œr<ß%jn.\ÿR(¥¨×êÌm™CPâ}-EJÇÜu×]¬¬¬ÐétȲ ß÷« ÄMlâ_vbq(Ñ@Å|G¿!\·M­})M79M?_„…[iXß¼�ñ-—äZ D‰¡U¸4Pl6£ßClŽ‹hÔ¡ùHô€ç"<k:3X³©RÞÄ7z9WB˜ÅÅEn»í6n¸áŽ;¶!4zÔ[u›øvÝà„ðñ£y¬tÈË5ìð¢h{püíúÜ�¹ée| ?ÚÊf7ë �)Áu!ª?Y£Qõø›äÈ2( Câ¢`mi‰ô°wÝý>brwçNÔÔTT·‰ŠX-Ë|½X¬¨BTéÅATã‘(ʲÀZðw=Äâu&'lj¢</QR ”ÅIYZ”+ð)U5N_”>6U0VIžg8NÂã¸.†JÕ©\I }\×Åq”#Ö_[J`tAQäh­ÑÖ 5hº0•l‘ã8QkÑxžC™x$+ Ž;ÆŽ=û ð”Ú)žH!È‹?¨Šgc :+7¼oÂ0Ęê1B°jU¨ Ø«€-áH´1>;ˆŠñ/Ê‚¼,2ÄU®tÇó°F‚ë¡_T¿K‚ã*¤-p=åJêõR в:BB’–L´[È(Âꂵî*yšxƒ8#Š¥(Ê Ïuñ”‡Ð)Æ”X BYŒ…Òú žþŒkø³?ÿ¿ðŽßFJÉ‹_ú|Œ±ìÜy­Žä–[f8rô,Û.ØÏ—?™_ø¹ßåè±sìÞý2 ƒ%ÍF(Žï!…ÆóΞáÔ‰3(<|Ž#Ÿ#×`€ƒÛ¼áõ/ã5¯}m¥ì[["ëŸG ÁĬ$¬.-"¤ÄsK>;/ØÉÂÙEêõ&ZGá¸×SèRcdŠé‚T‰Qº÷ïúÝ?A¹ð¢>‹lt×S”¥EH…!KsFYŒÕ°(|?�×'l·j5„±Ph”¸A@:ì3Hb¢špj ÑV!TXï9Ôë!‹çÏ2¬Qo4Ñe‰5%­VƒñN›,K †µ:YV’f#´.q¹‘ŽxžOÕp—$Ké÷Úà>C“fM+ÉŽ­08~šëžù,毽’óù€û¿tŒùÉ<òÈ#ìß9Žã°´,xå«^I= ùÀþ’Åóç)‹’oüó[·¸/~Þwsûgo¥»²ÊS®z2zÿ_ñ½¯ü^æg·ðБGÃ�'pë4ˆã‚(rÐÚáo~ ?ÿsÿ“ÿ÷Oÿ”·¿ãçˆ{Gh&¦ÆX<œ¹Ù” »#Æ[ÑD‡î°‡4š@*NÁs«BÎ =$I2âµ.F*jÂe|b‚f£A¯ßc,M6DÊÊ¢CSêQuϰ0hÂ`‚öÔ.>øßAÉoøÁWë$ÄzP#+Kj€a™Ò˜h1å9„A ×8äk>ù¹áx.žúævíCIR ‰1¤uèGµˆ-cdILé(¢Î4¶èq¶È¹ð 0‡NpòÞû˜ðaáÌævÌcU¹¾U‰ÑzsÓòx C.¹ä¦¦¦(Н­¸*Ë’……Μ9CÇLLL0==M«ÕzÌÀªMlâ›,™($¾Ã‰ÕŠ\U„áR¹ óÓ¤Ë÷Ó_¼¡%Êmà„ãˆo©ÿšÅØ!Vw …‹P“H67ü'‰i‹+@t:È©©'N˜Ü£Eã&¶‰o’X‡?~œ{C‡Q¯×Óu›ø×¿µ9DÑ6”  ¾D–-âºM\wìÛB®ZkÐ:!µ1±kµ1üÆÖMÍ'¢Z­*¼ª×ƒFþ‰;k ¶(0i q\=/ŽQ 㘅£GÑwÞIûá‡q›Mœ½{af¦ú]›ö;_&VÇ!MSò<CJ‰ã8”eE$J!ñý€<— G#ò¢ÀuZkâx„RŠf³¹ágjô:1ª<ò<ÁØÊ“Ukƒ1fP-Ö‰Ö)A u‰²+�«Bâx.¾¨ˆØ¢¬HT!D¥HÕ%QQ–qœ"…K£ÑÆ\’$%ËR„tqœJ–^–%ý´G¤ëÄ£cí1šã¤ý>…[ÈòÏ•8<Ïßx­–×j5²,[ÿ™¬’Ø`ÊàÜ’çÂJ\×#îp¼�ÏH)p·ú¾,%/sêqŠÔ'1^è2Ñe¬a8zc4YQ­W.fãxÖëuF£I’P¯×Æ õÖƒ8¦Œ»Ô<E-ªá9qQàHˆ¦ÌÉÓœZ£Æà8©FZ¤c@ FiB£9M«Õ¦4pòÄÞø†— ¿û»ÿ•ŸúÉwòŒk¯àï>ñ%†}M»9O»üï|˜_ÿ?Ása'”ÃÆZ²,ÅÙ0e”¬±û²gbM¥ü}ÕËŸÏŸüÙ ŒOD\ýÕ<ïùÏàeßû\'cÔ?Ú2=ݤ»ºÌäô$'~ˆé™ ¡¥×"­"ôì€éÉ9Œ6 RUD¦%Çj˜BP ƒ‘S„Ì]r ÿÏ{~‘Sç3žýÌ6V0)DáKËQZ­É`ãºa‘–š)4Òk5VOŸÅ¤)A£I¯ßcØë1ÙjQ”%Y^PRùûJ!ÐÆVŠÓ0ÀšJ}jFÐ¥fö°Ön¤Ž—…Åq<<_aLÕ(¨Õj �’$¡(– üˆ<ÏI‹ )*U^¢3Œ) 0tåìÑ£\ý¼ëè+I7͹úàAìHpà Ø’+÷_ÎÞ½{pŹsgyË[Þ‡?üaNœ8ÁôÔ;w]H{lŒµxÈÄô ÷Ý}Ͻþ¹|ò“7ñÁ¿ü /Í«¸òÉOáÄÑÃLÍn£7\@‹!£:¼á ¯äÝïþß¼ç>΋^ð<öìÝAàŽ1Xë26ÖFS’é’z§M­ÇÒâ2 ˆ¢�Yka²·Q‡zƒºòÐ+}¤rèŒOÒU.Y¡b¦'&ôû„G)âaŸóK ÈPPk”ø¡]oF„Ôâ‘ÃÙcGùÔ§?ÉþØ+ÙvÁ<ƒd…Èë û L‡-UP‹BVG#V‡‹„Òõ§?wÜù)¦wΰíÂÔ:S Ó‚Ô8dlo@Ôo¯‡Ži¸Ø\¯ö˜›¿€ÅÁ*¢5ÆÌEÛž]Â.,Ñï.±EnAX.c,1IRl®ZÿâMª víÚµ”ñ¿nŒaiii#Øjrr’Ë/¿œ]»vm&ðnâqƒDÒ² ¤•¸Ä@ |g«>„PøÞS3ßÅP׈‡Ÿepî3X[Ò˜{A{×·´àKâ%Òä‘3EXÛNÀ¦Šæq:¾¥¦<·@qê4&Nžx*•GCµ6±‰oGåæ›o&Žc.¹ä š4úzA“›ØÄ¿òÍ ×mP«M¦½Þ=DÑNêõ‹þÕ_IQtFë”zk/?½ù„Y¤í—‰Õ±1( D¿_¬ÿDí¢³ŒáÓÞy'â3ŸÁ.-1ˆ™)ñÌÚªÙ¤öô§Sö³q:'Tˆå‚X-Ë*¬Êu%ÆÖÖÖhµÆÈÒÏóèõz”¥& *¥¦1–4M¨Õ"”RH©ÐÚ¢ÖÇü­ë„…¡4)EQ u‰Ö•Ãó\”rȲŒZ­F’$QHš¦H×ÁQ‚j„_¢Ö£EQ ” VÁ’T“e1ÆT ÕG““µ®Ô¡y‘c±Q©p[ÍR Õè¾ã9 BÂZ~¯Ë™Ó§Ù·k'6K)t^y“ƒã8 ‡<ßE)µ¡N­Ò# ¾ç¡Ë*ͲÕláG!ñ(]·ˆÐV¬¿‡­-èhµZZ3¥¸BCQ0ÞépöìY0†¼0„­:ƒAJ«Ñ@Ê*´êÑj!I’ „À÷ý*EZ* ­ŽGVj:í&‹‹ 4'Çq xޤÈr<8Šnw IA³UC뜬ˆ‘V ‹œ¨6ÉZï<3³ãLM޳Úð=/úüÄúIίŒxëxýë_ÁûÞÿ¼þµ?B–ºÜyÇ!>ÿ¹£ìݳ…=—Ö¸ëÞÛy-ßMœ¤„õ:Úd¸ŽC( ·x†«¯~·Üò ÞóÇছ÷ñK¿ò¼êû^ t ÏpòÄQZ..‹ç×8v‘[oº‰K/ÛÇòRv£ÁÌÔ4I¢ C׉HSƒç)åPšmRŒ)0²ÍjH½¥q<Á erübnùÛ[øàß|Œw¼óµLÅÜò‰xùË_ÂÂÚ€vg¡mu.‚Çyz»ÅŽmóŒ–WˆÚ2Q ‘Q„k!K|ß R <Ïe8@!hø®’$EåOüh2é£ãH®ë~Åß½^—0hb­¨|V•Dë‚Á`@žçDQf£Íòrk-ív/ó­-“ » tÌXàKÅàÌ)žö´§âo™¥01“[æ9úÈq®¾t?—_ñ$Þõ®?àû’£ÑˆW¿úû¨Õ땺{ÇöîÝËÌì,þI–2ò|ö<érj~È Nxç¯ÿ&ùйñ#7ð¢×¼š™¹í¤k}J«éŒu" ­16¶•w¿ûxù÷¾ßþí?ä/ÿæO9ýÐLL‘e«HG"ý¡-ãI†Ã!Ö® K¤£—î¿bÝòà eE,ÇYJ4ÓÄ7•5R±{÷nÒ0Æ”9ö$í‰YŽŸ:LQdà/¤ÐŠQšÓjOò³o+wñ¿ðŽ!ÍRJ¡¢µŽ @bÑ ºk„ž"ð]œáˆ³GsË à)×=ƒOÛ‘ŠAVIé‡8Öb´Æ‘¥SD‘cM‰ë7ZM&^[&·‘ê„ÙË/åþ£7Ÿ[âŠý—"j!&ΰVÐ]ëcŒÞ\µŸŽ"cccI¼EÁÙ³g9·pŽápÈØØ—^z);vìø*€ååeèv»ë¡v}óÕé¿ÿøß­V‹ /¼z½¾©‚ý÷H¬ —0˜CÓ'Ë—QÒÁQ³ñ½QÂ¥ìDuRd<"^¾‡xé.¤ ”‡Í"Ô㯴±@^ I’5Üæ¨³y‘=ž0Ýëa†CDà£Ú­'‘)„Àj Ðkk•Ù&6ñODçÏŸçî»ïæ`jjŠ}ûöqèСǜdyyž³¸¸Èòò2½^ï+¾ÿë­ýÖZ<ÏcëÖ­ÌÍÍU‚‹ÍfÀ&¾‘ý‚t ‚i„0Åqòü<IâãyS(õ­nø—X›Q«¤é"ZpÝQ¸¥6ý‡Ÿpˆ"l»M–總^ž?¶‡¿µP˜S§H3áç?X\Ä-K”ãP¬®b‡¶ë"¶oÇÙ¹“Ú•W]tѦRõkÕ—ƒ6š4­Æòëõz5.[’$AkCÖˆ¢€Õµãã“X«×½Y›ÄqŠÕk ÖJŒ)ñ<Y™ÛRã:^ìHáP)Ôúÿ—äEŽÑß‘ë£ÎJ)”t²RóeYÆ(¡0t»]¦§·à8½n¥<Ï¥^k \IY䔥F)]j]©p×Eù> ç8wöû/½„2M)ËÇ„•¥­‡Ã rØqœ ÅíÊòZk’4űùåû….Ñy±~C¬:Ÿ•õlEŠjY#n�µQ£ÁºQ+¾à¸Þ:¡m°Ö •¢È+Åo„ë¡*%Æ@àE¢ ¡ïÓn·!¨B—L–!”çºH×Gëœ"¯ÎŸR¥É1‚0”% 4ÝÕ j5—‰‰€Åå.wãG9úHÊ•Ovp•eÿ•ûxÉ÷\Äûß? <ûºËùÕ_û)Œ8Ïoþò/d%_Rú½33³H‘ãy×\s5ï}ïïP&Ë<ýû¸ù¦¿áE/ÚOž/“g«4k [ÆH·Ž-K&Æ;¸žÇØxå#‹k=\_ ñ0VP9ÖPà{.IW×E13?Î`x ×ñð\—S§Wyýü<í–Û~üûYzøVn¹á¯Ñ¹O§Ýda­ÏÖ­;è.¯ •àWå]|ÿë_ÁDgm,V)h¶Ÿ$ë­6LŽG³VÇ…E¹ é:„´ hmð=—Pú,//S”%E–mŒ%iÊX»M†H*å©1 uŽÖ%P…ËÕj5¬©‚ÍšÍ&J¹­©G‘7ƒð Š×è(‡Ó÷ÜÏ™¥s<õÀ•˜fD¾6 ë&´êmŒÎ9øä«yóW˜ššâܹs~ø!vリzÑi·)Ë’Ñ`@§=Žø˜R'íÉŠ4£×qñÞ}œ<u’?÷ñº7¾zTmѱ¦7X`bjžµµs<çúgòÎwþG~ö§ßÃÿü½ßçM?úCäÝ343 ‡Ëhe™Óv¢HšŒ¨Þ <|[T-"އàÕð1X,e©ÑYŽ.µ éÐèŒ#Ã’<á”M–Ö–Ø}ÙE<òÐý™EÕk8Q‹vs‚›>ýi>ò±¿çÿøWÙ»÷RΜ=Ž˃.(‹ñ%5¿FººLM;(+8tó-=ò0￘Ïy„u¤°6 Ís\a±Xe‰|…2Eã 0ºÀ *7‡²—SD57ÃÎë®á¡þŽ«®¿í{XãsæÜ §O ¹ì²½›«Öã¶I•_÷kçÎqÿý÷ÓôÙ¶m;wîdvvõº³GåŸüwßu7KKK_á'þ•{—/Cø¾Ï¥—^ÊßøF.¸à‚Ïÿ&þA¹ˆæ6ŠäÃÑq<-i4¦¾ã‰ÕGá7v æB:ŒÎßÉèü˜rHkÇ÷àF_ý>-c«{ú7ôF"Å?ø]…j67üß*hp]Ôä$Îô4≠Z›ç”‹‹”§Oc×'Í6±‰¯‡••î½÷^î¾ûnF£O{ÚÓ¸âŠ+8}ú4§OŸ^¯­¾6’$á‹_ü"ŸûÜç8tèÝnw½.”_µŽk­7Ö}c “““¼ô¥/å/x­Vk“XÝÄ7ºa@ˆ&žͦ!IV  Ñ°øþ rÃfçñ\û,Xƒe„Ö‹ ÷`Œ$.& ·¯“ª›kíaˆm·æ9¶×£™eø_gMgqsÿýØ{îÁ ‡È¿v–(è;‡Ôšz³‰71˜žÆ™Ýœy,b,J)„•g©Ö$IŸ ˆÀBYj†Ã!I’�?ð9¿°TyG G!ð¼�Ï )uN6Hp\— ð}¥ÔºÝ@¾Ql !*•êz¸•P¥*…Ÿ€°(%76%*Åh¥dnPæ)aXG‡ÊC@QU¨“1)-B¬?_[””¨n(KŒ”Äý§ÏœfßeûX[]¥íûøÂC–eDQ„ïùùeeaEtU#ùIÍfsã™4Á÷BÇÝ(¢]4˲¤Ì2×¥4%ÆÑ•¬ë@©)‹‚8ŽÁ<ÏE¨Ê˳Hë ·’²Ô8Ê#¥ëÞ³ ‹á¸YEj{ž :ÃÚ’tãÔÔz`X#*²Ñq°ÊÇH>R ¤òHJÍÄT‡ÃGäØÑsèÂðû¿ÿ—4BøÅwü:EF-^ø¼ëøÔÇ1öížà÷þÛ/qÉe»8|ø3,¯$ 1ž'ñ½ˆfc’4ÕH<<Çgÿþ'>t'ÿÇËŸÃϽý·öÀfD¡‹çxØB“ç]j¦§g˜Ý:•–,NÁ*FqNžåx^u½a±ÂP9Êq�…Ö†¸HÉÒ„vk’Õ•.SÛ/ãÓŸ¾«züè[ˆFS°l2DR’Æi1`jf–aˆãø!3Fëv ‹ý>£aL«253ÃÙ¥˜¼@¸R‚E`Œ¦Ls¬S)s!©øk‹pJ:$žëb œ<qŠÎx‡‰ñ jQRx®±k«ù£V�Zk ã)]\×$iœ1ìv Æj„®K+ŒsÍÉÄiEÈvˆökuX\é£ ÃùsçPJñÜç>§²Íè÷8yò^¸“(ŠH’„ãÇŽã>—ìÙÃ0ÉX®’Ç„í[w Ê’ $ÛvìäüÂô{ÿ7ozó›Ù’úXñ¶Ïù³§Ø2¿“^o×½þå|ô÷ò#?þ{\pñ.¼’"îúmRY`%¤ƒ„´ÌñÖJúç—©y>áôÝ"㠋ʲD‰ëù(<Ò<ÇoÖÈ•dáì9¶^¶›<×8²`°zŽF£‰$¤,'ääÉ“üÔÛ~ÿO¯ã¹ßý–ÏR÷ëŽÏò`f»ÉòêQ½ÆØÜ6z÷=Àíû(Æ–xúS™ÝµÁ`•d˜á…u„ã"­&Ë%ðüê溤,-74HOá ßò2£°Šao…hçQ§ÅÚ‘ŒíºÂ&žS°´31»{sÕúW€±†3§Ïpß}÷¡”b~~žíÛ·366öUEP–g¬­®qÿ÷säðʲ¤Ùl255µ¡nBÐívYYY!MS‚ `Ë–-lݺkí&¡úïB‚Qæ.i>�Ùø7U¤H'"»‹Á”1ÉùÛž9‡ê\HÍQøþäW¼ßa1d9]¢0åc² .MÒñ;tüuUj™#³U|£±á®m^_÷åºNbV‰±%¶(xB˜šZª=}’ »]l¹©XÝÄ×¹\¬ÅZËñãǹùæ›9zô(;vìà’K.aÇŽS_ïùZkF£'Ožä _ø DQÄÄÄ­VkƒH-Ë’ÅÅÅ ë®(ŠØ·oišVµ÷æÚ¿‰oêì!e› h]R–§I’1v ˜EÉ1àqœ~Ò%$Ëäf‘Ô,¡MŽçN†[pœÆæ)y¢"Š0í6eãôû˜¯£À·Z“?Nrÿý”Ã!bËÄÁƒ¸»vEúÜ9džS«×QÍf޵‰Ç&V‹"Ç÷}Â0 ÏJŠ¢Ä÷}|¯òùrݪ(TéÛIšº,ÉòÏs×™Q5šª|$uA’Ø ;!anŒÓ{žG’$ž®e™á•ežHið<c+u‰cÄ:¹êúíV‡,+¡Õ#Ïs¬…8âûžïUP–)-®ëP%cÒóH²„zˆ§\u:!•ŠBWIìúñ)å†r(­Hè¢Ì«×V–¸®‡ãX £Ñº$Žc\ßÃu\”ãT*JØ È¬[u.4äYŽƒE¬/ÂëŒ<Ë+ß[åaLU|û^ˆëúdYŠ4 å¸T¶“k¼0À`°hL‘#¤ +Rlæ“[,-‰ÊóNˆÁ‚•Y;)BÂÀâJ¾ÿÔ¹aÿ“æ8zä ï|ç+8ð´g1X\dyag<õ>ü‘«ùðßü-íNÆÖmËK£¤&‰% KËì½ä†ýU‚°Iž¦[EQ»ÉëÞð]Üqç§xÝÞÌùõ_ãÈƒÇØ³g”%£Q Và»5¢0 Í3Êl€U×õ(rëZ\%ñýŠDϳ¤RIæ9´Cžg¨°D„iê05·Ÿ¾ðÿù'‰7ÿðËxõë^J‘÷¸`×eÜå|šþ‰³L=ùjúiN½Ö`åÜ"3³[˜ßÚá¡Âó¦¦gqK¥F(Ižfè^†H©@ZjaÂd$²Ä•®u¡4U8!­Ö®[…»•…¦Q¯#¥ƒµ‚<«ŽA½9†_özª¼v-ƒÁ€á`„’.Aà"DeÉшêäJ°Ô_cJJìrP*¶\µ1Qg9MhÙ:nIç*¤”ôzk8ŽÇÕW_½Ñè÷û„aùùí£)’×J:íqò¢ Ô–/>p?;·^€ãäZóòW½†ðƒ~è—=åŒcY[;ÃÌtÇ1tÏŸ§VŸãOÿì]¼àoà-ÿçÛù«ý1—\¶›ÑòI–úêA@à ³ ¡5‘ WºkQžÂ"„ŠðLŠr”rq]Ÿ¤´åb#”ëT R+(³ŒfS‘“05µá@6¶Æ)ßÿÚ7Óuy嫟Ï:+N«1FÚ]dªîá`P^’qô‹·pâžûžÏUO½–ƶ_±´Ú%NR<¿GT q=‡(•R’$¯Ôù^ÔÄÁ@g¤Ãe“v×ì�� �IDATBÛÀS-\áQ7†¡£0¢ ~áºónnÙAQ+hŽOæ9é(Æ«o.\ßjŒ†#Μ9铧رc{öìazzú«l��¶ÎoåàÁƒœ8q‚b}Báâ‹/æàÁƒDQEîH)9tè·ß~;«««ÌÏÏsðàAžõ¬g±mÛ6¢(Ú,°þC …RÑz38Aµ`ùoA{7RD¾Àpésô–>C)õÎUH"¬¥´%Ké"÷"×òk ®ÙŠ¢Åb‘BqAý|壤‡L‘ƒSøŽÁooG:›6�7w©ÑX&K±‹‹” çŸ$¦£¾( 6’n7±‰Ç@Y–¬®®rß}÷qÇw×]w;wî\¯#¿~³àѺp÷îÝ=z”cÇŽ!¥dË–-\}õÕìÙ³g=ȸ²üºé¦›8vìžçqñÅóìg?›Ðjµ6×ýMü3 €Q´×uévïÄŒpD†òAÛ§ÚCH‡o¶YkLµ%XƒÈ‡ˆþ ²r‘X4ZW†[Qj³qù„ÞSF´ÛˆnÑëU«µ¶gñ#Ð;~œ|zöíCº."ËA@sr€lªTÿéíˆÅ ë^¨•·cž—•úÒX\×G ­s¤t‰Gñz±h‘JÐlÖÒ4]/Žr°Tž­Zë IÏó*òk=äQ’(ÍS”/1ZƒÜˆU«1vD¬F+ 4Ö tYVã÷^„6%¾ ”Ø(h‘¬{Èjú£![·Íëd)Žríµ×Òjµ 5òá�„Åõ<ÏÃu]„ëäo XœuïW£ Z@–¦„aTP‘bØG·³N¾j¤”a€*Kð%©‘ÕÏ@cpð<!¦,Ió„T[\GâØÊ?ÖZ³®È­R…pÖE‰µàx^àRä B‚ÑÇQdIJ{r dé…H¡ÐeŽ5’B‹êœ9>”yQ)^C/dÐù»oaï%ãÜxãû¹÷žOpéžk ‡ðåcÍ1r#Øqñ<ËKGø“??æ¯Ðí˜g|¢Æ¿pû¯ØO<â9>NèÓëwY]]¡¡KÜÏŸü¯¿àõo| /{éKøäß}†k®½–•“‡i4Æ‘VP”%i’É I6D95”¬Ò²Oš$ º}ZÍíF¬D Gå¤:¦”dm²Ó¿üÎwQo5yÙ+ŸM!V1q«Zá8Çï½™kžÂ{ÿð½<ÿúç²{×%cñ\Û>”Åóçh®7 ô(F9ƒ~Ÿáò í™´.ÉG õÀÃó=zi ÊA: Ó’B[ J9$©ã8ÌÌÌàºîz0AT¥ªÐ8)ņêÛ÷}ÊÒ†Áúb¸îù;JQž‹.-‘r9~Ï!Ê8¦½uŠc)0‚†QkÔXî/Ðëõ˜žžbm­KE4›m¤TU3%NjQ„²‚³'N3½m+^=â–Ï~ŽÓgOsààuÜsÇç˜m6ˆDÄÓ¿û…¼ç7~ƒÏþ>^õïgjj–¥îiü¢`ë¶YÖV5VHþø½¿Çõ׿”úá·ñk¿ü6žþ¬§p‘œaX,ÃZJÔ0VCY J‹çº¥˜Há; é{¤YFœÄ¨u‚çzèa‚p]Š<[5šä"E¹½µ.íöÅt{oûéŸA©ïû‹ßbf¦Ãh°„.yap‚²ßEô4Q}œ•æÐÍŸã’'íã¢kžŒšaõÔQtf©×Æ0z€.Sz«0†ñ‰1jµ&YYPhE^j|ßC9>¹,H³Œ ôÁÓ#p%xõ€ÕÑ2ó”§úБS,/âYÏ=H}ÜÛ\µ¾…¨|{Ü{|8qc »wïf×®]4›Í¯ùœ‰‰ víÚE§Ó!Š"—^z)Ï|æ37”+Žã$ ·ßv;®ç²óÂ8p€«®ºŠZ­¶9 øïž7A£q1y¾Ê`ð0Q´ߟþ7òî*Ox·¶…úüÓža°ö%–¬Ë)#1nÖËZhšµ>!!áW•ƒ%%11ÁÐ y û�A-ï1–÷h9“Dj !6 ¿Ç#ú¤¦Z[U{ 51ŽøvW(‰êtpææ(ΞýrxÇ&6ñH’„Ûn»C‡!¥d÷îÝìÝ»—‰‰ –——¿Á{¶Ç\Àüü<µZ(Š˜››ãꫯæšk®ÙÉ,//ó…/|¥sss8p€§>õ©lݺusÝßÄ?{M­l8Îjµ+!¢â‚tô)8m¨Ï‚ò¿AnU`LIšž!IÎbm‰+õÈÃc!| Jmª;žè𣈠Ý&Îó¯O¬æ9¶ÛÅœ=K¾¶ÆhûvÔü<N‡0 R"6ïSß±*¥¢ÔU°Žã€@â(‰ï{¤iÆ`8¢Õj#Uƒþ`z-"/–—×PªRf5š!Žr«Ñ~!ñÝj|¿Ô]jâx„çy8nå%F!õz;2(J£Bá(!$ÚXŒ©Fï•R¬Õ`K´.ɲœZ­Ž–¢Œñ£&67Ôj`(Šl}t_âH…Yê1ZY«ˆ­2'ÕŠœƒW^Awm•Áp@3ð)ŒÁw<‚º‡#%….Èò”ÀóÐÖb•ÅZFã¹P iY €ÀQÊ!/ „­‚PвÄQ.®à‡+Jl¢±Ò ¤‹ÖHL)(G#Œ2X×Åàâø!²,)Šé¹kIÒ-@”€à€§\ŒÕ«)Ʊ c=ŠRãÈWØR …ÖŠ8KžÅQ é*´€8±ë25·“÷þ÷ÿÁƒÇàß~-Í\qù…Ók(ŠUƒó¸AÉò©­ìتˆ}Òx„;9Á¶ùIî¹÷0£8Æ]œ eÔÂ&äG<êÒˆ|ήrþì ×_ÿ]üüÛ†R F?(4Zh¦·O’§#ò<[÷0tVAi°¤thD-ÒQF–äÈ–ƒÑ«B:„¡OœIÆç.翼ó7ùЇïà¿ýÁ+™Û2ÎÊéócØ¢Ïå×äö?5ŠÛoz„Ã÷ŸäüÑïÐ]pÙeXZü8>I7'Ö=„И�\O6È ÂÏ5#‘‘kMY$dÃÒ÷1¾Giƒ”וX$i’àùe¡ñ}¿j6¤Ãá!$y¡q]S‚pÖUàë–¾_©¼Ã>YZ …¤Qo°¼¶Ì¨{mÎ9N0ÛAÎNÐíðd„¢òl JÆÚ“tÚS$I‚­æišR)¾ïa±x~¥Â-JË–ùm4&Ú,œ;Ãöíó<íiÏâä±SÌÍo÷ †¦Wã§ë]ÜuÛ]üíûþŠÿÀ+iø-FiÌêâõæ,y^²ã‚iþן¾‹·üÈ;yÁKÞÂë¾ÿy¼áÇ~€‹·Ïgk8 Ÿ a1ñ�o¢ÆDk„5°]Z( yV¢sƒS” ÃÞ -§Á _päÁ^ça£&È冴j>ù±›øÁ7ý,3[ÚÜø÷ÿ͉ƒÁyFØF³ºè^ßh“=N|üFŽ?ÉÓ®¿Ž‰§�]úø­)¬¶¬®.Ójw0EA°Æh4$Ï,µš" j8¥ ,SŒ¶Xa‘J¢L¥ï§Ò,%Ò>à8!át“ÎÜǺ—©l™žDº½µ3ŒMn.\ß*XkY^^æöÛoçÔ©SÔj5öîÝËÎ; Ãðk>§^¯3;;»>Ù hµZìØ±ƒË.»lƒXBpë­·’9pÁŽ Ø³góóó›}¸n ¥"Š¢Çpx¥ü0&ÿoCÑ$ÝÑÌd¯ý!ýÞƒ,XKL"݈ȭ3Q›`®1ϸ§ÁWôèc­e±¿Èùá9²²O”ÇÄ%àNØ:ŠÍqµÇ%%©M)²!‹3>3=óíO’²Õ$›žÂöû›n›øºHÓ”óçÏsË-·pøðaæææ¸êª«Øºu+µZ¥¥¥o¬x^Àìt:ëvx333ìÚµ‹½{÷nì'Nž<¹8<;;˾}ûسgõú&9µ‰1}†”>µÚÈ5lï8Iv†”ÇDX•R:Ö¾ bµ MÏÇǰÖj­]ÎÔÿÏÞ›GYzÖõ¾ŸçyÞyÏ5Wwõ”îtgìÈÌp @D×òŠzôÞ«W=WP.Ë£"Ѝä�g 28� '8I ’9«ª«ºÆ=¾óó>÷wW%a’‹Éâþ®U«WWíÚµ÷³ß÷¾¿ïïûÅ£ÁÈOõ^Pk4Èý¾ŽÙÊú:½ùÂzm #E«…=;KµÕÂsÝÑ@~7ÄjªslYú�ZÊB¹!MblËÆ²‚¡ú3'Jz”Û’$˰mU+}GmÛÆu}úý>ZçÛ£–)ŸSY©$a4 R©¥)››<øàý<õiO%Õ¾[Ú¤‰¢µzc ´ÎÈÒ˜¢(U£žï ,CaJŸÖ,‰B]¶LåYù^„$3)‚"+è.¬àMY6¶mãcaº]l4©í^‡Ôh*2-ƒ¶ C’FضC˜æFãà&Y–R­WÐ….}Rå°õWQX¶ñ ‰�|×A ›œ‚L äÈ$Åö •a1½wõúE–ã{vÅ&ÉsŒ(Т Î24àyB•íÏBH°@šT硱¤$Ï%žßÂrrD(ˆ: B*Ò,¦ðŽ” :GR˜Œ<-èô45š{ùä'®çÿä}웫óS/>Z¬°º¶ÀlkŠ(îàûËíR«51F1ÖjB^A5ª^éúÌgþ8ÿü‰kÁ‚B§ô»ž3F–d8Ž"JÖ™ÝÙ¢êKú‚Æø÷msû—¿Ì¥—>…öæi c«„~¯O–iDa#…ÚÆÂ%M3(@96–%Ù1µ—$ R\ס eÐiN­²Ÿû¿zŠ¿|LJyíë/æÕ?û<¬, ʆ:Bž!³¾vì$O?>Ï«¯yïù»¿¡=X!hÍpðÐ…¼ÿ=¥»¸A£Ú$R*“DPmUéln2– ,4$ƒ<¢H#[áÙ6y–b95”’$Ù€$Ȳ !$J ²TÓno"„¶\×£ÝîÒlŒaÛ6‘¤LƒŒS|ÏÃv,¤1:%‹Ø–øœém²Ò=Ã%³Ó¨NS÷=Zç íYønºqÑE†W·èõcœÜ „"‰ |¿Â#ެ®®bÙŠÙÙ)’$)}{¥ j¬œ9IAF‘FŽ/!dÄEOÙÅFw)vïÞÉÅÏx6ª(¸ýÓ7ò¬]Wm’F}¢p•¼pÈéðÃ/x&×~ò]¼ýÏ»ßÿO|úÚÛyþUOaii™Kžw×ÿúk¨ øÊ‰‡8°ï,@d²lAß­R¯aûUôæiÒþ�91Nuî uwzÓ" lLqü¡eÞò¦ßæÓ½‰}ÞAþèÞ@=h’õ2Т¨CgpŠîÒ<—^yñý÷qÛÍ7霋_ø\&öì%îm ±@ÚHËEÚ6ÓÓr…!¦ËôŒ‡”Žë礄©±1‚n·OÕªÓ“P­×ˆãÇU(ßE‡$ C1áÑ[;žd'½žÃFSqG›š'šX]__ç¶ÛnãÌ™3LNNrèÐ!vïÞý-‰UxD麹¹ÉØØØösAÙ]Ñï÷év»c˜œœdÇŽT*•Ñ€ðè«oxÍdÑÚ@°ž$ïObDj"žò‹4O~ké‹,¶.Ä™}û[ç³#˜.ms¾)jaÑ A•*hUZ춦iwî`yµÃÂ’„09)¾ç|ß“ >R×Ù\êŸZÀLÏ~_´ÜkcXH3ŽG1SyΞQkõßf}?uê·Ür 7ß|3¾ïsùå—så•WâyÞ7X�|'múqÓn·1ÆÐh4ð¼GÒƒÄqŒmÛ4›ÍaÐìhráñæXkˆ±³ ÌnÜ<Evûdƒ6w‰˜ïÔ [I4˜˜8)[ÑT9#RõBh4`u67a0ø¦NŸ¦{ÇDQ„{ð ­ /¤ºw/Žeò»ÝéZ¶ƒ–e¡uA¿ß¦Å—­ÇaØÇ˜‚ ð‘RÇÑvõM)E­V#‚m3pÏó°mg»Å!Iƒ(ŠÈ³Ïó(Š‚J³ÉÒÒwÞy'…)}FÓ4%ËóÇtòDQ4Tü”ó‚bØŠ_úŠ ¡pcQ”$)ƒAH§èÜ`)ËvH“¨ô·ORìVÛ±‘R¡óÒª@Y ×qJ?T Iœ2D(iƒ¥£å"x^@TéõBâ$Z)hÒ4ËÃÖ~!J‚Õ²QJ–á`qŒ×qʰ%À²m„¥2Ñ ­I’5 ÷J’„ÂÛ‰“f86ZçDqDžçDaD’¸Àµ+õVAÒG˘BÆ J‚<L{xUay â#=òÂbfv7§—Îð¿ùÇ,/k^üS—pÁá‹él¬Ñ¨×ÑCKƒÆ¶…ÖH!h6šø~…¢0H©(´æÂ sâä<ín×ÝjEX–Màû¸®GàWسç�ŸûüçÙ±{ÏyîS¹îsŸAJA£ÙÄrìa€YÔe+×ñB’Ä1J úýY–aLy½a (†ö Jâ¸.®SEhÍ›Þôf´Ùà7óõN‹£Gç9³²ŽmrIß÷¹äéÏãÁ£'8ï—sôxÊwÞ…c;œwø q’qjá8Õ†‹T§}êãU¦gw°¸´ YFž&¤Q„~¶yšS *ØB‘äåµaYišÓï‡ôûÒ¤ôf´,…m[(%°,‰ï;H Zgè\ÓétX__ãôòâ¶Z)‹j­AµRÇu],ÛÂz†Í£ÇØèv˜Ù·‡ùùzí^¥1$ƒ4¶#(Lˆí¼ý/ßÊ;Þùø¾E³Ùdff–³sض‡m˜Â¦?q-Asl‚™é9’LÇT«.÷Þ{7Ý^ÈôÌN¦fv'}ЍÇùO¹s/¸Ûnº™ãwß‹]­âIA£ê2ÕªÑÙ\â¼óÏãÿð7xïûÞŒ¦Ë?~ô³|íkwóùÏ™ë?s'¶3‡ëï >¹‹8Ë ê>‰&X|x 4¹+˜Ü· UqPM?çZ>ô7Ã/¿îu$ý¼ÿý¿É_¿÷-4wŒ&zq‡^·]h¼(&<½Ä 7ò¹Ï|†Æä?òâk˜Þw™Î±×+­B¤”ˆ”TTšã8ŽGgä,ÛÁqÜíùËq,ò,ƶ%žkãûÁ¶}C¥ZAëò:ÑdyAsb†~Àʉ“ô6Ûô»6¾C5ÅßÂ0duu•“'O’ç9SÓSŒ[Ô<Ïé÷û ,Ëbvv–Ù³Ûv7yž³¹¹I·Û`ff†={ö|Kkþ£n†%ž7ƒïï&ÏSáIŠ"{2½CÀ&kVÜ›bÌm1.0±q7Íþ<Õ<ÁÅB¡¾Å3ll\\\<jV1§E]HjGejœ(0œO°š¯RPŒ.®Ç cTœQäš¼ZE·ZßsŪ”’F½ÎT«…Ÿ¤+«ç£l„ÇðZÓív¹ë®»¸á†°m›óÏ?ŸÃ‡³k×®ÒÊMÊí@©4Mé÷ûùol…-ŒË¢iš¦4 æææ¶×uc a²±±AEÛVSSS# €ž6œ ÊÃñ&QÕ)d} Ç›Âs§p¿Ã/Ï›Æuwàºs¸î ŽÓBŸ'O÷É?Ïõz=")1ò¬O§S~•Ócç±õuÒ‡"/ ä¾}³³Ž3š£þ°J¬(£„Äu]”°(´¡Ð%‘—çš<×lU<ìa"XQE1T—ªmÒ¯$ÂØ&`¿þ@*¥dÐé°wï^ÎÚ¿Ÿ$IR"¥ÿ”Ĕޯ¶m!¥À`@°íW·õwò¼TªÚ–E–k\×Ãq\²,' ’¬O@N½rõ󞇵ÙeÐô°”²fø>ÀÇ_Ô˶øAˆçENš¦~•$ ÃÇ‘x®OE€¡úÀæyNQ”þ—–e‘¦%á*„@ç†(‰p}3ôÓ…ÆÈÒ¯G÷cÂp@¿Ó¥Q Ïs”c0Ã1@’ÄÃ4ÉG6J(%éõ#|éãz˜‚3gNÓ¬zÔ›>aܦ96ëtú Q–¢S›A3>1ÍÆF‡é¹ý\ÃÍüÖoýÇOlàùðâŸüqO<€å¥¸B’Ä Bj’´@A–¥ \|ß/Í’ÏsHÓ„]»v ³„%8gŽJРßéâ».aÆ!®SåùÏýŽòÚ_ø^û ¯á—~ñçu?ÿ3ŒWRgåû£P©PÒK‚ÌÑyN¥êãºR \×F)‹,K)ýƒËëѲ=nùÒí|ìãŸá o|%»v羚ñ{¿ÿî¹€‹ŸöëÄ]ÍøóXýô¾úÐWù?~ø‡©¶Æùà‡>ÎsŸù“h“`¬¶W±Ç=Ü Ÿ”mrês»¹ïÄ­¤Xöp\¤(+àDaŠR¶åF1™N±”CTÀ”›°R½Z¾Þ$)†v1R „øM–+„,¸8ŽÑYïIlËAE–ZõÂ$½<AkÇf| «ßÅvÒ8$×!Rü@R˜ˆW¿æeT«-Ò,%Šúø~… ðÃ%] ­©ÕmVV©Õj¤IÄYQ09UåòË/A Ÿh`(LJfr\Ë£Ûé3yö^ÖÚ§¹ïÞ{iÍLÒlµÈÓŒ\º`sý$Ø?þ¢+ø‰{?ÉÛÞüWüÃß_ÏÉc\û‰ð2ÍòÂ:—?ïùx-"K“É*qœÐ‰}¦ÔYZCxD@&«"è*o{ûG¸ñÈC|å¶UþâÏ™Ÿù…×B’eÚ½B ýlóœF} %šxë|ðï?Ä%—_Êþs‘›…ØÕ*Q’¢¬rNÓ…-1xh„( 6I’‹TšV«‰çy¤iŒ¡Àqd©�V¶%å|à8e‘;)è1½ƒ™Ù]?>Ϲû/ <²4­ZOÒ4em}……Ö××i4ìÙ³‡jµúm7ƒÁ€µµ5úý>Õj•ýö³oß¾íu2Ë2VWW·U-[Äj­6JTáÑĪ"æPÊ¥ß{€~<£v!mä“CáT˜‚8OYi¯3¦&˜š¼kùK«w ¤Ejy8­ áßPKˆ¡rÆ1)Ec| wÇ ëZóðàa&Ä$;«;™8bäMýxQã†Â²H›MÒ±1Ì÷šX‚é±Áä$ý$Aol@–>¬¶±2Ün·¹çž{¸õÖ[9tè¤V«1 ¶Ï³ëëëDQÄ`0 Ûí²ººÊêê*Íf¥TÙ1(Êüv»M»Ý¦( &''Ù»wïc ¦ƒAÙù†!•J…]»v1;;ûMC0Gáqš¡AYˆ †ò|êŒcþ?Ë|")mʬ‘JõX Ã×u) ¨T ß‡nz½Rɪ˜RøU¬®bæçss¨½{‘[dìß=±*¥AmQ~ Æ<ß#ϲaøQ陚åÉvU©n-•žQT*X}ß 9´¥`ݪný?T‚h½^G*…¡ ×ù°u_<ê±9A ¨Û²²Twú”¿§³‚B,eQ­Ö‰ãej|¦1”Rt;mª~•N»ÍT³AuðÆL\†véÌP(°…Âv\”Ü.ð½�­s ­ Iœ‘¥9–t¾E½Ö ŠC¤(•¨+%išƒ¦JI”Tä Ê`)¥l‚‘8¶BÚ¥ƒpÀTmžÊ) C¡slÛÆ¶‡!c9ØCŸÚÍÍ6®ëບõ®7Fš&è"¢^¯aÙšœ“—^¥¹Ö¤FPH—A"q‚1º0ªÆû«ÿΟ½íÓDa‚ðô«ö°g÷<'"ŠC<¯†ãº(%ÉŠ’@æym«–“$¡V«e“;g¯ñàƒrÉSÏ%KSl["ÉÑYŽë(esÕ•Wðæ7¿ûsÎ9Ë)øôg>Í«^õr”´©VkØ–"Ï4¢PèíÀ-E–%7$ØË§<φ„I¸ç¹Aª’-€(icKE/wHűùyp%Òó9òàQÞò#JR®~ñOòÓ?÷\Þööf½½‰X¸,,­#•‡eå$Q¯QGH‹µÓ§©íœ£Ècb!ÑIŒ'½Nß¯ãØ›Çö·½b•¥¶ Σˆa)<ßö-:ýAÈÆæ“““LMMaÛ.ÝN4ɉ¢” ¨à§VØ99Nÿä)„ïpö… â„™éYî½ínÄ´¦5>Až'h ´Épm—C‡`Y½n·R£H†é¨C«Ë÷XX>F³ÕĶ|¯Â—n»™ã'îç…/|3³S(PßMgõÂÊqª&5ºË œû´§15;Å­Ÿ¿§<í©Ì<ÈÒü<Í©Y’"ÂhØÜèÐp'øß~=¯ÿõ_á]ÿý¼ç=ç>z=ÓÕ€£‹§¹üG®föÐA:½ÎßÅÄŽ‹ÙèTÈ ÍJ{¯ÜqÝ7Ï®û kÍ3=/zÝËøÓ7_Í¡³÷°xÿíLïß&§R‡õöyâ0Q­‘­®pó¿|’‡î»‡§_ýl.~æÓq|—¢(°}(Œˆ“Ç(„€"/ïõBôûµZJ¥B·×aeå qÑlÖq\‡^¯m[EN§ø5d!1ENwÐ'¨4°”Esb’¼×(gz÷~Ò\Xõ±y4"VŸ(ôz=î¹ç¾rûWèõz>|˜«®ºŠÉÉÉoK¬nnnrâÄ 677q‡é©i&'&QJaŒ!Žcî¿ÿ~Nœ8Aš¦´Z-&''‡!#Œð(ºPXÝ·Ý�� �IDAT8ªN =t¸’ P5LüÀ' "Ñ˺ä+VeŽ`ò uã­ßI¶v¡§5¸ü[ DñiÂpÛdÂk’»5Âþ"KÝè |ϧ9ÛÄvím2v„û_Ô‹¢ôù"Æ¿ÇaQd9›Ã×Äñö¾…‘-À"WÓ4ess“ùùù²ã+˸óÎ;©T*Û"¡n·ËwÞÉÒÒI’ð‰O|‚ÅÅEvïÞÍ\ÀUW]EµZ%MSN:ÅÒÒÒ¶bõë×õ Ž?N»ÝÞ^÷ÇÆÆ¾Ár`„w(‰P£¢âœåYàº.;wîÄ TšÂì,"ÏYí6x(…IºÇ38rÓíR™œ¤zÖYØ#bõßO¬…)SÇ èakƒ¨lË&+2², Ç&MS<¿$„¾ž4 ¸®‹çyÄqLšn©P!UËÝ!ŽcªÕ*Ýn—(Ѝ7›CAFéÃjYP!Êß/ÛìSr#¥Á˜ÛöHâ­K­ZƒÞÖÚ K9àH”ã`å ùZÊÊ™2Å ^.ʤq 09Ê’ä™ÁH‰”RÚRjòÜ�ŠFc ¥,òÜP­úDQHšgØÃÃt¹™Ë² ËÚ’T—žô “°Ce‘çš~2 V‚1§B«5†Î2°l”,ÿžD+œ[éº6á ¦R­Òngzzišb ðƒrÌt¦©×«Dƒ5<ÏC*Ò¡ÝÍV‹æøÂ(£ÝÞdùÌþèÞÆ§>5Ͼ³$ÞÅ®Ÿçç~þ•¸.˜"Ã2ßqôR@Ç–å“$¨6&±m›^¯O¥â•Zsιçòà‹˜BQ脢иÍ~î"m—<7øU‹ÃíçSŸþ$_z¯ÿ¥×ò÷®¹æGQ*£ây()(tF‘eH—4T*>I’ u>û-%mFžç¸®‡” ¥víÜÃÏÿìU\ã§X^{­±=Øn•»î>ÅF·ÍØìY¼ãN”‡,®i>òÑkù™×½‚7¼áï8qü8]|{÷žÇÃ'V(’A¤)dƘWÁ­Z´Z“¬,,Ҝŵ%¢âÑËc<ǧîÕˆó]X¶‹’0Œ‡… I–%Äq„Áö·Æ·¼––ÎÐív©×kDÑ€^oK T‚Z ²4'/B”TaJo}“ÌÜ}ì8¾UÐó}î¹û^î:Ç÷è´»xAÙº^`Sä*)�Ë*0ÊF‹-³¡úW1»sœn/¤Ýðð‘xãïý>ðG¿M½é“¥6¾3Å?ü퇹õ_?Ïï¾ñ?ë˜^{ÀØx“ÍåeZ•:çžw˜|øøÉ—¾„ Y'ìnàT¯F¿'é†mšuI£åó»oþE~ã7^Îë·¸ésGøägïåÏß;1€%Ù;V0YÀ�8£!€±¯Ù<ûÒçðŒkžÍìåŠW½¯bì”j$HÖ¨4jà¸X¾S­³öð îºñ‹$½M~ìšcæ9ÏamaK§e£òœ`b å –Kži B*\ËEJIÅä:cié4+++TŸn¯KšEeÈŸ*ˆãÖš8O1EΙÓKÔ[)3sûˆz!Ê(Èrì±iĉ“¤ƒ.öĶ)ž(lµ n´Î9çžöÔ§m‡S|+¬¯¯sìø1ƒããã´Z­²h8$cÓ,e~~žõõu¤”T+Õok-0ÂlH¡ðíq +"‘–Âò+ |~0Ô#ÊU¤$·rMQ("‘³nÚ´³-9FӛƫO`Û-ÙÊ ¤HÖÿ»yåîá[*fŒ†´OÞ_DG§ Æ.Æ÷æÈ…`\…lÚ-²^N'ê 'õÈîña¦Êda#(•¢òû`3@¢siŠ* HÉP¥1úÌFxd^•ß÷Ù¹s'û÷ï'Š"N:ÅâââcÖâ,ËX__'I²,ãèÑ£h]Úp•á±ÃÇ-,,°ººŠ‚f³I«ÕÚöX5ư¹¹É©S§ˆã×u·}ÕGkÿ#Œð„ðéJáû~iE©5fv=öû8««ÈÉI­ WVèß}7ÙÒÂóðfg©LM¡å=ÂwI¬Ú¶Cš¦e+½íàºc ,K‘çg9ó•ê–*õÑ H£Ñ IÊ$s�Ûv€‚” M(KbÛI*HÒ©­±&¹.I�KYØ–Î5ZÛD¥Ö ‡!?[»©’ø,LÛ.ÓË\ÇJ2UQúÛeYÎØä«܉[©"ø$Þ´¡Vi 0DÑ�- ¢8ò\l/Øà2F Ä–Òàûiš–~ž” UÁÖë°‡/=hmÛ"Ërò¼T½" Žã@šƒäZ—$«|ÉÄÄ8&/ÀRØÊ!O5J–„a’deXàyvà3;3KµVV_5½þ&®ãaЄƒ4Nh6[=¶ÀübˆíOà-xð÷?ð�ÿäuÜð…#¸üÔK/åÙϺ‚#Gޱ8¿È—&Ž»8*ÂZF(¥0äCÿ!1%ákŒ¡( VVV˜™™$ËSú›+\òÔÃÜzëm„½Ç•X¶fÐY/[Ü3‰r,ò<á¥/ýqþè­ÅæÆ2Ï}îsøÀûþ••5¦¦h i#…B •̹α¤Áõ«ôû¥w¡ë:è¡?pÙN_¹R)Ý„ÝÎã5¯ùq^öŠ[èuÌL4¹êéOçæ/ÝÉùšcgñÀ±yÞú—ïæÏþì­Üö¯'xý¯ãICo3ÄÂáÜCç±¼r ¤¥¤#Ð:D5&ðª5æ缫®Ä3 xdYWzx•y·Cd2L¡H¢ò¾(}:ÆjµŽëP9¶­p]!÷Üs7ûöícrr‚JÅ'×zÛwU ›,OKE´m3ˆ#¢Á€ÊÔw>ø0x.“örtcoÒáå/%iw@¯ÓÆs]ÂAˆcäÃÀ¬~¯4¸.ŠAy“‰œþ åø†q¥¥6:éðÞÿñ^òS/cï¾½ô=ÒØá]øÞô¦ð;ÿåÅ8~ÀF¯Mž¬lDÔ‚ Q’²ç¢§ñœ~ȃáŠg\I¥Q#ŒD/'ΜÆñm41~ÖÁQ’W¼ü%üÂϵ¸ö3·ñ_ßúa^ö’Ÿâ—å5<üÕÏrß _dÿEç`Íî"¨ 8›“{™¨ÎræöÏqâèW)ºrüÌi”È©» ŤiŸ,ÖØ^ö™u®ÿÔg讯ñ#Ïy6j¬Å—®ÿ<­;©ÕjT]‹N‡ù¥38®OµR/‹Â"ËÂÇ JõãÆÆAeY– uÂøxkû(èù>Âtš"ŒÆõ¬rnMbº½ªëáT|”‚ÌHº««T¦§AŒˆÕ'’X=vìËËË:xˆýû÷333³}~+t:)LÁØØÛ¨­¢b’&(¥h4Tª•QxÅßfgl#*Ó² Û½׬Q1M$“”JÎïçC¹bLÔqAщ3—u Ëf•H¬³oæ�c•q,'�k¶~*âö]tŽý •¹•BŽÃ×+nLIÑ=…°LWic!˜öf0MÁ|qŠA:@+ý¤%U-ZxÂÉš$NE¸ŽCmrŠÚÔÔ÷|.“@Ãõ Z%rì¡ýÒH±:Â#ØÊæh6›\vÙeé¶|ô=´¥XýÚ×¾ÆÑ£Gév»Û+gu,ó"(;<×ÖÖˆ¢ˆjµÊÔÔ­VkûçPZlnnbÛv¹¿wFêÁFá‰Û$IÂòò2õFƒq×E/,Ð_Y…¼³Îb}0`ýøqÜ“'‘EµkrziÛ£A|<ˆUc ¨TpdIœfY˜!!%Ê$p@*)Âa˜”ã8ÛÞ¡¶]¶mo·?j“ M¿K¯Ñ”$yä¹£(*z Aà‘fÙPyXà:BÈmqÛ¶¶‰])K/˳R™©ËÊaéñª¶M&äý~iàû¤…)w_R‘é¼[P«{A©ôËs´0ØR0ø¢|ÝÝnwÛËÔuÝákÔDQ„mÛ8ŽK¯aLA†H)q]×õ¶ÉÆ-ÂU ‹Bçø®MÔë#…À?F“‡!~ÐY]‡$EV-´ÎKßYE¡‡¡FåX„M\ÏÛ Þ Æ²@JSŽ¥ë“gšZÐâmo{?×þËÍq‡$Ó,¯&Ä.»¬Á¯üêÿÆK^ürnùâ-¼ýÏÿ’g=ã2ffÇYYnc)Dn·¯$q\¶»ˆœ8ÎÉsÐiÊøø8Ýn—f³ÉêÚ ±{ÏŸ»nµ$dzŒ^oK <7Àq«Hi‘g OÖ•dø'œ<q‚§<õJÎ>û\>wÝ-üêþYÒhÔ0¸«PØ–Cš2“g ®7 S3<AÙÃÏ^)…’ ¡lò0f¬Õ"ÏÇŽœ`ÿ¾+¸ð‚ó9s&ã«wÝÃS/ºe×è ÌìØÅÝ_»…÷¼ã˜PàIm•ÜÃ=ÿx3¹±ü&©8® ™!ð*ØzÍ€Å^£·J‘¤q•�%,t"…†åäyŠA’f)EQÊ®¥Ìˆ¢ÒwwïÞÝEAœ„…¡VD©²ˆPúÌA®3–——¨4|DwÀ‰pè)ç0¹{õ³ÐO 扺!÷í!3)ÚH»…@`QèˆõõujuŸ4 ±mãB’°Œƒ_ñ·én(N/-óÿ\óFtÑCª€F³Á­·=Èyç·øÕ_{=¾§é 6h´$ýêØ4ºÓ;àüg>nþï{ßßðÃ/|!g_q kG¢Þ˜â¼ °Þ Q…Â÷›iν_½“?çõXÅ»ß÷§¼à…/E‰5.Ús‡'Úœý”+kMzѾõÝ~»X ½~ñà<ÜZ!}L4 p]D’âUŽÝy/·Ü~'c³;¸æ—~) 6º]ξðb–VWY^Ýࢠvàúú½iš£µÁ²µZÍÍýþ�)Koå Reß¾=ÔëµzehÛa°‡¢È†FàZ6Ò(ü`'Y!)ŠŒ±‰1”‘ @J‡Ù¹=œzèfæv"êc£UëqFQ”*â…ÅN/žFçšóÏ?Ÿ}ûöQ©TþM¢Óé°´´„eYLNNÒl6ûüº`0 ”bbbâ1jÖFøF@×À(C‘/‘Š ŸÆó|”r¿ï_~Þ뢻g€DEo@œyÄڅDZœ.“çŸG`Y¥¦ã¡šûñ¤&Ó½åaå+(§ŠÛzÒ™xôÍi+Ð?ƒ#T0 7…ŠUa¶:Ãj¶B7îÉçIgÇ1Qáû>¾ï?±,Ë 1i† Ì:°-ë{¯¾*g-)KmQ@•¯×uGóÉåVJªÕ*^x!SSSÛç×¯ß ,//Ç1N¥—]v?ñ?ÁÌÌ •J×u·mï–––¶½Õ¿YÈå`0 ÝnãyÍfs[Œ4Â#ŒðD‘«ZktžƒïãNN’Ôë$››°¸HÑ)Yá,.bI‰wà�öÜ\Ùí1Âã@¬jA–hßÚNó›|èG“ei¹†'l)1·<P…ÛÖ�¶mo«Yå0¸çÑ*W(«|[ϳýý¡r)·“m[m·tƒÁ˜|h+P*GéÁ–Ý€&Ëb”±Èò„<Ï© 0T'm*• “àX4ÇÆÐ…¡× ŒÆ <rãI c⡽À#A\Žã$ –em{ñ”ï¿LW·¬’<ytp0$†lÇ)[‡“Û«b) (Ë"*0BP ÖòeL“{e—4[Þ­yž‘$rì&† 9µm¹àû6J„‘(cctN–æÔjMÞð;¯çU¯Úäú›îçúÏ߯5×\Àó_t W\ùLõ)ÖV7ùò­7“ÆðÂ^JÔ_§â[è<£Tˆ º°¶7)IšcYBZÄqÌž={XYYñDÆþý{ˆ¢„••uœ5ÃúZÈäÎ)’D Q¤iNV„x­€‹æ+·ßÁE_γžùLþú¯ßÅë~á?Qd)Ž-)´†ÂiM’&hŒÉ©T*è¡òWJIšEZà8Îö5¨,‹(Jpü:–R?v­5Ïzö<ÿyûøàû®ãU¯|-<_ýµ_#9üñ[?ÅüŸ/àŠ+.ÅÈ„sÎ277…²lß°1¿H,R,ch¶ÆéX t7ÖvƒÔh\ÏC ò߯’:Yšáº¥wqõ‡d¼Kš¤d:پDzL³¶¶I³9F½1F·³‰)$• ¨¤IŽ@ ¤$Ïwð=ÝOP‰aÏyçKAnà«_¾ƒ³žÏ¡ý‡Ø8sšÜÑ•…¡ôŽ3’TS`Èò‚,/p}‡ êcç¥]’.gï?Èûnú' •jÇ­R©T¹ë«÷pÓnç½ÿã©6v°±þ0Pä9¶ëóÀñÞw¿Ÿ7ýþï_¸íNÞõÞÛ˜˜œ„,åìË/¦·ºŒåO0·k’*‹_;Âí7~‰?ý¯×ò´gïàwÿäÙwà"6Öï#P9Q{ps•´ßÛÅWBsƒª©Ð[_¥sf•¥T›ãÂÂôºÈfdÊѿȿ\w#WÿØO²ë¼óõ§O²{ÿ¢Ø0­\¢°1 ÉTG:ØžAéœZ½Aar¤(*.E¡i6ëø;´s€<O‡^Ñ–r(ŒúÀå&£Ð­%f8Ç¡äTju’^c2„?òå|üù‚Œ‡zˆ;n¿ƒõõu&''9|ø0;wîüŽHƒn·ËÊ™\Çe||ü1Š•­ØÊ™’$azf×sɲì‰'BFø†mÕk]J¿ÿ�Î)Œiu¤üþU=™4#YÜ$:zªt@`Š‚70}ú²ÈÑÞ)ÒfaÛ¨‰ d%ÀnÂiKÂÕ;Èïù ãíÂmÕ[„rbzóÐ[.ïÍê44vƒå=FhŒA‰Á°nÖ±MK´P<¹”â,//355Åôôt©õï= ™24UlµÕo“˜ ¥ Š"Öæ©Îϳnî1sÞÿß(Œa- Yjwpâ˜V–A{³ ì°íò°8T%å{á?,šÍ&Õjõ|N·©Ê< ×u™˜˜`Ïž=ìÙ³g;”j묕¦)ÇgmmññqjµÚcö Æ¢(¢×ëá8Nð;<ÿn)dGa„/låíÛ·¯äíŠgn9?O{e…xi‰¢Ý¦9=Íä®]l,-áNOÓ¸ðB¼½{£P½Ç2IÓaÕ;F)E³Ù¤?l“†J),Kb©’x­V«ø¾¿])ßZÊÇYÛ‰dJ•~ªB”-ËB@ø8Ž=T *¤CekJž—Mžçm“šišn·Nh­1˜¡_¦Âq,ÀP˜CAš%ôÂAËT«AÊdYJF$i†ëyÇå:Ïq\×ñ¨Güch’e –¥°,Aõ‰ãÇQ(–¥HÓRM¸µ<A@£Ñ@JE¿ßdV)ÏŽc²aÿqÖÞllU@1Ø–…7\ð¥†6)I۱ˠœ¢&÷•êU©Zgô= ’,*e‡þ¬B “„j`sùUOá¿÷K|üŸþoùãßæ9W_Žï Úëg¨x·}éf<»ÆÅKoP Jú>Žãáy.Fƒ(ŠX^^F�c­1Â0Äq]|ðŒ1(¥X>³Àäd“zmš/Þx Q31Ñ*[ùŒ!Ä#¨V|âÎ:/zÑñ…o!îxÖ³®`mUòÉk¯Å’õõ5Ò4A)(L޹Né÷{¤iéOEá˜/†êf¹}}fYJµÕâºOÝLØOùò­wF!Ji~臮æ‹7ã=ïü0ó'év ZuxÆ%“<ëÜ€ÿtÍsIºËÄkËìÛÝàU¯| íuV—Oâ¹6ËËëôÓŒz£ÉÆ™3ÄQˆÐµzå¸DQYïUHòŒS‹ó´»ø¾‹C ­Ë+#Hâ„4É0… ‰S&Ƨ‰£˜,Ó4ÍrcWÒ4&ŠCÒ,Ƙ×·™oѬ|üC¦Tp*›Qˆ_«qîshÔëäà e­^'Žx¾Mµêá¸jH z½>BXT+cD¡Æ÷ZÔkÓÄ¡$I ÿôñkyù+^ŽRŠ()›|ä#ŸãÜó÷ðüyaw“Je 2ˆÃÅ;Þý!þçgï#íṅ>ö5.¹lŽ+ŸùÃ|ñ†›¬÷¨ÍîAH—A’ðÁ¿ýG^ýªßæM¿û¼úeWóÞü»÷´8³ú\¹†ëC DfcSųƨW¦QEéMR­L#‹€,¨Tr‡ñéD§Ïð¥úgŽ?É«ý׸ð¹Ï¥:½“(ÉiMïd£Ý§ÝîSp,ÓDƒA¯‡T’öf›(Œ1B0HbNœ:ŽdÁÆæ½^! –¥†v 0e@Ma4…މÓa¿KõÐEJA9Ÿ!J5?–ƒ;9‰Òi¯7üþ'´Ö,//sòäIƒÍf“C‡1==ý~ƒëëëdy†²Ô7¨Q•R4š t¡9uê7Ýt_¸é ,--„o³IVXVÏ›Ã÷÷$k ÇÈóÞ÷!£jÈ»]£cº}¼Æ8ÞÜ.ü}ûp÷ïe0Wee'DçÏ2Ø·ƒîþ¿þz>}ó9µ´„.@Z¼Ú>jW`û{IãΠVï¤Èú@Fn6èz2¢¨í€ÊXþ7Ì‹Ž´Ù̲3˜cc°A;ÚDúÉG¾Ûåžpaa;;ãÇŽ‘¦éwÿQÙúÑчÉÖ×õ“è`L„íØ4[-Z­Ö÷Ü @AµÙd|f¿R)«y^þ»5Ç÷ûÄ'O,Ìc†™#üÇ„eYxž·­òÞúÚúžëºÛ]Š–emg‡(¥s­k­Y]]ݶ¨V«Ù/!h4LMM‘$ wß}7×]wwÜqÇ¿ëþa„FøæÛ°RȱººJ·Û-*'&P¾\]ÅšŸ§Eî™3È^iÛXÓÓˆFcdóx­1µZµ$j†ÊÒRm*‡$i> 2H•cŒ³ÝöÐl6‰¢h[m—eYnåyÔj5t‘•mï¾·íû�¦L¬×z›|+‰B]*… CL•m_cJ…h¡Ke¨ã8dY¶T¤”À˜rÑÓEY©"BâºÂxØÂÐMRlχ¢À / Ï÷F0È"Ç£ˆJµk–•‰è®ë‚n·C½^G)I¿ß*qs¤,IÜÁ ¢ßï—d®(ÉÏ<Ïð}w[ÝêØ.¦y𲏏€SqѶÀs],a“z^)á¶l´N(ŒÀèrÛ!ÏrJ_0¦@©2@,§Trv»]@Põ,ÛB E­Z#ŽV¡Èñ2ƒhe[´7æ‘®¤J³ºƒ}ì£Üð¿æù/ÿ÷1=ÑDë.IÜǵ\úÝ>ÕJ‹Ü<Òjßh4†1Ec­ÝnoZ&°¤A)ÁS.:Ä}÷=@Å{)ƒxv{±æ‘qˆ¢ì‚B¤\pÁ¬®t9qrs/¸ˆk®y*oyËxÁ= ­5ƒ¨À`[^é¯ëøDaL–¥Ãë´Ø±b8Á�HiS›¤Ûîðîw%á“ÿó¿ó_¨×}~ô…Ïáù÷üîï¼A\pée3|ôoßN`2nºîZ™ÝûÇê)9|á´´0f€ïÖÙ9·“~â8‚©±q6ﻩgü4«Ë§‘®ƒïU!Ìé¬oÐñ#”£(tÎò™¥íû ÏÊ¢E¹a+EJ9¤iÆ®]»ˆÂ˜ÍcãM²,§zÉæyJQˆò`irJI¢v+Ïùׯ}•ϸ’\k|¯<€Ö›uë+DQDV$´»‹T‚B(\OQ«U¨V(eá{®S#šïïܵƒ#>À}÷/ðö·_E’¦LOœÅÿúìxï{?›Þü‹8žG‚Mg£ƒïXŽ ¨Ô9rü!žóÂ˨Öç¸óî[yhá¿ÿÆ7°û¼‹yA”ðÑw}ËŸý\>öÅ›xχ>‹Ì5ÿ×O¿’«ŸöKx¾FoG6\|ÏpæøQfÆæ°ŒÄ³+Ôª-L¥ÉÚ` #<¤m×`rn?õúYaÑò›ÔéÜ÷|õ+H?àÙÏû!¼éôÂ>|”©éiÎÞ¿ŸÄ)@Øë"eã7=’(¡Ýîb9 ;çêRÒ4¡ÓÙDˆ‚,+ïyž ½i]ò\“祢œÿ20¦È0d8¶ƒ_ HŒ]ªý)J/]S†„ìš™$ë÷ðÒŒQÈçã<Ï‘J299ÉYgÅÞ½{iµZß±ºÕæW«×h6›Ceò#‡+Ïó8pà�ËËË?~œ#GŽ0·s޽{ö2;;;üþëk˪²¹y;ƒðI(”üþ ³2Æ {=¢£Çð ‚Ý»Ç%Ó ƒ‡Xì´³Zä« ×ýÝgX:½JµZ¥¨Õqkµ¡í†{ÉÕB}Šlá‹DiŽ“;X~<Y$¬¹¨ae ²oN4WL•fóÐÊýAF}¬A`¥ïÿ“‚xÛ{œS§Nqúôi ­9knŽ ÛÆšœD>*¡c0YF‘$˜,CH‰¬Õ"‹L–‘wÚD>Hrò$ÞÁƒ¨JẠ#tÚ¡9N¥Bm|‚ÚØê{œp.„ Z© ''è6êhÛ¦H3Š<GéÒá}÷¢ü�»5†ªVG‡È¾)lÛf||œ™™Œ1ß@˜naËZ`zzš={ö066ö EÕ™™.¸àÖ××i·ÛÜ}÷ÝÌÍÍqöÙgOUÞ#Œ0“iš²¾¾ŽÖšz¥‚¬ÕÈÓëa§)A·%“¦”�� �IDAT‹êvÉŽ)E4›e—ä±êyAé­šçèB#…ØK*“ B8ÃJØö£Ó:¶YKÒ4Ýö­Õþ_öÞ;ʲ«¾óýì½O¾¹nUuUuwu«s«¥–P#„2! ÂFÄAƒqÀö`ã‡ñ0Ʊ×x€À‰±=Æ`c00ˆŒ-’…H(!5Ê¡sWwW¼ñĽ÷ûãÜnƒíç롇ïw­Z«j­[U÷Þsî ßýý}¾µÑ¨P†e4¾ÂKž|^XcÊ´¥T$iBŽF(EQh0r4nqã8ê r�aF)Øbd¼J¤d„pKãQPŽÚš’O*…À÷†ÃA¥…&6 éuúxJRÈ’ƒç+‡0 0¶L=:ni2×5²,Åó]²<!ðC,‹!ªäYA’¤¤iZŽþ».I\šµ§Çá²4+óhBS«Ö˜™™!Ë3:ƒ!3S“˜8©ˆãŠ-4~T%K ´6¡1¦d;zžOQS�.R)<WP˜¼[6‚4ÏQ¦À‰j‡C‡à3¸¾Kœ ±ÒEÚyjÆç¡æ¬Mðâ^‡Ö BØ2¹kËÆË~@P©çå¶Ÿ˜hcd0R¯·Y·nݙї(Šp\‹±†}>™?ûyeé–£j$Y ÖÇõ|Òt +sš“u¶mÝÊÇ>ú vïÞÃÏÿüÏóWõEn½íV®¸ü©t{«dYJVX[ZEy!A›G9x®ƒ’ ¥r â$Áu=B×ãøáGyã›ÞÅòrŸ·½õ üúoü>þà‡xó[ÞÄ÷ßÌ ó¤svsñåð¯y.ëæ[¨î ë§«|î³ÍÅW]JTX&š¨ TH¥ê’Ä=*•&ÚqÀôÙ´ižGÙO±²Z&‘]a2ò‘Y+®çà&ù(©„>i–b$A¡”K¯7¤Ûày>Z—EiQT-|ä Ì(á]2V{Ý5\!Ùwþy|î#ÿ›ÏÝûW®œ`ÏÎó¸hÛ“X‰cŽ-P©D DÌ©ã Ô« r|7ÄuCêÍ:žÑ]PX—f£EµrôÐúýUÞóž¿fçÎmL¯k“§ÆúüÿþÇ(Uå ŸŒÕ1þ?ÿŠÏ~ê+\÷ÜóøÑëžCwsøø /zåSèØ”÷þí‡yúÕðŒkžƒÉsfÏy—&’_ÿÕßgQh^ùŠðê—¿„Í›æxøãààCl¼tš…“Gðƒ3S‰‚ˆ¤¿Fa; u‡Èicå€SK‡…GàˆºnF*3È,+÷íç®;ofzý$g_x>¢’{Ú H:)»wG6Œ9ut xÔ-êµý^‡"ϱƔ%jB°xêQ¥†•’óó®fmm…ápH­VÃE–åe ž.ÍÇÆDÉœÎò™ÅÏ#/R°¡ \ÒÂÔô «ƒ~YÊ1Ö÷TžçqÁ033C¿ß§R©0==ýê]uÕUgFofff˜™™ù¶›þf³És¯}.O½è©ôû}\Ïezjš¹¹¹ñ›?Öwb¡TD£±—ÞàaV:_g?Ætû*¤üº9/y)E¥©Eç¨~ŸâÄá.Õ“‘:Æãßø&_@›rÚè‘GbýÜz¢¨†.rŠxˆ—N±=¼ÇN|†»oÞO/nÓp+L´êÔëM\÷V¤tþ§cX.rÛ¡/1SÛÈÂÌ B¯Z¢V~HtúºûÀ<ò裬..r< Ùqà�îÕWS¹ðÂo{|º¸HüàäGŽ ‚ˆæµÏAÕjÿtS¶°@鍊Ü|3zy™â’KÀq‰¶o§èe 3t¥M¢4ÕUª‡1?;û}-å1ư¸¼Ì©cÇp<êºiK§`u¿^'9yŠþW¿J|óÍÓÓÔ6o†!cuÆú—&ýää$/zÑ‹¸æšk�Ø´iÓ·-–ž~ÜÔÔ¿ø‹¿H–e4›Mæææ¾ís „`÷îÝ´Z-®ºê*´ÖT*fggÇ ±Æë 9~EQÄ–-[ð}Çóè¦)Ý("›E¦)+ÀÒæðaòÍ›ñ·mŸ ¿×Æjž&X­ñ׋0Æ0è÷1V •‹Tñ<× ÀZ:kkÔëu²lH^LOMRä£Ò&ObL†1’JÒíuÈÒÀj‹ã98žG‘YÏÅjK^X>yÞÃQRh‹rÄ04X,€-GÜ¿‚ÇqAºè,ÅØÇ Ê•øW©Ðò!¸GNgóöˆÂdEB(\jaca§ ;¦ü*R(,>Žã¡uNVüˆ¢È©Tj¹& +$I†ïj|ÇÇz€8ÂE¹:-p…"ÎR$(H‡ Õ°‘KeªÍj Çsq,%/Ó‚‘Å5*›7äšÂX BP©`m­-B¸Tk òL3ì÷BâH‡z Éò´L΋ò\qŒ†éuÓô»Cší)ZÍIRmH KX­Ò_^æ#¹…ëžÿL¶îØÅÑÃû‘2AHȲ„°!œ²œÌ!q…u¤Rº‹±š¨R–óôz=Âpš<–T«[ÏÚÀÉ¥!<ò([¶ÏÒK2<Gáx_±¹%r^xÝ ùÕÿô~öç^†ëüøË/áC¼“Ë.½Œ ñ½ˆ¢�é¹X™"¬E¡pðpE aÝî ×±vø­Éíô{ÿ×_ÏÇ>v/xÞ^^û‹¯çË_¾…w¼ããåñ¡¿ûϼæ)üù_þ!½Î­–ÇÂÑ£ÌÕìÚ¼…[lÄÁý÷°ù’KñÜ6Bº(+ÆZÖâeZë ÈÓ#’Cǘ<o;‡»km‘"À«8 »C)ðýˆF½IQ”[qœ$1R8¸®GQ8Ž¥Ó]AÌÏo`qÑÐï ™šžÄÊâ°\#B‹”’þ ‡*2ÂÞ€{¸ƒ+_| ¯¸ê,Ç]îº÷n>ú‰ñ‚—ü8®’ø~JÍ­aµB)Ÿ(ôH‡CÒ¼O-ªáˆŒ™é6kÝ/˜ä†>Í»Þñ?éõkÝÇÙ°a3ßÜ” Ÿr_ûêm|åkrå•çsî¹Ïä÷þàxË[þ”8†å•Çø™_úÏüöo¿…©‰×<ýb†Ëó‘|œ?~ç&ÎûȬÀq\fwž &æg_ô"®zÆe´´†÷sÛ—nd×…{ 6LTÖ³´\¦!jºBÐlQoW1É2˜iš“ë8xô0&OhOƒS™&òÖQ?¶Ê}w~šÇŸd繻شs‡—V˜m®cƒò}f§'q„¢#Ö(Ò WJ¤ÎÂâù>:+y©öV Ò,eaá0A%òÙ4¿žN§K·ÛeÆM$IBTFéb÷  È-ÕZmSŠ4A¸XKœƒ´)aè—Ç aÑ()(‚ òÁÆäŒa�ßã“àÈžž>Ã]s¾ ÖÐÆY¿~=À(­ÿí[È÷ý3)ØomðVãâ±¾ã f‰çµõ,i¶ˆÖ ƒá¿ëÖ(cìß§#ƒµ%^)‰ËŸ]§, ‚a7añ¡S îy˜Æ#÷v×IÆæ™9:Ú²¼Úe0¨ÒíÔ˜lGÔk ß+ÈÝY•<Æ«q[g‘uΓXߨB{b–JµÊ¿ÖXkHˆ+ÂJDEDnøC“X…²8¯œR*ÓqÓl2z=â‡BÁ–- %ùÒÃ;ngpû++8­ÎÔ$á®]¸ÓÓè4!yà_»•xÿþ²@öž{A@03C±Ò#9t¨j /*ËA¿ß¬H!ŽRxA€¬Õ°aHÇå=Aš’Ü}É7¾Ëäm𖍀±ÆúWö¥0 Ù¹sç™kÓ“•ÿ\a²oß¾3¿÷ÏÏýBZ­FƒíÛ·ÛãÆçþ±Æë‰1†,Ëþ Õé8¸ëÖáœ}6ÅÃõ«Ø~éºøW\¿kr¼Ðó½½§´ßR&…-ŒÇB”'�cI’•Daˆç)*•ƈ/Z œrtY*Iš ˲£J¨Q镵 Ï ËÿSQ¸®KšæH!1¶À!A¡h|'@¸Z âx0*g²a0:GkIT©Sh‹.�4qœ“e†J¥ä¤2±€ïE \ŽŸ:Ik~ŽI“R =œÄàMŠDy¡pððÉ Ö DyBÕºlÍtF–Ê’„Åq<éàŸ˜¦~à•\Uciµ&J^Uœ–œž0DZAäWÈŠ”\‚õª€"Mq¤ƒò‚°B<LiE-Ü$Ezc ÃAJ–ƒ«\òBPô3"? 51MžeyŠ/ 9â`˜æ8a %"QÅæ¯V% ÛôzšI& õF›~àÓ,œêóìgÿ:ÏG W‰-ÊD$¬ÕdY6*ŽsHƒ61P2hèAµZåС#LMÍR  :C6œµ‘m[#¾tÓMlÚö*¤ÛDº‚aÒà r*ŸÐ¯ Ñ\qùe(¥øð‡ÞÏUO¿Œ—¿âe¼þu¿F/w¨û!§©D  ºýeBß%òª˜L Ó¡,zƒ¸—0»þlV».¿ÿûÍ'?q¦%o}믯å×ãW¸ÿÁ_à¿ü懙œòyëï<‹J­ ‹;<òèavî¸iÑô,»¶lçίßÉÆ+.§³¬qDŸÉª‹4:4dÙxÐ!$“çîæÀ-wðÈÝ÷qÞÞ˜¬O!Y¿Cæ¹(!‰Â ¡  çy ‡CÇ9Ô¯ÕjÄÃ!Q³Æ®ÛÈsƒïû(¥¨V«t»]\×1ŸÊ¬4‹ÆCZa€é§ø‘ ±yšFu‚^< Y Ùrá<J”ûš±]Š~LèÔ Ã:¾§°9¤q—<RdlÀäÜv~ýͿƟ¾û’TE–n×rðÀ£\ÿ²ŸãÎ;oåË_ùGrÑ& [Ôªë‰chµ%÷?’ð¿ùV>ðÁ¹îy—°qjðŽ7ó‚k÷òôË/!¨TXt¨ùu^ò²cjb#çíXǧÞý.žÿÌ«¨M×i7[„Í+Ý>"pü*®[Ås|Ljqï‚cÆS“³èaŒÄ‚¬’úû/°6Õ䢫ŸÉôyçŸ\F†8T-²Ì` C¦ õÆ:Mä§{/Ê÷:,™[YÓšh>ƒÁ�°hS6̶ۓ8ŽWšã¹¡È ò¼ R©á(—,ËŒuÊ'!±ªLî ,ŽrÑ…f0èÓ² <ð‘ÑÙò†bl¬>ú× ÑïTÿœ½ö¯Ý¬ý¿=f¬±¾þ:&ûÆGôÛÁQ´AxßsQ”EA½Þ®¥™ž'sî»·Cró!Öy˜J; Ú2ÏÛ¶Ñ:z”Ø8ÿt¶l} ›7W™™I ÃÃѵßèžÅ7‹zQÌÏæê-×0M ÔˆAýoH[ÍJ²Dº!a¦2Çž‰½DN¥dXÿè±Ç#IÂ0drjŠ™ÉIÚyŽ÷À$‡‘-,Ð|þóA)’ûîcðå›Iﻢ[t>ûYL–Q½è"’£G~s?ùã!´A®›¤8~œä–[0ϸ½²Jvè(i·‡35M}zšêÔÔcµÞh Ö­cX­’[[¢�²Ýë‘ÞqùÁC¸»vâîÝ[š«cõoõßÁªâ_$Y¿—×c5ÖXßN—ê8q⌯°~~žÖƈ½{..Òùò—Ñaˆ³góÏ'غã7ï{i¬– S;b†š3÷ZëQI”WrPµ¡Ð¥é“f1•J×-ÇøµÎ‰¢2ARŽÃ !FMö¦Yù½Ð¤YŽ’¢HȲŒjµJš•ìÔ<ÏZàû>ÂZ¬ÕY–4¹®‹. tQšI:¤Ð¦äÁ*¥ÀóÆäº,þ1¶,È’VC–13;ˆ͛ÊÙZa¢äQäB¡B¿LŽå¢4…<µ֞):½zyšã{>6Ë)t¯<”EÉ\tÝÆˆÕZŽë[²1u‘“éã ÏGë²̱G,+KKÌ¥ñpˆäyYðåP½n—82X°ººÆüÜÝC[Òà ƒÑi¹)HS£rtQ²]¿‚r#²Ôò‡ïú+.ºh7ûžr>++G BפCMÔqðȆBåHéEå ‡6×UIÉלlsçwrÉ¥—c(ètÖð+!ç>_ýê~®yZ2a‹cì™\Ï X]К±\ÿŠkùøGþ§]ö4víÙÁŽÝ»xÿÿú^÷‹¯&:%?×úLÖ7Ñ]ë“à¸)±\$ Cz}E–Lá Þö?ÞɼëƒÌ¶]Þó¾_býl‹NM›'xï{ÿ+·}ý«ÌÎNqù•²|âQ<×Òn5¹ÿþ{h»ÚU.zÆ•üå{ÿŒµ£Ç™™ÞH¿—SKP¯!HK°†ÞJŸFs‚úúY;Œ=±J ÆWÈÐÁ•.SAÀp0À¸àyþˆ,�‰Ö%~#Ë Œè´`Ûöüï|”­[¶01Ñ"Ï3¤DQÀÒÒ¾_î Yž ¥$ CŠ“‹H!Ê$l¯G'ÌÎβaý&’aB蹸žG–i¼ÀA:Ð8JaÜ�£ Ú@{r’/þüÿo>ÁïýÞ›¹øÒ§q×í·qäÈ#Ü{Ï7yös¯! %<ü(º€»î¸W½ò¥üÄO\Ïe—ïbyiÈÆ “üÑ»nàìÝÓüÚ›ÿŸ»ñÓüÎoˆw¾ã Þƒ´'7ñÉ}‚¿¿éö—²ý¹É!÷Þñ ª*¹ãâNµ‘“KSÈôUêÎV†Ë}Ž=J}ý Am‚•$ KLÖ&ŽÏɾÁ7¼‡ 6U¹üù/À™ZÇ`áIfhO¯£›dÄË+¸^@µZ§H3V—NrüèvŸ½Á`Xò7GÜé’œiw­×ë%ÿÙ–cýÝî€ ŽOu¢B1⇌`euß÷ñ<a%ÒQ¸®D ot<QÒa0’ĬCTðkUŠÕ¬­-1³¶Íñ‰k¬±þ=JJŸ ˜Eks²¬C¯ˆ‰°8~Âðÿ<vÕȳ2 híÕ'O»Üýp›ÕÇö°> 8ÿ)Û~dŽ'¯?›™Çr|ò “gíabËY¨*h•щ#îÞË=é]6}jÓ»9·9ÏÓçŸÁÎɈïð&$d:cÊc&\Ïls÷‡îFêtÕôô4Sí6n§Ãâñã ﹇táÃóÎCÅ |åfì‘#ÈÉ6²ÕÂjMr×]ˆ 0;v=òÉÁCXc ¶oÃß±ƒä®»ÑGÁÚ¶Û¥X t­F[kÔ`@P¯_Í£Óå°ý~Ÿ"I I(HÀözd<ŠNbÔæÍØ³ÏƶZàAåc5ÖXcýpét�ËqÇ! C‚zöìAä96 ±Õ*jÛ6¢­[QÆøMû^«§ÇN›ªB´ÖgŒƒÓ+r刄O–¥H)eQÔ¨Êó?Àu]¬-F)/ÇqH’!ZEN¡3­ Ò4¡Þ E@•¦«Î 8®G¸J�+ÂqV>Yž£ M‘Çc±Æ"pF#` ÚX%!2ÆHÇAkM·Ó§&}*aƒÂÒ4%Ï õ1Ê�­ 4£ä¦0())²œÎêZ9Î)Qá2/y¯iš”íÐJ’f1Ƙ§µ4l…(ˆ‡=Œ+@ƒ¶,¦’›jŒÎq¢ˆn¯ iB–¦8¾OµV¥ÈŠQÄ{@¯“#¥¤61QµiL¦S„Ðä¦ÀqCêõ*a1ì¬yµšåÔ‰ãåà†ƒ$¦Íñ¾÷½ŸLyÓ›~)s<×`…Æ9ab5¤Ú"dYh&eŽ# ¥±TT«5\×aýúõÜw߃×eåø Í:Y–ðšŸü ~é o`ii™öd AɉUÖ`!MsŠÌ§¿|Ÿzí ¹ïÞ²J‘e\ÿògðºŸ{;׿ì%´gf0©ÆjÅ —yr3Ìc†EŠÎ<¦fw³v*â'^ó&>õ÷_a×v÷¼÷·Ø·g+yÞ¥È{,-­2»>â§~òÅdEB<X# $y¸ë&[ÄÝ5zô;6ϱ嬭<òåÛxê Î"r Ÿg8žƒ5e=V—WYëuÈ—Ö˜9{'‘ O­1±¡MfQ%"ë$„µˆLÄè¢À-&T*†Ãá™äÇ`0@)ÅpÐ/‹o¶oåáGffffÔPê±²²Š1º(9³Õjµl$GacQR’%éÐqÜ(B ð<¥ öA2kÉÒ !GáK—^7æ?¾î7y泞Š_ü,’$çéOßGQœËË^ú\üÈãч¿ÁË^ú >ýÉ/°¸¬¹á£ŸåÃú,/¹~ó¾wÒž<‹Çy„³¶žÅ?~ñïyÅ+ÞÀk_{-ÿáúWƒ…îZ‡|àoø•7¾“¼ø®yás¸çÎ[Ù¾c;*lsÓç¿ˆŽªXšHºÝ5š+ct²‚J ®pñ*pdë6Ÿ…{r•‡?ö1îð!¢ºËü…»q¶Ì£—œ¨J’åTª5V»}⤠ÆbµÅw6βºº‚–</Δ¢•üd~€’F£Žç¹dYJš'T«–—–Yºóvæ7m¦V­áù^¹MDÉýëõ;Xa í-Ƥp±Ö  A‘—mQT¡rºÄ¯ÙÂw%ÈñãXcý{—ï·‘òú½öŽèS˜ŠÆÈ:Ò¯ ÅÿAãHJp\p],¥¿Ú_³<vHs|Å'6ó`e#w‹gË*Û.(˜ñçhe[ò‚æî*ý™>­-sìeåä.sùŸaóÄ&.[÷t®Úxª¾cSµ  §{¬Æ«¤YBáh­qÕ—±Ún·i6Ë•6©ÒZ2cA€ÐšüÔ)–î¾ge•Ú½û©ÎÏã_z1Âu)A?úÉ ²ýû±w߃èvñ¶o£zÁDóóØS‹ÄËËè¥EÌÊ &Mé7›ô ²8Æ]^¦1*Ýü~«½^¥•|­‰„ 8vŒÄ÷)VW)Ò¤,瘙)¿*ø.P/c5ÖXcõƒ®Óe¹óóóg°cRʲ¨qv·Ý¦yùååÏŽƒ'UŸcµßïãûþ™tih­G#ðú §Á‹Ñ¤‚z½‚µ–8ày¥Ù–eÙ™†z€¢(Gc­µgLÛ$–B瀙Sè×sʱ}©P£ žBç(G‚(˯°fļ)ç‹"ÆhS¦­)yPJ”mÛ” ¼²,KgŽt˜™YG%ð9Ùé"«>¾ç#]™çè<%Ës !Ë4«k0útYV9êeÊÕ÷}мÀŸðÈâ!Æeᕱ€!ŒBÒ4£È Ã>Yžž15àûC` ;JäJ«ÐIFµQcmyŠW*’QØ‘eÛ½ïû¨Q™W2è†óóÐ&§ZHº’«êH” É2XíwiDišRäA­BÜMÐk)ñç_`Ïž6W^q1 ÇÒh)Ò$!Ïb|7"Ëñã0 P”æPKcÑZ”,“Íy^°÷ÜóùÒ—¾BÖOp\…ëHºñ€¹ó,/w9pà0Û¶mc8,ù»y‘QÂ%ð›äÅ 7âiW>;o¿‡ ŸÁÅ—\ÀäÔ$ú§É[þë¯àÕÇ¡éUðÚäË]ÒB1;wqâqËWðªWüG¦\~qÈ[ßúKìݾŽS ‡ €JÅCH‰ãYŽ}×uñ\‡ µŽt¡‡ïûøžƒ>«ÝQ«pù3ŸÍMý4æðþüF:ñ€Aœ¡Ó'HZµ&aà“šœµnóÐvîÚAWÇ uA‘ex¦ÊD½E¯»† ‚ LZÕÑ ŠÖבXk)Š‚‹.¾˜…cÇØ¿?<p?ýÓ?M«ÕDëœa< IâTí¸¸ÂaÐ`µ!ô|D1]sñjŠ<·x®Ë »†Pe©’¶!stn)tÄEy>•Ö$ŸúÄ ,‡—¾ä)ÝCˆ” pY8rœ tÈ3C³á!e‹÷½÷·øÜ7Q©Öi¶ê¼ò•¯¤9Ñ`mu³¶N#dŸ·¿ý¿ðŒgîàu¿ð“ ú‹¤IÆÛÞö{¼ûO>Ï«^uòg¿Ëb÷ wL¥’™Ù³iíðß~çíìÝÿ¿õ¶7³cz'‹Ã¬Ñ'²=ò^BÜK‡j­Š?8'Nðè-·ñÈýØröÙœ{þ,:9½.ª1…ïé bp}´µœµy;ýþ½N‡•ÅE¢0 <<¯\ñs]·LÓF¿JDŠs&E¾¶Öa0ÐjÕË–kcè¬u)ò|´`SgÙ¨Ô­Bžç£QJ�Æ”¦­.$ÆZ”r©×}¢¨Rßâ.ÕÈEØl|Ök¬ñ%4ŽS!Œ6á º1irˆ_' ægŠžà«RP©B­ŽŠ'`).èɘ ;³sqrË×\=Öåà]]&¶õñóëºø¾ä”]âÑî]|óð€ô¡ 8•}›öqñÜSÙ;ss•9ù]˜aô@£ûaÄwlÈþÿMÿ1b-N£A´{Å£>BxÛmÈ¢@…Á9{¨îۇК¬VÇÆ1ÉÊ*ÅÇ?Ž=xˆ`ãj_Lõ²Ëi†¨Õ0º`xü8ùÑ£Ø#G™ÜrSÍõÙZ““ßw€”’F½ŽÜ¸½¼„í÷ÉÇÄ16Ëí6Îô4ÕÙY¢F£Dé1>„Œ5ÖXcõCg®þ«(ÇA8NY*:Ök¬žfÀœ6@O¼+;¦¼xsb´.è÷„‘?J`YŒ-è÷“ÑȾ‡–¢È‰µz¸‹ÆZC–%ãBœôÈ E â$ÅÑàù!…Ö¤yJX©€*StR8袗Ö:)Gü:1úå8uª³r|W)”PH%ˆ‡1{ ¦Å�� �IDATËËKô:üš‡S`4ÚA€r|db±Â ]Eyñ%• Ð%%Q%@9ÏóX]]%Ib„ÕÄÉ€P£â¡ò5– 7„¥ÞR”#@JŒÕè,G`ÀQ¤EŽ?2‡ÃÀ£×ï€Ñµ*ñ &îq}—$‰q„Äu]êõ*I“f9f^g•4"”Ä÷´qÑÆbŒ$ ªdÙkeYtå(&§¦ùÒ-÷óÈ£‹¼ûݯ£^¯& t׆T«^o€Õ(ÀbqœÒLÆ~³4š”Ëpƒt¸`ß>VW‡¬¬,3=Õ¢Èbª2©8ûì½|ãžÇ¹úê«0„(t£s$‚\ âa—½OÚÛßô\vÅSXV•Ÿÿ…çñËoøs~êg^C³åE ictº€ð4“Í zmÞõοæ/þü==žòüÝÌ;~ÿhO59uäs›¶°pô³­9:ý.ES«yA%9üàÃLNL!ŒÄ˜¿ê±yϺíõð„bÿm·sÞÆõø¾ƒ•åxdZQ¯5ñ}—aÖ§ Çå‘;÷sÖS.Ä_ß`eÓ¨V°ÆpòÔ"Ež199‰. J: ñ0!Š"”´X+ÈÒkìϡټyžååE–——˜˜h’¦)Ö€Jzh‘åÔ£*A¡•B¹–Lç(å•er¢ü¼çyQÞpŠÏ÷(rðÜ*aPÇZÉ'?ù9ÎÞSçIìE›¾/é.¯°y~š$ë!$¬¬® óŒ³woâY×¾µÅ%Ö:+ úǰ¬U[$éz“?úÓ·±cûNž:ãÖøÀÿ–?y÷çùÃ?þ)žwÝ Y=µÌtã\nüâ|æ¦ k!·a?>‡{„]zW¼æ…ØŠ`Qt@¶Èåxbâ ÁÊÁ£<øµ[i»>WÿصøO:âÐ=<vçãØ �))„ÀAžg ]ºÝe”’TkýŽBƒ°Q¥Nš–èŠÓ‰ßÒø­‹3 FqœR.Py€Ås}6oÞDQ”©ÿápÈ`0 MS\×-ÂäX ô-P>YV  C–¥QnOƒÆ‘Å““­žÂÝ4>q5ÖøZëÀi@ñ(&ë’åH}áâŠ)=pÃ'–½*%" Q:2ª°|RsðT‡éÝ ÛÎr˜pÝ“?h8ùˆæ^7e›<A͉I=ÉR²À+ <¸v'Ç’œ¦ Ø 7³[íáªu29Ñø®½ac Y’‘sê^ŠSA ùïa§@Eá–­ä\@±´„{÷ÝÏÇÛ±ƒðœs7Ì#ŒÆ­T±µ|ñ‹Ä÷ÞƒH3Âõ¨^ø¼Í›)–—‘SSÐhŸ8Aqðœ8Áô–Í4Úm*sëQ­ÖÄd­R¡:?ϰߣ·ºJqø0fy㹸ss[·R[·ol¨Ž5ÖXc5ÖXO”±Z©TFÜÀ〈†!Žã”¥8iJ³Ù$‰šÍ&ƒaŸnw•8é†Bg4›M€n§O¿?(¾1eâN)‰ã”fž1Ö†ñ�×Uä¹AJéHå฾ïaòœ,ÎXZ^d¢Ù¤Z‰JsÖ”µÊQdY6jX– Ê¿¯‹²�K CàúdYŽ«¢‰++Ë¸Ž¢ÖlÐ59Y–ãHãyäJ¢¬%ŽûH×ù!Ö–m¼C³ÑD½n!QÒaÀñ(tA–†r¯·†µ–V«E¿ß£R‰Â⺠Ç)Ƕ­± ú]„S&=µÑh Öq¾ Ö¨1ô®®5Û˜Þ�×sJ´A–ãXM–ÑiBQh¶ÀÚ’“)uAaŠQ"jµ*µÀc¸š±aÃÖú]V×zD >üá/°swƒ§=ý —ŽàzúE^Žû{.\¬°dizÆhRJ¢uÉ|M“CQh¢©&[·ÌsÛm_çÊË/¤Ñ¨2HL:äÚk¯æïúCÞøË¯¡°VP–z½†É ÖÆøA€Î¶îš¡×“Üs÷ý¬ßv×½ä…üõû>Á§?y ?ýsϧ—-£\ÅêÒ2Ž7MœJÞõŽ¿à­ÿýÈ­åMo|:¿ñ–ŸB&˽.µj“dÌÌÎ…|ÄÍÒœJTeÐOi5&‘ND<¸wÂCE>Ês@ø<ëÙ×òÁ¿ý;¶]{ µHé‘ Ì´§Éו%s<vŸ{.wÿ×X;z‚ÚD€+Êý;Õž£À:ø¾fì_Ž Nßj]&¾Ã!­V“0 ‰¢ˆç>÷¹¬¬¬çš8N¨ÕøAÉKEH+ôVÖ0YQ„Érr 2ày’,ŽQhŠ<'¼ (‹è)ÕzO|âFÖMÍó¤']À­_?ÀË®¿ŒÕÕ%· V˜hE »+ )™ž¬cÚŠ"—ÄÝŒÎpTF¹‘ vp½ i2àÜsöâ8ëgC>ý™OòÖ·}€W¿ú"^üâ—¢µ!PunúÔ×xõÏü* .T@aƒ ?ó£ÉŸþGÚçn ¨x¨vƒ¡8Îôì Í Î㟿…[îø&»ÎÚÈîË.FMn€,!¬ÅèAŒj¶¨NL€;Á½YšPo49qê8³³S$ÃÁ¨Eã{.…6 ìÈTÕHébŒ"ËR´6´šm\·\üñ<ß÷I’˜¥¥ešÍAà!´Û­ò¸ª3¤2äyŸ,×Håbl„©éöWÈuLšÆH2ebÒ<a8ìSŸ·Æk¬ÓR´¶ÚM8fHwð(kK·R·UÂp´¶‚óöEÔ6¬G-w±'f>i²~!1ìœ+¸ä’*wܾ›î¸ä¬û;|–&«|`áîì§êÔ8gï<ùÊ-äGg1ÝFT0äwé‡åä,±Äš·Êžö9Lø¸Òýw³KÇ¡ºoÞÜ,½³w£„ Z¿f1@­†Ú¸‘ÚÔBIÔú9¢V‹`Ûvœ™uåßüó÷ÄCò¥%Š“'Âé™Ù¸&aá8íIL³Åðè1²ÅS˜É)Z×=ê¾}¸““ãcÅXc5ÖXcõÄ«�žçç£ó^¯wfÌhmm­äS¹9ÆäxžƒT`ŒÆ¢IÓ­5QäÓé䬭­Ñ¨7½–¦­Þ¶ïa18Žƒ”–B[ò<ÇQî#=‡j5@÷5y‘’$G ´ÑäY†És””xž‡1†4IH“äŒI¥T™T5Æ€4 5Æ¼àŸØc¥™eRá¹N9úÛôãJ*œ uOÓ„,IÎŒkgY†5†Zµz¦ôËóÊ×RªÑó(M_Ï+Ó½J©²‹’{¡„D!PÊ%—9+ÍÙY¦¦Ût‰æ·ày®«ÀXªÕ?ðÈÓ]deJØ‘@Ž”…ÁQNɘ•K–Õ•S4k„¬°zlvÐ`µ;äóÿx3ÿñu/£9±pìÂdÄÖ¢(Ó¶ž«(¬apß-·‘%‘™Ük«=¤ã¡“”©©i|ðažý¬+YZ:…rCz½{Ï?Ÿ<ƒ;n¿ƒsÏÝë„©&K3<WḉGalºÊ³®9¿ýÛóŒg]Daû¼ýw‡ë®}?òÜ‹™™©³²¸Äºu;9µ*ù•7¾…÷ýÝM¬Ÿ‘¼þ—^Àëþãõdƒ“è´`¢±Ž4I1ÆÒYZ#ªT˜ž^Ï׿~;Û·ï ÛI𔇱‚l˜ÇÖ­k£CH ºC"•ánÜÀž'íeÿþ§¾ôEô{¨Ê0M¨6[¬Z&· ~;¤>ÕbnËF`úœ­e {%ò ©Õëhm�”Š0 IÓ()ßÊ:Žã˜$‰i6›A£¡ÐšF£Mž¬­ô‹ ¹oÿ7ѺÊAºe YR Getn™frsÂP¢\‡•åSx^AÜcëÖm€Ï 7|ŒaÜçÇ_õrZΧN‡Bar˜ß< RÓé¬xUü «,¢âá¸Rit‘Òhmá×~õ7yÿû?ÇDÓ¥ÑlÑï9~¢Oµðú×ÿÍÖ&tžqË—¾Î‹^ö“\ý¬ yÁ+®æäÉû.-°¥=Çó^ø*nýègèœ:B¸ZÃÆÐU}¾rÇílu4·~ê3ìø0—<ûÇØuÕå“¡ŒFkðê´ëÓHmºX["F\WaMŽ-4K'Ó¨××­% ½^—jµ^–³é£Ë";¥¾ ¥$‰“25/ËÏèéãçùÔj5”RgŽP.¢Ôëuü@Ðé­’¥Õj“,Kq¯L![ƒµE'=Dž¢*>Êõ¨TǶêXcõ­Ž’7D® õ,‰´†BôöîÃ!¬B4ÎÄÕ ÔÔ4N;Ä]ê!»}Šck`,­ÅŒ‰å1Ñà V|éá!¾ó8+›xØ<H­±oâÉìk_̤³‘E¿É@ú”Üýïü)”W<]Ñ¥OŸBTœ ¡ hq�ÿOF·ª×ñ=CÙ×ê7HÏ+Ñ ¾ð}”çlßÓlâUk8­¢RŽ JÏÃß²•¢Û#ÿð‡Ñ'N ­A6¨vûÏæ(d£jM`³ ³º†QªÕ™›Cü€Ác5ÖXc5Ö™±šçe ’ëºh­)ŠÏóÎ$VÃ0$Iêõ:ƒÁ`TÞ¢°è²‰\ùKQX–WV8~l‰‰I¤,]Ƙ§ê•Èaœ¢¤D V ¥ƒÎrzÃÕZ,×XRa0ôq”D*F†Ä(…ü~ëisó´©QEÉw¥4:Ï#^íå)JúÃ> GxXé”åOÒâ8%z)|”#ÉÒ)$eãºïûôúebU¥rThf×uH’’…êy.qœâºejÀZÊb«<Çuü[eØ¢@ù>Òu°X’8&hשW«;tˆ™]ç`Ec)ЬÜNyŽ0m Gá¸NùÚ$ăéz(§äÄ Z§DUŸ4 büh‚¨>Ã{ÞkÃsžsiÖ¡^õPò$+pý€Bè<AÛçÄHÂÈÇõT™ÖaX¥ï$(×!Ï .»ôr>÷¹/"=…±ÍF•ãÇY·a333¹çž{¸øÒ‹é¬œÀK®Súý˜Vka<á“d}^zýu¼ïo^Ë·ïçÉOÝCk"d÷žÝ|ø#7ðŸ~õ— +ó|¸Ãù·¹ñÆ[¹â’oûݟ墧ì¦ß]ÁRVô ”ÇwhML Ã>3ë¦6±ººÆ¶-[@å@’öÊ%ôŠ>ý,¥Õœ`ûSŸÄ§nø®­ª€ƒv=†:Ç KÅóÉâ*;÷íå›·ÞÅæK. X7A_g¸žÂ†$)÷ÍÉÉ)ò<§×ë¬X ŽãEU<ßÁKàWè÷ú%7x˜’&9•J0ôËd¸£ð\¡¡†€ Æ ÝŒnÖ#Ï-¾l! EŽ)aT!KSN--“ç%ãsË–Üð±ÏrÙå;X¿élNþ•¨B‘ÆLÍÎÐï ɲœ$ëÓét8ÜY`×Îsqœ ¼¡sÊ<ׄV°av;[7àà¡că”õs[xÁ󝿝xs7rç÷ðÙÏ~ŠßýÝÿÅå?²—wüño²n¾ ›øÊç>ËÌÜFNž¼Ýúi<ÇG4UGò¹†üê-ˆC ¯¹þ|þÃÏÿõ-;ùâ?|’}æ«\õ£OãÚk^„PÝžÁ%ËQûjµµ‚4Éð+qêœ)Ÿ CŸn¯4¹]W‚d¹Xa!M3bÄž†( FéâJ9PRÜPJá8e?K3”’ †�²~B¥R¡Zq(r;â©:8µ ä¯ˆ‚0Œ¨6jX«±H²\3&äŒ5ÖXÿš¤t‰Ây¦À®‘¦'¬Äjßic•ÂÒ�!€Dtþ¿£„�×E4[¸“u¼S=túM†+‹ N-°©¿Æ–ÚzN©¾r$§>FR½ƒ™¹‹fžÊÕÓÏâ,÷\—`9“X º\ÿŽ»†,–°ªWÑ¢ PA‰�ø÷8.2ˆ¶nùïòŸ¶Õi·ZJ¼éi¼v»D:HY–‘Âuñçæ°½½<GŽø­rrêõÒ ýz½*D{§=é®á´Èö¢VûÁ{¾c5ÖXc5Ö—± çù¨Š3…9Ýn—µµ5¶lÙ‚1†'NŒZ¬s¤´XJc¯ä›:$É€V³Åú¹ ‡CÒ4C9O¹gFœ± ”^£EJJâ{!ÚfeQLࣅ‘‚n¯Gf µzY˜”$X=JdJÐ…Á« ÒJ¤•ØÂ‚©$&+MWéySà:.nâÊ‚ÀPxø¸Ä¶,ÔÒÚ`=â¾f­ñ<( ÃcÇŽ†!•JT9.ËKË4&ê(¥Èsã8DQ•¢( ½N—‚•³Åå¸(Wàâkͨa‹¢ÐäV#1 sõ:‡ïlÉ»•RbÆuŒÉÉó c 0Zò³÷žQ’õ¹ïï ;Wèê09h¤QN(BBc2ŽŒ0 ’ÁÌl‚Ï=8aÀÆ"ccŒm‘³ÉYXHhFÒH£‰=*ìø†ûa7ƒó9×6>Üuê·V}èÕ]ջ®½÷ó>ÿçÁÚ%®6hâ¬ÇR ¤Âº’•IA?ë1.JTÔã¦ÝÅŸþéyàÏË–m3L&Gé$ž:/I£„bxÕ JâU›Çë�­Æx ¶ÇãѺF£—Üÿþ|ýë×ÒÔ½^FÓT„aH>qÉ%ð¾÷}€ÿö¸ÇÑ4%u9d¦ßÁÛ g+ð)"”ŒØ¶{W<á\ó·Ÿãô³Î"‰S~å¹ãÑyÿíò'`M“žøl¾ý­»¸ì~[x×»ƒÎLC1:ŒÍŒí& Ç–Ž ¨ #…T1ÌFY6ààáEŒ14ÆÐ˜ Â5¤* r%"7t¢Yºé�c >€p&ãÄ“wñ¥÷½Ÿû?éiT“1ºÓåh>F75ƒ´Cà,VYæwoÇ_w=‹ß¿™™™{ C‰­çÃáï=ÖÚŸ¢™6»³è['ùx”SW†</™L 6oÞÊÌÌõ!YÖ¡i R4íQ MYa͆#Ê2ÂëÖÙ=‘i†pcFŒ×,k£´bn–fÜxã $YÆµßø¿ò¬'PMŽ ”¦7˜C£YY·‚¾—:f׉»¹õÖ}ãÈË!$Æ5xj‚0যç™ÏzÏ{Á³¸óÖƒ4dÇÎÝÜqç~󷋯_ûUî¸s‚õŽ×þö3ø•gÿ=· GöpÇ·®#®-»/¸:óÌîú Ÿúèר´ðmX=¨‰ˆ�‘iN¿ßÅôÎ9•âXÎÎ3ÏbüóÄ'þ1ù…ëù‹w¼‰h~;‹Ç–˜í¥ßàmE‘X ãÑ*i'£.-Y·Ëᣇ™¥˜TäùçÆhà¤(J‚ DW5Öʲ"Ž‚ $Ž2”jÿƸãîçCœöRÐ4½þ,“|BPaá±#H)ét» 4QØÀSçct  X£n<yU13=nM™2å_W5Ð4Ý~ÀX_1Êo¢5©OèóˆÎ6ˆ{ÿÊ"È@¢².ñÎM訠œ¬@ϱe!ã’#–Î]c>{«¤§7qîÆ‹¸p穜;{»²ÝdBcºp8ò¬XÏê $1üïêbÁj±ÊÑÉúªÏ¦l‰þ¿Ì­úOÄUüÛB©õÅaˆš›#ºðB¢ÓN#Ù²…ôœsQô³ùtµ&غ•ÙË/Ç­ìGd’ø”íˆ0˜~1L™2eÊ”)S~ºÂªÖzÝ]Ö¬—-µ Ø7n$I†Ã!q3 Èó1Ît´Óg"&в,Ã{O]×4M{†!?.Ʋ¶8›¦!ŠbŒ±ëÍÚÖxânŠ£u¹E:DjEY–Ñ>Nˆõß+!‰ã˜µá*J¶Ý~ÝEfL›ù©”n]£yÁp4DuU!dëz Â�¸q…ñã$pàÔmûwhT†!EY’ç‚0 ÛípðàA–——9ëì³ Ã€ªªÐZ£u+"7ÍúkÔ¬çË*…ó¾Í+Õç Ô¥ˆ"Šr¤.d]¼1lÛ¶…Û¿ó=œ­±BÚ¼·íE‚ôh¡¨«câ¸uº:"Òc¨L…4ÖVèÐc\MÒé0Ø´›¿þà[ùÁ-ð²×Þ“ ö€`2Yc´¼Â–…í(!1 xA ÚÔÆ10Ö0ÌÒét˜½8eiyĤÌéX]]e¸²LÚ XY1;ØLc%|àxÃ^Þ½·pÎ9gpd²‚óŽN·C]å(àPŒ)xêÓÏcýBOغ=ã¾÷»€+Ÿ|žúÔWràð*{÷,òØGžÄŸüÉëô=«Gï ?3ChF£ «“5„’H3)*²îee¸ö7pÞù÷äœsÏ!K4Æxªz GNiLé©G%¶,Ûš4’œ¸ûÞÿgïá’;ï \ØLÞ”iÈÊáCd¦¦“jê.t6Øuò Ý»ù3O……¨Qö¸º-‘j0¦mŠ¢˜ ÐZ#„ ,KêºnÇÎËšNÖc\Ö\í×¹øâûÑGU5dY†N:°:$S&ù*>ŠéÅ}ÆaÒEÙAÚg%ζEVQ”°2\&Iû<ä¡?ÏÁCGOrÙý/¦¬k¢ aíè*y>!/*úýA$Y^=ŠÔš­[w`ÚÜܺ®ilIW+6oËX\º‰"·(Õ¥;3K^ä½û>ýÙ/q‰ÛxÔcOä9çÞíLV†wpèà>¶oÜH‘öì=Æ[ó\N=‘Íð›¿õ*n»ñë¨Øó”G>w½ë¯éœ½Â–³N%/Ög[gÏâý1.zã;ù×¼'_þ,ž÷K÷E×a�¦2SS—xA–¤8c‰“ã ?øÁì:is3óÔu+ÆIJ #´Ö”e’!Y/>þ}ÓF}Hʲ È „¤iL]WDQØ:‘(j÷ááZNe˜Æ³|ô�RFÌÍÍSæ%Aà*B¢¢¦OƒˆÆ8êÆMZS¦Lù_JŒ£uD–Ícœ]Æ™oòõ…t3«ØJ`üÑKí2°B [Wë¿ÀÇî ðM#(Ç “Cz¢….¾Ù ›ç‰ª€3-Š| ¨vJ6Îw8{p7NîœF$ÛÑò4ƒp=±ÉµëÎÿ&?ÞŽÊULê1Ëå2x˜fÙœli_ÑÙí’ÞçÞh¥‰P7þìº?…@t.½߬ T…˜ÛrÜ…;eÊ”)S¦L™òSV½m/ÔMcðΣ¤¢©kö<À 'œ€ CÓOZaQ)AGXÛ`l @Q”ÔuCgäy;nÞévÚ1xkñäz¦¡Òš²“Ä!RI†ã!a&M] TeM]UÌn˜‡õqÿº¨pÞ !q”Ð4ͺÛV u@…!©ëºÍ2õ‚4é’õúˆª$Žbð%^&EŽ!Ni‚0 b"òbˆ[/øisJ-R ƒ>“ɘþLýwícÏž›8ýô3XZ^E ˆ’ˆ|<aee4˃�­HE9Éiê)–Æ•4EM „QH©ƒg Ë++ÌuºTM›?Z‹ˆS¢,¦®-Rz¤h߇ÉhÄ$/H³ ï<Æ5X+°5 <Q@ hªëQÒg8´üݧoæÔÓàÒK/f8\$R B@šfë™±)uc¨šé¸š¦ªQ.À9{üZŘk-IÜ” ff¦!ë¤,¯¬¡Ã>I—#¤Š8éô38ûŒßøúu,Ìε¹ºVR5í`¢§ª „ΈҊ™¹—\zŸþÌW¹ê¿_Å·nø(ûö-ò¥¯ÜÀ%÷ßΫ_÷<¢Ø0>VÒOv1>¶†Sc*æçºˆ Ï]ûö1?¿I¹†óÓ4|÷{G8zt™™…ÜF¿§PÊ2ž â˜4éF¼ØXQ6#’Ù‰sœÎ9|õÓŸæ~Oy*¡tˆ,&Ù²‰dT²|ôLÙ4è3·0Ï{¾ƒsY–aJ Í ^®¡UHfgpÖQ;C+tÒÑ!BÆ£ ƒÁ ߺþ®¼ò÷øÀg9唓éõ{ÔeƒäD8¶mÝÊÞ½‡Û‹‰¨Í÷Í¢>aãª�ßhÂhŽ(0Äé e× »)Ê’0 ùîßå”ÓN¦Û͘Œ†Äa€tm4ˆPucI²˜4î°tl•þ`!4RI„Ô•e’ç[¶Í°¶š'šÕÕc>v„m[vñŒg>Чýò£˜ë¡ Âqë­×3“%lÛ±“fy¢Ùü Üç²3øÝ7¿›ýÇ*ÆÇ&\ù”‡³û„‘Õ<ïÙÏf’ïCwf±á•mX­1Pާ]y%§yðÓY9z+oxÓ‹€kjD”h‰ó’ñxD”ÄL&5EYpá…w§nj¬õDQÜšÊÃy·îÞM°µÅ¯ J)œ³ŒÆ£6*% QJ µdm˜Ç:ÔeŽ”²]„ 4“¼b0;Ë×>ö~ï÷ÿ‚+®x8Ï|îópMÍpi‰$ qÞëD‰—šN§7=jM™2åS\]/÷¤ƒTN†sM; #j¼‘—‡È'·ðH'&¦K‡pÿì±=Ž‚199n]X5F0ZJ©–RÜš%œK û§ãU‚r‚d‚ôø¾-¹+¸‹Ú·±+Þ{„ðë1+íá«Û…4ý×u1ï’©ºXei²„Å2×§ö~2-5åß-Tª4%=ó̶; Š àgõum݈~„üÇ£.¦L™2eÊ”)SþHS5øÆI ½¥.&ÜrÓ¸óö[é¦!¶™FŠ ÐëŽÌ†º®1�� �IDAT)òŠÑ(g4Ì1À9…’ qܧªˆ©;T äuCm-µi…“ AèèÏÆ¬®ÁØšÚXÊ¢F¢|ȱKä«9å¤@çjj—ƒj(Š’6ËP†Š,‹ E]4M‰15iÓëgøÆbÑ!„1¦2LWÑA„Õh/ðUƒN"Ò™A"´¦¨ ^jÊÊP7–N¯ ÒsÁç1¯1¯â•§²eS¢¢€0ŽÈ«‚IQ ‚€Æ:ʦAê4éúB§)ª› BTŠL't£Œn6 ½ œ|·{°xìTãDŨQú’ZXd¨ÉÇ3ýyNÚu*Z÷@g4RcUJo yœ‰ˆ£ÙV —’þü‰|ÿ[k|ïÛûxüå²y!!v†TÇô: ôg63©<£rBcÆHaˆ½ qÙXL3"KfZyê¦`2Q7%J *3ÁÒÐéõùæ 73»°XFÅèhìapÙÅ\÷õ½lÛr:Âõ˜L<ýÁVb·™€9”ŒÒ‘— +£œÇ_ù8>ü‰÷ñ?^û{<üA¯àkŸ»ƒHÂñƒÏæOYèÏ2^ÎY^^e49ŠËÄ©E I>–¬qlßz>‡5ô:;ÑjÀußø>M gž~ “¥eÒ$¦15aPæÊ¥ÄÑ ¾¢ j<ãÅ!$}κè"[1Ü,`iù6z½k ÑÂ&&F0¬ [.º; =®ÿÊ—˜•îXC3¬ñ¦fii +é`€“QÔ¥)<ÂiºYï$Bx)Y\<ˆ5*ÝÀ'?ù#¶îÚÁÒð.íà .]öC&kË0QùÙ݈·}̱Û48ãü“jB¯·@‘7t³–Ž.ñ¹¿û4çŸ{£á2Ö7­1tÒa0?Gw¦Ïê°À1¿°Ó´åM¦1ôº=6Ìod¦»acŽ£|@vN£<¬.Aù’™, ™ŒY9t„ÉÒ*3ñ ʅݘ@‡˜Ã Ò‚§¼ê—ùêÍÇë^ù4ÞÿþOsåU¯äÈ(@õúÜvøG¼ôµ¿Ë5﹞ry#=¿…³»»œU³È}p:o¾úù|ì›#¾sýÀ6h/@EŒjCÜïeÎÕHa µb¦7ƒ’1IÔÃ4àl›í¬¥1e>d’¯Q”«Ä‰ ¬ÖX][¢—uˆƒ Í)6V4dý;Œ©Á9Â0ÂV5Ψê’3Ï9Ÿ½·íçw~ïÏX[9̤ZDFÖQªÍMf˜“d]:ó Ó£Ö”)Sþ?¢"#Š6’$ÛHÒèd"Ý€: å?¾ ©ÛüUéA– ‹pËAéRÿä~"@ BƒL ‚YÂxQ´lB6ÑÛº‘ÓOßÈY'ng[g3y“³o´}ãÛYjŽð!B’ÆEÿºŽgÃh<âàè ‡ËÃLü„$JÙo$SéÛþŸ¡UjM0˜EõûÇ?ûY¥R¶–ç(ƒ°2œ¾‰S¦L™2eÊ”ŸþÙ¶‚N–E©QRÒ¤) óó|ÿÆï¡”gÛ¶­X'¨ëçD›J[Þb#L"¼·¬­Ž˜Ÿ_€IŤ*±N ´"M»ŘÊZ|U"ZQÕ)¡7“!„'MS´ ©ªg=I“ç%ib«vT`<ÑéôWYëp¾-ŽBøõÒ‰kA“׬އÔÖ‘¤¬³8!ðRâH'ðÎSÕy5FëVL Öó©œh³h)i§C¯×Á¸ç$q¯G)Dm @ž£¤¦®Ûˆ…n·ß>Žsëe ’Æ5T¦© ƒ�é®¶x (Á¸ª «’@xŒ74N`=à=ÒxðgEÑP:ƒ—’N·NaÇÂüVð–Å#+ô!EÙàu‡¿|ÏÙ°Ñóȇ=€åý·1èôXÑ:A:Šœ1¸¦¦®mÛRÞ$mÀhT ^’¤ñz‚CIO Î<{_þâW¸üò‡ž™~†D2\šð‡<†ÏöÕÜôƒ=lß1ƒŠ=GÜÆLoÕ$'Œ !“±ÁŠ˜Ã‡–Ù·¯ä•_x'ýN;ë$^ôÂ'ðgïþ¾þå/sÖi§²:s‰›9zô.òɘtn'Õx…P¶edKK#æævP:xÙËþ€G<ì2N¿ÛÙ,º­-*P>|ùùMT¹¡PŽv!Ak²(Å'Ä›6²ý¤]\û±ðà'^NOZl9Aõ2d’Ñ­4¶ª`ÐgÃ)»¸é‹_匽wÒ?÷òcÇYH¤È4Å Áhe‚¢("ÔoÚÏ¢Š’8$MSDRMj>ð¡óè_x,³³óŒóéA¸œÅ+Ã`Ó< ósë¨L© ]€[£¨k| ˆ|Üf;OvÐ:`m8dㆠ¬,-qîÙg’&­+Ö[¼h·)КÁ`ðâCœõ ×–‘’´Ãìì<Æ4Œ'#lÓ–bôz}°bee…ùÙyê² Câ B E˜D£‚»Nc¸÷†‹«ÜûÑ?OYEg=žÿ²qú¹§ðÐ+_Æ›¯~ozÃo`„aTöøÃ?ø ^þëW3»m–»Ýëî}ñNúóÇù’_ü¥ÇòÞw}Ž~ø#<î &N;LŠ‚ù[†m”ÉËߤamuÁìIgX»î€§ÍPþ‰{ÊcLûÙèd ¬� ²8IAÒ¬x¤H¡¸}ï’8¦;›1;?Ïd\233KÁe¼„N/¥¬—‰¨'ue˜If¨W Žì_f&͈wN\S¦Lù äFºÝ9:ìHmÃÄz _¬öëWH2º¤d€�¦Ù­0®nVPÇŠHüËÍS'ŧ³0¿…ÛF·±gí¼÷lŒ6±UÆ”Mˆ×žÒI ³îXý'‘�Þ{†ã!K£%ûCÈT²©·™MÑ&fÄ Ó\Í)S¦L™2eÊ”)ÿEÂjÕÔĤˆ¦a<£N>ådæ6ÌSÕ5‡fó–Øº¦ÍÒ’„AL¶#®UUÓ¬g“®­­âœG)M>™à½k[³KÑæ­"u@œDàMSÒ˜S‰ã XŒ5h-HÓ”².tˆu5Ee”e…Ôêxn«µ ‡Rª@"„Ä{ßÞ¬! úý>Ú9òÑ/Úçá¼Áúš *+Ò,,ÖúõH6›ÕY‹ hãÊb]d‘¸¦½àh…¦€0 išÂ‹”ív9ç¨Ë×Ô¨@ž¦©Ñ¡lóÉê SV¤2„P“u3šª@YC(ÁZƒÔxO*¼£mG¡…ñmdÂÑïϰÿÎDÅÌì€áp•­›Oå†k¿ÁÇ>õa^ñª_dǶ-î'”Š@*œ·¬.PQÎõXß^pIaœ¤Þ€óoƵ¯cQäÔU³¥'Ÿ´ƒ·¿õV&“µöLv¨K’);vžÈ¶m»ùÆ7¯ãn?¥cGpá˜a~+î&ŒIIÓMܲg?ï|çŸó7×|„¼hˆ$üÚ+Ës®z©øánäÕ¿þF>ùñw`ŒàŽý71˜YàÆoÁºŒ»v’—«Tn•$ÝÀxT1™ yáS^Ǿ; Ïøå‡1\<‚mÞœi,ÝÎ8Iš*”’TMƒPž Ðh¥(Ë‚¤ÛÁއìØ}2·Ür ?üîœñÀKs’þÖ–'4yÉì ƒo gœNzÃ÷ØÿýÒ?ëlâ(ÄŽ#¼TXg ã@i´÷J­ÇOx¤pxoPAL¯·À_½÷/Ù×+Ÿv9ÞI”ñ4X—c„H¬ðÄiÒ“t2ÆÞ✠MŒ„ÊZª&Ǹ”§,F$I‡(”:p'Z îqá…xgÂ!R*êªÂY{<¶mÁ ¢ukQ%"ÌÌôGQDQD§ÓEJE’&:t¨Ý'ƒ°ô°KÄg?úÞòê7pö†ˆÑ–m\ºû<Òx³8âAx(¯úõëùû¯|ŠÉÒa²0ãÅ/|,g\ô ì½ù×~çZnüÑ÷yë[ÞÉ«_ön~î»xÛÕ³ž÷x~ø•÷€õˆ( ’ÉxÌÍ7ß̧ŸB7‰@‡Y\&é ^!D›Íú÷…\/ŸJÓ´Í“­Ú‚º 1u…3ŽN¯Ò´¦, ´ä͈( ؾs;kËK$Þ+L#Xذ‰Ëî)‹‹ËÇs®…hÈ‹ ËKc|¯anva­È‚þô¨5eÊ”ÿ ×Ë®þ-mÏé?ÄÀOŠŒD�³³çpø¨ÇzزEeÿüQC2gÙžb†Ã ‡ö¾·/"ƒÎÇí5^i«þøë⯧*+Œk˜Kç˜Igè}:¢C@ðoaÕ”)S¦L™2eÊ”ÿr$JRÛ†Ú¼ Ï(ÏÙ²}§ŸuA”2Îsâ8ÒXAm^ t%1a`±XoH²ˆ,K£¥J©Ö™¶^‚•$É?8EÖ8ë1¶¢(‡L&c„ð$i 8²N¥¼x«tŠ’1Ö´NÕãâ©k³XåºÌZ{üg¶¹‡að“‘ ÖmkÛ2+Ý:SÃ0$ƒãNX!BJŒ1ÔuM]7ÄqB¯×£ªê6ß˲´×Ž »ÖÝhCŠ�ï}+¼:·~ƒ÷‚ lµQ •ÀcÒ„š@«Vè3Y/ceq‘|y•À:DÓ œEaQŒiÈó1ÆÖHé)ëG… AuRþâ=×ð¡~‚É$'K7Sä1ïùË¿!ˆ4÷»ô\B‘¯‰Ân’xȲŒn’' Q–v:d½.i†´Û'ŒfÐQ¡bœP¡ˆã¸ÍÉCiñ¶bÓÂÝ,âðÁ3›Ñ*¦i `1vÂÝî~:Ÿþü'A(T0»a3V*œ 1^ñž÷|˜gþò¯òÖ?{?eaxé&Oyê}ز¹OUÜJ]/óÜg>—~§æý×|"¯Ø°q“"çîÝ‹ÍÛv°2£’eí©kAuyË[ÞÆg? /ù}9a×Ntè™™íÒ45++C Ãûö½3¶¢jJšº¢1uS¶ûHple ’Œsîu_ýòµÔû`° mEÄ,tg© ϸ¨avžsîy/Ž:„¿åd'¥ª ¦qXg±Îg B [SÕCj–ÅcGñ^£t—?|ãó°GœÍ ;gðÆ!ED C¤npÞ€‘è0À ‡_Y&H4Ò7XSá…#J‚HÓ4ÖÕHI3™ŒÐJ²6\á¡{0A¨A(¼7L&CŽ;‚Ö­ðgŒÁûÖþã¬ã™™æææðÞSÅzA Ç÷}!Zk6mÚÄÚÚ‹‹‹L&Â0$Iâ8e0¿…û\ô�ý˜Gñ‰/¼èÅÎîÝàå¿ñ*J'©¼áO{<}Í;É6o¦©l3¡œwÞžû‚§óúÿç×ùû¯ÿ€?~Óÿ ˜4|þ³Ÿæ^çÊÝï~>4†r8b2Éqúý‹‹‹¬® 9rä“É„ ˆ(‹€ª*—âa�ØãÏ·išõE$…ÄhO†\ýÖ·ó÷ !û(‘è½î|[Ââ-ý™Y–w%‰{ 2žöÔ§óÍo^Ïž={ Ã�c*â8$5¡”·ÜÀ¡ý?D4kÓ£Ö”)Sþ 0óOný$ª¶çU03 °¸èÙ»×s×]žÑ¨]«ýg’­PlN6³;=•³‹áþ”ï}o‘åò�É–ówpÇdûÖöqÇhwæwpW¾ŸƒùåYvK4QÃÖÞVNÈv1¯æ‰‰§¢ê”)S¦L™2eÊ”ÿR4J—%qÄG”$lݾƒÕÑu¤.:ˆÑ:FOÓ”Ô¦ÆÚVÜK’¶Íuee‰-[¶àñŒ'c‚ ¯Ö›Í…¨ÛÅ[K]„ó(­èvúXS¬‹¡ B(u]“$ McP:„ƶMõ^"”$4J ¬mËc<ž¦1ëŽÕ6ª ¤Ž±n•ápHã=éÌ€*2ÉG¤QHÇ4¥A ‰Všq9,YÖ% Ú“tïÝ~Âx<fiù(ežÇ!N—0êPTiš´¥DÖ†Uõc—[ë|¢šÛ ¼@Î{š¢ )+¢0$Ô [[šºdaËFn½ùFlž£6-àpJà„DG!P¤’Z‘—9½N xîÜ·È­û†<îŠï»Üºç×¼ÿ<øa;Ø}òvšaE…Œ×Ö æ(óœlf†¢1aˆµCë:ñÎ`¬$¤ÓàÝÇ^¼€Ú"¡è¦ ;6ïæ“ý »OÚµ¼^Ãrî»yÛð¹Ï|…K.»˜ÕÕE6ìâÐáeþèMoæê?ù¦†óÎÞÀ¯¿êå<øçïÇâá½\ñ„+xèC/ÃãÙ0ßáCø-^ø«/å>÷¹7:œ#éhÐ{B¢T‡,íƒMxýë—·üñWyä£vò¼«®B)ËêÚ1ÖÖ, fijpÆãtƒ”!–HÎ{œw¬­­ôûè8â„ù Üëè×}ôï¸øùÏ¢+Ã1½îT1aŒLÁ–ÓNáàö°çÛ7pÊ »°uЭ"ŒwX[cƒðM[ƒl(°¶a0àmÊ5ý~¾ÿ}xýï<˜(v=°²´A…5aÔ C´yI'¡\]"¬KêR1£ñ È.N§Dqˆm$ÞZ–²Ì CÉ®];8óÌÓX^ZÂ9ƒ‚õÅ%NB”h…U¥Tëò®*м$I¢$^/ Xk(«‚ñØÇíwAY–hè÷ûëû‡@Mã,Y·ÃÃýpf –‚_ùûïqŞĿøpûKãØê-tÂ.3YŸq~'Þ,Q¹ ‚€ñÐsã _æäÏç¯þâo!µºåG8g@j¬…cKÇØrÂnú½>ÆŒGc„DIœöÑ:�x‡uk%¬;ä“$ÅÚVDˆã!Ö×X,ó›P"å%¿öF\áyW½!$MS£T„5RòÑ„ù »øÆµßâŽ}‹\ñ¤§²ó„“ùôg>Ãg>Âfç¤aJÜ›cíöïщA ’éQkÊ”)?“Yss'°gç{7:îv®à~÷SDÑ¿|¿¢8rx†$Lyøƒ¶±e§gvCͲX¡×ø±‡Äv"z²GJú“ò@¡è6biÊ”)S¦L™2eÊ”ÿÂj”$yõžPIŠINcLëèt¬kŸZaR!R‚Ç ¤'MR¤c sssÇã�òÊ0;MíÐZãœcyi‰,Ëèd]šªZÏp´Xk‘RàœÅºÖÙ(¤G…š¦1ÄqBm<Ö ðëcÈ¢uÃJµqm›z]…1A T;ªm[ì£(Bƒ-rœw4¦u%ÞS×í»÷mjžO â°Šâ(EÁh8ÂZÏæÍ›IÓ¸uÜE]œst:œõŒF#´V(¥1Æ¡µlÅç¨rK]6¨@Ç"‘PÕ5UUè€( –«Œ&%3Ý.ÃåòÕ!}c1uMej¬%Yœ!EHYUøÊ#$h C7%'²›o}ç»Hbꫯ~G—à¹W=˜ÕÕEºj†:/øË÷ý Oÿ•çÄ!uU„ε—-Îû6‹ÖyŒ-‚ ÂZOUUà 2R`¼Ã™Š$ì"˜Ÿ{àÃùðG?MÓ´N>T”õˆÜ”œxÊ6¶íÜÀ5×|†<èI;Zò§o{?ï»æ£Üü£#lÙW>ùQ\õü_AÐ`Í~³÷ºçÝøÓ«ßÍË^ñ F˸×Ewçì³ïÁ{Þýy^ðâ'âEDÑŒIz)ùšaváDnùáí¼ôW_È?{3÷ºhß}Ãÿd2†ž~¿ƒ±5e^cK–ô0uÍ8_%A…Â6jÁX@¤1 ¨‹a g]z¾ö¶·qû׿ÉÎK.%LŽ-Å5a'fh I'¥³u#û¾ùvØÏ:4¹i…k%aˆó†4Ô¦Äy‹ÖŠ¢hdÀÇ>rç ^py~„ÙÙšºAÊÖ1¾-Q@ov@‡ %¶,qJSÕMî‰:8%oyQež8Ò„¡f8\Å45A (ŠŠ¦vë15�£µ!RÇÇý1Xk)˲ý<�aE!««+ôgºÜ~û­DQĆ ð¾u“[㘙™AkÍh4ls‘Aˆ²áÛßø {ïÚÏÇ¿y=÷ý…Çóü翈sN:•c‡ö uB¯;‡Y›)M¯!£ ÕœŒ˜›ÙÈsç7¹öË·qá=6òÚ×<—3O9 ð¬,.‘ 6Òí�Áh<! $ãÕ;¶oceuÈâÒ]è0aëæÍ­Rà,ÆÔHɺ8\!„" ¬uëN×e:Ý€8îóôg?‹Üt+¯|å»X^ªxù+_F˜Î³|ä¢ÈGtìÙs€ÇüÂsˆbMm³ƒ7Üð-àÙÛæ9 |›-4½Áª;-¯š2eÊÏðI¥nÅÕ;u ‡Až n½ÕP×°ºê‰cètJAU Ò4d÷I! ý¾'Š,‘ˆ1Îà…‡t¬ÉdFìããªXÏw2eÊ”)S¦L™2åÿêW_pÉkÂ$Dëc-IU×(¥ ¢8A*”!ãÉ„@(‰óãV‡#Œu $ÖA†8“I‚••U¤ÌÎÐJãœmG‰×ó9³´ƒ†º)1Ö¬»å ŠâÖEª¼‡$ë m^c¤MU�¥5Æ4„axüï³8ÂzŠ•!ßþî·¹ðÒû"ðXg£ˆ$M1Öc‹Vm$€�‚0`¦?ÀOY´…;¶±ôú=¶lÝL]U>t�ë<qÒe<žP%�RjªªAëˆ^¯‹líhêÓTh-ˆ¢˜ÆX„Ö8ʲÆ5–4íe]£šÑÔ N>‰bu• ‰H²Œ ÁyêÚ ¥¤±!ÖsA«† èИ˜}â“<âQÄù^õëÀi§+ž÷üGLî¡^áä“w³°°g ÁÜz1©d›[+ýÞ,ee¨ÊbÝ•A ñΰ¶¶Š5†n·CQç9ñ¤3yëÛ߯½î}ý~Šq$tº (Ù'Ë6ðæ7¿—¯}åÛüþï¿÷}à«4µâA?w2o~ók¸üò‡qû¾o¡ä„<_؆……üáï½Ç>æè°ÁXÃ)§lç%/}#ÞótN8i7em‘*%M6ðÃoç¹Ïþ >÷Åñȇoã­oû#6mÇš‚  Çk$qÜÆ7H÷¦ Aà‘ ’$E‡ïQÒCœ$E‰’8k2±ŽØ·w3³sX­)kƒo,Ý EF ™„,Ìàè2îÜÏ®sÎgipŒÆ#º S×h)±MMÝTH%p ÏÞÛóš×þ ¯}í/sÏûœC1Y!”xÐCª¥b”L \ãæ¿ÿƒÁ j×Iä£éu¾ŠìuÐqŠ6 [ év3d£µ†0 —3A@’ÄH)©ëë’8£,k”j5Œ1€hseë¯ë†µµ5¼wtº¬5dYFÇm™œy‰µ­ëõر%Ž=J(òj•®«9|û^œô<ö‰WòÚ׿™7üÁßðý›¾ËÙ§ŸÍ–Á ù ø¼âÐ-?¢l2˜É·8—òÆ?|7w3\nøð‡>N–ä«G¸Ç=.¤öЬ?ËêhÂd<!‰cf=¬1L&uíèözt:ʲ ´V­KÛ·…xÖ:LcÛ¼åÊPÕT(Y˜ßL™7<æŸL¨-o¹ú],]áüóÎ`f¦Ëx²ÊòÊRuÙ³ç0ï}ïǘtùówгm[ÂW<%-åhB¨Dn8ôƒÛ¹íÖ#œtÉCPÉ ÿêz]×,//³aÆŸúÁCúYoˆž2eÊý‰¥‚nW0; íÃâ"]ôܵ¾ýmDZ%(+XZ¼`Û6ÁÎ’^G…%‰JH„4LIdBHx|"éømª¬Nùw`­ý©›¦aee…Í›7ÿ»c<SóóóÇ£•~H)ǨM™2eÊ”)ÿÁû6 ô§‰”’ÉdBY–,,üÛ'-„ ©›vÜYJ”ôh ¤FxÁz, Ƽh•eU£(%P:XÏ7õ$I„u­°Øë&ÔMë| ƒ€ È‹’äx†©AK÷žñxL–ÅäÅÓ´B¡$JIV×VtDÄ„R#e›ñh­%Xw¹‚DH±^ú"ÖI]7ä“1‘ŽèÎÌà½'?¶„NC¬pÔMƒÐš0 QI[Õ4­àÉ0ˆPBÓï÷™äï¼c Z+Â0¢×Ÿ!ˆÂVHEˆõm4¬®¬­—ZµÛÞT E¾J§›!¥¢* Ö;¬õGc^HTÇ nÝˉEè�Gûš=²ÈÂìE1&ÉR„ÐÔµ!ëÌrûwð­C{9ëÜKI:uð‘œ=Öø£«PÇLVk‘0;?ÇòâÆã5T˜Ò¤ØºÁ¯P±c)}© Zk”l]¬Mc:Ý>Î4TÆ!U@Yú›ó[3Ž;ÂÖPŒbfû;8º8äSŸú8ï{ÿ'¸ë€å®_bÇöŒç=÷r®¸â!œÁ˜æGï#‹#´äUÎÖ9ÿœ—Ýÿ¼êÕ¯áw^ÿ†ã5vœ´•¾ôQ<çªÿÉç¿ðW,ÌŸÉp-ç oz3ïxÇ'YZ,yÆS/ä¿¿è9ÌÏ÷X]Zd’ؼu"|â#â>÷¾ç*æçpØ6 ¡j¨ªãÛ3êª! BT Ñ*­±cãÝÎãºë®ç†/}{>ò!ÈTÑév‘GÙxV]ÎÆÙs;¶ñý/|‰·ÝÊûu4–�� �IDATì§Q®£ŸÄ;r‰Ä†‰n÷‘ɤDêˆ[¶ñÅ/~­—Þï"ÊÉhßãɈ0ñÄ‘¤¯’Jè <xÓ­%‹#ª²ÂyËÊêQ#XÐsØÚP:CS´‹!Q® e?Î+nëI¼sÌ;¶ˆRšùù™uWwŽ¥³³³m‰S uxܾ²²Bš&¤i¶ž±ªŽ—¹ý8ªcaa¡-ƒ2†Ú­‘ç åx‘»ßûl¶Ÿy:¸ìžÜrëWùÔ®åsŸ¼–—?ÿržó²g°a0ăD¡J[Owv«^ð~ç·ßÅ«^õt¤Zãu¯¾šóNÒ<æòÇÐߺ™ñ¤aaÃÒ4AI¤CâÌnB¨”BIGjÆãBhz½EQ`­! ¼àƒÁ€n/&é„:¸ÈüÜNVŽ.òâ—ü]|W>é|ücŸåÃy3'Ÿ¶‹ý·"ä÷ºˆ¹ù>IÒA°Æ©§îà%/y1UURLrBQ”%™¸ñ¦Iû½¶(lÊ”)S~†icR`ãÆV` `uÍc ª Û•¤)ÌÌ„„^ææqüOZT»¾?Õ|¦L™2eÊ”)S¦ü £MÓÐív ƒç,u]ƒot€”­#É4m$ÀÌL!ÖUå„ñxxz½ε#Ãe]ƒ°­`©i–…Ññ<F­5I’P—eQF!Î ¤Ð$‰"Šb²¬ƒÒmyŽ”cj\©Rc­E!q¶uŒIáAr\p-ËïiEØ0 Š&/ÛB)Ð: %*¨ŒÁØ%4HÓ”I1Â5ÓX¼…N§‹³9g{.ýû÷…ëÛåY7Á­ÿ¿vUYÏ M’¤„aHQ”åD˜ÆÇš0ŒhœßÞÇ5cuÝ`šší;OàÆë®crøá ‹êvX^]%ëöñRÒév™LJ‚ `ÿ¾»øæu7rÞÝϧӭ˜ÛØå¤“Oå _¼Ž·¼åjîwß­\|Éù:ð}ÙšzL7ÓDiHYæ :=Fã!*Nð2À5‹Cz‡wG³5R'H!‰ÂçUUa‡F·b«ô»=ŠjÈ÷¼/]{—<è‰H•óÅÏßÀ«_ó:¾qý!vŸ”òàŸÁ‘#>ôá·³yc—Ñp‰µ•ý$‘' b´sàÝHSצ®yéË®âÉO~·ß¹È†–×VyÁ‹_—¾zï|çû¹øÞ?ÏUÿ/{ïmYU§{ÿæœ+ïtöIU§"•(RUQPd% ´M´¢¶¨(mh_Q_[ºµm1` b`k‹EA X¤"VÎuêì³ãÊsÞk[}ï‡û~¸cô;ìq×oŒóáŒÆÞ{ì¹æÚÏ|þÏså{Ù±cšZ®þ»³xç»ÿ¥5»vm&ŒzTkÝv‡Oê“,]º˜±±Qž}öY&'GI¢~‘¯ŠÂ¶-„Ñ$iDž¥XJ‘g)Z Œ1$iFÒiVœþ’óøÉ·ÓŸ™eljiI?E!I£Œ¾“âÍ›‹7RcdzO2vèR*¶MfI"µ‘q@ÇÔU„U'É àóÌÓÏqÙÎbÞ¢%ôfŸ%ŒBÈöR«4AxEî±Ê<·Reç¦MždxN€-û{9UŒê[Êö±mAîTüTÿçh’DŒáXƒ%-¬ak}¿ßæúÅ:s탅nÅëÂA4 ‚&–U¢ø¾ƒÖÏõ‰¢ˆN§ƒR6ÆZÆÈ~¼?ÍÎÍY|Äl'áÜsNaót‹6ïçâÓÏâ ÿò-6lz˜Ïê£H Q?¢;ÓGø.¸Ùý\xÑyüÕ[>�¢Ešî%\ýî›øã#¿çŒåGá›dÕ‘S©U OIãËHKÑë°-C’ÄDÑ�!|´ÖC§.ø• BÚè$'Ë4RútfgYpÈá<ùØFV¬\G¯Ûfݺu<øë{xÍ«.åu¯wÜþeÆÆRiŒÒí®þð¸âíW32Ç·šׯgÿþp,Ãlg–~'%<ÐFYsW,EÄÓP+7®’’’ÿky«sç{B1M$‚ƒÓB.×’’’’’’’’’’ÿލ«¯:ç#ï‘g9Q’g`+ ¡BKLnˆ“Âñ&•Ĉœ,O‰¢4ÍhŽŽUfZm Ër‰âˆ pƒÎŠìÓ(ޱ¤EÆä¹¦âWPÊ"Šb´Î ׫ç#¤$ÏsÚíYjõÆ@'$iŽ1ºhâ–¢pÔ …x0EEÖ£RªX@¤š‡~ˆõ§Fž¥ôÃŽë’ƒ )$ZÒ4EHÎ5B(0Ûv0tœâxõz´&Íê,Ç#M5RJÇ)Ü©B"Pt:Z­Ùá´DI‰ãÚ$q‚m;T‚…D"……–Ûq±lÏð¥ä‰G¡>1†ßl’ AœfX¶Ã®»mŒÒk÷h޳cç^¾ô¥[¸ð‹Y°xŠN¯Ëþý1ŸûÜ7غuÀÕ¹„ŋƨsZ²w÷V&&*¤IÌl·‡iáŒ$Nɳ Kƒv®myŽctQæ”$)i¢q|/¨'›jsŠZcŠïßz' æÊ5×|«?ü9¶îè²vÕBÞö¶Ky÷».ç®»¿Ë§¯ÃÐ"ìÇ)«°P  "Ô«u´\§ŒŽ5Ù±ó�¿øYNyÑéLÌYȾéYæóñü2_ýê÷ôœsî±|éËâ”ÓV“Æ]×aÏžm,;ôPÚ³³\û©Ï°þ„¸ð‹P¶“1tp6Yš£u†˦êxžƒò%$R(°„U#˜7«;Ë¿ý%Ë_mY8ŽGàz¤iBe²IÍsyìÁ_1R h.š19¾à{>Žãb[6Æ4àûu6<²k?õ/ü?ᅩ©Iv{i�rßD(èug¨ù>³›·°í…Í,<êh,·çy"u]„]A%÷ jUPynH“b J¥Ø·w7>M£ÑÀ÷z½JÙ8žO¿¿Wø¾Ö† † òàƒ1Eœ‚mÛÿ“Ø*Ès}p¦iZÄ|ø>ŽçâÙŠdÛfvî`õ©ëÁR„¹æ¨ccráÞyùÛ¨˜þåk¿âäcçpÈX £"šã IŒ‹±mrl´p¸ï§°yÓc,^r«?†íÏþ”%‡L±|å‘d¹!Jò"ú@$K)”²Ò²\lW‘Ä<ÏC*Á ßGAµZ+ܪBQ$ü mŽWå¼s.fßž½¬?å|ß#‰c^túIÜ|ã·0fÀ‹Ï½„hÐd¤)H¡¹àe/åö~“W½òe¸® 9Ò ÄÔªãfl~ì^–¯^FµYAV×þo/èe@IIÉŸ“°ú'µ˜r*¾,«øúÓ÷Ž\ùz•üÿKPPF”””””üwäÏ. zy1¾mI$H$:3dYŽ@£5˜\cû…À˜$…(R©TŠ%…kÒEI ÛöH³¢ì&ŒBlåÅQBàÚýþ€8I¨Ujø~À`â{.ˆ¢ô¦ßï`DQÜ“$ BXHQÜ¥+e¡”A 1ÅÍx®5zxƒdY…Øá»>žçÅ)Džë¡¤" #jµ€\ä(©R#•…­\ÂAHÆÕ€8‰ñ¼Bpã×öpŸ»vé„jµŽç»DQ„r|¤ÖôÂÉjYŽ[!ŒBÂ0<(>IÐmÏ …6iZŒ™KeƒEü‚)òk ¬ÅÒ+DQ’Ñê÷ð*iVÄ ÂÇõ@ ªAjeœgžÙÂ!‡15g>Ë]ζm뎛Ã)§G?l… “öY¾| q¸©$i’Ðíui4' 1S,)‘XXÂ"ÏS„ɰ„ŠÊc´Ï ž"Is‚Àa|þ2tóÈvò»?læþ_låÁ_^ÉÖmN>aW\ñ:Î=ïLê Ç–²x%Ÿ½ö³\{íU¸¾ÄV9ä²<'îõ©7GiwfʦR¡=Ûãò+ÞÂ%½ ŸÛÎæÍ-¾üåÿ`ãÆ-Ì´`| >síU¬[»ñIÏÎ0–dç®Mµöh~pÛ÷¸õ;?à²ËÞÄ‹N= )5»wme|¢†Ö1qÔC³jÉQ[bY2S¼Dë¼xO»5b{÷²ì¨#ØöäÃL?ù“Ǭ¥—ÇØyއƒŒ 3ÉÔªÃXóÂsl}úI&V.Åò<"“Ðí¦T«#X®Eo0À±]l§Â׿öe:]Éütû]\Ë£Zñˆ’ÌÎÎ 0Øj”\Eø‹(‰›ÀÃÌþ/¡Ûí`DB+ì¡\ ÇXø™ÁhÁ ‰IÓ ­sl»pnOLNE•jËvðý a8 ‰cÂ0AJI¥RAëâf¿(öbXRÇ0J@ÐlŽ’eÉÁ˜Ž4ÍŠüf»pÅ{žGÆt»]TÏ8Šð@HÅ©ôºÛá%s¸ößgWk†Qc¸ü½ïbɉ‡³nÅéÞ-XÊÅóë(«N$"ß!Ïûfvóo_øÕO/å#|;—^újÒ´¶THÚ]¢0a6ì„êÕ ž_!7)n ´Æàå&%ך( ©Tê z=ÀÂh‰”…xn´‚>ñ©kxå+¯â¶ýO~âÝœvÚé±êh¾þõëÙ¶m  R±uë&Þð†Ë©Vkl|úIÚ³)»vífÅŠ9è,gtt匲wóv¤QLÍEUÇË]´¤¤¤¤¤¤¤¤¤¤¤¤¤äÏ™ç Y–`)€œ^¯G–¥EQ‹ÎQJáyžï sQ šç:øn€ãx˜ž¡ÝšerbœJ¥Bž¦A€ëbeHÓ˜Á G–ÇTkõz•8 úŒ7Q¶…T6F@ŽÄqšc#°·T\\×.Ä©1h´€ÜE2™Ö ,’8!LRr$žçáT|˜7N³Z#íõž‡TJ!$‰#¢,e¨V|”4dY†D †îYÛ÷ggÉu^üO×B)‰ãZè<Çó\\×r„0¸žCØoÓ©²hñæLŽ!„& {!ð«>Žg“™c4BE®¥eYضƒrp=Æ'çÐ9°Ÿªk1>Òd¤6‡<05§Á NðG$y¼‰1²4a'8vî�~xÛÏÈâŒóÎ;‘‰É*ããMš£ãŒŒ5iufÈŒ 6:ÎļyTªu|/ Mrt.PÒÂu<¤´Éu!Šé,F °,Çñpœ ™†jm”Jm‚TWèLknºù.ÞüÆ÷ð÷}Œ={zìÙÓæäŽ`ݺãÙ³w–ŸÜußùîlx|3W]õ~vïë2ÛÎI2—î�f{9>*UÃöÆiÎ;ŒPW ã [7·X´x'Ÿr9W¼í*~ó« W½ïÕ,^\ãùM±lÅú6FØÂyóùÑmßæŸ¯ÿw>þá¤×a»Š½{wQ©Vèvû  WCð+>cããŒN`Û>IhÈ3 ƒ¥\´Lçä"c "ì˳9ùÅgó»Ÿÿ’Áν4ªUl[‚„J­NŠ!ö<–­_Ïö­[ØõÌF”È–¯ú@B»½—0 I´Í Ïïæ–oý‚3ÎXÊÄÄY–a;Š( 9p Gjúý>ÏmÞȶí[¨ÔÇé¤>Íy+¨xU’Þ,ŠN¯%+xÒ¥Y Fl“Ðïuql ¥R ò<'Ž<'`´9Aetf{8ŽG¦DQQ8U­V ‚€</r”)Ûö0OÙq‚À§×ëÐïwɲŒ8އ¹¬­ »²m‚J… ¨VêØ©`zÿ^æNMQ[¼ŒLd™æ°ÅUžjŸ¹þ?xrã¼â’—±xå¡ Qš.nuµú|§B”tyÓå¯â¶ÜÂö]ùÊ·2>:‡<ì‘îßEÖžFèCNc¬†rDQ W­¢,°íœNû�HM’E¸nÀ䜹T« ¤PT«uªÕZ!ºæ9S¯UÙ³s çœw¿¸ÿßiT\pÁ{¸õ»wõŽ;ñlοàåhcáyÏ?÷,{÷÷xêéÝüæ×O³vÕ*V®\NPco«‡6Hg÷à ¬‘¹`UË]«¤¤¤¤¤¤¤¤¤¤¤¤¤äÏKØYžÓî%¸n…æØIœ!-Ig¶Ã ÜO­Z¡Z­"2MFøA@·Û%O3\ߣQmà{Ia´ÁVÃ`ây.Z§™Hèv£¢uÝqôºìܱ“©ù ¨Ö*hŽr1ÊBK‡(6dFA¶e£úI„RËV“#¤Árl2­‰ãĹÁ¤9qš‘g9&MhMÚ l‡~¯U'58Z&!3QÏu©f„£\tªq\‰t»dyF®‹Vs&ŒC´Éq¤‹­Ò,¦×ë!… Ï“"4ÑX¶M,ŠÑ 󱄮�†^Ô)-! t!"+MNšhòÌ mÅâ£V±õñGÈEŠ+’È#!ÂÌ"½Ìš¢ F4š>þö÷œxÊìÛ¥øþ7¤îÁ²¥MÈ#îºëgŠCW.btÄaè%š ‹n«‡Ö.õæ8­-º½>£““´»=¼ ‚°Sò8BH…mWI´\‚‘Œ0=Ý凷ÿŒ›¾r+<¾™© ¸ôÒSéõl¾ÿýûxü±gxèwO‘�A¥RA)ÍI'¯gÛÅ?é‡\üòóñ4N©T$3fÉÓ6³³]žÞx?ö Ï<½™Ý»ö“¦Wï9¬_?—¿~çëXµj)§œÒàu¯ýgœº–£[M·“!àþßÝÏ÷nýŸ»îï­G³tfwP«TI“ תҨ7éG–3ˆúäý ×@(-Б N 2V'êï¥9>B+î‘È6Ý~‚Ê5ÁÂCX½ú¼ë—œtAQ«ÒGcY.5é °t9G®9š?<ðK‚‰qzÍQ„m¡²RǤ¢AÕšàž»ï%ôx畯@'%á@g7#*A°ˆZÅ'L[ŒOeØ–G×ùâ׿Õ¼˜¥‹–1óÔ0ëV315z,tÚÑ ]§SSt˜¦e°¥ƒ–”å@?Jð*UËñˆbðƒ²<Æ÷‹â©N§3,«²È†kÔ ±-‡Á`€ãØ€Æ<r sC \klË&Cúý>–åàcïÓ½½L-\@y¨±%¨^›÷¼ñͼíò÷pæyoâïx/üÅ­Ìm8ÈÜÐë÷12àÙgöðøsOpäêåzؽ­,\0ʧ¯ý[þâå縊õkF°«9ýî^¤;Ž­$ÝdoÌ!ц(3¸¤7Ø_ hÍ´¨×›y I¬qI–i²4!×…“µ×ëÑïu0Fs`÷s³n5wß}77\÷UÞòæñÐo6ÑïïcÇ®­\ÃXuäaŒ×|ô0ɤ9ê±pή£³ÕœC·×e4l!v=ÎÄ’%М„0·Ü¸JJJJJJJJJJJJJJþ,„U¥dÑŸÅSݬ‹ëøÄqLžçøž‡íØ$iŒ’6z…™™¤XžË ßGkMže¸®;‡ÇvÉMVdä’4M‘J‹¨²BÀÉ5¾_)D SŒÒW*U²¼KšfEÔ@b óÁ–%e2B9ªJÚ@QleÛž˜B ,EžË¢�©Z­A¦Òu¨Ú‚,WHKágq¢ql…ç:X–"ŠÒ¢x*`Û²xüý¸h9·]\×#K3Ò´(7’ÃlW„ Š"¢Ù6£££8®C{vßPÊBH’ Á–ÏóIâŒ^¯‹cûT«Ù`€[«¢uNËf&>Yiáy6qè¨Uz­YÞrÅ[y÷þŽw½ëƒ|죟@Y.õ–‹øÉ?æècâØ.ã#LŒÏ!ì·p<­SFGêìèm£Û™¥1g’JÕÁˆœ0ê!•AÙ‚8Õå“™œ,í£µÃHe>¶Å¿~7}õÛ<·iÕºáµy<o¸ôM¬?þZ³]žxür/°%( 5A¯òë_?@žç|é‹ÛùÖ-÷¡s‰mßâÀt‚4g:ÏSƒFxÉÙG³`þ$÷þü§|ôcïfjj„,ðÒs_ÊÛÞú0×}öÜpýaøn•}ôï©Õ,®zÿ{o°oÿNlGÒt‘–!êdiÎþÖ~„T(Ã0Gò,Ç– ߈ `4Žã‚TØH<-–Eß„øcM­?–Íû÷òäïÿÀñ/9“t0 Ó®]£Õï0êx,éyÌ´Ú<{ÿÜtñEìÎB¬ñíýÓ¸©…èeÜpÝ\táJæÎ$K2“aÙ‚0ŠZ£ˆàPÛvزuŸþÔ×¹à„µ¹üPžºûQÂn`r‚Ù~L¦ôz³¸u×m 2Á NSÇÆu‹r)­‹ìac a@–gCºP­3”*ÖPžgt»=Ä0§8ð‹¬U˶é·Û Џ‹$Êh·Û!™˜œ‹²l²8¡V«Ñjµyæû9bÁ¤[§1g1ÎÔ2zí„8V8¸Ì³ˆE ±qÃã|þúÏóñO\M·Ó%¨¨À#ÍÛ¼ðü6¾ý½[8÷¼Ó9nÝѬZ}4ÌÌ´Ù³;fÐjã¸#haf9ʶŠç/”ðIÓ„xÓ× BHfggqì˜FcŒ8N°í„$‰‘R¡”$M#¨ƒå$4F*¤ù€në9*õ…¼ÿCogþ‚)>ö±k8ÐjÓêÀÃü% u—¾î"vlßÇÅ/=ƒ>u í™iü±Q²8¡áztwnfû–çYuÁ%ÇÄIZêª%%%%%%%%%%%%%%.Âj¿ßG )\„“3 ð}ŸF£Î5™NI“×ÄqL†Ã—*Žãcó²“$ŠEFe¡cÚ$Y†ã8Œ6GH¢"S±Z©â{U”%‘–MÇDQŒÑ†?áXV‘qø§2(œŸY–!$H©@I²,Gk]ä•ÿN)c4™‡±±1tžÏ)‰±´Ä6…°édÙËp\A¦!Ó yR”ë(US¹®ƒ6éPèµIó¼(à¡~-+ MSâ8Æó<jµ:µZ1ÞŸç9®ë!„U4ãæ¦¨¾!‹qêN·Íî]{ \¤0 Sšc¤Iƒ4µ©V«L·ö ªó°…`vf†A£–­dÅŠU|ö3ÿÊí?|€ÓN=†÷¾ïüè›$2uÔ‘ÌŸ{a?óFHâW¹X•*µZ…n§M8»#$A`‘"™iuðL€¥ª(Ë%Ërl×G©*7|þk|õæ°sg8…SO_ÂýJ.xÙY8z;·…|ì#×°ñ©½qø$ïÿÀ›ùåðøãÙ´i€Rå4k.û÷Ťýh‡à²ow›É1—þ F+›±ÑóÔ9íÔÓ8ùÔ㘘 X²d!òêßúö·yïß¼ÏóÙ»wšk>ñ1.8ÿ¯øÜ 72è„4GGyïûÞˆšVk/µºG¯ß¥RõJƒL1"'I3×G)eW±¤"Sâ,±šŒ MœH¤Rd‰Æ¤à# ãˆÚx“Îì^ªã£œpáùÜsËwxôg÷³ö¬3Iò#5®c‘È ß®°z͉üö¶;Ùõ«G™sö:˜ UgAýP>ÿñ¯°ý…]üÛ¿~”E‡, ßÍpmi7ôCæÏ›G§“R¯ é`Ù5ÆÇÌ€=/lbíi+ŽO´sƒHÒ“íö\×`k­A¹6Y’\_–²¢tAˆa›-ÉÁPìÆäh£”DH‹<K ÃJÙ乯±Ýâà@9ªqœÄ P”#äyNkf%J),Ûá–o~½ÿ'Œ¹°|.½¬Ë©î"ê —35µMóÔcOñÐC£|£´ OS¬Š¢73ÑG­fÙa‡ñ¥›ßþö­Œ6FY¼d>Žã0§Qå²Ë.#l=Žq\ì‘qÒÈÆ³\fÂÙ"cÚ*V.Ž]በ°|ù ÆÇ'‰ÂŒallœN§;,ª³±¬"SYYI&}šÍQ¤´èvwǸìͯfñ’&—¼â ^rö8ëŽ=Ž0 ìåÿáÃ8n•Ý[ŸçãWî;9br[‡x¶M§5ƒø4ÇÆhwÛ¡Jaµ¤¤¤¤¤¤¤¤¤¤¤¤¤äÏEX•ÂFJ…¥ì¢[(’¸ÈQ̲Œ,O‘ªaïõŠ|Ðf³9,dÒA€Ö˲6f9ŽƒåøX–K®s$Û”²Ø»gµjjµ­lâ(ÅhC¦ÄiB–i|? Ë2öìÙG¥R¡V«‘ç…pª”…뺣ÑZ£sCf2ò|X²e iš e q7MR<Š’™¨âÏ%ÎŒt0²,ÃØF Â0"N”c Ë­þShRJ‘ç9B \ÇG*Anbü æÒ"+C‘5Ë Ç®mÛlß¾,ËX°àlËæMF€Fª¢„«^¯36Ö¤R plŸ\§¤yŒŸ ”ïóüæMÌ?ö$T’pàÀ,í^ŒKŸ½×@âÛ„í .øKÞñÖ‘¤°{ïnzƒ=œuÖÙ8n‚¥bÂÁ íM%ÃiÓÙ?mÛTª½A›‰yóÙ¿g¯2‚çUqì J€ÅÃçî{àsÿôe~õÛ'Îyé:^÷Ƴ8ñÔc˜7>N«7Ë-ßúŸøèxvÇ.N<vŠ•‡Mòú7\È¥—žN»Óeóæ-lÛ´‹G~žÍ›:ìÚÙçá‡ÿÈq'à °|Å"9d„Ñq—CÏ‘G­Àó@ë¿êÑ ûìÝ÷4ï{ßëxéùWò¢“äÜs/ÂÉóÏlfÉâ7~å÷|ðªñ¾“gžý#žk‘¦!ƒ0E)ƒš4 IÓ%ׯqLâÜy�� �IDAT%yn°¤ƒm)È4yë#A  ¤²Èr#m<ÛC¢°‚€=Ýig†‘ZƒÓ^|&?½õTª=ët¢îܺ´mfw÷iz ÇŸ±éÑ_3¹f #+a¹5}jŸ¹á›\ðâÃ9fÍá Úĸ¶Mn,”ô˜iµPÂǶªDqÄ 29uË-ážÇy¯9Úè$Ï>þëÎ]J«ÒthÖ&pSÁ¸ƒÔp„$IBò<ÅóüÂõí;�¤IŠÎ„0“Ç ¹NÈÒb-cر±Qlۡ߆V†n§‡íXäy6ÌãuÈN§ÃädÏs‰“eY\úº7pø¡k¸ý–‡xvÃc|ú†»yßµw³èÈ…œ}æI¼ëŠKY¾âH^ûªóù·/þ˜Í›¶@¡l›™Î^îà>Þx;#M£#¼ùMoãŒÓ_Œ” /ùÅÜrãƒü¿W_Ç/ž`ẕ¤Ânb[6®íb)…ÉJÚ¸nÀܹS !î0K8O ÒRXVq ’´Î‚ FPõɳA?&N:d¹ÂóÆÙ¿ï)Ž\µ’‰‰Q^ÿú·pøaÇr`ßz½Y‚FÁ`š™™]t{°á±¬8l%i»EW'ìÛºy R_0ŸA&Ò*w­’’’’’’’’’’’’’’?aU‰Tö°„¥(B†aáDU…{°Yòƒ.´bœ?;èt‹ãb4>‚bdXCGfVˆ¥y†çV0FÒïGŒT*»÷ì¦91†í:€$MsÒ4cëÖíyäaäy~Ð+DQ,I’ç9Æ®ÏÂ©ê ¥…Rª]Ó!%:-„Ø8MjUt‘ "lQ÷Äy†I . ¥À¶JÙÂs!¥i1Òì»>RJÒ$Æq|òL#„"Ï Ç®çyT«UŒ)DÛÂÝÛ(šÔƒ*ý~Œ1`Y¶-p\­3â8"ËÒÂù§ a§×Å'gî²eüþö ·g/ncìQ.ñ+5ÂÜ¢áUIµÅH}!ýÁâØÁ 2&æx lÛñƒA ¥&ç.Âs'è¶v“;¯‚´5Ýn›öë8øÎ$ÒåW¿zŒë>û¯ÜÿÀZ½ŒUGŽðÁ]ÉúSV±pá<,ðëß<Ì5×\Ç?{–8Ô¬?z>ßþöù—®å÷¿¾—…‹æ ¥aþœ*µ¥œ²~ µúÝPóæ·\Á¥—žÈ+_õ*ÝY´IŒ4 Ñ&"O´Ih˜¥÷Y8ÿº˜÷¿÷5¼ÿýßà˜£OæÆ¯|矞׾æ5¼ø%1Ÿüä¿p‰GrØKiͶXºl{öîÄ÷´Îº‰3#¤M§ÝÅÆ1y޾¿µÐd&Ãhãh“!Ežj\Û!ìvQ¾Mœd4Ç&ÌÎО=ÀèQ‡qFÿLî¸ý‡LÍŸ¤ºd!Ý~‡Úø<¾ÅÈÚµ8[6°ánìuxsÆøðg¯b_fóž¾Ïw £¹IÉ´¡Û qÝ€4O©ÔÇøÉ]wsÚé§4ÇœuÆéüàöob”Ãä‚e<ò›ß°æ¤6‹ÍgÄ ðŒD¸élx0‘ÝáE•”’\çDI8<8H0"R´XV!òåyN’&(e¡, ß÷QJE1qâylÛ^¡›}ÀÈè^µJÔï3R¯pΰlÞQìÙ¾ƒC8ŠGžÙÌ-·Þο}áÛüì§wóõ¯ë®»–—¼øD~ü½oПÙWÄä)QØçŽ;nãÑ'`j¾ÅÑkçñÜÓÏqÒik8j͉Ü{ïùÜß ’N Ïi€ÊèvBìÀå}:Cë¬pèg ‹/bÿ¾iúýŽã#¥EÇø¾Ož§$IŽÅ¡ˆÎ-„®2èi”e3Ò˜ ÛéãZ>Ží3H$–Ã’‹pì–,¥Õ‰˜;1Å̾-ŒMÚtÚ}<ÛÅÉ3:û÷°sçV]ºtް]Ç/w­’’’’’’’’’’’’’’?¤ [¹¤Ôá(;€çyH iZd!ÌÌÌ%MÑûjµŠ…«SkM…´ÛÂ0ŠŸEþ£@Ç Z‚çþýÈyS ‚*¾ç#D‘ù:22Â’%Kp·›–FeYF¯×ƒa³x‘Yȸ�ƒÁ€<ÏI“”^¯G2å×€Š4Ž0F“¤ƒ~Ÿ4M±- Ã|H¿†,Qd-ÅN˲¶û¾?têEh­™%I G«mÛE‚²èt:ÅßÑÑQêõ:ƒ¡Ó×q¼aÌ"â8&Ë 1UJ”…`U«´z]¿Bsl.a¿GØ›%K¿}è 6mÝNk~ûÛ?ò»GžáŸÿå>ñÿJØS`,Î;ÿ \Ï#76³³Œ18®$ŒûìÞ¹nØÃH`;¤¹$É,Ü`ËAëŒiòÀýOð–·¾ŸWÿ囹í·iNÚ\ó‰7rÏÏnç5—^ÊÔø ýÃÞö–pÑùWrçOc´æ‚‹ŽäúÏ_E£©hT}žxü ,,zíä¶•'Ó´f7áz}Î9ûD¾ôÅëQV‡nw;lb¶µ•Ng+ýÞ. m\7BŠ˜N«‹N!Ï$‡¶–åK%¾ìr06û·Wsê‹NáÔÓNà/^uŸùì7¨T̳€ÙVŸÀkÄ‚ÙVD–*\§ŽëÔð¼:¶ã#…F‘¥¤š<‡$ÍèG!iV”˜¥YJ–e¤™&S ƒÂÒ iò(§:ÚÄ ÚŒ»ŽÏ:“ûî¹—xºGÍ«3}`7¹‘$BüqV^xyœñÂÏâ‘âçwláü×,cýÉÇ`ª¹BÚc¡TÀÜ9óÙ¶}+oÇõÜúÝ"rhMࢗÃÖ=!›·îbéêcH¦·oaÎøóçÍÅ‘6iœ#•"M’al† ŽcÚí6ÓÓÓôz=l[R©xX–Â#¥$ª4u‚ BÔj5t®‹õŸç�d¹>¸fmÛæ¯jêõ:S‹—0wÎZ°Ïîb¬Þõt;lݾ™én{d„Ÿu&7ßô%|ðTF¦Ø¶s:›å’K.à+_û"•Fϳ™·`.¯ø«Ëøù}?ãÇ?þ'Î=÷öîV|åËwqék?Êo{/ûgöðÉo~eË–ð–°}ei”•Æ’¤‡ÖqÜ%J{$iÈ ? 92†Š~?DçE¦³ÖE1_EEyž­PÊÅ«Lâ»c„}èwRtqa Aà¬Z½˜›oú\ð Þ|ù•h= ´H’.+W®`Éò¥EŸ7Âx³ÁX=`t|Œ…kÖJ –"¦ÜµJJJJJJJJJJJJJJþLPW^~üGŒ×ñ±­ÿ@l»pó¥i‚Ö…3«poJ¢(" ÃÿÅ5jYY– dš,Ó€ ƒm4hCÅXΰhÊvl´8IqìBHÅ<Ï%Ïu‘a¨–õŸY«‰Ry®‡ETišsY•²°…©ÕèíÞ‹Q‚êXÈd¨L# XžK‚!Ï N.‹¦o£±”ƒm;CçiNµZCAžç…CƒPÏ÷ 17M:zÿ$:gYvÐq›ç9ÖEéÏîÝ;pû`Ü‚ãÂmQŠå sM†ŒŽcùÏn|޽;w³rå2üæ|nøÂ¿#-Ÿc×Ï{þæƒL·2¾zó<¿i7#µq”5`õš¥øžÃ²CV`YŠvoš\'ØN•A”22Ú$×9û§gHÃèè\ÂH03“±es‹›n¼•O~ò?¸áŸ¿ÃoÝÂäÜ*oû…|ú3ï碋Îã…-Ïsëw~Âg>y3ÿô‰¯ñàƒDš#–,àÚë/ã}>SSMÒ8b¤1Â]wÞËé§¾˜JPE A–EäYe)âÐfÍšu|ñ ßÁV Ç®=Žöì ¶%ȲËÊpçCÔéÎÂ-_¿•ÿè6>õ—\ü*Z3mN9å$Î<óT¶n}^o†CWÎãž{~ÎóÏ<Ãi§ž‰Ñ’ÆÈ›‰±)6Æ(ªÁý^ÌXsþÈ8®²1@œ¥¸®Gœi‚ B’jlÛ#S,ËF¹™-Iâ•i¬Ìà‹8KžG–§ŒŽÓ›nñäý¿ebÞ\êÍQqN$AY9N`C”³yÓn¾v˽lšÞÃÍ7–‘ªâ…-;pÝ ™Ž˜mwi4&pì Qœa»Un¾ù§ìÚ¹…s_z6¾ç¢Ü*·|çê£.§œs6­§7²uËs~üZ²(ŶŒTä¶$N<åøUü � iZ8¯lÛ^* ¶m!…,Ê×,‡<ÓC¡Ç%Móƒɽnïàû]Ê¢Ô* c”R8Vqñ<ŸN§M¿ßCÙ6=ü¯}åßqç=¿á;·ÞÅwþ„u7añá^ÅÑG­" ÷âÐaßôvªRÒÚ±™Þ^\§F?q8â¨uœ°þ4^ûÚK8õ”uHòÇÇ7òû_ÿ–KÎ: î茉¹ v'ÑëïCˆ£Ù>–¥±\ÑAáV7ºx]еœ3ôȲ!EQÈ—ÃÞ}³ÔjE=ê£5L“¤ÕFÛ¸áŸoâÉ'7óôÓûyÅ+Ö²|Ù´I±TÀöÝÛ¹ëÇwð¦¿| BåìÞ¸,˜Z¾í$º8lqœÃþ·ô$I˜™™arrò¿|ó(®»ªÜEKJJJJþÛ‘‚ÿ«öÇ4MiµZLMMýý^¯G†Œì˜ø¯àOJ%%%%%%ÿ0æOËÿ:¤”ãN'&&þ?×A–iâ8&l*• ƒÁ�DZC’EEɲ°,«È¢TŠf³‰1†J¥B–eôû}ªÕ*Zkaˆ_ °,Ÿ$ȳbÄØu]RbkUäÚ.–%Éóœv¯åØÄq<|,^Q�å»!fªJ)±m­ žç$ B¨ƒñ˜"KUJ5Ì…4X®²pç)§a¶¥A¹‘ý©<J"¥Áä­Ú€ÑÒ¶‹gÏ%IÒ4AÊ¢ÀÇr¾ïç‚Tèa©OÑ&_Ä(Œ)\ºEÙƒòœÁ >X€#•ƒ”†!�Íæ(á &Ër’4Çóë,Yr¿ùù]̶¦±å¿ýÝŽ;©Âø¼#é¶]îýÅ“ìÙÓ§âX´Ú»©ÃGÿþ»²ô»\xÁKxÕ«^Æê£×&Ó„ƒ! Ï=¿“J06¶GYlÞ4ÿ|˜Ï~öß™>�­ŒÔmÎ;ÿ¥œqÖÉœzÆ:>ò(þÐ;yðþ‡è¶5IRx†ë8ýô|èÃïäðÕ#$É I<Ë «9jíñ4nû ž[GÙ’v{~¥ŽeUD]š#Y–óº×¿„›o~€W¾æ2Æ›Ë:I‡Àòˆ;~ô½;Ù´åžáy[yo½ü­¬\yŽWa¶5͵Ÿ¹Ž“NYE«½ÃŽXÆÌÌ~n¸áS\ùö÷pûÂÅ_ÈÎÓT*!)}„Ö̶x^…­ÛwRñ;ìÚ½›yóæáU*$Y†Œ’% ãV¨øŠhÆœ‘z‘µšd˜0FJËUຠÂ^µÁñgŸÏžû2ýà^Î~Ëëqj.Ý8Ä·%Ù cÞšµôí1~õ‘ïóÉ¿¿ŒÕ‡ÊžÙ§xëÛþ†·^~9ñê³èu:³‚© #qN\?É?~§ž|–“N9ÏÀœyóyøO‚3—#OXÏ7¿ðYZ›ž§yøÑ`,ÛCê6Yª±”ÂR’JEb[>r”aÎr‚1fmaÆlDQ„Ñ–ò‘Â$)–å TŽ`Ù×qpäy>\7†1yžbŒf||”­[·F}¦æŽsÉÅËØ1bì€[ŸãW¿0¸ù~nüÛøÔ5ïåÜÓ×¢£=Dqœ"’cÁÂùŒÍ™ ŸÔ¸ñÆ›øòW¾ÁêUk8~ÝZ^ö²3ù‡Oü-:¬ã۷ʾý»Q##dí”ñ±&a¶ ÇQØJâ¸Ë6E‘•±QÒÂY¢ˆâƒ‡REqŸR`ÙE”ˆãYÔIqýœ =†-Sæ.<‘™ýÏc{>3­”³_zÍq‹8˸ô5k™39Ž)Ýv›Æx…W¾ö•\ÿ™oqßOïåŒSV³ióóqÌ*ð<öÏ´p+u|Ï+wÑ’’’’’’’’’’’’’ÿkBüY=«Ñht—¦i†Î ##M¢¨¯×ê€f0‡‘�E9S­V#MS<ß'M¢(¢×ëáy–RÄQ„q%ïcŒE’„ôû]„1(%°†%0B²4E ÛòÈuJ–i,Ë98æ/h]ä›Z¶5k`0‡ÎÚaîª0„•k­uå 4õzí€ãÙtÃWI¤6€A ‘!äA%Ï )JJ¤t:aN¤ƒP†,K„²Ô€T¸®{ð9Åqƒ`YA ”ú_²hk AÅBY’$‰Ãø Û7Ä#ÁHŒ‘ìÙ·¹‡Œrô‰§ñ‡î£Ûjñ›ßü”íÛóÌaûÓO299Ÿ?þâ*Xưìðqž}všF]°{‡áæ›îåG?|€Ã_ιçÈqë×áy.æ26üqO=ñkþýüá¡'Ø7¶€z£ÆEËÚu'sø‘GÐîìããû?½ëgL·þt¾í)X´ØbÍš ^ñ§qáÅg“Æ]öí~¿Ò #ž{n ýûOòܳ»ãå/µF…=»÷b9†ù Ðnkl§Êo}wþè~|ëÏ9öøãÙðÈ#lذ-[žÅ±%#Í*çœûÞõîw02Ò¤×í³cçsHisι§²ñ™‡¸úïþ‘k?óá¡ë:cÁÜù¼ûÝïâškþeËeÍÑ«h϶ɲ¤ÈÌÌ`ttœ_ýò—4F›<üû‡¹îºoPm8\xá¹w‰yÔj‚ªEà»´g§¤},µjÀ MÉ£ ¥‹œ_K*,×bfÔ‚&"JÑBð’W¾†ŸÝv+¿¿ýŽºä &Fº0è*Õ &8‚fšIl׳ì;°OÂ_ùçœw*½^ÌèÈãSH+¦5Óáê¿û~øƒWóÄã9íEÇC`s̺%Ü÷³{1Ýcc¿~;7l ¹äH°]cÈ’ŒªëF9Yf0¦(¤ò<)Ú¯]šÅ¤i‘Œ×±ñ½FqAC u(\×:Ë-²<ölÒ$;x¨¢,E’$„á€,Kp]‡Á`€m[4 ú³].ý‹WpØI0:gigÛ·mæ…í»xÓ»>•W~~òoÔý˜æø(:6´Z-LÞej•EŒ0ojž3Î÷¾sÿqË}H 'ž¶€W]ü:N?j>óÆçaµvc2-a'dÎøš!\dÍǯ¢x– ¨€±ŠkHÆpÐ1ïyE¹W‘…¬Áä¥éôÖ½ŠNë�3»735.Ít«Gà Î<ëDxàI>ýéb|4%îÎ …`¶Óbåò5œú¢Cùþ·oåØùu<Ïabá¥pƒ `H“ʘՒ’’’’’’’’’’’’ÿKù¯œæø?V³T#Dá-ÜYEá’ëzDQHpœ¢ÆüOO"MSò<§53ƒã8…0Òÿì½w”že¡·{Ýí)o›’™ÉLzT’P¤éUEQ·Û¾íº-|ºÝ*¸í•-¶w@‘-‚J(*  [Dé:I¦¿åi÷}<C¾ýÏ9k³ÖY‡o}ïµÖ¬L2+3ëͼeò{~÷õk•G‡… ÉS<ë2l‘Òé´PJ‘g �…µ¸ÿv”8Žë älT£�RrvÌé¹Ö›CHp´V…%¬TÉÓ”ÖL ¸ÙA9{üØá}áKÏëî‰=diFa ª<¢Ÿ¦dðï4¶ðÞ•È2Lééé!/R¤H<2„qH¡i^ªzîHM…H©(f»RJÒ4ÅyO{fæÀPooEîhµª•:^‰òýzƒ´pT-¬_»ÛžáWÜÎü…=,_¶†¬ ‚$ÔkðšWŸÈi§ŸÀ§ÿíëÜy×NÖÂä”çÖ[æw¿}Œ9C?g`Ð05!'mg¤„B#ÞU#vìžà¡Ÿþˆ½cÓ4§§Ρ¼@#)p¶z!ç¿ü8.Q¬=d€•«FÈóí´;îÿ¯mlÞ|ßùÞ7yâ©§xÛÛßÊèÞ}üËG®`Ë[è틈ã:í‚©qAšX¬³tf*|ð¢Ëxñ‹ V1´rg½ø(æÎmÐîL³`ÁYÚdttŒééiFæÏcfz ‡á}ï ÿø†÷p÷Ï Ž:šz­—v;á˜cŽâu¯ÛÍ»Þõ ®ùÙ¥ôõÎ!I:H%¨„O>ù÷þéÞý¾fá¼a/YÆ¿üå!žzz?½}àÙgŸÆËYgžÂ‹Ï;“Öô^²v›8ªÑÊ-‰£5¶(ð-‡Ñ†")ý»2 ñ‚ÍgœÃMWÿ˜ý?ÙÇé¯<‡^mHç дƒKò¯}-fzŒ;¯ºŠ.8ƒG[Ÿh15ÕbåŠõ´;šO~ò ÌóÎw}Jléé…›n¾›7¾õBÂj…ãŽ=ŽïûvŒO°°·‡‹æó÷;ïdÅaÛ1«Ö“;°Íe"â°B^XlQ^dPÊPÖheÈÒœ4ë µ! *hUA E’vŒUâ!¡ÕnQÆh”ž+,I’†áÿj®çåÔèèêµF•ßþæ6~uåͼ¹g9+E/}µ ËDßœE\øê øâg®àÛßü.ïxÓKyjû(ƒD45jKúÀ(öïÚÉK^örN;ýå<üà<óÔSÜvçO¹ñ–ßññ‹?KƼþåk8róz肨˜¡È:iŽÖÆ´Öø¤|¬âݬƒ68pÜà¹æ|–¥t’6Z ‚¸‚”FøÜQ>¡3“!I5j`=¼á oæ§W¿–»îþ#'·‚H[â0&Ó!ðþ‹þ•w¼üBÎ9v%‡mZ•0•¤˜°B»Ù¡Udôô<^ÌžSFtéÒ¥K—.]þ÷ÃZûÿ©¡K—.]ºtù?f)R(Â0F)ƒs›DQ…8Ž(lyDþ¹fi”­4kí‡P”ädYFQÔêuæÄ¬EÙfMÓ”Þ¾^£°EÙzõ¢´ÁÈ�©5Iš—C71ë, *Uéjµ¶lÕAyœ?ËröîÞMµZ¥R­”ŽKU®—­SI™ª  ïa|l!Ê$œ~¨pNaŒ,¿¾³Ã;RªAiÙÌ›]‰÷á-K7@ä³£TR”kêyžã¥'M | U¶�mŠÈ½½=@yDº +]±Î9ŠÂ"…!Ž$í,grªI-X½r <ú[æÎõVؾc7{·Žñø£Oajðã+?ÏI'¯á‘GäêŸ|k®¾‹ÏöìkÒîäx"|§Æ³ÏNòô³xÐRcd-FÇ´ó„86ìßßæé÷ƒ¡Áh(æ k6næˆÃײfõrª±fåAËèïa›VW8rãjÞñæRï«ðÙOJ]±ä y¼ï¢sÑ:`hxml.‘ÂÐ××Ï`ÿvçá’‹/áeœÉÑÇNžÏà}‹fk'ãÏ`óŒá¹ÃxcãO‘¤9aTÅ{ÅûÞÿF.»ì;,_¶’Z­‡¸®Ù¿§ŸñBn½õ¯¼ç=àª+¿ó9ŽEiÅOúcN?ë,’N›04~ØFÖzÓÓ–ûüû×Ý3Æä„`bì'¬]³ŒózIÒ„jÔƒˆbŠ@c…ÀšÐ «……°‚U0Öœ¢±p'œ~Üþs¿ñfVžs²^§3ééLL±ct''¬_Îs#+îZÂéÇlæó?¼…»ï¾‡eK×ò_÷þ‰Ë.»‡eΜ¹\øÊwpÖ™çpë71ÓnS˜€ и Ô+ŒÌ›ËŽJ…ÝO<ÉâƒÖJ…wŽt¦ƒ¬³ú (r‡³)?;$7ë7V!A h:H¸µPF­4Æ(”Tdi†@Í6ÏËǃœ½HFY–½==è¸J_½Áßîåä“þ‰Áy†SŽ:Š—¿äLN~ÙkX0)�ÃÃóéíégyß0clc×öí²déø«yðþ¿rùåWñÂNåÄã7ó’Wnæ3É=°‡¼å|÷edÁ0¢6—=NЈ˜3\Gi¾J–K²Ôa 0Z¸˜$„À9pÖ„R ²<£ÝnS©„TTÄ—Ÿ­?Ë¥ÿ~a (Ò)Šazb¿ÿßøÒWß‹¥—´>úçŸw éä.\‘ÑÎÚH±jÍzvîg¶íã”—žJG „‰‘Ò`L^Vg»téÒ¥K—.]ºtéÒ¥K—.Ï`5 ª8ï±90{Ø{‰-<B(¢¨BžeÌÌÌ LD%Š`6è4Ú[KîJâZ,ÏHÒ�³Ã5R@“gž8®(ðÖãQX_úP%ž@ƒÒ¢\>Ça‘xç!‡@˜ @àñ8’Ô’¦;wîfÉ’%(âg?朠(r¼göö¨r˜ªQ£“%´&›ÄZ¢e„Ó{E Bᑸ¼@ë�)ËÆl'i£$ä6Ã…³Z!È: VàË1-£LXåg-Â{Œ ¸ %!¬U(Šœ<ÏÉs;«.8+�I`Ê[JEÒÊÙ½{# €ÈÙŸJž­²c̰hm嫆ùá7¯æÙ= ËW6¸}Ë T‚}¬X¹‚"IùÇלÃ÷¿ó}FÇš¶a˜(ŒH­%ŒªtÒ6iÛÓjvH³‚,Ép®E(ÊïEžÁ†ƒë,Y4ÈÐP•k0²x.´ù æÐœ£WðN335ÁÞÝ{^@‡üúæ›ùÕõ bîØ�� �IDAT·rÈÚCxç»ßH'›`ÿ¾”J%&T1üýqÎ<õ| _�ŽÝ»·#± J”ì£ÒègÓáøþ4×^{)6O°v†8†žJÄÔÔyZ0>¾ŸÀh yš‘§)I6¬ÞÈñGÍ¿|às|û[ߥ5³“FOF»•rùæÔ“>ÈŽœ‹/ù(q5â+ÿþYV¬^Ǻõ«q6¡9ÕÄYKµÖG­ª9ò°U|ëë_ÄÙ‚Á¡cûvÓÛà½% 56K±xpç „eBÒ¬ƒ œËhµš„¡bûè3|âN ùý/o@ýöO,<6d^ß|öŽîçßþý6}ñ`ιðyòw³¢¿N½€§·îEŠ[ᅦ©vé2ýà{¿É >ŸÓN9™ßÝsi1AŸê!2„/¦IÛŽpáÁ,<x=ÏîÜÍàŽí˜‘94mWQ®T¦¼â.-PÂÂ;Äì˜Ô!¾°8—aŒ! Ë¡9©íf­5Áì^š¦´: adð2ÀQÙÅâ½#®Õ°iJI´ÀÆ,èâƒ<ùkåÑÇöpÏä’Ï÷òË辆ú‡q:®ã'ÇY±jr×6”¯V{À8„lÑN¦¸ì«_âCz‹—.aݦµ|ä#ãÂxï»è2˜adÙ\ÒV çRWH3OnsBQásQúšجǓg Õj˜€@:*¡Ä)¸‚eK–ðÅÏü„'û>ü¡÷sâÉ'“¶ö`EÈ¡‡¿�)~Éoû7¢Bc(:š"ƒJ_¬]P¤ãè<çð†jèíE9^× ¦Ä¥GºK—.]ºtéÒ¥K—.]ºtéòüV‰°¶lƒ:gÑq€k!ËJHzv!½\ÆÖZ£… ®Vü^)E—ÿù·Ö‘$¥74®Ôˆãy^�BhPë=i+Céœj$K€µa *ÂD1SÓM¬Uxc0¦ô�8,ÎKæÌ›C\©#¤C)IÛ˜0À;‡ó®Úц<óØ4§gd„¨ZA´ý} Cr ,D:&[d¤™CA`ðÞá}G‘¦¼/Ã!ðáÉ3K£^C ÎQd¶ð8›£„ È–´È�‹õ9íNF­V;ÐøÃ;¢ ÄZÑ c‚ Ä9OUÂЦ“Ü¥kùÝ×Ãýì礗­ä¡G些bá|Ã%z ;¶?ÌÛÞü^þ²xã_RÓ|þsÿĞѽœtÚ 4æÌ!oí!/ZDa…½£-œS¤…eÇ®ÝLÏ´qyŽô-X:ÒÏpO•ÚPR椱`|bм=F‘´±2 °–,K˜;2Ÿí»vqÕO®¡¯·Ÿ÷}ð]¬Z¾�d“v{?Æ$MÁчÏ}÷<ÆäþIÒl’ .è´žÅhÏÌL¥*tÒi^ùªÓxäÑû¹ùæ›xÙK_ÂÔX“æÄ>ÖôTzé(GF„‘ƺ % BìÏZ$mË+^zýõ ¾öåorÉg^ËÃ[ÿFï2æ ó­o~‚W¾â"Öò{úêl¹å^~~Ã÷ «–ññ zûja*#ËÚ_0§'$"Ú1úû¤(è4Õ¨c Kà „säENær¼òeÐê$ÆX\–Q®ðôÔ3¬\µ†MYÈo~ y‘³æŒ3šu˜¡ÆÀ ŽgzôQ¦Ÿh²¸ ÷þþ/ìO÷’Ö¾h-3ÛF·>É®§wÓS¯Rï1T{4>m³h^/ –02ÂÚ�ƒëäë~Á³ÜϪ¥'£bZIB‰Ç ‘VamŽ+ p@ Œ*äHtáeŠ’Ž<Ïi·;D•Þ‰Yr„ó ¥«TjU¬w8W ”Yj?„‘ $i–SS´rÛÏØ¶,^>ÂQ'Éæ3æó¦÷Ò™nñèÖ‡içûhNmcý!«˜˜ØK­F11ŽM;ĺrAšŒrðAÃ|ó[—à|§†mÛFùö÷Äagý²¯}Å*/ê‡ö>ÚÍÂjABU)|i,RypS©á3K»Óbrr OÎÔÔ;· V¯YC¥…g-ÒÎ=ûl²Kküû¥_çü ÞÂñÇm䣿#Ž:„0ÉøêW¾Á 'œL߰ᜳOF½q„ YŠ|’æÄn>û±×±fãj°Š4Í‘•˜ÎÌ4(…šÕ†téÒ¥K—.]ºtéÒ¥K—.]žÁjQddYŽ¥×THG´Z-„œu–( (léV-×ÂËQcÌ÷ ðß<„–"OpÞSz¶égCI‡¢l‚YpÖ’åv‹¸ÖÀÖf†¥äs%Y¼wekKD^033Ͷ§ŸdÆu–Á„(­ÐÊ�åðU P1½½½ÔzzA€·!ÁÈ�„ÇÚò¨\ h·gH’œ(*©²4¥R©”Ÿ+²<EE3Ó“„Q•(ŒÊÛî=J ¼÷Á:�Ò-¥ Þƒ1š(4x/(Šr¼ªôAH«9E¥ •Eë!~p7øÓ߉kpò‰/áë_ûOÒ¶ãØ3–qÔ±‹pÅbV¯YÌWüŠÛïx§Ÿv2çž{.ÇŸpû÷ïeb×6–¼èÐn7Ë I­¿Fÿàü²QŒerlH³}ëÃ<¼u”ÍKN¤9‘VQ‹CfŠz{û¨TªìÙ½‡;GùÞ÷~ÌÞ}{9ã̳9餓îëczj |ÆÐP?I’èAØÇ²åK¹á†xã›^ÅÎ=O°`Á"öïÅYAWÉrϦMGòæ7¿ž~ï:N;ùExyîq`f*Áû2 ÷ZPéÈò&óö3=5ÍœÁo{ϼóíŸâÔ{W°xé"¤lðÈÃ[9ìècùÖw>Íy/y/­ŒùÉ5ß¡Ú`ÿèc4ú°­‰OÑÊ#¥$5A È²Ò+*äì�[à­ Ës„XkIÓ”$IÊ‘²z}öyéæ4Z£2‡,62ô­\ÇqçkþøÇß0~Ûï8êÌóY0§ÂÄø^ÈÚ q»ì“¸:lݺ“׃,èmò¹Ë/åÐuk¹ì‡ßáï÷ý‹–ÑO1Q‡¾¾>Þ÷¾×S­6¶�fÞ|–®8˜=»v±xûªóh¥Ó¥@ ”0¥çX„.Çßð„è@á­ÀþÀc @Îê4”’(­Éòã!®Ö Í(ÒJxŒ0›“å\îÁÈ€ƒñ)F÷<ÁQÇ Êñôýó]F. §žu4\xƒs–0=õ$(ƒÍ«˜XV*¤iJ”e˜Jé´6šý{÷144ÈòƒVqöy/cëcðõ/]Â[ÿñ|önÃSÒE†KZ¥×Y:¤—ØÂ’u,F Ò<#Ë ¬÷hm¢ˆ­[·R8G__?ÕF=Õ:é…7\ðò—ð‚läíïxwÿñÏœrÊ…|ü’·rÆYçáÜÖZjµƒsëxÛ!qÝÎE‡ËÖûîdÁ¢…T†F@Exé­\‘SàqÞ££î W—.]ºtéÒ¥K—.]ºtéò|@]ôÞ]üÜ�Ö¥1/2²´C”x_6Μå€Gô¹U)u`°É9w`Ô*/Ê�6®DáI;åX¢\ÕŽ¢c4qEŠN§… ÆÒ,Ã…Ë‘lQÇ»ÒõƈÀušÔj5”*Gq´’8ëqÖ¢„B ‘”¸´Ã“[aÑ‚t•3!BH¥JŸ¤ð].¢ áR”ÞYk©ÄÒ4§Ìoyf1&¤Õn"„G ¾ ›â8¢Ùœ! „�!Ê?wørÜ+yni]â¬Ã{ˆ¢kN2{ä×S¯×iµ¦(\‡Çå}™çE'ÍÇ¥ßûú-,[Zá+—¾ZO“æÌ4+W®æÅ/>á±Ç·qå¯äÎ;ï§V‡ùóçaCªÕ Ε#cR+r›‘tÚŒïe|ÿúê„:­I"oɨ0“DxÐß;Äßîˆo¼‰kv;vìâ”SOá-oùGY»-=yÚFiK£·Bjм@)eà}åUWrö9§a‹Œ8ŽÈ²‚¸ÚƒRÈ’œî¾ó6ò<áð#6QØ”FO-5IÒFª²ýh­ K!I ´ )\J’ÏPëS4æx¾øåë8õÔSéí[@¥ÖÏm·máߺdëSÎ:ëDÕˆFO/­V o3¬ÍR¢M¹t_º„3ªÕ ƈr¡AÆa­5ÖÚ#fJ)‚ 8Ðæ.I‡’XFämÀiLO-â7·ÝFÕTxð¾X³ú 6±"ÏÐÁ‡ð§žäî?ïfýÁK9bÝ1|õËßá—7ÞÀtg‚ûþ¶•éé.þØÛÙ°f-c»GZ²vý:d¨ñÎ!³¥5uÛ¶m¥‡4UÚí:¬"MˆÔ!ižã\A Jzðëù¬Ä)ø‚À¥@i„ÔH¡PRÓét°ÖE!I’ È¾@áðE>'Ð\Nj²É1´÷¸Ö ?p/ 6,§^ŸËå—]Éå?¼žÇŸØÊÍ7ßÎÛîåŒ3Ž$M[ôTçP$•´y扨ôöR™ÓO»(&BIoo?O=ñÿqÅ׸úªŸ0w¸—wþÓ?Ñ3ÔÏÝ·o¡¿3gÕA—£Ãh-$Jˆò¹ÁkTWb­iôöÐÛÓKÚIY¹z-Ynyö©gèë¤6gÞÒ,ah~/çœ{ ##ýüéÏr͵÷°å¦-lùõ]ìÜõ µ9‚W_x<q\G‡u$]tH¶=@gz”Á… ‡Ñqš=£ûȦÇé©70A€Ö©—ÿ_>¡gYÆøø8CCCÝW·.]ºtéÒåÿžÛ ˜˜˜`ddäÿÕçh6›t:žwËÇ]ºtéÒ¥Ëÿ H)iµZ$IÂàààÿ}°úþw±›¢´‘xo)lN^¤e¸¤@ér´æ¹–jcRÎþ]AQäY9âdM–gdYJ¥R%®„äEQ:TEÙÔ”Rà½EPÒQB „*Gc”Ò¶@ ÊcøÎa´ÂZG¥ZC�y–282›ufA9´åœG Ežç¤åsžÙö8 ç ££g=V 'J"ñxoI:Mò"CJQ†¡® „£(*½¨…+ªÒ ¤Æùï ”’¸ÙF­” ç,Qð³áZùo’¦i––#>a„÷e9 PR„!J)²,£Ýš)¨"áãÿ6¿»s7o{û‹X}ðF¾ú¥!ç?.ÿ+×ö0>õ8ÃsG˜œš$/RcxÑ‹Žã%çÍöqÕU¿äû?¸‘¿ü妦¦¨Õ]'zÈ:’ÑÑê•9ÌŸ»„FmYÇ14¸þžv>;Š ¶íØÏ­·ÞÁµ?»–›n¾‰åËâMo|=çœsóGXª±¡Ýœ@HKf;´ZÓ Õj !ÓÍ«7lే`Ç®œtú©4§§ÉòœžFRhâJ•;wÒÓSgéÒüèGßãŒ3O¥VÙ¹{'Ú@h$H‡÷ ‡Dˆ€0ª193ÃÀð\šIÚÙ‡¿àîûËÜuçV6wßùÞw¹ø’ï’–+¯þõF‹>ð9–-À‚z­s)Òj¶…] „¡)ÎSkÔ£ˆ4µ(©gµ9B*• aÒét�\¸ðÞcÐLP£   û‡¨Uú˜ëðÓŸÞNîç¼úì™ØAÏÐAŒ57]þéϬ_µ‘î{­Û'µ4\ùÃOqâñÇ1¾{'µ8¢•¶P‘a&iš�¶ªÑCºwÓSÌ©7¨ÌÃy‰Ô!ʲ<Ç–(Phå ½ey!Rx´Ò³,Y–FQyqŃ’ ©$ÖæÄQˆ–å6Ï)¬E›€‰ñqlžS‹"Њ?oÙÂîý{Ø´ù˜Þ%­ŒßÜ|'ÍÔ²bÅî¾óY6¬á/8žÏ줧ÖG29ÊÞOÑ72BØÓ`&K)„D ©Ô¸êßç‹_¸–¿þõI®¹æf}à.^vá…<rÿQ©† 5*ˆP£Bƒ54ã A "ŠÜ£”FjE»Ù$MR¬÷Œ,^ŒFš óæ/"4ãû&©ô Q-¦§·ÓÛsØǰvÍ"~{ÇoÙ±}†Ý£û±¾`ÙÊ~Þø†32"éXâ(‚ñ]üýŽéí:tEµŸ±NÁpß�=alb©tƒÕ.]ºtéÒ¥¬véÒ¥K—.]ž'Áª.ƒÍòH¬m$Z+zû´Û3XW64“¤CWñ”GàM QJ’¦e@¨µÆy‹Ã¢”B) ”ai–uˆ¢0,ƒRçd­ ÖZ¤à2‚ÐŽ,MÑQ|@A€÷$‰+ƒR ´¤ÈR²,£(r¦öí&®Vh·›³h•«ÙK"¥"ˆcŒ(ý„y‘Rqyné¤9VfQ…@*ò´„E*… BB‘[„Äq…N;EɲÁ˜fm´’ä>G›2lM“œÂf„‘Áúœ$IfÛ¹ çʪz½§þ „ÈIÓ‰OˆÂ)ZK´–cÚNñ¯—œÁ9§|€×¼òõ¤Mxç;Oäôsà™'ÿ@l*xW`´ræÌéEˆïoxýk8õäÙµkûÛƒÜùûǸáç¦9P¯R©VqÏ_H__Í©I|ž2h3ãûxè¿ácËÀâ~zz{Ù°q5oþ§×²jÕ ž~æIöîÛÍœÞFKÆ÷íÂ;G¥Z'k¦~Àœ™ÙK–8:©%Ï2Ž;þh>ýéË9åä)lV6Y…'ŠCœÍ¨a‹,dpî|.¿âk¼ímobpî0ÂH—‘¦9…m£TL %Ñ�Îjò¼B%îgzBrѿȋÏy=§Ÿñ*¶=“ðÂ.à½ï½€©æ('Ÿ¶‰?ý×£|ö³ßàšŸ}ïcfZ»‰"\ž÷Z3>1NáÊÁ±,¯#•¢ÕìÐÛS^dÈó€ (ïkÎt:9P6½+ÊÁ¢¸ykЏV%Kë6ŸÊ?ù5ÛvwØ÷»ûرíY†-£iSFæaBÉŽ}-þáíï#†‡œ|ÖRÎ{åq²j =|?‡¬^†ÉT;¶oGU\Q(E#ˉ†ærÐêUüñ÷¿å©fÕü…H<ív‹Š‰ˆÂvQ`½#T! #Tf)(µÚ›YõGÙtJ`ÅzOj k3T )œ" {Àz” .Eø¤˜Æ„1SÍœž~f2ÁÁ«#¬Ìcì™­uüz~ùë˸õÖ{9dÃá|â“_泟úGn:eËÖ¶ÆÈm›JµB¥ÓI:ĵ3IJk&A¢yå+_Êonþ Ûwlçøá—ÿùW>öþáü—œˆ/¦™™ikKš§äR£d…Ãyƒ’4OhgmjÕF€-/ÒÌ´i Î…N[XZíõžÂMÓiM"gÏèN"“sâ‹Nà—¼•}ôìÜ3ÃùgŸÂ;.:’¶õ­ý„™DdÛÿöW„w,Ú¸W‹Ù½o;B÷3ÓÌÙ÷Ô3õ0Ïð¾Ò}…ëÒ¥K—.]ºtéÒ¥K—.]ž'¨^tÚÅÞ[Ò,Æ„ôdYRŽ3N¡$q¥†”e­¼zZúT¥”³obö˜¼GµB8´Qxï0³¿j%QJá¼Çï<yÖ¦··J"„¢ÞÓ‹óeÓOH‰µáì±ê$Iñ´RÄq¼FqHž¦EªôÀæï˜ *JZž}êqâÈÐÓßK¼(›„åhO‚EQ€ÖŠÙ›‰÷$)ÆD€Àûò6wÚm*µ€4MÐZ†1‚rÈGÊòøw»Ý&MSÀ#µÂaÙj‚0 Ë«ÙDÜ9O’&�Ø"£Õà K/`ó‰Grêi¯â#}…;ÿp/#}’Oñ¥Ìì¥<­V{VYb‹²a)¤iJ–&ôõõ²hÁB6nÜÀ©'¿€“O;†#ZË)§Å OÚÄÂÅ †ænŒ¹Ã†‘1 ÖX¿q1›?˜GÄ…¯y ›ÛÄÈü9Të!íÎ4ÆHzzêUŽui©fÕ‚$OPRa§ÝêP­V ãˆ,OY¾|9<ò0ZkV®XMµ’å IÒFHO+¬M©ÖC6oÞľt5CÃÕZ )l&ˆâ¡=¹k!LNT )œÀ•ÊBŠd€ëþg¾üÅñÔ¶½ìÞSpιk¸òê¯1wxsá¬37óÐߟæÒ¯ü˜³N?Žž¾:Ö¤£5ív‹0,¿oqQ­V‰—Šj½w¥¸¼–ß?ï! òyÜnAéÝ­ôÑLr* (ÆHšû‰æ³WÆÞñQ¶íœdª ÓÓÏrÞ9§c­ °!?¿îV’<!Ï=!ðÝKßÍû/yÃ&cjb«A@š€ =ÂÈR“B­PyŽŠbÚ{GÙ½s‘Öô|E;`ÃÎÛ©U#‘€TeB´‰ÊÇF`€Ò'U*¥æÀ ´ÑhcPJÐl¶PÚÐj[.»ì›¬^¹žÚÜÅ(ÒL=½ƒóA\yÕµüàŠ«Ø7:ÊÇœÀÐ’…˜@c½cÁâE}̱|ð*Ö®9„-¿þ=?üÁÏX½j‹ ÑÚ¿‹ÎÄ~æÏCUcZyFf-Z”Tô7z9÷ü³Ù´á Î}éËØtè>þ±ï²â  ÌcÉŠåxRKr_>…&B:…ËAIžeA@T­3û|$pY×1Òz@àÈ‘&/çADVñ„x—päÑGqì1ëøÕõwpúi§òú7¾žBddIÊpÅ Æv1¹óY¯]K08 Fƒ”(/Ñ"dÎà|¤ÔëµòBŒé6V»téÒ¥K—ç+ÝÆj—.]ºtéò¿?ÿT�|Ï §iFš¦H! ‚€fkf64µ‘¡^«¡¦ÕLfƒ¥˜¢Èét:Õ<ÏËðR)ò<›m­´6„¡.~Y2럔(¥ñN"DyôŸáñ8'Èó‚¼pÄqLše()Ë@ʘЀƒ(ˆp.'é”fÒéeqÏ+hmÊÏ›çH—³õñè©W™3<—</°H” PZ#…GI£”¤( Ò4+`ë(Œ.ÛzÖúÙ@ÔF’4Kq¤ÔH©1: (Šã^JIâ8&ŠcœóX[6{1QêÚíY–S¯×IÓ”ÂôöhvîØIÿà:}«øøÇ.åß½–u‹«¼ùMÇ1§Þbîp½£{éë‡ërŠÜáH!øÒêÀcÉó¬ ºCYQm ÄÌ4l<lëÖ-âÐC—²fõË`x~ ¡fpÌP© ”*p>#ÉZEŠÒ )Á[[“/J?­,ó6´ E–diŠYÿnŒuŽßüú÷lÞ| tšø+ûöíeá¢zûjDqÀÎÛ1ưpqO<ù 'Ÿz&Î êSÍ)P‡`ÿø4&ìAŠccpËÍÿÅ'>þU®ûÙml{f/kÖŽðÉO½‡_þòyÄZV,_ÊäÔ~ê:ÂIÎ=÷t~qÝ/¸á†-¼ô‚sè(ïÃJ¡¥`b|œÞÞz¬KARäÖ#”"k'äy~@R‚8FxO§S†ÊB:VÐÛ?HÖÙMB)Á�?þéí|뻿ÄTª8<ûv޲zé<V®9£b®úÉìÙ?Á9ç­æôãÖ±¨GM>ÍЪÅtvíg`Á\tM`Š‚j×+mJ eÙDˆj•¾^òv›gŸy†¡ùÃÔ†F08¬w´ÛMªqD ËÇ]^X²\`­À»-Pê?¤d…ejjŠ(šUqˆrìË2¨ó‹>Ç~xC}ƒ¼úPr§IsI_ïRFG÷rÓÍ¿ãÚcÍšA6½ð:Í ¬Ólv7s‡É ˜?>¯}Í+xê©gx÷?_Æ©§m`é’…L<»•Jo]«ÐÌ2ÚIFï�Eî¨U{È;VoØ€6š ‡nä—¿¸’?Ýû(§vCÌÌÄQ½ŠðåsR!JOl%ÄÚœ,KHÚ-ò¢|^Û½gQX!®Ä¨ F:* çgˆÂ^´ŒñV‚p´étv±`á|ZS–_\÷+N;û0âjL%DµÇ™Üú�Q¥B}å:rS!Œ°hø++•xö"ŒZÒ V»téÒ¥K—n°Ú¥K—.]ºty>«ï}Ûæ‹³¬ ÈÝWª1Q’ç9PŽTµÚ RÚí„ °¶<EåDuQ³ãWe˜çÅlk³J’IÒ¡Óé” éŠÜ‚À„„"O3ªõ&iwâJv§ƒ¥¯ÔYðå׺å×[$ ËféôôalÐFQv‚Ñ% Ùlë Ÿ³w÷³ô÷Õé™K‘„Ö(£ tù†÷³#De˜ª¤ÆZ•¡Y–åEŒJ)(lF‘[²Ì’¥Îz¤ÐØÜÍ­�¥È [Ž8 y d-‡¿ ¼w„a0ë k›Œ /dbºÆ—¿r_øÒ÷iÔàsŸº€W¼ì$î»ë¬X1ë& ð„ (JuÂs¾K)BzŠ"õÏZ —39=I£ÑNòÄcO‚‡þ&Æ'IÚ ÎzòÔ - šÓ£ÔkR@»Õ¢R«ƒ¤Iy\^IIž¥h¥Êæ­ÔH"eHTð@£§Š”ž©éI/ZÊ[Ÿdpp˜¸06¶Ÿžž ÌcßÞ½ìß· 1a•å¯çŸü&…õ}ôaLM?MܨâlL½±œ¬ÓÏŸÿ¸ƒo|íz¾ôÅïråÕwòÌ® YÓÇ>ôþLJÿ™“N>ž¤³O|â«üz†‡æÒiuÀ”HÔ�� �IDATÒðâsOåÆ_ýëoØÂæãŽ`xp˜v³EhŒ<Ö;¬óX(QI»uÀ¬TÙ-lN§Ýbrj’Z­J^”0„‰iæ±J°í)°‡Ý{}èËìÚ?É{?ôÏ<ùø#Œï™á¡?ÿ…};v05Ýá×·ý5¹é¦ï°yÓ!L=ýãO?D__¡Þù=1JçDR£´œõç创œmQ A>=‰éí£'ŽݵcS‹᳌N³E¥#%EŽ+,6ThƒÄ϶Sœµ8ÎyªÖæåE!hw”©qâ‹N 4†«®º‘+®ø¸ÊâeËQ¡æµÇ21¶‡Û¶ÜÃääN^qá±Hà\•ùðgù·Oüãc»X³î`z{ ›_ÆM7náö[~Ï+O?žÎän*= ¢FH­~qݯylëV†††hô PäM–-ᦛîáŽ[ïæØM«Y¼z-3Í ¼„@xP¾|\;ïJM‡¤y‚õhçŽ0ÓlrÃõ¿`hî<”ÖLOïÇ“bdg $!ídhSÐììÃ;GkFóõoÿ‚ÓOÛÀÚËQ.aô¾;iOíg¸ê¹Šét2*JÄu¼78]#mO€³8:ì6V»téÒ¥K—n°Ú¥K—.]ºty^«ùÀi=»ð-%ÞC­ZÃ:K˜2MS„TaXŽ;%¥35Ž£Ùãþåê}9òãfßH¡Áƒµ`!ݘ�% Rh¤PR“&m ›#¤Æ˜„¦ÝN¨Ôªå`‹,}x‡³Žë~~ëÖ¬¦^«¢$$I›¾ž^l^Ðiw˜šœDI…ð‚,+š‹QŽ,mS¯TJcd…+•B •Ä;s­ Q£e�³Z‚òx¿øo·×qT-]”2$ c‚ ÂãË€T‰R5àr ë±–Ù`U`­ÅZ;;dÎê�,•JT†­i ¸åöǸøS—ãdÁË/XÉÛßpU#ÉÆ¦Ø7¾ž¾9è`m4ÞK\Jh´ÒE^jE¹ø®µ@©²™V"ò¼ôà&„@+Œ‘´šM¼sx_ª œóTBë´1*À˜)⸇N’‘d9Ú(cp.CiI­ÑÀ˜ E.ÉsBá¥4éí«ÓI”4ÌŸ¿”‡zŒ5ëÖ •Â;AµZ%ítèë@ë¢0´šŽþþa¾vÙ5l:âÖ­_E^Dܶå~~ø½ßð•/\ÍÕWÝÁ_ï߯ÞÉœe‹%Ÿùô«¹ä“oä¸ã6ѨUØ·g/<酑𯛳Î8“¾y$íF—^Í ÿá,®¿þþóÚßòÊW½”¸£\s9i– •B(…ДÆ9/ ¢(Bq@PJ)´Ö´Z-Œ)U�{÷NhÃÔä$ƒóW±Âó/¾Œ_Ýüw^ñªSøì§ÿéö±åֿӜʹ÷ÞGÙrËصwŠø Î:é(Dsš‘Z•™‰½lùù²æ-F·Ç±Þ’9V<Tâ a353CµQCš²«Œ¦iöo×lQïíÃ:‹4Q”¡¼Ôàgß”›'8ëp¶Tˆ8ÑØ¢ °A¤òbD¤ékÔ9|Ó¡¼æÂ—1þ<.¿â«|öóßãÏÿu;wÝu ÿqÅ5¢ ˆ^ó†óI3‡sK—­a||œ/^ú òtg}ÖfÜò››yàÁI.8s#‘mRïë#ìi £Uðhõ~®ûù/øÈÇ®äwwÞÃÚõ‹Y´x‹Ïcñ¢®¹òVîÿûÓœ~Úf2›¢#‰Ò²lí ÷Ž4OBM‡Ä•˜Àhœ³äYÊÓÛ¶±eË­lX·žþ¾þR‚ÀÙhíðX”¶"®ô³åæ¿ð§?þ™CÖ÷rÔ±›(þ;=ô7–²³ø Ú‰£ðЬ“pš$u„•ˆ(T„Ú`‚�Ôân°Ú¥K—.]ºtƒÕ.]ºtéÒ¥Ëó X•Ö:üs¡¡ÐØ¢ G³$Çû²ù˜g�YOäsa‘Ÿ=âü¿—Y–R–À„h‘ç–4ÍR µ¡V«ðŠj"¥¡“¤8çPÒ059Ãôt‹(ŒÐZSdŽ4)ð^¢UˆÖ!AðÑýW¬ZM0F*)™žžÆ˜r}=Žc´RHé ƒ©BÁÀ‚³-ZWº!¢°e[‹µJ•á¯Ñ1Â+Ò4#ËJ¯¬÷3»ð¥€urb†,q¸B ï%ynI’Œv»lè>:{_¶ùžûÁ« ŒA” Ã<# C&&&èt:Ì\Éßïå'W_®8Vl¨sñ¿½©lÌžž†&Ö’JXŨ€")B‚ F)ƒsg˰[IC‰TžVkŠÝ»wðÄÖ§hδÑ*fþ¼TâIÇ’¥–(ªUŒŽ±NAÐ`Û ícúz†É2GžƒÑ/<Y‘à¥QÙÂc ”åý¡Z­Ñ××ÇÔÔ8ÆH††Y´h?ü({÷L2<²Œz­Ÿ8jP­ÎAø€±}-œ˜3¸”W½êíŒÌ›ÏG?úuÞñÎK9ú¨×ñÖ·~o|óv}|¥,ëÖ ð¥Ï¼š?ÜóCÞð¦3QÁöòÎzšÖþ]¼å¯£/áMox/y»ƒ1!J ©<7üò:¤Ð¼þ5ïfÿÎ}äVP$ŽªÄ•xÖE\º›íÖûÄsA¹Öå¸ÙØØ{÷Ž244D–e$IÂPoƒšÔ,^ºŽÇŸjó¦wïþè.^|αü䇗a’Çyÿ»ÎçÝïÜLe $’N’SÕk¤{·S õž?þ$?ê…üúÚ_1zÇÝÈÂ’t¦ÒR ½õ:õj#ÿ“½óŒ–ëªÏþoï}öiSo×U·dÉ–ä^da ¸WÜ0ý¥ØÔ`BO¨&¡'á%„ÄJ 4L1 ÆcÜq‘lÙ–dµÛçÎÌé{Ÿ÷ùèý”ù²Öü¾ÝugÍ:3÷œ½ïzöóžF³Å|¯OT 2!(k!íÃÖÒÐ’]>L<7Cxhea0…ª¸„–սä(µäJÏQK÷¯RŠ$Žˆ“cMå`ׂhñ�3SáØEL<Ã¥ŸÁ·ý”Ï|ú-ìÛ3Ëð la‚OúÃPhº‹UÜ–cçó_ø,糞ÏþãOùÑ~N»½š‘‘éXæç'R@žåô£ˆ"Ï@?êó¿ùÛ·ßÄìünÞòÖO±wï8œsæsxù+Îç¶ßîàž»¢^Á÷!2'Ëb[¢þ"yž e‰%qqÔQ[¸æškX¹r%O=õ½nŽ«†«õ“éħŠ(­F9£<ôàŠ”Á“÷1ûÈý Oâ­XG¯Ÿ’•†P;4‚Æ6é'‚Ü”ù"EÓíõèõzƒnÀ€ 0`À€ øA½õ Ïú`Q”tPª!v”ƒ£+§£ÖŠ0¬F¸³<GŠ%mId ü�¥dõ;Y „•Ðâ#PÄqk õZxÈ­jMIi¾WC)‡4Iq¤E»žï#”¡ðƒ€4Íå·ºÚAPbŘ “Äk(K‹ï{›cKJR¯7—¶KÎRcHú‹Ø¨Ëüü,Ã#CX ³€”x¾‡·”‹™§†,+0Ö’&)ý(ªŠ „Ä`(±•›ƒ£´ãÖj”G9ØÒVʵ�íWbi„ZU•Ð, ÔRVíñÆTÅYq’¤®Ù»³Ç§>ñïÜý‡'i­(¸öËofbx„tÆà™‚R ·8O½>Žã´˜íti †5La”a@½^ÇÚ*j *áQU)‘Ó Ù& ŽpPÂE¢½:®Ò2\]#¬£­Dd–é©y>ÃÓ#QŽ‹dyÆââ<R•8Ž ÈÅíÖhµÆq½€Z³‰ç» úY*¨…Ã<þøn~zËm\ñ‚—224†òZ$QJ¦¦¹÷¾íüàû·ð±ý+{Ÿžæþ{fyøÓ2’¶l™äÒËOâo>÷½ÿ*N?ó(„ˆX\˜'ég¨ÒÒj07s ¨a Áùç=›¯ýÇÍ<øÐœá9ÌÌO¡´@J…5/zÁ|ã›×ñÅk¿Î=‹†ë’f1Â¥Eiç8Ê¥„”¥¥Ès¤„0 °¶ õ(KËØ’°*¥¤®kÔk£<±gš×¼é¯ùÉîcåa+øòµŸd,œG™'évg9ñ”³8ãÜ—°~ýF¶Ï¿èÈôiÊhžñá1œz›8ÏXsÒ)L?º›»o½vXväádÆÅ…«rcR“æ9Ž®îϲ4hסéJºS3ÌÌÎ3¶r5ª^'O“*ûW9(ǯòB­Â)¾§–œÕ¶*ô2ÕçRÒíVùÌž_¹ÛíS÷Ž1xŽ&î-‚#8rÓ&^úâK9íÔãX½ÜåµW½˜3Î?ÎBLIIVt˜›ŠZMÓnrÃu·ràà>^ðüç³iËFNÞ:ÊIG®fnÏL®]CY«ƒti Ob­G–’8edt9'n=…âKØ÷ =÷B¼ EwjÞøk”.¸ü¥—!dAw , ½aK¤ç`0ÄqL^d�ØÒÔê¤I†TI–366†vë”iµ>•å"Q>] ½þ0Yêó…Ï}ƒ'wäÏ^·•‘΢`ì¤Ó0QºÈ2BÏãÐË$F¹x¾À$sh¯NnÀÑÚ[÷_.èÇê€ ð?ËÀ±:`À€üïç¿ãXuʲ¤V ±ÖG1žïbKƒv’¤*ij6kxž‡ @JU BVnQ¡BPóAÊ’¢(ˆú]¬MªŽïÕѮšk¡ßí@­5V$Âàj‰Òм(0&¢´¥‹„µ:ZÉ¥‘þåT9§ÚÕK9®’¢ÈI K e•MJ±J+”§ÈúÍÑ1Lì#víF•Õ8·´•è¦kó*#ÕB)%¹Í°¥Á 5®§‘H’,ÁæW»(Ï¡09ÚLÍíBH‡zØ +S²¬Àóª¸åT…\ *ǪPBiJ”'Aå$ù~S³ÿ4I¢Xµ| OîœæÚÏ_Ýù0ÊÕ|â½oä”õ›™Þ·›(žæ©¨Ëpͧ¿˜ÑÛ³‹µGOàN¶Ø=3ÅðÐ6/ñý:Z¸ˆÂA•[f”hj5M­EY²wÏ~æf;lÞ° G*l‘f EÙCê’ØDÔµ‹u-£«ÆHû}èFHãÐ& 2) ‹}в j(“’,öq›5†V¬$éÃb"¸÷îG¹ëw÷2=3Ks¨ÍP{ˆnw‘8IjpË-óÞwŽ(ÉØ±ý1|š86$iÁìLŠvJ$`-„Äi+^x:¯|å%œtüa~ e<§¿°€P.ÍFO‡¤Q<ЍÕCl™¡„¤5Ôâºï}Žó/¼‚~ôZ>ôá÷37¿ŸF}ˆng‹ =¾sݵ|ø}ÇË_ò7üàŸ§>\g~~7AÍÁæ1¡ïc3N“¨ß¡ß3´›AåØT°l¢ý¤‹ö=|„˜àñ§.¸øe<±'%à_}?Ë'-ý¤ƒ£Ûx¡CwÞ°iCÈÉÇœ‡ï f÷íb¨¹•;o¿…ÿüηØvò66nØ�RðÌ^ÄÊßr×]·Ñ)~ʶË/§tÝ´$‹ q7E{Cµ&iaË¡E•¼fõ2vÞööüþAÖœ÷œV^œàû>^‚DPs¦,év{UùX­Ž°O+’¼@9Š‘öJ;(åÒ‹{,fk—­šô߃32ÌùøÐßó£ëï@æe3^ñêˆ3/¿„°ÝFÄ–~wñ¡ó3ûØ|ä&&'‡¹ý·øÝ}?åää°Õ—àõö°¯Æ)pUÀÓOgÜó£;yæ³Ngdld,,ìeóæÃ9çÜS¹ñú;øöé?âe/»˜5c–Ë!îÍ‚pèÍ/ T‰S ˆ#ÊC(!KS”R¸ŽSeC+ ZH²$£6p$dÝOù(·ÀJCe„~ 7XFà/çàSstdRÃQ#+xè±»X»v-«<•4Ê€Üñè&·æàx†,È!ÉÁªy °Bö¸ 0`À€ 0àO§Ñh`ŒÀõ4ý~Ÿ±±±Cãꦰô{1%®v«lQ£PBQæ€S³'IŽv®ë`\¬P˜¥¬RJ‰5Š4Kðý€²,q‰v«ÑiÏ“eAÅU,€Ö GW柳ãHŠÂR–UÁV©$¦,±e HJéàx>Âqªò¦²Š'¥Eªª Êd)y”Ç Ö�¹ÁÕ5¿N”f,v{Ô‚i–ãx.^ðÿKº¤”””¸ž‹åTãÐ%†(YÄ”®’X‘£”Kèù,vº¤EZéêºþXNerI–˜4§°Iž˜>B9lÚ|³Spí¿|››o½—¤„¿ç2Î;ãdî"OæÀéÑ^V§4Ðú)žÚ¾Éñe°|%®gÈÒE¢(ÆuI’Ñj´ð=…²”A--óý¬]½ŽV+dßî=Ôê>ZW‚²Òšùn¡ N- GÔGÚÌïbáñûi¯^ ¤(§ 6©!"/°‰…ÚS3 ú(×\óq¾ø¥ß�à  ?¨Â�††AØâï?ó-’lé„@çƒÖà×\7dÕd3N&GwÿÙ娣Vpþ…g/<V‰ñ&&ð4Eaè÷"´.Ñ^ˆR.ÖT#ãB‚ZÊ‚m ·ø×/~Ž /¾š#7ÎK_ú*fçvƒYÄu3\myÛ;^Íž§÷sÁs_Î7¾ñ&W®@9)ý~“äi‚Ҟﲸ�J8âtcûa íµXè”Ôƒ1vïM¸ü…¯dÏ®”‘\÷ÝrÚi9°k;N£FVzëàéŒÒ.ESxn ]Ïè$)§y6¶„Ý|Ax9“+WáÔ;ñx‚±aîøñ üâß¾Îi¯xaà2?×adl9E^ày˜¥¬Ì™Zè1´pV¬frË"=pÃÛŸ ±iEÞeÿ náJST(‰E’¸ß#Žb¬±ÔëJ|Db˜¢À˜’ ¥ÌtöcËáö;ïæË_üˇĽ.+FÚ|ì3?$Q)Ÿøälj“žÖ$q?G I­1Äîó<þă<ëÔ£ÐÆ'é@B‚Q%Ý(âg¿ú5ïxëWQ.¼òeÏå oº‚µ× <Íó®8[nü ?ÿÙoxÉËÎ¥ée¼ýgpø3ÎÂÄ t»h#<'±¨¸n±$ª*²4%RмÀÖ,¾ð=Ÿ"Ë(2È ËÔÔ,í–Å S(K¤R(峸˜ñÈöÇÙµç ' ³ûg9üÄg1´b9uT! <…“C! Böñ-2(]&'GÒ¡³o/¬l\ 0`À€ 0`ÀŸ„°ªµ>ôCYVŽÓ¢(ÐZ*Sr‡,ÉŠÄ–‚ÂJcqJ‹Öš<7©ÐBá²ÐEUЄ¨HÇ‘‡Æc´ö�ˆã¸ÊlDa�)ª\PûÇ"¬JŒ¬ÆØÍR†%hÇ­.ÚŠÂP9Eaqµ¬>‹­DaC‰(J¥]T½Žçû”€Ò¦È0I‚£=‚С\ß Ïh§WMQ’¦ ZkGPæK¥S”Ôj5G#„‚RR¢Ý¢0B–QNk0*©ŽD*…‹pB„# \Åž§º|ñ ßå{×?�>|àÃñ—œÏÞ£—q: Èô²”Õ7òÀÔ4OíÛÃÊ#„A+‰çi<7#K3²<Å”•8VRR˜›”(?dÓÆ5´-’h×Mð\IšEH|\ÇAØœ"‰ðjCÄ‘¥9\Gôº<v𠶬®,%/\r"½1ÊHcrxàž]üö®û¸õ÷pÇí €ukFq]A§Ó¯ò'E™P˜’Ng l>rŒõ‡­gÕÚIju‡‰eÃyÄ*Ö¶šÕ«‚:qaÓ¼äÅïàÈ#F¸àœ30…"îçäZÖš|)6Âõ]\×%+ R)¤ÄqŒ‹ÃªÕ«ø÷ÿ/å_$W]õ¢Å˜BöI’Yê-Á?üã[xÏ»?Ëé§_Å~óÓœ¸mS( 䤚E;!¾/8diAÔ/>y)I3&Æ·òÛÛïçÕ¯ùsÝ~Õ+áSŸz'o;†ý{#¬k´†N·C^<·r\Ïg±ÛÃq4ÙF‡[Ôu.¼äbö<ÀãîàèObô°õL6œ¦ ¿úáùÑg?Ï)§ŸÍ²N$'…PÑæ(KC?JÉÝ’Fk“ à¸-Ô¦öqஇqŒdhí2ÓÅØˆ¤H‰Ü˜Fâi)QÔ'Í ­É¡ˆŠÂ ´C„Ô‚¹2»0MS&ÔÚ%¹ˆØ´i3'œ´’û~ÿ4“>¼éÍÏãá]ÓüßÏ|Ÿ ¿Ìk^õ Ò>Åã“ôâ6õZ G•ìÝ»4ï±0k1E©‰bK&\|ù™}ÒQüæ×;øÄG¿ÀÏù+¾öÍÏÒõ9éÄU´‡=~óÛ‡xú©§ÙûôAŽ>îD6<ó4æfg°Ep—Ê«\¿®éÄW‘šj]4””Jµº&Í2úqkBzÔG‡˜ëîFf]š¦ÈRÎîab|3?ºå§,¨OqØ1ÇÐZ¾á…äI ¢œ„4šÁÕ@B„´Ô¹ )¦zè¦=ÊßûÏúàƒkÀ€ 0`À€ øSVûý>a"e%4yžwHXB,•Rå$iJZ(©ü¾ ¥Cžeô“íû Jâ,G)…1c«Â§8©ÄÚF£¶ä„­Ó?¾?Žƒï†¸®‹ã8‡ÊžòÌ*ËR $BT.XÇqQÂA8¥ÖVQy^¹Ì¬…Ò @Te:Æ%)®£@Jâ8¢Õn@‘g)­ †v\ú>®çQ˜‚^¿G­VCJIž§EUâõGÁWÊʹZ,t9Jâû.‰Š~?ª¾G+ÉŒYe%…ÉÐŽƒŠRxP:HRd†'vîç×·ßÏM?¸ZCñ‘_Ãó^x6‹s{ Õø ËúÄYŒ#¡È#jcmÜÑ�ÝV™G1¹ÒÔkM¢´ƒD¡\‡¸ß§, <Wam•AéJ”Šùù)†šM+ǘ™:€ëºU1™UP*Ò¸Àb)Ý!")˜X ™²{&e²é³gjGŠ'Ÿœãþßíàþ»eú@L’”$yI»_ôL>ñwŸÀ1i֧Ȳ"&M+G´ÖŠoëzòBðÉ¿»–¸?ƒ”e)3fìeföq<"´æøà>óF>þ‰ÿàÙ§nÅÓ×m(Xìfh-ñÇÓĽ˜$¯¬°žçá8šÜd`-R–lÝzÿöåòú«ßÃäÄ8œ{Qdé-$¬;XQðù/üÿñ¥yÁóÞÁw¾óÏœrúi¤Ý]8R#DŸ<Mi…ÑíFÔj-â(£Þ§Þ˜àþþŸøÇÏü»žža|¾{ý?±qÃj²b‘ÂÆôú9Eá.eúú„-ðüaOcóŒ¡Ñ:Ý+×®a¬Ýâ°M›xô÷wóÛÛogÙŽÇ9æ¸c™8f3…Mýé¯yúÖ;™Þ¹‹£¯|1©.™Š¡°L‘§ ­ÖYãØŒÛNfæî?°ÿG8̯±bÙ0}“3Ýïa³´:lðj(é ¥‹_«ãy>¢ÌÏÏ277GͣÔÊ%Í&ÏqÚ ò”¬XdË– Üxÿóí/‰Ÿ\ÿ] å£û~ºyŸw¾ësŒŒrÆsާÝl‚ª#S”àyÄ)JhÆGÚœ?@=\ÉØø&æò å+ŽÛz'm=… οsO g=ç•<ºç§´Çí¶bz_Ÿ}û²lÙ æ§g!ê"„¡Õl"µ¡—e”I§ð©Õje5ùÒšRÐ"††< †™ùÇA)ÍLgžæÈ8^#Äæ)¶´I‚ëìÚõßÿÁàԳϤ½i+f~†bÁ+ȵA™ëädqáZ’Š>ª=Š?ÜÄ­7}“vkh°k 0`À€ 0`À€"¨·]ý¬þQDMÓ!Y–Á¡yž‡ëúH¥(-QåÇIB’T%7A¢¤"Ï ŠÂ"e5 UÉ•R†5Ê¥}¨Š`Š¢ Ks¤r((+·jžçdYŠ”²r¼–0S` Cš‡bLa±¦D».”TB¬rªÂ))QŽƒ“&xR275MX¯4ë8ÚEû!EQE1RVÁªœËV…^JR–ày>J98Ž^|CŽÚ,Ë)KAi!Ï YfÐÚÃqÜJÜ- ¬±äEÎââ<Bj,àS–.¥õXèdüèÇ·òõÿü<˜R¯+·É÷¿÷ žÚù4ÛÞÍÞ§06Ñ 7ƸŒŒŽ3ßéqjÂú0YJ‡”xøµB¹dYA^”é�ŠRøÙƇZ­Aœ$Håà¸5J\léSXŸ0ÃõÚxáÒba!cj6㑇rÓO~ÏÏoý×]ÿkþýk?ã¦ä¾{ö3=—#Ë’e-þüÏ/ç­o{ïx×ëqtfË04ê02á1±¬Îò-V®a¸°qãZ¾óopÂñ›ª3?»‹¢˜§×ÝOàÁÈh- Ò¬ÇÐØ«W/ç¡ûïäŽ;~Ç^DiÖ„”ø¾¿$ì÷(rƒ’$MI’Œ^?bvf†F³E¿×ÇZˆ9öè#xû[ßÏêUËØrÜÑ`Ò¼ @iณžÃ²ño{ëûhÕ5'l;‰%ORò<Á÷ˆ”,˩՗ÑÞLw^óñ~žO~òZ¦fû¹¹Á÷nøGŽ:jkU´«�� �IDAT3³»™žÚËðPkr¤TAv{˜</H³‚ÂXš­ÝÅNU:&¾d Sû÷±jõZÆ&ƹ÷þ9¸o?~b9q+“G¬Ã ÿáæw>F JV­?ë€)KB¡™›ë’y.žôhMŒÑk“÷cÊ}Sh/Äk7@— J´ôÐÊ=ä¾v”K aˆ±–,MÂ"€4‹™ž_ÀU’2Jq=]÷˜[œf|¤Á©Ï9‡£V¬æñOqòÙgqÂ)'rã?á{ßý!kVsôQG§%>|õË×spf–óÏ?–­'Çž'¦øú—¿Ã¯þ�ºÖddÙjš# Úi0ÒZËÊåGò‹_üŒíÛàŠ\Â/o¹‡šbÛÖÃ8níjv<ò0N=…Å…Y”V¸®Æ¸šÐñ ]’%«b¾Â,v{LMO14<Œµ–(Ip}í:ôã#@ Ãüì~”µLޝ@‰€k®ù?ÿå.6áó¡¿}7Zö°ÆRC’$ôz}¢8¡”"Ïr´rõ6vïAvüøÇüèŽ_pí·`Ë¶ãØ¸í¥ÿå‚>(¯0`À€þg”W 0`À€ÿûùo•W…aHš¦8Žƒïû,,,j«/Ë’$IPR‚R…%Ís„rT«ëz)ªqIÕ”¤8Ž� Ö„¡·ôOFJ¸®KQ”e‰§=æûüPbŒ ,K¤Hé ¥À–¶jè–•H+e‰•àë�k ,ÁÚ­ü $K´«�Ès…19¥H+J#ju‚°Fi�D•ñYB)$R¹¸Ž‡” Ýp+×lžcL‰ï!0ÆŠG¨D‘nåŠt4RjLQb-¾‡ r³*Gáy5L‘“›¿ÖDûy*é÷b¢¨O­>DÜÿ´‡Þùγxr×~n¾ùfº”ÅyC A;¿áÓiâ‡×…m'Æá+GÈ¢I}¤Ïé—œN;êcQ8®G¿×C)ðcˆ¸O^¤žK£Ö"É|ú½.©…Ÿ`¾g˜™™eÕÊ D‘aÏîÄñ,Q¯G'Nxð¡ìÛ3ÅcÏÐ[Œ‰£ˆnÏ’È�íÀº5uŽÜ¼žË/ygõ &WLPdóô£¦‡TЍŸe)ÚññüJA%¬ZÑæ/Þþ:þéÿ~”}øÃ´Úš8êb‹.Òó°&ÃQ†á¶Kg~/aØä}ïÏ»ôÍ|áó×ò†7ü9…„dYJ–õ@dx~ ÏõÉMõ÷QHš­6Ö¸®¦´½Î,Ï~ö)|äoßË_]ó·ôû^øÒË™}jÏS”6%Mvñ¢—_ƺu“¼ó]dçð¼©|\5C’NÊ@ûhæžÎùË·}’o_©5<ûŒI>ÿ/eÝa+0&bddˆfÃE©ßu—7*óâbåø$eÂc;Çw¤ ñ]Y ûV m¤7¿ÀØò•œwé%ì}h;ÝvñD7fÝÙ[¿àdÎ;z÷}÷üþ+ßfóÓ9ì´m$&íF4-bc©IŸæÐ8X¨iÆŸ³•'n¸™ƒ·ÝÁágžF£é ´À÷\<©I ƒç¸¾G–e$YF£Õ¢Ñ¨c³Jƒ) Á°ƒ‰À+}G³˜LÑh�v†ÙOqÕ•˜˜_=ø0¯ç¹ú ¯ãíoþv?µ²tHÓ‚…éyâ8¦È¡´–"Í™˜œÄsê<pßNn¸ùc”&‡3Ê Û6ñœSÏâÌg?—Ë^p ïyï_ñäÎxb’ñ±Ir¡³Ñl‚1Dv#…¥HKJJJPbèuç©¶°ÖPt«µj|bŒ¡‘aÜ%Á~ÅŠådiB‘V¯š¤š¼;Emh„æp›¢ñÕ/}ë¾õ{Z5xß½ G;tz1­¡Ò)K‰Š5II?cÑ)О¥1ê2óÐ}<xÃOéì²õ%¯àÖ] >ò•[¹è-ƒMnÀ€ 0`À€ øSÀÉójÌUkµ–0 ‚€~¿O¯×£ÝnW9¨~%8*é& a-¬WJ”Rô£¾çÓ¨7ñ½¼$­¥09½~†çyxžWåZº.RJ²,CHÉøø8Ž[•hi­ˆãíÊÊé*¡¤DkMY’$ÆTQÖÚ%¡6cq±Ckt”îÜ4qÓh4PJQŠÊIÚKRn@Xo27?Mctá»%DQŠ’)²¼j¯D^‰Öš,ˈ¢ˆ0 Éóœ~¿ëºÔ½¨K½Ö`jê Z¬Xµ t:¤”ôº=<OÓ!î „#°FbŒ%J"7dvnšëoø þþ3ãðÃ×àhÍÜ\Ÿéƒn¾é&®ûÖMìÙ•Å)§¥%'ùÝoö�ÃMذe;ß¹ñV­ZM{tŒÉ+¥V«12<Êô´aq>¡ÕtÐÚ’[Kž žÚ³?¨„òù9¸å—·qp‡Ûwrðà^|pz ²|ÒD ž” §¸ŽËŸw!Çž|k×­`rÍ8qw ÇÉÈÒ§q”!3=Œ‰H"A’¦ B7 ÌK²$Áq ¦§ö°õ”ãøÒ¿~‰»ï¾ƒF3dýúIF†ëeˆ;³¸ZSÕHx·3K»ÝâãŸxo}ó§8ç¼ ™˜˜Àu-Æ–ô"Ö¾’Îì"ã8äYA½^£(ÀŽÒ•Û2ËY˜áâ ÏdÓ†õœ{î«i5‡9ï¢ç2s`7®#H².qÏ8}_þÊG¹üò÷r`ÿ[øðGþŽ¡Ñ ”-PnAž)æSÞ÷îkøæwoB)xÕU§sÍ_ËÚÕ+YŒ)’×¥\:óóLN,ƒ2"7 …ÇäÄjúqBœEÔ‚€°æx&OȲŒ0¨Ñëö^€QŠúP›Í§n#ݼÈ?ü!OuÇ=ó$šëWrÒK.æî›~ÁΛog8öå/Æß¼–…§÷°¼6B°˜ö´Gi, é<ë.z6ÅOòÔ¯ï`õqGÑ<rHEÞˆãÇ÷qœjí(Š¢Šö(Mu0†äI„P.Rú˜Ž!ÏdåœNûdq„‹ÏªVÂöÝ9Q‹.| ñöWÓjòÍïÜÊŸ½þ¥ .G©9ºÝެ_{µf‹Ûg¹ê•/`ëQk9òÄcùÕ}÷ñ»‡ã¦þ†Oì&¶mýöº+yÓÛ.à†oæþ{vòÃÞÁÈËÉ'‹£=;³,Ì쥵f ˆ´Û§Y[EÜïÍÎ ”Å­…ŒÓï÷éF}„®kšõj½R”¶`jÏ.V/_2'¨¡3ÃŽ?<IJ¦Ï /9Œ“O=+žQ²ÀðpmKúiDa%­‰63;Ÿ`Õ² jÒÍOñ›o\Ïž;ÑRsô™§b¬ÃK.9—W}ÿöÁ®5`À€ 0`À€ü©«®[•@U¥PÕ˜þÜÜõz­u%8ëamå^-K³4š/°ÖPÚ%ÿXL•-9HRyÆØCBH’$FÊJ¸4Æàyþ’#U µ‡1ÇQ”X›c!MS¤(åບ4Α²\÷8ŽJLÒG–Fõ!Ër„£+Wd˜Ãb—4I985ÊÃÖ¢¥ÂÚ”F' �BTŸO)…”)UåÎâS×u]ÊÒÒt*çl½Þ jH °† Àb­!‹c¢8¥^k’&N—z£MQ¾ñ¯ò¥/ßÅYçÁ²emöíßI)rÍ!†FK^óºçñÆ«_Êíâ±'¦¹óîÜvû}<üÐN’8Å�³‹°ÿ73Üþ›b~‡V`¡`hD ó1Xµ¢MÔYX,¯Yö˜fa¡‡(3Óil€*ÐÁõÀä0\‡f»ÍŠUãœxüJN:î(ênUºõ¬3ŸƒU›„xa'ÚÓÌÏÏP˜Œf3Às}ÊÂRä¡7 V“ô®iÕ‡™[xœ¡á¥É9û쳸þúøÀßC‘W£ü>p?ã£ÃÄÝ>íÑeHÝÄæ–ÚHg<ã4®~ãnÞñ×ð­ëþ“¹ƒOÒh¸ÔêuÒ^R9›MI„·Š¢ˆã×óq”ÀQlAž',ÌO±îð•|û[ŸæÍoz6¸àyóô“÷"Ýd3ßaÙŠ>ro~ý»xÙK_Í?üÓ§Ù¸qI‘Pd†+®x¿ýÝA–hÞñ—Wñ¶w¼–(ÝËôÜ^„tÑR‘¦)Z9P:¤‰A”.R@e³tO•>®[=ýnk ¼zÈ|§ƒ£<ßÇ A‘[%bY“Ó^x)îý÷Þ|6odè¸-œòòW°÷Öß²ç®øéW¾Â‘§œÌaÛž ©Ñ+ ý¨SZ¼Ð'Ís¼u+X¡v<ü0C&ebýl?¦L3¼ÀCIq¨Ô²$Ï3( *1$QŒß!/bT�VæÌÎui4pË‚°åóªW\Ƨ¿ð}[·‘×·}ôZF[Šù9—©ù†&VÓíuñÝÊ]¾lrœÅ¹)††G˜Úñ­fŸv»Ïe/=—ËÄ«yïû3~~Ëù·û&7ÿü‡|ê“ïæ/¹”×^ù~¦¦Þõ®ó8ê„ã`ïÓÄQ <×2>:D’jR$¥(iV‡9KÅUÊq¨7(í@i1EAž%(kiN½EŠVÙ_äþ{îe®ÓãÂóÎàE¯¼Ü åy(#™›ê0¹f ý~—ùÙ)–רù†ù{ïæ¾›†ã…¹a3Gœ~6¢5D<=ËH.xf}°k 0`À€ 0`À€"¨÷¼ýœþ1»G.‰£½^0 ÑZ/‰Š•{ÔP ™‚²¢°˜"¥Š”˜¢XÊ-±¶ I"²,ÃÚ¥lTSâûÅÒ8½”riôÙA»Õ¨½ë¹”ÖTQ¶z½RNÕd_cª¼S·*Ü2&ÇÚ’‹±ÙRŒ€DJÖ.E‘Sƒ)JjA€O vìØÎŠ5«ÑžŽGi% 0ù’(,ÕR~j% gYF½^?ô³µ•EAPpûA5¥-‰¢¨ºW¡”ÄóôR«Äs5íá&Ón·9öØ£Ô¯~ùwlß~7Ï9ý$&—’¦ qa²®*ð\ËáG®aÛiÇóÌgÀYçncëÉëÙ²eŒ#7 3·w/q>•`Jpèt,†kú½„½{™ŸïñÄ“388Ëþƒ1ÝN•_ë» |¯A–Fx¼øÅçðÚ«.ãµW^Æ«^{)¯|õ¹œyÖ&——lXã1sðAÊx­† HæñCT[ †ÚmÒ$#K-íö8×Âæ.&wq6’€^¯O³¥1Ö�>ëÖmä[ß¾žñ±q6},OîÜŽ£ea¥,µö&µ$qFšæœpâÉüø'¿ãÁûËó^òJâþ4a ™™& ›ø^¸”l–ÜÈêнæºzé>ÏÕÌÍdÕºÃ9óôs¸úê7hÅigÉçq=A¯×Áó|Ò¸à‚K/aÇc;ùë|Œe˶ Õ ^øüWr÷½ûhÁ>ô2Þú¶?£·¸‡4ŠÉÒŒ(Á–ÌÎÌã:.ŽrQR“¥9¦×óR)®v(Ë‚¤Q–†0 0ÖR kHYåg™!M3,‚^Þ¥6Ôdhå*V®\‡YýåtX}ò±¬8çÙÔ¥bêŽ{˜½ç&&FaåÁPƒ¼¿ˆHsš~ 'ä ¼Ôê ¦þ°“2Mðk.A ¥Âƒ’ÜäØ%ÁÑš©¾öˆ‹%R&ÄY—(+™]‹,$ÇffßüŸ+ŸÇ×o¼™_üæÒ¤ Š,çs ¯yÍ ‘JñØŽ=|ñ‹×1>iyûÛ_Mš.Ò†){ûÉ{4Jò2gçî'¨7F8æ¨ãyî¥'rÉe' ]Ag!â÷wßÏÃ;þòM´Â²”taCËk8¡‹ç71Æc1Ï)’>­PSZE¢=$DqL¿ß¥»¸H™e´FÇHçæ)“ŒÚÄR;¨Î{¶o§ß[dÓÑ[h¾Ž,‰±‚F°^CkÇoæ%žÖ´FÚxOmçîo}…Ý¿¿M‡¯aÓ°üÙçrýoc¾lYWã‘{oaÓ+Y{ü‹þË}±:`À€üÏ2ÈX0`À€þ÷óßÉXUï~ÛÙücË}Õ|mé÷û‡rDÿ(€öû}°%%J‚c2Jkð=D&)YZ¹ZWQ˜´r³*‰ µ&IRLQ µ‹çyh­ ‚8I«Ò+Á’k1¦ Ž+qR ø£ƒTàžŒÉ±¥Y*Å2‡rQ³<,E‘£k!é÷Y†?4 YÂØ² P’œ**@;.ÊÑPÚC[À’“·zï4M)ËÇq–¾3Igq–4MPJõ#:E $ kKÎÙ*ïÓC‘xÚdž’Œ¹Ù¸Z¢ŸSO= HøÜ?þ–<;ÀÖO¢^ÇW דB™Ðé M¡ƒ„•k›±q˜óÎ?žK^t>—¶å-xùËÎcÛ)ëY9éQ«[V¯iÒ¨kJ£ \—áaá!Ÿ•ËëœtÒJÖ¬ªqì±+8íY'rÌÑDZëÉ}iÌØPÈÆ -¾ÿƒæ„“639"ݘBv0¢ƒ#»ÔA×ÌíÛC{Å$^«Igf¿Ù"cz½.ÆXŠÜÒïFX#È3ƒãhjaˆã¬-ÈM$ɉ#K£¹ ϯó¹Ï}ž /º×Ѭ\1‰vÂZ0lasE–Y|¯†…5œpâþúoþ…UËV­Z†5ív S”ªFÖó<_zP@k§:$0–$‰É³c šKa&׬dÅä8ŸüÔ?0:°eóJë „ÆÕÓÓáÏ>›ñÉõ¼÷}Ÿàúëná=Åò þöcWóú×½„é™Gñ0iFœÄ¥k9xà�Z+<×…Ò"D‰ÒŠÂdDIŸRÊ"SRZC‘g˜ÂPZ‹1•ô0%Z{å¢D‰›¥$qŸ,ÏñG‡Ñë7°llœÙ™v<ô*ê³üøcY±n5s½n»ãVâÝ»i Ak¨°º *+é©’ÔSÔGGõšìßõ8B¤ÔÆGBÐïvI²­«¨²´DýI„ZX#Iˆ“†GGé,¦üìæŸrô‘ˆ§9øä£l9õ¼úïaïÌÿá)²8åÊ+/áÔgMn¾ùõïð“[àÒKNáŠ+Îa´í# Ÿù§aÿãwÑg¦3<¾’¡‘•Ü{ÿÝüŸ—^ÉÎíû9樓Y»v#<÷<Î=w+YÞ#ZX %fqÞ¢6T§Ä'KÆ÷qUAè @c-”RPXCœôɲ i-s3ÓÐÆP B°–î#ñÈÝwâ{›¶žH°rÊ‚éÅy¢,¡Õj’.,õû¨¡&%Îô<Ó×ßÈßú&5e8ö¼S:÷Ù°v5Vµùâß}“o|þ[œ²u ÃËWpì…ÏqØ@X0`À€Âê€ 0àO@Xuþè­D‘òÿg%. 7ÆT#íÆXLa®Å–ˆJl‹ DJpIiIilõ^RÊ(-–Uíh@玣I’GK_‰•ZkÀÁÅÁ kUN–Ve2¥¡(2”ªœ RV9¯¶¬œª¢(1–%1×%IS‹–?ð@   ß‹ðÚ Li(Qé diNQ8ÚÁÕDÉJHu–®Ÿ¥ŒXp”%ªH­ðKÏsA””˜jtØä(¥ÑJâ È‹“÷ ꚃûæ Ñä5W¾G4ù¿Æcþï½æj6y8SPš˜Àƒ4Ï«ï´,°Y,NY0)½}XqÄ6¯v)Õ þ†çCX§·ØÃ(‡(Éèöº(ž_eÔªÒ¡Ñ è%‹Œ/?Œûîy˜ì‹,iQ_5Âc=Êó/¿˜$ÚNoaQj„†°brIÚωrÅкm$ 3ícù±Cø¡fnz#+Ib‚½ÅE¢8%Í©Õj¸nNœí#/*§qQêõa²ÄÁZÁÅ—½˜Ÿýô¾ú•¯ñæ7^EÍ¡uÈÁýS µ'XXèÑE*‡RBiJ6¹¿|׼孟ç?¿þ<cÛ6<½‡F«M¯ß«Fç=€8ŽÉóÏu«{IK­ñü€([$+ræg{œ÷Ü“Y¹êC\uå_qÿýOð®w¾‡€¨·@­î%ÂÚzV¬\ÍB7anv;�ÿ|í?qá§1;{ðØ196A³Yc.Žð<ZÍE`)LŠ t;¢¤ÏèØÕ3ú5z}CÔï34Ü&Ír´v ‚¾['IS²8ÁWÕsTjM/Ï ƒáˆ3Î`C¯ËŽ;oç—ßþ«6­gÓ¥§3±k=÷Üô3~ñµÇ8þ´g±üè£ËF)Š”<‰p"K’çxËÇX?|ÝÇæÑÛ~ÁØêÃ]³ž^f(ò”R@a2„ $JÁBïq´ 0… ÛÍñ—M[Öð轿DLÏb¢‚Z­Ž-¦xíë^Ä ßý¹@z#\ó¶×ñ•¯ÜÉ‘‡qõÕo VoÒ[x’:!cËé?9ÁðèÚá(;÷-ðÈc·rÌqgqõk?ÂûÞù ¾Ý›øÎõ_äðMc$Ù³óû™lL@’“¥m/ÄÑ‚$JHnµÐŽGi´ç’Ç9Y–QʪÀ®U«#)©5ªç¨Ñ†(fÿ]wq`Ïc¬Y»šáM°XlÚ¥o-nÛ'ÍáÀô^†ü6®ã¡dï·óàïî¢Ì"žuÑŒlY VRü¿öÞ5\²ª>÷ý9ƼW­ªZ·¾ÐÝô•nºih¡[EŒ€M0žˆ‰›gÇ�Gs¶7‰š‹ò$FcÜI¼ÄˆDÅ[Ø1Fñ‚¨€Ê½é{÷êûZ«×ªU—yŸcœsÑÉþ°OγÏ9‰çyæïS}XUµjÖ¨5ßùþß÷Ä1Žüì¦öÿ˜í[VðÅÏ?Äc;wóëo»•"ËPÎÿ½“ºšššššššÿaõÿ}øùÇ©÷ôšššššš_ìý\ÅIŒ|ßÇqâ,¥9ÒÄ÷|° ]<ÏCJÈó’</)ŠKZ(U¹Hu©q%mrU"„d ˆ‡FHà»Õßi  l›hQccã`Àc4¥EQä8ªX‡q„mËÅ8T6J(ÐUINYVY­B„±0º:�Uf+€À±mTS‘ ú$yAvj–8Ó”ƒ!ã*R@‹*¾ ÈL5ÒK5"®¤"Õ) úC”’ÕØ8a \שÜnY‚Ö×qq*V@Jë´óµ(*YJÅ0P– íecôæ¦aày!ñpˆïüÆ[nâžwý×wsË-ïå—ßð ~ó×od´=JwþJ:ô£?láMæ#о€³îü3ùÚçîåå—lcÎhÔH“´°°m—ñ¶…Ê.¢�Z(òyÒäñÇÂÿ‡‡¸ìå;xòñŸøW^ñB†ý@* Ä¢È}ÒTQ”M„v¡§Xºa;'§örbß͉Ú­Ã…Süã?þ›7oaÕšuŒŽ6Dñqný�ÇÖ ‡##Ë)s‹V»Mš Ýy>øÁqã7pí/]ÍŠå£ôû]&—­eîÔ<± вDHí:,œ:…6)oùßbØ/¸óÎOð…{·26±‚$M(É¡ÔxÛÆP2ì(st.ÐÚ%1Ží‘ç)ÂÝcËÖµ|ïû÷rã¯ÜÊíï¹›»ÿüϘ>þcËé #îÿüßó»>ÂÜ©½d+ACòžwßÊò%cÛù›É†GHƆ$Ù�+*(ò ¿ÓfÉ’Q”t<Ç!Ë#ŠT3ÒjÒhúÄqŒ‘SS‡plŲ¥KP¶KgôC”T-ÉR”ŠæH‹¹™y©plI'hã6Cz½MÏaÓ¯`ÕÌQ{ì‡<rß#¼rû.ÿ훉~œ=<ÁñgwÓ<w˶marùJHrÊ,£kE¨("ìL0nŽ˜âÔt—Õ›6áŒa’ŒÔ¬À¥Ð%IžâºWHÂö©Q$Ù)–.ñiµÆyäɧèŒO‚mc)¸ïïþœƒ{ðÓÇž`a~/z)‡õ¸õ¶÷²ígqèàÓdÃ6lXE6ìÑ ;``ɾíæõ¿þ~>~ÏÝüêkoæ/=ʾò~ç–wqÿ÷P ,Eg94\²,ãÈîC´ÖžÈ-° Žeaã†<i£I) tž£-ƒÊuuÁÅóé>ýSæŽE[’ÎêõŒn;Ê KdeÓ›ž¦=PÄ9viáÊŒý=ÂÁÿ™þÑ#¬Ú~›^yþÖMÐï²ûGO2µ{/e 츘‹¯}=ÏMOñ»ïû2W¾þ×X²dõ¿ù¥nŒ!YÌŠ®©©©©©©ù÷?KÓôÿñã”eI’$ÿÃ]MMMMMMÍ¿–ežvþ7÷þùc`¤TyŽÛuéu»ÄqÄH{[J†ÃËJƒÖ%i–â{Aü‹B«e© ØŽ%4½þ,®[9#µ±°„Äó«6mÇñp}<Ï«ÜT-m¤%‘ÜÃp¸ÀÆ-›±¤M’‚` K(ò4ÂõªlÓçÝ¥–E~Zhu]›a4ÄhM–f8ŽF †è$¢ˆûtÚ ‚0D†# “’R8”EŠãˆJdËr”ª„·^¯m+\×A)!XÌ“ÍIÒK”t±,…ëz$i†%$E‘cYUnkYäXBc;6J*ò|1ÓÔo277c» 4­ö>òïyß'yö¹!W_±‰»îz7¾+vNšuA$E•1«„ƒmû%h†Gïÿ:«ÆÇY}ávR_r</iŒ¡9d–¯HÊ!®,)´Í0vh­ãºënbnÖ°ã‚-|ýkßå¥/]Ïg?w7‡÷=ÆË&Ja„¤ò¶ Q��+IDATÛïÑl·éžšÇSŠ%ããXFSvOqôðAÆÆÆ‘áÆoðGø=®½î5œsîâ$ÂXÛq¶M™—d¹Ak­ÇòÊ q¿ú«ÏräèAÞ{û;–¡Ûí"¬’,OpÏõˆÊ ¥Mž•Œ´Æ¸òU7³ñì3¸ûî •&/ô{³LL¶(ó)%¦€¢0(éàZE™¡¤V“$M°T†:Dñ�7œdvzÈu׿ƒ5ë–ò±?û$Éûïü÷|ô^”€‹_¶ŽOÿí³bår>üûæ/þâ Üu×m\wÃkXX8ÁøÒÇ1xyµ.leÇ qœ1Òìàº.y^ba' ¾ßàØ±ãÌžš¥ÓêÐiÐë- ”ÍôÌI&''˜_BQfŒ¶É“!HÓ”¬(±]·*R£rKÏ?Éè’¥8aƒ“Ï<ÎÔÏĪv‡±e+P…ajçNžÛ¿áûlºàF·O$IJ\ ¯S03Í“=ˆÒk¶C°å,J­‰Š㸔aQöSly6Q9Ä)"F|ÿkàŒ´yá•W1ÛÒ™\Îvîâ[ÿøÿؽ\uÕÜóñ»hû ú'X˜Æ1½…FC˜!>±—öY;h®»ÜZÂ>rýÐÃ+J¤V§`Ë ×pï?Éh¡Ë˜®Ê×%ûðC¢î,çÜp ‘§û(' 7¿€ï5PbXôÐvNž$¸… a§ôžxŒé©¬]9†µõ"úí pË!v!”© ƒž™gö‰ÇùùCRvgXuîY¬½à<‚­[)•bxä(S{ö3(K&&'Ywö9”d‚Ql¿äWŸ8“÷Ýy;^ðºÿéúp8dçÎÿêÂRMMMMMMÍ¿7ÆÇaëÖ­ÿK÷Ÿ™™áàÁƒH)ëƒYSSSSSó„ÖšV«Å† þ¯…Õ“ßo,ËÂóŠ¢¬Š’Ê’<Ï Ã`1Ç´DI…‚$I°,k±õ^eÙ¿WK„€²LévgÃ&®ë“囼„ i4FH²”(ªF¢¥+)Ò×öpm,ÍÑC{yð¡osée—²bÕZ„ç6½~DÓsp}‡<¯Æö-K,:UÅbÁUECeaYdÕÈàù,œ<Á¡Ýϲ~õJÚc£hË¡p<±Á¶ JV.Óýº_> ª2¯²DkR6På®–hm°m›</TµŽã¦9ýþ~ *aI–•h-iŽÅCš~¿Ëèh 7ùÖ?=Â_ÿÍ—ùáCG¸âŠM¼ãí¿Ã–sÖ277…ÖÊ]”ÄQŒ6¹ï±z¤Ãà‰gøùw¾Í%¯}5§|cKPÂ#éFÈ"G….¥ˆI“²Ì¦Ù^ÃÝÏMo~7ÿç_ãøO?yˆ¿þo7sõ+_Jgù8ƒ“‡H²i;Fã…q†!q¿KCÙxŽÍàÄqŠ$¥½úlŒt˜?u %®çÅCßC !-¤TKaˆÅciŒEžŒ°¶G–\s͵ÜóçwsöÙY, ” Íaiƒïy4ü�S†ƒ„‘‘Ã(§ÛOxååoâWßt ï½ý?~ˆ‰‰ÝîI–Lv8yü¡ß@Ii)$„®ŠÇ Ïs€ŒÂdä”ÝÀõ'é÷þ“Oòý<E# øÖ7„n»õ—x÷{nÁ˜y\i¶Çù‡¯ü3·¿çÙ|îÙÜõ;X½ný…ÃXô)òœ8Nh4Øvµ>ý°h4F0ºÊ9öƒ&Ýn—~¿ëz8Žªr„³Œ(Šèt:ŒŽŽV)L\,z3T®îçÝëJ: ‡ëøØŽƒ+-%q·Kvü0 ÇNà+IÛqè-ô8qì8ÇfO¶;œwÉ%„çl­Ö}2À–ò”îî=Ý·Ñv‡±3Wâ¬XBT$¨æ¤»mèË’Œ;‰ â‚Çøï,Y·–É­ç’§’ÖHÓ°ÙùÌ€ Îð‘ß¿™[ßù_H‡Sä1䱦ߟCÙšñaºžãŒ—\E¬¢Ë¼3ØóÜ^øüø“?üS‚–áŸþ*+מItà9ÜEß/èHÅábxü›~ùÕ É1nˆ=X* _ü —EAž GBŒNz@|h7G§ö£löØÚ+7Àèj²q>K³å „Çð™ƒÌï:ÆÞþ„,pþE[9o-κհÐçØþ)íÙK?IÙ¼íVìØIJ22?ÐC[Çg=^~Ùë™™îõ¿y2WSSSSSSóÏÿê¿1æ´Q¤¦¦¦¦¦¦æ{?WžçaŒ!ŽcʲĶíÅÆôª=]ˆjS7 m° ­²,[t…ºX–uú‰žÃO“‚$ÉP*Å’6y®Q–ÆŠ¢¨œ­®ƒR6q” EY”XH„xž¢Ñlð²‹/fùŠËªŠ£°ªŒLaN‹›eYVíè@–åÿC¹”m;x¡‹°N’S”§)a06>޲íÓÿ·Öú´H+- c Y–.Ó²ÿöù;ÏßVJ.æ½JR/ŠËÕq(òjŒ§Ê®•8®Qe®æyBž•hm¡”\Ìõ(‹Ãa‚%.»ìRÖ®ÝÂíwÜÍWîŽ~ïvÞrÓ›¸êšËév§ÑE F“ç #­±¥éžš£5Ò¤39Áìì,öª¥ÄQL\fQ‚cID©0ÒBHŸ3VžI©[üÝg¿D«ea<xˆf^ôâtÆFè?ˆ²Y’2ÚlâxQš’§Â(2‘øAƒÙ(æÐÞg9óœmtÆ[Pæ»]š##DiJ©s„¶�%J´1ˆR‚¢0-ªÜ]cCßøÍ_ã­¿ùN¾òõ¿"Í–.'É:/H’„ÐóQRâ8Šnw!]–,_ν÷ý1×üÒmlÞ¼†+_u%§f¦iwÆF9““+I¢!R)tY‚68®¤0#mÁ`0‡¥BÚ~K6ˆbM»3Á9›¶ò‘ÿ-Zƒ²-îùØosÓM¿L–Ìã:Š©St’’«¯¼’Ë/½†;ÞÿG\ò²×ññ¿ø^ýš—sêäNŒQ,_¹žáB]Bà7( CYj DX%Ž«H³–4„ Çq¯œT‚ýÈÈÈéÏ£eYP Ò<­rŠ•‹Rm°,‰çyxžGEô"¼Fá8t Xºq+­­ç3ûØ#<þì3¬gË/`ùá#ìÙ¹‹ïêoY:ΚóÎaùE/¦( ÒhŸ¿ƒö†-xì1žúÙlLÖãµ}D2@Ž/c Ï<†ã Ëœtf)-ÖlÜ@ú$–`:êA*°„äŠË¶ñï<N8@D%Hãâ:’³ÑHòXslÿ4+/ØJÐÏX&a¼Ùáï¹M«Vðöß}'ïýÝ÷qÇÞËšÉ&…s|ö$‰¥„cŽíÝÒ†$¡1”¶¥A ²Ì"´}<å ¦8¼‹…ùCœœ=HcéË·­õL5ÖÉ>ãŽM5´8þäãì}z';ü$˼ ^pÎ9,?g=òìUä'öðì·þ‰³CÍ&gŸ¿ƒöÄ8„M²™S`Ûxe­6F º½ŒÎÈn}ÛÛy÷»~ïÿ³“¸ššššššš_œ¸z?¯©©©©©ùÿò·\v§1 ¥Ä²ÀMžg§šJÙ‹¢¥¨ÆÙ¥K¢ H©°¤]T9i–“åç:€@ Èò˲ð\A¢4£ P­l\Ç#KS¤¾‡e<Ï%/JÊl'ÄuÊ"AH’˜¢ÈQ‹‚¯µ(ˆJ)O7ÀÛ¶¢?wŠ'NÐnaŒÁw]¾Bç²aƒ¢4(Çg0ì!ø—lT)+AêùÇ^D­UuZ +KCš&”¥>-L{¾‡eU±JI”£°m KV?–<ßÇs|ßžÏFHKâØ6q’2qÆ*^¼ãlöñè£S|çŸer²É™«ÖâyMfff ‚�KJiLË÷ñlU¤<øÐ÷8ï—Sä]$•Ó²¥)qìLƒGyŽOê‹\|ñe|í«ßdz&ç?½õBnxÝÕè"âÐ=4BŸ…ù9,aÅ qaI]8¶ïù £!~ ÅÌÜ ’ßu™›Ÿ§9ÒFz!®çáz6ÊU%º0iš¡5XRVÂ9ðè#2??ÃáÇؼy yQ­[ Š<£QÒBƒÑšRâhÀYgmäì-+¹ãö»Ù²y+W­¡×í/¾§>²@Œ.(Å‚2¡2rÓìŒ1d ‡� ÂÆRþñosË­ïf°P²yóZÖ­kòÂí[غål¢d4Ž@t)(QØÊæªk¯bõªqÞ{Çr`ïsœwîÙ,?s=s'¦1F",,T¥^®ë¤J¡DX`´F) ß÷²ÊîØŽƒ.5Y–#¥ÂCŠ,'”²Éó‚²0XVu¥T•û% ®çÉP»„­QÊŠáp´ÃÊuë&ÇÉçç.tY¾é,Ö/™À›eúáG8úèã¤s¤`<4Û°o,$™›¡¿ë9öí#×;h"½¢ya‡!Ãgv2}ü8+_°Üu0¶OZjší6g¬8‹5g­å¾/}•ã3û¹þÚ+ÀÒxA€´m´U`)Czj'Ót6mcÆ–oâ _¾ŸÿãwðÀ׾ί¿ùF®¹þ þèîÏñ•¯™­çÉòõK1£Ž‡NJzSGYºöL¢aŸ…AŸ2‹iú>BküÖ$e3˜ÚÅÜþŸqxÏ“ÌÏM³áœí´7œ¡Iª%vØ&°5ƒ=OÒûÉÃûöwÙõ­ï1ª\οâr¶¿öJÜmë9>3ÅôÓ?gz×r²ú¼ Ø´ý…xK—c<(ÏCº.I^`)›¢Ôä9ŒŽ­áç?}‚ï|ûAÞýž÷Õ;WMMMMMMMMMMMMMÍ/‚°zëo_|'°ëâ!–äYŽà8.ÆTãÿeQÝ 8=n/§ÇÓ4=°ž¥®ã02ÒBJ…çù àû!¶íÐë÷Yèö�x(iã¹>y–caPJ03wÏsp}[”Æ"ÍrÊ<Á² , ´®D`c Eñ¼ƒÕ:í,UÂpè𦦎066^•O•ƒ…yÊ,Ç<„rÈ@9>¾_96a!„$M30³8…k ”E5reå¢KÕBˆª°ÊCE8Ž}ú`k£)Ë !ÊEñZWb³©î_e¹JÇA‹Á`€6š4Ò|®¾êU?¶‡‡xŒï~÷§,[Öä‚ .Äu¼êÍT’‘ö¢ÔÈ4Æk59zä0žÐ¥9PJ¢)ªOÕ$Km>ó™ûÙ»wŽuk×ðÄÏÐ…»ï~–ËBwßv(²Œc‡0:6‰ë¹•(ìù¹F*Y½ÏGÚ.ÊV(Nž<Jkr)ýnŸ0aЋp\e; YS ÂxNX åJZ¸¾1à‡MÖ¯[ËK^ò"þäÿ’¿äE,]6 ¢DP] ÈÒ xž‡m+ Ðë÷ Ÿ 7Ðëõ¸ãŽ¿äª+/btl’AoX­;Ç&Íb”-pµ(êKJ¢ÅŒ²Ôc|l ¥öxûÿþ.>ðÁO0=“ó;o{5»çC\sÕ+¹ý]w±ó™gxíëÞŒ4?l’$ ¾§Èˈ™é¼ø¢óxå+·ñÅ/~ƒÏýí—˜è49oÇ¥tçæˆã¤rO ƒT‚¢LÉó”4èõúÄIL^hSEmx®‡”6Æ€’ Ûv«¼VÛA-F,h EQbLåžn¶Út•k \W!‡§=<S9Æu©J …¡?X \¶ûÌ•ݵ“¹aŸ%£m:ž‹^H˜~ö�;ü³ÏîÁcK¶š4–NÒl4…`߾߻5ßÃu[ëÓÿÙP”ŒŸu‰ÖÛC¹¥‚î Ï²Ë¸ä² ˜:´‡Ó‡Y»~5Žkƒ4h« ]ÈæO§ÑY‚j35?ÏÍo{»öícåÚ¥|øOþ”·½ý¿påu—òá~Ž…Þ..zÙùØR")jaȉ] |ÂN› <%‰ŽŸ$zî�³»ŸæàÔ³¨Q›3/ÜÎÛ/E±L [¨¹>½ï=ÈS÷}žç|¨wŠuÛ6³á%ÛY±u NràÉÌì9€’’‰õ«Y±ccgžEs|–çC©ÑEI`Û)IóÇÉò’¢Ðh“ñ÷?Gïá–Ûî¨w®šššššššššššššš_aõöw½úNÛVäyFQæØ¶Äu=ò¼Êµm‡,Ëé÷û(YeVBj•3**›ëé\V¥TUèd ÊR ¦§§ !žç‚²ÌÂ"B|/¨ž£()ò[9`@CYf¤Y„T °–RŠh°€í(„Ueš£+ÎNgÅqL’$HI%Î:>­vAÃÉcGplA8:Jžår ¾çSY–WQžG–e§ÁžP+áÊR#„…çù8Ž‹œŽк_•RU–¬XdYvZL¢xQ„ €ª0«Ê½õñÀFèÑëu‰â!—_v9kV·xø¡|õË?åÔì¶oß±è¨`A‘FXºÀ‘à·Z=t˜3W­a8ŒÉÆõì*wVºd¥ÃÃ?zŠü³LŒ/eÿ¾ýÌÌF¼üÒsxÓ¯âèѽŒvˆ‡ËÎXAxŒM,Š´X(å"•$Ë ¢aLsb’,ŠÆ1#Måò8arÉ2ú  q<)%Ú”ÄÉ�m*go4È( CGaá¸N•ak æ» ,Y²„V3àcvo¼ñF”2U”°H“„<ËR’ça#$ÍR=ŒT6W]óFf¦wñ±?½—뮽a9Sø6i6Àó=l×%±¤a(µBÊ19³óúàó‰O|ÞPó{wÝÀ‡~ÿvÚ# %5¯½î>óéÏò…¿û,—\ö ÆFG M†6ާ‰ÒSŒO4¹ñÆ7õ†üÖo}’O?Äe—]J«Õ©{ªµo; ]†ñ€ÉÉ¥4Â&¶­£. X–"M2ǥѡÈ5išá:jq½ØÒÁ¶+×yÅÄIŒ”ÕÚMÓYdQ „AØZJ) :mrÊvßz.V‹Ò’c£dB²|b’1×ÅÌÌ2¿k'Ÿ|’…»èÄ)Âo ÎXŲõëYZtwÈñ©CL<H;Ï)e¤ÕÆÝ´+ÍH’*D†2NpŒfùx›×_-W­ T6Í0Dæ EÔÃÖ%ÙüaQ2²~#ªÑ¡Ì îûâßcLÊMoy=_ùÊwY¶²Å5W\Å·¾÷}âþAnxÍxX´„…²<¢ÝûxòG0±t’°ÝäÔôIŽìÙ˾ùMò¨ÏèØ›¶Ëè¶a« 3ònÌɧv²÷{ßeÿ7 ß»‡IG±ùÜ-¬»ô¥è±ž›šbÿ±ôæè¶l;ŸÑ­ç"„E†X^‡$1Z“•šùA/)!) úý!¶ã’$e©±]Í'þòs\tÑf^õª7×;WMMMMMMMMMMMMMÍ/‚°úö[^~gQäØŽªë忸.ÇÅq<šÍ¶R4šM²¼@Ú6®ë')R),Kâz–”dy²\åâ:.–¥p}§rÈyåb~k–å(eSä%`Ñh6Ð…APÙGÃÆä ¼Èª±ØB#„C–ç(iÒ²ªÂ*ÛQ8®ƒÑ­«(€4M) MzøžK„$Y^‰žR"„æÀÞÝ,DzmJ¡À²`Û6EQexú¾‡m;‹9¾ïŸ’}?¤(J@ „Ä]=†£ ÿ´³6I,!…%Æ”8¶ƒç•K¸rÄqŒ’’$°m‹¼È(uÉŽí/áÅ/>}{ŸåþûŸâ'?þ1/}Ùt–Œ‘FŒÉ(LŽ.3ÆZ#ìÛµ—<Éi´:¤ENØnǤtÈMƒ÷ßùQŽ‹85;äıí¶Í­·]Ïú³–1ÒtX˜ïÒ% pE0À’ !$ƒÁ¥\Jmðƒ�ei^âù>Rjš¢Ðô1Î¥68®Ë0b)‹,O°¤D)‡<-Å|›…nD•PäEµ¾,ŹçncfæßøÆ7¸øâ‹Hã”Vk„0ñ\—…….R*¤²éú zƒ>R.zé¥|ÿ{?äK_|€_zÍÕtF;$I! ”4 z]¤å`´E©ÑТ5¶‘Ý;OðÎÿúûüõ§Àõï|× Ü~ÇmdÙ,yvŠ"]`b|)oxýØ»w/ô÷pÆêå¬Y» Û±ç0¦„²£±eÈ‹.|¯½áyä >ðÁâ‚Mgo"/ ò2CX0ˆz„ÍEfX¸®G–æÃa ÆZÌÖÄQŠ1‚ ðÑ‹n×¢¨ÊÕ„• — ò<Ãq†ó}#JP蔌; H!Ö -¤ÚÂ;8c“XËÎ@ž1É apÆ]ÂP0*5Í(!>x”ƒOîæäSû9ü“'‰Àv=ZKÎ`ÔÉæN1œ:ÂŒ‚±1zƒM; l/!°[4ÓŒìøQì(&›ïÑÝu�çtwï¢{p?Éô æ÷dpð�¦ÛÊ3¬Ì`')o~Ãë¸ø¢ðݾA:(yÕ+v°åœlÞ¸‚×]u)ãc´½�iˆ(%zv's§8¸/Êw˜ž›£åµ8ûE/dã+¶Ó<s-ÉÀaøóiN~ía}ëÌ=þcœÁ1t1Ïäd› —\J°z9ñ’ÝSsœ<2ÃøÄJVœµ•e›6Ó\¹œ Ê\cIYáSJ‡8Ë8yj†(N°e»L9Šëù(éei€œ¿ù›¿âûµ_á¬M—×;WMMMMMMMMMMMMMÍ/�bþØGL’ B'C¤ضM¥ØÒÅø^Èp8¤ÑhÐë-,¶Þ«Å²¥¢,QR‘$ Y–Ucô…Æw\,KP˜!4¥.PŽƒeIÒ´Àv|ò¬¬\¶]ÅØ.ʲH’Rf(¯|¤ë“¥a…DqBà §ló¼@ëÊIê{Áâm°$Iœ`«!JƒÀV ×@÷yîé'8{ó&°ðCP0å¿d¬>ÿš<Ï£,Kâ8Æ÷=Ò4[߯ ¸l[a;vÕš®5P•TyžGQ”ض¢,uåÖÔ†<O«â/«*Éʳ) ÐzÑõª|J­Q¶!/b”òqÝQ£ìÝ}’þé'¸ï‹?ä¥w¸âU—ðŸódºGÏ¡‡&]Ÿ=?†]»÷óŠk¯'õÒ“Dƒ.ˆ€'ötyëoü!Ë—L°{çI,«`ûŽe|ê3"3âaJI'\JšGŒHÛ,¢8Ãv<ŠL†!A2, ) ìtL–Ä©¦Ó§,…Dq‚ãySâz.ÒVô沊è÷{4[ÅØˆ€(Î(|¿tÞxã/sÓ[ÞÈE¾ˆîü,ëà:6E‘aÛ6BÚDIB0dfnßo33ÛcùÒuÜpýoqî¹+ùÔ§?ΰ„ÒÌø‚x˜ …‡. ?\ÊÓO㦷ü.O>}ׇß}7ßüz0EG ‚Æ–q‰cŽòåû¾Ê{îø3ÞúÖ«¸å¶ß¦ßà)óß ð‚6E©À²ÈÒ”Ï|æ^>ýéO³nýZÞúŸ~…­çn$Ëz4F<Â0¤Èª2%­5 }‚ÅÏd·»€mW Œ¶È²a•2„e°„(Œ€U9Æ¡957ÍØXSjÊ<G9YiÈ„ÀñÒ4-PBà q„€Å \«á€•`ô<BÏC÷Éþ)¼ùœdjSûæžÊF)öH‰UdØN@ßÕg¯Ç1š“?ÍØøÁš•LY-Cöí:Îhc9Q÷Ã…äÃ>²p™;1OèyH•¶mÇbŨ2£ˆ‡H§‰?º”~aa„,]¿¢Ccr’å¼;5àùôNÆ!bf×sˆ^—e¶âðO…8#nú¬¾þjT«…](ò¹„»÷Ñ=tŒÞÁ)&lÉ’1ŸÉ-ìq‰=‚™Ã (2“E4Î]Ã’3ÏÂr:»B’˜Œî°G‰!tá J í»” Š"£?èQ)£6J)Nž˜¦ÓÃ÷›ÄQAo¡ÇIJå\ÿš_¥Óiñùûž¨w®šššššššššššššš_�þOÔæ„Õñ#����IEND®B`‚�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/epicycles.txt����������������������������������������������������0000644�0001750�0001750�00000000043�14557511160�015554� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������../gnuastro-figures//epicycles.png ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/flatplane.eps����������������������������������������������������0000644�0001750�0001750�00000177241�14557511157�015537� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 0 0 236 48 %%HiResBoundingBox: 0.000000 0.000000 235.500000 48.000000 %%Creator: dvips(k) 2023.1 (TeX Live 2023) Copyright 2023 Radical Eye Software %%Title: all-figure2.dvi %%CreationDate: Sat Feb 3 19:22:19 2024 %%PageOrder: Ascend %%DocumentFonts: CMMI10 %%EndComments % EPSF created by ps2eps 1.70 %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o ./tikz/all-figure2.ps ./tikz/all-figure2.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2024.02.03:2022 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: l3backend-dvips.pro 0 0 %% %% This is file `l3backend-dvips.pro', %% generated with the docstrip utility. %% %% The original source files were: %% %% l3backend-header.dtx (with options: `header,dvips') %% %% Copyright (C) 2019-2024 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of %% this license or (at your option) any later version. The latest %% version of this license is in the file: %% %% https://www.latex-project.org/lppl.txt %% %% This file is part of the "l3backend bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% %% File: l3backend-header.dtx /color.sc { } def TeXDict begin /TeXcolorseparation { setcolor } def end true setglobal /pdf.globaldict 4 dict def false setglobal /pdf.cvs { 65534 string cvs } def /pdf.dvi.pt { 72.27 mul Resolution div } def /pdf.pt.dvi { 72.27 div Resolution mul } def /pdf.rect.ht { dup 1 get neg exch 3 get add } def /pdf.linkmargin { 1 pdf.pt.dvi } def /pdf.linkdp.pad { 0 } def /pdf.linkht.pad { 0 } def /pdf.rect { /Rect [ pdf.llx pdf.lly pdf.urx pdf.ury ] } def /pdf.save.ll { currentpoint /pdf.lly exch def /pdf.llx exch def } def /pdf.save.ur { currentpoint /pdf.ury exch def /pdf.urx exch def } def /pdf.save.linkll { currentpoint pdf.linkmargin add pdf.linkdp.pad add /pdf.lly exch def pdf.linkmargin sub /pdf.llx exch def } def /pdf.save.linkur { currentpoint pdf.linkmargin sub pdf.linkht.pad sub /pdf.ury exch def pdf.linkmargin add /pdf.urx exch def } def /pdf.dest.anchor { currentpoint exch pdf.dvi.pt 72 add /pdf.dest.x exch def pdf.dvi.pt vsize 72 sub exch sub /pdf.dest.y exch def } def /pdf.dest.point { pdf.dest.x pdf.dest.y } def /pdf.dest2device { /pdf.dest.y exch def /pdf.dest.x exch def matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix cvx exec /pdf.dev.y exch def /pdf.dev.x exch def /pdf.tmpd exch def /pdf.tmpc exch def /pdf.tmpb exch def /pdf.tmpa exch def pdf.dest.x pdf.tmpa mul pdf.dest.y pdf.tmpc mul add pdf.dev.x add pdf.dest.x pdf.tmpb mul pdf.dest.y pdf.tmpd mul add pdf.dev.y add } def /pdf.bordertracking false def /pdf.bordertracking.begin { SDict /pdf.bordertracking true put SDict /pdf.leftboundary undef SDict /pdf.rightboundary undef /a where { /a { currentpoint pop SDict /pdf.rightboundary known dup { SDict /pdf.rightboundary get 2 index lt { not } if } if { pop } { SDict exch /pdf.rightboundary exch put } ifelse moveto currentpoint pop SDict /pdf.leftboundary known dup { SDict /pdf.leftboundary get 2 index gt { not } if } if { pop } { SDict exch /pdf.leftboundary exch put } ifelse } put } if } def /pdf.bordertracking.end { /a where { /a { moveto } put } if /x where { /x { 0 exch rmoveto } put } if SDict /pdf.leftboundary known { pdf.outerbox 0 pdf.leftboundary put } if SDict /pdf.rightboundary known { pdf.outerbox 2 pdf.rightboundary put } if SDict /pdf.bordertracking false put } def /pdf.bordertracking.endpage { pdf.bordertracking { pdf.bordertracking.end true setglobal pdf.globaldict /pdf.brokenlink.rect [ pdf.outerbox aload pop ] put pdf.globaldict /pdf.brokenlink.skip pdf.baselineskip put pdf.globaldict /pdf.brokenlink.dict pdf.link.dict pdf.cvs put false setglobal mark pdf.link.dict cvx exec /Rect [ pdf.llx pdf.lly pdf.outerbox 2 get pdf.linkmargin add currentpoint exch pop pdf.outerbox pdf.rect.ht sub pdf.linkmargin sub ] /ANN pdf.pdfmark } if } def /pdf.bordertracking.continue { /pdf.link.dict pdf.globaldict /pdf.brokenlink.dict get def /pdf.outerbox pdf.globaldict /pdf.brokenlink.rect get def /pdf.baselineskip pdf.globaldict /pdf.brokenlink.skip get def pdf.globaldict dup dup /pdf.brokenlink.dict undef /pdf.brokenlink.skip undef /pdf.brokenlink.rect undef currentpoint /pdf.originy exch def /pdf.originx exch def /a where { /a { moveto SDict begin currentpoint pdf.originy ne exch pdf.originx ne or { pdf.save.linkll /pdf.lly pdf.lly pdf.outerbox 1 get sub def pdf.bordertracking.begin } if end } put } if /x where { /x { 0 exch rmoveto SDict begin currentpoint pdf.originy ne exch pdf.originx ne or { pdf.save.linkll /pdf.lly pdf.lly pdf.outerbox 1 get sub def pdf.bordertracking.begin } if end } put } if } def /pdf.breaklink { pop counttomark 2 mod 0 eq { counttomark /pdf.count exch def { pdf.count 0 eq { exit } if counttomark 2 roll 1 index /Rect eq { dup 4 array copy dup dup 1 get pdf.outerbox pdf.rect.ht pdf.linkmargin 2 mul add sub 3 exch put dup pdf.outerbox 2 get pdf.linkmargin add 2 exch put dup dup 3 get pdf.outerbox pdf.rect.ht pdf.linkmargin 2 mul add add 1 exch put /pdf.currentrect exch def pdf.breaklink.write { pdf.currentrect dup pdf.outerbox 0 get pdf.linkmargin sub 0 exch put dup pdf.outerbox 2 get pdf.linkmargin add 2 exch put dup dup 1 get pdf.baselineskip add 1 exch put dup dup 3 get pdf.baselineskip add 3 exch put /pdf.currentrect exch def pdf.breaklink.write } 1 index 3 get pdf.linkmargin 2 mul add pdf.outerbox pdf.rect.ht add 2 index 1 get sub pdf.baselineskip div round cvi 1 sub exch repeat pdf.currentrect dup pdf.outerbox 0 get pdf.linkmargin sub 0 exch put dup dup 1 get pdf.baselineskip add 1 exch put dup dup 3 get pdf.baselineskip add 3 exch put dup 2 index 2 get 2 exch put /pdf.currentrect exch def pdf.breaklink.write SDict /pdf.pdfmark.good false put exit } { pdf.count 2 sub /pdf.count exch def } ifelse } loop } if /ANN } def /pdf.breaklink.write { counttomark 1 sub index /_objdef eq { counttomark -2 roll dup wcheck { readonly counttomark 2 roll } { pop pop } ifelse } if counttomark 1 add copy pop pdf.currentrect /ANN pdfmark } def /pdf.pdfmark { SDict /pdf.pdfmark.good true put dup /ANN eq { pdf.pdfmark.store pdf.pdfmark.dict begin Subtype /Link eq currentdict /Rect known and SDict /pdf.outerbox known and SDict /pdf.baselineskip known and { Rect 3 get pdf.linkmargin 2 mul add pdf.outerbox pdf.rect.ht add Rect 1 get sub pdf.baselineskip div round cvi 0 gt { pdf.breaklink } if } if end SDict /pdf.outerbox undef SDict /pdf.baselineskip undef currentdict /pdf.pdfmark.dict undef } if pdf.pdfmark.good { pdfmark } { cleartomark } ifelse } def /pdf.pdfmark.store { /pdf.pdfmark.dict 65534 dict def counttomark 1 add copy pop { dup mark eq { pop exit } { pdf.pdfmark.dict begin def end } ifelse } loop } def %% %% %% End of file `l3backend-dvips.pro'. %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup} ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N /erasepage{}N/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{ count ocount sub{pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginProcSet: color.pro 0 0 %! TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet TeXDict begin @defspecial systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict /cleartomark get put}ifelse /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution mul} def/BPToDvips{72 div Resolution mul}def product (Ghostscript) search {pop pop pop revision 927 gt}{pop false} ifelse{/BorderArrayPatch{} def}{/BorderArrayPatch{[exch{dup dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def} ifelse /HyperBorder {1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def /pgfHrgb{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfArgb} def /pgfdir { dup 0 moveto dup 5 index lineto } bind def} bind def /pgfVrgb{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfArgb} def /pgfdir { dup 0 exch moveto dup 5 index exch lineto } bind def} bind def /pgfArgb{ /pgfdiff 8 index round cvi 8 index round cvi sub 2 mul 1 add def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div pgfheight 9 index 9 index 9 index 14 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfdir stroke 4 -1 roll 7 index add 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll .5 sub } repeat mark 15 1 roll cleartomark exch pop }bind def /pgfR1rgb{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRrgb} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2rgb{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setrgbcolor fill pop}bind def /pgfRrgb{ /pgfdiff 8 index round cvi 8 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 9 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 9 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 8 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 8 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 8 index 8 index 8 index 13 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll 4 index add 4 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 14 1 roll cleartomark exch pop }bind def /pgfHcmyk{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAcmyk} def /pgfdir { dup 0 moveto dup 6 index lineto } bind def} bind def /pgfVcmyk{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAcmyk} def /pgfdir { dup 0 exch moveto dup 6 index exch lineto } bind def} bind def /pgfAcmyk{ /pgfdiff 10 index round cvi 10 index round cvi sub 2 mul 1 add def 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div pgfheight 12 index 12 index 12 index 12 index 18 index pgfdiff { 4 index 4 index 4 index 4 index setcmykcolor pgfdir stroke 5 -1 roll 9 index add 5 -1 roll 8 index add 5 -1 roll 7 index add 5 -1 roll 6 index add 5 -1 roll .5 sub } repeat mark 19 1 roll cleartomark exch pop }bind def /pgfR1cmyk{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRcmyk} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2cmyk{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setcmykcolor fill pop}bind def /pgfRcmyk{ /pgfdiff 10 index round cvi 10 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 11 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 11 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 10 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 10 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 11 index 11 index 11 index 11 index 17 index pgfdiff { 4 index 4 index 4 index 4 index setcmykcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 5 -1 roll 8 index add 5 -1 roll 7 index add 5 -1 roll 6 index add 5 -1 roll 5 index add 5 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 18 1 roll cleartomark exch pop }bind def /pgfHgray{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAgray} def /pgfdir { dup 0 moveto dup 3 index lineto } bind def} bind def /pgfVgray{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAgray} def /pgfdir { dup 0 exch moveto dup 3 index exch lineto } bind def} bind def /pgfAgray{ /pgfdiff 4 index round cvi 4 index round cvi sub 2 mul 1 add def dup 2 index sub pgfdiff div pgfheight 3 index 6 index pgfdiff { 1 index setgray pgfdir stroke exch 3 index add exch .5 sub } repeat mark 7 1 roll cleartomark exch pop }bind def /pgfR1gray{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRgray} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2gray{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setgray fill pop}bind def /pgfRgray{ /pgfdiff 4 index round cvi 4 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 5 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 5 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 4 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 4 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def dup 2 index sub pgfdiff div 2 index 5 index pgfdiff { 1 index setgray pgfcircx pgfcircy 2 index 0 360 arc closepath stroke exch 2 index add exch .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 6 1 roll cleartomark exch pop }bind def /pgfsc{}bind def/pgffc{}bind def/pgfstr{stroke}bind def/pgffill{fill}bind def/pgfeofill{eofill}bind def/pgfe{a dup 0 rlineto exch 0 exch rlineto neg 0 rlineto closepath}bind def/pgfw{setlinewidth}bind def/pgfs{save pgfpd 72 Resolution div 72 VResolution div neg scale magscale{1 DVImag div dup scale}if pgfx neg pgfy neg translate pgffoa .setopacityalpha}bind def/pgfr{pgfsd restore}bind def userdict begin/pgfo{pgfsd /pgfx currentpoint /pgfy exch def def @beginspecial}bind def /pgfc{newpath @endspecial pgfpd}bind def /pgfsd{globaldict /pgfdelta /delta where {pop delta} {0} ifelse put}bind def/pgfpd{/delta globaldict /pgfdelta get def}bind def /.setblendmode where {pop} {/.setblendmode{pop}def} ifelse /.setfillconstantalpha where {pop /.setopacityalpha {.setfillconstantalpha} def} {/.setopacityalpha where {pop} {/.setopacityalpha {pop} def} ifelse} ifelse /.pgfsetfillopacityalpha{/pgffoa exch def /.setfillconstantalpha where {pop pgffoa .setfillconstantalpha} {/pgffill{gsave pgffoa .setopacityalpha fill 1 .setopacityalpha newpath fill grestore newpath}bind def /pgfeofill{gsave pgffoa .setopacityalpha eofill 1 .setopacityalpha newpath eofill grestore newpath}bind def} ifelse} bind def /.pgfsetstrokeopacityalpha{/pgfsoa exch def /.setstrokeconstantalpha where {pop pgfsoa .setstrokeconstantalpha} {/pgfstr{gsave pgfsoa .setopacityalpha stroke grestore newpath}bind def} ifelse}bind def /pgffoa 1 def /pgfsoa 1 def /.pushpdf14devicefilter where {pop [userdict /bop-hook known {userdict /bop-hook get aload pop} if {0 .pushpdf14devicefilter} aload pop] cvx userdict exch /bop-hook exch put [userdict /eop-hook known {userdict /eop-hook get aload pop} if {.poppdf14devicefilter} aload pop] cvx userdict exch /eop-hook exch put} if systemdict /pdfmark known not {userdict /pdfmark systemdict /cleartomark get put} if end /pgfwritesamplecmyk { 4 index 0 5 index pgfcheckcolorrange 255 mul round cvi put 4 index 1 4 index pgfcheckcolorrange 255 mul round cvi put 4 index 2 3 index pgfcheckcolorrange 255 mul round cvi put 4 index 3 2 index pgfcheckcolorrange 255 mul round cvi put pop pop pop pop } bind def /pgfwritesamplergb { 3 index 0 4 index pgfcheckcolorrange 255 mul round cvi put 3 index 1 3 index pgfcheckcolorrange 255 mul round cvi put 3 index 2 2 index pgfcheckcolorrange 255 mul round cvi put pop pop pop } bind def /pgfwritesamplegray { pgfcheckcolorrange 16777215 mul round cvi 1 index 0 2 index -16 bitshift put 1 index 1 2 index 65535 and -8 bitshift put 1 index 2 2 index 255 and put pop } bind def /pgfcheckcolorrange { dup 0.0 lt {pop 0.0} if dup 1.0 gt {pop 1.0} if } bind def /pgfchanneldepthcmyk 8 def /pgfchanneldepthrgb 8 def /pgfchanneldepthgray 24 def /pgfcolorsamplecmyk 4 string def /pgfcolorsamplergb 3 string def /pgfcolorsamplegray 3 string def /pgfrangecmyk [0 1 0 1 0 1 0 1] def /pgfrangergb [0 1 0 1 0 1] def /pgfrangegray [0 1] def /pgf1{gsave exec 1.0 pgfw 2.00002 0.0 moveto -6.00006 4.00005 lineto -3.00003 0.0 lineto -6.00006 -4.00005 lineto pgffill grestore} bind def /pgf2{gsave exec 1.0 pgfw 0.8 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -3.00003 4.00005 moveto -2.75002 2.50002 0.0 0.24998 0.75 0.0 curveto 0.0 -0.24998 -2.75002 -2.50002 -3.00003 -4.00005 curveto pgfstr grestore} bind def /pgf3{gsave exec 1.0 pgfw [ ] 0.0 setdash 0.0 -5.00005 moveto 0.0 5.00005 lineto pgfstr grestore} bind def /pgf4{gsave exec 1.0 pgfw [ ] 0.0 setdash -3.00003 -5.00005 moveto 0.0 -5.00005 lineto 0.0 5.00005 lineto -3.00003 5.00005 lineto pgfstr grestore} bind def /pgf5{gsave exec 1.0 pgfw [ ] 0.0 setdash -2.00002 -5.00005 moveto 1.0 -3.00003 1.0 3.00003 -2.00002 5.00005 curveto pgfstr grestore} bind def /pgf6{gsave exec 1.0 pgfw [ ] 0.0 setdash -4.50003 -5.00005 moveto 0.49998 0.0 lineto -4.50003 5.00005 lineto pgfstr grestore} bind def /pgf7{gsave exec 1.0 pgfw -2.50002 0.0 translate [ ] 0.0 setdash 3.00003 0.0 moveto 3.00003 1.65689 1.65689 3.00003 0.0 3.00003 curveto -1.65689 3.00003 -3.00003 1.65689 -3.00003 0.0 curveto -3.00003 -1.65689 -1.65689 -3.00003 0.0 -3.00003 curveto 1.65689 -3.00003 3.00003 -1.65689 3.00003 0.0 curveto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def /pgf8{gsave exec 1.0 pgfw [ ] 0.0 setdash 1.0 0.0 moveto -5.00005 3.00003 lineto -11.00012 0.0 lineto -5.00005 -3.00003 lineto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def @fedspecial end %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 30 /phi put dup 65 /A put dup 100 /d put dup 114 /r put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A90B8A9EE5C613CDB822F07B 115D4C174FB7945535F2F9C2875C9675143B8D98DEFD3898170FBCB19B4C29CE 1E6883E0F68B5D42751BD7AD09E3EB745F0A6338BA2148B769B5E1EB21109414 C1615EC1A1FEAD5831938F74E26E1F6BF51136E5C76F823D29D35078412923DB B3A32176ED7935058ED16528D28E50E37BBEB1D1554503645DD6809FA22A0DC3 112E7888A499450162B7373CC8855953B351E8873A4D7DCC40EEEE5A8A2D00E0 EDD8CFE7153824BF94833ABE10FA64768E457D5395519937705DAD2FFC5E71D4 521F01213B7DF82426867DE914CC9866E428F614F18078B4367187426E2260AA AD0175A79ECA5F533693C732411F26E3C4BB6EC72B16FFBD0BA30BA59F263FF9 6CD42386C234A9C45A4B00FD43A3D08956635864E8D040D8A9292428B9368284 5A1953EAD96D706002B26699A01CC575B9BEFECED97B275242FC83C18C515E2E 66E442E3B2BA22A04266DBF485B316D2E3853D0A9DF4D3C30964AABA09D5E6F7 85A9C221F860E8A7A6D07A9752C312EAFD9F8B4714F8DB62963E29043C6AF1E4 BA7DE78F32595520AB046D9B8E281569FC78C6F4D0ABBD8791CF0C51054CF345 C534F3BEEF1649DA09B5EE666A33D342B70E24E6B3A3A9D6931380807DD0B0E1 00CDB6EBE68584E732665112A462DDE9B389B54A9894857AB44188897585385A BE55FB11BFB15CFC3A6FC5CE7896CA962E0F043F13051A86E7C027B5B7DB2E96 D2D332E5179C1D425E76CFF47864584BC7D5959CF12C0ED8A482D037DFF25369 A322926FEBF25CACC6437E447259D9DEA440BEDA630F26F5DD390DF2157AE7B6 5B1B2A2E9E77F08AB430265929CF43DC43ACFB94242788D56CC959E5FF791C71 0AB58E3938730F3F7E73982A57A931E6A629F642BA838B0F74EBE1C1F2A5C41F B144CB49F1797D8D9C504FEE14DFC35EC4AA763A5A54D69FD8BA39737BD84820 0068AAC8310C17D11DEECA8176D4CF4C31056EC9740B66D0255CBB4DBFB442BA 31D5C658325AD9D8D39687C6CF6FD79A23E9920769DAA49600CC3AD5033FF0AE 2FBE473AE47612F8B3AC4C36329DAAD4153033C4287BB9BA09F1C667796D7ECE 10F4D324E962AD72B0D8403D2D17FA8E24ECD787C0824B155F68C3E2F2A8A7CE 1EA6823F854AADBF82DB395D570BD3A76CA0AB44EAA06D67FCE86A740BA2E97E 8867D17F26F42D7AC31E8B4A0127DC94B9A7E758F5BBBBC479CC1C1D694C5733 FC94285448097300C593671CC4C604DE489F780DB50519183AFE51105AFE03C7 D941513AAC552608150FA94B3112B5FE9668EF9BD45D5B03714FB546C53FE2A1 FC24AAA118D2CBB797BDB8C5182AFE1F8A0E3219467544BAC2A79055DFC68CAB A1DC90A26278D0B047E61498F2385FAA72FF59BD5A31C70CABA62A60B4FD4564 5257B2CE76A648DDCD3624A801D435144DAFAEFAA97C45C73698727521A5186F 5C0453933F95526E95300F8A1015F54CEFA9F0E4B2D010EA9706E14087A20214 071F1AA5360EA8EAD2908CBA3FD3A288436F0FD3306BEE502EF2972719A4588B C42564F283B52B2989223812A6D661AE2F8D7914991CBEBD08AF92EA3A9C6471 00FB4A9FF636E88CF1CA05FA4382C963B69A3F1BBAE80F9336006868C8C8A841 C78F664D47DB155620954164BA2630EC80B4C49945AEA0936AEA9547C6676382 E5017C64E743F193C08D4BFE6CA13954DA42E42034E0E4DE12E984F346BCF804 1FCEE1AF2D0AE264DF949ABD543CB61114D2EBD7BF992C75FABA33FABAE07FAE BF94997747C24D709CC1E62C2447FA9C7074C938DB7FE88DAB0310DCB5C7DC5A 80AB7B9C9BDD090AFC0DC7B8213D06DF771F8A11C2F1226220A50E0F15D617AF 5BD298ECE88A6A631FF8DD658AC72E48883CE3697C8900EC89CA9BCBF3D2467E CA5916AC42EB7517B5F7562BB592D7A8437A4FB6B52578F546FF828D5F8EADA6 75C01574F3B4046C0CB512622CADB66144D90E091FAFB4E48B22FE16C7DB8CD6 32AA344352019ABA02989CF7AFD8E1001D8DCC44A38187328E558F1F171BD1D9 DCD0CECF35A08311B8463A9A749F6C3F761A74BA80A96EE08E1055A65EAB3656 17DEEAC1CA356DEE81FE0F8CF82FB2BDC98D6D17FD6ABA4DACCECADC939D7EE0 874B808DDF116DB4952226EEDB79EFB4A8844BEB29772DC66A799FD566DA587C 5F96702CF7C9334D3DC4F5C97C311C4D26761BC7E3D23D2151047AF82C14DDF6 8EADA13CCF22AC304D10507DCEABC6EB60C8D3D75719F78101460BE0EF313A2B 9CD1988106 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if TeXDict begin 15725327 3355777 1000 600 600 (./tikz/all-figure2.dvi) @start /Fa 134[41 47 5[37 13[43 34[62 34[49 30[{}6 83.022 /CMMI10 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin % dvips-unknown statusdict /setpageparams known { hsize vsize 0 1 statusdict begin { setpageparams } stopped end } { true } ifelse { statusdict /setpage known { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 0 0 a SDict begin [/Producer (dvips + Distiller)/Title (\376\377\000P\000l\000o\000t\000s\000\040\000f\000o\000r\000\040\000G\000N\000U\000\040\000A\000s\000t\000r\000o\000n\000o\000m\000y\000\040\000U\000t\000i\000l\000i\000t\000i\000e\000s\000\040\000m\000a\000n\000u\000a\000l\000.)/Subject (\376\377\000U\000s\000e\000d\000\040\000t\000o\000\040\000m\000a\000k\000e\000\040\000t\000h\000e\000\040\000p\000l\000o\000t\000s\000\040\000f\000o\000r\000\040\000t\000h\000e\000\040\000m\000a\000n\000u\000a\000l)/Creator (LaTeX with hyperref)/Author (\376\377\000M\000o\000h\000a\000m\000m\000a\000d\000\040\000A\000k\000h\000l\000a\000g\000h\000i)/Keywords (\376\377\000G\000N\000U\000\040\000A\000s\000t\000r\000o\000n\000o\000m\000y\000\040\000U\000t\000i\000l\000i\000t\000i\000e\000s\000,\000\040\000G\000n\000u\000a\000s\000t\000r\000o\000,\000\040\000m\000a\000n\000u\000a\000l\000,\000\040\000p\000l\000o\000t\000s) /DOCINFO pdfmark end 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@9} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0.0 0 100.00128 0] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@10} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0.0 0 100.00128 0] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@11} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0 0.0 0 100.00128] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@12} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0 0.0 0 100.00128] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@13} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 22.50027 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@14} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 21.25026 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@15} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 20.00024 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@16} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 21.25026 23.12529 25.00032] /Encode [0 1 0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 0 TeXcolorgray -183 -377 a SDict begin H.S end -183 -377 a -183 -377 a SDict begin H.R end -183 -377 a -183 -377 a SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end -183 -377 a Black 0 TeXcolorgray -600 -175 a SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark end -600 -175 a -600 -175 a SDict begin [ {Catalog}<<>> /PUT pdfmark end -600 -175 a -600 -175 a SDict begin H.S end -600 -175 a -600 -175 a SDict begin 12 H.A end -600 -175 a -600 -175 a SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end -600 -175 a 228 -342 a 228 -342 a 228 -342 a pgfo save 0 setgray 0.3985 pgfw save restore save save /pgffc{0.9 setgray}def -70.867 14.17339 moveto 127.56064 14.17339 lineto 99.21384 -14.1734 lineto -99.21382 -14.1734 lineto closepath gsave pgffc pgffill grestore newpath restore 14.17339 0.0 moveto 15.02376 0.0 moveto 15.02376 0.46964 14.64304 0.85036 14.17339 0.85036 curveto 13.70374 0.85036 13.32303 0.46964 13.32303 0.0 curveto 13.32303 -0.46964 13.70374 -0.85036 14.17339 -0.85036 curveto 14.64304 -0.85036 15.02376 -0.46964 15.02376 0.0 curveto closepath 14.17339 0.0 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath 14.17339 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 3.18149 3.5198 ] concat pgfs 228 -342 a 0 setgray 228 -342 a Fa(A)228 -342 y pgfr restore restore save [ 2.98883 2.98883 ] 0.0 setdash 14.17339 0.0 moveto 70.867 0.0 moveto 70.867 6.26218 45.48482 11.33855 14.17339 11.33855 curveto -17.13802 11.33855 -42.52022 6.26218 -42.52022 0.0 curveto -42.52022 -6.26218 -17.13802 -11.33855 14.17339 -11.33855 curveto 45.48482 -11.33855 70.867 -6.26218 70.867 0.0 curveto closepath 14.17339 0.0 moveto pgfstr restore 14.17339 0.0 moveto 65.19774 5.1022 lineto pgfstr save save [1.0 0.0 0.0 1.0 37.29979 -5.25822 ] concat pgfs 228 -342 a 0 setgray 228 -342 a Fa(r)228 -342 y pgfr restore restore 65.19774 5.1022 moveto 66.61516 5.1022 moveto 66.61516 5.88503 65.98056 6.51962 65.19774 6.51962 curveto 64.41492 6.51962 63.78032 5.88503 63.78032 5.1022 curveto 63.78032 4.31938 64.41492 3.68478 65.19774 3.68478 curveto 65.98056 3.68478 66.61516 4.31938 66.61516 5.1022 curveto closepath 65.19774 5.1022 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath save 0.79701 pgfw 65.19774 5.1022 moveto 73.00417 6.40337 lineto pgfstr save [0.98634 0.16438 -0.16438 0.98634 73.00417 6.40335 ] concat save 0.6376 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.55415 2.0722 moveto -1.42464 1.29512 0.0 0.1295 0.38852 0.0 curveto 0.0 -0.1295 -1.42464 -1.29512 -1.55415 -2.0722 curveto pgfstr restore restore save save [0.98482 0.17365 -0.17365 0.98482 73.71306 3.04996 ] concat pgfs 228 -342 a 0 setgray 228 -342 a Fa(dr)228 -342 y pgfr restore restore restore save 0.79701 pgfw 65.19774 5.1022 moveto 62.65556 10.69463 lineto pgfstr save [-0.41379 0.91031 -0.91031 -0.41379 62.65558 10.69461 ] concat save 0.6376 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.55415 2.0722 moveto -1.42464 1.29512 0.0 0.1295 0.38852 0.0 curveto 0.0 -0.1295 -1.42464 -1.29512 -1.55415 -2.0722 curveto pgfstr restore restore save save [1.0 0.0 0.0 1.0 48.9396 13.87665 ] concat pgfs 228 -342 a 0 setgray 228 -342 a Fa(d\036)228 -342 y pgfr restore restore restore save 0.3985 pgfw 33.69203 19.51862 moveto -5.66927 -19.84267 lineto pgfstr save [0.7071 0.7071 -0.7071 0.7071 33.69203 19.51862 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore restore save 0.3985 pgfw -99.21382 0.0 moveto 127.10236 0.0 lineto pgfstr save [1.0 0.0 0.0 1.0 127.10236 0.0 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore restore 34.01608 19.84267 moveto pgfstr save save [1.0 0.0 0.0 1.0 31.16908 23.36249 ] concat pgfs 228 -342 a 0 setgray 228 -342 a Fa(x)228 -342 y pgfr restore restore 127.56062 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 131.08044 -1.17615 ] concat pgfs 228 -342 a 0 setgray 228 -342 a Fa(y)228 -342 y pgfr restore restore restore newpath restore pgfc eop end %%Trailer userdict /end-hook known{end-hook}if %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%EOF ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/flatplane.pdf����������������������������������������������������0000644�0001750�0001750�00000032537�14557511160�015511� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.7 %Çì¢ %%Invocation: gs -q -dNOPAUSE -dBATCH -P- -dSAFER -sDEVICE#pdfwrite -dEPSCrop -sOutputFile#00.pdf ? ? -f ? 5 0 obj <</Length 6 0 R/Filter /FlateDecode>> stream xœåV=o9 íõ#•ÙÂ<‘”(©¼�A€t¹lg¤Zà ·EîŠ$ÿ>šÍØ‹�¾:0Œ1)‘z|üòטˆcòŸõ{¹†D=%í?i™ºFÍB¬¯AÄ: OÍ?{+Ts,Ì2»†²¥~Ô| !ÁsVj9JJ¤½Áß®)” œ()äY é._`¡‰,nˆQÓƒ‡M^Þp‹EÃ@á{óÀ©õ2ߨd·XPì7”»‡§q\áŽt‹í1üñWîñóA $ÅoààÝoÆÁÇð5𨯸~.×øæ fJŠº @œÃR|ŒKB5#J¥ÀÃùî_ÿyRÔ\’üéü>¼=‡á>J§Ö<Äõû æ+ì¥ÉÝ4¦”°sn”KTVªm|“/¡ ¸OM±6|m¦<ß4¬•j­qóÐ*%.6ߨd»¢˜7V”›‡çqüŠÜû-î›3¶\¨�eA;Š  ÿw*Ôп ,°-™ø÷äÏäVg&ØJ§Zæ;׃“[QòŒð8I°UæQ—à …¯Ý~•ÿãúP ü ¦Ì´ÆG²íþWÙ VóÆ pzx û}ÞÍ¿M¨C¥^cbÝrEoúì±LYó(,#­:Üïñû··6€4!EõŒF¬X Qj¦f^âð“uPQ™]Æyrª‹_h6únéfª‚Xúp¹Ë€†˜//¨ðj^áXp-·Ô|éUµÜâÝükžAõI”Ú6‰NB ¯ µÏF˜”%Pœ‚[êLðŽEh¢_Qg8ö¸°{ UávhB­“O{cŒý7é©/rñ‘–ÈG¡—0^¹fŽÏêŽìëZ˜>¬ú"êž Ì/ M,6¶'Üd{ýê„‘Ñs‘É;ÿVjÛ§HÔî yut ›žT°(˜:N ÒÞj«GjFˆ0ÃðLƒQeT€ô¼ª¾ܱØ‚¬Bæç•¬w§FÑR"·-´ËÊ©«Å·PsýgŸ¶âÝ`ûüðû½HT8›¿àVèV‹ÝFêÖÓ ²‡• °ù°¶ŒD:›î ½Ôâö£v²½¬'žO}ÏLÙ·ÝHí÷““UxT;žîÌ5ÞI¦¢ÈÏùW~œîüßÜufýCø Šhfendstream endobj 6 0 obj 871 endobj 4 0 obj <</Type/Page/MediaBox [0 0 235.5 48] /Rotate 0/Parent 3 0 R /Resources<</ProcSet[/PDF /Text] /ColorSpace 52 0 R /ExtGState 53 0 R /Pattern 54 0 R /Shading 55 0 R /XObject 56 0 R /Font 57 0 R >> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <</Type /Catalog /Pages 3 0 R /Names << /Dests <</Kids [46 0 R]>> >> /OpenAction [4 0 R /Fit] /PageMode/UseOutlines /Metadata 60 0 R >> endobj 7 0 obj [/Pattern] endobj 47 0 obj <</D [4 0 R /XYZ 49.957653 24.4234428 null]>>endobj 48 0 obj <</D [4 0 R /XYZ -0.269996643 10.0925426 null]>>endobj 49 0 obj <</Type/ExtGState /SA false>>endobj 52 0 obj <</R7 7 0 R>> endobj 53 0 obj <</R49 49 0 R>> endobj 54 0 obj <</R44 44 0 R/R39 39 0 R/R35 35 0 R/R31 31 0 R/R24 24 0 R/R21 21 0 R/R18 18 0 R/R13 13 0 R>> endobj 44 0 obj <</PatternType 2 /Shading 43 0 R /Matrix[10 0 0 10 0 -519.6]>>endobj 39 0 obj <</PatternType 2 /Shading 38 0 R /Matrix[10 0 0 10 0 -519.6]>>endobj 35 0 obj <</PatternType 2 /Shading 34 0 R /Matrix[10 0 0 10 0 -519.6]>>endobj 31 0 obj <</PatternType 2 /Shading 30 0 R /Matrix[10 0 0 10 0 -519.6]>>endobj 24 0 obj <</PatternType 2 /Shading 23 0 R /Matrix[10 0 0 10 0 -519.6]>>endobj 21 0 obj <</PatternType 2 /Shading 20 0 R /Matrix[10 0 0 10 0 -519.6]>>endobj 18 0 obj <</PatternType 2 /Shading 17 0 R /Matrix[10 0 0 10 0 -519.6]>>endobj 13 0 obj <</PatternType 2 /Shading 12 0 R /Matrix[10 0 0 10 0 -519.6]>>endobj 55 0 obj <</R43 43 0 R/R38 38 0 R/R34 34 0 R/R30 30 0 R/R23 23 0 R/R20 20 0 R/R17 17 0 R/R12 12 0 R>> endobj 43 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 42 0 R /Extend [true false]>>endobj 38 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 37 0 R /Extend [true false]>>endobj 34 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 33 0 R /Extend [true false]>>endobj 30 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 29 0 R /Extend [true false]>>endobj 23 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 0 100.001] /Domain[0 100.001] /Function 16 0 R>>endobj 20 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 0 100.001] /Domain[0 100.001] /Function 11 0 R>>endobj 17 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 100.001 0] /Domain[0 100.001] /Function 16 0 R>>endobj 12 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 100.001 0] /Domain[0 100.001] /Function 11 0 R>>endobj 56 0 obj <</R45 45 0 R/R40 40 0 R/R36 36 0 R/R32 32 0 R/R25 25 0 R/R22 22 0 R/R19 19 0 R/R14 14 0 R>> endobj 57 0 obj <</R50 50 0 R>> endobj 41 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[0 0 0] /C1[1 1 1] /N 1>>endobj 42 0 obj <</Functions[28 0 R 41 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[21.2503 23.1253 25.0003] /Encode[0 1 0 1 0 1 0 1]>>endobj 37 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[20.0002 25.0003] /Encode[0 1 0 1 0 1]>>endobj 33 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[21.2503 25.0003] /Encode[0 1 0 1 0 1]>>endobj 28 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[0 0 0] /C1[0 0 0] /N 1>>endobj 27 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[1 1 1] /C1[0 0 0] /N 1>>endobj 26 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[1 1 1] /C1[1 1 1] /N 1>>endobj 29 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[22.5003 25.0003] /Encode[0 1 0 1 0 1]>>endobj 15 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[0 0 0] /C1[1 1 1] /N 1>>endobj 16 0 obj <</Functions[10 0 R 15 0 R 8 0 R] /FunctionType 3 /Domain[0 100.001] /Bounds[25.0003 75.001] /Encode[0 1 0 1 0 1]>>endobj 10 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[0 0 0] /C1[0 0 0] /N 1>>endobj 9 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[1 1 1] /C1[0 0 0] /N 1>>endobj 8 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[1 1 1] /C1[1 1 1] /N 1>>endobj 11 0 obj <</Functions[8 0 R 9 0 R 10 0 R] /FunctionType 3 /Domain[0 100.001] /Bounds[25.0003 75.001] /Encode[0 1 0 1 0 1]>>endobj 50 0 obj <</BaseFont/KVGPRI+CMMI10/FontDescriptor 51 0 R/Type/Font /FirstChar 30/LastChar 121/Widths[ 595 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 750 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 520 0 0 0 0 0 0 0 0 0 0 0 0 0 451 0 0 0 0 0 571 490] /Encoding 59 0 R/Subtype/Type1>> endobj 59 0 obj <</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[ 30/phi]>> endobj 51 0 obj <</Type/FontDescriptor/FontName/KVGPRI+CMMI10/FontBBox[0 -205 721 716]/Flags 4 /Ascent 716 /CapHeight 716 /Descent -205 /ItalicAngle 0 /StemV 108 /MissingWidth 500 /CharSet(/A/d/phi/r/x/y)/FontFile3 58 0 R>> endobj 58 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 1208>>stream xœ%’{LSwÇïµ W×0]ÖE&»½›ÑɆïÃf¶8Â|n"DÄJ/¶Bi)ú¤¥¥ÛžÞ>(-­Ky´Jå1QÑ9²Ä|L·à’™-‹É¦[öÇ“åwÉõý뜓œ“ïçûÍÁ±¼eŽãåUU•Û¶.µøµ8_¼ŒG‚l‘^<•bˆó.çͽ´«ý:ª[…åḺÝá.Wk ZåCml(¡¶••í*¥¶oÝZFíQÑZeƒ¬…ª’1 Z%crC3uTÝ ¤µq·‚a4mÙ¢Óé6ËTm›ÕÚ3Ÿ””R:%£ ŽÐm´¶ƒ–SŸ«[ê€LES¯ð6¿*åj•¦¡µT•ZNk[4 %†aË÷hõ9‰aïaG±¬«À½XAΖ‡ áâ¿-‹ˆ>ý̳…‹vCuc|EG{Q¤aŸ¼³žµzí�zÂt…É4Œù3p &Ø,ׅ̊bp>j÷9¤ ׆è EÃñÇèÍ5(°œëˆ Å`#TÕ¬®Óº®>àÈ+pÍ%·xŸyyßɨ ,UÐs•XÌ÷$!`„"¸N!è_TJP z’žäòÕ]ƒèî³X Gÿü%z:'aÍN\„!n?×7Nö\`—æCé@,óÍp*ÜsaôŒÂ9«T®ö6h%LQ}:šœhºx|}­ZOv_?“=u —Û ¥å °„-\ÄçK…ÈÄ£äÍI ñnºƒí²TK ù»R±gH¶„raý° B [’ÐèÐÂ<a-j—N m/¥RÙéïÅ•‡Ç+©}øU¤ˆuG‰vI#ìçz9éøGÆ8?a?ÜlÜ×(PRS•BVN` #6L B†H·‡Í*mkSݬnæáä|ÈOö5NÊï�ñü6’ŒDìÀÚ=n‡Gz–ÚÛÖ„Ü”O…RÑ™°E¥®>½šâ7åÂþÞñF~µ$zˆÎ^³Íä4ÛI«»Ùmp´:4NÍIaß·ùTE%Ç»f¦n$î?•ö_ D!I\ošª)mÖÛ_ÅÄõÉôßÓs hÒÚZziû†#p‚Ø~_5wy<‘É–jkmñV%ÝRpÒo¼Ü1ˆ÷Ez#¹7"Æ4sÖT[3Óxïùó?Q~†,ä]K̨ñ*>ýHÄÇ?•ø b1—Ú=F²Ûët…°ö¹›œÃF²ºƒ‚Í0Õ’> E a•ð¾°aÓ­Ê_’³Gw¤aÙÄÙ›0CCýÙÄdì.pÄRd6¯»“%û ‡N¡aG“Ã\O !ý".qÀc6ÖyÚ¤¢¦óÖåÙ,z}è†tlîúÔ4âeN§Çéuåâ]dƒè³$¿e™“ø·xòˆ¯\Ü.Îáƒ^«ÍËÝäaÁ$ìpåÈŠ@(.‚ÒùݨÐÑÝìhên¶ž°ÑK×ã 9ŸßOr\hØÿ•¬A;ƒh=Z èmøõØ‚ ÂÚ’ƒþò øøwD¡’1úÖc÷í:ØÂÊÂ:á+QØžâË£ÑR¥– ²hÁØÊŸ^#WæíJŠWŒ„Äb ûO™M» endstream endobj 46 0 obj << /Limits [ (Doc-Start) (page.1) ] /Names [ (Doc-Start) 48 0 R (page.1) 47 0 R] >> endobj 60 0 obj <</Type/Metadata /Subtype/XML/Length 1531>>stream <?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <?adobe-xap-filters esc="CRLF"?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/'><pdf:Producer>GPL Ghostscript 10.02.1</pdf:Producer> <pdf:Keywords>GNU Astronomy Utilities, Gnuastro, manual, plots</pdf:Keywords> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-02-03T20:22:24+01:00</xmp:ModifyDate> <xmp:CreateDate>2024-02-03T20:22:24+01:00</xmp:CreateDate> <xmp:CreatorTool>LaTeX with hyperref</xmp:CreatorTool></rdf:Description> <rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:1bf0cf39-fae6-11f9-0000-d1933324f3bf'/> <rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Plots for GNU Astronomy Utilities manual.</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li>Mohammad Akhlaghi</rdf:li></rdf:Seq></dc:creator><dc:description><rdf:Alt><rdf:li xml:lang='x-default'>Used to make the plots for the manual</rdf:li></rdf:Alt></dc:description></rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?> endstream endobj 14 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 2355 480] /Matrix [0.833333 0 0 -0.833333 0 -433] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R13 13 0 R >> /ProcSet [/PDF]>>/Length 50>>stream xœÓ2WH.æÒ24V(NÎã2PÐ55´Ô330R0400Ð30„ÒF E©\i\�v @ endstream endobj 19 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 2355 480] /Matrix [0.833333 0 0 -0.833333 0 -433] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R18 18 0 R >> /ProcSet [/PDF]>>/Length 50>>stream xœÓ2WH.æÒ2´P(NÎã2PÐ55´Ô330R0400Ð30„ÒF E©\i\�4 E endstream endobj 22 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 2355 480] /Matrix [0.833333 0 0 -0.833333 0 -433] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R21 21 0 R >> /ProcSet [/PDF]>>/Length 50>>stream xœÓ2WH.æÒ22T(NÎã2PÐ55´Ô330R0400Ð30„ÒF E©\i\�Q ? endstream endobj 25 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 2355 480] /Matrix [0.833333 0 0 -0.833333 0 -433] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R24 24 0 R >> /ProcSet [/PDF]>>/Length 50>>stream xœÓ2WH.æÒ22Q(NÎã2PÐ55´Ô330R0400Ð30„ÒF E©\i\�à B endstream endobj 32 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 2355 480] /Matrix [0.833333 0 0 -0.833333 0 -433] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R31 31 0 R >> /ProcSet [/PDF]>>/Length 42>>stream xœÓ2WH.æÒ26T(NÎã2P0P0265U0±0P(JåJã�Šš¨ endstream endobj 36 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 2355 480] /Matrix [0.833333 0 0 -0.833333 0 -433] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R35 35 0 R >> /ProcSet [/PDF]>>/Length 42>>stream xœÓ2WH.æÒ26U(NÎã2P0P0265U0±0P(JåJã�Šú¬ endstream endobj 40 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 2355 480] /Matrix [0.833333 0 0 -0.833333 0 -433] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R39 39 0 R >> /ProcSet [/PDF]>>/Length 42>>stream xœÓ2WH.æÒ2¶T(NÎã2P0P0265U0±0P(JåJã�‹Z° endstream endobj 45 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 2355 480] /Matrix [0.833333 0 0 -0.833333 0 -433] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R44 44 0 R >> /ProcSet [/PDF]>>/Length 42>>stream xœÓ2WH.æÒ21Q(NÎã2P0P0265U0±0P(JåJã�Šû¬ endstream endobj 2 0 obj <</Producer(GPL Ghostscript 10.02.1) /CreationDate(D:20240203202224+01'00') /ModDate(D:20240203202224+01'00') /Creator(LaTeX with hyperref) /Title(\376\377\000P\000l\000o\000t\000s\000 \000f\000o\000r\000 \000G\000N\000U\000 \000A\000s\000t\000r\000o\000n\000o\000m\000y\000 \000U\000t\000i\000l\000i\000t\000i\000e\000s\000 \000m\000a\000n\000u\000a\000l\000.) /Subject(\376\377\000U\000s\000e\000d\000 \000t\000o\000 \000m\000a\000k\000e\000 \000t\000h\000e\000 \000p\000l\000o\000t\000s\000 \000f\000o\000r\000 \000t\000h\000e\000 \000m\000a\000n\000u\000a\000l) /Author(\376\377\000M\000o\000h\000a\000m\000m\000a\000d\000 \000A\000k\000h\000l\000a\000g\000h\000i) /Keywords(\376\377\000G\000N\000U\000 \000A\000s\000t\000r\000o\000n\000o\000m\000y\000 \000U\000t\000i\000l\000i\000t\000i\000e\000s\000,\000 \000G\000n\000u\000a\000s\000t\000r\000o\000,\000 \000m\000a\000n\000u\000a\000l\000,\000 \000p\000l\000o\000t\000s)>>endobj xref 0 61 0000000000 65535 f 0000001369 00000 n 0000011344 00000 n 0000001310 00000 n 0000001082 00000 n 0000000122 00000 n 0000001063 00000 n 0000001520 00000 n 0000005125 00000 n 0000005045 00000 n 0000004964 00000 n 0000005205 00000 n 0000003621 00000 n 0000002433 00000 n 0000008984 00000 n 0000004752 00000 n 0000004833 00000 n 0000003506 00000 n 0000002355 00000 n 0000009283 00000 n 0000003391 00000 n 0000002277 00000 n 0000009582 00000 n 0000003276 00000 n 0000002199 00000 n 0000009881 00000 n 0000004538 00000 n 0000004457 00000 n 0000004376 00000 n 0000004619 00000 n 0000003112 00000 n 0000002121 00000 n 0000010180 00000 n 0000004243 00000 n 0000002948 00000 n 0000002043 00000 n 0000010471 00000 n 0000004110 00000 n 0000002784 00000 n 0000001965 00000 n 0000010762 00000 n 0000003877 00000 n 0000003958 00000 n 0000002620 00000 n 0000001887 00000 n 0000011053 00000 n 0000007276 00000 n 0000001546 00000 n 0000001607 00000 n 0000001671 00000 n 0000005335 00000 n 0000005759 00000 n 0000001716 00000 n 0000001746 00000 n 0000001778 00000 n 0000002511 00000 n 0000003736 00000 n 0000003845 00000 n 0000005983 00000 n 0000005674 00000 n 0000007376 00000 n trailer << /Size 61 /Root 1 0 R /Info 2 0 R /ID [<8E394F3BEA9305B5AE7FA477198C0C53><8E394F3BEA9305B5AE7FA477198C0C53>] >> startxref 12289 %%EOF �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/flatplane.png����������������������������������������������������0000644�0001750�0001750�00000005334�14557511160�015517� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ë���d���‘¼è*��� cHRM��z&��€„��ú���€è��u0��ê`��:˜��pœºQ<���ÞPLTEÿÿÿ���������������������������������������������������åæååæåBBB www,,,PPP666¶¶¶åæå���åæå‰Š‰·¸·===¨©¨z{z™™™LML\\\Ö×ÖÆÇÆkkkeee...%%%OPO111CDC@@@///\]\nnn €€999ddd{|{rsržŸž!!!787###ÿÿÿ“úA���tRNS�"3ˆD»Ufwîݪ̎èz™3DŽæiò§‚Í›PfÒOJW���bKGD�ˆH��� pHYs���–���–�qFþð���tIMEèO"ÿi��BIDATxÚí‹z›6€±ml'ÛÜt[×­!qUÒ-»´»oÍÞÿ‰& ‚q 2Öÿ}M€ æçèè‚ÃÐ<aÂþM§CŸ…F>3s¾˜--ÓúD4²™¬ c¹¶Œõfè3ÑÈÆd…· Ì÷dè3ÑȆ+¾Z }šs±Ö¹úR˜Á\WÄ/ùÔX±tmX:_ LcÁªàÓÕÐg¢‘Íd³4g‹ÕÒÔEøø™²Bܘ͆> F£Ñh4M;¦óy^‡Ó­qõ˜¶67!ïLÕ½ªê1[_/6Ðpç)ïLMÑ®Udú |ÚpW+¿)t7›’XðYÓ!Ím¾ãrÞð-š ,ãºÉŽ,±oJîéVw©ªWm¬ë+hó…µZeéÚ2­­u¥#[1„jcV¥Ö†ír%ÒõôÚâézºÑ}èJ‘ª®g²æû¥éúšäKæÙ¼úì5-hªÚØ®ùW‘®Mþ¼©x¡RSˆÆª à1<é:nè•¢¹ê™è/³`jL þ&Þºž®›¾[38ÍUg½½æyz³ÊÒõ¨ÃúÙ͘xÏ›ïü9Û÷‹/_ܼ¸¹ùêå ÿïë—ß ý xÖ«êWö˜@€Zìí`âzöø{ï(hóîsðJ«®¢jÛIhÛ‘“~ãÑhèóŒV]I[Õ‡xÎÐçÿ­º’nªm:ôù?F«®¤£êÎõÅ©vˆG)M%:XµÓ|CD¯;ª¶‹Ù:¾<³j&,½ÀLé�ˆø† ½™R*H ñ:Ý ±]nÒã`äN†Â›+jãSíô’úL.à´<¥áá~Q]»/Ày9@³»ƒBŒYü·?¯·ìtv…å[Q˾0#S-¢w—…l;>ß^•«Ù]ãf®#ïî“›¨œ¾…ï�·|3¡Ðä(êÈ£>޳ …Hã¤HàøÅmR- Y©q–§æxßC`Wß²]«­:K²,¶¼æŠs| Ç"¿} œ²ůLêaœDpì7Rœ½8á³4@YÕ‹åà.‡ ¬Ð<RÙ:©±¸Ù«ÇÛVx,°‹Ô̹k‡’z±k÷޲ªYL”tªÔ²ŠÙ1×]ÛÕ öÝ¢J—eø’ƒœBaÛ!  ôïZ=ÕŽë÷5@Cæ£òšvUm‹Çñãb8¨¿;I’¥zVÍßñdnóúo™©¦šâ$ñûJ .¯œU5œzP] ÚçpÉÁ&/vÓ±Öh‡ +i":6âKQMµMÝë,<oVºîWµMü„5óS‡;øá®ð1È?ÁÏÈŽùïÔt$õ:ªêõ~L×ç#•»žUs"ìÄ‹[Þ¿ó {A+âA@ð,.î<"Áµ*ªCw~ïm0àݤܵÕûc¿ãrßÿšYN0} ¿±ê9ß&,“þÙª¨¦°C:¥Z6=fœ”l“¨Ú!·�¹e—÷ªxàóÞv¾•¹F\«¢ÚîÖ®ª<jVÿÆ%¶ÕbTÍO;o¢ßý‘ß¿1o„ ×sMûï<SFµ¢8{áI™Ñ›ê¢aÌjiÏ®ÿÌ넎HÒ”Ÿ ÄA¶œú ËQAµËþ‹p;~pŠ™†G—¶«êrÃþ‚÷ÿóoþÃPÔE"ÖÊF ú°AÕ¡ŸHè&¬çDÕµ† DeƒE2šÕõªÛ,å"Gµ›àAõ[>ÜÂpꜨS=Ûš[.|Ód†¸ÕAÒƒº Tw5\ø˜¾äÏSÕ¦±äS‡WëÁTÛ¡ü;¾Œcªû3\ø˜±ÜËUf‚Ï—|.’a\5˜1¬^ ü%ªe.@@æÃ†åª'ë}yÍ’õš¯Û³®_¼gDªÃ»÷¹jɆ мTU€Ì#\„Ï,­]õaDªí»÷�ÿËðžPÊ – :WoûÈ6¯Òõ4cdÙ ³Iº–Õx€šÙ=»oÚ¾)Ê¿|t«ãúÊä«1®†RmcÙM‘§ ¸ÿp×öChç ×=ÿÙÖsLõA¾žm–ÖUMº–™«£³·®Oë-£6Žò¡²9¦ºXçÌ'5­k¹Õ279o)~šjBì8è4ç6ŒåÜÔÇ»PŠA,ªfs8Õ¶í'Òª§%œØÎêäÊKäÿ-†;`Ë|o‡TÍ"ûŒ®OÙBСü‘6ºÓfdË´æÛA£ú¼tÄ :ô„D²FwÚ bNæGG=´ê:ugKzÎIñêR‚@zQÞEuÇt-UUÛNÄrWêô 9)]G§LÜnвª9È—0µiônµ¿ C„Á—W(­Ú–:–-ó9ðŠ_»Ë)ÕU?Ðëüž”³«®›‹ß‘±¨æÏ|&~¯Aq>ÕŽëwš(ތѨæŠ{¬—ŸKuqÞžLF¥zO×Yöœ³E59OàHUÛ®¿À\ÉUÍWÒÀÝøhÉXU / rRŒKŽj¼ó%=Û_Á¨Uç ã-»'d¨&åA&«\ˆjãå+‹ROµ òU;e÷YŒ}:ÐúѤ:'$.‹­]Zxº.!åÅhwÕÙ¦ø#§=Ï«lÏ%ª>„b¾BEtbEÙ,ÁŸ :äK0dóT<ˆég?úCr´ê_76]»€©¾Ý¯1LÒ5†Åëƒõ†Ó…ˆÓ øZ³Ù¢ÓŽœÉÿ§£UW‚àµX)%5Æ]ûÙM­#ž¯-í‘3LèŒV]ÉùûÀå¢UW¢UkÕŠ¢UW¢UkÕŠÒ«êqýQÌVSúý£˜£¢Å_ºÕ¨V}1hÕƒV}1hÕƒV}1hÕƒV}1hÕƒV}1L´êfüÌ>gpËh›���%tEXtdate:create�2024-02-03T19:22:24+00:00ý(æý���%tEXtdate:modify�2024-02-03T19:22:24+00:00Œu^A���(tEXtdate:timestamp�2024-02-03T19:22:24+00:00Û`ž��� tEXtps:HiResBoundingBox�235.5x48+0+0æ8Ñ×���tEXtps:Level�PS-Adobe-2.0 EPSF-2.0Aù3����IEND®B`‚����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/flatplane.txt����������������������������������������������������0000644�0001750�0001750�00000000043�14557511160�015542� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������../gnuastro-figures//flatplane.eps ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/gnuastro.eps�����������������������������������������������������0000644�0001750�0001750�00033571221�14557511161�015430� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%!PS-Adobe-3.0 EPSF-3.0 %%Creator: (ImageMagick) %%Title: (../gnuastro-figures/gnuastro.eps) %%CreationDate: (2024-02-03T19:22:25+00:00) %%BoundingBox: -0 -0 830 810 %%HiResBoundingBox: 0 0 830.336 810.084 %%DocumentData: Clean7Bit %%LanguageLevel: 1 %%Pages: 1 %%EndComments %%BeginDefaults %%EndDefaults %%BeginProlog % % Display a color image. The image is displayed in color on % Postscript viewers or printers that support color, otherwise % it is displayed as grayscale. % /DirectClassPacket { % % Get a DirectClass packet. % % Parameters: % red. % green. % blue. % length: number of pixels minus one of this color (optional). % currentfile color_packet readhexstring pop pop compression 0 eq { /number_pixels 3 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add 3 mul def } ifelse 0 3 number_pixels 1 sub { pixels exch color_packet putinterval } for pixels 0 number_pixels getinterval } bind def /DirectClassImage { % % Display a DirectClass image. % systemdict /colorimage known { columns rows 8 [ columns 0 0 rows neg 0 rows ] { DirectClassPacket } false 3 colorimage } { % % No colorimage operator; convert to grayscale. % columns rows 8 [ columns 0 0 rows neg 0 rows ] { GrayDirectClassPacket } image } ifelse } bind def /GrayDirectClassPacket { % % Get a DirectClass packet; convert to grayscale. % % Parameters: % red % green % blue % length: number of pixels minus one of this color (optional). % currentfile color_packet readhexstring pop pop color_packet 0 get 0.299 mul color_packet 1 get 0.587 mul add color_packet 2 get 0.114 mul add cvi /gray_packet exch def compression 0 eq { /number_pixels 1 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add def } ifelse 0 1 number_pixels 1 sub { pixels exch gray_packet put } for pixels 0 number_pixels getinterval } bind def /GrayPseudoClassPacket { % % Get a PseudoClass packet; convert to grayscale. % % Parameters: % index: index into the colormap. % length: number of pixels minus one of this color (optional). % currentfile byte readhexstring pop 0 get /offset exch 3 mul def /color_packet colormap offset 3 getinterval def color_packet 0 get 0.299 mul color_packet 1 get 0.587 mul add color_packet 2 get 0.114 mul add cvi /gray_packet exch def compression 0 eq { /number_pixels 1 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add def } ifelse 0 1 number_pixels 1 sub { pixels exch gray_packet put } for pixels 0 number_pixels getinterval } bind def /PseudoClassPacket { % % Get a PseudoClass packet. % % Parameters: % index: index into the colormap. % length: number of pixels minus one of this color (optional). % currentfile byte readhexstring pop 0 get /offset exch 3 mul def /color_packet colormap offset 3 getinterval def compression 0 eq { /number_pixels 3 def } { currentfile byte readhexstring pop 0 get /number_pixels exch 1 add 3 mul def } ifelse 0 3 number_pixels 1 sub { pixels exch color_packet putinterval } for pixels 0 number_pixels getinterval } bind def /PseudoClassImage { % % Display a PseudoClass image. % % Parameters: % class: 0-PseudoClass or 1-Grayscale. % currentfile buffer readline pop token pop /class exch def pop class 0 gt { currentfile buffer readline pop token pop /depth exch def pop /grays columns 8 add depth sub depth mul 8 idiv string def columns rows depth [ columns 0 0 rows neg 0 rows ] { currentfile grays readhexstring pop } image } { % % Parameters: % colors: number of colors in the colormap. % colormap: red, green, blue color packets. % currentfile buffer readline pop token pop /colors exch def pop /colors colors 3 mul def /colormap colors string def currentfile colormap readhexstring pop pop systemdict /colorimage known { columns rows 8 [ columns 0 0 rows neg 0 rows ] { PseudoClassPacket } false 3 colorimage } { % % No colorimage operator; convert to grayscale. % columns rows 8 [ columns 0 0 rows neg 0 rows ] { GrayPseudoClassPacket } image } ifelse } ifelse } bind def /DisplayImage { % % Display a DirectClass or PseudoClass image. % % Parameters: % x & y translation. % x & y scale. % label pointsize. % image label. % image columns & rows. % class: 0-DirectClass or 1-PseudoClass. % compression: 0-none or 1-RunlengthEncoded. % hex color packets. % gsave /buffer 512 string def /byte 1 string def /color_packet 3 string def /pixels 768 string def currentfile buffer readline pop token pop /x exch def token pop /y exch def pop x y translate currentfile buffer readline pop token pop /x exch def token pop /y exch def pop currentfile buffer readline pop token pop /pointsize exch def pop x y scale currentfile buffer readline pop token pop /columns exch def token pop /rows exch def pop currentfile buffer readline pop token pop /class exch def pop currentfile buffer readline pop token pop /compression exch def pop class 0 gt { PseudoClassImage } { DirectClassImage } ifelse grestore } bind def %%EndProlog %%Page: 1 1 %%PageBoundingBox: 0 0 830 810 userdict begin DisplayImage 0 0 830.336 810.084 12 1107 1080 0 0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8D7D7D7CCCCCC C5C5C5CCCCCCDDDDDDF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFB2B2B27E7E7E505050252525080808000000 0000000000000000000000000000000101012020204D4D4D999999E9E9E9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5F5F5B2B2B2727272323232030303000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000303035D5D5D DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF4F4F4A9A9A95454540A0A0A000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000606068D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFC7C7C76060600A0A0A000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000606060FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F29696962F2F2F000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000636363FEFEFEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD4D4D46A6A6A0E0E0E000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000007E7E7E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEB3B3B33F3F3F000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101B4B4B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDABABAB303030000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000141414E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDA4A4A4292929000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000535353FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBB313131000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000BABABAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFCECECE454545000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000363636 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEAEAEA616161020202000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000C2C2C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFC959595111111000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFCDCDCD373737000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000090909F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF4F4F46E6E6E020202000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000ACACACFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC2C2C2262626000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000006D6D6DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF1F1F16E6E6E020202000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 373737FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C01E1E1E000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000A0A0AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB7F7F7F030303000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000ECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8333333000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D9D9D0A0A0A000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000C9C9C9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6656565000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000C4C4C4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D72D2D2D000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 CBCBCBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2A2A20B0B0B000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000DBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA6D6D6D000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB424242000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCB1D1D1D 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000373737FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5 080808000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000666666FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 909090020202000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000009E9E9EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F95F5F5F000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 D6D6D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEEEEEE414141000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000001C1C1CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDDDDDD282828000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000636363FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFC8C8C8161616000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000B7B7B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFACACAC090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF909090020202000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000737373FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE717171000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000D0D0D0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB5D5D5D000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000002E2E2EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9535353000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 9A9A9AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4464646000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000171717F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEE393939000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E72E2E2E000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000D0D0DEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF252525 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000757575FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6 1C1C1C000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000C0C0CE7E7E7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D1D1D1141414000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000828282FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD6D6D6181818000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000001A1A1AF4F4F4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD6D6D6181818000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000009B9B9B FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD2D2D2151515000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 2A2A2AFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD7D7D7181818000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000BCBCBCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7181818000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000005A5A5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7181818000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000E0E0EE5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7191919000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000333333FCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3202020000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000040404CDCDCDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEA282828000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000808080FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0323232 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000002F2F2FF9F9F9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5 3C3C3C000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000040404 CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F8F8F8444444000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFC555555000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000323232FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFE636363000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000A0A0AD8D8D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF6D6D6D000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000959595FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858585000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000464646FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0A0A0010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000151515E6E6E6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBCBCBC060606000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101B1B1B1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCB0C0C0C000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000006E6E6EFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC171717000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000002B2B2BF6F6F6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEA262626000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000080808 D1D1D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5383838 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000969696FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB 484848000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000004F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF6A6A6A000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000001B1B1BEBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF8C8C8C000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000020202BDBDBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFB4B4B4030303000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFCDCDCD0B0B0B000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000002C2C2CF7F7F7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E41C1C1C000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000070707D2D2D2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDDDDDD8282823E3E3E2727271F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2B2B2B4848489B9B9B EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F22E2E2E000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000008F8F8FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE9E9E94D4D4D161616030303000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000080808171717757575FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC4D4D4D000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000393939FDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD3D3D31D1D1D020202000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000707072F2F2FEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D6D6D000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000070707 D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E71A1A1A000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000030303343434FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141020202000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000B0B0B858585 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2C2C2060606 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000303030FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF141414000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000181818F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0 161616000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000020202C6C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A6A6A010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000D0D0DB4B4B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3F3F32E2E2E000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000656565FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF282828000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000006A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFE565656000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000121212EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000494949FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF7B7B7B000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000009C9C9CFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1C1C1C000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000003D3D3DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFAFAFAF010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000363636FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000003D3D3D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D70E0E0E000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000030303CFCFCFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2292929000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000717171 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD4C4C4C000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 181818F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D7D7D000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000A8A8A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF1F1F1EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1B1B1010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000424242FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1C1C1C000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4 8686862929291818181919191C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1717171919193F3F3FAFAFAF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDB0F0F0F 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000040404D3D3D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000003D3D3DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ACACAC191919070707000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000001010102C2C2CDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 323232000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000006F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 3D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF8A8A8A121212000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000181818D1D1D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF636363000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000131313ECECECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 0000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB6B6B6131313000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000001C1C1CECECECFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA5A5A5000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000009A9A9AFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 0000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAFA1E1E1E000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000303035F5F5FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD3D3D30A0A0A000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000313131FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 0000000000000000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6A6A60C0C0C000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 161616F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2272727000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101C4C4C4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDE9E9E9EEEEEEEEEEEEF5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0000000000000000000000000000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF424242000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000A0A0AA4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF565656000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 5C5C5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB B1B1B17474744141412121210505050000000000000000000202022828285C5C5C989898EEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1C1C1C000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010000000000000000000000000000000000000000000000003D3D3DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000006B6B6BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF929292000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000D0D0DE5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDADADA878787 333333010101000000000000000000000000000000000000000000000000000000000000000000 000000090909717171EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010000000000000000000000000000000000000000000000003D3D3D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B1B1B000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000004C4C4CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8C8060606000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2979797313131 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000001C1C1CC3C3C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 0000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1A1A1A000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000474747FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF202020000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000232323F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D66767670D0D0D 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000080808B3B3B3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 0000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF1A1A1A000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000474747FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF555555000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000ADADADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6C64F4F4F020202 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000B0B0BD6D6D6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 0000000000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6C6424242000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000003F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 0000000000000000000000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D7D7D70A0A0A000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000020202CCCCCCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D04C4C4C000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000C9C9C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1C1C1C000000000000000000000000000000000000000000010101020202020202010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010000000000000000000000000000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFB363636000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000606060FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED6E6E6E030303 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000005B5B5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000010101020202020202 020202020202020202020202020202020202020202020202010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010000000000000000000000000000000000000000000000003D3D3DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF7B7B7B000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000B0B0BE4E4E4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA8F8F8F101010 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000060606F1F1F1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000010101 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 3D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC5C5C5030303000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDBDBD2C2C2C 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000B1B1B1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000 000000010101020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 010101010101010101010101010101010101010101000000000000000000000000000000000000 0000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1A1A1A000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000474747FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3232323000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000001B1B1BF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1E14F4F4F 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 6D6D6DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000 000000000000000000010101020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202010101000000000000000000000000 0000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000474747 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000A0A0A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD949494 0D0D0D000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000002A2A2AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000 000000000000000000000000000000010101020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101000000 0000000000000000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0B0000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000313131FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDB 414141000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000030303F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C 000000000000000000000000000000000000000000010101020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0101010000000000000000000000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8161616000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA 848484080808000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1C1C1C000000000000000000000000000000000000000000010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020101010000000000000000000000000000000000000000003D3D3DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF535353000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000004D4D4DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D0D0D0333333000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000A3A3A3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000010101020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020101010000000000000000000000000000000000000000003D3D3D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000 000000000000000000000000000000000000010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7A7A7 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000030303D3D3D3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F5F5F5747474030303000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000007A7A7AFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000 010101020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202010101000000000000000000000000000000000000 0000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1A1A1A000000000000000000000000000000000000000000010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000474747FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E8E8E8141414000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000606060FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFBEBEBE232323000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 5D5D5DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000 000000000000010101020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202010101000000000000000000000000 0000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF1A1A1A000000000000000000000000000000000000000000010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000474747FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF535353000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000080808E1E1E1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF5F5F5777777020202000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000424242FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000 000000000000000000000000010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202000000000000000000 0000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA6A6A6000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFC2C2C2242424000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000272727FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF202020000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE8E8E8141414000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000111111EEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF1F1F1666666010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000C0C0CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 393939000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000030303858585FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF535353000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000008B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFB9B9B91E1E1E000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000F8F8F8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF959595060606000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000161616D8D8D8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9A9A9000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000001E1E1EF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3F3656565010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000E7E7E7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEFEFEF171717000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000323232 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F01A1A1A000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A0A0A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC8C8C8252525000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 D7D7D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8888880E0E0E000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 141414CFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1A1A1A000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000474747FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000002D2D2DFCFCFCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAFA7C7C7C030303000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000C6C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE4B4B4B0B0B0B000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000111111969696FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000474747 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDBDBD010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000B1B1B1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7343434000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000B7B7B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC 626262121212000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101161616A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6 242424000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000353535FEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE9999990B0B0B000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000AFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFC6C6C6343434171717101010050505000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 070707131313171717535353E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF777777000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000BCBCBC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEA4A4A4A000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000A6A6A6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEBEBEBEA2A2A2999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999A9A9A9C6C6C6F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD1D1D1050505000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 3E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEBEBE1A1A1A000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000009E9E9EFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFC333333000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000C6C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA787878020202000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000959595 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1A1A1A000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000474747FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF909090000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000004D4D4DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E03B3B3B000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000008D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF1A1A1A000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000474747FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6E6E60E0E0E000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000020202D0D0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7A7A70F0F0F000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000848484FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000585858FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F86E6E6E000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000007C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000000000000000 000000010101020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBBBB000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000030303D7D7D7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0363636000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000737373FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1B1B1B000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 0000000000000000000000004C4C4CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9282828000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000636363FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0B0111111 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000006A6A6AFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000666666FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF828282 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000060606E0E0E0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F96F6F6F 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000646464FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF434343 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000808089D9D9DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DCDCDC090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000676767 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0 373737000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 616161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFA7A7A70C0C0C000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000161616EAEAEAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF4A4A4A000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 060606E0E0E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF BCBCBC141414000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000005E5E5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAFA1E1E1E000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000020202565656FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFB2B2B2000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF999999050505000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000005B5B5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7B7B7131313000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000001B1B1B E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9262626000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000050505DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6F65E5E5E000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000585858FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B8B8B121212000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 171717CBCBCBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858585000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000666666FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDCDCDC2D2D2D000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000555555FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF 1A1A1A070707000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0F0F0F2B2B2BDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E40C0C0C000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000050505DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFB6B6B6111111000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000525252FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF5F5F58787872A2A2A1717171919191C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C171717 1919193F3F3FADADADFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF595959000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000656565FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFE888888020202000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000004F4F4F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1EEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4C4C4010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000050505DEDEDEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF2F2F2535353000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000004C4C4CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC CCCCCC8686864242421C1C1C1111110C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0D0D0D1313132525255353539F9F9FF5F5F5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD343434 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000646464FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDADADA2B2B2B000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010000010000010000010000010000 010000010000000000494949FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9 5B5B5B0B0B0B020202000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101111111878787 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 999999000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0B00E0E0E000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000030101050101050101 050101050101050101050101020000454545FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3 404040050505000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000040404787878FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2171717000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000616161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD7D7D7D010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030101 050101050101050101050101050101050101020000424242FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 929292090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000E0E0ECFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF797979000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000030303D8D8D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F24D4D4D000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000030101050101050101050101050101050101050101020000404040FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFB4B4B4B020202000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000202028F8F8FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE2E2E20A0A0A000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000565656FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3323232000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000030101050101050101050101050101050101050101020000414141FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFAFAFA353535010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 707070FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000CDCDCDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6C6171717000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000030101050101050101050101050101050101050101020000 424242FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFE424242010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000101017F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8C8010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000004B4B4BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7A7A7090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000030101050101050101050101050101050101 050101020000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF7F7F7F010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000030303B6B6B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE3B3B3B000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000C3C3C3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE7F7F7F000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000030101050101050101050101 050101050101050101020000454545FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6050505000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000D0D0DEBEBEBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8A8A8000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000003F3F3FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F34F4F4F 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000030101050101 050101050101050101050101050101020000454545FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF232323000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 0000000000000000000000000000000000000000000000000000000000000000004C4C4CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA232323 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000B9B9B9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E4 333333000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 030101050101050101050101050101050101050101020000474747FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEBEBE020202000000000000000000 000000000000000000000000000000000000000000000000040404060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 030303010101000000000000000000000000000000000000000000000000000000000000000000 070707D7D7D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 919191000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 313131FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF C7C7C7181818000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000030101050101050101050101050101050101050101020000484848FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF272727000000000000 000000000000000000000000000000000000000000000000020202060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404030303000000000000000000000000000000000000000000000000 0000000000000000004D4D4DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3F3171717000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000AEAEAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFA8A8A8090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000030101050101050101050101050101050101050101020000494949 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC030303 000000000000000000000000000000000000000000000000000000020202060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404000000000000000000000000000000 0000000000000000000000000000000E0E0EF3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF7E7E7E000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000292929FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFE7F7F7F010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000030101050101050101050101050101050101050101 0200004A4A4AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 949494010101000000000000000000000000000000000000000000000000010101070707070707 070707060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404030303000000000000 000000000000000000000000000000000000000000020202ACACACFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE8E8E80C0C0C000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000009F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF5F5F5525252000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000030101050101050101050101050101 0501010501010200004B4B4BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF343434000000000000000000000000000000000000000000000000000000060606 070707070707070707070707070707070707070707070707070707070707070707060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 010101000000000000000000000000000000000000000000000000000000585858FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7B6B6B66363632D2D2D1C1C1C1A1A1A141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 1414141414141414141414141414141414141414141414141414141414141919191A1A1A282828 555555A8A8A8EEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A6A6A000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000001A1A1AF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFECECEC3B3B3B000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000030101050101050101 0501010501010501010501010200004C4C4CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0D0D0D000000000000000000000000000000000000000000000000 010101070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404000000000000000000000000000000000000000000000000000000242424 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC5959591717170E0E0E000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909091717173E3E3EC5C5C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDB050505000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000888888FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD9D9D9222222000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030101 0501010501010501010501010501010501010200004E4E4EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040404000000000000000000000000000000000000 000000000000030303070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909040404 040404040404040404040404040404000000000000000000000000000000000000000000000000 000000121212FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED565656151515010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000F0F0F363636D9D9D9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF565656000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000D0D0DEFEFEFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4C4C4131313000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000030101050101050101050101050101050101050101020000515151FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030303000000000000000000000000 000000000000000000000000050505070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707060606060606060606 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E111111101010101010101010101010101010101010101010 1010101010101010101010101010101010100D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C 0C0C0C090909090909090909090909090909040404000000000000000000000000000000000000 0000000000000000000D0D0DFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBABABA191919040404000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000E0E0E 898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2D2D2020202000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000737373FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEAEAE090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000030101050101050101050101050101050101050101020000545454FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000 000000000000000000000000000000000000060606080808080808080808080808070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 0707070707070C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F111111111111111111131313131313131313131313131313131313 131313131313131313131313151515151515151515151515151515151515161616161616151515 151515151515151515151515151515151515151515141414141414121212121212121212101010 1010101010101010100F0F0F0C0C0C0C0C0C0C0C0C090909090909030303000000000000000000 0000000000000000000000000000000B0B0BF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A121212000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000030303464646FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C4C 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF909090020202000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000030101050101050101050101050101050101050101020000 575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202 000000000000000000000000000000000000000000000000060606080808080808080808080808 080808080808080808080808080808080808080808080808070707070707070707070707070707 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0F0F0F0F0F0F0F0F0F0F0F0F121212121212121212141414 141414141414141414141414151515151515151515161616161616161616171717161616161616 161616161616161616161616161616161616171717171717171717171717181818181818181818 181818181818181818181818181818181818181818181818181818171717171717151515151515 1414141414141212121212121212121212121010101010100C0C0C0C0C0C0C0C0C030303000000 0000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F101010000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000101012F2F2FFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CACACA010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000005C5C5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC6D6D6D000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000030101050101050101050101050101050101 0501010200005A5A5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF020202000000000000000000000000000000000000000000000000060606080808080808 0808080808080808080808080808080808080808080808080D0D0D0D0D0D0D0D0D0D0D0D101010 101010101010101010101010121212121212121212141414141414141414151515151515161616 1616161616161818181818181919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1A1A1A1A1A1A1A1A1A191919181818181818 1818181818181717171717171515151515151515151414141414141212121010101010100C0C0C 0404040000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A111111000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101373737FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF444444000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7565656000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000030101050101050101050101 0501010501010501010200005D5D5DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000000000060606 0808080808080808080808080808080808080D0D0D0D0D0D0D0D0D0D0D0D101010101010131313 131313131313141414141414141414141414161616161616171717171717191919191919191919 1919191A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1D1D1D1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 202020202020202020202020202020202020202020202020202020202020202020202020202020 2020202020202020202020202020202020202020202020201F1F1F1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1D1D1D1B1B1B1B1B1B191919181818181818181818171717151515151515141414121212 1010101010100606060000000000000000000000000000000000000000000000000C0C0CF2F2F2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2D2D2151515000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101696969 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFC2C2C2000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000454545FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC3C3C3C000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000030101050101 050101050101050101050101050101020000606060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000 0000000606060808080D0D0D0D0D0D0D0D0D0D0D0D101010101010101010101010131313141414 1414141616161616161717171717171919191919191919191A1A1A1B1B1B1B1B1B1C1C1C1E1E1E 1E1E1E1F1F1F1F1F1F202020202020212121202020212121212121212121222222222222222222 232323232323242424242424242424242424242424242424242424242424242424242424252525 252525252525242424242424242424242424242424232323232323232323222222212121202020 2020202020202020202020202020201F1F1F1E1E1E1C1C1C1B1B1B1B1B1B181818181818171717 151515141414121212121212060606000000000000000000000000000000000000000000000000 0C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC272727 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000020202C2C2C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E3E3E000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000BABABAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD262626000000 000000000000000000000000000000000000000000000000000000000000010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 030101050101050101050101050101050101050101020000636363FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000 0000000000000101010C0C0C0E0E0E111111111111101010131313131313141414141414161616 1717171919191919191A1A1A1B1B1B1B1B1B1C1C1C1C1C1C1E1E1E1E1E1E1F1F1F202020202020 222222222222222222222222232323242424242424252525262626262626272727272727282828 272727272727272727272727272727282828282828282828282828282828282828282828282828 282828282828292929292929292929292929292929292929282828272727262626262626262626 2525252525252525252424242424242424242323232121212020202020201F1F1F1E1E1E1B1B1B 191919181818181818171717151515141414070707000000000000000000000000000000000000 0000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 9393930D0D0D000000000000000000000000000000000000000000000000000000010101020202 0707070C0C0C0D0D0D0D0D0D101010101010101010101010101010101010101010101010101010 0E0E0E0E0E0E0E0E0E0E0E0E0B0B0B0B0B0B0B0B0B0B0B0B080808080808080808080808080808 050505050505050505000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000B0B0BF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7B7B7000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000002E2E2EFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6C6141414 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000030101050101050101050101050101050101050101020000656565FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000 0000000000000000000000000101010F0F0F111111141414151515151515151515171717181818 1A1A1A1A1A1A1B1B1B1D1D1D1D1D1D1E1E1E1F1F1F202020202020212121222222222222222222 2323232424242525252626262626262727272727272828282828282828282929292A2A2A2A2A2A 2A2A2A2B2B2B2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A 292929282828282828272727262626262626262626262626252525242424222222212121202020 2020201E1E1E1E1E1E1C1C1C191919181818171717151515080808000000000000000000000000 0000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFBFBFB1C1C1C000000000000000000000000000000000000000000000000000000010101 0909090D0D0D101010111111131313131313131313151515151515151515151515151515151515 1515151515151515151515151313131313131313131212121111111111110F0F0F0F0F0F0F0F0F 0F0F0F0D0D0D0D0D0D0D0D0D0D0D0D0A0A0A070707070707070707070707070707020202020202 020202020202020202020202020202020202020202020202020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 0000000000000000000000000000000000000101016E6E6EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE343434000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000009F9F9FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFADADAD 090909000000000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000030101050101050101050101050101050101050101020000686868 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000 000000000000000000000000000000000000020202121212151515151515171717171717181818 1A1A1A1B1B1B1C1C1C1D1D1D1F1F1F212121212121222222232323232323242424242424262626 2727272626262727272828282828282929292A2A2A2A2A2A2A2A2A2B2B2B2C2C2C2B2B2B2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B292929282828282828282828262626262626242424 2323232222222121212020202020201E1E1E1C1C1C1A1A1A181818171717080808000000000000 0000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFAFAFAF0E0E0E000000000000000000000000000000000000000000000000 0101010D0D0D101010121212151515161616161616171717171717181818181818181818181818 181818181818181818181818181818181818181818181818171717171717161616161616151515 1414141414141212121212121212121111111111110F0F0F0F0F0F0D0D0D0D0D0D0A0A0A0A0A0A 0A0A0A0A0A0A070707070707070707070707020202020202020202020202020202020202020202 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000090909EFEFEFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2B2B2000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000161616F7F7F7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A1A1A1040404000000000000000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000030101050101050101050101050101050101050101 0200006B6B6BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0202020000000000000000000000000000000000000000000202021515151717171818181A1A1A 1B1B1B1C1C1C1D1D1D1F1F1F212121212121232323232323242424252525262626272727282828 2828282828282929292A2A2A2A2A2A2B2B2B2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E 2E2E2E303030303030303030303030313131313131323232323232323232323232323232323232 323232323232323232323232323232323232313131303030303030303030303030303030303030 3030303030303030302F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2A2A2A2A2A2A 2828282626262525252424242323232121212020202020201E1E1E1C1C1C191919181818080808 0000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E3E3E000000000000000000000000000000000000000000 0000000101010C0C0C1212121616161717171717171818181A1A1A1B1B1B1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1A1A1A191919191919171717171717161616161616141414141414121212121212 1111111111110F0F0F0F0F0F0F0F0F0D0D0D0D0D0D0A0A0A0A0A0A070707070707070707020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010000000000000000000000000000000000000000000000000000000101017C7C7C FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000007F7F7F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF929292010101000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000030101050101050101050101050101 0501010501010200006E6E6EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF020202000000000000000000000000000000000000000000020202161616181818 1B1B1B1C1C1C1D1D1D1F1F1F202020222222232323232323252525272727272727282828292929 2828282929292A2A2A2A2A2A2C2C2C2C2C2C2D2D2D2E2E2E2F2F2F2F2F2F303030313131313131 323232323232333333323232333333333333333333333333333333343434343434343434353535 353535353535353535353535353535353535353535353535353535333333333333333333323232 3232323232323232323232323131313131313030303030303030303030302F2F2F2E2E2E2E2E2E 2E2E2E2D2D2D2B2B2B2828282626262626262525252222222121212020201E1E1E1C1C1C191919 1818180909090000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC181818000000000000000000000000000000 0000000000000000000606061212121616161717171818181A1A1A1B1B1B1C1C1C1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F202020202020202020202020202020202020202020202020 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1C1C1C1B1B1B1B1B1B1B1B1B191919191919 1717171717171616161515151515151414141212121212121111110F0F0F0D0D0D0A0A0A0A0A0A 0A0A0A0A0A0A070707070707070707020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 0000001A1A1AFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4B4B4 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 060606E7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF888888000000000000000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000030101050101050101 050101050101050101050101020000717171FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000020202 1A1A1A1E1E1E1E1E1E1E1E1E1F1F1F212121232323232323252525262626282828292929282828 2A2A2A2A2A2A2C2C2C2D2D2D2D2D2D2E2E2E2F2F2F2F2F2F303030313131323232333333333333 343434343434343434353535363636363636373737373737383838383838373737373737373737 373737373737373737373737373737373737373737373737373737373737373737373737373737 373737373737363636363636343434343434333333333333333333323232313131313131303030 2F2F2F3030302F2F2F2E2E2E2C2C2C2B2B2B292929272727262626262626252525212121202020 1E1E1E1C1C1C1919190909090000000000000000000000000000000000000000000000000C0C0C F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF151515000000000000000000 0000000000000000000000000101011111111616161818181A1A1A1A1A1A1C1C1C1D1D1D1E1E1E 1E1E1E1F1F1F202020212121212121222222232323232323232323242424242424242424232323 2323232323232323232323232323232323232222222222222121212020201F1F1F1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1C1C1C1B1B1B1A1A1A191919191919171717171717161616141414121212 1111110F0F0F0F0F0F0F0F0F0F0F0F0D0D0D0A0A0A0A0A0A070707070707060606060606010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 0000000000000000000D0D0DD2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF373737000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000005E5E5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFE707070000000000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030101 050101050101050101050101050101050101020000747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000 0000000202021B1B1B2020202121212222222323232424242525252626262828282929292A2A2A 2B2B2B2C2C2C2C2C2C2D2D2D2F2F2F2F2F2F303030313131313131323232333333343434343434 3535353636363636363737373737373838383838383838383939393939393A3A3A3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939393939 393939393939383838383838373737373737373737363636363636353535343434333333323232 3131313131313131313030302F2F2F2F2F2F2D2D2D2C2C2C2A2A2A292929282828292929262626 2222222020201F1F1F1D1D1D1A1A1A090909000000000000000000000000000000000000000000 0000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5070707000000 0000000000000000000000000000000000000303031414141B1B1B1C1C1C1C1C1C1C1C1C1E1E1E 1E1E1E202020222222232323232323242424242424232323252525252525252525252525262626 252525252525252525262626262626262626262626252525252525252525232323232323242424 2222222222222222222121212121212020201E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1B1B1B 1A1A1A1919191616161515151515151414141414141212121111110F0F0F0D0D0D0D0D0D0D0D0D 0A0A0A090909090909060606060606060606010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000010101898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB7B7B7000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101000000000000000000000000000000 000000000000000000000000CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFB606060000000000000000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000030101050101050101050101050101050101050101020000777777FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000 0000000000000000000202021C1C1C2121212323232424242525252626262828282929292B2B2B 2C2C2C2D2D2D2F2F2F2F2F2F303030323232333333343434343434353535353535353535363636 3737373838383838383939393939393A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C 3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737373737 3636363535353333333232323232323232323131313030302F2F2F2D2D2D2C2C2C2B2B2B292929 2929292727272424242222222121211E1E1E1A1A1A090909000000000000000000000000000000 0000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F 0000000000000000000000000000000000000000000000000909091919191D1D1D1E1E1E1D1D1D 1E1E1E1F1F1F212121232323242424232323252525252525252525262626272727272727282828 282828282828282828282828292929292929292929292929292929282828282828272727272727 272727252525252525252525252525252525232323232323222222222222212121202020202020 1F1F1F1E1E1E1D1D1D1D1D1D1B1B1B1A1A1A1A1A1A171717161616161616151515121212121212 1111111111111111110F0F0F0E0E0E0C0C0C090909090909060606060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000494949FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF3C3C3C000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101000000000000000000 0000000000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8515151000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000050505050505050505050505050505 0505050505050505050503030501010501010501010501010501010501010200007A7A7AFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000 0000000000000000000000000000000303031E1E1E2323232424242626262727272828282A2A2A 2B2B2B2D2D2D2E2E2E303030313131323232333333343434353535363636373737383838383838 3939393838383939393A3A3A3B3B3B3B3B3B3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E 3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F 3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A 3939393939393838383737373636363636363535353333333333333131313030302F2F2F2D2D2D 2C2C2C2B2B2B2929292727272525252323232121211F1F1F1D1D1D090909000000000000000000 0000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF6C6C6C0000000000000000000000000000000000000000000000000D0D0D1B1B1B1D1D1D 1E1E1E202020212121222222232323232323252525252525262626272727272727282828292929 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2C2C2C2C2C2C2C2C2C2B2B2B2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929282828282828272727272727262626252525 2525252323232323232222222222222020201F1F1F1E1E1E1E1E1E1D1D1D1C1C1C1B1B1B1A1A1A 1919191717171616161616161414141414141212121010100E0E0E0C0C0C0C0C0C090909090909 090909060606060606010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000252525FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9B9B9000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101000000 000000000000000000000000000000000000000000ACACACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3444444000000000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000050505050505050505050505050505080808080808 080808080808050505050505050505050303050101050101050101050101050101050101020000 7D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202 000000000000000000000000000000000000000000030303202020242424262626282828282828 2929292B2B2B2D2D2D2E2E2E303030313131333333343434343434353535373737383838393939 3838383939393939393A3A3A3B3B3B3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F404040 3F3F3F404040404040404040404040404040404040404040404040404040404040414141414141 4040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D 3D3D3D3C3C3C3B3B3B3A3A3A3A3A3A393939383838373737373737363636353535343434313131 2F2F2F2E2E2E2E2E2E2D2D2D2B2B2B2929292626262424242222222020201E1E1E0A0A0A000000 0000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF6464640000000000000000000000000000000000000000000101010F0F0F 1C1C1C1E1E1E1F1F1F2222222323232424242424242626262828282727272828282929292A2A2A 2A2A2A2B2B2B2C2C2C2D2D2D2E2E2E2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F 2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2A2A2A2A2A2A 292929292929292929272727262626252525252525232323232323222222222222202020202020 1E1E1E1D1D1D1D1D1D1C1C1C1B1B1B1B1B1B171717171717161616141414121212101010101010 0E0E0E0E0E0E0C0C0C0C0C0C090909060606060606060606010101010101010101010101010101 0101010101010101010000000000000000000000000000000000000000000000000000001E1E1E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 0000000000000000000000000000000000000000000000001F1F1FFBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEA333333000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000505050505050505050505050808080808080808080808080808080B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B080808050505050505050303050101050101050101050101050101 0501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF020202000000000000000000000000000000000000000000030303232323262626282828 2A2A2A2929292B2B2B2D2D2D2E2E2E303030303030333333343434353535363636373737383838 3838383939393A3A3A3B3B3B3B3B3B3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F404040404040 414141414141424242424242434343424242414141414141414141414141414141414141414141 4242424242424242424141414141414141414141414141414141414141414040404040403F3F3F 3F3F3F3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3B3B3B3A3A3A393939383838383838373737363636 3535353333333232323030302E2E2E2E2E2E2C2C2C2929292727272525252323232121211F1F1F 0A0A0A0000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000 0101011010101D1D1D1E1E1E2121212323232424242525252626262828282929292A2A2A2A2A2A 2C2C2C2D2D2D2E2E2E2E2E2E2F2F2F303030303030313131313131313131313131313131313131 3232323232323232323131313131313131313131313030303030303030302F2F2F2F2F2F2F2F2F 2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2A2A2A2A2A2A2A2A2A292929282828272727272727262626 2525252323232323232222222121211F1F1F1E1E1E1E1E1E1C1C1C1B1B1B1B1B1B191919171717 1616161414141313131111111111111010100E0E0E0C0C0C090909090909060606060606060606 010101010101010101010101010101000000000000000000000000000000000000000000000000 0000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 0101010101010000000000000000000000000000000000000000000000008B8B8BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6E6E62C2C2C000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000505050505050505050505050808080808080B0B0B0B0B0B0D0D0D0D0D0D0B0B0B 0B0B0B0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0B0B0B080808080808050303050101050101050101 0501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000030303232323 2727272A2A2A2C2C2C2C2C2C2E2E2E2F2F2F313131333333343434353535373737373737383838 3838383939393B3B3B3B3B3B3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F404040404040414141 424242424242434343434343444444444444454545444444444444444444444444444444444444 434343434343444444444444444444434343434343434343434343434343424242424242414141 4141414040404040403F3F3F3F3F3F3E3E3E3D3D3D3C3C3C3C3C3C3B3B3B3A3A3A393939393939 3737373737373535353434343232323030302F2F2F2E2E2E2C2C2C2A2A2A272727262626242424 2121211F1F1F0B0B0B0000000000000000000000000000000000000000000000000C0C0CF2F2F2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000 0000000000000101011010101E1E1E2020202323232424242626262626262929292A2A2A2B2B2B 2D2D2D2E2E2E2F2F2F2F2F2F303030313131313131323232333333333333333333333333333333 343434343434343434343434343434343434343434343434333333333333333333333333333333 3333333232323232323131313131313030303030302F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2B2B2B 2A2A2A2A2A2A2828282828282727272626262525252323232323232222222020201F1F1F1E1E1E 1D1D1D1C1C1C1B1B1B1919191818181515151515151414141111111010100E0E0E0E0E0E0C0C0C 090909090909060606060606060606010101010101000000000000000000000000000000000000 0000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF464646000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 0101010101010101010000000000000000000000000000000000000000000000000A0A0AEDEDED FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD232323000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000505050505050808080808080808080808080808080B0B0B0D0D0D0D0D0D0F0F0F0F0F0F 0F0F0F0D0D0D0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0D0D0D0D0D0D0B0B0B0B0B0B060404050101 0501010501010501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000 0404042424242828282A2A2A2D2D2D2E2E2E2F2F2F313131333333353535353535363636393939 3939393A3A3A3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F3E3E3E3F3F3F404040404040414141424242 424242434343444444444444454545454545454545464646474747464646464646464646464646 464646464646464646464646474747464646454545454545444444444444444444444444434343 4242424242424141414141414040404040403F3F3F3E3E3E3D3D3D3D3D3D3D3D3D3B3B3B3A3A3A 3A3A3A3939393737373737373535353434343232323030302F2F2F2E2E2E2C2C2C2C2C2C282828 2727272424242222222020200B0B0B000000000000000000000000000000000000000000000000 0C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000 0000000000000000000000000101011212121F1F1F2222222424242626262727272929292A2A2A 2C2C2C2E2E2E2F2F2F303030313131313131323232323232333333333333333333353535353535 353535363636363636363636363636373737373737373737363636363636363636363636363636 353535353535353535353535343434333333333333333333333333323232313131313131303030 2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2A2A2A2A2A2A292929282828272727252525252525232323 2323232222222121211F1F1F1D1D1D1D1D1D1C1C1C1A1A1A181818161616151515131313111111 1010101010100E0E0E0E0E0E0C0C0C090909060606060606060606000000000000000000000000 0000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4D4D41A1A1A000000000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0505050505050808080808080B0B0B0B0B0B0D0D0D0D0D0D0D0D0D0D0D0D0F0F0F101010101010 1212121212121212121010101010101212121212121010101010100F0F0F0F0F0F0D0D0D0D0D0D 0705050501010501010501010501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000 0000000000000404042626262A2A2A2C2C2C2E2E2E2F2F2F303030323232343434353535363636 3737373939393939393B3B3B3C3C3C3E3E3E3F3F3F404040404040414141414141414141434343 434343444444444444454545454545454545464646464646464646474747474747474747474747 474747474747474747474747474747474747474747474747474747474747474747464646454545 4545454545454444444444444343434242424141414141414040403F3F3F3F3F3F3E3E3E3D3D3D 3D3D3D3C3C3C3B3B3B3A3A3A3737373737373636363434343232323131313030302E2E2E2D2D2D 2C2C2C2828282727272525252323232020200B0B0B000000000000000000000000000000000000 0000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000 000000000000000000000000000000000000010101121212212121232323252525272727282828 2A2A2A2B2B2B2E2E2E2F2F2F303030313131323232323232333333343434353535343434353535 363636373737373737383838383838383838383838383838393939393939383838383838383838 383838383838373737383838383838373737373737363636363636353535353535343434333333 3232323333333232323131313030303030302F2F2F2E2E2E2D2D2D2C2C2C2A2A2A2A2A2A292929 2828282727272626262525252323232222222121212020201F1F1F1D1D1D1D1D1D1A1A1A181818 1616161515151313131313131111111111111010100E0E0E090909090909060606010101000000 0000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 535353000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000D0D0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C7101010000000 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000050505050505 0505050808080808080B0B0B0B0B0B0D0D0D0F0F0F0F0F0F101010121212121212121212131313 131313141414151515151515151515141414141414141414141414141414131313121212101010 1010100F0F0F0705050501010501010501010501010501010501010200007F7F7FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000 0000000000000000000000000404042727272A2A2A2C2C2C2E2E2E2F2F2F313131333333353535 3636363737373939393939393A3A3A3C3C3C3D3D3D3E3E3E3F3F3F404040414141414141424242 424242434343444444454545454545464646474747464646474747474747474747474747474747 484848484848484848484848484848484848484848484848484848484848484848484848474747 4747474747474747474747474646464444444444444343434242424141414141414040403F3F3F 3F3F3F3E3E3E3D3D3D3D3D3D3B3B3B3B3B3B393939383838363636353535333333313131303030 2F2F2F2D2D2D2C2C2C2828282727272525252323232121210B0B0B000000000000000000000000 0000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 646464000000000000000000000000000000000000000000010101121212222222242424262626 2828282929292B2B2B2D2D2D2F2F2F303030323232333333343434343434353535363636373737 3737373737373838383939393939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939383838383838383838 3838383737373737373535353434343333333232323232323232323131313030302F2F2F2E2E2E 2D2D2D2C2C2C2C2C2C2A2A2A2A2A2A2828282727272525252525252323232323232020201F1F1F 1E1E1E1C1C1C1A1A1A1818181616161616161414141313131111111010100E0E0E0C0C0C080808 0101010000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD8D8D8020202000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 0000000000000000003B3B3BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6C60E0E0E 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 0505050808080808080B0B0B0D0D0D0D0D0D0F0F0F101010101010121212131313141414151515 151515151515171717171717181818181818181818171717171717171717171717171717151515 1414141313131010101010100806060501010501010501010501010501010501010200007F7F7F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000 0000000000000000000000000000000000000404042727272B2B2B2E2E2E303030313131323232 3434343535353737373838383939393B3B3B3C3C3C3D3D3D3E3E3E3F3F3F414141424242424242 434343434343434343454545454545464646464646474747474747474747474747484848484848 484848494949494949494949494949494949494949494949494949494949494949494949494949 494949484848484848484848474747474747474747464646454545454545434343424242424242 4141414040403F3F3F3E3E3E3D3D3D3D3D3D3C3C3C3B3B3B393939383838383838363636343434 3232323030303030302D2D2D2C2C2C2828282727272525252323232121210B0B0B000000000000 0000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF646464000000000000000000000000000000000000000000010101131313232323 2424242626262828282929292B2B2B2D2D2D2F2F2F313131323232343434353535363636373737 3838383939393939393A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3C3C3C3B3B3B3B3B3B3A3A3A 3A3A3A3A3A3A3A3A3A3A3A3A393939383838373737363636353535353535333333323232333333 3232323131312F2F2F2F2F2F2E2E2E2D2D2D2C2C2C2B2B2B2A2A2A282828272727252525252525 2323232222222121211F1F1F1D1D1D1B1B1B1A1A1A1919191515151515151313131111110E0E0E 0E0E0E0B0B0B0101010000000000000000000000000000000000000000000000001B1B1BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF606060000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5C5C5 0E0E0E000000000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 0505050808080B0B0B0D0D0D0F0F0F0F0F0F121212121212131313141414151515171717181818 1919191919191919191919191A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919 181818171717151515141414131313121212080606050101050101050101050101050101050101 0200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0202020000000000000000000000000000000000000000000404042828282C2C2C2F2F2F323232 3232323333333535353737373939393A3A3A3C3C3C3D3D3D3D3D3D3E3E3E3F3F3F414141424242 434343434343444444444444454545464646464646464646474747474747484848484848494949 494949494949494949494949494949494949494949494949494949494949494949494949494949 494949494949494949494949494949484848484848484848474747474747464646454545444444 4444444343434141414141414040403F3F3F3D3D3D3D3D3D3C3C3C3C3C3C3A3A3A393939383838 3636363535353333333232323131312D2D2D2C2C2C2828282727272525252323232121210B0B0B 0000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000010101 1414142525252626262828282929292B2B2B2D2D2D2F2F2F303030323232343434353535363636 3737373838383939393A3A3A3B3B3B3B3B3B3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E 3F3F3F3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E 3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B393939383838383838363636 3535353535353333333232323232323131313131313030302F2F2F2E2E2E2C2C2C2B2B2B2A2A2A 2929292828282727272525252323232222222121211F1F1F1C1C1C1A1A1A1A1A1A181818151515 1414141313131111110F0F0F010101000000000000000000000000000000000000000000000000 1B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE2E2E2060606000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000141414F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF C5C5C50E0E0E000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000050505050505 0808080808080B0B0B0D0D0D0F0F0F101010121212131313141414151515171717181818191919 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1D1D1D1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1A1A1A181818171717151515141414121212080606050101050101050101050101 0501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0202020000000000000000000000000000000000000000000404042828282D2D2D 3030303232323333333434343636363838383A3A3A3B3B3B3D3D3D3E3E3E3F3F3F404040414141 424242434343444444444444454545454545464646474747474747474747484848494949494949 4949494949494949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949494949494949484848474747474747464646 4545454444444444444343434242424242424141414040403D3D3D3D3D3D3D3D3D3C3C3C3A3A3A 3939393838383636363535353333333232323131312E2E2E2C2C2C282828272727252525232323 2121210B0B0B0000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000 0000000101011414142525252727272929292A2A2A2C2C2C2E2E2E2F2F2F303030323232343434 3636363737373737373939393A3A3A3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F3E3E3E 3F3F3F3F3F3F4040403F3F3F3F3F3F3F3F3F404040404040404040404040404040404040404040 4040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B 3A3A3A3838383838383737373636363535353434343232323232323232323232323131312F2F2F 2E2E2E2C2C2C2C2C2C2A2A2A2A2A2A2828282525252424242323232222221F1F1F1C1C1C1C1C1C 1A1A1A181818161616151515131313101010010101000000000000000000000000000000000000 0000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D6D6D000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000787878FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFC4C4C40D0D0D000000000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000050505050505080808 0808080B0B0B0D0D0D0D0D0D0F0F0F1212121313131515151717171818181919191A1A1A1B1B1B 1B1B1B1C1C1C1D1D1D1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020 1E1E1E1E1E1E1E1E1E1D1D1D1B1B1B1A1A1A191919181818151515131313080606050101050101 0501010501010501010501010200007E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000040404 2929292D2D2D3030303333333333333535353737373939393A3A3A3B3B3B3D3D3D3E3E3E3F3F3F 404040424242424242434343444444454545454545464646464646474747484848484848484848 4949494949494949494949494949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949494949494949474747474747 4646464545454545454444444343434343434242424141414040403F3F3F3E3E3E3D3D3D3C3C3C 3C3C3C3A3A3A3939393838383636363434343333333131313131312E2E2E2C2C2C282828282828 2626262424242121210B0B0B0000000000000000000000000000000000000000000000000C0C0C F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000 0000000000000000000101011414142525252727272A2A2A2C2C2C2E2E2E2F2F2F303030323232 3333333535353737373838383939393A3A3A3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F404040 404040414141414141414141414141404040414141414141414141424242424242424242424242 4242424242424141414141414141414040404040404040404040403F3F3F3F3F3F3F3F3F3E3E3E 3D3D3D3D3D3D3D3D3D3B3B3B3B3B3B3A3A3A393939383838373737363636353535343434333333 3232323232323131312F2F2F2E2E2E2E2E2E2D2D2D2A2A2A282828272727262626252525222222 2020201D1D1D1C1C1C191919181818161616151515121212010101000000000000000000000000 0000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEE0B0B0B000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000020202DEDEDEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFC4C4C40D0D0D000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000050505050505050505080808 0B0B0B0D0D0D0F0F0F0F0F0F1212121313131414141717171818181A1A1A1B1B1B1B1B1B1C1C1C 1D1D1D1E1E1E1F1F1F202020212121212121212121212121212121212121212121212121212121 2121212121212020202020202020201E1E1E1D1D1D1B1B1B1A1A1A191919171717151515090707 0501010501010501010501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000 0000000404042929292D2D2D3030303333333333333535353737373939393A3A3A3B3B3B3D3D3D 3F3F3F3F3F3F404040424242424242434343454545454545454545464646464646474747484848 4949494949494A4A4A4A4A4A4A4A4A4A4A4A4949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949494949494949484848484848 4747474646464545454545454444444343434242424242424141414141414040403F3F3F3E3E3E 3D3D3D3C3C3C3B3B3B3939393838383737373636363434343232323131313030302E2E2E2C2C2C 2828282828282626262424242222220B0B0B000000000000000000000000000000000000000000 0000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000 0000000000000000000000000000000101011414142525252727272A2A2A2C2C2C2F2F2F313131 3131313232323434343737373838383939393A3A3A3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F404040 414141414141414141424242434343434343434343424242424242434343434343434343444444 444444444444444444444444444444434343434343424242424242424242424242424242414141 4141414040404040403F3F3F3F3F3F3F3F3F3E3E3E3C3C3C3B3B3B3A3A3A393939383838383838 3737373636363535353333333333333232323131313030302F2F2F2D2D2D2A2A2A292929282828 2727272525252323232121211E1E1E1C1C1C1A1A1A191919161616131313010101000000000000 0000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858585000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010000000000000000000000000000000000000000000000004D4D4DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFC4C4C40D0D0D000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000050505080808080808 0B0B0B0D0D0D0F0F0F1010101212121313131717171717171919191B1B1B1B1B1B1D1D1D1E1E1E 1F1F1F202020212121212121212121232323232323232323242424242424242424242424232323 2323232323232323232323232121212121212121212020201E1E1E1B1B1B1B1B1B1A1A1A191919 1717170907070501010501010501010501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000 0000000000000000000404042929292E2E2E3030303333333333333535353737373939393A3A3A 3B3B3B3D3D3D3E3E3E3F3F3F404040424242424242434343444444454545454545464646464646 4747474848484949494949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B494949 494949494949494949494949494949494949494949494949494949494949494949494949484848 484848484848464646474747464646454545444444434343424242424242414141404040404040 3E3E3E3D3D3D3C3C3C3B3B3B3B3B3B3939393838383838383636363434343232323131312F2F2F 2E2E2E2C2C2C2828282828282626262424242222220B0B0B000000000000000000000000000000 0000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464 0000000000000000000000000000000000000000000101011414142525252828282B2B2B2E2E2E 3030303232323333333434343434343737373939393A3A3A3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F 404040414141424242424242434343434343444444444444454545454545444444444444444444 454545454545454545454545454545454545454545454545454545444444444444444444444444 4444444444444343434242424242424141414141414040403F3F3F3F3F3F3C3C3C3B3B3B3A3A3A 3939393939393838383737373636363535353333333333333232323131313030302E2E2E2C2C2C 2A2A2A2A2A2A2828282525252424242323232121211E1E1E1C1C1C1A1A1A191919141414020202 0000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA1C1C1C000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 B6B6B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC3C3C30D0D0D000000000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000050505050505080808080808 0B0B0B0D0D0D0F0F0F1212121414141515151717171818181B1B1B1B1B1B1C1C1C1E1E1E202020 212121212121232323242424252525252525252525262626262626272727272727272727272727 2727272626262626262626262626262525252323232323232323232121211F1F1F1D1D1D1B1B1B 1B1B1B1B1B1B1818180907070501010501010501010501010501010501010200007E7E7EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000 0000000000000000000000000000000404042929292E2E2E303030333333343434363636383838 3A3A3A3B3B3B3C3C3C3E3E3E3E3E3E3F3F3F404040414141424242424242434343444444454545 4545454646464646464747474747474848484949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4B4B4B4A4A4A4A4A4A4A4A4A494949494949494949494949494949494949484848 474747474747464646464646464646464646454545454545444444434343424242424242404040 4040403F3F3F3E3E3E3D3D3D3C3C3C3B3B3B3B3B3B383838393939373737363636343434323232 3131312F2F2F2D2D2D2A2A2A2929292727272525252323232121210B0B0B000000000000000000 0000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF646464000000000000000000000000000000000000000000010101151515252525292929 2B2B2B2E2E2E3030303232323333333434343636363838383939393A3A3A3B3B3B3C3C3C3D3D3D 3E3E3E3F3F3F404040414141434343434343434343444444454545454545454545464646464646 464646454545464646464646464646464646474747474747464646464646464646454545454545 4545454545454545454545454444444444444343434343434242424141414040404040403F3F3F 3C3C3C3B3B3B3A3A3A3A3A3A393939383838373737363636353535333333323232333333313131 2F2F2F2D2D2D2C2C2C2B2B2B2A2A2A2727272525252525252323232020201E1E1E1C1C1C1A1A1A 1414140202020000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1A1A1 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000222222FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3C3C30D0D0D000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010505050808080B0B0B 0D0D0D0F0F0F1212121313131414141717171A1A1A1B1B1B1B1B1B1B1B1B1F1F1F202020202020 2121212323232424242525252626262828282828282828282828282A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2A2A2A2A2A2A2A2A2A292929282828282828282828262626262626252525232323212121 2020201E1E1E1C1C1C1B1B1B1919190A0808050101050101050101050101050101050101020000 7E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202 0000000000000000000000000000000000000000000404042929292E2E2E303030333333343434 3636363838383A3A3A3B3B3B3D3D3D3E3E3E3F3F3F3F3F3F404040414141424242434343444444 4444444545454545454646464646464747474747474848484949494A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4949494A4A4A494949 484848484848474747474747464646474747464646464646454545444444434343434343424242 4141414141414141414040403E3E3E3D3D3D3C3C3C3B3B3B3A3A3A383838393939373737363636 3434343232323131313030302D2D2D2B2B2B2929292727272525252323232121210A0A0A000000 0000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000010101151515 2727272A2A2A2B2B2B2E2E2E3030303232323333333434343535353838383A3A3A3B3B3B3C3C3C 3C3C3C3E3E3E3F3F3F404040404040424242434343434343444444444444454545454545464646 464646464646464646474747464646464646474747474747474747474747474747474747474747 474747464646464646464646464646464646454545454545444444444444444444434343424242 4242424040403F3F3F3E3E3E3C3C3C3C3C3C3B3B3B3A3A3A393939383838373737353535343434 3333333232323131312F2F2F2E2E2E2D2D2D2C2C2C2929292727272626262323232121211F1F1F 1D1D1D1A1A1A1616160202020000000000000000000000000000000000000000000000001B1B1B FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF313131000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 0000000000000000008A8A8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2C2C20C0C0C000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101060606060606060606090909 0B0B0B0F0F0F1212121313131515151717171919191B1B1B1C1C1C1E1E1E1E1E1E1F1F1F212121 2323232323232525252626262727272828282828282A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C 2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A282828272727262626 2525252323232121211F1F1F1D1D1D1B1B1B1A1A1A0A0808050101050101050101050101050101 0501010200007E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0202020000000000000000000000000000000000000000000404042929292E2E2E303030 3434343535353636363838383A3A3A3B3B3B3D3D3D3E3E3E3F3F3F3F3F3F404040414141424242 444444444444454545464646464646474747474747484848474747484848484848494949494949 4949494949494949494949494949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949 494949494949484848484848474747474747464646464646454545454545444444434343434343 4242424141414141414141414040403F3F3F3E3E3E3D3D3D3C3C3C3A3A3A3A3A3A383838393939 3737373535353434343232323030303030302D2D2D2B2B2B282828262626252525232323202020 0A0A0A0000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000 0101011515152727272A2A2A2C2C2C2E2E2E3030303131313333333434343535353838383A3A3A 3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E404040404040424242434343434343444444454545454545 454545464646464646464646474747474747474747484848474747474747484848484848474747 474747474747474747474747464646474747474747474747464646454545454545444444444444 4444444444444343434242424141414040403F3F3F3E3E3E3C3C3C3C3C3C3B3B3B3A3A3A383838 3737373636363535353434343232323131312F2F2F2F2F2F2D2D2D2A2A2A292929272727242424 2222221F1F1F1D1D1D1B1B1B161616020202000000000000000000000000000000000000000000 0000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBFBFBF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000060606EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEBEBE0A0A0A000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060606060909090C0C0C 0E0E0E1010101111111414141515151818181A1A1A1B1B1B1B1B1B1E1E1E202020222222232323 2525252525252626262727272828282A2A2A2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2D2D2D2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2A2A2A 2828282626262626262525252323232020201E1E1E1C1C1C1B1B1B0A0808050101050101050101 0501010501010501010200007D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000040404292929 2E2E2E3131313333333434343636363838383A3A3A3B3B3B3D3D3D3E3E3E3F3F3F3F3F3F404040 414141424242434343444444454545464646464646464646474747474747484848484848494949 494949494949484848484848484848484848484848494949494949494949494949484848484848 484848484848484848484848474747474747464646464646454545454545444444444444434343 4242424141414141414040403F3F3F3F3F3F3F3F3F3E3E3E3D3D3D3C3C3C3B3B3B3A3A3A393939 3838383737373636363434343232323030303030302F2F2F2C2C2C292929272727262626242424 2323232020200A0A0A0000000000000000000000000000000000000000000000000C0C0CF2F2F2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000 0000000000000101011515152626262929292B2B2B2D2D2D303030313131333333343434363636 3838383A3A3A3B3B3B3C3C3C3D3D3D3F3F3F3F3F3F404040414141414141424242434343444444 454545454545464646464646464646474747474747484848484848494949494949494949484848 484848484848484848484848484848484848484848474747474747474747474747464646464646 4646464545454444444444444343434242424242424141414040404040403E3E3E3D3D3D3C3C3C 3A3A3A3939393838383737373636363535353333333232323131312F2F2F2E2E2E2C2C2C2A2A2A 2929292727272323232222222020201D1D1D191919020202000000000000000000000000000000 0000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF4D4D4D000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000565656FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1C1C10C0C0C000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 0C0C0C1010101111111414141515151818181B1B1B1C1C1C1D1D1D1E1E1E202020212121232323 2525252727272828282828282929292A2A2A2C2C2C2D2D2D2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F 3030303030303131313131313131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E 2D2D2D2A2A2A2828282828282727272626262323232121211F1F1F1D1D1D1B1B1B0A0808050101 0501010501010501010501010501010200007E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000 0404042A2A2A2F2F2F3131313232323434343535353737373A3A3A3B3B3B3C3C3C3E3E3E3F3F3F 3F3F3F404040414141424242424242434343444444444444454545464646464646474747474747 474747484848484848484848484848484848484848484848484848484848484848484848474747 474747474747464646464646464646464646464646454545454545444444434343434343424242 4242424242424242423F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3B3B3B3A3A3A393939 3838383737373636363636363535353434343131312F2F2F2E2E2E2D2D2D2B2B2B292929262626 2525252424242222221E1E1E0A0A0A000000000000000000000000000000000000000000000000 0C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000 0000000000000000000000000101011414142626262828282B2B2B2D2D2D303030323232343434 3434343636363838383A3A3A3B3B3B3C3C3C3D3D3D3F3F3F3F3F3F404040414141424242434343 4343434444444545454646464646464646464747474747474747474848484848484949494A4A4A 4A4A4A4A4A4A484848484848484848484848484848484848484848484848484848474747474747 474747474747474747464646444444444444444444434343424242424242414141414141404040 3F3F3F3D3D3D3B3B3B3A3A3A3838383737373737373636363434343333333131313030302F2F2F 2D2D2D2A2A2A2A2A2A2727272525252222222121211D1D1D191919020202000000000000000000 0000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9020202000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000BABABAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1C1C10A0A0A000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101060606060606090909090909 0E0E0E1010101111111414141818181919191B1B1B1C1C1C1F1F1F212121222222232323242424 2626262828282A2A2A2B2B2B2C2C2C2D2D2D2D2D2D2E2E2E2F2F2F313131313131323232323232 333333333333333333333333343434343434343434343434333333333333323232313131313131 3131313030302F2F2F2C2C2C2A2A2A2828282828282626262424242121212020201E1E1E1B1B1B 0B09090501010501010501010501010501010501010200007D7D7DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000 0000000000000404042A2A2A2F2F2F3030303333333333333535353737373A3A3A3B3B3B3B3B3B 3D3D3D3E3E3E3E3E3E3F3F3F404040414141424242424242434343434343444444444444454545 464646464646464646464646464646464646464646464646464646464646464646474747474747 474747464646454545454545454545454545444444444444434343434343424242424242424242 4242424141414141414040403F3F3F3F3F3F3E3E3E3D3D3D3C3C3C3B3B3B3B3B3B3A3A3A393939 3838383737373636363535353535353535353434343232323030302F2F2F2D2D2D2B2B2B2A2A2A 2828282626262424242323232121211E1E1E0A0A0A000000000000000000000000000000000000 0000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000 0000000000000000000000000000000000000101011414142626262828282B2B2B2D2D2D303030 3232323434343535353636363838383A3A3A3B3B3B3C3C3C3D3D3D3F3F3F3F3F3F404040414141 424242434343434343444444454545464646464646474747474747474747484848484848494949 4949494A4A4A4A4A4A4A4A4A4A4A4A494949494949494949494949494949494949494949494949 484848484848484848474747474747474747454545454545444444444444434343434343424242 4242424040404040403F3F3F3C3C3C3B3B3B3A3A3A383838383838373737353535323232333333 3131313030302E2E2E2C2C2C2A2A2A2828282525252323232121211E1E1E191919020202000000 0000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF696969000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000212121FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D0101010000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 0C0C0C1010101313131515151818181A1A1A1C1C1C1D1D1D1F1F1F212121242424262626272727 2828282929292A2A2A2C2C2C2D2D2D2F2F2F2F2F2F313131313131313131323232333333343434 353535353535363636363636363636363636363636363636363636363636353535353535343434 3434343232323131313131313131312E2E2E2C2C2C2A2A2A292929282828252525232323202020 1F1F1F1C1C1C0B09090501010501010501010501010501010501010200007D7D7DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000 0000000000000000000000000404042929292F2F2F303030323232333333343434373737383838 3A3A3A3B3B3B3B3B3B3D3D3D3E3E3E3F3F3F404040414141414141424242424242424242424242 434343444444444444454545454545454545454545454545454545454545454545454545454545 454545454545454545454545454545444444444444444444424242424242424242424242424242 4141414040404040403F3F3F3F3F3F3F3F3F3E3E3E3D3D3D3C3C3C3B3B3B3A3A3A3A3A3A3A3A3A 3939393737373636363535353535353535353434343333333232323030302F2F2F2D2D2D2C2C2C 2B2B2B2A2A2A2828282525252424242222222020201D1D1D090909000000000000000000000000 0000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 6464640000000000000000000000000000000000000000000101011414142626262828282A2A2A 2D2D2D3030303232323333333535353535353838383A3A3A3B3B3B3B3B3B3D3D3D3E3E3E3E3E3E 404040404040414141434343434343444444454545464646464646464646474747474747474747 4848484848484949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949494949 494949494949494949494949494949484848484848484848464646464646454545454545444444 4444444343434343434242424141414040403F3F3F3C3C3C3B3B3B3A3A3A393939383838363636 3434343232323333333131312F2F2F2D2D2D2A2A2A2828282525252323232222221E1E1E1A1A1A 0202020000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE4E4E49191914C4C4C2020201212120D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D1111111A1A1A 3C3C3C7A7A7ACECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED0B0B0B000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000838383FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C1010101111111414141616161919191C1C1C1D1D1D202020222222222222242424272727 2929292B2B2B2C2C2C2D2D2D2E2E2E2F2F2F313131313131323232333333333333343434353535 363636363636373737373737383838383838383838383838373737373737373737373737363636 3636363535353434343333333232323232323131313030302E2E2E2C2C2C2B2B2B292929262626 2323232121212020201D1D1D0B09090501010501010501010501010501010501010200007D7D7D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000 0000000000000000000000000000000000000404042929292F2F2F303030313131323232333333 3636363838383A3A3A3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F404040414141424242424242 424242434343434343444444444444444444444444444444444444444444444444444444444444 444444444444444444444444444444444444434343434343434343434343424242424242414141 4141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3B3B3B3A3A3A3A3A3A 3939393939393838383737373636363535353434343333333333333232323131312F2F2F2E2E2E 2C2C2C2A2A2A2A2A2A2A2A2A2828282525252525252222222020201D1D1D090909000000000000 0000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF646464000000000000000000000000000000000000000000010101131313262626 2929292A2A2A2D2D2D2F2F2F3131313232323434343636363737373939393A3A3A3B3B3B3C3C3C 3D3D3D3F3F3F3F3F3F404040414141424242434343434343444444454545464646464646464646 4646464747474747474848484848484949494949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949 494949494949494949494949494949494949494949494949484848484848474747464646464646 4545454545454444444444444444444343434242424141414040403E3E3E3C3C3C3B3B3B3A3A3A 3939393737373535353333333232323232323030302E2E2E2B2B2B292929262626232323222222 1F1F1F1B1B1B0202020000000000000000000000000000000000000000000000001B1B1BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE5E5E54D4D4D131313010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000F0F0F292929C3C3C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848484000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000030303 E2E2E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2 1E1E1E000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C0E0E0E1111111515151616161919191C1C1C1D1D1D202020222222242424262626262626 2828282A2A2A2C2C2C2E2E2E2F2F2F303030323232333333353535343434353535363636363636 3737373737373838383838383939393939393A3A3A3A3A3A3A3A3A3A3A3A393939393939393939 3939393838383737373737373636363434343333333232323232323131312F2F2F2D2D2D2C2C2C 2A2A2A2828282525252222222121211E1E1E0B0909050101050101050101050101050101050101 0200007D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0202020000000000000000000000000000000000000000000404042929292D2D2D2F2F2F313131 3232323333333535353838383939393A3A3A3C3C3C3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F404040 414141414141414141414141414141424242424242424242434343434343434343434343424242 4242424141414141414141414242424242424242424141414040404040403F3F3F3F3F3F3F3F3F 3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939 3838383838383636363535353535353434343333333333333232323232323131313030302F2F2F 2E2E2E2C2C2C2A2A2A2929292929292727272626262424242424242222221F1F1F1D1D1D090909 0000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000010101 1313132626262727272929292C2C2C2D2D2D303030313131323232353535363636383838383838 3939393B3B3B3C3C3C3D3D3D3F3F3F3E3E3E404040414141414141424242434343444444454545 454545454545464646464646464646474747484848484848484848494949494949494949494949 494949494949484848484848494949494949494949494949494949494949484848484848474747 4747474646464646464545454545454444444444444343434343434242424040403F3F3F3D3D3D 3C3C3C3A3A3A3A3A3A3838383535353434343333333333333030302E2E2E2C2C2C292929272727 2424242323232020201B1B1B030303000000000000000000000000000000000000000000000000 1B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFC7C7C7191919010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000131313868686FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA1C1C1C 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 0000004D4D4DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E9E9E9272727000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C0E0E0E1111111414141818181A1A1A1C1C1C1D1D1D1F1F1F212121242424262626282828 2929292929292B2B2B2E2E2E303030323232323232333333353535363636373737383838393939 3939393939393939393A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B 3B3B3B3B3B3B3B3B3B3A3A3A393939393939373737363636353535343434343434323232313131 2F2F2F2D2D2D2B2B2B2828282525252323232121211F1F1F0B0909050101050101050101050101 0501010501010200007D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0202020000000000000000000000000000000000000000000404042929292D2D2D 2F2F2F3131313232323333333535353737373939393A3A3A3A3A3A3B3B3B3C3C3C3B3B3B3C3C3C 3D3D3D3E3E3E3F3F3F3F3F3F3F3F3F404040404040404040404040404040414141414141414141 4141414141414040404040404040403F3F3F4040404040403F3F3F3F3F3F3F3F3F3F3F3F3E3E3E 3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939383838 373737373737363636363636343434333333333333333333323232313131313131303030303030 2F2F2F2E2E2E2C2C2C2A2A2A2929292727272727272525252424242525252323231F1F1F1E1E1E 1C1C1C0909090000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000 0000000101011212122525252727272929292B2B2B2E2E2E303030303030313131343434363636 3636363737373838383A3A3A3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F404040414141414141424242 434343444444444444454545454545454545454545464646464646474747474747484848484848 484848484848484848484848484848484848494949494949494949494949484848484848484848 484848474747474747464646454545454545444444444444444444444444434343424242404040 3F3F3F3D3D3D3C3C3C3C3C3C3A3A3A3838383535353434343333333333333030302E2E2E2C2C2C 2A2A2A2727272525252323232020201B1B1B030303000000000000000000000000000000000000 0000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD9D9D9161616000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000101010959595 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A1A1A1000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000B1B1B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEFEFEF303030000000000000000000000000000000000000000000000000000000000000 020202020202010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606060606 0909090C0C0C1010101313131414141818181B1B1B1D1D1D1F1F1F212121222222242424272727 2929292B2B2B2C2C2C2D2D2D2E2E2E3131313232323535353535353636363737373838383A3A3A 3A3A3A3B3B3B3C3C3C3B3B3B3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3E3E3E 3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3A3A3A393939373737363636363636353535 3333333131312F2F2F2D2D2D2C2C2C2929292626262323232121211F1F1F0B0909050101050101 0501010501010501010501010200007C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000040404 2828282E2E2E2F2F2F3232323232323434343636363737373939393A3A3A3A3A3A3A3A3A3A3A3A 3B3B3B3C3C3C3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E 3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D 3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737 3636363636363535353535353333333333333232323232323131313030303030302F2F2F2E2E2E 2D2D2D2D2D2D2D2D2D2B2B2B2A2A2A292929272727252525242424252525242424232323212121 1E1E1E1C1C1C1A1A1A0909090000000000000000000000000000000000000000000000000C0C0C F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000 0000000000000000000101011212122525252727272929292B2B2B2C2C2C2E2E2E2F2F2F313131 3333333535353535353636363737373939393A3A3A3B3B3B3D3D3D3D3D3D3F3F3F404040404040 414141414141434343434343434343444444444444444444454545454545464646464646474747 474747484848484848484848484848484848484848484848494949494949494949494949484848 484848484848474747474747464646464646454545454545444444444444444444434343434343 4242424040403F3F3F3D3D3D3C3C3C3B3B3B3B3B3B383838353535343434333333333333303030 2E2E2E2C2C2C2A2A2A2727272525252323232121211B1B1B030303000000000000000000000000 0000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE272727000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000151515DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF313131000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000181818FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF5F5F53B3B3B000000000000000000000000000000000000000000000000000000 000000010101020202020202020202020202020202020202020202020202010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C0E0E0E1010101414141616161919191B1B1B1E1E1E202020222222242424272727 2929292B2B2B2C2C2C2D2D2D2F2F2F323232333333353535353535373737373737383838393939 3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F3F3F3F4040403F3F3F404040414141414141414141404040 4040404040404040404040404040404040403F3F3F3D3D3D3C3C3C3B3B3B3A3A3A393939383838 3838383737373434343232323030302F2F2F2D2D2D2A2A2A2727272424242121211F1F1F0B0909 0501010501010501010501010501010501010200007C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000 0000000404042626262C2C2C2D2D2D313131323232333333343434363636373737383838393939 3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3C3C3C 3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3C3C3C3B3B3B3B3B3B3B3B3B 3C3C3C3C3C3C3B3B3B3A3A3A393939383838383838373737373737363636363636363636353535 3434343434343434343333333232323232323232323131313131313030302F2F2F2F2F2F2D2D2D 2D2D2D2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A282828262626252525252525252525232323232323 2121211F1F1F1D1D1D1C1C1C1A1A1A090909000000000000000000000000000000000000000000 0000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000 0000000000000000000000000000000101011111112222222626262828282A2A2A2B2B2B2D2D2D 2F2F2F3030303232323333333535353535353636363838383939393A3A3A3B3B3B3C3C3C3D3D3D 3E3E3E3F3F3F3E3E3E404040414141424242424242424242424242434343444444454545454545 464646464646464646454545454545464646464646474747484848484848484848484848484848 474747474747474747474747474747464646454545454545454545454545454545444444444444 4343434242424141414040403F3F3F3E3E3E3D3D3D3C3C3C3B3B3B393939363636353535343434 3232323131312F2F2F2D2D2D2B2B2B2828282525252424242222221C1C1C030303000000000000 0000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9A9A90F0F0F000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000101014D4D4DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFBDBDBD000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 0000000000000000000000000000000000007A7A7AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9474747000000000000000000000000000000000000000000000000 000000000000020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0606060909090E0E0E1010101111111414141818181A1A1A1C1C1C1F1F1F222222242424252525 2727272929292C2C2C2E2E2E2F2F2F3030303232323434343636363838383838383A3A3A3A3A3A 3B3B3B3C3C3C3E3E3E3F3F3F404040404040414141414141424242424242424242434343434343 4343434141414141414141414141414141414040404040404040403E3E3E3D3D3D3C3C3C3B3B3B 3A3A3A3939393838383737373434343232323030302F2F2F2D2D2D2A2A2A272727252525212121 1F1F1F0B09090501010501010501010501010501010501010200007C7C7CFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000 0000000000000000000404042525252B2B2B2E2E2E2F2F2F303030313131323232343434353535 3636363838383939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A 3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A393939383838383838383838373737373737363636343434343434333333 3232323232323232323232323131313030303131313030303030303030302F2F2F2E2E2E2E2E2E 2D2D2D2B2B2B2B2B2B2A2A2A2A2A2A292929282828272727262626252525252525242424232323 2323232222222020201E1E1E1D1D1D1A1A1A191919090909000000000000000000000000000000 0000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464 000000000000000000000000000000000000000000010101111111232323252525272727292929 2929292C2C2C2E2E2E3030303030303131313333333535353636363535353737373939393A3A3A 3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F3F3F3F404040414141414141414141414141424242 434343444444444444454545454545454545454545464646464646474747474747474747484848 484848484848484848474747474747474747474747464646454545454545454545454545444444 4444444444444343434242424141414040403F3F3F3E3E3E3D3D3D3C3C3C3B3B3B393939373737 3535353434343232323131312F2F2F2D2D2D2A2A2A2828282525252323232222221C1C1C030303 0000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000171717F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C4C000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000010101DBDBDBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFC535353000000000000000000000000000000000000000000 000000000000000000010101020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C0E0E0E1111111515151616161A1A1A1C1C1C1F1F1F222222242424262626 2828282929292B2B2B2E2E2E3030303232323232323434343636363838383A3A3A3B3B3B3C3C3C 3E3E3E3E3E3E3F3F3F404040414141424242434343434343444444444444444444444444454545 4444444545454545454343434343434242424242424242424141414141414040403F3F3F3E3E3E 3E3E3E3D3D3D3B3B3B3A3A3A3939393838383535353333333131312F2F2F2D2D2D2B2B2B282828 2525252121212020200B09090501010501010501010501010501010501010200007C7C7CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000 0000000000000000000000000000000303032525252929292C2C2C2D2D2D2F2F2F2F2F2F313131 323232333333333333353535373737373737383838383838383838383838393939393939393939 3939393939393939393939393A3A3A3A3A3A3A3A3A393939383838383838383838373737373737 373737373737373737373737363636363636353535353535343434333333333333333333323232 3131313131313030303030302F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2B2B2B2B2B2B292929282828272727262626252525252525242424232323232323232323 2222222222222020201F1F1F1E1E1E1D1D1D1B1B1B191919171717080808000000000000000000 0000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF646464000000000000000000000000000000000000000000010101101010222222252525 2626262727272727272929292C2C2C2E2E2E2F2F2F2F2F2F313131323232333333343434353535 3636363838383838383939393A3A3A3B3B3B3B3B3B3D3D3D3E3E3E3F3F3F3E3E3E3E3E3E3F3F3F 3F3F3F404040414141424242424242434343434343444444444444454545454545464646464646 464646474747474747474747474747474747464646464646464646454545454545454545454545 4444444444444444444444444343434242424141414040403F3F3F3E3E3E3D3D3D3C3C3C3B3B3B 3939393737373535353434343333333131312F2F2F2D2D2D2A2A2A282828252525232323212121 1C1C1C0303030000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF191919000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000131313C6C6C6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDB020202000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000424242FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD5B5B5B000000000000000000000000000000000000 000000000000000000000000010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060C0C0C0E0E0E1111111414141616161A1A1A1C1C1C1E1E1E212121242424262626 2828282A2A2A2C2C2C2D2D2D2F2F2F3232323333333535353636363737373939393B3B3B3D3D3D 3E3E3E3F3F3F404040414141414141424242434343444444444444454545454545454545464646 464646464646464646474747454545454545454545444444434343434343424242424242424242 4141414040403F3F3F3E3E3E3C3C3C3B3B3B3A3A3A3939393535353333333131313030302E2E2E 2C2C2C2828282525252222222020200B0909050101050101050101050101050101050101020000 7B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202 0000000000000000000000000000000000000000000303032525252929292C2C2C2D2D2D2E2E2E 2D2D2D2F2F2F2F2F2F313131313131333333343434343434343434343434343434353535353535 353535353535353535363636363636363636363636363636363636363636363636353535353535 3434343434343333333333333333333333333232323232323131313131313131313030302E2E2E 2E2E2E2F2F2F2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A292929292929282828 282828282828282828272727262626262626252525242424242424232323232323222222202020 2020201F1F1F1E1E1E1E1E1E1D1D1D1D1D1D1B1B1B1A1A1A181818181818161616080808000000 0000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF6464640000000000000000000000000000000000000000000101010F0F0F 2121212323232525252727272727272929292B2B2B2C2C2C2E2E2E2F2F2F303030313131323232 3333333434343636363636363737373838383838383939393A3A3A3B3B3B3C3C3C3D3D3D3E3E3E 3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141424242424242434343434343444444 454545454545454545464646464646464646464646464646464646464646454545454545444444 4444444444444444444343434343434343434242424141414040403F3F3F3E3E3E3D3D3D3C3C3C 3C3C3C3B3B3B3939393636363535353434343333333131312F2F2F2D2D2D2A2A2A272727252525 2323232121211B1B1B0303030000000000000000000000000000000000000000000000001B1B1B FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 171717000000000000000000000000000000000000000000010101020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303020202020202020202020202020202020202010101010101 010101000000000000000000000000000000000000000000000000000000080808AAAAAAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF747474000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000A1A1A1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF707070000000000000000000000000000000 000000000000000000000000000000010101020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060606060909091010101313131515151818181B1B1B1D1D1D1F1F1F222222252525 2727272929292B2B2B2E2E2E3030303030303232323535353737373838383939393A3A3A3C3C3C 3D3D3D3F3F3F404040414141434343434343434343444444454545464646464646464646474747 474747474747474747474747474747474747474747474747464646464646454545444444434343 4343434343434242424141414040403E3E3E3D3D3D3B3B3B3A3A3A393939363636343434313131 3030302F2F2F2C2C2C2828282626262323232020200B0909050101050101050101050101050101 0501010200007B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0202020000000000000000000000000000000000000000000303032424242929292B2B2B 2C2C2C2D2D2D2E2E2E2E2E2E303030303030303030323232323232323232323232323232323232 323232323232323232323232323232333333333333333333333333343434333333333333323232 3232323232323232323131313131313131313131313131312F2F2F2E2E2E2F2F2F2F2F2F2E2E2E 2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2A2A2A2A2A2A292929282828282828272727272727272727 262626252525252525252525252525242424242424232323232323212121212121202020202020 1F1F1F1F1F1F1E1E1E1D1D1D1B1B1B1B1B1B1A1A1A1A1A1A181818181818161616161616131313 0606060000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000 0101010E0E0E1F1F1F2121212323232525252727272828282929292B2B2B2D2D2D2E2E2E2F2F2F 2F2F2F3131313232323333333434343636363535353636363737373838383838383A3A3A3B3B3B 3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3F3F3F3E3E3E3F3F3F404040404040404040404040414141 414141424242424242434343434343444444444444444444444444444444444444444444444444 4343434343434343434343434242424242424242424242424141414040404040403F3F3F3D3D3D 3C3C3C3B3B3B3B3B3B3A3A3A3838383636363535353434343333333030302E2E2E2C2C2C2A2A2A 2727272525252323232121211B1B1B030303000000000000000000000000000000000000000000 0000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEBEBEB181818000000000000000000000000000000000000000000040404141414181818 1818181D1D1D1E1E1E1E1E1E202020222222222222242424242424242424242424242424242424 2424242424242424242424242222222222222020201E1E1E1D1D1D1A1A1A1A1A1A171717141414 141414121212090909010101000000000000000000000000000000000000000000000000010101 9D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8151515000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010000000000000000000000000000000000000000000000000B0B0B F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000 000000000000000000000000000000000000010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C1010101414141616161919191C1C1C1E1E1E212121232323 2626262929292B2B2B2D2D2D2F2F2F3131313232323333333535353737373939393B3B3B3C3C3C 3D3D3D3E3E3E3F3F3F414141424242434343454545454545454545464646474747474747484848 484848494949494949494949494949494949494949494949494949494949494949474747464646 4545454545454444444343434242424242424040403F3F3F3D3D3D3C3C3C3B3B3B393939363636 3434343232323131312F2F2F2D2D2D2929292626262323232020200C0A0A050101050101050101 0501010501010501010200007B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000030303242424 2828282929292B2B2B2C2C2C2C2C2C2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030 3030303030303131313131313131313131313131313030303030303030302F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2F2F2F2E2E2E2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C 2B2B2B2A2A2A282828282828272727272727272727272727262626262626252525242424242424 2323232121212121212121212121212020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E 1E1E1E1E1E1E1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1A1A1A181818181818161616161616161616 1313131313130606060000000000000000000000000000000000000000000000000C0C0CF2F2F2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000 0000000000000101010D0D0D1C1C1C1F1F1F2121212323232424242626262828282A2A2A2B2B2B 2C2C2C2D2D2D2E2E2E2E2E2E303030313131323232333333343434353535363636363636363636 3737373838383939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F3E3E3E3F3F3F 3E3E3E3E3E3E3F3F3F404040404040404040414141424242424242424242424242424242424242 4242424242424343434242424242424141414141414040404040404040404040403F3F3F3F3F3F 3D3D3D3C3C3C3B3B3B3A3A3A3A3A3A3A3A3A3838383636363434343333333232323030302E2E2E 2C2C2C2A2A2A2727272525252323232020201B1B1B030303000000000000000000000000000000 0000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000000000000000000000000000050505 1D1D1D2121212121212727272828282828282A2A2A2D2D2D2D2D2D2F2F2F313131313131313131 3131313131313131313131313131312F2F2F2D2D2D2D2D2D2A2A2A282828262626242424242424 2020201D1D1D191919191919101010010101000000000000000000000000000000000000000000 0000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3A3A3000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 0000005F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF898989000000000000000000 000000000000000000000000000000000000000000010101020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060606060C0C0C1010101313131515151818181A1A1A1C1C1C1F1F1F222222 2424242727272929292C2C2C2F2F2F3030303232323434343636363737373838383A3A3A3C3C3C 3E3E3E3E3E3E3F3F3F414141424242434343444444454545484848484848484848484848494949 4949494A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A 4949494747474646464545454545454444444343434242424040403F3F3F3D3D3D3B3B3B3A3A3A 3939393737373535353333333131312F2F2F2D2D2D2A2A2A2727272323232020200C0A0A050101 0501010501010501010501010501010200007B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000 0303032323232727272828282929292929292A2A2A2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929 282828282828282828282828262626262626252525242424232323232323212121212121212121 2121212121212121212020202020201F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B191919191919191919171717171717171717141414131313 131313131313131313111111050505000000000000000000000000000000000000000000000000 0C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000 0000000000000000000000000101010B0B0B1A1A1A1C1C1C1F1F1F202020212121222222252525 2727272828282929292929292B2B2B2C2C2C2D2D2D2E2E2E303030303030313131323232323232 3333333434343535353535353636363737373737373838383838383939393A3A3A3B3B3B3C3C3C 3C3C3C3D3D3D3D3D3D3C3C3C3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F404040404040404040404040 4040404040404040404040404141414141414040404040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F 3E3E3E3D3D3D3C3C3C3B3B3B3A3A3A3939393939393A3A3A383838363636343434333333323232 3030302E2E2E2C2C2C2A2A2A2727272525252323232020201B1B1B030303000000000000000000 0000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000000000000000000000 0000000707072020202525252727272929292B2B2B2A2A2A2D2D2D2F2F2F313131313131313131 3333333333333333333333333333333333333333333333333131312F2F2F2D2D2D2A2A2A282828 2626262626262424242020201D1D1D191919101010010101000000000000000000000000000000 0000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 3B3B3B000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000BEBEBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6A6A6010101000000 000000000000000000000000000000000000000000000000010101020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090C0C0C1010101414141616161919191C1C1C1D1D1D212121 2222222626262828282A2A2A2D2D2D3030303232323333333535353737373838383939393B3B3B 3D3D3D3F3F3F404040414141424242434343444444464646464646474747494949494949494949 4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C 4B4B4B4B4B4B4A4A4A4949494747474646464545454545454343434242424141413F3F3F3D3D3D 3B3B3B3A3A3A3939393737373535353333333131312F2F2F2D2D2D2A2A2A262626232323202020 0C0A0A0501010501010501010501010501010501010200007B7B7BFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000 0000000000000303032121212626262727272727272828282929292929292A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929282828282828282828272727272727262626262626 2626262525252525252424242424242424242121212121212121212020202020201E1E1E1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1A1A1A1A1A1A1A1A1A1A1A1A 181818181818171717171717171717171717171717141414141414141414141414141414121212 121212121212121212111111111111111111050505000000000000000000000000000000000000 0000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000 0000000000000000000000000000000000000101010B0B0B1A1A1A1B1B1B1C1C1C1E1E1E1F1F1F 2020202222222424242626262727272828282828282929292A2A2A2C2C2C2D2D2D2E2E2E2E2E2E 303030303030303030313131323232343434343434353535363636353535363636363636383838 3838383939393A3A3A3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3F3F3F3F3F3F 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F4040404040404040404040403F3F3F3E3E3E3E3E3E 3E3E3E3E3E3E3D3D3D3D3D3D3B3B3B3A3A3A3939393838383838383A3A3A383838363636343434 3333333131312F2F2F2E2E2E2C2C2C2929292727272424242323232020201B1B1B030303000000 0000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000000000 0000000000000000000707072626262727272929292E2E2E2E2E2E303030313131313131333333 353535363636363636363636363636363636363636363636363636363636353535333333313131 2F2F2F2D2D2D2A2A2A2828282626262424242020201D1D1D121212010101000000000000000000 0000000000000000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD5D5D5000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 0000000000000000000000001E1E1EFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEBEBE070707 000000000000000000000000000000000000000000000000000000010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 0101010101010101010101010606060C0C0C0E0E0E1010101414141818181A1A1A1C1C1C212121 2222222626262828282B2B2B2D2D2D2E2E2E3030303333333535353636363737373838383B3B3B 3D3D3D3F3F3F404040414141434343444444444444464646474747484848494949494949494949 4A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D 4D4D4D4C4C4C4C4C4C4B4B4B4A4A4A494949484848474747454545454545434343424242414141 3F3F3F3D3D3D3B3B3B3A3A3A3939393737373535353232323030302E2E2E2C2C2C282828262626 2323232121210B09090501010501010501010501010501010501010200007B7B7BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000 000000000000000000000000020202212121232323242424272727282828282828292929292929 2A2A2A2A2A2A2A2A2A292929292929292929292929292929292929292929292929292929292929 292929282828282828272727272727272727272727262626262626252525252525222222222222 2121212121212121212121212121212020202020202020201D1D1D1D1D1D1B1B1B1B1B1B1B1B1B 191919191919191919191919181818181818181818181818181818151515151515151515151515 151515151515131313131313131313131313131313121212121212121212121212121212121212 1212120D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D030303000000000000000000000000 0000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 6464640000000000000000000000000000000000000000000101010A0A0A1818181A1A1A1B1B1B 1C1C1C1C1C1C1F1F1F202020222222222222242424252525272727272727272727292929292929 2B2B2B2C2C2C2C2C2C2E2E2E2E2E2E2F2F2F303030313131323232323232333333333333343434 3535353535353535353737373838383838383939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3A3A3A393939383838383838363636353535 3434343232323030302F2F2F2D2D2D2C2C2C2B2B2B2929292727272525252323232020201B1B1B 0202020000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000 000000000000000000000000000000080808262626292929292929303030323232323232343434 3535353636363838383838383A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A363636 3636363535353131312F2F2F2D2D2D2D2D2D2A2A2A282828262626202020141414010101000000 0000000000000000000000000000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF6A6A6A000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 0000000000000000000000000000000000007B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2D2D2 0F0F0F000000000000000000000000000000000000000000000000000000010101020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202010101 0101010101010101010101010606060606060C0C0C0E0E0E1111111414141818181B1B1B1C1C1C 2020202424242626262929292B2B2B2E2E2E3030303131313333333636363838383939393A3A3A 3C3C3C3E3E3E3F3F3F4141414343434444444646464646464747474848484949494B4B4B4B4B4B 4C4C4C4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D 4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4B4B4B4B4B4B494949484848474747474747454545434343 4343434141413F3F3F3D3D3D3B3B3B3A3A3A3939393737373434343131312F2F2F2E2E2E2B2B2B 2828282626262323232020200B09090501010501010501010501010501010501010200007B7B7B FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000 0000000000000000000000000000000000000202021F1F1F212121232323262626262626262626 272727272727282828282828282828282828282828282828282828282828282828272727272727 262626262626252525252525232323232323222222222222222222222222212121212121212121 2121211F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B191919161616161616 161616161616161616161616141414141414141414141414141414141414131313131313131313 1313131313130E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D030303000000000000 0000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF646464000000000000000000000000000000000000000000010101090909171717 1818181A1A1A1B1B1B1A1A1A1C1C1C1E1E1E202020212121222222222222242424252525262626 2626262727272828282929292A2A2A2B2B2B2C2C2C2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030 3131313131313232323333333434343434343535353636363636363737373838383838383A3A3A 3939393A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C 3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A393939383838383838373737363636 3636363535353333333232323030302F2F2F2D2D2D2C2C2C2A2A2A292929272727252525232323 1F1F1F1A1A1A0202020000000000000000000000000000000000000000000000001B1B1BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818 0000000000000000000000000000000000000000000808082626262B2B2B2E2E2E323232323232 3434343636363737373A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3A3A3A3838383636363535353333333131312F2F2F2D2D2D2A2A2A282828242424171717 0202020000000000000000000000000000000000000000000000000101019D9D9DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F3F30E0E0E000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000D7D7D7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DEDEDE181818000000000000000000000000000000000000000000000000000000000000020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020101010606060909090C0C0C1010101414141616161919191C1C1C 1F1F1F2121212424242727272929292D2D2D2E2E2E3131313232323434343636363939393B3B3B 3D3D3D3E3E3E3F3F3F4141414343434444444646464747474949494949494A4A4A4B4B4B4C4C4C 4D4D4D4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F 4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4B4B4B4A4A4A494949484848474747 4646464545454343434242424040403E3E3E3C3C3C3A3A3A3939393737373434343131312F2F2F 2D2D2D2B2B2B2828282626262323232020200B0909050101050101050101050101050101050101 0200007A7A7AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0202020000000000000000000000000000000000000000000202021D1D1D212121222222242424 232323232323232323232323242424242424242424242424242424242424232323232323232323 2323232323232323232222222121212121211F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1C1C1C 1C1C1C1C1C1C1C1C1C1A1A1A1A1A1A1A1A1A171717171717171717171717161616161616141414 1414141414141414141414140F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D030303 0000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000000000 0707071414141515151717171717171818181A1A1A1A1A1A1B1B1B1C1C1C1E1E1E1F1F1F212121 2222222222222323232323232525252525252626262727272828282929292A2A2A2B2B2B2B2B2B 2C2C2C2D2D2D2D2D2D2D2D2D2F2F2F303030313131323232313131333333333333343434353535 3535353636363737373737373737373737373838383838383838383939393939393939393A3A3A 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939383838383838373737363636 3535353535353535353434343333333131313030302E2E2E2D2D2D2C2C2C2A2A2A282828252525 2323232323232020201A1A1A020202000000000000000000000000000000000000000000000000 1B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EBEBEB1818180000000000000000000000000000000000000000000808082626262B2B2B303030 3232323434343636363737373939393A3A3A3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3B3B3B3A3A3A3838383636363535353131313131313131312D2D2D282828 2626261919190202020000000000000000000000000000000000000000000000000101019D9D9D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF999999000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000393939FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFECECEC282828000000000000000000000000000000000000000000000000000000000000 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020202020707070A0A0A0D0D0D1010101515151818181A1A1A 1C1C1C2020202222222424242727272A2A2A2D2D2D2F2F2F313131343434353535373737383838 3B3B3B3D3D3D4040404040404242424343434545454747474848484949494B4B4B4B4B4B4B4B4B 4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F505050505050505050505050505050505050 5050505050505050505050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4B4B4B4A4A4A494949 4848484747474747474545454444444242424040403E3E3E3C3C3C3B3B3B393939363636343434 3131312F2F2F2D2D2D2A2A2A2828282525252222221F1F1F0B0909050101050101050101050101 0501010501010200007A7A7AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0202020000000000000000000000000000000000000000000202021C1C1C202020 202020212121212121212121212121212121222222222222222222212121212121202020202020 2020202020201F1F1F1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B181818 171717171717171717171717151515151515151515151515151515151515101010101010101010 1010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0303030000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000 0000000000000303031111111111111414141515151515151717171717171818181919191A1A1A 1B1B1B1C1C1C1E1E1E1F1F1F202020212121222222212121222222242424252525262626272727 2727272929292929292929292A2A2A2B2B2B2B2B2B2D2D2D2D2D2D2F2F2F2F2F2F303030303030 313131313131333333333333343434353535353535343434353535353535363636373737373737 373737383838383838383838383838383838383838383838383838393939373737373737363636 3535353535353434343434343333333333333232323131312F2F2F2E2E2E2C2C2C2C2C2C282828 2727272525252424242222221F1F1F1A1A1A020202000000000000000000000000000000000000 0000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEBEBEB181818000000000000000000000000000000000000000000080808282828 2E2E2E3232323232323434343636363737373B3B3B3C3C3C3D3D3D3F3F3F414141414141414141 4141414141414141414141413F3F3F3F3F3F3D3D3D3B3B3B3A3A3A363636353535333333333333 2F2F2F2A2A2A2828281B1B1B020202000000000000000000000000000000000000000000000000 0101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF313131000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000979797FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF6F6F6393939000000000000000000000000000000000000000000000000000000 000000020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020202020202020707070A0A0A0F0F0F1212121515151A1A1A 1D1D1D1D1D1D2020202323232626262828282A2A2A2D2D2D303030323232343434373737383838 3939393B3B3B3D3D3D3F3F3F4242424343434444444545454747474848484949494A4A4A4C4C4C 4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F505050515151515151515151515151515151515151 5252525252525252525151515151515050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4B4B4B 4A4A4A4949494848484747474646464545454444444242423F3F3F3D3D3D3B3B3B3A3A3A393939 3636363333333030302E2E2E2C2C2C2A2A2A2727272525252121211F1F1F0B0909050101050101 050101050101050101050101020000797979FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000020202 1A1A1A1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E202020202020202020202020202020202020202020 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1B1B1B1B1B1B1B1B1B1B1B1B181818181818161616161616 161616161616161616161616161616161616101010101010101010101010101010101010101010 1010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D 0D0D0D0D0D0D0D0D0D0303030000000000000000000000000000000000000000000000000C0C0C F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000 0000000000000000000000000303030E0E0E0E0E0E111111111111141414141414151515151515 1717171616161717171919191A1A1A1B1B1B1C1C1C1E1E1E1E1E1E1F1F1F1F1F1F212121212121 2121212323232424242525252626262727272626262727272828282929292A2A2A2B2B2B2C2C2C 2D2D2D2E2E2E2E2E2E2F2F2F303030303030313131313131323232333333323232333333343434 343434343434353535363636363636363636363636363636363636363636363636373737373737 3535353535353434343434343333333333333232323131313030302F2F2F2E2E2E2C2C2C2B2B2B 2A2A2A2727272525252323232323232121211E1E1E1A1A1A020202000000000000000000000000 0000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000000000000000000000000000 0808082828282E2E2E3232323434343636363737373939393C3C3C3E3E3E404040414141424242 4242424242424242424242424242424242424242424242424141413F3F3F3D3D3D3A3A3A383838 3636363636363333332D2D2D2A2A2A1C1C1C020202000000000000000000000000000000000000 0000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8C8000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000080808 EEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFE585858000000000000000000000000000000000000000000000000 000000000000020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020202020202020707070707070A0A0A0F0F0F141414161616 1A1A1A1D1D1D2121212323232525252727272929292B2B2B2E2E2E303030323232353535373737 3A3A3A3B3B3B3C3C3C3E3E3E4040404242424444444545454646464747474949494A4A4A4B4B4B 4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151525252525252525252525252 5252525252525252525252525252525252525151515050504F4F4F4F4F4F4E4E4E4D4D4D4C4C4C 4C4C4C4B4B4B4A4A4A4949494848484747474646464444444343434141413F3F3F3D3D3D3B3B3B 3939393838383535353232323030302D2D2D2C2C2C2929292626262323232121211E1E1E0B0909 0501010501010501010501010501010501010200007A7A7AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000 0000000101011616161A1A1A1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C191919191919191919191919171717171717171717171717171717111111 111111111111111111111111111111111111111111111111111111111111111111111111101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 1010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D030303000000000000000000000000000000000000000000 0000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000 0000000000000000000000000000000000000000000909090909090E0E0E0E0E0E0E0E0E0E0E0E 1111111111111111111111111414141414141616161616161717171919191A1A1A1A1A1A1B1B1B 1C1C1C1D1D1D1E1E1E1F1F1F202020212121212121222222232323242424242424252525262626 2727272828282A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2E2E2E2F2F2F2F2F2F303030 2F2F2F303030313131323232323232333333333333333333333333333333333333333333333333 3434343434343434343333333232323232323232323131312F2F2F2F2F2F2E2E2E2D2D2D2C2C2C 2A2A2A2A2A2A2929292626262525252424242222222020201E1E1E191919020202000000000000 0000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000000000000000 0000000000000808082A2A2A3030303232323636363737373939393C3C3C3E3E3E404040424242 4343434545454545454545454545454545454545454545454545454545454242424141413F3F3F 3D3D3D3A3A3A3A3A3A3838383535353131312D2D2D1E1E1E020202000000000000000000000000 0000000000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF757575000000000000000000000000000000000000000000 000000000000000000020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020202020202020202020707070707070D0D0D111111141414 1717171B1B1B1E1E1E2222222525252727272929292C2C2C2E2E2E303030313131343434363636 3939393B3B3B3D3D3D3E3E3E3F3F3F4040404343434444444747474747474848484949494B4B4B 4C4C4C4D4D4D4E4E4E505050505050505050505050515151525252525252525252535353535353 5252525252525252525252525252525252525252525252525151515050504F4F4F4E4E4E4D4D4D 4D4D4D4C4C4C4B4B4B4B4B4B4949494848484747474646464646464343434242424141413F3F3F 3D3D3D3B3B3B3939393737373434343232322F2F2F2D2D2D2C2C2C282828262626232323212121 1E1E1E0B0909050101050101050101050101050101050101020000797979FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000 0000000000000000000101011616161A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A181818171717171717171717171717171717171717171717121212121212121212 121212121212121212121212121212121212111111111111111111111111111111111111111111 111111111111111111111111111111101010101010101010101010101010101010101010101010 1010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E030303000000000000000000000000000000 0000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464 0000000000000000000000000000000000000000000000000000000909090A0A0A0A0A0A090909 0909090909090909090E0E0E0E0E0E0E0E0E0E0E0E111111101010131313131313141414141414 1616161717171717171919191919191919191A1A1A1B1B1B1D1D1D1E1E1E1F1F1F202020212121 2020202222222323232323232525252626262626262828282828282828282929292929292A2A2A 2B2B2B2C2C2C2C2C2C2E2E2E2D2D2D2E2E2E2F2F2F303030303030303030303030303030303030 3030303030303131313131313131313030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2D2D2D2C2C2C 2C2C2C2A2A2A2929292828282828282525252323232323232121212020201E1E1E191919020202 0000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000 0000000000000000000000000808082A2A2A3030303434343737373939393B3B3B3E3E3E404040 424242434343454545464646454545454545454545454545454545454545464646464646454545 4242424141413F3F3F3B3B3B3A3A3A3838383636363131312D2D2D1E1E1E020202000000000000 0000000000000000000000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF 0A0A0A000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000B1B1B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C9C9C000000000000000000000000000000000000 000000000000000000000000010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020202020202020202020202020707070A0A0A0A0A0A111111 1414141919191C1C1C1E1E1E2222222525252828282A2A2A2C2C2C2F2F2F313131333333343434 3737373939393C3C3C3D3D3D3F3F3F4141414242424343434545454747474949494949494A4A4A 4B4B4B4D4D4D4E4E4E4F4F4F4F4F4F515151525252525252525252525252535353535353545454 5353535353535353535353535353535252525252525252525252525252525151515050504F4F4F 4E4E4E4E4E4E4D4D4D4C4C4C4B4B4B4A4A4A494949484848464646454545454545434343424242 4040403E3E3E3C3C3C3A3A3A3939393636363434343131312F2F2F2D2D2D2B2B2B282828262626 2323232020201D1D1D0B0909050101050101050101050101050101050101020000797979FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000 000000000000000000000000000000010101141414181818181818181818181818181818181818 181818181818181818131313131313131313131313131313131313131313131313121212121212 121212121212121212121212121212121212121212121212121212121212121212121212111111 111111111111111111111111111111111111111111111111111111111111111111101010101010 1010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E030303000000000000000000 0000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF6464640000000000000000000000000000000000000000000000000000000909090A0A0A 0A0A0A0A0A0A0A0A0A0909090909090909090909090909090909090E0E0E0E0E0E0E0E0E101010 1010101313131313131313131414141414141616161717171818181818181919191A1A1A1B1B1B 1B1B1B1D1D1D1F1F1F1F1F1F202020202020212121232323232323242424252525262626252525 2626262727272727272929292A2A2A2A2A2A2C2C2C2B2B2B2B2B2B2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C 2C2C2C2B2B2B2A2A2A2929292828282828282727272424242424242222222121211F1F1F1E1E1E 1919190202020000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000 0000000000000000000000000000000000000808082D2D2D3232323636363939393B3B3B3C3C3C 3E3E3E404040434343454545464646474747474747464646464646464646464646464646464646 4646464545454242424141413F3F3F3D3D3D3B3B3B3838383636363131312D2D2D1E1E1E020202 0000000000000000000000000000000000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF8F8F8F000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000111111F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF060606000000000000000000000000 000000000000000000000000000000010101020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020202020202020202020202020202020707070A0A0A0F0F0F 1111111515151919191C1C1C1F1F1F2222222525252929292C2C2C2C2C2C2E2E2E313131323232 3535353737373A3A3A3C3C3C3E3E3E3F3F3F4040404242424444444646464848484949494A4A4A 4B4B4B4C4C4C4D4D4D4F4F4F505050505050515151525252535353535353545454545454545454 555555555555545454545454545454545454545454535353535353535353525252525252515151 5050505050504F4F4F4F4F4F4E4E4E4C4C4C4B4B4B4A4A4A484848464646454545444444434343 4343434141413E3E3E3D3D3D3C3C3C3A3A3A3737373535353333333131312E2E2E2C2C2C2A2A2A 2727272525252121211E1E1E1B1B1B0B0909050101050101050101050101050101050101020000 797979FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202 000000000000000000000000000000000000000000000000151515191919191919191919191919 141414131313131313131313131313131313131313131313131313131313131313131313131313 131313131313131313131313131313121212121212121212121212121212121212121212121212 121212121212121212121212121212111111111111111111111111111111111111111111111111 111111111111111111101010101010101010101010101010101010101010101010101010101010 1010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E030303000000 0000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000000000000000 0909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909 0909090909090D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D101010131313141414141414151515 1515151515151616161818181919191A1A1A1B1B1B1C1C1C1D1D1D1E1E1E1F1F1F202020202020 222222232323232323242424252525252525252525272727272727272727272727292929292929 2929292A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A 2A2A2A2A2A2A2A2A2A2929292828282727272626262525252525252323232323232121211F1F1F 1D1D1D1B1B1B1616160202020000000000000000000000000000000000000000000000001B1B1B FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB 1818180000000000000000000000000000000000000000000808082D2D2D3232323636363B3B3B 3B3B3B3C3C3C404040424242434343464646464646474747474747474747464646464646464646 4646464646464646464545454242424141413F3F3F3D3D3D3B3B3B3A3A3A3636363131312D2D2D 1E1E1E0202020000000000000000000000000000000000000000000000000101019D9D9DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000656565FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5D5D5101010000000000000000000 000000000000000000000000000000000000010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020202020202020202020202020202020202020707070A0A0A 0D0D0D1212121515151919191C1C1C1F1F1F2222222525252828282C2C2C2E2E2E2F2F2F313131 3333333535353737373A3A3A3C3C3C3F3F3F4141414141414343434545454747474949494B4B4B 4B4B4B4C4C4C4C4C4C4D4D4D4F4F4F505050515151525252525252545454545454545454545454 555555555555555555555555555555545454545454545454545454545454545454535353525252 5252525151515050505050504F4F4F4F4F4F4E4E4E4C4C4C4B4B4B494949484848464646454545 4444444343434141413F3F3F3D3D3D3B3B3B3A3A3A3838383636363434343232322F2F2F2C2C2C 2A2A2A2828282626262323232121211E1E1E1B1B1B0A0808050101050101050101050101050101 050101020000797979FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF020202000000000000000000000000000000000000000000000000101010141414141414 141414141414141414141414141414141414141414141414141414141414131313131313131313 131313131313131313131313131313131313131313131313131313131313131313131313121212 121212121212121212121212121212121212121212121212121212121212121212111111111111 111111111111111111111111111111111111111111111111101010101010101010101010101010 1010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0303030000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000 0000000000000909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909 0909090909090909090909090909090909090808080808080808080D0D0D0D0D0D0D0D0D101010 1010101010101212121212121414141414141515151616161818181919191818181919191A1A1A 1C1C1C1E1E1E1F1F1F202020202020212121212121222222232323242424252525252525252525 262626262626262626272727282828282828282828292929292929292929292929292929292929 292929292929292929282828272727272727252525252525232323232323242424222222222222 2020201E1E1E1D1D1D1A1A1A161616020202000000000000000000000000000000000000000000 0000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEBEBEB1818180000000000000000000000000000000000000000000808082D2D2D323232 3636363B3B3B3B3B3B3E3E3E404040424242434343464646474747474747474747474747474747 4646464646464646464646464545454545454242424141413F3F3F3F3F3F3D3D3D3B3B3B383838 353535313131202020020202000000000000000000000000000000000000000000000000010101 9D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFBEBEBE000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000BEBEBEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEA232323000000000000 000000000000000000000000000000000000000000010101020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202070707070707 0A0A0A0F0F0F1212121616161B1B1B1D1D1D1F1F1F2323232525252828282B2B2B2F2F2F313131 3333333333333636363838383A3A3A3C3C3C3F3F3F414141444444444444464646484848494949 4B4B4B4D4D4D4E4E4E4E4E4E4E4E4E4F4F4F505050515151525252535353545454555555555555 555555555555555555565656565656565656555555555555555555555555545454545454545454 5454545252525252525151515050505050504F4F4F4E4E4E4D4D4D4B4B4B4A4A4A494949474747 4646464444444343434242424040403E3E3E3B3B3B3A3A3A383838373737343434323232313131 2E2E2E2C2C2C2828282727272525252121211F1F1F1D1D1D1B1B1B0A0808050101050101050101 050101050101050101020000797979FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000000000101010 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414131313131313131313131313131313131313131313131313131313 131313131313131313131313131313121212121212121212121212121212121212121212121212 121212121212121212121212111111111111111111111111111111111111111111111111111111 1010101010101010101010101010101010101010101010101010101010101010101010100F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0E0E0E0E0E0E0303030000000000000000000000000000000000000000000000000C0C0CF2F2F2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000 0000000000000000000000000909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 090909090909090909090909090909090909090909090909090909080808080808080808080808 0808080808080808080D0D0D0D0D0D0C0C0C0C0C0C0F0F0F0F0F0F121212141414141414151515 1515151515151616161818181919191A1A1A1C1C1C1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F202020 212121212121232323242424232323232323242424242424252525252525262626262626262626 262626262626262626262626262626262626252525232323232323232323232323222222222222 2121212020201F1F1F1E1E1E1C1C1C1A1A1A151515020202000000000000000000000000000000 0000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000000000000000000000000000080808 2D2D2D3232323636363B3B3B3B3B3B3C3C3C404040424242434343464646464646494949494949 4949494949494949494848484848484848484646464545454444444242424141413F3F3F3D3D3D 3B3B3B383838353535313131202020020202000000000000000000000000000000000000000000 0000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF575757000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010000000000000000000000000000000000000000000000001A1A1AFCFCFCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7373737000000 000000000000000000000000000000000000000000000000010101020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202070707 0707070A0A0A0F0F0F1212121616161B1B1B1D1D1D2020202222222525252929292B2B2B2E2E2E 3131313232323434343636363939393B3B3B3C3C3C3F3F3F414141434343464646474747484848 4949494B4B4B4D4D4D4F4F4F4F4F4F505050505050515151525252535353545454545454555555 565656565656565656565656565656565656575757565656565656565656555555555555545454 5454545454545454545252525252525151515050504F4F4F4E4E4E4D4D4D4C4C4C4A4A4A494949 4848484646464444444343434242424141413F3F3F3D3D3D3A3A3A383838373737353535333333 3131313030302D2D2D2B2B2B2929292626262323232020201E1E1E1B1B1B191919090707050101 050101050101050101050101050101020000787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000 000000111111151515151515151515151515151515141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414131313 131313131313131313131313131313131313131313131313131313131313131313121212121212 121212121212121212121212121212121212121212121212121212111111111111111111111111 111111111111111111111111111111101010101010101010101010101010101010101010101010 1010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F030303000000000000000000000000000000000000000000000000 0C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000 0000000000000000000000000000000000000A0A0A0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909090909090909 0808080808080808080808080808080808080808080808080707070707070C0C0C0C0C0C0C0C0C 0F0F0F0F0F0F0F0F0F1212121313131313131515151616161717171818181919191A1A1A1B1B1B 1B1B1B1D1D1D1D1D1D1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020212121222222222222232323 232323232323242424242424242424242424242424242424242424232323232323222222212121 2020202020201E1E1E1E1E1E1E1E1E1C1C1C1A1A1A181818141414020202000000000000000000 0000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000000000000000000000 0000000808082D2D2D3232323636363939393B3B3B3C3C3C404040424242434343464646474747 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949464646464646454545424242414141 3F3F3F3F3F3F3D3D3D383838353535313131202020020202000000000000000000000000000000 0000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED070707000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000717171FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B5B5B 000000000000000000000000000000000000000000000000000000000000020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020707070A0A0A0F0F0F1212121515151919191D1D1D2121212323232525252929292C2C2C 2E2E2E3131313232323535353737373939393B3B3B3D3D3D3F3F3F404040434343454545484848 4848484949494B4B4B4D4D4D4E4E4E4F4F4F505050525252525252525252535353545454555555 555555555555575757575757575757575757575757575757565656565656565656565656555555 5555555454545454545353535353535252525151515050504F4F4F4E4E4E4D4D4D4C4C4C4B4B4B 4848484848484646464444444343434141414040403F3F3F3E3E3E3C3C3C393939373737363636 3434343232323030302F2F2F2D2D2D2929292727272626262222221F1F1F1C1C1C1A1A1A171717 090707050101050101050101050101050101050101020000787878FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000 000000000000000000111111151515151515151515151515151515151515151515151515151515 151515151515151515141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414131313131313131313131313131313131313131313131313 131313131313131313131313121212121212121212121212121212121212121212121212121212 121212111111111111111111111111111111111111111111111111111111101010101010101010 1010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F030303000000000000000000000000000000000000 0000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000 0000000000000000000000000000000000000000000000000A0A0A0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909 090909090909090909080808080808080808080808080808080808080808080808080808070707 0707070707070707070C0C0C0C0C0C0C0C0C0F0F0F0E0E0E111111131313131313151515161616 1616161717171818181818181919191919191B1B1B1B1B1B1C1C1C1D1D1D1D1D1D1E1E1E1E1E1E 1F1F1F202020202020202020212121212121222222222222222222212121212121212121202020 2020201F1F1F1F1F1F1E1E1E1D1D1D1D1D1D1C1C1C1B1B1B181818171717141414020202000000 0000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000000000 0000000000000000000808082A2A2A3232323434343939393B3B3B3C3C3C3E3E3E404040434343 4545454646464A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949464646464646454545 4242424141413F3F3F3F3F3F3D3D3D383838353535313131202020020202000000000000000000 0000000000000000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF929292000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 878787000000000000000000000000000000000000000000000000000000000000020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020707070A0A0A0F0F0F1212121616161A1A1A1D1D1D212121232323272727292929 2C2C2C2F2F2F3131313232323636363838383A3A3A3C3C3C3E3E3E404040414141434343464646 4848484949494A4A4A4B4B4B4D4D4D4E4E4E4F4F4F505050515151535353535353545454545454 555555555555565656565656575757575757575757575757575757565656565656565656565656 5656565555555555555454545353535252525252525151515050504F4F4F4E4E4E4D4D4D4B4B4B 4A4A4A4949494747474646464444444343434141414040403F3F3F3E3E3E3C3C3C393939373737 3535353434343232323030302E2E2E2D2D2D2A2A2A2727272525252323232121211D1D1D1B1B1B 171717141414080606050101050101050101050101050101050101020000787878FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000 000000000000000000000000000000111111151515151515151515151515151515151515151515 151515151515151515151515151515151515151515151515151515151515151515141414141414 141414141414141414141414141414141414141414141414141414141414141414131313131313 131313131313131313131313131313131313131313131313131313131313121212121212121212 121212121212121212121212121212121212111111111111111111111111111111111111111111 111111111111101010101010101010101010101010101010101010101010101010101010101010 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F030303000000000000000000000000 0000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 6464640000000000000000000000000000000000000000000000000000000A0A0A0B0B0B0B0B0B 0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909090909090909090909080808080808080808080808080808080808 0808080808080707070707070707070707070707070707070C0C0C0C0C0C0B0B0B0B0B0B0E0E0E 0E0E0E0E0E0E111111131313131313141414151515151515171717171717181818181818191919 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1C1C1C1B1B1B1A1A1A181818171717161616141414 0202020000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000 0000000000000000000000000000000808082A2A2A3030303434343939393939393B3B3B3E3E3E 404040424242434343464646494949494949494949494949494949494949494949484848464646 4545454545454242424141413F3F3F3F3F3F3D3D3D383838353535313131202020020202000000 0000000000000000000000000000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF333333000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000232323FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFB7B7B7030303000000000000000000000000000000000000000000000000000000020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020707070A0A0A0F0F0F1212121616161B1B1B1D1D1D202020232323262626 2A2A2A2D2D2D3030303232323333333535353838383B3B3B3D3D3D3F3F3F414141434343444444 4646464848484A4A4A4C4C4C4C4C4C4D4D4D4F4F4F505050515151525252535353545454545454 545454555555555555555555565656565656575757575757575757575757565656565656555555 5555555656565656565555555454545353535252525252525151515050504F4F4F4E4E4E4D4D4D 4B4B4B4A4A4A4949494848484545454444444343434141414040403E3E3E3D3D3D3C3C3C393939 3737373434343232323232323030302D2D2D2B2B2B2929292727272424242222222121211E1E1E 1C1C1C181818151515131313080606050101050101050101050101050101050101020000787878 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000 000000000000000000000000000000000000000000121212161616161616161616161616161616 161616151515151515151515151515151515151515151515151515151515151515151515151515 151515151515151515151515151515141414141414141414141414141414141414141414141414 141414141414141414141414131313131313131313131313131313131313131313131313131313 131313131313121212121212121212121212121212121212121212121212121212111111111111 111111111111111111111111111111111111111111101010101010101010101010101010101010 1010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F030303000000000000 0000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF6464640000000000000000000000000000000000000000000000000000000A0A0A 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A090909090909090909090909090909090909090909090909090909080808080808080808 080808080808080808080808080808080808070707070707070707070707070707070707070707 0707070606060B0B0B0B0B0B0B0B0B0E0E0E0E0E0E111111111111121212121212121212121212 1414141515151717171717171717171818181818181919191919191B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A181818171717 1515151212120202020000000000000000000000000000000000000000000000001B1B1BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818 0000000000000000000000000000000000000000000808082A2A2A303030343434373737393939 3B3B3B3C3C3C404040424242434343454545474747474747474747474747474747474747474747 4747474545454545454242424141413F3F3F3D3D3D3D3D3D3B3B3B383838353535313131202020 0202020000000000000000000000000000000000000000000000000101019D9D9DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4D4D4 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 0000000000000000007E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD6D6D60F0F0F000000000000000000000000000000000000000000000000000000 010101020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020707070A0A0A0D0D0D1212121616161A1A1A1D1D1D202020232323 2727272A2A2A2D2D2D2F2F2F3232323434343636363838383B3B3B3D3D3D3F3F3F414141434343 4545454747474848484A4A4A4C4C4C4E4E4E4E4E4E4F4F4F505050525252535353545454545454 545454545454555555555555555555565656565656575757575757575757575757575757565656 5656565555555555555555555555555454545454545252525151515151515050504F4F4F4F4F4F 4D4D4D4C4C4C4A4A4A4949494848484747474444444343434141414040403F3F3F3D3D3D3C3C3C 3A3A3A3737373535353232323131313030302D2D2D2B2B2B292929272727242424222222202020 1E1E1E1C1C1C191919161616151515121212080606050101050101050101050101050101050101 020000787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 020202000000000000000000000000000000000000000000000000121212161616161616161616 161616161616161616161616161616161616161616161616161616161616151515151515151515 151515151515151515151515151515151515151515151515151515151515151515141414141414 141414141414141414141414141414141414141414141414141414141414131313131313131313 131313131313131313131313131313131313131313121212121212121212121212121212121212 121212121212121212111111111111111111111111111111111111111111111111101010101010 1010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F030303 0000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000000000 0000000A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909090909 090909080808080808080808080808080808080808080808080808070707070707070707070707 0707070707070707070707070606060606060606060606060B0B0B0B0B0B0E0E0E0E0E0E0D0D0D 0D0D0D101010101010121212141414151515151515141414161616161616171717171717181818 1818181818181B1B1B1B1B1B1B1B1B1B1B1B191919191919181818181818181818181818171717 171717161616131313111111020202000000000000000000000000000000000000000000000000 1B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EBEBEB1818180000000000000000000000000000000000000000000808082A2A2A303030323232 3737373939393B3B3B3C3C3C404040424242434343434343464646464646464646464646464646 4646464646464646464343434242424141413F3F3F3D3D3D3B3B3B3B3B3B3A3A3A383838353535 3131312020200202020000000000000000000000000000000000000000000000000101019D9D9D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF747474000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEDEDED242424000000000000000000000000000000000000000000000000 000000010101020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020202020707070D0D0D1212121616161919191D1D1D202020 2323232727272A2A2A2E2E2E2F2F2F3131313333333636363838383A3A3A3D3D3D3F3F3F424242 4343434444444646464949494B4B4B4C4C4C4D4D4D505050505050515151525252545454555555 565656565656555555565656565656575757575757575757585858585858585858575757575757 5757575656565656565555555555555454545454545353535252525151515050504F4F4F4F4F4F 4D4D4D4D4D4D4C4C4C4A4A4A4848484747474646464545454343434141413F3F3F3E3E3E3D3D3D 3C3C3C3A3A3A3838383636363333333131312F2F2F2E2E2E2B2B2B292929272727242424222222 1F1F1F1D1D1D1C1C1C1A1A1A161616141414131313111111070505050101050101050101050101 050101050101020000787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF020202000000000000000000000000000000000000000000000000121212161616 161616161616161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616151515151515151515151515151515151515151515151515151515 151515151515151515151515151515141414141414141414141414141414141414141414141414 141414141414141414131313131313131313131313131313131313131313131313131313121212 121212121212121212121212121212121212121212121212111111111111111111111111111111 111111111111111111101010101010101010101010101010101010101010101010101010101010 0F0F0F0303030000000000000000000000000000000000000000000000000C0C0CF2F2F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000 0000000000000000000A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 090909090909090909090909080808080808080808080808080808080808080808080808070707 070707070707070707070707070707070707070707060606060606060606060606060606060606 0606060B0B0B0A0A0A0A0A0A0D0D0D0D0D0D101010121212121212121212131313131313131313 141414141414141414141414171717171717171717171717171717171717171717161616151515 1515151515151515151313131212120F0F0F010101000000000000000000000000000000000000 0000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEBEBEB181818000000000000000000000000000000000000000000080808282828 2E2E2E3232323737373737373B3B3B3C3C3C404040404040424242434343454545454545454545 4545454545454545454545454545454343434242423F3F3F3F3F3F3D3D3D3B3B3B3A3A3A3A3A3A 383838353535313131202020020202000000000000000000000000000000000000000000000000 0101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCCACACAADADAD 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999A0A0A0B6B6B6E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFBFB191919000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000303030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAFA404040000000000000000000000000000000000000000000 000000000000010101030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020202020707070707070D0D0D1111111515151919191D1D1D 2020202323232727272A2A2A2E2E2E3030303232323333333636363838383A3A3A3C3C3C3F3F3F 4141414444444444444646464848484A4A4A4C4C4C4E4E4E4F4F4F505050515151525252535353 545454555555565656575757575757575757575757575757575757585858585858585858585858 585858575757575757565656565656555555555555545454545454535353525252515151505050 4F4F4F4E4E4E4C4C4C4B4B4B4A4A4A4848484646464545454444444343434141413F3F3F3D3D3D 3C3C3C3B3B3B3939393737373535353333333131312F2F2F2D2D2D2B2B2B292929272727242424 2222221F1F1F1C1C1C1B1B1B1A1A1A1616161414141111111010100E0E0E060404050101050101 050101050101050101050101020000777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000000000000000 121212171717171717171717171717171717171717171717161616161616161616161616161616 161616161616161616161616161616161616161616161616161616161616161616151515151515 151515151515151515151515151515151515151515151515151515151515141414141414141414 141414141414141414141414141414141414141414141414131313131313131313131313131313 131313131313131313131313121212121212121212121212121212121212121212121212121212 111111111111111111111111111111111111111111101010101010101010101010101010101010 1010101010101010100404040000000000000000000000000000000000000000000000000C0C0C F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000 0000000000000000000000000000000B0B0B0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909090909090909090909080808080808080808080808080808080808 080808080808070707070707070707070707070707070707070707070707060606060606060606 0606060606060606060606060606060505050A0A0A0A0A0A0A0A0A0D0D0D0D0D0D101010101010 0F0F0F111111111111111111131313131313131313141414141414141414141414141414141414 1414141313131313131313131212121212121010100D0D0D010101000000000000000000000000 0000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000000000000000000000000000 0808082828282F2F2F3030303636363737373737373B3B3B3C3C3C404040404040424242434343 4343434343434343434343434343434343434343434343434343434242423F3F3F3D3D3D3B3B3B 3B3B3B3838383535353333332F2F2F1E1E1E020202000000000000000000000000000000000000 0000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7363636050505 020202010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000040404111111282828ADADADFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFB5B5B5000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000888888FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E6E6E000000000000000000000000000000000000 000000000000000000010101030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020202020202020707070A0A0A0D0D0D111111151515191919 1D1D1D1F1F1F2323232727272A2A2A2D2D2D3131313232323434343636363939393B3B3B3D3D3D 3F3F3F4242424444444646464747474848484A4A4A4C4C4C4E4E4E4F4F4F505050525252525252 535353545454555555565656575757575757585858585858585858585858585858595959595959 595959595959585858575757575757565656565656555555555555545454545454525252515151 5050504F4F4F4E4E4E4D4D4D4B4B4B4A4A4A4848484747474545454343434242424141413F3F3F 3D3D3D3B3B3B3939393838383737373434343232323131312E2E2E2C2C2C292929282828262626 2424242121211F1F1F1C1C1C1A1A1A1818181616161414141111110E0E0E0C0C0C0C0C0C050303 050101050101050101050101050101050101020000777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000000000000000 000000000000121212171717171717171717171717171717171717171717171717171717171717 171717171717171717161616161616161616161616161616161616161616161616161616161616 161616161616161616161616161616151515151515151515151515151515151515151515151515 151515151515151515141414141414141414141414141414141414141414141414141414141414 131313131313131313131313131313131313131313131313131313121212121212121212121212 121212121212121212121212111111111111111111111111111111111111111111111111101010 101010101010101010101010101010040404000000000000000000000000000000000000000000 0000000C0C0CF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000 0000000000000000000000000000000000000000000B0B0B0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A090909090909090909090909090909090909090909090909090909080808080808 080808080808080808080808080808080808070707070707070707070707070707070707070707 070707060606060606060606060606060606060606060606050505050505050505050505050505 0A0A0A0A0A0A0A0A0A0C0C0C0C0C0C0C0C0C0F0F0F0F0F0F111111111111111111111111111111 1111111111111111111111111111111010101010100E0E0E0E0E0E0A0A0A010101000000000000 0000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000000000000000 0000000000000808082626262C2C2C3131313434343636363737373939393B3B3B3E3E3E404040 4040404242424242424242424242424242424242424242424242424343434242424040403E3E3E 3B3B3B3A3A3A3A3A3A3636363535353131312F2F2F1E1E1E020202000000000000000000000000 0000000000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB525252020202 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0D0D0D3F3F3FF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF565656000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000DBDBDBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4A4A4000000000000000000000000000000 000000000000000000000000000000030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303020202020202 0202020202020202020202020202020202020202020202020707070A0A0A0D0D0D111111151515 1919191C1C1C2020202323232626262A2A2A2C2C2C2F2F2F3333333434343737373838383C3C3C 3E3E3E3F3F3F4141414343434646464949494A4A4A4B4B4B4D4D4D4F4F4F505050515151525252 535353545454545454555555565656575757575757585858595959595959595959595959595959 595959595959595959595959585858575757575757565656555555555555545454535353525252 5252525050504F4F4F4D4D4D4D4D4D4C4C4C4A4A4A494949474747464646444444424242404040 3F3F3F3D3D3D3B3B3B3939393737373636363434343232323030302E2E2E2C2C2C292929272727 2626262424242121211E1E1E1C1C1C1A1A1A1616161515151313131111110E0E0E0C0C0C090909 060606050303050101050101050101050101050101050101020000777777FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020202000000000000000000000000 000000000000000000000000121212171717171717171717171717171717171717171717171717 171717171717171717171717171717171717171717171717171717171717161616161616161616 161616161616161616161616161616161616161616161616161616161616161616151515151515 151515151515151515151515151515151515151515151515151515141414141414141414141414 141414141414141414141414141414131313131313131313131313131313131313131313131313 131313121212121212121212121212121212121212121212121212111111111111111111111111 111111111111111111101010101010101010101010030303000000000000000000000000000000 0000000000000000000C0C0CF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464 0000000000000000000000000000000000000000000000000000000B0B0B0C0C0C0C0C0C0C0C0C 0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909 090909080808080808080808080808080808080808080808080808070707070707070707070707 070707070707070707070707060606060606060606060606060606060606060606060606050505 0505050505050505050505050505050505050909090909090909090909090C0C0C0C0C0C0C0C0C 0C0C0C0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0B0B0B0A0A0A010101 0000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000 0000000000000000000000000707072424242A2A2A2F2F2F333333323232343434373737393939 3B3B3B3C3C3C3E3E3E404040404040404040404040404040404040404040404040404040404040 3E3E3E3C3C3C3A3A3A3838383636363535353131313131312D2D2D1C1C1C020202000000000000 0000000000000000000000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4262626 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000303032C2C2CF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000303030FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D00A0A0A000000000000000000 000000000000000000000000000000000000020202030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 0303030303030303030303030303030303030202020202020202020202020707070D0D0D111111 1515151919191D1D1D1E1E1E2323232525252929292C2C2C2E2E2E313131343434373737383838 3B3B3B3E3E3E3F3F3F4141414343434545454747474B4B4B4C4C4C4D4D4D4F4F4F505050525252 535353545454555555555555565656575757575757585858585858595959595959595959595959 595959595959595959595959595959585858585858575757565656555555545454545454535353 5252525151515050504F4F4F4D4D4D4B4B4B4B4B4B4A4A4A494949484848464646444444424242 4040403F3F3F3E3E3E3C3C3C3939393737373535353434343232322F2F2F2D2D2D2B2B2B292929 2626262424242222222121211D1D1D1C1C1C1919191616161414141111111010100E0E0E0C0C0C 090909060606060606030101050101050101050101050101050101050101020000777777FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF030303000000000000 000000000000000000000000000000000000111111181818181818181818181818181818181818 181818171717171717171717171717171717171717171717171717171717171717171717171717 171717171717171717171717161616161616161616161616161616161616161616161616161616 161616161616161616161616151515151515151515151515151515151515151515151515151515 151515141414141414141414141414141414141414141414141414141414131313131313131313 131313131313131313131313131313121212121212121212121212121212121212121212121212 111111111111111111111111111111111111111111101010101010020202000000000000000000 0000000000000000000000000000000C0C0CFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF6464640000000000000000000000000000000000000000000000000000000B0B0B0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909 090909090909090909090909080808080808080808080808080808080808080808080808070707 070707070707070707070707070707070707070707060606060606060606060606060606060606 060606060606050505050505050505050505050505050505050505040404040404040404090909 0909090909090C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B 0707070101010000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000 0000000000000000000000000000000000000606062020202828282C2C2C2F2F2F313131323232 3434343636363737373939393B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3E3E3E 3E3E3E3C3C3C3B3B3B3939393737373636363535353333332F2F2F2D2D2D2A2A2A1B1B1B020202 0000000000000000000000000000000000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE 3D3D3D010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000060606575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF969696000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 838383FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED222222000000000000 000000000000000000000000000000000000000000020202030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 0303030303030303030303030303030303030303030303030303030303030303030808080E0E0E 1111111414141717171C1C1C1F1F1F2222222626262929292C2C2C2F2F2F313131333333373737 3939393C3C3C3E3E3E4040404242424343434545454747474949494D4D4D4E4E4E4F4F4F505050 515151535353545454545454565656575757575757575757585858595959595959595959595959 595959595959595959585858585858585858585858585858575757575757555555545454535353 5252525252525151515050504F4F4F4D4D4D4B4B4B494949484848484848474747464646444444 4242423F3F3F3D3D3D3C3C3C3B3B3B3838383636363333333232323030302E2E2E2C2C2C292929 2727272525252222222121211F1F1F1C1C1C1A1A1A1818181515151313131010100E0E0E0C0C0C 090909060606060606010101010101030101050101050101050101050101050101050101020000 777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040404 0000000000000000000000000000000000000000000000000B0B0B181818181818181818181818 181818181818181818181818181818181818181818181818181818171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717161616161616 161616161616161616161616161616161616161616161616161616151515151515151515151515 151515151515151515151515151515151515141414141414141414141414141414141414141414 141414141414131313131313131313131313131313131313131313131313121212121212121212 121212121212121212121212111111111111111111111111111111111111111111000000000000 000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000000000000000 0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909090909090909090909080808080808080808080808080808080808 080808080808070707070707070707070707070707070707070707070707060606060606060606 060606060606060606060606060606050505050505050505050505050505050505050505040404 0404040404040404040404040909090909090909090909090909090909090909090C0C0C0C0C0C 0909090808080707070101010000000000000000000000000000000000000000000000001B1B1B FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB 1818180000000000000000000000000000000000000000000606062020202626262A2A2A2C2C2C 2F2F2F2F2F2F323232343434363636373737373737393939393939393939393939393939393939 3939393B3B3B3B3B3B3939393737373737373636363434343131312F2F2F2D2D2D2A2A2A282828 1B1B1B0202020000000000000000000000000000000000000000000000000101019D9D9DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFA5A5A5050505000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000151515D4D4D4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF373737000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000D6D6D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD494949000000 000000000000000000000000000000000000000000000000010101030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303080808 0E0E0E1212121515151818181C1C1C1E1E1E2323232525252A2A2A2C2C2C2F2F2F323232333333 3636363939393C3C3C3F3F3F4141414343434444444646464747474A4A4A4C4C4C4E4E4E4F4F4F 4F4F4F515151525252535353545454555555575757575757585858585858595959595959595959 5A5A5A595959595959595959585858585858575757575757575757575757575757565656555555 5353535252525151515151515050504F4F4F4D4D4D4C4C4C4A4A4A484848474747464646444444 4343434141413F3F3F3C3C3C3A3A3A3838383737373535353333333030302E2E2E2D2D2D2B2B2B 2828282626262424242121211F1F1F1C1C1C1C1C1C1919191616161414141111110E0E0E0C0C0C 090909090909060606010101010101010101010101030101050101050101050101050101050101 050101020000777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF101010000000000000000000000000000000000000000000000000020202181818181818 181818181818181818181818181818181818181818181818181818181818181818181818181818 181818181818181818181818171717171717171717171717171717171717171717171717171717 171717171717171717171717161616161616161616161616161616161616161616161616161616 161616161616151515151515151515151515151515151515151515151515151515141414141414 141414141414141414141414141414141414131313131313131313131313131313131313131313 1313131212121212121212121212121212121212121212121212121111111111111111110E0E0E 000000000000000000000000000000000000000000000000000000242424FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000 0000000000000B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909090909080808080808 080808080808080808080808080808080808070707070707070707070707070707070707070707 060606060606060606060606060606060606060606060606050505050505050505050505050505 050505050505040404040404040404040404040404040404040404040404090909090909090909 090909090909090909090909030303000000000000000000000000000000000000000000000000 0000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEBEBEB1818180000000000000000000000000000000000000000000505051D1D1D222222 2828282A2A2A2A2A2A2C2C2C2F2F2F303030323232343434363636373737373737373737373737 3737373737373737373737373737373737373636363434343232323232323030302D2D2D2A2A2A 282828262626191919020202000000000000000000000000000000000000000000000000010101 9D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF202020000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000005E5E5E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 0000000000000000002B2B2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878 000000000000000000000000000000000000000000000000000000010101030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 0808080B0B0B1010101515151717171C1C1C1E1E1E2222222525252828282C2C2C2F2F2F323232 3535353636363838383C3C3C3E3E3E4141414343434545454747474848484A4A4A4C4C4C4E4E4E 505050505050515151525252545454555555565656565656585858585858585858595959595959 5A5A5A5A5A5A5A5A5A595959595959595959585858585858575757575757575757565656565656 5555555454545252525151515050505050504E4E4E4D4D4D4B4B4B4A4A4A484848474747454545 4444444242424040403E3E3E3C3C3C3A3A3A3838383636363434343232323030302D2D2D2B2B2B 2929292727272424242222222121211D1D1D1C1C1C1A1A1A1818181414141111111010100E0E0E 0C0C0C090909060606010101010101010101010101010101010101030101050101050101050101 050101050101050101020000767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF434343000000000000000000000000000000000000000000000000000000 141414191919191919191919191919191919191919191919181818181818181818181818181818 181818181818181818181818181818181818181818181818181818181818181818171717171717 171717171717171717171717171717171717171717171717171717171717161616161616161616 161616161616161616161616161616161616161616151515151515151515151515151515151515 151515151515151515141414141414141414141414141414141414141414141414131313131313 131313131313131313131313131313131313121212121212121212121212121212121212121212 111111040404000000000000000000000000000000000000000000000000000000616161FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000 0000000000000000000000000C0C0C0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909 090909080808080808080808080808080808080808080808080808070707070707070707070707 070707070707070707070707060606060606060606060606060606060606060606050505050505 050505050505050505050505050505040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404000000000000000000000000000000000000 0000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000000000000000000000000000050505 1919192222222626262828282A2A2A2A2A2A2C2C2C2F2F2F323232323232343434363636363636 3636363636363636363636363636363636363737373636363434343232323030302E2E2E2E2E2E 2B2B2B282828282828262626171717020202000000000000000000000000000000000000000000 0000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD4D4D40F0F0F000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000001E1E1EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF797979000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 0000000000000000000000000000007E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AEAEAE010101000000000000000000000000000000000000000000000000010101040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 0303030303030B0B0B1010101313131717171B1B1B1E1E1E2222222525252929292C2C2C2F2F2F 3131313535353838383939393C3C3C3F3F3F4242424343434444444747474949494A4A4A4C4C4C 4F4F4F515151525252525252535353555555565656575757585858585858595959595959595959 5959595A5A5A5A5A5A5A5A5A5A5A5A5A5A5A595959595959585858575757575757565656565656 5555555555555454545353535151515050504F4F4F4F4F4F4D4D4D4B4B4B484848474747464646 4545454343434141414040403E3E3E3B3B3B3939393838383636363333333131312F2F2F2D2D2D 2929292828282626262424242121211F1F1F1C1C1C1B1B1B1818181515151313131010100C0C0C 090909090909060606010101010101010101010101010101010101010101010101030101050101 050101050101050101050101050101020000767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8A8A8010101000000000000000000000000000000000000 000000000000030303191919191919191919191919191919191919191919191919191919191919 191919191919191919181818181818181818181818181818181818181818181818181818181818 181818181818181818181818171717171717171717171717171717171717171717171717171717 171717171717161616161616161616161616161616161616161616161616161616161616151515 151515151515151515151515151515151515151515151515141414141414141414141414141414 141414141414141414131313131313131313131313131313131313131313121212121212121212 1212121212120D0D0D000000000000000000000000000000000000000000000000000000020202 B5B5B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000 0000000000000000000000000000000000000C0C0C0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909 090909090909090909090909080808080808080808080808080808080808080808080808070707 070707070707070707070707070707070707070707060606060606060606060606060606060606 060606050505050505050505050505050505050505050505050505040404040404040404040404 040404040404040404040404040404040404040404040404040404000000000000000000000000 0000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000000000000000000000 0000000505051919191F1F1F2222222828282828282A2A2A2C2C2C2F2F2F303030323232323232 3232323232323232323232323232323232323232323434343434343232323232323030302E2E2E 2E2E2E2E2E2E2B2B2B282828262626242424171717020202000000000000000000000000000000 0000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E9E9E020202000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000171717FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFD1D1D1D000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDCDCDC0F0F0F000000000000000000000000000000000000000000000000000000030303 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404030303030303030303030303 0303030303030303030808080E0E0E1212121616161A1A1A1E1E1E2222222323232828282C2C2C 2F2F2F3131313434343737373A3A3A3C3C3C3E3E3E4242424444444545454747474949494B4B4B 4B4B4B4D4D4D4F4F4F515151525252535353545454555555565656575757585858595959595959 5959595959595959595A5A5A5A5A5A5A5A5A5A5A5A5A5A5A595959595959585858575757575757 5656565656565454545454545252525151515050504E4E4E4D4D4D4D4D4D4B4B4B494949464646 4545454444444343434040403E3E3E3D3D3D3B3B3B3838383737373535353333333030302E2E2E 2C2C2C2929292727272424242323232121211E1E1E1C1C1C1A1A1A181818141414111111101010 0C0C0C090909060606060606010101010101010101010101010101010101010101010101010101 030101050101050101050101050101050101050101020000767676FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC030303000000000000000000000000 000000000000000000000000000000090909191919191919191919191919191919191919191919 191919191919191919191919191919191919191919191919191919191919181818181818181818 181818181818181818181818181818181818181818181818181818181818171717171717171717 171717171717171717171717171717171717171717171717161616161616161616161616161616 161616161616161616161616151515151515151515151515151515151515151515151515141414 141414141414141414141414141414141414141414131313131313131313131313131313131313 1313131212121212120F0F0F010101000000000000000000000000000000000000000000000000 0000000E0E0EF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000 0000000000000000000000000000000000000000000000000C0C0C0D0D0D0D0D0D0D0D0D0D0D0D 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909090909090909090909080808080808080808080808080808080808 080808080808070707070707070707070707070707070707070707070707060606060606060606 060606060606060606060606050505050505050505050505050505050505050505050505040404 040404040404040404040404040404040404040404040404040404040404040404000000000000 0000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB181818000000000000000000000000 0000000000000000000303031616161B1B1B1F1F1F2222222626262626262A2A2A2C2C2C2F2F2F 2E2E2E3030302E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2B2B2B2B2B2B2B2B2B2B2B2B292929272727242424202020141414010101000000000000000000 0000000000000000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C000000000000000000000000 000000000000000000010101020202020202020202020202020202020202020202030303030303 030303030303030303030303030303020202020202020202020202020202010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000171717F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFB9B9B9000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000252525FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7F7F7323232000000000000000000000000000000000000000000000000000000 030303040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 0404040404040404040404040909090B0B0B1212121616161A1A1A1D1D1D212121232323272727 2A2A2A2E2E2E3131313434343737373A3A3A3D3D3D3E3E3E414141444444464646464646484848 4B4B4B4C4C4C4E4E4E4F4F4F515151525252545454545454555555565656575757585858595959 5959595959595959595959595959595A5A5A5A5A5A5A5A5A5A5A5A5A5A5A595959595959585858 5757575656565555555555555353535252525151515050504E4E4E4D4D4D4B4B4B4B4B4B484848 4646464444444343434242424040403E3E3E3C3C3C3A3A3A383838353535333333333333313131 2D2D2D2B2B2B2929292626262424242121211F1F1F1C1C1C1A1A1A181818151515131313101010 0C0C0C090909090909060606010101010101010101010101010101010101010101010101010101 010101010101030101050101050101050101050101050101050101020000767676FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D3D3D000000000000 0000000000000000000000000000000000000000000000000707071A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A191919191919191919191919191919191919191919191919191919191919191919191919 191919191919191919191919181818181818181818181818181818181818181818181818181818 181818181818181818171717171717171717171717171717171717171717171717171717171717 161616161616161616161616161616161616161616161616161616151515151515151515151515 151515151515151515151515141414141414141414141414141414141414141414131313131313 1313131313131313131313130E0E0E010101000000000000000000000000000000000000000000 0000000000000000005A5A5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 6464640000000000000000000000000000000000000000000000000000000C0C0C0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909090909080808080808 080808080808080808080808080808070707070707070707070707070707070707070707070707 060606060606060606060606060606060606060606050505050505050505050505050505050505 050505050505040404040404040404040404040404040404040404040404040404040404040404 0000000000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC181818000000000000 0000000000000000000000000000000303031212121616161616161919191919191B1B1B1B1B1B 202020222222222222212121212121212121212121212121212121212121212121212121212121 2121212121212121211F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1A1A1A1717170E0E0E010101000000 0000000000000000000000000000000000000000000101019E9E9EFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000 0000000000000000000000000000000101011212121D1D1D1D1D1D202020242424242424242424 2424242626262626262626262424242020202020202020202020201D1D1D191919191919161616 101010101010090909090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A5A5A000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010000000000000000000000000000000000000000000000007A7A7AFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF656565000000000000000000000000000000000000000000000000 000000020202040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 0404040404040404040404040404040909090C0C0C1111111616161919191D1D1D202020242424 2626262929292C2C2C3030303333333636363939393C3C3C3E3E3E404040424242454545474747 4949494A4A4A4D4D4D4E4E4E4F4F4F515151535353555555565656565656575757575757575757 5858585959595959595959595959595A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A595959595959 5858585757575656565555555454545454545252525252525050504F4F4F4D4D4D4B4B4B4A4A4A 4949494747474444444242424141413F3F3F3E3E3E3B3B3B393939383838363636323232323232 3030302E2E2E2A2A2A2828282525252222222020201D1D1D1B1B1B191919151515131313101010 0E0E0E090909060606060606010101010101010101010101010101010101010101010101010101 010101010101010101010101030101050101050101050101050101050101050101020000767676 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE 020202000000000000000000000000000000000000000000000000000000000000010101101010 1919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919 191919191919191919191919191919191919191919191919191919191919181818181818181818 181818181818181818181818181818181818181818181818171717171717171717171717171717 171717171717171717171717171717161616161616161616161616161616161616161616161616 151515151515151515151515151515151515151515151515141414141414141414141414141414 1414141414141414141313130F0F0F040404000000000000000000000000000000000000000000 000000000000000000000000070707E2E2E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF6464640000000000000000000000000000000000000000000000000000000C0C0C 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909 090909080808080808080808080808080808080808080808080808070707070707070707070707 070707070707070707060606060606060606060606060606060606060606050505050505050505 050505050505050505050505050505040404040404040404040404040404040404040404040404 0404040404040000000000000000000000000000000000000000000000000000001B1B1BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB171717 000000000000000000000000000000000000000000000000010101020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303030303030303020202020202020202020202020202020202020202020202 0000000000000000000000000000000000000000000000000000000A0A0AAEAEAEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171 000000000000000000000000000000000000000000010101151515202020202020242424262626 2626262626262828282828282828282828282626262626262626262424242424242020201D1D1D 1D1D1D191919191919161616101010101010090909090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000161616EFEFEFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F10A0A0A000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000CCCCCC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2A2A2000000000000000000000000000000000000000000 000000000000010101040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 0404040404040404040404040404040404040909090C0C0C0F0F0F1414141818181C1C1C1F1F1F 2323232626262929292C2C2C2F2F2F3333333636363838383B3B3B3E3E3E404040424242444444 4646464949494A4A4A4C4C4C4F4F4F505050515151525252545454565656575757585858585858 5858585959595A5A5A5959595A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A595959595959595959 5959595858585757575656565555555353535252525252525252525151514F4F4F4E4E4E4B4B4B 4A4A4A4949494848484545454343434040403E3E3E3D3D3D3B3B3B383838373737353535323232 3131312E2E2E2D2D2D2A2A2A2727272525252323232020201C1C1C1A1A1A161616141414111111 0E0E0E0C0C0C090909060606010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101030101050101050101050101050101050101050101 020000757575FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF3E3E3E000000000000000000000000000000000000000000000000000000000000 000000000000000000020202050505070707080808080808080808080808080808080808080808 080808080808080808070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707060606060606060606060606060606060606060606060606 060606060606060606050505030303010101000000000000000000000000000000000000000000 0000000000000000000000000000000000005F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000000000 0000000C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909 090909090909090909090909080808080808080808080808080808080808080808080808070707 070707070707070707070707070707070707060606060606060606060606060606060606060606 060606050505050505050505050505050505050505050505040404040404040404040404040404 040404040404040404040404000000000000000000000000000000000000000000000000000000 1B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1B1B1B000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000141414C9C9C9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF717171000000000000000000000000000000000000000000010101171717242424242424 2626262828282828282828282A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A282828282828 2626262424242020202020201D1D1D191919161616161616101010101010090909000000000000 000000000000000000000000000000000000000000000000000000000000000000161616EFEFEF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0A0A0000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 212121FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4D4D40B0B0B000000000000000000000000000000 000000000000000000000000040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 0404040404040404040404040404040404040404040404040909090F0F0F1414141818181C1C1C 1E1E1E2323232626262929292C2C2C2F2F2F3232323535353838383C3C3C3F3F3F414141434343 4545454646464949494A4A4A4C4C4C4E4E4E505050515151525252535353555555575757585858 5858585959595959595A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A595959 5959595959595757575757575656565454545353535252525050505050505050504F4F4F4D4D4D 4B4B4B4949494848484646464545454242423F3F3F3D3D3D3B3B3B3A3A3A383838353535323232 3333333030302D2D2D2A2A2A2828282525252323232020201E1E1E1C1C1C191919141414111111 0E0E0E0C0C0C090909060606060606010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101030101050101050101050101050101 050101050101020000757575FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEFEFEF060606000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000F0F0FF3F3F3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000 0000000000000000000D0D0D0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909090909090909090909080808080808080808080808080808080808 080808080808070707070707070707070707070707070707070707060606060606060606060606 060606060606060606060606050505050505050505050505050505050505050505040404040404 040404040404040404040404040404040404000000000000000000000000000000000000000000 0000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF4F4F4F000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 191919FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF7171710000000000000000000000000000000000000000000202021A1A1A 2424242626262828282828282828282A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2D2D2D2F2F2F2F2F2F 2D2D2D2D2D2D2A2A2A2828282626262020202020201D1D1D191919191919161616101010101010 090909090909000000000000000000000000000000000000000000000000000000000000000000 161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF484848000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000727272FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F32A2A2A000000000000000000000000 000000000000000000000000000000030303040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 0404040404040404040404040404040404040404040404040404040909090F0F0F131313181818 1C1C1C1E1E1E2121212626262929292C2C2C2F2F2F3232323434343838383B3B3B3F3F3F414141 4444444646464747474949494C4C4C4D4D4D4E4E4E505050515151535353535353545454565656 5858585959595959595A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B 5959595959595959595959595757575656565555555454545252525050504F4F4F4F4F4F4D4D4D 4C4C4C4B4B4B4949494747474444444343434242423F3F3F3C3C3C3A3A3A383838363636343434 3333333030302F2F2F2C2C2C2929292727272424242222221E1E1E1D1D1D1A1A1A171717141414 1111110F0F0F090909060606060606050505010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101030101050101050101 050101050101050101050101020000757575FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1B1B1020202000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000040404C9C9C9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000 0000000000000000000000000000000D0D0D0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909080808080808080808 080808080808080808080808080808070707070707070707070707070707070707070707060606 060606060606060606060606060606060606060606050505050505050505050505050505050505 050505040404040404040404040404040404040404040404000000000000000000000000000000 0000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6C6141414000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000303035F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000000000000000000000000000000000 0202021B1B1B2828282A2A2A2D2D2D2D2D2D2F2F2F313131313131313131333333313131313131 3333333131313131312F2F2F2D2D2D2D2D2D2D2D2D2626262424242020202020201D1D1D191919 161616161616101010090909090909090909000000000000000000000000000000000000000000 000000000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC 050505000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000BEBEBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D5D5D000000000000000000 000000000000000000000000000000000000020202040404040404040404040404040404040404 040404050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 0505050505050505050505050505050404040404040404040404040404040909090C0C0C111111 1616161B1B1B1E1E1E2121212424242828282B2B2B2F2F2F3232323434343737373A3A3A3D3D3D 4141414343434646464848484A4A4A4B4B4B4D4D4D4F4F4F505050515151525252535353555555 5656565757575858585959595A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B 5B5B5B5B5B5B5A5A5A5959595959595858585656565555555454545252525151515050504F4F4F 4D4D4D4C4C4C4B4B4B4848484646464545454343434141413F3F3F3C3C3C3A3A3A373737353535 3333333232322F2F2F2D2D2D2C2C2C2929292626262323232222221E1E1E1B1B1B191919161616 1414140F0F0F0D0D0D0A0A0A070707020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101030101 050101050101050101050101050101050101020000747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF747474010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101999999FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000 0000000000000000000000000000000000000000000D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909 090909080808080808080808080808080808080808080808070707070707070707070707070707 070707070707060606060606060606060606060606060606060606060606050505050505050505 050505050505050505050505040404040404040404040404040404040404000000000000000000 0000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF424242040404000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000171717EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000000000000000000000 0000000000000202021B1B1B2828282D2D2D2D2D2D2F2F2F313131333333353535353535353535 3535353535353333333333333131313131312F2F2F2F2F2F2D2D2D282828282828262626202020 2020201D1D1D191919191919101010101010090909090909000000000000000000000000000000 000000000000000000000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF999999000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000121212FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1A1A1000000000000 000000000000000000000000000000000000000000020202050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 0505050505050505050505050505050505050505050505050505050505050505050A0A0A0A0A0A 1010101515151818181C1C1C2020202424242626262A2A2A2D2D2D3131313434343737373A3A3A 3D3D3D4040404141414444444747474A4A4A4B4B4B4C4C4C4E4E4E505050515151525252535353 5555555656565858585959595959595A5A5A5A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B 5B5B5B5B5B5B5A5A5A5A5A5A595959585858585858585858575757555555525252515151515151 5050504E4E4E4C4C4C4B4B4B4949494646464444444343434141413E3E3E3C3C3C3A3A3A383838 3535353232323131312F2F2F2C2C2C2A2A2A2828282525252323232020201D1D1D1B1B1B171717 1515151212120F0F0F0A0A0A070707020202020202020202020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101030101050101050101050101050101050101050101020000757575FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 636363010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101898989FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464 0000000000000000000000000000000000000000000000000000000D0D0D0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909 090909090909090909090909080808080808080808080808080808080808080808070707070707 070707070707070707070707070707060606060606060606060606060606060606060606060606 050505050505050505050505050505050505050505040404040404040404040404040404000000 0000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF212121020202 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000131313B8B8B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000000000 0000000000000000000000000202021B1B1B2828282D2D2D2F2F2F2F2F2F313131333333353535 3636363636363535353636363636363535353535353333333131313131313131312D2D2D2A2A2A 2828282626262424242020201D1D1D1D1D1D161616161616101010090909020202000000000000 000000000000000000000000000000000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF424242000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 0000000000000000000000000000000000000000005C5C5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC0E0E0E 000000000000000000000000000000000000000000000000010101050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 0A0A0A1010101212121818181C1C1C1F1F1F2424242727272A2A2A2E2E2E313131353535373737 3A3A3A3C3C3C4040404242424343434545454848484B4B4B4C4C4C4D4D4D4F4F4F515151525252 5353535353535555555656565858585959595A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B5B5B5B5B5B 5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A585858585858575757565656565656545454515151 5050504F4F4F4E4E4E4C4C4C4A4A4A4949494646464444444242424040403E3E3E3C3C3C3A3A3A 3838383535353333333131312F2F2F2C2C2C2929292727272525252222221E1E1E1C1C1C1A1A1A 1616161212121111110D0D0D0A0A0A070707020202020202020202020202020202020202020202 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101030101050101050101050101050101050101050101020000747474FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF818181030303000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000030303AAAAAA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF6E6E6E0000000000000000000000000000000000000000000000000000000D0D0D0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909090909090909090909080808080808080808080808080808080808 080808070707070707070707070707070707070707070707070707060606060606060606060606 060606060606060606050505050505050505050505050505050505050505040404040404040404 0404040000000000000000000000000000000000000000000000000000001B1B1BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E7E7E72B2B2B090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000020202181818B7B7B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000 0000000000000000000000000000000000000202021D1D1D2A2A2A2D2D2D2F2F2F313131333333 353535363636363636363636363636383838383838363636363636353535353535333333333333 3131312F2F2F2D2D2D2A2A2A282828242424202020202020191919161616161616101010020202 000000000000000000000000000000000000000000000000161616EFEFEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE7E7E7030303000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000AAAAAAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA 373737000000000000000000000000000000000000000000000000000000040404050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 0505050A0A0A0D0D0D1212121515151919191F1F1F2323232626262A2A2A2C2C2C303030333333 3737373B3B3B3D3D3D3F3F3F4242424444444545454747474A4A4A4C4C4C4D4D4D4E4E4E505050 5252525353535454545555555656565757575858585A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A 5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A585858575757565656565656555555545454 5353535050504F4F4F4E4E4E4D4D4D4B4B4B4848484646464444444141413F3F3F3E3E3E3C3C3C 3939393737373535353333333030302E2E2E2B2B2B2828282525252323232121211D1D1D1A1A1A 1616161414141111110D0D0D0A0A0A070707070707020202020202020202020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101030101050101050101050101050101050101050101020000 747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6C6101010000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000101011A1A1A E2E2E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF828282000000000000000000000000000000000000000000000000000000 0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A090909090909090909090909090909090909090909090909080808080808080808 080808080808080808080808070707070707070707070707070707070707070707070707060606 060606060606060606060606060606060606050505050505050505050505050505050505050505 0404040404040303030000000000000000000000000000000000000000000000000000001C1C1C FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFAFAFA8D8D8D1919190A0A0A000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000050505141414595959E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 7171710000000000000000000000000000000000000000000202021D1D1D2A2A2A2F2F2F313131 3333333535353636363838383838383838383838383B3B3B3B3B3B3A3A3A3A3A3A383838363636 3636363636363535353333333131312D2D2D2A2A2A2828282626262424241D1D1D1D1D1D191919 161616030303000000000000000000000000000000000000000000000000161616EFEFEFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF939393000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000060606F1F1F1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF737373000000000000000000000000000000000000000000000000000000030303050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 0505050505050505050D0D0D1212121515151818181D1D1D2121212525252929292C2C2C2F2F2F 3232323535353939393D3D3D3F3F3F4040404343434545454646464949494C4C4C4E4E4E4F4F4F 5151515151515353535555555555555656565757575858585959595A5A5A5A5A5A5A5A5A5A5A5A 5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A595959585858575757565656555555555555 5454545353535252524F4F4F4E4E4E4D4D4D4C4C4C4949494747474545454242423F3F3F3D3D3D 3B3B3B3939393636363434343333333030302D2D2D2A2A2A2828282525252222221F1F1F1D1D1D 1A1A1A1515151212120F0F0F0D0D0D0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101030101050101050101050101050101050101 050101020000747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7747474080808000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101090909 9C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAA060606000000000000000000000000000000000000 0000000000000C0C0C0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909 080808080808080808080808080808080808080808070707070707070707070707070707070707 070707070707060606060606060606060606060606060606060606050505050505050505050505 050505050505050505040404020202000000000000000000000000000000000000000000000000 0000001F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFECBCBCB9D9D9D606060474747393939 363636363636363636363636363636363636363636363636363636363636363636363636363636 363636363636363636363636363636363636363636363636363636363636363636363636363636 3636363636363737374242425555558B8B8BB9B9B9F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7171710000000000000000000000000000000000000000000202021E1E1E2D2D2D 3131313333333535353636363838383A3A3A3A3A3A3A3A3A3A3A3A3D3D3D3F3F3F3D3D3D3D3D3D 3B3B3B3A3A3A3838383838383636363535353333333131312D2D2D2A2A2A282828282828202020 2020201D1D1D191919040404000000000000000000000000000000000000000000000000161616 EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C3C3C000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000474747 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB8B8B8010101000000000000000000000000000000000000000000000000020202 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 0505050505050505050505050A0A0A1010101515151818181B1B1B1F1F1F2424242727272A2A2A 2E2E2E3131313535353838383B3B3B3E3E3E4040404242424545454646464848484B4B4B4E4E4E 5050505151515252525454545656565757575757575858585858585959595A5A5A5A5A5A5B5B5B 5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A595959585858585858565656555555 5454545353535252525252525050504E4E4E4C4C4C4B4B4B4A4A4A474747454545434343414141 3E3E3E3B3B3B3838383636363333333232322F2F2F2D2D2D2A2A2A2727272424242121211D1D1D 1B1B1B1919191515151111110D0D0D0A0A0A070707070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202010101010101010101 010101010101010101010101010101010101010101010101010101030101050101050101050101 050101050101050101020000747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F2F2F28C8C8C181818040404000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101020202242424 ABABABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5D5D5111111000000000000000000000000 0000000000000000000000000909090F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909 090909090909090909080808080808080808080808080808080808080808070707070707070707 070707070707070707070707070707060606060606060606060606060606060606060606050505 050505050505050505050505050505050505010101000000000000000000000000000000000000 000000000000000000272727FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF717171000000000000000000000000000000000000000000020202 1E1E1E2D2D2D3131313535353636363838383A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3F3F3F414141 3F3F3F3F3F3F3D3D3D3B3B3B3B3B3B3A3A3A3838383636363535353131312F2F2F2D2D2D2A2A2A 2828282626262424242020201D1D1D040404000000000000000000000000000000000000000000 000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3020202000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7171717000000000000000000000000000000000000000000000000 010101050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505060606060606060606060606060606 060606060606060606060606060606060606060606060606050505050505050505050505050505 0505050505050505050505050505050A0A0A0D0D0D1414141818181B1B1B1E1E1E222222272727 2A2A2A2C2C2C3030303333333737373A3A3A3D3D3D4040404242424444444646464848484A4A4A 4D4D4D4F4F4F5252525252525353535555555757575858585858585959595959595A5A5A5B5B5B 5C5C5C5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A585858585858575757 5656565454545353535151515151515050504E4E4E4C4C4C4A4A4A494949474747444444424242 4040403E3E3E3B3B3B3838383636363333333030302E2E2E2C2C2C292929252525232323202020 1D1D1D1919191616161414141111110A0A0A070707070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101010101030101050101 050101050101050101050101050101020000737373FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECECAFAFAF7171713F3F3F272727222222202020202020 202020202020202020202020202020202020202020202020202020202020202020202020202020 202020202020202020202020202020202020202020202020202020202020202020202020202020 202020202020202020202020202020202020202020202020202020202020202020202020202020 202020202020202020202020202020202020202020202020202020202020202020202020202020 2020202020202020202020202020202020202020202020202222222C2C2C434343797979C5C5C5 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE181818000000000000 0000000000000000000000000000000000000202020F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909090909090909080808080808080808080808080808080808080808 070707070707070707070707070707070707070707070707060606060606060606060606060606 060606060606050505050505050505050505050505040404000000000000000000000000000000 0000000000000000000000000000004C4C4CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000000000000000000000000000 0000000202021E1E1E2D2D2D3131313535353636363838383A3A3A3B3B3B3D3D3D3D3D3D3B3B3B 4141414141414141413F3F3F3F3F3F3D3D3D3D3D3D3B3B3B3838383636363636363333332F2F2F 2D2D2D2A2A2A2828282626262626262020201D1D1D050505000000000000000000000000000000 000000000000000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C8C8C000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000E0E0E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFE4B4B4B000000000000000000000000000000000000000000 000000000000040404050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 0606060606060606060606060606060606060B0B0B0E0E0E1111111616161919191F1F1F222222 2525252929292C2C2C3030303333333535353A3A3A3D3D3D3F3F3F424242444444464646494949 4B4B4B4C4C4C4E4E4E5151515252525353535454545656565757575959595959595959595A5A5A 5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A585858 5757575656565555555353535252525151515050504E4E4E4D4D4D4A4A4A484848464646444444 4141413F3F3F3D3D3D3A3A3A3737373434343333332F2F2F2D2D2D2A2A2A282828252525222222 1E1E1E1C1C1C1919191515151212120F0F0F0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 030101050101050101050101050101050101050101020000737373FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF494949 0000000000000000000000000000000000000000000000000000000909090F0F0F0F0F0F0F0F0F 0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A090909090909090909090909090909090909090909080808080808080808080808 080808080808080808080808070707070707070707070707070707070707070707060606060606 060606060606060606060606060606050505050505050505050505010101000000000000000000 000000000000000000000000000000000000040404929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000000000000000 0000000000000000000202022020203131313535353636363838383B3B3B3D3D3D3F3F3F414141 4141414141414242424242424242424141414141413F3F3F3F3F3F3F3F3F3D3D3D3B3B3B3A3A3A 3636363535353333333131313131312D2D2D282828262626202020060606000000000000000000 000000000000000000000000000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 353535000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000323232FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF959595000000000000000000000000000000000000 000000000000000000030303050505050505050505050505050505050505050505050505050505 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 0606060606060606060606060606060606060606060606060B0B0B1111111515151818181C1C1C 2020202424242828282D2D2D3030303333333535353838383C3C3C3F3F3F424242454545464646 4848484B4B4B4D4D4D4E4E4E5050505252525353535454545656565757575858585959595A5A5A 5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A5A5A5A 5959595858585757575555555454545353535151515050504E4E4E4D4D4D4B4B4B484848464646 4545454343434040403D3D3D3A3A3A3838383434343232322F2F2F2D2D2D2A2A2A272727242424 2323231E1E1E1B1B1B1717171515151111110D0D0D0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101030101050101050101050101050101050101050101020000737373FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFBBBBBB0606060000000000000000000000000000000000000000000000000000000C0C0C 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909080808 080808080808080808080808080808080808080808070707070707070707070707070707070707 070707060606060606060606060606060606060606060606050505050505010101000000000000 000000000000000000000000000000000000000000000000161616DADADAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000 0000000000000000000000000000000202022020203131313535353636363838383B3B3B3F3F3F 3F3F3F4141414141414141414242424242424242424141414141414141413F3F3F3F3F3F3D3D3D 3B3B3B3A3A3A3838383636363333333131313131312D2D2D282828262626242424060606000000 000000000000000000000000000000000000000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDDDDDD010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101060606060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 0000000000000000000000000000000000007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC0C0C0C000000000000000000000000 000000000000000000000000010101050505050505050505050505060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 0606060606060606060606060606060606060606060606060606060B0B0B0E0E0E131313171717 1C1C1C2020202222222626262A2A2A2F2F2F3232323535353838383A3A3A3D3D3D414141444444 4747474949494B4B4B4D4D4D4F4F4F525252515151525252545454555555575757585858595959 5A5A5A5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5A5A5A 5959595959595959595959595757575353535252525151515050504E4E4E4C4C4C4B4B4B494949 4646464444444242424040403E3E3E3B3B3B3939393535353232322F2F2F2D2D2D2A2A2A272727 2525252121211E1E1E1C1C1C1818181515151111110D0D0D0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101010101 010101010101010101010101030101050101050101050101050101050101050101020000737373 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFE191919000000000000000000000000000000000000000000000000 0000000101010808080F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 090909090909080808080808080808080808080808080808080808080808070707070707070707 070707070707070707070707060606060606060606060606060606060606050505010101000000 000000000000000000000000000000000000000000000000000000000000242424FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171 000000000000000000000000000000000000000000020202202020313131353535363636383838 3B3B3B3F3F3F3F3F3F414141414141414141424242424242424242424242414141414141414141 3F3F3F3D3D3D3D3D3D3B3B3B3838383636363535353131313131312D2D2D2A2A2A262626242424 060606000000000000000000000000000000000000000000000000161616EFEFEFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101060606060606060606010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000CCCCCCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB363636000000000000000000 000000000000000000000000000000010101050505060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 0606060606060606060606060606060606060606060606060606060606060606060E0E0E111111 1616161919191F1F1F2222222525252828282D2D2D3131313434343636363A3A3A3D3D3D3F3F3F 4242424545454848484949494B4B4B4E4E4E505050525252535353545454555555565656575757 5959595959595B5B5B5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B 5B5B5B5959595959595858585757575757575555555252525151515050504E4E4E4C4C4C4A4A4A 4949494747474444444141414040403E3E3E3B3B3B3939393535353333333030302D2D2D292929 2727272323232222221E1E1E1C1C1C1717171313131010100E0E0E080808020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202010101010101010101010101010101030101050101050101050101050101050101050101 020000727272FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4A4A4020202000000000000000000000000000000 0000000000000000000000000101010202020808080D0D0D0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909090909080808080808080808080808080808080808080808080808 070707070707070707070707070707070707070707060606060606060606040404010101000000 0000000000000000000000000000000000000000000000000000000000000000000909098B8B8B FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF717171000000000000000000000000000000000000000000020202202020313131353535 3636363838383B3B3B3F3F3F3F3F3F414141414141414141444444444444444444424242424242 4242424141414141413F3F3F3F3F3F3D3D3D3A3A3A3838383535353333333333332F2F2F2A2A2A 282828262626070707000000000000000000000000000000000000000000000000161616EFEFEF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2F000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101060606060606060606 060606010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000151515FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E7E7E000000000000 000000000000000000000000000000000000000000040404060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 0606060606060606060606060606060606060606060606060606060606060606060606060B0B0B 0E0E0E1515151818181D1D1D2121212525252828282B2B2B2F2F2F3434343535353939393C3C3C 3F3F3F4141414343434646464949494B4B4B4D4D4D4F4F4F515151535353545454555555565656 5757575858585959595959595B5B5B5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B 5B5B5B5B5B5B5959595858585757575757575656565555555353535151514F4F4F4E4E4E4C4C4C 4A4A4A4848484747474545454141413F3F3F3D3D3D3B3B3B3838383535353232322F2F2F2B2B2B 2929292626262323232020201E1E1E1A1A1A1717171313130E0E0E0B0B0B080808030303030303 030303020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101010101010101030101050101050101050101050101 050101050101020000737373FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000 000000000000000000000000000000000000000000000000000000010101010101020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 191919F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF717171000000000000000000000000000000000000000000020202202020 3131313535353636363838383B3B3B3F3F3F3F3F3F414141414141414141444444454545444444 4444444242424242424242424141413F3F3F3F3F3F3D3D3D3B3B3B383838363636353535333333 3131312D2D2D282828262626070707000000000000000000000000000000000000000000000000 161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606060606 060606060606060606010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010000000000000000000000000000000000000000000000005E5E5EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCB050505 000000000000000000000000000000000000000000000000030303060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 0B0B0B0E0E0E1313131616161A1A1A1F1F1F2323232626262A2A2A2D2D2D313131353535373737 3A3A3A3D3D3D4040404343434545454848484B4B4B4C4C4C4E4E4E505050525252555555555555 5656565656565757575959595959595A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C 5C5C5C5B5B5B5A5A5A5959595858585757575656565656565555555454545252524F4F4F4D4D4D 4C4C4C4B4B4B4848484646464545454343434040403D3D3D3B3B3B3838383535353333332F2F2F 2B2B2B2828282525252323231F1F1F1C1C1C1919191717171212120E0E0E0B0B0B080808030303 030303030303030303030303030303020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202010101010101030101050101050101 050101050101050101050101020000737373FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC030303 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000E0E0E949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000000000000000000000000000000000 0202022020203131313535353636363838383B3B3B3F3F3F3F3F3F414141414141414141444444 4545454545454444444444444242424242424242424141414141413F3F3F3D3D3D3A3A3A383838 3636363535353131312D2D2D2A2A2A262626070707000000000000000000000000000000000000 000000000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 060606060606060606060606060606060606010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4 252525000000000000000000000000000000000000000000000000010101060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 0707070707070C0C0C0F0F0F1515151919191C1C1C2020202626262929292C2C2C2F2F2F343434 3636363939393C3C3C3F3F3F4141414545454747474A4A4A4D4D4D4E4E4E505050525252535353 5656565656565656565757575858585959595A5A5A5A5A5A5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C 5B5B5B5B5B5B5B5B5B5A5A5A595959595959575757565656555555545454535353535353515151 4E4E4E4C4C4C4B4B4B4949494646464444444343434040403E3E3E3B3B3B393939363636323232 3030302B2B2B2828282424242121211E1E1E1C1C1C1818181616161313130F0F0F0C0C0C080808 030303030303030303030303030303030303030303030303030303020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101030101 050101050101050101050101050101050101020000727272FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF898989010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000101012F2F2FFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000000000000000000000 0000000000000202022020203131313535353636363838383B3B3B3F3F3F3F3F3F414141414141 4141414545454545454545454545454444444444444242424242424242424141413F3F3F3D3D3D 3B3B3B3838383636363636363131312F2F2F2A2A2A282828070707000000000000000000000000 000000000000000000000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 060606060606060606060606060606060606060606010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000020202EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF6D6D6D000000000000000000000000000000000000000000000000000000050505060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 0707070707070707070707070F0F0F1414141616161B1B1B2020202424242929292C2C2C303030 3232323636363939393C3C3C3F3F3F4242424444444848484949494C4C4C4E4E4E505050515151 5353535555555656565656565757575858585959595A5A5A5A5A5A5B5B5B5C5C5C5C5C5C5C5C5C 5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B595959595959585858575757565656555555535353535353 5252524F4F4F4C4C4C4A4A4A4949494646464444444242424040403E3E3E3B3B3B383838353535 3333332F2F2F2C2C2C2929292424242121211E1E1E1C1C1C1818181414141111110C0C0C090909 040404040404040404030303030303030303030303030303030303030303030303030303030303 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030101050101050101050101050101050101050101020000727272FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF494949010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000181818E3E3E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000000000 0000000000000000000000000202022020203131313535353636363838383B3B3B3D3D3D3F3F3F 414141414141414141454545454545454545444444444444424242424242424242414141414141 3F3F3F3D3D3D3A3A3A3838383636363636363333332F2F2F2A2A2A282828070707000000000000 000000000000000000000000000000000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5D5D5000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101060606060606010101060606060606060606060606010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000373737FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFC4C4C4020202000000000000000000000000000000000000000000000000030303 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 0707070707070707070707070707070C0C0C1212121515151919191F1F1F2222222727272C2C2C 2F2F2F3232323535353939393C3C3C3F3F3F4242424444444747474949494B4B4B4D4D4D505050 5151515252525353535555555858585757575858585959595959595A5A5A5B5B5B5B5B5B5C5C5C 5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5B5B5B595959585858575757565656555555545454 5353535252525050504E4E4E4B4B4B4949494646464444444141414040403D3D3D3B3B3B373737 3434343232322F2F2F2C2C2C2929292525252222221F1F1F1B1B1B1717171414140F0F0F0C0C0C 090909040404040404040404040404040404040404030303030303030303030303030303030303 030303030303030303030303020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030101050101050101050101050101050101050101020000727272FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE353535010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000141414C5C5C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000 0000000000000000000000000000000000000202021E1E1E2F2F2F3333333636363A3A3A3A3A3A 3B3B3B3F3F3F3F3F3F414141414141414141414141414141414141414141414141414141414141 3F3F3F3F3F3F3D3D3D3B3B3B3A3A3A3838383636363636363131312D2D2D2A2A2A282828070707 000000000000000000000000000000000000000000000000161616EFEFEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 868686000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101060606060606060606060606060606060606060606060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 0000000000000000000000000000007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF5F5F5242424000000000000000000000000000000000000000000000000 010101060606060606060606060606060606060606060606060606060606060606060606060606 060606060606070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 0707070707070707070707070707070707070C0C0C0F0F0F1414141818181D1D1D212121252525 2929292D2D2D2F2F2F3434343636363B3B3B3E3E3E4141414343434646464848484B4B4B4C4C4C 4E4E4E5050505252525353535555555656565858585959595A5A5A5B5B5B5C5C5C5C5C5C5C5C5C 5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5A5A5A595959585858575757565656565656 5555555353535151515050504E4E4E4C4C4C4949494747474545454343434040403E3E3E3B3B3B 3838383535353131312F2F2F2C2C2C2828282525252323231F1F1F1B1B1B181818141414101010 0C0C0C090909040404040404040404040404040404040404040404040404040404040404030303 030303030303030303030303030303030303030303030303020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030101050101050101050101050101050101050101020000 727272FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB434343020202000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000141414BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 7171710000000000000000000000000000000000000000000202021E1E1E2F2F2F333333363636 3838383A3A3A3B3B3B3D3D3D3F3F3F414141414141414141414141414141414141414141414141 4141414141413F3F3F3F3F3F3D3D3D3B3B3B3A3A3A3838383636363636363131312D2D2D2A2A2A 282828070707000000000000000000000000000000000000000000000000161616EFEFEFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF373737000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101060606060606060606060606060606060606060606060606010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000C7C7C7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D6D6D000000000000000000000000000000000000000000 000000000000050505060606060606060606060606060606060606060606060606070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 0707070707070707070707070707070707070707070707070C0C0C1212121616161A1A1A1F1F1F 2323232727272B2B2B2F2F2F3131313535353838383C3C3C4040404242424545454848484A4A4A 4B4B4B4D4D4D4F4F4F5151515353535555555656565757575959595A5A5A5B5B5B5C5C5C5D5D5D 5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5C5C5C5A5A5A595959585858575757565656 5555555555555454545252524F4F4F4D4D4D4D4D4D4B4B4B4747474545454343434141413D3D3D 3B3B3B3838383535353333332F2F2F2C2C2C2929292525252222221F1F1F1C1C1C181818141414 1010100D0D0D0A0A0A050505050505040404040404040404040404040404040404040404040404 040404040404040404030303030303030303030303030303030303030303030303020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030101050101050101050101050101050101 050101020000727272FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE 767676090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000505051E1E1ED1D1D1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7171710000000000000000000000000000000000000000000202021E1E1E2D2D2D 3131313636363636363838383A3A3A3B3B3B3D3D3D3F3F3F3F3F3F414141414141414141414141 4141414141414141414141413F3F3F3F3F3F3D3D3D3B3B3B3A3A3A3838383636363636362F2F2F 2D2D2D282828262626070707000000000000000000000000000000000000000000000000161616 EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE5E5E5010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101060606060606060606060606060606060606060606060606 060606010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000111111FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5C5C5020202000000000000000000000000000000 000000000000000000040404060606060606060606060606060606070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 0707070707070707070707070707070707070707070707070707070707070F0F0F141414181818 1B1B1B2121212626262929292D2D2D3030303333333636363939393D3D3D404040434343454545 4848484A4A4A4C4C4C4E4E4E5050505252525454545555555757575757575959595A5A5A5B5B5B 5C5C5C5D5D5D5D5D5D5D5D5D5D5D5D5C5C5C5D5D5D5D5D5D5C5C5C5C5C5C5A5A5A595959585858 5858585656565555555353535353535151514E4E4E4C4C4C4A4A4A484848454545424242404040 3E3E3E3B3B3B3838383636363333333030302C2C2C2929292626262121211F1F1F1B1B1B181818 1212120D0D0D0A0A0A0A0A0A050505050505050505050505050505040404040404040404040404 040404040404040404040404040404040404040404030303030303030303030303030303030303 030303030303020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030101050101050101050101 050101050101050101020000717171FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFC0C0C01E1E1E050505000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000001414145A5A5AF2F2F2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF717171000000000000000000000000000000000000000000020202 1D1D1D2D2D2D3131313535353636363636363838383A3A3A3B3B3B3D3D3D3F3F3F3F3F3F3F3F3F 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3D3D3D3B3B3B3A3A3A383838363636363636 3535352F2F2F2A2A2A282828262626070707000000000000000000000000000000000000000000 000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF979797000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101060606060606060606060606060606060606060606 060606060606060606010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000585858FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5252525000000000000000000000000 000000000000000000000000020202060606070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 0707070707070707070707070707070707070707070707070707070707070707070C0C0C121212 1515151A1A1A1F1F1F2323232727272C2C2C3030303232323535353838383B3B3B3F3F3F424242 4444444747474949494C4C4C4D4D4D4E4E4E5050505353535555555656565757575757575A5A5A 5A5A5A5B5B5B5C5C5C5D5D5D5D5D5D5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B595959 5858585757575757575555555353535252525151514F4F4F4C4C4C4A4A4A484848464646424242 3F3F3F3D3D3D3B3B3B3838383535353333333030302C2C2C2828282525252121211E1E1E1A1A1A 1717171212120D0D0D0A0A0A050505050505050505050505050505050505050505050505050505 050505040404040404040404040404040404040404040404040404040404040404030303030303 030303030303030303030303030303030303020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030101050101 050101050101050101050101050101020000717171FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA8E8E8E1B1B1B0D0D0D000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000303031616163E3E3ED0D0D0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000000000000000000000000000 0000000202021D1D1D2A2A2A2F2F2F3333333535353535353636363838383A3A3A3B3B3B3D3D3D 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3B3B3B3B3B3B3A3A3A383838363636 3535353535353333332D2D2D2A2A2A262626242424070707000000000000000000000000000000 000000000000000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF494949000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101060606060606060606060606060606 060606060606060606060606060606010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010000000000000000000000000000000000000000000000009F9F9F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6F000000000000000000 000000000000000000000000000000010101060606070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 0707070707070808080808080808080808080808080808080808080808080808080808080D0D0D 1010101414141919191C1C1C2121212626262A2A2A2D2D2D3131313535353737373B3B3B3E3E3E 4242424444444646464848484B4B4B4C4C4C4E4E4E505050525252535353555555575757575757 5858585A5A5A5B5B5B5C5C5C5C5C5C5C5C5C5D5D5D5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B 5A5A5A5858585757575656565555555353535151515050504F4F4F4D4D4D4B4B4B484848474747 4545454040403D3D3D3B3B3B3838383636363434343030302D2D2D2828282525252121211E1E1E 1A1A1A1717171313130E0E0E0B0B0B060606050505050505050505050505050505050505050505 050505050505050505050505050505040404040404040404040404040404040404040404040404 040404040404030303030303030303030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030101050101050101050101050101050101050101020000707070FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCB6B6B64C4C4C 1A1A1A171717111111090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000505050B0B0B1515151717172828287A7A7AE0E0E0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000000000000000 0000000000000000000202021B1B1B2A2A2A2D2D2D313131333333333333353535363636383838 3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A383838383838 3636363535353333333131313131312D2D2D282828262626242424060606000000000000000000 000000000000000000000000000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3070707000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101060606060606060606 060606060606060606060606060606060606060606010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 010101E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9030303000000 000000000000000000000000000000000000000000050505070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 0808080D0D0D1313131717171B1B1B1F1F1F2222222727272C2C2C2E2E2E323232363636393939 3D3D3D4040404343434646464848484A4A4A4C4C4C4E4E4E515151525252545454565656575757 5858585959595959595A5A5A5B5B5B5C5C5C5C5C5C5D5D5D5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B 5B5B5B5A5A5A5959595757575555555555555353535252525050504E4E4E4D4D4D4C4C4C484848 4646464545454343433F3F3F3C3C3C3A3A3A3636363333333131312D2D2D2A2A2A262626212121 1E1E1E1A1A1A1616161313130E0E0E0B0B0B060606060606060606060606050505050505050505 050505050505050505050505050505050505050505050505050505040404040404040404040404 040404040404040404040404040404030303030303030303030303030303030303030303030303 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030101050101050101050101050101050101050101020000717171FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE8E8E8C1C1C1AAAAAA9C9C9C999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999A4A4A4B0B0B0D1D1D1F7F7F7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000 0000000000000000000000000000000202021B1B1B2828282D2D2D313131313131333333353535 3636363636363838383A3A3A383838383838383838383838383838383838383838383838363636 3636363636363535353131313131312F2F2F2F2F2F2A2A2A282828242424242424060606000000 000000000000000000000000000000000000000000161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9A9A9000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101060606060606060606 060606060606090909090909060606060606060606060606060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 0000000000002E2E2EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA2D2D2D 000000000000000000000000000000000000000000000000020202070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 0808080808080D0D0D1010101414141919191E1E1E2121212424242929292D2D2D313131353535 3838383B3B3B3F3F3F4242424545454747474949494B4B4B4D4D4D4F4F4F525252535353545454 5656565858585959595959595959595B5B5B5C5C5C5C5C5C5C5C5C5D5D5D5C5C5C5C5C5C5B5B5B 5B5B5B5B5B5B5A5A5A5959595858585656565555555353535252525050504E4E4E4C4C4C4B4B4B 4A4A4A4747474444444343434040403C3C3C3939393636363434343030302E2E2E2A2A2A272727 2121211E1E1E1A1A1A1616161313130E0E0E0B0B0B060606060606060606060606060606060606 060606060606050505050505050505050505050505050505050505050505050505050505050505 040404040404040404040404040404040404040404040404040404030303030303030303030303 030303030303030303030303020202020202020202020202020202020202020202020202020202 020202020202020202020202030101050101050101050101050101050101050101020000707070 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171 0000000000000000000000000000000000000000000202021A1A1A2828282A2A2A2F2F2F313131 313131333333353535363636363636363636363636363636363636363636363636363636363636 3636363636363535353535353333333131312F2F2F2D2D2D2D2D2D2A2A2A262626242424202020 050505000000000000000000000000000000000000000000000000161616EFEFEFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF595959 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606060606 060606060606090909090909090909090909090909060606060606060606060606010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000717171FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 848484000000000000000000000000000000000000000000000000000000060606070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 0808080808080808080808080D0D0D1010101616161B1B1B2020202323232727272C2C2C2F2F2F 3333333737373B3B3B3D3D3D4141414343434646464848484A4A4A4C4C4C4E4E4E505050535353 5454545555555757575858585959595959595A5A5A5B5B5B5C5C5C5C5C5C5C5C5C5D5D5D5C5C5C 5B5B5B5B5B5B5B5B5B5A5A5A5B5B5B5A5A5A5858585656565454545353535151514F4F4F4D4D4D 4B4B4B4B4B4B4848484545454242424040403E3E3E3A3A3A3636363434343131312E2E2E2C2C2C 2727272424242020201B1B1B1818181313130E0E0E0B0B0B060606060606060606060606060606 060606060606060606060606060606060606050505050505050505050505050505050505050505 050505050505050505050505040404040404040404040404040404040404040404040404040404 030303030303030303030303030303030303030303030303020202020202020202020202020202 020202020202020202020202020202020202030101050101050101050101050101050101050101 020000707070FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF717171000000000000000000000000000000000000000000010101171717242424262626 2A2A2A2D2D2D2D2D2D2D2D2D2F2F2F313131313131313131353535353535353535353535353535 3535353535353535353333333131313131312F2F2F2F2F2F2D2D2D2D2D2D2A2A2A262626242424 2020201D1D1D050505000000000000000000000000000000000000000000000000161616EFEFEF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFA111111000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 060606060606060606060606090909090909090909090909090909060606060606060606060606 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000B4B4B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDADADA080808000000000000000000000000000000000000000000000000040404070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 0808080808080808080808080808080808081010101313131717171C1C1C212121252525292929 2D2D2D3232323535353939393D3D3D4040404242424343434747474A4A4A4C4C4C4D4D4D4F4F4F 5151515454545555555656565858585959595A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C 5C5C5C5C5C5C5B5B5B5A5A5A5B5B5B5A5A5A595959595959585858565656545454525252515151 4F4F4F4D4D4D4B4B4B4949494747474343434040403D3D3D3B3B3B3737373434343131312E2E2E 2A2A2A2727272424242121211B1B1B1818181414140F0F0F0C0C0C070707060606060606060606 060606060606060606060606060606060606060606060606060606060606060606050505050505 050505050505050505050505050505050505050505050505040404040404040404040404040404 040404040404040404040404030303030303030303030303030303030303030303020202020202 020202020202020202020202020202020202020202020202030101050101050101050101050101 050101050101020000707070FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF717171000000000000000000000000000000000000000000010101171717 2424242424242626262828282828282A2A2A2A2A2A2D2D2D2D2D2D2D2D2D313131313131313131 3131313131313131313131313131312F2F2F2D2D2D2D2D2D2A2A2A2A2A2A282828282828282828 2626262424242020201D1D1D050505000000000000000000000000000000000000000000000000 161616EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBABABA000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101060606060606060606060606090909090909090909090909090909090909060606060606 060606060606010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000040404F1F1F1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFE434343000000000000000000000000000000000000000000000000020202 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 0808080808080808080808080808080808080808080D0D0D1010101616161A1A1A202020222222 2727272B2B2B2E2E2E3333333737373A3A3A3E3E3E4141414343434444444848484B4B4B4D4D4D 4F4F4F5151515353535555555656565757575858585959595B5B5B5A5A5A5B5B5B5B5B5B5B5B5B 5B5B5B5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5A5A5A595959585858575757575757555555535353 5151514F4F4F4D4D4D4B4B4B4949494747474545454242423F3F3F3A3A3A383838343434313131 2F2F2F2B2B2B2727272323232121211D1D1D1818181414141212120C0C0C070707070707070707 070707070707060606060606060606060606060606060606060606060606060606060606060606 060606060606050505050505050505050505050505050505050505050505050505050505040404 040404040404040404040404040404040404040404040404030303030303030303030303030303 030303030303020202020202020202020202020202020202020202020202030101050101050101 050101050101050101050101020000707070FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727272000000000000000000000000000000000000000000 0101010D0D0D1313131313131616161717171717171717171818181818181919191919191B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B191919191919181818181818171717171717 1717171616161313131313131111110F0F0F020202000000000000000000000000000000000000 000000000000161616F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF6B6B6B000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101060606060606060606060606090909090909090909090909090909090909090909 060606060606060606060606010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010000000000000000000000000000000000000000003A3A3AFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF9C9C9C000000000000000000000000000000000000000000000000 000000060606070707070707070707070707070707070707070707070707070707070707070707 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 0808080808080808080808080808080808080808080808080808080D0D0D1313131717171C1C1C 2222222525252828282B2B2B3030303434343838383C3C3C3F3F3F424242434343454545484848 4B4B4B4D4D4D4F4F4F5151515353535656565656565858585858585959595B5B5B5A5A5A5B5B5B 5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5B5B5B5A5A5A5A5A5A585858575757565656565656 5454545151514F4F4F4D4D4D4B4B4B4848484747474545454343433F3F3F3C3C3C383838363636 3232322E2E2E2C2C2C2727272323232020201D1D1D1919191414140F0F0F0C0C0C070707070707 070707070707070707070707070707070707070707060606060606060606060606060606060606 060606060606060606060606060606060606050505050505050505050505050505050505050505 050505050505050505040404040404040404040404040404040404040404040404030303030303 030303030303030303030303030303020202020202020202020202020202020202020202030101 050101050101050101050101050101050101020000707070FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF919191010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000001A1A1AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE1D1D1D000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101060606060606060606060606090909090909090909090909090909090909 090909090909060606060606060606010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010000000000000000000000000000000000000000000000007D7D7DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8111111000000000000000000000000000000000000 000000000000040404070707070707070707070707070707070707070707070707080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 0808080808080808080808080808080808080909090909090909090909090E0E0E111111171717 1B1B1B2020202424242828282A2A2A2E2E2E3333333737373A3A3A3D3D3D404040434343454545 4848484B4B4B4D4D4D4F4F4F5151515353535454545656565757575858585959595A5A5A5B5B5B 5A5A5A5B5B5B5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A595959595959575757565656 5555555454545353534F4F4F4D4D4D4B4B4B4949494646464444444343434040403C3C3C393939 3535353232322E2E2E2B2B2B2929292525252020201C1C1C1818181414140F0F0F0C0C0C070707 070707070707070707070707070707070707070707070707070707070707070707070707060606 060606060606060606060606060606060606060606060606060606060606060606050505050505 050505050505050505050505050505050505050505040404040404040404040404040404040404 040404040404030303030303030303030303030303030303030303020202020202020202020202 020202030101050101050101050101050101050101050101020000707070FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9B9B90E0E0E000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCB000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101060606060606060606060606090909090909090909090909090909 090909090909090909090909060606060606060606010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF575757000000000000000000000000000000 000000000000000000010101070707070707070707070707070707080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808090909090909 0909090909090909090909090909090909090909090909090909090909090909090909090E0E0E 1414141818181C1C1C2121212626262828282D2D2D3030303434343838383C3C3C3E3E3E424242 4444444646464949494C4C4C4E4E4E505050525252535353555555575757585858585858595959 5A5A5A5B5B5B5B5B5B5C5C5C5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A595959585858585858 5656565454545353535252525151514D4D4D4B4B4B4949494747474545454343434141413D3D3D 3A3A3A3737373232323030302C2C2C2A2A2A2626262222221C1C1C1919191414141010100D0D0D 080808070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707060606060606060606060606060606060606060606060606060606060606 060606060606050505050505050505050505050505050505050505050505050505040404040404 040404040404040404040404040404040404030303030303030303030303030303030303020202 0202020202020202020301010501010501010501010501010501010501010200006F6F6FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8171717 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000060606A3A3A3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C000000000000000000 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101060606060606060606090909090909090909090909 090909090909090909090909090909060606060606060606060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 0000000A0A0AF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6B6B6000000000000000000000000 000000000000000000000000000000060606070707070707080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0E0E0E1111111515151818181D1D1D2323232828282A2A2A2F2F2F3232323636363A3A3A3D3D3D 4040404343434646464848484A4A4A4D4D4D505050525252535353545454555555585858585858 5959595959595A5A5A5B5B5B5B5B5B5C5C5C5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A595959585858 5858585656565454545353535353535252525050504C4C4C494949484848454545434343414141 3F3F3F3C3C3C3737373434343030302D2D2D2A2A2A2727272222221E1E1E191919161616101010 0D0D0D080808080808080808080808080808070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707060606060606060606060606060606 060606060606060606060606060606060606050505050505050505050505050505050505050505 050505050505040404040404040404040404040404040404040404030303030303030303030303 030303030303030303020202020202030101050101050101050101050101050101050101020000 6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEF0F0F0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF656565030303000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000001F1F1FFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C2C2C000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101060606060606060606090909090909090909 090909090909090909090909090909090909090909060606060606060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000464646FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4212121000000000000 000000000000000000000000000000000000030303080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090E0E0E1111111717171B1B1B2121212525252828282C2C2C313131343434383838 3C3C3C3E3E3E4141414444444646464949494C4C4C4E4E4E515151525252535353545454565656 5858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A 5858585757575757575555555353535252525151515050504E4E4E4B4B4B484848464646444444 4141413F3F3F3C3C3C3939393535353232322C2C2C2A2A2A2727272222221F1F1F1A1A1A141414 1313130D0D0D080808080808080808080808080808080808080808080808080808070707070707 070707070707070707070707070707070707070707070707070707070707070707070707060606 060606060606060606060606060606060606060606060606060606060606050505050505050505 050505050505050505050505050505050505040404040404040404040404040404040404040404 030303030303030303030303030303030303020202030101050101050101050101050101050101 0501010200006F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD7D7D77373732525251818181818181C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1919191717171F1F1F5E5E5EC3C3C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEDEDED1B1B1B000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909D1D1D1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC 000000000000000000000000000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101060606060606090909090909 090909090909090909090909090909090909090909090909090909060606060606060606010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6F000000 000000000000000000000000000000000000000000010101080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909091111111515151818181D1D1D2323232727272B2B2B2F2F2F323232 3535353939393D3D3D3F3F3F4242424545454747474A4A4A4D4D4D4F4F4F525252535353535353 5555555656565959595959595959595A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B 5A5A5A5959595858585757575656565454545353535252525050504F4F4F4D4D4D4A4A4A474747 4444444242423F3F3F3D3D3D3B3B3B3737373333332F2F2F2A2A2A2828282323232020201B1B1B 1717171313130D0D0D080808080808080808080808080808080808080808080808080808080808 080808080808080808070707070707070707070707070707070707070707070707070707070707 070707070707070707070707060606060606060606060606060606060606060606060606060606 060606050505050505050505050505050505050505050505050505040404040404040404040404 040404040404040404040404030303030303030303030303030303030101050101050101050101 0501010501010501010200006F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE5E5E54D4D4D151515010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000121212323232D0D0D0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9151515000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000050505B5B5B5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF909090000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101060606060606060606 090909090909090909090909090909090909090909090909090909090909090909060606060606 060606010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9 030303000000000000000000000000000000000000000000000000060606080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909091111111717171B1B1B2121212424242929292D2D2D 2F2F2F3434343737373B3B3B3E3E3E4141414444444646464949494C4C4C4E4E4E505050525252 5353535555555656565757575959595959595A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B 5B5B5B5A5A5A5A5A5A5959595757575656565555555454545252525151514F4F4F4E4E4E4C4C4C 4848484646464242424040403D3D3D3B3B3B3838383434342F2F2F2C2C2C292929262626222222 1D1D1D1818181313130D0D0D080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808070707070707070707070707070707 070707070707070707070707070707070707070707070707060606060606060606060606060606 060606060606060606060606060606050505050505050505050505050505050505050505050505 040404040404040404040404040404040404040404030303030303030303030303030101050101 0501010501010501010501010501010200006E6E6EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC5C5C5191919010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000001414149B9B9B FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1D1D11F1F1F050505000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000020202151515 D7D7D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF484848000000000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606060606 0606060909090909090909090909090909090909090C0C0C0C0C0C0C0C0C090909090909090909 060606060606010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000111111FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFD333333000000000000000000000000000000000000000000000000030303080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090909090E0E0E1414141818181C1C1C222222262626 2A2A2A2D2D2D3131313535353838383D3D3D3F3F3F4242424545454848484A4A4A4D4D4D4E4E4E 5151515252525454545656565757575858585858585959595A5A5A5B5B5B5B5B5B5B5B5B5B5B5B 5B5B5B5B5B5B5A5A5A5A5A5A5959595858585656565555555454545353535252525050504E4E4E 4C4C4C4A4A4A4646464444444040403D3D3D3B3B3B3838383535353131312D2D2D292929272727 2323231D1D1D181818151515111111090909090909090909090909080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 070707070707070707070707070707070707070707070707070707070707070707070707060606 060606060606060606060606060606060606060606060606060606050505050505050505050505 050505050505050505050505040404040404040404040404040404040404040404030303030303 0301010501010501010501010501010501010501010200006E6E6EFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCCCCCCC929292 5E5E5E3F3F3F3232322D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D3131313A3A3A535353868686BCBCBCF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2C2C2141414000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000001111118E8E8EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8 8484841F1F1F101010060606040404020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020202020202020202020202020202020303030505051C1C1C A6A6A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF7F7F70A0A0A000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060606060909090909090909090C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C090909 090909060606060606060606010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010000000000000000000000000000000000000000004D4D4DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF969696000000000000000000000000000000000000000000000000010101070707 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090909090909090909090E0E0E1515151818181E1E1E 2424242828282B2B2B3030303232323737373939393D3D3D4141414444444747474949494C4C4C 4E4E4E4F4F4F5151515454545555555757575858585959595A5A5A5A5A5A5B5B5B5C5C5C5C5C5C 5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A575757565656545454535353525252505050 4E4E4E4C4C4C4A4A4A4747474444444141413D3D3D3C3C3C3838383535353232322E2E2E2A2A2A 2727272424242121211A1A1A1515151111110E0E0E090909090909090909090909090909090909 090909080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808070707070707070707070707070707070707070707070707 070707070707070707060606060606060606060606060606060606060606060606060606060606 050505050505050505050505050505050505050505040404040404040404040404040404040404 0404040303030301010501010501010501010501010501010501010200006E6E6EFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCECECE5F5F5F0F0F0F 121212060606000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000303031111110C0C0C444444B4B4B4FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1E1181818000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000121212BCBCBCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE6E6E6C6C6C6BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCBCBCD3D3D3 F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7B7B7000000000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060606060909090909090909090C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C090909090909060606060606010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010000000000000000000000000000000000000000000000008A8A8A FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEDEDED141414000000000000000000000000000000000000000000000000 050505080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0F0F0F121212161616 1B1B1B2121212525252929292D2D2D3131313434343939393B3B3B3E3E3E424242454545474747 4A4A4A4B4B4B4E4E4E5050505252525454545656565757575959595959595A5A5A5A5A5A5B5B5B 5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A595959575757555555545454535353 5050504E4E4E4C4C4C4B4B4B4949494545454141413F3F3F3B3B3B3939393636363232322F2F2F 2A2A2A2727272323232121211C1C1C1515151111110E0E0E090909090909090909090909090909 090909090909090909090909090909090909090909080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808070707070707070707070707 070707070707070707070707070707070707070707070707060606060606060606060606060606 060606060606060606060606050505050505050505050505050505050505050505040404040404 0404040404040404040404040301010501010501010501010501010501010501010200006E6E6E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1D1D13939390F0F0F 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0F0F0F1F1F1FB0B0B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF444444010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000001F1F1FFAFAFAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6F000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060606060909090909090C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C090909090909060606060606010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000C7C7C7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000 000000020202080808080808080808080808080808080808080808080808080808080808080808 080808080808090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090909090909090909090909090909090909090A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0F0F0F 1414141919191D1D1D2222222626262B2B2B2E2E2E3333333636363939393C3C3C404040434343 4646464848484B4B4B4C4C4C4F4F4F5151515353535555555757575858585959595959595A5A5A 5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A595959585858565656545454 5252525151514F4F4F4D4D4D4C4C4C4949494747474444444141413E3E3E393939383838343434 3030302C2C2C2929292323232121211D1D1D1818181414140E0E0E090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808070707070707070707070707070707070707070707070707070707070707070707060606 060606060606060606060606060606060606060606050505050505050505050505050505050505 050505050505040404040404040404040404030101050101050101050101050101050101050101 0200006E6E6EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F96B6B6B0E0E0E 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000E0E0E3F3F3FE9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCDCDCD141414000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000B0B0B919191FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF272727000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060606060909090909090C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C090909090909060606060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000090909F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCB020202000000000000000000000000000000 000000000000000000070707080808080808080808080808080808080808080808080808080808 080808090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A1212121616161B1B1B1E1E1E2424242828282D2D2D3030303434343737373B3B3B3E3E3E 4141414444444747474949494C4C4C4D4D4D505050525252545454555555575757585858595959 5959595A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A595959595959595959585858575757 5555555353535151515050504E4E4E4C4C4C4A4A4A4848484646464343433F3F3F3C3C3C393939 3636363232322E2E2E2B2B2B2626262222221E1E1E1B1B1B1616160E0E0E090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909080808080808080808080808080808080808080808080808 080808080808080808080808080808070707070707070707070707070707070707070707070707 070707070707070707060606060606060606060606060606060606060606060606050505050505 050505050505050505050505050505040404040404040404030101050101050101050101050101 0501010501010200006E6E6EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6E6E6292929 0B0B0B000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000050505131313C6C6C6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000002A2A2A FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060606060909090909090C0C0C0C0C0C0C0C0C 0E0E0E0E0E0E0E0E0E0C0C0C0C0C0C0C0C0C0C0C0C090909090909060606060606010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000414141FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD363636000000000000000000000000 000000000000000000000000040404080808080808080808080808080808080808080808080808 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0F0F0F1212121818181C1C1C2121212525252929292E2E2E323232363636393939 3C3C3C3F3F3F4242424545454848484A4A4A4B4B4B4D4D4D515151535353545454565656575757 5959595959595959595A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5A5A5A595959595959595959585858 5757575656565454545252524F4F4F4E4E4E4C4C4C4B4B4B4949494646464444444040403D3D3D 3939393636363333332F2F2F2B2B2B2828282424241E1E1E1B1B1B1414141212120A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909080808080808080808 080808080808080808080808080808080808080808080808080808080808070707070707070707 070707070707070707070707070707070707070707060606060606060606060606060606060606 060606060606050505050505050505050505050505050505050505040404030101050101050101 0501010501010501010501010200006E6E6EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC 191919030303000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000E0E0EB5B5B5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1D1D1D000000000000000000000000000000000000000000000000020202040404040404040404 040404040404030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000171717EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 959595000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060606060909090909090909090C0C0C 0C0C0C0E0E0E0E0E0E0E0E0E0E0E0E0C0C0C0C0C0C0C0C0C0C0C0C090909090909060606060606 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 0000000000000000000000000000000000007E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF979797000000000000000000 000000000000000000000000000000010101080808080808080808080808080808080808090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0F0F0F1414141919191D1D1D2222222626262A2A2A2E2E2E333333 3737373939393E3E3E4141414444444646464949494A4A4A4D4D4D4F4F4F535353545454565656 5757575858585959595959595959595A5A5A5A5A5A5B5B5B5B5B5B5A5A5A5A5A5A595959585858 5858585858585858585656565454545252524F4F4F4E4E4E4B4B4B494949464646444444414141 3E3E3E3A3A3A3838383333333030302D2D2D2929292525252121211B1B1B1818181212120F0F0F 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909080808080808080808080808080808080808080808080808080808080808080808080808 080808070707070707070707070707070707070707070707070707070707070707060606060606 060606060606060606060606060606060606050505050505050505050505050505050505030101 0501010501010501010501010501010501010200006D6D6DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E6E6E6191919010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000E0E0EC2C2C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8F8F8171717000000000000000000000000000000000000000000020202060606060606 060606060606060606060606060606050505050505050505050505050505050505040404040404 040404040404040404040404040404040404040404040404040404040404030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303020202020202020202020202020202020202020202010101000000000000000000000000 000000000000000000121212C4C4C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF4D4D4D000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101060606060606090909090909 0909090C0C0C0C0C0C0E0E0E0E0E0E0E0E0E0E0E0E0C0C0C0C0C0C0C0C0C0C0C0C090909090909 060606060606010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000BBBBBBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED141414000000 000000000000000000000000000000000000000000050505080808080808080808090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B1010101717171C1C1C2121212424242929292E2E2E 3131313535353838383B3B3B3F3F3F4242424545454747474A4A4A4C4C4C4E4E4E505050535353 5454545656565858585858585959595959595A5A5A5A5A5A5A5A5A5A5A5A5B5B5B5A5A5A5A5A5A 5959595858585757575757575656565454545353535151514E4E4E4C4C4C4A4A4A474747464646 4343434040403D3D3D3939393636363131312D2D2D2929292626262323231D1D1D181818141414 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909080808080808080808080808080808080808080808 080808080808080808080808080808070707070707070707070707070707070707070707070707 070707060606060606060606060606060606060606060606060606050505050505050505050505 0505050301010501010501010501010501010501010501010200006D6D6DFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9292929030303000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000111111E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDFDFDF171717000000000000000000000000000000000000000000050505 070707060606060606060606060606060606060606050505050505050505050505050505050505 040404040404040404040404040404040404040404040404040404040404040404040404030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303020202020202020202020202020202020202020202000000000000 000000000000000000000000000000080808A9A9A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F90C0C0C000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101060606060606090909 0909090909090C0C0C0C0C0C0C0C0C0E0E0E0E0E0E0E0E0E0E0E0E0C0C0C0C0C0C0C0C0C0C0C0C 090909060606060606060606010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000040404F2F2F2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF656565 000000000000000000000000000000000000000000000000020202080808080808090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090909090909090909090909090909090909090A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B1010101313131919191D1D1D232323262626 2A2A2A2F2F2F3333333535353939393C3C3C3F3F3F4343434646464848484B4B4B4D4D4D4F4F4F 5151515353535454545656565757575858585959595A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5B5B5B 5A5A5A5959595959595858585757575555555454545353535151514F4F4F4C4C4C4A4A4A484848 4747474444444141413E3E3E3A3A3A3737373535352F2F2F2C2C2C2929292424242121211C1C1C 1515151313130A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909080808080808 080808080808080808080808080808080808080808080808080808070707070707070707070707 070707070707070707070707070707060606060606060606060606060606060606060606060606 0505050505050505050301010501010501010501010501010501010501010200006D6D6DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF6B6B6B0B0B0B000000000000000000000000000000000000000000000000 0000000000000000000202020707070B0B0B0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909070707050505010101000000000000000000000000000000 0000000000000000000000000000000000000303032D2D2DFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000000000000000 000000050505070707070707060606060606060606060606060606060606050505050505050505 050505050505050505040404040404040404040404040404040404040404040404040404040404 040404040404030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303020202020202020202020202020202020202 0000000000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBCBCBC000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0606060909090909090C0C0C0C0C0C0C0C0C0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0C0C0C0C0C0C 0C0C0C0C0C0C090909060606060606010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000343434FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CCCCCC020202000000000000000000000000000000000000000000000000080808090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090909090909090909090909090909090A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B1010101515151A1A1A1E1E1E 2424242727272C2C2C3030303434343636363939393C3C3C4040404343434747474A4A4A4C4C4C 4E4E4E5151515252525353535555555656565858585959595A5A5A5B5B5B5B5B5B5B5B5B5B5B5B 5B5B5B5B5B5B5B5B5B5A5A5A5959595858585656565555555353535252525252524F4F4F4D4D4D 4A4A4A4747474545454141413F3F3F3C3C3C3838383535353131312C2C2C292929242424222222 1D1D1D1717171313131010100B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909080808080808080808080808080808080808080808080808080808080808080808 070707070707070707070707070707070707070707070707070707060606060606060606060606 060606060606060606050505050505030101050101050101050101050101050101050101020000 6D6D6DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD3D3D30D0D0D000000000000000000000000000000000000000000 0000000000000000000D0D0D1E1E1E2929292B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929292929 292929282828282828282828282828282828282828282828272727272727272727272727272727 272727262626262626262626262626262626252525252525252525252525252525252525242424 242424242424242424242424242424242424232323232323232323232323232323232323222222 222222222222222222222222222222212121212121212121212121212121212121202020202020 2020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B141414080808000000 0000000000000000000000000000000000000000000000000000000C0C0C959595FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000 000000000000000000050505070707070707070707060606060606060606060606060606060606 050505050505050505050505050505050505040404040404040404040404040404040404040404 040404040404040404040404040404030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303020202020202020202020202 0202020202020000000000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF747474000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060606060909090909090909090C0C0C0C0C0C0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0C0C0C0C0C0C090909090909060606060606010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 717171FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFD373737000000000000000000000000000000000000000000000000040404090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B101010151515 1C1C1C1F1F1F2525252A2A2A2D2D2D3232323535353838383C3C3C3F3F3F424242454545484848 4B4B4B4D4D4D4F4F4F5151515252525454545555555656565858585A5A5A5A5A5A5B5B5B5B5B5B 5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A585858585858565656545454525252525252505050 4E4E4E4B4B4B4848484545454343434040403D3D3D3A3A3A3636363333333030302B2B2B272727 2323231D1D1D1919191313131010100B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909 090909090909090909090909090909090909090909080808080808080808080808080808080808 080808080808080808080808070707070707070707070707070707070707070707070707070707 060606060606060606060606060606060606060606030101050101050101050101050101050101 0501010200006D6D6DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF393939010101000000000000000000000000000000 0000000000000000000505052121212C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929 292929292929292929292929292929292929282828282828282828282828282828282828282828 272727272727272727272727272727262626262626262626262626262626262626252525252525 252525252525252525252525242424242424242424242424242424242424232323232323232323 232323232323232323222222222222222222222222222222222222212121212121212121212121 2121212121212020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1C1C1C161616040404000000000000000000000000000000000000000000000000000000111111 F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000 000000000000000000000000000000050505070707070707070707060606060606060606060606 060606060606050505050505050505050505050505050505050505040404040404040404040404 040404040404040404040404040404040404040404030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303020202 0202020202020202020202020000000000000000000000000000000000000000000101019C9C9C FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C2C2C000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090909090909090C0C0C0C0C0C0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0C0C0C0C0C0C0C0C0C0C0C0C090909090909060606010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000ADADADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF999999000000000000000000000000000000000000000000000000010101 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C 1313131818181E1E1E2222222626262B2B2B2F2F2F3333333636363A3A3A3D3D3D404040434343 4646464949494C4C4C4E4E4E5050505252525353535555555656565757575858585A5A5A5A5A5A 5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A585858575757565656555555535353515151 5050504F4F4F4D4D4D4949494646464444444242423F3F3F3C3C3C3939393535353131312D2D2D 2929292525252020201B1B1B1616161111110C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909090909090909090909090909090909090909090909080808080808 080808080808080808080808080808080808080808080808070707070707070707070707070707 070707070707070707070707060606060606060606060606060606040202050101050101050101 0501010501010501010200006C6C6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCECECE0F0F0F000000000000000000000000 0000000000000000000000000A0A0A2828282C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929292929282828282828 282828282828282828282828272727272727272727272727272727272727262626262626262626 262626262626252525252525252525252525252525252525242424242424242424242424242424 242424232323232323232323232323232323232323222222222222222222222222222222222222 2121212121212121212121212121212121212020202020202020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1C1C1C1A1A1A060606000000000000000000000000000000000000000000 0000000B0B0B8D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616 000000000000000000000000000000000000000000050505070707070707070707070707060606 060606060606060606060606060606050505050505050505050505050505050505040404040404 040404040404040404040404040404040404040404040404040404040404030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303020202020202020202020202020202000000000000000000000000000000000000000000 0101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEECECECDADADACCCCCC C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0CECECE DFDFDFF0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060606060909090909090C0C0C0C0C0C0C0C0C0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0C0C0C0C0C0C0C0C0C0C0C0C090909090909060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000010101E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF0F0F0151515000000000000000000000000000000000000000000 000000060606090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C1111111313131A1A1A2020202323232828282C2C2C3030303434343838383B3B3B3F3F3F 4242424444444747474A4A4A4D4D4D4F4F4F5050505252525454545656565757575858585A5A5A 5B5B5B5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A595959575757575757555555 5353535151514F4F4F4D4D4D4C4C4C4949494646464444444141413D3D3D3A3A3A373737333333 2F2F2F2B2B2B2727272323231E1E1E1818181313131111110C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909090909090909090909 090909090909090909080808080808080808080808080808080808080808080808080808070707 070707070707070707070707070707070707070707060606060606060606060606040202050101 0501010501010501010501010501010200006C6C6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E5E5E020202000000000000 0000000000000000000000000000000606062929292D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929 292929292929292929282828282828282828282828282828282828272727272727272727272727 272727262626262626262626262626262626252525252525252525252525252525252525242424 242424242424242424242424242424232323232323232323232323232323232323222222222222 222222222222222222222222212121212121212121212121212121202020202020202020202020 2020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1A1A1A040404000000000000000000000000 0000000000000000000000001E1E1EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D3D3D3161616000000000000000000000000000000000000000000050505070707070707070707 070707070707060606060606060606060606060606060606050505050505050505050505050505 050505040404040404040404040404040404040404040404040404040404040404040404040404 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303020202020202020202020202000000000000000000000000000000 0000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6ACACAC585858141414030303020202 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010000000101010303031C1C1C6F6F6FC0C0C0FDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B9B9B 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060606060909090C0C0C0C0C0C0C0C0C0C0C0C0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0C0C0C0C0C0C090909090909060606060606010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000242424FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF747474000000000000000000000000000000000000 000000000000020202090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C1111111616161B1B1B2222222525252A2A2A2D2D2D3232323535353A3A3A 3D3D3D4040404343434646464949494C4C4C4D4D4D4F4F4F505050535353545454575757585858 5959595A5A5A5B5B5B5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5B5B5B595959585858575757 5656565454545252525050504E4E4E4D4D4D4B4B4B4747474444444242423F3F3F3C3C3C393939 3535353131312D2D2D2A2A2A2525252121211B1B1B1414141111110C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 090909090909090909090909090909090909090909080808080808080808080808080808080808 080808080808080808070707070707070707070707070707070707070707070707060606060606 0402020501010501010501010501010501010501010200006C6C6CFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC0F0F0F000000 0000000000000000000000000000000000000000002424242D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A292929292929292929292929292929292929282828282828282828282828282828282828 272727272727272727272727272727262626262626262626262626262626252525252525252525 252525252525252525242424242424242424242424242424242424232323232323232323232323 232323232323222222222222222222222222222222212121212121212121212121212121212121 2020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C171717000000000000 000000000000000000000000000000000000101010D4D4D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD3D3D3161616000000000000000000000000000000000000000000050505070707 070707070707070707070707060606060606060606060606060606060606060606050505050505 050505050505050505050505040404040404040404040404040404040404040404040404040404 040404040404030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303020202020202020202000000000000000000 0000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD5D5D5D0B0B0B050505000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000303030E0E0E828282F2F2F2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF535353000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090909090C0C0C0C0C0C0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0C0C0C0C0C0C090909090909060606 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0000000000000000000000000000000000000000005B5B5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE070707000000000000000000000000 000000000000000000000000070707090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C1111111616161E1E1E2323232626262B2B2B2F2F2F323232 3737373B3B3B3E3E3E4141414444444747474949494C4C4C4E4E4E4F4F4F515151535353555555 5757575858585959595A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5B5B5B595959 5858585656565555555454545252524F4F4F4D4D4D4C4C4C4A4A4A4646464343433F3F3F3E3E3E 3A3A3A3636363232323030302B2B2B2626262323231F1F1F1919191212120D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909090909090909090909090909090909090909090909080808080808 080808080808080808080808080808080808080808070707070707070707070707070707070707 0707070707070402020501010501010501010501010501010501010200006C6C6CFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCB 1212120000000000000000000000000000000000000000001010102E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929292929282828 282828282828282828282828272727272727272727272727272727262626262626262626262626 262626252525252525252525252525252525252525242424242424242424242424242424242424 232323232323232323232323232323222222222222222222222222222222222222212121212121 2121212121212121212020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 0B0B0B0000000000000000000000000000000000000000000606068D8D8DFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F3F3A6A6A64C4C4C2E2E2E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 2525253A3A3A797979D4D4D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000000000000000000000 060606070707070707070707070707070707070707060606060606060606060606060606060606 050505050505050505050505050505050505040404040404040404040404040404040404040404 040404040404040404040404040404030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303020202020202020202000000 0000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF6161610C0C0C010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000A0A0A939393FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFBFBFB101010000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060606060909090909090C0C0C 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0C0C0C0C0C0C090909 060606060606010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000929292FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF545454000000000000000000 000000000000000000000000000000040404090909090909090909090909090909090909090909 0909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D1414141919191F1F1F2424242727272C2C2C 3131313434343939393C3C3C3E3E3E4242424444444747474949494C4C4C4E4E4E505050515151 5353535555555757575858585959595A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A 5959595858585757575656565555555353535151514F4F4F4C4C4C4A4A4A484848454545424242 3F3F3F3C3C3C3838383434343131312D2D2D2828282525252020201C1C1C1414140D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909090909090909 090909090909080808080808080808080808080808080808080808080808080808070707070707 0707070707070707070707070402020501010501010501010501010501010501010200006C6C6C FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF9191910505050000000000000000000000000000000000000000002424242E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929 292929292929292929282828282828282828282828282828282828272727272727272727272727 262626262626262626262626262626252525252525252525252525252525242424242424242424 242424242424242424232323232323232323232323232323232323222222222222222222222222 2222222121212121212121212121212121212121212020202020202020202020202020201F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C171717000000000000000000000000000000000000000000000000444444FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFE8787871818180A0A0A000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000101011515153E3E3EDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000000000 000000000000060606080808070707070707070707070707070707070707060606060606060606 060606060606060606050505050505050505050505050505050505040404040404040404040404 040404040404040404040404040404040404040404040404030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303020202 0202020000000000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0141414050505000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000020202272727E6E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC3C3C3000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101060606060606060606090909 0C0C0C0C0C0C0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1010101010100E0E0E0E0E0E0E0E0E0C0C0C 090909090909060606060606010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000C8C8C8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3C3C3010101000000 000000000000000000000000000000000000010101080808090909090909090909090909090909 0909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D1212121717171B1B1B202020252525 2828282E2E2E3131313535353939393D3D3D3F3F3F4242424545454848484949494C4C4C4F4F4F 5151515353535555555757575757575858585959595A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A 5A5A5A5959595858585757575757575555555454545252525050504D4D4D4B4B4B494949474747 4343434040403D3D3D3B3B3B3737373333333030302C2C2C2727272323231F1F1F1A1A1A131313 0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 090909090909090909090909090909090909080808080808080808080808080808080808080808 080808080808070707070707070707070707040202050101050101050101050101050101050101 0200006B6B6BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF5D5D5D0000000000000000000000000000000000000000000404042E2E2E 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A292929292929292929292929292929292929282828282828282828282828282828 272727272727272727272727262626262626262626262626262626252525252525252525252525 252525242424242424242424242424242424242424232323232323232323232323232323232323 222222222222222222222222222222212121212121212121212121212121202020202020202020 2020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C030303000000000000000000000000000000000000000000 1E1E1EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F74444440E0E0E000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000151515BFBFBFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000 000000000000000000000000060606080808070707070707070707070707070707070707070707 060606060606060606060606060606060606050505050505050505050505050505050505040404 040404040404040404040404040404040404040404040404040404040404030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 0303030202020202020000000000000000000000000000000000000000000101019C9C9CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9090900E0E0E000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909CBCBCBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606060606 0909090909090C0C0C0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1010101010101010100E0E0E0E0E0E 0E0E0E0C0C0C090909090909060606060606010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000070707 F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE353535 000000000000000000000000000000000000000000000000060606090909090909090909090909 0909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D1212121717171C1C1C 2121212626262929292E2E2E3333333737373B3B3B3D3D3D4141414444444747474848484A4A4A 4D4D4D5050505151515353535555555656565757575858585959595A5A5A5B5B5B5B5B5B5B5B5B 5B5B5B5959595959595959595858585757575656565454545353535151514F4F4F4C4C4C4A4A4A 4949494646464242423F3F3F3C3C3C3939393535353131312D2D2D2929292424242121211C1C1C 1818181313130E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 090909090909090909090909090909090909090909090909090909090909080808080808080808 080808080808080808080808080808070707070707070707040202050101050101050101050101 0501010501010200006B6B6BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D3D3D000000000000000000000000000000000000000000 0D0D0D2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929282828 282828282828282828282828272727272727272727272727262626262626262626262626262626 252525252525252525252525252525242424242424242424242424242424242424232323232323 232323232323232323222222222222222222222222222222222222212121212121212121212121 2121212020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D080808000000000000000000000000000000 0000000000000B0B0BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E4E4E080808000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000151515 D7D7D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000 000000000000000000000000000000000000060606080808080808070707070707070707070707 070707070707060606060606060606060606060606060606050505050505050505050505050505 050505040404040404040404040404040404040404040404040404040404040404040404040404 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303020202000000000000000000000000000000000000000000010101 9C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8080800D0D0D000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000040404BFBFBF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3F000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090909090C0C0C0E0E0E0E0E0E0E0E0E0E0E0E101010101010101010101010101010 0E0E0E0E0E0E0E0E0E0C0C0C090909090909060606060606010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000373737FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A2A2A2000000000000000000000000000000000000000000000000020202090909090909090909 0909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D131313 1A1A1A1F1F1F2323232727272C2C2C3030303333333737373C3C3C3E3E3E414141454545474747 4949494B4B4B4E4E4E5050505252525353535555555656565757575858585959595A5A5A5B5B5B 5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5858585757575555555353535252525151514F4F4F 4C4C4C4A4A4A4747474545454141413E3E3E3A3A3A3838383333332E2E2E2B2B2B272727212121 1D1D1D1818181313130E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909090909090909 090909080808080808080808080808080808080808080808080808070707040202050101050101 0501010501010501010501010200006B6B6BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2F000000000000000000000000000000 0000000000001111113030303030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929 292929292929292929282828282828282828282828282828272727272727272727272727262626 262626262626262626262626252525252525252525252525252525242424242424242424242424 242424232323232323232323232323232323232323222222222222222222222222222222212121 2121212121212121212121212020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D0C0C0C000000000000000000 0000000000000000000000000B0B0BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8A8A80F0F0F000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000292929FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3 161616000000000000000000000000000000000000000000060606080808080808080808070707 070707070707070707070707070707060606060606060606060606060606060606050505050505 050505050505050505050505040404040404040404040404040404040404040404040404040404 040404040404040404030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303000000000000000000000000000000000000 0000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9595950E0E0E 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000040404D0D0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7080808000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060606060909090C0C0C0C0C0C0E0E0E0E0E0E101010101010101010101010101010 1010101010100E0E0E0E0E0E0E0E0E0C0C0C090909090909060606060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 0000000000000000006E6E6EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6F61E1E1E000000000000000000000000000000000000000000000000070707090909 0909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E 1313131515151A1A1A2020202424242929292D2D2D3030303434343838383B3B3B3F3F3F424242 4545454848484949494C4C4C4F4F4F5151515252525353535555555757575959595A5A5A5A5A5A 5B5B5B5B5B5B5C5C5C5B5B5B5B5B5B5A5A5A595959595959585858565656545454525252525252 5050504E4E4E4B4B4B4848484545454343433F3F3F3C3C3C3939393636363232322D2D2D2A2A2A 2525252020201D1D1D1414140F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 090909090909090909090909090909080808080808080808080808080808080808080808040202 0501010501010501010501010501010501010200006B6B6BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000 000000000000000000000000141414303030303030303030303030303030303030303030303030 3030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A292929292929292929292929292929282828282828282828282828282828272727 272727272727272727262626262626262626262626262626252525252525252525252525242424 242424242424242424242424242424232323232323232323232323232323222222222222222222 2222222222222121212121212121212121212121212020202020202020202020202020201F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D0D0D0D000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF212121000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000101010B1B1B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD3D3D3161616000000000000000000000000000000000000000000060606080808080808 080808080808070707070707070707070707070707070707060606060606060606060606060606 060606050505050505050505050505050505050505040404040404040404040404040404040404 040404040404040404040404040404030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303000000000000000000000000 0000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9 0D0D0D000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000090909F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBCBCBC000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090909090C0C0C0E0E0E0E0E0E101010101010101010101010 1010101111111010101010101010100E0E0E0C0C0C0C0C0C090909090909060606060606010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF828282000000000000000000000000000000000000000000000000030303 0909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E1313131818181C1C1C2121212525252B2B2B2F2F2F3131313535353939393C3C3C 4141414444444646464949494B4B4B4D4D4D515151525252535353545454565656575757595959 5A5A5A5B5B5B5B5B5B5C5C5C5B5B5B5A5A5A5A5A5A595959595959585858575757555555535353 5252525151514F4F4F4C4C4C4949494747474545454141413D3D3D3A3A3A373737343434303030 2D2D2D2828282222221E1E1E1919190F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 090909090909090909090909090909090909090909090909090909080808080808080808080808 0808080402020501010501010501010501010501010501010200006B6B6BFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000 000000000000000000000000000000000000141414313131313131313131313131313131303030 3030303030303030303030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929282828282828 282828282828282828272727272727272727272727262626262626262626262626252525252525 252525252525252525242424242424242424242424242424242424232323232323232323232323 232323222222222222222222222222222222212121212121212121212121212121202020202020 2020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D 0D0D0D0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1D1D1151515 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000000000000000000000060606 080808080808080808080808070707070707070707070707070707070707060606060606060606 060606060606060606050505050505050505050505050505050505040404040404040404040404 040404040404040404040404040404040404040404040404030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303000000000000 0000000000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7F71A1A1A000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000020202020202020202020202020202020202020202030303030303030303 040404040404050505050505050505050505050505050505050505060606060606060606060606 060606060606070707070707070707070707070707070707070707080808080808080808080808 080808080808090909090909090909090909090909090909090909080808080808080808080808 080808070707070707070707070707060606060606050505050505050505040404030303020202 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000353535FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 7B7B7B000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060606060909090909090C0C0C0E0E0E0E0E0E101010101010 1010101010101010101010101010101010100E0E0E0E0E0E0C0C0C0C0C0C090909060606060606 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000DCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE8E8E80D0D0D000000000000000000000000000000000000000000 0000000808080909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E1313131818181D1D1D2121212727272D2D2D2F2F2F333333373737 3A3A3A3E3E3E4242424545454747474A4A4A4C4C4C4E4E4E515151525252535353545454565656 5757575A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5B5B5B5A5A5A5A5A5A595959585858585858575757 5454545252525151514F4F4F4E4E4E4C4C4C4949494646464343434040403C3C3C393939363636 3333332D2D2D2929292525252121211B1B1B1616160F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909090909090909 0808080808080808080402020501010501010501010501010501010501010200006B6B6BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 2A2A2A000000000000000000000000000000000000000000141414313131313131313131313131 313131313131313131313131313131313131303030303030303030303030303030303030303030 3030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929 292929292929282828282828282828282828272727272727272727272727272727262626262626 262626262626252525252525252525252525252525242424242424242424242424242424232323 232323232323232323232323222222222222222222222222222222212121212121212121212121 2121212020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1E1E1E0D0D0D0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 939393010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000001C1C1CFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000000000000000 000000060606080808080808080808080808080808070707070707070707070707070707070707 060606060606060606060606060606060606050505050505050505050505050505050505040404 040404040404040404040404040404040404040404040404040404040404030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 0000000000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7878780A0A0A000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000090909090909090909090909090909090909101010101010 1010101616161616161919191919191919191D1D1D1D1D1D202020202020202020242424242424 2626262626262828282A2A2A2A2A2A2D2D2D2F2F2F2F2F2F313131313131313131333333333333 353535353535363636363636363636363636363636383838363636363636363636363636363636 3535353535353535353131312F2F2F2F2F2F2D2D2D2A2A2A2626262424242020201D1D1D191919 161616101010090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101B1B1B1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF3A3A3A000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060606060909090909090C0C0C0E0E0E0E0E0E 1010101010101111111010101010101010101010101010100E0E0E0E0E0E0C0C0C090909090909 060606060606010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000131313FEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000000000000000 0000000000000404040A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1616161B1B1B2020202424242828282D2D2D313131 3434343737373A3A3A3F3F3F4242424545454848484A4A4A4D4D4D4F4F4F515151535353535353 5555555656565959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5B5B5B5A5A5A5A5A5A5A5A5A595959 5858585757575555555252525050504F4F4F4E4E4E4C4C4C4848484545454343433F3F3F3B3B3B 3838383434343030302C2C2C2929292323231F1F1F171717151515101010101010101010101010 1010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 090909090909090909080808080808040202050101050101050101050101050101050101020000 6A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000141414323232323232 323232323232313131313131313131313131313131313131313131313131313131313131303030 3030303030303030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A 2A2A2A292929292929292929292929292929282828282828282828282828272727272727272727 272727272727262626262626262626262626252525252525252525252525242424242424242424 242424242424242424232323232323232323232323232323222222222222222222222222222222 2121212121212121212121212121212020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E0E0E0E0000000000000000000000000000000000000000000B0B0B FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF6F6F6F000000000000000000000000000000000000000000010101090909090909 080808080808080808080808080808080808080808080808080808080808080808080808070707 070707070707070707070707070707070707070707060606060606060606060606060606060606 060606060606060606030303000000000000000000000000000000000000000000181818FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000 000000000000000000070707080808080808080808080808080808080808070707070707070707 070707070707070707060606060606060606060606060606060606050505050505050505050505 050505040404040404040404040404040404040404040404040404040404040404040404040404 030303030303030303030303030303030303030303030303030303030303030303030303030303 0303030303030000000000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEDEDED0E0E0E000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000090909090909090909090909090909101010 1010101010101616161616161919191919191D1D1D1D1D1D202020202020242424242424262626 2626262828282A2A2A2A2A2A2D2D2D2F2F2F2F2F2F313131313131333333333333353535363636 3636363636363838383A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3A3A3A3A3A3A3A3A3A3838383535353535353333333131312D2D2D2A2A2A282828262626 202020202020191919161616090909090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000F0F0F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3F3050505000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060606060909090C0C0C0C0C0C 0E0E0E1010101010101010101111111010101010101010101010101010100E0E0E0C0C0C0C0C0C 090909090909060606060606010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010000000000000000000000000000000000000000004B4B4BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D0030303000000000000000000000000 0000000000000000000101010909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F1414141616161B1B1B212121262626292929 2D2D2D3131313636363939393C3C3C4040404343434646464848484B4B4B4E4E4E4F4F4F525252 5454545555555656565757575858585A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A 5959595858585656565555555454545252524F4F4F4E4E4E4D4D4D4A4A4A474747444444424242 3D3D3D3A3A3A3737373333332F2F2F2A2A2A2727272222221E1E1E171717101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 1010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909090909090909090909040202050101050101050101050101050101 0501010200006A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000141414 323232323232323232323232323232323232323232323232323232313131313131313131313131 3131313131313131313131313030303030303030303030303030303030303030303030302F2F2F 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929282828282828282828 282828272727272727272727272727262626262626262626262626252525252525252525252525 252525242424242424242424242424242424232323232323232323232323232323222222222222 2222222222222222222121212121212121212121212121212020202020202020202020201F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E0E0E0E000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000000000000000000000040404 161616161616161616151515151515151515151515141414141414141414141414131313131313 131313131313121212121212121212121212111111111111111111101010101010101010101010 1010101010100F0F0F0F0F0F0F0F0F090909000000000000000000000000000000000000000000 171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000 000000000000000000000000000000070707080808080808080808080808080808080808070707 070707070707070707070707070707060606060606060606060606060606060606050505050505 050505050505050505050505040404040404040404040404040404040404040404040404040404 040404040404040404030303030303030303030303030303030303030303030303030303030303 0303030303030303030303030000000000000000000000000000000000000000000101019C9C9C FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E7E7E080808000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909090909 0909091010101010101616161616161919191919191D1D1D1D1D1D202020202020242424262626 2626262828282A2A2A2A2A2A2D2D2D2F2F2F313131333333353535333333353535353535363636 3838383A3A3A3A3A3A3B3B3B3D3D3D3D3D3D3D3D3D3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F414141 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3D3D3D3D3D3D3A3A3A3838383838383636363333332F2F2F 2D2D2D2A2A2A262626242424202020191919101010090909090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101A8A8A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7B7B7000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101060606060606090909090909 0C0C0C0C0C0C0E0E0E1010101010101111111111111010101010101010101010101010100E0E0E 0C0C0C0C0C0C090909090909060606060606010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000808080 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF444444000000000000000000 0000000000000000000000000000000505050A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1414141919191D1D1D212121 2727272B2B2B2E2E2E3131313737373A3A3A3E3E3E4242424444444646464949494C4C4C4E4E4E 4F4F4F5252525454545555555656565757575858585959595A5A5A5A5A5A5A5A5A5A5A5A5A5A5A 5A5A5A5959595858585757575555555454545353535252524F4F4F4E4E4E4B4B4B494949464646 4242424040403D3D3D3838383636363232322D2D2D2929292323232121211C1C1C151515101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 1010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909040202050101050101050101 050101050101050101020000696969FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000 000000151515333333333333333333333333323232323232323232323232323232323232323232 323232323232313131313131313131313131313131313131313131313131303030303030303030 3030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929 292929282828282828282828282828272727272727272727272727262626262626262626262626 252525252525252525252525242424242424242424242424242424242424232323232323232323 232323232323222222222222222222222222212121212121212121212121212121202020202020 2020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E0E0E0E000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000000000000000 000000040404161616161616161616161616151515151515151515151515141414141414141414 141414131313131313131313131313121212121212121212111111111111111111111111101010 1010101010101010101010100F0F0F0F0F0F0F0F0F090909000000000000000000000000000000 000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616 000000000000000000000000000000000000000000070707090909080808080808080808080808 080808080808070707070707070707070707070707070707060606060606060606060606060606 060606050505050505050505050505050505050505040404040404040404040404040404040404 040404040404040404040404040404030303030303030303030303030303030303030303030303 030303030303030303030303030303030303000000000000000000000000000000000000000000 0101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE181818000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909090909090909091010101010101616161616161919191919191D1D1D1D1D1D202020242424 2626262828282828282A2A2A2A2A2A2D2D2D2F2F2F313131333333363636363636363636363636 3838383A3A3A3B3B3B3D3D3D3F3F3F3F3F3F414141414141424242424242424242444444444444 4545454545454545454545454545454444444242424242424242423F3F3F3F3F3F3D3D3D3B3B3B 3838383636363131313131312A2A2A282828262626202020191919101010090909090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000212121FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF757575000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0909090C0C0C0C0C0C0E0E0E101010101010111111111111111111111111111111111111101010 1010100E0E0E0C0C0C0C0C0C090909060606060606010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000B2B2B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000000000 0000000000000000000000000000000000000101010A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F141414191919 1E1E1E2222222828282C2C2C3030303333333737373B3B3B3E3E3E4242424444444747474A4A4A 4C4C4C4E4E4E5050505252525454545555555656565757575858585A5A5A5959595A5A5A5B5B5B 5B5B5B5B5B5B5A5A5A5A5A5A5858585656565656565555555454545252524F4F4F4D4D4D4C4C4C 4949494646464343434141413D3D3D3838383636362F2F2F2B2B2B2727272222221F1F1F1B1B1B 161616111111111111111111111111111111111111111111111111111111111111111111101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 1010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909040202050101 0501010501010501010501010501010200006A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000 000000000000000000151515333333333333333333333333333333333333333333333333323232 323232323232323232323232323232323232323232323232313131313131313131313131313131 3131313131313030303030303030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A 292929292929292929292929282828282828282828282828272727272727272727272727262626 262626262626262626252525252525252525252525252525242424242424242424242424242424 232323232323232323232323232323222222222222222222222222222222212121212121212121 2121212020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F0E0E0E000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000 000000000000000000040404171717161616161616161616161616151515151515151515151515 141414141414141414141414131313131313131313121212121212121212121212111111111111 1111111111111010101010101010101010101010100F0F0F0F0F0F090909000000000000000000 000000000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D3D3D3161616000000000000000000000000000000000000000000070707090909090909080808 080808080808080808080808080808070707070707070707070707070707070707060606060606 060606060606060606050505050505050505050505050505050505040404040404040404040404 040404040404040404040404040404040404040404040404030303030303030303030303030303 030303030303030303030303030303030303030303030303000000000000000000000000000000 0000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCECECE111111000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909090909090909091010101010101616161616161919191919191D1D1D1D1D1D 2020202424242626262828282828282A2A2A2D2D2D2D2D2D313131333333353535363636383838 3A3A3A3B3B3B3B3B3B3D3D3D3F3F3F424242444444444444454545454545464646464646464646 484848484848494949494949494949494949494949484848464646464646464646454545454545 4242424141413F3F3F3B3B3B3838383636362D2D2D2D2D2D2A2A2A262626202020191919161616 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF343434000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090909090C0C0C0E0E0E0E0E0E101010111111111111111111111111111111111111 1111111010101010100E0E0E0C0C0C090909090909060606060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101020202000000000000000000000000000000 000000000000000000E3E3E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF383838 0000000000000000000000000000000000000000000000000707070A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 1515151A1A1A1F1F1F2525252929292D2D2D3030303434343838383B3B3B3F3F3F434343444444 4747474A4A4A4D4D4D4E4E4E5050505252525555555656565656565757575959595A5A5A5A5A5A 5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5959595858585656565555555454545353535151514E4E4E 4B4B4B4A4A4A4848484545454141413F3F3F3B3B3B3737373434342E2E2E2A2A2A242424202020 1B1B1B161616111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111101010101010101010101010 1010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909 0402020501010501010501010501010501010501010200006A6A6AFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000 000000000000000000000000000000151515343434343434343434333333333333333333333333 333333333333333333333333333333323232323232323232323232323232323232323232323232 313131313131313131313131313131313131313131303030303030303030303030303030303030 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828282828282828272727 272727272727272727262626262626262626262626252525252525252525252525242424242424 242424242424242424232323232323232323232323232323222222222222222222222222222222 2121212121212121212121212121212020202020202020202020201F1F1F1F1F1F1F1F1F0E0E0E 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000 000000000000000000000000000000040404171717171717161616161616161616161616151515 151515151515151515141414141414141414141414131313131313131313121212121212121212 1212121111111111111111111111111010101010101010101010101010100F0F0F090909000000 000000000000000000000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD3D3D3161616000000000000000000000000000000000000000000070707090909 090909080808080808080808080808080808080808070707070707070707070707070707070707 060606060606060606060606060606060606050505050505050505050505050505050505040404 040404040404040404040404040404040404040404040404040404040404030303030303030303 030303030303030303030303030303030303030303030303030303030303000000000000000000 0000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A060606000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000090909090909090909101010161616161616191919191919 1D1D1D1D1D1D2020202424242626262828282A2A2A2D2D2D2F2F2F313131333333353535363636 3838383A3A3A3D3D3D3F3F3F4141414242424242424545454646464646464A4A4A4B4B4B4B4B4B 4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D 4949494848484646464545454242423F3F3F3D3D3D3B3B3B3535353333332F2F2F2A2A2A262626 202020191919161616101010090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101999999FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0030303000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060606060909090C0C0C0E0E0E0E0E0E101010101010111111111111111111111111 1111111111111111111010101010100E0E0E0C0C0C090909060606060606060606010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101020202020202000000000000000000 000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AFAFAF0000000000000000000000000000000000000000000000000202020A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010 1010101010101717171C1C1C2121212626262A2A2A2E2E2E3232323535353838383C3C3C404040 4242424545454949494C4C4C4D4D4D4F4F4F515151545454565656565656565656585858595959 5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5A5A5A595959585858575757565656555555535353525252 5050504D4D4D4B4B4B4949494747474343434141413D3D3D3939393535353131312C2C2C292929 2323231D1D1D181818161616111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111101010101010101010101010101010101010101010101010101010 1010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A090909040202050101050101050101050101050101050101020000696969FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A 000000000000000000000000000000000000000000151515343434343434343434343434343434 343434343434343434333333333333333333333333333333333333333333333333323232323232 323232323232323232323232323232313131313131313131313131313131313131313131303030 3030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B 2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828 282828282828282828272727272727272727272727262626262626262626252525252525252525 252525252525242424242424242424242424242424232323232323232323232323232323222222 2222222222222222222121212121212121212121212121212020202020202020202020201F1F1F 1F1F1F0E0E0E0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262 000000000000000000000000000000000000000000040404171717171717171717161616161616 161616161616151515151515151515151515141414141414141414131313131313131313131313 121212121212121212121212111111111111111111111111101010101010101010101010101010 090909000000000000000000000000000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000000000000000000000 070707090909090909090909080808080808080808080808080808080808070707070707070707 070707070707070707060606060606060606060606060606060606050505050505050505050505 050505050505040404040404040404040404040404040404040404040404040404040404040404 030303030303030303030303030303030303030303030303030303030303030303030303000000 0000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF474747 000000000000000000000000000000000000000000000000000000000000010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909090909101010101010161616 1616161919191D1D1D1D1D1D2020202424242626262828282A2A2A2F2F2F313131313131333333 3636363838383A3A3A3A3A3A3F3F3F4242424242424545454545454646464949494949494D4D4D 4F4F4F4F4F4F4F4F4F505050505050505050505050505050505050505050505050505050505050 5050505050504B4B4B4B4B4B4B4B4B4A4A4A4848484545454141413F3F3F3A3A3A363636333333 2F2F2F2D2D2D282828202020191919161616101010090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000464646FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0B0 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060606060909090C0C0C0E0E0E101010101010111111111111111111 1111111111111111111111111111111010101010100E0E0E0C0C0C090909060606060606060606 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101020202010101000000 000000000000000000000000000000000000454545FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFD2F2F2F0000000000000000000000000000000000000000000000000808080A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010 1010101010101010101010101717171E1E1E2121212727272B2B2B2E2E2E3333333636363A3A3A 3E3E3E4040404444444747474949494B4B4B4E4E4E505050525252545454565656565656575757 5858585959595A5A5A5A5A5A5B5B5B5B5B5B5A5A5A595959595959595959585858565656545454 5353535252525050504D4D4D4A4A4A4949494646464343433F3F3F3D3D3D383838343434303030 2C2C2C2929292323231E1E1E191919161616121212121212121212121212121212121212121212 121212121212121212121212121212121212111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111101010101010 1010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A040202050101050101050101050101050101050101020000696969 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF2A2A2A000000000000000000000000000000000000000000161616353535353535343434 343434343434343434343434343434343434343434343434343434333333333333333333333333 333333333333333333333333323232323232323232323232323232323232313131313131313131 3131313131313131313131313030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929 292929292929282828282828282828282828272727272727272727272727262626262626262626 262626252525252525252525252525242424242424242424242424242424232323232323232323 232323232323222222222222222222222222222222212121212121212121212121202020202020 2020202020202020200E0E0E0000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF626262000000000000000000000000000000000000000000040404171717171717171717 171717161616161616161616161616151515151515151515141414141414141414141414131313 131313131313131313121212121212121212121212111111111111111111111111101010101010 1010101010100A0A0A000000000000000000000000000000000000000000171717FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000000000 000000000000070707090909090909090909090909080808080808080808080808080808080808 070707070707070707070707070707060606060606060606060606060606060606050505050505 050505050505050505050505040404040404040404040404040404040404040404040404040404 040404040404040404030303030303030303030303030303030303030303030303030303030303 0303030000000000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF202020000000000000000000000000000000000000000000000000000000000000010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909090909 1010101616161616161919191D1D1D1D1D1D2020202424242626262828282A2A2A2F2F2F313131 3333333535353636363A3A3A3B3B3B3D3D3D4141414444444545454646464848484949494B4B4B 4B4B4B505050505050505050525252525252535353535353535353535353535353535353535353 5353535353535353535353535050505050505050504D4D4D4B4B4B4949494646464545453F3F3F 3B3B3B3838383535353131312D2D2D262626202020191919161616090909090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 191919FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF6F6F6F000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060606060909090C0C0C0C0C0C0E0E0E101010101010111111 1313131313131313131313131111111111111111111010100E0E0E0C0C0C090909090909060606 060606010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101020202020202 010101000000000000000000000000000000000000000000767676FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA1A1A1000000000000000000000000000000000000000000000000030303 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010 1010101010101010101010101010101515151A1A1A1E1E1E2222222929292C2C2C313131353535 3737373A3A3A3E3E3E4141414545454747474A4A4A4C4C4C4E4E4E505050525252545454565656 5656565757575858585A5A5A5B5B5B5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A595959585858575757 5656565353535353535151514F4F4F4C4C4C4949494848484545454242423F3F3F3B3B3B363636 3232322F2F2F2B2B2B2828282222221C1C1C171717121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111101010101010101010101010101010101010101010101010 1010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B 0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A040202050101050101050101050101050101050101 020000696969FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000161616353535 353535353535353535353535353535353535343434343434343434343434343434343434343434 343434343434333333333333333333333333333333333333333333323232323232323232323232 323232323232313131313131313131313131313131313131303030303030303030303030303030 3030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D 2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A 2A2A2A2A2A2A292929292929292929292929282828282828282828282828272727272727272727 272727262626262626262626252525252525252525252525252525242424242424242424242424 232323232323232323232323232323222222222222222222222222222222212121212121212121 2121212020202020202020202020200F0F0F000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF626262000000000000000000000000000000000000000000040404181818 171717171717171717171717161616161616161616161616151515151515151515141414141414 141414141414131313131313131313131313121212121212121212121212111111111111111111 1010101010101010101010100A0A0A000000000000000000000000000000000000000000171717 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000 000000000000000000000000070707090909090909090909090909080808080808080808080808 080808080808070707070707070707070707070707070707060606060606060606060606060606 060606050505050505050505050505050505050505040404040404040404040404040404040404 040404040404040404040404040404030303030303030303030303030303030303030303030303 0303030303030303030000000000000000000000000000000000000000000101019C9C9CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0E0E0E000000000000000000000000000000000000000000000000000000 000000010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909090909091010101010101616161919191D1D1D1D1D1D2020202424242828282A2A2A2A2A2A 2F2F2F3333333333333636363838383B3B3B3D3D3D3F3F3F4444444545454646464949494B4B4B 4C4C4C4F4F4F4F4F4F535353535353545454555555565656575757575757575757575757575757 5757575757575757575757575757575757575454545454545454545353535050504D4D4D4A4A4A 4949494545453F3F3F3B3B3B3838383636363131312A2A2A262626202020191919101010090909 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF2E2E2E000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090909090C0C0C0C0C0C0E0E0E101010 1111111111111313131313131313131313131111111111111111111010100E0E0E0C0C0C090909 090909060606060606010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101020202 020202020202010101000000000000000000000000000000000000000000A6A6A6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFAFAFA232323000000000000000000000000000000000000000000 0000000909090A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010 1010101010101010101010101010101010101010101616161B1B1B2020202424242A2A2A2D2D2D 3131313636363838383B3B3B3E3E3E4141414545454747474A4A4A4C4C4C4E4E4E505050535353 5555555757575757575858585959595B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5B5B5B5A5A5A595959 5858585757575555555353535353535151514F4F4F4B4B4B4949494848484545454141413E3E3E 3A3A3A3636363232322E2E2E2A2A2A252525202020191919121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212111111 111111111111111111111111111111111111111111111111111111111111111111101010101010 1010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A040202050101050101050101050101 050101050101020000696969FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000 161616363636353535353535353535353535353535353535353535353535353535353535343434 343434343434343434343434343434343434343434333333333333333333333333333333333333 333333323232323232323232323232323232323232313131313131313131313131313131313131 3030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828282828 272727272727272727272727262626262626262626262626252525252525252525252525242424 242424242424242424242424232323232323232323232323222222222222222222222222222222 2121212121212121212121212020202020202020200F0F0F000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000000000000000000000 040404181818181818171717171717171717171717161616161616161616151515151515151515 151515141414141414141414141414131313131313131313131313121212121212121212111111 1111111111111111111010101010101010100A0A0A000000000000000000000000000000000000 000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000 000000000000000000000000000000000000070707090909090909090909090909090909080808 080808080808080808080808080808070707070707070707070707070707070707060606060606 060606060606060606060606050505050505050505050505050505040404040404040404040404 040404040404040404040404040404040404040404040404030303030303030303030303030303 030303030303030303030303030303000000000000000000000000000000000000000000010101 9C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000 000000000000000000010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909090909091010101010101616161919191D1D1D202020242424262626 2A2A2A2A2A2A2F2F2F3333333535353636363A3A3A3D3D3D3F3F3F3F3F3F454545464646494949 4A4A4A4D4D4D5050505050505252525555555656565757575858585A5A5A5A5A5A5B5B5B5B5B5B 5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A575757575757575757555555535353 5050504C4C4C4B4B4B4848484444443F3F3F3B3B3B3A3A3A3535352D2D2D2828282424241D1D1D 161616101010090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000040404FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFECECEC020202000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C0C0C0C0E0E0E 0E0E0E1010101111111111111313131313131313131313131111111111111111111010100E0E0E 0C0C0C090909090909060606060606010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 020202020202020202020202000000000000000000000000000000000000000000000000D7D7D7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF949494000000000000000000000000000000000000 0000000000000404040A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010 1010101010101010101010101010101111111111111111111111111616161D1D1D202020242424 2A2A2A2E2E2E3232323636363838383C3C3C3F3F3F4242424646464848484B4B4B4E4E4E505050 5252525353535555555656565757575858585959595959595B5B5B5B5B5B5B5B5B5B5B5B5A5A5A 5959595858585757575555555353535353535151515050504F4F4F4B4B4B484848464646434343 3F3F3F3D3D3D3939393535353131312D2D2D2828282323231D1D1D181818131313131313131313 131313131313131313131313131313131313131313131313131313131313131313131313131313 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212111111111111111111111111111111111111111111 1111111111111111111111111010101010101010101010101010101010101010101010100F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D 0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B040202050101050101 050101050101050101050101020000696969FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000 000000000000161616363636363636363636363636363636363636353535353535353535353535 353535353535353535353535353535343434343434343434343434343434343434343434333333 333333333333333333333333333333333333323232323232323232323232323232313131313131 3131313131313131313131313030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C 2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929 282828282828282828282828272727272727272727272727262626262626262626252525252525 252525252525242424242424242424242424242424232323232323232323232323232323222222 2222222222222222222121212121212121212121212121212020200F0F0F000000000000000000 0000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000000000 000000000000040404181818181818181818171717171717171717161616161616161616161616 151515151515151515151515141414141414141414141414131313131313131313131313121212 1212121212121111111111111111111111111010101010100A0A0A000000000000000000000000 000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3 161616000000000000000000000000000000000000000000080808090909090909090909090909 090909090909080808080808080808080808080808070707070707070707070707070707070707 060606060606060606060606060606060606050505050505050505050505050505050505040404 040404040404040404040404040404040404040404040404040404040404030303030303030303 030303030303030303030303030303030303030303000000000000000000000000000000000000 0000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000 000000000000000000000000000000010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909090909091010101616161616161919191D1D1D 2020202626262828282A2A2A2F2F2F3131313333333636363A3A3A3D3D3D3F3F3F414141454545 4646464949494B4B4B4D4D4D5050505353535454545757575858585959595A5A5A5B5B5B5D5D5D 5E5E5E5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5A5A5A5A5A5A5A5A5A 5858585656565353535050504D4D4D4B4B4B4848484444443F3F3F3D3D3D3838383131312D2D2D 282828242424191919161616090909090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFABABAB000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060606060909090C0C0C 0E0E0E0E0E0E101010111111111111131313131313131313131313131313111111111111101010 1010100E0E0E0C0C0C090909090909060606010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101020202020202020202020202020202000000000000000000000000000000000000000000 0A0A0AFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F61B1B1B000000000000000000000000 0000000000000000000000000909090A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010101010 1010101010101010101010101111111111111111111111111111111111111616161818181D1D1D 2121212626262A2A2A2E2E2E3333333636363A3A3A3E3E3E4040404444444747474949494B4B4B 4E4E4E5050505353535353535555555656565757575858585959595959595A5A5A5B5B5B5B5B5B 5A5A5A5A5A5A5A5A5A5858585858585656565454545252525050505050504E4E4E4B4B4B484848 4545454242423E3E3E3B3B3B3737373434343030302B2B2B2626262121211A1A1A181818131313 131313131313131313131313131313131313131313131313131313131313131313131313131313 131313131313131313131313131313131313131313131313131313131313131313121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 111111111111111111111111111111111111111111111111111111101010101010101010101010 1010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B040202 050101050101050101050101050101050101020000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000 000000000000000000000000161616373737363636363636363636363636363636363636363636 363636363636353535353535353535353535353535353535353535353535343434343434343434 343434343434343434343434333333333333333333333333333333333333323232323232323232 323232323232323232313131313131313131313131313131303030303030303030303030303030 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A 292929292929292929292929282828282828282828272727272727272727272727262626262626 262626252525252525252525252525252525242424242424242424242424232323232323232323 2323232323232222222222222222222222222121212121212121212121212121210F0F0F000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000 000000000000000000000000040404181818181818181818171717171717171717171717161616 161616161616161616151515151515151515151515141414141414141414141414131313131313 1313131212121212121212121212121111111111111111111111111010100A0A0A000000000000 000000000000000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD3D3D3161616000000000000000000000000000000000000000000080808090909090909 090909090909090909090909080808080808080808080808080808080808070707070707070707 070707070707070707060606060606060606060606060606060606050505050505050505050505 050505040404040404040404040404040404040404040404040404040404040404040404040404 030303030303030303030303030303030303030303030303030303000000000000000000000000 0000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000 000000000000000000000000000000000000000000010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909090909090909101010161616 1616161919192020202424242828282A2A2A2D2D2D3131313333333636363838383D3D3D3F3F3F 4141414545454646464949494B4B4B4F4F4F5050505353535555555757575858585A5A5A5B5B5B 5D5D5D5E5E5E6060606161616161616161616161616161616161616161616161616161615F5F5F 5E5E5E5D5D5D5D5D5D5A5A5A5757575454545353535050504C4C4C4949494545454242423D3D3D 3636363131312D2D2D282828202020191919161616090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A6A6A000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0909090C0C0C0E0E0E101010101010111111111111131313131313141414131313131313111111 1111111010101010100E0E0E0C0C0C090909060606060606010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101020202020202020202020202010101000000000000000000000000000000 000000000000383838FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF888888000000000000000000 0000000000000000000000000000000404040B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010101010 101010101010101010111111111111111111111111111111111111111111111111111111161616 1818181D1D1D2121212727272B2B2B3030303434343737373A3A3A3E3E3E404040444444484848 4949494C4C4C4E4E4E5050505353535353535555555656565858585959595A5A5A5959595A5A5A 5A5A5A5A5A5A5A5A5A5959595959595858585757575555555454545151515050504F4F4F4D4D4D 4A4A4A4747474444444141413D3D3D3B3B3B3737373333332E2E2E2B2B2B2525252121211A1A1A 131313131313131313131313131313131313131313131313131313131313131313131313131313 131313131313131313131313131313131313131313131313131313131313131313131313131313 131313131313131313131313131313131313121212121212121212121212121212121212121212 121212121212121212121212121212121212111111111111111111111111111111111111111111 1111111010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C 0C0C0C040202050101050101050101050101050101050101020000686868FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000 000000000000000000000000000000000000161616373737373737373737373737373737373737 363636363636363636363636363636363636363636363636353535353535353535353535353535 353535353535343434343434343434343434343434343434343434333333333333333333333333 333333333333323232323232323232323232323232313131313131313131313131313131303030 3030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A 2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828282828282828272727272727 272727262626262626262626262626252525252525252525252525242424242424242424242424 242424232323232323232323232323222222222222222222222222212121212121212121212121 0F0F0F0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000 000000000000000000000000000000000000040404181818181818181818181818171717171717 171717171717161616161616161616161616151515151515151515151515141414141414141414 1313131313131313131313131212121212121212121212121111111111111111111010100A0A0A 000000000000000000000000000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000000000000000000000080808 0A0A0A090909090909090909090909090909090909080808080808080808080808080808080808 070707070707070707070707070707060606060606060606060606060606060606050505050505 050505050505050505050505040404040404040404040404040404040404040404040404040404 040404040404030303030303030303030303030303030303030303030303030303000000000000 0000000000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909090909 1010101010101616161919191D1D1D2424242626262828282D2D2D2F2F2F313131353535383838 3D3D3D3F3F3F4141414545454646464949494B4B4B4F4F4F525252545454555555575757585858 5A5A5A5B5B5B5D5D5D606060616161616161626262646464646464646464646464646464646464 6464646262626262626262626161615F5F5F5B5B5B5959595757575555555050504D4D4D4A4A4A 4646464141413B3B3B3636363131312D2D2D262626202020191919161616090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B2B2B000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0606060909090C0C0C0E0E0E101010101010111111111111131313141414141414141414131313 1313131111111010101010100E0E0E0E0E0E0C0C0C090909060606060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101020202020202020202020202020202010101000000000000000000 000000000000000000000000696969FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0121212000000 0000000000000000000000000000000000000000000A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010101010101010 101010101010111111111111111111111111111111111111111111111111111111111111111111 1111111616161919192020202323232929292C2C2C3030303535353838383B3B3B3F3F3F414141 4444444848484A4A4A4C4C4C4E4E4E5151515353535454545656565757575858585959595A5A5A 5959595A5A5A5A5A5A5A5A5A5A5A5A595959595959585858565656555555535353515151505050 4F4F4F4C4C4C4949494646464444444040403D3D3D3A3A3A3636363232322D2D2D2A2A2A242424 202020191919141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414131313131313131313131313131313131313 131313131313131313131313131313131313131313131313131313131313131313131313131313 131313121212121212121212121212121212121212121212121212121212121212111111111111 111111111111111111111111111111111111101010101010101010101010101010101010101010 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D 0D0D0D0C0C0C0C0C0C040202050101050101050101050101050101050101020000686868FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 2A2A2A000000000000000000000000000000000000000000171717373737373737373737373737 373737373737373737373737373737373737363636363636363636363636363636363636363636 363636353535353535353535353535353535353535343434343434343434343434343434343434 343434333333333333333333333333333333323232323232323232323232323232313131313131 3131313131313131313030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F 2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B 2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929282828282828282828 282828272727272727272727272727262626262626262626252525252525252525252525242424 242424242424242424242424232323232323232323232323222222222222222222222222222222 2121212121210F0F0F0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 626262000000000000000000000000000000000000000000040404191919181818181818181818 181818171717171717171717171717161616161616161616161616151515151515151515151515 141414141414141414131313131313131313131313121212121212121212121212111111111111 1111110A0A0A000000000000000000000000000000000000000000171717FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000000000000000 0000000808080A0A0A0A0A0A090909090909090909090909090909080808080808080808080808 080808080808070707070707070707070707070707070707060606060606060606060606060606 060606050505050505050505050505050505050505040404040404040404040404040404040404 040404040404040404040404040404030303030303030303030303030303030303030303030303 0000000000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0B0B0B000000000000000000000000000000000000000000000000000000000000010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909090909091010101010101616161919192020202424242424242828282D2D2D313131 3535353636363A3A3A3D3D3D4141414545454646464949494B4B4B4F4F4F525252545454555555 5959595A5A5A5B5B5B5D5D5D5E5E5E616161616161626262656565666666666666666666656565 6565656565656565656666666666666565656464646262625E5E5E5B5B5B5A5A5A585858575757 5353535050504B4B4B4545454141413D3D3D3636363333332D2D2D262626202020191919101010 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000020202 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF020202 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060606060909090C0C0C0E0E0E101010111111111111131313131313141414141414 1414141313131313131111111010101010100E0E0E0C0C0C090909090909060606060606010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101020202020202020202020202020202020202010101000000 0000000000000000000000000000000000009A9A9AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A7A7A 0000000000000000000000000000000000000000000000000505050B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F101010101010101010101010101010101010101010101010101010101010101010 101010111111111111111111111111111111111111111111111111111111111111111111111111 1212121212121212121717171C1C1C2020202424242929292D2D2D3232323434343939393C3C3C 3E3E3E4141414646464949494B4B4B4D4D4D505050515151535353545454565656575757585858 5959595A5A5A595959595959595959595959595959595959585858575757565656555555545454 5151514F4F4F4D4D4D4C4C4C4949494545454242424040403C3C3C3838383434343131312B2B2B 2929292222221E1E1E191919141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414131313131313131313131313131313131313131313 131313131313131313131313131313131313131313121212121212121212121212121212121212 121212121212121212121212111111111111111111111111111111111111111111101010101010 1010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E 0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D040202050101050101050101050101050101050101020000 686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000171717383838383838 383838383838383838373737373737373737373737373737373737373737373737373737363636 363636363636363636363636363636363636353535353535353535353535353535353535343434 343434343434343434343434343434333333333333333333333333333333333333323232323232 3232323232323232323131313131313131313131313030303030303030303030303030302F2F2F 2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929 292929282828282828282828272727272727272727272727262626262626262626252525252525 252525252525242424242424242424242424242424232323232323232323232323222222222222 2222222222222222222121210F0F0F0000000000000000000000000000000000000000000B0B0B FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF626262000000000000000000000000000000000000000000040404191919191919 181818181818181818181818171717171717171717171717161616161616161616161616151515 151515151515141414141414141414141414131313131313131313131313121212121212121212 1111111111111111110B0B0B000000000000000000000000000000000000000000171717FBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000 0000000000000000000808080A0A0A0A0A0A090909090909090909090909090909090909080808 080808080808080808080808080808070707070707070707070707070707070707060606060606 060606060606060606050505050505050505050505050505050505040404040404040404040404 040404040404040404040404040404040404040404030303030303030303030303030303030303 0303030303030000000000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909090909091010101616161919191D1D1D202020202020282828 2D2D2D3131313535353636363838383D3D3D4141414545454646464949494B4B4B4F4F4F525252 5555555656565A5A5A5B5B5B5D5D5D5E5E5E606060616161626262626262676767686868686868 6767676767676767676767676767676868686868686767676565656262626060605D5D5D5B5B5B 5A5A5A5959595757575353534D4D4D4949494444444141413B3B3B3636363131312A2A2A262626 1D1D1D161616101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF B5B5B5000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060606060909090C0C0C0E0E0E101010111111111111131313141414 1414141414141414141313131313131111111010101010100E0E0E0C0C0C090909090909060606 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101020202020202020202020202020202020202020202 000000000000000000000000000000000000000000000000C9C9C9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E8E8E80C0C0C0000000000000000000000000000000000000000000101010A0A0A0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F101010101010101010101010101010101010101010101010101010101010101010 111111111111111111111111111111111111111111111111111111111111111111111111121212 1212121212121212121212121212121717171C1C1C2121212525252A2A2A2E2E2E323232363636 3B3B3B3E3E3E4040404343434747474949494C4C4C4E4E4E505050525252545454545454565656 5757575858585959595A5A5A5959595A5A5A5A5A5A5A5A5A5A5A5A595959585858565656565656 5555555353535050504F4F4F4E4E4E4B4B4B4747474545454141413E3E3E3B3B3B373737333333 2E2E2E2A2A2A2626262020201B1B1B141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414131313131313131313131313131313131313131313131313131313131313131313131313 121212121212121212121212121212121212121212121212121212111111111111111111111111 1111111111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D040202050101050101050101050101050101 050101020000676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000171717 383838383838383838383838383838383838383838383838383838373737373737373737373737 373737373737373737373737363636363636363636363636363636363636363636353535353535 353535353535353535353535343434343434343434343434343434343434333333333333333333 333333333333323232323232323232323232323232313131313131313131313131303030303030 3030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D 2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A 2A2A2A292929292929292929282828282828282828282828272727272727272727262626262626 262626262626252525252525252525252525242424242424242424242424232323232323232323 2323232323232222222222222222222222220F0F0F000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000000000000000000000040404 191919191919191919181818181818181818181818171717171717171717171717161616161616 161616151515151515151515151515141414141414141414141414131313131313131313131313 1212121212121212121111111111110B0B0B000000000000000000000000000000000000000000 171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000 0000000000000000000000000000000808080A0A0A0A0A0A0A0A0A090909090909090909090909 090909090909080808080808080808080808080808070707070707070707070707070707070707 060606060606060606060606060606060606050505050505050505050505050505050505040404 040404040404040404040404040404040404040404040404040404040404030303030303030303 0303030303030303030303030000000000000000000000000000000000000000000101019C9C9C FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909090909091010101616161919191D1D1D 2020202626262A2A2A2F2F2F3333333535353838383B3B3B3F3F3F4444444646464949494B4B4B 4F4F4F5353535656565757575B5B5B5D5D5D5D5D5D5F5F5F616161626262646464646464686868 686868686868686868686868686868686868686868696969696969696969686868656565626262 5F5F5F5D5D5D5B5B5B5A5A5A5959595555555050504B4B4B4646464545454141413B3B3B363636 3131312A2A2A242424191919161616090909090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7A7A7A000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060606060909090C0C0C0E0E0E101010101010111111131313 1414141414141414141414141414141313131313131111111111111010100E0E0E0C0C0C090909 090909060606010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101020202020202020202020202020202 020202020202000000000000000000000000000000000000000000010101F2F2F2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7070700000000000000000000000000000000000000000000000000606060B0B0B 0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F101010101010101010101010101010101010101010101010101010101010111111 111111111111111111111111111111111111111111111111111111111111111111121212121212 1212121212121212121212121212121212121212121717171C1C1C2121212525252B2B2B303030 3333333737373B3B3B3D3D3D4040404444444646464A4A4A4C4C4C4F4F4F505050535353545454 5454545757575757575858585959595A5A5A5A5A5A5A5A5A5A5A5A5A5A5A595959585858575757 5757575656565555555353535050504E4E4E4D4D4D4A4A4A4646464545454040403D3D3D3A3A3A 3636363333332D2D2D2A2A2A2525251F1F1F1C1C1C151515151515151515151515151515151515 151515151515151515151515151515151515151515151515151515151515151515151515151515 151515141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414131313131313131313131313 131313131313131313131313131313131313121212121212121212121212121212121212121212 121212111111111111111111111111111111111111111111101010101010101010101010101010 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E040202050101050101050101 050101050101050101020000676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000 000000171717393939393939393939393939383838383838383838383838383838383838383838 383838383838373737373737373737373737373737373737373737363636363636363636363636 363636363636363636353535353535353535353535353535343434343434343434343434343434 343434333333333333333333333333333333323232323232323232323232323232313131313131 3131313131313030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E 2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828282828272727272727 272727272727262626262626262626252525252525252525252525242424242424242424242424 2323232323232323232323232323232222222222222222220F0F0F000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000000000000000 000000040404191919191919191919191919181818181818181818181818171717171717171717 171717161616161616161616151515151515151515151515141414141414141414141414131313 1313131313131212121212121212121212121111110B0B0B000000000000000000000000000000 000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616 0000000000000000000000000000000000000000000808080A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909080808080808080808080808080808080808070707070707070707 070707070707070707060606060606060606060606060606060606050505050505050505050505 050505040404040404040404040404040404040404040404040404040404040404040404030303 030303030303030303030303030303030303000000000000000000000000000000000000000000 0101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909101010 1616161D1D1D2020202424242828282D2D2D3131313333333636363B3B3B3F3F3F424242454545 4848484B4B4B4F4F4F5353535656565757575B5B5B5D5D5D5E5E5E606060626262646464666666 6767676868686969696969696A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6A6A6A 6868686464646262626161615F5F5F5D5D5D5B5B5B5959595454545050504B4B4B494949454545 4141413A3A3A353535313131282828202020191919161616090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF3E3E3E000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090909090C0C0C0E0E0E101010101010 1111111313131414141414141414141414141414141313131111111111111111111010100E0E0E 0C0C0C090909060606060606010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101020202020202020202020202 0202020202020202020202020000000000000000000000000000000000000000001F1F1FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE8E8E80A0A0A000000000000000000000000000000000000000000010101 0A0A0A0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010101010101010101010101010111111 111111111111111111111111111111111111111111111111111111111111121212121212121212 1212121212121212121212121212121212121212121212121212121717171D1D1D232323282828 2B2B2B3030303434343737373C3C3C3E3E3E4141414444444646464A4A4A4D4D4D4F4F4F515151 5454545555555555555757575757575858585959595A5A5A5A5A5A595959595959595959595959 5858585757575757575656565454545252525151514F4F4F4C4C4C4A4A4A474747444444414141 3D3D3D3A3A3A3636363232322D2D2D2828282323231F1F1F1A1A1A151515151515151515151515 151515151515151515151515151515151515151515151515151515151515151515151515151515 151515151515151515151515151515151515151515151515151515151515151515151515151515 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414131313131313131313131313131313131313131313131313131313131313121212 121212121212121212121212121212121212111111111111111111111111111111111111101010 1010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E040202050101 050101050101050101050101050101020000676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000 000000000000000000171717393939393939393939393939393939393939393939393939383838 383838383838383838383838383838383838383838373737373737373737373737373737373737 373737363636363636363636363636363636363636353535353535353535353535353535353535 343434343434343434343434343434333333333333333333333333333333323232323232323232 3232323232323131313131313131313131313030303030303030303030302F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C 2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828 282828272727272727272727272727262626262626262626252525252525252525252525242424 2424242424242424242323232323232323232323232323232222222222220F0F0F000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000 0000000000000000000404041A1A1A191919191919191919191919181818181818181818181818 171717171717171717161616161616161616161616151515151515151515151515141414141414 1414141313131313131313131313131212121212121212121212120B0B0B000000000000000000 000000000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D3D3D31616160000000000000000000000000000000000000000000808080A0A0A0A0A0A0A0A0A 0A0A0A090909090909090909090909090909090909080808080808080808080808080808080808 070707070707070707070707070707060606060606060606060606060606060606050505050505 050505050505050505050505040404040404040404040404040404040404040404040404040404 040404040404030303030303030303030303030303030303000000000000000000000000000000 0000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909090909091010101919191D1D1D2020202626262A2A2A2F2F2F3131313535353838383D3D3D 4141414444444646464A4A4A4D4D4D5353535656565757575B5B5B5D5D5D5D5D5D606060626262 6464646767676868686A6A6A6A6A6A6B6B6B6B6B6B6B6B6B6C6C6C6D6D6D6D6D6D6D6D6D6E6E6E 6D6D6D6C6C6C6B6B6B6868686666666464646262626161616060605D5D5D585858535353505050 4D4D4D4646464242423D3D3D3838383333332D2D2D262626202020191919101010090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA0A0A0A000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090909090C0C0C0E0E0E 101010111111111111131313141414141414141414141414141414131313111111111111111111 1010100E0E0E0C0C0C090909060606060606010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101020202020202020202 020202020202020202020202020202010101000000000000000000000000000000000000000000 4A4A4AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF757575000000000000000000000000000000000000000000 0000000606060B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111111111111111111111111111111111121212121212121212 1212121212121212121212121212121212121212121212121212121313131313131A1A1A1F1F1F 2424242929292C2C2C3131313434343838383C3C3C3E3E3E4242424545454848484B4B4B4E4E4E 4F4F4F5151515353535555555656565656565757575858585959595959595959595A5A5A5A5A5A 5959595A5A5A5959595757575656565555555555555353535050504D4D4D4B4B4B494949454545 4343433F3F3F3C3C3C3939393434343131312B2B2B2626262222221C1C1C1A1A1A151515151515 151515151515151515151515151515151515151515151515151515151515151515151515151515 151515151515151515151515151515151515151515151515151515151515151515151515151515 151515151515151515151515151515151515151515151515151515141414141414141414141414 141414141414141414141414141414141414141414141414131313131313131313131313131313 131313131313131313131313121212121212121212121212121212121212121212111111111111 1111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F 040202050101050101050101050101050101050101020000676767FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000 0000000000000000000000000000001818183A3A3A3A3A3A3A3A3A393939393939393939393939 393939393939393939393939393939383838383838383838383838383838383838383838383838 373737373737373737373737373737373737363636363636363636363636363636363636353535 353535353535353535353535343434343434343434343434343434333333333333333333333333 333333323232323232323232323232323232313131313131313131313131303030303030303030 3030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D 2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929 292929282828282828282828282828272727272727272727262626262626262626252525252525 2525252525252424242424242424242424242424242323232323232323232323232222220F0F0F 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000 0000000000000000000000000000000404041A1A1A1A1A1A191919191919191919191919181818 181818181818171717171717171717171717161616161616161616161616151515151515151515 1515151414141414141414141313131313131313131313131212121212121212120B0B0B000000 000000000000000000000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD3D3D31616160000000000000000000000000000000000000000000808080A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909080808080808080808080808 080808080808070707070707070707070707070707070707060606060606060606060606060606 060606050505050505050505050505050505040404040404040404040404040404040404040404 040404040404040404040404040404030303030303030303030303030303000000000000000000 0000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909090909091616161919191D1D1D2020202626262A2A2A2D2D2D313131 3636363B3B3B3F3F3F4141414444444949494D4D4D5050505454545757575A5A5A5B5B5B5D5D5D 5F5F5F6262626464646767676868686B6B6B6B6B6B6B6B6B6D6D6D6E6E6E6E6E6E6F6F6F707070 6F6F6F6F6F6F6F6F6F6F6F6F6E6E6E6B6B6B6969696868686565656464646262626161615D5D5D 5858585555555252524A4A4A4545453F3F3F3B3B3B3636363131312A2A2A242424242424191919 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8C8000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 0E0E0E0E0E0E101010111111111111131313141414141414141414141414141414131313111111 1111111010100E0E0E0C0C0C0C0C0C090909060606010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101020202 020202020202020202020202020202020202020202010101000000000000000000000000000000 000000000000757575FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC0D0D0D000000000000000000000000000000 0000000000000101010B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111111111111111111111111111121212121212121212121212 121212121212121212121212121212121212121212121212131313131313131313131313131313 1A1A1A1F1F1F2424242A2A2A2C2C2C3131313535353838383C3C3C3F3F3F434343454545494949 4C4C4C4D4D4D4E4E4E5050505252525555555656565656565858585858585959595A5A5A5A5A5A 5B5B5B5B5B5B5A5A5A5A5A5A5959595757575555555555555454545252524F4F4F4D4D4D4C4C4C 4848484444444242423E3E3E3B3B3B3838383333332F2F2F2A2A2A2525252222221A1A1A161616 161616161616161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616161616161616161616161616151515151515151515151515151515 151515151515151515151515151515151515151515151515151515151515151515151515151515 151515151515151515141414141414141414141414141414141414141414141414141414141414 141414131313131313131313131313131313131313131313131313121212121212121212121212 121212121212111111111111111111111111111111111111101010101010101010101010101010 0F0F0F0F0F0F050303050101050101050101050101050101050101020000676767FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A 0000000000000000000000000000000000000000001818183A3A3A3A3A3A3A3A3A3A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A393939393939393939393939393939393939393939393939383838383838 383838383838383838383838383838373737373737373737373737373737373737363636363636 363636363636363636353535353535353535353535353535343434343434343434343434343434 333333333333333333333333333333323232323232323232323232313131313131313131313131 3131313030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A 2A2A2A292929292929292929292929282828282828282828272727272727272727262626262626 262626262626252525252525252525242424242424242424242424242424232323232323232323 2323230F0F0F0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262 0000000000000000000000000000000000000000000404041A1A1A1A1A1A1A1A1A191919191919 191919191919181818181818181818171717171717171717171717161616161616161616161616 151515151515151515141414141414141414141414131313131313131313131313121212121212 0B0B0B000000000000000000000000000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000000000000000000000 0808080A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909080808 080808080808080808080808080808070707070707070707070707070707070707060606060606 060606060606060606050505050505050505050505050505050505040404040404040404040404 040404040404040404040404040404040404040404030303030303030303030303030303000000 0000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909091010101010101919191D1D1D242424262626 2A2A2A2D2D2D3333333838383B3B3B3F3F3F4141414646464B4B4B505050535353555555575757 5A5A5A5B5B5B5E5E5E6161616464646666666868686B6B6B6B6B6B6C6C6C6E6E6E6F6F6F707070 7171717272727171717171717272727272727070706E6E6E6C6C6C6B6B6B686868686868666666 6262626060605B5B5B5858585656564D4D4D4A4A4A4545454141413D3D3D3636362F2F2F2A2A2A 282828202020161616101010090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000020202FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C8C8C000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606060606 0909090C0C0C0E0E0E101010111111111111131313131313141414141414141414141414141414 1313131111111111111010100E0E0E0C0C0C0C0C0C090909060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 020202020202020202020202020202020202020202020202020202010101000000000000000000 000000000000000000000000A0A0A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A7A7A000000000000000000000000 0000000000000000000000000707070C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111111111111111111111121212121212121212121212121212 121212121212121212121212121212121212121212131313131313131313131313131313131313 1313131818181A1A1A2121212525252A2A2A2E2E2E3232323636363A3A3A3C3C3C404040434343 4545454949494C4C4C4E4E4E4F4F4F5151515353535555555656565757575959595959595A5A5A 5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5959595858585757575555555454545353535151514E4E4E 4C4C4C4B4B4B4848484545454141413E3E3E3B3B3B3838383333332F2F2F2A2A2A262626222222 1A1A1A161616161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616161616161616161616161616151515151515151515151515151515 151515151515151515151515151515151515151515151515151515151515141414141414141414 141414141414141414141414141414141414141414131313131313131313131313131313131313 131313121212121212121212121212121212121212111111111111111111111111111111101010 101010101010101010101010050303050101050101050101050101050101050101020000676767 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF2A2A2A0000000000000000000000000000000000000000001818183B3B3B3B3B3B3B3B3B 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939393939 393939393939393939383838383838383838383838383838383838373737373737373737373737 373737373737363636363636363636363636363636363636353535353535353535353535353535 343434343434343434343434333333333333333333333333333333323232323232323232323232 3131313131313131313131313030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E 2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828282828272727272727 272727262626262626262626262626252525252525252525252525242424242424242424242424 2323232323232323231010100000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF6262620000000000000000000000000000000000000000000404041A1A1A1A1A1A1A1A1A 1A1A1A191919191919191919181818181818181818181818171717171717171717171717161616 161616161616151515151515151515151515141414141414141414141414131313131313131313 1212121212120B0B0B000000000000000000000000000000000000000000171717FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000000000 0000000000000909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909 090909090909080808080808080808080808080808070707070707070707070707070707070707 060606060606060606060606060606060606050505050505050505050505050505040404040404 040404040404040404040404040404040404040404040404040404040404030303030303030303 0303030000000000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909101010161616191919 2020202424242828282D2D2D3131313636363A3A3A3D3D3D3F3F3F4545454949494D4D4D525252 5454545757575858585A5A5A5D5D5D6060606262626565656767676B6B6B6C6C6C6D6D6D6E6E6E 7070707171717272727373737272727272727272727272727272727070706E6E6E6D6D6D696969 6868686868686565656262625E5E5E5A5A5A5858585353534F4F4F4A4A4A4545454141413B3B3B 3535352F2F2F2A2A2A242424191919101010090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF515151000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090909090C0C0C0E0E0E101010111111131313131313131313141414141414141414 1414141414141313131111111111111010100E0E0E0C0C0C090909090909060606010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101020202020202020202020202020202020202020202020202020202020202000000000000 000000000000000000000000000000000000CBCBCBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0101010000000000000 0000000000000000000000000000000202020C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111111111111111111111121212121212121212121212121212 121212121212121212121212121212121212131313131313131313131313131313131313131313 1313131313131313131818181D1D1D2222222626262A2A2A2E2E2E3333333636363A3A3A3D3D3D 4040404444444646464949494C4C4C4D4D4D505050525252545454555555565656575757595959 5959595A5A5A5A5A5A5A5A5A5A5A5A595959595959595959575757565656555555555555535353 5151514F4F4F4C4C4C4A4A4A4848484444444242423D3D3D3A3A3A3737373232322E2E2E292929 2424242020201A1A1A161616161616161616161616161616161616161616161616161616161616 161616161616161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616161616161616161616161616161616161616161616161616161616 161616161616161616151515151515151515151515151515151515151515151515151515151515 151515151515151515141414141414141414141414141414141414141414141414141414131313 131313131313131313131313131313131313121212121212121212121212121212111111111111 111111111111111111101010101010101010050303050101050101050101050101050101050101 020000666666FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF2A2A2A0000000000000000000000000000000000000000001818183B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A 3A3A3A393939393939393939393939393939393939393939383838383838383838383838383838 383838373737373737373737373737373737373737363636363636363636363636363636353535 353535353535353535353535343434343434343434343434333333333333333333333333333333 3232323232323232323232323131313131313131313131313030303030303030303030302F2F2F 2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C 2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929282828282828 282828272727272727272727272727262626262626262626252525252525252525252525242424 242424242424242424232323232323101010000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF6262620000000000000000000000000000000000000000000404041B1B1B 1A1A1A1A1A1A1A1A1A191919191919191919191919181818181818181818181818171717171717 171717171717161616161616161616151515151515151515151515141414141414141414131313 1313131313131313131212120B0B0B000000000000000000000000000000000000000000171717 FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000 0000000000000000000000000909090B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909080808080808080808080808080808080808070707070707070707 070707070707070707060606060606060606060606060606050505050505050505050505050505 050505040404040404040404040404040404040404040404040404040404040404040404030303 0303030303030303030000000000000000000000000000000000000000000101019C9C9CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909090909 1010101616161919192020202424242828282D2D2D3131313636363A3A3A3D3D3D414141454545 4949494C4C4C5050505656565959595A5A5A5D5D5D6161616464646666666868686B6B6B6C6C6C 6E6E6E707070727272727272727272727272737373747474757575757575737373727272707070 6E6E6E6E6E6E6D6D6D6B6B6B6969696565656161615D5D5D5A5A5A5555555050504C4C4C494949 4545453F3F3F3636363131312D2D2D2828281D1D1D161616101010090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 181818000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C0C0C0C0E0E0E101010111111131313141414141414141414 1414141414141414141414141313131111111111110E0E0E0C0C0C0C0C0C090909090909060606 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101020202020202020202020202020202020202020202020202020202020202020202 000000000000000000000000000000000000000000010101F3F3F3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F000000 0000000000000000000000000000000000000000000707070C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111111111111111111111121212121212121212121212121212 121212121212121212121212121212131313131313131313131313131313131313131313131313 1313131313131313131313131414141919191E1E1E2222222727272B2B2B2F2F2F333333373737 3B3B3B3E3E3E4040404444444747474A4A4A4C4C4C4E4E4E505050525252545454555555565656 5757575959595959595A5A5A5A5A5A5A5A5A5959595A5A5A5A5A5A595959585858575757555555 5454545252525151514E4E4E4C4C4C4A4A4A4747474343434141413C3C3C3A3A3A353535323232 2D2D2D282828232323202020161616161616161616161616161616171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 171717161616161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616161616161616161616161616161616161616161616151515151515 151515151515151515151515151515151515151515151515151515141414141414141414141414 141414141414141414141414131313131313131313131313131313131313121212121212121212 121212121212121212111111111111111111111111101010050303050101050101050101050101 050101050101020000666666FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000 1818183C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939393939393939393939393939 383838383838383838383838383838373737373737373737373737373737373737363636363636 363636363636363636353535353535353535353535353535343434343434343434343434333333 333333333333333333323232323232323232323232323232313131313131313131313131303030 3030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D 2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929 292929282828282828282828282828272727272727272727262626262626262626252525252525 252525252525242424242424242424242424232323101010000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000000000000000000000 0404041B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919181818181818181818 181818171717171717171717161616161616161616161616151515151515151515151515141414 1414141414141313131313131313131313130B0B0B000000000000000000000000000000000000 000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000 0000000000000000000000000000000000000909090B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A090909090909090909090909090909090909080808080808080808080808080808070707 070707070707070707070707070707060606060606060606060606060606060606050505050505 050505050505050505050505040404040404040404040404040404040404040404040404040404 040404040404030303030303030303000000000000000000000000000000000000000000010101 9C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909090909091010101616161D1D1D2020202626262A2A2A2F2F2F3333333636363B3B3B 3F3F3F4242424545454A4A4A4D4D4D5656565858585A5A5A5D5D5D616161646464666666686868 6A6A6A6B6B6B6D6D6D6F6F6F727272727272727272727272737373747474757575757575747474 7272727171717070706F6F6F6E6E6E6D6D6D6B6B6B6767676262625F5F5F5D5D5D585858555555 5050504B4B4B4848484242423A3A3A3636363131312D2D2D2424241D1D1D161616090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBDBDB000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060606060909090C0C0C0C0C0C0E0E0E111111131313131313141414 1414141414141414141414141414141414141313131111111010100E0E0E0C0C0C090909090909 060606060606010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101020202020202020202020202020202020202020202020202020202 020202020202000000000000000000000000000000000000000000212121FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1 1111110000000000000000000000000000000000000000000101010C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111111111111111121212121212121212121212121212121212 121212121212121212121212121212131313131313131313131313131313131313131313131313 1313131313131313131414141414141414141414141919191E1E1E2222222727272C2C2C303030 3333333838383B3B3B3F3F3F4242424545454747474B4B4B4C4C4C4E4E4E505050535353555555 5555555656565757575959595959595A5A5A5A5A5A5A5A5A5A5A5A5A5A5A595959585858585858 5656565555555454545252525050504D4D4D4B4B4B4949494646464242424040403B3B3B383838 3434343131312D2D2D2828282222221E1E1E171717171717171717171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 171717171717161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616161616151515151515151515151515151515151515151515151515 151515141414141414141414141414141414141414141414141414131313131313131313131313 131313131313121212121212121212121212121212111111111111111111050303050101050101 050101050101050101050101020000666666FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000 0000000000001818183C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939 393939393939393939393939383838383838383838383838383838383838373737373737373737 373737373737363636363636363636363636363636353535353535353535353535353535343434 343434343434343434333333333333333333333333323232323232323232323232313131313131 3131313131313030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A 2A2A2A292929292929292929292929282828282828282828272727272727272727262626262626 262626252525252525252525252525242424242424242424242424101010000000000000000000 0000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000000000 0000000000000404041B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919 181818181818181818171717171717171717171717161616161616161616161616151515151515 1515151414141414141414141414141313131313131313130B0B0B000000000000000000000000 000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3 1616160000000000000000000000000000000000000000000909090B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909080808080808080808080808 080808080808070707070707070707070707070707070707060606060606060606060606060606 050505050505050505050505050505050505040404040404040404040404040404040404040404 040404040404040404040404030303030303030303000000000000000000000000000000000000 0000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909090909091010101919191D1D1D2020202828282D2D2D313131 3636363A3A3A3F3F3F4141414444444949494D4D4D5353535656565858585B5B5B5F5F5F626262 6565656767676969696B6B6B6C6C6C6F6F6F717171727272727272727272747474747474757575 7575757575757474747272727171717070706F6F6F6E6E6E6C6C6C6868686464646161615F5F5F 5D5D5D5959595353535050504C4C4C4646463F3F3F3A3A3A363636313131282828202020191919 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA0A0A0000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060606060909090C0C0C0E0E0E101010111111131313 1313131313131414141414141515151414141414141313131111111111111010100E0E0E0E0E0E 0C0C0C090909060606010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101020202020202020202020202020202020202020202020202 0202020202020202020101010000000000000000000000000000000000000000004C4C4CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF8484840000000000000000000000000000000000000000000000000707070C0C0C0C0C0C 0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111111111111111121212121212121212121212121212121212 121212121212121212121212131313131313131313131313131313131313131313131313131313 1313131313131414141414141414141414141414141414141414141919191E1E1E222222292929 2C2C2C3131313434343939393C3C3C3F3F3F4242424545454848484B4B4B4D4D4D4F4F4F505050 5353535555555656565757575858585A5A5A5959595A5A5A5A5A5A5A5A5A5A5A5A595959595959 5858585757575656565454545353535151514F4F4F4C4C4C4B4B4B494949474747424242414141 3A3A3A3838383434342F2F2F2C2C2C2727272121211E1E1E171717171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717161616161616 161616161616161616161616161616161616161616161616161616161616161616151515151515 151515151515151515151515151515151515151515141414141414141414141414141414141414 131313131313131313131313131313131313121212121212121212121212121212111111050303 050101050101050101050101050101050101020000666666FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000 0000000000000000000000001919193D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C 3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A393939393939393939393939393939393939383838383838383838383838 383838373737373737373737373737373737363636363636363636363636363636353535353535 353535353535343434343434343434343434343434333333333333333333333333323232323232 3232323232323131313131313131313131313030303030303030302F2F2F2F2F2F2F2F2F2F2F2F 2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828282828272727272727 272727262626262626262626252525252525252525252525242424242424242424101010000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000 0000000000000000000000000404041B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A191919 191919191919191919181818181818181818171717171717171717171717161616161616161616 1616161515151515151515151414141414141414141414141313131313130C0C0C000000000000 000000000000000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD3D3D31616160000000000000000000000000000000000000000000909090B0B0B0B0B0B 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909080808 080808080808080808080808080808070707070707070707070707070707060606060606060606 060606060606060606050505050505050505050505050505050505040404040404040404040404 040404040404040404040404040404040404040404030303030303000000000000000000000000 0000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909090909091010101616161D1D1D242424 2A2A2A2D2D2D3131313636363B3B3B3F3F3F4141414646464B4B4B505050535353565656595959 5D5D5D6161616464646565656868686A6A6A6B6B6B6E6E6E717171727272727272727272747474 7575757575757676767676767575757474747373737272727171717070706E6E6E6B6B6B676767 6262626161615F5F5F5B5B5B5757575353535050504B4B4B4444443F3F3F3A3A3A3535352D2D2D 262626202020161616101010090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF656565000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060606060909090E0E0E0E0E0E101010 111111111111131313131313141414151515151515151515141414131313111111101010101010 0E0E0E0E0E0E0C0C0C090909060606010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101020202020202020202020202020202020202020202 020202020202020202020202020202010101000000000000000000000000000000000000000000 767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F41515150000000000000000000000000000000000000000000101010C0C0C 0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F101010101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111111111111111121212121212121212121212121212121212 121212121212121212121212131313131313131313131313131313131313131313131313131313 131313131313141414141414141414141414141414141414141414141414141414191919202020 2323232A2A2A2D2D2D3232323535353939393C3C3C4040404343434545454848484B4B4B4D4D4D 4F4F4F5252525353535555555656565757575858585A5A5A5959595A5A5A5A5A5A5A5A5A595959 5959595858585858585656565656565555555454545151515050504D4D4D4B4B4B484848464646 4242424040403A3A3A3838383333332F2F2F2B2B2B2525252121211B1B1B171717171717171717 171717171717171717171717171717171717171717171717181818181818181818181818181818 181818181818181818181818181818181818181818171717171717171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 171717171717171717171717171717171717161616161616161616161616161616161616161616 161616161616161616161616151515151515151515151515151515151515151515151515141414 141414141414141414141414141414131313131313131313131313131313131313121212121212 121212050303050101050101050101050101050101050101020000666666FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000 0000000000000000000000000000000000001919193D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939393939393939 383838383838383838383838383838373737373737373737373737373737363636363636363636 363636363636353535353535353535353535343434343434343434343434333333333333333333 333333323232323232323232323232313131313131313131313131303030303030303030303030 2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C 2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929282828282828 282828272727272727272727262626262626262626252525252525252525252525242424242424 1010100000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000 0000000000000000000000000000000000000505051B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A 1A1A1A1A1A1A191919191919191919181818181818181818181818171717171717171717171717 1616161616161616161515151515151515151515151414141414141414141313131313130C0C0C 000000000000000000000000000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000000000000000000000090909 0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909 090909080808080808080808080808080808080808070707070707070707070707070707070707 060606060606060606060606060606050505050505050505050505050505050505040404040404 040404040404040404040404040404040404040404040404040404030303030303000000000000 0000000000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909101010 1616161D1D1D2424242828282D2D2D3333333636363A3A3A3F3F3F4444444848484D4D4D505050 5353535757575A5A5A5E5E5E6161616464646666666868686B6B6B6E6E6E707070727272727272 737373747474757575767676777777787878777777757575757575737373727272727272707070 6D6D6D6969696666666464646060605D5D5D5858585656565252524D4D4D4646464141413D3D3D 3636362F2F2F282828242424191919161616090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF292929000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060606060909090C0C0C0E0E0E 0E0E0E101010111111131313131313131313141414151515151515151515141414131313111111 1010101010100E0E0E0E0E0E090909090909060606010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101020202020202020202020202020202 020202020202020202020202020202020202020202010101000000000000000000000000000000 000000000000A1A1A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000000000000000000000 0707070C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F101010101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111111111111111121212121212121212121212121212121212 121212121212121212121212131313131313131313131313131313131313131313131313131313 131313141414141414141414141414141414141414141414141414141414141414141414141414 1A1A1A2121212525252A2A2A2E2E2E3333333636363939393C3C3C404040434343454545494949 4C4C4C4E4E4E5050505252525353535555555656565858585858585A5A5A5959595A5A5A595959 5959595A5A5A5A5A5A5959595858585757575656565454545353535151514F4F4F4C4C4C494949 4848484444444040403E3E3E3A3A3A3838383333332F2F2F2929292525252222221C1C1C181818 181818181818181818181818181818181818181818181818181818181818181818181818181818 181818181818181818181818181818181818181818181818181818181818181818181818181818 181818181818181818181818181818181818181818181818181818171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 161616161616161616161616161616161616161616161616161616151515151515151515151515 151515151515151515151515141414141414141414141414141414141414131313131313131313 131313131313121212050303050101050101050101050101050101050101020000666666FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 2A2A2A0000000000000000000000000000000000000000001919193E3E3E3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939 393939393939393939393939383838383838383838383838383838373737373737373737373737 373737363636363636363636363636363636353535353535353535353535343434343434343434 343434333333333333333333333333323232323232323232323232313131313131313131313131 3030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D 2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929 292929282828282828282828272727272727272727262626262626262626252525252525252525 2525252424241010100000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 6262620000000000000000000000000000000000000000000505051C1C1C1B1B1B1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818181818171717 171717171717161616161616161616161616151515151515151515151515141414141414141414 1313130C0C0C000000000000000000000000000000000000000000171717FBFBFBFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000000000000000 0000000909090B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909080808080808080808080808080808080808070707070707070707 070707070707060606060606060606060606060606060606050505050505050505050505050505 050505040404040404040404040404040404040404040404040404040404040404040404030303 0000000000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0B0B0B000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909090909091010101919191D1D1D2424242828282D2D2D3333333636363A3A3A3F3F3F454545 4B4B4B4D4D4D5050505454545959595D5D5D6060606262626565656767676A6A6A6D6D6D707070 727272727272737373757575757575777777797979797979797979787878777777747474747474 7474747272727070706C6C6C6969696868686161615E5E5E5A5A5A5757575555555050504A4A4A 4545453F3F3F3A3A3A3333332D2D2D282828202020191919101010090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000020202 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED010101000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101060606060606090909 0C0C0C0E0E0E101010111111111111131313141414141414141414151515151515151515141414 1313131111111010101010100E0E0E0C0C0C090909060606060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101020202020202020202020202 020202020202020202020202020202020202020202020202020202010101000000000000000000 000000000000000000000000CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5171717000000000000000000000000000000000000 0000000101010B0B0B0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F101010101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111111111111111121212121212121212121212121212121212 121212121212121212121212131313131313131313131313131313131313131313131313131313 131313141414141414141414141414141414141414141414141414141414141414141414151515 1515151515151A1A1A2121212525252B2B2B2E2E2E3333333737373B3B3B3D3D3D424242434343 4747474949494C4C4C4E4E4E5050505151515353535454545656565858585959595A5A5A5A5A5A 5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A5959595858585757575555555353535252525050504F4F4F 4C4C4C4949494747474343434040403E3E3E3A3A3A3838383434343030302A2A2A2626261F1F1F 1C1C1C181818181818181818181818181818181818181818181818181818181818181818181818 181818181818181818181818181818181818181818181818181818181818181818181818181818 181818181818181818181818181818181818181818181818181818181818181818181818181818 181818181818181818181818181818181818171717171717171717171717171717171717171717 171717171717171717171717171717171717161616161616161616161616161616161616161616 161616151515151515151515151515151515151515151515141414141414141414141414141414 141414131313131313131313131313050303050101050101050101050101050101050101020000 656565FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF2A2A2A0000000000000000000000000000000000000000001919193E3E3E3E3E3E 3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C 3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939393939393939383838383838383838383838 383838373737373737373737373737363636363636363636363636353535353535353535353535 353535343434343434343434343434333333333333333333333333323232323232323232313131 3131313131313131313030303030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A 2A2A2A292929292929292929282828282828282828272727272727272727262626262626262626 2525252525252525252525251010100000000000000000000000000000000000000000000B0B0B FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF6262620000000000000000000000000000000000000000000505051C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919181818181818 181818181818171717171717171717161616161616161616161616151515151515151515141414 1414141414141414140C0C0C000000000000000000000000000000000000000000171717FBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000000000000000 0000000000000000000909090B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A090909090909090909090909090909090909080808080808080808080808080808070707 070707070707070707070707070707060606060606060606060606060606050505050505050505 050505050505050505040404040404040404040404040404040404040404040404040404040404 0404040303030000000000000000000000000000000000000000000101019C9C9CFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101919191D1D1D2424242828282D2D2D313131363636 3B3B3B4141414848484B4B4B4D4D4D5252525757575B5B5B5F5F5F616161646464656565686868 6C6C6C6F6F6F727272727272737373757575757575787878797979797979797979797979797979 7575757575757575757474747272726E6E6E6C6C6C6A6A6A6565656262625E5E5E5B5B5B5A5A5A 5555554F4F4F4A4A4A4545453F3F3F3838383131312D2D2D2626261D1D1D191919101010090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3B3B3000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090909090C0C0C0E0E0E101010111111131313141414141414141414151515151515151515 1515151414141313131111111010100E0E0E0E0E0E0C0C0C090909060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202000000000000 000000000000000000000000000000000000EEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F000000000000000000000000000000 0000000000000000000606060D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111111111111111121212121212121212121212121212121212 121212121212121212121212131313131313131313131313131313131313131313131313131313 131313141414141414141414141414141414141414141414141414141414141414151515151515 1515151515151515151515151C1C1C2121212626262B2B2B2E2E2E3232323838383B3B3B3E3E3E 4242424343434747474A4A4A4C4C4C4F4F4F505050525252535353555555575757585858595959 5A5A5A5A5A5A5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A595959585858575757555555535353525252 5151514E4E4E4C4C4C4A4A4A4848484444444040403D3D3D3939393737373333333030302A2A2A 2525251F1F1F1C1C1C181818181818181818181818181818181818191919191919191919191919 191919191919191919191919191919191919191919191919191919191919191919191919191919 191919191919191919191919191919191919191919191919191919191919181818181818181818 181818181818181818181818181818181818181818181818181818181818181818181818181818 171717171717171717171717171717171717171717171717171717171717171717171717161616 161616161616161616161616161616161616161616151515151515151515151515151515151515 141414141414141414141414141414131313131313050303050101050101050101050101050101 050101020000656565FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF2A2A2A0000000000000000000000000000000000000000001A1A1A 3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939393939393939 383838383838383838383838373737373737373737373737373737363636363636363636363636 353535353535353535353535343434343434343434343434333333333333333333333333323232 3232323232323232323131313131313131313131313030303030303030302F2F2F2F2F2F2F2F2F 2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A292929292929292929282828282828282828272727272727272727 262626262626262626252525252525252525111111000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000000000000000000000050505 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919 191919181818181818181818171717171717171717171717161616161616161616151515151515 1515151515151414141414141414140C0C0C000000000000000000000000000000000000000000 171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616000000000000 0000000000000000000000000000000909090B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909080808080808080808080808 080808080808070707070707070707070707070707060606060606060606060606060606060606 050505050505050505050505050505050505040404040404040404040404040404040404040404 0404040404040404040404040000000000000000000000000000000000000000000101019C9C9C FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000001010101616161919192020202626262A2A2A 2F2F2F3333333838383F3F3F4646464949494C4C4C5050505757575B5B5B5E5E5E616161626262 6464646868686C6C6C6F6F6F7272727272727373737575757676767878787979797A7A7A7A7A7A 7A7A7A7979797676767676767575757575757272727070706D6D6D6B6B6B696969656565626262 6060605D5D5D5959595353534D4D4D4949494242423B3B3B3636363131312A2A2A2424241D1D1D 161616090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797979 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090C0C0C0E0E0E101010101010111111131313141414141414151515151515 1515151515151515151414141313131111111010100E0E0E0C0C0C0C0C0C090909060606010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 000000000000000000000000000000000000000000141414FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F91B1B1B000000000000000000 0000000000000000000000000101010C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111111111111111121212121212121212121212121212121212 121212121212121212121212131313131313131313131313131313131313131313131313131313 141414141414141414141414141414141414141414141414141414141414141414151515151515 1515151515151515151515151515151A1A1A1C1C1C2222222626262C2C2C303030333333383838 3B3B3B3E3E3E4242424444444747474A4A4A4C4C4C4F4F4F515151525252545454565656575757 5858585959595A5A5A5A5A5A5B5B5B5A5A5A5A5A5A5A5A5A595959595959585858575757565656 5454545353535050504E4E4E4C4C4C4949494747474343434040403D3D3D393939363636323232 2E2E2E2A2A2A242424202020191919191919191919191919191919191919191919191919191919 191919191919191919191919191919191919191919191919191919191919191919191919191919 191919191919191919191919191919191919191919191919191919191919191919191919191919 191919191919191919191919191919191919191919191919181818181818181818181818181818 181818181818181818181818181818181818181818171717171717171717171717171717171717 171717171717171717171717161616161616161616161616161616161616161616151515151515 151515151515151515151515141414141414141414141414141414050303050101050101050101 050101050101050101020000646464FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000 0000001A1A1A3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E 3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C 3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939 393939393939393939393939383838383838383838383838373737373737373737373737373737 363636363636363636363636353535353535353535353535343434343434343434343434333333 333333333333333333323232323232323232313131313131313131313131303030303030303030 2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C 2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929292929282828282828282828 272727272727272727262626262626262626252525252525111111000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000000000000000 0000000505051C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A 191919191919191919181818181818181818181818171717171717171717171717161616161616 1616161515151515151515151515151414141414140D0D0D000000000000000000000000000000 000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3161616 0000000000000000000000000000000000000000000909090B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909080808 080808080808080808080808070707070707070707070707070707070707060606060606060606 060606060606060606050505050505050505050505050505040404040404040404040404040404 040404040404040404040404040404040404000000000000000000000000000000000000000000 0101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000909090909091616161D1D1D 2424242A2A2A2D2D2D3131313636363838384242424646464B4B4B5050505353535757575B5B5B 6060606464646565656868686B6B6B6E6E6E717171727272747474767676777777797979797979 7A7A7A7A7A7A7979797979797878787878787878787676767575757272726F6F6F6E6E6E6E6E6E 6A6A6A6464646161615F5F5F5A5A5A5555555050504D4D4D4949494242423D3D3D363636313131 282828242424191919101010090909000000000000000000000000000000000000000000000000 000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF3F3F3F000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060606060909090C0C0C0E0E0E101010111111131313141414151515151515 1515151515151515151515151515151414141313131111111010100E0E0E0C0C0C090909090909 060606010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202000000000000000000000000000000000000000000383838FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1A1A1000000000000 0000000000000000000000000000000000000606060D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010101010111111 111111111111111111111111111111111111111111111111121212121212121212121212121212 121212121212121212121212131313131313131313131313131313131313131313131313131313 141414141414141414141414141414141414141414141414141414141414151515151515151515 1515151515151515151515151515151515151515151A1A1A1D1D1D2323232828282D2D2D303030 3333333838383B3B3B3F3F3F4141414444444747474A4A4A4D4D4D505050515151525252545454 5656565757575858585959595A5A5A5A5A5A5B5B5B5A5A5A5B5B5B5A5A5A5A5A5A595959585858 5757575656565454545252525050504E4E4E4B4B4B4848484646464343434040403D3D3D393939 3636363131312E2E2E2A2A2A2424241D1D1D191919191919191919191919191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A191919191919191919191919191919191919191919191919191919191919191919 191919191919191919181818181818181818181818181818181818181818181818181818181818 181818171717171717171717171717171717171717171717171717161616161616161616161616 161616161616161616151515151515151515151515151515151515141414141414050303050101 050101050101050101050101050101020000646464FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000 0000000000000000001A1A1A3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E 3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A393939393939393939393939393939383838383838383838383838373737 373737373737373737363636363636363636363636363636353535353535353535353535343434 343434343434333333333333333333333333323232323232323232323232313131313131313131 3030303030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D 2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929292929 282828282828282828272727272727272727262626262626262626252525111111000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000 0000000000000000000505051D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818181818171717171717171717 1616161616161616161616161515151515151515151414141414140D0D0D000000000000000000 000000000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D3D3D31616160000000000000000000000000000000000000000000909090B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 090909080808080808080808080808080808080808070707070707070707070707070707060606 060606060606060606060606060606050505050505050505050505050505050505040404040404 040404040404040404040404040404040404040404040404000000000000000000000000000000 0000000000000101019C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 1010101616161D1D1D2626262A2A2A2D2D2D3131313636363D3D3D4242424949494D4D4D505050 5353535959595D5D5D6262626464646767676969696C6C6C6F6F6F727272747474767676777777 7979797979797A7A7A7A7A7A7979797979797979797979797878787676767575757272726F6F6F 6E6E6E6F6F6F6B6B6B6666666262626060605B5B5B5757575353534F4F4F4A4A4A4545453F3F3F 3A3A3A3333332A2A2A2626261D1D1D161616090909090909000000000000000000000000000000 000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFC0C0C0C000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060606060909090C0C0C0E0E0E101010111111131313141414 1515151515151515151515151515151515151515151414141313131111111010100E0E0E0C0C0C 090909090909060606010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020101010000000000000000000000000000000000000000005D5D5DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF303030 0000000000000000000000000000000000000000000101010C0C0C0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010111111 111111111111111111111111111111111111111111111111121212121212121212121212121212 121212121212121212121212131313131313131313131313131313131313131313131313131313 141414141414141414141414141414141414141414141414141414141414151515151515151515 1515151515151515151515151515151515151515151515151616161A1A1A1D1D1D232323282828 2D2D2D3030303434343838383B3B3B3F3F3F4242424545454848484B4B4B4E4E4E505050515151 5252525454545656565858585858585959595A5A5A5B5B5B5C5C5C5B5B5B5B5B5B5A5A5A5A5A5A 5959595858585656565555555353535252525050504E4E4E4C4C4C494949464646434343404040 3C3C3C3737373535353131312D2D2D2929292323231E1E1E1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A191919191919191919191919191919191919191919191919191919191919181818181818 181818181818181818181818181818181818171717171717171717171717171717171717171717 171717161616161616161616161616161616161616161616151515151515151515151515151515 050303050101050101050101050101050101050101020000656565FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000 0000000000000000000000000000001A1A1A4040404040404040404040403F3F3F3F3F3F3F3F3F 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939393939393939383838 383838383838383838373737373737373737373737363636363636363636363636353535353535 353535353535343434343434343434343434333333333333333333333333323232323232323232 3131313131313131313131313030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A 292929292929292929282828282828282828272727272727272727262626262626262626111111 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000 0000000000000000000000000000000505051D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919181818181818181818171717 1717171717171717171616161616161616161616161515151515151515151414140D0D0D000000 000000000000000000000000000000000000171717FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD3D3D31616160000000000000000000000000000000000000000000909090C0C0C 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909080808080808080808080808080808070707070707070707070707 070707070707060606060606060606060606060606060606050505050505050505050505050505 040404040404040404040404040404040404040404040404040404040404000000000000000000 0000000000000000000000000101019D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101919191D1D1D2424242828282D2D2D3131313838383F3F3F444444 4848484B4B4B4F4F4F5454545959596060606161616464646868686B6B6B6E6E6E717171727272 757575767676787878797979797979797979797979797979797979797979787878777777757575 7373737171716F6F6F7070706C6C6C6767676464646161615D5D5D5959595454545050504B4B4B 4646464141413B3B3B3636362D2D2D282828242424191919101010090909000000000000000000 000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD3D3D3000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090C0C0C0E0E0E101010101010111111 131313141414151515151515151515151515151515151515151515141414131313111111101010 0E0E0E0C0C0C090909060606060606010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101000000000000000000000000000000000000000000 818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF BABABA0000000000000000000000000000000000000000000000000606060D0D0D0D0D0D0D0D0D 0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010111111 111111111111111111111111111111111111111111111111121212121212121212121212121212 121212121212121212121212131313131313131313131313131313131313131313131313131313 141414141414141414141414141414141414141414141414141414141414151515151515151515 1515151515151515151515151515151515151515151616161616161616161616161A1A1A1D1D1D 2424242929292D2D2D3131313535353939393D3D3D4040404242424545454949494B4B4B4E4E4E 5050505151515252525555555656565858585959595A5A5A5B5B5B5B5B5B5C5C5C5B5B5B5B5B5B 5A5A5A5959595959595757575757575555555353535353535050504E4E4E4B4B4B484848464646 4343434040403C3C3C3838383535353232322C2C2C2828282424241E1E1E1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919 191919191919191919191919181818181818181818181818181818181818181818181818171717 171717171717171717171717171717171717161616161616161616161616161616161616151515 151515151515050303050101050101050101050101050101050101020000646464FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A 0000000000000000000000000000000000000000001A1A1A404040404040404040404040404040 4040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E 3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C 3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939 393939393939383838383838383838383838383838373737373737373737373737363636363636 363636363636353535353535353535353535343434343434343434333333333333333333333333 3232323232323232323131313131313131313131313030303030303030302F2F2F2F2F2F2F2F2F 2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828282828272727272727262626 2626261111110000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF636363 0000000000000000000000000000000000000000000404041D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919181818 181818181818171717171717171717171717161616161616161616151515151515151515151515 0C0C0C000000000000000000000000000000000000000000161616FCFCFCFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE3E3E3171717000000000000000000000000000000000000000000 0808080C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A090909090909090909090909090909080808080808080808080808080808080808070707 070707070707070707070707060606060606060606060606060606060606050505050505050505 050505050505050505040404040404040404040404040404040404040404040404030303000000 0000000000000000000000000000000000000A0A0AADADADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909091010101919191D1D1D2424242A2A2A2F2F2F353535 3A3A3A3F3F3F4444444646464B4B4B5050505656565B5B5B5E5E5E6161616464646868686C6C6C 6F6F6F717171737373747474767676787878797979797979797979787878787878797979787878 7777777676767474747272727070707272726E6E6E6969696666666262626060605B5B5B575757 5353534F4F4F4949494545453F3F3F3A3A3A3131312D2D2D282828202020161616101010090909 000000000000000000000000000000000000000000000000000000000000000000020202FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E9E9E000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E101010 111111111111131313141414151515151515151515151515151515151515151515141414131313 1111111010100E0E0E0C0C0C090909060606060606010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101000000000000000000000000000000 000000000000A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF4747470000000000000000000000000000000000000000000000000C0C0C0D0D0D 0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010 111111111111111111111111111111111111111111111111121212121212121212121212121212 121212121212121212121212131313131313131313131313131313131313131313131313131313 141414141414141414141414141414141414141414141414141414141414151515151515151515 151515151515151515151515151515151515151515161616161616161616161616161616161616 1A1A1A1D1D1D2424242929292E2E2E3131313636363939393D3D3D404040424242454545494949 4B4B4B4E4E4E5050505151515454545656565757575858585959595A5A5A5B5B5B5B5B5B5C5C5C 5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A5858585757575555555353535353534F4F4F4D4D4D4B4B4B 4949494646464444443F3F3F3D3D3D3838383535353131312C2C2C2828282121211E1E1E1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919181818181818181818 181818181818181818181818171717171717171717171717171717171717171717161616161616 161616161616161616161616050303050101050101050101050101050101050101020000646464 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF2A2A2A0000000000000000000000000000000000000000001B1B1B414141414141414141 4040404040404040404040404040404040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F 3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A 3A3A3A3A3A3A393939393939393939393939383838383838383838383838373737373737373737 373737363636363636363636363636353535353535353535353535343434343434343434343434 333333333333333333323232323232323232323232313131313131313131303030303030303030 3030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C 2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929282828282828282828 2727272727272626261111110000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF7E7E7E000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000001A1A1AFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB171717000000000000000000000000000000 0000000000000303030C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909080808080808080808080808 080808070707070707070707070707070707070707060606060606060606060606060606050505 050505050505050505050505050505040404040404040404040404040404040404040404040404 020202000000000000000000000000000000000000000000131313C8C8C8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000090909090909161616191919202020262626 2D2D2D3131313636363B3B3B4141414545454949495050505454545959595A5A5A5D5D5D616161 6565656A6A6A6D6D6D6E6E6E717171727272757575767676787878787878787878787878787878 7878787878787878787777777575757373737272727373736F6F6F6B6B6B686868666666626262 5E5E5E5A5A5A5555555050504C4C4C4949494444443D3D3D3636363131312D2D2D2626261D1D1D 161616090909080808000000000000000000000000000000000000000000000000000000000000 020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF696969000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060606060909090C0C0C 0E0E0E101010111111111111141414141414151515151515151515151515151515151515151515 1414141313131111111010100E0E0E0C0C0C090909060606010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202010101000000000000000000 000000000000000000000000CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD3D3D3010101000000000000000000000000000000000000000000050505 0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010 111111111111111111111111111111111111111111111111111111121212121212121212121212 121212121212121212121212131313131313131313131313131313131313131313131313131313 141414141414141414141414141414141414141414141414141414141414151515151515151515 151515151515151515151515151515151515151515161616161616161616161616161616161616 1616161616161A1A1A2020202525252B2B2B2F2F2F3131313636363939393D3D3D404040424242 4646464848484B4B4B4E4E4E5151515252525454545656565757575858585959595959595A5A5A 5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A585858575757555555545454525252505050 4E4E4E4C4C4C4949494545454343433E3E3E3C3C3C3838383535353131312B2B2B262626222222 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919 191919191919191919181818181818181818181818181818181818171717171717171717171717 171717171717171717161616161616161616050303050101050101050101050101050101050101 020000646464FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF2A2A2A0000000000000000000000000000000000000000001B1B1B414141 414141414141414141414141414141414141404040404040404040404040404040404040404040 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B 3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939393939383838383838383838 383838373737373737373737373737363636363636363636363636353535353535353535343434 343434343434343434333333333333333333333333323232323232323232313131313131313131 3030303030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929292929 282828282828282828272727272727111111000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA8A8A8090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000212121 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F000000000000000000 000000000000000000000000000000020202060606070707070707070707070707070707070707 060606060606060606060606060606060606050505050505050505050505050505050505050505 050505050505050505050505040404040404040404040404040404040404040404040404040404 040404040404030303030303030303030303030303020202020202020202020202020202020202 020202010101000000000000000000000000000000000000000000000000171717F0F0F0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909101010101010 1919192020202828282D2D2D3131313838383D3D3D4141414646464C4C4C505050565656575757 5A5A5A5E5E5E6262626868686B6B6B6D6D6D6F6F6F707070727272757575777777777777787878 7878787777777878787979797878787777777676767575757373737474747171716C6C6C6A6A6A 6969696565656161615D5D5D5757575454544F4F4F4B4B4B4848484141413A3A3A3535352F2F2F 282828202020191919101010080808000000000000000000000000000000000000000000000000 000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF343434000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606060606 0909090C0C0C0E0E0E101010111111131313141414151515151515151515151515151515151515 1515151414141414141111111010101010100E0E0E0C0C0C090909060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202000000000000 000000000000000000000000000000000000EEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000000000000000000000000000000000000000 0000000B0B0B0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010 101010111111111111111111111111111111111111111111111111121212121212121212121212 121212121212121212121212121212131313131313131313131313131313131313131313131313 141414141414141414141414141414141414141414141414141414141414151515151515151515 151515151515151515151515151515151515161616161616161616161616161616161616161616 1616161616161616161616161B1B1B2121212727272B2B2B2F2F2F3131313636363939393D3D3D 4141414343434747474949494C4C4C4E4E4E5151515252525454545656565757575858585A5A5A 5A5A5A5A5A5A5A5A5A5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A585858585858565656535353 5252525050504E4E4E4C4C4C4949494646464343433F3F3F3C3C3C3737373535353131312B2B2B 2626262222221B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A191919191919191919191919191919181818181818181818181818181818 181818171717171717171717171717171717171717161616050303050101050101050101050101 050101050101020000646464FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000 1B1B1B424242424242414141414141414141414141414141414141414141414141404040404040 4040404040404040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E 3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C 3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939 393939383838383838383838383838373737373737373737363636363636363636363636353535 353535353535353535343434343434343434333333333333333333333333323232323232323232 3131313131313131313131313030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A 292929292929292929282828282828272727272727121212000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEE161616000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000626262FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C6C6C010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000303030 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909090909091010101919192020202828282D2D2D3333333838383D3D3D4141414848484D4D4D 5252525555555858585B5B5B6161616565656969696B6B6B6E6E6E6F6F6F727272747474767676 777777777777777777777777787878797979797979787878777777757575747474757575727272 6E6E6E6B6B6B6B6B6B6868686464646060605A5A5A5656565050504D4D4D4A4A4A4545453D3D3D 3838383131312A2A2A2424241D1D1D1616160E0E0E010101000000000000000000000000000000 000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9070707 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C0E0E0E0E0E0E101010111111131313141414151515151515161616161616 1515151515151515151414141313131111111010101010100C0C0C090909090909060606010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8E8080808000000000000000000000000000000 0000000000000404040D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010 101010111111111111111111111111111111111111111111111111111111121212121212121212 121212121212121212121212121212131313131313131313131313131313131313131313131313 131313141414141414141414141414141414141414141414141414141414151515151515151515 151515151515151515151515151515151515161616161616161616161616161616161616161616 1616161616161616161717171717171717171B1B1B2121212727272B2B2B2F2F2F313131363636 3939393E3E3E4141414444444747474949494C4C4C4E4E4E515151525252545454565656585858 5959595A5A5A5A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A585858585858 5555555353535252525151514F4F4F4B4B4B4949494646464343433F3F3F3C3C3C373737343434 3030302B2B2B2727272323231C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919 181818181818181818181818181818181818171717171717171717171717050303050101050101 050101050101050101050101020000646464FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000 0000000000001B1B1B424242424242424242424242424242424242414141414141414141414141 4141414141414141414141414040404040404040404040404040404040403F3F3F3F3F3F3F3F3F 3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A 393939393939393939393939383838383838383838383838373737373737373737373737363636 363636363636363636353535353535353535343434343434343434343434333333333333333333 3232323232323232323232323131313131313131313030303030303030302F2F2F2F2F2F2F2F2F 2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2A2A2A2A2A2A2A2A2A292929292929292929282828282828272727121212000000000000000000 0000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF484848010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000151515D6D6D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D7D7D7151515000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0E0E0EA2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909090909091616161919192020202828282F2F2F3535353838383D3D3D 4444444949495050505353535656565A5A5A6060606464646868686A6A6A6C6C6C6E6E6E717171 737373757575767676777777777777777777787878797979797979797979777777757575757575 7575757272726E6E6E6C6C6C6B6B6B6969696565656161615B5B5B5757575353535050504B4B4B 4646463F3F3F3A3A3A3131312D2D2D2626262020201919190E0E0E010101000000000000000000 000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CACACA000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C0E0E0E101010111111111111131313141414151515161616 1616161616161515151515151414141414141313131111111010100E0E0E0C0C0C090909090909 060606010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202000000000000000000000000000000000000000000383838FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797979000000000000000000000000 0000000000000000000000000A0A0A0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010 101010101010111111111111111111111111111111111111111111111111121212121212121212 121212121212121212121212121212131313131313131313131313131313131313131313131313 131313141414141414141414141414141414141414141414141414141414151515151515151515 151515151515151515151515151515151515161616161616161616161616161616161616161616 1616161616161616161717171717171717171717171717171B1B1B2121212727272B2B2B2F2F2F 3232323737373B3B3B3F3F3F4141414444444747474949494C4C4C4E4E4E525252535353545454 5656565858585959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A 5959595858585656565454545252525151514E4E4E4B4B4B4949494545454343433F3F3F3D3D3D 3838383535353131312B2B2B2727272020201C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A191919191919191919191919181818181818181818181818181818171717171717050303 050101050101050101050101050101050101020000636363FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000 0000000000000000000000001B1B1B434343434343434343424242424242424242424242424242 424242424242414141414141414141414141414141414141414141404040404040404040404040 4040404040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D 3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939393939383838383838383838383838373737 373737373737363636363636363636363636353535353535353535353535343434343434343434 333333333333333333323232323232323232323232313131313131313131303030303030303030 2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C 2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828282828121212000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE161616000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000808085A5A5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF535353020202000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000262626FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909091010101919192020202828282D2D2D 3333333A3A3A4141414646464A4A4A4F4F4F5555555A5A5A5D5D5D606060646464676767696969 6B6B6B6E6E6E7272727474747575757676767676767878787979797979797A7A7A797979797979 7777777676767474747272727272726F6F6F6C6C6C6868686464646262626161615D5D5D585858 5454545050504A4A4A4242423F3F3F3A3A3A3535352D2D2D262626202020161616010101000000 000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF959595000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E101010111111111111131313141414 1515151616161616161616161515151414141414141414141313131111111010100E0E0E0C0C0C 090909090909060606010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020101010000000000000000000000000000000000000000005C5C5CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5131313000000000000 0000000000000000000000000000000303030E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010 101010101010111111111111111111111111111111111111111111111111121212121212121212 121212121212121212121212121212121212131313131313131313131313131313131313131313 131313141414141414141414141414141414141414141414141414141414151515151515151515 151515151515151515151515151515151515161616161616161616161616161616161616161616 1616161616161616161717171717171717171717171717171717171717171B1B1B212121272727 2C2C2C3030303333333737373B3B3B3F3F3F4141414545454848484A4A4A4D4D4D4F4F4F525252 5353535454545656565858585959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5B5B5B5B5B5B5B5B5B 5B5B5B5A5A5A5959595757575656565454545252525151514E4E4E4C4C4C4A4A4A464646434343 3E3E3E3D3D3D3838383434343030302A2A2A2525252121211D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919181818181818181818 181818050303050101050101050101050101050101050101020000636363FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000 0000000000000000000000000000000000001C1C1C434343434343434343434343434343434343 424242424242424242424242424242424242424242414141414141414141414141414141414141 4040404040404040404040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E 3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B 3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939383838383838 383838383838373737373737373737373737363636363636363636353535353535353535353535 343434343434343434333333333333333333333333323232323232323232313131313131313131 3030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828 1212120000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ABABAB121212000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000505052E2E2EF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB1D1D1D000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000131313CDCDCDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909090909161616191919 2424242828282F2F2F3535353B3B3B4141414646464B4B4B5050505656565959595B5B5B606060 6464646767676A6A6A6C6C6C7070707373737575757575757575757878787979797979797A7A7A 7979797979797777777676767373737272727272726F6F6F6C6C6C686868656565646464626262 5E5E5E5A5A5A5656565252524B4B4B4545453F3F3F3D3D3D3636362F2F2F282828202020161616 010101000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF616161000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060606060909090C0C0C0E0E0E101010111111131313 131313151515161616161616161616161616151515141414141414141414131313111111101010 0E0E0E0C0C0C090909090909060606010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101000000000000000000000000000000000000000000 7D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF939393000000 0000000000000000000000000000000000000000000909090E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010 101010101010101010111111111111111111111111111111111111111111111111121212121212 121212121212121212121212121212121212131313131313131313131313131313131313131313 131313141414141414141414141414141414141414141414141414141414151515151515151515 151515151515151515151515151515151515161616161616161616161616161616161616161616 1616161616161616161717171717171717171717171717171717171717171717171717171B1B1B 2222222828282C2C2C3030303333333737373B3B3B3F3F3F4141414646464848484A4A4A4D4D4D 4F4F4F5252525353535555555757575959595959595A5A5A5A5A5A5B5B5B5B5B5B5D5D5D5C5C5C 5C5C5C5B5B5B5B5B5B5A5A5A5959595757575555555555555353535050504F4F4F4B4B4B494949 4646464343433E3E3E3C3C3C3838383434343131312B2B2B2626262121211D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919 191919191919181818050303050101050101050101050101050101050101020000636363FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 2A2A2A0000000000000000000000000000000000000000001C1C1C444444444444444444444444 434343434343434343434343434343434343424242424242424242424242424242424242414141 4141414141414141414141414141414040404040404040404040404040403F3F3F3F3F3F3F3F3F 3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C 3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A393939393939 393939393939383838383838383838383838373737373737373737363636363636363636363636 353535353535353535343434343434343434343434333333333333333333323232323232323232 3131313131313131313030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929 2929292828281212120000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFB2B2B2171717030303000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000111111444444F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3171717000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000121212A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0B0B0B000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 1010101616161D1D1D2424242828282F2F2F3636363B3B3B3F3F3F4545454B4B4B505050545454 5757575B5B5B5F5F5F6464646767676B6B6B6E6E6E717171737373747474747474767676777777 7979797979797979797979797777777676767373737272727272727070706D6D6D696969666666 6464646262625E5E5E5A5A5A5757575353534D4D4D4646464141413F3F3F3838383131312A2A2A 2424241A1A1A020202000000000000000000000000000000000000000000000000000000020202 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B2B2B000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090909090C0C0C0E0E0E111111 131313131313141414151515161616161616161616151515151515151515141414141414131313 1010100E0E0E0E0E0E0C0C0C090909060606060606010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101000000000000000000000000000000 0000000000009C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC 2323230000000000000000000000000000000000000000000202020E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010 101010101010101010101010111111111111111111111111111111111111111111111111121212 121212121212121212121212121212121212121212131313131313131313131313131313131313 131313131313141414141414141414141414141414141414141414141414151515151515151515 151515151515151515151515151515151515161616161616161616161616161616161616161616 161616161616161616171717171717171717171717171717171717171717171717171717181818 1818181C1C1C2222222828282C2C2C3030303434343838383C3C3C3F3F3F434343464646484848 4B4B4B4D4D4D5050505252525353535555555757575959595959595A5A5A5B5B5B5C5C5C5C5C5C 5D5D5D5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5959595757575555555454545353535050504F4F4F 4B4B4B4949494747474343433F3F3F3D3D3D3838383434342F2F2F2B2B2B2626262121211D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A 1A1A1A1A1A1A191919191919191919050303050101050101050101050101050101050101020000 636363FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF2A2A2A0000000000000000000000000000000000000000001C1C1C454545444444 444444444444444444444444444444434343434343434343434343434343434343424242424242 424242424242424242424242414141414141414141414141414141404040404040404040404040 4040404040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A 3A3A3A3A3A3A393939393939393939383838383838383838383838373737373737373737373737 363636363636363636353535353535353535343434343434343434343434333333333333333333 3232323232323232323131313131313131313030303030303030303030302F2F2F2F2F2F2F2F2F 2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A 2A2A2A2929292929292929291212120000000000000000000000000000000000000000000B0B0B FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEA5E5E5E181818141414090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000404040F0F0F1717172A2A2AB3B3B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8202020 060606000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101171717B7B7B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101919191D1D1D2424242A2A2A3131313636363B3B3B414141484848 4C4C4C5050505454545858585D5D5D6161616464646767676B6B6B6E6E6E717171727272727272 7575757575757777777878787979797878787777777575757373737272727272727070706E6E6E 6B6B6B6868686666666464646060605B5B5B5959595555555050504949494444444141413B3B3B 3333332D2D2D2828281C1C1C020202000000000000000000000000000000000000000000000000 000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3030303000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E 101010111111131313141414151515151515161616161616151515151515151515151515151515 1414141111111010100E0E0E0C0C0C0C0C0C090909060606010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202010101000000000000000000 000000000000000000000000BABABAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFABABAB0000000000000000000000000000000000000000000000000808080E0E0E0E0E0E 0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010 101010101010101010101010111111111111111111111111111111111111111111111111121212 121212121212121212121212121212121212121212131313131313131313131313131313131313 131313131313141414141414141414141414141414141414141414141414141414151515151515 151515151515151515151515151515151515161616161616161616161616161616161616161616 161616161616161616171717171717171717171717171717171717171717171717171717181818 1818181818181818181C1C1C2222222828282C2C2C3030303535353838383C3C3C3F3F3F434343 4646464848484C4C4C4D4D4D5050505252525353535555555757575959595A5A5A5B5B5B5B5B5B 5C5C5C5C5C5C5D5D5D5C5C5C5C5C5C5B5B5B5C5C5C5A5A5A595959575757555555545454535353 5151514F4F4F4C4C4C4949494747474343433F3F3F3D3D3D3838383434343030302B2B2B272727 2222221E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A050303050101050101050101050101050101 050101020000636363FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF2A2A2A0000000000000000000000000000000000000000001C1C1C 454545454545454545454545454545444444444444444444444444444444444444434343434343 434343434343434343424242424242424242424242424242414141414141414141414141414141 4141414040404040404040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E 3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B 3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939393939383838383838383838373737 373737373737373737363636363636363636353535353535353535353535343434343434343434 333333333333333333323232323232323232313131313131313131313131303030303030303030 2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A292929292929131313000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCC9C9C9ADADAD 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999A0A0A0BABABAE8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF1F1F16D6D6D161616060606000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000303031515154D4D4DE2E2E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909091616161919192020202626262D2D2D333333383838 3D3D3D4545454A4A4A4D4D4D5252525757575A5A5A5D5D5D6060606464646868686B6B6B6E6E6E 707070707070727272737373757575777777787878777777767676757575737373727272727272 7171716E6E6E6B6B6B6969696868686464646161615D5D5D5A5A5A5757575252524B4B4B464646 4444443D3D3D3636363131312A2A2A222222020202000000000000000000000000000000000000 000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1C1C1000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C0E0E0E101010111111131313141414151515151515161616161616161616151515151515 1515151515151414141111111010100E0E0E0C0C0C090909090909060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202000000000000 000000000000000000000000000000000000D8D8D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF3B3B3B0000000000000000000000000000000000000000000101010D0D0D 0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010 101010101010101010101010101010111111111111111111111111111111111111111111111111 121212121212121212121212121212121212121212121212131313131313131313131313131313 131313131313131313141414141414141414141414141414141414141414141414151515151515 151515151515151515151515151515151515151515161616161616161616161616161616161616 161616161616161616171717171717171717171717171717171717171717171717171717181818 1818181818181818181818181818181C1C1C2222222929292D2D2D3131313535353939393D3D3D 4040404444444747474A4A4A4B4B4B4D4D4D5151515252525555555757575858585959595A5A5A 5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5C5C5C5C5C5C5B5B5B5C5C5C5A5A5A595959585858565656 5454545454545151514E4E4E4B4B4B4848484646464343434040403C3C3C383838353535303030 2B2B2B2525252222221E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 202020202020202020202020202020202020202020202020202020202020202020202020202020 2020202020202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A050303050101050101050101 050101050101050101020000626262FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000 0000001D1D1D464646464646454545454545454545454545454545454545444444444444444444 444444444444444444434343434343434343434343434343424242424242424242424242424242 4141414141414141414141414141414040404040404040404040404040403F3F3F3F3F3F3F3F3F 3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C 3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939383838 383838383838383838373737373737373737363636363636363636363636353535353535353535 343434343434343434333333333333333333323232323232323232323232313131313131313131 3030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C 2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929131313000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEA9595953636361F1F1F181818141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 1414141414141414141717171E1E1E2B2B2B808080DCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000090909101010161616191919202020282828 2F2F2F3333333838384141414646464B4B4B4F4F4F5353535858585A5A5A5D5D5D616161656565 6969696C6C6C6E6E6E6E6E6E707070727272747474757575767676767676767676757575727272 7272727272727171716F6F6F6C6C6C6A6A6A6868686565656262625E5E5E5B5B5B595959545454 4D4D4D4949494646464141413A3A3A3535352F2F2F232323020202000000000000000000000000 000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B8B8B000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0606060909090C0C0C0E0E0E101010111111141414141414151515151515161616161616161616 1515151515151515151414141313131111111010100E0E0E0C0C0C090909090909060606010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 000000000000000000000000000000000000000000000000F5F5F5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD0D0D0000000000000000000000000000000000000000000000000 0606060E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010 101010101010101010101010101010101010111111111111111111111111111111111111111111 121212121212121212121212121212121212121212121212131313131313131313131313131313 131313131313131313141414141414141414141414141414141414141414141414151515151515 151515151515151515151515151515151515151515161616161616161616161616161616161616 161616161616161616171717171717171717171717171717171717171717171717171717181818 1818181818181818181818181818181818181818181D1D1D2323232929292D2D2D313131363636 3939393E3E3E4141414545454747474A4A4A4B4B4B4E4E4E515151545454555555575757585858 5959595A5A5A5C5C5C5B5B5B5C5C5C5C5C5C5D5D5D5C5C5C5C5C5C5B5B5B5C5C5C5A5A5A5A5A5A 5858585656565454545454545050504E4E4E4C4C4C4949494747474343434040403C3C3C383838 3535353030302B2B2B2626262323231F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020202020202020202020202020202020202020202020 202020202020202020202020202020202020202020202020202020202020202020202020202020 202020202020202020202020202020202020202020202020202020202020202020202020202020 2020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B060404050101 050101050101050101050101050101020000626262FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000 0000000000000000001D1D1D464646464646464646464646464646464646454545454545454545 454545454545454545444444444444444444444444444444434343434343434343434343424242 424242424242424242424242414141414141414141414141414141404040404040404040404040 4040403F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D 3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A393939 393939393939393939383838383838383838373737373737373737363636363636363636363636 353535353535353535343434343434343434333333333333333333323232323232323232323232 3131313131313131313030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D 2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A131313000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000 000000000000000000000000000000000000020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909101010161616 1D1D1D2424242828282D2D2D3333333B3B3B4141414646464B4B4B5050505454545757575A5A5A 5E5E5E6262626767676B6B6B6C6C6C6D6D6D6F6F6F707070727272757575757575767676757575 7575757272727272727272727171716F6F6F6D6D6D6B6B6B6A6A6A6666666262625F5F5F5D5D5D 5A5A5A5656565050504B4B4B4848484242423D3D3D363636313131282828030303000000000000 000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 565656000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090C0C0C0E0E0E0E0E0E111111131313141414151515151515161616161616 1616161616161616161515151515151414141313131111111010100E0E0E0C0C0C090909060606 060606010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202000000000000000000000000000000000000000000151515FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF656565000000000000000000000000000000000000 0000000000000C0C0C0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010 101010101010101010101010101010101010111111111111111111111111111111111111111111 111111121212121212121212121212121212121212121212121212131313131313131313131313 131313131313131313131313141414141414141414141414141414141414141414141414151515 151515151515151515151515151515151515151515161616161616161616161616161616161616 161616161616161616171717171717171717171717171717171717171717171717171717181818 1818181818181818181818181818181818181818181919191919191D1D1D2323232929292D2D2D 3232323737373A3A3A3E3E3E4141414545454747474A4A4A4C4C4C4F4F4F515151545454555555 5757575959595A5A5A5B5B5B5C5C5C5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5D5D5D5C5C5C5C5C5C 5A5A5A5A5A5A5858585656565555555454545151514F4F4F4C4C4C494949474747434343404040 3D3D3D3939393636363131312C2C2C2626262323231F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020202020202020202020202020202020202020202020202020202020202020202020 202020202020212121212121212121212121212121212121212121212121212121212121212121 212121212121212121212121212121212121212121212121212121212121212121212121212121 212121212121212121202020202020202020202020202020202020202020202020202020202020 2020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C 060404050101050101050101050101050101050101020000626262FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000 0000000000000000000000000000001D1D1D474747474747474747464646464646464646464646 464646464646454545454545454545454545454545454545444444444444444444444444434343 434343434343434343434343424242424242424242424242414141414141414141414141414141 4040404040404040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E 3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A 3A3A3A3A3A3A393939393939393939393939383838383838383838373737373737373737373737 363636363636363636353535353535353535343434343434343434333333333333333333333333 3232323232323232323131313131313131313030303030303030302F2F2F2F2F2F2F2F2F2E2E2E 2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A131313 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000 000000000000000000000000000000000000000000000000020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091010101616161D1D1D2424242828282F2F2F3636363D3D3D4141414646464B4B4B505050 5555555858585B5B5B6161616565656969696B6B6B6C6C6C6E6E6E6F6F6F727272747474757575 7676767575757575757272727272727272727272727070706E6E6E6B6B6B6A6A6A676767646464 6060605D5D5D5B5B5B5757575050504C4C4C4949494444443D3D3D383838353535282828030303 000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF212121000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090C0C0C0E0E0E101010111111131313141414151515151515 1616161616161616161616161616161515151414141414141313131111111010100E0E0E0C0C0C 090909060606060606010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202000000000000000000000000000000000000000000333333FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F20D0D0D000000000000000000000000 0000000000000000000505050E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 101010101010101010101010101010101010101010111111111111111111111111111111111111 111111111111121212121212121212121212121212121212121212131313131313131313131313 131313131313131313131313141414141414141414141414141414141414141414141414151515 151515151515151515151515151515151515151515151515161616161616161616161616161616 161616161616161616171717171717171717171717171717171717171717171717171717181818 1818181818181818181818181818181818181818181919191919191919191919191D1D1D232323 2A2A2A2E2E2E3232323737373A3A3A3E3E3E4141414545454848484A4A4A4C4C4C4F4F4F515151 5454545555555757575959595A5A5A5B5B5B5C5C5C5B5B5B5D5D5D5D5D5D5E5E5E5D5D5D5D5D5D 5C5C5C5C5C5C5A5A5A5A5A5A5959595757575555555454545151514F4F4F4C4C4C4A4A4A474747 4444444141413D3D3D3939393636363131312C2C2C262626232323202020202020202020202020 202020202020202020202020202020202020202020202020212121212121212121212121212121 212121212121212121212121212121212121212121212121212121212121212121212121212121 212121212121212121212121212121212121212121212121212121212121212121212121212121 212121212121212121212121212121212121212121212121212121212121212121212121212121 2121212020202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1C1C1C060404050101050101050101050101050101050101020000626262FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A 0000000000000000000000000000000000000000001D1D1D474747474747474747474747474747 474747474747464646464646464646464646464646454545454545454545454545454545444444 444444444444444444444444434343434343434343434343424242424242424242424242414141 4141414141414141414141414040404040404040404040404040403F3F3F3F3F3F3F3F3F3F3F3F 3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B 3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939383838383838383838383838 373737373737373737363636363636363636353535353535353535343434343434343434343434 3333333333333333333232323232323232323131313131313131313030303030303030302F2F2F 2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2A2A2A1313130000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B 000000000000000000000000000000000000000000000000000000000000020202020202010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000001010101616161D1D1D2828282D2D2D3535353A3A3A3D3D3D424242 4949494F4F4F5252525656565B5B5B6060606262626565656868686B6B6B6C6C6C6E6E6E707070 7272727373737474747474747373737373737373737272727272726F6F6F6D6D6D6A6A6A686868 6767676666666262626060605B5B5B5757575353535050504C4C4C4646464141413B3B3B363636 2B2B2B030303000000000000000000000000000000000000000000000000000000020202FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEDEDED010101000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090C0C0C0E0E0E101010111111141414151515 1515151616161616161818181818181616161616161515151414141414141313131111110E0E0E 0C0C0C0C0C0C090909060606010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101000000000000000000000000000000000000000000 515151FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF929292000000000000000000 0000000000000000000000000000000B0B0B0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010111111111111111111111111111111 111111111111121212121212121212121212121212121212121212121212131313131313131313 131313131313131313131313131313141414141414141414141414141414141414141414141414 151515151515151515151515151515151515151515151515161616161616161616161616161616 161616161616161616161616171717171717171717171717171717171717171717171717181818 181818181818181818181818181818181818181818191919191919191919191919191919191919 1E1E1E2424242A2A2A2E2E2E3232323737373B3B3B3E3E3E4242424545454848484A4A4A4C4C4C 5050505252525555555555555757575959595A5A5A5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E 5D5D5D5D5D5D5D5D5D5D5D5D5B5B5B5A5A5A5959595757575555555454545252525050504C4C4C 4A4A4A4747474444444141413D3D3D3939393737373131312D2D2D272727242424202020202020 202020202020202020202020212121212121212121212121212121212121212121212121212121 212121212121212121212121212121212121212121212121222222222222222222222222222222 222222222222222222222222222222222222222222222222222222222222222222222222222222 222222222222222222222222222222222222222222222222222222212121212121212121212121 212121212121212121212121212121212121212121212121212121202020202020202020202020 2020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D060404050101050101050101050101050101050101020000626262 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF2A2A2A0000000000000000000000000000000000000000001D1D1D484848484848484848 484848474747474747474747474747474747474747464646464646464646464646464646454545 454545454545454545454545444444444444444444444444434343434343434343434343424242 4242424242424242424141414141414141414141414141414040404040404040404040403F3F3F 3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C 3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939393939383838 383838383838383838373737373737373737363636363636363636353535353535353535353535 343434343434343434333333333333333333323232323232323232313131313131313131303030 3030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C 2B2B2B2B2B2B2B2B2B1313130000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909091010101919192424242828282F2F2F353535 3838383F3F3F4545454B4B4B4D4D4D5353535959595D5D5D5F5F5F6161616565656868686B6B6B 6C6C6C6E6E6E7171717272727373737373737272727373737272727272727171716F6F6F6C6C6C 6A6A6A6868686666666565656464646060605B5B5B5757575353535050504C4C4C484848414141 3B3B3B3838382D2D2D030303000000000000000000000000000000000000000000000000000000 020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7B7B7000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090C0C0C0E0E0E101010111111 141414151515151515161616161616181818181818181818161616151515141414131313131313 1111110E0E0E0C0C0C0C0C0C090909060606010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101000000000000000000000000000000 0000000000006F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C2C2C000000 0000000000000000000000000000000000000303030F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010101010111111111111111111111111 111111111111111111121212121212121212121212121212121212121212121212131313131313 131313131313131313131313131313141414141414141414141414141414141414141414141414 151515151515151515151515151515151515151515151515161616161616161616161616161616 161616161616161616161616171717171717171717171717171717171717171717171717171717 181818181818181818181818181818181818181818191919191919191919191919191919191919 1A1A1A1A1A1A1E1E1E2424242A2A2A2E2E2E3333333838383B3B3B3E3E3E424242454545484848 4B4B4B4D4D4D5050505252525555555555555757575A5A5A5A5A5A5B5B5B5C5C5C5C5C5C5D5D5D 5D5D5D5E5E5E5E5E5E5E5E5E5D5D5D5D5D5D5B5B5B5A5A5A595959575757565656555555525252 5050504C4C4C4A4A4A4747474545454242423E3E3E3A3A3A3737373131312D2D2D272727242424 202020212121212121212121212121212121212121212121212121212121212121212121212121 212121222222222222222222222222222222222222222222222222222222222222222222222222 222222222222222222222222222222222222222222222222222222222222222222222222222222 222222222222222222222222222222222222222222222222222222222222222222222222222222 222222222222222222222222222222222222212121212121212121212121212121212121212121 2121212121212121212020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E060404050101050101050101050101050101050101 020000626262FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF2A2A2A0000000000000000000000000000000000000000001E1E1E494949 494949484848484848484848484848484848484848474747474747474747474747474747464646 464646464646464646464646454545454545454545454545444444444444444444444444434343 434343434343434343424242424242424242424242414141414141414141414141414141404040 4040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D 3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939 393939393939393939383838383838383838373737373737373737363636363636363636353535 353535353535353535343434343434343434333333333333333333323232323232323232313131 3131313131313030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B141414000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000 000000020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909090909101010191919202020 2828282D2D2D3333333838383F3F3F4545454848484D4D4D5353535757575A5A5A5D5D5D616161 6464646868686A6A6A6C6C6C6E6E6E707070727272727272727272727272727272717171707070 6E6E6E6C6C6C6A6A6A6868686666666565656464646161615B5B5B5757575454545050504D4D4D 4949494242423D3D3D3838382D2D2D030303000000000000000000000000000000000000000000 000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858585000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090909090E0E0E101010 111111131313141414151515161616161616181818181818181818161616161616161616151515 1414141111111111110E0E0E0C0C0C090909060606060606010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202010101000000000000000000 0000000000000000000000008D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF 0000000000000000000000000000000000000000000000000909090F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F101010101010101010101010101010101010101010101010111111111111111111 111111111111111111111111121212121212121212121212121212121212121212131313131313 131313131313131313131313131313131313141414141414141414141414141414141414141414 141414151515151515151515151515151515151515151515151515161616161616161616161616 161616161616161616161616171717171717171717171717171717171717171717171717171717 181818181818181818181818181818181818181818191919191919191919191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1E1E1E2424242B2B2B2F2F2F3333333838383B3B3B3E3E3E434343 4646464949494B4B4B4D4D4D5050505252525555555656565858585A5A5A5A5A5A5B5B5B5C5C5C 5D5D5D5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5D5D5D5D5D5D5C5C5C5B5B5B595959575757565656 5555555252525050504D4D4D4B4B4B4848484545454242423E3E3E3A3A3A3737373131312E2E2E 282828252525212121212121212121212121212121212121212121212121222222222222222222 222222222222222222222222222222222222222222222222222222222222222222222222222222 222222232323232323232323232323232323232323232323232323232323232323232323232323 232323232323232323232323232323232323232323232323232323232323232323232323232323 232323222222222222222222222222222222222222222222222222222222222222222222222222 222222212121212121212121212121212121212121212121212121202020202020202020202020 2020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E060404050101050101050101050101 050101050101020000616161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000 1E1E1E494949494949494949494949494949484848484848484848484848484848484848474747 474747474747474747474747464646464646464646464646454545454545454545454545454545 444444444444444444444444434343434343434343424242424242424242424242414141414141 4141414141414141414040404040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E 3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A 3A3A3A3A3A3A3A3A3A393939393939393939383838383838383838373737373737373737363636 363636363636363636353535353535353535343434343434343434333333333333333333323232 3232323232323131313131313131313030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B141414000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000 000000000000000000020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 1616161919192424242828282D2D2D3535353B3B3B3F3F3F4444444848484F4F4F535353575757 5A5A5A5D5D5D6161616464646666666969696B6B6B6E6E6E6F6F6F6F6F6F6F6F6F6F6F6F707070 7070706F6F6F6E6E6E6B6B6B6969696868686666666565656464646161615D5D5D595959565656 5353534F4F4F4949494242423F3F3F3A3A3A2F2F2F030303000000000000000000000000000000 000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF565656000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 0E0E0E101010111111131313131313151515161616161616181818181818181818161616161616 1616161515151414141111111111110E0E0E0C0C0C090909060606060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101000000 000000000000000000000000000000000000ABABABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF5656560000000000000000000000000000000000000000000101010E0E0E0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010111111111111111111 111111111111111111111111111111121212121212121212121212121212121212121212131313 131313131313131313131313131313131313131313141414141414141414141414141414141414 141414151515151515151515151515151515151515151515151515161616161616161616161616 161616161616161616161616161616171717171717171717171717171717171717171717171717 181818181818181818181818181818181818181818191919191919191919191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1F1F1F2525252B2B2B2F2F2F3333333838383C3C3C 3F3F3F4343434646464949494B4B4B4D4D4D5050505353535555555656565858585A5A5A5A5A5A 5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5D5D5D5D5D5D5C5C5C5B5B5B595959 5757575656565656565252525151514D4D4D4B4B4B4848484545454242423F3F3F3B3B3B373737 3232322E2E2E282828252525212121212121212121222222222222222222222222222222222222 222222222222222222222222222222222222222222232323232323232323232323232323232323 232323232323232323232323232323232323232323232323232323232323232323232323232323 232323232323232323232323232323232323232323232323232323232323232323232323232323 232323232323232323232323232323232323232323232323232323232323232323232323222222 222222222222222222222222222222222222222222222222212121212121212121212121212121 2121212121212020202020202020202020202020201F1F1F1F1F1F1F1F1F060404050101050101 050101050101050101050101020000616161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000 0000000000001E1E1E4A4A4A4A4A4A4A4A4A494949494949494949494949494949494949484848 484848484848484848484848474747474747474747474747464646464646464646464646464646 454545454545454545454545444444444444444444444444434343434343434343424242424242 4242424242424141414141414141414141414040404040404040404040403F3F3F3F3F3F3F3F3F 3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B 3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939383838383838383838373737 373737373737373737363636363636363636353535353535353535343434343434343434333333 3333333333333232323232323232323131313131313131313030303030303030302F2F2F2F2F2F 2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C141414000000000000000000 0000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000 000000000000000000000000000000020202020202020202010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000001010101616161D1D1D2424242A2A2A3131313636363D3D3D3F3F3F4545454B4B4B 5050505454545757575B5B5B6060606161616262626565656868686B6B6B6C6C6C6D6D6D6D6D6D 6E6E6E6E6E6E6E6E6E6E6E6E6C6C6C6B6B6B6969696868686666666565656464646161615E5E5E 5A5A5A5757575454545050504B4B4B4545453F3F3F3B3B3B303030030303000000000000000000 000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF262626000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C0E0E0E101010111111131313141414151515161616161616181818181818181818 1616161616161616161515151313131111111010100E0E0E0C0C0C090909060606060606010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 010101000000000000000000000000000000000000000000C9C9C9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E70505050000000000000000000000000000000000000000000707070F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010111111111111 111111111111111111111111111111121212121212121212121212121212121212121212121212 131313131313131313131313131313131313131313141414141414141414141414141414141414 141414141414151515151515151515151515151515151515151515151515161616161616161616 161616161616161616161616161616171717171717171717171717171717171717171717171717 181818181818181818181818181818181818181818181818191919191919191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1F1F1F2525252B2B2B2F2F2F343434 3838383C3C3C3F3F3F4343434646464949494C4C4C4E4E4E515151545454555555575757585858 5A5A5A5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5D5D5D5C5C5C 5C5C5C5B5B5B5858585757575656565353535151514E4E4E4C4C4C4A4A4A464646424242404040 3C3C3C3737373232322E2E2E2A2A2A262626222222222222222222222222222222222222222222 222222222222222222232323232323232323232323232323232323232323232323232323232323 232323232323232323232323232323232323242424242424242424242424242424242424242424 242424242424242424242424242424242424242424242424242424242424242424242424242424 242424242424242424242424242424242424242424232323232323232323232323232323232323 232323232323232323232323232323232323232323222222222222222222222222222222222222 222222222222212121212121212121212121212121202020202020202020202020202020060404 050101050101050101050101050101050101020000616161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000 0000000000000000000000001F1F1F4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949 494949494949494949494949484848484848484848484848474747474747474747474747474747 464646464646464646464646454545454545454545454545444444444444444444444444434343 434343434343424242424242424242424242414141414141414141414141404040404040404040 4040403F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C 3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939393939383838 383838383838383838373737373737373737363636363636363636353535353535353535343434 343434343434333333333333333333323232323232323232313131313131313131303030303030 2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C141414000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000 000000000000000000000000000000000000000000020202020202020202010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101919191D1D1D2626262A2A2A3333333838383B3B3B 4141414848484D4D4D5050505555555A5A5A5D5D5D5D5D5D5F5F5F6262626666666868686B6B6B 6B6B6B6B6B6B6B6B6B6C6C6C6D6D6D6C6C6C6B6B6B6A6A6A686868686868666666656565646464 6262625F5F5F5B5B5B5858585656565050504B4B4B4545454141413D3D3D303030030303000000 000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5 030303000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060606060909090C0C0C0E0E0E101010131313141414141414151515161616161616181818 1818181818181616161616161616161515151313131111111010100E0E0E0C0C0C090909060606 060606010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202000000000000000000000000000000000000000000000000E4E4E4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF838383000000000000000000000000000000000000000000000000 0D0D0D0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010111111 111111111111111111111111111111111111121212121212121212121212121212121212121212 121212131313131313131313131313131313131313131313141414141414141414141414141414 141414141414141414151515151515151515151515151515151515151515151515161616161616 161616161616161616161616161616161616171717171717171717171717171717171717171717 171717181818181818181818181818181818181818181818191919191919191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1F1F1F2525252B2B2B 3030303434343838383C3C3C3F3F3F4343434747474949494C4C4C4E4E4E515151545454565656 5858585858585A5A5A5C5C5C5D5D5D5D5D5D5E5E5E5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E5E5E 5E5E5E5E5E5E5C5C5C5B5B5B5959595757575656565353535252524F4F4F4C4C4C4A4A4A464646 4242424040403C3C3C3838383333332E2E2E2B2B2B262626222222222222222222222222222222 232323232323232323232323232323232323232323232323232323232323232323232323232323 242424242424242424242424242424242424242424242424242424242424242424242424242424 242424242424242424242424242424242424242424242424242424242424242424242424242424 242424242424242424242424242424242424242424242424242424242424242424242424242424 242424242424242424242424232323232323232323232323232323232323232323232323232323 232323222222222222222222222222222222222222212121212121212121212121212121212121 202020060404050101050101050101050101050101050101020000606060FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000 0000000000000000000000000000000000001F1F1F4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A494949494949494949494949494949484848484848484848484848484848 474747474747474747474747464646464646464646464646454545454545454545454545444444 444444444444434343434343434343434343424242424242424242424242414141414141414141 4141414040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D 3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939 393939393939383838383838383838383838373737373737373737363636363636363636353535 353535353535343434343434343434333333333333333333323232323232323232313131313131 3131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C 1414140000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000 000000000000000000000000000000000000000000000000000000020202020202020202020202 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909091010101919191D1D1D2626262D2D2D 3333333636363B3B3B4242424848484C4C4C5050505555555959595A5A5A5D5D5D606060646464 6767676868686A6A6A6A6A6A6A6A6A6B6B6B6B6B6B6B6B6B6B6B6B6A6A6A686868686868666666 6565656464646262626060605B5B5B5959595757575252524C4C4C4646464141413D3D3D303030 030303000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFC7C7C7000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C0C0C0C0E0E0E111111131313141414151515151515161616 1616161818181818181818181616161616161515151414141313131111111010100E0E0E0C0C0C 090909060606010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202000000000000000000000000000000000000000000010101FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC1F1F1F000000000000000000000000000000000000 0000000404040F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010 111111111111111111111111111111111111111111121212121212121212121212121212121212 121212131313131313131313131313131313131313131313131313141414141414141414141414 141414141414141414151515151515151515151515151515151515151515151515161616161616 161616161616161616161616161616161616171717171717171717171717171717171717171717 171717181818181818181818181818181818181818181818191919191919191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B202020 2525252B2B2B3030303434343838383D3D3D4040404343434747474949494C4C4C4E4E4E525252 5454545656565858585858585A5A5A5C5C5C5D5D5D5E5E5E5F5F5F5F5F5F5F5F5F5F5F5F606060 6060605F5F5F5E5E5E5E5E5E5C5C5C5B5B5B5959595858585757575454545252524F4F4F4C4C4C 4A4A4A4646464343434141413D3D3D3838383333332F2F2F2B2B2B262626222222232323232323 232323232323232323232323232323232323232323232323232323242424242424242424242424 242424242424242424242424242424242424242424242424242424242424242424242424252525 252525252525252525252525252525252525252525252525252525252525252525252525252525 252525252525252525252525252525252525252525252525252525252525252525252525252525 242424242424242424242424242424242424242424242424242424242424242424242424232323 232323232323232323232323232323232323232323222222222222222222222222222222222222 212121212121212121060404050101050101050101050101050101050101020000616161FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 2A2A2A0000000000000000000000000000000000000000001F1F1F4C4C4C4B4B4B4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949494949494949 484848484848484848484848474747474747474747474747464646464646464646464646454545 454545454545454545444444444444444444434343434343434343434343424242424242424242 4141414141414141414141414040404040404040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E 3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A 3A3A3A3A3A3A393939393939393939393939383838383838383838373737373737373737363636 363636363636353535353535353535343434343434343434333333333333333333323232323232 3232323131313131313030303030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D 2D2D2D2D2D2D1414140000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0B0B0B000000000000000000000000000000000000000000000000000000000000020202020202 020202020202010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909101010191919 2020202828282F2F2F3131313636363F3F3F4444444848484C4C4C5050505555555959595B5B5B 5E5E5E6262626565656868686969696969696969696A6A6A6B6B6B6B6B6B6B6B6B696969686868 6767676565656464646464646262626060605D5D5D5A5A5A5757575252524D4D4D464646414141 3D3D3D323232040404000000000000000000000000000000000000000000000000000000020202 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF989898000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E101010111111141414151515151515 151515161616161616181818181818181818161616161616151515141414131313111111101010 0E0E0E0C0C0C090909060606010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202000000000000000000000000000000000000000000 141414FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF000000000000000000000000000000 0000000000000000000A0A0A0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010 101010111111111111111111111111111111111111111111121212121212121212121212121212 121212121212131313131313131313131313131313131313131313131313141414141414141414 141414141414141414141414151515151515151515151515151515151515151515151515161616 161616161616161616161616161616161616161616171717171717171717171717171717171717 171717171717181818181818181818181818181818181818181818191919191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C2020202525252B2B2B3030303535353939393D3D3D4040404343434747474A4A4A4D4D4D 4F4F4F5252525454545656565858585959595B5B5B5C5C5C5D5D5D5E5E5E5F5F5F5F5F5F616161 6161616060606060605F5F5F5F5F5F5E5E5E5D5D5D5C5C5C5A5A5A585858575757555555525252 5050504E4E4E4A4A4A4747474343434141413D3D3D3939393535353030302C2C2C272727232323 232323232323232323232323232323232323242424242424242424242424242424242424242424 242424242424242424242424242424242424252525252525252525252525252525252525252525 252525252525252525252525252525252525252525252525252525252525252525252525252525 252525252525252525252525252525252525252525252525252525252525252525252525252525 252525252525252525252525252525252525252525252525252525252525242424242424242424 242424242424242424242424242424242424232323232323232323232323232323232323232323 222222222222222222222222222222060404050101050101050101050101050101050101020000 606060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF2A2A2A0000000000000000000000000000000000000000001F1F1F4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 494949494949494949494949484848484848484848484848484848474747474747474747464646 464646464646464646454545454545454545454545444444444444444444434343434343434343 4242424242424242424242424141414141414141414141414040404040404040403F3F3F3F3F3F 3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B 3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939383838383838383838373737 373737373737363636363636363636353535353535353535343434343434343434333333333333 3333333232323232323232323131313131313030303030303030302F2F2F2F2F2F2F2F2F2E2E2E 2E2E2E2E2E2E2D2D2D2D2D2D1414140000000000000000000000000000000000000000000B0B0B FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091010101D1D1D2424242626262F2F2F3535353B3B3B4141414545454949494F4F4F535353 5555555757575A5A5A5E5E5E616161646464646464656565686868686868696969696969686868 6868686666666666666565656464646464646161615E5E5E5A5A5A5757575454545050504B4B4B 4646464242423F3F3F333333040404000000000000000000000000000000000000000000000000 000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF696969000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090C0C0C0E0E0E101010131313141414 151515161616161616161616161616181818181818181818161616161616151515141414131313 1111111010100E0E0E090909060606060606010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202000000000000000000000000000000 0000000000002C2C2CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF464646000000000000000000 0000000000000000000000000101010F0F0F0F0F0F0F0F0F101010101010101010101010101010 101010101010111111111111111111111111111111111111111111121212121212121212121212 121212121212121212131313131313131313131313131313131313131313141414141414141414 141414141414141414141414141414151515151515151515151515151515151515151515161616 161616161616161616161616161616161616161616171717171717171717171717171717171717 171717171717181818181818181818181818181818181818181818191919191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C2020202525252C2C2C3131313535353939393D3D3D404040444444484848 4A4A4A4D4D4D4F4F4F5252525454545757575858585959595B5B5B5C5C5C5E5E5E5F5F5F606060 6161616060606060606161616060606060605F5F5F5F5F5F5E5E5E5C5C5C5A5A5A595959585858 5555555353535050504E4E4E4A4A4A4848484444444141413E3E3E3B3B3B3636363030302E2E2E 272727232323232323232323242424242424242424242424242424242424242424242424242424 242424242424252525252525252525252525252525252525252525252525252525252525252525 252525252525252525252525252525262626262626262626262626262626262626262626262626 262626262626262626262626262626262626262626262626262626262626262626262626262626 262626262626262626262626262626252525252525252525252525252525252525252525252525 252525252525252525252525252525242424242424242424242424242424242424242424242424 232323232323232323232323232323222222222222060404050101050101050101050101050101 050101020000606060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF2A2A2A0000000000000000000000000000000000000000001F1F1F 4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949494949484848484848484848484848 474747474747474747464646464646464646464646454545454545454545444444444444444444 444444434343434343434343424242424242424242414141414141414141414141404040404040 4040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C 3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939393939383838 383838383838373737373737373737363636363636363636353535353535353535343434343434 3434343333333333333333333232323232323131313131313131313030303030303030302F2F2F 2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D141414000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000 000000000000020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101919192020202424242A2A2A2F2F2F3636363D3D3D414141454545 4A4A4A4F4F4F5353535555555959595D5D5D606060626262646464646464666666676767686868 6868686868686767676565656464646464646464646262626161615D5D5D5A5A5A575757535353 5050504B4B4B4646464444443F3F3F333333040404000000000000000000000000000000000000 000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E101010 131313141414151515161616161616161616161616181818181818181818161616161616151515 1414141111111010101010100E0E0E090909060606060606010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202000000000000000000 000000000000000000000000424242FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC020202000000 0000000000000000000000000000000000000707070F0F0F0F0F0F101010101010101010101010 101010101010101010111111111111111111111111111111111111111111121212121212121212 121212121212121212121212131313131313131313131313131313131313131313141414141414 141414141414141414141414141414141414151515151515151515151515151515151515151515 161616161616161616161616161616161616161616161616171717171717171717171717171717 171717171717171717181818181818181818181818181818181818191919191919191919191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C2121212626262C2C2C3131313535353939393D3D3D414141 4444444848484A4A4A4D4D4D5050505353535555555757575858585959595B5B5B5D5D5D5F5F5F 6060606060606060606060606060606161616161616060606060605F5F5F5E5E5E5C5C5C5B5B5B 5A5A5A5959595555555353535050504E4E4E4C4C4C4949494646464242423E3E3E3B3B3B373737 3232322E2E2E2A2A2A242424242424242424242424242424242424242424242424242424252525 252525252525252525252525252525252525252525252525252525252525252525262626262626 262626262626262626262626262626262626262626262626262626262626262626262626262626 262626262626262626262626262626262626262626262626262626262626262626262626262626 262626262626262626262626262626262626262626262626262626262626262626262626262626 262626262626262626252525252525252525252525252525252525252525252525252525242424 242424242424242424242424242424232323232323232323232323070505050101050101050101 050101050101050101020000606060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000 0000001F1F1F4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949494949 484848484848484848484848474747474747474747464646464646464646464646454545454545 454545444444444444444444434343434343434343424242424242424242424242414141414141 4141414040404040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D 3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939 393939393939383838383838383838373737373737373737363636363636363636353535353535 353535343434343434343434333333333333333333323232323232313131313131313131303030 3030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D141414000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000 000000000000000000000000020202020202020202020202020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000090909101010191919202020242424282828313131363636 3A3A3A3F3F3F4545454949495050505252525656565A5A5A5D5D5D606060616161616161646464 6464646666666767676666666565656464646464646262626262626161616060605D5D5D5A5A5A 5757575353535050504B4B4B4646464444443F3F3F333333040404000000000000000000000000 000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD0C0C0C000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060606060909090E0E0E 0E0E0E111111131313141414151515151515161616161616181818181818181818161616161616 1515151515151414141111111010100E0E0E0C0C0C090909060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101000000 0000000000000000000000000000000000005A5A5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797979 0000000000000000000000000000000000000000000000000D0D0D0F0F0F101010101010101010 101010101010101010101010111111111111111111111111111111111111111111121212121212 121212121212121212121212121212131313131313131313131313131313131313131313141414 141414141414141414141414141414141414151515151515151515151515151515151515151515 151515161616161616161616161616161616161616161616171717171717171717171717171717 171717171717171717181818181818181818181818181818181818181818191919191919191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D2121212626262C2C2C3131313636363A3A3A 3D3D3D4141414444444848484B4B4B4D4D4D5050505353535555555757575858585A5A5A5B5B5B 5D5D5D5F5F5F6060606060606161616262626262626161616161616060606060606060605E5E5E 5D5D5D5B5B5B5959595959595555555454545252525050504C4C4C4949494646464242423E3E3E 3C3C3C3838383333332F2F2F2A2A2A242424242424242424242424242424252525252525252525 252525252525252525252525252525252525252525262626262626262626262626262626262626 262626262626262626262626262626262626262626262626262626262626262626272727272727 272727272727272727272727272727272727272727272727272727272727272727272727272727 272727272727272727272727272727272727272727272727272727272727272727262626262626 262626262626262626262626262626262626262626262626262626262626262626252525252525 252525252525252525252525252525242424242424242424242424242424242424070505050101 050101050101050101050101050101020000606060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000 0000000000000000002020204E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A 494949494949494949494949484848484848484848484848474747474747474747464646464646 464646464646454545454545454545444444444444444444434343434343434343424242424242 4242424141414141414141414141414040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3E3E3E 3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A 3A3A3A3A3A3A393939393939393939383838383838383838373737373737373737363636363636 363636353535353535353535343434343434343434333333333333323232323232323232313131 3131313131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E141414000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000 000000000000000000000000000000000000020202020202020202020202020202010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000909091616161919191D1D1D242424 2A2A2A3131313636363B3B3B4141414545454A4A4A4D4D4D5050505656565A5A5A5D5D5D5E5E5E 5F5F5F6161616262626464646464646464646464646262626262626161616161616060605E5E5E 5B5B5B5959595656565353535050504B4B4B4646464444443F3F3F333333040404000000000000 000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDADADA000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606060606 0909090E0E0E0E0E0E111111131313141414151515151515161616181818181818181818181818 1616161515151414141414141414141111111010100E0E0E0C0C0C090909060606010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 010101000000000000000000000000000000000000000000727272FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFD1D1D1D0000000000000000000000000000000000000000000505050F0F0F101010101010 101010101010101010101010101010111111111111111111111111111111111111111111121212 121212121212121212121212121212121212131313131313131313131313131313131313131313 141414141414141414141414141414141414141414151515151515151515151515151515151515 151515151515161616161616161616161616161616161616161616171717171717171717171717 171717171717171717171717181818181818181818181818181818181818191919191919191919 1919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D2121212626262C2C2C323232 3636363A3A3A3D3D3D4141414545454848484B4B4B4D4D4D505050535353555555575757595959 5A5A5A5B5B5B5D5D5D5F5F5F606060616161616161626262626262626262616161616161616161 6060605E5E5E5D5D5D5B5B5B5959595959595656565454545252525050504C4C4C494949464646 4343434040403C3C3C3838383333332F2F2F2A2A2A242424252525252525252525252525252525 252525252525252525252525252525262626262626262626262626262626262626262626262626 262626262626262626262626272727272727272727272727272727272727272727272727272727 272727272727272727272727272727272727272727272727272727272727272727272727272727 272727272727272727272727272727272727272727272727272727272727272727272727272727 272727272727272727272727272727272727272727272727262626262626262626262626262626 262626262626262626262626252525252525252525252525252525252525252525242424242424 070505050101050101050101050101050101050101020000606060FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000 0000000000000000000000000000002020204F4F4F4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D 4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B 4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949494949484848484848484848484848474747 474747474747464646464646464646454545454545454545444444444444444444434343434343 4343434242424242424242424242424141414141414141414040404040404040404040403F3F3F 3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B 3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939393939383838383838383838373737373737 373737363636363636363636353535353535353535343434343434333333333333333333323232 3232323232323131313131313131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E151515 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000 000000000000000000000000000000000000000000000000020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1919192020202828282D2D2D3333333838383D3D3D4242424545454848484C4C4C505050565656 5959595A5A5A5B5B5B5D5D5D5F5F5F6161616262626262626262626161616161615F5F5F5E5E5E 5E5E5E5D5D5D5B5B5B5858585656565353535050504B4B4B4646464444443F3F3F333333040404 000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFABABAB 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060606060C0C0C0E0E0E0E0E0E111111131313141414151515161616161616181818181818 1818181818181616161515151414141414141414141111111010100E0E0E0C0C0C090909060606 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202010101000000000000000000000000000000000000000000898989FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBABABA0000000000000000000000000000000000000000000000000B0B0B101010 101010101010101010101010101010101010111111111111111111111111111111111111121212 121212121212121212121212121212121212121212131313131313131313131313131313131313 131313141414141414141414141414141414141414141414151515151515151515151515151515 151515151515161616161616161616161616161616161616161616161616171717171717171717 171717171717171717171717181818181818181818181818181818181818181818191919191919 1919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D212121272727 2D2D2D3232323535353939393E3E3E4242424545454848484B4B4B4D4D4D515151535353565656 5858585A5A5A5B5B5B5C5C5C5F5F5F5F5F5F5F5F5F606060616161626262636363636363636363 6161616161616060605F5F5F5E5E5E5D5D5D5C5C5C5A5A5A5858585555555353535151514F4F4F 4B4B4B4848484545454141413D3D3D3939393535353131312B2B2B252525252525252525252525 252525252525262626262626262626262626262626262626262626262626262626262626262626 272727272727272727272727272727272727272727272727272727272727272727272727272727 272727272727272727282828282828282828282828282828282828282828282828282828282828 282828282828282828282828282828282828282828282828282828282828282828282828282828 282828282828282828272727272727272727272727272727272727272727272727272727272727 272727272727272727262626262626262626262626262626262626262626262626252525252525 2525252525250705050501010501010501010501010501010501010200005F5F5FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A 0000000000000000000000000000000000000000002020204F4F4F4F4F4F4F4F4F4F4F4F4E4E4E 4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949494949494949484848 484848484848474747474747474747474747464646464646464646454545454545454545444444 444444444444434343434343434343424242424242424242414141414141414141414141404040 4040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C 3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939393939383838383838 383838373737373737373737363636363636363636353535353535353535343434343434333333 3333333333333232323232323232323131313131313131313030303030302F2F2F2F2F2F2F2F2F 2E2E2E1515150000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B 000000000000000000000000000000000000000000000000000000000000020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909090909091010101919192424242828282F2F2F3535353A3A3A3F3F3F414141424242494949 4D4D4D5252525656565757575959595A5A5A5B5B5B5D5D5D6060606060606060606060605F5F5F 5D5D5D5D5D5D5D5D5D5B5B5B5A5A5A5757575555555353535050504B4B4B4646464444443F3F3F 333333040404000000000000000000000000000000000000000000000000000000020202FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF7C7C7C000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C0E0E0E101010111111131313151515151515161616161616 1818181818181818181818181616161515151414141414141313131111111010100E0E0E0C0C0C 090909060606010101010101010101010101010101010101010101010101010101010101010101 010101010101010101020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202010101000000000000000000000000000000000000000000A0A0A0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF5B5B5B000000000000000000000000000000000000000000020202 101010101010101010101010101010101010101010111111111111111111111111111111111111 121212121212121212121212121212121212121212131313131313131313131313131313131313 131313131313141414141414141414141414141414141414141414151515151515151515151515 151515151515151515161616161616161616161616161616161616161616161616171717171717 171717171717171717171717171717181818181818181818181818181818181818181818191919 1919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 2222222727272D2D2D3232323535353A3A3A3D3D3D4242424545454848484C4C4C4E4E4E515151 5353535656565858585A5A5A5B5B5B5D5D5D5F5F5F5F5F5F5F5F5F606060626262636363636363 6363636363636161616161616262626060605E5E5E5E5E5E5C5C5C5B5B5B585858575757545454 5151514E4E4E4B4B4B4848484545454141413F3F3F3A3A3A3535353131312B2B2B252525252525 252525262626262626262626262626262626262626262626262626262626272727272727272727 272727272727272727272727272727272727272727272727272727272727282828282828282828 282828282828282828282828282828282828282828282828282828282828282828282828282828 282828282828282828282828282828282828282828282828282828282828282828282828282828 282828282828282828282828282828282828282828282828282828282828282828282828282828 282828272727272727272727272727272727272727272727272727272727262626262626262626 2626262626262626262525250705050501010501010501010501010501010501010200005F5F5F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF2A2A2A0000000000000000000000000000000000000000002121215050505050504F4F4F 4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D 4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949 494949494949494949484848484848484848474747474747474747464646464646464646454545 454545454545444444444444444444434343434343434343424242424242424242414141414141 4141414141414040404040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D 3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939 393939383838383838383838373737373737373737363636363636363636353535353535343434 343434343434333333333333333333323232323232323232313131313131313131303030303030 2F2F2F2F2F2F2F2F2F1515150000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101D1D1D2424242828282F2F2F3535353838383D3D3D 3F3F3F4545454A4A4A5050505353535555555757575858585A5A5A5B5B5B5D5D5D5F5F5F5F5F5F 5E5E5E5E5E5E5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5757575555555353535050504B4B4B464646 4444443F3F3F333333040404000000000000000000000000000000000000000000000000000000 020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF4D4D4D000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060606060909090C0C0C0E0E0E101010111111141414151515161616 1616161818181818181818181818181818181616161515151414141414141313131111110E0E0E 0E0E0E0C0C0C090909060606010101010101010101010101010101010101010101010101010101 010101010101010101010101020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202010101000000000000000000000000000000000000 000000B7B7B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F30C0C0C000000000000000000000000000000000000 000000080808101010101010101010101010101010101010111111111111111111111111111111 111111121212121212121212121212121212121212121212131313131313131313131313131313 131313131313141414141414141414141414141414141414141414141414151515151515151515 151515151515151515151515161616161616161616161616161616161616161616171717171717 171717171717171717171717171717171717181818181818181818181818181818181818191919 1919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E2222222727272C2C2C3131313636363A3A3A3D3D3D4141414545454949494B4B4B 4E4E4E5151515353535656565959595A5A5A5B5B5B5D5D5D5F5F5F5F5F5F616161616161636363 6363636363636363636363636262626161616262626161615F5F5F5D5D5D5C5C5C5C5C5C595959 5757575454545252524F4F4F4D4D4D4949494545454141413F3F3F3B3B3B3535353131312C2C2C 2A2A2A262626262626262626262626262626262626262626272727272727272727272727272727 272727272727272727272727272727272727282828282828282828282828282828282828282828 282828282828282828282828282828282828282828282828282828292929292929292929292929 292929292929292929292929292929292929292929292929292929292929292929292929292929 292929292929292929292929292929292929292929292929292929282828282828282828282828 282828282828282828282828282828282828282828282828282828272727272727272727272727 272727272727272727262626262626262626070505050101050101050101050101050101050101 0200005F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000212121505050 5050505050505050505050504F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4E4E4E 4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B 4A4A4A4A4A4A4A4A4A494949494949494949494949484848484848484848474747474747474747 464646464646464646454545454545454545444444444444444444434343434343434343424242 4242424242424141414141414141414040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3E3E3E 3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A 3A3A3A393939393939393939383838383838383838373737373737373737363636363636363636 353535353535343434343434343434333333333333333333323232323232323232313131313131 3030303030303030302F2F2F2F2F2F151515000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2B2B2B28D8D8D 777777767676767676767676767676767676767676767676767676767676767676767676767676 767676767676767676767676767676767676767676767676767676767676767676767676767676 7676767676767676767676767676767B7B7B9E9E9ECACACAFEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000 000000020202020202020202020202020202020202020202010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909091010101616161D1D1D2424242A2A2A313131 3535353B3B3B3D3D3D4242424949494D4D4D5050505353535555555757575959595A5A5A5D5D5D 5D5D5D5E5E5E5E5E5E5D5D5D5A5A5A5B5B5B5B5B5B5A5A5A595959575757545454535353505050 4B4B4B4646464444443F3F3F333333040404000000000000000000000000000000000000000000 000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D1D1D000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060606060909090C0C0C0E0E0E101010111111141414 151515161616161616181818181818181818181818181818161616151515141414141414131313 1111110E0E0E0E0E0E0C0C0C060606060606010101010101010101010101010101010101010101 010101010101010101010101010101010101020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202010101000000000000000000000000 000000000000000000CFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D9D9D000000000000000000000000000000 0000000000000000000E0E0E101010101010101010101010101010111111111111111111111111 111111111111121212121212121212121212121212121212121212131313131313131313131313 131313131313131313141414141414141414141414141414141414141414151515151515151515 151515151515151515151515151515161616161616161616161616161616161616161616171717 171717171717171717171717171717171717171717181818181818181818181818181818181818 1919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E2222222626262C2C2C3131313636363A3A3A3C3C3C414141464646 4848484B4B4B4E4E4E5151515454545656565959595A5A5A5B5B5B5D5D5D5F5F5F606060616161 6262626363636363636464646464646363636363636262626161616161616161615F5F5F5D5D5D 5C5C5C5A5A5A5757575555555353535151514D4D4D4A4A4A4747474242423F3F3F3C3C3C373737 3333332F2F2F2A2A2A262626262626262626262626272727272727272727272727272727272727 272727272727272727282828282828282828282828282828282828282828282828282828282828 282828282828282828292929292929292929292929292929292929292929292929292929292929 292929292929292929292929292929292929292929292929292929292929292929292929292929 292929292929292929292929292929292929292929292929292929292929292929292929292929 292929292929292929292929292929292929282828282828282828282828282828282828282828 282828282828272727272727272727272727272727272727070505050101050101050101050101 0501010501010200005F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000 2121215151515151515151515050505050505050505050505050504F4F4F4F4F4F4F4F4F4F4F4F 4F4F4F4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C 4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949494949484848484848484848 474747474747474747464646464646464646454545454545454545444444444444444444434343 4343434343434242424242424242424141414141414141414040404040404040404040403F3F3F 3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B 3B3B3B3A3A3A3A3A3A3A3A3A393939393939393939383838383838383838373737373737373737 363636363636353535353535353535343434343434343434333333333333333333323232323232 3131313131313131313030303030303030302F2F2F151515000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE494949171717 0C0C0C000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000202021414141B1B1B8B8B8BFAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000 000000000000000000020202020202020202020202020202020202020202010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909101010191919202020 2626262A2A2A2D2D2D3636363B3B3B4141414545454848484A4A4A4D4D4D505050545454565656 5858585A5A5A5A5A5A5A5A5A595959585858585858595959595959585858575757555555535353 5252524D4D4D4A4A4A4646464242423F3F3F333333040404000000000000000000000000000000 000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF010101000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090909090C0C0C0E0E0E101010 111111141414151515161616161616181818181818181818181818181818161616151515141414 1414141313131010100E0E0E0C0C0C090909060606060606010101010101010101010101010101 010101010101010101010101010101010101010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202000000000000000000 000000000000000000000000000000E6E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E3E3E000000000000000000 000000000000000000000000040404101010101010101010101010101010111111111111111111 111111111111111111121212121212121212121212121212121212121212131313131313131313 131313131313131313131313141414141414141414141414141414141414141414151515151515 151515151515151515151515151515161616161616161616161616161616161616161616161616 171717171717171717171717171717171717171717181818181818181818181818181818181818 1919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F2323232626262C2C2C3030303636363A3A3A3D3D3D 4141414545454848484C4C4C4F4F4F5252525454545656565959595A5A5A5C5C5C5E5E5E5F5F5F 616161616161626262636363646464646464646464646464636363646464636363626262606060 5F5F5F5D5D5D5C5C5C5C5C5C5959595757575454545252524E4E4E4A4A4A494949444444414141 3C3C3C3939393333332F2F2F2A2A2A272727272727272727272727272727272727272727272727 272727282828282828282828282828282828282828282828282828282828282828282828292929 292929292929292929292929292929292929292929292929292929292929292929292929292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A292929292929292929292929292929292929292929292929292929292929292929 292929282828282828282828282828282828282828282828272727272727070505050101050101 0501010501010501010501010200005F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000 000000000000212121515151515151515151515151515151515151505050505050505050505050 5050504F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D 4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A494949494949 494949484848484848484848474747474747474747464646464646464646454545454545454545 444444444444434343434343434343424242424242424242414141414141414141404040404040 4040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C 3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939393939383838383838383838 373737373737373737363636363636353535353535353535343434343434343434333333333333 333333323232323232313131313131313131303030303030303030151515000000000000000000 0000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7A7A7151515 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0B0B0B2B2B2BE6E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000 000000000000000000000000000000020202020202020202020202020202020202020202010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909090909 1616161D1D1D2424242828282D2D2D3131313636363D3D3D4141414444444646464A4A4A4D4D4D 535353545454565656575757585858585858585858575757575757585858585858575757575757 5454545353535050504D4D4D4949494646464242423F3F3F333333040404000000000000000000 000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E 0E0E0E101010111111141414151515161616181818181818181818181818181818181818161616 1515151414141414141313131010100E0E0E0C0C0C090909060606060606010101010101010101 010101010101010101010101010101010101010101010101010101020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202000000 000000000000000000000000000000000000000000F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE010101000000 0000000000000000000000000000000000000A0A0A101010101010101010101010111111111111 111111111111111111111111121212121212121212121212121212121212121212131313131313 131313131313131313131313131313141414141414141414141414141414141414141414151515 151515151515151515151515151515151515161616161616161616161616161616161616161616 161616171717171717171717171717171717171717171717181818181818181818181818181818 1818181919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F2323232626262C2C2C313131363636 3A3A3A3D3D3D4141414545454949494C4C4C4F4F4F5151515454545656565959595B5B5B5C5C5C 5E5E5E5F5F5F616161616161636363636363646464646464646464656565656565646464646464 6262626161616060605F5F5F5E5E5E5B5B5B5A5A5A5757575555555252525050504C4C4C4A4A4A 4646464242423E3E3E3939393636363131312D2D2D272727272727272727272727272727272727 282828282828282828282828282828282828282828282828282828292929292929292929292929 2929292929292929292929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929 292929292929292929292929292929292929292929292929282828282828282828282828070505 0501010501010501010501010501010501010200005E5E5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000 000000000000000000000000212121525252525252525252515151515151515151515151515151 5151515050505050505050505050504F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E 4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A 4A4A4A494949494949494949484848484848484848474747474747474747464646464646464646 454545454545454545444444444444444444434343434343424242424242424242414141414141 4141414141414040404040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D 3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939393939 383838383838383838373737373737363636363636363636353535353535353535343434343434 343434333333333333323232323232323232313131313131313131303030303030151515000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7A7A7 111111000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000020202212121EEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000 000000000000000000000000000000000000000000020202020202020202020202020202020202 020202020202010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909091010101919192020202626262828282D2D2D3131313838383B3B3B3F3F3F414141 454545494949505050505050535353545454565656575757565656565656575757575757575757 5757575555555353535050505050504C4C4C4949494545454141413F3F3F323232040404000000 000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C0E0E0E101010111111131313151515161616161616181818181818181818181818181818 1818181616161515151414141414141111111010100E0E0E0C0C0C090909060606010101010101 010101010101010101010101010101010101010101010101010101010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020000000000000000000000000000000000000000000C0C0CFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F 0000000000000000000000000000000000000000000101010F0F0F101010101010101010111111 111111111111111111111111111111121212121212121212121212121212121212121212131313 131313131313131313131313131313131313141414141414141414141414141414141414141414 151515151515151515151515151515151515151515161616161616161616161616161616161616 161616171717171717171717171717171717171717171717171717181818181818181818181818 1818181818181919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F2323232626262D2D2D 3030303636363A3A3A3D3D3D4242424646464848484C4C4C4E4E4E515151545454575757595959 5B5B5B5C5C5C5E5E5E606060626262626262636363646464646464646464646464656565656565 6565656464646464646262626060605F5F5F5E5E5E5C5C5C5B5B5B585858565656535353505050 4C4C4C4A4A4A4646464545454040403C3C3C3737373333332D2D2D2A2A2A272727282828282828 282828282828282828282828282828282828282828292929292929292929292929292929292929 2929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929292929 2929290705050501010501010501010501010501010501010200005E5E5EFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000 000000000000000000000000000000000000222222535353525252525252525252525252525252 5252525151515151515151515151515050505050505050505050505050504F4F4F4F4F4F4F4F4F 4F4F4F4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B 4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949494949484848484848484848474747474747 474747464646464646464646454545454545444444444444444444434343434343434343424242 4242424242424141414141414141414040404040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E 3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A 393939393939393939383838383838373737373737373737363636363636363636353535353535 353535343434343434333333333333333333323232323232323232313131313131303030303030 1616160000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DFDFDF161616000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000040404414141FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000 000000000000000000000000000000000000000000000000000000020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101919192020202424242828282D2D2D353535383838 3B3B3B3F3F3F4242424646464B4B4B4C4C4C4F4F4F505050535353535353535353535353545454 5555555555555555555353535252525050504D4D4D4B4B4B4848484242424141413D3D3D323232 030303000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF616161 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C0E0E0E101010111111141414151515161616181818181818181818191919 1919191818181818181616161515151414141313131111111010100E0E0E0C0C0C090909060606 010101010101010101010101010101010101010101010101010101010101010101010101020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020000000000000000000000000000000000000000001C1C1CFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFE222222000000000000000000000000000000000000000000060606101010101010101010 111111111111111111111111111111111111111111121212121212121212121212121212121212 131313131313131313131313131313131313131313141414141414141414141414141414141414 141414151515151515151515151515151515151515151515161616161616161616161616161616 161616161616171717171717171717171717171717171717171717171717181818181818181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F242424 2727272D2D2D3030303636363A3A3A3E3E3E4242424646464848484B4B4B4F4F4F525252545454 5757575959595B5B5B5D5D5D5E5E5E606060626262626262636363656565656565646464646464 6464646565656565656464646363636262626060605F5F5F5F5F5F5D5D5D5B5B5B595959575757 5353535050504D4D4D4B4B4B4848484545454141413D3D3D3838383333332E2E2E2C2C2C282828 282828282828282828282828282828292929292929292929292929292929292929292929292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2929292929292929290705050501010501010501010501010501010501010200005E5E5EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 2A2A2A000000000000000000000000000000000000000000222222535353535353535353535353 525252525252525252525252525252515151515151515151515151515151505050505050505050 5050504F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C 4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949494949484848484848 484848474747474747474747464646464646464646454545454545454545444444444444434343 4343434343434242424242424242424141414141414141414040404040404040403F3F3F3F3F3F 3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B 3A3A3A3A3A3A3A3A3A393939393939393939383838383838373737373737373737363636363636 363636353535353535353535343434343434333333333333333333323232323232323232313131 3131313030301616160000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCECECE7373734444442929291F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2525253B3B3B616161BABABAF9F9F9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF4B4B4B010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000131313C4C4C4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0B0B0B000000000000000000000000000000000000000000000000000000000000020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909091010101919191D1D1D2626262A2A2A 3131313636363838383D3D3D4141414545454646464949494B4B4B4D4D4D505050505050505050 5050505353535353535353535353535252525050504D4D4D4C4C4C4B4B4B4646464242423F3F3F 3B3B3B303030030303000000000000000000000000000000000000000000000000000000020202 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF363636000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060606060909090C0C0C0E0E0E101010111111141414151515161616181818181818 1818181919191919191818181818181616161515151414141313131111111010100E0E0E0C0C0C 090909060606010101010101010101010101010101010101010101010101010101010101010101 010101020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020000000000000000000000000000000000000000002E2E2E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFC1C1C10000000000000000000000000000000000000000000000000C0C0C101010 101010111111111111111111111111111111111111111111121212121212121212121212121212 121212131313131313131313131313131313131313131313141414141414141414141414141414 141414141414151515151515151515151515151515151515151515161616161616161616161616 161616161616161616171717171717171717171717171717171717171717181818181818181818 1818181818181818181919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020 2020202020202424242D2D2D3131313636363939393C3C3C4141414545454949494C4C4C4F4F4F 5151515353535656565959595B5B5B5D5D5D5E5E5E616161616161636363646464646464656565 6666666666666767676666666666666565656464646363636262626060605F5F5F5F5F5F5C5C5C 5A5A5A5757575656565252524F4F4F4D4D4D4A4A4A4545454242423E3E3E3A3A3A363636313131 2C2C2C282828282828282828292929292929292929292929292929292929292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A070505050101050101050101050101050101050101020000 5E5E5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000222222545454545454 535353535353535353535353535353525252525252525252525252525252515151515151515151 5151515050505050505050505050504F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D 4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949 494949494949484848484848484848474747474747474747464646464646454545454545454545 444444444444434343434343434343424242424242424242414141414141414141404040404040 4040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C 3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838383838383838373737373737 373737363636363636363636353535353535343434343434343434333333333333333333323232 3232323131313131313131311616160000000000000000000000000000000000000000000B0B0B FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFACACAC212121151515010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000101010181818828282 F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3F3171717000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000004F4F4F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000 020202020202020202020202020202020202020202020202020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909161616191919 2020202626262D2D2D3333333636363A3A3A3F3F3F4141414242424545454848484A4A4A4C4C4C 4D4D4D4D4D4D4F4F4F5050505252525252525050505050504D4D4D4C4C4C4B4B4B494949454545 4141413F3F3F3B3B3B303030030303000000000000000000000000000000000000000000000000 000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFE0E0E0E000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060606060909090C0C0C0E0E0E111111111111141414151515161616 181818181818181818191919191919181818181818161616151515141414131313111111101010 0E0E0E0C0C0C090909060606010101010101010101010101010101010101010101010101010101 010101010101020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202000000000000000000000000000000000000 0000003F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000000000000000000000020202 101010101010111111111111111111111111111111111111111111121212121212121212121212 121212121212131313131313131313131313131313131313131313141414141414141414141414 141414141414141414151515151515151515151515151515151515151515161616161616161616 161616161616161616161616171717171717171717171717171717171717171717181818181818 1818181818181818181818181919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 2020202020202020202020202424242E2E2E3232323636363838383C3C3C414141464646494949 4C4C4C4F4F4F5151515353535757575959595B5B5B5D5D5D5E5E5E616161626262636363646464 6464646565656767676767676767676767676666666666666565656464646363636060605F5F5F 5E5E5E5D5D5D5B5B5B5959595656565353535050504D4D4D4A4A4A4848484343433F3F3F3C3C3C 3737373232322C2C2C2929292929292929292929292929292929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A070505050101050101050101050101050101 0501010200005E5E5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000222222 545454545454545454545454545454535353535353535353535353535353525252525252525252 5252525151515151515151515151515050505050505050505050504F4F4F4F4F4F4F4F4F4F4F4F 4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B 4A4A4A4A4A4A494949494949494949484848484848484848474747474747474747464646464646 454545454545454545444444444444444444434343434343424242424242424242414141414141 4141414040404040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D 3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838383838 383838373737373737373737363636363636353535353535353535343434343434343434333333 333333323232323232323232313131313131161616000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F23E3E3E101010000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000090909212121D8D8D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4B4B40D0D0D000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000001B1B1BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000 000000000000020202020202020202020202020202020202020202020202020202010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 1010101010101919192020202828282D2D2D3131313535353A3A3A3D3D3D3F3F3F424242454545 4848484B4B4B4B4B4B4C4C4C4D4D4D5050505050505050505050504F4F4F4D4D4D4B4B4B4A4A4A 4949494545454141413D3D3D3A3A3A2F2F2F030303000000000000000000000000000000000000 000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE2E2E2000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060606060909090C0C0C101010111111131313141414 161616181818181818181818181818191919191919181818181818161616151515141414131313 1111110E0E0E0C0C0C0C0C0C090909060606010101010101010101010101010101010101010101 010101010101010101010101020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202000000000000000000000000 000000000000000000505050FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F60F0F0F000000000000000000000000000000000000 000000080808101010111111111111111111111111111111111111111111121212121212121212 121212121212121212131313131313131313131313131313131313131313141414141414141414 141414141414141414141414151515151515151515151515151515151515151515161616161616 161616161616161616161616161616171717171717171717171717171717171717171717181818 1818181818181818181818181818181919191919191919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 2020202020202020202020202020202121212525252C2C2C3131313636363838383D3D3D414141 4646464949494C4C4C4F4F4F5151515353535757575959595B5B5B5D5D5D5F5F5F616161626262 636363646464666666676767676767676767676767676767686868676767666666646464636363 6262626161616060605E5E5E5C5C5C5A5A5A5757575454545151514F4F4F4D4D4D494949464646 4242423E3E3E3B3B3B3535352F2F2F2929292929292929292929292929292A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B080606050101050101050101 0501010501010501010200005E5E5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000 000000232323555555555555555555545454545454545454545454545454535353535353535353 535353525252525252525252525252525252515151515151515151505050505050505050505050 4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C 4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949494949484848484848474747474747 474747464646464646464646454545454545444444444444444444434343434343424242424242 4242424141414141414141414040404040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E 3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939 393939383838383838383838373737373737373737363636363636353535353535353535343434 343434343434333333333333323232323232323232313131161616000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC252525050505000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000161616C5C5C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF919191010101000000000000000000000000 000000000000000000020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000171717FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000 000000000000000000000000020202020202020202020202020202020202020202020202020202 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909090909091010101616161919192424242828282D2D2D3131313636363A3A3A3D3D3D 3F3F3F4242424646464949494A4A4A4B4B4B4B4B4B4F4F4F5050505050505050504D4D4D4C4C4C 4A4A4A4949494848484444443F3F3F3D3D3D3A3A3A2F2F2F030303000000000000000000000000 000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8B8B8000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090C0C0C0E0E0E101010111111 131313141414161616181818181818191919191919191919191919181818181818161616151515 1414141313131111110E0E0E0C0C0C090909090909060606010101010101010101010101010101 010101010101010101010101010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202010101000000000000 000000000000000000000000000000606060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4A4A4000000000000000000000000000000 0000000000000000000D0D0D111111111111111111111111111111111111111111121212121212 121212121212121212121212131313131313131313131313131313131313131313141414141414 141414141414141414141414141414151515151515151515151515151515151515151515161616 161616161616161616161616161616161616171717171717171717171717171717171717171717 1818181818181818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F2020202020202020202020202020202121212121212525252C2C2C313131363636393939 3D3D3D4141414545454848484C4C4C5050505151515353535757575A5A5A5C5C5C5D5D5D5F5F5F 616161626262646464656565666666676767676767676767676767676767676767686868676767 6565656464646363636262626161615E5E5E5D5D5D5A5A5A5959595656565353535050504D4D4D 4A4A4A4646464343434040403C3C3C3636363232322D2D2D2929292A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C080606050101 0501010501010501010501010501010200005D5D5DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000 000000000000000000232323555555555555555555555555555555555555545454545454545454 545454535353535353535353535353535353525252525252525252525252515151515151515151 5050505050505050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D 4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949494949484848 484848484848474747474747464646464646464646454545454545444444444444444444434343 4343434242424242424242424141414141414141414040404040404040403F3F3F3F3F3F3F3F3F 3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A 3A3A3A393939393939393939383838383838383838373737373737363636363636363636353535 353535353535343434343434333333333333333333323232323232323232161616000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA343434030303 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000191919E2E2E2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A7A7A000000000000000000 0000000000000000000000000101010B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 090909090909090909090909090909080808080808080808080808080808080808070707070707 070707070707070707060606060606060606060606060606050505050505030303000000000000 000000000000000000000000000000181818EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000 000000000000000000000000000000000000020202020202020202020202020202020202020202 020202020202010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909090909091010101616161D1D1D2424242828282A2A2A2F2F2F 3333333B3B3B3D3D3D4141414444444646464848484949494949494B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4949494646464646464444443F3F3F3D3D3D3B3B3B3838382F2F2F030303000000000000 000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E 101010111111131313151515161616181818191919191919191919191919191919181818181818 1616161515151414141313131111110E0E0E0C0C0C090909060606060606010101010101010101 010101010101010101010101010101010101010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202010101 000000000000000000000000000000000000000000717171FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D4D4D000000000000000000 000000000000000000000000030303111111111111111111111111111111111111111111121212 121212121212121212121212121212121212131313131313131313131313131313131313141414 141414141414141414141414141414141414151515151515151515151515151515151515151515 161616161616161616161616161616161616161616171717171717171717171717171717171717 1717171818181818181818181818181818181818181919191919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F2020202020202020202020202020202121212121212121212121212525252C2C2C313131 3636363838383D3D3D4141414646464949494C4C4C4F4F4F5151515454545858585A5A5A5C5C5C 5D5D5D5F5F5F626262646464646464656565666666676767676767686868686868676767676767 6767676868686666666666666464646363636262626161615E5E5E5C5C5C595959575757545454 5151514F4F4F4C4C4C4747474444444141413D3D3D3737373434342E2E2E2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D 0806060501010501010501010501010501010501010200005D5D5DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000 000000000000000000000000000000232323565656565656565656565656555555555555555555 555555545454545454545454545454545454535353535353535353535353525252525252525252 5252525151515151515151515050505050505050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E 4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A 494949494949484848484848484848474747474747474747464646464646454545454545454545 444444444444434343434343424242424242424242414141414141414141404040404040404040 3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B 3B3B3B3A3A3A3A3A3A3A3A3A393939393939393939383838383838373737373737373737363636 363636363636353535353535343434343434343434333333333333333333323232323232161616 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A7A7A 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101343434FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000 0000000000000000000000000000000000000101010B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A090909090909090909090909090909090909080808080808080808080808080808 070707070707070707070707070707060606060606060606060606060606060606050505030303 000000000000000000000000000000000000000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000 000000000000000000000000000000000000000000000000020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000090909090909101010191919202020242424 2828282D2D2D3131313838383B3B3B3F3F3F4141414545454646464646464848484949494A4A4A 4B4B4B4B4B4B4A4A4A4949494646464545454242423F3F3F3D3D3D3A3A3A3838382F2F2F030303 000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF656565000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C0E0E0E101010111111131313151515161616181818191919191919191919191919191919 1818181818181616161515151414141313131010100E0E0E0C0C0C090909060606060606010101 010101010101010101010101010101010101010101010101020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202010101000000000000000000000000000000000000000000828282FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2080808000000 000000000000000000000000000000000000090909111111111111111111111111111111111111 121212121212121212121212121212121212121212131313131313131313131313131313131313 141414141414141414141414141414141414141414151515151515151515151515151515151515 151515161616161616161616161616161616161616161616171717171717171717171717171717 1717171717171818181818181818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020202020202020212121212121212121212121212121262626 2B2B2B2F2F2F3535353838383D3D3D4141414646464949494B4B4B4F4F4F525252545454585858 5A5A5A5C5C5C5E5E5E5F5F5F626262636363646464656565686868676767686868686868686868 6868686969696969696868686767676666666565656464646363636161615F5F5F5D5D5D5B5B5B 5959595656565454545050504D4D4D4949494545454242423F3F3F3A3A3A3636363030302D2D2D 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F 303030303030303030303030303030303030303030303030303030303030303030303030303030 303030303030303030303030303030303030303030303030303030303030303030303030303030 3030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E0806060501010501010501010501010501010501010200005D5D5DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A 000000000000000000000000000000000000000000232323575757565656565656565656565656 565656555555555555555555555555555555545454545454545454545454535353535353535353 5353535252525252525252525252525151515151515151515050505050505050504F4F4F4F4F4F 4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B 4A4A4A4A4A4A4A4A4A494949494949494949484848484848474747474747474747464646464646 454545454545454545444444444444434343434343434343424242424242414141414141414141 4040404040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C 3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939393939383838383838373737 373737373737363636363636363636353535353535343434343434343434333333333333323232 3232321717170000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EBEBEB161616000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 111111B7B7B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 7878780000000000000000000000000000000000000000000101010B0B0B0B0B0B0B0B0B0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909080808080808080808 080808080808070707070707070707070707070707070707060606060606060606060606060606 050505030303000000000000000000000000000000000000000000181818EAEAEAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B 000000000000000000000000000000000000000000000000000000000000020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1919191D1D1D2424242828282D2D2D3636363838383B3B3B3F3F3F414141444444454545454545 4646464848484949494949494949494646464545454545454242423F3F3F3B3B3B3A3A3A363636 2D2D2D030303000000000000000000000000000000000000000000000000000000020202FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C0E0E0E101010131313141414151515161616181818181818191919191919 1919191818181818181616161515151414141313131111111010100E0E0E0C0C0C090909060606 010101010101010101010101010101010101010101010101010101010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202010101000000000000000000000000000000000000000000939393FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3A3A3 000000000000000000000000000000000000000000000000101010111111111111111111111111 111111121212121212121212121212121212121212121212131313131313131313131313131313 131313141414141414141414141414141414141414141414151515151515151515151515151515 151515151515161616161616161616161616161616161616161616171717171717171717171717 171717171717171717181818181818181818181818181818191919191919191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020202020202020212121212121212121212121212121 2222222626262B2B2B2F2F2F3535353939393D3D3D4242424545454848484C4C4C4F4F4F525252 5454545858585A5A5A5C5C5C5E5E5E5F5F5F626262636363656565666666686868686868686868 686868696969696969696969696969696969686868676767666666656565646464616161606060 5E5E5E5C5C5C5A5A5A5858585454545151514E4E4E4B4B4B4747474444444141413C3C3C383838 3333332F2F2F2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030303030303030 303030303030303030303030303030303030303030313131313131313131313131313131313131 313131313131313131313131313131313131313131313131313131313131313131313131313131 3131313131313030303030303030303030303030303030303030303030303030303030302F2F2F 2F2F2F2F2F2F2F2F2F2F2F2F0806060501010501010501010501010501010501010200005D5D5D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF2A2A2A000000000000000000000000000000000000000000232323575757575757575757 575757565656565656565656565656565656555555555555555555555555545454545454545454 545454535353535353535353535353525252525252525252515151515151515151515151505050 5050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C 4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949494949484848484848474747474747 474747464646464646454545454545454545444444444444434343434343434343424242424242 4141414141414141414040404040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D 3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838 383838383838373737373737373737363636363636353535353535353535343434343434333333 3333333333333232321717170000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF878787040404000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000383838FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7878780000000000000000000000000000000000000000000101010B0B0B0B0B0B 0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909080808 080808080808080808080808080808070707070707070707070707070707060606060606060606 060606060606050505030303000000000000000000000000000000000000000000181818EAEAEA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000020202 020202020202020202020202020202020202020202020202020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091010101616161919192020202626262D2D2D3131313333333636363A3A3A3F3F3F414141 4141414242424444444545454646464646464646464545454444444242424141413D3D3D3A3A3A 3838383636362B2B2B030303000000000000000000000000000000000000000000000000000000 020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF121212000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060606060909090E0E0E0E0E0E111111131313141414151515161616181818181818 1919191919191919191818181818181616161515151414141313131111111010100E0E0E0C0C0C 090909060606010101010101010101010101010101010101010101010101010101010101020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101000000000000000000000000000000000000000000 A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF4E4E4E000000000000000000000000000000000000000000050505111111111111111111 111111111111121212121212121212121212121212121212121212131313131313131313131313 131313131313141414141414141414141414141414141414141414151515151515151515151515 151515151515151515161616161616161616161616161616161616161616171717171717171717 171717171717171717171717181818181818181818181818181818191919191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020202020202020212121212121212121212121212121 2222222222222222222626262B2B2B3030303636363939393D3D3D4242424545454949494C4C4C 4E4E4E5252525454545858585B5B5B5C5C5C5E5E5E5F5F5F636363646464656565666666676767 6868686969696A6A6A6A6A6A6A6A6A6A6A6A6A6A6A696969696969686868666666666666646464 6363636161615F5F5F5D5D5D5B5B5B5858585555555454545151514D4D4D494949454545434343 3E3E3E3B3B3B3535352F2F2F2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030303030303030303030303030303030303030 313131313131313131313131313131313131313131313131313131313131313131313131313131 313131313131313131323232323232323232323232323232323232323232323232323232313131 313131313131313131313131313131313131313131313131313131313131313131313131303030 303030303030303030303030303030303030080606050101050101050101050101050101050101 0200005D5D5DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000242424585858 585858575757575757575757575757575757565656565656565656565656555555555555555555 555555555555545454545454545454535353535353535353535353525252525252525252515151 5151515151515050505050505050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D 4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A494949494949494949484848 484848474747474747474747464646464646454545454545454545444444444444434343434343 4343434242424242424141414141414141414040404040404040403F3F3F3F3F3F3F3F3F3E3E3E 3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939 393939393939383838383838383838373737373737363636363636363636353535353535353535 343434343434333333333333333333171717000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF2B2B2B000000000000000000000000000000000000000000000000 0202020B0B0B0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909080808030303000000000000000000 000000000000000000000000000000171717F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000000000000000000000010101 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909 090909090909080808080808080808080808080808070707070707070707070707070707060606 060606060606060606060606060606030303000000000000000000000000000000000000000000 181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000 000000020202020202020202020202020202020202020202020202020202020202020202010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909091010101616161D1D1D2424242A2A2A2D2D2D2D2D2D313131363636 3A3A3A3D3D3D3F3F3F3F3F3F4141414141414242424444444444444444444242424141413F3F3F 3B3B3B3A3A3A3636363535352B2B2B030303000000000000000000000000000000000000000000 000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE7E7E7000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060606060909090E0E0E0E0E0E111111131313141414151515161616 181818191919191919191919191919181818181818161616151515141414131313111111101010 0E0E0E0C0C0C090909060606010101010101010101010101010101010101010101010101010101 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101000000000000000000000000000000 000000000000B5B5B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF2F2F20808080000000000000000000000000000000000000000000B0B0B111111 111111111111111111111111121212121212121212121212121212121212131313131313131313 131313131313131313131313141414141414141414141414141414141414151515151515151515 151515151515151515151515161616161616161616161616161616161616161616171717171717 171717171717171717171717171717181818181818181818181818181818191919191919191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020212121212121212121212121 2121212222222222222222222222222222222929292F2F2F3333333838383C3C3C414141454545 4848484B4B4B4F4F4F5252525555555757575B5B5B5C5C5C5F5F5F616161636363656565666666 6767676868686A6A6A6969696969696969696A6A6A6C6C6C6B6B6B6B6B6B6A6A6A696969676767 6868686767676565656363636161616060605E5E5E5B5B5B5858585555555151514F4F4F4B4B4B 4848484444444040403D3D3D3737373434342F2F2F2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F303030303030303030303030303030303030303030313131313131313131313131 313131313131313131313131313131313131323232323232323232323232323232323232323232 323232323232323232323232323232323232323232323232323232323232323232323232323232 323232323232323232323232323232323232323232323232323232323232323232323232323232 313131313131313131313131313131313131313131303030080606050101050101050101050101 0501010501010200005C5C5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000 242424585858585858585858585858585858575757575757575757575757575757565656565656 565656565656555555555555555555555555545454545454545454535353535353535353535353 5252525252525252525151515151515151515050505050505050504F4F4F4F4F4F4F4F4F4E4E4E 4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A 494949494949484848484848484848474747474747464646464646454545454545454545444444 4444444343434343434343434242424242424141414141414141414040404040404040403F3F3F 3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B 3A3A3A3A3A3A393939393939393939383838383838383838373737373737363636363636363636 353535353535343434343434343434333333333333171717000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF171717000000000000000000000000000000000000 000000040404212121242424242424242424242424232323232323232323222222222222222222 2121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A 191919191919191919181818181818181818171717171717171717161616161616151515060606 000000000000000000000000000000000000000000131313C6C6C6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000000000000000 0000000101010B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909080808080808080808080808080808070707070707070707070707 070707070707060606060606060606060606060606030303000000000000000000000000000000 000000000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000 000000000000000000020202020202020202020202020202020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909090909091010101919192020202626262828282A2A2A 2D2D2D3333333636363A3A3A3B3B3B3B3B3B3D3D3D3F3F3F414141414141424242414141414141 4141413F3F3F3B3B3B3838383636363535352A2A2A030303000000000000000000000000000000 000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFBDBDBD000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060606060909090E0E0E101010111111131313141414 151515181818181818191919191919191919191919181818181818161616151515141414131313 1111111010100E0E0E0C0C0C060606060606010101010101010101010101010101010101010101 010101010101020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202010101000000000000000000 000000000000000000000000C2C2C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA5A5A5000000000000000000000000000000000000000000010101 101010111111111111111111111111121212121212121212121212121212121212131313131313 131313131313131313131313131313141414141414141414141414141414141414151515151515 151515151515151515151515151515161616161616161616161616161616161616161616171717 171717171717171717171717171717171717181818181818181818181818181818191919191919 1919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121 2121212222222222222222222222222222222323232323232929292F2F2F3333333838383C3C3C 4141414545454848484B4B4B4F4F4F5252525555555757575A5A5A5D5D5D5F5F5F616161636363 6565656666666767676969696A6A6A6969696A6A6A6B6B6B6C6C6C6C6C6C6C6C6C6B6B6B6A6A6A 6969696868686868686767676565656464646262626060605F5F5F5C5C5C595959555555535353 5151514D4D4D4A4A4A4646464242423F3F3F3B3B3B3838383030302C2C2C2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F 303030303030303030303030303030303030303030313131313131313131313131313131313131 313131323232323232323232323232323232323232323232323232323232323232333333333333 333333333333333333333333333333333333333333333333333333333333333333333333333333 333333333333333333333333333333333333333333333333333333333333333333333333333333 333333323232323232323232323232323232323232323232323232313131080606050101050101 0501010501010501010501010200005C5C5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000 000000000000242424595959595959595959585858585858585858585858585858575757575757 575757575757565656565656565656565656555555555555555555555555545454545454545454 535353535353535353525252525252525252525252515151515151515151505050505050505050 4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B 4A4A4A4A4A4A4A4A4A494949494949484848484848484848474747474747464646464646454545 454545454545444444444444434343434343424242424242424242414141414141414141404040 4040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C 3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939393939383838383838373737373737373737 363636363636353535353535353535343434343434343434333333171717000000000000000000 0000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED181818000000000000000000000000 000000000000000000161616252525252525242424242424242424232323232323232323222222 2222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E 1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A191919191919191919181818181818181818171717171717171717161616161616 161616131313000000000000000000000000000000000000000000090909ABABABFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000 0000000000000000000101010B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A090909090909090909090909090909080808080808080808080808080808080808070707 070707070707070707070707060606060606060606060606060606030303000000000000000000 000000000000000000000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000 000000000000000000000000000000020202020202020202020202020202020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909090909101010191919202020 2424242626262A2A2A3131313535353636363838383A3A3A3B3B3B3D3D3D3F3F3F414141414141 4141413F3F3F3F3F3F3D3D3D3A3A3A3636363636363333332A2A2A030303000000000000000000 000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF939393000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090C0C0C0E0E0E101010111111 131313141414161616181818191919191919191919191919191919181818181818161616151515 1414141313131111111010100E0E0E090909060606060606010101010101010101010101010101 010101010101010101020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101000000 000000000000000000000000000000000000CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF505050000000000000000000000000000000000000 000000060606111111111111111111111111121212121212121212121212121212121212131313 131313131313131313131313131313131313141414141414141414141414141414141414151515 151515151515151515151515151515151515161616161616161616161616161616161616161616 171717171717171717171717171717171717171717181818181818181818181818181818191919 1919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020212121212121212121 2121212121212222222222222222222222222222222323232323232323232929292E2E2E333333 3838383C3C3C4040404444444949494C4C4C4E4E4E5252525454545858585A5A5A5D5D5D5E5E5E 6161616363636666666666666767676969696A6A6A6B6B6B6B6B6B6B6B6B6C6C6C6C6C6C6C6C6C 6C6C6C6C6C6C6A6A6A6969696868686868686767676565656363636262626060605C5C5C5A5A5A 5858585656565353535050504C4C4C4949494545454141413E3E3E3939393333333030302D2D2D 2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303030 303030303030303030303030313131313131313131313131313131313131313131323232323232 323232323232323232323232323232323232333333333333333333333333333333333333333333 333333333333333333333333333333343434343434343434343434343434343434343434343434 343434343434343434343434343434343434343434343434343434343434343434343434343434 343434333333333333333333333333333333333333333333333333333333323232323232080606 0501010501010501010501010501010501010200005C5C5CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000 0000000000000000000000002525255A5A5A595959595959595959595959595959585858585858 585858585858575757575757575757575757565656565656565656565656555555555555555555 545454545454545454545454535353535353535353525252525252525252515151515151515151 5050505050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C 4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949484848484848484848474747474747 464646464646464646454545454545444444444444434343434343424242424242424242414141 4141414141414040404040404040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D 3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838383838383838 373737373737373737363636363636353535353535353535343434343434333333171717000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDADADA171717000000000000 0000000000000000000000000000001C1C1C252525252525242424242424242424242424232323 2323232323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919181818181818181818171717171717 171717161616161616161616000000000000000000000000000000000000000000000000969696 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000 0000000000000000000000000000000101010B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909080808080808080808080808 080808070707070707070707070707070707060606060606060606060606060606030303000000 000000000000000000000000000000000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000 000000000000000000000000000000000000000000020202020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909090909 1616161919192020202424242828282D2D2D3131313535353636363838383A3A3A3B3B3B3D3D3D 3F3F3F3F3F3F3F3F3F3F3F3F3D3D3D3D3D3D3A3A3A363636353535333333282828030303000000 000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A6A6A000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E 1010101111111414141515151616161818181919191A1A1A1A1A1A191919191919181818181818 1616161515151414141313131111110E0E0E0E0E0E090909060606060606010101010101010101 010101010101010101010101010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 010101000000000000000000000000000000000000000000D6D6D6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3090909000000000000000000000000 0000000000000000000B0B0B111111111111111111121212121212121212121212121212121212 121212131313131313131313131313131313131313141414141414141414141414141414141414 141414151515151515151515151515151515151515161616161616161616161616161616161616 161616171717171717171717171717171717171717171717181818181818181818181818181818 1919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020212121212121 212121212121212121222222222222222222222222222222232323232323232323232323292929 2F2F2F3333333838383B3B3B3F3F3F4444444848484B4B4B4E4E4E5151515555555858585A5A5A 5C5C5C5F5F5F6161616363636666666666666767676969696A6A6A6B6B6B6B6B6B6C6C6C6D6D6D 6D6D6D6D6D6D6D6D6D6B6B6B6B6B6B6A6A6A6A6A6A696969676767666666646464636363616161 5E5E5E5C5C5C5A5A5A5757575555555252524F4F4F4B4B4B4646464444444040403C3C3C373737 3131312E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030 303030303030303030313131313131313131313131313131313131323232323232323232323232 323232323232323232333333333333333333333333333333333333333333333333343434343434 343434343434343434343434343434343434343434343434343434343434343434343434343434 353535353535353535353535353535353535353535353535353535353535353535353535343434 343434343434343434343434343434343434343434343434343434343434343434333333333333 3333330806060501010501010501010501010501010501010200005C5C5CFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000 0000000000000000000000000000000000002525255A5A5A5A5A5A5A5A5A5A5A5A595959595959 595959595959585858585858585858585858575757575757575757575757565656565656565656 565656555555555555555555545454545454545454535353535353535353535353525252525252 5252525151515151515151515050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D 4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949494949484848484848 484848474747474747464646464646454545454545454545444444444444434343434343424242 4242424242424141414141414141414040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E 3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939 383838383838383838373737373737363636363636363636353535353535343434343434343434 1717170000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717 0000000000000000000000000000000000000000001D1D1D252525252525252525242424242424 242424232323232323232323222222222222222222212121212121212121212121202020202020 2020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818 171717171717171717161616161616161616000000000000000000000000000000000000000000 000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878 0000000000000000000000000000000000000000000101010B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909080808080808 080808080808080808070707070707070707070707070707070707060606060606060606060606 040404000000000000000000000000000000000000000000181818EAEAEAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000 000000000000000000000000000000000000000000000000000000020202020202020202020202 020202020202020202020202020202020202020202020202010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909091010101616161919192020202626262828282A2A2A2D2D2D313131353535383838 3838383A3A3A3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3838383838383636363333332F2F2F252525 030303000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C0E0E0E1010101111111414141515151616161818181919191A1A1A1A1A1A191919191919 1818181818181616161515151414141313131010100E0E0E0C0C0C090909060606010101010101 010101010101010101010101010101010101010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202000000000000000000000000000000000000000000000000E0E0E0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6A6A6000000000000000000 000000000000000000000000010101101010111111111111121212121212121212121212121212 121212121212131313131313131313131313131313131313141414141414141414141414141414 141414141414151515151515151515151515151515151515161616161616161616161616161616 161616161616171717171717171717171717171717171717171717181818181818181818181818 1818181919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020212121 212121212121212121222222222222222222222222222222232323232323232323232323232323 2424242828282F2F2F3333333737373B3B3B4040404444444747474B4B4B4E4E4E525252555555 5757575A5A5A5C5C5C5F5F5F6161616262626565656666666868686969696B6B6B6C6C6C6C6C6C 6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6C6C6C6B6B6B6B6B6B6A6A6A696969686868666666 6565656262626060605F5F5F5C5C5C5858585656565353535050504D4D4D494949464646424242 3E3E3E3A3A3A3434343131312E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030 303030303030313131313131313131313131313131323232323232323232323232323232323232 333333333333333333333333333333333333333333333333343434343434343434343434343434 343434343434343434343434353535353535353535353535353535353535353535353535353535 353535353535353535353535353535353535353535353535353535353535353535353535353535 353535353535353535353535353535353535353535353535353535353535353535353535343434 3434343434343434340806060501010501010501010501010501010501010200005C5C5CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 2A2A2A0000000000000000000000000000000000000000002525255B5B5B5A5A5A5A5A5A5A5A5A 5A5A5A5A5A5A595959595959595959595959595959585858585858585858575757575757575757 575757565656565656565656565656555555555555555555545454545454545454535353535353 5353535252525252525252525151515151515151515050505050505050504F4F4F4F4F4F4E4E4E 4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A494949 494949484848484848484848474747474747464646464646454545454545454545444444444444 4343434343434242424242424242424141414141414141414040404040403F3F3F3F3F3F3F3F3F 3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A 393939393939393939383838383838373737373737373737363636363636363636353535353535 3434343434341818180000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D9D9D91717170000000000000000000000000000000000000000001D1D1D262626252525252525 242424242424242424242424232323232323232323222222222222222222212121212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818 181818181818181818171717171717171717161616161616010101000000000000000000000000 000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF7878780000000000000000000000000000000000000000000101010C0C0C0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 080808080808080808080808080808080808070707070707070707070707070707060606060606 060606060606040404000000000000000000000000000000000000000000181818EAEAEAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0B0B0B000000000000000000000000000000000000000000000000000000000000020202020202 020202020202020202020202020202020202020202020202020202020202010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909091010101010101616161D1D1D2424242828282828282D2D2D313131 3333333636363636363838383A3A3A3A3A3A3A3A3A3A3A3A383838383838363636353535333333 2F2F2F252525030303000000000000000000000000000000000000000000000000000000020202 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C0E0E0E1010101111111414141515151616161818181A1A1A1A1A1A1A1A1A 1919191919191818181818181616161515151414141313131010100E0E0E0C0C0C090909060606 010101010101010101010101010101010101010101010101020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202000000000000000000000000000000000000000000000000E9E9E9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF515151000000 000000000000000000000000000000000000060606111111111111111111121212121212121212 121212121212121212131313131313131313131313131313131313141414141414141414141414 141414141414141414151515151515151515151515151515151515161616161616161616161616 161616161616161616171717171717171717171717171717171717171717181818181818181818 1818181818181919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121212121212121222222222222222222222222222222232323232323232323232323 2323232424242424242828282D2D2D3333333838383B3B3B4040404343434747474B4B4B4D4D4D 5252525454545757575A5A5A5D5D5D5E5E5E6161616262626565656767676868686969696B6B6B 6C6C6C6D6D6D6D6D6D6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6C6C6C6C6C6C6B6B6B6A6A6A 6969696767676666666464646363636060605C5C5C5A5A5A5757575555555252524F4F4F4A4A4A 4949494545454141413C3C3C3939393333332F2F2F2F2F2F2F2F2F303030303030303030303030 303030313131313131313131313131313131323232323232323232323232323232323232333333 333333333333333333333333333333343434343434343434343434343434343434343434353535 353535353535353535353535353535353535353535353535353535363636363636363636363636 363636363636363636363636363636363636363636363636363636363636363636363636363636 363636363636363636363636363636363636363636363636363636363636363636363636353535 353535353535353535353535353535080606050101050101050101050101050101050101020000 5B5B5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF2A2A2A0000000000000000000000000000000000000000002525255B5B5B5B5B5B 5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A595959595959595959595959585858585858 585858575757575757575757575757565656565656565656555555555555555555555555545454 545454545454535353535353535353525252525252515151515151515151505050505050505050 4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B 4A4A4A4A4A4A494949494949484848484848484848474747474747464646464646454545454545 454545444444444444434343434343424242424242424242414141414141404040404040404040 3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B 3A3A3A3A3A3A3A3A3A393939393939393939383838383838373737373737373737363636363636 3535353535353535353434341818180000000000000000000000000000000000000000000B0B0B FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD9D9D91717170000000000000000000000000000000000000000001D1D1D262626 252525252525252525242424242424242424232323232323232323222222222222222222212121 2121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919 191919191919181818181818181818171717171717171717161616161616010101000000000000 000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF7878780000000000000000000000000000000000000000000101010C0C0C 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909 090909090909090909080808080808080808080808080808070707070707070707070707070707 060606060606060606060606040404000000000000000000000000000000000000000000181818 EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000 020202020202020202020202020202020202020202020202020202020202020202020202010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000090909101010161616191919202020242424262626 2828282D2D2D313131333333353535363636383838383838383838363636363636363636353535 3333333131312D2D2D252525030303000000000000000000000000000000000000000000000000 000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5DBDBDBCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCD5D5D5EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ECECEC000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060606060909090C0C0C0E0E0E111111131313141414151515161616181818191919 1919191919191919191919191919191818181616161515151313131111111010100E0E0E0C0C0C 090909060606010101010101010101010101010101010101010101010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202000000000000000000000000000000000000000000 000000F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3 0909090000000000000000000000000000000000000000000B0B0B111111111111121212121212 121212121212121212121212131313131313131313131313131313131313131313141414141414 141414141414141414141414151515151515151515151515151515151515151515161616161616 161616161616161616161616171717171717171717171717171717171717171717181818181818 1818181818181818181919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020 212121212121212121212121212121222222222222222222222222222222232323232323232323 2323232424242424242424242424242828282E2E2E3232323636363B3B3B3F3F3F444444474747 4A4A4A4E4E4E5252525454545858585A5A5A5D5D5D5E5E5E616161636363656565676767686868 6969696B6B6B6D6D6D6D6D6D6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6D6D6D6D6D6D 6D6D6D6B6B6B6A6A6A6868686868686666666464646262625E5E5E5D5D5D5A5A5A575757545454 5151514E4E4E4B4B4B4747474444444141413B3B3B373737343434303030303030303030303030 313131313131313131313131313131323232323232323232323232323232333333333333333333 333333333333333333343434343434343434343434343434343434343434353535353535353535 353535353535353535353535363636363636363636363636363636363636363636363636363636 363636363636373737373737373737373737373737373737373737373737373737373737373737 373737373737373737373737373737373737373737373737373737373737373737373737363636 363636363636363636363636363636363636363636090707050101050101050101050101050101 0501010200005B5B5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000262626 5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A595959595959 595959595959585858585858585858575757575757575757575757565656565656565656555555 555555555555545454545454545454535353535353535353525252525252525252515151515151 5151515050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C 4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A494949494949484848484848484848474747474747464646 464646454545454545454545444444444444434343434343424242424242414141414141414141 4040404040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C 3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838383838383838373737373737 363636363636363636353535353535343434181818000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000000000000000000000 1D1D1D262626262626252525252525242424242424242424242424232323232323232323222222 2222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A 1A1A1A191919191919191919181818181818181818171717171717171717161616161616010101 000000000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000000000000000000000 0101010C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 090909090909090909090909090909080808080808080808080808080808070707070707070707 070707070707060606060606060606060606040404000000000000000000000000000000000000 000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000 000000000000020202020202020202020202020202020202020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909101010161616191919 2020202424242626262A2A2A2D2D2D313131313131333333353535363636363636363636353535 3333333333333131312F2F2F2D2D2D232323030303000000000000000000000000000000000000 000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F98A8A8A272727171717171717 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 1414141414141414141414141414141616161717171E1E1E6D6D6DECECECFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFC2C2C2000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090909090C0C0C0E0E0E111111131313141414151515161616 181818181818191919191919191919191919191919181818161616151515131313111111101010 0E0E0E0C0C0C090909060606010101010101010101010101010101010101010101020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202000000000000000000000000000000 000000000000000000FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFA7A7A7000000000000000000000000000000000000000000010101101010111111121212 121212121212121212121212121212131313131313131313131313131313131313131313141414 141414141414141414141414141414151515151515151515151515151515151515151515161616 161616161616161616161616161616171717171717171717171717171717171717171717181818 1818181818181818181818181919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020 202020212121212121212121212121212121222222222222222222222222232323232323232323 2323232323232424242424242424242424242424242929292E2E2E3232323636363B3B3B404040 4444444747474A4A4A4E4E4E5151515555555858585A5A5A5D5D5D5F5F5F616161636363656565 6767676868686A6A6A6B6B6B6D6D6D6E6E6E6E6E6E6E6E6E6E6E6E6F6F6F6F6F6F6F6F6F6F6F6F 6E6E6E6D6D6D6D6D6D6C6C6C6B6B6B6969696969696767676565656363636161615F5F5F5C5C5C 5A5A5A5757575454545050504D4D4D4A4A4A4747474343433E3E3E3A3A3A363636303030313131 313131313131313131313131323232323232323232323232323232333333333333333333333333 333333333333343434343434343434343434343434353535353535353535353535353535353535 353535363636363636363636363636363636363636363636363636373737373737373737373737 373737373737373737373737373737373737373737373737373737373737383838383838383838 383838383838383838383838383838383838383838383838383838383838383838373737373737 373737373737373737373737373737373737373737373737373737090707050101050101050101 0501010501010501010200005B5B5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000 0000002626265C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A 5A5A5A5A5A5A595959595959595959595959585858585858585858575757575757575757565656 565656565656565656555555555555555555545454545454545454535353535353525252525252 5252525151515151515151515050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D 4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A494949494949484848484848484848 474747474747464646464646454545454545444444444444444444434343434343424242424242 4141414141414141414040404040404040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D 3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838383838 373737373737373737363636363636353535353535353535181818000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000000000 0000000000001E1E1E262626262626252525252525252525242424242424242424232323232323 2323232222222222222222222121212121212121212121212020202020202020201F1F1F1F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717171717171717 161616010101000000000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000000000 0000000000000101010C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A090909090909090909090909090909080808080808080808080808080808080808 070707070707070707070707070707060606060606060606040404000000000000000000000000 000000000000000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000 000000000000000000000000020202020202020202020202020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 1010101616161919191D1D1D2020202626262A2A2A2D2D2D2D2D2D2F2F2F313131333333333333 3333333333333131313131312F2F2F2D2D2D2A2A2A232323020202000000000000000000000000 000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C91D1D1D0A0A0A000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101121212A1A1A1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF989898000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090909090C0C0C101010111111131313141414 151515161616181818191919191919191919191919191919191919181818161616151515131313 1111111010100E0E0E0C0C0C090909060606010101010101010101010101010101010101010101 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202000000000000000000 000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF525252000000000000000000000000000000000000000000050505111111 121212121212121212121212121212121212121212131313131313131313131313131313131313 141414141414141414141414141414141414151515151515151515151515151515151515151515 161616161616161616161616161616161616171717171717171717171717171717171717171717 1818181818181818181818181818181919191919191919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 202020202020212121212121212121212121222222222222222222222222222222232323232323 2323232323232323232424242424242424242424242424242525252929292E2E2E313131353535 3B3B3B3F3F3F4343434646464A4A4A4E4E4E5151515353535656565A5A5A5E5E5E5F5F5F616161 6464646666666868686B6B6B6B6B6B6B6B6B6C6C6C6F6F6F6F6F6F6F6F6F6F6F6F707070707070 7171717070706F6F6F6E6E6E6D6D6D6E6E6E6D6D6D6C6C6C6A6A6A696969666666656565636363 6161615D5D5D5B5B5B5A5A5A5757575353535151514C4C4C4A4A4A4646464242423E3E3E3B3B3B 353535313131313131323232323232323232323232323232333333333333333333333333333333 343434343434343434343434343434343434353535353535353535353535353535353535363636 363636363636363636363636363636363636373737373737373737373737373737373737373737 373737373737383838383838383838383838383838383838383838383838383838383838383838 383838383838383838383838383838383838383838383838383838383838383838383838383838 383838383838383838383838383838383838383838383838383838383838373737090707050101 0501010501010501010501010501010200005B5B5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000 0000000000000000002626265D5D5D5D5D5D5D5D5D5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B 5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A595959595959595959595959585858585858585858 575757575757575757565656565656565656555555555555555555545454545454545454535353 5353535353535252525252525151515151515151515050505050505050504F4F4F4F4F4F4E4E4E 4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A494949494949 484848484848484848474747474747464646464646454545454545444444444444444444434343 4343434242424242424141414141414141414040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E 3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939 393939383838383838373737373737373737363636363636353535353535181818000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000 0000000000000000000000001E1E1E262626262626262626252525252525242424242424242424 242424232323232323232323222222222222222222212121212121212121202020202020202020 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717 171717171717161616010101000000000000000000000000000000000000000000939393FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000 0000000000000000000000000101010C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909080808080808080808 080808080808070707070707070707070707070707060606060606060606040404000000000000 000000000000000000000000000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000 000000000000000000000000000000000000020202020202020202020202020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101616161919192020202424242828282828282A2A2A2D2D2D2F2F2F 3131313131313131313131312F2F2F2F2F2F2D2D2D2A2A2A282828222222020202000000000000 000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9B9B9141414000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000030303676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090C0C0C0E0E0E101010111111 131313141414151515161616181818191919191919191919191919191919191919181818161616 1515151313131111111010100E0E0E0C0C0C060606060606010101010101010101010101010101 010101010101020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202000000 000000000000000000000000000000000000111111FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF6F6F60A0A0A000000000000000000000000000000000000000000 0B0B0B121212121212121212121212121212121212121212131313131313131313131313131313 131313141414141414141414141414141414141414141414151515151515151515151515151515 151515161616161616161616161616161616161616171717171717171717171717171717171717 1717171818181818181818181818181818181919191919191919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020202020202020212121212121212121212121222222222222222222222222222222232323 2323232323232323232323232424242424242424242424242525252525252525252929292B2B2B 3232323636363A3A3A3F3F3F4242424747474B4B4B4E4E4E5151515353535757575A5A5A5D5D5D 5F5F5F6161616464646767676868686A6A6A6B6B6B6B6B6B6D6D6D6F6F6F6F6F6F6F6F6F6F6F6F 7171717171717171717070706F6F6F7070706F6F6F6E6E6E6D6D6D6C6C6C6B6B6B696969686868 6767676565656262626161615D5D5D5B5B5B5858585555555353534E4E4E4C4C4C484848454545 4141413D3D3D393939363636323232323232323232323232333333333333333333333333343434 343434343434343434343434343434353535353535353535353535353535363636363636363636 363636363636363636373737373737373737373737373737373737373737373737383838383838 383838383838383838383838383838383838383838393939393939393939393939393939393939 393939393939393939393939393939393939393939393939393939393939393939393939393939 393939393939393939393939393939393939393939393939393939393939393939383838383838 0907070501010501010501010501010501010501010200005A5A5AFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000 0000000000000000000000000000002626265E5E5E5D5D5D5D5D5D5D5D5D5D5D5D5C5C5C5C5C5C 5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A595959595959595959 585858585858585858585858575757575757575757565656565656565656555555555555555555 545454545454535353535353535353525252525252525252515151515151505050505050505050 4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A 4A4A4A494949494949484848484848484848474747474747464646464646454545454545444444 4444444343434343434343434242424242424141414141414141414040404040403F3F3F3F3F3F 3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A 3A3A3A393939393939383838383838383838373737373737363636363636363636353535181818 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000 0000000000000000000000000000000000001E1E1E272727262626262626252525252525252525 242424242424242424232323232323232323222222222222222222212121212121212121202020 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818 181818181818171717171717171717010101000000000000000000000000000000000000000000 939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000 0000000000000000000000000000000000000101010C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909080808 080808080808080808080808070707070707070707070707070707060606060606060606040404 000000000000000000000000000000000000000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000 000000000000000000000000000000000000000000000000020202020202020202020202020202 020202020202020202020202020202020202020202020202010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101616161919191D1D1D202020262626262626282828 2A2A2A2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2D2D2D2A2A2A282828222222020202 000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF171717 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101696969FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C4C000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E 1010101111111414141515151616161818181919191919191A1A1A1A1A1A1A1A1A191919191919 1818181616161515151313131111111010100E0E0E090909060606060606010101010101010101 010101010101010101020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020000000000000000000000000000000000000000001C1C1CFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB5B5B5000000000000000000000000000000000000 000000000000101010121212121212121212121212121212121212131313131313131313131313 131313131313141414141414141414141414141414141414141414151515151515151515151515 151515151515161616161616161616161616161616161616161616171717171717171717171717 1717171717171818181818181818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020202020202020212121212121212121212121222222222222222222222222222222 232323232323232323232323242424242424242424242424242424252525252525252525252525 2929292C2C2C3232323535353A3A3A3E3E3E4343434747474A4A4A4D4D4D505050545454575757 5A5A5A5D5D5D5F5F5F6262626464646666666767676A6A6A6C6C6C6D6D6D6E6E6E6E6E6E6F6F6F 7070707171717171717070707070707171717070707171717070706F6F6F6F6F6F6D6D6D6C6C6C 6B6B6B6868686868686767676565656262626060605E5E5E5B5B5B5858585555555252524F4F4F 4C4C4C4848484545454141413D3D3D3A3A3A323232333333333333333333333333333333343434 343434343434343434343434353535353535353535353535353535363636363636363636363636 363636363636373737373737373737373737373737373737383838383838383838383838383838 383838383838383838393939393939393939393939393939393939393939393939393939393939 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939 3939393939390907070501010501010501010501010501010501010200005A5A5AFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A 0000000000000000000000000000000000000000002626265E5E5E5E5E5E5E5E5E5D5D5D5D5D5D 5D5D5D5D5D5D5D5D5D5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A 5A5A5A595959595959595959585858585858585858575757575757575757565656565656565656 555555555555555555545454545454545454535353535353525252525252525252515151515151 5050505050505050504F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B 4B4B4B4B4B4B4A4A4A4A4A4A494949494949484848484848484848474747474747464646464646 454545454545444444444444434343434343424242424242424242414141414141404040404040 4040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B 3B3B3B3A3A3A3A3A3A393939393939393939383838383838373737373737373737363636363636 3535351818180000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9 1717170000000000000000000000000000000000000000001E1E1E272727262626262626262626 252525252525242424242424242424232323232323232323232323222222222222222222212121 2121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919 191919181818181818181818171717171717171717010101000000000000000000000000000000 000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 7878780000000000000000000000000000000000000000000101010C0C0C0C0C0C0C0C0C0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909 090909080808080808080808080808080808070707070707070707070707070707070707060606 060606040404000000000000000000000000000000000000000000181818EAEAEAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B 000000000000000000000000000000000000000000000000000000000000020202020202020202 020202020202020202020202020202020202020202020202020202020202010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000090909101010161616191919202020242424 2424242626262828282A2A2A2D2D2D2D2D2D2D2D2D2D2D2D2A2A2A2A2A2A2A2A2A282828282828 202020020202000000000000000000000000000000000000000000000000000000020202FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 464646010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000020202ABABABFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF282828000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C0E0E0E1010101111111414141515151616161818181919191A1A1A1A1A1A1A1A1A1A1A1A 1919191919191818181616161515151313131111111010100C0C0C090909060606010101010101 010101010101010101010101010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202000000000000000000000000000000000000000000262626FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C6C6C000000000000000000000000 000000000000000000050505121212121212121212121212121212121212131313131313131313 131313131313131313131313141414141414141414141414141414141414151515151515151515 151515151515151515161616161616161616161616161616161616161616171717171717171717 171717171717171717181818181818181818181818181818181818191919191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F 202020202020202020202020212121212121212121212121212121222222222222222222222222 222222232323232323232323232323242424242424242424242424242424252525252525252525 2525252525252626262C2C2C3030303535353939393E3E3E4242424646464949494E4E4E515151 5353535656565959595D5D5D5F5F5F6161616464646666666868686B6B6B6C6C6C6D6D6D6E6E6E 6E6E6E7171717171717070707171717272727373737272727171717272727171717171716F6F6F 6F6F6F6E6E6E6C6C6C6A6A6A6A6A6A6868686666666464646262626060605E5E5E5A5A5A585858 5454545252525050504C4C4C4848484545454040403E3E3E393939353535333333343434343434 343434343434343434353535353535353535353535353535363636363636363636363636363636 373737373737373737373737373737373737383838383838383838383838383838383838383838 3939393939393939393939393939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A3A3A3A0907070501010501010501010501010501010501010200005A5A5A FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF2A2A2A0000000000000000000000000000000000000000002727275F5F5F5E5E5E5E5E5E 5E5E5E5E5E5E5E5E5E5D5D5D5D5D5D5D5D5D5D5D5D5C5C5C5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B 5B5B5B5A5A5A5A5A5A5A5A5A5A5A5A595959595959595959585858585858585858575757575757 575757565656565656555555555555555555545454545454545454535353535353525252525252 5252525151515151515151515050505050504F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D 4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A494949494949484848484848474747474747 474747464646464646454545454545444444444444434343434343424242424242424242414141 4141414040404040404040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C 3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838383838373737373737 3636363636363636361818180000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD9D9D91717170000000000000000000000000000000000000000001E1E1E272727272727 262626262626252525252525252525242424242424242424232323232323232323222222222222 2222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A 191919191919191919181818181818181818171717171717171717010101000000000000000000 000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7878780000000000000000000000000000000000000000000101010C0C0C0C0C0C 0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909080808080808080808080808080808070707070707070707070707 070707060606060606040404000000000000000000000000000000000000000000181818EAEAEA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909101010161616191919 1D1D1D2020202020202424242626262828282828282A2A2A2A2A2A282828282828282828282828 282828262626202020020202000000000000000000000000000000000000000000000000000000 020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE4E4E4161616000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000101010F0F0F0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD070707 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C0E0E0E1010101111111414141515151616161818181919191A1A1A1A1A1A 1A1A1A1A1A1A1919191919191818181616161515151313131111111010100C0C0C090909060606 010101010101010101010101010101010101010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020000000000000000000000000000000000000000002F2F2F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF232323000000000000 0000000000000000000000000000000B0B0B121212121212121212121212121212121212131313 131313131313131313131313131313141414141414141414141414141414141414151515151515 151515151515151515151515151515161616161616161616161616161616161616171717171717 171717171717171717171717181818181818181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 1F1F1F202020202020202020202020212121212121212121212121212121222222222222222222 222222232323232323232323232323232323242424242424242424242424242424252525252525 2525252525252626262626262626262C2C2C3030303535353A3A3A3D3D3D414141464646494949 4D4D4D5050505353535656565A5A5A5C5C5C5F5F5F6161616464646666666868686B6B6B6C6C6C 6D6D6D6E6E6E707070717171707070717171737373737373737373737373737373727272727272 7272727171717171716F6F6F6E6E6E6D6D6D6B6B6B696969686868666666636363626262606060 5C5C5C5A5A5A5656565555555151514E4E4E4B4B4B4747474444444040403B3B3B3A3A3A343434 343434343434353535353535353535353535353535363636363636363636363636363636373737 373737373737373737373737383838383838383838383838383838383838393939393939393939 3939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B090707050101050101050101050101050101050101 0200005A5A5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF2A2A2A0000000000000000000000000000000000000000002727275F5F5F 5F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5E5E5E5E5E5E5D5D5D5D5D5D5D5D5D5D5D5D5C5C5C5C5C5C 5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A595959595959595959585858585858 585858575757575757575757565656565656565656555555555555545454545454545454535353 5353535353535252525252525151515151515151515050505050504F4F4F4F4F4F4E4E4E4E4E4E 4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A494949494949484848 484848474747474747464646464646464646454545454545444444444444434343434343424242 4242424141414141414141414040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D 3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838383838 383838373737373737363636363636191919000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD9D9D91717170000000000000000000000000000000000000000001E1E1E 272727272727262626262626252525252525252525242424242424242424232323232323232323 2323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717171717010101000000 000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000000000000000000000010101 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A090909090909090909090909090909080808080808080808080808080808070707070707 070707070707070707060606060606040404000000000000000000000000000000000000000000 181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000 000000020202020202020202020202020202020202020202020202020202020202020202020202 020202020202010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 1010101616161919191D1D1D202020202020242424262626282828282828282828282828282828 2828282828282828282626261C1C1C020202000000000000000000000000000000000000000000 000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF939393050505000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000020202 757575FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DEDEDE000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C0E0E0E1010101313131414141515151616161818181A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1919191919191818181616161515151313131111111010100C0C0C 090909060606010101010101010101010101010101010101020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202000000000000000000000000000000000000 000000353535FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8000000 000000000000000000000000000000000000000000101010121212121212121212121212121212 131313131313131313131313131313131313141414141414141414141414141414141414151515 151515151515151515151515151515151515161616161616161616161616161616161616171717 171717171717171717171717171717171717181818181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020202020212121212121212121212121212121222222222222 222222222222232323232323232323232323232323242424242424242424242424242424252525 2525252525252525252626262626262626262626262A2A2A3030303434343838383D3D3D424242 4646464A4A4A4C4C4C4F4F4F5252525656565959595C5C5C5E5E5E606060646464666666676767 6A6A6A6B6B6B6D6D6D6E6E6E707070707070727272727272737373737373747474747474747474 7474747373737373737272727272727070706F6F6F6E6E6E6D6D6D6B6B6B6A6A6A686868666666 6363636161615F5F5F5D5D5D5A5A5A5656565555555252524E4E4E4B4B4B474747454545404040 3E3E3E383838353535353535353535353535363636363636363636363636363636373737373737 373737373737373737383838383838383838383838383838383838393939393939393939393939 3939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C 3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C 3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C090707050101050101050101050101 0501010501010200005A5A5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000 2727276060606060605F5F5F5F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5E5E5E5E5E5E5D5D5D5D5D5D 5D5D5D5D5D5D5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A595959 595959595959585858585858585858575757575757565656565656565656555555555555555555 5454545454545353535353535353535252525252525151515151515151515050505050504F4F4F 4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A 494949494949484848484848474747474747464646464646454545454545444444444444444444 4343434343434242424242424141414141414141414040404040403F3F3F3F3F3F3F3F3F3E3E3E 3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939 393939383838383838373737373737373737363636191919000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000000000000000 0000001E1E1E272727272727272727262626262626252525252525252525242424242424242424 2323232323232323232222222222222222222121212121212121212020202020202020201F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717171717 010101000000000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000000000000000 0000000101010C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909080808080808080808080808080808 070707070707070707070707070707070707060606040404000000000000000000000000000000 000000000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000 000000000000000000020202020202020202020202020202020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909090909091010101616161919191D1D1D202020202020242424262626282828282828 2828282626262626262626262626262424241C1C1C020202000000000000000000000000000000 000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D5D5D000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000202020FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBABABA000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E111111131313151515161616181818 1818181A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919181818181818161616141414111111111111 0E0E0E0C0C0C090909060606010101010101010101010101010101010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202000000000000000000000000 000000000000000000383838FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8E8E8E000000000000000000000000000000000000000000030303121212121212121212121212 121212131313131313131313131313131313131313141414141414141414141414141414141414 141414151515151515151515151515151515151515161616161616161616161616161616161616 171717171717171717171717171717171717171717181818181818181818181818181818191919 1919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121212121222222 222222222222222222232323232323232323232323232323242424242424242424242424252525 2525252525252525252525252626262626262626262626262626262B2B2B303030343434383838 3E3E3E4242424646464848484B4B4B5050505353535656565959595C5C5C5F5F5F616161636363 6565656767676A6A6A6C6C6C6D6D6D6E6E6E707070727272727272737373737373747474757575 7575757575757575757474747474747474747373737272727171716F6F6F6F6F6F6D6D6D6C6C6C 6A6A6A6868686666666464646161615F5F5F5C5C5C5B5B5B5757575454545252524E4E4E4B4B4B 4848484545454242423E3E3E3B3B3B373737363636363636363636363636373737373737373737 373737373737383838383838383838383838383838393939393939393939393939393939393939 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D090707050101050101 0501010501010501010501010200005A5A5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D2D2D000000000000000000000000000000 0000000000002525256060606060606060606060605F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5E5E5E 5E5E5E5E5E5E5D5D5D5D5D5D5D5D5D5D5D5D5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5A5A5A 5A5A5A5A5A5A595959595959595959585858585858585858575757575757575757565656565656 555555555555555555545454545454535353535353535353525252525252515151515151515151 5050505050504F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B 4A4A4A4A4A4A4A4A4A494949494949484848484848474747474747464646464646454545454545 4444444444444343434343434242424242424242424141414141414040404040404040403F3F3F 3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A 3A3A3A393939393939383838383838383838373737373737363636171717000000000000000000 0000000000000000000000000B0B0BFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000 0000000000000000001E1E1E282828272727272727262626262626252525252525252525242424 242424242424232323232323232323222222222222222222222222212121212121212121202020 2020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818 171717171717010101000000000000000000000000000000000000000000939393FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000 0000000000000000000101010C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909080808080808080808 080808080808080808070707070707070707070707070707060606040404000000000000000000 000000000000000000000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000 000000000000000000000000000000020202020202020202020202020202020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909090909091010101616161919191919191D1D1D202020242424 2424242626262626262626262626262626262424242020201C1C1C020202000000000000000000 000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF444444000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000171717EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF969696000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090E0E0E0E0E0E111111131313151515 1616161818181919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919181818181818151515141414 1111111010100E0E0E0C0C0C090909060606010101010101010101010101010101020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202000000000000 0000000000000000000000000000003B3B3BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF454545000000000000000000000000000000000000000000090909121212121212 121212121212131313131313131313131313131313131313131313141414141414141414141414 141414141414151515151515151515151515151515151515161616161616161616161616161616 161616161616171717171717171717171717171717171717181818181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121212121 222222222222222222222222232323232323232323232323232323242424242424242424242424 2525252525252525252525252525252626262626262626262626262727272727272B2B2B303030 3333333838383E3E3E4242424545454848484C4C4C5050505252525656565959595C5C5C5F5F5F 6161616363636565656868686A6A6A6C6C6C6D6D6D6F6F6F707070727272737373737373747474 757575757575757575757575757575757575757575747474747474737373717171707070707070 6F6F6F6D6D6D6C6C6C6A6A6A6868686565656464646161615F5F5F5C5C5C5A5A5A575757555555 5151514D4D4D4B4B4B4949494444444141413E3E3E3A3A3A363636363636373737373737373737 3737373737373838383838383838383838383939393939393939393939393939393939393A3A3A 3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C 3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E 3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D0A0808 0501010501010501010501010501010501010200005A5A5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF383838000000000000000000 0000000000000000000000001C1C1C6161616161616161616060606060606060606060605F5F5F 5F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5E5E5E5D5D5D5D5D5D5D5D5D5D5D5D5C5C5C5C5C5C5C5C5C 5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A595959595959585858585858585858575757575757 575757565656565656555555555555555555545454545454545454535353535353525252525252 5151515151515151515050505050504F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C 4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A494949494949494949484848484848474747474747464646 464646454545454545444444444444434343434343424242424242414141414141414141404040 4040404040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B 3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838383838373737373737373737121212000000 0000000000000000000000000000000000000B0B0BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000 0000000000000000000000000000001E1E1E282828272727272727272727262626262626252525 252525252525242424242424242424232323232323232323222222222222222222212121212121 2121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919 181818181818181818171717010101000000000000000000000000000000000000000000939393 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000 0000000000000000000000000000000101010C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 080808080808080808080808080808070707070707070707070707070707060606040404000000 000000000000000000000000000000000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000 000000000000000000000000000000000000000000020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000090909090909101010161616161616191919 1D1D1D2020202020202424242424242424242424242424242020202020201A1A1A020202000000 000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000161616D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727272000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060606060C0C0C0E0E0E101010111111 1414141515151616161818181919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919181818181818 1515151414141111111010100E0E0E0C0C0C090909060606010101010101010101010101010101 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF4F4F40808080000000000000000000000000000000000000000000E0E0E 121212121212121212121212131313131313131313131313131313131313141414141414141414 141414141414141414151515151515151515151515151515151515161616161616161616161616 161616161616161616171717171717171717171717171717171717181818181818181818181818 1818181919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121 212121222222222222222222222222232323232323232323232323232323242424242424242424 242424252525252525252525252525252525262626262626262626262626272727272727272727 2727272B2B2B3131313737373C3C3C3F3F3F4343434848484C4C4C4F4F4F515151545454595959 5C5C5C5F5F5F6262626464646666666868686A6A6A6C6C6C6E6E6E707070707070727272737373 737373757575757575757575767676767676767676767676777777767676767676747474737373 7272727272726F6F6F6E6E6E6D6D6D6C6C6C6B6B6B6868686666666464646161615F5F5F5C5C5C 5A5A5A5757575555555151514E4E4E4D4D4D4A4A4A4747474343433F3F3F3D3D3D373737373737 3737373838383838383838383838383838383939393939393939393939393939393A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C 3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E 3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E 3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E 3E3E3E0A0808050101050101050101050101050101050101020000595959FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF515151000000 0000000000000000000000000000000000000F0F0F626262616161616161616161616161606060 6060606060606060605F5F5F5F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5E5E5E5D5D5D5D5D5D5D5D5D 5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A595959595959595959585858 585858575757575757575757565656565656565656555555555555545454545454545454535353 5353535252525252525151515151515151515050505050504F4F4F4F4F4F4E4E4E4E4E4E4E4E4E 4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A494949494949484848484848484848 474747474747464646464646454545454545444444444444434343434343424242424242414141 4141414141414040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C 3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838383838373737373737 0A0A0A000000000000000000000000000000000000000000151515FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717 0000000000000000000000000000000000000000001E1E1E282828282828272727272727262626 262626252525252525252525242424242424242424232323232323232323222222222222222222 2121212121212121212020202020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919 191919191919181818181818181818171717010101000000000000000000000000000000000000 000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878 0000000000000000000000000000000000000000000101010C0C0C0C0C0C0C0C0C0C0C0C0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909 090909090909080808080808080808080808080808070707070707070707070707070707060606 040404000000000000000000000000000000000000000000181818EAEAEAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000 000000000000000000000000000000000000000000000000000000020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909101010 1616161616161919191D1D1D2020202020202020202020202020202020202020201D1D1D161616 020202000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E4E4E000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060606060C0C0C0E0E0E 1010101111111414141515151616161818181919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919 1818181818181515151414141111111010100E0E0E0C0C0C090909060606010101010101010101 010101010101020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202000000000000000000000000000000000000000000414141FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1B1B1000000000000000000000000000000000000000000 020202121212121212121212121212131313131313131313131313131313131313141414141414 141414141414141414141414151515151515151515151515151515151515151515161616161616 161616161616161616161616171717171717171717171717171717171717181818181818181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121 212121212121222222222222222222222222232323232323232323232323242424242424242424 242424242424252525252525252525252525252525262626262626262626262626272727272727 2727272727272727272C2C2C3131313636363C3C3C3E3E3E4343434848484C4C4C4E4E4E525252 5555555858585B5B5B5F5F5F6262626464646666666868686B6B6B6C6C6C6E6E6E6F6F6F717171 727272737373747474757575757575767676777777777777767676777777777777767676767676 7676767474747272727272727171717070706F6F6F6E6E6E6C6C6C6A6A6A686868666666646464 6262625F5F5F5C5C5C5959595757575555555151514F4F4F4D4D4D4B4B4B464646424242404040 3D3D3D3B3B3B3838383838383838383939393939393939393939393939393A3A3A3A3A3A3A3A3A 3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E 3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F 3F3F3F3F3F3F3F3F3F0A0808050101050101050101050101050101050101020000595959FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 838383020202000000000000000000000000000000000000000000535353626262626262616161 6161616161616161616060606060606060606060605F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5E5E5E 5E5E5E5D5D5D5D5D5D5D5D5D5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A595959 595959595959585858585858585858575757575757565656565656565656555555555555545454 5454545454545353535353535252525252525151515151515151515050505050504F4F4F4F4F4F 4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A494949494949 484848484848474747474747464646464646454545454545444444444444444444434343434343 4242424242424141414141414040404040404040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D 3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838383838 383838313131000000000000000000000000000000000000000000000000373737FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D9D9D91717170000000000000000000000000000000000000000001F1F1F282828282828272727 272727262626262626262626252525252525242424242424242424242424232323232323232323 2222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E 1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A 1A1A1A191919191919191919181818181818181818171717010101000000000000000000000000 000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF7878780000000000000000000000000000000000000000000101010C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909080808080808080808080808080808070707070707070707070707 070707070707040404000000000000000000000000000000000000000000181818EAEAEAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0B0B0B000000000000000000000000000000000000000000000000000000000000020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 0909091010101010101616161919191D1D1D1D1D1D202020202020202020202020202020202020 1D1D1D161616020202000000000000000000000000000000000000000000000000000000020202 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 414141000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000141414CACACAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF292929000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C0E0E0E1010101111111414141616161818181818181A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1919191818181818181515151414141111111010100E0E0E0C0C0C090909060606010101 010101010101010101020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202000000000000000000000000000000000000000000444444FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF686868000000000000000000000000000000 000000000000070707121212121212121212131313131313131313131313131313131313131313 141414141414141414141414141414141414151515151515151515151515151515151515161616 161616161616161616161616161616171717171717171717171717171717171717171717181818 1818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121 212121212121212121222222222222222222222222232323232323232323232323242424242424 242424242424242424252525252525252525252525262626262626262626262626262626272727 2727272727272727272727272828282C2C2C3131313636363C3C3C3E3E3E4343434747474B4B4B 4F4F4F5151515454545858585C5C5C5E5E5E6262626363636666666868686A6A6A6D6D6D6F6F6F 6F6F6F717171737373747474747474757575767676777777777777787878777777777777787878 7878787777777676767575757474747474747373737272727171716F6F6F6D6D6D6D6D6D6B6B6B 6868686767676565656262625F5F5F5D5D5D5A5A5A5858585555555353535151514E4E4E4A4A4A 4949494646464141414040403C3C3C3939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A 3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F404040404040404040404040 404040404040404040404040404040404040404040404040404040404040404040404040404040 4040404040404040404040404040400A0808050101050101050101050101050101050101020000 595959FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB9B9B9101010000000000000000000000000000000000000000000303030626262 6262626262626262626161616161616161616161616060606060606060606060605F5F5F5F5F5F 5F5F5F5E5E5E5E5E5E5E5E5E5D5D5D5D5D5D5D5D5D5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B 5A5A5A5A5A5A5A5A5A595959595959585858585858585858575757575757565656565656565656 555555555555545454545454545454535353535353525252525252515151515151515151505050 5050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A 4A4A4A494949494949484848484848474747474747464646464646454545454545444444444444 4343434343434242424242424242424141414141414040404040404040403F3F3F3F3F3F3E3E3E 3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939 3939393838383838381D1D1D000000000000000000000000000000000000000000020202757575 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD9D9D91717170000000000000000000000000000000000000000001F1F1F282828 282828282828272727272727262626262626252525252525252525242424242424242424232323 2323232323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818010101000000000000 000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF7878780000000000000000000000000000000000000000000101010C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A090909090909090909090909090909090909080808080808080808080808080808070707 070707070707070707070707040404000000000000000000000000000000000000000000181818 EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909090909091010101010101616161919191D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D161616020202000000000000000000000000000000000000000000000000 000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF414141000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000141414 CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD080808 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C0E0E0E1010101313131414141616161818181919191A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1A1A1A1919191818181818181515151414141111111010100E0E0E0C0C0C090909 060606010101010101010101010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202000000000000000000000000000000000000000000 474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF202020000000000000000000 0000000000000000000000000C0C0C121212121212121212131313131313131313131313131313 131313141414141414141414141414141414141414151515151515151515151515151515151515 161616161616161616161616161616161616161616171717171717171717171717171717171717 1818181818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121212121212121222222222222222222222222232323232323232323232323242424 242424242424242424242424252525252525252525252525262626262626262626262626262626 2727272727272727272727272828282828282828282C2C2C2E2E2E3636363B3B3B3E3E3E424242 4646464B4B4B4E4E4E5050505555555858585C5C5C5E5E5E6161616363636565656868686A6A6A 6D6D6D6E6E6E6F6F6F717171737373747474747474767676777777787878787878787878787878 787878787878787878787878777777767676757575757575747474737373717171717171707070 6E6E6E6C6C6C6A6A6A6868686666666464646161615F5F5F5D5D5D5B5B5B595959575757545454 5353535050504C4C4C4A4A4A4747474444444141413F3F3F3C3C3C3A3A3A3A3A3A3A3A3A3A3A3A 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F 3F3F3F3F3F3F3F3F3F3F3F3F404040404040404040404040404040404040404040404040404040 404040404040414141414141414141414141414141414141414141414141414141414141414141 4141414141414141414141414141414141414141410A0808050101050101050101050101050101 050101020000595959FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF4F4F40C0C0C000000000000000000000000000000000000000000 0505055A5A5A636363636363626262626262626262616161616161616161616161606060606060 6060606060605F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5E5E5E5D5D5D5D5D5D5D5D5D5C5C5C5C5C5C 5C5C5C5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A595959595959595959585858585858575757575757 575757565656565656555555555555545454545454545454535353535353525252525252515151 5151515151515050505050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B 4B4B4B4B4B4B4A4A4A4A4A4A494949494949484848484848474747474747464646464646454545 4545454444444444444343434343434242424242424141414141414141414040404040403F3F3F 3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A 3A3A3A393939393939383838343434040404000000000000000000000000000000000000000000 111111BFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000000000000000000000 1F1F1F292929282828282828272727272727262626262626262626252525252525242424242424 242424232323232323232323222222222222222222222222212121212121212121202020202020 2020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818010101 000000000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000000000000000000000 0101010C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909080808080808080808080808 080808070707070707070707070707070707040404000000000000000000000000000000000000 000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000 000000000000030303020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000090909090909101010161616161616191919191919191919 1919191919191D1D1D1D1D1D191919161616020202000000000000000000000000000000000000 000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E0E0E0000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C0E0E0E1010101313131414141616161818181919191A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1919191818181818181515151414141111111010100E0E0E 0C0C0C090909060606010101010101010101010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202000000000000000000000000000000 0000000000004A4A4AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4D4D4000000000000 000000000000000000000000000000000000111111121212121212131313131313131313131313 131313131313141414141414141414141414141414141414151515151515151515151515151515 151515151515161616161616161616161616161616161616171717171717171717171717171717 1717171818181818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121212121212121222222222222222222222222232323232323232323232323 242424242424242424242424242424252525252525252525252525262626262626262626262626 2626262727272727272727272727272828282828282828282828282828282F2F2F353535393939 3E3E3E4141414545454949494D4D4D5151515555555858585B5B5B5D5D5D616161636363666666 6969696B6B6B6D6D6D6E6E6E707070727272727272747474757575767676777777787878797979 7979797979797979797979797A7A7A797979787878777777767676777777757575747474737373 7272727171716F6F6F6D6D6D6B6B6B6969696969696666666464646262626060605E5E5E5C5C5C 5A5A5A5858585555555353535050504E4E4E4C4C4C4A4A4A4646464545453F3F3F3E3E3E3A3A3A 3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F 3F3F3F404040404040404040404040404040404040404040404040414141414141414141414141 414141414141414141414141414141414141414141414141414141414141424242424242424242 4242424242424242424242424242424242424242424141414141410A0808050101050101050101 050101050101050101020000595959FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E3E3E000000000000000000000000000000 0000000000000000001E1E1E626262636363636363636363626262626262626262616161616161 6161616161616060606060606060605F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5E5E5E5D5D5D5D5D5D 5D5D5D5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A595959595959595959585858 585858575757575757575757565656565656555555555555545454545454545454535353535353 5252525252525151515151515050505050505050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D 4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A494949494949484848484848484848474747474747 464646464646454545454545444444444444434343434343424242424242414141414141404040 4040404040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B 3B3B3B3A3A3A3A3A3A393939393939393939121212000000000000000000000000000000000000 000000000000101010FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000000000 0000000000001F1F1F292929282828282828272727272727272727262626262626252525252525 252525242424242424242424232323232323232323222222222222222222212121212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818 181818010101000000000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000000000 0000000000000101010C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909080808080808 080808080808080808070707070707070707070707070707040404000000000000000000000000 000000000000000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000 000000000000000000000000030303020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000090909090909101010101010161616191919 191919191919191919191919191919191919191919161616020202000000000000000000000000 000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBB000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E101010131313151515161616181818 1919191A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A191919181818181818151515141414111111 1010100E0E0E0C0C0C090909060606010101010101010101020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202000000000000000000 0000000000000000000000004D4D4DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B8B8B 000000000000000000000000000000000000000000040404121212121212131313131313131313 131313131313131313131313141414141414141414141414141414141414151515151515151515 151515151515151515161616161616161616161616161616161616171717171717171717171717 1717171717171818181818181818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 202020202020212121212121212121212121222222222222222222222222232323232323232323 232323242424242424242424242424242424252525252525252525252525262626262626262626 2626262626262727272727272727272727272828282828282828282828282828282929292D2D2D 3333333939393E3E3E4141414646464A4A4A4D4D4D5151515454545757575A5A5A5E5E5E606060 6262626666666868686A6A6A6D6D6D6E6E6E707070717171737373747474757575767676787878 7979797979797A7A7A7A7A7A7979797979797979797A7A7A797979797979787878777777767676 7676767474747373737272727171716F6F6F6E6E6E6C6C6C6A6A6A696969666666656565636363 6262625F5F5F5D5D5D5B5B5B5959595656565454545252525050504E4E4E4C4C4C494949454545 4343434040403F3F3F3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D 3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F404040 404040404040404040404040404040404040414141414141414141414141414141414141414141 414141424242424242424242424242424242424242424242424242424242424242424242424242 4242424242424242424242424242424242424242424242424242424242424242420A0808050101 050101050101050101050101050101020000585858FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF0F0F0F000000000000 0000000000000000000000000000000000002C2C2C646464636363636363636363636363626262 6262626262626161616161616161616161616060606060606060605F5F5F5F5F5F5F5F5F5E5E5E 5E5E5E5E5E5E5D5D5D5D5D5D5C5C5C5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B5A5A5A5A5A5A595959 595959595959585858585858575757575757575757565656565656555555555555545454545454 5454545353535353535252525252525151515151515050505050505050504F4F4F4F4F4F4E4E4E 4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A494949494949484848484848 474747474747464646464646454545454545444444444444434343434343424242424242414141 4141414141414040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C 3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3939391B1B1B000000000000000000000000000000 000000000000000000040404686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000 0000000000000000000000001F1F1F292929292929282828282828272727272727262626262626 252525252525252525242424242424242424232323232323232323222222222222222222212121 2121212121212020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919 191919181818181818010101000000000000000000000000000000000000000000939393FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000 0000000000000000000000000101010D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 080808080808080808080808080808070707070707070707070707070707050505000000000000 000000000000000000000000000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000 000000000000000000000000000000000000030303020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909101010 101010161616161616191919191919191919191919191919191919131313020202000000000000 000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF979797000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060606060909090E0E0E101010111111141414151515 1818181919191A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1A1A1A1B1B1B1A1A1A191919181818161616 1515151111111010100E0E0E0C0C0C060606060606010101010101010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202000000 000000000000000000000000000000000000505050FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF424242000000000000000000000000000000000000000000090909121212121212131313 131313131313131313131313131313141414141414141414141414141414141414151515151515 151515151515151515151515161616161616161616161616161616161616171717171717171717 171717171717171717171717181818181818181818181818181818191919191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020202020202020212121212121212121212121222222222222222222222222232323232323 232323232323242424242424242424242424242424252525252525252525252525262626262626 262626262626262626272727272727272727272727282828282828282828282828282828292929 2929292D2D2D3333333939393D3D3D4040404444444848484D4D4D5050505353535656565A5A5A 5D5D5D6060606262626565656868686A6A6A6D6D6D6F6F6F707070717171737373747474767676 7676767878787979797A7A7A7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A7B7B7B7A7A7A797979797979 7979797979797777777676767575757575757474747272726F6F6F6F6F6F6E6E6E6C6C6C6A6A6A 6868686767676464646262626060605E5E5E5C5C5C5A5A5A5858585656565353535151514F4F4F 4E4E4E4A4A4A4848484646464444444040403F3F3F3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F404040404040404040 404040404040404040414141414141414141414141414141414141414141424242424242424242 424242424242424242424242424242424242424242434343434343434343434343434343434343 434343434343434343434343434343434343434343434343434343434343434343434343434343 0A0808050101050101050101050101050101050101020000585858FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD1B1B1B 0000000000000000000000000000000000000000000000000000002121215F5F5F646464636363 6363636363636363636262626262626262626161616161616161616060606060606060605F5F5F 5F5F5F5F5F5F5E5E5E5E5E5E5E5E5E5D5D5D5D5D5D5D5D5D5C5C5C5C5C5C5B5B5B5B5B5B5B5B5B 5A5A5A5A5A5A595959595959595959585858585858575757575757575757565656565656555555 5555555454545454545454545353535353535252525252525151515151515050505050504F4F4F 4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A494949 494949484848484848474747474747464646464646454545454545444444444444434343434343 4242424242424141414141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D 3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A383838141414000000000000000000000000 0000000000000000000000000000000E0E0EE2E2E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000 000000000000000000000000000000000000202020292929292929282828282828272727272727 262626262626262626252525252525242424242424242424242424232323232323232323222222 2222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A 191919191919191919181818181818010101000000000000000000000000000000000000000000 939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000 0000000000000000000000000000000000000101010D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909 090909090909090909080808080808080808080808080808070707070707070707070707050505 000000000000000000000000000000000000000000181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000 000000000000000000000000000000000000000000000000030303020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 090909090909101010101010161616161616161616161616191919191919161616131313020202 000000000000000000000000000000000000000000000000000000020202FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF757575000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090C0C0C0E0E0E101010111111 1414141616161818181919191A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1B1B1B1B1B1B191919 1818181616161515151313131010100E0E0E0C0C0C060606060606010101010101010101020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202000000000000000000000000000000000000000000525252FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF3F3F30606060000000000000000000000000000000000000000000E0E0E121212 131313131313131313131313131313131313141414141414141414141414141414141414151515 151515151515151515151515151515151515161616161616161616161616161616161616171717 171717171717171717171717171717181818181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 202020202020202020202020212121212121212121212121222222222222222222222222232323 232323232323232323232323242424242424242424242424252525252525252525252525262626 262626262626262626262626272727272727272727272727282828282828282828282828282828 2929292929292929292D2D2D3434343939393C3C3C3F3F3F4444444949494D4D4D505050535353 5757575A5A5A5D5D5D6060606262626565656868686B6B6B6D6D6D6F6F6F707070717171737373 7575757676767878787878787979797A7A7A7B7B7B7B7B7B7B7B7B7C7C7C7C7C7C7B7B7B7B7B7B 7B7B7B7A7A7A7979797A7A7A7979797777777777777777777575757373737272727171716F6F6F 6D6D6D6B6B6B6A6A6A6969696767676565656262626060605F5F5F5D5D5D5B5B5B585858575757 5555555252524F4F4F4F4F4F4C4C4C4A4A4A4747474545454242423D3D3D3D3D3D3D3D3D3E3E3E 3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F404040404040404040404040 404040404040414141414141414141414141414141414141424242424242424242424242424242 424242424242434343434343434343434343434343434343434343434343434343434343434343 444444444444444444444444444444444444444444444444444444444444444444444444444444 4444444444440B0909050101050101050101050101050101050101020000585858FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFA9A9A90F0F0F000000000000000000000000000000000000000000000000000000090909 3A3A3A5F5F5F646464636363636363636363626262626262626262626262616161616161616161 6060606060606060605F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5D5D5D5D5D5D5D5D5D5C5C5C5C5C5C 5C5C5C5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A595959595959585858585858575757575757575757 565656565656555555555555545454545454535353535353535353525252525252515151515151 5050505050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B 4A4A4A4A4A4A494949494949484848484848474747474747464646464646454545454545444444 4444444343434343434242424242424141414141414040404040404040403F3F3F3F3F3F3E3E3E 3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B393939242424060606000000000000000000 000000000000000000000000000000000000070707646464FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9 171717000000000000000000000000000000000000000000202020292929292929282828282828 282828272727272727262626262626252525252525252525242424242424242424232323232323 2323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A191919191919191919181818181818010101000000000000000000000000000000 000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 7878780000000000000000000000000000000000000000000101010D0D0D0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 090909090909090909090909090909080808080808080808080808080808070707070707070707 070707050505000000000000000000000000000000000000000000181818EAEAEAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B 000000000000000000000000000000000000000000000000000000000000030303020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000090909090909101010101010101010161616161616161616161616161616 131313010101000000000000000000000000000000000000000000000000000000020202FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF575757000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E 1010101111111414141616161818181919191A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1919191818181616161515151313131010100E0E0E0C0C0C060606060606010101010101 010101020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202000000000000000000000000000000000000000000555555FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFB8B8B8000000000000000000000000000000000000000000010101 121212121212131313131313131313131313131313131313141414141414141414141414141414 141414151515151515151515151515151515151515161616161616161616161616161616161616 171717171717171717171717171717171717181818181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 1F1F1F202020202020202020202020212121212121212121212121222222222222222222222222 232323232323232323232323232323242424242424242424242424252525252525252525252525 262626262626262626262626262626272727272727272727272727282828282828282828282828 2929292929292929292929292929292E2E2E3030303737373A3A3A3F3F3F4444444747474A4A4A 4F4F4F5252525656565A5A5A5D5D5D6060606262626565656868686B6B6B6D6D6D6F6F6F707070 7373737575757676767777777878787878787979797A7A7A7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C 7C7C7C7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A797979797979787878777777777777757575757575 7272727070706F6F6F6D6D6D6C6C6C6C6C6C6969696868686666666464646262625F5F5F5F5F5F 5D5D5D5B5B5B5959595656565454545252525050505050504E4E4E4B4B4B494949454545434343 4242424242423E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F404040404040404040404040404040 414141414141414141414141414141414141424242424242424242424242424242424242434343 434343434343434343434343434343434343434343444444444444444444444444444444444444 444444444444444444444444444444444444444444454545454545454545454545454545454545 4545454545454545454545450B0909050101050101050101050101050101050101020000575757 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF383838030303000000000000000000000000000000000000000000 0000000000000000000303031D1D1D2E2E2E3838383B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939383838383838383838383838 383838373737373737373737373737373737363636363636363636353535353535353535353535 343434343434343434343434343434333333333333323232323232323232323232323232313131 3131313131313131313030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929 292929292929292929282828282828282828282828272727272727272727262626262626262626 2626262626262525252525252525252525252222221C1C1C121212020202000000000000000000 000000000000000000000000000000000000000000000000131313F0F0F0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD9D9D9171717000000000000000000000000000000000000000000202020292929292929 292929282828282828272727272727262626262626262626252525252525242424242424242424 232323232323232323222222222222222222212121212121212121202020202020202020202020 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818010101000000000000000000 000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7878780000000000000000000000000000000000000000000101010D0D0D0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A090909090909090909090909090909080808080808080808080808080808070707 070707070707070707050505000000000000000000000000000000000000000000181818EAEAEA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0B0B0B000000000000000000000000000000000000000000000000000000000000030303 030303020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000090909090909090909101010101010101010161616161616 1616161616160E0E0E010101000000000000000000000000000000000000000000000000000000 020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF414141000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000141414CACACA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF383838000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C0E0E0E1111111313131414141616161818181A1A1A1A1A1A1B1B1B1C1C1C1C1C1C1B1B1B 1B1B1B1C1C1C1B1B1B1919191818181616161515151313131010100E0E0E0C0C0C060606060606 010101010101020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202000000000000000000000000000000000000000000555555 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767676000000000000000000000000000000000000 000000060606121212131313131313131313131313131313131313141414141414141414141414 141414141414151515151515151515151515151515151515161616161616161616161616161616 161616171717171717171717171717171717171717181818181818181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222222222222222 222222232323232323232323232323232323242424242424242424242424252525252525252525 252525262626262626262626262626262626272727272727272727272727282828282828282828 2828282929292929292929292929292929292A2A2A2E2E2E3030303636363B3B3B404040444444 4646464B4B4B4F4F4F5252525757575A5A5A5D5D5D6161616363636565656868686B6B6B6D6D6D 6F6F6F7171717373737575757676767777777878787979797979797A7A7A7C7C7C7C7C7C7C7C7C 7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7B7B7B7A7A7A7979797A7A7A787878777777767676 7676767575757474747373737171717070706E6E6E6D6D6D6B6B6B6A6A6A686868666666646464 6363636161615F5F5F5E5E5E5C5C5C5959595858585656565454545252525050504F4F4F4C4C4C 4A4A4A484848474747474747444444434343424242404040404040404040404040404040414141 414141414141414141414141414141424242424242424242424242424242434343434343434343 434343434343434343434343444444444444444444444444444444444444444444444444454545 454545454545454545454545454545454545454545454545454545454545454545454545454545 4545454545454545454545454545454545450B0909050101050101050101050101050101050101 020000585858FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E4121212000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000E0E0EBABABAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000000000000000000000202020 2A2A2A292929292929282828282828272727272727272727262626262626252525252525252525 242424242424242424232323232323232323222222222222222222212121212121212121202020 2020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818010101000000 000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000000000000000000000010101 0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909080808080808080808080808 080808070707070707070707070707050505000000000000000000000000000000000000000000 181818EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000000000000000 000000030303030303020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909090909090909101010101010 1010101010101010101010100E0E0E010101000000000000000000000000000000000000000000 000000000000020202FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF414141000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C1010101111111313131515151616161919191A1A1A1A1A1A1B1B1B1C1C1C 1C1C1C1C1C1C1B1B1B1C1C1C1B1B1B1919191818181616161515151313131010100E0E0E0C0C0C 060606060606010101010101020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202000000000000000000000000000000000000 000000505050FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000 0000000000000000000B0B0B131313131313131313131313131313131313141414141414141414 141414141414141414151515151515151515151515151515151515151515161616161616161616 161616161616161616171717171717171717171717171717171717181818181818181818181818 1818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222222222 222222222222222222232323232323232323232323242424242424242424242424252525252525 252525252525262626262626262626262626262626272727272727272727272727282828282828 2828282828282929292929292929292929292929292A2A2A2A2A2A2A2A2A3030303535353A3A3A 3F3F3F4343434747474B4B4B4E4E4E5353535656565959595D5D5D606060626262666666686868 6A6A6A6D6D6D7070707171717373737575757676767777777878787979797979797B7B7B7C7C7C 7C7C7C7C7C7C7C7C7C7C7C7C7D7D7D7C7C7C7C7C7C7B7B7B7C7C7C7B7B7B7A7A7A7A7A7A797979 7979797777777777777777777676767575757373737272727171717070706E6E6E6D6D6D6B6B6B 6A6A6A6868686666666565656363636262625F5F5F5E5E5E5C5C5C5A5A5A585858585858555555 5353535050505050504F4F4F4D4D4D4B4B4B4A4A4A4A4A4A474747454545404040404040414141 414141414141414141424242424242424242424242424242424242434343434343434343434343 434343434343444444444444444444444444444444444444444444454545454545454545454545 454545454545454545454545464646464646464646464646464646464646464646464646464646 4646464646464646464646464646464646464646464646460B0909050101050101050101050101 050101050101020000575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDBDBD0E0E0E000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000D0D0D828282FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000000000000000 0000002020202A2A2A292929292929292929282828282828272727272727262626262626252525 252525252525242424242424242424232323232323232323222222222222222222212121212121 2121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818 010101000000000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B8B8B000000000000000000000000000000000000 000000000000020202030303020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202010101010101010101010101000000000000000000000000000000 000000000000171717F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000000000 000000000000000000030303030303020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909090909 0909091010101010101010101010101010100D0D0D010101000000000000000000000000000000 000000000000000000000000030303FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9020202000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C1010101111111313131515151616161919191A1A1A1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B191919181818161616151515131313101010 0E0E0E0C0C0C060606060606010101010101020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202000000000000000000000000 0000000000000000004C4C4CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0030303000000000000 000000000000000000000000000000101010131313131313131313131313131313131313141414 141414141414141414141414141414151515151515151515151515151515151515161616161616 161616161616161616161616171717171717171717171717171717171717181818181818181818 1818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121212121 222222222222222222222222232323232323232323232323242424242424242424242424252525 252525252525252525262626262626262626262626262626272727272727272727272727282828 2828282828282828282929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2F2F2F 3535353939393E3E3E4343434646464A4A4A4E4E4E5252525555555A5A5A5C5C5C5F5F5F626262 6565656767676B6B6B6D6D6D6F6F6F7171717373737474747676767777777878787979797A7A7A 7B7B7B7C7C7C7C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7D7D7D7C7C7C7B7B7B 7C7C7C7A7A7A7A7A7A797979797979787878787878777777757575757575737373727272707070 7070706D6D6D6C6C6C6B6B6B6969696868686767676565656363636161615F5F5F5E5E5E5C5C5C 5B5B5B5959595757575555555454545353535252525151515050504D4D4D4C4C4C4B4B4B464646 464646444444444444424242424242424242424242424242434343434343434343434343434343 444444444444444444444444444444444444454545454545454545454545454545454545454545 464646464646464646464646464646464646464646474747474747474747474747474747474747 4747474747474747474747474747474747474747474747474747474747470B0909050101050101 050101050101050101050101020000575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAA 0D0D0D000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000D0D0D6A6A6A FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000 0000000000000000002020202A2A2A2A2A2A292929292929282828282828272727272727262626 262626262626252525252525242424242424242424232323232323232323222222222222222222 2121212121212121212020202020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919 191919191919010101000000000000000000000000000000000000000000939393FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFACACAC0A0A0A000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000191919FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF131313000000000000000000000000000000 000000000000000000000000000000030303030303020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000090909090909090909090909101010101010101010060606000000000000000000000000 000000000000000000000000000000000000050505FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDCDCDC000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C101010111111131313151515181818191919 1A1A1A1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B191919181818161616151515 1313131010100E0E0E0C0C0C060606060606010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202000000000000 000000000000000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1B1B1000000 000000000000000000000000000000000000020202131313131313131313131313131313131313 141414141414141414141414141414141414151515151515151515151515151515151515161616 161616161616161616161616161616171717171717171717171717171717171717181818181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121 212121222222222222222222222222232323232323232323232323242424242424242424242424 252525252525252525252525262626262626262626262626262626272727272727272727272727 2828282828282828282828282929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2F2F2F3434343737373E3E3E4242424646464A4A4A4D4D4D5151515656565959595B5B5B 5F5F5F6161616464646868686A6A6A6C6C6C6F6F6F707070727272747474767676777777797979 7979797A7A7A7B7B7B7C7C7C7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7E7E7E 7D7D7D7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7A7A7A7A7A7A797979787878767676757575757575 7474747272727171717070706F6F6F6D6D6D6B6B6B6A6A6A696969676767666666656565636363 6161616060605F5F5F5D5D5D5B5B5B5A5A5A575757565656555555535353525252535353515151 4E4E4E4C4C4C4C4C4C4B4B4B494949474747454545464646434343434343434343434343444444 444444444444444444444444454545454545454545454545454545454545464646464646464646 464646464646464646474747474747474747474747474747474747474747484848484848484848 4848484848484848484848484848484848484848484848484848484848484848484848480B0909 050101050101050101050101050101050101020000575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB7B7B70F0F0F010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000D0D0D 808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000 0000000000000000000000000000002121212A2A2A2A2A2A292929292929282828282828282828 272727272727262626262626252525252525252525242424242424242424232323232323232323 2222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E 1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A 1A1A1A191919191919191919010101000000000000000000000000000000000000000000939393 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9171717000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000424242FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E2E2E000000000000000000 000000000000000000000000000000000000000000020202030303020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000090909090909090909090909090909101010090909030303000000000000 0000000000000000000000000000000000000000000000000D0D0DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFBEBEBE000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090C0C0C101010111111141414151515 1818181A1A1A1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B191919181818 1616161515151313131010100E0E0E0C0C0C060606060606010101020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 000000000000000000000000000000000000000000424242FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 707070000000000000000000000000000000000000000000070707131313131313131313131313 131313131313141414141414141414141414141414141414151515151515151515151515151515 151515161616161616161616161616161616161616171717171717171717171717171717171717 1818181818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121 212121212121222222222222222222222222232323232323232323232323242424242424242424 242424252525252525252525252525252525262626262626262626262626272727272727272727 2727272828282828282828282828282929292929292929292929292929292A2A2A2A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2F2F2F3131313838383C3C3C4141414747474A4A4A4D4D4D515151555555 5858585C5C5C5E5E5E6161616565656767676969696D6D6D6F6F6F707070727272747474767676 7878787979797979797B7B7B7B7B7B7C7C7C7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D 7E7E7E7E7E7E7E7E7E7D7D7D7E7E7E7D7D7D7D7D7D7C7C7C7B7B7B7B7B7B7A7A7A797979787878 7777777676767575757474747373737272727171716F6F6F6E6E6E6C6C6C6B6B6B6B6B6B686868 6868686666666464646363636262626060605F5F5F5E5E5E5C5C5C5A5A5A5A5A5A595959575757 5656565353535353535252525151514F4F4F4F4F4F4D4D4D4C4C4C4A4A4A484848474747474747 474747444444444444454545454545454545454545454545464646464646464646464646464646 474747474747474747474747474747474747484848484848484848484848484848484848484848 484848494949494949494949494949494949494949494949494949494949494949494949494949 4949490B0909050101050101050101050101050101050101020000575757FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDADADA2424240C0C0C000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000070707 121212B7B7B7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717 0000000000000000000000000000000000000000002121212A2A2A2A2A2A292929292929292929 282828282828272727272727262626262626252525252525252525242424242424242424232323 2323232323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1A1A1A1A1A1A1A1A1A191919191919191919010101000000000000000000000000000000000000 000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 343434000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000101010B0B0B0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F000000 000000000000000000000000000000000000000000000000000000010101030303030303020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000090909090909090909090909090909090909010101 000000000000000000000000000000000000000000000000000000000000292929FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0A0A0000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060606060909090E0E0E101010131313 1414141616161818181A1A1A1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B 1A1A1A1818181616161414141111111010100E0E0E090909060606010101010101020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF3030300000000000000000000000000000000000000000000C0C0C131313131313 131313131313131313141414141414141414141414141414141414151515151515151515151515 151515151515161616161616161616161616161616161616171717171717171717171717171717 1717171818181818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121212121222222222222222222222222232323232323232323232323242424242424 242424242424252525252525252525252525252525262626262626262626262626272727272727 2727272727272828282828282828282828282929292929292929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2F2F2F3232323636363C3C3C4242424646464A4A4A4D4D4D 5050505454545858585B5B5B5E5E5E6161616464646767676A6A6A6C6C6C6E6E6E717171727272 7474747676767878787979797A7A7A7B7B7B7B7B7B7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D 7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D7D7D7D7C7C7C 7A7A7A7979797878787777777777777676767474747474747474747171717070707070706F6F6F 6D6D6D6B6B6B6B6B6B6969696868686666666666666565656262626161616060605F5F5F5D5D5D 5C5C5C5C5C5C5B5B5B5959595757575656565656565555555454545151515050505050504E4E4E 4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4A4A4A484848494949464646464646464646474747474747 474747474747474747484848484848484848484848484848484848494949494949494949494949 4949494949494949494949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A0B0909050101050101050101050101050101050101020000565656FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA8787870F0F0F080808000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030303 0D0D0D5D5D5DEDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D9D9D91717170000000000000000000000000000000000000000002121212B2B2B2A2A2A2A2A2A 292929292929282828282828272727272727262626262626262626252525252525242424242424 242424232323232323232323222222222222222222212121212121212121202020202020202020 2020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919010101000000000000000000000000 000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFCACACA131313000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000002E2E2EFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A8A8A80D0D0D000000000000000000000000000000000000000000000000000000000000030303 030303020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909090909090909090909 050505000000000000000000000000000000000000000000000000000000000000000000676767 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 414141000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000141414CACACAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060606060909090E0E0E 1111111313131414141616161919191A1A1A1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1A1A1A1818181616161414141111111010100E0E0E090909060606010101020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202000000000000000000000000000000000000000000393939FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF1F1F1030303000000000000000000000000000000000000000000111111 131313131313131313131313141414141414141414141414141414141414151515151515151515 151515151515151515161616161616161616161616161616161616171717171717171717171717 1717171717171717171818181818181818181818181818181919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121212121222222222222222222222222232323232323232323232323232323 242424242424242424242424252525252525252525252525262626262626262626262626272727 2727272727272727272828282828282828282828282828282929292929292929292929292A2A2A 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C3232323636363C3C3C424242464646 4B4B4B4D4D4D5151515454545858585C5C5C5E5E5E6060606565656767676A6A6A6C6C6C6E6E6E 7070707272727474747676767878787979797A7A7A7B7B7B7C7C7C7D7D7D7D7D7D7D7D7D7D7D7D 7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E 7D7D7D7D7D7D7C7C7C7B7B7B797979797979797979777777767676767676757575747474737373 7272727171716F6F6F6E6E6E6D6D6D6B6B6B6B6B6B696969686868676767656565646464646464 6262626161616060606060605E5E5E5D5D5D5C5C5C5A5A5A595959585858565656565656545454 5252525252525252525151515151514F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4A4A4A4A4A4A4A4A4A 4A4A4A474747484848484848484848484848484848494949494949494949494949494949494949 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B0B0909050101050101050101050101050101050101020000 565656FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF 7D7D7D151515111111030303000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101101010 0E0E0E5F5F5FDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD9D9D91717170000000000000000000000000000000000000000002121212B2B2B 2A2A2A2A2A2A292929292929282828282828282828272727272727262626262626252525252525 252525242424242424242424232323232323232323222222222222222222212121212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919010101000000000000 000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7878780D0D0D000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000181818E0E0E0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEAEAEA0D0D0D000000000000000000000000000000000000000000000000000000 000000010101030303020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 090909080808010101000000000000000000000000000000000000000000000000000000000000 010101C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF414141000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000141414 CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C0E0E0E1111111313131515151616161919191A1A1A1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1B1B1B1A1A1A1818181616161414141111111010100E0E0E090909060606 010101020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202000000000000000000000000000000000000000000 353535FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8B8B8000000000000000000000000000000000000000000 020202131313131313131313131313131313141414141414141414141414141414141414151515 151515151515151515151515151515161616161616161616161616161616161616171717171717 171717171717171717171717181818181818181818181818181818191919191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 202020202020212121212121212121212121222222222222222222222222232323232323232323 232323242424242424242424242424252525252525252525252525262626262626262626262626 272727272727272727272727282828282828282828282828282828292929292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C3030303636363B3B3B 4040404343434747474C4C4C4F4F4F5454545757575A5A5A5E5E5E616161636363666666696969 6C6C6C6F6F6F7070707373737474747575757676767878787979797B7B7B7C7C7C7D7D7D7D7D7D 7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F 7F7F7F7F7F7F8080807E7E7E7D7D7D7D7D7D7C7C7C7B7B7B7A7A7A7A7A7A7A7A7A767676767676 7575757474747373737373737171717171716F6F6F6F6F6F6D6D6D6C6C6C6A6A6A696969686868 6767676767676666666565656262626262626161615F5F5F5F5F5F5E5E5E5E5E5E5D5D5D5B5B5B 5A5A5A5A5A5A585858575757555555565656555555535353535353535353535353515151515151 5050505050504F4F4F4D4D4D4D4D4D4E4E4E4C4C4C4C4C4C4949494949494A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C0B0909050101050101050101050101050101 050101020000565656FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEC7C7C77B7B7B3636361313130909090D0D0D0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0808080E0E0E2D2D2D 686868B5B5B5F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000000000000000000000 2121212B2B2B2A2A2A2A2A2A292929292929292929282828282828272727272727262626262626 252525252525252525242424242424242424232323232323232323222222222222222222212121 2121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919010101 000000000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE6D6D6D111111000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000303031C1C1CCFCFCF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B000000000000000000000000000000000000000000 000000000000000000000000020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000020202000000000000000000000000000000000000000000000000000000 000000000000060606F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF454545 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C0E0E0E1111111313131515151616161919191A1A1A1B1B1B1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1A1A1A1818181616161414141111111010100E0E0E 090909060606010101020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202000000000000000000000000000000 000000000000303030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D7D7D000000000000000000000000000000 000000000000070707131313131313131313131313141414141414141414141414141414141414 151515151515151515151515151515151515161616161616161616161616161616161616171717 171717171717171717171717171717181818181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121212121222222222222222222222222232323232323 232323232323242424242424242424242424252525252525252525252525262626262626262626 262626272727272727272727272727282828282828282828282828282828292929292929292929 2929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C313131 3636363939394040404343434848484B4B4B4F4F4F5454545757575A5A5A5E5E5E606060636363 6666666969696B6B6B6E6E6E7171717373737575757676767676767878787A7A7A7B7B7B7C7C7C 7D7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F7F7F7F 7F7F7F7F7F7F8080808080808080807E7E7E7E7E7E7E7E7E7D7D7D7C7C7C7B7B7B7A7A7A7A7A7A 7979797777777777777777777575757474747474747373737171717171717171716F6F6F6D6D6D 6C6C6C6B6B6B6B6B6B696969686868676767666666656565636363636363626262616161606060 6060605F5F5F5E5E5E5C5C5C5C5C5C5B5B5B595959595959595959585858585858575757575757 5757575555555454545555555353535353535353535151515252524F4F4F4F4F4F4F4F4F4D4D4D 4E4E4E4E4E4E4E4E4E4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D0B0909050101050101050101 050101050101050101020000565656FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6EEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEF2F2F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000000000 0000000000002121212B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727 272727262626262626252525252525242424242424242424232323232323232323222222222222 2222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919 191919010101000000000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4B4B4222222 131313000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000060606151515565656 EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3B3B30F0F0F000000000000000000000000 000000000000000000000000000000000000000000010101020202020202020202020202020202 020202020202020202020202020202020202020202020202020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000004E4E4EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF272727000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C0E0E0E1111111414141515151818181A1A1A1B1B1B1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1A1A1A181818161616141414111111 1010100E0E0E090909060606010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202000000000000000000 0000000000000000000000002C2C2CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000 0000000000000000000000000C0C0C131313131313131313131313141414141414141414141414 141414141414151515151515151515151515151515151515161616161616161616161616161616 161616171717171717171717171717171717171717181818181818181818181818181818191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F 202020202020202020202020212121212121212121212121222222222222222222222222232323 232323232323232323242424242424242424242424252525252525252525252525262626262626 262626262626272727272727272727272727272727282828282828282828282828292929292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C 2D2D2D3131313333333A3A3A3E3E3E4444444747474A4A4A4E4E4E5353535656565A5A5A5D5D5D 6060606363636666666868686C6C6C6D6D6D7070707373737575757676767777777878787A7A7A 7C7C7C7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F 7F7F7F7F7F7F7F7F7F8080808080808080808080807F7F7F7F7F7F7E7E7E7E7E7E7D7D7D7D7D7D 7C7C7C7D7D7D7A7A7A7B7B7B797979797979777777777777767676767676747474747474737373 7171717070706E6E6E6E6E6E6D6D6D6D6D6D6C6C6C6B6B6B696969696969686868666666656565 6565656565656363636262626262626060606060605F5F5F5F5F5F5F5F5F5D5D5D5E5E5E5D5D5D 5C5C5C5B5B5B5B5B5B5A5A5A5A5A5A5A5A5A585858595959575757565656565656555555545454 5454545353535353535353535353535151514F4F4F4F4F4F4F4F4F5050504D4D4D4D4D4D4D4D4D 4D4D4D4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E0C0A0A050101 050101050101050101050101050101020000565656FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000 0000000000000000000000002121212B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828 282828272727272727262626262626252525252525252525242424242424242424232323232323 2323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A191919010101000000000000000000000000000000000000000000939393FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFDC7C7C77474744A4A4A3A3A3A393939393939393939393939393939393939393939 393939393939393939393939393939393939393939393939393939393939393939393939393939 3939393939393939393939393939393939393939393939393939393939393D3D3D595959959595 E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE222222000000000000 000000000000000000000000000000000000000000000000000000000000010101020202020202 020202020202020202020202020202020202020202020202020202020202020202010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000050505D1D1D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E1111111414141515151818181A1A1A 1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1B1B1B1A1A1A181818161616 1414141111111010100E0E0E090909060606020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202000000 000000000000000000000000000000000000272727FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB0C0C0C000000 000000000000000000000000000000000000101010131313131313131313141414141414141414 141414141414141414151515151515151515151515151515151515161616161616161616161616 161616161616171717171717171717171717171717171717181818181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 1F1F1F202020202020202020202020212121212121212121212121222222222222222222222222 232323232323232323232323242424242424242424242424252525252525252525252525252525 262626262626262626262626272727272727272727272727282828282828282828282828292929 2929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2C2C2C2D2D2D2D2D2D2D2D2D3434343838383E3E3E4242424646464B4B4B4E4E4E525252565656 5959595C5C5C6060606363636565656868686B6B6B6E6E6E707070727272737373757575777777 7777777979797B7B7B7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F7F7F7F 7F7F7F7F7F7F7F7F7F7F7F7F8080808080808080808080808080808080808080807F7F7F7F7F7F 7F7F7F7F7F7F7E7E7E7E7E7E7C7C7C7C7C7C7C7C7C7B7B7B7A7A7A797979787878797979767676 7676767575757474747272727171717171717171716F6F6F6F6F6F6E6E6E6C6C6C6B6B6B6A6A6A 6A6A6A6A6A6A686868676767686868666666666666656565656565646464636363636363616161 6161616060606161615F5F5F5F5F5F5F5F5F5E5E5E5E5E5E5D5D5D5B5B5B5C5C5C5B5B5B5B5B5B 585858595959585858585858575757565656575757565656555555555555545454525252535353 5151515151515151514E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F 0C0A0A050101050101050101050101050101050101020000565656FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000 0000000000000000000000000000000000002121212B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929 292929282828282828272727272727262626262626252525252525252525242424242424242424 2323232323232323232222222222222222222121212121212121212020202020202020201F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A191919010101000000000000000000000000000000000000000000 939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF 0E0E0E000000000000000000000000000000000000000000000000000000000000000000000000 000000000000010101010101020202020202020202020202020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000003C3C3CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEAEAEA000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090C0C0C101010111111141414151515 1818181A1A1A1B1B1B1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1B1B1B1A1A1A 1818181616161414141111111010100E0E0E090909060606020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202000000000000000000000000000000000000000000222222FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCB 000000000000000000000000000000000000000000010101131313131313131313131313141414 141414141414141414141414141414151515151515151515151515151515151515161616161616 161616161616161616171717171717171717171717171717171717181818181818181818181818 1818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222222222 222222222222232323232323232323232323242424242424242424242424252525252525252525 252525262626262626262626262626272727272727272727272727282828282828282828282828 2929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E3232323737373D3D3D4141414545454949494D4D4D 5151515555555858585C5C5C5E5E5E6262626565656868686B6B6B6D6D6D707070717171747474 7575757676767878787A7A7A7B7B7B7C7C7C7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7F7F7F7F7F7F 7F7F7F7F7F7F7F7F7F7F7F7F808080808080808080808080808080808080808080818181818181 8080808080808080807F7F7F8080807F7F7F7D7D7D7D7D7D7D7D7D7B7B7B7B7B7B7B7B7B7A7A7A 7979797878787878787676767676767575757474747272727373737272727171717171716F6F6F 6F6F6F6D6D6D6D6D6D6C6C6C6B6B6B6B6B6B6A6A6A6A6A6A696969686868686868676767666666 6565656565656565656464646262626363636262626262626161616060606060606060605F5F5F 5F5F5F5E5E5E5D5D5D5D5D5D5D5D5D5C5C5C5B5B5B5B5B5B5A5A5A595959595959595959595959 5858585656565656565656565454545454545252525252525252525252524F4F4F505050505050 5050505050500C0A0A050101050101050101050101050101050101020000555555FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9 1717170000000000000000000000000000000000000000002121212B2B2B2B2B2B2B2B2B2A2A2A 2A2A2A292929292929282828282828272727272727262626262626262626252525252525242424 242424242424232323232323232323222222222222222222212121212121212121202020202020 2020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919010101000000000000000000000000000000 000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF565656080808000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000070707DDDDDDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCDCDCD000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C101010131313 1414141616161818181A1A1A1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C 1B1B1B1A1A1A1818181616161414141111111010100E0E0E090909060606020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202000000000000000000000000000000000000000000191919FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF919191000000000000000000000000000000000000000000060606131313131313131313 141414141414141414141414141414141414151515151515151515151515151515151515161616 161616161616161616161616161616171717171717171717171717171717171717181818181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222 222222222222222222232323232323232323232323242424242424242424242424252525252525 252525252525262626262626262626262626272727272727272727272727282828282828282828 2828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E3333333737373B3B3B404040444444 4848484D4D4D5151515454545757575B5B5B5D5D5D6262626565656868686A6A6A6D6D6D6F6F6F 7272727373737575757777777878787A7A7A7C7C7C7C7C7C7D7D7D7D7D7D7E7E7E7E7E7E7F7F7F 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F808080808080808080808080808080808080818181818181 8181818181818181818080808080808080808080808080807F7F7F7E7E7E7D7D7D7D7D7D7D7D7D 7C7C7C7B7B7B7B7B7B7A7A7A797979797979787878777777767676757575757575747474737373 7373737373737171717070707070706F6F6F6E6E6E6F6F6F6E6E6E6D6D6D6D6D6D6C6C6C6B6B6B 6B6B6B6A6A6A696969686868696969676767676767666666676767666666656565646464656565 6363636363636161616262626161616161616161615F5F5F5F5F5F5E5E5E5E5E5E5F5F5F5E5E5E 5E5E5E5D5D5D5D5D5D5B5B5B5A5A5A5A5A5A595959595959585858585858575757555555555555 5555555454545454545151510C0A0A050101050101050101050101050101050101020000555555 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD9D9D91717170000000000000000000000000000000000000000002121212C2C2C2B2B2B 2B2B2B2A2A2A2A2A2A292929292929282828282828282828272727272727262626262626252525 252525252525242424242424242424232323232323232323222222222222222222212121212121 2121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919010101000000000000000000 000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF4F4F41F1F1F010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000030303858585FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF414141000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000141414CACACA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2B2B2000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 1010101313131414141616161818181A1A1A1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1C1C1C1A1A1A1919191616161515151313131010100E0E0E090909060606020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020202020202020202020000000000000000000000000000000000000000000E0E0E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF5A5A5A0000000000000000000000000000000000000000000A0A0A131313 131313131313141414141414141414141414141414141414151515151515151515151515151515 161616161616161616161616161616161616171717171717171717171717171717171717181818 1818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121 222222222222222222222222232323232323232323232323242424242424242424242424252525 252525252525252525262626262626262626262626272727272727272727272727282828282828 2828282828282929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F3535353B3B3B 3F3F3F4444444848484B4B4B4F4F4F5454545656565A5A5A5D5D5D6161616464646767676B6B6B 6C6C6C6F6F6F7171717272727676767777777878787A7A7A7C7C7C7C7C7C7D7D7D7E7E7E7E7E7E 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F808080808080808080808080808080808080818181 8181818181818181818181818181818080808181818080808080808181817F7F7F8080807F7F7F 7F7F7F7E7E7E7D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7B7B7B7A7A7A797979787878787878777777 7777777676767676767474747474747373737373737272727171717171717171717171716F6F6F 6F6F6F6F6F6F6E6E6E6D6D6D6D6D6D6C6C6C6C6C6C6B6B6B6B6B6B6A6A6A6969696A6A6A6A6A6A 696969686868686868666666676767656565666666666666656565656565636363646464636363 6363636262626161616161616060606060605F5F5F5F5F5F5E5E5E5D5D5D5D5D5D5C5C5C5A5A5A 5A5A5A5959595959595858585656565656560E0C0C050101050101050101050101050101050101 020000555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000000000000000000000212121 2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929282828282828272727272727262626 262626252525252525252525242424242424242424232323232323232323222222222222222222 2121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A010101000000 000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF141414000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101404040FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF414141000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C1010101313131414141616161818181A1A1A1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1919191818181515151313131010100E0E0E090909 070707020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202000000000000000000000000000000000000 000000020202FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF242424000000000000000000000000000000000000000000 0E0E0E131313131313141414141414141414141414141414141414151515151515151515151515 151515151515161616161616161616161616161616161616171717171717171717171717171717 1717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121 212121222222222222222222222222232323232323232323232323242424242424242424242424 252525252525252525252525262626262626262626262626272727272727272727272727272727 2828282828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F 3636363B3B3B3E3E3E4444444848484B4B4B5050505454545757575B5B5B5D5D5D616161656565 6767676A6A6A6D6D6D6F6F6F7070707373737575757777777979797A7A7A7B7B7B7C7C7C7D7D7D 7E7E7E7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F808080808080808080808080808080808080 818181818181818181818181818181818181828282818181818181808080818181818181818181 8181818181818080808080807F7F7F7E7E7E7F7F7F7E7E7E7D7D7D7C7C7C7C7C7C7B7B7B7A7A7A 7979797A7A7A787878787878797979777777767676767676757575757575747474747474737373 7373737272727171717171717070707070707070706F6F6F6F6F6F6F6F6F6D6D6D6D6D6D6D6D6D 6D6D6D6D6D6D6C6C6C6B6B6B6A6A6A6A6A6A6A6A6A6969696969696A6A6A696969686868676767 676767676767676767646464646464646464646464636363626262616161616161606060616161 6060605E5E5E5D5D5D5D5D5D5B5B5B5B5B5B5A5A5A5A5A5A0F0D0D050101050101050101050101 050101050101020000555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000000000000000 0000002121212C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727 272727262626262626262626252525252525242424242424242424232323232323232323222222 2222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A 010101000000000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5D5D5151515010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101292929 F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF828282 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090C0C0C1010101313131414141616161818181A1A1A1B1B1B1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B191919181818151515131313101010 0E0E0E090909070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202000000000000000000000000 000000000000000000000000F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED010101000000000000000000000000000000 000000000000121212131313131313141414141414141414141414141414141414151515151515 151515151515151515161616161616161616161616161616161616171717171717171717171717 1717171717171818181818181818181818181818181919191919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121212121222222222222222222222222232323232323232323232323242424242424 242424242424252525252525252525252525262626262626262626262626272727272727272727 2727272828282828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F 2F2F2F3030303434343838383F3F3F4242424545454B4B4B4E4E4E5353535757575A5A5A5D5D5D 6060606262626565656969696B6B6B6E6E6E7171717272727474747777777878787A7A7A7B7B7B 7B7B7B7D7D7D7E7E7E7F7F7F7F7F7F7F7F7F7F7F7F808080808080808080808080808080808080 808080818181818181818181818181818181818181828282828282828282828282828282828282 8383838282828181818181818181818181818080808080808080807F7F7F7F7F7F7F7F7F7E7E7E 7E7E7E7D7D7D7C7C7C7C7C7C7B7B7B7B7B7B7A7A7A797979797979787878787878787878777777 777777767676767676757575747474737373737373747474737373737373727272727272707070 7070707070707070706F6F6F6F6F6F6F6F6F6E6E6E6E6E6E6E6E6E6E6E6E6C6C6C6C6C6C6D6D6D 6C6C6C6A6A6A6A6A6A6A6A6A6B6B6B686868686868686868676767686868666666676767666666 6565656464646464646363636363636262626161616161615F5F5F5F5F5F110F0F050101050101 050101050101050101050101050303555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000 0000000000000000002222222C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828 282828282828272727272727262626262626252525252525242424242424242424232323232323 2323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A010101000000000000000000000000000000000000000000939393FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E1E1E1242424020202000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030303 313131F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF6A6A6A000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090C0C0C1010101313131515151616161919191B1B1B1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B191919181818151515 1313131010100E0E0E090909070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202000000000000 000000000000000000000000000000000000E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8B8B8000000000000000000000000 000000000000000000040404131313131313141414141414141414141414141414141414151515 151515151515151515151515151515161616161616161616161616161616161616171717171717 1717171717171717171717171818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121212121222222222222222222222222232323232323232323232323242424 242424242424242424252525252525252525252525262626262626262626262626272727272727 2727272727272828282828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F3030303434343939393D3D3D4141414646464A4A4A4E4E4E535353575757 5959595D5D5D6060606262626666666969696B6B6B6E6E6E707070737373747474767676797979 7A7A7A7B7B7B7C7C7C7D7D7D7E7E7E7F7F7F7F7F7F7F7F7F808080808080808080808080808080 808080818181818181818181818181818181818181818181828282828282828282828282828282 828282838383838383828282828282828282828282818181828282818181818181818181808080 8080808080807F7F7F7E7E7E7E7E7E7E7E7E7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7A7A7A 7A7A7A7A7A7A797979787878787878777777767676777777767676767676767676757575757575 747474737373737373727272737373727272727272717171717171717171707070707070707070 6F6F6F6F6F6F6E6E6E6E6E6E6D6D6D6D6D6D6D6D6D6C6C6C6C6C6C6B6B6B6B6B6B6969696A6A6A 6A6A6A696969686868676767666666666666656565646464636363646464636363626262121010 050101050101050101050101050101050101050303555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000 0000000000000000000000000000002222222C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929 292929292929282828282828272727272727262626262626252525252525252525242424242424 242424232323232323232323222222222222222222212121212121212121202020202020202020 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A010101000000000000000000000000000000000000000000939393 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F8676767050505000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0808085D5D5DF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF525252000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E101010131313151515161616191919 1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1B1B1B191919 1818181515151313131010100E0E0E090909070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 000000000000000000000000000000000000000000000000DDDDDDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF838383000000000000 000000000000000000000000000000080808131313131313141414141414141414141414141414 141414151515151515151515151515151515161616161616161616161616161616161616171717 171717171717171717171717171717181818181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020202020212121212121212121222222222222222222222222232323232323232323232323 242424242424242424242424252525252525252525252525262626262626262626262626272727 2727272727272727272828282828282828282828282929292929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2E2E2E2F2F2F2F2F2F2F2F2F3030303030303535353737373C3C3C4141414545454949494F4F4F 5252525656565A5A5A5D5D5D6060606262626565656868686B6B6B6D6D6D707070727272737373 7575757878787979797B7B7B7C7C7C7D7D7D7F7F7F7F7F7F7F7F7F808080808080808080808080 808080808080818181818181818181818181818181818181828282828282828282828282828282 828282828282838383838383838383838383838383838383838383828282828282828282828282 8181818181818282828181818080807F7F7F7F7F7F7F7F7F8080807F7F7F7E7E7E7E7E7E7D7D7D 7D7D7D7D7D7D7D7D7D7B7B7B7B7B7B7B7B7B7A7A7A7A7A7A797979797979797979787878787878 787878777777767676767676767676767676757575767676757575747474747474757575747474 7373737272727272727272727171717171717171717070707070706E6E6E6F6F6F6F6F6F6E6E6E 6E6E6E6D6D6D6C6C6C6D6D6D6C6C6C6B6B6B6B6B6B696969686868686868686868676767666666 656565141212050101050101050101050101050101050101080606575757FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717 0000000000000000000000000000000000000000002222222C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2A2A2A2A2A2A292929292929282828282828272727272727262626262626252525252525252525 242424242424242424232323232323232323222222222222222222212121212121212121202020 2020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A010101000000000000000000000000000000000000 000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2D2D22A2A2A010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 030303131313AEAEAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3A3A3A000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060606060909090E0E0E101010141414151515 1818181919191B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1C1C1C 1B1B1B1919191818181515151313131010100E0E0E0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202000000000000000000000000000000000000000000000000D1D1D1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E4E4E 0000000000000000000000000000000000000000000B0B0B131313141414141414141414141414 141414141414151515151515151515151515151515151515161616161616161616161616161616 161616171717171717171717171717171717171717181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121212121222222222222222222222222232323232323 232323232323242424242424242424242424252525252525252525252525262626262626262626 262626272727272727272727272727282828282828282828282828292929292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E 2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F3030303030303030303131313737373C3C3C404040444444 4848484D4D4D5151515555555858585B5B5B5F5F5F6262626565656868686A6A6A6D6D6D6F6F6F 7272727373737676767878787A7A7A7A7A7A7B7B7B7D7D7D7F7F7F7F7F7F808080808080808080 808080808080808080818181818181818181818181818181818181828282828282828282828282 828282828282838383838383838383838383838383838383838383848484848484848484838383 848484848484838383838383838383828282828282818181818181818181808080818181818181 8080808080807F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7D7D7D7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B 7B7B7B7B7B7B7A7A7A7A7A7A7A7A7A797979787878787878787878787878787878787878777777 767676777777767676767676767676767676747474747474737373747474747474727272727272 7272727272727171717070707070707070707070706E6E6E6E6E6E6D6D6D6C6C6C6B6B6B6B6B6B 6B6B6B6A6A6A6969691513130501010501010501010501010501010501010A0808585858FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D9D9D91717170000000000000000000000000000000000000000002222222C2C2C2C2C2C2C2C2C 2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727272727262626262626 252525252525242424242424242424232323232323232323222222222222222222212121212121 2121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A010101000000000000000000000000 000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8C8343434 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0707070F0F0F838383F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 414141000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000141414CACACAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF232323000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E111111 1414141515151818181A1A1A1C1C1C1C1C1C1C1C1C1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1C1C1C1B1B1B1919191818181515151313131010100E0E0E0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202010101000000000000000000000000000000000000000000C5C5C5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1A1A1A0000000000000000000000000000000000000000000F0F0F131313141414141414 141414141414141414141414151515151515151515151515151515161616161616161616161616 161616161616171717171717171717171717171717171717181818181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 1F1F1F202020202020202020212121212121212121212121222222222222222222222222232323 232323232323232323242424242424242424242424252525252525252525252525262626262626 262626262626272727272727272727272727282828282828282828282828292929292929292929 2929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F3030303030303030303131313131313535353A3A3A 3E3E3E4242424747474C4C4C5050505454545757575A5A5A5E5E5E6161616565656767676A6A6A 6D6D6D6F6F6F7070707373737575757878787979797A7A7A7C7C7C7D7D7D7E7E7E808080808080 808080808080808080808080818181818181818181818181818181818181828282828282828282 828282828282828282838383838383838383838383838383838383848484848484848484848484 848484848484848484858585848484838383848484838383848484838383828282838383828282 8181818282828181818080808181818080807F7F7F8080807F7F7F7F7F7F7F7F7F7E7E7E7E7E7E 7E7E7E7D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7C7C7C7B7B7B7A7A7A 7A7A7A7A7A7A797979787878797979797979797979777777777777777777767676777777777777 7676767575757575757474747474747474747373737373737272727171717272727070706F6F6F 6F6F6F6E6E6E6E6E6E6D6D6D6C6C6C1614140501010501010501010501010501010501010D0B0B 5A5A5AFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD9D9D91717170000000000000000000000000000000000000000002222222D2D2D 2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828282828272727272727 262626262626252525252525252525242424242424242424232323232323232323222222222222 2121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A010101000000000000 000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF8F8F88F8F8F2A2A2A040404030303010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000101010606060B0B0B 0C0C0C474747ADADADF8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF414141000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000141414 CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 0E0E0E1111111414141616161818181A1A1A1C1C1C1C1C1C1C1C1C1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1D1D1D1C1C1C1B1B1B1919191818181515151313131010100E0E0E0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202010101000000000000000000000000000000000000 000000BABABAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEAEAEA000000000000000000000000000000000000000000010101131313141414 141414141414141414141414141414151515151515151515151515151515151515161616161616 161616161616161616161616171717171717171717171717171717171717181818181818181818 1818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222222222222222 232323232323232323232323242424242424242424242424252525252525252525252525262626 262626262626262626272727272727272727272727282828282828282828282828292929292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D 2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030303030313131313131313131 3636363838383E3E3E4242424646464C4C4C4F4F4F5353535757575959595D5D5D616161646464 6767676A6A6A6B6B6B6E6E6E7070707272727575757777777878787A7A7A7C7C7C7D7D7D7E7E7E 808080808080808080808080808080818181818181818181818181818181818181828282828282 828282828282828282828282838383838383838383838383838383838383848484848484848484 848484848484848484848484858585858585858585858585848484848484848484848484848484 858585828282828282828282828282828282828282828282828282818181818181818181808080 8080807F7F7F8080808080807F7F7F7E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7E7E7E7D7D7D7D7D7D 7E7E7E7D7D7D7D7D7D7B7B7B7B7B7B7B7B7B7B7B7B7C7C7C7B7B7B7A7A7A7A7A7A7A7A7A797979 797979797979787878787878787878777777777777767676767676757575757575747474757575 7373737272727272727171717070706F6F6F6F6F6F171515050101050101050101050101050101 050101110F0F5D5D5DFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000000000000000000000 2222222D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828 272727272727262626262626252525252525252525242424242424242424232323232323232323 2222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E 1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A010101 000000000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEDCDCDCB6B6B69B9B9B8F8F8F888888 888888888888888888888888888888888888888888888888888888888888888888888888888888 888888888888888888888888888888888888888888888888888888888888888888888888888888 888888888888888888888888888888888888888888888888888888888888888888888888888888 888888888888888888888888888888888888888888888888888888888888888888888888888888 888888888888888888888888888888888888888888888888888888888888888888888888888888 888888888888888888888888888888888888888888888888888888888888888888888888888888 8888888888888888888888888888888888888888888888888888888888888888888F8F8F9A9A9A B5B5B5DCDCDCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF474747000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C0E0E0E1111111414141616161818181A1A1A1C1C1C1C1C1C1C1C1C1D1D1D1E1E1E 1E1E1E1F1F1F1E1E1E1E1E1E1D1D1D1C1C1C1B1B1B1A1A1A1818181616161313131111110E0E0E 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202010101000000000000000000000000 000000000000000000AEAEAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFB9B9B9000000000000000000000000000000000000000000040404 131313141414141414141414141414141414141414151515151515151515151515151515161616 161616161616161616161616161616171717171717171717171717171717171717181818181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222222222 222222222222232323232323232323232323242424242424242424242424252525252525252525 252525262626262626262626272727272727272727272727282828282828282828282828292929 2929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131 3131313232323232323636363D3D3D4141414646464A4A4A4E4E4E5252525656565959595D5D5D 6060606363636767676969696C6C6C6E6E6E7070707373737474747676767979797A7A7A7C7C7C 7E7E7E7E7E7E808080808080808080808080818181818181818181818181818181818181828282 828282828282828282828282828282838383838383838383838383838383838383848484848484 848484848484848484848484858585858585858585858585858585858585868686858585858585 858585858585868686848484838383848484848484838383838383838383838383838383838383 8383838383838282828282828282828181818282828181818181818080808080807F7F7F808080 8080807F7F7F8080808080807F7F7F7E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7E7E7E7D7D7D7D7D7D 7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7B7B7B7A7A7A797979787878797979787878787878 777777777777767676767676757575747474737373737373727272181616050101050101050101 0501010301010100000504041616163A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3D3D3D4D4D4D5D5D5D828282ABABABE7E7E7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9171717000000000000000000000000000000 0000000000002222222D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929 282828282828272727272727262626262626252525252525252525242424242424242424232323 2323232323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1A1A1A010101000000000000000000000000000000000000000000939393FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF656565000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000141414CBCBCBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090C0C0C0E0E0E1111111414141616161818181A1A1A1C1C1C1C1C1C1C1C1C 1D1D1D1E1E1E1E1E1E1F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A181818161616141414 1111110E0E0E0A0A0A070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202010101000000000000 000000000000000000000000000000A2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000000000 000000080808141414141414141414141414141414141414151515151515151515151515151515 151515161616161616161616161616161616161616171717171717171717171717171717171717 1818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222 222222222222222222232323232323232323232323242424242424242424242424252525252525 252525252525262626262626262626262626272727272727272727272727282828282828282828 2828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131 3131313131313232323232323232323737373D3D3D4141414545454949494F4F4F525252555555 5959595C5C5C5F5F5F6363636666666969696B6B6B6D6D6D707070727272747474777777797979 7979797B7B7B7D7D7D7E7E7E7F7F7F808080808080818181818181818181818181818181818181 828282828282828282828282828282828282838383838383838383838383838383838383848484 848484848484848484848484848484858585858585858585858585858585868686868686868686 858585868686858585868686868686858585858585868686858585858585848484858585858585 848484848484848484848484848484838383838383848484838383838383828282828282828282 8282828181818181818282828181818282828181818181818080808080807F7F7F8080807F7F7F 7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7C7C7C7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B 7B7B7B7A7A7A7A7A7A797979787878787878777777777777767676757575747474191717050101 050101050101050101020000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000020202 020202000000232323838383E3E3E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1E1171717000000000000000000 0000000000000000000000001F1F1F2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A 292929292929282828282828272727272727272727262626262626252525252525242424242424 242424232323232323232323222222222222222222212121212121212121202020202020202020 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1919190000000000000000000000000000000000000000000404049F9F9FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5080808000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000181818E0E0E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFC1C1C1000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090C0C0C0E0E0E1111111414141616161818181A1A1A1C1C1C 1C1C1C1C1C1C1D1D1D1E1E1E1E1E1E1F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A181818 1616161414141111110F0F0F0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202010101 000000000000000000000000000000000000000000969696FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C5C5C000000000000000000000000 0000000000000000000C0C0C141414141414141414141414141414141414151515151515151515 151515151515161616161616161616161616161616161616171717171717171717171717171717 1717171818181818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121 212121222222222222222222222222232323232323232323242424242424242424242424252525 252525252525252525262626262626262626262626272727272727272727272727282828282828 2828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030 3131313131313131313232323232323232323333333333333939393E3E3E4343434949494C4C4C 5050505454545858585B5B5B5E5E5E6262626464646868686A6A6A6D6D6D6F6F6F717171757575 7777777878787979797B7B7B7C7C7C7E7E7E7F7F7F808080818181818181818181818181818181 818181828282828282828282828282828282838383838383838383838383838383838383838383 848484848484848484848484848484848484858585858585858585858585858585868686868686 868686868686868686878787878787878787878787878787868686878787868686878787868686 858585858585868686868686868686868686868686858585858585858585858585858585848484 848484838383838383838383838383838383838383828282828282828282838383828282828282 8181818181818282828181818181818181818181818080807F7F7F7F7F7F7F7F7F7E7E7E7E7E7E 7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D7C7C7C7C7C7C7A7A7A7A7A7A7A7A7A7A7A7A797979777777 1A1818050101050101050101050101020000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000020202020202595959DFDFDFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA171717000000 0000000000000000000000000000000000001111112D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B 2A2A2A2A2A2A292929292929292929282828282828272727272727262626262626252525252525 252525242424242424242424232323232323222222222222222222212121212121212121202020 2020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B101010000000000000000000000000000000000000000000111111 BEBEBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0131313000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000171717F9F9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA8A8A8000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090C0C0C0E0E0E111111141414161616181818 1A1A1A1C1C1C1C1C1C1C1C1C1D1D1D1E1E1E1E1E1E1F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C 1A1A1A1818181616161414141111110F0F0F0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202010101000000000000000000000000000000000000000000848484FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C2C2C000000000000 000000000000000000000000000000101010141414141414141414141414141414151515151515 151515151515151515151515161616161616161616161616161616161616171717171717171717 1717171717171717171818181818181818181818181919191919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121 212121212121222222222222222222222222232323232323232323232323242424242424242424 242424252525252525252525252525262626262626262626272727272727272727272727282828 2828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030 3030303030303131313131313232323232323232323333333333333333333A3A3A3E3E3E444444 4949494C4C4C4F4F4F5555555858585B5B5B5E5E5E6161616464646767676A6A6A6D6D6D6F6F6F 7272727474747676767979797979797B7B7B7D7D7D7E7E7E7F7F7F808080818181818181818181 818181818181828282828282828282828282828282838383838383838383838383838383838383 848484848484848484848484848484848484858585858585858585858585858585858585868686 868686868686868686868686878787878787878787878787878787878787878787868686878787 868686868686868686868686888888878787878787878787878787868686868686868686858585 868686858585858585868686848484848484858585858585848484858585848484848484838383 848484848484838383848484848484838383828282838383838383838383818181828282818181 8080808080808181818080808080807F7F7F7F7F7F7E7E7E7E7E7E7D7D7D7C7C7C7B7B7B7C7C7C 7B7B7B7A7A7A1B1919050101050101050101050101020000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101030303808080FBFBFB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1B1B1B000000000000000000000000000000000000000000000000131313242424262626262626 252525252525242424242424242424242424242424232323232323222222222222212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919 1818181818181818181717171717170F0F0F010101000000000000000000000000000000000000 000000171717E2E2E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 686868010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000353535FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090C0C0C0E0E0E111111141414 1616161818181A1A1A1C1C1C1C1C1C1C1C1C1D1D1D1E1E1E1E1E1E1F1F1F1E1E1E1E1E1E1E1E1E 1C1C1C1C1C1C1A1A1A1818181616161414141111110F0F0F0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202010101000000000000000000000000000000000000000000717171FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8050505 000000000000000000000000000000000000000000131313141414141414141414141414141414 151515151515151515151515151515151515161616161616161616161616161616171717171717 171717171717171717171717181818181818181818181818181818191919191919191919191919 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121212121222222222222222222232323232323232323232323242424242424 242424242424252525252525252525252525262626262626262626262626272727272727272727 2727272828282828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F 303030303030303030313131313131313131323232323232333333333333333333343434383838 3C3C3C4242424747474B4B4B4F4F4F5353535757575A5A5A5C5C5C6161616464646767676A6A6A 6C6C6C6F6F6F7171717373737676767878787979797A7A7A7C7C7C7D7D7D7F7F7F7F7F7F808080 818181818181828282828282828282828282828282828282838383838383838383838383838383 838383848484848484848484848484848484848484858585858585858585858585858585858585 868686868686868686868686868686878787878787878787878787878787888888888888888888 888888888888878787888888888888878787888888878787888888888888888888878787878787 888888878787878787878787868686868686878787868686868686878787868686868686878787 878787868686868686878787858585858585868686858585858585858585858585858585848484 8484848484848383838282828383838383838282828181818181818181818181818080807F7F7F 7E7E7E7F7F7F7E7E7E7D7D7D1C1A1A050101050101050101050101020000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0101012C2C2CE5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF565656000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000232323FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF1F1F1111111000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000101010B0B0B0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797979000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E 1111111414141616161818181A1A1A1C1C1C1C1C1C1C1C1C1D1D1D1E1E1E1E1E1E1F1F1F1E1E1E 1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A1818181616161414141111110F0F0F0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101000000000000000000000000000000000000000000 5D5D5DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CECECE000000000000000000000000000000000000000000030303141414141414141414141414 141414151515151515151515151515151515151515161616161616161616161616161616161616 171717171717171717171717171717171717181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020212121212121212121212121222222222222222222222222232323232323232323232323 242424242424242424242424252525252525252525262626262626262626262626272727272727 2727272727272828282828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F 2F2F2F2F2F2F303030303030313131313131313131323232323232333333333333333333343434 3434343838383B3B3B4141414646464A4A4A4D4D4D5252525656565959595D5D5D5F5F5F636363 6767676969696C6C6C6E6E6E7070707373737575757777777979797A7A7A7C7C7C7E7E7E7F7F7F 7F7F7F808080818181818181828282828282828282828282828282838383838383838383838383 838383838383848484848484848484848484848484848484858585858585858585858585858585 868686868686868686868686868686878787878787878787878787878787888888888888888888 888888888888888888898989898989888888898989898989898989888888888888898989898989 888888898989898989898989898989888888898989888888888888888888888888888888888888 888888888888888888888888888888888888888888888888878787878787878787868686868686 878787868686868686858585858585858585858585848484858585848484848484838383828282 8282828282828181818181818080808080801E1C1C050101050101050101050101020000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000F0F0FD4D4D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFBFBFBF121212000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000707077D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4D4D4030303000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000020202363636 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF656565000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C0E0E0E1111111414141616161818181A1A1A1C1C1C1C1C1C1C1C1C1D1D1D1E1E1E1E1E1E 1F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A1818181616161414141212120F0F0F0A0A0A 070707020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101000000000000000000000000000000 0000000000004A4A4AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA4A4A4000000000000000000000000000000000000000000070707141414141414 141414141414141414151515151515151515151515151515151515161616161616161616161616 161616171717171717171717171717171717171717181818181818181818181818181818191919 1919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121212121222222222222222222232323232323232323 232323242424242424242424242424252525252525252525252525262626262626262626262626 2727272727272727272828282828282828282828282929292929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F303030303030313131313131313131323232323232323232333333333333 3434343434343434343535353B3B3B4040404444444949494D4D4D5151515454545858585B5B5B 5F5F5F6262626565656868686B6B6B6E6E6E7070707272727474747777777979797A7A7A7C7C7C 7D7D7D7E7E7E7F7F7F808080808080828282828282828282828282828282838383838383838383 838383838383838383848484848484848484848484848484848484858585858585858585858585 858585868686868686868686868686868686878787878787878787878787878787888888888888 8888888888888888888989898989898989898989898989898989898A8A8A898989898989898989 8989898A8A8A8A8A8A8989898A8A8A8A8A8A8989898A8A8A8A8A8A8989898A8A8A898989898989 8989898989898989898989898A8A8A898989888888888888898989898989898989898989888888 888888888888888888888888888888878787878787878787878787868686868686868686868686 8686868585858383838383838383838383838282828181811E1C1C050101050101050101050101 020000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000B0B0BD9D9D9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF313131000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000191919F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3C3C3050505000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000020202 1E1E1EEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF535353000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C0E0E0E1111111414141616161818181A1A1A1C1C1C1C1C1C1C1C1C1D1D1D 1E1E1E1E1E1E1F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A181818161616141414121212 0F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202000000000000000000 000000000000000000000000363636FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF7B7B7B0000000000000000000000000000000000000000000A0A0A 141414141414141414141414141414151515151515151515151515151515161616161616161616 161616161616161616171717171717171717171717171717171717181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 202020202020202020202020212121212121212121212121222222222222222222222222232323 232323232323232323242424242424242424252525252525252525252525262626262626262626 262626272727272727272727272727282828282828282828282828292929292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E 2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232323232333333 3333333333333434343434343535353535353939393F3F3F4444444747474B4B4B505050545454 5757575A5A5A5E5E5E6262626464646868686B6B6B6D6D6D707070727272747474767676787878 7A7A7A7C7C7C7D7D7D7F7F7F7F7F7F808080818181828282828282828282828282838383838383 838383838383838383838383848484848484848484848484848484848484858585858585858585 858585858585868686868686868686868686868686878787878787878787878787878787888888 8888888888888888888888888989898989898989898989898989898A8A8A8A8A8A8A8A8A8A8A8A 8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8A8A8A 8B8B8B8B8B8B8A8A8A8B8B8B8A8A8A8B8B8B8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8A8A8A8B8B8B 8A8A8A8A8A8A8989898A8A8A8A8A8A898989888888898989898989888888888888888888888888 8888888787878787878787878686868585858585858585858484848383831F1D1D050101050101 050101050101020000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000131313EFEFEFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D0141414000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000001010109C9C9CFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4D4D4181818 030303000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0D0D0D2C2C2CE6E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 414141000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C0E0E0E1111111414141616161818181A1A1A1C1C1C1D1D1D 1D1D1D1E1E1E1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A181818161616 1414141212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202000000 000000000000000000000000000000000000222222FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF515151000000000000000000000000000000000000 0000000D0D0D141414141414141414141414151515151515151515151515151515151515161616 161616161616161616161616161616171717171717171717171717171717181818181818181818 1818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222222222222222 232323232323232323232323242424242424242424242424252525252525252525252525262626 262626262626272727272727272727272727282828282828282828282828292929292929292929 2929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131313131323232323232 3333333333333333333434343434343434343535353535353A3A3A3E3E3E4242424646464A4A4A 4F4F4F5252525656565A5A5A5D5D5D6060606464646767676A6A6A6D6D6D6F6F6F727272747474 7676767878787A7A7A7B7B7B7E7E7E7E7E7E7F7F7F808080808080818181828282828282838383 838383838383838383838383838383848484848484848484848484848484848484858585858585 858585858585858585868686868686868686868686868686878787878787878787878787878787 8888888888888888888888888888888989898989898989898989898989898A8A8A8A8A8A8A8A8A 8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8B8B8B8C8C8C8C8C8C8C8C8C 8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8B8B8B8C8C8C8B8B8B8C8C8C8C8C8C 8C8C8C8B8B8B8B8B8B8B8B8B8C8C8C8B8B8B8C8C8C8B8B8B8B8B8B8A8A8A8B8B8B8B8B8B8A8A8A 8989898A8A8A898989898989898989888888888888878787878787878787868686858585201E1E 050101050101050101050101020000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 393939FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F 111111000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000B0B0B626262FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6F67C7C7C1B1B1B1515150C0C0C000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000202020D0D0D 161616202020969696FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF2F2F2F000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E1111111515151616161919191A1A1A 1C1C1C1D1D1D1E1E1E1F1F1F1F1F1F2020201F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A 1818181616161414141212120F0F0F0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020000000000000000000000000000000000000000000F0F0FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF272727000000000000000000000000 000000000000000000111111141414141414141414141414151515151515151515151515151515 161616161616161616161616161616161616171717171717171717171717171717171717181818 1818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222222222 222222222222232323232323232323242424242424242424242424252525252525252525252525 262626262626262626262626272727272727272727272727282828282828282828282828292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D 2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131313131323232 3232323232323333333333333434343434343434343535353535353636363636363C3C3C424242 4545454A4A4A4F4F4F5353535656565959595C5C5C6161616363636666666A6A6A6D6D6D6E6E6E 7171717373737676767878787A7A7A7C7C7C7D7D7D7E7E7E7F7F7F808080808080818181828282 838383838383838383838383838383838383848484848484848484848484848484848484858585 858585858585858585858585868686868686868686868686868686878787878787878787878787 8888888888888888888888888888888989898989898989898989898989898A8A8A8A8A8A8A8A8A 8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8B8B8B8B8B8B 8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8E8E8E8D8D8D8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8D8D8D8C8C8C 8C8C8C8B8B8B8C8C8C8B8B8B8C8C8C8B8B8B8A8A8A8989898A8A8A898989898989888888888888 888888211F1F050101050101050101050101020000000000020202030303030303030303020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000999999FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF9A9A9A141414000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000101010646464FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3B2B2B29B9B9B999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 9D9D9DB4B4B4DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF1D1D1D000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090C0C0C0E0E0E111111151515161616 1919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F1F1F1F2020201F1F1F1E1E1E1E1E1E1E1E1E1C1C1C 1C1C1C1A1A1A1818181616161414141212120F0F0F0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202000000000000000000000000000000000000000000000000F9F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA050505000000000000 000000000000000000000000000000141414141414141414141414151515151515151515151515 151515151515161616161616161616161616161616161616171717171717171717171717171717 1818181818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222 222222222222222222232323232323232323232323242424242424242424242424252525252525 252525252525262626262626262626272727272727272727272727282828282828282828282828 2929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030303030313131313131 323232323232323232333333333333343434343434343434353535353535353535363636363636 3B3B3B3F3F3F4242424A4A4A4D4D4D5050505656565858585D5D5D5F5F5F626262666666696969 6B6B6B6E6E6E7171717474747676767777777979797A7A7A7D7D7D7E7E7E7F7F7F808080818181 818181828282838383838383838383838383838383848484848484848484848484848484848484 858585858585858585858585858585868686868686868686868686878787878787878787878787 8787878888888888888888888888888888888989898989898989898989898989898A8A8A8A8A8A 8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C 8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8E8E8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E 8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8D8D8D8C8C8C8C8C8C8A8A8A8A8A8A8B8B8B 8A8A8A8989898989892220200501010501010501010501010401010301011F1D1D3030303D3D3D 3D3D3D3B3B3B3B3B3B3A3A3A3A3A3A393939383838383838373737363636353535343434333333 3232323131313131313030302F2F2F2E2E2E2C2C2C2B2B2B292929282828262626252525232323 2323232020201F1F1F1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919 191919191919191919191919191919191919191919191919181818181818181818181818181818 1717171212120A0A0A020202000000000000000000000000000000000000000000000000000000 000000000000000000000000000000080808FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8C82626260E0E0E000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000808081A1A1A9F9F9FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E111111 1515151616161919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F1F1F1F2020201F1F1F1E1E1E1E1E1E 1E1E1E1C1C1C1C1C1C1A1A1A1818181616161414141212120F0F0F0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202000000000000000000000000000000000000000000000000 E7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4D4D4000000 000000000000000000000000000000000000030303141414141414141414141414151515151515 151515151515151515151515161616161616161616161616161616171717171717171717171717 1717171717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121 212121222222222222222222222222232323232323232323242424242424242424242424252525 252525252525252525262626262626262626262626272727272727272727272727282828282828 2828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131 313131313131323232323232333333333333333333343434343434353535353535353535363636 3636363636363B3B3B3D3D3D4343434949494D4D4D5151515555555757575C5C5C5F5F5F636363 6666666969696B6B6B6E6E6E7070707474747676767878787979797A7A7A7C7C7C7E7E7E7F7F7F 808080818181828282828282838383838383838383838383848484848484848484848484848484 848484858585858585858585858585858585868686868686868686868686878787878787878787 8787878787878888888888888888888888888888888989898989898989898989898989898A8A8A 8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C 8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E 8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8F8F8F8F8F8F8F8F8F8E8E8E8F8F8F 8F8F8F8F8F8F8E8E8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D 8C8C8C8C8C8C8C8C8C8C8C8C8B8B8B222020050101050101050101050101050101050101353333 6363639B9B9B999999989898989898989898979797959595959595959595949494939393939393 9292929090908F8F8F8F8F8F8E8E8E8D8D8D8C8C8C8B8B8B898989878787878787858585848484 8282828080807F7F7F7D7D7D7B7B7B797979777777767676767676757575757575747474737373 7373737272727272727171717171717070706F6F6F6F6F6F6E6E6E6E6E6E6D6D6D6C6C6C6C6C6C 6B6B6B6B6B6B6A6A6A696969696969686868686868676767666666666666656565656565646464 646464636363636363626262626262616161434343111111000000000000000000000000000000 000000000000000000000000000000000000000000000000707070FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEA7A7A73A3A3A171717171717 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 1212121212121212121212121212121212121212121111111616161818182A2A2A878787F5F5F5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 0E0E0E1111111515151616161919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F1F1F1F2020201F1F1F 1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A1818181616161515151212120F0F0F0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303010101000000000000000000000000000000 000000000000D3D3D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ABABAB000000000000000000000000000000000000000000060606141414141414141414141414 151515151515151515151515151515161616161616161616161616161616161616171717171717 1717171717171717171717171818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121222222222222222222222222232323232323232323232323242424242424242424 242424252525252525252525262626262626262626262626272727272727272727272727282828 2828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030 313131313131313131323232323232333333333333333333343434343434343434353535353535 3636363636363636363737373737373E3E3E4343434747474C4C4C5050505353535757575B5B5B 5F5F5F6161616464646969696B6B6B6D6D6D7070707373737575757777777878787B7B7B7C7C7C 7E7E7E7F7F7F808080818181828282828282838383838383838383848484848484848484848484 848484848484858585858585858585858585858585868686868686868686868686878787878787 878787878787878787888888888888888888888888888888898989898989898989898989898989 8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C 8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E 8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F9090909090909090909090909090908F8F8F909090 9090908F8F8F9090909090909090908F8F8F9090908F8F8F8F8F8F9090909090909090908F8F8F 8F8F8F8F8F8F8E8E8E8E8E8E8F8F8F8E8E8E8D8D8D232121050101050101050101050101050101 0501013735356565659B9B9B9A9A9A9A9A9A9A9A9A9A9A9A989898979797989898989898969696 9595959494949393939393939292929090909090908F8F8F8D8D8D8D8D8D8B8B8B8A8A8A898989 8787878585858585858383838181817F7F7F7D7D7D7B7B7B797979777777767676767676757575 7474747474747373737373737272727272727171717070707070706F6F6F6F6F6F6E6E6E6D6D6D 6D6D6D6C6C6C6C6C6C6B6B6B6A6A6A6A6A6A696969696969686868676767676767666666666666 656565656565646464646464636363626262626262616161616161606060414141020202000000 000000000000000000000000000000000000000000000000000000000000090909FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F9DBDBDBC2C2C2BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBDBDBDD4D4D4F2F2F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C0E0E0E1111111515151616161919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F1F1F1F 2020201F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A1818181616161515151212120F0F0F 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303010101000000000000000000 000000000000000000000000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF878787000000000000000000000000000000000000000000090909141414141414 141414151515151515151515151515151515151515161616161616161616161616161616161616 171717171717171717171717171717181818181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 212121212121212121212121222222222222222222222222232323232323232323242424242424 242424242424252525252525252525252525262626262626262626262626272727272727272727 2828282828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030 303030303030313131313131323232323232323232333333333333343434343434343434353535 3535353535353636363636363737373737373737373C3C3C4040404646464B4B4B4E4E4E535353 5656565959595D5D5D6161616464646767676A6A6A6D6D6D707070727272757575777777797979 7B7B7B7B7B7B7E7E7E7F7F7F7F7F7F818181828282828282838383838383848484848484848484 848484848484848484858585858585858585858585858585868686868686868686868686878787 878787878787878787878787888888888888888888888888888888898989898989898989898989 8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C 8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E 8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090909090909090919191 919191909090919191919191909090909090919191919191909090919191919191919191909090 9191919090909090909090909090908F8F8F8E8E8E8F8F8F8F8F8F242222050101050101050101 0501010501010501013A38386868689D9D9D9D9D9D9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A9A9A9A 9898989898989797979696969595959595959494949292929292929191918F8F8F8E8E8E8D8D8D 8C8C8C8A8A8A8989898888888686868484848383838181817F7F7F7D7D7D7B7B7B797979777777 7676767575757575757474747474747373737373737272727171717171717070707070706F6F6F 6E6E6E6E6E6E6D6D6D6D6D6D6C6C6C6B6B6B6B6B6B6A6A6A6A6A6A696969686868686868676767 666666666666656565656565646464646464636363636363626262626262616161616161606060 525252030303000000000000000000000000000000000000000000000000000000000000000000 A9A9A9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090C0C0C0E0E0E1111111515151616161919191A1A1A1C1C1C1D1D1D1E1E1E 1F1F1F1F1F1F2020201F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A181818161616151515 1212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303010101000000 000000000000000000000000000000000000ACACACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF6464640000000000000000000000000000000000000000000C0C0C 141414141414141414151515151515151515151515151515161616161616161616161616161616 161616171717171717171717171717171717171717181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020202020212121212121212121222222222222222222222222232323232323232323232323 242424242424242424242424252525252525252525262626262626262626262626272727272727 2727272727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F 2F2F2F303030303030313131313131313131323232323232333333333333333333343434343434 3535353535353535353636363636363737373737373737373838383C3C3C3E3E3E4444444A4A4A 4D4D4D5151515454545959595C5C5C5F5F5F6464646666666969696C6C6C6F6F6F727272747474 7676767878787A7A7A7C7C7C7D7D7D7E7E7E7F7F7F818181818181828282838383848484848484 848484848484848484848484858585858585858585858585858585868686868686868686868686 878787878787878787878787878787888888888888888888888888888888898989898989898989 8989898A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C 8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E 8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090909090909090919191 919191919191919191919191929292929292929292929292919191929292929292929292929292 929292919191929292919191919191919191909090909090919191909090909090242222050101 0501010501010501010501010501013B39396969699E9E9E9E9E9E9D9D9D9C9C9C9C9C9C9C9C9C 9C9C9C9B9B9B9A9A9A999999989898989898979797969696959595949494939393939393919191 9090908F8F8F8E8E8E8D8D8D8B8B8B8989898787878787878484848484848181817F7F7F7D7D7D 7B7B7B797979767676767676757575757575747474747474737373727272727272717171717171 7070706F6F6F6F6F6F6E6E6E6E6E6E6D6D6D6C6C6C6C6C6C6B6B6B6B6B6B6A6A6A696969696969 686868676767676767666666666666656565656565646464646464636363626262626262616161 616161606060606060474747000000000000000000000000000000000000000000000000000000 0000000000003A3A3AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF C3C3C3000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090C0C0C0E0E0E1111111515151616161919191A1A1A1C1C1C 1D1D1D1E1E1E1F1F1F1F1F1F2020201F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A181818 1616161515151212120F0F0F0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 010101000000000000000000000000000000000000000000919191FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000000000000000000000 000000101010141414141414151515151515151515151515151515151515161616161616161616 161616161616161616171717171717171717171717171717181818181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F 202020202020202020212121212121212121212121222222222222222222222222232323232323 232323242424242424242424242424252525252525252525252525262626262626262626262626 2727272727272727272828282828282828282828282929292929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F 2F2F2F2F2F2F303030303030313131313131313131323232323232323232333333333333343434 3434343434343535353535353636363636363636363737373737373838383838383838383F3F3F 4242424747474C4C4C5050505454545757575B5B5B5F5F5F6262626767676969696B6B6B6F6F6F 7171717373737676767878787A7A7A7C7C7C7E7E7E7E7E7E7F7F7F818181828282828282838383 848484848484848484848484848484858585858585858585858585858585868686868686868686 868686878787878787878787878787878787888888888888888888888888898989898989898989 8989898989898A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C 8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E 8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090909090919191 919191919191919191919191919191929292929292929292929292929292929292929292939393 939393939393939393929292929292929292929292929292919191929292919191919191929292 2523230501010501010501010501010501010501013C3A3A6B6B6B9F9F9F9F9F9F9F9F9F9E9E9E 9E9E9E9D9D9D9D9D9D9C9C9C9C9C9C9A9A9A9A9A9A9A9A9A989898989898979797959595949494 9494949393939393939191919090908E8E8E8D8D8D8B8B8B8A8A8A888888878787858585848484 8181817F7F7F7D7D7D7B7B7B797979767676767676757575757575747474737373737373727272 7272727171717070707070706F6F6F6F6F6F6E6E6E6D6D6D6D6D6D6C6C6C6C6C6C6B6B6B6A6A6A 6A6A6A696969686868686868676767666666666666656565656565646464646464636363636363 6262626262626161616060606060605F5F5F1F1F1F010101000000000000000000000000000000 000000000000000000000000040404FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDB8686865252523B3B3B393939393939393939 393939393939393939393939393939393939393939393939393939393939393939393939393939 393939393939393939393939393939393939393939393939393939393939393939393939393939 3939393B3B3B4D4D4D7C7C7CD0D0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB1B1B1000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090C0C0C101010131313151515161616181818 1A1A1A1C1C1C1D1D1D1E1E1E1F1F1F1F1F1F2020201F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C 1A1A1A1818181616161515151212120F0F0F0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303020202000000000000000000000000000000000000000000767676FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000 000000000000000000121212141414141414151515151515151515151515151515151515161616 161616161616161616161616171717171717171717171717171717171717181818181818181818 1818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F202020202020202020202020212121212121212121212121222222222222222222232323 232323232323232323242424242424242424242424252525252525252525262626262626262626 2626262727272727272727272727272828282828282828282828282929292929292929292A2A2A 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232323232333333333333 343434343434343434353535353535353535363636363636373737373737373737383838383838 3939393D3D3D4242424747474B4B4B4F4F4F5252525656565B5B5B5E5E5E626262666666686868 6C6C6C6E6E6E7171717474747575757878787A7A7A7B7B7B7D7D7D7E7E7E7F7F7F818181828282 828282848484848484848484848484848484858585858585858585858585858585868686868686 868686868686878787878787878787878787878787888888888888888888888888898989898989 8989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B 8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E 8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090909090909090 919191919191919191929292929292919191929292929292929292929292929292929292939393 939393939393939393939393939393939393939393929292939393939393939393939393939393 9292929292922523230501010501010501010501010501010501013E3C3C6E6E6EA1A1A1A1A1A1 A0A0A0A0A0A09F9F9F9F9F9F9E9E9E9E9E9E9D9D9D9C9C9C9C9C9C9B9B9B9B9B9B9A9A9A979797 9797979595959595959595959494949393939191919090908E8E8E8D8D8D8C8C8C8A8A8A888888 8787878585858585858181818080807D7D7D7A7A7A797979767676767676757575747474747474 7373737373737272727171717171717070707070706F6F6F6E6E6E6E6E6E6D6D6D6D6D6D6C6C6C 6B6B6B6B6B6B6A6A6A696969696969686868676767676767666666666666656565656565646464 636363636363626262626262616161616161606060606060474747010101000000000000000000 000000000000000000000000000000000000000000CBCBCBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D83B3B3B161616030303000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000101011515152C2C2CC7C7C7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF9F9F9F000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090C0C0C101010131313151515 1616161818181A1A1A1C1C1C1D1D1D1E1E1E1F1F1F1F1F1F2020201F1F1F1E1E1E1E1E1E1E1E1E 1C1C1C1C1C1C1A1A1A1818181616161515151212120F0F0F0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 0202020202020303030303030202020000000000000000000000000000000000000000005B5B5B FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8030303000000000000 000000000000000000000000010101141414141414141414151515151515151515151515151515 161616161616161616161616161616161616171717171717171717171717171717171717181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222 222222232323232323232323242424242424242424242424252525252525252525252525262626 262626262626262626272727272727272727282828282828282828282828292929292929292929 2929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D 2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131313131323232323232333333 333333333333343434343434353535353535353535363636363636373737373737373737383838 3838383838383939393D3D3D4242424545454949494E4E4E5252525656565B5B5B5E5E5E616161 6464646767676B6B6B6D6D6D7171717474747676767878787A7A7A7B7B7B7D7D7D7E7E7E808080 818181828282838383848484848484848484848484858585858585858585858585858585868686 868686868686868686878787878787878787878787878787888888888888888888888888898989 8989898989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B 8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E 8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090909090 919191919191919191919191929292929292929292929292929292929292929292929292939393 939393939393939393939393939393949494949494949494949494959595949494949494939393 9393939494949494949393932624240501010501010501010501010501010501013F3D3D6F6F6F A2A2A2A2A2A2A1A1A1A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9E9E9E9D9D9D9C9C9C9C9C9C9C9C9C 9A9A9A9A9A9A9898989898989898989696969494949494949393939191919090908F8F8F8E8E8E 8C8C8C8B8B8B8989898787878585858484848181817F7F7F7D7D7D7A7A7A797979767676767676 7575757474747474747373737272727272727171717171717070706F6F6F6F6F6F6E6E6E6D6D6D 6D6D6D6C6C6C6C6C6C6B6B6B6A6A6A6A6A6A696969686868686868676767666666666666656565 6565656464646464646363636363636262626161616161616060606060605E5E5E040404000000 000000000000000000000000000000000000000000000000010101939393FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFACACAC151515000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000001313138D8D8DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D8D8D000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C101010 1313131515151616161919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F1F1F1F2020201F1F1F1E1E1E 1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A1818181717171515151212120F0F0F0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303020202000000000000000000000000000000000000 0000003F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7000000 000000000000000000000000000000000000040404141414141414151515151515151515151515 151515151515161616161616161616161616161616161616171717171717171717171717171717 1818181818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222 222222222222232323232323232323232323242424242424242424242424252525252525252525 262626262626262626262626272727272727272727272727282828282828282828282828292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D 2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232 323232333333333333343434343434343434353535353535363636363636363636373737373737 3838383838383838383939393939393939393E3E3E4343434848484D4D4D505050565656595959 5D5D5D5F5F5F6363636666666B6B6B6D6D6D7070707373737575757777777979797B7B7B7C7C7C 7E7E7E808080818181828282828282838383838383848484848484858585858585858585858585 868686868686868686868686868686878787878787878787878787888888888888888888888888 8989898989898989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B 8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E 8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090909090 909090919191919191919191919191919191929292929292929292929292929292929292939393 939393939393939393939393939393949494949494949494949494949494949494959595959595 959595959595959595969696969696959595262424050101050101050101050101050101050101 413F3F717171A3A3A3A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A09F9F9F9E9E9E9E9E9E 9D9D9D9D9D9D9C9C9C9B9B9B999999999999979797979797969696969696959595939393919191 9191918F8F8F8F8F8F8D8D8D8B8B8B8989898787878585858484848282827F7F7F7E7E7E7B7B7B 7979797676767575757575757474747373737373737272727272727171717070707070706F6F6F 6E6E6E6E6E6E6D6D6D6D6D6D6C6C6C6B6B6B6B6B6B6A6A6A696969696969686868676767676767 6666666666666565656464646464646363636363636262626262626161616161616060605F5F5F 0D0D0D0000000000000000000000000000000000000000000000000000000000006D6D6DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C0131313000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 1111119D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D7D7D000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0E0E0E1010101313131515151818181919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F1F1F1F202020 1F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A1818181717171515151212120F0F0F0A0A0A 070707020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303020202000000000000000000000000 000000000000000000242424FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF B5B5B5000000000000000000000000000000000000000000060606141414141414151515151515 151515151515151515151515161616161616161616161616161616171717171717171717171717 1717171717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121 222222222222222222222222232323232323232323232323242424242424242424252525252525 252525252525262626262626262626262626272727272727272727282828282828282828282828 2929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131313131 323232323232333333333333333333343434343434353535353535353535363636363636373737 3737373737373838383838383939393939393939393A3A3A3E3E3E4444444848484C4C4C4F4F4F 5454545858585C5C5C5F5F5F6363636767676A6A6A6D6D6D6F6F6F737373757575767676787878 7A7A7A7D7D7D7E7E7E7F7F7F818181828282828282848484838383848484858585858585858585 858585868686868686868686868686868686878787878787878787878787888888888888888888 8888888888888989898989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B 8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E 8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090 909090919191919191919191919191919191919191929292929292929292929292929292939393 939393939393939393939393939393949494949494949494949494949494959595959595959595 959595959595969696969696969696979797969696969696262424050101050101050101050101 050101050101424040727272A4A4A4A3A3A3A3A3A3A3A3A3A1A1A1A2A2A2A2A2A2A1A1A1A0A0A0 9F9F9F9F9F9F9E9E9E9E9E9E9D9D9D9C9C9C9B9B9B9A9A9A999999989898989898979797959595 9595959393939191919090908F8F8F8F8F8F8D8D8D8B8B8B898989878787858585848484828282 7F7F7F7E7E7E7C7C7C797979787878757575747474747474737373737373727272717171717171 7070706F6F6F6F6F6F6E6E6E6E6E6E6D6D6D6C6C6C6C6C6C6B6B6B6A6A6A6A6A6A696969686868 686868676767666666666666656565656565646464646464636363626262626262616161616161 606060606060141414000000000000000000000000000000000000000000000000000000000000 494949FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F51B1B1B000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000151515E3E3E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E6E6E000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060C0C0C0E0E0E1010101313131616161818181919191B1B1B1C1C1C1D1D1D1E1E1E1F1F1F 1F1F1F2020201F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A181818171717151515121212 0F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303000000000000 000000000000000000000000000000080808FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF969696000000000000000000000000000000000000000000090909141414141414 151515151515151515151515151515161616161616161616161616161616161616171717171717 1717171717171717171717171818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121 212121212121222222222222222222232323232323232323232323242424242424242424242424 252525252525252525262626262626262626262626272727272727272727272727282828282828 2828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131 313131323232323232323232333333333333343434343434343434353535353535363636363636 3636363737373737373838383838383838383939393939393A3A3A3A3A3A3E3E3E434343464646 4A4A4A4F4F4F5353535858585B5B5B5E5E5E6262626565656A6A6A6C6C6C6F6F6F727272747474 7676767979797A7A7A7D7D7D7E7E7E7E7E7E808080828282838383848484848484858585858585 858585858585868686868686868686868686868686878787878787878787878787888888888888 8888888888888888888989898989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B 8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090 909090909090919191919191919191919191919191929292929292929292929292929292929292 939393939393939393939393939393949494949494949494949494949494959595959595959595 959595959595969696969696969696969696969696979797979797979797272525050101050101 050101050101050101050101434141747474A5A5A5A5A5A5A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3 A2A2A2A2A2A2A1A1A1A0A0A0A0A0A09F9F9F9E9E9E9E9E9E9D9D9D9C9C9C9B9B9B9A9A9A999999 9898989797979696969494949494949292929191918F8F8F8E8E8E8D8D8D8A8A8A898989878787 8686868383838383838080807E7E7E7D7D7D7B7B7B777777767676747474747474737373727272 7272727171717070707070706F6F6F6E6E6E6E6E6E6D6D6D6D6D6D6C6C6C6B6B6B6B6B6B6A6A6A 696969696969686868676767676767666666656565656565646464646464636363636363626262 626262616161606060606060151515000000000000000000000000000000000000000000000000 000000000000393939FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF808080080808 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF636363 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010909090C0C0C0E0E0E1111111414141616161818181A1A1A1B1B1B1C1C1C1D1D1D 1E1E1E1F1F1F1F1F1F2020201F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A181818171717 1515151212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 000000000000000000000000000000000000000000000000ECECECFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF7A7A7A0000000000000000000000000000000000000000000B0B0B 141414151515151515151515151515151515151515161616161616161616161616161616161616 171717171717171717171717171717181818181818181818181818181818191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121222222222222222222222222232323232323232323232323242424242424 242424252525252525252525252525262626262626262626262626272727272727272727282828 2828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030 313131313131323232323232323232333333333333343434343434343434353535353535363636 3636363636363737373737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B 4040404444444949494D4D4D5252525757575A5A5A5E5E5E6161616565656868686B6B6B6F6F6F 7171717373737676767878787A7A7A7D7D7D7D7D7D7F7F7F808080828282838383838383848484 858585858585858585858585868686868686868686868686878787878787878787878787888888 8888888888888888888888888989898989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8A8A8A 8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D 8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090 909090909090919191919191919191919191919191919191929292929292929292929292929292 939393939393939393939393939393939393949494949494949494949494959595959595959595 959595959595969696969696969696969696969696979797979797979797979797979797272525 050101050101050101050101050101050101444242757575A6A6A6A5A5A5A5A5A5A4A4A4A4A4A4 A4A4A4A3A3A3A3A3A3A3A3A3A1A1A1A1A1A1A0A0A0A1A1A1A0A0A09E9E9E9E9E9E9D9D9D9D9D9D 9B9B9B9B9B9B9999999898989797979696969595959494949292929191919090908D8D8D8D8D8D 8A8A8A8989898787878686868383838383838181817E7E7E7C7C7C7B7B7B787878777777747474 7373737373737272727171717171717070706F6F6F6F6F6F6E6E6E6D6D6D6D6D6D6C6C6C6B6B6B 6B6B6B6A6A6A696969696969686868676767676767666666666666656565656565646464636363 636363626262626262616161616161606060151515000000000000000000000000000000000000 0000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 222222000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000181818FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF575757000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090C0C0C0E0E0E1111111414141616161818181A1A1A1B1B1B 1C1C1C1D1D1D1E1E1E1F1F1F1F1F1F2020201F1F1F1E1E1E1E1E1E1E1E1E1C1C1C1C1C1C1A1A1A 1818181717171515151212120F0F0F0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303000000000000000000000000000000000000000000000000D0D0D0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D5D5D000000000000000000000000000000000000 0000000E0E0E141414151515151515151515151515151515151515161616161616161616161616 161616171717171717171717171717171717171717181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020212121212121212121212121222222222222222222222222232323232323232323242424 242424242424242424252525252525252525252525262626262626262626272727272727272727 2727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030 303030313131313131313131323232323232333333333333333333343434343434353535353535 3535353636363636363737373737373737373838383838383939393939393939393A3A3A3A3A3A 3A3A3A3B3B3B3F3F3F4141414747474C4C4C5151515555555959595C5C5C5F5F5F646464686868 6A6A6A6D6D6D7070707373737575757777777979797B7B7B7D7D7D7F7F7F808080818181838383 838383838383858585858585858585868686868686868686868686878787878787878787878787 8787878888888888888888888888888989898989898989898989898A8A8A8A8A8A8A8A8A8A8A8A 8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090909090 909090909090909090919191919191919191919191919191929292929292929292929292929292 939393939393939393939393939393939393949494949494949494949494949494959595959595 959595959595969696969696969696969696969696979797979797979797979797979797989898 989898272525050101050101050101050101050101050101454343767676A6A6A6A6A6A6A6A6A6 A5A5A5A5A5A5A4A4A4A5A5A5A4A4A4A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A0A0A0A0A0A09E9E9E 9E9E9E9D9D9D9D9D9D9B9B9B9A9A9A9A9A9A989898979797979797959595949494939393919191 9090908E8E8E8D8D8D8B8B8B8A8A8A8888888686868484848383838080807E7E7E7C7C7C7B7B7B 7878787676767474747373737272727272727171717070707070706F6F6F6E6E6E6E6E6E6D6D6D 6C6C6C6C6C6C6B6B6B6A6A6A6A6A6A696969686868686868676767666666666666656565656565 646464646464636363636363626262616161616161606060151515000000000000000000000000 0000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEFEFEF171717000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000151515CDCDCDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 A9A9A97676764A4A4A3535352F2F2F2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D3131313B3B3B555555878787BCBCBCF6F6F6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF4C4C4C000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090C0C0C101010111111141414161616181818 1A1A1A1C1C1C1D1D1D1D1D1D1E1E1E1F1F1F1F1F1F2020201F1F1F1E1E1E1E1E1E1E1E1E1C1C1C 1C1C1C1A1A1A1818181717171515151212120F0F0F0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303010101000000000000000000000000000000000000000000B5B5B5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF414141000000000000000000000000 000000000000000000101010141414151515151515151515151515151515161616161616161616 161616161616161616171717171717171717171717171717171717181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121212121222222222222222222232323232323232323 232323242424242424242424242424252525252525252525262626262626262626262626272727 2727272727272727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 303030303030303030313131313131323232323232323232333333333333343434343434343434 3535353535353636363636363636363737373737373838383838383838383939393939393A3A3A 3A3A3A3A3A3A3B3B3B3B3B3B4040404141414545454B4B4B5050505454545858585B5B5B606060 6363636666666A6A6A6C6C6C7070707373737575757777777979797C7C7C7D7D7D7E7E7E808080 818181828282838383838383858585858585868686868686868686868686878787878787878787 8787878787878888888888888888888888888989898989898989898989898A8A8A8A8A8A8A8A8A 8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D 8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090 909090909090909090909090919191919191919191919191919191929292929292929292929292 929292939393939393939393939393939393949494949494949494949494949494959595959595 959595959595969696969696969696969696969696979797979797979797979797979797989898 989898989898989898272525050101050101050101050101050101050101454343777777A7A7A7 A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A2A2A2 A0A0A0A0A0A09F9F9F9F9F9F9E9E9E9D9D9D9C9C9C9B9B9B999999999999989898979797969696 9595959393939191919090908E8E8E8D8D8D8C8C8C898989898989868686848484838383818181 7F7F7F7D7D7D7B7B7B7A7A7A7676767575757373737272727171717171717070706F6F6F6F6F6F 6E6E6E6D6D6D6D6D6D6C6C6C6B6B6B6B6B6B6A6A6A696969696969686868676767676767666666 666666656565646464646464636363636363626262626262616161606060151515000000000000 0000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD5D5D5161616000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000B0B0B B1B1B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED8A8A8A 2121210E0E0E0D0D0D000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000303031111110C0C0C404040AFAFAF FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090C0C0C101010111111131313 1616161919191A1A1A1C1C1C1C1C1C1D1D1D1F1F1F1F1F1F2020202020202020201F1F1F1F1F1F 1E1E1E1C1C1C1C1C1C1A1A1A1818181717171515151212120F0F0F0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303010101000000000000000000000000000000000000 000000999999FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF242424000000000000 000000000000000000000000000000121212141414151515151515151515151515151515161616 161616161616161616161616161616171717171717171717171717171717181818181818181818 1818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 1F1F1F202020202020202020202020212121212121212121222222222222222222222222232323 232323232323242424242424242424242424252525252525252525252525262626262626262626 2727272727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E 2F2F2F2F2F2F303030303030313131313131313131323232323232333333333333333333343434 343434353535353535353535363636363636373737373737373737383838383838393939393939 3939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C4040404646464949494E4E4E545454575757 5B5B5B5F5F5F6262626666666969696D6D6D6F6F6F7272727474747777777979797B7B7B7D7D7D 7E7E7E808080818181838383838383848484858585868686868686868686868686868686878787 8787878787878787878888888888888888888888888989898989898989898989898989898A8A8A 8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D 8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 909090909090909090909090909090919191919191919191919191919191929292929292929292 929292929292939393939393939393939393939393949494949494949494949494959595959595 959595959595959595969696969696969696969696979797979797979797979797979797989898 989898989898999999999999999999272525050101050101050101050101050101050101464444 777777A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A5A5A5A6A6A6A5A5A5A4A4A4A5A5A5A4A4A4 A3A3A3A2A2A2A1A1A1A1A1A1A1A1A19F9F9F9F9F9F9E9E9E9D9D9D9C9C9C9B9B9B9A9A9A999999 9898989797979696969494949393939292929191918E8E8E8D8D8D8C8C8C8A8A8A878787878787 8585858383838282828080807D7D7D7B7B7B797979797979767676747474727272717171707070 7070706F6F6F6E6E6E6E6E6E6D6D6D6C6C6C6C6C6C6B6B6B6A6A6A6A6A6A696969686868686868 676767666666666666656565656565646464636363636363626262626262616161616161151515 0000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000000000000000000000 000000020202020202020202020202020202020202020202020202020202010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F16E6E6E 0E0E0E080808000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000E0E0E1A1A1AA4A4A4FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C101010 1111111313131515151919191B1B1B1C1C1C1C1C1C1D1D1D1F1F1F202020202020212121202020 1F1F1F1F1F1F1E1E1E1C1C1C1C1C1C1A1A1A1919191717171515151212120F0F0F0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303010101000000000000000000000000 0000000000000000007E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE090909 000000000000000000000000000000000000000000141414151515151515151515151515151515 151515161616161616161616161616161616171717171717171717171717171717171717181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222 232323232323232323232323242424242424242424242424252525252525252525262626262626 262626262626272727272727272727272727282828282828282828292929292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E 2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232323232333333333333 343434343434343434353535353535363636363636363636373737373737383838383838383838 3939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C4545454848484E4E4E 5353535656565A5A5A5E5E5E6262626666666868686C6C6C6F6F6F727272757575777777797979 7A7A7A7C7C7C7E7E7E808080828282838383838383848484848484868686868686868686868686 878787878787878787878787888888888888888888888888898989898989898989898989898989 8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C 8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F909090909090909090909090919191919191919191919191919191929292929292929292 929292929292939393939393939393939393939393939393949494949494949494949494959595 959595959595959595969696969696969696969696979797979797979797979797979797989898 9898989898989898989898989999999999999A9A9A272525050101050101050101050101050101 050101464444787878A7A7A7A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A5A5A5A6A6A6A6A6A6 A5A5A5A5A5A5A4A4A4A4A4A4A2A2A2A2A2A2A1A1A1A1A1A19F9F9F9F9F9F9F9F9F9E9E9E9D9D9D 9B9B9B9A9A9A9999999898989797979696969494949393939292929090908F8F8F8D8D8D8B8B8B 8A8A8A8888888787878585858383838282828080807D7D7D7B7B7B7A7A7A787878767676747474 7171717171717070706F6F6F6F6F6F6E6E6E6D6D6D6D6D6D6C6C6C6B6B6B6B6B6B6A6A6A696969 686868686868676767676767666666656565656565646464646464636363626262626262616161 6161611515150000000000000000000000000000000000000000000000000000000000002F2F2F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000000000 000000000000000000020202020202020202020202020202020202020202020202020202010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0B0 131313080808000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000B0B0B323232DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2A2A2A000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C1010101111111313131515151919191B1B1B1C1C1C1C1C1C1D1D1D1F1F1F202020202020 2121212020201F1F1F1F1F1F1E1E1E1C1C1C1C1C1C1A1A1A1919191717171515151212120F0F0F 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303020202000000000000 000000000000000000000000000000616161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EBEBEB000000000000000000000000000000000000000000030303141414151515151515151515 151515151515161616161616161616161616161616161616171717171717171717171717171717 1717171818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222 222222222222232323232323232323232323242424242424242424252525252525252525252525 262626262626262626262626272727272727272727282828282828282828282828292929292929 2929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232323232333333 333333333333343434343434353535353535353535363636363636373737373737373737383838 3838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D424242 4747474C4C4C5151515555555A5A5A5E5E5E6262626565656868686B6B6B6E6E6E717171737373 7676767979797A7A7A7C7C7C7E7E7E808080818181828282838383858585848484858585868686 868686878787878787878787878787888888888888888888888888888888898989898989898989 8989898A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C 8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F909090909090909090909090919191919191919191919191919191929292929292 929292929292929292939393939393939393939393939393949494949494949494949494959595 959595959595959595969696969696969696969696969696979797979797979797979797989898 989898989898989898989898999999999999999999999999999999272525050101050101050101 050101050101050101464444787878A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A6A6A6A7A7A7 A6A6A6A6A6A6A6A6A6A4A4A4A5A5A5A4A4A4A4A4A4A2A2A2A2A2A2A1A1A1A1A1A1A0A0A0A0A0A0 9F9F9F9D9D9D9D9D9D9C9C9C999999999999989898979797969696949494939393929292909090 8E8E8E8E8E8E8C8C8C8A8A8A8888888686868585858484848181818080807D7D7D7C7C7C7A7A7A 7878787575757474747171717070707070706F6F6F6E6E6E6D6D6D6D6D6D6C6C6C6B6B6B6B6B6B 6A6A6A696969696969686868676767676767666666666666656565646464646464636363636363 626262616161616161151515000000000000000000000000000000000000000000000000000000 0000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000 000000000000000000000000000000020202020202020202020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC 6868680E0E0E000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000101010E0E0EB3B3B3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C1010101111111313131515151919191B1B1B1C1C1C1C1C1C1D1D1D1F1F1F 2020202020202121212020201F1F1F1F1F1F1E1E1E1C1C1C1C1C1C1A1A1A191919171717151515 1212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303020202 0000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD2D2D2000000000000000000000000000000000000000000050505141414151515 151515151515151515151515161616161616161616161616161616161616171717171717171717 1717171717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121 222222222222222222222222232323232323232323242424242424242424242424252525252525 252525252525262626262626262626272727272727272727272727282828282828282828292929 2929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D 2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131323232323232 323232333333333333343434343434343434353535353535363636363636363636373737373737 3838383838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C 3D3D3D4141414747474C4C4C5050505656565959595E5E5E6161616464646767676B6B6B6F6F6F 7070707373737676767878787A7A7A7C7C7C7E7E7E7F7F7F808080828282838383848484848484 868686868686878787878787878787878787878787888888888888888888888888898989898989 8989898989898A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C 8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F 8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191919191919191919191929292 929292929292929292929292939393939393939393939393939393949494949494949494949494 959595959595959595959595969696969696969696969696979797979797979797979797989898 9898989898989898989898989999999999999999999999999A9A9A9A9A9A9A9A9A272525050101 050101050101050101050101050101464444787878A9A9A9A9A9A9A8A8A8A8A8A8A9A9A9A7A7A7 A8A8A8A7A7A7A7A7A7A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A3A3A3A3A3A3A1A1A1 A1A1A1A0A0A09F9F9F9F9F9F9E9E9E9D9D9D9B9B9B9A9A9A999999989898979797959595949494 9393939191919090908F8F8F8C8C8C8C8C8C8A8A8A888888878787858585848484818181808080 7F7F7F7C7C7C7A7A7A7777777575757373737070707070706F6F6F6E6E6E6E6E6E6D6D6D6C6C6C 6C6C6C6B6B6B6A6A6A6A6A6A696969686868686868676767666666666666656565656565646464 636363636363626262626262616161151515000000000000000000000000000000000000000000 0000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414 000000000000000000000000000000000000000000020202020202020202020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F9F9F94A4A4A0D0D0D000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000080808 999999FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 121212000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C1010101111111313131515151919191B1B1B1C1C1C1C1C1C 1D1D1D1F1F1F2020202020202121212020201F1F1F1F1F1F1E1E1E1C1C1C1C1C1C1A1A1A191919 1717171515151212120F0F0F0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 0303030202020000000000000000000000000000000000000000001A1A1AFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFBDBDBD000000000000000000000000000000000000000000070707 151515151515151515151515151515151515161616161616161616161616161616171717171717 1717171717171717171717171818181818181818181818181818181919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121 212121212121222222222222222222232323232323232323232323242424242424242424242424 252525252525252525262626262626262626262626272727272727272727282828282828282828 2828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131 323232323232333333333333333333343434343434353535353535353535363636363636373737 3737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C 3C3C3C3D3D3D3D3D3D4141414646464B4B4B5151515454545858585D5D5D606060646464676767 6A6A6A6E6E6E7070707373737575757777777A7A7A7B7B7B7E7E7E7F7F7F808080818181838383 848484848484868686868686878787878787878787878787888888888888888888888888898989 8989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C 8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F 8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191919191919191919191 929292929292929292929292929292939393939393939393939393939393949494949494949494 949494959595959595959595959595969696969696969696969696979797979797979797979797 9898989898989898989898989999999999999999999999999999999A9A9A9A9A9A9A9A9A9A9A9A 282626050101050101050101050101050101050101464444787878A9A9A9A9A9A9A9A9A9A9A9A9 A8A8A8A8A8A8A9A9A9A7A7A7A8A8A8A6A6A6A7A7A7A7A7A7A6A6A6A5A5A5A4A4A4A5A5A5A4A4A4 A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A0A0A09F9F9F9D9D9D9D9D9D9C9C9C9B9B9B9A9A9A989898 9898989696969494949494949292929090908F8F8F8E8E8E8C8C8C8A8A8A898989878787868686 8383838181818080807E7E7E7B7B7B7B7B7B7979797676767474747272726F6F6F6F6F6F6E6E6E 6D6D6D6D6D6D6C6C6C6B6B6B6B6B6B6A6A6A696969686868686868676767666666666666656565 656565646464646464636363626262626262616161151515000000000000000000000000000000 0000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF C9C9C9141414000000000000000000000000000000000000000000020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000050505A4A4A4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFD4B4B4B0A0A0A000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000060606A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF070707000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C1010101111111313131515151919191B1B1B 1C1C1C1C1C1C1D1D1D1F1F1F2020202020202121212020201F1F1F1F1F1F1E1E1E1C1C1C1C1C1C 1A1A1A1919191717171515151212120F0F0F0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303000000000000000000000000000000000000000000010101F4F4F4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7A7A7000000000000000000000000000000000000 000000090909151515151515151515151515151515151515161616161616161616161616161616 171717171717171717171717171717171717181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121222222222222222222222222232323232323232323232323242424242424 242424252525252525252525252525262626262626262626272727272727272727272727282828 2828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131 313131323232323232323232333333333333343434343434343434353535353535363636363636 3636363737373737373838383838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B 3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D4242424646464B4B4B5050505353535757575C5C5C606060 6464646666666A6A6A6D6D6D6F6F6F7373737575757777777979797B7B7B7D7D7D7F7F7F818181 818181828282848484858585868686878787878787878787878787888888888888888888888888 8989898989898989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B 8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E 8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191919191919191 919191929292929292929292929292929292939393939393939393939393949494949494949494 949494959595959595959595959595969696969696969696969696979797979797979797979797 9898989898989898989898989999999999999999999999999999999A9A9A9A9A9A9A9A9A9A9A9A 9B9B9B9B9B9B282626050101050101050101050101050101050101464444787878A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6 A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A2A2A2A2A2A2A0A0A09F9F9F9F9F9F9E9E9E9D9D9D9C9C9C 9A9A9A9A9A9A9999999797979696969595959393939393939090908F8F8F8D8D8D8C8C8C8B8B8B 8A8A8A8787878585858484848282827F7F7F7E7E7E7D7D7D7A7A7A797979767676737373727272 7171716E6E6E6D6D6D6D6D6D6C6C6C6B6B6B6B6B6B6A6A6A696969696969686868676767676767 666666656565656565646464646464636363636363626262616161151515000000000000000000 0000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFC9C9C9141414000000000000000000000000000000000000000000020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000050505A4A4A4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF7171710C0C0C000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000050505C7C7C7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFB000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090C0C0C101010111111131313151515 1919191B1B1B1C1C1C1C1C1C1D1D1D1F1F1F2020202020202121212020201F1F1F1F1F1F1E1E1E 1C1C1C1C1C1C1A1A1A1919191717171515151212120F0F0F0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303000000000000000000000000000000000000000000 000000D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF919191000000000000000000000000 0000000000000000000A0A0A151515151515151515151515151515161616161616161616161616 161616161616171717171717171717171717171717181818181818181818181818181818191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020212121212121212121212121222222222222222222222222232323232323232323242424 242424242424242424252525252525252525262626262626262626262626272727272727272727 2727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030 303030313131313131323232323232333333333333333333343434343434353535353535353535 3636363636363737373737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B 3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E4242424343434A4A4A4F4F4F535353575757 5B5B5B5F5F5F6363636666666969696C6C6C6F6F6F7272727474747777777979797B7B7B7D7D7D 7F7F7F808080818181838383848484858585868686878787878787878787878787888888888888 8888888888888989898989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B 8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E 8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191919191 919191919191929292929292929292929292939393939393939393939393939393949494949494 949494949494959595959595959595959595969696969696969696969696979797979797979797 9797979898989898989898989898989999999999999999999999999A9A9A9A9A9A9A9A9A9A9A9A 9B9B9B9B9B9B9B9B9B9B9B9B282626050101050101050101050101050101050101464444787878 AAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7 A7A7A7A6A6A6A5A5A5A6A6A6A4A4A4A4A4A4A3A3A3A4A4A4A2A2A2A2A2A2A1A1A19F9F9F9F9F9F 9D9D9D9D9D9D9C9C9C9A9A9A9999999999999898989696969595959494949292929191918F8F8F 8D8D8D8C8C8C8B8B8B8989898888888686868383838383838080807F7F7F7D7D7D7A7A7A787878 7676767575757272727070706E6E6E6D6D6D6C6C6C6C6C6C6B6B6B6A6A6A6A6A6A696969686868 676767676767666666666666656565646464646464636363636363626262616161151515000000 0000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000000000000000000000000000 020202020202020202020202020202020202020202020202020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFBBBBBB0E0E0E000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000A0A0AF1F1F1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C101010111111 1313131515151919191B1B1B1C1C1C1C1C1C1D1D1D1F1F1F2020202020202121212020201F1F1F 1F1F1F1E1E1E1C1C1C1C1C1C1A1A1A1919191717171515151212120F0F0F0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303010101000000000000000000000000 000000000000000000AEAEAEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C7C7C000000000000 0000000000000000000000000000000C0C0C151515151515151515151515151515161616161616 161616161616161616161616171717171717171717171717171717181818181818181818181818 1818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F 202020202020202020212121212121212121212121222222222222222222232323232323232323 232323242424242424242424252525252525252525252525262626262626262626262626272727 2727272727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F 303030303030313131313131313131323232323232333333333333343434343434343434353535 3535353636363636363636363737373737373838383838383838383939393939393A3A3A3A3A3A 3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E4444444A4A4A4F4F4F 5252525656565C5C5C5F5F5F6262626666666969696C6C6C6F6F6F707070747474767676797979 7B7B7B7D7D7D7F7F7F7F7F7F818181828282858585858585868686878787878787878787888888 8888888888888888888989898989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B 8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E 8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191 919191919191919191929292929292929292929292939393939393939393939393939393949494 949494949494949494959595959595959595959595969696969696969696969696979797979797 9797979898989898989898989898989999999999999999999999999999999A9A9A9A9A9A9A9A9A 9A9A9A9B9B9B9B9B9B9B9B9B9B9B9B9C9C9C282626050101050101050101050101050101050101 464444787878AAAAAAAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A8A8A8A8A8A8 A8A8A8A8A8A8A7A7A7A7A7A7A6A6A6A5A5A5A6A6A6A5A5A5A4A4A4A3A3A3A2A2A2A2A2A2A2A2A2 A0A0A09F9F9F9E9E9E9E9E9E9D9D9D9C9C9C9A9A9A999999989898989898969696959595949494 9292929191919090908E8E8E8C8C8C8B8B8B8989898787878686868484848181818080807E7E7E 7D7D7D7A7A7A7979797777777575757272727070706D6D6D6C6C6C6C6C6C6B6B6B6A6A6A6A6A6A 696969686868686868676767666666666666656565656565646464636363636363626262626262 1515150000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000000000000000 000000000000020202020202020202020202020202020202020202020202020202010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7191919000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000808080808080F0F0F0F0F0F0F0F0F151515 1515151515151717171717171717171B1B1B1B1B1B1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1B1B1B1B1B1B1717171717171515150F0F0F0F0F0F0F0F0F080808080808000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000454545FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E4000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010101010909090C0C0C 0E0E0E1111111414141818181919191B1B1B1C1C1C1D1D1D1E1E1E1F1F1F202020202020212121 2020201F1F1F1F1F1F1E1E1E1D1D1D1C1C1C1B1B1B1A1A1A1717171515151212120F0F0F0A0A0A 070707020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303010101000000000000 0000000000000000000000000000008A8A8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF666666 0000000000000000000000000000000000000000000E0E0E151515151515151515151515151515 161616161616161616161616161616171717171717171717171717171717171717181818181818 1818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F202020202020202020202020212121212121212121222222222222222222222222232323 232323232323242424242424242424242424252525252525252525252525262626262626262626 2727272727272727272727272828282828282828282929292929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F 2F2F2F303030303030303030313131313131323232323232323232333333333333343434343434 353535353535353535363636363636373737373737373737383838383838393939393939393939 3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E444444 4949495050505252525656565C5C5C5F5F5F6262626565656868686C6C6C6E6E6E717171737373 7575757878787B7B7B7E7E7E7F7F7F808080808080828282848484868686868686878787878787 8888888888888888888888888989898989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8A8A8A 8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E 8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090919191 919191919191919191919191929292929292929292929292939393939393939393939393939393 949494949494949494949494959595959595959595959595969696969696969696979797979797 9797979797979898989898989898989898989999999999999999999999999A9A9A9A9A9A9A9A9A 9A9A9A9B9B9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C282626050101050101050101050101 050101050101464444787878AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9A9A9 A9A9A9A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A6A6A6A5A5A5A6A6A6A4A4A4A3A3A3A3A3A3 A2A2A2A1A1A1A1A1A19F9F9F9F9F9F9E9E9E9D9D9D9D9D9D9C9C9C9B9B9B9A9A9A999999979797 9696969595959393939292929191918F8F8F8E8E8E8C8C8C8A8A8A898989888888868686848484 8282828181817E7E7E7D7D7D7B7B7B7979797777777575757171716F6F6F6D6D6D6C6C6C6B6B6B 6B6B6B6A6A6A696969686868686868676767666666666666656565656565646464636363636363 626262626262151515000000000000000000000000000000000000000000000000000000000000 2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F7F7F7C8C8C89F9F9F8282826F6F6F676767676767676767676767676767676767676767676767 676767676767676767676767676767676767676767676767676767676767676767676767676767 676767676767676767676767676767676767676767676767676767676767676767676767676767 676767676767676767676767676767676767676767676767676767676767676767676767676767 676767676767676767676767676767676767676767676767676767676767676767676767676767 676767676767676767676767676767676767676767676767676767676767676767676767676767 676767676767676767676767676767676767676767676767676767676767676767676767676767 6767676767676767676969696F6F6F868686A6A6A6CDCDCDFBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000 000000000000000000000000020202020202020202020202020202020202020202020202020202 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8686860A0A0A000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909090909101010101010161616 1616161919191919191919191D1D1D1D1D1D202020202020202020242424242424242424242424 2424242424242424242424242020202020201D1D1D1D1D1D191919161616161616101010101010 090909090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 010101CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD9D9D9000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060C0C0C0E0E0E1111111414141818181919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F202020 2020202121212020201F1F1F1F1F1F1E1E1E1D1D1D1C1C1C1B1B1B1A1A1A171717151515121212 0F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303020202 000000000000000000000000000000000000000000666666FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF515151000000000000000000000000000000000000000000101010151515151515151515 151515151515161616161616161616161616161616171717171717171717171717171717171717 1818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222 222222232323232323232323242424242424242424242424252525252525252525262626262626 262626262626272727272727272727282828282828282828282828292929292929292929292929 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F303030303030313131313131313131323232323232333333333333343434 343434343434353535353535363636363636363636373737373737383838383838383838393939 3939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E 3F3F3F4444444949494E4E4E5252525757575B5B5B5F5F5F6262626565656969696B6B6B6E6E6E 7171717373737575757878787B7B7B7D7D7D7F7F7F808080818181828282848484868686868686 8787878787878888888888888888888888888989898989898989898989898A8A8A8A8A8A8A8A8A 8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090 919191919191919191919191919191929292929292929292929292939393939393939393939393 939393949494949494949494949494959595959595959595969696969696969696969696979797 9797979797979797979898989898989898989898989999999999999999999999999A9A9A9A9A9A 9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9C9C9C282626050101050101 050101050101050101050101464444787878ABABABABABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7A6A6A6A6A6A6A5A5A5A5A5A5 A4A4A4A3A3A3A3A3A3A2A2A2A2A2A2A1A1A1A0A0A09F9F9F9F9F9F9D9D9D9C9C9C9C9C9C9B9B9B 9A9A9A9898989797979595959494949393939292929090908F8F8F8E8E8E8B8B8B8B8B8B8A8A8A 8787878686868484848282828080807F7F7F7C7C7C7B7B7B7979797777777474747171716F6F6F 6C6C6C6B6B6B6B6B6B6A6A6A696969696969686868676767676767666666656565656565646464 646464636363626262626262151515000000000000000000000000000000000000000000000000 0000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEE 7D7D7D1D1D1D040404040404020202000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000A0A0A1212120C0C0C3E3E3EA8A8A8 F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000 000000000000000000000000000000000000020202020202020202020202020202020202020202 020202020202010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7121212000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1010101616161616161919191919191D1D1D1D1D1D202020242424242424262626262626262626 2626262626262626262626262626262626262424242424242424242020201D1D1D191919191919 161616101010090909090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000001F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060C0C0C0E0E0E1111111414141616161919191A1A1A1C1C1C1D1D1D1E1E1E 1F1F1F2020202020202121212020201F1F1F1F1F1F1E1E1E1D1D1D1C1C1C1C1C1C1A1A1A171717 1515151212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303020202000000000000000000000000000000000000000000434343FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF404040000000000000000000000000000000000000000000121212151515 151515151515151515161616161616161616161616161616161616171717171717171717171717 1717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222 222222222222232323232323232323232323242424242424242424252525252525252525252525 262626262626262626262626272727272727272727282828282828282828282828292929292929 2929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D 2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232323232333333 333333343434343434353535353535353535363636363636373737373737373737383838383838 3939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E 3E3E3E3E3E3E3F3F3F4444444949494D4D4D5252525757575A5A5A5D5D5D616161636363676767 6B6B6B6E6E6E7070707272727575757777777A7A7A7B7B7B7E7E7E7F7F7F818181828282848484 8686868686868686868888888888888888888888888989898989898989898989898A8A8A8A8A8A 8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090 909090909090919191919191919191919191929292929292929292929292939393939393939393 939393939393949494949494949494949494959595959595959595969696969696969696969696 9797979797979797979797979898989898989898989999999999999999999999999A9A9A9A9A9A 9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D282626 050101050101050101050101050101050101464444777777ABABABABABABABABABABABABAAAAAA AAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A6A6A6 A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4A3A3A3A2A2A2A1A1A1A1A1A1A0A0A0A0A0A09E9E9E9D9D9D 9D9D9D9B9B9B9B9B9B9A9A9A9898989797979696969595959393939292929191918F8F8F8E8E8E 8C8C8C8C8C8C8989898888888787878484848383838181817F7F7F7D7D7D7C7C7C787878767676 7575757272726E6E6E6E6E6E6B6B6B6A6A6A696969696969686868676767676767666666656565 656565646464646464636363636363626262151515000000000000000000000000000000000000 0000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDBDBD 282828010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000E0E0E111111828282F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9 141414000000000000000000000000000000000000000000020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8A8A80D0D0D000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091010101010101616161616161D1D1D1D1D1D1D1D1D202020242424262626262626282828 262626262626262626262626262626262626262626262626262626262626262626242424202020 1D1D1D191919161616101010101010090909090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CACACA000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060C0C0C0E0E0E1111111414141616161919191A1A1A1C1C1C 1D1D1D1E1E1E1F1F1F2020202020202121212020201F1F1F1F1F1F1E1E1E1D1D1D1C1C1C1C1C1C 1A1A1A1717171515151212120F0F0F0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303020202000000000000000000000000000000000000000000202020FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2F000000000000000000000000000000000000000000 131313151515151515151515151515161616161616161616161616161616161616171717171717 1717171717171717171818181818181818181818181818181919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121 222222222222222222222222232323232323232323242424242424242424242424252525252525 252525252525262626262626262626272727272727272727272727282828282828282828292929 2929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D 2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232323232 333333333333333333343434343434353535353535363636363636363636373737373737383838 3838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F4444444949494D4D4D5252525656565A5A5A5D5D5D616161 6464646767676A6A6A6D6D6D7070707373737575757878787979797C7C7C7E7E7E808080808080 8383838484848585858686868787878888888888888888888989898989898989898989898A8A8A 8A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D 8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090 909090909090909090919191919191919191919191929292929292929292929292929292939393 939393939393939393949494949494949494949494959595959595959595969696969696969696 9696969797979797979797979898989898989898989898989999999999999999999999999A9A9A 9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D 9D9D9D292727050101050101050101050101050101050101464444767676ABABABABABABABABAB ABABABABABABAAAAAAAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A8A8A8 A7A7A7A7A7A7A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A3A3A3A3A3A3A2A2A2A1A1A1A0A0A0A0A0A0 9F9F9F9F9F9F9D9D9D9C9C9C9B9B9B9A9A9A999999999999989898969696959595939393929292 9090908F8F8F8D8D8D8D8D8D8C8C8C8989898787878686868484848282828080807F7F7F7C7C7C 7A7A7A7878787676767373737171716F6F6F6D6D6D6A6A6A6A6A6A696969686868676767676767 666666666666656565646464646464636363636363626262151515000000000000000000000000 0000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCB 202020010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000A0A0A161616B4B4B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFC9C9C9141414000000000000000000000000000000000000000000020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000050505A4A4A4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C3C3C 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101010101616161616161D1D1D1D1D1D202020202020242424262626 2828282828282A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A282828282828282828 2626262424242020201D1D1D191919161616101010090909090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000003F3F3FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFC5C5C5000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090E0E0E111111141414161616181818 1A1A1A1B1B1B1C1C1C1E1E1E1F1F1F2020202020202121212020201F1F1F1F1F1F1E1E1E1D1D1D 1C1C1C1C1C1C1A1A1A1717171515151212120F0F0F0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303000000000000000000000000000000000000000000 020202F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF202020000000000000000000000000000000 000000000000151515151515151515151515151515161616161616161616161616161616171717 171717171717171717171717171717181818181818181818181818191919191919191919191919 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121222222222222222222222222232323232323232323242424242424242424242424 252525252525252525262626262626262626262626272727272727272727282828282828282828 2828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131323232 323232323232333333333333343434343434343434353535353535363636363636373737373737 3737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C 3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F4343434747474C4C4C515151555555595959 5D5D5D6060606363636767676A6A6A6C6C6C6F6F6F7272727575757777777979797B7B7B7D7D7D 7F7F7F818181828282848484868686868686878787888888888888888888898989898989898989 8989898A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C 8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 909090909090909090909090919191919191919191919191929292929292929292929292929292 939393939393939393939393949494949494949494949494959595959595959595969696969696 969696969696979797979797979797989898989898989898989898999999999999999999999999 9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D 9D9D9D9D9D9D9D9D9D292727050101050101050101050101050101050101464444757575ACACAC ACACACABABABABABABABABABABABABAAAAAAAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A8A8A8 A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A5A5A5A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A3A3A3A2A2A2 A1A1A1A1A1A1A0A0A09F9F9F9F9F9F9E9E9E9D9D9D9B9B9B9B9B9B9A9A9A999999979797969696 9595959393939393939191918F8F8F8F8F8F8C8C8C8A8A8A898989888888868686838383838383 8181817E7E7E7B7B7B7B7B7B7878787575757474747272727070706D6D6D6A6A6A696969686868 686868676767666666666666656565656565646464636363636363626262151515000000000000 0000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6 5C5C5C040404000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000E0E0E676767FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000000000000000000000000000020202 020202020202020202020202020202020202020202020202010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFA0C0C0C000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909090909091010101616161616161D1D1D1D1D1D202020242424 2626262828282828282A2A2A2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2A2A2A 2A2A2A2A2A2A282828262626202020202020191919161616101010101010090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000040404FAFAFAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC0C0C0000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090E0E0E111111141414 1616161818181A1A1A1B1B1B1C1C1C1E1E1E1F1F1F2020202020202121212020201F1F1F1F1F1F 1E1E1E1D1D1D1C1C1C1C1C1C1A1A1A1717171515151212120F0F0F0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303000000000000000000000000000000 000000000000000000D7D7D7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF111111000000000000000000 000000000000000000010101151515151515151515151515151515161616161616161616161616 161616171717171717171717171717171717171717181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 212121212121212121212121222222222222222222232323232323232323232323242424242424 242424252525252525252525252525262626262626262626262626272727272727272727282828 2828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131 313131323232323232333333333333333333343434343434353535353535353535363636363636 3737373737373838383838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C 3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F4343434747474C4C4C515151 5454545959595B5B5B6060606363636666666969696C6C6C6F6F6F727272747474767676797979 7B7B7B7D7D7D7F7F7F808080828282838383858585868686878787878787888888898989898989 8989898989898A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C 8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F 8F8F8F909090909090909090909090919191919191919191919191929292929292929292929292 929292939393939393939393939393949494949494949494949494959595959595959595969696 969696969696969696979797979797979797989898989898989898989898999999999999999999 9A9A9A9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D 9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E292727050101050101050101050101050101050101464444 747474ACACACACACACACACACABABABABABABABABABABABABAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9 A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A8A8A8A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A5A5A5A4A4A4 A4A4A4A3A3A3A2A2A2A2A2A2A1A1A1A0A0A09F9F9F9F9F9F9D9D9D9D9D9D9C9C9C9B9B9B999999 9999999797979595959494949494949292929090909090908E8E8E8C8C8C8B8B8B8A8A8A888888 8686868484848282828080807E7E7E7C7C7C7A7A7A7878787676767474747272727070706D6D6D 696969686868686868676767666666666666656565656565646464636363636363626262151515 0000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DCDCDC1E1E1E010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000B0B0B 3E3E3EF5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000000000000000000000 000000020202020202020202020202020202020202020202020202020202010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFC9C9C9101010000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909091010101616161919191D1D1D202020202020 2424242626262828282A2A2A2D2D2D2D2D2D2D2D2D2F2F2F313131313131313131313131313131 2F2F2F2F2F2F2D2D2D2D2D2D2A2A2A2626262424242020201D1D1D1D1D1D161616101010090909 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 C1C1C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBCBCBC000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090E0E0E 1010101313131616161818181919191B1B1B1C1C1C1E1E1E1F1F1F202020202020212121202020 1F1F1F1F1F1F1E1E1E1D1D1D1C1C1C1C1C1C1A1A1A1717171515151212120F0F0F0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303010101000000000000 000000000000000000000000000000B0B0B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE040404000000 000000000000000000000000000000020202151515151515151515151515161616161616161616 161616161616161616171717171717171717171717171717181818181818181818181818181818 1919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020 202020202020212121212121212121222222222222222222222222232323232323232323232323 242424242424242424252525252525252525252525262626262626262626272727272727272727 2727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030 313131313131313131323232323232333333333333343434343434343434353535353535363636 3636363636363737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B 3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040434343454545 4B4B4B4F4F4F5454545858585B5B5B6060606262626666666969696C6C6C6F6F6F717171747474 7676767878787B7B7B7D7D7D7E7E7E808080818181838383848484868686868686888888888888 8989898989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C 8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F 8F8F8F8F8F8F909090909090909090909090919191919191919191919191919191929292929292 929292929292939393939393939393939393949494949494949494949494959595959595959595 969696969696969696969696979797979797979797989898989898989898989898999999999999 9999999A9A9A9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9C9C9C 9D9D9D9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E2A2828050101050101050101050101050101 050101464444737373ACACACACACACACACACACACACABABABABABABABABABABABABAAAAAAAAAAAA AAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6 A5A5A5A5A5A5A4A4A4A3A3A3A3A3A3A2A2A2A1A1A1A1A1A19F9F9F9F9F9F9D9D9D9D9D9D9C9C9C 9C9C9C9A9A9A9999999797979797979696969494949393939393939090908F8F8F8D8D8D8C8C8C 8B8B8B8989898787878686868484848181818080807E7E7E7C7C7C7A7A7A787878757575737373 7272726D6D6D6C6C6C6C6C6C686868676767666666666666656565656565646464636363636363 6262621515150000000000000000000000000000000000000000000000000000000000002F2F2F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD0D0D0121212000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000080808393939F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000000000 000000000000000000020202020202020202020202020202020202020202020202020202010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF9F9F9F070707000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000909090909091616161919191D1D1D 2020202020202424242626262828282A2A2A2D2D2D2D2D2D2D2D2D2F2F2F313131333333333333 3333333131313131312F2F2F2F2F2F2D2D2D2A2A2A2828282424242020202020201D1D1D161616 101010090909090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000727272FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7B7B7000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090E0E0E1010101313131515151818181919191B1B1B1C1C1C1E1E1E1F1F1F202020202020 2121212020201F1F1F1F1F1F1E1E1E1D1D1D1C1C1C1C1C1C1A1A1A1717171515151212120F0F0F 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303010101 000000000000000000000000000000000000000000868686FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 000000000000000000000000000000000000000000030303151515151515151515151515161616 161616161616161616161616161616171717171717171717171717171717181818181818181818 1818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 202020202020202020202020212121212121212121222222222222222222222222232323232323 232323242424242424242424242424252525252525252525262626262626262626262626272727 2727272727272828282828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F 303030303030313131313131323232323232323232333333333333343434343434353535353535 3535353636363636363737373737373737373838383838383939393939393A3A3A3A3A3A3A3A3A 3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040 4040404646464B4B4B4E4E4E5454545757575C5C5C5F5F5F6161616565656868686B6B6B6E6E6E 7171717373737777777777777B7B7B7D7D7D7E7E7E7F7F7F828282838383858585858585868686 8787878989898989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B 8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F 8F8F8F8F8F8F8F8F8F909090909090909090909090909090919191919191919191919191929292 929292929292929292939393939393939393939393949494949494949494949494959595959595 959595969696969696969696969696979797979797979797989898989898989898989898999999 9999999999999A9A9A9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C 9D9D9D9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F2A2828050101050101050101 050101050101050101464444727272ADADADACACACACACACACACACACACACABABABABABABABABAB AAAAAAAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7 A6A6A6A6A6A6A5A5A5A5A5A5A4A4A4A4A4A4A3A3A3A2A2A2A2A2A2A1A1A1A0A0A09F9F9F9E9E9E 9E9E9E9D9D9D9C9C9C9C9C9C999999989898989898979797959595949494939393919191909090 8F8F8F8E8E8E8C8C8C8B8B8B8989898787878686868484848282827F7F7F7D7D7D7C7C7C7A7A7A 7878787676767474747171716E6E6E6C6C6C6B6B6B676767676767666666656565656565646464 646464636363626262151515000000000000000000000000000000000000000000000000000000 0000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD9D9D9121212000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000A0A0A535353FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000 000000000000000000000000000000020202020202020202020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797979000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909101010 1919191919192020202020202424242626262828282D2D2D2D2D2D2F2F2F2F2F2F313131333333 3333333535353535353333333131313131313131312F2F2F2D2D2D2A2A2A262626242424202020 1D1D1D191919101010101010090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000323232FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2B2B2000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090C0C0C0E0E0E1111111515151616161919191A1A1A1C1C1C1D1D1D1E1E1E 1F1F1F2020202020202020202020202020201F1F1F1D1D1D1C1C1C1B1B1B1A1A1A171717151515 1212120F0F0F0D0D0D070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 0303030202020000000000000000000000000000000000000000005C5C5CFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE3E3E3000000000000000000000000000000000000000000040404151515151515151515 151515161616161616161616161616161616171717171717171717171717171717171717181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222232323 232323232323232323242424242424242424242424252525252525252525262626262626262626 2626262727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F 2F2F2F303030303030303030313131313131323232323232333333333333333333343434343434 3535353535353636363636363636363737373737373838383838383838383939393939393A3A3A 3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F 4040404040404040404646464A4A4A4F4F4F5353535757575A5A5A5E5E5E626262656565676767 6B6B6B6D6D6D7171717373737676767878787A7A7A7C7C7C7E7E7E7F7F7F818181828282848484 8585858686868787878989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B 8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E 8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191919191919191 929292929292929292929292939393939393939393939393939393949494949494949494959595 959595959595959595969696969696969696979797979797979797989898989898989898989898 9999999999999999999A9A9A9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C 9C9C9C9D9D9D9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F2A2828050101 050101050101050101050101050101464444717171ADADADADADADACACACACACACACACACACACAC ABABABABABABABABABAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7 A7A7A7A7A7A7A6A6A6A6A6A6A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A2A2A2A1A1A1 A0A0A0A0A0A09F9F9F9E9E9E9D9D9D9C9C9C9B9B9B9A9A9A989898989898969696959595949494 9494949191919191918F8F8F8E8E8E8B8B8B8B8B8B898989878787868686848484828282808080 7F7F7F7C7C7C7979797979797676767373737070706F6F6F6C6C6C6A6A6A676767666666656565 656565646464646464636363626262151515000000000000000000000000000000000000000000 0000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0F0F01A1A1A000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000D0D0D9A9A9AFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414 000000000000000000000000000000000000000000020202020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF656565000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 0909091010101919191919191D1D1D2020202424242626262A2A2A2D2D2D2F2F2F313131313131 3333333535353535353636363636363535353535353333333333333131312F2F2F2A2A2A282828 262626242424202020191919161616101010090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000141414FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEAEAE 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090C0C0C0E0E0E1111111515151616161919191A1A1A1C1C1C 1D1D1D1E1E1E1F1F1F2020202020202121212020202020201F1F1F1D1D1D1C1C1C1B1B1B1A1A1A 1919191515151212120F0F0F0D0D0D070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303020202000000000000000000000000000000000000000000313131FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD8D8D8000000000000000000000000000000000000000000050505151515 151515151515151515161616161616161616161616161616171717171717171717171717171717 1717171818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222 222222232323232323232323232323242424242424242424252525252525252525252525262626 262626262626272727272727272727272727282828282828282828292929292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232323232333333333333343434 343434343434353535353535363636363636373737373737373737383838383838393939393939 3939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E 3F3F3F3F3F3F4040404040404141414444444A4A4A4F4F4F5353535757575A5A5A5D5D5D616161 6464646868686A6A6A6D6D6D7070707272727575757878787A7A7A7D7D7D7E7E7E808080818181 8383838484848585858787878888888989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8B8B8B 8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E 8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191919191 919191929292929292929292929292929292939393939393939393939393949494949494949494 959595959595959595959595969696969696969696979797979797979797989898989898989898 9898989999999999999999999A9A9A9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C 9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9F9F9F 2B2929050101050101050101050101050101050101464444707070ADADADADADADADADADACACAC ACACACACACACABABABABABABABABABAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8 A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A7A7A7A6A6A6A5A5A5A5A5A5A4A4A4A3A3A3A3A3A3A3A3A3 A2A2A2A1A1A1A1A1A1A0A0A0A0A0A09F9F9F9E9E9E9C9C9C9C9C9C9A9A9A999999999999979797 9696969595959494949292929292929191918F8F8F8D8D8D8C8C8C8A8A8A898989878787858585 8383838282828080807E7E7E7B7B7B7979797878787575757373737070706E6E6E6B6B6B6A6A6A 666666656565656565646464646464636363626262151515000000000000000000000000000000 0000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B4B4B060606000000000000000000000000000000000000 000000000000000000000000000000000000020202030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202010101010101010101020202020202020202010101000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000F0F0FE8E8E8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF C9C9C9141414000000000000000000000000000000000000000000020202020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000050505A4A4A4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF595959000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101616161919191D1D1D2020202424242626262A2A2A2F2F2F313131 313131333333353535363636363636363636363636363636363636363636363636353535313131 2F2F2F2A2A2A2828282626262020201D1D1D161616101010101010090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFA9A9A9000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090C0C0C0E0E0E111111151515161616191919 1A1A1A1C1C1C1D1D1D1E1E1E1F1F1F2020202020202121212020202020201F1F1F1D1D1D1C1C1C 1B1B1B1A1A1A1919191515151212120F0F0F0D0D0D070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303000000000000000000000000000000000000000000 080808FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF000000000000000000000000000000000000000000 060606151515151515151515151515161616161616161616161616161616171717171717171717 1717171717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222 222222222222222222232323232323232323242424242424242424242424252525252525252525 252525262626262626262626272727272727272727272727282828282828282828292929292929 2929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131323232323232323232333333 333333343434343434353535353535353535363636363636373737373737383838383838383838 3939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E 3E3E3E3F3F3F3F3F3F3F3F3F4040404040404141414444444949494D4D4D515151555555595959 5D5D5D6060606363636767676969696D6D6D6F6F6F7272727474747777777979797C7C7C7D7D7D 8080808282828484848585858585858787878888888888888989898A8A8A8A8A8A8A8A8A8A8A8A 8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E 8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090909090919191 919191919191919191929292929292929292929292939393939393939393939393949494949494 949494949494959595959595959595969696969696969696979797979797979797989898989898 9898989898989999999999999999999A9A9A9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C 9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F 9F9F9FA0A0A02B2929050101050101050101050101050101050101464444717171AEAEAEADADAD ADADADADADADACACACACACACACACACABABABABABABABABABAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9 A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4 A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A1A1A1A0A0A09F9F9F9F9F9F9D9D9D9C9C9C9C9C9C9B9B9B 9999999999999797979696969595959595959292929191918F8F8F8F8F8F8C8C8C8C8C8C8A8A8A 8989898787878484848484848181817F7F7F7D7D7D7B7B7B7979797777777575757272726F6F6F 6D6D6D6C6C6C696969666666656565646464646464636363636363151515000000000000000000 0000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4B4B40E0E0E000000000000000000000000000000 0000000000000000000000000000000000000808082727273535353C3C3C3E3E3E3E3E3E3D3D3D 3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737 363636363636353535353535343434343434343434333333333333323232323232313131313131 3131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727262626262626252525 252525242424242424232323232323232323232323232323222222222222222222212121212121 2121212020202020202020201F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1919191717171414140D0D0D030303 020202000000000000000000000000000000000000000000000000000000000000000000000000 050505575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFC9C9C9141414000000000000000000000000000000000000000000020202020202 020202020202020202020202020202020202020202020202010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000050505A4A4A4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101616161919191D1D1D2020202424242828282A2A2A 2F2F2F313131333333353535363636383838383838383838383838383838363636383838363636 3636363333333131312D2D2D2A2A2A2828282424241D1D1D191919161616101010090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA4A4A4000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090C0C0C0E0E0E111111151515 1616161919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F2020202020202121212020202020201F1F1F 1D1D1D1C1C1C1B1B1B1A1A1A1919191515151212120F0F0F0D0D0D0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303000000000000000000000000000000 000000000000000000DBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C7000000000000000000000000000000 000000000000070707151515151515151515161616161616161616161616161616161616171717 1717171717171717171717171818181818181818181818181818181919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121 212121222222222222222222222222232323232323232323242424242424242424242424252525 252525252525262626262626262626262626272727272727272727282828282828282828282828 2929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D 2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232 333333333333333333343434343434353535353535363636363636363636373737373737383838 3838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D 3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F4040404040404141414141414444444949494D4D4D515151 5555555858585C5C5C6060606363636666666969696C6C6C707070717171747474767676797979 7C7C7C7E7E7E7F7F7F8181818383838585858585858686868888888989898989898A8A8A8A8A8A 8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D 8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090 919191919191919191919191929292929292929292929292939393939393939393939393949494 949494949494949494959595959595959595969696969696969696979797979797979797979797 9898989898989898989999999999999999999A9A9A9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B 9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F 9F9F9F9F9F9FA0A0A0A0A0A02B2929050101050101050101050101050101050101464444717171 AEAEAEAEAEAEADADADADADADADADADACACACACACACABABABABABABABABABAAAAAAAAAAAAAAAAAA A9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A5A5A5A5A5A5 A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A2A2A2A2A2A2A1A1A1A0A0A0A0A0A09F9F9F9D9D9D9D9D9D 9C9C9C9B9B9B9A9A9A9999999898989797979696969595959494949292929191918F8F8F8E8E8E 8C8C8C8C8C8C8A8A8A8888888585858484848383838181817F7F7F7D7D7D7A7A7A787878777777 7474747171716F6F6F6D6D6D6A6A6A696969656565646464646464636363636363151515000000 0000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD1B1B1B000000000000000000000000 0000000000000000000000000000000000000101012C2C2C444444444444434343434343424242 4242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C 3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838383838373737373737363636363636 3535353535353434343434343333333333333232323232323131313131313030303030302F2F2F 2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929 292929282828282828272727272727262626262626252525252525252525242424242424242424 2323232323232323232222222222222222222121212121212020202020202020201F1F1F1F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1A1A1A1A1A1A121212030303010101000000000000000000000000000000000000000000000000 0000000000000000000E0E0EDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000000000000000000000000000 020202020202020202020202020202020202020202020202020202020202010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF585858000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909091010101616161919191D1D1D202020242424 2828282D2D2D3131313333333535353636363636363838383A3A3A3A3A3A3A3A3A383838383838 3A3A3A3838383838383535353131312F2F2F2A2A2A2828282424241D1D1D191919161616101010 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000080808 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E 1111111515151616161919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F202020202020212121202020 2020201F1F1F1D1D1D1C1C1C1B1B1B1A1A1A1919191515151212120F0F0F0D0D0D0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303010101000000000000 000000000000000000000000000000B0B0B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF000000000000000000 000000000000000000000000070707151515151515151515161616161616161616161616161616 161616171717171717171717171717171717181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121 212121212121212121222222222222222222232323232323232323232323242424242424242424 252525252525252525252525262626262626262626262626272727272727272727282828282828 2828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131 323232323232333333333333343434343434343434353535353535363636363636373737373737 3737373838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C 3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141454545474747 4C4C4C5050505555555858585B5B5B5E5E5E6262626565656969696B6B6B6E6E6E717171747474 7575757979797B7B7B7D7D7D7E7E7E818181828282848484858585858585878787888888898989 8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D 8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090 909090919191919191919191919191929292929292929292929292939393939393939393939393 939393949494949494949494959595959595959595969696969696969696979797979797979797 9797979898989898989898989999999999999999999A9A9A9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B 9B9B9B9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F 9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A0A0A02B2929050101050101050101050101050101050101 464444727272AEAEAEAEAEAEADADADADADADADADADACACACACACACACACACABABABABABABAAAAAA AAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6 A6A6A6A5A5A5A5A5A5A4A4A4A5A5A5A4A4A4A3A3A3A2A2A2A2A2A2A1A1A1A0A0A0A1A1A1A0A0A0 9E9E9E9E9E9E9D9D9D9C9C9C9B9B9B9A9A9A9A9A9A999999979797969696959595939393939393 9292928F8F8F8E8E8E8D8D8D8B8B8B8989898888888686868484848282828181817E7E7E7C7C7C 7979797878787676767373737171717070706C6C6C6A6A6A686868646464646464636363636363 1515150000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9A9A90E0E0E000000000000 000000000000000000000000000000000000000000010101373737454545444444444444434343 4343434242424242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D 3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838383838373737373737 363636363636353535353535343434343434333333333333323232323232313131313131303030 3030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A 2A2A2A292929292929282828282828272727272727262626262626252525252525252525242424 242424242424232323232323232323222222222222222222212121212121202020202020202020 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A181818060606010101000000000000000000000000000000 0000000000000000000000000000000404046F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000000000000000 000000000000020202020202020202020202020202020202020202020202020202020202010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000909091010101616161919191D1D1D 2020202424242828282D2D2D2F2F2F3333333535353636363636363838383A3A3A3B3B3B3B3B3B 3A3A3A3A3A3A3A3A3A3A3A3A3838383636363333333131312D2D2D2A2A2A262626202020191919 161616101010090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9B9B9B000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C0E0E0E1111111515151616161919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F202020202020 2121212020202020201F1F1F1D1D1D1C1C1C1B1B1B1A1A1A1919191515151212120F0F0F0D0D0D 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303010101 000000000000000000000000000000000000000000858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8B8B8000000 000000000000000000000000000000000000080808151515151515151515161616161616161616 161616161616171717171717171717171717171717171717181818181818181818181818191919 1919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020212121212121212121212121222222222222222222232323232323232323232323242424 242424242424252525252525252525252525262626262626262626272727272727272727272727 2828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131 313131323232323232323232333333333333343434343434353535353535353535363636363636 3737373737373838383838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C 3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141 4545454747474C4C4C4F4F4F5454545858585B5B5B5E5E5E6262626666666868686B6B6B6E6E6E 7171717373737676767878787B7B7B7D7D7D7E7E7E808080828282838383848484868686888888 8888888989898A8A8A8A8A8A8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C 8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090 909090909090909090919191919191919191919191929292929292929292929292939393939393 939393939393949494949494949494959595959595959595969696969696969696969696979797 9797979797979898989898989898989999999999999999999999999A9A9A9A9A9A9A9A9A9B9B9B 9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9E9E9E 9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A0A0A0A1A1A12A2828050101050101050101050101 050101050101464444747474AEAEAEAEAEAEAEAEAEADADADADADADACACACACACACACACACABABAB ABABABABABABAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7 A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A4A4A4A3A3A3A2A2A2A1A1A1 A1A1A1A0A0A09F9F9F9F9F9F9E9E9E9C9C9C9B9B9B9B9B9B9A9A9A999999989898969696959595 9595959393939292929191918F8F8F8E8E8E8D8D8D8A8A8A898989878787868686848484828282 8080807D7D7D7B7B7B7A7A7A7878787575757474747070706E6E6E6C6C6C696969676767646464 636363636363151515000000000000000000000000000000000000000000000000000000000000 2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF313131000000 0000000000000000000000000000000000000000000000000000002E2E2E464646454545444444 4444444343434343434242424242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E 3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838383838 373737373737363636363636353535353535343434343434333333333333323232323232313131 3131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B 2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727262626262626252525252525 252525242424242424242424232323232323232323222222222222222222212121212121212121 2020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919060606010101000000000000 000000000000000000000000000000000000000000000000131313FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000 000000000000000000000000020202020202020202020202020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909101010161616 1919191D1D1D2020202626262A2A2A2D2D2D2D2D2D3131313535353535353636363838383A3A3A 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3838383535353333333131312A2A2A262626 2020201D1D1D191919161616090909090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF969696000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C0E0E0E1111111515151616161919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F 2020202020202121212020202020201F1F1F1D1D1D1C1C1C1B1B1B1A1A1A191919151515121212 0F0F0F0D0D0D0A0A0A070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 0303030202020000000000000000000000000000000000000000005B5B5BFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AFAFAF000000000000000000000000000000000000000000090909151515151515151515161616 161616161616161616161616171717171717171717171717171717171717181818181818181818 1818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121222222222222222222222222232323232323232323 242424242424242424242424252525252525252525262626262626262626262626272727272727 2727272727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030 303030313131313131323232323232333333333333333333343434343434353535353535363636 3636363636363737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B 3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141 4141414141414242424545454A4A4A4D4D4D5454545656565A5A5A5D5D5D606060646464676767 6A6A6A6D6D6D6F6F6F7272727575757878787A7A7A7C7C7C7E7E7E808080818181838383848484 8686868787878989898989898989898A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C 8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F 909090909090909090909090919191919191919191919191929292929292929292929292939393 939393939393939393949494949494949494949494959595959595959595969696969696969696 9797979797979797979898989898989898989999999999999999999999999A9A9A9A9A9A9A9A9A 9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E 9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A0A0A0A1A1A1A1A1A1292727050101050101 050101050101050101050101464444797979AFAFAFAEAEAEAEAEAEADADADADADADADADADACACAC ACACACABABABABABABABABABAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7 A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3 A2A2A2A2A2A2A1A1A1A1A1A1A0A0A09F9F9F9F9F9F9D9D9D9C9C9C9C9C9C9B9B9B999999989898 9898989696969595959494949393939292929090908F8F8F8D8D8D8C8C8C8A8A8A888888888888 8585858484848282827F7F7F7C7C7C7C7C7C7979797777777575757373737070706E6E6E6A6A6A 686868676767636363636363151515000000000000000000000000000000000000000000000000 0000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E4 0E0E0E000000000000000000000000000000000000000000000000000000111111464646464646 4545454444444444444343434343434242424242424141414141414040404040403F3F3F3F3F3F 3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939 383838383838373737373737363636363636353535353535343434343434333333333333323232 3232323131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C 2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727262626262626 252525252525252525242424242424242424232323232323232323222222222222222222212121 2121212121212020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919181818020202 000000000000000000000000000000000000000000000000000000000000121212CFCFCFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000 000000000000000000000000000000000000020202020202020202020202020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 0909091010101616161D1D1D2020202626262A2A2A2A2A2A2D2D2D313131353535363636363636 3838383A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A383838363636333333313131 2D2D2D2626262424241D1D1D191919161616101010090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF919191000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C0E0E0E1111111515151616161919191A1A1A1C1C1C1D1D1D 1E1E1E1F1F1F2020202020202121212020202020201F1F1F1D1D1D1C1C1C1B1B1B1A1A1A191919 1515151212120F0F0F0D0D0D0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303020202000000000000000000000000000000000000000000303030FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA7A7A7000000000000000000000000000000000000000000090909151515151515 151515161616161616161616161616161616171717171717171717171717171717181818181818 1818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F202020202020202020202020212121212121212121222222222222222222222222232323 232323232323242424242424242424242424252525252525252525262626262626262626262626 2727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F 303030303030313131313131313131323232323232333333333333343434343434343434353535 3535353636363636363737373737373737373838383838383939393939393A3A3A3A3A3A3A3A3A 3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040 4040404141414141414242424242424545454848484D4D4D5353535656565A5A5A5C5C5C606060 6464646767676A6A6A6D6D6D6F6F6F7373737474747878787979797C7C7C7D7D7D808080818181 8383838383838585858686868888888888888989898989898B8B8B8B8B8B8B8B8B8B8B8B8C8C8C 8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F 8F8F8F909090909090909090909090919191919191919191919191929292929292929292929292 939393939393939393939393939393949494949494949494959595959595959595969696969696 9696969797979797979797979898989898989898989898989999999999999999999A9A9A9A9A9A 9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E 9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1282626 0501010501010501010501010501010501014644447E7E7EAFAFAFAEAEAEAEAEAEADADADADADAD ADADADACACACACACACABABABABABABABABABAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A8A8A8A8A8A8 A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A3A3A3 A3A3A3A3A3A3A3A3A3A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09F9F9F9E9E9E9D9D9D9D9D9D9B9B9B 9A9A9A9A9A9A9898989797979696969696969494949393939292929090908F8F8F8D8D8D8C8C8C 8A8A8A8989898686868585858383838181817E7E7E7E7E7E7B7B7B797979777777747474727272 7070706D6D6D6A6A6A686868666666636363151515000000000000000000000000000000000000 0000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFA0A0A00B0B0B000000000000000000000000000000000000000000000000000000343434 464646464646454545444444444444434343434343424242424242414141414141404040404040 3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939 393939393939383838383838373737373737363636363636353535353535343434343434333333 3333333232323232323131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D 2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727 262626262626262626252525252525242424242424242424232323232323232323222222222222 2222222121212121212121212020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919 191919101010020202000000000000000000000000000000000000000000000000000000060606 8E8E8EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9 141414000000000000000000000000000000000000000000020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101616161919192020202626262A2A2A2A2A2A2D2D2D313131353535 3636363636363A3A3A3B3B3B3B3B3B3D3D3D3B3B3B3B3B3B3D3D3D3B3B3B3B3B3B3A3A3A363636 3535353131312D2D2D282828242424202020191919161616101010090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8D8D8D000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E1111111515151616161919191A1A1A 1C1C1C1D1D1D1E1E1E1F1F1F2020202020202121212020202020201F1F1F1E1E1E1C1C1C1C1C1C 1B1B1B1919191616161414141111110D0D0D0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303000000000000000000000000000000000000000000 080808FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA3A3A30000000000000000000000000000000000000000000A0A0A 151515151515161616161616161616161616161616161616171717171717171717171717171717 1818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222222222 222222232323232323232323242424242424242424242424252525252525252525262626262626 2626262626262727272727272727272828282828282828282828282929292929292929292A2A2A 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F 2F2F2F2F2F2F303030303030313131313131323232323232323232333333333333343434343434 3535353535353535353636363636363737373737373838383838383838383939393939393A3A3A 3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F 4040404040404040404141414141414242424242424646464848484D4D4D5252525656565A5A5A 5C5C5C6060606363636666666969696C6C6C6F6F6F7272727575757777777A7A7A7B7B7B7C7C7C 7F7F7F8080808383838484848585858787878888888989898A8A8A8A8A8A8B8B8B8B8B8B8B8B8B 8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F 8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191919191919191929292929292 929292929292939393939393939393939393949494949494949494959595959595959595969696 9696969696969797979797979797979797979898989898989898989999999999999999999A9A9A 9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E 9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1 A2A2A2272525050101050101050101050101050101050101464444838383AFAFAFAEAEAEAEAEAE ADADADADADADADADADACACACACACACABABABABABABABABABAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9 A9A9A9A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4 A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A1A1A1A0A0A0A0A0A0A0A0A09E9E9E9E9E9E 9D9D9D9C9C9C9B9B9B9B9B9B999999989898979797979797959595949494939393929292909090 8E8E8E8D8D8D8C8C8C8A8A8A8888888787878585858383838080807F7F7F7D7D7D7A7A7A787878 7676767474747272726F6F6F6C6C6C6A6A6A696969666666161616000000000000000000000000 0000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF555555000000000000000000000000000000000000000000000000000000 050505464646464646464646454545444444444444434343434343424242424242414141414141 4040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A 3A3A3A393939393939393939383838383838373737373737363636363636353535353535343434 3434343333333333333232323232323131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E 2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828 272727272727262626262626262626252525252525242424242424242424232323232323232323 2222222222222222222121212121212121212020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A 191919191919191919181818020202000000000000000000000000000000000000000000000000 000000000000555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFC9C9C9141414000000000000000000000000000000000000000000020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000050505A4A4A4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101010101919191D1D1D2626262828282A2A2A2F2F2F 3131313535353636363838383A3A3A3B3B3B3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3B3B3B3838383535353333332F2F2F2A2A2A2626262020201D1D1D191919101010090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF8F8F8F000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090C0C0C0E0E0E111111151515161616 1919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F2020202020202121212020202020202020201E1E1E 1D1D1D1C1C1C1B1B1B1919191616161414141111110D0D0D0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303010101000000000000000000000000 000000000000000000DADADAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2A2A2000000000000000000000000000000000000 0000000A0A0A151515151515161616161616161616161616161616161616171717171717171717 1717171717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222 222222222222232323232323232323232323242424242424242424252525252525252525252525 262626262626262626272727272727272727272727282828282828282828292929292929292929 2929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E 2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232333333333333333333 343434343434353535353535363636363636363636373737373737383838383838393939393939 3939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F 3F3F3F3F3F3F4040404040404141414141414141414242424242424343434646464C4C4C515151 5555555858585A5A5A5F5F5F6363636666666868686C6C6C6D6D6D727272747474767676797979 7B7B7B7D7D7D7F7F7F8181818282828484848585858787878787878888888989898A8A8A8A8A8A 8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E 8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191919191919191929292 929292929292929292939393939393939393939393949494949494949494949494959595959595 959595969696969696969696979797979797979797989898989898989898999999999999999999 9A9A9A9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D 9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A0A0A0A1A1A1A1A1A1 A1A1A1A2A2A2A2A2A2262424050101050101050101050101050101050101464444888888AFAFAF AEAEAEAEAEAEADADADADADADADADADACACACACACACABABABABABABABABABAAAAAAAAAAAAAAAAAA A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5 A5A5A5A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A1A1A1A0A0A0A0A0A09F9F9F 9E9E9E9D9D9D9E9E9E9D9D9D9B9B9B9B9B9B9A9A9A999999989898979797969696959595939393 9393939191918F8F8F8E8E8E8D8D8D8B8B8B8989898888888686868484848181818080807E7E7E 7B7B7B7A7A7A7878787676767373737171716E6E6E6D6D6D696969696969161616000000000000 0000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF282828000000000000000000000000000000000000000000 000000000000171717474747464646464646454545444444444444434343434343424242424242 4141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B 3B3B3B3A3A3A3A3A3A393939393939393939383838383838373737373737363636363636353535 3535353434343434343333333333333232323232323131313131313030303030302F2F2F2F2F2F 2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929 282828282828272727272727262626262626262626252525252525242424242424242424232323 2323232323232222222222222222222121212121212121212020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A1919191919191919191818180A0A0A000000000000000000000000000000000000 0000000000000000000000002D2D2DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000000000000000000000000000020202 020202020202020202020202020202020202020202020202020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 585858000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909090909091010101616161D1D1D242424282828 2A2A2A2D2D2D3131313535353636363838383A3A3A3B3B3B3D3D3D3D3D3D3D3D3D3D3D3D3F3F3F 3F3F3F3D3D3D3B3B3B3838383636363535353131312D2D2D282828242424202020191919161616 090909090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000080808FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF919191000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E111111 1515151616161919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F202020202020212121202020202020 2020201E1E1E1D1D1D1C1C1C1B1B1B1919191616161414141111110D0D0D0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303010101000000000000 000000000000000000000000000000AFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1A1A1000000000000000000000000 0000000000000000000A0A0A151515151515161616161616161616161616161616161616171717 1717171717171717171717171818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121 212121222222222222222222232323232323232323232323242424242424242424252525252525 252525252525262626262626262626272727272727272727272727282828282828282828292929 2929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D 2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232333333 333333343434343434343434353535353535363636363636373737373737373737383838383838 3939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E 3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242424242434343464646 4B4B4B5050505555555757575B5B5B5E5E5E6262626565656868686B6B6B6E6E6E707070737373 7575757878787A7A7A7D7D7D7E7E7E808080818181838383858585878787878787888888898989 8989898A8A8A8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E 8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191919191 919191929292929292929292929292939393939393939393939393949494949494949494959595 959595959595969696969696969696979797979797979797989898989898989898999999999999 9999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D 9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A0A0A0A1A1A1 A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2252323050101050101050101050101050101050101464444 8A8A8AAFAFAFAEAEAEAEAEAEADADADADADADADADADACACACACACACABABABABABABABABABAAAAAA AAAAAAAAAAAAA9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6 A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1 A0A0A0A0A0A09F9F9F9F9F9F9E9E9E9D9D9D9D9D9D9B9B9B9B9B9B999999999999989898969696 9696969595959494949292929090908F8F8F8D8D8D8B8B8B8A8A8A898989878787858585838383 8181817F7F7F7D7D7D7C7C7C7979797777777575757272727070706E6E6E6B6B6B696969161616 0000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E0E0E000000000000000000000000000000 000000000000000000000000202020474747464646464646454545444444444444434343434343 4242424242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C 3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838383838373737373737363636 363636353535353535343434343434333333333333323232323232313131313131303030303030 2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A 292929292929282828282828272727272727262626262626252525252525252525242424242424 2424242323232323232323232222222222222222222121212121212121212020202020201F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818101010010101000000000000000000 0000000000000000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000000000000000000000 000000020202020202020202020202020202020202020202020202020202020202010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909101010161616191919 2424242828282A2A2A2D2D2D3131313636363636363A3A3A3B3B3B3D3D3D3F3F3F3F3F3F3D3D3D 3F3F3F3F3F3F3F3F3F3F3F3F3D3D3D3A3A3A3636363535353131312D2D2D282828262626202020 1D1D1D161616101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF929292000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 0E0E0E1111111515151616161919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F202020202020212121 2020202020202020201E1E1E1D1D1D1C1C1C1B1B1B1919191616161414141111110F0F0F0A0A0A 070707020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303020202 0000000000000000000000000000000000000000007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0A0A0000000000000 0000000000000000000000000000000A0A0A151515151515161616161616161616161616161616 171717171717171717171717171717171717181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121222222222222222222222222232323232323232323242424242424242424242424 252525252525252525262626262626262626262626272727272727272727282828282828282828 2828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232 323232333333333333343434343434343434353535353535363636363636373737373737383838 3838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D 3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242434343 4343434646464949494E4E4E5454545757575A5A5A5D5D5D6161616565656868686A6A6A6D6D6D 6F6F6F7272727474747878787A7A7A7C7C7C7E7E7E808080828282838383858585868686878787 8787878989898A8A8A8A8A8A8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D 8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191 919191919191929292929292929292929292939393939393939393939393949494949494949494 959595959595959595969696969696969696969696979797979797979797989898989898989898 9999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D 9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A0A0A0 A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A2A2A2252323050101050101050101050101050101 0501014644448C8C8CAEAEAEAEAEAEAEAEAEADADADADADADACACACACACACACACACABABABABABAB ABABABAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6 A6A6A6A6A6A6A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2 A2A2A2A0A0A0A1A1A19F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9C9C9C9B9B9B9B9B9B999999 9999999898989696969696969595959393939191919090908E8E8E8D8D8D8B8B8B8A8A8A888888 8686868484848282828181817E7E7E7D7D7D7B7B7B7878787676767474747171717070706D6D6D 6C6C6C1616160000000000000000000000000000000000000000000000000000000000002F2F2F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000 000000000000000000000000000000000000262626474747464646464646454545444444444444 4343434343434242424242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D 3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838383838373737 373737363636363636353535353535343434343434333333333333323232323232313131313131 3030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B 2A2A2A2A2A2A292929292929282828282828272727272727262626262626252525252525252525 242424242424242424232323232323232323222222222222222222212121212121212121202020 2020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818131313020202000000 000000000000000000000000000000000000000000000000151515FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000000000000000 000000000000000000020202020202020202020202020202020202020202020202020202020202 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909090909 1616161919192020202626262A2A2A2D2D2D3333333636363838383A3A3A3B3B3B3D3D3D3F3F3F 3F3F3F3F3F3F3F3F3F4141414141413F3F3F3D3D3D3A3A3A3838383636363333332F2F2F2A2A2A 2626262020201D1D1D161616101010090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF959595000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C0E0E0E1111111515151616161919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F202020 2020202121212020202020202020201E1E1E1D1D1D1C1C1C1B1B1B191919161616141414111111 0F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 0303030202020000000000000000000000000000000000000000004E4E4EFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F 0000000000000000000000000000000000000000000A0A0A151515151515161616161616161616 161616161616171717171717171717171717171717171717181818181818181818181818191919 1919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020 202020212121212121212121222222222222222222222222232323232323232323242424242424 242424242424252525252525252525262626262626262626262626272727272727272727282828 2828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131 323232323232323232333333333333343434343434353535353535353535363636363636373737 3737373838383838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C 3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242 4242424343434343434444444949494E4E4E5252525555555959595D5D5D616161646464676767 6B6B6B6B6B6B7070707171717474747777777979797B7B7B7E7E7E808080818181838383848484 8585858787878787878989898A8A8A8A8A8A8B8B8B8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D 8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090 919191919191919191919191929292929292929292929292939393939393939393939393949494 949494949494959595959595959595969696969696969696979797979797979797989898989898 9898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C 9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0 A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A2A2A2A3A3A3242222050101050101050101 0501010501010501014644448E8E8EAEAEAEAEAEAEADADADADADADADADADACACACACACACACACAC ABABABABABABABABABAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7 A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2 A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A09E9E9E9F9F9F9E9E9E9D9D9D9D9D9D9C9C9C 9B9B9B9999999999999999999696969696969696969393939292929191919090908E8E8E8D8D8D 8B8B8B8989898787878585858585858282828080807F7F7F7D7D7D7A7A7A787878767676747474 7171717070706D6D6D171717000000000000000000000000000000000000000000000000000000 0000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000 000000000000000000000000000000000000000000000000262626474747464646464646454545 4444444444444343434343434242424242424141414141414040404040403F3F3F3F3F3F3E3E3E 3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838 383838373737373737363636363636353535353535343434343434333333333333323232323232 3131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C 2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727262626262626252525 252525252525242424242424242424232323232323232323222222222222222222212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818151515 020202000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414000000000000 000000000000000000000000000000020202020202020202020202020202020202020202020202 020202020202010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909090909091616161919192020202626262828282D2D2D3131313535353636363838383B3B3B 3D3D3D3F3F3F3F3F3F3F3F3F3F3F3F4141414141413F3F3F3F3F3F3B3B3B3A3A3A363636353535 3131312D2D2D282828242424202020191919101010090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF969696000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090C0C0C0E0E0E1111111515151616161919191A1A1A1C1C1C1D1D1D1E1E1E 1F1F1F2020202020202121212020202020202020201E1E1E1D1D1D1C1C1C1B1B1B191919161616 1414141111110F0F0F0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 0303030303030303030303030000000000000000000000000000000000000000001C1C1CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF9E9E9E0000000000000000000000000000000000000000000A0A0A151515151515161616 161616161616161616161616171717171717171717171717171717171717181818181818181818 1818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121222222222222222222222222232323232323232323 242424242424242424252525252525252525252525262626262626262626272727272727272727 2727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030 313131313131323232323232333333333333333333343434343434353535353535363636363636 3636363737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C 3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141 4242424242424242424343434343434444444747474D4D4D5151515555555757575C5C5C5F5F5F 6262626666666969696B6B6B6E6E6E7171717474747676767878787B7B7B7D7D7D7F7F7F808080 8383838484848585858686868787878989898989898A8A8A8B8B8B8C8C8C8C8C8C8C8C8C8D8D8D 8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090 909090919191919191919191919191929292929292929292929292939393939393939393939393 949494949494949494959595959595959595969696969696969696979797979797979797989898 9898989898989999999999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C 9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F9F9F9FA0A0A0 A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3252323050101 0501010501010501010501010501014644448D8D8DAEAEAEAEAEAEADADADADADADADADADACACAC ACACACABABABABABABABABABAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8 A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3 A3A3A3A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9D9D9D 9D9D9D9D9D9D9B9B9B9A9A9A9A9A9A989898989898969696969696949494939393919191909090 8F8F8F8D8D8D8D8D8D8B8B8B8989898787878585858484848282827F7F7F7D7D7D7B7B7B797979 787878757575737373707070707070171717000000000000000000000000000000000000000000 0000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0A0A0A000000000000000000000000000000000000000000000000000000262626474747464646 4646464545454444444444444343434343434242424242424141414141414040404040403F3F3F 3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939 383838383838383838373737373737363636363636353535353535343434343434333333333333 3232323232323131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D 2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727262626 262626252525252525252525242424242424242424232323232323232323222222222222222222 2121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919 181818151515020202000000000000000000000000000000000000000000000000000000131313 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9141414 000000000000000000000000000000000000000000020202020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000050505A4A4A4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909090909091010101616161D1D1D2424242626262A2A2A2F2F2F333333363636 3636363A3A3A3D3D3D3F3F3F4141414141414141414141414141414141413F3F3F3D3D3D3B3B3B 3838383636363333332F2F2F2A2A2A262626202020191919161616090909090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF999999 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090C0C0C0E0E0E1111111515151616161919191A1A1A1C1C1C 1D1D1D1E1E1E1F1F1F2020202020202121212020202020202020201E1E1E1D1D1D1C1C1C1B1B1B 1919191616161414141111110F0F0F0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303010101000000000000000000000000000000000000 000000E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF9D9D9D0000000000000000000000000000000000000000000A0A0A151515 151515161616161616161616161616161616171717171717171717171717171717181818181818 1818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 1F1F1F202020202020202020212121212121212121212121222222222222222222232323232323 232323232323242424242424242424252525252525252525252525262626262626262626272727 2727272727272727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030 303030303030313131313131323232323232333333333333343434343434343434353535353535 3636363636363737373737373737373838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B 3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040 4141414141414242424242424343434343434343434444444747474C4C4C4F4F4F535353565656 5A5A5A5D5D5D6161616565656868686A6A6A6E6E6E7070707373737676767878787A7A7A7C7C7C 7E7E7E8080808181818383838585858585858787878888888989898A8A8A8B8B8B8C8C8C8C8C8C 8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090 909090909090909090919191919191919191919191929292929292929292929292939393939393 939393949494949494949494949494959595959595959595969696969696969696979797979797 9797979898989898989898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B 9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F A0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3 2523230501010501010501010501010501010501014644448B8B8BAEAEAEADADADADADADADADAD ACACACACACACACACACABABABABABABABABABAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A8A8A8 A8A8A8A8A8A8A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4 A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09F9F9F9F9F9F 9F9F9F9E9E9E9D9D9D9D9D9D9D9D9D9A9A9A9A9A9A999999989898979797969696949494939393 9191919191919090908D8D8D8D8D8D8C8C8C8989898787878686868585858383838181817E7E7E 7D7D7D7B7B7B787878777777747474727272717171181818000000000000000000000000000000 0000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000000000262626 474747464646464646454545444444444444434343434343424242424242414141414141404040 4040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A 393939393939383838383838383838373737373737363636363636353535353535343434343434 3333333333333232323232323131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727 272727262626262626252525252525252525242424242424242424232323232323232323222222 2222222222222121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919 191919181818181818151515020202000000000000000000000000000000000000000000000000 000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CACACA141414000000000000000000000000000000000000000000020202020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000050505A5A5A5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909091010101616161D1D1D2424242626262A2A2A2F2F2F 3333333636363636363A3A3A3D3D3D3F3F3F4141414141414141414141414141414141413F3F3F 3D3D3D3B3B3B3A3A3A3636363333332F2F2F2A2A2A262626202020191919161616101010090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF9C9C9C000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090C0C0C0E0E0E111111151515161616191919 1A1A1A1C1C1C1D1D1D1E1E1E1F1F1F2020202020202121212020202020202020201E1E1E1D1D1D 1C1C1C1B1B1B1919191616161414141111110F0F0F0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303020202000000000000000000000000 000000000000000000B8B8B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F000000000000000000000000000000000000000000 0A0A0A151515161616161616161616161616161616161616171717171717171717171717171717 1818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222 232323232323232323232323242424242424242424252525252525252525252525262626262626 2626262727272727272727272727272828282828282828282929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F 2F2F2F303030303030313131313131313131323232323232333333333333343434343434353535 3535353535353636363636363737373737373838383838383838383939393939393A3A3A3A3A3A 3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040 4040404141414141414141414242424242424343434343434444444444444444444A4A4A4D4D4D 5252525555555959595D5D5D6060606464646767676969696C6C6C707070727272757575777777 7A7A7A7B7B7B7E7E7E7F7F7F8181818383838484848686868787878888888A8A8A8B8B8B8B8B8B 8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F 909090909090909090909090919191919191919191919191929292929292929292929292939393 939393939393939393949494949494949494959595959595959595969696969696969696979797 9797979797979898989898989898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B 9B9B9B9C9C9C9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F 9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3 A3A3A3A4A4A4252323050101050101050101050101050101050101464444898989ADADADADADAD ADADADACACACACACACACACACABABABABABABABABABABABABAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9 A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4 A4A4A4A4A4A4A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A0 9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9D9D9D9C9C9C9B9B9B9A9A9A9A9A9A999999979797969696 9595959494949292929292929090908F8F8F8D8D8D8D8D8D8A8A8A888888888888858585838383 8181818080807D7D7D7C7C7C797979777777767676747474707070181818000000000000000000 0000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000 000000262626474747464646464646454545444444444444434343434343424242414141414141 4141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B 3A3A3A3A3A3A393939393939383838383838383838373737373737363636363636353535353535 3434343434343333333333333232323232323131313131313030303030302F2F2F2F2F2F2E2E2E 2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828 282828272727272727262626262626252525252525252525242424242424242424232323232323 2323232222222222222222222121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E 1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A 1A1A1A191919191919181818181818151515020202000000000000000000000000000000000000 000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDBDBDB171717000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000D0D0DB5B5B5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909091010101616161D1D1D202020262626 2828282F2F2F3333333636363636363A3A3A3D3D3D3F3F3F414141414141414141424242424242 4242424141413F3F3F3B3B3B3A3A3A3636363535353131312A2A2A2828282424241D1D1D161616 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF9E9E9E000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090C0C0C0E0E0E111111151515 1616161919191A1A1A1C1C1C1D1D1D1E1E1E1F1F1F2020202020202121212020202020201E1E1E 1D1D1D1D1D1D1D1D1D1B1B1B1919191616161515151212120F0F0F0D0D0D070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303020202000000000000 000000000000000000000000000000878787FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5000000000000000000000000000000 0000000000000A0A0A151515161616161616161616161616161616161616171717171717171717 1717171717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222 222222222222232323232323232323242424242424242424242424252525252525252525262626 262626262626262626272727272727272727282828282828282828282828292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F303030303030313131313131323232323232323232333333333333343434 343434353535353535353535363636363636373737373737383838383838393939393939393939 3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F 3F3F3F404040404040414141414141424242424242424242434343434343444444444444454545 4A4A4A4D4D4D5252525656565858585D5D5D5F5F5F6464646666666969696C6C6C6F6F6F717171 7575757777777979797B7B7B7D7D7D7F7F7F818181838383858585858585878787888888898989 8B8B8B8B8B8B8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F 8F8F8F8F8F8F909090909090909090909090919191919191919191919191929292929292929292 929292939393939393939393949494949494949494949494959595959595959595969696969696 9696969797979797979797979898989898989898989999999999999999999A9A9A9A9A9A9A9A9A 9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F 9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3 A3A3A3A3A3A3A4A4A4A4A4A4252323050101050101050101050101050101050101464444888888 ADADADADADADADADADACACACACACACACACACABABABABABABABABABAAAAAAAAAAAAAAAAAAA9A9A9 A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5 A5A5A5A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1 A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9C9C9C9D9D9D9C9C9C9A9A9A9A9A9A999999 9898989797979696969595959494949393939292929090908F8F8F8D8D8D8C8C8C8A8A8A888888 8686868484848282828181817F7F7F7C7C7C7B7B7B797979767676757575727272181818000000 0000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000 000000000000000000262626474747464646464646454545444444444444434343434343424242 4141414141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C 3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737373737363636363636 3535353535353434343434343333333333333232323232323131313131313030303030302F2F2F 2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929 292929282828282828272727272727262626262626252525252525252525242424242424242424 2323232323232323232222222222222121212121212121212020202020202020201F1F1F1F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1A1A1A1A1A1A1A1A1A191919191919181818181818151515020202000000000000000000000000 000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF5F5F5171717000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 151515D0D0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF585858000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909090909101010191919 2020202424242828282D2D2D3131313636363636363A3A3A3D3D3D3F3F3F414141414141414141 4242424242424242424141413F3F3F3D3D3D3A3A3A3838383636363131312D2D2D282828242424 1D1D1D161616101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000080808 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E 1111111414141616161818181A1A1A1C1C1C1D1D1D1E1E1E1F1F1F202020202020212121202020 2020201E1E1E1D1D1D1D1D1D1D1D1D1B1B1B1919191616161515151212120F0F0F0D0D0D070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303030303 000000000000000000000000000000000000000000565656FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFABABAB000000000000000000 000000000000000000000000090909151515161616161616161616161616161616161616171717 1717171717171717171717171818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121 222222222222222222222222232323232323232323242424242424242424242424252525252525 252525262626262626262626262626272727272727272727282828282828282828282828292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131323232323232333333333333 333333343434343434353535353535363636363636363636373737373737383838383838393939 3939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E 3F3F3F3F3F3F404040404040404040414141414141424242424242434343434343434343444444 4444444545454848484B4B4B5050505454545959595C5C5C5F5F5F6262626565656868686C6C6C 6F6F6F7171717474747676767878787B7B7B7D7D7D7E7E7E808080828282848484858585868686 8888888A8A8A8A8A8A8B8B8B8B8B8B8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E 8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090919191919191919191919191929292929292 929292929292939393939393939393939393949494949494949494959595959595959595969696 9696969696969797979797979797979898989898989898989999999999999999999A9A9A9A9A9A 9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E 9F9F9F9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2 A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4252323050101050101050101050101050101050101 464444888888ADADADADADADACACACACACACACACACABABABABABABABABABAAAAAAAAAAAAAAAAAA AAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A5A5A5 A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1 A1A1A1A1A1A1A0A0A0A0A0A09F9F9F9F9F9F9E9E9E9E9E9E9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C 9A9A9A9999999999999898989797979696969595959393939292929191919090908E8E8E8C8C8C 8B8B8B8989898888888686868383838383838080807D7D7D7C7C7C7A7A7A787878767676727272 1818180000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000 000000000000000000000000000000262626474747464646454545454545444444444444434343 4242424242424141414141414040404040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D 3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737373737 363636363636353535353535343434343434333333333333323232323232313131313131303030 3030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A 2A2A2A292929292929282828282828272727272727262626262626252525252525252525242424 242424242424232323232323232323222222222222212121212121212121202020202020202020 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919181818181818151515020202000000000000 000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D2D2D000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000191919FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 1010101919191D1D1D2424242828282D2D2D3131313636363636363A3A3A3D3D3D3F3F3F414141 4141414141414242424242424242424141413F3F3F3D3D3D3B3B3B3A3A3A3636363333332D2D2D 2A2A2A2626261D1D1D191919101010090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1A1A1000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C0E0E0E1111111414141616161818181A1A1A1C1C1C1D1D1D1E1E1E1F1F1F202020202020 2121212020202020201E1E1E1D1D1D1D1D1D1D1D1D1B1B1B1919191616161515151212120F0F0F 0D0D0D070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303040404000000000000000000000000000000000000000000242424FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB2B2B2000000 000000000000000000000000000000000000090909151515161616161616161616161616161616 161616171717171717171717171717171717181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121222222222222222222222222232323232323232323242424242424242424242424 252525252525252525262626262626262626262626272727272727272727282828282828282828 2929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C 2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232 333333333333333333343434343434353535353535363636363636373737373737373737383838 3838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D 3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242424242434343434343 4444444444444444444545454545454949495050505353535757575A5A5A5E5E5E626262666666 6868686B6B6B6C6C6C7070707373737575757777777A7A7A7C7C7C7E7E7E808080828282838383 8585858686868787878989898989898A8A8A8B8B8B8C8C8C8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E 8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191919191919191 929292929292929292929292939393939393939393939393949494949494949494959595959595 959595969696969696969696979797979797979797989898989898989898999999999999999999 9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E 9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2 A2A2A2A3A3A3A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4252323050101050101050101050101 050101050101464444878787ACACACACACACACACACACACACABABABABABABABABABABABABAAAAAA AAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6 A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2 A1A1A1A1A1A1A1A1A1A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D 9C9C9C9B9B9B9B9B9B9B9B9B999999989898979797979797959595949494929292929292909090 8F8F8F8D8D8D8B8B8B8A8A8A8989898787878585858282828181817E7E7E7D7D7D7B7B7B797979 777777737373191919000000000000000000000000000000000000000000000000000000000000 2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000 000000000000000000000000000000000000000000262626474747464646454545454545444444 4444444343434242424242424141414141414040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E 3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737 373737363636363636363636353535353535343434343434333333333333323232323232313131 3131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B 2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727262626262626252525252525 252525242424242424242424232323232323232323222222222222212121212121212121202020 2020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919181818181818151515020202 000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F0E0E0E000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000040404676767FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909091010101616161D1D1D2424242828282D2D2D3131313636363636363A3A3A3D3D3D 3F3F3F4141414141414242424444444444444444444242423F3F3F3D3D3D3B3B3B3A3A3A363636 3333332F2F2F2A2A2A262626202020191919161616090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA3A3A3000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C0E0E0E1111111414141616161818181A1A1A1C1C1C1D1D1D1E1E1E1F1F1F 2020202020202121212020202020201F1F1F1E1E1E1E1E1E1D1D1D1C1C1C191919161616151515 1212120F0F0F0D0D0D070707070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404010101000000000000000000000000000000000000010101F0F0F0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF B8B8B8000000000000000000000000000000000000000000080808151515161616161616161616 161616161616171717171717171717171717171717171717181818181818181818181818191919 1919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020 202020212121212121212121222222222222222222222222232323232323232323242424242424 242424252525252525252525252525262626262626262626272727272727272727272727282828 2828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131 323232323232333333333333343434343434343434353535353535363636363636373737373737 3838383838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D 3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141424242424242424242 4343434343434444444444444545454545454545454949494F4F4F5151515555555959595D5D5D 6161616464646666666969696B6B6B6F6F6F7272727474747676767979797B7B7B7D7D7D808080 8181818484848484848585858787878888888989898B8B8B8C8C8C8C8C8C8E8E8E8D8D8D8E8E8E 8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191 919191929292929292929292929292939393939393939393939393949494949494949494959595 959595959595969696969696969696979797979797979797989898989898989898999999999999 9999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D 9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2 A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5252323050101050101 050101050101050101050101464444878787ACACACACACACACACACABABABABABABABABABABABAB AAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7 A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2 A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E 9D9D9D9D9D9D9C9C9C9C9C9C9B9B9B9B9B9B999999999999989898989898969696949494929292 9292929191918F8F8F8E8E8E8C8C8C8A8A8A8888888888888585858383838383838080807E7E7E 7C7C7C797979787878757575191919000000000000000000000000000000000000000000000000 0000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A 000000000000000000000000000000000000000000000000000000262626474747464646454545 4545454444444444444343434242424242424141414141414040404040403F3F3F3F3F3F3F3F3F 3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838 383838373737373737363636363636353535353535353535343434343434333333333333323232 3232323131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C 2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727262626262626 252525252525252525242424242424242424232323232323222222222222222222212121212121 2121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919181818181818 151515020202000000000000000000000000000000000000000000000000000000131313FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD282828 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000191919EEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909090909091616161D1D1D2020202828282D2D2D313131363636363636 3A3A3A3D3D3D3F3F3F4141414141414242424545454545454444444242423F3F3F3D3D3D3B3B3B 3A3A3A3838383535352F2F2F2A2A2A282828202020191919161616101010000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6A6A6000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090E0E0E1111111414141515151818181A1A1A1C1C1C1C1C1C 1E1E1E1F1F1F2020202020202121212020202020201F1F1F1E1E1E1E1E1E1D1D1D1C1C1C1A1A1A 1717171515151212121111110D0D0D0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303040404020202000000000000000000000000000000000000 000000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBFBFBF000000000000000000000000000000000000000000070707151515161616 161616161616161616161616171717171717171717171717171717171717181818181818181818 1818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121222222222222222222232323232323232323232323 242424242424242424252525252525252525252525262626262626262626272727272727272727 2727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131 313131313131323232323232333333333333343434343434353535353535353535363636363636 3737373737373838383838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C 3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242 4242424242424343434343434444444444444545454545454646464949494C4C4C515151545454 5858585B5B5B5E5E5E6262626565656868686B6B6B6E6E6E717171737373767676787878797979 7D7D7D7E7E7E8181818282828484848686868787878888888989898A8A8A8B8B8B8C8C8C8D8D8D 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8F8F8F8F8F8F909090909090909090909090919191 919191919191919191929292929292929292929292939393939393939393939393949494949494 949494959595959595959595969696969696969696979797979797979797989898989898989898 9999999999999999999A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D 9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1 A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5252323 050101050101050101050101050101050101464444878787ACACACACACACABABABABABABABABAB ABABABAAAAAAAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7 A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3 A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E 9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9A9A9A9A9A9A989898989898979797979797 9595959494949292929292928F8F8F8E8E8E8D8D8D8B8B8B898989888888878787858585838383 8181817F7F7F7D7D7D7B7B7B797979777777191919000000000000000000000000000000000000 0000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0A0A0A000000000000000000000000000000000000000000000000000000262626474747 4646464545454545454444444444444343434242424242424141414141414040404040403F3F3F 3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939 393939383838383838373737373737363636363636353535353535353535343434343434333333 3333333232323232323131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727 262626262626252525252525252525242424242424242424232323232323222222222222222222 2121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919 181818181818151515020202000000000000000000000000000000000000000000000000000000 131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDFDFDF191919000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000141414C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909091616161919192020202626262D2D2D313131 3333333535353838383B3B3B3F3F3F414141414141424242424242424242424242424242414141 3F3F3F3D3D3D3B3B3B3838383333333131312D2D2D282828202020191919161616101010090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A8A8A8000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E101010141414151515181818191919 1B1B1B1C1C1C1E1E1E1F1F1F2020202020202121212020202020201F1F1F1F1F1F1F1F1F1D1D1D 1C1C1C1A1A1A1717171616161414141111110D0D0D0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303040404030303000000000000000000000000 0000000000000000008F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC6C6C6000000000000000000000000000000000000000000070707 151515161616161616161616161616161616171717171717171717171717171717171717181818 1818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F202020202020202020212121212121212121212121222222222222222222232323232323 232323232323242424242424242424252525252525252525252525262626262626262626272727 2727272727272727272828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030 303030313131313131323232323232323232333333333333343434343434353535353535363636 3636363636363737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B 3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141 4141414242424242424343434343434343434444444444444545454545454646464646464C4C4C 4F4F4F5252525757575A5A5A5E5E5E6161616464646767676A6A6A6D6D6D707070727272757575 7676767979797C7C7C7E7E7E8080808282828383838484848787878888888989898989898B8B8B 8B8B8B8D8D8D8D8D8D8E8E8E8F8F8F8E8E8E8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090 909090919191919191919191919191929292929292929292939393939393939393939393949494 949494949494959595959595959595969696969696969696979797979797979797989898989898 9898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C 9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1 A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A5A5A5 A5A5A5252323050101050101050101050101050101050101464444878787ABABABABABABABABAB ABABABABABABAAAAAAAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A8A8A8 A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3 A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09F9F9F9F9F9F 9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9B9B9B9B9B9B9A9A9A999999999999 9898989797979595959494949393939292929191918E8E8E8D8D8D8C8C8C8B8B8B888888878787 8585858484848282827F7F7F7D7D7D7B7B7B7A7A7A787878191919000000000000000000000000 0000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000000000 262626464646464646454545454545444444434343434343424242424242414141414141404040 4040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A 3A3A3A393939393939383838383838373737373737363636363636353535353535343434343434 3434343333333333333232323232323131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E 2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828 272727272727262626262626252525252525252525242424242424232323232323232323222222 2222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919 191919191919181818181818151515020202000000000000000000000000000000000000000000 000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD8D8D8202020070707000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000030303181818BEBEBEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000909091010101919191D1D1D242424 2A2A2A2F2F2F3131313333333636363B3B3B3F3F3F414141424242414141414141424242424242 4242424141414141413F3F3F3B3B3B3838383333332F2F2F2D2D2D2828282424241D1D1D161616 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFABABAB000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090E0E0E101010131313151515 1616161919191B1B1B1C1C1C1E1E1E1F1F1F2020202020202121212020202020201F1F1F1F1F1F 1F1F1F1D1D1D1D1D1D1A1A1A1717171616161414141111110D0D0D0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303040404040404000000000000 0000000000000000000000000000005D5D5DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF000000000000000000000000000000000000 000000060606151515161616161616161616161616161616171717171717171717171717171717 1818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222 232323232323232323232323242424242424242424252525252525252525262626262626262626 2626262727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 2F2F2F303030303030313131313131323232323232333333333333333333343434343434353535 3535353636363636363636363737373737373838383838383939393939393A3A3A3A3A3A3A3A3A 3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040 414141414141414141424242424242434343434343444444444444444444454545454545464646 4646464A4A4A4F4F4F5252525656565A5A5A5D5D5D6060606464646666666A6A6A6C6C6C707070 7171717474747777777878787B7B7B7D7D7D7F7F7F818181828282848484868686868686888888 8989898A8A8A8C8C8C8C8C8C8D8D8D8D8D8D8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F909090 909090909090919191919191919191919191929292929292929292929292939393939393939393 939393949494949494949494959595959595959595969696969696969696979797979797979797 9898989898989898989999999999999999999A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C 9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0 A1A1A1A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4 A5A5A5A5A5A5A5A5A5252323050101050101050101050101050101050101464444868686ABABAB ABABABABABABABABABAAAAAAAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A9A9A9A8A8A8A8A8A8 A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4 A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09F9F9F 9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9C9C9C9A9A9A 9999999999999898989797979696969595959494949393939191918F8F8F8E8E8E8D8D8D8B8B8B 8989898989898686868484848383837F7F7F7E7E7E7C7C7C7B7B7B787878191919000000000000 0000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000 000000000000262626464646464646454545454545444444434343434343424242424242414141 4141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B 3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737363636363636353535353535 3434343434343333333333333333333232323232323131313131313030303030302F2F2F2F2F2F 2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929 282828282828272727272727262626262626252525252525252525242424242424232323232323 2323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A 1A1A1A191919191919191919181818181818151515020202000000000000000000000000000000 000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4777777181818121212020202000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000001010101717175E5E5EEAEAEAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 585858000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909101010161616 1D1D1D2424242A2A2A2D2D2D3131313333333636363B3B3B3F3F3F414141414141414141414141 4242424242424242424141414141413F3F3F3B3B3B3838383535353131312D2D2D2A2A2A242424 1D1D1D191919101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000080808FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFB2B2B2000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090E0E0E101010 1313131515151616161919191B1B1B1C1C1C1E1E1E1F1F1F202020202020212121202020202020 1F1F1F1F1F1F1F1F1F1D1D1D1D1D1D1A1A1A1717171616161414141111110D0D0D0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 0000000000000000000000000000000000000000002A2A2AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE000000000000000000000000 000000000000000000050505151515161616161616161616161616161616171717171717171717 1717171717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222 222222222222232323232323232323242424242424242424242424252525252525252525262626 262626262626262626272727272727272727282828282828282828282828292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F303030303030303030313131313131323232323232333333333333333333343434 3434343535353535353636363636363737373737373737373838383838383939393939393A3A3A 3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F 404040404040414141414141414141424242424242434343434343444444444444454545454545 4545454646464747474A4A4A4D4D4D5050505454545858585B5B5B5F5F5F626262656565686868 6C6C6C6F6F6F7171717373737676767777777A7A7A7B7B7B7F7F7F808080828282848484868686 8787878888888989898A8A8A8C8C8C8C8C8C8D8D8D8D8D8D8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 909090909090909090909090919191919191919191919191929292929292929292929292939393 939393939393949494949494949494949494959595959595969696969696969696979797979797 9797979898989898989898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B 9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0 A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4 A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6252323050101050101050101050101050101050101464444 868686ABABABABABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A9A9A9A8A8A8 A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4 A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0 A0A0A09F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9B9B9B 9B9B9B9A9A9A9A9A9A9A9A9A9898989898989797979696969494949393939292929090908F8F8F 8E8E8E8D8D8D8A8A8A8989898787878585858383838181817F7F7F7D7D7D7A7A7A797979191919 0000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000 000000000000000000000000262626464646464646454545454545444444434343434343424242 4242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C 3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737363636363636 353535353535343434343434333333333333333333323232323232313131313131303030303030 2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A 292929292929282828282828272727272727262626262626252525252525242424242424242424 2323232323232323232222222222222222222121212121212121212020202020202020201F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1A1A1A1A1A1A1A1A1A191919191919191919181818181818151515020202000000000000000000 000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCC2C2C2 9A9A9A7A7A7A767676767676767676767676767676767676767676767676767676767676767676 767676767676767676767676767676767676767676767676767676767676767676767676767676 767676767676767676767676767676767676797979939393BABABAF8F8F8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 1010101616161919192020202828282D2D2D3131313333333636363A3A3A3D3D3D3F3F3F414141 4141414141414242424242424242424141414141413F3F3F3D3D3D3A3A3A3636363131312F2F2F 2A2A2A2424241D1D1D191919161616090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBBBB000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C1010101313131515151616161A1A1A1C1C1C1C1C1C1D1D1D1E1E1E202020212121212121 2121212020201F1F1F1E1E1E1E1E1E1D1D1D1D1D1D1B1B1B1919191717171414141111110F0F0F 0D0D0D070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 040404040404010101000000000000000000000000000000000000010101EEEEEEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEE000000000000 000000000000000000000000000000030303151515161616161616161616161616161616171717 1717171717171717171717171818181818181818181818181818181919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121 222222222222222222222222232323232323232323242424242424242424242424252525252525 252525262626262626262626262626272727272727272727282828282828282828282828292929 2929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232333333333333 343434343434343434353535353535363636363636373737373737373737383838383838393939 3939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F 3F3F3F3F3F3F404040404040414141414141424242424242424242434343434343444444444444 4545454545454646464646464747474747474B4B4B4F4F4F5353535656565A5A5A5E5E5E616161 6565656767676B6B6B6D6D6D7070707272727474747676767979797B7B7B7E7E7E808080818181 8383838585858686868787878989898989898B8B8B8C8C8C8C8C8C8E8E8E8E8E8E8F8F8F8F8F8F 8F8F8F8F8F8F909090909090909090909090919191919191919191919191929292929292929292 939393939393939393939393949494949494949494959595959595959595969696969696969696 9797979797979797979898989898989898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B 9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F A0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4 A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6252323050101050101050101050101050101 050101464444868686AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A9A9A9 A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5 A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1 A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C 9C9C9C9B9B9B9B9B9B9B9B9B9A9A9A999999999999989898969696969696959595949494939393 9191918F8F8F8E8E8E8D8D8D8B8B8B8989898787878585858484848181817F7F7F7D7D7D7A7A7A 7A7A7A1919190000000000000000000000000000000000000000000000000000000000002F2F2F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000 000000000000000000000000000000000000262626464646464646454545444444444444434343 4343434242424242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D 3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737 363636363636353535353535343434343434333333333333323232323232323232313131313131 3030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A 2A2A2A292929292929292929282828282828272727272727262626262626252525252525242424 242424242424232323232323232323222222222222222222212121212121212121202020202020 2020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818151515020202000000 000000000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909091010101616161919192020202626262A2A2A2F2F2F3131313636363A3A3A3D3D3D 3F3F3F4141414141414141414242424242424242424141414141413F3F3F3D3D3D3A3A3A363636 3333332F2F2F2A2A2A262626202020191919161616101010090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4C4C4000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C1010101313131515151616161919191B1B1B1C1C1C1D1D1D1E1E1E202020 2121212121212121212121211F1F1F1E1E1E1F1F1F1D1D1D1D1D1D1B1B1B191919171717141414 1212120F0F0F0D0D0D070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303040404040404020202000000000000000000000000000000000000000000B8B8B8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD 010101000000000000000000000000000000000000020202151515161616161616161616161616 161616171717171717171717171717171717181818181818181818181818181818191919191919 1919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121 212121212121222222222222222222222222232323232323232323242424242424242424242424 252525252525252525262626262626262626262626272727272727272727282828282828282828 2929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D 2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232323232 333333333333343434343434343434353535353535363636363636373737373737383838383838 3838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E 3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242424242434343434343434343 4444444444444545454545454646464646464747474747474B4B4B4D4D4D515151555555595959 5C5C5C5F5F5F6464646666666A6A6A6C6C6C6F6F6F7070707474747676767878787B7B7B7D7D7D 8080808181818282828484848686868686868787878989898B8B8B8C8C8C8D8D8D8D8D8D8D8D8D 8F8F8F8F8F8F8F8F8F8F8F8F909090909090909090919191919191919191919191929292929292 929292929292939393939393939393939393949494949494949494959595959595959595969696 9696969696969797979797979898989898989898989999999999999999999A9A9A9A9A9A9A9A9A 9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F 9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3 A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6252323050101050101050101 050101050101050101464444858585AAAAAAAAAAAAAAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A6A6A6A5A5A5 A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1 A1A1A1A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D 9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A999999989898979797969696959595 9494949393939191919090908E8E8E8D8D8D8C8C8C8A8A8A898989868686848484828282808080 7E7E7E7B7B7B7A7A7A191919000000000000000000000000000000000000000000000000000000 0000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000 000000000000000000000000000000000000000000000000262626464646464646454545444444 4444444343434343434242424242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E 3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838383838 373737373737363636363636353535353535343434343434333333333333323232323232313131 3131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B 2B2B2B2A2A2A2A2A2A292929292929282828282828282828272727272727262626262626252525 252525242424242424242424232323232323232323222222222222222222212121212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818151515 020202000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101919191D1D1D2626262A2A2A2F2F2F313131353535 3838383D3D3D3F3F3F3F3F3F4141414141414242424242424242424141414141413F3F3F3D3D3D 3B3B3B3636363535353131312D2D2D262626202020191919161616101010090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCECECE000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C1010101313131515151616161919191B1B1B1C1C1C1D1D1D 1E1E1E2020202121212121212121212121212020201F1F1F1F1F1F1E1E1E1D1D1D1B1B1B191919 1717171515151212120F0F0F0D0D0D070707070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303030303040404040404030303000000000000000000000000000000000000 0000007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0E0E0E000000000000000000000000000000000000010101151515161616161616 161616161616161616171717171717171717171717171717181818181818181818181818181818 1919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020 202020212121212121212121222222222222222222222222232323232323232323242424242424 242424242424252525252525252525262626262626262626272727272727272727272727282828 2828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131 323232323232333333333333343434343434353535353535353535363636363636373737373737 3838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242434343 4343434343434444444444444545454545454646464646464747474747474848484C4C4C505050 5353535656565B5B5B5E5E5E6363636565656868686B6B6B6E6E6E707070737373757575787878 7A7A7A7C7C7C7E7E7E8080808181818383838484848787878787878989898A8A8A8B8B8B8C8C8C 8D8D8D8D8D8D8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191919191919191 929292929292929292929292939393939393939393949494949494949494959595959595959595 9696969696969696969797979797979797979898989898989898989999999999999999999A9A9A 9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E 9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3 A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6252323050101 050101050101050101050101050101464444848484AAAAAAAAAAAAA9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6 A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2 A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D 9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B999999989898989898979797 9696969595959494949393939191919090908F8F8F8E8E8E8C8C8C8A8A8A898989868686858585 8383838080807E7E7E7C7C7C7979791A1A1A000000000000000000000000000000000000000000 0000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0A0A0A000000000000000000000000000000000000000000000000000000262626464646464646 4545454444444444444343434343434242424141414141414141414040404040403F3F3F3F3F3F 3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939 383838383838373737373737363636363636353535353535343434343434333333333333323232 3232323131313131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C 2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727272727262626 262626252525252525242424242424242424232323232323232323222222222222222222212121 2121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818 181818151515020202000000000000000000000000000000000000000000000000000000131313 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909091010101616161D1D1D2424242828282F2F2F 3131313535353838383B3B3B3F3F3F3F3F3F3F3F3F414141424242424242424242414141414141 3F3F3F3F3F3F3D3D3D3838383535353131312D2D2D2828282020201D1D1D191919101010090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E1111111414141616161919191B1B1B 1C1C1C1D1D1D1E1E1E2020202121212121212121212121212020201F1F1F1F1F1F1E1E1E1D1D1D 1B1B1B1919191717171515151212121111110D0D0D0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303040404040404040404000000000000000000000000 000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000000000000000000000161616 161616161616161616161616161616171717171717171717171717171717181818181818181818 1818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121222222222222222222222222232323232323232323 242424242424242424252525252525252525252525262626262626262626272727272727272727 2727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131 313131323232323232323232333333333333343434343434353535353535363636363636363636 3737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C 3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242 424242434343434343444444444444444444454545454545464646474747474747484848484848 4C4C4C4E4E4E5252525555555B5B5B5D5D5D6161616464646666666B6B6B6C6C6C6F6F6F717171 7474747676767878787B7B7B7D7D7D7F7F7F808080838383848484868686868686888888898989 8B8B8B8B8B8B8D8D8D8D8D8D8F8F8F8F8F8F8F8F8F909090909090909090909090919191919191 919191919191929292929292929292939393939393939393939393949494949494949494959595 959595959595969696969696969696979797979797979797989898989898989898999999999999 9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E 9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2 A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6 252323050101050101050101050101050101050101464444848484A9A9A9A9A9A9A9A9A9A9A9A9 A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A6A6A6A6A6A6 A6A6A6A5A5A5A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2 A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E 9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B999999999999 9999999898989696969595959595959393939292929191919090908E8E8E8D8D8D8B8B8B888888 8787878585858383838080807F7F7F7C7C7C7979791A1A1A000000000000000000000000000000 0000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000000000262626 464646454545454545444444444444434343424242424242414141414141404040404040404040 3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939 393939383838383838383838373737373737363636363636353535353535343434343434333333 3333333232323232323131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D 2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727 262626262626262626252525252525242424242424242424232323232323232323222222222222 2222222121212121212121212020202020202020201F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919 191919181818181818151515020202000000000000000000000000000000000000000000000000 000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909101010161616191919202020 2828282D2D2D3131313535353838383B3B3B3D3D3D3F3F3F3F3F3F414141424242424242424242 4141414141413F3F3F3F3F3F3D3D3D3A3A3A3636363333332F2F2F2828282020201D1D1D191919 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE0E0E0000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090C0C0C0E0E0E111111141414161616 1818181A1A1A1C1C1C1D1D1D1E1E1E2020202121212121212121212121212020201F1F1F202020 1E1E1E1D1D1D1B1B1B1919191717171515151212121111110D0D0D0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404010101000000 000000000000000000000000000000101010FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E2E2E000000000000000000000000000000000000 000000141414161616161616161616161616161616171717171717171717171717171717181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F202020202020202020202020212121212121212121222222222222222222222222232323 232323232323242424242424242424252525252525252525252525262626262626262626272727 2727272727272727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030 303030313131313131323232323232323232333333333333343434343434353535353535363636 3636363636363737373737373838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B 3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141 414141424242424242434343434343444444444444454545454545464646464646474747474747 4848484848484949494C4C4C5151515454545858585D5D5D5F5F5F6262626666666969696B6B6B 6E6E6E7070707272727575757777777A7A7A7C7C7C7E7E7E7F7F7F818181828282858585868686 8888888989898A8A8A8B8B8B8C8C8C8D8D8D8E8E8E9090908F8F8F909090909090909090909090 919191919191919191929292929292929292929292939393939393939393939393949494949494 949494959595959595959595969696969696979797979797979797989898989898989898999999 9999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D 9D9D9D9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2 A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6 A6A6A6A7A7A7252323050101050101050101050101050101050101464444838383A9A9A9A9A9A9 A9A9A9A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A6A6A6 A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3 A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E 9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A 9A9A9A9999999898989797979797979696969494949393939292929191919090908F8F8F8C8C8C 8A8A8A8989898787878585858484848282827F7F7F7C7C7C7A7A7A1A1A1A000000000000000000 0000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000 000000262626464646454545454545444444444444434343424242424242414141414141404040 4040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A 3A3A3A393939393939383838383838373737373737373737363636363636353535353535343434 3434343333333333333232323232323131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E 2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828 272727272727262626262626252525252525252525242424242424242424232323232323232323 2222222222222222222121212121212121212020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A 191919191919191919181818181818151515020202000000000000000000000000000000000000 000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909101010161616 1919192020202626262A2A2A2F2F2F3535353838383A3A3A3B3B3B3F3F3F414141414141424242 4242424444444242424242424141413F3F3F3D3D3D3A3A3A3636363535353131312A2A2A262626 1D1D1D161616101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEAEAEA000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E111111 1414141515151818181A1A1A1C1C1C1D1D1D1E1E1E202020212121212121212121212121202020 2020202020201F1F1F1D1D1D1C1C1C1A1A1A1919191515151212121111110D0D0D0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 020202000000000000000000000000000000000000000000D5D5D5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E3E3E000000000000000000000000 000000000000000000131313161616161616161616161616161616171717171717171717171717 1717171818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222222222 232323232323232323232323242424242424242424252525252525252525252525262626262626 2626262727272727272727272727272828282828282828282929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 2F2F2F303030303030313131313131323232323232333333333333333333343434343434353535 3535353636363636363737373737373737373838383838383939393939393A3A3A3A3A3A3A3A3A 3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040 414141414141424242424242424242434343434343444444444444454545454545464646464646 4747474747474848484848484949494949494F4F4F5353535757575B5B5B5D5D5D616161646464 6767676A6A6A6C6C6C6F6F6F7171717575757777777979797B7B7B7D7D7D7F7F7F818181828282 8484848585858686868989898A8A8A8C8C8C8B8B8B8C8C8C8E8E8E8F8F8F909090909090909090 909090919191919191919191919191929292929292929292929292939393939393939393949494 949494949494959595959595959595969696969696969696979797979797979797989898989898 9898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D 9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1 A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5 A6A6A6A6A6A6A6A6A6A7A7A7252323050101050101050101050101050101050101464444838383 A9A9A9A9A9A9A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7 A6A6A6A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3 A3A3A3A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F 9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B 9A9A9A9A9A9A9999999A9A9A999999979797979797969696959595939393929292919191909090 8E8E8E8C8C8C8C8C8C8989898888888585858383838282827F7F7F7D7D7D7A7A7A1A1A1A000000 0000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000 000000000000000000262626464646454545454545444444434343434343424242424242414141 4141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B 3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737363636363636363636353535 3535353434343434343333333333333232323232323131313131313030303030302F2F2F2F2F2F 2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929 282828282828272727272727262626262626252525252525252525242424242424242424232323 2323232323232222222222222222222121212121212020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A191919191919191919181818181818151515020202000000000000000000000000 000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF585858000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091616161919192020202424242828282D2D2D3333333636363838383B3B3B3F3F3F414141 4141414242424444444545454444444242424141413F3F3F3B3B3B383838363636353535313131 2D2D2D2828281D1D1D191919101010090909090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000080808 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101060606060606090909 0E0E0E1111111414141515151818181A1A1A1C1C1C1D1D1D1E1E1E202020212121212121212121 2121212020202020202020201F1F1F1D1D1D1C1C1C1A1A1A1919191515151212121111110D0D0D 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303040404 0404040404040303030000000000000000000000000000000000000000009C9C9CFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D4D4D000000000000 000000000000000000000000000000121212161616161616161616161616161616171717171717 1717171717171717171818181818181818181818181919191919191919191919191A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222 222222222222232323232323232323232323242424242424242424252525252525252525252525 262626262626262626272727272727272727282828282828282828282828292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F303030303030313131313131323232323232333333333333333333343434 3434343535353535353636363636363737373737373737373838383838383939393939393A3A3A 3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F 404040404040414141414141424242424242424242434343434343444444444444454545454545 4646464646464747474747474848484848484949494A4A4A4D4D4D5050505555555858585D5D5D 5F5F5F6262626666666A6A6A6C6C6C6F6F6F7171717474747676767979797B7B7B7D7D7D7E7E7E 8181818383838484848585858686868888888989898A8A8A8C8C8C8C8C8C8E8E8E8E8E8E8F8F8F 909090909090909090919191919191919191919191929292929292929292939393939393939393 939393949494949494949494959595959595959595969696969696969696979797979797979797 9898989898989898989999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C 9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1 A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5 A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7262424050101050101050101050101050101050101 464444828282A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7 A7A7A7A6A6A6A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3 A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09F9F9F 9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B 9B9B9B9A9A9A9A9A9A9A9A9A999999999999999999979797979797979797959595939393929292 9292929090908F8F8F8D8D8D8C8C8C8A8A8A8888888686868484848383838080807E7E7E7B7B7B 1A1A1A0000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000 000000000000000000000000000000262626464646454545454545444444434343434343424242 4242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C 3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737363636363636 353535353535343434343434343434333333333333323232323232313131313131303030303030 2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A 292929292929282828282828272727272727262626262626252525252525252525242424242424 2424242323232323232323232222222222222121212121212121212020202020202020201F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818141414020202000000000000 000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101919191D1D1D2424242828282D2D2D3333333636363838383A3A3A 3D3D3D3F3F3F4141414242424444444545454444444242424141413F3F3F3D3D3D3A3A3A363636 3535353131312D2D2D282828202020191919161616101010090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0606060909090E0E0E1111111414141515151818181A1A1A1C1C1C1D1D1D1E1E1E202020212121 2121212121212121212020202020201F1F1F1F1F1F1D1D1D1C1C1C1A1A1A191919161616121212 1111110D0D0D0A0A0A070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404000000000000000000000000000000000000000000646464 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D5D5D 000000000000000000000000000000000000000000101010161616161616161616161616161616 171717171717171717171717171717181818181818181818181818191919191919191919191919 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121 212121222222222222222222232323232323232323232323242424242424242424252525252525 252525252525262626262626262626272727272727272727282828282828282828282828292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232333333333333 343434343434343434353535353535363636363636373737373737373737383838383838393939 3939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F 3F3F3F3F3F3F404040404040414141414141424242424242434343434343434343444444444444 4545454545454646464646464747474747474848484949494949494A4A4A4A4A4A505050535353 5757575A5A5A5D5D5D6161616464646868686A6A6A6D6D6D6F6F6F7272727474747777777A7A7A 7B7B7B7E7E7E8080808181818383838484848585858888888989898B8B8B8B8B8B8C8C8C8E8E8E 8E8E8E8F8F8F909090909090909090919191919191919191919191929292929292929292939393 939393939393939393949494949494949494959595959595959595969696969696969696979797 9797979898989898989898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B 9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0 A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4 A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A7A7A7262424050101050101050101050101 050101050101464444828282A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7 A7A7A7A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4A4A4A4 A3A3A3A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A0 9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C 9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A999999999999999999989898979797969696969696 9494949393939292929191919090908E8E8E8C8C8C8A8A8A888888868686858585838383808080 7E7E7E7C7C7C1A1A1A000000000000000000000000000000000000000000000000000000000000 2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000 000000000000000000000000000000000000000000262626464646454545444444444444434343 4343434242424242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D 3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737 363636363636353535353535343434343434333333333333333333323232323232313131313131 3030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2A2A2A2A2A2A292929292929282828282828272727272727262626262626252525252525252525 242424242424242424232323232323222222222222222222212121212121212121202020202020 2020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919181818181818181818141414020202 000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101919191D1D1D2020202828282D2D2D313131353535 3636363A3A3A3D3D3D3F3F3F4141414242424444444545454444444242424141413F3F3F3D3D3D 3A3A3A3636363636363333332D2D2D282828202020191919161616101010090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF070707000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090E0E0E1111111313131515151818181A1A1A1C1C1C1C1C1C1E1E1E 1F1F1F2121212121212121212121212020201F1F1F1F1F1F1F1F1F1D1D1D1C1C1C1B1B1B191919 1616161414141111110F0F0F0D0D0D070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404010101000000000000000000000000000000 0000002B2B2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF6D6D6D0000000000000000000000000000000000000000000F0F0F161616161616161616 161616161616171717171717171717171717171717181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020212121 212121212121212121222222222222222222232323232323232323232323242424242424242424 252525252525252525252525262626262626262626272727272727272727282828282828282828 2828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C 2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232 333333333333343434343434343434353535353535363636363636373737373737383838383838 3838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E 3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242434343434343434343 4444444444444545454545454646464646464747474848484848484949494949494A4A4A4A4A4A 4E4E4E5252525656565959595C5C5C5F5F5F6363636767676969696C6C6C6E6E6E717171737373 7676767979797A7A7A7D7D7D7E7E7E8080808282828484848585858787878989898A8A8A8B8B8B 8B8B8B8E8E8E8E8E8E8E8E8E8F8F8F909090909090919191919191919191929292929292929292 929292939393939393939393939393949494949494949494959595959595969696969696969696 9797979797979797979898989898989898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B 9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F A0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4 A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8262424050101050101 050101050101050101050101464444818181A8A8A8A8A8A8A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7 A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A4A4A4A4A4A4 A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A0A0A0 A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C 9C9C9C9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A999999999999999999989898999999989898 9696969696969595959393939292929090908F8F8F8E8E8E8B8B8B8B8B8B888888868686848484 8282828181817D7D7D7C7C7C1A1A1A000000000000000000000000000000000000000000000000 0000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A 000000000000000000000000000000000000000000000000000000262626464646454545444444 4444444343434343434242424242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E 3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838383838 373737373737363636363636353535353535343434343434333333333333323232323232323232 3131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828272727272727262626262626252525 252525252525242424242424232323232323232323222222222222222222212121212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919181818181818181818 141414020202000000000000000000000000000000000000000000000000000000131313FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909091010101616161D1D1D2020202626262A2A2A 3131313333333636363838383B3B3B3F3F3F414141424242444444454545444444424242414141 4141413D3D3D3A3A3A3838383636363333332D2D2D2828282020201D1D1D191919101010090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF101010 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090E0E0E1111111313131515151818181A1A1A1C1C1C 1C1C1C1E1E1E1F1F1F2121212121212121212121212020201F1F1F1F1F1F1F1F1F1D1D1D1D1D1D 1B1B1B1A1A1A1616161414141111110F0F0F0D0D0D0A0A0A020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404020202000000000000000000 000000000000000000010101EEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF7D7D7D0000000000000000000000000000000000000000000E0E0E161616 161616161616161616161616171717171717171717171717171717181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020 202020212121212121212121212121222222222222222222232323232323232323232323242424 242424242424252525252525252525262626262626262626262626272727272727272727282828 2828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131 323232323232333333333333343434343434343434353535353535363636363636373737373737 3838383838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242434343 434343444444444444444444454545454545464646474747474747484848484848494949494949 4A4A4A4A4A4A4B4B4B5151515454545858585A5A5A5F5F5F6161616565656767676B6B6B6D6D6D 6F6F6F7272727575757878787979797C7C7C7D7D7D808080818181838383858585868686888888 8989898A8A8A8B8B8B8C8C8C8E8E8E8F8F8F8F8F8F919191919191919191919191929292929292 929292929292929292939393939393939393949494949494949494959595959595959595969696 9696969696969797979797979797979898989898989898989999999999999A9A9A9A9A9A9A9A9A 9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F 9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3 A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8262424 050101050101050101050101050101050101464444818181A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7 A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A4A4A4 A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1 A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D 9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A999999999999999999989898 9898989797979696969696969595959393939292929191919090908E8E8E8C8C8C8B8B8B898989 8787878585858383838181817E7E7E7B7B7B1A1A1A000000000000000000000000000000000000 0000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0A0A0A000000000000000000000000000000000000000000000000000000262626454545 4545454444444444444343434242424242424141414141414040404040404040403F3F3F3F3F3F 3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939 383838383838373737373737363636363636353535353535343434343434333333333333323232 3232323131313131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C 2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929282828282828272727272727262626 262626252525252525242424242424242424232323232323232323222222222222222222212121 2121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818 181818181818141414020202000000000000000000000000000000000000000000000000000000 131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000909091616161919191D1D1D 2424242A2A2A2F2F2F3333333535353636363A3A3A3F3F3F414141424242444444454545444444 4242424141414141413F3F3F3B3B3B3838383636363333332F2F2F2A2A2A242424202020191919 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1A1A1A000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090E0E0E101010131313151515181818 1A1A1A1C1C1C1C1C1C1E1E1E1F1F1F2121212121212121212121212121212020201F1F1F1F1F1F 1E1E1E1D1D1D1B1B1B1A1A1A1717171414141212120F0F0F0D0D0D0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404030303000000 000000000000000000000000000000000000B9B9B9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C8C8C000000000000000000000000000000000000000000 0C0C0C161616161616161616161616161616171717171717171717171717171717181818181818 1818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 202020202020202020212121212121212121212121222222222222222222232323232323232323 232323242424242424242424252525252525252525262626262626262626262626272727272727 2727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131 313131313131323232323232333333333333343434343434353535353535353535363636363636 3737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C 3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242 424242434343434343444444444444454545454545454545464646474747474747484848484848 4949494949494A4A4A4A4A4A4B4B4B4F4F4F5151515656565858585D5D5D5F5F5F636363666666 6969696D6D6D6E6E6E7272727373737676767878787A7A7A7C7C7C7E7E7E808080828282848484 8686868787878787878989898B8B8B8D8D8D8C8C8C8E8E8E8F8F8F909090919191919191919191 919191919191919191939393939393939393939393939393949494949494949494959595959595 9595959696969696969696969797979797979797979898989898989999999999999999999A9A9A 9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E 9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3 A3A3A3A3A3A3A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8 A8A8A8262424050101050101050101050101050101050101464444808080A7A7A7A7A7A7A7A7A7 A7A7A7A7A7A7A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A5A5A5A4A4A4 A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1 A1A1A1A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D 9D9D9D9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A999999999999999999 9898989898989898989797979696969595959494949393939191919191919090908E8E8E8C8C8C 8B8B8B8A8A8A8787878585858383838181817E7E7E7B7B7B1A1A1A000000000000000000000000 0000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000000000 2626264545454545454444444444444343434242424242424141414141414040404040403F3F3F 3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939 393939383838383838383838373737373737363636363636353535353535343434343434333333 3333333232323232323131313131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D 2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828282828272727 272727262626262626252525252525242424242424242424232323232323232323222222222222 2222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919 191919181818181818181818141414020202000000000000000000000000000000000000000000 000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1919191D1D1D2424242828282F2F2F3131313333333636363A3A3A3D3D3D414141424242444444 4545454444444242424141414141413F3F3F3B3B3B3838383636363535352F2F2F2A2A2A262626 202020191919101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF242424000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C101010131313 1515151818181A1A1A1C1C1C1C1C1C1E1E1E1F1F1F212121212121212121212121212121202020 2020202020201E1E1E1D1D1D1B1B1B1A1A1A1717171515151212120F0F0F0D0D0D0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404000000000000000000000000000000000000000000818181FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2A2A2000000000000000000000000000000 000000000000090909161616161616161616161616161616171717171717171717171717171717 1818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222232323 232323232323232323242424242424242424252525252525252525262626262626262626262626 2727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030 303030313131313131313131323232323232333333333333343434343434353535353535353535 3636363636363737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B 3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141 414141424242424242434343434343444444444444454545454545464646464646474747474747 4848484848484949494949494A4A4A4B4B4B4B4B4B4C4C4C4F4F4F5555555757575A5A5A5F5F5F 6262626565656868686B6B6B6D6D6D7070707272727575757777777979797C7C7C7D7D7D7F7F7F 8181818383838484848686868686868888888989898C8C8C8D8D8D8E8E8E8F8F8F8F8F8F909090 919191929292919191919191929292939393939393939393939393939393949494949494949494 959595959595959595969696969696979797979797979797989898989898989898999999999999 9999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E 9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2 A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7 A7A7A7A8A8A8A8A8A8262424050101050101050101050101050101050101464444808080A7A7A7 A7A7A7A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1 A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E 9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A999999 999999999999989898989898989898979797969696959595949494939393929292919191909090 8E8E8E8D8D8D8B8B8B8989898888888484848383838181817E7E7E7C7C7C1A1A1A000000000000 0000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000 000000000000262626454545454545444444434343434343424242424242414141414141404040 4040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A 3A3A3A393939393939383838383838373737373737363636363636363636353535353535343434 3434343333333333333232323232323131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E 2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828 272727272727272727262626262626252525252525242424242424242424232323232323232323 2222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E 1E1E1E1E1E1E1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A 191919191919191919181818181818181818141414020202000000000000000000000000000000 000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 585858000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091010101919191D1D1D2424242828282D2D2D3131313333333636363838383D3D3D414141 4242424444444545454444444242424141414141413F3F3F3B3B3B3838383636363535352F2F2F 2A2A2A2626262020201D1D1D161616090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000080808FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D2D2D000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 1010101313131414141616161A1A1A1C1C1C1C1C1C1E1E1E1F1F1F212121212121212121212121 2121212020202020202020201E1E1E1D1D1D1C1C1C1B1B1B1717171515151212121111110F0F0F 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404010101000000000000000000000000000000000000434343FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDBDBD000000000000000000 000000000000000000000000070707161616161616161616161616161616171717171717171717 1717171717171818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222 222222232323232323232323232323242424242424242424252525252525252525262626262626 2626262626262727272727272727272828282828282828282828282929292929292929292A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F 2F2F2F303030303030313131313131313131323232323232333333333333343434343434353535 3535353535353636363636363737373737373838383838383939393939393939393A3A3A3A3A3A 3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040 414141414141414141424242424242434343434343444444444444454545454545464646464646 4747474747474848484848484949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C525252555555 5959595D5D5D5F5F5F6363636666666868686C6C6C6E6E6E7070707474747575757878787B7B7B 7C7C7C7E7E7E7F7F7F8282828383838585858686868888888989898B8B8B8C8C8C8D8D8D8F8F8F 8F8F8F8F8F8F909090919191919191919191929292939393939393939393939393939393949494 949494949494959595959595959595969696969696979797979797979797989898989898989898 9999999999999999999A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D 9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2 A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6 A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8262424050101050101050101050101050101050101464444 808080A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2A2A2A2 A1A1A1A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E 9E9E9E9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A 9A9A9A999999999999999999989898989898989898979797969696959595959595939393939393 9191919191918E8E8E8C8C8C8B8B8B8A8A8A8888888585858484848080807E7E7E7C7C7C1A1A1A 0000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000 000000000000000000000000262626454545444444444444434343434343424242424242414141 4141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B 3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737363636363636353535353535 3535353434343434343333333333333232323232323131313131313030303030302F2F2F2F2F2F 2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929 282828282828272727272727262626262626262626252525252525242424242424242424232323 2323232323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A191919191919191919181818181818181818141414020202000000000000000000 000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101616161919192020202626262D2D2D3131313333333636363B3B3B 3D3D3D3F3F3F4141414141414242424242424242424141413F3F3F3D3D3D3B3B3B3A3A3A363636 3333332F2F2F2D2D2D262626202020191919161616101010090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF393939000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C1010101111111414141616161919191C1C1C1C1C1C1E1E1E1F1F1F212121212121 2121212121212121212121212020202020201F1F1F1D1D1D1C1C1C1B1B1B191919161616141414 1111110F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404020202000000000000000000000000000000000000090909 F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8000000 000000000000000000000000000000000000050505161616161616161616161616161616171717 1717171717171717171717171818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121 222222222222222222232323232323232323242424242424242424242424252525252525252525 262626262626262626262626272727272727272727282828282828282828292929292929292929 2929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E 2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232323232333333333333343434 3434343535353535353636363636363636363737373737373838383838383939393939393A3A3A 3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F 404040404040414141414141424242424242424242434343434343444444444444454545454545 4646464646464747474747474848484848484949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C 5050505454545757575B5B5B5E5E5E6262626565656767676A6A6A6C6C6C6F6F6F727272757575 7777777979797A7A7A7D7D7D7F7F7F8181818383838484848686868787878989898A8A8A8B8B8B 8C8C8C8E8E8E8F8F8F8F8F8F909090909090919191919191929292939393939393939393939393 939393949494949494949494959595959595969696969696969696979797979797979797989898 9898989898989999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C 9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1 A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6 A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8262424050101050101050101050101050101 0501014644447F7F7FA6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2A2A2A2 A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9E9E9E 9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9A9A9A 9A9A9A9A9A9A999999999999999999989898989898989898979797979797969696959595959595 9494949292929292929090908E8E8E8D8D8D8C8C8C8989898888888686868383838181817E7E7E 7C7C7C1A1A1A0000000000000000000000000000000000000000000000000000000000002F2F2F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000 000000000000000000000000000000000000262626454545444444444444434343434343424242 4242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C 3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737363636363636 353535353535343434343434343434333333333333323232323232313131313131303030303030 2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A 292929292929282828282828272727272727262626262626252525252525252525242424242424 2424242323232323232323232222222222222222222121212121212121212020202020201F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818141414020202000000 000000000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101616161919192020202626262A2A2A313131333333 3636363A3A3A3D3D3D3F3F3F3F3F3F4141414242424242424242424141413F3F3F3D3D3D3D3D3D 3A3A3A3636363535352F2F2F2D2D2D282828202020191919161616101010090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A4A4A000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090C0C0C1010101111111414141616161919191C1C1C1C1C1C1E1E1E1F1F1F 2121212121212121212121212121212121212121212121211F1F1F1D1D1D1C1C1C1B1B1B191919 1616161414141111110F0F0F0D0D0D070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303040404040404040404040404040404030303000000000000000000000000000000 000000000000C2C2C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3F3F3000000000000000000000000000000000000000000030303161616161616161616161616 161616171717171717171717171717171717181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020212121212121 212121212121222222222222222222232323232323232323242424242424242424242424252525 252525252525262626262626262626262626272727272727272727282828282828282828292929 2929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D 2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131323232323232323232333333 333333343434343434353535353535363636363636363636373737373737383838383838393939 3939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E 3F3F3F3F3F3F404040404040414141414141424242424242424242434343434343444444444444 4545454545454646464646464747474747474848484949494949494A4A4A4A4A4A4B4B4B4B4B4B 4C4C4C4C4C4C5050505353535656565A5A5A5D5D5D6060606363636565656969696B6B6B6F6F6F 7171717373737676767878787A7A7A7C7C7C7D7D7D808080838383848484858585868686888888 8989898A8A8A8C8C8C8D8D8D8E8E8E909090909090909090919191919191929292939393939393 939393939393949494949494949494959595959595959595969696969696969696979797979797 9797979898989898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C 9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0 A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5 A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9262424050101050101050101 0501010501010501014644447F7F7FA6A6A6A6A6A6A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A2A2A2A2A2A2 A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F 9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B 9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999989898989898989898979797969696969696 9595959494949494949292929191919090908F8F8F8D8D8D8C8C8C8A8A8A878787868686838383 8282827E7E7E7C7C7C1A1A1A000000000000000000000000000000000000000000000000000000 0000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000 000000000000000000000000000000000000000000000000252525454545444444444444434343 4242424242424141414141414040404040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D 3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838383838373737373737 363636363636353535353535343434343434333333333333323232323232323232313131313131 3030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2A2A2A2A2A2A292929292929282828282828272727272727262626262626252525252525252525 242424242424242424232323232323232323222222222222212121212121212121202020202020 2020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818141414 020202000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909091616161919191D1D1D2424242A2A2A 2F2F2F3333333636363A3A3A3D3D3D3F3F3F3F3F3F4141414242424242424242424141413F3F3F 3F3F3F3D3D3D3B3B3B3838383535353131312D2D2D282828202020191919161616101010090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B5B5B000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090C0C0C1010101111111414141616161919191C1C1C1C1C1C 1E1E1E1F1F1F2121212121212121212121212121212121212121212121211F1F1F1D1D1D1C1C1C 1B1B1B1919191616161414141212120F0F0F0D0D0D070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404000000000000000000 000000000000000000000000828282FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0E0E0E000000000000000000000000000000000000010101161616161616 161616161616161616171717171717171717171717171717181818181818181818181818191919 1919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 212121212121212121212121222222222222222222232323232323232323242424242424242424 242424252525252525252525262626262626262626262626272727272727272727282828282828 2828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131323232323232 323232333333333333343434343434353535353535363636363636363636373737373737383838 3838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E 3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141424242424242434343434343434343 4444444444444545454545454646464646464747474747474848484949494949494A4A4A4A4A4A 4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D5151515353535858585A5A5A5E5E5E606060646464676767 6969696D6D6D6F6F6F7373737474747777777878787B7B7B7C7C7C7F7F7F828282828282848484 8686868888888989898A8A8A8B8B8B8D8D8D8E8E8E8F8F8F909090909090919191919191929292 939393939393939393939393949494949494949494959595959595959595969696969696969696 9797979797979898989898989898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B 9B9B9B9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0 A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4 A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A9A9A9272525050101 0501010501010501010501010501014644447E7E7EA5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A2A2A2 A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F 9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B 9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A999999999999999999989898989898989898979797979797 9696969595959595959595959494949292929292929090908E8E8E8E8E8E8B8B8B8A8A8A888888 8585858484848181817E7E7E7B7B7B1A1A1A000000000000000000000000000000000000000000 0000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0A0A0A000000000000000000000000000000000000000000000000000000252525454545444444 4343434343434242424242424141414141414040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E 3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838383838 373737373737363636363636353535353535343434343434333333333333323232323232313131 3131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828272727272727262626262626252525 252525252525242424242424232323232323232323222222222222222222212121212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818 171717141414020202000000000000000000000000000000000000000000000000000000131313 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000909091010101616161D1D1D 2424242A2A2A2F2F2F3131313535353838383B3B3B3F3F3F3F3F3F414141424242424242424242 4141413F3F3F3F3F3F3D3D3D3B3B3B3838383535353131312D2D2D2828282424241D1D1D161616 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 6C6C6C000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060C0C0C0E0E0E1111111414141616161A1A1A 1C1C1C1C1C1C1D1D1D1F1F1F202020212121222222222222212121212121212121212121202020 1F1F1F1D1D1D1D1D1D1B1B1B1717171515151212121111110D0D0D0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303040404040404040404040404040404040404000000 000000000000000000000000000000000000424242FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF292929000000000000000000000000000000000000000000 141414161616161616161616161616171717171717171717171717171717181818181818181818 1818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020212121212121212121212121222222222222222222232323232323232323242424 242424242424242424252525252525252525262626262626262626262626272727272727272727 2828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131 323232323232323232333333333333343434343434353535353535363636363636363636373737 3737373838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242424242434343 434343434343444444444444454545454545464646464646474747484848484848494949494949 4A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E5151515656565858585C5C5C606060 6262626565656868686B6B6B6E6E6E7171717373737575757777777979797C7C7C7E7E7E808080 8282828383838585858787878888888989898B8B8B8C8C8C8E8E8E8E8E8E8F8F8F909090919191 919191929292939393939393939393939393949494949494949494959595959595959595969696 9696969797979797979797979898989898989898989999999999999999999A9A9A9A9A9A9A9A9A 9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F A0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4 A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9 2725250501010501010501010501010501010501014644447E7E7EA5A5A5A5A5A5A5A5A5A5A5A5 A5A5A5A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3 A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A0A0A0A09F9F9F 9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C 9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A999999999999999999999999989898989898989898 9797979797979696969595959595959595959494949292929191919090908F8F8F8D8D8D8B8B8B 8A8A8A8888888686868484848181817F7F7F7C7C7C1A1A1A000000000000000000000000000000 0000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000000000252525 4545454444444343434343434242424242424141414141414040404040403F3F3F3F3F3F3E3E3E 3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838 383838373737373737373737363636363636353535353535343434343434333333333333323232 3232323131313131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C 2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828282828272727272727262626 262626252525252525242424242424242424232323232323232323222222222222222222212121 2121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919181818 181818181818171717141414020202000000000000000000000000000000000000000000000000 000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1616161D1D1D2424242828282D2D2D3131313535353838383B3B3B3F3F3F3F3F3F414141424242 4242424242424141413F3F3F3F3F3F3F3F3F3B3B3B3838383636363131312F2F2F2A2A2A242424 1D1D1D191919101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7C7C7C000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060C0C0C0E0E0E111111141414 1616161A1A1A1C1C1C1C1C1C1D1D1D1F1F1F202020212121222222222222212121212121212121 2222222121211F1F1F1D1D1D1D1D1D1B1B1B1717171515151212121111110D0D0D0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404010101000000000000000000000000000000000000080808F7F7F7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF444444000000000000000000000000000000 000000000000121212161616161616161616161616171717171717171717171717171717181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F202020202020202020212121212121212121212121222222222222222222232323232323 232323242424242424242424242424252525252525252525262626262626262626262626272727 2727272727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030 313131313131323232323232323232333333333333343434343434353535353535363636363636 3636363737373737373838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C 3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242 424242434343434343434343444444444444454545454545464646464646474747484848484848 4949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E515151545454575757 5B5B5B5E5E5E6161616565656666666A6A6A6C6C6C7070707171717474747676767878787B7B7B 7D7D7D7F7F7F8181818383838484848686868888888989898B8B8B8C8C8C8D8D8D8E8E8E8E8E8E 8F8F8F919191919191929292939393939393939393939393949494949494949494959595959595 9595959696969696969797979797979797979898989898989898989999999999999999999A9A9A 9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9F9F9F 9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3 A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8 A9A9A9A9A9A92725250501010501010501010501010501010501014644447D7D7DA5A5A5A4A4A4 A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3 A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A0A0A0A0 9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C 9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A999999999999999999989898989898 9898989797979797979797979797979696969696969595959494949292929191919090908F8F8F 8D8D8D8B8B8B8A8A8A8888888686868383838181817E7E7E7C7C7C1A1A1A000000000000000000 0000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000 0000002525254444444444444343434343434242424242424141414141414040404040403F3F3F 3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939 393939383838383838373737373737363636363636353535353535353535343434343434333333 3333333232323232323131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D 2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727 272727262626262626252525252525242424242424242424232323232323232323222222222222 2222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919 191919181818181818181818171717141414020202000000000000000000000000000000000000 000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091010101616161919192020202828282D2D2D2F2F2F3333333636363B3B3B3F3F3F3F3F3F 4141414242424242424242424141414141413F3F3F3F3F3F3D3D3D3A3A3A3636363131312F2F2F 2A2A2A2626261D1D1D191919101010090909090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF8D8D8D000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060C0C0C0E0E0E 1111111414141616161A1A1A1C1C1C1C1C1C1D1D1D1F1F1F202020212121222222222222222222 2121212121212222222121211F1F1F1D1D1D1D1D1D1B1B1B1919191616161414141111110D0D0D 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404020202000000000000000000000000000000000000000000C1C1C1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F000000000000000000 000000000000000000000000101010161616161616161616161616171717171717171717171717 1717171818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222 232323232323232323242424242424242424242424252525252525252525262626262626262626 2626262727272727272727272828282828282828282929292929292929292929292A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F 303030303030313131313131323232323232323232333333333333343434343434353535353535 3636363636363636363737373737373838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B 3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141 414141424242424242434343434343434343444444444444454545454545464646464646474747 4848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E 5252525656565959595D5D5D6060606363636565656969696B6B6B6E6E6E707070737373767676 7878787979797C7C7C7E7E7E8080808181818383838585858787878888888B8B8B8C8C8C8C8C8C 8C8C8C8E8E8E8E8E8E919191919191919191939393939393939393939393949494949494949494 959595959595969696969696969696979797979797979797989898989898989898999999999999 9A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E 9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A3A3A3 A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A7A7A7 A8A8A8A8A8A8A9A9A9A9A9A92725250501010501010501010501010501010501014644447D7D7D A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3 A3A3A3A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0A0A0A0 A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9C9C9C 9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A999999999999999999989898 989898989898989898979797979797979797969696969696969696949494939393929292929292 9090908E8E8E8D8D8D8B8B8B8A8A8A8888888686868383838181817E7E7E7C7C7C1A1A1A000000 0000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000 000000000000000000252525444444444444434343424242424242414141414141414141404040 4040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A 3A3A3A393939393939383838383838373737373737363636363636353535353535343434343434 3434343333333333333232323232323131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828 272727272727262626262626262626252525252525242424242424242424232323232323232323 2222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E 1E1E1E1E1E1E1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A 191919191919191919181818181818181818171717141414020202000000000000000000000000 000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF585858000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909090909091010101919192020202626262A2A2A2D2D2D3131313636363A3A3A 3F3F3F3F3F3F4141414242424242424242424141414141413F3F3F3F3F3F3D3D3D3A3A3A363636 3131312F2F2F2A2A2A262626202020191919161616101010090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000080808 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D9D9D000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090E0E0E1111111414141616161919191B1B1B1C1C1C1D1D1D1F1F1F202020212121222222 2222222222222222222121212222222121211F1F1F1D1D1D1D1D1D1C1C1C191919161616141414 1111110F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303040404 040404040404040404040404040404030303000000000000000000000000000000000000000000 818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A7A7A000000 0000000000000000000000000000000000000E0E0E161616161616161616161616171717171717 1717171717171717171818181818181818181818181919191919191919191919191A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222 222222222222232323232323232323242424242424242424242424252525252525252525262626 262626262626262626272727272727272727282828282828282828292929292929292929292929 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E 2F2F2F2F2F2F303030303030313131313131323232323232323232333333333333343434343434 3535353535353636363636363737373737373737373838383838383939393939393A3A3A3A3A3A 3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040 404040414141414141424242424242434343434343434343444444444444454545454545464646 4646464747474848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D 4E4E4E4E4E4E5252525454545858585C5C5C5F5F5F6262626464646767676969696C6C6C6F6F6F 7171717474747676767979797B7B7B7D7D7D7E7E7E818181828282848484858585878787898989 8A8A8A8B8B8B8B8B8B8D8D8D8E8E8E909090919191919191929292939393939393939393949494 949494949494959595959595969696969696969696979797979797979797989898989898989898 9999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D 9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A2A2A2A2A2A2 A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7 A7A7A7A8A8A8A8A8A8A8A8A8A9A9A9A9A9A9272525050101050101050101050101050101050101 4644447C7C7CA4A4A4A4A4A4A4A4A4A4A4A4A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3 A3A3A3A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0 A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D 9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A999999999999 999999989898989898989898979797979797979797969696969696969696969696949494939393 9292929191919090908E8E8E8D8D8D8B8B8B8A8A8A8888888585858383838181817E7E7E7B7B7B 1A1A1A0000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000 000000000000000000000000000000252525444444434343434343424242424242414141414141 4040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B 3A3A3A3A3A3A393939393939393939383838383838373737373737363636363636353535353535 3434343434343333333333333333333232323232323131313131313030303030302F2F2F2F2F2F 2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929 282828282828272727272727262626262626252525252525252525242424242424242424232323 2323232323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A191919191919191919181818181818181818171717141414020202000000000000 000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909091010101919192020202626262A2A2A2D2D2D313131 3535353A3A3A3F3F3F3F3F3F4141414242424242424242424141414141414141413F3F3F3D3D3D 3A3A3A3636363333332F2F2F2D2D2D282828202020191919161616101010090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEAEAE000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090E0E0E1111111313131616161919191B1B1B1C1C1C1D1D1D1F1F1F202020 2121212222222222222222222222222222222222222222222020201E1E1E1D1D1D1C1C1C1A1A1A 1717171515151212120F0F0F0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404000000000000000000000000000000 000000000000414141FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 9595950000000000000000000000000000000000000000000C0C0C161616161616161616161616 171717171717171717171717171717181818181818181818181818191919191919191919191919 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121 212121222222222222222222232323232323232323242424242424242424242424252525252525 252525262626262626262626262626272727272727272727282828282828282828292929292929 2929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E 2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131323232323232323232333333333333 343434343434353535353535363636363636373737373737373737383838383838393939393939 3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F 3F3F3F404040404040414141414141424242424242434343434343444444444444444444454545 4545454646464747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C 4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F5252525555555A5A5A5C5C5C606060626262666666676767 6B6B6B6D6D6D7070707272727474747777777979797B7B7B7D7D7D7F7F7F818181828282848484 8585858888888989898A8A8A8A8A8A8C8C8C8E8E8E8F8F8F8F8F8F919191929292929292939393 939393949494949494959595959595959595969696969696969696979797979797979797989898 9898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9D9D9D 9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1A1A1A1 A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6 A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9A9A9A9272525050101050101050101050101 0501010501014644447C7C7CA3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3 A3A3A3A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A0A0A0 A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D 9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A999999 999999999999989898989898989898989898979797979797979797969696969696969696959595 9494949393939292929191919090908F8F8F8C8C8C8B8B8B898989888888858585838383818181 7F7F7F7C7C7C1A1A1A000000000000000000000000000000000000000000000000000000000000 2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000 000000000000000000000000000000000000000000252525444444434343434343424242424242 4141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C 3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838383838373737373737363636363636 353535353535343434343434333333333333323232323232313131313131313131303030303030 2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A 292929292929282828282828272727272727262626262626252525252525252525242424242424 2424242323232323232323232222222222222222222121212121212020202020202020201F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717141414020202 000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909091010101616161D1D1D2424242A2A2A 2D2D2D3333333636363A3A3A3B3B3B3D3D3D3F3F3F4242424444444444444444444141413F3F3F 3F3F3F3D3D3D3A3A3A3636363333333131312D2D2D2828282424241D1D1D191919101010090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090E0E0E1111111313131515151818181B1B1B1C1C1C1D1D1D 1F1F1F2020202121212222222222222222222222222222222222222222222020201E1E1E1D1D1D 1D1D1D1B1B1B1717171515151212120F0F0F0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404020202000000000000 000000000000000000000000080808F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB0B0B0000000000000000000000000000000000000000000090909161616161616 161616161616171717171717171717171717171717181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020212121 212121212121212121222222222222222222232323232323232323232323242424242424242424 252525252525252525262626262626262626262626272727272727272727282828282828282828 2929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D 2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131323232323232323232 333333333333343434343434353535353535363636363636373737373737373737383838383838 3939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E 3F3F3F3F3F3F3F3F3F404040404040414141414141424242424242434343434343444444444444 4444444545454545454646464747474747474848484848484949494949494A4A4A4A4A4A4B4B4B 4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F5050505353535858585A5A5A5E5E5E616161 6363636666666A6A6A6C6C6C6F6F6F7171717373737575757878787A7A7A7C7C7C7E7E7E808080 8282828484848585858787878888888989898B8B8B8C8C8C8D8D8D8E8E8E8F8F8F8F8F8F919191 929292929292939393939393949494959595959595959595969696969696969696979797979797 9797979898989898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9C9C9C9C9C9C 9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1 A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5 A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAA272525050101050101 0501010501010501010501014644447C7C7CA3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3 A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A0A0A0 A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D 9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A 999999999999999999999999989898989898989898979797979797979797969696969696969696 9595959595959494949393939292929191918F8F8F8F8F8F8C8C8C8B8B8B898989878787868686 8383838181817E7E7E7C7C7C1A1A1A000000000000000000000000000000000000000000000000 0000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A 000000000000000000000000000000000000000000000000000000252525444444434343434343 4242424242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C 3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737363636 363636363636353535353535343434343434333333333333323232323232313131313131303030 3030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A 2A2A2A292929292929292929282828282828272727272727262626262626252525252525252525 242424242424232323232323232323222222222222222222212121212121212121202020202020 2020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717 141414020202000000000000000000000000000000000000000000000000000000131313FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000909091010101616161D1D1D 2424242828282D2D2D3333333636363A3A3A3B3B3B3D3D3D3F3F3F424242444444454545454545 4242423F3F3F3F3F3F3D3D3D3A3A3A3636363535353131312D2D2D2A2A2A2424241D1D1D191919 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D0 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1010101313131515151818181B1B1B 1C1C1C1D1D1D1F1F1F202020212121222222222222222222222222222222222222222222202020 1E1E1E1D1D1D1D1D1D1B1B1B1717171515151212121111110D0D0D070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303040404040404040404040404040404040404030303 000000000000000000000000000000000000000000C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFCCCCCC000000000000000000000000000000000000000000060606 161616161616161616161616171717171717171717171717171717181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020 202020212121212121212121212121222222222222222222232323232323232323232323242424 242424242424252525252525252525262626262626262626262626272727272727272727282828 2828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131323232 323232323232333333333333343434343434353535353535363636363636373737373737373737 3838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D 3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242424242434343434343 4444444444444444444545454545454646464747474747474848484848484949494949494A4A4A 4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050545454585858 5D5D5D5E5E5E6262626464646868686A6A6A6E6E6E7070707272727474747676767979797B7B7B 7D7D7D8080808181818383838484848686868888888989898A8A8A8C8C8C8D8D8D8D8D8D8E8E8E 8F8F8F919191919191929292939393939393949494959595959595959595969696969696969696 9797979797979898989898989898989999999999999999999A9A9A9A9A9A9A9A9A9B9B9B9B9B9B 9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0 A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5 A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAA272525 0501010501010501010501010501010501014644447C7C7CA3A3A3A3A3A3A3A3A3A3A3A3A2A2A2 A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1 A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E 9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A 9A9A9A9A9A9A999999999999999999989898989898989898979797979797979797979797969696 9696969696969595959696969393939494949292929191919090908E8E8E8C8C8C8B8B8B8A8A8A 8888888585858383838181817E7E7E7C7C7C1A1A1A000000000000000000000000000000000000 0000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0A0A0A000000000000000000000000000000000000000000000000000000252525444444 4343434242424242424141414141414040404040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D 3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737 373737363636363636353535353535353535343434343434333333333333323232323232313131 3131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B 2B2B2B2A2A2A2A2A2A292929292929282828282828282828272727272727262626262626252525 252525242424242424242424232323232323232323222222222222222222212121212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919181818181818181818 171717171717141414020202000000000000000000000000000000000000000000000000000000 131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1616161919192424242828282D2D2D3131313636363A3A3A3B3B3B3D3D3D3F3F3F414141424242 4444444444444242423F3F3F3F3F3F3D3D3D3B3B3B3838383535353131312F2F2F2A2A2A242424 1D1D1D191919101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE0E0E0000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090E0E0E101010131313151515 1818181B1B1B1C1C1C1D1D1D1F1F1F202020212121222222222222222222222222222222222222 2222222020201F1F1F1D1D1D1D1D1D1B1B1B1919191616161414141111110D0D0D070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 0404040404040000000000000000000000000000000000000000007F7F7FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7000000000000000000000000000000000000 000000030303161616161616161616161616171717171717171717171717171717181818181818 1818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 202020202020202020212121212121212121212121222222222222222222232323232323232323 232323242424242424242424252525252525252525262626262626262626262626272727272727 2727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131 313131323232323232323232333333333333343434343434353535353535363636363636373737 3737373737373838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C 3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242424242 434343434343444444444444444444454545454545464646474747474747484848484848494949 4949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050 5454545454545A5A5A5D5D5D5F5F5F6363636666666969696C6C6C6F6F6F707070727272757575 7777777A7A7A7B7B7B7E7E7E8080808181818383838686868787878888888A8A8A8A8A8A8C8C8C 8D8D8D8E8E8E8F8F8F909090919191929292929292939393949494959595959595959595969696 9696969696969797979797979898989898989898989999999999999999999A9A9A9A9A9A9A9A9A 9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F A0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4 A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A9A9A9A9A9A9 AAAAAA2725250501010501010501010501010501010501014644447C7C7CA2A2A2A2A2A2A2A2A2 A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1 A0A0A0A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E 9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9A9A9A 9A9A9A9A9A9A9A9A9A999999999999999999989898989898989898989898979797979797979797 9696969696969696969595959595959595959393939393939292929191919090908F8F8F8D8D8D 8B8B8B8989898888888585858383838181817E7E7E7B7B7B1A1A1A000000000000000000000000 0000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000000000 2525254343434343434242424242424141414141414040404040403F3F3F3F3F3F3F3F3F3E3E3E 3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838 383838373737373737363636363636353535353535343434343434333333333333333333323232 3232323131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C 2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727262626262626 262626252525252525242424242424242424232323232323232323222222222222222222212121 2121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818 181818181818171717171717141414020202000000000000000000000000000000000000000000 000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909090909091616161919192020202828282A2A2A3131313535353838383A3A3A3D3D3D3F3F3F 4141414242424242424242424141414141413F3F3F3F3F3F3B3B3B3838383535353333332F2F2F 2A2A2A262626202020191919101010090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF1F1F1000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C101010 1111111414141616161A1A1A1C1C1C1C1C1C1E1E1E212121222222222222222222222222222222 2222222222222222222121211F1F1F1E1E1E1D1D1D1B1B1B1919191616161414141111110D0D0D 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 0404040404040404040404040101010000000000000000000000000000000000003D3D3DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE0D0D0D000000000000000000 000000000000000000000000151515161616161616161616171717171717171717171717171717 1818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222232323 232323232323232323242424242424242424252525252525252525262626262626262626262626 2727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030 303030313131313131323232323232323232333333333333343434343434353535353535363636 3636363636363737373737373838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B 3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141 424242424242434343434343444444444444444444454545454545464646474747474747484848 4848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F 5050505050505151515454545858585B5B5B5E5E5E6161616363636868686A6A6A6C6C6C6F6F6F 7272727373737676767979797A7A7A7D7D7D7E7E7E808080828282848484868686868686888888 8989898B8B8B8C8C8C8D8D8D8E8E8E909090909090929292929292929292949494959595959595 9595959696969696969696969797979797979898989898989898989999999999999999999A9A9A 9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9F9F9F 9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3 A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8 A9A9A9A9A9A9AAAAAA2826260501010501010501010501010501010501014644447C7C7CA2A2A2 A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1 A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B 9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999999999989898989898989898979797979797 9797979696969696969696969696969595959595959595959494949393939191919191918F8F8F 8F8F8F8C8C8C8B8B8B8989898787878686868383838181817F7F7F7C7C7C1A1A1A000000000000 0000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000 0000000000002525254343434343434242424242424141414141414040404040403F3F3F3F3F3F 3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939 383838383838383838373737373737363636363636353535353535343434343434333333333333 3232323232323232323131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D 2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727 262626262626252525252525252525242424242424242424232323232323232323222222222222 2222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919 191919181818181818181818171717171717141414020202000000000000000000000000000000 000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 585858000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909091010101919192020202626262A2A2A2F2F2F3535353838383A3A3A 3B3B3B3F3F3F4141414242424242424242424242424141414141413F3F3F3B3B3B383838363636 3333332F2F2F2A2A2A262626202020191919101010090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000080808FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE040404000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C1010101111111414141616161A1A1A1C1C1C1C1C1C1E1E1E202020212121222222222222 2222222222222222222222222222222121212020201E1E1E1D1D1D1B1B1B191919161616141414 1212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303040404 040404040404040404040404040404040404020202000000000000000000000000000000000000 040404F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF313131000000 000000000000000000000000000000000000131313161616161616161616171717171717171717 1717171717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222 222222232323232323232323232323242424242424242424252525252525252525262626262626 2626262626262727272727272727272828282828282828282828282929292929292929292A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F 2F2F2F303030303030313131313131323232323232323232333333333333343434343434353535 3535353636363636363636363737373737373838383838383939393939393A3A3A3A3A3A3B3B3B 3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040 414141414141424242424242434343434343444444444444444444454545454545464646474747 4747474848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E 4E4E4E4F4F4F5050505050505151515151515555555858585C5C5C5F5F5F626262656565686868 6B6B6B6C6C6C7070707272727575757777777979797B7B7B7D7D7D7F7F7F818181838383858585 8686868787878888888B8B8B8C8C8C8D8D8D8E8E8E8F8F8F909090909090929292939393939393 939393959595959595969696969696969696979797979797989898989898989898999999999999 9999999A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E 9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3 A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8 A8A8A8A9A9A9A9A9A9A9A9A9AAAAAA282626050101050101050101050101050101050101464444 7C7C7CA2A2A2A2A2A2A2A2A2A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1 A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B 9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A999999999999999999999999989898989898989898979797 979797979797979797969696969696969696959595959595959595959595939393939393919191 9191919090908E8E8E8D8D8D8B8B8B8989898787878686868282828181817E7E7E7C7C7C1A1A1A 0000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000 000000000000000000000000252525434343424242424242414141414141414141404040404040 3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A 393939393939383838383838373737373737363636363636363636353535353535343434343434 3333333333333232323232323131313131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E 2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828 272727272727262626262626252525252525252525242424242424242424232323232323232323 2222222222222222222121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A 191919191919191919181818181818181818171717171717141414020202000000000000000000 000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909091010101919192020202626262828282D2D2D333333 3636363838383B3B3B3D3D3D3F3F3F4141414141414141414141414141414141413F3F3F3D3D3D 3A3A3A3636363333333131312A2A2A262626202020191919161616090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF131313000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C1010101111111414141616161A1A1A1C1C1C1C1C1C1E1E1E202020212121 2222222222222222222222222222222222222222222121212020201E1E1E1D1D1D1C1C1C1A1A1A 1717171515151212120F0F0F0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404030303000000000000000000000000 000000000000000000ADADADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 575757000000000000000000000000000000000000000000101010161616161616161616171717 1717171717171717171717171818181818181818181818181818181919191919191919191A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121 222222222222222222232323232323232323232323242424242424242424252525252525252525 262626262626262626262626272727272727272727282828282828282828282828292929292929 2929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E 2E2E2E2F2F2F2F2F2F303030303030313131313131323232323232323232333333333333343434 3434343535353535353636363636363636363737373737373838383838383939393939393A3A3A 3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F 404040404040414141414141424242424242434343434343444444444444444444454545454545 4646464747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D 4D4D4D4E4E4E4E4E4E4F4F4F5050505050505151515151515252525656565A5A5A5E5E5E606060 6565656767676868686B6B6B6F6F6F7171717373737575757777777A7A7A7B7B7B7F7F7F808080 8282828383838585858787878888888A8A8A8A8A8A8C8C8C8D8D8D8E8E8E8F8F8F909090929292 929292939393939393949494949494959595969696979797979797979797989898989898989898 9999999999999999999A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D 9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A2A2A2A2A2A2 A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7 A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAAAAAAAA282626050101050101050101050101050101 0501014644447B7B7BA1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A0A0A0 A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E 9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B 9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A999999999999999999999999989898989898989898 979797979797979797979797969696969696969696959595959595959595959595949494939393 9393939191919090909090908E8E8E8D8D8D8B8B8B8A8A8A8787878686868282828181817E7E7E 7C7C7C1A1A1A0000000000000000000000000000000000000000000000000000000000002F2F2F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000 000000000000000000000000000000000000242424434343424242424242414141414141404040 4040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A 3A3A3A3A3A3A393939393939383838383838373737373737363636363636353535353535353535 3434343434343333333333333232323232323131313131313030303030302F2F2F2F2F2F2F2F2F 2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929 282828282828272727272727262626262626252525252525252525242424242424232323232323 2323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A191919191919191919181818181818181818171717171717141414020202000000 000000000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909091010101616161D1D1D242424282828 2D2D2D3131313636363838383B3B3B3D3D3D3F3F3F414141414141414141414141424242414141 3F3F3F3D3D3D3A3A3A3636363535353131312D2D2D262626202020191919161616090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF252525000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C0E0E0E1111111414141616161919191B1B1B1C1C1C1E1E1E 2020202121212222222222222222222222222222222222222323232222222020201F1F1F1E1E1E 1D1D1D1A1A1A1717171515151212120F0F0F0A0A0A070707070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404000000000000 000000000000000000000000000000656565FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7D7D7D0000000000000000000000000000000000000000000C0C0C161616161616 161616171717171717171717171717171717181818181818181818181818181818191919191919 1919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121222222222222222222232323232323232323232323242424242424242424252525 252525252525252525262626262626262626272727272727272727282828282828282828282828 2929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D 2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232323232333333 333333343434343434353535353535363636363636363636373737373737383838383838393939 3939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F 3F3F3F3F3F3F404040404040414141414141424242424242434343434343444444444444444444 4545454545454646464747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C 4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050515151515151525252555555575757 5A5A5A5E5E5E6262626464646868686969696C6C6C6F6F6F7272727474747575757979797A7A7A 7D7D7D7E7E7E8080808383838383838585858686868989898A8A8A8A8A8A8C8C8C8D8D8D8E8E8E 8E8E8E919191929292929292939393949494949494959595979797979797979797979797989898 9898989898989999999999999999999A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C 9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1 A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6 A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAAAAAAAA282626050101050101050101 0501010501010501014644447B7B7BA1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A0A0A0A0A0A0 A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9C9C9C 9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A999999999999999999999999989898989898 989898989898979797979797979797969696969696969696969696959595959595959595959595 9494949393939393939191919090909090908E8E8E8C8C8C8B8B8B898989878787858585828282 8080807E7E7E7B7B7B1A1A1A000000000000000000000000000000000000000000000000000000 0000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000 000000000000000000000000000000000000000000000000242424434343424242424242414141 4141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B 3B3B3B3A3A3A3A3A3A393939393939393939383838383838373737373737363636363636353535 3535353434343434343333333333333333333232323232323131313131313030303030302F2F2F 2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929 292929282828282828272727272727272727262626262626252525252525242424242424242424 2323232323232323232222222222222222222121212121212121212020202020202020201F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717171717131313 020202000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000909091010101616161D1D1D 2424242828282D2D2D3131313636363838383A3A3A3D3D3D3F3F3F414141414141414141424242 4242424141413F3F3F3D3D3D3A3A3A3636363535353131312D2D2D262626202020191919161616 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D3D3D 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060C0C0C0E0E0E1111111414141616161919191B1B1B 1C1C1C1D1D1D1F1F1F212121212121212121222222222222222222222222232323222222212121 1F1F1F1E1E1E1D1D1D1B1B1B1919191616161414140F0F0F0D0D0D0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 0101010000000000000000000000000000000000001C1C1CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA2A2A2000000000000000000000000000000000000000000090909 161616161616161616171717171717171717171717171717181818181818181818181818181818 1919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020 202020212121212121212121222222222222222222232323232323232323232323242424242424 242424252525252525252525252525262626262626262626272727272727272727282828282828 2828282828282929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232 323232333333333333343434343434353535353535363636363636363636373737373737383838 3838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E 3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242424242434343434343434343 4444444444444545454545454646464747474747474848484848484949494949494A4A4A4A4A4A 4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050515151515151525252 5252525656565757575B5B5B6060606363636565656868686B6B6B6E6E6E717171737373747474 7777777878787C7C7C7C7C7C7F7F7F8181818282828484848585858888888888888989898B8B8B 8C8C8C8D8D8D8E8E8E909090919191929292929292939393949494959595969696979797979797 9797979898989898989898989999999999999999999A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C 9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1 A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5 A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAAAAAAAA282626050101 0501010501010501010501010501014644447B7B7BA1A1A1A1A1A1A0A0A0A0A0A0A0A0A0A0A0A0 A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9C9C9C 9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999989898 989898989898989898979797979797979797969696969696969696969696959595959595959595 9595959494949494949393939393939090909090908F8F8F8E8E8E8C8C8C8B8B8B898989878787 8585858282828080807E7E7E7B7B7B1A1A1A000000000000000000000000000000000000000000 0000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0A0A0A000000000000000000000000000000000000000000000000000000242424424242424242 4141414141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C 3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737373737363636 363636353535353535343434343434333333333333323232323232323232313131313131303030 3030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A 2A2A2A292929292929282828282828272727272727262626262626262626252525252525242424 242424242424232323232323232323222222222222222222212121212121212121202020202020 2020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919181818181818181818171717171717 171717131313020202000000000000000000000000000000000000000000000000000000131313 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 1010101919192020202626262D2D2D3131313535353636363A3A3A3B3B3B3F3F3F414141424242 4242424141414141414141413F3F3F3D3D3D3A3A3A3838383636363131312A2A2A262626202020 191919161616090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF565656000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060C0C0C0E0E0E111111131313151515 1919191B1B1B1C1C1C1D1D1D1F1F1F212121212121212121222222232323232323222222232323 2222222121212020201F1F1F1D1D1D1B1B1B1919191616161414141111110D0D0D0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404020202000000000000000000000000000000000000000000D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C7000000000000000000000000000000000000 000000060606161616161616161616171717171717171717171717171717171717181818181818 1818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121222222222222222222222222232323232323232323 242424242424242424252525252525252525252525262626262626262626272727272727272727 2828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131 313131323232323232333333333333343434343434353535353535353535363636363636373737 3737373838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242424242434343 434343434343444444444444454545454545464646464646474747484848484848494949494949 4A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050515151 5151515252525252525353535656565A5A5A5E5E5E6060606464646666666969696C6C6C6E6E6E 7171717373737575757777777A7A7A7C7C7C7E7E7E7F7F7F818181828282848484868686878787 8989898B8B8B8C8C8C8D8D8D8E8E8E8F8F8F909090919191929292939393939393949494959595 9696969797979797979898989898989898989999999999999999999A9A9A9A9A9A9B9B9B9B9B9B 9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0 A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A5A5A5 A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAAAAAAAA 2826260501010501010501010501010501010501014644447B7B7BA0A0A0A0A0A0A0A0A0A0A0A0 A0A0A0A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C 9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999 989898989898989898989898979797979797979797979797969696969696969696959595959595 9595959595959494949494949393939393939292929090909090908F8F8F8D8D8D8C8C8C8A8A8A 8989898686868585858282828080807D7D7D7B7B7B1A1A1A000000000000000000000000000000 0000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000000000242424 4242424242424141414141414040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D 3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737 363636363636363636353535353535343434343434333333333333323232323232313131313131 3030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B 2A2A2A2A2A2A2A2A2A292929292929282828282828272727272727262626262626252525252525 252525242424242424242424232323232323232323222222222222222222212121212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818 171717171717171717131313020202000000000000000000000000000000000000000000000000 000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909091010101919192020202626262A2A2A3131313535353636363838383B3B3B3F3F3F 4141414141414242424141414141414141413F3F3F3D3D3D3A3A3A3838383636363131312A2A2A 262626202020191919161616090909090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF6E6E6E000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060C0C0C0E0E0E101010 1313131515151818181A1A1A1C1C1C1D1D1D1F1F1F202020212121212121222222242424242424 2323232323232222222121212020201F1F1F1D1D1D1C1C1C1919191717171414141111110D0D0D 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 0404040404040404040404040303030000000000000000000000000000000000000000008D8D8D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEE000000000000000000000000 000000000000000000030303161616161616161616171717171717171717171717171717171717 1818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020212121212121212121222222222222222222222222232323 232323232323242424242424242424252525252525252525252525262626262626262626272727 2727272727272727272828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030 313131313131313131323232323232333333333333343434343434353535353535353535363636 3636363737373737373838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C 3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141424242 424242434343434343434343444444444444454545454545464646464646474747484848484848 4949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F 5050505151515151515252525252525353535656565757575B5B5B5F5F5F626262656565676767 6969696D6D6D7070707272727575757676767979797A7A7A7C7C7C7E7E7E808080828282848484 8585858686868888888989898B8B8B8C8C8C8D8D8D8F8F8F919191909090919191929292939393 9595959595959797979696969797979898989898989898989999999999999999999A9A9A9A9A9A 9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F 9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4 A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9 AAAAAAAAAAAA2826260501010501010501010501010501010501014644447B7B7BA0A0A0A0A0A0 A0A0A0A0A0A0A0A0A0A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C 9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A999999999999 999999989898989898989898989898979797979797979797979797969696969696969696969696 9595959595959595959595959494949494949393939393939292929090909090908F8F8F8D8D8D 8C8C8C8A8A8A8989898686868484848282827F7F7F7D7D7D7A7A7A1A1A1A000000000000000000 0000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000 0000002424244242424242424141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E 3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838383838 373737373737363636363636353535353535343434343434343434333333333333323232323232 3131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C 2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929282828282828272727272727262626262626 252525252525252525242424242424242424232323232323232323222222222222212121212121 2121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818 181818181818171717171717171717131313020202000000000000000000000000000000000000 000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909091010101919192020202626262A2A2A2F2F2F353535363636383838 3B3B3B3F3F3F3F3F3F4141414141414141414141414141413F3F3F3D3D3D3A3A3A383838363636 3131312A2A2A2626262020201D1D1D161616090909090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010101010606060C0C0C 0E0E0E1010101313131515151818181A1A1A1C1C1C1C1C1C1F1F1F202020212121212121222222 2323232323232323232222222222222121212020201F1F1F1D1D1D1C1C1C1A1A1A171717151515 1111110D0D0D0A0A0A070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303040404 040404040404040404040404040404040404040404000000000000000000000000000000000000 000000464646FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF131313000000 000000000000000000000000000000010101161616161616161616171717171717171717171717 1717171717171818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121222222222222222222 222222232323232323232323242424242424242424252525252525252525252525262626262626 2626262727272727272727272727272828282828282828282929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 303030303030303030313131313131323232323232333333333333343434343434353535353535 3535353636363636363737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B 3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141 414141424242424242434343434343434343444444444444454545454545464646464646474747 4848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E 4F4F4F4F4F4F5050505151515151515252525252525353535353535757575959595C5C5C606060 6363636666666868686B6B6B6E6E6E7070707272727575757777777979797B7B7B7C7C7C7E7E7E 8181818282828484848585858787878989898A8A8A8B8B8B8C8C8C8E8E8E8F8F8F909090919191 929292939393949494959595969696979797979797989898989898989898999999999999999999 9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E 9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3 A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8 A9A9A9A9A9A9AAAAAAAAAAAA2826260501010501010501010501010501010501014644447B7B7B A0A0A09F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C 9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999 999999999999989898989898989898989898979797979797979797979797969696969696969696 969696959595959595959595959595949494949494949494939393929292929292909090909090 8F8F8F8D8D8D8C8C8C8A8A8A8989898686868484848282827F7F7F7D7D7D7A7A7A1A1A1A000000 0000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000 0000000000000000002424244242424141414141414141414040404040403F3F3F3F3F3F3E3E3E 3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838 383838383838373737373737363636363636353535353535343434343434333333333333333333 3232323232323131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D 2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727272727 262626262626252525252525242424242424242424232323232323232323222222222222222222 2121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919 191919181818181818181818171717171717171717131313020202000000000000000000000000 000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF585858000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909091010101919192020202424242A2A2A2F2F2F333333 3636363838383B3B3B3F3F3F3F3F3F4141414141414141414141414141413F3F3F3D3D3D3A3A3A 3838383636363131312D2D2D2828282020201D1D1D161616101010090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000080808 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C1010101313131515151818181A1A1A1B1B1B1C1C1C1E1E1E202020212121 2222222121212121212222222222222222222222222222222121211F1F1F1D1D1D1B1B1B191919 1717171515151212120F0F0F0A0A0A070707070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404010101000000000000000000 000000000000000000070707F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 393939000000000000000000000000000000000000000000131313161616161616161616171717 1717171717171717171717171818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121222222 222222222222222222232323232323232323242424242424242424242424252525252525252525 262626262626262626272727272727272727272727282828282828282828292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F303030303030303030313131313131323232323232333333333333343434343434 3434343535353535353636363636363737373737373838383838383939393939393939393A3A3A 3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040 404040414141414141424242424242424242434343434343444444444444454545454545464646 4646464747474848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D 4E4E4E4E4E4E4F4F4F4F4F4F505050515151515151525252525252535353535353545454585858 5B5B5B5F5F5F6161616464646666666A6A6A6B6B6B6F6F6F727272737373757575777777797979 7B7B7B7E7E7E8080808181818383838484848686868888888989898A8A8A8B8B8B8D8D8D8E8E8E 909090909090919191929292939393959595969696979797979797989898989898989898999999 9999999999999A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E 9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2 A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A7A7A7 A8A8A8A8A8A8A9A9A9A9A9A9AAAAAAAAAAAA282626050101050101050101050101050101050101 4644447B7B7B9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C 9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A999999 999999999999999999989898989898989898989898979797979797979797979797969696969696 969696969696959595959595959595959595949494949494949494949494939393929292929292 9090908F8F8F8F8F8F8D8D8D8C8C8C8A8A8A8989898686868484848181817F7F7F7C7C7C7A7A7A 1A1A1A0000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000 0000000000000000000000000000002424244242424141414141414040404040403F3F3F3F3F3F 3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939 393939383838383838373737373737363636363636363636353535353535343434343434333333 3333333232323232323131313131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D 2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727 272727262626262626262626252525252525242424242424242424232323232323232323222222 2222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A 191919191919191919181818181818181818171717171717161616131313020202000000000000 000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909091010101616161D1D1D242424282828 2D2D2D3131313535353636363A3A3A3D3D3D3F3F3F3F3F3F4141414141414141414141413F3F3F 3D3D3D3A3A3A3838383636363131312D2D2D2828282424241D1D1D161616101010090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8B8B8000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C0E0E0E1313131515151818181919191B1B1B1C1C1C1E1E1E 2020202121212121212121212121212222222222222222222222222222222121211F1F1F1D1D1D 1B1B1B1919191717171616161212120F0F0F0A0A0A070707070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404030303000000 000000000000000000000000000000000000B5B5B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF5F5F5F0000000000000000000000000000000000000000000F0F0F161616161616 161616171717171717171717171717171717181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121 212121212121222222222222222222232323232323232323242424242424242424242424252525 252525252525262626262626262626272727272727272727272727282828282828282828292929 2929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131323232323232333333333333 343434343434343434353535353535363636363636373737373737383838383838393939393939 3939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F 3F3F3F404040404040414141414141424242424242424242434343434343444444444444454545 4545454646464646464747474747474848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C 4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050515151515151525252525252535353535353 5454545454545858585C5C5C5F5F5F6161616565656868686B6B6B6E6E6E707070717171757575 7575757878787979797C7C7C7E7E7E7F7F7F8282828383838585858686868888888989898B8B8B 8C8C8C8E8E8E909090909090919191929292939393959595959595969696979797979797979797 9999999999999999999999999A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D 9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2 A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7 A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAAAAAAAA282626050101050101050101050101 0501010501014644447B7B7B9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C 9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A 999999999999999999999999989898989898989898989898979797979797979797979797969696 969696969696969696959595959595959595959595949494949494949494949494949494939393 9292929191919191919090908F8F8F8D8D8D8B8B8B8A8A8A8888888787878484848282827F7F7F 7C7C7C7A7A7A1A1A1A000000000000000000000000000000000000000000000000000000000000 2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000 000000000000000000000000000000000000000000242424424242414141414141404040404040 3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A 393939393939393939383838383838373737373737363636363636353535353535353535343434 3434343333333333333232323232323131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E 2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828 282828272727272727262626262626252525252525252525242424242424242424232323232323 2323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1A1A1A1A1A1A 1A1A1A191919191919191919181818181818181818171717171717171717161616131313020202 000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000909091010101616161D1D1D 2020202828282D2D2D3131313535353636363A3A3A3D3D3D3F3F3F3F3F3F3F3F3F414141414141 4141413F3F3F3D3D3D3A3A3A3838383636363333332D2D2D2828282424241D1D1D191919101010 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D0000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E1111111515151818181919191B1B1B 1C1C1C1E1E1E202020212121212121222222222222222222222222222222232323222222212121 2020201D1D1D1C1C1C1A1A1A1919191616161212121111110D0D0D0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 0404040000000000000000000000000000000000000000006E6E6EFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF8484840000000000000000000000000000000000000000000B0B0B 161616161616161616171717171717171717171717171717181818181818181818181818191919 1919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020 212121212121212121212121222222222222222222232323232323232323242424242424242424 242424252525252525252525262626262626262626262626272727272727272727282828282828 2828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131323232323232 333333333333333333343434343434353535353535363636363636373737373737383838383838 3838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E 3E3E3E3F3F3F3F3F3F404040404040414141414141424242424242424242434343434343444444 4444444545454545454646464646464747474747474848484949494949494A4A4A4A4A4A4B4B4B 4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151525252525252 5353535353535454545454545858585959595D5D5D6060606262626767676969696B6B6B6E6E6E 7070707373737575757676767878787A7A7A7C7C7C7F7F7F808080828282838383858585878787 8787878989898B8B8B8D8D8D8E8E8E8F8F8F909090919191939393939393959595959595969696 9797979898989898989999999999999999999A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C 9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1 A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6 A6A6A6A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAAAAAAAA282626050101050101 0501010501010501010501014644447B7B7B9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C 9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A 9A9A9A999999999999999999999999989898989898989898989898979797979797979797979797 969696969696969696969696959595959595959595959595959595949494949494949494949494 9393939393939292929292929191919090908E8E8E8D8D8D8B8B8B8A8A8A888888868686838383 8282827F7F7F7C7C7C7A7A7A1A1A1A000000000000000000000000000000000000000000000000 0000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A 000000000000000000000000000000000000000000000000000000242424414141414141404040 4040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B 3A3A3A3A3A3A393939393939383838383838383838373737373737363636363636353535353535 3434343434343333333333333333333232323232323131313131313030303030302F2F2F2F2F2F 2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929 292929282828282828272727272727262626262626252525252525252525242424242424242424 2323232323232323232222222222222222222121212121212121212020202020201F1F1F1F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717171717171717161616 131313020202000000000000000000000000000000000000000000000000000000131313FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909090909 1616161D1D1D2020202626262A2A2A3131313535353636363A3A3A3D3D3D3F3F3F3F3F3F3F3F3F 4141414141414141413F3F3F3D3D3D3A3A3A3838383636363333332D2D2D2828282424241D1D1D 191919101010090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E9E9E9000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090E0E0E111111141414161616 1919191A1A1A1C1C1C1E1E1E202020212121212121222222222222222222222222222222232323 2222222222222020201E1E1E1D1D1D1B1B1B1919191616161414141111110D0D0D0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404010101000000000000000000000000000000000000262626FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAA000000000000000000000000000000000000 000000070707161616161616161616171717171717171717171717171717181818181818181818 1818181818181919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020212121212121212121212121222222222222222222232323232323232323232323 242424242424242424252525252525252525262626262626262626262626272727272727272727 2828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131 323232323232333333333333333333343434343434353535353535363636363636373737373737 3838383838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242424242434343 4343434444444444444545454545454646464646464747474747474848484848484949494A4A4A 4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151 5252525252525353535353535454545454545555555959595A5A5A5D5D5D606060636363676767 6969696B6B6B6E6E6E7070707272727575757676767878787A7A7A7D7D7D7F7F7F808080838383 8484848686868787878888888A8A8A8B8B8B8D8D8D8E8E8E909090909090929292939393939393 9595959696969797979797979797979898989999999999999A9A9A9A9A9A9B9B9B9B9B9B9B9B9B 9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0 A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A5A5A5A5A5A5 A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAAAAAAAA282626 0501010501010501010501010501010501014644447B7B7B9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C 9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A 9A9A9A9A9A9A999999999999999999999999989898989898989898989898979797979797979797 979797969696969696969696969696959595959595959595959595959595949494949494949494 9494949393939393939292929292929191919191918F8F8F8E8E8E8C8C8C8B8B8B898989888888 8686868383838181817F7F7F7B7B7B7A7A7A1A1A1A000000000000000000000000000000000000 0000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0A0A0A000000000000000000000000000000000000000000000000000000242424414141 4141414040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B 3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737363636363636363636 353535353535343434343434333333333333323232323232323232313131313131303030303030 2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A 292929292929282828282828272727272727272727262626262626252525252525242424242424 242424232323232323232323222222222222222222212121212121212121202020202020202020 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717171717 171717161616131313020202000000000000000000000000000000000000000000000000000000 131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909091616161919192020202626262A2A2A2F2F2F3333333636363838383B3B3B3D3D3D 3F3F3F3F3F3F3F3F3F4141413F3F3F3F3F3F3D3D3D3A3A3A3838383636363333332D2D2D282828 242424202020191919101010090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFD040404000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090E0E0E111111 1414141616161818181A1A1A1C1C1C1D1D1D1F1F1F212121212121212121222222222222222222 2222222323232222222222222121211E1E1E1D1D1D1B1B1B1A1A1A1717171414141111110F0F0F 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404020202000000000000000000000000000000000000000000 DCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4D4D4000000000000000000000000 000000000000000000030303161616161616161616171717171717171717171717171717181818 1818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F202020202020202020202020212121212121212121222222222222222222232323232323 232323232323242424242424242424252525252525252525262626262626262626262626272727 2727272727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030 313131313131323232323232323232333333333333343434343434353535353535363636363636 3737373737373737373838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C 3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242 424242434343434343444444444444454545454545464646464646474747474747484848484848 4949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050 5050505151515151515252525353535353535454545454545555555555555959595B5B5B5E5E5E 6161616363636767676969696C6C6C6F6F6F7171717373737575757777777878787B7B7B7E7E7E 7F7F7F8181818383838484848585858787878989898A8A8A8C8C8C8E8E8E8E8E8E909090919191 9292929292929494949696969696969696969797979898989999999A9A9A9A9A9A9A9A9A9B9B9B 9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F A0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4 A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAA AAAAAA2826260501010501010501010501010501010501014644447B7B7B9E9E9E9E9E9E9E9E9E 9E9E9E9E9E9E9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C 9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A 9A9A9A9A9A9A999999999999999999999999999999989898989898989898989898979797979797 979797979797969696969696969696969696959595959595959595959595959595949494949494 9494949494949393939393939393939292929292929191919191918F8F8F8E8E8E8C8C8C8B8B8B 8989898888888686868383838181817F7F7F7B7B7B7A7A7A1A1A1A000000000000000000000000 0000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000000000 2323234141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C 3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838383838373737373737363636 363636353535353535353535343434343434333333333333323232323232313131313131303030 3030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2A2A2A2A2A2A292929292929282828282828272727272727262626262626252525252525252525 242424242424242424232323232323232323222222222222222222212121212121212121202020 2020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818 171717171717171717161616131313020202000000000000000000000000000000000000000000 000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909091010101919191D1D1D2424242828282D2D2D313131333333363636 3A3A3A3D3D3D3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3D3D3D3B3B3B3A3A3A363636353535333333 2F2F2F2A2A2A262626202020191919101010090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C1010101313131616161818181A1A1A1C1C1C1D1D1D1F1F1F202020212121222222222222 2222222323232323232323232323232222222121211F1F1F1D1D1D1C1C1C1A1A1A171717151515 1212120F0F0F0D0D0D0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404030303000000000000000000000000000000 0000000000008D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC0A0A0A000000 000000000000000000000000000000000000151515161616161616171717171717171717171717 1717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222222222 232323232323232323232323242424242424242424252525252525252525252525262626262626 2626262727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 303030303030313131313131323232323232323232333333333333343434343434353535353535 3636363636363737373737373737373838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B 3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141 414141424242424242434343434343444444444444454545454545464646464646474747474747 4848484848484949494949494A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F 4F4F4F505050505050515151515151525252535353535353545454545454555555555555565656 5A5A5A5B5B5B5F5F5F6262626464646868686A6A6A6D6D6D6E6E6E717171747474757575777777 7B7B7B7B7B7B7E7E7E7F7F7F8181818383838484848686868888888A8A8A8B8B8B8C8C8C8E8E8E 8F8F8F9090909191919292929393939595959696969696969797979898989898989999999A9A9A 9A9A9A9A9A9A9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9F9F9F 9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3 A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9 A9A9A9AAAAAAAAAAAA2826260501010501010501010501010501010501014644447B7B7B9D9D9D 9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C 9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A 9A9A9A9A9A9A9A9A9A999999999999999999999999999999989898989898989898989898979797 979797979797979797969696969696969696969696959595959595959595959595959595949494 9494949494949494949393939393939393939393939292929292929191919191918F8F8F8E8E8E 8C8C8C8B8B8B8989898787878686868383838181817F7F7F7B7B7B7979791A1A1A000000000000 0000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000 0000000000002323234141414040404040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D 3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838383838373737 373737363636363636353535353535343434343434333333333333333333323232323232313131 3131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B 2B2B2B2A2A2A2A2A2A292929292929292929282828282828272727272727262626262626252525 252525252525242424242424242424232323232323232323222222222222222222212121212121 2121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919181818181818 181818171717171717171717161616161616131313020202000000000000000000000000000000 000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 585858000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909091010101919191D1D1D2424242828282D2D2D313131 3333333636363A3A3A3D3D3D3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3D3D3D3B3B3B3A3A3A363636 3535353333332F2F2F2A2A2A262626202020191919101010090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000080808FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF333333000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C1010101313131515151818181A1A1A1C1C1C1D1D1D1F1F1F202020202020 2222222222222222222323232323232222222323232222222222222020201D1D1D1C1C1C1B1B1B 1919191515151212120F0F0F0D0D0D0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404010101000000000000 0000000000000000000000003D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 353535000000000000000000000000000000000000000000121212161616161616171717171717 1717171717171717171717171818181818181818181818181919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121222222 222222222222222222232323232323232323242424242424242424252525252525252525252525 262626262626262626272727272727272727282828282828282828282828292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F303030303030313131313131313131323232323232333333333333343434343434 3535353535353636363636363636363737373737373838383838383939393939393A3A3A3A3A3A 3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040 404040414141414141424242424242434343434343444444444444444444454545454545464646 4747474747474848484848484949494949494A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D 4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252535353545454545454555555 5555555656565656565A5A5A5E5E5E5F5F5F6363636666666969696A6A6A6D6D6D707070717171 7575757676767979797B7B7B7D7D7D7E7E7E8080808282828383838585858686868989898A8A8A 8C8C8C8D8D8D8F8F8F909090909090929292949494959595959595969696969696979797989898 9999999999999A9A9A9A9A9A9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E 9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3 A3A3A3A3A3A3A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8 A8A8A8A9A9A9A9A9A9AAAAAAAAAAAA282626050101050101050101050101050101050101464444 7B7B7B9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9C9C9C 9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A 9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999999999989898989898989898989898989898 979797979797979797979797969696969696969696969696959595959595959595959595959595 949494949494949494949494949494939393939393939393939393929292929292919191919191 8F8F8F8E8E8E8B8B8B8B8B8B8989898787878585858383838181817F7F7F7B7B7B797979191919 0000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000 0000000000000000000000002323234141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E 3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838383838 373737373737363636363636363636353535353535343434343434333333333333323232323232 3232323131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C 2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828282828272727272727262626 262626252525252525252525242424242424242424232323232323232323222222222222212121 2121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919 181818181818181818171717171717171717161616161616131313020202000000000000000000 000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909091010101919191D1D1D242424282828 2D2D2D3131313333333636363A3A3A3B3B3B3D3D3D3F3F3F3F3F3F3F3F3F3F3F3F3D3D3D3B3B3B 3A3A3A3636363535353333332F2F2F2A2A2A2626262020201D1D1D161616090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C4C000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C1010101313131515151818181A1A1A1C1C1C1D1D1D1E1E1E 2020202020202222222222222323232323232323232222222323232222222222222020201D1D1D 1D1D1D1B1B1B1919191515151212121111110D0D0D0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404020202 000000000000000000000000000000000000020202E7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF6666660000000000000000000000000000000000000000000E0E0E161616161616 161616171717171717171717171717171717181818181818181818181818191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121 212121222222222222222222222222232323232323232323242424242424242424252525252525 252525252525262626262626262626272727272727272727272727282828282828282828292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232333333333333 343434343434353535353535353535363636363636373737373737383838383838393939393939 3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F 3F3F3F404040404040414141414141424242424242434343434343434343444444444444454545 4545454646464747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C 4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050515151515151525252525252535353545454 5454545555555555555656565656565A5A5A5B5B5B5E5E5E6161616363636767676969696A6A6A 6D6D6D7070707272727575757777777979797B7B7B7C7C7C7F7F7F808080828282848484868686 8787878989898B8B8B8C8C8C8E8E8E8F8F8F8F8F8F919191939393949494949494959595969696 9898989898989898989A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D 9D9D9D9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2 A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7 A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAAAAAAAA282626050101050101050101050101050101 0501014644447B7B7B9D9D9D9D9D9D9D9D9D9D9D9D9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C 9C9C9C9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A 9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999999999999999989898989898989898989898 989898979797979797979797979797969696969696969696969696959595959595959595959595 959595949494949494949494949494949494939393939393939393939393929292929292919191 9191919090908F8F8F8D8D8D8B8B8B8A8A8A8989898787878585858383838181817F7F7F7B7B7B 7979791919190000000000000000000000000000000000000000000000000000000000002F2F2F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000 0000000000000000000000000000000000002323234040404040404040403F3F3F3F3F3F3E3E3E 3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939 383838383838373737373737363636363636353535353535353535343434343434333333333333 3232323232323131313131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D 2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727 262626262626262626252525252525242424242424242424232323232323232323222222222222 2222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919 191919191919181818181818181818171717171717171717161616161616131313020202000000 000000000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000909091010101616161D1D1D 2020202626262A2A2A2F2F2F3333333636363838383B3B3B3D3D3D3D3D3D3D3D3D3F3F3F3F3F3F 3D3D3D3B3B3B3A3A3A3636363535353333333131312A2A2A2626262020201D1D1D161616101010 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E1111111414141616161919191C1C1C 1C1C1C1E1E1E202020222222222222222222222222232323242424232323232323232323222222 1F1F1F1D1D1D1D1D1D1C1C1C1A1A1A1717171515151212120F0F0F0D0D0D070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 0404040303030000000000000000000000000000000000000000009C9C9CFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF9595950000000000000000000000000000000000000000000A0A0A 161616161616161616171717171717171717171717171717181818181818181818181818191919 1919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 212121212121212121212121222222222222222222232323232323232323242424242424242424 242424252525252525252525262626262626262626272727272727272727272727282828282828 2828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232 333333333333343434343434353535353535353535363636363636373737373737383838383838 3939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E 3E3E3E3F3F3F3F3F3F404040404040414141414141424242424242434343434343434343444444 4444444545454545454646464646464747474848484848484949494949494A4A4A4A4A4A4B4B4B 4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050515151515151525252525252 5353535353535454545555555555555656565656565757575A5A5A5B5B5B5F5F5F616161646464 6767676969696B6B6B6D6D6D7070707373737676767777777979797B7B7B7D7D7D808080808080 8383838585858686868787878989898B8B8B8D8D8D8D8D8D8F8F8F909090919191939393949494 9595959696969696969797979898989A9A9A9A9A9A9A9A9A9B9B9B9B9B9B9B9B9B9C9C9C9C9C9C 9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1 A1A1A1A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6 A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAAAAAAAA282626050101050101050101 0501010501010501014644447B7B7B9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C 9C9C9C9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A 9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999999999999999999999989898989898989898 989898979797979797979797979797979797969696969696969696969696959595959595959595 959595959595949494949494949494949494949494939393939393939393939393929292929292 9191919191919191919090908F8F8F8D8D8D8B8B8B8A8A8A898989878787858585828282818181 7E7E7E7B7B7B797979191919000000000000000000000000000000000000000000000000000000 0000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000 0000000000000000000000000000000000000000000000002323234040404040403F3F3F3F3F3F 3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939 393939383838383838373737373737373737363636363636353535353535343434343434333333 3333333333333232323232323131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E 2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828 272727272727262626262626252525252525252525242424242424242424232323232323232323 2222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E 1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A 1A1A1A191919191919191919181818181818181818171717171717171717161616161616131313 020202000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1616161919192020202626262A2A2A2F2F2F3131313535353838383B3B3B3D3D3D3D3D3D3D3D3D 3F3F3F3F3F3F3D3D3D3B3B3B3A3A3A3636363535353333333131312A2A2A2626262424241D1D1D 161616101010000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 7D7D7D000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060606060C0C0C0E0E0E111111131313151515 1919191C1C1C1C1C1C1E1E1E202020222222222222222222222222232323242424232323232323 2323232222222020201E1E1E1D1D1D1C1C1C1B1B1B1717171515151212120F0F0F0D0D0D070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 0404040404040404040404040000000000000000000000000000000000000000004C4C4CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6C6000000000000000000000000000000000000 000000060606161616161616161616171717171717171717171717171717181818181818181818 1818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020212121212121212121212121222222222222222222232323232323232323242424 242424242424242424252525252525252525262626262626262626262626272727272727272727 2828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131 323232323232333333333333343434343434343434353535353535363636363636373737373737 3838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141424242424242424242434343 4343434444444444444545454545454646464646464747474747474848484949494949494A4A4A 4A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050515151515151 5252525252525353535353535454545555555555555656565656565757575757575858585C5C5C 5F5F5F6262626464646868686A6A6A6D6D6D6E6E6E7171717373737474747878787979797C7C7C 7E7E7E7F7F7F8181818383838484848787878888888A8A8A8C8C8C8C8C8C8E8E8E909090919191 9292929393939494949595959696969797979898989999999999999A9A9A9A9A9A9C9C9C9B9B9B 9C9C9C9D9D9D9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0 A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5 A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9A9A9A9AAAAAA282626050101 0501010501010501010501010501014644447A7A7A9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C 9C9C9C9C9C9C9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A 9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999999999999999999999989898989898989898 989898989898979797979797979797979797979797969696969696969696969696959595959595 959595959595959595949494949494949494949494949494939393939393939393939393929292 9292929292929191919191919090909090908E8E8E8D8D8D8B8B8B8A8A8A888888878787848484 8282828080807E7E7E7A7A7A797979191919000000000000000000000000000000000000000000 0000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0A0A0A000000000000000000000000000000000000000000000000000000232323404040404040 3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A 3A3A3A393939393939383838383838373737373737363636363636363636353535353535343434 3434343333333333333232323232323232323131313131313030303030302F2F2F2F2F2F2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828 282828282828272727272727262626262626252525252525252525242424242424242424232323 2323232323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1A1A1A1A1A1A1A1A1A191919191919191919181818181818171717171717171717161616161616 161616121212020202000000000000000000000000000000000000000000000000000000131313 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000001010101616161919192020202424242A2A2A2F2F2F3131313535353838383A3A3A3B3B3B 3D3D3D3D3D3D3F3F3F3F3F3F3D3D3D3B3B3B3A3A3A3636363535353535353131312D2D2D282828 2424241D1D1D161616101010000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF9C9C9C000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060606060C0C0C0E0E0E111111 1313131515151919191B1B1B1C1C1C1E1E1E202020222222222222222222222222232323242424 2323232323232323232222222020201E1E1E1D1D1D1D1D1D1B1B1B1919191515151212120F0F0F 0D0D0D0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404010101000000000000000000000000000000000000 070707F2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4020202000000000000000000 000000000000000000020202161616161616161616171717171717171717171717171717181818 1818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F202020202020202020212121212121212121212121222222222222222222232323232323 232323232323242424242424242424252525252525252525262626262626262626262626272727 2727272727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030 313131313131323232323232333333333333333333343434343434353535353535363636363636 3737373737373838383838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C 3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242 424242434343434343444444444444454545454545464646464646474747474747484848494949 4949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050 505050515151525252525252535353535353545454545454555555565656565656575757575757 5858585B5B5B5D5D5D6060606363636565656969696B6B6B6D6D6D6F6F6F717171737373767676 7878787A7A7A7C7C7C7E7E7E7F7F7F8181818383838585858686868989898A8A8A8B8B8B8D8D8D 8F8F8F9090909191919191919494949494949595959696969797979797979898989A9A9A9B9B9B 9B9B9B9B9B9B9C9C9C9D9D9D9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4 A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A9A9A9A9A9A9AAAAAA 2826260501010501010501010501010501010501014644447A7A7A9C9C9C9C9C9C9B9B9B9B9B9B 9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A 9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999999999999999999999989898989898989898 989898989898979797979797979797979797979797969696969696969696969696969696959595 959595959595959595959595949494949494949494949494949494939393939393939393939393 9292929292929292929292929191919191919090909090908E8E8E8D8D8D8B8B8B8A8A8A888888 8686868484848181818080807E7E7E7A7A7A797979191919000000000000000000000000000000 0000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000000000232323 4040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B 3A3A3A3A3A3A393939393939383838383838383838373737373737363636363636353535353535 3434343434343434343333333333333232323232323131313131313030303030303030302F2F2F 2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929 292929282828282828272727272727272727262626262626252525252525242424242424242424 2323232323232323232222222222222222222121212121212121212020202020202020201F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717171717171717 161616161616161616121212020202000000000000000000000000000000000000000000000000 000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909091616161919191D1D1D2424242828282F2F2F313131353535363636 3A3A3A3B3B3B3B3B3B3D3D3D3F3F3F3F3F3F3D3D3D3B3B3B3A3A3A363636353535353535313131 2D2D2D2828282424241D1D1D161616101010000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFBDBDBD000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0E0E0E1010101313131515151818181B1B1B1C1C1C1D1D1D1F1F1F212121222222222222222222 2323232424242323232323232323232222222121211F1F1F1D1D1D1D1D1D1C1C1C191919161616 1414141111110F0F0F0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404030303000000000000000000000000 000000000000000000ABABABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF272727000000 000000000000000000000000000000000000141414161616161616171717171717171717171717 1717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222222222 232323232323232323232323242424242424242424252525252525252525262626262626262626 2626262727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 303030303030313131313131323232323232323232333333333333343434343434353535353535 3636363636363737373737373737373838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B 3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141 414141424242424242434343434343444444444444454545454545464646464646474747474747 4848484848484949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F 4F4F4F505050505050515151515151525252535353535353545454545454555555555555565656 5757575757575858585858585C5C5C5D5D5D6161616363636666666969696A6A6A6D6D6D6F6F6F 7272727575757676767979797A7A7A7C7C7C7E7E7E808080828282838383858585878787888888 8A8A8A8B8B8B8D8D8D8F8F8F909090919191929292949494949494969696979797979797999999 9999999A9A9A9A9A9A9B9B9B9C9C9C9D9D9D9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F 9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4 A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9 A9A9A9AAAAAA2826260501010501010501010501010501010501014644447A7A7A9B9B9B9B9B9B 9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A 9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999999999999999999999989898989898989898 989898989898989898979797979797979797979797979797969696969696969696969696969696 959595959595959595959595959595949494949494949494949494949494939393939393939393 9393939292929292929292929292929292929191919191919090909090908E8E8E8D8D8D8A8A8A 8A8A8A8888888686868484848181818080807D7D7D7A7A7A787878191919000000000000000000 0000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000 0000002323234040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B 3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838383838373737373737373737363636363636 353535353535343434343434333333333333333333323232323232313131313131303030303030 2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A 2A2A2A292929292929282828282828272727272727262626262626252525252525252525242424 242424242424232323232323232323222222222222222222212121212121212121202020202020 2020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717 171717171717161616161616161616121212020202000000000000000000000000000000000000 000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909091010101919191D1D1D2424242828282D2D2D2F2F2F 3333333636363A3A3A3A3A3A3B3B3B3D3D3D3D3D3D3D3D3D3D3D3D3B3B3B3A3A3A383838363636 3333333131312D2D2D2828282424241D1D1D161616101010090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090E0E0E1010101111111515151818181B1B1B1C1C1C1D1D1D1F1F1F212121222222 2222222222222323232424242323232222222323232323232222222020201E1E1E1D1D1D1C1C1C 1A1A1A1616161414141111110F0F0F0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404000000000000 0000000000000000000000000000005B5B5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 575757000000000000000000000000000000000000000000101010161616161616171717171717 1717171717171717171717171818181818181818181818181919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222 222222222222222222232323232323232323242424242424242424252525252525252525252525 262626262626262626272727272727272727282828282828282828282828292929292929292929 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F303030303030313131313131313131323232323232333333333333343434343434 3535353535353636363636363636363737373737373838383838383939393939393A3A3A3A3A3A 3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040 404040414141414141424242424242434343434343444444444444444444454545454545464646 4747474747474848484848484949494949494A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D 4E4E4E4F4F4F4F4F4F505050505050515151515151525252535353535353545454545454555555 5555555656565656565757575858585858585959595C5C5C5E5E5E606060636363676767696969 6B6B6B6E6E6E7070707272727474747777777878787A7A7A7C7C7C7E7E7E808080828282838383 8585858686868888888B8B8B8C8C8C8D8D8D8F8F8F919191919191929292949494959595969696 9797979898989999999A9A9A9A9A9A9B9B9B9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9D9D9D9E9E9E 9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3 A3A3A3A3A3A3A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8 A8A8A8A9A9A9A9A9A9AAAAAA2826260501010501010501010501010501010501014644447A7A7A 9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A 9A9A9A9A9A9A9A9A9A9A9A9A999999999999999999999999999999999999999999989898989898 989898989898989898979797979797979797979797979797969696969696969696969696969696 959595959595959595959595959595959595949494949494949494949494949494939393939393 9393939393939292929292929292929292929292929191919191919090909090908F8F8F8E8E8E 8D8D8D8A8A8A8A8A8A8888888686868484848181817F7F7F7D7D7D797979787878191919000000 0000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000 0000000000000000002323233F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C 3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838383838373737373737363636 363636353535353535353535343434343434333333333333323232323232313131313131313131 3030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B 2A2A2A2A2A2A292929292929282828282828282828272727272727262626262626252525252525 252525242424242424242424232323232323232323222222222222222222212121212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818 181818171717171717171717161616161616161616121212020202000000000000000000000000 000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF585858000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909091010101919191D1D1D242424282828 2D2D2D2F2F2F3333333636363838383A3A3A3A3A3A3B3B3B3D3D3D3D3D3D3D3D3D3B3B3B3A3A3A 3838383636363333332F2F2F2A2A2A2626262424241D1D1D161616101010090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000080808 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB040404000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C0E0E0E1111111515151818181A1A1A1C1C1C1D1D1D1F1F1F 2121212222222222222222222323232424242323232222222323232323232222222020201F1F1F 1D1D1D1D1D1D1A1A1A1717171515151212120F0F0F0D0D0D070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 0101010000000000000000000000000000000000000F0F0FF9F9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF8787870000000000000000000000000000000000000000000B0B0B161616161616 161616171717171717171717171717171717181818181818181818181818191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121 212121222222222222222222222222232323232323232323242424242424242424252525252525 252525252525262626262626262626272727272727272727272727282828282828282828292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232333333333333 343434343434353535353535353535363636363636373737373737383838383838393939393939 3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F 3F3F3F404040404040414141414141424242424242434343434343434343444444444444454545 4545454646464747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C 4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050515151515151525252525252535353545454 5454545555555555555656565656565757575858585858585959595959595D5D5D5E5E5E616161 6464646767676A6A6A6C6C6C6F6F6F7070707373737474747777777979797A7A7A7D7D7D7E7E7E 8080808383838484848686868787878989898B8B8B8C8C8C8F8F8F909090909090929292939393 9595959696969696969797979898989898989A9A9A9A9A9A9C9C9C9C9C9C9C9C9C9D9D9D9D9D9D 9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2 A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7 A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9AAAAAA282626050101050101050101050101050101050101 4644447A7A7A9B9B9B9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A 9A9A9A9A9A9A9A9A9A999999999999999999999999999999999999999999989898989898989898 989898989898989898989898979797979797979797979797979797969696969696969696969696 969696959595959595959595959595959595959595949494949494949494949494949494939393 939393939393939393929292929292929292929292929292919191919191909090909090909090 8F8F8F8E8E8E8C8C8C8A8A8A8989898888888585858484848181817F7F7F7D7D7D797979777777 1919190000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000 0000000000000000000000000000002323233F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D 3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838373737373737 373737363636363636353535353535343434343434343434333333333333323232323232313131 3131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727272727262626262626 252525252525242424242424242424232323232323232323222222222222222222212121212121 2121212020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818 181818181818171717171717171717161616161616161616151515121212020202000000000000 000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000909091010101919191D1D1D 2424242626262D2D2D2F2F2F3131313636363838383A3A3A3A3A3A3B3B3B3B3B3B3D3D3D3D3D3D 3B3B3B3A3A3A3838383636363333332F2F2F2A2A2A2626262424241D1D1D161616101010090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E1111111414141818181A1A1A1C1C1C 1C1C1C1E1E1E212121222222222222222222232323242424232323222222232323232323222222 2121211F1F1F1E1E1E1D1D1D1B1B1B1717171515151212121111110D0D0D0A0A0A020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404020202000000000000000000000000000000000000000000BABABAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFB7B7B7000000000000000000000000000000000000000000060606 161616161616161616171717171717171717171717171717181818181818181818181818191919 1919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 212121212121212121212121222222222222222222232323232323232323242424242424242424 242424252525252525252525262626262626262626272727272727272727272727282828282828 2828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131323232323232 333333333333343434343434343434353535353535363636363636373737373737383838383838 3939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E 3E3E3E3F3F3F3F3F3F404040404040414141414141424242424242424242434343434343444444 4444444545454545454646464646464747474848484848484949494949494A4A4A4A4A4A4B4B4B 4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050515151515151525252525252 5353535353535454545555555555555656565656565757575757575858585959595959595A5A5A 5D5D5D5F5F5F6262626464646868686A6A6A6C6C6C6F6F6F717171737373757575777777797979 7C7C7C7D7D7D8080808080808383838585858686868888888A8A8A8C8C8C8E8E8E8F8F8F8F8F8F 9292929393939494949494949696969797979797979898989999999A9A9A9B9B9B9B9B9B9C9C9C 9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1 A1A1A1A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6 A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9A9A9A9282626050101050101050101050101 0501010501014644447A7A7A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A 9A9A9A999999999999999999999999999999999999999999999999999999989898989898989898 989898989898989898989898979797979797979797979797979797969696969696969696969696 969696969696959595959595959595959595959595949494949494949494949494949494939393 939393939393939393939393929292929292929292929292929292919191919191919191909090 9090908F8F8F8F8F8F8D8D8D8C8C8C8A8A8A8989898787878585858383838181817F7F7F7D7D7D 797979777777191919000000000000000000000000000000000000000000000000000000000000 2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000 0000000000000000000000000000000000000000002323233F3F3F3F3F3F3E3E3E3E3E3E3D3D3D 3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939383838383838 373737373737363636363636363636353535353535343434343434333333333333323232323232 3232323131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C 2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828272727272727262626 262626252525252525252525242424242424242424232323232323232323222222222222222222 2121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919 191919181818181818181818171717171717171717161616161616161616151515121212020202 000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1616161D1D1D2020202626262A2A2A2D2D2D3131313535353636363838383A3A3A3A3A3A3B3B3B 3B3B3B3B3B3B3B3B3B3A3A3A3636363636363333332F2F2F2A2A2A2626262424241D1D1D161616 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 3F3F3F000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090C0C0C0E0E0E111111141414181818 1A1A1A1C1C1C1C1C1C1E1E1E212121222222222222222222232323242424232323222222232323 2323232323232121211F1F1F1E1E1E1D1D1D1B1B1B1717171515151212121111110D0D0D0A0A0A 070707020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 0404040404040404040404040303030000000000000000000000000000000000000000006A6A6A FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9000000000000000000000000000000000000 000000010101161616161616161616171717171717171717171717171717181818181818181818 1818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020212121212121212121212121222222222222222222232323232323232323232323 242424242424242424252525252525252525262626262626262626262626272727272727272727 2828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131 323232323232333333333333333333343434343434353535353535363636363636373737373737 3838383838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242424242434343 4343434444444444444545454545454646464646464747474747474848484949494949494A4A4A 4A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151 525252525252535353535353545454545454555555565656565656575757575757585858585858 5959595A5A5A5A5A5A5E5E5E5F5F5F6262626464646868686B6B6B6C6C6C6F6F6F717171747474 7474747777777979797C7C7C7D7D7D7E7E7E8181818383838484848686868989898A8A8A8C8C8C 8D8D8D8F8F8F9090909191919393939494949595959595959696969797979999999999999A9A9A 9B9B9B9B9B9B9C9C9C9D9D9D9D9D9D9E9E9E9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0 A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5 A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8A9A9A9A9A9A9282626050101050101 0501010501010501010501014644447A7A7A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A999999 999999999999999999999999999999999999999999999999999999989898989898989898989898 989898989898989898989898979797979797979797979797979797979797969696969696969696 969696969696959595959595959595959595959595959595949494949494949494949494949494 939393939393939393939393939393929292929292929292929292929292919191919191919191 9191919090909090908F8F8F8E8E8E8D8D8D8C8C8C8A8A8A898989878787858585838383818181 7F7F7F7D7D7D797979777777191919000000000000000000000000000000000000000000000000 0000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A 0000000000000000000000000000000000000000000000000000002222223F3F3F3E3E3E3E3E3E 3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838 383838383838373737373737363636363636353535353535343434343434343434333333333333 3232323232323131313131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D 2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828282828272727 272727262626262626252525252525252525242424242424242424232323232323232323222222 2222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A 191919191919191919181818181818181818171717171717171717161616161616161616151515 121212020202000000000000000000000000000000000000000000000000000000131313FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091010101616161D1D1D2020202626262A2A2A2D2D2D313131353535363636383838383838 3A3A3A3B3B3B3B3B3B3B3B3B3A3A3A3838383636363636363333332F2F2F2A2A2A262626242424 1D1D1D161616101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF606060000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090E0E0E101010 1313131616161919191B1B1B1C1C1C1E1E1E202020212121222222222222242424242424242424 2424242525252323232222222121212020201E1E1E1D1D1D1B1B1B1A1A1A171717141414111111 0D0D0D0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404040404010101000000000000000000000000000000 0000001B1B1BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF191919000000000000000000 000000000000000000000000131313161616161616171717171717171717171717171717181818 1818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F202020202020202020202020212121212121212121222222222222222222232323232323 232323232323242424242424242424252525252525252525262626262626262626262626272727 2727272727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030 313131313131323232323232323232333333333333343434343434353535353535363636363636 3737373737373737373838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C 3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242 424242434343434343444444444444454545454545464646464646474747474747484848484848 4949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050 505050515151515151525252535353535353545454545454555555555555565656575757575757 5858585858585959595959595A5A5A5B5B5B5E5E5E6060606262626565656767676B6B6B6D6D6D 7070707272727474747676767878787A7A7A7B7B7B7E7E7E7F7F7F828282838383858585878787 8A8A8A8A8A8A8B8B8B8D8D8D8F8F8F909090919191939393949494959595969696979797989898 9999999999999A9A9A9A9A9A9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E9F9F9F9F9F9F9F9F9F A0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4 A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9A9A9A9282626 0501010501010501010501010501010501014644447A7A7A999999999999999999999999999999 999999999999999999999999999999999999999999999999989898989898989898989898989898 989898989898989898979797979797979797979797979797979797979797969696969696969696 969696969696969696959595959595959595959595959595959595949494949494949494949494 949494939393939393939393939393939393929292929292929292929292929292919191919191 9191919191919191919090909090908F8F8F8E8E8E8D8D8D8C8C8C8A8A8A898989878787858585 8383838080807F7F7F7C7C7C797979777777191919000000000000000000000000000000000000 0000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0A0A0A0000000000000000000000000000000000000000000000000000002222223F3F3F 3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939 393939383838383838373737373737363636363636363636353535353535343434343434333333 3333333333333232323232323131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E 2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828 272727272727272727262626262626252525252525242424242424242424232323232323232323 2222222222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A191919191919191919181818181818181818171717171717171717161616161616 161616151515121212020202000000000000000000000000000000000000000000000000000000 131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909091616161919192020202424242A2A2A2D2D2D313131353535363636 3838383838383A3A3A3A3A3A3B3B3B3B3B3B3A3A3A3838383636363535353333332F2F2F2A2A2A 2626262424241D1D1D161616101010090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF808080000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0E0E0E1010101313131515151919191B1B1B1C1C1C1E1E1E202020212121222222222222242424 2424242424242424242525252323232222222222222121211F1F1F1D1D1D1B1B1B1A1A1A171717 1515151111110F0F0F0A0A0A070707070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404020202000000000000000000 000000000000000000000000C2C2C2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF525252000000 0000000000000000000000000000000000000E0E0E161616161616171717171717171717171717 1717171717171818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222222222 222222232323232323232323242424242424242424252525252525252525252525262626262626 2626262727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 303030303030313131313131313131323232323232333333333333343434343434353535353535 3636363636363636363737373737373838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B 3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141 414141424242424242434343434343444444444444444444454545454545464646474747474747 4848484848484949494949494A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F 4F4F4F505050505050515151515151525252525252535353545454545454555555555555565656 5656565757575858585858585959595959595A5A5A5A5A5A5B5B5B5F5F5F606060646464656565 6868686B6B6B6D6D6D7171717272727474747575757777777B7B7B7C7C7C7F7F7F808080828282 8484848686868787878A8A8A8A8A8A8D8D8D8E8E8E8F8F8F919191929292929292949494969696 9696969797979898989999999999999B9B9B9C9C9C9C9C9C9D9D9D9D9D9D9D9D9D9F9F9F9F9F9F 9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3 A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9 A9A9A92826260501010501010501010501010501010501014644447A7A7A999999999999999999 999999999999999999999999999999999999999999989898989898989898989898989898989898 989898989898989898979797979797979797979797979797979797979797969696969696969696 969696969696969696959595959595959595959595959595959595949494949494949494949494 949494949494939393939393939393939393939393929292929292929292929292929292919191 9191919191919191919191919090909191918F8F8F8F8F8F8D8D8D8D8D8D8B8B8B8A8A8A898989 8787878585858383838181817D7D7D7B7B7B787878767676191919000000000000000000000000 0000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000000000000000 2222223E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A 393939393939383838383838383838373737373737363636363636353535353535353535343434 3434343333333333333232323232323131313131313131313030303030302F2F2F2F2F2F2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929 282828282828272727272727262626262626252525252525252525242424242424242424232323 2323232323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717171717171717161616 161616161616151515151515121212010101000000000000000000000000000000000000000000 000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909091010101919191D1D1D2424242A2A2A2D2D2D2F2F2F 3333333636363636363838383838383A3A3A3A3A3A3A3A3A3A3A3A383838363636353535333333 2F2F2F2A2A2A2626262424241D1D1D161616101010090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1A1A1000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090E0E0E1010101313131515151919191B1B1B1C1C1C1D1D1D202020212121222222 2222222424242424242424242424242424242323232323232222222121211F1F1F1D1D1D1C1C1C 1A1A1A1717171515151212120F0F0F0D0D0D0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404030303000000 000000000000000000000000000000000000696969FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8C8C8C000000000000000000000000000000000000000000090909161616161616161616171717 1717171717171717171717171818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121222222 222222222222222222232323232323232323242424242424242424242424252525252525252525 262626262626262626272727272727272727272727282828282828282828292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F303030303030303030313131313131323232323232333333333333343434343434 3535353535353535353636363636363737373737373838383838383939393939393939393A3A3A 3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040 404040414141414141424242424242434343434343434343444444444444454545454545464646 4646464747474848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D 4E4E4E4E4E4E4F4F4F505050505050515151515151525252525252535353535353545454555555 5555555656565656565757575757575858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5F5F5F 6161616363636666666868686C6C6C6D6D6D7171717171717474747676767979797C7C7C7D7D7D 7F7F7F8181818282828585858686868888888A8A8A8B8B8B8C8C8C8E8E8E8F8F8F919191929292 9393939595959595959696969797979898989999999A9A9A9C9C9C9C9C9C9C9C9C9D9D9D9E9E9E 9F9F9F9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2 A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8 A8A8A8A8A8A8A9A9A92826260501010501010501010501010501010501014644447A7A7A999999 999999999999999999999999989898989898989898989898989898989898989898989898989898 989898989898979797979797979797979797979797979797979797979797969696969696969696 969696969696969696959595959595959595959595959595959595959595949494949494949494 949494949494939393939393939393939393939393939393929292929292929292929292929292 9191919191919191919191919191919090909090909090908F8F8F8E8E8E8D8D8D8D8D8D8B8B8B 8A8A8A8787878686868585858282828080807D7D7D7B7B7B787878767676191919000000000000 0000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000 0101010000002222223E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A 3A3A3A3A3A3A393939393939383838383838373737373737373737363636363636353535353535 3434343434343333333333333333333232323232323131313131313030303030303030302F2F2F 2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929 292929282828282828282828272727272727262626262626252525252525252525242424242424 242424232323232323232323222222222222222222212121212121212121202020202020202020 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717171717 171717161616161616161616151515151515121212010101000000000000000000000000000000 000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 585858000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909091010101919191D1D1D242424282828 2D2D2D2F2F2F3333333636363636363636363838383A3A3A3A3A3A3A3A3A383838363636363636 3535353131312F2F2F2A2A2A2626262424241D1D1D161616101010090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000080808FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1C1C1000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C1010101111111515151818181A1A1A1C1C1C1D1D1D202020 212121222222222222242424242424242424242424242424242424232323222222222222202020 1E1E1E1D1D1D1B1B1B1919191616161212120F0F0F0D0D0D0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404010101000000000000000000000000000000000000141414FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFC6C6C6000000000000000000000000000000000000000000040404161616161616 161616171717171717171717171717171717181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020212121212121 212121212121222222222222222222232323232323232323242424242424242424242424252525 252525252525262626262626262626262626272727272727272727282828282828282828292929 2929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131323232323232333333333333 343434343434343434353535353535363636363636373737373737383838383838383838393939 3939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F 3F3F3F404040404040414141414141424242424242424242434343434343444444444444454545 4545454646464646464747474747474848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C 4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151525252525252535353535353 5454545454545555555656565656565757575757575858585858585959595A5A5A5A5A5A5B5B5B 5B5B5B5C5C5C5F5F5F6161616464646666666969696C6C6C6E6E6E707070727272747474777777 7979797B7B7B7D7D7D7F7F7F8080808282828585858787878888888A8A8A8B8B8B8C8C8C8D8D8D 8F8F8F9191919292929393939595959696969797979797979898989A9A9A9B9B9B9B9B9B9C9C9C 9D9D9D9D9D9D9D9D9D9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2 A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7 A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9282626050101050101050101050101050101050101464444 7A7A7A989898989898989898989898989898989898989898989898989898989898989898989898 989898979797979797979797979797979797979797979797979797969696969696969696969696 969696969696969696959595959595959595959595959595959595959595949494949494949494 949494949494949494939393939393939393939393939393939393929292929292929292929292 9292929191919191919191919191919191919090909090909090909090908F8F8F8E8E8E8D8D8D 8C8C8C8B8B8B8989898787878585858585858282828080807D7D7D7B7B7B787878757575191919 0000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000 0000000000000101010505052222223E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B 3B3B3B3A3A3A3A3A3A393939393939383838383838383838373737373737363636363636353535 353535353535343434343434333333333333323232323232323232313131313131303030303030 2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A 2A2A2A292929292929282828282828272727272727262626262626262626252525252525242424 242424242424232323232323232323222222222222222222222222212121212121212121202020 2020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818 171717171717171717161616161616161616151515151515121212010101000000000000000000 000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000909091010101919191D1D1D 2020202828282A2A2A2D2D2D3131313535353636363636363838383A3A3A3A3A3A3A3A3A383838 3636363636363333333131312F2F2F2A2A2A2626262424241D1D1D161616101010090909090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E1111111515151818181A1A1A1C1C1C 1D1D1D1F1F1F212121222222222222242424242424242424242424242424242424232323232323 2222222121211E1E1E1D1D1D1B1B1B1A1A1A1717171414141111110F0F0F0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404020202000000000000000000000000000000000000000000B7B7B7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF8F8F8080808000000000000000000000000000000000000000000 151515161616161616171717171717171717171717171717181818181818181818181818181818 1919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020 202020212121212121212121222222222222222222232323232323232323232323242424242424 242424252525252525252525262626262626262626262626272727272727272727282828282828 2828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131323232323232 333333333333333333343434343434353535353535363636363636373737373737373737383838 3838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E 3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242434343434343444444 4444444545454545454646464646464747474747474848484848484949494A4A4A4A4A4A4B4B4B 4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F505050505050515151515151525252 535353535353545454545454555555555555565656575757575757585858585858595959595959 5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C6060606161616464646666666969696C6C6C6E6E6E717171 7272727575757777777979797C7C7C7D7D7D7F7F7F8181818383838585858686868989898A8A8A 8B8B8B8C8C8C8E8E8E9090909191919292929494949595959595959797979898989999999A9A9A 9A9A9A9B9B9B9C9C9C9D9D9D9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A0A0A0A1A1A1 A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A6A6A6 A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A9A9A9282626050101050101050101050101050101 0501014644447A7A7A989898989898989898989898989898989898989898989898989898979797 979797979797979797979797979797979797979797979797979797969696969696969696969696 969696969696969696959595959595959595959595959595959595959595949494949494949494 949494949494949494949494939393939393939393939393939393929292929292929292929292 9292929292929191919191919191919191919191919090909090909090909090909090908F8F8F 8E8E8E8C8C8C8C8C8C8A8A8A8989898787878585858585858181818080807D7D7D7B7B7B787878 7575751919190000000000000000000000000000000000000000000000000000000000002F2F2F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000 0000000000000000000000000101010505052222223E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C 3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838383838373737373737373737363636 363636353535353535343434343434343434333333333333323232323232313131313131303030 3030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B 2A2A2A2A2A2A292929292929292929282828282828272727272727262626262626252525252525 252525242424242424242424232323232323232323222222222222222222212121212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818 181818171717171717171717161616161616161616151515151515151515111111010101000000 000000000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1616161D1D1D2020202626262828282D2D2D3131313535353636363636363838383A3A3A3A3A3A 3A3A3A3838383636363535353333333131312F2F2F2A2A2A282828242424202020191919101010 090909090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD 070707000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060606060C0C0C0E0E0E111111151515181818 1A1A1A1C1C1C1C1C1C1F1F1F212121222222222222242424242424242424242424242424252525 2424242323232323232121211F1F1F1D1D1D1C1C1C1B1B1B1717171515151111110F0F0F0D0D0D 070707070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404030303000000000000000000000000000000000000000000 5E5E5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B3B3B000000000000000000000000000000 000000000000111111161616161616171717171717171717171717171717171717181818181818 1818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121222222222222222222222222232323232323232323 242424242424242424252525252525252525252525262626262626262626272727272727272727 2828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131 313131323232323232333333333333343434343434353535353535363636363636363636373737 3737373838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242424242434343 434343444444444444444444454545454545464646474747474747484848484848494949494949 4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050515151 515151525252525252535353545454545454555555555555565656565656575757585858585858 5959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5D5D5D606060626262646464676767696969 6C6C6C6F6F6F7171717474747575757878787A7A7A7B7B7B7D7D7D808080818181838383858585 8787878989898A8A8A8B8B8B8E8E8E8E8E8E909090919191939393949494959595959595989898 9999999999999A9A9A9B9B9B9B9B9B9C9C9C9D9D9D9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA0A0A0 A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5 A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8A8A8A8272525050101050101050101 0501010501010501014644447A7A7A989898989898989898989898979797979797979797979797 979797979797979797979797979797979797979797979797969696969696969696969696969696 969696969696969696959595959595959595959595959595959595959595959595949494949494 949494949494949494949494939393939393939393939393939393939393929292929292929292 9292929292929191919191919191919191919191919191919090909090909090909090908F8F8F 8F8F8F8F8F8F8D8D8D8C8C8C8C8C8C8A8A8A8989898787878585858484848181817F7F7F7D7D7D 7A7A7A787878757575191919000000000000000000000000000000000000000000000000000000 0000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000 0000000000000000000000000000000000000101010505052626263E3E3E3D3D3D3D3D3D3C3C3C 3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838383838373737373737 363636363636353535353535353535343434343434333333333333323232323232323232313131 3131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828272727272727272727262626262626 252525252525252525242424242424242424232323232323232323222222222222222222212121 2121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919 181818181818181818171717171717171717161616161616161616151515151515151515111111 010101000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091010101616161D1D1D2020202626262828282D2D2D313131333333363636363636383838 3838383A3A3A3A3A3A3838383636363535353333333131312F2F2F2A2A2A282828242424202020 191919101010090909090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF242424000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090E0E0E111111 1414141818181A1A1A1B1B1B1C1C1C1F1F1F212121222222222222242424242424242424242424 2424242424242525252323232323232222221F1F1F1D1D1D1D1D1D1B1B1B191919151515121212 0F0F0F0D0D0D0A0A0A070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404040404040404010101000000000000000000000000 0000000000000D0D0DF6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767676000000000000000000 0000000000000000000000000C0C0C161616161616171717171717171717171717171717171717 1818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020212121212121212121222222222222222222222222232323 232323232323242424242424242424252525252525252525252525262626262626262626272727 2727272727272727272828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030 303030313131313131323232323232333333333333343434343434353535353535353535363636 3636363737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C 3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141424242 424242434343434343434343444444444444454545454545464646464646474747484848484848 4949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F 505050515151515151525252525252535353535353545454555555555555565656565656575757 5757575858585858585959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D616161626262 6666666767676A6A6A6D6D6D6F6F6F7272727373737676767777777A7A7A7C7C7C7E7E7E808080 8282828484848585858787878989898B8B8B8C8C8C8D8D8D8F8F8F909090929292939393949494 9595959797979898989898989999999999999B9B9B9C9C9C9D9D9D9D9D9D9D9D9D9E9E9E9E9E9E 9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4 A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8272525050101 050101050101050101050101050101464444797979979797979797979797979797979797979797 979797979797979797979797979797979797979797969696969696969696969696969696969696 969696969696969696959595959595959595959595959595959595959595959595949494949494 949494949494949494949494949494939393939393939393939393939393939393929292929292 929292929292929292919191919191919191919191919191909090909090909090909090909090 8F8F8F8F8F8F8F8F8F8E8E8E8D8D8D8C8C8C8C8C8C8A8A8A898989878787858585848484818181 7F7F7F7C7C7C7A7A7A787878757575191919000000000000000000000000000000000000000000 0000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0A0A0A000000000000000000000000000000000000000000010101050505262626414141414141 3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939383838383838373737 373737373737363636363636353535353535343434343434343434333333333333323232323232 3131313131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C 2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828272727272727262626 262626262626252525252525242424242424242424232323232323232323222222222222222222 2121212121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919 191919191919181818181818181818171717171717171717161616161616161616151515151515 151515111111010101000000000000000000000000000000000000000000000000000000131313 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101616161919192020202626262828282D2D2D313131333333353535 3636363636363838383838383838383838383636363535353333333131312F2F2F2A2A2A282828 242424202020191919101010090909090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF454545000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0E0E0E1111111414141818181A1A1A1B1B1B1C1C1C1E1E1E212121212121222222242424242424 2424242424242424242424242525252424242323232222222020201D1D1D1D1D1D1B1B1B191919 1616161212121111110D0D0D0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303040404 040404040404040404040404040404040404040404040404040404040404020202000000000000 000000000000000000000000000000ACACACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF000000 000000000000000000000000000000000000070707161616161616161616171717171717171717 1717171717171818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222 222222232323232323232323242424242424242424242424252525252525252525262626262626 2626262626262727272727272727272828282828282828282929292929292929292929292A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 2F2F2F303030303030313131313131323232323232333333333333333333343434343434353535 3535353636363636363737373737373838383838383838383939393939393A3A3A3A3A3A3B3B3B 3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141 414141414141424242424242434343434343444444444444454545454545464646464646474747 4747474848484848484949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E 4F4F4F4F4F4F505050505050515151525252525252535353535353545454545454555555555555 5656565757575757575858585858585959595959595A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D 5D5D5D6161616262626565656868686A6A6A6D6D6D6F6F6F7171717272727575757878787A7A7A 7C7C7C7E7E7E8080808181818484848585858787878989898B8B8B8C8C8C8D8D8D8F8F8F909090 9191919393939494949595959797979898989898989898989A9A9A9B9B9B9C9C9C9D9D9D9E9E9E 9E9E9E9E9E9E9E9E9E9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A3A3A3A3A3A3 A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7A8A8A8A8A8A8 272525050101050101050101050101050101050101464444797979979797979797979797979797 979797979797979797979797969696969696969696969696969696969696969696969696969696 969696969696959595959595959595959595959595959595959595959595959595949494949494 949494949494949494949494949494939393939393939393939393939393939393929292929292 929292929292929292929292919191919191919191919191919191909090909090909090909090 9090908F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8D8D8D8C8C8C8C8C8C8A8A8A898989868686858585 8383838181817F7F7F7C7C7C7A7A7A777777757575181818000000000000000000000000000000 0000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000010101050505262626 4141414141414040403C3C3C3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838 383838373737373737363636363636363636353535353535343434343434333333333333333333 3232323232323131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828282828272727 272727262626262626252525252525252525242424242424242424232323232323232323222222 2222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A 191919191919191919191919181818181818181818171717171717171717161616161616161616 151515151515151515111111010101000000000000000000000000000000000000000000000000 000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101616161919192020202424242828282A2A2A2F2F2F 3333333535353636363636363838383838383838383636363636363535353333333131312F2F2F 2A2A2A282828242424202020191919101010090909090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B6B6B000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C1010101313131616161818181A1A1A1C1C1C1E1E1E1F1F1F202020212121 2222222424242424242424242424242424242525252424242323232222222020201E1E1E1D1D1D 1C1C1C1A1A1A1717171515151212120F0F0F0D0D0D070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 000000000000000000000000000000000000000000535353FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EBEBEB010101000000000000000000000000000000000000020202161616161616161616171717 1717171717171717171717171818181818181818181818181818181919191919191919191A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121 222222222222222222232323232323232323232323242424242424242424252525252525252525 262626262626262626262626272727272727272727282828282828282828282828292929292929 2929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2E2E2E2F2F2F2F2F2F303030303030313131313131323232323232323232333333333333343434 3434343535353535353636363636363737373737373737373838383838383939393939393A3A3A 3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040 404040404040414141414141424242424242434343434343444444444444444444454545454545 4646464747474747474848484848484949494949494A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D 4D4D4D4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252535353545454545454 5555555555555656565656565757575858585858585959595959595A5A5A5A5A5A5B5B5B5B5B5B 5C5C5C5D5D5D5D5D5D5E5E5E6161616363636565656868686A6A6A6D6D6D707070727272747474 7575757878787B7B7B7D7D7D7E7E7E8181818383838585858686868787878A8A8A8B8B8B8B8B8B 8D8D8D8F8F8F9191919191919393939595959595959797979898989999999A9A9A9A9A9A9B9B9B 9D9D9D9D9D9D9D9D9D9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2 A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7 A7A7A7A8A8A8272525050101050101050101050101050101050101464444797979979797979797 969696969696969696969696969696969696969696969696969696969696969696969696969696 969696959595959595959595959595959595959595959595959595959595959595949494949494 949494949494949494949494949494939393939393939393939393939393939393939393929292 929292929292929292929292919191919191919191919191919191919191909090909090909090 9090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8D8D8D8C8C8C8B8B8B8A8A8A888888 8686868484848383838181817F7F7F7C7C7C797979777777747474181818000000000000000000 0000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000010101 0808082828284141414040404040403C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A393939393939 383838383838373737373737373737363636363636353535353535343434343434343434333333 3333333232323232323131313131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828 272727272727272727262626262626252525252525242424242424242424242424232323232323 2323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A191919191919191919181818181818181818171717171717171717161616161616 161616151515151515151515141414111111010101000000000000000000000000000000000000 000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909091010101616161919191D1D1D242424262626 2A2A2A2F2F2F313131353535353535363636363636363636363636363636353535333333313131 3131312F2F2F2A2A2A282828242424202020191919101010090909090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF949494000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C1010101313131515151818181A1A1A1C1C1C1E1E1E1F1F1F 202020212121222222242424242424242424242424242424252525242424232323222222212121 1E1E1E1D1D1D1C1C1C1A1A1A1717171515151212121111110D0D0D0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404010101000000000000000000000000000000000000080808F0F0F0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF252525000000000000000000000000000000000000000000121212161616 161616171717171717171717171717171717171717181818181818181818181818191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121222222222222222222222222232323232323232323242424242424242424252525 252525252525252525262626262626262626272727272727272727282828282828282828282828 2929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D 2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232323232333333 333333343434343434353535353535353535363636363636373737373737383838383838393939 3939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E 3F3F3F3F3F3F404040404040414141414141424242424242434343434343434343444444444444 4545454545454646464646464747474848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C 4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050515151515151525252525252535353 5353535454545555555555555656565656565757575757575858585858585959595A5A5A5A5A5A 5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5E5E5E5E5E5E6262626363636767676868686B6B6B6D6D6D 7070707272727373737676767979797A7A7A7D7D7D7F7F7F828282828282858585868686888888 8A8A8A8B8B8B8C8C8C8E8E8E8F8F8F909090929292949494959595959595979797989898999999 9999999A9A9A9B9B9B9D9D9D9E9E9E9E9E9E9E9E9E9E9E9EA0A0A0A1A1A1A0A0A0A1A1A1A1A1A1 A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6 A6A6A6A7A7A7A7A7A7A8A8A8272525050101050101050101050101050101050101464444797979 969696969696969696969696969696969696969696969696969696969696969696969696969696 959595959595959595959595959595959595959595959595959595959595949494949494949494 949494949494949494949494949494939393939393939393939393939393939393939393929292 929292929292929292929292929292919191919191919191919191919191919191909090909090 9090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8C8C8C8C8C8C8B8B8B 8A8A8A8888888686868484848282828080807F7F7F7B7B7B797979767676747474181818000000 0000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000 0000000101010808082828284242424040404040403F3F3F3B3B3B3B3B3B3A3A3A3A3A3A393939 393939383838383838383838373737373737363636363636363636353535353535343434343434 3333333333333333333232323232323131313131313030303030303030302F2F2F2F2F2F2E2E2E 2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929 282828282828272727272727262626262626252525252525252525242424242424242424232323 2323232323232222222222222222222121212121212121212020202020202020202020201F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717171717171717 161616161616161616151515151515151515141414111111010101000000000000000000000000 000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF585858000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000909091616161919191D1D1D 2424242626262A2A2A2D2D2D313131333333353535363636363636363636363636363636353535 3333333131313131312F2F2F2A2A2A282828242424202020191919101010090909090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000080808 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEBEBE000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E1111111515151818181A1A1A1C1C1C 1D1D1D1F1F1F202020212121222222242424242424242424242424242424252525252525232323 2323232121211F1F1F1D1D1D1D1D1D1B1B1B1919191616161414141111110D0D0D0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404020202000000000000000000000000000000000000000000A1A1A1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5F000000000000000000000000000000000000000000 0D0D0D161616161616171717171717171717171717171717171717181818181818181818181818 1919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020212121212121212121222222222222222222222222232323232323232323242424242424 242424242424252525252525252525262626262626262626272727272727272727272727282828 2828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131323232 323232333333333333343434343434343434353535353535363636363636373737373737383838 3838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D 3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141424242424242424242434343434343 4444444444444545454545454646464646464747474747474848484949494949494A4A4A4A4A4A 4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151525252 525252535353535353545454545454555555555555565656575757575757585858585858595959 5959595A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E626262646464666666 6A6A6A6B6B6B6E6E6E7070707272727474747777777979797C7C7C7E7E7E7F7F7F828282838383 8585858787878888888A8A8A8B8B8B8D8D8D8D8D8D8F8F8F909090929292949494959595959595 9696969898989999999999999A9A9A9C9C9C9D9D9D9E9E9E9E9E9E9F9F9F9F9F9F9F9F9FA1A1A1 A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5 A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7A7A7A7272525050101050101050101050101050101050101 464444797979969696969696969696969696969696969696969696969696959595959595959595 959595959595959595959595959595959595959595959595959595959595949494949494949494 949494949494949494949494949494939393939393939393939393939393939393939393929292 929292929292929292929292929292929292919191919191919191919191919191909090909090 9090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8F8F8F8C8C8C8C8C8C 8B8B8B8A8A8A8989898787878585858484848282828080807E7E7E7B7B7B797979767676737373 1818180000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000 0000000000000000000101010808082828284141414141414040403F3F3F3B3B3B3A3A3A3A3A3A 3A3A3A393939393939383838383838373737373737373737363636363636353535353535343434 3434343434343333333333333232323232323131313131313131313030303030302F2F2F2F2F2F 2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929 292929282828282828272727272727272727262626262626252525252525252525242424242424 242424232323232323232323222222222222222222212121212121212121202020202020202020 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919181818181818181818171717 171717171717161616161616161616151515151515151515141414111111010101000000000000 000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909161616 1919191D1D1D2424242626262A2A2A2D2D2D313131333333353535363636363636363636363636 3636363535353333333131313131312F2F2F2A2A2A282828242424202020191919101010090909 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6E6E6 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060C0C0C0E0E0E111111141414161616 1919191C1C1C1D1D1D1F1F1F202020212121222222242424242424242424242424242424242424 2525252424242323232222222020201F1F1F1D1D1D1C1C1C1919191616161515151212120F0F0F 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404000000000000000000000000000000000000 000000484848FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF999999000000000000000000000000000000 000000000000070707161616161616161616171717171717171717171717171717181818181818 1818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 202020202020202020212121212121212121212121222222222222222222232323232323232323 242424242424242424242424252525252525252525262626262626262626262626272727272727 2727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131 313131323232323232333333333333333333343434343434353535353535363636363636373737 3737373737373838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C 3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242 434343434343444444444444454545454545464646464646474747474747484848484848494949 4949494A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F505050505050 515151515151525252525252535353545454545454555555555555565656565656575757585858 5858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F 6262626464646767676969696B6B6B6E6E6E7070707272727575757777777A7A7A7C7C7C7D7D7D 7F7F7F8181818383838585858787878888888A8A8A8B8B8B8D8D8D8D8D8D909090919191929292 9393939595959696969797979898989898989A9A9A9B9B9B9C9C9C9D9D9D9D9D9D9E9E9E9F9F9F A0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4 A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7A7A7A7272525050101050101050101050101 050101050101464444797979969696959595959595959595959595959595959595959595959595 959595959595959595959595959595959595959595959595959595949494949494949494949494 949494949494949494949494949494939393939393939393939393939393939393939393929292 929292929292929292929292929292929292919191919191919191919191919191919191909090 9090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E 8C8C8C8C8C8C8B8B8B8A8A8A8888888787878585858484848282828080807D7D7D7B7B7B797979 767676727272181818000000000000000000000000000000000000000000000000000000000000 2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000 0000000000000000000000000000000101010B0B0B2A2A2A4141414141414040403F3F3F3F3F3F 3A3A3A3A3A3A393939393939383838383838383838373737373737363636363636363636353535 353535343434343434333333333333333333323232323232313131313131303030303030303030 2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A 292929292929292929282828282828272727272727262626262626262626252525252525242424 242424242424232323232323232323232323222222222222222222212121212121212121202020 2020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818 171717171717171717161616161616161616151515151515151515141414141414111111010101 000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091010101616161D1D1D2424242626262A2A2A2D2D2D313131333333353535353535363636 3636363636363636363535353333333131313131312D2D2D2A2A2A262626242424202020191919 161616101010090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF111111000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090E0E0E111111 1414141616161818181B1B1B1C1C1C1E1E1E202020212121222222242424242424242424242424 2424242424242525252525252323232222222121212020201E1E1E1D1D1D1A1A1A171717151515 1212120F0F0F0A0A0A070707070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404050505010101000000000000000000 000000000000000000040404EAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3000000000000000000 000000000000000000000000020202161616161616161616171717171717171717171717171717 1818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222222222232323 232323232323232323242424242424242424252525252525252525252525262626262626262626 2727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030 303030313131313131313131323232323232333333333333343434343434353535353535363636 3636363636363737373737373838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B 3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141 424242424242434343434343434343444444444444454545454545464646464646474747484848 4848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F 4F4F4F505050515151515151525252525252535353535353545454545454555555565656565656 5757575757575858585858585959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D 5E5E5E5F5F5F5F5F5F6363636464646767676969696C6C6C6F6F6F717171737373757575777777 7A7A7A7B7B7B7E7E7E7F7F7F8181818383838585858686868888888A8A8A8B8B8B8D8D8D8E8E8E 9090909191919292929494949595959595959696969898989999999999999B9B9B9C9C9C9D9D9D 9D9D9D9E9E9E9F9F9F9F9F9FA0A0A0A1A1A1A2A2A2A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3 A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6A7A7A7A7A7A7272525050101050101 050101050101050101050101464444797979959595959595959595959595959595959595959595 959595959595959595959595959595959595959595949494949494949494949494949494949494 949494949494949494949494949494939393939393939393939393939393939393939393939393 929292929292929292929292929292929292919191919191919191919191919191919191919191 9090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E 8E8E8E8E8E8E8D8D8D8C8C8C8B8B8B8989898888888686868484848383838181818080807C7C7C 7B7B7B797979757575727272181818000000000000000000000000000000000000000000000000 0000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A 0000000000000000000000000000000000000000000101010B0B0B292929444444414141404040 4040403E3E3E3E3E3E393939393939393939383838383838373737373737373737363636363636 353535353535343434343434343434333333333333323232323232313131313131313131303030 3030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2A2A2A2A2A2A292929292929282828282828282828272727272727262626262626252525252525 252525242424242424242424232323232323232323222222222222222222212121212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818 181818181818171717171717171717161616161616161616151515151515151515141414141414 111111010101000000000000000000000000000000000000000000000000000000131313FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101616161919192424242626262828282D2D2D313131333333333333 3535353535353535353636363636363535353333333131313131312D2D2D2A2A2A262626242424 202020191919161616101010090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF393939000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0E0E0E1010101414141515151818181A1A1A1C1C1C1E1E1E202020212121222222242424242424 2424242424242424242424242525252525252424242323232222222121211F1F1F1D1D1D1B1B1B 1919191616161414140F0F0F0D0D0D0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303040404 040404040404040404040404040404040404040404040404040404040404040404020202000000 000000000000000000000000000000000000909090FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE151515 000000000000000000000000000000000000000000121212161616161616171717171717171717 1717171717171717171818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121222222222222 222222222222232323232323232323242424242424242424252525252525252525252525262626 2626262626262727272727272727272727272828282828282828282929292929292929292A2A2A 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F 2F2F2F303030303030303030313131313131323232323232333333333333343434343434343434 3535353535353636363636363737373737373838383838383939393939393939393A3A3A3A3A3A 3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040 414141414141414141424242424242434343434343444444444444454545454545464646464646 4747474747474848484848484949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E 4E4E4E4F4F4F4F4F4F505050505050515151515151525252535353535353545454545454555555 5555555656565757575757575858585858585959595959595A5A5A5A5A5A5B5B5B5C5C5C5C5C5C 5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F6363636464646767676A6A6A6B6B6B6F6F6F727272 7272727575757777777A7A7A7C7C7C7D7D7D8080808181818383838585858787878888888A8A8A 8C8C8C8D8D8D8F8F8F9090909292929292929494949595959696969696969898989999999B9B9B 9A9A9A9B9B9B9D9D9D9D9D9D9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2 A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A6A6A6A6A6A6A6A6A6A7A7A7272525 050101050101050101050101050101050101464444797979959595959595959595959595959595 959595959595959595959595959595949494949494949494949494949494949494949494949494 949494949494949494949494939393939393939393939393939393939393939393939393939393 929292929292929292929292929292929292929292919191919191919191919191919191919191 9090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E 8E8E8E8E8E8E8E8E8E8D8D8D8C8C8C8B8B8B8A8A8A898989878787868686848484828282808080 7E7E7E7D7D7D7A7A7A787878757575727272181818000000000000000000000000000000000000 0000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0A0A0A0000000000000000000000000000000000000000000101010B0B0B292929444444 4343434040403F3F3F3E3E3E3E3E3E393939393939383838383838383838373737373737363636 363636353535353535353535343434343434333333333333333333323232323232313131313131 3030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828272727272727262626262626262626 252525252525242424242424242424242424232323232323232323222222222222222222212121 2121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919 191919181818181818181818171717171717171717161616161616161616151515151515151515 141414141414111111010101000000000000000000000000000000000000000000000000000000 131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101616161919192020202424242828282D2D2D2F2F2F 3131313333333333333535353535353636363636363535353333333131313131312D2D2D2A2A2A 262626242424202020191919161616101010090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C1010101313131515151818181A1A1A1C1C1C1E1E1E202020212121222222 242424242424242424242424242424242424252525252525252525232323232323222222202020 1D1D1D1C1C1C1919191616161414141111110D0D0D0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 0404040000000000000000000000000000000000000000002C2C2CFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF5757570000000000000000000000000000000000000000000C0C0C161616161616161616 171717171717171717171717171717181818181818181818181818191919191919191919191919 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121 212121222222222222222222232323232323232323242424242424242424242424252525252525 252525262626262626262626262626272727272727272727282828282828282828292929292929 2929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E 2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131323232323232333333333333333333 343434343434353535353535363636363636373737373737373737383838383838393939393939 3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F 404040404040404040414141414141424242424242434343434343444444444444444444454545 4545454646464747474747474848484848484949494949494A4A4A4B4B4B4B4B4B4C4C4C4C4C4C 4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050515151515151525252525252535353535353 5454545555555555555656565656565757575757575858585959595959595A5A5A5A5A5A5B5B5B 5B5B5B5C5C5C5C5C5C5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F6060606363636565656767676A6A6A 6C6C6C6F6F6F7171717373737575757777777A7A7A7C7C7C7D7D7D808080828282848484858585 8787878989898A8A8A8C8C8C8D8D8D8F8F8F909090929292939393949494959595969696989898 9898989A9A9A9A9A9A9B9B9B9B9B9B9D9D9D9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A0A0A0A1A1A1 A1A1A1A3A3A3A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6 A6A6A6272525050101050101050101050101050101050101464444797979959595959595959595 959595949494949494949494949494949494949494949494949494949494949494949494949494 949494949494949494939393939393939393939393939393939393939393939393939393929292 929292929292929292929292929292929292929292919191919191919191919191919191919191 9090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8E8E8E 8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8C8C8C8B8B8B898989888888878787868686848484 8282828080807E7E7E7C7C7C7A7A7A777777757575727272181818000000000000000000000000 0000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0A0A0A0000000000000000000000000000000000000000000101010B0B0B 2929294343434343434040403F3F3F3F3F3F3D3D3D3D3D3D393939383838383838373737373737 373737363636363636353535353535343434343434343434333333333333323232323232313131 3131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C 2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929282828282828282828272727272727262626 262626252525252525252525242424242424242424232323232323232323222222222222222222 2121212121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919 191919191919181818181818181818171717171717171717161616161616161616151515151515 151515141414141414141414101010010101000000000000000000000000000000000000000000 000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000090909101010161616191919202020242424282828 2A2A2A2F2F2F313131313131333333333333353535353535353535353535333333313131313131 2D2D2D2A2A2A262626242424202020191919161616101010090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B8B8B000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C1010101313131515151616161A1A1A1C1C1C1E1E1E202020 212121222222242424242424242424242424242424242424242424252525252525242424232323 2222222020201E1E1E1C1C1C1A1A1A1717171515151111110F0F0F0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 040404040404050505010101000000000000000000000000000000000000000000CBCBCBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF9B9B9B000000000000000000000000000000000000000000070707161616 161616161616171717171717171717171717171717181818181818181818181818181818191919 1919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121222222222222222222232323232323232323232323242424242424242424 252525252525252525262626262626262626262626272727272727272727282828282828282828 2828282929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D 2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232323232 333333333333343434343434353535353535363636363636363636373737373737383838383838 3939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E 3E3E3E3F3F3F3F3F3F404040404040414141414141424242424242434343434343434343444444 4444444545454545454646464646464747474747474848484949494949494A4A4A4A4A4A4B4B4B 4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151525252525252 535353535353545454545454555555555555565656575757575757585858585858595959595959 5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F606060606060646464 6464646666666868686C6C6C6E6E6E7070707272727676767878787979797C7C7C7E7E7E7F7F7F 8181818383838686868686868888888A8A8A8C8C8C8D8D8D8E8E8E909090919191929292939393 9494949696969797979898989999999999999A9A9A9C9C9C9C9C9C9D9D9D9E9E9E9F9F9FA0A0A0 A0A0A0A1A1A1A1A1A1A2A2A2A2A2A2A2A2A2A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5 A5A5A5A6A6A6A6A6A6272525050101050101050101050101050101050101464444797979949494 949494949494949494949494949494949494949494949494949494949494949494949494949494 949494949494939393939393939393939393939393939393939393939393939393939393929292 929292929292929292929292929292929292929292919191919191919191919191919191919191 9191919090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8B8B8B8B8B8B898989888888878787 8585858484848181818080807E7E7E7B7B7B7A7A7A777777747474707070181818000000000000 0000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000 0101010B0B0B2929294343434343434242423F3F3F3F3F3F3D3D3D3D3D3D3C3C3C383838383838 373737373737363636363636353535353535353535343434343434333333333333333333323232 3232323131313131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D 2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828272727272727 272727262626262626252525252525252525242424242424242424232323232323232323222222 2222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A 1A1A1A191919191919191919181818181818181818171717171717171717161616161616161616 151515151515151515141414141414141414101010010101000000000000000000000000000000 000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 585858000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909101010161616191919202020 2424242626262A2A2A2D2D2D2F2F2F313131313131333333333333353535353535333333313131 3131313131312D2D2D2A2A2A262626242424202020191919161616101010090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000080808FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4B4B4000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1111111414141616161A1A1A1C1C1C 1D1D1D1F1F1F202020222222242424242424252525262626262626262626262626272727252525 2525252323232222222121211E1E1E1D1D1D1B1B1B1919191717171414141111110D0D0D070707 070707020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303040404040404040404040404040404040404040404 040404040404040404040404050505030303000000000000000000000000000000000000000000 6A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E0000000000000000000000000000000000000000000 010101161616161616161616171717171717171717171717171717171717181818181818181818 1818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020212121212121212121222222222222222222222222232323232323232323242424 242424242424252525252525252525252525262626262626262626272727272727272727272727 2828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131 323232323232333333333333343434343434343434353535353535363636363636373737373737 3838383838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242424242434343 4343434444444444444545454545454646464646464747474747474848484848484949494A4A4A 4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F505050505050515151 515151525252525252535353545454545454555555555555565656565656575757575757585858 5959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F 6060606060606161616565656666666969696C6C6C6E6E6E7171717272727676767878787A7A7A 7C7C7C7E7E7E8080808181818282828585858686868888888A8A8A8B8B8B8D8D8D8D8D8D909090 9292929292929393939494949696969797979898989999999A9A9A9B9B9B9B9B9B9D9D9D9E9E9E 9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1A2A2A2A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4 A5A5A5A5A5A5A5A5A5A6A6A6A6A6A6272525050101050101050101050101050101050101464444 797979949494949494949494949494949494949494949494949494949494949494949494949494 939393939393939393939393939393939393939393939393939393939393939393929292929292 929292929292929292929292929292929292929292919191919191919191919191919191919191 9191919090909090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8C8C8C8B8B8B898989898989 8888888787878585858383838181818080807E7E7E7B7B7B797979777777737373707070181818 0000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000 0000000000000101010B0B0B2929294343434343434242424242423F3F3F3F3F3F3C3C3C3C3C3C 3C3C3C373737373737363636363636363636353535353535343434343434343434333333333333 3232323232323131313131313131313030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D 2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929282828282828 272727272727262626262626252525252525252525242424242424242424232323232323232323 2222222222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A191919191919191919181818181818181818171717171717171717171717161616 161616161616151515151515151515141414141414141414101010010101000000000000000000 000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF585858000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909101010101010 1919191D1D1D2020202626262828282D2D2D2F2F2F2F2F2F313131333333333333353535333333 3333333131312F2F2F2F2F2F2D2D2D2A2A2A262626242424202020191919161616101010090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090E0E0E111111141414161616 1919191C1C1C1D1D1D1E1E1E202020222222232323242424252525252525262626262626262626 2727272525252525252323232222222121211F1F1F1D1D1D1B1B1B1A1A1A171717141414111111 0D0D0D0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404040404000000000000000000000000000000 0000000000000F0F0FF5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF242424000000000000000000000000 000000000000000000121212161616161616161616171717171717171717171717171717181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 1F1F1F202020202020202020212121212121212121212121222222222222222222232323232323 232323242424242424242424242424252525252525252525262626262626262626262626272727 2727272727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030 313131313131323232323232323232333333333333343434343434353535353535363636363636 3737373737373737373838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C 3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242 424242434343434343444444444444444444454545454545464646464646474747484848484848 4949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F 505050515151515151525252525252535353535353545454545454555555565656565656575757 5757575858585858585959595959595A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E 5E5E5E5F5F5F6060606060606161616161616565656666666969696C6C6C6E6E6E717171737373 7676767878787A7A7A7C7C7C7D7D7D7E7E7E8282828383838585858686868888888A8A8A8B8B8B 8D8D8D8F8F8F8F8F8F9090909292929494949595959696969797979898989999999999999B9B9B 9B9B9B9D9D9D9E9E9E9E9E9E9F9F9FA0A0A0A0A0A0A1A1A1A1A1A1A1A1A1A3A3A3A2A2A2A3A3A3 A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5A6A6A6272525050101050101050101050101050101 050101464444797979949494949494949494949494949494949494939393939393939393939393 939393939393939393939393939393939393939393939393939393939393939393929292929292 929292929292929292929292929292929292929292919191919191919191919191919191919191 9191919090909090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8B8B8B 8A8A8A8888888888888686868585858383838181818080807E7E7E7B7B7B797979757575737373 7070701818180000000000000000000000000000000000000000000000000000000000002F2F2F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000 0000000000000000000000000101010D0D0D2B2B2B4444444343434343434141414141413F3F3F 3E3E3E3C3C3C3B3B3B373737373737363636363636353535353535353535343434343434333333 3333333232323232323232323131313131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828 282828272727272727272727262626262626252525252525252525242424242424242424232323 2323232323232222222222222222222121212121212121212020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717171717171717 161616161616161616151515151515151515141414141414141414131313101010010101000000 000000000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 0909091010101919191D1D1D2020202424242828282A2A2A2D2D2D2F2F2F313131313131333333 3333333333333333333131312F2F2F2F2F2F2D2D2D2A2A2A262626242424202020191919161616 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFD090909000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090E0E0E111111 1414141616161919191C1C1C1D1D1D1E1E1E202020212121232323242424242424252525262626 2626262626262727272626262525252424242323232222221F1F1F1D1D1D1C1C1C1B1B1B191919 1515151212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404050505010101000000000000 000000000000000000000000000000A5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF696969000000000000 0000000000000000000000000000000C0C0C161616161616161616171717171717171717171717 1717171818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222222222 232323232323232323232323242424242424242424252525252525252525262626262626262626 2626262727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 303030303030313131313131313131323232323232333333333333343434343434353535353535 3535353636363636363737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B 3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141 414141424242424242424242434343434343444444444444454545454545464646464646474747 4747474848484848484949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E 4F4F4F4F4F4F505050505050515151515151525252535353535353545454545454555555555555 5656565656565757575858585858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5D5D5D 5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F6060606060606161616262626565656666666969696C6C6C 6F6F6F7171717373737676767979797979797C7C7C7D7D7D808080828282828282868686878787 8888888A8A8A8C8C8C8D8D8D8F8F8F909090909090929292939393959595969696979797999999 9999999A9A9A9B9B9B9C9C9C9C9C9C9E9E9E9E9E9E9F9F9F9F9F9FA1A1A1A1A1A1A1A1A1A1A1A1 A3A3A3A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5272525050101050101050101 050101050101050101464444787878939393939393939393939393939393939393939393939393 939393939393939393939393939393939393939393939393939393929292929292929292929292 929292929292929292929292929292929292919191919191919191919191919191919191919191 9191919090909090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8B8B8B 8B8B8B8B8B8B8A8A8A8888888888888686868585858282828181818080807D7D7D7B7B7B787878 757575737373707070171717000000000000000000000000000000000000000000000000000000 0000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000 0000000000000000000000000000000000000101010D0D0D2B2B2B434343434343434343414141 4141413E3E3E3E3E3E3C3C3C3B3B3B3B3B3B363636363636363636353535353535343434343434 3333333333333333333232323232323131313131313131313030303030302F2F2F2F2F2F2E2E2E 2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929 292929282828282828272727272727262626262626262626252525252525242424242424242424 232323232323232323232323222222222222222222212121212121212121202020202020202020 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717 171717171717161616161616161616151515151515151515141414141414141414131313101010 010101000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101919191D1D1D2020202424242828282A2A2A2D2D2D2D2D2D313131 3131313333333333333333333131313131312F2F2F2F2F2F2D2D2D2A2A2A262626242424202020 191919161616101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF2F2F2F000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C1010101313131515151818181B1B1B1C1C1C1E1E1E202020212121222222242424242424 2424242626262626262626262626262727272525252525252323232222222121211E1E1E1D1D1D 1B1B1B1919191616161212120F0F0F0D0D0D0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404050505030303 000000000000000000000000000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFACACAC 000000000000000000000000000000000000000000060606161616161616161616171717171717 1717171717171717171818181818181818181818181818181919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121222222 222222222222222222232323232323232323242424242424242424252525252525252525252525 262626262626262626272727272727272727272727282828282828282828292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F303030303030313131313131323232323232333333333333343434343434 3434343535353535353636363636363737373737373838383838383838383939393939393A3A3A 3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040 404040404040414141414141424242424242434343434343444444444444444444454545454545 4646464747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D 4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050515151515151525252525252535353535353545454 5454545555555656565656565757575757575858585858585959595959595A5A5A5B5B5B5B5B5B 5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F606060606060616161616161626262656565 6767676A6A6A6C6C6C6E6E6E7171717373737676767777777B7B7B7B7B7B7D7D7D808080818181 8282828686868787878888888A8A8A8C8C8C8D8D8D8D8D8D8F8F8F919191929292939393959595 9696969696969898989898989999999A9A9A9B9B9B9D9D9D9C9C9C9E9E9E9F9F9F9F9F9F9F9F9F A1A1A1A2A2A2A1A1A1A3A3A3A3A3A3A3A3A3A4A4A4A4A4A4A5A5A5A5A5A5A5A5A5272525050101 050101050101050101050101050101464444797979939393939393939393939393939393939393 939393939393939393939393939393939393939393929292929292929292929292929292929292 929292929292929292929292929292929292919191919191919191919191919191919191919191 9191919090909090909090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D 8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8888888787878686868383838383838181817E7E7E7D7D7D 7979797878787575757171716F6F6F171717000000000000000000000000000000000000000000 0000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 0A0A0A0000000000000000000000000000000000000000000101010D0D0D2B2B2B434343434343 4242424242424141414040404040403D3D3D3D3D3D3B3B3B3A3A3A363636353535353535343434 3434343434343333333333333232323232323232323131313131313030303030303030302F2F2F 2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A 292929292929282828282828272727272727272727262626262626252525252525252525242424 242424242424232323232323232323222222222222222222212121212121212121202020202020 2020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818 171717171717171717161616161616161616161616151515151515151515141414141414141414 131313101010010101000000000000000000000000000000000000000000000000000000131313 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101616161D1D1D2020202424242828282A2A2A2D2D2D 2D2D2D2F2F2F3131313131313333333333333131313131312F2F2F2D2D2D2A2A2A282828262626 242424202020191919191919101010090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000080808FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF585858000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C1010101313131515151818181A1A1A1C1C1C1D1D1D1F1F1F212121222222 242424242424242424252525262626262626262626272727262626252525242424232323222222 1F1F1F1D1D1D1C1C1C1A1A1A1616161414141111110F0F0F0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303040404040404040404040404040404040404040404040404040404040404040404 040404050505000000000000000000000000000000000000000000010101DCDCDCFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEFEFEF030303000000000000000000000000000000000000010101151515161616161616 171717171717171717171717171717171717181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121 212121212121222222222222222222232323232323232323242424242424242424242424252525 252525252525262626262626262626262626272727272727272727282828282828282828292929 2929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131323232323232323232333333 333333343434343434353535353535363636363636363636373737373737383838383838393939 3939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E 3F3F3F3F3F3F404040404040414141414141424242424242424242434343434343444444444444 4545454545454646464646464747474747474848484949494949494A4A4A4A4A4A4B4B4B4B4B4B 4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151525252535353 5353535454545454545555555555555656565656565757575858585858585959595959595A5A5A 5A5A5A5B5B5B5B5B5B5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060606060616161 6161616262626666666666666A6A6A6C6C6C6E6E6E7070707474747676767878787979797B7B7B 7E7E7E7F7F7F8181818383838585858686868888888989898B8B8B8C8C8C8E8E8E8F8F8F919191 9393939393939595959696969797979797979999999A9A9A9A9A9A9B9B9B9C9C9C9D9D9D9D9D9D 9E9E9E9F9F9F9F9F9FA1A1A1A2A2A2A2A2A2A3A3A3A4A4A4A4A4A4A4A4A4A4A4A4A5A5A5A5A5A5 272525050101050101050101050101050101050101464444787878939393939393939393939393 939393939393939393939393939393929292929292929292929292929292929292929292929292 929292929292929292929292929292919191919191919191919191919191919191919191919191 9191919090909090909090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D 8D8D8D8C8C8C8B8B8B8B8B8B8B8B8B8A8A8A8989898787878686868585858484848282827F7F7F 7F7F7F7B7B7B7979797777777575757272726F6F6F171717000000000000000000000000000000 0000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0A0A0A0000000000000000000000000000000000000000000101010D0D0D2A2A2A 4343434343434242424242424141414040404040403D3D3D3D3D3D3A3A3A3A3A3A353535353535 353535343434343434333333333333333333323232323232313131313131313131303030303030 2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A 2A2A2A292929292929292929282828282828272727272727262626262626262626252525252525 242424242424242424242424232323232323232323222222222222222222212121212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818 181818181818171717171717171717161616161616161616151515151515151515141414141414 141414131313131313101010010101000000000000000000000000000000000000000000000000 000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909091010101616161919191D1D1D242424262626 2A2A2A2D2D2D2D2D2D2D2D2D2F2F2F3131313131313333333131313131312F2F2F2D2D2D2A2A2A 2828282626262424241D1D1D191919191919101010090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF828282000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060C0C0C0E0E0E1111111414141616161A1A1A1C1C1C1D1D1D1F1F1F 212121222222242424242424242424252525262626262626262626272727272727252525252525 2323232222222020201E1E1E1D1D1D1B1B1B1717171515151212121111110D0D0D070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 0404040404040404040505050202020000000000000000000000000000000000000000007E7E7E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF3636360000000000000000000000000000000000000000000F0F0F 161616161616161616171717171717171717171717171717181818181818181818181818191919 1919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020 202020212121212121212121222222222222222222232323232323232323232323242424242424 242424252525252525252525252525262626262626262626272727272727272727282828282828 2828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C 2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232 323232333333333333343434343434343434353535353535363636363636373737373737383838 3838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D 3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242424242434343434343 4444444444444545454545454646464646464747474747474848484848484949494949494A4A4A 4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050515151515151 525252525252535353535353545454555555555555565656565656575757575757585858585858 5959595959595A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F606060 6060606161616161616262626262626666666767676A6A6A6B6B6B6E6E6E707070737373757575 7878787979797C7C7C7D7D7D8080808181818383838585858686868888888989898A8A8A8D8D8D 8E8E8E9090909191919292929494949595959595959696969898989898989999999A9A9A9A9A9A 9C9C9C9D9D9D9F9F9F9E9E9E9F9F9FA1A1A1A0A0A0A1A1A1A2A2A2A3A3A3A4A4A4A4A4A4A4A4A4 A5A5A5A5A5A5272525050101050101050101050101050101050101464444787878939393929292 929292929292929292929292929292929292929292929292929292929292929292929292929292 929292929292929292929292919191919191919191919191919191919191919191919191919191 9191919090909090909090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8C8C8C8C8C8C8B8B8B8A8A8A8B8B8B898989888888878787868686858585828282 8181818080807D7D7D7B7B7B7979797676767474747070706F6F6F171717000000000000000000 0000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000010101 0D0D0D2A2A2A4343434242424242424141414141414040403F3F3F3D3D3D3C3C3C3C3C3C3A3A3A 393939353535343434343434343434333333333333323232323232323232313131313131303030 3030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B 2A2A2A2A2A2A2A2A2A292929292929282828282828272727272727272727262626262626252525 252525252525242424242424242424232323232323232323222222222222222222212121212121 2121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919 191919181818181818181818171717171717171717161616161616161616151515151515151515 141414141414141414131313131313101010010101000000000000000000000000000000000000 000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF939393 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000909091010101616161919191D1D1D 2020202626262828282A2A2A2A2A2A2D2D2D2F2F2F2F2F2F3131313131313131312F2F2F2F2F2F 2A2A2A2828282828282626262424241D1D1D191919191919101010090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000A0A0AFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0B0B0000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1111111414141616161919191C1C1C 1D1D1D1F1F1F212121222222232323242424242424242424262626262626262626272727272727 2626262525252525252323232121211E1E1E1D1D1D1C1C1C1919191515151414141111110D0D0D 0A0A0A020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404050505040404000000000000000000000000000000000000 0000001C1C1CFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A7A7A000000000000000000000000000000000000 000000090909161616161616161616171717171717171717171717171717181818181818181818 1818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F 202020202020202020212121212121212121222222222222222222222222232323232323232323 242424242424242424242424252525252525252525262626262626262626272727272727272727 2727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131 313131323232323232333333333333333333343434343434353535353535363636363636373737 3737373737373838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C 3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242424242 434343434343434343444444444444454545454545464646464646474747474747484848494949 4949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050 505050515151515151525252535353535353545454545454555555555555565656565656575757 5858585858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5E5E5E5E5E5E 5F5F5F5F5F5F6060606060606161616161616262626363636666666767676969696B6B6B6E6E6E 7070707272727575757878787979797B7B7B7D7D7D808080818181828282848484868686888888 8989898A8A8A8C8C8C8E8E8E8F8F8F919191919191939393949494959595969696989898989898 9999999A9A9A9B9B9B9C9C9C9D9D9D9E9E9E9F9F9F9F9F9FA0A0A0A0A0A0A1A1A1A2A2A2A2A2A2 A3A3A3A3A3A3A4A4A4A4A4A4272525050101050101050101050101050101050101464444787878 929292929292929292929292929292929292929292929292929292929292929292929292929292 929292929292919191919191919191919191919191919191919191919191919191919191919191 9090909090909090909090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8B8B8B8A8A8A898989898989888888868686858585 8585858282828181817E7E7E7C7C7C7A7A7A7878787676767373737070706D6D6D171717000000 0000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000 0000000101010D0D0D2A2A2A4444444444444444444343434141414040403F3F3F3F3F3F3C3C3C 3C3C3C393939393939353535343434343434333333333333333333323232323232313131313131 3030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929282828282828272727272727262626262626 262626252525252525242424242424242424242424232323232323232323222222222222222222 2121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919 191919191919181818181818181818171717171717171717161616161616161616151515151515 151515151515141414141414141414131313131313101010010101000000000000000000000000 000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFBBBBBB040404000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909101010 1919191D1D1D2020202424242626262828282A2A2A2A2A2A2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F 2D2D2D2D2D2D2A2A2A2828282626262626262020201D1D1D191919161616101010090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000111111 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090E0E0E111111131313161616 1919191C1C1C1D1D1D1E1E1E202020222222232323242424242424242424262626262626262626 2727272727272626262525252525252323232121211F1F1F1D1D1D1C1C1C191919161616141414 1212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404040404050505050505000000000000000000000000 000000000000000000000000BABABAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEBEBE000000000000000000000000 000000000000000000020202161616161616161616161616171717171717171717171717171717 1818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222232323 232323232323232323242424242424242424252525252525252525262626262626262626262626 2727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030 303030313131313131313131323232323232333333333333343434343434353535353535353535 3636363636363737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B 3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141 414141424242424242434343434343444444444444454545454545464646464646474747474747 4848484848484949494949494A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E 4F4F4F505050505050515151515151525252525252535353535353545454545454555555565656 5656565757575757575858585858585959595959595A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D 5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060616161616161626262626262636363636363676767 6969696C6C6C6D6D6D7070707272727575757676767979797B7B7B7D7D7D7F7F7F818181828282 8484848686868787878888888A8A8A8C8C8C8D8D8D8E8E8E919191929292929292949494959595 9696969797979898989898989A9A9A9B9B9B9B9B9B9D9D9D9E9E9E9E9E9E9F9F9F9F9F9FA1A1A1 A1A1A1A2A2A2A3A3A3A3A3A3A3A3A3A3A3A3272525050101050101050101050101050101050101 464444787878929292929292929292929292929292929292929292929292929292929292929292 919191919191919191919191919191919191919191919191919191919191919191919191919191 9090909090909090909090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8B8B8B8A8A8A898989888888878787 8686868585858484848282827F7F7F7E7E7E7C7C7C7A7A7A7777777575757373736F6F6F6D6D6D 1717170000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000 0000000000000000000101010D0D0D2C2C2C4444444444444343434343434141414040403F3F3F 3E3E3E3E3E3E3C3C3C3B3B3B393939383838343434343434333333333333323232323232313131 3131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C 2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828272727272727272727 262626262626252525252525252525242424242424242424232323232323232323222222222222 2222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A 1A1A1A191919191919191919181818181818181818171717171717171717161616161616161616 1515151515151515151414141414141414141313131313131313130F0F0F010101000000000000 000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF0F0F0040404000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 0909091010101616161919191D1D1D2020202626262828282828282A2A2A2A2A2A2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2A2A2A2828282626262626262424242020201D1D1D191919161616101010 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000002A2A2AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF151515000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E 1111111515151818181B1B1B1C1C1C1E1E1E202020222222232323242424242424242424252525 2626262626262727272727272727272626262525252323232323232121211E1E1E1C1C1C1A1A1A 1717171515151212120F0F0F0A0A0A070707070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404050505020202000000 000000000000000000000000000000000000585858FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F80A0A0A000000 000000000000000000000000000000000000121212161616161616161616171717171717171717 1717171717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222 222222222222232323232323232323242424242424242424252525252525252525252525262626 2626262626262727272727272727272727272828282828282828282929292929292929292A2A2A 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F 2F2F2F2F2F2F303030303030313131313131323232323232333333333333333333343434343434 3535353535353636363636363737373737373737373838383838383939393939393A3A3A3A3A3A 3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040 404040414141414141424242424242434343434343434343444444444444454545454545464646 4646464747474747474848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D 4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151525252535353535353545454545454 5555555555555656565656565757575757575858585959595959595A5A5A5A5A5A5B5B5B5B5B5B 5C5C5C5C5C5C5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060606060616161616161626262626262 6363636464646767676969696B6B6B6E6E6E7070707272727575757676767979797B7B7B7C7C7C 7E7E7E7F7F7F8282828383838585858787878888888A8A8A8C8C8C8D8D8D8F8F8F8F8F8F919191 9292929393939595959595959696969898989898989999999A9A9A9C9C9C9C9C9C9E9E9E9E9E9E 9F9F9FA0A0A0A1A1A1A1A1A1A2A2A2A3A3A3A3A3A3A3A3A3262424050101050101050101050101 050101050101464444787878929292929292929292929292919191919191919191919191919191 919191919191919191919191919191919191919191919191919191919191919191909090909090 9090909090909090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8B8B8B8A8A8A8A8A8A898989 8888888787878585858484848383838181817F7F7F7E7E7E7C7C7C797979777777757575727272 6F6F6F6C6C6C171717000000000000000000000000000000000000000000000000000000000000 2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000 0000000000000000000000000000000101010D0D0D2C2C2C444444434343434343434343424242 4040403F3F3F3E3E3E3E3E3E3B3B3B3B3B3B383838383838343434333333333333323232323232 3232323131313131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D 2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929282828282828272727 272727262626262626262626252525252525242424242424242424242424232323232323232323 2222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A191919191919191919181818181818181818171717171717171717171717161616 1616161616161515151515151515151414141414141414141313131313131313130F0F0F010101 000000000000000000000000000000000000000000000000000000131313FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF151515000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909090909091010101616161919191D1D1D202020242424262626262626282828282828 2A2A2A2A2A2A2D2D2D2A2A2A2A2A2A2828282626262626262424242424241D1D1D191919161616 161616101010090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000565656FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF464646000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606060606 0C0C0C0E0E0E1111111515151818181B1B1B1C1C1C1E1E1E202020222222232323242424242424 2525252626262626262626262727272727272727272727272525252323232323232222221F1F1F 1D1D1D1A1A1A1919191616161212120F0F0F0D0D0D0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404050505 040404000000000000000000000000000000000000000000060606E8E8E8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 4A4A4A0000000000000000000000000000000000000000000C0C0C161616161616161616171717 1717171717171717171717171717171818181818181818181818181919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121 212121222222222222222222232323232323232323242424242424242424242424252525252525 252525262626262626262626262626272727272727272727282828282828282828292929292929 2929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D 2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232323232333333333333 343434343434353535353535363636363636363636373737373737383838383838393939393939 3939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F 3F3F3F404040404040414141414141414141424242424242434343434343444444444444454545 4545454646464646464747474747474848484848484949494949494A4A4A4B4B4B4B4B4B4C4C4C 4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050515151515151525252525252535353 5353535454545454545555555656565656565757575757575858585858585959595959595A5A5A 5A5A5A5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060606060616161 6262626262626363636363636464646565656868686A6A6A6D6D6D707070727272757575767676 7878787A7A7A7D7D7D7E7E7E7F7F7F8282828383838484848686868989898989898B8B8B8D8D8D 8E8E8E8F8F8F9191919393939393939494949696969797979898989898989999999B9B9B9C9C9C 9C9C9C9D9D9D9E9E9E9E9E9E9F9F9FA1A1A1A1A1A1A2A2A2A2A2A2A3A3A3262424050101050101 050101050101050101050101464444787878919191919191919191919191919191919191919191 919191919191919191919191919191919191919191919191919191919191909090909090909090 9090909090909090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8B8B8B8B8B8B8A8A8A 8989898888888787878686868484848383838282828181817E7E7E7C7C7C7B7B7B797979767676 7474747171716F6F6F6C6C6C171717000000000000000000000000000000000000000000000000 0000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A 0000000000000000000000000000000000000000000101010D0D0D2C2C2C444444434343434343 4242424242424040403F3F3F3F3F3F3D3D3D3D3D3D3B3B3B383838383838373737333333333333 3232323232323131313131313131313030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D 2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828 272727272727272727262626262626252525252525252525242424242424242424232323232323 2323232222222222222222222222222121212121212121212020202020202020201F1F1F1F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717171717171717 161616161616161616151515151515151515141414141414141414131313131313131313131313 0F0F0F010101000000000000000000000000000000000000000000000000000000131313FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C6C6C000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101616161616161919191D1D1D202020242424262626 2626262828282828282A2A2A2A2A2A2A2A2A2828282828282626262626262424242020201D1D1D 191919161616101010101010090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000A0A0AA1A1A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF787878000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090E0E0E1111111414141818181A1A1A1C1C1C1D1D1D202020222222222222 242424242424252525262626262626272727272727272727272727272727252525242424232323 2222222020201D1D1D1B1B1B1919191616161414141111110D0D0D0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404050505050505010101000000000000000000000000000000000000000000848484FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF979797000000000000000000000000000000000000000000050505161616161616 161616161616171717171717171717171717171717181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121222222222222222222232323232323232323232323242424242424242424 252525252525252525252525262626262626262626272727272727272727282828282828282828 2828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C 2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232 333333333333343434343434343434353535353535363636363636373737373737383838383838 3838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E 3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242424242434343434343434343 4444444444444545454545454646464646464747474747474848484949494949494A4A4A4A4A4A 4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151 525252525252535353545454545454555555555555565656565656575757575757585858585858 5959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F606060 6060606161616161616262626262626363636363636464646565656969696A6A6A6D6D6D6F6F6F 7171717474747676767777777A7A7A7D7D7D7F7F7F808080828282838383848484878787888888 8989898B8B8B8C8C8C8E8E8E8F8F8F919191929292939393959595969696969696979797989898 9999999B9B9B9C9C9C9D9D9D9D9D9D9E9E9E9E9E9EA0A0A0A0A0A0A1A1A1A1A1A1A2A2A2262424 050101050101050101050101050101050101464444787878929292919191919191919191919191 919191919191919191919191919191919191919191919191909090909090909090909090909090 9090909090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D 8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8B8B8B8B8B8B8B8B8B 8989898989898888888787878686868585858484848282828181818080807E7E7E7B7B7B7A7A7A 7878787575757373737171716E6E6E6B6B6B171717000000000000000000000000000000000000 0000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF0A0A0A0000000000000000000000000000000000000000000101010F0F0F2C2C2C434343 4343434343434242424242424141413F3F3F3F3F3F3E3E3E3D3D3D3A3A3A3A3A3A383838373737 3333333232323232323232323131313131313030303030303030302F2F2F2F2F2F2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929 282828282828272727272727262626262626262626252525252525242424242424242424242424 2323232323232323232222222222222222222121212121212121212020202020202020201F1F1F 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919181818181818181818171717 171717171717161616161616161616151515151515151515141414141414141414131313131313 1313131212120F0F0F010101000000000000000000000000000000000000000000000000000000 131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E4010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909090909091010101616161919191D1D1D202020 2424242424242626262828282828282828282A2A2A282828282828262626262626242424242424 2020201D1D1D191919161616101010101010090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000E0E0EE5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9A9A9000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090C0C0C1010101313131616161A1A1A1C1C1C1C1C1C1F1F1F 212121222222242424242424252525262626262626272727272727272727272727272727252525 2525252323232323232121211E1E1E1C1C1C1B1B1B1717171515151212120F0F0F0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404050505030303000000000000000000000000000000000000000000 1D1D1DFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE5E5E5010101000000000000000000000000000000000000000000 141414161616161616161616171717171717171717171717171717181818181818181818181818 1818181919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020212121212121212121222222222222222222222222232323232323232323242424 242424242424242424252525252525252525262626262626262626272727272727272727272727 2828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131 323232323232323232333333333333343434343434353535353535363636363636363636373737 3737373838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D 3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242424242 434343434343444444444444454545454545464646464646474747474747484848484848494949 4949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050 515151515151525252525252535353535353545454545454555555555555565656575757575757 5858585858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5E5E5E5E5E5E 5F5F5F5F5F5F606060606060616161616161626262626262636363646464646464656565696969 6A6A6A6C6C6C6E6E6E7070707272727676767878787A7A7A7C7C7C7D7D7D7F7F7F808080838383 8585858585858787878989898A8A8A8C8C8C8E8E8E8F8F8F909090929292929292949494959595 9696969797979898989999999A9A9A9A9A9A9C9C9C9D9D9D9E9E9E9F9F9F9F9F9FA0A0A0A1A1A1 A1A1A1252323050101050101050101050101050101050101454343777777919191919191919191 919191919191919191919191909090909090909090909090909090909090909090909090909090 9090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D 8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8B8B8B8B8B8B 8B8B8B8A8A8A8989898989898888888787878585858484848383838282828181817F7F7F7D7D7D 7B7B7B7A7A7A7777777575757373737070706D6D6D6B6B6B161616000000000000000000000000 0000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF0A0A0A0000000000000000000000000000000000000000000202020F0F0F 2B2B2B4343434343434242424242424141414141414141414040403E3E3E3E3E3E3C3C3C3A3A3A 3939393737373737373232323232323131313131313030303030303030302F2F2F2F2F2F2E2E2E 2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929 292929282828282828272727272727272727262626262626252525252525252525242424242424 242424232323232323232323222222222222222222222222212121212121212121202020202020 2020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818 171717171717171717161616161616161616151515151515151515151515141414141414141414 1313131313131313131212120F0F0F010101000000000000000000000000000000000000000000 000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 232323000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909090909101010101010161616 1919191D1D1D202020202020242424262626262626262626262626262626262626262626242424 2020202020201D1D1D191919161616101010101010090909090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDB000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090C0C0C0E0E0E1111111515151919191B1B1B 1C1C1C1F1F1F212121222222242424242424262626262626272727272727272727272727282828 2727272525252525252424242323232222221F1F1F1D1D1D1C1C1C1A1A1A1616161212120F0F0F 0D0D0D0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404050505050505000000000000000000000000000000 000000000000000000AFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF343434000000000000000000000000000000 0000000000000E0E0E161616161616161616171717171717171717171717171717171717181818 1818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F202020202020202020212121212121212121212121222222222222222222232323232323 232323232323242424242424242424252525252525252525262626262626262626262626272727 2727272727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030 303030313131313131323232323232333333333333343434343434343434353535353535363636 3636363737373737373838383838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C 3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141 424242424242434343434343434343444444444444454545454545464646464646474747474747 4848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F 4F4F4F505050505050515151515151525252525252535353535353545454555555555555565656 5656565757575757575858585858585959595959595A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D 5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060606060616161626262626262636363636363646464 6565656565656666666A6A6A6B6B6B6D6D6D7070707272727676767777777979797B7B7B7D7D7D 7F7F7F8080808383838585858585858787878989898989898C8C8C8E8E8E8F8F8F909090919191 9393939494949595959595959797979898989999999999999B9B9B9C9C9C9D9D9D9E9E9E9E9E9E 9F9F9F9F9F9FA1A1A1252323050101050101050101050101050101050101454343767676909090 909090919191909090909090909090909090909090909090909090909090909090909090909090 9090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D 8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8B8B8B8B8B8B 8B8B8B8B8B8B8A8A8A8A8A8A898989898989888888858585848484838383828282818181808080 7E7E7E7D7D7D7A7A7A7878787676767474747171717070706C6C6C6A6A6A161616000000000000 0000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000000000000000 0202020F0F0F2B2B2B4343434242424242424242424141414141414040403E3E3E3E3E3E3E3E3E 3C3C3C3939393939393737373636363232323131313131313131313030303030302F2F2F2F2F2F 2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A 292929292929282828282828282828272727272727262626262626262626252525252525242424 242424242424242424232323232323232323222222222222222222212121212121212121202020 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919181818 181818181818171717171717171717161616161616161616151515151515151515141414141414 1414141313131313131313131212121212120F0F0F010101000000000000000000000000000000 000000000000000000000000131313FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB9B9B9010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909101010 1010101616161919191D1D1D1D1D1D1D1D1D202020242424242424242424242424242424242424 2424242020202020201D1D1D1D1D1D191919161616101010101010090909090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000E0E0EA7A7A7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE 0F0F0F000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090E0E0E111111141414 1818181A1A1A1C1C1C1E1E1E212121222222242424242424262626262626272727272727282828 2727272727272727272626262525252525252323232222222020201E1E1E1D1D1D1B1B1B171717 1414141111110D0D0D0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404050505050505020202000000000000 000000000000000000000000000000454545FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181000000000000000000 000000000000000000000000080808161616161616161616161616171717171717171717171717 1717171818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222222222 222222232323232323232323242424242424242424252525252525252525252525262626262626 2626262727272727272727272727272828282828282828282929292929292929292929292A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F 2F2F2F303030303030313131313131323232323232323232333333333333343434343434353535 3535353636363636363636363737373737373838383838383939393939393A3A3A3A3A3A3A3A3A 3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040 414141414141414141424242424242434343434343444444444444454545454545454545464646 4747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D 4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151525252525252535353535353545454545454 5555555555555656565656565757575757575858585959595959595A5A5A5A5A5A5B5B5B5B5B5B 5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F606060606060616161616161626262626262 6363636363636464646565656565656666666A6A6A6B6B6B6D6D6D707070737373757575777777 7878787A7A7A7C7C7C7E7E7E8080808181818484848686868787878989898A8A8A8C8C8C8D8D8D 8F8F8F8F8F8F9191919292929393939494949595959797979898989999999A9A9A9A9A9A9C9C9C 9C9C9C9E9E9E9F9F9F9E9E9E9F9F9F252323050101050101050101050101050101050101444242 7575758F8F8F8F8F8F909090909090909090909090909090909090909090909090909090909090 9090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8B8B8B 8B8B8B8A8A8A898989898989898989898989888888888888878787858585848484828282818181 7F7F7F7F7F7F7D7D7D7A7A7A7A7A7A7878787575757373737070706E6E6E6B6B6B686868161616 0000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0A0A0A000000000000000000000000000000 0000000000000101010D0D0D2A2A2A4242424242424242424141414141414141414040403E3E3E 3E3E3E3E3E3E3C3C3C3B3B3B393939363636363636323232313131313131303030303030303030 2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A 2A2A2A292929292929292929282828282828272727272727272727262626262626252525252525 252525242424242424242424232323232323232323222222222222222222222222212121212121 2121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919 181818181818181818171717171717171717171717161616161616161616151515151515151515 1414141414141414141313131313131313131212121212120F0F0F010101000000000000000000 000000000000000000000000000000000000161616FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF212121000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 010101010101010101010101020202020202020202020202020202030303030303030303030303 030303030303030303030303020202020202020202020202020202010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000001C1C1CFCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF3F3F3F000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090E0E0E 1111111414141818181A1A1A1C1C1C1E1E1E212121222222242424242424262626272727272727 2727272828282727272727272828282727272525252525252525252323232121211F1F1F1D1D1D 1C1C1C1919191515151111110F0F0F0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303040404 040404040404040404040404040404040404040404040404040404040404040404050505040404 000000000000000000000000000000000000000000010101D8D8D8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF000000 000000000000000000000000000000000000020202161616161616161616161616171717171717 1717171717171717171717171818181818181818181818181919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121 222222222222222222232323232323232323242424242424242424242424252525252525252525 262626262626262626262626272727272727272727282828282828282828282828292929292929 2929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E 2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232333333333333343434 343434343434353535353535363636363636373737373737383838383838383838393939393939 3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F 3F3F3F404040404040414141414141424242424242434343434343434343444444444444454545 4545454646464646464747474747474848484848484949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C 4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050515151515151525252525252535353 5353535454545454545555555656565656565757575757575858585858585959595959595A5A5A 5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060606060616161 6161616262626262626363636464646464646565656666666666666A6A6A6C6C6C6D6D6D707070 7272727373737676767979797A7A7A7C7C7C7D7D7D808080808080838383858585868686888888 8A8A8A8B8B8B8C8C8C8E8E8E8F8F8F919191919191929292949494959595969696979797989898 9898989A9A9A9B9B9B9C9C9C9D9D9D9E9E9E9E9E9E242222050101050101050101050101050101 0501014341417474748D8D8D8E8E8E8F8F8F8E8E8E8F8F8F909090909090909090909090909090 9090909090909090909090909090909090909090908F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8B8B8B 8B8B8B8B8B8B8B8B8B898989898989888888888888888888878787868686858585848484838383 8181817F7F7F7F7F7F7F7F7F7C7C7C7A7A7A7878787777777575757272726F6F6F6E6E6E6A6A6A 6868681616160000000000000000000000000000000000000000000000000000000000002F2F2F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0B0B0B000000000000000000 0000000000000000000000000101010D0D0D232323424242424242414141414141414141404040 3E3E3E3E3E3E3E3E3E3E3E3E3B3B3B3B3B3B393939363636363636313131313131313131303030 3030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B 2A2A2A2A2A2A2A2A2A292929292929282828282828282828272727272727262626262626262626 252525252525242424242424242424242424232323232323232323222222222222222222212121 2121212121212020202020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A191919 191919191919181818181818181818171717171717171717161616161616161616151515151515 1515151414141414141414141313131313131313131313131212121212120E0E0E010101000000 000000000000000000000000000000000000000000000000202020FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5D5D5030303000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000E0E0E B4B4B4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF707070000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090E0E0E1111111414141616161919191C1C1C1E1E1E212121222222242424252525262626 272727272727282828282828282828272727282828272727262626252525252525232323222222 1F1F1F1E1E1E1C1C1C1919191616161212120F0F0F0D0D0D070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 0505050505050101010000000000000000000000000000000000000000006F6F6FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF202020000000000000000000000000000000000000000000111111161616161616161616 161616171717171717171717171717171717181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121222222222222222222232323232323232323232323242424242424242424252525 252525252525252525262626262626262626272727272727272727272727282828282828282828 2929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D 2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131323232323232323232 333333333333343434343434353535353535363636363636363636373737373737383838383838 3939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E 3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242424242434343434343444444 4444444444444545454545454646464646464747474848484848484949494949494A4A4A4A4A4A 4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151 525252525252535353545454545454555555555555565656565656575757575757585858585858 5959595959595A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F 6060606060606161616161616262626262626363636464646464646565656666666666666A6A6A 6B6B6B6C6C6C6F6F6F7171717474747676767878787A7A7A7B7B7B7D7D7D7E7E7E808080828282 8484848585858787878989898A8A8A8B8B8B8E8E8E8E8E8E8F8F8F919191929292939393959595 9595959696969797979898989999999B9B9B9B9B9B9C9C9C9D9D9D232121050101050101050101 050101050101050101413F3F7373738D8D8D8D8D8D8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E 8E8E8E8E8E8E8E8E8E8E8E8E8F8F8F8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8B8B8B8A8A8A 8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A898989888888888888888888878787868686868686848484 8383838282828080808080807E7E7E7C7C7C7B7B7B7979797878787676767373737070706F6F6F 6B6B6B696969666666151515000000000000000000000000000000000000000000000000000000 0000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0C0C0C000000 0000000000000000000000000000000000000101010D0D0D1C1C1C404040424242414141414141 4040403E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3B3B3B383838383838353535353535313131 3030303030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929282828282828272727272727272727262626 262626252525252525252525242424242424242424232323232323232323222222222222222222 2222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A 191919191919191919181818181818181818181818171717171717171717161616161616161616 1515151515151515151414141414141414141313131313131313131212121212121212120C0C0C 010101000000000000000000000000000000000000000000000000000000333333FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E6E6E010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0707074A4A4AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1A1A1000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090E0E0E1111111414141515151818181B1B1B1D1D1D1F1F1F212121222222 242424242424242424262626272727272727282828272727282828282828282828272727252525 2424242222222020201E1E1E1D1D1D1C1C1C1919191515151212120F0F0F0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 0404040404040505050505050303030000000000000000000000000000000000000000000F0F0F F4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF6B6B6B0000000000000000000000000000000000000000000A0A0A161616 161616161616161616171717171717171717171717171717181818181818181818181818181818 1919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020212121212121212121222222222222222222222222232323232323232323242424242424 242424242424252525252525252525262626262626262626262626272727272727272727282828 2828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131 323232323232333333333333343434343434343434353535353535363636363636373737373737 3838383838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242424242424242 434343434343444444444444454545454545464646464646474747474747484848484848494949 4949494A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050 505050515151525252525252535353535353545454545454555555555555565656565656575757 5757575858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E 5E5E5E5F5F5F5F5F5F606060606060616161626262626262636363636363646464656565656565 6666666767676767676B6B6B6C6C6C6F6F6F7171717474747474747878787979797A7A7A7C7C7C 7E7E7E8080808181818484848585858686868888888A8A8A8B8B8B8D8D8D8D8D8D8F8F8F919191 9191919393939494949494949797979898989999999999999B9B9B9B9B9B9C9C9C232121050101 050101050101050101050101050101403E3E7272728C8C8C8D8D8D8D8D8D8D8D8D8E8E8E8E8E8E 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E 8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D 8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8A8A8A 8A8A8A8A8A8A8A8A8A898989898989898989898989898989878787878787878787868686858585 8484848484848282828181818080807E7E7E7E7E7E7D7D7D7A7A7A797979777777747474737373 7070706E6E6E6C6C6C686868666666151515000000000000000000000000000000000000000000 0000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1E1E1E0000000000000000000000000000000000000000000101010B0B0B0F0F0F3E3E3E3F3F3F 4141414040404040403E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3A3A3A383838383838373737 3535353030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C 2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828282828282828272727272727 262626262626252525252525252525242424242424242424242424232323232323232323222222 2222222222222121212121212121212020202020202020202020201F1F1F1F1F1F1F1F1F1E1E1E 1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A191919191919191919181818181818181818171717171717171717161616161616 161616151515151515151515141414141414141414141414131313131313131313121212121212 1212120808080000000000000000000000000000000000000000000000000000000000005F5F5F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC 2C2C2C000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000101011B1B1BF0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090E0E0E1111111313131515151818181B1B1B1D1D1D1F1F1F 212121222222242424242424242424262626272727272727282828272727272727282828282828 2727272626262424242222222121211F1F1F1D1D1D1C1C1C1919191616161212120F0F0F0A0A0A 070707020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303040404040404040404040404040404040404040404 040404040404040404040404040404050505050505000000000000000000000000000000000000 0000000000009A9A9AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8B8B8000000000000000000000000000000000000000000 020202161616161616161616161616171717171717171717171717171717171717181818181818 1818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 202020202020202020202020212121212121212121222222222222222222232323232323232323 232323242424242424242424252525252525252525252525262626262626262626272727272727 2727272727272828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030 313131313131323232323232323232333333333333343434343434353535353535363636363636 3636363737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C 3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141 424242424242434343434343434343444444444444454545454545464646464646474747474747 4848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E 4F4F4F505050505050515151515151525252525252535353535353545454545454555555555555 5656565757575757575858585858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C 5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F606060606060616161616161626262626262636363636363 6464646565656565656666666767676767676868686C6C6C6C6C6C707070727272747474757575 7878787979797C7C7C7E7E7E7F7F7F8282828383838484848686868888888989898B8B8B8D8D8D 8D8D8D8F8F8F9090909191919292929393939494949696969797979898989999999999999A9A9A 2220200501010501010501010501010501010501013F3D3D7070708A8A8A8B8B8B8B8B8B8C8C8C 8C8C8C8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D 8D8D8D8E8E8E8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8E8E8E8D8D8D 8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8B8B8B8B8B8B8B8B8B8B8B8B 8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A898989898989888888888888878787868686858585868686 8484848383838383838282828181818080807E7E7E7E7E7E7C7C7C7C7C7C797979777777767676 7474747171716F6F6F6E6E6E6A6A6A686868656565151515000000000000000000000000000000 0000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF4545450000000000000000000000000000000000000000000000000707070D0D0D 2E2E2E3F3F3F4141414040404040403E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3A3A3A383838 3737373737373535353434343030302F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D 2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929282828282828272727 272727262626262626262626252525252525252525242424242424242424232323232323232323 2222222222222222222222222121212121212121212020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818181818171717171717171717 161616161616161616151515151515151515141414141414141414131313131313131313121212 121212121212111111020202000000000000000000000000000000000000000000000000000000 0A0A0A9B9B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEDEDED1C1C1C000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000121212D9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC0A0A0A000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060C0C0C1010101313131414141616161A1A1A 1C1C1C1F1F1F212121222222242424242424242424262626272727272727282828272727272727 2828282828282727272727272525252323232121212020201E1E1E1D1D1D1A1A1A161616141414 1111110D0D0D0A0A0A020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404050505050505020202000000000000000000 0000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F90E0E0E000000000000000000000000 000000000000000000111111161616161616161616161616171717171717171717171717171717 1818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121222222222222222222222222 232323232323232323242424242424242424242424252525252525252525262626262626262626 2626262727272727272727272828282828282828282929292929292929292929292A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 303030303030303030313131313131323232323232333333333333343434343434343434353535 3535353636363636363737373737373737373838383838383939393939393A3A3A3A3A3A3B3B3B 3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040 414141414141414141424242424242434343434343444444444444454545454545454545464646 4747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D 4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252535353535353545454 5555555555555656565656565757575757575858585858585959595959595A5A5A5A5A5A5B5B5B 5B5B5B5C5C5C5C5C5C5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060606060616161616161626262 6262626363636363636464646565656565656666666767676767676868686C6C6C6C6C6C6F6F6F 7272727272727575757878787979797C7C7C7D7D7D808080818181838383848484868686878787 8989898B8B8B8C8C8C8D8D8D8F8F8F8F8F8F919191939393939393939393959595979797989898 989898999999211F1F0501010501010501010501010501010501013E3C3C6E6E6E8989898A8A8A 8A8A8A8B8B8B8B8B8B8B8B8B8B8B8B8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8C8C8C8D8D8D 8C8C8C8C8C8C8C8C8C8C8C8C8D8D8D8D8D8D8D8D8D8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C 8C8C8C8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A8B8B8B8B8B8B8A8A8A 898989898989898989898989898989898989898989878787878787878787868686858585868686 8585858484848383838282828181818181818080807E7E7E7D7D7D7C7C7C7B7B7B7A7A7A777777 7777777474747373737171716F6F6F6C6C6C6A6A6A666666656565151515000000000000000000 0000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF8B8B8B060606000000000000000000000000000000000000000000 0101010D0D0D1414143E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3B3B3B3A3A3A 3A3A3A3737373737373737373434343434342F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D 2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A292929292929292929282828282828 272727272727272727262626262626252525252525252525242424242424242424232323232323 2323232323232222222222222222222121212121212121212020202020202020202020201F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818171717171717 171717161616161616161616151515151515151515151515141414141414141414131313131313 1313131212121212121212120D0D0D010101000000000000000000000000000000000000000000 000000000000101010DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5202020020202000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000010101121212CFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 373737000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090E0E0E111111141414 1616161A1A1A1C1C1C1E1E1E202020222222242424242424242424262626272727272727282828 2727272727272828282828282828282727272525252323232222222121211F1F1F1D1D1D1B1B1B 1717171515151212120F0F0F0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404050505050505040404000000 000000000000000000000000000000000000000000C4C4C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF555555000000000000 0000000000000000000000000000000A0A0A161616161616161616161616171717171717171717 1717171717171717171818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222 222222222222232323232323232323232323242424242424242424252525252525252525252525 262626262626262626272727272727272727272727282828282828282828292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2E2E2E2F2F2F2F2F2F303030303030313131313131323232323232323232333333333333343434 343434353535353535353535363636363636373737373737383838383838393939393939393939 3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F 3F3F3F404040404040414141414141424242424242434343434343434343444444444444454545 4545454646464646464747474747474848484848484949494949494A4A4A4B4B4B4B4B4B4C4C4C 4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151525252525252535353 535353545454545454555555555555565656565656575757575757585858585858595959595959 5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060606060 616161616161626262626262636363636363646464656565656565666666676767676767686868 6969696D6D6D6D6D6D7070707272727474747878787979797B7B7B7D7D7D7E7E7E808080828282 8484848585858686868787878A8A8A8B8B8B8D8D8D8E8E8E8F8F8F919191919191929292939393 959595969696979797989898211F1F0501010501010501010501010501010501013C3A3A6D6D6D 8888888888888989898989898989898A8A8A8A8A8A8B8B8B8A8A8A8A8A8A8A8A8A8B8B8B8B8B8B 8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8A8A8A8A8A8A 8A8A8A8A8A8A8B8B8B8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A 898989898989898989888888888888888888888888878787878787868686858585858585858585 8484848484848383838282828181818181818080807F7F7F7E7E7E7D7D7D7C7C7C7B7B7B7A7A7A 7878787676767575757373737272726F6F6F6E6E6E6C6C6C686868666666646464151515000000 0000000000000000000000000000000000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D0111111000000000000000000000000000000 0000000000000000000606060D0D0D2525253E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3B3B3B3B3B3B 3A3A3A3A3A3A3838383737373737373636363434343434343333332F2F2F2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A292929292929282828 282828282828272727272727262626262626262626252525252525252525242424242424242424 232323232323232323222222222222222222212121212121212121212121202020202020202020 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919181818181818181818 171717171717171717161616161616161616151515151515151515141414141414141414131313 131313131313121212121212121212121212020202000000000000000000000000000000000000 000000000000000000000000202020FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEE3C3C3C0B0B0B000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000090909232323DDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF6F6F6F000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090E0E0E 1010101313131515151919191C1C1C1D1D1D1F1F1F212121232323242424242424262626272727 272727282828272727272727272727282828282828272727262626252525232323222222202020 1D1D1D1B1B1B1919191616161414140F0F0F0D0D0D070707070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404050505 050505010101000000000000000000000000000000000000000000575757FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA2A2A2 000000000000000000000000000000000000000000030303161616161616161616161616161616 171717171717171717171717171717181818181818181818181818191919191919191919191919 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121 212121222222222222222222222222232323232323232323242424242424242424242424252525 252525252525262626262626262626262626272727272727272727282828282828282828282828 2929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D 2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232333333 333333333333343434343434353535353535363636363636373737373737373737383838383838 3939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E 3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242424242434343434343444444 4444444444444545454545454646464646464747474747474848484949494949494A4A4A4A4A4A 4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050515151515151 525252525252535353535353545454545454555555555555565656565656575757575757585858 5959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F 5F5F5F606060606060616161616161626262626262636363646464646464656565666666666666 6767676868686868686969696D6D6D6D6D6D7070707171717474747676767878787A7A7A7D7D7D 7D7D7D7F7F7F8181818282828484848686868787878888888B8B8B8B8B8B8D8D8D8E8E8E909090 919191929292939393959595969696969696201E1E050101050101050101050101050101050101 3B39396B6B6B8686868686868787878888888888888888888888888989898888888989898A8A8A 8A8A8A8A8A8A8989898989898989898A8A8A8A8A8A8A8A8A8A8A8A8A8A8A898989898989898989 898989898989898989898989898989898989898989898989898989898989898989898989888888 888888888888888888888888878787878787878787868686868686868686868686858585848484 8484848484848383838383838282828181818080807F7F7F7F7F7F7E7E7E7D7D7D7C7C7C7B7B7B 7A7A7A7878787777777575757373737272726F6F6F6E6E6E6C6C6C6A6A6A686868656565626262 1515150000000000000000000000000000000000000000000000000000000000002F2F2FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1A1A1A000000000000000000 0000000000000000000000000000000101010808080B0B0B2F2F2F3E3E3E3E3E3E3E3E3E3D3D3D 3B3B3B3A3A3A3A3A3A3A3A3A3737373737373737373636363434343333333333332F2F2F2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A292929292929 292929282828282828272727272727272727262626262626252525252525252525242424242424 242424232323232323232323232323222222222222222222212121212121212121202020202020 2020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818 181818171717171717171717161616161616161616161616151515151515151515141414141414 141414131313131313131313121212121212121212060606010101000000000000000000000000 000000000000000000000000000000090909888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD868686 0E0E0E020202000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000101010D0D0D676767F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFAAAAAA000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060C0C0C1010101313131515151919191C1C1C1C1C1C1E1E1E212121222222242424242424 262626272727272727282828272727272727272727282828282828282828272727252525232323 2323232121211E1E1E1C1C1C1A1A1A1717171515151111110D0D0D0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404050505050505030303000000000000000000000000000000000000000000040404DEDEDE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEDEDED050505000000000000000000000000000000000000000000111111161616161616 161616161616171717171717171717171717171717171717181818181818181818181818191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020 212121212121212121212121222222222222222222232323232323232323232323242424242424 242424252525252525252525252525262626262626262626272727272727272727272727282828 2828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131 323232323232333333333333343434343434353535353535353535363636363636373737373737 3838383838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141424242424242424242 434343434343444444444444454545454545464646464646474747474747484848484848494949 4949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050 505050515151515151525252525252535353535353545454545454555555555555565656575757 5757575858585858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D 5E5E5E5E5E5E5F5F5F5F5F5F606060606060616161616161626262626262636363646464646464 6565656666666666666767676868686868686969696A6A6A6D6D6D6E6E6E717171737373757575 7878787A7A7A7B7B7B7D7D7D7F7F7F8080808282828383838686868787878888888A8A8A8B8B8B 8D8D8D8E8E8E9090908F8F8F919191939393949494959595201E1E050101050101050101050101 0501010501013A38386A6A6A858585858585868686868686878787888888878787888888888888 8888888888888888888888888989898989898989898A8A8A898989898989898989898989898989 898989888888888888888888888888888888888888888888888888888888888888888888888888 888888888888888888878787878787878787878787868686868686858585858585858585848484 8484848383838383838383838282828181818181818080807F7F7F7E7E7E7E7E7E7D7D7D7C7C7C 7B7B7B7A7A7A7878787777777676767575757373737070706E6E6E6B6B6B6A6A6A686868666666 636363616161141414000000000000000000000000000000000000000000000000000000000000 2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848484090909 0000000000000000000000000000000000000000000000000101010808080C0C0C2525253C3C3C 3D3D3D3D3D3D3B3B3B3A3A3A3A3A3A393939373737373737363636363636333333333333333333 2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A 292929292929282828282828282828272727272727262626262626252525252525252525242424 242424242424242424232323232323232323222222222222222222212121212121212121212121 2020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919191919 181818181818181818171717171717171717161616161616161616151515151515151515141414 141414141414131313131313131313131313121212121212080808010101000000000000000000 0000000000000000000000000000000000000000000F0F0FF0F0F0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE1E1E15454540E0E0E050505000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000303030E0E0E3F3F3FD0D0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060C0C0C0E0E0E1111111414141818181B1B1B1C1C1C1E1E1E202020222222 242424242424262626272727272727282828272727272727272727292929282828282828272727 2525252424242323232121211F1F1F1D1D1D1B1B1B1919191616161212120F0F0F0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404050505050505000000000000000000000000000000000000000000 0000006F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF4949490000000000000000000000000000000000000000000A0A0A 161616161616161616161616161616171717171717171717171717171717181818181818181818 1818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121222222222222222222222222232323232323232323 242424242424242424242424252525252525252525262626262626262626262626272727272727 2727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030 313131313131323232323232333333333333333333343434343434353535353535363636363636 3636363737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C 3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141 424242424242434343434343434343444444444444454545454545464646464646474747474747 4848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E 4F4F4F4F4F4F505050505050515151515151525252525252535353535353545454555555555555 5656565656565757575757575858585858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C 5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060606060616161616161626262626262 6363636464646464646565656666666666666767676868686868686969696969696D6D6D6E6E6E 7070707272727474747676767979797B7B7B7B7B7B7E7E7E808080818181838383848484868686 8787878888888A8A8A8B8B8B8C8C8C8F8F8F9090909191919191919292921F1D1D050101050101 050101050101050101050101383636686868838383848484848484858585858585858585868686 868686878787868686878787868686878787878787878787878787878787888888888888878787 878787878787878787878787878787878787868686868686868686878787878787868686868686 868686868686868686868686868686868686858585858585858585858585858585848484848484 8484848383838282828282828282828181818181818080808080807F7F7F7E7E7E7D7D7D7C7C7C 7C7C7C7B7B7B7A7A7A7878787676767676767575757272727171716F6F6F6C6C6C6A6A6A686868 6666666464646262625F5F5F141414000000000000000000000000000000000000000000000000 0000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F1F1F10F0F0F000000000000000000000000000000000000000000000000000000000000040404 0B0B0B1919193333333B3B3B3A3A3A3A3A3A393939373737373737363636363636363636333333 3333332E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2A2A2A2A2A2A 2A2A2A292929292929282828282828282828272727272727262626262626262626252525252525 252525242424242424242424232323232323232323222222222222222222222222212121212121 2121212020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919 191919181818181818181818171717171717171717161616161616161616161616151515151515 151515141414141414141414131313131313131313121212101010040404010101000000000000 0000000000000000000000000000000000000000000000000A0A0A797979FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1E17C7C7C1C1C1C0F0F0F0E0E0E020202000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000101010D0D0D1010101414146A6A6AD3D3D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF202020000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090E0E0E1111111414141818181B1B1B1C1C1C1E1E1E 202020222222242424242424262626272727272727282828272727272727272727282828282828 2828282727272626262525252323232222221F1F1F1D1D1D1B1B1B1919191616161212120F0F0F 0D0D0D0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404050505050505020202000000000000000000000000 0000000000000000000B0B0BECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0A0A0000000000000000000000000000000000000 000000030303161616161616161616161616161616171717171717171717171717171717181818 1818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222232323 232323232323232323242424242424242424252525252525252525252525262626262626262626 2727272727272727272727272828282828282828282929292929292929292929292A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 303030303030313131313131313131323232323232333333333333343434343434343434353535 3535353636363636363737373737373737373838383838383939393939393A3A3A3A3A3A3B3B3B 3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040 414141414141414141424242424242434343434343444444444444444444454545454545464646 4646464747474747474848484848484949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D 4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151525252535353535353545454 5454545555555555555656565656565757575757575858585858585959595959595A5A5A5A5A5A 5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060606060616161 616161626262626262636363646464646464656565666666666666676767676767686868696969 6969696D6D6D6D6D6D6E6E6E7171717474747575757777777A7A7A7B7B7B7C7C7C7E7E7E808080 8282828383838585858585858888888989898A8A8A8C8C8C8D8D8D8F8F8F9090909090901E1C1C 050101050101050101050101050101050101353333646464818181828282838383828282828282 838383848484848484848484848484858585858585858585858585858585858585858585858585 858585858585858585858585858585858585858585858585858585858585858585858585858585 858585858585848484848484848484848484848484848484848484838383838383838383838383 8383838282828181818181818181818080807F7F7F8080807E7E7E7E7E7E7E7E7E7C7C7C7B7B7B 7C7C7C7A7A7A7A7A7A7979797777777676767474747474747373737171716F6F6F6C6C6C6B6B6B 6868686767676666666363636060605E5E5E141414000000000000000000000000000000000000 0000000000000000000000002F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF8484840C0C0C000000000000000000000000000000000000000000000000 0000000000000101010404040606061313132525252B2B2B2F2F2F303030303030303030303030 2D2D2D2D2D2D2D2D2D282828282828272727272727272727262626262626252525252525252525 242424242424242424242424242424232323232323222222222222222222212121212121202020 2020202020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919 191919191919191919181818181818181818171717171717171717171717171717171717161616 161616161616161616151515151515151515141414141414141414131313131313131313121212 1212121212121111111111111111111111111010100F0F0F0B0B0B040404010101000000000000 000000000000000000000000000000000000000000000000000000000000181818F6F6F6FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6E6E6ACACAC 8383835B5B5B4D4D4D444444444444444444444444444444444444444444444444444444444444 444444444444444444444444444444444444444444444444444444444444444444444444444444 444444444444444444444444444444444444444444444444444444444444444444444444444444 444444444444444444444444444444444444444444444444444444444444444444444444444444 444444444444444444444444444444444444444444444444444444444444444444444444444444 444444444444444444444444444444444444444444444444444444444444444444444444444444 444444444444444444444444444444444444444444444444444444444444444444444444444444 4444444444444A4A4A5858587A7A7AA7A7A7DBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B5B5B000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010909090C0C0C1010101313131616161A1A1A 1C1C1C1D1D1D1F1F1F212121222222242424252525262626272727272727282828282828282828 2828282929292929292828282727272525252525252323232020201E1E1E1C1C1C1A1A1A171717 1414141111110D0D0D0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404050505050505040404000000000000 000000000000000000000000000000000000858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1080808000000000000000000 000000000000000000000000121212161616161616161616161616161616171717171717171717 1717171717171818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222 222222222222232323232323232323242424242424242424242424252525252525252525262626 262626262626262626272727272727272727282828282828282828282828292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F303030303030313131313131323232323232323232333333333333343434 343434353535353535353535363636363636373737373737383838383838393939393939393939 3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F 3F3F3F404040404040414141414141424242424242424242434343434343444444444444454545 4545454545454646464747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B 4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050515151515151525252525252 535353535353545454545454555555555555565656565656575757575757585858585858595959 5959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F 606060606060616161616161626262626262636363646464646464656565656565666666676767 6767676868686969696969696A6A6A6D6D6D6D6D6D7171717272727474747777777979797B7B7B 7C7C7C7E7E7E8080808181818383838585858686868888888888888A8A8A8C8C8C8D8D8D8E8E8E 8F8F8F1D1B1B0501010501010501010501010501010501013432326262627F7F7F808080808080 808080828282828282828282828282838383838383828282828282838383848484848484848484 848484838383848484848484848484848484848484848484848484838383838383838383838383 848484838383838383838383838383838383828282828282828282828282818181828282828282 8181818080808080808080808080807F7F7F7E7E7E7E7E7E7D7D7D7D7D7D7C7C7C7D7D7D7B7B7B 7B7B7B7A7A7A7979797878787777777676767676767575757272727272727171716E6E6E6D6D6D 6C6C6C6A6A6A6868686565656464646262626060605D5D5D101010000000000000000000000000 000000000000000000000000000000000000383838FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA202020010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000D0D0DC3C3C3 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 969696000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060C0C0C101010131313 1616161919191C1C1C1C1C1C1F1F1F212121222222242424242424262626272727272727282828 2828282828282828282828282929292828282727272626262525252323232121211E1E1E1D1D1D 1B1B1B1717171515151111110D0D0D0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303040404 040404040404040404040404040404040404040404040404040404040404040404050505050505 020202000000000000000000000000000000000000000000171717F7F7F7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4F000000 0000000000000000000000000000000000000A0A0A161616161616161616161616161616171717 1717171717171717171717171818181818181818181818181818181919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121 212121222222222222222222232323232323232323232323242424242424242424252525252525 252525252525262626262626262626272727272727272727272727282828282828282828292929 2929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D 2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232333333 333333333333343434343434353535353535363636363636373737373737373737383838383838 3939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E 3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242434343434343434343 4444444444444545454545454646464646464747474747474848484848484949494949494A4A4A 4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F505050505050515151 515151525252525252535353535353545454545454555555555555565656565656575757575757 5858585858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E 5E5E5E5F5F5F5F5F5F606060606060616161616161626262626262636363636363646464656565 6565656666666767676767676868686969696969696A6A6A6A6A6A6D6D6D6F6F6F717171747474 7676767777777A7A7A7B7B7B7D7D7D7F7F7F808080828282838383858585878787878787898989 8A8A8A8C8C8C8C8C8C1C1A1A050101050101050101050101050101050101312F2F6060607C7C7C 7D7D7D7E7E7E7F7F7F7E7E7E7F7F7F8080807F7F7F808080818181818181818181818181818181 818181818181818181828282828282828282828282828282828282828282828282828282828282 8181818181818181818181818181818181818181818181818181818181818080808080807F7F7F 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7D7D7D7D7D7D7C7C7C7C7C7C7B7B7B 7A7A7A7A7A7A7878787777777777777676767676767474747474747373737171717070706E6E6E 6D6D6D6C6C6C6A6A6A6969696767676464646262625F5F5F5E5E5E5B5B5B070707000000000000 000000000000000000000000000000000000000000000000454545FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4D4D40E0E0E000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000C0C0C 868686FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD1D1D1000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010101010606060C0C0C 0E0E0E1111111515151818181B1B1B1C1C1C1E1E1E212121222222242424242424262626272727 272727282828282828282828292929292929292929282828272727262626252525232323222222 1F1F1F1D1D1D1C1C1C1919191616161212120F0F0F0D0D0D0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 0505050505050404040000000000000000000000000000000000000000000000009D9D9DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A6A6A6000000000000000000000000000000000000000000030303161616161616161616161616 161616161616171717171717171717171717171717181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 212121212121212121222222222222222222222222232323232323232323242424242424242424 242424252525252525252525262626262626262626262626272727272727272727282828282828 2828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131 323232323232333333333333343434343434353535353535353535363636363636373737373737 3838383838383838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D 3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242 434343434343434343444444444444454545454545464646464646474747474747484848484848 4949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F 505050505050515151515151525252525252535353535353545454545454555555555555565656 5656565757575757575858585858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C 5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060606060616161616161626262626262636363 6363636464646565656565656666666767676767676868686868686969696A6A6A6A6A6A6D6D6D 6F6F6F7171717373737474747777777979797B7B7B7C7C7C7E7E7E808080828282838383848484 8686868787878888888989898B8B8B1B19190501010501010501010501010501010501012F2D2D 5D5D5D7A7A7A7C7C7C7C7C7C7D7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E7F7F7F808080 7F7F7F7F7F7F7F7F7F8080808080808080808080808080808080808080808080808080807F7F7F 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7E7E7E7E7E7E7E7E7E7E7E7E 7E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7C7C7C7B7B7B7A7A7A7A7A7A 7A7A7A7979797979797777777777777676767575757575757474747272727272727171716F6F6F 6E6E6E6D6D6D6B6B6B6A6A6A6969696767676565656262626060605E5E5E5C5C5C4D4D4D000000 000000000000000000000000000000000000000000000000000000010101676767FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8A8A80E0E0E 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0A0A0A686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFD0F0F0F000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090E0E0E1010101414141616161A1A1A1C1C1C1E1E1E202020222222222222242424 2626262727272727272828282828282929292929292929292A2A2A292929282828272727252525 2424242222222020201D1D1D1D1D1D1B1B1B1717171414141111110D0D0D0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 040404040404050505050505050505010101000000000000000000000000000000000000000000 282828FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F40B0B0B000000000000000000000000000000000000000000111111161616 161616161616161616161616171717171717171717171717171717181818181818181818181818 1818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121222222222222222222232323232323232323232323 242424242424242424252525252525252525252525262626262626262626272727272727272727 2727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030 313131313131323232323232323232333333333333343434343434353535353535363636363636 3636363737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C 3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141 414141424242424242434343434343444444444444444444454545454545464646464646474747 4747474848484848484949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E 4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252535353535353545454545454 5555555555555656565656565757575757575858585858585959595959595A5A5A5A5A5A5B5B5B 5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060606060616161616161 626262626262636363636363646464656565656565666666666666676767686868686868696969 6A6A6A6A6A6A6D6D6D6D6D6D6F6F6F7272727373737575757777777A7A7A7C7C7C7C7C7C7F7F7F 8080808282828383838585858787878787878989891A1818050101050101050101050101050101 0501012D2B2B5B5B5B7878787979797A7A7A7A7A7A7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C7D7D7D 7D7D7D7E7E7E7D7D7D7D7D7D7D7D7D7D7D7D7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E 7E7E7E7E7E7E7E7E7E7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D 7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7B7B7B7A7A7A7A7A7A797979797979 787878787878777777767676767676767676757575747474737373737373717171717171707070 6F6F6F6D6D6D6C6C6C6A6A6A6969696969696666666565656262626060605E5E5E5B5B5B595959 2E2E2E0202020000000000000000000000000000000000000000000000000000000303038D8D8D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF9494940D0D0D000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000A0A0A767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF474747000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C0E0E0E1313131616161919191B1B1B1D1D1D202020212121 222222242424252525262626272727282828282828292929292929292929292929292929282828 2727272525252525252323232121211F1F1F1D1D1D1C1C1C1919191616161212120F0F0F0D0D0D 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303040404040404040404040404040404040404040404 040404040404040404040404040404050505050505030303000000000000000000000000000000 000000000000000000B5B5B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF555555000000000000000000000000000000000000000000 090909161616161616161616161616161616161616171717171717171717171717171717181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222232323 232323232323232323242424242424242424252525252525252525252525262626262626262626 2727272727272727272727272828282828282828282929292929292929292929292A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 303030303030303030313131313131323232323232333333333333343434343434343434353535 3535353636363636363737373737373737373838383838383939393939393939393A3A3A3A3A3A 3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040 404040414141414141424242424242424242434343434343444444444444444444454545454545 4646464646464747474848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C 4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252535353 535353545454545454555555555555565656565656575757575757585858585858595959595959 5A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060 606060616161616161626262626262636363636363646464646464656565666666666666676767 6868686868686969696969696A6A6A6B6B6B6B6B6B6E6E6E6F6F6F727272747474767676787878 7A7A7A7C7C7C7C7C7C7F7F7F808080828282848484858585878787191717050101050101050101 0501010501010501012B2929595959767676777777787878787878787878797979797979797979 7A7A7A7A7A7A7B7B7B7B7B7B7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B 7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B 7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A797979797979797979787878787878787878787878777777 7777777777777777777575757575757474747474747373737373737272727171717070706F6F6F 6E6E6E6D6D6D6D6D6D6B6B6B6969696969696767676666666565656262626060605E5E5E5C5C5C 5A5A5A515151040404000000000000000000000000000000000000000000000000000000000000 010101C3C3C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA5A5A50E0E0E000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000B0B0BA5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF828282000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1111111515151818181A1A1A1C1C1C 1F1F1F212121222222222222242424262626272727282828282828292929292929292929292929 2929292828282727272626262525252323232222222020201F1F1F1D1D1D1B1B1B171717141414 1111110F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404040404050505050505050505000000000000000000 000000000000000000000000000000414141FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFACACAC000000000000000000000000000000 000000000000020202151515161616161616161616161616161616171717171717171717171717 1717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222 222222222222232323232323232323242424242424242424242424252525252525252525262626 262626262626262626272727272727272727282828282828282828282828292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E 2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232323232333333333333343434 343434353535353535353535363636363636373737373737373737383838383838393939393939 3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F 3F3F3F404040404040404040414141414141424242424242424242434343434343444444444444 4545454545454646464646464747474747474848484848484949494949494A4A4A4A4A4A4B4B4B 4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151 525252525252535353535353545454545454555555555555565656565656575757575757585858 5858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E 5F5F5F5F5F5F606060606060616161616161626262626262636363636363646464646464656565 6565656666666767676767676868686969696969696A6A6A6A6A6A6B6B6B6D6D6D6E6E6E727272 7373737575757676767878787A7A7A7C7C7C7D7D7D7F7F7F818181828282848484181616050101 050101050101050101050101050101282626555555747474747474767676767676767676777777 7777777777777878787979797979797878787878787878787878787979797979797979797A7A7A 7979797979797A7A7A7A7A7A7A7A7A7A7A7A797979797979797979797979797979797979787878 787878787878787878787878787878787878777777777777767676767676767676767676767676 7676767575757575757474747474747373737373737373737272727171717070706F6F6F6F6F6F 6D6D6D6D6D6D6D6D6D6B6B6B6A6A6A6A6A6A6868686666666565656464646262626161615E5E5E 5C5C5C5A5A5A575757181818020202000000000000000000000000000000000000000000000000 000000000000050505F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1D1D11E1E1E0B0B0B000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000030303383838DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBCBCBC000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090C0C0C101010141414181818 1A1A1A1C1C1C1F1F1F212121212121222222242424262626272727282828282828292929292929 2929292929292A2A2A2828282727272626262525252424242222222121212020201D1D1D1B1B1B 1919191515151212120F0F0F0D0D0D070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404050505050505020202 000000000000000000000000000000000000000000000000C9C9C9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F70E0E0E000000000000 0000000000000000000000000000000F0F0F161616161616161616161616161616161616171717 1717171717171717171717171818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121 212121222222222222222222232323232323232323232323242424242424242424252525252525 252525252525262626262626262626272727272727272727272727282828282828282828292929 2929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D 2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131323232323232323232 333333333333343434343434353535353535353535363636363636373737373737383838383838 3838383939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E 3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242434343434343 434343444444444444454545454545464646464646474747474747484848484848494949494949 4A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050 505050515151515151525252525252535353535353545454545454555555555555565656565656 5757575757575858585858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D 5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060606060616161616161616161626262626262636363 6363636464646565656565656666666666666767676868686868686969696969696A6A6A6B6B6B 6B6B6B6E6E6E6F6F6F7272727373737575757777777878787B7B7B7C7C7C7E7E7E7F7F7F818181 171515050101050101050101050101050101050101252323515151717171717171737373727272 737373747474747474747474757575767676767676767676767676777777767676767676767676 767676777777777777777777777777777777777777777777777777777777777777767676767676 767676767676767676757575757575757575757575757575757575747474747474747474737373 7373737373737373737272727272727272727171717070707070707070706F6F6F6F6F6F6E6E6E 6E6E6E6B6B6B6B6B6B6B6B6B6A6A6A696969686868666666656565636363626262626262606060 5E5E5E5C5C5C5A5A5A5555551F1F1F020202000000000000000000000000000000000000000000 000000000000000000000000545454FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F87E7E7E0E0E0E 080808000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000101011F1F1FBDBDBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3F3F3040404000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C101010 1414141616161A1A1A1C1C1C1E1E1E202020212121222222242424262626272727282828282828 292929292929292929292929292929282828272727272727252525252525232323222222202020 1E1E1E1C1C1C1919191616161414141111110D0D0D0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404050505 050505050505000000000000000000000000000000000000000000000000575757FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B5B5B 000000000000000000000000000000000000000000070707151515161616161616161616161616 161616171717171717171717171717171717171717181818181818181818181818191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121222222222222222222222222232323232323232323242424242424242424 242424252525252525252525262626262626262626262626272727272727272727282828282828 2828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131 323232323232333333333333333333343434343434353535353535363636363636363636373737 3737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C 3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040414141414141414141424242 424242434343434343434343444444444444454545454545464646464646474747474747484848 4848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E 4F4F4F4F4F4F505050505050515151515151525252525252535353535353545454545454555555 5555555656565656565757575757575858585858585959595959595A5A5A5A5A5A5B5B5B5B5B5B 5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F5F5F5F606060606060616161616161 626262626262636363636363646464646464656565666666666666676767676767686868696969 6969696A6A6A6A6A6A6B6B6B6B6B6B6E6E6E6F6F6F7272727474747575757878787979797C7C7C 7C7C7C7F7F7F1513130501010501010501010501010501010501012321214E4E4E6E6E6E6F6F6F 6F6F6F707070717171717171717171707070727272727272727272737373737373737373737373 737373747474737373747474747474747474747474747474747474737373737373737373737373 737373737373727272727272727272727272727272717171717171717171717171717171717171 7070707070707070706F6F6F7070706F6F6F6F6F6F6E6E6E6E6E6E6E6E6E6D6D6D6C6C6C6C6C6C 6B6B6B6A6A6A6A6A6A696969686868686868676767666666656565636363626262606060606060 5E5E5E5E5E5E5C5C5C5A5A5A4444440F0F0F020202000000000000000000000000000000000000 000000000000000000000000000000020202B5B5B5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEDEDED7A7A7A151515111111030303000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 010101010101050505464646D4D4D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF323232000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C1010101313131515151818181A1A1A1C1C1C1F1F1F212121222222242424262626272727 2727272727272929292929292929292929292929292A2A2A292929282828272727262626242424 2323232121211F1F1F1D1D1D1A1A1A1717171515151212120F0F0F0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404050505050505020202000000000000000000000000000000000000000000020202 D3D3D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFB1B1B1000000000000000000000000000000000000000000010101141414161616161616 161616161616161616161616171717171717171717171717171717181818181818181818181818 1818181919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020212121212121212121212121222222222222222222232323232323232323232323 242424242424242424252525252525252525252525262626262626262626272727272727272727 2727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030 313131313131313131323232323232333333333333343434343434343434353535353535363636 3636363737373737373737373838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B 3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141 414141414141424242424242434343434343444444444444444444454545454545464646464646 4747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D 4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252535353535353 5454545454545555555555555656565656565757575757575858585858585959595959595A5A5A 5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060 606060616161616161626262626262636363636363646464646464656565656565666666666666 6767676868686868686969696969696A6A6A6A6A6A6B6B6B6E6E6E6F6F6F727272737373757575 7676767979797B7B7B7C7C7C151313050101050101050101050101050101050101211F1F4C4C4C 6B6B6B6C6C6C6D6D6D6D6D6D6E6E6E6E6E6E6F6F6F6F6F6F6F6F6F707070717171717171707070 707070717171717171707070717171717171717171707070717171717171717171717171717171 7171717070707070707070707070707070707070707070707070707070707070706F6F6F6E6E6E 6E6E6E6E6E6E6F6F6F6E6E6E6D6D6D6E6E6E6E6E6E6D6D6D6C6C6C6B6B6B6B6B6B6A6A6A6A6A6A 6A6A6A6A6A6A696969686868686868656565666666656565646464636363636363616161606060 5E5E5E5C5C5C5353534B4B4B333333151515000000010101000000000000000000000000000000 000000000000000000000000000000000000000000202020FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEC6C6C67D7D7D3838381414140909090B0B0B0A0A0A 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909080808070707 1010102E2E2E757575CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E6E6E000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C1010101313131515151818181A1A1A1C1C1C1F1F1F212121222222242424 262626272727272727272727292929292929292929292929292929292929292929282828282828 2626262424242323232222222020201D1D1D1A1A1A1717171515151212120F0F0F0D0D0D070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404050505050505040404000000000000000000000000000000000000 000000000000595959FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF8F8F81111110000000000000000000000000000000000000000000D0D0D 151515161616161616161616161616161616171717171717171717171717171717171717181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222232323 232323232323232323242424242424242424252525252525252525252525262626262626262626 2727272727272727272727272828282828282828282929292929292929292929292A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 2F2F2F303030303030313131313131323232323232323232333333333333343434343434353535 3535353535353636363636363737373737373838383838383838383939393939393A3A3A3A3A3A 3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F 404040404040414141414141424242424242424242434343434343444444444444444444454545 4545454646464646464747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B 4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151525252 525252535353535353545454545454555555555555565656565656575757575757585858585858 5959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E 5F5F5F5F5F5F606060606060616161616161616161626262626262636363636363646464646464 6565656666666666666767676767676868686868686969696969696A6A6A6B6B6B6B6B6B6E6E6E 6E6E6E7272727373737575757777777A7A7A131111050101050101050101050101020000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000020202000000000000000000000000000000000000 000000000000000000000000000000000000000000000000020202A9A9A9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F8F8F8EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090E0E0E1111111414141616161919191C1C1C1E1E1E202020 2222222323232525252626262727272727272828282929292929292A2A2A2929292929292A2A2A 2929292828282727272525252323232222222121211D1D1D1B1B1B191919161616141414111111 0D0D0D0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404050505050505050505020202000000000000000000 000000000000000000000000020202D3D3D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF696969000000000000000000000000000000000000 000000050505151515161616161616161616161616161616161616171717171717171717171717 1717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222 222222222222232323232323232323242424242424242424242424252525252525252525262626 262626262626262626272727272727272727282828282828282828282828292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E 2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232333333333333333333 343434343434353535353535363636363636363636373737373737383838383838383838393939 3939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E 3F3F3F3F3F3F404040404040404040414141414141424242424242424242434343434343444444 4444444444444545454545454646464646464747474747474848484848484949494949494A4A4A 4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050 515151515151525252525252535353535353545454545454555555555555565656565656575757 5757575858585858585959595959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D 5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F5F5F5F606060606060616161616161626262626262636363 6363636464646464646565656565656666666666666767676767676868686868686969696A6A6A 6A6A6A6B6B6B6D6D6D6E6E6E6F6F6F737373757575777777121010050101050101050101050101 020000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000383838FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1050505000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090C0C0C1010101313131515151818181B1B1B 1D1D1D1F1F1F2121212222222424242626262727272727272828282929292929292A2A2A2A2A2A 2929292A2A2A2A2A2A2828282727272525252424242323232222221F1F1F1D1D1D1B1B1B191919 1515151111110F0F0F0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404050505050505040404000000 000000000000000000000000000000000000000000595959FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC9C9C9000000000000000000000000 000000000000000000000000121212151515161616161616161616161616161616171717171717 1717171717171717171717171818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121 212121222222222222222222232323232323232323232323242424242424242424252525252525 252525252525262626262626262626272727272727272727272727282828282828282828282828 2929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D 2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232323232 333333333333333333343434343434353535353535363636363636363636373737373737383838 3838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D 3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242424242 434343434343444444444444444444454545454545464646464646474747474747484848484848 4949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F 4F4F4F505050505050515151515151525252525252535353535353545454545454555555555555 5656565656565757575757575757575858585858585959595959595A5A5A5A5A5A5B5B5B5B5B5B 5C5C5C5C5C5C5D5D5D5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F606060606060616161616161 616161626262626262636363636363646464646464656565656565666666666666676767686868 6868686969696969696A6A6A6A6A6A6B6B6B6D6D6D6F6F6F727272747474110F0F050101050101 050101050101020000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000070707DBDBDB FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF393939 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060C0C0C101010111111141414 1818181A1A1A1C1C1C1E1E1E202020222222242424262626272727272727282828292929292929 2A2A2A2B2B2B2A2A2A2929292A2A2A2929292828282626262525252424242323232020201D1D1D 1C1C1C1A1A1A1616161212121111110D0D0D0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404050505050505 050505010101000000000000000000000000000000000000000000020202D3D3D3FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D2D2D000000 0000000000000000000000000000000000000B0B0B151515161616161616161616161616161616 161616171717171717171717171717171717181818181818181818181818181818191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121222222222222222222222222232323232323232323242424242424242424 242424252525252525252525252525262626262626262626272727272727272727272727282828 2828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131 313131323232323232333333333333343434343434343434353535353535363636363636373737 3737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C 3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141 424242424242424242434343434343444444444444444444454545454545464646464646474747 4747474848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D 4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252535353535353545454 5454545555555555555656565656565656565757575757575858585858585959595959595A5A5A 5A5A5A5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F5F5F5F 606060606060616161616161626262626262626262636363636363646464646464656565656565 6666666767676767676868686868686969696969696A6A6A6A6A6A6A6A6A6E6E6E7070700F0D0D 050101050101050101050101020000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 ABABABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF7D7D7D000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090E0E0E 1111111414141616161A1A1A1C1C1C1D1D1D1F1F1F212121232323252525262626272727282828 2929292929292B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A282828272727252525252525232323 2121211E1E1E1D1D1D1B1B1B1717171515151111110F0F0F0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303040404040404040404040404040404040404040404040404040404040404040404 040404050505050505040404000000000000000000000000000000000000000000000000585858 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8A8A8A000000000000000000000000000000000000000000030303151515151515161616161616 161616161616161616171717171717171717171717171717171717181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121222222222222222222222222232323232323232323 242424242424242424242424252525252525252525262626262626262626262626272727272727 2727272828282828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030 303030313131313131323232323232323232333333333333343434343434353535353535353535 3636363636363737373737373737373838383838383939393939393939393A3A3A3A3A3A3B3B3B 3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040 404040414141414141424242424242424242434343434343444444444444444444454545454545 4646464646464747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C 4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252 535353535353535353545454545454555555555555565656565656575757575757585858585858 5959595959595A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5D5D5D5E5E5E 5E5E5E5F5F5F5F5F5F606060606060606060616161616161626262626262636363636363636363 6464646464646565656565656666666666666767676767676868686868686969696969696D6D6D 6D6D6D0E0C0C050101050101050101050101020000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 020202898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFC1C1C1000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090E0E0E1010101313131616161919191B1B1B1C1C1C1E1E1E212121222222242424262626 2727272828282929292929292B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A282828272727252525 2525252424242222221F1F1F1E1E1E1D1D1D1919191515151212120F0F0F0D0D0D070707070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 040404040404040404050505050505050505010101000000000000000000000000000000000000 000000020202D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE8E8E8050505000000000000000000000000000000000000000000111111151515 151515161616161616161616161616161616171717171717171717171717171717171717181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222232323 232323232323232323242424242424242424252525252525252525252525262626262626262626 2626262727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F 2F2F2F303030303030303030313131313131323232323232333333333333333333343434343434 3535353535353535353636363636363737373737373737373838383838383939393939393A3A3A 3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F 3F3F3F404040404040404040414141414141424242424242424242434343434343444444444444 4444444545454545454646464646464747474747474848484848484949494949494A4A4A4A4A4A 4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151 515151525252525252525252535353535353545454545454555555555555565656565656575757 5757575858585858585858585959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C 5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F5F5F5F606060606060616161616161616161626262 626262636363636363636363646464646464656565656565666666666666676767676767686868 6868686969696C6C6C0E0C0C050101050101050101050101020000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000020202848484FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA0E0E0E000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010909090C0C0C1010101313131515151818181B1B1B1C1C1C1E1E1E212121222222 2424242626262727272828282929292929292B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A282828 2727272727272525252525252323232020201F1F1F1D1D1D1A1A1A1616161414141111110D0D0D 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404050505050505040404000000000000000000000000 000000000000000000000000585858FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C4C000000000000000000000000000000000000000000 080808151515151515161616161616161616161616161616161616171717171717171717171717 1717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222 222222222222232323232323232323232323242424242424242424252525252525252525252525 262626262626262626272727272727272727272727282828282828282828292929292929292929 2929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E 2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232333333333333 333333343434343434353535353535353535363636363636373737373737383838383838383838 3939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E 3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242424242434343 434343444444444444444444454545454545464646464646474747474747484848484848494949 4949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F 4F4F4F505050505050515151515151525252525252535353535353545454545454555555555555 5656565656565656565757575757575858585858585959595959595A5A5A5A5A5A5A5A5A5B5B5B 5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F5F5F5F606060606060 616161616161616161626262626262636363636363636363646464646464656565656565666666 6666666767676767676868686868680D0B0B050101050101050101050101020000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000050505A1A1A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4B4B4B000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060C0C0C0E0E0E1111111414141616161A1A1A1C1C1C1F1F1F 2121212222222323232424242626262828282929292929292A2A2A2B2B2B2A2A2A292929292929 2A2A2A2929292929292828282727272525252323232222222020201D1D1D1C1C1C191919161616 1414141111110D0D0D070707070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404040404040404050505050505050505010101000000 000000000000000000000000000000000000020202D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFABABAB000000000000000000000000000000 000000000000010101141414151515151515161616161616161616161616161616171717171717 1717171717171717171717171818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121 212121222222222222222222222222232323232323232323242424242424242424242424252525 252525252525262626262626262626262626272727272727272727272727282828282828282828 2929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C 2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232 323232333333333333333333343434343434353535353535363636363636363636373737373737 3838383838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C 3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242 424242424242434343434343444444444444444444454545454545464646464646474747474747 4848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D 4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252535353535353545454 545454545454555555555555565656565656575757575757585858585858585858595959595959 5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5D5D5D5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F 5F5F5F5F5F5F606060606060616161616161616161626262626262626262636363636363646464 6464646565656565656666666666666666666767670B0909050101050101050101050101020000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000030303292929D3D3D3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8F000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090E0E0E1111111414141616161A1A1A 1C1C1C1E1E1E2121212222222323232424242626262828282929292929292A2A2A2A2A2A2B2B2B 2929292929292929292A2A2A2929292828282727272525252323232222222121211E1E1E1C1C1C 1A1A1A1717171515151111110D0D0D0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303040404 040404040404040404040404040404040404040404040404040404040404040404050505050505 040404000000000000000000000000000000000000000000000000575757FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9141414000000000000 0000000000000000000000000000000D0D0D151515151515161616161616161616161616161616 161616171717171717171717171717171717181818181818181818181818181818191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 212121212121212121212121222222222222222222232323232323232323232323242424242424 242424242424252525252525252525262626262626262626262626272727272727272727282828 2828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131 313131313131323232323232333333333333343434343434343434353535353535363636363636 3636363737373737373838383838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B 3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040404040 414141414141424242424242424242434343434343444444444444444444454545454545464646 4646464747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4C4C4C 4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252 525252535353535353545454545454555555555555565656565656565656575757575757585858 5858585959595959595959595A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5D5D5D5D5D5D 5E5E5E5E5E5E5E5E5E5F5F5F5F5F5F5F5F5F606060606060616161616161616161626262626262 6262626363636363636363636464646464646565656565656666660B0909050101050101050101 050101020000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000030303111111949494FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9D5D5D5C2C2C2BBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCBCBCCECECE EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4D4D4 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C101010131313 1515151919191C1C1C1E1E1E212121222222222222242424262626272727282828292929292929 2A2A2A2B2B2B2A2A2A2929292929292A2A2A2A2A2A292929282828262626242424232323222222 1F1F1F1D1D1D1B1B1B1919191616161212120F0F0F0A0A0A070707070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 050505050505050505010101000000000000000000000000000000000000000000020202D4D4D4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D6D6D 000000000000000000000000000000000000000000040404151515151515151515161616161616 161616161616161616171717171717171717171717171717171717181818181818181818181818 1818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121222222222222222222222222232323232323232323 232323242424242424242424252525252525252525252525262626262626262626272727272727 2727272727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F 303030303030313131313131323232323232323232333333333333343434343434343434353535 3535353636363636363636363737373737373838383838383838383939393939393A3A3A3A3A3A 3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F 404040404040404040414141414141424242424242424242434343434343444444444444444444 4545454545454646464646464747474747474848484848484949494949494949494A4A4A4A4A4A 4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050505050 515151515151525252525252535353535353545454545454545454555555555555565656565656 5757575757575757575858585858585959595959595A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5C5C5C 5C5C5C5C5C5C5D5D5D5D5D5D5E5E5E5E5E5E5E5E5E5F5F5F5F5F5F5F5F5F606060606060606060 6161616161616161616262626262626262626363636363636464646464646464640B0909050101 050101050101050101020000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0101010404040000002E2E2E969696F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5C5C5606060212121171717161616 111111111111121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 1010101515151717171919194040409D9D9DF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFE191919000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 0E0E0E1111111515151818181B1B1B1D1D1D202020212121222222242424262626272727282828 2929292929292A2A2A2B2B2B2B2B2B2A2A2A2929292929292A2A2A2A2A2A282828272727252525 2525252222222020201D1D1D1C1C1C1B1B1B1717171414141111110D0D0D0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 040404040404040404050505050505040404000000000000000000000000000000000000000000 0000004E4E4EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFCDCDCD000000000000000000000000000000000000000000000000111111151515151515 151515161616161616161616161616161616171717171717171717171717171717171717181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020202020212121212121212121222222222222222222222222 232323232323232323242424242424242424242424252525252525252525252525262626262626 2626262727272727272727272727272828282828282828282929292929292929292929292A2A2A 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F303030303030303030313131313131323232323232323232333333333333343434 343434343434353535353535363636363636363636373737373737383838383838383838393939 3939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E 3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242424242434343434343 444444444444444444454545454545464646464646474747474747474747484848484848494949 4949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4F4F4F 4F4F4F505050505050515151515151525252525252525252535353535353545454545454555555 5555555555555656565656565757575757575858585858585858585959595959595A5A5A5A5A5A 5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5D5D5D5D5D5D5D5D5D5E5E5E5E5E5E5F5F5F5F5F5F 5F5F5F606060606060606060616161616161616161626262626262626262636363636363636363 0B0909050101050101050101050101050101040101020000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 0F0F0F2E2E2E5E5E5E9A9A9ADEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB9A9A9A202020131313000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000808081616165D5D5DE2E2E2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF5D5D5D000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090C0C0C1010101414141616161A1A1A1C1C1C1F1F1F212121222222242424262626 2727272828282929292929292B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2929292A2A2A2A2A2A2A2A2A 2828282727272525252323232222221F1F1F1D1D1D1C1C1C1919191616161212121111110D0D0D 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303040404040404040404040404040404040404040404 040404040404040404040404040404050505050505050505010101000000000000000000000000 000000000000000000000000BEBEBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF2F2F2F000000000000000000000000000000000000000000080808 151515151515151515161616161616161616161616161616161616171717171717171717171717 1717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222 222222222222222222232323232323232323242424242424242424242424252525252525252525 262626262626262626262626272727272727272727272727282828282828282828292929292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232323232 333333333333343434343434343434353535353535363636363636363636373737373737383838 3838383939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D 3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141414141424242424242 424242434343434343434343444444444444454545454545454545464646464646474747474747 4848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D 4E4E4E4E4E4E4F4F4F4F4F4F505050505050505050515151515151525252525252535353535353 545454545454545454555555555555565656565656565656575757575757585858585858585858 5959595959595A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5D5D5D5D5D5D5D5D5D 5E5E5E5E5E5E5E5E5E5F5F5F5F5F5F5F5F5F606060606060606060616161616161616161626262 6262626262620B0909050101050101050101050101050101050101020000838383FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5C5C52424240C0C0C000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101131313 787878FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1A1A1000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C1010101313131515151919191C1C1C1E1E1E202020222222 2424242626262727272727272828282929292B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A 2A2A2A2A2A2A2929292828282727272525252222222020201E1E1E1D1D1D1B1B1B171717151515 1212120F0F0F0D0D0D070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404040404040404050505050505040404000000000000 000000000000000000000000000000000000383838FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF909090000000000000000000000000000000000000 000000010101141414151515151515151515161616161616161616161616161616171717171717 1717171717171717171717171818181818181818181818181818181919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121 212121212121222222222222222222232323232323232323232323242424242424242424242424 252525252525252525262626262626262626262626272727272727272727282828282828282828 2828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131 323232323232323232333333333333343434343434343434353535353535363636363636373737 3737373737373838383838383939393939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C 3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141 414141424242424242424242434343434343434343444444444444454545454545454545464646 4646464747474747474848484848484949494949494A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4C4C4C 4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F505050505050515151515151525252 525252525252535353535353545454545454545454555555555555565656565656575757575757 5757575858585858585858585959595959595A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5C5C5C 5C5C5C5D5D5D5D5D5D5D5D5D5E5E5E5E5E5E5E5E5E5F5F5F5F5F5F5F5F5F5F5F5F606060606060 6060606161616161616161610B0909050101050101050101050101050101050101020000838383 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE7A7A7A131313000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000030303282828E2E2E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5010101000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1313131515151818181B1B1B1E1E1E 2020202222222323232626262626262727272828282929292B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2C2C2C2A2A2A2A2A2A2929292828282525252323232121211F1F1F1D1D1D1C1C1C 1919191616161414141111110D0D0D070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404050505050505050505 010101000000000000000000000000000000000000000000000000ACACACFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF0B0B0B000000000000000000 0000000000000000000000000C0C0C151515151515151515151515161616161616161616161616 161616171717171717171717171717171717171717181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020 202020212121212121212121222222222222222222222222232323232323232323232323242424 242424242424252525252525252525252525262626262626262626262626272727272727272727 2828282828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030 303030313131313131323232323232323232333333333333343434343434353535353535353535 3636363636363737373737373737373838383838383838383939393939393A3A3A3A3A3A3A3A3A 3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040 404040404040414141414141414141424242424242434343434343434343444444444444444444 4545454545454646464646464747474747474848484848484848484949494949494A4A4A4A4A4A 4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050 505050515151515151525252525252535353535353535353545454545454555555555555555555 5656565656565757575757575757575858585858585858585959595959595A5A5A5A5A5A5A5A5A 5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5D5D5D5D5D5D5D5D5D5E5E5E5E5E5E5E5E5E5F5F5F 5F5F5F5F5F5F5F5F5F6060606060606060600B0909050101050101050101050101050101050101 020000838383FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB5050500D0D0D000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000101010D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2C2C2C000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090E0E0E111111141414181818 1B1B1B1D1D1D1F1F1F2121212222222525252626262727272828282929292A2A2A2B2B2B2B2B2B 2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A292929282828262626232323222222202020 1F1F1F1D1D1D1A1A1A1717171515151212120F0F0F0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 050505050505040404000000000000000000000000000000000000000000000000262626FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626262000000 000000000000000000000000000000000000040404151515151515151515151515161616161616 161616161616161616161616171717171717171717171717171717181818181818181818181818 1818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F 202020202020202020202020212121212121212121222222222222222222222222232323232323 232323242424242424242424242424252525252525252525252525262626262626262626272727 2727272727272727272828282828282828282828282929292929292929292A2A2A2A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F 2F2F2F303030303030303030313131313131323232323232333333333333333333343434343434 353535353535353535363636363636373737373737373737383838383838383838393939393939 3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E 3F3F3F3F3F3F3F3F3F404040404040414141414141414141424242424242424242434343434343 444444444444444444454545454545464646464646464646474747474747484848484848494949 4949494A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E 4F4F4F4F4F4F505050505050515151515151515151525252525252535353535353535353545454 545454555555555555555555565656565656575757575757575757585858585858585858595959 5959595959595A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5D5D5D5D5D5D 5D5D5D5E5E5E5E5E5E5E5E5E5E5E5E5F5F5F5F5F5F5F5F5F0B0909050101050101050101050101 050101050101020000838383FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE4D4D4D0A0A0A 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000080808D5D5D5FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 797979000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090E0E0E101010 1313131515151919191C1C1C1D1D1D2020202222222424242626262727272828282929292A2A2A 2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2C2C2C2C2C2C2A2A2A2A2A2A282828282828272727 2525252323232121211F1F1F1C1C1C1919191616161414140F0F0F0A0A0A070707070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505020202000000000000000000000000000000000000000000 000000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CBCBCB000000000000000000000000000000000000000000000000111111151515151515151515 151515161616161616161616161616161616171717171717171717171717171717171717181818 1818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222222222 222222232323232323232323242424242424242424242424252525252525252525252525262626 262626262626272727272727272727272727282828282828282828282828292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E 2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131313131323232323232333333333333 333333343434343434353535353535353535363636363636363636373737373737383838383838 3838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040414141414141414141424242424242 424242434343434343434343444444444444454545454545454545464646464646474747474747 4848484848484949494949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4D4D4D 4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F505050505050515151515151515151525252525252 535353535353535353545454545454555555555555555555565656565656565656575757575757 5858585858585858585959595959595959595A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B 5C5C5C5C5C5C5C5C5C5D5D5D5D5D5D5D5D5D5D5D5D5E5E5E5E5E5E5E5E5E0B0909050101050101 050101050101050101050101020000848484FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171 0D0D0D000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000070707 E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFC8C8C8000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101090909 0C0C0C1010101313131515151919191C1C1C1D1D1D1F1F1F212121232323252525262626272727 2929292A2A2A2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A292929 2828282727272525252323232222221F1F1F1D1D1D1A1A1A1717171515151111110D0D0D0A0A0A 070707020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303040404040404040404040404040404040404040404 040404040404040404040404040404050505050505040404000000000000000000000000000000 000000000000000000111111ECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF353535000000000000000000000000000000000000000000080808151515 151515151515151515151515161616161616161616161616161616171717171717171717171717 1717171717171818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121 222222222222222222232323232323232323232323242424242424242424242424252525252525 252525262626262626262626262626272727272727272727272727282828282828282828282828 2929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C 2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131313131323232 323232333333333333333333343434343434343434353535353535363636363636363636373737 3737373838383838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C 3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040404040414141 414141424242424242424242434343434343434343444444444444444444454545454545464646 4646464747474747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4B4B4B 4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050505050505050515151 515151525252525252525252535353535353535353545454545454555555555555555555565656 5656565656565757575757575757575858585858585858585959595959595959595A5A5A5A5A5A 5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C5C5C5C5C5C5C5D5D5D5D5D5D5D5D5D0A0808 050101050101050101050101050101050101020000858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF BABABA121212000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000121212FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFD191919000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060C0C0C0E0E0E1111111414141818181B1B1B1C1C1C1E1E1E212121222222242424 2626262727272929292929292B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C 2A2A2A2A2A2A2929292828282525252323232323232121211D1D1D1B1B1B191919161616121212 0F0F0F0A0A0A070707070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404050505050505050505020202000000000000 0000000000000000000000000000000000006D6D6DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E9E9E000000000000000000000000000000000000000000 010101141414151515151515151515151515161616161616161616161616161616161616171717 171717171717171717171717181818181818181818181818181818191919191919191919191919 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121212121222222222222222222232323232323232323232323242424242424242424 242424252525252525252525262626262626262626262626272727272727272727272727282828 2828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131 313131313131323232323232323232333333333333343434343434343434353535353535363636 3636363636363737373737373838383838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B 3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040 404040404040414141414141414141424242424242434343434343434343444444444444444444 4545454545454545454646464646464747474747474848484848484949494949494949494A4A4A 4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F 505050505050505050515151515151515151525252525252535353535353535353545454545454 545454555555555555555555565656565656565656575757575757575757585858585858585858 5959595959595959595A5A5A5A5A5A5A5A5A5A5A5A5B5B5B5B5B5B5B5B5B5B5B5B5C5C5C5C5C5C 5C5C5C0A0808050101050101050101050101050101050101020000858585FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF7F7F71D1D1D000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000030303030303030303 030303050505050505070707070707070707070707070707070707070707070707070707070707 050505050505050505030303030303030303000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101555555FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF656565000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090C0C0C1010101313131616161A1A1A1C1C1C1E1E1E212121 2222222424242525252727272828282929292B2B2B2B2B2B2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2C2C2C2A2A2A2A2A2A2828282727272525252323232222221F1F1F1D1D1D1A1A1A 1717171414141111110D0D0D0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404050505050505050505 000000000000000000000000000000000000000000000000030303D2D2D2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6121212000000000000000000000000 0000000000000000000C0C0C151515151515151515151515151515161616161616161616161616 161616161616171717171717171717171717171717181818181818181818181818181818191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020202020212121212121212121222222222222222222222222232323232323232323232323 242424242424242424252525252525252525252525262626262626262626262626272727272727 2727272727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F 303030303030313131313131313131323232323232323232333333333333343434343434343434 353535353535363636363636363636373737373737383838383838383838393939393939393939 3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E 3F3F3F3F3F3F3F3F3F404040404040414141414141414141424242424242424242434343434343 434343444444444444444444454545454545464646464646474747474747474747484848484848 4949494949494A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E 4E4E4E4E4E4E4F4F4F4F4F4F505050505050505050515151515151515151525252525252535353 535353535353545454545454545454555555555555555555565656565656565656575757575757 5757575757575858585858585858585959595959595959595959595A5A5A5A5A5A5A5A5A5A5A5A 5B5B5B5B5B5B5B5B5B0A0808050101050101050101050101050101050101020000858585FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF828282080808000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 090909101010101010101010161616161616161616191919191919191919191919191919191919 161616161616161616101010101010101010090909090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000020202CCCCCCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4B4B4000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090C0C0C0E0E0E1111111515151919191B1B1B 1D1D1D2020202222222424242424242626262828282929292B2B2B2B2B2B2C2C2C2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2A2A2A292929282828262626252525232323212121 1D1D1D1C1C1C1919191616161212120F0F0F0D0D0D070707070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404050505 050505050505020202000000000000000000000000000000000000000000000000424242FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000000000 000000000000000000000000000000020202151515151515151515151515151515151515161616 161616161616161616161616171717171717171717171717171717171717181818181818181818 1818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 1F1F1F202020202020202020202020212121212121212121222222222222222222222222232323 232323232323232323242424242424242424252525252525252525252525262626262626262626 2626262727272727272727272727272828282828282828282929292929292929292929292A2A2A 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F303030303030303030313131313131323232323232323232333333333333 343434343434343434353535353535363636363636363636373737373737373737383838383838 3939393939393939393A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D 3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040404040414141414141414141424242 424242434343434343434343444444444444444444454545454545454545464646464646474747 4747474848484848484848484949494949494A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C 4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F505050505050505050515151515151 515151525252525252525252535353535353535353545454545454545454555555555555555555 565656565656565656575757575757575757575757585858585858585858585858595959595959 5959595959595A5A5A5A5A5A5A5A5A0A0808050101050101050101050101050101050101020000 868686FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9191919000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 090909090909101010101010101010161616161616191919191919191919191919191919191919 191919191919191919191919161616161616101010101010090909090909090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000001B1B1BFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F70B0B0B 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C101010141414 1818181A1A1A1C1C1C2020202222222323232424242626262727272929292B2B2B2C2C2C2C2C2C 2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2B2B2B2A2A2A282828272727262626 2525252222221F1F1F1D1D1D1B1B1B1717171414141212120F0F0F0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505000000000000000000000000000000000000000000000000 000000B0B0B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8 0101010000000000000000000000000000000000000000000E0E0E151515151515151515151515 151515161616161616161616161616161616161616171717171717171717171717171717171717 1818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121212121222222222222 222222222222232323232323232323232323242424242424242424252525252525252525252525 262626262626262626262626272727272727272727282828282828282828282828292929292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D 2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131323232323232 323232333333333333343434343434343434353535353535353535363636363636373737373737 3737373838383838383939393939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C 3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040414141 414141414141424242424242424242434343434343434343444444444444444444454545454545 4646464646464646464747474747474848484848484848484949494949494A4A4A4A4A4A4B4B4B 4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F 505050505050505050515151515151525252525252525252535353535353535353535353545454 545454545454555555555555555555565656565656565656565656575757575757575757575757 5858585858585858585858585858585959595959590A0808050101050101050101050101050101 050101020000868686FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFACACAC0E0E0E000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909090909091010101616161616161616161919191919191D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D191919191919161616161616161616101010090909090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030303 B1B1B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF515151000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 1010101313131616161A1A1A1C1C1C1F1F1F2222222222222424242525252727272929292B2B2B 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2A2A2A292929 2828282727272525252323232020201D1D1D1C1C1C1919191616161414140F0F0F0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404050505050505050505030303000000000000000000000000000000 0000000000000000001E1E1EF4F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF434343000000000000000000000000000000000000000000050505141414151515 151515151515151515151515161616161616161616161616161616161616171717171717171717 1717171717171818181818181818181818181818181919191919191919191919191A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121 212121222222222222222222222222232323232323232323242424242424242424242424252525 252525252525252525262626262626262626262626272727272727272727282828282828282828 2828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131 313131323232323232323232333333333333343434343434343434353535353535353535363636 3636363737373737373737373838383838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B 3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F 404040404040404040414141414141414141424242424242434343434343434343444444444444 444444454545454545454545464646464646474747474747474747484848484848494949494949 4949494A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E 4E4E4E4F4F4F4F4F4F4F4F4F505050505050505050515151515151515151525252525252525252 535353535353535353535353545454545454545454555555555555555555555555565656565656 5656565656565757575757575757575757575757575858585858580A0808050101050101050101 050101050101050101020000868686FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101010101616161616161919191919191D1D1D1D1D1D 2020202020201D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D191919191919161616161616101010 090909090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000002B2B2BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA0A0A0000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0606060909090E0E0E1313131616161919191C1C1C1E1E1E212121222222242424252525272727 2929292B2B2B2B2B2B2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2E2E2E2C2C2C 2B2B2B2A2A2A2828282828282626262323232222221E1E1E1D1D1D1A1A1A171717151515111111 0D0D0D0A0A0A020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404050505050505050505010101000000000000 0000000000000000000000000000000000007A7A7AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFACACAC000000000000000000000000000000000000000000000000 101010151515151515151515151515151515151515161616161616161616161616161616161616 171717171717171717171717171717181818181818181818181818181818191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121212121222222222222222222222222232323232323232323242424242424 242424242424252525252525252525252525262626262626262626262626272727272727272727 2828282828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030 303030303030313131313131323232323232323232333333333333333333343434343434353535 353535353535363636363636363636373737373737383838383838383838393939393939393939 3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E 3F3F3F3F3F3F3F3F3F404040404040404040414141414141414141424242424242424242434343 434343434343444444444444444444454545454545454545464646464646474747474747474747 4848484848484949494949494949494A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C 4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F505050505050505050515151 515151515151525252525252525252525252535353535353535353545454545454545454545454 5555555555555555555555555555555656565656565656565656565656565757570A0808050101 050101050101050101050101050101020000878787FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD191919000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909091010101616161616161919191919191D1D1D 1D1D1D2020202020202020202020202020202020202020202020201D1D1D191919191919191919 191919101010090909090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000F0F0FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC040404000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090E0E0E1111111515151818181A1A1A1C1C1C1E1E1E222222242424 2525252727272929292A2A2A2B2B2B2B2B2B2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D 2D2D2D2E2E2E2D2D2D2C2C2C2C2C2C2A2A2A2828282525252424242222221E1E1E1C1C1C1A1A1A 1616161414140F0F0F0D0D0D070707070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404050505050505050505040404 000000000000000000000000000000000000000000000000060606D5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB1B1B1B000000000000000000000000000000 000000000000070707141414151515151515151515151515151515151515161616161616161616 161616161616171717171717171717171717171717171717181818181818181818181818181818 1919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121212121222222222222222222222222232323232323 232323242424242424242424242424252525252525252525252525262626262626262626262626 2727272727272727272828282828282828282828282929292929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E 2F2F2F2F2F2F303030303030303030313131313131313131323232323232333333333333333333 343434343434353535353535353535363636363636363636373737373737373737383838383838 3939393939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D 3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040404040414141414141414141 424242424242424242434343434343434343444444444444444444454545454545454545464646 4646464747474747474747474848484848484949494949494949494A4A4A4A4A4A4A4A4A4B4B4B 4B4B4B4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F 4F4F4F505050505050505050515151515151515151525252525252525252525252535353535353 535353535353545454545454545454545454545454555555555555555555555555555555555555 0A0808050101050101050101050101050101050101020000878787FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDB171717 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909101010101010161616191919 1D1D1D1D1D1D2020202020202424242424242020202020202424242424242424242020201D1D1D 191919191919161616101010101010090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000101018B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E3E3E000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C1010101414141616161A1A1A1C1C1C1E1E1E 2121212323232424242727272929292929292B2B2B2B2B2B2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E 2E2E2E2D2D2D2D2D2D2E2E2E2E2E2E2D2D2D2C2C2C2A2A2A2828282626262525252222221F1F1F 1D1D1D1A1A1A1717171515151111110D0D0D0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404050505 050505050505020202000000000000000000000000000000000000000000000000404040FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF828282000000000000000000 000000000000000000000000000000121212141414151515151515151515151515151515161616 161616161616161616161616161616171717171717171717171717171717171717181818181818 1818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222222222222222 232323232323232323232323242424242424242424242424252525252525252525252525262626 262626262626262626272727272727272727282828282828282828282828292929292929292929 2929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131313131323232323232 333333333333333333343434343434343434353535353535363636363636363636373737373737 3737373838383838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C 3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040 414141414141414141424242424242424242434343434343434343434343444444444444444444 454545454545454545464646464646474747474747474747484848484848494949494949494949 4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4E4E4E 4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F505050505050505050515151515151515151515151 525252525252525252525252525252535353535353535353535353535353545454545454545454 545454545454090707050101050101050101050101050101050101020000878787FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF B4B4B40D0D0D000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909090909101010101010 1616161919191D1D1D202020202020202020242424242424242424242424242424242424242424 2424242020201D1D1D191919161616101010101010090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000003A3A3AFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C8C8C000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060C0C0C101010131313161616191919 1C1C1C1D1D1D2121212222222424242626262828282929292B2B2B2B2B2B2D2D2D2D2D2D2E2E2E 2E2E2E2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2E2E2E2D2D2D2C2C2C2A2A2A292929272727252525 2323232020201D1D1D1B1B1B1919191616161212120F0F0F0D0D0D070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404050505050505040404000000000000000000000000000000000000000000000000 000000A2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED0A0A0A 0000000000000000000000000000000000000000000A0A0A141414141414151515151515151515 151515151515161616161616161616161616161616161616171717171717171717171717171717 1717171818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121 222222222222222222232323232323232323232323242424242424242424242424252525252525 252525252525262626262626262626262626272727272727272727282828282828282828282828 2929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131 313131323232323232323232333333333333343434343434343434353535353535353535363636 3636363737373737373737373838383838383838383939393939393939393A3A3A3A3A3A3A3A3A 3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F 3F3F3F404040404040404040414141414141414141424242424242424242434343434343434343 444444444444444444444444454545454545454545464646464646474747474747474747484848 4848484848484949494949494949494A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C 4C4C4C4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F505050505050 505050505050515151515151515151515151515151525252525252525252525252525252535353 535353535353535353535353090707050101050101050101050101050101050101020000888888 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D1D1D18E8E8E4A4A4A2323231010100C0C0C121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 1212121212121212121212121111110B0B0B171717343434676767B0B0B0F0F0F0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF9C9C9C010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909090909 1010101616161616161919191D1D1D202020202020242424242424242424242424242424242424 2626262424242424242020201D1D1D191919161616101010101010090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000001D1D1DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDB 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090E0E0E111111 1515151818181B1B1B1C1C1C2020202222222323232626262727272929292B2B2B2B2B2B2C2C2C 2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2E2E2E2E2E2E2D2D2D2C2C2C2A2A2A 2828282727272424242222221F1F1F1D1D1D1B1B1B1717171414141111110F0F0F0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404050505050505050505020202000000000000000000000000000000 000000000000000000151515EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF666666000000000000000000000000000000000000000000020202131313141414151515 151515151515151515151515151515161616161616161616161616161616161616171717171717 1717171717171717171818181818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121212121222222222222222222232323232323232323232323242424242424242424 242424252525252525252525252525262626262626262626262626272727272727272727282828 2828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030 303030303030313131313131323232323232323232333333333333333333343434343434353535 353535353535363636363636363636373737373737373737383838383838393939393939393939 3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E 3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040404040414141414141414141424242424242 424242434343434343434343444444444444444444444444454545454545454545464646464646 4747474747474747474848484848484848484949494949494949494A4A4A4A4A4A4A4A4A4B4B4B 4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E 4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F505050505050505050505050515151515151515151515151 515151515151525252525252525252525252090707050101050101050101050101050101050101 020000888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF 8181811A1A1A111111060606000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000D0D0D0D0D0D 464646C0C0C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7 8686865B5B5B3F3F3F393939393939393939393939393939393939393939393939393939393939 393939393939393939393939393939393939393939393939393939393939393939393939393939 393939393939393939393939393939393939393939393939393939393939393939393939393939 3939393939393939393939393939393939393939393939393939394242425E5E5E939393E2E2E2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF8B8B8B000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091010101010101616161919191D1D1D202020202020242424242424262626262626262626 2424242424242626262626262424242020201D1D1D191919161616101010101010090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 171717FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF2A2A2A000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C1010101414141616161A1A1A1C1C1C1F1F1F2121212222222424242727272929292A2A2A 2B2B2B2C2C2C2D2D2D2E2E2E2F2F2F2F2F2F3030302F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2C2C2C2A2A2A2929292828282525252323232121211E1E1E1D1D1D1A1A1A161616141414111111 0D0D0D0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404050505050505050505010101000000000000 000000000000000000000000000000000000595959FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD8D8D80202020000000000000000000000000000000000000000000C0C0C 141414141414151515151515151515151515151515151515161616161616161616161616161616 161616171717171717171717171717171717181818181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020202020212121212121212121212121222222222222222222232323232323232323232323 242424242424242424242424252525252525252525252525262626262626262626262626272727 2727272727272727272828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E 2F2F2F2F2F2F303030303030303030313131313131313131323232323232333333333333333333 343434343434343434353535353535363636363636363636373737373737373737383838383838 3838383939393939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C 3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040404040414141 414141414141424242424242424242434343434343434343444444444444444444444444454545 454545454545464646464646464646474747474747474747484848484848484848494949494949 4949494A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D 4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F505050 505050505050505050505050505050505050515151515151090707050101050101050101050101 050101050101020000898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7 7B7B7B0E0E0E080808000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909092C2C2CCDCDCDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEA9A9A9 222222161616020202000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0505051717172E2E2EC1C1C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101616161616161919191D1D1D202020242424242424262626262626 2626262626262626262626262626262626262424242020201D1D1D191919161616101010101010 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000181818F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF7B7B7B000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060C0C0C1010101313131515151919191C1C1C1E1E1E202020222222242424272727 2929292929292B2B2B2C2C2C2D2D2D2E2E2E2F2F2F3030303030303030303030302E2E2E2E2E2E 2F2F2F2E2E2E2D2D2D2C2C2C2A2A2A2A2A2A2727272424242222222020201E1E1E1C1C1C191919 1515151212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404050505050505050505040404 000000000000000000000000000000000000000000000000000000B1B1B1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4A4A4A000000000000000000000000000000000000 000000040404141414141414141414151515151515151515151515151515151515161616161616 161616161616161616171717171717171717171717171717171717181818181818181818181818 1818181919191919191919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 1F1F1F202020202020202020202020212121212121212121212121222222222222222222232323 232323232323232323242424242424242424242424252525252525252525252525262626262626 262626262626272727272727272727272727282828282828282828282828292929292929292929 2929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D 2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131313131313131323232323232 323232333333333333343434343434343434353535353535353535363636363636363636373737 3737373737373838383838383939393939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B 3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040 404040404040404040414141414141414141424242424242424242434343434343434343434343 444444444444444444454545454545454545464646464646464646474747474747474747474747 4848484848484848484949494949494949494A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E 4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F090707050101050101 050101050101050101050101020000898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CBCBCB1B1B1B0B0B0B000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000060606646464FAFAFAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB 3434340F0F0F000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000001212124E4E4EF7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000090909101010161616161616191919202020202020242424262626 2626262828282828282828282626262626262626262626262424242020201D1D1D191919191919 161616101010090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000171717E5E5E5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2D2D2000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090E0E0E1111111515151818181B1B1B1D1D1D1F1F1F212121 2424242626262828282929292B2B2B2C2C2C2D2D2D2E2E2E2F2F2F303030303030303030303030 2F2F2F2E2E2E2E2E2E2F2F2F2E2E2E2D2D2D2B2B2B2A2A2A2828282525252323232121211F1F1F 1D1D1D1A1A1A1616161515151111110D0D0D070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404050505 050505050505020202000000000000000000000000000000000000000000000000191919EEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBCBCBC000000000000000000000000 0000000000000000000000000F0F0F141414141414141414151515151515151515151515151515 161616161616161616161616161616161616171717171717171717171717171717171717181818 1818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222 222222222222232323232323232323232323242424242424242424242424252525252525252525 252525262626262626262626262626272727272727272727272727282828282828282828282828 2929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030313131313131 313131323232323232323232333333333333333333343434343434343434353535353535363636 3636363636363737373737373737373838383838383838383939393939393939393A3A3A3A3A3A 3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E 3F3F3F3F3F3F3F3F3F404040404040404040404040414141414141414141424242424242424242 424242434343434343434343444444444444444444444444454545454545454545464646464646 4646464747474747474747474848484848484848484848484949494949494949494949494A4A4A 4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4D4D4D 4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E090707 0501010501010501010501010501010501010200008A8A8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF9898980E0E0E000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000101011A1A1AE9E9E9 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DDDDDD1E1E1E020202000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000808082B2B2BEFEFEFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909090909091010101616161919191D1D1D202020242424 2626262626262828282828282828282828282828282626262626262626262626262424241D1D1D 191919191919161616101010090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B2B2B000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1111111414141818181B1B1B1C1C1C 1E1E1E2121212424242626262828282929292A2A2A2C2C2C2D2D2D2E2E2E2F2F2F303030303030 3030303030303030302F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2C2C2C2A2A2A282828262626242424 2222222020201E1E1E1B1B1B1717171616161212120F0F0F0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505000000000000000000000000000000000000000000000000 000000616161FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF303030000000 000000000000000000000000000000000000060606141414141414141414141414151515151515 151515151515151515161616161616161616161616161616161616171717171717171717171717 1717171717171818181818181818181818181818181919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121 212121212121222222222222222222232323232323232323232323242424242424242424242424 252525252525252525252525262626262626262626262626272727272727272727272727282828 2828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030 303030303030313131313131313131323232323232333333333333333333343434343434343434 353535353535353535363636363636363636373737373737373737383838383838383838393939 3939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D 3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F404040404040404040414141414141 414141424242424242424242424242434343434343434343434343444444444444444444454545 454545454545454545464646464646464646474747474747474747474747484848484848484848 4848484949494949494949494949494A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D 4D4D4D0907070501010501010501010501010501010501010200008A8A8AFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF8181810D0D0D000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000070707D5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF1F1F1232323000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000040404383838 FCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909090909091010101616161919191D1D1D 202020242424262626262626282828282828282828282828282828282828282828262626262626 2424241D1D1D191919191919161616101010090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060C0C0C101010131313151515 1919191B1B1B1D1D1D2121212323232424242626262828282929292B2B2B2C2C2C2D2D2D2E2E2E 2F2F2F3030303030303030303030303131313131313030303030302E2E2E2D2D2D2C2C2C2A2A2A 2929292727272525252323232020201D1D1D1A1A1A1717171515151111110D0D0D0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404050505050505050505030303000000000000000000000000000000 000000000000000000000000B6B6B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A0A0A0000000000000000000000000000000000000000000000000101010141414141414141414 151515151515151515151515151515151515161616161616161616161616161616161616171717 171717171717171717171717171717181818181818181818181818181818191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 202020212121212121212121212121222222222222222222232323232323232323232323242424 242424242424242424252525252525252525252525262626262626262626262626272727272727 2727272727272828282828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E 2F2F2F2F2F2F303030303030303030313131313131313131323232323232323232333333333333 333333343434343434343434353535353535363636363636363636373737373737373737383838 3838383838383939393939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C 3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F404040 404040404040414141414141414141414141424242424242424242434343434343434343434343 444444444444444444444444454545454545454545454545464646464646464646464646474747 4747474747474747474848484848484848484848484949494949494949494949494A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B 4C4C4C4C4C4C4C4C4C0806060501010501010501010501010501010501010200008A8A8AFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF9191910D0D0D000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000040404D4D4D4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF4F4F4F040404000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000B0B0B7D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF878787000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909101010161616191919 1919191D1D1D2424242626262626262828282A2A2A2A2A2A2A2A2A2A2A2A2A2A2A282828282828 2828282626262424241D1D1D191919191919161616101010090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000181818E4E4E4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D9D9D9000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060C0C0C0E0E0E 1111111515151818181A1A1A1C1C1C2020202222222424242626262828282929292B2B2B2C2C2C 2D2D2D2E2E2E2F2F2F3030303030303030303030303131313131313030302F2F2F2F2F2F2D2D2D 2C2C2C2B2B2B2A2A2A2727272525252323232121211D1D1D1B1B1B1919191616161212120F0F0F 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404050505050505050505010101000000000000 000000000000000000000000000000000000161616E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFAFAFA1C1C1C000000000000000000000000000000000000000000070707141414 141414141414141414151515151515151515151515151515151515161616161616161616161616 161616161616171717171717171717171717171717171717181818181818181818181818191919 1919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F 202020202020202020202020212121212121212121212121222222222222222222222222232323 232323232323242424242424242424242424252525252525252525252525262626262626262626 262626272727272727272727272727282828282828282828282828292929292929292929292929 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030303030313131313131323232323232 323232333333333333333333343434343434343434353535353535353535363636363636363636 3737373737373737373838383838383838383939393939393939393A3A3A3A3A3A3A3A3A3B3B3B 3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F 3F3F3F3F3F3F3F3F3F404040404040404040404040414141414141414141424242424242424242 424242434343434343434343434343444444444444444444444444454545454545454545454545 454545464646464646464646464646474747474747474747474747484848484848484848484848 4848484949494949494949494949494949494949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A080606050101050101050101050101050101050101020000 8B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC0C0C00D0D0D000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000060606E8E8E8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD2D2D2151515000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000181818EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1616161919191919191D1D1D2424242626262828282828282A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2828282828282626262424241D1D1D191919191919101010101010090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000181818 E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF313131000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090E0E0E1010101414141616161A1A1A1C1C1C1F1F1F222222242424262626272727292929 2B2B2B2C2C2C2D2D2D2E2E2E2F2F2F303030303030303030313131313131313131303030303030 2F2F2F2E2E2E2D2D2D2C2C2C2A2A2A2828282626262525252222221E1E1E1C1C1C1A1A1A171717 1414141111110D0D0D0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404050505050505050505040404 0000000000000000000000000000000000000000000000000000004F4F4FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF848484000000000000000000000000000000000000000000 000000111111141414141414141414141414151515151515151515151515151515151515161616 161616161616161616161616161616171717171717171717171717171717171717181818181818 1818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222222222 222222222222232323232323232323232323242424242424242424252525252525252525252525 262626262626262626262626272727272727272727272727282828282828282828282828282828 2929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F303030303030303030313131 313131313131323232323232323232333333333333333333343434343434343434353535353535 353535363636363636363636373737373737373737383838383838383838393939393939393939 3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D 3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040404040404040414141414141 414141414141424242424242424242424242434343434343434343434343444444444444444444 444444444444454545454545454545454545454545464646464646464646464646474747474747 474747474747474747474747484848484848484848484848484848484848484848494949494949 494949494949494949494949494949494949494949080606050101050101050101050101050101 0501010200008B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0141414000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000151515F9F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4F000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000040404808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091010101616161919191D1D1D2020202424242626262828282828282A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2828282828282626262424241D1D1D191919191919101010101010090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF888888000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090C0C0C0E0E0E1111111515151818181B1B1B1D1D1D212121222222242424 2727272929292A2A2A2B2B2B2D2D2D2E2E2E2F2F2F303030303030303030313131323232323232 3131313030302F2F2F2F2F2F2E2E2E2D2D2D2B2B2B2929292727272626262323232121211D1D1D 1C1C1C1A1A1A1616161212120F0F0F0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404050505 0505050505050202020000000000000000000000000000000000000000000000000000009C9C9C FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED0B0B0B000000000000000000000000 000000000000000000080808141414141414141414141414141414151515151515151515151515 151515151515161616161616161616161616161616161616171717171717171717171717171717 1818181818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121 212121222222222222222222222222232323232323232323232323242424242424242424242424 252525252525252525252525262626262626262626262626272727272727272727272727282828 2828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F 303030303030303030313131313131313131323232323232333333333333333333343434343434 343434353535353535353535363636363636363636363636373737373737373737383838383838 3838383939393939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C 3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F404040 404040404040404040414141414141414141414141424242424242424242424242434343434343 434343434343434343444444444444444444444444444444454545454545454545454545454545 454545464646464646464646464646464646464646474747474747474747474747474747474747 474747474747474747484848484848484848484848484848484848080606050101050101050101 0501010501010501010200008B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF636363080808000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000505050505050505050505050505050505050808080808080808080808080808080B0B0B 0B0B0B0B0B0B0D0D0D0D0D0D0D0D0D0F0F0F0F0F0F0F0F0F101010101010101010101010101010 1010101212121212121212121212121212121212121212121010101010100C0C0C0B0B0B060606 020202010101000000000000000000000000000000000000000000000000000000000000010101 575757FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD181818000000000000000000000000 000000000000000000000000010101060606070707070707070707070707070707070707070707 070707070707070707060606060606060606060606060606060606060606060606060606060606 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505040404040404040404040404040404040404040404040404030303 000000000000000000000000000000000000000000000000000000292929FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101616161919191D1D1D2020202424242626262828282828282A2A2A 2D2D2D2D2D2D2A2A2A2A2A2A2A2A2A2828282828282626262424241D1D1D191919191919101010 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE010101000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C1010101313131616161A1A1A1C1C1C202020 2222222424242626262828282929292B2B2B2C2C2C2E2E2E2F2F2F303030303030313131313131 3232323232323232323131313030303030302F2F2F2E2E2E2C2C2C2A2A2A292929272727252525 2323232020201E1E1E1C1C1C1919191414141111110D0D0D0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505010101000000000000000000000000000000000000000000 0000000C0C0CDCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF696969000000000000 000000000000000000000000000000010101121212141414141414141414141414141414151515 151515151515151515151515151515161616161616161616161616161616161616171717171717 1717171717171717171818181818181818181818181818181919191919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121212121222222222222222222222222232323232323232323232323242424 242424242424242424252525252525252525252525262626262626262626262626272727272727 2727272727272828282828282828282828282929292929292929292929292A2A2A2A2A2A2A2A2A 2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F303030303030303030313131313131313131323232323232323232333333 333333333333343434343434343434353535353535353535363636363636363636373737373737 3737373737373838383838383838383939393939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B 3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E 3F3F3F3F3F3F3F3F3F3F3F3F404040404040404040404040414141414141414141414141424242 424242424242424242424242434343434343434343434343434343444444444444444444444444 444444444444444444454545454545454545454545454545454545454545464646464646464646 464646464646464646464646464646464646464646464646464646464646464646080606050101 0501010501010501010501010501010200008B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD0E0E0E000000000000000000 000000000000000000000000000000000000000000000000000000040404171717282828323232 3838383A3A3A3A3A3A393939393939393939393939393939393939393939393939383838383838 383838383838383838383838373737373737373737373737373737373737363636363636363636 363636363636353535353535353535353535353535343434343434343434343434343434333333 333333333333333333323232323232323232323232323232313131313131313131313131303030 3030303030303030302F2F2F333333333333333333323232323232343434333333333333363636 363636353535363636363636363636373737373737373737373737373737383838383838373737 373737383838373737373737373737363636363636363636363636353535353535333333313131 3030302B2B2B252525111111010101000000000000000000000000000000000000000000000000 000000000000040404C6C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6161616000000000000 000000000000000000000000000000040404141414161616161616161616151515151515151515 141414141414141414141414131313131313131313121212121212121212121212111111111111 1111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C 0C0C0C0C0C0C0A0A0A010101000000000000000000000000000000000000000000171717FAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101616161919191D1D1D202020242424282828282828 2A2A2A2A2A2A2D2D2D2D2D2D2D2D2D2A2A2A2A2A2A2828282828282626262424241D1D1D191919 191919101010101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF373737000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060606060909090E0E0E111111151515181818 1C1C1C1F1F1F2121212323232626262828282929292B2B2B2C2C2C2E2E2E2F2F2F303030313131 3131313131313232323232323232323131313030303030303030302F2F2F2D2D2D2C2C2C2A2A2A 2929292727272424242222222020201D1D1D1A1A1A1616161212120F0F0F0A0A0A070707070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404050505050505050505040404000000000000000000000000000000 000000000000000000000000383838FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC 040404000000000000000000000000000000000000000000090909141414141414141414141414 141414141414151515151515151515151515151515151515161616161616161616161616161616 171717171717171717171717171717171717181818181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121212121222222222222222222222222232323232323 232323232323242424242424242424242424252525252525252525252525262626262626262626 262626272727272727272727272727282828282828282828282828292929292929292929292929 2929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030303030313131313131313131 323232323232323232333333333333333333343434343434343434353535353535353535363636 3636363636363737373737373737373737373838383838383838383939393939393939393A3A3A 3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D 3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F404040404040404040404040 414141414141414141414141414141424242424242424242424242424242424242434343434343 434343434343434343434343444444444444444444444444444444444444444444444444444444 454545454545454545454545454545454545454545454545454545454545454545454545454545 0806060501010501010501010501010501010501010200008C8C8CFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D5D5D030303000000 0000000000000000000000000000000000000000000000000000000101011A1A1A3636363A3A3A 3A3A3A3A3A3A393939393939393939393939393939393939393939383838383838383838383838 383838383838383838373737373737373737373737373737373737363636363636363636363636 363636363636353535353535353535353535353535343434343434343434343434343434333333 333333333333333333323232323232323232323232323232313131313131313131313131303030 3030303030303030302F2F2F2F2F2F2F2F2F333333323232323232323232323232333333333333 333333363636353535353535363636353535353535373737373737373737383838383838383838 383838383838383838383838383838383838373737363636363636373737363636353535353535 3434343232323232323232323030302F2F2F2A2A2A060606000000000000000000000000000000 000000000000000000000000000000212121FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBBBB101010 000000000000000000000000000000000000000000111111161616161616161616151515151515 151515141414141414141414141414131313131313131313131313121212121212121212111111 1111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C070707000000000000000000000000000000000000000000 181818E2E2E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909091010101616161919191D1D1D202020262626 2828282828282A2A2A2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2A2A2A282828282828262626242424 1D1D1D191919191919101010101010090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF929292 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090E0E0E111111 1414141818181B1B1B1E1E1E2121212323232626262828282929292A2A2A2C2C2C2E2E2E2F2F2F 3030303131313232323232323232323232323232323232323131313030303030302F2F2F2E2E2E 2C2C2C2A2A2A2A2A2A2828282525252323232121211E1E1E1C1C1C1717171515151111110D0D0D 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404050505050505050505030303000000000000 000000000000000000000000000000000000000000767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF5B5B5B000000000000000000000000000000000000000000010101121212141414 141414141414141414141414141414151515151515151515151515151515151515161616161616 161616161616161616171717171717171717171717171717171717181818181818181818181818 1818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222222222222222 222222232323232323232323232323242424242424242424242424252525252525252525252525 262626262626262626262626262626272727272727272727272727282828282828282828282828 2929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030 303030313131313131313131323232323232323232333333333333333333343434343434343434 353535353535353535363636363636363636373737373737373737373737383838383838383838 3939393939393939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C 3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F 3F3F3F404040404040404040404040404040414141414141414141414141414141414141424242 424242424242424242424242424242434343434343434343434343434343434343434343434343 434343444444444444444444444444444444444444444444444444444444444444444444444444 4444444444440806060501010501010501010501010501010501010200008D8D8DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F60E0E0E 0000000000000000000000000000000000000000000000000000000000000404042A2A2A393939 393939393939393939393939393939393939393939393939383838383838383838383838383838 383838383838373737373737373737373737373737373737373737363636363636363636363636 363636353535353535353535353535353535353535343434343434343434343434343434333333 333333333333333333323232323232323232323232323232313131313131313131313131303030 3030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E323232313131313131 313131333333323232353535353535353535353535353535353535373737373737383838383838 383838383838393939393939383838383838383838383838373737373737363636373737373737 3636363434343434343434343333333333333131313030302F2F2F2D2D2D060606000000000000 000000000000000000000000000000000000000000070707B5B5B5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A7A7A7070707000000000000000000000000000000000000000000151515161616161616151515 151515151515151515141414141414141414131313131313131313131313121212121212121212 1212121111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C090909000000000000000000000000000000 000000000000141414CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 878787000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000909091010101616161919191D1D1D 2020202626262828282A2A2A2A2A2A2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2A2A2A282828282828 2626262424241D1D1D191919191919101010101010090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFECECEC070707000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C1010101414141616161B1B1B1D1D1D2121212222222525252727272929292A2A2A2C2C2C 2D2D2D2F2F2F303030313131313131323232323232323232323232323232323232313131303030 3030302F2F2F2D2D2D2C2C2C2A2A2A2929292626262323232222221F1F1F1D1D1D191919161616 1212120F0F0F0A0A0A070707070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404050505050505050505 010101000000000000000000000000000000000000000000000000010101AFAFAFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD6D6D6020202000000000000000000000000000000000000000000 0A0A0A131313141414141414141414141414141414141414151515151515151515151515151515 151515161616161616161616161616161616171717171717171717171717171717171717181818 1818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121 222222222222222222222222232323232323232323232323232323242424242424242424242424 252525252525252525252525262626262626262626262626272727272727272727272727282828 2828282828282828282929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F 2F2F2F303030303030303030313131313131313131323232323232323232333333333333333333 333333343434343434343434353535353535353535363636363636363636373737373737373737 3737373838383838383838383939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3B3B3B 3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E 3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F404040404040404040404040404040404040 414141414141414141414141414141414141424242424242424242424242424242424242424242 424242424242424242434343434343434343434343434343434343434343434343434343434343 4343434343434343434343430806060501010501010501010501010501010501010200008D8D8D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ACACAC0F0F0F0000000000000000000000000000000000000000000000000000000101012B2B2B 393939393939393939393939393939393939383838383838383838383838383838383838383838 383838373737373737373737373737373737373737373737363636363636363636363636363636 363636353535353535353535353535353535343434343434343434343434343434343434333333 333333333333333333323232323232323232323232323232313131313131313131313131303030 3030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D 313131313131313131323232323232353535343434343434343434353535343434363636373737 383838373737383838393939383838383838383838393939383838383838383838373737393939 3939393838383636363636363535353434343333333333333333333131312F2F2F2E2E2E282828 020202000000000000000000000000000000000000000000000000000000383838FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA5A5A5060606000000000000000000000000000000000000000000151515161616 151515151515151515151515141414141414141414141414131313131313131313121212121212 1212121212121111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B090909000000000000000000 000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF878787000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909101010191919 1919191D1D1D2020202626262828282A2A2A2A2A2A2D2D2D2D2D2D2F2F2F2D2D2D2D2D2D2A2A2A 2828282828282626262424241D1D1D191919191919101010101010090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000181818E4E4E4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF525252000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060C0C0C1010101313131616161A1A1A1C1C1C1F1F1F212121242424262626282828 2929292B2B2B2D2D2D2E2E2E2F2F2F303030303030323232323232333333333333323232323232 3131313030303030303030302F2F2F2E2E2E2C2C2C2A2A2A2727272525252323232020201D1D1D 1B1B1B1919191515151111110D0D0D0A0A0A070707060606020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404050505 050505050505040404000000000000000000000000000000000000000000000000000000111111 DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF505050000000000000000000000000000000 000000000000010101121212131313141414141414141414141414141414141414151515151515 151515151515151515161616161616161616161616161616161616171717171717171717171717 1717171717171818181818181818181818181818181919191919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121212121222222222222222222222222232323232323232323232323242424 242424242424242424252525252525252525252525262626262626262626262626272727272727 2727272727272828282828282828282828282828282929292929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E 2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030303030313131313131313131323232323232 323232333333333333333333333333343434343434343434353535353535353535363636363636 363636363636373737373737373737383838383838383838383838393939393939393939393939 3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D 3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F 3F3F3F404040404040404040404040404040404040404040414141414141414141414141414141 414141414141414141414141414141424242424242424242424242424242424242424242424242 424242424242424242424242424242424242080606050101050101050101050101050101050101 0200008D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF5D5D5D000000000000000000000000000000000000000000000000000000000000 222222393939393939393939383838383838383838383838383838383838383838383838383838 373737373737373737373737373737373737373737363636363636363636363636363636363636 353535353535353535353535353535353535343434343434343434343434343434333333333333 333333333333333333323232323232323232323232323232313131313131313131313131313131 3030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D 2D2D2D2D2D2D313131303030303030303030323232313131343434343434343434343434343434 3636363636363737373737373838383838383838383939393838383A3A3A3A3A3A3A3A3A393939 393939393939393939393939393939393939373737353535343434343434333333323232303030 2F2F2F2E2E2E1616160101010000000000000000000000000000000000000000000000000B0B0B E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000000000000000000000 151515151515151515151515151515141414141414141414141414131313131313131313121212 1212121212121212121111111111111111111111111010101010101010101010101010100F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B090909000000 000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1010101919191D1D1D2020202424242828282A2A2A2A2A2A2D2D2D2F2F2F2F2F2F3131312F2F2F 2F2F2F2D2D2D2A2A2A2A2A2A282828242424202020191919191919101010090909090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB1B1B1000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090E0E0E1313131515151919191C1C1C1E1E1E212121232323 2525252828282929292B2B2B2D2D2D2E2E2E2F2F2F303030303030323232323232333333333333 3333333232323232323131313030303131313030302E2E2E2D2D2D2A2A2A282828272727252525 2222221F1F1F1D1D1D1B1B1B1717171414141111110D0D0D0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505030303000000000000000000000000000000000000000000 000000000000353535F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCDCDCD010101000000000000 0000000000000000000000000000000B0B0B131313131313141414141414141414141414141414 141414151515151515151515151515151515161616161616161616161616161616161616171717 171717171717171717171717171717181818181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121212121222222222222222222222222232323232323 232323232323242424242424242424242424252525252525252525252525262626262626262626 262626262626272727272727272727272727282828282828282828282828292929292929292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C 2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030303030313131 313131313131323232323232323232333333333333333333333333343434343434343434353535 353535353535353535363636363636363636373737373737373737373737383838383838383838 3939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E 3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F404040404040404040404040 404040404040404040404040404040404040404040414141414141414141414141414141414141 414141414141414141414141414141414141404040404040080606050101050101050101050101 0501010501010200008E8E8EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF1F1F1F000000000000000000000000000000000000000000000000 0000000A0A0A383838383838383838383838383838383838383838383838383838373737373737 373737373737373737373737373737373737363636363636363636363636363636363636353535 353535353535353535353535353535343434343434343434343434343434343434333333333333 333333333333333333323232323232323232323232323232313131313131313131313131313131 3030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C3030302F2F2F2F2F2F313131343434333333333333 3434343434343535353636363737373737373737373838383939393838383A3A3A3A3A3A3B3B3B 3A3A3A3A3A3A3A3A3A393939393939393939393939383838383838383838353535343434333333 3333333232323030302E2E2E292929020202000000000000000000000000000000000000000000 000000070707A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000000000 000000000000151515151515151515151515141414141414141414141414131313131313131313 131313121212121212121212111111111111111111111111101010101010101010101010101010 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B 090909000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091010101010101919191D1D1D2020202424242828282A2A2A2A2A2A2D2D2D2F2F2F2F2F2F 3131312F2F2F2F2F2F2D2D2D2A2A2A2A2A2A282828242424202020191919161616101010090909 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA161616000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1111111414141818181C1C1C1D1D1D 2020202222222424242727272929292A2A2A2C2C2C2E2E2E2F2F2F303030303030323232323232 3333333333333333333232323232323232323131313030303131312F2F2F2E2E2E2B2B2B292929 2828282626262424242222221F1F1F1D1D1D1A1A1A1616161212120D0D0D0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404040404050505050505050505020202000000000000000000000000 0000000000000000000000000000006D6D6DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF464646 000000000000000000000000000000000000000000020202121212131313131313141414141414 141414141414141414151515151515151515151515151515151515161616161616161616161616 161616161616171717171717171717171717171717171717181818181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222222222222222 222222232323232323232323232323242424242424242424242424242424252525252525252525 252525262626262626262626262626272727272727272727272727282828282828282828282828 2828282929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F 303030303030303030313131313131313131323232323232323232333333333333333333333333 343434343434343434353535353535353535353535363636363636363636363636373737373737 3737373838383838383838383838383939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A 3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F404040404040404040404040 4040404040404040404040404040404040403F3F3F3F3F3F3F3F3F3F3F3F080606050101050101 0501010501010501010501010200008E8E8EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD0A0A0A000000000000000000000000000000000000 000000000000000000252525383838383838383838383838383838373737373737373737373737 373737373737373737373737363636363636363636363636363636363636363636353535353535 353535353535353535353535353535343434343434343434343434343434343434333333333333 333333333333333333323232323232323232323232323232313131313131313131313131313131 3030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2F2F2F2F2F2F313131303030 3333333333333434343333333535353636363636363737373838383939393838383A3A3A3A3A3A 3939393A3A3A3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939383838363636 3434343434343333333232322F2F2F2E2E2E2D2D2D0B0B0B000000000000000000000000000000 000000000000000000000000565656FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000 000000000000000000000000141414151515151515151515141414141414141414131313131313 131313131313121212121212121212121212111111111111111111101010101010101010101010 1010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B 0B0B0B0B0B0B090909000000000000000000000000000000000000000000141414CACACAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909091010101616161919191D1D1D2020202424242828282A2A2A2A2A2A2D2D2D 2F2F2F2F2F2F3131312F2F2F2F2F2F2D2D2D2A2A2A2A2A2A2828282424241D1D1D191919161616 101010090909090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF717171000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060C0C0C0E0E0E111111161616 1A1A1A1C1C1C1E1E1E2121212424242626262828282929292B2B2B2D2D2D2E2E2E2F2F2F303030 3131313232323333333333333333333333333232323232323232323131313131313030302F2F2F 2C2C2C2A2A2A2929292727272525252323232020201D1D1D1C1C1C1717171414141111110D0D0D 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404050505050505050505050505010101000000 0000000000000000000000000000000000000000000000009B9B9BFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFBFBFBF0000000000000000000000000000000000000000000000000B0B0B131313131313 131313141414141414141414141414141414151515151515151515151515151515151515161616 161616161616161616161616161616171717171717171717171717171717171717171717181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121 222222222222222222222222222222232323232323232323232323242424242424242424242424 252525252525252525252525262626262626262626262626262626272727272727272727272727 2828282828282828282828282929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030313131313131313131323232323232323232 323232333333333333333333343434343434343434343434353535353535353535363636363636 363636363636373737373737373737373737383838383838383838383838393939393939393939 3939393939393A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C 3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E 3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E080606 0501010501010501010501010501010501010200008F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEA101010000000000000000000000000 000000000000000000000000020202353535373737373737373737373737373737373737373737 373737373737373737363636363636363636363636363636363636363636353535353535353535 353535353535353535353535343434343434343434343434343434343434333333333333333333 333333333333333333323232323232323232323232323232313131313131313131313131313131 3030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2E2E2E 303030303030333333323232323232333333353535353535363636373737373737383838383838 3A3A3A3939393A3A3A3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939393939393939 3838383636363636363434343333333232322F2F2F2F2F2F2D2D2D161616000000000000000000 000000000000000000000000000000000000282828FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000 000000000000000000000000000000000000141414151515151515141414141414141414131313 131313131313131313121212121212121212121212111111111111111111101010101010101010 1010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0B0B0B0B0B0B0B0B0B090909000000000000000000000000000000000000000000141414 CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909091010101616161919191D1D1D2020202424242828282A2A2A 2A2A2A2D2D2D2F2F2F2F2F2F3131312F2F2F2F2F2F2D2D2D2A2A2A2828282626262424241D1D1D 191919161616101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D3D3D3000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090E0E0E 1010101414141818181B1B1B1D1D1D2020202222222424242727272828282B2B2B2D2D2D2E2E2E 2F2F2F2F2F2F313131323232333333333333343434333333333333323232323232323232313131 3131312F2F2F2E2E2E2C2C2C2A2A2A2828282525252323232121211F1F1F1D1D1D191919161616 1212120F0F0F0D0D0D070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404050505050505050505 040404000000000000000000000000000000000000000000000000000000060606C2C2C2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF3C3C3C000000000000000000000000000000000000000000020202 121212131313131313131313141414141414141414141414141414151515151515151515151515 151515151515161616161616161616161616161616161616161616171717171717171717171717 1717171717171818181818181818181818181818181919191919191919191919191A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121212121222222222222222222222222232323232323232323232323242424 242424242424242424252525252525252525252525252525262626262626262626262626272727 2727272727272727272828282828282828282828282828282929292929292929292929292A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030313131313131 313131323232323232323232323232333333333333333333333333343434343434343434353535 353535353535353535363636363636363636363636373737373737373737373737383838383838 3838383838383838383939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3D3D3D0705050501010501010501010501010501010501010200008F8F8FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD121212000000000000 0000000000000000000000000000000000000D0D0D373737373737373737373737373737373737 363636363636363636363636363636363636363636363636363636353535353535353535353535 353535353535353535343434343434343434343434343434343434333333333333333333333333 333333333333323232323232323232323232323232323232313131313131313131313131313131 3030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B 2A2A2A2E2E2E2E2E2E3030302F2F2F2F2F2F323232323232323232353535363636363636373737 3838383838383939393939393A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A 3A3A3A3939393838383737373737373535353333333333333131312F2F2F2E2E2E1C1C1C020202 0000000000000000000000000000000000000000000000000E0E0EFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5 060606000000000000000000000000000000000000000000141414151515141414141414141414 141414131313131313131313121212121212121212121212111111111111111111111111101010 1010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B090909000000000000000000000000000000000000 000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000090909101010161616191919202020202020262626 2828282A2A2A2A2A2A2D2D2D2F2F2F2F2F2F3131312F2F2F2F2F2F2D2D2D2A2A2A282828262626 2020201D1D1D191919161616101010090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF303030000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C0E0E0E1313131616161A1A1A1C1C1C1F1F1F222222242424262626272727292929 2C2C2C2E2E2E2F2F2F2F2F2F313131323232333333343434343434343434343434333333323232 3232323232323131313131312F2F2F2E2E2E2C2C2C2A2A2A2727272525252323232121211E1E1E 1B1B1B1717171515151212120F0F0F0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 050505050505050505030303000000000000000000000000000000000000000000000000000000 181818E3E3E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4B4B4000000000000000000000000000000000000 0000000000000B0B0B131313131313131313131313141414141414141414141414141414141414 151515151515151515151515151515151515161616161616161616161616161616161616171717 171717171717171717171717171717181818181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020202020212121212121212121212121222222222222222222222222232323232323 232323232323232323242424242424242424242424252525252525252525252525262626262626 262626262626262626272727272727272727272727282828282828282828282828282828292929 2929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030 303030303030313131313131313131313131323232323232323232333333333333333333333333 343434343434343434343434353535353535353535353535363636363636363636363636373737 373737373737373737373737383838383838383838383838393939393939393939393939393939 3939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C 3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C 3C3C3C3C3C3C3C3C3C0705050501010501010501010501010501010501010200008F8F8FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313 000000000000000000000000000000000000000000000000121212373737373737363636363636 363636363636363636363636363636363636363636353535353535353535353535353535353535 353535353535343434343434343434343434343434343434343434333333333333333333333333 333333333333323232323232323232323232323232313131313131313131313131313131313131 3030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B 2A2A2A2A2A2A2A2A2A2A2A2A2D2D2D2D2D2D2F2F2F2F2F2F2E2E2E313131323232343434343434 3535353636363636363737373939393939393939393B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A 3A3A3A3A3A3A3939393939393838383838383737373636363535353333333232323030302E2E2E 1F1F1F0303030000000000000000000000000000000000000000000000000A0A0AFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFA5A5A5060606000000000000000000000000000000000000000000141414141414141414 141414141414131313131313131313131313121212121212121212111111111111111111111111 1010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B090909000000000000000000000000 000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF878787000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000909091010101616161D1D1D202020 2424242626262A2A2A2A2A2A2A2A2A2D2D2D2F2F2F2F2F2F3131312F2F2F2F2F2F2A2A2A282828 2828282626262020201D1D1D191919161616101010090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000181818E4E4E4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF919191000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090E0E0E1111111515151919191C1C1C1E1E1E212121242424252525 2727272929292C2C2C2D2D2D2E2E2E2F2F2F313131323232333333343434343434353535343434 3434343333333232323232323232323131313030302E2E2E2D2D2D2B2B2B292929272727252525 2323232121211D1D1D1B1B1B1717171515151111110D0D0D070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505050505010101000000000000000000000000000000000000 000000000000000000363636F7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE303030000000000000000000 000000000000000000000000020202121212131313131313131313131313141414141414141414 141414141414141414151515151515151515151515151515151515161616161616161616161616 161616161616171717171717171717171717171717171717181818181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020202020212121212121212121212121212121222222222222 222222222222232323232323232323232323242424242424242424242424252525252525252525 252525252525262626262626262626262626272727272727272727272727272727282828282828 2828282828282929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F303030303030303030303030313131313131313131323232323232323232 323232333333333333333333333333343434343434343434343434353535353535353535353535 363636363636363636363636363636373737373737373737373737383838383838383838383838 3838383838383939393939393939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A070505050101050101050101050101050101050101020000 8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D6D6D6131313000000000000000000000000000000000000000000000000161616363636363636 363636363636363636363636363636353535353535353535353535353535353535353535353535 353535343434343434343434343434343434343434343434333333333333333333333333333333 333333323232323232323232323232323232323232313131313131313131313131313131303030 3030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2929292929292D2D2D2C2C2C2C2C2C2E2E2E2E2E2E303030 3131313333333434343535353535353636363636363838383939393A3A3A3B3B3B3A3A3A3A3A3A 3A3A3A3A3A3A393939393939393939393939393939383838373737373737353535323232313131 3030302E2E2E2020200303030000000000000000000000000000000000000000000000000A0A0A FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000000000000000000000131313 141414141414141414131313131313131313131313121212121212121212111111111111111111 1111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B090909000000000000 000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909101010161616 1D1D1D2020202424242626262A2A2A2A2A2A2A2A2A2D2D2D2F2F2F2F2F2F3131312F2F2F2F2F2F 2A2A2A2828282828282626262020201D1D1D191919161616101010090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000181818 E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDED090909000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C1010101414141818181A1A1A1D1D1D212121 2222222424242727272929292B2B2B2D2D2D2E2E2E2F2F2F313131323232333333343434343434 3535353535353434343333333333333333333232323232323131312F2F2F2E2E2E2C2C2C2A2A2A 2929292727272525252323231F1F1F1D1D1D1919191616161212120F0F0F0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303040404040404040404040404040404040404040404 040404040404040404040404040404050505050505050505050505000000000000000000000000 0000000000000000000000000000000000005C5C5CFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAA000000 0000000000000000000000000000000000000000000B0B0B131313131313131313131313131313 141414141414141414141414141414141414151515151515151515151515151515151515161616 161616161616161616161616161616171717171717171717171717171717171717181818181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121 212121222222222222222222222222232323232323232323232323232323242424242424242424 242424252525252525252525252525262626262626262626262626262626272727272727272727 2727272828282828282828282828282828282929292929292929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D 2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030303030303030313131313131 313131313131323232323232323232323232333333333333333333333333343434343434343434 343434353535353535353535353535353535363636363636363636363636363636373737373737 373737373737373737383838383838383838383838383838383838393939393939393939393939 3939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939070505050101050101050101050101050101 050101020000909090FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000000000161616 363636363636353535353535353535353535353535353535353535353535353535353535343434 343434343434343434343434343434343434343434333333333333333333333333333333333333 323232323232323232323232323232323232313131313131313131313131313131313131303030 3030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2929292929292929292929292828282C2C2C2C2C2C2C2C2C 2D2D2D3030303131313232323333333535353535353535353636363838383939393939393A3A3A 3A3A3A3A3A3A3A3A3A393939393939393939393939393939383838383838383838373737353535 3232323232323131312E2E2E1F1F1F030303000000000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000000000000000 000000131313141414141414131313131313131313131313121212121212121212121212111111 1111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B080808 000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 1010101616161D1D1D2020202424242626262A2A2A2A2A2A2D2D2D2D2D2D2F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2D2D2D2A2A2A2828282424242020201D1D1D161616161616101010090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E5E5E000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090E0E0E111111151515191919 1C1C1C1F1F1F2121212424242626262929292A2A2A2B2B2B2D2D2D2F2F2F313131323232333333 343434343434353535353535343434343434343434343434333333323232333333313131303030 2E2E2E2C2C2C2A2A2A2828282727272525252222221E1E1E1B1B1B1919191515151111110D0D0D 0A0A0A020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404040404040404050505050505050505040404000000 0000000000000000000000000000000000000000000000000000007B7B7BFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFD292929000000000000000000000000000000000000000000010101121212131313131313 131313131313131313141414141414141414141414141414141414151515151515151515151515 151515151515161616161616161616161616161616161616171717171717171717171717171717 1717171818181818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020 212121212121212121212121222222222222222222222222222222232323232323232323232323 242424242424242424242424242424252525252525252525252525262626262626262626262626 262626272727272727272727272727282828282828282828282828282828292929292929292929 2929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F303030 303030303030303030313131313131313131313131323232323232323232323232333333333333 333333333333343434343434343434343434343434353535353535353535353535353535363636 363636363636363636363636373737373737373737373737373737373737383838383838383838 383838383838383838383838383838383838393939393939393939393939393939393939393939 393939393939393939393939393939393939393939393939393939393939393939393939393939 393939393939393939393939393939383838383838383838383838070505050101050101050101 050101050101050101020000909090FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000 000000161616353535353535353535353535353535353535353535353535343434343434343434 343434343434343434343434343434333333333333333333333333333333333333333333323232 323232323232323232323232323232323232313131313131313131313131313131313131303030 3030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828282828282828 2B2B2B2B2B2B2B2B2B2D2D2D2F2F2F303030323232333333343434343434363636383838383838 3939393939393A3A3A3A3A3A3939393A3A3A3A3A3A3A3A3A393939393939383838383838383838 3737373636363535353232323232323030301F1F1F030303000000000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000 000000000000000000131313141414131313131313131313131313121212121212121212121212 1111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0A0A0A080808000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909090909091616161616161919192020202424242828282828282A2A2A2D2D2D2D2D2D2F2F2F 3131312F2F2F2F2F2F2D2D2D2D2D2D2A2A2A2828282424242020201D1D1D161616101010090909 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5C5C5 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090E0E0E111111 1414141818181C1C1C1E1E1E2121212323232626262828282929292B2B2B2D2D2D2E2E2E313131 323232323232343434343434353535353535343434343434343434343434343434333333323232 3232323131312F2F2F2D2D2D2A2A2A2929292828282525252222221F1F1F1D1D1D1B1B1B171717 1414141111110D0D0D070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404040404050505050505 050505030303000000000000000000000000000000000000000000000000000000000000939393 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA8A8A80000000000000000000000000000000000000000000000000A0A0A 131313131313131313131313131313131313141414141414141414141414141414141414151515 151515151515151515151515151515161616161616161616161616161616161616171717171717 171717171717171717171717181818181818181818181818181818191919191919191919191919 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020 202020202020202020202020212121212121212121212121222222222222222222222222232323 232323232323232323232323242424242424242424242424252525252525252525252525252525 262626262626262626262626272727272727272727272727272727282828282828282828282828 2828282929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030303030313131313131313131313131323232 323232323232323232333333333333333333333333333333343434343434343434343434343434 353535353535353535353535353535363636363636363636363636363636363636363636373737 373737373737373737373737373737373737373737383838383838383838383838383838383838 383838383838383838383838383838383838383838383838383838383838383838383838383838 383838383838383838383838383838373737373737373737373737373737373737070505050101 050101050101050101050101050101020000919191FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000 000000000000000000161616353535353535353535343434343434343434343434343434343434 343434343434343434343434333333333333333333333333333333333333333333323232323232 323232323232323232323232323232313131313131313131313131313131313131303030303030 3030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828282828 2828282727272727272B2B2B2A2A2A2C2C2C2F2F2F303030303030313131343434343434353535 3737373838383838383939393838383939393939393A3A3A3A3A3A3A3A3A393939393939383838 3838383737373838383737373636363333333131313030301F1F1F030303000000000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000 000000000000000000000000000000131313131313131313131313131313121212121212121212 1212121111111111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0A0A0A080808000000000000000000000000000000000000000000141414CACACA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909090909091616161616161D1D1D2020202626262828282828282A2A2A2D2D2D 2D2D2D2F2F2F3131312F2F2F2F2F2F2D2D2D2D2D2D2A2A2A2626262424242020201D1D1D161616 101010090909090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF313131000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C1010101313131616161A1A1A1D1D1D2020202222222525252828282929292B2B2B2C2C2C 2E2E2E303030313131323232333333343434343434353535343434343434353535353535343434 3333333232323131313131313030302E2E2E2C2C2C2A2A2A2929292727272323232121211F1F1F 1D1D1D1A1A1A1616161212120F0F0F0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 050505050505050505050505020202000000000000000000000000000000000000000000000000 000000030303AFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE2F2F2F000000000000000000000000000000000000 000000010101111111131313131313131313131313131313131313141414141414141414141414 141414141414151515151515151515151515151515151515161616161616161616161616161616 161616171717171717171717171717171717171717181818181818181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121222222222222 222222222222222222232323232323232323232323242424242424242424242424242424252525 252525252525252525262626262626262626262626262626272727272727272727272727272727 2828282828282828282828282828282929292929292929292929292929292A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D 2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F303030303030303030303030303030 313131313131313131313131323232323232323232323232323232333333333333333333333333 333333343434343434343434343434343434353535353535353535353535353535353535353535 363636363636363636363636363636363636363636363636363636373737373737373737373737 373737373737373737373737373737373737373737373737373737373737373737373737373737 373737373737373737373737373737363636363636363636363636363636363636363636353535 070505050101050101050101050101050101050101020000919191FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000 000000000000000000000000000000151515343434343434343434343434343434343434343434 343434333333333333333333333333333333333333333333333333333333323232323232323232 323232323232323232323232313131313131313131313131313131313131303030303030303030 3030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828282828 2828282727272727272727272727272626262A2A2A2A2A2A2C2C2C2E2E2E303030313131323232 3333333434343737373838383838383838383838383939393939393A3A3A3939393A3A3A393939 3939393838383737373737373838383737373535353333333131313030301F1F1F030303000000 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606 000000000000000000000000000000000000000000131313131313131313131313121212121212 1212121212121111111111111111111111111010101010101010101010101010100F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A080808000000000000000000000000000000000000000000 141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909090909091616161919191D1D1D202020262626282828282828 2A2A2A2D2D2D2D2D2D2F2F2F3131312F2F2F2F2F2F2D2D2D2D2D2D2A2A2A262626242424202020 1D1D1D161616101010090909090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF959595000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090E0E0E1111111414141818181C1C1C1E1E1E212121242424272727292929 2929292C2C2C2E2E2E303030313131323232323232343434343434353535353535353535353535 3535353535353434343333333232323333333131312F2F2F2E2E2E2C2C2C2A2A2A292929252525 2323232121211E1E1E1C1C1C1919191515151111110D0D0D0A0A0A020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 040404040404040404050505050505050505050505010101000000000000000000000000000000 000000000000000000000000090909C6C6C6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEAEAE000000000000000000000000 000000000000000000000000090909121212131313131313131313131313131313131313141414 141414141414141414141414141414151515151515151515151515151515151515161616161616 161616161616161616161616171717171717171717171717171717171717171717181818181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020212121212121 212121212121222222222222222222222222232323232323232323232323232323242424242424 242424242424242424252525252525252525252525262626262626262626262626262626272727 272727272727272727272727282828282828282828282828282828292929292929292929292929 2929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F303030303030303030303030313131313131313131313131313131323232323232323232 323232323232333333333333333333333333333333343434343434343434343434343434343434 343434353535353535353535353535353535353535353535353535353535363636363636363636 363636363636363636363636363636363636363636363636363636363636363636363636363636 363636363636363636363636363636353535353535353535353535353535353535353535343434 343434343434070505050101050101050101050101050101050101020000929292FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000 000000000000000000000000000000000000000000151515343434343434343434343434333333 333333333333333333333333333333333333333333333333323232323232323232323232323232 323232323232323232313131313131313131313131313131313131313131303030303030303030 3030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828282828 2828282727272727272727272727272626262626262626262626262929292B2B2B2E2E2E303030 303030313131333333333333353535373737383838383838383838393939393939393939393939 3A3A3A393939383838373737373737373737373737363636353535333333313131303030202020 0303030000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A5A5A5060606000000000000000000000000000000000000000000121212131313131313131313 1212121212121212121111111111111111111111111010101010101010101010101010100F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A080808000000000000000000000000000000 000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 878787000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000909091010101616161919191D1D1D202020262626 2828282A2A2A2A2A2A2D2D2D2D2D2D2F2F2F3131312F2F2F2F2F2F2D2D2D2A2A2A282828262626 2020202020201D1D1D161616101010090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F10C0C0C000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090C0C0C1010101313131616161A1A1A1C1C1C202020222222 2626262828282929292B2B2B2D2D2D2F2F2F303030313131323232333333343434353535353535 3535353535353535353535353535353434343333333232323232323131312F2F2F2E2E2E2C2C2C 2A2A2A2828282525252222221F1F1F1D1D1D1A1A1A1616161212120F0F0F0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404050505050505050505050505010101000000000000 000000000000000000000000000000000000000000151515D6D6D6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE333333000000 000000000000000000000000000000000000010101111111121212131313131313131313131313 131313131313141414141414141414141414141414141414151515151515151515151515151515 151515161616161616161616161616161616161616161616171717171717171717171717171717 1717171818181818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 202020212121212121212121212121212121222222222222222222222222232323232323232323 232323232323242424242424242424242424252525252525252525252525252525262626262626 262626262626262626272727272727272727272727272727282828282828282828282828282828 2929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030303030303030313131313131 313131313131313131323232323232323232323232323232323232333333333333333333333333 333333333333343434343434343434343434343434343434343434343434343434343434353535 353535353535353535353535353535353535353535353535353535353535353535353535353535 353535353535353535353535353535343434343434343434343434343434343434343434343434 333333333333333333333333060404050101050101050101050101050101050101020000919191 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6 131313000000000000000000000000000000000000000000000000151515333333333333333333 333333333333333333333333333333333333323232323232323232323232323232323232323232 323232323232313131313131313131313131313131313131313131303030303030303030303030 3030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929282828282828 282828282828272727272727272727272727262626262626262626262626252525252525292929 2B2B2B2D2D2D2F2F2F303030313131333333333333363636373737383838383838383838383838 3939393939393A3A3A383838383838373737373737373737373737373737353535343434323232 3030302020200303030000000000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA5A5A5060606000000000000000000000000000000000000000000121212131313 131313121212121212121212111111111111111111111111101010101010101010101010101010 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A080808000000000000000000 000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF878787000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000909091010101616161919191D1D1D 2424242626262828282A2A2A2A2A2A2D2D2D2D2D2D2F2F2F3131312F2F2F2F2F2F2D2D2D2A2A2A 2828282626262020201D1D1D191919161616101010090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000181818E4E4E4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF656565000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090E0E0E1111111515151818181C1C1C 1E1E1E2222222424242727272929292B2B2B2D2D2D2E2E2E2F2F2F303030323232333333343434 353535353535353535353535353535353535353535353535343434333333323232323232303030 2F2F2F2E2E2E2C2C2C2A2A2A2727272424242222221E1E1E1C1C1C1919191515151111110F0F0F 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404040404040404040404050505050505050505040404 000000000000000000000000000000000000000000000000000000000000171717D8D8D8FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF B4B4B4000000000000000000000000000000000000000000000000090909121212121212131313 131313131313131313131313131313141414141414141414141414141414141414151515151515 151515151515151515151515151515161616161616161616161616161616161616171717171717 171717171717171717171717181818181818181818181818181818191919191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F 202020202020202020202020202020212121212121212121212121222222222222222222222222 222222232323232323232323232323242424242424242424242424242424252525252525252525 252525252525262626262626262626262626262626272727272727272727272727272727282828 2828282828282828282828282929292929292929292929292929292929292A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D 2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303030 303030303030303030303030313131313131313131313131313131313131323232323232323232 323232323232323232323232333333333333333333333333333333333333333333333333333333 333333343434343434343434343434343434343434343434343434343434343434343434343434 343434343434343434343434343434333333333333333333333333333333333333333333333333 323232323232323232323232323232313131060404050101050101050101050101050101050101 020000929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD6D6D6131313000000000000000000000000000000000000000000000000151515333333 333333333333333333333333323232323232323232323232323232323232323232323232323232 313131313131313131313131313131313131313131313131303030303030303030303030303030 3030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828 282828282828272727272727272727272727262626262626262626262626252525252525252525 2525252929292828282A2A2A2D2D2D2F2F2F303030303030333333343434363636373737383838 383838383838393939393939393939383838383838383838373737373737373737373737353535 333333323232303030202020030303000000000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000000000000000000000 121212131313121212121212121212121212111111111111111111101010101010101010101010 1010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A080808000000 000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909101010161616 1919191D1D1D2424242626262A2A2A2A2A2A2D2D2D2D2D2D2D2D2D2F2F2F3131312F2F2F2F2F2F 2D2D2D2A2A2A2828282424242020201D1D1D191919161616101010090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C101010141414 1616161B1B1B1D1D1D2121212424242626262828282A2A2A2D2D2D2E2E2E2F2F2F303030323232 333333343434353535353535353535353535353535363636363636353535343434343434333333 3333333131313030302F2F2F2E2E2E2B2B2B2929292626262323232121211E1E1E1C1C1C191919 1414141111110D0D0D0A0A0A020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303040404 040404040404040404040404040404040404040404040404040404040404040404050505050505 050505050505040404000000000000000000000000000000000000000000000000000000000000 1D1D1DDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF383838000000000000000000000000000000000000000000010101111111 121212121212131313131313131313131313131313131313141414141414141414141414141414 141414151515151515151515151515151515151515151515161616161616161616161616161616 161616171717171717171717171717171717171717171717181818181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121212121212121212121212121 222222222222222222222222222222232323232323232323232323242424242424242424242424 242424252525252525252525252525252525262626262626262626262626262626272727272727 272727272727272727282828282828282828282828282828282828292929292929292929292929 2929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030303030303030303030313131313131 313131313131313131313131313131323232323232323232323232323232323232323232323232 323232323232323232333333333333333333333333333333333333333333333333333333333333 333333333333333333333333333333323232323232323232323232323232323232323232323232 323232313131313131313131313131313131303030303030060404050101050101050101050101 050101050101020000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000000000 141414323232323232323232323232323232323232323232323232323232323232313131313131 313131313131313131313131313131313131303030303030303030303030303030303030303030 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828 282828282828272727272727272727272727272727262626262626262626262626252525252525 2525252525252424242424242828282828282A2A2A2C2C2C2E2E2E303030333333343434353535 363636373737383838383838383838383838393939383838383838373737373737373737373737 3737373535353333333232323030301F1F1F030303000000000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000000000 000000000000121212121212121212121212121212111111111111111111111111101010101010 1010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 080808000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 1010101616161919191D1D1D2424242828282A2A2A2A2A2A2D2D2D2D2D2D2D2D2D2F2F2F313131 2F2F2F2F2F2F2D2D2D2A2A2A2828282424242020201D1D1D191919161616101010090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF373737000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010101010606060C0C0C 0E0E0E1313131515151A1A1A1C1C1C2020202323232525252727272929292C2C2C2E2E2E2F2F2F 303030323232333333343434353535353535353535353535363636363636363636353535353535 3434343333333232323232323131313030302E2E2E2C2C2C2A2A2A282828252525232323202020 1D1D1D1B1B1B1616161212120F0F0F0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303030303040404040404040404040404040404040404040404040404040404040404040404 040404050505050505050505050505030303000000000000000000000000000000000000000000 000000000000000000252525E6E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBABABA000000000000000000000000000000000000000000 000000080808121212121212121212131313131313131313131313131313131313141414141414 141414141414141414141414141414151515151515151515151515151515151515161616161616 161616161616161616161616171717171717171717171717171717171717171717181818181818 1818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020212121 212121212121212121212121222222222222222222222222232323232323232323232323232323 242424242424242424242424242424252525252525252525252525252525262626262626262626 262626262626272727272727272727272727272727272727282828282828282828282828282828 2929292929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303030 303030303030303030303030303030303030313131313131313131313131313131313131313131 313131313131313131313131313131323232323232323232323232323232323232323232323232 323232323232323232323232323232313131313131313131313131313131313131313131313131 3131313030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F060404050101050101 050101050101050101050101020000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000 000000000000141414323232323232323232323232323232313131313131313131313131313131 3131313131313131313131313131313030303030303030303030303030303030303030302F2F2F 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828 282828282828282828272727272727272727272727262626262626262626262626252525252525 2525252525252525252424242424242424242424242828282929292C2C2C2E2E2E303030323232 333333353535363636373737383838373737383838383838393939383838373737373737373737 3737373636363636363535353333333232322F2F2F1F1F1F030303000000000000000000000000 0000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000 000000000000000000000000111111121212121212121212111111111111111111111111101010 1010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A080808000000000000000000000000000000000000000000141414CACACAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909091010101616161919191D1D1D2424242626262828282A2A2A2A2A2A2D2D2D2D2D2D 2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2A2A2A2828282424242020201D1D1D191919101010090909 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA6A6A6000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060C0C0C1111111414141616161B1B1B1D1D1D212121232323252525272727292929 2D2D2D2E2E2E303030323232323232343434343434353535353535363636363636373737373737 3636363636363535353434343333333232323333333131312F2F2F2C2C2C2B2B2B292929272727 2424242222221E1E1E1C1C1C1717171414141111110D0D0D0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404050505050505050505050505020202000000000000000000000000 0000000000000000000000000000000000002B2B2BEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D3D3D000000000000000000000000 000000000000000000010101101010121212121212121212131313131313131313131313131313 131313131313141414141414141414141414141414141414151515151515151515151515151515 151515161616161616161616161616161616161616161616171717171717171717171717171717 1717171818181818181818181818181818181818181919191919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020202020202020212121212121212121212121212121222222222222222222222222232323 232323232323232323232323242424242424242424242424242424252525252525252525252525 252525262626262626262626262626262626262626272727272727272727272727272727282828 2828282828282828282828282828282929292929292929292929292929292929292A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030303030303030 303030303030303030303030303030303030303030313131313131313131313131313131313131 313131313131313131313131303030303030303030303030303030303030303030303030303030 3030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D060404 050101050101050101050101050101050101020000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000 000000000000000000000000141414313131313131313131313131313131313131313131313131 3131313131313131313030303030303030303030303030303030303030303030302F2F2F2F2F2F 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828 282828282828282828272727272727272727272727262626262626262626262626252525252525 2525252525252525252424242424242424242424242424242323232323232727272929292E2E2E 2F2F2F2F2F2F323232333333353535373737373737373737373737383838383838383838383838 383838383838373737363636363636353535343434323232303030202020030303000000000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000 000000000000000000000000000000000000111111121212121212111111111111111111111111 1010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A070707000000000000000000000000000000000000000000141414 CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909090909091616161919191D1D1D2424242626262828282828282A2A2A 2D2D2D2D2D2D2F2F2F2D2D2D2D2D2D2D2D2D2A2A2A2828282828282424242020201D1D1D191919 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB1D1D1D000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060C0C0C1010101313131616161A1A1A1C1C1C202020222222242424 2727272929292C2C2C2E2E2E303030313131323232343434343434353535353535363636363636 3737373737373737373636363535353434343333333333333333333131312F2F2F2D2D2D2C2C2C 2A2A2A2828282525252323232121211D1D1D1A1A1A1616161414141111110D0D0D070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404040404050505050505050505050505020202000000 000000000000000000000000000000000000000000000000000000282828E4E4E4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3C3C3000000000000 000000000000000000000000000000000000070707121212121212121212121212121212131313 131313131313131313131313131313141414141414141414141414141414141414151515151515 151515151515151515151515151515161616161616161616161616161616161616171717171717 171717171717171717171717171717181818181818181818181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F202020202020202020202020202020212121212121212121212121222222222222 222222222222222222232323232323232323232323232323242424242424242424242424242424 252525252525252525252525252525252525262626262626262626262626262626272727272727 272727272727272727272727282828282828282828282828282828282828292929292929292929 2929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030 3030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C 2C2C2C060404050101050101050101050101050101050101020000949494FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000 000000000000000000000000000000000000141414313131313131313131313131313131313131 3030303030303030303030303030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828 282828282828282828272727272727272727272727262626262626262626262626262626252525 252525252525252525242424242424242424242424242424242424232323232323232323272727 2929292B2B2B2E2E2E2F2F2F313131323232323232353535373737383838373737373737383838 383838383838383838373737373737363636363636353535333333323232303030202020030303 0000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5 060606000000000000000000000000000000000000000000111111121212111111111111111111 1111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909070707000000000000000000000000000000000000 000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909090909091616161919191D1D1D242424262626282828 2828282A2A2A2D2D2D2D2D2D2F2F2F2D2D2D2D2D2D2D2D2D2A2A2A2828282626262424241D1D1D 191919161616101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF868686000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1111111515151818181C1C1C1F1F1F 2222222424242626262828282B2B2B2D2D2D2F2F2F303030323232333333343434343434353535 363636373737373737373737373737373737363636353535343434333333323232323232303030 2E2E2E2D2D2D2C2C2C2A2A2A2828282525252323232020201D1D1D1919191616161212120F0F0F 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404040404050505050505050505 050505010101000000000000000000000000000000000000000000000000000000000000202020 DCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 4242420000000000000000000000000000000000000000000000000F0F0F121212121212121212 121212121212131313131313131313131313131313131313141414141414141414141414141414 141414151515151515151515151515151515151515151515161616161616161616161616161616 161616171717171717171717171717171717171717171717181818181818181818181818181818 1919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020212121212121 212121212121222222222222222222222222222222232323232323232323232323232323242424 242424242424242424242424242424252525252525252525252525252525262626262626262626 262626262626262626272727272727272727272727272727282828282828282828282828282828 2828282828282929292929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B 2B2B2B2B2B2B2B2B2B060404050101050101050101050101050101050101020000949494FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313 000000000000000000000000000000000000000000000000141414313131303030303030303030 3030303030303030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929282828282828 282828282828282828272727272727272727272727272727262626262626262626262626252525 252525252525252525252525242424242424242424242424242424232323232323232323232323 2323232727272929292B2B2B2D2D2D2E2E2E2F2F2F313131323232343434363636373737373737 373737373737383838383838373737373737373737363636353535343434333333323232303030 1F1F1F0303030000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFA5A5A5060606000000000000000000000000000000000000000000111111111111111111 1111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909070707000000000000000000000000 000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF878787000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909091010101919191919191D1D1D242424 2626262828282A2A2A2A2A2A2D2D2D2D2D2D2F2F2F2D2D2D2D2D2D2D2D2D2A2A2A282828262626 2424241D1D1D191919161616101010090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000181818E4E4E4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC0A0A0A000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010909090C0C0C101010131313161616 1A1A1A1D1D1D2020202222222525252727272B2B2B2D2D2D2E2E2E303030323232333333343434 343434353535363636373737373737373737373737373737373737353535353535343434333333 3232323131313030302F2F2F2D2D2D2B2B2B2929292727272424242222221D1D1D1B1B1B171717 1515151111110D0D0D070707070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404040404 050505050505050505050505010101000000000000000000000000000000000000000000000000 0000000000001D1D1DD9D9D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFC5C5C5000000000000000000000000000000000000000000000000050505121212 121212121212121212121212121212131313131313131313131313131313131313141414141414 141414141414141414141414141414151515151515151515151515151515151515161616161616 161616161616161616161616161616171717171717171717171717171717171717181818181818 1818181818181818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 202020212121212121212121212121212121222222222222222222222222222222232323232323 232323232323232323232323242424242424242424242424242424252525252525252525252525 252525262626262626262626262626262626262626272727272727272727272727272727272727 282828282828282828282828282828282828282828292929292929292929292929292929292929 2929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A060404050101050101050101050101050101050101020000 949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D6D6D6131313000000000000000000000000000000000000000000000000141414303030303030 3030303030303030303030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F 2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929282828282828 282828282828282828272727272727272727272727272727262626262626262626262626252525 252525252525252525252525242424242424242424242424242424242424232323232323232323 2323232323232222222222222626262929292D2D2D2E2E2E2E2E2E303030323232343434343434 353535373737373737373737373737373737373737373737373737353535353535343434333333 3232322F2F2F1F1F1F0303030000000000000000000000000000000000000000000000000B0B0B FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000000000000000000000101010 1111111111111111111010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909070707000000000000 000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909090909101010191919191919 2020202424242626262828282A2A2A2A2A2A2D2D2D2D2D2D2F2F2F2D2D2D2D2D2D2D2D2D2A2A2A 2828282626262020201D1D1D191919161616101010090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000181818 E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 676767000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090E0E0E 1111111414141818181C1C1C1F1F1F2121212424242626262929292B2B2B2D2D2D2F2F2F313131 323232343434343434353535363636373737373737383838383838383838373737363636353535 3535353535353333333232323131313030302E2E2E2C2C2C2A2A2A2727272525252323231F1F1F 1D1D1D1A1A1A1616161212120F0F0F0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505050505050505010101000000000000000000000000000000 000000000000000000000000000000171717D1D1D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4F000000000000000000000000000000000000000000 0000000D0D0D121212121212121212121212121212121212131313131313131313131313131313 131313131313141414141414141414141414141414141414151515151515151515151515151515 151515151515161616161616161616161616161616161616171717171717171717171717171717 1717171717171818181818181818181818181818181919191919191919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F202020202020202020202020212121212121212121212121212121222222222222222222 222222222222222222232323232323232323232323232323242424242424242424242424242424 252525252525252525252525252525252525262626262626262626262626262626262626272727 272727272727272727272727272727282828282828282828282828282828282828282828292929 2929292929292929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A292929292929292929292929060404050101050101050101050101050101 050101020000959595FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000000000141414 3030303030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929282828282828 282828282828282828272727272727272727272727272727262626262626262626262626252525 252525252525252525252525242424242424242424242424242424242424232323232323232323 2323232323232323232222222222222222222626262929292A2A2A2C2C2C2E2E2E303030313131 313131333333353535363636373737373737373737373737373737373737363636353535353535 3434343232323131312F2F2F1F1F1F030303000000000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000000000000000 0000001010101111111111111010101010101010101010101010101010100F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909070707 000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909101010 1919191D1D1D2020202424242828282A2A2A2A2A2A2A2A2A2D2D2D2D2D2D2F2F2F2D2D2D2D2D2D 2D2D2D2A2A2A2828282626262020201D1D1D191919161616101010090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD5D5D5010101000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C1010101313131616161A1A1A1D1D1D2020202222222626262929292B2B2B2C2C2C 2E2E2E313131323232333333343434353535353535373737373737383838383838383838383838 3737373636363636363636363535353333333333333232322F2F2F2D2D2D2B2B2B292929272727 2525252222221E1E1E1B1B1B1919191515151111110D0D0D0A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303030303040404040404040404040404040404040404040404 040404040404040404040404040404050505050505050505050505050505010101000000000000 000000000000000000000000000000000000000000000000121212C4C4C4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6040404000000000000000000000000 000000000000000000040404111111121212121212121212121212121212121212131313131313 131313131313131313131313131313141414141414141414141414141414141414151515151515 151515151515151515151515151515161616161616161616161616161616161616161616171717 171717171717171717171717171717181818181818181818181818181818181818191919191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020212121212121212121212121 212121212121222222222222222222222222222222232323232323232323232323232323242424 242424242424242424242424242424252525252525252525252525252525252525262626262626 262626262626262626262626272727272727272727272727272727272727272727282828282828 282828282828282828282828282828292929292929292929292929292929292929292929292929 2929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 292929292929292929292929292929292929282828282828282828050303050101050101050101 050101050101050101020000959595FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000 0000001313132F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929282828282828 282828282828282828272727272727272727272727272727262626262626262626262626252525 252525252525252525252525252525242424242424242424242424242424232323232323232323 2323232323232323232222222222222222222222222222222121212525252828282A2A2A2E2E2E 2D2D2D303030313131313131333333353535363636363636373737373737363636373737363636 3535353535353333333232323131312F2F2F1F1F1F020202000000000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000 0000000000000000001010101111111010101010101010101010101010101010100F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909 090909070707000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 1010101010101919191D1D1D2020202626262828282A2A2A2A2A2A2D2D2D2D2D2D2D2D2D2F2F2F 2D2D2D2D2D2D2D2D2D2A2A2A2828282626262020201D1D1D191919161616101010090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF474747000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060C0C0C0E0E0E1111111515151A1A1A1C1C1C1F1F1F222222242424282828 2929292C2C2C2E2E2E303030323232333333343434353535353535373737383838383838383838 3939393838383737373737373737373636363535353434343232323333333131312F2F2F2D2D2D 2B2B2B2929292727272323232121211D1D1D1B1B1B1717171414141111110D0D0D0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404040404050505050505050505050505050505 010101000000000000000000000000000000000000000000000000000000000000070707A8A8A8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF666666000000000000 0000000000000000000000000000000000000B0B0B111111121212121212121212121212121212 121212121212131313131313131313131313131313131313141414141414141414141414141414 141414141414151515151515151515151515151515151515161616161616161616161616161616 161616161616171717171717171717171717171717171717171717181818181818181818181818 1818181818181919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020 202020212121212121212121212121212121222222222222222222222222222222232323232323 232323232323232323232323242424242424242424242424242424242424252525252525252525 252525252525252525262626262626262626262626262626262626262626272727272727272727 272727272727272727272727282828282828282828282828282828282828282828282828292929 2929292929292929292929292929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929 292929292929292929282828282828282828282828282828272727272727272727050303050101 050101050101050101050101050101020000969696FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000 0000000000000000001313132F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929292929282828282828 282828282828282828272727272727272727272727272727262626262626262626262626262626 252525252525252525252525252525242424242424242424242424242424242424232323232323 232323232323232323222222222222222222222222222222222222212121212121252525282828 2A2A2A2B2B2B2D2D2D2F2F2F313131313131323232343434363636363636373737363636363636 3737373636363535353434343333333232323131312F2F2F1F1F1F020202000000000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000 0000000000000000000000000000001010101010101010101010101010101010101010100F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909070707000000000000000000000000000000000000000000141414CACACA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909091010101616161919191D1D1D2020202626262828282A2A2A2D2D2D2D2D2D2D2D2D 2D2D2D2F2F2F2D2D2D2D2D2D2D2D2D2A2A2A2828282424242020201D1D1D191919161616101010 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7B7B7000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090E0E0E1010101414141919191C1C1C1E1E1E212121 2424242727272929292B2B2B2E2E2E303030313131323232333333353535353535373737383838 383838393939393939393939383838373737373737373737363636353535333333323232333333 3131312F2F2F2D2D2D2C2C2C2929292626262323232020201D1D1D1A1A1A161616141414111111 0D0D0D070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404040404050505050505 050505050505050505010101000000000000000000000000000000000000000000000000000000 000000020202929292FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5 0B0B0B000000000000000000000000000000000000000000030303111111111111111111121212 121212121212121212121212121212131313131313131313131313131313131313131313141414 141414141414141414141414141414151515151515151515151515151515151515151515161616 161616161616161616161616161616161616171717171717171717171717171717171717171717 1818181818181818181818181818181919191919191919191919191919191A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 202020202020202020202020202020212121212121212121212121212121222222222222222222 222222222222222222232323232323232323232323232323232323242424242424242424242424 242424242424252525252525252525252525252525252525262626262626262626262626262626 262626262626272727272727272727272727272727272727272727272727282828282828282828 282828282828282828282828282828282828282828292929292929292929292929292929292929 2929292929292929292929292929292929292929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A292929292929292929292929292929292929292929292929292929292929282828 282828282828282828282828282828282828272727272727272727272727262626262626262626 050303050101050101050101050101050101050101020000969696FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000 0000000000000000000000000000001313132E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929282828282828282828 282828282828282828272727272727272727272727272727262626262626262626262626262626 252525252525252525252525252525242424242424242424242424242424242424232323232323 232323232323232323232323222222222222222222222222222222212121212121212121212121 2525252828282929292B2B2B2D2D2D2F2F2F303030303030323232333333353535363636353535 3636363636363737373636363434343434343333333232323030302E2E2E1F1F1F020202000000 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606 000000000000000000000000000000000000000000101010101010101010101010101010101010 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 090909090909090909090909090909070707000000000000000000000000000000000000000000 141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909091010101616161919191D1D1D2020202626262828282A2A2A2A2A2A 2D2D2D2D2D2D2D2D2D2F2F2F2D2D2D2D2D2D2A2A2A2828282828282626262020201D1D1D191919 161616090909090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE303030000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060C0C0C1010101313131616161A1A1A 1C1C1C1F1F1F2222222424242727272B2B2B2D2D2D2E2E2E2F2F2F313131323232343434353535 363636373737383838383838393939393939393939393939393939383838373737363636353535 3434343333333333333131312F2F2F2E2E2E2C2C2C2828282626262222221F1F1F1C1C1C191919 1616161212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 040404050505050505050505050505050505010101000000000000000000000000000000000000 0000000000000000000000000000006E6E6EFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7C7C7C0000000000000000000000000000000000000000000000000A0A0A111111 111111111111121212121212121212121212121212121212131313131313131313131313131313 131313131313141414141414141414141414141414141414141414151515151515151515151515 151515151515161616161616161616161616161616161616161616171717171717171717171717 171717171717171717181818181818181818181818181818181818191919191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020212121212121212121212121 212121212121222222222222222222222222222222232323232323232323232323232323232323 242424242424242424242424242424242424242424252525252525252525252525252525252525 252525262626262626262626262626262626262626262626272727272727272727272727272727 272727272727272727272727282828282828282828282828282828282828282828282828282828 282828282828282828292929292929292929292929292929292929292929292929292929292929 292929292929292929292929292929292929292929292929292929292929292929292929292929 292929292929292929292929292929292929292929282828282828282828282828282828282828 282828282828272727272727272727272727272727272727262626262626262626262626252525 252525252525050303050101050101050101050101050101050101020000979797FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000 0000000000000000000000000000000000000000001313132E2E2E2E2E2E2E2E2E2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929292929282828282828282828 282828282828272727272727272727272727272727272727262626262626262626262626262626 252525252525252525252525252525242424242424242424242424242424242424232323232323 232323232323232323232323222222222222222222222222222222222222212121212121212121 2121212121212020202424242727272929292D2D2D2C2C2C2E2E2E2F2F2F313131323232333333 3535353535353535353636363535353535353434343434343333333131313131312E2E2E1F1F1F 0202020000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A5A5A50606060000000000000000000000000000000000000000000F0F0F101010101010101010 1010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A090909090909090909090909090909090909070707000000000000000000000000000000 000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 878787000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909091010101616161D1D1D1D1D1D202020262626282828 2A2A2A2A2A2A2D2D2D2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D2A2A2A282828282828262626202020 1D1D1D191919101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4A4A4 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090E0E0E111111 1515151919191C1C1C1E1E1E2121212424242727272929292C2C2C2E2E2E2F2F2F303030323232 343434353535363636373737383838383838393939393939393939393939393939383838383838 3737373535353535353333333333333131312F2F2F2E2E2E2C2C2C2A2A2A272727232323212121 1E1E1E1B1B1B1919191515151111110D0D0D070707070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 040404040404040404040404050505050505050505050505050505020202000000000000000000 000000000000000000000000000000000000000000000000535353F7F7F7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF3F3F3171717000000000000000000000000000000000000000000 010101101010111111111111111111121212121212121212121212121212121212121212131313 131313131313131313131313131313141414141414141414141414141414141414141414151515 151515151515151515151515151515151515161616161616161616161616161616161616161616 171717171717171717171717171717171717171717181818181818181818181818181818181818 1919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020 202020212121212121212121212121212121222222222222222222222222222222222222232323 232323232323232323232323232323232323242424242424242424242424242424242424252525 252525252525252525252525252525252525252525262626262626262626262626262626262626 262626262626272727272727272727272727272727272727272727272727272727272727272727 282828282828282828282828282828282828282828282828282828282828282828282828282828 282828282828282828282828282828282828282828282828282828282828282828282828282828 282828282828282828282828282828282828282828282828282828282828282828272727272727 272727272727272727272727272727262626262626262626262626262626252525252525252525 252525242424242424242424050303050101050101050101050101050101050101020000979797 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6 1313130000000000000000000000000000000000000000000000001212122D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A292929292929292929292929292929292929282828282828282828282828 282828282828272727272727272727272727272727262626262626262626262626262626252525 252525252525252525252525252525242424242424242424242424242424242424232323232323 232323232323232323232323222222222222222222222222222222222222212121212121212121 2121212121212020202020202020202424242727272929292A2A2A2C2C2C2E2E2E2F2F2F303030 323232333333343434353535353535343434353535353535343434343434323232313131313131 2E2E2E1E1E1E0202020000000000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA5A5A50606060000000000000000000000000000000000000000000F0F0F101010 1010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A090909090909090909090909090909090909090909070707000000000000000000 000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF878787000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909091010101616161D1D1D1D1D1D202020 2626262828282A2A2A2A2A2A2D2D2D2D2D2D2F2F2F2F2F2F2D2D2D2D2D2D2A2A2A282828262626 242424202020191919191919101010090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000181818E4E4E4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFC232323000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101090909 0C0C0C1010101414141818181A1A1A1C1C1C2020202222222626262929292B2B2B2D2D2D2E2E2E 303030323232333333353535353535373737383838383838393939393939393939393939393939 3939393838383737373636363535353434343232323232323131312F2F2F2E2E2E2B2B2B282828 2525252323232121211D1D1D1B1B1B1717171414141111110A0A0A070707070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404040404050505050505050505050505050505020202 000000000000000000000000000000000000000000000000000000000000000000414141EFEFEF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF929292000000000000000000000000000000 000000000000000000080808111111111111111111111111111111121212121212121212121212 121212121212131313131313131313131313131313131313131313141414141414141414141414 141414141414141414151515151515151515151515151515151515161616161616161616161616 161616161616161616171717171717171717171717171717171717171717181818181818181818 1818181818181818181919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 202020202020202020202020202020212121212121212121212121212121212121222222222222 222222222222222222222222232323232323232323232323232323232323232323242424242424 242424242424242424242424242424252525252525252525252525252525252525252525252525 262626262626262626262626262626262626262626262626262626262626272727272727272727 272727272727272727272727272727272727272727272727272727272727272727272727272727 282828282828282828282828282828282828282828282828282828282828282828282828282828 282828282828272727272727272727272727272727272727272727272727272727272727272727 272727262626262626262626262626262626262626262626252525252525252525252525252525 242424242424242424232323232323232323050303050101050101050101050101050101050101 020000979797FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD6D6D61313130000000000000000000000000000000000000000000000001212122D2D2D 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A292929292929292929292929292929292929292929282828282828282828282828 282828282828272727272727272727272727272727262626262626262626262626262626252525 252525252525252525252525252525242424242424242424242424242424242424232323232323 232323232323232323232323232323222222222222222222222222222222212121212121212121 2121212121212121212020202020202020202020202020202323232828282A2A2A2C2C2C2C2C2C 2E2E2E2F2F2F323232333333343434343434343434343434343434343434333333333333323232 3131313131312D2D2D1E1E1E020202000000000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000000000000000000000 0F0F0F1010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909080808070707000000 000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000909091010101616161D1D1D 1D1D1D2020202626262828282A2A2A2A2A2A2A2A2A2D2D2D2D2D2D2D2D2D2D2D2D2A2A2A2A2A2A 282828262626242424202020191919161616101010090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF959595000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090E0E0E1111111515151818181C1C1C1E1E1E212121242424272727292929 2C2C2C2D2D2D2F2F2F313131323232343434353535373737383838383838393939393939393939 3939393939393939393939393838383737373636363535353434343232323232323131312F2F2F 2D2D2D2A2A2A2727272525252222221F1F1F1D1D1D1A1A1A1616161212120F0F0F0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404050505050505050505050505 050505050505020202000000000000000000000000000000000000000000000000000000000000 0000002D2D2DE3E3E3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9232323000000000000 0000000000000000000000000000000101010F0F0F111111111111111111111111111111121212 121212121212121212121212121212121212131313131313131313131313131313131313141414 141414141414141414141414141414141414151515151515151515151515151515151515151515 161616161616161616161616161616161616161616171717171717171717171717171717171717 1717171818181818181818181818181818181818181919191919191919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020202020212121212121212121 212121212121212121222222222222222222222222222222222222222222232323232323232323 232323232323232323232323242424242424242424242424242424242424242424252525252525 252525252525252525252525252525252525252525252525262626262626262626262626262626 262626262626262626262626262626262626262626272727272727272727272727272727272727 272727272727272727272727272727272727272727272727272727272727272727272727272727 272727272727272727272727272727272727272727272727262626262626262626262626262626 262626262626262626262626252525252525252525252525252525252525242424242424242424 242424242424232323232323232323222222222222222222050303050101050101050101050101 050101050101020000979797FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000000000 1212122C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A292929292929292929292929292929292929292929282828282828282828282828282828 282828272727272727272727272727272727272727262626262626262626262626262626252525 252525252525252525252525252525242424242424242424242424242424242424242424232323 232323232323232323232323232323222222222222222222222222222222222222212121212121 2121212121212121212020202020202020202020202020202020201F1F1F232323262626282828 2A2A2A2C2C2C2D2D2D2E2E2E303030323232323232343434343434343434343434333333333333 3333333232323131312F2F2F2D2D2D1E1E1E020202000000000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000000000 0000000000000F0F0F1010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909080808080808 070707000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1616161D1D1D1D1D1D2020202626262828282A2A2A2A2A2A2A2A2A2D2D2D2D2D2D2D2D2D2D2D2D 2A2A2A2828282828282626262020201D1D1D191919161616101010090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7191919000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060C0C0C1010101313131616161A1A1A1C1C1C202020222222 2626262929292A2A2A2C2C2C2E2E2E303030323232333333353535363636373737383838393939 3939393939393939393A3A3A3A3A3A393939393939383838373737363636353535333333323232 3333333131312F2F2F2C2C2C2828282525252323232121211E1E1E1C1C1C191919151515121212 0F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404050505 050505050505050505050505050505030303000000000000000000000000000000000000000000 000000000000000000000000191919CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8A8A8 000000000000000000000000000000000000000000000000060606111111111111111111111111 111111111111121212121212121212121212121212121212121212131313131313131313131313 131313131313131313141414141414141414141414141414141414141414151515151515151515 151515151515151515151515161616161616161616161616161616161616161616171717171717 171717171717171717171717171717181818181818181818181818181818181818191919191919 1919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020 202020202020212121212121212121212121212121212121222222222222222222222222222222 222222222222232323232323232323232323232323232323232323232323242424242424242424 242424242424242424242424242424252525252525252525252525252525252525252525252525 252525252525252525262626262626262626262626262626262626262626262626262626262626 262626262626262626262626262626262626262626262626262626262626262626262626262626 262626262626262626262626262626262626262626262626262626262626262626262626252525 252525252525252525252525252525252525252525242424242424242424242424242424242424 232323232323232323232323222222222222222222212121212121212121050303050101050101 050101050101050101050101020000989898FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000 0000000000001212122C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 292929292929292929292929292929292929292929282828282828282828282828282828282828 272727272727272727272727272727272727262626262626262626262626262626262626252525 252525252525252525252525252525242424242424242424242424242424242424242424232323 232323232323232323232323232323222222222222222222222222222222222222212121212121 2121212121212121212121212020202020202020202020202020201F1F1F1F1F1F1F1F1F232323 2626262727272929292B2B2B2D2D2D2E2E2E303030313131323232333333333333343434333333 3333333333333333333131313030302F2F2F2D2D2D1E1E1E020202000000000000000000000000 0000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000 0000000000000000000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909080808 080808080808070707000000000000000000000000000000000000000000141414CACACAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 0909091010101616161D1D1D1D1D1D2020202626262828282A2A2A2A2A2A2A2A2A2D2D2D2D2D2D 2D2D2D2A2A2A2A2A2A2828282626262424242020201D1D1D191919161616101010090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858585000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090E0E0E1111111414141818181B1B1B 1E1E1E2121212424242727272929292B2B2B2D2D2D303030323232323232343434363636373737 3838383939393939393939393A3A3A3A3A3A3A3A3A3A3A3A393939383838383838373737363636 3434343333333232323232323030302E2E2E2A2A2A2828282525252323232121211E1E1E1B1B1B 1717171515151212120F0F0F0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303040404040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505050505050505050505040404000000000000000000000000 000000000000000000000000000000000000000000080808A5A5A5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFE3838380000000000000000000000000000000000000000000000000C0C0C111111 111111111111111111111111111111111111121212121212121212121212121212121212121212 131313131313131313131313131313131313141414141414141414141414141414141414141414 151515151515151515151515151515151515151515161616161616161616161616161616161616 161616171717171717171717171717171717171717171717171717181818181818181818181818 1818181818181919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F202020202020202020202020202020202020212121212121212121212121212121212121 212121222222222222222222222222222222222222222222232323232323232323232323232323 232323232323232323242424242424242424242424242424242424242424242424242424242424 252525252525252525252525252525252525252525252525252525252525252525252525252525 252525252525252525252525252525252525252525262626262626262626262626262626262626 252525252525252525252525252525252525252525252525252525252525252525252525252525 252525252525252525242424242424242424242424242424242424242424232323232323232323 232323232323222222222222222222222222212121212121212121202020202020202020050303 050101050101050101050101050101050101020000989898FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000 0000000000000000000000001212122B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929 292929292929292929292929292929292929282828282828282828282828282828282828282828 272727272727272727272727272727272727262626262626262626262626262626252525252525 252525252525252525252525252525242424242424242424242424242424242424242424232323 232323232323232323232323232323222222222222222222222222222222222222212121212121 2121212121212121212121212020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F2222222525252727272B2B2B2C2C2C2C2C2C2E2E2E313131313131323232323232 3333333333333333333333333232323131313030302F2F2F2D2D2D1D1D1D020202000000000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000 0000000000000000000000000000000000000E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909 080808080808080808080808070707000000000000000000000000000000000000000000141414 CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909090909091010101616161D1D1D1D1D1D2020202626262828282A2A2A2A2A2A2A2A2A 2A2A2A2D2D2D2D2D2D2A2A2A2A2A2A2828282626262424242020201D1D1D161616101010101010 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F00E0E0E 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060C0C0C101010131313 1616161A1A1A1D1D1D2121212424242727272929292B2B2B2D2D2D2F2F2F313131323232333333 3535353737373838383939393939393A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939383838 3838383737373535353434343333333232323131312F2F2F2C2C2C2A2A2A282828252525232323 2121211D1D1D1B1B1B1717171515151111110D0D0D070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404040404050505050505050505050505050505050505040404010101 000000000000000000000000000000000000000000000000000000000000010101838383FEFEFE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFBEBEBE000000000000000000000000000000000000000000000000 030303101010101010111111111111111111111111111111111111121212121212121212121212 121212121212121212131313131313131313131313131313131313131313141414141414141414 141414141414141414141414151515151515151515151515151515151515151515161616161616 161616161616161616161616161616171717171717171717171717171717171717171717171717 1818181818181818181818181818181818181919191919191919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020202020212121 212121212121212121212121212121212121222222222222222222222222222222222222222222 222222232323232323232323232323232323232323232323232323232323232323242424242424 242424242424242424242424242424242424242424242424242424242424242424242424252525 252525252525252525252525252525252525252525252525252525252525252525252525252525 252525252525252525252525252525252525252525252525252525242424242424242424242424 242424242424242424242424242424242424232323232323232323232323232323232323232323 2222222222222222222222222121212121212121212121212020202020202020201F1F1F1F1F1F 1F1F1F050303050101050101050101050101050101050101020000989898FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000 0000000000000000000000000000000000001212122B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929 292929292929292929292929282828282828282828282828282828282828282828282828272727 272727272727272727272727272727262626262626262626262626262626262626252525252525 252525252525252525252525242424242424242424242424242424242424242424232323232323 232323232323232323232323232323222222222222222222222222222222222222212121212121 2121212121212121212121212020202020202020202020202020202020201F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E2222222525252727272929292B2B2B2C2C2C2E2E2E2F2F2F313131 3131313131313232323333333333333232323232323131313030302F2F2F2C2C2C1D1D1D020202 0000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5 0606060000000000000000000000000000000000000000000E0E0E0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 090909090909080808080808080808080808070707000000000000000000000000000000000000 000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909090909091010101616161D1D1D1D1D1D2020202626262828282A2A2A 2A2A2A2A2A2A2A2A2A2D2D2D2D2D2D2A2A2A2A2A2A282828262626242424202020191919161616 101010090909090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF767676000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0E0E0E1111111515151919191C1C1C1F1F1F2222222626262828282929292C2C2C2E2E2E303030 3232323333333535353737373838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3A3A3A 3A3A3A3939393838383737373636363535353535353333333232323030302E2E2E2C2C2C2A2A2A 2828282626262323232020201D1D1D1A1A1A1616161212120F0F0F0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404040404050505050505050505050505050505 050505050505020202000000000000000000000000000000000000000000000000000000000000 000000565656F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4F000000000000000000000000000000 0000000000000000000A0A0A101010101010111111111111111111111111111111111111111111 121212121212121212121212121212121212121212131313131313131313131313131313131313 141414141414141414141414141414141414141414141414151515151515151515151515151515 151515151515161616161616161616161616161616161616161616171717171717171717171717 171717171717171717171717181818181818181818181818181818181818191919191919191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020 202020202020202020202020202020212121212121212121212121212121212121212121212121 222222222222222222222222222222222222222222222222222222232323232323232323232323 232323232323232323232323232323232323232323242424242424242424242424242424242424 242424242424242424242424242424242424242424242424242424242424242424242424242424 242424242424242424242424242424242424242424242424242424242424242424242424242424 242424232323232323232323232323232323232323232323232323222222222222222222222222 2222222222222121212121212121212121212020202020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E050303050101050101050101050101050101050101020000989898FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313 0000000000000000000000000000000000000000000000001212122A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929292929 292929292929292929282828282828282828282828282828282828282828272727272727272727 272727272727272727272727262626262626262626262626262626262626252525252525252525 252525252525252525252525242424242424242424242424242424242424242424232323232323 232323232323232323232323232323222222222222222222222222222222222222212121212121 2121212121212121212121212020202020202020202020202020202020201F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E2222222525252626262828282B2B2B2C2C2C2E2E2E 2E2E2E3030303131313131313232323232323232323232323232323131312E2E2E2E2E2E2C2C2C 1D1D1D0202020000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFA5A5A50606060000000000000000000000000000000000000000000E0E0E0F0F0F0F0F0F 0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909 090909090909090909080808080808080808080808080808070707000000000000000000000000 000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF878787000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909091010101616161919191D1D1D202020242424262626 2828282A2A2A2A2A2A2A2A2A2D2D2D2D2D2D2D2D2D2A2A2A2828282626262424242020201D1D1D 191919161616101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000181818E4E4E4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E70A0A0A000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060C0C0C1010101414141616161A1A1A1D1D1D2121212424242626262828282B2B2B 2D2D2D2F2F2F3131313232323434343636363737373838383838383A3A3A3A3A3A3B3B3B3B3B3B 3C3C3C3B3B3B3A3A3A3A3A3A393939393939383838373737363636343434323232323232303030 2E2E2E2C2C2C2A2A2A2828282525252222221F1F1F1D1D1D1A1A1A1515151212120D0D0D0A0A0A 070707020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404040404050505050505 050505050505050505050505050505030303000000000000000000000000000000000000000000 000000000000000000000000393939E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDB060606000000000000 0000000000000000000000000000000101010F0F0F101010101010111111111111111111111111 111111111111111111121212121212121212121212121212121212121212131313131313131313 131313131313131313131313141414141414141414141414141414141414141414151515151515 151515151515151515151515151515151515161616161616161616161616161616161616161616 171717171717171717171717171717171717171717171717181818181818181818181818181818 1818181919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020202020202020202020202020202020212121212121 212121212121212121212121212121212121222222222222222222222222222222222222222222 222222222222222222222222232323232323232323232323232323232323232323232323232323 232323232323232323232323232323232323232323232323232323232323232323232323232323 232323232323232323232323232323232323232323232323232323232323232323232323232323 232323232323232323232323232323222222222222222222222222222222222222222222212121 2121212121212121212121212020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1E1E1E 1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D050303050101050101050101050101050101050101020000 979797FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D6D6D61313130000000000000000000000000000000000000000000000001111112A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A292929292929292929292929292929292929292929292929292929 292929282828282828282828282828282828282828282828282828272727272727272727272727 272727272727272727262626262626262626262626262626262626262626252525252525252525 252525252525252525252525242424242424242424242424242424242424242424232323232323 232323232323232323232323232323222222222222222222222222222222222222212121212121 2121212121212121212121212121212020202020202020202020202020201F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E2222222424242626262828282A2A2A 2C2C2C2D2D2D2E2E2E3030303131313232323232323232323232323232323232323030302F2F2F 2E2E2E2C2C2C1D1D1D0202020000000000000000000000000000000000000000000000000B0B0B FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFA5A5A50606060000000000000000000000000000000000000000000E0E0E 0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909080808080808080808080808080808080808060606000000000000 000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000090909101010161616191919202020202020 2424242626262828282A2A2A2A2A2A2A2A2A2D2D2D2D2D2D2D2D2D2A2A2A282828262626242424 2020201D1D1D191919161616101010090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000181818 E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727272000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909091010101313131515151A1A1A1C1C1C202020232323262626 2727272929292C2C2C2F2F2F3030303232323434343535353737373838383838383A3A3A3A3A3A 3B3B3B3B3B3B3C3C3C3B3B3B3A3A3A3A3A3A393939393939383838383838363636353535333333 3333333131312F2F2F2D2D2D2B2B2B2929292727272323232020201E1E1E1C1C1C171717141414 1111110D0D0D070707070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 040404050505050505050505050505050505050505050505040404010101000000000000000000 0000000000000000000000000000000000000000001B1B1BCDCDCDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF757575 000000000000000000000000000000000000000000000000080808101010101010101010101010 111111111111111111111111111111111111111111121212121212121212121212121212121212 121212131313131313131313131313131313131313131313141414141414141414141414141414 141414141414151515151515151515151515151515151515151515161616161616161616161616 161616161616161616161616171717171717171717171717171717171717171717171717181818 1818181818181818181818181818181919191919191919191919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020 202020202020202020202020212121212121212121212121212121212121212121212121212121 212121222222222222222222222222222222222222222222222222222222222222222222222222 222222222222222222232323232323232323232323232323232323232323232323232323232323 232323232323232323232323232323232323232323232323232323222222222222222222222222 222222222222222222222222222222222222222222222222212121212121212121212121212121 2121212121212020202020202020202020202020201F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1B1B1B050303050101050101050101050101050101 050101020000979797FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000000000111111 292929292929292929292929292929292929292929292929292929292929292929292929282828 282828282828282828282828282828282828282828282828272727272727272727272727272727 272727272727262626262626262626262626262626262626262626252525252525252525252525 252525252525252525242424242424242424242424242424242424242424242424232323232323 232323232323232323232323232323222222222222222222222222222222222222212121212121 2121212121212121212121212121212020202020202020202020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D212121242424262626 2828282929292B2B2B2D2D2D2E2E2E303030303030323232323232323232323232323232313131 3030302F2F2F2E2E2E2B2B2B1D1D1D020202000000000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000000000000000 0000000E0E0E0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909090909080808080808080808080808080808080808080808060606 000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909101010161616191919 2020202020202424242626262828282A2A2A2A2A2A2A2A2A2D2D2D2D2D2D2A2A2A2A2A2A282828 262626242424202020191919191919101010101010090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8E80A0A0A000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1111111414141818181B1B1B1E1E1E 2222222424242626262929292B2B2B2E2E2E303030313131333333353535373737373737383838 3939393A3A3A3B3B3B3B3B3B3C3C3C3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A393939383838373737 3636363434343333333333333131312E2E2E2C2C2C2A2A2A2828282525252222222121211E1E1E 1B1B1B1616161414140F0F0F0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 040404040404040404040404050505050505050505050505050505050505050505050505020202 0000000000000000000000000000000000000000000000000000000000000C0C0CB2B2B2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF1F1F11717170000000000000000000000000000000000000000000000000E0E0E101010 101010101010101010111111111111111111111111111111111111111111121212121212121212 121212121212121212121212131313131313131313131313131313131313131313131313141414 141414141414141414141414141414141414151515151515151515151515151515151515151515 161616161616161616161616161616161616161616161616171717171717171717171717171717 171717171717171717181818181818181818181818181818181818181818191919191919191919 1919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020202020202020202020202020202020202020212121 212121212121212121212121212121212121212121212121212121212121212121222222222222 222222222222222222222222222222222222222222222222222222222222222222222222222222 222222222222222222222222222222222222222222222222222222222222222222222222222222 222222222222212121212121212121212121212121212121212121212121212121202020202020 2020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1A1A1A050303050101050101050101 050101050101050101020000969696FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000 000000111111292929292929292929292929292929292929292929282828282828282828282828 282828282828282828282828282828282828272727272727272727272727272727272727272727 272727262626262626262626262626262626262626262626252525252525252525252525252525 252525252525242424242424242424242424242424242424242424242424232323232323232323 232323232323232323232323232323222222222222222222222222222222222222212121212121 2121212121212121212121212121212020202020202020202020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D 2121212424242727272929292B2B2B2D2D2D2E2E2E2F2F2F303030323232323232323232313131 3232323131313030302F2F2F2D2D2D2B2B2B1D1D1D020202000000000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000 0000000000000000000E0E0E0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 090909090909090909090909090909090909090909080808080808080808080808080808080808 070707060606000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1616161919192020202020202424242626262828282A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2828282626262424241D1D1D191919161616101010090909090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF737373000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060C0C0C0E0E0E111111151515 1919191C1C1C2020202222222424242727272929292D2D2D2E2E2E303030323232343434363636 3737373737373939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A 3A3A3A3838383737373636363535353333333232323030302E2E2E2D2D2D2A2A2A282828252525 2323232020201D1D1D1919191616161212120F0F0F0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404040404050505050505050505050505050505050505 050505050505030303000000000000000000000000000000000000000000000000000000000000 010101777777FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF9B9B9B000000000000000000000000000000000000000000000000 050505101010101010101010101010101010101010111111111111111111111111111111111111 111111121212121212121212121212121212121212121212131313131313131313131313131313 131313131313141414141414141414141414141414141414141414141414151515151515151515 151515151515151515151515161616161616161616161616161616161616161616161616171717 171717171717171717171717171717171717171717181818181818181818181818181818181818 1818181919191919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020 202020202020202020202020202020202020202020202020212121212121212121212121212121 212121212121212121212121212121212121212121212121212121212121212121212121212121 212121212121212121212121212121212121212121212121212121212121212121212121212121 212121212121212121212121212121212121202020202020202020202020202020202020202020 2020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919050303050101 050101050101050101050101050101020000969696FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000 000000000000000000111111292929282828282828282828282828282828282828282828282828 282828282828282828272727272727272727272727272727272727272727272727272727262626 262626262626262626262626262626262626262626252525252525252525252525252525252525 252525252525242424242424242424242424242424242424242424242424232323232323232323 232323232323232323232323222222222222222222222222222222222222222222212121212121 2121212121212121212121212121212020202020202020202020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D2020202323232525252929292A2A2A2B2B2B2D2D2D2D2D2D303030313131323232 3131313131313232323131313030302E2E2E2D2D2D2B2B2B1D1D1D020202000000000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000 0000000000000000000000000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A090909090909090909090909090909090909090909080808080808080808080808080808 080808070707070707060606000000000000000000000000000000000000000000141414CACACA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 0909091010101919191919192020202020202424242626262828282A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2828282626262424242424241D1D1D191919161616101010090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EBEBEB0C0C0C000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 1010101313131616161B1B1B1D1D1D2121212323232626262929292B2B2B2D2D2D2F2F2F313131 3333333535353636363737373838383939393A3A3A3B3B3B3B3B3B3C3C3C3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3A3A3A3A3A3A3838383737373636363535353232323232323030302F2F2F2D2D2D 2A2A2A2727272525252222221D1D1D1B1B1B1717171515151111110D0D0D0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404040404050505050505050505 050505050505050505050505050505040404010101000000000000000000000000000000000000 000000000000000000000000494949EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD343434000000000000000000000000000000 0000000000000000000B0B0B101010101010101010101010101010101010101010111111111111 111111111111111111111111111111121212121212121212121212121212121212121212131313 131313131313131313131313131313131313141414141414141414141414141414141414141414 141414151515151515151515151515151515151515151515161616161616161616161616161616 161616161616161616171717171717171717171717171717171717171717171717171717181818 1818181818181818181818181818181818181919191919191919191919191919191A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020202020202020202020202020202020202020202020 202020202020202020202020202020202020202020202020202020212121212121212121212121 212121212121212121212121212121212121212121212121212121202020202020202020202020 2020202020202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818 050303050101050101050101050101050101050101020000969696FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000 000000000000000000000000000000101010282828282828282828282828282828282828282828 282828272727272727272727272727272727272727272727272727272727262626262626262626 262626262626262626262626262626252525252525252525252525252525252525252525252525 252525242424242424242424242424242424242424242424242424232323232323232323232323 232323232323232323232323222222222222222222222222222222222222222222212121212121 2121212121212121212121212121212020202020202020202020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1C1C1C2020202323232525252929292929292B2B2B2C2C2C2D2D2D2F2F2F 3030303131313131313131313232323030302F2F2F2E2E2E2D2D2D2B2B2B1C1C1C020202000000 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606 0000000000000000000000000000000000000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A090909090909090909090909090909090909090909080808080808080808080808 080808080808070707070707070707060606000000000000000000000000000000000000000000 141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909090909091010101919191919192020202020202424242626262828282A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2828282626262424242020201D1D1D161616161616101010090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF757575000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090E0E0E1111111515151919191C1C1C1F1F1F2222222424242727272929292C2C2C 2E2E2E3030303232323535353636363737373838383939393A3A3A3B3B3B3C3C3C3C3C3C3C3C3C 3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A383838373737363636343434323232323232 3131312F2F2F2C2C2C2929292727272323232020201D1D1D1B1B1B1717171414141111110D0D0D 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404040404 050505050505050505050505050505050505050505050505050505020202000000000000000000 0000000000000000000000000000000000000000001E1E1ECACACAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4C4C4010101000000000000 0000000000000000000000000000000202020F0F0F101010101010101010101010101010101010 101010111111111111111111111111111111111111111111121212121212121212121212121212 121212121212121212131313131313131313131313131313131313131313141414141414141414 141414141414141414141414141414151515151515151515151515151515151515151515161616 161616161616161616161616161616161616161616161616171717171717171717171717171717 171717171717171717181818181818181818181818181818181818181818191919191919191919 1919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F202020202020202020202020202020202020202020202020202020202020 202020202020202020202020202020202020202020202020202020202020202020202020202020 2020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818 181818171717050303050101050101050101050101050101050101020000959595FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000 000000000000000000000000000000000000000000101010282828282828272727272727272727 272727272727272727272727272727272727272727272727262626262626262626262626262626 262626262626262626262626252525252525252525252525252525252525252525252525252525 242424242424242424242424242424242424242424242424242424232323232323232323232323 232323232323232323232323222222222222222222222222222222222222222222212121212121 2121212121212121212121212121212020202020202020202020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C2020202323232525252626262929292B2B2B2C2C2C 2D2D2D2E2E2E3030303131313131313131313131313030302F2F2F2E2E2E2D2D2D2A2A2A1C1C1C 0202020000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A5A5A50606060000000000000000000000000000000000000000000E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909080808080808080808 080808080808080808080808070707070707070707060606000000000000000000000000000000 000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 878787000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909090909091616161919191D1D1D202020202020242424262626282828 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2828282828282626262424242020201D1D1D161616101010 101010090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB0D0D0D000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C1010101313131818181C1C1C1E1E1E212121242424262626 2929292B2B2B2D2D2D3030303232323434343535353636363838383939393A3A3A3B3B3B3C3C3C 3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3A3A3A393939383838373737353535 3333333232323232323030302E2E2E2A2A2A2929292727272323232020201D1D1D1B1B1B161616 1414141111110D0D0D070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404040404050505050505050505050505050505050505050505050505050505030303 0000000000000000000000000000000000000000000000000000000000000808089C9C9CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF545454 0000000000000000000000000000000000000000000000000909090F0F0F0F0F0F101010101010 101010101010101010101010101010111111111111111111111111111111111111111111121212 121212121212121212121212121212121212131313131313131313131313131313131313131313 131313141414141414141414141414141414141414141414141414151515151515151515151515 151515151515151515151515161616161616161616161616161616161616161616161616171717 171717171717171717171717171717171717171717171717181818181818181818181818181818 1818181818181919191919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818 171717171717171717171717050303050101050101050101050101050101050101020000959595 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6 131313000000000000000000000000000000000000000000000000101010272727272727272727 272727272727272727272727272727262626262626262626262626262626262626262626262626 262626262626252525252525252525252525252525252525252525252525252525242424242424 242424242424242424242424242424242424242424242424232323232323232323232323232323 232323232323232323222222222222222222222222222222222222222222222222212121212121 2121212121212121212121212121212020202020202020202020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C202020222222252525262626292929 2B2B2B2B2B2B2C2C2C2E2E2E3030303131313030303030303131313030302F2F2F2D2D2D2C2C2C 2A2A2A1C1C1C0202020000000000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA5A5A50606060000000000000000000000000000000000000000000E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909080808080808 080808080808080808080808080808070707070707070707070707060606000000000000000000 000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF878787000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909091010101616161919191D1D1D202020202020242424 2626262828282A2A2A2A2A2A2A2A2A2A2A2A2A2A2A282828282828262626242424202020191919 161616101010101010090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000181818E4E4E4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF767676000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1111111515151A1A1A1D1D1D202020 2323232626262828282A2A2A2D2D2D2F2F2F313131333333353535363636373737383838393939 3A3A3A3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3A3A3A393939 3838383636363535353333333333333131312F2F2F2C2C2C2A2A2A2828282525252222221F1F1F 1D1D1D1919191616161212120F0F0F0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303030303040404040404040404040404040404040404040404 040404040404040404040404040404040404050505050505050505050505050505050505050505 050505050505040404010101000000000000000000000000000000000000000000000000000000 000000666666F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE2E2E20A0A0A0000000000000000000000000000000000000000000101010E0E0E0F0F0F 0F0F0F0F0F0F101010101010101010101010101010101010101010111111111111111111111111 111111111111111111121212121212121212121212121212121212121212131313131313131313 131313131313131313131313131313141414141414141414141414141414141414141414141414 151515151515151515151515151515151515151515151515161616161616161616161616161616 161616161616161616171717171717171717171717171717171717171717171717171717181818 181818181818181818181818181818181818181818191919191919191919191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818181818 171717171717171717161616161616161616050303050101050101050101050101050101050101 020000949494FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD6D6D6131313000000000000000000000000000000000000000000000000101010272727 272727272727262626262626262626262626262626262626262626262626262626262626262626 252525252525252525252525252525252525252525252525252525252525242424242424242424 242424242424242424242424242424242424242424232323232323232323232323232323232323 232323232323232323222222222222222222222222222222222222222222212121212121212121 2121212121212121212121212121212020202020202020202020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1F1F1F1F1F1F252525 2626262929292A2A2A2B2B2B2C2C2C2E2E2E3030303030303030303030303131313030302E2E2E 2D2D2D2C2C2C2A2A2A1C1C1C020202000000000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000000000000000000000 0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909080808 080808080808080808080808080808080808070707070707070707070707070707060606000000 000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000090909101010161616191919191919202020 2424242626262828282828282828282828282828282A2A2A282828282828262626242424202020 1D1D1D191919161616101010090909090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB0D0D0D000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090E0E0E131313181818 1C1C1C1E1E1E2222222424242626262929292B2B2B2E2E2E303030313131333333353535363636 3737373838383A3A3A3A3A3A3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B 3A3A3A3A3A3A3838383838383737373535353333333232323030302E2E2E2C2C2C292929272727 2525252222221F1F1F1C1C1C1919191515151111110D0D0D070707070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404040404040404040404050505050505050505050505 050505050505050505050505050505050505020202000000000000000000000000000000000000 000000000000000000000000393939E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF7B7B7B000000000000000000000000000000000000000000000000 0606060F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010111111 111111111111111111111111111111111111111111121212121212121212121212121212121212 121212131313131313131313131313131313131313131313131313141414141414141414141414 141414141414141414141414151515151515151515151515151515151515151515151515161616 161616161616161616161616161616161616161616161616171717171717171717171717171717 171717171717171717171717181818181818181818181818181818181818181818181818191919 1919191919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919181818181818181818181818171717 171717171717171717161616161616161616151515151515050303050101050101050101050101 050101050101020000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000000000 0F0F0F262626262626262626262626262626262626262626262626262626252525252525252525 252525252525252525252525252525252525252525252525242424242424242424242424242424 242424242424242424242424242424242424232323232323232323232323232323232323232323 232323232323222222222222222222222222222222222222222222222222212121212121212121 2121212121212121212121212020202020202020202020202020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1F1F1F2222222525252727272A2A2A2A2A2A2B2B2B2D2D2D2F2F2F2F2F2F2F2F2F2F2F2F303030 2E2E2E2E2E2E2C2C2C2A2A2A2A2A2A1C1C1C020202000000000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000000000000000 0000000000000E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909 080808080808080808080808080808080808080808070707070707070707070707070707070707 050505000000000000000000000000000000000000000000141414CACACAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909101010161616191919 1D1D1D202020242424262626282828282828282828282828282828282828282828282828262626 2424242020201D1D1D191919161616101010090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 818181000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 1111111515151919191C1C1C2020202222222525252727272B2B2B2D2D2D2F2F2F303030323232 3434343535353636363838383939393A3A3A3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C 3C3C3C3C3C3C3B3B3B3A3A3A3939393838383838383636363434343232323131312F2F2F2D2D2D 2B2B2B2929292727272525252222221D1D1D1B1B1B1717171414141111110D0D0D070707070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303030303040404 040404040404040404040404040404040404040404040404040404040404040404040404050505 050505050505050505050505050505050505050505050505050505030303000000000000000000 000000000000000000000000000000000000000000171717BFBFBFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F31A1A1A000000000000000000000000000000 0000000000000000000B0B0B0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010 101010101010101010111111111111111111111111111111111111111111111111121212121212 121212121212121212121212121212131313131313131313131313131313131313131313131313 141414141414141414141414141414141414141414141414151515151515151515151515151515 151515151515151515151515161616161616161616161616161616161616161616161616161616 171717171717171717171717171717171717171717171717171717181818181818181818181818 1818181818181818181818181818181919191919191919191919191919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A191919191919191919191919181818181818181818181818171717171717 171717171717161616161616161616161616151515151515151515141414040202050101050101 050101050101050101050101020000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000 0000000000000F0F0F262626262626262626262626252525252525252525252525252525252525 252525252525252525252525252525252525242424242424242424242424242424242424242424 242424242424242424242424232323232323232323232323232323232323232323232323232323 232323222222222222222222222222222222222222222222222222212121212121212121212121 2121212121212121212121212020202020202020202020202020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1E1E1E2121212424242727272A2A2A2A2A2A2A2A2A2B2B2B2E2E2E2F2F2F2F2F2F 2E2E2E2F2F2F2E2E2E2D2D2D2C2C2C2929292929291B1B1B020202000000000000000000000000 0000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000000000000000 0000000000000000000000000E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 090909090909080808080808080808080808080808080808070707070707070707070707070707 070707070707050505000000000000000000000000000000000000000000141414CACACAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1616161919191D1D1D202020242424262626262626282828282828282828282828282828282828 2626262424242020202020201D1D1D191919161616101010090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF3F3F3181818000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090E0E0E1313131616161A1A1A1D1D1D2020202323232626262929292C2C2C2E2E2E 2F2F2F3232323333333535353636363737373838383A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C 3C3C3C3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A393939383838373737353535333333313131 3131312F2F2F2D2D2D2A2A2A2828282727272424242121211D1D1D1B1B1B1919191414140F0F0F 0D0D0D070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303030303040404040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505050505050505050505050505050505050505050505040404 0101010000000000000000000000000000000000000000000000000000000101016E6E6EFAFAFA FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA6A6A6000000000000000000 0000000000000000000000000000000303030F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 101010101010101010101010101010101010101010111111111111111111111111111111111111 111111111111121212121212121212121212121212121212121212131313131313131313131313 131313131313131313131313141414141414141414141414141414141414141414141414141414 151515151515151515151515151515151515151515151515161616161616161616161616161616 161616161616161616161616171717171717171717171717171717171717171717171717171717 171717181818181818181818181818181818181818181818181818181818191919191919191919 1919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A191919191919191919191919181818181818181818181818181818171717171717171717 171717161616161616161616161616151515151515151515151515141414141414141414040202 050101050101050101050101050101050101020000939393FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000 0000000000000000000000000F0F0F252525252525252525252525252525252525252525252525 252525252525252525252525242424242424242424242424242424242424242424242424242424 242424242424242424232323232323232323232323232323232323232323232323232323232323 222222222222222222222222222222222222222222222222222222212121212121212121212121 2121212121212121212121212020202020202020202020202020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1A1A1A1E1E1E2121212424242727272727272A2A2A2A2A2A2B2B2B2E2E2E 2F2F2F2E2E2E2E2E2E2F2F2F2E2E2E2D2D2D2B2B2B2929292929291B1B1B020202000000000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606000000 0000000000000000000000000000000000000E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909 090909090909090909080808080808080808080808080808080808070707070707070707070707 070707070707070707060606050505000000000000000000000000000000000000000000141414 CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0909091010101616161919191D1D1D202020202020242424262626282828282828262626262626 2626262626262626262424242020201D1D1D191919161616101010101010090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF939393000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090E0E0E1111111515151919191C1C1C1E1E1E212121242424272727 2B2B2B2D2D2D2E2E2E3030303232323434343535353636363838383939393A3A3A3B3B3B3B3B3B 3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3A3A3A3A3A3A3A3A3A383838373737 3535353232323232323131312E2E2E2C2C2C2A2A2A2828282525252323231F1F1F1D1D1D1B1B1B 1616161212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404040404050505050505050505050505050505050505050505050505 050505050505050505020202000000000000000000000000000000000000000000000000000000 000000363636DBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF424242 0000000000000000000000000000000000000000000000000808080F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111121212121212121212121212121212121212121212121212 131313131313131313131313131313131313131313131313141414141414141414141414141414 141414141414141414141414151515151515151515151515151515151515151515151515151515 161616161616161616161616161616161616161616161616161616171717171717171717171717 171717171717171717171717171717171717171717181818181818181818181818181818181818 1818181818181818181919191919191919191919191919191919191919191919191919191A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919 191919191919191919181818181818181818181818181818171717171717171717171717171717 161616161616161616161616161616151515151515151515141414141414141414131313131313 131313040202050101050101050101050101050101050101020000929292FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000 0000000000000000000000000000000000000F0F0F252525252525252525252525252525252525 252525242424242424242424242424242424242424242424242424242424242424242424242424 242424232323232323232323232323232323232323232323232323232323232323232323222222 222222222222222222222222222222222222222222222222212121212121212121212121212121 2121212121212121212020202020202020202020202020202020202020202020201F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1E1E1E2121212424242626262727272A2A2A2A2A2A 2B2B2B2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2D2D2D2C2C2C2B2B2B2929292929291A1A1A020202 0000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFACACAC 0909090000000000000000000000000000000000000000000C0C0C0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909 090909090909090909090909080808080808080808080808080808080808070707070707070707 070707070707070707070707060606060606050505000000000000000000000000000000000000 000000151515D1D1D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909090909091010101616161919191D1D1D202020202020242424262626262626262626 2626262626262626262626262424242424242020201D1D1D191919161616101010090909090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA232323000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060C0C0C1010101414141616161A1A1A1D1D1D202020 2222222626262929292B2B2B2D2D2D2F2F2F3131313232323434343535353737373939393A3A3A 3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B 3A3A3A3838383636363535353333333131312F2F2F2D2D2D2B2B2B2A2A2A282828242424222222 1F1F1F1D1D1D1919191515151212120D0D0D0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404040404050505050505050505050505050505 050505050505050505050505050505050505030303000000000000000000000000000000000000 0000000000000000000000000E0E0EA3A3A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD9D9D90707070000000000000000000000000000000000000000000101010C0C0C0E0E0E 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010 101010101010111111111111111111111111111111111111111111111111121212121212121212 121212121212121212121212121212131313131313131313131313131313131313131313131313 141414141414141414141414141414141414141414141414151515151515151515151515151515 151515151515151515151515151515161616161616161616161616161616161616161616161616 161616161616171717171717171717171717171717171717171717171717171717171717171717 181818181818181818181818181818181818181818181818181818181818191919191919191919 1919191919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919 181818181818181818181818181818181818171717171717171717171717171717171717161616 161616161616161616161616151515151515151515151515141414141414141414131313131313 131313121212121212040202050101050101050101050101050101050101020000929292FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313 0000000000000000000000000000000000000000000000000F0F0F252525242424242424242424 242424242424242424242424242424242424242424242424242424242424242424242424232323 232323232323232323232323232323232323232323232323232323232323222222222222222222 222222222222222222222222222222222222222222212121212121212121212121212121212121 2121212121212121212020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1E1E1E202020232323242424272727 2929292A2A2A2A2A2A2C2C2C2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D2C2C2C2B2B2B292929282828 1A1A1A0202020000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFC4C4C41212120000000000000000000000000000000000000000000808080D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909090909080808080808080808080808080808080808080808070707 070707070707070707070707070707060606060606060606030303000000000000000000000000 000000000000000000181818EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF878787000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909090909091010101616161919191D1D1D202020202020242424262626 2626262626262626262626262626262424242424242020201D1D1D191919191919161616101010 090909090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000181818E4E4E4FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090E0E0E111111151515191919 1C1C1C1E1E1E2121212424242727272929292C2C2C2E2E2E303030323232333333353535373737 3838383A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C 3C3C3C3C3C3C3B3B3B3939393838383636363535353232323030302F2F2F2D2D2D2C2C2C2A2A2A 2727272323232121211E1E1E1C1C1C1919191515151111110D0D0D070707070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404040404040404050505 050505050505050505050505050505050505050505050505050505050505010101000000000000 000000000000000000000000000000000000000000000000555555EFEFEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF777777000000000000000000000000000000000000000000000000 0404040E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010 101010101010101010101010101010101010111111111111111111111111111111111111111111 111111121212121212121212121212121212121212121212121212131313131313131313131313 131313131313131313131313141414141414141414141414141414141414141414141414141414 151515151515151515151515151515151515151515151515151515151515161616161616161616 161616161616161616161616161616161616161616171717171717171717171717171717171717 171717171717171717171717171717171717181818181818181818181818181818181818181818 181818181818181818181818191919191919191919191919191919191919191919191919191919 1919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A191919191919191919191919191919191919191919191919181818181818181818 181818181818181818181818171717171717171717171717171717171717171717161616161616 161616161616161616151515151515151515151515141414141414141414141414131313131313 131313121212121212121212111111040202050101050101050101050101050101050101020000 919191FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D6D6D61313130000000000000000000000000000000000000000000000000F0F0F242424242424 242424242424242424242424242424242424242424242424242424232323232323232323232323 232323232323232323232323232323232323232323232323232323222222222222222222222222 222222222222222222222222222222222222212121212121212121212121212121212121212121 2121212121212020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1919191D1D1D202020232323 2424242727272828282929292A2A2A2C2C2C2E2E2E2D2D2D2D2D2D2E2E2E2D2D2D2C2C2C2A2A2A 2929292828281A1A1A0202020000000000000000000000000000000000000000000000000B0B0B FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE3E3E3171717000000000000000000000000000000000000000000010101 0808080C0C0C0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909090909090909080808080808080808080808080808080808080808 070707070707070707070707070707070707060606060606060606030303000000000000000000 000000000000000000000000000000171717FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000909090909091010101616161919191D1D1D202020202020 2424242424242626262626262626262424242424242424242424242020201D1D1D191919191919 101010090909090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000181818 E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE 323232000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060C0C0C101010 1313131616161919191C1C1C2020202323232626262929292B2B2B2E2E2E303030313131323232 3434343636363838383A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3E3E3E3E3E3E 3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3A3A3A3939393737373636363434343232323030302F2F2F 2E2E2E2C2C2C2929292727272323232020201D1D1D1B1B1B1919191515151111110D0D0D070707 070707020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505050505050505050505050505050505050505050505050505 030303000000000000000000000000000000000000000000000000000000000000202020C4C4C4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5202020000000000000000000000000000000 0000000000000000000A0A0A0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F101010101010101010101010101010101010101010101010111111111111111111 111111111111111111111111111111121212121212121212121212121212121212121212121212 131313131313131313131313131313131313131313131313131313141414141414141414141414 141414141414141414141414141414151515151515151515151515151515151515151515151515 151515151515161616161616161616161616161616161616161616161616161616161616161616 171717171717171717171717171717171717171717171717171717171717171717171717181818 181818181818181818181818181818181818181818181818181818181818181818181818181818 191919191919191919191919191919191919191919191919191919191919191919191919191919 1919191919191919191919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191919191919191919 191919191919191919191919191919191919181818181818181818181818181818181818181818 181818181818171717171717171717171717171717171717171717161616161616161616161616 161616161616151515151515151515151515141414141414141414141414131313131313131313 131313121212121212121212111111111111101010040202050101050101050101050101050101 050101020000919191FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD6D6D61313130000000000000000000000000000000000000000000000000F0F0F 242424242424242424242424242424242424232323232323232323232323232323232323232323 232323232323232323232323232323232323232323222222222222222222222222222222222222 222222222222222222222222222222212121212121212121212121212121212121212121212121 2121212020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1919191919191D1D1D 2020202323232323232626262828282929292A2A2A2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2D2D2D 2B2B2B2A2A2A2929292828281A1A1A020202000000000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF202020000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909090909091010101919191919191D1D1D 1D1D1D2020202424242424242626262626262626262424242424242424242020202020201D1D1D 191919161616101010090909090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB8B8B8000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C1010101414141818181B1B1B1E1E1E2222222525252727272929292D2D2D2F2F2F 3030303232323434343636363737373939393A3A3A3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E 3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3B3B3B3A3A3A383838383838363636343434 3232323232323030302E2E2E2B2B2B2929292525252323232020201D1D1D1B1B1B171717141414 0F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 040404040404040404040404040404050505050505050505050505050505050505050505050505 050505050505050505040404010101000000000000000000000000000000000000000000000000 0000000404047F7F7FFCFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFADADAD000000000000000000 0000000000000000000000000000000202020D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010 101010111111111111111111111111111111111111111111111111121212121212121212121212 121212121212121212121212121212131313131313131313131313131313131313131313131313 141414141414141414141414141414141414141414141414141414141414151515151515151515 151515151515151515151515151515151515151515161616161616161616161616161616161616 161616161616161616161616161616161616171717171717171717171717171717171717171717 171717171717171717171717171717171717171717181818181818181818181818181818181818 181818181818181818181818181818181818181818181818181818181818181818191919191919 191919191919191919191919191919191919191919191919191919191919191919191919191919 191919191919191919191919191919191919191919191919191919191919191919181818181818 181818181818181818181818181818181818181818181818181818181818181818171717171717 171717171717171717171717171717171717171717161616161616161616161616161616161616 151515151515151515151515151515141414141414141414141414131313131313131313131313 121212121212121212111111111111111111101010101010101010040202050101050101050101 050101050101050101020000909090FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000 0000000F0F0F232323232323232323232323232323232323232323232323232323232323232323 232323232323232323232323232323222222222222222222222222222222222222222222222222 222222222222222222212121212121212121212121212121212121212121212121212121212121 2020202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919 1919191D1D1D2020202222222323232626262828282929292929292B2B2B2D2D2D2D2D2D2D2D2D 2D2D2D2C2C2C2B2B2B2A2A2A2929292828281A1A1A020202000000000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727272050505000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000C0C0CA3A3A3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909101010161616191919 1D1D1D1D1D1D202020242424242424262626262626262626262626242424242424202020202020 1D1D1D191919161616161616101010090909090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF424242000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090E0E0E1313131616161919191C1C1C202020222222262626282828 2B2B2B2D2D2D2E2E2E3131313333333535353737373737373939393A3A3A3C3C3C3C3C3C3D3D3D 3E3E3E3E3E3E3F3F3F3F3F3F3E3E3E3F3F3F3F3F3F3E3E3E3D3D3D3C3C3C3B3B3B3A3A3A3A3A3A 3737373636363535353333333232322F2F2F2D2D2D2C2C2C2828282525252323231F1F1F1D1D1D 1A1A1A1616161414140F0F0F0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404040404040404050505050505050505050505050505 050505050505050505050505050505050505050505020202000000000000000000000000000000 000000000000000000000000000000414141E0E0E0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF494949 0000000000000000000000000000000000000000000000000707070E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010 101010101010101010101010101010111111111111111111111111111111111111111111111111 121212121212121212121212121212121212121212121212121212131313131313131313131313 131313131313131313131313131313141414141414141414141414141414141414141414141414 141414141414151515151515151515151515151515151515151515151515151515151515151515 161616161616161616161616161616161616161616161616161616161616161616161616171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 171717171717171717181818181818181818181818181818181818181818181818181818181818 181818181818181818181818181818181818181818181818181818181818181818181818181818 181818181818181818181818181818181818181818181818181818181818181818181818181818 181818181818181818181818181818181818171717171717171717171717171717171717171717 171717171717171717171717161616161616161616161616161616161616161616161616151515 151515151515151515151515141414141414141414141414141414131313131313131313131313 1212121212121212121111111111111111111010101010101010100F0F0F0F0F0F040202050101 0501010501010501010501010501010200008F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000 0000000000000000000E0E0E232323232323232323232323232323232323232323232323232323 232323232323222222222222222222222222222222222222222222222222222222222222222222 222222222222212121212121212121212121212121212121212121212121212121212121202020 2020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919 1919191919191919191C1C1C1F1F1F2222222323232626262828282929292929292C2C2C2D2D2D 2D2D2D2C2C2C2D2D2D2C2C2C2B2B2B2A2A2A2828282727271A1A1A020202000000000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF161616000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000202020FBFBFBFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909101010 1616161919191D1D1D1D1D1D202020242424242424262626262626262626242424242424202020 2020202020201D1D1D191919161616101010101010090909090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D0030303000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090E0E0E1111111414141818181B1B1B1E1E1E222222 2424242727272929292C2C2C2E2E2E3030303232323535353636363737373838383A3A3A3B3B3B 3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3E3E3E3F3F3F3F3F3F3E3E3E3D3D3D3C3C3C3C3C3C 3B3B3B3A3A3A3838383737373636363434343232323030302E2E2E2D2D2D2A2A2A282828252525 2222221F1F1F1D1D1D1919191616161212120F0F0F0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404040404050505050505 050505050505050505050505050505050505050505050505050505050505040404000000000000 0000000000000000000000000000000000000000000000000A0A0A888888FDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDCDCDC0808080000000000000000000000000000000000000000000000000B0B0B0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010101010111111111111111111111111 111111111111111111111111111111121212121212121212121212121212121212121212121212 121212131313131313131313131313131313131313131313131313131313141414141414141414 141414141414141414141414141414141414141414151515151515151515151515151515151515 151515151515151515151515151515151515161616161616161616161616161616161616161616 161616161616161616161616161616161616161616171717171717171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 171717171717171717181818181818181818181818181818181818181818181818181818181818 181818181818181818181818181818181818181818181818181818181818171717171717171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 171717161616161616161616161616161616161616161616161616161616151515151515151515 151515151515151515141414141414141414141414141414131313131313131313131313121212 1212121212121212121111111111111111111010101010101010100F0F0F0F0F0F0E0E0E0E0E0E 0402020501010501010501010501010501010501010200008F8F8FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000 0000000000000000000000000000000E0E0E232323232323232323232323232323232323222222 222222222222222222222222222222222222222222222222222222222222222222222222222222 212121212121212121212121212121212121212121212121212121212121212121202020202020 2020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919 1919191919191919191818181818181C1C1C1F1F1F222222232323252525272727292929292929 2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2C2C2C2B2B2B2A2A2A2828282727271A1A1A020202000000 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8989890F0F0F000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000121212B7B7B7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 0909091010101616161919191919191D1D1D202020202020242424242424242424242424242424 2424242020202020202020201D1D1D191919161616101010101010090909090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF636363000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090E0E0E111111151515191919 1C1C1C2020202222222626262828282B2B2B2D2D2D2F2F2F323232343434353535363636383838 3939393A3A3A3B3B3B3C3C3C3E3E3E3E3E3E3E3E3E3F3F3F3E3E3E3F3F3F3F3F3F3E3E3E3E3E3E 3D3D3D3C3C3C3C3C3C3B3B3B3939393838383737373535353333333131313030302E2E2E2D2D2D 2A2A2A2727272525252222221F1F1F1D1D1D1A1A1A1616161212120D0D0D0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 040404050505050505050505050505050505050505050505050505050505050505050505050505 0505050101010000000000000000000000000000000000000000000000000000000000003D3D3D DBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF7F7F7F000000000000000000000000000000000000000000000000 0303030D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010 101010111111111111111111111111111111111111111111111111121212121212121212121212 121212121212121212121212121212121212131313131313131313131313131313131313131313 131313131313141414141414141414141414141414141414141414141414141414141414141414 151515151515151515151515151515151515151515151515151515151515151515151515161616 161616161616161616161616161616161616161616161616161616161616161616161616161616 161616161616171717171717171717171717171717171717171717171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 171717171717171717171717171717171717171717171717171717161616161616161616161616 161616161616161616161616161616161616161616151515151515151515151515151515151515 151515141414141414141414141414141414141414131313131313131313131313121212121212 1212121212121111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0E0E0E0E0E0E 0E0E0E0D0D0D0402020501010501010501010501010501010501010200008F8F8FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000 0000000000000000000000000000000000000000000E0E0E222222222222222222222222222222 222222222222222222222222222222222222222222222222222222222222222222212121212121 212121212121212121212121212121212121212121212121212121202020202020202020202020 2020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919 1919191919191919191919191818181818181818181C1C1C1F1F1F212121222222252525272727 2929292929292B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2B2B2B2A2A2A2A2A2A282828272727191919 0202020000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF4D4D4D080808000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000D0D0D 797979FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 878787000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000090909090909101010161616191919191919191919202020202020202020242424242424 2424242424242020202020202020201D1D1D191919191919161616101010101010090909090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000181818E4E4E4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7E7E7 0D0D0D000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060C0C0C0E0E0E 1313131616161A1A1A1E1E1E2121212424242727272929292B2B2B2D2D2D303030323232343434 3535353737373939393A3A3A3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F 3F3F3F3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3A3A3A393939383838373737353535333333313131 3030302F2F2F2C2C2C2929292727272424242222221E1E1E1C1C1C1919191515151111110D0D0D 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 040404040404040404040404040404050505050505050505050505050505050505050505050505 050505050505050505050505030303000000000000000000000000000000000000000000000000 0000000000000D0D0D959595FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7232323000000000000000000000000000000 0000000000000000000909090D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010 101010101010101010101010101010111111111111111111111111111111111111111111111111 111111121212121212121212121212121212121212121212121212121212131313131313131313 131313131313131313131313131313131313131313131313141414141414141414141414141414 141414141414141414141414141414141414151515151515151515151515151515151515151515 151515151515151515151515151515151515151515161616161616161616161616161616161616 161616161616161616161616161616161616161616161616161616161616161616161616161616 161616171717171717171717171717171717171717171717171717171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 171717171717161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616151515151515151515151515151515151515151515151515141414 141414141414141414141414141414131313131313131313131313131313121212121212121212 1212121111111111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0E0E0E0E0E0E 0E0E0E0D0D0D0D0D0D0C0C0C0402020501010501010501010501010501010501010200008E8E8E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6 1313130000000000000000000000000000000000000000000000000E0E0E222222222222222222 222222222222222222222222222222222222222222222222212121212121212121212121212121 212121212121212121212121212121212121212121212121202020202020202020202020202020 2020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919 1919191919191919191919191818181818181818181818181818181C1C1C1E1E1E212121222222 2525252727272828282929292B2B2B2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2A2A2A2A2A2A282828 2626261919190202020000000000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F84D4D4D0F0F0F000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 1010106E6E6EFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF888888000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909090909091010101616161919191919191919191D1D1D202020202020 2020202020202020202020202020201D1D1D1D1D1D1D1D1D191919161616101010101010090909 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000181818E4E4E4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF868686000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C1010101414141818181C1C1C1F1F1F2222222525252727272929292C2C2C2F2F2F 3232323333333434343636363838383939393A3A3A3B3B3B3C3C3C3E3E3E3E3E3E3F3F3F3F3F3F 3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3B3B3B3A3A3A3A3A3A393939373737 3535353232323232323030302E2E2E2A2A2A2828282727272323232121211E1E1E1C1C1C191919 1414140F0F0F0D0D0D070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404040404040404050505050505050505050505050505 050505050505050505050505050505050505050505040404010101000000000000000000000000 000000000000000000000000000000000000393939D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4B4B4000000000000000000 0000000000000000000000000000000202020D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010101010101010111111111111111111 111111111111111111111111111111111111121212121212121212121212121212121212121212 121212121212121212131313131313131313131313131313131313131313131313131313131313 141414141414141414141414141414141414141414141414141414141414141414141414151515 151515151515151515151515151515151515151515151515151515151515151515151515151515 151515151515161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616161616161616161616161616161616161616161616161616161616 151515151515151515151515151515151515151515151515151515151515141414141414141414 141414141414141414141414131313131313131313131313131313121212121212121212121212 1212121111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0E0E0E0E0E0E 0E0E0E0D0D0D0D0D0D0C0C0C0C0C0C0B0B0B040202050101050101050101050101050101050101 0200008D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD6D6D61313130000000000000000000000000000000000000000000000000E0E0E222222 222222222222222222222222212121212121212121212121212121212121212121212121212121 212121212121212121212121212121212121202020202020202020202020202020202020202020 2020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919 1919191919191919191919191818181818181818181818181818181818181717171B1B1B1E1E1E 2121212222222525252626262828282929292B2B2B2C2C2C2B2B2B2B2B2B2C2C2C2B2B2B2A2A2A 292929272727262626191919020202000000000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF868686171717040404000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0808081A1A1AA7A7A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF979797010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909090909090909091010101616161616161919191919191D1D1D 1D1D1D2020202020202020202020202020202020201D1D1D1D1D1D1D1D1D191919161616101010 101010090909090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 181818E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9242424000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090E0E0E1111111616161A1A1A1D1D1D202020232323262626282828 2B2B2B2E2E2E3030303232323333333535353737373838383A3A3A3B3B3B3C3C3C3E3E3E3E3E3E 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3C3C3C3C3C3C3B3B3B 3A3A3A3838383737373535353333333131313030302D2D2D2A2A2A292929272727232323222222 1E1E1E1C1C1C1717171414140F0F0F0D0D0D070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404040404040404050505050505 050505050505050505050505050505050505050505050505050505050505050505030303000000 0000000000000000000000000000000000000000000000000000000404046E6E6EF3F3F3FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3F 0000000000000000000000000000000000000000000000000808080D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010 101010111111111111111111111111111111111111111111111111111111111111121212121212 121212121212121212121212121212121212121212121212131313131313131313131313131313 131313131313131313131313131313131313141414141414141414141414141414141414141414 141414141414141414141414141414141414151515151515151515151515151515151515151515 151515151515151515151515151515151515151515151515151515151515151515151515161616 161616161616161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616161616161616151515151515151515151515151515151515151515 151515151515151515151515151515151515151515141414141414141414141414141414141414 141414141414131313131313131313131313131313131313121212121212121212121212121212 1111111111111111111111111010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E 0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B040202050101050101050101050101 0501010501010200008D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000000000 0D0D0D212121212121212121212121212121212121212121212121212121212121212121212121 212121212121212121202020202020202020202020202020202020202020202020202020202020 2020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919 191919191919191919191919181818181818181818181818181818181818171717171717171717 1B1B1B1E1E1E2121212222222424242626262828282929292A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2B2B2B2A2A2A292929272727262626191919020202000000000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC 6C6C6C1E1E1E161616101010040404000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000060606111111 171717242424818181F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAA070707000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000090909090909090909101010161616161616191919 1919191D1D1D1D1D1D1D1D1D2020202020202020202020201D1D1D1D1D1D1D1D1D191919191919 161616101010101010090909090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000181818E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAA000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C1010101414141919191C1C1C1F1F1F222222 2424242727272929292D2D2D2F2F2F3131313333333535353737373838383939393A3A3A3C3C3C 3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3D3D3D 3C3C3C3C3C3C3B3B3B3939393737373636363535353333333232322F2F2F2D2D2D2C2C2C2A2A2A 2727272525252121211E1E1E1B1B1B1717171414141111110A0A0A070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404050505050505050505050505050505050505050505050505050505050505050505050505 050505040404020202000000000000000000000000000000000000000000000000000000000000 222222B6B6B6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFBBBBBB0000000000000000000000000000000000000000000000000202020D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010 101010101010101010101010101010101010111111111111111111111111111111111111111111 111111111111111111121212121212121212121212121212121212121212121212121212121212 131313131313131313131313131313131313131313131313131313131313131313131313141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414151515151515151515151515151515151515151515151515151515151515151515151515 151515151515151515151515151515151515151515151515151515151515151515151515151515 151515151515151515151515151515151515151515151515151515151515151515151515151515 151515151515151515151515151515151515151515151515151515151515151515151515151515 151515151515151515141414141414141414141414141414141414141414141414141414131313 131313131313131313131313131313131313121212121212121212121212121212121212111111 1111111111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E 0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0A0A0A0A0A0A040202050101050101 0501010501010501010501010200008C8C8CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000 0000000000000D0D0D212121212121212121212121212121212121212121212121212121212121 202020202020202020202020202020202020202020202020202020202020202020202020202020 2020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919 191919191919191919191919181818181818181818181818181818181818171717171717171717 1717171717171B1B1B1D1D1D2020202222222424242626262828282828282A2A2A2B2B2B2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A292929272727262626181818020202000000000000000000000000 0000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDCDCDCBCBCBCA2A2A2999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 A4A4A4C1C1C1E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCF131313000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909090909090909101010161616 1616161919191919191919191D1D1D1D1D1D2020202020202020201D1D1D1D1D1D1D1D1D191919 191919161616161616101010090909090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000181818F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E3E3E000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060606060909090E0E0E1313131616161A1A1A 1D1D1D2121212424242626262828282B2B2B2E2E2E303030323232343434363636373737383838 3A3A3A3C3C3C3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F4040404040403F3F3F3F3F3F 3F3F3F3E3E3E3E3E3E3D3D3D3C3C3C3A3A3A3939393737373636363535353333333131312F2F2F 2E2E2E2C2C2C2929292727272323232121211D1D1D1A1A1A1616161414140F0F0F0A0A0A020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 040404040404040404040404040404050505050505050505050505050505050505050505050505 050505050505050505050505050505030303000000000000000000000000000000000000000000 000000000000000000000000444444D6D6D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFD1B1B1B000000000000000000000000000000000000000000000000 0A0A0A0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F101010101010101010101010101010101010101010101010101010111111111111 111111111111111111111111111111111111111111111111121212121212121212121212121212 121212121212121212121212121212121212131313131313131313131313131313131313131313 131313131313131313131313131313131313141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414151515151515 151515151515151515151515151515151515151515151515151515151515151515151515151515 151515151515151515151515151515151515151515151515151515151515151515151515151515 151515151515151515151515151515151515151515151515151515151515141414141414141414 141414141414141414141414141414141414141414141414141414131313131313131313131313 131313131313131313131313121212121212121212121212121212121212111111111111111111 1111111111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E 0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A090909040202 0501010501010501010501010501010501010200008D8D8DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000 0000000000000000000000000D0D0D212121212121212121212121212121202020202020202020 2020202020202020202020202020202020202020202020202020202020202020202020201F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919 191919191919191919191919181818181818181818181818181818181818181818171717171717 1717171717171717171717171A1A1A1D1D1D2020202222222424242525252727272828282A2A2A 2B2B2B2B2B2B2A2A2A2B2B2B2A2A2A2A2A2A292929262626252525181818020202000000000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7171717000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909090909 1010101010101616161616161919191D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D191919 191919191919191919161616101010101010090909090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000191919FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC 020202000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101060606090909101010 1414141818181B1B1B1D1D1D2121212323232626262929292C2C2C2E2E2E303030323232343434 3636363838383939393B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F3F3F3F404040414141414141 4141414040404040403F3F3F3E3E3E3E3E3E3D3D3D3C3C3C3A3A3A393939383838373737353535 3232323131313030302E2E2E2A2A2A2828282525252222221F1F1F1D1D1D1A1A1A161616121212 0F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404040404040404050505050505050505050505050505 050505050505050505050505050505050505050505050505040404010101000000000000000000 000000000000000000000000000000000000000000070707787878F3F3F3FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6A6A6A000000000000000000000000000000000000 0000000000000606060C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010 101010101010101010111111111111111111111111111111111111111111111111111111111111 111111121212121212121212121212121212121212121212121212121212121212121212121212 131313131313131313131313131313131313131313131313131313131313131313131313131313 131313141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414131313131313131313131313131313131313131313 131313131313121212121212121212121212121212121212121212111111111111111111111111 1111111010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E 0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A090909 0909090402020501010501010501010501010501010501010200008C8C8CFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000 0000000000000000000000000000000000000D0D0D202020202020202020202020202020202020 2020202020202020202020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919 191919191919191919191919181818181818181818181818181818181818181818171717171717 1717171717171717171717171616161616161A1A1A1D1D1D202020232323232323262626262626 2828282A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2A2A2A2A2A2A282828262626252525181818020202 0000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 2C2C2C000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000090909101010101010161616161616161616191919191919191919191919191919191919 191919191919191919191919161616161616101010090909090909090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000252525FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF666666000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C1111111515151919191C1C1C1E1E1E2222222525252828282B2B2B2D2D2D2F2F2F 3131313333333636363737373838383A3A3A3C3C3C3D3D3D3E3E3E3E3E3E3E3E3E3F3F3F404040 4141414141414141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3B3B3B3A3A3A393939 3838383737373535353232323131313030302D2D2D2A2A2A2727272525252222221F1F1F1D1D1D 1919191515151111110F0F0F0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404040404040404050505050505 050505050505050505050505050505050505050505050505050505050505050505050505040404 0000000000000000000000000000000000000000000000000000000000000000001B1B1B9F9F9F FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C9C9C000000000000000000000000 0000000000000000000000000303030C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010 101010101010101010101010101010101010101010101010111111111111111111111111111111 111111111111111111111111111111111111121212121212121212121212121212121212121212 121212121212121212121212121212121212131313131313131313131313131313131313131313 131313131313131313131313131313131313131313131313131313131313131313141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 131313131313131313131313131313131313131313131313131313131313131313131313121212 121212121212121212121212121212121212121212111111111111111111111111111111111111 1010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0D0D0D 0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A090909 0909090909090909090402020501010501010501010501010501010501010200008B8B8BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313 0000000000000000000000000000000000000000000000000D0D0D202020202020202020202020 2020202020202020202020202020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919 191919191919191919191919181818181818181818181818181818181818181818171717171717 1717171717171717171717171616161616161616161616161A1A1A1D1D1D1F1F1F222222232323 2626262626262727272929292A2A2A2A2A2A2A2A2A2B2B2B2A2A2A292929282828262626252525 1818180202020000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF8B8B8B020202000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000090909101010101010101010161616161616191919191919191919191919 191919191919191919191919161616161616161616101010101010090909090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000616161FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFECECEC141414000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090E0E0E1313131515151A1A1A1C1C1C202020242424272727292929 2C2C2C2E2E2E3030303232323535353636363838383939393B3B3B3C3C3C3D3D3D3D3D3D3E3E3E 3F3F3F3F3F3F4040404141414141414141414040403F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3C3C3C 3B3B3B3A3A3A3A3A3A3838383737373535353333333131312F2F2F2D2D2D2A2A2A272727252525 2222221F1F1F1C1C1C1717171515151212120F0F0F0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404050505050505050505050505050505050505050505050505050505050505050505050505 050505050505040404010101000000000000000000000000000000000000000000000000000000 0000000000002C2C2CB3B3B3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5C5C5000000000000 0000000000000000000000000000000000000000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010101010101010 101010111111111111111111111111111111111111111111111111111111111111111111111111 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212131313131313131313131313131313131313131313131313131313131313131313131313 131313131313131313131313131313131313131313131313131313131313131313131313141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414131313131313131313131313131313131313131313131313131313131313 131313131313131313131313131313131313131313131313131313121212121212121212121212 121212121212121212121212121212111111111111111111111111111111111111101010101010 1010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D 0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909080808080808040202050101050101050101050101050101050101020000 8B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D6D6D61313130000000000000000000000000000000000000000000000000D0D0D202020202020 2020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919 191919191919191919191919181818181818181818181818181818181818181818171717171717 1717171717171717171717171616161616161616161616161616161616161A1A1A1C1C1C1F1F1F 2222222525252626262626262727272929292A2A2A2A2A2A2A2A2A2B2B2B2A2A2A292929282828 2626262424241818180202020000000000000000000000000000000000000000000000000B0B0B FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEAEAEA0F0F0F000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000090909090909101010101010101010161616161616161616 161616161616161616161616161616161616161616161616101010101010090909090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000F0F0FB7B7B7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9A9A9A000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C1010101414141818181C1C1C1E1E1E212121 2424242828282A2A2A2D2D2D2F2F2F3131313333333535353737373838383A3A3A3C3C3C3C3C3C 3D3D3D3E3E3E3E3E3E3F3F3F4040404141414141414141414141414040404040404040403F3F3F 3F3F3F3E3E3E3C3C3C3C3C3C3A3A3A3939393737373636363535353232323030302E2E2E2C2C2C 2929292727272424242222221E1E1E1B1B1B1717171515151212120D0D0D0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 040404040404040404040404040404050505050505050505050505050505050505050505050505 050505050505050505050505050505050505040404000000000000000000000000000000000000 000000000000000000000000000000000000383838C1C1C1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2D2D2 0000000000000000000000000000000000000000000000000000000A0A0A0B0B0B0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010 101010101010101010101010101010101010101010111111111111111111111111111111111111 111111111111111111111111111111111111121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212131313131313131313 131313131313131313131313131313131313131313131313131313131313131313131313131313 131313131313131313131313131313131313131313131313131313131313131313131313131313 131313131313131313131313131313131313131313131313131313131313131313131313131313 131313131313131313131313121212121212121212121212121212121212121212121212121212 121212121212111111111111111111111111111111111111111111101010101010101010101010 1010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D 0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909080808080808080808040202050101050101050101050101050101 0501010200008B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD6D6D61313130000000000000000000000000000000000000000000000000D0D0D 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919 191919191919191919191919181818181818181818181818181818181818181818171717171717 1717171717171717171717171616161616161616161616161616161616161515151515151A1A1A 1C1C1C2121212222222424242525252626262727272A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2A2A2A 292929272727252525242424181818020202000000000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF545454000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000090909090909101010101010101010101010 161616161616161616161616161616161616161616101010101010101010101010090909090909 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 181818FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD373737000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060C0C0C0E0E0E1313131616161A1A1A 1C1C1C1F1F1F2222222626262929292B2B2B2D2D2D303030323232343434353535373737393939 3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3F3F3F404040414141414141414141414141414141414141 4141414141414040403F3F3F3E3E3E3D3D3D3C3C3C3A3A3A383838373737363636343434313131 2F2F2F2D2D2D2B2B2B2828282626262424242121211D1D1D1B1B1B1717171515151111110D0D0D 070707070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404040404040404050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505020202000000000000 0000000000000000000000000000000000000000000000000000000101014B4B4BC7C7C7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD4D4D40000000000000000000000000000000000000000000000000000000909090B0B0B 0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010101010101010101010101010101010 111111111111111111111111111111111111111111111111111111111111111111111111111111 111111121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212131313131313131313131313 131313131313131313131313131313131313131313131313131313131313131313131313131313 131313131313131313131313131313131313131313131313121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212111111 111111111111111111111111111111111111111111101010101010101010101010101010101010 1010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D 0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909080808080808080808080808070707040202050101050101050101 0501010501010501010200008A8A8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000 0000000D0D0D1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919 191919191919191919191919181818181818181818181818181818181818181818171717171717 171717171717171717171717161616161616161616161616161616161616151515151515151515 1515151A1A1A1C1C1C2020202222222424242525252626262727272929292A2A2A2A2A2A2A2A2A 2B2B2B2A2A2A282828272727252525242424181818020202000000000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E3080808000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000808080808080808080F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 080808080808000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000303036A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCDCDCD 030303000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C101010 1414141919191B1B1B1D1D1D2121212424242727272929292C2C2C2E2E2E313131323232343434 3737373939393A3A3A3C3C3C3C3C3C3D3D3D3E3E3E3F3F3F404040414141414141424242424242 4141414141414141414141414141414040403F3F3F3E3E3E3D3D3D3B3B3B3A3A3A383838383838 3636363333333131312E2E2E2E2E2E2B2B2B2929292727272424242121211D1D1D1B1B1B171717 1414140F0F0F0D0D0D0A0A0A060606020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 040404010101000000000000000000000000000000000000000000000000000000000000000000 0000003B3B3BBCBCBCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFBABABA000000000000000000000000000000000000000000000000000000 0808080B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010 101010101010101010101010101010101010111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212111111111111111111111111111111111111 1111111111111111111111111111111010101010101010101010101010101010101010100F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909080808080808080808080808070707070707070707040202050101 0501010501010501010501010501010200008A8A8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000 0000000000000000000D0D0D1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919 191919191919191919191919181818181818181818181818181818181818181818171717171717 171717171717171717171717161616161616161616161616161616161616161616151515151515 1515151515151515151A1A1A1E1E1E2020202222222424242626262525252828282929292A2A2A 2A2A2A2A2A2A2A2A2A292929282828272727252525232323171717020202000000000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727272 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101020202020202020202020202020202020202020202020202020202020202 020202010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000161616E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF6A6A6A000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090E0E0E1111111616161A1A1A1C1C1C2020202323232626262929292B2B2B2E2E2E303030 3232323434343636363838383A3A3A3B3B3B3C3C3C3C3C3C3E3E3E3F3F3F404040414141424242 4242424242424242424242424242424242424242424141414040403F3F3F3F3F3F3D3D3D3C3C3C 3A3A3A3A3A3A3838383636363333333131312F2F2F2E2E2E2C2C2C2A2A2A272727232323212121 1E1E1E1B1B1B1717171414141111110D0D0D0A0A0A060606020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505030303000000000000000000000000000000000000000000000000 0000000000000000000000000000003F3F3FB4B4B4FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF979797000000000000000000000000000000000000000000 0000000000000707070B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 101010101010101010101010101010101010101010101010101010101010101010101010101010 101010111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 111111111111111111111111111111111111111111111111111111111111111111111111111111 1111111010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909080808080808080808080808080808070707070707070707070707 040202050101050101050101050101050101050101020000898989FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000 0000000000000000000000000000000C0C0C1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919 191919191919191919191919181818181818181818181818181818181818181818171717171717 171717171717171717171717161616161616161616161616161616161616161616151515151515 1515151515151515151515151919191B1B1B1E1E1E202020222222252525252525262626282828 2A2A2A2A2A2A2929292929292A2A2A292929282828272727242424232323171717020202000000 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFD181818000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000909097B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF1F1F1191919000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909091010101313131818181B1B1B1E1E1E2222222424242727272A2A2A 2D2D2D2F2F2F3131313333333535353737373939393A3A3A3B3B3B3C3C3C3E3E3E3E3E3E3F3F3F 4141414141414242424242424242424242424242424242424242424141414141414040403F3F3F 3F3F3F3E3E3E3C3C3C3B3B3B3A3A3A3737373535353333333232322F2F2F2E2E2E2C2C2C292929 2525252323232121211D1D1D1A1A1A1616161414140F0F0F0D0D0D0A0A0A020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 040404040404040404040404040404050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505020202000000000000000000000000 000000000000000000000000000000000000000000000000000000232323888888EFEFEFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5A5A5A000000000000000000000000000000 0000000000000000000000000808080A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010101010111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111101010101010101010 1010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C 0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909080808080808080808080808080808070707070707070707070707 060606060606040202050101050101050101050101050101050101020000898989FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000 0000000000000000000000000000000000000000000C0C0C1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919 191919191919191919181818181818181818181818181818181818181818171717171717171717 171717171717171717171717161616161616161616161616161616161616161616151515151515 1515151515151515151515151414141414141919191B1B1B1E1E1E202020212121242424252525 2626262828282A2A2A2929292929292929292A2A2A292929282828262626262626232323181818 0202020000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE4E4E4050505000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000262626F9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060C0C0C1010101515151919191C1C1C202020222222 2525252828282B2B2B2E2E2E3030303232323434343535353737373838383B3B3B3D3D3D3E3E3E 3E3E3E3F3F3F404040414141424242424242434343434343434343424242424242414141414141 4141413F3F3F3F3F3F3E3E3E3E3E3E3C3C3C3A3A3A3838383737373636363434343131312E2E2E 2C2C2C2A2A2A2828282525252323232020201D1D1D1A1A1A1616161212120F0F0F0D0D0D070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505040404010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 0F0F0F727272D6D6D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9151515000000000000000000 0000000000000000000000000000000000000909090A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F101010101010101010101010101010101010101010101010101010101010101010101010 101010101010101010101010101010101010111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111111111 111111111111111111111111101010101010101010101010101010101010101010101010101010 1010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C 0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909080808080808080808080808080808070707070707070707070707 060606060606060606060606030101050101050101050101050101050101050101020000888888 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6 1313130000000000000000000000000000000000000000000000000C0C0C1E1E1E1E1E1E1E1E1E 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919 191919191919191919181818181818181818181818181818181818181818171717171717171717 171717171717171717171717161616161616161616161616161616161616161616151515151515 1515151515151515151515151414141414141414141414141919191B1B1B1D1D1D1F1F1F212121 2424242525252626262727272929292A2A2A2A2A2A2A2A2A2B2B2B292929282828272727262626 2424241717170202020000000000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDBDBD030303000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000171717DCDCDCFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE444444000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090E0E0E1313131616161A1A1A 1D1D1D2020202222222626262929292C2C2C2F2F2F3131313232323434343535353838383A3A3A 3C3C3C3D3D3D3E3E3E3F3F3F3F3F3F414141424242424242434343434343434343424242424242 4141414141414141414040403F3F3F3F3F3F3E3E3E3D3D3D3B3B3B393939383838383838363636 3232323030302E2E2E2C2C2C2A2A2A2828282525252323231F1F1F1D1D1D1A1A1A161616121212 0F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404040404040404050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505060606030303000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000333333909090ECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8A8A8000000000000 0000000000000000000000000000000000000000000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C 0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909080808080808080808080808080808070707070707070707070707 070707060606060606060606060606050505030101050101050101050101050101050101050101 020000888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD6D6D61313130000000000000000000000000000000000000000000000000C0C0C1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919 191919191919181818181818181818181818181818181818181818181818171717171717171717 171717171717171717171717161616161616161616161616161616161616161616151515151515 1515151515151515151515151414141414141414141414141414141414141818181A1A1A1D1D1D 1F1F1F2121212424242424242525252727272929292A2A2A2A2A2A2929292A2A2A292929282828 272727252525232323171717020202000000000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAA040404000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000141414C2C2C2FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDB 090909000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060C0C0C101010 1313131616161B1B1B1D1D1D2121212424242727272A2A2A2D2D2D2F2F2F323232323232343434 3737373939393B3B3B3C3C3C3D3D3D3E3E3E3F3F3F404040414141424242434343434343434343 4242424242424242424242424141414141414040404040403F3F3F3E3E3E3C3C3C3B3B3B3A3A3A 3939393838383535353232323131312F2F2F2C2C2C2A2A2A2828282525252323231F1F1F1D1D1D 1A1A1A1616161414140F0F0F0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505020202000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909585858ABABABF3F3F3 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD303030 0000000000000000000000000000000000000000000000000000000202020A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 1010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909 090909090909090909090909080808080808080808080808080808070707070707070707070707 070707060606060606060606060606050505050505050505030101050101050101050101050101 050101050101020000878787FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000000000 0C0C0C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919 191919191919181818181818181818181818181818181818181818181818171717171717171717 171717171717171717171717161616161616161616161616161616161616161616151515151515 151515151515151515151515141414141414141414141414141414141414131313131313181818 1A1A1A1D1D1D1F1F1F2121212323232424242525252727272929292929292929292929292A2A2A 292929282828262626252525232323171717020202000000000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF B5B5B50A0A0A000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000161616C0C0C0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF888888000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090E0E0E1111111515151919191C1C1C1F1F1F2222222626262828282B2B2B2D2D2D303030 3131313333333535353838383A3A3A3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F414141414141424242 4343434343434343434343434242424242424242424141414141414141414141413F3F3F3E3E3E 3C3C3C3C3C3C3A3A3A3838383636363434343232323030302E2E2E2B2B2B2A2A2A282828252525 2222221F1F1F1D1D1D1A1A1A1616161414140F0F0F0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303030303030303040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505060606050505010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000808084D4D4D9E9E9EEBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 9B9B9B0000000000000000000000000000000000000000000000000000000000000505050A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010 1010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909 090909090909090909090909080808080808080808080808080808080808070707070707070707 070707060606060606060606060606050505050505050505050505040404030101050101050101 050101050101050101050101020000868686FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000 0000000000000C0C0C1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191919 191919181818181818181818181818181818181818181818181818171717171717171717171717 171717171717171717171717161616161616161616161616161616161616161616151515151515 151515151515151515151515141414141414141414141414141414141414141414131313131313 1313131818181A1A1A1D1D1D202020212121232323242424252525272727282828292929292929 2929292A2A2A282828272727262626252525232323171717020202000000000000000000000000 0000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD3D3D31B1B1B020202000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000080808242424D9D9D9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFB303030000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060C0C0C1010101313131616161A1A1A1D1D1D212121242424272727292929 2B2B2B2E2E2E3030303232323434343737373838383939393A3A3A3C3C3C3E3E3E3F3F3F404040 414141424242424242434343434343434343434343434343434343434343434343434343424242 4141414040403E3E3E3E3E3E3C3C3C3A3A3A3737373535353434343232323030302D2D2D2C2C2C 2A2A2A2727272424242222221F1F1F1D1D1D1A1A1A1616161212120D0D0D070707070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505060606 040404010101000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000303033F3F3F9A9A9AF0F0F0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD6D6D60C0C0C000000000000000000000000000000000000000000000000000000000000 0707070909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909 090909090909090909090909080808080808080808080808080808080808070707070707070707 070707070707060606060606060606060606050505050505050505050505040404040404030101 050101050101050101050101050101050101020000868686FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000 0000000000000000000000000B0B0B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191919191919 181818181818181818181818181818181818181818181818171717171717171717171717171717 171717171717171717161616161616161616161616161616161616161616151515151515151515 151515151515151515151515141414141414141414141414141414141414141414131313131313 1313131313131313131818181C1C1C1E1E1E202020212121232323252525242424272727282828 292929292929292929292929282828272727262626252525232323171717020202000000000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4686868121212000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101151515717171F7F7F7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCB030303000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010909090C0C0C1010101414141818181C1C1C1F1F1F222222 2424242727272929292C2C2C2E2E2E3030303232323535353737373838383939393B3B3B3D3D3D 3E3E3E3F3F3F414141424242424242434343434343434343434343434343444444434343434343 4343434343434242424141414040403F3F3F3D3D3D3B3B3B393939373737363636343434323232 3030302E2E2E2C2C2C2A2A2A2727272525252323231F1F1F1D1D1D1A1A1A1616161212120D0D0D 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505060606030303010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909575757 AAAAAAF3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE6E6E6252525000000000000000000000000000000000000000000000000000000 0000000101010909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909 090909090909090909080808080808080808080808080808080808080808070707070707070707 070707070707060606060606060606060606050505050505050505050505040404040404040404 030303030101050101050101050101050101050101050101020000858585FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000 0000000000000000000000000000000000000B0B0B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A191919191919191919191919191919191919191919191919191919191919181818 181818181818181818181818181818181818181818181818171717171717171717171717171717 171717171717171717161616161616161616161616161616161616161616151515151515151515 151515151515151515151515141414141414141414141414141414141414141414131313131313 1313131313131313131313131717171919191C1C1C1E1E1E202020222222232323242424262626 272727292929292929282828282828292929282828272727262626252525222222171717020202 0000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD545454161616 080808000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000B0B0B1717175B5B5BE2E2E2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727272000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090E0E0E111111151515191919 1C1C1C2020202222222626262929292B2B2B2D2D2D2F2F2F323232353535373737383838383838 3A3A3A3C3C3C3E3E3E3F3F3F404040424242424242424242434343434343444444444444444444 4444444444444444444444444343434242424141414040403F3F3F3D3D3D3B3B3B393939383838 3737373434343232323131312F2F2F2C2C2C2A2A2A2828282525252323232020201D1D1D1A1A1A 1616161212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505060606040404010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000909094F4F4FA1A1A1E8E8E8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDDDDDD282828000000000000000000000000000000000000000000000000 0000000000000000000505050909090909090909090909090909090909090909090909090A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909 090909090909090909080808080808080808080808080808080808070707070707070707070707 070707070707060606060606060606060606050505050505050505050505040404040404040404 040404030303030303030101050101050101050101050101050101050101020000858585FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313 0000000000000000000000000000000000000000000000000B0B0B1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A191919191919191919191919191919191919191919191919191919191919181818181818 181818181818181818181818181818181818181818171717171717171717171717171717171717 171717171717161616161616161616161616161616161616161616161616151515151515151515 151515151515151515151515141414141414141414141414141414141414141414131313131313 1313131313131313131313131212121212121717171919191C1C1C1E1E1E1F1F1F212121232323 242424262626272727282828282828282828282828292929282828272727262626242424222222 1717170202020000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF2F2F2A1A1A14848481C1C1C171717171717161616141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 1414141414141414141414141414141414141616161717171717171D1D1D4C4C4CA4A4A4F5F5F5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4 212121000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060C0C0C101010 1313131616161B1B1B1D1D1D2121212424242727272929292C2C2C2E2E2E313131333333353535 3737373838383A3A3A3C3C3C3D3D3D3E3E3E3F3F3F414141424242424242434343434343444444 4444444444444444444444444444444444444343434343434242424141414040403F3F3F3E3E3E 3C3C3C3A3A3A3939393737373535353333333131312E2E2E2C2C2C2A2A2A292929252525232323 1F1F1F1D1D1D1A1A1A1616161414140F0F0F0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505060606060606030303 010101000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000101012D2D2D717171B4B4B4F3F3F3 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFAAAAAA101010000000000000000000000000000000000000000000 000000000000000000000000010101090909090909090909090909090909090909090909090909 0909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909 090909090909090909080808080808080808080808080808080808070707070707070707070707 070707070707060606060606060606060606060606050505050505050505050505040404040404 040404030303030303030303030303030101050101050101050101050101050101050101020000 848484FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D6D6D61313130000000000000000000000000000000000000000000000000B0B0B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919 191919191919191919191919191919191919191919191919191919191919181818181818181818 181818181818181818181818181818181818171717171717171717171717171717171717171717 171717171717161616161616161616161616161616161616161616161616151515151515151515 151515151515151515151515141414141414141414141414141414141414141414131313131313 1313131313131313131313131212121212121212121212121717171919191B1B1B1D1D1D1F1F1F 212121232323242424252525272727282828292929282828292929292929282828262626252525 2424242222221717170202020000000000000000000000000000000000000000000000000B0B0B FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8DFDFDFD2D2D2CCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD3D3D3E0E0E0F9F9F9FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB9B9B9010101000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C1010101414141818181C1C1C1E1E1E2121212424242828282929292C2C2C2E2E2E 3030303232323535353737373939393A3A3A3B3B3B3D3D3D3E3E3E404040414141424242434343 444444444444444444444444444444444444444444444444444444434343424242424242414141 4040403F3F3F3E3E3E3D3D3D3A3A3A3838383737373535353333333131312F2F2F2D2D2D2B2B2B 2828282525252222221F1F1F1C1C1C1919191616161212120F0F0F0A0A0A070707020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505060606060606040404010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000505053C3C3C727272A4A4A4D6D6D6FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEC0C0C0414141000000000000000000000000000000000000000000 000000000000000000000000000000000000060606090909090909090909090909090909090909 0909090909090909090909090909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909 090909090909080808080808080808080808080808080808080808070707070707070707070707 070707070707060606060606060606060606060606050505050505050505050505040404040404 040404040404030303030303030303020202020202030101050101050101050101050101050101 050101020000848484FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD6D6D61313130000000000000000000000000000000000000000000000000B0B0B 1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919 191919191919191919191919191919191919191919191919181818181818181818181818181818 181818181818181818181818181818171717171717171717171717171717171717171717171717 171717161616161616161616161616161616161616161616161616151515151515151515151515 151515151515151515151515141414141414141414141414141414141414141414131313131313 1313131313131313131313131212121212121212121212121212121212121616161818181D1D1D 202020222222232323242424262626272727272727282828292929292929292929292929282828 272727252525242424222222171717020202000000000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF656565000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090E0E0E1111111515151A1A1A1C1C1C1F1F1F222222262626272727 2929292C2C2C2E2E2E3131313434343636363838383A3A3A3A3A3A3C3C3C3E3E3E3F3F3F404040 414141434343444444444444444444444444444444444444444444444444444444444444434343 4242424141414141414040403F3F3F3E3E3E3C3C3C3A3A3A383838373737353535333333313131 2F2F2F2D2D2D2929292828282424242222221F1F1F1D1D1D1A1A1A1616161212120F0F0F0A0A0A 070707020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505060606060606050505020202000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000C0C0C3B3B3B6D6D6D9F9F9FC0C0C0 D5D5D5D8D8D8C8C8C8A6A6A66E6E6E242424000000000000000000000000000000000000000000 000000000000000000000000000000000000000000020202090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909090909 090909080808080808080808080808080808080808080808080808070707070707070707070707 070707070707060606060606060606060606060606050505050505050505050505040404040404 040404040404030303030303030303030303020202020202020202030101050101050101050101 050101050101050101020000838383FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000 0000000B0B0B1B1B1B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919 191919191919191919191919191919191919191919181818181818181818181818181818181818 181818181818181818181818171717171717171717171717171717171717171717171717171717 161616161616161616161616161616161616161616161616161616151515151515151515151515 151515151515151515141414141414141414141414141414141414141414131313131313131313 131313131313131313131313121212121212121212121212121212121212121212111111161616 1B1B1B1D1D1D202020222222222222232323262626272727282828282828292929292929282828 282828282828272727252525242424222222171717020202000000000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4232323000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1313131616161A1A1A1C1C1C202020 2222222525252727272A2A2A2D2D2D3030303232323535353737373838383A3A3A3B3B3B3D3D3D 3F3F3F3F3F3F414141424242434343444444444444444444444444444444444444454545444444 4444444444444343434242424242424141414040403F3F3F3D3D3D3B3B3B3A3A3A393939383838 3535353333333232323030302C2C2C2929292727272525252222222020201D1D1D1A1A1A161616 1212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505060606060606050505030303 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101070707080808090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909090909090909090909 090909080808080808080808080808080808080808080808080808070707070707070707070707 070707070707060606060606060606060606060606050505050505050505050505050505040404 040404040404040404030303030303030303020202020202020202020202020202030101050101 050101050101050101050101050101020000838383FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000 0000000000000000000B0B0B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919191919191919191919191919 191919191919191919191919191919181818181818181818181818181818181818181818181818 181818181818181818171717171717171717171717171717171717171717171717171717161616 161616161616161616161616161616161616161616161616151515151515151515151515151515 151515151515151515141414141414141414141414141414141414141414131313131313131313 131313131313131313131313121212121212121212121212121212121212121212111111111111 1111111616161B1B1B1D1D1D1F1F1F212121222222232323262626272727282828282828282828 282828282828282828282828272727252525242424222222171717020202000000000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEBEBE010101000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060C0C0C111111151515181818 1A1A1A1D1D1D2121212424242626262929292B2B2B2E2E2E303030333333363636373737383838 3A3A3A3C3C3C3E3E3E3F3F3F404040414141434343434343444444444444444444444444454545 4545454545454545454444444444444343434343434343434141414040403E3E3E3D3D3D3C3C3C 3A3A3A3939393737373535353434343232322E2E2E2C2C2C292929282828252525232323202020 1D1D1D1919191616161212120F0F0F0A0A0A070707020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 060606060606060606050505030303010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000060606080808080808 080808080808080808090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 0C0C0C0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A090909090909090909090909090909090909090909090909090909090909090909090909 080808080808080808080808080808080808080808080808070707070707070707070707070707 070707070707060606060606060606060606060606050505050505050505050505050505040404 040404040404040404030303030303030303030303020202020202020202020202020202020202 030101050101050101050101050101050101050101020000838383FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000 0000000000000000000000000000000B0B0B1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A191919191919191919191919191919191919191919191919191919191919191919191919 191919191919191919181818181818181818181818181818181818181818181818181818181818 181818171717171717171717171717171717171717171717171717171717171717161616161616 161616161616161616161616161616161616161616151515151515151515151515151515151515 151515151515141414141414141414141414141414141414141414141414131313131313131313 131313131313131313131313121212121212121212121212121212121212121212111111111111 1111111111111616161818181A1A1A1C1C1C1F1F1F212121222222252525262626272727272727 282828282828282828282828282828282828272727252525242424212121161616020202000000 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 6B6B6B000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090E0E0E 1313131515151919191C1C1C2020202222222525252828282A2A2A2D2D2D2E2E2E323232343434 3636363737373939393B3B3B3C3C3C3E3E3E3F3F3F414141424242434343434343444444444444 444444454545464646464646464646454545454545444444444444444444434343424242404040 3F3F3F3E3E3E3C3C3C3A3A3A3838383737373535353333333030302E2E2E2B2B2B292929262626 2525252323232020201D1D1D1919191616161212120D0D0D070707070707020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505060606060606060606060606050505030303010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000060606080808 080808080808080808080808080808080808080808080808090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909090909090909090909090909090909090909090909090909080808 080808080808080808080808080808080808080808080808070707070707070707070707070707 070707070707060606060606060606060606060606050505050505050505050505050505040404 040404040404040404030303030303030303030303020202020202020202020202020202020202 020202020202030101050101050101050101050101050101050101020000828282FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000 0000000000000000000000000000000000000000000B0B0B1A1A1A191919191919191919191919 191919191919191919191919191919191919191919191919191919191919191919191919191919 181818181818181818181818181818181818181818181818181818181818181818181818181818 171717171717171717171717171717171717171717171717171717171717161616161616161616 161616161616161616161616161616161616151515151515151515151515151515151515151515 151515151515141414141414141414141414141414141414141414131313131313131313131313 131313131313131313131313121212121212121212121212121212121212121212111111111111 1111111111111111111111111515151717171A1A1A1C1C1C1F1F1F212121222222252525262626 272727282828282828282828282828282828282828282828272727252525232323212121161616 0202020000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF5F5F5252525000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060C0C0C1010101313131616161A1A1A1D1D1D2121212323232626262929292B2B2B2D2D2D 3030303333333535353636363838383A3A3A3C3C3C3D3D3D3E3E3E404040424242434343434343 444444444444444444454545464646464646464646464646464646454545444444444444444444 4343434141414040403F3F3F3E3E3E3C3C3C3A3A3A3939393838383636363333333030302E2E2E 2C2C2C2929292727272626262323232020201D1D1D1A1A1A1616161212120D0D0D0A0A0A070707 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505060606060606060606060606060606 050505030303010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101060606 080808080808080808080808080808080808080808080808080808080808080808080808080808 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090909090909090909090909090909090909090A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909 090909090909090909090909090909090909090909090909090909090909090909080808080808 080808080808080808080808080808080808080808070707070707070707070707070707070707 070707060606060606060606060606060606060606050505050505050505050505050505040404 040404040404040404040404030303030303030303030303020202020202020202020202020202 020202020202020202020202030101050101050101050101050101050101050101020000828282 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6 1313130000000000000000000000000000000000000000000000000A0A0A191919191919191919 191919191919191919191919191919191919191919191919191919191919181818181818181818 181818181818181818181818181818181818181818181818181818181818181818171717171717 171717171717171717171717171717171717171717171717171717161616161616161616161616 161616161616161616161616161616151515151515151515151515151515151515151515151515 151515141414141414141414141414141414141414141414141414131313131313131313131313 131313131313131313121212121212121212121212121212121212121212111111111111111111 1111111111111111111111111010101010101515151717171C1C1C1E1E1E1F1F1F222222232323 242424262626272727282828282828282828282828282828282828282828262626242424232323 2121211616160202020000000000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC5C5C5030303000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090E0E0E1010101313131818181C1C1C1E1E1E212121242424272727 2929292C2C2C2F2F2F3232323434343535353838383939393B3B3B3C3C3C3E3E3E404040414141 434343434343434343444444454545464646464646474747474747474747464646464646454545 4545454545454444444343434141414040404040403E3E3E3D3D3D3B3B3B3A3A3A383838353535 3333333131312F2F2F2D2D2D2B2B2B2929292727272323232020201D1D1D1A1A1A161616121212 0F0F0F0A0A0A070707020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505060606 060606060606060606060606060606050505030303010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000020202 070707080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909080808080808080808080808 080808080808080808080808080808080808070707070707070707070707070707070707070707 070707060606060606060606060606060606060606050505050505050505050505050505040404 040404040404040404040404030303030303030303030303020202020202020202020202020202 020202020202020202020202020202020202030101050101050101050101050101050101050101 020000818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD6D6D61313130000000000000000000000000000000000000000000000000A0A0A191919 191919191919191919191919191919191919181818181818181818181818181818181818181818 181818181818181818181818181818181818181818181818171717171717171717171717171717 171717171717171717171717171717171717171717161616161616161616161616161616161616 161616161616161616161616151515151515151515151515151515151515151515151515151515 141414141414141414141414141414141414141414141414141414131313131313131313131313 131313131313131313121212121212121212121212121212121212121212111111111111111111 1111111111111111111111111010101010101010101515151515151A1A1A1C1C1C1E1E1E1F1F1F 212121222222242424262626272727282828282828282828282828282828272727272727262626 242424232323212121161616020202000000000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727272000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1111111515151919191C1C1C1F1F1F 2222222424242828282B2B2B2E2E2E3131313232323434343737373838383A3A3A3C3C3C3E3E3E 3F3F3F404040414141434343434343444444454545464646464646474747474747474747474747 4646464646464646464646464545454444444343434242424141414040403F3F3F3E3E3E3C3C3C 3A3A3A3838383636363333333232322F2F2F2D2D2D2B2B2B2828282525252323232020201D1D1D 1B1B1B1616161414140F0F0F0A0A0A070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505060606060606060606060606060606060606060606060606040404020202 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 040404080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909080808080808080808080808080808 080808080808080808080808080808080808070707070707070707070707070707070707070707 070707060606060606060606060606060606060606050505050505050505050505050505050505 040404040404040404040404030303030303030303030303020202020202020202020202020202 020202020202020202020202020202020202020202020202030101050101050101050101050101 050101050101020000818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000000000 0A0A0A181818181818181818181818181818181818181818181818181818181818181818181818 181818181818181818181818181818181818171717171717171717171717171717171717171717 171717171717171717171717171717171717161616161616161616161616161616161616161616 161616161616161616151515151515151515151515151515151515151515151515151515151515 141414141414141414141414141414141414141414141414131313131313131313131313131313 131313131313131313121212121212121212121212121212121212121212111111111111111111 1111111111111111111111111010101010101010101010101010101515151717171A1A1A1C1C1C 1D1D1D202020212121222222242424262626272727282828282828282828272727272727272727 272727262626242424232323212121161616020202000000000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F62A2A2A000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090E0E0E131313161616 1A1A1A1C1C1C1F1F1F2121212626262929292C2C2C2F2F2F313131323232353535373737393939 3B3B3B3D3D3D3E3E3E3F3F3F404040424242434343444444454545464646464646474747474747 474747474747474747474747474747474747464646454545444444434343424242414141404040 3F3F3F3D3D3D3B3B3B3A3A3A3939393636363333333131312E2E2E2D2D2D2A2A2A272727242424 2323232121211D1D1D1A1A1A1717171414141111110D0D0D070707060606020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505060606060606060606060606060606060606 060606060606060606050505040404030303010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 030303070707070707070707070707070707080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090909090909090909090909090A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909080808080808080808080808080808080808080808 080808080808080808080808080808070707070707070707070707070707070707070707070707 060606060606060606060606060606060606060606050505050505050505050505050505050505 040404040404040404040404030303030303030303030303030303020202020202020202020202 020202020202020202020202020202020202020202020202020202010101030101050101050101 050101050101050101050101020000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000 0000000000000A0A0A181818181818181818181818181818181818181818181818181818181818 181818181818181818171717171717171717171717171717171717171717171717171717171717 171717171717171717171717161616161616161616161616161616161616161616161616161616 161616161616151515151515151515151515151515151515151515151515151515151515141414 141414141414141414141414141414141414141414131313131313131313131313131313131313 131313131313121212121212121212121212121212121212121212121212111111111111111111 111111111111111111111111101010101010101010101010101010101010101010151515171717 1919191D1D1D1E1E1E212121212121222222252525262626272727282828282828272727272727 272727272727272727262626242424232323212121161616020202000000000000000000000000 0000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D3D3D3080808000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010101010606060C0C0C 1010101414141616161A1A1A1C1C1C1F1F1F2323232626262929292D2D2D2E2E2E303030323232 3434343838383A3A3A3C3C3C3E3E3E3E3E3E3F3F3F414141434343444444444444454545464646 474747474747474747474747474747474747474747474747464646464646444444444444434343 4242424141413F3F3F3E3E3E3C3C3C3B3B3B3A3A3A3838383636363333333131312F2F2F2D2D2D 2929292727272626262323232020201D1D1D1B1B1B1717171414141111110D0D0D070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505060606060606 060606060606060606060606060606060606060606060606060606060606050505040404030303 020202010101000000000000000000000000000000000000000000000000000000010101030303 050505070707070707070707070707070707070707070707070707070707070707080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 0909090909090909090909090909090909090909090909090A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A 0A0A0A0A0A0A0A0A0A0A0A0A090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909080808080808080808080808080808080808080808080808080808 080808080808080808080808070707070707070707070707070707070707070707070707070707 060606060606060606060606060606060606060606050505050505050505050505050505050505 040404040404040404040404040404030303030303030303030303020202020202020202020202 020202020202020202020202020202020202020202020202020202020202010101010101030101 050101050101050101050101050101050101020000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000 0000000000000000000000000A0A0A181818181818181818181818181818181818181818171717 171717171717171717171717171717171717171717171717171717171717171717171717171717 171717161616161616161616161616161616161616161616161616161616161616161616161616 151515151515151515151515151515151515151515151515151515151515151515141414141414 141414141414141414141414141414141414141414131313131313131313131313131313131313 131313131313121212121212121212121212121212121212121212111111111111111111111111 111111111111111111111111101010101010101010101010101010101010101010101010151515 1414141616161919191D1D1D1E1E1E212121222222242424252525262626272727272727272727 272727272727272727272727272727262626242424232323212121161616020202000000000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF8B8B8B000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060C0C0C1010101414141818181B1B1B1D1D1D2121212424242727272A2A2A2D2D2D 2E2E2E3030303232323636363939393B3B3B3C3C3C3D3D3D3E3E3E404040424242434343444444 454545464646474747474747474747474747474747474747474747474747474747464646454545 4444444444444343434242424141413F3F3F3E3E3E3C3C3C3C3C3C3A3A3A383838363636333333 3232323030302D2D2D2B2B2B2929292626262323232121211D1D1D1B1B1B1717171515150F0F0F 0D0D0D070707060606020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606050505040404040404040404040404050505050505070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909080808080808080808080808080808080808080808080808080808080808080808080808 080808080808070707070707070707070707070707070707070707070707070707070707060606 060606060606060606060606060606060606050505050505050505050505050505050505050505 040404040404040404040404040404030303030303030303030303020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101010101 010101030101050101050101050101050101050101050101020000808080FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000 000000000000000000000000000000000000090909171717171717171717171717171717171717 171717171717171717171717171717171717171717171717171717171717171717161616161616 161616161616161616161616161616161616161616161616161616161616161616161616151515 151515151515151515151515151515151515151515151515151515141414141414141414141414 141414141414141414141414141414141414131313131313131313131313131313131313131313 131313121212121212121212121212121212121212121212121212111111111111111111111111 111111111111111111101010101010101010101010101010101010101010101010101010101010 0F0F0F1414141616161919191B1B1B1D1D1D1E1E1E212121222222242424252525252525272727 272727272727272727272727272727272727272727262626232323232323212121161616020202 0000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD444444000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090E0E0E1111111515151919191C1C1C1F1F1F222222262626 2929292B2B2B2D2D2D2F2F2F3232323535353737373939393B3B3B3C3C3C3D3D3D3F3F3F414141 424242434343444444454545464646474747474747474747474747474747484848484848484848 4747474646464646464545454444444444444343434141413F3F3F3E3E3E3E3E3E3C3C3C3A3A3A 3737373535353434343232322F2F2F2D2D2D2B2B2B2929292525252222222121211E1E1E1B1B1B 1717171212121111110D0D0D070707070707020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808070707070707070707070707070707070707070707070707070707070707060606060606 060606060606060606060606060606060606050505050505050505050505050505050505050505 040404040404040404040404040404030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101010101 0101010101010101010301010501010501010501010501010501010501010200007F7F7FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313 000000000000000000000000000000000000000000000000090909171717171717171717171717 171717171717171717171717171717171717171717171717161616161616161616161616161616 161616161616161616161616161616161616161616161616161616151515151515151515151515 151515151515151515151515151515151515151515151515141414141414141414141414141414 141414141414141414141414141414131313131313131313131313131313131313131313131313 131313121212121212121212121212121212121212121212121212111111111111111111111111 111111111111111111101010101010101010101010101010101010101010101010101010101010 0F0F0F0F0F0F0F0F0F1414141616161919191B1B1B1D1D1D202020212121222222232323252525 262626272727272727272727272727272727272727272727262626252525232323232323212121 1616160202020000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5131313000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060C0C0C0E0E0E1313131616161B1B1B1D1D1D 2121212424242727272929292C2C2C2E2E2E3131313333333535353737373939393A3A3A3C3C3C 3E3E3E404040424242434343444444454545464646474747474747474747474747484848484848 484848484848484848474747464646464646464646454545444444434343414141414141404040 3E3E3E3C3C3C3939393737373636363434343232322F2F2F2D2D2D2B2B2B282828252525222222 2222221D1D1D1C1C1C1616161414140F0F0F0D0D0D0A0A0A070707020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808070707 070707070707070707070707070707070707070707070707070707070707060606060606060606 060606060606060606060606060606060606050505050505050505050505050505050505040404 040404040404040404040404040404030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202010101 010101010101010101010101010101030101050101050101050101050101050101050101020000 7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D6D6D6131313000000000000000000000000000000000000000000000000090909171717171717 171717171717171717171717161616161616161616161616161616161616161616161616161616 161616161616161616161616161616161616161616151515151515151515151515151515151515 151515151515151515151515151515151515141414141414141414141414141414141414141414 141414141414141414141414131313131313131313131313131313131313131313131313131313 121212121212121212121212121212121212121212121212111111111111111111111111111111 111111111111111111101010101010101010101010101010101010101010101010101010101010 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1414141616161919191B1B1B1E1E1E202020212121212121 232323252525262626272727272727272727272727272727272727262626262626252525232323 2323232121211616160202020000000000000000000000000000000000000000000000000B0B0B FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEAEAE000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C101010141414 1818181B1B1B1E1E1E2222222525252727272A2A2A2D2D2D2F2F2F323232333333363636383838 3939393B3B3B3D3D3D3F3F3F414141424242434343454545464646474747474747474747474747 484848484848494949494949484848484848484848484848474747464646454545444444434343 4242424242424040403E3E3E3B3B3B3A3A3A3838383737373434343232323030302E2E2E2B2B2B 2828282626262424242121211F1F1F1B1B1B1919191515151111110F0F0F0A0A0A070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808070707070707070707 070707070707070707070707070707070707070707070707070707060606060606060606060606 060606060606060606060606060606050505050505050505050505050505050505050505040404 040404040404040404040404040404030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202010101 010101010101010101010101010101010101010101030101050101050101050101050101050101 0501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000000000090909 161616161616161616161616161616161616161616161616161616161616161616161616161616 161616161616161616161616151515151515151515151515151515151515151515151515151515 151515151515151515151515141414141414141414141414141414141414141414141414141414 141414141414131313131313131313131313131313131313131313131313131313131313121212 121212121212121212121212121212121212121212111111111111111111111111111111111111 1111111111111010101010101010101010101010101010101010101010101010101010100F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1414141616161919191D1D1D1D1D1D202020 212121212121232323252525262626272727272727272727272727262626262626262626262626 252525232323232323212121161616020202000000000000000000000000000000000000000000 0000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF636363000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0C0C0C1010101414141818181C1C1C1F1F1F2222222525252828282B2B2B2D2D2D303030323232 3535353737373838383A3A3A3C3C3C3F3F3F414141424242434343444444464646474747474747 484848484848484848484848494949494949494949484848484848484848484848474747464646 4545454444444444444343434242424040403E3E3E3C3C3C3B3B3B3A3A3A373737353535333333 3131312E2E2E2B2B2B2929292727272424242222221E1E1E1D1D1D1919191515151212120F0F0F 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909090909090909090909090909090909090909 090909090909090909090909090909090909090909080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808070707070707070707070707070707 070707070707070707070707070707070707070707070707060606060606060606060606060606 060606060606060606060606060606050505050505050505050505050505050505050505040404 040404040404040404040404040404030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 010101010101010101010101010101010101010101010101010101030101050101050101050101 0501010501010501010200007E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000 000000090909161616161616161616161616161616161616161616161616161616161616161616 161616151515151515151515151515151515151515151515151515151515151515151515151515 151515151515141414141414141414141414141414141414141414141414141414141414141414 141414131313131313131313131313131313131313131313131313131313131313121212121212 121212121212121212121212121212121212121212111111111111111111111111111111111111 1111111111111010101010101010101010101010101010101010101010101010101010100F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F1414141616161A1A1A1C1C1C 1D1D1D202020212121232323242424252525272727272727272727262626262626262626262626 262626262626252525232323232323212121151515020202000000000000000000000000000000 0000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3F3252525000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090E0E0E1111111616161A1A1A1C1C1C2121212222222626262929292B2B2B 2E2E2E3131313333333636363737373939393C3C3C3E3E3E3F3F3F414141424242444444454545 464646474747474747474747484848494949494949494949494949494949494949494949494949 4848484747474646464646464545454444444343434242424040403F3F3F3D3D3D3C3C3C3A3A3A 3838383535353333333030302E2E2E2C2C2C2A2A2A2727272424242121211F1F1F1D1D1D191919 1616161414140F0F0F0D0D0D020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707060606060606060606060606060606060606 060606060606060606060606050505050505050505050505050505050505050505050505040404 040404040404040404040404040404030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101010101030101050101 0501010501010501010501010501010200007D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000 000000000000000000090909161616161616161616161616161616151515151515151515151515 151515151515151515151515151515151515151515151515151515151515151515151515151515 141414141414141414141414141414141414141414141414141414141414141414141414131313 131313131313131313131313131313131313131313131313131313131313121212121212121212 121212121212121212121212121212121212111111111111111111111111111111111111111111 1111111010101010101010101010101010101010101010101010101010101010101010100F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F141414131313181818 1A1A1A1C1C1C1D1D1D202020212121232323242424252525272727262626262626262626262626 2626262626262626262525252424242323232222221F1F1F151515020202000000000000000000 0000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCC2C2C28181815E5E5E525252525252525252525252 525252525252525252525252525252525252525252525252525252525252525252525252525252 525252525252525252525252525252525252525252525252525252525252525252525252525252 525252626262888888CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1D1D1090909000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060C0C0C1010101414141818181B1B1B1D1D1D212121232323 2727272929292C2C2C2F2F2F3232323434343535353737373A3A3A3C3C3C3E3E3E3F3F3F404040 4242424444444545454646464646464747474848484949494949494A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4949494949494848484848484747474646464646464444444343434242424040403E3E3E 3D3D3D3B3B3B3A3A3A3838383535353232323030302F2F2F2D2D2D2A2A2A282828242424222222 1E1E1E1D1D1D1A1A1A1616161414141111110D0D0D0A0A0A060606020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707060606060606060606060606060606060606060606060606 060606060606060606050505050505050505050505050505050505050505050505040404040404 040404040404040404040404040404030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 0301010501010501010501010501010501010501010200007D7D7DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000 000000000000000000000000000000090909151515151515151515151515151515151515151515 151515151515151515151515151515151515151515151515151515151515141414141414141414 141414141414141414141414141414141414141414141414141414141414131313131313131313 131313131313131313131313131313131313131313131313121212121212121212121212121212 121212121212121212121212121212111111111111111111111111111111111111111111111111 1111111010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E131313 1515151818181A1A1A1C1C1C1D1D1D202020212121242424252525252525262626262626262626 2626262626262626262626262626262525252323232222222020201E1E1E141414020202000000 0000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC9191911A1A1A121212000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101151515202020AAAAAAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF939393000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090E0E0E1111111414141818181B1B1B 1D1D1D2121212424242727272929292C2C2C2F2F2F3232323333333535353838383A3A3A3C3C3C 3E3E3E3F3F3F4141414343434444444545454646464747474848484848484949494A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A494949494949494949484848484848474747474747454545444444434343 4141413F3F3F3E3E3E3C3C3C3B3B3B3A3A3A3838383535353333333131313030302D2D2D2B2B2B 2727272424242222221F1F1F1D1D1D1B1B1B1717171414141111110D0D0D0A0A0A060606020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707060606060606060606060606060606060606060606060606060606 060606060606050505050505050505050505050505050505050505050505050505040404040404 040404040404040404040404040404030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202010101010101010101010101010101010101010101010101010101010101010101 0101010101010301010501010501010501010501010501010501010200007D7D7DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000 000000000000000000000000000000000000000000090909151515151515151515151515151515 151515151515151515151515151515151515141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414131313131313131313131313131313 131313131313131313131313131313131313131313121212121212121212121212121212121212 121212121212121212121212111111111111111111111111111111111111111111111111111111 1010101010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E 1313131313131515151818181A1A1A1C1C1C1F1F1F202020212121232323242424252525262626 2626262626262626262626262626262626262525252323232323232222222020201E1E1E141414 0202020000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F03939390C0C0C000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000101010545454F9F9F9FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF595959 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090E0E0E111111 1414141818181B1B1B1E1E1E2222222424242727272929292D2D2D2F2F2F313131333333363636 3838383B3B3B3C3C3C3E3E3E404040424242444444444444454545464646474747484848494949 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949484848484848484848464646 4545454444444343434141413F3F3F3E3E3E3D3D3D3C3C3C3A3A3A383838353535343434323232 3030302E2E2E2B2B2B2828282525252222222020201D1D1D1B1B1B1919191616161212120F0F0F 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707060606060606060606060606060606060606060606060606060606060606060606 060606050505050505050505050505050505050505050505050505050505040404040404040404 040404040404040404040404030303030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010301010501010501010501010501010501010501010200007C7C7C FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6 131313000000000000000000000000000000000000000000000000090909151515151515151515 151515151515141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414131313131313131313131313131313131313131313 131313131313131313131313131313121212121212121212121212121212121212121212121212 121212121212121212111111111111111111111111111111111111111111111111111111101010 1010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E1313131313131515151A1A1A1C1C1C1D1D1D1F1F1F202020212121232323242424 2424242525252626262626262626262626262626262424242424242323232222222020201F1F1F 1E1E1E1414140202020000000000000000000000000000000000000000000000000B0B0BFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA313131040404000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 4E4E4EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDDEDEDEC5C5C5BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BCBCBCCFCFCFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF0F0F0222222000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090E0E0E1111111515151919191C1C1C1F1F1F2222222626262828282B2B2B2E2E2E303030 3232323535353737373939393A3A3A3C3C3C3F3F3F414141424242434343444444454545464646 4747474848484949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949494949 4848484747474646464545454444444343434141414040403F3F3F3E3E3E3C3C3C393939373737 3636363535353232323030302D2D2D2B2B2B2828282525252323232121211D1D1D1C1C1C1B1B1B 1717171212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 050505050505050505050505050505050505050505050505050505050505040404040404040404 040404040404040404040404030303030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101030101050101050101050101050101050101050101 0200007C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD6D6D6131313000000000000000000000000000000000000000000000000080808141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414131313131313131313131313131313131313131313131313131313131313131313 131313131313131313121212121212121212121212121212121212121212121212121212121212 121212111111111111111111111111111111111111111111111111111111111111101010101010 1010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E1313131515151818181A1A1A1C1C1C1C1C1C1E1E1E202020212121 232323232323242424252525252525252525252525242424242424242424232323232323222222 2020201F1F1F1E1E1E131313020202000000000000000000000000000000000000000000000000 0B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6F090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000F0F0F9B9B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE2E2E27D7D7D2C2C2C171717171717121212111111121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 1212121212121010101515151717171A1A1A494949AEAEAEF9F9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFCBCBCB070707000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060C0C0C1010101313131616161A1A1A1D1D1D212121242424262626292929 2C2C2C2E2E2E3131313434343737373737373939393B3B3B3D3D3D3F3F3F414141424242434343 4444444646464747474848484949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949 4949494949494949494848484848484747474646464444444343434242424141413F3F3F3D3D3D 3B3B3B3939393838383737373434343232323030302E2E2E2B2B2B282828262626242424212121 1E1E1E1C1C1C1B1B1B1616161212120F0F0F0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606050505 050505050505050505050505050505050505050505050505050505040404040404040404040404 040404040404040404040404030303030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101030101050101050101050101050101 0501010501010200007B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000000000000000 080808141414141414141414141414141414141414141414141414141414141414141414131313 131313131313131313131313131313131313131313131313131313131313131313131313131313 131313121212121212121212121212121212121212121212121212121212121212121212121212 111111111111111111111111111111111111111111111111111111111111101010101010101010 1010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1313131313131515151818181919191B1B1B1C1C1C1E1E1E 202020212121232323232323242424252525252525242424242424242424232323232323232323 2323232020201F1F1F1E1E1E1D1D1D121212020202000000000000000000000000000000000000 0000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9171717000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000001B1B1BF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFCFCFCF3F3F3F161616030303000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000E0E0E1818187C7C7CF4F4F4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF919191000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060606060C0C0C1010101313131616161B1B1B1E1E1E212121 2424242727272929292D2D2D2F2F2F3232323535353636363737373939393C3C3C3E3E3E404040 4141414242424444444545454646464848484949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949484848474747464646454545444444434343 4141413F3F3F3D3D3D3C3C3C3B3B3B3939393737373535353333333131312E2E2E2C2C2C292929 2727272525252222222020201C1C1C1B1B1B1616161414140F0F0F0A0A0A070707060606020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606050505050505050505 050505050505050505050505050505050505050505050505040404040404040404040404040404 040404040404040404030303030303030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101030101050101050101 0501010501010501010501010200007B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000000000000000 000000000000080808141414141414141414141414131313131313131313131313131313131313 131313131313131313131313131313131313131313131313131313131313131313121212121212 121212121212121212121212121212121212121212121212121212121212121212111111111111 111111111111111111111111111111111111111111111111111111101010101010101010101010 1010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E1313131313131414141717171B1B1B1C1C1C 1C1C1C1E1E1E202020212121232323232323242424232323242424242424232323232323232323 2323232323232222222020201F1F1F1D1D1D1C1C1C121212020202000000000000000000000000 0000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E 060606000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000F0F0FB9B9B9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF3F3F35A5A5A141414000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0707071A1A1AADADADFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE515151000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090C0C0C101010141414181818 1C1C1C1E1E1E2121212424242727272A2A2A2D2D2D3030303232323535353636363838383B3B3B 3D3D3D3F3F3F4141414141414343434545454646464848484949494A4A4A4A4A4A4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A494949494949484848474747464646 4545454545454444444242424040403E3E3E3E3E3E3C3C3C3A3A3A383838363636343434313131 2F2F2F2D2D2D2B2B2B2828282626262222222020201C1C1C1A1A1A1717171515151111110D0D0D 0A0A0A060606020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606050505050505050505050505050505 050505050505050505050505050505050505050505040404040404040404040404040404040404 040404040404040404030303030303030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000030101 0501010501010501010501010501010501010200007A7A7AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D6131313000000000000000000000000 000000000000000000000000080808131313131313131313131313131313131313131313131313 131313131313131313131313131313131313131313131313121212121212121212121212121212 121212121212121212121212121212121212121212121212121212111111111111111111111111 111111111111111111111111111111111111111111101010101010101010101010101010101010 1010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E121212141414141414191919 1B1B1B1C1C1C1E1E1E1F1F1F202020212121232323222222232323232323242424242424232323 2323232323232323232323232222221F1F1F1D1D1D1C1C1C1C1C1C121212020202000000000000 0000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF3B3B3B000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000646464FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD5D5D5202020050505000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000001111115E5E5EFBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF 222222000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090E0E0E 1111111515151919191C1C1C1F1F1F2222222626262828282B2B2B2E2E2E313131333333353535 3838383A3A3A3C3C3C3E3E3E4040404141414343434444444646464747474848484949494A4A4A 4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A494949494949 4848484747474646464646464545454444444242424141413F3F3F3E3E3E3C3C3C3B3B3B393939 3737373434343232323030302E2E2E2B2B2B2929292626262323232020201C1C1C1B1B1B181818 1515151212120D0D0D0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606050505050505050505050505050505050505050505 050505050505050505050505050505050505040404040404040404040404040404040404040404 040404040404030303030303030303030303030303030303030303030303020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 0000000301010501010501010501010501010501010501010200007A7A7AFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD121212000000000000 000000000000000000000000000000000000080808131313131313131313131313131313131313 131313131313131313131313121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212111111111111111111111111111111111111 111111111111111111111111111111111111101010101010101010101010101010101010101010 1010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D121212121212141414 1717171919191B1B1B1C1C1C1E1E1E1F1F1F202020202020222222222222232323232323232323 2323232323232323232323232323232121211F1F1F1E1E1E1D1D1D1C1C1C1A1A1A101010010101 0000000000000000000000000000000000000000000000000B0B0BFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF232323000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000424242 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFC5C5C5181818000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000909093D3D3DF7F7F7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD1D1D10A0A0A000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090E0E0E1111111515151A1A1A1C1C1C2020202323232626262929292C2C2C2F2F2F 3232323434343737373838383A3A3A3C3C3C3E3E3E404040434343434343444444464646474747 4848484949494A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B 4B4B4B4A4A4A4949494949494848484848484646464646464444444343434141413F3F3F3E3E3E 3D3D3D3B3B3B3939393737373434343232323131312E2E2E2C2C2C292929272727232323202020 1D1D1D1B1B1B1818181515151212120F0F0F0A0A0A070707020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606050505050505050505050505050505050505050505050505050505 050505050505050505050505050505040404040404040404040404040404040404040404040404 040404030303030303030303030303030303030303030303030303020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0000000000000000000301010501010501010501010501010501010501010200007B7B7BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEA0F0F0F 000000000000000000000000000000000000000000000000080808131313131313131313121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212111111111111111111111111111111111111111111111111111111 111111111111111111111111101010101010101010101010101010101010101010101010101010 1010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D121212 1212121414141717171919191919191C1C1C1E1E1E1E1E1E1F1F1F202020222222222222232323 2323232323232323232323232323232121212121212121211F1F1F1E1E1E1C1C1C1A1A1A191919 0C0C0C0000000000000000000000000000000000000000000000000000000A0A0AFEFEFEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F000000000000000000000000000000000000000000 030303060606060606060606060606060606060606060606060606050505050505050505050505 050505050505050505050505050505040404040404040404040404040404040404040404040404 040404040404040404040404040404040404010101000000000000000000000000000000000000 000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD0D0D0161616000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000070707424242FCFCFC FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060606060909091010101313131616161A1A1A1D1D1D212121232323262626 2929292D2D2D2F2F2F3232323434343636363838383A3A3A3C3C3C3E3E3E414141434343444444 4545454646464848484949494949494A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A494949494949484848474747464646444444424242 4141413F3F3F3F3F3F3E3E3E3C3C3C3939393737373535353333333131312E2E2E2C2C2C292929 2626262424242121211E1E1E1B1B1B1818181515151212120F0F0F0A0A0A070707060606020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505040404040404040404040404040404040404040404040404040404040404 040404030303030303030303030303030303030303030303030303020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000030101050101050101050101050101050101050101020000 7B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFD0A0A0A000000000000000000000000000000000000000000000000060606121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212111111111111111111111111111111111111111111111111111111111111111111111111 111111111111101010101010101010101010101010101010101010101010101010101010101010 1010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D1212121212121414141717171919191919191A1A1A1D1D1D1E1E1E1F1F1F202020222222 2222222222222222222323232323232222222121212121211F1F1F1F1F1F1E1E1E1D1D1D1C1C1C 1A1A1A1919190606060000000000000000000000000000000000000000000000000000000A0A0A FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000000000 000000000000030303060606060606060606060606060606060606060606050505050505050505 050505050505050505050505050505040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404010101000000000000000000000000 000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC1B1B1B000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909090909 090909090909090909090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0B0B0B6D6D6DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D6D6D000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060C0C0C1010101414141616161A1A1A1D1D1D 2121212424242727272929292D2D2D2F2F2F3232323434343636363838383A3A3A3D3D3D404040 4141414242424444444545454646464848484848484A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B 4C4C4C4C4C4C4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A494949484848484848 4646464444444343434141414141414040403E3E3E3C3C3C393939383838363636333333323232 2F2F2F2D2D2D2929292727272424242222221F1F1F1C1C1C1919191616161313131111110D0D0D 0A0A0A060606020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505040404040404040404040404040404040404040404040404040404040404040404 030303030303030303030303030303030303030303030303020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000030101050101050101050101050101050101 0501010200007B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF1F1F1F000000000000000000000000000000000000000000000000030303 121212121212121212121212121212121212121212121212121212121212111111111111111111 111111111111111111111111111111111111111111111111111111111111111111111111101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 1010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D1212121212121414141717171818181818181A1A1A1B1B1B1E1E1E1E1E1E 1F1F1F2020202020202020202222222222222121212121211F1F1F1F1F1F1F1F1F1E1E1E1D1D1D 1C1C1C1A1A1A191919151515010101000000000000000000000000000000000000000000000000 0000000F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000 000000000000000000000000030303060606060606060606060606060606060606050505050505 050505050505050505050505050505050505040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404030303010101000000000000 000000000000000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF424242030303000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909090909 090909090909090909090909090909090909090909090909090909090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000121212BEBEBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA3E3E3E000000 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010909090C0C0C101010141414 1818181B1B1B1E1E1E2121212525252828282B2B2B2D2D2D303030323232343434363636393939 3C3C3C3E3E3E3F3F3F4141414242424444444545454747474848484949494949494A4A4A4B4B4B 4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B 4A4A4A4949494848484646464545454444444343434141413F3F3F3D3D3D3B3B3B3A3A3A383838 3636363434343232323030302D2D2D2929292828282626262222222020201C1C1C1A1A1A161616 1414141212120F0F0F0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 040404040404040404040404040404040404040404040404040404040404040404040404030303 030303030303030303030303030303030303030303030303020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000030101050101050101050101 0501010501010501010200007B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E5E5E000000000000000000000000000000000000000000 000000000000111111121212121212111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111111111111111101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 1010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D1212121212121414141313131616161818181818181A1A1A1B1B1B 1D1D1D1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1E1E1E1E1E1E 1D1D1D1C1C1C1A1A1A1818181818180B0B0B010101000000000000000000000000000000000000 0000000000000000002C2C2CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000 000000000000000000000000000000000000030303060606060606060606060606050505050505 050505050505050505050505050505050505050505040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404030303030303010101 000000000000000000000000000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB3B3B3111111000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 090909090909090909090909090909090909090909090909090909090909090909090909090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000212121FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E8E8E81B1B1B000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0E0E0E1111111515151919191C1C1C1F1F1F2323232626262929292B2B2B2E2E2E313131333333 3535353838383A3A3A3D3D3D3E3E3E3F3F3F414141424242444444464646464646484848494949 4949494A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C 4C4C4C4C4C4C4B4B4B4A4A4A4949494848484747474646464545454343434141413F3F3F3D3D3D 3C3C3C3B3B3B3838383636363535353232323030302D2D2D2B2B2B2929292626262323231F1F1F 1D1D1D1B1B1B1818181515151111110F0F0F0A0A0A070707050505020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505040404040404040404 040404040404040404040404040404040404040404040404040404040404040404030303030303 030303030303030303030303030303030303030303020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000030101050101 0501010501010501010501010501010200007B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEAEAE0A0A0A000000000000000000000000 000000000000000000000000070707111111111111111111111111111111111111111111111111 111111111111111111111111111111111111101010101010101010101010101010101010101010 1010101010101010101010101010101010101010101010101010101010101010101010100F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D111111111111131313161616161616181818181818 1A1A1A1B1B1B1D1D1D1D1D1D1E1E1E1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1D1D1D 1D1D1D1D1D1D1C1C1C1A1A1A191919181818141414010101000000000000000000000000000000 0000000000000000000000000000005E5E5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1E1E1E000000000000000000000000000000000000000000030303060606060606060606050505 050505050505050505050505050505050505050505040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404030303030303030303 030303010101000000000000000000000000000000000000000000313131FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE252525000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000090909090909090909090909101010101010101010101010090909090909090909090909 090909090909000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000C0C0C9A9A9AFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFC6C6C6060606000000000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090E0E0E1111111515151919191C1C1C2121212424242727272929292C2C2C 2F2F2F3131313333333636363939393B3B3B3C3C3C3D3D3D3F3F3F414141434343454545464646 4848484848484949494A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D 4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4A4A4A494949484848474747464646454545434343 4141413F3F3F3F3F3F3D3D3D3B3B3B3939393838383535353232323030302E2E2E2C2C2C292929 2727272323232121211E1E1E1C1C1C1A1A1A1616161111110E0E0E0A0A0A0A0A0A060606020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 060606050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505040404040404040404040404040404 040404040404040404040404040404040404040404040404040404030303030303030303030303 030303030303030303030303030303030303020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 0301010501010501010501010501010501010501010200007B7B7BFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F70C0C0C000000000000 0000000000000000000000000000000000000000000E0E0E111111111111111111111111111111 111111111111101010101010101010101010101010101010101010101010101010101010101010 1010101010101010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C111111131313131313161616161616 1818181818181A1A1A1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1C1C1C1C1C1C191919191919181818151515030303000000000000000000000000 0000000000000000000000000000000000000E0E0EABABABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF1E1E1E000000000000000000000000000000000000000000030303060606060606 050505050505050505050505050505050505050505050505040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404030303030303 030303030303030303010101000000000000000000000000000000000000000000313131FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBDBDBD111111 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000090909090909090909090909101010101010101010101010101010101010101010 101010101010090909090909090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000212121FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF929292000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090E0E0E1313131616161A1A1A1E1E1E212121242424 2727272929292D2D2D2E2E2E3131313434343737373A3A3A3B3B3B3C3C3C3E3E3E414141434343 4444444545454747474848484949494949494B4B4B4B4B4B4C4C4C4D4D4D4C4C4C4C4C4C4C4C4C 4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4B4B4B4A4A4A494949484848484848474747 4848484646464444444242424141414040403E3E3E3C3C3C3B3B3B383838363636333333323232 3030302D2D2D2B2B2B2727272424242121211F1F1F1C1C1C1A1A1A1616161414141010100E0E0E 0A0A0A070707020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404030303030303030303030303030303 030303030303030303030303030303030303020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 0000000000000301010501010501010501010501010501010501010200007B7B7BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF606060 0101010000000000000000000000000000000000000000000000000101010C0C0C101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 1010101010101010101010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C111111111111131313131313 1616161616161818181818181A1A1A1919191A1A1A1A1A1A1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1D1D1D1D1D1D1C1C1C191919191919191919181818161616050505010101000000000000 0000000000000000000000000000000000000000000000000D0D0DEFEFEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000000000000000000000030303 050505050505050505050505050505050505050505050505050505040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404030303 030303030303030303030303030303010101000000000000000000000000000000000000000000 313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 494949000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000090909090909090909101010101010101010101010101010101010 101010101010101010101010090909090909090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 151515CDCDCDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF666666000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060C0C0C1010101313131616161B1B1B 1E1E1E2121212424242727272A2A2A2C2C2C2F2F2F3232323535353838383939393B3B3B3D3D3D 3F3F3F4141414343434444444646464646464747474848484949494B4B4B4B4B4B4C4C4C4C4C4C 4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4B4B4B4A4A4A494949 4949494949494848484747474646464444444343434242424040403F3F3F3D3D3D3B3B3B383838 3636363535353232323030302E2E2E2B2B2B2828282626262222222121211E1E1E1B1B1B191919 1414141111110E0E0E0A0A0A070707020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404030303030303030303030303030303030303030303 030303030303030303030303030303020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 0000000000000000000000000301010501010501010501010501010501010501010200007B7B7B FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDFDFDF080808000000000000000000000000000000000000000000000000000000010101 0808080F0F0F101010101010101010101010101010101010101010101010101010101010101010 1010101010101010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C111111111111 1313131313131616161616161616161717171717171919191919191A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1A1A1A1B1B1B1919191919191818181818180F0F0F020202010101000000 000000000000000000000000000000000000000000000000000000000000444444FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000000000000000 000000020202050505050505050505050505050505050505050505040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 030303030303030303030303030303030303030303010101000000000000000000000000000000 000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFD181818000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000090909090909090909101010101010101010101010101010 101010101010101010101010101010101010090909090909090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000010101747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA3F3F3F 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010909090C0C0C101010 1414141818181B1B1B1E1E1E2121212424242727272929292C2C2C2F2F2F323232353535373737 3A3A3A3B3B3B3C3C3C3E3E3E4040404242424444444545454646464747474848484949494A4A4A 4B4B4B4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D 4C4C4C4B4B4B4B4B4B4A4A4A4949494848484747474646464444444343434141414141413F3F3F 3D3D3D3A3A3A3838383737373535353232323030302F2F2F2D2D2D292929272727242424222222 1F1F1F1C1C1C1919191616161313131010100C0C0C0A0A0A060606020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404030303030303030303030303030303030303030303030303030303 030303030303030303030303020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000030101050101050101050101050101050101050101 0200007B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF606060000000000000000000000000000000000000000000000000 0000000000000000000101010707070C0C0C0E0E0E101010101010101010101010101010101010 1010100F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C 111111111111131313131313131313151515151515151515171717171717191919191919191919 1919191919191919191919191818181818181818181717171414140D0D0D030303010101000000 000000000000000000000000000000000000000000000000000000000000000000101010C2C2C2 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000 000000000000000000020202050505050505050505050505050505050505040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 030303030303030303030303030303030303030303030303030303010101000000000000000000 000000000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD3D3D3151515000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000090909090909090909090909101010101010101010 101010101010101010101010101010101010101010101010090909090909090909090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000002C2C2CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFECECEC222222000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C1010101414141818181C1C1C1E1E1E2222222424242727272929292D2D2D303030 3333333535353838383939393B3B3B3C3C3C3F3F3F414141434343444444454545464646484848 4949494A4A4A4B4B4B4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E 4E4E4E4D4D4D4D4D4D4C4C4C4B4B4B4B4B4B4A4A4A494949484848474747464646444444434343 4343434141413F3F3F3D3D3D3B3B3B3A3A3A3838383636363434343232323030302D2D2D292929 2828282525252222222020201C1C1C1A1A1A1616161313131010100C0C0C090909070707020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404030303030303030303030303030303030303030303030303030303030303030303 030303030303020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000030101050101050101050101050101 0501010501010200007C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F10A0A0A000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101020202020202 020202020202020202020202020202020202020202020202010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 353535FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000 000000000000000000000000000000020202050505050505050505050505050505040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404030303030303030303030303030303030303030303030303030303030303010101000000 000000000000000000000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8A8A8080808000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909090909090909101010101010 101010101010101010101010161616101010101010101010101010101010090909090909090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000001A1A1AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD0D0D00C0C0C000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060606060C0C0C1111111515151919191C1C1C1E1E1E222222242424272727 2A2A2A2D2D2D3131313333333636363838383939393B3B3B3D3D3D3F3F3F424242434343444444 4646464747474949494A4A4A4B4B4B4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F 4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4B4B4B4A4A4A494949484848 4646464545454444444444444343434040403E3E3E3D3D3D3C3C3C393939373737353535323232 3030302D2D2D2B2B2B2929292626262424242121211D1D1D1B1B1B1616161414141111110E0E0E 0C0C0C060606060606020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404050505050505050505050505050505050505050505050505050505050505050505050505 050505050505040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000030101050101050101 0501010501010501010501010200007C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBBBB010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000E0E0ED5D5D5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E 000000000000000000000000000000000000000000020202050505050505050505040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404030303030303030303030303030303030303030303030303030303030303030303 010101000000000000000000000000000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7F000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909090909 101010101010101010101010101010161616161616161616161616101010101010101010090909 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000171717F6F6F6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAF020202000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1313131515151919191C1C1C1F1F1F 2222222424242828282B2B2B2F2F2F3232323434343737373838383A3A3A3C3C3C3F3F3F414141 4141414343434444444646464848484949494A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E 4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C 4B4B4B4949494848484848484747474646464444444242424141413F3F3F3E3E3E3C3C3C3A3A3A 3737373535353232323030302E2E2E2C2C2C2929292727272424242121211E1E1E1C1C1C191919 1515151313131010100C0C0C090909060606020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030101 0501010501010501010501010501010501010200007C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF707070 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000C0C0C7D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1E1E1E000000000000000000000000000000000000000000020202050505050505040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404030303030303030303030303030303030303030303030303030303030303030303 030303030303010101000000000000000000000000000000000000000000313131FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C6C6C000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 090909090909101010101010101010101010101010161616161616161616161616101010101010 101010090909090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000181818E8E8E8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF828282000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060C0C0C101010131313151515 1A1A1A1C1C1C2020202222222626262929292D2D2D3030303232323535353636363838383B3B3B 3E3E3E3F3F3F3F3F3F4141414343434444444646464848484848484A4A4A4B4B4B4B4B4B4C4C4C 4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E 4E4E4E4D4D4D4C4C4C4B4B4B4A4A4A494949494949484848464646444444424242414141404040 3E3E3E3C3C3C3A3A3A3838383535353232323131312F2F2F2C2C2C2A2A2A272727242424222222 1F1F1F1C1C1C1A1A1A1616161414141010100E0E0E090909060606010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000301010501010501010501010501010501010501010200007C7C7CFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF414141010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000808083D3D3DFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000000000000000000000020202040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404030303030303030303030303030303030303030303030303030303030303 030303030303030303030303010101000000000000000000000000000000000000000000313131 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000090909090909090909101010101010101010101010101010161616161616161616101010 101010101010090909090909090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE 575757000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010101010606060C0C0C 1010101313131616161A1A1A1C1C1C2020202424242727272A2A2A2D2D2D303030323232343434 3636363939393B3B3B3D3D3D3E3E3E3F3F3F414141434343454545464646474747494949494949 4A4A4A4B4B4B4C4C4C4D4D4D4D4D4D4D4D4D4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F 4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4B4B4B4B4B4B4A4A4A494949484848454545444444 4343434343434040403F3F3F3D3D3D3B3B3B3838383636363434343232323030302E2E2E2B2B2B 2929292626262323232121211E1E1E1C1C1C1919191616161313130E0E0E0C0C0C090909050505 010101020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000301010501010501010501010501010501010501010200007B7B7BFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF383838010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000060606292929F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000000000000000000000 020202040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303010101000000000000000000000000000000000000 000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 646464000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000090909090909090909101010101010101010101010101010101010161616161616 161616101010101010090909090909090909090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF6F6F6393939000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060C0C0C1010101313131616161A1A1A1D1D1D2121212424242727272929292D2D2D 2F2F2F3131313333333636363939393B3B3B3C3C3C3E3E3E3F3F3F424242444444454545464646 4848484848484949494A4A4A4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F 4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4D4D4D4D4D4D4C4C4C4B4B4B4B4B4B4B4B4B494949 4747474646464646464444444343434141413F3F3F3E3E3E3B3B3B393939383838363636333333 3131312F2F2F2D2D2D2929292727272424242222222020201C1C1C1B1B1B181818141414111111 0E0E0E090909060606010101010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404040404040404040404 040404040404040404040404040404040404030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000030101050101050101050101050101050101050101020000 7C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE525252010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000A0A0A343434F0F0F0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000000000 000000000000020202040404040404040404040404040404040404040404040404040404040404 040404040404040404040404030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303010101000000000000000000000000 000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF646464000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000090909090909090909101010101010101010101010101010161616 161616161616161616101010101010090909090909090909090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB242424000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060C0C0C1010101414141818181B1B1B1E1E1E222222242424 2727272929292D2D2D2E2E2E3131313434343737373939393A3A3A3C3C3C3E3E3E404040424242 4444444545454747474848484848484949494B4B4B4B4B4B4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E 4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C 4B4B4B4B4B4B4949494848484747474646464444444343434141413F3F3F3E3E3E3C3C3C3A3A3A 3838383636363434343232323030302D2D2D2B2B2B2929292626262323232121211F1F1F1C1C1C 1919191515151313130E0E0E090909090909010101010101010101020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000030101050101050101050101050101050101 0501010200007C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF929292070707 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000E0E0E636363F8F8F8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000 000000000000000000000000020202040404040404040404040404040404040404040404040404 040404040404040404040404040404030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303010101000000000000 000000000000000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000090909090909090909090909101010101010161616161616 161616161616161616161616161616101010101010090909090909090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D7121212000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060C0C0C1010101414141818181C1C1C 1E1E1E2121212424242727272929292C2C2C2F2F2F3232323535353737373838383B3B3B3D3D3D 3E3E3E3F3F3F4242424444444646464646464848484949494A4A4A4B4B4B4C4C4C4D4D4D4D4D4D 4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F5050505050504F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E 4E4E4E4D4D4D4C4C4C4B4B4B4B4B4B494949484848474747464646454545434343414141404040 3E3E3E3C3C3C3A3A3A3838383737373535353333333030302E2E2E2C2C2C292929272727242424 2222222020201C1C1C1A1A1A1616161414141010100E0E0E090909060606010101010101010101 010101020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000030101050101050101050101 0501010501010501010200007C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD6D6D62F2F2F080808000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000C0C0C181818B5B5B5FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000 000000000000000000000000000000000000020202040404040404040404040404040404040404 040404040404040404040404040404040404030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303010101 000000000000000000000000000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000090909090909090909090909101010101010 161616161616161616161616161616161616161616101010101010090909090909090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2C2C2070707 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060909090C0C0C101010 1414141818181C1C1C1E1E1E2121212424242727272929292D2D2D303030323232353535373737 3939393B3B3B3C3C3C3E3E3E4040404242424444444545454646464848484949494A4A4A4B4B4B 4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F5050505050505050505050505050505050504F4F4F 4F4F4F4F4F4F4F4F4F4F4F4F4D4D4D4C4C4C4C4C4C4B4B4B494949484848474747474747454545 4444444343434141413F3F3F3D3D3D3B3B3B3A3A3A3838383737373333333131312F2F2F2D2D2D 2A2A2A2828282525252222222020201C1C1C1B1B1B1818181414141111110E0E0E090909060606 010101010101010101010101010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000030101050101 0501010501010501010501010501010200007C7C7CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEB2B2B22828280D0D0D020202000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101111111161616919191F8F8F8FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1E1E1E000000000000000000000000000000000000000000020202040404040404040404040404 040404040404040404040404040404040404030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303010101000000000000000000000000000000000000000000313131FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909090909090909090909101010 101010161616161616161616161616161616161616101010101010101010090909090909090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000181818E1E1E1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFA7A7A7010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101060606 0909090C0C0C1010101414141818181C1C1C1E1E1E2222222424242727272A2A2A2D2D2D303030 3232323434343737373939393A3A3A3C3C3C3E3E3E414141434343444444454545464646484848 4949494B4B4B4B4B4B4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F505050505050515151505050505050 5050505050505050505050505050505050504E4E4E4E4E4E4D4D4D4C4C4C4B4B4B4A4A4A494949 4949494848484747474646464444444242424040403F3F3F3E3E3E3C3C3C3A3A3A373737353535 3333333131312E2E2E2C2C2C2929292727272424242121211E1E1E1C1C1C191919161616131313 1010100C0C0C090909060606040404010101010101010101010101020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0301010501010501010501010501010501010501010200007C7C7CFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D37272722525250B0B0B 1212121111110E0E0E101010101010101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 101010101010101010101010101010101010101010101010101010101010101010101010101010 1010101010100F0F0F1010101212120D0D0D1818185D5D5DBDBDBDFDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF1E1E1E000000000000000000000000000000000000000000020202040404040404 040404040404040404040404040404040404040404030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303010101000000000000000000000000000000000000000000313131FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909090909 101010101010101010161616161616161616161616161616161616101010101010090909090909 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000181818 E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF818181000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090C0C0C1111111414141919191C1C1C1F1F1F222222242424282828 2B2B2B2E2E2E3030303232323535353737373838383A3A3A3D3D3D3F3F3F414141424242434343 4444444646464848484949494A4A4A4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F505050505050515151 5151515151515151515151515151515151515151515151514F4F4F4F4F4F4F4F4F4E4E4E4D4D4D 4C4C4C4B4B4B4B4B4B4949494848484747474646464444444242424141414040403E3E3E3C3C3C 3939393838383636363434343131312F2F2F2D2D2D2A2A2A2727272424242222222020201C1C1C 1A1A1A1919191515151111110E0E0E090909090909060606010101010101010101010101010101 010101020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000301010501010501010501010501010501010501010200007C7C7CFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8F8F8D3D3D3B9B9B9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5B5B5CACACAF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000000000000000000000020202 040404040404040404040404040404040404040404030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303010101000000000000000000000000000000000000000000 313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 090909090909101010101010101010161616161616161616161616161616161616101010101010 090909090909090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE5F5F5F000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1111111515151919191C1C1C1F1F1F 2222222626262929292C2C2C2E2E2E3030303333333535353737373939393C3C3C3E3E3E3F3F3F 3F3F3F4141414343434444444646464848484949494B4B4B4B4B4B4C4C4C4D4D4D4E4E4E4F4F4F 5050505050505151515151515151515151515151515252525252525252525050505050504F4F4F 4F4F4F4E4E4E4D4D4D4D4D4D4D4D4D4A4A4A494949484848474747454545444444434343424242 4040403E3E3E3C3C3C3A3A3A3838383737373434343232323030302D2D2D2B2B2B282828262626 2424242121211E1E1E1C1C1C1A1A1A1515151313131010100C0C0C090909060606010101010101 010101010101010101010101010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000301010501010501010501010501010501010501010200007D7D7D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000000000000000 000000020202040404040404040404040404040404040404030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303010101000000000000000000000000000000 000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF646464000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000090909090909090909101010101010101010161616161616161616161616101010101010 101010101010090909090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA494949000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090E0E0E111111141414 1818181C1C1C1E1E1E2222222626262929292B2B2B2D2D2D303030323232343434373737393939 3C3C3C3D3D3D3E3E3E3F3F3F4141414343434545454646464848484949494A4A4A4B4B4B4C4C4C 4D4D4D4F4F4F4F4F4F505050505050505050515151515151515151525252525252525252505050 5050505050504F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4B4B4B4B4B4B4A4A4A494949474747464646 4545454444444343434141413E3E3E3C3C3C3B3B3B3A3A3A3737373535353333333131312E2E2E 2C2C2C2A2A2A2828282525252222222121211D1D1D1B1B1B1818181515151111110E0E0E0C0C0C 090909060606010101010101010101010101010101010101010101010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000030101050101050101050101050101050101050101 0200007D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000 000000000000000000020202040404040404040404040404030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303020202010101000000000000000000 000000000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000090909090909090909101010101010101010161616161616161616101010 101010101010101010090909090909090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5 3A3A3A000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0E0E0E1010101414141818181C1C1C1E1E1E2222222626262727272929292D2D2D2F2F2F313131 3333333636363939393B3B3B3D3D3D3E3E3E404040424242444444464646474747494949494949 4A4A4A4B4B4B4D4D4D4E4E4E4F4F4F4F4F4F505050505050505050515151515151525252525252 5252525151515050505050505050504F4F4F4F4F4F4F4F4F4E4E4E4D4D4D4D4D4D4C4C4C4B4B4B 4949494848484747474646464444444343434040403F3F3F3E3E3E3C3C3C3A3A3A383838373737 3535353232323030302E2E2E2C2C2C2929292626262424242121211E1E1E1C1C1C1A1A1A181818 1414141111110E0E0E0C0C0C090909050505010101010101010101010101010101010101010101 010101020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000030101050101050101050101050101 0501010501010200007D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000 000000000000000000000000000000020202040404040404040404030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303020202020202020202010101000000 000000000000000000000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000090909090909090909101010101010101010161616161616161616 101010101010101010101010101010090909090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEBEBEB282828000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010909090E0E0E1111111414141818181C1C1C1F1F1F2222222525252727272B2B2B 2E2E2E3030303232323434343737373939393B3B3B3D3D3D3F3F3F404040424242444444464646 4747474848484949494A4A4A4B4B4B4D4D4D4E4E4E4E4E4E4F4F4F505050505050505050515151 5151515252525252525252525151515151515050505050505050504F4F4F4F4F4F4F4F4F4F4F4F 4E4E4E4C4C4C4B4B4B4A4A4A4949494848484646464444444343434141413F3F3F3E3E3E3C3C3C 3A3A3A3939393737373434343232323131312F2F2F2D2D2D2A2A2A272727242424222222202020 1D1D1D1C1C1C1818181515151313131010100C0C0C090909060606010101010101010101010101 010101010101010101010101010101010101020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000030101050101050101 0501010501010501010501010200007D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E 000000000000000000000000000000000000000000020202040404030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303020202020202020202020202 010101000000000000000000000000000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000090909090909090909101010101010101010161616 161616161616101010101010101010101010090909090909090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000181818E1E1E1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE3E3E31D1D1D000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090E0E0E1111111414141818181C1C1C1E1E1E222222 2626262929292C2C2C2E2E2E3030303232323434343737373838383B3B3B3D3D3D3E3E3E3F3F3F 4242424444444646464747474848484949494A4A4A4B4B4B4D4D4D4D4D4D4F4F4F4F4F4F4F4F4F 505050505050515151515151515151525252525252525252525252515151515151505050505050 5050505050504F4F4F4E4E4E4D4D4D4B4B4B4A4A4A4A4A4A474747464646454545434343414141 4040403E3E3E3E3E3E3C3C3C3A3A3A3737373535353434343232323030302E2E2E2B2B2B292929 2626262323232121211F1F1F1C1C1C1A1A1A1616161414141010100E0E0E090909060606010101 010101010101010101010101010101010101010101010101010101010101010101020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030101 0501010501010501010501010501010501010200007D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1E1E1E000000000000000000000000000000000000000000020202030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303020202020202020202 020202020202010101000000000000000000000000000000000000000000313131FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909090909090909101010101010 101010161616161616161616101010101010101010101010090909090909090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000181818E1E1E1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3111111000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010606060909090E0E0E111111141414191919 1C1C1C1F1F1F2222222626262929292B2B2B2D2D2D3030303232323434343636363939393A3A3A 3C3C3C3D3D3D4040404242424545454646464747474848484949494B4B4B4C4C4C4D4D4D4F4F4F 4F4F4F4F4F4F505050505050515151515151525252525252525252525252525252525252525252 5151515151515151515151515050504F4F4F4E4E4E4D4D4D4C4C4C4B4B4B494949494949484848 4646464444444343434141414141413F3F3F3D3D3D3A3A3A383838373737353535333333313131 2E2E2E2D2D2D2929292727272525252222222020201D1D1D1B1B1B191919151515111111101010 0C0C0C090909060606050505010101010101010101010101010101010101010101010101010101 010101010101020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000301010501010501010501010501010501010501010200007D7D7DFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000000000000000000000010101030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303020202020202020202 020202020202020202020202010101000000000000000000000000000000000000000000313131 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909090909090909090909 101010101010101010101010101010101010101010101010101010090909090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7C7C70A0A0A 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 1111111515151919191C1C1C1E1E1E2222222525252828282929292D2D2D2E2E2E323232343434 3737373838383A3A3A3C3C3C3E3E3E4040404444444444444646464747474848484A4A4A4B4B4B 4C4C4C4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252535353535353525252 5252525252525252525252525252525252525151515050504F4F4F4E4E4E4D4D4D4D4D4D4C4C4C 4B4B4B4A4A4A4848484747474646464444444343434242424040403D3D3D3C3C3C3A3A3A393939 3737373535353232323030302E2E2E2B2B2B2929292727272424242222222020201D1D1D1A1A1A 1616161515151111110E0E0E0C0C0C090909060606040404010101010101010101010101010101 010101010101010101010101010101010101010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000301010501010501010501010501010501010501010200007D7D7DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000000000000000000000 010101030303030303030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303020202020202 020202020202020202020202020202020202010101000000000000000000000000000000000000 000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 646464000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909090909 090909090909101010101010101010101010101010101010101010101010090909090909090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFAFAFAF030303000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0606060909090E0E0E1111111515151919191C1C1C1F1F1F2222222424242727272929292C2C2C 2F2F2F3232323434343737373838383A3A3A3C3C3C3F3F3F414141424242434343454545474747 4949494A4A4A4A4A4A4D4D4D4D4D4D4E4E4E4F4F4F505050505050515151525252525252525252 5252525252525353535252525252525252525353535353535252525252525050505050504F4F4F 4F4F4F4D4D4D4D4D4D4B4B4B4A4A4A4848484747474646464646464444444242423F3F3F3E3E3E 3D3D3D3C3C3C3A3A3A3838383636363333333131312F2F2F2D2D2D2B2B2B292929272727242424 2121211E1E1E1C1C1C1A1A1A1616161414141111110E0E0E0C0C0C090909060606010101010101 010101010101010101010101010101010101010101010101010101010101010101010101020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000030101050101050101050101050101050101050101020000 7D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000000000000000 000000000000010101030303030303030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303020202020202 020202020202020202020202020202020202020202020202010101000000000000000000000000 000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF646464000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 090909090909090909090909101010101010101010101010101010101010101010090909090909 090909090909000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFA1A1A1020202000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010606060909090E0E0E1111111515151818181C1C1C1F1F1F222222242424 2727272929292D2D2D2F2F2F3232323434343636363838383B3B3B3D3D3D3F3F3F404040414141 4343434545454646464848484949494B4B4B4C4C4C4D4D4D4E4E4E4F4F4F505050505050515151 525252525252525252525252525252525252535353535353545454545454535353525252525252 5151515050505050504E4E4E4D4D4D4C4C4C4B4B4B4A4A4A494949484848474747464646444444 4141414040403F3F3F3E3E3E3C3C3C3A3A3A3838383737373434343232323131312F2F2F2C2C2C 2A2A2A2727272525252222222020201D1D1D1C1C1C1818181515151313131010100C0C0C090909 060606060606010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000030101050101050101050101050101050101 0501010200007D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000000000000000 000000000000000000000000010101030303030303030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303020202 020202020202020202020202020202020202020202020202020202020202010101000000000000 000000000000000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000090909090909090909101010101010101010101010101010101010101010090909 090909090909090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF949494000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010606060909090C0C0C1111111414141818181C1C1C 1F1F1F2222222424242727272929292C2C2C2E2E2E3131313232323535353838383A3A3A3C3C3C 3D3D3D3F3F3F4141414343434444444646464747474A4A4A4A4A4A4B4B4B4D4D4D4E4E4E4F4F4F 505050505050515151515151515151525252525252525252525252525252545454545454535353 5353535252525252525151515151514F4F4F4F4F4F4E4E4E4D4D4D4B4B4B4B4B4B4A4A4A494949 4848484646464444444343434242424141413F3F3F3D3D3D3B3B3B3A3A3A373737353535343434 3232323030302E2E2E2B2B2B2929292626262424242222222020201C1C1C1B1B1B191919161616 1111110E0E0E0C0C0C090909060606050505010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000030101050101050101050101 0501010501010501010200007D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E1E1E000000 000000000000000000000000000000000000010101030303030303030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 020202020202020202020202020202020202020202020202020202020202020202020202010101 000000000000000000000000000000000000000000313131FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000090909090909090909101010101010101010101010101010101010 090909090909090909090909090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E8E8E000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010101010606060606060E0E0E111111 1515151919191C1C1C1E1E1E2222222424242626262929292B2B2B2E2E2E303030323232353535 3737373A3A3A3C3C3C3D3D3D3F3F3F4141414343434444444646464848484949494A4A4A4B4B4B 4D4D4D4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252525252525252545454 5454545353535353535252525252525252525151515050505050505050504F4F4F4D4D4D4D4D4D 4C4C4C4B4B4B4949494848484646464444444444444343434141413F3F3F3E3E3E3C3C3C3A3A3A 3838383737373535353333333131312E2E2E2C2C2C2929292727272626262323232121211E1E1E 1D1D1D1B1B1B1616161414141111110E0E0E0C0C0C090909060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000030101050101 0501010501010501010501010501010200007E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1F1F1F000000000000000000000000000000000000000000010101030303030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303030303 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202010101000000000000000000000000000000000000000000313131FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000090909090909090909090909101010101010101010101010 101010101010090909090909090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000181818E1E1E1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 797979000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0909090C0C0C1111111515151818181C1C1C1F1F1F2121212424242626262929292B2B2B2D2D2D 3030303232323535353838383939393C3C3C3E3E3E3F3F3F414141434343444444474747484848 4949494A4A4A4B4B4B4D4D4D4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252 525252535353535353535353535353525252525252525252525252525252515151515151505050 4F4F4F4E4E4E4D4D4D4D4D4D4B4B4B4A4A4A494949474747464646454545434343424242404040 3F3F3F3D3D3D3B3B3B3A3A3A3838383636363434343232323030302D2D2D2A2A2A292929272727 2424242222222121211E1E1E1B1B1B1818181616161414141010100E0E0E090909090909060606 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0301010501010501010501010501010501010501010200007E7E7EFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF232323000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000003F3F3FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000090909090909090909101010101010101010 101010101010101010090909090909090909000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000181818 E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF737373000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090E0E0E1111111414141818181C1C1C1E1E1E212121242424262626 2929292B2B2B2D2D2D3030303232323535353737373A3A3A3B3B3B3D3D3D3F3F3F414141434343 4545454646464747474848484A4A4A4B4B4B4D4D4D4D4D4D4F4F4F4F4F4F505050505050515151 525252525252535353535353535353535353535353535353535353525252525252525252525252 5252525050505050504F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4B4B4B494949484848464646454545 4545454343434242424040403E3E3E3C3C3C3A3A3A3838383737373535353232323030302E2E2E 2C2C2C2A2A2A2727272525252424242222221E1E1E1C1C1C1B1B1B181818151515131313101010 0E0E0E090909090909060606040404010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000301010501010501010501010501010501010501010200007E7E7EFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF3B3B3B000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 5E5E5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909090909090909101010 101010101010101010101010101010090909090909090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE656565000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090C0C0C1010101313131818181A1A1A1D1D1D 2020202222222626262828282A2A2A2D2D2D3030303232323434343737373838383A3A3A3C3C3C 3F3F3F4141414343434444444545454646464848484A4A4A4B4B4B4C4C4C4E4E4E4F4F4F4F4F4F 505050515151525252525252535353535353535353535353535353535353535353535353535353 5353535353535252525151515050504F4F4F4F4F4F4F4F4F4E4E4E4D4D4D4C4C4C4B4B4B494949 4848484747474646464545454444444343434141413F3F3F3D3D3D3B3B3B3A3A3A383838363636 3333333131313030302E2E2E2B2B2B2929292828282626262222222020201E1E1E1C1C1C1A1A1A 1616161414141111110E0E0E0C0C0C0C0C0C090909060606010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000301010501010501010501010501010501010501010200007E7E7E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF909090060606000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000C0C0CB1B1B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF646464000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909090909 090909090909090909090909101010101010090909090909090909090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC575757000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090C0C0C0E0E0E131313 1515151A1A1A1C1C1C1F1F1F2222222424242727272929292D2D2D2E2E2E313131333333353535 3737373939393C3C3C3E3E3E4141414242424343434444444646464848484A4A4A4A4A4A4D4D4D 4E4E4E4F4F4F4F4F4F505050515151525252525252535353535353535353535353545454545454 5454545454545454545454545353535252525252525151515050505050505050504F4F4F4E4E4E 4D4D4D4B4B4B4A4A4A4949494949494848484747474646464444444242424040403F3F3F3E3E3E 3C3C3C3A3A3A3737373535353434343232323030302D2D2D2C2C2C292929272727242424232323 2121211E1E1E1C1C1C1919191616161313131111111010100E0E0E090909090909060606040404 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000030101050101050101050101050101050101050101 0200007D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9161616000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000191919F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 090909090909090909090909090909090909101010090909090909090909090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC595959 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606060606 0909090E0E0E1111111515151818181C1C1C1E1E1E2121212424242727272929292C2C2C2E2E2E 3131313333333535353737373A3A3A3C3C3C3F3F3F404040414141434343454545474747494949 4949494B4B4B4C4C4C4D4D4D4E4E4E4F4F4F505050515151525252525252535353535353535353 535353545454545454545454545454545454545454535353525252525252515151515151515151 5050505050504F4F4F4D4D4D4C4C4C4B4B4B4B4B4B494949484848474747464646444444424242 4141414040403E3E3E3C3C3C3A3A3A3838383737373535353232323131312F2F2F2D2D2D2B2B2B 2929292727272525252222222020201C1C1C1B1B1B1818181515151414141111111010100E0E0E 0C0C0C090909060606010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000030101050101050101050101050101 0501010501010200007E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF707070090909 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000D0D0D8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000090909090909090909090909090909090909090909090909090909090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFC585858000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010606060909090E0E0E1111111414141818181C1C1C1D1D1D212121242424272727 2929292B2B2B2E2E2E3131313232323535353838383A3A3A3D3D3D3E3E3E3F3F3F424242444444 4646464848484848484949494A4A4A4B4B4B4C4C4C4E4E4E4F4F4F505050505050525252525252 525252525252535353545454545454545454545454545454545454535353535353525252525252 5252525252525252525151515050504F4F4F4E4E4E4D4D4D4D4D4D4A4A4A494949484848474747 4545454444444343434242424141413F3F3F3C3C3C3B3B3B3A3A3A383838363636343434323232 3030302E2E2E2C2C2C2B2B2B2929292626262424242121211F1F1F1C1C1C1A1A1A191919161616 1414141111111010100E0E0E090909060606010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000030101050101050101 0501010501010501010501010200007E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFA323232040404000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000070707474747FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000090909090909090909090909090909090909090909090909090909 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000181818E1E1E1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFC585858000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010606060909090E0E0E1010101414141818181A1A1A1D1D1D 2121212424242626262828282B2B2B2E2E2E3030303232323535353838383A3A3A3B3B3B3D3D3D 3F3F3F4141414343434545454646464848484848484949494A4A4A4C4C4C4D4D4D4F4F4F4F4F4F 505050515151515151525252525252535353535353545454545454545454535353535353535353 5353535252525252525252525252525252525151515050504F4F4F4F4F4F4E4E4E4B4B4B4B4B4B 4A4A4A4949494747474646464545454444444343434141413F3F3F3E3E3E3D3D3D3B3B3B393939 3737373636363434343131313030302E2E2E2D2D2D2A2A2A2828282626262424242121211F1F1F 1D1D1D1C1C1C1919191616161414141313131010100E0E0E090909060606060606040404010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030101 0501010501010501010501010501010501010200007E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDBDBDBB2B2B29191917E7E7E767676767676 767676767676767676767676767676767676767676767676767676767676767676767676767676 767676767676767676767676767676767676767676767676767676767676767676767676767676 767676767676767676767676767676767676767676767676767676767676767676767676767676 767676767676767676767676767676767676767676767676767676767676767676767676767676 7676767676767676767676767676767676767676767676767676767C7C7C8A8A8AA8A8A8CFCFCF FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF1F1F13A3A3A0C0C0C000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000F0F0F4F4F4FF8F8F8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000090909090909090909090909090909090909090909 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000181818E1E1E1 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA515151000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090E0E0E101010141414 1616161A1A1A1D1D1D2121212222222525252828282B2B2B2D2D2D303030333333363636373737 3838383A3A3A3C3C3C3F3F3F4141414343434444444646464747474848484949494B4B4B4C4C4C 4D4D4D4E4E4E4F4F4F505050505050515151525252525252535353535353535353535353535353 5353535353535353535252525252525252525252525252525151515050505050504F4F4F4F4F4F 4D4D4D4D4D4D4C4C4C4B4B4B4949494848484747474646464545454343434141414040403F3F3F 3E3E3E3C3C3C3A3A3A3939393737373434343232323232323030302E2E2E2B2B2B292929272727 2424242222222121211F1F1F1C1C1C1A1A1A1919191818181515151313131010100E0E0E0C0C0C 090909060606010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000301010501010501010501010501010501010501010200007E7E7EFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDBCBCBC4C4C4C1919191717170C0C0C000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 080808151515181818363636A1A1A1F6F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC9494941B1B1B131313000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101151515202020A8A8A8FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000090909090909090909090909090909090909 090909090909090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA505050000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0E0E0E1111111414141616161A1A1A1C1C1C2020202222222626262929292B2B2B2D2D2D303030 3232323434343636363838383A3A3A3C3C3C3E3E3E404040424242444444454545474747484848 4949494A4A4A4C4C4C4D4D4D4E4E4E4F4F4F4F4F4F505050505050515151525252525252535353 535353535353535353535353535353535353535353535353535353525252525252515151515151 5050505050504F4F4F4F4F4F4E4E4E4C4C4C4B4B4B4A4A4A494949484848464646454545444444 4242424141414040403E3E3E3D3D3D3B3B3B3A3A3A3737373636363434343232323030302F2F2F 2D2D2D2B2B2B2929292727272424242222222020201E1E1E1D1D1D1C1C1C1A1A1A161616151515 1313131010100E0E0E090909090909060606010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000301010501010501010501010501010501010501010200007E7E7EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEA0A0A0212121111111000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000A0A0A1818187A7A7AF5F5F5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDC4C4C4848484 5E5E5E525252525252525252525252525252525252525252525252525252525252525252525252 525252525252525252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525252525252526262628B8B8BCECECEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 646464000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000090909090909090909090909090909 090909090909090909000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FAFAFA505050000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090E0E0E1010101313131515151818181D1D1D212121232323262626272727 2A2A2A2D2D2D2F2F2F3232323434343737373838383A3A3A3C3C3C3E3E3E404040424242434343 4545454646464747474848484A4A4A4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F505050505050515151 515151535353535353535353535353545454545454545454545454535353535353535353525252 5252525252525151515151515050505050504F4F4F4E4E4E4D4D4D4B4B4B4A4A4A4A4A4A484848 4747474646464545454343434242424141414040403D3D3D3C3C3C3B3B3B393939373737353535 3333333232323030302E2E2E2D2D2D2A2A2A2828282626262424242222222222221F1F1F1C1C1C 1B1B1B1919191616161414141111111010100E0E0E090909090909060606050505010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202020202 020202020202020202020202020202010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000030101050101050101050101050101050101050101020000 7E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDADADA2E2E2E0E0E0E000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000505051C1C1CB6B6B6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF646464000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909090909090909 090909090909090909090909090909000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9505050000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E1111111414141A1A1A1C1C1C202020 2222222424242727272929292C2C2C2F2F2F3232323434343636363737373939393C3C3C3E3E3E 3F3F3F4141414343434444444545454646464848484A4A4A4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F 505050505050515151535353535353535353535353545454545454545454545454545454535353 5353535353535252525252525252525252525151515151515050504F4F4F4E4E4E4D4D4D4C4C4C 4B4B4B4A4A4A4949494848484747474646464444444343434343434040403F3F3F3E3E3E3C3C3C 3A3A3A3838383737373636363333333232323030302E2E2E2C2C2C292929282828272727262626 2323232121211E1E1E1C1C1C1B1B1B1818181616161414141111110E0E0E0C0C0C0C0C0C090909 060606010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000030101050101050101050101050101050101 0501010200007E7E7EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5161616000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000E0E0E6D6D6DFEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000090909 090909090909090909090909090909090909090909000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC5E5E5E000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 0101010101010101010101010101010101010101010101010606060909090E0E0E111111151515 1818181C1C1C1E1E1E2121212323232626262929292C2C2C2E2E2E313131333333353535373737 3A3A3A3C3C3C3D3D3D3F3F3F4141414343434343434444444646464848484B4B4B4B4B4B4C4C4C 4D4D4D4E4E4E4F4F4F505050505050525252525252525252535353535353545454545454545454 5454545454545454545353535353535353535353535353535252525252525151515050504F4F4F 4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B494949484848474747464646464646434343434343 4141413F3F3F3E3E3E3C3C3C3A3A3A3939393737373636363434343232323030302E2E2E2D2D2D 2B2B2B2929292727272525252323232222222020201C1C1C1B1B1B191919161616141414111111 1010100E0E0E0C0C0C090909060606060606010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000030101050101050101050101 0501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8B8B8B121212000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000040404484848FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000090909090909090909090909090909090909090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000181818E1E1E1FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC626262000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101060606090909 0E0E0E1111111414141818181B1B1B1D1D1D2020202323232626262929292C2C2C2E2E2E313131 3232323535353838383A3A3A3B3B3B3D3D3D3F3F3F414141424242434343454545474747494949 4A4A4A4B4B4B4C4C4C4D4D4D4E4E4E4F4F4F4F4F4F515151515151525252525252535353535353 545454545454535353535353535353535353545454535353535353535353535353535353525252 5252525050505050504F4F4F4F4F4F4D4D4D4D4D4D4C4C4C4B4B4B494949484848484848474747 4545454444444343434242424040403E3E3E3D3D3D3C3C3C3A3A3A393939373737353535333333 3131313030302F2F2F2D2D2D2B2B2B2929292727272626262424242121211F1F1F1C1C1C1B1B1B 1818181616161515151313131111110E0E0E0C0C0C090909090909060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000030101050101 0501010501010501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF959595111111000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000202024A4A4AFEFEFEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF646464000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000090909090909090909090909090909000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000181818E1E1E1FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE 6F6F6F000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 0101010606060909090E0E0E1010101414141616161A1A1A1C1C1C202020222222262626292929 2B2B2B2E2E2E3030303232323535353838383939393B3B3B3D3D3D3F3F3F404040414141444444 4646464747474848484848484949494B4B4B4C4C4C4D4D4D4E4E4E4F4F4F505050505050515151 525252525252535353535353535353525252535353535353535353535353545454545454545454 5454545353535252525252525151515050505050504E4E4E4D4D4D4D4D4D4B4B4B4A4A4A494949 4949494949494747474646464545454444444242424141413F3F3F3F3F3F3C3C3C3B3B3B3A3A3A 3838383636363535353333333232323030302E2E2E2C2C2C2A2A2A292929282828252525232323 2121211F1F1F1C1C1C1C1C1C1A1A1A1919191616161414141111111010100E0E0E0C0C0C090909 060606050505010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0301010501010501010501010501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1C1C1131313000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000020202717171FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF666666000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000090909090909090909090909000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000171717 E2E2E2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFE737373000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 0101010101010101010101010606060909090C0C0C1010101313131515151919191C1C1C1F1F1F 2222222424242828282A2A2A2D2D2D2F2F2F3232323535353636363838383A3A3A3C3C3C3D3D3D 3F3F3F4141414343434545454545454646464848484949494B4B4B4B4B4B4C4C4C4E4E4E4E4E4E 4F4F4F505050515151525252525252525252525252525252525252525252535353535353535353 5353535454545454545353535353535252525252525151515151514F4F4F4E4E4E4E4E4E4D4D4D 4C4C4C4B4B4B4B4B4B4A4A4A4949494848484747474646464444444343434242424141413F3F3F 3E3E3E3D3D3D3B3B3B3A3A3A3838383737373636363333333232322F2F2F2E2E2E2D2D2D2B2B2B 2929292727272626262424242222222020201F1F1F1D1D1D1C1C1C1A1A1A181818161616141414 1111110E0E0E0C0C0C090909090909010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000301010501010501010501010501010501010501010200007F7F7FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F11B1B1B 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101020202020202020202020202020202020202020202020202020202 020202020202020202020202020202020202020202020202020202020202020202020202010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 030303BDBDBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727272 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000090909090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000181818F1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF888888000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101010101010101010101 0101010101010101010101010101010101010101010606060909090C0C0C101010131313151515 1A1A1A1C1C1C1E1E1E2121212424242727272929292C2C2C2F2F2F313131323232343434373737 3939393A3A3A3C3C3C3F3F3F4141414343434444444545454646464848484949494A4A4A4B4B4B 4D4D4D4D4D4D4E4E4E4F4F4F505050505050515151525252515151515151525252525252525252 535353535353535353545454545454535353535353525252525252525252515151505050505050 4F4F4F4F4F4F4E4E4E4D4D4D4D4D4D4C4C4C4B4B4B4A4A4A494949484848474747464646444444 4444444141414141413F3F3F3E3E3E3C3C3C3B3B3B3A3A3A393939363636343434323232313131 3030302F2F2F2D2D2D2B2B2B2929292727272525252424242323232222222020201D1D1D1C1C1C 1B1B1B1919191616161313131111110E0E0E0E0E0E090909090909060606040404010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000301010501010501010501010501010501010501010200007F7F7F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 5F5F5F050505000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000040404060606 0606060808080B0B0B0D0D0D0F0F0F0F0F0F111111121212131313141414141414141414151515 151515151515161616161616161616171717161616151515151515141414141414131313131313 1212121111110D0D0D070707020202010101000000000000000000000000000000000000000000 000000000000000000090909FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF8D8D8D010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000171717FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF878787000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0101010101010101010101010101010101010101010101010101010101010606060909090C0C0C 1010101313131515151818181B1B1B1D1D1D2121212323232626262828282C2C2C2E2E2E2F2F2F 3131313434343636363737373939393C3C3C3E3E3E404040414141434343444444464646474747 4949494A4A4A4B4B4B4C4C4C4D4D4D4D4D4D4F4F4F4F4F4F505050505050505050515151515151 525252525252525252535353535353545454545454545454535353535353525252525252525252 5151515151515050505050504F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4B4B4B4A4A4A494949 4848484646464646464343434343434242424040403E3E3E3D3D3D3C3C3C3B3B3B393939383838 3636363535353333333232323030302F2F2F2D2D2D2C2C2C2A2A2A282828272727252525232323 2222222020201E1E1E1C1C1C1A1A1A1818181515151313131111111010100E0E0E0C0C0C090909 060606050505010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000030101050101050101050101050101050101050101 0200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE1E1E1151515000000000000000000000000000000000000000000000000000000000000 000000000000000000010101030303040404040404040404040404040404040404040404040404 040404040404040404040404040404040404040404040404040404040404030303030303030303 030303030303030303030303030303030303030303030303030303030303030303030303080808 0B0B0B0E0E0E1010101212121515151717171A1A1A1B1B1B1D1D1D1E1E1E1F1F1F212121212121 2222222323232323232323232323232424242424242424242323232222222222222121211F1F1F 1E1E1E1D1D1D1D1D1D1D1D1D1B1B1B1919191515150B0B0B020202000000000000000000000000 000000000000000000000000000000010101606060FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFB8B8B80E0E0E000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000090909000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000202020FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F 040404000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 0606060606060C0C0C0E0E0E1111111313131616161A1A1A1C1C1C202020222222252525282828 2B2B2B2D2D2D2E2E2E3131313333333434343636363838383B3B3B3D3D3D3F3F3F414141434343 4343434444444646464848484949494A4A4A4B4B4B4B4B4B4D4D4D4E4E4E4F4F4F4F4F4F505050 505050515151515151525252525252525252535353545454545454545454545454545454535353 5353535353535252525252525151515050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D 4B4B4B4A4A4A4949494848484848484646464545454444444343434141413F3F3F3E3E3E3E3E3E 3C3C3C3C3C3C3A3A3A3838383737373535353434343232323131313030302E2E2E2D2D2D2A2A2A 2828282727272626262424242222221F1F1F1D1D1D1C1C1C1B1B1B181818151515151515131313 1010100E0E0E0C0C0C090909060606050505010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000030101050101050101050101050101 0501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF5E5E5E010101000000000000000000000000000000000000000000000000 000000000000000000030303070707080808080808080808080808080808080808080808080808 080808080808080808080808080808080808070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 0C0C0C0F0F0F1414141515151616161919191A1A1A1D1D1D1F1F1F202020212121232323252525 262626262626262626272727282828282828282828282828282828282828282828252525252525 2525252424242323232222222121212020201F1F1F1C1C1C191919181818141414030303010101 000000000000000000000000000000000000000000000000030303EFEFEFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9171717000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000004D4D4DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFAFAFAF080808000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 0101010101010101010101010606060909090C0C0C0E0E0E1313131515151A1A1A1C1C1C1E1E1E 2222222424242727272929292B2B2B2E2E2E3030303232323333333636363838383A3A3A3C3C3C 3E3E3E4040404141414242424444444646464848484848484949494A4A4A4B4B4B4C4C4C4D4D4D 4D4D4D505050505050505050515151525252525252525252535353545454545454545454545454 5454545454545454545454545252525252525252525151515050505050505050504F4F4F4F4F4F 4F4F4F4E4E4E4D4D4D4C4C4C4B4B4B494949494949484848484848464646454545444444424242 4141414141413F3F3F3F3F3F3E3E3E3C3C3C3A3A3A383838373737373737353535343434323232 3030302E2E2E2D2D2D2B2B2B2A2A2A2828282626262424242222222121211F1F1F1C1C1C1B1B1B 1A1A1A1818181414141313131111110E0E0E0C0C0C090909090909060606040404020202010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000030101050101050101 0501010501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9181818000000000000000000000000000000000000000000 000000000000000000010101060606080808080808080808080808080808080808080808080808 080808080808070707070707070707070707070707070707070707070707070707070707070707 0707070707070707070707070707070707070707070707070707070707070707070707070C0C0C 0C0C0C0F0F0F1212121313131616161818181A1A1A1C1C1C1F1F1F202020222222242424252525 2626262828282929292A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A 2929292828282727272727272525252525252424242323232121211F1F1F1D1D1D1B1B1B191919 1616160303030000000000000000000000000000000000000000000000000000005F5F5FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF222222000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000A0A0AA5A5A5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBEBEBE0E0E0E000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0101010101010101010101010101010101010101010606060606060909090E0E0E111111151515 1818181B1B1B1D1D1D2121212323232626262828282B2B2B2D2D2D2E2E2E303030333333353535 3737373A3A3A3C3C3C3E3E3E3F3F3F404040424242444444464646464646474747484848494949 4B4B4B4B4B4B4C4C4C4F4F4F4F4F4F505050505050515151525252525252525252535353535353 545454545454545454545454545454545454535353535353525252525252525252515151515151 5151515050505050504F4F4F4F4F4F4D4D4D4C4C4C4C4C4C4B4B4B4A4A4A4A4A4A494949484848 4646464545454444444444444343434242424141413F3F3F3E3E3E3C3C3C3B3B3B3A3A3A383838 3838383636363434343232323131312F2F2F2E2E2E2D2D2D2B2B2B282828272727262626242424 2222222020201E1E1E1C1C1C1A1A1A1818181616161414141111111010100E0E0E0E0E0E0C0C0C 090909050505010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030101 0501010501010501010501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB9B9B90F0F0F000000000000000000000000000000 000000000000000000000000010101070707080808080808080808070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 0C0C0C0B0B0B0E0E0E1111111515151717171A1A1A1D1D1D1E1E1E202020212121232323252525 2626262828282A2A2A2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2C2C2C2C2C2C2D2D2D2E2E2E2E2E2E 2E2E2E2C2C2C2B2B2B2B2B2B2A2A2A2929292929292727272727272525252424242121211E1E1E 1D1D1D1C1C1C191919151515010101000000000000000000000000000000000000000000000000 0A0A0AFAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF797979030303000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000171717F2F2F2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCB151515000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101060606090909 0E0E0E1111111414141616161A1A1A1C1C1C2020202222222424242727272929292C2C2C2E2E2E 3131313333333535353737373A3A3A3B3B3B3D3D3D3E3E3E414141434343444444444444464646 4747474848484949494B4B4B4B4B4B4D4D4D4D4D4D4E4E4E4F4F4F505050505050515151525252 525252525252535353535353545454545454545454545454545454535353535353535353525252 5252525252525252525252525151515151515050504F4F4F4E4E4E4E4E4E4D4D4D4B4B4B4B4B4B 4A4A4A4949494848484747474646464646464444444444444343434141414040403F3F3F3E3E3E 3D3D3D3B3B3B3A3A3A3939393737373636363434343333333232323030302E2E2E2C2C2C2B2B2B 2929292828282626262424242222222121211E1E1E1C1C1C1C1C1C1A1A1A181818151515131313 1111111010100C0C0C090909060606060606010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000301010501010501010501010501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF686868000000000000000000000000 000000000000000000000000000000000000050505070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707060606060606 0B0B0B0B0B0B0E0E0E1111111515151616161818181C1C1C1E1E1E202020212121232323262626 2727272828282929292B2B2B2C2C2C2D2D2D2F2F2F2F2F2F2F2F2F303030303030303030303030 2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2C2C2C2B2B2B2A2A2A292929262626252525 2323232121211F1F1F1E1E1E1C1C1C1919190B0B0B010101000000000000000000000000000000 000000000000020202B1B1B1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E4 161616000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000010101515151 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7D7D71E1E1E 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010101010101010101010101010101 0101010606060909090E0E0E1010101313131515151919191C1C1C1E1E1E212121242424272727 2828282B2B2B2E2E2E3030303232323434343737373939393A3A3A3C3C3C3E3E3E414141424242 4343434444444545454747474848484949494A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4E4E4E4F4F4F 505050505050515151525252525252525252535353535353545454545454535353535353535353 5353535353535353535353535353535252525252525252525151515050505050504F4F4F4F4F4F 4C4C4C4C4C4C4B4B4B4A4A4A494949484848484848474747464646464646444444434343424242 4141414040403F3F3F3E3E3E3D3D3D3C3C3C3A3A3A393939373737363636353535333333323232 3030302E2E2E2E2E2E2C2C2C2A2A2A2828282727272424242222222121212020201E1E1E1C1C1C 1A1A1A1818181616161414141111110E0E0E0C0C0C090909090909060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000301010501010501010501010501010501010501010200007F7F7FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2F000000000000 000000000000000000000000000000000000000000030303070707070707070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707070707070707070707070707060606060606060606060606060606 0606060B0B0B0E0E0E0E0E0E1313131515151717171A1A1A1D1D1D1F1F1F212121232323252525 2626262929292B2B2B2B2B2B2C2C2C2C2C2C2E2E2E2F2F2F303030313131323232323232323232 3232323131313131313131313131313131313131313131313030302F2F2F2C2C2C2A2A2A292929 2828282626262424242323232121211E1E1E1C1C1C1B1B1B161616020202000000000000000000 000000000000000000000000000000515151FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF535353020202000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 151515DBDBDBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE6E6E62D2D2D000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0101010101010101010101010606060909090C0C0C0E0E0E1111111515151818181A1A1A1C1C1C 2020202222222424242727272929292D2D2D2E2E2E3131313333333535353737373838383B3B3B 3E3E3E3F3F3F3F3F3F4141414242424444444646464747474848484949494949494A4A4A4B4B4B 4D4D4D4E4E4E4F4F4F4F4F4F505050505050515151515151525252525252535353535353535353 535353535353535353535353535353535353535353535353525252525252525252515151505050 5050505050504E4E4E4D4D4D4D4D4D4C4C4C4B4B4B4A4A4A494949494949484848484848474747 4646464444444343434343434242424040404040403F3F3F3E3E3E3C3C3C3B3B3B3A3A3A393939 3737373535353333333232323232323030302E2E2E2D2D2D2B2B2B292929272727262626242424 2323232121211F1F1F1C1C1C1C1C1C1A1A1A1818181515151313131111111010100C0C0C090909 090909060606040404010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000030101050101050101050101050101050101050101020000 7F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C 000000000000000000000000000000000000000000000000000000060606070707070707070707 070707070707070707070707070707070707070707070707070707070707070707070707070707 070707070707070707070707060606060606060606060606060606060606060606060606060606 0606060606060B0B0B0E0E0E1111111313131616161818181C1C1C1E1E1E202020222222252525 2626262828282A2A2A2B2B2B2C2C2C2D2D2D2E2E2E2F2F2F313131323232333333343434353535 3535353535353434343434343434343333333333333333333333333232323131313030302F2F2F 2D2D2D2B2B2B2929292828282626262424242222222020201E1E1E1B1B1B191919030303000000 0000000000000000000000000000000000000000001A1A1AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE6E6E6161616000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000060606626262FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFECECEC3B3B3B000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000101010101010101010606060909090909090E0E0E111111141414 1616161919191C1C1C1E1E1E2121212323232626262929292B2B2B2D2D2D303030323232333333 3535353838383A3A3A3C3C3C3D3D3D3E3E3E3F3F3F414141434343444444454545484848484848 4949494A4A4A4B4B4B4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F505050505050515151525252525252 525252525252525252525252525252535353535353535353535353535353525252525252525252 5151515151515050505050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4B4B4B4B4B4B4A4A4A 4A4A4A4949494848484747474646464545454444444343434242424141414040403F3F3F3E3E3E 3D3D3D3C3C3C3A3A3A3838383636363535353535353434343232323030302E2E2E2D2D2D2A2A2A 2929292828282727272424242222222222222121211F1F1F1C1C1C1A1A1A181818151515141414 1111111010100E0E0E0C0C0C090909060606050505010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000030101050101050101050101050101050101 0501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF191919000000000000000000000000000000000000000000000000010101070707070707 070707070707070707070707070707070707070707070707070707070707070707070707060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 0606060606060B0B0B0E0E0E1111111313131616161717171919191C1C1C1F1F1F212121242424 2626262727272929292A2A2A2C2C2C2E2E2E303030303030313131323232333333353535353535 363636373737373737373737363636363636363636353535343434343434343434343434333333 3232323030302E2E2E2D2D2D2B2B2B2929292727272525252424242222221E1E1E1C1C1C1B1B1B 070707000000000000000000000000000000000000000000000000121212F7F7F7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF949494111111000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000001F1F1FF2F2F2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8585858000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101010101060606090909 0C0C0C0E0E0E1111111414141818181B1B1B1C1C1C1F1F1F2222222424242727272929292C2C2C 2E2E2E3030303232323535353737373838383A3A3A3C3C3C3D3D3D3E3E3E404040424242434343 4646464646464848484949494A4A4A4B4B4B4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050 515151515151525252525252525252525252525252525252525252525252525252525252525252 5252525252525252525252525151515151515151515050505050504F4F4F4F4F4F4E4E4E4D4D4D 4D4D4D4C4C4C4B4B4B4B4B4B4A4A4A494949484848474747474747454545444444434343424242 4141414040403F3F3F3E3E3E3D3D3D3C3C3C3A3A3A393939383838373737353535333333323232 3030302E2E2E2D2D2D2C2C2C2A2A2A2929292727272626262424242222222121211E1E1E1C1C1C 1A1A1A1A1A1A1616161515151414141111110E0E0E0C0C0C090909090909060606010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000030101050101050101050101 0501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF171717000000000000000000000000000000000000000000000000030303 070707070707070707070707070707070707060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 0606060606060606060B0B0B0E0E0E1111111515151616161919191A1A1A1D1D1D1F1F1F212121 2424242626262828282A2A2A2B2B2B2C2C2C2E2E2E303030323232333333333333353535353535 363636383838383838383838383838383838373737373737373737363636363636353535353535 3434343434343333333131312F2F2F2E2E2E2D2D2D2B2B2B292929272727262626242424202020 1E1E1E1C1C1C0A0A0A000000000000000000000000000000000000000000000000111111D8D8D8 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D4D4D090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000151515CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE7F7F7F000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0101010606060606060909090E0E0E1010101414141616161919191B1B1B1E1E1E212121242424 2626262929292B2B2B2D2D2D2E2E2E3232323333333636363737373A3A3A3B3B3B3C3C3C3D3D3D 3F3F3F4141414444444444444646464747474848484949494A4A4A4B4B4B4D4D4D4D4D4D4D4D4D 4E4E4E4F4F4F505050505050505050515151515151525252525252525252525252525252525252 525252525252525252525252525252525252525252525252525252525252515151505050505050 4F4F4F4F4F4F4E4E4E4D4D4D4D4D4D4C4C4C4B4B4B4A4A4A494949494949484848474747474747 4646464444444343434242424141414141413F3F3F3F3F3F3E3E3E3C3C3C3B3B3B393939383838 3737373535353434343232323131312F2F2F2E2E2E2D2D2D2B2B2B292929282828262626242424 2222222020201E1E1E1D1D1D1C1C1C1B1B1B1919191616161414141111111010100E0E0E0C0C0C 090909090909060606040404010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000030101050101 0501010501010501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000000000000000000000000000 000000030303060606060606060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 0606060606060606060B0B0B0E0E0E1111111313131616161818181919191C1C1C1E1E1E1F1F1F 2222222525252727272929292C2C2C2D2D2D2F2F2F2F2F2F313131333333353535353535363636 3737373838383939393A3A3A3A3A3A393939393939393939393939393939393939383838383838 3737373636363636363535353434343232323030302F2F2F2E2E2E2D2D2D2B2B2B292929272727 2525252323231F1F1F1D1D1D0B0B0B000000000000000000000000000000000000000000000000 0E0E0EC9C9C9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9 373737080808000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000131313B0B0B0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF919191020202000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000606060909090C0C0C0E0E0E1111111414141818181B1B1B 1D1D1D2020202222222525252727272929292B2B2B2E2E2E313131323232353535373737383838 3939393A3A3A3D3D3D3F3F3F4141414242424343434444444646464747474848484949494B4B4B 4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F515151515151515151515151525252525252 525252525252525252525252525252525252525252525252525252525252525252525252525252 5151515050505050505050504F4F4F4F4F4F4E4E4E4D4D4D4D4D4D4C4C4C4B4B4B4A4A4A4A4A4A 4949494949494848484747474646464545454444444444444343434242424141413F3F3F3E3E3E 3C3C3C3C3C3C3B3B3B3838383838383636363535353232323131313030302F2F2F2D2D2D2C2C2C 2A2A2A2828282626262424242222222222222020201F1F1F1D1D1D1B1B1B191919161616141414 1313131010100E0E0E0E0E0E0C0C0C090909060606050505040404010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0301010501010501010501010501010501010501010200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000000000000000 000000000000000000040404060606060606060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 0606060606060B0B0B0B0B0B0B0B0B0D0D0D1212121515151818181818181C1C1C1E1E1E202020 2222222424242626262929292B2B2B2D2D2D2F2F2F313131323232333333343434363636383838 3939393A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B 3A3A3A3A3A3A3A3A3A3939393838383737373636363434343333333131313030302E2E2E2B2B2B 2A2A2A2929292626262424242020201E1E1E0B0B0B000000000000000000000000000000000000 0000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF7F7F74141410D0D0D000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000151515B2B2B2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFAFAFAF0A0A0A000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000505050909090E0E0E101010 1313131818181A1A1A1C1C1C1E1E1E2121212424242626262828282B2B2B2E2E2E303030323232 3434343535353737373838383A3A3A3C3C3C3F3F3F404040414141434343444444454545464646 4747474949494949494A4A4A4B4B4B4C4C4C4D4D4D4E4E4E4E4E4E505050505050505050515151 515151525252525252525252525252525252525252535353535353535353535353535353535353 5353535252525252525252525151515151515151515050505050504F4F4F4E4E4E4D4D4D4D4D4D 4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A494949484848474747464646454545454545444444 4242424141414040403F3F3F3E3E3E3C3C3C3B3B3B3A3A3A383838373737353535343434333333 3131313030302E2E2E2D2D2D2B2B2B2929292828282727272424242424242222222020201D1D1D 1C1C1C1A1A1A1919191515151414141313131010100E0E0E0C0C0C090909090909060606050505 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000301010501010501010501010501010501010501010200007F7F7FFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000 000000000000000000000000000000040404060606060606060606060606060606060606060606 060606060606060606060606060606060606060606060606060606060606060606060606060606 0606060505050505050505050A0A0A0D0D0D1010101414141717171818181B1B1B1C1C1C1F1F1F 2121212424242525252727272929292C2C2C2E2E2E303030323232343434353535353535373737 3939393A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E 3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3A3A3A3A3A3A393939383838373737343434343434313131 2F2F2F2D2D2D2B2B2B2929292828282424242222221E1E1E0C0C0C000000000000000000000000 0000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD797979131313000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000080808212121D3D3D3FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8C8161616000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 0808080B0B0B1010101313131616161818181B1B1B1D1D1D2121212222222525252828282B2B2B 2D2D2D2E2E2E3131313232323434343636363838383A3A3A3D3D3D3E3E3E3F3F3F414141424242 4444444545454646464848484848484949494A4A4A4B4B4B4C4C4C4D4D4D4E4E4E4F4F4F4F4F4F 4F4F4F505050505050515151515151525252525252525252525252525252535353535353535353 545454535353535353535353535353525252525252525252525252515151515151505050505050 4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4B4B4B4A4A4A494949494949484848474747 4646464545454444444343434242424141414141413E3E3E3E3E3E3C3C3C3B3B3B3A3A3A383838 3838383737373434343333333232323030302F2F2F2D2D2D2C2C2C2B2B2B292929272727262626 2424242222222121211F1F1F1D1D1D1A1A1A1919191818181515151313131111111010100E0E0E 0C0C0C090909090909060606050505010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000301010501010501010501010501010501010501010200007F7F7F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000 000000000000000000000000000000000000000000040404060606060606060606060606060606 060606060606060606060606060606060606060606060606060606050505050505050505050505 0505050505050505050A0A0A0A0A0A0D0D0D1010101212121515151818181919191D1D1D1F1F1F 2121212323232525252727272929292B2B2B2C2C2C303030313131333333343434343434363636 3737373939393A3A3A3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3F3F3F3F3F3F404040404040 4040404040403F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3B3B3B393939373737363636 3434343232323030302E2E2E2C2C2C2B2B2B2828282525252222222020200C0C0C000000000000 0000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0D0D02D2D2D121212000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000030303161616737373F7F7F7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDADADA262626000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000505050505050808080D0D0D1010101414141616161A1A1A1C1C1C1E1E1E212121 2424242727272929292B2B2B2E2E2E3030303131313232323535353838383A3A3A3B3B3B3C3C3C 3E3E3E4040404242424343434444444646464646464848484949494A4A4A4B4B4B4C4C4C4D4D4D 4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050515151515151515151515151525252525252 535353535353535353535353535353535353535353535353535353535353535353525252525252 5151515151515050505050505050504F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B 4A4A4A4848484848484747474646464545454444444444444343434141414040403F3F3F3E3E3E 3C3C3C3C3C3C3A3A3A3A3A3A3737373737373535353434343232323131313030302F2F2F2C2C2C 2B2B2B2929292828282626262424242323232222221E1E1E1D1D1D1C1C1C1A1A1A181818161616 1515151414141111111010100E0E0E0C0C0C090909090909060606050505010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000030101050101050101050101050101050101050101 0200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 161616000000000000000000000000000000000000000000000000040404060606060606060606 060606060606060606050505050505050505050505050505050505050505050505050505050505 0505050505050505050A0A0A0A0A0A0D0D0D1010101212121414141717171818181B1B1B1E1E1E 1F1F1F2323232525252626262929292B2B2B2C2C2C2E2E2E303030313131343434353535363636 3737373838383A3A3A3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F404040404040414141414141 4141414141414141414141414040404040403F3F3F3F3F3F3E3E3E3D3D3D3C3C3C3C3C3C3A3A3A 3838383636363434343333333131312F2F2F2D2D2D2A2A2A2828282525252323232020200C0C0C 0000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF BABABA3838381717170A0A0A000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000101011313131A1A1A6D6D6DE9E9E9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EEEEEE434343000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000505050808080B0B0B0D0D0D101010131313181818 1A1A1A1C1C1C2020202222222424242727272929292C2C2C2D2D2D2F2F2F323232343434373737 3838383939393B3B3B3D3D3D3F3F3F404040414141434343444444454545464646484848494949 4A4A4A4B4B4B4B4B4B4B4B4B4C4C4C4D4D4D4E4E4E4F4F4F4F4F4F505050505050505050505050 515151515151525252525252535353535353535353535353535353535353535353535353535353 5252525252525252525252525151515151515151515050504F4F4F4F4F4F4F4F4F4E4E4E4D4D4D 4D4D4D4D4D4D4C4C4C4A4A4A494949494949484848484848464646464646464646434343434343 4242424141413F3F3F3F3F3F3E3E3E3D3D3D3A3A3A3A3A3A393939373737363636353535343434 3232323030302F2F2F2E2E2E2C2C2C2B2B2B2929292828282727272424242222222121211F1F1F 1D1D1D1C1C1C1A1A1A1919191818181616161414141313131010100E0E0E0E0E0E0C0C0C060606 060606040404010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000030101050101050101050101050101 050101050101020000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF161616000000000000000000000000000000000000000000000000030303050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 0505050505050505050A0A0A0A0A0A0D0D0D1010101212121414141717171818181B1B1B1E1E1E 1F1F1F2121212424242727272929292A2A2A2B2B2B2E2E2E2F2F2F303030323232353535373737 3939393939393A3A3A3C3C3C3D3D3D3E3E3E3F3F3F404040414141414141414141424242434343 4343434343434343434343434343434242424141414141414040404040403F3F3F3E3E3E3D3D3D 3C3C3C3B3B3B3939393737373535353434343131312F2F2F2C2C2C2A2A2A282828252525232323 2020200C0C0C0000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFECECECA9A9A95C5C5C2F2F2F2121211F1F1F202020202020202020 202020202020202020202020202020202020202020202020202020202020202020202020202020 202020202020202020202020202020202020202020202020202020202020202020202020202020 2020202020202020202121211C1C1C2424244040407B7B7BC7C7C7FDFDFDFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFB6C6C6C000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000505050505050808080B0B0B 0F0F0F1212121414141818181C1C1C1F1F1F2121212323232626262828282929292C2C2C2E2E2E 3131313333333434343636363838383A3A3A3C3C3C3E3E3E3E3E3E404040414141424242434343 4545454646464848484848484A4A4A4A4A4A4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F 4F4F4F505050505050515151525252525252525252525252525252525252535353535353535353 535353535353525252525252525252525252525252515151515151515151515151505050505050 5050504F4F4F4F4F4F4F4F4F4E4E4E4C4C4C4B4B4B4B4B4B4A4A4A494949494949484848484848 4545454545454444444343434242424141414141414040403E3E3E3D3D3D3C3C3C3A3A3A393939 3838383737373636363333333232323131313030302E2E2E2D2D2D2B2B2B2A2A2A282828272727 2626262424242222222020201E1E1E1D1D1D1C1C1C1B1B1B1A1A1A181818151515131313111111 1010100C0C0C0C0C0C090909090909060606050505010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000030101050101050101 050101050101050101050101020000818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000000000000000000000000000000000 030303050505050505050505050505050505050505050505050505050505050505050505050505 0505050505050505050A0A0A0A0A0A0D0D0D1010101212121414141717171818181B1B1B1D1D1D 1F1F1F2222222323232424242727272A2A2A2B2B2B2D2D2D2F2F2F313131333333343434353535 3838383A3A3A3B3B3B3C3C3C3D3D3D3E3E3E404040414141414141424242434343434343444444 444444454545454545454545454545454545444444444444434343434343424242424242404040 3F3F3F3E3E3E3D3D3D3C3C3C3A3A3A3737373535353333333131312F2F2F2D2D2D2B2B2B292929 2525252424242121210C0C0C0000000000000000000000000000000000000000000000000D0D0D BFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF999999040404000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0505050808080B0B0B0D0D0D1010101414141717171919191B1B1B1F1F1F222222242424272727 2929292C2C2C2E2E2E3030303232323333333535353737373838383B3B3B3C3C3C3D3D3D3F3F3F 4040404141414242424343434545454646464848484949494949494A4A4A4B4B4B4C4C4C4D4D4D 4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050515151515151525252525252525252525252525252 525252525252525252525252535353535353525252525252525252525252525252525252525252 5252525151515151515050505050505050504F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4B4B4B4B4B4B 4A4A4A4949494848484747474646464545454444444343434242424242424040404040403F3F3F 3D3D3D3C3C3C3A3A3A3A3A3A3838383737373636363535353232323131313030302E2E2E2E2E2E 2D2D2D2C2C2C2A2A2A2828282626262424242323232222222121212020201E1E1E1C1C1C1A1A1A 1818181616161515151313131111111010100E0E0E0C0C0C090909090909060606010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030101 050101050101050101050101050101050101020000818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000000000000000000000 000000000000030303050505050505050505050505050505050505050505050505050505050505 0505050505050505050505050A0A0A0D0D0D0D0D0D1010101414141515151818181919191C1C1C 1E1E1E1F1F1F2222222424242626262828282A2A2A2D2D2D2F2F2F303030323232343434353535 3636363838383A3A3A3C3C3C3E3E3E3E3E3E3F3F3F404040414141424242434343434343454545 454545454545454545464646464646464646464646464646464646454545454545444444444444 4343434242424040403F3F3F3D3D3D3C3C3C3A3A3A3838383636363434343232323030302E2E2E 2C2C2C2A2A2A2727272323232222220C0C0C000000000000000000000000000000000000000000 0000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8B8B80F0F0F000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000505050808080D0D0D1010101212121414141818181B1B1B1E1E1E 2121212323232626262929292C2C2C2D2D2D2F2F2F3131313232323434343535353838383A3A3A 3A3A3A3C3C3C3E3E3E3F3F3F3F3F3F414141434343444444464646474747484848484848494949 4A4A4A4B4B4B4B4B4B4D4D4D4D4D4D4D4D4D4E4E4E4F4F4F505050505050505050515151525252 525252525252525252525252525252525252535353535353535353535353535353535353525252 5252525252525252525252525252525151515151515151515050505050504F4F4F4E4E4E4D4D4D 4D4D4D4B4B4B4B4B4B4B4B4B4A4A4A494949494949484848464646454545444444444444434343 4343434141414040403E3E3E3D3D3D3C3C3C3B3B3B3A3A3A3A3A3A383838363636343434323232 3232323131313030303030302E2E2E2D2D2D2B2B2B292929282828272727252525242424222222 2121211E1E1E1C1C1C1B1B1B1A1A1A1818181616161515151313131010100E0E0E0E0E0E0C0C0C 090909090909060606050505010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000030101050101050101050101050101050101050101020000828282FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000000000 000000000000000000000000030303050505050505050505050505050505050505050505050505 0505050505050505050505050A0A0A0A0A0A0D0D0D0F0F0F1111111414141717171919191C1C1C 1D1D1D1F1F1F2222222323232626262828282A2A2A2B2B2B2D2D2D303030323232333333343434 3737373838383939393A3A3A3C3C3C3E3E3E404040404040404040414141424242434343444444 454545464646464646464646464646464646464646464646474747474747474747464646464646 4545454545454444444242424040403F3F3F3F3F3F3D3D3D3B3B3B393939383838363636333333 3131312F2F2F2D2D2D2A2A2A2828282525252222220C0C0C000000000000000000000000000000 0000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D3D3D3212121000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000505050808080B0B0B0D0D0D0F0F0F141414 1717171A1A1A1C1C1C1E1E1E2121212424242626262929292C2C2C2E2E2E303030313131323232 3535353737373737373939393B3B3B3C3C3C3D3D3D3E3E3E404040424242444444444444454545 4646464747474848484949494A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F 515151515151515151525252525252525252525252525252535353535353535353535353535353 535353535353535353535353535353535353525252525252525252525252515151505050505050 5050504F4F4F4E4E4E4D4D4D4C4C4C4C4C4C4D4D4D4C4C4C4B4B4B4A4A4A494949484848474747 4646464646464646464444444343434141414040403F3F3F3F3F3F3E3E3E3D3D3D3C3C3C3A3A3A 3838383737373535353535353434343333333232323030302E2E2E2D2D2D2C2C2C2B2B2B292929 2828282727272424242222222121211F1F1F1E1E1E1C1C1C1C1C1C1A1A1A181818151515141414 1313131111110E0E0E0E0E0E0C0C0C090909090909060606050505040404010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000030101050101050101050101050101050101050101020000828282FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000 000000000000000000000000000000000000030303050505050505050505050505050505050505 0404040404040404040404040909090909090C0C0C1111111313131414141717171919191C1C1C 1E1E1E1E1E1E2020202323232525252727272929292B2B2B2D2D2D2F2F2F303030333333343434 3636363737373A3A3A3A3A3A3B3B3B3C3C3C3E3E3E404040424242424242434343434343444444 454545464646464646484848484848484848484848484848484848484848484848484848484848 4747474545454545454444444444444242424141414040404040403E3E3E3C3C3C3A3A3A393939 3636363333333232322F2F2F2E2E2E2C2C2C2828282525252323230D0D0D000000000000000000 0000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEAEAEA3E3E3E000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000050505080808 0B0B0B0F0F0F1212121515151818181A1A1A1C1C1C2020202222222525252727272929292B2B2B 2D2D2D2F2F2F3232323434343434343636363838383939393A3A3A3C3C3C3E3E3E3F3F3F414141 4242424343434444444545454646464848484848484949494949494A4A4A4B4B4B4C4C4C4D4D4D 4E4E4E4E4E4E505050505050505050515151515151525252525252525252535353535353535353 545454545454545454545454545454535353535353535353535353535353535353525252525252 5252525151515151515050504F4F4F4F4F4F4E4E4E4E4E4E4F4F4F4E4E4E4D4D4D4C4C4C4B4B4B 4A4A4A494949494949484848484848474747464646444444434343424242424242414141404040 3F3F3F3D3D3D3C3C3C3A3A3A393939383838383838373737363636343434323232313131303030 2F2F2F2D2D2D2D2D2D2B2B2B2929292727272626262424242424242121212121211F1F1F1D1D1D 1B1B1B1A1A1A1818181616161414141313131111111010100E0E0E0C0C0C0C0C0C090909060606 060606010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000030101050101050101050101050101050101050101020000 828282FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616 000000000000000000000000000000000000000000000000020202040404040404040404040404 0404040404040404040404040909090909090C0C0C0F0F0F1313131414141717171717171C1C1C 1D1D1D1E1E1E2020202222222424242626262828282A2A2A2C2C2C2F2F2F303030313131333333 3535353737373838383A3A3A3C3C3C3D3D3D3D3D3D3F3F3F414141424242444444444444454545 4545454646464646464747474848484A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949484848 4747474747474646464646464545454545454444444343434141414141414040403F3F3F3D3D3D 3B3B3B3939393636363434343232323030302E2E2E2C2C2C2828282525252323230D0D0D000000 0000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB777777000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000505050808080B0B0B0D0D0D1010101313131515151818181B1B1B1E1E1E212121232323 2626262828282828282B2B2B2E2E2E3030303131313333333535353737373838383939393C3C3C 3E3E3E3F3F3F4040404141414242424444444545454646464747474848484848484949494A4A4A 4B4B4B4C4C4C4D4D4D4E4E4E4F4F4F4F4F4F4F4F4F505050505050515151515151525252525252 525252535353535353545454545454545454545454545454545454545454535353535353545454 5454545353535353535252525252525151515151515050505050505050504F4F4F4F4F4F4E4E4E 4D4D4D4D4D4D4C4C4C4B4B4B4B4B4B4A4A4A494949494949484848464646454545444444444444 4343434242424141414040403E3E3E3D3D3D3C3C3C3C3C3C3A3A3A3A3A3A393939373737363636 3535353434343333333131313030302F2F2F2D2D2D2C2C2C2A2A2A292929282828262626242424 2424242222222020201E1E1E1D1D1D1C1C1C191919181818161616151515131313111111101010 0E0E0E0C0C0C090909090909060606060606050505010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000030101050101050101050101050101050101 050101020000838383FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF161616000000000000000000000000000000000000000000000000020202040404040404 0404040404040404040404040909090C0C0C0F0F0F1111111313131414141616161818181B1B1B 1C1C1C1E1E1E2020202323232424242626262828282A2A2A2D2D2D2D2D2D2F2F2F303030323232 3434343636363838383939393C3C3C3C3C3C3E3E3E3F3F3F414141424242434343444444464646 4646464747474848484949494A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4949494949494848484747474545454545454444444444444343434141413F3F3F 3E3E3E3D3D3D3B3B3B3939393737373535353333333030302E2E2E2C2C2C282828252525232323 0D0D0D0000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4A4A4090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000505050505050808080D0D0D0F0F0F1010101313131717171A1A1A 1B1B1B1E1E1E2121212323232525252727272A2A2A2C2C2C2D2D2D2F2F2F313131323232353535 3636363939393B3B3B3C3C3C3D3D3D3E3E3E404040414141434343444444454545464646464646 4848484949494A4A4A4B4B4B4C4C4C4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050 515151525252525252525252525252535353545454545454545454535353535353535353535353 545454545454545454545454535353535353525252525252525252515151515151515151505050 5050504F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4B4B4B4B4B4B4A4A4A494949484848474747 4646464646464545454444444343434242424141414040403F3F3F3E3E3E3D3D3D3C3C3C3C3C3C 3A3A3A3939393838383737373636363535353434343232323131313030302E2E2E2D2D2D2C2C2C 2929292929292727272626262424242323232222222121211E1E1E1D1D1D1C1C1C1B1B1B191919 1616161515151414141111111111111010100E0E0E0C0C0C090909090909060606010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000030101050101050101050101 050101050101050101020000848484FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF161616000000000000000000000000000000000000000000000000020202 0404040404040404040909090909090909090C0C0C0F0F0F111111141414161616181818191919 1B1B1B1D1D1D1E1E1E2121212424242626262828282929292B2B2B2D2D2D303030313131323232 3333333535353737373939393A3A3A3C3C3C3E3E3E3F3F3F404040414141434343444444454545 4646464747474848484848484949494A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A494949484848474747464646454545444444444444444444 4141413F3F3F3E3E3E3D3D3D3B3B3B3939393737373535353333333030302E2E2E2C2C2C282828 2525252323230D0D0D0000000000000000000000000000000000000000000000000D0D0DBFBFBF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8F8F8AFAFAF5454543232321F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F2323233737376D6D6D CBCBCBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CECECE1F1F1F000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000505050808080B0B0B0D0D0D0F0F0F 1212121414141717171A1A1A1C1C1C1F1F1F2020202323232626262828282828282A2A2A2D2D2D 2F2F2F3030303131313434343636363838383A3A3A3B3B3B3C3C3C3E3E3E404040414141424242 4343434444444545454646464848484949494A4A4A4B4B4B4B4B4B4B4B4B4C4C4C4D4D4D4E4E4E 4F4F4F4F4F4F505050505050515151515151525252525252535353535353545454525252525252 525252535353535353545454545454545454535353535353535353525252525252525252525252 5252525151515151515050505050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4B4B4B4B4B4B 4A4A4A4949494949494848484747474747474646464545454444444343434242424141413F3F3F 3F3F3F3E3E3E3E3E3E3C3C3C3B3B3B3A3A3A3A3A3A383838373737363636353535333333323232 3131313030302D2D2D2D2D2D2C2C2C2A2A2A292929272727272727262626242424222222222222 2020201E1E1E1C1C1C1C1C1C1A1A1A1818181818181515151414141111111010101010100E0E0E 090909090909090909060606050505040404010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000030101050101 050101050101050101050101050101020000848484FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000000000000000000000000000 0000000202020404040909090C0C0C0C0C0C0C0C0C0F0F0F1111111414141616161818181B1B1B 1C1C1C1D1D1D1E1E1E2121212323232525252727272A2A2A2B2B2B2D2D2D2F2F2F313131333333 3434343535353737373939393A3A3A3C3C3C3E3E3E3F3F3F414141424242434343444444464646 4747474848484848484949494949494A4A4A4A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4A4A4A4A4A4A494949484848474747454545454545 4545454444444242424040403F3F3F3D3D3D3B3B3B3939393737373535353333333030302E2E2E 2B2B2B2828282525252323230D0D0D000000000000000000000000000000000000000000000000 0D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF9E9E9E1B1B1B0D0D0D000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000141414313131D2D2D2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFEBEBEB414141000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 0808080B0B0B0F0F0F1010101313131515151919191B1B1B1C1C1C1F1F1F222222252525252525 2727272A2A2A2B2B2B2C2C2C2E2E2E3131313333333535353535353737373838383A3A3A3C3C3C 3F3F3F3F3F3F4040404141414242424343434545454646464848484848484A4A4A4A4A4A4B4B4B 4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F505050505050515151525252525252535353535353 525252525252525252535353535353545454545454545454535353535353535353525252525252 5252525252525252525252525252525252525151515151515050505050505050504E4E4E4E4E4E 4D4D4D4D4D4D4C4C4C4B4B4B4B4B4B4A4A4A494949494949484848474747464646454545444444 4444444242424242424141414040403F3F3F3E3E3E3D3D3D3D3D3D3B3B3B3A3A3A393939383838 3737373535353535353333333030303030302F2F2F2E2E2E2D2D2D2B2B2B2B2B2B292929282828 2727272626262424242222222121212020201E1E1E1C1C1C1C1C1C1B1B1B191919161616151515 1414141313131010101010100E0E0E0C0C0C090909090909090909060606010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 030101050101050101050101050101050101050101020000858585FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000000000000000 0000000000000000000202020909090C0C0C0F0F0F111111131313131313161616181818191919 1C1C1C1E1E1E1F1F1F2121212323232424242727272929292B2B2B2E2E2E2F2F2F303030323232 3434343636363838383838383A3A3A3B3B3B3D3D3D3F3F3F404040414141444444444444454545 4646464848484949494949494949494A4A4A4A4A4A4A4A4A4B4B4B4C4C4C4D4D4D4D4D4D4D4D4D 4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4A4A4A4A4A4A494949474747 4646464646464545454444444242424040403F3F3F3D3D3D3B3B3B393939373737343434323232 3030302E2E2E2B2B2B2828282424242323230D0D0D000000000000000000000000000000000000 0000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFD5B5B5B101010000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000141414A7A7A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB777777000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000505050505050B0B0B0D0D0D0F0F0F1010101414141717171919191B1B1B1E1E1E 2020202121212323232626262828282828282A2A2A2D2D2D2F2F2F313131323232343434363636 3737373838383A3A3A3C3C3C3E3E3E3E3E3E3F3F3F414141434343444444454545464646484848 4949494949494A4A4A4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F505050505050515151 525252525252525252525252525252535353535353535353535353535353535353535353535353 535353525252525252525252525252535353535353525252525252525252515151515151505050 5050505050504F4F4F4F4F4F4E4E4E4D4D4D4D4D4D4C4C4C4B4B4B4B4B4B4A4A4A494949484848 4848484747474646464444444444444343434242424141414040403F3F3F3F3F3F3E3E3E3D3D3D 3C3C3C3B3B3B3A3A3A3838383737373737373535353434343333333232323030302F2F2F2E2E2E 2D2D2D2C2C2C2B2B2B2929292828282626262424242424242222222121212121211F1F1F1D1D1D 1C1C1C1A1A1A1919191818181616161515151414141111111010100E0E0E0E0E0E0C0C0C090909 090909060606060606050505010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000030101050101050101050101050101050101050101020000868686FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000 0000000000000000000000000101010707070F0F0F111111131313141414161616171717191919 1C1C1C1C1C1C1E1E1E2121212323232424242626262828282A2A2A2C2C2C2E2E2E303030323232 3232323434343636363838383A3A3A3A3A3A3C3C3C3D3D3D3F3F3F404040414141434343454545 4545454545454646464747474949494949494A4A4A4C4C4C4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E 4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4A4A4A 4949494848484747474646464545454444444242424040403F3F3F3D3D3D3B3B3B393939373737 3434343232322F2F2F2E2E2E2A2A2A2727272424242222220D0D0D000000000000000000000000 0000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF6E6E6E0D0D0D000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000121212C1C1C1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F090909000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000505050808080B0B0B0D0D0D101010131313141414 1717171A1A1A1B1B1B1E1E1E2020202323232525252525252727272A2A2A2C2C2C2D2D2D2F2F2F 3131313333333434343535353737373939393C3C3C3C3C3C3D3D3D3E3E3E404040414141424242 4343434545454747474848484848484949494A4A4A4B4B4B4B4B4B4D4D4D4D4D4D4D4D4D4E4E4E 4F4F4F505050505050505050525252525252525252525252535353535353535353535353535353 535353535353535353525252525252525252525252535353535353535353525252525252525252 5151515151515151515151515050505050504F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C 4B4B4B4A4A4A494949494949484848474747464646454545444444434343424242414141414141 4040404040403F3F3F3E3E3E3C3C3C3B3B3B3A3A3A3A3A3A393939383838373737353535343434 3232323232323030302F2F2F2E2E2E2D2D2D2C2C2C2A2A2A292929272727272727262626242424 2424242222222020201E1E1E1C1C1C1C1C1C1B1B1B1A1A1A191919161616151515131313111111 1111110D0D0D0D0D0D0B0B0B0B0B0B080808080808050505050505000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000030101050101050101050101050101050101050101020000868686 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000 0000000000000000000000000000000000000202020D0D0D111111141414161616181818181818 1B1B1B1C1C1C1E1E1E1F1F1F2121212424242626262727272929292B2B2B2D2D2D2F2F2F313131 3333333434343434343636363838383A3A3A3C3C3C3C3C3C3E3E3E3E3E3E404040414141424242 4343434545454646464747474747474949494949494A4A4A4B4B4B4D4D4D4D4D4D4E4E4E4E4E4E 4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B 4B4B4B4A4A4A4949494747474747474646464545454343434141413F3F3F3E3E3E3D3D3D3B3B3B 3939393636363333333131312F2F2F2D2D2D2A2A2A2727272323232222220C0C0C000000000000 0000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8C8121212000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000001D1D1D F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D6D6D62A2A2A000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000505050808080B0B0B 0D0D0D0F0F0F1212121515151818181B1B1B1C1C1C1F1F1F212121222222232323262626282828 2A2A2A2C2C2C2E2E2E3030303131313232323434343636363939393939393A3A3A3C3C3C3D3D3D 3E3E3E3F3F3F4040404343434343434444444545454646464747474848484A4A4A4B4B4B4B4B4B 4C4C4C4D4D4D4D4D4D4E4E4E4F4F4F4F4F4F515151515151525252525252525252525252535353 535353535353535353535353535353535353535353535353535353535353535353535353535353 5252525252525252525252525252525252525151515050505050504F4F4F4F4F4F4F4F4F4F4F4F 4E4E4E4D4D4D4D4D4D4C4C4C4B4B4B4A4A4A4A4A4A494949494949484848474747464646454545 4444444444444343434343434242424141413F3F3F3F3F3F3E3E3E3D3D3D3C3C3C3B3B3B3A3A3A 3939393737373636363535353434343232323232323131313030302E2E2E2D2D2D2C2C2C2B2B2B 2929292929292727272626262424242222222222222121212020201E1E1E1C1C1C1B1B1B191919 1717171717171515151414141313131212121010100F0F0F0D0D0D0D0D0D0B0B0B080808080808 050505050505040404030303000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000030101050101050101050101050101050101050101 020000878787FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 161616000000000000000000000000000000000000000000020202121212161616171717191919 1C1C1C1C1C1C1D1D1D1F1F1F2121212323232424242727272929292A2A2A2B2B2B2F2F2F303030 3232323434343636363737373737373838383939393B3B3B3E3E3E3E3E3E3F3F3F404040424242 4343434444444545454747474848484848484949494A4A4A4A4A4A4B4B4B4C4C4C4E4E4E4E4E4E 4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4C4C4C 4C4C4C4B4B4B4A4A4A4949494848484747474646464545454444444242424040403E3E3E3D3D3D 3C3C3C3A3A3A3838383636363333333131312F2F2F2D2D2D2A2A2A2727272323232222220C0C0C 0000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF343434000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000909098E8E8EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF2F2F2575757000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000505050808080B0B0B0D0D0D1010101313131515151919191B1B1B1C1C1C1E1E1E202020 2323232525252626262828282B2B2B2D2D2D2D2D2D2F2F2F313131333333363636363636373737 3939393B3B3B3C3C3C3D3D3D3E3E3E404040414141424242434343444444454545474747474747 4848484848484949494A4A4A4B4B4B4C4C4C4D4D4D4F4F4F505050505050515151515151525252 525252525252525252525252525252535353535353535353535353535353535353545454545454 535353535353535353535353535353535353535353535353525252525252515151515151505050 5050505050505050504F4F4F4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B494949 4949494848484747474747474646464646464545454444444343434242424141414040403F3F3F 3F3F3F3E3E3E3C3C3C3B3B3B3A3A3A393939383838373737363636353535343434323232313131 3030303030302E2E2E2E2E2E2B2B2B2A2A2A282828272727262626252525232323232323212121 2020201E1E1E1C1C1C1B1B1B1B1B1B1A1A1A191919181818171717151515141414131313121212 0F0F0F0F0F0F0D0D0D0B0B0B0B0B0B080808080808050505000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000030101050101050101050101050101 050101050101020000878787FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF161616000000000000000000000000000000000000000000020202151515181818 1919191C1C1C1E1E1E1E1E1E1F1F1F2222222424242525252727272929292B2B2B2D2D2D2E2E2E 3030303232323333333535353737373838383838383939393B3B3B3D3D3D404040404040414141 4242424444444545454646464747474949494949494A4A4A4B4B4B4C4C4C4C4C4C4C4C4C4D4D4D 4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F5050505050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D 4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A494949484848474747464646454545444444424242404040 3E3E3E3D3D3D3B3B3B3939393838383636363333333131312F2F2F2D2D2D2A2A2A272727232323 2222220C0C0C0000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC181818000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000002C2C2CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF999999060606000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000505050505050808080D0D0D0F0F0F101010131313171717191919 1A1A1A1C1C1C1F1F1F2121212323232525252727272929292A2A2A2C2C2C2F2F2F313131323232 3333333434343636363838383939393B3B3B3B3B3B3E3E3E3F3F3F404040414141434343444444 4545454646464747474747474848484949494A4A4A4B4B4B4C4C4C4D4D4D4E4E4E4E4E4E4E4E4E 4F4F4F4F4F4F505050505050515151515151525252525252525252535353535353535353535353 535353535353535353545454535353535353535353535353535353535353535353535353525252 5252525252525252525151515151515050505050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D 4C4C4C4B4B4B4A4A4A494949494949484848484848474747464646464646454545444444444444 4343434141414141414040403F3F3F3E3E3E3D3D3D3C3C3C3C3C3C393939383838373737363636 3535353434343333333232323131313030302F2F2F2E2E2E2D2D2D2B2B2B2A2A2A2A2A2A282828 2727272626262525252323232121212121212020201E1E1E1E1E1E1C1C1C1B1B1B1A1A1A191919 1818181717171414141313131212121010100F0F0F0D0D0D0D0D0D0B0B0B080808080808080808 050505050505000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000030101050101050101 050101050101050101050101020000888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000000000000000000000000000020202 1616161B1B1B1C1C1C1E1E1E2020202121212323232424242626262828282929292A2A2A2D2D2D 2F2F2F3131313232323333333636363737373838383A3A3A3C3C3C3E3E3E3F3F3F404040424242 4242424444444545454747474848484949494A4A4A4A4A4A4A4A4A4B4B4B4C4C4C4D4D4D4E4E4E 4E4E4E4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F5050505050505050505050505050505050504F4F4F 4E4E4E4E4E4E4D4D4D4C4C4C4B4B4B4A4A4A4A4A4A494949474747464646454545444444434343 4141413F3F3F3D3D3D3B3B3B3A3A3A3838383636363434343232322F2F2F2D2D2D2A2A2A282828 2525252222222020200C0C0C0000000000000000000000000000000000000000000000000D0D0D BFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB4B4B40D0D0D000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000171717FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCB202020000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000505050808080B0B0B0D0D0D0F0F0F 1212121414141515151818181B1B1B1C1C1C1F1F1F2121212323232626262727272828282C2C2C 2D2D2D2F2F2F3030303131313333333535353737373838383939393B3B3B3C3C3C3D3D3D3F3F3F 4141414242424343434444444545454545454747474848484949494A4A4A4B4B4B4C4C4C4C4C4C 4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F505050505050515151515151515151 525252525252515151515151525252525252525252535353535353535353535353545454535353 5353535353535353535353535353535252525252525151515151515050505050505050504F4F4F 4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A484848484848474747474747464646 4545454545454444444242424242424141414040403F3F3F3E3E3E3E3E3E3D3D3D3B3B3B3B3B3B 3B3B3B3939393939393737373737373636363434343434343333333131313131312F2F2F2F2F2F 2D2D2D2C2C2C2B2B2B2A2A2A282828282828262626262626252525232323212121212121202020 1E1E1E1C1C1C1B1B1B1B1B1B1A1A1A1919191818181515151414141313131212121010100F0F0F 0F0F0F0D0D0D0B0B0B0B0B0B080808080808050505050505040404030303000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030101 050101050101050101050101050101050101020000888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000000000000000000000 0000000303031919191C1C1C1E1E1E2020202323232424242525252727272929292B2B2B2C2C2C 2D2D2D2F2F2F3131313333333434343535353838383838383939393B3B3B3D3D3D3F3F3F404040 4141414343434444444545454646464848484949494A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4C4C4C 4D4D4D4E4E4E4F4F4F4F4F4F4E4E4E4F4F4F4F4F4F505050505050505050505050505050505050 5050504F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4B4B4B4A4A4A4A4A4A494949474747464646454545 4444444343434141413F3F3F3D3D3D3B3B3B3A3A3A3838383636363333333232322F2F2F2C2C2C 2A2A2A2828282525252222221F1F1F0C0C0C000000000000000000000000000000000000000000 0000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF999999 020202000000000000000000000000000000000000000000010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000181818E9E9E9FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF EBEBEB474747000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000050505050505 0505050808080B0B0B0F0F0F1010101313131515151818181A1A1A1C1C1C1F1F1F212121232323 2525252727272A2A2A2B2B2B2C2C2C2D2D2D2F2F2F313131333333353535363636383838393939 3A3A3A3B3B3B3D3D3D3F3F3F404040414141424242434343444444454545474747484848494949 4A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4C4C4C4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F 505050515151515151515151515151515151515151515151525252525252525252535353535353 535353535353535353535353535353535353535353515151515151515151515151505050505050 5050504F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4A4A4A4A4A4A494949 494949484848474747474747474747454545444444434343434343424242414141414141404040 3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3B3B3B3B3B3B3A3A3A383838373737363636363636343434 3333333232323131313030302F2F2F2E2E2E2D2D2D2C2C2C2B2B2B2A2A2A292929282828272727 2626262525252323232121212121212020201E1E1E1D1D1D1C1C1C1B1B1B1B1B1B1A1A1A191919 1818181515151414141313131212121010100F0F0F0F0F0F0D0D0D0B0B0B0B0B0B080808080808 080808050505040404040404000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000030101050101050101050101050101050101050101020000888888FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000000000 0000000000000000000303031D1D1D1F1F1F2121212424242525252525252828282A2A2A2C2C2C 2E2E2E2F2F2F3030303232323434343636363838383838383A3A3A3B3B3B3C3C3C3D3D3D3F3F3F 4141414242424343434444444545454646464848484949494A4A4A4B4B4B4C4C4C4C4C4C4C4C4C 4C4C4C4E4E4E4E4E4E4F4F4F5050505050504F4F4F505050505050505050505050505050505050 5151515050505050504F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4B4B4B4A4A4A494949484848474747 4545454444444444444343434141413F3F3F3D3D3D3B3B3B393939373737343434323232313131 2E2E2E2C2C2C2A2A2A2727272424242222221E1E1E0B0B0B000000000000000000000000000000 0000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF8A8A8A000000000000000000000000000000000000000000000000020202020202020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000171717DEDEDEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFE909090060606000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000505050808080808080B0B0B0F0F0F1212121414141515151818181B1B1B 1D1D1D1F1F1F2121212323232626262727272828282A2A2A2C2C2C2E2E2E303030313131323232 3535353535353737373939393B3B3B3C3C3C3D3D3D3E3E3E3F3F3F404040414141424242444444 4545454747474747474848484848484949494A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E 4E4E4E4F4F4F4F4F4F505050505050515151505050505050515151515151515151525252525252 525252525252525252525252535353535353535353535353535353515151515151515151515151 5151515050505050505050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4C4C4C 4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A494949494949474747474747464646454545444444444444 4343434343434141414141414040404040403F3F3F3E3E3E3E3E3E3D3D3D3B3B3B3A3A3A393939 3838383737373636363636363535353333333232323131313131312F2F2F2F2F2F2E2E2E2D2D2D 2C2C2C2C2C2C2A2A2A2929292828282626262525252424242121212121212121212020201F1F1F 1E1E1E1D1D1D1C1C1C1A1A1A191919181818171717151515141414131313121212101010101010 0F0F0F0D0D0D0D0D0D0B0B0B0B0B0B080808080808050505050505050505040404000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000030101050101050101050101050101050101050101020000898989FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000 0000000000000000000000000000000404041F1F1F2222222424242525252727272828282A2A2A 2C2C2C2E2E2E3030303131313333333434343636363838383A3A3A3B3B3B3D3D3D3D3D3D3E3E3E 4040404141414343434444444545454646464747474848484949494A4A4A4C4C4C4C4C4C4D4D4D 4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F505050505050505050505050505050505050505050505050 5151515151515050505050505050504F4F4F4E4E4E4D4D4D4C4C4C4C4C4C4B4B4B4A4A4A494949 4848484646464545454444444343434242424040403E3E3E3B3B3B393939383838353535333333 3232323030302D2D2D2A2A2A2828282525252323232020201D1D1D0A0A0A000000000000000000 0000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000000000000000000000020202 020202010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000171717 DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCACACA232323000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000505050505050808080D0D0D0F0F0F121212 1414141818181A1A1A1B1B1B1C1C1C1F1F1F2121212222222323232626262828282A2A2A2C2C2C 2E2E2E3030303131313333333535353636363737373939393A3A3A3C3C3C3D3D3D3E3E3E3F3F3F 4040404242424343434444444444444747474747474848484848484A4A4A4A4A4A4B4B4B4C4C4C 4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F505050505050505050505050515151 515151515151515151535353535353525252535353525252525252525252525252525252525252 5252525151515151515151515151515151515151515151515050505050504F4F4F4F4F4F4F4F4F 4E4E4E4E4E4E4E4E4E4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A494949484848484848 4747474646464545454545454343434343434343434242424141414040404040403F3F3F3E3E3E 3D3D3D3D3D3D3B3B3B3A3A3A393939383838373737373737363636353535343434333333313131 3131313131313030302F2F2F2E2E2E2D2D2D2C2C2C2B2B2B2A2A2A292929272727262626262626 2525252323232323232222222121211F1F1F1E1E1E1D1D1D1B1B1B1B1B1B1A1A1A191919181818 1717171717171515151414141212121010101010100F0F0F0D0D0D0D0D0D0D0D0D0B0B0B080808 080808080808050505050505050505040404030303000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000030101050101050101050101050101050101050101020000 8A8A8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE161616 000000000000000000000000000000000000000000040404202020232323232323262626282828 2929292A2A2A2E2E2E2F2F2F3131313232323333333636363838383939393B3B3B3C3C3C3F3F3F 4040404040404242424444444545454545454646464848484949494949494A4A4A4C4C4C4C4C4C 4D4D4D4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F505050505050505050505050505050505050505050 5151515050505050505050505050504F4F4F4F4F4F4E4E4E4D4D4D4C4C4C4B4B4B4B4B4B4A4A4A 4949494848484747474545454444444242424242423F3F3F3E3E3E3B3B3B393939373737363636 3434343333333131312E2E2E2C2C2C2929292727272323232121211E1E1E1B1B1B090909000000 0000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000000000000000 000000010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F15A5A5A000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000050505080808 0B0B0B0D0D0D1010101414141717171818181919191B1B1B1B1B1B1E1E1E202020232323252525 2626262828282B2B2B2D2D2D2F2F2F3131313232323434343434343535353737373939393B3B3B 3B3B3B3D3D3D3E3E3E3F3F3F404040414141424242444444454545454545474747484848484848 4949494A4A4A4C4C4C4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F 505050505050505050505050515151535353535353535353535353525252525252525252525252 535353535353525252525252515151515151515151515151515151515151515151515151505050 5050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B 4A4A4A4A4A4A484848484848474747474747464646464646454545444444434343424242424242 4141414141414040403F3F3F3E3E3E3D3D3D3C3C3C3B3B3B3B3B3B3A3A3A393939393939373737 3636363535353434343333333232323232323131313131313030302F2F2F2E2E2E2D2D2D2C2C2C 2B2B2B2A2A2A2828282828282727272626262525252323232323232121212121212020201E1E1E 1E1E1E1C1C1C1B1B1B1B1B1B1A1A1A191919181818171717151515141414131313121212101010 1010100F0F0F0D0D0D0D0D0D0D0D0D0B0B0B0B0B0B080808080808080808050505050505050505 040404040404030303000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000050505050505050505050505 050505050505050505050505050505050505050505050303050101050101050101050101050101 0501010200008B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFE161616000000000000000000000000000000000000000000040404222222242424252525 2828282929292A2A2A2C2C2C2F2F2F3131313333333333333535353737373939393B3B3B3C3C3C 3D3D3D4141414242424242424444444545454646464747474747474949494A4A4A4A4A4A4B4B4B 4C4C4C4D4D4D4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F505050505050505050505050515151 5151515050505050505050505050505050504F4F4F4E4E4E4D4D4D4D4D4D4C4C4C4B4B4B4A4A4A 4A4A4A4949494747474646464545454343434141414040403F3F3F3E3E3E3C3C3C393939373737 3636363434343333333131312F2F2F2C2C2C2929292727272525252222221F1F1F1D1D1D1A1A1A 0909090000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000 000000000000000000010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFA1A1A10B0B0B000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000505050505050808080B0B0B0F0F0F1010101313131414141717171919191B1B1B1C1C1C 2020202121212323232525252828282A2A2A2C2C2C2D2D2D2F2F2F313131313131323232343434 3636363838383939393939393B3B3B3D3D3D3E3E3E3E3E3E404040424242424242434343444444 4545454747474747474848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4C4C4C4F4F4F 4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F505050505050525252525252525252525252525252525252 525252525252535353535353535353525252525252525252515151515151525252525252525252 5151515151515151515151515050505050505050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D 4D4D4D4C4C4C4C4C4C4B4B4B4A4A4A494949494949484848494949484848484848474747464646 4545454545454444444444444343434242424141414040403F3F3F3E3E3E3E3E3E3D3D3D3D3D3D 3C3C3C3B3B3B3A3A3A393939383838373737363636363636353535343434333333323232323232 3131312F2F2F2F2F2F2E2E2E2D2D2D2C2C2C2B2B2B2A2A2A292929282828272727262626252525 2323232323232222222121212020202020201E1E1E1D1D1D1C1C1C1B1B1B1B1B1B1A1A1A181818 1717171717171515151414141313131212121010101010100F0F0F0F0F0F0D0D0D0D0D0D0D0D0D 0B0B0B0B0B0B080808080808080808080808050505050505050505050505040404030303030303 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000040404040404050505050505050505050505050505050505050505080808080808080808 080808080808080808080808080808080808080808080808050505050303050101050101050101 0501010501010501010200008B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFE161616000000000000000000000000000000000000000000040404232323 2525252727272A2A2A2B2B2B2C2C2C2E2E2E3131313333333434343535353737373939393B3B3B 3D3D3D3E3E3E3F3F3F4242424343434444444545454646464747474848484848484A4A4A4A4A4A 4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F505050505050505050 5050505050505050505050505050504F4F4F4F4F4F4F4F4F4E4E4E4C4C4C4C4C4C4C4C4C4A4A4A 4A4A4A4949494949494747474444444444444343434141414040403F3F3F3E3E3E3C3C3C3A3A3A 3838383636363434343232323131312F2F2F2D2D2D2A2A2A2828282525252323232020201D1D1D 1B1B1B1717170909090000000000000000000000000000000000000000000000000D0D0DBFBFBF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000 000000000000000000000000000000010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFBC2C2C27575753E3E3E2424241C1C1C242424242424242424242424242424242424242424 242424242424242424242424242424242424242424242424242424242424242424242424242424 242424242424242424242424242424242424242424242424242424242424242424242424242424 1F1F1F2121212E2E2E5B5B5BA7A7A7EBEBEBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD5D5D52D2D2D000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000505050808080B0B0B0D0D0D0F0F0F121212141414 1717171919191B1B1B1D1D1D1F1F1F2121212323232626262828282A2A2A2C2C2C2D2D2D2D2D2D 2F2F2F3131313333333535353636363737373838383A3A3A3B3B3B3C3C3C3D3D3D3F3F3F404040 4040404242424343434444444545454646464747474747474848484848484949494A4A4A4A4A4A 4B4B4B4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F515151515151515151515151 525252525252525252525252535353535353535353525252525252525252525252525252525252 5252525252525252525252525252525151515151515151515151515050505050504F4F4F4F4F4F 4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A 494949484848484848474747474747474747464646454545444444434343424242424242414141 4040404040403F3F3F3E3E3E3D3D3D3C3C3C3C3C3C3B3B3B3A3A3A393939393939383838373737 3636363636363535353434343333333232323131313030302F2F2F2E2E2E2D2D2D2C2C2C2C2C2C 2B2B2B2A2A2A282828282828272727262626252525252525232323232323212121202020202020 1F1F1F1D1D1D1C1C1C1B1B1B1B1B1B1A1A1A191919181818171717151515151515141414131313 1313131212121010101010100F0F0F0F0F0F0D0D0D0D0D0D0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 080808080808080808050505050505050505050505000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000040404050505050505050505 0505050808080808080808080808080808080808080808080B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B050303050101 0501010501010501010501010501010200008B8B8BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEFEFEFE161616000000000000000000000000000000000000000000 0404042525252727272828282B2B2B2D2D2D2E2E2E303030323232343434363636373737383838 3A3A3A3C3C3C3E3E3E404040404040434343444444444444454545464646474747484848484848 4A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F 5050505050505050505050505050505050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4C4C4C4B4B4B 4B4B4B4A4A4A4848484747474747474646464444444343434242424040403F3F3F3E3E3E3D3D3D 3B3B3B3939393737373535353333333333333131312E2E2E2C2C2C292929272727232323222222 1F1F1F1D1D1D191919171717090909000000000000000000000000000000000000000000000000 0D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000 000000000000000000000000000000000000000000010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E4E4E4656565191919121212000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000A0A0A171717383838BABABAFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F76C6C6C010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000505050505050808080B0B0B 0D0D0D1010101212121414141818181A1A1A1B1B1B1C1C1C202020212121232323262626282828 2929292A2A2A2C2C2C2E2E2E3030303131313232323434343636363737373939393A3A3A3B3B3B 3D3D3D3D3D3D3E3E3E404040414141424242434343444444454545454545464646474747484848 4949494949494A4A4A4B4B4B4C4C4C4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4E4E4E505050505050 505050515151515151515151515151525252525252525252525252525252535353535353535353 535353535353535353535353525252525252535353535353525252515151515151515151515151 5151515050505050505050505050505050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C 4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A494949494949484848484848474747464646454545454545 4444444343434343434242424242424141414040403F3F3F3F3F3F3E3E3E3D3D3D3C3C3C3C3C3C 3B3B3B3A3A3A393939393939383838373737373737363636343434343434323232313131313131 3030303030302F2F2F2E2E2E2D2D2D2C2C2C2B2B2B2A2A2A2A2A2A282828282828272727262626 2525252424242323232222222121212121212020201F1F1F1D1D1D1C1C1C1B1B1B1B1B1B1B1B1B 1A1A1A191919181818171717171717151515141414141414131313121212121212101010101010 1010100F0F0F0F0F0F0D0D0D0D0D0D0B0B0B0B0B0B0B0B0B080808080808080808080808080808 080808080808080808050505050505050505050505040404040404000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000050505050505050505050505050505050505050505080808080808080808080808 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F1010101010101010100F0F0F0F0F0F0F0F0F0F0F0F0D0D0D0D0D0D0D0D0D0D0D0D 0604040501010501010501010501010501010501010200008B8B8BFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE161616000000000000000000000000000000 0000000000000404042727272828282A2A2A2D2D2D2F2F2F303030313131343434363636393939 3939393B3B3B3C3C3C3E3E3E404040414141424242444444444444454545464646474747494949 4949494A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F 4F4F4F4F4F4F4F4F4F5050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4B4B4B 4A4A4A4949494949494848484747474646464545454545454343434141413F3F3F3F3F3F3E3E3E 3C3C3C3939393838383737373535353333333131313030302E2E2E2A2A2A292929272727252525 2222221F1F1F1D1D1D1A1A1A171717141414080808000000000000000000000000000000000000 0000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8A8A8A000000000000000000000000000000000000000000000000010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000171717DEDEDEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F3F3F3656565161616020202000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000001212122C2C2C D0D0D0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBBBB1B1B1B 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0505050505050808080B0B0B0D0D0D1010101313131414141515151818181B1B1B1D1D1D1F1F1F 2121212323232525252626262828282A2A2A2D2D2D2E2E2E2F2F2F313131323232343434363636 3737373838383939393A3A3A3B3B3B3D3D3D3F3F3F404040414141424242434343434343444444 4545454646464747474848484848484949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D 4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F505050505050515151515151515151515151515151525252 525252525252525252525252525252525252525252535353535353535353535353525252525252 5151515151515151515151515151515151515151515151515151515050505050504F4F4F4F4F4F 4F4F4F4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A494949494949484848 4747474747474646464646464545454444444444444343434343434242424242424141413F3F3F 3F3F3F3E3E3E3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A393939383838373737363636 3535353434343434343434343333333131313131312F2F2F2F2F2F2E2E2E2D2D2D2D2D2D2C2C2C 2B2B2B2A2A2A282828282828282828272727262626262626252525232323222222212121212121 2020201F1F1F1E1E1E1D1D1D1C1C1C1B1B1B1B1B1B1B1B1B1A1A1A191919191919181818171717 1515151515151414141414141313131313131212121010101010101010100F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0D0D0D0D0D0D0D0D0D0D0D0D0B0B0B0B0B0B0B0B0B0B0B0B080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 080808080808080808080808080808080808080808080808080808080808080808080808080808 0808080808080808080808080808080B0B0B0B0B0B0B0B0B0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010101010101010121212121212 1313131313131313131313131313131313131313131212121212121010101010101010100F0F0F 0F0F0F0D0D0D0705050501010501010501010501010501010501010200008A8A8AFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE161616000000000000000000 0000000000000000000000000505052727272929292B2B2B2E2E2E2F2F2F313131323232353535 3737373939393A3A3A3B3B3B3D3D3D3F3F3F404040424242424242444444454545454545474747 4848484949494A4A4A4A4A4A4C4C4C4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F 4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4D4D4D4C4C4C4C4C4C 4B4B4B4B4B4B4949494848484747474646464545454444444444444343434242424040403E3E3E 3D3D3D3C3C3C3A3A3A3737373636363535353232323131312F2F2F2E2E2E2B2B2B292929272727 2525252323231F1F1F1D1D1D1B1B1B171717151515121212070707000000000000000000000000 0000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF8A8A8A000000000000000000000000000000000000000000000000010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000171717DEDEDE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFC9C9C91D1D1D060606000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000001313137A7A7AFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEFEFEF5B5B5B000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000505050505050808080B0B0B0D0D0D0F0F0F101010131313151515 1818181B1B1B1C1C1C1F1F1F2121212121212323232626262828282A2A2A2B2B2B2C2C2C2E2E2E 3131313232323434343535353636363737373838383939393B3B3B3D3D3D3E3E3E3F3F3F3F3F3F 4040404141414242424343434444444545454545454747474747474848484848484949494A4A4A 4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F505050505050515151 515151515151515151525252525252515151515151515151525252525252535353535353535353 525252525252525252525252525252525252525252525252515151515151515151515151515151 5151515050505050504E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4B4B4B4B4B4B 4B4B4B4A4A4A4A4A4A494949494949484848474747474747464646464646454545454545444444 4444444242424242424141414040404040403E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3B3B3B 3A3A3A393939383838383838383838373737373737363636343434333333323232323232313131 3131313030302F2F2F2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2A2A2A292929282828272727 2626262525252323232323232323232121212121212020202020202020201F1F1F1F1F1F1E1E1E 1D1D1D1C1C1C1B1B1B1B1B1B1A1A1A191919191919191919181818171717171717171717151515 151515151515141414141414131313131313131313121212121212121212101010101010101010 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0F0F0F0F0F0F0F0F0F101010101010101010121212121212121212131313 131313131313131313131313141414141414141414141414141414141414151515151515151515 151515171717171717171717171717171717171717171717171717151515141414141414131313 121212121212101010101010080606050101050101050101050101050101050101020000898989 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE161616000000 0000000000000000000000000000000000000505052727272A2A2A2C2C2C2F2F2F313131323232 3333333636363838383A3A3A3B3B3B3C3C3C3E3E3E404040414141434343444444454545454545 4646464747474949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E 4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C 4B4B4B4B4B4B4B4B4B4949494747474646464545454444444343434242424141414141413F3F3F 3E3E3E3C3C3C3A3A3A3939393737373535353333333232323131312F2F2F2D2D2D2B2B2B292929 2626262525252323232020201D1D1D1B1B1B1919191515151212120F0F0F050505000000000000 0000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000000000000000000000 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA4A4A4141414000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000C0C0C444444F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAA111111000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000505050505050808080B0B0B0D0D0D 0F0F0F1212121313131515151818181B1B1B1C1C1C1E1E1E202020232323252525262626272727 2828282B2B2B2D2D2D2F2F2F3131313131313232323333333535353636363838383A3A3A3B3B3B 3C3C3C3C3C3C3D3D3D3E3E3E3F3F3F404040424242424242434343454545454545464646474747 4848484949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F 4F4F4F505050505050515151515151515151515151515151515151515151525252525252535353 535353535353515151515151515151525252525252525252525252525252525252525252515151 5151515151515151515151515151515050505050504F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E 4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A494949494949484848484848484848 474747474747464646454545444444434343434343424242414141404040404040414141404040 3F3F3F3E3E3E3D3D3D3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A393939383838373737363636363636 3535353535353434343333333232323131313030302F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2D2D2D 2C2C2C2A2A2A2A2A2A282828282828272727262626262626252525232323232323232323232323 2323232222222121212020202020202020201E1E1E1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B 1B1B1B1B1B1B1A1A1A1A1A1A191919191919181818171717171717171717171717171717171717 151515151515141414141414131313131313131313131313131313131313131313131313131313 131313131313131313131313131313131313131313131313131313131313131313131313131313 131313131313131313131313131313131313131313131313131313131313131313131313131313 131313131313131313131313131313131313141414141414141414141414151515151515151515 171717171717171717171717171717171717171717171717181818181818191919191919191919 1919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A191919191919191919191919191919181818171717 171717151515141414131313131313121212080606050101050101050101050101050101050101 020000888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE 1616160000000000000000000000000000000000000000000505052828282B2B2B2E2E2E303030 3232323333333535353737373939393B3B3B3C3C3C3D3D3D3F3F3F404040424242444444444444 4646464646464747474848484949494A4A4A4B4B4B4C4C4C4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E 4E4E4E4E4E4E4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C 4C4C4C4B4B4B4A4A4A494949494949484848464646454545444444434343414141414141404040 3F3F3F3E3E3E3C3C3C3A3A3A3838383737373535353333333333333131312F2F2F2C2C2C2A2A2A 2929292727272424242323232121211D1D1D1B1B1B1919191616161212121111110D0D0D040404 0000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000000000 000000000000010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF9F9F9F121212000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000808083A3A3AFAFAFAFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1E1404040000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 0505050505050808080D0D0D0D0D0D1212121313131515151818181A1A1A1B1B1B1E1E1E202020 2121212323232525252727272828282A2A2A2C2C2C2E2E2E2F2F2F303030313131333333353535 3737373838383939393A3A3A3B3B3B3B3B3B3D3D3D3E3E3E3F3F3F404040414141434343434343 4444444545454646464747474747474848484A4A4A4A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4D4D4D 4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050515151515151515151515151515151515151515151 515151515151525252525252525252525252525252525252525252525252525252525252525252 525252515151515151515151515151515151505050515151515151515151515151515151505050 5050505050504F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4B4B4B4B4B4B 4A4A4A4A4A4A494949484848484848474747474747474747464646454545454545444444434343 4242424242424242424141414040403F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3B3B3B3B3B3B 3A3A3A3A3A3A393939373737373737363636363636353535343434343434333333323232313131 3131313030302F2F2F2E2E2E2D2D2D2D2D2D2C2C2C2B2B2B2B2B2B2A2A2A292929282828282828 282828272727262626262626252525252525232323232323232323212121212121212121212121 2121212020202020202020201F1F1F1F1F1F1E1E1E1E1E1E1D1D1D1D1D1D1C1C1C1C1C1C1B1B1B 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919191919191919191919191919 191919191919181818181818181818181818181818181818181818181818181818181818181818 181818181818181818181818181818171717171717171717171717171717171717171717181818 1818181818181818181818181818181818181818181919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1A1A1A191919181818171717151515141414080606050101050101050101050101 050101050101020000878787FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFEFEFE1616160000000000000000000000000000000000000000000505052929292C2C2C 2F2F2F3131313333333333333636363838383A3A3A3C3C3C3D3D3D3E3E3E3F3F3F414141434343 4444444545454646464646464747474949494A4A4A4B4B4B4C4C4C4C4C4C4C4C4C4D4D4D4C4C4C 4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B 4B4B4B4B4B4B4A4A4A494949484848484848474747464646454545444444434343424242404040 3F3F3F3E3E3E3D3D3D3C3C3C3A3A3A3838383737373535353333333333333131312F2F2F2D2D2D 2A2A2A2828282727272424242222222020201E1E1E1C1C1C1919191616161414141111110D0D0D 0A0A0A0303030000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000 000000000000000000000000010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFBCBCBC131313000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000090909525252 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD8A8A8A 070707000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000505050808080808080D0D0D0F0F0F101010131313151515191919 1B1B1B1B1B1B1D1D1D2020202121212323232525252626262929292B2B2B2C2C2C2C2C2C2E2E2E 3030303232323434343535353636363737373838383939393A3A3A3C3C3C3D3D3D3E3E3E3E3E3E 4040404141414242424343434444444545454545454646464848484848484848484949494A4A4A 4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4F4F4F4F4F4F505050505050505050505050 505050515151515151515151515151515151535353535353535353535353525252525252525252 525252525252525252515151515151515151505050505050505050515151515151515151515151 5151515151515151515151515050504F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D 4D4D4D4C4C4C4C4C4C4B4B4B4A4A4A4A4A4A494949494949494949484848484848474747474747 4747474646464545454444444444444343434343434242424242424141414040404040403F3F3F 3E3E3E3E3E3E3E3E3E3D3D3D3C3C3C3A3A3A393939393939393939383838373737373737363636 3535353535353434343333333232323131313131313131312F2F2F2F2F2F2F2F2F2E2E2E2D2D2D 2D2D2D2D2D2D2C2C2C2A2A2A2A2A2A292929282828282828282828272727272727262626262626 252525252525242424232323232323232323232323232323232323232323222222212121212121 2121212020202020202020202020202020201F1F1F1F1F1F1E1E1E1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1E1E1E1E1E1E1E1E1E 1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F202020 2020202020202020202020202020202020202020202020201F1F1F1F1F1F1E1E1E1E1E1E1D1D1D 1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1B1B1B1A1A1A191919171717151515090707050101050101 050101050101050101050101020000858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFCFCFC161616000000000000000000000000000000000000000000050505 2A2A2A2C2C2C2F2F2F3131313333333434343636363838383B3B3B3C3C3C3D3D3D3E3E3E404040 4141414343434444444545454545454646464747474848484848484949494A4A4A4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D4C4C4C4B4B4B4B4B4B4A4A4A 4A4A4A4A4A4A4A4A4A494949484848474747464646454545444444444444434343434343414141 4040403E3E3E3D3D3D3C3C3C3A3A3A3939393737373535353434343232323232323030302E2E2E 2C2C2C2A2A2A2727272525252323232222221F1F1F1D1D1D1C1C1C191919151515121212111111 0D0D0D0A0A0A0707070101010000000000000000000000000000000000000000000000000D0D0D BFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000 000000000000000000000000000000000000010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9191919000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000101010989898FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDBDBDB3D3D3D000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000505050505050808080808080B0B0B0F0F0F 1212121515151717171919191A1A1A1B1B1B1E1E1E202020212121232323252525272727282828 2929292B2B2B2D2D2D2F2F2F3131313232323333333434343535353636363737373939393A3A3A 3B3B3B3C3C3C3E3E3E3E3E3E3F3F3F404040414141424242434343434343454545454545464646 4747474848484848484949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F 4F4F4F4F4F4F4F4F4F505050505050505050515151515151525252525252525252525252525252 525252525252525252525252525252525252515151515151515151515151515151525252525252 5252525252525252525252525252525151515151515151515050505050505050504F4F4F4F4F4F 4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949 494949484848484848484848474747474747474747464646454545454545454545444444434343 4343434242424242424141414141414040403F3F3F3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B 3B3B3B3A3A3A393939383838383838373737363636353535353535343434333333333333323232 3131313131313131313030302F2F2F2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B 2A2A2A2A2A2A2A2A2A282828282828282828282828272727272727272727272727262626262626 262626262626252525252525242424242424232323232323232323232323222222212121212121 212121212121212121212121212121212121212121212121212121212121212121212121212121 212121212121212121212121212121212121212121212121202020202020202020202020202020 202020202020202020202020212121212121212121212121212121212121212121212121212121 212121212121212121212121212121212121232323232323232323232323232323232323232323 232323232323232323232323232323232323232323232323232323232323232323222222212121 2121212121212020202020201F1F1F1D1D1D1D1D1D1C1C1C1B1B1B1A1A1A181818171717090707 050101050101050101050101050101050101020000858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC161616000000000000000000000000000000000000 0000000505052A2A2A2D2D2D2F2F2F3131313333333434343636363838383B3B3B3C3C3C3D3D3D 3E3E3E3F3F3F4040404242424343434444444444444545454646464747474848484949494A4A4A 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4B4B4B4C4C4C4B4B4B4B4B4B4A4A4A 4A4A4A494949494949484848484848484848474747454545444444434343434343424242414141 4040403E3E3E3C3C3C3B3B3B3939393838383737373535353333333333333131313030302E2E2E 2C2C2C2A2A2A2828282626262323232222222020201D1D1D1B1B1B1A1A1A171717151515121212 0F0F0F0D0D0D0A0A0A070707020202010101000000000000000000000000000000000000000000 0000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A 000000000000000000000000000000000000000000000000010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000171717DEDEDEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C4C4C030303000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000171717E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD9999990A0A0A000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 0505050808080D0D0D1010101212121313131515151717171A1A1A1B1B1B1C1C1C1E1E1E212121 2323232424242525252727272828282B2B2B2D2D2D2E2E2E2F2F2F313131313131323232343434 3636363737373838383939393B3B3B3B3B3B3C3C3C3D3D3D3F3F3F404040414141424242434343 4343434444444545454646464747474747474848484949494949494A4A4A4A4A4A4B4B4B4C4C4C 4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F505050505050515151515151515151 515151525252525252525252525252525252525252525252515151515151515151515151515151 525252525252525252525252525252525252525252525252525252515151515151515151515151 5050505050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C 4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949484848484848474747474747 4747474646464545454545454545454444444343434343434242424040404040404040403F3F3F 3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B393939393939383838373737373737 3737373636363636363535353434343434343333333131313131313131313131313030302F2F2F 2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B 2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A282828282828282828282828282828282828282828272727 262626262626262626262626262626262626262626262626262626262626262626262626262626 262626262626262626262626262626262626262626262626262626262626252525252525252525 252525252525252525252525252525252525252525252525252525252525252525252525252525 262626262626262626262626262626262626262626262626272727272727272727272727272727 272727272727272727272727272727272727272727272727272727262626262626262626262626 2525252525252525252323232323232323232121212020201F1F1F1E1E1E1C1C1C1B1B1B191919 181818090707050101050101050101050101050101050101020000848484FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC161616000000000000000000000000 0000000000000000000505052A2A2A2D2D2D2F2F2F3131313333333333333535353737373A3A3A 3B3B3B3C3C3C3D3D3D3E3E3E404040424242434343444444444444444444454545464646484848 4949494949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B 4A4A4A494949494949484848484848484848474747474747464646444444434343424242414141 4040403F3F3F3E3E3E3C3C3C3A3A3A3838383737373535353535353333333232323030302F2F2F 2E2E2E2C2C2C2A2A2A2828282525252323232121211F1F1F1D1D1D1B1B1B191919161616141414 1111110F0F0F0D0D0D0A0A0A070707010101010101000000000000000000000000000000000000 0000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF8A8A8A000000000000000000000000000000000000000000000000010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000171717DEDEDEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCB141414000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000030303585858FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDCDCDC3E3E3E000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000505050808080B0B0B0D0D0D0D0D0D101010131313151515171717191919 1A1A1A1C1C1C1F1F1F2121212121212323232525252727272828282A2A2A2B2B2B2D2D2D2E2E2E 2F2F2F3131313232323434343535353636363838383838383A3A3A3B3B3B3D3D3D3E3E3E3F3F3F 404040404040414141424242434343444444454545464646474747484848484848484848494949 4A4A4A4B4B4B4C4C4C4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F505050 505050505050515151515151515151515151515151515151515151515151515151525252525252 525252525252535353535353535353535353535353535353535353525252525252525252525252 5252525151515151515151515151515050505050505050504F4F4F4F4F4F4F4F4F4F4F4F4F4F4F 4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A494949 494949484848484848474747474747474747464646454545454545454545444444434343434343 4242424242424141414040404040404040403F3F3F3E3E3E3E3E3E3D3D3D3C3C3C3B3B3B3B3B3B 3A3A3A3A3A3A393939393939383838383838373737373737363636353535353535343434343434 3333333232323232323232323232323131313131313131313030303030302F2F2F2F2F2F2F2F2F 2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C 2C2C2C2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 292929292929292929292929292929292929292929282828282828282828282828282828282828 2828282828282929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A292929292929282828 2828282828282828282727272626262525252525252424242323232121212121212020201E1E1E 1C1C1C1B1B1B1919190A0808050101050101050101050101050101050101020000838383FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC161616000000000000 0000000000000000000000000000000505052929292D2D2D303030323232323232343434363636 3838383A3A3A3C3C3C3C3C3C3E3E3E3F3F3F414141424242434343444444444444444444454545 464646474747484848484848494949494949494949494949494949494949494949494949494949 494949484848484848484848474747474747464646464646444444444444434343424242414141 4040404040403F3F3F3D3D3D3C3C3C3A3A3A3838383636363535353333333232323232322F2F2F 2D2D2D2C2C2C2A2A2A2828282626262525252323232121211E1E1E1D1D1D1B1B1B191919161616 1212120F0F0F0D0D0D090909060606010101010101010101010101000000000000000000000000 0000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000000000000000000000010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000171717 DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E3E3E000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000161616E6E6E6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFD 9999990B0B0B000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000505050505050505050808080B0B0B0D0D0D101010 1212121313131515151818181A1A1A1C1C1C1D1D1D1F1F1F212121232323252525262626272727 2828282A2A2A2B2B2B2D2D2D2F2F2F3131313232323333333434343535353636363838383A3A3A 3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F414141424242434343444444454545464646464646 4747474848484848484949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4C4C4C4D4D4D4D4D4D 4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F505050505050515151515151515151515151515151 515151515151515151515151525252525252525252525252525252525252525252525252535353 535353525252525252525252515151515151515151505050505050505050505050505050505050 5050505050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C 4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A494949494949484848484848474747474747464646464646 4545454545454444444444444343434343434242424242424242424141414040403F3F3F3E3E3E 3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838373737 373737373737363636363636353535353535353535353535343434343434333333333333323232 323232323232323232313131313131313131313131313131313131303030303030303030303030 2F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C 2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C 2B2B2B2B2B2B2B2B2B2B2B2B2A2A2A292929282828272727262626262626252525232323232323 2121212020201E1E1E1B1B1B1B1B1B0B0909050101050101050101050101050101050101020000 828282FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC161616 0000000000000000000000000000000000000000000505052929292D2D2D2F2F2F323232323232 3434343535353838383A3A3A3C3C3C3D3D3D3E3E3E3F3F3F414141424242434343444444444444 444444454545464646474747484848484848484848484848484848484848484848484848484848 484848484848474747474747464646464646464646454545444444444444434343424242414141 4040403F3F3F3E3E3E3E3E3E3C3C3C3A3A3A393939383838363636343434333333323232313131 2F2F2F2D2D2D2A2A2A2929292828282525252323232222222121211E1E1E1C1C1C1A1A1A171717 1515151212120E0E0E0C0C0C090909060606010101010101010101010101010101000000000000 0000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000000000000000 000000010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9171717 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000040404808080 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD8D8D83A3A3A000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 0808080B0B0B0D0D0D0D0D0D0F0F0F1212121414141818181919191A1A1A1B1B1B1E1E1E202020 2121212222222424242525252727272828282B2B2B2C2C2C2E2E2E2F2F2F313131313131333333 3434343636363838383939393A3A3A3A3A3A3B3B3B3C3C3C3D3D3D3F3F3F404040414141424242 4343434343434444444545454646464747474747474747474747474848484848484949494A4A4A 4B4B4B4C4C4C4C4C4C4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F 505050505050505050515151515151515151515151515151515151515151515151515151515151 525252535353535353525252525252525252515151515151515151515151515151515151515151 5151515151515151515151515151515050505050504F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4E4E4E 4E4E4E4E4E4E4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A494949484848 484848484848474747474747474747464646454545454545454545444444444444434343434343 4242424141414040404040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C 3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838383838393939383838383838373737373737 363636363636363636363636363636353535353535353535343434343434343434343434343434 333333333333333333323232323232323232323232323232323232323232323232323232323232 313131313131313131313131313131313131313131313131313131313131313131313131313131 313131313131313131313131313131313131313131313131313131313131313131303030303030 303030303030303030303030303030303030303030303030303030303030303030303030303030 3030303030303030303030303030303030303030303030303030303030303030303030302F2F2F 2F2F2F2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2B2B2B2A2A2A292929282828282828262626 2525252525252323232121211F1F1F1D1D1D1B1B1B0B0909050101050101050101050101050101 050101050303808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE FCFCFC1616160000000000000000000000000000000000000000000505052929292D2D2D2F2F2F 3232323232323434343535353838383A3A3A3C3C3C3D3D3D3E3E3E3F3F3F414141424242434343 434343444444444444444444454545464646474747484848484848464646464646464646464646 464646464646464646464646454545454545444444444444434343434343424242424242414141 4040403F3F3F3E3E3E3C3C3C3B3B3B3B3B3B3A3A3A373737373737353535333333323232303030 2F2F2F2E2E2E2C2C2C2A2A2A2828282626262525252323232020201E1E1E1D1D1D1B1B1B171717 1515151111111010100C0C0C090909060606060606010101010101010101010101010101010101 0000000000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000 000000000000000000010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 909090050505000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000242424FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE9999990E0E0E000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000505050505050808080808080B0B0B0D0D0D101010131313141414151515181818 1A1A1A1B1B1B1D1D1D1E1E1E2020202121212323232525252727272828282A2A2A2C2C2C2D2D2D 2E2E2E2F2F2F3131313333333535353636363636363737373838383939393B3B3B3C3C3C3D3D3D 3E3E3E3F3F3F404040414141414141424242434343444444444444454545464646464646474747 4848484949494A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E 4E4E4E4F4F4F4F4F4F4F4F4F505050505050515151515151515151515151515151515151515151 515151515151515151535353525252525252525252515151515151515151515151515151515151 5151515151515151515151515151515151515151515151515151515050504F4F4F4F4F4F4E4E4E 4F4F4F5050505050504F4F4F4F4F4F4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C 4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A494949494949484848484848474747474747474747464646 4646464545454444444343434343434242424242424242424242424141414040404040403F3F3F 3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3A3A3A393939393939393939383838383838383838383838383838373737373737373737373737 373737373737363636363636363636363636353535353535353535353535353535353535353535 353535353535353535343434343434343434343434343434343434343434343434343434343434 343434343434343434343434343434343434343434343434343434343434343434343434343434 333333333333333333333333333333333333333333333333333333333333333333333333333333 333333333333333333333333333333333333333333333333333333333333333333333333323232 3232323131313131313030302F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2D2D2D2C2C2C2B2B2B2A2A2A 2929292828282626262626262424242222222020201E1E1E1B1B1B0B0909050101050101050101 050101050101050101050303808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFEFCFCFC161616000000000000000000000000000000000000000000050505292929 2D2D2D2F2F2F3232323232323333333535353838383A3A3A3C3C3C3D3D3D3E3E3E3F3F3F404040 414141424242434343434343444444444444444444454545464646464646474747464646464646 464646464646454545454545454545454545444444444444434343434343424242414141404040 3F3F3F3F3F3F3E3E3E3D3D3D3C3C3C3A3A3A393939383838373737353535343434323232313131 2F2F2F2E2E2E2C2C2C2B2B2B2929292727272525252323232222222020201D1D1D1C1C1C191919 1616161313131111110E0E0E0C0C0C090909060606010101010101010101010101010101010101 0101010101010000000000000000000000000000000000000000000000000000000D0D0DBFBFBF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000 000000000000000000000000000000010101000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF3D3D3D000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000171717EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6E6E6545454000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000505050505050808080B0B0B0D0D0D0F0F0F 1010101313131515151717171919191A1A1A1C1C1C1D1D1D1F1F1F202020232323242424252525 2626262828282929292B2B2B2C2C2C2F2F2F303030313131323232343434353535363636373737 3939393A3A3A3B3B3B3B3B3B3E3E3E3E3E3E3E3E3E404040404040414141424242424242434343 4444444545454646464747474848484848484949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4C4C4C 4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F505050505050505050505050505050 515151515151515151525252525252515151515151515151515151525252525252525252515151 515151515151515151515151515151525252525252525252515151515151515151515151505050 5050505050505050505050505050504F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E 4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A494949494949 494949484848484848474747474747464646464646464646454545444444444444444444434343 4343434343434242424242424040404040404040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D 3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A393939393939393939393939393939393939393939383838383838383838 383838383838383838383838383838383838383838383838383838383838383838383838373737 373737373737373737373737373737373737373737373737373737373737373737363636363636 363636363636373737373737373737373737373737373737363636363636363636363636363636 363636353535353535353535353535353535353535353535353535353535343434343434343434 3535353535353434343434343333333232323232323232323131313131313131312F2F2F2E2E2E 2D2D2D2C2C2C2B2B2B2A2A2A2828282727272525252323232121211F1F1F1C1C1C0B0909050101 0501010501010501010501010501010503037F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFEFEFEFCFCFC161616000000000000000000000000000000000000000000 0505052929292D2D2D2F2F2F3131313333333333333535353737373939393C3C3C3C3C3C3D3D3D 3E3E3E3F3F3F404040414141414141434343434343434343444444444444444444454545454545 464646464646454545454545454545444444444444444444434343434343424242414141404040 3F3F3F3E3E3E3E3E3E3D3D3D3C3C3C3B3B3B3A3A3A383838373737363636343434323232323232 3131312F2F2F2D2D2D2A2A2A2A2A2A2828282626262323232222222020201D1D1D1C1C1C1A1A1A 1616161515151111111010100E0E0E0C0C0C090909060606010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 0D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000101010BDBDBDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFB2B2B21D1D1D000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000050505050505050505 0808080808080B0B0B0F0F0F1010101313131414141515151919191A1A1A1B1B1B1C1C1C1F1F1F 2020202121212222222525252525252727272828282B2B2B2D2D2D2E2E2E2F2F2F313131313131 3333333434343636363737373737373939393B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F404040 4040404141414242424242424343434545454545454747474747474949494949494A4A4A4A4A4A 4A4A4A4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4E4E4E 4F4F4F4F4F4F4F4F4F505050515151515151515151515151515151515151515151525252525252 525252525252515151515151515151525252525252525252535353525252515151515151515151 5151515151515151515151515151514F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F 4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B 4B4B4B4B4B4B4A4A4A494949494949484848484848484848484848484848474747464646464646 464646454545454545454545454545434343424242424242424242424242414141414141414141 4040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939 3939393939393939393939393939393A3A3A3A3A3A393939393939393939393939393939383838 383838383838383838373737373737373737373737373737373737373737373737373737363636 363636363636363636363636363636363636353535343434343434343434333333333333323232 3131312F2F2F2E2E2E2D2D2D2C2C2C2C2C2C2A2A2A2828282626262525252323232020201C1C1C 0B09090501010501010501010501010501010501010503037E7E7EFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC161616000000000000000000000000000000 0000000000000505052929292C2C2C2F2F2F3131313333333232323535353737373939393B3B3B 3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F3F3F3F3F3F3F414141424242424242424242434343434343 4343434343434545454444444444444343434343434242424242424141414141414040403F3F3F 3E3E3E3D3D3D3C3C3C3C3C3C3B3B3B3A3A3A3A3A3A383838373737353535333333323232323232 2F2F2F2F2F2F2D2D2D2A2A2A2929292727272525252525252121211F1F1F1C1C1C1C1C1C1A1A1A 1818181515151313131010100E0E0E0C0C0C090909060606060606010101010101010101010101 010101010101010101010101010101010101000000000000000000000000000000000000000000 0000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8A8A8A000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000171717DEDEDEFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9171717000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000020202939393FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF1F1F16E6E6E030303000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000505050505050505050808080B0B0B0D0D0D0F0F0F101010131313141414171717 1919191B1B1B1C1C1C1E1E1E1F1F1F2121212121212323232525252727272929292A2A2A2C2C2C 2E2E2E2F2F2F2F2F2F3131313232323434343535353636363737373838383939393A3A3A3B3B3B 3C3C3C3D3D3D3D3D3D3E3E3E3F3F3F404040414141424242434343444444454545464646474747 4747474747474848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D 4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F505050505050515151515151515151 515151515151525252515151515151515151515151525252525252525252535353525252515151 515151515151515151515151515151515151515151505050505050505050505050505050505050 5050505050504F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D 4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949484848 474747474747474747474747474747464646464646454545444444434343434343434343434343 434343424242424242424242424242414141414141414141404040404040404040404040404040 4040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F 3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E 3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B 3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939 393939393939393939393939383838383838373737373737363636363636353535353535353535 3434343333333232323131312F2F2F2E2E2E2D2D2D2C2C2C2A2A2A282828272727252525232323 2020201D1D1D0B09090501010501010501010501010501010501010503037D7D7DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC161616000000000000000000 0000000000000000000000000505052929292C2C2C2E2E2E313131333333323232343434373737 3939393A3A3A3A3A3A3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3E3E3E404040414141414141414141 4141414141414141414141414242424242424141414141414040403F3F3F3F3F3F3F3F3F3E3E3E 3D3D3D3C3C3C3B3B3B3A3A3A393939383838373737373737363636353535323232323232313131 2F2F2F2E2E2E2C2C2C2A2A2A2929292727272424242222222121211F1F1F1C1C1C1B1B1B191919 1616161515151313131111110E0E0E090909090909060606060606010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 0000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF8A8A8A000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000171717DEDEDE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9181818000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000007A7A7AFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6C62C2C2C000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000505050505050808080808080B0B0B0D0D0D 0F0F0F1010101313131515151818181A1A1A1B1B1B1C1C1C1E1E1E1F1F1F212121232323252525 2626262727272A2A2A2B2B2B2C2C2C2D2D2D2F2F2F303030313131323232343434353535363636 3737373838383939393A3A3A3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3F3F3F404040414141424242 4343434444444444444545454646464747474747474747474848484848484949494949494A4A4A 4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F505050 505050505050515151515151515151515151515151515151515151515151515151525252525252 525252525252525252525252525252525252525252525252515151515151515151515151515151 5151515151515151515151515050505050504F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E 4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A 4A4A4A4A4A4A494949494949484848484848484848484848484848474747464646464646454545 454545454545454545454545444444444444444444434343434343434343434343434343434343 434343434343434343424242424242424242424242424242424242424242424242424242424242 424242424242414141404040404040404040404040404040404040404040404040404040404040 404040404040404040404040404040404040404040404040404040404040404040404040404040 4040404040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3C3C3C 3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3B3B3B3A3A3A393939393939393939383838373737373737 3737373636363636363535353434343232323131312F2F2F2F2F2F2D2D2D2B2B2B292929282828 2626262424242121211E1E1E0B09090501010501010501010501010501010501010503037B7B7B FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC161616000000 0000000000000000000000000000000000000505052929292C2C2C2E2E2E303030323232323232 3434343737373838383A3A3A3A3A3A3A3A3A3B3B3B3C3C3C3C3C3C3D3D3D3E3E3E3F3F3F3F3F3F 3F3F3F4040404040404040404040404040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D 3C3C3C3B3B3B3B3B3B3A3A3A383838373737363636353535353535343434333333333333313131 2F2F2F2E2E2E2C2C2C2929292727272626262424242222222121211F1F1F1D1D1D1C1C1C1A1A1A 1818181515151414141111111010100E0E0E090909060606060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 0000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF171717000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000006A6A6A FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFB909090 0E0E0E000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000050505050505 0505050808080B0B0B0B0B0B0F0F0F1010101313131515151717171919191A1A1A1B1B1B1D1D1D 1F1F1F2121212222222323232626262727272828282A2A2A2C2C2C2D2D2D2E2E2E2F2F2F313131 3131313232323434343636363737373838383838383939393A3A3A3B3B3B3C3C3C3D3D3D3E3E3E 3F3F3F404040414141424242424242434343444444454545454545464646474747474747474747 4848484848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4E4E4E 4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F505050505050505050505050505050515151515151 515151515151515151515151515151515151515151515151515151515151515151515151515151 5151515151515151515151515151515151515151515151515050505050505050504F4F4F4F4F4F 4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949484848484848 474747474747474747474747464646464646464646454545454545454545444444444444444444 444444444444444444444444444444444444434343434343434343434343434343434343434343 434343434343434343434343434343424242424242424242424242424242424242424242424242 424242424242424242424242424242424242424242424242424242424242424242424242424242 424242424242424242424242414141414141414141404040404040404040404040414141404040 4040404040404040404040403F3F3F3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E 3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A 3939393939393838383737373737373636363535353333333232323131313030302E2E2E2C2C2C 2A2A2A2828282727272525252121211F1F1F0B0909050101050101050101050101050101050101 0503037B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFCFCFC 1616160000000000000000000000000000000000000000000505052929292C2C2C2D2D2D2F2F2F 3131313232323434343535353636363838383838383939393A3A3A3B3B3B3C3C3C3D3D3D3D3D3D 3C3C3C3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C 3B3B3B3B3B3B3A3A3A393939383838373737373737353535353535343434333333333333313131 2E2E2E2C2C2C2B2B2B2929292727272626262626262323232121211F1F1F1E1E1E1C1C1C1A1A1A 1818181616161414141111111010100C0C0C090909090909060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 0000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE6E6E65D5D5D010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000505050505050808080808080D0D0D0F0F0F101010101010141414141414 1717171919191B1B1B1C1C1C1E1E1E1F1F1F2121212222222323232626262828282A2A2A2A2A2A 2C2C2C2D2D2D2E2E2E2F2F2F313131323232343434353535363636373737373737383838393939 3A3A3A3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F404040424242424242434343434343454545 4545454545454646464747474747474747474848484949494949494A4A4A4A4A4A4B4B4B4C4C4C 4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F 4F4F4F505050505050505050505050515151515151515151515151515151515151515151515151 515151515151515151515151515151515151515151515151515151515151515151505050505050 5050505050505050505050505050504F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4E4E4E 4E4E4E4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4A4A4A 4A4A4A494949494949484848484848484848484848484848474747464646464646464646454545 454545454545454545454545464646454545454545454545454545454545444444444444444444 444444444444444444444444444444444444444444444444444444444444444444444444444444 444444444444444444444444444444444444444444444444444444434343434343434343434343 434343434343434343434343434343434343434343434343424242424242424242424242424242 4343434242424242424242424242424242424141414141414040404040404040404040403F3F3F 3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C 3B3B3B3B3B3B3A3A3A3A3A3A393939393939383838373737363636343434333333313131313131 2F2F2F2D2D2D2B2B2B2929292828282626262323232020200B0909050101050101050101050101 0501010501010503037A7A7AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEFCFCFC1616160000000000000000000000000000000000000000000505052929292B2B2B 2D2D2D2F2F2F3131313333333434343535353535353737373737373737373838383939393A3A3A 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3B3B3B3A3A3A3A3A3A 3A3A3A393939393939383838383838373737363636353535343434333333323232323232313131 2F2F2F2D2D2D2B2B2B2929292929292727272424242323232222222020201D1D1D1C1C1C1B1B1B 1919191616161414141111111010100E0E0E0C0C0C090909060606060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010000000000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DEDEDE171717000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0C0C02B2B2B000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000505050505050808080B0B0B0B0B0B 0F0F0F0F0F0F1010101313131515151717171919191A1A1A1C1C1C1D1D1D1F1F1F212121232323 2525252626262727272828282929292B2B2B2C2C2C2E2E2E303030313131313131333333343434 3434343636363737373838383838383939393A3A3A3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F404040 404040424242424242424242434343434343444444444444454545474747474747474747484848 4848484949494949494A4A4A4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4C4C4C4D4D4D4E4E4E 4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F505050505050505050505050505050505050 505050505050505050505050505050505050505050505050505050505050515151515151515151 5050505050505050505050505050505050505050504F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E 4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949484848484848484848474747 474747474747474747464646464646474747474747474747474747474747474747464646464646 464646464646464646464646464646464646464646464646464646464646464646464646464646 464646464646464646464646464646464646464646464646464646464646464646454545454545 454545454545454545454545454545454545454545454545454545444444444444444444434343 434343444444444444444444434343434343434343434343434343424242424242424242424242 4141414141414141414141414040404040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E 3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B3B3B3A3A3A393939383838373737363636353535333333 3232323131313030302E2E2E2C2C2C2A2A2A2828282626262323232121210C0A0A050101050101 050101050101050101050101050303797979FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFEFEFE161616000000000000000000000000000000000000000000050505 2727272A2A2A2C2C2C2E2E2E303030323232323232333333343434353535353535363636373737 3838383838383939393939393939393939393939393939393A3A3A3A3A3A3A3A3A3A3A3A393939 3838383838383737373737373636363535353535353434343333333232323232323030302F2F2F 2E2E2E2D2D2D2C2C2C2929292727272626262525252323232121211F1F1F1E1E1E1C1C1C1A1A1A 1818181616161414141111110E0E0E0C0C0C090909090909060606060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 0101010101010101010000000000000000000000000000000000000000000000000000000D0D0D BFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDEDEDE171717000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA9090900D0D0D000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 0505050505050B0B0B0B0B0B0D0D0D0F0F0F1010101313131414141515151919191919191B1B1B 1C1C1C1F1F1F2121212323232323232525252626262727272828282B2B2B2C2C2C2D2D2D2F2F2F 3030303030303131313232323333333434343535353636363737373737373939393A3A3A3B3B3B 3C3C3C3D3D3D3E3E3E3F3F3F3F3F3F404040404040404040414141424242424242444444444444 4545454545454646464747474747474747474A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B 4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F 4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F505050515151 5151515151515050505050504F4F4F4F4F4F4F4F4F5050505050504F4F4F4F4F4F4F4F4F4F4F4F 4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949494949 494949494949494949484848484848484848484848484848494949494949494949484848484848 484848484848484848484848484848484848484848484848484848484848484848484848484848 484848484848484848484848484848484848484848484848484848484848484848484848484848 474747474747474747474747474747474747474747474747474747474747474747464646464646 464646454545454545454545454545454545444444444444444444434343434343444444434343 434343434343434343434343424242424242424242424242414141414141414141404040404040 4040403E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3B3B3B3B3B3B3B3B3B393939383838373737363636 3535353333333232323131313030302E2E2E2C2C2C2A2A2A2828282727272323232121210C0A0A 050101050101050101050101050101050101050303787878FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE161616000000000000000000000000000000000000 0000000505052626262929292A2A2A2C2C2C2E2E2E303030313131333333333333343434353535 353535363636373737373737383838383838383838383838383838383838383838383838383838 3838383737373737373636363535353434343333333333333232323232323131313030302E2E2E 2D2D2D2C2C2C2B2B2B2A2A2A2929292626262424242222222222222020201D1D1D1C1C1C1A1A1A 1818181515151414141313131010100E0E0E090909060606060606060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 0000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000171717DEDEDEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E2E2E2555555000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000505050505050808080808080B0B0B0D0D0D0F0F0F101010131313 1414141515151818181A1A1A1B1B1B1D1D1D1E1E1E212121212121232323252525262626282828 2929292A2A2A2B2B2B2C2C2C2D2D2D2E2E2E2F2F2F313131313131323232343434343434353535 3636363737373939393939393A3A3A3B3B3B3C3C3C3D3D3D3D3D3D3E3E3E3F3F3F404040404040 424242424242434343434343454545454545464646474747474747484848484848484848494949 4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4E4E4E 4E4E4E4E4E4E4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F505050 5050505050505050505050505050505050505050505050505050504F4F4F4F4F4F4F4F4F4F4F4F 4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D4D4D4D 4D4D4D4D4D4D4D4D4D4C4C4C4C4C4C4C4C4C4C4C4C4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949494949494949494949 494949494949494949494949494949494949494949494949494949494949494949494949494949 494949494949494949494949494949494949494949494949494949494949494949494949494949 494949494949484848484848484848484848484848484848484848484848484848484848484848 484848474747474747474747474747464646464646464646464646454545454545454545454545 454545444444444444444444444444434343434343434343434343424242424242424242414141 4141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3C3C3C3B3B3B3B3B3B3A3A3A393939 3838383737373535353434343333333232323030302E2E2E2C2C2C2B2B2B292929272727242424 2121210C0A0A050101050101050101050101050101050101050303767676FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFEFEFE161616000000000000000000000000 0000000000000000000505052525252828282A2A2A2B2B2B2D2D2D2F2F2F303030313131313131 333333343434353535353535353535363636363636363636373737373737373737363636363636 3636363636363636363535353535353434343333333232323131313131313030303030302E2E2E 2D2D2D2C2C2C2A2A2A2929292828282727272424242222222121212020201E1E1E1C1C1C1B1B1B 1919191616161414141111111010100E0E0E0C0C0C090909060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 0000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF8A8A8A000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000171717DEDEDEFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000686868FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFC8C8C8383838000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000050505050505080808080808 0B0B0B0F0F0F1010101212121313131515151818181919191A1A1A1C1C1C1D1D1D1F1F1F212121 2222222323232525252626262828282828282929292B2B2B2C2C2C2D2D2D2E2E2E2F2F2F313131 3131313232323434343434343535353636363737373838383939393939393B3B3B3C3C3C3D3D3D 3D3D3D3E3E3E3F3F3F404040404040424242434343444444454545454545454545454545464646 4747474747474848484949494949494848484949494949494A4A4A4A4A4A4B4B4B4B4B4B4B4B4B 4B4B4B4B4B4B4C4C4C4C4C4C4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E 4F4F4F4F4F4F4F4F4F4E4E4E4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F5050504F4F4F4F4F4F4F4F4F 4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E 4E4E4E4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949 494949494949494949494949494949494949494949494949494949494949494949494949494949 4949494949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949 484848484848484848484848484848474747474747474747474747474747474747474747464646 464646464646454545454545454545444444444444444444434343434343434343434343434343 4242424242424141414141414040404040404040403F3F3F3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C 3A3A3A3939393838383737373636363434343333333232323131312E2E2E2C2C2C2A2A2A292929 2727272323232121210C0A0A050101050101050101050101050101050101050303767676FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE161616000000000000 0000000000000000000000000000000404042424242727272929292A2A2A2C2C2C2D2D2D2F2F2F 2F2F2F2F2F2F333333323232323232333333333333333333343434343434343434343434343434 3434343333333333333333333333333232323232323131313030302F2F2F2E2E2E2D2D2D2D2D2D 2C2C2C2B2B2B2A2A2A2828282626262525252424242222222121211F1F1F1C1C1C1C1C1C1A1A1A 1919191616161414141313131010100E0E0E0C0C0C090909090909060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101000000000000000000000000 0000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000171717 DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000686868FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEA1A1A1191919000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0505050505050505050B0B0B0B0B0B0D0D0D0F0F0F121212131313141414151515181818191919 1B1B1B1C1C1C1E1E1E2020202121212121212323232424242525252727272828282A2A2A2A2A2A 2B2B2B2D2D2D2E2E2E2F2F2F303030313131323232333333343434353535363636363636373737 3939393A3A3A3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F404040414141424242424242424242 424242434343444444454545454545464646474747474747474747474747484848484848494949 4949494949494949494949494A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E 4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E 4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4C4C4C4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A494949494949494949484848484848484848484848484848484848484848474747 474747474747474747474747464646454545454545454545454545444444444444444444444444 4343434343434343434242424242424141414141414040404040404040403F3F3F3E3E3E3D3D3D 3D3D3D3C3C3C3B3B3B3A3A3A3939393737373636363535353434343333333131312E2E2E2C2C2C 2A2A2A2828282727272323232121210C0A0A050101050101050101050101050101050101050303 757575FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE161616 0000000000000000000000000000000000000000000404042323232626262727272929292A2A2A 2B2B2B2D2D2D2D2D2D2D2D2D303030303030303030303030303030303030313131313131323232 3131313131313131313030303030303030303030302F2F2F2F2F2F2E2E2E2D2D2D2B2B2B2A2A2A 2929292929292929292727272626262424242222222121212020201E1E1E1C1C1C1A1A1A181818 1616161515151414141111111010100E0E0E0C0C0C090909060606060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 0000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F47F7F7F 080808000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000505050505050808080808080B0B0B0D0D0D0F0F0F101010 1313131414141515151717171919191B1B1B1B1B1B1C1C1C1F1F1F202020212121222222242424 2626262626262727272929292A2A2A2B2B2B2C2C2C2D2D2D2F2F2F2F2F2F303030313131323232 3333333434343535353636363737373838383939393A3A3A3B3B3B3C3C3C3D3D3D3E3E3E3F3F3F 3F3F3F404040404040414141424242424242434343444444444444454545454545454545464646 4747474747474747474747474747474747474848484848484949494A4A4A4A4A4A4A4A4A4B4B4B 4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D 4D4D4D4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E 4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4D4D4D 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949484848484848484848 484848484848484848474747474747474747464646464646454545454545454545454545454545 4444444444444444444444444343434343434242424242424242424141414040404040403F3F3F 3E3E3E3D3D3D3D3D3D3C3C3C3B3B3B3A3A3A393939383838363636353535343434333333313131 2E2E2E2C2C2C2A2A2A2828282626262323232121210C0A0A050101050101050101050101050101 050101050303747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFE161616000000000000000000000000000000000000000000040404222222252525262626 2727272929292B2B2B2C2C2C2C2C2C2C2C2C2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E 2E2E2E2F2F2F2F2F2F2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2C2C2C2B2B2B292929 2828282727272626262626262525252424242222222121211F1F1F1D1D1D1C1C1C1C1C1C191919 1616161515151313131111111010100E0E0E0C0C0C090909090909060606060606010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8A8A000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000171717DEDEDEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE 171717000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFE2E2E25D5D5D010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000050505050505080808 0808080B0B0B0F0F0F0F0F0F1010101212121313131515151717171818181A1A1A1B1B1B1B1B1B 1E1E1E2020202121212323232323232525252626262727272828282A2A2A2B2B2B2C2C2C2D2D2D 2F2F2F2F2F2F3030303131313232323333333434343535353636363737373838383939393A3A3A 3B3B3B3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F404040414141424242424242434343434343 434343444444454545454545454545454545464646464646474747474747484848484848484848 4949494A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C 4C4C4C4C4C4C4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D 4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D 4D4D4D4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949 494949494949494949484848484848484848484848484848474747464646464646454545454545 454545454545454545454545444444444444434343434343424242424242424242414141404040 4040403F3F3F3E3E3E3D3D3D3D3D3D3C3C3C3B3B3B3A3A3A393939373737363636353535343434 3333333030302D2D2D2C2C2C2A2A2A2828282626262323232020200C0A0A050101050101050101 050101050101050101050303747474FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFE161616000000000000000000000000000000000000000000040404212121 2424242525252626262727272929292A2A2A2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D 2D2D2D2E2E2E2E2E2E2C2C2C2C2C2C2C2C2C2B2B2B2B2B2B2B2B2B2A2A2A292929282828282828 2727272626262525252424242323232222222121212020201E1E1E1C1C1C1B1B1B191919181818 1616161515151414141111111010100C0C0C090909090909060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000D0D0DBFBFBF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C8C8C000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000171717DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDEDEDE171717000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2C2C2383838000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000505050505050808080808080B0B0B0D0D0D0F0F0F101010121212131313141414 1515151717171919191B1B1B1C1C1C1E1E1E1F1F1F202020212121222222232323252525272727 2828282828282B2B2B2B2B2B2C2C2C2D2D2D2F2F2F2F2F2F303030313131333333333333343434 3636363737373737373838383939393B3B3B3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3F3F3F 404040404040414141424242424242434343434343434343444444444444454545454545464646 4646464747474747474848484848484848484949494949494949494A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4B4B4B4B4B4B4B4B4B4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C 4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 494949494949494949494949494949484848484848484848484848484848474747454545454545 454545454545454545444444444444444444444444434343434343434343424242424242414141 4040404040403F3F3F3E3E3E3E3E3E3D3D3D3C3C3C3C3C3C3A3A3A393939383838373737363636 3434343333333232323030302D2D2D2B2B2B2A2A2A2828282626262323232020200C0A0A050101 050101050101050101050101050101050303727272FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFE161616000000000000000000000000000000000000000000 040404212121222222232323242424252525262626282828292929292929292929292929292929 2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2A2A2A292929292929292929282828282828272727272727 2626262525252424242323232222222121212121211F1F1F1D1D1D1C1C1C1B1B1B191919161616 1515151414141313131010100E0E0E0E0E0E0C0C0C090909060606060606010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA5A5A5060606 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000171717F4F4F4FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBBBB2C2C2C000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000505050505050505050808080808080B0B0B0D0D0D 0D0D0D0F0F0F0F0F0F1010101313131515151818181919191A1A1A1B1B1B1B1B1B1D1D1D1F1F1F 2121212222222323232525252626262727272828282828282A2A2A2B2B2B2C2C2C2D2D2D2F2F2F 2F2F2F3030303131313232323333333434343535353737373737373737373939393939393A3A3A 3B3B3B3B3B3B3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F404040404040404040414141414141424242 424242434343434343434343444444464646464646464646464646474747474747474747474747 4848484848484848484848484848484949494949494949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4949494949494949494949494949494949494949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4B4B4B 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A4A4A4A 494949494949494949494949494949484848484848484848484848484848474747474747464646 454545454545454545444444444444444444434343434343434343434343434343424242424242 4141414141414040403F3F3F3E3E3E3E3E3E3D3D3D3C3C3C3B3B3B3B3B3B393939393939373737 3636363535353434343232323131312F2F2F2D2D2D2B2B2B292929282828262626232323202020 0C0A0A050101050101050101050101050101050101050303727272FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE161616000000000000000000000000000000 0000000000000404041F1F1F212121212121222222222222242424252525262626262626262626 272727272727272727272727272727272727282828272727272727262626262626252525242424 2424242424242222222222222121212020201E1E1E1D1D1D1C1C1C1C1C1C1A1A1A191919161616 1414141313131010100E0E0E0C0C0C090909090909060606060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF C6C6C6131313000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000191919FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FBFBFB999999191919000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 0505050808080808080808080B0B0B0D0D0D0F0F0F101010131313141414151515171717181818 1919191B1B1B1C1C1C1E1E1E202020212121232323232323242424252525262626282828282828 2929292B2B2B2C2C2C2D2D2D2E2E2E2F2F2F303030313131313131333333343434343434353535 3636363737373737373838383A3A3A3B3B3B3B3B3B3B3B3B3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E 3E3E3E3F3F3F3F3F3F404040404040414141424242434343434343434343444444444444454545 454545454545454545454545464646464646464646474747474747474747494949494949494949 4949494949494949494949494949494949494949494949494949494949494949494949494A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A494949494949494949494949494949 494949494949494949484848484848484848484848484848484848484848494949494949494949 494949494949494949494949494949494949494949494949494949494949494949494949494949 4A4A4A4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B 4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4A4A4A4A4A4A 4A4A4A4A4A4A494949494949494949484848484848484848484848484848484848474747474747 474747454545454545444444444444444444434343434343434343434343434343424242424242 4242424141414040404040403F3F3F3E3E3E3E3E3E3D3D3D3C3C3C3B3B3B3B3B3B3A3A3A393939 3838383737373636363434343333333131313131312F2F2F2D2D2D2B2B2B292929282828262626 2323232020200C0A0A050101050101050101050101050101050101050303717171FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE161616000000000000000000 0000000000000000000000000404041D1D1D1F1F1F202020212121222222222222232323242424 242424242424242424242424242424242424242424242424242424242424242424242424222222 2222222121212121212020201F1F1F1E1E1E1D1D1D1C1C1C1B1B1B1A1A1A191919181818151515 1414141313131010100E0E0E0C0C0C090909090909060606010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFC181818000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000004E4E4EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000686868FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF4F4F48888880E0E0E000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000505050505050808080808080B0B0B0D0D0D0F0F0F101010 1212121313131414141515151818181919191B1B1B1B1B1B1E1E1E1E1E1E202020212121222222 2323232424242525252626262727272828282A2A2A2B2B2B2C2C2C2D2D2D2D2D2D2F2F2F2F2F2F 3030303131313232323333333434343434343535353636363737373737373838383939393A3A3A 3A3A3A3B3B3B3B3B3B3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3F3F3F404040404040404040414141 424242424242434343434343434343434343434343444444454545454545454545464646474747 474747474747474747474747484848484848484848484848484848484848484848484848494949 494949484848484848484848484848484848494949494949494949494949484848484848484848 484848484848484848484848484848484848484848484848484848484848484848484848484848 484848484848484848484848484848484848484848484848484848484848494949494949494949 4949494A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A494949494949494949484848484848484848484848484848474747474747 474747464646464646454545444444444444434343434343434343424242424242424242424242 4242424242424141414040404040404040403E3E3E3D3D3D3D3D3D3C3C3C3B3B3B3A3A3A3A3A3A 3939393838383636363636363434343333333131313131313030302E2E2E2C2C2C2A2A2A282828 2727272525252222222020200C0A0A050101050101050101050101050101050101050303707070 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE161616000000 0000000000000000000000000000000000000303031C1C1C1E1E1E1F1F1F202020212121212121 222222222222222222222222222222222222222222222222222222222222222222222222212121 2121212020201F1F1F1D1D1D1C1C1C1C1C1C1C1C1C1B1B1B1A1A1A181818161616151515141414 1313131010101010100E0E0E0C0C0C090909060606060606060606010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6B6B6B060606000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000141414 CCCCCCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000686868 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE8E8E86A6A6A060606000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000050505050505080808 0808080B0B0B0D0D0D0F0F0F0F0F0F1010101313131414141515151717171919191A1A1A1B1B1B 1C1C1C1E1E1E2020202121212121212323232323232525252626262727272828282A2A2A2A2A2A 2B2B2B2C2C2C2D2D2D2E2E2E2F2F2F303030313131313131313131323232333333343434353535 3636363737373737373838383838383939393A3A3A3B3B3B3B3B3B3C3C3C3C3C3C3D3D3D3D3D3D 3E3E3E3E3E3E3F3F3F404040414141414141414141414141424242424242424242434343434343 444444454545454545454545454545454545464646464646464646464646464646474747474747 474747474747474747474747464646474747474747474747474747474747484848474747474747 474747474747474747474747474747474747474747474747474747474747474747474747474747 474747474747474747474747474747474747474747474747474747474747474747474747484848 4848484848484848484949494949494949494949494949494949494A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A 4A4A4A4A4A4A494949494949484848484848484848484848484848474747474747474747474747 464646464646454545454545444444444444444444434343434343424242424242414141414141 4141414141414040404040404040403F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B 3A3A3A3939393939393737373636363535353434343232323131313030302F2F2F2D2D2D2B2B2B 2929292727272626262525252121211F1F1F0B0909050101050101050101050101050101050101 0503036F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1616160000000000000000000000000000000000000000000303031A1A1A1C1C1C1D1D1D1E1E1E 1E1E1E1F1F1F1F1F1F2020202121212121212121212020202020202020201F1F1F1F1F1F1F1F1F 1E1E1E1D1D1D1C1C1C1C1C1C1B1B1B1A1A1A191919181818181818161616151515141414111111 1010101010100E0E0E090909090909090909060606060606010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1A1A1A000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0707074F4F4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1E1 6E6E6E070707000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000505050505050505050808080808080B0B0B0D0D0D0F0F0F101010101010121212131313 1414141515151717171919191B1B1B1B1B1B1C1C1C1F1F1F202020202020212121232323252525 2626262626262727272828282828282A2A2A2B2B2B2C2C2C2D2D2D2D2D2D2E2E2E2F2F2F303030 313131323232333333343434343434353535353535363636363636373737383838393939393939 3939393A3A3A3B3B3B3B3B3B3C3C3C3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040 404040414141414141424242424242424242434343434343434343434343434343444444444444 444444444444454545454545454545454545444444444444454545454545454545454545454545 454545454545454545454545454545454545454545454545454545454545454545454545454545 454545454545454545454545454545454545454545454545454545454545454545454545464646 464646464646464646474747474747474747474747484848484848484848494949494949494949 494949494949494949494949494949494949494949494949494949494949494949494949494949 494949494949494949494949484848474747474747474747474747464646464646464646464646 454545454545454545444444434343434343434343434343434343434343424242424242414141 4141414040404040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3C3C3C 3B3B3B3A3A3A3939393838383838383636363535353434343333333131313030302F2F2F2E2E2E 2C2C2C2A2A2A2828282626262525252323232121211E1E1E0B0909050101050101050101050101 0501010501010503036F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF1616160000000000000000000000000000000000000000000303031818181B1B1B 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1A1A1A1A1A1A191919181818161616151515141414141414131313131313111111 1010100E0E0E0C0C0C090909090909060606060606010101010101010101010101010101010101 010101010101010101010101010101010101010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC6C6C6141414000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000050505292929F5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DEDEDE171717000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE0E0E0666666040404000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000505050505050505050808080B0B0B0B0B0B 0D0D0D0D0D0D0D0D0D0F0F0F1212121313131515151717171818181A1A1A1B1B1B1B1B1B1D1D1D 1F1F1F2020202121212121212323232323232525252626262727272828282828282929292A2A2A 2B2B2B2C2C2C2D2D2D2E2E2E2F2F2F303030313131313131313131323232333333343434353535 3535353636363636363737373737373838383939393A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C 3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E404040404040404040404040404040414141414141414141 424242424242424242424242424242434343434343434343424242424242424242434343434343 434343434343434343434343434343434343434343434343434343434343434343444444444444 444444444444444444444444444444444444444444444444444444444444444444444444444444 444444454545454545454545454545454545464646464646464646474747474747474747474747 484848484848484848484848484848484848484848484848484848484848484848484848484848 484848484848484848484848484848484848474747464646464646464646464646454545454545 454545454545444444444444434343434343424242424242424242424242424242424242414141 4040404040403F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B 3B3B3B3A3A3A3939393939393838383737373737373636363434343333333232323131312F2F2F 2E2E2E2D2D2D2B2B2B2828282727272525252424242222222020201D1D1D0B0909050101050101 0501010501010501010501010503036E6E6EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000000000000000000000000000030303 1616161919191919191A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1B1B1B1B1B1B1A1A1A 1A1A1A1A1A1A191919191919181818161616151515141414131313111111101010101010101010 0E0E0E0E0E0E0C0C0C090909060606060606060606010101010101010101010101010101010101 010101010101010101010101000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000D0D0D BFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF C8C8C81B1B1B060606000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000001010103D3D3DF1F1F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDEDEDE171717000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE666666030303000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000050505 0505050505050505050808080808080B0B0B0D0D0D0F0F0F101010101010131313151515151515 1717171919191A1A1A1B1B1B1C1C1C1D1D1D1F1F1F202020202020212121232323232323242424 2525252626262727272828282929292A2A2A2B2B2B2C2C2C2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 303030313131313131323232333333343434343434353535363636373737373737373737393939 3939393939393A3A3A3A3A3A3B3B3B3B3B3B3C3C3C3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E 3E3E3E3F3F3F404040404040404040404040404040414141414141414141404040404040414141 414141414141424242424242424242424242424242424242424242424242424242424242424242 434343434343434343434343434343434343434343434343434343434343434343434343434343 434343434343434343434343444444444444444444454545454545454545454545454545454545 454545464646464646464646464646474747474747474747474747474747474747474747474747 474747474747474747474747474747474747474747474747464646464646454545454545454545 454545444444444444444444434343434343424242424242424242414141404040404040404040 4040403F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B 3A3A3A393939393939383838373737373737363636353535353535343434323232313131313131 2F2F2F2E2E2E2C2C2C2C2C2C2A2A2A2727272626262323232323232121211E1E1E1B1B1B0B0909 0501010501010501010501010501010501010503036D6D6DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000000000000000000000 000000020202141414151515161616161616161616181818181818181818181818181818181818 1616161616161515151515151515151414141414141313131111111010100E0E0E0E0E0E0C0C0C 0C0C0C090909090909090909060606060606010101010101010101010101010101010101010101 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF1F1F17070701919191515150B0B0B000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0202020D0D0D171717262626ABABABFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6D6D65D5D5D 030303000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000505050505050505050808080808080B0B0B0B0B0B0D0D0D 1010101010101212121313131414141515151717171818181A1A1A1B1B1B1B1B1B1C1C1C1D1D1D 1E1E1E2020202020202222222323232323232525252626262727272828282828282A2A2A2A2A2A 2B2B2B2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2F2F2F303030313131313131323232333333333333 3434343636363636363636363737373737373838383838383939393A3A3A3A3A3A3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E 3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F404040404040404040404040404040404040404040 404040404040414141414141414141414141414141414141414141414141414141414141414141 414141414141414141414141424242424242424242424242434343434343434343434343434343 434343434343434343434343444444444444444444444444454545454545454545454545454545 454545454545454545454545454545454545454545454545454545454545454545454545444444 4444444444444343434343434343434242424242424242424141414040404040403F3F3F3F3F3F 3E3E3E3E3E3E3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3B3B3B3C3C3C3B3B3B3B3B3B3A3A3A 3A3A3A393939393939373737373737363636353535343434343434333333323232313131313131 3030302F2F2F2D2D2D2C2C2C2A2A2A2A2A2A2828282626262424242323232121212020201C1C1C 1A1A1A0A08080501010501010501010501010501010501010200006C6C6CFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000000000000000 000000000000000000020202111111131313141414141414141414141414151515151515151515 1414141414141313131313131111111111111010101010101111111010100E0E0E0E0E0E0C0C0C 090909090909090909060606060606060606010101010101010101010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFECFCFCFB0B0B0999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 9999999999999F9F9FB7B7B7E4E4E4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000686868FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFD4D4D4555555010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000050505050505 0505050505050808080B0B0B0B0B0B0D0D0D0F0F0F101010101010121212141414151515151515 1717171919191919191A1A1A1B1B1B1D1D1D1E1E1E1F1F1F202020212121222222232323232323 2525252525252626262727272828282828282929292A2A2A2B2B2B2C2C2C2C2C2C2D2D2D2E2E2E 2F2F2F2F2F2F303030313131313131323232333333333333343434343434353535363636373737 3737373737373737373737373838383838383939393939393A3A3A3A3A3A3A3A3A3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E 3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F404040404040404040404040404040414141 414141414141404040414141414141414141424242424242424242424242434343434343434343 434343434343434343434343434343434343434343434343434343434343434343434343424242 4242424242424242424242424141414141414141414040403F3F3F3F3F3F3E3E3E3E3E3E3D3D3D 3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939393939393939393939393939 383838373737373737373737363636363636353535343434333333323232313131313131313131 2F2F2F2F2F2F2E2E2E2D2D2D2B2B2B2A2A2A282828282828262626252525232323212121202020 1E1E1E1B1B1B1919190A08080501010501010501010501010501010501010200006C6C6CFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616000000000000 0000000000000000000000000000000202020E0E0E101010101010101010111111111111111111 1111111111111111111010101010100E0E0E0E0E0E0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C090909 090909060606060606060606060606000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000686868FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3D3D3555555010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000505050505050808080808080B0B0B0B0B0B0D0D0D0D0D0D101010 1010101212121313131313131414141515151717171A1A1A1A1A1A1B1B1B1B1B1B1D1D1D1E1E1E 1F1F1F202020212121212121222222232323232323252525252525262626272727282828282828 2929292A2A2A2B2B2B2B2B2B2C2C2C2E2E2E2E2E2E2F2F2F2F2F2F303030303030313131313131 333333333333343434343434343434343434353535353535363636363636373737373737373737 3737373737373838383838383838383838383838383939393939393939393939393A3A3A3A3A3A 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E 3E3E3E3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F404040404040404040404040404040414141414141 414141414141414141414141414141414141414141414141414141414141414141414141414141 4141414040404040404040403F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C 3B3B3B3B3B3B3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939383838383838373737373737 363636363636363636353535343434343434343434343434333333323232313131313131303030 2F2F2F2F2F2F2E2E2E2D2D2D2D2D2D2B2B2B2A2A2A282828272727262626252525242424222222 2121212020201D1D1D1B1B1B181818090707050101050101050101050101050101050101020000 6B6B6BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF161616 0000000000000000000000000000000000000000000202020E0E0E0E0E0E0E0E0E0E0E0E0E0E0E 0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0C0C0C0C0C0C090909090909060606060606050505 050505050505000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1D1D1555555000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000050505050505050505050505 0808080808080B0B0B0B0B0B0D0D0D0F0F0F101010121212121212131313141414151515171717 1818181919191A1A1A1B1B1B1C1C1C1C1C1C1D1D1D1E1E1E1F1F1F202020212121212121232323 2323232323232525252626262727272727272828282929292A2A2A2A2A2A2B2B2B2C2C2C2C2C2C 2D2D2D2D2D2D2E2E2E2F2F2F2F2F2F303030313131313131313131323232323232323232333333 333333343434343434343434353535353535353535353535363636363636363636363636363636 373737373737373737373737373737373737373737383838383838383838393939393939393939 3939393939393939393939393939393939393939393939393939393A3A3A3A3A3A3A3A3A3B3B3B 3B3B3B3B3B3B3B3B3B3B3B3B3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3E3E3E3E3E3E3E3E3E 3E3E3E3E3E3E3E3E3E3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F 3F3F3F3F3F3F3F3F3F3E3E3E3E3E3E3E3E3E3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B 3A3A3A3A3A3A393939393939383838383838383838383838373737373737363636363636363636 3535353535353434343434343434343333333232323232323131313131313131313030302F2F2F 2F2F2F2E2E2E2D2D2D2D2D2D2C2C2C2B2B2B2A2A2A282828282828262626252525252525232323 2121212121211F1F1F1C1C1C1B1B1B191919171717090707050101050101050101050101050101 0501010200006A6A6AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1717170000000000000000000000000000000000000000000101010C0C0C0C0C0C0C0C0C 0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0B0B0B080808080808080808050505050505050505000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000D0D0DBFBFBFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE 171717000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFC7C7C74C4C4C000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000505050505050505050505050808080808080B0B0B0D0D0D0D0D0D0F0F0F0F0F0F 1010101212121313131414141515151717171919191919191A1A1A1B1B1B1B1B1B1C1C1C1D1D1D 1D1D1D1E1E1E1F1F1F202020212121222222232323232323252525252525262626262626282828 2828282929292A2A2A2A2A2A2A2A2A2B2B2B2C2C2C2C2C2C2D2D2D2E2E2E2E2E2E2F2F2F2F2F2F 2F2F2F303030313131313131313131313131323232323232323232323232333333333333333333 343434343434343434343434343434343434353535353535353535353535363636363636363636 363636363636373737373737373737363636363636373737373737373737373737373737373737 3838383838383838383939393939393939393939393939393939393A3A3A3A3A3A3B3B3B3B3B3B 3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D 3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3C3C3C3C3C3C3B3B3B3B3B3B3A3A3A3A3A3A393939 393939383838383838373737373737363636363636363636363636353535353535343434343434 3333333333333232323232323232323232323131313131313030303030302F2F2F2F2F2F2E2E2E 2E2E2E2D2D2D2C2C2C2B2B2B2B2B2B2A2A2A292929282828272727262626252525242424232323 2323232121212020201F1F1F1C1C1C1B1B1B191919171717151515090707050101050101050101 050101050101050101020000696969FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF191919000000000000000000000000000000000000000000010101080808 080808080808080808080808080808050505050505050505050505050505050505050505000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000E0E0EBFBFBF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDEDEDE171717000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC3C3C3494949010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000050505050505050505050505 0808080808080B0B0B0D0D0D0D0D0D0F0F0F101010121212131313131313141414151515171717 1818181919191A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1E1E1E1F1F1F202020202020212121212121 2222222323232424242525252525252626262626262727272828282828282A2A2A2A2A2A2A2A2A 2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F 303030303030303030303030313131313131313131313131313131313131313131323232323232 323232333333333333333333343434343434343434333333333333343434343434343434343434 343434343434353535353535353535363636363636363636363636363636373737373737373737 3838383939393939393939393939393939393939393939393A3A3A3A3A3A3A3A3A3B3B3B3A3A3A 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A393939393939393939383838373737 373737373737363636363636353535353535343434343434333333333333323232323232323232 3131313131313131313030303030302F2F2F2F2F2F2F2F2F2F2F2F2E2E2E2D2D2D2D2D2D2D2D2D 2C2C2C2C2C2C2B2B2B2A2A2A2A2A2A282828282828272727262626262626252525232323232323 2121212121212020201F1F1F1D1D1D1B1B1B1B1B1B181818151515141414131313080606050101 050101050101050101050101050101020000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D1D1D000000000000000000000000000000000000000000 010101050505050505050505050505050505050505050505000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 101010C5C5C5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD1D1D15D5D5D040404000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000505050505050505050808080808080B0B0B0B0B0B0D0D0D0D0D0D0D0D0D 0F0F0F1010101212121313131414141515151515151717171818181919191B1B1B1B1B1B1B1B1B 1C1C1C1C1C1C1D1D1D1E1E1E1F1F1F202020212121212121222222232323232323242424252525 2626262626262727272727272828282828282828282929292A2A2A2A2A2A2A2A2A2B2B2B2B2B2B 2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E 2F2F2F2F2F2F2F2F2F2F2F2F303030303030303030313131303030303030303030313131313131 313131313131313131313131313131313131323232323232323232333333333333333333343434 343434343434353535363636363636363636363636363636373737373737373737373737373737 383838373737373737373737373737373737373737373737373737373737363636363636363636 3535353434343434343434343333333232323232323131313131313131313030303030302F2F2F 2F2F2F2F2F2F2F2F2F2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2C2C2C2B2B2B2A2A2A 2A2A2A2A2A2A292929282828282828282828272727262626252525252525232323232323222222 2121212020201F1F1F1E1E1E1D1D1D1B1B1B1B1B1B1A1A1A181818151515141414131313121212 080606050101050101050101050101050101050101020000696969FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF333333000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000151515D1D1D1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DEDEDE6E6E6E080808000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000050505050505050505050505 0505050808080808080B0B0B0B0B0B0D0D0D0D0D0D101010101010121212131313141414151515 1515151717171818181818181919191A1A1A1B1B1B1B1B1B1B1B1B1C1C1C1E1E1E1E1E1E1F1F1F 202020212121212121212121232323232323232323242424252525252525262626262626262626 2727272727272828282828282828282828282828282828282A2A2A2A2A2A2A2A2A2A2A2A2A2A2A 2B2B2B2B2B2B2B2B2B2C2C2C2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F303030 303030313131313131313131323232323232333333333333343434343434343434343434343434 353535353535353535353535343434343434343434343434343434343434343434343434333333 3333333232323232323131313131313131313030302F2F2F2F2F2F2F2F2F2E2E2E2D2D2D2D2D2D 2D2D2D2D2D2D2C2C2C2C2C2C2C2C2C2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A292929282828282828 282828272727272727262626262626262626262626252525242424232323232323222222212121 2121212020201F1F1F1E1E1E1C1C1C1B1B1B1B1B1B1A1A1A191919181818151515141414121212 1010101010100705050501010501010501010501010501010501010200006B6B6BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF727272000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000181818ECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000686868FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE8E8E87F7F7F0F0F0F000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000505050505050505050505050808080B0B0B0B0B0B0D0D0D0D0D0D 0F0F0F0F0F0F101010101010121212121212131313141414141414151515151515171717191919 1919191A1A1A1B1B1B1B1B1B1C1C1C1D1D1D1E1E1E1F1F1F1F1F1F202020202020212121212121 212121212121232323232323232323232323232323242424242424252525252525262626262626 2626262626262626262727272727272828282828282828282828282929292929292A2A2A292929 2828282929292929292A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2B2B2B2B2B2B2C2C2C 2C2C2C2C2C2C2D2D2D2D2D2D2D2D2D2E2E2E2F2F2F2F2F2F303030303030303030313131313131 313131313131313131313131313131313131313131313131313131313131313131313131313131 3131313030303030302F2F2F2F2F2F2E2E2E2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2B2B2B 2A2A2A2A2A2A292929292929282828282828282828282828272727262626262626262626262626 262626252525252525232323232323232323232323232323232323212121212121202020202020 1F1F1F1E1E1E1D1D1D1D1D1D1B1B1B1B1B1B1A1A1A191919181818171717151515141414131313 1212121010100F0F0F0F0F0F0604040501010501010501010501010501010501010200006C6C6C FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1C1C1040404 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000191919FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000686868 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1888888131313000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000050505050505 0505050505050808080808080B0B0B0B0B0B0B0B0B0D0D0D0D0D0D0D0D0D0F0F0F0F0F0F101010 1010101313131414141414141515151717171717171818181919191A1A1A1A1A1A1B1B1B1B1B1B 1B1B1B1B1B1B1C1C1C1D1D1D1E1E1E1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020212121 212121212121212121212121222222222222232323232323232323242424252525252525252525 252525252525252525252525252525252525262626262626262626262626262626262626262626 2727272727272727272727272828282929292929292A2A2A2A2A2A2B2B2B2C2C2C2C2C2C2C2C2C 2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2E2E2E2E2E2E2E2E2E2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D 2D2D2D2D2D2D2D2D2D2C2C2C2C2C2C2B2B2B2A2A2A2A2A2A292929292929282828282828282828 272727262626262626252525252525252525252525252525242424232323232323222222222222 2121212121212121212121212020202020201F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1E1E1E1D1D1D 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A191919191919171717151515141414141414131313121212 1010101010100F0F0F0D0D0D0B0B0B0B0B0B050303050101050101050101050101050101050101 0200006D6D6DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCFC0E0E0E000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000373737FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4 9090901D1D1D000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000050505050505050505050505050505080808080808080808080808 0B0B0B0B0B0B0D0D0D0F0F0F0F0F0F101010101010121212131313131313141414151515151515 1515151717171717171818181818181919191A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1F1F1F202020202020202020212121 212121212121212121212121212121212121212121212121212121222222222222222222232323 232323232323232323232323232323232323252525252525262626262626272727272727282828 2828282828282929292929292A2A2A2A2A2A2A2A2A2A2A2A2B2B2B2A2A2A2A2A2A2A2A2A2A2A2A 2A2A2A2A2A2A2A2A2A2A2A2A292929282828282828272727272727262626262626252525252525 2424242323232323232323232222222121212121212121212121212121212020202020201F1F1F 1F1F1F1E1E1E1E1E1E1E1E1E1D1D1D1D1D1D1C1C1C1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1A1A1A191919181818171717171717171717151515141414131313131313121212101010 0F0F0F0F0F0F0D0D0D0D0D0D0B0B0B0B0B0B080808080808050303050101050101050101050101 0501010501010200006F6F6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF5C5C5C010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000505058B8B8BFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DEDEDE171717000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF9F9F9A1A1A1282828000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000505050505050505050505050808080808080808080B0B0B0B0B0B0D0D0D0D0D0D0F0F0F 101010101010101010101010121212131313131313131313141414141414141414151515151515 1717171717171717171818181818181919191919191919191A1A1A1B1B1B1B1B1B1B1B1B1B1B1B 1B1B1B1B1B1B1B1B1B1C1C1C1C1C1C1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E 1E1E1E1E1E1E1F1F1F1F1F1F1F1F1F202020202020202020212121212121212121232323232323 232323242424252525252525262626262626262626262626262626262626262626262626262626 262626262626262626262626262626262626252525252525242424232323232323232323212121 2121212121212020202020201F1F1F1F1F1F1E1E1E1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A191919191919191919191919181818181818171717181818 1818181717171515151414141414141313131212121212121212121010101010100F0F0F0F0F0F 0D0D0D0D0D0D0D0D0D0B0B0B0B0B0B080808080808080808050505050505050303050101050101 050101050101050101050101020000707070FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9E9E9030303000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000161616E7E7E7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFDEDEDE171717000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDB2B2B2353535000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000050505050505050505050505050505080808 0808080808080B0B0B0B0B0B0B0B0B0D0D0D0D0D0D0D0D0D0D0D0D0F0F0F0F0F0F0F0F0F101010 101010121212121212121212131313131313131313141414141414151515151515171717171717 1717171717171818181818181818181919191919191919191A1A1A1A1A1A1A1A1A1A1A1A1A1A1A 1A1A1A1A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1E1E1E1E1E1E 1F1F1F202020202020212121212121212121212121212121212121212121212121212121212121 212121212121212121212121212121212121212121212121212121212121212121202020202020 1F1F1F1E1E1E1E1E1E1D1D1D1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A1A1A1A191919191919191919 191919191919191919181818181818181818171717151515151515141414141414141414141414 1414141414141313131313131212121010101010100F0F0F0F0F0F0D0D0D0D0D0D0D0D0D0D0D0D 0B0B0B0B0B0B0B0B0B080808080808080808080808050505050505050505050505000000030101 050101050101050101050101050101050101020000727272FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF454545010101000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 414141FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000686868FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB8B8B8 474747010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000505050505050505050505050505050808080808080808080808080B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0F0F0F0F0F0F101010101010 121212121212121212131313131313131313131313141414141414141414141414141414141414 141414141414141414141414141414151515151515151515151515171717171717171717181818 1919191A1A1A1A1A1A1B1B1B1B1B1B1B1B1B1B1B1B1C1C1C1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D 1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1C1C1C1C1C1C 1B1B1B1B1B1B1B1B1B1B1B1B1A1A1A191919171717171717151515151515141414141414141414 141414141414141414131313131313131313131313131313121212101010101010101010101010 1010101010101010100F0F0F0F0F0F0F0F0F0D0D0D0D0D0D0D0D0D0B0B0B0B0B0B080808080808 080808080808080808050505050505050505050505000000000000000000000000000000000000 000000030101050101050101050101050101050101050101020000727272FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2040404000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000141414CFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000686868FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDADADA6E6E6E0A0A0A000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 050505050505050505050505050505050505050505050505050505050505080808080808080808 0B0B0B0B0B0B0B0B0B0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0F0F0F0F0F0F0F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F101010101010101010101010101010 101010121212141414141414141414151515151515171717171717181818191919191919191919 191919191919191919191919191919191919191919191919191919191919191919191919191919 1818181818181717171717171515151515151515151313131212121010101010101010100F0F0F 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0B0B0B 0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B080808080808080808080808050505050505050505 050505050505050505050505000000000000000000000000000000000000000000000000000000 000000000000000000030101050101050101050101050101050101050101020000747474FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8D8D8D010101000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000030303525252FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE171717000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000686868FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F09090901D1D1D000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000050505050505050505050505050505080808080808080808080808080808080808080808 0808080B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B 0B0B0B0B0B0B0B0B0B0D0D0D0F0F0F0F0F0F0F0F0F101010101010101010101010121212131313 131313131313131313131313131313131313131313131313131313131313131313131313131313 1313131313131313131313131212121212121010101010101010100F0F0F0D0D0D0D0D0D0B0B0B 0B0B0B0B0B0B0B0B0B0808080B0B0B0B0B0B0B0B0B080808080808080808080808080808080808 050505050505050505050505050505050505050505050505050505050505050505000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000030101050101050101050101050101050101050101020000 767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF313131010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000001B1B1BECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E4181818000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 717171FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAAAAAAA 393939000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 050505050505050505050505050505050505050505050505050505050505050505050505050505 0505050505050505050505050505050808080808080808080808080B0B0B0B0B0B0B0B0B0B0B0B 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D 0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0B0B0B0B0B0B0B0B0B0B0B0B080808080808 080808080808050505050505050505050505050505050505050505050505050505050505050505 050505050505000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000030101050101050101050101050101050101 050101020000777777FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1161616000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000141414C4C4C4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2 171717000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFCCCCCC5D5D5D040404000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505050505050505050505050505050505050505050505050505050505050505050505 050505050505000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000030101050101050101050101 050101050101050101020000797979FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1E1151515000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000121212A6A6A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF191919000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000090909ACACACFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDEDE777777111111000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000030101050101 0501010501010501010501010501010200007A7A7AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0E0E01E1E1E 010101000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000141414ABABABFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF292929000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000161616D6D6D6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2999999 282828000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0301010501010501010501010501010501010501010200007B7B7BFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF0F0F04141410B0B0B000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000707071F1F1FCECECEFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E6E6E000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000191919FEFEFEFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFDFDFDAEAEAE3F3F3F000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000301010501010501010501010501010501010501010200007C7C7CFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1A1A1191919080808000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000010101151515696969F4F4F4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8C8C8141414000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000004B4B4BFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8D8D8777777121212000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000301010501010501010501010501010501010501010200007E7E7E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F68888881E1E1E141414000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000D0D0D1717175D5D5DE2E2E2FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1F000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000111111BCBCBCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3999999 313131000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000030101050101050101050101050101050101050101 0200007F7F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF C9C9C97575752D2D2D1C1C1C1616161818181C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C 1C1C1C1C1C1C1C1C1C1C1C1C1919191717171919192424245C5C5CB2B2B2F8F8F8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 9696960B0B0B000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000242424 FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFCCCCCC6666660B0B0B000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000030101050101050101050101050101 050101050101020000818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEF9F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFF9F9F91F1F1F000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 111111AFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F09999992C2C2C000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000030101050101050101 050101050101050101050101020000838383FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBBBBBB121212000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000202023D3D3DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC 5D5D5D050505000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030101 050101050101050101050101050101050101020000858585FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6969690A0A0A000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000001A1A1AEAEAEAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE7E7E7888888202020000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000030101050101050101050101050101050101050101020000878787FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC3F3F3F070707 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000151515CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDBBBBBB555555030303000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000030101050101050101050101050101050101050101020000898989FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F6F6F63D3D3D0B0B0B000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000141414BABABAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E4 888888232323000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000030101050101050101050101050101050101050101020000 8A8A8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFBFBFB5E5E5E111111000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000404041D1D1DCECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFCCCCCC6666660C0C0C000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000030101050101050101050101050101050101 0501010200008C8C8CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAEAEAE1B1B1B070707000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000141414535353F0F0F0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1A1A1A1444444010101000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000030101050101050101050101 0501010501010501010200008E8E8EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F47D7D7D191919 0E0E0E000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000303031616163B3B3BCBCBCBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF D8D8D87F7F7F1F1F1F000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000030101050101 050101050101050101050101050101020000909090FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF9F9F9AFAFAF4A4A4A1B1B1B171717151515101010121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 121212121212121212121212121212121212121212121212121212121212121212121212121212 1212121212121111111313131717171818182D2D2D7D7D7DE0E0E0FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFDFDFDBBBBBB5D5D5D090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 030101050101050101050101050101050101050101020000929292FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0CFCFCFBDBDBDBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBC7C7C7DFDFDFFDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF999999333333000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000030101050101050101050101050101050101050101020000949494FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFCFCFCF6E6E6E151515000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000030101050101050101050101050101050101050101020000969696 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCC3C3C36666660D0D0D000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000030101050101050101050101050101050101050101 020000989898FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7B2B2B2555555 060606000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000030101050101050101050101050101 0501010501010200009A9A9AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEFEFEFA1A1A14C4C4C030303000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000030101050101050101 0501010501010501010501010200009C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE4E4E49090903B3B3B000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030101 0501010501010501010501010501010501010200009E9E9EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5D5D5 7F7F7F242424000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000030101050101050101050101050101050101050101020000A0A0A0FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFCCCCCC6E6E6E181818000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000030101050101050101050101050101050101050101020000A2A2A2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF6F6F6C2C2C2A7A7A7999999999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999999999999999999999999999 999999999999999999999999999999999999999999999999999999A3A3A3BDBDBDEFEFEFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCC3C3C36E6E6E191919000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000030101050101050101050101050101050101050101020000 A4A4A4FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDBDBDB494949171717121212060606000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000050505101010 171717373737CACACAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FDFDFDC3C3C36E6E6E1B1B1B000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000030101050101050101050101050101050101 050101020000A6A6A6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF8E8E8E141414010101000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000131313686868FDFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDC5C5C57171711F1F1F000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000030101050101050101050101 050101050101050101020000A7A7A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF8181810F0F0F000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000B0B0B515151FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4D4D47F7F7F 272727000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000030101050101 050101050101050101050101050101020000A7A7A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFBFBFBF131313000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000F0F0F929292FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFD4D4D47F7F7F292929000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 030101050101050101050101050101050101050101020000A6A6A6FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE272727000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 181818F3F3F3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2D2D27F7F7F2C2C2C000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000030101050101050101050101050101050101050101020000A4A4A4FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCBCBCB141414000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000909099F9F9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DEDEDE9999994C4C4C060606000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000030101050101050101050101050101050101050101020000A4A4A4 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF757575010101000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000424242FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4B2B2B25D5D5D101010000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000030101050101050101050101050101050101050101 020000A3A3A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF494949000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000242424FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDBEBEBE9B9B9B808080787878767676767676 767676767676767676767676767676767676767676767676767676767676767676767676767676 767676767676767676767676767676767676767676767676767676767676767676767676767676 7676767676767676767676767B7B7B898989A7A7A7CDCDCDFBFBFBFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCC3C3C3777777 282828000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000010000020000020000020000020000 020000020000010000A2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 363636000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000001E1E1EFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE2E2E2797979222222171717111111020202000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000070707141414181818373737A4A4A4 F8F8F8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFDDDDDD909090444444040404000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000A2A2A2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF353535000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000001D1D1DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1E14D4D4D161616030303000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000C0C0C191919888888FAFAFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEBA1A1A15555550D0D0D000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000A1A1A1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 1D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE868686151515010101000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000B0B0B232323CECECEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF F6F6F6B4B4B46A6A6A232323000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000009F9F9FFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F43F3F3F0E0E0E000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000141414949494FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD9999995555550E0E0E000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000009F9F9FFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F02C2C2C060606000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000111111 7D7D7DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBC3C3C3 777777333333010101000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 9E9E9EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8323232050505000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000101010909090FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFE8E8E8AAAAAA5D5D5D111111000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000009D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5B5B5B080808000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000131313C7C7C7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCCCCCCC8888883B3B3B 020202000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000009C9C9CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF353535000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000001D1D1DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6B6B6111111 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000001E1E1EF7F7F7FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEAEAEAA4A4A45E5E5E1C1C1C000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000009B9B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF353535000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000001D1D1D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFA 1F1F1F000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000080808747474FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD9999995D5D5D1A1A1A000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000009A9A9AFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF9A9A9A0D0D0D000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 171717EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFDDDDDD999999555555101010000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000989898FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF232323000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000060606898989FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFCCCCCCC888888444444080808000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000949494 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFD3D3D3151515000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000262626FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F6F6 C3C3C3888888444444060606000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000909090FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF838383020202000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000171717EAEAEAFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F0F0B2B2B2747474373737040404000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000008C8C8CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 353535000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF393939000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000B0B0BB0B0B0FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F5F5C3C3C3 8888884C4C4C0E0E0E000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000888888FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF353535000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000001D1D1DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D1D1D000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000007E7E7E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFBFBFBCCCCCC909090555555131313000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000848484FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 1D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF191919 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000585858FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDDDDDD999999 5D5D5D1F1F1F000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000818181FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFE161616000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000484848FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDBDBDB9E9E9E606060262626000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000007D7D7DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFC161616000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1BBBBBB7F7F7F 4C4C4C111111000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 7A7A7AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFCD4D4D4A1A1A16666662A2A2A020202000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000767676FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000444444FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F1F1C3C3C3888888 4C4C4C121212000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000727272FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF353535000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000001D1D1DFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000444444FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFDFDFDD3D3D39A9A9A6161612A2A2A020202000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000006D6D6DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF353535000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000001D1D1D FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3C3C3C3909090 5D5D5D2A2A2A020202000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000006A6A6AFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC 161616000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFEFEFEFBBBBBB8787875353531F1F1F000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000686868FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFC161616000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEAB6B6B6 8282824F4F4F1B1B1B000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000787878 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE6E6E6B2B2B27E7E7E4C4C4C1C1C1C000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000A0A0A0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFECECEC BBBBBB8B8B8B5C5C5C2C2C2C040404000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000010101DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 353535000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000444444FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F8F8CCCCCC9C9C9C6C6C6C3C3C3C0E0E0E000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF353535000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000001D1D1DFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000444444 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEFEFEDCDCDCACACAC7C7C7C4D4D4D1D1D1D000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000BEBEBEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 1D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDEDEDBFBFBF9595956868683D3D3D 111111000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000626262FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCFC161616000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFE4E4E4B9B9B98C8C8C6161613434340B0B0B000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000383838F6F6F6FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF353535000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000001D1D1DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFC161616000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5E5E5BBBBBB 9090905D5D5D333333090909000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000474747F1F1F1FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3F3F000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000202020FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFAFAD4D4D4AAAAAA8282825959593131310A0A0A000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000040404747474FCFCFCFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E5E5E 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000303030FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000444444FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFE5E5E5BBBBBB9999996E6E6E444444222222010101000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000444444D2D2D2FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFABABAB0C0C0C000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000010101787878FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000444444FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEC7C7C79D9D9D767676 4E4E4E2525250404040000000000000000000000000000000202022A2A2A7F7F7FD7D7D7FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFF3F3F3171717000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000151515D7D7D7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFF9F9F9D6D6D6C4C4C4BBBBBBB2B2B2D2D2D2F7F7F7FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7B7B7B090909000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000030303 4C4C4CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC 161616000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9303030020202000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000001D1D1DECECECFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFCFCFC161616000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB2E2E2E 090909000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000303031C1C1CD8D8D8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8F8F8707070161616070707000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000040404161616565656EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBEBEB9898984848482B2B2B1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F 1F1F1F272727424242898989E1E1E1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000444444FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000444444 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCFCFC161616000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFCFCFC161616000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000444444FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000444444FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC161616000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFCFC 161616000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000444444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFDFDFD161616000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000474747FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF181818000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000005A5A5AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D1D1D000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000007A7A7AFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF313131000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000A0A0AADADADFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF737373000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000171717E6E6E6 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC4C4C4 131313000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 212121FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFEFEFE1B1B1B000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000303037B7B7BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF7E7E7E070707000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000161616E6E6E6FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F2F2181818000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000404045E5E5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9494940E0E0E000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000181818EDEDEDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE3A3A3A 030303000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000101010A7A7A7FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFEBEBEB1F1F1F000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000C0C0C656565FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFDCDCDC1B1B1B010101000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000C0C0C4B4B4BFDFDFDFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1E1E1232323060606000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000001010105E5E5EFDFDFD FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F44F4F4F121212 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000202021616169E9E9E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFBCBCBC242424101010000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000101011515154F4F4F E7E7E7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFEFEFEB5B5B53F3F3F171717111111000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000404041616161A1A1A666666 DCDCDCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F7F7BEBEBE868686575757 4141413A3A3A393939393939393939393939393939393939393939393939393939393939393939 393939393939393939393939393939393939393939393939393939393939393939393939393939 3939393939393939393939393939393939393939393939393C3C3C4747476565659A9A9AD5D5D5 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEED5D5D5CCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CCCCCCCCCCCCDBDBDBF5F5F5FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEAEAEA6A6A6A1D1D1D171717161616141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 1414141414141414141414141616161717172727278B8B8BF9F9F9FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF989898161616030303000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000A0A0A1E1E1ECACACAFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A7A7A101010000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 141414B8B8B8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFADADAD121212000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000171717DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F91D1D1D 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000010101454545FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF A6A6A60B0B0B000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000161616E4E4E4FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF454545000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000050505939393FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF212121000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 5D5D5DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000424242FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1C1C1C000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000003E3E3E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1C1C1C000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000003E3E3EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 3E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1C1C1C000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000003E3E3E FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 1C1C1C000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000003E3E3EFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 3E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C1C1C 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFF1C1C1C000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000003E3E3EFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFF1D1D1D000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000444444 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF242424000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000005E5E5EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF565656000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000808089B9B9BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBCBCBC111111000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000161616E9E9E9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFE2A2A2A 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000303035B5B5BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFD0D0D0161616000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000001E1E1EEDEDEDFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFACACAC141414000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000202021B1B1BD5D5D5FFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCCCCCC2424240E0E0E000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000001313133C3C3CE8E8E8FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDACACAC434343 1E1E1E171717141414141414141414141414141414141414141414141414141414141414141414 141414141414141414141414141414141414141414141414141414141414141414141414141414 1414141414141414141414141414141414141414141919192020205A5A5AC6C6C6FFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF end %%PageTrailer %%Trailer %%EOF �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/gnuastro.pdf�����������������������������������������������������0000644�0001750�0001750�00000437150�14557511161�015406� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.7 %Çì¢ %%Invocation: gs -q -dNOPAUSE -dBATCH -P- -dSAFER -sDEVICE#pdfwrite -dEPSCrop -sOutputFile#00.pdf ? ? -f ? 5 0 obj <</Length 6 0 R/Filter /FlateDecode>> stream xœ+T0Ð3T0�A(œËU¨`al`¬gl°040г0+100041661)Ó2WpÉç B�ñy úendstream endobj 6 0 obj 61 endobj 4 0 obj <</Type/Page/MediaBox [0 0 830.34 810.08] /Parent 3 0 R /Resources<</ProcSet[/PDF /ImageC] /XObject 8 0 R >> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <</Type /Catalog /Pages 3 0 R /Metadata 9 0 R >> endobj 8 0 obj <</R7 7 0 R>> endobj 7 0 obj <</Subtype/Image /ColorSpace/DeviceRGB /Width 1107 /Height 1080 /BitsPerComponent 8 /Filter/FlateDecode /DecodeParms<</Predictor 15 /Columns 1107 /Colors 3>>/Length 144444>>stream xœì œMåÿÇÏ3ˆ{Bø©¨ùYúY"Ù¢EÙeIú¡J’Hm´ü£M)ei‘l…˜,!ÂX²þ³š 3Üûš§yzîóœsî~ŸsÏ|Þ//¯3çž{Î÷>÷Üsž÷ù>‹Ãåri�������`k0������€íù�������ìÌ������``>�������ûó������ؘ������ÀþÀ|�������öæ������°?0������€ýù�������ìÌ������``>�������ûó������ؘ������ÀþÀ|�������öæ������°?0������€ýù�������ìÌ������``>�������ûó������ؘ������ÀþÀ|�������öæ������°?0������€ýù�������ìÌ������``>�������ûó������ؘ������ÀþÀ|�������öæ������°?0������€ýù�������ìÌ������``>�������ûóà’’’ÒÓÓsrr.^¼X¢D‰øøøŠ+^y啪ã�����óE—ŒŒŒ 6lÛ¶m÷îÝ{÷î=qâÄ… „mÇ5×\S¿~ýÎ;ßsÏ=•*UR*�����˜(Zäææ®Y³f}»víº|ù²÷îիפI“j×®º����@(€ù€"ANNηß~ûÅ_|÷ÝwD~ÙUñâŧM›6zôè`Å�����Â�ÌØœ-[¶¼÷Þ{‹/Px 0wîÜbÅŠqŸ����� tÀ|€=ÉÊÊúôÓO‰óìÚµ+D‡4h‘‡Ã¢ý����€ óvcïÞ½ï¼óÑžÌÌÌPkâĉ/¼ðB¨�����æl9“¿ýöÛ™3gþôÓOa;¨ÃáX±bE§NÂvD�����à0ñ8ί¾újêÔ©;wî ÿÑ+T¨°k×®ªU«†ÿÐ�����À{`> ‚!γpáBâ<ûöíSƽ÷Þûå—_* ������xæ"•Õ«W;ö·ß~SÈ_¬ZµêÎ;ïT�����0æ"b;ãÆûñÇUòMš4IHHP�����0æ"‰äädâ<óæÍs:ªcùùçŸ[¶l©: ����� ÌD—/_~ï½÷&L˜žž®:}î¿ÿþÅ‹«Ž�����èóÀŽ;†nñæd±±±ÉÉÉ¥J•R�����Ðæ,MNNÎøñãßzë- 6o“ùòË/ï½÷^ÕQ������`>ÀºlذaðàÁ‰‰‰ªñ–#FÌš5Ku�����@˜°"™™™Ï=÷\¤¤zM›6ݲe‹ê(�����€0`9~úé§~ýú?~\u >S²dÉœœÕQ������`>ÀB\ºtéÅ._¾¬:?III)_¾¼ê(�����€ÌX…ôîÝ{ûöíª ˆÝ»wׯ__u�����@æ,Á‡~8bĈÜÜ\ÕJBBB“&MTG�����D`>@1çÏŸ5jÔܹsU6nÜØ¼ysÕQ������˜PÉþýûxàßÿ]u AcëÖ­·Þz«ê(�����€Ì(cþüù>ú¨ÍC;xð`:uTG�����D`>@ùùùO>ùäìÙ³U|222Ê–-«: ����� óá&%%¥gÏžk×®UHð)_¾<ùtª£������:À|@XÙ¶m[=Nœ8¡:дiÓ-[¶¨Ž�����è�óáã³Ï>4hÐ… T*†úÞ{祈�����è�óaâÍ7ß=z´ÓéTHùðè: ����� Ì„œ¼¼¼¡C‡Î›7Ou !ç?þ¨W¯žê(�����€0ZÒÓÓï½÷ÞuëÖ©$äT«VÍ®ý—�����l�Ì„#GŽtêÔiÿþýª ƒ zÿý÷UG�����ôù€P‘еk׳gϪ$L|ÿý÷wÝu—ê(�����€>0–,YÒ·oßóçÏ«$LT®\ùäɓŊS�����Ðæ‚OQÆMàÉ'Ÿœ9s¦ê(�����€!0LÈéDàõ×_WH¸Ù¹sçÍ7߬: �����`ÌK—.=üðÃóçÏWH¸iРÁ®]»TG�����Ì€ù€à——׫W¯%K–¨DsæÌ2dˆê(�����€0rrrzôè±jÕ*Õ( råÊG‰‰Q�����0æ%==½S§N›7oVˆ¦OŸ>nÜ8ÕQ������À|@@œ9s¦C‡»wïVˆ®¼òÊãÇÇÅÅ©�����x�æüçèÑ£íÛ·?xð ê@”1f̘W^yEu�����À30à'ûöí#ÚsòäIÕ(£téÒÄúªT©¢:�����à˜ð‡Ý»w·mÛ6%%Eu *™<yòsÏ=§: �����à0à3ûöíkӦ͙3gT¢’ªU«&&&–*UJu �����À+`>À7 =”¹sç<Xu�����À[`>À~ÿý÷¶mÛ&''«D17ÜpÃîÝ»£££U�����¼æ¼eÿþý­[·F¶‡°zõjb€ª£������>�ó^íaôêÕkÁ‚ª£������¾óžö0Ê”)³oß¾ªU«ª�����øÌx€hO›6mNŸ>­:K0{öìÿþ÷¿ª£������>óf$&&¶jÕ*))Iu –à–[nIHHÀÀ�����‘ÌròäÉ–-[=zTu – X±bD{7n¬:�����à0 Orrr«V­öï߯:«0iÒ¤çŸ^u�����ÀO`>@‡sçεiÓfÇŽª± 7ß|ó¯¿þZ¼xqÕ������?ù�‘ÜÜÜ:lܸQu V¡X±b[¶l¹å–[T�����üæܸxñbçÎW¯^­: ñüóÏOš4Iu����� `>à._¾üÐC}ñŪ±7Þ²eËW\¡:�����0ð7äL2dÈ| : Q²dÉ;v\ýõª�����ó3räÈÙ³g«ŽÂZ¼ýöÛÇW�����0ð/½ôÒ³Ï>«: kѾ}û•+W:Õ�����€ �óÚ¼yóˆ3§bÅŠ»víºêª«T�����‚̧¨³fÍš»ï¾;//Ou Âáp,]º´k×®ª�����AæS¤Ù¶m[ëÖ­³³³Ub-FŽùæ›oªŽ�����˜OÑåðáÃÍ›7OJJRˆµ¸ñÆ·nÝ«:�����L`>E”äää-Z$&&ªÄZÄÄÄ$$$4hÐ@u ����� ÈÀ|Š"¹¹¹m۶ݲe‹ê@,Ç;ï¼ó裪Ž�����˜O‘ãÒ¥K]ºtY¹r¥ê@,G·nÝ–.]ª: �����`>EŽÇ{ìwÞQ…å¸úê«wîÜY¡BÕ�����€�ó)Z¼úê«O=õ”ê(,GTTÔ?þئMÕ�����€Pó)B|ûí·Ýºu»|ù²ê@,ÇØ±c_~ùeÕQ�����€ó)*ìØ±£U«V999ª±7ÝtÓÖ­[cbbT�����B̧HpêÔ©Ûo¿ýäÉ“ª±%J” ÚS¿~}Õ��|àÈ‘# ,X½zuRRÒ… Bw Ò¥KW¯^ýÞ{ïíÑ£G¹råBw ���a�æc²²²Z´h±{÷nÕX‘×_ýñÇW�À[Ξ=;xðà„„„ÔÔÔ°µÝ‰‰)[¶l¿~ý¦NzÅW„ç ���‚ÌÇæšA÷îÝW¬X¡:+Ò¬Y³7FEE©�à{öì¹ûî»O:åt:Ãô%JÔ­[wݺuñññá?:��€ÀùØœ‘#GΞ=[uV„TbvìØqà 7¨�àgΜ¹å–[þ÷¿ÿ)Œ!::ºQ£F›7o.V¬˜Â0���øÌÇÎ|üñÇT…Eyùå—ÇŽ«: �€·´iÓæ§Ÿ~R’íá)UªÔøÔ†��À`>¶eÆ íÚµËËËSˆiذáÖ­[ñÔ€HaçÎwÞygJJŠê@þ¢J•*þù'„�€ˆæcOŽ;Ö¤I“³gϪÄŠDEEmܸ±Y³fª�xËc=öî»ïZä†uå•W.\¸°S§Nª��à0’ݼys æfÄ!CæÌ™£: �€Ô«Woÿþýª£ø‡áÇ¿ýöÛª£���à0»A¾Ð|pñâŪ±(åÊ•;pà@… T�ðk®¹æøñ㪣ø‡Ž;~÷Ýwª£���à0»1a„©S§ªŽÂº¼ÿþûƒ R�À7ªW¯n©¹˜[¶lùóÏ?«Ž��€oÀ|lÅÒ¥K{ôèïÔˆ&MšlÞ¼ø�qÀ|���ÌÇ>ìß¿¿iÓ¦™™™ª±(ÑÑÑÛ¶mkذ¡ê@��>ó��80›••E´gß¾}ª±.O<ñÄk¯½¦: �€?À|���ÌÇ8Înݺ}óÍ7ª±.UªTٿٲeU�ð˜��€Àù؉'N™2Eu–fÑ¢E={öT�ÀOŒÌÇáp˜¼+t7¸ˆ3ŸÌÌÌË—/‡nÿ111±±±¡Û?��˜Oij|ùò{î¹ߣ mÚ´Y³fê(��þãŸùø3"Ì'''gÖ¬YóçÏOOO'ºcåççGEE]wÝu?þ8¹%…î@��0ŸÈæÐ¡C·Þzë¹sçTb]Š+öÛo¿ÝtÓMª�øOpÍGÆ×[¡õÍgÉ’%#FŒHKK»xñb8W­Zµ+VÔ¬Y3œÇ��o€ùD0.\hÞ¼ùŽ;TbiFõÆo¨Ž�¡6]Lî7Ÿ3fLŸ>hª�ªT©òÃ?4hÐ@U���  Ì'‚<xð| : KS¾|ùÿU�%æ£Ë•Íçûï¿ïÛ·ojjªÚ0ªU«¶sçN\~�–æ©|öÙg½{÷V…Õ™3gÎ!CTG�˜—äççשSçøñãªùk µ>}ú|üñǪ�€€ùD${öìiÚ´inn®ê@,M£F¶nÝÒN½�€ð�óñ’… :4;;[u Q©R¥ÄÄDL'��°0ŸÈ#++ë¶Ûn;pà€ê@, ©mذ¡yóæªÀ¶8Δ””+®¸‚,—(Q¢dÉ’¡;ÌÇKÚ¶m»víZÕQü 9%æÌ™ƒæ ��ë�ó‰<zöì¹xñbÕQX>}úÌŸ?_u�Ø â9¿üòˆ ¶oß~ôèQ¢"ùùùô%:¢ñ­·ÞÚ¢E‹x >>>¸‡†ùxIÍš5;¦:Šxì±ÇÞzë-ÕQ��ÀßÀ|"ŒÙ³g9RuVçÊ+¯Ü¿ÕªUU€8xðà’%K¾üòË;vxsˈ6lØÄ‰ãââ‚ÌÇKªU«vêÔ)ÕQüCçÎW¬X¡: ��ø˜O$‘ЪU«¼¼<ÕXéÓ§7Nu�D6YYY ,˜3gÎo¿ýæÇÛI|áÂ…-Z´J00/¹úê«ÿ÷¿ÿ©Žâ:tè°råJÕQ��ÀßÀ|"†ŒŒŒF=zTu Vç_ÿú×üQ¼xqÕ�©ìÛ·ïÍ7ßüì³Ïˆü²Ÿ˜˜˜/¾ø¢sç·óñ˜��˜�ó‰xàR‡PE°dÉ’=z¨Ž€ˆdóæÍ/¿üòŠ+œNgPvXªT©­[·Ö«W/ÀýÀ|¼æ��&À|"ƒ¹sç:Tu@«V­~úé'ÕQ�yç™0aB(†»ãŽ;Ö¯_àN`>^ó��`>Àþýûo¹åÌÞ㑨¨¨_ý•”•ê@�ˆ$víÚEœç›o¾ Ý!š4iÈL̇ÊOˆîe0Ÿ�ù��,ÌÇê\ºt©yóæ¤B¯:`À€}ô‘ê(�ˆÒÒÒ^xá…·ß~ûòåË!=PïÞ½?ýôÓ@öàÑ|Œðó ˜�ÀRÀ|¬Î„ ¦Nª:Š T©R w}Õ�äççá!Ú“‘‘†Ã/^<99¹L™2~ïÁoó1ÂË{Ì'@`>��Kó±4¿üòK«V­Bý8ÖLš4éùçŸW�ÀÚµkGµgÏžptÙ²e]»võûíA7Ý»!Ì'@`>��Kó±.ÙÙÙ 6<|ø°ê@"�r³?pà@©R¥T€¥9~üøÈ‘#‰„„ÿÐ#FŒ˜5k–ßoƒùȸ Ð} æã%0�€¥€ùX—!C†¼ÿþûª£ˆ >þøãþýû«Ž�ëât:ß}÷Ýgžy&À)züæ†nØ»w¯ßoWb>š±üÀ|¼æ�°0‹²lÙ²{î¹Gu‘A£F¶mÛ¥:�,Ê¡C‡†ºnÝ:…1DGGéŠõïí0/ù��€ 0+’””Ô Aƒ³gϪ$2X¿~ýwÜ¡: �¬H~~þ+¯¼òâ‹/^¸pAu,ÚŽ;5jäß{a>^ó��`>Vä¾ûî[²d‰ê("ƒ.]º,_¾\u�X‘]»v 4hûöíªù›ùóç÷éÓÇ¿÷Â|¼ÄÈ|H))¹ÝÃ|��–æc9-ZôÐC©Ž"2ˆŽŽÞ¹sçM7ݤ:�¬EnnîóÏ?ÿúë¯[jdÈñãÇû=F?ÌÇKL̇.„ù¦ó�X ˜µHJJ"õø””ÕD˜º�™uëÖ 2Ä‚ÃBöíÛ÷“O>ñï½0/ñh>ŒðÜýa>��Kó±hçæ=111¨Q£†ê@�° ¹¹¹“'Ož1c†ÓéT‹mÚ´Y³fïUe>F%ÙªU«Ÿ~ú)tÇõï͇ê:�Ì�`)`>báÂ…½zõREÄ0nܸéÓ§«Ž�«°aƇ~øÐ¡Cª1äúë¯ß¿¿ï­U«ÖÑ£GƒN@ôìÙsÑ¢Eª£ÐÁWóa„¨2�ó�X ˜U@;7Ÿˆ?|ø0ù_u �¨'33s̘1sçεøõ¼téÒ~Ï&ôïÿ{óæÍÁÇo¢££'Ož<~üxÕèà·ùP‚~ Á|��–æcÐÎÍ'f̘ñÔSO©Ž�õ¬ZµjÈ!ÇWˆW\¸p¡D‰~¼ñwÞyâ‰'òòò‚’TªTé矾þúëU¢C€æC bÅ�æ�°0K°xñâž={ªŽ"b¨Q£ÆbbbT€J²³³GýþûïGÐeüôéÓUªTñãuëÖMJJ zH~иqcëŒ.óa~jÁ|��–棞sçÎÝpà –š{Îâ|üñÇýû÷W�*IHHèÛ·ïÁƒUâûöí#ãß{_~ùå—^z)333¸!ùJ… ~üñdž ª Èàš%zÌ�`)`>ê4hЇ~¨:Šˆ¡~ýú¿ýö[tt´ê@�PC~~þäÉ“§M›f©¹z¼ä—_~iÖ¬™ï%w«.]º¬_¿>'''¸QyO||üÔ©S}ôQUx$æCñ¯¶�ó�X ˜bÖ®]Û®];| Þ³lÙ²®]»ªŽ�5ìß¿¿oß¾Û¶mSˆŸ|ÿý÷wÝu—ßo'²7tèÐ¥K—¦¥¥1*o æP±bÅ×^{­wïÞa>´O„Î|(¾Þ­`>��KóQÉùóç4h`åQh­Æm·Ý–Òé;�°&äZ=wîÜÑ£G+ÌxÎ×_}Ï=÷¸“Í›79òĉ/^$¥‘ŸŸ”Øt)Q¢DéÒ¥‹+Ö¢E‹7ß|“xEèŽBm>ïk0�€¥€ù¨äé§Ÿ~ùå—UGI¬^½ºmÛ¶ª£� Ü$''0à»ï¾SH |öÙg=ôPPv•žž¾sçΓ'Ož?>(;Ô%..®zõê·ÜrKñâÅCw” ó¡xS€ù��,ÌG»wï¾õÖ[Cú´ÒfXvÒt�BʺuëúôécAP>üðêŽÂ΄Ó|& ˜�ÀRÀ|Ôpùòå¦M›Zv\TkHßh�"‘üüü‰'¾òÊ+N§Su,Ááí·ß>|¸ê(ìŒóÑŒåæ�°05¼ùæ›?þ¸ê("‰.]º,_¾\u�„cÇŽõîÝ{Ó¦Mª &¯¾úêèÑ£UGag`>��`ÌG§OŸ®[·®òY)"ˆ¨¨¨;vÜ|óͪ L,Z´hذaçÎSHyñÅŸ}öYÕQؘ��˜�óQÀC=Dª5ª£ˆ$|ðÁ… ªŽ€ppñâűcÇΚ5Ku !a„ S¦LQ…11&?¡¸ïÃ|��Ì'ܬ^½úÎ;ïTE$½gÏ¿ç} ‚8vìØ<ð믿ª$T<ùä“3gÎT…©V­Ú©S§äõªr>;w^±bEH ��Þó +yyy7ß|óþýûUI 4èý÷ßW�!gÙ²eLOOWH>|øÛo¿­: ;S³fMâϪ£ø‡¡C‡¾÷Þ{ª£��€¿ù„•)S¦Lœ8Qu‘Dñâů¹æÕ�Bòòòh 7Û_<wî\ÕQØ™víÚ­Y³FuCD÷á‡V��ü Ì'|>|¸~ýú!tÏ~<òÈ#ÿ÷ÿ§: �BȱcÇzöì™ :p0pàÀ?üPuvfÑ¢EC† ÉÎÎVÈ_TªTiÏž=+VT��ü Ì'|têÔÉS°‡$|€íY³f̓>˜’’¢:0ѯ_¿yóæ©ŽÂÎäççשSçøñãªùkLÎûî»ïóÏ?W��üÌ'L¬X±¢k×®ª£ˆ0ðöfΜ9ÿýïIUUu á£wïÞŸ~ú©ê(lÎÊ•+ûô铚šª6Œ«¯¾zÇŽ•*UR��ðÀ|ÂA^^^ýúõUI\qŨU«–ê@�>çÏŸ6lØ'Ÿ|¢:pƒêÃÃÌ™3§M›–––¦*€Ê•+óÍ7·Þz«ª���@˜O8x饗0yŸ¯`D `W>ܽ{÷ßÿ]u ¸ÿþû/^¬:Š"ÁÒ¥K{ì±ÔÔÔ‹/†ó¸eË–­V­ÚòåËk×®Îã�€7À|BΩS§êÖ­k‘þ¦‘>À®|ÿý÷½{÷¶÷ÐÕ&ôèÑcÉ’%ª£(*äææÎš5kþüùÄ¢¢¢¢££Cw¬üü|rˆë®»näÈ‘DìC=}��øÌ'äôêÕ ­;|eÈ!sæÌQ�Á„\l_yå•ñãÇ;NÕ±(£[·nK—.UEQ$33óòåË¡ÛlllLLLèö��AæZ6mÚÔ²eK²O áìGVVÖÀ‘îèܹóŠ+ß©ÄïܹsÕªU«W¯NLLÌÉÉÉÏÏÜ+mTTTñâÅË•+× ARD<ð@É’%U��6æBœNgÓ¦M·mÛ¦:s›qðàÁîÝ»ïÝ»Wu áC·©¹ÙtìØ1ÀÁý‰çLž<yéÒ¥çÏŸ·köÌápÄÅÅ;v̘1!m¢��E ˜O™3gÎ#<¢:Š `3–-[Ö¯_¿ÌÌLÕ„•h‡#JZyÙåj{ç«V­òoŸ'OžìÛ·ï¦M›ŠÎ8àÅŠ{ê©§¦N%'���Ÿù„Ь¬¬k¯½6))Iu ¦x¶ÁétNš4éÅ_,‚—Y#óùO›6kÖ¬ñc‡³gÏ7nÜùóç-â(S¦ÌO?ýÔ°aCÕ��@Äó ãÇŸ6mšê("Œèèè½{÷^ýõª P²²²z÷î”>-‘ˆ‘ù´úÏÖ­[çÓ®.]ºtÏ=÷|ÿý÷vmÛæ QQQ¯¾úêã?®:��ˆl`>!áĉuëÖÍÍÍUH„ñÀ|þù窣� PNž<Ù­[·;v¨DFæsGëÖk×®õ~?ùùùÍ›7ß¶mnU‡cÔ¨Q¯¿þºê@�� ‚ù„„‡zhÑ¢Eª£ˆ<¶oßÞ¸qcÕQ�›7oîÞ½{oé”ÖnäöÔ®]»uëÖá>E!ò3qâÄI“&©��"˜OðIHHhÖ¬ ÖW:uêôÍ7ߨŽ€€X´hÑÃ?\4»£ð™O›ví~üñG/wBªø“'OƵ”'::zÅŠ;vT��D$0Ÿ CʳeË–›6mRHä±aÆ-Z¨Ž�?!¿ý Pˆ%|l·}ûöÝ|óÍEg7ï¹òÊ+9R¡BÕ��@äó 2Ÿþùƒ>¨:ŠÈãŽ;îX¿~½ê(�ð“ììì>}ú,[¶Lu V!pó©S§ÎáǽÙÒáp°ÿCJ¨o—Þï?XÂ�@QæLòóóëÕ«çåÝðüðÃíÛ·W�þpêÔ©nݺmß¾]u ÂÈ|îìÐaåʕ߾nݺvíÚyÌ­X±b>MtÜû](îždŸäS{Üs‰%vîÜY·nÝ ���öæLfÍš5jÔ(ÕQD5"µÆ0<² èlÙ²¥{÷îgΜQˆµ02ŸöwÝõý÷ß{|;©Ó8pÀd"<D{ðo‚u ºS]¾|Ù|›.]º,_¾<ˆ�€¢�Ì'hdggשS§ˆèä_}õ©;ªŽ�Ÿùüóψñ dŒÌ§CÇŽß}÷ù{SSS+W®lRõ–öÈ冬»ê¥K—L^-S¦Ì©S§J—.”c�@æ4žþùÉ“'«Ž"ò¨W¯Þž={|j²€rèxyÌ#ó¹ëýö[ó÷¾ýöÛ#FŒ0*X‡ÃQ¼xqºlŽ7!z»¹þ-^¼øÞ{ï ä��PÔ€ù‡¤¤¤:uêdgg«$òøè£  : �| 77·oß¾_}õ•ê@¬‹‘ùtôbðúÛn»mÛ¶mF¯íñØ26D÷µ@vëß{‰ù˜¼ñÁ\¸p¡ß!yÉ… Ö­[·dÉ’_ý5==Ýétæåå…ú !åŠ+® §P™2eêׯOÔ±}ûöñññªƒ�„ ˜Opxì±ÇÞyçÕQDU«VýóÏ?Ù\�¬Ojjj·nÝ0r½9Fæs·ƒ’‘*iVV–îK|ÂÇW,2¼¯o4ióV§Nƒú†7>|ø¹çž[»víùóç333Cw …ÄÆÆ’óíú믟6mÚ¿ÿýoÕá��BÌ':tè†nÀ¼~0}úôqãÆ©Ž�oILLìØ±ã‘#GTbuŒÌ§s×®Çþ¾âŠ+ŒªûÑÑÑAìá¬ÛŸß!ÉÈ÷ó)W®ñpÿmNZZÚ£>ºnݺ”””"RI([¶,ñŸùóç_wÝuªc�„˜OèÙ³çâÅ‹UGy\yå•Ç‹‹S�^±iÓ¦nݺ…¨®i3ŒÌ§[÷î[ ‘0êßB¤(¤}Ù ‘H~•x—ùÛÉ^ÞR…ÈÞ%¬'"db>äzîܹ Šùã?öïß?99Ù|ˆ[R¦L™gŸ}vìØ±ª�„ ˜O üþûï 6ô8ïyòÉ'gΜ©: �¼â믿îÝ»7†qó#óéqß}_|ñ…‡÷FG]Q‹/Λ÷/]¥Ñ ¬†Ë\·äW©…G׳ÏÈX~Tº——gä¥J•JJJ"ÿ›Äæ+3f̘>}zZZZ÷Y3¡mÛ¶ß~ûmˆÆ�¨æ(]ºtñØaÈúÇ¡C‡jÔ¨¡:�<óæ›oŽ=8¼ÇÈ|îïÙsÑ¢EÞëµù!Ü×Ûá%‡- »e‰~Ád¸9Ýeóðèg,ˆ-³| ‘m#ó)]ºôÿþ÷¿+¯¼Òã½dÒ¤IäTÏÈÈÖ#ò%6hÐ`ûöí³|�€ˆæ[·nmÚ´)ÊÐúôé3þ|ÕQ�àRé|â‰'fÏž­:ÃÈ|ìÕkÁ‚Þ€ùð’#T[嵿*t½°ÒÈdøË¾Q·ߌ}"WÂ~øWéŸÌ.\¸`Ôê,¸æ3wîÜqãÆ¥§§eo‘ù›4i²eËÕ��‚ Ì' î¼óÎÕ«W«Ž""Ù±cG£FTG€¤ÒÙ¿ôâó#óéÝ·ï'Ÿ|âá½>šl;Ìyxoáņ߉ì?ŽøCØ—†ÙÃ¥Ÿ‘üÏV’–bò“››k4ŠtÍç÷ßoÛ¶mrrr໲ äK6lFmÀfÀ|ügÆ ­ZµREDBŒqÕªUª£�ÀŒÔÔÔ{î¹gãÆª‰HŒÌ§ß€}ô‘‡÷z2£ÄYæÅFæ3ä9½C³é6rÓ<™œáþt"¼‘®dòC[µ±5´²³³Cm>ä¸7ÞxãÌ7 ÖP Të çÉúõë[¶l©:�@ЀùøÏwÜñóÏ?«Ž""!ÚCäGu�räÈ‘Ž;&&&šofÞ‘½(cd> zÿý÷=¼×À|Hi—*UŠTF©íb§ Ìpx¥áEX)$|Ø–² G7‰Y~U°Ýæ<tKb üºœ••uñâE݃Ë|Þzë­ñãÇÍ¡¤ÎÐOjÒ†ÿîøJBo%ö§Å'„ §\ZZ&À6À|üdåÊ•¤b¤:Šˆ¤Aƒ;wî úH¬�‹Í›7wíÚ5%%Å|3ÝÊnÈ‚Š0ŒÌgÐ!sæÌñð^có)S¦ 5¡qs^r¥á× ’ÿ*/Ó¯Õä’eò½óþ#÷ðazÃ÷ö!ÿ+`¯!¹pá‚î΃b>—.]ªU«ÖÉ“'6 <&&¦X±b´Ø½ïNî×$â@¹\�ÿ^.ÄšÇ]‘<bĈ7ß|3XG�¨æã¤Ðš4i²mÛ6ÕD$}ôÑ€TG€>_}õUŸ>}<Ž^í_=¸è`d>C‡ {÷Ýw=¼×À|HU;..ŽfxÕa2U€¦—óaÙŒtHnêøÓ9çÃ÷êáûùð‚ää kÎ;RóYºtiÿþý333u_%…@ŽBÊœNïˇïÝ$+à{šqŽH×…Âæ?±±±¤œ1õ�ö�æã+V¬èÚµ«ê("’J•*;v,&&Fu �èðÉ'Ÿ 4ÈãŽÞ×ùŠ,Fæóèc½õÖ[Þkl>åË—gIYx„„nG^ÏïŸ-ûT¹÷˜óaËšTÝç͇y]O3?!5“fÛŽ‚æ…Å‹/V¬+a¡ˆîí?åÏÎ|Ù|5âuH·u\xä‡|¨gŸ}vÊ”)Á:�@!0hÒ¤ÉÖ­[UG‘<ÿüó“&MR�:Ìž={Ô¨QÞ´~ñi·Eókd>ÿ9ÒcÃ!ó©P¡K>°Z8ýŸnÀËŸä1iÇþçÓ>£ú½€Ä`ðªÃÖý|hß­pS¦@Ì|Î;g” Ü|È!ªU«væÌÝW‰óCPíl“/sKÔµ ¾óa…& s§›¢¬Ÿ˜É~ªV­zòäÉÀÓ€��åÀ||æÛo¿íܹ³ê("r=vìX•*UT€ÈË/¿üôÓO{ÜÌïªOQ»Ò™Ï¨'žxíµ×<¼×Ø|ÈÕƒTÄéŸB¶‡UÍIQó+5½„PY—-Hó÷+“sš{…žúŸäa™ºÁ¥K—øê~FFFèÌgçÎíÛ·×ÌšwÅW…,§ÎtS@º¥Ç_&|)Éy!V>BO!>Dßà` &ß8)äM›6Õ¯_?ý�¬�ÌÇgn¿ýö„„ÕQD$ýúõ›7ožê(�pƒ\GýÆo˜o”ǽEçzkd>£ŸzjÆŒÞkl>W]u^L@NG8ôÆy3IøÐCÈUyŠüÅ­Ñmß%d9øÊ½‹ä€”Ôã‰ù°õäÏôôôЙÏgŸ}öðÃëŽG¾…øøø%J°¢`þÃ+%ý8BCAöIùb’<ä%!WæâÚû±õ šÓ8·tq³i äâ×ü!£_(‰vúôécÇŽõu‡��«óñ éf‚Ç¥¿þúëm·Ýƈ�ð�©e2äã?6ß,¸­\ŠÂU×È|ÆŒGjÞkl>U«V¥YÁyØyäMÊíÎ#g~¼A¨ ›ü¯Ióöh\ži?°]I-(¤æ3iÒ¤^xA÷¥ØØØ¸¸8ÚÔÍUØnio;r9³õüŸB™_1Ÿ%Rd¼êhœáÐ"öÉŒQ+T ŸüÇä·Inýß}÷÷»�X˜o´lÙ3Êè>Ø E‡é€¥¸xñâC=ôõ×_›o\íá±Áå—ŸTÔ R‘•ì…ÔXŸ?~êÔ©æû42²þꫯ¦9^udÿ‘Ѹž<r懡[ƒ7BHïh¦ Ä׿…QÝø™”””Йψ#Œœ »¥cˆ «Ió#ñ/ ðëù¬[Ã/Ú#Œy ëà“ü ,Äò?^ZÉOòÚk¯õ8Á�ÀúÀ||`ÕªU:tP…µïvFgÔ—_~yï½÷†>"�¼";;»{÷î«W¯6ß,tÚȸ‹°`;ü¤–ÿtC70ŸgŸ{nòäÉæû71ŸêÕ«+VŒÉ€e!„Ñøúº«pèÙ…èž…ÍŒp \ÆÐMõèÊEžº”å|xóÉÍÍÕ'pó2dˆîIJނ©“Èži²!%´ÂÖnºÉŠQÓËÿ‰"_VüJ§4Ó‘`8‚)Ñ!yÔ܇Oà'2R “c5Ž;f\–�€È�æã-Z´Ø´i“ê(¬‚nÁètºæšk:ĺ& –äääŽ;nß¾Ý|³0hÃÊ—b^uxÏ‘ÿü§ri`>Ïy1º£‰ùÔ¬Y“Î-C+ß¼öÐ tS=r’ÇèO­°Ž®ûuðé ùU£T枦àÿ:«ÈÚC çªó)[¶,Ù3Õ¹y!³ £²öÆ‘°l”ùá{ EÇDHÈù°¾•0R‚ÉÙšéÏðꫯ6™ï�)À|¼eýúõ­[·V…%0©N3fÌxê©§B�>púôéöíÛïÙ³Ç|³pjÃRdYxøYDi…’ïÚ®ñ#n‘ eḩX±b´.®qCºÉý|4ƒA„?ÌG8´Ç6ÐuÍ8çÃg-X5Ýå>˜5³ ”””œœÝ‚ µùÐÖnÔ'·4r9Õ£{\£öÆyíÄÆåë.¥v r¹÷§Ò| æ€=€ùxK‡V­Z¥: Ř×Î¥’%Kž8q¢\¹r¡ �8räўÇ›o¦D{j/ËTxäÜ?[¨VPw”µ‡ýŸñ¢‹›€… ùç¡æ#LéÃ7~£a;$\ÜÜ>&i ¶±n`|:HH_˜kæÞ:ËÄ|´‚V[®Â†p4ç£Ä|âããÉžY†ÍÁµ'ºýeÈ|Àï• Ýbþ”RW~„DêqJˆó Äü'//Ϩ¬`>�ؘWìܹ³qãÆE¹¬¼©•ϰaÃÞ}÷Ý`G€ÏìÝ»—h©,šo¦V{a¾àðÂÃçv(ül¡t Ÿó‘»aä]¸à,èwÁ¸ùÔ®]›õóá͇o‹¥¹Oï£[/—…GXð¾¦nTG—ø,„ =tA˜ÏG¡ù”-[–‰%+O¡I¡Æy¦Kêü#ìSÓ3~½®:2áÖË $”$¿ 3IÙ”ÈMømÈ‚Ñïæ€=€ùxÅ}÷Ý·dÉÕQ¨Á˪€É‰D¼ñæ›o^D�øÃ–-[:v옑‘a¾™E´‡êë3kÏ&?~�Ý@nÎ$Waùšè…ÜÜP˜Ï¿þõ/! ¡ÛÔMäMøü²KØÀ=r-\Ó“!Û£+?¼ùΞ=«Ê|âââó,H.RÍý$1QJùÜæµ‡_Û [/ Ie«q°âehzß)ù‹/Â|�°70Ï8pà†nнÛ_ê®oÞ¼9ÆÊÙ¼yó]wÝ•™™i¾™¥´‡¢«´äá³%×y]7["GŪ§4¡AÌç²4|VṖõóa¶ã¹fðC½ÉŸ‚ÿº}Mû¸Ü³=š»ÞÈÙ ~Ó½/>«‹Ó:ºȨ\¹rÄ|î£çéÊ,“l'‚njÆÍ5½2¤¥ÇÞb’öá ÇåÞì–³Vø°>?¹¹¹0�ì ÌÇ3ô8Ñ¡ýðµ ht"}úé§½{÷FD�øÉ/¿üÒ±cÇÕF¯ÕÌyXþD+T Ád7ÍG¨nRr³³Ca>uêÔ¡æÃ¢•ëâìSÈ­Ýäz¹¬@>!ø 9BÏMJbðiæ<1ŸòåËÇÇÇ;Ü»÷èvõ1‘M7¤¨eóá×ðº(¦fpòÎÖiË7­°“¿ ¹JÀ|�°70œ8q‚ÜkMz=Ú?*FgQ… HÆÄÄ�~âöXÜyx¹bËIùá½P£ö Ôbùz¿Ðv(tæC>…ó1ÉB˜›ð½? \zy M2~õ¡ç«æ‚ùй¥ÌG×vø2פô ¿àâfRb…fTÎF¥ª¹¦œäáÏ—”ðÑÜ ‡–3ý:ø,ÝæÜ¹s0�ì ÌÇ#GŽœ={¶ê(ÂDà>ž~úéiÓ¦�±iÓ&¢=YYY&ÛDö0|ºnµjc£˶£+?BA±ê¦ð”Vßs²²tÍgÂĉ/¼ð‚yÀ&æsíµ×ò9¹Ÿ¯püÑŒÓ>FСüùº¸¼  Ií¯X5™ÆµÂRn>¼$;ÜS@&žé’i.®?•\Ô¼äè®d˺ÍÛ„vqM ]ÜŒ±ü)J]ˆ uM—ÓÓÓa>�ؘä"X½zu£»Ž¤ògt ‘ûâ¡C‡jÕªå÷ž»jÃüêÍ^ ´j£Sf>²íÈù“£ ‰ ZeÏÎ̼$¥ÊÏùx4Ÿ(÷±Ø‚f0Âÿq¼9\R^B3ž·ÇÈøZ¸ÐK0BRR’̇93-RyÒXÝ“‡_v¹·v3’£ÖÜEHhÒ¦Iƒ\ Îç|XÙò¾ÑDPZZÌ�{ó1㥗^zöÙgUGZ¯ùB]ºtY¾|y€;À?l¯=£_m¦éµj#æ q¸é6o‹Ò›’Å¥—èÐ «¡l¤fúgfFFˆÌ‡|4ZóÖÈùÈæÃ^Ý£ËðîçàF^êâš4:ßS…OûÐÿ-e>Ñ…ð嬞Wææ#ÿÏJÌä§'ŸÒº&©qƒ¶É†)È+LMêÛÃËO~~>1£oæ€=€ùB.‚µk×¶÷•.(5?£Sè»ï¾#UÏÀ÷€¯lܸñî»ï¶½ö0ØoP·'«¤FÎÇ¢qc8Ü»jÐýèŠÿKwq+œtÍ_ý%ÒÓuÍ'ðÖnÌ|îNdÛ1Ry½Œƒë—â±.Îo&Žæ^#gUv²¦:ük|ÅPÕÚ­B… qqqlÞX9·f¢=¼9;¤$Ë=½&H‘nikzÅë*l«&›3IZÎ|bÍUØÚM+´ ¶A^^Ì�Ûó1ä“O>éß¿¿ê(BE°ª}Fç‘ƃF¹Oñ@(jÚÃ`ÍÀ˜ðÐz']É>2ÙŒUýå$ …_ÀÅ%:´B’+ñÄ|ò/^" ©ùðòæMþÁ{óaŸÝ! ¾ÌVjR¥œ/4¡iÍ …ÆjäIII¹¹¹ºA†Ú|Ê•+GËY0¶† ¼¬žçð4Λ\òš»1±d婘Û_àdùÒ¥K)))0�ì ÌÇÆÿöÛoª£>Á­ó?¯¼òʘ1c‚x �¼aÆ D{²³³M¶±™öðýyH¥“úoL 4.Õ£ICr Vͽ äÚ§Sê¬Â?\ÏHK ©ùPãóºæÃg4®îâÆ“$¬4©ˆ»¤t„&iPÿÖ [Ç Æ¨ŽpÀêåÎÂÔš®^ æÃ—v”{Ï1¡HùÞt=“/Ca—ï?ºÚãtoíÆŠšùO~~>Ì�ÛóÑgýúõ­[·VEð ö/^œÜ!*V¬Äcà‘uëÖuîÜÙ¨šH±“öÈÓò8 Ç-`SMêê£y1i¿ T7Ù_ewI]&ÒSSuÍçÙçž›<y²ùçòh>|û=or>r\ÐáR&+¹ùx”¡FΗ!ídïäºý¨5ÚχO!ÊÅnd˜|±ûTø “OwOÉå,(“ëUÅÎ^²œ””óÀÞÀ|ôéÚµëŠ+TGLBQá3:yxàÏ?ÿ<è‡À„Ÿþ¹S§NE'ÛC€vÚ¡ æ<ü¸[rUUãžÐ V éµMr¹?ng²Î´N)´Ô22Ÿ�s>×]wÍùð}^á ™£Š¸ §–ËÄ%å"ØHšdD<B¹ñ"Ä÷¿§í¯”˜OùòåË•+å>¶Ëꘘì?lŸüÿ’‘lhz%ïä†ÖË™·¶ž_Ã<Gã’l®‚ da>�`>:$&&Ö«WÏäZY„®¶gtò¬ZµêÎ;ï ÑA!ÚÓ±cÇ¢íáÇ0`@þ¤òÃþj¥B=Usož$ÛŽ®ùÏÝ™êhÜä3¬Z™‘––wá‚|à9j>ŽÂqøt„&µ³TG®pÁ§#ä̃l;ºYÝ?…b¼¹¸,+I«™Ryo>²öhz§™Œ,ŸÌ·…ÿùÔ3KH:ÜûV±“–-äççÃ|�°=0†þî»ïªŽ"8„_{jÕªuèС(Œm�ÂÅ®]»þóŸÿddd˜lcíáó<r•”™�_+upéÍ}Äjݺ©€P¹d?|¾m›Kš2=55æsíµ×/^ÜáÞáÄÁe{„®IFgþaMJ@“RBÎA“$‡­d¥$l&ä"XÝÅåˆùœ?^7°ð˜=£ø†7ªµÆ g”4™üÈß‚I…Ä£ùð%ÏxÍ«ŽƒêMèUEs>gΜ ºùœ:ujÉ’%?þøãž={233ó¥~ƒùÄÆÆÖ®]»U«V÷Ýw_£FBt �"˜HZZZ5l0{i¨«zFgΔ)S&L˜ÒCÀHLL$·ù¤¤$“ml¦=¬m«’²?µ‚Ú§<—ø'†æé¼ICÈNðCf¥¥¤„Ô|ü‡ÕÜuN·æíëÉ [FÿË š¤CB²b¤‡b©2¢=D~ä±ÝäŽUò ¦{š±=ëþ/².FÅË^TG6W¡ÀóæÃt˜ÏéÓ§ƒh>äÛ6lØ/¿üb2Ajˆ([¶lÕªUç̙ӢE‹p�ëó™:uª *‡Ü ÿüóÏêÕ«‡ôè�PNœ8AîëÇ7ÙÆÚ܇Z 3¡V*ôÁà&Ñÿ]ãeU=ṀU1ùÜ…Kj£ÅW"S““Cd>t†þÓñý|Øg”͇âRšT‡f/ •l¹|™ÞÅw51r!¡Fîr‚Œü¯Ö|øæÇIçU‡ÿ.HüFm5÷Â×ý"Xš¬÷ø?ŸIsºçF·á[¸ñ‰Êüüü3gÎPó”ñÕ|¶lÙÒ£G²C…µ,ò >ùä“Ï<óŒª��° 07l0{ixêyF§M—.]–/_†��8{öl«V­8`²M¤kà<T{tÛ¶ñ-ŽøÎèò³y¶sáOº½\ÑêñŸ|Û!~ƒ”³gÃf>rÎGðöyù½¥\…ã) … ÿMÏ‚øÆºòë#ÛÞQÐ"‹9–ššªÄ|âããI½™/K*:¸#¯ÖºÂ),óû×ô”[ˆ-Ëß…®”²ReÿkîÐóqJý|‚e>‰‰‰-[¶$×(/·qqqS§N>|¸ê@�° 07"}öÒ°ÕóŒN›eË–uíÚ5<1€¢LFFFëÖ­wîÜi² _•8ø«Ù=¬o/?º³L: Ç�`+ùªª‹KþhîP¡6¯I þÉ:߈èr!ææ3~„)S¦˜vó©S§míÆpààúù°Oä0˜´GXN!Û T²…•&ÿ;Ýû¢Èj¤¹ÂÌœ‡­a%™žžnóqpÉCÞ«î9Mš*ŠëWÆ/x”]ó1*pþO§{ï)­@u<š!///(æCŽR¯^=ó‡2á¤bÅŠ¿þúkÍš5U€%€ù¸¹³—†Íy4ãªd•*UŽ?ÎæU Däææ¶oß~Ó¦M&Û ë_ôøTOTÁ¬QÒ[²óDq“®h\wsù©¼VXéçKI·X\îýïùJ<?ÂËù0ù ‘ùÔ®]›š›ÉT÷ÓQ„?ÙÔ=1øW…-åÏ®If¨»Ì¯qr#€kœ ñy!'7P+XUæGäGÎ1ò ¤é%®Â–oò—"/œò/W¶S]_uãt+Ü%å*éb>§OŸÜ|/^<tèÐsçÎy³q åÙ¹sg4Ç�€óù‡µk×¶mÛVuþNíÑŒ+ŽãÇŸ:uj8#ER;éÚµë?ü`²M”/C ZêÈR=ˆÕLu„I<ùaÜ¢84óѤ§ìlÁ) \ÆÖëÖ&u͇6Ó ùÔªU‹˜?a‘Ã=ç .‡”d\E@Wfá·äʼn÷9 $Ø¿%K£‘ÿ322T™Û-ŠÏZàÔp„sL0ò£Ÿ™šûW#;¿ÞÈ|øsÕÅõLsrûË|Z´haþ\&üT®\ùèÑ£111ª@=0ŸèÒ¥Ë7ß|£: ß³óPtÏIbbb:uÂ(:JIÏž=—,Yb²üÌØ'^uG2` “vnšÁÀš4Ö™¦×Ü‹®á«æšTGפü0u)“ÚA%9))èæCÖ×®]›µýãÛV9 V±OÍFyW|¶ÁÄ|\\~FØÒãKÂNÔ=4¿ +ÕsçÎ]J’Ró)[¶,1&™×…Œý)œ]QÒ`Öl—”Õ‘=ÜÄ|4éÌÔ]öÆ|\î ¾Á[~~~P̧jÕªd?Þl6Ê—/¿bÅŠfÍš©�õÀ|þæÐ¡C×_½îíÖ²XG{mÚ´Y³fM˜ƒE òóìׯ߂ L¶ P{Âyy$ÚS¼xq^räTl>Bƃ7ù¼fP­tt©g™¯ÓkîJ¾jNs;üt²†e~ŒÌç™gŸ}ñÅÍ‹ÂKóqf´ÂW”{oMºH‚Æè®×¸Ô£°Cް™\zš{‘ 2jçâÆ<ÈÌÌTb>eÊ”r>Bk7íÑ$åN<“ÿ̇bôi棖3?ÃàêìÏ ôó!_VÍš5uÇÙ×½:ùz½’/JºN(óÉ'ŸÜÿý> �[óù›1cÆÌœ9SuÞ¢Äy(F'̼yóH­4ÌÁ€"ÅO<ñÆo˜l\íÝ¥’µp+Q¢?Œ›®öÈóöðUO‡ÔÝ\s7Íôê!×àù?îÇù]…Ó¡°ÚdˆÌ§V­Z¬ ûPì“Fyjå(øžI5šâ,xÀ¨X4É[ø5ü>™ÕkXÙ ÛÐÿIIfee‘¹îÇ ©ùÝÆÇÇëæ…<º¸Qõ„WÙžR3Íëa4ãïKPáO£teÐÍ'%%¥~ýúd?òKDÚãââÈÿZÁ¯žoïF8¹>`ô#h…#7ÐõçÏŸ'Òet™"Ç"_ôÃ?ì1~�lÌç/.^¼X½zõäädÕx…µ§T©RäBOnÃaŽžyæ™éÓ§›lRíâe“ŸŸThØ&[\•“<Fæ£yªPR„*#[´‡¯2º¤œÏ_óož={Qêó¡�YzG–:¹>Í0y:Î>){‹¹ŸÛð•lùUÝø<ÿ^¶žVjU™ÙyÙ²eå9L夢n ˆí‡_Ãe¼±’Þ¨³Ã]Y寃—ºÞ¨µ›3£Z›˜ù±W©R…š¨C+|„¡q $C#ÔÜG¥#Ò_ùŸ,ó9wîÌ�À|þâÓO?íÛ·¯ê(¼B¡öhƾþýûüñÇá!^yå•qãÆ™lNíðûJS=¤Äƪ–ó<¼üÈUO¾%’CjƒD«Sï¥ËÏËYeQxvî”`ý|Bg>5kÖd£ºi^4äó9Wc”½á§ñùyo«Fi ¶o;ÂÙÙÙ¤F®yHͧdÉ’Ä|¢¸‰b…3ùè:Qk7MϽå/Î%´nb>š±U h…9­`>%J”¸êª«hÒ’B‚á{ëiÆ™9`º’ÉÌ�/ùü…Gb‘Që<£³eíÚµ­[·s0 ˆ°páÂÞ½{›\©jO×R£T£p¼f“ñÜíq¸Ã‹=–P>|ÕÊ(}ÁË\_41–ö ‘ùÔ¨Qƒ5’ëÓìóšï_ðþOÙ|ø?Y˜/yçl™ÿr¾ˆß¡¼=ÛR­ù°“J÷¬ÓôN<Þˆ\…M£¤á7øCk^˜Eþ*5)çCŽÅŸºüßb3<æsÍ5×Ð2¡>Xê’•ªÑn„ÉONNNzz:Ì�À|´?þøãÆoT…¬\±#u‘?ÿüÓ¼2�þ±nݺŽ;^¼xÑh‹h€ùu• fU0Œ“Z§çgïqpc¸±:¢<Cz�O¤k& ÏËÙseój`lÍÙ3g‚Þχ|@RqŒ*ì[W{<ÞÑä\¿†ÖzåLÂßñö© êŠ ¿%ð‰tãÔ5œÜÜ\£ºxHÍ'66¶L™2¼ÒÈCê ™ þTÔL›º±w™H¬7æ£yJûhz3Æ%èØnºçž 󉉉!·KšŒ%å>8a”ioÚ¤ÍÅ,¢qßòòòˆ!§¦¦Â|�ðÌG{ì±ÇÞyçÕQ˜a‘ŠÑ©ò¬U�üà÷ßoÙ²¥É„€ÖÔáWÃZ¸±d©ŒOþ˜˜s~Aãj™ìOÖÔG3¨JêV5÷®>|»Ù|ØÐXô‘9{‚¢ÈG«^½:K…Ñ•ÞKÆå4=ù¡ÈbÃ/xTM*X£ŒîÆ2ªÌ‡TÓ‰ù0µvNÚ£ÛÚMÓÌÍÈy„—„…¨Âaø`„Ø„hå oò׆S÷æí4çjó¡ù^ÚÛ‡•'3y#s’?$ø¬¬¬ääd£àa>�0Šºùdgg“ËYff¦ê@ô±T­ÎèTÙ·o_ݺuà °=þùç¿ÿýoÝ #‚2äçcÔÂMÉ€¶vã;öÈIæ<²ù°$ûÁšø!ÛF7çÃ'„ú–`>|%ÌÜ|žöb¾có!—k6ÂE2¯ ³5¼ùðÛ8¥fiš{ÞFx#Å\itcðcK%æ£$%ÈžRûIv:¸|#“MO4÷“ONº Ç%×ÝRã¾YyÇèLf+áq¹'-µ‚¯›Žíóá»ú°bä;æÉ8Ý›êÑV "ç!YIÌ')) æ€GŠºùÌ™3ç‘GQ…>¡=Íš5ûå—_ °=©©©-Z´Ø¿¿É6¤=×±‡@—Yk7¦7Â`Ö|•(Š�Š—‡ÔâȨ⨋‘ÑÜ«\‚ö8Ý;ˆ3í¡ý|Ba>U«V¥Ëò�ü'â×PXþ꟤„ƒÊzãÇM3Re>ä[(S¦ŒVØÈM3^c…=y„†—QR—3¾e—‘;i…ÃhîgµÑ)í(œ–ŠOõhî§7;{µgà×°~>!5Ÿš5kÒAM4.áÃí kä7òyWª=ü§`æcÒTæ�£¨›OãÆûí7ÕQè`)íÑŒïÜï¾ûî°aà°7çÏŸoÛ¶íæÍ›M¶‰DíaòC´‚:¥ÑÔ=l@-öl˜b‹¯Y ÕGÝçY<šŸöᇱv6o“s>´‚‘ùŒ{æ™—^zɼ¸L̇ ̯”·ÞΛƒÐWGÀhüh]|½{úç? ͧT©RtýÏüD6þ<äm\ö"]4ƒ!à\>ŽùÆ7eÔ=±ù˜ž·Za;Frê†Í|ø„Ô5Ú³Kê\§¦ªÈÿ™™™äd€ù�à‘"m> ·ß~»ê(D¬æ<Ýó„\ÇÉ¥6>>>üñ�»Bδ^½z-Z´Èd›Ò6K)kâB;ö°ª/6ü‚l>B-S·â¨I dŸÕÑ]jŠNw\î{"ÿ§&'=çC>QÅŠi²Oa´Þ„½y©7>ÝC´1ÙR•ùbccµÂs˜Â·ÈbIHT]3èðï¶aoÔ¤a¯µÂkòy.ãàÄž•0Ëðç3ýórá$¼ì¬ÎÏÏ7i0ó©]»6íæÇmò³u9¸® ˜ÉÆ áܹs$<˜�)Òæ3pà@«ÍBAÚC¸ÿþû/^æ`€½;vìŒ3L6ˆ8ía3ö°ñ Ø>ÂãÞh÷Y}XmZ{èîÐ{ÖNžŽkÆ?^Ao4®¾ÈŠ» ‡;*ˆBó6Ö‡_id>ä|˜ù˜¼×©7Ò´fÚ'Ç›› éš lœ““£Ð|ä³H!WÁŒ4—íq¸§}t]ÝUнÇä-š»ÿ°,“‰Òëšæ.öNnôÖǹ}ØÌÇè U8˜„îGc¶F3«ì'I†ù�à=E×|222È…,77Wu ÿ`MíÑŒoÏË–-ëÚµk˜ƒ6æƒ><x°É&õ«Áš´•(Q‚ïÛÃ,ÈÄ|S÷hÓ§ðeÂ?)çã‘ÿô&Õ£ôó:ù8¥~>i))¡0ŸòåË›˜‘Þ×[¼Ü[°jó1Š“Y=9…÷ø³TС‰f”{"×Â÷"Wáü<ºÑF¹zÁ§}4½ž¥MØÙó¹öÚkI¡1óa¿n~üFÍà”à͇ÿÑÁ|�ð‰¢k>o¼ñÆO<¡:аl}Îè ‰?}ú4©Õ…9`WÖ¯_ß¡C“–H§=¬y³>ó£ÔÕX>GÎöè¶sãÍG“ÚÑ£ëVžt+‚üŸN÷1¯„'å|æG'×ɇšOFZZÐ͇ ä|HÏ[X°Ô%< dó1Š")=Ûå“S>Ÿ/âÏmú.ÞväÔ{‰OûÑ b¯¹À’'Ä[Âc>T…ów9¸¤.ÿxdóqäZa>�øDÑ5Ÿo¼ñ?þPÅ_X¼2gt†[æœ9s °+äÇØ¼yóŒŒ £ "N{XžGÐÖÉGp^~´ÂçâB¶G“*Žš{¥Ðc=UHòh’ù8ÝGþ•³=Bƒ7£´Ozjj¾4ÿlàægÞÚÍ胸±ù6ÁU a3K™n„º/±tKE¹çæàwñª/˜¼àEš»DÉ+uCTGã‚ãÓ˜ÄÂl>BÊ×ä÷ëâšžò‘ÓŸ‰<==ýøñã0�<RDÍgݺumÚ´QÅ_X¿2gt†¬]»¶uëÖaØ’äääfÍš>|ØhƒHÑ~<j8lâ~6¼ÆU}xùѸoÙ=„Ñ“r†î3c~Ù)üË ‡_pJÓž°•üì¥N®Ë›]ž Ö|̺x¿Mà%oiAóÑ|/úÓ /±Áâx¥×Ü­žý@4wÒ “BtW‚#™„ÄŸQ™ïâ:̤¦¦ªÍùD»Ïêà SþyÂ|�ð"j>>øà矮:ŠÖžªU«’‹l´éÌk�xÃ… þóŸÿ$$$méÚÃ|†—‡Ô¾_ÏÚ!õðѤG຅ãà:ùÈÍ~œîC]éšœóa¶Ãçø¦nüÀnäÿŒ´´KRÃEb>cŸ~zÚ´iæ%ib>ñññ‚ùøw Š¢„G²³³U™OÉ’%zî~¼D×Ë¡hnÖ ]·rŸê‡"üØJ£ã²³ZãFüc§4ñ‡´´´ð˜ûáóæãЛϔe{4÷o4rbk0�|¢(š¹´‘ŠûEéyd˜‰ˆÊœÑéñÄO¼öÚkaØ’>}ú,X°Àd£ÍVC˜´§X!,çÃ`À§zøæ.,çãpoüãàÆpR=rùÈÙá]X‡oÝoºæÃò<®‚þ¼üdfd„Ç|tñ龸¥¢@7Pn>æAþoA®‚‘âX»8AïuH~ ˆîS�æ?ìä§ÿ‡Ú|j×®Mþ'>‘Ÿ€È§7Ì€àRÍgöìÙ#GŽTCDhf|ëúõ×_o»í¶0ìÇôéÓŸyæ“ "Q{ØT{øTÿ”WО(÷ñRGp!ó£4ò~³ò£n“TË Ÿ?‡©óáûùP ¢ ”™yYi-læ#ãå.@ …YÁ|Ì#ôï%y½Ü"Nso'˜æ>.Ûn"TF8óéḂŽjM?l”4º£nK ¤&uõù�à+EÑ|n½õÖíÛ·«:z¤8f|Çú׿þuðàÁú Àš¬\¹²sçÎFµ:-bµ‡5rãGrã±e æ#´m“›ýÐÃ=ÛÖÜŸj³§õÞhË}bGþ%¾ ›V8ÎßÍÀéÞç‡.äde…Â|Ê•+gôPÜ'4ø­@ò«Ö1ÝðBôY/´ˆ†>Ó “Brw ÍÝŽŒŽÈØ ÿט„á1^x„!OtwK£âÇvÓ Œ0�|¢È™ÏÞ½{oºé&UG,[0:7&NœøÂ /„9`3öíÛ׬Y³sçÎmàåƒ[åð#¹ XóÎ#d ›öá͇—v8íÑ óÕ¸ù=™ɹ~ Þ˜ùð"Äkÿ'k5”Kêëá2]¼¿µnAAÉxm`)ób ÊKÞ¬gèØza º^΋jîc8 ;¹ Ga'6¹"…Á|Xk7Á|4i„†<¡°V˜ ‚ù�àEÎ|ÆŒ3sæL%‡ŽˆjѹAìñ†ns0ÀN¤¥¥5mÚôСCFDŠöhu2R•a½–™í°?…¦üQܘLoøvnìÙ¶`>®‚Á5½žÜÂclá!íÃ×™œÒHºkøÖnÂ>|ÿÖç‡üȮü-”U8ÍG ˆ"žz?{Ղ棩ù­ñòÚÃiƒµãwÎÎíÌÌL£`‚b>5kÖä[»Ñë=¥…–�‹Pã:ãi…iŸð˜9ÐŽ;Nœ8A>c û1§D‰•*Uºù曫V­º£€¢LÑ2ru¨Q£ÆéÓ§ÃèH©Æ1ŒNŒ† þöÛoa؉üüüöíÛ¯_¿Þh“Û¿¯„ôúFë.´Ã´‡oÁ/ä|ø‡Ö|æÇáè&Ùó²:&æã4…Ÿº‡nOµ‡%Ž.äæº¤ú:ym̸qÓ§O7/Xsóa äï=çyÌ7ðõ%“í‰ù\’’jó)Uª”#4c»e½ns8–ùѤ9OöÌ+)íP›©Ù“xÈuƒF%ËÉÎùGZаV¦Ä|B7“éþýûû÷ïOnýì÷îß~¼„”9«+W®<uêÔ=z„ôX R´Ìç»ï¾ëÔ©SøqÚ£ßoH­eܸqa؉Q£FÍš5ËèÕ j7ø}”Çpcãðþ#'|¢Üû4óÜØŸš4o&]F„î=FæÃ» o>Nn¸Yuè¡ßÇ€Oøð:ĺ]<^“*a¡3Ÿ¾Ù@$ÇüÕÀ+úÊÍG7*†B/V²ƒ]@ØÃ£04îg¢<=þ|HͧF4EÌwü‹rŸÂXw·TAÙI§Ò¢Bd>dç={ö\ºt©ÑžC 9·7n¼bÅŠ@Nr�Š–ùðâÅ‹Ã|ÐHÔÍøtðàÁ:uê„9`,XЧO“ Œš¹‡ó £¬=B;·¨Â |…Ót˜é–¼ù誎°l-Ÿáa ¼ü8¹Fn‚ùËòŸN÷VmünlS1tù²Zó‘‹(X[†¡®Ï¯ÌÊÊ2iíFjØÄO cõ„—æcªß/…t=ß$’¿¤µ|Ó ;Ò„Ô|J”(Q½zuÖ8–¦§øç ¬›Ÿ¯’jVà'Ä|ˆ×|rrrˆx›¾ÂŠ")Ÿzõêmݺ•x£ª€Í(Bæsîܹ«®ºŠ\×ÂyP›išº@صk׿ÿýïÜÜ\£ <6öPÿ£ }{øl ›vYæçíazÃø†mô]¬3/?šÞt%æñYáO7”°FÈù£Wëf@+[.nHk!D«é—óó圗æCJƨ®OªæßŽ7x¹½ÂT[™™™iT%æC^ ä'ã“ùÅé÷K!]ÏVʳ¦mLNì¼¼¼Ð™¹hT­Z•Ôàù™LíÑý6©9õò´¬•)©áœ>}:ˆæCöÇwlܸQy-‘”[÷îÝ-Z¤6 `Šù¼ûî»Ã‡Ûá,[ó£³bÊ”)&Ls0À¤¥¥ÝvÛmGŽ1ÚÀÊÚÃCµ‡‰ Ÿÿa+™ÛíÜxùaæÃûæ^F©áÊçvdùá ‡­29.½&m¼ð°õº#ðΓ_0¤[TÁ?/͇©Qû.R÷²Ý‹O·¶@ò<æ¯úêa¤§§í¼|ùòö5÷Õ|(V“£õÂJÝl!Õ!Ö}% æCš°ž~|ÎG3híÆÌÇé>¤ÿKÌÊÊ ®ù|öÙg È—FhTBŊ׭[wã7ªØ"d>·ß~{BBBxŽ8ŒÎŠ?þø£^½zaØ�r?îܹó÷ßo´A˜»÷ø Ëöð Ûh¶‡ŸÆ‡åyxbz#×uÒ¤TƒëhΆŒùŒ`>ºÏ‰ó‘×IŽÆuªæèz¾’ˆùÄÇÇgddè¾D §R¥JÞ|S2AÉó˜oôz<mÌèpuêÔ9xð a ^àŸùh~‚ÉKû¡¯ëZÑ“éÅ7rÐ*UªÐkëÕ#dƒÍ+..ëtowJÌ')))ˆæS«V­£Gz¿}¨éׯ߼yóTGì@Q1ŸÄÄĺuë†çÃÚU{n¼ñÆ={ö„9`žyæ“úniMòðª#ŒçÆ7l3ÏùDÌÛ¥73£& E%ÿ)˜Ó½?KêÛ£‹î,¥|g:W©Ë½y›ü`ØÈ|ž;öå—_6/çvíÚ­Y³ÆèÕ *Xdx·0TñIuÖ(ýE8pà‡~h¡GÌͧtéÒ íÈJ#LJ;(æCÎÞØØX6ê£V(?üHº»åG8`òí΂™ˆ’““ƒe>{÷îmÞ¼¹É|ká§FÇŽS°EÅ|Æïq‰ éÚ£ß'0)ð¯¿þúÞ{ï5:¯…3Ø„ÿ®{111T~„Q øKé2Ÿó¡JÃ7ëgËZ¡õ =|Øu{YðYÍÔ|X+5öªÏqIýytG,p¹÷ê¡ò£Iyž@ÌçóÏ?衇Œ¾#Rz^¦}¼ÿ–Éó˜¿HÅ”-1£=“ÓfÅŠwß}·I`ñÆ|äÀx"B~LÖ „Á|h[Yò¿V¨:ìY‰Ñ>Yk7kó¦q Xšó ¢ù|ôÑGƒ6Ú›*W®|úôiT±€rŠ„ù_oÍš5Oœ8êÙã7itJìÞ½›\Ðà ˆt>|Ë-·˜<;¤wýp†äÝŸ€<ªØ@Õ€ïçÃçy4n‡üA½1VâåGÓ3Ávä6oBWÁˆèzºÀwéÑ%ó!;/Q¢„I»£ØØØ¸¸8óÈDJk7ºò²é¬š„2eÊœ={Vw¼ïñÒ|L¢5)âä'¤æC® åË—çg=Ö Æó —WÁPoeƒÿ]°Ÿ- ;;;;55Õä“OæóÜsϽøâ‹ºûѽ\{ßQ÷%o æsàÀ²eËúúF�Š„ù¬ZµªC‡¡>ŠÕjoþat>\{íµ‰‰‰aD:.\hÞ¼ùŽ;Œ6° öèB¶‘Z&Ÿía¾›ÐÏGnÍÏÿ¯éÍÛÃcb>|n‡Ïê¸ °æûð¸¤FnlâgáðPN÷A dò&ÕÃÄ|­ZµÚ°aƒÉä» •H¹p¼Ç›í•¤z´ÂlùÑ{õêµ`Á“ ¼Á'óÑ"¿{Ç/=pó!úqÓM7™©¸Sá‰ææ¢—o£0;¢ÛÓæùóçMÎò=~ðÁôfÿ„Ñ£G¿þúëºû‰§©3y£°œ½¤°õôÒAòòòÈÂÅ‹Éÿ¾´[©R%b>~<ò�@ H˜OïÞ½?ûì³""joÞ`t>Œ?~êÔ©aD:C‡;w®Ñ«&Ú-ß½‡oáÆ’<‚ù°¬?’A´ûì=|k7zÁ|äKЬ=rÎGP>É#ä|h]„åsœî#ëÉÿ¤.î1ÏàùüùçŸuêÔ1þMŠˆÔ#cccýè…ïë–þ)ëI™çää˜Ô¿)Dü<X½zuóÍ<â«ù°8Þb$ò¸ù=T«V-))I÷U£œ‰æK-Âè#˜ü^J–,ùé§ŸvïÞÝËC˜˜O… ¨ùÐk ]Ï_ÉYÎÂùaé¥#@ÿù€`aóÉÌ̼ꪫL¦ Ûhf|IݶmÛ-·Üæ`@D3þü~ýú½ª¤{°A«iÝ$ÐÚÀ¥z˜ù8nS—Ò£Ðeòë3¶,¤wØzæ6l^c\î-ÜX×ׇ%vt]È›<‘ù<9fÌ+¯¼âÍî¸ãŽŸþÙ«c¹w2BáÍγbÖêÍû÷ïÿñǘæ£Eˆüøº± ó!ó9uê”7[† ¢+ß~ûm“&M¼ÜÞÄ|ˆÐ‘åùGWºÏ°øŽIL{˜1ÿñR~`> XØß|æÍ›7`À€ÐíßNÚ£ÜjÕªe2 �2{÷îmÚ´iNNŽÑ|3 +C»÷0í¡CºEëÁüGÈóÈ{äœð$X°ºàä¦ò`òöaÍØx ­¦kÈ.¢Û¶¦wxçѼNõ07ŸŒŒŒÊ•+Óêà)[¶,©‚- |WææC*¸¿Æv‹\ù ŠùÜsÏ=Ë–-óf˰qÕUW?~Üû«®‘ù W•*UJ–,i¢=¬•¯Ðì–þ–ýnüóÁÂþæÓ±cÇ•+W†hçEA{´‚‹à«¯¾æ`@ä’M´ç?þ0Ú ‚º÷ÐQ ¨ùÐÜ‚`>|o>ùÀçy„Ž=F­Ýä�øæ+B'7’¿’¥}xóaÛ˵9 Çs»ÌA«)Ôyh,_‹.pó!,_¾¼{÷îæmÞŠä4Û´i“÷ïÍñÆ|4›vïÑ]óÙ¼ys×®]œd6ˆ QŸ>}|Jš˜‘(rbDÎÄ*(ýµ²z塯Ã1JþPùÑLýæ‚…ÍÍ'55•üJC4 qDTÝ|ÂèdX»vmëÖ­Ã ˆ\úõë7þ|£Wº÷(ÿA ç?ß½‡·¾Á[7ž›0{ЪW yH“6E®Âî=N÷ÑÛ„e¾U›02¯=|:ˆ«ïÏÃ7oóûad>£ŸzjÆŒÞïg̘1¯¾úª½ïSÞCΓÿû¿ÿ:th°vè¥ùP¬–ü …üÅ|mÛ¶ýùçŸýxd *W®üûï¿W¬XÑû·x4:§ß²—ߌiÿ?­‰ÉÉj;3?0,ln>sæÌyä‘GB±gåµ´P {2”+W.)))RÚ&å|òÉ'ýû÷7z•=)´8ô¾NÛ¹ENàãåxnÂ`‚öÈÙÍÓxl Ké°?žæça†ãÔ®å|xÛºôøwJ·2xðà?üÐÞ·*o 'ÉôéÓÇŽÄ}úd>ZŸ`™OFFFãÆ;¦<cY¾|ù ø:¼­7æ% Ó¯”'Ÿ'äs>ì! ëùCs>Ôyhæ‡æ…tC‚ù€`asóiÛ¶íÚµkƒ¾Û¢£=„>}ú˜<¿€çðáÃä~Ÿ™™©û*ùáDŠBÓvnävN[»ñÜä¶mü¼=Fæ£Tø´8#óa}{ØŸ—õf&Zµ i^Ø2ÉúR.n¢Ý$¹¯wŠ`å|(“ ¸l<Ãí!'ÕÂ… ï¿ÿþàîvÔ¨Q³fÍ2zU6ŠÍº÷ð+ƒe>„3gδk×îÈ‘#¾ß,È¥†ØÂG}t×]wùú^ó!å@N a(þ<á;ùð×1áºD¯<Zù°foäÞó¡ÆÎæC®;ÕªU úÍÒ–Ú£ß?/^ôÛ-°%¤ÆÜ²eË„„£ èÔŸá É?X;7j8L~„œýSîÛÃÜFníÆÖ GÔmSÄZ²iܨn‚ùiݜӶžJKõx99©O7‹àšVÐwâî»ïÎÈÈðã½ 97®ºêª-[¶>†µÌ”)S&Nœhôª‘ùh¶ëÞÃ~e&Rðu>tòkš={öÌ™3Ï;Òfȵ«lÙ²wÞy'±—Ê•+û±æCs>|Ë^¶ ÍêË9ö°FHþМ]™ššjôÀ|@°°³ù¼õÖ[#FŒî>#¢Þæºg©ó%''—)S&üñ€ˆã©§ž2 ƒ øc}bbbäÁ¬å‘¬Yª‡Ùó€UX xÝî=šA¶G@30^{dÛqqýyù¹¬7€›—ý!½¼eÝ|´‚‰qŸ{î9ra' þí!² ç9IÕyРA!:Ä_|ѧO£ôJ—.MÎgÛ·pc+ùjºÌ5×\sôèQ£WM {Þ¾}ûîÝ»7lØpúôéÌÌÌPd/ÉÙRªT©òåË7iÒ¤Aƒ­Zµ"'ß{31b€t>V¡C#Û†^îóŒiîsŽ1ùÑ ~×Za·Rß0J»Á|@°°³ù´lÙrãÆAÜaQÓB‡B72°?üðCÇŽN¤HéÞ£qÃX3Ñ۹ñ»E¹OÚ£›óѤѫš·iîmÛÿan#˜,6.n>†ÐÂÍËTŒ7wP˜%++kΜ93gÎLII±HòàBO’ÚµkO›6í¾ûî é±þøã-Z¤§§ë¾K~ ZèÞC¡Í>uwB¸þúë÷ïßoôªÍðÆ|h_níF¥Èé>¶›‹kË.Dr·b†0jlk>'Ož¼æškLžßøŠµG3¾g¼õÖ[=öX˜ƒÇ™3g6lh2myº÷xù 5¿âQÉ)Q¢Óf>ºcD¹ÃF{Ó F¯f9Ÿÿgï½ã¬(Òýÿšá~×q”ä à ’QpQ”d`]3¦••kF×€ÙE »îЍ×Õ5®Yw¨èšY1‚ºŠ E‚ "9ç0#ÜËœ_ýÎsÏsŸSUݧ:TuŸC}þ˜WwU>Õgº«ê]ÏSOÉÕ Nn,Ç?tÆ4#mÚ£\Æ£\σäƒeз>tèKÿ_Ò‹|®¼ê*-á¾QÐÚµk?ùä“ &|ýõ×ü „¨t±\Ù¾øsRYYÙªU«Þ½{wÜqýúõ³ÓãðbëÖ­ù¯çU+س {]Ä~zìð“)½ÿ_ÆŽëS ”‚|pyÐ2“b»¡‘‡¶KˆFF^de•ù8Å¥’%Ÿ»ï¾ûꫯŽëj¥=Ì»ÃX°`HË•q*.ñ‡çøãë­·¼ „[Þcÿ¥£nü/ï¿•a¬„¨Í§\Úç,æmðA“¨A´:Cö'¼Ú¨açS)Éëyä�náäÓ}X §X4pàÀwÞyÇ+Í> ÓÆË…i¢¿Á‡¿þ÷ÜsOìþó©•ù´mÛ¶yóæˆ=tÊ`û†–j8¥6ê[ÈOaÚ‚Ãϲe˼|/ù8Å¥’%ŸÞ½{Ož<9–Km·Ø³ß~û}õÕW–+ãTtzøá‡} ƒþË{Rõrá¾¥4Œ5õvƒnžÚ|„¨4¤Û€³üÕ?2ó …'£Š^x�„�r —z¸ÅµË™§£#Ÿ"Ñûï¿ì±Çz 7YnµM) #MôÇ–vúé§]ºtñ)SJ D>`Ò÷"–Û-Cö\ȇkÑ¢EŽ|œL«4ÉgÞ¼y;wŽåÖìŒÌ`óC;®”×5räÈo¼Ñn]œŠLsçÎíÙ³g]]2WðsKçÂxn€:Æ’ ?‚«[&»—Ey~ôjÒÀkylö¡ÂÒà O‘g¨·ú¶a$·Ø±G¸ *G>Å"þ¿Ûm·Ý–/_îU€?´;d%|ÊëjæÒMÀš ”AñÅœ9süË”’b!–?‚ÛºÒP“Ž|œ,¨4Éç¯ýëu×]ý:6±‡¥|¦L™Ò«W/Ë•q*"ñ¾êÀœ4i’2°'Í´CUQQ!û¹! Ñu>É@°ùȬ1¼~‹ù4xïÛ#¯íÙ–¿3©°’© Žy«‚´5+C? ÐŒx‘ϰáÃ}�:%¢Ñ£G2Äg•<ÏùŸçb‡|Ë”Ÿ¥ÚqÇo¾ùæýçÓ¯(äƒÂÏšI ~”6Ÿ… BkYŽ|œâRi’OÏž=§M›ý:mˆ=,eäÓ¢E‹+VKb§D4räH> ðʳ‰Íú„6 a¬i„ 8!ž›á Ló&:¼ÝÚ¡Ç©A·Mðƒt `-Œ¹f¯ìl>Å¥víÚ-Z´¨`1M2:>Ñ¿xMMÍܹs9ÿ˜«LÚ‘|0ˆKCþf>,gü¡^»ÐXü8òq² $þntíÚ5úu,cKˆ|¼€!C†Œ5ÊreœŠHS¦Léß¿¿×C ``¹Já$ì[ŠFaÇÒFDxŠk{hH7– ìÆ …±ÄùàÈ “‹j@m>‚Wõv£ÇhðQz¸jü᲎|ŠK|d¿çž{n3°ÏL±«I“&·Þzëöã4:ù0)žR¯]°Nã4#' *Aò¹ùæ›GŽñ"ö±d~¼€Ñ£GŸ~úé–+ãT,úé§ŸöÝw_/Çwþú(o ñ梇¢ŽàíF±|Þdò)ËncŠuð²ù0í}{Úi Ýð/ú³Ñ¸mÔÿš}¼nßDÀ¯é¼ÝŠNwÜqÇÿøÇÒD…{ôèñõ×_‹ù:.E!º¶Siù¡ðòÃhÇøßùóç;òq2­$Ÿ_þò—ß}÷]”+l?ØÃ<Æ=¼ [¹reuuµýú8…®¸âŠxÀ+ÜÃbü:£¯dEEàÍÿË C`ÁÚ]>]ÛƒLÂÞ�DÜX¾åSa2ùa¬•þlÛrQªºÚ¿©½#(Ë G>)×Àß}÷ÝÒ„Ö®»î:yòä6mÚ$]ÛŠÕÉGÇæÃrÛû8òq²¦R#Î<œ|¢\Áöð÷<µ‹|úôé3qâDû•q* }öÙg‡rˆ×zè(~nöÃ!@$kjêþAÔö-¥Ý|£ü­{0¶›À<ʵ=L2õPþÃ:l!b]ეyBx¸ÅØ8ò)Fñ€7þS¦L)±A8UWWÿë_ÿêß¿ÒI@þ;™ù µ§,ÃÓß2Ö ŠmͲƒlÖù8YP©‘Ïm·Ýö§?ý)ôÇ“²ö°4|˜‹gíä­Í›7ï³Ï>?þø£27Ÿ[âaßäHÖ(0•çö-¥Ø#,ï)ó c-ˆ.æ–÷jê‘Q‡:³Q;Ïÿä¤Ä¹&A³ôåȧHÅž£>úßÿþ·×ÔÆv"Ž=/¼ðÂᇞtE’‘&ùvoG>NE¡R#Ÿ¾}û~ùå—á>kgVäóÅ_ð_ÒreœŠB¡ýÜçY¸u©’|”„nž†tÓ$ÙÔƒéèøÞÃÆm£Nnx 0bOÁæÝ«@ô~Á‘OñŠÿ÷ÿøÇ?ò×üçŸNº. ˆ7555cÇŽíÑ£GÒuILþäÓ´iSh3!…¶ŠÌÛòãE>up‹pàdA%E>Ë–-ãïd¸;J{XšÈ§yóæ«W¯.–À\N6õùçŸ|ðÁ^“ÁrëÒ¬ð½J÷¶Fù›–Êa¬±ËgÙþ^I>àLj›»Û !› ºžG8€Æ pºuëVprcRc’ÿx‘Ïﯼòž{î }Y'kúøã‡ ²|ùò¤<±Quuõ‘Gùè£6nÜ8éº$)òÙm·Ý8~À”qàÇK2öðch» Å‘“•ùðÖêâ‹/÷ÙýÜ@é‰êvê©§¾ð –+ã”~mÞ¼¹gÏž^ñÜpé¿åZ…®ðÁÀhù¡ÁÜèî¥tm¦ ç`TkL‘_1jóad@m>hçQ’ulÿÿU7ŸÜsIŽ|Š_üqzðÁï¾ûîM›6ÕÖÖ&]ƒâ/oUUU×®]ï¿ÿþ}öÙ'éê$/òáXˆM%Ëñ/?¼±bùž½,ÛròA'ÞÅ‹;òq2­’"Ÿ¾óÎ;!>˜¸Á‡¥‰|žzê©sÎ9Çn]œŠ@Æ »ï¾û”Y°¼'UØã_º{…êÞ†§BHÁÚCû~jí)+[W$!˜Ø�Žd(Ñèü öè´çvøÇ‹|®6L9¢rJ­ø£5nܸ‡~øë¯¿ëb}}}±;ÂÁÄGee%m›7o>hР¡C‡¶k×.éz¥E>äSSSÓ´iSlYÎÜMCå5©}›š}0°×¢E‹ø¦ü¸#§¸T:äSWWW]]í5[à#kõ¢ þk,Y²¤uëÖ–+ã”rMš4©ÿþÛ<6:„`�Ö*ý¥+|€p�~�xèN¦èê¦ä9€5ãûEhO»È‚YOH¤Ñ èrŽWôj¦G)!"ê,œÍ§$µråJ>úä7mÚäÕ…vÚi§wÞ¹C‡{ì±GEEEÒÕIüÉm>Œ¸ºá±—;t o öŸ²Ÿ¤8òq² Ò!Ÿ—^zé”SN ú©D¬=à#t)!Ÿ=zL›6ÍrMœR.þpöêÕkÆŒÊÜòl�4ßkèõ¤ ÝF#È+|dò)Ë߯‡å&>±æº�R¨‡þ¥ä^mp ïLŠëyü±‡*ô Ÿ,Í.ÃÙ|œœŠW>ä³ë®»6iÒ¤<ý’åÿ¨—/Ρ«ÿ»téR¯ÖÌ‘S\*ò9ýôÓƒ®N±=BØ� ?–ÉÇëÿ~¥›‘u’ô—¿üåúë¯÷ÊýÅ/~Ë«dÓúŠ! ·7!¶›2ª%¥Á‡åȇb¤PÔ‘»Õ�؆.òASÒŽÎÚ–ÿ8òqr*^y‘oÇ84nÜý!.ïÁLQs7þ¥ØÃW¬XáÈÇÉ´J„|ø«ÒªU«õë×ë$Ak*…äóæ›o{ì±6kâ”rÍ™3§GõõõÊ\ÚùURë‚***¨Íi‡ÂF/ Ç^äCoDˆê†ÌC£W+á§„«¦ÇBôj´ùZÛƒõ —«Ìò¿š#'§âUAòa„và/vÉF>èüF[?G>NT"ä3~üø#<2ÐG7ø°ô‘o°Ö®]Û¤I›5qJ³øsrÄG|ðÁÊÜ ~ni€þ´ó¿p ¸Ô‡®ðȇŠF¯æ§™\ÜjØ-CÄò==ɱªÑøƒÓ¢°ë_C6 RÐèÕ:ÅââG>NNÅ««®ºJéýÁ·wÞ™·œ,;¤¡Vnüëµæ³!Æšå7B\µµµ^Ë„8ù,Z´h‡vˆvgNN¥B>—]vÙC=¤_> ØÃÒG>ýû÷ÿì³ÏlVÃ)åzâ‰'Î?ÿ|¯\?·4ÐÆ6À¨Ö^ë|0tµá€åzw%ù€ÐÚä=|„}{Ðøƒ1 ¨·npަž‚Nn–#¼©c¥8òqr*ZÝÿýÆ KÕø°uëÖK—.MºN¥ R ~ íÚµ[¼x±fù”`#ä“ìá1bÄÍ7ßl³&NiÖÊ•+»uëæåDêãç–*Ú¡•¡DpXGƒç&càä¢#{»1B>4†’äʱªÑæðÒ\ÛƒˆR& ÿ8òqr*^7nðàÁ›6mJº"ÿ§ƒ>x„ IשT ä3eÊ”8@³pz°‡¥|>úè£ج‰Sšuê©§¾øâ‹Ê,þÃM±R)ue4KÒ`ÖÆÚ+¶L>B<7¯0Ö ÙÃMI>ò"ôvCˬíAãO µ=Ì"ÿÐ/ò¹ü÷¿¿÷Þ{ ÖÇÉÉ)AmÙ²¥]»v+W®Lº"ÿ+Þn?ñÄgžyfÒq*•ùŒ1â–[nÑ)iëìaé ŸÊÊÊuëÖ9'Z'Ð;ï¼3pà@¯\ôs³ <Q¾ |Û ¶›@>‚͇Âr¼Ô~˜D>Jìa¹�0`ç¡ÆºK)RÚyèMÅ‹@±,òù_Û—#§R×O?ýäµùŒeñªiÓ¦ñ^sèСO>ùdJvmâ6oÞ<¯DNNT ä³÷Þ{Ïœ9S§¤eƒÌ«¤ >Ìc¼rä‘G¾÷Þ{–kâ”Nñ¿VóçÏWæ9X¨F¼/¬Û�ƒPò¡¨Ch<jóñªd&·c“ > $P5z»Ñn|,EAˆÿå)üƒrHá5 üóÿ»ÿ9òq*EÍš5ëñÇã7jkk™w3Ë‚f¤¢¢bÀ€\pÁAýšëÖ­ëÑ£G–Öì¸ãŽ'Nä•Iº"N%¢¢'Ÿ¹sçvîÜY§¤eƒOÁP¿isuûë_ÿú‡?üÁfMœR«aÆÝwß}Ê,þ™3 }Iù°€|ä}Kýɇåö*ÅWÛ‹|2ùBìiÈE²¦[÷ø€…§!·{®ðñÇáÛ5ƒ(Òù8•’–-[vÑEñ!øš5kÒ<pÚe—]Ú·oÿä“Oî³Ï>/5iÒ¤ãŽ;nõêÕ±T,œxs=fÌ'§ *zòáã3>J+X,U~n ´‘oãô—K9•°ø“п/'ˆ×wÙt–ãäƒ æF½Ý|bÐÀÕMYêÕ&ÀþÅ5<Ôæƒ^mB7°ù„h%4Ûöù'/у|.»â /¨vrJ­>ÿüó“O>yÅŠÅ2dª®®¾í¶Û|"sjjúôé'œp§>ûÎ)¼¥­ªªš0aB×®]-µSi«èÉç˜cŽy÷Ýwýˤ{0”pW·æÍ›¯^½:ô–”N%#> ïÝ»÷W_}¥ÌÅÏ-‘XÔ΃ty¬ùà,<ÔÉMŽm@…Ø#O&ÓRºg9uu£ûö�í@:ÝF6D‹1ÂO®ÿX$þ+}óÍ7|l:eÊ”… ÖÖÖÚoWÓ,þ„ï¸ãŽ555½zõâowÿþýùiÒ•*&}òÉ'ƒ Z³fMÒ &Þ­1âÊ+¯Œx-[¶Üu×]=öØÆ7oÞ X,5T ÚÛV­ZÝqǧvš¹/rÚnUÜäÃUUUüUô/–”Ÿ›Ï>i[äsüñÇ¿ñÆ–kâ”B=òÈ#—\r‰2 â¹…{›sÍßÍvØÖùà"Œp�ñÜÐì؃¦„!˜›Àšà.=2öP«Äy£äƒ¹|´Aƒ¹ÉwdBðg¢ò™:u*¿Ú˜1cøÿ¨®®.%ËÍS+þ+5iÒ„?N}ûö6lØÀ1Ó¯E‹õéÓgÅŠIW$ŒvÙe——^zé°Ã‹åjË—/_°`ÁO?ýËÕ”â$gžN:98w2§â&Ÿwß}÷˜cŽñ/“*ìaùä“ìáºãŽ;®¹æË•qJ›Ö­[·çž{zMm‚WX  &2®’¿ýÙ„>‚µN©µGÞɇ11ª›À<,çê†Øƒ+yÐÕMðvC¼ÁmLù1'ìo„7ÿ2ºA¶m3J>Ó§O¿è¢‹¾ûî»M›6u/–”š6mÚ¬Y3þ¿8ñÄ“®KªuÄG|ðÁÅûŒµk×nΜ9vbÒ89…Š›||Öaƒl¼(ù f6òùâ‹/úöík¹2NiÓ\ðøã+³ø _ØÀÇK6_:Íïú9ᎥÀBð#È~nùx…t£¯•`ä¡D}Ûp[trèn¸uiˆå=ñ"P” æÈ‡ÿ,ÇöÙgkkk‹ºÿJƒš4i²ï¾û¾ôÒK-[¶Lº.iÔ×_}ÔQGŸÕN;ítë­·^qÅIWÄÉ)-*nòéÚµëìÙ³½rSˆ=,•ä³ãŽ;nذAs\ëTªš2eJŸ>}¼¸wØaÿÊÂëú+ ªjM£ÈÛøäC]ݘD>¸¶O•äC½Ý¨Wb†qƒãúúúˆíC,| ø ‘ÏòåË;ì°E‹u¹Ù®ÄßÎ?cÇŽíׯ_ÒuI~÷»ß=ýôÓI×"ªöÚk¯o¿ý6éZ89¥EEL>óçÏïØ±£OÄÉC`ÑÑd ÉçÐCýðÃ-×Ä)Uâ(÷Lš4I™ ŽaÊ,£oY,€îIBÔÈoˆ=ø:Ëä#`Ò]íƒaÜ€mäå=`ä>¼jÀB­ê úÙxƒ˜ Ÿ¹sç|ðÁ«V­JÉ$?/¼ð‚‹,¨mÛ¶‹/VfÁ´M ÷’Æø)¯KµjÕjæÌ™ÕÕÕ!¾ÈÉ©ôTÄäóðÃ_zé¥^¹IaÐ61%äãõ¿¾á†nºé&›5qJ›}ôÑ‹/¾X™¥ÜÀÇÜûû•eW7 ?ÕZ¶öð\9°Ë'Ì ¿‘šw¨“ ã†;öШn@>ð7–MKC|*.þá„§$ŸK/¿üþûïש‰ åË—÷êÕ«ˆÂ 8ü¼ù曜-“®HZ´eË–víÚ­\¹R΂öANW,x‹YQÿ#BC„Úe—]Þxã<0è·89•¤Š˜|N8ᄱcÇ*³,¯«.vò?~üá‡n³&N©’~`Co–QŽ‚¨n�?°¶GØÀGé¢ñ¬™jy?¦äƒÇ‚‘‡"¢ŽàÞÀ)ƒUR™ˆðæ_F~â%þãôìÙó‡~pÖ£jÞ¼ù7ß|Ó¶mÛ¤+’ -X° oß¾Jò°(:œcˆ|¼>¥tW®¨¨5jÔþç†ø'§ÒS±’﫪ªêêêä¬4`ó%ŸTíaʇ}|àÛ¸qc›5qJ•†úØc)³0°A쯕 RW7ØÀ”Z{øÈGXá#oàäCáGcM£º ØÃÁ¶ƒQÝ žOÿùçŸÃýAóÐ+||²0=^ò¹ì²Ëž~úé‚k{À‚ÿÍ@×ÝZðBŒò(»Hü8ÿÝöÚk/?1îV\¼š9sæa‡¶jÕ*9 ȇ顎MøQ’o©x Þyç…ø '§ÒS±’Ï|àe¦H|”ØÃ<È'%‹|ößÿÉ“'[®‰SzôÕW_õîÝÛ+°AEEE¼/TŒWÓ¹uuòA‡7Ü·”Æ9 ÖºÂÇkëR–¿¶ÿ²ì›Žîmr kàÀžo„¼ÂXÇŽ4 åŸÿmÇG>|�Ú¿ÿÚÚZŸ27nÞ¼ùN;í$ÙÃEhðOR4»áFÉA¿Ýë”p´®««– Úyço¿ýv¯M½¶+éK~ù89…P±’Ï5×\s×]w)³RµÂíQ ]Ý®¼òÊ{î¹ÇfMœÒ#þXò1å—_~©ÌóHôo‰ë• qÀÜÃTf-G8PZ{‡7*œSgdy£GØÀM=¸¼ù$²{NÉ üÃï$.òáèĉ½*Àÿ›mÚ´á̺ª¡ ‘ŒNJâOÚºuëø#Ç<ÄrÉ’%•••^¶ÅH>^‰ è|Ê‘“SA+ùì½÷Þ¼U’Óí| br‘OJ >\¯¾úê Aƒ,WÆ)%úÇ?þqá…*³ø«TQQåâ±¼Œá.‚Ÿ‚>¸{) 鿨MéçæC>èá–ÉßÀø ô?ùúï|Ñ+ëÜi\`£YL*øÍ—I…9ù\rÙe<ð€NM@S§N=ôÐC7nܨÌå£ó¶mÛzô©°~º ,1ôEú§ü\³f G ¦ÇÈ›o¾yøðáÊÜíGšäÃÒdöI–|xeÖeµiÓ&åb„íVMš4ižUÓ¦M“®‹Sq’Ï’%Kvß}weVz"Y£ÒL>üçZ±b…ÛÃnûMvéÒeõêÕÊ\ð qÙèï`Ð+x•‡Ñ ‡ÁÏM€t{£!­éî¥pÀß %ù�ä0bóÖö{øÈä± ÀçÍëc6E/¦ƒ q‘ÏÙgŸýÜsÏ)ÇsüßÚ©S'{"VÛ'1"‡Ä•Åø#ÀÓ{Y~8O.\¸P™µýHŸ|XjàÇ>ùüüóÏo¿ýö+¯¼òþûï¯_¿šD_Tì‚„?6555¿ýíoO:餃>Ø-¨KDEI>?þø\ ÌJ„|è�1®nÌ£=íܹóœ9s,×Ä)%òq`tµˆ¯^ kÆE>àíF]ÝÐá !c[ÓØùÀ©lðAì¡6ÙàƒÞn{¶lÙt6$Ï™ˆeüA"òá?KUU•—Á‡7_;ÏÇ£»½¥„ ø#§ \ÆÕ¬Y³O?ýô—¿ü¥2w;QDòQ&šöy³I>óæÍ»ñÆ_{í5˜»‰÷â%/Þ¿ì´ÓNW_}õ°aÃ\ˆ)Ë*Jò9ùä“_}õUe–eò¡vÈ'‘6Bù>ãŒ3ž{î9û•qJ\óçÏïÖ­s+s9*èÏE…~éLÐ`OEEÒyð€šzdƒ×N> J>Ôà P‡’ÄÔBæÛ„7@òQ¶ ±x²™f$¯,ÞÌE'Ÿ)S¦uÔQëÖ­“³øÐ\¾œZƒOzhG8]¿~½2bÞ/~ñ‹Ûn»-ŠÃ[]]ÝØ±cŸþùE‹y±k,âUmѢŀxw/ªùÿR¯UASdE1ûØ!Ÿ 6ðgãå—_æO1Ž!S¥ÊÊJˆ)âì?ÖT|äÃÇ ¼™ã/žœ• «›ÿ#‹ä“*ƒ×ý÷ßùå—[®ŒS4xðàW^yE™¥ØÀð„ø ú\ä#ìä!ª52.ò‘½Ýä¨nðBeòE70Öö µGˆêÆëëë½øSV”aSt ıo ®¾újeƒÙ¹sç‚Kð#ÒŽ21Ÿ¤‡àØÇìsøá‡?^™å/~e>’»ï¾û6mÚhsª(âohuuu·nÝFÕ¾}ûX®éO>¡÷ó1 ?Èçã?>ùä“9Í:;O\âÏR—.]þýï×ÔÔ$]—íBÅG>Ÿ~ú©×&ÓÖÈÇ…èê&œbc –2W7®‰'öéÓÇreœ‰9äåSÁ_" þ¯RĨ±+XƒY#ðà~>BTkômk”¿™\\&{XöÏH{ø Í£ZSòÁE>Ôà´5ö/ââ/ò¹øÒK|ðAÿ¯@ 2äÙgŸ•Óù¿o¯½öRâ¨NÝüÓu(˜æŸˆ§Ë—/Wîn©'ùã?~Ò¤I{‚~6µhÑ⥗^úÕ¯~ýR!ȇÅ?©%´7ÜpCRÿÜÒÖŽ;î8a„ý÷ß?銔¾Š|nºé¦o¼Q™e™|¼ >xšròáÜ7]ÎáTìâÇ]¯Mœ|¤x‚.ò¡¦º™:¼‘‡ Ö|ð½¦Ö|2ÙðH>B`jóBºÉÒo¢ƒúzEA ‚  ùp>ÿä“OäôÆwìØÑÿ³AÁ/–ù{sücî«W¯^­Üág§v žëÄO7nœÿ–A¦Åᇠ»víñ:ɇÅôØ(~Œ’}Ý}÷Ýþ;k9Eï•Æ ·;ù¨øÈ‡?ü±2Ë&ù(±ÇkÓt’þNœ8ÑrMœ׳Ï>;dÈe–W`ƒˆ^gÖŠQñ¡ x»ÑxÖ`óÕÉpŒÁÛMI>Â{DCÐu>òÚÏ:è­Åîó™t¾%òéÙ³ç´iÓäôæÍ›·k×N¿ªØ}ÌÂFü¸W5Ö¯_¯$œäóâ‹/^xá…FWõhª[·nß~ûmÄ!ù°”ÁÒ| ù<üðÃ×]w³ö˜L™²Ï>û$]‘RV‘‘O}}=ïó”óIö >ÔÏÍ'¤Kš|¼þÅW\qÅ}÷Ýg³&N‰ëçŸîÚµë¢E‹”¹r`CÌcxha`Üɇb¼™uuÈ¡ë|ðÊÞåL=,7Ãê³{©`óASðÿ…Ü„ör šB|Ç»èäóË_þò»ï¾“Ó«««Û´i´J>Y±{¸ùŸêgEùÍÓ 6(gñ9ùðan U×;vœ?¾~ysjÖ¬Ù¨Q£N8á„(Ñ$f ~ÒC>“&M:üðõǎvÜqGþÔí¼óÎIW¤dUdäóÁð×O™• ÁG,⯊£¢’ÏèÑ£O?ýt›5qJ\ÿõ_ÿuà 7(³`% žÆµÞÆD™‚…é"þø<Ü0¼›Ø€§£yG°ü°ÜKÀÃrü#|p.ìAòìAƒO Åßš uD 4 ÓÏ2M>–nEaðNõmA†¾Nã"ŸéÓ§óÞÙk0û:ꨣÞ}÷Ý(WHœ|4ËP™ ŸúúúN:-[¶,Üǽ¤|´„@šÊ^NŒR¬àË‚)™œ”.…ñê€à´iú[¶[ù\ýõùË_”YvÈG¹ÂÇ«oÀ™`–ÊÀn?þø#oÎ,WÆ)A­\¹²K—.^óvr3üH¼À£S—÷�öÀ0…|è¦èí&¼æJòÁÚÂ¥�¶¿Ðé¦T” ㈤seËä£YÃÐ9Å‚ÁÇÎéúõëc!þo½âŠ+Ò3¢hÓ¦ÍâÅ‹£\AŸ|XjÌ>&Èçºë®»ÿþûcÓ'oÆ…¾Ö0‡+Na·báG_p Çè©ÐkðD^þ¯áÊ:'³œ«œ¢ß2´ä¼éþùçŸãø <Å+<f̘ˆFK'/ùxàŸþ¹œžll|µ„“¾?,e‹|ªªªV¯^míwsJƒxÏ÷ä“O*³€]Í&ð}Pay‘ˆncJá_ç²Ü6¦LE>,òá'“¿{) æ†ÇÀ?õõõ°òGYùpmrkWzAûƒNºù\tÉ%=ôOU©|ȇnæ×½‡û5b‡Ÿbëâ7lØ \¼”|† ¦tŸæïå (¶qVQЮ»îºlÙ²(}œù(`F7*¨Aˆ|Ö­[סCË{òQbeà¡m8\ K2ï~a­ÑàœpÌ›nž»NÃLiøiÚ´©rû§è*&ò©««Ûe—]”Ã…ùЗJ&ŸÄ]ݘG»yì±Ç¾ùæ›–kâ” ¦M›Ö«W/¯~ >š—ŠÎ<±×"€äxs‘‚hH7ºÎ-?ôâöNnpLùÀb$ÏmKVš·†Òo«C@è!šWúoÙb|4«¢HÈ1dÞQfÅE>^+üuã·e ûüþ|Hªƒ¶jÕjÉ’%0\' ä£L‘¥ÿîÇN>#G޼ãŽ; ë£ðäãƒ=JæAñ&ç ± mÆ…'Y6ûàhM¶ùPã| 7 ?¼ò/¼ðÂ)§œbî+¶[ù¼ûî»ÇsŒ2+W7F^B¯ÐO‰“×ÿ÷Æoä-šÍš8%«#Ž8âý÷ßWfyDç"þ/ZJÜÞ¨µVø�ÞÐý|Ðà G&¥ïµöà1FuÃÎ’¿ìÐYðð!ÝÃ'Š"Ž™bD 9Ñ‹|.¼øâ‡~اÂT^äÓ¢E M›Oc—NŠ5þ‰ËÖ$—´I>>õ,<^w‘ù”Ç·“iÁ9)òáßÛºuë+Vý ¾~|È[l–Š=tŒL#”§& &õ²t‡Ú|p‹e­=hü±?:t˜7ož¹ëo·*&ò¹öÚkï¼óNe–5òñÁ*øU)ù$eðaæo¼qüñÇÛ¯ŒS"úøã½¶àO¯ìo­,:7–ú%…E>òòºiy¾›w(ÿï5µùà>4°ï ©ÙGgd¬£ÿ‘ÉÁ¨ÍG Ÿ‚óÉÒI4Ä?6?>Yëׯ7M>UUU±�ò.$¹J:)FÍ>ñ’ÏÔ©Sù/ÀŸ ÔWò¡V Ê9ÐP#Ñá™>ùÀï “YÔá ž1Ü–�ÜÞL¯ùáõܼy38‹:Ũb"Ÿ8`Ê”)rºMW7y…O´œ6` |xݼ‚,^¼Ø?,¬S)©_¿~^{7ñþÆkëRPæ±ïöƲ}'ö@7Õ;Kì&ËóCZ³ÜK-|0ª£_]Ûq”~‹‹%$ÐP›¦˜&ÜÏg{3øÄÎBvÈÇç."ÂOÑ‘fJРxÉçÎ;ï¼þúëa‰‹9Qøñ'Ÿòüe™{è†lð)8€Ö¿KhÕeñV[x«,öÔ€o~x=}ôÑ¡C‡š¸øö¬¢!Ÿ7òÖÓë­¶PºÂGiE¥È«m“| bJòá¿äš5k¬ÕÄ)Y3椓NRfñgØg>ÉçͲcä g‚ L©Ï:¼¡«®ö:N¸By~<kHÌH¢ñÜpcŠ=ÔÔ³5+°ÅÛDœ0aôÐáÓÞnòN¦^•ñI‡@‰ð¹/µF>> <Ây;í\ŸS‚`q“ÏÑGýÞ{ïù—7‡À`öQ’,ãd9ãÚ‚—œ²\pN\ Äô:lœ…™,�zZ__o~Ž<òHÿS ùüë_ÿúÍo~£ÌJ„||°‡¥†|`|&gqÄãÆ³V§ÅŸÀýöÛoÚ´iÊ\Ž=Ê‘Mhæ± <^ÅvÈ öÐÝ{{0¤µ<ƒ—¥‹|p œ)·ñÁ9BÚSRËîaÊStn0\ãzüÑè!dm­¯7G>-[¶òñ¿Ù(w*'Fù5â2òÄbü²Ö­[g|¼jåÞù›¥ ¸l|XÀgC?EVÁ2ñ’O‡,XàS ^òaùfòAó˜t°UGGeŒm€KXýÇl(üq> Úv0ÚÓ 5œvÐòc.Ú[MMMì;)9 ùxEÌdVÈÇ+¤[‰ˆÇFI¹ºÉÃ5ªk¯½ööÛo·V§õÌ3Ïœ}öÙÊ,þ0c QT‚Ì‹ç5õ�ÿÀ)µóài¹$–#jöa*ƒ°–’.æv@øÑ¹Mj´ƒZ{”é!FÕvȧ`Íý³b™›·Ì?á¾Î§äúõë7nÜÈ$ÅH>ÕÕÕñZ{ŠŽ|B§-/ù4mÚÔ?ž5Ž4‚^Y–`öÈM7О³Ü¢lÆy:´Ø4h Ë¹Ì óY>¶çü=–1ì,à4ð ¢¢ÂtøìíPEC>ûì³ÏôéÓåtk9¶.§Ãb)!a¸&xþùçO;í4;•qJPü‘ëÖ­Ûܹs•¹¼§‘ •J|©þkŽ‹| ¼ôš0Mˆ {dò ¹8£áE>ä€z¸AO)ìáƒoÐSFܽÔGQ&ŒÃQÿÀÚ4ù´oßÞÿ–ã½Y9%f-BdÙ!¯o <ÿÇØ) ê’S¢¼Å xÉgçwþé§Ÿ| ÄH>Ì~°Å†%ÎdÁ½”yù²Ü>lt’ºQþÕëŒ? á`åÏâ§àíFw)0äóÆï1‘ÈX¥­â Ÿµk×ò®N¹dÅ&ùà»ÄHlƒ´‘ýA¼Â|ÿý÷]»vµP§dõÐC]vÙeÊ,ºuij™'„ˆ¿ª`ê¡Ý¨“›2¶5ò༠0§«ÄHÁ‰@!¼ÅžpŸÐísèÉã Ã5¯¡˜&Ÿ‚õôÏÒIŒˆ:Y¡5¿«`Ikä£Sùwù(7@ úðh¦*ù¬•¾~¨Ï¸. Þn˜§·s‘‚hÃ.óeaMíù´yǵš`óøá¿’!Ÿ7^aåÿÔ)ŠŠƒ|^yå•Áƒ+³,»ºù`Ë‘ü¤ùØÇæA>•••¼?óçåTâío—.]–.]ªÌƒ æIÐí ÷0;0OÁE>8£!`#Ií<”¶Q7Ì ¶ƒˆ±Ôt›¦9Ë‹|†^tÑ#<¢SgæK>:tzS^éÖ >>Yá8'ú÷²ì:ûäôا@jÉ'\JD³Oiˇ~,§ÁÖAˆ’@AedåO‰Û©Îg±Ü~$èÉLÛvÜ– yŒvÀáÇ‘OúUäs饗zMÚ!ÌšLñi‡Iä“”Áß^A}ûöýâ‹/,TÆ)YÝ~ûíüã•Y°Æëƒ)gŸ2”|ÀàÇÔÔC£Z#ÿ°ù ÿd²;ùà•áUB›O&·{i†D8 á „¨nèQðî¢H³1— ¼†¤õ›7›&Ÿ‚UõI~³N­|BÔÁ&ùhVIÿ6$ŸòP;™š6û$E>þµÒ—¼½4Ýà^( ,ãT’®öþ [È<w =A{ŽSZhÆ—£Ä?Ž|L¨8ȧ{÷îß~û­œnßà#`0áC"Fæ†m’ðkx‘ÏÅA¼MœŠT|(Ó±cG>¦QæVVV*ßCÌcxP0IÝp‘àä&ï!{»y‘F²Æ©Aê!ÿÈ'\#¥‰öÿlT(8Â6J>|P+{»ùTÏ'=âÍ:5Ç9á¬=pj|Z´haîÞù›•ù°BÿýS4 ;ù€ä?`öaÙÇ íùe¹¥>Â|%HǞƼV¬ÐΟ!;™bËhÕ¡aß– lM£Ä?Ž|L¨ÈgÆ UUUI-ò‘ÉG°ö@1™|,/òQZÞ•ÿÜüã\pÑÊ8%®?ÿùÏ·Þz«2 ¶ø”ÓÃMæ‰ x° ì†>o0MˆŽmxŒó^ä#|K&_Ûr1O3Ä‚®ðî§ ;¸‰F@¿AAA‡hôøçŸ~2J>‚ÍÇçîb¹5eJÞð9W teìO5"þü-SŽÎ!Ÿp)Ž|dÑ?¸¤‡eyJ>hä—Éšw,V–¿ÈbÁÉկĆÜFmð—²nK½lW�í<`OŒÑù˜PÏÛo¿}ì±Ç*³’%ù÷"ûØÃ¼Ã|ùå—½{÷6Z§dµråÊÎ;×ÕÕÉYüQBº±T2O8(¢˜ÒmL)ù(CZ3iOF²ù@·ÇH§ˆ„n‚Á k4íêF«¥L8NǦ^äsÁ…>úè£kÒ'ÿÚú¤G§Fœ Çá Á¿bk×®µC>:Õ ñk$K>,ø:E§@‚äãU¥ÐRÂucÆH4€'º4#ù` üÃrÑ®}î(“oϧñlpõf&íážÆ£8ò1¡" ŸÙkÓäãåê&¯Càa¹Q:ɇ—ä\ãÆÖÇ)Y]yå•÷Þ{¯2 ‚>ãiÚ˜'ú:ÒZˆm@—ú Á}Ð 'QhçÁc:ˆaO©8Ì¢_?ˆB>[iÿGáŸÓÍuuFɧcÇŽþUõÉ qk ˜às DOm’Nõ‚H?ù„KqäÃòáƒv äCs" äÃ6mçñä{¡;ÐÀ6Ø�ü퀣N¼Ñù˜PÏ€&L˜ §Û1ø(c(ÉGÒÚ‚«›×ï $ŸvíÚùoÉìTìZ¹r%*߃דc‚y¢ytÞwpäCæÁ‘îçS.…wüW±GXH>8ÿGÝ!„Ànt^М«Ö-®ÂÑ >xj“|ük듯Á‡yŒÔ5‹ÅÈ9ªa|Z¶lióXvO²äÃâx4S H–|”UŠ(„~ ˜}hœlÕ±Œ`ó‘œY>öÐcœíBƒ]Ø í9´ùÔ™æ¹â]ðãÈÇ„ÒN>üIjÖ¬™×0Îô·Ëä£tucɑ׀5A|ë­· UÆ) ºöÚkï¼óNe|ÒÃ<<BÞ;¢Ù—ôñ¬Qt'ÿ„þe_%èi´S|»áM¼Ý¨ÿ7øBÄÏZG: {tS‰Ï`î§ÚZsä³ë®»"ù½ ezŒÀÃ4ñAC$ês—ò t §|X¡G"\Jˆ·¸ôȇåà§qãÆ‚Ïú¹)M@tµgƒÖ~¸¸Ðþ ϵígHœ$ØÏWþ Ïÿ8ÿé¢Ã#J;ù|ùå—}ûöUfY#ŸFªm|¼È'C6:Äa¹%Ÿk®¹æŽ;î0W§dÅ1:t�cAüQñ 醬eÌÕ) —Aòmï„.òtr>fFȇå¿×™|o7°ð䃽 tü´à½ø+bCbòØ+]s¸¶¹®ŽIfgäS°z>év€Ç'+Fë‡>& §kÖ¬±C>nG¿@:É'\ŠÎGü $N>r•b‡õ–r„“\ÐìãämáqÎ qáAAåᾨµ~Xœç‚¶pªÁ6w/�G8ÞòoÞ¼9b´G>&”vò¹û¾úje–iòÑŒêJ„||~/òyúé§Ï>ûlCõqJ\>‹â€ ”Y©bžÐV p~€à§4¼Áäo`úù[=P·oå«Íro5ûë|ÐÏM è c!Ÿ‚ Ô’ûŽ~âøm’|:uêäS[Ÿ¬ØG¨Q Gç8.øñ:^»ví† ˜$䨒š!9N øØ„þˆ,Z¦Tɇåà‡¹¦1<±asyP–ÛÉm>å¹ý°åÈ…ä‹9Yn\‡^tž ,ü 0E7û8ò1¡´“Ï Aƒ^ýu9=)W7ì ’éðþ¿€W`·É“'ï¿ÿþ&ê㔸6nÜØ¾}{å †?·•••ÊOÅëùf”yü Ðð4¤ÛäïdŠþô½ö"lW7|Ç©·ú?È}¡ò‘¥Ù¶G$¯S/ò9èпÿýï:czäS°Â^éч¡¦ùÇ„ÁG>¶@>BÂQ™NbRäS.ídš³OȇiÔ9„„Po^ðƒí?ã‚ì „Õ>¸„ïÍþ4¶#£;ºu¶ó€C¼µçƒ]�ÿõ"¹väcBi'Ÿššš+VÈé6]ÝX~<D¯I´óà3F>oß+°ïÉx[{}œÒ o¼ñ¦›nRf) >ÅÂ<šV e<kìé:Ÿò|y‘O&ØZ°ù ©ùÉù¼òca™b¸¶+–†:ÐÊ?Ý?…›&ŸÎ;ûTØ++Ë, 3”×)B[ìfeB¨¯¯O ù°àOè¯%L>Lê¹â¼ÁþS幨ž´ý§ÏôŽ|2ÄÎO{\ç#4ø°¼Œüê üßBÇysäcB©&Ÿü±K—.Ê,›®n,ûðájòÉHf&¼A8òéСüyób¯ŒSÄÇ(íÛ·_¿~½œÅŸ>ˆR¼®/Eù`Д|hGHÍ>èä@¼²\oçåȚəz°ç£J>4¼.{MÕN>šåC#žÖmÚd|ÂÕY™x˜Æ`=èq\‰qbÍš5–É'Ð, ù°àM\ñ*PÚäÃT¡ÞpoSº{5RØ|(ùðƒÎÏp}yþK€´ùP›?l]�ášÿŠס}Þù˜PªÉgÔ¨QçœsŽ2+‘E>‚«º„fò]Ý ý”öàXMÐqÇ7vìØØëã”ýå/¹þúë•Y‚Á'F¶1Ä<áˆæix7ArŸ‡ä“‘60e*›OCn'S8†-íxÇF§cÙÉ'º4[ø@¤3t3J>555œ|L›œx|²bôÇ?ÖÈÇ«kè_€¿_Ê]›SB>:)á.¢,òa-ÁòC·:¥qÞh¨txÆ7Øø£ÿ3\¼œ„zc¤ñ§½�ÎmQBç7 `ïB‡:päcB©&Ÿ¡C‡ò×U™e|à@o@§pHÄrÆsä£sã^äsíµ×Þ~ûíñÖÇ) âS‡V¯^-gQƒ5SeæñW˜‡’íF¹R?o/òAìad“âL.¼)îäƒë|0z5ô‚`ðÑYä£ùR,£)ýùã‚é>)µ7š&ŸÐÕV&†æ1Fë8^æ‘Ë›&þ&*#¼‹‚Ò@>,ø³×G”¶òa*øì‘ÉGu½�3âê†Êélì ж!=qWS$ŒóþðŸq[¨½Mù˜PªÉg¯½öúþûïåtË–#jóñ'�ž´‘ϨQ£† o}œÒ ;3c­2 >AÙ&UÌ£óØCH}èT_£üÀnÂÊ=|Í3¹Ý{˜jÎO°ù�ѨÖH>�<àöm3¼AˆöÜç#¡ˆŸš&Ÿ.]º­yô¨þ‰+Q~,pîv| $N>¬Ðƒ¡“â#²2¹àË‚!f ~0ε ?°±5ººÑpt.Œº=c_@É–þ°èáí?ü(©ÿ‚Á?!|Þù˜PzÉgݺuÕÕÕÊê%âêÆò·ññ!Ÿc{˜jÞ¸ùLš4逈±>NiÐæÍ›;vì¸råJ9«,»‡×Ø% & ˆ¹´�Ø|бã€ÛCYn3oÁ×üàtF™´™¾ãB„:ç×@ö3EòÁNÑÿ,H³×Ge"MÙÄÓ*ò9ï‚ þñèT†"Ÿ‚5ôJ¼ŽuŠEäXàgõêÕȧ`m ‰|L™6òÑI‰……äÛù€ Ôµ�?hóÁ@èü†B£ü€oÈö>,;ün ›ñLÎà ]‘|x2 Í€cèÃ#J/ù¼ùæ›Ç¼2Ëù4Rų–±‡å“QW7ý»ö iÍa²yóæñÕÈ)º÷Þ{¯¼òJe´ûÊ,;«}Ì1œ‹Û˜¢Ÿ ùà<Ÿ{4É'C»ÑÕ®t?SœöS’Oì-XÐf\§¼>K(GlFɧuëÖ²·›O 5 FC°P cÓ̃kÖ¬QFF‰| Ö¿`ebȇ–bùˆ,å<KRäìÀO³fÍ0Î5 õsa@>Ð �áÂðɇzAã]�~ÀíPWg:ù…Apæ ×ü`lë qÞù˜PzÉçOúÓm·Ý¦Ì²C>‚÷§°î %Oƒ±=L#’OuuµrˆSQ‹7¦;v\ºt©œ+|”M\žo&˜'ÜRˆçÝü¥á èN>hö‘±G&8 ð“ÉgÝê&˜}üoÇ´¢@ŽOnÁ1ÙF>˜V‘ϹçŸïµzS–ùP›>¤)ƒIMðO\‰!l’O¸»ó/�CIù{“%”X>"h;$p{kܸ±í <»‘š€0È QY.¼e!êÿŒÏôF¨Í1¶˜€0Â5´ÿ¸òl>A÷6uäcBé%Ÿ_ýêWü±œžˆ«›0@%“‰|ݵ’|úöíûÅ_ÄU§”è™gž9û쳕YJƒOšWûD1A¯Æo™óÁ®Žúsc'çO>e$r#%z»mË —ºÒð¦^®n š} –Œ$l’OÁJúÔÓ'%ÿè‹BñÂòÙu×]ãºw91%äà =0:)!>"h;$–óyƒ.£]£Ù¡¡ñG»rµùàíäÃËàî=4 nf ~¨·<±:ðãÈÇ„RJ>ü?ݬY3¥ {;$Ÿ@· õ‘ÓÏ:ë,>JŽ¥>NéѾûîûÍ7ßÈéJƒO²¦CÌ W£äC·ñ°_g uÀò£úÐI>á§ü³ú9á:¼4,òa¡¬:AÓ…Ä ëÖõvÛc=b©§œ;ÿ:¶É<p°zõj›äSð. & ’"Þ’$‚:áÈçñÇ?÷Üs}>¨TtòaváG^ð† Œm€öžX–¿ÎWþ”ùîY/L!ù`G€ „öè 8ç@z ³#J)ùðgï½÷Vf%èê¦O>ñ†7ˆ…|nºé¦n¸!–ú8¥DãÇ?òÈ#•Y‚Á§$™‡æBï…=ÎêÑð:7’[3â톯®ßC_VÙæƒ«}0ž›NHëZ~â¢/ò‰ËæCÉ'J=½RÂOV,ö ¯D9þÆE>çŸþO<!§ó÷®¦¦&Ð}iÖćÊIÒ–-[.[¶ Öo„§ý÷ß_<¦¢¢‚ß— Ô qMš®%WVV>û쳃 R~ÊGED>L‚˜Ãé00ò`äå>?t²›ÂÜt üðbH>²Ù÷6@o7ˆó¦¿½#J)ù<õÔS^ó–ɧŒDuK„|‚Þ¯ùŒ=úôÓO^§ôèè£~ï½÷”Y¼ÇÂ'Ç4ö$Ë< J>tSò¡äE>pqaFõÁ¥>`íÁÎ7s€SÓM–¦ü›zM`ÐO\¿v­9òÙm·Ý|âB5¯”¸ GçØóàÿùŒ9òæ›oÖ,lA• õÅ_Þ6mÚ(ɇ·°¼Ä„ 'Ä5AØF ªªªzë­·úôé£ü”b!fÑìò ~墠ñhÑæƒ» àtNŠyݼ›ðI]Ýèö¦tŸôyãWà äsSŽ|L(¥äsÉ%—<òÈ#Ê,£Ã¯xÖrq?äx‘O"¬œîBZ—˜fΜ٣Gåÿš?Æp¬|~,°5æA`ìÞ`n¯QþN>ÔŸ»Ì#ª[™äØÍùd¤¥>8ɇ¡¨Ÿ›fxƒ¤,?>ÅBO<c¢5òѯ’Ob"ü£_ 4üè[µjU,äóâ‹/þîw¿ ºQ£9uèÐaÞ¼y/Ò¾}û… *³ U‘_^}P ]Àë‘öºN«V­fϞݴiSÿo‘U\äÃrf<àý ú¼aÀ7 „CÉâ"P›O#²ÉÜúBSËOÙ–ÛÉ4“ÛÞ c ü ù€©·÷©ÏÊçŽù˜PJɇѧL™"§[0ø°€‹|XÖûb'Ÿ÷«œòa.¤uɉ2ž~úie²x¹)³DM=¡™§à‹€›ÖÑ=|°W£äSN¢ZÓ?ô»dòa¹hõÕ:ŸÿÉ߯[I>%cùÑ„"Óä³çž{zUØ+=ú||þ±lðÑ)W¯^Í{&)(ùp|êÚµ«rUL":÷Üs•Þwtùå—?ôÐCé&é«gÏžS§N ñÁ¢#–¿Ã)Âú¼!Qo7Úq ÍGpxcùSc8ä]�ËŽ?7rÂAãF¸æ‰`ùñºG>&”FòáÏD“&M”Ó¥6]ÝXÎÉ’0%L_�–5ŽÇÞ ÜÍz»×¬Y±>NéÑÊ•+Û·o¯œ+âÍ7oñ±G⦞è"˜´“ɇvoJò‘ç5„oÌäöég|åÁÚ£Œê†~Þú!­“2ûø” JBÊ:Þà˜'ÿúèÔS™Žâ5þe<Èd½Ýb!®cŽ9æ½÷ÞKà¢E‹üq·nÝ"^gÖ¬Y‡rHQoÁGS>øàYgâ³q‘K~ÐíÃF»¦ÑÞp‘í8@”|¨ß8SÇB4þc×€äƒ]ƒÛá‡ÿ¼Ž|ì+ä3yòäÞ½{+³l’¼È¿N˜eŒv‹‘|\Hë“ÏnW°}œžBPè,9W èáè4%ðQÌ>xÍ2ý|ÐÔ“É…4EþAŸ7ôvƒ¾MoP2fæ=šÇS/òùÝyç=þøãšUõ!Ÿ®]»ª°21àñÉŠhü±`ðaYo·¸Ègþüù¼¯IÜìÃGºƒ =zt,W;ùä“_ýu/gŠôk=öøþûïýQEJ> x@-?4Ô›ê€9Àu¡Ø;à€;ˆÕ.Ž@;èù†³`¼S¨¯¯G o7ž¸yófÎÕŽ|,+äóðÃ_zé¥Ê¬ôíELO¸;¥£:óÌ3Ÿ}öÙ(õqJx[Ù¶mÛµk×ÊYüÑåã9½dL@^¹H>4z)uu“m>:äÃòíº”|à§ôx"íäðØçF‚ÞxY¶üÐ㵫W›#Ÿ6mÚhÚ|1ø°B4R°€5ƒ‹•|¸^yå• /¼PyA;â-@·nÝ&Mš$ïfNkÖ¬Ùo¿ý/^ËÕ,«ªªjܸq¼þá>#ù0ëðC-?üaÆ€oØS`äè°ïÀ 2tÿaÙ¾UI>¸ØÚÿ©ñíÿ[³âé[r‚ oŽ|ì+äsî¹ç>õÔSÊ,£äãµÈ‡ÜùŒ1"UQwœ¢èÁ¼üòË•Y¼­‡Ç˜*¼IÜ䟋½ÝƇz¾QÁÛæaÙ—]0êÒ‰=\íC½ÝèN>Õû½GkŠnùñGÓäƒ6em£óÀ ÿ¬èÆ›Ìñ’ר±c/¸à öGlÍ›7ïիט1c”@¡5sæÌÃ?\ä-ÍÚe—]xà(1]‹š|Xþ§ÒÚ|”“e44Æÿddí^\ ŒyCçÅhØðv£ä6Ÿ+VøXù˜Pɧ{÷îß~û­œnÇàòð#Dö]ÝéBàAg¹G?zHëÐwêE>|¨bÿf§Š?]{î¹çܹså,þ¸òŽŠ¦$…7ñâÎo7º™lð)';6Èïx™*ª5Z{°«ÃØÖèÞ€»×Ѧ!Þå¤,?ñš}Ö¬Ze”|ºuëfx˜ÇÝùgé#²@P˜Ñ,æ?|@/ù°lÔ„«¯¾zܸqÿ“Û·1ÄE4Å_p^ÕŠŠŠªªªÛo¿ý¸ãŽ3ñ-³gÏ>ú裗-[ÆG«&®¯xÒ²e˧Ÿ~š×9ÊuŠ|˜j“Œp€a¯QÔìƒe$À/úÐ1$Ÿ²Ït 8)†ë|`j¬¾¾&ÈêêêøCåÈDzRG>ü9hÖ¬™ò?mßÕÍ'¶‡A‚¯g"ØÃ¼É‡÷@GqDèË:¥G¯¼òÊàÁƒ•Y¼ïçM9žõp³ã§A|è¼ l]F¶ñ‘#ÈäÃ?·L~ðz™|(üøx»¥ÁòcÔì³zåJÓäã_[ýª-Ÿƒf1ƒËz»)]g£ˆ¿ _}õÕ’%KŒÆ×áƒ×Ö­[÷èÑ£U«Væ¾…‹ÿ×_ý‹/¾¸aÆÔòoßvÙe—¾}û>ôÐC»ï¾{Ä«ÅK>,9ø6ùAo7XÿëB•{›Êñ®à “’O†¬ÿ„©14á–>Ôæ),XàÈDzRG>&L0`€2+ ää^‡’O,®nQnÓëý™5k–ìïTŒ:è ƒ>ûì39?6w/-.SO , a’z¸ ü#X{˜ùȳØÉÑ…­¸€‚™"ù$nùÑoçã²üx‘Ï9Ab {‘ÒùD7ò„Ÿ¬43ÐSsäS’Z½zõË/¿<jÔ¨•+WÊQL’ ëùø~ðàÁgžyf§Nb¹lÉÆvÃPo0Aþáü¢©³4%9ÚŒ�ñ¸!··uC~ØO˜ƒ§…Rï&êêêæÏŸïÈDzRG>wÝu×5×\£Ì2J>ÊE>ȦJo·LÜ‹|"Þ£×ûïÊÊÊ(WvJƒ¦M›Ö³gOeoÖcܽ´ˆ˜$ìçCCZÿGþ. ”‚{`mù0âðƲÁëñ}o ˜RòÁ8o^7RðN­)^ËsòÉHvìäã_ÕpúƒúH£,ˆÁ‡e½Ýù8)U|pU¤¦’pÊ ~ Ë�G Œv@]ÝÐù ûˆ²Ü§Œtù w�ö¸þÜÛp!(¹ž3gŽÛ8ò1¡Ô‘Ï)§œòÒK/Éé6 >,·ÔG6ø€° ‘É'â"äÓ¢E‹ÄÃŒ:Å¢¡C‡zí…»(ºX_P ›€Ê¤u>è·€6a‘O#i'SèÆ”s”|à•§¦$ŸmdWÙæSðî‚þá¤ÙÚÇböYµb…QòÙk¯½4kżñC?˧dQ|˜#'oÅN>,Mð³CNØkPŸ7ºÉ’ äÃÈRŸLÎó á÷9 6~\[[ëÈǾRG>;vœ?¾œžW7 €XŽòã"Ÿè÷¨$Ÿ^½zM™2%â•o"wÛm7þWΫ½9«Ž¶‰øÁÛM¹Î§ ù :Ò"¼S)¤5å/o7+ fæ; jöSkä¨V^§ø'…ÌŽ|œ¼¤C>, Ì$;ælÖ¬ôüñÖù G‚Pyn/¸F›_ /í`”(,¥ÆøËÞY³f9ò±¬t‘Ϻu몫«•U²O>4|;˽á8 ¢äƒ±Ý"†7ˆxX+A'tÒk¯½åÊNiÐ<pÅW(³`³eVúM@±\JövùÀ{ö–óÛFòÁË–åïç#¬óÁÕzÙÀ¶1UÚ|ü„ ?NhµüàñÊåË’ÏÒ¬’ÿiþ‰×øKnøY±b…#'¥J|0ÔÝáƒpñ;®{ ?rÛÁÁ½Ð™2ºÎ‡Â@>¸½?å?/oâùXVºÈçÝwß=æ˜c”Y)!FFB8% ùD¿A/òùýïï½÷F¼¸SâÚ{ï½gΜ)§óUf *jþWûx»Qò¼ÝXöFm|àÊø‚#ùÀz/PËÝ̇’æ{Ë_P.„”Ë–™#Ÿ¶mÛù˜fž’7ø°¬·›2öš#'ä¢|Œ‚íM~ ÚÌšQ›¤á­„Pô²tvL ìÐù ȼù$¢t‘Ï­·Þúç?ÿY™etd€;ù€}³,õ3ËÇ8ÀgšghW·Xî΋|î¾ûîáÇG¿¾S‚úè£=ôPeoÁi0kPt’I› È‹y@Jo7 ràãíÆräƒ/; Ç‹™ü¨ÖþÞnÀ<^6Ÿ‚÷è7 -£f8õ"Ÿ³÷»'Ÿ|R³žÉ'P•eEៈ dÓà“Éz»9òqRJ“|XQ™}‰s –p{É3°ÑÀÖò¦p´AFûöÂLöÛÈ®¦0KÎÞ™3g:ò±¬t‘O”“zËÉö½P²Éçå—_>ùä“£_ß)Aù¼¼žËVÓîmþÌÒôvÃcJ>øšëËÆvË丷ÑÍ|ÂEµN¹åG™åEË—.5J>Ý»w÷ªUDæa…Ø#ÊqPªñÏnðaYo7G>NJ•*ù0²à‡noÊÿ¢·íDø1LÑe?r¯A™‡’Ï6²±ô[³‚}~g̘áÈDzÒE>{î¹ç?ü §'B>m>‚ßhò‰ëî¼ÈçË/¿ìÝ»w,_ᔈøÐ„õ”ÏØëiŠ!«NR& ‚P§ôv“7óÁ¹ºF$¤5¾ïxÁÕ ß©Lnç.ÁæÓ@v2…. ]ºAÊ›ò¿å¸ÊT¼–átÙ’%æÈ§]»v‚ÍGYÏ(Ìà qH覇yàÀ‘“— ‘Oˆò± üð>ÿÂPA¨Ùá”å¤ébQ 39a8P<¥AÞ0¼tµµµŽ|ì+Eä³yóæ&Mš(ÿǦ]ÝXþN>t…O‘2°×’%KvÛm·X¾Â)ÝrË-#FŒPf5nܘMJ {4™„äƒØƒä#DµÆ×œ‘ Œ¼ì(lékŽï»@>?àÉ.ªuâ–ÿN¡ R¼ÈgÈ9ç<õÔSš5ñ!´ùÈÐ?—y"‚PRðãÈÇÉKúäÊÐì#À]çÇ®>Ôó =ƒX~‹­$ï†`ð‘O"JùLœ8±_¿~Ê,Óä4Ë1}¹ÏZ  ÷ù$…=̃|øõ·lÙtçTŒâU§N.\(gñ&˜Nð4"ö¤‡… º·)½Ýp¡ª°Ô‡’]¥ÊTáÝèõÑà#{/4HûùÈ68(ø‚…åGÓìCS–.^lÔæ³÷Þ{d°(ÌôQ$ú§4øp-_¾Ü‘“R¥M>ŒÀxO€·ìA'Ñàm>è;�¡Ý‡‡‘M~pˆˆûù€·ÛôéÓ}¼ù˜PŠÈçïÿûE]¤Ì²C>rT7VüäS]]½zõ긾ÂɾƌsÒI')³*++‘iK{4)÷䯭¸…Å©t}ªÒ©•¾étÔH_v|ß©«x2 Í™G¶ùøÿኙ“O× Ì—,ZdÔæÃÉÇçÛ5™‡¢e¢`–ÿû8òqò’9ò QÞ�{7n ؃èªQášv(,ÛJãËÝQCþÞ'Êu>Ð;ðÓºººiÓ¦9ò±¬‘Ï%—\òÈ#(³l’®]£_Z|À¿…tu‹÷¾”äÓ½{÷3fÄø-N–uÔQG7NNçO“&MðXY öÄX k^$åÈœ³ý½Ýè;.ó´‡eù›™f¼c»!óÐ)½­[·òDرÛÿw(øCÅUÞ_𽀦åNM“O=”UŠhö‰ Z"~ÜšÁ‡8òqòR òaÅoöή„F E›ö,B€l©µ‡åL@{ÐìãFG>‰(EäsÐA}öÙgrºé¹ÏÐäîþ˜Zòùõ¯ýÁÄø-N65wîÜ=öØCùŸÅØ%€=!ÜÛ„ÙÛÂO9ÙŠ›z¸Qû|qjói »xÑ|ÐØK7ªC‡7Ž@Ê_ÀçÇ ZÆ´Y~h 'Ÿ©;||ê”yX)˜å:FáÇ‘“¶òaü`´t%€8×”|Ð3J”‘ L+:òI•ÒB>ü!hÚ´)ä,Ó–}vñ@g‘üò íêû¬­ò_yúé§=:Æ/r²©?ýéO·Ýv›2 bXÃs,ä9š˜${»5";ÐÉá Ê<» Ì×§N­,Õšz»!ùàj ]ªó³èäÆõE±üȉ‹.4G>íÛ·Gò dö1Ê?ÅeðÁÓeË–9òqRÊ(ù„(oN¸Ã@†wCòÁ)rÜäTpÀK Åió7G>‰+-ä3gΜ=öØC™•,ù4Œ¢ ŸáÇß}÷Ý1~‘“5ñçŠð/^,gñǵ²²²Ø±'¨©Ç§<’:g£«›ÒšÚy(ùÐÉ–?LÈ­=‚ŸÛ¶ü-}€|¢ÓNâ–Ÿ@fL4M>û쳿‘‡ypEÐãÒc¡äòåË•kAù8%V´f&E; Si4^xÄQòÐæã?Ž|WZÈç•W^<x°2Ëùðç^`J>‚Á‡ÅJ>±ß”ùÜ~ûí×^{m¼ßådGãÇ?òÈ#•Y|P¢Œ×§C>é6Y(¢©G8¥Q­åöž6ó¡ ~ð5Çmʈ EXÔÂ÷]†ŸÿÉ„.ÕüÝô D,ï¯(f!}Ñ‚Jò9ë쳟~úiÍúø“W}ôOcA—ÐTú²1|2Yo7G>NJmoäònäü€?ühüò.Üá0Î5A£;üdr±­YnÜH½£ù$®´Ïˆ#n¹åe–iò‘}`àeö'ŸL´ÀnÖȇ2Î>ûìx¿ËÉŽÎ<óL¥§"&1¶•&öb¡(WˆrÊ$o70áâ_!°µòeg9/½8t]<­= Ò~>‚Á:3°ùPòñyß5›‚â²üð£äÓ¡C ŸèÌà 3I”\ –õvsä㤔iò QÞ´h¨7„èMøÍB)JÇi–»#Š+Ž|Ò¦´Ï 'œ0vìX9ÝŽ«›ÒZƦ"x"ƒ’‰›ò"ŸwÞyç裎ýëœL‹7ˆ555Ê•oY ‰Q°Ç& E‡å)FàÖùÐØnÔç:*°Ü›.û¬s•e×­bl7–óv"¼Ñu>°?7ômá[¯åΟo|¼*”y˜,±sñ ùØTmmíG}4gΜU«V™}ñ6°S§NÝ»wßÿý£4!ȇ³Ù‡åÈÖùàø”g·úSÙwZoÍ»<Æá"¤;òI\i!Ÿ¶mÛ*×3 ùÀän ÉgêÔ©={öŒýëœLëÉ'Ÿ<ï¼ó”YMš4žÌر': éÔ*F B÷k½•çGµ.—¶ôÁîŠå¿V?^Þnà肟‚?”Vˆb†Èì³`Þ<£äƒÍZŒÌÌшo WÀ‘ÍŸ?ÿÒK/ýúë¯9K(§´âÿÇí²Ë.|˜>lذßÿþ÷áv3ßɇå/øÁxí O±[vÇf¤×Ⱥè&0¨#ŸD” òÙ°aE•5±àêÆrË{‚’Ö–é‘¡;jP>fÙù¼ššßèdT ˜0a‚œÎÛYÞÑ;Ø‘… ™zðz#è–°s¢¡äÈõÔW‘u>xY4ødˆk«lö> »4ø‹fŸN«,?>fkäãU™èÌ£LŒŽ¡¯Ë·ËéK—.uäcZÿüç?¯¸âŠ5kÖØqñÿcûöíÇb$`|B”7-Xðota5øÀÂQètÊÈ‚¸‚@>,·,œÆ¶vä“ RA>}ôÑ¡‡ªÌ²@>ð³\Dv:,”/FòÙ²e 3M|£“9ÍŸ?¿S§NÊw³²²’þCK{4¡;!¥·µöàß²ü€¤tuËï´Èf>²Î§AÚÏM=hù ä@§qHÖìô-?óçÎU’Ï™C†Œ5Jó»|Ègß}÷õªÛxe™’”38ò1-Ž=—\rÉúõ듪�ÿ'¶k×¾jÞ¼y †#Vrfð €e?hçÎ…§°ìì9v({@8PdÙMè.µµµÓ§OwäcY© Ÿ{ï½÷Ê+¯TfY#Ÿrisò ØÍÜí(ɇ7[ü½2ôNætã7ÞtÓMr:~š4i"ŒÎ…ÊOÙIÔ©’¡SÀè–ÐæC7Þ.WmfJ½ƒ0{‡¾ hù¡QJ‘|Àòƒ~n{ @Ú ÔhØ7ûx›÷ãæÈ§cÇŽœ|¢33�'†À&Ê7ú§/[¶lÕªUL’#ŸX´`Á‚>}ú(a›âmàÁüá‡úÔvK>Lµ½)ïP***ÐÉ ƒˆâŒ9 ïF;ÁMœ2ÙM±ùÏ;mÚ4¶qäcB© ŸsÏ=W¹ÃƒéÙM™|dƒ×Ôo¸Àn–ɧM›6ÊÕSNi®:wî<oÞ<9‹é+++á8œ½Å\bÁo7aêAÁ» !wpKÞ€:gÓe©”|ÊIdFÞ}úʳ ‹|(ùà2Vy>Ï¿H¿åGÇìc|¼ê“óÈE?¦ÉgêÔ©£GæÃ»¥K—nÞ¼9âÕbo"Z¶l¹Ç{œvÚi 0êqÜqǽýöÛihUUUýë_ÿ:ðÀõ?b‡|B”·#„Þ}À_ØÞM@ÛšúQãgå ×0]޳cÐYðŸwÆŒŽ|,+äÓ§OŸI“&Éé¦ >Ì;¼AiO=xcè i„ ¼3Vfñ~ˆ7µ,}Ø“”©‡žbç„3Ø9 ‹|„Wžå<]™¨C§… ‘¼Îæíð”®^EþAò1mù1C:Àƒš;gŽQòÙo¿ýäï Ê<L…ÊÄÐ’fæS$†ÈçÕW_½æškêêêYߢ£fÍšUTT\rÉ%¼žrÀÌèâ÷Þ¹sç•+WÆ~åp:ñÄÇŒ£_>4ù°’0û°,ü4nÜ Î̯AGƒíSX®C§!·ÿ5v"4¨#ŸD”<ùð ðÖ‡·°r–MòÁPæÈÇèí(ɇ ?úè#s_êdBçwÞ“O>)§—ç¶ñ)aì jêÞ*++Ñ΃q®'7ЇNv ðо\€콄wJ…�{ÀáMþÑ”wW®N@ Ä<h‡|¼ªˆy˜i°ø`#%Ì&ȧ¶¶ö¸ãŽ›>}ú† B|ܲøèv×]w}çwöÜsÏx¯üÖ[ovÚiéñ9ßm·Ý–,Y¢_Þ‘˜}ð€ã1N¨AçRž;”å¦Ïd› qjŒw üç9s¦#ËJž|/^ܶm[e–5ò¡Ûñ¢÷ ­ƒ’|` Ã²4ŸNòùÍo~óú믛ûR§ØõóÏ?×ÔÔlܸQ΂m|Š{ŒZ~Ðz#ø“òÎwÈ—¥3öPò¡ÎoØ«mÍ©àÏèŸÅX¤YÆKþ„œ‹)œ|¶IMb\äÓ©S'$Mæa*ð:Ž‘CÒ?±“ÏÚµkûõë·`Áý­½Ó –-[òî²ÿþ1^óþûï6l˜ò% ‡”ú6eÉV­Zñ—~„kG>ç M=ü¥ ¡Þ¨5ã$Œ*á"¸,É¡ù$¥äÉç½÷ÞóÚjÓ4ùÈË¿,ìC>ðP$£÷U’ÓÏ9çå*§ÔjôèÑgžy¦2«qãÆàê&(µØcÙá’Ø ²Ës¡HËó#šPþ‘ïH& ï–É*Eáʺ¥)ÿ”jôÿ ³|$·rúR–ÇÄøAI>gœuÖ3Ï<£ù:䣬i2œ”7LÀO\$ƵdÉ’ɇ?í¦NZŒÃµššš/¿ür÷Ýwë‚þóŸo½õV9¿w¸bÓçY•O5ËãÈDЮ»î:cÆŒêêjÍú[#Ÿå­‰ÂƹÆÉµŠŠ Ú­”{„Èj Û?ö@ÊÏ?ÿìÈǾ’'Ÿ¿ýíoÇWfÙ': ¢…ýÉG'¤u"äså•WÞsÏ=æ¾×)vp cÇŽ•Óùƒ ®n‚Re ‡=q!ŽÍ§ÙxÞôF¹ ö‚Ï#=1?›*mhTkä�÷3ÅØnÀ?½è‰š¹±È{¸æÌžm”|zõê¥ü^æa*�P&FGå©Qø š/ùð±>ïÓùx.ЧR"þâðçjòäÉq]ðºë®ûë_ÿªü"Mò)X@YÞ‡|¦OŸÞ¢E ½êG"eÝâ*lY?B¨79Î5bíP„ù2Úw8òIDÉ“ÏСC{ì19Ýtç‘|¶ÙÌÇô½x‘ÏÍ7ß<bÄ£_í£jkk[¶lY__/gñW^€[ŒØcÎòƒ;ù€[%:'ç³Î‡g²»— _‘‘Ô¯m¹]}¨«Û6²¥¶¡ÿeAMF:¹áäÕeé?Ìše”|ößý¡>ÿøä†f’@§!®¯_@yºtéRåüä³fÍþ/K<‚s5oÞüùçŸ÷òC ªä#§„@#G>&DC½á§ü”ΩA‡ÂrKF‡7–[[ ð¿œ|xçÈDz’'Ÿƒ:è³Ï>“Ó-“� Þn2ö où<ðÀ—]v™Ñ¯vŠQÏ=÷ÜYg¥ÌjÖ¬™ÿ¸ß+ÑöØ7ï(Oq£Zã;Nû)ɧœ„âQ^_ Ÿmd;/!¼5ux£{û4ûDùßù¤-ã#ÿÎBÈýý÷¦ÉÇë«Ã121^ÆÐ< ñuQê#ùðQþˆ#|¶e, õíÛ÷‹/¾ˆåR:äÃâ@á´É'DyËÂMi¨7ºq¸0‚=t‰CG ÊÅÞY³f9ò±¬äɧªªjݺurºQZÀðx ,tf%A>|$}Ægýj§uâ‰'¾ñÆr:JyDSŠ{,s£QGéN>è@iüdѯÀÁ"õyl>èÉ€q{ÀŸãxŶޗü³‚–×ì”Åf}÷9òéܹ3&ó0(}rƒR‡eø ¾dÉ’¸È§{÷îß~û­2‹_‡iÀ+*å#ˆ´ýË˼›Ê­Zµš;w.¿}Ÿo×T,äS°€\Ì‚,“²nqND?°àú–ë}°¯a¹_†N¨aÇþwóæÍŽ|ì+aòY±bEMM2+Yò¡ß‘|Lcó&Ÿ·ÞzkàÀ¦¿Ý)ù¸ºñ>XØk/ôø¸T±]‘{G6û”‘íç„w_%zŠ/~Y.àF)¥Þp—†mùÞpýæh¦x%jæÆ"¯1«ùœ~æ™Ï>û¬æÅ ’W5¼((ÿÄÅ!±ÀO¼•Áƒɇ¬•—âoÜî»ï.ÄùÕ?0Qžÿݸq£wTUU5vìØ~ýúºÝÂÒ$¡òAOåG>†$,øáÝ : áŒ[Yn© —…·†tüç={¶#ËJ˜|>üðÃÃ;L™e|„àN‘ û“4é$Ÿ &|ðÁ¦¿Ý)=ÿüóJ~š6mêƒ Ê”(Å4ÃÁLh°Ñ)ù‹¬ ’us¥ä™ìRjùɱœñ'C¶h Ø#“üåL+Gx‹Ñà“yu<ýûo¿5J>p€²™‡…4}ø‰´4«q‘ϺuëøÿkÅŠrVË–-y#æƒþ¹ÑËËü­\»v­\[>¨}æ™gN>ùä7¬!CäS°€#s’£Àl—å¯Gøa¹­G`¦ \� ¶›#ûJ˜||ðÁË/¿\™eš||BZ+}]”äƒó¸^äc{˜7ùL™2…F@rJ³N:é$åîÚ|(Oý.¶ì Hü·ú9aTkä�ÿ‚Ã[#²‹q™ä™-| ¶�,?Ô{Að|à·4UÆ9(øÏ „::mNôvɧ〬ïfÎ4G>]ºtáä ó(ã"}2Í<>uˆ‹|æÌ™sðÁ+/Õ¦M/Úçÿ\¯` ?üðÅ_ìy«ÚŠ‹| ( ò Q>ÁÃܸqcXðCC½)á?ØÛ\Ý`qùXVÂäs饗ò&F™e™|0ÂýЮBiͲÀ“fò჆nݺY¨€SDÕÕÕµlÙR –ººÅ 9éÁžÐ† á”Ú|p©Z{蚟ò\<k/ò¡Är=Åú—Fz¤ðû6�ÿ ühÞ—fŠW¢OzèÂ:–ùvÆ Ó䣬X8þÑÉvü ¦ÇU±Å‹ÇB>?üðÃ!‡¢¼Ôî»ïŽ¡)MpNÐòÉ'®à@úäÃòo'è©ÍŽü½öɇ©ªWá%G;ÀÞ÷‘c¹ðÖðI2bùÙ¼yó¼yóùXVÂäs衇~ôÑGrºi`ˆH>BHëd]ÝXî]’µ`Á‚víÚY¨€SD½ð §Ÿ~ºœ^F\ÝŠ {L˜w –D—: ‡ÀC÷ÛÆ¿eRx7¯_çè ¶™\xaÙy€fŸ(¤§LñO÷ÏŠQ´7™9}ºQòéÝ»·æÐ0ÿÄ æà'óéK–,Qº¨ÅK>|¤(TƧbʃ åu®°zõjåÈùðŸ7FÔNù˜ËN·áö¦,;¶D·–[탟bä8òIJ “O«V­”“.É’>©ÉÇÎhƒy“ï„Z¶li§NQ4hР×_]N§®n1ÚÄD„§@;àó«øp®<»·).òAo·²œÏ›<ñ!ÿ hù¡ä#cm2Ù>`óÙ–¿«ità dÒÉ -¹™1mš’|N;ãŒçž{Nó²þäãõíþceýDlð*/üX`!ËäãSIz Y,⋈| päcY‚Ù÷K@ø)Ïß,Çi™œ³4ÿÕ××%NVË–-Û¸qcè+ÿZ·nݬY3s_»’$Ÿµk×VWW+³Œ2†7¦~éÐGøHFZÓ\äS[[+DCvJ¡t\ÝLCNâØÚ B…Í|„-}¼ÖùAÊóƒÚSak‰�c7–ÉE; Âí}�{pykˆ÷ªXÒ) #¯„“ÏÿH³â"Ÿ=öØÈG‡yX¬k}ÚNƒ&­CèºY#¹:·©<ýÁ4“Ë¿Á(§ÅK>!Ê'(%ü ‹ËÙ|°¥•{ N& ,ˆ|x_sß}÷=ñÄ6l`Ù•E!ïPCpƒüöO<ñÄ‘#GVUU™û®¸”$ù|òÉ'¼¡Tf™&0Dz‘\äc {˜7ùð¶Ïkÿ§ôèŸÿüçi§&§—å\Ýöh–¤± ð˜®ðÞ¨Ê$‡7ù+2YáЇ)—úPþÁ-My·x¡Ž~[¤_²`Ç1ý›o,²>úü£“k~tÊ›¨Ë®ó1M>mÛ¶…u>–ñ¦`±dÉG¨jÐSŸ©"¹ž1N\~ Ù7êí¦txƒnbË–-óçÏ÷±Pä3iÒ¤“O>yíÚµ«ÂÞVñ§ºyóæûÛ߆ bó{C(Iòùûßÿ~ÑE)³¬‘âˆÝæ“8ùðžFiFpJ›~ûÛß¾öÚkr:l`š^J�{‚‚hl4þÐ%§t*¼ìBœ¸/(Ëy¾eˆð]Ý2ÄAð£qp‡—D7øµöØi—øí›&Ÿ>}úàwÑïÕ?q9LÀ ²I>rM|*¯yå ÅE>úåùØ”lùAƒö/X˜F8hÈn‹²`Á‚ÉgܸqgœqÆš5k"ÜP$ñ[>ÿüó}ôѤ* £$Égøð᜕YÈGi‚||6óIœ|8|¯[·ÎZœÂ‰Óiuuµrn†w°†RPŒS؃Çàl@ÃŒÂjaSúúãš|ñ…ŽŠ®ú£ÌƒÂ€Ð™e² {pZ„’vàãóÂàÂÚc®‚>eÚÔ©Jò9õôÓG­y)òéÛ·¯Û0íñ±21F¨?!¾(ʧìáÀÞø\jÕªU©"9%Ü©#›Rš}X®+¾ ãhÍùðKñ†QùÚ¼/ºè"¯¸ÍiP’äsüñÇ¿ùæ›rºif(ØÖk™||BZÛÄæA>mÚ´á]šÍj8…ÐÛo¿}ì±Ç*³š5k&÷+ö=ßtPÇ&öøda¯ƒÀ£Œj-¬ñÃF \Šj ÇДå69Îa$ê ´)µrÁ’O}}}P£ËW,T0W_´7ùæë¯M“ü¥¬ÐXY™¨`~b‡å©eòñ¹Ÿ{Ô<Z>qò*ñSŠš|B”O\²Ù‡W7êD€Ã6Þ ,Z´(.ò9ꨣÆŸ†_WûÅ_Œe;`J’|ºuë6kÖ,9=qò¡ð"ôàOÜàÃ<ȇfÏžm³N!tùå—?øàƒr:J7n,$µíL1‡=á¬LÊSÜχn-‡qÞÐȃ±w¨ñ‡ÒôU€: €8`$δ LZðƒžo¸Ï)ÝØ¦N +vþñJôIZFÜLýê+sä³çž{ 6æ1üeaÇÇáÒÃqŽOVªÑ¬xÙ!Ÿ‚õÔ<ˆ~…â%Íòi#¹ž1Nƒd³Ëù ÀO…¡Ø|â"Ÿ¥K—î·ß~^[TÙW³fÍ,XдiÓ¤+¢PbäÃÿÓ•••[¶l‘³ù•òµÙgŸ}¾ùæ›Õp ¡Î;Ï;WNWººYƒ9%^ž‰N^%‘|èf¦‚µûy‘´À9B×. ž¨«[ÙØ4“Û®¡!ó [ ´ü@Ìë­9<°É?þY±èë)SL“ždmˆŽ(¢Ž>iSž.^¼xùòåLR"äãŸ;)¥Ÿ| pä“„Y ÙØnË–-‹…||ðÁáÇûl/iY¼æW]uÕwÜ‘tEJŒ|æÏŸß±cGe–eòF<ÊN ò±Œ=̃|8à€I“&Y®‰S Íž=»k×®Ê,ÙÕÍ(öȉň=L lfjí¡¯?d•Iû™²\§^–ïþÊòGo d›/!ö Z~€s2¹˜BäØÞ4Ä]ë§x%ÌŠ¢¯&O6J>ýúõca™G™#ZDŸ Wˆ~j“|¼êú âÒ@>,ÿv"ž²ÜpÅ‘eÁ^~èh×××ÇE>C† Ñß$ÚŽÚ·oχúI×B¡ÄÈgüøñGy¤2Ë&ùq˜ô&؆‘(„,·4-åäÓ·oß/¾øÂrMœéoûÛðáÃåtþX 6b£¶91ÍØã”vàMÇŸ.õ¡®Øå»ú(íÀ,×8dHxk$Ê?ö�Ni¨kÊB´)6Ä?>é:¹4eÒ¤èäÓ£G3fÈé]ºt9ðÀñÔk,×ø8^ø @†˜þ.\¸P‰+|h^[[«ÿHø“Oee¥Ï)4‹mçä£,àÈ' ðÃrKOqÙ-ŒþÏq‘ÏGñþûïGº¸ÕªU«Y³f¥p“ÓÄÈç‘G¹ä’K”YvÈ÷3¥ä# q!¾ÐðµJò±=̃|øÈàÓO?µ_'}qø?~¼œ¾cVxjr䔈 “öÀ1 é†û*4ÊßÉT&¹('ÁN”?#à�xè1¶ÐbPÂÞÊ@” {èÞý û'ú¤-# ~¯&OþoÉ™9(ùôë×oâĉrz›6mx7O¿Îç8ÐH:\z8ø‰Ž@þ—Ò¬Þœ9s”Q@ùм®®NN÷’&ù¼—èúå‹‚| ( ò‘ëcáôˆÂËm‚DKÂ?hëÖ­+V¬ˆ…|~ýë_ÿûßÿŽRùØÕ²eK^¥½öÚ+銈JŒ|®ºêª{î¹G™e�xøC©³È‡3ùðNèã?¶_'Mñ¥ººº¾¾^ÎjÒ¤ m%ÃANtìazܒ쵇‹.õ¡ûùPãO¹J,·/5#]»ðuÐ, ·Ë5(äM†lO{rQòýï´à©2Å+Ñ'ÝKrye'2eÒ$%ùœrÚiÏ?ÿ¼æw 4èõ×_—Ó›6múÛßþ¶ ó°hcè@˜~B PŒ§3fÌPFÕçãã@«¥ ’ÿh„þ`‘œâȧˆä?‚`'Ó5kÖ”*ùðÎÛo¿}À$]Q‰‘ω'žøÆoÈé >lû ŸC=ôÃ?´_'Mñ矿r:©uØäLI{Â!Ë9¼Í‡ÿ˜èÿ&|…èz¿riƒ/Áò“Ɇ=`¤c†Ö€åÚ Pƒ$toƒS4û4 oHGAùT™â•X0+„&ùetò¹å–[FŽ©lß8ù€G¨>ó(£ÐŽpZ`|²BCQÄS>ðš:uªüórõéÓGipó’ù´k×Î'Â!ªÑ9H ù°ü!â)ËWù$%$–j¢·› ?Ž|’Rbä³×^{}ÿý÷rºò‘»Ñ‰^¡| òI{˜ù~øáJO*§”èâ‹/VîsÌ[Lì !W¢Ô1j‚SŒm€äó9áPÏ7Ú4Êm9‡Ë1Ck€ðƒ¢§ÈB $Îbý+Ä?€ho`Ò¿_–¯èT0WG“&NŒN>ãÆ;å”S6lØ gõìÙs¿ýöÃS}þÑ?0?(®*áÁÒ¥K•Û¾•ˤC>þu‹~´<¯m1’OÁŽ|’•üÈr䓈’!þo毽ÒÏÇ2ùàDoyþ&†P˜kŠŽ|Ž:ê¨wß}×~eœ4Õ¡C‡ Èé¼³+9KÎÏÍêÅ<ª©¨¨@o7\ü $¶.'®¡ ä£4£dòiÈßçGx ¤dr1ß»üÕ¹qùT3Å?]¿€R_~ñEtòá£.>VS®6áÿÇÁƒSKó+ hÒŽWztøIñ§î›o¾Q‘›7oþÚk¯ýêW¿’³¼äO>þb„™’$Ÿ‚’"Þfšã™Ò€ôy£¹�B0ÉåÈǾ’!Ÿ… ¶oß^™•8ùÐ 5ù 8ð­·Þ²_'}ûí·Ý»wWfñ1‡@ਸ GN±€:v°ý Ý̇ [�íšF8 K}¨„oÏñÓáZ – é…C4L@[·n…±©¾½K§€W¢OzÐ’Ð`ÆB>\ ˜0a‚2«mÛ¶‡~8¨”‰¡)(çød™ûˆfgÏž­ŒmÀ²QõW¯^í5Q­T òñª¡åƒô­UôSG>‰K6û(‹9òIDÉÏûï¿‘yÙ'Ù³ "Ÿ¤°‡yÏñǯ\Iå”Ýu×]×\sœÎ‡Mš4a†ýÜüSLÇû‘‚YBŒp ïgŠüã³Ô‡z¾1Ò—åœßhCÑà±Ãm=2$þ—-­@2ÿøÿò©2Å+Ñ'=&~þ¹’|þóÔS_xáýëŒ3æœsÎÙ¸q£2·{÷î}ûöõGe¢æø;)ø1Ä<ôtÑ¢EK—.Uþªü8ÿüóyäe®— ’Î]=ˆx…ɇCEŒ¨#œ6dWÊßëÈǦøaª¥>[·n]¿~½#ËJ†|}ôÑ‹/¾X™e”0’5? á ÐË…V “Ç10 £Ä”ZòùÍo~£ ‹ä”vØaÊøÏÚäȉ%†=Œ„wCàAû o€NnÈî^”vdã“ȇ6¡ $Ô[&·¼)ùذ©¬@<×&ÿèäúè‹Ï>‹…|øí·mÛÖkŒÎÕ¡C>àæÿܸFÃ&àÇ(é$ÒSþ“þøãkÖ¬ñúI›4i2sæÌÝwßÝ«€R>äÓ¾}{9ÂW=å,sÅK>þù¤D2ü€�`öÜ‘}%C>×^{íwÞ©Ì2M>^á ”8ʼn[Êù 4èÕW_µ_§‚ª«««ªªÚ*íóÈrñ¬ãB”ô£N"â¿!ïlð}ÇðnöPòšêüW¦íƒ€@@;�Bø2"ÃØ“!Fãiÿ4&3²c2üõjjB�OÒ)@ÅÉg«´’3ùp½ôÒKC‡õ2û°ìðbß}÷íÒ¥ åŸ@#é@T`|²Œ‚PÁDþ ­^½zÑ¢EÊÆÄ_œ³Î:ë±Çó*à%}òñ¯§Íƒ4“œ¢êÈ'=¢ðÃòù‡eùuëÖùÜ©#J†|N=õÔ_|QQ»®nþäƒ*Rò<x01دŒSA½÷Þ{G}´œÎ¡æÍ›3[^m,8Ÿ¢¦Ø‹Q—w6ˆ=ˆ@hò!jü)Ë™‚é1ý.å0È lCXÎu–šzXŽ”ç7– × „ Wêÿ¦™âŸ¨ØçŸ~ª$ŸÁ§œòÏþSçúTýúõ›<y²ÿ€ÿ×Z·nÍß ÊÊJÙ«ÄgX©9 T¢=õ¹Ž\ Þ\ÿoç¿ï­6oÞ¼aßÙePUUÕܹs!bx éS½/^§þAË+RE>Ì÷ŸèÔ&ùÈ5ñ×ö?øä+á§¾¾¾¶¶Ö‘e%C>^;sÛ$ºÂ×4ãà~œÄ-H> bsäSlúÃþ  ËDÞÓXú¤ {ʲë|ø ë|p34û`;@Wø4’v5-#‚Ë–«¢ÞÓãL~¨L”›‘L¾!ˆ\Ôï GÙ)CLLÊŸÂÿ7ôOôIבù„°ù°lðå=zx-ÇwŠKMš4yå•W¼VáúËŸ|BÇv3z,ù°øP‡9òI±døAñÿ”#ûJ†|vÛm·eË–)jc‹|À¡ˆNñÒ™](œ!î+ÅH>nOjÕ»wïÉ“'Ëé;í´SEE…ÚUɨÁDz±(D1ĺŸ€=4ÂòO™ì®‰qèwḭŒ¬ù¡–ƒŸUäy2ù1T¨ÉHX/„üƒCŸßD3Å+Ñ'ÝGŸ}òIŒ6®?üð¤“NÚ´iSˆÏ:é¨qãÆ×\s͈#Â}\“|˜†·žµÓäãɆåÚ“x`ÂDŒ\ U«V ,{/9ò‰K^ðÃÛðºº:ŸÛä¿°2LŸ,G>úJ€|80ð‡@9XO–|(ö Š—|Ž;cÇÚ¯Œ“¿6nÜXUU¥œÅiÖ¬™ì¥cÈà“rÔ‰n‚LqWÓF$¶5Æ8¡~nÈ?t…O™$ù»¨}m>LØ¡ëS» † Á4D…‡&¯ïõƒÈ§Ê”@‰>út„xɇëå—_>ï¼ójkkÃ}ÜÉG{Î:묇z(ô ’Ó`ž@è´¼|°bÅ £äóꫯ2dóæÍÑ/‹jjj”“Î^â#×µk×úpä£/„Fø‡?>‹îX¶#ó/€r䣯Ègîܹ;wV×& ò¡ØŽ|’Åæv2-*½ñÆ'žx¢œÎEXäCUDØ“ìeå, æÆûÊ<tWSÜÏGl­á@øv´ù0il‡ #M ¥% Ç)bᆧ”‘xEëü~>ùøãØÉ‡‹·i§žzê¦M›JiH”¸8ö\uÕU#GŽŒròéСƒÛù"Óä³jÕª=züì œŵÿë^Þ?à�3Ã0²(¢" ¢"ˆ¸KpÁ…¸ ‚OM$jâ{.à‚{Ü5n¸ ‚((îFÁ I\q **²¨D%‚(ðñMÿ+·ìãéÚn¯Õ}ï­ßg>÷S]]Ý]·oOU}ûœ:%½'©ˆŽ_xáÿåwÞyç÷Þ{OS „åÊ’í˜6mÚD‡‘zg6ú¿éÓÐmÉÇ¿R úÛÐ_H^³äÓÄ iÍ­×Uºä´³2£3Ï<ó†nói;È<¿±Jˆ|R$(é.3 {˜ýþ÷8ìa L>Ð2pó�9aûOλÈ$TÂÍ )‚ˆ#A¸À9‚M NçÔóOøÑäsš7wnäCµxñâƒ:ˆŽY¿ÿþû(ç±"…f§yóæ÷ß¿4æJ ù'"cž²$*:ì{ë­·b9UDÕÖÖ644Hß»©tâ‰'N™2ES�Þ %Ä3åD>D€Rˆp ÿŽÛo¿ý‡~èçä–|ü+ò¡ÿHôßIº+Q„àó_îJ¯ŽÇhò1ˆ3›Mò¡ÐË/¿l¾2VzõíÛ÷Ÿÿü§˜O±‡ó�¶ØåÀXØGµÆ­¹ØnÒ–óêÒX¸]u¼FÈa{Y“™¢S¶ö8‚íoBIâ²ÔN‹ÍA‰ÂÏË/½$%Ÿ#>ZØ3hÃ{íµ×^yå•›6mÚ(\ÅÊès^UUuØa‡Ýpà uuuÑO¨'i„)óB— å¹„ò™?þ¨÷3£Þ½{/X° Ð!ô_uìØ±zÿRëðH~~úé'i ¬SN9åöÛo÷sfK>þ•ù\rÉ%*«º1òÁÝô“|ˆ×D$ŸÔ±‡(Èg=öxõÕWÍWÆJ£uëÖÑA†ÔºÝªU+<°Ž {ÄL©ËVÆñ&Üá x€|Ø+¼¶)cx’—)番8S–a³ qÁò9ªá 8˜v GÜ‹jDÁ¸Ë×ÄTtuTÍ×3±æ¾øbräôvíÚë®»Ž è�‚þgùŒ€Tá¢?\MM }$?üð‰'víÚ5®3‡ ¢E  äC Þþú׿¦;?­]»v¯¿þzçεjÕªnݺékÎÆQ–|ü 쟛6mÒ;zo)Ì 2ÄÏi-ùøW ä3vìØ»îºKRS®nx”“Ó†7 >l>™%ú´½ùæ›æ+c¥‘j%q’O– > !MìÔİG8` 1¼¶üpmí@U+iË9‡íb{p&ŽR€½à �v2á4u˜…œ•$ ¿8ÕWÓäS½ô I“ýo¼ñÆSO=õÜsÏ-]ºô‡~®\áÚ¼y3ý_ ß=÷Üó׿þõ¾ûî+ب@äCdÌS®äC/1~üøiÓ¦­Y³&®súmÍÚ·oÿä“OöéÓ'Äრzå•WôeDc¸^N>Lô¦IGnXô–b'·ø©J–|ü+ò9à€h%©Š%Ÿ°’þÿÐfîÝwß5_+&Nœ8iÒ$1Ÿ›ä“eìI1ô`XÒóžêƒ[Ü8Bÿ”V:tó±†Ã©gJ<ØÂ#rž ×%h�ш$@NyÁ±M–V¹Æi¾8Ó‹Ï?o†|DýøãÖ‹>ç-[¶Lú*Eɇøvu+3òazúé§Ï8ãŒï¾ûΘç1×ÔÔ :ô–[nñ¿†§§žzêøã§ÕÖS ¤²äãS#FŒxüñÇ}¶äã_)OÏž=-Z$©ŠYòáÂpcÜ>–(ùì¸ãŽï¿ÿ¾ùÊXi¤j›¸I>I“O0& Ô!Þà€@Ü$|‚›… /VOZg.G:Úc¤øM1\ÎJñ Ç3Ü©ˆ‹1 á]œIŠx‡Øw.ç §ùú¤@>›~ü‘Ë4C>V©(ùè3“N˜$RøozóÍ7gÍšõᇮ]»6¹ÑmÊ:vì8hР‘#G¶mÛ6Ê©h%»wï¾lÙ²¢%ýÃ%?¢ýÔ[o½Õ»woŸå-ùøW äÓ¼ysixûL‘†Ròñ¹ÂTÒ’’ÏvÛm÷ñÇ›¯Œ•JôiiÕª•4 ^É'kŸ,ãMÑ:ö°‰=xa•ÃŽgͼ8`ξæúLÜÒbD!^[д<T• ‡ÃÈÄF(\DÜ9?øðœwyV %vŽ‚¸oýÂsÏYò©(ù'B<œS9äS¢š;wêaÍK"ÿ‘gÅ’׿ÿýïþË[òñ/Óä³jÕª-·ÜR^Sä# i-þ¯–:ùtíÚuéÒ¥æ+c¥Ò[o½%mèS‡c+E¤š¢Ê>Í™}`ISNàí†?òœ`Eo7)ªr ·rÞé7"D,˜Oð.\€xÛ+îTD€n—˜#fÂIpqËÃKx~Î)ùŒ<ꨙ3gŠwɪÔå‡|ˆoæ±ä“)sÌ1O<ñ„u"5¦¦M›~øá‡Xòñ/ÓäóÎ;ïì²Ë.òª$.p-ÌÏãê�£‡R$Ÿ «5[%­›nºiüøñb>—ƒ¾IƒOêˆ1-ý.\‚þ׃µ'ð<q n°ñ“Oˆ_klE8QÑ‹È!œ‹gœáÇæ ò|Ë!_» I‡mG–¸ëâOΚDÛÆçf϶äSQÒ“OóæÍ}ÒŽæ!–|‚hÆ ;ì°ÃòåË +S´ºä’KÎ;ï¼@GYòñ/Óäóä“OŽ1B^•ôÈÞæB5ðmiD ¨7º+™fŸ|ª««‹ÎJ´2©ãŽ;núôéb~UUÄønÞÑÎx’‘tÑzJ8ª5˜z¸ל5˜µ l“#ŸÐØCx°½~Œ0c®\‚3aLÉê€ €nú¤uOEöp›Ïþío?nØÀÝK>e¬äC„‡JÜ•hbåÊ•–||ê³Ï>£CØÿûßiW¤ÌEÞ!C†¼øâ‹A‡Ä–|üË4ùLž<yܸqòªd•|´b:&ö™h}JJ>ô{Q0Kú®ZùW=–,Y"æSFe‹M%mðI”L’Æ›¢×U%š6mÊþ÷ÿ° oœ·ò!UKú„þQ``'µ–pÀù8µj¼ÈQ Np­¾ ã®Î„çópu˹n{"’=ýä“?SÚ,ù”±|’ɒÛ%Ÿ@úðÃ÷Þ{o ?†Ç•#Ú¢öìÙó­·ÞïPÿ²äã_¦ÉgÒ¤I'N”W%KäC¼­d)’)X¨CüÿX%¡o¿ý–¶Ò·ºº:Ÿ–„¤ >Y0ìÄ‹=ÌtCÅ[3þÁðƒýÜ0ÿäÐ2Ç8Â5G>ÒVË?qoX¤ Ñä¢kr‚£šæZP 烔CñÜ�ÀD<ÃcÇ>ñØcß‹S¢óùÃŽ8Â’OYJC>]»v ÕÚ’Oµ|ùò}÷ÝwÙ²eªQ‡UhÑî¦wïÞ”^jjjBnÉÇ¿L“Ïé§Ÿ~ë­·JꑼiB\¾0‡<[Äj”ùÐNHOÂʰTk˜Ò§‘5sI|2eÌI.­çq’$Àá '¸©>MÐz_œÍÇÏÏ¡)ÆaOÍ´Á Ñh£)Æâ©DCê<D1îªÊsðƒ/MõØ#¬½m-ù”¯Â‘4Ó�ó°„%ŸÚ´iÓøñãï¹çžŒŒÊCÍš5;ꨣ&Ožz‰aK>þeš|FŽùÈ#HêaŠ|˜¿†|¸A ëÅK”|–.](6ˆUrºôÒK'L˜ æÓö®yóæ$%ƒOy ‘žØ¿<[Õ”a3ûàØÖâz¦Û�›}XB¬‰ÿU&GADæx–ó†1€òb¬jîœø$ÁêB\‚›ÄAa`/Õ£³f}'¬XOÛßC?üÁï€U©Ë?ù5íXò)½ÿþû£Fúè£ !ËO´‹©­­¥Ìsøá‡G9%ÿ2M>{î¹ç«¯¾*©Gò®n¤ð„ÁÌæœ¸VJ>ÄÛÍ‹äóÓO?±•L­¶O©ÈgÁ‚þ—Á²JT‡zèO<!æSì¡ð“)ƒOê$¨’~Ì>u�{°å¥áÝ`¶;jUŸÐ98ÓA± ‡Ûä„+&ï¸bbk12q 8"¸ÉIKrW§zxæÌµß~Ë]îÿ5m:â°Ãxàñ>X•ºüñM;fÈ’OD½ñÆôF½ýöÛ–B¨iÓ¦´÷ÿÓŸþtæ™g² QdÉÇ¿L“O÷îÝ¥‹Ì îå.7¬!^ì!%E>Ò1 Õ+¯¼2pà@óõ±Õ¡CiñššÆá\~BŸò@£ üÃù¹IÉGä  Z؇3ûH+%‡ Kp›š;ÜO"çb'a›Ø‚ ¥a­œ,âÕÌ\³z5÷íšUUýúÐC§M›–tƒoe^zòÑDµÇ<–|²£M›6ÝvÛm“'O¦Ï€ã]Ù ‹¶{¬¢‰=÷Üsܸq|ph÷6N–|üË4ùÐæï‡~ÔÃ8ùHóáªï2K”|æÌ™³ÿþû›¯'Õ¾¹Â¦©|J ‡B˜}˜¥Ö3ÅÞnÛ Ì>øv{S‘OöâµÛ°]8Æ–8"äˆöæPLmÇuT×àˆHu~îZÜâB,ýàôéß p[TW2bĽ÷ÞKo¬ô»X•®BQ<Tb¸–|½™Ë–-£OŠ+¾ÿþ{JDi×(C¢„Cÿ :tè°ÝvÛÑÿˆØ½Ã‡Ÿ={v¼çŒ(K>ÿÑwß}W[[+¯G–È'ç]Èà°‡­ä“}òyä‘G"zŽZÅ"Š Ã† óYxƒì|’£—ÐéfÚñ`ã�·°)Æžœwªk+0ù$A­ƒÿ©0€jˆLx`—óF2ÀÇE#qàHP{(žïeééÓ¦­^µ Ž¥€EkOïp«ººîÝ»K¿rɉ> µõèÑcûí·4hP»víÒ®Tj D>Dxx¤ŸI',ùX•Æ7yòä´ká%Ÿgžy¦ÿþiW„—QòY´hQÏž=åõÈ$ù÷h#ÒÿTäsß}÷p æëcÅé/ùË9çœ#æ7kÖ¬E‹\f©|Œy¤ Ê?´�›˜}8ìÁ-— …a.^Û‡ÄñKIs`ÓA>oıaêRXLºKÊEbK¢: Þ%åŸû§Ný÷7ßÀQÿç8e—=!´wèÖ­Û‰uìØ1íJ™ÖòåË  %ŸÎ;WWW“€´“4Ñß‹’X[ÚÐ$ý}}+«t5}úô1cÆlܸ1íŠü¢víÚ½þúëôß?íŠð2J>óæÍ2dˆ¼%E>,ª[öÉçÖ[o=õÔSÍ×ÇŠåÏiÓ¦‰ù{(üp™Y0ød‡BcK°8 ÀÛ3øpf¶ÉZp{ÃðƒUô‡“fêâ6aþ´Œ¸)¶Ã!gkÂm‹†¸(tsê”)«Ð ¸¼É‹u(ÇsÌå—_Þ¥K—´«cN´7ìÔ©“”|ZµjÅP0í¨ %.òÙ°aÃÚµk¥µ5kÖСCƒ}+«TõÝwßuëÖmµ0»2EµmÛvùòå´ÃM»"¼Œ’ÏŒ3F%¯‡%ŸR‘Ï¥—^zþù盯§vÚéƒ>ókkkéØçdÙà/½„>04ÿ0o7Æ?¬�Ë(ÎìC›O b —#m!­•ŠIrhb,TÊír^ppu¼t)H‰3õ@É)÷ÞûÍW_A­*‡|˜$O˜0¶ÀÜÿx‹âÍŠ+¤»Z·nM‰‚õ¶R÷O>ⱚ2ªü7®[·NÚoÒáÚüùó)ÅùúÎVV™Ñ©§žzÇw˜Õëµë®»¾ùæ›i×B"£äsà 7œyæ™òzXò‰ ùл}Ýu×™¯Ö¦M›Z¶l)}Tèh èˆ9kŸD<â…¢ðø¹‰S}ò…TØ#š}ˆ·¹ ^%=RãA DÓ —ƒx/ ‘tHJ¼Dĵ9"ùÜ{÷Ý_#W¢J#&z7vØa‡Ù³goµÕVi×Å„Ž9æ˜2X¦¶[·nK–,I»VVEa¾K—.k„…ÔRQmmmCCᇚvE$2J>çwÞW\!¯‡%ŸR‘Ï 'œpß}÷™¯Ö»ï¾Û¯_?1Ÿ>„­ZµÂ9ÑGÌ$œ±>ó¹M9@>M «{áÖíMœí“÷Fx#jò‰rT‡Ki‡Ë'ˆ?©x‰ãœ/}Ë~Ï]w­D¯ÿ+“|˜jjj^yåŠ@iW$qÍ;wäÈ‘ß ë8•š6mzÎ9ç\rÉ%iWÄÊ*Œ.\¸óÎ;«í(û÷ïÿÆo¤[ •Œ’*ôDÒØCb%?%A>tÐÓO?m¾>VX÷ßÿñÇ/æÓ.¶eË–8§r >Q°!p°/éÃExÖÎì#z»å#G¸ŽNAøŸƒÑ4$=ƒ“Æ›HÜë&öàMª»'O¶äjÞ¼ù;ï¼³í¶Û¦]‘ÄÕ¯_¿wß}7íZ„Wûöí?ùä1ðŒ•U©èÿøÇ>ûì“âè”v‹;v|ë­·Ú´i“Vô2J>Gyä¬Y³$•°äYxä0`@f™»rtÁ\vÙeb~UA8'¢õ ^öH×È#ž0þÁó|€ ÂX~8‡7¬œ×ÛMUyŸ9ÉmÅ!‘…¸LG6íGï‡ÓwÝyç—ÿú”¬pò!×Ö%K–¨Öu(-X°`¿ýöû·°”SIˆþ:×\s͘1cÒ®ˆ•U$-\¸þ®ZµÊ¼ñ§eË–;wž3gNûöí _Ú¿Œ’j‰ÙÔÉÆFP“ò Ÿ®]».]ºÔ|e¬°Ž8âˆG}Ţ ^¼9ÞqsB6ó8Ý΃Ü @ 1¶µ~r…EN‰÷- wEéבæ$½©r‡ÃRM">@H3•œjòw¬øâ ¸%ª=öØãÕW_M»‰«¡¡á¬³ÎÊÈdÿjÞ¼ù1Çs÷Ýw§]+«ôã?^~ùå÷Þ{ïæÍ›iúûï¿OîZ´s¤ÿ>[l±EUUÕ9çœ3nܸ&Ù^«Ú(ùôéÓgÁ‚’J':¾aƒ˜œ¦6ç]Ô¢¤É§¦¦FµÓʤzöì¹hÑ"1¿U«V¸uÐeýäÄ0f¨¦èIâåöù«‚Ø$lóa9Ð>°ÆA䟑Y~į#ÍñC­~658ÚÁ U³­>§8áCBpæ;n»í_Ë—ÃIùÀk&"s¨ÓHSØd]wÜq¤]‹Ä5yòäóÎ;¯„,?µµµGyäí·ßžñ›•UP}ðÁŸ~úé×_-%Æ"Úc¶mÛ¶W¯^Ûl³MB—ˆWFÉgë­·þ½ü¥–|"KõLoÚ´)ƒÁÔ+Gô iÞ¼¹ô9©¯¯‡tBCçx&^ªñ`Î@;Íš5cmýa±Ý0ö€q˜›äà ~R ß.çÄE,JµX’#"lüárˆ€C8.Ë¡äóÅçŸÿR¾ð×±cÇV­[³émì.L‚#ΧG‰Ÿ´�m!‡($ývš2ú]t“þ_o,Èÿ‚>uëÖ­£›Ïò¥«7ÞxcôèÑ_}õý¾i×E'ú‹ÔÕÕ]vÙevéR+« ‘QòiѢņ $•°äYª®wåÊ•íÚµ3\+ÐÂ… wÜqG1Ÿ ì”s4 Nr8”ÿ0Âa–p{Ë»Q­Á¦¶7[K-?Òï"Í1ƒ=E«¡ÚÅy¾qiiÁY{Xú¶¿þ“SŸ~ýz÷é³ûî»cDqP€Œ:PSkI¡ÅƒMHÀ&‘1•&3Цø¹|ùòwÞyǧ×ÿøÇ믿ÞOÉR½33f̸ùæ›™ÓuvºKZ1ÖPæ9á„Î8ã nÊ¥••UËùlÞ¼ÏjðT¢tȇæÿ_A™"Ÿ\a-éOùþûïKGÞVfôðÃuÔQb>vWWWÃfˆakB˜º@èÂúO¢ ŽðS} ¤5qs¥-†êºÒ¯©¹&7ýä8Bt8â…œ‰Ð~ÞzË-Ë?ûŒ»J¿þý)ù 0�7V¬íʹö(ÎÔ¦! <‰2ƒ=ÜæçŸþòË/µÿl±Å?üðƒ¾L™‰öþW®\¹iÓ¦´ëòÑá¶mÛn½õÖ\tM++«J9òùꫯT¡,ùD”†|æÎ;dÈóU²bºòÊ+Ï=÷\1ŸŽ~š7oÎÒ!¦~ÆÓ�&9Š<EO€‚¼Aã€C¨â‚½Ž GᾈøÕ4ß:®’Aë Ïq¼ñÜô 9Pà¯7ßüù§ŸrgÞu·Ý(ùìºë®pZÌ �9*ò]ÿ8^›dƈ=þÁŸëÖ­{üñÇ‹ÆSš1cÆÑG­/ceeee•„Ì‘ÏG}Ô«W/y%,ùD“†|~øá‘#Gš¯’ÓØ±cïºë.1¿E‹Íš5céˆoè �Œ‘fú$™ ›Ì¶¡`US.Ά.“*¼µøÕ4·"®’E7#p¼aˆ@>�H,qËM7‰ä3`÷Ý1ùˆÔÄÁÎÁäƒQ‡&ù°OÎ'™$=bæÊ•+gÏžM´8pà+¯¼¢/ceeee•„Ì‘Ï?þñÁƒË+aÉ'š4äsã7žqÆæ«dŤŠä^[[KBbÖàc¸@ÄÂ6ƒÕ´iSÞ û¼ao7˜äÓDX šâÂA 31rNì$fr Žãõ…»ùÆ?[¶Œ;|·=öعoßþýûã3àO0q¦\ÀQÄ9`³~"b†¸sçÎ]¾|¹¦o¥ÏÕÆm1«²×’%Kzè¡·Þz+ÑØblÊÖÎ;ï|ä‘GÒÏ„®bU62G>O<ñÄ¡‡*¯„AòÀM9w²ryã]FtÎ9ç\uÕUæ«dÅÔ¹sçå(¶/ˆ6Ó0€æv…³fv¢ãPþñ6ɇü¼`k7rn„kü®È'ﮆ,~/Í}ð¿+ÑM"ÜG0ïHb ³ÆSJ>{ì¹gŸ~ývÙeR Ø'C—FoüŒ:Ž×á–ùé§Ÿ •†3$„=* Z¹råœ9sô}ëüùó�­¬ÊO‹-3fÌâÅ‹W¯^mf=MÚÕ××·mÛvòäɻᄏ+Z•¨Ì‘OCCÃI'$¯„%Ÿ‚ÁŠ”|Ž;î¸iÓ¦¯”Õ´iÓ¦æÍ›‹>ýÉZ·n in—XX“‘.’+±pr›‘�^ØüÓÄ»žÇ?Ðtˆ_Jó}ýïŠñÀ@§òy’œw%hŽ(ù|*,£<pÐ L>ÐÌb–Û^ØÔÌùášh°ùHá§(ç¨òU¨Ãí¢—ž>}:e0éýdw馛núýï¯*`eUÒš5kÖ©§žºjÕªT®N»×óÎ;דּÎJåêVÙ—9ò¹îºëÎ>ûly%R"Ÿ Þn¬--ò2dÈܹsM×ɪ ?þxûí·óéCX[[K‚sŽ~3uÚ‰É ðÏÿCjRXÕ‡£<ᇛçƒß˜p—: qN ÍÑ×_/’Ï ½ö¢äC…9¨­( é†ó‚eáÝ ¡ biÕ%|ækPGÜõÈ#¬_¿ž¨õ‡?ü¦€•U‰êå—_9räêÕ«S¬C«V­®¹æšßýîw)ÖÁ*³2G>'Nœ4i’¤ÉcqɆ2ì“ \Ê›|ºwï¾xñb㕲úþö·¿|ðÁb>„´Ž>Í>í„À!3›,¼žÛ#NøÁKú�ðpM)x»9§¯ØË®ˆ›Ñ àËÏ®»N$ŸÁC†`ò!hYU°áÁÄíâÚd0³¨àSPtìQ¡—ùÔSOýûßÿ&jxà´}а²*EýðÃÛn»íŠ+Ò®iÓ¦Í;ï¼Ó±cÇ´+b•9™#ŸñãÇK_q#¶R;~‰›S,ÍQŠäCÜ�Gœš5kF["37ÙŠÓm·ÝvÚi§‰ùÒ:âKw“¬’á¨2ÍðèðÆY†E›Løà-?âLzW¼›q’ϲ%K¸3ïµ÷Þ}wÙ¥oß¾DX|Y¢ evó Žã:¹1›ËdS€QìlU¢h)ÿà]O?ý´ÞÕg=öxõÕW5¬¬JQ_|ñ•W^¹qãÆ´+òŸ¶èÈ#œ9sfڱʜ̑ÏÉ'Ÿ|÷ÝwKj`dPN�L=œ×~y“Õ¿ÿýo˜UbeRçŸþå—_.æSì¡ð”s4›iÁL8äg3Ð!šbx=Sp{³žíƒÃ»±\øÕ ;[ /×®Ð%Ctr)ù :”‘¦œ�,É¡¨-ŽkÕ!Blk{H¡äà‡5Úãx?áDkð¡ŸEÉgçwþç?ÿ©)`eUŠêÖ­Û2!´IZj×®ÝòåËiÞvE¬²%sä3jÔ¨3fHj<ùp!­Ë‰|ðÝS‘í_mœÇT4zôè©S§ŠùÕÕÕ¿úÕ¯b†–íè3ã?8 ûpqÞÀù-öÉ bvƒDž1=Q ÈÏ©®¿öZ‘|öÞgJ>}úôa›À ¸ÕÛ^‚àGšp¼ß41¸tŒüÃí²äcUZ»vmÏž=¿þúë´+ò³Ú´ióì³Ïöë×/Æs~õÕWóæÍ{ûí·?øàú?¾yóféDƒÊí4«ªª¶Új+zÏwÝu×n±ÅiWJ"säóë_ÿú©§ž’ÔÀ ùÀ2>Üð… W¶¥K>0àDûàƒ:È`¥¬~–~1Ÿ COâcÜœ)˜ Q iàá6iËs'ü`òÁ-†ÞM5E0/„)O{bäœ$àJE>ýú÷gäÃ|8ì!hJæ à1Gô|#^o7ÌBàù{TücÉǪõá‡:ô›o¾‘îU ö’…6oÞ|úôé#FŒˆ~ªo¿ýöî»ï¾í¶ÛV¯^M+¬_bE{Éêêj:Bîß¿ÿøñãéO÷®ý®Ì‘ý3O>y´FG-Jˆ+}XÏwÜ1nÜ8ƒ•²úY=zôX" þˆ»˜O”—îDÄkÒ1²JB”"ÿ0ìa´áݰÃX~òÞõLs(¼5q_Ä‹:©cOˆ]¸îškDòºï¾ØÛÈÌ>ß@9ja/8æÌÍ5p¶I\.J‚žzê)K>V•¦7ß|óàƒ–ÆöÐ |ýBƒŽWi«~ï½÷wÜqŽâ´nݺ &444lÞ¼9 ó—JNZ´hqõÕW{ì±ü~dŽ| 0þ|I Ò ¯‰¸äiÜ“qóhK‘|&NœxñŬ”ÕD‹æÍ›ÿøãâ®úúú œCüKˆvÄ&on±Å,ª5^ɯgÊ9¼åÐR`¸Ý ÞÞ= ؈y|VÆÏ9éçµù‹”|úõïOý¹Ü/]†âåqžAÑ®Uðƒ›ké¦hÒ¬ùƒzà±äcUáJš|‚ŽN>?þø˜1c6lØ`™'¢èph»í¶›5kV—.]Ò®‹AòÙa‡>üðCI ,ùD¾{P[N'tÒ=÷Üc°RVÿmýÛ´i#æÓç°U«VÆ bNÙÐŽ˜0Ï?xa¼°i¯8[17Q0ï lê$„=±˜ÊæÞnX…ØÖÐáMÎáx½à0±pðÓ(,õÃvá Ф;BØ=‘bücÉǪUNäC„ßÿþ÷Ó§O_·n]ˆÃ­DÑV½eË–÷ßÿ!‡’rMŒ‘OçΗ/_.©%ŸòC>{íµ×Ë/¿l°RVÿÑûï¿ß»wo1Ÿ>555AÉGµ#Ø$D;>J‘ð<ð|àa”+̧æÐl"›êãçø?$–]Ñkèçp͇Eµfm,-9r›²hÔœå‡3û8(¼¶ÿ€;¬sÈòC|ð%« TÙÏæÍ›?üð¿ÿýïv>OìjÖ¬Ù7Þ˜î säÓºuëo¿ýVRK>ä‡|¶Új«,,+VizñÅ÷Ýw_1¿iÓ¦lS¬Ð ”4Ø$}TŠÀŸÒæùàðÖÜTŸ¼wU ?¤XƒÐ’qìÑœêºk®Y*¬¡ŒÉ‡‰ãŸFaaÓ o ‡�Þˆ›œµvqäƒ=ߊ|]”T¨ÃeZò±ª@•ùÐF`Ĉ/½ôÒ?üè@+Ÿ¢]í=÷ÜqþU™#Êy›6m’ÔÀ’OX‰·NØš[¿~=[:Óʘ|ðÁßüæ7bþ[lÑ¢E .3ùd‡[â:*þLq=pxÃÝ`aN5 Lúûàóvù?Äÿ®× ]·kÿò?äÄ»!G0ûˆi˜Ó(R¦â]Þ‡‰ÃÈdŸ\Q#Ñò%« TyÏYg5yòäï¿ÿ>ÐQVDšyóæí¾ûî©\ÝùüôÓOªÅ¤,ù„–Oò¡zï½÷vÚi§äkdõ‹nºé¦ñãÇ‹ùUUU…ê9G³#¢˜¤±€Iþ3Y³Ð´iS�tªÆáÍ'ùÄHG±ïŠ+­!¶¼×õH7YSœ+Ø‚ˆCA^p‡Ñp·òi 5T¦bÉǪ‚UäóüóÏ92³s{0›Á ­\¹Rt1 Cä³víÚV­ZÉk`É'¬Ä[}?§GyäðÃ7R)«Ÿ5a„K/½TÌoÑ¢·¶W¼ä“4Ø$q*ü£/ó«‚ÀæÃÜÞ°ÃómãÜÞX_ΚšÉÎæÿFqéx‰ñBáÎsÍÕWëɇIÃ?ü8H¬€H&8Gœóƒ}Þ8³žÿí<ì%þ >xóÉ'Ÿ´äcUi*uòÙ¸qc×®]épÜÿ% «Y³f¤à3Ï6iWÅp{i'E ”¤‡³×=?ýô)´›7ofùÌ!Ë|üºý÷ßΜ9†/JŒ‘ÏŠ+:vì(¯AòäC ŽÎ”óŠäƒ}aÉ‘ÏÕW_ýç?ÿÙH¥¬~Ö)§œrçwŠùÕÕÕÐl1é9‡D›Æ61ž_,Ì:„aý]Ø; Õ<`!vÎóÍÏw÷y‹Âñ Ak%Mû$,L\ŽãZ{8̆='Äù?"ö0ÑñÔòSºäCG6 ,øè£¾øâ‹Õ«WÛ@½ úÏKÿëÛ¶mÛ¥K—í¶Û®wïÞliH¥N>W\qÅ¥—^šÙé=ì)?0æÂá€Gõô2æþa Æ? ~¤ëp$'Úª¿ñƻɋcäóÉ'ŸÐÖD^#äæ/sä#Â)qòqAÆwÇw©”ÕÏ:âˆ#}ôQ1¿¶¶–óüLˆ|Rÿ§ 3I0’&ª5`G>bTë ä“ìI¢¶òÙe—]ˆl9üh�£ÇE8¤‡@À£G0û„¶üdŠ|Ö¬Ysýõ×744°—ÙìÛ™¹tÉ©ªªªY³ft,Hùü´ÓN;ôÐCÙ[v+?*iòÙ¸qc‡¤¸²# ?"ù�ö°„æVÃ?>Ã�!úÀ§B>¤öù³Ï>3|QCäC›xqVëÏ5Hƒ| @“Oò!(øO)’ϾûîûüóÏ©”ÕÏ:tèܹsÅüºº:l‰ÖsŽf3ã`ã33#üƒ±;Ç29�Ëï–Gk›²æ®gšêÄ‚=á¾Â_®ºJJ>}wÙ¥ÿþÃAŽ˜æ¸29ó Aä#F;pd–âNò‘"3ø°]0>ðC>ì3#äóâ‹/ž~úé‹-"‡ŒV¤`Ÿ§ÿãgžyæÙgŸM‰(íꔀJš|f̘1vìØŒ‡±æÈüG Ã"…[]ôÕ³i³Æ‘IÏì³`ÁÃÑ ‘Ïüùó  ¯%Ÿ°òO>]ºtùôÓOTÊêgõéÓ‡þ?‹ù­[·VŒ¥9 ‘O*´#ÈÿH >b„{€vp„khI47ÁÏýñ™Žx•Q‡K_sõÕK>ù„xEɧO¿~œoƒxpšƒŸFoHkâå.Û0ù8ÞPob„ƒFù ÑðZjêÉù¼õÖ[GuÔçŸn'¢(ó´hÑâž{î¡cú´ë’u•4ù <øÿø‡ÿ“§")ù€åÏ>•ãCpèÅð“–ÙgÈ!Ò×ÄÉÉù¼úê«{î¹§¼¦È§ Z Pš‰”8ùEx7úøánz‰U¢Úf›m¤6Ü6mÚàM=çX¯IŸÊÿùÍó¾ £àÎÛ Oäb»A3‚½ÝâE.c±ñê*òÙ¹oßÝvÛø¶öàt£wU¢žxƒÙ†3øäîØãkû@ä7ÑÿMcðÉùÐ˸qã|ðAfª²ŠEÕÕÕ¿ùÍon¹å;ÿG£Ò%:–«««Ë~$k˜êч=úÄmÁÔƒÍ>æÉ‡VžPUñŸ“!òyùå—÷Þ{oy ,ù„’꾩[ôÑG={öL²FVÑftÍš5\&ýÕêëë¹Í&‰uüš5pÊÿ`òa m ¹àl>\x·rxÃ͈¼1ƒ=ájò—«®’’Oï>}` ŸÀÃÄY³UÀƒI¤ØÛ¨Xí´¨Ø+ÒÌ’ÏÒ¥K÷ÙgŸ/¾øÂšzbWóæÍwÙe—gžyÆz¾©TºäCk>lذµk×ú?y*b6Xt›³ö`æÁØLh�ÖŽÙ‡˜'-³í2æÎ»×^{™»¢™öñ…^Øo¿ýä50K>ØáM5d)iòiT„w{ì±Ç=ôЄ+eõ³èO@Û&ñ+}ÒZ·n ›zÎÑl–بÒäÖ ÐŸ Þ ¹À>oyo„7± ÁžQÐ%iRJ{HÁ泸0½‹’ÏN;ï¼Ç{@Ž~48$ÅâíÝ!›€ …ä9 jD¡®9Ÿ7šIÛ|v8ãŸL‘Ï‚ (öd|ŠvI«Y³f}ûö¥£4ˆ&l…UºäÓÐÐðßÿýßlÜŸe1›OË–-}’ÜvÜ0BƒöSA¤Ð¦H>¤°zìµ×^kìr†ÈçÙgŸ=ðÀå5Hƒ|¸y>•@>—_~ù¹çž›p¥¬~Öúõë¥ësѧ®®®6³O>I€S6ùÖóa¯ÓXš#È!ngÃÚ hLØÙ íó΄HG9<‰ßTLÿ媫¤ä³cïÞ{î¹§k*¡á‡pp¶Fo¨œÆðƒi‡C Ègƒ)ÿ˜'ŸO>ù„"¥Åž¤UUUE3?üpÚÉ¢J—|Î;ï¼+®¸Âÿ™Óx»á×@>Ìa ^Àá7q`è†4gö¡Ÿ xRqxëׯßÛo¿mìr†È‡v#FŒ×À ù�ó°¨Öª  ®wÄäÃ\$3H>Ž"ÈÁñÇ?uêÔ„+eõ³þõ¯uêÔI̧^ÒWÏ9$ùQlŒãÝ ™Q'vþÁˆp�“| Îçê&5cò1‰4šSéŸ H«Èg‡v4h níÑñR‡HA€7Ä»þ)LìqÜP×üÀ.<í‡qx:ù|÷Ýw½zõúòË/ã:¡•F-[¶¼öÚkÇŽ›vE2§päC‚ðLBä3nܸɓ'û?sZâȺ*xI‡{À|â¶rtø ­Å˜í“ ùÔ××ëÌxeˆ|}ôÑ#Ž8B^ƒì‘O.—_218.EòéÛ·ï;3p¥¬~Ö¢E‹¤³ªèsX[[ ›%D>q Ž3Ë?ÌÚ#.æÓDXÒ‡ òÆa6 ½ñ¦U»Œaμæê«?ùøcâ%Ÿ^;î8xð`¶xX"'Xæa—!x"Çë×èü¦²ÿ�ð�öài?$%ò9äCž{î9X‘]#ö|ÆuÝ23ä(*¨Ü ü UMM mäÛ¶m›HåJV¥K>Ç{ì<àÿÌ)JœêäÃÜšˆ‹=šQ"³ö�üЦÞHfú¥L. kˆ|fΜyÌ1ÇÈk`É'”4÷Mä Y³fßÿ½*â‡U¼R-`E[+Úe¦ž|½¿O:3â©’@Xø‡y¸ý—WÀ?œÁ§‰,¼5;$0ÿø¹™>ÓQ{4WüËUWIÉg‡v¢äšyTùâ.ÈæQ™} ›€ÝPo8ªµÔçM øF?Ÿxâ cäóôÓOÓqÛºuëôÅhйsçêêj:lbÃ#Ø}ª2£^ô| &ô¡b?(íѱ—£xuȉ¶Gqă>X´dE©tÉç7¿ùM©üšRòaÝ#쌀¤vÞ]êæù@‚>ÿ8¼µaò¡­“É+"Ÿûï¿ÿøã—× dÉ&ü¨¿¨ äCµxñâîÝ»'V#«_ôúë¯ãiÜ Ú`Áüñ, ò‰%3SüÃ>9òÁÞn h7Ä@)ص�ÃxÒJûü±bÁRðvÓ‰<ZUåcà A´ã¨ÅY{òƒ‡¢åˆHjù1F>´[o½õŠ+4eè/²Ã;´k׎¨¹"òIôÀˆ†ÏÄÆ¿ûî»FÅtY,Ú’/X° K—.úb%K>¤"Öq¯á¸˜|°ÙÇ’O"jhh8餓ä5°äJšû¦jµmx7cš;wîСCÅüÐä“\‰ñTäxgƺL;œÃk7pƒ[âš} =ñscL‹_Pš±7P¦Š|vìÝ››ç å\ÿ7L>,S$âmÛ¡�‡:Ž0Û§…}ÃqÀWªdŒ|fΜ9vìXÁ‡Þ„Ðf'uæ) ò!…ôÛo¿… ~*ÑàôÓO¿á†4e*M–| HC>à›€É‡¥ñ}Ãïq ¼K>qê®»îRM´äN!Èç²Ë.;ï¼ó’¬”ÕÏš={öðáÃÅ|úïݲeK–ÖpŽ˜“Aò ‘™eþòã‡=œÏ[εù°R!Ÿxi'ôOÕWH#ôîÓgàÀlS?N 7Ò•"A9dâLA,c^‹6lêÁ» ˆœ1òéׯ߻ᆱ)лwïvíÚáûñ3#‡ûIDA Õ«W…ŸÖ­[óÍ7ú1}EÉ’‰äÃÂó4q#\³è£¸c‡C‹VkfíaS}ØwýúõÄllëò$ŸÛn»í´ÓN“×À’O(iðT¦ÿÿÓ¦MK²RV?ë±Ç;üðÃÅ|ÚfµhÑ‚¥S!Ÿ$À&èÕ3Ë?MÜ`Öl"瀋pÐDá ÇvK{4÷_š±WŸyåå—KW2Ýe×]   ûÏ÷y ú¹ ?ó`òÁÀCÐ\ äÃ!†@ŽêÚ ù¬X±¢W¯^ƒO«V­vÝuW|,ùø?–R~ÎO]]Ý /¼Ð§OM™Š’%‚ðnxè')øl3òa°*Î4nx’ P*fŸò$Ÿ›nºiüøñòXò ¥äChýÛA«¸DÛPÚ’ŠùþÉGµ™ºÎÌ,ÿ°&‚¶ð:ñG>¬õÀmH´ž&è~Ä[Qô^…HKÏšv"þÖW\vÙÒÅ‹‰W”|v8°oß¾ñ’X’x3%ÈÎCdqÞˆ`öÁŸÿ‡6åÈ'pÚ ùL™2åôÓOß°aƒª@ÿþýÙbe@>ªMM" ùÂ;oJ•ø¡ Å•W^yæ™gª Tš,ù˜6û°„”|0qó|wj"[Ì”ŽcY"-‡·ò$Ÿë®»îì³Ï–× Ûäã /pìÒ�” ù½i6¼[ºš6mÚ 'œ æWUU5oÞœÈ~Á²'Ÿìó8¼A¨ƒ¼°’)güaæ®I)z£’H'D;~ýË&MZ¶d ñŠ’Ïà!CvÜqÇp#Ú@äƒÛp–ÃMø! òqÐ<G˜óÃÍóÁ–ÿà±Çûæ›oˆZ±ÏÑGýÐC©öÒÇfZò —(jö9ꨣfΜ©)PQ²äcFŒ|X‚öPô“™w`ªO¹ºIï<n²€|ÀáBˆ%Ÿtà 7¨Þ‹d™|ˆÐ– ù¨¦ú|òÉ'=zôH¦RV¿hêÔ©£Góc$Ÿ¬MÑL d‡š U}XsӬ݀ȡ‡7v6~üß´¸ÒQЉ™—^rɧK—¯(ùì³ß~Ûm·] mÄ‘.F Gö�y‚Ö3Õ“ãu™?ô ³fÍ2@>Ûo¿ýÇB PÛ¶mûô郿>w£,ùM¬[·N¿ÌÈN;íôÞ{ïi T”,ù˜çðF“QÁæ#%–Æ­–£0ûžêSžäS¢Þn¤ìÈçÑG=ì°Ã’©”Õ/ºï¾û~ûÛߊùáÈ'#è13¥ææíÆÎì“—­ê“—…·†óCZs£âJ£ýÞI_üÙ²eÄ+J>ûp@=Œ‘‘ úY ‡ebâhgb9nÀ7Îí~š!ŸššÍ$Ÿ.]º`È,uò A/Ñɇ¹Ö “:uê´|ùrÕÞJ“%cÂotPɇ~k⺺AÔXẊq,&ŸFï’¦&Í>åI>7ß|ógœ!¯Ai’Oc!zfÉÇQLõ¹ð /ºè¢Dêd…4eÊ”O<QÌW‘„âet3cD—XP‡ûä¦ú@„0ûàOl-š}ØÙòhaŸp?hÐth¶‰{ˆš|>¼k×®lÓçð4JRhÃiŵÓ~ˆ~0ùàOŽy¯ÛËaŸ3gÎ4@>´1ÑX$¶ÝvÛm¶ÙÆ’O”íß׬Y£qxkÓ¦þ‡®(Yò1&föiÙ²%žêÃ|š Åµ|˜D› vx³än½õÖÓO?]ry#ØC,ù¸1bÄã?žL¥¬~‘j«$È' <S439þ‰=æù�óà o¤Ð˜°Ö:˜&(¼5kFp´â%ŸX§èO”vüüè_xáçŸ~J¼¢ä3ü ƒºtéBb¶ú/É(c�n*az$,ì#ÅâF8p„ ?�?”|¾þúk¢–%ŸäÈ':ð@‚þ”«W¯ÖOëÖ­¥ýÊ”%cÉ|³ÁÚ=äC?ÁàãÈÞ Oõ)OòQEµ¶äN~î›4ÈAÇŽ¿øâ‹jdåmm÷»ß‰ùÉÇ|fìçÙ#uÔá2›¸ABñ ?àó–¢Zãlä�ón[ݽ é$Ø&ôsrÉEIm>Ã<ÇI£Õ%! cÙFç ó8ÞÉ?Ø„™ÇAKÒÂ<ð@¹’OD€‰ëºš„%Ÿ´dÉǘĩ>Ì ^Û‘‚Û?Løehö1?Õ§<ÉçÎ;ï<å”Sä50?H>Š©>_}õUÛ¶m¨”Õ/ºçž{ÆŒ#æû$ÕfŠèK5‚I*üÓÄ]ÕOòÁoxaS©·6øˆm‹x—¢¤£“LŒ˜„Ó*òÙذnݺE’ÆUÒŒU$`â!ÑèöÃ<€”|hKKÔªXò‰ œ4‰Xȇ}Zò ¤ùóçtÐA™"Ÿ†††c=¶hÉ’#‚¦úD!Ç]¬E$“oåI>wß}÷É'Ÿ,¯%ŸàòsÓ…ÃÛ³Ï>;lذ*eõ‹ôÞnâÏ ùd r¤™¥Â?ÌUø#4 \„hLD·7é%ÝÛ@šœ¢å/¾ðB)ùì»ÿþÝ»wg›â SÌLˆuà@®Á'ÈþC\'7‚Öóq܉=ØÿŽè(*ãäXò±äZ²dÉ AƒôÖN“jÙ²%ýO¤0V´d©“sU Ý ‹ó¦"h¢¡¥rÃ[Ï”% Oõ)OòQ9ÿl“6›pnܬŸ£OFÉ‘ÏW\ñ¿ÿû¿ TÊêMŸ>]ja‹|ÒB—ˆ™±SJBüÚ öò,ï.’À>±«›á�DÍ'V5N8þï¿„f¯Š|öÙo?¬Ë•øïŠeˆÛBæ´A®Ù„ìöæx-?´(oòI œ4‰$'K>DŸÆ®]»f‡|Ú´ióÜsÏÑÿµ¢%K”|HÁá!{IǺ-ï¦'ì²Ë >ìÓ’O<R½')‘ç¦R–äCS}Ž>úè3fÄ]#+~øá£Ž:J̧-T‹-‘O‰BN§Â3QNÞXÒÄ+.Îá�7)Ðå°3c—ƒp?qÑ©@Ž4Q”|ü€Š&h,K|Œ§¡µ™Ò±–uŠèÐ!Sä#ežt&ôáš„%Ÿ,¨wïÞï¿ÿ~ÚµøYíÛ·ÿ׿þ¥w´c*Eò!®Ù‡­gÊà'(ù`‡7¼’©áõLË“|TË›K>¡äç¦Ñ2lM=NÝ»w_¼xq•²úEO>ùäˆ#Ä|3äc†gBìÎ'Æ ˆu$Ü<pr£ep§"¶'¢Á·0Eo]ÐtF8­"ú‡SD;š|ŽpûÏù¼IçùHÉgåÊ•D­L‘OZüåÕI"&¸MK>AÕÐÐ0~üxÍ2SÆD›è1cÆÜ~ûí~ —4ùàõL5ä“C«šbk£žê³~ýzK>á5mÚ´N8A^ƒ “î$�x8ò¡{ÍÃOòaµó׬YSSS“LÕ¬þ£Ù³g>\̧ÿÞ-[¶ÔpŽ˜“"äÄ{žÒâÚg0·éÿB¦)ùÀœâv3À?ìÌ4Aÿ%ÃQÏûl8¡Ú{ÑĉEÉG=ÒÌ蜣* ´ƒÓLÄ}EŠñ†È¦ý@A»¼Ê!“ü£:*®„%Ÿˆ¢÷j‡vøøãÓ®È > .lÕª•ŸÂ¥K>¤0‰½§£ =ù°¾Éñ†¦„Mö*Ÿ¦7nÜAÖ®]kà‹”'ù<ðÀªðfȇ¸ðÄÑ)Ÿ¨É§E8�JN%ÈOòšÓܹs‡ ’@½¬~½ÃC‡óióT]]Ž|Jr4'79q]ÞÀìƒx¶¸ºq³óBl7AòO8>ﳟD’ š(J>RÂ!qd%Q`kÈqPxè8˨ûäÈÇ$Àd|Tù–|Bè³Ï>8p þùOZõõõ?ü°ÿqN‰’)À^Õ‡Y~àMÄã!ÂH7_lËìÕ4ÉÇŒÃ[y’ÏŒ3F%¯qòaïksÞ*òaÇ6Êf²fŸ|7+§ë¯¿þücõ²úY¯½ömúÅü,OZ'-©@‹ð&òH>9ï¦И4q—÷!î$ìüæÄaüÉZÒòØnLzì‘fÆ;ÆejDA шæù8®WN㮿@2eJȧK—.ø‹g cB¨ÚŒ˜°ä¯-Z4|øpú/@Ç͆/M[Ý6mÚLŸ>]úòQ¥’&<Õ‡v[l”Ëú&ˆÓÃZh«÷åÊ2?·F7Ôá åI>ª ß$%ò×´xj²ž|ˆw&kI),Ó+î:á„î»ï¾ø«e劎iúöí+æÓV©¦¦FO>ªÍ!'–ó$Ä'É•‡ðàêïÏà˜'‡lÈyÅÂ>ªh~îaÑî?Ûè*òÙ{Ÿ}ŠÎó!þƬš½áÁDç�(ˆ3õ×ÏÍq#Ã6ºq®K|2Ë?ªÍp‰¢,ù„Ö† &MšDÿ˜Ç”æÆ¥ÚÚZ:ô6lØ5×\Cá'б¥N>0Õ‡½°ƒ)©@>P^E>lL ¡(ð˜ rPžä£šðM,ù„RDòéÕ«×Â… 㯖•«O?ý´k×®b>}ühëœùd rpº$ GÜHÓDXÒ{¾qÓ{r®Ï›t¡†|ÂÑŽêKe!qá„ zòáº=ÏH3“xëϵùÀ9\¢`¿šßÐÐ`É'¹ãJXòIZô¾úê«üñgŸ}&Ä"ÚönµÕVÛm·Ý^{íEGÿ!ÎPäÃÞ`ªOÞ]Á¥‰:¼A±»˜Ÿ³ù�ù rPžäóüóÏï¿ÿþò˜%ü(°a ö?‰È½ó#ÞG„=%àÛJx7ÿä£ r@[sŸ3ÿ¬BhÍš5uuub>}ðh~FÈ'vÈñ“09áNÅ>qlœ�³¶ópÓ~0ù`ãA>oâ Œ÷ný!bLp™òá¼Ýˆ‚pˆv`ªßqÈ e½ëü¨fø8îJ¦n¨ë{ï½7SäŽC2Ë?þKZò©• ùÐóVÈÖ  D>ÒðnfÞÊ“|^yå•AƒÉk*ù@B$âz>ä ¡ˆ—|à3ãä^œž}öÙaÆÅ_3«‚è=§™øÏE0ÚSF$ŸØá$Ñódr4»�r°ÃÌÌ£×ü@{’GáD±a™(–÷ ‡CISMˆ„Š|† ªòvã6c§@ G¦F´žƒ|ÛD›O9‘Où'bÂ’§Ò%âêÃ>¡“‚‹oÜ0ù0SSðÚe“|,ùÄ wß}·_¿~òd˜|p‡áx_ò¥ØÚ?ù8Š ^xáE]{Ŭ@555âšôG©¯¯7O>)ÂRB$#ähÊ3ªÁ̃=f¹ðnM„XùÐÈ4ÛàG| ç'P"öÓªÈg¯½÷¦#r"0—ã“vô{Ã%ˆz¶O£laSì ½Ã”)S¾üòK¢VºäšIB’Äá!±äS!*òÁ«úÐO 6èe%9·&‚ZÒA,LõaáÝ`USK>!õñÇo¿ýöò'Ÿ<ZÒ' ù8é¶öO>D1ÕgذaÏ>ûlÌÕ²BêܹóòåËÅü-·Ü’ËÑOêÄ×y29>O…óÁìCÛ Xᇵ´IɹoO𜠟&nôHâv9øÝ›ò‰ˆ@IS“4¡!lóaâº!=ØH3cÄâŽX>P‡=Ž7Úg£wëì”y"2IˆCâ=0P"Ê#aɧBTäÃMõòáÂí°£8òÁou,ùÄ Ï?ÿœ½|’Ô Uòá&"KÉ'Wðv+]ò‘Nõ©­­¥ z^0e—èÈæ½÷Þóëëë5³ÛI|ãàˆ™%A>±ó’ô³ l naSÑò“C6ŸŠ¡‚•W/lêÿ1ˆob䟉\ %ŸÁC†0›Èöí U¿7tsB£7¼µã:¹9Èøƒ}J…|J‘ü$by,ùTˆÊ‰|`ªËç´“5¢5š|ذv³ÞnáµjÕ*ñU÷Ï5H|r(­Š| =¼ð” ù¨¦ú,\¸°W¯^1×ÌÊÕ!CæÍ›'æÓž’¹?R'°”É„Û%~²¾„ {`ÚÙ>RŸ7Œ@Œv¸i?ª¨¿Õéâ&Q”|ĮǥŸÅÄAs®á³QáÍñFµÆS@3H> 1IˆC¢_K“ˆx aɧBTÒäC¼ë™²~ “Oïz¦ywyÖ²¡,Œo™ÃÛ† €艒Iy’Ï÷ßOy ’)תòqS}îºë®1cÆÄ\3+W#FŒxòÉ'Åüºº:pºe*Eò zˆ\ ºKSžû̹®¹y>�BÒÙ>9Å4œ×ç ÃO”" Ήrì…&|ºt)ñŠ’Ï ½öâl>LѱGš1C^0ì´°µ£ˆðF?ï½÷ÞR$Ÿa&"ùÄþÓ³íâ¿ýö[K>e¯2 ¼ž)G>Rg®Ã6˜êc,ÈAy’½­Ü{î_jyò{;üˆdŸ|ˆbªÏÉ'Ÿ<yòä8«e…4zôè©S§Šùµµµ´=Â9¡É'Ä@9®óø<Ä$®Ä¾ ˜„} q8PŠ”|pÛ’“Ù|Ø9“ Ãx£9›òÑ0·šv|“&€8‡·F¯oƒ{î¹';äcÌÀL CTåcOÀ¦%Ÿ Q9‘íhðTŸ\ÁÕÍ'ù‚“…,¶äƒèc&3¾¦È‡ ÅLE&Þ)ÈLÐgÔí5z£Z7¦Ø:(ùH§úì°Ã|ðAÌ5³ruÆgÜ|óÍb~MM ·ÔšIò1 Kæq%è.Uy1“‹m­±ù4A ›rnoØÃ ^q—SÝ^U%b¡?%'^p”|ö<x»í¶#á0IY…ÛŒ……|&r^Ÿ·FoTkfKÇQ­Ùë0úY6ä“)þQmÆ•ó-ùTˆÊƒ|Xx7Œ"¼qo"ùÂsŽCSù rP¶äÓªU«µk×JjP:äC\þ¡B£7†)}DŒ} œ|¤S}rv=Ó$5qâÄI“&‰ùÕÕÕôŸçdœ|¢ÀRFð&Ð.Uú fŸ|!°ÌíÁëùpäƒù''Ä9�#s^¶¶OÑ_$ Ήr9| ùõv#²!©*; ar§ú8‚ñ‡ydÄÛ­sçÎÒ/"ýšE?6À?q%4,ùTˆJ|šê؇öVÌì“w#°>KJ>xª¬gJù‡E;°ä^:tö©è”OdäC¼½…ƒ¼Ý°ÙǼÃ[PòqS}fÏž}ÀÄY3+W×^{íŸþô'1¿E‹UUU8§üÈG?˜ÎäHwiÈ3^*Žu6¬@ùЊÎa¢ÿ˜˜…ˆWyE Àé% ¬bŸ*ò8h³ù€Ä>H…7D66õŸ:Õè ˆÄ2±Ù§´È§ù'®„Ÿ’–|*DåA>ÜTfóÉ£`¤¬‡Ò“Ía6š~n–|BªGK–,‘ÔÀ8ùH#Ò5ù°7ϧ0Í>ùÅTŸ‹/¾xâĉ±UË iêÔ©£GóÙ‹œcÉ'#»4Ÿhâ®êƒg rAÞ°I9'8¼·©a{ñÉ™X›#²P*œú¢ä#ízTœ4/ I… >Žëä¯Ã2âí䓤‰ëü±äS!*Kò›OwºäC3)ö¬_¿Þ’OõîÝûý÷ß—Ô =òaO�ûóC>LàíÆ¶ömÆÉG:Õgß}÷}þùç㬙•«_|‘Þ^1Ÿ6I5558Ç’OFvé™>Áç G¸Æ>o`ùi‚VòÁiÎó-–4Å•Œ‹|åÕ±òñãíÆå„Ãif:r�ŸgâNï ‚hŸ™Šp@É'(l¤ˆ4> JD„%K>¢²!¼ªãxOïàj®ä¯ë¸Q»X;‹ùrP¶ä3pàÀ×^{MRƒ”È'‡_gS¥äCPª rPä#êCÿUÖ¬YÃM¸·ŠE‹-êÙ³§˜OBnnUvÈ'¡F§“»Š’Ä9ÀŸyo„1¶57Õ;¹œôÒªÛ› ðø/ "Ÿ=öÜ3··B³4þ¸ (ȵSp;…R'Ÿ,óŸDDà±äSi*KòÁA Ÿ"îX—äC os˜íšrÙ ïV¶äsðÁÿío“Ô óäÄ»ºÆ´Ã»… G1ÕgÞ¼yƒŽ­fV®TkXчv–8Ç’y¼)Z)ó�ù`Ó1pŽí�˜€0íä–\¢wÞ�Æ='ýœpþùzò‘v=z ‡=ÒLÿÅ8øá‚8ÈàƒÍ>Y Ÿ=ztÑ®çÃm¦Ž4¡É'.αäS±*ò!ê Eɇ¸C\6wÃü’>eK>Çüý÷ß/©A)“$²O>D1Õç’K.™0aB<Õ²òª¦¦fݺu\&ý]Ú´iÃå¨63…1¡ëY¼ÑÐì’†wãø'ç ï†ÛÀ!~¤(zçS꾀 .X&Lì¤ä³ûÀœÍ‡IÏ<Üf8 ÊB3a”@\/b ?Ù‰p�äcžR’(¬ÚL.Á~PK>• ²!ðsòÉ{#ñ äÃb»Û›%ŸÀúÃþpË-·Hj`|H~`‚2©°špC®§Äžê“Êz¦Eï›OòÙgŸ}^xá…Øªe…Ô«W¯>úH̯¯¯Ïûˆb¬J[ò‰ oT»üàxNãU}¸€ Ñá³ùäѪ¦È' À#½Wþɧ(ó¡)öŸJ;b¦H>Ž+x†»±ÏLÙ|bgŸÅB.zHr i¾%Ÿ QY’9ðC>­êC‡²ì“%}Ê–|&L˜p饗JjP ä“sã`”4ùHƒÐnÍš5Ü 3V±hÿý÷—¨««c SBäâR$Ÿ$Në“|8Ÿ7lm>"ùpð#|0ù¼·‰z*=ùì¶Ç={öÔô;Ü.ÍfDì‘fjŠí¨È'kó|(ùpQ­}~f¹pì }K>¢2#6Õ‡Žë°Í‡Qȇ Ø-°˜#Æ<@>´LB|R¶äsÝu×}öÙ’d˜|ˆûXˆäƒû¹R!iª—_~y¯½öŠ­fV®N<ñÄ)S¦ˆùµµµô!„MK>¥H>Du€ÛìIËÅ9Èyã\3_8VÖ1§8¢XÞ4³ÀÃmjÈǧ·›˜{ˆl,+ÍôY ˜‡ ççR!Ÿøá³˜áÂA±äS!*ò!…ø±€@ÐC1졟$ ù˜ ïV¶äC{‚1cÆÈ+a~`1S”ÀÐDJ>¤ðdpäã‹™f0¼›XÀQ9°«ú$¤óÏ?ÿòË/ó«««±‘Í’O*x£Ùå3Ì;˜|8æiâ]á''„·†6‡ ©†ÜEU.zÏMà6Uä3`÷ÝqÌCU¤an3"öH3¥Å°µ3#ÌüÌÎ<Ÿ¢±Ý4»² KÑaÉ’O…¨<ȇ U}8òaØ£"‚^èãÀÖÆ‚”-ù<úè£Gq„¼)‘÷RVE> i°ödŸ|ˆbªÏСC_|ñÅxªe…të­·ž~úéb~‹-ªªª`Ó’OZä#Д”f²„ us}ÞTÞn˜p àqƒ` ÒWXõS)ÀíÕÔæ»¤(ØCd#Zifѽ¢ ¼ã.o £‡ìØ|J l¢OtΖ|*DeF>8ÈA“ÂêÛà»$vk»²ù°ä é©>eK>sçÎ¥#ly%Ò#€Ÿ@äC¼S}Jˆ|¤ovªOBzüñÇ;ì01Ÿ…ž„ÍìOˆC*œ|rÞPð>…#)üpó|p㣂ŸˆXb �|N8ÿü@ä#í‰4ÌÃmFÄi¦8°qÝ0üdÍÛÍ?~$AAq]Zµ™tÂ’O…¨\ɇ™zTäÚk6ˆ%ˆ|œÂôu†@f‚”-ù,X° OŸ>òJ¤A>œ_JòaOII¶vo”K‡ Oͬ\½ýöÛýû÷ói3T[[ ›¡ÉGšiÉ'ÊiCq'üÐV%‡"äÑÚ>ü¨Þ8?·¼7Ô†|ŒMÑü ä£ê€Ä|Ûhvé GZ@µ—~#ÚrÒOlö]�²I>Ql,fÀ&(ÿ$—à6-ùTˆÊ|h/CÛ<Óô>Ä"¶n4Þ­lÉçóÏ?ïÒ¥‹¼¥C>Žû(¹$ȇ(Þ.¼ð‹.º(z­¬°¾úê«öíÛ‹ùM¼‹™Zò)ò! … 8¼5kX µÉ¹Ñ sgùÁ×ÅíRBܺ€˜©!Ÿm·Ý–¨¥gýf8òÉB0ÉîmòvËÔ<Ÿ­·Þšø� “䳘HâJ-`ɧBTNäC?Ùz¦,¼íS˜ñGœtÊqÜ·ùÄ lÍy»Á K>µnݺššy%Œ“Oïb¦Þ "ÒcÒT$ÃáÝB“4¶õàÁƒçÍ›Oͬ\ÑûLŸùõë׋»Ú´i#…n3ûä£?Ä�Ød|XK‚'ï®sŠß­àD½{Ã̃ÉòY%q_el|þ¦xsâ,]¼˜x¥!iO¤§  ä¿€j/~óEÞn™šç£'Ÿ@@×y¢œ3\"ʱ–|*DeC>Dä�ÞX'ÂF¼¸øI>äÍ’O$Ñ Ñ[/58dŠ|ò(Ô'èù8òa ÃS}B“tª½´ùV¡©Uhõë×ïÝwßói Á‹5äC´cÓ{ Ÿ°rȇþ‰8þÔ§ýˆ~˜À"^æ8Í.šûb¦òÑô>zæÑo†C ¢™˜y¸Ž€¥™|¦¼Ý(ù¤ˆ7q󓈅‘Ä„%Ÿ Q“{ 䃻!î@Íÿ0?7l½~ýzK>U__¿zõjI%J|œ´Ã»…&G1ÕgÖ¬Yªà{V¡5jÔ¨3fˆùxIK>åA>Œp˜Àæ“sÍAÜ„V8'Ìö‘ú¼aÚÁ—66>óñ§Š|vÝm7·›´?ÒSPP ¯Eq¬=$ŸîÝ»k"H3³‰IªM K>¢ò#.ÈûT‘O-ÜÂ9 ÌcÉ'’h‡·Xè IJä“ÖÜÈ Ëkp•t¼ xã%}€|hI3ðš|ˆbªÏرcï¼óΨղòjâĉ“&Móq`ëxÉ'Ä!ÉÐ�ØdŠ|pl7ä{Áóà)@Ä¥ð¶Å dâ+æÕ뜪¾`ÑüÐF$U7¤gý¦ÂñY@$Îìƒ]�²0ÏGO>YÛ¢ÅRIоrÍš5–|Ê^•C>~XyÖb[òIJ{íµ×ßÿþwI% ’)À³�Šäð#VŒ‘£˜êÖ¼ÍÚTUéTŸŽ;~ñÅñÔÌÊÕÔ©SG-æãÀÖAÉGšY±äï±ɇ|ÞÛp‹†aò›)P žáÃ(('LøÁ× tçCçû<0ù軞¢ÌÃåÄ‚@ú£À@\Ê>ùày>ÜI‚‚ŠˆR,¹„¦€%Ÿ Q9‘Þÿ@ß”óNõ§kÇèPÖz»Å cŽ9fæÌ™’J¤G>Œsà!ÉžŒœK>{2ä@U@:Õ‡jáÂ…½zõŠ¡fV®^ýõ=öØCÌÇ­ÅŸ)91|ÂtÁ&ôÉ#fr6ñ% ÷â-'óyËË‚¼á+r›Òß"®|ŸâO ùôèу($íŠRPP ÁEð)Îóq\o7¼žOÉÇ'{hvÀMˆ‰pÇZò©•7ùÐnˆÁOÎõ2€)ldËŽòC>´XˆRÎä3~üø›nºIR‰”È'BÍrCèÂÙÃM'&ÜÕ•ù8Š©>×^{íYgCͬ\Ñ^³®®NÌÇ­ÅŸ)vP qH,'LN=Ö¦t˜t Ú¼aáb[ç¼Þðûܱ]ìý ä‚GdJ Ãù¡ÉGÕ e.'쑦‹’÷"¬¡¡!ËääD/àŸÄT…MXò©•=ù°q/&‚‡2iȇfÒ´%Ÿ0ºòÊ+Ï=÷\I%2C>Äu©çÆ4D€èö ðyÉGSF:Õ瀘={vÔjYy% ìA—6mÚ@ZÜ+¦ ³M¼—ËØ-‘|HÁç :qb!güÉ¡…}¤6ý'Q’ š?õäS´ß‘Ѐ ·©Ú{ˆÛòYl·Œ“OtD‰rl\ÅÒJXò©•1ùÐ>ˆŽxÙT<•ø ØzãÆŒ| ¼uì.gò¡ÁI'$¯‡AøÁáÝTó|XšÝ®nruÃ>o¥ä@:Õ‡þ“Ð1:íMc¨œ•«¾öÚkb¾ÏÀÖÉÑ‹~o¼'ÌØ=6è.i&¹†¬Ek7ÛGJ>àœ€3K‘|舜(¤êôÌÃå$”òÁ ÎøŸY#c½€´X* öËZò©•%ùˆAp”÷®GÔäÃâXò ©Ù³g>\^4È'ïFž•¾mUÕM$§£´ÈÇQ8¼=ýôÓtPÔšY!xâ‰S¦Lókjjh“ÄÒ©Éf lü9ª“€Ã¸ºqÞˆkdæ‚p”Có1ùà«oVBä£éƒ¤»ô”ödí‡44þ¢çsÆÉ':¢=6vLŠ=᳤%Ÿ Q“íS(W¨È‡ Žƒ#š ¨äC?“[Ì´œÉgÁ‚}úô‘×#%òË”|Äñ(ô°z7KC@“oQȇ(ÞÎ8ãŒo¼1Rµ¬¼ºì²Ë.¸à1¿yA,š|¤™„%Ãܽ@PÈ‘îâº.¨(L_ú †¸‹Œqoøudª¾]ô|ýÝ“Þ ùtëÖSDæá6á—æ°ÇñÆvƒ ™"ŸN:Å ?.ÈI´@ DŒdɧBT~äC?[¶lÉȇ r`ÉÇ(ù|óÍ7mÛ¶•×à ù~8ÂC ùa%‡´Â»E$©ÃÛ¶Ûn»hÑ¢¨5³Bz衇Ž>úh1Ÿ6C555,­!¢ƾ7¡Ëã–è'Í?ÒLn=XÒOø–GjùÉ Æâ®öC¼Ëþ¨ª¡úîþóõ÷Pz둪?óÓÂâõsã&|²9Ÿ4'ƒä“(ä=6Ê%RLXò©•ùwå Ú•à Ü ?ì!W‘ƒK>aDo%ý ¤¦†ÔÉ3~ ¸Q4ÇœÍ^õ1‡·ì9Ð`·˜¿dÉ?/e­|jáÂ…;˜¯ ï–(ù>¡an‰^ 4ä¨vq­¹MÜò°ÌœwžØ.aÚá+P ß%®üpä£éƒ¤»ôT»J‘|è}Û-Ü®¸ ¤<°äS!*KòaAÀÚÃÈû:åeœ‚ûkÖ`žÌð±äF:tö©y 0TRh ¯“7çá)³¦€cc[½ÉÕÕÕÒJ›6m¸%SQò‘f¦Å6ú½Æ¸%úÉcái&çc�ÝG;xæ<œý Û¨¹„ê$”?5äÓµkWRL!˜G¿{ˆwD.ºº9(¼%ÐÏ)S¦d„|29~vH¨ò-ùTˆ,ùK>É©ÿþo¿ý¶¤©’¶ýá‘gùqÜõL‰k ?·"¢px<xð¼yó¢ÖÌ iÀ€óçÏóëêêØ`Wü™bG‘‡Är9Ì/E„Õ.nv)‡=àÇ4Gbäâ|ÄKýš åG$MgT”y¸œäç(L>ìµQ£ F> +W®T}bœ|¢£N¸]Q hƈȒO…¨É'çõo"ÅÈ–ô±äX¿þõ¯Ÿzê)I=²D>9a1;J$â>+Œ|œR r ux£ßzÅŠíÚµ‹Z9+W§œrÊwÞ)æWWWÓx–æ~¦#Í4À6ú½ñbIìÄÌ@<ã?Oø³Îá,ÏâÌCé«Îà“&­†#™ †&}$Ý[”‚ÅxÛņŽê3SäÃæùˆ_A•™äh ¤›°äS!*Wòðnª©>¬0KˆäCÅ-fJk×®½¶eN>cÇŽ½ë®»$õH‰|°Ã=KL W˜‡ÚDfÞaiÑáM 3ðE"’£px£¿Ñ˜1c"ÕÌ éÖ[o=ýôÓÅüªªª-Z°´ò!Ú¡jˆ½±ŸP³× ·ÄU b¦t˜wòÂ<ó†z#ç·¼wÎOÞ;Û‡óÎå(ÉÍD>Ûl³ ÑJÕ+e.Ç'ù)‰)ùˆ±Ý²C> ¡N¸]A ¤›°äS!*còá‚äÑ þɇ%,ù„Ôĉ'Mš$¯ŠAø¡??ý¤~ÕÊžâ|pÏÇ”R$¢ˆm}È!‡<ùä“á«eåÕk¯½6pà@1Ÿ>µµµ,š|¤™„%“ÜËÉ£ó4÷:Ü„Ÿ¼»ÎÞ”Z2ø¨¥Åœ‚½Zó3ù$ÿw^E>ý 0àí¦ß QÊ…0ɧE8Èùi¦IÈI|Ä|úkÒqž%Ÿ²Wù‘]�ùÐn…¦1ù@ÿBäC Ï¿¸˜©%ŸÀºûî»O>ùdyU2@>yï”b\·œ‚|ˆ×á­<¦úÐÿ“U«VµlÙ2jå¬ Ú°aCuuµÔ±°¾¾ž¥¹ŸIµ#Š;aX’б~ÐE³ËO&gj†8×ØÔƒ7s^Ÿ7Æ?9oü7R0 ÁåàZà ‡kâçg š/f%?]´Læ ´)¦¥äƒm>$“¨£ÙîØÔ–|*DeI>ئúÐOÖéäÜWlµä“”^|ñÅ}÷ÝW^ƒäCP`kj€· U@Ý8ò>mbæi4Û:"ù8 ‡·‡zèÈ#ŒT3+¤ž={JJ¢ä“÷N'cŠH>!‰²Wˆ1æ‰E!Çgyèxp³ÃµBœç[^6Õ‡3ûä…¥~¸ $G>â÷ÕÏ6¦¼Ý¢lJwaòá"pÞnS¦LÉùD“)à±äSi*Wòƒ€Í¢+å½AïJ•"ù$Þ­ÌÉgÙ²eªµbR$Ÿœ7à’†|œ‚Óñš}àU_)’Q8¼wÜqÓ¦M _-+¯F5cÆ 1ŸÙ£‰ìg2Ì6±Ÿ0(ùhv(€7#ò¦�ÃNÙò¦àÇ™ƒ0ópqû°œ ±Všß%b>|%}O$Ýrô4Øã¸É{»e„|:vì(ý 2Úå§©',ùTˆ*|¸Žƒ‘`žçcÉ'°è¤?Cv3…÷¬øQÈù&öI >c%ä€(Þjjj¾ùæ6(·Š®+¯¼òÜsÏó›ÄÒÜÏT¤™ÉíõyH ê0_@Ìôƒ.Ñ3q´7Üå\ƒ¸bq±­ñ^âZ{òÞhoÄ5þä1Tw#h~ òñÙïøifBØC¼@ GXÏç¾ûîËùĈ:AËÇr-Ÿ ÍÞÐüCVK>• J Ú°O*†@Ø/�Þ,ù$¢.]º|þùç’ª¤J>øÍ+)<0ž òøq¼6Çm½qãF_$:ù€Û§9sæì¿ÿþákf…ôì³Ïxàb~,A ÐK,'Ì>óàOüƒ£‹J-?ØþÃ…zãlAÄ]S\_Ô�ùP]8a‚Š|h@ÔÒtI!˜§hŸ›x�-çƒ#d“|L¢N¸]¡ù$¹„%Ÿ Q“Øšu¹õ|p÷ÍF°¤ðNÜ’OlÚ{ï½_~ùeIUJŠ|š ¦"3oÑÉÇQLõ9í´Óþú׿†¯™Ò7ß|Ó¶m[1Ÿþ4mÚ´4·KŸ.!*-æÁŸþ3ƒ–g ÉuK˜ˆˆ‹:@5˜|šË›â\ú6i}T÷$h>—ˆ|ôÝjoPÈ)Z@³ CsPöɧk×®!"H3cG#?'ÌBÂ’O…¨bɇ ×d¤ðÌëpK>qꤓNjhhTÅ,ù!È€PNˆ›”÷ÆykDñ¬½±M™²¶žiÑR‡·:,_¾w«(Új«­¤ƒ!ÚwB`.œ¯ÚL—^Âb iŠ(zlDž Z>çó“G¡®9ËOyÁAOn²òêÙ>ÄÛÏEAý-ÕOçΉùifŒØCÐÐ\E>\„ƒ¬‘Oê¨ú*Äû[Xò±JBeI>…wƒÀÖRò!n»í W^ÞÀ’OT]|ñÅ]t‘t—aøûq­õäCÐSÒˆVu`O r@ËdÁìS´€ÊámÞ¼yƒ_3+¤‘#G>òÈ#b~uu5ý·'²ŸÉ0Û$wÂ’`¼‘g‚–ÇaFqÀë2éÀÞruË!/8vò<Ší†­=öÀWæ7iÂg~,ä£é’âb1§è&köI¡©$®Ã›ãµùà 7S§NÍùÄá@š™ô®Œ$ØJ¦šgÒ’Oy¨ŒÉOõaä“÷._I¼½€%ŸDtß}÷ýö·¿•×&3ä“CëfïcA¼ïÿðSÂ9(‡·SO=õÖ[o _3+¤k¯½öOú“˜ÏÞʰ4÷3I¹‚¨G¢Iì÷„©#M &ù‡›ç,DÃÆŽ‚0öàM¸(B09®¯æ§Ô÷ú'Ÿ¢}ª€Â3CS㊠ÀÖ,/iòa¿)OÒ¨´¼ŸSe$aɧBT!äÃ…wceàA/Á¬ öß’O š7oÞ!CäµIƒ|˜í/ç¶æF9ù·$^>nt£a”ù…Ã[}}ý—_~É~µŠ¨×^{màÀb>}ðêêêXšû™¤A´#Tÿ™©œ0^n‰r¬ÏÉ¡Ž˜‰€åÄmæÜ©>íäžoìù<ùMLë\ÍÝÛòÙzë­‰ùÿ™¡±‡ òÁï¼À!ž{ó5mÚ´tɇ¶*:u#ÄBAÒÌwIú½–|¬¢¨ȇv0òn4cq%S‚È‚UJɇˆTÊŸ|¾øâ UÏ—ùä‹¶–’qûBX½ÛAS} ®ê ù¨Þžyæ™áLJ¬™m/jkk¥ÿÚ´ià ™T›éÒK”½Y`ž¢ÇC1<C]儨nð¦FJ>Äõs×ÃRý‚š_YKѾ?ŠÂ<bf rÜe ðÛ.RX­ÁA–ŸL‘O*¨´¼y¤ñ™`ëùXò){•7ùà ùBHk=ùà7;tËÜÞØb¦”O,ù„½‰UUUìÞñµ1N>¤VX$‚¢Ç|rnœ7‚V²c9 ŽÙgcaUR"S}…ÃÛèÑ£§L™¾fVHƒ zå•WÄüV­Z±§Qü™ ÓKì'ô9Pö³+z@ÇúG— åõ'áHù'çí†(çÎüálAÄ ÄÕ«ê†øÌ‡LJ>Ë–,!^‰äã§R•ñŸr¸Hà O<8pÐb>�?Y Ÿm¶Ù¦]»v±ÿÌXL=–|¬ ¨É'ïÈÉ£©>–|T=–"1N>MõÁ­ñøCJ>¬ªà Éz;â>4Ø-So~î­Ôá­eË–_ý5ýÿ _9+Wÿó?ÿsõÕW‹ù-Z´¨ªª"1‘43¹½AIi0€:b¦4àAa‘SÑùM´öp^pøBŠüߟù*òÙe×]#z»ivù´ÿµíH7WDA>˜2B>:t ®IŠh©#iÔñ_^ŸðYÌ’U •=ù°ðnùH‡¸–|’ÒðÜsÏIj“%òÉ{#ÆŠU…ŽuuÄ%6ÕÇ)µU}ˆÚáíá‡9rdÈšY!=öØc‡~¸˜O›¤šš–æ~&)Bõ¸3Pf*'ÌÒø9Öꈙ"ö`Ç6qÎó-ç uÀÁñú¿q?œæ.ÍÏ…%Ÿ¢QPŠnüáÜù€Ÿ3gði,D8øê«¯4ßÅ$ù°ÎÈ?–ø)“\y3 ŸÅ,ùTˆ*„|˜“†Ÿœ—|à…¾%Ÿøõûßÿ^ºD¦Ÿá{¼ÂÌ#O€ToøÍŸ#‹ð¶yóæR!RhèÅLŠ=~ÂTËÊ+ÚGn¹å–â?}ºêëëYšû™T›± ˆáÆ‹%Ž‚.ÑË«ÜÞ8þÁ%ÙáàÕMAÎÜyaÂOÞíMuCå%ÿ]¾¤Oæ3CPösòÁÞné’åtéÒ¥}ûöì[pf¢e3CœD,b‚­çcɧìU äûå Ý ÂÆšÁhÉ'NQì¡ð#Ýe~8òÉ{(ù$…7ÅäãdÌìãçÞJÞèCI{q0JXEѶÛn»X˜ùMUWW'm†¸œÔé%Ê ³ƒ4 C1“s{Ë£`näò‰;“GeöÁoøðus^[pÑ®ýü²òéÔ©ñ¡À£Ê/ 9bŽt^ˆ:Þ•|ÿàõ|2B>[mµU#ŠQK°‘"ê„c’ÐZò±’ª\ɇ ÅL1ù€‹×òK>É饗^ÚgŸ}¤»üŒÎcTÑðn9W"ù´ª~P0ü”ù¨Þ¦L™2zôè5³B:ñÄ¥#hÛÄ&S‰?SP‘fÆB/±ìi œÜꈟÐ?aþálA¢Ã[Íó!(ÚAMõÓÜ=É ‹œªÈGÜuÑĉAÉÇgg‘yÄL?D¿si†·]œÁ‡³ößÿýY ŸöíÛC9¼%—©Ç-3 ÿå-ùTˆ,ù€,ù$¥•+WnµÕVÒ]†É‡à»a¯=ù°ªâ^Ðñ¶†DiŶ& ‡·áÇ?óÌ3aªeåÕwÞyÊ)§ˆù;ÕGši�iŠ›ꈻ8s´è‡Á›¬1üpa¯!MÔ¯õ¿¯ô6BBO>!úÍ!¡™ÇOlrüÙè o@›ÐéÓ§§K>UUU;wnÛ¶-Ô™¸QFýHÒ¨S”¤™æ–|*DåM>ÞMJ>ÄÛk;Þxý¬AcðC™‡n&±˜iE)øö¬Y³FÌ÷34W\Rä§iUa†G>(°{Y˜4üø¹uEËÐøÕ ˆþ“|ùå—mÚ´ _?«‚>øàƒvÚIÌÏ'6Õ'Ä!É0 HbWrTã³¼tlüÉÉ‚ˆ­œ_ã‰ò|SÝ1._C>lyM?*Ú=© ø!1S”øž ók6ÝØžY Ÿ­·ÞºC‡àÀ̆2Ð % <!2C'b<•%ŸÊT%í h‹Á:ˆp@mŸ5Ý–|ÔÀ_{í51ßÏð=^ùHýIŠ’ƒ„ݾa1ÓÆR‹m­rx»á†Æ²fV®èsÒ¶mÛU«V‰»LNõ qH¼'ÌÒø9m*¨#~âho¹Âä˜Û£òySññrä3¼ÁÝ¡æv©n K„&?]’¦ŒÂñ“#nrM=×à;Þ•L³C>š†J¼f¢åäPGu!qW‰@å-ùTˆ*„| ¼ñ‚Í·ö–|Ô˜1cî¹ç1?-òQ9(J>Äû¹•èT¢pxÛqÇßÿý0Õ²òjÔ¨Q3fÌóaU"üRR„ ÚÁ¨ÿÌTNh�i⡸Ð%ú©¤~nØòð£7û`÷6)êäeÓ~`—£ˆ|€_x¡ò Ôi~h ÂÌ#¾êâ¦úd„|˜W9göI+Λ>SŸZ>®½Wß}÷%Ÿ²W¥‘3ûà–?ï]ÒÇ’O"ºæškþüç?Kw†‘|r…÷©Eɪ*íYÈž˜Òšê“S8¼QÍŸ?¿ÿþ!+gåê®»î;v¬˜ïsªÑŽ8Cì5|Âì Mˆ©S³ ²¦ 7S°87í§‰»J7ךqäiv-  .¿èï ù°EfüKßIùgi¦Oì!(ž F XÒ¿ó¢í'Ee‡|XÅzIg&Î[ KDO$qNK>¢Š"Ÿ¼;Õ‡³ù°OìõcÉ'f=ýôÓ‡rˆt7È3 qª #ð‚ ñT•ëŵíØsCŸR:S}ݵY9vÚiÒ…˜¬éóÏ?ïÒ¥‹˜Oï<̤¦(°×!ñž0{„Ûý؈<n—¦¼¸ÎiÎû¾sŽó¸>rp!Ž…Ø…òh:ªzª;‘|ŠvLAí?~25´ƒÓxªD8`c…¬‘)X~à“hÝÞ¸ÍS43;vý^K>¢²'–`ÀÃbza›$QŒb–°ä§–-[Ö­[7é.?Ã÷x%’8Óç¼qÄ>^|ˆÝ¾|ÊÃá­¦¦æË/¿,«ÐêÑ£Ça\HÐT"üRR„ ˆ3â^3‡Ä‹%±ïRˆ…gâÚ%ÂO^¶+&z¾öpí\%¦‰W'ÈíMúû"Ÿ@ÝPÌ£ÏÁ:ÀO£ä�ù³@>-Z´ ä+™rÕ–š}ˆN2eð‰~Ÿ úSZò©•7ù‚G 8¼‰f&K>I‰ÞGÚ4K¿ªÏ¡yŒ*J>9o4$ÜÁ;^±þúHÌ<%D>9µÃÛý÷ßì±Ç†¬œ•«ÓN;í¶Ûnóc™ê#ÍŒý('L”[4»¢«ç“è<h„tãâRâUMÁ¶Ã('Ìü!(€K@¸4î q>÷_rÑERòé׿Po7R T{Cƒ7ÂÆCaŒ9�Ç6`‰xà믿ÖÔÙ ù´k׎å°jƒÏûFÒ8o¡ÇO™¢ü#ÍL‘Ž,ùTˆÊ˜|ˆkö‘’AÔ¬04qÄ’OêÓ§Ï‚ Äü´È‡ r  lûþœÖá >¦"¼ù›¢Toûí·ßsÏ=²rV®fÍšuä‘GŠù¿úÕ¯jkkYZC>x³„€GÌ4Æ-Ñw¦Ÿ»¤Ký€ó)4VðG„âº:@>‡:OÛ4ØK\Xb™â=$jòÙe×]U‹¹qòÓ7bi~Ñpyã ´óÄ8nTk%ÐQTvÈ0ƒ%0ÿè£è7cc$ôä–|*D'tRCCCÚµHJxI‘|8³vx'^ RXÃÔ’Ox© ;#äÃy†`òñK;^Ù;?‹s ù°2ÒªÒüÅ‹«<­|jíÚµõõõ"[ÒÛKó¹A$Þ«O§B/Qê¤ñ¿+ ¨#~2£@«%s-~b÷6à\ ®JR38T,œÍÇg¤)#óÁàã±ÝØ¿0kçñÜÎ,O§NÚ·oOo`òáV™‹<~ʨwMD?ƒ*aɧBtÖYg]ýõi×")á ´wÀ뙲¸ýW‘¥æ"›ùÐJ›²„”&ùLš4iâĉÒ]~†æñŠÂ›õ% r '"xQ‹äÃÞ®mÞ¼¹„ÞØC/ÚÅ_²rV®vÛm·7ß|S̯©©aó‰ðKù'if¦IN:­Iž ´ æüä¼V ¼Â©ç€ òÙ&晼7¬ è¸Ëþ8î<±IÔ“O¸~G”æ‘fªr0ä fpî ~Õ…§úÐÌìÇ�oD0û-¢Ä<†‘&Ü–|*D·ÜrËgœ‘âx8QqäAòÞh7œÃ[Ž’¸”(ùTUUmذ!Æê•&ù<þøã‡v˜t—Ÿ¡y¼ÒLõÁÞ P1ÎÇ^§A"ö‚ Ÿ7nLú»ø¹{EËä ¶,iœƒŽ;~öÙgð¶À*œÎ?ÿüË/¿\̧TË–-Yšû™T›± HZ‡bŒì M5ávù97VÜœœÏ cûONx¹ƒ›;Îí K_·I_¬"ŸÞnLE{(MˆÌihÞ16@ëF$ˆj3sæÌ,ÜjY«ˆ×ìbyŸˈ»|&B蜖|*DÏ?ÿü(ð”¤A  ø!ù@ãFÓ›7o†Aló|Zµjõí·ßÆxB½Ò$Ÿ/¾øbë­·–îÂ&3Âä#ix7V^O>`ö9¯¬S,!‡7V@UÕ9sæì¿ÿþ!êfz饗öÙg1Ÿ>Zõõõ°ÉýRxSšþ3 â32²+4“˜<¼·sÈø“Ck›ŠN¼\š•'^þÁ9ÄëçF¼“‚àw¿ô’KB“Ï^):óH3¹G!xÃŹ…0;ȧsçÎxž¶Y‘bqÞüÀŒŸCôJ>‹™"zgÖ­[gɧìEù–v»eO>¢Ù‡¸ 8÷.cO£¬+9òéÕ«×Â… c<¡^i’Õ–[n¹jÕ*1ßÏØ=^qÖödˆþñxxÄ ˜ ;$î´WÜ#âo$ ûø¹Ã9µÃÛ¨Q£xà•³*ˆ¶uuuÒ‹ÏØÖx3-z‰åt‘&Ü®ÐЂgËE;àà'çú³‰ÎoR³P ÆÜ_æ\á’‚ÍçÓ¥K‰W"ùí€ôåU{Ã1A¯´0ð@¢QXÌl>=ôPFÈæÃ™}ô›Qʈ»ô‰ å£ŸÊ’OåH5-Iɇ½&#ÞeLi>D@iDAÞ˜«Û•ù}ôÑ3f̈ñ„z¥L>Æ ›3gŽ˜ïg\¯(ùBd-?äƒ;x\UxVçÔA®n¥áÍQ8¼Ñµ|ùò¶mÛ†¬ŸUA|ðßþö71_ÛšËɽ„;$Qw¢×J…gÈ!ƒ¶üp>oئƒü@&Æ|•¼Û ‡Ðˆ}jȇM»¤¢ýTDæ‘frÌÑã fÍ;ûÌù8ÈÎC¼!kÙÞ¢Ëûp›ÑËH>‹% Eøœ–|*GøÃn¹å–´k‘”`ª)à~ˆØš3øÅH>t´sÛm·=:®UÊäsî¹ç^yå•Ò]~ÆîñŠ›êƒã#q3À¸¡¨QûÙ}Œ-iêçî-à ¨ö¹ôÒKÏ?ÿüpÕ³bºýöÛO=õT1Ÿ>„­Zµ‚Mî—’²Ngx"‹›æw…;•až zu{€M@9´øiNˆs�9Ü^ur ïÚ>ôóÒK.ÑØ|üô;Ëøg!M¼É’ÂvxãÌ>?üpºäS]]Ý©S'x9ì¿‘4¼5Ñr‹Ÿ2>wéAËÇEôYò©­X±‚þˤ;$NN*³A݈7¶|&M>´±úè£ÍÿŒ¨”ÉgæÌ™ÇsŒt—Ÿ±{¼âb[c Æ¢%â} çðVBÞའ'ÚF,[¶ œ²¬BèË/¿ìر£ô°¾¾ž›KRmF•¸Îú„&ö«D¤‘Ðdž;ƒ<ÃOlÍ!Ï7x³“—Í"´¸ ÎÇW§äóÙ²eäÿ³wæñRÔXßO3ï— ÷‘}GYáDpEdq·qÅVQT—QÄuXÑÁtàQÜ\e߸|æö›é<}æt’J¥öêÛùýÑŸª$U•®®Nò­sr’©§žj5ÏÇQO¤.¬Ï<ÒD<ð…Áz2ÓÚ“L{»Á|NŒ=tcΜ9;vìPT2Pò¡?JAAm[¸õ|à{•¢M°Ëz%ׄÃíªËH74‹ù‚4š§2ä“SjÚ´éZá}MÙIùìÀ@—¤g‡Š‡0kIùÄrØCRÞüª[»ví–/_î×Ùt1ù¬Y³¦Y³fÒ,q¹¿§ú@`kŽ|ðÛM¨-÷:-),ì7‡7;ÌÊXUuÞ¼yVÑùŒ4Õ±cÇ/¾øBL/,,ÌËËcÛâ/å0ôÃ9„dŽ×¹Ýð³ÜÊžñ^@Z 6€ ^"‡üôº‡ y¤Ûøê4ÑŠ|ÚuèÀȇµ™D[¶…œ2ñ®“O23¶¬^@·çÎò ¦nÂ[-Gfõ®æ!b–tC³XpPdÈ'§´pá¾}ûF;*HRòaYx °‡¤Í>Aê<óÌ3ƒöålšŠ˜|èÕ«U«¶oß>1+|ò!ÖoØQž~¸­dÛ¥²…}ðd£Ã›UœƒÓN;M:MËH_£G¾ï¾ûÄtŠ=´E€]î—’BÞŽ?ðˆÙB;ÄŽF"Ťðóa™fŽ‚Ïl>ðà2ÉÔê7ãÇŽɧ{Ïž˜|ˆtº'§Àc•Cs)ÿàHhÜ$q’Õo¼!ù$ÒQ­™Í‡dè1ù$3×c x|d§åÝhK>Gu”Ú­Ñ(»Ô¸qãŸþ9êZ"«aƒ¸ âž|éŸÈ£"Y%%bò¡êѣǒ%KÄt~Ñw铱{˜@f" oÍÌ>t7‹b[“ô÷’Æ9 Yß}÷]‹-ÜÔÏ(%:úi×®˜^NÛšX´báЋï—öiY¾_ÅGàÑD§gc¢qa»$Ó³—›çSNx�'S(ù¬§ôèAɧvíÚ¬X2½*±“Ú>£S^‘ŽÁnYœZx°ö�<`›O8äCñFºü_"E>tPÞ AîëàwX˜Ü²í<Ydðmúk+¶† –ÕrnêÛo¿mÛ¶­ÔÃßÈwΜ9óÌ3Ï ùºÑ“Ï-·Ü2yòdi–N诬Ö3Åäƒ{w¨!롃$é×ixþ+ŽðväÈ‘,šêC¬ãÜtÓMV?Ÿ‘¦5jôË/¿ˆéÕªUc!™¸ ïJ·Õ‰áâô<š°ác–÷ò>"Š/Ť‡$Òðö¡Mçüp)Ðâ1.Jd†=€“‹)”|6Ou·SNy>êÆ'áФÏ<œyGLäó¤lzŒ{èö¼yóÔr}!Ÿ‚‚‚’’1=‘"Ÿ*Uª4mÚ”þ(�{à«ùÞZsWº¡Y,´ò°A{jÊ–ŠG±C‡Rwe£ìÕL:5ò±q™W… zõêµ`Á‚ð/=ù¼üòË—^z©4Kg\î¯8òI 8Hx4À ƒå'‘~yÉÒq}dŶ-ÎÎ ´-à XÅ9 ëæÍ›+Uªä®†FT×_ý“O>)¦çççÓá ìr¿”Õ®ïôââ'÷iÑ‹ëò!Œ£KKá6pÌ7˜á è‚=ßpbY¼9Ó7”$Èx¸q"ùtýïÿfä#}<¼HÑ‘I³D³Ä7YI4™¿ÕJ¢ ? ~Â!Ÿ lذAL§w•¶ôg¥Wa?| î[ƒ'3û..Ì>ê]×¢Y,;Þ8xðà¡C‡ˆµèèåÅ_T0Ê:Ñ?Å 'œ°jÕª¨+R–EÛ%Ú¬^½šŽ!#¸zääC¯6mÚH³¢%prÓ$¨0tÜllöÉ"ò2Vµ}öÙg‡î´nF wß}·oß¾bº;‡7¼¨wž8ÓŽâ$1il°)­\ìþD¦/œH>Ò9? ™1üÁñã7®_O2ur·nlžôÞ–öJVéŠ\é –Û&ÂH)‘ kÉ%–¢èâb>Øæóæ›o†@>}úôyï½÷¤Y,|m£FªU«&’¶•¢E~’ÁÄ9PoÄ­<ÞØ·oŸtŽ+ÅËÇ|ذaVŒ²T{öì¡ÿÐM›6E]‘2«¢¢¢?þ¸yóæ‘\=zò¡Daa¡Õ4ÍðëC±‡v,ÞëÑÙà€ ïF”äCÐ<Ÿ$Šý"ãõË$_d{un2+cçÀ—.<—uäÈ‘š5kîß¿_ÌÒwxÃ»šø¡ŸÎyÜ!Š;Pññ$þ2Œ£ÂŽ7ü°—;°‘@”Bp®nÀBEÄ&iòÙ$˜#ºtízBûöuêÔ™GÜN¦]ˆÅ2ÒnK‘'”–áŒ< ä· ‡@3'1àÖB2r‡|&Mš4jÔ(p‰S"åðFùç¸ãŽã²0ç´ŸlpfØÐ!õ.Ѧu®l£Î¥·¢¤¤D1FªZµêòåË)^Z0Ê^mÙ²¥k×®6lP ¯‘ Ѧ‰l/^| 'DV‡ÈɇªsçΟ~ú©˜ùpS}pœ®§—’É|—–Dnoá/ì£6¶’q¨>üðCÚF¸¨žÓ AƒæÌ™#¦«ÞˆÅØ1nÀãôäñ§ÏÈQGq Þ�þaŽyÈôcâf<â¹=¸ØÄ Dò9©K—v:Pò‘ÞOèŒtZ-’9~MØÍ RŒz1ánK|«•LÇðdYóçÏ|¾þúëž={þúë¯ÒÜòåËSò9úè£k×®¿2Žâ€íZî‹ÙÇéF$ÅÔgØ»w¯zÔÛЄ7(Ó¢ÿ¬sÎ9端¾’Æ1r¡Š+sÌ1 .lܸq„ÕˆùÜ|óÍ?þ¸4K³ ôQ@>åÐòÐÙã÷š"ù@…q™VøfîÔ,αö"óK¶÷Pç&³2Vq.¼ðÂÙ³g»«žÕ+¯¼2tèP1>xÕ«WÇ)Ü%å" +½'†sréÅiy¿.½¸8Dz¸¸ð“H{»¯/±XÞ²8àVñ¡ܼq#ÉT§Î™ÍW�nf23Ô›9곸ÂVCd+ò‘ÂèÆŒ_o±[o¿ýväCEoæ–-[¤Yô¾Qò¡¿TÓ¦MÁ™êÏvÁàƒÓƒˆs@œc‰¿Åœ–/))¡]³âa£c¸ûî»ïÎ;ï´*`TDÿ'N|ðÁéó`Œ?^”HY¡/ºè¢É“'ÃZ…‘U&ä3gΜAƒI³tå¾ ;¼ùT7/m½­„¾ °GD6.ìcç€Þ¢ü±‘1ú»Õž={Ž>úhé“ vxãR‚c’г‘vô?Ã驤ùˆá­Åù?ø“¶xž8Q$ŸŽ'„É.Db¤Ï†ØO¹æÛa:G;x;™éóVŠÖðIfú¼QòQ/péùŒKÉjUA?´}®]»v­Zµ ‡ï…í?ж{sà”7Ô¹A³xàÁƒ>¬~Æ(L®_¿>’ùÙF!kÆ ·ÞzëÂ… é-„¨¼eL´Ë¨T©R»víüqÚîE]+ä³eËÖŠŠ|ʥÈ6ù”Ë ! $V™Œs`Â[{Ôgœñ÷¿ÿ]LçÞˆðcIA‚d&†< …Åݸюâ$1éi¥®n˜Hæ:?‰Lo7¶#¼ÑÏG~x‹0?¸CÇŽÒy>¸!•‚Û•öVÜ['«KQ‡cw~àeV23¶›ØÂ/X° òÙ¿ýúõ¥«ƒèÏJù§°°ð˜cŽÉËË“b±˜çã{47¼äº†Ûbôž”””°—X‹6Ë´Ë?~¼¢ŒQåŸiÓ¦½øâ‹l‰'cR(‘²ð°ñó Aƒ®½öÚÖ­[G]©ÿ(äCÕÈbI“¨È‡[ÏTŸ| ÂÜ;BÜ;â…}bböÑ'«8”éׯ_Ϲfé륗^ºì²ËÄtGoDMzO Ÿ‚²ˆvgŽðH/!Mgžo‰ÌuN¹8oåP¬© ˆ¦?:iÒÖÍ›I¦(öß®]½zõØ!¬Ù„K‹Ï†k© v9þI¤â¹±ÖnCJ9¹Án) iÍÎÀÚsšþÎ;ï„C>$eöaÞ8Š2‰´5¯   ¨¨ˆ95à[Í|l‘F‘«ÉâyÔê“xd¡djvÓáÇm™‡éè£^·n]ÅŠmK•=mݺuÙ²eß}÷Ý÷ß¿ÿ~+‹knж-………7nӦ͉'žØ´iÓ¨k$Q\ÈgÈ!3fÌfE?yyyÀ<lCêøÁp…{H¦·Ð·¼O _GçÚ–ïeç€vÀ#GŽtQ=#’zw[«V-i¸?:RaãQ÷cY ½ãG´‰1Ip‰Þi$œO«]ØÀëü”Ckž&„à‰Ì8oÐ*RòÙ&Ì?¡ØÓö„ù°”ré€1P)‰V HLJ[vð0ðà]øL ÚÁ"iSl@#/:¼½ýöÛ{÷î+ êܹóǬ( /Ú}4oÞ|ýúõú½9wo}©FîˆÒ#%ÛnݺE]###7Š ù<ýôÓ×]w4KgÔî»ðTÉtù ™f®Î¸ËäºFÿ'ë¦ú@+³¸ÿòË/‘Ï]Ë^õïßþüùbº#‡7¼›½”E´ãå3dàQT@Z%qζ~'2£]ð€nO~ôÑí[·’LµnÛ–ÂOݺu’é¨ÉÌðœÔ­“ºã VYðÉ6ðd’Ž|-?ؤÏMø¡ŸsçÎ=|ø°¢V§vÚÂ… iõêÕ'Ÿ|²42¾‘¿¢MñÈ‘#ï¾ûî¨+bddäRq!Ÿo¾ùÆjæS„äú|àŸrü°"ØàÈ'™vxKf.išo ³ÏôéÓ¯¸â Õ3¢š5kÖE]$¦‹oD ?!0Ih‰ñ¡§W'ê(ª$MçÖq?â„¶MÉgǶm$SǵnÍl>åÒ±°¥@B/µðØ&b“8à‡#Ÿ¤0[õ÷íÛ÷öÛo+êF¿ÔUW]õ—¿üEQÆ©^}õUzN?*??èСO?ýtÔ122r¯¸í-ŠŠŠ¤Ó4£"ˆmÍ\ݸU}ˆ°rÉìÈ9ìÞ‘¤¾,X{²Ëì¬Â[·lÙrõêÕØƒÅH_¨U«–té�.ÂQ’±Sú›ÎÉ#D _®OàQTO„’Ù’‹|ì±Û·“Lµ<î8ðvSßCÎXËÿp~nâ'F lÿló!é•L¹Ð´ \µj•bö3½i=ôЈ#5w¡'Ÿ|òî»ï...ö÷´FL{®¿þú‰'F]###OŠ ùPõíÛ÷ÝwßÓ#$Ö»ãmn²oI¬*ô”$Õw‚Ê€Ù§Ô"¼5Õ‚ Î8ã Õ3"ÖKšV¬X±  €KTÀO LZbдãú@ͳEŽ4N?Õ,$.ø¨#zÁM™<y׎$SÍ[¶äÈÇö‹=”U3¥€¼+Ât†A‹¤[r’v‡KfF¯¡úí·ßÞ~ûm+«8|…¥K—1QdæÌ™×^{­±üø®J•*=ûì³R›¼‘‘Qv)Fä3f̘{ï½Wš!ü°OXÛ»¼“ÌI½b=E‡7lÿkOijaÓ8N(`UÛž={¾ÿþûNëfÄôúë¯_pÁb:}̪W¯®@ÅnL0ÆK¢äñœú×ÍêO+bÍD>HÑÞ`ã‰)Sv Ky6iÖ¬ÍñÇ7hЀ ØøN²m©Á'bÁA®Ô{Â<c•.Z{°Á‡ ™?ð+)„î¤K–,Ù±c‡ÂàCRKIIIùòåe\ë›o¾9ûì³wïÞmž÷E´ÇïØ±#EÊFfÁ:#£2¡‘ÏâÅ‹{÷î-ÍŠ|ö0qn¸§É'‘ $Âî&1ü9r$+ÈÊXÅ9 úôÓO;uêä´zFT‡ªU«–ô•m•*U*T¨À%*à'Äâ=1\ ‚v¤‰ñÿuvÁøƒÛ@Îíí©'žØ#„unظqë¶m6lHÒKŸÁ9ñùa׵ϛ‚ˆ¤6ÎÏ >Á²-}‡E2ù´ÿì³Ï6nܨƪ .¸@jÚõK‡?~üäÉ“i·" i¤#úÈÕ¯_ÿùçŸ?õÔS£®‹‘‘‘oŠù”””T«VMê$òá¦ú°NZÇæCÒo ±Á<ÜJÑò>q0û8¢#«Ú^xá…³gÏvZ7#&«ïl-Bêˆ)qÃ/‰ñ§i™x~êSï’Lç7 ˆIÉgïž=$Sõ6lÕ¦ %î´$ÕZŠV ØMÊ¢ZÛ|Ôüd%òÕF2sUìɼcÇŽÏ?ÿ¼¸¸Ø{è×|ûí·Cp Þ³gÏ#<2mÚ4Ú¿ìß¿ßÊ?Ù‹=f´¯ïÙ³ç£>ÚªU«¨kdddä³bD>T:tX¾|¹˜9ù°Þ]txÃAHæÚ$Ýa‹]¦H>Œyâ@>ŽÊX™}è}øúë¯cµdoé­·Þ:÷ÜsÅtzÏ«W¯.FP³qÀwGe íHãðéåpi"güÁ ôÌÓO‹äS·~}J> 4ž_;¶aìÑD . @› gÆl#B›8ÜŒ“ÌX¿ýöÛ¡C‡¶mÛ¶aÆ;w&„…¤¢à·nݺÐ:5Z¥O>ùäïÿû{ï½·fÍš0k[¬ºþhÅîFÅŠëׯúé§ÿñl×®]Ô•222 Jñ"Ÿ›nºiÊ”)Ò¬ðáÇ;ù0a§@ XÌ#PoDãNê“OÒ:¼5í<fΜé¢zF‡®]»ö¯¿þ*fäåå©Q‡K‰!ç¸HÌ:Ú‘–‰9öXeÙâ·ì)k!)ùìGKyþ‹¶{¤lŠ~_[;.<kÖ¬AƒZ%µh sðàÁ+7U®\™‹œiddT†/òyóÍ7Ï;ï<iVøäC2ƒ�üp \pÞn°ï,±Íà‡-fZŠÖ¿‹Ã›N(`Ì>Aèºë®“.AŪU«ªQG±Œñ’˜E´#=$V¨ã½ž°Í ¸O{æ™b´JA&GêܹóÇu-ŒŒŒŒrWñ"Ÿýû÷רQC:ô|8³H>åЪ>xd�>¥™Ë~'3¡þoJÙá ïhÌ>¾ë³Ï>;餓¤YEEE̹'ªY(Ä¢“¨yTÐíHÏàÑ9ƒ4›Ä§O›V‚uò!©©z«V­jÚ´iÔ1222Ê]Å‹|¨N>ùdé+±Hȇ¤à§|ùòÌ‘ƒ!P9™ÄA9”ãy>@>l < †Ùhö±ZÕÔ˜}¼¨mÛ¶+W®Ó+Uª”ŸŸ¯FÅnV°Ub6ÒŽô„bÓ,«òŠ“°Fò…éÓ–”À¯iȇޟ×^{M³ÞÈÈÈÈ(4ÅŽ|î½÷Þ1cÆH³"Ñáõë ´E9aISnˆy¸ùÀg3û <xÖ¬YN«gDõðÃßqÇb:}‹ŠŠˆêp)1Äwçv¼¢sÂÐPÇ—[äèZ´…¤Ÿ/½ðÂoh=™'Ú#L˜0Aú62222 S±#Ÿ¥K—vïÞ]š-ù€«oÀ­h¡I>ä�æüp ûë€Ñ~Éöf:¢#…ÙgÅŠmÚ´qQÃ×öíÛëÕ«'} ªU«Æ—‘ÃO„ì”]´#=hØã4Ëûw¡ ãË/¾hȇ‰6ƒ£G5jTÔ12222ŠùС^5¤+9FB>TyyyâTwäCÐ`óaá ²1Δ1fŸ töÙgÿíoÓéYPP@ìPG±›lc[À_’ šv¤— uB�Û«Ïxå•C(€XÎ’Ïý×=÷ÜsC‡º"FFFFFÿVìȇꬳÎZ°`4+øaS}pxæðÆ&q¬™@Kæá oÀ?ܪ¦ÆìcD5wîÜŠé‰ÔÂ>Ü0²ÄÂêí8³Ub–ÒŽôêY <¶WùëË/9tˆ¤•ƒäC;ˆæÍ›¿öÚkf®£‘‘‘Q|Gò™<yò-·Ü"ÍŠŠ|¤S}Àæ#%ö Ÿá­!ÈÛÀžo‘“£2 ³Ï…^8{öl§Õ3¢�\§N]»v‰Ylab‡:ŠÝ˜³møÐŽ#“àqÄ9:?ÄŒW^ÉYò¡ýBaaá˜1c®¹æ¶Ø‘‘‘‘‘•h_¿f͚ݻw>|8êºxmù‹ŠŠ4hÀf#ÇVq$ŸÕ«W[½$‹|°Ãö|cUÞØ6ûÁæÃ…·o7瀔!³Ï7ß|ÓªU+5ÌqÝxãS§NÓéX­Z5¶­FE Ø&h೎v¤§Š'ðØrŽâY3fäù$R³›hضm[ <—]vYÅŠ£®”‘‘Q|µlÙ²iÓ¦-Y²äàÁƒtìÄÆ{‘ŒrýDzYñT-Z´¸ä’KÈœóc¥8’­R:u¶nÝ*fEK> uö`òIȦúÀ?8Ôx¸A¨fí){fŸsÎ9gþüùN«g´|ùò:H³ Îq?YÇ6¶²ŽvtªCàqB³gÎÄäCEÁÒ2Ç?´wÈÏÏoРÁ 'œÐ­[·Þ½{7jÔ(êJÅWt˜ô /Œ?¾¸¸x÷îÝQW'@åååž~úéãÆ«W¯^ÔÕùâH>TC‡}å•W¤YÑÂÏÿKIœê£r� û°]€¶Áøfû„¹¶¿äC¬Í>Tï¿ÿ~Ïž=UÏˆŠŽ¨¾þúk1â;ÔQìf)‰¡_àGçŠ~7Ä鯫³fqäCR–ŸÆŒ¹çž{ˆ‘‘‘QîiÙ²e—^zé¶mÛJÐrge[‰” ÜðáÃGMÇÒQWçߊ)ù¼üòËôáfEN>œÃ›Õz¦bx7¼ noàí†×öÁ®ËŒÙ§sçÎô?ÉÏ—ÕzüñÇo¾ùf1=â;ÔQˆ'Ûè•´ã~ÜpTÆuºUâk³gò1222b¢£#Úô=óÌ3eÛÎc%:`nÖ¬ÙÂ… ã`ü‰)ùlÙ²¥nݺҺE5t†8âÚ>ŒyØLÖDZù0%Ò1ÄI>Øìƒƒ¼eù¥Ùgîܹ pT=£½{÷Òÿ´4 ¨råÊx.#ø‰ºx/Õ´#­‰Àão%Õx{Ϋ¯ò1222"©qÑÀ/^\\\u]¢TÕªU—.]y°ß˜’½5«V­’fE?\„7ÎæÃÈ'!ˆÕ–»ÉœÍ¯sŠÉBdü(Ì>Í›7§¿iLÌY¤+¯¼òùçŸÓqœb‡:ŠÝ2@D¾ÓŽ/ðãËÙB�wœ£þEæ¾öš!####:(:÷Üs)öDKœå¬òòò¾üòËãŽ;.Â:Ä—|FŽ9aÂiV´äÓ{ü0æÁ$’|r‹™’ô"§8¼ÀÏï)…äÍ_ò!éÈ Ò2S§N½þúëUÏè‹/¾èر£4 Ç9 v¨£(¶Ñ¿n<iÇ–l±Çu¢ÇšK7l_Ÿ3GJ>£ÇŽ5j1222Ê 1â¹çžËqkV… Ö¯__«V­¨*_òùôÓO;wî,ÍŠ„|H UÅ©>‰txL>°A2x=Sqylí)«kûБúO?ýT½zu§5ÌquêÔéóÏ?Óqœ&G𠙸. ‰iÇ)BhRSrTF¿2ê «mJ>¿ kSPò3nÜÈ‘#‰‘‘‘Qè½÷Þ<xðž={¢®H¼TTT´k×®¨óñ%:ô¯[·n|b[“”Ù§|ùò0É“F Dz’û䆨ìƒgû°Dá üµ}ü%¢4ûÜpà S¦LqT=£^xáŠ+®Ó™qˆê¨wƒF—Ð dí8¢ àÐÎõ†Õösçò122Êe:t¨yóæ7nŒº"ÿ'¼°2¦Z Fq°Á†£ÞE{Š .¸àµ×^óålޝ[ò¡ºêª«¦M›&ÍŠ~¸I>lƒÑO|€|ÄÚÂ’>Ò×ÿBÊR³±F5z¯¾úê«È§¸e—~ûí·ºuëJßqqˆøq!ðŒ‹³…�?¾§[•ô<¾ðm"Þž÷úë†|ŒŒŒrYcÆŒ?~ü!Áï7*±¡B… ØnùòåÙ&"& œ#GŽ°Ã©öœEüª !öÙgV+ªX“Ï‚ Î:ë,iV´äKšbòa$õsbËù4öàÌìƒ×öðÖ¤ ™}N=õÔÅ‹;ªžÑˆ#{ì11>f¢÷ u¢b›ðáG³˜»£‚+à¥òŽ8G¬¶ß|ã )ùŒ?þî»ï&FFFFeZtØÖ°aC©ãR$’bÈ<XŒØøópº=÷~êÔ©³qãÆðÇó±& Ê5jÔÆó„|ˆ°¤)Û`ímJ„¡7ÛøGµf& l òF”¨öæ›ož{î¹úu3úᇎ=öXé¶°°š3&[Ô!²ñáG…#¡ïã®Â>ÖG}”bvçÏ›gÈÇÈÈ(gõúë¯_qÅû÷ïº"ÿ' ÎÔƒƒ$a±ÙÚØøã»Ù‡Và7Þ8çœsü:¡¦bM>TçŸþ¼yó¤Y‘À•ÃÛ&©ð ó@:.{Îaï†)‚¼eù°¯#-S¿~ýo¿ý¶R¥JŽj˜ãêÝ»·ÔVFË*UªH ŠÅ®42I » §ä]sõ†m"· »o½ù¦!##£œUÏž=ÿùÏF]‹ÿˆ’{CŠ­= {ض8ZÃðùPµjÕÊj›àwòy饗.»ì2iVTäCRO [Ò¯gÊMõç·DJ\…émO¤V5æ!iN`Ñ0ù@·¼E}‡Ŧ#GŽ7nœ£êå¸^ýõ .¸@šUµjUq¡$×ð“<ã¨p¬hÇ„øò]œnØ&Zí¾=¾”|ÆM˜p×]w###£²+EŒ®¨ÄÈÇ {D± °K'ò©R¥ÊŠ+6lèã9mwòÙ½{÷ÑG- ‘ ùÌ%M¹õLÁç G¸&™AÞ˜ØmO¤9…9?xaSòÆ6~ÿý÷pfûëˆ|®é?𫯾ŠvA«ì½“´Ø¼y³˜E[´‚‚§¨£(›ðã´˜Óóø¾ác5ôs¹mq—jÁÛoò122ÊM­Y³¦[·nÛ·oº"ÿ¶ù°á+ÉD 6Tç7öÂÌ>0ÛÇ_ò¡}ÇC=tÛm·ùxNû‹Æœ|¨ºwï¾téRiV$ðÃMõà8‰ôÚ¦$3n ”|HzÂ,fŠ­=e`m¢ uУG÷ß?*ˆÍF3æÞ{ï•fƒ%ÈuˆÞè6 Dqt6ïÕð…v\SÇC¼×ÜË…¸mÛ]J>ÿ› 2äcdd” Z°`ÁÿøÇø¬^ŠÃ�ù€µG1ÕBmD>T'Ÿ|òG}äï9ÕÊòyä‘G¬p0ª3[ئú0ÑÊДDæ$éÂ>á�v¹ðn˜yðÚ>Ìì4ù½«_Faö¡zùå—/¹äGÕËeíÙ³§^½z³òS"ïテŸàÆûUÜQwÈñH#:|Ü™ÅmÛÝwþö7)ùŒðÁ;3ø§o¾ùfñâÅ‹-úá‡vïÞM›˜¿kDÛ^ÚeT®\™6:tèׯ_=ªT©u½ŒŒÊ¸¦OŸ>|øðø °¹ð˜|Dì¡CVö¶:ò¡­Ó† ü=§ZY@>kÖ¬iÖ¬™4+BòáÞ€|ÀæÄêÉuø]éª>8ÈD;(cfŸš5k~ûí·5jÔpTÃ\ÖÕW_ýì³ÏŠéôa«V­<iX¶)ŠÝx&ø ßiÇwÈ lm³¸”¿/X(ùìÝ»wÊ”)Ï<ó í†8pD¸–‘¨‚‚úÙ¥K—‘#GvïÞ=êêðúþûïçÍ›·zõêM›6Åä¥ãźuëvìØñÜsϥ㳨«c”5š4iÒí·ßu-þ#ÑÕ c¬gÊÆilŸA“O­Zµ6oÞ¬Ž¯í¯²€|H*øK³"+‡7ðvÃÛœX±Ù‡ °È¦ý°'²~¡þøÇ?Μ9ÓQõrY?üðÃqÇ'%ÉÊ•+çåå ÔS²~Ü$4 g# 3pÛ¶»8ñï¼#%Ÿ 'ÞqÇâQú:tèÐØ±c§NJ{âø,˜]¢Ã &Mš¼ôÒKíÛ·º.ÿîçÌ™s÷Ýw—””ìÚµËêY„¢=~QQŸÑ§î”SN‰º:FY |0VA,¹ðŒ|8ìáù}ôÑßÿ}˜¶èì Ÿ{î¹Ç*X$äC2ÞùàP@>$皃&ÖÄ'Òoä »ºqoÙ»¶ÚçmþüùáÇtÏ^yæ™ï¼óŽ˜NŸÃªU«²m§¨£. O!p‹/'w 3úDØwEE ÓÂü#òùâ‹/ú÷ï¿wï^é:oFŽD»°¡C‡>õÔSbXÈÐDQ§_¿~?ýôÓ¾}û¢ªƒ¾(ÿtëÖíÕW_e/˜ŒŒ¬sòaööÊž6؃dóY¾|ù1ÇãïiÊòY¹reÛ¶m¥Y’èðÆaجȻ%„Ù>Ròað@•³}ˆÒç­víÚ«W¯®V­š£æ¬/^Ü»woiV•*U`ãu‡„Ã0ÂôB)ÈEI×ݱ«í®4…ê½wß•’σ=äÚ ä™gž¡ÔŸ•Ë€èoGÛÞ¯¾úê¨£Ž ÿêëÖ­ëÙ³ç¦M›bhç±ež&Mš|øá‡ðŽÉÈHT¬ÈOòÁ{˜8ø¡¨4ù}ôÑ_|ñE:uü=­BÙA>T­[·¦#ciV$ðƒÉž¤DÚÏ “?ø<Øí òfE>¡™}H�ð£¨óå—_þüóÏë×-ÇÕ®]»+Vˆé´i+,,„]?¶rÊ0!@ŽS˜±-éè(Ŷ¸k•¾háBÉgôèÑ“&MŠO¬¤²$:$Z¾|yÈ P‚mß¾ýÚµkü¨/¢Ýý‰'žHá'Ì™ FÙ¥ì%&XdÒO”¢ÝÞ}÷Ý'ÍŠ„|ˆÌáÍjU…Ù‡mÃ’>Š8oe#Â5û:VÅÞyç~ýúéW/—¥Xä·jÕª­Åêˆ)e~`ÛGÈ l¡Mò‘¦ˆY”|þ%´N®ÉgÊ”)÷ÜsÁžàD[Œ+V´jÕ*´+öïßÁ‚ è8«R¥J#FŒ Ã’¨+bSÅ|�{HêÏNw{¬l>lüiÈ'Jýøã-Z´fEK>Ìȃçù�9"~pœƒR´°)LøÉ^³"ÔÁQGõÍ7ßÔªUËQ sSô§oܸñ¦M›Ä,¶ª)ìz‡Ÿh¹%4ÒDwlã#Ù–ÔÜvWÌ*…Óû‹IÉgâÃ;]´nÉ’%gŸ}¶Áž E»³ 6„Óü®\¹²W¯^;wî áZ‰×è·0QI¤Ê ò±²ù€Á“C>a«}ûö_}õ•4+ø‡7 ˆðÆÍó±"ØÀÞnÒ…M1ù0e¯ÙGêàÜsÏ}óÍ7õ«—Ë7nÜ=÷Ü#ͪV­öÄÈvøñrrGçŒv\`—û©ÞÕDÅÿƒÅ‹}!Ÿ}ûö5mÚt×®]ú‡d¯‚ëÈ4;úš5knÚ´)„‘ú÷ï?þü ¯¨hwO›_+W£WlÉ»ºòÉMœ8ÑjñïɇAç�–4ű­1ÿ@µÈæ#íÆf*ÁÞnÙköQ„: zî¹ç®¼òJýêå¬öìÙS¿~}i«¼¼¼Ê•+ãðãÂ>üºíW¼óŒ  {ôSYÿ|ÿ}_Ègذa3fÌ({Ñ«ÅpjܤØ…q lˆw[á©Ï:ÚM° uOÏ<hРٳgë~ W¢££œmÛ¶YÕÞu‡¢þ.F5V‡°þ×ê¨c=Öj½ £Wv‘kmàQ7ä#ýüóÏMš4‘V8ò!™ ûÀ†Âá à‡c&)ùp³}`ƒ1Ohf¢w‡•Qø¼Ñ!ûŠ+èoí¨†¹©ë®»îé§ŸÓé}®V­7 ~ˆOÃôH¶]°w° uœb£D©–þóŸÞÉgݺuíÚµÓ æF›ÜêÕ«Óg>??Ÿ9!åpÖiŠþ®f݆Éx,Ö™m°Q¬sM,~/ÔêZÐÐ>âÈ‘#»víÚ»w¯ºÓ§µZºti—.]e<ê»ï¾ëѣǎ;¤W¯Zµ*4\Нf•¨Øv—Bo êIoZ­Zµ6nÜaLp£Ø*þäƒó÷, ~ ùÄK;wþôÓO¥Y‘Àkò¸ðÖxÎ^Û4aaöaømrÀ¹W7lö!ʘi¾ÈwòQû¼Ñšö¾¦G±ÕÚµk[¶l)½“´±«T©—èuÔ²~l놋\¿µ~ŠNÖÿ,Y"%Ÿ‡&MºõÖ[uÎ@5tèЙ3g*^º³úÔ®]»nݺHpÒLô‚@úÌÃ6h…q:ÜXÚkpT£°öàÓâ£à=ž¯ÌhÍš5G„°{X5¢ Kp]ê¢E‹HLÌ¢ì ;>áhþ ®SèM£>±¶tÄöÙgŸÕ«WOÌ2ÊqÅœ|àõ|@à’cÈ'.š:uê7Þ(ÍŠ„|ˆExk쇽Ýá­‰…Ù‡¤ã¡aËmˆCòF€uœ·;î¸câĉúÕËY 2dÆŒbzBfö!‘ `(ïl\×3dþ±Mt±-îj¦èdqúpéR)ù<üÈ##FŒÐ9í_i¨6øÐö¶yóæŠÅ¿]S#rÊ<Ä‚˜ÙGŒ•ÌþÅâÏ*ž,E˜yÀþ=Ë?ü €:Hzã7Î8ã «5{öìË.»LÊ5kÖ´újV‰VÄ]×)´Ÿ’ŽöjÔ¨ñü£C‡b–QŽ++ȇ3ø0ò‰vïÞMÅ$Ñ™}€y˜“Ä< õ—4Þ°¸wuðÉð&‰æüpAÞH<Ì>šÅ ŒÂç–¡½oÿþýõk˜›úî»ïZ·n-7•ŸŸO›<ƒÝpà‡xÜûXÛ*6á Ž¿Øc›‹õÑÿüGòyýõׯ¼òÊ}ûö)*sÜqÇáÕ«˜ôܤ‰ŽFÏþº½±Û 6’6à@¯ÁÀ&<Ü™ÞnàæÇ„dZ¬�8¿QìùñÇ“-;wîüñÇ[åzÔÌ™3/¿ür)z1òqgä {ØÍ´"ŸwÞy§cÇŽb–QŽ+†äÃVõ±"ºÍC>qÔ€è€Xš ùÌ…}`ª¶ùHƒ¼‘Ì7yØÚÃN‹-?œ·Ûþß´€‹‚^ÁÕè”Q×¹Zµj_~ùe£Fôk˜›:ï¼ó¤ñ)³<o\–bW'%ˆÑy˜ÛN ”l­ ¸û²V)V‰š¹XË>üÐ#ù :ô•W^Qhܸ1„`Vtdî€GLq½ëÝìƒ{ ü�êHëOêÔ¡°mÛ¶íܹÓê¾UªTiíÚµE¸V“Þugù‘îzI1äcäTñ!†=lOòì·7ìdÄ6Ø“è_�6ü­¡!{½õÖ[çž{®4+Bòao`íá°‡nؒɄ֫áØnÉô„L>!G¸&z7ÙQµÏíT>üðâ¬fµ–/_~â‰'JÿËt“——Gü°ó¨‰ó¶Å‚àw‰ú•w¥)V‰Ž t;öɲeRò™ô裷Ür‹íI¨6l¸~ýz«Üüüü¶m۪렓(92ÿ°.#™ž´Ã>ñû ¶ Ø“P9 ©—¸œ7s™þᇬÌ>t¨4}úô‹/¾XšëQšäãÎò#Ýõ˜bÈÇÈ©ÊùÀ2¦ÄO$¢íuݺu¥aaHDð#Nõá\Ýpœìí&%‚àG$l‚PÌá-»ÈS¹¾á†¦L™¢Y½œÕé§Ÿ¾páB1>cU«VåÞ3¹@õIâ°íï!x×)ÏxáGeY¥X%:*ƒ{“O?þØ ùС  ààÁƒVš5kV½zu««Û¦»3¹cE· Ñ–Àì“@Þn!P9¶A‡b…0e”õ,�BëÖ­“ÆÄg4hЫ¯¾j•ëE ò¡,!í¡€-‰»ÞS ù9UÜÈG ì¦I>ÌÛÍOô1bÄc=&ÍŠ„|HÚáA݆¨Ö:«šâ:sM9tT"ù°Þ ˜'«Í>D9á‡jÚ´iÆ Ó¬^nêŸÿügÏž=¥Y`ö!>ÁÑŽgä8-æ„Ü%º«­matÛbÒîgŸ|"%ŸG{ìæ›o¶½ÊÎ;›7o. ÿERt‡¤‹Ø¨kåxÄß™¶a ‚Í>ðŽ ø‡¤ ÷ Ðkp€ t(lwûöíVï©Z¶lùÝwßYåz‘ùøˆ=ÒDC>F*ÛÉF›ùøŽ=ĦV­ZÕ¦MiV„䨇y»Y9¼áPo$õ¨áÎŒë·ÀÎ.Z{@8ÔÝ¥fäC€Ÿ¤rÂýÓ.Z´è¿ÿû¿õk˜ƒ¢÷çÃ?Ó±Ù‡øgÐ|‡ 6ÁU–/ü㨀£:k¦X%z%ŸRá­O>ëÖ­£Ê={öHs Ž;î8.QÑ—1¶Ýu‡CØìCPØ%Öƒ¬ÞÁ.ø¹å&ÿÐÛ»eË+{{aa¡"¼„Ù’#ß¶  >Ä‘sÅ“|˜ÛÞ@A>ôO #LC>Ñ«]»v+V¬fE?àêÆb»á8œÍà‡ òáº.ü`òkl3PLÌ>šÅ ŒzÂýo|þùçuëÖÕ¬ajÁ‚gu–4 ›}ˆÛñ±;ø yÛ{1Y^°' /«Ÿb•èQŸú©òùî»ï(ÉïÞ½[š[TTÔ¬Y3âœv¬ÒŽº€w³IûB3··„Ìì&/« øU îM(ØlڴɪÕÍÏÏWøÂy‘š|ð®#wýJ1äcäT1$ú CSˆ')’[4…¤{C>ñÒ”)Snºé&iVäf0&‚ÙG8`ÛLù$Ù·ò\wÅÙ|ð'Uöš}ˆÏ[§N–,Y‚GðFXôÖµoß^úF€3û2?þ¢ŸeUÒáÄ{é®EÅ/?ÿ<8ò9ꨣ6l(½®¢J:‰^Œ<ê]Gh„£ô;2qE܃¨Ï/Ñ`’ÝÞ¿ÿÆäS\\¬v)t'ùT¯^žÆ °G³˜!#2ä£/C>ºÚ³gOݺu­~ƒHà‡‹p�6í�{¾•Ck›räCd6Ž|0ópËûd/ü¨k>dÈ—_~9*¸¿æÌ™3hÐ igö!Y?Á¢Ÿ¥y`p¨ãºnV)êtw‚¶kù_HÉçÑÉ“­^Zai’ºÿÒ7ûŠ@îL@x‘î}¤ãȶ—K¦£ƒ²mº¡¶ùЃ¢QTäc{—l±Gšè.…Þ¢C‡‰ç7äcd¥¬ l^o,šÂò‰….½ôR:–fE52–š}ð„èÀ8âÈNÈ((‘ò†­=ÐÁ$¼¼´™ö]š÷Ùü$íV%5jÔØ±cu®›ƒ¢AëÖ­¥ó’éµ}¸D±˜÷”!ÇÉ„Ã?¶‰.¶îJSt²œ ·]_}ùe äÓ AÛ:ئûâùæÝì£v{#©¡‰höO}®ûÀm)ÉD&ˆpð믿Ɠ|œÞ(q×ßz¯ ù9RLȇ­^ZPP@Rí …64%éèù$Ý’€‡¤Ãíbò .°1äãHË–-ëÚµ«4+äƒh`øI o0iw`VŽ I4Õ:0«å}²Îç SOø¡š:uêõ×_¯sÎÔ«¯¾:xð`iV~~>k±B†EVäV/ta[“±Ç*Q‘îTb?²bùr)ù<öøã7Þx£í õÉÇ…Ù'|Ï7×& æöoÍHÚD›0”|’é5â’(Xh<ÉïŠ=úò1rª’³ù°ðÄŽ|°?‘!Ÿx©}ûö_}õ•4+øÁÌÃmp~²×$ÝAý“HÁØ|ØÓ DŒží>oê~èmœ;wnÿþý5k˜S¢F»ví¾þúk1‹ÞáªU«ŠC™€à‡ø7ÜÏ àѬ˜-ùX=E¢m–¦¬”߬XùÔ¬YÓ©ÍGQUï)š0£ÈRlà Z±Ë�bâ(z èS¸$æäã#öh³J1äcäTq#Žò!ÙN>O=õÔŸþô'iV Í>€@$=«Œs]VÈ'‘òyã&ü�ùpk›†éó&­¶÷2êhôÿ¼xñâ.]ºhÖ0§4oÞ¼óÏ?_šU1¥àPGLŒrÜJp»¶& k¥H´ÍÒ‘z|¹ò믥ä3yÊ”n¸ÁöäŽÈÇ)íX¥;%uïÌÛØk€¤­=yÁ±bÜ“ƒßšÁ9q÷±wï^E„ƒHȧ¨¨ˆ³Y‡Ø#Mô˜bÈÇÈ©âC>Üb>\Hk"iMRäöC>NEÛez³JJJ¤¹ñ1û°ùdð™ÍóÁ–N¢Ù')¬jÊ‘O Í>šÅôᇎ~–,Yrì±Çê\:§Do팿üòK1‹™}¤Oš_¨#¦øH/¾[u‚ÍoáWÝ4SôsÒÁ J>IaHí£Í§~ýúN«g•åÝÈC\1"K܆ձq€’^çGjùaCûˆ3ùDŽ=đœ|è64#Dƒ|BìF ù¸ÐUW]5mÚ4iVÌ>°b.`á-!y…á§4½7&ð|ø¡Ûqƒ§€”´‹vP«V- ?-Z´Ð9mNI±¶3û QGL rb<úÕð÷¢ŠDÍ\©4M(twõÊ•RòñËæÃ‘/f錄ëtOø;vŸ†_·Ÿây°ã@lÉGz‚@ÍC>FNgòÁ݈ùÀ;tC>qÔŠ+Úµkg• üˆ®n4…=m{ ûpõÇ‚È'™ž«Šm>ì“1Oðy³…Ÿzõê-]º´aÆÌ-uéÒå“O>Ói³ ~ÄÄÈÇuIÛ]ÂÇXúhÁv¿]µJJ>ë…'Q“q*l>ŠÚjŽƒ¥‰A3m1nÂ׉pÝGÍóÁ—ÀäÃy>”|ð®#ƒOp& C>FN[òaƒRbÈ'´‹¤Î;úé§Ò¬Í>Ì™’1ù”³X؇«<t`’™A®9¢äSf|ÞlC½5kÖlÉ’%µk×Ö¹zîè½÷ÞëÓ§4+///??Ÿmgç‘&ÆÁª-ð]E¢‹2Ä9ó0}·zu˜ä£îÈ|1Åó(²ÅØêpœã�î>’(Âôø<É´¿4mT÷îÝ7òÁ‘÷c‚=Ä‘sÅ–|¤Þn¬p©,¤5ý¤À\xbÈÇfÍšuÑEI³¢"’†fÿÁðƒßØÁ"§åÒÓU¡Îø“#Ÿ$ŠvÀ"\cøÁ~nÀëÙ?êPoT­ZµúàƒjÖ¬©sõÜÑ)§œò?ÿó?b:½·UªT)‡–D”–q‘ââÀЀÇuIÛ¯ SÀ]Š;ìQ¤ë—±íÔãø¾û.Pò©W¯ž£ê©Ó}"Ê<° ~‰L‡7Œ(â/+}kCo7 GØ#Mô‘Ž`1GN†|Œ¬ò!(¶ÉŒíã+k‰äöC>îD˜ÆÓ\š­ÙGç \æ ?ÜŒU‘|H&ö°œ“"ÄÓ~B[Þ‡ø1ä’³…Ÿ–-[.Z´(Ì?Oüõá‡Òá£4‹¶€tdƒSE114ãë’⮋š)~]K®SR§GPÙöß/%Ÿ)O<aËùèÛ¦ÔéN G]À—,œ‚;‘ZÒœXIüËódó‰3ù=šÅ¤)ô^ò1r¤¬&&ú̇àêF ù¸Ö„ FŽ)ÍŠ|Ä8Øóç±Àê Û d¦òØæà[{Â÷y#Á:ÔUÆ )ü4iÒDçÌ9¢^½z½ÿþûÒ¬*Uª€§/S„ðC´ù$|þñ¥€ÎQNKê'ú(ÍñúO?ü4ù¨[§ äÝÈC´ÁÆuIbä-ˆƒ’œñ„ëAâ9χ’ÞöTWkÈÇÈ‘âC>”vÿ(¼Ý ùd¥hY¿~ýƒJs£‚Ÿ¼¼<Ū¦å„ ×jò!i/̤ qÂ…ð|cVKÖÍ”yø¡ã! ?Í›7×9s.hÙ²e]»v•fQ,gK;cŠ:¶)Ù<>‚¢U¢éÞåˆÖüøc äS·n]Úfy{ßugM‚Wiì·ÆC™DÚw@×}Äsž_!n±Gšè‘Ž ù9Uȇ„7Ð!ŸÐBZC>^tÍ5×<óÌ3Ò¬8˜} Ô&lÿ"™äƒ»°öÌoö” ®ãiöÑ,Æ•±…ŸZµj-\¸°mÛ¶:ÈõïßþüùÒ,J>ôùäƒF11hàqt Ó3»N±JT¤«³ls]KðîÚŸ~’’ÏÔ'Ÿ¼îºël¯¨I>îÌ>>Ž¡CcœÂú‘Dæºp-l*>Ðw$3½ÝbK>¾Ó‹— ù9UÜÈ^—@l7bȧ èÛo¿mݺµÕ׉~¤«š‚Ù(ˆu`\|R’ð€ “ëºØ6P±Gl>!‡: ‘ÂOQQÑ[o½eeëÈ5ÑA$å@ippúRø ÚΣylÐfœ˜kÚÑ)à]N‹”|ˆ01Ï/ò©^½ºS›U®_£g×Ìc{¬´�tlÖ}?y»%Pœ7ì ÍæùXÍŸŒ|ÅÍb8Å‘SÅ„|(ö° Öb°˜Ã儨ֆ|²X}ûö}÷Ýw¥Yš}أư‡ExÃð“B”bòj'2C”bkO"ç üÜ àAøqÞH`>oD~èþ¥—^ºð uN^æuõÕW?ûì³Ò,:¾¡høvcƒ0øxÜuâ(Q‘®“t‘°»nÍ)ù<ñÔS×^{­íµ4ÉǶÿòhö \œ R¸gœ·l³ÂÐ}`Å–|ÄD×<£y¬í†|Œœ*>ä!­1ùà)¾"ù„¹˜1äãQÿøÇ?úõëg•¡ÙBZCë?¤…C�ö”KGÞÀ¯îˆ`ó¿ ?ÌÄ)ª8oDï¶?ôNž<YgÁø2¯-[¶4oÞüÀb}ö Ùv$¨#&–%à‰„v¼´uÍ&°ýóÚµ’U7©¨¿¿ä/9=¡Âá-‘ŽyÌ\ÛÏóaž}ûâO>aÚv¬ ù9UÌɇÈl>A—³ù“Àó!†|<Š~—öíÛ¯X±Bš­Ù‡ oC@œƒŠÒ“@+/¾À#™‹ssÖló yÂXy×eÄb¶ðCuã7>öØcAôßÙ¥?ÿùÏcÇŽ•fåçç3›8 Þ¥Íõ±‘ð‹¾$Úf9*ãNúœ %Ÿ_Ö­“’Ï“O?}Í5ר^]Ÿ|\ š£ô ÈõE9‡7®ï(‡VëJ¦gøä&M{’O•*Uð#4öh3äcäT±"Ö¿‹äSN¶†)É$Ÿ ó!†|¼kÆŒC† ±ÊÖì#9àB½A¥C>õaðYš¹¼˜z¸ ?1Œó溘í:?T øë_ÿš——§sþ²ª’’’¦M›nß¾]ÌJ¤6…‰Gç*Ù<NÍ;¶ÿ‚1Á¢”|ÖÿüspäSTT¤è&š}ü2A8ŠÓŠoøõô`ùdlb»Å–|üåÍc¥ò1rª¬ ’žOŽÉfL°gÞOˆþr-Z´X»v­47*³„·†ÀåÒ!­¡÷â:0+‡7góOÎá›öÃésÌâùäüôìÙó7Þ:‘玦Nzã7J³è#ÊâÀ€²ÂøãﮋÒG‰Št\åuÚGð~ù%4òñÑìã‹ç›_NV¶G+5î/ XŽôXð ÝÁ¾}ûbK>þòŒf1«© ù9Rüɇ ‡7’G‘ô t Ÿ&ùC>¾è©§ž²Z/"*ò‘®j*š}8òI õ¹¥5WÀ6õਂ\[}wÅÄ2:ðÓ¦MÚKICBåˆhvÜqÇIß Ð[ZXXÈrbküñw×Eýj;JÔÌÕ/ãHŽL%¶ä³qýú@Éç˜cŽQ³OÐgÆ/Î8¯’~›Ë›çOò‰{Å ù9U6’t’!ŸìСC‡7n¼uëVin„ð#ÎöÁfŸš«j5Ûü:³$Šv€[—¦—úá"¼•%øaßN}TíÚµçÏŸŸËÕ«¯¾:xð`i}>éX‡K ‡jôc<¾˜wâãä¦o!Á)"ùlÚ°AJ>Oýå/W_}µm5œ’O f¿Rü:ìJãpÞnH”¢¨Öñ$é!þòŒæ±ø©6äcäH‘“,æ£C>¢ÁÇOöiüøñ£F’fÅÁìƒöႼÁœ’¹,T×ü0ù$ÓÎÜ¥h=Sl“â ?®‰~wéª5XyyyÓ§O¿è¢‹t.QöDoÑÉ'ŸüÉ'ŸHs+W®,.lJ"5þè\È_þqâ(Q‘®“«–•§“¾œúb‰ä³yãÆ@ɧvíÚŠÃÚ|¬Ò]˜b\ŸÊÝå¸5Hªã`Ñ_€{S¶wïÞÍ›7ÇŠ| 5ŸÞ M@ÜãmÈÇÈ‘²‚|H~¤äCŸyö'5ä“Ú·o_ýúõi«-ÍÙ‡[Û”³ù$2ç­JkŽáÈ:6ÎàS*¬ó~ké·pWFZ,™šã¤~ªéQ£G¦lÕ“­>øàƒSO=UšEŸÃ‚‚K›U¢N•|ßyO‘®“뮤B.ì$RÚ!2òÙ²iS˜äã£ÍGšî£‘ǯó³]Ñá Ï%©GEê&Àb»ÅŸ|"ÁbÈÇÈ›²|ð$dHkbÈÇGÝyç=ô4+fò†ßª¦VäcåðŸdÚ“‹‹pÕ„0ü½i?ƒ zñŹiý9¢þýûÏŸ?_š•ŸŸOGâ«OšÓÃ!7G‰Štu–fïr�jòÙºys äC;Kõœš}üL{9¡£ìðÄ::c’ê&âO>QýR"dò1r¤8·˜„×’z»EåêF ùø¨mÛ¶5iÒäàÁƒÒÜÈÍ>x†~i§&Ÿr镹IÚ{à‡ b/AÏ‘ÛæÏ·ÐÑ,¦3í§K—.óæÍ«U«–ÎUÊ’Ö¬YÓªU+éÈ#‘ u`ec (Ñ{áÇ)íÄu¤Òê“϶-[‚‹pP­Z5ÑÛÍG³O8‰No¸4f8è8°¸y>q&ŸHn¸4…Íù5äcd¥X‘³ùò•Yò¡ºõÖ[}ôQiV´fú2ÂaIÁøïí¤qÞˆùdð!ùÀ3ͶyÂ_ᇄ?I Ï7úg{ë­·Ú·o¯s•²¤;î¸ãᇖf奻1ôs³JxµùØæz)Œ¥ÓÔ;‹+ȇ~îØ¶-Pò±µùˆ5·Íò˜¨_صåA,`».WDÛF 6±%Ÿø`1äcä\YD>RW7’öp3ä“eÚ¾}{ãÆceö±Šs�O$·°)~LH$“|˜p¯Vš^®Oò³O2½àE†@±õyó^ÌÖó­råÊ´'>ûì³u®RfDÇ4Í›7—.lJRã<â Ӥ㋠%þÀ£óT×F9B³H>;é£%#Ÿ'žzêÚk¯µ­¡;ò‰Äìã(Ýõø[ñ+ˆ“E¡§€q2ö“ó ˆ-ùD…=VÇRò1r¤¬ ,%RÔÁð$bÈÇwÝvÛm<òˆ4+Z‡7†70Û‡#¥‡s` ‚ë6ôøG,Eqð„F;¥(¼54c>áÇ{1[Ï7zàwÜ1~üø ºùØê¹çž>|¸4‹>¥áD¸ö¥°þI‚F Eº:K³€¿r7^WØ|pÖ®;‚&ÛÎË©ÍǯtÇè¶)\x7�XÒ”•ò~!žä#=$Z!#§Š–| ¼l%ù�ö”‘'LW7bÈÇwíÚµ«Q£F%%%ÒÜÍ>Øà>oàêVNPBAä;vi ÈŽ›çSšç-ü ?$,øIjx¾õë×ï¯ýkQQ‘Î…Ê€èï~ÒI'ÑGšKÇ=^"\;Jô¥°þy|7︦Mæ!ú »ÎPÇÎÃmìÞ¹38ò©Zµª•·›´ã♇d:¼Ñ ’~A–¦ú$RK½á÷bûöíÛ²eKüÉ'Zì!†|Œœ+KÉâY“ÔÒç†|²UŠù š}¬‚¼qo`ÉGZyxA…§±²Ž#à¼]¶á‡hx¾Õ¯_îܹ¹Ó“}ôÑGt|)mèƒWPP¤qÁ®M@úÅ\¤«³\—Ô‘ºwä[¥I>{ví’’ÏÔ'Ÿ¼îºël+¬I>A˜}ÜeEÂ<lÈ'‘Ž }¸ À!ø¥›ø“OTØC2ŸgC>FŽò¡=8¼d'Ö䃧…‡¼’“!ÿµk×®ÆKsã`ö¡»œÁG õƽó"’Ù·%‘«AO6KÇðÃì?í dò!!­ç[^^ÞO<qå•Wê\¨ hàÀö¤Y´õôáÚ*1„týú÷]ÔYŽÊø"ý»”vˆùPM>V!2žÇ=‚»bÜ.t@>$õDAß‘´öv‹9ùøŽ=ÒDÛb†|Œœ*ròáBZmò•|ˆ!Ÿ¬–bmƒPôqÂÞnœÛ›¦Ù‡dÂê /oÊ™}"œðCB„Ÿ¤†çÛUW]5uêT6î/ÛÚ¸qcË–-¥@è=ÄfŸ2Æ?VéÞm>ê,Ûܤ3"´Ú•rŽ˜ø+…ùLyâ‰?ýéO¶5Ô'/f/¹úCmiº_æ dÊÛnÐÆŠ‘6ø”ËŒS’Ìtˆ9ùÄ{ˆ!#çŠù”·`.FwEƒOÈá ˆ!Ÿ€C³AðÃ+ü`ìႼá.Õ\ZyÖ±‘4ÊcËòÆñ,oIk¦Ðà‡hx¾uéÒeΜ9aþ£Ò=÷Ü3nÜ8im:ñb¯!û¹¹Hw—åßÔY¶¹îJ*äŽð£±ÀÞ={¤äóøÔ©×_½mýÕäS¥JÅ2\YH]À£‘G?ÑQ ïÆÆ:RòÁ£’ ð[ò‰öÔ“ö††|Œ¬òáÂhIË[‘OØC ù§Ñ£Gßwß}V¹Ñú¼1ìÁO'LWàñâóFÐô5 ?˜‚ ÚA„+ü0… ?¶žott5{öì=zè\+{URRÒ¢E :’æÒ{© Šÿ„–“›~1×r4ˆ×!mºAÉ'!œ? òÑéÅ2 B.Rþ)–& V>¢Z³v‚ÍÖ­[cH>á`4QZÌ‘SÅ“|ˆ°ÆAØCRo„ ù”ѱ]³fͶmÛ&̓ÙG{ã<ß “N]Å•OdƹÆüœC2ÝÞ’éµ}X·Òôò>¥©µÛÂ'.ü$í<ßèá7ÜpäI“¤ÎÊŒfÍšuÑEI³è³W¹re1=|þñ÷ð¯¥S ¹óÂòBA“ÏQGe{ïD²ñÇu î;HzBè8’Â<°ùÄ|â†=ì¦ò1r¤¸‘Aó|HÚ!$|HX“|ˆ!Ÿ@õÄOÐ!¬Un„f.È„:�LO µ}D³®<¼Þ#ÈçdFµ&éá>çù†É'Ú ?$\ø!žo:uš1cFÓ¦Mu.—¥êÕ«×ûï¿/ÍÊËËca19•;Op§uÚ°¸kˆ4›qñŸ»]qc߯¿JÉgò”)ŠväŽ|¼ÜÍ<¦`o7<$íð†{<ɇ¦ìÛ·oÛ¶má“Ï믿~É%—HU•+WÿÑbû”öƒ5kÖ\´hQÛ¶mÅ,£W„䑬¥ä#–g-@T“|ˆ!Ÿ@E[®c=víÚµÒÜÍ>ôédØÃ<Ü ÂØ#:¿áúÃ.7Iʦúà†=€@˜|r~l=ß Ÿ|òÉ!C†è\.õã?Ò.œµwœèݣàr™rq®ô„Q¥{Ïõr¸~KP›ãÔˆá"Ejäá6öïÝ4ù8꼼Ў:W´-Mw7.çvÅðnìéâ<û± �ý¤` ù|ôÑGçœsΞ={Ĭ¼¼<κëÅCèˆmåÊ•5jÔ³Œr\ÙB>öÔÓnȧLiæÌ™_|±Un<Í>\7Œ=Üû<‚b�ð°Ü$ òœÞn°Îiäшßð£S’…üV8pà³Ï>[µjUÍ+f—îºë®‰'J³è“™ŸŸÏ¶cÅ?ê,¹še|9‰ïòÝËÖà oïÛ'%ŸÇüÆo´­¼-ùÔ¬YS}_ì?!{»Iu(^™%dáÝDo7¶ùlÚ´éÄOܾ}»˜E+ÉâPáŽL”k€ÔO´Å’šºuëÖ¨^›ÅYñ$‚æùà?>&J;ab1ä´è—¥ îòåË¥¹‘›}ðôéò¦¸3ƒ—yØÚƒ­@Üp„C0ø�ù”f®ðÆŸ\ƒ[ãOÆ ÿú׿víÚUóŠY¤ƒ¶jÕê—_~‘æRòÁ¡"á×Y¶¹:4Ë8-éè@§-¶wc…-𡵡Ÿ%û÷‡L>úwÆ‹ýÇðX¥ûÅ<ýIMòáü¢YÉDfTëɇªQ£FVíLé”SNY²dIÔµ0Š£â@>lƒõÚlTIdä#m@ ù”%½ûî»}ûöµÊÐì6èð·›tÂvxƒ—|âù“H8Âí�Ì>„XÀƒ¨|ÞHð“´ {@ŽQ£Fýùφ0JeFo¼ñÆ€¤Yôy£ƒ!|÷"äœÈí<.Jz9D!ïÆ G¾U¶Ö¶aE>Nž|ÓM7ÙÖÖ–|œºy¡un´ÌÃ…¦·[ääsë­·N:5ª>ÅU®\ùé§Ÿ.ÃþÏF^-ù`ƒ‘aA~naÝ6äS6¥˜É¡ÙyÃá pœkèÕ ?"Èà~°ERO9v{�ç7öècb9?D#ìAÏž=_xá… h^4[tÆgüýï—fUH‰K4v_ñQ®Gù à!ÚÌÃ6KÉç‘Ç»ùæ›ÕÕ#väSXX˜]ÞnVéÞ™‡ z Ž|þ`Õš5øÅÅÅQ‘ÏÞ½{[´h±cÇŽ NŽ6løÓO?qÿŒ˜bN>{H¦Á‡¤¢ºC>eL_ýu‡¬<š"Ÿíƒ]Ý0ö`æá<¹HÄš|`û¹aÏ7˜äÙ}"õFx¯SŒÑ ¢@~~þ½÷Þ{ûí·4>ˆDk×®mݺõ¡C‡¤¹t<$µtEÎ91·óøxv˜öy°¤$dòÑ¿-^ì?N³üµüˆ‰ÉLo7ì@Òá­™bE>T=ôÐøñã÷íÛÐùUQQÑŒ3þ#F9®¨È‡›äCÒI»½aòÉ- 6lúôéV¹‘÷°)æqÎÆè¥X'äCÒÌCP´ƒd感R´¶öyƒhцz#ÁÑ{@‡hÏ?ÿ|YŠy}ÿý÷?ðÀÒ,úø±PÒ»¶Hì<Ñy°Ü ëÕÃnGÖ¶ñÛ’OÙöv“&*RDo7ìÀÊ$ÒQ­IzÚ'›íÛ·GE>TçœsÎ{ï½gõ’%¶*((¸þúë)¶E]£ø*>äÃvÙ†{H:ª1äSVµmÛ¶æÍ›Ks#ôy£+íi8þ8˜|Ê á­E³ˆƒ<É•‹v€‡s{ƒh×e ~4KÚ†= }!m鮹暲aü¡c‘Ö­[[…€§m+4 qvu󥀋’þ+•£v[hîÑÚCPSsèàA)ùLzôÑ[n¹Å¶ÎÞÉGó…<VéÞ™‡IÕ:‘á€dvT´Œ–|è�kàÀK—.Í"ËOÕªU‡:yòäø¼ì0Š¡&Nœx×]w…])ù€Ù‡Œj"4øC>aj„ #GŽ´ÊÐìƒCˆäƒý¹¥äƒ¾aaGxóäÃþ�Ò ¦ýà8×l¶ݦg¦F?I»°T]ºtyæ™gÚ´i£yÝ8kÁ‚gu–4‹…:À)qàœ0½ÝÜ•G.†ò à!2¼‘&â†~þí7)ù<üÈ##FŒ°ýNÉÇÔ)²ñG3EŒj£à°C¤ÞnÑ’í‹üqú[«]‹#W^^^QQÑ#<2xðà¨ëbwýå/¹îºëB`3ì!iò!iW˜íÕ7ä“s¢¿q«V­Ö¬Y#ÍÐì>oô“ u ä#Ú|ðK>«úÃoͺ:Ür³}ØŸQ Ìó‰~HD1ˆ†ñ‡þd´½7n\åÊ•5/[õèÑÃ*f«¸à ‹<æêpTÌÇõ¥ßnûkð¥äC(ù8òvÓ¹]q3þ¸ðvãæù`/�cò¡¢?ôý÷ßÿÖ[o:tˆv.%%%1¡ :|¤÷~ÒGî’K.¹í¶Û`Y3##…æÌ™CéÊàÁIM>$~0öè\ÝHŠ|V¬XQ«V­Ð®˜»äCRæ Aƒ¬rã`öÁ¡ÞÀÏ96`aƒ‚|@¢Íw‡xSnØ ÿ}Þ˜¢‚¸iŠ27~â‰'úõë§yéxjÑ¢E§vš4K4û€Ê°'žF,§tõðÚ‘‡É„Ÿ#‡IÉç¡I“n½õVÛ/â‘|¼“¡m®÷[­Ÿ¨ïí†û’9χ æùìØ±#äZ»ví/¿ü²eË–0^ Ñ›P¯^½&Mš„ùBÚ¨ ˆå{÷îmÕ‚$+ò!‚ÙGÄE<k&J>ëÖ­ƒÊ‡ œ&ªîÝ»/]ºÔ*7ü{Ž#\C¨ÎáM$¼ÍÕ?BÔÿa›ìâ˜x¶Äyƒ8בÏLÊóh¨hÃ7eÊ”c=VóÒqýŽõë×ß¼y³47??ŸWaùÎ9q¶ó„ßPx1b¸³ömæa¿>¦Í'4o7En8ÞnÒDÎ)šóvc‡€Û[2í¸[\\7ò12*¢££† nß¾=äëÂ<’²XÒš6«Fhð¡ª]»ö–-[¼b®“Ï—_~Ù©S'«¦?ZŸ7úìÂTáM$Ñç-â`ÂÌC2á¶ñj?xmS.Ô[äq®™"„Ÿ¤ÆÌú#ÞrË-£FÊRç·?ýéOO=õ”4«|JlÛ±D 9A<6‘Ë£Âxˆu¸2Väã—ͧzõê¶'‘~×e|«t×ÌÃR°_4I¿Ù˼Û2äcdœÚ´i³jÕªð¯ËÖó!iò!²>XœÁ‡„N>Íš5ûñÇüb®“ÕÕW_ýì³ÏZåFëóƦú`ø‘’4àÔ_J>ø“?ó€ ˆ Oþ ÿ."„’º¶.éuêÔ;vìСC³n1}úôaÆI³èS'š§ããê¦SÀQ1_ŽòEá|t6¸m+ò™øð÷Ýv›mý=’~¿æÎ¼£Î “y˜ € $õˆ–ËŒjyC>FFjÒ¤IwÞy§Ú1>ùdö‘–¿• >T—_~ùóÏ?æ ùü{neË–-wíÚ%ÍÖìÃ|ÞÊ¥â\3òÁ=G>œÙ‡ k?Ü`ȇ¤§�•fŠƒˆs�Û~l?T­[·ž0a‚UÀ´xjÙ²e]»vµÊµ2d…ìê¦S@³ŒÓ’¾ŸÇuƒìÈ࣠â~¤Ûÿ{äHhäãè¦y·ÿgüqFœG�4û ò¡*))1äcdvîÜÙ¬Y³ð#¶c‡7‚,?VŠ{ªT©2{öì6äóoM›6íª«®²ÊÖìƒ#\Cß&ÏZE{#öˆó\aƒu„a|0üpÀ.òNA‘óN<¢Î;Oœ8ñ”SNÑ<m´Z¹reÛ¶m­róóó¹G + cNÈäå€äÎ/˵‡8a¼4ùٞĪ’îÊ8bKEº—D«xAÆù<ãw½@>àífÈÇÈ(P 8pîܹ!_”#b? x˜¢òs#©ð6lCÅ*C>ÿmúO>ùäO?ýÔª@TðÃ-lŠÉ<à°Þó%2%½J2S\¨7~`ªŽ|@ÅþE9?$e>¶µnÓžqÆ÷Üs¥ ý3G¢Õ«W·nÝÚ*—¶°00 ߟ-Vv›m²—‘·-ð‡ÌöÿõûïRòyð¡‡n¿ýv‹ïñy$Í{è…v¹A€:œ°Ã³Ôæƒ_oò12 T›6mjÖ¬Yȱ òòò؆µù„³Š_¯¾úê'Ÿ|2äëòù?-_¾¼S§NVѺâ`öa}žíØÞnH¯ÞÍ>˜|™AÞ˜8òÁ& 0õô˜œÜpÀ7p~cþ½Â h°ë»óU×®]xà^½zéW#d½÷Þ{}úô±Ê¥-¬è@ìÂä1W§€f/åÃQ+†‘z¶Ã$Ÿ˜x»)²üe1‘ÍÅöZ�æâ£8o·;wò12 N·Þzëc=æH›ë¹l;2ðý °N:ꨣV®\I?C¾®!ŸÿHÆŠD ?xaS1ÎUœ7VaüþÏÖìCÃI‡�àþ»ºáE~À .‹àÇQaG§Õ {ÍÔ½{w:ìׯ_ ùË_®½öZ«\~PšUæí<6úͲ£Q¸ €Ñ?„Ûµ"Ÿ 'ÞqÇVu©É§råÊÙëíf•îŽyˆ°˜oÀšvHÍóa¯f ù-úÿªS§Î¶mÛ¢®HìT±bÅ#FŒ;6üKòùh+ß²eË­[·Zˆ~èˆó|S6þ”³^áˆ6Ä©>ÐYbò)ùa¹‘¯óùçÑs~cjÒ¤Éðáï¾úêªU«:ºD ºøâ‹gΜi•›——§x®˜B še¼”Y¾8_yñvÓ? m¢"_¸Q§@˜ÞnÒÄ$šä.Ô'…çùTÓtàÀãífd´6oÞܨQ£ÈçÄMÍ›7_¹r¥m�† dÈ'C/¾øâå—_n•Õ¨ˆMøao°°)& ?àÛ !Ét{Ã_„³r².Œ?âœiÌ0ø0 ¢‰GŽ‰ÉŸ<rÏ7âÄù¤âœ\y啯 ‹Ãú§ôw¬[·îÎ;­ T¬Xß ×$;OÈÿ}ͧÅ/ƒŽç›Óóüë÷ßÅ!3ýŒðÁ;ï¼ÓªÚ }òqÚ…e·›4§€#4Ø|¬æù”f.ÝV\\ll>FF!èý÷ßïÓ§¦H.¨V­Z}ôQ“&M"¹º!Ÿ Ñ»AŸÎE‹YˆÖç B�ípžoö”Ë\؃;3G>Øì“DÑH „ÀÎÃÁx¾Åj…SP<ßhaƇú‡tèÐá’K.2dˆ£ýÕ«¯¾:xð`Eüü|iº±ó!ÃqõˆÙ‘UGLQ#m%ŸjÕªÙžDZO×ÅÂ÷v“&:õvƒ¹ YTkC>FFáhΜ9]tQäsâ 5j¼ñÆ´…ª†|x­Y³¦mÛ¶V¡ý"7ûÀ §öÀœ’"‘|8±ÓŠCŽ|’HlìžÌŒù&Âs{‹üxˆç7¦Š+ž{î¹ èÛ·¯Õâ9‰Ö“Ò׊+¬ Ч bÈXÉ5ùRÀQ1_ŽòEGê^ˆÅûþc@¶ Ÿq&Üu×]Òšcy!ŸÈ½ÝYþ2è톛}˜çĽÝا!#£0õÎ;ï 8ðàÁƒQW$JuÔQ¯½öZ÷îÝ#¬ƒ!‰&Nœ¨è›£5û@¨7�ü‚¼a·o¬r™Ký0a›$Š¡Dƒö‚ç7?êÂÉÔ²?Nÿw”1N;í´óÎ;ïì³Ï®Q£†£cÝé¹çž>|¸¢�3BjžÍ‹©Çw;ïazli½|\�m1Åvò_ÿ’’ÏØñãï¾ûnñBœôÉ'{½Ý¬Òþ4@>xIëDæªÖDæífÈÇÈ(d­Zµªoß¾[·nuô´lˆcêÖ­»`Á‚æÍ›G[C>ÑiÇŽo»£‚lö ?xž~íÇy{‹AÞß÷Ž$3È[ExKfÎÿÁðCE™'&‹ü€EG…áêÅDÖnݺ]|ñŃ ªR¥ŠÓÃ5EÇ:u¢#E™ *؆7‚·›Ó*y<Êwyš;5×øu*‰õ8Hò¡ƒòœõvqHë l ˆjmÈÇÈ(*8pà¶Ûn{íµ×öìÙu]Bm…jÔ¨1dÈñãÇÛºŠ„QC>R}ñÅ;wŽÕò>$½|ÊÿCöÁäù=àâ·`æØåúHð@jÿaÜœfö‰•å‡ÄÃøCÒ“`&•SU¬XñœsÎ0`@¿~ýüu„Ûºuk÷îÝúé'EZy®ýrñõ=ptQ_þ³ÞOâî·v:ævmÏÑL´5ûü{£´TJ>cÆ9r¤x N®ÉÇÑÎ.o7i"7ɇkçËYDµNÙäþÛÍ‘Q$Z·nÝwÞ¹téRú/‹I8Ü D›:>éÝ»÷„ êÕ«uuþO†|,uë­·>úè£V¹ññyËü`ìÁ±ÝÄN éwIf “O2í:)›ó#F{‹›Û‰ñ‡x³ÿ0QêÓ§ÏùçŸúé§×ªUËÝI@´9>óÌ3¿ÿþ{u1öšY𠹏®»C‚–kƒcŽþl™ç?Û¡‹“šmn˜ÆŸ¤0É¿äâ\ÝH&ù°Û‘Q´*..ž7oÞ¬Y³V­ZÅÆHÉ´¯M– †åË—?þøã|ÞyçYCŠJ†|,E{…6mÚüüóÏVâàóÆ…:Do7ÎìcE>Ä‚8³^ó‡Ù|âð€)8‹ Xòbÿó´nݺwïÞ½zõêÞ½» CМ9s®ºêª½{÷Ú^HÇ`Š„fç èîô'önðqqÛKSÈ‚|F;jÔ(«š€lÉGÙ+ÍîÅþ²ñ§p!­E³žD:Â[)Z¨À‘Q|tøðá­[·RbÓ²T*T(((¨]»v$ õhÊJ .ìÛ·¯Õ-ŠÐìÃù¼‘‡n'PHërB7îu ÷Rë ‰À?܄ނDÅÖòCbfü!©)U^ì? úœœtÒI:ujŸR‹-#z¹¥K—>ðÀ|ðÎÉi‹Æ¢j*¸Y7eÃ΃åÎÚàã Üóh× ù8úïx¡un@Æ1…µÿ¬_º4‹ó| õ6äcdd”ƒ2äc£«®ºjÚ´iV¹qðyÃ}ù`˦ ’v{?VÚÁÛŠ9?,jØ|Jc¼ÎVÜøðÒѱ U®\ùøãgÔ¨Q£š5kÒcïÞ½ëÖ­ûä“OÞyç5kÖhžŠ>3*TpW ×ÿ—pì<áüýš‡0(wÊ<xÛŠ|3æž{î±®øÿI‡|\t^¾ØåL§‰,Ä"´ù$õãØФÀ!†|ŒŒŒrY†|lDû:d\»v­Uháø‡ù¼q̃=ß°Á(ÈÊì“@ѬÈGjb„#NûÉeøq]ßjG‡'Z±òåË«M…ú§ çÀ˜y°\¸=pÄ<Äu¸2A“f`CýÿŽ—Ûë—ñÇE"~«%FuÃò122Êeò±×|ЫW/«Õ¸ŠMøaÍpð6GA`äÍ>Ü·à¼#êe¡Ëä¼&0ù€¿G>1w{cŠñ¢7òåùjBN$^ÇâË茳]˜}˜¢"Ÿ²ííÆ%bæ7\¢Á‡;œµ$,¶Û®]» ùå” ùhéúë¯òÉ'­r#7û@<ç§\zIq©qÂþøe!G>x¤noÜÂ>I´àÀO ×ùÁŠ•ñ‡ !‰Øƒå׿ (‰ü%"u±@™‡ÉŠ|î=úÏþ³UÅ@:äSV½Ýô sv~Ž|6&C>FFF9(C>Z:xðà 'œ Xá$*ø‘®mÊÍðÁ®Åà?å2ã¼aR,Ao$3:çùVŠV5-E+ŸrÑb»ÎVœù‡„Ž@ôê °5 ûx]¿NÐ ]ÈÝOæ iާÝ!§@É'??ßx»‘´Í‡}bæ)'„´áwU†|ŒŒŒrP†|tµlÙ²SN9ÅjmSÅ  Ì> o`%on’&Ö5Šöø ¢ Haö!™þo¥(µù +ÖùÁ g2ÇCB@ 6´ò¥¶Ú_ÌÝ…üý |ôÚÒ|ûÂ<LVäsßÜ{ï½êc‰[òñ×ÕͶLÐÆu"ýWäð&6ìâë"Ìó1äcdd”k2äã@Ù²¶) ÞM¤c¾©gûHĹT˜sð<l‚ J;¥1^ç++ø‡ ÛßœžÓJì¡ò~ž€þq°áø¢€ A®™‡XsŽfUƒ&ŸÂÂBjp ÚÛM‘ë»ñ‡[Ô›Ì):-ö!##£\–!úí·ßN<ñÄo¿ýÖª@ä~°·[¹ô"œÍ§&Ÿ’⻨ɇmcÔI"o·$Šÿ†M@GŽI¦ba‡{ç(Pç7ßÁ?Š»?8{$8æ‰ÕLžÏï]^Z]/– ÍA¶‚sôÉŽ—¥äsïý÷ßwß}¶gð‹|ôoµkŒTçB`íeÜHfHëDf<k8•!##£\–!gZµjUÇŽ:dU Ú ?\xk<›z æ˜z¸ ?V>â$ݲΒas‘°ç‹ù†)#ƒŸ8[~H¤Æ‡ˆ˜ª8~0|¬g§ŠÕåümW½[*\0Q"m5"!G·Ý CêðÎ6ŠtÚæÿ/Óí<çɬnÀ ùå² ù8Ö¤I“n¿ýv«Ü¨Þ7cøØÖØÛ û¹AlóáÌ>:&"ƒ’v»â»qžoŒ…Ø'ÅösËÉfþÁâø‡înˆ“½gùe©ÐdûÂ<¸p äS±bEÞnÞUÛ\_@r±«›8‡“XÿÙë'’j¥ ùå  ù8í'N?ýôE‹YˆÖçMœðœÃ„þ•‚¼)à{cì!Â<{.¶›hÿÁ^p,Ôcž8G»ÆŠ'ÿ¸>ÊË>ž!èÆYNÛaßj6×´`E>¾ï¾ûï¿ßöl¾®n¶e‚6þp¹ù`7ix8¿Ÿ2äcdd”ƒ2äãF[¶liÛ¶­U¯L"õyƒé=xqySL>Ò™?\ßÉ}#l4Àf‚(“höaïó0› {óh×Xe<ëïIB;mør×êúëyåÈÕÍEÝÂ'éQ³Œ_Àc{-.“ðIÊÔcE>ø-1äcdd”«2äãRóæÍ;ÿüóÂ¥A<ìó†m>Ü §â"?Ø$%Ÿ„0e6)ˆ ›xÁa›¸æx¾±ø|ÅÓ™Íû â<Qߣ<6°GçšV™‡)hò)((Я$“æ÷òB;Š\_€äð&X×bò122Êeòq¯aÆMŸ>Ý*7BŸ7 ?ÜTÑøä#ÎüÁ´Ã})+ø]à¶kK>ÌÛ bdü2Í?ÞèTñ¹¨ïM¨/ô˜G]ÞŠ|î¹÷ÞxÀö̾O6z»iæ‚I_œä“@K´Iq Ÿ’’z‡ ùå” ù¸í6Ú·oÿÓO?Yˆ|¬mÊV¢´2þp”²r'’™ß0çˆ)Œ|ÀóíÀáÝ8ÏŠ¿3[Ü&óÄÜ\š|±±¨s}gÛC¬ÈgÔŸÿ<zôhÛ“;%ßë¯YÆwàÑ)À»á5LEò±B_mi<ùÐË-[¶ìƒ>X»v-í:}9§TU«VmÞ¼yŸ>}ÚµkÜUŒŒŒ²W†|<é›o¾éܹóo¿ýfU  ?bœ·r(à5^䇋”ÖÂÃ$NøÁŸàí†-?˜€s’(òx»±þ˜í² öó€oXñçÇúu†pÎOùhZQбüÄ A“OåÊ•í+š©h½Ý¼È³ ì>oŠ·TøU%Ÿ={öM>´ òÉ''NœxèÐ!z9gÓýú5jÔ õ衇ÂŒŒ²H†|¼ê‰'ž¸á†¢šðƒ=߸ ×~8òÁþo‰L™åžŒ@Vä“ÌŒó^p`êáŒ?Y ?${œÙ|y8ƒ{ÂË ¹nc}78xgý£"'-i:e\æÕ¡mØIj>ØM´Õs‡sAhB Ÿ}ûöõë×oåÊ•Úy¬TµjÕÞ½{Ϙ1£|ùòá_ÝÈÈ(ž2äãƒ.ºè¢Y³fYåFîóö‡Ì%M¡ËÄë™rÎo ‚ >V}*?‘†¼ Á8Ÿ7Ž€|²kÚ([øÇûᾟ'ÚK¸–÷æÔã\x4¯â躢¬Ègä=÷Œ3Æöp§ä“EÞnŽ* òa–ÎÉÍêU)Z{ä É‡¶Ø'tÅžß[ÑGå´ÓN›?~T02RˆþûÖ¯_¿uëVúg ár´Y¨^½zÆ «V­Âåb+C>>hß¾}íÛ·_·nUÈáG\á§\æÂ>ØqBŒv ?Dí#ðv›|b›+ÀVûÉ^ø!Ù6™ÇÇg5*D îºA´–úçtasð‹y\(ùäåå9õvóë>Ûð¨Å8W7‚â¹áwUâIÀ,Íï~ýõ×àÈçæ›o~öÙgÞàá¨J•*“&M6lX´Õ02mܸqÚ´ióæÍÛ¹s'I/ïBIÿìЀüñÇ?óÌ3sÐ"jÈÇ}ñÅݺu;|ø°U¨à‡MøÁ–iœ&’îD±ç›èGaåJÁmK±G?æ�m²ÚòÃ2ÿx<Öûá!œ0{å£#–Un„ÌÃdE>w5vìXÛý“O|¼Ý\Tɪ$vuK €4Rò­ñ$5ëdJ>{÷î ˆ|vìØÑ¶mÛíÛ·»;Ü_Õ©Sgݺu98Â3Š›V¬XqóÍ7Óö6nlUÃUXX˜ŸŸ?lذ»îº‹þߣ­L˜2ä㛦L™rÓM7) „?òcÝ$†ðìÁö€1à·¡¾.&Îøƒ±§4S¢«X¨·ßSb=wvMû…oÉñå© âÑÍrÑÆº6;hZ~üª†Ba’OwX³X8ÀbMz"Ì€6݉Ì5|€|àý1wÂdfÈ̓G>=öN9rÄÝáþªJ•*¯½öZŸ>}¢®ˆQ¤äꫯ^¸pá®]»¢®K†*T¨P½zõ©S§ª×¨,K2äã›è0`À¼yóe"0ø€°S4àÉìY|ß… É„‚fÖ–¦”ɇÃø„”,yÀ)ëL@¾Ÿ'Ì3‡©@1CQÆ_æñ~,mJ¤äs×È‘ãÆ³=ƒ-ù8}Cš·[ %YëMÒ>oœ5¾\*˜5nŸEò[:Ý ”|ºuëöÑG¹;6 6lÚ´iQ×Â(Gõí·ßžyæ™›7oŽ­ÓJµjÕÎ>ûìéÓ§³Å‘˶ ùø)Ú‹tèÐA1á‡DêM1áGœóÃèðæ~`»43Îu2sµÎþÞXŸ×9Í^Ï7P$–œ¬›ÉO"ò¥åônypdüєǯÆ÷H>´íر£Ud[òqúB6Ý8-™´ˆêƽ›ô$ØÞÎZ]J>ûöí³ªƒGòiÚ´éÚµk¥Yþ£­¾Î©§žºxñâà®kdd¥eË– 0`Û¶mQWÄF+V<ñÄ.\Hبë¬ ùø¬o¾ù¦K—.ê0‘ìÿ­¶ü€Ø ~¸/»Ø¿˜‡¤ã aÚáÜÞà}$ö|ƒ×¥™Qà²zÚV„žlYGAá\=ÐVÑ—aqÀãËàp+òÑôvÛ¹sg³fÍè¸\š‹ÉÇ]…ýòvsQÒu8ò¡Û°6"û/€U‡k{‹‹‹Á¦óóói®ëVÆ ׯ_/¦ÃœRQ.xQÌZLo×®ÝòåË5Obdä—¾þúë>}úìØ±#êŠh©B… ]»v¥ðcõ'-2äã¿fΜyñū˄<Ld]&}”écÍE;�›x͉ õVÎ"v*÷¥0ópöèzKÑúØæS*|û—LÙ>í‡SÙ@ €N˜½rÔÆºvµŠó0y$ú—/((°z…T¾|ùc»¹.ì±"ù$Ò«—bòao7üÖ ·Àôs÷îÝŠy8”|8àèÛa5hÐ`Æ bºùøõ`ò1Šè_ìøãß¼ys@ç¯X±"—â=”b¥J•®¸âŠ)S¦x<OœeÈ'ÝxãS§Nµ->ÿ°h rp¨7.Ú‡=Vʃù?Ü·]Ì9ûtÃ"ù”¢u~Øží#å°eû´¬È=Ùz,s„…2A<¾œD<ƒGò!ÖF’=W©RÅQ}ü*ìî_¸‹ ìÆ¶üÌ÷P¬eÆÌCì¡ æ®]»—£wxïÞ½šÕåˆ|üz¼áÛ‰Y†|ŒÂW¯^½–,YD 7‘yD¹¦ ¢¢¢¹sçöìÙÓÝáñ—!Ÿ@ôûï¿÷îÝ{éÒ¥¶%CæååáhxÂövã°GœíÃ…:€o!ÎÿÁäC„Þ—óvÃÎØøÃæùp1Ø'+Pf<ß°"G ÏþÉÑ—öSçX_ü¼WÃż“Ï¥—^úòË/[åV«VM:‰_S!ÐŽÓCÔ…{h1°ùàÖ˜Xü¡¸wO¬Í¤»ÅÅÅT\´uëÖ+W®Ô¯?'Mòññ Ò3äcýío:t诿þÄÉuȇx€ŸFýðìÙ){2ä”¶oßÞ¡C+g˜ã?«hùpÑ8›ŽùÆÁU,Z~°8òI¢�Db¨kBâ.ƒ–Úý AlœÉ7" Ÿ1B�¿Neuïä3oÞ¼!C†X9¼U¨P!??ßc%:0‹ ¸³.9ò!é`Ö¬°Õ»'h`i›¹{÷nõ¥é í¥—^Òÿ"œtÈÇGSlò1ŠƒèCØ¢E‹Ÿ~ú)ˆ“cì¡-!l‹KJº&ŸÊ•+?úè£Ã‡wwxÌeÈ'@}üñÇ=zôÐYÐ røà×"ùàI>bÌ7’ÆéÌNœÙG ?E»N¦ã¹q“°ÿÛeØÃÞÊ’çV¬&óÄN<V#„ÖÏÚqtï×òå<ÞÉçСC5kÖTLÁ/,,t4cDS¡a’fùd:°D5 ™äC„?‚tÊ%{%ÄÕ={ö¨ßÑ{;}úô .¸ÀÉÊ-ù=äÿ³w&`RTWÿ¾= Žì`@Q?ý¢QÿhŒ5¸E£h".¸£!DY$ìû¢‚à(‹"¨(T@AÙdf`ºÿ•©¯oNߥz«êÛÝõ{žyª«««O7UÕ÷­sï¹0,Y²Ä:}¼Høè´G€[P2içJÅ™ ÌÇ[ž{î¹Ç{,–-ȲԵ=àÇî>Îáæ#ˆWjAô ’ƒ)ök!çCÍGÿ”ª½É½à²¯ç%­È£f.®73Îyl’7‹¶mÛN›6M÷^ÖQW£F WfŸHækñHxè–¼«“Ì'žÀG.?Í{rɱ¯¢VkÌî?ìðÖ't’å-¹¹¹1,óq¨”ü— óéÀ7Þ¸páB/öÌÍÇA{˜æS¯^½÷ßÿ /Lìåé ÌÇsÚ·o?qâÄ7NY ’W;°Å†ç|¨ÿæ#|“s>BÁÝġ®¡æŠœç‡[P|£óüðovò'»åÇõ Œã]o(ׯÌ)î&çŠùüøãgŸ}ö‘#GtX‡YÕ â=ÞRŸJ&û'› ŸbºJÖ|›`¸Š «h<x^{u\sÍ5‹-Š1`%:óáöÜúJa>À8ÖAxê©§z1OŒÚÃÜ0ëêѵk×§Ÿ~:±—§30ϱÚß×^{í§Ÿ~ãö)k2êª(ÍGíCýGFw÷‘I~˜” ’šo‚ùË5ßøàŸlíù&õ R°OIM[Ù£ rе‡¹d>¬"í3uêTçm¬ãªJ•*v0e>!e™®$_¢Û˜š¼àü‘í{CV3¨´´Tg¹¹¹ï¾ûîÿøÇØ#—‰Ë|\Ì›Á|€qÖ¯_ß²eË}ûö¹»Ûû¹ÙÐ1? ËO’eNÒ˜O*(((¸øâ‹cï1™š"ÏóT&µ­…ʼ‡[%2‰¸ÐóM6]ÁgùadÀOбæMѾpö‚ JÁ÷™dîHžô‘¢ÔK‚§aSåtæÓ«OŸÁƒÇþŽÅÅÅ5ržÚ&}¡Tâü©©ÿľÃ-Z|õÕWI»ù¸Û]æŒ3{öì|Ð!Y Ÿ*UªCÊ“ÏùX4nÜØ»Éˆ óIkÖ¬¹üòËFëʤà‡Ü¾•hß.å™*?\èZóšj>]Ã…‡?”͇oÃó<B‡7¡æw![uh§8ûŠà‡ä'ëGòÄO*/q®Üàw SÎcã–ùX,^¼øºë®ÃOUj¨U«Ö²eËÎ9çœ$÷‹ùx‘Cƒù�ã 0`àÀ®ïVg>VŽ/sÿ±Í'ɉM4h°}ûö+hg0ŸÔ1oÞ¼Ûn»-žW.R#?¼ÚMòМ7":à§’4§„l>ò_Šp?RHøð‡<áŠù#×|£3œr âÉ^üÍoxq¥›™ÂÝÛÕnáú»$°CÍÇ¢K—.cǎů•×Ô¬YÓúª ”ü®¢šGç̧S§NãÇw}·©7Ÿ† ®^½ÚòŸdv’†À|RŠõ“߯_¿¸^’ùáÕ¬Ÿ%®@æÃ˰Š_²œDçù±QöycáJDrÍ7Z瀎ÿ¡Ú#×|ã³ú¹ÕîÝg÷÷šðÕ2e—Y/Þ(±}ºk>-[¶üä“OðƒåÕªU»è¢‹¬/Ù¡öZì8˜OûýÿæŒÓ®]»É“'»¾Û¨æ#hsÃ|V¬XÑ´iÓdv’†À|RŠõm·iÓföìÙq½*Åòû·É•h?7šä 5ßxüQ‹™ ÚÃ{¸ñ•\u„œœù‘A¼ œ]öÀ-ugRð dî—œä…1õ×Õôq·*Pþð‡?X?ÃøÍòëúúé§õÕW5kÖte‡.šO\ÿã0`/ÌÇy½`›+µ l`>À¬ñꫯ^¶lY¼/ôº)ËÿKÿpó¡Ã~xÍù) %‚óØ+y‡…Òø¹æ›<Ï©½1ïóÆ“?)øV3…ÔéðÍ› “æï›än]ÏùØ!µnÝúí·ßÆÏ–»T¯^ýœsÎY¼xñÉ'ŸìÖ>]1Ÿþ£a>À8©4¹«Ì'*0äççÿáøá‡â}aÊä‡f{„Ro2éPð€v{ãªCë®òøº½qùáyW7a´OHªö&ä‚xò‡/óno¶öðÒ+éÐ O+ð…Ăً§§ïžüν0›çž{®{÷îô×$C­Zµn¿ýö &D­“É›Ob!ÌÇuó‘ëYSáá擤ö0˜p—M›6]vÙe……… ¼ÖÓV© ?B‘·i’!ÛÃ{Á±ðh‡š|A8åžoT~tæ#÷‚ !Ð1?ÂÈŸÔ|·™ ¾›4¹Z¦¹óØxg>7nlÓ¦ÍæÍ›]¯ë+jVðòË/ßxã®ï<IóIø8„ù�ãÀ|Ò˜1>ûì³k¯½6±;—ÞµDu“üÈßèh9ùû½$˜¾àp4I· )uT<àÛØV£ùãÜó-_oÖà‡¯( ¯^‡äâþ=5Vê‚ zôè‘——WRRŒ§f¦Ï±NÞÜÜ\ëRß»wïöíÛ»›êá$l>I„0`wÍ'íq½¶ ̸Ï믿~÷Ýw'ö_zùˆkÐí¦€dªFú¼ þ£ûìÖL(º†j²ò²Ô]¦d¯OÁ7œÅdè—–þ—Á r¯Í‡³~ýú)S¦ÌŸ?×®]V³À¾µáJu²¬ÁúNì‹ð±cÇjÔ¨qíµ×>øàƒW]u•§ßRbæ“üqóÆñÈ|øM ù¸«= æ<bРAýû÷Oøå54¹üðÙ~äœÒ|„šoÈy~r"«]ë2?~W0aäl>ÊžotزD¶ùØi9ÿãÝ—ìC ~“z¡KMØ^¼KÊ̇cýêoÙ²ÅòŸx±ÿŒÆžzõêuÖYµjÕJÍ;Æk>n„0`˜Ošó1Œõý·mÛvÚ´i ïÁSù±ÿ å­•æ#X“æùq®ù¦üD<çÃ" ¾ñ:×´\H*x דÇüP ¢Õ®y¸”}Ï�(É\ç±Ñ™Oï¾}]™(¤9q™‹Ç!Ì'•æÃû¹1—f/¥À|€WXíì[n¹eáÂ…ÉìÄ‹v¹ð¡ÝÞøPj>•Èl§4á“C ¾Qtßóa‘¥ÞX…ù°° ¥â¼Ú55¹œ­O¼67þPé?}Õ�ؤò‚ìé{Á||NŒæãîAH»À|@ÊH™ùÈÚÃ`>1�óI JKK¯½öÚ/¿ü2™x*?\x¨üØö¢œçGYó€æ|¸1ÉyøCúFh((Õ¼æ!¡øl>BòÇîGŸ²ûÂ¥ìÛ~&Å—b¯ßæãsb1BùB�æR†‹æ£ö0> æ¼&??ÿüã¦M›’Ü-òjÕª ™e©7¹ó›à?r·û¡ñSùa‘¿j<*eÂ'¨šðGÈ)GþðÕçäw_8ð©¿§æa>>ÇÙ|\OõÐe˜0KêÍÇ‹„ƒù€ðóÏ?_zé¥;wîLr?®·Å£v{lÇîð¦œçGÙáßT¦€lb‘ÞìõB¶Ç^`½ædó J5¯ùç9t@@옺ð¦ì}a>>ÇÁ|ܽT ‡4Ìæ“æÀ|Ò‹õë×_qÅEEEÉïÊÝ_A~hµ7å˜î?9d¶S:ˆvxSš2~¥ùPbá\PŒæ"óÿÈ3ŸÚóÿðä½ìüEÁ€3Yï<60Ÿ£3zÁOå! óÆqË|ä™|”xÑÏÍæRÄòå˯¾úêÒÒÒäwå…üØÚC‹ð´õvöà>ó0ÔÇZÏÂ÷üó‘‡þuø…ã0) $,ðj×!UÍkyÁîð&t“§ýIÍ—2ƒWZ#o óñ9^›î¨†ù�ã¤Ò|<ÊöØÀ|@ê˜7o^ëÖ­ci^Ç‚‹Mp‡R×´¶]Ãå‡v~£#¬ÝZO1i’!ì�™ð”êPT¾æê<Œä|„AÁȲt¥<ùP!–þo4ZàOŒ_`M�óñ9Þ™ó! óÆI™ùpía0Ÿx€ù¤)Ó§OoÛ¶m0\Ö9yÜj ò#Lïó@rÏ7:·?¨ ^3•ü0)DS=,r†S¹#œÒ|BáÊ×!RAøÒT>`Éãúö`A~ M.ªfÀùøÌ'êQ óÆqÝ|Œhƒù€Ô3a„Ž;º¸CwåG™ü¡™Zê@YꚎbá_DA~”‘Û?œ\{˜”ÿ ‘1?Tu¢šrÀöájd×<àÉŸP ƒd @ÙGZ]Kóñ9^˜O,G5Ì'æCµ‡Á|âæ“ÖŒ3æ‰'žpwŸ®´¹-çaÕ®©ùä¹}¨ÿeù¡Â“#Íó#<͇I“ÿÄņ?+ØŽÎ|¸ñaB–ù$ÓùM� ”é¤Û%4MâÑ™OŸ~ýh Zš5k¶cÇy}bæûQ óÆqÅ|œ»ºy:¼‡ófèÕ«×ðáÃÝݧ[­mÛ|ì‚´È›N{„j×Üyt5ߘF~hüÂLû¿É½à„… jòa´íg[<ÈÖždüGþ\ IÏËfZEóñ9Í›7ߺu«ò©x/t®ØW^yå'Ÿ|’ü~�ˆŠ»æcJ{̤[·n£Fr}·É·³uóü=ß”]àr"´'‡Ìó# ûQ†-Æ4áÃ"û¼ñ¿ŒÔB PÕ²@öS¶íp âÏrÿ ÆVüÍXPº‘æ—Êt æãs.¿üò/¾øÂtÿåþûïŸ6mšé(€/€ù¤90Ÿ Àú?jß¾ý¤I“¼Øy’-lª=¶Qó¡ß¨ ßóÉQU»v6ŠðÖUUdólG6:ˆv~cò“|þ‡ 2EF\Ó3H˜Ï;vl=èd‹©Y³æŒ3Zµje:à \ïífc+P p`>À$VKúž{î™={¶GûO¦mÍåÇÛ|ÿáÄ»ºqäNùS¬¢ÚµPêM–9r!ÕCWRóVríQšç#Œù¡C}èöîæ(° Oɬëa:G‹ >gïÞ½çž{®õ×t ÿ¡Q£F?üðCõêÕM|wæ“Jía0`«}ß}÷Íš5Ë£ý')?¬BT„j×9Òô>9ªj×Üp¨12ç©�‹G~ø®mÀŸ JÕÞt) ®:òX `¸òD7v=ÿ#�JžL¼¦ÌÈù€.]º¼ôÒK)hŸ9sÒI'Y²ýøã› ø̇’šÓ æÌcµ¡ï½÷Þ×_Ý»·H>ù# û±vHk^ ¥ó¡RÄHžG({@Kñ•A{øJ¡#œ0ÃÐÿ?+ Ð .j-8OåG�.äL\ñ2â#À|€uÑ»ä’KÖ®]›@Ý·¨ZµêUW]µpáB\AÊ€ù¤90Ÿ #òÃ’h=sù±»·ñ´/û&ù‘K]ó¡>Ôä5Œ©+¿ÑCZ'?ö²ÝMg>r HÈÿpÉ¡ùŸ`dñ¾í?¬"Ñänÿ·¨øù'?Ë®oôqRc>?üðÃÆ·oß^PPpäÈ·v›zªT©R«V-«…qÖYgýö·¿µ.˜¦#r‡ââân¸Á’ŸC‡¥þÝO>ùdK{fÏž­œ�ðÔ|R™D…ù€tÁjCßyço¿ý¶×o”X‹Yû¯-?<ÏCë\ ]Ý„9OåœÐç͹ìÒ|øú 4çÒ|èCn8öË©ð(+"ÐPjú¿ÅHöéPv_Ê2îÓyg>ÖIôñÇ?û쳫V­²–KJJŒ´ª½ Zµj't’u ´š:t¸ýöÛïûfÖåîÅ_>|¸¥¦– ¦à­‹[ݺukÔ¨1bÄë·2ï�%yóq8ña>ÉóÉH¬vówÜ1oÞ¼¼WMd¡ÛU .B‚çèpðF²=ÎþcCGø+krçpäDœù¡¯µ¥úׯýGI:K‘¯Wú‘½0뫘>}ºõòýû÷%ašS½zõZµj=ôÐC½{÷΂¡ùÖuoÙ²eŸ|òÉ÷ßï©©æææž}öÙW_}õ\àÝ»�à@’æ“Ù˜H/R)?,þÖ0Íüð =ç)Ø#W>Ðõy£æ“9Ï)uaü_EÖ9`’ùP½aR徬ùC3BÂ,@,\á:9((YÿÍzh°|2¸åH¸ )Éè¯ÅuóÙ²eKëÖ­üñÇâââäÃˬkfƒ &Nœxà 7˜Ž�0Ÿ4æ“Á”••Ýyçi.?´c[•*Ur"'ùɉ,þÆUGü#˜OŽfžù0•ü0É|tp#’͇MûPY JÅ‚Ïÿ2,¸,»k>3gÎìÒ¥Kš”HN=µjÕzàÆŽ›ÎùX�€ Ì'Íùd6V‹ù¡‡š>}zÊÞ1áä\í:GUóšJQ rz:ˆEV~r>ºÎo!iØSÕ| ©zÁ±Šo›…‡÷„"ÿèA¡ۛ\ÿšUdóâÿoYBÖ\uæÓ·ÿĵ«gžyføðá……….…–‘X—Ík®¹fþüùYSü�€lÅ ó1RæÒ«¹üüã•W^I囯å?rµkA{„òÖÊ‚orÎGg> ٚ´Ö(ý'®vÀT•˜$BÂHÙ|”.D…Gž)5.û†ɲK±[æóüóÏ÷éÓ'ëGõÄ‚u}ûóŸÿ¼`Ád~�Hg\¯p`jR,˜H_¬ÿÄ.]ºŒ;6õoão°²à[ŽTó@žóGPnD´‡›¬@rÍë+¢¡ £€hò‡…Çù02àÇÞ2(ÿáÝÕÒ¹P›ïS— eì ;YyvÅ|–.]ú·¿ý-5Á2ër×¹sçÑ£G›� ¥}ûö'NLfÔ| ÎÜ Aƒ¯¿þºI“&¦ð˜O–`ý?vïÞ}Ô¨QFÞ=ÿ‘s>|†SZÿ¦ƒó¡•ÑúEö‚s•f„è_šç¼H0a™jO(<þG9:HX4‰²í(£'*dñå7yó)..>çœsòòòÜ-Y¢^X€Þaqƺ0~øá‡-[¶Læí��Þѵk×äoOØòcP{XEÎgóæÍµjÕ2ƒÀ|²Š‘#GöìÙÓÔ»Gýí—åÇÎÉ~ho7y9GSçZ0¾lä<<a:“æüÑ™—FÆÿFDç6äG^OI0^.˜òYPGdý…7yóyðÁgΜ™nÝ>í4¬"ýÂ/GöCᆋrA¾¼°ðµ¥¼¼¼¬¬Ìú¼Q-ÈjYZˆ?�¤'–ötëÖ- .ò 4ؽ{wöu¯…ùd#FŒø×¿þe0�ç“D7ÚGÈùØËÎæ#ÿÕùaL¬y ÷…c‘òÃTæÃT™6ŸPäà!¤ü«\ ™á)tË|rÉMÒ|~úé§-ZìÛ·/–÷âW€¸£Œó¿ƒÖ«Ì‘ÊñË÷_h„üíø•DîL¬(‚RZZzøðaûÚ¢û¼<ðÀ”)Sø¼��¯ùàƒî¸ãŽÄêïŸxâ‰fó<”fÍšmß¾ÝtîóÉB¦NÚ®];³c‡VˆÕz°þÚ®yÓû¡ù:¶‡¶6änoÂ=Wa8Sɤl>:#¢zäñ?¼³œÝv‘{µQ/âu¨ÞÐþr<¡$TĆÿd¾ºØ&i>VËþÕW_úÙ—ŽØ'™ÿ>XѾtðr,Bý‡+Œ OÛ†$è©]TTį$2Öûæçççææ&üq��±wïÞóÎ;ï—_~1H²Ü|óÍï¾û®é(Üæ“Ì›7¯M›6ÆÇ‡8û×»ÏïùF“?BžGО©æSU»¶«`³È¶ˆ®]ÂÂÆÂ";ßÓ!ç#ø`>¡ÈQ=Œô‹sê’ºÀɱY¸ œC ÇŸÿ5ɘOYYÙi§¶gχm¬“×¾b8lãÊ7oß©á#…âûÂmù†‹’pÓ„¯”S¾½[-9œ:ujò�à:§Ÿ~ú¶mÛLG‘Õ«WŸ4iÒÝwßm:÷ùd-üñ­·Þš&ó+¼IAgûQV;{» ~”æÃòù˜$?ÊØ”©a=— š Eö`¡‚$d{X8$?%WDáUàX8T^‹ÿe yü|uMÆ|>üðÃ;î¸ãÀº ¬s¶J•*BoU/°.MÖÎyÝœÈâ+T{èåˆEŽ!¤×ùºÁÏbšó±—­3:??_÷é¬vÉþýûí«(� ­èÕ«×SO=•Ñãr4h°eË–“N:Ét îóÉfV®\yã7ÆØW>èü§™í''²àµà?Ê®´Ï ‹jœ|ÌT•hTÎ=ß„õô®-ÍüènèÒîp!©Ã›ÐÛM™ …ûű°2ÑlÕBÂD¨i®«É˜Ï#<òâ‹/:l5Û“ öÿMõØêèE‰ßˆ¡—zÍaRé|ù-èeV´§)ßâââÒÒRåád½ÑÛo¿ÝªU+¾�@Âäåå]xá…{÷î5H‚X—¯[o½õ­·Þ2ˆ'À|²œM›6]ýõ?ýô“é@þ‹ì?t¶Zð:‡Œù N©ÈøÚÉ-Gªyˆ„éýGwRP¢ù^á@0"¹}# ›oý°È¤<HHa"Ôt�—SN2æsþùç¯Y³F»ç I6>‚ü¿f_‘XX±rH!ÚÏÖ^ÃÂ× ùš£Û? _äó:Dz´ZËÖ‰œŸŸÔT;øë_ÿš­M�2Ö­[¿ýöÛº“7Í©W¯Þ—_~Ù¼ysÓxÌ'ûÙ½{·%?ëÖ­3ˆmМ­ü&'ìû¯´Â¥ˆ¶?hçê9rù¯²ü0Õü?Ô‹¨Õ0)GD½ˆª‹, ÌñâÊC!ì‚ ©@2æÓ¤I“ŸþY÷,íç–�Qÿ§„k½卯ö8Ümašì±pûC>ÓéI½wï^Ý)ܸqã4œï�À*š^çŸ~&¦}¬kì½÷ÞûòË/›Ä+`>¾   à–[nùâ‹/L¢€7è}VÚòz» C}±Ú5o…ð‡|œíŽ"û²9pì§ü«4ŸXÌ'$õvã[òžoôq0<þ‡öœA!8OÁõSG2æc5è­Fƒò©@ÅŸcˆ÷G¸òðk‹<à0ml¡Ò|dùQ:O(\ÑÄ^ÎÏÏ?zô¨2àÚµk[æS­Zµ¸>&� 5L˜0¡oß¾EEE¦‰ÓN;mݺuY9ÂÇæã¬ßÎ|ðõ×_7ˆ»­ kÿ ÞnÊ1?rª‡f„˜ÔEg>qÝNÖ‰r? êû¿…TY ºŠì#G½È^¶öoW …L£œàÊéL2æÓ°aC]AXeW7Wþ/èTcÈ¢ÕÂÕ†^^rÈðB®°¯Œ-¤ºK"œ×²ùX–––*c>å”S–-[vÖYg%ÿñ�^ЪU«Å‹§Ï=Q©W¯Þ|pÁ˜ÄC`>>Âú¿Xé@œT«eášo9R7Áì–‡ÐX2?:óÉ!c‘émÚˆiæ<e’öÐ*9Lªˆ S‡»Å‚5qí EvC/¸„Á3F’1Ÿ 躈ا¿ ñäîmR4EÈ3HÝ9çÃ/#òq¢¼,Èç,Å–Ë|JJJ”‘תUkÑ¢E_|±»_�À-ÊÊÊ®¸âŠ5kÖŸe$êÔ©óòË/ßrË-¦ñ˜ï7n\—.]‚i?ê®J•*Êä.çSIšXÞ²¥¶£ëšÂè]ÛxS@ò-^Á„§d)¢’c¯äãyB‘}Þ”æÃ¤ù‚øhiZN¨ŸëÂX¶ƒKe\xd>ö}â Wocç;—þ¹¶U¦W á¡pA`Ò ú—ž’Ü| tæsÒI'½ûî»W]u•+_�À ,ç¹ñÆW®\yðàAÓ±8Q¯^=K{n¾ùfÓxÌÇÌ›7ïž{îÑõ H+¬‰Õáeßx©¥iÌÐ%GUöMHûèî׿DÖ¥•åG©CÊ&S9ü”°ÐN™ü‘›M|½Pù€oC{Á ) iÀ21ÒÖ|ø(íÞFÓÅÂ8¥ù°p·Þ7aúá‚ôÄFÁ¦$æ'²­=ÖßÂÂÂC‡)? Ì€ŒÀ:—ûôé3qâÄ‚‚Ó±(¨V­Z£F¬‹Éoû[Ó±¤˜OY±bE«V­2¢êo (k.ñî(´wJ€ô—Í'‡ôÔg’ùж‹Ð¦¡QÑmèI$/;ü„G WͦÂù  :D-ˆšOHê²Á…1IÒÁ|”ÿ‰t¢š.–S=Ümø|>Üy„Û(Ìq¸ ?‘é²|zRí9Æz˜ŸŸó X³fÍ}÷Ý———WXXh:–ÿúúÕ©SÇŠjÈ!þ©•óñ/[¶l¹é¦›¾ÿþ{ÓD‡Žü©žLV»ò?9¤ª}(ôWÉ ÷×wÖ¹)£Ë ȶÃ4õ˜fFT&¥€xw5iDtšç¡¹ žó¡m¬T ŽùXp=t‹TšOŒÿk‚óð{"‚üH§Y~¹¨ÛtaLuYPÞï`dÂ.e÷Tþæ@6±hÑ¢~ýúmß¾ýàÁƒ¦ºÞX—©ÚµkW­Zõ¶ÛnëÓ§Oýúõ„a ˜¯)**ºýöÛ?úè#ÓÄ„\öw~æü©D*Ò 9Á|”Mûíä– Ä!D ©rAÊÀŒß8‹EgJ¥vÄ× j¤ëÇüÐÆ–ð*:¨¬¬Œ…%ûŸ—Þà2è::óé7`@ÿþý_ë\á ÞnQ'‡ô˜å7Mø•¿Š…«·éî•(µGi>ò=*<0�²›‚‚«é5þüuëÖ['{Ô{©IbíÿرcÕªUûÕ¯~uÙe—ÝtÓM_|q’‡3˜ß)//ïÒ¥ËøñãM´à T®@ÎùÐ~qÈþor¶‡oÃHZù†.sìÐ/¬N.ñj>´µD͇>%GYAöêH|½0#*÷¬Ìáêç:óé?p`¿~ýœ_ë¢ù88ЖZp‹D¨› =ß„;#Ê+€p;CwÆ ØZëÙ}ûöÁ|��À-`>à?Lœ8±C‡™Ò®’?T{ê¿T}W” ¡Y£lÜ(sAM}[Úbú*p:˜ª 6‹lZÑ@ŒdtÚ£ì~’:Âeô¤@¸â¥†t0>9r%Õ,=Ô„›&Bf˜Þ.‘³=9Ž¥ CRÂG¸¡Ã:Ñlù±¾ ˜��¸Ìü|ðÁwÞyàÀÓĊݬ±ÿRízÄÑû¸Üjxû‰¯§Ë¼ÑÃ"3?9úù”þ£k)×ÈÚ ÷v£"Äu…EÞE4†EŽ" ;¬FhŠñq‚ù±Y¦ep¡K1:ó0hPß¾}_›¼ùðTW¹l ²ê}Ž4DÞáæÃT5Qä�øJÁ|ø9ÅÈ’’?¼«›Ì��\æþËúõë[µjµ}ûvÓÄ MþäI9äæmâ(ÍGnâÈí9Û# Ï!dCÏ>n&LêØ¨('co,˜}9mW)×Só E ‘$RÔ…ãæ#(P(ýæÂÅÍ ©4ú-̃ˆìõÊ*ÎV!Õ#¤‚ù2 ŸãÂeinˆ(¡g#)Yi>|~-^n¤¼¼Ü>­¯B7 Ì��âæ"Ø·o_ëÖ­—.]j:8æå žcW>:Jó‘s>Ôˆ˜ÔèÑ™Í 6òIRe~øC¥ù0UÙ|”OÉæÃ¤;ЌԎ£ëé2_coloo¼/®ié€GæCs/ @n/ÖzA`„Kð,½°ÈT0SuyâQžÂÂÙÇ"ÏÄ j´Ì��¼�æD¬_Ü>}úŒ9Òt q —}Ë!½Ý„›¾|ÐÜ è‡2Ë9Ù˜¦æ›ðÂņI-$æ¨Cò‚Ò|„õÁÈqAò6‚)q«¡ÂÒTÍæ 8FJ2¤¬/®cé†Î|l]^œ_¯ùÉ^~^WŠœ”žï¶ ší‘o‚äH©`ûÝ‘Û8JÛa‘}Þ¨ü ó��/€ù�53fÌh×®ÝáÇM+Ê^.tvvšù‘‡2 CŸ©öÐ5,žù¨íЇô¤£Û(…‡éï"Ëž£\#o ˜ÒBáÞk‚…¤ÚqBo7Ù‚¼Èá•æèÌgÐ!½{÷v~mŒæcŸò,rZR9oã Eü4—_¥¼ñºº9 ;ûXÅIaÄ|Ž=ºpáBëÚ¾mÛ6Oç’·.¼uëÖ½øâ‹ï¿ÿþ-Zx÷F��/0 åÛo¿ýë_ÿºcÇÓÄ<Ô'GßÌ2ÒéßnÊP;¢­¢€„ C,Z!8ú7.]ˆLÉÎC*ÿ ¶#/nÃ_+ä‚dÿ IóÑ”‘ âË,<ìÇþk¯çæ“äˆ \¬2O͇mcá‘?ô”ç§¡p³# ¥w‘}\•yåÍôuMläÓ0H –™RÙ|އqÑ|¦L™Ò·oßââbÝÞ¼ÀòŸ&MšL›6íÜsÏMÙ›�€0àD~~þwÜññÇ›$>èÈÞ�¢´Û°°ùðVo*±Èž0t¸3mñ-Yä`¹µDò“.Fóá„"“BBgó¡ÛËëeAâIy=]”ºÆ…"A!’; ’IQcÉáꔹèÌgðС½zõr~­³ùT­Z•ÞÝ`aù œ-MøFDå‡EžæÜ—Ãzµ ·<èYÌÏÄ`äT]Jój»ÑªÖIšµÃûï¿ÿ½÷ÞÛ¿¿ó–aùÏsÏ=w×]wyw�� À|@2qØ ÷„©R¥ oÓ(g;ÍÑ}C´©Ðt‰aª´Ò8Î÷Œ…Í/’ê̇‘öS™°†·Òt¹ º†æ|ø«‚Òx!®@²YÑAA¸e :ó2lØ¿þõ/ç×êÌÇ:¬3ºZµjB~&‡ŒÛ‘‡ðɪ£4z¦ó·ãw7øsÌö(ÏJóáÅâyÎgß¾}IšOçΧL™’ÊTLíÚµß~ûí+®¸Â` ��À`> F¦Núè£fа¹òA€LÖ.T>P6›h{H¾LŸ Hc�„¦o-å!ÚQ›P,ZRH¦ju1}#LØžö‚“%‡©D¡ÈŽpL3•5{½]ÿ HêÈ¥Iu8<^˜uâÔ¨QƒÞÂ` AtæÃÏJÁ|Xäà½ÒÃ-‡¤ssHm7&¹Â©Ä¤ÓŠ.ËÉRî9ÊœO2óù¬X±âÆo,,,tþÎS@“&M¶lÙRµjUÓ��| ÌÄÊÆ[·n½aÃÓÄržÁìÆ à`>´ˆì#´ŸXdæGhNñ’?ò +Œ¼Ri8æ#oŠÌùÍ8a½ ¢Í»”#Rš• ¥ßLA *:ó:|xÏž=_ë`>¹¹¹vVá|äg+=ù–ò½ çÊ3—ÞÈc ©n@(Qšso·dÌ碋.Z¹r¥óžN<ñÄ¡C‡véÒÅt ��_óqpðàÁvíÚÍž=Ût ‰ ¬|Íÿp·ÉQõ‚“ÍGy“˜®ašùh»Š©ZQº5ºS5$Ýfæëe) I~˜Æˆè³rW7AZèniÍkÉïH·§ã‚I!”Axd>uêÔ¡7,XÅÙ¡ÌóÐóT0át–͇IyZjA<zb æãpNQó¡ ^˜OAAÁoûÛ={ö8á)à fݺu¦£��ø˜ˆ›‰'vêÔ©¬¬Ìt q£«|-ØŽÜ~’«]ó§X¸¿Ò‚Xœóÿ4}iøJgÿ¡Ëe)¢©ð0©õÆH‰6g‚šñBr×8á…|ÿÊ\C§¸L@g>ÃFŒxòÉ'_ë`>uëÖµg&¥ç p3‚ŽÖ „ Ö"“?üä¥;‘U‡®áë™êôÎ á<Î Y~hÚ‡–w³òóó6Ÿ÷Þ{¯M›6fGøP¬ÿÙ]»våäȇ��¤˜H„•+WÞ~ûí?þø£é@AYù: ÿÉ!õ x·]J0"Úf’3B<jG|üÐ>I•R¤t!Ùv˜¦Û‹4Í|èzNò&C]…IÚ#l/, mGaâ îQAihß>Ác¸æcõë×w(צ|¨ìò<Ê[ôœµ0ö°¤Í‡×‚ç™^غ   aó™8qâ#<ÂOXŠRÞtûq‹† ®Y³ÆúOôú��@Ì$H~~þ½÷ÞûÁ˜$„9iñkÁˆ8•TSÊ7Œeù‘›Y< 1"EJÿ  Á|–óa‘sþ(ÍG×ÂcªLŽ3‚ {æbC·©Dˆ…SR,\AÁ#óiܸ1=Y¸¤µÒ|rTÕ äÓS¾[a“Cº½1b>”@øÖƒ|¸ ‡7=MøÄ¦‚ö+æ3µÌ§¤¤DùEE5Ÿ§Ÿ~ºGʧhâ%äA3@¹OëvÙ²e¿þõ¯];��ˆ˜Hëà7nœõËš‰=ßlø”ˆ¶ÿù¥ùÚßTV*[W9šñ?Œi{¾ñ¦•ƒók„[¼ôáá ¡Hóá…œ¼žIF$4ø˜Êˆ„}ÉPon846¡ù¨\fDÉäŒý,D(•èÌgøÈ‘º¶8Gg>Özê©§ÒQ=òù(¬¤'|ŸB8C™*ûª»Å ùXæXJQ™ól'ê#wx³Ì§´´TCòæã]�æ�HO`> Y¾þúë6mÚlݺÕt ‰#ŒÿŠb¨ÿ&Ür–X9¤; ï~ÃT³ ²Hóa‘b#ß“UÜŠVžÈ+ˆEZ¼¬ËùÈ2£k /nó-©#1©­IûÑ×2Õ!þrtóùŒxê©îÝ»;¼ÐúOiذ¡Î|~õ«_ñ[üœ:£ jijCü$eD„ø2‹ôᤧ›|„3•ùp!‘Ü}–:eéÜ| uÓ $c>:£s‹Ì�–À|€ ?òÈ#3gÎ4HRÅßì½L»Ã¤ŠÂÝeegjAü)&•Íe1”=¶§'2½­;ÁC*óa‘þC y¦jê1•Ì;Q>«|¡l8ò0!¾O¦jk ;¡"Ä"{Ç ß�t(*¼¿¨ëK–†—X­þ‘O?Ý­[7‡×…ͧiÓ¦Ôg„ÓEN×C½ˆEž‰L:ûdíaª› %ç!"íüHšç ‘,ÜÛÍú[TTó��·€ù�ט>}ú£>ªë’žðäüˆ¬E' ¡ëyÛ+ÙÙ†EÞl¦›Qáá /Ú³£²orSh¾H†¿0i5òzy›P¤/)›tȱ Îã𔼞i*+È8ôš E6=™ªÊ_oLÁ…„e¾O_‘uœ3MûX> þóEyc>§v?õóáó¡#ôóaªé¶dÛQÉ„£ˆZ¼ö†pø „"û¿ …ÝÊËË‹‹‹3Ë|BúFÌdÖÙg®óçÏ_±bÅ®]»Ž9R­Z5¯ßôرcÖ¥É:µÏ=÷Ü›nºéšk®©[·®×oê7`>ÀM6lØp×]weÁŒ Êúor?79íÃTw‘ß„œÐ “Ûa9‘£ƒxrŽHXŽzv‡$^BåDÞ^^¯¦2çe%|¥ù°È_DwB_Ë"]‹î‡~r‚ˆeQYmž±QаR°î $9eGŽ$`>öƒùXfžó¡wèéF×°pÑy&åvb1ù!‹<S„#Syø9˜ ;íç w‡³û¼eù„¢]p`> #ÈËË8pà‚ Ž=ZXXh*ŒêÕ«[ç¸u¾ 4èÚk¯5Föó.säÈ‘îÝ»O˜0!Ó-šÿ¡†CÇÿÐéäå†}Hå''rȵl>ʇvTt™·>îR+Û7!’âí6áYáa\ßpxÊù%²Ì°H‡´G~о„а1“zͱÈáLL2"]þGH±´)1§ìŸF}ÆÙm„‡J»¦þsôðáô%Ÿó9ýôÓå3ŽŸ¡ŒÌÏ#ŸnòC¦ºÑ ¿o€ ìtvÍÂUigK:QMøØ¶#÷s³9tèuQU~Wéc>¡È‹†˜Hs¬Óí‰'žxçwòóóå:¦¨]»vãÆ_{íµßýîw¦cÉ`>À/^üàƒæåå™$Ydÿágäúo´ÕE{ãM1ÚV²HógÌñµ²é¦kßÐõÔ+”Ð ÓËÃC&õj£ Lï0ô…Ê—‡Hï#ú”®…*¿)_ SˆYþºèo$]N«rÜm¬FyÀЬ£€ÎËŽ JÊ—d…ëdüÍo~CÏ/šÿQÞk`d<=×Xäí‘ÃŽç fôZ(r„5{!YÉÚÆÎóI‘ƒ’’’£G*ƒIó ÅÓ„€ù€t櫯¾jݺõ/¿ü’žåjëÔ©Ó¾}ûÁƒçh:ºƒù�¯Ø¿ÇŽg̘a:ü‡¶·„ùOYE‹JnŠÑ†šN~˜¤=´‰&lÀô·«åf\ rp¶°î" ¯š¹tA!èßJ{˜¤.ÂnurÂT&ÃTº¢ÜOH30CØÐ„•?£ÐÖv"oà€§wåÄ 2U(?Öè~ku¹²#¥¥Ç¥Þ€±TµE3¡Ðˆ³ùg· åmå—ÀTÿÅôY6þ=„ˆüÐ<O(²Û!ZäÀ2ûaii©®_¥Yó‰z`ËÀ|@ÚbµUüñüü|Ó8Q³fÍK.¹dÁ‚U«V5KóÞ2gΜöíÛ™Ädÿá>Ãý‡¯§’CSC,²æ`>´S“¤ˆiÌÇÁ8ÂS¼åíÐì“×ëc4æ(¡p7<eS’I&£ÜÝž½ÑeŠñöÀ;,É߆òcR䬑dfÑÊc(_b£û\´ôÐ!¥ù8Ïdj¿ÜÁ|N?ýtá„qÎ,9žG>‰ä+¨rxÂáTÕÏàóaá#J˜Æ'îöÆŸµ»ÀY>¬ë0iÊ|>˜a> =™:uj×®] é‰jÕª]xá…Ÿ|òIô›@ÌxÎO?ýôÀX'ªé@Ü_nìùì5ȱòðka™Þœ–;¼ k䦋¬j­”Á‹”ÄÒú‘[ºº¦pHe8,Zç7aÎsè>£*›§òCÝÛ ï¤œŒòóÊ…í®´ñ^„•Ûëþ+u@ÔÿzA œ?ý†íý¡âb¥ù >¼gÏžº7 E3ŸæÍ›SóaáZóÊ3K>_dçáŸÈYûåcRøÔô³Ó‡Jí J3™Òõ|œö9zô¨®ÏdêÍ'ÞcU�æÒ>úèÎ;ï,((0H¬œxâ‰7ÜpÛo¾i:LæRõC>jÔ¨¾}ûê:¬g"vý7{ ]…»½Ñv7"¦)G›n:ŠÝ|„õá!½ý/_äÆŸ®ÍD-‚¾Dø+´¡å‡Â6J]¡óWÊÍhKÔÞ&( b‘¥ŒM~wÝg×} º*¿LÛë '.óqh+¿ á)Þʷ̧\ê+o™Ïà¡C{õêåðÖk7n¬3Ÿ3Î8#GUMž–®Öuu“—•Ÿ›žðYä±$lÀ ‡“Ô|Ñn>T~ìÛvBÙÛ‚ÊÊÊtÿé)3ŸxR0nX—šóÏ?÷îݦ‰ÜÜÜ#F´oßÞt  ̤Ž~øá¡‡úì³ÏLâ¼ÿ›ýמüTu ÌÿT½t”æÐ÷vÖ3•)å'y;?jH¸J(·—ÛýÎþ Û@XP* “šÚºíùö#oì3Ó pR.ëÍò÷/ñš]o·¨ï.Er/ëoñþý™<}°`>ÂÄ»ºÑ·æ[:«AUµ *9t ‹ðCÍ'9«©0“½pìØ1‡#'æãn æÒ›o¾yáÂ…iUŠ&F¬³iíÚµõë×7Hæó)ÅúEŸ<yr—.]JKKMÇâ&\ìD²M–#¿¦^ˆØ£3¹kœò!s”óq¶‡mä-Èa=_)o¯!ùÐ5ùy?–LÓÖ}Ì ªbA ÌG‰î?+vMRþŸÒ®€‚óØ)ÍgÐ!½{÷vx¯¸Ì‡…s§‚ùÐ3ˆ^~ú8ü€&çC“WšÉðÈ"D³=r ˆ?ų=ÌñÜSóñ¢m�óiÅÊ•+o¸á†4¯j ÃºèÝ~ûí³fÍ2HæóغuëC=´téRÓ¸ ÿ”EÖBà.DKÀÑõÔj䇌LT¢ÓA˜$E|¥ò/‹¡9è°™Î˜Ê ”ë••Ê¡S ‡§äÍ俺ý8„êð¾XÖ; |‰n?Âÿ~bï%|.á‹ ’¼¹o™Ï1©k«e>îÓ§ÃÛ9›OóæÍí̪pQ’O¦ºAõS _Hm "$˜ý,-c@Ÿ¥9Ÿ Ò —t£ÅÜRl>ž6 `> ­¸òÊ+3ºR¿~ýÕ«W7jÔÈt ̘ÁNþ<ñÄ%%%¦cqZÿ@(¿«Ÿ §wR¿8ålÚ†“·d‘É¡•£l 1Z¼^Ö�‡‹Œƒí°/1:R,Ú#¼²Åï°^ù¡¢nõû‰ å~ÖÎ)›þŒ¤8ì~#û ˤù7­Æþ€Aƒúöíë𦱘ONä¼¥BÿÒXÌ'ê—‹¬jM—à ‘Á<!RÕ€3 =Ü”ÿ2îšO 0>X™óÎ;ï—_~1HâXÃ>}úôïßßt ̘dóæÍ=ôЗ_~i:OR@Ü|¬«o„ÉýßxcŽ®aªÉéiÏEígãü”Òyd5RÂ_‹ðpt:ÁŸÕ©ˆü”Ãö´©ª{S; ¨~!öõÊo y\¿’Ë6ÈÈ7I›þÔ8Jó±âÞ}û:üN»n>,ò�¦‡½²S"S�²ùðOmk # $wo£NÈ—mÕᥫmç±ö#OÝ“óIY3�æÒ‡±cÇvïÞ]7YV¦`]·lÙb:Š æ c“&M².@ÅÅŦcq¡B™ù'Yü  JøÈí9¾†éµG–&¥€tíBÙ$ ÄœbÍи´‡C­C0(ÙO„—ÐõÊi3]nÄ;¼VþJÝÒ}^9<‡ïðlŒ¸x%—›ûôÙ 4Ê%¨*\–ó H©T݉`ï®Ñýél‡> jF7 eó±M‰–1Ð¥z”± $i>©ÿõ‡ù€ôáŠ+®È‚zKÖ9µaÆڵk›$“€ù€´`÷îÝ=öØÜ¹sMâò,¨ÈNªœÝza™…E‹Ec‘Σ3"û…r{QXP®§þ”|…Q>ålLå3º(·T*°”J·9ìÐ!TåÝJ±l¬üÂãJxJÐNù»RšÐзÚñEJóéÕ§Ï€ˆÑ|èÀîBžCŠ¿Óá •ÿ—uÚ’;<rÞÙOÌCç* U$yèöÚÃÿ×’1#À|@úФI“ŸþÙtÉ’››ûæ›o¶lÙÒt ™Ì¤óçÏïСÃÎ;Mâ t WÁ¦2#ô‚£Ë,²c·9¤›…‚LÕ¤ üµŒ’ž²(4ÒMtºRhU³ðýfÝÅǹ’°¬Ó'Ú`v¢|-ï¿$ï_¹½rM,j#Q·×)¥CHñ†'v¡ÝÏQÈlX-{ùü«wï:„Õ|èík{¡Ô›p̳ð B¿"¾^ö[gía‘%ªí5\uhÑk ºÃˆ¥nLÕÃ-ê Ì€Ä(++kÚ´iFò±±®ccÇŽíØ±£é@2 ˜H/Š‹‹ûöí;a„L¬¯#ršÏª PKQv„cªzV2L_Ž6u¶CÿÊ[*7`RšÍ'êz]ã^i>ò6Ê—Óf®2ÿq^˳‰mOCâß­³RAÞH'L“ô @ô…ùùJóéÙ«× Aƒ>Q,æÃ{¸YÛç""L•äæC¡¢(8žþ”}i E&»BÒH9ác/Ûž‹óÐÿ%0�úÂüîw¿Û³gé@\ W¯^C‡5E&óéˆõëøücýúõ¦ñyMì(‹Ðñ Q{¾Åå?ô);¼¨þ£Û˜I DqxŠÅ—7pöÝ‚Üâ×­10gL/1œ‹+Z1 Ë| oÜ3)áÃͧ`ß>¥ùôèÙsÈ!±Åh>´·/boæ|<Ë\øË„Ô_ЩŽrí±×Xª»óÐ •À|�HŒüñ’K.É‚œÅ£>:aÂÓQd0¦”——['s¿~ý²²òEH±ŠR•iƒùЕ¼ Ђ‹Å|bW çÚšÎÎ#±·øL&íqp'ç÷Mf›Q†Ƭ+?ŽnÒ e©>´¹o÷òÊß»×;ó¡Ç¶ÐùS>ªíÈ…£”IGý€TrèÇWª ÏÛ”Æ;q󱫷Ù[Æ[K æ€ëlß¾ýøCv˜Ï?ÿùÏ^xÁt™Ì¤5»wï~òÉ'_{í5?¨4d-ó^:–±È¤ÐæãO±pßÞ D¦€˜Æøz:æG¾‰Î"o¨ O±üÇÁ‹b'Fç‘ÆÞÖ§Ûè^îlI’€JéâqÖ9ù¡Ò|±e·¦A,öýò‹Ò|º?ù¤CÇŒXÌ''~ ‡«pd2éx“ÿgeù¡ÊG?)#{B¤K[ˆ$‚„Nnñ¦zhœº§`>�$ÌÇÏÀ|@ðé§ŸvèÐá»ï¾3HŠ …àXØ|úZpB+PÐa8#vÄ;¿åDÅâuëuÚã–ùðí£šóÃô@~VÞÝkiÔ½ ±é¾ÝwøŒT�ø]Ú‡·û-ó9zø°tNN·=† æü¡6l¨3Ÿßüæ7ô,ò<ò²°º†Zð/# ÙÑÙHån~ôàòÃâÒãð(ù�0?ó™Õnxþùçûöí{ðàAÓ±¤Þ ®J•*,\á Y ŽI“9²È´íç :«”ÍGÁˆdááÕ´•¯Ö³8͇îGp•€ª¦™¼&1ùqØ¡³‰%I¼æ£[ˆ­ _’wT~pèðf÷vÓ™O×î݇îü¡ÌÇj4ÓÞn\¶ó&xŽlAÂGææ#ä|h¯6¾ ÏÃ’p§˜�‰óñ30Iìܹ³k×®sæÌ1HJq(„Àõ†fxl¹·…bĈäñ,òVºÜ#ÎA“„•L/?íÔX𰱬”×Ó‡AM5í÷ì.±¼‹NÕbT>A{”åLˆN{B‘=»tæÓ¥kב#G:"óiÖ¬=Ú…ÞnGîkQšMìÚC?uȱo›[sÃÃ|�p˜Ÿù€ÌcÅŠ?þøòåËM’j² !ðV Þ¡íBáÖ¸Ü/Ž©HÙ¦T®&yë=®­,›]©ÓÚr•_£áD}Š·}“ÜÎþ#rœÎa;,Їô/}¾àóÆ÷;ç|œÍÇ~GùX¼`>Ò÷Òz6ÙñOþÂeñ EB×ð"C›øü<Ô…è=,¡2Î_ˆî)˜�‰óñ30‘XÇí«¯¾Ú³gÏÝ»w›Ž%Õ({Á 3ŸÊþȨ8‹l>t¦ï/g#¼0 euâ2ŸØW& íå%nIÃ(W ¦¤\vYdâíþXz»=þÄO=õ”ó§s0ŸÓN;ÞÔ|hgK~h)¿1úÑø‡²Ÿ¢),jAôc†H­ê`r5 œ¿ ‡ga>�$ÌÇÏÀ|@SRRbý´9òˆ\EÊDí'Œæÿ‰šŠ &9Œ°žiôF6Y–”/qØ C ëuÛǵã”—å`”Vã°Ax˜Þ|BRo7j>Áh:wéb³ÎÐÁ|š6m*sï;G¹Ã@ä00á³ GXÉ=‡Udr¨êPçaI—1¾·„ù�0?óÏÎ;{÷îí“Ê×Jä^pŒ(0à‡…5‰K5a™Å£@,Rc¢šð‡m(^hÓ›Ó·D]|÷¸pÐåC¥ü°Hç‰Ý|„œà<û‘¿w¯æÓ¤Iå¾öò±ÄÈð-á3*¥Ž~L®7ôS'??Ã÷%QÍgÔ¨QݺuK*,W±ÌgùòåÍš53ð;0?óYÂgŸ}Ö£Gþ¡è²@‚Ï8? ÷ÑíýÈ$$‹„õŒ˜#&£!‡¿Êåz·ÌD¹·®‚Ñ%ŒlhQ •„¤]|€.èÆù¥É=ͧSçÎVsÜù:›|Ä*¾’~c‚ì °ðôDô£QÇ ’ªn®$y’<º¢šÏÌ™3Û¶m[VV–Ì»¸ˆe>[·n­Q£†é@€ßùø˜È*/^Ü¥K—õë×›Ä$| U Fê°Ùkè½s/$Œ¢ÏÒ¶&S傸ùßh-8*�:Û¡Ý–h£ÖÙbG·½îb¨\Ÿ€Æ¸b>,Z­á¡ÜîwØ’–y£_aô‹×æsê©§ ¥å#Šò‘¿ û "Çb¨^À’s£šÏ²eËn¾ùæ‚‚·Þ1I5j´k×.ÓQ��óñ50m”——¿òÊ+ ðañšbúá@tf„˜ªÚµ²"#3¥Ò•Â]ygó¡/d’Ñ•tA7ÀC‰ƒ~xj>ôs%ƒCÆF¹oß+·¤ë•Ùez„K 'Ib7ŸŽ=6zôhçè`>VÓYpòØ¿XúUÈ šÛ¡Iž Û<új>VÌ¿úÕ¯öìÙãÅ»'@«V­ÞyçÓQ��óñ50”””Œ?~ذaÅÅŦcIbé Ç gñ-*¿Éy!¦*Ší°ÌHËUnÈ Oq”ÛÐg•? êG7v÷bH÷ìŠóÄ"3L5ÎG©IÔ”tæCÓ>Ü"”æcýÕ™O‡NÆŒãü¹tæcJóqüžÄ¯‚@º†æ²xÝjÚ«ÅŸçIÁokTó±èرã¤I“Ò¡Ã[ݺußÿýÿ÷ÿþŸé@�€ùø˜Èf¬ëÚ Aƒ&Ožœ?üéƒRXdý7Úó-9þGY9V»V®wp!å³|Wt!ªùÈ-ãP<ó%Œ³ù$ìB‚ÆÐ•ò²)7f’ Éò#÷s£Ú@åÁ®jm™O™\q1'çÑŽŸ}öYçÏØ AùXO ÖYä1 ž¬pò‡²ó<ön8 tlKñïi,æ³ÿþÿýßÿ5ÞǬjÕªþóŸçÍ›g6 �l`>~沟Ÿ~úiÔ¨Q/½ôÒÑ£GMÇ’F(‡Q½´G°#îÉ&trcÒ §:#r0ùµ<l#1Gç¡ËöE/a÷ˆŠî}uqÆÍϰh#¼0ê_y'ñšO•ìÛç…ùÔ«W~á¡ðÙuãyèçJx$ÙÐẊUŒöiÕªU~~~J‚R`]jš7o¾råÊêÕ«›Š� ÌÇÏÀ|€_رcǰaÃ^yå•òòrÓ±¤Ô‚x'7{ ¯… WǦy!¦Ê1öÈ’ã¬CÎæ#Œó‰*Bü¢£Ä+*º÷ÕQ\D59±#¼P©:òJš$aáŽm²üðh‚Bæç+Íç‘ÆŽëü̧N:¼ä ½’.è>š¹½\«Esž´úÅŒÑ|,V¬XqÛm·í³t4åÙïÜÜÜsÏ=wÁ‚µjÕJñ[ æãg`>À_X×»#F¼üò˼¡(\˜&D+Å C€hò'ƹ€˜j´r™Ãѽ~Á—˜d>:A’IÀRœwžŒÉb£t¦r$9±Ã$óqXàÎ T8°Í‡±-ba¡Ò|þùè£ãÆsþŒ:ó±€Úµk+ ޲¢CHªÊÀ¹-É“Î?‘±›EqqqÿþýgÏž]^^^ZZZRRâ]`ÖÿK5ªW¯~òÉ':´uëÖÞ½� �óñ30àG6nÜ8|øð™3gȖp ˆ©æ?•k»Ñ,“ÒABñkáµ²Ø$l>v×6±£Õ$#?LÓ9/Èieb' U|f‘}èüÐeem7¾Þçc™Ï1©s©eHvìøÜsÏ9:ó±ZÒÂ>‚Ð Ÿ‚LêiÿŒ*É“Y?ˆq™õ׬Y³cÇOÛ|UªTiذá¹çž{ê©§z÷.�$ ÌÇÏÀ|€ùî»ï8wî\œQrA\~äžo|™…õá 6#ªÃ4Ú#ŽÒ”h´Ât¥€æ£ †EVVHØ|„cÕYx˜£ù/¤Pì§äÑ2B©7¡¶Û¢"/̧fÍš‚�ËßMìü÷­É›,¨z’€ù��ÌÇßÀ|€ßY¿~ý Aƒà?±#”†ca‡¡¹ F´‡Ì,ˆUp!ÙƒNøK×Û(͇>¥|è¬F1BÍÇÁÇÞ¿.Û£S á…:;ú¿9t{£é-’fËe>å’ZXæóH‡ãÇwþŒÎæãüZÚ“ÍþË?Z2Ó¦'0�æãg`>�ü‡µk×2dΜ9¦É$”ƒ‚ÉÿÈs¡"¡Ï Ĉ&1•1Í!ûµÂB,Égó‰EQœÇyo1*³ùèr;‰ ¦’%ù©îíÆÈ€{MñþýJóùç£N˜0Áù36lØPÙ"±¾¢5jè¾çnlY ̀Āùø˜�ÿeùòåC‡]°`é@2]iFr2r¥l¦éƦÓ!a™Š„RŠ„Í˜Æ|œ=D§1!Mu쨻"Ô½‘gÕq֞؟•3?2Lš‡û9T\¬4Ÿö<òüóÏ;ÀÆïÞ½[^o}?U«V÷©ª—õÎcS«V­wÞyæ@¼À|ü Ì�‘Ï?ÿ|ذaï¿ÿ>ÎŽ„q¡€TAîÇ"e‰éK 0¢7tH¼iŸs> ›NÆ”8{Ê^jQH—ðÑ퇋 }Š,Ƴ@¼™í?%—ôÃzî1üH7mÚtçÎÊï§råÊòzŸxŽLnnî{ï½w饗š€ æãg`>�¨Y»ví3Ï<3kÖ,Ìÿ“<º2qöJêBÔa¸Ù›)3BŒˆ„Òˆøku"DWƸLÍD—¨qP&Ù|ä‡ ˜s—6y{ÝzaYV _Ï{»Ù”:¤4ŸXr>-Z´Xµj•ó6À¢^½z‹/>ï¼óL@†óñ30�œ°®Ï>ûìĉÈ““€„ é ­R‚ B,RoXdåº^Nþ8›} ÝL¹ Õdt8¼PwqÖ¥t”˺mä—0• ) *<ÂÚÛÍZ¸¤$(Ý2ˆ±ÂA×®]Gí¼ `¢Ö¯__§NÓ�aÀ|ü Ì€èX×GëÊb)ÐLÇ’…èJf3Çá=|¥r¼.ùÃ4†ãà!rÚÇÎÉ„ÂUªe#Š%á‹P)ÌGi/J;b’üðg…Ð,rJçä­óÆÈ2Ÿ4'ƪÖK—.½úê«‘kJ£FvíÚe: �2˜Ÿù�+ÅÅÅÖõåé§Ÿ.((0K6£+Ç";ȱ°3XÏr—P–Ææ{“óEt!j¢&öœ¼R61ùð‡Qs>ÎÉÙptH·=5"*?B·öy³—ËŽa’MYæÓ¡S§qãÆ)?×7;~¼víÚÖéæ¼øýï¿|ùrÓQ�yÀ|ü Ì€ø())™<yò¨Q£”ƒ°»(»ÆÑešóaR§8{Ka" ¨½Ý”Æ¢| Åy3ÝdDòCæ8ÎG)0Êü2·#k’rcºú,Oï°°çÐDPÄ\:ÇŽ)ͧSçÎÏ>û¬ò£Qî»ï¾3fàçÉëÔ6lX·nÝL@æóñ30�¡¬¬ìõ×_>|ø¦M›LÇâG伋,ÄȆ>ä ü¡s&'ÞNn<aÿqõv“]…§eœ{Á1)Ï£LûØÁ„¤‘<ô½¨í°HáùRe>=þø˜1c¢~̽{÷6nÜXY±ØÔ¯_Íš5 64�™ÌÇÏÀ|�H«Í÷Þ{ï <øë¯¿6‹Ñå…ä>rLò9Ï# "â/t/)Ç)%ŒÜçMè™Æ"U‡®§Ûë¶6 ;çËÔLèò±cÇ*YŸWŠÙ2ŸÇŸxbÔ¨Q±|Àë®»nñâÅø…Òñ§?ýiÉ’%¦£� #ùø˜�.ðÁŒ3æÃ?Ä •&Dí&Ç È5˜ÔÍù­•Õœ‡Eý8å@4ÓŽòUô¡\Õ€n¦KéØž#ï'yó9xð`íÚµQç@Iݺu-Ztþù盀Œæãg`>�¸Æ–-[Æ?yòäÒÒRÓ±�5‚ 8ç‹8Ê•å "eº)Ió¡~BeFwalG)?ºL'–™CuæóD·nO?ýtÔ—ÛŒ=º[·nø‘°Î[n¹åÍ7ß4�™ ÌÇÏÀ|�p™L:%2‡|Q,ë•ÈæÃ×'ÖíM0!çccy Rv˜¨£hb1:óéÖ£ÇÈ‘#cßÏ…^¸zõjüNQN=õÔ5kÖ`�&//¯E‹{öì1ˆ téÒ ÅÌ�O°ZóæÍ3f̲eËLÇÜÄ9k¤C×Ý.júÈAr”Ë$#6QÑ™O÷'Ÿ1bDìû)..>ãŒ3öîÝëblMݺu­ Ëe—]f:�2˜ƒZ–ìÈù :´W¯^¦£È$`>�x˪U«ÆŽ;kÖ,ŒX�‰YSìx*3q¡3Ÿ'ÿõ¯aÆŵ«Ÿ~ú©E‹ûöís+¶Ì¥víÚãÇoÓ¦é@�Èx7n¼{÷nÓQ$ˉ'žøê«¯ÞvÛm¦É$`>�¤‚íÛ·¿ôÒK'N,**2 �ž£3Ÿž½z :4Þ½íØ±ãŠ+®Ø¹s§Ÿ°êÖ­û /´nÝÚt �dçœsÎÆMG‘,õë×ÿä“OÎ>ûlÓd0�RÇÁƒgÍš5fÌ̲ùü«wï!C†$°Ãüõ¯ýꫯJJJ’/³¨ZµjÆ ß~ûí .¸Àt,�d ;w7nœé(’¥Q£FyyyIΑà7`>�¤š`0øÎ;ïŒ;öÓO?5 �ž 3Ÿ^}ú <8áÝNŸ>½gÏžEEEGŽI&¼LÁjÐÔ­[·uëÖO?ýt5L‡@ö°bÅŠ›nº)??ßt Iñ—¿üeÁ‚¦£È0`>�cóæÍS¦L™4iRaa¡éX�pùôé×oàÀÉìùðáÃãÆ{þùçKKK3½ÕâÀI'T½zõë®»nèСMš41�YH³fÍvìØa:ŠÄ9å”SæÌ™sõÕW›$Àù�`˜C‡Íœ9óÅ_üöÛoMÇ€;ȩ̀oÿþ på-¾ú꫹sç¾ÿþûEEEeee999•+WveÏF8~üx0´>E5.¹ä’;î¸ÃÒžªU«šŽ €¬å…^èÞ½{æv mÞ¼ù÷ß®nñó ]XµjÕĉg̘‘¹b�ltæÓàÀ~ýú¹þvÖÙþýû]ßmбœ§J•*¦£�À/”••y晚ö9å”S^yå•[o½Õt ™Ì€ôâÀ³gÏ~î¹çÖ¯_o:�Dg>îÓ§€��@bñâÅwÞygÆu8ÏÉɹì²Ë–.]j:Œæ@šbOôú믧Ï$-�ĈÎ|cÒ=�@:ñè£N›6­´´Ôt qиqãÕ«W׫WÏt  Ì€´fÏž=ÖEùÅ_üñÇMÇ@¬èÌgèðá={ö4��¨8~üøÕW_½|ùò£GšŽ%&,áyï½÷.ºè"Ód*0�2€`0¸dÉ’‰'¾õÖ[ÖeÚt8�DAg>ÃGŽìÑ£‡€��@Ãáǯ¿þúo¾ù&ýÙÖ­[wæÌ™×^{­é@2˜�™D^^Þk¯½6iÒ¤­[·šŽ�-:óñÔSÝ»w7��è)//øá‡çÏŸ_TTd:5•+WnÔ¨Ñ;#“æ@Fb‚›9sæ¡C‡LÇ€ˆÎ|žzæ™®]»��¢ñöÛowêÔ)???Ýz¾Õ­[÷Ê+¯|ùå—O>ùdÓ±d<0�2˜âââyóæ½úê«}ôÎe>èÌç™Ñ£»téb ��ˆ’’’‘#GNž<ÙZ°~aÍS©R¥:uêœqÆÏ>ûl‹-Ì“5À|�È6oÞ<kÖ¬©S§fèÔ ËЙÏègŸíܹ³€�� fÊÊÊþýïOš4iÍš5åååÁ`ðرc99òUÍe¬6¹=)s ¨W¯Þ­·ÞúðßvÚi^¿¯¯€ù�=Ø…¦OŸ>wîÜÇ›øù<;n\§N �� qàÀíÛ·Z¿°)x»š5k6lذiÓ¦)-ó Ù¿ÿo¼1qâÄU«V™ŽøùŒ?¾C‡���`>�d7«W¯ž2eʬY³öíÛg:à#tæ3þùçyä���0�üÀñãÇ—-[öꫯZ tðàAÓá€ìGg>Ï¿øbûöí ���À|�ðGŽY´h‘¥@ï¼óNYY™ép@Ö¢3Ÿ'Nl×®€����˜�þdÿþýï¾ûîœ9s.\xüøqÓá€lCg>'O~øá‡ ���À|�ð9yyysçεè‹/¾0 Ètæ3ù•WÚ¶mk ����æ�°Ù°aÃo¼1cÆŒ~øÁt, ãÑ™Ï+S§>ðÀ���`>��U«VMŸ>ݲ ={ö˜Žd*:ó™:}ú}÷ÝçúÛ>|xåÊ•yyyžÎ¹^½zõÆ_xá…¹¹¹Þ½ ���ï€ù��ØåàæT°{÷nÓဠCg>Ó_{íž{îqñ~øá‡Ç{ì›o¾9vìØ¡C‡<­Ûq 'Ô¨Q£jժ͚5{î¹ç.ºè"ïÞ ��€À|��NƒÁ/¿üÒòŸ7ß|3//Ït8 3ЙÏk3g¶iÓÆ­w3f̰aà RÿCV§NÛo¿}„ ˜g��2˜� &,Z¾|ùܹsßzë­;v˜¤5:ó™1kÖ]wÝåÊ[ 4hôèÑpeo P£Fë®»Î:L��� ^`>�€¸ùî»ïæÌ™óúë¯oÞ¼Ùt, ñÚ|>ùä“Ö­[$¿«d8ùä“Ü©S'³a���ˆ˜� qlzã76nÜh:FxÚÛÍúÙ:ûì³Óĺ6l¸eË–š5kš��@t`>��X·nÝ›¬_¿Þt,À<žV8X¹rå 7ÜŸŸŸä~\áÄO|þùç|ðAÓ���ˆÌ�à&Û·o_´hÑüùó?üðCO mtÆSóéÑ£Ç3Ï<“>?^-[¶üè£LG�� :0�€'”””,Y²dΜ9–íß¿ßt8 ¥èÌgÚ«¯Þ{ï½IîüÆo\¸pa’;q‘æÍ›oÙ²Åt�d………kÖ¬Ùºuk^^Þ‘#G‚Á §ow 'ÔªU«iÓ¦gžyæyçW¹reOßæ�ð{j  ¼óÎ;›6m2HŠÖÍ47f2ýýïÿÕW_%¹±ZK¨v€+ìܹó…^˜={vIIIYYÙ¼vJÕªUO:é$K{N;í´N:µnÝÚZ“²w©æ�HÛ¶m›?¾eAŸ|òIyy¹ép@ª™î†ù\|ñÅ_ýµ+ñ¸B“&M~úé'ÓQ�ÙX'QÇŽW¬XQPPpüøqÓá°š5kZÔ¹sç'žxâ„N0p ˜�À�ùùùÿþ÷¿-zÿý÷<h:"¦M›vÿý÷'¹˜�Ù„Õ1bĘ1c¬ß…tk”Ö¨Q£aÆsæÌ¹à‚ LÇÜæ�0ÉáÇ—,YbYÐ|°uëVÓá�o™2eJòeÐ`>�d %%%ùË_¾ýöÛââbÓ±h©[·î€:tè`:à0�@º°mÛ¶ÅX”ο‚ a`>��Î.¿üòï¿ÿ>ý žrÊ);v4hé@@²À|��iGyyùòåË,X`YÐ7ß|ƒËTÖðÊ+¯´mÛ6ÉÀ|�ÈŽ=z饗®[·îرc¦c‰‰ÜÜÜtîÜÙt )`>�€´æ—_~Yºt©]¡¨¨Èt8 )^~ùå‡z(ÉÀ|�Èî½÷Þ7ß|óÈ‘#¦‰ƒ:uêX¿D—\r‰é@@âÀ|��™ÁñãÇW¯^½xñbË‚–-[–ÊR§À-&OžüðÃ'¹˜�™ÎÂ… ï¹çžL¼™Õ´iÓÍ›7W«VÍt A`>�€Ìcß¾}V°dÉ’ŸþÙt8 V&Mšô÷¿ÿ=ÉÀ|�ÈhŽ;vÆgdè,X–ótìØñé§Ÿ6H˜� ³±ë"|þùç}ôÑ®]»L‡œ˜8qb»ví’Ü Ì€ŒfÒ¤I]»vÍÜù 4h°iÓ¦ÜÜ\Ó€D€ù��²^nÑ¢Eû÷ï7yñÅÛ·oŸäN`>�d4Í›7Ïè9 ªT©2xðà=z˜$Ì�…ðAAv:(³Ñf1ãÇO~N ˜�™Ëúõë[¶l¹oß>Ó$Å™gž¹yófÓQ€D€ù��²œÃ‡¯Zµê‹/¾°,héÒ¥é?qDóì³Ï&_æ@æ2dÈþýûgz‰š ¬[·®^½z¦qó�øˆ,­à³Ï>³t¨¼¼ÜtDþâ™gžéÚµk’;ù�¹\zé¥Ë–-3E²Ô¨QcÆŒ·Ür‹é@@ÜÀ|��>¥´´ô›o¾ùâ‹/>ÿüsË…Š‹‹MG”ýŒ1âÉ'ŸLr'0�2—¦M›îܹÓt.Я_¿šŽÄ Ì��Xyyùš5k,²DhÉ’%¦#ÊN† Ò»wï$wó siܸñîÝ»MGáwÝu׬Y³LGâæ��"¼RöÒ¥K3tÒ‰ôdàÀýúõKr'0�2«ÍÙ°aý{÷šÄþüç?/\¸Ðt n`>��àÄ?üðÙgŸY ôå—_~ÿý÷¦ÃÉlúöí;hР$wó C9~üxãÆ³Ã|®¹æšE‹™ŽÄ Ì��b¥¸¸ø«¯¾úüóÏíbqEEE¦#Ê0zõê5tèÐ$wó Cù�ãÀ|�� ¬ŸðM›6Ù d¹µœéuZS@=FŽ™äN`>�d(0`˜��¸@qqñÚµkm úòË/ MG”Ž<ñÄ£FJr'0�2˜0Ì��\& nذaY+V¬@:ˆÓ©S§qãÆ%¹˜� Ìæ��ÞrèСիW¯ ãgzôÑG'L˜äN`>�d(0`˜��¤”ýû÷¯$øªjö?ÿùÏ^x!ÉÀ|�ÈP`>À80��0ɾ}ûlZµj•õ7//ÏtDÒ³gÏáÇ'¹˜� Ìæ��iÄîÝ»múæ›oV¯^ýóÏ?›ŽÈM¦NúÀ$¹˜� Ìæ��éKAAÁ·ß~k)К5k¬¿›6m*//7T‚mÛ¶5kÖ,ÉýÀ|�ÈP`>À80��ÈŽ=º~ýúÕaÖ®][\\l:¨X¹êª«>þøãä÷ó Cù�ãÀ|�� S±.àÛ¶m³-ÈN íܹÓtPZ–,Yò§?ý)ùýÀ|�ÈP`>À80��È ×®]»aÆuëÖ}÷Ýwëׯ/**2Ôx衇^~ùeWvó Cù�ãÀ|�� ›ÉË˳È!ëïÆKJJRÃ%—\²dÉ’O<Ñ•½Á|�ÈP`>À80��ð»víÚ°aƒ%B«V­ÚPÁáǽ{»ë¯¿þ7Þ¨U«–[;¼êª«>ýôS·ö–<Íš5Û¾}»é(�È�`>À80��ð5ÇŽûþûï-ÿÙ´iÓÆ­¿›7o.--M~Ï•+W~üñÇGŒQ©R¥ä÷Æyà¦OŸîâ“äüóÏÿöÛoMG@�óÆù���±óBÛ¶mûî»ïì…íÛ·Çõ{a5 F}î¹çºÛܹsÛ¶m{èÐ!×÷œ�@àÉ'ŸL~zV�ü�Ìæ�� :EEE›7o¶,Èúkg‡,&ÊÉÉùŸÿùŸÛo¿ý®»î²<ŠÄržæÍ›ÿòË/í?.êÕ«·téRï>,�ÙÌæ�� ÊÊʶnÝZXXx¸‚fÍšqÆÕªUKÁ[÷éÓgôèÑžOŠ…J•*Ýpà óçÏ7�™Ìæ�� ð¤ë÷¿ÿýÚµkƒÁ Á0š4iòí·ßÖ©SÇ` �d0`˜��€Ì#??ÿꫯ޲e‹‘ÌO¥J•5j´xñâ³Î:+õï@†óÆù���ÈHŽ=Ú³gÏ™3g8pÀZNÍ›V®\¹víÚW]uÕ /¼`-¤æMÈ`>À80���L~~þ›o¾9oÞ¼;wzZð­Zµj§žzêõ×_×]w5mÚÔ»7 [ù�ãÀ|�����€çÀ|€q`>�����Às`>À80�����à90`˜�����ð˜0Ì�����xÌæ�����<æŒó�����žóÆù������Ïù�ãÀ|�����€çÀ|€q`>�����Às‚Á`£F²Ã|®¿þú÷ßßt n`>����� Xæ³gÏÓQ¸ÀÝwß=cÆ ÓQ€¸ù�����€TдiÓ;wšŽÂzõê5tèPÓQ€¸ù�����€Tpá…~ûí·¦£H–êÕ«¿úê«ûÛßLâæ�����RA·nÝFe:ŠdiРåo52ˆ˜�����H_|ñÅ-·ÜRPP`:¤øõ¯½mÛ6ÓQ€D€ù�����€T`5;›4i’——g:Ä©T©RÏž=‡ b:0�����"ú÷ï?räÈ£Gš$Aêׯ¿zõjtuËP`>����� E<xðÌ3ÏÌÐÚÖ•+W¾ûî»§M›f: 0�����:&L˜Ð«W¯ââbÓÄMÆ ¿ûî»Úµk›$Ì�����¤«ñyùå—¯X±âøñã¦c‰ƒÜÜÜ^xá®»î2H˜�����H)ùùù-Z´Ø±c‡é@b¥fÍšmÚ´™8q¢é@@RÀ|�����@ªÙºuë•W^¹k×®ôo‹ZÚc…úî»ïæä䘎$Ì�����à§Ÿ~jÙ²åÎ;ËÊÊLÇ¢%77·U«VS¦Löd0�����`†’’’{î¹ç³Ï>+,,4‹ˆ¥:uëÖ1bDÛ¶mMÇÜæ�����LòÑGýóŸÿÌÏÏß¿¿éXþC °œçÒK/}ñÅ6lh:à0�����`«Eºpá§žzjÓ¦MeeeEEE©¡råʵk×¶þÞtÓM=zô8ýôÓSð˜�����HŽ9²lÙ²åË—¯Y³fïÞ½Gõº±Z©R¥5j4mÚô¢‹.ºì²ËÎ9çOßæ������È~`>������€ìæ������È~`>������€ìæ������È~`>������€ìæ������È~`>������€ìæ������È~`>������€ìæ������È~`>������€ìæ������È~`>������€ìæ�����þCQQÑîÝ»>ìÝ[œ|òÉ7®^½ºwo€˜����€¯Ù·o߀æÏŸ_VVfµ ƒÁ wï•““rssÿþ÷¿?öØcUªTñî½�€ù�����ø——^z©_¿~ÇOåûV¯^½nݺsçν袋Rù¾ÀÏÀ|�����|JïÞ½Ÿþùýû÷› À’Ÿ×^{íúë¯7�ð0�����?òÖ[oµk×®°°Ðl 4X¾|y³fÍ̆ü�Ì����Àw”••5oÞ|çΦa@àšk®ùðÃM²˜����€ï˜5kV»víJJJLòêׯÿÍ7ßœzꩦYÌ����Àw\wÝu‹-2Åÿq 'Œ=ºcÇŽ¦YÌ����Àwüæ7¿Ù¾}»é(þË}÷Ý7}útÓQ€,æ����à;š4iòóÏ?›Žâ¿´lÙò£>2Èr`>�����¾#ÝÌçŠ+®øôÓOMG²˜����€ï€ù�ó����ð0àC`>�����¾æ|Ì����ÀwÀ|€ù�����ø˜ð!0�����ßó>æ����à;`>À‡À|�����|Ìø˜����€ï€ù�ó����ð0àC`>�����¾æ|Ì����ÀwÀ|€ù�����ø˜ð!0�����ßó>æ����à;`>À‡À|�����|Ìø˜����€ï€ù�ó����ð0àC`>�����¾æ|Ì����ÀwÀ|€ù�����ø˜ð!0�����ßó>æ����à;`>À‡À|�����|Ìø˜����€ï€ù�ó����ð0àC`>�����¾æ|Ì����ÀwÀ|€ù�����ø˜ð!0�Àÿo¿YZ ã0&C³ƒ‰åm Š_`ËÃo .™ û6³`e}à CËÖl/Áf˜è†“õû½®ðÔÿŸ�SUÕËËKé߆Ãá|>/½‚pÊ� qz½Þjµ*½âÛÙÙÙÕÕUé„S>��szzzssSzÅ?;;;ãñ¸ôÂ)�€Æ¹¿¿?99y}}-=ä¯n·ûôôôõ–B8å�Ð8_?À£££çççÒCþlmmF£ëëëÒCȧ|��šèñññøø¸®ë²3ªªZ,»»»egÐÊ� ¡îîîÎÏÏ×ëu‘ë­Vk6›@Ó(�€æzxxFu]¿½½ýæÝN§sppp{{»··÷›wi2å�ÐhÓéôòòr¹\¾¿¿o6›Ÿ»Õn····ƒÁd2é÷û?wþ§|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|Ê��ȧ|��€|ŸkÜ«W endstream endobj 9 0 obj <</Type/Metadata /Subtype/XML/Length 1204>>stream <?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <?adobe-xap-filters esc="CRLF"?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 10.02.1'/> <rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-02-03T20:22:25+01:00</xmp:ModifyDate> <xmp:CreateDate>2024-02-03T20:22:25+01:00</xmp:CreateDate> <xmp:CreatorTool>(ImageMagick)</xmp:CreatorTool></rdf:Description> <rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:1c8965b9-fae6-11f9-0000-e49ebbddba08'/> <rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>(../gnuastro-figures/gnuastro.eps)</rdf:li></rdf:Alt></dc:title></rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?> endstream endobj 2 0 obj <</Producer(GPL Ghostscript 10.02.1) /CreationDate(D:20240203202225+01'00') /ModDate(D:20240203202225+01'00') /Creator(\(ImageMagick\)) /Title(\(../gnuastro-figures/gnuastro.eps\))>>endobj xref 0 10 0000000000 65535 f 0000000473 00000 n 0000146496 00000 n 0000000414 00000 n 0000000271 00000 n 0000000122 00000 n 0000000253 00000 n 0000000566 00000 n 0000000537 00000 n 0000145216 00000 n trailer << /Size 10 /Root 1 0 R /Info 2 0 R /ID [<325697D064715079EF6AEB8B7BEEF79C><325697D064715079EF6AEB8B7BEEF79C>] >> startxref 146693 %%EOF ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/gnuastro.svg�����������������������������������������������������0000644�0001750�0001750�00000211254�14551337306�015430� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <!-- Original author: Marjan Akbari <mrjakbari@gmail.com> Copyright (C) 2022-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. --> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1107.4 1080" style="enable-background:new 0 0 1107.4 1080;" xml:space="preserve"> <style type="text/css"> .st0{stroke:#000000;stroke-width:0.9178;stroke-miterlimit:10;} .st1{stroke:#000000;stroke-width:1.2229;stroke-miterlimit:10;} .st2{stroke:#000000;stroke-width:0.7797;stroke-miterlimit:10;} .st3{fill:url(#SVGID_1_);} .st4{filter:url(#Adobe_OpacityMaskFilter);} .st5{mask:url(#SVGID_00000151545267059372187170000008363100209912585634_);} .st6{fill:#C5C5C5;} .st7{opacity:0.5;} .st8{filter:url(#Adobe_OpacityMaskFilter_00000137848669277952265630000004605467131536145541_);} .st9{mask:url(#SVGID_00000152243140473753222960000006570787572314338437_);} .st10{filter:url(#Adobe_OpacityMaskFilter_00000106107470118545433480000008455637699595185796_);} .st11{mask:url(#SVGID_00000156570684329056746700000002277696966786082181_);} .st12{fill:url(#SVGID_00000031176664416209451160000007197730502360779179_);} .st13{filter:url(#Adobe_OpacityMaskFilter_00000080915000266961465160000014014105373147374225_);} .st14{mask:url(#SVGID_00000108999651112763635060000002124577705243134395_);} .st15{filter:url(#Adobe_OpacityMaskFilter_00000033366738794765451570000011686546057710236816_);} .st16{mask:url(#SVGID_00000021098579467593038580000004353398904653682333_);} .st17{filter:url(#Adobe_OpacityMaskFilter_00000062159681250025928740000005708344827426983575_);} .st18{mask:url(#SVGID_00000055692154646439084020000003435264670079840399_);} .st19{filter:url(#Adobe_OpacityMaskFilter_00000166671704446206690570000004748842690101312643_);} .st20{mask:url(#SVGID_00000027566142492046497500000006547961302912195246_);} .st21{filter:url(#Adobe_OpacityMaskFilter_00000102510226361681574680000015268900496429363867_);} .st22{mask:url(#SVGID_00000162318365628156117530000008138103283818693813_);} .st23{filter:url(#Adobe_OpacityMaskFilter_00000086691509700824576780000013557330427664763520_);} .st24{mask:url(#SVGID_00000016066060247402105430000018309654149492781473_);} .st25{filter:url(#Adobe_OpacityMaskFilter_00000109735270992436847230000013397051611425133469_);} .st26{mask:url(#SVGID_00000103228101987555795410000016982641643024781215_);} .st27{filter:url(#Adobe_OpacityMaskFilter_00000155106240081395986260000013120662619485574581_);} .st28{mask:url(#SVGID_00000163074240429964362620000007216809509263540372_);} .st29{filter:url(#Adobe_OpacityMaskFilter_00000160173341108487451150000015838733967804097160_);} .st30{mask:url(#SVGID_00000016053695569116747410000004023167653663299516_);} .st31{filter:url(#Adobe_OpacityMaskFilter_00000052083309568489178800000010331395878450125452_);} .st32{mask:url(#SVGID_00000125600296507777479260000010582647172562483879_);} .st33{filter:url(#Adobe_OpacityMaskFilter_00000180339696341092067120000004247960307208024209_);} .st34{mask:url(#SVGID_00000166636956620558063060000004262138999107365040_);} .st35{filter:url(#Adobe_OpacityMaskFilter_00000031900143245797264410000012613968532877241736_);} .st36{mask:url(#SVGID_00000103263062160421540960000006813364509106244266_);} .st37{filter:url(#Adobe_OpacityMaskFilter_00000095333420170454190850000011847201171390008223_);} .st38{mask:url(#SVGID_00000027566597549529749680000011611112891434912659_);} .st39{filter:url(#Adobe_OpacityMaskFilter_00000047055241485991778570000005690637947220446610_);} .st40{mask:url(#SVGID_00000180352589621987046170000001557153512593220264_);} .st41{fill:none;stroke:#050101;stroke-width:7;stroke-miterlimit:10;} .st42{stroke:#000000;stroke-width:1.2598;stroke-miterlimit:10;} </style> <g> <path class="st0" d="M674.5,428.6h-90.3c-10.1,0-18.3-8.2-18.3-18.3V320c0-10.1,8.2-18.3,18.3-18.3h90.3c10.1,0,18.3,8.2,18.3,18.3 v90.3C692.8,420.4,684.6,428.6,674.5,428.6z"/> <path class="st0" d="M975.5,441h-90.3c-10.1,0-18.3-8.2-18.3-18.3v-90.3c0-10.1,8.2-18.3,18.3-18.3h90.3c10.1,0,18.3,8.2,18.3,18.3 v90.3C993.8,432.8,985.6,441,975.5,441z"/> <path class="st0" d="M1052.6,593.2h-90.3c-10.1,0-18.3-8.2-18.3-18.3v-90.3c0-10.1,8.2-18.3,18.3-18.3h90.3 c10.1,0,18.3,8.2,18.3,18.3v90.3C1070.9,585,1062.7,593.2,1052.6,593.2z"/> <path class="st0" d="M772.1,601.9h-89.8c-10.3,0-18.6-8.3-18.6-18.6v-89.8c0-10.3,8.3-18.6,18.6-18.6h89.8 c10.3,0,18.6,8.3,18.6,18.6v89.8C790.7,593.6,782.4,601.9,772.1,601.9z"/> <path class="st0" d="M674.5,756.9h-90.3c-10.1,0-18.3-8.2-18.3-18.3v-90.3c0-10.1,8.2-18.3,18.3-18.3h90.3 c10.1,0,18.3,8.2,18.3,18.3v90.3C692.8,748.7,684.6,756.9,674.5,756.9z"/> <path class="st1" d="M618.9,613.4H489.3c-10.8,0-19.5-8.7-19.5-19.5V463.2c0-10.8,8.7-19.5,19.5-19.5h129.6 c10.8,0,19.5,8.7,19.5,19.5v130.6C638.5,604.6,629.7,613.4,618.9,613.4z"/> <path class="st2" d="M644.3,274H581c-9.7,0-17.6-7.9-17.6-17.6v-63.9c0-9.7,7.9-17.6,17.6-17.6h63.3c9.7,0,17.6,7.9,17.6,17.6v63.9 C661.9,266.1,654,274,644.3,274z"/> <path class="st2" d="M644.5,876.7h-63.3c-9.7,0-17.6-7.9-17.6-17.6v-63.9c0-9.7,7.9-17.6,17.6-17.6h63.3c9.7,0,17.6,7.9,17.6,17.6 V859C662.2,868.8,654.3,876.7,644.5,876.7z"/> <path class="st2" d="M1052.5,712.8h-63.3c-9.7,0-17.6-7.9-17.6-17.6v-63.9c0-9.7,7.9-17.6,17.6-17.6h63.3c9.7,0,17.6,7.9,17.6,17.6 v63.9C1070.1,704.9,1062.2,712.8,1052.5,712.8z"/> <path class="st2" d="M988.6,885.9h-33.1c-9.3,0-16.9-7.6-16.9-16.9v-32.6c0-9.3,7.6-16.9,16.9-16.9h33.1c9.3,0,16.9,7.6,16.9,16.9 v32.6C1005.5,878.4,998,885.9,988.6,885.9z"/> <path class="st2" d="M1019.2,799.5h-33.1c-9.3,0-16.9-7.6-16.9-16.9V750c0-9.3,7.6-16.9,16.9-16.9h33.1c9.3,0,16.9,7.6,16.9,16.9 v32.6C1036,791.9,1028.5,799.5,1019.2,799.5z"/> <path class="st2" d="M779.4,696H734c-5.9,0-10.7-4.8-10.7-10.7v-44.9c0-5.9,4.8-10.7,10.7-10.7h45.4c5.9,0,10.7,4.8,10.7,10.7v44.9 C790.1,691.2,785.3,696,779.4,696z"/> <path class="st2" d="M765.6,453.9h-45.4c-5.9,0-10.7-4.8-10.7-10.7v-44.9c0-5.9,4.8-10.7,10.7-10.7h45.4c5.9,0,10.7,4.8,10.7,10.7 v44.9C776.2,449.1,771.5,453.9,765.6,453.9z"/> <path class="st2" d="M712.7,854h-31.2c-4.6,0-8.3-3.7-8.3-8.3v-30.8c0-4.6,3.7-8.3,8.3-8.3h31.2c4.6,0,8.3,3.7,8.3,8.3v30.8 C721,850.2,717.3,854,712.7,854z"/> <path class="st2" d="M613.4,942.4h-31.2c-4.6,0-8.3-3.7-8.3-8.3v-30.8c0-4.6,3.7-8.3,8.3-8.3h31.2c4.6,0,8.3,3.7,8.3,8.3v30.8 C621.7,938.7,618,942.4,613.4,942.4z"/> <path class="st2" d="M1048.9,451h-31.2c-4.6,0-8.3-3.7-8.3-8.3v-30.8c0-4.6,3.7-8.3,8.3-8.3h31.2c4.6,0,8.3,3.7,8.3,8.3v30.8 C1057.2,447.3,1053.5,451,1048.9,451z"/> <path class="st2" d="M921,505.1h-31.2c-4.6,0-8.3-3.7-8.3-8.3V466c0-4.6,3.7-8.3,8.3-8.3H921c4.6,0,8.3,3.7,8.3,8.3v30.8 C929.4,501.4,925.6,505.1,921,505.1z"/> <path class="st2" d="M894.3,1032.6h-31.2c-4.6,0-8.3-3.7-8.3-8.3v-30.8c0-4.6,3.7-8.3,8.3-8.3h31.2c4.6,0,8.3,3.7,8.3,8.3v30.8 C902.7,1028.9,898.9,1032.6,894.3,1032.6z"/> <path class="st2" d="M839,272.1h-31.2c-4.6,0-8.3-3.7-8.3-8.3V233c0-4.6,3.7-8.3,8.3-8.3H839c4.6,0,8.3,3.7,8.3,8.3v30.8 C847.4,268.4,843.6,272.1,839,272.1z"/> <path class="st2" d="M748.6,363h-31.2c-4.6,0-8.3-3.7-8.3-8.3v-30.8c0-4.6,3.7-8.3,8.3-8.3h31.2c4.6,0,8.3,3.7,8.3,8.3v30.8 C757,359.3,753.2,363,748.6,363z"/> <path class="st2" d="M943.7,969.3h-33.1c-9.3,0-16.9-7.6-16.9-16.9v-32.6c0-9.3,7.6-16.9,16.9-16.9h33.1c9.3,0,16.9,7.6,16.9,16.9 v32.6C960.5,961.8,953,969.3,943.7,969.3z"/> <path class="st2" d="M766.2,289h-63.3c-9.7,0-17.6-7.9-17.6-17.6v-63.9c0-9.7,7.9-17.6,17.6-17.6h63.3c9.7,0,17.6,7.9,17.6,17.6 v63.9C783.8,281.1,775.9,289,766.2,289z"/> <path class="st2" d="M835.6,364.6h-45.4c-5.9,0-10.7-4.8-10.7-10.7V309c0-5.9,4.8-10.7,10.7-10.7h45.4c5.9,0,10.7,4.8,10.7,10.7 v44.9C846.3,359.8,841.5,364.6,835.6,364.6z"/> <path class="st2" d="M753.3,777.2h-31.2c-4.6,0-8.3-3.7-8.3-8.3v-30.8c0-4.6,3.7-8.3,8.3-8.3h31.2c4.6,0,8.3,3.7,8.3,8.3v30.8 C761.7,773.5,757.9,777.2,753.3,777.2z"/> <path class="st2" d="M903.7,301.4h-31.2c-4.6,0-8.3-3.7-8.3-8.3v-30.8c0-4.6,3.7-8.3,8.3-8.3h31.2c4.6,0,8.3,3.7,8.3,8.3v30.8 C912,297.7,908.3,301.4,903.7,301.4z"/> <path class="st2" d="M840.7,430.3h-31.2c-4.6,0-8.3-3.7-8.3-8.3v-30.8c0-4.6,3.7-8.3,8.3-8.3h31.2c4.6,0,8.3,3.7,8.3,8.3v30.8 C849,426.5,845.3,430.3,840.7,430.3z"/> <path class="st2" d="M609.2,158H578c-4.6,0-8.3-3.7-8.3-8.3v-30.8c0-4.6,3.7-8.3,8.3-8.3h31.2c4.6,0,8.3,3.7,8.3,8.3v30.8 C617.5,154.2,613.8,158,609.2,158z"/> <path class="st2" d="M708.2,172.7h-31.2c-4.6,0-8.3-3.7-8.3-8.3v-30.8c0-4.6,3.7-8.3,8.3-8.3h31.2c4.6,0,8.3,3.7,8.3,8.3v30.8 C716.6,168.9,712.9,172.7,708.2,172.7z"/> <radialGradient id="SVGID_1_" cx="545.1384" cy="490.6018" r="375.7791" gradientUnits="userSpaceOnUse"> <stop offset="1.676216e-02" style="stop-color:#999999"/> <stop offset="3.616048e-02" style="stop-color:#939393"/> <stop offset="0.198" style="stop-color:#676767"/> <stop offset="0.3611" style="stop-color:#424242"/> <stop offset="0.5234" style="stop-color:#252525"/> <stop offset="0.6845" style="stop-color:#101010"/> <stop offset="0.844" style="stop-color:#040404"/> <stop offset="1" style="stop-color:#000000"/> </radialGradient> <path class="st3" d="M584.1,420.6c-5.7,0-10.3-4.6-10.3-10.3V320c0-5.7,4.6-10.3,10.3-10.3h90.3c5.7,0,10.3,4.6,10.3,10.3v90.3 c0,5.7-4.6,10.3-10.3,10.3H584.1z M975.5,432.9c5.7,0,10.3-4.6,10.3-10.3v-90.3c0-5.7-4.6-10.3-10.3-10.3h-90.3 c-5.7,0-10.3,4.6-10.3,10.3v90.3c0,5.7,4.6,10.3,10.3,10.3H975.5z M1052.6,585.1c5.7,0,10.3-4.6,10.3-10.3v-90.3 c0-5.7-4.6-10.3-10.3-10.3h-90.3c-5.7,0-10.3,4.6-10.3,10.3v90.3c0,5.7,4.6,10.3,10.3,10.3H1052.6z M772.1,593.9 c5.8,0,10.6-4.7,10.6-10.6v-89.8c0-5.8-4.7-10.6-10.6-10.6h-89.8c-5.8,0-10.6,4.7-10.6,10.6v89.8c0,5.8,4.7,10.6,10.6,10.6H772.1z M674.4,748.9c5.7,0,10.3-4.6,10.3-10.3v-90.3c0-5.7-4.6-10.3-10.3-10.3h-90.3c-5.7,0-10.3,4.6-10.3,10.3v90.3 c0,5.7,4.6,10.3,10.3,10.3H674.4z M629.6,593.2V463.9c0-6.2-5.1-11.3-11.3-11.3H489.9c-6.2,0-11.3,5.1-11.3,11.3v129.3 c0,6.2,5.1,11.3,11.3,11.3h128.4C624.6,604.5,629.6,599.4,629.6,593.2z M644.3,266c5.3,0,9.6-4.3,9.6-9.6v-63.9 c0-5.3-4.3-9.6-9.6-9.6H581c-5.3,0-9.6,4.3-9.6,9.6v63.9c0,5.3,4.3,9.6,9.6,9.6H644.3z M766.2,280.9c5.3,0,9.6-4.3,9.6-9.6v-63.9 c0-5.3-4.3-9.6-9.6-9.6h-63.3c-5.3,0-9.6,4.3-9.6,9.6v63.9c0,5.3,4.3,9.6,9.6,9.6H766.2z M644.5,868.6c5.3,0,9.6-4.3,9.6-9.6v-63.9 c0-5.3-4.3-9.6-9.6-9.6h-63.3c-5.3,0-9.6,4.3-9.6,9.6V859c0,5.3,4.3,9.6,9.6,9.6H644.5z M1052.5,704.8c5.3,0,9.6-4.3,9.6-9.6v-63.9 c0-5.3-4.3-9.6-9.6-9.6h-63.3c-5.3,0-9.6,4.3-9.6,9.6v63.9c0,5.3,4.3,9.6,9.6,9.6H1052.5z M988.6,877.9c4.9,0,8.8-4,8.8-8.8v-32.6 c0-4.9-4-8.8-8.8-8.8h-33.1c-4.9,0-8.8,4-8.8,8.8v32.6c0,4.9,4,8.8,8.8,8.8H988.6z M1019.2,791.4c4.9,0,8.8-4,8.8-8.8V750 c0-4.9-4-8.8-8.8-8.8h-33.1c-4.9,0-8.8,4-8.8,8.8v32.6c0,4.9,4,8.8,8.8,8.8H1019.2z M779.4,688c1.5,0,2.7-1.2,2.7-2.7v-44.9 c0-1.5-1.2-2.7-2.7-2.7H734c-1.5,0-2.7,1.2-2.7,2.7v44.9c0,1.5,1.2,2.7,2.7,2.7H779.4z M765.6,445.9c1.5,0,2.7-1.2,2.7-2.7v-44.9 c0-1.5-1.2-2.7-2.7-2.7h-45.4c-1.5,0-2.7,1.2-2.7,2.7v44.9c0,1.5,1.2,2.7,2.7,2.7H765.6z M835.6,356.6c1.5,0,2.7-1.2,2.7-2.7V309 c0-1.5-1.2-2.7-2.7-2.7h-45.4c-1.5,0-2.7,1.2-2.7,2.7v44.9c0,1.5,1.2,2.7,2.7,2.7H835.6z M712.7,845.9c0.2,0,0.3-0.1,0.3-0.3v-30.8 c0-0.2-0.1-0.3-0.3-0.3h-31.2c-0.2,0-0.3,0.1-0.3,0.3v30.8c0,0.2,0.1,0.3,0.3,0.3H712.7z M753.3,769.2c0.2,0,0.3-0.1,0.3-0.3v-30.8 c0-0.2-0.1-0.3-0.3-0.3h-31.2c-0.2,0-0.3,0.1-0.3,0.3v30.8c0,0.2,0.1,0.3,0.3,0.3H753.3z M613.4,934.4c0.2,0,0.3-0.1,0.3-0.3v-30.8 c0-0.2-0.1-0.3-0.3-0.3h-31.2c-0.2,0-0.3,0.1-0.3,0.3v30.8c0,0.2,0.1,0.3,0.3,0.3H613.4z M1048.9,443c0.2,0,0.3-0.1,0.3-0.3v-30.8 c0-0.2-0.1-0.3-0.3-0.3h-31.2c-0.2,0-0.3,0.1-0.3,0.3v30.8c0,0.2,0.1,0.3,0.3,0.3H1048.9z M921,497.1c0.2,0,0.3-0.1,0.3-0.3V466 c0-0.2-0.1-0.3-0.3-0.3h-31.2c-0.2,0-0.3,0.1-0.3,0.3v30.8c0,0.2,0.1,0.3,0.3,0.3H921z M894.3,1024.6c0.2,0,0.3-0.1,0.3-0.3v-30.8 c0-0.2-0.1-0.3-0.3-0.3h-31.2c-0.2,0-0.3,0.1-0.3,0.3v30.8c0,0.2,0.1,0.3,0.3,0.3H894.3z M839,264.1c0.2,0,0.3-0.1,0.3-0.3V233 c0-0.2-0.1-0.3-0.3-0.3h-31.2c-0.2,0-0.3,0.1-0.3,0.3v30.8c0,0.2,0.1,0.3,0.3,0.3H839z M903.7,293.4c0.2,0,0.3-0.1,0.3-0.3v-30.8 c0-0.2-0.1-0.3-0.3-0.3h-31.2c-0.2,0-0.3,0.1-0.3,0.3v30.8c0,0.2,0.1,0.3,0.3,0.3H903.7z M609.2,149.9c0.2,0,0.3-0.1,0.3-0.3v-30.8 c0-0.2-0.1-0.3-0.3-0.3H578c-0.2,0-0.3,0.1-0.3,0.3v30.8c0,0.2,0.1,0.3,0.3,0.3H609.2z M708.2,164.6c0.2,0,0.3-0.1,0.3-0.3v-30.8 c0-0.2-0.1-0.3-0.3-0.3h-31.2c-0.2,0-0.3,0.1-0.3,0.3v30.8c0,0.2,0.1,0.3,0.3,0.3H708.2z M840.7,422.2c0.2,0,0.3-0.1,0.3-0.3v-30.8 c0-0.2-0.1-0.3-0.3-0.3h-31.2c-0.2,0-0.3,0.1-0.3,0.3v30.8c0,0.2,0.1,0.3,0.3,0.3H840.7z M748.6,355c0.2,0,0.3-0.1,0.3-0.3v-30.8 c0-0.2-0.1-0.3-0.3-0.3h-31.2c-0.2,0-0.3,0.1-0.3,0.3v30.8c0,0.2,0.1,0.3,0.3,0.3H748.6z M943.7,961.3c4.9,0,8.8-4,8.8-8.8v-32.6 c0-4.9-4-8.8-8.8-8.8h-33.1c-4.9,0-8.8,4-8.8,8.8v32.6c0,4.9,4,8.8,8.8,8.8H943.7z"/> <path class="st0" d="M975.1,313.3h-89.8c-10.3,0-18.6,8.3-18.6,18.6v89.8c0,10.3,8.3,18.6,18.6,18.6h89.8 c10.3,0,18.6-8.3,18.6-18.6v-89.8C993.6,321.7,985.3,313.3,975.1,313.3z M985.6,421.7c0,5.8-4.7,10.6-10.6,10.6h-89.8 c-5.8,0-10.6-4.7-10.6-10.6v-89.8c0-5.8,4.7-10.6,10.6-10.6h89.8c5.8,0,10.6,4.7,10.6,10.6V421.7z"/> <path class="st2" d="M643.6,175.2h-63.3c-9.7,0-17.6,7.9-17.6,17.6v63.9c0,9.7,7.9,17.6,17.6,17.6h63.3c9.7,0,17.6-7.9,17.6-17.6 v-63.9C661.2,183.1,653.3,175.2,643.6,175.2z M653.2,256.7c0,5.3-4.3,9.6-9.6,9.6h-63.3c-5.3,0-9.6-4.3-9.6-9.6v-63.9 c0-5.3,4.3-9.6,9.6-9.6h63.3c5.3,0,9.6,4.3,9.6,9.6V256.7z"/> <path class="st2" d="M1047.6,402.2h-31.2c-4.6,0-8.3,3.7-8.3,8.3v30.8c0,4.6,3.7,8.3,8.3,8.3h31.2c4.6,0,8.3-3.7,8.3-8.3v-30.8 C1055.9,406,1052.2,402.2,1047.6,402.2z M1047.9,441.4c0,0.2-0.1,0.3-0.3,0.3h-31.2c-0.2,0-0.3-0.1-0.3-0.3v-30.8 c0-0.2,0.1-0.3,0.3-0.3h31.2c0.2,0,0.3,0.1,0.3,0.3V441.4z"/> <g> <defs> <filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x="1007.7" y="393.2" width="22.4" height="58.7"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="1007.7" y="393.2" width="22.4" height="58.7" id="SVGID_00000034801676561535022950000012806724304925862545_"> <g class="st4"> <image style="overflow:visible;" width="28" height="63" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAF9AAABkwAAAbT/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAD8AHAMBIgACEQEDEQH/ xABnAAEBAQEBAAAAAAAAAAAAAAAAAQIDBwEBAAAAAAAAAAAAAAAAAAAAABAAAgMAAwAAAAAAAAAA AAAAAAEQMDERIQIRAQAAAAAAAAAAAAAAAAAAAFASAQAAAAAAAAAAAAAAAAAAADD/2gAMAwEAAhED EQAAAPPwAFEBbNnNYXfOiB//2gAIAQIAAQUAo//aAAgBAwABBQCj/9oACAEBAAEFALEOfI1PnXj0 RyOe5//aAAgBAgIGPwAP/9oACAEDAgY/AA//2gAIAQEBBj8AA//Z" transform="matrix(1 0 0 1 1005 391)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000034801676561535022950000012806724304925862545_);"> <path class="st6" d="M1016.4,451.8h13.7c-6-20.1-13.5-39.8-22.4-58.7v49.5C1009.5,452.1,1016.4,451.8,1016.4,451.8z"/> </g> </g> <g class="st7"> <defs> <filter id="Adobe_OpacityMaskFilter_00000101105638039878948930000012099577388574395576_" filterUnits="userSpaceOnUse" x="713.3" y="729.8" width="1.4" height="7.2"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="713.3" y="729.8" width="1.4" height="7.2" id="SVGID_00000064314108203054133340000008963209724973766290_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000101105638039878948930000012099577388574395576_);"> <image style="overflow:visible;" width="6" height="13" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAFpAAABdAAAAZX/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAA0ABgMBIgACEQEDEQH/ xABeAAEBAAAAAAAAAAAAAAAAAAAABwEBAAAAAAAAAAAAAAAAAAAAABABAQAAAAAAAAAAAAAAAAAA ABARAQAAAAAAAAAAAAAAAAAAABASAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQAAAJ+D/9oA CAECAAEFAH//2gAIAQMAAQUAf//aAAgBAQABBQCf/9oACAECAgY/AH//2gAIAQMCBj8Af//aAAgB AQEGPwA//9k=" transform="matrix(1 0 0 1 711 727)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000064314108203054133340000008963209724973766290_);"> <path class="st6" d="M713.3,730.8v6.2c0.5-2.4,1-4.8,1.4-7.2L713.3,730.8z"/> </g> </g> <g class="st7"> <defs> <filter id="Adobe_OpacityMaskFilter_00000144306714321917752090000014064984291250756481_" filterUnits="userSpaceOnUse" x="673.2" y="806.5" width="6.6" height="7"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="673.2" y="806.5" width="6.6" height="7" id="SVGID_00000046302462639447626100000000539053688316543163_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000144306714321917752090000014064984291250756481_);"> <image style="overflow:visible;" width="11" height="12" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAFpAAABdAAAAZX/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAAwACwMBIgACEQEDEQH/ xABeAAEBAAAAAAAAAAAAAAAAAAAABwEBAAAAAAAAAAAAAAAAAAAAABABAQAAAAAAAAAAAAAAAAAA ACARAQAAAAAAAAAAAAAAAAAAACASAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQAAAJ+D/9oA CAECAAEFAH//2gAIAQMAAQUAf//aAAgBAQABBQCP/9oACAECAgY/AH//2gAIAQMCBj8Af//aAAgB AQEGPwAf/9k=" transform="matrix(1 0 0 1 671 804)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000046302462639447626100000000539053688316543163_);"> <path class="st6" d="M673.2,812v1.6c0.9-0.9,1.9-1.9,2.8-2.8c1.3-1.4,2.6-2.8,3.8-4.2C674.5,807.7,673.2,812,673.2,812z"/> </g> </g> <g> <path d="M550.7,498.1c0,0-0.1,2.3,0,5.2c0.3,18.2-0.1,89.8-0.1,168.8c0,42.4,0.3,87.1,0.1,126.9c-0.2,29.6,0.3,56.5,0,77.9 c-0.4,30.1,0.1,49.6,0.1,49.6c0,7.6-8.4,12.8-15.9,11.7c-98.7-14.8-199.6-40.8-288.1-87.5C159.4,804.6,86.2,725.5,55.4,631.2 c-23.8-72.7-25.4-150.9-13.9-226c14.4-93.7,44.1-188.9,99.5-266.8c0,0,54.8-77.2,103.8-95.9c0,0,22-10.1,31.2-0.8 c21.8,22.1-10.7,55.5-21.9,73.5c-65.1,105-110.3,239.9-90.8,364.9c5.2,33.7,13.8,67,26.5,98.6c12.2,30.4,28.2,61.8,53,84.4 c19.5,17.7,47.1,39.6,72.7,46.8c0.4,0.1,0.9,0.3,1.3,0.4c2.2,0.9,10.1,3.8,20.2,5.4c11.7,1.9,20.1-11,13.9-21.1 c-35.4-57-62.3-122.6-65-190.3c-3-75.6,29.7-153.1,70.4-215.4c24.6-37.8,55.6-71,89.9-100.2c16.7-14.2,34-28,52.4-39.9 c9.6-6.2,35.4-24.7,46.9-13.3c4.5,4.5,5,17.2,5.3,30.5c0.4,16.4-0.1,33.9-0.1,41.7c0.1,89.1,0.2,178.2,0.2,267.3 c0,5.8,0.4,11-0.2,16.6C550.5,494,550.7,495.8,550.7,498.1z"/> <radialGradient id="SVGID_00000119085881184485203380000017102034256661159357_" cx="292.7853" cy="488.0272" r="359.3479" fx="646.9738" fy="548.7017" gradientUnits="userSpaceOnUse"> <stop offset="0" style="stop-color:#FFFFFF"/> <stop offset="3.301273e-02" style="stop-color:#E2E2E2"/> <stop offset="9.352830e-02" style="stop-color:#B3B3B3"/> <stop offset="0.1594" style="stop-color:#888888"/> <stop offset="0.2293" style="stop-color:#636363"/> <stop offset="0.304" style="stop-color:#454545"/> <stop offset="0.3852" style="stop-color:#2B2B2B"/> <stop offset="0.4755" style="stop-color:#181818"/> <stop offset="0.5796" style="stop-color:#0A0A0A"/> <stop offset="0.7101" style="stop-color:#020202"/> <stop offset="0.9508" style="stop-color:#000000"/> </radialGradient> <path style="fill:url(#SVGID_00000119085881184485203380000017102034256661159357_);" d="M537,930.3c-0.3,0-0.6,0-0.9-0.1 c-114-17-207.4-45.4-285.6-86.7c-43-22.7-82.6-53.8-114.6-89.9c-33.6-38-58.2-80-72.9-125C41.4,562.8,36.9,488,49.4,406.3 C65.7,300.2,98.7,211.6,147.5,143c0.5-0.8,54-75.4,100.2-93.1l0.2-0.1l0.2-0.1c0.1,0,9-4,16.4-4c2.8,0,4.7,0.5,5.7,1.6 c12.1,12.3,0.4,30.9-14.9,52.1c-3,4.2-5.9,8.1-8,11.6c-76,122.6-109.5,257.6-91.9,370.3c0.1,0.3,5.3,33.7,17.8,73.2 c17,53.6,38.7,92.3,64.5,115.2c0.3,0.3,0.6,0.5,0.9,0.8c5.2,4.1,51.7,40.7,74.7,47.2c0.2,0,0.3,0.1,0.4,0.1 c2.9,1.1,13.2,5,26.1,6.5c0.8,0.1,1.6,0.1,2.4,0.1c7.3,0,14.1-4,17.7-10.5c3.6-6.6,3.4-14.3-0.6-20.7 c-41.1-65.3-63.1-128.9-65.5-189.1c-1.4-34.3,4.8-71.2,18.4-109.7c11.8-33.5,28.9-67.5,50.7-101c22.6-34.7,52.3-67.8,88.4-98.4 c13.6-11.6,31.7-26.5,51.5-39.2c0.7-0.5,1.5-1,2.4-1.6c6.9-4.6,21.4-14,30.4-14c2.4,0,3.4,0.7,4,1.3c2.4,2.4,2.8,19.4,2.9,25 c0.3,11.4,0.1,23.4,0,32.2c0,3.8-0.1,7-0.1,9.4c0,43,0.1,86,0.1,129.1l0,3.9c0,44.8,0.1,89.5,0.1,134.3c0,1.7,0,3.4,0.1,5 c0.1,3.7,0.1,7.3-0.2,10.8c-0.2,2-0.1,3.6-0.1,5.1c0,0.6,0,1.2,0,1.8c0,0.7-0.1,2.8,0,5.5c0.2,10.9,0.1,41.5,0.1,80.3l0,0.3 c-0.1,26.5-0.1,56.5-0.1,88c0,15.6,0,31.6,0.1,47.1c0.1,26.9,0.2,54.6,0,79.7c-0.1,14,0,27.2,0,40l0,0.1c0.1,13.7,0.1,26.5,0,37.7 c-0.4,28.7,0,48.3,0.1,49.8C542.8,928.4,539.8,930.3,537,930.3z"/> <g> <g> <g class="st7"> <defs> <filter id="Adobe_OpacityMaskFilter_00000059284723881557797300000016209941506853758648_" filterUnits="userSpaceOnUse" x="560.8" y="188.5" width="100" height="62.8"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="560.8" y="188.5" width="100" height="62.8" id="SVGID_00000111887899947585390310000010981193564241731498_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000059284723881557797300000016209941506853758648_);"> <image style="overflow:visible;" width="105" height="68" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAHzAAAC5AAAA13/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAEQAagMBIgACEQEDEQH/ xAB+AAADAQEBAQAAAAAAAAAAAAAABAUCAwYBAQEAAAAAAAAAAAAAAAAAAAAAEAACAwACAgEEAwAA AAAAAAAAAQIDBBEFEBQGMFAhEhM1NhEAAgAHAQEBAQAAAAAAAAAAADEQAQIDs3QFMCAhZBIBAAAA AAAAAAAAAAAAAAAAUP/aAAwDAQACEQMRAAAA8fPori32k0RdX+x5z76b6ea++kwecx6BMj5YXKnf k8Mujxx7MdRQc+CPF9cnTq0whJvIlZ+e2W3ZTJT3MCnibyKPBDiNTRQRTYXKe+Sha1DyXOcXJX4z gewoDOOIayBQngAAAAAAAAAAf//aAAgBAgABBQD7H//aAAgBAwABBQD7H//aAAgBAQABBQD5B/fe P1kKqbFntYslrPSsFhmejMeOSJZ5IlFrx3657+vN+xXhTIYEQ69EevQsCPQR6SJY0WZUi6hI0R48 dyufkOarkpzorzIhmRHMj10POiVCJ0ouqRpgbFx47f8A0WSP4ogiqCIQQoo4Q0ifBZwXcGk2+O2/ 0WR/iiSK5IjNH8iHaiVyJ3IsuRdajTM2Pnx3D4+RZZ8Kq5IjoSFqQ9aJbES2oltRPWizUmXXpmiX Pju3x8hpu4UdSR7qRLsEiXZIl2aJdkx9g2PdIeyTHokyUufHfvjv1c0PTId1jHOTOX9H5B/ffV// 2gAIAQICBj8AD//aAAgBAwIGPwAP/9oACAEBAQY/AOnt38lUUIQvDpy/rv5KoIQhCEIQvjpbd/JU SEIQhC+Jk4dLbv5KiXlMnDpbd/JUS8pk4dLbv5KiUGMYxjGMcelt38lUGMYxj++nt38lUPwZ+z8u nt38lXt//9k=" transform="matrix(1 0 0 1 557.9922 186)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000111887899947585390310000010981193564241731498_);"> <path class="st6" d="M659.3,188.8c-33.3-1.1-66.2,1.3-97.2,7.5c-0.7,0.1-1.3,0.8-1.2,1.5l0.2,52c0,1,1,1.8,2,1.5 c30.3-9.8,63-12.8,96.1-10.9c0.9,0,1.6-0.7,1.6-1.5v-48.5C660.8,189.5,660.1,188.8,659.3,188.8z"/> </g> </g> <g class="st7"> <defs> <filter id="Adobe_OpacityMaskFilter_00000064332093526668126350000015402164302532484776_" filterUnits="userSpaceOnUse" x="682.5" y="191.9" width="99.9" height="74.8"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="682.5" y="191.9" width="99.9" height="74.8" id="SVGID_00000100342787759033648460000000144297645361862056_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000064332093526668126350000015402164302532484776_);"> <image style="overflow:visible;" width="105" height="80" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAH7AAADBwAAA5z/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAFAAagMBIgACEQEDEQH/ xAB/AAACAwEBAAAAAAAAAAAAAAAEBQADBgECAQEAAAAAAAAAAAAAAAAAAAAAEAACAwACAQIHAQAA AAAAAAAAAQIDBBEFEDUGIDBQIRITNhQRAAECBwEBAQAAAAAAAAAAAAABMRAhAgOzdAUgMGQSAQAA AAAAAAAAAAAAAAAAAFD/2gAMAwEAAhEDEQAAAMeAwgHHNxnvOjrM/HI4uhNRXO8JJBqUMeGl8OB4 w9iml54M6JphTLBahaIPJQo2OX3mgPRnDi1ZeHQb2dHupAVTdUIATwBiPevGZaHppyclabG7IlGn 4htGK7gwuBKFGC9gvJJCSQkkPdo8DoD0sq7w/9oACAECAAEFAPof/9oACAEDAAEFAPof/9oACAEB AAEFAPcHr0YOQqJseewdViHGS+T3y59wZ8/JXlTFiTH16ZLrkT6xFnWtE8VkSVFkRpr4O5XPuHLX yqaUyGdCyoeREsaJ4UWYUW4EXYUW5PxJQcfHbf0WNfaiKK4IjWhVIdKJUIszotzovzo0UpGqHHjt /wCiyS+2eaKpohJEZI5Q0iUUWwRfBGqJtXjuXx7hzXJFGhFWlFelENCI3o/ch2Ismi9mpm7x3747 +vS4le9Ir7BFfYIr3ohuRHYmf6kS0JltqZpnytr58e4PXvClJEb7IkN1kSvsmivskyHYJi2pktPJ dbytUufHuD174k2iN1kSOyaI7OSWjlWz/Lx7g9e+Vyznx//aAAgBAgIGPwAP/9oACAEDAgY/AA// 2gAIAQEBBj8A6e3fyVEoMMTT49JP138lQkhhhhhiSEiaE/HS27+SoSDDDDDDDDEo9Lbv5KhBPTDC yFj0tu/kqEE+Ciiw6W3fyVCDjjj+VFFh01/XfyVQccccccceCiw6e3fyVRkpJSZNRxxx/HT27+Sr 3IkpMcePT27+Sr7f/9k=" transform="matrix(1 0 0 1 679.9922 189)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000100342787759033648460000000144297645361862056_);"> <path class="st6" d="M781.3,208.9c-26.5-7.9-54-13.6-81.6-16.9c-9.1-1.1-17.2,6-17.2,15.2v34c0,0.8,0.6,1.4,1.3,1.5 c33.2,4.3,66.1,12.9,96.5,23.9c1,0.4,2.1-0.4,2.1-1.5v-54.8C782.4,209.7,782,209.1,781.3,208.9z"/> </g> </g> <g> <defs> <filter id="Adobe_OpacityMaskFilter_00000121243580257790024190000011805944303334389400_" filterUnits="userSpaceOnUse" x="796.3" y="224.4" width="50.9" height="48.6"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="796.3" y="224.4" width="50.9" height="48.6" id="SVGID_00000026131965803974446230000005939849165762867616_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000121243580257790024190000011805944303334389400_);"> <image style="overflow:visible;" width="56" height="54" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAG/AAACMAAAAn7/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIADYAOQMBIgACEQEDEQH/ xAB9AAABBQEBAAAAAAAAAAAAAAAEAAEDBQYCBwEBAAAAAAAAAAAAAAAAAAAAABAAAgEDAgYDAAAA AAAAAAAAAAEDEQIEEgUQQCEiFDQxEzURAAAGAwEBAAAAAAAAAAAAAAAQATGyAyBzBCFBEgEAAAAA AAAAAAAAAAAAAABA/9oADAMBAAIRAxEAAADDxTzgj2vZScXIYD6Bgd8Yo0I4Ol4mIArAMp9zh9wY goRi7lquywEhhINzgt6YeBIdJCZIb0BI/9oACAECAAEFAOQ//9oACAEDAAEFAOQ//9oACAEBAAEF ANw9+2N3CxrmeNcXQ3Iaa45qruMMVVZAjx0SY6JsdF9ulmX+ljW9I7DQiSNE9iMhUZl/pYz6Rsqi 9onMr5M503HGk6Ryn2l8pNfUyHVm4e/DLpLMmh5SHlIknqSXambh76qd53ned3H/2gAIAQICBj8A B//aAAgBAwIGPwAH/9oACAEBAQY/AOndZJcfT6d1klJgwYMfTuskoTBT6d1klCYKfTuskoTPp3WS UnDh8OndZJR4X3H/2Q==" transform="matrix(1 0 0 1 793.5039 222)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000026131965803974446230000005939849165762867616_);"> <path class="st6" d="M804.8,272.7h34.5c0,0,7.6-1.1,7.8-7.6c0.1-4.4,0.1-21.4,0-31.9c-6.5-3.1-13.1-6-19.9-8.8 c-6.9,0-18.1,0-22.4,0.2c-6.5,0.3-8.2,7.5-8.2,7.5v16.1l0.1,0.2l-0.4-0.4l3.2,17.9c0,0.6-0.2,0,0-0.6c2.2-8.5,2.4,3.1,2.4,3.1 c1.5,0.6-1.5,4.8,0.2,4.6l2.6-0.3C804.7,272.7,804.8,272.7,804.8,272.7z"/> </g> </g> <g> <defs> <filter id="Adobe_OpacityMaskFilter_00000051376571407638109710000010539368255771870107_" filterUnits="userSpaceOnUse" x="861.4" y="253.7" width="49.4" height="49.1"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="861.4" y="253.7" width="49.4" height="49.1" id="SVGID_00000135678794863634193580000013174613171587976335_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000051376571407638109710000010539368255771870107_);"> <image style="overflow:visible;" width="54" height="54" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAG6AAACKgAAAof/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIADYANwMBIgACEQEDEQH/ xACDAAACAwEBAAAAAAAAAAAAAAAABAIDBQEGAQEAAAAAAAAAAAAAAAAAAAAAEAABAwIEBAcAAAAA AAAAAAABAAIDEQQhEgUGEEAxNSATIzMUJjYRAAEBCQADAAAAAAAAAAAAAAABECAhMQIDs3QFEWFx EgEAAAAAAAAAAAAAAAAAAABA/9oADAMBAAIRAxEAAADx6T8RSGrEyhlc4Aaltd4x2yZnobKJkkwf toga886Y0kLCpEHUgJdA5ACIB//aAAgBAgABBQDkP//aAAgBAwABBQDkP//aAAgBAQABBQDcHfmx kryHJ0bh4NdFdwRRVAgCfb4S2xCLSOGtD7DA3BrMHRKWEKeBFtHaz+ht+jOhCkarhuDx6utGm4bd 2DHrOE94U7sH+9rppuCKYBNuAvkhOuApZgUXVfuDvwzoGZVnRMyOfh//2gAIAQICBj8AB//aAAgB AwIGPwAH/9oACAEBAQY/AOnt38lT/S27+SpsiBFnS27+SoR3wdLbv5KhHFE+odLbv5KhHFKfqHS2 7+SpkyZNiL7Ont38lRAkpJSRFn//2Q==" transform="matrix(1 0 0 1 858.9922 251)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000135678794863634193580000013174613171587976335_);"> <path class="st6" d="M863.9,300C864,300.1,864,300.1,863.9,300c0.5,0.4,3.7,2.8,5.1,2.8h33.8c0.2,0,0.4,0,0.7-0.1 c1.4-0.7,7.2-3.6,7.3-7.5v-22.6c0-0.5-0.2-0.9-0.6-1.2c-6.6-5.1-13.5-9.9-20.7-14.5c-1.5-1-3.1-1.9-4.7-2.9 c-0.2-0.1-0.5-0.2-0.8-0.2h-14.1c-0.1,0-0.2,0-0.3,0c-1.1,0.2-7.4,1.9-8.2,8.7c0,0.1,0,0.1,0,0.2V296l0,1.5 c0,0.5,0.3,1,0.7,1.3L863.9,300z"/> </g> </g> <g> <defs> <filter id="Adobe_OpacityMaskFilter_00000111156176185676497700000008393537364621162369_" filterUnits="userSpaceOnUse" x="876.2" y="313.7" width="115.5" height="127.1"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="876.2" y="313.7" width="115.5" height="127.1" id="SVGID_00000160165144335654394220000017618941440049900479_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000111156176185676497700000008393537364621162369_);"> <image style="overflow:visible;" width="120" height="132" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAJVAAAD6QAABVv/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAIUAeQMBIgACEQEDEQH/ xACLAAEBAQEBAQEAAAAAAAAAAAAABQQDBgECAQEAAAAAAAAAAAAAAAAAAAAAEAABBAEDBAMBAQAA AAAAAAABAAIDBBESNQYQMCEFIBMVMWARAAAEAgoCAgIDAAAAAAAAAAABAgMgkxARIdEzs9M0dAUw MUAEEhNRYRQSAQAAAAAAAAAAAAAAAAAAAGD/2gAMAwEAAhEDEQAAAPLYNE80/rhoH679zF9pdCT+ bHAk/O2I7s40M4oT6E8+98/0rbotUo6OG058qHwgRfXSDzjvwAKE+hPAPu3D9PS1fLWy31yazjOr 5Ty0f1cAwgoT6E8AA+1ZP7PX0/LWivy/H6MMW/KPNc9eQoT6E8AAA7W/Paz1mmJvNE7XiIeLbiKE +hPAAAH34KFbzdMsZvzzJmTVlKE+hPAAAAHfgK33F2M+fryKE+hPAAAAAP12z/o+/gK+AAAAAAAA P//aAAgBAgABBQD/ABH/2gAIAQMAAQUA/wAR/9oACAEBAAEFAPfXrrPefoX0L3sELnsCha9iULHs ivu9kvt9kvt9knWPZBG/7AH9C+v0L6/Qvr9C+v0L65BvwTCFG0FMjBTIAU2sChVCNQKWp4s1iEQQ fhyDfkDhQyKFwKiAKjYCmxAr6FJX8Wa3i3XLT8OQb90Bwa8/mvKCoHAqPBQZlPiyJ4Mi5WyLMJjd 15Bv3UEg1bODWnBUEmVGcjTkSx5FmDIvVsp7S13TkG/fBpINS0qtjKglymuyHDInjyrcORdgwenI N++LXFppWlVsZEMuQHZEgyLLMi7DlTM0OXIN++UchY6lbyq1jIjlyHOyJhkW2q43BXIN++deYxup 2siCfIEmRI7Itfy9/VyDfuxUsFprWMhk2Q5/iy7xe/q5Bv3YBINSwoZ8j7Mid3i6fK5Bv3ZjeWur T5DZciV+RbOSuQb92oJS0xy5D3+LJyVyDfu0Dgwy+C/xMclcg37tsdg6/DznpyDfu5lHp75lI+80 UFooLRQWigtFBaKC0UFooLRQWigtFBaKC0UFooLRQX//2gAIAQICBj8AEf/aAAgBAwIGPwAR/9oA CAEBAQY/AOySn7DqUp+0+SUktRERE4qwrRuXpirxuXpirxuXpirxuXpirxuXpirxuXpirxuXpirx uXpirxuXpirxb9l6Yq8bl6Yq8bl6Yq8bl6Yq8bl6Yq8bl6Yq8dny38xUXoeh6HoVkQqOHs+W/mK8 PoHYDMih7Plv5ioKjBRHYD/iDs+W/mKgrIERgoTsB2AyOns+W/mKhrIERmCtgMGDMqez5b+YqKsg VoK2AwYOjs+W/mKjrIFaCtgOns+W/mK8H9ArYDp7Plv5ivDUYK2k6ez5b+Yrw1kCIzpOns+W/mK8 VYKHs+W/mK8dUPZ8t/MV8Ds+W/mK+B2fLfzFfA7L8nXSV/qf/IiaSZEf7Fej/aQxnpKdYYz0lOsM Z6SnWGM9JTrDGekp1hjPSU6wxnpKdYYz0lOsMZ6SnWGM9JTrDGekp1hjPSU6wxnpKdYYz0lOsMZ6 SnWH/9k=" transform="matrix(1 0 0 1 874 311.4961)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000160165144335654394220000017618941440049900479_);"> <path class="st6" d="M991.7,427.1l-0.3-59.4c0-0.3-0.1-0.5-0.2-0.8c-10.8-18.7-23.1-36.4-37.2-52.7c-0.3-0.3-0.7-0.5-1.2-0.5 h-75.1c-1.5,0-2.1,1.9-0.9,2.8c43.7,32,78.4,74.8,102,123.4c0.4,0.8,1.3,1.1,2.1,0.7c6.2-3.4,9.9-11.2,10.6-12.8 C991.7,427.6,991.7,427.3,991.7,427.1z"/> </g> </g> <g> <defs> <filter id="Adobe_OpacityMaskFilter_00000109023944798941106100000010588502440358144943_" filterUnits="userSpaceOnUse" x="990.1" y="464.1" width="57.1" height="129.8"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="990.1" y="464.1" width="57.1" height="129.8" id="SVGID_00000115487628416674257090000018145401326016578726_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000109023944798941106100000010588502440358144943_);"> <image style="overflow:visible;" width="62" height="134" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAH9AAAC+gAAA8f/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAIYAPwMBIgACEQEDEQH/ xACDAAADAQEBAQAAAAAAAAAAAAADBAUAAgEGAQEAAAAAAAAAAAAAAAAAAAAAEAAABQQDAAIBBQEA AAAAAAABIQIDBAARNAUQMTMSE1BBIiMUJDURAAAGAwEAAwEAAAAAAAAAAAAQAQIDc7KzBCARITFj EgEAAAAAAAAAAAAAAAAAAABQ/9oADAMBAAIRAxEAAAD4cJvQefIS+KaIFhdg3vnBWYXcF5tmaS2A HMA65WpR6wRCgmQy89GXYXGrEKyPLMBInJgmXYXOrEaoVePcSVXFDxdhc1Ce4WehEEEnUzhdhczK xiyVcwqk6oCXYXMQfRVPOMdre8HC+xtsddbHhtj/2gAIAQIAAQUA/Cf/2gAIAQMAAQUA/Cf/2gAI AQEAAQUA2GeCBGgZUNf11ULKgoQtxB9th/0GQAaQ0A19IU4yTyLDUH22GfGE2QvQIJ1spSOIPtsM 9hVlRxuCQJxJSkEoLDB9thnoGyoirg30sClJJ0LLg+2wz6hrpkSHqSkpIWXB9thn1EVYWFF+j4FL TYYPtsM+o6rLjKIOngKYmoPtsM+mxsqIokCToFNAoPvsM+g7hqJsSc6mAULI2GfxDUTQkvqWBQsn YZ/ENVNCShKV1Dythn8RBNkSUJSeoeXsM/iMP7mVEIlI6iZmwz+GRsplZfMnlFEy9hn8IGwtu2D7 6cdAQhj/AKdhn8h86/kofnUK/wB//9oACAECAgY/ABP/2gAIAQMCBj8AE//aAAgBAQEGPwDpukyX 26mfU8dN0mSn+eHUz6njpukyXypOpn1PHTdJkpIahQ6mfU8dN0mShFCGoUOpn1PHTdJkpIak6mfU 8dN0mSl8BCUnUz6njpukyU0NQ6mfU8dN0mSkgQ1Dqp9Tx03SZKaGodVNqeOm6TJTQ1DqptTx03SZ L6UOqm1PHTdJkvpQ6qbU8dN0mS+lC1zanjpukyX2tc2p46bpMl9uX+U2p46bpMl8fRfYdVPqeP/Z" transform="matrix(1 0 0 1 987.5039 462)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000115487628416674257090000018145401326016578726_);"> <path class="st6" d="M1016.4,593.9h29.2c0.9,0,1.6-0.7,1.6-1.6c0-15.1-0.6-30.2-2-45.2c-2.4-27.4-7.1-55-14.3-81.9 c-0.2-0.7-0.8-1.2-1.5-1.2l-37.8,0.4c-1.1,0-1.8,1.1-1.4,2.1c9.4,24.3,16.2,49.8,20.2,75.8c2.5,16.6,4,33.3,4.5,50 C1014.9,593.2,1015.6,593.9,1016.4,593.9z"/> </g> </g> <g> <defs> <filter id="Adobe_OpacityMaskFilter_00000168098503689956249990000018172835099830269842_" filterUnits="userSpaceOnUse" x="1002.8" y="612.8" width="43.8" height="99.7"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="1002.8" y="612.8" width="43.8" height="99.7" id="SVGID_00000074434789084661378130000004961994716116359085_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000168098503689956249990000018172835099830269842_);"> <image style="overflow:visible;" width="49" height="105" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAHtAAACigAAAxn/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAGoAMgMBIgACEQEDEQH/ xACIAAACAgMBAAAAAAAAAAAAAAAAAwQFAQIGBwEBAAAAAAAAAAAAAAAAAAAAABAAAQIGAgEFAQAA AAAAAAAAAQIDABEhBDQFEDEiIEAyEzVBEQABAgYBAQkBAAAAAAAAAAAAAQMgsnMEhUYQM/AxUQIy QmKDNDYSAQAAAAAAAAAAAAAAAAAAAED/2gAMAwEAAhEDEQAAAOHjyI5ts2SQNZ8MvACnQ9BNloli K6yrS7AKdLlFlKjyCPV2VYXwBTrZqWTlMIldOgHQAFPnG5PzrqQorknQAFO1eSarVRH0zg6AAp1e grOD174PPz0AOfOwD//aAAgBAgABBQD3n//aAAgBAwABBQD3n//aAAgBAQABBQDYZ8BBMfUYLREE S42GfDKJgN0W3DokY2GeO7dNAmjoo/8AKNhnp7txQCj3T/yjYZ6Plbig6fNHj5RsM9oeTAp/Lg0W ZqjYZ7ImpkUPVyaK7jYZ9uPJrpRpdKoeNhn2wq30s0uVc7DPthCTRxVLhUzxf/oMUAVR1VHTNXF/ +g0qQ+yHXKEzPGwzwuUfaYK5+i4yPV//2gAIAQICBj8AZ//aAAgBAwIGPwBn/9oACAEBAQY/ALms 5MsWJLms5MsWJLms5MvCQYkuazkyiCQYkuazkyiCQYkuazkyicqKYkuazkywLxiS5rOTLAvGJLms 5MsWJLms5MsWJLms5MsWJLms5MsWJLms5MsWJHf5X1+bqdTv9/y8TUzUzUzUzUzXvydvoP/Z" transform="matrix(1 0 0 1 1000.5039 610.0078)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000074434789084661378130000004961994716116359085_);"> <path class="st6" d="M1032.4,711.3c8-31.6,12.7-64.2,14.2-96.9c0-0.9-0.7-1.6-1.6-1.6h-28.6c-0.8,0-1.5,0.7-1.5,1.5 c-0.7,32.3-5,64.5-12.1,96.3c-0.2,1,0.5,1.9,1.5,1.9h26.5C1031.6,712.4,1032.2,712,1032.4,711.3z"/> </g> </g> <g> <g> <defs> <filter id="Adobe_OpacityMaskFilter_00000136374434702153385880000009893170461970538140_" filterUnits="userSpaceOnUse" x="976.4" y="733.3" width="49" height="66.5"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="976.4" y="733.3" width="49" height="66.5" id="SVGID_00000050661618141343823840000017423577217867819947_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000136374434702153385880000009893170461970538140_);"> <image style="overflow:visible;" width="54" height="71" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAGuAAACEQAAAn3/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAEcANwMBIgACEQEDEQH/ xAB3AAEAAwEBAAAAAAAAAAAAAAAAAgMEAQYBAQAAAAAAAAAAAAAAAAAAAAAQAAECBgIDAQAAAAAA AAAAAAEAAhEhMwQ0BRADIEAxEhEAAAYDAAAAAAAAAAAAAAAAACABAgNzsrMEEgEAAAAAAAAAAAAA AAAAAABA/9oADAMBAAIRAxEAAADw+fRnHeaCnmqkmBn0ZyWqjScy3Zy8DPooL5wiQgGgCq2onV2I BoAoDgANAP/aAAgBAgABBQD1P//aAAgBAwABBQD1P//aAAgBAQABBQDYZ/AbFfgotgrGvsM9D71s RYE+Ssa+wz0wRLBJ5gOwzsa2wz11BCQ7XImJsa2wzwusJzoDsdEqxrbDPaJtkHvR4sa2wz2BF0A4 x5sa2wzwUT4WNbYZ8/Gxrf/aAAgBAgIGPwAn/9oACAEDAgY/ACf/2gAIAQEBBj8A6bpMlM6mfU8d N0mSmdVPqeOm6TJTOpn1PHTdJkpnUz6njpukyUzqZ9Tx03SZKZ1M+p46bpMlM6mfU8dN0mSmdTPq eOm6TJTOpn1PH//Z" transform="matrix(1 0 0 1 973.5039 731)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000050661618141343823840000017423577217867819947_);"> <path class="st6" d="M980.6,799.8h8.9c0.5,0,1-0.2,1.3-0.7c13.4-19.3,25.7-39.3,34.6-63.4c0.3-1-0.3-2-1.3-2.1l-3.3-0.3 c0,0-0.1,0-0.1,0h-21.8c-0.7,0-1.3,0.5-1.5,1.1c-5.7,21.2-12.7,42.1-20.7,62.6c-0.3,0.8,0.1,1.7,0.9,2c1.5,0.5,2.7,0.7,3,0.7 C980.5,799.8,980.5,799.8,980.6,799.8z"/> </g> </g> <g> <defs> <filter id="Adobe_OpacityMaskFilter_00000077311444200690725790000002802336692321687980_" filterUnits="userSpaceOnUse" x="941.1" y="819.7" width="33.5" height="53.7"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="941.1" y="819.7" width="33.5" height="53.7" id="SVGID_00000170993791014908201680000017646502418078735035_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000077311444200690725790000002802336692321687980_);"> <image style="overflow:visible;" width="39" height="59" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAGEAAABqgAAAgn/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIADsAKAMBIgACEQEDEQH/ xABnAAEBAQAAAAAAAAAAAAAAAAAABAYBAQAAAAAAAAAAAAAAAAAAAAAQAQEBAQAAAAAAAAAAAAAA ADQFEDARAAEFAQAAAAAAAAAAAAAAAAEAsgNzBCASAQAAAAAAAAAAAAAAAAAAADD/2gAMAwEAAhED EQAAAMPPROAUAT0TgFAE9E4BQBPROAUA/9oACAECAAEFAOn/2gAIAQMAAQUA6f/aAAgBAQABBQCg /Z76D9nvoP2e+g/Z76D9nvoP2e+g/Z76D9nv/9oACAECAgY/AE//2gAIAQMCBj8AT//aAAgBAQEG PwDTdI48Zro3BabpHHjNdG4LTdI48Zro3BabpHHjNdG4LTdI48Zro3BabpHHjNdG4LTdI48Zro3B abpHHjNdG4L/2Q==" transform="matrix(1 0 0 1 938.5039 817)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000170993791014908201680000017646502418078735035_);"> <path class="st6" d="M968.2,819.7c-0.6,0-1.2,0.4-1.4,0.9c-7.8,18-16.4,35.6-25.7,52.8c10.1-18.8,21.7-35.2,33.2-51.3 c0.7-1,0-2.4-1.3-2.4H968.2z"/> </g> </g> </g> </g> <g> <g class="st7"> <defs> <filter id="Adobe_OpacityMaskFilter_00000038397337334838155660000003799733249830272662_" filterUnits="userSpaceOnUse" x="658.8" y="527.2" width="39.9" height="76.1"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="658.8" y="527.2" width="39.9" height="76.1" id="SVGID_00000034796274773166468690000004171131084784747697_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000038397337334838155660000003799733249830272662_);"> <image style="overflow:visible;" width="45" height="81" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAGvAAACCQAAAlv/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAFEALgMBIgACEQEDEQH/ xAB2AAEAAwEBAQAAAAAAAAAAAAAAAgQFAwEGAQEAAAAAAAAAAAAAAAAAAAAAEAABAgYCAgMAAAAA AAAAAAABEQIAIQMFNQYQIEA2MRITEQABBQAAAAAAAAAAAAAAAAAgAgOzdAUSAQAAAAAAAAAAAAAA AAAAAED/2gAMAwEAAhEDEQAAAPj8/QzwADRoX6Zye+AGlXscytyu1CINOEoHSrb5FBKJoVrNAvRq j3nKJoZ4AAf/2gAIAQIAAQUA8L//2gAIAQMAAQUA8L//2gAIAQEAAQUA2DPddgz3W/58jrfs/wDW Tgh5vufDZVGJ0vnsDBKoxQ9qHi+ewU/hzZVmc30psFJ0llVCh4QxsGfpVEgVIc4RUnxsGeBSBUIj 9DBcvGwZ7r//2gAIAQICBj8AF//aAAgBAwIGPwAX/9oACAEBAQY/ANO2/IotO2/IotO2/IotO2/I otO2/IotO2/IotO2/IotK2/IotO2/IotO2/IotO2/Iov/9k=" transform="matrix(1 0 0 1 656 525)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000034796274773166468690000004171131084784747697_);"> <path class="st6" d="M658.8,584.1c1.1,13.7,13.2,18.4,15.1,19.1c0.2,0.1,0.3,0.1,0.5,0.1h22.7c1.1,0,1.8-1.1,1.5-2.1 c-5.4-14.3-12.2-28.2-20.8-40.7c-0.1-0.1-0.1-0.2-0.2-0.4c-3.3-10.4-8.8-21.3-16-32.3c-0.8-1.3-2.8-0.7-2.8,0.9V584 C658.8,584,658.8,584.1,658.8,584.1z"/> </g> </g> <g class="st7"> <defs> <filter id="Adobe_OpacityMaskFilter_00000093881456859517048480000016916770869520415147_" filterUnits="userSpaceOnUse" x="589.3" y="628.1" width="100.4" height="129.5"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="589.3" y="628.1" width="100.4" height="129.5" id="SVGID_00000165913446096862846610000001050877689692941446_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000093881456859517048480000016916770869520415147_);"> <image style="overflow:visible;" width="106" height="134" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAIbAAADHQAAA9L/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAIYAawMBIgACEQEDEQH/ xACCAAEBAAMBAQAAAAAAAAAAAAAABAEDBQIGAQEAAAAAAAAAAAAAAAAAAAAAEAAAAwgCAgMBAQAA AAAAAAABAgMAESExBDREBSAwEBJQIjITFBEAAQIHAQEBAQAAAAAAAAAAAQCyEDADcwSExBEgMSES AQAAAAAAAAAAAAAAAAAAAFD/2gAMAwEAAhEDEQAAAPh56JwBnGTOfW80Zt2nM8dac5/QitJ56JwA Bu0jp2cjplGinwcfdjJPPROAAAZ6PNpO01bDmgnnonAAAG3V7OxumoOexknnonAAAHrz7OrRo3nO zjJPPROAAANuqk6W7z7OaCeeicAAAXxdItzjyQPPonnonAABk23w7i/XNqPNEF5POAAAGchgGOgH /9oACAECAAEFAPn/AP/aAAgBAwABBQD5/wD/2gAIAQEAAQUA2F/5czm9WBMRYETC3+czCgYGMQS+ MLYX/ABYogxAAWIQBYEgYUQcqhBQnqOFsL/iAuZJRwonAWTcLerKkhUkc2FsL/mgq4UDvAJKBCrC GFsL/mAuGlUeCZngpKslhbC/6KU7hRNA4wrJYWwv+hAXHQGBpVksLYX/AEJfunGBpVksLYX/AEJ/ unkaVXLC2F/0JA86AQNKslhbC/6KcHnQCBpVksLYX/RSFikEDyrJYWwv+ikLBMIHlWSwthf80wea nK4CjBQ0KsYYWwv+aJYpC5gUZRSFQd7YWwv+QMmYAYqwA39wZRd7GM8cLYX/AD+zfZvswv8AGF// 2gAIAQICBj8Af//aAAgBAwIGPwB//9oACAEBAQY/AMm9UcZup1rJvVHGV+R1OtZN6o4/f9+tTrWT eqOMjw/BWp1rJvVHGR6hErU61k3qjjJ8iVqdayb1RxlCBWp1rJvVHGSEIFanWsm9UcZIQgVqdayb 1RxkhCBWp1rJvVHGUIFanWsm9UcZPsStTrWTeqOMkRK1OtZN6o4yRErU61k3qjjN1OtZN6o4yv2O p1rJvVHGbqda/9k=" transform="matrix(1 0 0 1 586.5117 626)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000165913446096862846610000001050877689692941446_);"> <path class="st6" d="M650.6,742.4c-2.5,4.3-5.3,8.6-8.4,12.7c-0.8,1,0,2.5,1.3,2.5l33.3-1.1c5.9,1.3,11.8-11.8,12.7-13.9 c0.1-0.2,0.1-0.4,0.1-0.6v-97.4c0-7.9-12.1-15.1-14.3-16.3c-0.2-0.1-0.5-0.2-0.8-0.2h-83.7c-1.9,0-2.1,2.7-0.3,3.1 c36.1,7,72.3,10,72.3,60.4c0,0,0,0,0,0C662.9,709.3,658.1,729.2,650.6,742.4z"/> </g> </g> <g class="st7"> <defs> <filter id="Adobe_OpacityMaskFilter_00000023989946358830091410000012366205039661241778_" filterUnits="userSpaceOnUse" x="406.7" y="198.4" width="230.7" height="418.6"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="406.7" y="198.4" width="230.7" height="418.6" id="SVGID_00000182510339957073228270000003889058933731999667_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000023989946358830091410000012366205039661241778_);"> <image style="overflow:visible;" width="235" height="423" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAVbAAAL5AAAD6T/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAacA7AMBIgACEQEDEQH/ xACPAAEAAgMBAQAAAAAAAAAAAAAABAUBAwYCBwEBAAAAAAAAAAAAAAAAAAAAABAAAQQCAQQCAgIC AwAAAAAAAQACAwQRBSEwMTRFQBIQIDIUgBUTIzURAAIBAAkEAgIDAAAAAAAAAAABIUARMbIDc8ME hBAgMAKhMlFCQSJjEgEAAAAAAAAAAAAAAAAAAACA/9oADAMBAAIRAxEAAADh48iOAAAAAD0eUjeQ VjoIjOAAAABYV9gR48iOAAAD2eNk61Kifcyin93OspK6/pyk8+vIAAAAsK+wI8eRHAADNiR7iZcE KxmyyFtmYIUafCKuivKIo/HvwAAAALCvsCPHkRwBlZnq/wA3R4stks1bffg86EEzXeao9Uua01eQ AAAAWFfYEePIjg3EjpI3RG208zTPtqETzVG2qi0ZNqI3gzgAAAAAFhX2BHjyI5m6reoLC8i2pt3Y 8GIOacUPjnzbCAAAAAAABYV9gR48jWW3U0/Sk+fo3mYmyrNHOSOYPEcAAAAAAAAFhX2BH26rA6Ho Km7JmcaSPRT+ZKyq9+AAAAAAAAABYV9gaLqovy/t62zN0ORXlXyV9yhpAAAAAAAAAAsK+wMdFQdG XthBnHmrsac57nLqkAAAAAAAAAAFhX2Bs6PnOlLyZElmmluaQ5Srsq0AAAAAAAAAAWFfYGzpeZ6U v5kSaRqS/pjjKu6pQAAAAAAAAABYV9gOl5fozp7GttTVVXsA4jme65AhAAAAAAAAAAWFfYGq/wCe uDsrqgviTHm4Oa5bv6M+bauq58igAAAAAAAAWFfYEefA2nddHyXTlx71bTTAtdZzFL20A+f1n0OA cFr7OGcuvIpWpOk8AAAAAWFfYEfx70HYdVwvXnTSYE49YyPOrfggxrbyUUfodZzMXq9Bx9d3EE+d Re7rjlMXtWRgAALCvsCPHkRyx7LgeuO2s6O5N7GQADDI8+dgjR7DBSwuijnJ03cVZ88hdnz5WPXk AWFfYEePIjjpeavDur7mOhLHPn0AAAAAYx6EeFaazm6Xs604Cm+g0JyyXEFhX2BHjyI4sq2Qd10v GdQX+yLKMgAAAAAYyPEaZ5KWo6quOH576Bz5yVhr2EePIjjOB0XV/P8ArDs7CgtyXnGQAAAAAADE aV4KSh6qhOLiWdaRY8iOAZvqCQfQL7h+kOn3Vk82sZAAAAAAGM4IlFf0ZxlVb1BFjyI4ABYdPxNs fQLfjL46LZXzTYxkAAAAAYzgj0d7RnGVFxTkWPIjgAD15Fz0fC259AtuMvDo9lbNNzGQAAABjODR R3lEcdT3FORY8iOAAAPXkXHRcNZH0K14i7Oq3Us4m51+zIAAGM4I1HdURyNRa1RFjyI4AAAABLve X2Hf2/z68O2l8tZF77q95NRcklHwSdcfQKOdSnP1syERo8iOAAAAAAZlRB0dzwtmdvJ47cdf65DJ 12OSHV6OZ8F7VQIJjzCmkeOAAAAAAADIe8AAABjyCwD/2gAIAQIAAQUA/wAlf//aAAgBAwABBQD/ ACV//9oACAEBAAEFANh5/XwV9T1PQ7Dz+o1jnJlR7kyiv6uBLF9Q7v0vQ7Dz+lHA95h1xKh1wCZR wv6mFLBgWo8B/wDLpeh2Hn9BkT3mtriVX1wChoAJlMBf1QE+ABWIsC63Ak/n0vQ7Dz/2AJVem6Q1 NcFXoAKGmAmVQEIMJ0WFKwBWW8XhxL/Ppeh2Hn/q1pcadAuNShhV6eFDVATIAEIgE5oCkwpyFacr zlL/AD6Xodh5/wCjGlxpUcmnSwq1TChrgJkQC+oCdgKR4CmlCsThWpwrcoKecu6Xodh5/wCQCTRp ZNKnhVquFDAAmR4WAE9wCllAU9gBWLYCs3QrN0KWwXnp+h2Hn/mjVLzRqYVWthQQ4TGYXZSSAKac BWLYCtXgFb2ICsXnPLnOcep6HYef+K0Jkfr6mBTrYFeHAjZhdlJJhT2AFauAK5fAVvYkmSV8h63o dh56AJOtqqjWwK0OBGzC7KSTCsWMK3cAV3YYVq66Qkknr+h2HnqlD9366vxUhwIWYA4Ej8CxPgXL eFfv4Vm0+V3wfQ7DzwMnWV1QhwK0eAwYTnYE82BctYGwvYFmy6V3wvQ7Dz67PvJrYeKceBC3AzgT SYFuxgbC5gXbRlf8P0Ow8/XR/Z+vi4qswIxgPdgWZcC/ZwNlbJJ5+J6HYefq4lQZxXbgDgTPwLs2 Bs7WBLIZH/E9DeGdjrI+KTeIRwTgWH4GwmwNnOS74vobIzs9azim3iPs93Fp+BspsC0/7y/F9DKM 7TXN4qjhnaR3Fx/G0l4ccu+L6FwztNeOKw4b2mPF53G1k4+N6H2evHFbsO054vnjau5+N6Ef+nr+ 1bsO0/a/22v8vjehH/p6/tW7AcTji+ONq3n43oScbPXHit2aOJm8X2cbaM/H9C842utPFTswcSsy LsWRtYMh7fq/4voZzjaax3FM8RDIezItQ5GyrZGxrmOT4vobZxs9W/ii7iDkfTInhyL1XI2lDIng dC74nob/ABsNTJxr38VjwxuRJHkWa+Reo/ZbDVhys0ZIiQR8P0Ow8/Uyc65/FR3EfYjKkiyrFYFW qAKt6sFWdOFNrJGJ1aVqLXD4Hodh5+uk+smsl4pP4hPH4fGCpawKnpAqfXAqbVgqXUhS6gKTTqTV OCfRlanRSN6nodh59d/1l1U3FGTiu7I/JaCnwgp9YFSUwVJRBUmvCk1wUmtCm1gVnW8XKckbv+N4 RBHR9DsPPBwdRPxrpciq/Iacj9C0FGMFOgBTqwTqoT6YUtIKegCrOqDlLqQFY1uBYqPjP7+h2Hnr VzfV+smyKb8iM5H74CLQUYgU+AFSVgVLTBU1EKxQCua9XKbo3ft6HYeeq8n0l1M+RRkyIXZHTLQU +EFSVwVPUBVqllXddlXNcWl7HMP6eh2Hnod9NIca+Tiu7gduoWgqSEFT1gVapAq5rwVd1qnrviP5 9DsPP/GokWuk4qv4YcjqkZT4wVNXBVmoCrdHKva7KtU3Rn8eh2Hn/jVyYdrZeKcnETsjruYCpYAV Yq5VullXqCuU3McQQvQ7Dz/xTk+kusn4oy8QPyB265aCpYgVZr5VyoFephXK30Podh5/4afq7V2V Qn4qy5Ebsj4BGVNFkWoFegC2UeF6LYef+dfOWP11rIpz5EEmQDkfAe3Iss4vx8bZuB6PYef+WuLX ay4qFrIqz5EUmQPgHtYbxsG8bgcek2Hn/pVnMT9dcyqVrIrz5EcmR8CwONgONx29JsPP/WhbLHUL mRUtZVefKjfn4E/bYdtz29JsPP8A1aS06+8QqN3KqWsqCfKY/PXn7bDtue3pNh5/7MeWOoX1Su5V S3lQTgpkgI6s/bYdtz29JsPP/dj3MdQvqleyqtvKgsAqOQFA56k/bYdtz29JsPP6DHuY6jsMGlfy qtwFQWQVHMCg4Hp2DxsDxuO3pNh5/Ra4tNLYFppbAFVbwKgtgqKwCmSArOege1h3GwdxuDx6TYef 0gcKtdfGaeyyqmwBVe6CobQKjnBTZAV9gs/pkJ8gxYk4vycbZ2R6PYef1Ipnxmns8KpssqtfBUNw FR2gm2QhYC/sBf2AjYCdYCksBWLAxdnyNm/I9HsPP6oJBr3nxmptMqtsMqK+Ey+EL4X98L++Eb4T r4Ul4Ke6FbtZV6bK9DsPP67JHMNW+QmbLAG1CG3C/wBuF/twv9uEdsE7aAqTZAqe9lSSF59DsPP+ A37ZJlWZVmZZmWZlmZZlWZV/2I5/Hof/2gAIAQICBj8ASv8A/9oACAEDAgY/AEr/AP/aAAgBAQEG PwDc52JedN5embnOxLz8sIklFnl5embnOxLz8cIraLCwsLBj8fL0zc52JefhqSE2hQWFhYWDGPx8 vTNznYl598CbUCgUFhYWdWMfj5embnOxLz7qkJtCgUFhZ2sY/Hy9M3OdiXn21ITaFAoLO5yORj8f L0zc52JefZUhNqRQKO60cjkc+Xl6Zuc7EvPsXs0KBQLstHI5HI0itvy8vTNznYl59V+BQKBdjkcj kaTK2/Py9M3OdiXn0qQoFAuxyORyNerK3QOXpm5zsS8+iYoF2McjkcxQuXpm5zsS8yoUCF1Y5HI5 ih8vTNznYl5iQhdjkcjScUTl6Zuc7EvMrELqxyP1TovL0zc52JeYhC6scj9nReXpm5X+2JeYhC6M Y/Wu2jcvTNxnYl5iF1Yx0bl6Zuc7EvMQurGN0bl6Zuc7EvMQurHR+Xpm5zsS8xC6sdH5embnOxLz ELq6Ry9M3OdiXmIXVjo/L0zc52JeYhdWOj8vTNznYl5iF1Z7QNfijcvTNxnYl5iF1Y4H7VUbl6Zu H/tiXmIQurgcDTUUXl6ZuX/tiXmeohdXA4HA6lWiaHy9M3OdiXmJCF2OBwOB/wBSCfUlUDl6Zuc7 EvMqELtsLCwsPqfU+pHSV5OXpm5zsS8xMQhd1hYWFhYWFg4K161o+rJXh5embnOxLzKz1ELw2FhY WDgf9T6jghR4OXpm5zsS8+lQheSwsLCwcDgbS7+Xpm5zsS8+iZ6i89g4HA4G/VVFXsqu3l6Zuc7E vPr6iFQLBwOBwWR2cvTNznYl59UIVBsHA4HA2lHXl6Zuc7EvPqkIVDcDgcDaRUzl6Zuc7EvPqhCF Q3A4HA2jl6Zuc7EvPqn+BSKRURjgZzNM3OdiXn2JMUimiMZ7HM0zc52JefYmhSKRTQ2M9jmaZuc7 EvPtX4FIpFNCYz2OZpm5zsS8+5erYpFIpoLGexzNM3OdiXn3VoSbFIpFNBZ7HM0zc52JeffWhJsU iktoDPY5mmbnOxLz8FaEmxSKRT5mM9jmaZuc7EvPw1oSbkUikU+VjPY5mmbnOxLz8VaEmxSKRSW+ NjPY5mmbnOxLz8cCTcCkUikt8TGexzNM3OdiXn5a04EmxSKS0tLS0tLS0tLRyMZzNM3OdiXn5q0K twKRSWlpaWlpaWlpaORnL0zc52JedArTFWy0+x9j7H2PsfY+xaW9OXpm5zsS86DBYz9vk/b5P2+T 9vk/b5P2+T+T+SenL0z/2Q==" transform="matrix(1 0 0 1 404.5039 196)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000182510339957073228270000003889058933731999667_);"> <path class="st6" d="M427.8,470.1c0.1,0.2,0.1,0.4,0.1,0.6c-1,35.6,31.3,83.9,83.7,119.7c8.3,5.6,16.6,10.7,25,15.2 c0.2,0.1,0.3,0.2,0.5,0.4c1.5,1.9,3.2,3.7,5.1,5.4c2.3,2,4.6,3.8,7.1,5.4c1,0.7,2.4-0.1,2.4-1.3l0,0c0-0.9,0.7-1.5,1.5-1.5 h63.2c22.1,0,21-21.1,21-21.1v-93.4c0-0.4-0.2-0.8-0.4-1.1c-11.4-11.7-24.7-22.9-39.6-33.2c-3.4-2.3-6.7-4.5-10.1-6.6 c-0.2-0.1-0.3-0.2-0.4-0.4c-2-2.8-4.3-5.5-6.9-7.8c-3.4-3-7.1-5.5-11-7.7c-0.2-0.1-0.5-0.2-0.8-0.2h-14.8 c-0.9,0-1.5-0.7-1.5-1.5v-4.2c0-0.7-0.4-1.3-1.1-1.5c-41.3-12.3-92.3-5.2-92.4-65.1c0,0,0,0,0,0c0-17.7,4.8-37.6,12.3-50.8 c8.7-15.3,21.5-29.2,38.1-41.2c13.3-9.6,27.5-17.2,42.5-23c0.6-0.2-0.5-0.8-0.5-1.4v-53.6c0-1,0.6-1.7-0.4-1.5 c-0.7,0.2-1.3,0.3-2,0.5c-37,8.8-73.5,24.4-99.6,52.1c-46.7,49.5-50.2,127.3-30.4,192.4C420.9,452.3,424.1,461.3,427.8,470.1z "/> </g> </g> <g> <g class="st7"> <defs> <filter id="Adobe_OpacityMaskFilter_00000025400500333508869750000007520914604865732992_" filterUnits="userSpaceOnUse" x="74.4" y="188.3" width="477.6" height="684.9"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="74.4" y="188.3" width="477.6" height="684.9" id="SVGID_00000134966527490344533160000001775629250837440420_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000025400500333508869750000007520914604865732992_);"> <image style="overflow:visible;" width="483" height="690" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAikAAAQ6gAAFZz/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIArIB5AMBIgACEQEDEQH/ xACQAAEAAgMBAAAAAAAAAAAAAAAABAUCAwYBAQEAAAAAAAAAAAAAAAAAAAAAEAABBAEEAQEIAgMB AAAAAAABAAIDBBFQIQVFNDEQIDBAEjIUNUEVoCITJREAAgAEBgMBAQACAwAAAAAAAAEhMbIDEFBz wwSEIEARMAJBIlFhMhIBAAAAAAAAAAAAAAAAAAAAoP/aAAwDAQACEQMRAAAA4ePIjgAAAAAAAAAA AAAAAAAAAAAAAAAAAAFgCPHkRwAAAAAAAAAAAAAAAAAAAAAAAAAAAACwBHjyI4AAAAAAAAAAAAAA AAAAAAAAAAAAAABYAjx5EcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAR48iOAAD0PcQAAAAAAAAAAA AAAAAAAAAAAAACwBHjyI4AAz82GvH3wAAAAAAAAAAAAAAAAAAAAAAAAAsAR48iOAPfNx75u0GoAA AAAAAAAAAAAAAAAAAAAAAAAFgCPHkRwDKXqkmuJKiHgAAAAAAAAAAAAAAAAAAAAAAAAALAEePIjj LHcSdnvhEj7dQAAAAAAAAAAAAAAAAAAAAAAAAABYAjx5EcTYlibdEiIQ8ffAAAAAAAAAAAAAAAAA AAAAAAAAACwBHjyI5usYc88gTq40AAAAAAAAAAAAAAAAAAAAAAAAAAAsAR9G/STpmiQaK2wrTEAA AAAAAAAAAAAAAAAAAAAAAAAAFgCPhmLDbjkQ6+bBAAAAAAAAAAAAAAAAAAAAAAAAAAALAEfPDcT/ ADLErokiOAAAAAAAAAAAAAAAAAAAAAAAAAAAWANEiPMJerfpKrRu0gAAAAAAAAAAAAAAAAAAAAAA AAAAFgDTOhTyVHkxyn1bdQAAAAAAAAAAAAAAAAAAAAAAAAAABYA1z4FgSo8mMU2rbqAAAAAAAAAA AAAAAAAAAAAAAAAAALAGFhAsCTGlRSm1bdQAAAAAAAAAAAAAAAAAAAAAAAAAABYAwsa2wJkaTGKX Vu0gAAAAAAAAAAAAAAAAAAAAAAAAAAFgDXYV1gTY8jQUuiTGAAAAAAAAAAAAAAAAAAAAAAAAAAAL AGmfXzix1bcCmh2FeAAAAAAAAAAAAAAAAAAAAAAAAAAAWANEyFKLZ5mVVXc05iAAAAAAAAAAAAAA AAAAAAAAAAAACwBH3aci73R5JBpr6mIoAAAAAAAAAAAAAAAAAAAAAAAAAALAEfHLUXs2usDVU3Va UzLEAAAAAAAAAAAAAAAAAAAAAAAAAAsAR9G+OW9pSXJug2EY57RPgAAAAAAAAAAAAAAAAAAAAAAA AAAFgCPHkRyVd89dllhlkU9P0NIRwAAAAAAAAAAAAAAAAAAAAAAAAAWAI8eRHPbaonF/IhzCLT39 aUHm7SAAAAAAAAAAAAAAAAAAAAAAAAAWAI8eRHG7T6dDZUlwb4c/Uc3W9DSGkAAAAAAAAAAAAAAA AAAAAAAAAFgCPHkRwCde8zelzlqklbSdNVHN+SI4AAAAAAAAAAAAAAAAAAAAAAABYAjx5EcAWtVI Oqn0tubIVjpOZp+roCCAAAAAAAAAAAAAAAAAAAAAAACwBHjyI4A98Fze8n0BeZaJRBpukrzjtF5T GAAAAAAAAAAAAAAAAAAAAAAALAEePIjgAHtxTSDr7Hn7kmaJHpRUPYVJyXk+AAAAAAAAAAAAAAAA AAAAAAAWAI8eRHAAHvgtOg4++Onk1diewrLWcxQ9rTHLpUUAAAAAAAAAAAAAAAAAAAAAsAR48iOA AAJkP06u54/oC/2Q5por7nQcnQ9zTHKpkMAAAAAAAAAAAAAAAAAAAAsAR48iOAAAAZ3dDuO2teTv S79jyiLX3eg5Oi7qoOM8t6swAAAAAAAAAAAAAAAAAABYAjx5EcAAAAAldBys07my5S6LvKJLNMK2 1HM0nbVpwUfraQrWWIAAAAAAAAAAAAAAAABYAjx5EcAAAAAAm9ByUw7qz4+6Oi2Vs0zizfCkq+ph nE1Pd1Zx3l3WkZ74AAAAAAAAAAAAAAAWAI8eRHAAAAAAAJF5ze07q04i6OrkUU8n4Y7SHDt9Zzlb 1kU4mu7qvOMx6OtK5s1gAAAAAAAAAAAAFgCPHkRwAAAAAAAD2fXjqrfhLY7eZylkdBnVyiVr92ES NaYFFB6aOcjW9tEOGjdrAOWXUIhNus8AAAAAAAAABYAjx5EcAAAAAAAAAe+CZa89kdpY8NaHZyuW sDoM6mSTvNO0w0yxWxrnA5+J02k5OH2Mc4qL28Y4vX18Y5df6CnWWsgpfhFSRGSRGS8yCscysWMY 3gjx5EcAAAAAAAAAAAZYibZUHp2E/h5x28rj7A6jbz8ouva3cTfNGwYbfSLqneFZpt8Cl03usosL 3woMeg8OfdB4c+v/AAovbrEptdzHKSq6CjNQI0eRHAAAAAAAAAAAAAAM5MMXU7l8zspfEyjtpHHS zrNnMyDosqLcXCszLDGF6S0USvY2RvaRsx16zZhq1mcX2KRqK2pjAEaPIjgAAAAAAAAAAAAAAAAH uesSt9cLqRzvp1O7kszrs+RzOu95PI6zZyG061yo6fVzek6bXzeB0Uei1lrXaMSeCPHAAAAAAAAA AAAAAAAAAAAAAAAAAAAACwB//9oACAECAAEFAP8AFU//2gAIAQMAAQUA/wAVT//aAAgBAQABBQDk PP1voeQ8/W+h5Dz9b6HkPP1voeQ8/W+h5Dz9b6HkPP1voeQ8/W+h5Dz/AHwEdT6HkPP94D2HU+h5 Dz/eATtU6HkPP91rcojAdqnQ8h5/uAZLW7P2R1ToeQ8/3I2LGBKdV6HkPP8AaxuSxmA/YPOTqnQ8 h5/thYgMCY4B9dU6HkPP9jBkxMwCMCc6t0PIef7IG5LG4EmwmOTqvQ8h56HrXZsBgTHZ5y7Veh5D z1GMuhbsfSw7Y+uq9DyHnqu3Jjbs/wBLLtX6HkPPVZqYNpDtYO+rdDyHnj1rN2A2mO0xy7Vuh5Dz 4xl0Ddv4sHZ5y7Vuh5Dz4Bl0I2d6WTsfXVuh5Dz6w3iGz/S0dtX6HkPPqhRjaT0tHWOh5Dz6o2YN pfS0d9X6G/8AsKo2aNpvSyf9tX6G9+xrDYDaf0sffq/Q3P2VYbAbT+k/36v0NsZ5KsNgNrHpP9+r 9Da/ZVvQelj0sffq/Q2v2Vb0/ix6WPv1fobAzyVcbfxY9LH36v0M/wCyr+n8WPSx9+r9DYP/AKVc 7fxY9LH36v0Nn9lW9B6WPSyP99X6G1+yreg9LHpaH++r9DaOOSrHYek42tj/AG1fobn7Kqdm+kw2 uDWOhvfsah2Z6Sja43bV+hv/ALCmdo/SQbXG7H11boeQ/YUztEdnja23aQYdq3Q8h59JyhOxG1lu 1huH6t0PIefUdvXO38Tt2uNwdW6HkPPrHD6x2b6TN2uM1foeQ8+I4fVdsz0kbkW2bPGHar0PIee0 4NN20R2cMiyzayz6X6r0PIeeqT1AcjG07Mi7Hq3Q8h56pvw6s7ZvpK3IuR5D2/S7VOh5Dz1A7D6j 8iM5DxtZjyLUf0u1ToeQ89NODTkyIXZGMidmRdiRGDqfQ8h5/spSKu7IbuJGZFqLIsR/Q/U+h5Dz /ZWf9L6j8iI5Dm5FiPIuwo7an0PIef7GnDqUmRA7IAyJWZFuHIsR/Q/Uuh5Dz/bSlwqr8iPcPbkW Ysi9AiMHUeh5Dz/bXf8AS+nLkQuyMZE0eRbgyLURY7Ueh5Dz/aDg0ZlWfkMOQ5uRYhyL1bIe0tdq HQ8h5/uVJPpfTlyIXZAGRLHkW4Mi7XIOodDyHn+40/SaM+RWkyIzkObkTxZFytkWYTG7T+h5Dz/d pzfS6nNkQPyBuJI8izBkXquVIwsdp3Q8h5/utP0mhY2qy5ETsjGRNFkWq+ReqIgtOm9DyHn+9VmL H0p8ivJkMOQ5uVPDkW6uVdqFp03oeQ8/3gcGhYVSbIhfkN3D48ixBkXKmRbqljtM6HkPP9+GQsfR s5VabKiflYypIsizXyrlPKtVXRu0voeQ8/4FKwWup2MivLkRuyPpyJYsizWyLlLItVXRu0roeQ8/ 4AJBo2lUsZEEuUw5BbkSw5VmrlXKWVapuYdJ6HkPP+DFIY3UbeVUsZUEuQw5BblSw5VirlW6OVco lpc0tOj9DyHn/CrzmN1G3lVbGVDLlNOUWgqWEFWKuVbo5Vzj1JG6M6N0PIef8OpZMbqVvKrWAVDK CmuBRaCpIQVPVBVqllXOOyp6j4jovQ8h5/xKdssNK4Cq1kFQzZTHAr6QU+IFTVgVZpgq3x+Va44t L43MOh9DyHn/ABadwsNO7kVrQKhnBTHgrYp8YKlrgqeoCrNAFW+NBU9J8ZIIOg9DyHn/ABqtx0Zp 3sqrbyoLAKjlBQIKc0FSQgqasCrFIFWePBVnjVNTkYSCNA6HkPP+PXtOjNO/lVbgKgsgqOYFNeCt inxgqSAFTVAVPRBVjjwVY4zKmoSMTmOb890PIef8hFO+M0+QVW8Cq9sFRWAUyUFBwKLQU+IFSVwV LUBU1EFT8cCrHGAqfjXNT68jPnOh5Dz/AJFr3NNW+WmpyAKr3QVDaBUc4KbICgQUWgp0QKfXBUlU FS0gVNx4Kn40FT8WpePkanRSN+Z6HkPP+ThsvjNTklW5AFQXQVFaBUc4KbICgQVgFOjBT4AVJWBU tMFS0QVNxwKm4wFTcUpOOkanV5Wogj5XoeQ8/wCUa4tNe89hrckCq98FQ3QVFaBUc4KbKCg4FbFF gKdECn1wU+qCpKYKkoAqXjgVLxgKl4oKTik/jpGp1WVqMbwsH42CsFdDyHn/ACzHuYYOQc1VuSCg 5AFQ3QVFbBTLIKbMChICsgrAKLAU6EFOrgp9UFPpgp9IKSgFJxwUnGhScWE/iwn8UncWUeNeEePl C/BlX4Mq/BlX4Mq/BlQ4+Qocc5DjkKACdUAU0f0roeQ8/wCYa9zTBfexV+TCg5EKG+CorgKjtApl gJswKEgKyCtkWhGMFOhCdXCdWCdUCfTCdSCdRCdQCNAI8eF/XBf1wX9cF/XBf14X4AX4IRpgJ9UB TQ4FxmB0XIef80HFqiuSMUHJqDkgoeQBUV4FR3AmWwU2yE2cIShB4WQtkWhFgRjCMQRhCMARrhfj hfjBfjBfjBGsEa4RrhGAJ0QUsYVlm14bdFyHn/Otle1Rcg9qh5RQ8mCouRBUd8KO8Ey4E20E2yEJ whMF/wBAvrC+oLIWQtlssBYCwEQEQEcJ2E8hSkKydr/p0XIefoDZXtUd6Rqi5QhRcoFHyYUfIhM5 AJl8Jt0IXAhbCFoL8kL8gL8gIThCcL/sF/2CMwTpwnThOnCfOFLMFYl2uvyOi5Dz9DDiE2eVqZel amco4KPlQmcqEzkwm8kEORCHIBC+EL4QvhNvBC6F+aE68E68E68E68E+6FJcCmtAqxL9S6HkPP0g EhCWQIWpQhdlCbyEgQ5Jy/syhyhTeVX9sF/bBO5UJ3JlHkijyDk688o2pCjK8okldDyHn630P//a AAgBAgIGPwAqn//aAAgBAwIGPwAqn//aAAgBAQEGPwDk61yp5529s5OtcqeedvbOTrXKnnnb2zk6 1yp5529s5OtcqeedvbOTrXKnnnb2zk61yp5529s5OtcqeedvbOTrXKnnnb2zk61yp5529s5Otcqe edvbOTrXKnnnb2zk61yp5529s5OtcqeedvbOTrXKnnnb2zk61yp+H3OO3tnJ1rlTzzt7Zyda5U88 7e2cnWuVPPO3tnJ1rlT8Xm/b2zk61yp5529s5OtcqeedvbOTrXKngs67e2cnWuVMWLHm/b2zk61y p+Dzjt7Zyda5U/B5x29s5OtcqeedvbOTrXKmLO+3tnJ1rlTFnfb2zk61ypiwec9vbOTrXKmLF5x2 9s5OtcqYsGPOO3tnJ1rlTFgx5x29s5OtcqYsHnPb2zk61ypiwec9vbOTrXKni857e2cnWuVMWLzj t7Zyda5UxYPOe3tnJ1rlTFg857e2cnWuVMWd9vbOTrXKmLO+3tnJ1rlTFi847e2cnWuVMWLzjt7Z yda5UxYseb9vbOTrXKmLF5x29s5OtcqeCwZ9zft7Zyda5U8Fi837e2cnWuVMQsWNZt29s5OtcqYh YvN+3tnJ1rlTwXg827e2cnWuVPD4LFjWa9vbOTrXKnghYs+5r29s5OtcqeCYsWM+Zp29s5OtcqeK QsXmvb2zk61yp+CxY3mnb2zk61yp4pi8GPM+3tnJ1rlT8EhYsZ8zLt7Zyda5U/BC8HA+5l29s5Ot cqfh9ELFjgNPMe3tnJ1rlT8fgvBwG0sx7e2cnWuVPxTELFjgf9Zh29s5Otcqfl8F4McBp5f29s5O tcqfkmKIvBwG0j48u7e2cnWuVPz+CF4OA2ll3b2zk61yp+f0S+i8HAcBtLLe3tnJ1rlT/BP/AAKI vBwHAbShlnb2zk61yp/ik2KIvBwHAbShlfb2zk61yp/j9Qk2KIvBwHAbSyrt7Zyda5U/yTQoij4u A4Df8o+PKO3tnJ1rlT/Nf8CiKPi4DgNpRPjWT9vbOTrXKn+iTcBRFHxcBwHAcIZN29s5Otcqf6pN iiKPjIcBwG/5R8/pZJ29s5Otcqf7Jf0xRFHxkOA4DgP4j48i7e2cnWuVP90mxRFEn4yHAcBwIKB8 eQdvbOTrXKn6CTcBRFEUfGRIkOA4ECK+e929s5OtcqfowcBRFEUSfjIkSHAcD/VfCK9zt7Zyda5U /S+piX9MURRJk/GRIkSJEiBFez29s5OtcqfqTgKIoiiTJ+MiRIkSJEiBFEV6vb2zk61yp+r9T+CX 9MURRJkyflIkSJEiR/5IIgSIp+j29s5Otcqfr/UxL+mKIokyZPzkSJEiRIkSJEiC/CJEkSJYdvbO TrXKn7P1M/2FEmTJkyf4SJEiRIkSJEiRIkSJEiRIlgzt7Zyda5U/bg/hFkWTJkyZMmT/ACkSJEiR IlhIlixnb2zk61yp+9BkSZMmTJkyZMmT9FjO5tnJ1rlTyGDIkWTJkyZMmTJkyZMmT8Jk8J4sZ29s 5OtcqeSQZBkSJMmTJkyZMmTJkyZMmTJkyZPDt7Zyda5U8pgyDJ4RwmTJkyZMmT8IvDt7Zyda5U88 7e2f/9k=" transform="matrix(1 0 0 1 71.5039 186)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000134966527490344533160000001775629250837440420_);"> <path class="st6" d="M552,815c0-1-1-1.8-1.9-1.5c-83.2,22.5-182.9-3.1-256-38.3c-100.2-48.3-166.2-146.4-182.9-255.7 C93.9,406,126.1,289.4,180.5,188.3c-29.9,55.6-72.6,90.9-89.9,155.9c-14.8,55.3-19.2,113.6-14.2,170.5 c9.8,112.6,58.9,227.8,157.3,290.2c88.5,56.2,211.8,80.4,316.8,62.5c0.7-0.1,1.3-0.8,1.3-1.5C551.8,851.2,552,830.1,552,815z "/> </g> </g> <g class="st7"> <defs> <filter id="Adobe_OpacityMaskFilter_00000090260195702597922930000000807123719166442163_" filterUnits="userSpaceOnUse" x="559" y="775.3" width="101.4" height="90.3"> <feFlood style="flood-color:white;flood-opacity:1" result="back"/> <feBlend in="SourceGraphic" in2="back" mode="normal"/> </filter> </defs> <mask maskUnits="userSpaceOnUse" x="559" y="775.3" width="101.4" height="90.3" id="SVGID_00000166651575026705449430000016250759844276981644_"> <g style="filter:url(#Adobe_OpacityMaskFilter_00000090260195702597922930000000807123719166442163_);"> <image style="overflow:visible;" width="106" height="95" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA EAMCAwYAAAIMAAADSQAABBD/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAF8AawMBIgACEQEDEQH/ xACBAAADAQEBAQAAAAAAAAAAAAAABAUDAgEGAQEAAAAAAAAAAAAAAAAAAAAAEAABBAICAQQCAwAA AAAAAAABAAIDBBEFIUQ0ECAwFFASMSU1EQACAgAHAQEBAAAAAAAAAAAAASExELIDcwSExCAwERIB AAAAAAAAAAAAAAAAAAAAUP/aAAwDAQACEQMRAAAA+HXYXAAAAOnhTS1ufO5/RJEago2LrsLgGxiw /WJ9Z14R7peEidelnzXm2Qvzs+YU2aQvQ3bMmO+jPHZUWkvyCNj7yFeTZKtFB8b2V9Gs1FhpFSaN SF5x21PoBWjvl1qN2WM46xYQkJFKdj4AAUJ9Ay0wwKOaXgxjyAAAAABQn0D/2gAIAQIAAQUA/Ff/ 2gAIAQMAAQUA/Ff/2gAIAQEAAQUA2Hn+9ld7l9N6NR4T4nN9OlsPP9rWOea1ElRUuBTT6isVlNF+ h6Ww8/1AJUNR8hq6/CgpYUdTCNZSwcWYeLseF0th56AJUVZ7zW1yrUAFBTAUdYBCABOiCmj4tM42 I46V8Z2EdZz1BQCr0QoKYChqgKOABNiARaApAFOQrZ42J46Vlv7bGrACq9cKCuFFAAo4wE1oC4Ce 8KWQKxKFbmCvSZXSlGdlTZxXYFC0KMBAgIvAT5gFLYAU9oKzbCt2wppi89KT/Sp/xXKjeAmyAIzA J9kBS2wFPdCsXgrN/Kklc8rpSn+yqPwIZcBs4C+yAn2wFLdAU98KxsFLae9Ek+vSsHGyry4DLGF9 vCfeAUuwAU2xypLUj0ST7elcONiyfA+5hPvFPtvcnSPd8HS2Hn5cufj6X//aAAgBAgIGPwAr/9oA CAEDAgY/ACv/2gAIAQEBBj8A5O9qZn+vU9Zyd7UzP6/iQm0UUUOMOp6zk72pmfxBKgUCgoooYzqe s5O9qZnhBUC/qFAoKKxYzqes5O9qZngoFAoKK+GMZ1PWcne1MzFAoK+2MZ1PWcne1MzEL6scjkc4 dT1nJ3tTMxCxsssscj/jJw6nrOTvamZiwsssscjksnHqes5O9qZmIsssshlk/PU9Zyd7UzMssh4S /wAOp6zk72pmf69T1n//2Q==" transform="matrix(1 0 0 1 556.5039 773)"> </image> </g> </mask> <g style="mask:url(#SVGID_00000166651575026705449430000016250759844276981644_);"> <path class="st6" d="M646.6,775.3h-22c-0.4,0-0.7,0.1-1,0.4c-3.2,2.7-6.6,5.4-10.1,8c-16.5,12-34.5,20.8-53.4,26.9 c-0.6,0.2-1.1,0.8-1.1,1.5v52.1c0,1,0.9,1.7,1.9,1.5c4.4-0.9,8.7-1.8,13-2.8c30.7-7.3,61.2-19.4,85.5-39.1 c0.4-0.3,0.6-0.8,0.6-1.2c-0.1-12.1-0.1-25.3,0.3-29.2c0.8-7-10.5-15.8-12.9-17.6C647.2,775.4,646.9,775.3,646.6,775.3z"/> </g> </g> </g> </g> </g> </g> <line class="st41" x1="546" y1="175.8" x2="546" y2="903.4"/> <path class="st2" d="M643.5,174.6h-63.3c-9.7,0-17.6,7.9-17.6,17.6v63.9c0,9.7,7.9,17.6,17.6,17.6h63.3c9.7,0,17.6-7.9,17.6-17.6 v-63.9C661.1,182.5,653.2,174.6,643.5,174.6z M653.1,256.2c0,5.3-4.3,9.6-9.6,9.6h-63.3c-5.3,0-9.6-4.3-9.6-9.6v-63.9 c0-5.3,4.3-9.6,9.6-9.6h63.3c5.3,0,9.6,4.3,9.6,9.6V256.2z"/> <path class="st2" d="M765,188.4h-63.3c-9.7,0-17.6,7.9-17.6,17.6v63.9c0,9.7,7.9,17.6,17.6,17.6H765c9.7,0,17.6-7.9,17.6-17.6V206 C782.7,196.3,774.8,188.4,765,188.4z M774.7,269.9c0,5.3-4.3,9.6-9.6,9.6h-63.3c-5.3,0-9.6-4.3-9.6-9.6V206c0-5.3,4.3-9.6,9.6-9.6 H765c5.3,0,9.6,4.3,9.6,9.6V269.9z"/> <path class="st2" d="M1051.2,612.1h-63.3c-9.7,0-17.6,7.9-17.6,17.6v63.9c0,9.7,7.9,17.6,17.6,17.6h63.3c9.7,0,17.6-7.9,17.6-17.6 v-63.9C1068.9,620,1061,612.1,1051.2,612.1z M1060.8,693.7c0,5.3-4.3,9.6-9.6,9.6h-63.3c-5.3,0-9.6-4.3-9.6-9.6v-63.9 c0-5.3,4.3-9.6,9.6-9.6h63.3c5.3,0,9.6,4.3,9.6,9.6V693.7z"/> <path class="st2" d="M837.1,224.7h-31.2c-4.6,0-8.3,3.7-8.3,8.3v30.8c0,4.6,3.7,8.3,8.3,8.3h31.2c4.6,0,8.3-3.7,8.3-8.3v-30.8 C845.4,228.5,841.7,224.7,837.1,224.7z M837.4,263.9c0,0.2-0.1,0.3-0.3,0.3h-31.2c-0.2,0-0.3-0.1-0.3-0.3v-30.8 c0-0.2,0.1-0.3,0.3-0.3h31.2c0.2,0,0.3,0.1,0.3,0.3V263.9z"/> <path class="st2" d="M902.7,254.5h-31.2c-4.6,0-8.3,3.7-8.3,8.3v30.8c0,4.6,3.7,8.3,8.3,8.3h31.2c4.6,0,8.3-3.7,8.3-8.3v-30.8 C911,258.3,907.3,254.5,902.7,254.5z M903,293.7c0,0.2-0.1,0.3-0.3,0.3h-31.2c-0.2,0-0.3-0.1-0.3-0.3v-30.8c0-0.2,0.1-0.3,0.3-0.3 h31.2c0.2,0,0.3,0.1,0.3,0.3V293.7z"/> <path class="st0" d="M973.2,313.3h-89.8c-10.3,0-18.6,8.3-18.6,18.6v89.8c0,10.3,8.3,18.6,18.6,18.6h89.8 c10.3,0,18.6-8.3,18.6-18.6v-89.8C991.8,321.7,983.5,313.3,973.2,313.3z M983.7,421.7c0,5.8-4.7,10.6-10.6,10.6h-89.8 c-5.8,0-10.6-4.7-10.6-10.6v-89.8c0-5.8,4.7-10.6,10.6-10.6h89.8c5.8,0,10.6,4.7,10.6,10.6V421.7z"/> <path class="st0" d="M1051.6,464.7h-89.8c-10.3,0-18.6,8.3-18.6,18.6V573c0,10.3,8.3,18.6,18.6,18.6h89.8 c10.3,0,18.6-8.3,18.6-18.6v-89.8C1070.2,473,1061.9,464.7,1051.6,464.7z M1062.2,573c0,5.8-4.7,10.6-10.6,10.6h-89.8 c-5.8,0-10.6-4.7-10.6-10.6v-89.8c0-5.8,4.7-10.6,10.6-10.6h89.8c5.8,0,10.6,4.7,10.6,10.6V573z"/> <path class="st42" d="M618.7,442.9h-70.5v8.9h69.9c5.5,0,10,4.2,10,9.4v133c0,5.2-4.5,9.4-10,9.4h-69.9v8.9h70.5 c10.4,0,18.8-7.9,18.8-17.7V460.6C637.5,450.8,629.1,442.9,618.7,442.9z"/> <path class="st2" d="M643.5,775.9h-63.3c-9.7,0-17.6,7.9-17.6,17.6v63.9c0,9.7,7.9,17.6,17.6,17.6h63.3c9.7,0,17.6-7.9,17.6-17.6 v-63.9C661.1,783.8,653.2,775.9,643.5,775.9z M653.1,857.4c0,5.3-4.3,9.6-9.6,9.6h-63.3c-5.3,0-9.6-4.3-9.6-9.6v-63.9 c0-5.3,4.3-9.6,9.6-9.6h63.3c5.3,0,9.6,4.3,9.6,9.6V857.4z"/> <path class="st0" d="M672.9,628.5h-89.8c-10.3,0-18.6,8.3-18.6,18.6v89.8c0,10.3,8.3,18.6,18.6,18.6h89.8 c10.3,0,18.6-8.3,18.6-18.6v-89.8C691.5,636.8,683.1,628.5,672.9,628.5z M683.4,736.9c0,5.8-4.7,10.6-10.6,10.6h-89.8 c-5.8,0-10.6-4.7-10.6-10.6v-89.8c0-5.8,4.7-10.6,10.6-10.6h89.8c5.8,0,10.6,4.7,10.6,10.6V736.9z"/> <path class="st0" d="M770.1,475.7h-89.8c-10.3,0-18.6,8.3-18.6,18.6V584c0,10.3,8.3,18.6,18.6,18.6h89.8c10.3,0,18.6-8.3,18.6-18.6 v-89.8C788.7,484,780.3,475.7,770.1,475.7z M780.6,584c0,5.8-4.7,10.6-10.6,10.6h-89.8c-5.8,0-10.6-4.7-10.6-10.6v-89.8 c0-5.8,4.7-10.6,10.6-10.6h89.8c5.8,0,10.6,4.7,10.6,10.6V584z"/> </g> </svg> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/gnuastro.txt�����������������������������������������������������0000644�0001750�0001750�00000000042�14557511161�015436� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������../gnuastro-figures//gnuastro.svg ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/iandtime.eps�����������������������������������������������������0000644�0001750�0001750�00000364665�14557511157�015373� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 0 0 485 125 %%HiResBoundingBox: 0.000000 0.000000 484.500000 124.500000 %%Creator: dvips(k) 2023.1 (TeX Live 2023) Copyright 2023 Radical Eye Software %%Title: all-figure0.dvi %%CreationDate: Sat Feb 3 19:22:16 2024 %%PageOrder: Ascend %%DocumentFonts: CMR10 CMMI7 CMR7 CMR5 %%EndComments % EPSF created by ps2eps 1.70 %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o ./tikz/all-figure0.ps ./tikz/all-figure0.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2024.02.03:2022 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: l3backend-dvips.pro 0 0 %% %% This is file `l3backend-dvips.pro', %% generated with the docstrip utility. %% %% The original source files were: %% %% l3backend-header.dtx (with options: `header,dvips') %% %% Copyright (C) 2019-2024 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of %% this license or (at your option) any later version. The latest %% version of this license is in the file: %% %% https://www.latex-project.org/lppl.txt %% %% This file is part of the "l3backend bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% %% File: l3backend-header.dtx /color.sc { } def TeXDict begin /TeXcolorseparation { setcolor } def end true setglobal /pdf.globaldict 4 dict def false setglobal /pdf.cvs { 65534 string cvs } def /pdf.dvi.pt { 72.27 mul Resolution div } def /pdf.pt.dvi { 72.27 div Resolution mul } def /pdf.rect.ht { dup 1 get neg exch 3 get add } def /pdf.linkmargin { 1 pdf.pt.dvi } def /pdf.linkdp.pad { 0 } def /pdf.linkht.pad { 0 } def /pdf.rect { /Rect [ pdf.llx pdf.lly pdf.urx pdf.ury ] } def /pdf.save.ll { currentpoint /pdf.lly exch def /pdf.llx exch def } def /pdf.save.ur { currentpoint /pdf.ury exch def /pdf.urx exch def } def /pdf.save.linkll { currentpoint pdf.linkmargin add pdf.linkdp.pad add /pdf.lly exch def pdf.linkmargin sub /pdf.llx exch def } def /pdf.save.linkur { currentpoint pdf.linkmargin sub pdf.linkht.pad sub /pdf.ury exch def pdf.linkmargin add /pdf.urx exch def } def /pdf.dest.anchor { currentpoint exch pdf.dvi.pt 72 add /pdf.dest.x exch def pdf.dvi.pt vsize 72 sub exch sub /pdf.dest.y exch def } def /pdf.dest.point { pdf.dest.x pdf.dest.y } def /pdf.dest2device { /pdf.dest.y exch def /pdf.dest.x exch def matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix cvx exec /pdf.dev.y exch def /pdf.dev.x exch def /pdf.tmpd exch def /pdf.tmpc exch def /pdf.tmpb exch def /pdf.tmpa exch def pdf.dest.x pdf.tmpa mul pdf.dest.y pdf.tmpc mul add pdf.dev.x add pdf.dest.x pdf.tmpb mul pdf.dest.y pdf.tmpd mul add pdf.dev.y add } def /pdf.bordertracking false def /pdf.bordertracking.begin { SDict /pdf.bordertracking true put SDict /pdf.leftboundary undef SDict /pdf.rightboundary undef /a where { /a { currentpoint pop SDict /pdf.rightboundary known dup { SDict /pdf.rightboundary get 2 index lt { not } if } if { pop } { SDict exch /pdf.rightboundary exch put } ifelse moveto currentpoint pop SDict /pdf.leftboundary known dup { SDict /pdf.leftboundary get 2 index gt { not } if } if { pop } { SDict exch /pdf.leftboundary exch put } ifelse } put } if } def /pdf.bordertracking.end { /a where { /a { moveto } put } if /x where { /x { 0 exch rmoveto } put } if SDict /pdf.leftboundary known { pdf.outerbox 0 pdf.leftboundary put } if SDict /pdf.rightboundary known { pdf.outerbox 2 pdf.rightboundary put } if SDict /pdf.bordertracking false put } def /pdf.bordertracking.endpage { pdf.bordertracking { pdf.bordertracking.end true setglobal pdf.globaldict /pdf.brokenlink.rect [ pdf.outerbox aload pop ] put pdf.globaldict /pdf.brokenlink.skip pdf.baselineskip put pdf.globaldict /pdf.brokenlink.dict pdf.link.dict pdf.cvs put false setglobal mark pdf.link.dict cvx exec /Rect [ pdf.llx pdf.lly pdf.outerbox 2 get pdf.linkmargin add currentpoint exch pop pdf.outerbox pdf.rect.ht sub pdf.linkmargin sub ] /ANN pdf.pdfmark } if } def /pdf.bordertracking.continue { /pdf.link.dict pdf.globaldict /pdf.brokenlink.dict get def /pdf.outerbox pdf.globaldict /pdf.brokenlink.rect get def /pdf.baselineskip pdf.globaldict /pdf.brokenlink.skip get def pdf.globaldict dup dup /pdf.brokenlink.dict undef /pdf.brokenlink.skip undef /pdf.brokenlink.rect undef currentpoint /pdf.originy exch def /pdf.originx exch def /a where { /a { moveto SDict begin currentpoint pdf.originy ne exch pdf.originx ne or { pdf.save.linkll /pdf.lly pdf.lly pdf.outerbox 1 get sub def pdf.bordertracking.begin } if end } put } if /x where { /x { 0 exch rmoveto SDict begin currentpoint pdf.originy ne exch pdf.originx ne or { pdf.save.linkll /pdf.lly pdf.lly pdf.outerbox 1 get sub def pdf.bordertracking.begin } if end } put } if } def /pdf.breaklink { pop counttomark 2 mod 0 eq { counttomark /pdf.count exch def { pdf.count 0 eq { exit } if counttomark 2 roll 1 index /Rect eq { dup 4 array copy dup dup 1 get pdf.outerbox pdf.rect.ht pdf.linkmargin 2 mul add sub 3 exch put dup pdf.outerbox 2 get pdf.linkmargin add 2 exch put dup dup 3 get pdf.outerbox pdf.rect.ht pdf.linkmargin 2 mul add add 1 exch put /pdf.currentrect exch def pdf.breaklink.write { pdf.currentrect dup pdf.outerbox 0 get pdf.linkmargin sub 0 exch put dup pdf.outerbox 2 get pdf.linkmargin add 2 exch put dup dup 1 get pdf.baselineskip add 1 exch put dup dup 3 get pdf.baselineskip add 3 exch put /pdf.currentrect exch def pdf.breaklink.write } 1 index 3 get pdf.linkmargin 2 mul add pdf.outerbox pdf.rect.ht add 2 index 1 get sub pdf.baselineskip div round cvi 1 sub exch repeat pdf.currentrect dup pdf.outerbox 0 get pdf.linkmargin sub 0 exch put dup dup 1 get pdf.baselineskip add 1 exch put dup dup 3 get pdf.baselineskip add 3 exch put dup 2 index 2 get 2 exch put /pdf.currentrect exch def pdf.breaklink.write SDict /pdf.pdfmark.good false put exit } { pdf.count 2 sub /pdf.count exch def } ifelse } loop } if /ANN } def /pdf.breaklink.write { counttomark 1 sub index /_objdef eq { counttomark -2 roll dup wcheck { readonly counttomark 2 roll } { pop pop } ifelse } if counttomark 1 add copy pop pdf.currentrect /ANN pdfmark } def /pdf.pdfmark { SDict /pdf.pdfmark.good true put dup /ANN eq { pdf.pdfmark.store pdf.pdfmark.dict begin Subtype /Link eq currentdict /Rect known and SDict /pdf.outerbox known and SDict /pdf.baselineskip known and { Rect 3 get pdf.linkmargin 2 mul add pdf.outerbox pdf.rect.ht add Rect 1 get sub pdf.baselineskip div round cvi 0 gt { pdf.breaklink } if } if end SDict /pdf.outerbox undef SDict /pdf.baselineskip undef currentdict /pdf.pdfmark.dict undef } if pdf.pdfmark.good { pdfmark } { cleartomark } ifelse } def /pdf.pdfmark.store { /pdf.pdfmark.dict 65534 dict def counttomark 1 add copy pop { dup mark eq { pop exit } { pdf.pdfmark.dict begin def end } ifelse } loop } def %% %% %% End of file `l3backend-dvips.pro'. %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup} ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N /erasepage{}N/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{ count ocount sub{pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginProcSet: color.pro 0 0 %! TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet TeXDict begin @defspecial systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict /cleartomark get put}ifelse /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution mul} def/BPToDvips{72 div Resolution mul}def product (Ghostscript) search {pop pop pop revision 927 gt}{pop false} ifelse{/BorderArrayPatch{} def}{/BorderArrayPatch{[exch{dup dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def} ifelse /HyperBorder {1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def /pgfHrgb{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfArgb} def /pgfdir { dup 0 moveto dup 5 index lineto } bind def} bind def /pgfVrgb{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfArgb} def /pgfdir { dup 0 exch moveto dup 5 index exch lineto } bind def} bind def /pgfArgb{ /pgfdiff 8 index round cvi 8 index round cvi sub 2 mul 1 add def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div pgfheight 9 index 9 index 9 index 14 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfdir stroke 4 -1 roll 7 index add 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll .5 sub } repeat mark 15 1 roll cleartomark exch pop }bind def /pgfR1rgb{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRrgb} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2rgb{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setrgbcolor fill pop}bind def /pgfRrgb{ /pgfdiff 8 index round cvi 8 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 9 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 9 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 8 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 8 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 8 index 8 index 8 index 13 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll 4 index add 4 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 14 1 roll cleartomark exch pop }bind def /pgfHcmyk{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAcmyk} def /pgfdir { dup 0 moveto dup 6 index lineto } bind def} bind def /pgfVcmyk{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAcmyk} def /pgfdir { dup 0 exch moveto dup 6 index exch lineto } bind def} bind def /pgfAcmyk{ /pgfdiff 10 index round cvi 10 index round cvi sub 2 mul 1 add def 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div pgfheight 12 index 12 index 12 index 12 index 18 index pgfdiff { 4 index 4 index 4 index 4 index setcmykcolor pgfdir stroke 5 -1 roll 9 index add 5 -1 roll 8 index add 5 -1 roll 7 index add 5 -1 roll 6 index add 5 -1 roll .5 sub } repeat mark 19 1 roll cleartomark exch pop }bind def /pgfR1cmyk{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRcmyk} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2cmyk{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setcmykcolor fill pop}bind def /pgfRcmyk{ /pgfdiff 10 index round cvi 10 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 11 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 11 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 10 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 10 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 11 index 11 index 11 index 11 index 17 index pgfdiff { 4 index 4 index 4 index 4 index setcmykcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 5 -1 roll 8 index add 5 -1 roll 7 index add 5 -1 roll 6 index add 5 -1 roll 5 index add 5 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 18 1 roll cleartomark exch pop }bind def /pgfHgray{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAgray} def /pgfdir { dup 0 moveto dup 3 index lineto } bind def} bind def /pgfVgray{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAgray} def /pgfdir { dup 0 exch moveto dup 3 index exch lineto } bind def} bind def /pgfAgray{ /pgfdiff 4 index round cvi 4 index round cvi sub 2 mul 1 add def dup 2 index sub pgfdiff div pgfheight 3 index 6 index pgfdiff { 1 index setgray pgfdir stroke exch 3 index add exch .5 sub } repeat mark 7 1 roll cleartomark exch pop }bind def /pgfR1gray{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRgray} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2gray{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setgray fill pop}bind def /pgfRgray{ /pgfdiff 4 index round cvi 4 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 5 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 5 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 4 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 4 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def dup 2 index sub pgfdiff div 2 index 5 index pgfdiff { 1 index setgray pgfcircx pgfcircy 2 index 0 360 arc closepath stroke exch 2 index add exch .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 6 1 roll cleartomark exch pop }bind def /pgfsc{}bind def/pgffc{}bind def/pgfstr{stroke}bind def/pgffill{fill}bind def/pgfeofill{eofill}bind def/pgfe{a dup 0 rlineto exch 0 exch rlineto neg 0 rlineto closepath}bind def/pgfw{setlinewidth}bind def/pgfs{save pgfpd 72 Resolution div 72 VResolution div neg scale magscale{1 DVImag div dup scale}if pgfx neg pgfy neg translate pgffoa .setopacityalpha}bind def/pgfr{pgfsd restore}bind def userdict begin/pgfo{pgfsd /pgfx currentpoint /pgfy exch def def @beginspecial}bind def /pgfc{newpath @endspecial pgfpd}bind def /pgfsd{globaldict /pgfdelta /delta where {pop delta} {0} ifelse put}bind def/pgfpd{/delta globaldict /pgfdelta get def}bind def /.setblendmode where {pop} {/.setblendmode{pop}def} ifelse /.setfillconstantalpha where {pop /.setopacityalpha {.setfillconstantalpha} def} {/.setopacityalpha where {pop} {/.setopacityalpha {pop} def} ifelse} ifelse /.pgfsetfillopacityalpha{/pgffoa exch def /.setfillconstantalpha where {pop pgffoa .setfillconstantalpha} {/pgffill{gsave pgffoa .setopacityalpha fill 1 .setopacityalpha newpath fill grestore newpath}bind def /pgfeofill{gsave pgffoa .setopacityalpha eofill 1 .setopacityalpha newpath eofill grestore newpath}bind def} ifelse} bind def /.pgfsetstrokeopacityalpha{/pgfsoa exch def /.setstrokeconstantalpha where {pop pgfsoa .setstrokeconstantalpha} {/pgfstr{gsave pgfsoa .setopacityalpha stroke grestore newpath}bind def} ifelse}bind def /pgffoa 1 def /pgfsoa 1 def /.pushpdf14devicefilter where {pop [userdict /bop-hook known {userdict /bop-hook get aload pop} if {0 .pushpdf14devicefilter} aload pop] cvx userdict exch /bop-hook exch put [userdict /eop-hook known {userdict /eop-hook get aload pop} if {.poppdf14devicefilter} aload pop] cvx userdict exch /eop-hook exch put} if systemdict /pdfmark known not {userdict /pdfmark systemdict /cleartomark get put} if end /pgfwritesamplecmyk { 4 index 0 5 index pgfcheckcolorrange 255 mul round cvi put 4 index 1 4 index pgfcheckcolorrange 255 mul round cvi put 4 index 2 3 index pgfcheckcolorrange 255 mul round cvi put 4 index 3 2 index pgfcheckcolorrange 255 mul round cvi put pop pop pop pop } bind def /pgfwritesamplergb { 3 index 0 4 index pgfcheckcolorrange 255 mul round cvi put 3 index 1 3 index pgfcheckcolorrange 255 mul round cvi put 3 index 2 2 index pgfcheckcolorrange 255 mul round cvi put pop pop pop } bind def /pgfwritesamplegray { pgfcheckcolorrange 16777215 mul round cvi 1 index 0 2 index -16 bitshift put 1 index 1 2 index 65535 and -8 bitshift put 1 index 2 2 index 255 and put pop } bind def /pgfcheckcolorrange { dup 0.0 lt {pop 0.0} if dup 1.0 gt {pop 1.0} if } bind def /pgfchanneldepthcmyk 8 def /pgfchanneldepthrgb 8 def /pgfchanneldepthgray 24 def /pgfcolorsamplecmyk 4 string def /pgfcolorsamplergb 3 string def /pgfcolorsamplegray 3 string def /pgfrangecmyk [0 1 0 1 0 1 0 1] def /pgfrangergb [0 1 0 1 0 1] def /pgfrangegray [0 1] def /pgf1{gsave exec 1.0 pgfw 2.00002 0.0 moveto -6.00006 4.00005 lineto -3.00003 0.0 lineto -6.00006 -4.00005 lineto pgffill grestore} bind def /pgf2{gsave exec 1.0 pgfw 0.8 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -3.00003 4.00005 moveto -2.75002 2.50002 0.0 0.24998 0.75 0.0 curveto 0.0 -0.24998 -2.75002 -2.50002 -3.00003 -4.00005 curveto pgfstr grestore} bind def /pgf3{gsave exec 1.0 pgfw [ ] 0.0 setdash 0.0 -5.00005 moveto 0.0 5.00005 lineto pgfstr grestore} bind def /pgf4{gsave exec 1.0 pgfw [ ] 0.0 setdash -3.00003 -5.00005 moveto 0.0 -5.00005 lineto 0.0 5.00005 lineto -3.00003 5.00005 lineto pgfstr grestore} bind def /pgf5{gsave exec 1.0 pgfw [ ] 0.0 setdash -2.00002 -5.00005 moveto 1.0 -3.00003 1.0 3.00003 -2.00002 5.00005 curveto pgfstr grestore} bind def /pgf6{gsave exec 1.0 pgfw [ ] 0.0 setdash -4.50003 -5.00005 moveto 0.49998 0.0 lineto -4.50003 5.00005 lineto pgfstr grestore} bind def /pgf7{gsave exec 1.0 pgfw -2.50002 0.0 translate [ ] 0.0 setdash 3.00003 0.0 moveto 3.00003 1.65689 1.65689 3.00003 0.0 3.00003 curveto -1.65689 3.00003 -3.00003 1.65689 -3.00003 0.0 curveto -3.00003 -1.65689 -1.65689 -3.00003 0.0 -3.00003 curveto 1.65689 -3.00003 3.00003 -1.65689 3.00003 0.0 curveto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def /pgf8{gsave exec 1.0 pgfw [ ] 0.0 setdash 1.0 0.0 moveto -5.00005 3.00003 lineto -11.00012 0.0 lineto -5.00005 -3.00003 lineto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def @fedspecial end %%BeginFont: CMR5 %!PS-AdobeFont-1.0: CMR5 003.002 %%Title: CMR5 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMR5. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR5 known{/CMR5 findfont dup/UniqueID known{dup /UniqueID get 5000788 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR5 def /FontBBox {-10 -250 1304 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR5.) readonly def /FullName (CMR5) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /one put dup 50 /two put dup 51 /three put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DAE26BF1F487876AD1 16184ABCA7446A2352AB37C36E9C9BB67CEE105C612D36566FB459D6ACFB1DC3 7A59448A06EBA21F8824266BDD0ACF9E356251A897A920C39F1AB236EE06C039 8C4C0AE55FCED464E19AFAF548D454FCF73F6087102630AEA03E622AF2596870 1353925801642BBDC11F09963F4ADF037671B73D48CD9C209DB4D5BE7F4CB381 94887E8365D25C45D1F87EFFAE360104ABD3235E4D2F4BA163408448E814D49A 3E7C171B8F1275D49937C3255326069007B302844EBF2BC1990DDFF1A34C2770 A262ACCE874DA1E0002188D6A713C79D5E9226178EED27D6F4E4DC24ED2669B2 3873F42A48E5C1365AAFC83FAD8B849E5D7E52BFBB01B281005A9EBEB4EA2F35 B691489305BCFE5516DEFBA092F66ABCA2D739A9277AC69F74F786045E63B0F8 66D545B12B0581AEB579D5E1E2A412DB8F66276E05F131EC3B9F543E11F40FBA 8CC47071DB04A5D38A707C9F825527521CA1FC412FB54DBD72E912BA4EC8F747 306A65040671237C8FE84AB6D6157D96EDE13B3A8FBF7140F1A9DA55B666953B C7FA638353F278D07066AB8DDF0DFFC832F7025DF1AF9F894D52E9FA95EBBEF5 9D6B97768FEC26E845B87C6ACF5395C75B894B5A1F50B248BA33943C5AD6CC2A 8D9AC65C08B3206E7F5E5913CD0D54C9FF741A4D92B628F85E43F52082397891 66E6F922E0BFA2E45F0072217011D4B8EB40893F151E4E2E92ECE5862C467D4E 3833311B08340AE1C0C692095AFB739E9B9A4F56BFA0F0B2AB8455A7470C22C2 0C2EC285026195CB73EE2A713ABBDE4945AFEB92630BF852DD4845FB4C9A8C8A 0C8C971F29440B4A786108D0DA1AEFDBE03568B6B2F3953B4D07A5B7D6FF564F 6CC0D8C08CA459D556154A45133BD7AF70C7D8F474DE66E64FA112D776478A83 B282EA4E941CE2FD6D8F7B68D129CE0093AAF7C1D345C3D65BE74EE9391C9B89 2D4D31764F1BA81CB12CE46D15A6BF941C9F0EACB4A2DECC8F2F6B85FFF490D4 ED7BB6C7CDED10F03F68282B2ED20809F95840A904020C98299E17C46243D9EF 05B5B8173BB2E8CBAB3AA9B8207A9EFE6366C91A7674DBCD9FAF12A2EF4B5117 5687F3DF1244F5439ECD8AB0587F492E990DD7B516C664AFAB76CE71084FDD70 E7F5A38BD46926615659488D3548C5066C06E443016DD40275CFF3105573117E 369C8C34E48BEE832D93F0ADA7674FC6F5A64183DB2B70FF166E02E044B7063A 41D2F396A9158A26D3953F12982ACD1D7593F474DB98ECFD00EAF57FAAF17C7E C1E4775B37FCBCD6DB1B5BC6209162E57E21A6AF427043562D9854B430A0BAED 20D31A9AC334C87875E53E0B956D33111955459DCD98D54E1BCC61BA58CDB41E 03009979C0A541FA9F69B55D3F3750515E5F268A7B55254B8A44CA732F2B9242 18F34C029665B31EB68331B0147607645983340D15E322E3D0532E6376D40FA2 1041F7988EB9F56D83946757786737D8BB4A996EA7933E79BE61B4EA1115AA4C 286B7AAFE80AB7C619329AD5FA772A6279FE85FA6B623138FAE1C6AE3FA45AB0 95D8020D2EE2979E8A87D7E7C5DA2E6B701FEB4923F401F892D83A4928807152 96CB664018AF24E829E582FA8B4F0E07387BAC53530AB3AADF74404EB2F311E6 C6A70F960FA962E52A30CCC6E15097F9B7BF011626DAD38EDF78745B60C0818B 34663683577D897B1B6AEB240F3A2AA29F1F1800FE0A5C205B35C6A6438259FF CCEC942AD2D7C3CFE01F956B795C0349DD5380D0140D3BB54FD99EEE5171DAF5 4FA360A740589A1F8AB4FBC275CC06FF89A8350F4982F87E747501A74B7C81A0 0F40FBA9D2875022DC3D417FD623D89FB6A0C0F1B930ACC2117C6CE94AAE5844 0B5C9DAD579B7DDB73F2B26B05E1AAE30AF69937722E8360987AC0BDBE305B5B DDBEF5A6C03BE1743C518E6B7B58A85AC961B8755BF37688E37DE0632BBE06E0 53FAFAFBE52EAF276365A0484A1A682C9B9486CDCFBFBC4F4A1D6BF71378F014 56DDF9B15A5AE0276827ACBD9AB04D685F52A62BD3DA33BDC2A262B756B58C26 4F3B552841B81CA60C951F400551166C72B8D357D8122685FE97D14AC22AB6FD 2EE4CC429D580AD7B8D12A9C601FEE5D25C98BCBCF96C87FCFBF28419BEEFFA8 7A4FC7B6E5FD377EBD5E743C3FDBB7554A1FB9663B648B15C4119CA952A8263B 278E5845AB929942E1A0FC4CC413F36134884EAF3704865C1478D6988880EB54 C5C5C1BDD7CB0548342B9C7B6F94DD6341C5744A9A3C4A866F620BB70575EABD AAA42E3B6E23AA029080B299294AF2E9388520367E964A3A66A84628D75F1BEB C7A58C92EF7335F30BD0A26D072A986635318E0473CE3CD5B4F1BBFF6E781938 EE4E3C11AC27A1BE0C3B55586A4565E4B967ED2EE4674121A46DA1C32C5D278A 44BEB43CCA246B730D337918AAA394728814C726DA4F9C40AC6EE877365976EE A53276A818CF25E995CAA34039339C55DDDE74B3C11742786C1E9FA5C432EAC4 E184F35560EA31D687D005843B02F9252C2A16F9E4C31C18D0D45B7D5F63D589 3C1FE3D33C912B9CD79DBCCF9FD8223FDC18D55762F0DB2DB241625B91DB17F6 206120D6300D317E82F3DDE6D2D0825547C08BE7E6FF8FB54D4DFEF2F4E475F7 F3838B4ADBE49F8C41409D85085DB5A030858AAEEA5AB9CD2D1172C8D0EE31AE 507D8048E123AEAB05979C872ADBA4833D36626166BBB2A2CEF2F3E641DB429C AB15C97D7180E8E6AC0D871E20678516ABAA4D616B51C132F41E5661858B8C2C ECEE4A65A2B0FF310DFB531B213196D2E2AB015963246F44E22E603E741BBFF0 16DBFC284906983A8C15278A36F5379F46C152304DADC8D90C313961E5F58180 EEEC5A15131E5C48AD27F80B77EB0370482D528735FBA3E6C0548BB66CC222F7 CCE87194F565B9EF7F32E656E6964501CE32462FFA6B87087EBAF45D454CFBA9 ACA808C4397F3852158F1C0AE44772253ABEF6D278F726A03A9CBC4330EC80D0 117F9131C5974445B81093C1D6E093C669CD285D1BFE864D53E5F140D40BE4CC 2689C42C50C4137DE564374B2130609785D8F519E0083DD24A44DE24A68E4071 4A2122AB8AB9649660D1C96DC58F37F88623528078BFDA3BA3085D527ED4CAF6 25BA663A61AEC4938CA78C49623FE0EED33DA2D08CC78F86A807E791BC9CFCFE 8FBFA55EC2259B64C31F6EBC45D2DF9B47EE09AA54011D40F55B6F12F49F2266 EDDB09D44C521EC9568CA7E62283C483A436417B65B4FCBC7EA32AC6EB4E7B30 080816F29F06D6B09E5506D3149C5D758BA85D820357D4955B0C1FFB383E10DA 4D61774D3B23C84A339C7348ECA6078080FF8B436B2261091DBBDC02583E366A 622ED9F95D2A85BDBA48DCE8BE45628A4ADFD5A48869800D9B54F530F43A8F53 F765F5D5C44A9399FC1B9CEFA343966118DD11CB102423D46BA0F096795AF0D1 BA33F089AD80A104DE7FDF8A6E7D935E6713963FE3C57CC673BCDD423DF3DCE0 C57EADCA2AE4DBB30166C2CF1F7113DF96A27D4BBB23ABECC5A4795F1290F4F5 5293B5870F892C9A32C776AAD06D78D0514F047373879CFC5AF9D624DCE5BC8F 7CEA5055064050AAB2F24A1C792B2609FFDADC6AB8D0F31A12403CF3436A1E1E E24BA5F92587925C4D6795A3FB163245FBF054BB1B0FF01FD63DBF7C192D0F31 33A17E7764699B669A3ACCF7C36849EEDA395E7F55174023A79904A766F21D58 3DDB7B4C2808DE7FFB8717658084E70DBE046A13BBF1F9BB97B3AB527D68DE8E 924DE65486C3B883CD65A95901B0DE57821CB6C6AE37644E02F5CB0163617113 C91D2C649A0BA10736F3709BD504F22DA8831A09BD0B2D6790A498F2FBC2F642 7845796E606ECAB2356238AAF40323D71B236CBD1E3E43BD5443F304D52F3CC0 28DB5D33A732695AA09C0449C53C656704D820217AC035DF45F59AE445946481 E5BFBE5D4EC0A42B5662FBEB9FF6ECFFB5E8517312F56C91A01824E401E7203E 258C3BA073C1B2532B8312F5AE29E37F5EA71C52F171593B1370D4ED5D7341CD 567390ED5B75D612D5873BAC518587525A591164E8D36D2BD89F792BD9EE6ACE 99FB72B23CB2445F12B8A6A0876EE711166C9E34897D370174C17A2495D58B4D 3DA19DBB1AF2E09C72FA42AA3D8047D05AC4F6A27F3EBF32ADD2AD2FF26EAE05 A9AB34C9287EE00E8EC29C6603036D365AE08E00D1C7C410EA2551696954EC92 92080C8FA5C9E67698BD7B895C82ED29391E015F83E0DA145384E223319CBA74 19494F070649E03CE9FF905619C6CB40F562DA49C1EDD2CA221DD7D3DAFA8279 AB50DE1C059CB8D5C9FA8137DA711B9D30F236526AA389B2F79F3D5BA6ED9534 8852BF4448DC1B72E361A6A2B94CF865BC9C3401D995529E2A36DE755EE001FE C67B184AE8241D08AF88D626BD2D8AA12EE791AC4253D4761A21917C7F2F5AEC 795CD14B33F59DD7080C7654DEFFFA669F50FB1AC8C0F2E60201673A78D03DFD DE0CB142F0F616C4051772BDB837CB4CE87A0C8D61E0FC7F90517EA0F5F6B1B4 D57143CC0AE7CA9521C1536962867D6318DF1C9CE6476CEB9ADB21655D379B26 7A0EAEC2D28430C14D38764C493BA4C06EF4BE6780131F2FEC066C4866E0B258 51C48BEF77011A0B5763CB3D69A50BDD50C2D7EFBBF18BF42544B1AC196377FB 4826BACB3C16DB805D38C34F9E92AA9AB5F9A9B317D8BF32AF8A758017269914 DE3B748625D319E571187E1BFED9CCBE11ABC18C0C6123D24D2C7303DE998847 0F6F644748ED225135CC3B957EDE8567AF3EE47F5E942EA9293F7BF74260D1D5 A6F5E56705E12C8379DED158E66DF54349F0504EF584C6D05C44CDD8B720809E 3DC36FF60BF55FDF1CA8C968E68346CF43C568E0B3175CB7D55343DE21CF9730 C9DF918360036E4204CD024A67E764D3CC7677E5B229C1B909ECD1B9042134BB DD8E47FDBF63F212D401A797EF60011F52EAAFB88E3E70E007BF19826E40FE4A 73B57D52FAB33A737B1341381EB2ED307E0B83B45D6911E04BE623DA82DD6BDB 2DA096827E6A498A8D503668E45926525789D43D1BD5B896B487C0CE04FC9DAA CD9078D0C8A0639E27F0DCD82C552A7FABA42BFFEAD66CEBBD4D2E4B4A1B40A7 B6FD119D37FA26C14C29A70E2EDB3253A1AAAC2650009CA3B97B430B1A05F2C6 F2120C8981683D0976BC42FE98AB2D33014B983CE1E2F1E1AC4A524249C3CF13 4B36652F96FCBD3660ACFC2F9778B729AFE2CE1BCF473DC5A846FCC3ACBE455E 2C37853F5204085ABF3BEE50C28D99312A078CE2F6F4C1D2D3017F0E5BB5B614 102BE45CAF8108407EA970111B5A97CA8C7A64C70D52D28D2EDCD27879B1003A 6D168CD054E87C063744CDE097887CDF268D89180AF8BB4F170804AE5DA779B2 1941775FC32FA189038D6050EC0E400BBED364E0CCD8DA571E902DAD812988E2 4BF761F472EBEB411388FEB6F901777D090400F695D823C758882CC008D889E1 02678FF81B252C33C89E3B04157C889D4F0F86D432F0B3DD7811BCF01C2FC041 0D4B1DD9CB6F2433F9B34E7E8ED8BB1FA4F9F7CEB5354A8305C372C2EDEAFE5B 4AE23CEF34AC457961B15CEA084E31B3741CF2EC317DF484736EDD688737C380 6D868BDC02D1E63A52D21C8E7C1FD1BD8717612FC247293CC91E0EEA08D5F805 70217761CFCA0F9C13996DE0F045F28DB67378221722416236E4DC00194E9C45 A3839F4BB53E226919C2CD13A44E4F67334454DB7E133B2D308925CC2E275293 F81AFEC4DCF49230F22EFA19F48CAB7E09FA727CC2E11E5A5CCF57307506D5E7 6DD1D26BFD3DF97E73C2DC019B0A75B9D6386469ACF1A00A5AAB55F99BA1DE49 9883DC4FB0E8AD9421B105E050519976705F7BC889FB3B6C2921D2E198FEA294 E192DB3738EBEBF6485075728A0E16ABD53A25BB0795A21B65AFB6ABD7EAA3F7 1DAE1BA012651B4BA0ABE02F3CCCEB9E92979F17A3338A376C57A1F13E3C90C7 9DE8ADE421329A57369CCC2BA622840B79C0DF098EA42B810C596DE85F51EB9E C8F6FAA598C73F359FD7CB1D337E3B083833389846A99C87885A7537D35772DC A7EE51E8EEECF4E4F38AA04C3F4C447080386A41F1461599739D73C58CD02D65 0899177F7D707AE793B4C915C590AFD6E6810700BC0C3D14B67E03129A4215E4 953B88C7A9FF1AF4B6DA293E1DF2EF5667D408AD3F2DFDBA46EF95A1D8E1CA29 FBFA01A4B965D1101CA6C0C2BF4670E94776753FF52C2751AE41872EBE3DC66D EE58BFD3BF8F543802C7614F64E7A9CC4474DAB5F4C59F8085FD523C91F0FCE2 0CAEE1B9613064F9C9CE9556C841563A43660E0E71EE761F0448C41589AD0312 958167F62FB166655800150F9E81A558949071F01BB11C9ACFB2ACA4F332D2AC 598AD5ABD3D5EB17AFA97456C0DE4D3D872750F548C357FF34919A3EDCFF9658 F3DBF53BB3D0A204E84702DF6FCF5022E753CA92323ABEDC81071ED44C306A7B C10D15F905672783BFCDF28D97EE156E293046C09595159C735A266ADAACB887 7026C404951C27B88CC3EC1A6F15F016D55AE6B5DD739914DBD6861098977064 762AE2867697967117DD7E3CDFC24D046F1D83856D49224191CBAE95C2E7B9DA 4DC5ACB06B9F637312C1378941EF6B9D966E84DA69E66C43EDC0564D4A9B201E 5CCD830900AC4D4EEDBBA4AD14ACBADA20179AE138CF35D6F830801D7F9D1F3A B48B6C2EA3B77E7EE42DC0A26C7FDA6EB64DF4136FC3AE0FADAB84CD30392E44 49DD3F7DFAB77AC2E3A8D16C9BC002AA17A9C1E9166A21648AE2AD7F9DB250DD 2F3F480844C93059796E89238B0DD470329C2AEC9F178B83D421063BCC18CC35 2C562DAE86EBE6529D19066FAB70C8E73B260C71924B0B3DD652AE37DC2ADCD7 A3E3E1936FDD259A3F32D669B6CD82D73436212D6CCBE436578139AE07BA8C5F 07A8D2158C8F21007FC0B96E2B3588466A6FAB4F70363E994AC4FDC2CAB3A478 9C98DE079DF219648A6219EC7040A8FA91BE9D9451BEA89906677866F50B6FAB E8FC00E826B115CD65FAF738492A919CCB657186BA12260C2816C44A632285CC 25CA1D797DB0D901EECA675FFA1182AD6D48A8A96402D07A288CCC02F8A7CE0A 39084DA379C5FD08743060851BD02A3C9CC298FFA0AEAC5F5E1928C46A6EBB42 7D2AF9D32BD0117A8CD7B453C66FF39163092568B5A26F210900D466EA5CE01F 14BC1F57BB0D3186BEE9BA1A5648887CAC06E23057199A31781C4C37B1A07C32 B8AE8A40F5C481C8D2854AE5C2C3C746C4A2B48189A373A438F512642A55F2B2 3CCD2D5A06A1859B50C1C3352B1B5B56E652F00EE79060842A33A8CBD002E777 3CF6C051A6D5F02E35480569E9D00493C494F9FB977E665AAE4468E6DBBCC950 33876A21B75095CF391E09E814D7A03EAA19BA0D7A560610CC36EC3A9CA39CD1 4A359FBC14B07975379B68949C9FC2DFAF037C56C13802A7F66C809549EF2FC5 25EF3F517F06F90EEDFA6F8A3E5F1F3531A5415F3191B8FA7B0F28950A20A1E0 6E354480D09729E3A2D6796DB81825DADFA4580FDC7813B7989B18020C3AB1A2 87E948890C25563CB26A068ABABD94F3D42213218F2ACBB2F5B317311474B222 BE1844548554B37C97284940D5B7AF9E4CBD884D4994A76CC1ABF8E6AB0676A4 0A8130F05B0ABAC088FE4F9FB536924A55451C8772B29087B8E5E649DA3B449B 4A055214DF69D0218549440B3665E4D20C5A8660B3E0C3ABBA3426E7820E1A94 5D273A6ACCF5BC0B8F536F03B719B63234B5A306AED143DC5C782962AE007C69 7E79A5F4F65FDCB1AE1AA20F8D2BC95E7B9719A1CECC02999A3F4B89932B9982 34198D9FA8B4C63AA4A227C1B81EA53A5A2DB81A1A5FDADCE6B0435EC39BBB8F 66941BBE80248D0AD0CF054429BB1B117D9EA18D84E337F3AA61EA5E38FB9A40 74CFC091A00B98EA1B81F743028D8B1AB42BFC30D1EC3E8F722878B4FC53B177 9A5DFE01C4AABA49E0A1F06BB27915A36AF08441C72F70E715AFA69CEB00B695 C4C88813888A023B8731F367EADB36033B5D634527AEA1A245F8EC6C1DAB5F5D 24C9D9F922C7A35C9D1518649D76A6B2D6CF1860A5E5023EC7E0F9E572D59F28 0729BFD36EC45C67697B9130BE6EA156E42D4310FA7BD1338F28CAE0BBB0A4AB D60BC0E71FFA920217D4D3011CBF1CEB1861EB16C0B6E8D30743545593A496F1 BE6DCD9FEF26C2FED56B0D5F311D072269095176B4A0051A4799E806342E7FA9 FE4BEB97DECA29129AA00C003B4A09B8EE17972B34D7BFE58B0B391D1FAE28A5 A5FC3B1D37FA8B1EA6319037052A3B019ECF0737F7A3A141926A091E38CDCCE1 A09606744A460B23066A308CD1B9C5C68BEE666E66568204D4B1C44ABFDB13E3 07CE04F8AF95C39FFE2BE4C66B25D3AE22F31D7174EB5A4776291976095910B9 F2DE906D63767C93690F774B4B259B9C4F5406FCFAE1E91E91B50B1700EED1FE 988C8B589EF00A391ACB67A3338EBCF0AF101366D61C6A8A3111131BFBAAECD0 7A750984FBB53A661CB3F71D328B7A444794E64A35D30AC905460BC04C9F5006 B14DC5FC384A9CDDB8BA36F8E196C1AE0949CADBB52C5B3FB58441507C2248C8 09B20D2F6E8B0AAF19A962 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMR7 %!PS-AdobeFont-1.0: CMR7 003.002 %%Title: CMR7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMR7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR7 known{/CMR7 findfont dup/UniqueID known{dup /UniqueID get 5000790 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR7 def /FontBBox {-27 -250 1122 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR7.) readonly def /FullName (CMR7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 82 /R put dup 84 /T put dup 97 /a put dup 99 /c put dup 101 /e put dup 103 /g put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 115 /s put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB981ABA2ACC9A23A5 3E152596AF52983541F86D859FC064A0E3D5FC6647C3CAB83AD4F31DDA35019C CDB9E3DD3FEBD4C2B36BA3CF6E6C7DA85E25D8A31A9BAD39BDF31FD0D1790707 9DE6A078E8A409D8295F642DF492AC4F86AC84383B0F4C6BAA7C22AD5A898A71 D6CB34D2CD12266C486B75E75A69C14819DD9BB8159088E04D4717E576B8482D BDA52110AC8B8A80E4E9D58F470EEBD3CF44A1E1EE8DA318FFF3611B02534FC9 F4018C7C57E80570D2F634D98BE5D5EC6D95051157F0EA94A3D12BE0B4B79939 F82F8D73136D3337C44E314B0B16CB030D9A12E01FB667105F334C3EE965E5A3 D410D2F1531547A4497C355AEEB295CD3C5334BEE5232992960B757594B89F3E 52095042DBE6B4DA3C3AD50CA95EA9EBADA10630B500CF1FCCA7D60306743681 7E428D33B7F7C40B425CD58E4CD8AB474BCE6A307BC6C6EBC15A8A96E0E2977E A33389154536F5C5D8CF036D07F24094E779E5ACBE5502C92892F10F4C6DB627 C7EC4C7BF20B39418A8A85D7FD9B0EAAFD871DDD41F93BDE5FE619AFB8711824 DE890E62C1969A6FE28DD3578AF43D58A728FAFF0B9FAA640962C8F35A26F76C 67F3548D6DB54A25CEB368B47F97EA2B0C4D7C0E7894A4F0C823C6C1922CF9DC 10E05600556F1C7C9AFB33A2DB6F8730F70D6BF94B1FB0887451F2FFEEF3584F DFADCFA9A2D4846B8F0E51620E1327D994CDF973B837D10C90FF76DE22B47CD5 EE3183898D156861AB4DFAD34A1E3FA260B8164E6680BF58413A553E88F6100B C4F4E8E972C81A5F88A7DBCDC308B4C3581BCDE13877B976B1F84330839FE5CF C78551620EB803DF94A5C921F8EE24F7EF8FC4C3E1653514212631F54F90E3DC E9EAF96E998F340C4F729ECF7AB430FDB7C0BE3DF2C0D23015820E28B743CAD7 7F0AE95413C3EEABBC69E852F53EE1DC260D7F1E712BECEF2F18437DB23D8E74 2902AAFBC733AC5BAA452DD6F3671859AD836C8564E99CDC4183D8495AFD99D6 1F0D65B6588CE7546717911E25BDCA6C2649E3A7466A3E2DA7C7994A30AB4449 672EFD00632EFA8629C1AFB7D53D801028F77C864869FE636213A69173003EA6 BE1ABA95EB07B13D1594BEFCC95ECB0A9CFA9892EE0677D6B6C250855762B7A7 8E4E022640F93169DFA0303A0D5E73BF3E0F4D4AAD10FD7E4EB20532BA30371F E9F480F9513432946F9828AFB5D4AEAFA5829B2CB544E5EB634C4537EF7DF08A A1CFD94A52DCF0E7CE4C5EFFB01E6D50558B75DB4C8D5512B06080F27BE62E01 2EEA6A0357441401458C842D3DD4C35B8F561D816B336216CE0C14BF77648AF5 E33912CF95872A1E1AB9A18980A0B29A881D13397C15E1CBA5D3E0B27943EBE2 F3003D15EB446BCFC1C231832475D5B7AA19E4CFDE119D6CD62D053C6D29C333 5F729791D17B3F7108074EEF4D1BD101CB33E01004532CB0D716D2E54D169C6E 80163E70C0E9081F31A1ECBAE079D2A518B790B0CB2CD03DFD034A0F4788E800 B0CD2DC1FAFDD487C2F381EBAB2A2F3F3AF82021B211DC9CD2FBA6A1BB3D4AEA 4C7F3D9A5C21DFF284CCB827D205A69638E98D5DD8E36AFC1A4481B5CB2A2E8F D6C838DA6F81990F5ED928DC7457501B5C979FF4CD20A830896A460C5DB13D56 A3B2B5D9B292374A9BF392894DD99FCD6A1E655AB395E839F074D1596488700C 4E2891C8AEEF66568E82A8B826F9A28FF84D4D9BDA21F638EAF96880B4EBE0D8 081982F34831A03BEE81FC177700C2360D2A48915EC40D5FE85B400E175D5AF1 067FA0097904FB647757BB44B4042D30D1557BD0F7922D731142FD682139CEB7 58CA4C8C240A0B86B1888CACC507E24E04020BF1882BD9B4CAECFA97DB24D7F5 AD64C69454027F198BA35881B94EE9159A2D73E450C3BDAED66B886D6DEBC84B 653E165176228F88993F12A170775A8D7038BDF2FE8DC1F7B98BDC02D1E6686E 9B834F6C0AD90780B17DFE25F0A4E470CBA84E73F2D22BEE09A040F14CFA2C14 0FDA5A5149B5FAFFE49F55EEFC43831BC43A8326FEE9C7F469C0FC3B000884FA 41DA7318EB57262CB96FC4EC7F16CA07FE1C3BE8C2DBC8A8135953D6DDF20BDF 75A2B6D26074FCE752BD32FB9F5CA797775E8DB9BB9786B469A3CD65A0D9DDDA C2A166E454A94860EEF5B5C12172DDFC576A03F6E6F8A735FF21A3E9CCB4CAA1 3064893487697986A42CB5888B2B0A79FA3C74E8187BDDF7BEAB884B70B8D4AA AC6615745AEB906E08BF831CFDE222F58D02B428D55E9D5A3CDE74E42D8A2CB7 E1A3A9439B678AD438793ABBEB72B21C58981DAF3EDCE4BB93D95F4A1E943BBC B3A012DE92FED4F232A3A7D60CE60B605151F9C7C18A5C653E5D6D15E5B49A63 73E7A339504D0ACC74B8B116EA88C3EBA2CC631AAB29F761E5F062966AD2FD28 7FFE52FA8A115DBE23E471094FFB3CBAFBDF11B7E9058313F2D069B2CE98A962 64645738F02A31E2F2AC11628724034ADBCEE012721EBF0A567893411F950410 B20754A7510D041FFA6144AC9CC46D846B82581F20BBD001D34D9764010824BE 61C30D05E5C5D100A24F1917F01799CF5BC4E50FCECFEA732CB50196825F0E08 8A1EC868C6D4357857EE2957E081A0E4372E31A8ABEF23C3F2EA0FEE57DE4D08 61C570175C41AA0C7A3A579ADF593F18B4AE3782D2552E4E0759C32E059EE741 2D8191E381731769F6648B3581CAF11DAE46471896666F18F02918B0860BDA3C BD5DE777672447C23C62ACFC2611ED5239D6A266FDA6031EBC5A530C1A2FF7A6 B4380B9A4C877267854AD1F1677CB5433F28894ADF93D39EAB94541A8D232E08 22D082D0951A60F62B87DC028714EC74133A4D65F7D0D1296C0E189C4A42AA98 28E8AE7ECBB9FC8DFABCC6EEB1E9FB06227F90808EF31331CCC5D4C9A6182181 047902DC9FD0444FB94B60FC74F3B677758088CE6A159D940C5CF682335E756A 8BACF06AD7225D49B0002392C889B0FE2C71311D2596F4903D12FA20BA2FFE25 A0804B4BC282929BE31E0F46B34532CB5795A65218CFAE21F390792DA67775C7 B91A2BF4C16DE4F6551DAE3A5827F616BE9040EE6B1008DA2F99A01EF66D697A 6CD1A44E0A15D1F39EA8025E886A68A1E9C334327C7703EE721E497CA924AC90 7723106D913C5ED4BA4FC743CEA8D0F5172526107DA65775C0B1B77179D336C2 9B09B608D80B1A1E87CA1A84A833A00D980D919BFF56F6390E9D5B45E9935CF5 E69D003564462F750F7DCE02DC23CC215A0696B74D8BD3156A392A94F557655E 00BFAA035647568ED66157FACC585E411F7F428569C147DC43F6E4FDE693D0F3 9917BEFEDF61FB980B85515FF6424824E2D995B05CA1E5D3E8BD8D3281DB7CE4 E54923E84058FFC0A8A2C491327D0F87CE4C352B724167CEE224DABA3B95757E 4A419594BE4F92E78BA6D35D4C93D31ECC3134B24A45DC32445725BB044F09A3 AA8C31EFC0A2944ACE2F2CE054CF24DB350FB3C71115518C24BDC0F7E54250AF 9D3378D38480E1CB9029F31570C619A28F065CA4FED5665EDB96712ABEB33B9B 4232C00C1B0215F08D53F7E430887035AC25BEAF06942FD1B6C442253C887AB7 D694C1A6115C8990B4CAF1E81DD1FDDD6B03C00055BE956BE7FD8A4E1049AE69 EDA8593CBA8C4A41E046C689FBBF9F1B64E5856A7FB1C61EC815A56DE2A8ED33 41F370B8203D4E5B19C63AE9E6E0D26F4F3814B5AF48AD30EC9B8402C941FDD9 722FCAFC638FBB835F83DC77F93D367266FA7DFFFCB567EF82B1695AB4D94D09 B18AC041811027229DF431F5CB2BBF6ACCE9D500C8F075A74590641C1A607C56 D2B8624797BCD9C91C3177818691FBB4744EDB6056464A0B95B8D63F7C22309B 82D6126E2057BCC9FE5566D96B7A9B201A09B0D3252A5494C8CA2C8BA8A13C29 37EF2A882D61DA708C279F663D88A8E2999A0F3B6F98C49901A7631BF7708B67 54D0B4C52BF4BE0DA0439E6763A7C9D639AD4092E77B13D3510DAE1475C978AC 796F9B2AAD3BFF35C5A3E19B5E2BF704B3BBDF68CE48BA4FA2496D60E58888EA 28AE12D00E9F0816FAC190590A865BB58569A91BF0345D01230ABA361442006D BA2C90EC2036BBAB79EBAFC3F217DBD5854C519235F9627A1C3C71D21ED38AEF 0BB40F3B86BB9F09A3F309473D8757AB7E638DC1C59A7F9BCD49DE4107A2E54F 422767FB94048987847205584309397F554744690ACFFDF5902FE5DB355930B8 71863217830DD7A563B0B3A4025ACE75B0E777B4414B62A13B50C54E0E6D47E9 D43BF769B9411B74E1069BF71BA873B4B8973EC9BA492A5DEA58D267872BB246 10AA67B143D0E2223FFB4991E583E629413CC894C3FA4869B72D19CE1A0CEC8C 0FF5E5A3EC1FCB7D3C4289813F0D249A11B55104BD60B2A89BEF44CC77CCDA9A 065B8B83B4F4253AA1D535290DCFAA4773452D110D2B3370F9E2FE5432B54A9E 644EB3BA9BFF62347F376839024CD5EF3C5DFD30F412DD5474B7933E6A1AB63B 4B12F2417C72D0543C26A263AEA53E5BAEBD67E23553A72E949DEC556BEB5D09 C4D7A89B14FE4EC68D0E3E9D65A64B285E53590F418EDA8175113CA375A29930 DDCF4C71ABB26CEB800C2C2B253AC1F53651C88A56ABE5A74F3B54CB4FFDDB92 60AD7272BA25EC2F6FB759AA6E1E7964FB55AD09F4EB25DE45FD01833947BD05 6266AA8ABB7DD792941C7A070FCF3A4636FBF8921C70298D42FE92F079DBA2AD 6149D9CF9EF7264DE6DFCD4429949B15EA90B596340713BD61926DDB2BB23BE8 F9DE38A31620A817420A245946E551463960A8C5C7295E3B3D6A59BCDF5E472A 40B7A2CDDAA43CD8AAFC411D037142579D11054A903E102DF0D0C7B5BB854DBA F3F086AF991F7F5D5C730F8F9AF213F25786F3EC0E54530FF912F4876FDE16B6 A07D0DC4FC46EC6363BCB68B83ACC448B801EC43FDD2F8BE0E93D809FF81E38E 176AE17C67C85FEA58EC95435434C49A950AA955D8B20989C550AB1F1C31B7FF 99422E1F48FB7D6F327C6DBC4695A03903DB275B94CB39386E46579271870A25 21823E75C377E9D5B46655E8CD8F986372CF8BA846423E26582315A9D19E0BF5 305C32B2A0EAC3ECB275B1D8BE11A37ADF524944219D94EA2C5DBDA768828B6D 775DA8CDB09E0570E4ADDF462EFD8D3FA3F86B1DEECDFFB699AF6507257C1879 16FC615868C2D51F03CD57BA38D42995D9164B257441210084DC409B6EE4C119 0B2E17B0A8D5326DD0010E4A325D5F77BF935693BC90A00A28C7B5F74817DA39 F47A41E32F4F92AA04D30D810F7B1484EB53AD8CFC8CE8928B570314E0F713F8 AF127227190F9C16BB73D2A217FF801C391A29095DA5E4974D137A0CAA7DE702 E20DD4755B1D78739756A5E7EC3542B96AD6844199FFA2F5F2E9C64E2DA4FB2A ED79869F745C59D235438251BC2E6D26112AAED20E06021D1AB896EE1F1DD2EB 437FBD4A25E42245C5A647493FCC9922E6DD7AF57D5D482921D1CBD6F0F02949 C27777144751C1E72F4EE2BC343D4AE7A8A8758123B54FB1A026144C643651EF 0907A376945E19A8FC7F98A034832A5820A481B0823F980F59623E0511593FEA BDE6EFBCC0383242CBD4954027B075B21F10472059A480D6E5ED01C3B07461CE 9810251A5C5643EC7403130C2246E8616CEA25EAC7A0076731FEA8CC43BCE3BE 933FCE61067F5FD402E67E2B9DAD954AA77C5BC86BC5E4BCE2ED676D8D8EC7D0 ABC5C86D82180B9D5D7451C71B5149B6B67883578DE9909317928C0A92E3205E F23015400A1763A6FBF67FDE3318AD2696685A1832FC31CF38589EBC7CA1C818 60D2B2211E04EFCCEA88D9A9082E82951EEB123924A267CB03C48889032F2892 4227E217FA28F87E01CBF27BF1EA60641A4238258CB7AA355908FE36D90F5CAD FE992D03A33E47CA9AEBEFDA57793F39DC6A9E85D5B289F6B862B35DBCF82E43 5CD6A862F6FFAC36478C384C3BDB0148CB1FEDF55969C776E77917635B5A65EB F2AD351D21CD3822D43289FE8EB0FED58182997097C7E9F4373553AE1CA92083 EDE3BBE6C3BC7009D15AB5FEC6A59E9FD1BCC7B2099CA15FEF083B9CBF7B890E CDDDE6BA0AFF306C76500C945DC91BD533FF9A585CEEDEF79238C54E6168001E 26FEB29E523EE501BFA4F60B782B1499B07084C35A2434B4D29D3D8E2C8F945F A9922443B68D07DF7EAA1F4CDEFFC438B597D8943E231B5216808A85F30EDC81 9DF5DD22F54A45335B4C2203887475F39D247F0E7347BACFEAF220ED82F9263A 6488E73C1910023E505FDEB143006C1A351D441AC57F9D52D2C6D63D78C75605 999885676BBBAD56074298E0BFDACBA1830BA58E87F436CC670EE8EB1870154D 72DDBBF3794F8CAAA3F1E11DE29752DD99EAC695838A19BB67A1FA3829B6E0BC 5301610A0351AAA749F456AE31ADD87D6ABADCDD1FB3CE81C3713F48780DF407 530CB284B2AC709F52EE7AD647DEF9FA4D2A867CCEF728F3D40CF34C28D21527 10160B3DAFB5FE16AFC9D36C6EC4021FC189005862082BEA60AC72B63AD27D72 FAF3C2D89DA2648FC4C65104A069212D87144E8533CD86A6D73DC7CD9DBA25CE 7DA53B000266F3871B24663C77723703315C5E4A89DFCDBAB384AE7EB2F455AE AB191FED406F7F6EC9E5B8276EF5C4CBA041AC7E8BCEC7CAE840154BDCA3232F 15711ABD1E867A434E9787CA0A6D1F197597DA27ED2402CB2D84ED082E8D3A39 81E6EB270DCA4E7A90E2BEBD3CBB3A2BE3CAB926192D7292CC16845B6399A543 BCFD224BB52F21352732DB5154FA3442733066CDC3E186D8AA97CD801DFBE43A 116C86889BE198DA88CA978B8C40ACB67E8F7BA499DE68A6FF0DC72C3D00BA1A B378B39610F15CA026F95ED8155CE3FFFFA2E2FEB352DBE14CEE1669F2387B70 55B91185FBBED764266215D518716EDA3DFC9E5DB6B148A553E75AE5E38E1CFC 6EF47B314D54CF24BC13856F4F7C976BB91D143DE32FF49BFFC87E17885A1893 BA1B8E441B08EFC04F7D103C1FFBB665194B3D0920473740C55FB1C50EBCF717 A2359B687FCEAD65616EE89A68F8D91AFACAA0B238EE4AF0279AF5BE5294C3DE A7E1F5E6248C0210E7D40683F04B12A933C746ECB517CF94BBCC6E4CF49AC715 D8005AFECBDFB7A6B417DB8A28F8E9EAF39CEC1CA64DF37A5E66A76C26F721F8 A63B003A040A62F87DCF61B298F960D510BEFA453F118E59E7DE8CA3DD002EF0 127EAF733D5C61B5132348D280F84D159809CC71A3C6F7373BBFD8D6EF715D34 0016DEFF14AA5F960BF1BB9AC304A1823722843547BB4CA5EA4C41C6C2701C8F 7BDC810443F9DF34BA469A3260009B799871BAF8523C8763544DCD0B382D44C5 F75046AFF85F0B5A3188C2EE786CEEE5496A5AF4BCB0B429CAFC403FB983EFE3 61FD9F52ADFC38E07A0FD7BACBA530D2E4DAB2592AA9564843E7E2305047F060 C5FE4243FA8FDF1B5D4F61ACA7850A604FBC6D6970959752695C90F78961B4E2 C8CFA41082B1A37405AABCEE5BA3DC2B9EA76F486117B84728EC6D8AE6379CCB 402C2AA89078EC992C00D53151E9D82C65643F549A572A20F05107A41BE5AC57 833F7BBF8C4C5850C1FBDB908D03DD674C4D0ADCFE9C9883304785B4B8792B9F 7325ED107734B276D7DF57991AE7B94FF5664A8B29A0FABAC6434AE218DACCEA D910D8BE7A6B05F0751F9A6B49626C86CB82D9461E82A63A9A4DBB20FE472415 598E1470196F65230F7B80B54EBAE48FC308F9C0A6D60143CC3D5576671AC712 D8F88D6471E5408C44554E768203021BD7214C2234AD81C620ED2A12432CB1F9 F7CC85EE25AF847626399CAA221DC09190CF963D89E1665C5E2B6F92BB55E3CC 795F201D9279A9D6B2C5E58B87A9C9E3FD107CE0C06AE18F8C86EE27886F4E50 6E74E0EF1A8B1E75186521796C67111D5B173BB16A5E7330400D99CF9C28211E FDC800BC1C72B3992892B69995418C5FADEC75B678E9E4BD1904A329651DDA7C 8FA7B44DCF7D8D202ADE7758EC9A3DCBB7D2FE4DC35FA945B1893ED7E83693F3 57E77B565F5EA1B858B648A6DEC57E16AFAD23482C4B5B7EDAB573C9C6295596 CEAF371C3F6055F264E672AF19BBB4E75D3F9D367D0EEE161F4B530967B1C302 23A4795086E3B62BB336A1EC17DE448EFC759FBFEE95F241C892118CC7F4AB21 63CD9EDFDCCBB11C8DD28E4D7A952EE5AF84BB6861FE3531213E981C8C13B100 7F78406981DFAAA68E2C37A6D3158EDC12B37370FE7F2C28881836B5BF7DCA16 00DB02C0181F5F47FFDE30BBB6265FEE22756F684E24AF483026CC799E9F569B 69918B157BD9C185D78B766D00CC710FC6E09B3BB760771886E7A9D74FE32752 F3C7DF1634DD6093029616F07174704538A134FED3383AA3F2EFBD1048DEC021 6A351166A7DB302C00C298D17FD386D47B94AFF2B153B999AFCEB3285CCC4DE1 4E42B878192CF623123CE26E7B1D7C763177C3630A7AC887651C7083ABF2480A 029DAA72DD28EE5BCFCA64D1A02C62F69D2EE818E5CB530A486FF659055721A3 3667AC54E2806ACD21EA1C56714C52880301C29531554D6B430ED031D7301665 2AC839219D94C189A7CA884DBBC8BE7CDC05F25353197535813D912643ADEEAA 0CBC70AC3BDEB6B1A99764648E9B56A3E35BE85FDAA5F5BDA180C08D20FE2799 454DB0A343E30694A74B1ED5AF6466690EEF71125CF538BF80927223355A1334 6BEE819DB1AA153798FA99C53536EDED95379CD4CADA8C68F91101566A737938 2D1DE033DC53A347A778FDE57826D4816AC6847D7ED46211608668E4604BBBB8 34C39162206BD89B0C98BAA2CB86C6C5E46891CFAB3A44D634AB730A986B4844 BF3879510DF54E403B7937459E615EA25594F9C5770CADDED18BF51E04F5E7D8 FBD2C885F66FD1BC0B98D88BDC7B7839E8C38B379C17B7B3B4DE6FAD49EAD070 9AEC1C6893B4EE449F21D98BC59E92E7C966C2043984461CDF084B59B578A1DB AD7323710E2BF88023C846D5920D76DDD20E87AA1072B1762D26CB92493F5F8D 1AE7839D5E921FA2EE35A6E218B0F43E2D123D58CA6B3A11B9A6615D52E92621 AF384A5DD4EE9AC8139E638C91ABAA178DEB59614029B6A2577AD18850E99197 A964EC484EDCC5EE7069D1193395F9AAB485ED1D445D5E8B66B9CE5C70BE83D0 37A14837C71888C0FFEC9B446C7FFA15C81C0335381837E108ACBE510A70049E 33E3B51F007C039B8F5ADC23057B3EC569EB5FED14D4EBF29A7B8F866DC09D55 0EF6B65FCDF28D924CDEC99D7EE7EA5A5F379A7AF3F82E45DAFDF4D447A71B4C 3B3372EA3BD9527C7247C8E854D7C2886A42E8747FD61956F48B058AB2F4E2FE F265E9B613EB9BA3CD8A4597E7DBA99341F673BB6A4D5D1CAC97CB8AB1551666 3C3F9045B25D9049D4E48300A118CD5875BF2C0CCF39AF128B900A70286A8FA8 7E5B0E3708D989BB6935FAD7BAE9F89EDEDFDA6A22D62C3A6AE15C1D474E7904 5277E54673B2230243E006CDDFC37B3E303F093D50FE6E694D5DE6113BBC7C65 4B6157A213C3B957F1AB59AF4FFA9DDF16DB39A3AB3E79AAC425C82FFCA6049C 5E65903E5805554458D639A6539D81D459A25A3FE60C9B24D78DA80BCBA25F67 99D44CD63F98813E4BDEB7A47894B8EFDB5E6DD3914EB8B2A695A27274452C7E 5187EB7D2CB1B1C632CC124DAED975D14E38EE9C2F49B920A589F093ACF8CBDE 4BD44410BF32270F81450A6AD4CCEF639E32CAAA27A2D12F8EFD203076991542 0731B5FD5A5893F5A7FC462A2376258230C21CC3C95FCD87A0D5DF0C438A5C83 438E22606D5851436D3CFD3D131515CBD8D66B94C9748BDE4C3C872D044D9868 94FB90D760A0F5F80C6E5006041E358BA807D78D7D8536D9930805CC0DE7FB8D AF2AA94C3475B677425A004D7C9D25F31FD0B91549B973568399D0B5C5BB6DE1 7C08D652C8EC8E34EA5FFDA8F0423C709F6779A5307636D5E2E9AA1101A8E1C2 C45DE1634C04CFAA1B6338529ACCF266ABA9F81D1333F49A21E6313555299229 2569977698BC50D190EECF558E63F8A27F72B0F2086D3B411D3F2B9CE21EBC56 16E409D143548FAEE27D989DFA7378C55991C73D75A5EA3436494CC64C92B419 866583B334F7A5CF4190E3ED102697FE67FF89CE1D829CFE6B0A6DD97340263D 5E164C806B24D1C2EB0DC3FC52F788491FC617BBFDC5CE24EF45F3867550EE8C 73599D0AD9E4CDF62332C37DC01673E6150FDA17B060BD1D185714F0298A0CC9 291623427EED8D70E11FEA71CDF027ADACDD0658D5EED7F5207067A6981283E3 3C47C68411AC529ECB04AAF92E086CADE594C6367AEF1A0123A1B1598AA997C1 6C2988EF7ECB0EC1F52955F9C59CCDA4DC79485AB8BC74164DD7B6F2E09EE828 E8170F4FB8A70C4104A30960D3007EEF547FB86CCD91850E35F06E55BB59CDB7 EA1CCEC93084C8E194B3A4D5388CD14072952C8161A22BEAFCFFBB20BC2EE0B6 52BB298E0733E6E2AB7E4EBB581DC1E345EB99D3FFB4D7D6DF7C4B5CDB09CB25 4F113203227016C5CD81690C92C0EB7FC5BCB72B835B0929F5584274D479397F 489D186C82832EC9983BAAFA758B687CC237032BED965DA6C21A52A11A9E0DCB 2112EF27B3AF650502F90967A028580652AE6BCC89E949E17BE84635FE297E6D CB903B226A7423659E54624F343CAC59F14596313C8FE87775325D9190BE7471 0CDB1ACB83BC5CD1935A2D83C6A101322BF122B0DB36ABE4BC780B543E605AFD 836B821D437304B6B9A5D4BB9C7456FB3A9CBB0C9FB936E9D608CAB1B3FCA5B4 9F2DBBD3AE7DE2971B704810C8B9055B079BF14A0A8624259CE5E7D7B6FAC5C6 23F853F90DDF300883316936B51BD0E6AEF93A82FB07D0FC65DAEDDA76A0FAEF 5B54E50FD113600799484438B9417FD11BA2E81F36AEAE32271EEDF0A2EBD9D4 103EED484DEA065ADBD6C3B7DB87131ADA65F2D22D6952FB43B120ECF69A7683 B54BC603875BD9EAC28AC6EB355558AB43B7C3918719CC67F4AA919F898E44B8 6C9A4C3FB94AF3957060EA20B62566B3562EB897E144EB2880B065B9FB06C6A0 08A543CAB94AB34ECB39E6849AF0B06DFDA389CCE9DC593E54AC539997EF2F02 7FFEFBB3F98BEA2219B6FC760D79F0899143A6F7B4B388C3839C5F8B71336635 7E57E741A242DE19C8BDB0AA704DFECF3EB4A6607E4B5F67CF66AC02AAB0D235 443BDDA2E25BBA6788D4F26B173FC778DABA973AFFEB0077BCD54AD1DEBA5E77 8537F8C24A4312D344658128FB2701654B49D8F79B56731B8AA3C5AA7DC7D4AB F4A820091287BEE237714B457AD62CC5D3D6A0E513BA4DDA0492D58AE5F5E878 945B5E66A424B69B40AEB5F094E6D530B10F9B53B2CA1720AE14787BB5A5D363 6B5076EDA07C64E8B9FBE88F68878AE9C41798372A7BC12DD8988C6000178E8A EE95BD88C8206A883EB11CC8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMMI7 %!PS-AdobeFont-1.0: CMMI7 003.002 %%Title: CMMI7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI7 known{/CMMI7 findfont dup/UniqueID known{dup /UniqueID get 5087382 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI7 def /FontBBox {-1 -250 1171 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI7.) readonly def /FullName (CMMI7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 105 /i put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBBAAB71645535A2B 6F0F22458E1429F4A67307E01F0BCF6F337E0E2AD89658D880B04C26306F8179 C8121B958459B923AC3B05B594D8AB95F75870019130442FD29578D44F5690BC 7281357A5041C8A809A59D0DEE108E2A07D406656BC74A9F3317CB887E712318 46B2ECAA341F8692ACC2D14ABABDFBCAC6F35858355F1D3228B0223EC73AC56F 3C987464DB829F243E304F4C59CDE3EF6EB53A4EF9BA91510CB89A3407261F58 A2AE66880BA98FC1EF546112892494C85A2C39F9DCCAC5766725894A7AA148E9 42360AE64BF3A4F1F9F0A0D0C1AAFDC4D50C52233AA595B7D0CE557D4A010D86 6E6B76A7E9523E8A6633DA9348BC3F59302F72F492A30782AE7EF220516893D3 DE836CDE311DED9262AF01C506040541EE84AAC539B404B23033EF56D4BCE6BE B05F79CD633FE75C6728114D2749E39FD7454050F67763AB636377BA8E1867C3 996C7D7D4A4A02BC49D1AD7FF174C1F49F1F205BC9D5AE42BCB02CF8554E8F5A D1876C9285B6CCD7B8C165F75843B0AA11D8462B57077AFE75BAD086E9D9F91E 30ACFF91776132F3CACAD1CA5E08B17B36A0E45ACBAC52393B9AF9089BD821D9 CD5A9CD9BECA59F7445D63DECC1B4502D299DB85B6E2EE7C69A1DAB91E22A3A5 89B524FA20AF6005E7A586B90A2C6E5A93C9EFA4ABEF5F7E4C7B81363FE8D2B3 0AD637FA863DE787581ADD7CBE463F7866C40F4E280260ED0E9C8453E5C7E668 FFF058B9742DD3F131C264F8FA102CD0DA05F3114D13D34D422799181453FE23 2FC6EFB01BE420C930B879D671F3DFB036197874725220644A5A52DFB467BB75 8089E4F40CE9401777B9FE1D0AEE02E782A6EB2A185A454AE9394094CDFE7CFA C03C23A78EAF242E4F811E4C83B59EF4DC5ACE4AD37B41616B46C263358710B2 6137314545CA6CE89119B42A3518EC85C68DC07D26839C68B1FF55C4A9CD518B A1FB32F9C475BB6110839FCCB94156E7B3648F27245A00D2966FC4DDE3996BFA F463A663CB6935B596B1582ED0ABBC648AAA8A86068BF0038001C753C8BAFA0D 2058041DFA720B528E2D4B16196DB1CF30C779D3F4800FE662D5B60B208341F2 A66EFCB8448C2FCD12DF0DD899911A8BD96C9B670054D328790E5D388518B146 8CE92E368EB1DB3CAAFCA4834CC9D9D9DCC80FB1F34F39DACDE643052C977A7E A95C5FA8DFED9B4DCE769E4E46256D6DA8FB18FD7FA4E4CED5D486803538F3B4 6D3F5B3C03184F5C26C66DBB4C724918EBB6A89C4602E4EDDA81EEE2BD18B683 FDB459F2CE0A9CED23DC208EAA8BEDB304B00E093DEE926A7B32FDB2EC70DD85 94B9137856DDDABB402B2C76DBA87149051ADC6007018EBDD571BE1D092EBD95 76D4E063AD7D5F62E6C26EDB88D38678F2806A1F4900B0ABC4ED034A818119A4 E618F1A902315BC98F26775E59555A3DCEA1D0F8B20A9084920ECBE3F7F245AC 1182A40B518B194669D95DE968542BFF80FDC89669BC256C44CB66A2AB8CD7A9 E42C69956CCB6BDE8C09AD22EF3196939B3B84EB23A6E071A36D702909E019FF 058F27562441EB5CAE87A4407F67C4390810BE89BBE867D636468E73677B84C8 5A1228DD7DC8EADA221B1BAD5F43E832F20ADE7ADBFF170AB306F5B711816FD1 39B7882556E30F002977FB88D8B28826A75DE0D20354A2D41F2DA8578376F7DD F27B0F59D4DDDF5790E11E3957491DC74EEB7625CA49FAD90FA47AD8E0BDE824 FF326A84846A47A21B70FA549BEE307F9C6970009F963B49A504F0115777826F 1D81203F655C242FFF15BA97E3BDDFBF435B10E74CE8543C98966223818839B3 6BF3BC63F882B0AD0FDACA8C56A570277952E1D83F18BEDF084D2AC004E2B09D 70DE1740D7D220E92B54D2FD0DDEAF1E08C41FD321A8D474982DD105B23166A7 AA9E0129DC88065B1E0F9382BEB4B4E1DAAE3EA5489BDCA921AD5A8175F2841F 9400478DFA99C5E5553F383882664D73FBDFA29BF32E52C28DCE80DAF4839434 022FA515679DBC13FE98968D2894DF5DD69C49BD23D00F5D858B69D1F220F968 F0700E13873579B3CFB658972098DC61F1DD580105BC27795DB4AF11A871CCD6 2E1B9AF7F0DAAD4CE315379A7B42CECB983DAC5A2B9426B4E5E0A7F7978504C1 DD7E30063AE3CBDFB24EA2BCCDC478AB82084FD30A4793F4707D9F8F9647B413 F8A5C5AC6D5EA0E35628CE1096A434FB8286F4617CB4D0AD30A4A0B255A5A356 25AA5A947FD3C4FA44B4AA80BAB44C48CC1E2C6D0A711365A37A58C3483D07ED 301A83D2650A2E8CBA9EE62FF5C2736EC82C1402959F64527F9B640619F112D9 8E0F4A8A3078C72ACF3F34AD855AA4008C96E30D9E8C414607C34E06E29AC5B9 2EE5DDB823E8C3EEE6A8DE228313D476A7F39B5DFBFBDEDDF7C45C1C88EE6D01 7FB4F7BB2CBBD5DF7F0CBD98DC287FA6940FBFE1B3B136613A3CF16634CA7B90 53D5FD5776515EFF5D37F8FCC62D8BEC8EE2216503D54D6F2032D3C2BF861E15 FD1B45B71576F15852EEA65DD372E911EF4CC18283CD2FF4196A3F1A9D81137F F1820EC604D6C61AF318C6C5AB6DA1EDF305CADEF7CC0183B86D31310A09972C A4BC37D110C77ECCA614D1A281EE1C2040B4A5ECB31A3FC61760F608E44332D1 D2C53C7891B505A3020E9E4915F3618588FCEC80B9ECC5E637D8D0F3C94B1F2A C53FC46CAE0AFAA7E12266C212A73AAE60199752C042BD55A5DF1CD07FBDB830 C83E7832D8554AD9C9CAEEC7CED1DAEE622090897641CF2E5B34A353D83264D4 4687522DB290D3BA927BA315EA5D25B0D7B69350C6C180AB0C322B05E01F7C7D F2F48651567F0C1B49AF3950E43C94D78F7B184BF2946B924BC4279AED28F3A0 17A7D8B235698A516D3FB5DF0B18A422B2410C385E7E9439C6D60917EB3299AD E31471616251FA40C9FA098109BB31A54D9C03B2F12947E4E9252A0851B81C4D F39E7FC44752504B589C3911571B1D3EC3BD1E1807F99CED1DB20270E483A805 CA2A016E7283550D1B1D35C226FAB63F983CED41A4D02A2F228FA9EF065027B3 CC69D6F2E278C0A2D238D3A37154B0D22281F62C61D9182A69657B027BBDED64 11E261E47620602F865221A534C5A32E2BF5B93A187911A146F2E96538B47DBB 7BFA7EF406FE940F4DAD17E6E4B80C4F031D71F65657C2F5C8233EEAC68DE8A7 E1FC3055C122C1795D0C71A0284F89A9BF04837F61C9E08DB42644A490C97D34 A5D3CEE475B8D578205005A0D68AF94AD27C0E855BB8EDB74775690A4EDD6543 BCC10CF13283D6FA8A7CF3FE6C4F96470A11FF0B0160D3F9816B13B0BAE0D8F9 B84C7631063FE658D13D108D6FE24A89799FABA72E6A6D1C943922CBE676C1B6 11A4106ECB4F1A7F8A84B2783C2E6A109C58D63FC0B74D8C8A1CB62D527441AE E656D94B1AA8581B4F07B653ED6486AAE1F8ADB30FA8D8914AF24721C74B0908 D84F2EBB91144ED4BD7EF533F2584048DEE37E17CDE5FBC2992A6F924FEBAF07 B626F988599DECDAB43C931CFECF99FC6EBB72F8E542765C26295902DFF60B7C 7B9ADDB4858BC9D808B7F0909690CF8DFBC59A786D48B891937C31A219842A43 234425B4963062DB4C4E9F534C77F4243408805B5A6B8BBF428632CA4AC03A7A E336DD181CE0CF3E742079E2919EAFABE16A63299771BF276EFA8D85C920F995 5B9D4E8F1ADFCC5C29AA89BF90C186C5DE7679906B2FD4DB279D245D27D08837 D3A8D541FE37415B706EC585C05804108C1D938E543B8B63E275EE85CE9DD843 0A8B9163144B77DA1A552A25D5E77E94F29CF252BE9950F4E627D5F72536B6F3 3278D4A45D10759F16AE42BAE8460865FEE84537F8EC9BF4813570E883B826FD 1ABF3F4E66DB6FEF8366E07BCF290EA67D39C9D81B2A7EA48E0A228FE3D5AA50 1A56CCBF229C9AF2537A8FA70EEF41096ACED34CC7BEECA4EA1F23B39FBC39D8 CCEA93E63F508CBE6722C11467A3D0D5C4C52031DE43C449333E4295104651CE E13B821D7904653346067E971BE0042C571ABF40C3A1079A675FE4264B784D46 1B8FAA4CDE9851C4EBF69ADF51A7B68CC8706C08D13A44909D4C1D78DB0E0B2D 0E0318304B229DD2FDC968027CDFF65722059C62154304D6F9C3F06DE22914EE 928B7D1BF1FC7E74B4D882998D59BC086AA2D4EAD0AE39F6B75B5A3FB9994506 E21731E1A15F0F2D12F88724BA72898197A80FDAC00243A3038871EBD2F2BAB1 C616278BB78490CB86F552CBE5DD0862F3793D72C68AC16AF8E38FE1A523A5FA 9B0428745B1455671CFA1F6BFBCCF9CA23C833113C2948E7A6AEFFF1A83509FF C559BB5EE7F92BB43F7F37A371E661C826F63DD0C1B25E34A8119E71EC82FB66 23C7B126FB6554E7560B1B69F2EDBB742F3B20D1648C151C37A8570CBD330A9E 7592A8607D2D727F3AAA0FF2057DF4E2A4C7D3B658C6CED38824A770420D89E7 F6AD385DBCE9C9A9095CF0042052A67AB804A6675BB9373A99390CBDFB715984 A069DE543E4C6ADD7F1EC7A15392EF834EAB4584679A43443953427DB13E6959 0F2F5061C99C6D00FA5327FDB5330AEDE19A53DE3AE092634DC6AEEAF63A5BED 990F8A117AEB1CA0E7F7DBE02CB3D86465F1613B976D1CF6F3A1E69740A2FDC8 062ACC45EDA6B863B60015F276860FB79C31D28F97A799568E66D0A8757B2C41 E939337B467303041D0F4C59390B2E41E5F298F275DCC699D27C459ED4D5ADBD 02539F00095D7E1872862142B46BE06513D3EB1A406E6BAA64BE795122100F09 C37E5D1834218EC1D11B031C7DFC9F5AB071A8F4DC08203821366959E9191D4B 289682D915AF28CE5858F83338DC51B6B0DD052A181D9133FBA50CF18F70EE65 C33726A0450EBA9D0E0C3662AF6C2121AB7911AA9880D6BB6811D6D7515888E7 199A0E632104059A88C9D85B19BB35EDF4AB95E1515BB2339572928BD5FE8CBD 2D4DAF55DCFE29FBC4C3D56336277BA0C9A889A129F9FA7052AD1420B8705163 1A808EC1284C888D78CEA2B4BAB71AD76289F5F4986008FA9BF328E8537E6C91 E11DBDD8447E1C9ACE18DB0EC3D5742C264C8EFA445C5D16C2930FB43669774F A2CA52144D99EFA8FC427DB4128CD4C036A8C611B087335C780740FAA419D39B 5DD68EA89C95275F9254D947EB3683D0130255269B10C6CFF29EA0BE484C9949 96188FCB747618A8044E2E37DFFD2DB8ABB621B34DC024259340677095B6937A 78EDCF508AC91D4CEFD872AD73F50582DC8807143CEB9F109C84DC5DA30B64E2 E56DE973088A9D32583D6946DB4F3523902FB1781D993B89D5F56D79D5D98CC1 7FEE73FC3A7D1BCCE90179AE450829E228B4DEAD3B2B4C79A400CFF899AB26F9 048B0875EBC871AD23BA96F88CDA8B87FE5809A13889A6AC349ABB25E54ACAA9 C213C5DE2D01BCB9CC0D7BBD384D23AE12E289FF8FDF1F611F5E14D4B20B15A3 42D9B3B37A83A9CA39B5DB6C8316C51B70F211530A56CFE54D63E88169CF5233 D1A7B2388025B3EBD2BEE0716C3A2D589EBC7A42B3DA602AC4E2FD9C9052C922 711E44408DEEA1FE0C9FD50A39AD46D437F61F284A2EFD42EF158EDD71A1486D 4865D6B5E20E60F4F4FC3D646909FF1EE2D7573665E4CD8340A1B232CAC0202C C35BA9BB3D2267C7E78518F6711633F888EBEF72DC750AC2CB362D528CFC8B2E A1AE1C05456F50EED8CAA768DEF47FF85C4322F02D7F9D188C6F285C674EF589 251B0B913339FD701FDB281338D96704ED7ED908BC113B4275A24D058955890B 12CCDD5572D63688426B0E1E9A40D6AAECFA5555C1CF9DBEF8C04CE1E5A63F14 969D39B6DAE8A91F6AF4CD1E2DA89A4661DA34E272B6032C442C031F081F5DF5 858F4620885773D8A2B2F5EB6DDA74C1408DF279900450E4A3E80BA9A9B1295E F24EDC3F6EFD81A741EF74B0202820516C4FB720687BDD915EB2396128C3B262 20E3075DA153D6FD36E1C05B855929DAA4DE694B6F15EF2145C63250B24B031A 4CF0AFDB225E91D99828B83BD90F1702D3906D45872587A3A116B138AD9627CE E778A949C392202823C670FDBC56F1896FFFFBCF52C4B400F67BA36B5FCE44A5 F18EEB8ADFC088C99DFF8E0A593E81A5ACA2E3693005F723C7D3E0AE2BDD3805 8C6007A00542DEB2539709558A88B21003CE4B2C7817AF207ED576B25A41DEA0 FC55A459BEB00ADB01309B35920F04F84B7B64F95AA99EBCB843A06CED900D99 97BEFD7CCB9F4D85876F10160C8D63E2FDE82B7A8D945F37CC9933ABE0FD1D76 268296B1A5AB06B2E814691128771694224781171DC6266BCC290FCE1AB59416 85530368115BABD4F1DE45952918D1945D51EB713C283DAE8EDD559F437CD886 A4B1DA6120D685C284673A3EE489FC1AE4297A3623B339B7D886B6B4B8F9F4A3 7BF85E320A52FDC6323B51879B98A14C33C567BC069D9B44616514EE1BE36F90 EC5FA33E1B6B0A46945D876EF0085E74935DF2560A03321861A752E59742B9FC 5C501FBC64BFB1602459885B63873DC857ED37F8BE1A9C6E9517B9BF5A6161BD DEB6DB0381FFB34A8A96AB4AD48BEC40D4C198ABC599C3758AFF638AA75BBDA4 8545D5F95FA426FB25587301A43E176F6CED7851E815AD907F2443E70740DD2D 4FBD5D978B9B37F59D6DCF0ADD0F90825DD23558FCB858513602C8BC82BFA383 7AA6DCEA4009961D06DF233C5381A7F9541259926446B2F03664BC5978A1B6CD EA6EBC9FE6100A65959513EEE32E69D47B55BAF30A893D77142F943982019C01 715CE29923795EA01C58A798979939B507C5B29A32881877EF7EF0C5CB3DE591 6B9A6C3F3FFA847F396A396F078860B59850BA4CA3115CA2376AEE6B30C05DC1 6F9DB6781ED0F9D45D10E096C33B1B7CD12A9D57C6E49AD833C4B093DC82811F 16B3BD902BE764A1680831EC5A6C1CED84AE0DC0A65678EA5270BF20931E6409 7AA44EACB22CCA11098F8A51096BE83A1ABA56C9EED4195D5CCF24FDAD92E823 C439DAAFBFD652157D728F2754F28304710D3CB33763156D76A259D446647A11 493FAC70DD28063A4CDDA162F72542368E1AC2826C4BFF7109208F66371910C1 068F21779FC39DE03AECF1C9FB2F417930C22791961D801284DCC89B0833B6A8 D63F153ACBFB7B7D547924613BBCCAED37D90BAC5B0264ED31C7B9DA5A2BC620 9B20CA48424D0FF58905BCD6190BF4B5FC6ECCA1BCEF13426920197CAB41C4E6 E82E8EE7BCB23C6BA6F8B58001533B225ED721D6CE3D6E89116EC33CAA6E905A 649F8C6A1AA187A48E20DB864596481976216DB78F0F57543DFAE3CDC0A6FC77 2CAA49442527A5D94DC54BE93C875690CBE52EAA4EDD9F2A511361BC0F0807EE 96AD0D26B62D809E82EC14EDB158EF48A748A6FE0C3A7EE5D4479B35425F35AD 3EC7444F6FA75CEA5011AD571078293448A33C7647611CAEE87974B0A756DAC9 4E1BA78DEE477FA59AD50BF5C52E068A5E044A4A4994D5B24CC5045F768A3C51 D4F65E2A5AFD271A7666C6835E28C60751EE528C0742433165AFBE71562A3016 F59676D56B0B5F7E4984D664BC3ADDAF24B4205752EE21D4B57057A943018466 09C3FA5D2C5BCBFC22A643586BC9E7A965DC34C0A7D272B5B1617BAC2B0CB510 5DD5EC6F7ED1226D19189FF547776698FD48B7A6A038131F869A9E24006A4FCB 9FDD5E4A6DA9C531E1F1D1F0131CF8BF06B78BD2C6109E3D5251ACCAA6661142 7E0CF66D8C1998ED3DDDF69890FB2039F35BFBA2D9E6EA42F2E2E88E8C66D0C7 6B2A404F1C72AD3C0A327A90E16092E727CB2BAA0128995EB7C99569C8CD11C3 77C294DC2CDA70D0CB20DC0EA68FFB6BA42D64A1609E07F378A1AE072D1E66EA 6A88B6216A65BB5D731DF9B83A7A1136A9CE874779495E7C1D5CBB3A4F47906A 09156C93994992C526D0C9BD0129976B790F553FB2400B78F2857FDDA9C4AFF2 AF6A3334700FB3733F881FAF164591DCF506611CBDDA1E075026F2E98E581366 76C64A391601CA4FBA8CA906ECD13A23F4B7E7B39B39088D010DA238CCD5FBD1 DE4A90C188432793EEE6100D31754A7E35006BE1525B491190A9349D56CF1571 8CB1A7FADB595012FF87C7C9D63D48DA49C6FF1DA2DB4BE5C17C3390FC33FB05 F07F8B7B098DC4CA6765975D8649B09CC02BECA011A3B9D350E5603A9909A1AF 0618554EEF9AFB0A94F492AB24913B20B8A441480122050457CD7CAC1B2FA3E0 EF9896A70C1C8F045E8FCDA8B497C8DF6807BF9B4C51600E2DC1C68CF508C6A7 F39A0CAA4BBD71A361A882A23702AD90D117FC9367CC496B62C3BB2967C63BDB 25A9DCD7A0E28345E6C903AE58C6C05D84077445CDB73865454B18D20A5F371A 03FC84B30EF621C5974C95C04DE90F179C63FD778579C69637E7460D0528C76C 7C21AC92AA6043F2FBC781ADDE8DD8BFF211 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /one put dup 50 /two put dup 58 /colon put dup 84 /T put dup 99 /c put dup 101 /e put dup 105 /i put dup 109 /m put dup 115 /s put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD10B4729E5749A10EDBE644886443D1249 2C8517DF8D8AE98E2882439FA81903941B363A7D885F93C6DF9E1FD89F2F8CEE B870C409ED13E78B4C914813B0A01DF8F876EDCC4F384055FD37C575726AD69F F23D50EC5BEE2FB95A44F2B2E2DD94C933D90BED2C97B53738B4B2ED56EBE617 BEF17B9DF4F314A37F10FDE34C570D7BE76A496A58242F51E7321380CB042424 855F4B53071DF5A0DA5A31B8AAF9FB4F4C491625FF8FD008BD4402918043BEDF 77B840B2BE0DAAB4EF904FFEF935954AFB9BD2041241B1BC8519EB642C89E288 479664226DBB6F1171F9EEBC7E1273D0CABCF6B1BF7F26AF21C21D9B1B916F4F 603DDB68D3614B86566FC91D67AC3F4A4A96E256FA1A3BD35F4465AE4EC64D82 34BEB4BBDDCEEBD9A89D932E55F14CA2776F927C4FD3E0920790A57DAEA08C5B 169A3E2309DA6BA8684A5D1DEE81415796E13DCF906FCDADB092047831B16841 B250CD148557D72DD7E683BF122B38E2C4F614E59B395D1D9823D7D5F126D932 14B50A37FCA7120F8F3A8E42134F1B6B0C248D56F247AA68FB941839F600F61C 14247EFF780BBA3E5198D37CED44DEEC3455048FC451BCDB48DC414AE5293A60 5A59877D6A42FA7AF1CD28488C1FA0A2D5D57551A68A6479A8FFA785C2BD2D32 BB5F20CFCD667AB094E382D582BEAD23DF0A82CC481E2DF2F7B0CE752DB13736 3373816937321F70D50D6D61F24053B2D53F0D9435B8575DDAB8AF9358720367 9A974E13D88C63121A3196210E0C1363B06E0C4CB49A374F2A0C163CE0512B66 7AC78A09A780813B1FF02AA967B12AAFAA0C4E797EF349A0EB76D9524D9345E8 226E83D3291C80B65FD333DD6A1DFD3F3CF2476231B11E3005F3F94074622377 3C8BC72E954983FEDEBF29C468F87096011692AFE293731EE7455CCC4ED0ABEF 6C73B6DAD196A17D4F415D8447ECF70B67DBD46643BBB2D9CA0825E4E1899778 6BA72E91BA1D2759753E96A327B6C55724D80DABC4D736411942BBA8CF08157F 21D63C12E302B2AE8F89259944B1272B1259D760D7B237396DE5E7810D69F242 8045CD609E23CE37791362950FB7414D0A2A7969C4C1E24E272A91C5C70D329E 38BB46FD05F9027EC85A5770A26ABFCE9BB6F317D1927FD9100CAAA63C6A4A24 A808A932650890ADBEF2B23765A431C9C05777C5F9FCE9085CF55CE0548710F8 4BF0C35052FE6AC212A20E02B86BE559E9AB16B32D0DF190AC6B9BECF2190F31 C568C908C2A31E6042DBCDB81389EF28815477997EEA26D31D194DA347C0CBC9 18BAEA0A5CE7E682B6A859D852D22ADDC8B4AAE9F220003BB2B2CB9369704CE8 5F5ED2FA84096D5D15D9907749FA6204D5078361834AC6C0217AC49887C1D62E AF131698FDF6B55E5B1B11C5AE8BD7FBDB7BA6E90874FB1A220AD14E1EAE70CE F7F489BEC25D3BF60959056C16E1C212D194750A8A223D02F28A0B8845A098A9 E13C19B474AE0A92A80ED24D98F32BEF868FB88DCAF45952353E6ED578ECFAE3 57393BDAA439A6A4C2D2B002B45B933534C0B4C51DDC50BE37BB6E42B8FD6393 AF6603E7BE95D2B9E8B9F50EFE02A94198A791978C912521569844012BABB5AD F93891FC191896A1A86CA2E5957BCA0EE326B90C882E7CA0051D10AE4C979806 8F254ED1A91F7031FA0B828C89F0402B564D3F8521868D652CBA1DD239AF01AD CB322583134466D06C6B6F759FDB452EFA0029231EE1E3133136F8B9E2C7CAA0 CD72D2269D74A4ABCBDDE3DD98EAB24D30A19E5C5D55EAD0550D79E5E4EED921 E877C70FB87C49FD0D18CEC4306702D0E91B068D1E432A2C5F1530543806F108 6EA20848A86EFFC39673E2D4368C6BF53A039A8517BF2DB8E77F5201C8A04618 1D249305DD002F50F36A89F0400BFAC3A533E44F41CDD70B221266D552DC691C 78E23E6FDABD6C8150FB4B1B0B028D6A21389CCFDC5FC32406ACD3E3CAC5159F 4F3FED91D570F9A604E1937BA288E6F7F5EF5F5C788487890E9F2A1A8AFE1CE1 E993C94539D461C1B53FCC48784EA20B5F7FD586822E597FC6F6E0B8C34E8AE8 162B8FB4D09237C2396A5A7BD8631FB26FB458A47AB5FDB14365B551D5489030 C1FE9277426CC659731E2435367E24534F36E0684C7AF056A69D43BA41A51116 F20B32D5A200D311ABFD9C942087AACB2B1E4EF9E1280B1852D5EBE27D2466E8 97DA1F9C43DA91D2701CB7A4AC25EEB794446615226D34EEA5D2D5A25E176D10 E70984633DB2203ED9BF9F14DA81F778D8802781AD3E51C984AD2E577BF4A90C 0A7A3796606B875865C56EC5983994F695A0A1993E736C2AC98575E4DD4696EE 66B2BA477D13141991A598363952A06703CF8738CE452C21319C42A23DF5B583 E2B3C570319F66980ABE0ACCEFBA3D2977040D8E3EB331187243D9D49DBCAF4C 6205808A224EE853AD4E54905F25CFEFBC2591A87D0CE5AEDA30DA4F11EEEA10 3137618B2BEA401C06D3D5E81C497121E89D672888605828A5D33BF71AB47461 4D9A42140FAE137A7F48B332D4210F204854AA899ECE4676D80F8AAA5305D162 D03F2BA7FABABE7F94C0E09E6D9FBFF9E42091225BD1B26B4B1F951D83972DEC D70AA8987112F05C939A6FB07CF24413281F866189CA8DC2EF6F0410A1FA92CF B6D33B1C4E7FCED8816FFF15F540DAF3B29B92C547B56DCB53F9792361A8CC60 ABCEFF0F3F23B33A64163C8BB9397196E1C263CB1ECE2B1F6DB3AFA1BF4B117E 4BF697898780190F1355CF7A154765411925D03D58A22DCD2AEF5406DF4668F2 64E859A014650DD9C516FFEE68BCBEA7419EE8E4262876F04BF1B180B36040D8 AF94F0747C51AF468981751B8E0C9251DD4C68226F267C021CA4C0E99CAEC2AA C50A7A8CE5BD7B6F491228740146E27096709E279D2309F21A88A000784867CA 329A82F44834A395D4CAA4CD6992FE9AC85200BB44DC345608947C80FF139D50 63A575FDB831BCA5BC4899E7B88CDC28012DA319B643AE0E6AFFF1E138C8493D 65E6834192E0853AEB5B7643FC865E744107C0DB2502C4C4A91BC788FC12516B C85BC89A23C2C6A28D20DD8A6A3C971A03327F4F98F4D0DC2A799D6AD10E3D85 4A57C9880CC89324A79A0CA3F1783DC42D7C0BFA2C42E085C3F897F0D49D1161 EACCC4DE5819A5C3AA97AD291A3032F4198B12D0D7A61B06D63389AB640B7420 7F0434C9599D055D786DC25523AF3CDCD644FF9EDA896ECFFB9944EB7EEADEC7 BD012E823A33321B9462C1198EAA9270AE8B04E3F4B760EF786A761A5F7843FD B3F18140BAD03E0158DF81156B6588FA78F249C39845E6BDF1641A7E9BB42E02 CB0BB9343CCF301F1F53A4A8DD396CE859EB7B54ACCDA547DA19D30BDC742E3D A7F4813B88292A4D0926E17439547EDB2806235D9D7D9129C8A538E9E40791F0 47BF1459FC997AB2BA2F9E78B3E7BD30B089F5F80B5C63FC2C4512D85CBE50B5 E511F548989BA3C67641CCE84BEE2B9FA16B9012FAA871D4A4B4FAC5CACBE15F 3153B48B589A8A8A0CB30FFFB563E5D1406441D0444E37F24BA2596E4747528F 6D503237B9F75D55DE40017827CF2F40115BF8A7BB32F7D29BB52326EF7010CC 414B02C54F4A7FC6BE441B0F61FCB2AFDF0955C21F2A76D9B9E0898361BC9790 8B03BC66EFE9B7E606DD697A4AE783E1B58285083719A578C764465BB5AE6605 B8A7ADE9F895C972355C5B941F50B0DB832656F8E76AFCCDBCB1E5C3A79A4975 48D548EA0EEE00188DD29F8C8DC25126B903D06F944A73CC5DC22D9C3CAB6E2F C94DD9C1EB388944F46893A8E5FBF0DE600DBE7387C953CECFB9AA7C9D17C1F1 01CD90284DEB91E97C50334C156FDD8B8402220D0AA6C4D0CC75F6E725DFC714 91D7F7EFBF76FD30BCE9E0DA785B4B66E57BADA803684DC21891FCA79A0E6BAD 7A714B2561F3BFCA23FBAA7F725D9DE5DC425E020A65EBC2F85D7AE66F11F920 1AD4167B77773EE63AB064C8D7C10EA5C9B822D49F5CA2318B9DC925189BC49C 88A31E642B429A60FB107FF8083A1E3CE13B926239A5605AF1F9344A73920417 72AD0DCC9B3A10B1F9CCEE6920484F5700C33040DA66E66A9995FA5B117AE9B2 AD8758C27F821DDA65907598F3EE66D811DDA393FF99D7E4B9C90790F45B90E8 54FEDE45AE507F9E987BFF931BEF04840386765C9F1E4A7F21734ABC337C672A DCD7134F75A3B9C6936AAA730D0C2A01D2ECBEF8341E4AA9FBAE955D35F82DA2 BD6E375B8296EBEFDF67ADDD1199B3489FBF70088277DD5092CEF25362D1C0CE 18404050364236F8EF19E3E2C7A446C02ED24485737ED748A72E3F0F13EE11D3 062F4AEE524A43990A60C61B1F8E950CFD1D217D7C7AC3ABFB77C14DDD1A29DC C155C4E1B0C4FEB26976F9836DE58EEC072B98AB220976B1D3EF6C195BF23BA5 0F0B7DDD7F5E2DB252A1D404FFB4E8B80349E3513C385B9B1B7E3E58581D1CA7 53B9CFF195056C3866457A419198A9DDF0EC0735A7EBB872BC7936D24A8C8FD5 F17C7951CE86D4E2DB760750DA4EF1F2087AA80130EBAA385F77DA728261F3C5 DCC0A8D22518208A890355BF47BDB825E83C214B1A6B7D3D7D16A3254EEB428E 1CE31F8259A3599D548F402CD38A6E6E7B2E988EAC409B813079E96584113B25 1886E82B3442BBF6BA88191C009FB1E074BBA26DE7F97F34346DD7DF6D1E221F FBA66658B199215C2C0681A42D170E0F61B139F5405402BF2AA5E11CD58E68F3 BF4441AC79B3F5A52118AE0888DE9408E587691DBEE539477D3D591DCAC49F95 12D1206231FA7EC78BC826F2EC2F9ED156C810F2BD65804C0DDB80B53713A981 DC219292F660D220AB9158B24E59A7287D8E063E7B16F35C6BB0CE32B3D2E171 F7F64904BAD040407227339502C857FAF6058AC1829843AB9167E1FFDA98B3E1 FCDF81530BB54A9A5612818E9EE4260DB5AA01F5DEEBEDD4A730D8682941FFBB 9FC6B58A353B0708A3B141ED2E97EB495A8428872F8E8703FFB5571DD1B68FC5 C92110EBF2E54655FCFD2051D75C1ABCFCD2A649D5A849884A36A81AEAB7E8CE 1479C3D78B2718CCD560FE8F606C309CFD7D95ADFA5C4D635A50A5B063D85C68 F515B26DA2BBB92F9ABEC74168EEFEC94476843F602696B72DB620599841A6E0 9501E10D7DB5EE7FF3E46C238BD2872DD7B3330B76D227B6571E96CD57ED179D 0A95F2E100422CBE88F83B2057A3A4917F6AE4FA4084F3D3DD0CB2FC19AF2C91 6A2DA46A2E2641DF90F4DF83E2137D103BB030AC43C12546683E4637E91009DE 4E5ABE82B704E28F50AD9F28F2FFE11E409D1DBFAC0B4AC3DB2C7C731A70AAC3 4C 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if TeXDict begin 31861906 8176887 1000 600 600 (./tikz/all-figure0.dvi) @start /Fa 204[28 28 28 49[{}3 41.511 /CMR5 rf /Fb 140[26 4[37 55 19 2[19 1[33 1[30 1[30 1[33 12[47 1[48 40[26 26 40[{}13 58.1154 /CMR7 rf /Fc 150[23 105[{}1 58.1154 /CMMI7 rf /Fd 140[33 5[69 3[23 3[37 1[37 14[60 25[23 7[42 42 49[{}9 83.022 /CMR10 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin % dvips-unknown statusdict /setpageparams known { hsize vsize 0 1 statusdict begin { setpageparams } stopped end } { true } ifelse { statusdict /setpage known { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 0 0 a SDict begin [/Producer (dvips + Distiller)/Title (\376\377\000P\000l\000o\000t\000s\000\040\000f\000o\000r\000\040\000G\000N\000U\000\040\000A\000s\000t\000r\000o\000n\000o\000m\000y\000\040\000U\000t\000i\000l\000i\000t\000i\000e\000s\000\040\000m\000a\000n\000u\000a\000l\000.)/Subject (\376\377\000U\000s\000e\000d\000\040\000t\000o\000\040\000m\000a\000k\000e\000\040\000t\000h\000e\000\040\000p\000l\000o\000t\000s\000\040\000f\000o\000r\000\040\000t\000h\000e\000\040\000m\000a\000n\000u\000a\000l)/Creator (LaTeX with hyperref)/Author (\376\377\000M\000o\000h\000a\000m\000m\000a\000d\000\040\000A\000k\000h\000l\000a\000g\000h\000i)/Keywords (\376\377\000G\000N\000U\000\040\000A\000s\000t\000r\000o\000n\000o\000m\000y\000\040\000U\000t\000i\000l\000i\000t\000i\000e\000s\000,\000\040\000G\000n\000u\000a\000s\000t\000r\000o\000,\000\040\000m\000a\000n\000u\000a\000l\000,\000\040\000p\000l\000o\000t\000s) /DOCINFO pdfmark end 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@9} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0.0 0 100.00128 0] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@10} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0.0 0 100.00128 0] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@11} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0 0.0 0 100.00128] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@12} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0 0.0 0 100.00128] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@13} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 22.50027 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@14} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 21.25026 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@15} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 20.00024 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@16} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 21.25026 23.12529 25.00032] /Encode [0 1 0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 0 TeXcolorgray -183 -377 a SDict begin H.S end -183 -377 a -183 -377 a SDict begin H.R end -183 -377 a -183 -377 a SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end -183 -377 a Black 0 TeXcolorgray -600 436 a SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark end -600 436 a -600 436 a SDict begin [ {Catalog}<<>> /PUT pdfmark end -600 436 a -600 436 a SDict begin H.S end -600 436 a -600 436 a SDict begin 12 H.A end -600 436 a -600 436 a SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end -600 436 a -596 432 a -596 432 a -596 432 a pgfo save 0 setgray 0.3985 pgfw save restore save save 0.99628 pgfw 0.0 0.0 moveto 0.0 0.0 moveto 0.0 123.30862 lineto 241.6876 123.30862 lineto 241.6876 0.0 lineto closepath 241.6876 123.30862 moveto pgfstr restore 2.46857 108.51219 moveto pgfstr save save [1.0 0.0 0.0 1.0 5.98839 112.03201 ] concat pgfs -596 432 a 0 setgray -596 432 a Fd(Time:)37 b(1sec)-596 432 y pgfr restore restore 9.86678 54.25609 moveto 98.1871 54.25609 lineto pgfstr save [1.0 0.0 0.0 1.0 98.1871 54.25609 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 98.64539 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 97.23601 46.12158 ] concat pgfs -596 432 a 0 setgray -596 432 a Fc(i)-596 432 y pgfr restore restore 54.25609 9.86678 moveto 54.25609 98.1871 lineto pgfstr save [0.0 1.0 -1.0 0.0 54.25609 98.1871 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 54.25609 98.64539 moveto pgfstr save save [1.0 0.0 0.0 1.0 57.7759 96.9019 ] concat pgfs -596 432 a 0 setgray -596 432 a Fb(Real\(signal\))-596 432 y pgfr restore restore 54.25609 54.25609 moveto 83.84894 54.25609 moveto 83.84894 70.59998 70.59998 83.84894 54.25609 83.84894 curveto 37.91219 83.84894 24.66322 70.59998 24.66322 54.25609 curveto 24.66322 37.91219 37.91219 24.66322 54.25609 24.66322 curveto 70.59998 24.66322 83.84894 37.91219 83.84894 54.25609 curveto closepath 54.25609 54.25609 moveto pgfstr 79.85257 69.05252 moveto 89.71935 69.05252 moveto 89.71935 74.50185 85.3019 78.9193 79.85257 78.9193 curveto 74.40323 78.9193 69.98578 74.50185 69.98578 69.05252 curveto 69.98578 63.60318 74.40323 59.18573 79.85257 59.18573 curveto 85.3019 59.18573 89.71935 63.60318 89.71935 69.05252 curveto closepath 79.85257 69.05252 moveto pgfstr save 0.19925 pgfw 54.25609 54.25609 moveto 79.85257 69.05252 lineto 79.85257 78.91931 lineto pgfstr restore save /pgffc{0 setgray}def 79.85257 78.91931 moveto 80.84885 78.91931 moveto 80.84885 79.46954 80.4028 79.91559 79.85257 79.91559 curveto 79.30232 79.91559 78.8563 79.46954 78.8563 78.91931 curveto 78.8563 78.36908 79.30232 77.92303 79.85257 77.92303 curveto 80.4028 77.92303 80.84885 78.36908 80.84885 78.91931 curveto closepath 79.85257 78.91931 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore save 2.98883 pgfw 103.58255 54.25609 moveto 121.23137 54.25609 lineto pgfstr save [1.0 0.0 0.0 1.0 121.23137 54.25609 ] concat save 2.39107 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -3.52684 4.70245 moveto -3.23293 2.93903 0.0 0.2939 0.8817 0.0 curveto 0.0 -0.2939 -3.23293 -2.93903 -3.52684 -4.70245 curveto pgfstr restore restore restore save [ 2.98883 2.98883 ] 0.0 setdash 0.3985 pgfw 54.25609 78.91931 moveto 147.97185 78.91931 lineto pgfstr restore 128.23825 54.25609 moveto 226.43289 54.25609 lineto pgfstr save [1.0 0.0 0.0 1.0 226.43289 54.25609 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 226.89117 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 186.1893 45.50581 ] concat pgfs -596 432 a 0 setgray -596 432 a Fb(Time)22 b(\(sec\))-596 432 y pgfr restore restore 133.17542 9.86678 moveto 133.17542 98.1871 lineto pgfstr save [0.0 1.0 -1.0 0.0 133.17542 98.1871 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 133.17542 98.64539 moveto pgfstr save save [1.0 0.0 0.0 1.0 136.69524 96.9019 ] concat pgfs -596 432 a 0 setgray -596 432 a Fb(Real\(signal\))-596 432 y pgfr restore restore save /pgffc{0 setgray}def 147.97185 78.91931 moveto 148.96812 78.91931 moveto 148.96812 79.46954 148.5221 79.91559 147.97185 79.91559 curveto 147.42162 79.91559 146.97557 79.46954 146.97557 78.91931 curveto 146.97557 78.36908 147.42162 77.92303 147.97185 77.92303 curveto 148.5221 77.92303 148.96812 78.36908 148.96812 78.91931 curveto closepath 147.97185 78.91931 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore save 0.3985 pgfw 147.97185 54.25609 moveto 147.97185 78.91931 lineto pgfstr restore 147.97185 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 146.27678 47.52606 ] concat pgfs -596 432 a 0 setgray -596 432 a Fa(1)-596 432 y pgfr restore restore 162.7683 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 161.07321 47.52606 ] concat pgfs -596 432 a 0 setgray -596 432 a Fa(2)-596 432 y pgfr restore restore 177.56471 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 175.86963 47.52606 ] concat pgfs -596 432 a 0 setgray -596 432 a Fa(3)-596 432 y pgfr restore restore save 0.99628 pgfw 246.61725 0.0 moveto 246.61725 0.0 moveto 246.61725 123.30862 lineto 483.36772 123.30862 lineto 483.36772 0.0 lineto closepath 483.36772 123.30862 moveto pgfstr restore 249.08583 108.51219 moveto pgfstr save save [1.0 0.0 0.0 1.0 252.60565 112.03201 ] concat pgfs -596 432 a 0 setgray -596 432 a Fd(Time:)37 b(2sec)-596 432 y pgfr restore restore 256.48405 54.25609 moveto 344.80437 54.25609 lineto pgfstr save [1.0 0.0 0.0 1.0 344.80437 54.25609 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 345.26265 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 343.85327 46.12158 ] concat pgfs -596 432 a 0 setgray -596 432 a Fc(i)-596 432 y pgfr restore restore 300.87335 9.86678 moveto 300.87335 98.1871 lineto pgfstr save [0.0 1.0 -1.0 0.0 300.87335 98.1871 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 300.87335 98.64539 moveto pgfstr save save [1.0 0.0 0.0 1.0 304.39317 96.9019 ] concat pgfs -596 432 a 0 setgray -596 432 a Fb(Real\(signal\))-596 432 y pgfr restore restore 300.87335 54.25609 moveto 330.4662 54.25609 moveto 330.4662 70.59998 317.21724 83.84894 300.87335 83.84894 curveto 284.52946 83.84894 271.2805 70.59998 271.2805 54.25609 curveto 271.2805 37.91219 284.52946 24.66322 300.87335 24.66322 curveto 317.21724 24.66322 330.4662 37.91219 330.4662 54.25609 curveto closepath 300.87335 54.25609 moveto pgfstr 315.66978 79.85257 moveto 325.53658 79.85257 moveto 325.53658 85.3019 321.11913 89.71935 315.66978 89.71935 curveto 310.22046 89.71935 305.80301 85.3019 305.80301 79.85257 curveto 305.80301 74.40323 310.22046 69.98578 315.66978 69.98578 curveto 321.11913 69.98578 325.53658 74.40323 325.53658 79.85257 curveto closepath 315.66978 79.85257 moveto pgfstr save 0.19925 pgfw 300.87335 54.25609 moveto 315.66978 79.85257 lineto 315.66978 69.99329 lineto pgfstr restore save /pgffc{0 setgray}def 315.66978 69.99329 moveto 316.66606 69.99329 moveto 316.66606 70.54353 316.22002 70.98956 315.66978 70.98956 curveto 315.11955 70.98956 314.67351 70.54353 314.67351 69.99329 curveto 314.67351 69.44305 315.11955 68.99701 315.66978 68.99701 curveto 316.22002 68.99701 316.66606 69.44305 316.66606 69.99329 curveto closepath 315.66978 69.99329 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore save 2.98883 pgfw 350.1998 54.25609 moveto 367.84863 54.25609 lineto pgfstr save [1.0 0.0 0.0 1.0 367.84863 54.25609 ] concat save 2.39107 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -3.52684 4.70245 moveto -3.23293 2.93903 0.0 0.2939 0.8817 0.0 curveto 0.0 -0.2939 -3.23293 -2.93903 -3.52684 -4.70245 curveto pgfstr restore restore restore save [ 2.98883 2.98883 ] 0.0 setdash 0.3985 pgfw 300.87335 69.99329 moveto 409.38554 69.99329 lineto pgfstr restore 374.85551 54.25609 moveto 473.05017 54.25609 lineto pgfstr save [1.0 0.0 0.0 1.0 473.05017 54.25609 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 473.50845 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 432.80656 45.50581 ] concat pgfs -596 432 a 0 setgray -596 432 a Fb(Time)22 b(\(sec\))-596 432 y pgfr restore restore 379.79268 9.86678 moveto 379.79268 98.1871 lineto pgfstr save [0.0 1.0 -1.0 0.0 379.79268 98.1871 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 379.79268 98.64539 moveto pgfstr save save [1.0 0.0 0.0 1.0 383.3125 96.9019 ] concat pgfs -596 432 a 0 setgray -596 432 a Fb(Real\(signal\))-596 432 y pgfr restore restore save /pgffc{0 setgray}def 394.58911 78.91931 moveto 395.58539 78.91931 moveto 395.58539 79.46954 395.13934 79.91559 394.58911 79.91559 curveto 394.03888 79.91559 393.59283 79.46954 393.59283 78.91931 curveto 393.59283 78.36908 394.03888 77.92303 394.58911 77.92303 curveto 395.13934 77.92303 395.58539 78.36908 395.58539 78.91931 curveto closepath 394.58911 78.91931 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore save /pgffc{0 setgray}def 409.38554 69.99329 moveto 410.38182 69.99329 moveto 410.38182 70.54353 409.93578 70.98956 409.38554 70.98956 curveto 408.83531 70.98956 408.38927 70.54353 408.38927 69.99329 curveto 408.38927 69.44305 408.83531 68.99701 409.38554 68.99701 curveto 409.93578 68.99701 410.38182 69.44305 410.38182 69.99329 curveto closepath 409.38554 69.99329 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath restore save 0.3985 pgfw 409.38554 54.25609 moveto 409.38554 69.99329 lineto pgfstr restore 394.58911 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 392.89403 47.52606 ] concat pgfs -596 432 a 0 setgray -596 432 a Fa(1)-596 432 y pgfr restore restore 409.38554 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 407.69046 47.52606 ] concat pgfs -596 432 a 0 setgray -596 432 a Fa(2)-596 432 y pgfr restore restore 424.18198 54.25609 moveto pgfstr save save [1.0 0.0 0.0 1.0 422.4869 47.52606 ] concat pgfs -596 432 a 0 setgray -596 432 a Fa(3)-596 432 y pgfr restore restore restore newpath restore pgfc eop end %%Trailer userdict /end-hook known{end-hook}if %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%EOF ���������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/iandtime.pdf�����������������������������������������������������0000644�0001750�0001750�00000045115�14557511161�015332� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.7 %Çì¢ %%Invocation: gs -q -dNOPAUSE -dBATCH -P- -dSAFER -sDEVICE#pdfwrite -dEPSCrop -sOutputFile#00.pdf ? ? -f ? 5 0 obj <</Length 6 0 R/Filter /FlateDecode>> stream xœåYM7 ½Ï¯˜£}Ø©$ê‹=( ä–xoi…›lS¬ ¤9ôï÷qF¤d¯×Èzé"lÑÒIQ|zɧÙ-~vò§}OÓo"ÏŸ'^8‡:ÿ3¹ù—).Õ¹Rç¸dçSžCôy©uöhq<ÿý~:`âÃôiò+ÞÜ>ާù§{`&7¯€9Î÷¦m3?ç%æJyö>,‘Ã|šÞîî÷wnÉÌÃîãiï—ÊÉ¥Ýûý_rŽ5í~ÜßŘ–\hç÷w Ž0ÓîóþŽ–Xc§·¯Éçw÷¯¦Ÿï§×-\âòÓ3Ï)–Åçù4qÍÀ jxDH´øZX&ϯð÷ωK\ŠOsÊøÉYU,~N «Bš;J]$U\(èqØ%Ãg[O˜À<Ûä—+Ïg5 …\ñ Yå€<?U|®Iý¸¯K ”ã“48Dæ™8H‰gIK(L âp,t=âe aõ:­Y”8ˆëWò[œ”É`:,#ýñI¦(¥>™¤;rMÎÛ73¯e$!ø${8û²¥äÍ¥›Š«R/¼½ßý†zéTÞ=J91¥Rw¿î¤Š¨f ¨2Ü]FJmƒ­úk—¥ôrzjoPÏžD8:¦ŠÇÅ@ÑÉgEBÄîØ2چlj* q(ÍΈ¢-×±•¤d]AÉéz±‡~bmxœtÿfP÷tù…ÿÇé«% é0±ó ãÎgNë½9™¥DÜœRET ° X¦”…Žá §RŸQÎWNt¬[`…Z"RAXÑ£ôR±=t|œšj0¯Àe¬‚ôÈÓ:KùI&.g?N—ÊÅ«¾•@³ j—Åu„‚†-«KªŠŽ<K(Ý"Xr3¡-Áj©µíµ!œ´¤Í<mc¤«ya3Ôˆpǘ¯Û»/+îÃlVi¥§µÄz¡øàñÍô&ïÊн¯ L)àˆVe>�?§>H~6˜äVó!$4§~[û>q% €¹”ÙvpXOeíÆogõ[?ß¡ïþþ,Çôˆ={Iá¬Öß¶Õ>T8R{BÈŒ=o4¢Áe hXêjiÝQ6‚¡„Ň¡Ú„¡  1´mñ% }•¼¼ðôÀ#†¥µwO^B•Y"ïNû;p#“_IЂߝóÑÀbÇþõKÇImtêWÃMê÷P ~ ~X°Œ¸ƒ/Ù`:¬R?,eÜÈ“¼Z€’¾ƒù½œYIW™ŸÓæwAé¯FË4ZÿSæ— ¶ª1Jô ÔÞ ì |Ä5õì>¨eëM»Åë]z_zwó±ðù IVt¬Ç,­7)‚ö.»“ÖÝÔ‹>£yiçqHw»¼ÙcW·Â{QñÌÖ{ú•ö÷lãIüá’8.LÁÈÈ-oU\Ž»`ßhŸpÅ8v!d /Äâpuºº£Œ[y.î¾NØ…„•õš°+v¯ÂN$\Sk™jv«ã"ìjQ]M¤SÑUØaÕ“¶úwŽ=ËÑEj¼ÉA·òh5ހů–Æeã Œáá@œ}ÂÆÐxöøfe„…ðê¼"í¨ò³ýâ‰ôGëïj¸Ùߣi&ú;9�È#¸ugÀ„¦Ãj‡‹i˜'K�ð^ˆå;ú;áA_|¥¿ç íÝemïàzíÉ`×›º¿?ØšÖÜƒÓæžÊÐ,‘“¬ UÙ *ËÈ PU›&ÓT]¨x±9“y¡à=†$›ªkãþŒi•eº¾©6Å7U§ûëïÍ=…çþK‹SˆAÕáàä»tãMû˜%•U”Qðxõ𪜤å‘Ï^J¢ ÅWú¯.¹d¶ZÇ _Jl³ˆ”E¶.'r­ë³Ûî6¡yg«/ü_ÃÜ@zHƒœ{’‚‹ÉÓà.þvÕ|ñëÉ7Û©[p˜Ž’ø pw"g ¢ %C"ríWœWŠÃÒ6nàëôÕ’Áˆ–uycõµ‘ÌÅÆöÛæT_wîö›I'ùÿs”£P£äò2¨ʸ1oë4Ê(8FבªN3˜¦Ó(3dÊÀ6¶Í&Ólý&ÓlƒoiZÔ=Þè¸Ê¿bŽU¬2JµÜ€FŸ–Û*-¢£@ l ¸-ÛÈF¶Ö!©Ç¾ÉƵ¶¼q­mðÍ-’(örM£å¨-zÓh‘©k4ÿ”[„†¾C£Qua…dÞ 79œ ~-g^PFeàð*v`hƒ5__Öa˜ÖÏ< xÔÆw‘xÝ^¿ÿ!‰s'ñ®Ð:œc;82œƒrñÝ²É â„ d“Ëÿ^ ¥‘ÎgàXh@бŠ³4y¡*?t.PÔ‹>£yiçq¬MMQn´—ÿaŠÞ¡–ÃØùÔÒˆã¸>1Yg4Þ‚÷0 3àD掠c#µ()Bc(ÝÂèK}Ðß›‹¶ü" ö²Ëa¿ `fë,u…Ò¾Nz“ü+q‰×¥7±io|}*¾_OÿΉendstream endobj 6 0 obj 1891 endobj 4 0 obj <</Type/Page/MediaBox [0 0 484.5 124.5] /Rotate 0/Parent 3 0 R /Resources<</ProcSet[/PDF /Text] /ColorSpace 58 0 R /ExtGState 59 0 R /Pattern 60 0 R /Shading 61 0 R /XObject 62 0 R /Font 63 0 R >> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <</Type /Catalog /Pages 3 0 R /Names << /Dests <</Kids [46 0 R]>> >> /OpenAction [4 0 R /Fit] /PageMode/UseOutlines /Metadata 68 0 R >> endobj 7 0 obj [/Pattern] endobj 47 0 obj <</D [4 0 R /XYZ 49.957653 97.7129059 null]>>endobj 48 0 obj <</D [4 0 R /XYZ -0.269996643 9.7870636 null]>>endobj 49 0 obj <</Type/ExtGState /SA false>>endobj 58 0 obj <</R7 7 0 R>> endobj 59 0 obj <</R49 49 0 R>> endobj 60 0 obj <</R44 44 0 R/R39 39 0 R/R35 35 0 R/R31 31 0 R/R24 24 0 R/R21 21 0 R/R18 18 0 R/R13 13 0 R>> endobj 44 0 obj <</PatternType 2 /Shading 43 0 R /Matrix[10 0 0 10 0 245.4]>>endobj 39 0 obj <</PatternType 2 /Shading 38 0 R /Matrix[10 0 0 10 0 245.4]>>endobj 35 0 obj <</PatternType 2 /Shading 34 0 R /Matrix[10 0 0 10 0 245.4]>>endobj 31 0 obj <</PatternType 2 /Shading 30 0 R /Matrix[10 0 0 10 0 245.4]>>endobj 24 0 obj <</PatternType 2 /Shading 23 0 R /Matrix[10 0 0 10 0 245.4]>>endobj 21 0 obj <</PatternType 2 /Shading 20 0 R /Matrix[10 0 0 10 0 245.4]>>endobj 18 0 obj <</PatternType 2 /Shading 17 0 R /Matrix[10 0 0 10 0 245.4]>>endobj 13 0 obj <</PatternType 2 /Shading 12 0 R /Matrix[10 0 0 10 0 245.4]>>endobj 61 0 obj <</R43 43 0 R/R38 38 0 R/R34 34 0 R/R30 30 0 R/R23 23 0 R/R20 20 0 R/R17 17 0 R/R12 12 0 R>> endobj 43 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 42 0 R /Extend [true false]>>endobj 38 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 37 0 R /Extend [true false]>>endobj 34 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 33 0 R /Extend [true false]>>endobj 30 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 29 0 R /Extend [true false]>>endobj 23 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 0 100.001] /Domain[0 100.001] /Function 16 0 R>>endobj 20 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 0 100.001] /Domain[0 100.001] /Function 11 0 R>>endobj 17 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 100.001 0] /Domain[0 100.001] /Function 16 0 R>>endobj 12 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 100.001 0] /Domain[0 100.001] /Function 11 0 R>>endobj 62 0 obj <</R45 45 0 R/R40 40 0 R/R36 36 0 R/R32 32 0 R/R25 25 0 R/R22 22 0 R/R19 19 0 R/R14 14 0 R>> endobj 63 0 obj <</R56 56 0 R/R54 54 0 R/R52 52 0 R/R50 50 0 R>> endobj 41 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[0 0 0] /C1[1 1 1] /N 1>>endobj 42 0 obj <</Functions[28 0 R 41 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[21.2503 23.1253 25.0003] /Encode[0 1 0 1 0 1 0 1]>>endobj 37 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[20.0002 25.0003] /Encode[0 1 0 1 0 1]>>endobj 33 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[21.2503 25.0003] /Encode[0 1 0 1 0 1]>>endobj 28 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[0 0 0] /C1[0 0 0] /N 1>>endobj 27 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[1 1 1] /C1[0 0 0] /N 1>>endobj 26 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[1 1 1] /C1[1 1 1] /N 1>>endobj 29 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[22.5003 25.0003] /Encode[0 1 0 1 0 1]>>endobj 15 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[0 0 0] /C1[1 1 1] /N 1>>endobj 16 0 obj <</Functions[10 0 R 15 0 R 8 0 R] /FunctionType 3 /Domain[0 100.001] /Bounds[25.0003 75.001] /Encode[0 1 0 1 0 1]>>endobj 10 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[0 0 0] /C1[0 0 0] /N 1>>endobj 9 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[1 1 1] /C1[0 0 0] /N 1>>endobj 8 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[1 1 1] /C1[1 1 1] /N 1>>endobj 11 0 obj <</Functions[8 0 R 9 0 R 10 0 R] /FunctionType 3 /Domain[0 100.001] /Bounds[25.0003 75.001] /Encode[0 1 0 1 0 1]>>endobj 56 0 obj <</BaseFont/WVOUFD+CMR5/FontDescriptor 57 0 R/Type/Font /FirstChar 49/LastChar 51/Widths[ 680 680 680] /Encoding/WinAnsiEncoding/Subtype/Type1>> endobj 54 0 obj <</BaseFont/EZNHKS+CMR7/FontDescriptor 55 0 R/Type/Font /FirstChar 40/LastChar 115/Widths[ 446 446 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 829 0 815 0 0 0 0 0 0 0 0 0 0 0 0 569 0 507 0 507 0 569 0 323 0 0 323 938 630 0 0 0 0 452] /Encoding/WinAnsiEncoding/Subtype/Type1>> endobj 52 0 obj <</BaseFont/FJLZJF+CMMI7/FontDescriptor 53 0 R/Type/Font /FirstChar 105/LastChar 105/Widths[ 404] /Encoding/WinAnsiEncoding/Subtype/Type1>> endobj 50 0 obj <</BaseFont/WUAMII+CMR10/FontDescriptor 51 0 R/Type/Font /FirstChar 49/LastChar 115/Widths[ 500 500 0 0 0 0 0 0 0 277 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 444 0 444 0 0 0 277 0 0 0 833 0 0 0 0 0 394] /Encoding/WinAnsiEncoding/Subtype/Type1>> endobj 57 0 obj <</Type/FontDescriptor/FontName/WVOUFD+CMR5/FontBBox[0 -22 600 666]/Flags 65568 /Ascent 666 /CapHeight 666 /Descent -22 /ItalicAngle 0 /StemV 90 /MissingWidth 500 /CharSet(/one/three/two)/FontFile3 64 0 R>> endobj 64 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 601>>stream xœN±ý��CMR5�$øøø‹uøìù.‹ ‹ ­ø¾÷]÷V÷Q�mq€Copyright (c) 1997, 2009 American Mathematical Society (<http://www.ams.org>), with Reserved Font Name CMR5.CMR5Computer Modern���123��������R�ÃUøˆù<‹·ø–··Ÿ÷Æçø"ù©ˆ‹jDKû‹w‹z_œ¢‹ÌŽÅ¤üˆl‹€!Y_Âä‹Å‹Å‹ä‹Â‡½ #·Y!‹–ªù<‹ë÷á÷ Ö·æ÷ ÷¦öøá÷UaˆxM{ƒ…7‹|‹ûXͼÕÃdzåÉßÅ‹õ÷û Òû#û(=)W·‚™¦«´¯qŸlާ¸Å©Î‹ìÜQ)7QK>Jûˆûc‚ЋЄmøeù<u´À÷ ÷«ñ÷ ¹±÷÷÷’÷ ÷Þ÷ßçÈR(%LU2€û ‹¿X´‘—ª‹£°o£jkmva#÷ [÷÷8ñîìÝBÑû¥÷ ²«×‹ÃÝ%Èûû(W1\±ž¨§ ¯¢§g‘¶¹äŽ ‹Ô¿fGQe0"…oЇŠqЀЀЋ|z•‹u¡øCœ÷n–‘¡ûb—· ä  7Ÿ ¬– äœ ��6û¹ endstream endobj 55 0 obj <</Type/FontDescriptor/FontName/EZNHKS+CMR7/FontBBox[0 -249 897 750]/Flags 32 /Ascent 750 /CapHeight 683 /Descent -249 /ItalicAngle 0 /StemV 134 /MissingWidth 500 /XHeight 451 /CharSet(/R/T/a/c/e/g/i/l/m/n/parenleft/parenright/s)/FontFile3 65 0 R>> endobj 65 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 1657>>stream xœµ”PÓçÇ¿!ïWaÊ¥Êl¿ßXÚ)ê°vóKY‹=ޱa-QTf€ !A~0$ù"áGø¥I@!B'"Bm±õ¬=kñ®Õ‰ë~æ°»íº­Ÿo|ì¶ÐîvîŸÝíÞs÷ÜóÜ=ÏçÞïÏó¼_*8ˆ!»RÓb—ßç× ø'ƒø§„@Jüµ! ‚8xäI:w5V®Âœp|ý»”P P×ìÒhËt*…R/ݘ-Ý»EúüsÏÅI_VËuª\Y‘4U¦WÊÕ2}`S(}]“«’ëˤã•z½vçÖ­ƒ!F¦.‰Ñè Ñ[¤•^)M“—ÈuGåyÒ$M‘^º[¦–K—µÅ,O»4jm©^®“¦jòäº"Š¢V•ÈråŠ4Uz¡zc4E½J¥S‰Ô+T•LýJ¡¶S©ÔnjJ…|RÁT¥ RÐDå _þ#8=øjˆ0dRĈ²xs˜?|üJ¯�%wñØ]!ïÄ+’ß~K·7;SÃZ?‘ 5! úÖú,Ž8éÃFHat#ÌÙÏÃ9øÈÜjGùè#Lp˜LÿíÓés­éûXrìŸ ã÷½üÆ>Áä,žœòáüI´Vš,P]ÅZ¬ÆÚ&µ[Þœ ‰R½´ÿHgqŸ+«ß8S{¯’™<í¡Í›•×o–±æ«½˜r¨7p$œ.‡ÚÎÖÓn‹½óŽ¥|âÒÜ­±ò¡â>N>z¨EÙüBgŠÞf†Æ—9¹³¨‘µÕ8ÁL8N´Ý0zQç¾Æ+˜ýu /ù4tKàm;t.gä@÷`¶$+vñ”÷¸\=unm ç;ó4såZ~,WH§[~bNÔn+ФC6³ý¯º[óS“ãnÖž3 ¿Lãç°Äͪ2h#Èχ©6þ’ds¬6{ß‘éÙKw0ÙÁ†ñvã0Ž/v ..¢~IÈGòQ’²:ãq00ÚÓgø3†lŠ!t`¬þr®ÁèQ u:« ¡Êj®4±¥©{ w“´í-|#ÞŸ»ßq *|Ü7Õsúq‡W0¾ˆî9!ÿ3<&q;Àóû,¤H4Y³!Š„“>‹‘¸n)ÝÒVQe9a4s…;\¡€ƒíVåOY¯Á8cë—´ãú…Þ1Àp°Φc­$²!LúðÎV nÏcæü¹k€Ž$IW­¯ô=`¾øä£_Ž—½QÒÏMÛz ¡ÁÔ�ÇCWuOç©¶ÞÞcÞÜŠ óწÚ#ëü90ϼ”ôbžKá-æêjK ªšŽeWd@&“ˆAé¸#0tf~¨úô!vÏ{`”‚êlGeC0g-Í- Y%ÑðÀÝ oºú¹ÎžS>`þ›‡\C1WY®-S>_bðg¸ â÷Æzúéø©Ë£Ãظ0ÿœÁ[çÃI/^ð­Æí‹xûË5¼ÿ(Yp/\…{ÌŸÉÚ{d+K}¢;F%÷è­²Ô$°% ‘ þnÿœ‡w-3–åH”Ð –¶QŽ˜ÆHÑ)¸ rF AÉ9åÊ«&/0¿ñÜr€³¼ÂZk´r¦× t…uW«kæÍÝEg™ˆ c»¦?£‡!â. yOŠÀksô7µØFÀ Ì| ȳ$øGªõ\Þ>œÂP¤¸æ!*ø¯$ƒ%^•Z[R ,õ÷Ÿ9Ë’-äU‰‚¾Þz"ÿŽÇ3ý&Œ‚Ï:jþ:Ó¯á<‡ÿ¤ÃüW<ùË„�- ý•þ’¯vˆŽ’òQ'¾<èÆp^ Íêi€Ð3ºé¨Šbe Ñ´ý~À÷eøL7,×”ÑQÐq–ã»iè…v½Í6¸{&`Ô0©uüÔfj}qíˆèk<N}ã!ÇŸ"!›þC¬G­ÿ­x ÎYÇÌQèaÂãø[& ÿú¿ Ÿqx¿–5ÜÊð$BìÍÖd2ßÿ?t¦‘F÷Ã4—�é›BD­„¤‘ïí'J ?�²þ<Ñ`‘2-Np6›ë‰Dq&�¦�ö~kõ±ÝÞÔ'g5Ô±Õëº)\”«¯†jS“¹¹žûmü²H;y yžPÑååV+˜SS}›s鮺Á^øt)À€ëe¨!Y(e .~WµµºDDÖNûBï~‡ Žu‰Wx[Äâ»Ýâ•õ/ï •± endstream endobj 53 0 obj <</Type/FontDescriptor/FontName/FJLZJF+CMMI7/FontBBox[0 -10 350 663]/Flags 131104 /Ascent 663 /CapHeight 663 /Descent -10 /ItalicAngle 0 /StemV 52 /MissingWidth 500 /CharSet(/i)/FontFile3 66 0 R>> endobj 66 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 393>>stream xœ~þ��CMMI7�$øøø‹÷òù+‹ ‹ ©÷ò÷Z÷W÷T�ns‚Copyright (c) 1997, 2009 American Mathematical Society (<http://www.ams.org>), with Reserved Font Name CMMI7.CMMI7Computer Modern���i��J�“øˆø(§ø§÷è÷ÒªÓ÷Øù›¡opnqnz˜v¦¨¦§¦û`ü‡~†‹z\³eÂï·÷š˜~‹ˆ}Š…€‡t;_bd‹w†˜¡¢’ž”¡•¦–¦–¥”£¯æ—ޕޗ‹•ºc±T(]ûz~™‹Ž™Œ–Ž¥á·¯°‹›”ƒpt…|rMwŸøC••—÷pŸû`•« Ü  7Ÿ « ��[É– endstream endobj 51 0 obj <</Type/FontDescriptor/FontName/WUAMII+CMR10/FontBBox[0 -11 813 677]/Flags 131104 /Ascent 677 /CapHeight 677 /Descent -11 /ItalicAngle 0 /StemV 121 /MissingWidth 500 /XHeight 448 /CharSet(/T/c/colon/e/i/m/one/s/two)/FontFile3 67 0 R>> endobj 67 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 1194>>stream xœ­’mLSWÇï¥/÷âj'½6Lt÷^Kt3@5ŒÔ9dtÃm€:Í¢Ör¥`_ ½q"¥€´<q@}Y[V*S|›:%›[âts3..›:Ñ}0ι’s›ë‡ŒŸöuyNNÎsrÎÿÿüžspLš†á8./,.ÑäN¬^fâ¬4áe 8’cI­ PH‡gÉÒUÈ–6¿ˆÖLÃ$8n¶9 -ÕuÖÊ ÏÎÓÏg5Zmþvan®–-0qÖJ½ÎÌëxgÒñ©ÄÈ–Zô•_ÇÎ[bàùêÅ99µµµÙ:“-Ûb­X:[[ÉØÎÆY·såì ‹™gWëL;Y[öä\h1UÛyÎÊ[Ê9«ðt›ž«,3-Ö,İ2ìl¶ ËÃVc31FaSRt˜;†gá-øí´RÉ,I‰¤_ª\Jv…7|ªÃaëTæÏdR÷P9Z«¶Þü É ú·ò+¾ùcí:ж·ÈÝÐ\Lj/;¡ÙÛÙÞîóÑxú}'u§Ú@"âô×.˜†ö3U±ò.]IÝ(õ¸˜ŒÞAi£‡nwvƒÈÐéc}ð©cvÓ®ÖFg«‹Ø»€•\Q©á3Ë!;CÝ‹Õ ´\«'•ÂŽ0:ü`$¬¾…Ö=¨gRJGf5Ê¿yüB÷¥¶Š8½ÅÕb‚ÝdMí@Äß7ôãÛG—Š9"&N£©„8ýÑ<D¢¬Rôô4‚ËénmqÓæìU [¤„µ‹N <æ™)€–U·óŠuÒGŠ:ÕûÐüÛáa Ÿôˆ3Ëѹ]bò`­y(fˆdÎ\1ƒIÙd%^CRžB_O“gÓÝÒä¦ s5ÐëA?ĘÎÀ8B*ÑDÙq4u\õËøò+™ÔŸh¹°Z-²™‘¸ÜݲƒÄFÑF"Ö>æ Aâîá¶sŠW¢ÄÊÖΣ õx¯ð…:f XŒöêšê`Mt ˆÑÊäÖ”²6€ Fð#aÔuu…%Éì¤VýÉwˆvYXÞ‹òF¯C?D ÇhðäÓQ õsh½Q>Úñ7œNÅuMøé‰9Ð;Ì!üÐÛ¿×ë9>H ¬êóȰ\™¼>IcªPÚUÄMŒLê,JCÕbà9F¼ý«ÔÅœŽQä€S zøç篿¿ä]SB‹õÿËÙu`…¶!•p¢Æ#õ}Uþ!6½¿“«¿[àÝËàãÍ–b’ú=Aˆ³':Ný©«y3ñ,ãÈ2Žß— 2A©´…Ìf›ÍlÙC¡AZüUúŸ=¥àJáDOúqT}]‚¾LNW‡ÀÃÓÅï.‚m@ ?| ç#äÓƒD…«ACo3ÊãwáX*îB|²ÇÛË;ÂLHÝ@‰Äã¨ê\mºÿìR7ÔãOP.¢¿ƒ¿f ¹æ7Q)Ê r–žƒŽ¾øþÑH]ÄÐä†6ýù屑‹@Þ?±Xûæú%eÅŒX&V9àÛ *!ò´Lf•ï15ojÜÕÜ´ì@*íA¡°™½û‚rqË~":åê ôi¾_‘ìV(®úS1ì_á‡`P endstream endobj 46 0 obj << /Limits [ (Doc-Start) (page.1) ] /Names [ (Doc-Start) 48 0 R (page.1) 47 0 R] >> endobj 68 0 obj <</Type/Metadata /Subtype/XML/Length 1531>>stream <?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <?adobe-xap-filters esc="CRLF"?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/'><pdf:Producer>GPL Ghostscript 10.02.1</pdf:Producer> <pdf:Keywords>GNU Astronomy Utilities, Gnuastro, manual, plots</pdf:Keywords> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-02-03T20:22:25+01:00</xmp:ModifyDate> <xmp:CreateDate>2024-02-03T20:22:25+01:00</xmp:CreateDate> <xmp:CreatorTool>LaTeX with hyperref</xmp:CreatorTool></rdf:Description> <rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:1c8965b9-fae6-11f9-0000-a9f0d0fc01fd'/> <rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Plots for GNU Astronomy Utilities manual.</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li>Mohammad Akhlaghi</rdf:li></rdf:Seq></dc:creator><dc:description><rdf:Alt><rdf:li xml:lang='x-default'>Used to make the plots for the manual</rdf:li></rdf:Alt></dc:description></rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?> endstream endobj 14 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4845 1245] /Matrix [0.833333 0 0 -0.833333 0 204.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R13 13 0 R >> /ProcSet [/PDF]>>/Length 49>>stream xœÓ2WH.æÒ24V(NÎã2P021Õ3¶´P0400Ð30„ÒF E©\i\�üm  endstream endobj 19 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4845 1245] /Matrix [0.833333 0 0 -0.833333 0 204.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R18 18 0 R >> /ProcSet [/PDF]>>/Length 49>>stream xœÓ2WH.æÒ2´P(NÎã2P021Õ3¶´P0400Ð30„ÒF E©\i\�ý& endstream endobj 22 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4845 1245] /Matrix [0.833333 0 0 -0.833333 0 204.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R21 21 0 R >> /ProcSet [/PDF]>>/Length 49>>stream xœÓ2WH.æÒ22T(NÎã2P021Õ3¶´P0400Ð30„ÒF E©\i\�üI  endstream endobj 25 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4845 1245] /Matrix [0.833333 0 0 -0.833333 0 204.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R24 24 0 R >> /ProcSet [/PDF]>>/Length 49>>stream xœÓ2WH.æÒ22Q(NÎã2P021Õ3¶´P0400Ð30„ÒF E©\i\�ü¸  endstream endobj 32 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4845 1245] /Matrix [0.833333 0 0 -0.833333 0 204.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R31 31 0 R >> /ProcSet [/PDF]>>/Length 41>>stream xœÓ2WH.æÒ26T(NÎã2P0P0±01U04E©\i\�’gÞ endstream endobj 36 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4845 1245] /Matrix [0.833333 0 0 -0.833333 0 204.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R35 35 0 R >> /ProcSet [/PDF]>>/Length 41>>stream xœÓ2WH.æÒ26U(NÎã2P0P0±01U04E©\i\�’Ëâ endstream endobj 40 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4845 1245] /Matrix [0.833333 0 0 -0.833333 0 204.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R39 39 0 R >> /ProcSet [/PDF]>>/Length 41>>stream xœÓ2WH.æÒ2¶T(NÎã2P0P0±01U04E©\i\�“/æ endstream endobj 45 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4845 1245] /Matrix [0.833333 0 0 -0.833333 0 204.5] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R44 44 0 R >> /ProcSet [/PDF]>>/Length 41>>stream xœÓ2WH.æÒ21Q(NÎã2P0P0±01U04E©\i\�’Ìâ endstream endobj 2 0 obj <</Producer(GPL Ghostscript 10.02.1) /CreationDate(D:20240203202225+01'00') /ModDate(D:20240203202225+01'00') /Creator(LaTeX with hyperref) /Title(\376\377\000P\000l\000o\000t\000s\000 \000f\000o\000r\000 \000G\000N\000U\000 \000A\000s\000t\000r\000o\000n\000o\000m\000y\000 \000U\000t\000i\000l\000i\000t\000i\000e\000s\000 \000m\000a\000n\000u\000a\000l\000.) /Subject(\376\377\000U\000s\000e\000d\000 \000t\000o\000 \000m\000a\000k\000e\000 \000t\000h\000e\000 \000p\000l\000o\000t\000s\000 \000f\000o\000r\000 \000t\000h\000e\000 \000m\000a\000n\000u\000a\000l) /Author(\376\377\000M\000o\000h\000a\000m\000m\000a\000d\000 \000A\000k\000h\000l\000a\000g\000h\000i) /Keywords(\376\377\000G\000N\000U\000 \000A\000s\000t\000r\000o\000n\000o\000m\000y\000 \000U\000t\000i\000l\000i\000t\000i\000e\000s\000,\000 \000G\000n\000u\000a\000s\000t\000r\000o\000,\000 \000m\000a\000n\000u\000a\000l\000,\000 \000p\000l\000o\000t\000s)>>endobj xref 0 69 0000000000 65535 f 0000002393 00000 n 0000016542 00000 n 0000002334 00000 n 0000002103 00000 n 0000000122 00000 n 0000002083 00000 n 0000002544 00000 n 0000006173 00000 n 0000006093 00000 n 0000006012 00000 n 0000006253 00000 n 0000004636 00000 n 0000003449 00000 n 0000014174 00000 n 0000005800 00000 n 0000005881 00000 n 0000004521 00000 n 0000003372 00000 n 0000014474 00000 n 0000004406 00000 n 0000003295 00000 n 0000014774 00000 n 0000004291 00000 n 0000003218 00000 n 0000015074 00000 n 0000005586 00000 n 0000005505 00000 n 0000005424 00000 n 0000005667 00000 n 0000004127 00000 n 0000003141 00000 n 0000015374 00000 n 0000005291 00000 n 0000003963 00000 n 0000003064 00000 n 0000015666 00000 n 0000005158 00000 n 0000003799 00000 n 0000002987 00000 n 0000015958 00000 n 0000004925 00000 n 0000005006 00000 n 0000003635 00000 n 0000002910 00000 n 0000016250 00000 n 0000012466 00000 n 0000002570 00000 n 0000002631 00000 n 0000002694 00000 n 0000007028 00000 n 0000010936 00000 n 0000006872 00000 n 0000010246 00000 n 0000006544 00000 n 0000008239 00000 n 0000006383 00000 n 0000007331 00000 n 0000002739 00000 n 0000002769 00000 n 0000002801 00000 n 0000003526 00000 n 0000004751 00000 n 0000004860 00000 n 0000007554 00000 n 0000008504 00000 n 0000010459 00000 n 0000011187 00000 n 0000012566 00000 n trailer << /Size 69 /Root 1 0 R /Info 2 0 R /ID [<054160F4B57C8FED70DBDC0CB174B0E1><054160F4B57C8FED70DBDC0CB174B0E1>] >> startxref 17487 %%EOF ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/iandtime.png�����������������������������������������������������0000644�0001750�0001750�00000026162�14557511161�015346� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��ñ�����× L%��� cHRM��z&��€„��ú���€è��u0��ê`��:˜��pœºQ<���bKGD�ÿ‡Ì¿��� pHYs���–���–�qFþð���tIMEè8%Ïÿ��*èIDATxÚíÝ]ˆ<mz×ñï•}ÐUŒ¦žDXEÙP³+ă¥Fs Äšœ‰Dkh†h7ŠAjBÀªÄ=ÕnÝ$èqZID„®ƒ¬9Ä®]BeÊ‚Ä$þKÄø.º{¦{¦{¦_«ª«ŸááùOÏTMõÝU×U÷]÷‹áˆÈõÈýnõ[ËH›>$9ohú�DDDä>`@ÑôˆÈÙeD[~r·×~D¤í"²eŠ/<oúhDäܬÚöE�‘n1@ õ"""¥/""ÒIJñ"""¤/""ÒIJñ"""¤/""ÒIJñ"""ôÑ[?´@AD„”ä„@<ŸÓ"2&>>ïZ@ꃦ‹Iä:5, % ¤`ìeÓe!ry>zçç7^ÁbëÉ<ÕZÄ€˜˜Šó]Þ!=""”âEšÒX °€/- cfw®98EöôvCýØ7̆å�rGÿŒÇV‘{ͺ%Òœ&c@FßKðŠðÐtQˆ\ž7R¼Elk[\ôž{ÅÙx¥I5EšÔp Hx´À+rB‹›.‘Kóv-~[ÃXn‹Å,,x~qþo[YæÂ^-yañ±—©ó}Ì/ýí{µÈâÕ£‘4ÊÍÿÞ-(ˆ¼™â½ØöìËs/,²©ù¼ñlñïÔËìÁ2°ÔRB›Zo¹•¥ö�6}6³Ñ>‡k)=*°ŒÙ¶½‚%6#z–5]À"—ëÜ1àíà·þñS'»˜Ešß%(ˆ,9Nì¼ýE†“½zuÊtåß#zŽC€3"rœÀqHy\üḟÅk!¾|õ­¿üôïhåïͶî5ÆWþú»ïM_úº–/¦øó5´x-߯±7¶=C Ø%8‹ßËœÝb€"€¾ôµ¸ü”ãâãùà™ù³¹ÅÝÿ|°Í|ðËdqO‘=�/¹Ýkê€ð©qn²m¯Œ˜<Õ=*4ÔF¤.{Æ€#Àˆb1tv—  ²ðÞ ¹}¬^J/»àÄTOOËJÏÈöSPñh9¹7ïÕ"§K~²ü—ˆÔ`ï°K°ŒàéFàÝ  ò¬®ÙíÖ;Ý Iëw H™ÚhË^ÕÁF¤ŒÖ#ðÛe¿ýb€"€È“SÖâß’“R;ÎBXL½‘’Y¾q¯gÆ'";(XBä}X\ýåû1@½èEžÕT‹÷œjõ~Û’Åÿý.ÈÅv>dH´i¯^P®¿&"MÛÞŽ�-<,®ýwc€"€È³ú–¡Ð[v“±t1ü%äq9ðå-+Aàiø “Í{¥Oò4x&U­^¤%^]­oG�‹x�Ë,³ÌFôèÞŠ�" ï6Ô[cL#X.:aØÔïžÿÍ€ˆH,ò;ˈÌrøØ*lBALùÔ×¶äî66]üå©U‹µ¹eTÄT^À¦½zn÷Œ,''>þá€Èµ;c x;<’>}·¼’ߊ�"K†wu]þ·,ðj¾ŠÕi37íõ¸¿$ÒE6]®·òZF nµCM1@@®›ÅLëën·pÜZQk£mßÙ«V¥i£ºb€"€HÏâEDD¤FJñ"""¤/""ÒIJñ"""¤/""ÒIJñ"""¤/""ÒIJñ"""¤/""ÒIJñ"""¤/""ÒIJñ"""¤/""ÒIJñ"""¤/""ÒIJñ"""¤/""ÒIJñ"""¤ëYt¦=§4ýîê£r”K¥s÷DïVåx&W˜â-´û`ìÁ,³‘Å;o73_ù¾^¼ú­Ä>®çýÉš.§Žø%yêr\ÛÿE”£ÔM1àT+És—£bÀ*ljëúbÊtñ¯$;nà+ÿ~Øø;=fÕêþc²¦K©Ž’<G9®íÿBʱ¶OË—Ÿ×Ókþ|Þ]Ï—b@“%yîrT pˆqü kñ/îpJ Ò·Zù&e²ñwÆ~{ð±¬ìßsâËj`:°$ÏPŽ«û¿¼r”º)œÊî%yîrT Xú¨éh€§&" I€‰—‹ï"J&k'ä\⃕mrðÜ"Ÿ¬ü¤  GI>ÿ‰Å„ä;ìrÆMÎiJr—r\-IŠ«.G©Û™bÀê™ë“åO:}î*´Žs õ3bbbFd‹W{Œ˜9™CÄŒpñ˦Ÿh¥ij´Ø6sHŸ~§ÇÁ¼±‰Œ€ '%$àñ½ý;É|ÏíþÚ¥$_¿Ïå;}.Çõ’<¶WKò2ʱ¶OK õÏeqæ°~æ:Šo—£bÀ‰?5Ô!ùü¾ÏBF ¼òŠñ¢±©¤/¨è½Ø.XÙCh!ø˜¼òáÓORÆ^ù˜Èbxå`â¥W”$ïì "lºxNT’»”ãZI^q9JÝÎÖÎ\èü¹«ÐBWÐPo1¡¿n¤©<0xàc� µùOK�[Ï2 ÞxŽã¹õx4˜0xñ£‚, ¢|úírmÛößyÃÞ-ÉÝÞçÖ’ìX9Jý,%Ýcûì1`Ù{Ùç®…$+‰w’T hJçS¼…ü X±áŸ+ ,ö¨À×N,›‘û`>¤ãý÷éÑ#ã~íG9¡%ÄܯŸŒûí¿E2zVù`ëÏ·–änïskIv­¥f“ñuûÎOiá|1àÝ3÷²Î] ø7|›•>Ùú+Š­Óñ†z yà?òs<¼9±B�3¡\Žê´ ,&Zœ¤Áü•Ïw‹!‰Wžûý«¦ ±O¼?¿¿Ýploí¾ý¶Û’&JrD$ï\BJrÇrÜ^’*G©›E<ðUJ¦oöª>G xç̽¬s×F”ü<Ù;cßZ¥Ó)ÞzÌóóü"C¦¶Ìa¡eD„–Yž““XDä÷ô,µÄ2†à9Ylb m´<}¼‚§€[ÏbKÂêïPðhnnld+[[Èâ·ö@Ô–ÓÒB›qÜѳ‡å;ß­$_¾ÏÕRZ+Ç•’<¦_| -*G©ŸeL¹ç_¤`ö”tê‰kgîêO.0Ą̈ø"¿Å=6zzý °µÎÀélz§¾–áö)ˆžK€à¹G¦ã¬·òzÞü÷ç{ØÐ›ñáiÙö©¶íß9fÚ‡—c0/»§~ÂÁþ%ù^9n+É.•có_××£~~¶2%vˆ^_§O¿wò°ë™{çî¼|ˆ™:Ëkv¿’T ¨ù3‹q¼ÓÏâWŸyÉÖça«Ïé½bí‰Ý¶g?>¶)ãå žô‡Ï{´j{'­Ï–R†´„W«SSøãK·—ä{帵$;TŽR¿Õ³ÕߨÉ!ìxæ^ƹû¢|.F§Sü™ ,ÛÞùÌǶÒàöF'µleÒ‡ÎS9Ê¥zãÜ=î̽²sW1àl”âæ…aÑöš3›R´H¸T*G¹ToŸ»G¹Wuî*œRüül]8Ž Få(—Jçî‰Þ­ÊñL:Ý£^DDäz)Å‹ˆˆt’R¼ˆˆH')Å‹ˆˆt’R¼ˆˆH')Å‹ˆˆt’R¼ˆˆH')Å‹ˆˆt’R¼ˆˆH'iv;‘,š/M @¾}Ýw‘¶RŠYc!1 Ïi=±œœü|“­ŠœšR¼ˆÈ‹Rs¿^o·ˆ˜ˆÌ*†~ÅË“Ê%QŠÀRR† ½zýS/(�¬Gf1ýmë“‹´‡ºÛ‰ˆ�3#æÖ›ü3sCÅÌÒ¦Xä=Jñ""XÆ”‰ßîò¤Ý+¿§OjS ›>n‘·(ŋȕ³Èõ÷Ý·ñÉ¢.ßkúèE¶SŠ‘k7¢ànßžò^ù=F5}ø"Û¨»ˆ\5Ëxçùû6>¶·M¿‘ÍT‹‘+f1)÷‡%x�†–5ý.D6SŠ‘«e#†ÇLfã}R5ÖK;)Å‹ÈõJ©öéd·‰ç 5ýFD6éô³x‹øôò_šcZäšXÀ¼vý1Ÿ3€j½¾n1éIž£I,;öVAäô:•â-dù�9ðà[€Èæ¯T”ó/ÍN%Ò-1Oí1PQ�Ÿæûùn ¶ù+å" ü“ãé—¼²>S+¢HÛt"Å[@BL”””TË:»e°¼¿¶xqñ'„„r&Gtµ‘°„˜(¨((È,Ó·MÎã‹€€„?Å¢o9ù±1Àsˉ7]"ë.<Å?]Ø9;ÌKå90yÚ:"¦ÇÈ &Lt.ry,"!&"'Þx¯xŠ֣ǀ˜ŒÐ&ääGÅ€B)^Úçb»ÛYd™Íx$&çÆo}°ƒ›>ô[n˜ñh–©_¬È¥°Ä2{dFȘý·{¦èˆÜsø ·ôx´™¥OI›7]""/]`-ÞbbB&ŒOÑÈî%ÃEcÄÔ*r&ê˜'Ò^¶|07aà“ƒw“p?ÿ‡ -$!"³’ {?W÷ܰHkÉK»\X-ÞB1%`àæ÷>>ÝSt¯|ì}ÿ˜0Õò"íd±MQqç{ÿðoÁú­¼—>ô{>fHÀ£,Øs—9IÓ¥#²î‚R¼6â¸9æÂ~O¼Ï %6Rši mÊ”‚›C̽³±­n~³Ï!–í•æ ô OZæBR¼–ñHȿۡæx^zŸBf{^â"r&ÚˆGJnÞ[Ï}Go^Ùžû÷Ä<Zoç Fzi‹HñÖ㑘{¿«ï¹—~Ç=»Î?m‰ý¦¹ý¢êþ¯Ùçí7ÍíguÃ$‡°À2f„ÜÔq‹¿ä¹ß2 åWµ`ìñìØÿ2·Ôôq\›Ö§xKì‘”ßÖßÎs¿c@bï_âðÏøfàÛùéF ªÅ,äóÍÀŸåŸ6},ry,㑈{¿«`«éóûÉljê/‹ù›|økö#MËuiuŠ·Ð¦Œ˜ø7Þ45úZ©“ÛtåõéÊëñóëŒè3$³™EÛ¶°ØþøäâÛo·Ÿ}z³Ëß0_{×¾åh³3m±ºÞ>Ú§ívÞbñ—ù½‹—¿ï¤'ˆtžEöH Î¼2 n(˜ÚôV(µßm÷—£·>Á4}(ץŃæ,bÊä¨e—~Š/?ý{µ0Xy·úW îV¿óÜ&dLí~} è_áÇùÁEiþw¾FLf%9ÅŽcÕêë«G;&?Ë«Oß>Úéb»Ý·˜ûÿ|ñ¯¯"²3ë1bx¦¹ßsvh~·” ±W lÌSë¿ÑÍ/ÒÓø­þ?È7�¿Ë/4}(ׯqb§m_ôp²“ì);Ñ~z8éÊ÷1<’-¾ÿ~§zú>!ãS¦ËòdŸ‰¼åá8¿Ù²¸Ì/¦8Ó¯eøáŸìYvÄ’½ï 1_^«[· ˜9Ï%ƈÛ£%§9Úö~¿<{öØö_ã8AÓïâZ¾ˆq¼¥ õ6"ã¾]+7ù˜;RÁ¢ûÏ”‰¯ Þñ/òGøªOßO|À 3K›>ö¦ùñ|Õ¿E“Ën,°)1wçË.óÑe¬Å ï3`ºùz¶ð¬G{áü/rË­GZ¤^-l¨·€BîÚ7O”çvÇÈf|¿OõzN|¯ìÃËW¸·„‘ÅïÏžÝq¿Æ‡ãw"×Á"FÀí™ÓAþö8öד〭äÁBï¿úõ͉ù¦öEôkкZ¼EL vYR¦ ^ð—øf~šï;¡OuyÍ|%²‹™Rø¹üû³Ñ½¨ÃÏyΑÍ^u½Ó“xi¡–¥øÚ.îÃý+þ?É÷î3RÖ+¿gÀh×ö"×ËR¦ 6Ô’OÎ ªí×±%›[Þ¼àŽŠÙê¢U£fziV¥xK™2¬ãâ>ø3îü‡öOØ>æžT+Ù‰¼ÅF¤Ü9HvwC¶Ì_i)Ãm›yåwL˜®Ü Œ(ÚÙò(×­EÏâ­GJs£_w9ˆ”;¯ÀÇV05öéè¹ y°6·Pˆ4ÊFDuöÂñ¡ÅŒ–ëÍ­Iyg‘+XÉÈ*Ÿ€¥ÄÜÔ^\"ïjM-ÞbFôÛœàÃåzÁé~[ú€Š«ï]/²™¥$Ü×\î¿î%c!Ñû- >¦ÏÈ" IéëÖ]Ú¨%)Þ"ŽZù¹ŽcÌV›î¼ O¶gÓ{ŸTaмf ÷u;ñ’!¯—}£‘~më1ø2y»c—\¯V¤x 1ñ.ªÆŽ1z}§îcÆ<ì³´ŠŠÈ•³¨©V<R0Z;–v=ïó»|'-î?$×­)žhs';`­‘þ™(™î³5Ö‹¼dLjëd÷RŸxí‘ÛŽux�‹øÃ|@ce¤¥Zâ-#Ü:_{KXL¸å²¿íµ³R¼ÈšÊænò½œ™·®YoÛ`¹×,eÊßC¢åf¥OñÖ£w’¥fÎ+f²ù½¢O²ÏµžSéy¼È’6öj¯¹%ff±ôv«Ã[hSRúÞ÷‚>#]ÓÒF §x‹1¸€ñ¤ñö™«¼àžl¯¹ë&ïÎ-r%¬GÒ|t/ü– Sþ-ÿp—c±”7ónv>aÀƒi1YiFS¼…L6ön÷ã ˆÞšÚóùà™wX(Å‹ÀÓ`ÙVÜäû€ïåOòwÖëãò™¯ö@JßWZ}Èd¿®·² lÏ!Ê2×l-~Ĥ]«Ém¿÷tÎÇLØý‰|N¤` bAËËþ¾‹ S›Y6OëöyùVþý€E–ÚËúûЍÛÝyXÈ#ãKöËMÉåipv;‹‰š}·³x‡5¤<îz—饕šÑZ„”²–Á²ñ9{þ®x®}[ÄóÍö§¨¼ °11ßËß0ø*€Oðyûƒ|!9¿Ìò_ˆ  \¹õø2_²Ÿã×`}ÐÝZÀʲҴÿ¼…k+àm;Úê¹íãl[¼<ÚÏññüÝóþvÜbåhù"Ÿ>Á³´Ýƒ«Û§É lGïMÙ!ïÏtUÙ”]'î(‰”âåºY@¯¦›üßÇ÷óÝOß VzÖ$+©î³|ÀKÆ¿‡oäòÉÅÏ~—ÿ3oo°)ßú´Åd%2Ä|¿ÊùÀZ¥`µ3îú«=xž·×¶Øv´ÅÊëçÚâåÑ~̧ÛóþvÛbõh?»øÿ'PëçÞ'vêþ¢Ç‚ZþRFv䦻•ü×÷xä15ñ…±mÌ´éã×Süåç@†óÉq4£ºÎ‰]®`RÒ ¯þÿÇùõþNH#Ñ´¶O¬¡«˜Ïóÿ ›.ƒËù"Æñ†jñ2¸:ü®ï)¦âÛ,èÖ»9 éqÛôQ<M@⛎æoñ;ü9~‰¿½Ë^¼´!éõd/þ“öM|ÿÉçëžàøò5ÕPŸBû{ÒïÎæÍ^÷ŒH¹„„"MË·£'=À¶ëÖ+þú^ûòhI‹:v„Ѿ‡¢åË”µR#=ê- wQ‰°zk›–1bâ}/ÒÛqt¬îFåŠYL²û4±g?šˆè4éÃ+ÆêW/íÑÌ ¹”â¢îs ¶Žy·„)¥/Ö¹÷œâýéi-Ø©¾Hw¥ [Ôèšn!€FpK[4â-Üg™‡V˜oÇn‘M‰¸[{äÐß¡¯ ¶¹2–µ'X²û¬ô;’iÞ i‡&jñ)“Ëz¦â%å˦z lDFß_tô’ñ»“àDªÃËUËZ5`öÄUk5Ii‹ÚS¼…ö~._oª·”)¿Ûxï?$~gIŠD)^®—õ EuøsÜnôé©/mP-¾Çø©óçZ¼Å6¿ÝÖá%cÞX”ÆBB¥x¹bI{êð~lç”ì³0•șԟâÚ3Pfw9¡%‹$cîÞ™D1s™™Œ¼-N¤n´jòæìLí ¹–š’6¨y\¼…„-º¼wæ•õÛwñ™]–¾õ‰,Úü{–·g‘ںsÛ,&8S¿  3Mƒ%Í«»Ÿ0¹ÐÓ>Àù3~·ãd“ÍÍt0jÕ`!‘ºµiÀèÙúyñº‹®HýêOñØLo±M ¹áÛ®ýd‹-OâFZ)I®Zkšé­wÖÁ«¥xi^­)Þ‚Ë[_ÍB{ Y Žë“î8wÝ„ðõoZB|º)6D.%k‹„6y$Á™ç×ËÕáNšWo-¾EOávaedŒ½??jŸ¿;æ�¯^7Õ«‘^¤=uxÒó>4ôüźè" ¨7Å·çòÞõx ôûµî8}"í4âõES½…LÕH/W¯%ê,<Ç`¹ÔT/«1Å[p9S¾XdSBî_¯¸#b¶ÃÝù„èùVÀRf”Ü7ý¾Dšd´duЬ† ¸ÔT/«³S¶ã)ÜÛ,°éë©iç¼ð[&LíY¨½\Öã-´))}¿¿Ð±"§’´£ÏâZzä„¿‘ÃÕ›â[qy¿Í2˜øý[ÏÌ}À-1³w.ß ñ¢þ^qÓ’º‹H“ZÒL¿muøÓÚÔ#G¤^u¦øÖ7Ó[l3ªå°oYÔåg–½‘æs’6Õß­gš7[Ô–‰¯,¥¨éŠÌiQ-ÞK-Q ¸.uÎnw®y¤NÂBFÜí~éûÀ&¤L rròçz¿EÄÄÄÀopÓ†ô6%2Ûuò‘S kK­o°€Äëš_²lOŠ·" ´Ûæ?©Kmµø6±À2FÛž¾oç…ßûÇÜSÒãÑmjS›Ú¦DäÜRòãí¸˜,Zôí ´È¥4&¢ WÉ—Ž}SA{êÌÉâv#T ¸&uÖâ[Z‡·”„¡ülÎsòÅ´>ϯÌ÷\²ÛD9ç÷|ƒ•l›=_äÌ‚æŸÄ[Htøµ¾/¯ ‹[Òzù‹z6lGÕCί¾·âþ‹I)NÑlçÕ†[˜¢5)~õØ2îš>¹J!ÍOü4ªy~Év¤w`¥ìƒzºJÔÙÝ®ùË{ÍbjÚû³ÞÓ·$Å{±RŠm§úDN,h:áY\ûüšUk¦¿¯T²Rë5}8RúR|;žÃ-,ž¾½Ö«6=‰[½‘éYÖôáÈj>ÙkuøíZS±ñŠÕ‰¼FJòס¾6ÿni15íùû–·çÏ×.ðtç5óDN‚ç^* AÖÀRÖU{úÔû`-g¦1ûW ÎߊûY‹íaÓÔ´çÐ’n6K//p5×Kndz€¨5"ÚÔ’ý•Ï àA5ùî«©»…Ðük’0¨ñHªCúÓZB¸-­öÜßÛò'ž¾ëYH+&å‘]XH¯¾¾àgÑl;^ýôpðÈxëQn‹ÑÇçGòOß,bÏ¡ÂÒœ·2Ã6uõ¨oA·3ˈÖ\³>,¨Œ,ßò!bz²£‹y´¡V¿»‰šù@Ÿmfê-/í° +2Û6Wï„#Û{Ä6ÐYu!ÞÊ [Ô»˜lc,±å.SÓ¶— x¨e‹€L]ï.ƒWÜ“µy ©Vû«—5LÌ'Lk™l6äAOå/ƒ— í—ö¨Å[|Dç±OCc©ä» ù:?GØÀ|†>0(ÿg¾b?TËÝu²)øm.«#JðÓ|F7Gû~Æþnsí.Ö;¢=®É3à;øuzÖ§và»®øÿÉþ|-UmXÐB^?©oò3ü @ø ¾ba÷Êj³Û5åSò•¦boŸ¬í/ÕóåWø•ÚÞQw}’ßnú.Òoóõ¦á ¿UÓßiS—ÀmþeÓÐß´ïŽ;çý"ÆÏý7¶þ팬±¿==¬lé1#ÜV’'þÚ¹tšû õµøì?µ‡)ÎôÅk^Ç'Küò/×Xr^‡'ùÛ–-#6þ$;ùA&íÿ õå8¤Ì6Ÿ?-ǯ¡q,$ã¶–~ÿ%Ã:†Êñ,à­x%¬G´Ïº—G(\F%±˜tßµKëJñ˜kH|Ð@è}Å3ÌŠ/­ ˜ çÝON)`¬iŽè4»}0Ûøˆ‰€?Ë—Ö¾?b.©]°Ä®)Å{iXØüÈøúrüV'»ËÝìĦk ^÷Eñò²ú„oКyÞjtàêzoµ­yyh•É"þÞÚ }µá]’Cº_××P_´e~»úX»V×­…X]ÜR+ÏkÖ6­Z›ƒ‡•Žu•û\ƒúÆÅ·h®æÚ´`}ì%‹Yûª/ ¸ÂQýmŠÙÚè%ø«Pg-þúîᾃ·˜àDcãWg¤×à-$"öW궈ym!1i6 Yb¿#°”qÇzJ\c§®è¸ºðbœ{¿îëá˜pL¸öPgúLb[»cMħy¸±8ÉçòCSíQ _òbÄW1åã½·ÍznÙûÝmJIÅüL-Ò` ‰ßóæ­{‡—1M|RçS_aš?îŸ(�ÉJ%«™q4‡Ç€c"À bÀñ ¹P_ŠÏO8¯ò¥ˆ8òþûdâVHH^Âs‹ÍƒdyP;PßK ~¿.e!ÕüæÇ¦>� ˜1�‚ãnO- Þ?@xeË:Õ%òÊúâ�×Iò„ŸÿóÕS6± ÏQ1à˜pŠpdh2Ô9Gýõ=‡;²ƒ¡õN6OýsMbryã|>|(=$0yi¡õx¿Ö¾¼!ójþŠýö¨7v«ç9q§º¨]] ¨¹­nº°zƒuq€Ž‰�§ˆGG€c@mµxÏ .íÔ:ÒQ)Þ2†|°›S¤d/lBT,¨y–qà*k^2¶™½7eĦrÎË÷>yúLÄÄK ‰Wü´„Í·PÉó}¸…$äóá”/·±€„påæ$;¦KqÌÚËtToœSF�`B(.óŒ:<–WþJ,8"¬G€—Û¼Š�'ˆN Ø:v&ñÄ·¡ l‰Ž™”ˆ„'=ždש·ìá¨iNŸú’€”Ð!Ý{ËE à»OýÊtõŒ! Å2œ”€G2‡ŒÑâ·zŒ˜¾ü;DÏïœpþûôÈ^oC)¡ÃÃò’,÷¢s Á lBü¸3ðˆ÷ÝȶôŽ8ëO’ãbð±Øºõáà1`NÖ#ÀËm^G€cbÀb²sœºRü¨¡TÛTŠÏx8z' ðG¿£ƒ1Èè´õlñÙÛ>ïwî­§øÕwŽÏWXþñ"|<%/’—ŸújX$ž_ÂñËm–3Г,¯ÈSÏ ÞlŠw˜vœà}7“âIJkŸM»"Àçã11à˜pšð|…pT X�/·ÙŽ)óúç¨ÏÉ.~~®}ÄG7ˆõ¸ëÆœ€ž“þÙóÌï-$|c2Ð}÷÷òÓ˜?'K€tÑ™èÏËsëñh0aðj›ˆ`þܶ–%„›‘Ÿàª¸l^¨y‰�Çŀ㞄·)¬E€—Ûœ%Ô˜â}b]Ët ÛŸÞJ/ìºn‹Îàðé>÷PíÖ÷ÙBúô‰è‘‘Ÿ´¿ôe˜0múj”P“žN¥=1`-ܯosž‰¡êìQ“µÖº-!?ò®±œO–Ðô‘L(—¨e/~¶:éSHâ•ç~OørÏ)¬÷ba·>/¨ìzbÀ±ƒf.Én1`5¼Øfc8:Ô»˜l~E=jžäà »ƒ+ƒÐ8Ë€ˆÐ œOb!)XÆxþX,¦¤7Å+»'µˆ’èå˜¯ÖÆ’Ä6o’nØæžÌB ¢§Æì¨sSÅäÄÇÎq1’#V…D )/cÀ2ø`å_‡Ç€§�¯¶yNœšºÛ-ú4†õvi¦»]3ïôì益NY—úE°ù3§·ìb´èZmßfýûú½q„ w·sHNÛG|ç÷]{w»fÞé™ßÓ‰»vïë½ð:¼ºæ_F„ƒcÀ¼»]­ õ^‘_IS}BÑN2²;¯6æ>^žõóûøÕþ(/·YýÞœê£Í|rÔê—äè¹-åò¼^G€—Û¬w| ¨÷Yü¼™î\ã\ܲÝàÕÓ¹wYt²%ˆÚåZzä$в¢¡PwŠŸtlJÎmÝÁË3/˜ì]w:Úß¾¸†ßÙ49PS1 æïå5\àóÁ.M…´‰ï¹Œ$4²X&„ÖýU'U‡—š‰u×⯣©þzú ‹ìÉ+&W0²Fê¤êOñc’nw·±ž.o‘­rzÝ~\g½×k–‰4¡öï%cöîvpQRÆ®/²…)I›>гJ/oÁVé¦úkñ0$:ÏT}m`1½î u9©A—ëñֻ©‰¥¥Hñ¯Ç§Œ5"^ä-žSt5X@¦›|i‹&jñ0$´Nv¸±˜H‹Fˆ¼k@¯£ýêÓåÔÇ"Ík$Å{Ű£ÏâFz'ò>/ºÙ–g=ÝäK{4S‹Ç‡`KòÖ#PÈN†$ì““Q¨³­´GC)’v®ÃMÊ@ux‘]xÙ½¶< ÕÙVÚ¥±ïcŠn]à–uxF2‘Óulõx ˜•–i®Ã.u¸Ñ38‘ýxÕ­çñ0+íÓ`Š÷œ‚QÓp2…–ÙËpÞúÕóÁr0+íÒd-î »q[FB¿é£¹,^qOÚ‘´#P^Ú¦Ñï÷ô.ÿ·„”;Ý¿‹ìË úd—¿j…eÄÜ©³­´M³µx¼`Àè²/p‹Ñ×â±"‡ð1c¦—=ºÆzô”à¥>jú�|l!S»½Ô:°<0VOz‘CùÀB¦Ü6}‡²ˆŒnò¥®Åø€ {?¥Ô’"Géƒ]h×[ ˜ê&_Úª)Àež±pßôQˆ\6¯¸'¹Äù.-`J®›|i«Æê¼²{fV]Ú…b)‰žÀ‰ÏK»gjåÅ <Í@ci¤½Z‘âÁK»cfµB“ÅdÜé œÈ)xn}FV^Òe) ·ºÉ—öjGC=Oƒg.f�%<0Ðd•"§âc&L/g|¥dÜ_jGa¹-©ÅøØ`dá%4×[JFÿ’ÚDÚÏûV1µÁ%\Y6"áN7ùÒn-Jñàc+˜ZÐöõÚtq‹œ‡¬lÿ¾LAé¤ýZÓP?ç·DLÛ»<6#R‚9sKÏFíFk3*%x¹-Kñà%wÌÚùDN·È¹µûFßzL™¸FÒÈEh]Н¼Ï˜YûºÞéâ©C{oô-cÄ ÝDžµêYü3XIÖ®'r–‘ª‹H¼¢o3kÑg ·jÓËÑÒ¿èz÷`ý6 JÑÅ-R·å>Ã6´›YÈp±«iÈujaCý’Ü3Ëšíxce<*Á‹ÔËÇÜ‘ðØôC; mÄ#¹–Œ–KÓâ^ù÷D<67{µõx$áÞuq‹ÔÎ ¿a@j–4sXÆŒ[où`^‘×Zâ<÷;ô¬;yKì‘”ßhˆœHS|ì7LÙÔâºÿ¶¥<sïE#©õ)—ø˜Ìfõ]âÛ”nÛÓÝGäZù€ ¦VãP:ëÙ#=~«[|¹T‘â|È 9VÃÖÚS nÔ4'Ò^ù€Jmtþ4o±MÉûnñå’]LŠ_\â·”ÌìÁzçé‚gõlÄ#•Ò»HÛxé}n ™Ùè\Ïæ-´Ô¦<Ppãæ߱Èq.(ÅÃâ¿¡¤Ç›Zzº»y -µ>Rqã­ª'"/yáwÜS‘™Ÿöfß"KmÆ# ¹:×I7\XŠðÒ~Ë 916³ì¸¦û• »àÆo| ô.ÒfžûÀo¸=Õ;ŖÙ#3"ÆÜø­¤Z;õÍ{¼dÈÐbfV2¡ ßï¾ÛbbB&Œ™èž]ä’xA’“YAN¾_Ç8 ˜Ç�˜0Ø7~ˆ´ßŦø9¯3KˆäT”T”/ïÄ-$$" $ *]Ø"—mífjPQPQRRR¼¼¶-"àù?(™Ð÷IÓïBä<.<Å/ù„ }°˜ÿ—ÙÓÏŸ¦Î)))(Éj ŒHW,oöÁâEO Ÿb@üô¯‚Š‚‚œJcÝ¥ë:’â—<žR·…„À_†×µzéϧZ¹EÀŸâkðºV/ÒmKñ뼤œ×ìUc¹Fózº}àkŠr.°G½ˆˆˆ¼O)^DD¤“”âEDD:I)^DD¤“”âEDD:I)^DD¤“”âEDD:I)^DD¤“”âEDD:I)^DD¤“”âEDD:I)^DD¤“”âEDD:I)^DD¤“”âEDD:I)^DD¤“”âEDD:I)^DD¤“”âEDD:I)^DD¤“”âEDD:I)^DD¤“”âEDD:I)^DD¤“”âEDD:I)^DD¤“”âEDD:I)^DD¤“>jú�j7}�1lú�D2¡lú:¡dÒô!È~® Å»Rü‰ø é#9„›>‚nð•ä…QC½ˆˆH')Å‹ˆˆt’R¼ˆˆH')Å‹ˆˆt’R¼ˆˆH')Å‹ˆˆt’R¼ˆˆH')Å‹ˆˆt’R¼ˆˆH')Å‹ˆˆt’R¼ˆˆH')Å‹ˆˆt’R¼ˆˆH')Å‹ˆˆt’R¼ˆˆH')Å‹ˆˆt’R¼ˆˆH'}@dM‡ˆœ_°í7}h"rR,S|Öô±ˆH£¦M€ˆœžêEDD:éÿP Í@B1\·���%tEXtdate:create�2024-02-03T19:22:25+00:00[_íI���%tEXtdate:modify�2024-02-03T19:22:25+00:00*Uõ���(tEXtdate:timestamp�2024-02-03T19:22:25+00:00}t*���#tEXtps:HiResBoundingBox�484.5x124.5+0+0(å‡x���tEXtps:Level�PS-Adobe-2.0 EPSF-2.0Aù3����IEND®B`‚��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/iandtime.txt�����������������������������������������������������0000644�0001750�0001750�00000000042�14557511161�015366� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������../gnuastro-figures//iandtime.eps ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/README�����������������������������������������������������������0000644�0001750�0001750�00000002306�14551337306�013721� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Directory for images used in book ================================= In the raw Git project, this directory contains raw images that are used in the book and are not produced by the bootstrapping). After bootstrapping it will be populated with several derivative/created images. The details of each image (including a copyright) is given below: epicycles.png: This is a combined image from two images on Wikipedia (links below). On Wikipedia, they both have the GNU Free Documentation License, Version 1.2 or later. This combined image is released under GNU Free Documentation License, Version 1.3, similar to this README file (statement is at the bottom of this file). https://commons.wikimedia.org/wiki/File:Ghotb2.jpg https://commons.wikimedia.org/wiki/File:Fourier_series_sawtooth_wave_circles_animation.gif Copyright information --------------------- Copyright (C) 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/samplingfreq.eps�������������������������������������������������0000644�0001750�0001750�00000657433�14557511157�016267� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 0 0 483 122 %%HiResBoundingBox: 0.000000 0.000000 483.000000 122.000000 %%Creator: dvips(k) 2023.1 (TeX Live 2023) Copyright 2023 Radical Eye Software %%Title: all-figure1.dvi %%CreationDate: Sat Feb 3 19:22:18 2024 %%PageOrder: Ascend %%DocumentFonts: CMMI10 CMR10 CMBX10 CMR8 CMMI8 CMSY8 CMMI6 CMMI7 CMR7 %%+ CMSY7 %%EndComments % EPSF created by ps2eps 1.70 %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o ./tikz/all-figure1.ps ./tikz/all-figure1.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2024.02.03:2022 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: l3backend-dvips.pro 0 0 %% %% This is file `l3backend-dvips.pro', %% generated with the docstrip utility. %% %% The original source files were: %% %% l3backend-header.dtx (with options: `header,dvips') %% %% Copyright (C) 2019-2024 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of %% this license or (at your option) any later version. The latest %% version of this license is in the file: %% %% https://www.latex-project.org/lppl.txt %% %% This file is part of the "l3backend bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% %% File: l3backend-header.dtx /color.sc { } def TeXDict begin /TeXcolorseparation { setcolor } def end true setglobal /pdf.globaldict 4 dict def false setglobal /pdf.cvs { 65534 string cvs } def /pdf.dvi.pt { 72.27 mul Resolution div } def /pdf.pt.dvi { 72.27 div Resolution mul } def /pdf.rect.ht { dup 1 get neg exch 3 get add } def /pdf.linkmargin { 1 pdf.pt.dvi } def /pdf.linkdp.pad { 0 } def /pdf.linkht.pad { 0 } def /pdf.rect { /Rect [ pdf.llx pdf.lly pdf.urx pdf.ury ] } def /pdf.save.ll { currentpoint /pdf.lly exch def /pdf.llx exch def } def /pdf.save.ur { currentpoint /pdf.ury exch def /pdf.urx exch def } def /pdf.save.linkll { currentpoint pdf.linkmargin add pdf.linkdp.pad add /pdf.lly exch def pdf.linkmargin sub /pdf.llx exch def } def /pdf.save.linkur { currentpoint pdf.linkmargin sub pdf.linkht.pad sub /pdf.ury exch def pdf.linkmargin add /pdf.urx exch def } def /pdf.dest.anchor { currentpoint exch pdf.dvi.pt 72 add /pdf.dest.x exch def pdf.dvi.pt vsize 72 sub exch sub /pdf.dest.y exch def } def /pdf.dest.point { pdf.dest.x pdf.dest.y } def /pdf.dest2device { /pdf.dest.y exch def /pdf.dest.x exch def matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix cvx exec /pdf.dev.y exch def /pdf.dev.x exch def /pdf.tmpd exch def /pdf.tmpc exch def /pdf.tmpb exch def /pdf.tmpa exch def pdf.dest.x pdf.tmpa mul pdf.dest.y pdf.tmpc mul add pdf.dev.x add pdf.dest.x pdf.tmpb mul pdf.dest.y pdf.tmpd mul add pdf.dev.y add } def /pdf.bordertracking false def /pdf.bordertracking.begin { SDict /pdf.bordertracking true put SDict /pdf.leftboundary undef SDict /pdf.rightboundary undef /a where { /a { currentpoint pop SDict /pdf.rightboundary known dup { SDict /pdf.rightboundary get 2 index lt { not } if } if { pop } { SDict exch /pdf.rightboundary exch put } ifelse moveto currentpoint pop SDict /pdf.leftboundary known dup { SDict /pdf.leftboundary get 2 index gt { not } if } if { pop } { SDict exch /pdf.leftboundary exch put } ifelse } put } if } def /pdf.bordertracking.end { /a where { /a { moveto } put } if /x where { /x { 0 exch rmoveto } put } if SDict /pdf.leftboundary known { pdf.outerbox 0 pdf.leftboundary put } if SDict /pdf.rightboundary known { pdf.outerbox 2 pdf.rightboundary put } if SDict /pdf.bordertracking false put } def /pdf.bordertracking.endpage { pdf.bordertracking { pdf.bordertracking.end true setglobal pdf.globaldict /pdf.brokenlink.rect [ pdf.outerbox aload pop ] put pdf.globaldict /pdf.brokenlink.skip pdf.baselineskip put pdf.globaldict /pdf.brokenlink.dict pdf.link.dict pdf.cvs put false setglobal mark pdf.link.dict cvx exec /Rect [ pdf.llx pdf.lly pdf.outerbox 2 get pdf.linkmargin add currentpoint exch pop pdf.outerbox pdf.rect.ht sub pdf.linkmargin sub ] /ANN pdf.pdfmark } if } def /pdf.bordertracking.continue { /pdf.link.dict pdf.globaldict /pdf.brokenlink.dict get def /pdf.outerbox pdf.globaldict /pdf.brokenlink.rect get def /pdf.baselineskip pdf.globaldict /pdf.brokenlink.skip get def pdf.globaldict dup dup /pdf.brokenlink.dict undef /pdf.brokenlink.skip undef /pdf.brokenlink.rect undef currentpoint /pdf.originy exch def /pdf.originx exch def /a where { /a { moveto SDict begin currentpoint pdf.originy ne exch pdf.originx ne or { pdf.save.linkll /pdf.lly pdf.lly pdf.outerbox 1 get sub def pdf.bordertracking.begin } if end } put } if /x where { /x { 0 exch rmoveto SDict begin currentpoint pdf.originy ne exch pdf.originx ne or { pdf.save.linkll /pdf.lly pdf.lly pdf.outerbox 1 get sub def pdf.bordertracking.begin } if end } put } if } def /pdf.breaklink { pop counttomark 2 mod 0 eq { counttomark /pdf.count exch def { pdf.count 0 eq { exit } if counttomark 2 roll 1 index /Rect eq { dup 4 array copy dup dup 1 get pdf.outerbox pdf.rect.ht pdf.linkmargin 2 mul add sub 3 exch put dup pdf.outerbox 2 get pdf.linkmargin add 2 exch put dup dup 3 get pdf.outerbox pdf.rect.ht pdf.linkmargin 2 mul add add 1 exch put /pdf.currentrect exch def pdf.breaklink.write { pdf.currentrect dup pdf.outerbox 0 get pdf.linkmargin sub 0 exch put dup pdf.outerbox 2 get pdf.linkmargin add 2 exch put dup dup 1 get pdf.baselineskip add 1 exch put dup dup 3 get pdf.baselineskip add 3 exch put /pdf.currentrect exch def pdf.breaklink.write } 1 index 3 get pdf.linkmargin 2 mul add pdf.outerbox pdf.rect.ht add 2 index 1 get sub pdf.baselineskip div round cvi 1 sub exch repeat pdf.currentrect dup pdf.outerbox 0 get pdf.linkmargin sub 0 exch put dup dup 1 get pdf.baselineskip add 1 exch put dup dup 3 get pdf.baselineskip add 3 exch put dup 2 index 2 get 2 exch put /pdf.currentrect exch def pdf.breaklink.write SDict /pdf.pdfmark.good false put exit } { pdf.count 2 sub /pdf.count exch def } ifelse } loop } if /ANN } def /pdf.breaklink.write { counttomark 1 sub index /_objdef eq { counttomark -2 roll dup wcheck { readonly counttomark 2 roll } { pop pop } ifelse } if counttomark 1 add copy pop pdf.currentrect /ANN pdfmark } def /pdf.pdfmark { SDict /pdf.pdfmark.good true put dup /ANN eq { pdf.pdfmark.store pdf.pdfmark.dict begin Subtype /Link eq currentdict /Rect known and SDict /pdf.outerbox known and SDict /pdf.baselineskip known and { Rect 3 get pdf.linkmargin 2 mul add pdf.outerbox pdf.rect.ht add Rect 1 get sub pdf.baselineskip div round cvi 0 gt { pdf.breaklink } if } if end SDict /pdf.outerbox undef SDict /pdf.baselineskip undef currentdict /pdf.pdfmark.dict undef } if pdf.pdfmark.good { pdfmark } { cleartomark } ifelse } def /pdf.pdfmark.store { /pdf.pdfmark.dict 65534 dict def counttomark 1 add copy pop { dup mark eq { pop exit } { pdf.pdfmark.dict begin def end } ifelse } loop } def %% %% %% End of file `l3backend-dvips.pro'. %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup} ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N /erasepage{}N/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{ count ocount sub{pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginProcSet: color.pro 0 0 %! TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet TeXDict begin @defspecial systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict /cleartomark get put}ifelse /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution mul} def/BPToDvips{72 div Resolution mul}def product (Ghostscript) search {pop pop pop revision 927 gt}{pop false} ifelse{/BorderArrayPatch{} def}{/BorderArrayPatch{[exch{dup dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def} ifelse /HyperBorder {1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def /pgfHrgb{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfArgb} def /pgfdir { dup 0 moveto dup 5 index lineto } bind def} bind def /pgfVrgb{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfArgb} def /pgfdir { dup 0 exch moveto dup 5 index exch lineto } bind def} bind def /pgfArgb{ /pgfdiff 8 index round cvi 8 index round cvi sub 2 mul 1 add def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div pgfheight 9 index 9 index 9 index 14 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfdir stroke 4 -1 roll 7 index add 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll .5 sub } repeat mark 15 1 roll cleartomark exch pop }bind def /pgfR1rgb{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRrgb} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2rgb{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setrgbcolor fill pop}bind def /pgfRrgb{ /pgfdiff 8 index round cvi 8 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 9 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 9 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 8 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 8 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 8 index 8 index 8 index 13 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll 4 index add 4 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 14 1 roll cleartomark exch pop }bind def /pgfHcmyk{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAcmyk} def /pgfdir { dup 0 moveto dup 6 index lineto } bind def} bind def /pgfVcmyk{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAcmyk} def /pgfdir { dup 0 exch moveto dup 6 index exch lineto } bind def} bind def /pgfAcmyk{ /pgfdiff 10 index round cvi 10 index round cvi sub 2 mul 1 add def 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div pgfheight 12 index 12 index 12 index 12 index 18 index pgfdiff { 4 index 4 index 4 index 4 index setcmykcolor pgfdir stroke 5 -1 roll 9 index add 5 -1 roll 8 index add 5 -1 roll 7 index add 5 -1 roll 6 index add 5 -1 roll .5 sub } repeat mark 19 1 roll cleartomark exch pop }bind def /pgfR1cmyk{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRcmyk} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2cmyk{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setcmykcolor fill pop}bind def /pgfRcmyk{ /pgfdiff 10 index round cvi 10 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 11 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 11 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 10 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 10 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 11 index 11 index 11 index 11 index 17 index pgfdiff { 4 index 4 index 4 index 4 index setcmykcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 5 -1 roll 8 index add 5 -1 roll 7 index add 5 -1 roll 6 index add 5 -1 roll 5 index add 5 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 18 1 roll cleartomark exch pop }bind def /pgfHgray{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAgray} def /pgfdir { dup 0 moveto dup 3 index lineto } bind def} bind def /pgfVgray{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAgray} def /pgfdir { dup 0 exch moveto dup 3 index exch lineto } bind def} bind def /pgfAgray{ /pgfdiff 4 index round cvi 4 index round cvi sub 2 mul 1 add def dup 2 index sub pgfdiff div pgfheight 3 index 6 index pgfdiff { 1 index setgray pgfdir stroke exch 3 index add exch .5 sub } repeat mark 7 1 roll cleartomark exch pop }bind def /pgfR1gray{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRgray} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2gray{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setgray fill pop}bind def /pgfRgray{ /pgfdiff 4 index round cvi 4 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 5 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 5 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 4 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 4 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def dup 2 index sub pgfdiff div 2 index 5 index pgfdiff { 1 index setgray pgfcircx pgfcircy 2 index 0 360 arc closepath stroke exch 2 index add exch .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 6 1 roll cleartomark exch pop }bind def /pgfsc{}bind def/pgffc{}bind def/pgfstr{stroke}bind def/pgffill{fill}bind def/pgfeofill{eofill}bind def/pgfe{a dup 0 rlineto exch 0 exch rlineto neg 0 rlineto closepath}bind def/pgfw{setlinewidth}bind def/pgfs{save pgfpd 72 Resolution div 72 VResolution div neg scale magscale{1 DVImag div dup scale}if pgfx neg pgfy neg translate pgffoa .setopacityalpha}bind def/pgfr{pgfsd restore}bind def userdict begin/pgfo{pgfsd /pgfx currentpoint /pgfy exch def def @beginspecial}bind def /pgfc{newpath @endspecial pgfpd}bind def /pgfsd{globaldict /pgfdelta /delta where {pop delta} {0} ifelse put}bind def/pgfpd{/delta globaldict /pgfdelta get def}bind def /.setblendmode where {pop} {/.setblendmode{pop}def} ifelse /.setfillconstantalpha where {pop /.setopacityalpha {.setfillconstantalpha} def} {/.setopacityalpha where {pop} {/.setopacityalpha {pop} def} ifelse} ifelse /.pgfsetfillopacityalpha{/pgffoa exch def /.setfillconstantalpha where {pop pgffoa .setfillconstantalpha} {/pgffill{gsave pgffoa .setopacityalpha fill 1 .setopacityalpha newpath fill grestore newpath}bind def /pgfeofill{gsave pgffoa .setopacityalpha eofill 1 .setopacityalpha newpath eofill grestore newpath}bind def} ifelse} bind def /.pgfsetstrokeopacityalpha{/pgfsoa exch def /.setstrokeconstantalpha where {pop pgfsoa .setstrokeconstantalpha} {/pgfstr{gsave pgfsoa .setopacityalpha stroke grestore newpath}bind def} ifelse}bind def /pgffoa 1 def /pgfsoa 1 def /.pushpdf14devicefilter where {pop [userdict /bop-hook known {userdict /bop-hook get aload pop} if {0 .pushpdf14devicefilter} aload pop] cvx userdict exch /bop-hook exch put [userdict /eop-hook known {userdict /eop-hook get aload pop} if {.poppdf14devicefilter} aload pop] cvx userdict exch /eop-hook exch put} if systemdict /pdfmark known not {userdict /pdfmark systemdict /cleartomark get put} if end /pgfwritesamplecmyk { 4 index 0 5 index pgfcheckcolorrange 255 mul round cvi put 4 index 1 4 index pgfcheckcolorrange 255 mul round cvi put 4 index 2 3 index pgfcheckcolorrange 255 mul round cvi put 4 index 3 2 index pgfcheckcolorrange 255 mul round cvi put pop pop pop pop } bind def /pgfwritesamplergb { 3 index 0 4 index pgfcheckcolorrange 255 mul round cvi put 3 index 1 3 index pgfcheckcolorrange 255 mul round cvi put 3 index 2 2 index pgfcheckcolorrange 255 mul round cvi put pop pop pop } bind def /pgfwritesamplegray { pgfcheckcolorrange 16777215 mul round cvi 1 index 0 2 index -16 bitshift put 1 index 1 2 index 65535 and -8 bitshift put 1 index 2 2 index 255 and put pop } bind def /pgfcheckcolorrange { dup 0.0 lt {pop 0.0} if dup 1.0 gt {pop 1.0} if } bind def /pgfchanneldepthcmyk 8 def /pgfchanneldepthrgb 8 def /pgfchanneldepthgray 24 def /pgfcolorsamplecmyk 4 string def /pgfcolorsamplergb 3 string def /pgfcolorsamplegray 3 string def /pgfrangecmyk [0 1 0 1 0 1 0 1] def /pgfrangergb [0 1 0 1 0 1] def /pgfrangegray [0 1] def /pgf1{gsave exec 1.0 pgfw 2.00002 0.0 moveto -6.00006 4.00005 lineto -3.00003 0.0 lineto -6.00006 -4.00005 lineto pgffill grestore} bind def /pgf2{gsave exec 1.0 pgfw 0.8 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -3.00003 4.00005 moveto -2.75002 2.50002 0.0 0.24998 0.75 0.0 curveto 0.0 -0.24998 -2.75002 -2.50002 -3.00003 -4.00005 curveto pgfstr grestore} bind def /pgf3{gsave exec 1.0 pgfw [ ] 0.0 setdash 0.0 -5.00005 moveto 0.0 5.00005 lineto pgfstr grestore} bind def /pgf4{gsave exec 1.0 pgfw [ ] 0.0 setdash -3.00003 -5.00005 moveto 0.0 -5.00005 lineto 0.0 5.00005 lineto -3.00003 5.00005 lineto pgfstr grestore} bind def /pgf5{gsave exec 1.0 pgfw [ ] 0.0 setdash -2.00002 -5.00005 moveto 1.0 -3.00003 1.0 3.00003 -2.00002 5.00005 curveto pgfstr grestore} bind def /pgf6{gsave exec 1.0 pgfw [ ] 0.0 setdash -4.50003 -5.00005 moveto 0.49998 0.0 lineto -4.50003 5.00005 lineto pgfstr grestore} bind def /pgf7{gsave exec 1.0 pgfw -2.50002 0.0 translate [ ] 0.0 setdash 3.00003 0.0 moveto 3.00003 1.65689 1.65689 3.00003 0.0 3.00003 curveto -1.65689 3.00003 -3.00003 1.65689 -3.00003 0.0 curveto -3.00003 -1.65689 -1.65689 -3.00003 0.0 -3.00003 curveto 1.65689 -3.00003 3.00003 -1.65689 3.00003 0.0 curveto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def /pgf8{gsave exec 1.0 pgfw [ ] 0.0 setdash 1.0 0.0 moveto -5.00005 3.00003 lineto -11.00012 0.0 lineto -5.00005 -3.00003 lineto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def @fedspecial end %%BeginFont: CMSY7 %!PS-AdobeFont-1.0: CMSY7 003.002 %%Title: CMSY7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMSY7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY7 known{/CMSY7 findfont dup/UniqueID known{dup /UniqueID get 5096648 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY7 def /FontBBox {-15 -951 1251 782 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSY7.) readonly def /FullName (CMSY7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A4D9DAFF1B3EA76067 C5493B69F73B89C8B61804A34FCEC826343337CCDFFCE17BF343EA8034BF95AA 14C56862C2C052569AFB236E1F1795F05150C8F28DFEF6BF4BCBACB678D00036 30EE84FEB44B1A8438185EB45654E6853C1159B073E54292D135F0961A64E8A5 AAE49C4BA9C44156C123426212120F99F3E8B7425752A5FE384AAEF755A8464B 51F015F9E2967477D57B22627D75CEF8AAAF0AEBD504EB46D0289DFC8D86C972 F042BD88A90A53613DD93D8A7A8460E63D85F6C15C000C0AAEE4BD5130B6E668 8C9B3F3FFD804745DA1D5EC0AB85C96E1724FA67F9324C59275415182AB48D57 9722DCF602396AD4B5C075A5A89A5D005C9FE11273E5FBDDD1800F11BBDF6AEC 6711C5633A73AC5DF038BA521AC492E138F7FFC7C5438FFD32FEAA1128C66E83 0D3AA40665F05E62D7EF00B1B0596162C402A34B6BAE6300D43F3DFCC84860F5 C0F0F1CE28FC60642BBFE9BC9102E80146774CDC88F9C250DE762D24A3484BCD 1D26B6D9FE981CA5AAB2A4BEDC528115043DC18D7105735D7528C2C5DD89A812 75B5D7B2E5A586FBB0C061E708F92C1552F64A296490BD0F20243986A4707FF9 8AB3C917B8DB92F19DCA6B9D4A1DB57515E51DD85D5C9D2CAF7A036AA3F9E9B1 5B5E099CC05A9126AB274C17D75CB4FAF78052366D2F21EDAADF84B22A2D645A 3E65C4BC0F540B5D9609D88DD0E4CBEEF87C16447D43A5F98528FD45ADD10DE6 41AEC411FD6929308F0E4F48A8D9C9EE386E920D41C1CC98A52073011DF5BD28 5683F280B5CF7F27DC50930C81D344FF5A8A9258A207D2531AC21A735B14155B C22C752DD22AA33C52D6D4D053B3E46FD4C9129068DFF52695A3A9184D04E8EC 93696A3FEC3AEB3814D9015EC14C22EC3ABD5070E8C28A3B42F5596D948212B4 AFB9978A0A361135C9E18CBDC98E0D1E8BDC17E25DDB3D52E86127E5AAECC55D FEE61693190E378978EF1BBD4D1AF005D511C7607CCFA4BCBD3EC427CAD82809 B725B25AE8A03EE88F80A7732A571A2317E0B6A0D072EE8CE2EB9E033CDCC899 B64CF4FA1C708A885442062F08D3D8DAF44C066EE278714D1486EB709D327865 A483F62709E89D08291F044325208EBA758DD459481334F5D9AE3BB61B3020F2 A4538CFC2C94BE84C920BE80806FDCEE394230730E049333A7E16509207514FD 695B5E0AEA9E4A9737311AA0B33B15F6769FF865D1ACB63DC6201C3F1062A3FD 1B446C1857460745917A36289DD57C94FE6240F4A40FBDFC10E91B91B79029D9 9F1B9C74E8E5AA011A0ECBEC660230AD5929F01D0325D15FDC0040406F124021 02AE176F4C98BAC1706F03C2B5B40F325A50CA4683B2BB4605E68E72D0CBDC2D 96B3BBCDD01201B650A7E7744D58D1E36D81FBF72E0A875FF29B4C109A1950FC 9621B18D58806392EEE9841794DFD39E3C4E20D45384FE07F9D445F143B922D1 AB350AA6DFC51FCF767B141A392D6A8B633AACBCEC9F56A0CF40AB08020EE63E 08CC0BE01B40E86388A65F5869F2F4D022DD4B912031CB8CEDEDFC2473772569 5B28F66AB74CD7902A0061AA3547D13C7F0C6EEEA7B0BD316694A94E4D672520 EA044AB28D8D01076C486CE456EDA1811F7ACA75D27473080D27D3E681E35FC6 447046120C6CC4C17674F0F051570A79DCA74848F3F300B58B19018430D99858 CA5504084D6BB74CFDB635B6866974A9AF05DF201C69352B2663B0623E7828B9 5EC5FFA8D8F10A7C28000F8C679B180067D5481D6315BF1C4194EB171C8F3CE2 4CE319975B9E948D907F9F7EEAF07089844391555F329E331D52FF114668B8A4 80704B3C6AC0CCAA2F5D043CE44E65EDA89A0CA854CFDCB11D549B7FA72EDB90 D35353C34A771B1FAF96F83FCA5258AAB65384BAFFCE448690C1432A1F749C20 5817205185F973FA098BA856584753E75EBEBF387FC155202885F5B67117DD7E 70D1CD887183C5573B6FB607D4F6CC9F8B94B09B3F3AEC2EF1E6A320CF6D0112 63046321941D1FB3F2140B59370AA9387E24D579D389A166A10C989497FE9549 34E1AC2E546CC06C5308460DBEF3E1AEEB6CBB0FFDAC458E61DE3391480CF5CD 34A647D4DE15B81131B7D1F9EED4C6837A32E89B0EAAD6A05F5F67518655E5DB 224D4833CEC60D5DBBDB8A03FB1A9730589BB4F0FF56191D17E73B9562E0C356 B188882B36F9505F6F42EB2644FEE125C2A7D12227ABC8ADB924E88B0A9E8DC2 79762523B0B88DBBE6AC7968A46BD9E9F0C3F03F5F64724CA07782195F01F130 30DBE895C212E0EE20162D863F46A674D85232FA0DEE69A8DF019794AF6873AD 9CC2A5EEEF9393313CA519BF95C08ADF7A75B6F53EDCDC39851D20E58B97CA57 A7523717AA1821DEA94C8A9F8B82346B16D92D15AEDC16F0011A45A44B09DE47 08CBA46E8511D0C5CC83F952EEFA4ACFA7F3D7FA5E113EF6B70E5ABA6F1AD3B1 E4D3B15AC6D5C3BC70A3946F411A7D965D6FA9D7B6C6ECE19B2C29A2FF476251 EBF0CF3BF658A1D896323706172746F58B2DE49F8B7E431E20304A42694CCF73 11C4E9E96260CC442E2938A1E27EE6744C7CAB01634C8210CE40488B9CBD757C 4277B5E3E43C7560291D945F9128AF1F85924003418F96458ADDC5BB8EC431D5 AC9093D20DEA69B92454613BC1A82DAD4FBF8E56084494D9D2FFABD82A7C9847 171FE36B265B546F3072B0923840E6C6BB12CA53E05A99F0E8FD4F5109782746 7CAB9B35B68050230736AE624B7862D1244C7D9BE4D1CAAE21B123D1E8372377 F1FEF269A9A2EDF02CE0CC8BF92FD7EF09556987B8A3BF6D8C0A663DB6B9742B E9AC61A449106AF1EA7ACAD40AC6F59427CC51865E6A90CF2AEED8D6037BA70E 4ADDAF622CDE877C98C3B2006B4721FC9BA18E30F0752BD4ACE36221F5CD1497 8FEDA5D643BE2EE007970A68E53D85975116E6CC09F0039A09EBAF0CA4B0EED6 A485CC0B69E526033FD1C1190BC5686739CE13D1AE8EBCABC01FCFF26141867C 44ED291196E546369129B9F759FDD7DC21BAF0A528FC34BA9FA8937813953644 C539F9DA4E55E83DB3D6DA309C562DA1330B157957B18F7618544AB738E25F16 F0517CD13C1F11BB8EA056BDC575D77CDC526EF497639DD89C2098660C5C45B2 D7CF715AC5E76847E0D3178360DAC1BAF6ACAEE72453B845B9F86621C166857B 029CEF5AFE29D1EDB4CA3AD7D008B7550A779E0066D7312DD6C7AFE1C0BFFF25 7B062B0DF30032EA2A2FE3CC46C96A3A0BA1888D1D2B05424A59ABE3EE928ED8 B67F507EFA78AE128F58B54634C7F534B3D0F4AFC23E38FB56EB39CFA425FD37 848545EAD03EDC5A9E796CEFB345F527615C785963F536972EBD9CFC4A6A4A07 5A31A508CA147FBB762ADD198CE36DF86730FCE2B643D1E7DF0BDE800DE7AF89 44A36B04193E44231E08919EE91A8B559646DC4DFAFF0AD891890A0A88FFA8EF B066BCB7AFCA409C51889E7FEB33F19A3CB1268BD0EA74AF29C1401BABD16F87 ACF7DD65A8513DA9995C5092C36A774BC4260113360D29AF7ADF5D22B5B58E7E A9BEFC33B9A91D2C397B27A81087376CB623318A8362C3FA9CBE3026675723C2 E711910DDB328E0EE3FCE219F44FE528B70E58B8E6CDB4AAB48237DD933D9639 E9D4F9EADAA8D46537D964D75C27F210B0C2473CB60D65F61BBD91ADE01576BF 77C49E31936138B0FBA066BE910DE1B1F0E4FFB5E81038E8656ABFF08DFD923E 6BA2AFEDCE6998BBF7045393C34811501586A4846E5B942C8E99D4C481D3AE60 2796ADBB5242D59F1116EBB828014BD903EF58B223DFD18BFBAAE4D348876B06 CAC10B7AF0DC270E6702A3F75D4DCEF872F2CDB9470AC9A1DC1ABCB55636D26F 9CB6BF27A0DAEB1F62AFEC12F55F78C9B59AC6DA9DB4B45444B0C582DB4DB8A4 B31EF4AFB77988E92FC0B257374B4408406490D9AFCC495316D6C08BEC9A76C7 12371E14417711EF802FB7151B3F6A2580C97527C9C3A0FAAB8D62FD992AA18F EBEB36F7910186CD5F70A55DFE932757C299D9D2289796769A00A0C6ABD18F82 E0D4E95D6477E67B4C012DBBD098FE20E2F15C412DD2AD5471A65EACE05B3A1A 0C9C430BAEF4887F2CCE668116B87FFD9DAB4B9B3605CD26E6B12488058AFA30 8843791A95BB322DF5C47387F3EC72343855D6B23D72144EB5EB5157B8B238FD 6C71DDDA64C9539F66A7DD569FFF43DBE4A8F0608A3CBD354DD9BAB5E3C756DD 92C3C1B3E169D86A2230299432488BC04A87E08A80809F9968676DF9157B1C91 27C664ABCCBA9997FAD8966F766B325086899D1FE44581FE07C97688B3E15B0C 234A22646C32BB965B9BFD2CD34854D1488AAF021E169BF9CA9665CF040E25A8 16156C80A2F47397CD370AAEDA731E0D14FBEE1E51A17DB972D96DBCCE33F937 5CDBF1A650BF1D3536BA4CB7A1CACFD5CB457E2368A660A62AC26E64A631B2BA 6B08EBE42E02D9B1B2E95BF9F0A6B59C96A122968FD46A4D17BA3D018CCBA0F9 80BA3C1E6C683111AFF79303CF64F1D2CCBD7571C6E09DD9B27B8E101BE219F0 E075880A0E367885AC94143E777DAE455B990383100EADF786300602C2CE28F2 4F44662FDF03BD39A5181912D8F1243C36FF88882CFC4B34C1D4EBBC01D96A7D 9CE5303042D1B21042E4FEAA455F22A01333FCAD7E4AACA5D3A5386331985F6B 9B247EC6310BB07507321BEF3E4ECFC3B915AAA6E029B3999644C987640863B0 5DCF58CE479497AFAD1208FEFD1796E74467E9F7867C313A3412E6923F4C9144 C69EFA17965056DF043DB465BF2F1E191706D3AAB47E6AD5C9767E4A73B29F2D E2E579D0262237568F82B360ADB6D0219B7535EFD02DD0688CDD23D84FC4F308 5D2D0010B1A9F4F0321A00C154672D21708B66B91ADCF98BAC7A2F94848E9A4E 86CC82EDD0399BD9F13E43359E71F80086B9B0C3B6D08831D4479ED83E7892C4 90C477BD1F06DFEBBF60F26516EECDEFE4787EEA8683754F2B257D0BAA607DBA 35EC6D1618C2FDF3881827F92D793ECF152D761F2423A96210F582DC9B90120F 26A33025414716A5E6F56D712E31BABE5047EC4855B767AC63D793995C9E074B 6E35C7E5255FBF4C3F17E7AD7B2A6C5F7459794FC94306B581536910F244BF5A 3158E821CE75F4B0565EBE985DF24DAA92F9C1D848EEC6B88E21FB6C51125872 1752F7352291960E5BD36F78AABBCF6DAA4D07AF56E4B6058AAB13D41BCDAA14 C0D63C6807FCD0E2B4B9CC892F224843173A75DC53A8F0FA396959C2E2CFE3F5 9B1C8B62797F34E7A0BFCF0787C73FEF98442234A617CF161829498035D30B29 ADFEAABD0B496E8A2E764D22DB7737F950FC5982F1C5F4FD414C1B0202F40FBA 62C81B8F0E836CD73D79366FD62388B437B81FC673442EE34BF27454F72A08F3 389E60CE28A050601A42FB4491C60DC02EC008E6B9DD2495522BBEC7293E2923 120584E88412DA7137397B41A28706B1CC6BB0C80709A2A4BA79822D245757A4 3EE454198942ED2316FAEB981F7615E642167620EBDDC5B271E273216EB119C6 4F2F0412F0BA6E3BA396217597575C6739194E1F839232FF088FDDFD3695A5CB 9A0E220389938596D8BDB183138E1F73F64512E4FAB5E1328F9B42364E3113B8 004BE2CA0B074EE271BBE0260D31CE555D535C16EBB528747EBAFFF253E659DA 3A377CBE0B296276AACF0294CF90FDAADB4EAD5E2F600E5B2A018DEFB86FF61C 84296480A425687CCE37D671472537E897AFD4B8C6A6175E1ADDF9AD24DFC5C3 A73E18AC2D9B28BDA2F17D51DB3521945850DAF0EE48B0FAC271544C1B4F3B2D 53BFC8DE32BA366FB1FEC0DD6C0B1FEA374CBE2B96F5B235A1D83A240DB442C7 1460980A3E5B96AE3D5784DE2C2DFFA671E0A856DB2FF4130E5905F3D5338856 C11A468D867D0C6EC585F1AD3E7164B8598BB59973B9A952FAE819F052A6554D EDC342BCCB0525905D1D27ECB9EE43847B69AE116F494CB2DBBAFB2773F1A3E1 C75FBDF8D66FA5AB4005757D631A0D9424FCDA91A1D2AC6FCE7CC7A23E84C65B 3E92BC684F23467DCF8521E0E27CF1441C487EC6E3BCA0AB54BB137E83776009 833D772FD225E88A8BD992FD69819B3BA90BAAD1DDF16E4326190CC4BF9C30F2 AF7CA1FB38E6387D9745FC5E176B248B1581BF7A4CA2FCA8E423DF340EAE29AA 7E07A25FF838F67378F9A6A9A0B404E01E86E64FEF71DD3D540D4711AEB1974D E2E0D485DAFFC74BA6B8E9AFDA245BC8997BB39BB6BD52B496A09C68F7A8E900 8DB3007643416040FCEC85B407EA0A946827771FBBEE49A3DA5542CC5173A31A 0280AB8E922C23C1BDD88D70627EF124633C318E7C9ACBC14AE216BFD41C0B6B 3A0161757913CA1F7B6626963C09936A52E73DD9B3D86DEEE73C0293A646FCF1 21D4C33DFF1671DA7A53E77E20233EDE51571549AACB7968602CD03EE67ACACA B231661CA9DA2BEC5795A83DFAF675E9B052C8BDD51490F7874C91EF5ED2E0A6 BE9CBABB98A950F7E55DDA3823036437C11F614E27DA5BB8BC6D955FFE54B825 0201275C2C49A3908BEF1DB3D87792DDFFED23DE7FD9CFC284F6255C77E54A39 C2FDBCD28F2938E4CC135829AC1867CAA5705674062C9639FEEFBE49D6108091 7C58585B80464F7E69966D7933C7019BF336B88B9E0E7073A85EAF297B71B303 31EEE9121347A482D28CCE942AF53E94F88A97EF2F1860A92CE29A14495D67B7 D37E207D42F3891E0423F5BCFFCAAC057FEC683696ED6FEEFA65C8FB6F1312C5 24A1130192B4179F3B08DA1C951D988894E7FE7CFC28C56992A1CA82BF8BDBDA E021F16E630FF67201BA4DF5F3F4D6AA65B8347FC1575C142C6C1868E8472BD2 CF191137AE1B36F32FD84DCAD50644AD55EBA2694C93BDF984A5C9E7C92B73A0 26769F00831537266FD2E711AB3F8AFC5F3FDA3C9E6439FFC48C3D1B5527FC56 1FEDE991E66E8465C0E395EAD0A22A2FDC001E449AB9C5E0EF187A1DE9B74696 BEB6A525DBF3A60DA2FBF1579150DEE1C5D1B6F55FF2708CE23289803CE123BD C81E25DB96551A13AD713D5C7BFDD3F2E1D5C12463A195442B51909CC1724E50 A1F6F4EADB3B7355908F36F88521F333C4E7C70B094209D1F883B961DFAC32BC 8C5A2CAF77CA5E6AAB714CC0AF2B42FFF6F73301FC71AFFA9B33A2153F55C2DB C1C111874DEC37CB746BEC9A3A9A37A2DD098CE7C66B0FE38460ACD77A47D53C 1550F857FFB733B5A8D02FB56790A09190B29CCB4F4A3058B1C82F0CC5E1B2EB 2F8E06F2DE531E1EB81326A8EF0F82843A4AC59D267EEE45730895752820BA93 A129C22A78C1AB28BCF67AD5DF372FECC9EE6719A02E499FD5CA866688E86089 7EE8E5912087E0C4588DE38428114785E0CFEDB1E2EE24CC067D107DFDF1E2BD B1C4F9C6B740F3DEA0BD315581004E851ED5A9F66C4F9E95DE97D355DB06F482 A43B565F1255A85710B15A281E2F034B1C23FEE6CDF3A043780CB6AB18A016F1 9EAFE545CA5A5B5AAE2459D69D2151E99D029FB5C1649B9DA784BFDF7D177385 4D8B16B9922D149FFF6B4F99311D52BEC9A9FC098E7192180DBB38767DA9B9C6 E8CFC98615219EF3AD4A8157D14C72BA3F91C8B78381383E0BCA1A5319749E08 D67D1208C693A6640D1BD6B9285AC0D3110CBF8F7747AD12585141C3248D0BB5 BDE892F91A4B3291F21F30294693518E4629A3ADD7C8640E424FF615602C603E 1E14DCB3B17D34C090BEAD2A523E260A599522329B698729A635CFB15BE7E79E 6A34DAC7C3ED57340821A4E7A0C7F88F64BAA69BB80DFA8B659F4756878E3044 E1DB7EE4FE60074AF97818B3D36CF51110191B4E10655F52CC5D11F56517CFF9 04BA2676F4147DC8192C98C555B001D54301853030B2CF0C068ABE831158B1A3 F30593ABD51F5996CE493E0622323FE93B292844521051C1D3799C07DC879EE7 9D047DE1C7127E2DC6F94E30C34FF87FA03DB3A3D597697C133CFC5A9448E067 51777DCFEC80352A92D9DEC0A2F40580A0242C063CD1086D38FF5C6FA1BDB0A5 3EDB5499AA2322CC73A38FC826DC202679AF4A7B571509B715CB8BD1D0C5D1E5 9F5B2D6DF5E9 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMR7 %!PS-AdobeFont-1.0: CMR7 003.002 %%Title: CMR7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMR7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR7 known{/CMR7 findfont dup/UniqueID known{dup /UniqueID get 5000790 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR7 def /FontBBox {-27 -250 1122 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR7.) readonly def /FullName (CMR7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 50 /two put dup 52 /four put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB981ABA2ACC9A23A5 3E152596AF52983541F86D859FC064A0E3D5FC6647C3CAB83AD4F31DDA35019C CDB9E3DD3FEBD4C2B36BA3CF6E6C7DA85E25D8A31A9BAD39BDF31FD0D1790707 9DE6A078E8A409D8295F642DF492AC4F86AC84383B0F4C6BAA7C22AD5A898A71 D6CB34D2CD12266C486B75E75A69C14819DD9BB8159088E04D4717E576B8482D BDA52110AC8B8A80E4E9D58F470EEBD3CF44A1E1EE8DA318FFF3611B02534FC9 F4018C7C57E80570D2F634D98BE5D5EC6D95051157F0EA94A3D12BE0B4B79939 F82F8D73136D3337C44E314B0B16CB030D9A12E01FB667105F334C3EE965E5A3 D410D2F1531547A4497C355AEEB295CD3C5334BEE5232992960B757594B89F3E 52095042DBE6B4DA3C3AD50CA95EA9EBADA10630B500CF1FCCA7D60306743681 7E428D33B7F7C40B425CD58E4CD8AB474BCE6A307BC6C6EBC15A8A96E0E2977E A33389154536F5C5D8CF036D07F24094E779E5ACBE5502C92892F10F4C6DB627 C7EC4C7BF20B39418A8A85D7FD9B0EAAFD871DDD41F93BDE5FE619AFB8711824 DE890E62C1969A6FE28DD3578AF43D58A728FAFF0B9FAA640962C8F35A26F76C 67F3548D6DB54A25CEB368B47F97EA2B0C4D7C0E7894A4F0C823C6C1922CF9DC 10E05600556F1C7C9AFB33A2DB6F8730F70D6BF94B1FB0887451F2FFEEF3584F DFADCFA9A2D4846B8F0E51620E1327D994CDF973B837D10C90FF76DE22B47CD5 EE3183898D156861AB4DFAD34A1E3FA260B8164E6680BF58413A553E88F6100B C4F4E8E972C81A5F88A7DBCDC308B4C3581BCDE13877B976B1F84330839FE5CF C78551620EB803DF94A5C921F8EE24F7EF8FC4C3E1653514212631F54F90E3DC E9EAF96E998F340C4F729ECF7AB430FDB7C0BE3DF2C0D23015820E28B743CAD7 7F0AE95413C3EEABBC69E852F53EE1DC260D7F1E712BECEF2F18437DB23D8E74 2902AAFBC733AC5BAA452DD6F3671859AD836C8564E99CDC4183D8495AFD99D6 1F0D65B6588CE7546717911E25BDCA6C2649E3A7466A3E2DA7C7994A30AB4449 672EFD00632EFA8629C1AFB7D53D801028F77C864869FE636213A69173003EA6 BE1ABA95EB07B13D1594BEFCC95ECB0A9CFA9892EE0677D6B6C250855762B7A7 8E4E022640F93169DFA0303A0D5E73BF3E0F4D4AAD10FD7E4EB20532BA30371F E9F480F9513432946F9828AFB5D4AEAFA5829B2CB544E5EB634C4537EF7DF08A A1CFD94A52DCF0E7CE4C5EFFB01E6D50558B75DB4C8D5512B06080F27BE62E01 2EEA6A0357441401458C842D3DD4C35B8F561D816B336216CE0C14BF77648AF5 E33912CF95872A1E1AB9A18980A0B29A881D13397C15E1CBA5D3E0B27943EBE2 F3003D15EB446BCFC1C231832475D5B7AA19E4CFDE119D6CD62D053C6D29C333 5F729791D17B3F7108074EEF4D1BD101CB33E01004532CB0D716D2E54D169C6E 80163E70C0E9081F31A1ECBAE079D2A518B790B0CB2CD03DFD034A0F4788E800 B0CD2DC1FAFDD487C2F381EBAB2A2F3F3AF82021B211DC9CD2FBA6A1BB3D4AEA 4C7F3D9A5C21DFF284CCB827D205A69638E98D5DD8E36AFC1A4481B5CB2A2E8F D6C838DA6F81990F5ED928DC7457501B5C979FF4CD20A830896A460C5DB13D56 A3B2B5D9B292374A9BF392894DD99FCD6A1E655AB395E839F074D1596488700C 4E2891C8AEEF66568E82A8B826F9A28FF84D4D9BDA21F638EAF96880B4EBE0D8 081982F34831A03BEE81FC177700C2360D2A48915EC40D5FE85B400E175D5AF1 067FA0097904FB647757BB44B4042D30D1557BD0F7922D731142FD682139CEB7 58CA4C8C240A0B86B1888CACC507E24E04020BF1882BD9B4CAECFA97DB24D7F5 AD64C69454027F198BA35881B94EE9159A2D73E450C3BDAED66B886D6DEBC84B 653E165176228F88993F12A170775A8D7038BDF2FE8DC1F7B98BDC02D1E6686E 9B834F6C0AD90780B17DFE25F0A4E470CBA84E73F2D22BEE09A040F14CFA2C14 0FDA5A5149B5FAFFE49F55EEFC43831BC43A8326FEE9C7F469C0FC3B000884FA 41DA7318EB57262CB96FC4EC7F16CA07FE1C3BE8C2DBC8A8135953D6DDF20BDF 75A2B6D26074FCE752BD32FB9F5CA797775E8DB9BB9786B469A3CD65A0D9DDDA C2A166E454A94860EEF5B5C12172DDFC576A03F6E6F8A735FF21A3E9CCB4CAA1 3064893487697986A42CB5888B2B0A79FA3C74E8187BDDF7BEAB884B70B8D4AA AC6615745AEB906E08BF831CFDE222F58D02B428D55E9D5A3CDE74E42D8A2CB7 E1A3A9439B678AD438793ABBEB72B21C58981DAF3EDCE4BB93D95F4A1E943BBC B3A012DE92FED4F232A3A7D60CE60B605151F9C7C18A5C653E5D6D15E5B49A63 73E7A339504D0ACC74B8B116EA88C3EBA2CC631AAB29F761E5F062966AD2FD28 7FFE52FA8A115DBE23E471094FFB3CBAFBDF11B7E9058313F2D069B2CE98A962 64645738F02A31E2F2AC11628724034ADBCEE012721EBF0A567893411F950410 B20754A7510D041FFA6144AC9CC46D846B82581F20BBD001D34D9764010824BE 61C30D05E5C5D100A24F1917F01799CF5BC4E50FCECFEA732CB50196825F0E08 8A1EC868C6D4357857EE2957E081A0E4372E31A8ABEF23C3F2EA0FEE57DE4D08 61C570175C41AA0C7A3A579ADF593F18B4AE3782D2552E4E0759C32E059EE741 2D8191E381731769F6648B3581CAF11DAE46471896666F18F02918B0860BDA3C BD5DE777672447C23C62ACFC2611ED5239D6A266FDA6031EBC5A530C1A2FF7A6 B4380B9A4C877267854AD1F1677CB5433F28894ADF93D39EAB94541A8D232E08 22D082D0951A60F62B87DC028714EC74133A4D65F7D0D1296C0E189C4A42AA98 28E8AE7ECBB9FC8DFABCC6EEB1E9FB06227F90808EF31331CCC5D4C9A6182181 047902DC9FD0444FB94B60FC74F3B677758088CE6A159D940C5CF682335E756A 8BACF06AD7225D49B0002392C889B0FE2C71311D2596F4903D12FA20BA2FFE25 A0804B4BC282929BE31E0F46B34532CB5795A65218CFAE21F390792DA67775C7 B91A2BF4C16DE4F6551DAE3A5827F616BE9040EE6B1008DA2F99A01EF66D697A 6CD1A44E0A15D1F39EA8025E886A68A1E9C334327C7703EE721E497CA924AC90 7723106D913C5ED4BA4FC743CEA8D0F5172526107DA65775C0B1B77179D336C2 9B09B608D80B1A1E87CA1A84A833A00D980D919BFF56F6390E9D5B45E9935CF5 E69D003564462F750F7DCE02DC23CC215A0696B74D8BD3156A392A94F557655E 00BFAA035647568ED66157FACC585E411F7F428569C147DC43F6E4FDE693D0F3 9917BEFEDF61FB980B85515FF6424824E2D995B05CA1E5D3E8BD8D3281DB7CE4 E54923E84058FFC0A8A2C491327D0F87CE4C352B724167CEE224DABA3B95757E 4A419594BE4F92E78BA6D35D4C93D31ECC3134B24A45DC32445725BB044F09A3 AA8C31EFC0A2944ACE2F2CE054CF24DB350FB3C71115518C24BDC0F7E54250AF 9D3378D38480E1CB9029F31570C619A28F065CA4FED5665EDB96712ABEB33B9B 4232C00C1B0215F08D53F7E430887035AC25BEAF06942FD1B6C442253C887AB7 D694C1A6115C8990B4CAF1E81DD1FDDD6B03C00055BE956BE7FD8A4E1049AE69 EDA8593CBA8C4A41E046C689FBBF9F1B64E5856A7FB1C61EC815A56DE2A8ED33 41F370B8203D4E5B19C63AE9E6E0D26F4F3814B5AF48AD30EC9B8402C941FDD9 722FCAFC638FBB835F83DC77F93D367266FA7DFFFCB567EF82B1695AB4D94D09 B18AC041811027229DF431F5CB2BBF6ACCE9D500C8F075A74590641C1A607C56 D2B8624797BCD9C91C3177818691FBB4744EDB6056464A0B95B8D63F7C22309B 82D6126E2057BCC9FE5566D96B7A9B201A09B0D3252A5494C8CA2C8BA8A13C29 37EF2A882D61DA708C279F663D88A8E2999A0F3B6F98C49901A7631BF7708B67 54D0B4C52BF4BE0DA0439E6763A7C9D639AD4092E77B13D3510DAE1475C978AC 796F9B2AAD3BFF35C5A3E19B5E2BF704B3BBDF68CE48BA4FA2496D60E58888EA 28AE12D00E9F0816FAC190590A865BB58569A91BF0345D01230ABA361442006D BA2C90EC2036BBAB79EBAFC3F217DBD5854C519235F9627A1C3C71D21ED38AEF 0BB40F3B86BB9F09A3F309473D8757AB7E638DC1C59A7F9BCD49DE4107A2E54F 422767FB94048987847205584309397F554744690ACFFDF5902FE5DB355930B8 71863217830DD7A563B0B3A4025ACE75B0E777B4414B62A13B50C54E0E6D47E9 D43BF769B9411B74E1069BF71BA873B4B8973EC9BA492A5DEA58D267872BB246 10AA67B143D0E2223FFB4991E583E629413CC894C3FA4869B72D19CE1A0CEC8C 0FF5E5A3EC1FCB7D3C4289813F0D249A11B55104BD60B2A89BEF44CC77CCDA9A 065B8B83B4F4253AA1D535290DCFAA4773452D110D2B3370F9E2FE5432B54A9E 644EB3BA9BFF62347F376839024CD5EF3C5DFD30F412DD5474B7933E6A1AB63B 4B12F2417C72D0543C26A263AEA53E5BAEBD67E23553A72E949DEC556BEB5D09 C4D7A89B14FE4EC68D0E3E9D65A64B285E53590F418EDA8175113CA375A29930 DDCF4C71ABB26CEB800C2C2B253AC1F53651C88A56ABE5A74F3B54CB4FFDDB92 60AD7272BA25EC2F6FB759AA6E1E7964FB55AD09F4EB25DE45FD01833947BD05 6266AA8ABB7DD792941C7A070FCF3A4636FBF8921C70298D42FE92F079DBA2AD 6149D9CF9EF7264DE6DFCD4429949B15EA90B596340713BD61926DDB2BB23BE8 F9DE38A31620A817420A245946E551463960A8C5C7295E3B3D6A59BCDF5E472A 40B7A2CDDAA43CD8AAFC411D037142579D11054A903E102DF0D0C7B5BB854DBA F3F086AF991F7F5D5C730F8F9AF213F25786F3EC0E54530FF912F4876FDE16B6 A07D0DC4FC46EC6363BCB68B83ACC448B801EC43FDD2F8BE0E93D809FF81E38E 176AE17C67C85FEA58EC95435434C49A950AA955D8B20989C550AB1F1C31B7FF 99422E1F48FB7D6F327C6DBC4695A03903DB275B94CB39386E46579271870A25 21823E75C377E9D5B46655E8CD8F986372CF8BA846423E26582315A9D19E0BF5 305C32B2A0EAC3ECB275B1D8BE11A37ADF524944219D94EA2C5DBDA768828B6D 775DA8CDB09E0570E4ADDF462EFD8D3FA3F86B1DEECDFFB699AF6507257C1879 16FC615868C2D51F03CD57BA38D42995D9164B257441210084DC409B6EE4C119 0B2E17B0A8D5326DD0010E4A325D5F77BF935693BC90A00A28C7B5F74817DA39 F47A41E32F4F92AA04D30D810F7B1484EB53AD8CFC8CE8928B570314E0F713F8 AF127227190F9C16BB73D2A217FF801C391A29095DA5E4974D137A0CAA7DE702 E20DD4755B1D78739756A5E7EC3542B96AD6844199FFA2F5F2E9C64E2DA4FB2A ED79869F745C59D235438251BC2E6D26112AAED20E06021D1AB896EE1F1DD2EB 437FBD4A25E42245C5A647493FCC9922E6DD7AF57D5D482921D1CBD6F0F02949 C27777144751C1E72F4EE2BC343D4AE7A8A8758123B54FB1A026144C643651EF 0907A376945E19A8FC7F98A034832A5820A481B0823F980F59623E0511593FEA BDE6EFBCC0383242CBD4954027B075B21F10472059A480D6E5ED01C3B07461CE 9810251A5C5643EC7403130C2246E8616CEA25EAC7A0076731FEA8CC43BCE3BE 933FCE61067F5FD402E67E2B9DAD954AA77C5BC86BC5E4BCE2ED676D8D8EC7D0 ABC5C86D82180B9D5D7451C71B5149B6B67883578DE9909317928C0A92E3205E F23015400A1763A6FBF67FDE3318AD2696685A1832FC31CF38589EBC7CA1C818 60D2B2211E04EFCCEA88D9A9082E82951EEB123924A267CB03C48889032F2892 4227E217FA28F87E01CBF27BF1EA60641A4238258CB7AA355908FE36D90F5CAD FE992D03A33E47CA9AEBEFDA57793F39DC6A9E85D5B289F6B862B35DBCF82E43 5CD6A862F6FFAC36478C384C3BDB0148CB1FEDF55969C776E77917635B5A65EB F2AD351D21CD3822D43289FE8EB0FED58182997097C7E9F4373553AE1CA92083 EDE3BBE6C3BC7009D15AB5FEC6A59E9FD1BCC7B2099CA15FEF083B9CBF7B890E CDDDE6BA0AFF306C76500C945DC91BD533FF9A585CEEDEF79238C54E6168001E 26FEB29E523EE501BFA4F60B782B1499B07084C35A2434B4D29D3D8E2C8F945F A9922443B68D07DF7EAA1F4CDEFFC438B597D8943E231B5216808A85F30EDC81 9DF5DD22F54A45335B4C2203887475F39D247F0E7347BACFEAF220ED82F9263A 6488E73C1910023E505FDEB143006C1A351D441AC57F9D52D2C6D63D78C75605 999885676BBBAD56074298E0BFDACBA1830BA58E87F436CC670EE8EB1870154D 72DDBBF3794F8CAAA3F1E11DE29752DD99EAC695838A19BB67A1FA3829B6E0BC 5301610A0351AAA749F456AE31ADD87D6ABADCDD1FB3CE81C3713F48780DF407 530CB284B2AC709F52EE7AD647DEF9FA4D2A867CCEF728F3D40CF34C28D21527 10160B3DAFB5FE16AFC9D36C6EC4021FC189005862082BEA60AC72B63AD27D72 FAF3C2D89DA2648FC4C65104A069212D87144E8533CD86A6D73DC7CD9DBA25CE 7DA53B000266F3871B24663C77723703315C5E4A89DFCDBAB384AE7EB2F455AE AB191FED406F7F6EC9E5B8276EF5C4CBA041AC7E8BCEC7CAE840154BDCA3232F 15711ABD1E867A434E9787CA0A6D1F197597DA27ED2402CB2D84ED082E8D3A39 81E6EB270DCA4E7A90E2BEBD3CBB3A2BE3CAB926192D7292CC16845B6399A543 BCFD224BB52F21352732DB5154FA3442733066CDC3E186D8AA97CD801DFBE43A 116C86889BE198DA88CA978B8C40ACB67E8F7BA499DE68A6FF0DC72C3D00BA1A B378B39610F15CA026F95ED8155CE3FFFFA2E2FEB352DBE14CEE1669F2387B70 55B91185FBBED764266215D518716EDA3DFC9E5DB6B148A553E75AE5E38E1CFC 6EF47B314D54CF24BC13856F4F7C976BB91D143DE32FF49BFFC87E17885A1893 BA1B8E441B08EFC04F7D103C1FFBB665194B3D0920473740C55FB1C50EBCF717 A2359B687FCEAD65616EE89A68F8D91AFACAA0B238EE4AF0279AF5BE5294C3DE A7E1F5E6248C0210E7D40683F04B12A933C746ECB517CF94BBCC6E4CF49AC715 D8005AFECBDFB7A6B417DB8A28F8E9EAF39CEC1CA64DF37A5E66A76C26F721F8 A63B003A040A62F87DCF61B298F960D510BEFA453F118E59E7DE8CA3DD002EF0 127EAF733D5C61B5132348D280F84D159809CC71A3C6F7373BBFD8D6EF715D34 0016DEFF14AA5F960BF1BB9AC304A1823722843547BB4CA5EA4C41C6C2701C8F 7BDC810443F9DF34BA469A3260009B799871BAF8523C8763544DCD0B382D44C5 F75046AFF85F0B5A3188C2EE786CEEE5496A5AF4BCB0B429CAFC403FB983EFE3 61FD9F52ADFC38E07A0FD7BACBA530D2E4DAB2592AA9564843E7E2305047F060 C5FE4243FA8FDF1B5D4F61ACA7850A604FBC6D6970959752695C90F78961B4E2 C8CFA41082B1A37405AABCEE5BA3DC2B9EA76F486117B84728EC6D8AE6379CCB 402C2AA89078EC992C00D53151E9D82C65643F549A572A20F05107A41BE5AC57 8EDE92AE20B05E2D0C98151CC92D5389A675DFE39DF546A33A84A4C534337ADE B17C34E09145B37CE1EB1D10D42CC8D6E6B127A3809F7202381FDB88D42084CD 0AEAEB8A8288CB56870EA2BE9D0B9DC8291021CA561E2BA388DA3494E433E0EE 5E69DA51D0AC505C9F71562D3E9750F23CF14D2C8ECF0692FBBCB4A92B48B4B0 AA2163A516AD96B9354BCDBEBB351B643BF3CB00446AFFC4A137CB928E99D626 4824385F1E9CEAE6E317451B4ED21EF0010D48D4208A33C438D3DFB71B016A4A 126B01232F7E9ADF658B1608464659CC58C45D6BD570E1F3BF5A898600EF5C02 B0220C942D5ECDFBDA55B7F0D5EE8EFB3D6C6CF47C368F50D56E68E55530B5EA 13006EA18FFD6ABB9885E58B15D79A63CFF184DBCD58E3E99717AFCBB63FCD67 8FCD7D27FA745B291E27AF64F2083031A551C8A8AA175C3DEA7118C51D56BFBD EC6A7B4DCD8EC9487F9E3A959269241FDCCF32FFC8B4512158C82E5081343CDF A498C78EA594DDC70F78DB3A5C80A82039D47E3A8F91422EAE7EE919249F4CF4 2C5AD408D837D078F6A54434729F2B86673480EFB21B5B349F8F7BF71169F18B 5C6CF3C56AD6182A569E3B55C4BFA716AC5CB62DED86EBB886A3B413D09DB25F 259194B6B08D8E39A6A806F9EBE00B6D415B6C115C0518BD6D12F012304E5E89 84A02F587B3988D7DE8D1D323B3AE99370B7A2B52528F61FA79209D9120C9034 B8542BEA1B658756C8C61328BE72261AABEFA88686939D807C01251A0881FCE2 71BEC2B8B25F4DC1E1877210CEB5E2C2DB5C 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMMI7 %!PS-AdobeFont-1.0: CMMI7 003.002 %%Title: CMMI7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI7 known{/CMMI7 findfont dup/UniqueID known{dup /UniqueID get 5087382 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI7 def /FontBBox {-1 -250 1171 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI7.) readonly def /FullName (CMMI7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 25 /pi put dup 61 /slash put dup 80 /P put dup 115 /s put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBBAAB71645535A2B 6F0F22458E1429F4A67307E01F0BCF6F337E0E2AD89658D880B04C26306F8179 C8121B958459B923AC3B05B594D8AB95F75870019130442FD29578D44F5690BC 7281357A5041C8A809A59D0DEE108E2A07D406656BC74A9F3317CB887E712318 46B2ECAA341F8692ACC2D14ABABDFBCAC6F35858355F1D3228B0223EC73AC56F 3C987464DB829F243E304F4C59CDE3EF6EB53A4EF9BA91510CB89A3407261F58 A2AE66880BA98FC1EF546112892494C85A2C39F9DCCAC5766725894A7AA148E9 42360AE64BF3A4F1F9F0A0D0C1AAFDC4D50C52233AA595B7D0CE557D4A010D86 6E6B76A7E9523E8A6633DA9348BC3F59302F72F492A30782AE7EF220516893D3 DE836CDE311DED9262AF01C506040541EE84AAC539B404B23033EF56D4BCE6BE B05F79CD633FE75C6728114D2749E39FD7454050F67763AB636377BA8E1867C3 996C7D7D4A4A02BC49D1AD7FF174C1F49F1F205BC9D5AE42BCB02CF8554E8F5A D1876C9285B6CCD7B8C165F75843B0AA11D8462B57077AFE75BAD086E9D9F91E 30ACFF91776132F3CACAD1CA5E08B17B36A0E45ACBAC52393B9AF9089BD821D9 CD5A9CD9BECA59F7445D63DECC1B4502D299DB85B6E2EE7C69A1DAB91E22A3A5 89B524FA20AF6005E7A586B90A2C6E5A93C9EFA4ABEF5F7E4C7B81363FE8D2B3 0AD637FA863DE787581ADD7CBE463F7866C40F4E280260ED0E9C8453E5C7E668 FFF058B9742DD3F131C264F8FA102CD0DA05F3114D13D34D422799181453FE23 2FC6EFB01BE420C930B879D671F3DFB036197874725220644A5A52DFB467BB75 8089E4F40CE9401777B9FE1D0AEE02E782A6EB2A185A454AE9394094CDFE7CFA C03C23A78EAF242E4F811E4C83B59EF4DC5ACE4AD37B41616B46C263358710B2 6137314545CA6CE89119B42A3518EC85C68DC07D26839C68B1FF55C4A9CD518B A1FB32F9C475BB6110839FCCB94156E7B3648F27245A00D2966FC4DDE3996BFA F463A663CB6935B596B1582ED0ABBC648AAA8A86068BF0038001C753C8BAFA0D 2058041DFA720B528E2D4B16196DB1CF30C779D3F4800FE662D5B60B208341F2 A66EFCB8448C2FCD12DF0DD899911A8BD96C9B670054D328790E5D388518B146 8CE92E368EB1DB3CAAFCA4834CC9D9D9DCC80FB1F34F39DACDE643052C977A7E A95C5FA8DFED9B4DCE769E4E46256D6DA8FB18FD7FA4E4CED5D486803538F3B4 6D3F5B3C03184F5C26C66DBB4C724918EBB6A89C4602E4EDDA81EEE2BD18B683 FDB459F2CE0A9CED23DC208EAA8BEDB304B00E093DEE926A7B32FDB2EC70DD85 94B9137856DDDABB402B2C76DBA87149051ADC6007018EBDD571BE1D092EBD95 76D4E063AD7D5F62E6C26EDB88D38678F2806A1F4900B0ABC4ED034A818119A4 E618F1A902315BC98F26775E59555A3DCEA1D0F8B20A9084920ECBE3F7F245AC 1182A40B518B194669D95DE968542BFF80FDC89669BC256C44CB66A2AB8CD7A9 E42C69956CCB6BDE8C09AD22EF3196939B3B84EB23A6E071A36D702909E019FF 058F27562441EB5CAE87A4407F67C4390810BE89BBE867D636468E73677B84C8 5A1228DD7DC8EADA221B1BAD5F43E832F20ADE7ADBFF170AB306F5B711816FD1 39B7882556E30F002977FB88D8B28826A75DE0D20354A2D41F2DA8578376F7DD F27B0F59D4DDDF5790E11E3957491DC74EEB7625CA49FAD90FA47AD8E0BDE824 FF326A84846A47A21B70FA549BEE307F9C6970009F963B49A504F0115777826F 1D81203F655C242FFF15BA97E3BDDFBF435B10E74CE8543C98966223818839B3 6BF3BC63F882B0AD0FDACA8C56A570277952E1D83F18BEDF084D2AC004E2B09D 70DE1740D7D220E92B54D2FD0DDEAF1E08C41FD321A8D474982DD105B23166A7 AA9E0129DC88065B1E0F9382BEB4B4E1DAAE3EA5489BDCA921AD5A8175F2841F 9400478DFA99C5E5553F383882664D73FBDFA29BF32E52C28DCE80DAF4839434 022FA515679DBC13FE98968D2894DF5DD69C49BD23D00F5D858B69D1F220F968 F0700E13873579B3CFB658972098DC61F1DD580105BC27795DB4AF11A871CCD6 2E1B9AF7F0DAAD4CE315379A7B42CECB983DAC5A2B9426B4E5E0A7F7978504C1 DD7E30063AE3CBDFB24EA2BCCDC478AB82084FD30A4793F4707D9F8F9647B413 F8A5C5AC6D5EA0E35628CE1096A434FB8286F4617CB4D0AD30A4A0B255A5A356 25AA5A947FD3C4FA44B4AA80BAB44C48CC1E2C6D0A711365A37A58C3483D07ED 301A83D2650A2E8CBA9EE62FF5C2736EC82C1402959F64527F9B640619F112D9 8E0F4A8A3078C72ACF3F34AD855AA4008C96E30D9E8C414607C34E06E29AC5B9 2EE5DDB823E8C3EEE6A8DE228313D476A7F39B5DFBFBDEDDF7C45C1C88EE6D01 7FB4F7BB2CBBD5DF7F0CBD98DC287FA6940FBFE1B3B136613A3CF16634CA7B90 53D5FD5776515EFF5D37F8FCC62D8BEC8EE2216503D54D6F2032D3C2BF861E15 FD1B45B71576F15852EEA65DD372E911EF4CC18283CD2FF4196A3F1A9D81137F F1820EC604D6C61AF318C6C5AB6DA1EDF305CADEF7CC0183B86D31310A09972C A4BC37D110C77ECCA614D1A281EE1C2040B4A5ECB31A3FC61760F608E44332D1 D2C53C7891B505A3020E9E4915F3618588FCEC80B9ECC5E637D8D0F3C94B1F2A C53FC46CAE0AFAA7E12266C212A73AAE60199752C042BD55A5DF1CD07FBDB830 C83E7832D8554AD9C9CAEEC7CED1DAEE622090897641CF2E5B34A353D83264D4 4687522DB290D3BA927BA315EA5D25B0D7B69350C6C180AB0C322B05E01F7C7D F2F48651567F0C1B49AF3950E43C94D78F7B184BF2946B924BC4279AED28F3A0 17A7D8B235698A516D3FB5DF0B18A422B2410C385E7E9439C6D60917EB3299AD E31471616251FA40C9FA098109BB31A54D9C03B2F12947E4E9252A0851B81C4D F39E7FC44752504B589C3911571B1D3EC3BD1E1807F99CED1DB20270E483A805 CA2A016E7283550D1B1D35C226FAB63F983CED41A4D02A2F228FA9EF065027B3 CC69D6F2E278C0A2D238D3A37154B0D22281F62C61D9182A69657B027BBDED64 11E261E47620602F865221A534C5A32E2BF5B93A187911A146F2E96538B47DBB 7BFA7EF406FE940F4DAD17E6E4B80C4F031D71F65657C2F5C8233EEAC68DE8A7 E1FC3055C122C1795D0C71A0284F89A9BF04837F61C9E08DB42644A490C97D34 A5D3CEE475B8D578205005A0D68AF94AD27C0E855BB8EDB74775690A4EDD6543 BCC10CF13283D6FA8A7CF3FE6C4F96470A11FF0B0160D3F9816B13B0BAE0D8F9 B84C7631063FE658D13D108D6FE24A89799FABA72E6A6D1C943922CBE676C1B6 11A4106ECB4F1A7F8A84B2783C2E6A109C58D63FC0B74D8C8A1CB62D527441AE E656D94B1AA8581B4F07B653ED6486AAE1F8ADB30FA8D8914AF24721C74B0908 D84F2EBB91144ED4BD7EF533F2584048DEE37E17CDE5FBC2992A6F924FEBAF07 B626F988599DECDAB43C931CFECF99FC6EBB72F8E542765C26295902DFF60B7C 7B9ADDB4858BC9D808B7F0909690CF8DFBC59A786D48B891937C31A219842A43 234425B4963062DB4C4E9F534C77F4243408805B5A6B8BBF428632CA4AC03A7A E336DD181CE0CF3E742079E2919EAFABE16A63299771BF276EFA8D85C920F995 5B9D4E8F1ADFCC5C29AA89BF90C186C5DE7679906B2FD4DB279D245D27D08837 D3A8D541FE37415B706EC585C05804108C1D938E543B8B63E275EE85CE9DD843 0A8B9163144B77DA1A552A25D5E77E94F29CF252BE9950F4E627D5F72536B6F3 3278D4A45D10759F16AE42BAE8460865FEE84537F8EC9BF4813570E883B826FD 1ABF3F4E66DB6FEF8366E07BCF290EA67D39C9D81B2A7EA48E0A228FE3D5AA50 1A56CCBF229C9AF2537A8FA70EEF41096ACED34CC7BEECA4EA1F23B39FBC39D8 CCEA93E63F508CBE6722C11467A3D0D5C4C52031DE43C449333E4295104651CE E13B821D7904653346067E971BE0042C571ABF40C3A1079A675FE4264B784D46 1B8FAA4CDE9851C4EBF69ADF51A7B68CC8706C08D13A44909D4C1D78DB0E0B2D 0E0318304B229DD2FDC968027CDFF65722059C62154304D6F9C3F06DE22914EE 928B7D1BF1FC7E74B4D882998D59BC086AA2D4EAD0AE39F6B75B5A3FB9994506 E21731E1A15F0F2D12F88724BA72898197A80FDAC00243A3038871EBD2F2BAB1 C616278BB78490CB86F552CBE5DD0862F3793D72C68AC16AF8E38FE1A523A5FA 9B0428745B1455671CFA1F6BFBCCF9CA23C833113C2948E7A6AEFFF1A83509FF C559BB5EE7F92BB43F7F37A371E661C826F63DD0C1B25E34A8119E71EC82FB66 23C7B126FB6554E7560B1B69F2EDBB742F3B20D1648C151C37A8570CBD330A9E 7592A8607D2D727F3AAA0FF2057DF4E2A4C7D3B658C6CED38824A770420D89E7 F6AD385DBCE9C9A9095CF0042052A67AB804A6675BB9373A99390CBDFB715984 A069DE543E4C6ADD7F1EC7A15392EF834EAB4584679A43443953427DB13E6959 0F2F5061C99C6D00FA5327FDB5330AEDE19A53DE3AE092634DC6AEEAF63A5BED 990F8A117AEB1CA0E7F7DBE02CB3D86465F1613B976D1CF6F3A1E69740A2FDC8 062ACC45EDA6B863B60015F276860FB79C31D28F97A799568E66D0A8757B2C41 E939337B467303041D0F4C59390B2E41E5F298F275DCC699D27C459ED4D5ADBD 02539F00095D7E1872862142B46BE06513D3EB1A406E6BAA64BE795122100F09 C37E5D1834218EC1D11B031C7DFC9F5AB071A8F4DC08203821366959E9191D4B 289682D915AF28CE5858F83338DC51B6B0DD052A181D9133FBA50CF18F70EE65 C33726A0450EBA9D0E0C3662AF6C2121AB7911AA9880D6BB6811D6D7515888E7 199A0E632104059A88C9D85B19BB35EDF4AB95E1515BB2339572928BD5FE8CBD 2D4DAF55DCFE29FBC4C3D56336277BA0C9A889A129F9FA7052AD1420B8705163 1A808EC1284C888D78CEA2B4BAB71AD76289F5F4986008FA9BF328E8537E6C91 E11DBDD8447E1C9ACE18DB0EC3D5742C264C8EFA445C5D16C2930FB43669774F A2CA52144D99EFA8FC427DB4128CD4C036A8C611B087335C780740FAA419D39B 5DD68EA89C95275F9254D947EB3683D0130255269B10C6CFF29EA0BE484C9949 96188FCB747618A8044E2E37DFFD2DB8ABB621B34DC024259340677095B6937A 78EDCF508AC91D4CEFD872AD73F50582DC8807143CEB9F109C84DC5DA30B64E2 E56DE973088A9D32583D6946DB4F3523902FB1781D993B89D5F56D79D5D98CC1 7FEE73FC3A7D1BCCE90179AE450829E228B4DEAD3B2B4C79A400CFF899AB26F9 048B0875EBC871AD23BA96F88CDA8B87FE5809A13889A6AC349ABB25E54ACAA9 C213C5DE2D01BCB9CC0D7BBD384D23AE12E289FF8FDF1F611F5E14D4B20B15A3 42D9B3B37A83A9CA39B5DB6C8316C51B70F211530A56CFE54D63E88169CF5233 D1A7B2388025B3EBD2BEE0716C3A2D589EBC7A42B3DA602AC4E2FD9C9052C922 711E44408DEEA1FE0C9FD50A39AD46D437F61F284A2EFD42EF158EDD71A1486D 4865D6B5E20E60F4F4FC3D646909FF1EE2D7573665E4CD8340A1B232CAC0202C C35BA9BB3D2267C7E78518F6711633F888EBEF72DC750AC2CB362D528CFC8B2E A1AE1C05456F50EED8CAA768DEF47FF85C4322F02D7F9D188C6F285C674EF589 251B0B913339FD701FDB281338D96704ED7ED908BC113B4275A24D058955890B 12CCDD5572D63688426B0E1E9A40D6AAECFA5555C1CF9DBEF8C04CE1E5A63F14 969D39B6DAE8A91F6AF4CD1E2DA89A4661DA34E272B6032C442C031F081F5DF5 858F4620885773D8A2B2F5EB6DDA74C1408DF279900450E4A3E80BA9A9B1295E F24EDC3F6EFD81A741EF74B0202820516C4FB720687BDD915EB2396128C3B262 20E3075DA153D6FD36E1C05B855929DAA4DE694B6F15EF2145C63250B24B031A 4CF0AFDB225E91D99828B83BD90F1702D3906D45872587A3A116B138AD9627CE E778A949C392202823C670FDBC56F1896FFFFBCF52C4B400F67BA36B5FCE44A5 F18EEB8ADFC088C99DFF8E0A593E81A5ACA2E3693005F723C7D3E0AE2BDD3805 8C6007A00542DEB2539709558A88B21003CE4B2C7817AF207ED576B25A41DEA0 FC55A459BEB00ADB01309B35920F04F84B7B64F95AA99EBCB843A06CED900D99 97BEFD7CCB9F4D85876F10160C8D63E2FDE82B7A8D945F37CC9933ABE0FD1D76 268296B1A5AB06B2E814691128771694224781171DC6266BCC290FCE1AB59416 85530368115BABD4F1DE45952918D1945D51EB713C283DAE8EDD559F437CD886 A4B1DA6120D685C284673A3EE489FC1AE4297A3623B339B7D886B6B4B8F9F4A3 7BF85E320A52FDC6323B51879B98A14C33C567BC069D9B44616514EE1BE36F90 EC5FA33E1B6B0A46945D876EF0085E74935DF2560A03321861A752E59742B9FC 5C501FBC64BFB1602459885B63873DC857ED37F8BE1A9C6E9517B9BF5A6161BD DEB6DB0381FFB34A8A96AB4AD48BEC40D4C198ABC599C3758AFF638AA75BBDA4 8545D5F95FA426FB25587301A43E176F6CED7851E815AD907F2443E70740DD2D 4FBD5D978B9B37F59D6DCF0ADD0F90825DD23558FCB858513602C8BC82BFA383 7AA6DCEA4009961D06DF233C5381A7F9541259926446B2F03664BC5978A1B6CD EA6EBC9FE6100A65959513EEE32E69D47B55BAF30A893D77142F943982019C01 715CE29923795EA01C58A798979939B507C5B29A32881877EF7EF0C5CB3DE591 6B9A6C3F3FFA847F396A396F078860B59850BA4CA3115CA2376AEE6B30C05DC1 6F9DB6781ED0F9D45D10E096C33B1B7CD12A9D57C6E49AD833C4B093DC82811F 16B3BD902BE764A1680831EC5A6C1CED84AE0DC0A65678EA5270BF20931E6409 7AA44EACB22CCA11098F8A51096BE83A1ABA56C9EED4195D5CCF24FDAD92E823 C439DAAFBFD652157D728F2754F28304710D3CB33763156D76A259D446647A11 493FAC70DD28063A4CDDA162F72542368E1AC2826C4BFF7109208F66371910C1 068F21779FC39DE03AECF1C9FB2F417930C22791961D801284DCC89B0833B6A8 D63F153ACBFB7B7D547924613BBCCAED37D90BAC5B0264ED31C7B9DA5A2BC620 9B20CA48424D0FF58905BCD6190BF4B5FC6ECCA1BCEF13426920197CAB41C4E6 E82E8EE7BCB23C6BA6F8B58001533B225ED721D6CE3D6E89116EC33CAA6E905A 649F8C6A1AA187A48E20DB864596481976216DB78F0F57543DFAE3CDC0A6FC77 2CAA49442527A5D94DC54BE93C875690CBE52EAA4EDD9F2A511361BC0F0807EE 96AD0D26B62D809E82EC14EDB158EF48A748A6FE0C3A7EE5D4479B35425F35AD 3EC7444F6FA75CEA5011AD571078293448A33C7647611CAEE87974B0A756DAC9 4E1BA78DEE477FA59AD50BF5C52E068A5E044A4A4994D5B24CC5045F768A3C51 D4F65E2A5AFD271A7666C6835E28C60751EE528C0742433165AFBE71562A3016 F59676D56B0B5F7E4984D664BC3ADDAF24B4205752EE21D4B57057A943018466 09C3FA5D2C5BCBFC22A643586BC9E7A965DC34C0A7D76A470B0602AE45106417 0701ACD2C764DDE218B924E38B5A13CB82678372E743A8B3CC300BCBBB878978 D9847F0640A031D5E76B5AD07699C3B2FC6C1DBBF79938BA649C152FFB2B5BBA D18B9570670B99907506494F362B124790A17D4F415D8447ECF70B67DBD46643 91AD465A1852B804CBE65206EAAA38FFD2B4180AF00DBC6296D1FEDC19FA5BCA A34AD360FFF6448ECF0C070FCFC38C9B2A0C3BA3A2F5C501AF422AB19AF71892 751E333B3699808F21E6766406002FA2421F56C69D2E51C2B2216963F2BA3BEA AD824B9D615294DA6ECF0D368A804C33757192B269FADA535A6673D051CEFCBA F069F54D177FFE0DAE3FF3FC306A8068ECD70110AA5D0040732FF339A34551E7 559ADC69253C322BBC30885EAA8428E6EAE6B9EFF05C08F7682BCFDA5A1DF66D 1B40E748808F8295F3DB4EFFFD7A18494D1A89DB2CEF167EDCE15B2E09EF726A 08D136CCF5409783E81A542284A9E584045EFD6A178B5373C350B21C3A34D9CD 4B1DACD67F0EFB5D0614953268406714D20D0682B9034C3F9DCA3D82DC16F6EB E552812F8969CBC59DF9699021198D19714375FC8FC95165C7B958F87DDF0561 59306478EF4E9D5600D2667EE1870596C2134433C222226127CFA3EEF5D51BE0 2AC5088C6628E796989805D292A760F49F5A80C368495A15BAC3FBE9C47C9D00 9F8933589DC25BD35DE191D1117FC9D861BCB0B75ED2F2E5DCAF8F4A7483B24D F8B3D455A1CE95CBC918B6CBE43145BF880B60773901AC84088ADF7C09EF9DB0 F2824E13EB27F3166EC715CD8813283631C1EB5FCB95388F3C451044B5E01815 8EBC43F1904166D0802442AD03A31F8324D2706F2C67945F1E35A257CC183B79 495D15F49AD969DCFC30E76EA324DE50FED6C40EDA82014D1CB8BFE66491B0A2 32190F7D4D7C68F7F5FA2330E55B902ACC35DE5E2C1A0435F0C904E0EFB78F2A ABD047848708DA0C21E76662DCB36B7737510ED74EE8CC4F71625A6706270F04 79BE1EABE14674F7E7710F2716940BB5AE450019D9CA2821970E21D266527919 EA7F936F21025B6E55F1FA5283349FB9A8BEC5785598A28A3099507ADB319E73 CE04CCACB006B8C6B03D46FC042E7E4EA917585E0A5FF4E12E5DD451A1404F21 EC8331F0E9454DB872C584F11804F73EA41B6A6784B3ADCE20F8600CA3C8BECA 14F2924CD0485D362421FB251048A5560583150DB3A518CB20B94F63D3489FB3 931F434799C7582544226C199648D6C4715C3E7796584DAB237DF303C254DA26 8F336F28967258C9C6BE68C7D6AD7FBE64697D5A7ABBDE22DB8273F00C6D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMMI6 %!PS-AdobeFont-1.0: CMMI6 003.002 %%Title: CMMI6 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI6. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI6 known{/CMMI6 findfont dup/UniqueID known{dup /UniqueID get 5087381 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI6 def /FontBBox {11 -250 1241 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI6.) readonly def /FullName (CMMI6) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 109 /m put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFB83E8A2A6085DA11 61B1632328B94B21D3CBF2E7752D441A2C9A03F6681FDAB37C4B67D5857720F7 0C4BCEE266586738012A2237A85FCD0425DA7E8E8632543F5BD5D50F9DBAAE69 9E053AECA6027559DE42F7291EB381D866F1293107553809861D43508C6F2341 5E4FCC431AF4A9B3660386AE63E877DCF5E513D0D5702B98D58B34897FEE163A 75CD6F5A2196F91CE5060CA5E72F9C5F79D18F242EEE58135BFAB02D5CA430B6 D1B9A376849751A45E52577B1810C4F0C7F6C8196071D5B08FDB731C5384CCBF 03B460347E0CAC959E4A12620B6C2ED62E06A241D1637F418B5599A7FF3C1390 7AF66A00F7C31B4EDF249C56C268EC9D546CD0489DA51B734C8292CE7B3D9E30 71448C85ACC64FA99B2DEA91AA4CBCBBB9DE20833700AF96395DEEDA3FEB7D6E D6E3BE4A62CBFA18BD0471C14F3A2FD025C88E8166A9830C5B5B94624A3D6482 D1A1D83805D0EDAC1C79EA858A523D9FA3356DF42BC01886E77F6AA6B04E4E3F AD107D861FC626F0A439BC3F125D48649E5101BF79C71507FDACACBBB4C4335B C41A5C15ADF1DF69E1D68C3EB9BE30BDD5385F81D26EC8F2F206C1C7032B9EB7 0392BBCA23B4693686AF8D2E1ACB2FBEE81D75667CD1DDB906BC5B675660ABA4 E63429F16623F20B6A040E4942107CCA26CF6C1F52DEED9EC7EB15BE4F18F2E3 9ABDEEAAEA9AC41E9F20C37C54B33F609F5835AE5A1EC9D674DC50FAFF6D3511 2198195590F62B3B8A6FC8C3431BB8895A2F910F0361062DE32CDA9A7F41E761 B09BD8545CAA2D7124B5688B54705AA52E4716E36C0303FEAD38E0510B3CB496 6C30B115C37E02043D47B4ED796C671E30360800EC13F0F0FF3E0DBF5A642396 EB0F39A9DAF0974678EA1D041F08BD73867065DA91B044EF2AB15FAA6546031E 189936C1FD302BCFBE55EAF369DBA4895DD0996BF7292762551A86C8A3604E9A 8AD29E38BF6FD40172051EBE7C694249F3378ED0139D37EEA3ADB66F3A80A1D9 9C3655F054CACE93BA4AD42DC78A03F42455ED1BD5C122F234F21ACEB8FEFF9E 3BFE0DB2DA6D368478299ED63912A234ADB1DCCF1E519AD20772B71F8522B5DB 24E9658BDC1333D76F07F63D81F7A51D12C445ABF698092A24E5E5C36A52206C 0C41F7DCA529BB0A4D146DB6B4B341459FC17FFA357CA5F93DBCF30B61374613 4846D619423BCAC59B7EB40C14C70ABD985754A0094C98350D01FE9FA371B0F4 38884690DC7700C49236EF68BD6E806E8937AD8B77648F552C0C907007465A76 1475BDD3FBE1CF69C706E703226471C249A3448F81C240ADBE4B5474216D0235 6B0816BB6935A2704E851E20C002F85B653BB0700915B358DDC168ED3FAE3D91 8280A5CA5C2708D622B03DC47A70E5FFCAD5A7C8D9AD563857BBEF92A3BDB588 8B5B55CC9B960F20CA4AEB598DA8488004DEDBC9671488011E836D9D8B6251BF 256D08E6F1808E9D498449DF1F18E48B310D561D4DD3146C2BA64D960E66447F 6DA8B07194E3BFAF662C00737BB7222B55A5CC206A1C46F252ACF93D2063BABE 2BAB874C01AEC438D3F86AE37C9D7FCE4077F5B5785E12C1E0B685134CE2E8A2 2E4DCDDAED2D53D13014E428FAAE22447763D4693E82600F850CA4A49E1ADC5D C8DFC16E97B9F6164095CF7F31373B591F815621F45DFF77BFBF89EF60C9F50F 0C2FBBA4EA9602E197B9447FAB6AB57B19B1C801DAB66BF7D263F6572B9EEF88 E06744C1FE197B8EAA71E1EB67716B7CAB30C859A2D1B2DB95ECED02B83FBA32 E62F97EE4403FADEC936CC8DAA161F7B509B2723BA2B735572A80D7D087E6395 6A9D34D5963E3C6E37F307C66D1CE551D2F055BFCC7360FBE93ACAFDE2B1A849 37FD373F62BB23C1A2E3DF61C9452A8C995B03D44D6210A968C6293B4A3BE662 C7B0B59E6EF6D53FD293B2C290436B0C448E7D15A63533DE321643E53C85EF8B 060C434E46A736EA617EA00D185323460E77B95C49070B035194A2E7693C3B15 104ED7F56FCADABE49F27F9A576B354C574B5BAFFFC57FE9AF02FBD87B8874A1 24C53826659BEB1EC50446AC26EF3A95877ED3D81D33A8BC1BF7473FB9C11ABA 0F27B38EEBDF77D3D3EA63AE6022DB0D4F1125DF274B86EF0A4A263E108D6044 7A885F5E87362293A53F457CBA6C911D23653DA7CE4BB7D4FF4481AB97C0DD81 C13515F0E3BF8A7E8DE2CE69B25BA9C185D9BF31A65DD290B0D4FDF40B61E2D9 AF92BC6468B3F5AB5D5B88710C489ACC69198D697055B39AB3DE8B3733825C5E 6E763E2698574381A01352A7042A36EA96D17DD2EEEAFF04ABF7BF7D877B0FC7 B6BA51BA994D431F472B6EC4B4C327399576470A1773BCBAC61CDBF0F95DA6A5 0BE5239B7E9CD39E1E4D27EF6695D1FB56D4CA2C2370509547D6D01273CBE6E0 66A696C35D2D0282CB8C85D7B1C51453A0AD0BC80E1D183D11AA78879643D9D9 A3D0B2BD8EE3EDF29483CC5871426232A20CB058EEBDAAED85378B163425C270 B0F7BB46B7D1B89CF84E6A06791195FB17F11F34A2548FE424DE10E376B39A2F DD9B0BA2F2FDF3ED4AACBD0D60E67C0749D6DCBDE6E79041398DF3FC8D9B6CFC 693B870683CC425C52705902DFD324E157C9829F25B14A057AA92AFA17F156FB 0BA949698EAA0657B03D9538288D887959EF24A427EE7EDE47F304A1A6A715FA 2966273831B5B3A9C11021C153E67A73FA606FE3233C3DB217404C6AED6A4C59 DD4C2A98B31AF5604D8DE8354448B4CEC66022E756B0056CD32E9B002ADC712C 0545C2C16D9457E271D98A4ED7DDE01BBD1856F5C3DA28794D2C7951FE2FE6D9 18643CEEC41CA4A3464D3D3A102653CD6EAADA59CDD44918523B8811C2ECCABA AC0D188F5E07B37AFD56006B10B32EDD179F4DA693EEBF4DF5425D996585F21C 8780A4D23D24FB0618C12DE65CAD42A0138E28A100257978EDCAD168C55C6F07 78A067F0299890356C2A184820A554FB07448395ECE36C45211757552E288ED3 7DFE46CB92EB2070442AFC85864A45000C4854D728096AD3D4C552EFC26DB6B9 C340358451B50AF9F1B35C2E32D495DE85B5848D78940270DEFC07A14D960730 878B5B55916FB40FD805116C9C2AC8C6D4645DA67A978F1C6FE705EC188DBF7B FE7AD6769F2EEC4A9B05306D5BCD6EC3A240D6A29ED07D1D82E697DC8CC391AA 015DB6BCD1DA5C9A5A7BE3C5936681215E859E9837027D108A54F42AB24E38C2 4A7D8CF3264AE049D4B1AF48BBC564BCC88AF19D37DD81CCC431D0C554DF29A6 94ABDF8126EE4FE1DFB78559B9BF36FAFEC9791049C865694F9E2FFB7A308FEB EF0195FAA6BFE7A081B65C5125623903828372F117EE17E588B2FA26DC9AE37D 9A6F0043C019624D3D87AFDB4B90C46AEA78919CEF5D7ACEE316F30EA0229742 55E02E0E2533CAD78CE9BD6E0260A695D776ABA229D89CF9BEA92CE0397821A8 830A557021B3B90CE0B07A4B34C24337FA3FA4A3728B6E013BA01071CA7FA667 6FFB4BA3A28B5D5614ACD4E80E00938C2589CC6CF885A260AF7589240BF8987B 20A19FDAC73FAEEDD93EBCB3D46F735214164AFAF1A7828FE96E2BF7CE1EA46E FC1FC4527A0ADF2B81CA51E3D96F3E786511AF00FDDD9764CD3178362CF9DEE5 F05D100EC21A301F40FEFC3EF05AFEC140A9466AE68FCFD6CAC1A143BAF2B7BF D0DF808F0CF87FE2399CD9D2DD424227CA7D4073ED002CD555FBE8057A797B60 313D18ECDD779FA7289D4E7BF82D95A7535CE3F0F4164AF239AC666653736654 C13E436B526EC5A1DC97E1D85C4EB563C7061AE1E81F0B38BC45B17C15FDB0DA E5F6332721A925D4DD5A97BFF3E3F11D4F4F43BAE4E73A294D314527397F03CE AFD12DDF9D07DAD8D6C8EFAFC2F52E20FBF62026810C0C31A1EF71FBD612654D C68B7A24112F0ABDD20EFF3DADBE447AF9CE568F873ACE72B63283CB26B89BED 4B3315F26084453B1EB0877065A76E7B704B27F93DBEB365574A78E92FDB4B82 D6ED91A1728F571FC9CAB636A6E81D0C1C4F5E3F6F4574B6EED48BB61EFDDC80 1831E2AB9327B37881F0CA5D5265575F210BF4BCD8653B4193F74E3FF65028F9 2968B8127C68CA2919DDF529EC882EE99901146CA629A07B4DC59E7868DBE083 6E546C5769655EF6628FE2EA78AC891D130108192053D5056A7BD06C09592AF9 6310B3586A2609DB94CB0079550358F5547B9FBB2B77917A327EFE3F972C7263 54076627B4DD74638C3105FB25DA246484799D5326EE80503F18672B893289CB 1FFF8D3F662FB33E93025D86803551A8A1DE363D1534BFA3EF968871B19FB189 DAD841C177E2AC98B6B69A78048221C5EBBBB86511939D3A9963B3BF021185AB 0B26CA7D0A779DC2F7693C7E48286BD60EE46615E31B93FB0E6992AE20C792A4 72AD6FFAD6682D0F606807D7AE63A6280B5967FAB889DCDF0F76347CE302FAED A59E1B1AB785D9D0ED695A0D05DD3DF0EF0B275AFCF9EC7031E1357E99A3DB85 B4D137567875F7580E2BEC96B08C97ECB40876000B610E0BFE81E7884C9BBAE6 6BE9C2C612475396BC10EC7FFBD1118A7971FE1971DFD0CB677ECA65DD837B5E C7D36FE9F20A15A941F1E77C11093C902DF5B7639580B9C0E4AAD13518E1901C 1162FA095F301848770C6C618E371A0AC3463D0D94221EFCC0884B21300194B5 97E03BCD5C4878CEBF352EDD1D2173B56C9B6A08BF3F33419DF226E1633CC5CA A88A57AA85E21657569916E9B4B79E51B5535A57B2D6FA3EED1D0AA32DC0165B 12F8F5A681040B456D8DF175AD6053A2954F327F4EB4CD453A056FB1701242C2 59755058640C62632C764E002CE928E6B908BB137C28630A3CDBC7C34CF2B643 FFAFF20E345A86F31756C78A8EE2B9B1C5DAB2C863B29A44190770FD90BC6AED 0C25942BBD6A370C21650947B49AC8EB6825BE65DEFAFDDA32007754DFE0273F B995B8986E505F95E58A3F8873545DDA6F3FFAADE992F3FF7B2DAB76D663280E CF2BA18BC8871A7C361AA3600B192948CB918FEB0F2900AF2BCF169576828325 449CBF0C7AEDC299FCBB061F491469B9ED1D56771A03F9F202550E17FDB15B51 4772B2F06E6AABA4027D13E8730999532DB2475630D2F8EB98242E36F5B45A94 2D8083014B63A806BB9A01906143482C614B5CFBE8C5354A3F2438B2160F6DC0 81AFCEB201EC67F66DC5808C907A3C6CB664F444D24095D9A11D4978A7B57037 87C67552FD59F5713D0FE03462F9A1A323BB3EFF0AAD61B1792CB109CA9AE4D4 D7F7FBD3FB91258DCFFB4634669FA13E03C0AF699165311CBF37D24378022787 87D1320ECF878F859149B2F994E700A32CB7253297AC58753E4583A08A1F83D5 CBFF10F2D26D71CDB20E1C69A666E9C4D23BB0E6BF1097FBBB204EB736E61FF0 C3FDE1986938F8099694B9F998B3C735770FF21F73B1A6B750498BFD21184F11 5E6AF0F1FBB08EAD436C4AADE1E6B815F5E58988C113B4B2335A340798BFB201 40586D0BCD6AF5A08CE9AA042910197F47D98CBB4411A6D435A46F46B3964F85 032D7F8D880732276A8FD24DA772F642F06C9F3EB4C9090AE4A3AAE67D8768A1 7B2A57E15B7FC626450372F40E3EE28D8D997CCC8CC89C644461D1110740407E F6D884A0503E05AF830994AD0CEEA924D935749F6EE9F2DD65A58ECD59229918 A303C90E19E9C411FAF24AD5E9B786178F8182692CDD508A4755123B4A594AF1 A8E7287456C1CE2CA485CF4CF9DEE5238AA7328DA204816F98B7EF49EDB30875 3CF8C48E0465BFFA8F2A1CFB6A8F165B63CC80F54C669D02BFD9A0EA0FDE2B40 D69F0101AE4D2C10185AB10953019FE7D373BF40C2F6D4E36693F118866D1267 12BA7987ED4313E8635DA02A4FC1F7815105F8EDFE8004A8801CC1AFA8D123FD 1768A6C39E838BD489C6BEFFD3BDF650DF48D5F8D99DD5A2E8AD235F2CAE8BC9 C13AE9B214CF3FBFAC7BDFA54CB6E675273330608BD35600775FFB2A96FF648E DF55A78B43CF54CABC0DA8D574CC5C5C62E9D658EC62035EA5028767749E48D5 658212BD39C7E76ED0C6F3E0A1D138A0DB8BE574987AF1E43070F1F12C560009 F48993FAC935EB56A5793BA13C28293601D268B4880F9BC33D553FF3B6A7900D 37900BD3B4B558C84BBAB09B4BC2B14D32E49596DA090E586E28D560903B9744 7D014EF2A6AC4F711A025DBBC841F1C1C93BA1F8327DFE33C803A0993050D590 C7AE262261DB7D04B9DD91F89927161A69E14BB2A48D29578410E312A4793101 B6CD65B298988AB798F45B76E1F58BE24DB207C7E07014E17525B436D41FDB28 D1072CBEB526E17C72DDA00ECDD06394940DEE8BD02CD3C81BFD12BE0568A459 0F53010A0655942C932905FEE87183CE357887E2ED286DC1E89F2F401CDDDFA9 B418F218D4115043892882C09F2E3749D4671E75AB1AD01C78F59FE3F54276D2 A91512C21C68180CCC0E147E834002D7799FF393842CE88BEA714672E1952C9F 7CEF2FD0115B0E292079909A7775769341A7888CE6063537ACFF225B4F396972 41BF46C599D278906F3BCFF81DF941BF5888DE8A53CB0A2D71610CDCDCC1760A 7844F89FCBB892AEA853CF5D967648995559EFE852C95D2EFDA2CF063500F88D 2C83B615618831267BD8F5438DC53C6433CE7347E9C55E103B450EBED6229219 20E979C00B0B9D86345FC3A8EA2B049B7E148A7AA1C859AFE93381DA74CA578F 8FAAB28175D5B57F6A74F9869B2F530009E953913C6925D0045CB2E817A17742 3C5B7574E9BF3BA7B769C161C2496EA2D346B4E19E434120FE92A0ED3F4A9ACC A8BFE55F04D17DF035D01FC0B06182D8C27B6D32F36551B9AA56D61FB6A34254 D0DF918C6716D8D05B973C8BAD5AD52C06EF3C6503D4E0F7F791511C79AE74E4 4B707612149D583C5D96E534CB45F1E7CA5B23642B1BDBC881FD8E4F66CCEE96 7CC0509B5CFB0B3596682A81E682DAF6AE58F605FD7A1F414F62572298AD8491 B76D0A23B4AC731FB8E7682F506B5CC02F7029827FFD866EF4DBF56E07E7743A D42CE65B38EBDEA193CE5B172E87DC88452C3DE192E363EB9DBEC4EC65F53002 BE9E94180F73B53CE1E8EE9333DC86DF5FB2561FA1F9B2511962CBEFACA739CC 38A286651CEFBF451FF6568CFFBA8AA68555181147C1CDBA18C4F5C77BA8548D 2B1BA37E05EAF7F69879C3ECBD02783028CB1A8649842EB71023F89CEB36CEEF A9B04E9ECB0577536B88ECE7C1D81B0D6D5A478F8E92DF83D194759437088D7B E93C6AFD0CC6D568E60E2F1265A6613F97A6C4068C8EEBA70F6CC4E88A80F65D EA7B498395390A74BA57221B86611D3EE5DC4632F139CA8A15E5B9D2DC97088D 7CC65197CD93F4803BE4246394F40EDC2CB4904BC273C597F13C8DC680245A3F F1AF2D7BCE5D69E9CFC81E5E9F46927C5F55C719AFDB2CB1AF2E4D55B0E3ACA8 6BBBCF253CCFF8F02B8542F296CED0EB8A06A88549DC959E22C3D6C48F310452 22B32C44B046A61A4F7F8AED613DCD3C464DB2280D56E517CFD16DC32C83EACC D3E936D2F3A883B265444D818393E30EE3AA59E6FA73DDC421F5A0FC8442F89D CCE98189ECADC080F1973E14012C2B87F6A8289D7E1B8958E2220FA1C68EF82D 01A2B3516F320EE84950A6A54963ECD6F606EB5693F6A0BC74CE2B5AEF26AFE6 7BF5D5357C3D53CFF50F60599F2165B6E742A331B47F46D977FC721867EC9CE3 7E9BFA2149C9E3A47AF0D0EDBF29C1E6D92BFBBEB52F816EFDBA9CFF83AC072C 5FD264F8F24CD5A1C0F68399FF4B29FD77C4A54D8296523413DCE938ABBAEACF 072AE89B1CAE513DF9810B85613549445F8E854424603C5A41EDBB163CB453EB 25FA6960DDBA116C2ED617F52681C14DE6896B2F378958251FE38408C8EECC77 7B6A264C42878DFA9BF9784D96E185391D1843EF25EFCF69A7A12B9BEBA00E6F 5B52FA5CB5DED8D24E67EBF80AD8A076DC4DB5E086AE05A6DCB2020729F1138E DD19139FFBFBA6782E4B86FB407DF52A6BD068F9FC7C385522CD541133611CA0 0F6838783A8F5C316148736FCB09057175098C1452626DF29FA208BA38E0EE7E A3008655333C42CD4AEFF25EDC397B8955CB360C829B5C6090D12F094E8980D9 230BFED445A83940686D739430E1D61F536BEFF169C3BA5BC33E952049DEB374 47172B3707E6407438461846A8F4F8132927B6B188777BC9817239E86A8B9F5C 5B234CEDF64A608F1CF6A04790CD84FF85CA6969FC8D9260BCBE8B0449701E28 183AAA7C4FA73A108F02D81A038F60A68B1CE5771285F82D7AD81B396B026D65 D1E572800BF04230D5E4C577B34DAE18BD74906E9994B74C309CF9BAA29FF7E7 C86886C0330AA8639A197A2F3F358E40D2E2513DD66D7DC671E21D8A5C22B51C B0701C583BD4722ECC21E1F14F701EF753928169C1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMSY8 %!PS-AdobeFont-1.0: CMSY8 003.002 %%Title: CMSY8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMSY8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY8 known{/CMSY8 findfont dup/UniqueID known{dup /UniqueID get 5096649 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY8 def /FontBBox {-30 -955 1185 779 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSY8.) readonly def /FullName (CMSY8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A4D80B73E7B6CB7548 0E1D77FFC695988391DC44AEED8CC947B3D7E198B9620E2238DB3A2819182F03 14498B8CDFBA48926DA721920B221FB33BC21A8456AF10891403501D0F6415F0 7E041AFFE109F640E54FC1A365674711EFF94E752652A4C8DA62CDB1149DB899 2C4A4BD77A06E81E93C5698C05DD02F74A0756082738BDB53003B483752AE498 DD718AEA8F3FB5A6B7E2D2AE8F309065F3D556F9A34AB90C88833A54295E0982 209C466A301BA3372AABEE20D862C6DC6B6FAC1463C8CBA8AD766ED1B4C9D712 2BECB4E6ABF558D8AB5281C35726BB8D046982C0DDAE17BFFC9394125E4E84C0 B283977D31460B8EED4346CCB09F64DA0ACB640C6DBF32F2DC30D54668C1CC12 24C7280593088E9958C047125C323E9C842801346A9CE5F50413D69F6DE99471 65D2E387765E92EA4C43F17B467DF6E266D92551009C0E52E7219AE9F5E2E8D2 88852086FF3600BFB50AF3EAF8C009D8D5F084B510F792385F328F7EFA8C38AD CDAB2EEDFBC6AA45F6DD7364C2F02DD2BE6C79C8361E83D4267CEC2407689864 B57B5D967FC80AB3BE8CA43955FB0FD3081D438437559AD24A7ADD484C1E4A77 B00BDCB0D1B121FEE983412E1EA5489BDCE5DCB4A7310135956B230C0DE7BBED 516369A92BC41FAC8D73490984942D930DC193BF0C774C1AEF627B969EE4B001 11381AC57815D7581E2372A1DB740B09F4A7FB4318B765DA4E7B44E8805CEF85 44EC3B10613FE7B397BF91B69A5CB2E9086D1E7A1FAE0A9ABF2A237A2D29ABFF E392A18AEACBF28274E775D3FBAED4F46B982B9DA4602E24094EDCCBC9D6FC0F 67C60376879245606C0B9C9A678E8917516BE1CF097B1C75C9F0DDAD6899F08F 81FB7A198D45FE060CD2A550D9B8D58B882B969D7BC3EC018A1FE92BDB262835 26516FF97AC387EA525FF987E5EB1EAAE4EA5866C9CC043D183763C530F7D7A1 2070E4044507C4E5611FCC117FBE4396E0B24F672CD53D5FDFA56D561FB86D40 90A52A7C7F29A119DFFB694A8C445367746A49CA5FA83163BE448EB19625DF26 609A8C8672631A10411036CAA3D6C2F822A4B2505DCBE8E1CE6916AE515E78CE E8C894B134BF811671D17C19248853131DFFAEDB24B15FF17EAC194662460642 48D23515AD434C68DF56753806FE96DB3A29F9D4980E0B6EAED7383F9FAD2584 8F85679D6D1933677ADF5D31FE6E43DABF137E834A1DEA632D36EA5728625159 8F33348893C9D1C510501628E4A9A80587DF6E179FAF68B158406A3EBCD726E2 AC17F2DF8B3607072824D2E5A6479F7BADE32E603E54E7A83BB2DFDEDB0D80CD 1F1BDD4F6C9025CC3A8A3685DF10A8183FA80CE0F0FE2BFF2500F76B1037AE41 56D2D7FB468C3CA7549E3599A2AACF66302572F1B35BC8EF7C23F6FC4B720228 1D673D903111CE378AAE83480B4DEB7EA84BB35F4F7BE997DD4FFF5A9B5E7650 3C7365BA0965B242DC369D03215651184024A08EC284F1798B0726152884B4D8 46411B3BC8F5CB53A70AD53BD7B1AF23528849B56CF2F75609FE715878CF6448 38579380688B47AE3D374B0DB6ECA5B8284414090123D47F3F9DF389E023F431 6B4C0DDEE4190DEEF4CA772742012754DA9A44A8F550FADA6D8FB0C512D5BA2C BB7DF71B1DA41FB6936BA71B710CC6A80751E43436F0F5888F51AB370DD4A088 40F402661E08732C960705C7E0D29B8DA1A8A3E119409E51EE575E9655F47568 023977917C8EC610BEBDB9C1F4EBC192084D63EAA00EC87B53E86620BB5AE51A 579B0F8E1972CE1DA02832FC75184F45409DD9D413402C2FA27BCB0AE6DB4CE1 5AFB114E23232DE07C4674969A1FC94D152C6D3A611F029ACF4D949A2C0755D0 31C7DACDBB4DFCFAF7E87295CCF5D4AE28D87ABC3533D87EEF1507B9FF9063F7 F007DF03734A20BC3A198B049000C92D2849C62DDAA719FC28EB372793E20128 D786670E08948808BA45C4F6AA0DD8A8357CCC47228A760C5C7864853BD9C9A4 285E446CB72C5C9D3F03FAB000810DC5674061FA116153040743E846506CFA67 FA8770E785D7DBC7293F37389A0859CC22275B23C44B57B92A033A7BD194340A D6BAC6E103402F8396A5394C617CB2A27D9500921D5DA06115EC81715EA8E360 4A95DCE8689CBE268B8E6C8B806CFB0ECBF634250243C9E1AFFACAD65311FA4C 1DB0988203537E5EF12B86FB454D06CF05E4F4FC4143D62920E99304245B6ABC 82E21192BE94F5E980DB21E07FEDF0EB0CAF4ABDFC20EF08A2A44A7940E2862E 08FABA516152DBA899D6CA561EB08C7C8298DD511084E5230CEBF28AB1D84C85 B5BAF4616C28FE05AFA4BABB3BA03F8CEEF3F3EB0D3034BD3D8D06629B8E9EBD 72484057E71C9EB4DFC7C2CE7749271AC926C2419D618FB0B60FD6F81F0F2C04 E529CC74DCC9E4AF32D935D7CA65FBD0842A7BAF162D08F782E65DF3AD9EFE69 198AFA9208B22BC21BC4ECABB9BFFBA84C8421B74748E1EAAACEB59E566838F2 C439579D6C75074F94493F7D5C8942D881AAE6302C37A61003AF77684EE99AD7 EB5EEEF050C52E75E4E842F8174470FA60CB213BB6F257EEB26CC55D1202931B B981DE2535A87CF37BFF912220C117EE166CCAE58BBF624170FFBC0716726B36 304D698F2CA131675F7B1199E6581B8C812C4FAF75814282477BE2B7EBCBA7C2 FA6356B2876F89698C6C2493989E9EB252DE03BB374622A7C88B8EE9FEB4851E 02F85CF70CDCA7BED5EC94E81170FB557C3BFC6F32CD70B506E56A2CC5451592 130C6F570C679577C44D60A811DCEFB3535D855259B1021AC168DB76DD38B459 F1813E3DB20AD9275D58880CE94058490ABBBB0D8DD16D4A65F680B30057F15D 07FF54D779CC978E90A850A2D8D79961EE276BB26B594C16F56557435671A3D8 ADD3DD0BC4BC73B0652B9DA8462FE614A14A11ADB2214EC4910823FB4CEC8938 24354C5C62547EE5710FB5ECD93AA45DEA7411F6CA8D5B5FA222685E622AD73C 1BD5DFD1C8F253352D6C7D14FF2FACF07CA5EB11392C6A33E9CABFD99F743BED 55E8DEF49E07B9444171D1780C698E5B65B540F41F845AC188DC7C0C8B5BA5F3 546BEAAA4F29F0DF30D5AC12A60862742623100074457BF2D820DCAAB340C1DF 22FF26992DC02F276B40A7C528C84B72CD189A4088C90070486C49A1014FDDA3 5093FC12DAF309FBC063653E6A33E14EB51B081126AB5BCB8016E975060B796D 6CBFDFE6CB9E191F12E309254BDD6660E3227012F5DADE246B02B6D8127F1EE2 248F48DC5ABBD229748444420C868450602120664984FE3A8B2373232CE5CA15 E67172CAF7EA99F73A66AE33B1EDE5E8351DB02497CE3338930147873D4E46B5 E918F5592A21789FA9F46232BE693DFC33240E2649D6AC1940B101D806089436 F0CE230BF6D0363510378822891DBD3EEF3365430E74FB6C994BB40C8EEDA593 CEDAFEBC3B87C7C04F52FBD7D557A77B44855CDBEC8A8D26F44D66446B5662AD 15B6B79D13BD262D79BF51C09F8F690A61C7F11EC2E05F6BEDA273648E9E1EBC 3D5F1D6ED486797F753064ADDA8494405556D43D395B1487EDE877CCC1EAE954 1AEE2513DDA94897B733609E8179DFE1975590568202EF20D58A89B34874CC3A A5579473AC65E0EE61545AEF578ADE10BE3FB3E2CDC96678F613E4DEF7BC1B38 8A551C93438A0540E292F65F1FA73D9AB30A5F545284085E4930A570C1807995 7108AA8194607304488616DD4AB189F8EDC5F4507AEFD7847817A8ECFFDD2DD5 DE95E04EAF2774F8AF661827229F01E769A32734097C457EB6FF056D90C46C5E 9F936AA6BF2EE8244BBEDB8862E56423F5845BB10C8809730B011D650EA18945 83C320A3F4ED095A5EF91929FC877ECC28A1C2CE74A53245E629BF46C6534983 307B1C94EB35CECDEE86551F0C308F66690E591C5D9D8FE14F534CF3F5DB6D32 39D7C799F392C4E65759B7BF61F4D8312E3B26C31466206A367A0DD7A90D25E2 805D36ED5CE0A4BEBCAC0A348FADD2D2AAD670E28BE6E33F627B4A9F35078B1D 6688084C4C18840673EF9B3526172EE14EF64E97C8B006C27DF6EF73BA6E6459 3608F10EB1EC4B824DD5360B42AFF2084788B165747AABFB2C9C0EBBA9C6246C 08F28143809315D6268E386F09BBAC54C34213438B56C386B34AA457D149CC39 A3C163F56E3C2E637C63A79CF7F2DE969EF3AAFF75F3F20499A9ACA61279D545 866FFE57D25998244F448AAB042B141952BD653007A889B1A716A4042CBBB827 C1ED5E3C616C22D5FCB39D3B3539F9B71D50D25ECD2E5D953C7A5194C867DDB1 75CE10B2C3A20E8CDE15AAE9F549D034838DC066CA649C31EE365D46450AF18B 893748D055DD88C72391FD92DDF0AA1A1316051BC756F87BC9A425019B2FA7BD CA9F35E89E2229B3021DD24C9DF0DC3217F44DCF510116DDC9E92EFDA3E0A892 491C8961CA484BA29B8CACD2FED2E246FA7414F892AF7B9F08698FDEC82D2E4D 8C6ED1FD9E0BA2645663E7E97B0F780033D025F2EF3B364574C03F04FFC4E09A 3D4182BBFCCCD8CA54A92434E2208803ED36F931D31C7498B7FCEE4B78AECF11 B27123A10F031F9CBA36066680E4748E346D18FD0EFA395D1A9227530618ADD9 64D96C50A0172F712CB427E8F7170F8A1691FB95B247A271499F0E63676BD64B 167438333A3BD9CD9641AC637E0ADB17F1E394DF34AF5A2BD02030DD087BBA02 E1209338B74075744A9A9966039AB6D223F385E06FF359257913E6C01BF32F5B A3640C7CA41A6C51F296E50DC1CD1D68491CE5D75E0ABDD4C5C4A97C8BE2BA35 D91AF9F8F38E7AB8C1778B06A212D0416E6137087329AAA2679C51D014CC4DEF 0F1543E2FD97621E552E19B29AA1368CB5046C188BA59B1E1875B25FB269DD2D C0678A42CD310702465694F2BF302AEBC43F714F7C657505132DDA71CD23D17D 628BF3400EB5DDFCE2850F31B40C5913394649AA4241CF646F3939916C2077AD C11F8C3E478586AA7931E327333FCD8A2EB31DF4B47AA2F31B999556602DD998 5848143C0CBD0B5187DF08E675550F2384D48C2954EA7D16AD2B94DF97C194D2 302CC47BF968CB1F6C9641A87525D5C6972ACCA1D4A4B4DA8EC54BEA6E7312B3 2737754A9FCBED3BA5F8220B751506BB0A5BB5CF706AFCC04BFD713A3BE3C842 9FFDBAA0CA5691D0FCE76134841A169970903843163DE68FF09649E99945DB64 491FD6D8B2DF237DBAF550D1B74263B3BF1EF6211F40D4DF2DEC46E4DE557088 5D458A7CDC6F34B8C3F5C76582C8B7D24A333AAE0B43CA67436F8ECAD7C50B12 35BAAD521033D8024E4DFCF01580AEC63BD5F8ADB778F822AC4FF0DA608EB7CC 1A52A51B9F38FFADC0D2F4D8394C5D598123B483AE5AC1215F24F2492EBAA134 3C58AD4E3B493AABDF753EBF1F04058C6981C353D6788C2D3294165B667D3765 7883A8493F5D772F789F73979B254BB9397FDE4F8B76CA6FFF312F4B012949F4 3EDCF1AC60FFF2681549DFF430B498405E79CB407DADFCEDCAB1E2FAD3B0F4C7 B575A33EAFF9F67D37F50BB06D06834EA683862991C5BE340D4A7F8D131E733D 289F72977870F9958102F5D835739F0F5A642E7194E8AF7FDA2937E5C0712CE4 EE15CB475725030CE0F238C32775D3EC95CE3D0886046E3EEAE322F59D423E83 DE88DDAB5CE0F70537487EBA5A16A9306BA7DDCA14A85A9F83B3BC3600DC9421 BDADA2704A5A24F7174A3A486ACE68739EC5960038CB44D969A594E97AE1F42C 42C1B7E3A456B3CDFC7683537B337AA8777F18CA45B22C8BEB18877DC624496B 9E8EF9F386B7FE4D94ABD5CE3B5786E76FE04A35909C472C04654A4405932EE6 A4A3E0F6DB088603FDD82F0EFCB85A962002A662D1AD0647A2F484B59075A1FA 9F4327D542ED7962620B998ECC3A95CE736089593461CED9B5AAAB05C2DA3820 5AF29B32904E1EEC357C8E282189C6D8F562DB11291091E6897E24CD8F8E2A34 67F35D261E01336152E69831B0CC6B03FF1AC7EA22B745F513A25FE10F70E74A 3FD71FE1EC9999BEDE7CFA6A97EA2DF621711BE950FF8960965685BAAEA71FA6 36F165573A0A6A92DAEE41A9B0C97BF03419FF6BA1F44524D00FD671EACC4233 9A857680DFD27B9F1E7A760058C8277B3761DB9969241D1824A7DADF70BBFC38 89C6DB9091E3BFCB36851CB9662B365A4B7384BDBA1D385902D1E5DABA72A159 63790096B927EA49299AE03E41C7F593F3B995D1155E91C62D5F68845ED3C797 7798B56858F96C2FE2E37D812873B7801767082A6D6B60602CEB94B7F6D7A142 72814734DC584A18D1FFEA7333D4C7E2DFE5B91E9AD92EB52533CA52FA888980 C79FEEDF0FAFB3B20B497F9AB668BDAFA364B405916526D5C48E57DC30BC35B9 BF684FDFAD199D9A28541327F3899AD505FBBBBB22F419E22E0149EE5FDD2B43 AF442E2724EC16934C307FA731F90AD1C76B74569B78CDEA7C19808233C6364B D049F3F50A68D3EC5F29F2B96BC58C44AF90FE13F244B7129F14B5DAC3F3F310 B330E67CA4EB76F895DAC8025F11EC7630EEB4826B5721348FA38F28B2AEEB1C 5F7CA413C486C94B1DD96988F07F7A08D3635E28624878E55D4FFBEB5E183CB5 93014D8A272EBCF3A09133603CFFEF43A6FF059BCE525706D3795884FB495748 C8AFB50DB464459A5C36D7CD087631BC09C693A11BDF1C6011D9864FE66EE8C0 4824A42E97D16E017C0BB73732D4537E2A5BB283B3568950E5681364DBC1D6DA 058A122862A44ED85029A7B39F2FA7C362D859D0B429E056891339626AE6091D 74F6110CA32F8F3E9507216997E6AD1A2F1FFBE8B407C9880DE230E234F6FD41 A291851178BEAE5DB9DEB22E3443807E2BCEF12A4AE8C490AA9E3D2918329F47 42314CD258A0760DE5FDAC4AF7209CEB530B8508B278952A3638CA8491C3B493 516F461610DBAF32E923ACB834B15E2D169A10F2609EC0ACDF7BDBC777DD2C19 2DB330FD557D3B06B78824D6AB237D8F2D57A7ED35F02CFA9290ED6893B41657 A2485524A3F1642FF5808FDB77015D9467EDAC4A6BBE8A175833B1225A5554F7 2C60207F7A2632A4023255E8EF1F38C1B8216C9B03319B60BEC9799E5378683F 46E698FA75F2DFD40F17C603F3335F1EC70DBA1449C7A33EDDD46CC3DE4A6557 EE67BF349AA8680FDBF415DC527129288B5879500180F75DF80394EC7CF11BC8 9EE9A4ABD64DE3076A2963F83FA333F19FF74F79ECF36A87A31D6F125FD2415B 3F6A6FC33C179F54CA164835F3C3DB62AF444BDF27AFF23098C7212477F688B8 6F48D9AD080D544D57FEDD33D3D9AED9346CBB644C97C951D4AEEB2BF6F0CB18 E2517BA7ADCFD00FE44E290E731D53E5C0D762FCBA08004562DCE6A5EF2FBB74 B3053CBED3B6E896B1C3356DD9E8FCB69691AAF6BEBA0424D62B9F266D560B40 89E20A9F35AD4A7F65A7183761ABBEE0F7EF26ED3565A25516A3A5A57143979A 1EEED8CD52A69E4E1AE4795F3EE0CA21B9F4D166783A9AF54B08B6C56703932A 310197E328C6E6A6BADAA11D66A952964F31FD690082FA02D1E2A4512A9F2742 33B203FB770A3A1C7490ED630D0FAEB3066429D0237E18818EC368D0DA72EB08 1951C70139EB0DD59EB53AF5039A7618C77F6CED9F0A066FED6FEE0C0E328351 BA39746C1224A29D191D8B86491E0A306ABA070CAA2756C3A33990EB6DDF34E8 06EAAFF94AE6686EEB06A17D6D020D1F4E59428D533DB0EDA6434E6E1A478D5C 2A0D08CB39DA7D5F5200199FFFE3F41729478D4F63AE01FC0BF3B378FF6402D1 CCF1BE5F191BAEAEC7FE400C9980E103D8776EC196E741AFE11D249E0C277263 80FBD329524C55943E25631F113FBD8331C0044A7A2138637206A7941CF02590 577043EB0F205392C34E18B1ADA47CE63CB8F01365A044CE570FA20446102210 F03C0647CD0CC29E28B149F84C2F39256EE1457CDC3862C4082A95B44A61E8E1 B4ABAD32DA3E2FB8D849B1C5CEE60F205007464DF38712737776BB6BB3223941 95169B5BE578BA13DAE40B19AC184CB6F260A1EFE13CC8438ECB56EEBD30ACDD 8E24F52934 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMMI8 %!PS-AdobeFont-1.0: CMMI8 003.002 %%Title: CMMI8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI8 known{/CMMI8 findfont dup/UniqueID known{dup /UniqueID get 5087383 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI8 def /FontBBox {-24 -250 1110 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI8.) readonly def /FullName (CMMI8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /omega put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBA9B440A6DD72BF8 97084C906B05FAD969086ED21AF0AA1471613182B26117D7494DD9F9270EF3ED 8DA4D957225F75D060237B6DAAD5A0AE3E702B3D1C437835B93B8AF1F9E7D966 E739CF3AD5E256F90286A34069E5BB4122F94F18F3485658D0D25B938522A879 8215A417CA2CBD20F71C5C5FCDE21EEA7BB27876D93BA667868A419287FE59BC F538980597DBBA743DBBDBEBC61E3286DA7977833DC8BFC5E52FF5DF5EFD9A92 D070EB769E31E760A50FDE012DC0057835E8B9B046FCC83F1A0C40326AFB4E3A 0CC3BFA35FCC64E32854F32EB7DF10A19F95830136BBB8139DE1663B7FD790CE 464EA431AC109FCA0E03F3E0D355FAE20AC8774D6B1CE233C27680C77DDA7356 560A27C75993E8C980CD1E3B0683F7E8A05119B3AD567DAB4851B66E418687B7 F9B21B3BEF607918D5973421B68E65DFD8B6C8DFDCF1CAFE2637D365148EBCE3 FA4CC00052A2A522205EA3AE3461CEE02042E1A3F11467CB6C8C849B200CCE3D 0BC188EC7B934CBBC0AE2BF5DEA228181DBF0F774119F313516E7D97FF532621 9278F856C166CA6547504F34991D588A0631A5CD06363F3FEE9FA0772C783447 ECD0A200929CB58EBFB6B72008E4082B5D14AA560C24915B9463A92F38237886 C35CBB2D4DD6D0CA8C1D4EC46093041C6181C2F6586EE3E7D4E647A107B6DB23 DAD9AB5A0C2905455FE58075EFF6B48597078BFCCDD84812B98986F34987CE49 7EFB19814F2A58B0233A59331F6F8EB66401F04EE7B1ECAD9BC90A2BCEBE213D DDDB1F75C83609ED6A669A0CED58B2E269E76ECF73616D94F13CF827C9BF354A E82202988DCFE856786B8AE569AFF3105B55C72C58D310FFC0E10B2ABAC8DB06 40D5F72E54770E9DED1AF4616008595B8481E3D9AF4191CC9A5BFD9DDD01C9F1 FE7165D21E488DB40879E863D470CB31CA06E5B5F1F8C3CCE04B697CEB0F3557 ECAA358D2EC2B370519CE06138FA702314BA01F1F33881825EAE1230098BB3C9 59666983275CA4E8D9DB34979F86535577E79393A72F84B0F768FE8C92692907 15E9FE9894E98A0EBEA490CBC8C7E5A9F3E43B24C2C5A4BCD71DAAD3CC0B8B82 AC13933543E295C163F61C9FD18371CB514493F90BF7FB460C029B8DD2E2BF05 FD66B451DF277864DE1EE42100BF29E01A50258C2758F3EDE211BB3457B8243C 20BE72983FD6FA2581C5A953D94381E32E80D6D6095F2E93A5455C101BA71E8C E560D4694E4C167EFA25FB1E9D214AEA745CE34CAA5468FAEF8F6BDB6C6BE8F4 3D58836C26A2392E4C4DECE284A90DDB3858A16D6135FED655A600929DE71605 6CA32F6851A2A6F71A9DF3D5D657593BB729CBCA2F4B059365B7263DC08AB211 9C547096E6427F6AA53CB2EB87DF0AFE2ABCDBD15D7EF228D3396413B83C6B4A 79E41F9BA55A2688F62A10472675E5658F151F9FD6634EC94EC0682C17448024 CC1633077C07A93E4DA8749D974FB8F4332B5DECF97D749C10DB60D4C90ACBFA E65AE928C88BAE19234690EEABDB30BEDCEF2660D7464D5071058C30C572A2BC 7DEE5384BD7614A4BEC4C84E18CF7EC81C810256E8CE6520466C033E2A36D3D3 5D6074B3857415011D8D9D49A474D994571CDBB89AF92BEA879BEBAF67663F5C 17ACAE809C2231EDD0A76641BA52FA7B19A2798D54A4A9B62C42F9905851229F 2CEE0191C8AA5AC12BB0CE9E5E3E862683AB57DBB4AAD6AC0FA8BA4F408D41E0 755F72B82B7C18EC6B13995BF7AFD66AF4BA0EA7523DA8B75EE751744EBA9CA4 4E8BC1FB37734503A5B24FB9F2C2D07A47CFC477F02413D55BD7DC180B0344E8 50248801FA6BE26C97F397797F5F9DF762967E7CD92CCB8B2E587C92177619A4 BF8046CBC72C6E69DC78B8CB6B7381A290080EF59F5B9F29C1167B261C932E9D 010D2D14BB425D157F22BC0305770AECC5BC80000F8CCFB9930255A68F299ED9 D3B5B83A2CC00E3305EB281E1A7054734661B175C6CA0AF168790985F173DF03 A8693B677BAFE23C3CF833FF6463B136FC370E4F0C29E322DBEF637F62C33CD9 B0A8338FD67EC628E3BF2FCBF7CF0347D5CBA1DBE6DE878DD670176B85F69EF2 3C5CCA1BD2B8A385F113EF1CE522F5A6AE053B9C1E39408C9459DE3E7FE2C4ED 77F026B0081BB80D40185458139C16333EA27F43EF1204BFBF80BC5301B2A3AD B10F7EFBB4F5B7E04DA1167F68BB6D4049440B0F57385FF0A95E72760C6A12F8 1335BB31CB74081FBAA319180DC00113CF50CC5A41D2E751E055DA1429CD75BB 0060C21CED634FDA106C49A12B356129D010E29F2919301AA7F80222AF3905ED 672FF85C9897A70241E8DDB9A53034B6BB44E140D9E739848E7A782F24B98AC8 00DA09EBE4532787E5CF3ED815705F659D8E52DC2C2D4949374A3BF192BEEB99 1D9A90A4F3250BF8A1FD40D91F5B34AF2CC561FD02FED712500B24330D87DA9E 4AA46B6E34BCB40B1F73A1DDE07E002B9478E9651D2BF85E67585B6ED812BE03 A594874A235B1C1840C4BF4BA6D863583D8C12DB49EF7F8CC24DCBB6B21FBCA9 378F3E2DC406291AB324571F76E0805DF8826090F0E8B50599CA58D124653D16 16C782B01C91A6F3DA6346482E3163D28D95EA49866360147296838A3FD0CC53 920F91D895F839CB61FFD2FBA296CA4C6304EEE579782AE5FD33D0FA652BA7E2 CEC7C01DD0D3E0D56E6177EE5F609A396F7FC8EADABB465DBA7F384E215C4DCB E64F807A50A461545107F9C3F7D7CC7D33E6EBD6D9228B1DCBFEF160703E6129 0DCED8D45DD54E2A36E698A616E7906A50901E453BDB2A363EB77144E9EA6F2B 6BD927495EB0EBA5755165707CCFBF8759CE5856881117C7F3EF6D494EDDA7EF E499BCA56C86467AC573DA9C2724FCC74BEB331E736FB093DCB67DAD42296655 415D110F2729BD1D55E5C9CCE2E724116F45FB2E66AE0F790258851A5C808762 68B8A110BD326F8D3EC45004E7CC08DA42F6CB80A6B6E7C286F139534A275BCD 2F812993DD9C9A1AEB5E7E4BDB4805DFF3A7030263AB060C9B74F0C25C5B9005 965284884450CC2815DF28D5F9B0496DC7A3AA85E1E42741E1538797175C28D9 FD904699C771FB066397FFDEE8E8DD1ABBDF67E6BFEF95BB700A7C1BA91354C5 42EC3864F6E19B379E79A1CC3C786C0DA146C6B0B8E507ED58DBB1F12F613A98 0E1F8967991427A22ED323901C4B83336CD343212131E8B59C2F5D232702ACC5 7891BFD4EBA5D0FA35AEF9F3520CA82D121BF6885BBDAF15248A9E4649ADB94D 0735CC4D14E1D7275427D00C8E709579612F7F74DB6FC218C10C278CC63E2AE2 37EC996B10C0229D687F0DB5E38A8C4DAFB3DD8A9E7ED37186FEFC97790A1EA6 636A88FA9FB4D282234BAAD301A1F3AD33F252C5EEC49410562FC52809CEC466 A0F6D148E9AF19D6DA2337C8283FBFF6005C37AAEB0B7F7217A8DC6F949B9984 72DEF163E4D5ECE4288404448C96A7FF0AC76F732D50AD63A1D286C9180E80E7 C218B1F48E3034FCABA6BF262CEECC284AC29E9F3CA1CFC1639A681ED66C1FBA 666F073D45C84A286E05FF809D4764FE819B6A330E73695CCF2F448B4D4EB4B3 F63E94EC289807A2F9A1159CF328C002B467B19D6E9454CCE36FC19E0A214190 B251818DD456EF658B0398E275514B72D9C1DA5F806EABCF1DD56BC025D69FC8 A0C2FAAC1892B64D2AF79EA2F57F103CA623E440307600D50E783FAA998EBD40 51D23A0CEFF8D8649B48B982DC38D613F882DCCAE5F51233A641B3CFD783F830 D984F116DEA3ED8F0D3369AE629A006BAD4523F8E3C7C6B39A6C972508B67AE9 32613F28CCFFC4BBC86CF31A0C25C786554F7A1F3DE97F5CFD1A941F775067A4 784385E2D02EE1FF886701B1E87D966D3F500E15591A5012E645837FE2DBE3E6 A3D375C6CA0ADBF96B33EC3FCFFFD888D7344B31D40427B8A8BED0FEC6FBE038 1FB5F0714C4B5A0E607E215B5B7F76ACF0FEAA4C9790EB7E13C0E3933B7C63FE 5B934EA34F4B741C3667BF1735C685CECA63507E6FB9EB06AA010311F12AC1AB 4CE3FE8D1EA1EDB3C700BEBA516FC71D740B1CA1A60D4578003973CC3EE21DB1 58FB1CF7E2EAEB2A4A6C742EBC3575EE6378531C6EFA6E6986E68B8E25CEEA67 A59623FC1ED2ADDA9D72DBA627D179E47DC7F5551E07EA4D54ADB6CC8109D340 7279F288E552EFD79C17DA3431E53EED66D16F24BF86468C2FE7EFF421560500 12FB048D6CE2F370BE4E560F8B4AA12362ACFEBC839351C1D5100C625B14CFDC 747B66082D4AD5474A63EA0054E9C3E6295AF6B133348487B0471395857F4B73 4BF8337DCE2FE2E1A4EAD7E7BEDC822BDDCE42B79B308C11897C98E3ADE253CD 09CEEEC0CB1DB66AB072E36E1E04911F40B535B0FD85982C21B8A587D65C38D2 DBC5A07A0A26DFFF7460F10781069490AC1B611CF7312A14B4AA6005A4582C5D 336BCC30EB47749193BE8D457A43F54204B070DF5AC2057B6437E23705C7FE8F 7BB150560F7044BE3E48EFDDA539FEEFB0D2A7856CD4E405FCE0F5EB190D91AE 578E2EDEB9ECA218573BB1A8EF116043A27DD17A4047BCCC7C5F3C563A910778 45ABCA32C7347E6180ACC86F9D665FF025DD8AF514FC3724B5C3510F3C37E0AC 5101D1667C6ED4E8F37F06CC2BDF66CB5A9FB7C52CAD26344FD1557571336A1E 1E340EBA149B4EB99016D1A411FB874914AAB2A415CE3F5FDFBBF5AFD7959B9F CB127BDC68D2A2F3F07FF3D4FF32046C0371CD2E68A6471E46B08413FC3C7A80 A107EEE57979DB387B2206D2810DB310B7232B2DAA385256C8A58964B512003F A0C24ED21809E2576229627278118107B9C32345C1EE8C0CFB452CA362379369 31320DEB5371037AFAD093B61E8AC7A6DCF7D49C7F8EC32DC0ECEAFD7E892810 039570D2956289B15E078C2545911BF535F72F7DAC619BBDEEFA855BBAA81704 18F7D351B0936357085A32157AD8E27438A58B2397D69264E748B0B8D01B33F4 D04DC59326A7DED39E247A1C1A1AE49382BDBDE9478A1CB48F88BDF14A268B40 A40B9FBFC4C87FD3DF1EB2464C3C14E36CA41E09EE0A9B75FEB0769F9ECEB1BA EBF73B818427FACDBC33BB95B9654F31C59A766E931C698A8608F15290FCDBD3 5C535D9036A19CB7B55BF54E96F9B2206DC71624E2E55FE632FDFDEC8757AEA3 1D83D190ABED5E7A7AAE2F41FCEBC7C18626BF58F9E9F02FBAE0C8AA85E9DB21 A3D8907522DCBAE4923C6A2A09FD2F08FE32215C544AB577B337D929E625E704 E041C2381AFCFEA37F3133B6CA20093EFD457C772E428325E56C9CBCC447EF9A 05A8C3F28017DD4FFACC51B38E4896C5044266EAB4EB7C13FE855E790DCF8A17 B61B1D30DD866BC57397EF6297C4891451FD6A5C6AD6D7446F58F56A68650908 224D9F4C31C6906FD29BB51DC947465B808438E6260325752808963C808A4AAD 60422ADD62CAF315F6AE92FACEC55D5B682089AC0BC051CE1E2C06A3874736CF 0DB5F7C8F178479E4F11665402781D80397C75456F5CDF0A4F382A19EC6AD64F 71A9275264800E178F212269154DD8352167C57EBC0A38BE794AAD1601C8E541 7E1AB8E969A76E1EB4092644958FEA2AD29635E70C4DFE2EB0D9B3E1644FAAD9 B27AD5466EFAC724718962B62E7B8C32F412B69DFFEB792587D571FB5C591D95 4CD441662CD1B07595E245FA537FA9EB5A20A97E5C9251EED22C9961B48B25ED 85BB7524F635F9CBA3714C6D60A6BF920C45A64F4C366C1F9D22F53084997C9A EFE2D79FBE3347111F5093E271DB7E3770B35D253DAF93653F6A23FA145AD775 AF11E188EA0428137D9A14542E3EDA6F7B2E5AA86C9F3D3649A85ED2F020C696 01A339FE6D7E42BC548C8F92A4E3809C67A986C99418772403D16D0E8662595A 1F37563671D6DA0F36CAC99DAA8FEA215DF7D45E61314915A30A22FCA86A50D5 2FF2EF08E240F9FAC030D92BDFBE40F1972DF413E6B452024CD11792BFDAA2D7 C82716528AD4B3D637BB43E748336DCC86A952BE96F1EA423E31340FCACDC1EB 02EE932F58734AF3A5B2279361B63F1D824EE3BA9F4D2EC7B33A300A1CE8CA43 24616444176DB8099D85AC68329B1F85E4B5B16F3B396FE2AE7774F3065D0203 AA140DC128D6F935C44733EF585F89E8639A2096A225A2E5E49D447D8AF9FD44 CF6C1BAD5C5E5262AECC5543EC8199B00B72BE32A0F110F64A1D0D5CCEF38FD1 155D6198E9A343702F8ECF5052333272CAC2FE016681E12745CBE14E1065EFD5 407DA3686080989F6F6D650A9F1EB3A813B070C30C0D3B4A1E9C206E2E4DFD51 D8DCBE9AECF956640A2E79F1B4FD0EB8E0449AE1B8FFEBC43275743B4D7F6605 0673B61EB3189E74F51F3780A91E6A5C6464C8CF7D563D9958D46F39B1A12087 6BBD4898BA9ABA468AE1F24115891FD3CBC2195F75958E26DF8BF1B93F7B521A C12112237AB23A8E5A7B7D0DC4C53692B35F3CD813EB463C0BD3A6486B0476C6 3B36DA71FE512E5745D097FD4AF5D056E434DEE2AF926B2EE79F7FC4FEFD4130 BB4B4BE01E5C720325A4884507CB51CBA4FFB615B78A4182444F0ECBE4161A58 E86FE1DA2E39C2BECBCF1F1D7B9B776A26078FC252128FA8108CB83F673CFD37 CCDA493234FB93E1550EF8D2DC049ED95B00A8A57834B024B277D3DF062E748C B61F183F2D72AD075474F8165528CE75E4F40B38B0FAAE45751C1907F8D31619 E88EAB02EEED415F3EE3BC5BECC6AF565D34E0BA2958FF337A2B06012DD1858E C53DE52C108BD5AAB76C882198C72CDCC958D68EA8FD26F76F04EC1A08B2AC3F A6D0E8724D2656555DBC0C8C42A3E22ACA7E1BC8E9F897D9AB692E0FB9EC32EC 59E31CCA4516A3C3BFD5411BAC3DEDCE374D48681CE7D67DEAB93F5B5C5290AC FEB29C5EA2C98095692873D36C7DA24847B66F31E4CA4C7AE5C79D7CE4F0532B 78620582E3731A2A6533A03E7155B33E7CD142FE79F72721862EDB24959B9783 F834CB616FFCB2A23497BA6D99AE34DC459A2F7B3E4DA2B54BED118ADCD92178 66C40F4E60F6E1327D5DBCA645A2A7C770807E6D7E47E1265C753F8793BD2D1E BDCD749CC24D4AF9315A93F01180A0F9A7F420DA1B87664DA5FD967131273271 9DCC45C3D57EB9B8AF14771E8E751D88B98D2FFDC72F5011D402EC34FD010ACF D3B0660304725191D64FEE106253FCB3470F1A16EB7B45C1489D3534BF94F740 C2781DAFA5E8A9E7B25A85BD7935DF3ADDE08C960E283D8FC3976FDB4085DBB4 B6B35FB239C28C785B18BE4FC98F3A5F410F562DB5FCA04E8074E4E790F4265E F88117B3D0833AFAE6E8B8A71D7731BA6F14FD6F217EDA3F8CC687A494FC3914 B84FDC37C8C335AB1E7E0BEC7FB6B7A595C50CF8F0080C8D461BCB8B579A5155 F963B6587873FA31C3A6572740C63EFBE58A2EBB723B7517D2A243F6CB08A038 54F4DF0F6692022B2EE8C6F6B73735ED3166BAC58D9216A06EA6FC7B63B20031 D0F0F99D83D9030B413C2360DD2C553E34BD67851B743C3FDA676AD63C5BD759 9131358C6BCDF05FCC048F4EBB9005899ACDD8E9EC9BB8C5A08E83485047D263 0ED69B4D1869A38068FDA03524022A1D32FA2AE0BF728D2A654E52B6A6C90A3A 725F86627D7C3EC5AF5AC512976D35FE42AACA3FECB401788D0BFFD9F4743BB2 EC5B4E7891F216DCA5A69E917A171E0069A03FB214ED307DE947225049D46E0C 4707503F09811A597A9113921AAC23AB1CAA9866F81A02BDF349FAB129F23E86 E384C043053055938D42ACBF9F0EE86CEBEB011BD5BB7D593104140E6AA9CFB0 4E0B47C91E504BB6A95B2CBC36EC03BE01897C3D498EB30FBE4BD9584B9D766F CB3CC7C96FE3F50E5B15E00AADFC4CC5F070174140B900AB6641C0D3288DF57D EA7A8218D2756207016378DAB96F019A7CA184E464BCCA3EC26A825154216681 E9C7E9DDB1E7A19E6BA5C33BF110B670CB8C9278F1B10F9B80FED965D9CACBB0 8182A446B47E392C8C80FF10149219A5E1939136FDC294332A11A2B7813C337E B57F83F6ECDF3953920EEC54531F6ED1721CB57D780E5A203425585B2BB67E90 22751099A7263C3F9413B20D8611E58EC20A84E0B6159D743BB1CF415839AA13 FEF65F4263104D2021831A6CFCBD1552D99ACDCE76927699529D0BDF6EAAE40D 79B892353966686433B20BABEEC26E5CD6DC647A44F6D4F5232C90BC5A0565DF B74E09B8F10588517CB8055DB01C7D5ED55CAD41E197 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMR8 %!PS-AdobeFont-1.0: CMR8 003.002 %%Title: CMR8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMR8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR8 known{/CMR8 findfont dup/UniqueID known{dup /UniqueID get 5000791 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR8 def /FontBBox {-36 -250 1070 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR8.) readonly def /FullName (CMR8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 48 /zero put dup 70 /F put dup 99 /c put dup 101 /e put dup 110 /n put dup 113 /q put dup 114 /r put dup 117 /u put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9928A7C95D3A6E9B 8E92F84CA0AA44461D2F4FA0F8B81C6F5B7BE98C9712BE166610465CF689DFAF 27C875C029C0116DE61C21DA0092D029E7DBEDFDDEE3D67E6936623AB53FA2AF 18BEDDD7AC19A19CADB6ED6CA7A26E6044BE414FFF59C0B98D5819A6B881F9AB 7AD0D03BDD5CD309C67811D5CF0B93F6FDC9AE64F74ED4E81F2E18D880BD842A DAFD0BDF06300201C6946087FC0B999447BC370200BFB8CA420B668B32EBC242 6DB1546A7164CF55B332FE9D239B65F532B69EF9F4F93828A44C8F5C526126F8 B7A369114CA68D4F98638121F4E17F351723D9F1A902FCF087F94AFD23876517 2D15B482AF2D68C3F31FFA864E031596E597882578AC7FB0DAE2A713B065B374 3E2E72519ED6D50CBCA40A7275A7109A4F3ED8A4566AD8832890D3D1F4899850 9B757442B7EA355175CD5D6D8B4152ED2D7EEB4CE30F174FF672140354046A45 7098EC45B9DF3DF5CF7B417E201DA88308CEF4CED8E8903AF24FB8DD0187352D 25738519ECBC70304F8F620CC45D2586619205DA3955696FAFFE2082402B3502 CB682F410DE5FFE80A4DA3D3BCF02E35BD577D0DE55E7B8A33B7A2FD5136B5DD A0BCB61F8E7F4363C21F890CF287304DDB8FCE7FE207C0D160B81E7EA662BED2 DFF8C444E19C91E72254257CD87240A70F1A964FA54ED9ECF27E27A57DACC3DE EABB92C085030870C6CF5C40B6E47F5C0AEB30E84A73ECDABB2D754EF6EA28BB 16EBD6636BC288E62F4A38BFB55F5F4DD20FDD77D767F6CB52F9513E8EB75413 07F1877B2C01278675177499E4E8EB09F2657821613F5C7643FC064293EC6E9E B519FFAEEA36B19C9D1302CF91FCBF87FCB57C5F995CB6712BB3D8681EB6F05B B2A4195A3C73CB4ABCCFB958EAC533BD89560D2790CDE1444C0F2E4EF27A529C F01052964E56F6D76A190E5FF45934BB711A3406284AF130D4DC0D8112BB3752 762CA0200CA262359D4F54C0CCFA9A50DE18C7DB14419E2990ADDC4A54B94978 D9174CA39434022FA77FB30179EF805E2189C35919F5EBE215EE2A00B4407826 CE56329C5586D8B414770BA5D45513C3AF1931D632FCE69B4CA504944E03362C 74A1177C6398A61A12DAA0F156543E2A8E9969C4308B7ACC21A5ECAC8F172541 1B1316A88C0C163E574FFD3CD22FF08488662FCF2F9344BC25D02146F36CA6F9 E2D0130C654B7485EEA9A110A33AA0C769121F81821E9A2BD062FAC158359D44 3F9D9947200EF1EDDD5860F10438B162A69683957300C75AF7546C70C97AB2EE 37EAAF0089E2623F787F252569B06C665FDB45EC9681C0774ACFBA76B98C4E89 7EB12AA5F8798FFC110B49C25E3A483ABE83B0BCC6DF0578403ADC369E013762 C9D08FC94D949BAE636ACA9F36F4E3F02296775A062077B011A705B6F1784D36 A926622CB3847533D7ACB24A4EBABB14593B5D8E1DAE2BFEF8A51835C8D4E76D 7543C126A4271C59A5881A5AF89331694F84489CA66725995DC3070F306EA447 CF30F63CD476A46D528EC1FFBFB8EACFA2BEEDCF54C92CE2BD26DEA5827186BD 3A4D1709415CEE7D51D671357B4A5D11E835F63521B9824EE5282E58F05A8ACC FD249461181A38C2F47BAC4E79BE368D64F886AA493C61CBCB2ED401C8AFBA61 59CA6F6216D941A92AC52ACB3D7ECC28D6A58EF4CC70BA6DE23E80937AB38E89 6F05FDD15B954C0826636267EDAF9F2BB466BF79D2E10EED9B04297E6BC93069 79581ADD1A9D9FAE9306F46AC95B98C60A2E53D60CF1AA4069BE301E17E25070 F98DD67BD8642B1D07571A32766072E48BF27E1576FFEED300D7313A358A823B 49C8F135961B7E259095C9BB67F996CE0B90E95344F203922F47E11753F70D38 2ECB615403490310CEE6C03AFA97DA2F47ED47125D110FA69725BA0018F6A40B 29A307FDB3E52322A77A0102E6F57654CF1E96A134D13860D83AFA0A41112D3F 2247A09ACF7D06713BE443FA27C7E7220E875965D53030FE7D2D62EFD2F1DB87 5FB091FEAF599BA8C5167525899E578AB341BFE2BC4E53A047093168AE189237 EA55F055514EFA939DAE9E859CB5FBCF37D99484F44FE5AA5FA386B28BB642F5 5DBAF059A50FE96C7C6D834531D64F1F2E99AB2E96EE74D149178B1C0618495E 293973D9A03E1790654B67C0882376ABEC17D74785B3737D81644F28B3BC6FFF F92FE29126995A07E0BC5EF3A4B93789A103C428943E045B8D1A5063AE71E806 568D48072E53DEA85253B01DF0BB7367A6BE4DD7BE514AD74E3F77C825ABA405 64DAFA25EAFF8F63344B5F6B523629776CEB090B546469F6A6008DE43072DD3C DEF51F62731037D1FBD0C038A1E9B669849EB3BEBA281624F13D20B61917A109 A0A7871A73F7BAA18077360B38A4625C5DB9AB9E43BDEEB856FD0E2D3AA2E075 267B978B9EB47F2369302E87DBD5D5B422830BEC32411FE75D584C58650EFB1D 136FEB92B94BF8939FD63AFB7349C7511E5E46AA7324F8B1FFCA9C2A9E9720C0 A720918E8E860F137567D386AC29870FD990BD69465B3A3D2A0ECF2753578AD7 80DC87EBB319EB5AFE0B6F6FF8616EA30C51425FE3ECBC5F8D0B0BEFDEF32FA7 D168B4E85C804B7326A0942CFDE732B1171C643452B7099B31649CA2C38B62FB 46EBDF7180004C549B53F88021D029452C2B37D8C565BCDB0B11541039A13C0A E45D4B68C7907B8BF08C6F41F564B62BB554235D50330E78DD02795516D969C9 66119D718798120442CB7EB9877FF84EC69DAE25F8559DCE3BD8042959F695F8 2F99845B1B5680DDCF181D806CC4903E077D1FF5E60918EB34C0B1E028422B71 CA63EFBF3F4F3CD813CE831EB54265A555BDD35AD7D723F9CFBDAB29C54F8AFF 2D35C6A3299E0A2DB470C7B141B1E3E10DABB7873AE302926BA8743278FAA8C0 DC6174501D6A289CF980A3F55F2DD5C3A514E7E7F13133C35D2697D64C25130C DB78FC997968D6B3BC929E8A31B6D212C5128E4412632BC52B3A1049F7F2F61B C74AE9A6AD19B9E2E240617E2882F7D29ED3A4279439107AF9AEBEE47CE85DE5 CE9595A96A118ACF1EB1F5929930321AF7732E351E18C6AD378508E37B4C327B 0E06AAE21278AFA9255AFE5C022034DA2968D260879B4B38E7EE2E11A593DC3F CE71ABA050C004473324CAB6F3C50E85DEDA3E9A27388D8FD3A8F6E42A79670E F7549CFAD4CCB337A6E0BAA4846ABCA059F1E1933CF11DC0FFBFF550CC4A1B47 CF7BCE0875FA747AA854534960F757884505A5AEE0330179A9547A4AE3E68479 7A457DE83326DC30B67F27CFD4AB697601CEE352F72F0966B3CEE3EA24683BEF 6D23AD51B8432C3F0DD0D0F80791E1091F38988B7A54E466A9AC7810DE8B7893 6B0AA6356597891D56190A7660BC7F657BC559E0525D41EC228078F2FBF89C6C 72D666DAD838CBF0861FBF0A1D4ECC069AA49DFBAE5C56B781A1D5D79DAAC256 13E3F9B928A2394FC71691E4355642764459714412D6F8EF803FC5F7353822DE 6CCBB8FBE5AA1F2C7F4D384039D85E7728527DF9FE0239E2CF8BCB7411C000B7 1FE660AE6A2A19229E5E8776CC83EFF3C27403935756463EB4721C51FE0B1197 86C2F17842A0FB639F28083DFD4F1E86D7D3BEFA922514ABF489C5CCE93D6F72 D2EAAE14F6CBA2BE4BBE7D7EA8EA19DB3A87350D4A52064137C3D15A5B05B03B 70B1DA7328D10713B83974C390C3270AF5A9A47C0BFBFABB9F31063B0CCFBB10 0F236C74446688198EFF039110F6FF42FA9F82D463AD3958B5FD205BDF85DE20 FE3F0C7AEEF350AEE6DBC1DE2E2DA4F4599956F59D6F121F7086DC120416E180 52DBBC4E56C09746938698860F30007091E1CC0351B43990E47208ED495310F5 7BA9C6AB3CA10A3F1B318FD47C1CE3B9FF1304321F9623E32D315AA9CE64B35B F841E6C62B5B2488A311C94937879E5E0E170FA77AF0AC75C5E6E9F3E8F825AA 09C1702682E14FDFA72D27901C5BDE009B1E52E8C4511C6F6336251BD45261F7 401CA3DAE7C4B0CAEB91B9954BF4A97C48ECE7FAD401351D59DDAE9DA94E2335 74A2B880E4749D3D7026CB5299F16C204B6E00A20A6619C34922C7D3FB50F127 3157CFC08DCC5164C8023CD1B6C3556C73CB8E4ADA845339CA9BABA1457ECEE6 ECB9849DF1F0FEBC89E5F97C92978A500196520839CEBA6C0FD2E3D27BB4B4F0 93CB2BB565F4627C6DB62DD0E084E627D69B5DEF42EF094381B62C0D67EFD197 301B132420F51A41561E6106870147E0D597078435BE3819ACF0DE28AD779847 F3D2CF667DA06955D53E0204CEA2935E9E984E76963D3079EC092031E2A10E61 1227E5EE6770DD4D745A52655369EBA06A19BD7D95BBA271E488241199D1008E 36EA99F8DFD2A9F87B06B070158B466AA4C6EA3BA77DB0F853F0BF9A304EA291 34069714368E0B94DFCBA3BE5EDB6C8204DFA7EAF5C3406F60A7056407D1BF6C CB85C1F432F97D821F5518BBA79AF8453A568FB2C2D025A70CEC75F46C545011 ACE3A99B2582793BA1DC655230AE2EFD24DE20A01D4A441AFFAB7771F223FA6B 9169849E727E494247F67D6E1EA9DCA06A082FE2094BD548AD7F08B565145634 E7ED832FEC1378306DDC796303392ADB0CBA130B63B38ED57B7828B47732853A 893E8836FE19CCF27002AE92C2B2CACFDF8A42F1B8066E033B965D2E9157FDF8 E1264B40813C1A4CE424274AA3528A4F09B3B53DD4D23789A68B3D17BC1398AE 0ADA2C2168427A49846DE0216908C2FFFEF4F13C1ECA12AD341E238EE46E6DC2 B71B54C52659632911F901660261E493AE2483D64E119D9924489779B62BC9FB A052E822FD8D83178E09ADC825DF0DA07FCE7AD68EEB29FAA275A13691B4A5A5 B0BC0499CD6307610CD6209583C1152C559A2760823F8DC0B9B990BFFE7B7E9F 3969B968AFEAADB9FC0F1410EBBAA0DB979CF153F0B8C978405F8E6F2B6406D7 AAFBF4A655A15DD6D1E9A7EAE10EF89264659B09283F50B734236885FC09FBE5 98D780012FA77FCB19F15BDC522CC7312546C0730EF5225DEA8C22A3BC6554EF 4FE73B9AEB5C2F7DBD474221760E5F539A064AC450591BCF3499E3968F2CBD6B F15BA2B37080A4129B66D4C2188524F025414F14DB3F96049A8B0E5EB2BBE7A1 AD64A988FE875FE4FE5186BB4F5DDA16983CB052D474B7D72F3E8965663EB50E 015C72407C3437142D3D7DBC055FA627139488DBC5A0F98D805C2143D99F491A 167E07AF60EC9F17C36289368D740B632CB919A0E74C412B76CE7A5906D5200F 9E79CEB9C65ADA3A0F23E8947E834AE7A329A9F0AA7A6BF545B1D7B4666C6522 CFF268634EA06DB3A82D91A4C0A9B227E79961212881A54A6762C335DE7E0831 130C45D94394D21C049B9D189ED955438C2151514F17BFC67E431DD9A8349202 2F616AEC1C7B19F63D5000EB4771370924BD4B9053FE78B5E4A244B9A149D66D A8BF3B398396D2233E92E4A5FDC70FAADEADAFD255193D688842DBA865CF6154 C9348D590F3FEB135D4B7BD4D76A52CB140888247CAFAB25ED51F4D187041CA0 ABD956F83A5661CEC171B52AF92F9ADE27973B560C802E1E0FF51C4003D1289A CDD09F8EDA8AFDFF666D35418CEADF3B0BE298F0D1E5C8E024D6A2017A7E71F3 3A9FEC9930F1118101E040339F9D41379170928DDF5B5875212B271DC843F612 E0C21C67263186E3D6929160464D4D5C8928E14D0845762C36FFBDE548188E20 3B6BAFE5EECA0385142F01216FB8A90C43A472C1D4447FE5C7C78CC088FC72E7 3FAFA062C338BDE8A430FDF1951B107D8D73FF9376FACDE5900BA362C66F8C1D 947F9545C5C13A53E4479B1C1A50472C05E8F8C266C6D4F4EB08E97B3B1BA972 26973B844545089C5732322BCC9A5A8FC972FA0D7DB8BD85D2F515ADE65DA479 0224F7EA2276CFED0B75B2C23AE7377F86F1F6F205D6FE19377D87E782143697 984E731F83CA888199CEB425643C259D4FB8B58DD69A96085198306494BB497E FE7C9954EF35B679BBE3847A9C73507874F71FC97665E2A58BA41407A1745247 44A79B588D969D11CE4B863CDA655DAA53CEA5C3C263B345E782006CE9831D49 603D2D95DE9E370D617F5928BA416C362BB2B4DEF16A5D44BD24B34257765F3B 6223B3F9B54DAED69A90C7050AB97B06693D253C6894CBD7B497DA449F1D9B7C D91B421891EC0724F59C82B9CB288DC42F2D2D7A7F22EE3D910E15953D7766AE 276DABED3820390BAF2700C4653E1C77FE63DB71A66D93ED293E25B8412A1EFF 809554BF04ED0DE83F7F190883ED793803CAD2C34A66524D3A580ACDF3C13B22 08F18905E7A4A16DA9ED2A112462FB9FFE481EC2069E484E8BBFC19D594153B7 3DED4C11762223B7586483B06BC164D824D1A6FCAE80A35DE0DB8B33396771DF 76DC5C05578EF1BE00A70BAF3D951A01C87328DB2B0DAD6E1B4C21F37D1BC0C5 A929BDE5EADF20DA60C4DE2E3C151005814F24824D33B95F700E09A0207EB602 3EF60DEB1622B91DB99A855A8F1DA96358F05CFCEDBDDDFC8446AE3391BEEC41 966E594E28D052DD5ADA49DFF65E79540EBE5329DFD86C23CC800F95221B9C18 CBBF941D2FA47EF1EF59A89DB5DD188E75EE94AD2A79E2221107E5992C00D531 2E00B544895A9204656867E3DE9D4CDB64B920B5CCA9A73E6514B36CABAE01BF 94C15603B86780190595560F792E5EF01650074EA4A9BBC6ED284B9AC2020641 DCBCEE0ED27FE58171DFE104EEE4202759E594159DF45113C00236127A46FB35 9EC705F21C0E456C1F0F924594C09AC64D4377C5FEEF764BA4A09ABA8D09DEB1 FC13B0CD202B2F04CF5D73DEAB65C36C2FA7C0DC236BEEF6D23BFFC9C493DC8E 1831F19EEF81EEDD976E43BAC6B5CED13F901DE59835FC75490EA528A72CEB77 24C38B258EC38B9E6B97F85CA8C10D8809BBE55A6FAA12456FCAC786942E123C 06D1E55F7ED04400088BEC968BC5081DC7A1B1B65166E7821679F76694F235FC 6854C8776AF855B83445D9FF919B1D80E98DE0741D06D6C5EEDB3E3EA6392530 F1BA817737D8162F7B3A36AC2A03190CDEC654383E31934C3E0A012B639532C6 26FEBE9B412F1C92D1943B7C18CEF510729D501349644C97F087F2F840074AE6 D8CD0FB2E620FFC908BFCD938B675A0A4A687F7FBE8F3DD06A62D7B6DE7DF3E2 49D367D60B10061EA86CD512F5A1BE8950D83C62695E130128E0037B62552D17 064319BBB9B1FAB9D79705E5D68AAE9B36EA14BF1A59A863BDB8DAD9AB5D7B8A E30E2B499F952D65877C8E38EDD7DB29F9579D09E629AC188DB6A6403AB4BA3A D358B3770D727A2B77D84B6C9EC17E29D88E3421F9B7D2D822EB78BB8BB50692 8C46DD6F9BBEF2E848A2B5669B200019802AD19661537A84D3514AEC5AA47445 2C791E01DCEDF18D9506367241255FFADEEA6183F51A9F42448A7DE413C08359 52DAD2A60FD606AFE14702BD3B0EC448720FE63438D020DEDFCDE3582FC31DF1 17B25FC152789D2F17FD60B8209D292D2152DCF8D28B5ADC04F6659BBB746CDF 145163361823CA343763AA951C640B5D4A99B7787105A1609EDD6A596EFC3F6F 2FC33D0D499DBE56C6668E137715D435D6B683E0113647B2765AB0F3D98AC717 5B33C3EDDE18506E73B4E392B022F30480BD30F59B2E3A59D93017296C3156B4 B5722E1955777716388AA987B2665669716F866FE6BDAD5E74A523CC03915F26 9B7B231F5D9B1F61DF7CB01ED3F27070E36547B263855DF5B2E3ABD2ACC440B9 0826E1DCCF222C2C481CA44F0FDB78B3EB4165F3CEC5C2A056D1DB93172C4B72 816DF9B504269EBBB0E991BAA89D8E21E4E48E22BAC83A5EEE833843B49C6B7E 2213C6BB5D5A06B5A3456EB0D4E22B8120325DEB5FE283D467947D5267B77FC9 5F1349E6125A8F072ED33FB0F303CDDF08B6A60DC195391760204C96BB2C5C99 6EE9008BE9D7EFD2B92AEF911D3BD0E165B45852851EEFCC0CAE974157B24E35 A53D5CE86978413021CBCA7CFCEDB934E526C4A7D578B105309DA145A55A2CAB BB5B97CF29C9511BBB9E92830D31CCAD135591EDE65EECB2C67CEA040FAD8ACE B9CBEBBEEF33FE439A7FD13101A5846FC7EB6FB3ECC2ED52E8049E6CBEAA6F1A 4C98E73B0779BB201001C6A77250C2E5BDE047672F2965F4E6CF01B299AA5A89 50291984AEDFD71602744FCCE3D54A9466922FC625AE3CF4A41FF91B6F0FAD0A 69EE0C7CD6AA7BCDB3C529F90283AE2AAC5C48C70EDE240E1BEFD1C57DB8EA31 BF350C91374F51AE7BD4304FFFE390618A4E2884EBCBF3425E499825B499323A 1C4070BEC0F4A4A7FBF6B5932EC254CDE301D0AC73E6A126560E1C4A87F6D1E1 9F8548D3FFA8A2ECAB80F58697DD253117825CDA98B644683CD8ADFCB5D10FA3 71AC5A07B75E56DBD5629F623CE5AA0EF00B430EECE8F9576FBE6455382B2A12 BE5532EE70CE80CA0036480312FB881BFFCE9413BC241BC5BC4AF50A2E69F22D 32474B8F0FD92A5E6F978BD753C1956B5F4DFE98E23ABF2DC63521D8326DB780 726AD3493CCC4648C7CDA5173243BBD78844F487A568FCDF42CCB9ED6D1C6AC4 63637218A766F1F7EA32953F0BDF323591423F26D8D3A5CDDB698E7AA07BE304 8A754C03B5BC47D79C51F9E6DBE40265AB9395A80F9F713F99AC900037F10AB2 45B369747D952C06B28A8205BA21CE6EDDA0A3490C7A731673DFD6935764B86E 0FBD21AB0BDD836F1F36A8B8883A1A890243312F65F586C333CA4105A2989C93 327F153A5F5FDE0F7E8CAC18B66788D4176D7E15D82B3CF317A3A55E51E8102B BFAC37CC3093AD75B5D774B8A235D811FADA33BB4ECB76188B27ABBFFEAE5461 0AC04DC9408510D939ED26EC44DD73B1021E9C8B3F979FCD664A4822F539B87F B6E2545426155CCBA1D9332E0360DBF391CD050FF7A7A4CD2BA52D878EF7BB9B 396C0C0756B5668675B8BE7BD0E62658964CCD30A1AE33EB01FCDC5EA0014E21 58C392DAA11E5EC40A65160BFBDA23C2D293B382B7EBD7AF1E8E1FB4F9EA89AF 001191D5A9AFCF0723A8146778B3C43A40AD91D1CB1B3500876343B6BD3E18A1 9CBB5C02F2E2F02E35D504045FEF316FDFA111FA8E05552E183872BCC52786DC 64C30E61CF4DE57A44DB69E5300AA6800825EF6585135FDA369688959CF7CFA5 2DB50864DC77AA796146721F0346FEF270C91679C516D2B989CD342BD82A9392 FAD36ECDB55F23BE1E6D1774734452075EA953928E70FE763EDD1D1C43649682 AC863969C2F01FFFB4546613DB45B4CEB5D49E13AC3583900DD86ADE33B04AD7 89EDA1E71B0E435FA51CE672610863B09AD523F38ACB9049E19584E02B017B62 0CF1DF503EBDC21E33ADF1AAEF5D3011C252E2F78D72C2CFEE6C3E9B062A19FB 32373E4A0FA640D511D65B57BC20E8B4C0896781333A200403488D5E66FC4AB7 CFC9E768F50EEB370F82A0C891E2A760E48B747005DD501AC1DD02B1C5E2DE5B 1C88FADF871E2D7196F95AF293D84CB3EE1E0BD1EAB950F6C8BC45E0159ED21D 5C39A2FBC8F2ED821E764EE17E0B24422613B625784777A760B860544D8E0686 0615833CCCA7E4A07537AAE75C1E81D080D3B447B600F1BA96E02792BAF7A9ED C28F3F354878ADA8B8537564EA2AE9038283B320D0E0E34590A127D7453F7C75 38358A597F2D193575874E3F2D8B7A5F2B072568C134EA1CD0D426B70DE32E38 2A3ABB2D76E64DC5B5C3484001C905438467C435361B9E472D6AC99C245F081A 27020382548D198EBA28B3DF641AE6C02EB955EED1D2F8C107B102F87E0A4116 5B54536912F502C068555CF0EDFD65BAF94A1A34FC23FDF577148DB5F70D2D4C 33F042DA2357AEECBDF4421832B3CBE6CBF51637B9D0061D3A2006837A406AB6 D4171D10D243A73C0B578DA059FAB16383CE6F98121A60DBD3202167613E7EF3 CB9954E67CA1E80B2AEF8E09753618A374051DF4B63940546D3647283FA207BC 6AC14D0385B10837745F68CB84F19ABAE7A91FBDB46056288C7F4DEB8B4FFAB0 12ECF6F0C5B52BF68A72DB17696AD4CB3DD859B5EC2BA35ACAA02102ED84AB8A AD183EAC5C4A9380FC4BD9767E44B9BF0193E5637790606AD545980594D1CD92 5DDCC247B045F0D026A8153D566FF043B6EF58F34911C4D0BD518BA5E025084C F76ED1FD2DD89E9B8A4D99C0119CF301890856C8796BD5D474C3F3378FDFC48A 4266CD3795C823028FCE91145C4BC9397E57550EC677279A795943BD2F497413 BD9CC9DCF92A8410BEB5BC75AD82C6D03134AEE138267D0BB7B9296EB9539015 ADE8151D07D279C53B30531E8BA1AF2E129D7FA174AD4FA533B477E1FD4C0E8B 3823B77677E5B5CD83192067D8CB9BCC4A0BF164DEBBD84CCEA3FB23F63E1674 A42EC65193E29CD1AC69DD2E024F84A65479296CF7B8D4282E681DE283888BD9 4C816202E2E9547F3294CC5402ECA826AC4EE8820D1D340AD584A6B000110F59 B7422DB4C07AD362E48C4B5273870A7622970C7EC3471784DBDF3C7A2E4D8A96 4D5C611E6615A7EF6D9F2C26898E378E61E39EA5DA 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMBX10 %!PS-AdobeFont-1.0: CMBX10 003.002 %%Title: CMBX10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMBX10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX10 known{/CMBX10 findfont dup/UniqueID known{dup /UniqueID get 5000768 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX10 def /FontBBox {-56 -250 1164 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMBX10.) readonly def /FullName (CMBX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 97 /a put dup 100 /d put dup 101 /e put dup 108 /l put dup 109 /m put dup 110 /n put dup 112 /p put dup 115 /s put dup 117 /u put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43B233BABF23DF8DB B6C2BD2F04672F9A3B7FE430263E962F16A948319C51B8ADE6E8A80D3D88023A 6DEA4D271676C2C8615C4A0EA7DC8F6601610F398673A4D4B905F49EA868FEF6 39BE073001A36DEA6C08ED51452F062B971740019692E221F4455EDE46AF24B8 407A98B791F6AD525C72C09776247E194043281D04FE1CD1D8AD8DCEEC3045B4 F95B3B41CD3300768D8A049815348BD7AC1004F5500817E3A267D694AE108BAF 285B288FC5F28A03E9D34FE5D9B2F9A9BB26ADE66B1CF8EB5BE606E83D213C33 DE083C20D636EF780E761944FCE3B8A950B1E6E7568F33B557C6D59E0CEAF185 53E609A4F58AC4D5269116F958C4D115C44B5A6DABAB79D3BB6E60BDFCECE108 74CFBE258779F32C80CD7D9A7CEBA50A0966BD9961F71560119668C4A0C30A5D ED91ACB30940502B24F33906D6E0F16F81DA87EB6D7FC8B7853BE388C40D75C2 2CA8F94713AAA1561F5321CE97997CB4AF0E37F44E25B0F73CF4986422B1CD89 8F861CA623004ADB1C28268D7F8C484AA10C9519B6AEADC95AFAA3304D60E85D 718B2F67D2B734095E5A92C90785252C98067DC05137BE735220BBCB7C341D61 C4B98BFB1EAF883D38D7A93195A059EF82B42027F23B6CD633231D704B891A9B 03D11A646F13898F20321D7BC150C63FD6DC6BF9CAFD8DA759E95384B729A0B2 767B9F3E55C682F7A248BC1184F7D294CFFAE0B246DFCC8F215625DDD4F49F09 FA8D41CBF4A06152FEB152C61539ADF7E70A4D23AF8267D25CE3B12D39D62377 547E2528D18DC4134FA3BE0437EE0B3509223D71F06D44C6227D62BD01AC0A2A 3EDA975E894371C07CA1027B102549A7D552FFD25ED2DCC68E29E71BBAB43C62 57B0BFC6A953ABC2EF703F35D112F6B5460018CDCEAD17F149DBE5B52C2B9E10 9818EA6D97C8AC884F6841C9B600A7D868F59C1D80E98DE0741D06D69858EC84 1B33C6C9938B7E8A6FF6C12AD456EECBD3EBAF0D7331536B9F6422019FAFFFA4 822E79D6D89D6366DA636CB708894FEF904F366E295F1CB808E78E883913C4FB 1631248ED6A7CF1095C0C61C4F05E4B9DFC47533A5FD24540AD71A0E2907B98B 28085EB88ABFC3478C9644594C7DC4244ED5A7C1CA8D960B65497D56D174645A B88F12C2CF0A807DA314017984CF3C4FB7F47392A651EB9CFA961B28E2989893 9FC4D97171BD5338673F5D1CE2C3C08D48A1B77769F01D5058236C655FFD864B 80E28F900191D4EB349AA5E400A7B0A0FCA0F3E79D7A7C69775BF754329397B7 D18B20B2683CBC4A19729BA878B3C17EBA0A7E9EE297A5B67E915CAD92C8F356 582B8299DE6A58E73408F525F7EA895C48A8F0D626A06A96A50348DFBE479D89 4272576FBB0CD332193D28A8F11503BAE98F8E1D73CF5BCADF23DCD4E6586ABB 323568F5A34E359661074D50CD8D9DF27191FCE24F10225A5D721EFDE2547E1D CA998077D2340B1A4ADFFF570AA677CDF3305D5E3A394BB1626EB35074D4EEAC 2F037CA2EA389F7683FD17A8E07C12B4CB3BA8C249C9B12D297C618009F76717 0EBF5F2DD39A6BDA10A2E5A811D4E190660F5FDDBA29201B6F8042620397AB2C E59267A7247B0463891831A6F40582BC3F614E5167B646A8F53D8A31717DD9A1 9034034E705BA7884F0E0738307AF69D3517147C282747F2788462FDC4336A4F 9CD222908401A25F0A1F7B13B8DAE622DC965AD0BE62497420B70C04AF432237 E0FDD043456187658ED93B0F9822A3998511DF05E59CC85B7B9992CA0CE3B814 9723BAE70D2631F32B4BF93511F67179FFAD2075E1591CA5907A4C67701B56CF A5E5B02EB4A842BA1F18D6864E5677359C2FB4AF5BCBABAFB053F230CC129B45 8D15413F736EB07C571521C7DE2A13F2AC1C133D491B0A607197BE9AA1231D96 BED7968788246B2E4D2BD330F802810F5BDA3760FEA5210CFC6F54748FB1D921 5CC3624BBA5B8962AA7D94159651589540B17CF7A785F297264F9C1006D36928 6E2756D3B623A6087E4B106FBA76255903C624C07E18A1AF4E185A533C640711 86BB477A906ADD36EB6C8F4A12BC2F01B2B98412E4E105977640930CD998D990 0254A1E5E9843B7A8ADE0AF6D5871E6D3D666465AE69813A2E26333213FF6713 6F08D55A90C079A56E1B9AC655F720FC22B5AD8550FFF26DA7B0C5A0B60DDB05 64E8FAF684F3A455BA9BC9278043D79537D201D520E38750335A4C8FEA887377 879331B68DAD6B253F4FF9981D0F9B9550ED5179B15EEEB00E560A3DB6E5973B 63403E4E2F40A3D0B937246E9652000B917B1369741E0F913C14C2D2D6D1FCBE 2CEC4422177C58523715BD070002EC2E13D383A1DC8C84228862B6C5D3B65667 9FA97E175239BB7FE7E37E14B96DD7960A8AD49DF428CFC13B5D3CC22E245317 47B5244DA97F1DF954CED2D552477237CB23D037C0DE728E26C82738954EEA1F F34FE497DA005AF03746DD2ACF77F6E6F2C224862A1D18AF6F7A5DAF34564387 9E01DBFF49F8621C058C04C2B3F4F3033FF3E8A977B2CD6B2A3CA4A6C569B19F C5AC457AE9AF334DA66A730960C7565E93A2D373C0E3DE14646FFDA05DF4C6EB 6D4CA8ACCA3C3115764F77B842581760BFB9E5C0EBE55308B0577A8F4D968CE2 BA3361D79378D451DD150C34D7E901397AC63B33BD7DB13C50D678F5DE999238 4B4EA15BD449C46F262D931478F5685CDEEC4C4201FC3EFA607AFB8F27AF6751 125DE42D2FE2D31DE769B7E7FD8CC8C5D91343B537139A822A5BC4160BB5314E 37501F65B4FC35475FE9E03E34CBF6795AE86CE409500BD0799DE39FA69978B6 EC74D2197C03632D3F59B85F404DB31240968FA75059B2581B101E028CDECC2E 7E5E25DFA106E9B8ADB81E82BE9ED3BAA9D03EEB22B7B67AB1262DF6AF5F5EFD A5627EFEB84F3A5F92EF2557EDA2843D7D18C592635623CEAB14CC3620F33986 410D6DBAEF9F86E4E6682054540E2B01D8FF2161F10E66851A188BC15BD6666E 8D3F21709F196A31EE676D28A2D12639CC2E7020A52910F052E61A0710DF09B0 064171D05611451BD24FAD64716F141E1C41D3218A8115A3D73CA041D02B46D9 28C3D07DF0FB668E8E91409C8D0A26A65CD737C075E026AC0A974C9BE658199B 3B9D82ED95E4646977D8F60717DA4C68767DBD7E8320D5AA1D5DEB2E6B009759 8282F27D64F1F904830AAB501CDA4D9233FC2F12F77F0FBCC46E6B729C71F6D5 E6F3EA02EC35D1048394F4EF2177FC5EB726DE5EF2DE7997166B8BE5B5105D08 EAAC3481FC612665CA112D3F889A0E5B7843EFFCEFACA24A01B6AC2B7DDE02F4 A9295AA2409A3756BAAB44608DACBB56840060037869455BEBA46F10AFC68DD0 0563843DF111C6D34911CF13AA6023E5E899060B5EC60D0F78FDEF3E981151A9 24903EB13ED1A67EA1977449716D1A5A7EDE1A2E9465C9C2B20A58AF02D9F373 73E627CBF296B3A6A4670C39F3B5EA30D76F0362C81020A1777F0ADDBC6B52F7 213FEE1718214087837049CF2AF00407639657428B9E8B532F68B631611A3501 3D9DCA38090E227BD0D6D0FB4130EE866DB6B195C873AFD18DDB3B1E40F740C6 B3B375ADCBBF628A07A5FACED539FEDA3379D3B60216C2EA6629BE2F65199D82 FE3AE627D7C67270F3497AE75F7A9514968B5950E2D63C38DA240AF4E6CAE88E E25167D179108679876E7C80C85FE1D2BCC2EC9B88BE76A8F5736E8E6B3A9CF9 42E58A4ECB7914865E67C1468CF66D658206830B9380FE346DC2DC4BB56A92CE 4B5E4EA9036C177869315A2D9E6CFE97E3BFD7CBE0747D40CE5E8A3A0988576B 8AD2B1E4314C0D8A0CBCA08844A49F7E054D31BA7543730C0A7390BC4A288D10 CE29E389A4791305D3AC1BB6F77C805F1032787306F78FF76A20A9E629899F6D 13356768D33D7B9E294E8CD50CBFB9CA02A193922BD9B4372C912D1689B6644D 52CAA30F7421E8114D077288119AD9514EF21E5B9989CCE2ABA0C12549FDF493 FFB39736AC9EB72DAF45E4EA6057527FA9F5AA0A1A3F03C12F7482E465C766D3 760DA7714D56C91BDAED507A5572BEB51A895F8DD3BD5AAB042650154FC7E4E5 5EEA6194DF73AC5EE2CBD4EE26E29B1D2D0C458B4850BFE842DDF2EBB4E2A25D C6A11CA2D8F346E2B736DF88A3D57BC0380B52396A6C039212699F5D3342EB58 0C3DD5D01D5078479BD9FD10C07925556C0AB0F03606F33796BA72074549EDA6 E33644F62CA35207D7421D2727AD8419AD1772789D33405FCDDC9286BC34C974 A52297F5BBD2E541E8BB473F733AE5097BBC9D5FACF18DE4173B4711E28B23ED 16E0A6746A60F6FF903026A3900169EDA87D98396E762C2EC963D89197B8CD0C 25244806BE7CBF46BE60A8F9171731EADFC969C28679B025371E5572E52A0EF8 B3FD9B4638D03E20BFDEC9345E70B8166D38846DCA68E0D0B4B53629C7E7620B 45E0A610BCD07FEF8814CF915CFB11119F42407D1C6DC1E6353451D40A382C2E C74DF2A4889ED5A3495C3E973565F7178CA190D22C9693C10EB12C1E7A8679CE 4AFECFC964CC98111BA4ED2BA9B10292A71D5B11870EB08EB483922CE8628A06 05E7CF6DF93E112B60EF888AA8DB52994EC33DC7277D7B7A4F913AD30257261A D6EE80476A9A8D316D190BE6CE0046CBBCED365AB305495284FA921BE0638E00 63DB2AA4C5F163340BCCD1061B469504DEE350B82FBE1689C1B65D095405614B 35997D6F0DACA7190D64ABA351705B17B23FE2EE5996FCD607F49F54392463EC DD5B944A4B82FA2BE3E75E2946D483060DF99277340B0AB65A2042AD088E2B75 BBDAB869D1940F64B50D25078519D18748AD64AC5615EFAAF4F3105B0111AD40 70EE173ABE6A4ACE486B4E5999158A4377FDA6922FAA6E9305F48570D14BC81F BFF4C663E1EA9D1E050534F9315A663C4C5DA52CB02EA6408AA473C32CB0CD71 169BB43C0508A842F400240F0063243B4C459A1FCB3312C41C32ED0EE87F591A BCB6D5D3830AE4645CB4D40336DB4AB6540B52E70E1EA415CC6D886827EBC5B3 EC35CC5C136243B0C20B3C603B648B132B99D05F9B48263ACFA59A856BE74441 FECF5C6D1FE9D1F4F9942F460961901E16017144C37E83C6822177B2A6C47ECC 6C47A1104460665E5BCFCF08874008302750EB991CD98D0D8D22B921F90B99B9 05EE7C39F2BC2A7798157503743C9F2F267BDBE2E8A4CDA7317F81DBF8962E1C EC02822CC7F770FD4D08D335904375BF0C6DAA0510771627ECB9EE69C0F47D30 69A87052989DF80D9F4F19F75B070C3689AB3BE0966453F9D56CED6C1745B50D 813AE6D7E44B73423AB3778ABE4CD2C4DF40E14C5A426043F7057E2DFA2DAA70 EA6723F1C7967FECB1E7C1C0CA283334163FBE31C32254490170C3513580A552 19A5DD75E6C4ADCB12D33517A03318A6BBC7E4214266E125140D8C40F78A0340 1F95D9FBEC4DCC55B71E89375AA94B0D55646F6C069561480407D0A3AC127024 D7D1E9ED6B599A2A8766B8792F46D35508B66F302D289405B101A3C6BADA680D 8C56E2A00B766A4CB155446F862FCF17537A2BE85418E20CD77C4F1F69F70BC6 17BB5DA8FAA876D0E8BABE273A19C04A8697B3E3CF4725E2C77C8761A9243F24 96F8AE96399996001A57FD75106745AB4646FB9C6421F1D4EBF3BE533BD11AE8 14BFBD6D308376B26E08E4ADA490DDCCA94BE8240403D5EB0FE3549061DFB668 4105B4FE77189546619B6BCF3F9723E278E98D50A17DB8A4C46744FA21760635 5B332689316BD17C966D466AE737FE3ED7ABC443ADD88D4823A10BC9747ABDEE 027515AC353A420523F85298029475D8BFD83A2CD00C02CA07974BAA581D2215 A850E6E4C0A5E17E0EDF91C63FAC18C70093F40FEEAF0350B403E2806F4EAE96 BF616A805616EE55C4657418C26CAF54187A6684821B86A76F15088AC4D5B551 66C3CA8DC61E9810858D1204F899C7E3A1754F483134609F6EEE6364B1CC04FD 92C86EF194FA3249601AD722D75D1D395CD15A93C768EC60A486AE885683364F 93DA00A865C1035F913FDA69E7D9A0422880FB81EC23C00427F07A5EA3CCB613 83C859958AC53FAEA26A6BB39ABA068863CCE3D447720BC31A5136E08EE58963 093AF587A72112D55853A1048A2B1695DB2D7F13CC924F2F0902071260C33ED6 30893A04577C0ACF0681C0FEC23E5404F844A83BB5A2F8DE1F0792196139993C 1152094BC36A6AE5BAB4B8281E506F485F0BAEEBBE71E174B7CED1E52A8242F9 DBDF3E0FBA296538D964EB5B7A4E23B1BB0F59872C9D4FE8498203E3AC08B71E D2B965AA6CD5D20DA6C83FDC86F4A5D68A58A72C5BB9BFE9BC755C56B24025CE 6F24443D3CF32CD711D3D94C7C1DC275DDAE3341D840090F97CB6CAEF274C94F 9F3BD3AAB3F98BA8A7B5CE5E48D1462DAAB37BEB1C10B410E8D33FA42D898183 BD4F807112D78AA94509E33C179BF7C9E82E55AA7D09E128A0DA06A330CF4AF8 5DC861498CE029CE8C1BD15C923A708F2E7AF98E4F7B34212A0CB417553C86EB 6DD46B0466F1A21D29FC5111226794ECFCA5DD4240C0B8D106CCD7EA6F03E133 BB7733F055D6FFA04EF5C6F872B4FDA3E42F0F036C4825543D75682ACF71B548 DED160ACD05625274799D0AE201305DA526E01A3D2A719B1B15C05CC09467F3A 5627860C0F36C503EE392E1786620F3F2287AFE56634E03566B9B1F537FD92A2 913166228791871A8F8CBA1A1DA634E8224058052A10FE1E67CBD3FD21A6C07E 243CBF58BDC78577847664EEA5225EB8D6679AB17C563848A9D4D58995EA3609 51C1443B752A070D9872FE1643F0677019235AC25DC2B29169D38308F2170A1A A0FDCC59E6602197D2815B914041FFC7106DAAAF30CD97400C6D0826A40385A4 C8520119A065CF32CF2FC5FBD8DFD29222528A7F96FDA533145846B3428F8239 E50277C366418D713F84B12A5FD4F904DC13DB1844A391FDAEB97643A6FD2945 942FD4FC5A4A35E184F23304B8B4D93D0C37EFCC4E106D4FCD0DA3E5D2117589 3FFC2BD1D121026562C55C455C3585050B9460891B006F62D9D9B66695C3D348 A467C14C0256FA9621CB056E7CD389505194FF463BCC4010897F9A690EA87D9D BB3ED4C174FBADB8A4744C6E4A44D773967FD703EC37672F9993DC48BCC8A060 6CEFE8E6B8F10886E15BA0466AF410B90DF0020FAB88BE493606B6A734EA85BB 926950EB10D2F2CFDBD182B0F133809612CCF6ACCAD049C8005A42FAF78368B9 E7684F98DE421BE0A3BC0FAEE024A7BE67E15C8394F17FE84DFD8156C2A3E94D 08259E15CC657E8CE3088395BF6B5F825764E141AE15EBD186DC049261623D26 8636705E06C6E4A1F8ACAEA59F91B042DF5DB9C2AB986A784384706A43E5F18E 42C29CC1CA86D4F247B3BBBC89F3633EE074DCA4AC15B1E33EE4822812A62E88 C32B0AA57249980EE17AFC1346074800FA529445D18649A0475246A25CF325A0 BDA06AAF392FD455218B13D9ED577D51A9500B9FB7860716A8E2FB3A8C4BE3B3 6656C6A5653AEF00184020ACA0BCCBF48BE3BF91E11C8658686C89848E714E6D DC158DCD1C1BC03B83FF94C60B1DC71CE8A86B46DBE661C9F8F4677F8A2C7CF1 E41A91EBDA2304735147BE66CDFF2673F09D408297302124C127F0B35690CAE9 CE1679120CC4D582FB69550AD34A047DDFCD9D411724554CCED753DB52D6AA7B 22B0C55EB698ADDBB0F8ED15C971AEF113C74B9E25DA29199237B98DA4023665 C2A63A837E4CAB38F8DF37DBAB5DC80C0C3FA72C8A70DC76B5B36B2EEADDCE74 23CF794B66E4DD3B35BF99893789063BF7B01D5F186B2FDE518B2CF2EDE51F81 38244BC64548AC3433A80B86D6A0CA26D77F403C06D65B7394BF1FC7D06D37A5 E70ACD844E3367DE4DB71312CBB85ADD21D5A1F99BB8427F252D90ABB66D7154 EA5AF4A165DF6415A0880AE784071E6B3E2101F0B663DE14DB1ABF8B7CE0E6D9 D24F9CDD9F80028D37C9CB4067A28D41E879AEFECDA71F649EB3C250BFF809D8 1E427E3BF24E85C75F080D93E0314883988B3A4A2B72A1B4A3D2189AB6ECFFBB C58151AF05AE335200711ED945E18B4BBCE24A8A162BD9BB26137253BA8B5819 41E759A7CA7CBA129BAAD438E87189F2F6AE7C86F4EA099DEB23705A500332A7 4F141D8778EAF3910486B2EA25AAD16B60DD804D0E5BAB0FEBB77BC95EDED08D B8941E040D99E8F44E70FF842306ACCF65C0AC9673859DB9C3A724238CB8CE62 255BAF0145692EE3B52643A0DE3E667AD03EEF6C753F57E34AECAB0CFEC7B07A 150D7151E57BB3A026D50C7A88DF5F480147D87DFEFE463F76122EEB5128796E 46CB0AF4B537987C2ED552B37D83F393222659DB735F2A293159AD84AF082B95 6F1454471FC36D805485D619D58FC53FBD6E3F72660ABA559B91ECDEFB267268 86A75650C3919962B0139409A29F5E3FA70B901CD5D2C49144778CFFF1D5B63E 099C92AABDAA73D54689812279C95FB7A4F7E840DD53DD3197A4E6D3099446FA C0032FD40411E8F3300A8A8934B5216B01D916D41DDB32513DC4ACFCEFE43D6B 22FEF13D3567B047C6B35C477ACF2E172701FDB0FFFBE01DD58D7E54398EF4AF DA5A404E194BCC39BEADEE5C76D7CD1E602793B950256F25871A9760C80B1EB4 D1E1179C390BC240DA061C9D539B20F4FCFB72DD0C1E860DEA2988E749819787 F04BA7A9CC3EDBF9CDE46895FE31EF0F8DEB63E295E8826BF920C8FEAE3B2080 8C98DC43DB22C6537028798198E2D3B0453ED725B774686310F635AE6153D9E1 8A0514882D4CCFE9D2D2465513E42E548F64A50ED78AEC9D62E0F9CF61EBFC9E E8832D60E91796C916FAFE58F51818B80BBA52C1C06D94E602481654E5378C8D 137E3A872753CCDE4B2618C031CFB13EE91C91335441C434296DDEF61CDFBF8E 8FAF25DB3B6D6796FCCE2711938D605AAC00F0A58DD1A03FCE8732DE541E5E8A 41FC87E1FCA5CD9B5E8D63E7A7D6CEBA67D8A83EAFCF490DB7185AD55ED0F43F 9A1290E91C463895BD12E8A831DAD661E36E1B01ED4C112B8E1D0991D0294BB9 A13B7E9A8835B12A7133E834379B3477DAD425B7996592FB0395E3B4FEDADF4E 23A07F6C0E1387DD54F5C8BD071C4E9E4CC98C55882E29B65E5BED61B57EED93 07FAFD75CF3BB101D1529F83AA8234F70F342B0E531BF23E9A7D1FD112193CAA 4E377B44F94D9E990C22598C2AE33EA73BD0670A4A000DF78624CE01A25DB30E 22B0EE3FA892AF673E323BE5D63D0929903FB45F56B11CC718EF5A690A776E28 8BEED7010ADB1076B23257F9484533DB8A86604B70B9F2A25A7DD70F13B65172 5C3DAA77885AE348CE4EE02021BDDEF16B58AA7B006877B630C97653DE7C661E D5D3477A1BBEB61FFB1A113E316EB366EBDDD54C621987FEF09432023A2EA97D 0B4D38229799F6656F7BB8E67379FC4652ADF65179AACF7FC9CB925A84ABECFC 00B4212CDF4E88876C2DD4E79099677C4A5A97860D9D1615587D68A4AC7A7204 47E421FC84C21560E71E1FC313776DC3717FB397BEC643F896029B671A199342 6378241B3230E538EA282FD38ABE642223D82A657245105757BE84B599C63F2B 008CE5F43703D558AFD6CF637F5B7BE3ECFB2CEC1DD6193BF0B3F2DA259B2279 4B5285456A3F8D65AE57B5DD2BCE68A552AA47F3854DA72478EA84DCC5EA6C61 8A1517C79076F33F654C8BABF2C472D192F98B070C3BB4D3E491950CC7076CEE 67822B1300D3A2B499F879E661548237B268386E066F2C8957F4C24E00179D65 3820FB3EEA99029BC7D92B9229242FE0402434F9E9D0784F451FEACD30A472C2 C7241394973CB6421043F7C7DCF5076A8C3B0A0520055D4A345897CD8D997700 48BCDCD2B7C56C4F15016ACFAEFBF2709E1050E430190D778236E1F3CF2A2E4E B0F5E0046BB0EC79DA3521397B42D6F3E389C51DA1AEDE8292F21814EA7DFF47 68721C5A1D2E8D121B235EED4FC60F6AE7BF7BE43085E59A7E8982198428B465 E858850E6C6CF9E5CA28BA647584F5C1CB17A02FC5A7FFE787387CA91D863A9A 8C9FA8CF7BBB5FEEB920A5DA403E3B41787E1449D6C459B6859867F6440B996B 7AD28238EB51173E04AA8616AE65D972C3E81A5DC5452910B0D9B286E559F189 53057776DD852449E55D47530F269AC1B98101AFCF34C340EA150D8D59B94719 39D77B882243F8A561426FDE05C9C304CB555D6628A79A65BDE6F7F467A41ED7 A40FE1689E6B6F69FD44C3E9D382FB558ED6E1158CFCA33C04ACFDA06C216560 A52D57507C8F16BC6DA689E34C8CA295708D212728C19C09232F7AE51D6624C8 B15D84C4B7B36CAB189684ADBEFE40D6071C2D18A0B90819774D57093EECEB20 7CAA1C2C81ED825DC2E7EEE6D14EBFB9C3C82827878BAEE83AB15AF7823AE436 DC4ACE2F11543317A3A65B4C4CD419C22A0535BEBA631C1B785D2A6B376D2F26 1E6F833FED1423463869E3095E399BA2CDB74B479EA63CCC96F4E35B7DB8A8D7 F3E1C563B26D336769F99E923C38341D5FAF91E5BC1FB3E8F0DDB164D359D7B3 020C65DB0A4BAE1D4C27FF32A5D979E23C8E0F735BA046895452D87AB391C29E 2C70BD2CB82D67AE7484913F544446E9D627C5655F5DF39DE4EE628B55AD3AEF 9CDAF2B8C4EB220A4DBA4AD8B81D2190AD2C037436BD988354D90C44BCCE920C 979763D13C1BA329854173F9656440257F79C4FDCDECABE30FE2A2092BA658C5 C8FDC260B8313FE0938A0141B2AD5AEFDDC154DFD58F90E9235FEEE0A96EE384 012483463C85D84BFB859B4DA9AED8DD3EC429BB6BE3C6AB939508855D5170F6 7870E2E83B25C19236CF797449326CE17BFF834630F038534EB36FB4A15E66D2 511127D3EA37B0E8D4F697157C5D904FF766EC1403FB778DF3F0231898211B11 75210D99BD3126FADE492BDDA58CC7F70BCD0AEE3C4C74E74FCDC840C5606E2F 82E1A309047F453F28D3EA6EC1D1FD48EBECD3734FBC999868B7143A9CDBA841 2B8823A2DCD573DEB40099972923EC769E82D2606DFAB86BA3ED61993CD175E1 F109E9EF19152A162A7A611B0C1544B537B373ADED0E18908DCAE6815EF81164 A37FDDECDE989832A3EF924F742E25B19A0BFCAEDBDB3A3C6D20B40CDED1AA7C 87BF98A456C5CF7EC85DC4DC84C04004094751FD25636D32D49F70BB372E623E D69875E89F752CD43D7DF617E16E13E1A0ACB1A179BEA921AD975BA34D939789 EADA2CB7ADEAC794306C184E4E7C4F12C4B85209F2940C212CD32B3E18E73269 ED8E8A9BF8A75CFD493526C2523B426D91965789B65A8D5543CD79425E7F36C5 91A07EB96D90703551D779EFF681F8F08A0680A068170448F455CC0188983484 415C2B710114788A2A0C21D23110F21DF48C25DF7F8283EEDB29F2DD58A53550 94B058E091D08D8A0689BD28D63CAE1E392264A7BA3710BE6B9399183DEE0755 D69C4EF892868693F93FACF37F9AF74561741A9C9C02B1CA16BF053FB3D388EA 0318A7AFA32DC0C941AB0780428B0C050C80EA4A44738E3CFD3923D4AA33CAC5 C4252CB8F4627E7DE4EE71432AC0AA0D5AA0380874FCB1FA0B49DC72DCF8D987 4AF4619753E2F0678009B2F2EE7575FC56A2E9B780335BA801C4745DFC3E2FCF A4134EE349D91AB2A1F7BF7FA8A3C244CC316B5261634BB2A9182E39D5AF7932 27E8C73020D3F98114DD14D66370B5BB085A73FD4DEB3E54BA2D7349F3527F98 A9DFD878A299DE45098FB84F47F93EE6954FF12E39403029D1B3A5B4D8CF2DE1 4DCCE289A5C4B3AA3151E04E4CF5FEDD9CAAA3B4D3059118FCF7C2B7FB543932 E77D622B30921F0D4CDF999CC506034694DE9CCAB76D506361A0691665A42A35 5530422E80E05272BE344B699D2A6E5B2D883EBB48DCE825FD9F6777B97477A6 B06D39597159237CFF4527EC49DFB3726D80D887E44F3C04B1DE02DAB246C59B 1C7FFB0D8BAC544FF228C45046BD9098C010DB1694E7046F144A71EDF1761456 6ECEC31A61400B5A232ABCB7652965DAE16E3A2E6DCF978D5C03041B4D9F9519 374DF54FFAEAA61C0DBEB873BE4239BB7C7EC1BA796D0B401CEA2F493BDB678F 20A7E94586CB9F90A6EAAF6CBA33610DA9AFCC960089A7FB95EC7AFD0E689F34 3C95A4E4D98AB7637A8B12FFDE34D292B64170824F6E17F04776F87C04C53D6E 4093717B11FEB89476BDA8C80236F5BBAC879FDE03E4F8451A925D658D3F1A43 E412DFE21872DE02B8987532A69823A969A554967B1D60899D2997C3453B6C6E 9FFD84D113CE9706540E53E9AC4AA98182444E63ABEF11A9A38108D66B7F725B 042100C894EA57059C8A11873F9C601EC1D0E5A62409B15425F815953F1BEF14 3AEF54CF2C4A960EFB94F034B2C43CC36070F704FBA40E973A99184200694755 64B23D4A48ADCF945EFB28D70EA4F3AF7C4D800414A87F951BB00C8848C3A2EA 48D5ACC1FBB1AE4C4904B34C560EEBC79F2A58FE2A63038D56794A94091C647E 28ABDC8CA7F937A9249126CF625B174CC1011CD6C9206D8B46391525A276B074 34422E8C3C17FEA49476A70A9384FB6D382A0BAFDA1D782EF5C5C126BD966D7A 8C43AD19FE99A5D1A892EAC634A4B7AE75FFD5DCE621D130041539FA44736247 CBAA66A449C89F9D031F66E7675A185A4485C09C3DF714A1557CB7CCB002B192 1C97564D8A0B552A2007EB6338FDB4E6200B786B07D77C384B45E824E646CD09 64C52C0AE22D62F571DDCD74160B9338C694F92243F369DF52A139660BCEB1C9 A296D2377675C372E86CFB841D418A3FFF99E267C2E056BB55FB8EBB0B544D7C 005911F8C508D8FD5D74A1ED361D35D10228961BA264068F942D81FC41264472 DACB17F573B57559C40AC67733C9043E98A73F5B106A5B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 58 /colon put dup 61 /equal put dup 70 /F put dup 73 /I put dup 84 /T put dup 102 /f put dup 111 /o put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD ED277A492B42D88D0E068D61F2BEAF96BFE7F399175DE7D08981736F7DA253EE 331F97DCBB941B1832E3FDBFA7650E0905E062516F27090476AD2FF0CA78B14E 13CD9482201FEA5AFD00A134F3C357412CEE5E264C20C39E157567538D94E69B 6B7F3EC896D42594593A016CB5FD306F440F63F2F8A60EA6030C5280EFF0AB91 AE4F207B84B68DDE13F0F9671B2E7E4B03C30FD2970B441E2914538354E3EEA5 8F730A0094DEDDDC4A1867AE25CFD73B90688BAFC791B2E6517A4E1BA2F39AF2 E407998778B4E07497DA3811243A86115E451D3ED1539E597DF1BB2FFFE276DB 12DF81F103DAC3E3782F964FEB500B32ED3ED63FBFDC0E43AEE3EE3CAE110D57 D53E36D8081D645083CB8C992985DB99D9BD29DC9FC9391448D296F1205CED8C 5111C7471C53D6A973434A3938E1970D8EA3CD40C7B8FB44205899626C10B168 927E4925532684A429F690536B79F694C1293E1438DEEB728CC5B35F801620FA 2EB8E25C29B364450F33AF7305F28FF3FF34DF7BD592A865F81614B15473D597 88E039C0BD01FBB360077A16C6D30991FB63EEDE2E732DFA6BDFB4C1D0D83185 542DA6218503A75C10C35A95B63056A0ED3DDED1C8764477F6328EF65CBC8D3B ECEB718B49F2297D416D2A3401DAAE76C35A532BAAEBC8A228B58284599EEBB4 250B3B4DE895A70D335D41F59317F44A60ED73DAB72A2F1AC1DF2D2C99CEF50C 236C6047499118755EE07CD09E659FE41B9E9AE8E9D60E06A3E169A1A02B17E1 E5A321FB16C81BC1636D6B4D6D280B4B84778FFA7DC977146FD3B64C7C2FFA65 8BB21E8FAC70D8E3823E35871842BD3E95A8F76885DD0B87E382F1BA066EE793 8A36C655A9CA2E2B7D736DB0F32541B8D32B5C20AEBCF9007B80CA45189BD8A3 B135FE7050A6DD93D6CB6FECC4AE448A1A67E3FF1DCC92B8A4010A5FB94633C8 EA9295B4BC957F62A653018E98A03B7268517394AEC07E4F10FB25DA53070C2B BB4411D9608F4FF0B2E171883C860572E77BAFCFBDBD48AFE79140EB33D4106D 91CFBDEA52C72153C48DC62B435E2D60435497EFE30E582F20D5864807AE8683 1051F55FD1C3B0A09767B0E3F9185FA9D6EFD6B7F8165A6437F7600D061DA9CC 9C41FC34FEFB523CD77C171DC673154B9C531003F473DCDA9764F56EC19382F2 B86AD651CA2B01DB899C2666127A60C776F97ECFF94C2307EB3C44EC877FCCEF CDAEA25114CE2484465A56A684012053B3D078122861668F7F6E96C8E7829242 F1E05AA1A3BA678F44AD7BF3CF980657CCE5506A7AC923DC5E300B27F3261549 5E7F26989BF6328610AED78D0AC8A6526EA1459DE51494A639DD781F1C8B62B7 32C93AD6D5252312974C01FD5FE881F9994498B9CA251192A91D5EE10F947975 B3C8FC5D5856C4CD23C29A70F8E71CE392D8FB2087FC991638FFF960D0D38234 AA1C9900C092C65DDAF5DF5891AF008F869D7AF5E4EF1989FD377E90578C7306 0D2FEC1F218A069053CA2B0A1FBF490CC00B0A45B8D17CB74BDAA4BFF6DAB538 0CBF6172F37878D277D9A29A3B03EA96BC30446FA34F89ED1837E82A0995C680 7B6805524A6D24289FF6CE2EB50AF4A027014D43A353D719B14B247A87898A96 0DF68C0C0FE3889279BD833E4CEAF0C80DEFA6AE947F58A30DC4C7CDC1212D0C 80BE2F454A7D8613D0CF64AC5BCC7FF4C157C20901F88098B1C87175331A8FB6 2F312B70A54548B4769A0AED35C6A162A2F8042E0762A9360B2DEFDE2D57D0AC 1341F032BCBA162134FC3DADB6F9A6FB9137CBE9607998FFE1B4D2716BA61F70 4CAA3FD4727A88730D6AE8D68D1D5B530C884868B7868775EECACE16BB485F55 F723460DD6C93A05E23ABF87E930FA696DA3480C857B7E2F12318F34862A3CE0 7B5C2B5B0098EE29708F98ED5EC55F183D5B2EE491CACCCAACE7F841AC1F60D7 8689111BFA6B2D1015854A43B170C08103526C7DFF028D788DF5373AC68A0B8A 8C159F8856BB81184F4256994B5005D654E490867BBC73A9A9879DBB7FB52F25 A5A5DFA45DB0FDF9B94F0EE1870B692CD097005D1500BF926CBB9146855D0C7D E652A0D32733B6EA08A261F936EDE7E4745E67F5EA79D5D7EAE4DE0A8330DE53 327E86F2A3C810B8826E503BDF87CA82AC039F77FE0D4B91CD072E5DA1DA773F 2059F46A636EEEE6A62B6E1214CE593C8E6A44DF1526522F347A7E54C91D69A0 0CE5CF3F5C7528E7A638F5041056A43F90D0E6A47C2521C1058E8C6689492CD0 99C7CB0A061D63D174B1A2A1C606E5981D948853087B5A8B43DF3613AAAD505C CA785EE521B5D53CD5177C020699005F6C0D10D78585740BB798449CF2CDB83E 7A2B47C10C95FFFF6F55524C8964CE1CA8A15F517A7FE8C30572AD06D6EF7B0E D471DB941811E709BC070B8DEE5D8ED323ED64D790560A64E3B93CEE04453E6B F41692DEC5CBC2465BF1CE78A971F4AC90303A68A6510AD6BD87E9BD0F7E93A6 7159F5E7576A6FBD347BBAE7EDF985A31A59D1D3A011EA04EBF7D2F5D1AAE846 7481D16E8AF6539E38E8A367B56133931E7C52F372CB9CFAF7DA3CAF003473DB A5C03B5BCF8107CC4EB3E5BBF668827AD1CE9ED39E7242C84FA9821CF4CA16EB 943AF05A6D7B488CEC77941EE8A8CF583F9326DFA9ED12F08B91B7E0983965E2 CAFA4372F96E18DA533BB2FCA2267FD97ACDC041F923737AF599DED35127DA26 CFC3AEF7F5FCC28AD59580920606844039C0FF5C49D1AD996A67AB0914D83D85 9C06A7E060285C1F860C6CFDEBC07D3F1415F381236D587D73CC978E88EEA0CA 70F49B517973916884B791DB3DC254114ADA73978E9616FE099066621A67E742 32C1DFD22C0C2F0056228FE28DB27C20E11FC1025C09369641184BF8693C5BB6 10D3F09AC6EE6F80648EE5B7BEA7A68B9134B077BF5F3E3AE02075A1CB79491F 068A2B14377790FBA48D45A479F84FF3F89370958999D807FB2FFCC20C68DF3D CF39C650A0FC208D145DDB75E8C1498186A179EBBD01DF1894A0D385E30DEBE1 5A07B645CF5B62BD528480943A66EF404678D13500AFB9016A1CFF617E3BEA52 0228F1F88989DCDBF2FEBA950983427A12C4E3D4CF274333B02824F86FF4120C 321A254E1D69AFC7B85E6F47533348615DE01B19A150917E890EAD7F0B1D2A75 5B6FF0D035921E6ACE3359C63E38EC1E7DC4313CD359EF031B06397D63B8DC95 2C181A021DCD56DAFF5356DD69035A8BBDCDFF8099358F35DFC5C797DC9BDA2D 45C4273CDD402FD08DC49766D74D310FA855438C544F21DD01A7A4D00CBE4EA7 3EC643FDB0E8A71C3596B310316CC7FD91D5B57522E415254C0C32C1A55681FB 197E064813ED8350A7028FFBC05E897D3B491A519FA7D086186E1DFFF2957A84 6F5FA893F976226DB9D1FE4762A9F8F340EDD4FA1FEED9BC93B54413B06634F7 A8627A1D40C1C4571AEBDF9A96F8683C934E5A2005460DA3A401B4412F82A5F6 B3746ED9C5C370BCC1D342A34E1416A44F8D068C547F532E2B8F7650D840719E 4B5A5F03F330F80EBEECDCC447D05EB25B40AE652F9715C4278FFCE8ECACE440 3DEBD108C15E44F1307B04C07C472184EEBA16207C0A8465655BDD3C02468271 91DB13C2B94B2BE0A1269AFCCBF03BF40333C77E235523849CE2E33848E3548D A2FF8C6D22C0B9D407636E1711E4E49C134C09DA5287AC72E43AF8AAA00A73AD 09F27C34CBC49D5CA71A16473DB79E9084E90F0F1193B24FCCA320BA3F7BF4BD EB1AA8C108ABDCCD2B50519AC8BFAA56C6C76D3D684F055D3516749E038E7ED9 A95C6149B359C5F51DF38DB34FD091D838B5901221B1DC306602F36C60E64626 6D756A3E218870B5DD2E90A21FB5E0A38CE3F3BE0204B3418703B9FAD677556B 6126588ED31FDD75751D6AC94F434EB4500F2E616D56E6DC386125D243C047E6 0642712F481C64E241B4CE537B0868D956BD9023121C47526EB8914045FC1A98 7F01D49A14A9D584536F1C2230DBBEC85D0D9A04DB7D6D11396AA25AD92B2D32 860972F14526971226E47D766911F8DEDB90F301CE11B454A2AABF1105A77651 F11826254E67A830BD38FAC5D375EAFFEAC832C3CEAB91AF35C6D99F28930194 3E2D129ED11C2447BDA9AC808A6E9B6A8A11F11C873CCF6A42851189551B202E 8504A2E8F593278437BBA2FB76BE68458D0D5FE383487FB215197D3FB9164ED1 2F05F1B8C9C1D26933C0CC13BB46830AED41E6D2D71345DE8ABD4AD9580393DC FE1308329592355B7EE33B920B995EFF3377EDF5C3275F060DDF862EE8BEADE8 980D19E2CCBDE2A00D86CC9B26296657E7F0E063B53276B3AE86CB001251B16B 243D9BAEBC9A4BE6E3B25146B846A663321CE46CD920AAF006D4459B729A97B6 30B6383CE8FD64E59A0E0796666892988B01C75C384DE6C4D3E115BAD437E56B 557781739951A39F81124659A44DDC4172D677218BF1512D6CEAF66DC4435CC7 514C88A892796F642AD4E31E7711E7A2FFE948AB3B86E7AD1B0FA3F7A2FD80DA 3023867F9C3321DD337E2F32C919F17771D7ABF77FDEB29124A9E47F4F5A8AB9 E566F40DFA397FEFB07B6D7C63D3B7842112B4AA03E97B57B5336E13DCD7FA55 CCE39AE3C7CA72F8B2CB87EEEACB01066D61EB560373EFF0B575920220F5B2A2 E345CF253B4B2B713722C9A76624B28183A37C6E869CAA4D1FC3C506106DC6E8 32BE12C5564F237D73D367BEC28A891D9B070E3A7D5D90F237CFF9262A276119 2C5BCB242A5E820D1A11D1CBE9270312588A1D4B3EAB92D99FD24C11169E7D41 8BF18537AE1E8184EB954410F79100357354C11AB02341A20218AF283B7A5EFB 18E6CABBBE20360B2CBD627E90808C 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /omega put dup 70 /F put dup 102 /f put dup 108 /l put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A9081E7BF64155A2CE3C0DF7 88D00671AD65654709589BAD7EA65BBA811387ABA5CA0BC3F66D3D48597A0D1D 2C268375DF47CCF62166262AE4840AB03BF49BE67A05EF66328EC729F03CA5FF AD3937FC053E223303565DC771ACF32E63DFB96D5030E787961D72D02C195C66 B48E9AF0309DC169CFE8D16E2818DA94693A18F027DEA0D9111F4948A3E665E3 0DE92169B2A2137C001654C5F4FDA968F5E3AB43146106BA16C4208830672D20 AD334D8E65C2D501A78B5805F59D77EBBC4CBAADAF49AE90AE92E2A76BB60B8F 4B35FDD1FA3BAB72675AB7128D477139A0195F35012DABC476B56E857D21F53F 925034DED22AB78A4AAB159549D42B680EF6A48738ACE4D0447AC4CA3F8B6887 DC4D0DE43F265116B84937317F9901B2B20FA4BFC3023756EE1961871A2B621C E1CFCFB7668C654A0A6932CC164CCD895CED9FBF6BBCB506FFEAA8D655DDF93A 0FF9B562B41B2A56306B32B7D9AA95447E607E59D349B671CFDC9500CDEFBF66 AF3595E96134CEC60ECDF641FA6A4D68434FB79C70680BEEB9792AF21E15FFE2 6B6D7D53FA347EB08D70B4AE2276CFAA71474E508847F9904B053BA4AC83C283 A738833F9A79CEBBB958678D049C8390FC8C8A3465ADA0CB3756BD4629A50C9E 81A997A3253632EC5BE2B55922FED876393D08BC973B467BE6B0A6D5779E8430 FFB9A320EDE59B95D114409AD41745DDD834DDBDC959C464082F26A464FF6323 F420719C455BABE15C9C683EE95A926C4711B3024FC12A39A8690166823F6524 C4DD9BC083EE564386B2FA5A81C2B0ABFB5D88BA04CC4E1E87932079695ED794 96024CB1274B42540FE90F707CD16225F27EC857D9C485C72DB01641AEAD605F 5BFC396177ED73248E7B9D961C77B0049ABFC8766B1DDE8240E4E9A2AAD07983 2B3B514792F8AE50D8BA9E34651BB464BAD32541C980265570A421D8CA9F4E58 7EBF862E73C3A77D4B60DDCB039081A9E48D3EEB88D153CF187F8082D41EB157 E62013F01392B06879248307E4A93D15ACC40B1E1B99DE64E78E79AB5E7580C0 11A246C9D90C71BC49E28B4269922BF5C4F6C1562DD7C0EE34E513B8268FFA58 6DCD942A09F9C6F75E28072D5D8D8B2A7AC702AAD787FBC79CA0F1CF184090B3 CC4BE026C0075D75D2D7B7180F08B4FC77C75719FB714D363E0C642E87C4432E E28CAAB8E01C0BBB917D33EB901A9A1E52A5CF9568B9F4664BD84D1CB0A1304B A80F27B3466BC9A6C9214EF14CDDF63E4D96BF6D89A5E30DCD1030A616893230 0590472530DE2073DD78DCEA7B1A177E69652C32AD6A69220B9C9919D5E3BE4E 66A498AF14EE5FF9C5BBD7294718342AFBA23CEA76368DD5CEBA21092073876B E26BF2E1001013DF512B8E9A7D92EBF9AC84CBEE9384008AD5CF5A836A83191B 582251063B9F648BA908B99B90919CF355DA3383CCC1B4D360E47C63AFC22700 E0B8B0583D05EF57FF992172DDB5560DAFC30E2F314FE720297D1A6F11CB27C5 DB0F62B7CC50F946F07A9D0A6A289D2F39B36471 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if TeXDict begin 31765089 8046549 1000 600 600 (./tikz/all-figure1.dvi) @start /Fa 255[52{}1 58.1154 /CMSY7 rf /Fb 203[33 1[33 50[{}2 58.1154 /CMR7 rf /Fc 140[31 34[42 18[34 35[39 25[{}4 58.1154 /CMMI7 rf /Fd 146[54 109[{}1 49.8132 /CMMI6 rf /Fe 255[55{}1 66.4176 /CMSY8 rf /Ff 222[44 33[{}1 66.4176 /CMMI8 rf /Fg 134[37 3[39 2[28 37 2[39 8[31 1[31 28[46 21[35 4[55 1[27 27 40[{}12 66.4176 /CMR8 rf /Fh 138[53 1[38 2[53 1[53 80 27 6[44 53 2[46 97[{}9 83.022 /CMBX10 rf /Fi 144[42 8[25 17[60 10[30 2[54 8[65 2[23 16[32 32 40[{}9 83.022 /CMR10 rf /Fj 147[25 5[41 31[53 36[52 33[{}4 83.022 /CMMI10 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin % dvips-unknown statusdict /setpageparams known { hsize vsize 0 1 statusdict begin { setpageparams } stopped end } { true } ifelse { statusdict /setpage known { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 0 0 a SDict begin [/Producer (dvips + Distiller)/Title (\376\377\000P\000l\000o\000t\000s\000\040\000f\000o\000r\000\040\000G\000N\000U\000\040\000A\000s\000t\000r\000o\000n\000o\000m\000y\000\040\000U\000t\000i\000l\000i\000t\000i\000e\000s\000\040\000m\000a\000n\000u\000a\000l\000.)/Subject (\376\377\000U\000s\000e\000d\000\040\000t\000o\000\040\000m\000a\000k\000e\000\040\000t\000h\000e\000\040\000p\000l\000o\000t\000s\000\040\000f\000o\000r\000\040\000t\000h\000e\000\040\000m\000a\000n\000u\000a\000l)/Creator (LaTeX with hyperref)/Author (\376\377\000M\000o\000h\000a\000m\000m\000a\000d\000\040\000A\000k\000h\000l\000a\000g\000h\000i)/Keywords (\376\377\000G\000N\000U\000\040\000A\000s\000t\000r\000o\000n\000o\000m\000y\000\040\000U\000t\000i\000l\000i\000t\000i\000e\000s\000,\000\040\000G\000n\000u\000a\000s\000t\000r\000o\000,\000\040\000m\000a\000n\000u\000a\000l\000,\000\040\000p\000l\000o\000t\000s) /DOCINFO pdfmark end 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@9} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0.0 0 100.00128 0] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@10} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0.0 0 100.00128 0] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@11} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0 0.0 0 100.00128] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@12} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0 0.0 0 100.00128] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@13} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 22.50027 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@14} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 21.25026 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@15} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 20.00024 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@16} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 21.25026 23.12529 25.00032] /Encode [0 1 0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 0 TeXcolorgray -183 -377 a SDict begin H.S end -183 -377 a -183 -377 a SDict begin H.R end -183 -377 a -183 -377 a SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end -183 -377 a Black 0 TeXcolorgray -600 419 a SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark end -600 419 a -600 419 a SDict begin [ {Catalog}<<>> /PUT pdfmark end -600 419 a -600 419 a SDict begin H.S end -600 419 a -600 419 a SDict begin 12 H.A end -600 419 a -600 419 a SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end -600 419 a -596 414 a -596 414 a -596 414 a pgfo save 0 setgray 0.3985 pgfw save restore save save 0.99628 pgfw 0.0 0.0 moveto 0.0 0.0 moveto 0.0 120.47398 lineto 238.11313 120.47398 lineto 238.11313 0.0 lineto closepath 238.11313 120.47398 moveto pgfstr restore 2.83484 104.88313 moveto pgfstr save save [1.0 0.0 0.0 1.0 6.35466 110.89365 ] concat pgfs -596 414 a 0 setgray -596 414 a Fj(F)12 b Fi(\()p Fj(!)s Fi(\):)37 b(FT)28 b(of)34 b Fh(unsampled)27 b Fj(f)9 b Fi(\()p Fj(l)r Fi(\))-596 414 y pgfr restore restore 3.29312 14.17339 moveto 234.82042 14.17339 lineto pgfstr save [-1.0 0.0 0.0 -1.0 3.29312 14.17339 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore save [1.0 0.0 0.0 1.0 234.82042 14.17339 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 235.2787 14.17339 moveto pgfstr save save [1.0 0.0 0.0 1.0 179.03989 4.6759 ] concat pgfs -596 414 a 0 setgray -596 414 a Fg(F)-6 b(requency)25 b(\()p Ff(!)r Fg(\))-596 414 y pgfr restore restore 116.22212 14.17339 moveto 116.22212 88.83403 lineto pgfstr save [0.0 1.0 -1.0 0.0 116.22212 88.83403 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore save 1.49442 pgfw 96.37897 14.17339 moveto 96.37897 14.22443 lineto 97.18867 14.26335 lineto 97.9984 14.32738 lineto 98.80809 14.43118 lineto 99.61781 14.59468 lineto 100.42752 14.84209 lineto 101.23723 15.21667 lineto 102.04694 15.7608 lineto 102.85666 16.53764 lineto 103.66637 17.60948 lineto 104.47607 19.04982 lineto 105.2858 20.93224 lineto 106.09549 23.33107 lineto 106.90521 26.29137 lineto 107.71492 29.83559 lineto 108.52464 33.95248 lineto 109.33434 38.56854 lineto 110.14406 43.58165 lineto 110.95377 48.79892 lineto 111.76347 53.9989 lineto 112.57318 58.9376 lineto 113.3829 63.31577 lineto 114.19261 66.88853 lineto 115.00232 69.39984 lineto 115.81204 70.71562 lineto 116.62173 70.71562 lineto 117.43146 69.4232 lineto 118.24117 66.92226 lineto 119.05089 63.36679 lineto 119.86058 58.9947 lineto 120.6703 54.06638 lineto 121.48001 48.86641 lineto 122.28972 43.64394 lineto 123.09943 38.63687 lineto 123.90915 34.00352 lineto 124.71884 29.88057 lineto 125.52856 26.33118 lineto 126.33829 23.36482 lineto 127.14798 20.96077 lineto 127.9577 19.07231 lineto 128.76741 17.62677 lineto 129.57713 16.54887 lineto 130.38683 15.77205 lineto 131.19655 15.22185 lineto 132.00626 14.84814 lineto 132.81596 14.59727 lineto 133.62567 14.43292 lineto 134.4354 14.32823 lineto 135.24509 14.26422 lineto 136.05481 14.2253 lineto pgfstr restore save 0.19925 pgfw 96.37897 17.00824 moveto 96.37897 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 86.9348 5.93782 ] concat pgfs -596 414 a 0 setgray -596 414 a Fe(\000)p Ff(!)-497 422 y Fd(m)-596 414 y pgfr restore restore restore save 0.19925 pgfw 136.06476 17.00824 moveto 136.06476 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 126.62059 5.93782 ] concat pgfs -596 414 a 0 setgray -596 414 a Fg(+)p Ff(!)-497 422 y Fd(m)-596 414 y pgfr restore restore restore 116.22208 14.17339 moveto pgfstr save save [1.0 0.0 0.0 1.0 114.10497 5.51721 ] concat pgfs -596 414 a 0 setgray -596 414 a Fg(0)-596 414 y pgfr restore restore save 0.99628 pgfw 240.94797 0.0 moveto 240.94797 0.0 moveto 240.94797 120.47398 lineto 481.89595 120.47398 lineto 481.89595 0.0 lineto closepath 481.89595 120.47398 moveto pgfstr restore 243.78282 104.88313 moveto pgfstr save save [1.0 0.0 0.0 1.0 247.30264 110.89365 ] concat pgfs -596 414 a 0 setgray -596 414 a Fj(F)-543 426 y Fc(s)-507 414 y Fi(\()p Fj(!)s Fi(\):)37 b(FT)28 b(of)34 b Fh(sampled)27 b Fj(f)324 426 y Fc(s)359 414 y Fi(\()p Fj(l)r Fi(\))c(=)g Fj(f)9 b Fi(\()p Fj(l)r Fi(\)I)r(I)r(I)796 426 y Fc(P)-596 414 y pgfr restore restore 244.2411 14.17339 moveto 475.7684 14.17339 lineto pgfstr save [-1.0 0.0 0.0 -1.0 244.2411 14.17339 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore save [1.0 0.0 0.0 1.0 475.7684 14.17339 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore 357.17012 14.17339 moveto 357.17012 88.83403 lineto pgfstr save [0.0 1.0 -1.0 0.0 357.17012 88.83403 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore save 1.49442 pgfw 337.32684 14.17339 moveto 337.32684 14.22443 lineto 338.13657 14.26335 lineto 338.94627 14.32738 lineto 339.75598 14.43118 lineto 340.56569 14.59468 lineto 341.37541 14.84209 lineto 342.1851 15.21667 lineto 342.99483 15.7608 lineto 343.80455 16.53764 lineto 344.61424 17.60948 lineto 345.42397 19.04982 lineto 346.23367 20.93224 lineto 347.04338 23.33107 lineto 347.85309 26.29137 lineto 348.66281 29.83559 lineto 349.47252 33.95248 lineto 350.28223 38.56854 lineto 351.09193 43.58165 lineto 351.90166 48.79892 lineto 352.71135 53.9989 lineto 353.52107 58.9376 lineto 354.33078 63.31577 lineto 355.14049 66.88853 lineto 355.95021 69.39984 lineto 356.75992 70.71562 lineto 357.56963 70.71562 lineto 358.37933 69.4232 lineto 359.18906 66.92226 lineto 359.99876 63.36679 lineto 360.80847 58.9947 lineto 361.61818 54.06638 lineto 362.4279 48.86641 lineto 363.2376 43.64394 lineto 364.04732 38.63687 lineto 364.85703 34.00352 lineto 365.66673 29.88057 lineto 366.47646 26.33118 lineto 367.28616 23.36482 lineto 368.09587 20.96077 lineto 368.90558 19.07231 lineto 369.7153 17.62677 lineto 370.52501 16.54887 lineto 371.33472 15.77205 lineto 372.14442 15.22185 lineto 372.95415 14.84814 lineto 373.76384 14.59727 lineto 374.57356 14.43292 lineto 375.38327 14.32823 lineto 376.19298 14.26422 lineto 377.00269 14.2253 lineto pgfstr restore save 0.19925 pgfw 337.32684 17.00824 moveto 337.32684 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 327.88268 5.93782 ] concat pgfs -596 414 a 0 setgray -596 414 a Fe(\000)p Ff(!)-497 422 y Fd(m)-596 414 y pgfr restore restore restore save 0.19925 pgfw 377.01265 17.00824 moveto 377.01265 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 367.56848 5.93782 ] concat pgfs -596 414 a 0 setgray -596 414 a Fg(+)p Ff(!)-497 422 y Fd(m)-596 414 y pgfr restore restore restore 357.16995 14.17339 moveto pgfstr save save [1.0 0.0 0.0 1.0 355.05284 5.51721 ] concat pgfs -596 414 a 0 setgray -596 414 a Fg(0)-596 414 y pgfr restore restore save [ 0.3985 1.99255 ] 0.0 setdash 331.65758 14.17339 moveto 331.65758 99.21382 lineto pgfstr restore save [ 0.3985 1.99255 ] 0.0 setdash 382.68192 14.17339 moveto 382.68192 99.21382 lineto pgfstr restore save 0.5 setgray 0.3985 pgfw 332.11584 90.7097 moveto 382.22363 90.7097 lineto pgfstr save [-1.0 0.0 0.0 -1.0 332.11584 90.7097 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore save [1.0 0.0 0.0 1.0 382.22363 90.7097 ] concat save 0.31879 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.19551 1.59401 moveto -1.09587 0.99626 0.0 0.09961 0.29886 0.0 curveto 0.0 -0.09961 -1.09587 -0.99626 -1.19551 -1.59401 curveto pgfstr restore restore restore 357.16995 90.7097 moveto pgfstr save save [1.0 0.0 0.0 1.0 351.53423 97.66507 ] concat pgfs -596 414 a 0 setgray -596 414 a -586 381 a Fb(2)p Fc(\031)p -586 395 75 4 v -574 443 a(P)-596 414 y pgfr restore restore save 1.49442 pgfw 388.3512 14.17339 moveto 388.3512 14.22443 lineto 389.1609 14.26335 lineto 389.97061 14.32738 lineto 390.78033 14.43118 lineto 391.59003 14.59468 lineto 392.39975 14.84209 lineto 393.20946 15.21667 lineto 394.01918 15.7608 lineto 394.82887 16.53764 lineto 395.6386 17.60948 lineto 396.4483 19.04982 lineto 397.25801 20.93828 lineto 398.06773 23.33107 lineto 398.87744 26.29137 lineto 399.68715 29.83559 lineto 400.49686 33.95248 lineto 401.30658 38.57458 lineto 402.11627 43.58165 lineto 402.926 48.79892 lineto 403.7357 53.9989 lineto 404.54543 58.9376 lineto 405.35512 63.31577 lineto 406.16484 66.88853 lineto 406.97455 69.39984 lineto 407.78426 70.71562 lineto 408.59398 70.71562 lineto 409.40369 69.4232 lineto 410.2134 66.92226 lineto 411.0231 63.36679 lineto 411.83282 58.9947 lineto 412.64252 54.06117 lineto 413.45224 48.85515 lineto 414.26195 43.63788 lineto 415.07167 38.63081 lineto 415.88136 34.00352 lineto 416.69109 29.88057 lineto 417.5008 26.33118 lineto 418.3105 23.36482 lineto 419.12021 20.96077 lineto 419.92993 19.07231 lineto 420.73964 17.62677 lineto 421.54935 16.54887 lineto 422.35907 15.77205 lineto 423.16876 15.22185 lineto 423.97849 14.84814 lineto 424.7882 14.59727 lineto 425.59792 14.43292 lineto 426.40761 14.32823 lineto 427.21733 14.26422 lineto 428.02704 14.2253 lineto pgfstr restore save 0.19925 pgfw 408.19388 17.00824 moveto 408.19388 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 398.64032 5.52275 ] concat pgfs -596 414 a 0 setgray -596 414 a Fb(2)p Fc(\031)r(=P)-596 414 y pgfr restore restore restore save 1.49442 pgfw 439.37553 14.17339 moveto 439.37553 14.22443 lineto 440.0118 14.25298 lineto 440.64807 14.29623 lineto 441.28433 14.35939 lineto 441.9206 14.45021 lineto 442.55685 14.58083 lineto 443.19312 14.76251 lineto 443.82938 15.01251 lineto 444.46565 15.35248 lineto 445.10191 15.81184 lineto 445.73817 16.41307 lineto 446.37444 17.1899 lineto 447.0107 18.1761 lineto 447.64696 19.41835 lineto 448.28323 20.93828 lineto 448.9195 22.7757 lineto 449.55576 24.9583 lineto 450.19202 27.49384 lineto 450.82828 30.39703 lineto 451.46454 33.64626 lineto 452.10081 37.21297 lineto 452.73708 41.04611 lineto 453.37334 45.06699 lineto 454.0096 49.18388 lineto 454.64586 53.27829 lineto 455.28214 57.23082 lineto 455.9184 60.8996 lineto 456.55466 64.16612 lineto 457.19092 66.88853 lineto 457.82718 68.96902 lineto 458.46344 70.31335 lineto 459.09972 70.86354 lineto 459.73598 70.6196 lineto 460.37224 69.55902 lineto 461.0085 67.74408 lineto 461.64476 65.244 lineto 462.281 62.1704 lineto 462.91728 58.64262 lineto 463.55354 54.78091 lineto 464.1898 50.72112 lineto 464.82607 46.59816 lineto 465.46233 42.53232 lineto 466.09859 38.61957 lineto 466.73486 34.93953 lineto 467.37112 31.56488 lineto 468.00739 28.53105 lineto 468.64365 25.86057 lineto 469.2799 23.5465 lineto 469.91617 21.58449 lineto 470.55244 19.95123 lineto pgfstr restore save 0.19925 pgfw 459.21823 17.00824 moveto 459.21823 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 449.66466 5.52275 ] concat pgfs -596 414 a 0 setgray -596 414 a Fb(4)p Fc(\031)r(=P)-596 414 y pgfr restore restore restore save 1.49442 pgfw 286.30295 14.17339 moveto 286.30295 14.22443 lineto 287.11264 14.26335 lineto 287.92236 14.32738 lineto 288.73207 14.43118 lineto 289.54178 14.59468 lineto 290.35149 14.84209 lineto 291.16121 15.21667 lineto 291.97092 15.7608 lineto 292.78062 16.53764 lineto 293.59035 17.60948 lineto 294.40004 19.04982 lineto 295.20976 20.93828 lineto 296.01947 23.33107 lineto 296.8292 26.29137 lineto 297.63889 29.83559 lineto 298.44861 33.95248 lineto 299.25832 38.57458 lineto 300.06802 43.58165 lineto 300.87773 48.79892 lineto 301.68745 53.9989 lineto 302.49715 58.9376 lineto 303.30687 63.31577 lineto 304.1166 66.88853 lineto 304.92628 69.39984 lineto 305.73601 70.71562 lineto 306.54572 70.71562 lineto 307.35544 69.4232 lineto 308.16513 66.92226 lineto 308.97485 63.36679 lineto 309.78456 58.9947 lineto 310.59427 54.06117 lineto 311.40398 48.85515 lineto 312.2137 43.63788 lineto 313.02339 38.63081 lineto 313.83311 34.00352 lineto 314.64284 29.88057 lineto 315.45253 26.33118 lineto 316.26225 23.36482 lineto 317.07196 20.96077 lineto 317.88168 19.07231 lineto 318.69138 17.62677 lineto 319.5011 16.54887 lineto 320.3108 15.77205 lineto 321.12051 15.22185 lineto 321.93022 14.84814 lineto 322.73994 14.59727 lineto 323.54964 14.43292 lineto 324.35936 14.32823 lineto 325.16908 14.26422 lineto 325.97878 14.2253 lineto pgfstr restore save 0.19925 pgfw 306.14561 17.00824 moveto 306.14561 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 293.47867 5.52275 ] concat pgfs -596 414 a 0 setgray -596 414 a Fa(\000)p Fb(2)p Fc(\031)r(=P)-596 414 y pgfr restore restore restore save 1.49442 pgfw 246.61714 29.84685 moveto 247.19543 32.7336 lineto 247.77376 35.88594 lineto 248.35205 39.2831 lineto 248.93036 42.8671 lineto 249.50867 46.56442 lineto 250.08696 50.30675 lineto 250.66527 54.01534 lineto 251.24358 57.58203 lineto 251.82187 60.91086 lineto 252.40018 63.89363 lineto 252.97849 66.44041 lineto 253.55678 68.47075 lineto 254.13509 69.91109 lineto 254.7134 70.71562 lineto 255.2917 70.85231 lineto 255.87 70.3246 lineto 256.4483 69.13945 lineto 257.02661 67.33577 lineto 257.6049 64.98882 lineto 258.1832 62.18164 lineto 258.76152 58.98346 lineto 259.33981 55.50154 lineto 259.9181 51.84398 lineto 260.49643 48.1008 lineto 261.07472 44.37492 lineto 261.65303 40.73468 lineto 262.23134 37.25275 lineto 262.80963 33.99747 lineto 263.38794 30.99826 lineto 263.96625 28.28711 lineto 264.54454 25.86577 lineto 265.12285 23.75066 lineto 265.70116 21.92447 lineto 266.27946 20.37079 lineto 266.85776 19.06712 lineto 267.43607 17.99529 lineto 268.01437 17.12157 lineto 268.59267 16.42432 lineto 269.17097 15.86807 lineto 269.74928 15.43207 lineto 270.32758 15.09729 lineto 270.90587 14.84814 lineto 271.48419 14.65869 lineto 272.06248 14.51768 lineto 272.6408 14.41475 lineto 273.2191 14.34035 lineto 273.7974 14.28758 lineto 274.3757 14.25038 lineto 274.95401 14.2253 lineto pgfstr restore save 0.19925 pgfw 255.12128 17.00824 moveto 255.12128 14.17339 lineto pgfstr save save [1.0 0.0 0.0 1.0 242.45435 5.52275 ] concat pgfs -596 414 a 0 setgray -596 414 a Fa(\000)p Fb(4)p Fc(\031)r(=P)-596 414 y pgfr restore restore restore restore newpath restore pgfc eop end %%Trailer userdict /end-hook known{end-hook}if %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%EOF �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/samplingfreq.pdf�������������������������������������������������0000644�0001750�0001750�00000067213�14557511161�016233� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.7 %Çì¢ %%Invocation: gs -q -dNOPAUSE -dBATCH -P- -dSAFER -sDEVICE#pdfwrite -dEPSCrop -sOutputFile#00.pdf ? ? -f ? 5 0 obj <</Length 6 0 R/Filter /FlateDecode>> stream xœ½šK%Å…Yßà]±»-Ô5™‘/Kl°1$K`Fò³°†É¢1F–ÿ½Ï‰¬ªÌÛs»™ddÙÓŽ®Êgĉ/¢úõÖ¸þgû÷åÝéÙ_­-ßþtjkËR—ÿœÂòÉÉÖB©K^ck"‹hkÔ%J°µØòã«ÓxðÛÓëSôñ–ퟗwËG/0f ‹˜myñÍ©O1\U+e‰1®)âWw§/Ϻ±5Ç䫟òM™ß,kÅ›/¾Æs?ßÈš2Öµ=x1…bèVmøý›[[U[i×FÍk>F½á¨ »<ÿïXZ³5¬ Ì­¶ó‹›[Õ²6³ó¿nnÓZkkzþæókiÝæÑ-ðÔŽ~¾¹ «V+ZÏßO?ÿÄ%–R;ÿGÐ4$=ßqì1¦óýÙÔ²ž¿»¹Í«DËr~us+k«8Âó×c´kG’pÜ5Ä}ßp¾jVòÕ#¹<fÌß☱.]£`Ðkcê*óÃûQ÷‘?~qúO´šàs8á‚ý/ÑpÔjËÝI4éñ¿ƒ·ažZžË§øï?OÖÖ\ ÞѸâúðŽÕ57¸Uä…]ƨÃÔEé»ðæ}Ø—Ó¼–å ÁïZ]Ž)2¯;á…/°0‹k6.ÕÄ-Û[ÛÒ}Düœ°ºiÊí·}EǫۊÁ·=qÂC,/|)Ä8‡X,mÅ-¤UZm°Ö’‚¼¹-k*p´W7x$eËç׸•K£ Â>ÁéÇ/¿?l/ÛqéEW«…Î’ñC,¶Ý×d:¢÷}º­a»§\¬>A¸ßá)Ó°žpû·c.kÉcvKm¶&m×&Æ„®K­pÅšý5\[Ȱ(,0æ<3†ÅÉIÁ•ÀR/Ÿ(¸Í:€Á[>æà%F£„È´†AR›Öê Âò†Íµº¥ªÐRáÁ•îÚp–JKÃýT8T 8B>C\ML²âÍnik€ê&­D·Ä²FZꪹ¸Ep½¥{uhnQ]–),}8§å…Û“¦Ýoƒ¥a¥­¿…ÓÌy‘ˆ+•þLNp>¸v;VïÁ.$·5Æþ ÒKK‹"»¤”Ü—E (¹H_a«ØÐ¢-bÇnÁЫØbŒ¡˜Ý‚sÆan&V_s¸. ·[GKà ‹u â^—Œjò]0>q¾¹$8K‡‡»-ÁÅÝ-· KÄ1õ5ó¨Â= ·èo™ö¹jûÈ”"Z°>{íw!ѱ¼ߠ0aú&jÖn€4ù>wƒ@Êü(²ùCgV¸¾ÂAR•ᑾITœ:vº%ãÔ›ßÌvW¯ŒÕo¯nk[xÛ§ÜbF/h}OÒìî)–ýŤîM¹ßƒœz÷¸í-8õî•û3 vÏíõÐrç.ý%*fîÐEá”q ’þ|RºÈ#ÿ¹>©ÝbI]*\p©0{ú6ã˜#=¤É9\Ód\¹ñ"3œ»`Hå÷(ˆ¡i¹¦œ ÜÎLqo¥àN©Õ �½ˆEéîÙÇjúé[†¬Œm–·Ø×¹>)¹Ü×OÛ—&{`_¥ÁsÛ×ýeÝÂY´á:ß÷êïÀUP„âqê ®…¾|`®÷™ Ì}â N³PßD\³ ©ðFfº‡ú™@tàö·WÇ%_õOH·©©×À ûôtyñÆÎÇÕžÀÇÍÞŠ9ê›|\5>N; 6<V{ <îZ«÷1PŽ˜yÃàê†Á“ì\bm×vnÈ9lqƒ// ðÄ»ø5÷ðT€¾•bTƒó‡<!–åk³0½?²çGÑÿÿ´òÝ‹žß0NÍPEm?Šø¸C+­^»¤&Å{×òÜEP£µ7 ‘«b–p…­‹Göc…XjŽEGEKí–Ï7~7x×EE1žèü¿°×ûSEAq'‘ŒŠ–HŠ?êcõ½L)Tî2Í:èë:ØÖ}L1Õ÷‰YB>Ùfx”§—J< Þ²ƒ†1JšF9Ýi†rñûš ™ãu¢„ýLC‚ª#îXüaÙqZ#NCÿp{yÂiµ â §Á¡÷ÀiXÀiÂiqPÌ4á´kÍ4á´Í๧¶Hn6á´Ò9�b§k…Ð;p1‚ܨN«á¨T'œ�1P&œ†ÅËÂÓ  Àò'œÖùË §SzN£v…Å §‘¿ŒqÂiX*¡wà4`²=Ñ4|Ùg‚i8ny"g¸nàÒà6PZ“Ó„Òš™¶Û„Òš#ë£ ¥5‹—Gƒ¥ai, LkFØ�@Mk6/š;yu4hZsŽ ÊAÓ°4>=hÎÑ«£ƒ¦5WzžhZsSgÞƒ¦€Ãêhд–èÕÑ iXªCïAÓZÄ«£AÓ(Ú½::hZ‹yl šV× ›h/ŽšÖ’½64­ÈÂkÕë4}ÄáÁ÷cõé<­Â8Ó«< —ým€Úw°6¶[Þ¨•…û…Â¿ÝÆ êò‹DýåÒ³ ªR\{Z¾Âš¾Ý=•èâ¤ÎÝê[÷l\!-ynèì–é¡/·‘© Ÿp”Äj°A%¤% ‚o·\ÏY¬ÑsÅ…ËQÛÒ•4/c`dˆþ?aóöå4µ¹x#@1¾ÏÑ -‚z­‘xظ\T¼nÙÞ:–¿Z5°£0Í{<±­la_ù6Ǿ·Çˆ¢™±v„° { È„ •îƒÞY¤\£3u‡:ÜðwÃPCmÞ×XŸO å â­»�CâzywúèùéÙó¿,ÿþñçW§g[âéÙŸù?}öüóüË{§Ÿ/Ÿ?¼»¾èk~ÍH[45ˆ h|“&øDQȰ-3»ãn9ˆ¢B£-ÎDјrãL¼©  @±–™'ä¬Î8ÑàKµÍ8zyàJ#vj&œhÈ?±Í8šÕí„P†ãDí«Aþ±:ãDCþÙ²VÇ È?¹L8aì(–2ᄱ£X‹ãD³þLBžpÂ~‰ß œ°€ƒBâ8Ke¯fà„d Ì1xÂBáÒ& °P™»'€0vË= S؄ƎbÓ ),2žtB ‹Ö¨R©Zz±ö‹\l§âSѬ³U¿.‹)9‘‘(B·àvsœÂx»%NHal("1 ¤06!4) ÷=ñ„±—'œ0GÊDØ)μM4 μM4aŸ´6Ñ„¡Òñ¶ØN&pé\'š0¶KhÂØNô–öFÆnb+M˜À#wp¿O¸ÖÌKI÷°¼ M\< 1Ž’·I ~'½Ãå"Y?ì%iìUì=uaåêuÃ(JË®(†ˆ`¡ÅåÃà€Ãìifë–BϦ¥´þ Ò4r¹„nAÞÐ.2¡;—i§¶D¢ïãXW°¹î–ÖK¶GµÁIùEƒ¸î7j¨3qý±P¹7Kub$Ôµ>1Ë¡cæè–IÏاé Ä/ApCˆ07ÊÅÙ:_£6 ,Ä�+IÈ-™å‰ø—èþLd¢Yids¸�1~5€'öÓJP!¼Oæ6ºEéŸ Â(îßñ{iéSÁµ!À†ë ^ùâ"+E>Êþƒ[¼~B4ïñ›-€7v+šßfâ1A¨pãµK«ßgéJ¨Þàî‚W[Ÿ½6Vo»1ÕÔ‰ÙþR®›…ЧʡRNX*”êSåè›È¿1¸»HmÍ$úÝR(9ü§Ÿ*ó ʪ;KÙØ™Yâ|ó¥Ì¯# O…¹º^Ü7ÜÐ\í4nU«å||Ø̧qU”ÁfÝR™;‰†›’åjT DÔ®v?ÂY%{Nïla‹û#˜wÈÌý„ÕR £%Æ{ŠBç粡(»å……}d‚š%Åž.)¥åÇ%E’zåu|6?,»¤H…¯5 E*ŽÕ?î"÷e¢iˆ?6¶L…!4q VÕñçàiÒñçàˆÐçH3çŸS`pþ9(E"±MÚ -ÏßAº¥ê„"­:û Ba_9mŠ´æì3ECpö™!²ë47<‚0)Î Î>SÃ#¨³ÏÔðæì3u<Brö™Z!o1|´8äBîYx´sÓƒéncŸ­éš³ÏÔô ºÃ¿¦¦GŒÎ>ƒP`qö9E£dv£¡hÔÄRcŠFsô™šüœ.:7=˜=l£éÁè&sÓ#gŸ©é©R27=bsö™š87JùÔôàì35=„ ¾Ññqö9¢Ž>£ß!·¹Ý!ÖÉçhwHêà3ÚŸýCýí²)[Š£+°[ÞFNê59A˜ +¶K9ñvGá_«lz’/¿)]´ß Î<T, „–™‚1—sõf9“[bí»&õ(4vmáBPÿà‘‹«¡+¨«ˆDÅAO¿Âf%Óo‰Û‘K‚Á·R¢xÒ–.²þI\“tKq ¯^\Ò�PÇOÌÇÚÅ(y¥Å^^'IêW™±•ìéDØÎT¦cl.ô™ú¬-ø™ÞÕ†0�éq*„"ž¡‹ôgà“Ésø&écLW=ß ãÌüü‹~8lzV&è¼n F´³Ñ…uw…o‡÷¿ ýŒ(‚êñDCÎ! ¾ßÓ<,.Y„.~Ý¢…âš_3ŸŠp€bܨ€ÖŸáçÝŽN›„f„Ïö'pðn© -~¹ÎE#D"¥¬ÛT½¢ó”Ý·éûã·¯ög°z–5€µí¸ræ9!g·ý2Tû+ƒÍOxrŒwöõ»Ø)-þÅÝ-¬úÔÕ¶ÃÀ�ž£èo¾žÂV«ª@7ôe*›NïzþCšS8¤„‘C O-Á9–na]ع\{-ìuuÙü-Xþ̓ñ¸¬[ªÿM K�§y)©÷m¯ ް·Nø?ç°¼»à`M|óÝç`çÁùüô?R#…Nendstream endobj 6 0 obj 3758 endobj 4 0 obj <</Type/Page/MediaBox [0 0 483 122] /Rotate 0/Parent 3 0 R /Resources<</ProcSet[/PDF /ImageB /Text] /ColorSpace 70 0 R /ExtGState 71 0 R /Pattern 72 0 R /Shading 73 0 R /XObject 74 0 R /Font 75 0 R >> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <</Type /Catalog /Pages 3 0 R /Names << /Dests <</Kids [46 0 R]>> >> /OpenAction [4 0 R /Fit] /PageMode/UseOutlines /Metadata 91 0 R >> endobj 7 0 obj [/Pattern] endobj 47 0 obj <</D [4 0 R /XYZ 49.957653 95.7315369 null]>>endobj 48 0 obj <</D [4 0 R /XYZ -0.269996643 9.85334396 null]>>endobj 49 0 obj <</Type/ExtGState /SA false>>endobj 70 0 obj <</R7 7 0 R>> endobj 71 0 obj <</R49 49 0 R>> endobj 72 0 obj <</R44 44 0 R/R39 39 0 R/R35 35 0 R/R31 31 0 R/R24 24 0 R/R21 21 0 R/R18 18 0 R/R13 13 0 R>> endobj 44 0 obj <</PatternType 2 /Shading 43 0 R /Matrix[10 0 0 10 0 220.4]>>endobj 39 0 obj <</PatternType 2 /Shading 38 0 R /Matrix[10 0 0 10 0 220.4]>>endobj 35 0 obj <</PatternType 2 /Shading 34 0 R /Matrix[10 0 0 10 0 220.4]>>endobj 31 0 obj <</PatternType 2 /Shading 30 0 R /Matrix[10 0 0 10 0 220.4]>>endobj 24 0 obj <</PatternType 2 /Shading 23 0 R /Matrix[10 0 0 10 0 220.4]>>endobj 21 0 obj <</PatternType 2 /Shading 20 0 R /Matrix[10 0 0 10 0 220.4]>>endobj 18 0 obj <</PatternType 2 /Shading 17 0 R /Matrix[10 0 0 10 0 220.4]>>endobj 13 0 obj <</PatternType 2 /Shading 12 0 R /Matrix[10 0 0 10 0 220.4]>>endobj 73 0 obj <</R43 43 0 R/R38 38 0 R/R34 34 0 R/R30 30 0 R/R23 23 0 R/R20 20 0 R/R17 17 0 R/R12 12 0 R>> endobj 43 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 42 0 R /Extend [true false]>>endobj 38 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 37 0 R /Extend [true false]>>endobj 34 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 33 0 R /Extend [true false]>>endobj 30 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 29 0 R /Extend [true false]>>endobj 23 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 0 100.001] /Domain[0 100.001] /Function 16 0 R>>endobj 20 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 0 100.001] /Domain[0 100.001] /Function 11 0 R>>endobj 17 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 100.001 0] /Domain[0 100.001] /Function 16 0 R>>endobj 12 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 100.001 0] /Domain[0 100.001] /Function 11 0 R>>endobj 74 0 obj <</R45 45 0 R/R40 40 0 R/R36 36 0 R/R32 32 0 R/R25 25 0 R/R22 22 0 R/R19 19 0 R/R14 14 0 R>> endobj 75 0 obj <</R52 52 0 R/R50 50 0 R/R68 68 0 R/R66 66 0 R/R64 64 0 R/R62 62 0 R/R60 60 0 R/R58 58 0 R/R56 56 0 R/R54 54 0 R>> endobj 41 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[0 0 0] /C1[1 1 1] /N 1>>endobj 42 0 obj <</Functions[28 0 R 41 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[21.2503 23.1253 25.0003] /Encode[0 1 0 1 0 1 0 1]>>endobj 37 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[20.0002 25.0003] /Encode[0 1 0 1 0 1]>>endobj 33 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[21.2503 25.0003] /Encode[0 1 0 1 0 1]>>endobj 28 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[0 0 0] /C1[0 0 0] /N 1>>endobj 27 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[1 1 1] /C1[0 0 0] /N 1>>endobj 26 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[1 1 1] /C1[1 1 1] /N 1>>endobj 29 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[22.5003 25.0003] /Encode[0 1 0 1 0 1]>>endobj 15 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[0 0 0] /C1[1 1 1] /N 1>>endobj 16 0 obj <</Functions[10 0 R 15 0 R 8 0 R] /FunctionType 3 /Domain[0 100.001] /Bounds[25.0003 75.001] /Encode[0 1 0 1 0 1]>>endobj 10 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[0 0 0] /C1[0 0 0] /N 1>>endobj 9 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[1 1 1] /C1[0 0 0] /N 1>>endobj 8 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[1 1 1] /C1[1 1 1] /N 1>>endobj 11 0 obj <</Functions[8 0 R 9 0 R 10 0 R] /FunctionType 3 /Domain[0 100.001] /Bounds[25.0003 75.001] /Encode[0 1 0 1 0 1]>>endobj 52 0 obj <</BaseFont/TSFQZI+CMR10/FontDescriptor 53 0 R/Type/Font /FirstChar 40/LastChar 111/Widths[ 388 388 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 277 0 0 777 0 0 0 0 0 0 0 0 652 0 0 361 0 0 0 0 0 0 0 0 0 0 722 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 305 0 0 0 0 0 0 0 0 500] /Encoding/WinAnsiEncoding/Subtype/Type1>> endobj 50 0 obj <</BaseFont/WLPVQU+CMMI10/FontDescriptor 51 0 R/Type/Font /FirstChar 33/LastChar 108/Widths[ 622 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 643 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 489 0 0 0 0 0 298] /Encoding 86 0 R/Subtype/Type1>> endobj 86 0 obj <</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[ 33/omega]>> endobj 68 0 obj <</BaseFont/ZBQUEC+CMSY7/FontDescriptor 69 0 R/Type/Font /FirstChar 0/LastChar 0/Widths[ 892] /Encoding 87 0 R/Subtype/Type1>> endobj 87 0 obj <</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[ 0/minus]>> endobj 66 0 obj <</BaseFont/TXORNY+CMR7/FontDescriptor 67 0 R/Type/Font /FirstChar 50/LastChar 52/Widths[ 569 0 569] /Encoding/WinAnsiEncoding/Subtype/Type1>> endobj 64 0 obj <</BaseFont/JYWHDM+CMMI7/FontDescriptor 65 0 R/Type/Font /FirstChar 25/LastChar 115/Widths[ 668 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 585 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 727 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 539] /Encoding 88 0 R/Subtype/Type1>> endobj 88 0 obj <</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[ 25/pi 61/slash]>> endobj 62 0 obj <</BaseFont/ZDNLKQ+CMMI6/FontDescriptor 63 0 R/Type/Font /FirstChar 109/LastChar 109/Widths[ 1093] /Encoding/WinAnsiEncoding/Subtype/Type1>> endobj 60 0 obj <</BaseFont/VXXFYU+CMSY8/FontDescriptor 61 0 R/Type/Font /FirstChar 0/LastChar 0/Widths[ 826] /Encoding 89 0 R/Subtype/Type1>> endobj 89 0 obj <</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[ 0/minus]>> endobj 58 0 obj <</BaseFont/QWKAXC+CMMI8/FontDescriptor 59 0 R/Type/Font /FirstChar 33/LastChar 33/Widths[ 660] /Encoding 90 0 R/Subtype/Type1>> endobj 90 0 obj <</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[ 33/omega]>> endobj 56 0 obj <</BaseFont/PDHHLD+CMR8/FontDescriptor 57 0 R/Type/Font /FirstChar 40/LastChar 121/Widths[ 413 413 0 826 0 0 0 0 531 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 693 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 472 0 472 0 0 0 0 0 0 0 0 590 0 0 560 414 0 0 590 0 0 0 560] /Encoding/WinAnsiEncoding/Subtype/Type1>> endobj 54 0 obj <</BaseFont/CLPFIN+CMBX10/FontDescriptor 55 0 R/Type/Font /FirstChar 97/LastChar 117/Widths[ 559 0 0 638 527 0 0 0 0 0 0 319 958 638 0 638 0 0 453 0 638] /Encoding/WinAnsiEncoding/Subtype/Type1>> endobj 53 0 obj <</Type/FontDescriptor/FontName/TSFQZI+CMR10/FontBBox[0 -250 721 750]/Flags 131104 /Ascent 750 /CapHeight 683 /Descent -250 /ItalicAngle 0 /StemV 108 /MissingWidth 500 /XHeight 448 /CharSet(/F/I/T/colon/equal/f/o/parenleft/parenright)/FontFile3 76 0 R>> endobj 76 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 1027>>stream xœemL[e€ïí-÷,e€M4›·×-f|ÊK7eÕMMÐm0¢‰ ”(-ôc£‘½eí-ia¬ác(E§ShÜ/3jA§F—§!çv/&–î‰9ÉÉyß“<Ï9‡¦ä2ЦiVWq¼¸h«zFÚNK;dÒS 1®÷¦€’¥|öá,´ebmžØF14m¶õê,mÖ&ƒÑ.äÔç Åee¥³EEeBy«ÞÚT_g*êìF}k=ñ0 •–ú&½½SÈÑíö¶ý{÷:κV[¡Åj8˜[ 8›ìFá¸Þ¦·žÒ7‡-f»ðz]«^HÎV˜Ì:Kk›Ã®· –½ÕLQTªåð«UûääRÔQj7•G¡J¨íO¥RiTZb;JN©Uº€öÉÒd/Êze?0¥’G%y\©h‚¾t/ßa¤lVãã»7H:ÉÌ#4É$ê¿ó1Óÿ¼Ù<i'o«k¡&Ô¶l]‚¯`®Á§á¥©å•Ð,ÁGŽÉÚÉZ8z0À Gãdù-P¨âDq%ŠË³4UÜa¤X\«Þ\6…ÙÛ^—A³â ý®ƒ¼ÍÄΉ« î"üóž•»¢Í\œŸÓàûëܽ‘–}šŽYÙÒžæ|¾ÙïÐ Jó RyðŠ«Â §£[6Òõ¼è‹ñ“QÖèÑ&†k�-ÅÚ4ÉÅÄ-y˜3x\Z¾}Kƒ« } æ’òvNëñÍkTx¢RJŸ_ž Qþͯ?2¨“tjTp?]¿¾$àl€ïvwž«Â~Á95†¯4ÎT¿¼¯úižpZSŒÜæNºàÞÄ]û`Å{ `’ŽS\yÂß!åTñÆ„©,„åWèùßÅá/Œ—©7‘í Ž”ëÇ’À æÃLÂHÈ .°+;4A×N¾ÞÄ.Š`9Áb’_Ïíÿ¬F sÿØ€Ï;ã�šý¤$y°Ë°– z}ƒÁ*I¥ž¶…Íf›ÍlÛ¦§Ãáiž¬Êÿ÷§Šá“ X¸@ßÃÄuø½:0Á`ti6ï±]àtŽC@#ýNªÕþGÓšÍߨÓ:~Jz‚ˆ¡‡•Aú› ®‘³jÁûîE’‰Y-x pà¡«x30óü(xAT ¹Å¾žâ#$û(ÿ&‘uJá€¤ß )_’Œõ×F@18 ýï%Ø¢¨†U¦WaʘQòu(úÜî>ôwjîç|Nž¢òB#y‰l#Ygº¡<о÷àÈÏßböü'(EÖ*Ç„¤»ˆfßàKÞå¢i·ãÓä¥AeêÄ9¥òVP™NQÿ#ýÀ endstream endobj 51 0 obj <</Type/FontDescriptor/FontName/WLPVQU+CMMI10/FontBBox[0 -205 751 705]/Flags 4 /Ascent 705 /CapHeight 705 /Descent -205 /ItalicAngle 0 /StemV 112 /MissingWidth 500 /CharSet(/F/f/l/omega)/FontFile3 77 0 R>> endobj 77 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 883>>stream xœ%oluÆïÖrœP‹,i¤ïÎ(q2Š/ÄDçÌ „1úbLÏîXKvm×^×Þ6º»¶kïúퟕõÏXÖv-›ÌmZçŸÌ 1:"ˆÑ@$ᣠ¾ð…$&¿kºKxõ<Ï›çù<8¦oÁpßÞeµ;d¹o÷iáÚÞíq4Øz¸þö60èÀ ÿ¨þO+âw£þ]¨ïLã._Dír¹EcÀ.0m¶ýÌ¡ŽŽÃ˜g-–¦“ç<ëd¬¬`çxVh†Aæ-—ÍÁ "ÓvÄ.îôûýí,ïmwyŽî?Àø‚éἜg˜ëgº]Nyå9æ]ûérñnŸÀy««Ÿó8]<7Àb¦ï>5ø†=½†Yñ8¶­ù ÓcwðQü·Ÿ¦ëÂÚXBëãè2ºmú›¸55êŒÀx„§Õh<*ÎÄ29H'©Mħò„”9©fe9QÃ/ âs@Zˆëèlö“Dz ÌhvUO ¦¸i5*(d4Éæ™R’*£ÎÔ‡Qð€y+HøeðKY(}zÄæXT¤{¶ä~5|Ì#Æ ¢á—Ô"¬À¯Ê \2<™-@ij" ZI¨ €šuIgJIÃt/“ž!Ú™[)ý¡¹—о?‹üۻ觻:M§=eú(ç œ—a„~ž˜CDzîÜLÁœ-ÍÎÌA $¾“í0F ÅñÒÂbeuýdõÇ ±§&†ÙÛh%»‰À}¸&9ý#ñò->3by̱æ­@q=•­Á Y !§ë[ó~±ùù•Õ"µ|­ŠNœ%è©R7}‰¯_Ó¡|ý%SrAá•°:D…ãR¤”ƒ™‹‰P˜RüÖ-E‘ÔŒš{Öì+óåÚ,U\-|I2EŽÇÎ(ÔÈñÀ6 yX>w>19Y¢õé&ú¯ŒO/#ÏÏèÕ¿tÚ=4}%Îû†Ü^Až”r!jv¬èlžÁ“üû§½ÐƒµÐwù…êu¸@¢¹`XRÇ”ä?§{m}'€<6|å2Ú}ï_˜¦óá)) †&¨w;¹ÆN°ÝÕÎ;76.m֨웟õ^…Ûpñ‡Ú­ó_¯¢½p•4ú*ZW>?ø Ñ`óÛ—vÜÜIíÐ.šÏ ö?~Ã’Ÿ endstream endobj 69 0 obj <</Type/FontDescriptor/FontName/ZBQUEC+CMSY7/FontBBox[0 0 784 275]/Flags 4 /Ascent 275 /CapHeight 275 /Descent 0 /ItalicAngle 0 /StemV 117 /MissingWidth 500 /CharSet(/minus)/FontFile3 78 0 R>> endobj 78 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 269>>stream xœcd`ab`dddsö Ž4±T~H3þaú!ËÜÝýsÉ÷å¬Ý<ÌÝ<, ¿w }üÎÿ=D€™‘1¯¸É9¿ ²(3=£DA#YSÁÐÒÒ\GÁÈÀÀRÁ17µ(391OÁ7±$#57±ÈÉQÎOÎL-©TаÉ())°Ò×///×KÌ-ÖË/J·ÓÔQ(Ï,ÉPJ-N-*KMQpËÏ+QðKÌMU�;ML:çç”–¤)øæ§¤å1000ñ2&FF­|¿¾—íaüÎðÓ‚ùgÍ÷2ÑÙ‹»/)é®’ÿó‚­º¸»¸hQ÷y¾âÅ?í—°ý–ŸÎ¾‡k÷žù<<@ÌËÀ��/\ endstream endobj 67 0 obj <</Type/FontDescriptor/FontName/TXORNY+CMR7/FontBBox[0 0 529 674]/Flags 65568 /Ascent 674 /CapHeight 674 /Descent 0 /ItalicAngle 0 /StemV 79 /MissingWidth 500 /CharSet(/four/two)/FontFile3 79 0 R>> endobj 79 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 452>>stream xœ¹Fþ��CMR7�$øøø‹‹ø¥ù6‹ ‹ ­ø)÷Z÷U÷Q�mq€Copyright (c) 1997, 2009 American Mathematical Society (<http://www.ams.org>), with Reserved Font Name CMR7.CMR7Computer Modern���24����pÉøˆøÍ‹à÷ìõè¯Êõ÷ƒìø÷JiˆuP~ƒ…>‹}‹ûLôè®§ÇºÕÆÐÉ‹ê÷ !Õûû74/X¶†•£¨œ¯„®WªÒÏ¡º‹ï¿=:4MFkgû…û‚‚‹‰‹oø0øÍ‹¯÷¯øZŸ÷èÙø¥÷8¯ûøR ‹’u‡‹}ûßü`g÷º9i‹:pg½Ë¯‹°‹Ë‰½‰½ #¯p:‹—­Ý=ø&üûœwŸøCš÷n•”Ÿûa–¯ Ú  7Ÿ §“ Ú› ��ˆ´] endstream endobj 65 0 obj <</Type/FontDescriptor/FontName/JYWHDM+CMMI7/FontBBox[0 -250 834 750]/Flags 4 /Ascent 750 /CapHeight 750 /Descent -250 /ItalicAngle 0 /StemV 125 /MissingWidth 500 /CharSet(/P/pi/s/slash)/FontFile3 80 0 R>> endobj 80 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 777>>stream xœoHqÆïܺN[댒r;¢ lF †–±‚ÌЊ셵¶S‡n7·›çÔvn8çöu;—nnms›šZ–ö‡¨Wõ¦ 4¢‚HéUTЛ‚øÝ:©VožžŸçÁ1y†ã8¡«­=QñÏíwàâαDR(÷.çY (ä7rý[QËÔ´ ߌÉqÜb÷ôë«Ófjie©=†½TyeeÅ>ê€V[I5Ó6“Ao¡jõl+mÖ³ùÐN50Í:©=U­,k=´?Çqez³½Œ±µÞ»âLl+UOÛi['m¤Ž3–:¥7ÓÔ¸²ÿªcÌVKÛ¨ZÆHÛ,V†arûéêb ;ƒ•c›ñ�¶.¿“c1¼wl•â‚{æágTúaaGe‹èÈŠLÔ‰ U‡·§8’M{b‘»áÇ/uÙS’–‘Ö·7gìq^}Kù^óßÐÝGëmFÇàÁ�õ£ì­[Bv fÈ)çX§ÅÂ^¬[jþ†NÞF[ï}Þj¾ªöm‚7Ø|Õ™,L¤¦³ñéä|0 x2˜5‘Ê\, é9ôlÏ1ßeè+ZT¡ªF¥CøÇÊe©D#ý 8W¢MàOiÒþ Üà‡_¯´}mr»Ûè¯Ò™oÀ•˜]`V“„yHÒ)ÿ8ákóÀº èÔ°AA† ,\#Ñ6q^5rs(ô�HTH|yÆkç«›4-mõ]: ¥ƒ„R\•B™_ iü½X#ý¹sªp ‚ ×h_÷�ïP¯þ®ðºòP¾âž˜'š‹ «•9­;ƒ~¾ÂÅ’§2´„þ¨Ð¢·Î¡…*0 [ÃŽDcÌ—�rb239â¼M×çSX…q¸K¢-D F :„0LÎv@·zm#qO“¾ƒ5žÉÇ@ˆGÃêÇo^äo&ŸíRÁY©È\çu¹;}ŸßýdÏXÏÄýè£O“j%—u‘Ȳ¦ éRdý\ÑÊu‘¼"­(œ û R_´ endstream endobj 63 0 obj <</Type/FontDescriptor/FontName/ZDNLKQ+CMMI6/FontBBox[0 -10 1032 441]/Flags 131104 /Ascent 441 /CapHeight 441 /Descent -10 /ItalicAngle 0 /StemV 154 /MissingWidth 500 /XHeight 441 /CharSet(/m)/FontFile3 81 0 R>> endobj 81 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 470>>stream xœcd`ab`dddsöõõ4±T~H3þaú!ËÜÝøkÎ_Önæn–•?2„¾G ~çÿ"ÀÀÌȘWÜäœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*€¦&ós JKR‹|óSR‹òsü˜€ž``adûÑÁ÷ëfãê⫾ºÉü#÷¡h[YSFw G霆¹sçLŸ5Y®wâ”uæ/|*1iiÿ܉‹¦¬]w`Æùó¶­<ØÍqº;¢" A¡2N¾µª¥º»Š#bgú¡{¿K,ìíš^YÛÕVÑ*W˜ÛÍQ[;qåüIs§,Ÿ¶|ÏwÞî£w}×Ú‡x–›yɵ^ XåÔÙí]ímÓvÝu^jwjwaIevabCXwGÔö)³{&Íž 7ÿÖâ5«»9ÖöfTW7&·äË·4&µ•¶µ¶µä×Gv·’àòâÆäæly¾²?œ§N›ö½`Ûï„©ìë¸pËq±˜Ïçá\×ÏÃÃÀ��#~Î endstream endobj 61 0 obj <</Type/FontDescriptor/FontName/VXXFYU+CMSY8/FontBBox[0 0 737 273]/Flags 4 /Ascent 273 /CapHeight 273 /Descent 0 /ItalicAngle 0 /StemV 110 /MissingWidth 500 /CharSet(/minus)/FontFile3 82 0 R>> endobj 82 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 268>>stream xœcd`ab`dddsö Ž´�±T~H3þaú!ËÜÝý³ôûRÖnæn–…ß;„¾G ~çÿ"ÀÀÌȘWÜäœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*€¦&ós JKR‹|óSR‹òx##‹æ¾Ÿç¾—ïd|òSšù§ÿ÷rÑÙ »-*í®–ÿs‘­º´»¤da÷ly¾âÅ?í°ý–›Î¾“k'÷ι<<@ÌËÀ��¿Y\ endstream endobj 59 0 obj <</Type/FontDescriptor/FontName/QWKAXC+CMMI8/FontBBox[0 -10 641 442]/Flags 4 /Ascent 442 /CapHeight 442 /Descent -10 /ItalicAngle 0 /StemV 96 /MissingWidth 500 /CharSet(/omega)/FontFile3 83 0 R>> endobj 83 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 396>>stream xœcd`ab`dddsöõõ´�±T~H3þaú!ËÜÝøSô‡k7s7ËÊï?„¾'~åÿ%ÀÀÂȘWÜÔîœ_PY”™žQ¢ ‘¬©`hii®£`d``©à˜›Z”™œ˜§à›X’‘š›Xää(ç'g¦–T*hØd””Xéë———ë%æëå¥Ûiê(”g–d(¥§•¥¦(¸åç•(ø%æ¦*€Ý¦&ós JKR‹|óSR‹òòsSÓ»˜Y&ÿèàû©Ñxóû·ùŒs6|/½óÝã=3ÐL¢«šv¤å×LkšÖ(7«fVaw‡‡Ûo%õðôU»ëåf¯]p¨{9Çœæq­¿™³å2“’»9¼s÷Û5cëüMò+ŽnÚØ=›cZÓ䆊š¼Ê¹—½n »î¹°|¡Ü¬- 'ºïvo9°åÂê¿ËuŸâà+[ðÃyê´iß °ýN˜Ê¾šë&·‹ù|Îåý<< �ôü—� endstream endobj 57 0 obj <</Type/FontDescriptor/FontName/PDHHLD+CMR8/FontBBox[0 -250 766 750]/Flags 131104 /Ascent 750 /CapHeight 680 /Descent -250 /ItalicAngle 0 /StemV 114 /MissingWidth 500 /XHeight 446 /CharSet(/F/c/e/n/parenleft/parenright/plus/q/r/u/y/zero)/FontFile3 84 0 R>> endobj 84 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 1385>>stream xœ}’{LWÆg˜qEÔL|áÎàTˆÖgŒ‚"VÐFŒZŒ ÅE^Ë"Ì.".EØåÀBy XY@»€+ÚjAD|Õ6Z‰Ú¢¥cÕnc©i“ªõ ^“vјô¦ÿÜÜ“Üû;ßw¾CS®.MÓn! _f*“iÅËE™Â�± U íw*×^nÆâÞ1;#=)†¦µ»óBtiY鉻dÉ'ÎW \¼xá\)( `±´R«IOŒ‹M•"bå6Vv)R¤..Q#gI>Ëd9mɼy™™™þ±Ú ]ú®å¾s¥ÌD9AÚ¨ÉФ4;¥P]ª,­Õj¤amþÃGˆN›¦—5éR„n§&=•¢(UêîôP}VœÆÇwN�Em 6R‘Ô,j3E­¢B©”;¥¢ÆP£œ&)WÊH=£·Ð_¸LricX&9ï:Þõ×ûŠÉCyvÅÓFãˆÔ0Ê^ü\øIsyªOtHF®ºø Kfä¹%q·* ¢DÒÀEçÂ:u×ié‚¡>ƒNS¯jš[— gE\Ë=ÿñüµkõ;ÂÕ$ëÿßz(WÉf;α)^ít‡;{g(‚ŽŸŸtiÛ‰p˜HÆ—ÙD cžÎÂÑýݧÛZD²êÿ©ÁX#@6Ü·;~ýæ}‰À/ w …ìÝ{?ÜëY²ÉÙ5Èi—ꢑ¹ƒŒƒÁpÜ#À·íH=)=X”�d>¥ÅØØbmhíH¶Å¼iP?gÉÔÿ§–+Ð_B)ô½–É›kNŠCkÁŽ]vì<IãŒÇÓÎ(-^õ'5±ß•æÅ‹¯ê¹xsÞrµ>‰}`)…›pîÀÙ׌dÎê:D,ü•û½6eØŽ)ì;¹É¾j,eO”Vt«q"‹ áHøa2žogæÛ”Ñ]oÄGJ°ðVj0·`KøŠE½j¼Ï‘¹Ã&À$’Ù\øãüÁ“ýUåê’%,úV»Ù¹5*΋øœg‡MùÆN[2ʼ/½zªÚ^ÂÛ¹“b¡6CªÅ)8‰k5×eƒ ‹ s%R8ðX_PïJÙÄ–ö’&µ‹6í�=`$¿ùrê̇5D^NˆöÖ®^ |zv-ˆ¥Í5ÐÊÛ õúL9'%¦3þ²£çEu™ÚCIÉoÇO~9òzSÅUñtû‹dÈåÓŽdÚŽY?j»¾¦Íˆ~„!#ɸg>8½;н¶6L…Åù&uA·lðA=èƒÓï^¾Su ²:Ä7ð¸c¸ÈF·9°â£:—¢éChvDýE¼‰çìéÄ“HÍr2Çõ¾h.3Uçä™ šÅ]³˜² ¶[µÝÚn¸m|É1¡ ¥-§�G@ñ.‘y%X¬/#é§} >$¡²jËŠKr‰d ‰¸pà‰“/t×*)r¾¼¨"?ûý­û¨É$"éHy„¡×œ1Ñä„^G‹�¿e#îQîeŸï´]æÚ\%2ñ8YÄÈiçt¼¶nÏÉ).†B¾ÐRPÝÐ{¡ªR“P²a Š÷º9ÍŠ_uãFZ™ÔÍ(a˜)à9¶® š›õ`É9ìaë I–AoT“ÒÃõ ËMP'¢³b on†¦:gp6ƒmÈÝFŸq`³ƒQŒØ/À‹¼¾¤1?/iÚd,l÷3êv›}` ¬µÌìYÚ½òîžKÐë{ÿ8Õoq@OdÒ'$BhƒáyÞU„‹p¾®¹býóûê£pnïm ¨Ý+` ¼¹‘†©¡Æ$à= V%¤uÕ•V–ÄÖpv÷‘jw×…ª¶r•j A5Š¢þÐÂÖ( endstream endobj 55 0 obj <</Type/FontDescriptor/FontName/CLPFIN+CMBX10/FontBBox[0 -194 935 694]/Flags 32 /Ascent 694 /CapHeight 694 /Descent -194 /ItalicAngle 0 /StemV 140 /MissingWidth 500 /XHeight 453 /CharSet(/a/d/e/l/m/n/p/s/u)/FontFile3 85 0 R>> endobj 85 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 1184>>stream xœSkPWÞ%!»Ð˜jÖ õÑÝ¥µÖTZ[ñ ?PP£ ЊmLVB! „@‚ Z5ž #Œ 8ÊSEAII ʵb§-N§ÓVÇ¡£ýÑŽj§Ó§Î]½þèZZ«3vÚ¹s_sÏÜïûÎ9I¨#’$©˳ç%>8Δ§‘òôùY`Ó½Wï¦G‚VZupz¤Q<“õi”3‘P‘¤³tÏ gQ¹+?ÏæægYfóó’“Æñó“ùevÁ•o1;ø ³Û&ØÍnåRȯwZòw9?ë5›Û]´(!ÁãñÄ›í%ñNW^Êì8Þ“ï¶ñF¡Dp• V>Íépó™f»À³‹ßV8íE¥nÁÅg8­‚ËAD”£¨¤Ôl í±†XGl LÄr"•H#2ˆL"ZQH¨ q<¡‰8 Ò«¶©ÞSgÉÕº»zÐ/#y=Ò(ãm¤‰aÎ)Ù€GÓ6RâÇþ^ÂG5û†µÏKiH ùÍÐ¥3­eKXÜþÄêöëÁ皌ÙÅ,3† /ݹ‘bÎÖƒ•S ±IB±™±„ôw°ýhr s¡¯ Ð,ŠMM¡¾óum@v1ëqljVzÅF¸°‰ÛÙ"4Ó‹ÕaÛÙwû€Fs~ýqhJâ-<c©©°ÜÍ1?Q8õš‚%p÷Å'¤trŽ/ OëÖ÷ö›¿D;”%Fᙇ$ÖúôC Ñ£7¡ùj¯cÃ~VÜ.VµÝûÛ¹kT3(ß[^+[Üh«³�mÇñ€c,-E-[¹­×7VA37¾«•k§.M€ÒØâ+álUST�]>7‡IÊ »ŽÖûáp++BÛáZÿ@Áyhº ÅšöôØ:9fÌz² nq#­$ËÈû@©Ð#õñÊé— ‹)”Z)Q{ È1çd%Ë«þÒmåðz*9Û´<¥úØÝz쥂⯗þÄ2Þãp¾¢uòE_À.¡5§ÐK}7ŠJA“PÒ˜29zÌP¹¿³ƒš–èh¯„J.S„Fh§Qucå§x¶ëö.x«Ç{¢«»µÿ”÷HµŸí¬ë€¾Úc^ÂåSŒ´²×ïÂ/L‹&–Î2e×@êkë§·¢y†8jnB¥+ÛÒsh~Óp-û§^»$«h݈¾MVzC¡²]~%lxƒB«*–oÿSgEUÅ s²êÞ™†g>·�Çâg¾C³8fû'0ØÑuŒF—Ô¸–ª,ß¼a ÐXhƒpáx;Ù/ì‚!TÐæPrÑá ¡Õ§Ñ¢�Ù­`ïþA%oFCÛA8Ñå»’3Ìm ˜Ž¦)?$%ÍÀ“ðÔŸç —Ñüð#G½Pµµ¦j›+{ÓX®DÄîCSÞçN«ýA±¿õôñP¨á$ (ðãÑFëÐeä#$¢¡Bî»é†GÔÜVº¶[ô‡! 5gþîÚ{ÆÇ¼jŸ1ÌÐùõÛ¡Ñ3mž”óëÿi ~Ë˜•“[Ìzn&Ô ÆM«iŶý=4îï‡äµЦփ‡48·ž’¢‘æ)6Z½°Eª×j‘¦S;AÔêâi|v endstream endobj 46 0 obj << /Limits [ (Doc-Start) (page.1) ] /Names [ (Doc-Start) 48 0 R (page.1) 47 0 R] >> endobj 91 0 obj <</Type/Metadata /Subtype/XML/Length 1531>>stream <?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <?adobe-xap-filters esc="CRLF"?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/'><pdf:Producer>GPL Ghostscript 10.02.1</pdf:Producer> <pdf:Keywords>GNU Astronomy Utilities, Gnuastro, manual, plots</pdf:Keywords> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-02-03T20:22:25+01:00</xmp:ModifyDate> <xmp:CreateDate>2024-02-03T20:22:25+01:00</xmp:CreateDate> <xmp:CreatorTool>LaTeX with hyperref</xmp:CreatorTool></rdf:Description> <rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:1c8965b9-fae6-11f9-0000-c9b8a3dc89c4'/> <rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Plots for GNU Astronomy Utilities manual.</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li>Mohammad Akhlaghi</rdf:li></rdf:Seq></dc:creator><dc:description><rdf:Alt><rdf:li xml:lang='x-default'>Used to make the plots for the manual</rdf:li></rdf:Alt></dc:description></rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?> endstream endobj 14 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4830 1220] /Matrix [0.833333 0 0 -0.833333 0 183.667] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R13 13 0 R >> /ProcSet [/PDF]>>/Length 49>>stream xœÓ2WH.æÒ24V(NÎã2P022Ð3¶´P0400Ð30„ÒF E©\i\�û®  endstream endobj 19 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4830 1220] /Matrix [0.833333 0 0 -0.833333 0 183.667] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R18 18 0 R >> /ProcSet [/PDF]>>/Length 49>>stream xœÓ2WH.æÒ2´P(NÎã2P022Ð3¶´P0400Ð30„ÒF E©\i\�üg  endstream endobj 22 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4830 1220] /Matrix [0.833333 0 0 -0.833333 0 183.667] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R21 21 0 R >> /ProcSet [/PDF]>>/Length 49>>stream xœÓ2WH.æÒ22T(NÎã2P022Ð3¶´P0400Ð30„ÒF E©\i\�ûŠ  endstream endobj 25 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4830 1220] /Matrix [0.833333 0 0 -0.833333 0 183.667] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R24 24 0 R >> /ProcSet [/PDF]>>/Length 49>>stream xœÓ2WH.æÒ22Q(NÎã2P022Ð3¶´P0400Ð30„ÒF E©\i\�ûù  endstream endobj 32 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4830 1220] /Matrix [0.833333 0 0 -0.833333 0 183.667] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R31 31 0 R >> /ProcSet [/PDF]>>/Length 43>>stream xœÓ2WH.æÒ26T(NÎã2P0P0±06P0422P(JåJã�‘ëÑ endstream endobj 36 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4830 1220] /Matrix [0.833333 0 0 -0.833333 0 183.667] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R35 35 0 R >> /ProcSet [/PDF]>>/Length 43>>stream xœÓ2WH.æÒ26U(NÎã2P0P0±06P0422P(JåJã�’OÕ endstream endobj 40 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4830 1220] /Matrix [0.833333 0 0 -0.833333 0 183.667] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R39 39 0 R >> /ProcSet [/PDF]>>/Length 43>>stream xœÓ2WH.æÒ2¶T(NÎã2P0P0±06P0422P(JåJã�’³Ù endstream endobj 45 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0 4830 1220] /Matrix [0.833333 0 0 -0.833333 0 183.667] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R44 44 0 R >> /ProcSet [/PDF]>>/Length 43>>stream xœÓ2WH.æÒ21Q(NÎã2P0P0±06P0422P(JåJã�’PÕ endstream endobj 2 0 obj <</Producer(GPL Ghostscript 10.02.1) /CreationDate(D:20240203202225+01'00') /ModDate(D:20240203202225+01'00') /Creator(LaTeX with hyperref) /Title(\376\377\000P\000l\000o\000t\000s\000 \000f\000o\000r\000 \000G\000N\000U\000 \000A\000s\000t\000r\000o\000n\000o\000m\000y\000 \000U\000t\000i\000l\000i\000t\000i\000e\000s\000 \000m\000a\000n\000u\000a\000l\000.) /Subject(\376\377\000U\000s\000e\000d\000 \000t\000o\000 \000m\000a\000k\000e\000 \000t\000h\000e\000 \000p\000l\000o\000t\000s\000 \000f\000o\000r\000 \000t\000h\000e\000 \000m\000a\000n\000u\000a\000l) /Author(\376\377\000M\000o\000h\000a\000m\000m\000a\000d\000 \000A\000k\000h\000l\000a\000g\000h\000i) /Keywords(\376\377\000G\000N\000U\000 \000A\000s\000t\000r\000o\000n\000o\000m\000y\000 \000U\000t\000i\000l\000i\000t\000i\000e\000s\000,\000 \000G\000n\000u\000a\000s\000t\000r\000o\000,\000 \000m\000a\000n\000u\000a\000l\000,\000 \000p\000l\000o\000t\000s)>>endobj xref 0 92 0000000000 65535 f 0000004264 00000 n 0000025360 00000 n 0000004205 00000 n 0000003970 00000 n 0000000122 00000 n 0000003950 00000 n 0000004415 00000 n 0000008111 00000 n 0000008031 00000 n 0000007950 00000 n 0000008191 00000 n 0000006508 00000 n 0000005321 00000 n 0000022968 00000 n 0000007738 00000 n 0000007819 00000 n 0000006393 00000 n 0000005244 00000 n 0000023270 00000 n 0000006278 00000 n 0000005167 00000 n 0000023572 00000 n 0000006163 00000 n 0000005090 00000 n 0000023874 00000 n 0000007524 00000 n 0000007443 00000 n 0000007362 00000 n 0000007605 00000 n 0000005999 00000 n 0000005013 00000 n 0000024176 00000 n 0000007229 00000 n 0000005835 00000 n 0000004936 00000 n 0000024472 00000 n 0000007096 00000 n 0000005671 00000 n 0000004859 00000 n 0000024768 00000 n 0000006863 00000 n 0000006944 00000 n 0000005507 00000 n 0000004782 00000 n 0000025064 00000 n 0000021260 00000 n 0000004441 00000 n 0000004502 00000 n 0000004566 00000 n 0000008634 00000 n 0000012387 00000 n 0000008321 00000 n 0000011005 00000 n 0000010793 00000 n 0000019749 00000 n 0000010455 00000 n 0000018006 00000 n 0000010223 00000 n 0000017314 00000 n 0000009994 00000 n 0000016753 00000 n 0000009837 00000 n 0000015971 00000 n 0000009412 00000 n 0000014888 00000 n 0000009253 00000 n 0000014138 00000 n 0000009024 00000 n 0000013576 00000 n 0000004611 00000 n 0000004641 00000 n 0000004673 00000 n 0000005398 00000 n 0000006623 00000 n 0000006732 00000 n 0000011275 00000 n 0000012609 00000 n 0000013785 00000 n 0000014352 00000 n 0000015110 00000 n 0000016199 00000 n 0000016962 00000 n 0000017526 00000 n 0000018279 00000 n 0000019991 00000 n 0000008937 00000 n 0000009167 00000 n 0000009744 00000 n 0000010137 00000 n 0000010368 00000 n 0000021360 00000 n trailer << /Size 92 /Root 1 0 R /Info 2 0 R /ID [<ED3AA03456EEA8381328B8F7C98BCA2F><ED3AA03456EEA8381328B8F7C98BCA2F>] >> startxref 26305 %%EOF �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/samplingfreq.png�������������������������������������������������0000644�0001750�0001750�00000032676�14557511161�016253� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��î���þ���Ó—3��� cHRM��z&��€„��ú���€è��u0��ê`��:˜��pœºQ<���bKGD�ÿ‡Ì¿��� pHYs���–���–�qFþð���tIMEè8%Ïÿ��4IDATxÚí½,KšÖŸ€+íjb FÂØQ^ƒ10òc€.F 0¨³Ë?ÇÅAÕæq@Ù.Õ6Ænµƒ„±»T3WÐ%ÃÒvq¯`¥»HtÎH ##¿ª2«ò#"2"úù•î=Õõ‘•‘o¼ïûD¤À„y'@$È×>Bˆ-¾Bºö)BŒ©ÿÓÖ y7|�8¡XûD!¸tè´uBB'BR9÷y\ûl!úòâÚ:!#R€?·öiB!D/Úœ»¸›Ï›µ KæÐW³¬KRB»÷u홽‰=49w‘Èä…Cj]‰Ld"[û<f{*R‘Šdä§“ò󣎻½¼"MÍŠX¤"¥8Ë©º$kA»Ÿy“,x© wÞ·fÏs{õZýüÞßdˆ¯Æ|Hdˆ±ðX¿”"Á£|PïoQÈÓ½£È“ˆE^}çÎ/ÆÈ E'õRŒ¾–g@¼¡%ˆqÆ1€Gùq\±E„žpÆAòÙÖÅÖÆ "1®´lw®É>c/ Ÿê×Ú5›"ÅpšV—Ä'îÙzç³´û¹L³àE6Üyßš=/èM‘"ÆFµ‡»“A$$R‰{H:ï‘©g1ö÷¿¯>{@<ú³i÷7á¥<S¼!R¯åÈÕóo£½Å‹â)çãÒùe}ܽ’òî§^±Å¶Ý.kÛööõÚ½¯dU£e+XfëWi÷Kêe’Ï·á[5fÒž—õ&WmàÎß|ôµ–‘ay‘èŽÑO8«g[Œ×ß>a;{RàqyÙ ”'Œ‹§(�y–åyôw‚F$ˆq’R´ÔÔ—5›tþ^P—Ä]nÚzÚ½côÚpköÌÞÄÆæÜSà¢j¢ÒàE„¬?Ô‡|ÆFÄsOV>#D‚!Ãä Þù$@·Kè©Ù´Ýé/«Kâ,ƒ¶Þ†vï W6ÜÆª=³7q€Q9wt*K”•tTcßͽq³ˆ:ãí#RŒîêclp–'TÎPžï(’þ`9‘£:%[)ä ±š3œdQ¿s–g!)Ÿ5¥D‚NH›lžHòÕê·‡Ž¡~I}N½W~.AtËhÕQcœÛçÓ>æ¨K_}î¢fE™%ì\ï9uIgØÖÛg÷ý6|mÁ^Ùp›öÌÞÄÆÏÜ+sß”ã亡vÆÓ"/Ý/ŠoÍäY5yˆH¼ˆÝÈßOÊ-4å§!<ö½#6â€À¶ÔdŠD Ñ¿¯þÔ>Ü)v8à Î¹|'vH‘áµ:‘á€b°W¯%â {¤ˆ±Å[­í9†ˆÄ[¤ØãU)hcä8à€xA†;ñ6¤g™xÃR¼ˆ}¥©xÁ R¤Øß x‰\!º¸"—3¥ôJ>U×% ˆa[oœÝ_Ûð€ûdÃ5cöÌÞÄ$îŠlJùräÈQK-„h‰m_ 1Þ*é‹„6•1$^ïüêký«ý‘–°fà(^[2œ]}Ö7ä8´åí+T¾Sþ"bHHÄêYÚ”ªunÕóWÈZ€Xc×:ÆIýCç,^ÊsG„·vI›O"k¾ƒR7…¼Ýãtkéºf%°¿P5uɇ«HLÔݲõáÖá¿Ý÷Ùðë°áöçÌÙðpµgdª&zSÎdÚ¯SP·ì1EP—xÆG�ç‹ WwD]ŽòåOOÕn×òŒw—‚8âˆ%â—Ïõ?!³VôI¹hC…Ïbõ_.6"äŸÕçžq¬l:ÇøÜ:F{NÒ=¿cyî²\ö±íY×™£ÚÉ#Î(gK;´åGw…O"¾ ’õµ/çGx+’иeëmB³û>¾eÁ~Øpç|gÙó ÇÇ`ZÆ~o"Rñ"¤Ø‹\ìÄNì¸þ›sOP(1Äñ*°ÔÞR`Sô"¼È¯ÕËÅP&èþYe§1Wj!Òv3“gl&h|û¹:ky'$ØâÜtò„J7š ¾yŒ1µ#¶�Ò‹ÌUŠ@Qw]¥2àŒ©×+é9‹ŽôäÈHˆÜ²õ6Ù}Ÿ ß´`?l¸Í,{QWãÎÄho"â‘ü¤Žžã€úŽî+cgî•ñ&·Ç†µ”¬=.‹f5.sïeu=4£Èüˆ'�bdx)»$‰xÃñÝ9Èø²õg¥b¤êqÄ#N3ʘܜ¥}92"cm½MveÃ,Øî^!sö¼FoÒm­ÌÞcÔ̽½îµ§BÚ>i=kÆò—Ì0×Ù»I]Ÿ¯e3"B,?ã³H`ƒD„<•¡; É€ò:^v·eiŽÝë#¦‡3Ü®YU£"¾ÐMsRP Ûºˆ‘¢¨BÌÎî¯mX<j¶`Ë6|³ÆF۳ȇ…|xgÞ$míU7~X4cfî×ë^ۣۜäÒ¤E„F'»»ÈÍ´IˆØxnäØÎäˆ#rWè4²Qû?'8�€<É'ùQ};A‚fsÄååLP+ä 'tÆ©b'yÆqâoÆ=3“Nͪ9Yvñ-ÎåÃbÀÖÅ™| Ê=4»¿¶aÝlÕ†ïÕØh{ι_Që½Iæ±ÈQàÓÜ#…ÄHç~#„Ò~猃HE†<#™Øˆ½Z§ÚPW¡ˆñŠExÀ¦îJ¶xµñÆ Y• ðž‘Eõ¢¸H5³suí�Qvsº‡¬\ˆ[ –êµùŒ¢ú ¶(Wü> ÀF}7.—õ w¨"0ëN qº:{h Ùz†3º›Ù„g÷—6¬Ç‚ײáÛ56ÚžåI¶¿Jo’¢@&r‘cƒ'ùiBz"h$—Ç Æ” =ÔR«ÏlðR?Oð‰7dØABb¹˜lÔ³¯C»S#Á¯·~8¨ß;\.´¸8Ã=2l°WKØð†·jI[Ï7"ìÔ/¨jYQùHË¥)ê S¼a‡WpÀK½ämƒu”buó¡c¨e3²© ±Ç^ÕÁ¾¹ Í1T-íð†ð‚¼^:“`§®Ì¾þ¡ò¦×‹žÚ5+räÝݧ›ºäÃÕG«=Ý\ wÛÖ‘Câ »¦•„f÷}6ÜoÁÃýÀxnŽP_}Í6|»ÆLÚóÒÞ™joåÂÅ{Kô-¬{ßeëMCœ} ×¦’!m5Í+ãD4þ&Z ›4çåËÜYË«í—ò¶áõ׬’‹VªK>&Õ­ÄäÇ\#F„¼tV®ÓîïÿþJ6|¿ÆÌÙó½ Þ°]¯–Ý{LºqÌMž›Ü‰,d-àèÝQj»ÎƒòÔœi±Ø�ˆògÏí¬˜¼ÜÆs¥º$ÖyÁFžåó…fœvï½6|·ÆLØóZ½ —éö3voùÈñr±ô�"B:úÆÄDxFÒ› ¼Y³¬ËwÄ R$èÜ%œvï}6<¹Æ´ÔÑ*½‰È؈"Ä;ý-CbaX¾Ì úÜ®?oÏGX¥|ý9v7ò–ƒ5˺ôã‰Åaù²%LiŸ{—memžVc:ꈽ‰+²í H�堆ȺcÄÞÏl¿I$±ƒHpsÄÛ_³¬K_µ}‹h°õÎÑi÷pφ;Ÿ5jÏìMÜ ´uMÎýê³>A\¤¯ÞX—¾`Ö¹Óîýc]{fobƒÒÖuê��÷«‡è'}õƺ$%´{ßXמٛØC›s'„BˆйB!AçN!„††uî„BÖBl�8SqNÚйBˆ·ˆGù "D"?/? †å !Ä_2€,ð¹¹³!œ¹BˆÏÕ­h ¨›ÒŠqëý—š½OèÜ !Ä[ä'õ$E 2d(ãŒg”w‹'ï:wBñc‹² ?ˆ±|¹|Xû¼Èz0çN!^#"lñIž�y’O�2™ïpæN!#"lñ fí'@Dˆe!¢µÏ‹¬ gî„â-"BŽ#‘b£²ë[œ��éÚçFÖ„3wBñ—dåS•cÏðÀ‰ˆÇÞ –„;!„x‹üpõÒײ�äY|M×þžaXžB¢Z×N×þ¾¡s'„OrÄã°öY’5`XžB<EŠµÏ€¸ gî„BH`pæN! RäHðŒ³Úmþ»Ê¿gèÜ !Ä("¶!o“GñŒ¨Úk^ä8àò#Þ,S„XžL—‰Ì‡ayB1KjiC™ÇÎ_&‰±±R&2ÎÜ !Ä(òÉÒ¥hnÓuôúËtçíNCçN! D¥C12ø¼ö‘5¡s'„HQ �Pà‰[ؼwèÜ !Ä(vuHp´ww ê\‡‚:B1‹A]j5 NAãpæN!F±!¨k2î–ÊDAãйBˆçˆ1€(˜k'%tî„â9öríĘs'„£ˆXÄkŸƒö2EÂì&9d!tî„b[;ÔÙ„‚:Ç¡s'„£È§RR÷%ˆ¹î—�䉩�·¡s'„ |I‘¯}ZØ~ £CçN!Æùc[{Ì›åY1ˆ°¡s'„£ˆøý}¼àáËóÚg¢ƒ/g|ÂþŸþ ê܆Ká!Ä(_ÿîßøg�v_vkŸ‰>þ¿øð{øÇkŸ†ÎBŒò'ÿüË¿Ç_ÂËãK‚þC ¥ †å !Ä0_ŽøˆüK â¾Ä8àS(•p¡sˆDl×>BÞ7_Nøãv(‘/ÊO_,îbOæÁ°|ðˆ€¿(޼=#!ë R@¿¿†§´õ“a[Dˆ©â¹Ð¹ŽˆpÀ+~ ñ‘îUP›Ï~1j¶lýKykšÁm© ËØàGüÿŸqÜz‚¨v¨3IËÖlØ:w¨s:÷°)ð±4AùŒ¼ÿ2!ÁRàƒ²õ'|°ygwâ& Ël™¸<ƒwz&$Phë¤ gî„b‘Š ÁuÊ[Ðå“pæN!f QzFAãйBˆQB\2&OÔð¸ Ãò„BH`йB!AçN!F¡ ŽØ‡9wB1KˆÒ3 ê‡ÎBŒBA±Ãò„BH`йB!AçN!F¡ ŽØ‡9wB1KˆÒ3 ê‡ÎBŒBA±Ãò„BH`йB!AçN!F¡ ŽØ‡ÎB ê!Ä(ò¸ö(ÓÊC‚3wB!$0èÜ !„À s'„£PPGìCçN!„u„b êˆ}8s'„BƒÎB :wB1 uÄ>tî„BH`PPG!F¡ ŽØ‡3wB!$0èÜ !„À s'„£PPGìÜ{ðˆ-¾ÁEŽGY¬}.ÄGD‚ DøN ¶�€³ (s¢­‹ �À³<­}.KµÃO¦Ë$!‘Jðæ›úi¾ö¹ð±BýK(ûFÚ<Ÿt„oêé ’µË£íºìë§Áô~Èê§ÁØ:â¦õ­}.ÚÊ™n}¥­3,4"®þc+’µÏ‡xÈ‘z– _ûdô RlZå µj'[Ï›Ö'i}ØÚi}tîa³­M¦#öè¸A ”ÜqÛâ@œF€¶~Ñú2¯}FÊ¡­U0ØúèܦÎ+þ ÿ�ˆÍ’ã‘wHÕb>©·kŸÐrD†ÒI<â\–IDKŽ7âŠD¬jæü� ¶nEPW9¾G�@Bë«a(uÆê‰Î=dªfó‡øÕ˜wKÔ³Œ'ù¬¶,IM;B ”VpÆ£r!ØEeë?LJbë"VRºGù€c§”>S–á,ñ��ˆM üèÜC¦êľÇÿÃ3€0ŒƒØ£š›=õ~dž·!©<ËB>Ùq„òh|:ë¶.ͯ3¨Jð¨2E¾§…DRGª2«):÷`i:1�P#߈y2ræt–G@žTÛóîµîJŸ[ÿ÷Ü*D¤j%,[/Ïÿ$Ïha@­Of[{¸t:1ùJ°ŽX¤=<¬¡çy5ÇU+ŒÃp„—¶Þ.©§ÔAù#`ÞZ£¬““Ú‡ j}FjŠÎ=\ºX sbÚáU!å œ†²�U&;ƒ^ズlݸ ®a©j,öy‘_=`é— µ>:÷p)L“ë«F‰±Šj)U¾¸v· ÚÉ6vQv°~XÚAù¦t‘×KÇÊs¿°ø]SÕ¹«²ÈeéŒX{ ˆX-¸¸tî~±É¥Ë¨ÚÏ-H»lJU* b“ɳ‚:‘([o¶2µ`ëÆu“³ŽÐ倥çúƒEç*Us© ^U7¶ö©OPrºÖ+ª{õ8ë·ÊQâÿ ÷*!Ϫּu„"¬)ëé:šZ?7‘¶¡s•JçÜîšý7bž�vóÜ[§qݽʓʺû[¦*€Ý¾YŒï³ÜêÌÛνì˼M6ˆH•ªU&iphIç*WÍV$ª�vÛz>Ëí `7t„†u×óA 1º²6 RŒå*šÚ*• {ôá¿q›´"µ8¶Þó¾ù`õ—§V!¢jæÞyÙw[ïé¿äYÅX<¹_ TƆ–tîaÒÛ‰€$öèúîíKVÍ{–Ôõ¥O,¬l0,¨SëÁ/^õ;±Ø?\®â©Ú‡,tîaÒRà{×L¬Q¯¶¸ì^ýÎ{Þ°øj}lÀëK¯Þð½ÿ²ÜúèÜäìz¯g ~±GÕFί‡à/ÊT/² iÀâ·­÷°ëRú¸Ã|=\¾l}tîd· Þ×y±GÕ½^´!ŸS;õöM׃^ËD ê®—ŒµË™’ÔÔõºAø=´¬Z×uMŠ±Ð¹‡‰Ú,áêõÊ\|4b“¡ØÏ3Â~9�o‰3 §k—Òßšºª§z¯×ûT©Rk1:÷�ýK.Æ¢Ä C±x®ö»ôV’:CvaPP7”>ilÝÐŨ ®ºí5þ-‡‡Ë†b,tî!2”± ®ª$ápc>èón Ã#ZCÒÙ¦¤ÞÙº`{c¹;\ÖÞúèÜCd¸cöyäKì18„ÏŽp°{õxuÿš´^õ¯LÃé“FRç_©†R¥Æb,tî!2$±àm'Flr#ö#=Ý‚vpqZ¯*“AAÝð|f÷—7(¨«÷ ‡åýk}ƒ©ÒÖ« Ë“» g¬¼^LB¬qË ú:#¬Î7¬ˆ–r„7Ê䟭ß°H_ãFªõ h/Œ´>:÷ัàþλˆUz×ƒ×øywÁaµrS&C ÇL ênÛzíÔ”AAÝ­È£¯›óÜJ•ÂÌòR:÷ð¸=CÇ‹Iˆ-nÅ~|5 «•ÛeõËiÜ’žù{“çÁìt«¬¾•éöpÙÈj :÷ð¨ò¥·»f¿:1b‘›jåÖ랉š†6FàmD«ÊN9BmýNvÚWÕÐ-mDÓ*µ–ŠÎ=<nÏPüÍ.[Œ‹ýøÖÁ–N£|ß`DKd†Äg·ØFg¹"¹Á2ÝZzÔƒ‰èÎÐÒH܈Î=<ngwŒoKI¼çvvÚøö(&¨£ Ã^“³Üó {\Â=[79Ë-Œ–i8aTI`ˆ[KKK ì?Bç·ô³€¯ÙEbÛZùæ=Ÿ†‡÷¢F#ZÆv¨»gëõòÆu·Ø…‡w7¸µ­X‰u{`ÜŸ¡xš]$ö¸7ôQ/_E#ŠhÝÑÊ~Îrï¥|”ÔÝ Ê0¢—§sû3êåÉmnkå›÷< Ë«Ö~kþì_D뮭׳\Ÿám­<à£s¿­•ŒèåéÜCãþ ÅK -±E=s½?wòI/×e˜ŒhÔÝ[L6˜ÔÝÕÊ_•Þ î¤`D¤Jç÷g(>Ž|‰=î‹|ÔËßF˜Œh™ÔÝ[˜´u3‚º{ZùV‰=ÒËß Ë›ÐËÓ¹‡Æý|©Sbj>x£{õíÖÁwWî—‹hÔ±ucayC‚º{Zùv‰=éÁêhÄíš*[ˆÆ¡%{hÜ[Í ÔÌ»=§‰ îkå›÷}ÑmŒQ¢øѺ§•oÊä­ß—Óù·¿üí}å+´Ãè܃bä ÅG -±Å—ah7lcÜY¹ß)“'V1bå>ÐØº_ð{CK«Â—éžEi©Ò¹‡Å¨Š—Zb‹qÝ«ûŽ+“Y®A]e½7FÞÖ^S†v¨wž~­÷¹/§k½¯o)&{XŒÈ—ð/�Iì1&“ëg÷zoîdn–kBP7.an–k@P7bå~õÛ­+à<ã]Ú“ tîaq³„:wÒËHñoºQs's{ŸÛ¡nÌ’1CÃ0#‚ºê,ïµ>¿–bŽZê©Ò¹‡ÅýÍ®?MHÃ8ÕF#ò£{ qÐ;ÖÖ}šåŽÙ¥£]jjªŽFX†Ñ¹‡Å¸|©+E‰Æ,E*ñF·1:á×"ѱν²uJ5.€í×RÌq+5šOpæNz—/m>áKΔØbìðЧYîÈhŒ­Ð/¨»wÑ«2i¯)#‚º±ý—Oš1û–h¶(:÷€?C©šÁ:bñÝ«oÎ}L4ÂÔ,W¿ nÌ>‚� Þ ×ÄuãÓŠþl¡=fÏÐͱ0:÷?Cñmb‹qºòËϻ͸¥Hírkvîuã6FÁè’O/“vAÝ„h„‡CËÑeÒ&R¥s‰ñ3¿²‹Ä#7Fé|ƃ\îÈL®ÁY®~Æ» 6€Oýט»”h^ŠIçãó¥>…µˆ=FmŒ¢ðG±<¥•™å+Ó¸³õeá)ÑO–bŽºÇ¢B÷†Ctî!1>_Z Rôí‡D`ìÆ(ðG·1zc”#³\;ÔŽFÀøÌ€ nJÿå˶ºUKcѺá{HLÉ—úvób±³W?tc7Fi—I·UG-Æ3å ÍÌrÏx6R¦QõdnÃ!#eÐ< £s†IùRß6!!v˜¶ ’yϱ£´Ë¤yÀ"Ï#}$£Fn%‹1ñILI+ú"©/4o8DçSò¥€/]3±ÉçîúÜiJ�Û—\î¤h„77Šš"ô¥ÿšfQZ·Õ¥s‡ ùR�¾tÍÄ“–"5Ÿs]·1%“ëKDkZ4‹Yî„mZKüËO‹Fh©Ò¹‡ÆøP™O¬2e)Rûsnw°ÓæNF¶ÕÕ.¨¿1J‰[×.¨¿M+Ú¥w|)æ¤h„ÞmuéÜÃÁNŒxÍ”¥Hðc–;9aFR§[P7-€]¡·Lºuã·iE§ô.·¾©Ñ­"U:÷p˜êÜ«üŽÛó.bé.ÃýâÔh„‘5�ºu6F)10ËÕ.¨›ðbá©Ñ­É:÷@˜1Cñgb‡)£ õY—‡‡£×ÂI¦lŒ¢ðÁÖ§-Ýßphj4B«Eѹ‡ÂäŠô#cJì1MWÞ|Ö}—1eÞìþí§mŒO6šðARW¶¾)KK1éÜCaÎ ¥ü¬ÛZgb©7ñ',?Åe¸²fAÝ´QJ´'ô êê„AXq£©ÑT­K1éÜCaŽÄÆ•¢Ä 3Ä?>è6¦-E‚¡Y®^AÝt—aÂÖõ ê¦g§}XŠY¶¡ ½²N‘*{(LÏ—jÞ‰xÎüîÕåâœA¯öˆ–fAÝôhDõi¶®YPWE#¦ÓñÄâ¬h„Æh{(Lž¡@ó~HÄs¦‹œ×mÔÁÍivázDk‰­»:Ë®÷hf¹Ž¶¾YÃeÉ:÷P˜–w¹#ö˜.þi>ïj Z2wr7¢5]$èü,w†Þ£)•«–©{†–h©Ò¹Á¼Š+E‰-ædr]ï^ÕWNsÚ#Z:uµ­Oª)½{ŸÚw¨›“Vôc í©ebXžt˜¾òµýyW»fb“ÉâŸÖç]Î `›ˆhéÔÍ]¹¯{¦QP7c—Ž·—bÎÑFh©Ò¹‡ jMœ¡¸Ÿ]$–˜vÃànïð=˹ëhiÔÍÛzVû,W« nú>‚íÏ»Ùöæ¬Ü4Þ —Î= æÍPükÌÿ¸®Û˜Û²]ŽhÍ `»½*|ÎÊ}ÀéôÎØG°¼…®ÍyèÜÃ`ŽÄ¨;1g5´ÄSo"Š‹Ï»Ø½VÝãô¸Ë3Âey7m}^P^ã,×�s£Ú’ tîa0Ok꾆–ØbêMDÜÝçpn4Bûªp­;Ô- Ëk³u­‚ºyÙéf–ë°sŸ‘¼Ð4´¤s€ù3êå‰bnìÇåYû Ýzym‚º™+÷a`U¸Îêæ¦\N6ÌX¹¯Ð”,¥s9‡¢óç]Ä&ó´òÍw\Î[¹hWhÔÍ[¹ß.•&[×'¨›­•o®ƒ»CËùeZ¬—§sy«yKÜwk,ÈN»|µÙóA‡#Z*Â2ËÖ]åÎÏN×ý—ƒJ‚yZy i±tîdAPËÀžÓÄCæg§]ÖËÏÍNîF´æÏݵõ¹Zùö•plÈ2s_ùò:hRй‡À\ý,àú:eb‡ùÙig÷—ŸŸn}K—øLŸ nÉ@^«’@£ nAÿåìþòK†ËšZ»÷ˆhÊÙ‘/±Êüìtó=׆‡K²ÓеÖX¡IP·(;­;Æ¢OP·¤ÿruäyûÊWhQйûÏ’Œ•³ó.b•%óAWs¹K²Óš•ÚuK¤³š•w¨›Ÿn®…›­oîN…å—) èÜýgIÆ puÞEl²$;­ñVZY’vUI0ít‰ƒJ‚%Ùi�®* –E#´HêèÜýgI ®ù¦[±ÈÂìt“Ëu«ƒ]gÍy=,Q×4ßt«L‹¢0p?¥šÙ+ëQйûϲ*÷—'Kc?Úo'º/ôjt„ÚuË¢Z•Úu Äœ«áRë[:\Ö’u§s÷Ÿe+Wç]Ä Ý ,Œþ,êåêÚ¡n©s¯”:l]— .iŸÙtôß©^KS Z¦\tîž³hû�/&!¶XûqqŸ°¥ÙéæF+J¥GPW»äùŽP› nyë;ê*“6–‰9:w3»fb“¥±EM çƒp1Ù°ØÖÝ‹±hHŸ¸¨$Ð5`Y´ZƒÎÝw–]4b屸¸íR陋á^僲õål­1M,.kh}tî¾³4 ×|Ûƒ'6Ñûq¦ -ÜØ©B[¸W“ nù|P£­kÔ-Ûì+âˆs×1\Öc¡s÷Ò8–<%uï ±ç½:,:g¹zuËçƒ:c,zuË6{ààm~t¶¾e¢s÷¡¥QR÷®Ñ1ÔÐiEÇ|° ÷.ÞôE‡ NKúDcŒE“ NOësk#.©R 1:w¿Ñ3FäF6ï™<àiñÌÒ­ÔŽ†ù «rcȲ|í4Z1'jJÄZÒ'n-õ XÄSéÜýFeÜÏ Ê†äŠq‹È“|”ŸåÓÂÃè\A½-Ý«<9µKžù [’:½“W$u:tPb,tî~£'¨UÏÜ— ÉûÄ¥ÔŽH”®|¹]hr„Zuå€eyî^•i©­kÔ•Wvy€¿º* -5ìF��ÅÒ%Êtî#"mÎÝ!ã žâÎŒP×|P_¸w± N“þ¿<h)•A¦‹<;”X¬ôº†a Ë¿K4 @q'ï©+Y¥-Ù AP§ÓÖKÚºAž�6àRë[¼ÃÂE™â¹É:wŸY¾Åfƒ;ó.â'êv¢ä=—ïN×-“ v¡+€ 8³]«®�6�mÉ èJŸ,tÒ¹ûŒ¾NÌ¥‘/ñGR;u²JÃ|°Î{®îµ%àš£¬oëúØÎ Ã4ê=šx*gîï=K.JÜR;ï¨óžk;BóAMëHD¾X|¦ÓÖ«M«Õ”HÅaáyè `7„µû/‡Z»·h¸gp gŒƒø‹ *u°›EVˆ,OX´ÔPlÔ.Ø,:Ê  Ïc£±Lnµ¾Óâ‹%‹’ tîþRµôÜUÙã þ²P�¤ ½.£²®Ev±XPW©k´”JO²a© Nïäµ’`嬻¾Œ{û8³†atîþ¢·¹bÄ_ôÌQïy¦É.jG¸î ·üu]Ãøz ¿ª­›™œ¬Ûú4fÜ¥«˜èÜ=¥– évîkwcÄ[œÈºë `7GZÑ*D¬UNhŠG,Dóäĉå¼ú[_YS³ê‰ÎÝW´7£Ú8èÜÉ\tEšÐ·Æ½¢’š.˜.ÔéiA#\&¨309q¡õ)Ù£¦Œ;ФºfÔ»¯è• •¬oÄoªµîë…Fu°õl¬»LP§nõªÕÖËR-©§e‚:ýsÜEŽPõ€Ecë[c¡s÷•Ò8t6£ÕƒøŽ|^7ú#6zsžŠÒÊ8Â%‚:i–¢u´¶¾PPgnÀ²^ÖÝÀ€¥Ö|Ì(»—Ô˜^ƒ¯† +JRˆç,Ÿ.¡t…6‘V»LñJñsÜ•m½°h­'yžïµ`bÀR]£dú:w?1Ò‰Ébù…¼sJ­´’‰xÖÚò³m½úU35µJìÑÌ€ †atî~b¦5sæÝÉ<VœŠgip„óuÆ\ÆâÀü"A™9îºñC–ùñ:w™™N Ì“…ÈBIÇ6+¬¡.[­î <ÐÄ#æÚÅ|A™ <ÐØúÜ;ÍÏÔ‰ØÔ€eÕÀ|yõXšÀüÄa»”ÍÈ@'VÏQ2neCf¢¡íÖœË�P g:‚:ó¶>s¶@PW]E5U¢b1wÈ2‘PÊW̆ѹ{‡HU3Z´[õ ÕQ·k—“ø‰|V[ÙØnAU×gÀ.jG˜ÚÝZ×°­—eŠfÏÝçRþÞÉÀ·†Ùž»›l}gUSWÏÓ¹ûGÕl¼<ª®™y2—JÖdQ¹!*u4â2€Gõ¯Ý!Ke…‹Ž2@= ³êÜ뤢™þ«J ¥6Euuë{Ö¸yR›G<à/ˉi:wϱjFO†šQÕ‘Xl‘`XÃn•Ë0 ÏÕ"¿9s÷y‚:‘Ô¶®odz. ‚سue«(¤™hÄ:±Çªv •Ižäãô6@çî;õ¯¡N M`+gÞÌ¡5{²4w¯gNgc.£²D³œÆ<Aa—àIÙúv†­ÏÔ‰­º±±2ÕAìµÖ×Q#ý²Çй{…H«í5Í5#Y,êÆ•ÓØY æjÞn$|]"jîžMwsuµ­?J4 5 ‹§ÛúA¨ú”ÂdMÕƒ[ýW53Y¦й{„ˆêyû’]ï"+I×»“9Èó|§1±©gNææ¸@cubZ"Â^=5ê2äCmë6rÔ;5{0–h@«õ¥‹n×3‘UÛ»5o§s÷‹ i=Ë·WTÝØž¡y2‹f€hX»!âzÈkxæ$OÊi$0ï4öU,"[[åO†aÀCn0<=M[øl¸L“¡swŽ¡Ñ¦ØU¦a>ü#ŸU7áÐoò6ÆÄĦַ,êÎ.7¹'»ˆZnpâÌIä“»þjž›‰Ý”¯ ênØzuóP£1: eëñ ­÷ ç¦ êD¦Ü`1Ý N•îµZßÞdDB$8Ì„-¹aî8èܽ@Db_mgÏ&CZ5j¯§Þ%ŽLGkíÆ^ ΋/j%¸7ÈŸÔÓLL˜éʇñg×±õOc¿µˆY¶.òãøŸy“R4§!hÝsÝú¦bG"­]û³Ö7•ç.bÎÊ\BDb‹×zÅ«ÓPcßr,šàEäv7ï ó˜ZOfm]>Ôšè\tHE,v8¨DÕ Í¢2ê9á¯BóNŽ"ymë>É—e*ðY…±ØºÈÄK­½x2’¯JõPGwÆZ_uƒáBò÷ë髞×rXiRä6"B‚Ik;™í¸v�'ñ5/Úb+N8âˆw¦&È'Íö Ûºü,ª-RR¤âŒgœP,‰1T{·À ­D³Ê2=‰jAj„rqÄ 'œ–œ¶¾oÙú§å¶.RUSz´9Ãím} ÷~_»õu¸kë©DõÀ/ˆš¿ù°ûÀÿ/½o½ ™ẏ™ßŒ°ï}ãÿní+ÅGo°ëü-¡ìió\½·ÃËèãæ³Ï(Ã[ÏËoSÚ$pÀkï›ùÜþ yûjLúf2`£‡)6ê­ÿçIµ}Àa Æ7³ÛÐÌ2I`Ûû²ÆÖg¿L­ö³x'…„�>–ciáßà¯á_ãÿ¬2!ÀÐÚÌ_á[ü§ÙÇü?ÆïÏþöoãgøÉÕ«ŠeýÚûüþþ<þa5çµ}‹tmý¯àGÛú7øÅìsúKøþfÏëã…¡¿ßí}ý;|‹ïgŸ×7ønÑ·Š]½ú{½Güè¹~¾Øú¯ñ/>{ýKßàg=Ÿýßøøv_ùeêo}¿ÂxIäpëû9þl•2•üþ.þ/¾¹Ž”¶~–ÿ5¾^øƒdMéü€ïð_s~· �ßã{üUü?î˜ý[í ‘Ûü:ò?špÔ%mè×ø#ü?ÅOðüæ¬#|Güü´õÊwø¿\е.-ð ü?ÁOF\Çþ_º¶õïðƒƒ¶þǃŸí¿*íA˯ð¾Ã/N—¸Á_ãð­*SÓú~5éª<âw:Wä;|‡_â׫•©â7ñ?‡ßì8wYàï‰þöj9@Äø@àÚ¶"A„1ܲ�€xÁ¿•#ä=²ÀßZÃÖEŒQ™±œ–G¤�Î8cþÍFM•* ÂÄ{>„ië¢üç,S"(SÓú&nT,ΈQ¶>GTG"Âá¶­wÂòê¥ …ý„Ûˆ±ìˆl†ÂòêÝ=δuBüãÚÖ[ï¥8ô¯s§±â+Ó¬—¶Nˆ¯Ü±Þž¥p² Éâ#SgáòL['ÄGîÛ:w¨#„BƒÎB Œ¯–‚¸Ø"͹¼Èñìš2ù=!’[W_¤ë+¬Åféž_îáo™Â·uëÆ~™èÜGdHä'@DxŸf4¡€nù*"\ßñÅ:óÍñ|ó±ÈLíÔ-ò‘ùû¬º}ˆH‘#Á3Î6îÙ=±4›IËŸ¼(SO)=µõIµãUÝŒ´¢¬¹ÞRIȹ›0ò¡÷¸óW¢c`¼V›>"Ú¬ðÆ·{6è4q––®o„/HÕ#_²%¦ñ³Ý`{÷3û{Û”BbpûÙßÊ G}.io¿‰-^[-gôֶƯdŽT^ÆX€2ÑÖçÔŽí­>§QVÔ-“žR•¶Îœ»3ˆüb^ù‚Å7Ê âÖneî«mâ,m! yÄGõxÀ'8z;[a+ïoÏú€½ßM2´g[ Ž¿\!C¡î}–(›…2ÑÖ[L©?Ú€ VÔ-“ÆR1,ï"B$»AØ a²èÆ_îœåjÈ£î[Aj#»’/Ïÿ,Žb#G|rù ê·EŒö­%[i !êìÖ•¶Öu»¨u9ª6Z ¶¡RÙ(m½ÃUí¬Y7eEWeÒX*:w«ˆ}ÎäQØTã7qP˜ôÞWyt®uïQíþNòÙÂYZCå«¿) "Ê,¥ˆ ©19‘ ÂYžE,Ïj«Ñ“,Ê ~%\j¾U½."$ÝREŠhô O7í{D—¿Ü:ŸsíbOHÇ &\—¼}C‘!CgÄ8õ¿Ëslïv— *ÿ12kÜ㺟z¯´Üèõf©´•‰¶>ŽËÚ±Q7æmE›®ûÖY*:w»œûFb²�”r‘Ö£ãÏ€Hâ 2œå“ˆ±A1SD5>ÀÓœc„sÝQœ­œ¥%jqÝÿ™øŒ{ñAžD‚8a+Nò ö8áˆLœ±Å×"FŠ->âˆ6åFÚíoáˆ[ñÀ™P[9‹;<áŒDäòƒÈbƒÏò 92<u…7"BK'/rœ:÷]Ác=º?é •ŠÇÖÜ<ä‘ –Ï=â M#BÙ9g�Ši;¬ÛAÄØ–;éß,•¾2ÑÖ'PÕŽ¥º1Ì+ê–Is©$(¨sàQÝÝÛRF…¨”— G†²R$£þ½+´ê+ÒZœ1J$Õùþ…ÈÆÌYZ½Î9$8à¥.K ‰L[Dˆ*‰"HDx©ä.ÍõCK¢¦>{ù-©®OZçU½²Á›„âÖQ²žz«…4Õ5n½»íÈŠnÖ*$zuHq¸z$ˆªZk;D—²Ÿ!ÐûUkv LÍUìŠûJe§L´õ«ß¾¨õêFKý޶¢«ÒRªÒÖ9sw…³ÈÕl°'�9�ã©!—RÿŽÎ|É£hÿ¹|-¥‘³´M9Vn$# ‘!B¡‚“g$HêÀØqp޼é~«¼Vûbƒ¸ žËgõïY<!Ã@Ú»\¦üÖ-……=$ˆD D^Ö¨ˆËB\×fvq?ötÂýÙ 0X&”òD<¨ya•|é+•2ÑÖ;\ÖΪu£ƒñV”]•Ac©èÜ]á lqÄä8�ø,€Êñ–¢ª=”‡yBª:½Ëå¦Îr Z® µæç2ä=b½ðå·®IZ¿Ñ\Ë1ÆI„GMP9H‘"«‡[U¢NùRÔä ÝCDÈñŒD�im=¥²V&Úz‹žÚY³n40ÖŠ®ÅtºK%Á°¼DÕªÒözRDM0XB1^%&ë"!ž³òµoí«™³´x•¯–Mè\ȪTˆ!…¬Â…­ûeXþâ[=Ÿh'ª?{@ŽmßÚa$­µ®áÑúýaù;×(Ãy™.À•Fˆ;Ÿi%«oÄ÷¾B¿4Ô¯õ”Ê^™hë·jgݺÑVÇw­¨[&¥R¶ :w‡HËLýoŒ¶÷¶.¹8F‚t^ƒA6î{:ÎÒÒõ¼éÜ%ðRçËrÄ8TeOνyåò[νtäêÙ¶î27x»Ì¹ÕçѸ¡r¤Øâ/H‘â¥m¯íì|ÿq0c›Îª¡HwC“ÃÚ5¹°ô”jí2ÑÖÝ­¿ÊDçÎÇ;{ FŽ7Hì—Š{Hìj)R„rlêw„=vH‘c[;ê{¤Øb‰=âî·#‡Ä©:v^b×Wéu¨Cž>£o8 Âòb´¿¨÷%:÷Þ£&·ÕÇGˆe åbݘ,;|ô>]è†#$W3ü´¶ìûÖýãJ ›7²Ö�¤7<ª^9ÜžoA„sß¹e™B{„X7&ËDµ<!½È¢+j‘ŵHNY´4íWߺu\‘!’"þ†|•ke›ß¹÷‰Å*+|n­+f™'ĺ1^&î-OÈDŒ 2¡g_ŒD¤ˆoîV÷€üîq¶ë¬Iоá­„X¦P±nÌ—‰Îq<ã#4µåžPܾ¤<á(nÞþCä.Þæ’â Ë2yÖåØÕñF¬f•Ï·ã#ï¸Ny‡pæNˆ³p^N™;!„tî„BH`”9÷\0üGÈ{€¶NHèD@åÜÇßý—â3´uBÞ_¹zgBˆ& õÚ:!ï†ÿ ØcÆzÅù@���%tEXtdate:create�2024-02-03T19:22:25+00:00[_íI���%tEXtdate:modify�2024-02-03T19:22:25+00:00*Uõ���(tEXtdate:timestamp�2024-02-03T19:22:25+00:00}t*���tEXtpdf:SpotColor-0�MSY7§þ<j���tEXtps:HiResBoundingBox�483x122+0+0�¡Z ���tEXtps:Level�PS-Adobe-2.0 EPSF-2.0Aù3����IEND®B`‚������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/samplingfreq.txt�������������������������������������������������0000644�0001750�0001750�00000000046�14557511161�016270� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������../gnuastro-figures//samplingfreq.eps ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/sphereandplane.eps�����������������������������������������������0000644�0001750�0001750�00000300712�14557511157�016551� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%!PS-Adobe-2.0 EPSF-2.0 %%BoundingBox: 0 3 220 205 %%HiResBoundingBox: 0.000000 3.500000 220.000000 205.000000 %%Creator: dvips(k) 2023.1 (TeX Live 2023) Copyright 2023 Radical Eye Software %%Title: all-figure3.dvi %%CreationDate: Sat Feb 3 19:22:20 2024 %%PageOrder: Ascend %%DocumentFonts: CMMI7 CMSY7 CMSY5 %%EndComments % EPSF created by ps2eps 1.70 %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -o ./tikz/all-figure3.ps ./tikz/all-figure3.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2024.02.03:2022 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: l3backend-dvips.pro 0 0 %% %% This is file `l3backend-dvips.pro', %% generated with the docstrip utility. %% %% The original source files were: %% %% l3backend-header.dtx (with options: `header,dvips') %% %% Copyright (C) 2019-2024 The LaTeX Project %% %% It may be distributed and/or modified under the conditions of %% the LaTeX Project Public License (LPPL), either version 1.3c of %% this license or (at your option) any later version. The latest %% version of this license is in the file: %% %% https://www.latex-project.org/lppl.txt %% %% This file is part of the "l3backend bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% %% File: l3backend-header.dtx /color.sc { } def TeXDict begin /TeXcolorseparation { setcolor } def end true setglobal /pdf.globaldict 4 dict def false setglobal /pdf.cvs { 65534 string cvs } def /pdf.dvi.pt { 72.27 mul Resolution div } def /pdf.pt.dvi { 72.27 div Resolution mul } def /pdf.rect.ht { dup 1 get neg exch 3 get add } def /pdf.linkmargin { 1 pdf.pt.dvi } def /pdf.linkdp.pad { 0 } def /pdf.linkht.pad { 0 } def /pdf.rect { /Rect [ pdf.llx pdf.lly pdf.urx pdf.ury ] } def /pdf.save.ll { currentpoint /pdf.lly exch def /pdf.llx exch def } def /pdf.save.ur { currentpoint /pdf.ury exch def /pdf.urx exch def } def /pdf.save.linkll { currentpoint pdf.linkmargin add pdf.linkdp.pad add /pdf.lly exch def pdf.linkmargin sub /pdf.llx exch def } def /pdf.save.linkur { currentpoint pdf.linkmargin sub pdf.linkht.pad sub /pdf.ury exch def pdf.linkmargin add /pdf.urx exch def } def /pdf.dest.anchor { currentpoint exch pdf.dvi.pt 72 add /pdf.dest.x exch def pdf.dvi.pt vsize 72 sub exch sub /pdf.dest.y exch def } def /pdf.dest.point { pdf.dest.x pdf.dest.y } def /pdf.dest2device { /pdf.dest.y exch def /pdf.dest.x exch def matrix currentmatrix matrix defaultmatrix matrix invertmatrix matrix concatmatrix cvx exec /pdf.dev.y exch def /pdf.dev.x exch def /pdf.tmpd exch def /pdf.tmpc exch def /pdf.tmpb exch def /pdf.tmpa exch def pdf.dest.x pdf.tmpa mul pdf.dest.y pdf.tmpc mul add pdf.dev.x add pdf.dest.x pdf.tmpb mul pdf.dest.y pdf.tmpd mul add pdf.dev.y add } def /pdf.bordertracking false def /pdf.bordertracking.begin { SDict /pdf.bordertracking true put SDict /pdf.leftboundary undef SDict /pdf.rightboundary undef /a where { /a { currentpoint pop SDict /pdf.rightboundary known dup { SDict /pdf.rightboundary get 2 index lt { not } if } if { pop } { SDict exch /pdf.rightboundary exch put } ifelse moveto currentpoint pop SDict /pdf.leftboundary known dup { SDict /pdf.leftboundary get 2 index gt { not } if } if { pop } { SDict exch /pdf.leftboundary exch put } ifelse } put } if } def /pdf.bordertracking.end { /a where { /a { moveto } put } if /x where { /x { 0 exch rmoveto } put } if SDict /pdf.leftboundary known { pdf.outerbox 0 pdf.leftboundary put } if SDict /pdf.rightboundary known { pdf.outerbox 2 pdf.rightboundary put } if SDict /pdf.bordertracking false put } def /pdf.bordertracking.endpage { pdf.bordertracking { pdf.bordertracking.end true setglobal pdf.globaldict /pdf.brokenlink.rect [ pdf.outerbox aload pop ] put pdf.globaldict /pdf.brokenlink.skip pdf.baselineskip put pdf.globaldict /pdf.brokenlink.dict pdf.link.dict pdf.cvs put false setglobal mark pdf.link.dict cvx exec /Rect [ pdf.llx pdf.lly pdf.outerbox 2 get pdf.linkmargin add currentpoint exch pop pdf.outerbox pdf.rect.ht sub pdf.linkmargin sub ] /ANN pdf.pdfmark } if } def /pdf.bordertracking.continue { /pdf.link.dict pdf.globaldict /pdf.brokenlink.dict get def /pdf.outerbox pdf.globaldict /pdf.brokenlink.rect get def /pdf.baselineskip pdf.globaldict /pdf.brokenlink.skip get def pdf.globaldict dup dup /pdf.brokenlink.dict undef /pdf.brokenlink.skip undef /pdf.brokenlink.rect undef currentpoint /pdf.originy exch def /pdf.originx exch def /a where { /a { moveto SDict begin currentpoint pdf.originy ne exch pdf.originx ne or { pdf.save.linkll /pdf.lly pdf.lly pdf.outerbox 1 get sub def pdf.bordertracking.begin } if end } put } if /x where { /x { 0 exch rmoveto SDict begin currentpoint pdf.originy ne exch pdf.originx ne or { pdf.save.linkll /pdf.lly pdf.lly pdf.outerbox 1 get sub def pdf.bordertracking.begin } if end } put } if } def /pdf.breaklink { pop counttomark 2 mod 0 eq { counttomark /pdf.count exch def { pdf.count 0 eq { exit } if counttomark 2 roll 1 index /Rect eq { dup 4 array copy dup dup 1 get pdf.outerbox pdf.rect.ht pdf.linkmargin 2 mul add sub 3 exch put dup pdf.outerbox 2 get pdf.linkmargin add 2 exch put dup dup 3 get pdf.outerbox pdf.rect.ht pdf.linkmargin 2 mul add add 1 exch put /pdf.currentrect exch def pdf.breaklink.write { pdf.currentrect dup pdf.outerbox 0 get pdf.linkmargin sub 0 exch put dup pdf.outerbox 2 get pdf.linkmargin add 2 exch put dup dup 1 get pdf.baselineskip add 1 exch put dup dup 3 get pdf.baselineskip add 3 exch put /pdf.currentrect exch def pdf.breaklink.write } 1 index 3 get pdf.linkmargin 2 mul add pdf.outerbox pdf.rect.ht add 2 index 1 get sub pdf.baselineskip div round cvi 1 sub exch repeat pdf.currentrect dup pdf.outerbox 0 get pdf.linkmargin sub 0 exch put dup dup 1 get pdf.baselineskip add 1 exch put dup dup 3 get pdf.baselineskip add 3 exch put dup 2 index 2 get 2 exch put /pdf.currentrect exch def pdf.breaklink.write SDict /pdf.pdfmark.good false put exit } { pdf.count 2 sub /pdf.count exch def } ifelse } loop } if /ANN } def /pdf.breaklink.write { counttomark 1 sub index /_objdef eq { counttomark -2 roll dup wcheck { readonly counttomark 2 roll } { pop pop } ifelse } if counttomark 1 add copy pop pdf.currentrect /ANN pdfmark } def /pdf.pdfmark { SDict /pdf.pdfmark.good true put dup /ANN eq { pdf.pdfmark.store pdf.pdfmark.dict begin Subtype /Link eq currentdict /Rect known and SDict /pdf.outerbox known and SDict /pdf.baselineskip known and { Rect 3 get pdf.linkmargin 2 mul add pdf.outerbox pdf.rect.ht add Rect 1 get sub pdf.baselineskip div round cvi 0 gt { pdf.breaklink } if } if end SDict /pdf.outerbox undef SDict /pdf.baselineskip undef currentdict /pdf.pdfmark.dict undef } if pdf.pdfmark.good { pdfmark } { cleartomark } ifelse } def /pdf.pdfmark.store { /pdf.pdfmark.dict 65534 dict def counttomark 1 add copy pop { dup mark eq { pop exit } { pdf.pdfmark.dict begin def end } ifelse } loop } def %% %% %% End of file `l3backend-dvips.pro'. %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup} ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N /erasepage{}N/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{ count ocount sub{pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N /@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X /yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginProcSet: color.pro 0 0 %! TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet TeXDict begin @defspecial systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict /cleartomark get put}ifelse /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution mul} def/BPToDvips{72 div Resolution mul}def product (Ghostscript) search {pop pop pop revision 927 gt}{pop false} ifelse{/BorderArrayPatch{} def}{/BorderArrayPatch{[exch{dup dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def} ifelse /HyperBorder {1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def /pgfHrgb{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfArgb} def /pgfdir { dup 0 moveto dup 5 index lineto } bind def} bind def /pgfVrgb{/pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfArgb} def /pgfdir { dup 0 exch moveto dup 5 index exch lineto } bind def} bind def /pgfArgb{ /pgfdiff 8 index round cvi 8 index round cvi sub 2 mul 1 add def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div pgfheight 9 index 9 index 9 index 14 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfdir stroke 4 -1 roll 7 index add 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll .5 sub } repeat mark 15 1 roll cleartomark exch pop }bind def /pgfR1rgb{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRrgb} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2rgb{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setrgbcolor fill pop}bind def /pgfRrgb{ /pgfdiff 8 index round cvi 8 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 9 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 9 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 8 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 8 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 2 index 6 index sub pgfdiff div 8 index 8 index 8 index 13 index pgfdiff { 3 index 3 index 3 index setrgbcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 4 -1 roll 6 index add 4 -1 roll 5 index add 4 -1 roll 4 index add 4 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 14 1 roll cleartomark exch pop }bind def /pgfHcmyk{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAcmyk} def /pgfdir { dup 0 moveto dup 6 index lineto } bind def} bind def /pgfVcmyk{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAcmyk} def /pgfdir { dup 0 exch moveto dup 6 index exch lineto } bind def} bind def /pgfAcmyk{ /pgfdiff 10 index round cvi 10 index round cvi sub 2 mul 1 add def 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div pgfheight 12 index 12 index 12 index 12 index 18 index pgfdiff { 4 index 4 index 4 index 4 index setcmykcolor pgfdir stroke 5 -1 roll 9 index add 5 -1 roll 8 index add 5 -1 roll 7 index add 5 -1 roll 6 index add 5 -1 roll .5 sub } repeat mark 19 1 roll cleartomark exch pop }bind def /pgfR1cmyk{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRcmyk} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2cmyk{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setcmykcolor fill pop}bind def /pgfRcmyk{ /pgfdiff 10 index round cvi 10 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 11 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 11 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 10 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 10 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 3 index 8 index sub pgfdiff div 11 index 11 index 11 index 11 index 17 index pgfdiff { 4 index 4 index 4 index 4 index setcmykcolor pgfcircx pgfcircy 2 index 0 360 arc closepath stroke 5 -1 roll 8 index add 5 -1 roll 7 index add 5 -1 roll 6 index add 5 -1 roll 5 index add 5 -1 roll .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 18 1 roll cleartomark exch pop }bind def /pgfHgray{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAgray} def /pgfdir { dup 0 moveto dup 3 index lineto } bind def} bind def /pgfVgray{ /pgfheight exch def 0.75 setlinewidth [] 0 setdash /pgfshade {pgfAgray} def /pgfdir { dup 0 exch moveto dup 3 index exch lineto } bind def} bind def /pgfAgray{ /pgfdiff 4 index round cvi 4 index round cvi sub 2 mul 1 add def dup 2 index sub pgfdiff div pgfheight 3 index 6 index pgfdiff { 1 index setgray pgfdir stroke exch 3 index add exch .5 sub } repeat mark 7 1 roll cleartomark exch pop }bind def /pgfR1gray{ newpath dup dup dup 0 360 arc clip newpath dup /pgfendx exch def /pgfendy exch def 0.875 setlinewidth [] 0 setdash /pgfshade {pgfRgray} def /pgfstartx exch def /pgfstarty exch def /pgfdiffx pgfendx pgfstartx sub def /pgfdiffy pgfendy pgfstarty sub def dup /pgfdomb exch def }bind def /pgfR2gray{ newpath 0.5 add pgfcircx pgfcircy 3 2 roll 0 360 arc setgray fill pop}bind def /pgfRgray{ /pgfdiff 4 index round cvi 4 index round cvi sub 4 mul 1 add def /pgfcircx pgfstartx 5 index pgfdiffx pgfdomb div mul add def /pgfcircy pgfstarty 5 index pgfdiffy pgfdomb div mul add def /pgfcircxe pgfstartx 4 index pgfdiffx pgfdomb div mul add def /pgfcircye pgfstarty 4 index pgfdiffy pgfdomb div mul add def /pgfxstep pgfcircxe pgfcircx sub pgfdiff div def /pgfystep pgfcircye pgfcircy sub pgfdiff div def dup 2 index sub pgfdiff div 2 index 5 index pgfdiff { 1 index setgray pgfcircx pgfcircy 2 index 0 360 arc closepath stroke exch 2 index add exch .25 sub /pgfcircx pgfcircx pgfxstep add def /pgfcircy pgfcircy pgfystep add def } repeat mark 6 1 roll cleartomark exch pop }bind def /pgfsc{}bind def/pgffc{}bind def/pgfstr{stroke}bind def/pgffill{fill}bind def/pgfeofill{eofill}bind def/pgfe{a dup 0 rlineto exch 0 exch rlineto neg 0 rlineto closepath}bind def/pgfw{setlinewidth}bind def/pgfs{save pgfpd 72 Resolution div 72 VResolution div neg scale magscale{1 DVImag div dup scale}if pgfx neg pgfy neg translate pgffoa .setopacityalpha}bind def/pgfr{pgfsd restore}bind def userdict begin/pgfo{pgfsd /pgfx currentpoint /pgfy exch def def @beginspecial}bind def /pgfc{newpath @endspecial pgfpd}bind def /pgfsd{globaldict /pgfdelta /delta where {pop delta} {0} ifelse put}bind def/pgfpd{/delta globaldict /pgfdelta get def}bind def /.setblendmode where {pop} {/.setblendmode{pop}def} ifelse /.setfillconstantalpha where {pop /.setopacityalpha {.setfillconstantalpha} def} {/.setopacityalpha where {pop} {/.setopacityalpha {pop} def} ifelse} ifelse /.pgfsetfillopacityalpha{/pgffoa exch def /.setfillconstantalpha where {pop pgffoa .setfillconstantalpha} {/pgffill{gsave pgffoa .setopacityalpha fill 1 .setopacityalpha newpath fill grestore newpath}bind def /pgfeofill{gsave pgffoa .setopacityalpha eofill 1 .setopacityalpha newpath eofill grestore newpath}bind def} ifelse} bind def /.pgfsetstrokeopacityalpha{/pgfsoa exch def /.setstrokeconstantalpha where {pop pgfsoa .setstrokeconstantalpha} {/pgfstr{gsave pgfsoa .setopacityalpha stroke grestore newpath}bind def} ifelse}bind def /pgffoa 1 def /pgfsoa 1 def /.pushpdf14devicefilter where {pop [userdict /bop-hook known {userdict /bop-hook get aload pop} if {0 .pushpdf14devicefilter} aload pop] cvx userdict exch /bop-hook exch put [userdict /eop-hook known {userdict /eop-hook get aload pop} if {.poppdf14devicefilter} aload pop] cvx userdict exch /eop-hook exch put} if systemdict /pdfmark known not {userdict /pdfmark systemdict /cleartomark get put} if end /pgfwritesamplecmyk { 4 index 0 5 index pgfcheckcolorrange 255 mul round cvi put 4 index 1 4 index pgfcheckcolorrange 255 mul round cvi put 4 index 2 3 index pgfcheckcolorrange 255 mul round cvi put 4 index 3 2 index pgfcheckcolorrange 255 mul round cvi put pop pop pop pop } bind def /pgfwritesamplergb { 3 index 0 4 index pgfcheckcolorrange 255 mul round cvi put 3 index 1 3 index pgfcheckcolorrange 255 mul round cvi put 3 index 2 2 index pgfcheckcolorrange 255 mul round cvi put pop pop pop } bind def /pgfwritesamplegray { pgfcheckcolorrange 16777215 mul round cvi 1 index 0 2 index -16 bitshift put 1 index 1 2 index 65535 and -8 bitshift put 1 index 2 2 index 255 and put pop } bind def /pgfcheckcolorrange { dup 0.0 lt {pop 0.0} if dup 1.0 gt {pop 1.0} if } bind def /pgfchanneldepthcmyk 8 def /pgfchanneldepthrgb 8 def /pgfchanneldepthgray 24 def /pgfcolorsamplecmyk 4 string def /pgfcolorsamplergb 3 string def /pgfcolorsamplegray 3 string def /pgfrangecmyk [0 1 0 1 0 1 0 1] def /pgfrangergb [0 1 0 1 0 1] def /pgfrangegray [0 1] def /pgf1{gsave exec 1.0 pgfw 2.00002 0.0 moveto -6.00006 4.00005 lineto -3.00003 0.0 lineto -6.00006 -4.00005 lineto pgffill grestore} bind def /pgf2{gsave exec 1.0 pgfw 0.8 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -3.00003 4.00005 moveto -2.75002 2.50002 0.0 0.24998 0.75 0.0 curveto 0.0 -0.24998 -2.75002 -2.50002 -3.00003 -4.00005 curveto pgfstr grestore} bind def /pgf3{gsave exec 1.0 pgfw [ ] 0.0 setdash 0.0 -5.00005 moveto 0.0 5.00005 lineto pgfstr grestore} bind def /pgf4{gsave exec 1.0 pgfw [ ] 0.0 setdash -3.00003 -5.00005 moveto 0.0 -5.00005 lineto 0.0 5.00005 lineto -3.00003 5.00005 lineto pgfstr grestore} bind def /pgf5{gsave exec 1.0 pgfw [ ] 0.0 setdash -2.00002 -5.00005 moveto 1.0 -3.00003 1.0 3.00003 -2.00002 5.00005 curveto pgfstr grestore} bind def /pgf6{gsave exec 1.0 pgfw [ ] 0.0 setdash -4.50003 -5.00005 moveto 0.49998 0.0 lineto -4.50003 5.00005 lineto pgfstr grestore} bind def /pgf7{gsave exec 1.0 pgfw -2.50002 0.0 translate [ ] 0.0 setdash 3.00003 0.0 moveto 3.00003 1.65689 1.65689 3.00003 0.0 3.00003 curveto -1.65689 3.00003 -3.00003 1.65689 -3.00003 0.0 curveto -3.00003 -1.65689 -1.65689 -3.00003 0.0 -3.00003 curveto 1.65689 -3.00003 3.00003 -1.65689 3.00003 0.0 curveto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def /pgf8{gsave exec 1.0 pgfw [ ] 0.0 setdash 1.0 0.0 moveto -5.00005 3.00003 lineto -11.00012 0.0 lineto -5.00005 -3.00003 lineto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath grestore} bind def @fedspecial end %%BeginFont: CMSY5 %!PS-AdobeFont-1.0: CMSY5 003.002 %%Title: CMSY5 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMSY5. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY5 known{/CMSY5 findfont dup/UniqueID known{dup /UniqueID get 5096646 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY5 def /FontBBox {21 -944 1448 791 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSY5.) readonly def /FullName (CMSY5) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /prime put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A4D77D0DAC26A1FA54 D2471EE9BE33D2E87853491D634A3F05B7672519E09291AC2D08D95BFB80CABC FA89042E94FED8DC9929ECEFAF741D273687B2127F5B80ED7D16F146894841D5 1A80D8085E27114AC35CD5E578760D8982CF4D8587FD3385FE50E21A253A37E2 AB628DF3500FD2C21BCCBC8C0B6AD3AE21DE63AE6586DB06B3FB1966625EBF52 90FEBA873F819AB480FF994D80C01DE1E2F28C665E74FACFF98B2972CCCAD279 96F2EFF1113CDA922985E095249765989A4C6A92A76340DCFA07AFF34AC5E177 09B739A72D0D1EAE1A6164F3AA0DF1651EFED335B68C8465E1A61025235D4A5A C3661B9C0456C35C770242149B3B98A29784BF71030C7DBB2C13958E5CC263AE FEAEB9FBA84E06D772E94A494B60E32AB8FF862E57175DB17F6162DFFED60EF2 D46FB78237E778C7321ED79FAC137945A46B2D90B778DA46308899577BC7844E 3E09303AB2DD1F64D58756DAD62ADE22C62DE6C9BDA77CB12B1FCE3374CFA442 E0CABC7C9AE699CD955077A7268FA0FD3FF5EEDE605990F0DF0078799F5CED44 6ABDB2E7D9214BECB8B2CBCF328F7F5B8F346B55C9BA5C785A252DA59602B6DF 186D23D5D90556EB52D7C0B44E4A9A189C180FA213E12E9838F0B2902779E289 3E2B7DF45A01F36D88C9CB814AE5D41064030D37393DDD7D5974C1A27EBEC064 B0403898996140AB14E6EF1B48D555A1C4DE29AD0C5D284988B92917442D2C61 3B15E55CD91837B0496FEBB51486CEA7DFD9787AEB484BE887111903124340C0 EB034A75292E59CC038E75E1DDB0027407492EEF92D70E0303BD7B2703E131FE BA91B289003B7E5BF85D2E5E130CB37949AEE51EA57FD424402B0BEEDEDEB5C3 E23643F3100312F94C157C98939EA2312B11DE0A683D4018FFBA2864626C9449 0D656EB0C79246A7F5ACDF442A55C9188D8F3FA64A9B6BFACD8F81D7546E0CD4 3C5CC653CE9514306439AA2BD2FF2B965EA69A30331E8D65056D919476867463 97DAFADD16BF9366E95C7C4276093B639541F7AFC9AF745260685D84DD3095D4 1B925540372ABFB68CEF211D65756FE0E99733B5DB40D5A42016E8715208D4B0 7A120EEB34147BD179FAFA94D0880121D1C6B27F94965ECC1A93D1B73AC1B3B7 191B7B3CD4F2E0E52A3893255C4B3F1A70A0ED36DAD262538E02E8A227F6D6A1 8A047A91ED6409F1E0D9B40698C817918AA47B95A082E3394AC42DE93BF9CB28 68E63F3363FDCDB014E89990C50210750E8442D9555B0A796B243AB03190B2BD 57C39F233318B6474F1B3CCE31C21BEF68FF5E3F866789041910B1B11ACEB75F 146BB1A162AEFB268700C2DFBD9752BCF6F136ACAE815C0AA4147AA2CE61D282 1BA716B693E2F713D0653B17C9381DA86E1CFCDD1B1FB9A72ABDA1AB2BCAD30E A4EAB601BE3F8EB95B32DCF5DD114683AA64E14F9A958D16CC6DAC7DC3ED651D 603959B0265FD36F8DA41F3173A708D88C73EEA1533CE48C2AB26B4DB7CFA662 A8A463CC178C31D342EF907B3B44751859F2BD510F1CA93D61AD39E8E5D7785D D465C47F3EDFAC22DC2B5DD93B2F752EB5482E138A0A1E5CD62747E0F524E29C A56E58A6BA543CB3AE051F4D90891B65712B63DB197E60275EAF5975007D09B7 95F916615F97C50D8FDCFB67F1B677DC5139E6F46ABA079AC552F27F507CAE8E E5C04D31ECDD6CF5E8A447846375C1748651245EB9C780D87FFF162AEBCC9E0B 155B318CBF420DF0CFBAA5669C2DBC81B55B5042514B05B7B82FCC827E21462B BC8F8FA96E2CC4441E07E0901EA72495013400453E49B7D243FEF528E4078AB6 49277EE77C81B9167D2EE1961AE265A8C01F7562ECDC47D9FEC391097474EF8E 54A5A7FE6C98A81ED29D42A3D54326219F638C92AF8A087607CA2A2A80CB1183 8571CD40199FBDB9D70AD83979C739F533359FB2DF0AC4AE3A0E9DFE735ADE9D 6E29B3F6DB9A5B11418E9C860EFDBCB0E49BB900BBCC85860100F1FFA5AC07B5 14F37C5AE5E1A35168BC48BA7012A297C7771789302AF44765A6DBCFDD418172 62DF3A4785385CC9D055A9B4FFF373041D9F5E9DA83BC1C5F3265E49BA624B82 F15BC17B135D8723324865A9CCDD2EF3A0F64C17914F9B238C946FBCABD92B30 AF90191996ABF2E4972AA9D0EF7B64AD0126D07714D4059CE032905BDF877D7C 3440C374D7B5D0073E13ECDF3DEF2938EAC1908CC60D0E5EF5F52AE8A1B0BD34 8A454CDA66E7340783A7152CCD74EAAD4112C7D70F3C867E140988BB610CCA20 F1BF5E3DA8097509CAB419E01CA47D449C50EB8FC6DBB75AE2C5312BBCC5CA91 86B221536517CAA6870429B65069FE3CBF3FFFB5631B57597E5C0C3E39199FF6 4DC35B155A759CBFAA96409BAFC7EDFF03D2671F0396641446605843CA4AA36A 15070DE52DDBFF487C5398CF7604DE843F32CAB26A96F8A9DCD03F3DCAA57E47 6F0D36CDA34B96B7F4986275D79A1BC1954D2BC0BE1509709E40FF23B84F8D65 3DE1D1D8A2AD94AE3DE202D62993EC4BC5AF66CE512EFFE7CF39028BCEC1667D 8782111D9D503BFA45E4960E6197D8CB5697B1662BD2D991532074AF5491DDC3 2EC52B4E5AF9B2DAA5D5E4CB644BED25DACC3F445E4C7D58A1E9737F4EC04A79 238E3578311D88EE6D067725C580A146FF150871FAB2B366B5AFE5CE3B386EF2 EFB540348505A1749BB34586851FB2FEDA92ECC395B618911E1D00B427251B05 15B9E42AC1F0F239827B938EAB8CD20FF9705F4D7FB5F5F911CED9EE8FDABE8B 3C3442DC3B716C3686E1B0573EAE3905C3964ACB336FA3C38B17F229EA10F036 ADDE7FA5CFC01FAAD33F75A125F52AD395C7DBD3AB6F2321D7B5B55F0ED237CC 61FA8278FFF9956C64B8ACBE357D4603CC4599BFA198AEC01E4F4AE047754C16 E155C8FD09C996D9B5EECDB243FA48B0CED1F0882103729EAECDDB9523D6BC22 0AA1545814579043F0DDA2D7F015E56C399EA3C644A15BA6B144361449609C40 A4986E00918A7B44BB06E7090F73FFBE4EE3E051121939EAB0349EE84715DE36 FB187C50AFD74C44C25BE4B7037466CD60F211FFD7044245159505196B0E181C 0177F14D0B486CDFB767708C171FE513AAFA2B60665CA55B1E5F9E0304B63666 3BF44EC4F5B7DA58891081F78B37BE8453E86AF3557B97D8B4969CCDE2DFD255 91FB4D9CD41E5F931751BDF7FC8C700C633470064C0BB00FE5745918A69CE430 D86FE46DEC014C019C06621B2EC6C3F196A8A5E1E613AD8B28A9D0B981C11A29 4AD11CD3A46D089F8EF7D8298971A5F9F6F139CA794AB4BF0AAB2D4D428A8E4D B80EC134CC7CD74D3F08E7BC8AC5B1846E1E5DBFA97AE4DB885286C7D06B4CF8 948E889ED85E8703CB97D7AE19E1201EEA205157BEEFAA3E17B8BDDFD01BDB17 691010A662280C279942158F68BD351B235EA4EBE24D54C0055A19A3F230F353 77202A1D7BE371010624CB741D4BA2E690B33FE582D666E9788A3E3348A0E100 2843E0B2FDEE05DF75F4D49DFE2B69BE79E97DA1B3638289395444F1CF6CDAB5 5E6EEBB6F907807B913290C25D8AA546B121EA90DD113588011DBF01B7F88AA9 B9CA9731532478D3BA57786817C1D31D8C51C307D7F500F1B58C2CEC9594E5C4 E5E7239D90C8B5B4A81F95C048272A2C05EF0613463E4094E922F7326815EF3E 6E82D5A36840A76B1BB25185CD66B05FF2D140E0F22CFF73EB3F57732E935BA6 8C64BB6809E1B45089273527834789637621793414B6853A1C301612920E3F91 458D043CC1B6CDA271864FD4CCE585FDF025FAD217F975FC36FAF8B79A6551DE AC3863E25DE972E2A4AD997E77A2C05A1A14152BCFDEAF40072A0AD952A3944B AB12D66ED3C408DD104B8638D67417D2A95A87E226A03C28181047CF5BE58409 7D07D2529BF867BB61ACFD68F817BCA73815F787162614EB926563EE2F8629FA 6BEBC05465458A03C2A8673A3CFF7552855E082A7B5C2D4101A1B96449071485 279C1EC56610507DF786427B4E4D949BDC9127C2802451F3B21D60D5827E5B7D 0A683F4402725547EEBE27C38839876A3B1B7FE0D7107D6E2292631D1B9EFC79 87D05342972EEE2C413568BA971AF56A2D4D89C7C0D0120AD504D444655CFF3C 957D5EF19169401CAAA2C4C144FF87AC7DD3451A63CE796B8F6C600F913F55A5 A74B928AD676ED097740BDA578DA299F42CB7B7334BD2281E403129866031EEA 1219E7F9BBA230D049EEF401CEB412BF7FB58FB2F9B7D1E47F0D774956B803E2 872A7A5A38E5B7EC4A225C73522EFCE6E98E3EDA3BB402BC5BBBA209074BD2A8 C856290D01A092160E8FB0D9EF324776AD39D7016C63A500D0839E670009F4C0 20F033554B6B7CCAB7BF60494431E4F2755E4CD966ADC7A078D434FA59E5E49B 9903F4E722ED169CC3D0FADE874E3141CD47C69BAFA3183BEA4F37B388F4F48B 7D143D4B79CC5E701EEB350447D9600D39A7C03A25B5B8B6A5A7284A8DB4969C CDE2C99C39EC07BD8559A45CB5AF23B849C1826713828F43DF265068950DDADF 3B584B90748657609A89008187BDE4286F95694D01760260274A23A41FA66A78 773902ADDAD18F98F045FF7D20AD20EB685C145D44237EDA272619EA9AB71497 DC8BBE9EEED31EA77C9410FE650C65A6CA71F0E72E7D83BBCC0A59DCEDA6399D 64A8F4865811A637838445D84D97204CA7A918DD476471A598D7536276C0F0D1 F0A88D8BCCA56409342C1FF678CFF90FC7B287C36CE682E1B200B54B2CCB12DB D1DC9BB4E1CDE2B9B6BD4B80DC226E10FCF20A9E7878A16EDFF37FB874E4868B A9F1C452EAA7126E81763A2DE2B502132046322BE26140F04FEB0E7167920679 FE8618E1AC5C03360AD3D8B5E913E1CF0C1BE9E446DFB050C3978165838278DD 23D17DFDC85DC7B168F173D0945D110976084CB27B6F8AB2D22410DB05BD345D E4E38CC7EDCBAE36CCBAC590DA5C12D969D51B847A1460F4FAEE7D648818D26F 20FFE485D842C2088258F4F0B1FDCA46A7110645C25E3A31C4E6986C220985A5 DECCA30BAA3A4B5CE0152B8A9D68B1FD67F21050A87BDAE6B665036B9C73953A 11B16AA3285456220D09A03DCD8402C06A2BB18717B1AEA7594F748817176E12 87E685FE70E28C0382EAE8948A6E9FC2F46E2B70DAB208611DFD5A5D97D39CCA 8F9AD9A171DF53CAA6E3E5AE87257561BE15E3BB21779397A30AD4B22A1A1EBA 4B7235F59EEEC1FAB7294D521EC1E36723A4D7BA007DA4239C05F0E6DE546D5C 7A58CCD00F6AC96C20B7182CCCE3E5937D7A64F7CCD52A107BB8092D5F95A8A0 589B2DC542511DC89A0EEEF23E711C7444BDF95F64CF486F158CA162138A36DF 5400A5D03AE62A945373E95840F6D6C7BCCC4FE65382584A4DB36D23FBA6562E 1F3AFCDEF27AED61245EF880426B14B3DB5D9731039FB98F2F51094CD7D5EC78 1F8B03F07064CED40D139BD04C868B1E51A994731EDBA98E7D678A07F7AF6E56 92586848C58ABFEF378F5C1B4C3E20BA860BC7310B9AC48F2143B5495F9B3A35 85C9AD5AFEB23DF6376EE78BCCE054C8FAA925965E38EEA6F68CE1B5329D9DD4 DAB3F3342C6E6D9E0C70E63989DE8DD2D3C4C671233888ABF56C58F69D29A742 B5AF39EBF1092C2C4A906B872310DE0E83372B1C7F6E295D8DFFEFF960DC0F4D 83D7878BD8918B9BDFA17889D52AAF362B6162C07810672E23F66F8CF3BDBD6F 0E016C4FBC8CBAA796057A6B9BDE3233909694110279F81259A5E628FBDF6159 CA0CD6997EBD34C3038A02FA4B422A98AAF4297B998685D7080EAEBC22E27900 8B0178A75E5E52363A2E56507B3E44A6F9A9DD81886317A07B4823558D3690C9 8C722915FEFFED7F6CFF4E94DA744562835E29C97333CFE50D49A5EDB886F4D5 279DD9CD35C15656F9329CA06A0CE1BD5986784A910EC3DC7AB1A068C8ED4829 DDBC83091AAF21092234F614A6CA2C4A854B5049B5622BEBBA68AFC0AF9C6686 74555347CD055BB13B5CD7B5B6954A5794AFCFAF9AAA3682C7333564660E7C1A 8FB3DACF1ABACC3D68C26D07060C7D5B9AE9C9377A771C3BCD317F0ECE3CED11 C0438A29708D99A1F3C02E67AA1D7BB57AA7D8C64A2028349BDDD4BF6DB3139E C1BB6D7D906699484EE2A5D83296BEE09644B62EB10658E06E4176C1E5E7BC4F 36F3454F2DE69F0C5B51FD5874F67287294399923B19A40CBCA4B580BCDA347A 9AFB7AE64C8E9070D5586086E6F42EDB8C0E9729649CDAF7C0337BE5E670DB9B D5C038262B65603C1CB1BD00D4ECE2BDAE5B77A8A129DDD79DC7D080AA89B7D7 439A03568C2C826EF23C2ED7160B2F8F14C05F444E364DDE247748541CE7E265 1414B5A15E7152C6E9056B0CD43421D4AA5EBF1EC2CC70516F920F08B0CDC38C DF480EEAF04D7F12638C9CF8DC4F827DB07256F4432345FCDA86CFCB637D04D8 931A81D2DC47674AB435738871A65422D3FD46DFAE9049F27DF0DE33A0E3207F A6832153135BBE5A283CDFF46ABC74C78B3320EAB1E881E59E07C3134F3830B0 8216AAD3995D3F8F6CC988C73B2B7A5B79E81C6E8377FFBDAB29B4CB6317B118 84A437E14B0B213BE7ED610E9469405AB950965B2CFBD4CF0B3415BC9638771D C2D8265D4FF0018FCD3851E645A82C179FB4995A337C0A854999E0D91EE8C98A A9EB781A0DEAFAE1D666D2F5813BB2E79C232E5C96C686D414921DCF8EAD4C7D 06F79EF5078C77556346283940EAEE347B06F756A800FEB7656DC02597A674DB 6F8BAC8751BA046D7040B5BA0AC766522FF9657F71C7C89DC93E92000A00120F 301DE3ADB5D7D62B57E0824B9BBED388A5CF1B39B034AE2E44BE27CC0F5F0223 2A219166697692167403DC2083384A698551FBE48BEC89629820596FD569543E 75174901415C56DCBCA012694D671655AA84A8D8307B34066F1AC149C8B4BE3F 578F57A39B93DC454580C44B12D6D1BC653CCEACE809E5F3F7406B9F4A868D68 ED4C5C23D7B2497668D718621A94AF4938A16FDACFC6E3B216BB615324375050 24A7466E820435B11E93E91F673D609932BE884AA1CDB9D433A40D189A668498 A1B708DA358F56A1F2CE297C61D9AC19ABF79539914749E5DEE0FD0DC998F4D8 1A4CD93D0A06E68CC764308BCE69D4D53FB2F0AB742D7E9618321EE87EB1DEBF 14561A916C8D58B9C6AFE80D586F5FCAC3C6489038178E77B515108E48C7AF9A AC9C3F93598A28CD03864C6A65659E8E6C782F50ECFBE2C27678ABF0978877FF C685386DF9D9D8F51EB5AA618D2B3F63FC6A0D6107469DA479D540447D785235 2FBD6C4054C30D02DF3D2732031297F53AFC937F6CEEE01B2EF34D59FD0EBD21 854C5CAD32C59F6D8F843795472ABE1F73107C0F5A5B9274CFF2346E7627355D 5E7B3B3451C89DF5572F4E9BDCAF526425B34D71875B5109EE341F55C551DA50 31E2EC3BCB7A79CA3F737D3CC23200160C76E29B9A5740BCFA0355AFE7930076 1F621C801268E18B83A108068B8DB4ACF7079069AD73E37ACB779490900CB770 326BA14A6CB1E7FF537AB11F432809968CC441F418AD1A36075D948D487C55B3 C6FC12080681BC9685764E9348B28A29E6FA025EBE0C175AAA6CD60CE6E2417D FAE5E146264FDFFE499FF7B6F04466BF3406D2AF6DE542862EB51614000D9B0F 0C630C2955964D0D808C8C65211DA05FF14547308FADEAD9A907B1944DBCAAE4 DAE093FAF4AE1AC91793F025C0F0C1E74DE7817154052436A369CF7F52E05841 5778334C75C7ADDF2B7C1D996C18E65366EC4F8F085AF9DE24D54FF213C73716 0C383C2741EC725E1FD07F83ED9BED3CEBA6BBF54C5CAC897D17E19F62A11AA9 B3D13D0649DE56955AF9924057555D8DD002A3E510703A9742F8C5D2AF2F1B19 F52F38F6EC4AB6CB0234AF158FB8F0089FE5FA699473609E4DFC2A90705A8512 5861B1347D37480ECEA70DF671DBE8696C5957818BA618D1AC24C441B47F0352 E7F937E5902B0FC5270C5F787FCE8ABF7119F741B36E5F9B70B1DD2CBC5FA90D F3B40316B2097211A07DE9CF2DC319BAFF663638F729648AF7AFD39B5C9CC5BA 49A6FEA0CF977DBB7D1B2CDEF5CB6F745DE93CB22D86E47337CD0C6E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMSY7 %!PS-AdobeFont-1.0: CMSY7 003.002 %%Title: CMSY7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMSY7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY7 known{/CMSY7 findfont dup/UniqueID known{dup /UniqueID get 5096648 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY7 def /FontBBox {-15 -951 1251 782 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSY7.) readonly def /FullName (CMSY7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A4D9DAFF1B3EA76067 C5493B69F73B89C8B61804A34FCEC826343337CCDFFCE17BF343EA8034BF95AA 14C56862C2C052569AFB236E1F1795F05150C8F28DFEF6BF4BCBACB678D00036 30EE84FEB44B1A8438185EB45654E6853C1159B073E54292D135F0961A64E8A5 AAE49C4BA9C44156C123426212120F99F3E8B7425752A5FE384AAEF755A8464B 51F015F9E2967477D57B22627D75CEF8AAAF0AEBD504EB46D0289DFC8D86C972 F042BD88A90A53613DD93D8A7A8460E63D85F6C15C000C0AAEE4BD5130B6E668 8C9B3F3FFD804745DA1D5EC0AB85C96E1724FA67F9324C59275415182AB48D57 9722DCF602396AD4B5C075A5A89A5D005C9FE11273E5FBDDD1800F11BBDF6AEC 6711C5633A73AC5DF038BA521AC492E138F7FFC7C5438FFD32FEAA1128C66E83 0D3AA40665F05E62D7EF00B1B0596162C402A34B6BAE6300D43F3DFCC84860F5 C0F0F1CE28FC60642BBFE9BC9102E80146774CDC88F9C250DE762D24A3484BCD 1D26B6D9FE981CA5AAB2A4BEDC528115043DC18D7105735D7528C2C5DD89A812 75B5D7B2E5A586FBB0C061E708F92C1552F64A296490BD0F20243986A4707FF9 8AB3C917B8DB92F19DCA6B9D4A1DB57515E51DD85D5C9D2CAF7A036AA3F9E9B1 5B5E099CC05A9126AB274C17D75CB4FAF78052366D2F21EDAADF84B22A2D645A 3E65C4BC0F540B5D9609D88DD0E4CBEEF87C16447D43A5F98528FD45ADD10DE6 41AEC411FD6929308F0E4F48A8D9C9EE386E920D41C1CC98A52073011DF5BD28 5683F280B5CF7F27DC50930C81D344FF5A8A9258A207D2531AC21A735B14155B C22C752DD22AA33C52D6D4D053B3E46FD4C9129068DFF52695A3A9184D04E8EC 93696A3FEC3AEB3814D9015EC14C22EC3ABD5070E8C28A3B42F5596D948212B4 AFB9978A0A361135C9E18CBDC98E0D1E8BDC17E25DDB3D52E86127E5AAECC55D FEE61693190E378978EF1BBD4D1AF005D511C7607CCFA4BCBD3EC427CAD82809 B725B25AE8A03EE88F80A7732A571A2317E0B6A0D072EE8CE2EB9E033CDCC899 B64CF4FA1C708A885442062F08D3D8DAF44C066EE278714D1486EB709D327865 A483F62709E89D08291F044325208EBA758DD459481334F5D9AE3BB61B3020F2 A4538CFC2C94BE84C920BE80806FDCEE394230730E049333A7E16509207514FD 695B5E0AEA9E4A9737311AA0B33B15F6769FF865D1ACB63DC6201C3F1062A3FD 1B446C1857460745917A36289DD57C94FE6240F4A40FBDFC10E91B91B79029D9 9F1B9C74E8E5AA011A0ECBEC660230AD5929F01D0325D15FDC0040406F124021 02AE176F4C98BAC1706F03C2B5B40F325A50CA4683B2BB4605E68E72D0CBDC2D 96B3BBCDD01201B650A7E7744D58D1E36D81FBF72E0A875FF29B4C109A1950FC 9621B18D58806392EEE9841794DFD39E3C4E20D45384FE07F9D445F143B922D1 AB350AA6DFC51FCF767B141A392D6A8B633AACBCEC9F56A0CF40AB08020EE63E 08CC0BE01B40E86388A65F5869F2F4D022DD4B912031CB8CEDEDFC2473772569 5B28F66AB74CD7902A0061AA3547D13C7F0C6EEEA7B0BD316694A94E4D672520 EA044AB28D8D01076C486CE456EDA1811F7ACA75D27473080D27D3E681E35FC6 447046120C6CC4C17674F0F051570A79DCA74848F3F300B58B19018430D99858 CA5504084D6BB74CFDB635B6866974A9AF05DF201C69352B2663B0623E7828B9 5EC5FFA8D8F10A7C28000F8C679B180067D5481D6315BF1C4194EB171C8F3CE2 4CE319975B9E948D907F9F7EEAF07089844391555F329E331D52FF114668B8A4 80704B3C6AC0CCAA2F5D043CE44E65EDA89A0CA854CFDCB11D549B7FA72EDB90 D35353C34A771B1FAF96F83FCA5258AAB65384BAFFCE448690C1432A1F749C20 5817205185F973FA098BA856584753E75EBEBF387FC155202885F5B67117DD7E 70D1CD887183C5573B6FB607D4F6CC9F8B94B09B3F3AEC2EF1E6A320CF6D0112 63046321941D1FB3F2140B59370AA9387E24D579D389A166A10C989497FE9549 34E1AC2E546CC06C5308460DBEF3E1AEEB6CBB0FFDAC458E61DE3391480CF5CD 34A647D4DE15B81131B7D1F9EED4C6837A32E89B0EAAD6A05F5F67518655E5DB 224D4833CEC60D5DBBDB8A03FB1A9730589BB4F0FF56191D17E73B9562E0C356 B188882B36F9505F6F42EB2644FEE125C2A7D12227ABC8ADB924E88B0A9E8DC2 79762523B0B88DBBE6AC7968A46BD9E9F0C3F03F5F64724CA07782195F01F130 30DBE895C212E0EE20162D863F46A674D85232FA0DEE69A8DF019794AF6873AD 9CC2A5EEEF9393313CA519BF95C08ADF7A75B6F53EDCDC39851D20E58B97CA57 A7523717AA1821DEA94C8A9F8B82346B16D92D15AEDC16F0011A45A44B09DE47 08CBA46E8511D0C5CC83F952EEFA4ACFA7F3D7FA5E113EF6B70E5ABA6F1AD3B1 E4D3B15AC6D5C3BC70A3946F411A7D965D6FA9D7B6C6ECE19B2C29A2FF476251 EBF0CF3BF658A1D896323706172746F58B2DE49F8B7E431E20304A42694CCF73 11C4E9E96260CC442E2938A1E27EE6744C7CAB01634C8210CE40488B9CBD757C 4277B5E3E43C7560291D945F9128AF1F85924003418F96458ADDC5BB8EC431D5 AC9093D20DEA69B92454613BC1A82DAD4FBF8E56084494D9D2FFABD82A7C9847 171FE36B265B546F3072B0923840E6C6BB12CA53E05A99F0E8FD4F5109782746 7CAB9B35B68050230736AE624B7862D1244C7D9BE4D1CAAE21B123D1E8372377 F1FEF269A9A2EDF02CE0CC8BF92FD7EF09556987B8A3BF6D8C0A663DB6B9742B E9AC61A449106AF1EA7ACAD40AC6F59427CC51865E6A90CF2AEED8D6037BA70E 4ADDAF622CDE877C98C3B2006B4721FC9BA18E30F0752BD4ACE36221F5CD1497 8FEDA5D643BE2EE007970A68E53D85975116E6CC09F0039A09EBAF0CA4B0EED6 A485CC0B69E526033FD1C1190BC5686739CE13D1AE8EBCABC01FCFF26141867C 44ED291196E546369129B9F759FDD7DC21BAF0A528FC34BA9FA8937813953644 C539F9DA4E55E83DB3D6DA309C562DA1330B157957B18F7618544AB738E25F16 F0517CD13C1F11BB8EA056BDC575D77CDC526EF497639DD89C2098660C5C45B2 D7CF715AC5E76847E0D3178360DAC1BAF6ACAEE72453B845B9F86621C166857B 029CEF5AFE29D1EDB4CA3AD7D008B7550A779E0066D7312DD6C7AFE1C0BFFF25 7B062B0DF30032EA2A2FE3CC46C96A3A0BA1888D1D2B05424A59ABE3EE928ED8 B67F507EFA78AE128F58B54634C7F534B3D0F4AFC23E38FB56EB39CFA425FD37 848545EAD03EDC5A9E796CEFB345F527615C785963F536972EBD9CFC4A6A4A07 5A31A508CA147FBB762ADD198CE36DF86730FCE2B643D1E7DF0BDE800DE7AF89 44A36B04193E44231E08919EE91A8B559646DC4DFAFF0AD891890A0A88FFA8EF B066BCB7AFCA409C51889E7FEB33F19A3CB1268BD0EA74AF29C1401BABD16F87 ACF7DD65A8513DA9995C5092C36A774BC4260113360D29AF7ADF5D22B5B58E7E A9BEFC33B9A91D2C397B27A81087376CB623318A8362C3FA9CBE3026675723C2 E711910DDB328E0EE3FCE219F44FE528B70E58B8E6CDB4AAB48237DD933D9639 E9D4F9EADAA8D46537D964D75C27F210B0C2473CB60D65F61BBD91ADE01576BF 77C49E31936138B0FBA066BE910DE1B1F0E4FFB5E81038E8656ABFF08DFD923E 6BA2AFEDCE6998BBF7045393C34811501586A4846E5B942C8E99D4C481D3AE60 2796ADBB5242D59F1116EBB828014BD903EF58B223DFD18BFBAAE4D348876B06 CAC10B7AF0DC270E6702A3F75D4DCEF872F2CDB9470AC9A1DC1ABCB55636D26F 9CB6BF27A0DAEB1F62AFEC12F55F78C9B59AC6DA9DB4B45444B0C582DB4DB8A4 B31EF4AFB77988E92FC0B257374B4408406490D9AFCC495316D6C08BEC9A76C7 12371E14417711EF802FB7151B3F6A2580C97527C9C3A0FAAB8D62FD992AA18F EBEB36F7910186CD5F70A55DFE932757C299D9D2289796769A00A0C6ABD18F82 E0D4E95D6477E67B4C012DBBD098FE20E2F15C412DD2AD5471A65EACE05B3A1A 0C9C430BAEF4887F2CCE668116B87FFD9DAB4B9B3605CD26E6B12488058AFA30 8843791A95BB322DF5C47387F3EC72343855D6B23D72144EB5EB5157B8B238FD 6C71DDDA64C9539F66A7DD569FFF43DBE4A8F0608A3CBD354DD9BAB5E3C756DD 92C3C1B3E169D86A2230299432488BC04A87E08A80809F9968676DF9157B1C91 27C664ABCCBA9997FAD8966F766B325086899D1FE44581FE07C97688B3E15B0C 234A22646C32BB965B9BFD2CD34854D1488AAF021E169BF9CA9665CF040E25A8 16156C80A2F47397CD370AAEDA731E0D14FBEE1E51A17DB972D96DBCCE33F937 5CDBF1A650BF1D3536BA4CB7A1CACFD5CB457E2368A660A62AC26E64A631B2BA 6B08EBE42E02D9B1B2E95BF9F0A6B59C96A122968FD46A4D17BA3D018CCBA0F9 80BA3C1E6C683111AFF79303CF64F1D2CCBD7571C6E09DD9B27B8E101BE219F0 E075880A0E367885AC94143E777DAE455B990383100EADF786300602C2CE28F2 4F44662FDF03BD39A5181912D8F1243C36FF88882CFC4B34C1D4EBBC01D96A7D 9CE5303042D1B21042E4FEAA455F22A01333FCAD7E4AACA5D3A5386331985F6B 9B247EC6310BB07507321BEF3E4ECFC3B915AAA6E029B3999644C987640863B0 5DCF58CE479497AFAD1208FEFD1796E74467E9F7867C313A3412E6923F4C9144 C69EFA17965056DF043DB465BF2F1E191706D3AAB47E6AD5C9767E4A73B29F2D E2E579D0262237568F82B360ADB6D0219B7535EFD02DD0688CDD23D84FC4F308 5D2D0010B1A9F4F0321A00C154672D21708B66B91ADCF98BAC7A2F94848E9A4E 86CC82EDD0399BD9F13E43359E71F80086B9B0C3B6D08831D4479ED83E7892C4 90C477BD1F06DFEBBF60F26516EECDEFE4787EEA8683754F2B257D0BAA607DBA 35EC6D1618C2FDF3881827F92D793ECF152D761F2423A96210F582DC9B90120F 26A33025414716A5E6F56D712E31BABE5047EC4855B767AC63D793995C9E074B 6E35C7E5255FBF4C3F17E7AD7B2A6C5F7459794FC94306B581536910F244BF5A 3158E821CE75F4B0565EBE985DF24DAA92F9C1D848EEC6B88E21FB6C51125872 1752F7352291960E5BD36F78AABBCF6DAA4D07AF56E4B6058AAB13D41BCDAA14 C0D63C6807FCD0E2B4B9CC892F224843173A75DC53A8F0FA396959C2E2CFE3F5 9B1C8B62797F34E7A0BFCF0787C73FEF98442234A617CF161829498035D30B29 ADFEAABD0B496E8A2E764D22DB7737F950FC5982F1C5F4FD414C1B0202F40FBA 62C81B8F0E836CD73D79366FD62388B437B81FC673442EE34BF27454F72A08F3 389E60CE28A050601A42FB4491C60DC02EC008E6B9DD2495522BBEC7293E2923 120584E88412DA7137397B41A28706B1CC6BB0C80709A2A4BA79822D245757A4 3EE454198942ED2316FAEB981F7615E642167620EBDDC5B271E273216EB119C6 4F2F0412F0BA6E3BA396217597575C6739194E1F839232FF088FDDFD3695A5CB 9A0E220389938596D8BDB183138E1F73F64512E4FAB5E1328F9B42364E3113B8 004BE2CA0B074EE271BBE0260D31CE555D535C16EBB528747EBAFFF253E659DA 3A377CBE0B296276AACF0294CF90FDAADB4EAD5E2F600E5B2A018DEFB86FF61C 84296480A425687CCE37D671472537E897AFD4B8C6A6175E1ADDF9AD24DFC5C3 A73E18AC2D9B28BDA2F17D51DB3521945850DAF0EE48B0FAC271544C1B4F3B2D 53BFC8DE32BA366FB1FEC0DD6C0B1FEA374CBE2B96F5B235A1D83A240DB442C7 1460980A3E5B96AE3D5784DE2C2DFFA671E0A856DB2FF4130E5905F3D5338856 C11A468D867D0C6EC585F1AD3E7164B8598BB59973B9A952FAE819F052A6554D EDC342BCCB0525905D1D27ECB9EE43847B69AE116F494CB2DBBAFB2773F1A3E1 C75FBDF8D66FA5AB4005757D631A0D9424FCDA91A1D2AC6FCE7CC7A23E84C65B 3E92BC684F23467DCF8521E0E27CF1441C487EC6E3BCA0AB54BB137E83776009 833D772FD225E88A8BD992FD69819B3BA90BAAD1DDF16E4326190CC4BF9C30F2 AF7CA1FB38E6387D9745FC5E176B248B1581BF7A4CA2FCA8E423DF340EAE29AA 7E07A25FF838F67378F9A6A9A0B404E01E86E64FEF71DD3D540D4711AEB1974D E2E0D485DAFFC74BA6B8E9AFDA245BC8997BB39BB6BD52B496A09C68F7A8E900 8DB3007643416040FCEC85B407EA0A946827771FBBEE49A3DA5542CC5173A31A 0280AB8E922C23C1BDD88D70627EF124633C318E7C9ACBC14AE216BFD41C0B6B 3A0161757913CA1F7B6626963C09936A52E73DD9B3D86DEEE73C0293A646FCF1 21D4C33DFF1671DA7A53E77E20233EDE51571549AACB7968602CD03EE67ACACA B231661CA9DA2BEC5795A83DFAF675E9B052C8BDD51490F7874C91EF5ED2E0A6 BE9CBABB98A950F7E55DDA3823036437C11F614E27DA5BB8BC6D955FFE54B825 0201275C2C49A3908BEF1DB3D87792DDFFED23DE7FD9CFC284F6255C77E54A39 C2FDBCD28F2938E4CC135829AC1867CAA5705674062C9639FEEFBE49D6108091 7C58585B80464F7E69966D7933C7019BF336B88B9E0E7073A85EAF297B71B303 31EEE9121347A482D28CCE942AF53E94F88A97EF2F1860A92CE29A14495D67B7 D37E207D42F3891E0423F5BCFFCAAC057FEC683696ED6FEEFA65C8FB6F1312C5 24A1130192B4179F3B08DA1C951D988894E7FE7CFC28C56992A1CA82BF8BDBDA E021F16E630FF67201BA4DF5F3F4D6AA65B8347FC1575C142C6C1868E8472BD2 CF191137AE1B36F32FD84DCAD50644AD55EBA2694C93BDF984A5C9E7C92B73A0 26769F00831537266FD2E711AB3F8AFC5F3FDA3C9E6439FFC48C3D1B5527FC56 1FEDE991E66E8465C0E395EAD0A22A2FDC001E449AB9C5E0EF187A1DE9B74696 BEB6A525DBF3A60DA2FBF1579150DEE1C5D1B6F55FF2708CE23289803CE123BD C81E25DB96551A13AD713D5C7BFDD3F2E1D5C12463A195442B51909CC1724E50 A1F6F4EADB3B7355908F36F88521F333C4E7C70B094209D1F883B961DFAC32BC 8C5A2CAF77CA5E6AAB714CC0AF2B42FFF6F73301FC71AFFA9B33A2153F55C2DB C1C111874DEC37CB746BEC9A3A9A37A2DD098CE7C66B0FE38460ACD77A47D53C 1550F857FFB733B5A8D02FB56790A09190B29CCB4F4A3058B1C82F0CC5E1B2EB 2F8E06F2DE531E1EB81326A8EF0F82843A4AC59D267EEE45730895752820BA93 A129C22A78C1AB28BCF67AD5DF372FECC9EE6719A02E499FD5CA866688E86089 7EE8E5912087E0C4588DE38428114785E0CFEDB1E2EE24CC067D107DFDF1E2BD B1C4F9C6B740F3DEA0BD315581004E851ED5A9F66C4F9E95DE97D355DB06F482 A43B565F1255A85710B15A281E2F034B1C23FEE6CDF3A043780CB6AB18A016F1 9EAFE545CA5A5B5AAE2459D69D2151E99D029FB5C1649B9DA784BFDF7D177385 4D8B16B9922D149FFF6B4F99311D52BEC9A9FC098E7192180DBB38767DA9B9C6 E8CFC98615219EF3AD4A8157D14C72BA3F91C8B78381383E0BCA1A5319749E08 D67D1208C693A6640D1BD6B9285AC0D3110CBF8F7747AD12585141C3248D0BB5 BDE892F91A4B3291F21F30294693518E4629A3ADD7C8640E424FF615602C603E 1E14DCB3B17D34C090BEAD2A523E260A599522329B698729A635CFB15BE7E79E 6A34DAC7C3ED57340821A4E7A0C7F88F64BAA69BB80DFA8B659F4756878E3044 E1DB7EE4FE60074AF97818B3D36CF51110191B4E10655F52CC5D11F56517CFF9 04BA2676F4147DC8192C98C555B001D54301853030B2CF0C068ABE831158B1A3 F30593ABD51F5996CE493E0622323FE93B292844521051C1D3799C07DC879EE7 9D047DE1C7127E2DC6F94E30C34FF87FA03DB3A3D597697C133CFC5A9448E067 51777DCFEC80352A92D9DEC0A2F40580A0242C063CD1086D38FF5C6FA1BDB0A5 3EDB5499AA2322CC73A38FC826DC202679AF4A7B571509B715CB8BD1D0C5D1E5 9F5B2D6DF5E9 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%BeginFont: CMMI7 %!PS-AdobeFont-1.0: CMMI7 003.002 %%Title: CMMI7 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (<http://www.ams.org>), with Reserved Font Name CMMI7. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI7 known{/CMMI7 findfont dup/UniqueID known{dup /UniqueID get 5087382 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI7 def /FontBBox {-1 -250 1171 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMMI7.) readonly def /FullName (CMMI7) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 18 /theta put dup 30 /phi put dup 65 /A put dup 79 /O put dup 80 /P put dup 82 /R put dup 108 /l put dup 114 /r put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBBAAB71645535A2B 6F0F22458E1429F4A67307E01F0BCF6F337E0E2AD89658D880B04C26306F8179 C8121B958459B923AC3B05B594D8AB95F75870019130442FD29578D44F5690BC 7281357A5041C8A809A59D0DEE108E2A07D406656BC74A9F3317CB887E712318 46B2ECAA341F8692ACC2D14ABABDFBCAC6F35858355F1D3228B0223EC73AC56F 3C987464DB829F243E304F4C59CDE3EF6EB53A4EF9BA91510CB89A3407261F58 A2AE66880BA98FC1EF546112892494C85A2C39F9DCCAC5766725894A7AA148E9 42360AE64BF3A4F1F9F0A0D0C1AAFDC4D50C52233AA595B7D0CE557D4A010D86 6E6B76A7E9523E8A6633DA9348BC3F59302F72F492A30782AE7EF220516893D3 DE836CDE311DED9262AF01C506040541EE84AAC539B404B23033EF56D4BCE6BE B05F79CD633FE75C6728114D2749E39FD7454050F67763AB636377BA8E1867C3 996C7D7D4A4A02BC49D1AD7FF174C1F49F1F205BC9D5AE42BCB02CF8554E8F5A D1876C9285B6CCD7B8C165F75843B0AA11D8462B57077AFE75BAD086E9D9F91E 30ACFF91776132F3CACAD1CA5E08B17B36A0E45ACBAC52393B9AF9089BD821D9 CD5A9CD9BECA59F7445D63DECC1B4502D299DB85B6E2EE7C69A1DAB91E22A3A5 89B524FA20AF6005E7A586B90A2C6E5A93C9EFA4ABEF5F7E4C7B81363FE8D2B3 0AD637FA863DE787581ADD7CBE463F7866C40F4E280260ED0E9C8453E5C7E668 FFF058B9742DD3F131C264F8FA102CD0DA05F3114D13D34D422799181453FE23 2FC6EFB01BE420C930B879D671F3DFB036197874725220644A5A52DFB467BB75 8089E4F40CE9401777B9FE1D0AEE02E782A6EB2A185A454AE9394094CDFE7CFA C03C23A78EAF242E4F811E4C83B59EF4DC5ACE4AD37B41616B46C263358710B2 6137314545CA6CE89119B42A3518EC85C68DC07D26839C68B1FF55C4A9CD518B A1FB32F9C475BB6110839FCCB94156E7B3648F27245A00D2966FC4DDE3996BFA F463A663CB6935B596B1582ED0ABBC648AAA8A86068BF0038001C753C8BAFA0D 2058041DFA720B528E2D4B16196DB1CF30C779D3F4800FE662D5B60B208341F2 A66EFCB8448C2FCD12DF0DD899911A8BD96C9B670054D328790E5D388518B146 8CE92E368EB1DB3CAAFCA4834CC9D9D9DCC80FB1F34F39DACDE643052C977A7E A95C5FA8DFED9B4DCE769E4E46256D6DA8FB18FD7FA4E4CED5D486803538F3B4 6D3F5B3C03184F5C26C66DBB4C724918EBB6A89C4602E4EDDA81EEE2BD18B683 FDB459F2CE0A9CED23DC208EAA8BEDB304B00E093DEE926A7B32FDB2EC70DD85 94B9137856DDDABB402B2C76DBA87149051ADC6007018EBDD571BE1D092EBD95 76D4E063AD7D5F62E6C26EDB88D38678F2806A1F4900B0ABC4ED034A818119A4 E618F1A902315BC98F26775E59555A3DCEA1D0F8B20A9084920ECBE3F7F245AC 1182A40B518B194669D95DE968542BFF80FDC89669BC256C44CB66A2AB8CD7A9 E42C69956CCB6BDE8C09AD22EF3196939B3B84EB23A6E071A36D702909E019FF 058F27562441EB5CAE87A4407F67C4390810BE89BBE867D636468E73677B84C8 5A1228DD7DC8EADA221B1BAD5F43E832F20ADE7ADBFF170AB306F5B711816FD1 39B7882556E30F002977FB88D8B28826A75DE0D20354A2D41F2DA8578376F7DD F27B0F59D4DDDF5790E11E3957491DC74EEB7625CA49FAD90FA47AD8E0BDE824 FF326A84846A47A21B70FA549BEE307F9C6970009F963B49A504F0115777826F 1D81203F655C242FFF15BA97E3BDDFBF435B10E74CE8543C98966223818839B3 6BF3BC63F882B0AD0FDACA8C56A570277952E1D83F18BEDF084D2AC004E2B09D 70DE1740D7D220E92B54D2FD0DDEAF1E08C41FD321A8D474982DD105B23166A7 AA9E0129DC88065B1E0F9382BEB4B4E1DAAE3EA5489BDCA921AD5A8175F2841F 9400478DFA99C5E5553F383882664D73FBDFA29BF32E52C28DCE80DAF4839434 022FA515679DBC13FE98968D2894DF5DD69C49BD23D00F5D858B69D1F220F968 F0700E13873579B3CFB658972098DC61F1DD580105BC27795DB4AF11A871CCD6 2E1B9AF7F0DAAD4CE315379A7B42CECB983DAC5A2B9426B4E5E0A7F7978504C1 DD7E30063AE3CBDFB24EA2BCCDC478AB82084FD30A4793F4707D9F8F9647B413 F8A5C5AC6D5EA0E35628CE1096A434FB8286F4617CB4D0AD30A4A0B255A5A356 25AA5A947FD3C4FA44B4AA80BAB44C48CC1E2C6D0A711365A37A58C3483D07ED 301A83D2650A2E8CBA9EE62FF5C2736EC82C1402959F64527F9B640619F112D9 8E0F4A8A3078C72ACF3F34AD855AA4008C96E30D9E8C414607C34E06E29AC5B9 2EE5DDB823E8C3EEE6A8DE228313D476A7F39B5DFBFBDEDDF7C45C1C88EE6D01 7FB4F7BB2CBBD5DF7F0CBD98DC287FA6940FBFE1B3B136613A3CF16634CA7B90 53D5FD5776515EFF5D37F8FCC62D8BEC8EE2216503D54D6F2032D3C2BF861E15 FD1B45B71576F15852EEA65DD372E911EF4CC18283CD2FF4196A3F1A9D81137F F1820EC604D6C61AF318C6C5AB6DA1EDF305CADEF7CC0183B86D31310A09972C A4BC37D110C77ECCA614D1A281EE1C2040B4A5ECB31A3FC61760F608E44332D1 D2C53C7891B505A3020E9E4915F3618588FCEC80B9ECC5E637D8D0F3C94B1F2A C53FC46CAE0AFAA7E12266C212A73AAE60199752C042BD55A5DF1CD07FBDB830 C83E7832D8554AD9C9CAEEC7CED1DAEE622090897641CF2E5B34A353D83264D4 4687522DB290D3BA927BA315EA5D25B0D7B69350C6C180AB0C322B05E01F7C7D F2F48651567F0C1B49AF3950E43C94D78F7B184BF2946B924BC4279AED28F3A0 17A7D8B235698A516D3FB5DF0B18A422B2410C385E7E9439C6D60917EB3299AD E31471616251FA40C9FA098109BB31A54D9C03B2F12947E4E9252A0851B81C4D F39E7FC44752504B589C3911571B1D3EC3BD1E1807F99CED1DB20270E483A805 CA2A016E7283550D1B1D35C226FAB63F983CED41A4D02A2F228FA9EF065027B3 CC69D6F2E278C0A2D238D3A37154B0D22281F62C61D9182A69657B027BBDED64 11E261E47620602F865221A534C5A32E2BF5B93A187911A146F2E96538B47DBB 7BFA7EF406FE940F4DAD17E6E4B80C4F031D71F65657C2F5C8233EEAC68DE8A7 E1FC3055C122C1795D0C71A0284F89A9BF04837F61C9E08DB42644A490C97D34 A5D3CEE475B8D578205005A0D68AF94AD27C0E855BB8EDB74775690A4EDD6543 BCC10CF13283D6FA8A7CF3FE6C4F96470A11FF0B0160D3F9816B13B0BAE0D8F9 B84C7631063FE658D13D108D6FE24A89799FABA72E6A6D1C943922CBE676C1B6 11A4106ECB4F1A7F8A84B2783C2E6A109C58D63FC0B74D8C8A1CB62D527441AE E656D94B1AA8581B4F07B653ED6486AAE1F8ADB30FA8D8914AF24721C74B0908 D84F2EBB91144ED4BD7EF533F2584048DEE37E17CDE5FBC2992A6F924FEBAF07 B626F988599DECDAB43C931CFECF99FC6EBB72F8E542765C26295902DFF60B7C 7B9ADDB4858BC9D808B7F0909690CF8DFBC59A786D48B891937C31A219842A43 234425B4963062DB4C4E9F534C77F4243408805B5A6B8BBF428632CA4AC03A7A E336DD181CE0CF3E742079E2919EAFABE16A63299771BF276EFA8D85C920F995 5B9D4E8F1ADFCC5C29AA89BF90C186C5DE7679906B2FD4DB279D245D27D08837 D3A8D541FE37415B706EC585C05804108C1D938E543B8B63E275EE85CE9DD843 0A8B9163144B77DA1A552A25D5E77E94F29CF252BE9950F4E627D5F72536B6F3 3278D4A45D10759F16AE42BAE8460865FEE84537F8EC9BF4813570E883B826FD 1ABF3F4E66DB6FEF8366E07BCF290EA67D39C9D81B2A7EA48E0A228FE3D5AA50 1A56CCBF229C9AF2537A8FA70EEF41096ACED34CC7BEECA4EA1F23B39FBC39D8 CCEA93E63F508CBE6722C11467A3D0D5C4C52031DE43C449333E4295104651CE E13B821D7904653346067E971BE0042C571ABF40C3A1079A675FE4264B784D46 1B8FAA4CDE9851C4EBF69ADF51A7B68CC8706C08D13A44909D4C1D78DB0E0B2D 0E0318304B229DD2FDC968027CDFF65722059C62154304D6F9C3F06DE22914EE 928B7D1BF1FC7E74B4D882998D59BC086AA2D4EAD0AE39F6B75B5A3FB9994506 E21731E1A15F0F2D12F88724BA72898197A80FDAC00243A3038871EBD2F2BAB1 C616278BB78490CB86F552CBE5DD0862F3793D72C68AC16AF8E38FE1A523A5FA 9B0428745B1455671CFA1F6BFBCCF9CA23C833113C2948E7A6AEFFF1A83509FF C559BB5EE7F92BB43F7F37A371E661C826F63DD0C1B25E34A8119E71EC82FB66 23C7B126FB6554E7560B1B69F2EDBB742F3B20D1648C151C37A8570CBD330A9E 7592A8607D2D727F3AAA0FF2057DF4E2A4C7D3B658C6CED38824A770420D89E7 F6AD385DBCE9C9A9095CF0042052A67AB804A6675BB9373A99390CBDFB715984 A069DE543E4C6ADD7F1EC7A15392EF834EAB4584679A43443953427DB13E6959 0F2F5061C99C6D00FA5327FDB5330AEDE19A53DE3AE092634DC6AEEAF63A5BED 990F8A117AEB1CA0E7F7DBE02CB3D86465F1613B976D1CF6F3A1E69740A2FDC8 062ACC45EDA6B863B60015F276860FB79C31D28F97A799568E66D0A8757B2C41 E939337B467303041D0F4C59390B2E41E5F298F275DCC699D27C459ED4D5ADBD 02539F00095D7E1872862142B46BE06513D3EB1A406E6BAA64BE795122100F09 C37E5D1834218EC1D11B031C7DFC9F5AB071A8F4DC08203821366959E9191D4B 289682D915AF28CE5858F83338DC51B6B0DD052A181D9133FBA50CF18F70EE65 C33726A0450EBA9D0E0C3662AF6C2121AB7911AA9880D6BB6811D6D7515888E7 199A0E632104059A88C9D85B19BB35EDF4AB95E1515BB2339572928BD5FE8CBD 2D4DAF55DCFE29FBC4C3D56336277BA0C9A889A129F9FA7052AD1420B8705163 1A808EC1284C888D78CEA2B4BAB71AD76289F5F4986008FA9BF328E8537E6C91 E11DBDD8447E1C9ACE18DB0EC3D5742C264C8EFA445C5D16C2930FB43669774F A2CA52144D99EFA8FC427DB4128CD4C036A8C611B087335C780740FAA419D39B 5DD68EA89C95275F9254D947EB3683D0130255269B10C6CFF29EA0BE484C9949 96188FCB747618A8044E2E37DFFD2DB8ABB621B34DC024259340677095B6937A 78EDCF508AC91D4CEFD872AD73F50582DC8807143CEB9F109C84DC5DA30B64E2 E56DE973088A9D32583D6946DB4F3523902FB1781D993B89D5F56D79D5D98CC1 7FEE73FC3A7D1BCCE90179AE450829E228B4DEAD3B2B4C79A400CFF899AB26F9 048B0875EBC871AD23BA96F88CDA8B87FE5809A13889A6AC349ABB25E54ACAA9 C213C5DE2D01BCB9CC0D7BBD384D23AE12E289FF8FDF1F611F5E14D4B20B15A3 42D9B3B37A83A9CA39B5DB6C8316C51B70F211530A56CFE54D63E88169CF5233 D1A7B2388025B3EBD2BEE0716C3A2D589EBC7A42B3DA602AC4E2FD9C9052C922 711E44408DEEA1FE0C9FD50A39AD46D437F61F284A2EFD42EF158EDD71A1486D 4865D6B5E20E60F4F4FC3D646909FF1EE2D7573665E4CD8340A1B232CAC0202C C35BA9BB3D2267C7E78518F6711633F888EBEF72DC750AC2CB362D528CFC8B2E A1AE1C05456F50EED8CAA768DEF47FF85C4322F02D7F9D188C6F285C674EF589 251B0B913339FD701FDB281338D96704ED7ED908BC113B4275A24D058955890B 12CCDD5572D63688426B0E1E9A40D6AAECFA5555C1CF9DBEF8C04CE1E5A63F14 969D39B6DAE8A91F6AF4CD1E2DA89A4661DA34E272B6032C442C031F081F5DF5 858F4620885773D8A2B2F5EB6DDA74C1408DF279900450E4A3E80BA9A9B1295E F24EDC3F6EFD81A741EF74B0202820516C4FB720687BDD915EB2396128C3B262 20E3075DA153D6FD36E1C05B855929DAA4DE694B6F15EF2145C63250B24B031A 4CF0AFDB225E91D99828B83BD90F1702D3906D45872587A3A116B138AD9627CE E778A949C392202823C670FDBC56F1896FFFFBCF52C4B400F67BA36B5FCE44A5 F18EEB8ADFC088C99DFF8E0A593E81A5ACA2E3693005F723C7D3E0AE2BDD3805 8C6007A00542DEB2539709558A88B21003CE4B2C7817AF207ED576B25A41DEA0 FC55A459BEB00ADB01309B35920F04F84B7B64F95AA99EBCB843A06CED900D99 97BEFD7CCB9F4D85876F10160C8D63E2FDE82B7A8D945F37CC9933ABE0FD1D76 268296B1A5AB06B2E814691128771694224781171DC6266BCC290FCE1AB59416 85530368115BABD4F1DE45952918D1945D51EB713C283DAE8EDD559F437CD886 A4B1DA6120D685C284673A3EE489FC1AE4297A3623B339B7D886B6B4B8F9F4A3 7BF85E320A52FDC6323B51879B98A14C33C567BC069D9B44616514EE1BE36F90 EC5FA33E1B6B0A46945D876EF0085E74935DF2560A03321861A752E59742B9FC 5C501FBC64BFB1602459885B63873DC857ED37F8BE1A9C6E9517B9BF5A6161BD DEB6DB0381FFB34A8A96AB4AD48BEC40D4C198ABC599C3758AFF638AA75BBDA4 8545D5F95FA426FB25587301A43E176F6CED7851E815AD907F2443E70740DD2D 4FBD5D978B9B37F59D6DCF0ADD0F90825DD23558FCB858513602C8BC82BFA383 7AA6DCEA4009961D06DF233C5381A7F9541259926446B2F03664BC5978A1B6CD EA6EBC9FE6100A65959513EEE32E69D47B55BAF30A893D77142F943982019C01 715CE29923795EA01C58A798979939B507C5B29A32881877EF7EF0C5CB3DE591 6B9A6C3F3FFA847F396A396F078860B59850BA4CA3115CA2376AEE6B30C05DC1 6F9DB6781ED0F9D45D10E096C33B1B7CD12A9D57C6E49AD833C4B093DC82811F 16B3BD902BE764A1680831EC5A6C1CED84AE0DC0A65678EA5270BF20931E6409 7AA44EACB22CCA11098F8A51096BE83A1ABA56C9EED4195D5CCF24FDAD92E823 C439DAAFBFD652157D728F2754F28304710D3CB33763156D76A259D446647A11 493FAC70DD28063A4CDDA162F72542368E1AC2826C4BFF7109208F66371910C1 068F21779FC39DE03AECF1C9FB2F417930C22791961D801284DCC89B0833B6A8 D63F153ACBFB7B7D547924613BBCCAED37D90BAC5B0264ED31C7B9DA5A2BC620 9B20CA48424D0FF58905BCD6190BF4B5FC6ECCA1BCEF13426920197CAB41C4E6 E82E8EE7BCB23C6BA6F8B58001533B225ED721D6CE3D6E89116EC33CAA6E905A 649F8C6A1AA187A48E20DB864596481976216DB78F0F57543DFAE3CDC0A6FC77 2CAA49442527A5D94DC54BE93C875690CBE52EAA4EDD9F2A511361BC0F0807EE 96AD0D26B62D809E82EC14EDB158EF48A748A6FE0C3A7EE5D4479B35425F35AD 3EC7444F6FA75CEA5011AD571078293448A33C7647611CAEE87974B0A756DAC9 4E1BA78DEE477FA59AD50BF5C52E068A5E044A4A4994D5B24CC5045F768A3C51 D4F65E2A5AFD271A7666C6835E28C60751EE528C0742433165AFBE71562A3016 F59676D56B0B5F7E4984D664BC3ADDAF24B4205752EE21D4B57057A943018466 09C3FA5D2C5BCBFC22A643586BC9E7A965DC34C0A7DBA435961E5BA3FEBC1391 A91DE01179B57D2AC8E9DDC61C8B96E9D3472F7F9428A1180A828D95E5192EF5 C9813BDD6D1B9DE5FAB1CD26CAF49DC6A7DE7CB1086F9A2441C1A3D9374011AF BE3B54977A19F85091138F528B037CD159FEDD9348D5983E04DAB96A634CDEB6 86CEC585677131B992DE482C8FB5537B02D6A483446B245A83A4B83116D297C7 639767A6FC4713C309364EC9DD674E2A22C9AD6EF41B5F88B82CFFD607BD9EBE 0E84DF1261252400FF346C6AFA9D85C9CB0414FA07D6B42738DE1CC7DAC508F4 403E5DA38DF2626F172AA766C6CE38A97B222430CB99E97048161FDDC15F3990 2CF1C59B36FC0E70979C8BC782C74B3050FC04BCE079AD1CDE9D9C44B8742803 0B656EE7599834DBD8FE44B82CADCF5E08CEBDD3A2ABBEA027C6EB47BF8EDEE8 ECE9563561E742EF2EC8FC88ECAF45DF04E975EF2D26AD69BAAEA8AA9C694FB5 C708241EC74F43553344FBC4BF3A7AA92781282F8E9FCCCCDB9F3270972E1976 DE7BA0A5E16E3F62D24D049F5443D296380B940AB22BAF28C6762E3106EAD5A1 00337F3C7C5FA88A1A170E352DF34D8A155CA4C94523A07D4680FC97E0B53CE2 81C1A110584A3A1B1D3E0E642427B47682772C630DA30D579914A70EF0F0129B 62512EC1FB20700A89402A0567633EC5AE41E8B85174C76E9F19E8AE7697AF86 374130E0E71D5FED70736A0CADB909D509707E0DD3E9C38A7153B3AB08206759 76DA9C7F7D288947F3226260736122D8564B7DDC5F156CDA177BDD4A92682368 0D96DE2262129ED8852C06C215C800B32FBA1600085F761A1A42A9FBF8369797 F9851B08183C57D0BE11C8EC6917883A4E3C7732C7129E5E5562BA190FAFD78B 5CD320D1A754B2FA1FF22C1DC28B2BB0C6843C6599B9CF13987166B7F3E46E05 B0E078274621EDE99540FC1880C78791D7BA0AA3D35B274D88F9BD84ABED210F 83D5041C0DF46FA82793FEFC37CB377E812C7CDE37A851AEB4297C8C521F814A CF4186BEF7532360C2C19E048B916FF8EF506E52D6520F565B3CF1A7B0B3131E 0F78EC28FD13BBD791A84A1F887100C212EDD7D59E509249FDC61297D05F22D7 2EAE3C417AA6CE72BD5F0F675AC0FF26D3B9A02A032CC71D0BF18415B890E482 BA74212E23CC37B4F0E32C07270D0B573FFD8D61BFC7922CB09C5D44456E1FC2 ABC9438D465193DCCB18924936485039546B3DC1622AB459B8A7FC250E7351C5 238C5C2EE30C734469EB72C5A5CC40EFEC85AD6FEE1DC3C99619C5E2752EF908 16EC77456C759CC4332AB0843E1147546BFEA68E60E8D4D6C0B3DFF50EB94BCF C102BE892F8F9371C064A8E5C561093547BEC42522CA770D24670FF376D90036 0642CFD178EF5B3D76EE7A92BED678FFE181B949E172ABEA1C7F2B7CE8A8E094 C1CEDAE5133569DD265E8FA142BF3A10D08F6E64DC36C70DCCB5E6AD8717A5CC 188EF38C611F48A393DCB95F091579143B234EF2E871C95FBDC062ACA066B2E4 6BC078E9DDF9D4EB5E18AFEF460EE48A276C9085E66F0E55FD3253F707CAE30B 93142CC0B349B52593F1B7429FFE11F87A7EEF17E935C7DBA2E6C4C529E69FBD 21C43C2A8D43A8337CB453A51196AAE2EDC300CA43E028CBDD16B59413FFEA45 010218E8FDA81030B19556B121C23C7AAC811104F4350E5B7C8148BA0F5EE165 832AB3CC62DF88E088E0F0298116E4241CBA220758F2DCF4546E8C85B4CEE690 A2A970A8335CBA57A95C90B5F90DDFA880EE549768BF7DDFCE1CD097FE44FDFB 8A958C287F3374F2EBC7D97B7022ACCAF90A50A4176898D4F811319D1845635C D2367744BB613B27643FA59B1ABDCB0C4872024931AE9C0FDFABB0C25A48B8AF E69DEC307603A0349BB3DC2E7C23BF0E0C9626B046DD13C6182419FF8869121A 79F455B7DC24C9DB6F3BAA4ECC9DBC5A74361AD93FAECE9F60AE0D9DC90C5F25 6DD404A43AB89CCBDD4AF7B75F153253825127A0CC5A8544EFA3F3DC440E60A6 87BCB79798D7D020E8EFC8FF00E7548F4F4BC1B3516814A3E1D8E354E0746DD9 FE06D557FCE102015A7E10A915DA052A610C920F4689C76E1557D4DE7BE98C6C CA0D7CDF12186E2BC726CDDBA378E6C173895157FBEE9CBF67A5D6440478134F ACBC26A1CFFF5A872F19D9005A24DABC8DC14972618BEB2B044D080B6A9CFDB1 6130688659404D9BFD6BD879C7427ACF106B040B86C5B1341D60AD33D4AE397A A9610279509369F9CC2307A3F405B8F8E7133875BE15705D652884036E096E41 4CF7390FB23489415FCC992D27537FF620AB122B8442B81AF039EBE355F576C2 C35B372127BF856D4E0AA009674D3973F49EB374268D7AB48BB526C55317F40D F765F2EB87985AFDFBC83AA027CBC898799E0557BF8923A3675EF001B65828F3 2AC3ADB2CC8F472989728D3C307F7E1F020A800903A4E956C719962A148A2D7A A8CB92EC95A7BD9B449DAD79DE345CDA8B3736D78F94A8755D3C96B9675DFD48 6CEBF3DB3D048C4169DC74FBBC2887F0B3C934CB4FAD7B286EB4F944AAB033F4 459C415890414094497A789E06CC7AD20DDE22CCF16E939DE40543A52E1E5558 CD49708F42CECD3CE513ED163242C8A1D38091404636B2804B88039667CD2DDE F0D518C351B50F4BDC0D996920E33B5409C3451B5B08F1ABE7D606C37FC2FCDE D22FCDD2EB2556939F2DA3633E8404F9DE3C470D445758C70298B60C834215C6 198359EBA9C191C28703CC7D08D765486AF4279B318016897C599CEB6D7E6CF4 BB83999D3757471DED44FD41BC8105AFD24A996371331AC29E7F13D730589245 80F5070782A0031B5725D1E66A3C3FA4A889DE3E1EF07E686DE607C9F3890FE5 9210C6B7F0979B9EEB1F3D6B9DFD4F2DF03679D7A4591069890795DAE3D2B1CE 80A9F9F2DBDD4818FF719C73E575948744858AF6BD9AB7DA823D7B3D75CEDA00 5A89B366A43C83193EA40CA63F71E0013A1F0D6D7F94E08CB3F07881E8D34E2D D55222AEDD1AAD85AAF25B52EFF07EAD8C3A442FD1B8F053F5D467FD87F83F13 FF451036954F7395DB7F62920E6D82D1A04A7963BE60945D9A77EEAAB37781BE D3688F2AE65DBD57AA81E62D51DF52AF9B6A1FAC0BF5E8DFBB27ECB6F9A585D4 DB16F7CF676B6D86A9E639753D5EB525B693BBA086A5367407B51C43418F8245 409A58EF771078093400935F29676AF3922E3A91CF860C725372EDE1D951E59A E2F7939AF4256117E7A7E89FF4EEFF0432AE8F0F19462FC176E3F39C3548B561 AEBBD97F34DA4F8C22D0D1878C8B6ABACFBCBA2C59DD13A06399E700126BD341 01B362A61B808787BACB398D72C70C64D04323CA07FA1BBFE2B465D3BD1906B5 054DF1C86CF4DAB681D43DFD7FF3C44B5EF663212F933EA1C8CBA1292C8C1E53 00A8ABDE3B7241444EF4B169DC218EBE3632202278203329DEC208E6D72CCDB2 76E8114AB251EAC8E725BDE3A5384D1135234E0589428E51227DC76602E1066D 37DC487A28A083177D5C26B35BD62A31F9573483DC38C5D092CC981A36EF1446 857960A83F0DDA902D29EB6AAD583E6F80C97BF4437521E1E762E349AE05375E F036AF0384E75798F2FE5A3687C5F749E339001AF2EF658EB7F64A2524F760FF EBFF3DFF32EA99BC030FAC5E934867B4C8FD88126F471D46FF6E0FFAFE5C36E9 D94E1041D29C9824DEE6F1F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if TeXDict begin 14717302 13473704 1000 600 600 (./tikz/all-figure3.dvi) @start /Fa 207[18 48[{}1 41.511 /CMSY5 rf /Fb 255[52{}1 58.1154 /CMSY7 rf /Fc 133[32 34 38 5[31 5[21 25[50 1[42 50 13[50 34[40 11[32 18[{}11 58.1154 /CMMI7 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin % dvips-unknown statusdict /setpageparams known { hsize vsize 0 1 statusdict begin { setpageparams } stopped end } { true } ifelse { statusdict /setpage known { hsize vsize 1 statusdict begin { setpage } stopped pop end } if } if end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 0 0 a SDict begin [/Producer (dvips + Distiller)/Title (\376\377\000P\000l\000o\000t\000s\000\040\000f\000o\000r\000\040\000G\000N\000U\000\040\000A\000s\000t\000r\000o\000n\000o\000m\000y\000\040\000U\000t\000i\000l\000i\000t\000i\000e\000s\000\040\000m\000a\000n\000u\000a\000l\000.)/Subject (\376\377\000U\000s\000e\000d\000\040\000t\000o\000\040\000m\000a\000k\000e\000\040\000t\000h\000e\000\040\000p\000l\000o\000t\000s\000\040\000f\000o\000r\000\040\000t\000h\000e\000\040\000m\000a\000n\000u\000a\000l)/Creator (LaTeX with hyperref)/Author (\376\377\000M\000o\000h\000a\000m\000m\000a\000d\000\040\000A\000k\000h\000l\000a\000g\000h\000i)/Keywords (\376\377\000G\000N\000U\000\040\000A\000s\000t\000r\000o\000n\000o\000m\000y\000\040\000U\000t\000i\000l\000i\000t\000i\000e\000s\000,\000\040\000G\000n\000u\000a\000s\000t\000r\000o\000,\000\040\000m\000a\000n\000u\000a\000l\000,\000\040\000p\000l\000o\000t\000s) /DOCINFO pdfmark end 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@9} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0.0 0 100.00128 0] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@10} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0.0 0 100.00128 0] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@11} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0 0.0 0 100.00128] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@12} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a 100.00128 100.00128 0 0 pgfe << /PatternType 2 /Shading << /ShadingType 2 /ColorSpace /DeviceRGB /Domain [0.0 100.00128] /Coords [0 0.0 0 100.00128] /Function << /FunctionType 3 /Domain [0.0 100.00128] /Functions [ << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 100.00128] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> ] /Bounds [ 25.00032 75.00096] /Encode [0 1 0 1 0 1] >> >> >> matrix makepattern setpattern fill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@13} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 22.50027 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@14} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 21.25026 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@15} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 20.00024 25.00032] /Encode [0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a currentpoint /pgf@refy exch def /pgf@refx exch def 0 0 a 833 0 a /pgf@top pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul sub def 833 0 a 833 0 a /pgf@right currentpoint pop def 833 0 a 30 0 a /pgf@bot pgf@refy currentpoint pop pgf@refx sub VResolution Resolution div mul add def 30 0 a 0 0 a gsave clippath pathbbox newpath pop pop translate systemdict /pdfmark known {pgf@refx neg pgf@top neg translate} {pgf@right neg pgf@bot neg translate} ifelse gsave pgf@refx pgf@refy translate mark /_objdef {pgfsmaskxform@16} /BBox [clippath pathbbox newpath] /BP pdfmark grestore 0 0 a save 1 TeXcolorgray 0 0 a 0 0 a 0 0 a pgfo 0 0 a << /ShadingType 3 /ColorSpace /DeviceRGB /Domain [0.0 50.00064] /Coords [50.00064 50.00064 0.0 50.00064 50.00064 50.00064] /Function << /FunctionType 3 /Domain [0.0 50.00064] /Functions [ << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [1 1 1] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [1 1 1] /C1 [0 0 0] /N 1 >> << /FunctionType 2 /Domain [0.0 50.00064] /C0 [0 0 0] /C1 [0 0 0] /N 1 >> ] /Bounds [ 21.25026 23.12529 25.00032] /Encode [0 1 0 1 0 1 0 1] >> /Extend [true false] >> shfill 0 0 a pgfc restore Black 0 0 a mark /EP pdfmark grestore 0 0 a 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 0 TeXcolorgray -183 -377 a SDict begin H.S end -183 -377 a -183 -377 a SDict begin H.R end -183 -377 a -183 -377 a SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end -183 -377 a Black 0 TeXcolorgray -600 1107 a SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark end -600 1107 a -600 1107 a SDict begin [ {Catalog}<<>> /PUT pdfmark end -600 1107 a -600 1107 a SDict begin H.S end -600 1107 a -600 1107 a SDict begin 12 H.A end -600 1107 a -600 1107 a SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end -600 1107 a 138 -304 a 138 -304 a 138 -304 a pgfo save 0 setgray 0.3985 pgfw save restore save save /pgffc{0.9 setgray}def -53.15024 17.71672 moveto 124.01729 17.71672 lineto 88.58377 -17.71675 lineto -88.58376 -17.71675 lineto closepath gsave pgffc pgffill grestore newpath restore save /pgffc{0.6 setgray}def /pgfsc{0 setgray}def 17.71672 -70.867 moveto 66.61516 -42.5201 lineto 17.71672 -53.15024 lineto closepath gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath save save [1.0 0.0 0.0 1.0 39.14719 -64.9789 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(R)138 -304 y pgfr restore restore save save [1.0 0.0 0.0 1.0 45.68578 -44.31534 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(r)138 -304 y pgfr restore restore restore 17.71672 -63.7804 moveto 20.24821 -63.7804 22.58821 -65.13141 23.8539 -67.32368 curveto pgfstr 17.71672 0.0 moveto 17.71672 -53.15024 lineto 17.71672 -70.867 lineto pgfstr save save [1.0 0.0 0.0 1.0 10.10454 -28.07645 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(z)138 -304 y pgfr restore restore save save [1.0 0.0 0.0 1.0 -5.78815 -63.97627 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(R)16 b Fb(\000)f Fc(z)138 -304 y pgfr restore restore 17.71672 -69.09521 moveto pgfstr save save [1.0 0.0 0.0 1.0 21.23654 -65.5754 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(\022)138 -304 y pgfr restore restore save 0.19925 pgfw 42.28412 24.56735 moveto -7.08658 -24.80333 lineto pgfstr save [0.7071 0.7071 -0.7071 0.7071 42.2841 24.56734 ] concat save 0.15938 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.01619 1.35492 moveto -0.93149 0.84682 0.0 0.08467 0.25403 0.0 curveto 0.0 -0.08467 -0.93149 -0.84682 -1.01619 -1.35492 curveto pgfstr restore restore restore 42.5201 24.80333 moveto pgfstr save save [1.0 0.0 0.0 1.0 40.26117 28.32315 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(x)138 -304 y pgfr restore restore save 0.19925 pgfw -53.15024 0.0 moveto 123.68353 0.0 lineto pgfstr save [1.0 0.0 0.0 1.0 123.68353 0.0 ] concat save 0.15938 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.01619 1.35492 moveto -0.93149 0.84682 0.0 0.08467 0.25403 0.0 curveto 0.0 -0.08467 -0.93149 -0.84682 -1.01619 -1.35492 curveto pgfstr restore restore restore 124.01727 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 127.5371 -0.82332 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(y)138 -304 y pgfr restore restore save 0.19925 pgfw 17.71672 35.43349 moveto 17.71672 -159.11703 lineto pgfstr save [0.0 -1.0 1.0 0.0 17.71672 -159.11703 ] concat save 0.15938 pgfw [ ] 0.0 setdash 1 setlinecap 1 setlinejoin -1.01619 1.35492 moveto -0.93149 0.84682 0.0 0.08467 0.25403 0.0 curveto 0.0 -0.08467 -0.93149 -0.84682 -1.01619 -1.35492 curveto pgfstr restore restore restore 17.71672 -159.45078 moveto pgfstr save save [1.0 0.0 0.0 1.0 15.67055 -165.97327 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(z)138 -304 y pgfr restore restore 17.71672 -70.867 moveto 88.58374 -70.867 moveto 88.58374 -31.72774 56.856 0.0 17.71672 0.0 curveto -21.42253 0.0 -53.15027 -31.72774 -53.15027 -70.867 curveto -53.15027 -110.00629 -21.42253 -141.73402 17.71672 -141.73402 curveto 56.856 -141.73402 88.58374 -110.00629 88.58374 -70.867 curveto closepath 17.71672 -70.867 moveto pgfstr -53.15024 -70.867 moveto -53.15024 -78.69473 -21.4225 -85.04019 17.71675 -85.04019 curveto 56.85603 -85.04019 88.58377 -78.69473 88.58377 -70.867 curveto pgfstr save [ 2.98883 2.98883 ] 0.0 setdash 88.58376 -70.867 moveto 88.58376 -63.03928 56.85602 -56.69383 17.71674 -56.69383 curveto -21.42252 -56.69383 -53.15025 -63.03928 -53.15025 -70.867 curveto pgfstr restore 17.71672 0.0 moveto 18.77968 0.0 moveto 18.77968 0.58705 18.30379 1.06294 17.71672 1.06294 curveto 17.12967 1.06294 16.65378 0.58705 16.65378 0.0 curveto 16.65378 -0.58705 17.12967 -1.06294 17.71672 -1.06294 curveto 18.30379 -1.06294 18.77968 -0.58705 18.77968 0.0 curveto closepath 17.71672 0.0 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath 17.71672 0.0 moveto pgfstr save save [1.0 0.0 0.0 1.0 8.20538 3.5198 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(A)138 -304 y pgfr restore restore 17.71672 -70.867 moveto 18.77968 -70.867 moveto 18.77968 -70.27995 18.30379 -69.80406 17.71672 -69.80406 curveto 17.12967 -69.80406 16.65378 -70.27995 16.65378 -70.867 curveto 16.65378 -71.45407 17.12967 -71.92996 17.71672 -71.92996 curveto 18.30379 -71.92996 18.77968 -71.45407 18.77968 -70.867 curveto closepath 17.71672 -70.867 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath 17.71672 -70.867 moveto pgfstr save save [1.0 0.0 0.0 1.0 14.57957 -79.15234 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(O)138 -304 y pgfr restore restore 23.74036 6.37776 moveto 25.36765 5.4382 26.55592 3.88971 27.04219 2.0747 curveto pgfstr 23.74036 6.37776 moveto pgfstr save save [1.0 0.0 0.0 1.0 27.26018 4.63428 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(\036)138 -304 y pgfr restore restore save 0.3985 pgfw 0.5 TeXcolorgray 17.71672 0.0 moveto 44.20993 0.0 66.66272 -26.02473 70.34955 -61.00407 curveto pgfstr 0 TeXcolorgray restore save 0.79701 pgfw 17.71672 0.0 moveto 38.36986 0.0 57.15932 -15.95958 65.88737 -40.917 curveto pgfstr restore 66.61516 -42.5201 moveto 68.38692 -42.5201 moveto 68.38692 -41.54156 67.59367 -40.74834 66.61516 -40.74834 curveto 65.63663 -40.74834 64.8434 -41.54156 64.8434 -42.5201 curveto 64.8434 -43.49861 65.63663 -44.29185 66.61516 -44.29185 curveto 67.59367 -44.29185 68.38692 -43.49861 68.38692 -42.5201 curveto closepath 66.61516 -42.5201 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath 66.61516 -42.5201 moveto pgfstr save save [1.0 0.0 0.0 1.0 63.54279 -50.80544 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(P)138 -304 y pgfr restore restore 66.61516 10.63014 moveto 68.03224 10.63014 moveto 68.03224 11.41277 67.39778 12.04723 66.61516 12.04723 curveto 65.83252 12.04723 65.19807 11.41277 65.19807 10.63014 curveto 65.19807 9.84752 65.83252 9.21306 66.61516 9.21306 curveto 67.39778 9.21306 68.03224 9.84752 68.03224 10.63014 curveto closepath 66.61516 10.63014 moveto gsave pgffc pgffill grestore gsave pgfsc pgfstr grestore newpath save [ 0.3985 1.99255 ] 0.0 setdash 66.61516 -42.5201 moveto 66.61516 10.63014 lineto pgfstr restore 66.61516 10.63014 moveto pgfstr save save [1.0 0.0 0.0 1.0 70.13498 7.74315 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(P)189 -329 y Fa(0)138 -304 y pgfr restore restore 17.71672 0.0 moveto 66.61516 10.63014 lineto pgfstr save save [1.0 0.0 0.0 1.0 45.68578 8.83488 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(r)138 -304 y pgfr restore restore save [ 0.3985 1.99255 ] 0.0 setdash 66.61516 10.63014 moveto 27.63808 10.63014 lineto pgfstr restore save [ 0.3985 1.99255 ] 0.0 setdash 66.61516 10.63014 moveto 55.985 0.0 lineto pgfstr restore 50.66965 -31.88991 moveto pgfstr save save [1.0 0.0 0.0 1.0 54.18947 -28.37009 ] concat pgfs 138 -304 a 0 setgray 138 -304 a Fc(l)138 -304 y pgfr restore restore restore newpath restore pgfc eop end %%Trailer userdict /end-hook known{end-hook}if %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%EOF ������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/sphereandplane.pdf�����������������������������������������������0000644�0001750�0001750�00000041240�14557511162�016525� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.7 %Çì¢ %%Invocation: gs -q -dNOPAUSE -dBATCH -P- -dSAFER -sDEVICE#pdfwrite -dEPSCrop -sOutputFile#00.pdf ? ? -f ? 5 0 obj <</Length 6 0 R/Filter /FlateDecode>> stream xœåX;7 N=e~@ 2[¬"R/ªL€ @šÄöu†«5ÖFpW8)òøõù¨×h÷.öÒå|€g©áóIQóÉ8KÆé_ž6g‹s¾ù°ù¬+bH|°%›‡‰£Íy®Üo”3Ù q6y¬e/,´¬}ÜÎPKI®@1¹Äª¦„b‰ SŒds4ÄžmR½…ˆ“Uçí›×¿mÞ‰æ÷Í™ž¥éãö²¶OxU£îÓƒùîV¢3 Áy¹;o ÃÙf5ÎYqdî¶·_¿> Z³~w÷ã–lô’²a„|6wïÁóëáèm`Ç¢,ßßm¯v—;uÙ‰X'$ü³A —ê“8X ¦H°`žàý”O1[©.a¸Ómá˰y 3´ðþ:£M\¸¨ëGŠV 'sôú£¤ß0À«l •Â0R¹¿8ÕS'¥3_x<Ì—ö‹K@äHšIÌçËÃ1GrÞáµx­BÞIMÎâ°šÀBÁf¯éꊦ@©:ŸEù ¬˜_6@H6‰Ê!R•ÃJý…¶‚7Þùª5‚uOHûÐ$8c—ÀQ¬ %¤ Äš@%%ÙLu[oMH±Âxä‡ómÇþP4$³“Çh8DçÝ,ë‘=¨j¶Á…‰É #50J¨w«y$VRÒ7‹äRT=bš9­fŽ2 ÈZïÍn" o‡„)!²ªrƒäO…ÄöåŸ!õÃ. ØöŠJ5¹ÊÓ Ëh)lð.¾Jö&G[BD¨.y›hj™Z±R¬À^8°;«`ÃÓÂ3²ù ‡P¢T¼å©Â®˜ì]µCÒûÒYG«÷½ûà*¥±ÁWMé´ÕLÑNÜfÚuñA§™˜üˆÃ  hZ4Ðë.LŽîâÐpÄ Íÿñ‘ñf»öåa®HF™jG뾪ؗ=ÚAï¾LŽn{hxìË›í­á‚æ ~>ßa×Þ|‡s(оC;‘´£ßéþ¾2ñïã¯KF£\Ï•Nk«ò„Ò®´ÔJž[ÞhMg­í…!ÖzÚ ºçȲ€2¨M>dKy1ÐèZ/Ý…Á1<îòk�ëvϘÎ@½£ü¢½y@£Iš­ =¹5‹oGmùèÚË�S /éÙbœ°•ˆ6î•2è ÛÎÐPiÂý÷LÊ}ÅãP±»îJíx·ÝË!yáôÓ½àü?Žíö³ç³/FôlÊý8ýéásÜ“£6ºãx¬UËÚÿô,ÕÉZ Í-%qk‚eÄñœSžtÕ~ŠžO}RýJÇJ–äxº…Cf¹ ìEîuŸ‡VĨû¾dõ†¢`jÓc—SõlÆÀyáØõq­”¡/àA¨ácÄ(ƒÁ£Ø1¼GÔµzAyX[=´"F‚ˆ²æètºØo4F*Ä€úO ®c:kN ƒ®&T`,`Ó›ÙT€yXd1Ñh•N ŽáäÐpEM¸Ë›—ÖÒ*^NÌ7'³v�LïDz¡Ž-›>`h+¸bí5†ö«c"eŒŽÔ�ì ¹'Ö©Cê=ëtÐWÎÉ«^”Eૉ `_ˆ© è(Íd7Ñh•N ŽáäÐpÅ€#°ó ŠUÀV"ŒþÓ“묺’¼ýzOz'+ªÀcööO¤$ƒÑ ¤J&KõÞîÛ5ÛpÓ4»™’ûuÝÿ³³(\I¡Åå©×ÄŸQþ¼™>¤W,YýyÌB´aÞUžá3ºPnŸOBÿ8tß>Œ¸å.þjû¼ÇÏ“endstream endobj 6 0 obj 1360 endobj 4 0 obj <</Type/Page/MediaBox [0 0 220 201.5] /Rotate 0/Parent 3 0 R /Resources<</ProcSet[/PDF /Text] /ColorSpace 56 0 R /ExtGState 57 0 R /Pattern 58 0 R /Shading 59 0 R /XObject 60 0 R /Font 61 0 R >> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <</Type /Catalog /Pages 3 0 R /Names << /Dests <</Kids [46 0 R]>> >> /OpenAction [4 0 R /Fit] /PageMode/UseOutlines /Metadata 69 0 R >> endobj 7 0 obj [/Pattern] endobj 47 0 obj <</D [4 0 R /XYZ 49.957653 178.233963 null]>>endobj 48 0 obj <</D [4 0 R /XYZ -0.269996643 9.4861908 null]>>endobj 49 0 obj <</Type/ExtGState /SA false>>endobj 56 0 obj <</R7 7 0 R>> endobj 57 0 obj <</R49 49 0 R>> endobj 58 0 obj <</R44 44 0 R/R39 39 0 R/R35 35 0 R/R31 31 0 R/R24 24 0 R/R21 21 0 R/R18 18 0 R/R13 13 0 R>> endobj 44 0 obj <</PatternType 2 /Shading 43 0 R /Matrix[10 0 0 10 0 1015.4]>>endobj 39 0 obj <</PatternType 2 /Shading 38 0 R /Matrix[10 0 0 10 0 1015.4]>>endobj 35 0 obj <</PatternType 2 /Shading 34 0 R /Matrix[10 0 0 10 0 1015.4]>>endobj 31 0 obj <</PatternType 2 /Shading 30 0 R /Matrix[10 0 0 10 0 1015.4]>>endobj 24 0 obj <</PatternType 2 /Shading 23 0 R /Matrix[10 0 0 10 0 1015.4]>>endobj 21 0 obj <</PatternType 2 /Shading 20 0 R /Matrix[10 0 0 10 0 1015.4]>>endobj 18 0 obj <</PatternType 2 /Shading 17 0 R /Matrix[10 0 0 10 0 1015.4]>>endobj 13 0 obj <</PatternType 2 /Shading 12 0 R /Matrix[10 0 0 10 0 1015.4]>>endobj 59 0 obj <</R43 43 0 R/R38 38 0 R/R34 34 0 R/R30 30 0 R/R23 23 0 R/R20 20 0 R/R17 17 0 R/R12 12 0 R>> endobj 43 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 42 0 R /Extend [true false]>>endobj 38 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 37 0 R /Extend [true false]>>endobj 34 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 33 0 R /Extend [true false]>>endobj 30 0 obj <</ShadingType 3 /ColorSpace/DeviceRGB /Coords[50.0006 50.0006 0 50.0006 50.0006 50.0006] /Domain[0 50.0006] /Function 29 0 R /Extend [true false]>>endobj 23 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 0 100.001] /Domain[0 100.001] /Function 16 0 R>>endobj 20 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 0 100.001] /Domain[0 100.001] /Function 11 0 R>>endobj 17 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 100.001 0] /Domain[0 100.001] /Function 16 0 R>>endobj 12 0 obj <</ShadingType 2 /ColorSpace/DeviceRGB /Coords[0 0 100.001 0] /Domain[0 100.001] /Function 11 0 R>>endobj 60 0 obj <</R45 45 0 R/R40 40 0 R/R36 36 0 R/R32 32 0 R/R25 25 0 R/R22 22 0 R/R19 19 0 R/R14 14 0 R>> endobj 61 0 obj <</R54 54 0 R/R52 52 0 R/R50 50 0 R>> endobj 41 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[0 0 0] /C1[1 1 1] /N 1>>endobj 42 0 obj <</Functions[28 0 R 41 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[21.2503 23.1253 25.0003] /Encode[0 1 0 1 0 1 0 1]>>endobj 37 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[20.0002 25.0003] /Encode[0 1 0 1 0 1]>>endobj 33 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[21.2503 25.0003] /Encode[0 1 0 1 0 1]>>endobj 28 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[0 0 0] /C1[0 0 0] /N 1>>endobj 27 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[1 1 1] /C1[0 0 0] /N 1>>endobj 26 0 obj <</FunctionType 2 /Domain[0 50.0006] /C0[1 1 1] /C1[1 1 1] /N 1>>endobj 29 0 obj <</Functions[26 0 R 27 0 R 28 0 R] /FunctionType 3 /Domain[0 50.0006] /Bounds[22.5003 25.0003] /Encode[0 1 0 1 0 1]>>endobj 15 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[0 0 0] /C1[1 1 1] /N 1>>endobj 16 0 obj <</Functions[10 0 R 15 0 R 8 0 R] /FunctionType 3 /Domain[0 100.001] /Bounds[25.0003 75.001] /Encode[0 1 0 1 0 1]>>endobj 10 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[0 0 0] /C1[0 0 0] /N 1>>endobj 9 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[1 1 1] /C1[0 0 0] /N 1>>endobj 8 0 obj <</FunctionType 2 /Domain[0 100.001] /C0[1 1 1] /C1[1 1 1] /N 1>>endobj 11 0 obj <</Functions[8 0 R 9 0 R 10 0 R] /FunctionType 3 /Domain[0 100.001] /Bounds[25.0003 75.001] /Encode[0 1 0 1 0 1]>>endobj 65 0 obj <</Filter/FlateDecode/Length 162>>stream xœ]O»ƒ0 ÜóþƒðP;!º0Um 8Ê€…0ôïKtèp–Îw'Ÿe×ßz¶ä#8|QcYZÜ`¤É²(+ÐãÁòÄYy!»»òï'Ø dv>¨™äózÉ›rÏ Ó´x…O$š¢hcZA¬ÿ¤#0šÃYo΄ª¨«ì?•MΓ€kÄ1ÍERËôûÅ;ŸR°A|ðARö endstream endobj 54 0 obj <</BaseFont/SKVLCT+CMSY5/FontDescriptor 55 0 R/ToUnicode 65 0 R/Type/Font /FirstChar 48/LastChar 48/Widths[ 440] /Encoding 66 0 R/Subtype/Type1>> endobj 66 0 obj <</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[ 48/prime]>> endobj 52 0 obj <</BaseFont/ZBQUEC+CMSY7/FontDescriptor 53 0 R/Type/Font /FirstChar 0/LastChar 0/Widths[ 892] /Encoding 67 0 R/Subtype/Type1>> endobj 67 0 obj <</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[ 0/minus]>> endobj 50 0 obj <</BaseFont/VJHHIN+CMMI7/FontDescriptor 51 0 R/Type/Font /FirstChar 18/LastChar 122/Widths[ 544 0 0 0 0 0 0 0 0 0 0 0 686 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 859 0 0 0 0 0 0 0 0 0 0 0 0 0 868 727 0 860 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 361 0 0 0 0 0 530 0 0 0 0 0 647 579 545] /Encoding 68 0 R/Subtype/Type1>> endobj 68 0 obj <</Type/Encoding/BaseEncoding/WinAnsiEncoding/Differences[ 18/theta 30/phi]>> endobj 55 0 obj <</Type/FontDescriptor/FontName/SKVLCT+CMSY5/FontBBox[0 0 370 559]/Flags 4 /Ascent 559 /CapHeight 559 /Descent 0 /ItalicAngle 0 /StemV 55 /MissingWidth 500 /CharSet(/prime)/FontFile3 62 0 R>> endobj 62 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 295>>stream xœcd`ab`dddsö Ž4±T~H3þaú!ËÜÝýƒíÇaÖnæn–…ß }OüËÿ=J€…‘1¯¸©Ý9¿ ²(3=£DA#YSÁÐÒÒ\GÁÈÀÀRÁ17µ(391OÁ7±$#57±ÈÉQÎOÎL-©TаÉ())°Ò×///×KÌ-ÖË/J·ÓÔQ(Ï,ÉPJ-N-*KMQpËÏ+QðKÌMU�»ML:çç”–¤)øæ§¤åeæ¦200000v1012²Øüèàûá³qÁ’ùŒ/¾¯dþþçGªhOÏ”yݳ8Ög/ÊMjÈ©i“û­÷ǵ½¾»£»K²zkcÏ”Þ Ó'Êñ/þi¿í·òtöÃ\‡¹/äáb^�ʽhö endstream endobj 53 0 obj <</Type/FontDescriptor/FontName/ZBQUEC+CMSY7/FontBBox[0 0 784 275]/Flags 4 /Ascent 275 /CapHeight 275 /Descent 0 /ItalicAngle 0 /StemV 117 /MissingWidth 500 /CharSet(/minus)/FontFile3 63 0 R>> endobj 63 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 269>>stream xœcd`ab`dddsö Ž4±T~H3þaú!ËÜÝýsÉ÷å¬Ý<ÌÝ<, ¿w }üÎÿ=D€™‘1¯¸É9¿ ²(3=£DA#YSÁÐÒÒ\GÁÈÀÀRÁ17µ(391OÁ7±$#57±ÈÉQÎOÎL-©TаÉ())°Ò×///×KÌ-ÖË/J·ÓÔQ(Ï,ÉPJ-N-*KMQpËÏ+QðKÌMU�;ML:çç”–¤)øæ§¤å1000ñ2&FF­|¿¾—íaüÎðÓ‚ùgÍ÷2ÑÙ‹»/)é®’ÿó‚­º¸»¸hQ÷y¾âÅ?í—°ý–ŸÎ¾‡k÷žù<<@ÌËÀ��/\ endstream endobj 51 0 obj <</Type/FontDescriptor/FontName/VJHHIN+CMMI7/FontBBox[0 -204 849 713]/Flags 4 /Ascent 713 /CapHeight 713 /Descent -204 /ItalicAngle 0 /StemV 127 /MissingWidth 500 /CharSet(/A/O/P/R/l/phi/r/theta/x/y/z)/FontFile3 64 0 R>> endobj 64 0 obj <</Filter/FlateDecode /Subtype/Type1C/Length 1907>>stream xœ]”{PSWÇñZ1¾š-´öÞhWG·ŒJkWmE×Rí8–ú®¢  IH 7/ I ¯_žÄ‰^а¶¨]ëVݵ£¸>Æ}9¶kkí´ëÖ=7sèÌ^ÜýcgçÌœ9çÌýÝûýœûû~¹œ´).—ËÏËÏß´rrµˆy…Ë̛¼Ê\’ú:U”<ÈHëŸ7õæÔ4Éf¢’Yœt.·¦ÖÜìÌ“+tʪŠJZ´¸l‰(gõê•Ù¢7–/_-Z/“(«ÊÄ5¢|1])‘‰iv#í—UIhhñšJšV¼½l™F£Y*–Õ.•++Ö.ÉiªèJÑvI­D©–m”×ТÅ2‰è¹¼¥Ïç<¹L¡¢%JQ¾ü€DY£¨dK$´˜ÃáL_¯Ôêê¶lÝ.%çp8 8;8œ½œ}œåœΛœ|®“ œ —“Æéá®â>žÒËÛËK+K—¤óÅüKŒ]ú†ÑÎaf}”‹JQ†°rWõ¡­6“Ó� !Û|d/ y0#¶~8—ñš/G—²¸*Ü€P°Ãwø>š•‰Nò{ðÛ6S³~+d@eó˜Â}7½ÐGuB·³:1G'á–@8bý6G ÇN½Éül9Z´¥…f³¹ÀƉµBTŽîŠï§ ˜„)†Î>jKr™ßñíºüÝ_»}î@ß¹ÁžÖ@"z‚wF Õf£t„ª£¾»{¨kô³±=»÷« ŠIÝ•ƒµPJZ/§4l+ahO›Ë“h!#Wº>= Do‹J¡5—7)¨&…©ÔªªÆ/fÚ ÍJ°ªNS{$z8 ÝþÖýqBzÅ”½†6OÊ{‚³ÂÜÏ„¦ªƒ»ö€d n {†ÁO©‹ÐòšÚò‚‹ôÙOFúFãdÏGŸëN¦^A³“aØœV£Roܲ{eêĉޞ¿'ŠÞ=7 @¬áÿÈ.nî(+(;(Q‘º‘¢~¶ §mÆ3e“La—7ì£â÷®ž> ÄPB·Oc,0WQæ.I=I2T’ûðIÿ8ù-3Cèmc¿à'¢úP]£Öªm$íÍ–j«F½*³¹VŠçØP¼"ˆ÷á÷º¯öߥBƒ¾tc¥Çw-ÚçÕýç"}­2þ—Ó'Y²Ž@c-mVY Ô>,0•C1ÔAáÉêC£Öœ‚áÈP¿ag£X\ –üš ÔCü0.b°ÆoRÔí+¿ù#šyÍ ̨é.:w—‹Ö<öövvýíËXÇíË}É+—Oœ‡2€ÍlwX¬¤´H]_ F¨wÉúªŽªZh ÞÙµBfÚ[BnO«—Š»èn‡nèmn³nl8RètÙëróJ­fËÖšb0Æ0xƒnwÀG&N t…Dœ å€,Z?Ä¿®£GC®f£ÃÚh£´[k÷ JŸÒ_´€PÍN¶CÍPjÑ ÷ÆSæÂ÷¼Ô &Wˆrp:š7` Öc«ð[h:{òdFzTƒ4ä„xb¹p~Î8Z|¾ -x„øÔõ??9ûÿün^ø®/Z*¢6¼³¼”ý!‚T5kÛÄ úb˜›’ÿƒ‡¾EW…hå¢×qÿºz¿Já§|T ­p¤Ý ŽN*êp;ÀĪ´ÚêqæDO¦é€³‰}Ž}Ê †ö¾ñI·vÀ1èpFqG~ÖîmFÐ8µàÖQ´<¬Ý\à÷FôsLpyFÙ†žÆÿæ ù{Rãš‚ýTEõvmÛ–+ø‚Ôš¤eI¢‡ç0ןzúÒÜz&‡I [’nÏqÿ š ¿,Õ~PXA•Vçë7²…B>rè…hzòÙ8|E<Xø%^HâË|­… AÔÕ5 û_˜¬‰d¦¥Êaaaê  6µXwu{ JuAŸ«¢l�Å&Ó+q{ _;Ä"& õ¶I*•‡µÁ©®"æÜ³hÿÁñ’Bƒ¹ÊJSÆ"[=ÔknIÿøèÔ÷Gk½ÁÑd²“ Åå¥b i[/ÄýŸy›“Av„`PÞ¯)ª�!@?›’©icÜ«·yèX*[èr{Âl¯ûl‡šU‡’lr68AM4´Aë4YšÍ3‰gM˜í&g#˜²6ÿN:ÖÓ8ÓKÆŽ·]/ñ<6Í:i(Ðn.BÑïiõtyZ)Aê]\Cëú˜ù}HåÞ¸ÅäÝâ1©\aØÖz§µÎFnÇ:¼Á‚_Çs¿œ8ýéûˆg³H›ª-Rc¡¹œÍ<ÖžˆËó‘£h ZׂrÐ@ó²à§e·±ÀGà¹ÂµÞ÷Fá[øášÖµÇ~q×>.†lÀÜ·ðËø× „€1%ѵat-Éâ£ó·yL€Ñ *CiKð¯ð c•LÿdÉ#”Þ@½ˆ&ñC,žGÒ/q 0O{À²M½’2Wå˜Kï’í•î.+,b§ùÎ…?tÝ §š(“ †"ÊÇ%Á©ƒ/üi:ùBÚÊhÆ´AoF‡óo©@ç- endstream endobj 46 0 obj << /Limits [ (Doc-Start) (page.1) ] /Names [ (Doc-Start) 48 0 R (page.1) 47 0 R] >> endobj 69 0 obj <</Type/Metadata /Subtype/XML/Length 1531>>stream <?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?> <?adobe-xap-filters esc="CRLF"?> <x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'> <rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'> <rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/'><pdf:Producer>GPL Ghostscript 10.02.1</pdf:Producer> <pdf:Keywords>GNU Astronomy Utilities, Gnuastro, manual, plots</pdf:Keywords> </rdf:Description> <rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2024-02-03T20:22:26+01:00</xmp:ModifyDate> <xmp:CreateDate>2024-02-03T20:22:26+01:00</xmp:CreateDate> <xmp:CreatorTool>LaTeX with hyperref</xmp:CreatorTool></rdf:Description> <rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:1d21fc39-fae6-11f9-0000-02d0f53112f8'/> <rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Plots for GNU Astronomy Utilities manual.</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li>Mohammad Akhlaghi</rdf:li></rdf:Seq></dc:creator><dc:description><rdf:Alt><rdf:li xml:lang='x-default'>Used to make the plots for the manual</rdf:li></rdf:Alt></dc:description></rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end='w'?> endstream endobj 14 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0.00006104 2200 2015] /Matrix [0.833333 0 0 -0.833333 0 846.167] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R13 13 0 R >> /ProcSet [/PDF]>>/Length 47>>stream xœÓ2WH.æÒ24V(NÎã2P0404Õ3Rz†PÚH¡(•+ �ð¨ × endstream endobj 19 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0.00006104 2200 2015] /Matrix [0.833333 0 0 -0.833333 0 846.167] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R18 18 0 R >> /ProcSet [/PDF]>>/Length 47>>stream xœÓ2WH.æÒ2´P(NÎã2P0404Õ3Rz†PÚH¡(•+ �ñ\ Ü endstream endobj 22 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0.00006104 2200 2015] /Matrix [0.833333 0 0 -0.833333 0 846.167] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R21 21 0 R >> /ProcSet [/PDF]>>/Length 47>>stream xœÓ2WH.æÒ22T(NÎã2P0404Õ3Rz†PÚH¡(•+ �ð… Ö endstream endobj 25 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0.00006104 2200 2015] /Matrix [0.833333 0 0 -0.833333 0 846.167] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R24 24 0 R >> /ProcSet [/PDF]>>/Length 47>>stream xœÓ2WH.æÒ22Q(NÎã2P0404Õ3Rz†PÚH¡(•+ �ðñ Ù endstream endobj 32 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0.00006104 2200 2015] /Matrix [0.833333 0 0 -0.833333 0 846.167] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R31 31 0 R >> /ProcSet [/PDF]>>/Length 41>>stream xœÓ2WH.æÒ26T(NÎã2P0P022�†¦ E©\i\�‘eÉ endstream endobj 36 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0.00006104 2200 2015] /Matrix [0.833333 0 0 -0.833333 0 846.167] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R35 35 0 R >> /ProcSet [/PDF]>>/Length 41>>stream xœÓ2WH.æÒ26U(NÎã2P0P022�†¦ E©\i\�‘ÉÍ endstream endobj 40 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0.00006104 2200 2015] /Matrix [0.833333 0 0 -0.833333 0 846.167] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R39 39 0 R >> /ProcSet [/PDF]>>/Length 41>>stream xœÓ2WH.æÒ2¶T(NÎã2P0P022�†¦ E©\i\�’-Ñ endstream endobj 45 0 obj <</Filter/FlateDecode /Type/XObject /Subtype/Form /FormType 1 /BBox [0 0.00006104 2200 2015] /Matrix [0.833333 0 0 -0.833333 0 846.167] /Resources<</ColorSpace<</R7 7 0 R >> /Pattern<</R44 44 0 R >> /ProcSet [/PDF]>>/Length 41>>stream xœÓ2WH.æÒ21Q(NÎã2P0P022�†¦ E©\i\�‘ÊÍ endstream endobj 2 0 obj <</Producer(GPL Ghostscript 10.02.1) /CreationDate(D:20240203202226+01'00') /ModDate(D:20240203202226+01'00') /Creator(LaTeX with hyperref) /Title(\376\377\000P\000l\000o\000t\000s\000 \000f\000o\000r\000 \000G\000N\000U\000 \000A\000s\000t\000r\000o\000n\000o\000m\000y\000 \000U\000t\000i\000l\000i\000t\000i\000e\000s\000 \000m\000a\000n\000u\000a\000l\000.) /Subject(\376\377\000U\000s\000e\000d\000 \000t\000o\000 \000m\000a\000k\000e\000 \000t\000h\000e\000 \000p\000l\000o\000t\000s\000 \000f\000o\000r\000 \000t\000h\000e\000 \000m\000a\000n\000u\000a\000l) /Author(\376\377\000M\000o\000h\000a\000m\000m\000a\000d\000 \000A\000k\000h\000l\000a\000g\000h\000i) /Keywords(\376\377\000G\000N\000U\000 \000A\000s\000t\000r\000o\000n\000o\000m\000y\000 \000U\000t\000i\000l\000i\000t\000i\000e\000s\000,\000 \000G\000n\000u\000a\000s\000t\000r\000o\000,\000 \000m\000a\000n\000u\000a\000l\000,\000 \000p\000l\000o\000t\000s)>>endobj xref 0 70 0000000000 65535 f 0000001860 00000 n 0000014557 00000 n 0000001801 00000 n 0000001572 00000 n 0000000122 00000 n 0000001552 00000 n 0000002011 00000 n 0000005637 00000 n 0000005557 00000 n 0000005476 00000 n 0000005717 00000 n 0000004111 00000 n 0000002923 00000 n 0000012109 00000 n 0000005264 00000 n 0000005345 00000 n 0000003996 00000 n 0000002845 00000 n 0000012418 00000 n 0000003881 00000 n 0000002767 00000 n 0000012727 00000 n 0000003766 00000 n 0000002689 00000 n 0000013036 00000 n 0000005050 00000 n 0000004969 00000 n 0000004888 00000 n 0000005131 00000 n 0000003602 00000 n 0000002611 00000 n 0000013345 00000 n 0000004755 00000 n 0000003438 00000 n 0000002533 00000 n 0000013648 00000 n 0000004622 00000 n 0000003274 00000 n 0000002455 00000 n 0000013951 00000 n 0000004389 00000 n 0000004470 00000 n 0000003110 00000 n 0000002377 00000 n 0000014254 00000 n 0000010401 00000 n 0000002037 00000 n 0000002098 00000 n 0000002161 00000 n 0000006555 00000 n 0000008172 00000 n 0000006326 00000 n 0000007610 00000 n 0000006077 00000 n 0000007023 00000 n 0000002206 00000 n 0000002236 00000 n 0000002268 00000 n 0000003001 00000 n 0000004226 00000 n 0000004335 00000 n 0000007231 00000 n 0000007819 00000 n 0000008409 00000 n 0000005847 00000 n 0000006239 00000 n 0000006469 00000 n 0000006929 00000 n 0000010501 00000 n trailer << /Size 70 /Root 1 0 R /Info 2 0 R /ID [<4333A85B1936845180CA7C21C3202A1E><4333A85B1936845180CA7C21C3202A1E>] >> startxref 15502 %%EOF ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/sphereandplane.png�����������������������������������������������0000644�0001750�0001750�00000041302�14557511162�016537� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‰PNG  ��� IHDR��Ê��¤���±beö��� cHRM��z&��€„��ú���€è��u0��ê`��:˜��pœºQ<���bKGD�ÿ�ÿ�ÿ ½§“��� pHYs���–���–�qFþð��AGIDATxÚíÝtÜW}'ü÷õOYŽ#± j5ò³ÙðP*·C•î²cb?È]â"Çl´¥OOW¢(’ d„ÌyQ°ªq„nÄFÚå,4ãƒ#a³­Dm#mi2q–õtÆqB¬tÜ� q<ÙÖ±ûüñ½ßÑWã™Ñüúþ~¿ÎÉqôû«3ïï½÷s?WH)ADDDù­°ûˆüF1a÷5Qé”DDDE0(‰ˆˆŠ`PÁ $""*‚AIDDTƒ’ˆˆ¨%Q J"*›¢YÑ)„hV/· !Úí¾."30(‰¨,Bˆ€”rÀb@@»"l÷õÕƒ’ˆÊ¥‡$�¤�LK)§¡…åp埖ș{½YK1!¥Üe÷uÔè{9 KJ9i÷µ™…#J"ªˆZŸlÖCR°ûšˆÌÀ $¢’©"½©{€q$ÉõIò¤Uv_�¹N@U¸f+^ÕÿÚ}aDfà%‘ż°F)„hV<KþŸÈ‹8õJDe3#C’¼ŽAIDDTƒ’ˆˆ¨%Q J""¢"”DDDEp%•Luã€Öã�îðÇRʸÝ×Fd%•LmÙ�Bˆ!�¿`H’×1(‰¨l*$ãXYy×(‰¨,zHêGmé‡7yƒ’ˆJ–’àù“äœz%¢’ä I¶¯#_àˆ’ˆ–•/$‰ü‚AIDE1$Éï”DTC’ˆAID0$‰4 J"º C’hƒ’ˆ–`H-Å $¢,†$ÑÍ”D€!ITƒ’ˆ’DE)¥Ý×àh¿øå/�&�´Ø}-ä 8€£Ïµû2²Â…±=¸v_ ‘Y†ßñöwtUúÁQÁ$¯cH’T’�ƒ² †$yC’| ê”y1$Éë’ä5 I€Ay†$yC’| f! 0(—`H’×1$Éj’�ƒ2‹!I^Ç$¨yH J� Iò>†$ù€)! 0(’äy IòÓBðyP2$Éë’öGÿ¡~»/ÃËL IÀÇAÉ$¯cH:ÃØøÒé´Ý—áU¦‡$�¬²û»´C’¼Ž!YºD"#GŽà埽Œü› »»{Ù‰Åbè?ÔD"¶½mhÚÒ´$ {ö¢¡¡ét±çb8qò„ÝߦY’€ƒ’!I^ç´L&“8›8‹Ö{[�±çb�€¶½mv_ÆÇÆÑÕµø\ûÃþG¢Gpâä 444ü¸ÖÖV´ímC:ÆÐÐÐ’·õêÇàÄÉCGGšššìþV½Æ²|6õÊ$¯sZHÀ‘è�Z3øÁ'Ñzo+¢Ñ(¢Ñ¨Ý—†O~ò“K^~óÍ7ñꫯ¢¿ù5ÅD"ÖÖÖ‚o´ î~hù*•ÅÒ|” Iò²D"îúà’ŒF£7‘TûºÜp[îu‰DÁ`±X ?ÿùϳS’­÷¶bnn®ìÏWîëúõ|],Ãõë×oúYÞ¸q?úÿ~´ìÏ<ö\ ÛƒÛóþ.ô�íèè(:2¥²Y’€O¦^’äuCO á_Þõ/—Œ$óM÷Yýº`0ˆ`0ˆï~÷»xÿûߟ}}ww7b±˜éײ¥iË’×Çb1¼øâ‹ˆÇãøÇä?âÆyžëׯ/úóN$H§ÓKF”ÉdG¢GÐÐØ€Ã‡pÆô²‡Ø’€ΣdH’ÓÔú<J'N·æÚ³{º»»- ŽD"D"óÉóˆÅbH$ÙÑlÓ–&´ÞÛŠðca$“É%·råJ|éK_Âþöü܃ƒƒ|rpÉϼ¡±mmm\4‡m! x|DÉ$¯+’ý‡úÑýP·íSétZ›Ž¼·µúO¶Ì׈=ˤ>â ƒèîîÆöàö›Bì©¡§ðñ®ãÕW_ÍŽ.?úï>Z4$d¿ŸÞƒ½¶þl}ÂÖ<” IòºRF’v‡$°¸NYËkI$ˆÅbÙÑb2™DSSZ[[Ñzo+ºê.XhhÓ¤=ðQœ8yÏŸ~>; ¼eË–’F„±çb,Ò±†í! x4(’d5ý‰Ú*n˜nÕµ¶¶V5Õ¬o/ÑGбX ÙõÏÞÞ^´ÞÛZV755!r8’ý˜b¡š+ßú$™Â! x0(’dµt:=»÷`hxÈ’'ÏåB2‘H`|létÚò�/¤œ‹Åbˆ=Cò¼Éd2Šm{ÛÐ{°Á`°êk2þ®b±Ÿ\6Ðûõ#y^[ÓGCCƒ#~¾ä˜<” I²Ãà“ƒH§ÓH_2¿MY±L$ÄÞ¶½hhl@÷C݈F£H_J;v-m¹‚›ŽŽŽšÝ|è{ó…lkkkI_'ûsZö]©rŽ IÀCAÉ$;Œg7ÐëíÌ̲\HöêÇÐðШ èîîÆžÝ{²ë„vª´à¦VÆÇƱ¥i‹í?*Êq! x$(’d‡t:äù$º÷v# šÖø:™Lâcø1<Øñ`ÁéÖþCý7·744à|ò¼åQmÁM­9uTMYŽ IÀAÉ$» >9˜­|ljjºi?^­<ñø�€ãÇŽcÿþýyÃ0‹ahX›4Ž­Øš˜SpC¾âØ\ÞÂŽ!Iv‰ÅbK¶<444d×Àj)üX-;Zð÷Ïþ=‚Á vÞ½3ï×imm;>‹eƒñ±Ç˶«õ÷ߨ]]]¸gç=¸gç=ÔÖjÛö¶áÄÉøÉÔOpô™£è=Ø‹¶½m–‡d2™Ä=;ï)i¤‹Åpà–^e9:$wæaH’<p`ÉTfò|ãcãøù/~^ÒÇ–²]"ßšdø±0ÆÆÆpô™£K¾~:Fÿ¡~lnÇÙÄÙì¿m{ÛªžÞ,¥ÃS·JÄb1Ç^pAH.zeH’³E3ºX,†ñ±ñš=1*܉Ž�ÐÂöô §—Œh#‡#H§Ó8›8[ñþJ» nj!éh®IÀ…AÉ$;éÓ›¹Óˆúr-¶ˆ,·O2r8’Ý÷—[ ’L&ËÞ<車›jÛBŽâš\” I²‹~2D4½©0F õt)}©â]©w"‡#èê캩—k,+ø±~(¸Ï~?äX® IÀEk” IòŠBk”å¶¥;ðÀl+¶|Šu¸ÙÜÎ@1(µ3UÍu! ¸$(’ä%ù‚²’Þ­z¥æó§ŸÏ®-º±à†|Õ! ¸`ê•!I^WnH nñÁ]Ä•+W\[pSd2‰ðcaŽÏ!)„è—RÆ ¯kqtP2$ÉëJ Éb7Ÿèþ‚Á oG‹MMM<îÊùÜ’�"�. !¶J)§…�g;õÊ$¯I&“øÂ¾€Øs1|øþ#³AËŽ–%!¹\ÁM0t}Á ùŠm!)„hÐ.¥ì)ñ}›Äœ°UJ™B´;2(’ä5ét¿ûþßÅÅ‹�B¼ãïÀ—¿òeÜ”)‘H ©©©¦7 ,æ1…í#I5Jœ–R—ñþ)e—áeçó81$õ5!¢b¦§§qõêÕìËgÏžÍþÿ믿ŽN¿�)%Ö®]‹………%»nÝ:¬_¿wÞy'$$î¸ã¦÷hu£'wï¼wß}·Ý—Büò¿üî#<ò„Ýס< àgRÊG–{G!Ä�)å¨ñeG¥C`P’z¿zíWxíW¯áW¯ý W¯^Íþ¿ÑúõëÑÜÜœ}ù­·½ëׯ_”uuu˜ŸŸ/ëë766�V¯^uëÖáÎ;ïÄ{¶¿ëׯÇöíÛíþñe9,$ò‚ò"€ýRÊI!D3€s�6:&(’äz»¶Øs1í­d2û:ã:!€%#½R iÒé4Þ÷ïËŽ$W®\‰w½ë]8yê$�mmòüùóÚ¿ÉóH§Óx饗ðOÿôOøå/™÷snذk×®ÅÜÜ6mÚ„-[´³µkݲe‹/*_ÉQlŸn5ªpêÐÖ*C�Z¤”;” I²’†Æ^¦ÆÖg[š¶ iK“ö¯ª.­Vø±0nçíøþß}?üáÑñï;ÐÛ[ú©úuþÃ?ü~öÒÏðüóÏãµ×^[ò>ïyÏ{pÛm·aff y¿'î§$9-$K.æQï��R¯�’RöØ” I²‚Þ¥F¯$ÕPß”oæè˸DoPÊ)#ËÑ¿—¿ù›¿ÁÏþxÉÛš››±sçN¼û=ïFsss¶`H-ë½\õ½—~Çbžª9*$+!„Œ]*d‡�ì’R¦l J†$™%7°wï^lnGkk«eS’¹û$k”Fétccc8›8‹¿þë¿ÆåË—³o[¿~=þÕ¿þW¸çž{pÿý÷#™Lf»÷Äž‹Ц’õý˜ N*“ëCÈ6h6¼*"¥L6V½2$©–ô@L$ÏŽí|òÏ×LÀ¬ Ì÷óÇ÷¿ÿ}üä'?Yò¶ßþí߯|ô?f§`õŸ]ì¹Xö¦BÿÙµµµq“ŠñDH.Ç– dHR-èg@ŽpÖ¨¨PÇ«‚ÒHA~ÿï¾X,–ÝÂò›¿ù›x,üØMk–ù¦©ÛÚÚж·ÍöŸ+9Š/B°!(’T ýH«ññq\ºt {÷îEkk+Úö¶Ù}iYÅÚÒÙ”FétùÕ¿D4Å•+W��¿ñ¾ßÀ£>Š|ày?f|lcãcÙ#¬Úö¶¡££ƒÝüÍ7! X” Iª„¾þv$z‰Dm{ÛÐÚÚZñ™fZ®w«ÝA©K§Ó|rõW•]Ïܾ};yäÜ·û¾‚ã–ßC¹XÌS_…$`aP2$©\ùF2N^3+¥Á¹S‚R— ̧ÿ —gJ L ÿÈ^Nò4ß…$`QP2$©T‰DG¢G066†ÆÆF׬•zT–Ó‚R§æÓO?™™�À{ßû^|¶÷³Ë†Ÿq­Xÿ=Øñ coh¨b¾ IÀ‚ dHR)¢Ñ(¾6ø5Ç®;SÎy’N J]¾æŽ;ðéÏ|º¤Ñb4Ígkk+ºêæ(Ó|’€ÉAɤå²££Ýu»ªH¤ÜC—”:=0¿ùÍof‹~î¾ûn|åñ¯”4RÔ?>j‡I30ÝÌ×! �+ÌúÄ I*&âž÷àkƒ_Ã'º?ŸLý½Koéæ冤›444 ÷`/~ø¿~ˆüãX¿~=^xáì íÂ7¾ñ’?þô § ÑÕÙ…{vÞƒh4j÷·–—~C7ñ}H&(’”q”ÑØØˆOtµ!SiHºeD™+NãáO=Œï}ï{�€µ}ñQò—~÷>ÂTj” IÊåµ'ÉjF’n J]4Å¿ðE\¾|›7oÆ×¿þu´ì(ý¡žN§Fq$z�\ÿ·àa Iƒš%C’Œrש:::\S SHµÓ­nJ@«Lþô£ŸÆ‹/¾�øÃý!þüÏÿ¼ìÏ£¯OÀƒ²‰s0$sÔ,(’¤ój!G-Ö$½”ºþCý m%ùÖÑoUtÆ‚®î‡ºÑÝÝm÷·æg É<jRÌÃ$ÝøØ8öìÞƒX,†¡á!}æ(CÒ£zöâè3G±áÖ øÑ~„-;022RöçéèèÀó§ŸGïÁ^‰ÉþýX‰Å<�’U=¢dH uj ?F"‘ðܨ –!饥.Nã?üÉÀ~ð�Àƒ>ˆƒŸ;XÑèRŸDGG‡ë*¡]Œ!YDU#J†$¥ÓiôêÇ=;ïACcN¿pš!é3 AïÁ^�À‘#GÐö¡6$‰Š>WïÁ^œ8yÉd;ïÞéØ-%Â\FÅAɤX,†=»÷`||GŸ9Š¡¡!OÝý3$ËÓÝÝ'Oàï|'¦§§ñûþ�_ýêW+ú\Á`GŸ9ŠÞƒ½è?Ô¨(xiY ÉT” IK&“èêêBWgÚÚÚðüéç=±iĬL0Ä÷&¾‡~ô£˜ÅáÈa|úÑOWüù:::²M öìÞƒþCýH§Óv›^Á,QÙAÉô·þCýس{�àÄÉÙé6/aHV§¡¡_úò—ðäà“X¿~=¾õ­oáSŸüTUŸOŸŽM$¦LÇú°˜‡!Y†²Šy’þ‹Å~, �ˆŽxn©3;$½XÌSL"‘ÀGþà#¸zõ*>ò‘à«YÙT¬Ñàà ŸD0Däp„§””!Y¦’G” IÿÒ׈ÚÚÚpâä †$•, âÛǾ[n¹ßþö·ÑÙÙYõçìîîÆéN£¡±{vïa±Oy’()(’þ”N§qàÙb/—ê3$Í 1úíQlذßÿ.~ïÞß«z±¡¡CCCÙbŸðca®].!Y¡eƒ’!éO±X ;ïÞ‰†ÆO"†¤‚Á FFGpë­·âå—_FÛ‡Újl8úÌQ$‰ª*cÓé´×«j’U(” IÒ§Z»êöÜ–\ IëƒA<3ò n½õVLOO×,,õ­$Á`8PÑTl"‘@ÿ¡~»DfaHV©`1CÒÒé4º:»pþüy<5ô‚Á Ý—d*;BÒoÅ<ù$ <°ÿÌÌÌ ¹¹ã߯ÙÍX4Eÿ¡~ìÝ»×ÓKe`HÖ@Þ%CÒr§Z’d–Ü‘å‡ÿí‡k¶¾ØÑÑ‘ÝFÂ& ÉZ¹)(’þã§©V€!éư|饗j–MMMÙuõJ§b=€!YCK‚’!é/ƪÖ'OxªGk! IçÐÃrÆ 5K@;ÝäðáÃ%UÅz¬˜‡!YcÙ dHú‹ÞáÄ/S­�CÒ‰ôjX³Â²moÛ’©Ød2™÷ý<TÌÃ4Á €!é7ãcã8ðÀtttøbª`H:™–oûÛñÒK/aß¾}5 K}*Vï›oäØÚÚŠ£ÏµûGQ-†¤IV0$ý%¢«« ½{=Ù§5†¤óƒAü¿û¸óÎ;ñÓ©ŸâáO=\ó¯9ÁÞ½{½ZäÃ4Ñ 0$}#"üX‘Ãß„CÒ=ðo~·Ür ¾÷½ïU|DW1ú߾NJ|’&+«):¹—b@;€]RʸÝ×cá÷—RÛ}-†k ˜R »¯Å©„í�FÔ‹;Ìø{BtÐ%¥B�4ûå±A婸àfr†$¹‰”rtíÚµO�ÀêÕ« B¬Ö_c@€!DÚ¬Ú€Ýß;9ƒÒÄ!Ä´'†$¹Æüüü#kÖ¬™ºvíÚÚÆÆÆ˜ñ5ÔßÇ.�a�íRÊ]vßäL JRwá�šÁ$Êd2ï_¹rå•K—.mÛ´iÓ3ãk¨ÇÅ.�íêo‡è& J2„$ …dÊîk²èûfHzˆ”2uãÆûà7Þø£Í›7ؤ¯°@‹bÂŒ©^r7¥Ç!Z�œƒ;’äfRÊI��˜™™11ÄR�> �€aIK0(=DÑ m$9*¥ôM¹8CÒÛ¤”=+W®üûL&³º¡¡á'&}™�¡Mà K2`Pz„zP€!ItãÆ}+V¬˜I§Óoknn>QëÏ/¥œ”RêËzXŽTó9É;”`X“L1$É‹¤”©7ß|ó�ðÊ+¯ì~ç;ßiZCXXàC�ƒÒ+ô;ßýv_ˆU’þ£Šnz�àõ×_\-5˜õµRÐO¬†%¥Û©q�¬n%RFV­Zõß3™Ìêúúú‰ê?£Fí9^ÒÊSJ9Å­#a»¿w²ƒÒÅ wö3$É/®_¿þÇk×®}}vv¶yÍš5µÚ_Ù í±´„aŸeXµ½#bPº”ºÃÕÛÒMÛ}=}Ï IŸR#¾ !„€………=�píÚµ?R½a«"¥ŒK){ ½ Ú”ïÃÒŸ”.¤¬a°ãù„š1†ö7’RÆÀa�X³fͲàë{Ãò´%ŸaPºŒáÔƒ…d'’Bˆvu*ˆþ2ŸHÍÑ`RáâÅ‹á 6¼šÉdn«««{Üì/®þþ"ÐöXòwì#<fËEÔƒsZH:24üF1�í <�íI<� Rh:œÇlUNqÚÏvÔ𺀉5kÖd2™ÌÛ*]«/ç˜-CmÀ¿,{øG”.aèºaH:J\mTß`À0Ÿ<kOÙ’% 5 ¨««ûÛL&³æ¶Ûn«¦A@Þbž|Ô^åQ�f¶Ô#áˆÒ%ÔÝtÜO ÜB=Yv˜\nDÂeeTÁNXÝä¾­ZcÜ~ûíÿúÕW_ý{‹®‰IŸàˆÒÔô 6[“s¨ CIÆUu&GµwÓhR§Fð�Èd2¦ÇU€Þ€•°Ç t8u'Ý  Ë/{%ÝBâ�´‘dÊð2Õ^@¼ÈMHdÅŠ—_ýõ_ë[ßÚkÅ©€f%¬0(LM)ùªÂÕe dBjß9hMéyCS{úˆ2o‡Õ öÓ�077÷ÙrGõù:ó”B CÛcÉ™bP:›~‹wœ©GJ9­6ªo•RnTç'Ríšۼ ‘R¯Zµêì•+WnyÛÛÞöµ2?ÉÅ<y¾®¾$ÂÙb1C©uÉ|ÔÃÕXÌS9!D`¹Ç‚a»ÈµL&s—UÈjöç ¸uË“8¢t ®Kݬ”Ç‚”rRoš~ûí·[VØÃõJoãˆÒaxgêmQšÏ¸]ÚŒŒeÓᜠò&Ž(gZ%C’¨Æí"›7oþ/¥|L¥Å<y¾6×+=ˆAé ên4�m ‡ˆ*YµjÕÕ×_ý×7lØðp ï_q1OÜ_é1œzuµ.9­$·‚x§^­£ P__ivv¶ÙÊ©Põx‚Nøñ2Ž(À°Qû%‰jDJ9\WW÷ÒììlãÚµkÿo‹¿ö(´~°œ‚õ�¥3„¤¤”»/„ÈKæçç»àÍ7ßü¸ z�´p Öý”6Sa°+QÍI)'o½õÖĵk×êÖ­[÷©BïW«bžœ¯‚ö¸`×wcPÚo�ÚÑYìèBd‚™™™GÕÿ>TäÝjYÌ“¥ª×ã(ÐzÜÅ<6RS2ÐÚŸqÏ•°˜Çuuu¿ZXXØ ­‰‡¥[¯ÔHõ X¨çZQÚ$§€‡!Id¢………Ï@ccãÃVmŽhU°äB Jû„¡úÊÆD&“R¯^½zþÒ¥KÛÔ¨Þj�ÍBNÁºƒÒ,à!²ÞŠ+ž€·¼å-ç¾ÍŒb#5kÔ ÌÂ÷aPÚcZ×+ˆ,²°°ðg�ðÆo|Hõƒ52¥˜ÇHí­Œƒ{+]‡Ai15õÒ Õ‹’ˆ¬!¥LÕ×× �6lØð™œ·Å }ZÍÔ Ó¦é_ªƒÒBjÊ% ŸEd‹ÙÙÙ/ÀüüüÿeǨ¡a;G•. ´Ö�´žQ»/„Ȥ”ñuëÖýÏk×®­½å–[>fÓeD�XØã J‹¨5‘Nðd"[ÍÍÍ}�nܸñ9ýufó:ö°°Ç%”Ö VS/Dd)åèÚµk_Ÿ››{‹:å° ˜'÷�¤ÀŽ=®À ´€a4É"X½zu?�¬[·îQÀÒb£´ÂŽ*ŽAi Ž&‰äÊ•+ß\³fMfnnîwòl±„j6’‚…#Yª ƒÒd†Ñ$;ð9„”2žS/Úy Vœ~u<¥ùÂ�&Ù\€ÈY^{íµ�X³fÍYYÌc¤·°ä™•ÎÆ 4‘Z{àÚ$‘I)ãõõõ—2™Ìm�þOØ7ÊQ¥Ã1(Í¥&yÖ$‘­[·î¿ÀŠ+zìBôY]\ÃQ¥ó1(MÂÑ$‘FÑ,„hWÓ›õÿŽ(`yã7Þ"„o¾ùæ»�ü&€ÿÀ/l˜†G•ŽÅ 4~ŒG“äwúHij–Ú¶[GPBˆ>�Êsˆv€I‹G–z·Ž*ˆAiŽ&‰4jd¦²¤”úAå“ÐFQvú#~¼Ö6 HA«ŒgP:ƒÒa�)Ž&ÉïÔFþQ�-0£”2 šŠ¼m´n=VÒwæÉ"à¬1Ž&‰ò aqdi9}mtݺuoܸñGk×®+áÃ, rè’k•³Êî ð vh£I6 Böæ±Út«U_3 å¶Ûnk½|ùòÝ�Þ²qãÆkï~÷»WoÞ¼W¯^ųÏ>ûæüü¼� ò|ŠØ35pQѽ×ÎÁ ¬½ì_{!r’h…m¦ŒÐT÷«–ÆÆÆ¬\¹ò÷Þxãmuuu×î¸ãŽÕ[¶lÁ¶mÛÐÔÔ„úúúÕÉdßùÎwpîܹù+V<à^�ï°2çÓöØÑrRJ™BŒB»áfP:„RÚ} ž¡°ç�le_WÊGt&òTZzš"P« B„êêê>T__ÿ¾+W®üN&“©ûµ_ûµëïz×»VmÞ¼[¶lASÓÒåÇÙÙYœ<y§N† ¾uùòånýzTõëýõõõïܸqcúÕW_m·s4§¶Î H)·Úu ´ƒ²†ÔA¬íRÊv_ 9“_ƒ²Rªj¶eãÆ÷]¿~½eff¦),477¯Ý´i¶mÛ†mÛ¶ý§N‰'n¬^½úG333…B°¯¯¯ÀP__ßF|ßtñwg`PÖâ ´SB¸>Iy1( Sk™¡ººº{Ö­[÷«W¯Þ™Édê¶mÛ–%655aÓ¦M%}¾©©)<ýôÓ7._¹r%\Ê㲯¯ï"€]}}}¶N{ !†�@JɃÞ€k”5¢ßù‚ë“D%Y®àæ®»îºi µ.\ÀñãÇqöìÙ…+Vüçùùù?+cÚwÎX0!„èqÀ6ß㈲F„Ð6Tó ò눲Œ‚›Š¿†qòÖ[oœ™™éZ®V@ý> nrï¸ãŽ ëׯoùñüõ.¶•â€g¨ìÇ ¬®)P)ü”•ÜT#‹áoÿöo¯]¿~ý333RN³U[Ð)¥ÜÚ××§ämüüç?²«æ@]WHJ¹ËޝO‹8õZzƒg†$ùQ75¾™ššÂ‰'®½òÊ+7êêê>›N§Ÿ¨àÓd÷xöõõM«õÉvÃÛì2 `@ÑÌ*z{1(k#mMÈÓòÜ�ÈWp³ÖÌë˜ÅñãÇ‹ÅÐØØøõL&Ó»°°Péi@áåIhÙ ›$ä’RN !ô5Svú²ƒ²J†–uÜBžcVÁM5Ž?ŽgŸ}öúš5k�ÚS©TÅ£-5Àˆ‰DâÇÿüÏÿü_�Œ°»æ@?~‹Ai#eõÚL³Ý¹]9n츾x<Žcǎݘ½8??ß=77W‹¥Ž´ž®Bd—SŸüä'ë>øÁFúúúì®80Ä–vöbPV¯œv%Ê-¸¯àÆ–P4ºpá¢Ñh¶íÜÜÜÜ#5üô-�&¥”Æ©Wôõõ…ÔÛl 'ÕÒnÎØ²â[ Ê*¨;ð쟞!*Ê΂›Jå¶Ëd2Ý&lÕ!ÿ´fÖ³UÈ$€!,]G% 9æAáR!hÍžY‘FŽá”‚›jèmçêêê^ðèÌÌLÍ‹jò­OLÛ‹‘RŽ !F8ýjeu,=:ˆ('ÜTjjj ÇŽ»žJ¥®ÌÍÍ…gggMYÖP Bôc»"•sëâœb6Ÿéégl8PÕ9£‡û'©TÕ6°¢Ãô¶sñxuuuO”ÙvΪïëþ¾¾>Ûo†Uó)å~»¯Å8¢¬zÂjfH’™ÜRpS)}òÙgŸ½V__ÿ<€?ž››sÊRFΙ5š„¶M„lÀ ¬\Îx�‘G¸±à¦ƶsóóó277ç´Ç“c z¤”q!„¡rÚóQmxâg®PżPpS©d2‰ï|ç;8wîÜüêÕ«#W®\é³ûš pÚ:å$xƒn eåB�¸^@åúêß‹n-¸©TNÛ¹§ªl;g…8€æ¾¾¾€èײû"üˆAY½¬œS T[�àñÇ·­ÃrÚÎu¦R)ÇÏÆôõõ¥úúú¦á¬uÊ»/”•áôUÅmU©•šššÂÓO?}cnnîÒüüüŸÖ¨íœ•3Ý©Ö)S\§´ƒ²2¶·¶"r2“ÛÎYiΚîtLpû ƒ²2\Ÿ$ÊÃØvnãÆÇ3™Ìg\Þ¹*ít §ÐÝ" 1(ˤÖ'Á©¢¥b±Ž;–m;÷Æoxá12 ‡lQœV‰ë +ì¾�â´‘ÁÔÔ¾øÅ/^™Ÿ››ûÄÅ‹ßë•IŨ¾¾¾»¯Ðs0-„à¨ÒBQ–ë“”eh¬­Ó׳¦¥”ùú”n´*Ð\÷Þ{/6mÚtÓë“É$fggozýæÍ›ó¾¿U.\¸€“'OêÛ=þk&“éµ»íœI&¡*ò¸Ÿ„ö<ä¶Â(×bP–¯<ÒTˆ…°4Èš¡…XOž÷˜(ðév%µCû›(Õ:�8þüMo¸zõjÞà;uêÔ’ œšš�Üwß}Ø·oßMïüøqœ:u*ûò¦M›°yóf�ÀÃ?œ÷¢b±Ø’¯],„mçÖ¬Ys@{*•ró:ärRpV09­ÀÈó”åsÒ¥ç+}W'>ä†R ´Æôùn^ôKA{rú·Ð“zÀÖrŠOòî2~¬|:;Ë«%Ù·oZZZòŽB ‰Çÿ¤õ nãx<Žcǎݸ|ùòåL&sr~~>  S‘R??/®ßOcéÍ–ÝœV`äy Ê2¨GÊ£ÓK–R?ËNhO@, Àb'kÄ¡Ÿñf%o°•bê÷ê‰ßm¹]~– îܶs™LæÿÅ⨦ÚïPù¦ T‡„¡ý|ݪN &§yƒ²<p4™— >càéOž£F{€ö€×ƒ/µÜ¡´ŒÞ¨Jƶs6løV&“é6´+7äô éÿ !€ÓÚ†õ߸Í7§úÔ«#H)§UƒtälžGY5õRvÙ}-ß-Ђ¯Àp¾©I!„¾¶gœæŒC{’óòúUY„ŸpxhÈùþ§N‰'n¬^½úG333V?)«Ç›>ë�,N›Ç­¾iêëë“�6:¤ç«þxæ1Öàˆ²<Í(¼¾åjšlH}¿úÏ$ŠLKJ)wÙp!h½/VuÓRʈÕ×äƶssss:;;kË“± Ã`ñüW,NÕßDm™hÇâLÅt ÃÝI=_çyƒ²<ž˜zUÓ mt\(Lâ�"Оlys ¥œBŒ"Ï(_qFàtmé.\¸€ãÇãìÙ³ +V¬øÏóóóæ”õx}ÿà2領€6Õ§vãRÊU^‚Ó zœv=žÆ ,Oê×MT0†±8BÔ‹)ò†¾zRrË÷Yè._Ð2Êm;çÔ‘|¾¿[ÃH4ß÷€6sRÊÔi#8§yƒ²Dê§.žZ뺾I,®:b”P#7ݼè‡"â°WS~)½ ÅŒ"‹©©)lÛ¶­æ×®·[¹re@W)mçÜ4’/a$ªÌŒ#Ði�ûs~‡N›UqT‘×1(Kç¨õIuW‚ö` A{à #Ï(Q=;em¥–?ƒlWõó�´ßS@—…†½!Ĥºžš¨âñ8’É$ššš0<<\öžÊB¦¦¦pâĉk¯¼òʺººÏ¦Óé'Êü®É«ÆB#ÐÜÇú°þv',E¨›•€º)ñÒ¯#1(Kׇ¥ªxÓŸ¨&¡m¸wäH×d!,m €VÌ1ja5`¶SщVù&“IÄb±ìÇX,– ÍJå´ûz&“é5l÷(‡í#y3ê=_?ÿùÏKÕ\aR½ß¤{AV`äY ÊÒYVÈcxÂIå{ÚQaêP-Èy¢RSg#X¦Í aÝv9EoB¤”£ê÷Õ©®¥f#ÃÃÃèèèXòºŸþô§åñãÇñì³Ï^_³fMU´sÂHÞ.RJahØ`Dýþ»Šì6 X„AY:SïÜÔ:—ñ8NáyT¾ÑKIÓ~µšŽVO’a�)eJ½Œj§Ãb±�,Y—œE}}}ÙŸKo;7;;{q~~þßÍÍÍUû};a$ou3”½!RÁ™÷¦Ãä©Ú8”–`P–δ¯†©ÔaõߤÖAœÌ0ªÉ}ÒÏÞÐ °LùYªP€)ÃËUO=NMMaóæÍKú®&“IÜÿý%cÛ¹+V<577÷H¾õŠGò^´Ì,„úÙŒ¢@³Ž*¹b=Øí”¥3³zƒ±tª€F¿“îBŸ€â�ÚU¶›\}9�mÔß©nvRЪ%—McÓ¦MhjjBSSÓM'uLMM¡µµuÉËõõõ%U¾·{èmçj\ðQñHÞ‡v@m‡�œS_£P7WU~ný¸-2ƒ² •þa«‘F; lðgH–§XøI){ô­ 0êºG¯œÌ ëemÚ´ ³³³8uê’É$¶mÛ†ÖÖV´´hÏ{³³³KΧŒÇãÙ·cl; sff¦¦7wNÉ»‰úû0¬~.íXl_‹ij·ee ô=Š|\Ú£‹Û7ÈdVU�oœÊ ãÑU.\ÀsÏ=‡h4ŠãÇc÷îÝ� ÉÙÙYÄãq<x°à盚šÂ±cÇ®§R©+sssáÙÙÙšÿ­9h$ïJêgAínà|#bei(ãRæ ¨…v:‚·oP 6mÚ„}ûöaß¾}8uêŽ?ŽuëÖeß~òäIìÞ½;ïAÊV¶sÐHÞ“ÔˆsÚ´ì²?Cý2ƒ²tåܽMC«‚ä’Êrß}÷á®»îÂÐÐ>ó™Ïà·~ë·°jÕ*Üwß}KÞϸyë­·Nf2Û×¹y3X5}Ö)¬öäv•²G“MÌ·Âî p‰²šK)ã IªTSS>÷¹Ï¡¹¹/¿ürv*V‹Åð…/|áÚéÓ§“�v¥Óé]v‡$UOJ™’RK)·B›‰šB è[ŽŠ`AÉ”¥)ø‡XÂ1QÙêëëñ±} �Fhë_ùÊW®ŒŒÌ/,,ô§Óé_·±+ ™HMsï€V¬S¬1GñàÔké–üAÎlLØo÷Å‘÷Ô××ãá‡ÆÁƒ100€W^y¥Ú¶sä"j*{Ç27ãü;°�G”PÕç ­EvUùéˆ :yò$®_¿~ãµ×^û€­©TêO¹å/%ü¾ÙÇdQ–F?kBˆ3êå]œö"³èmçæææ.e2™?]XXð|k8*]Nk<¥É”¥iW#É�€¼«'3\¸pÑhÔŒ¶sä-BˆpÒ ÊÒé£ÇZ´ž"Z‚¶sä-ÃÐj$¾ `Áî‹ñ:e8ÕJfˆÅb8vìØººº<:33ÿ3*JJQ¿vøk»¯Çë„”Òîkp<Õð: ¤j!pÀê[n¹¿ÿû¿X,v=•J]¹råJ˜{o©ªòþE�'¥”¥+CecP–€AIÕROjçr__WW÷„™mçÈÛ„§@J¹Óîkñ2N½–æv�o³û"ÈÕòV&ÎÏÏ—!IUXi÷ø÷Q–æ­�Þn÷E«¥�\ËózV-R5n¨ÿÈD ÊÒÌ8`÷E{©.+cX–Ÿçh’*¥:öÜ`Þîkñ:ei^ð/„áª?ù–”ò�ìðÐöâöÙ}Mäjah!ù?í¾¯cP–æ:€' Ã.T15²|™GRQ5ÔÖ0€“v_‹0(KwZÓ!»/„ˆüKM¹A; û5»¯Ç”¥IAk]× E1Â㵈ÈjjFk@JÅÅ. 0(K3 d»øï€šç„ív_¹“"Äi|*‡ê5}Úû.õêì de™¤”ÓRÊ]Ц=†Ôè’Ox´,Ž�þõªúûá $„hQ§µØ/¥ÜŸS-Íõn“1(K×b|AJ6º€3¬ˆ¥bT@¶C»ÁzYJ9©ZÖu`XR.!DÀ0Šœ„V)Íî`6`P–f:ß+Õèr?´'»°b‚£KÊ¥žìZ¤”]¹û&ÕË£Ð*‰�d«ZÏ�A;û¶§ÀžÛÝ×ê ÊÒL{£”rÀVõ~ç„,ö!@›6ƒ‚‘eÞµ¥„OG'„hV7VÐŽô+e9]§¦*0(KW4ø¤”))e´Eö€‹\"��âœ2£BÔk§:|á´JÖªªuYRJ¥É”¥+éŽ_­=íÀâs@qQ1¤Fä/íX<ô»´éWò!D»bÀEh³“�¶ªbe t8keeiÊ®*Së—=RÊ­ÐÖ0`BqNÁ?þQôÉL­Eµ@;±ž<NU°!ÎAk‚6zÜ*¥Œ”9:ä·E”%¨¶qµ”rTMËn…¶V‚¶–9¡¦\xgè]ËÝd… sjÖ»ÔÔjXmñ8mjµGJ¹QÝLW³½ƒ[C,À ,]JÝýWL­c«}˜[¡Mµ„¡…暊ahzK@Þß«šv›V7Qä!ª(§S1mjµÚ¬ÁF5µZ‹©öf°Ù€%xpséâ¨a»(5ÅQk—��4 !âÐB4­„‹õ.%¥ÕÛŽ !†¡=±Ý® 7†kô„I6S¿c}=í¹Bo5é1¬ 2™RÚ} ® îþS¥V¢Uñuš¡=Øô\ ´¢ =8'œîd˜‘è“Rþ®Ý×C•S7·z êÿfon¡=NMí©›­IÕü„LÄeéR° ± Ái¨*H5e§f'´¶yÆàŒóÈ&wÐ×!ÙÅÉ} Á¨ÿÀâc°Ë¦5æ�8¢´G”%R£µõÃÎë`éh3-Ä#N>xL1¡Ö©É¡ÔãÝ8b–Žm/¾BH˜7­K Ê©;Ê3RJa÷µä¹6ýA­' ç4Ctš(g`P:‡z\ëË͆ÿwôͧ“Ÿ¼ˆAY·ÜÁyðK4-@õ$àu Jë•ñ˜pÅM¥Sf¸ü‚k”åÑ+_ý RÁGN·—<O!hQëß›¾>Ê�%WRÒœó_n NCÛªáø@,"‡?y ƒ²<)h:Û×'*±L€êEChEC¡<ªÿ—bˆ’] ¯Æ ÔÿðV �ƒÒ2 ÊòıLK272„Þ’�µUEy mš`qjüýsèOPpBÁ¹‹a †z êElº8—ôµD/b!Í``Ë0(Ë3 -,|Á°U%oàxR˦ú“š¾¤?Á1L}ÂP­ ,œé˜‚Æ›/ý¼NÎd,Õ‚ån£a1OT0 ©FçT‚<ÓdÀÍO˜€a$Š›÷†éO˜Ù—ÍÞÌmòÏÄÕÅ<†™]nÐÁð²ñ}³7H9ÿ¦À,™ºé¸ÈŠWëpDYžš¶±óƒ ÒŸL =áê¯Ë¾Ý0ZòiÎçðTÐV+OÐå ¾bo×û¹Ç o÷Ó”¨ôí+de¤”)!DJâ”aí¦x2Ö]r¦ó€ÊƒVg¼ŽBR%¼P¼àkc‘ûù¾‡|ô‹åÞ§Ø]î5êAg\û[òv?ß`8{¼ZŒAY>Ž*B=iç>™—Uà`˜.f¹Àѵøÿ\MÐN)E¡'Äéœ÷Y.À8ªó¥Å”勃¦z†ëbn_£$Û…Àƒ¾-Åó(Ë7‰¥E(DD–0,7péÇB Ê2©µÉfUADd¥xF­å”•™„öS‘cp4iee¸NIDvh y,Ç ¬ ×)‰ÈR†ý¯QZŒAYµNP[ ˆˆ¬ ¯Or/«Å”•㨒ˆ¬ÄõI›0(+ÇuJ"²R\Ÿ´ƒ²r£àˆ’ˆ,ÀõI{1(+¤wtá:%Y€ë“6bPV‡ë”Dd®OÚˆAY8”Dd¾”¶aPVg@Hõ_$"ª9µ¼ÓÌ£ýìଂZ§œÛÙ‘yÚQæñqT[ Êê±ú•ˆÌÄ ´Ï£¬Þ0€sBˆfvô'¢ZB´H)”6∲J*yš™‡4;�ƒ²6FtÚ}DäªH°œvµƒ²6F¡æÌæDT+í�¦õæ&de ¨nÃàô+ÕN;8íê ÊÚ™§_‰¨To×8íê ÊÑ«ÒT•Q5ÚL²’Þ”µ5 î©$¢ê±ˆÇA”µ5  “-툨RzË:0(ƒAYCliGD5Ð`˜Gj9ƒ²öXýJDÕèO qeíB;Q„k•DT!D'€[Ö9 ƒ²ÆT•Ú0¸U„ˆÊ±û"h)6E7Gl”NDeP£É€”’M†#JF•a»¯…ˆ\# vâq$¥y"жŠ4Û}!DälúqZà´«#1(MÂQ%•¡ÜâX Js ƒ£J"*BUÈ·€£IÇbPšH5 ˜G•DTXM:ƒÒ|úZ%ÛÚÑMºƒÒdRÊIpTIDù…Œr4él JkpTIDK¨ÑdM:ƒÒjTG•D´Ho~Φ$Ç ´G•D�P•ðàhÒ”Q£ÊipTIDÀ8št özµV€3BˆQµu„ˆ|Fõtm°ßîk¡ÒpDi!Ž�v_ YO-½ �ˆ°ÒÕ=”Ö‹�hQw•Dä/a�q)%×&]„Ai1uÙ`€…=Dþ!„h”=v_ •‡AiuÞ\œ‚%ò}Ê•õ .à´O´í"!»/„ˆÌe(àᔫ 1(mÂÂ"0ðô°€Ç”öŠ�!¸·’È» ð Û}!T¥ …=aöyZZé x\Ai3)å(XØCäU,àñ�¥3t…=Dž¢–T`ë1(@õ{Œ�â,‘û÷L²€Çý”!¥ìÖ4}Èîk!¢Ê©›]½éù¨Ý×CÕcP:Ë~�!VÁ¹Ú�½ù%àé!"¥L !ö˜BL²�€È]Tcv�;쾪Ž(F[0ÂõJ"÷Pë’�ºxΤ·0(ˆë•DîbX—庤÷0(‹ë•Dî¡ïƒæº¤1(J•”wA;Ž«Åîë!¢ü ë’]Ü âM JSS8\¯$r(úd‹ï¼‹Aépj½2®W9Jκ$ž{ƒÒ¸^Iä<\—ô ¥ ¨Rs®W9×%ý…Aéj½² Z3†%‘MTHA I®Kú�ƒÒEÔ:È(–D¶P;=$¹_Ò'ØÂÎe¤”]B@;id§}ˆ¬¡BrZH²xÇG8¢t!)e´Î=Ü6Bd>CH²ÂÕ‡”îÕ¥þ°ûBˆ¼,gHWµŸÜ‡AéRjÊu�!¸Ç’È*$'�L3$ý‹k”.¦ŽåÚàœ| Õœ>cÃÇ–qDér†‘e»b ÚÏGDÃL ‹æ|Ž#JRÆÕÈrB1Íb¢ê¨l°•!I JPaÙ­:–D•Q33íàH’¥‡H)GUX1,‰ÊgIîb×Ò1(=FJ9,„HA Ëfuú-ƒ!I…0(=H,³ X KT˜Ú2 �`‡:„€(‹AéQ9>Ü:B”‡aŸ$À5I*€ÛC<LMmÐ"„8ÃvwD‹„ÍÐB2†$Á ô8c°7,€lïÖ3�âRJ†$Å ôCXêë–<¢‹|+§Á9—$hY JŸR¦¤”ûÄÁ°$ŸR‡.O�ˆ0$©T,æñÃy–ê<K–Á“/¨Ô]æc*G”>¤î¤{�œB„í¾"³©n;`HR8¢ô©œÆ-О@XÐ@ž¢*[õ=’œA¡ŠpDécRÊQ�;�4C]rÝ’<CÑ­²uZ#†$U„AésRÊi)å�£àT,y„šjV´³Ÿ³%T N½�@JÙ#„ˆƒS±äb9S­ERMpDIYœŠ%73LµÆÁ¤bPÒœŠ%7RS­C�z¤”œ ¡šâÔ+åÅ©XrÃT+ÀªV2 G”Ta*6�mt²ûšˆt9S­ I2 ƒ’ŠRS±» MÅN!†ØXì$„hBL€S­d%•DJÙíÈ®f�ç¸vIVBÔZä9h{#·²ËYAI%3Œ.»�„Õ—¬Œ%Ó¦YCЦY9Š$Ë0(©ljír+€Ihk—œŽ%3¨iÖhÓ¬£RÊRÊI»¯‹ü…AIQÇvõ@+öi6Ûi÷u‘w¨iÖ3êÅêïÈr JªŠ”2®¦c{� !xÖ%UEBœÐ`¿jA7m÷u‘1(©&TQÅVhEœŽ¥²¦YG M³nå4+9ƒ’jFMÇvØ­èâ“–£rÚ4«Þ£•Ó¬ä Jª9)å¤jƒ×&`Èsжí—Rîâ4+9 ƒ’L#¥V¹‹?ªíùTN@Úv]œf%§bP’éÔs–æÓ_T‘Ž1 ·ªý Hr4%YƘ»°Øá‡éq* '�L¨WéÉ)Vr%YΘ[Õ«˜”zË9$¹ƒ’l£Zâuai`N!:YøãNªkXqÚ68€ Hr3%Ù.'0ã�ÂXe¶Û}}´<us3à"´F£ÐF=ìÉJn'¤”v_ÑMTwŸNhOº)hO¼£^8sP1¡¦ž]­Àïh˜#GòŽ(É‘Tk¼.)åFhû1›¡uü9£¦ö85kµµc@µ˜Ó‹sö«.:= Iò"%9ž”rTJ¹ÀF�ÃÐF0…#lÄn>µîØ©Öõæ�)åFnï ?àÔ+¹’ªÕ§ýÐŽüŠ˜túô¬¦^…!h]•ZÔ¿q,NsÔH¾Â $×SkeíX|ROA ÎIhÁé¨'v'¥úƒpÑÍ‘™”ä9yFCÓXú¤okp:!(óc�Úˆ‘ÁH”ƒAIž§¶˜ƒÁœq«CÁŽ T7ÍêûÏ7]ÍuF¢”ä+ªZVLã4cÚ”­ñ߸{�Í Jµn«‡a@ý«¿`0U„AI¾WbÀLc1@§«…V”jth¼N=ü¡®s>‘_0(‰ŠX&”€Å0ÒéªË7r‹@ë>d¤ ãËÆÞ·zˆ¿¦þµ&¤¸®Hd%Q…TAŒ±ñA(ç]Z |èû�üïoË ;cÐNÛ]ˆDäG J"‹9¡ê•ˆJÇÎ<DDDE0(‰ˆˆŠ`PÁ $""*‚AIDDTƒ’ˆˆ¨%Q J""¢"”DDDE0(‰ˆˆŠ`PÁ $""*‚AIDDTƒ’ˆˆ¨%Q J""¢"”DDDE0(‰ˆˆŠ`PÁ $""*‚AIDDTƒ’ˆˆ¨%Q J""¢"”DDDE0(‰ˆˆŠ`PÁ $""*‚AIDDTƒ’ˆˆ¨%Q J""¢"”DB„…†—Bˆ!D§Ý×FDÅ )¥Ý×@ä Bˆv�-�~Àu�=RʸÝ×EDÅ­²ûˆüBJ9*„�øc�{’DîÀ%‘Å„- I"÷`PÁb""¢"”DDDE0(‰ˆˆŠ`PÁ $""*‚AId!!D»"dx¹Åîk"¢âØp€È"ª…] €€b@�@Äîë"¢â8¢$²N\J¹KJ¹À4€a)å´ÝEDűá�‘…T »N�“ìÎCäœz%²ˆ É0€ˆ”2¥^†”2e÷µQaœz%²€ Åh#É”áe"r¸ÿ Á-¥#1���%tEXtdate:create�2024-02-03T19:22:26+00:00j·÷Ô���%tEXtdate:modify�2024-02-03T19:22:26+00:00êOh���(tEXtdate:timestamp�2024-02-03T19:22:26+00:00Lÿn·���#tEXtps:HiResBoundingBox�220x201.5+0+3.5u”Á<���tEXtps:Level�PS-Adobe-2.0 EPSF-2.0Aù3����IEND®B`‚������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro-figures/sphereandplane.txt�����������������������������������������������0000644�0001750�0001750�00000000050�14557511162�016565� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������../gnuastro-figures//sphereandplane.eps ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�010366� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astarithmetic.1���������������������������������������������������������������0000644�0001750�0001750�00000014231�14557514026�013235� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH ARITHMETIC "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME Arithmetic \- arithmetic operations on images and numbers .SH SYNOPSIS .B astarithmetic [\fI\,OPTION\/\fR...] \fI\,ASTRdata or number \/\fR[\fI\,ASTRdata\/\fR] \fI\,OPERATOR \/\fR... .SH DESCRIPTION Arithmetic is part of GNU Astronomy Utilities 0.22. Arithmetic will do arithmetic operations on one or multiple images and numbers. Simply put, the name of the image along with the arithmetic operators and possible numbers are given as arguments. The extensions of each input are specified with (possibly multiple) calls to the '\-\-hdu' option. .PP Currently Arithmetic only supports postfix or reverse polish notation. For example to get the result of '5+6', you should write '5 6 +', or to get the average of two images, you should write 'a.fits b.fits + 2 /' (or more simply use the 'average' operator with 'a.fits b.fits average'). Please see the manual for more information. .PP Arithmetic recognizes a large collection of standard operators, including basic arithmetic (e.g., +, \-, x, /), mathematical (e.g., abs, pow, sqrt, log), statistical (minvalue, min, max, average), comparison (e.g., lt, le, gt), logical (e.g., and, or, not), the full set of bitwise operators, and numeric type conversion operators to all known types. Please run the command below for a complete list describing all operators (press the 'SPACE' keyboard key, or arrow keys, to go down and 'q' to return to the command\-line): .IP \f(CW$ info gnuastro "Arithmetic operators"\fR .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Arithmetic's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astarithmetic \fB\-P\fR .TP Inputs/Outputs and options: $ info astarithmetic .TP Full section in manual/book: $ info Arithmetic .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Arithmetic options: .IP Input: .TP \fB\-\-arguments\fR=\fI\,STR\/\fR Plain\-text file with command\-line arguments. .TP \fB\-\-envseed\fR Use GSL_RNG_SEED env. for mknoise operator. .TP \fB\-g\fR, \fB\-\-globalhdu\fR=\fI\,STR\/\fR Use this HDU for all inputs, ignore '\-\-hdu'. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Nth call, used for HDU of Nth input FITS. .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .TP \fB\-\-searchin\fR=\fI\,STR\/\fR Select column(s): 'name', 'unit', 'comment'. .TP \fB\-w\fR, \fB\-\-wcsfile\fR=\fI\,FITS\/\fR File to use for output's WCS. .TP \fB\-W\fR, \fB\-\-wcshdu\fR=\fI\,STR\/\fR HDU/extension to use for output's WCS. .IP Tessellation (tile grid): .TP \fB\-\-interpmetric\fR=\fI\,STR\/\fR Interpolation metric (radial, manhattan). .IP Output: .TP \fB\-a\fR, \fB\-\-writeall\fR Write all remaining data in the output. .TP \fB\-c\fR, \fB\-\-metacomment\fR=\fI\,STR\/\fR Internal comments (FITS images: COMMENT keyword). .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-n\fR, \fB\-\-metaname\fR=\fI\,STR\/\fR Internal name (FITS images: EXTNAME keyword). .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name. .TP \fB\-O\fR, \fB\-\-onedasimage\fR Write 1D outputs as an image, not a table. .TP \fB\-s\fR, \fB\-\-onedonstdout\fR Write 1D output on stdout, not in a table. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table fmt: 'fits\-ascii', 'fits\-binary', 'txt'. .TP \fB\-u\fR, \fB\-\-metaunit\fR=\fI\,STR\/\fR Internal units (FITS images: BUNIT keyword). .TP \fB\-\-wcslinearmatrix\fR=\fI\,STR\/\fR WCS linear matrix of output ('pc' or 'cd'). .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Arithmetic is maintained as a Texinfo manual. If the .B info and .B Arithmetic programs are properly installed at your site, the command .IP .B info Arithmetic .PP should give you access to the complete manual. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astbuildprog.1����������������������������������������������������������������0000644�0001750�0001750�00000011425�14557514026�013075� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH BUILDPROGRAM "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME BuildProgram \- compile, link with Gnuastro library and its dependencies, and run a C program .SH SYNOPSIS .B astbuildprog [\fI\,OPTION\/\fR...] \fI\,C-source \/\fR[\fI\,ARGUMENTS TO RUN\/\fR] .SH DESCRIPTION BuildProgram is part of GNU Astronomy Utilities 0.22. BuildProgram will compile and run a C program, while automatically linking with libraries that Gnuastro depends on. Hence you do not have to worry about explicitly linking with CFITSIO for example if you want to work on a FITS file, or with GSL if you want to use GNU Scientific Library's functions. The standard compiler options of '\-I', '\-L', and '\-l' are also available for further customization of the build. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of BuildProgram's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astbuildprog \fB\-P\fR .TP Inputs/Outputs and options: $ info astbuildprog .TP Full section in manual/book: $ info BuildProgram .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP BuildProgram options: .IP Input: .TP \fB\-a\fR, \fB\-\-la\fR=\fI\,STR\/\fR Libtool '.la' to use instead of default. .TP \fB\-c\fR, \fB\-\-cc\fR=\fI\,STR\/\fR Name of C compiler's executable. .TP \fB\-e\fR, \fB\-\-noenv\fR No env. (e.g., LDFLAGS or CPPFLAGS) in build. .TP \fB\-I\fR, \fB\-\-includedir\fR=\fI\,STR\/\fR Directories to search for '#include's. .TP \fB\-l\fR, \fB\-\-linklib\fR=\fI\,STR\/\fR Link libraries, e.g., for libgsl: '\-lgsl'. .TP \fB\-L\fR, \fB\-\-linkdir\fR=\fI\,STR\/\fR Directory to search for libraries to link. .TP \fB\-t\fR, \fB\-\-tag\fR=\fI\,STR\/\fR Libtool '\-\-tag': programming language. .IP Output: .TP \fB\-b\fR, \fB\-\-onlybuild\fR Don't run the built program. .TP \fB\-d\fR, \fB\-\-deletecompiled\fR Delete compiled program after running. .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-g\fR, \fB\-\-debug\fR Debugging information in compiled binary. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name. .TP \fB\-O\fR, \fB\-\-optimize\fR=\fI\,INT\/\fR Optimization level: 0, 1, 2, 3. .TP \fB\-W\fR, \fB\-\-warning\fR=\fI\,STR\/\fR Compilation warnings on command\-line. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B BuildProgram is maintained as a Texinfo manual. If the .B info and .B BuildProgram programs are properly installed at your site, the command .IP .B info BuildProgram .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astconvertt.1�����������������������������������������������������������������0000644�0001750�0001750�00000015735�14557514026�012762� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH CONVERTTYPE "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME ConvertType \- convert known data types to each other .SH SYNOPSIS .B astconvertt [\fI\,OPTION\/\fR...] \fI\,InputFile1 \/\fR[\fI\,InputFile2\/\fR] ... [\fI\,InputFile4\/\fR] .SH DESCRIPTION ConvertType is part of GNU Astronomy Utilities 0.22. ConvertType will convert any of the known input formats to any other of the known formats. The output file will have the same number of pixels. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of ConvertType's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astconvertt \fB\-P\fR .TP Inputs/Outputs and options: $ info astconvertt .TP Full section in manual/book: $ info ConvertType .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP ConvertType options: .IP Input: .TP \fB\-g\fR, \fB\-\-globalhdu\fR=\fI\,STR\/\fR/INT Use this HDU for all inputs, ignore '\-\-hdu'. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT FITS input HDU, multiple calls possible. .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .TP \fB\-\-searchin\fR=\fI\,STR\/\fR Select column(s): 'name', 'unit', 'comment'. .TP \fB\-\-stdintimeout\fR=\fI\,INT\/\fR Micro\-seconds to wait for standard input. .IP Output: .TP \fB\-\-bordercolor\fR=\fI\,STR\/\fR Name of color to use for the border. .TP \fB\-\-colormap\fR=\fI\,STR[\/\fR,FLT] Color map when only a single channel is given. .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output filename or suffix. .TP \fB\-\-rgbtohsv\fR Convert RGB input into HSV (in FITS output) .TP \fB\-u\fR, \fB\-\-quality\fR=\fI\,INT\/\fR Quality of output JPEG image (1 to 100). .TP \fB\-\-wcslinearmatrix\fR=\fI\,STR\/\fR WCS linear matrix of output ('pc' or 'cd'). .TP \fB\-w\fR, \fB\-\-widthincm\fR=\fI\,FLT\/\fR Width in units of centimeters. .TP \fB\-x\fR, \fB\-\-hex\fR Hexadecimal encoding in EPS. Default: ASCII85. .IP Flux: .TP \fB\-A\fR, \fB\-\-forcemin\fR Force \fB\-\-fluxmin\fR, even when smaller than minimum. .TP \fB\-B\fR, \fB\-\-forcemax\fR Force \fB\-\-fluxmax\fR, even when larger than maximum. .TP \fB\-c\fR, \fB\-\-change\fR=\fI\,STR\/\fR Change pixel values 'from_1:to_1,from_2:to_2'. .TP \fB\-C\fR, \fB\-\-changeaftertrunc\fR First truncate then change pixel values. .TP \fB\-H\fR, \fB\-\-fluxhigh\fR=\fI\,FLT\/\fR Higher flux truncation value. .TP \fB\-i\fR, \fB\-\-invert\fR Invert the values in JPEG and EPS/PDF. .TP \fB\-L\fR, \fB\-\-fluxlow\fR=\fI\,FLT\/\fR Lower flux truncation value. .TP \fB\-m\fR, \fB\-\-maxbyte\fR=\fI\,INT\/\fR Maximum byte value for all color channels. .IP Vector graphics (only for EPS or PDF outputs) .TP \fB\-b\fR, \fB\-\-borderwidth\fR=\fI\,INT\/\fR Border width in units of points (1/72 inch). .TP \fB\-\-listcolors\fR List names and RGB info of all colors. .TP \fB\-\-listfonts\fR List names of available fonts. .TP \fB\-\-markcolor\fR=\fI\,STR\/\fR Name or Number of col. with mark color. .TP \fB\-\-markfont\fR=\fI\,STR\/\fR Name or Num. of col. with mark font name. .TP \fB\-\-markfontsize\fR=\fI\,STR\/\fR Name or Num. of col. with mark font size. .TP \fB\-\-marklinewidth\fR=\fI\,STR\/\fR Name or Number of col. with line width. .TP \fB\-\-markrotate\fR=\fI\,STR\/\fR Name or Num. of col. with mark rotation. .TP \fB\-\-marks\fR=\fI\,STR\/\fR Name of mark information table. .TP \fB\-\-markshape\fR=\fI\,STR\/\fR Name or Number of col. with mark shapes: circle (1), plus (2), cross (3), ellipse (4), point(5), square (6) rectangle (7) and line (8). .TP \fB\-\-markshdu\fR=\fI\,STR\/\fR HDU in '\-\-marks' (if its a FITS file). .TP \fB\-\-marksize\fR=\fI\,STR[\/\fR,STR] Name or Number of cols. with mark size(s). .TP \fB\-\-marktext\fR=\fI\,STR\/\fR Name or Num. of col. with mark text. .TP \fB\-\-marktextprecision\fR=\fI\,INT\/\fR Number decimals when text is float column. .TP \fB\-O\fR, \fB\-\-mode\fR=\fI\,STR\/\fR Coordinate mode for marks ('wcs' or 'img'). .TP \fB\-r\fR, \fB\-\-markcoords\fR=\fI\,STR\/\fR,STR Name or Number of columns with coordinates. .TP \fB\-\-showfonts\fR Show all fonts in a PDF. .TP \fB\-\-sizeinarcmin\fR Size col. values are in arcmin (in WCS\-mode). .TP \fB\-\-sizeinarcsec\fR Size col. values are in arcsec (in WCS\-mode). .TP \fB\-\-sizeinpix\fR Size col. values are in pixels (in WCS\-mode). .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B ConvertType is maintained as a Texinfo manual. If the .B info and .B ConvertType programs are properly installed at your site, the command .IP .B info ConvertType .PP should give you access to the complete manual. �����������������������������������gnuastro-0.22/doc/man/astconvolve.1�����������������������������������������������������������������0000644�0001750�0001750�00000013144�14557514026�012741� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH CONVOLVE "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME Convolve \- convolve an image with a given kernel .SH SYNOPSIS .B astconvolve [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION Convolve is part of GNU Astronomy Utilities 0.22. Convolve will convolve an input image with a given spatial kernel (image) in the spatial domain (no edge effects) or frequency domain. The latter suffers from edge effects, but can be much faster. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Convolve's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astconvolve \fB\-P\fR .TP Inputs/Outputs and options: $ info astconvolve .TP Full section in manual/book: $ info Convolve .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Convolve options: .IP Input: .TP \fB\-c\fR, \fB\-\-column\fR=\fI\,STR\/\fR Column name or number if input is a table. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .TP \fB\-H\fR, \fB\-\-minsharpspec\fR=\fI\,FLT\/\fR Deconvolution: min spectrum of sharp img. .TP \fB\-\-kernelcolumn\fR=\fI\,STR\/\fR Column name or number if kernel is a table. .TP \fB\-k\fR, \fB\-\-kernel\fR=\fI\,FITS\/\fR File name of kernel for convolution. .TP \fB\-\-nokernelflip\fR Do not flip the kernel image. .TP \fB\-\-nokernelnorm\fR Do not normalize the kernel image. .TP \fB\-\-searchin\fR=\fI\,STR\/\fR Select column(s): 'name', 'unit', 'comment'. .TP \fB\-\-stdintimeout\fR=\fI\,INT\/\fR Micro\-seconds to wait for standard input. .TP \fB\-u\fR, \fB\-\-khdu\fR=\fI\,STR\/\fR HDU containing the kernel. .IP Tessellation (tile grid): .TP \fB\-\-checktiles\fR Tile IDs in an image, the size of input. .TP \fB\-F\fR, \fB\-\-remainderfrac\fR=\fI\,FLT\/\fR Fraction of remainder to split last tile. .TP \fB\-\-interpmetric\fR=\fI\,STR\/\fR Interpolation metric (radial, manhattan). .HP \fB\-M\fR, \fB\-\-numchannels\fR=\fI\,INT[\/\fR,..] No. of channels in dim.s (FITS order). .TP \fB\-\-oneelempertile\fR Display 1 element/tile, not full input res. .TP \fB\-\-workoverch\fR Work (not tile) over channel edges. .TP \fB\-Z\fR, \fB\-\-tilesize\fR=\fI\,INT[\/\fR,INT] Regular tile size on dim.s (FITS order). .IP Output: .TP \fB\-\-conv\-on\-blank\fR Do convolution on blank pixels also. .TP \fB\-C\fR, \fB\-\-checkfreqsteps\fR View the steps in the frequency domain. .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-\-noedgecorrection\fR Do not correct the edges in the spatial domain .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table fmt: 'fits\-ascii', 'fits\-binary', 'txt'. .TP \fB\-T\fR, \fB\-\-type\fR=\fI\,STR\/\fR Type of output: e.g., int16, float32, etc... .TP \fB\-\-wcslinearmatrix\fR=\fI\,STR\/\fR WCS linear matrix of output ('pc' or 'cd'). .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-d\fR, \fB\-\-domain\fR=\fI\,STR\/\fR Convolution domain: 'spatial', 'frequency'. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-m\fR, \fB\-\-makekernel\fR=\fI\,INT\/\fR Make 2*INT kernel to create input image. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Convolve is maintained as a Texinfo manual. If the .B info and .B Convolve programs are properly installed at your site, the command .IP .B info Convolve .PP should give you access to the complete manual. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astcosmiccal.1����������������������������������������������������������������0000644�0001750�0001750�00000012071�14557514026�013041� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH COSMICCALCULATOR "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME CosmicCalculator \- estimate cosmological values .SH SYNOPSIS .B astcosmiccal [\fI\,OPTION\/\fR...] .SH DESCRIPTION CosmicCalculator is part of GNU Astronomy Utilities 0.22. CosmicCalculator will do cosmological calculations. If no redshfit is specified, it will only print the main input parameters. If only a redshift is given, it will print a table of all calculations. If any of the single row calculations are requested, only their values will be printed with a single space between each. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of CosmicCalculator's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astcosmiccal \fB\-P\fR .TP Inputs/Outputs and options: $ info astcosmiccal .TP Full section in manual/book: $ info CosmicCalculator .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP CosmicCalculator options: .IP Input: .TP \fB\-H\fR, \fB\-\-H0\fR=\fI\,FLT\/\fR Current expansion rate (Hubble constant). .TP \fB\-l\fR, \fB\-\-olambda\fR=\fI\,FLT\/\fR Current cosmological cst. dens. per crit. dens. .TP \fB\-m\fR, \fB\-\-omatter\fR=\fI\,FLT\/\fR Current matter density per critical density. .TP \fB\-O\fR, \fB\-\-obsline\fR=\fI\,STR\/\fR,FLT Redshift from line and observed wavelength. .TP \fB\-r\fR, \fB\-\-oradiation\fR=\fI\,FLT\/\fR Current radiation density per critical density. .TP \fB\-y\fR, \fB\-\-velocity\fR=\fI\,FLT\/\fR Velocity of interest in km/s. .TP \fB\-z\fR, \fB\-\-redshift\fR=\fI\,FLT\/\fR Redshift of interest. .IP Basic cosmology calculations .TP \fB\-a\fR, \fB\-\-absmagconv\fR Conversion to absolute magnitude (no unit). .TP \fB\-A\fR, \fB\-\-angulardiamdist\fR Angular diameter distance (Mpc). .TP \fB\-b\fR, \fB\-\-lookbacktime\fR Look back time to z (Ga: Giga Annum). .TP \fB\-c\fR, \fB\-\-criticaldensity\fR Critical density at z (g/cm^3). .TP \fB\-C\fR, \fB\-\-criticaldensitynow\fR Critical density now (g/cm^3). .TP \fB\-d\fR, \fB\-\-properdistance\fR Proper distance to z (Mpc). .TP \fB\-e\fR, \fB\-\-usedredshift\fR Used redshift in this run. .TP \fB\-g\fR, \fB\-\-age\fR Age of universe at z (Ga: Giga Annum). .TP \fB\-G\fR, \fB\-\-agenow\fR Age of universe now (Ga: Giga Annum). .TP \fB\-L\fR, \fB\-\-luminositydist\fR Luminosity distance to z (Mpc). .TP \fB\-s\fR, \fB\-\-arcsectandist\fR Tangential dist. covered by 1arcsec at z (kpc). .TP \fB\-u\fR, \fB\-\-distancemodulus\fR Distance modulus at z (no units). .TP \fB\-v\fR, \fB\-\-volume\fR Comoving volume (4pi str) to z (Mpc^3). .TP \fB\-Y\fR, \fB\-\-usedvelocity\fR Used velocity (in km/s) for this run. .IP Spectral lines .TP \fB\-i\fR, \fB\-\-lineatz\fR=\fI\,STR\/\fR/FLT Wavelength of line (name or wavelength) at z. .TP \fB\-\-lineunit\fR=\fI\,STR\/\fR Unit ('angstrom', 'nm', 'microm' or 'm'). .TP \fB\-\-listlines\fR List pre\-defined lines at rest frame. .TP \fB\-\-listlinesatz\fR List pre\-defined lines at the given redshift. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B CosmicCalculator is maintained as a Texinfo manual. If the .B info and .B CosmicCalculator programs are properly installed at your site, the command .IP .B info CosmicCalculator .PP should give you access to the complete manual. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astcrop.1���������������������������������������������������������������������0000644�0001750�0001750�00000014202�14557514026�012045� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH CROP "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME Crop \- crop regions of a dataset .SH SYNOPSIS .B astcrop [\fI\,OPTION\/\fR...] [\fI\,Crop-Identifier\/\fR] \fI\,ASTRdata \/\fR... .SH DESCRIPTION Crop is part of GNU Astronomy Utilities 0.22. Crop will create cutouts, thumbnails, postage stamps or crops of region(s) from input image(s) using image or celestial coordinates. If muliple crops are desired, a catalog must be provided. When in WCS mode, if the cut out covers more than one input image, all overlapping input images will be stitched in the output. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Crop's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astcrop \fB\-P\fR .TP Inputs/Outputs and options: $ info astcrop .TP Full section in manual/book: $ info Crop .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Crop options: .IP Input: .TP \fB\-\-hendwcs\fR=\fI\,INT\/\fR Header keyword number to stop reading WCS. .TP \fB\-\-hstartwcs\fR=\fI\,INT\/\fR Header keyword number to start reading WCS. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of (all) input(s). .TP \fB\-O\fR, \fB\-\-mode\fR=\fI\,STR\/\fR Coordinate mode 'img' or 'wcs'. .TP \fB\-z\fR, \fB\-\-zeroisnotblank\fR 0.0 in float or double images are not blank. .IP Output: .TP \fB\-a\fR, \fB\-\-metaname\fR=\fI\,STR\/\fR Name of output HDU (EXTNAME keyword in FITS). .TP \fB\-A\fR, \fB\-\-append\fR If output exists, append crop to existing HDUs. .TP \fB\-b\fR, \fB\-\-noblank\fR Remove parts of the crop box out of input image. .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name. .TP \fB\-\-primaryimghdu\fR Write crop in primary/zero\-th HDU of output. .TP \fB\-p\fR, \fB\-\-suffix\fR=\fI\,STR\/\fR Suffix (postfix) of cropped images. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table fmt: 'fits\-ascii', 'fits\-binary', 'txt'. .TP \fB\-t\fR, \fB\-\-oneelemstdout\fR Print one element's value on stdout. .TP \fB\-T\fR, \fB\-\-type\fR=\fI\,STR\/\fR Type of output: e.g., int16, float32, etc... .TP \fB\-\-wcslinearmatrix\fR=\fI\,STR\/\fR WCS linear matrix of output ('pc' or 'cd'). .HP \fB\-X\fR, \fB\-\-widthinpix\fR \fB\-\-width\fR is in pixels (even in WCS mode). .IP Crop by center .TP \fB\-\-checkcenter\fR=\fI\,FLT\/\fR/INT Width (in pixels) of box at center to check. .TP \fB\-c\fR, \fB\-\-center\fR=\fI\,FLT[\/\fR,...] Central coordinates of a single crop. .TP \fB\-w\fR, \fB\-\-width\fR=\fI\,FLT[\/\fR,...] Width when crop is defined by its center. .IP Crop by center (when a catalog is given) .TP \fB\-\-cathdu\fR=\fI\,STR\/\fR/INT HDU of catalog, if it is a FITS table. .TP \fB\-C\fR, \fB\-\-catalog\fR=\fI\,FITS\/\fR/TXT Input catalog filename. .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .TP \fB\-n\fR, \fB\-\-namecol\fR=\fI\,STR\/\fR/INT Column no./info of crop filename (no suffix). .TP \fB\-\-searchin\fR=\fI\,STR\/\fR Select column(s): 'name', 'unit', 'comment'. .TP \fB\-x\fR, \fB\-\-coordcol\fR=\fI\,STR\/\fR/INT Column no./info containing coordinates. .IP Crop by region .TP \fB\-l\fR, \fB\-\-polygon\fR=\fI\,FLT\/\fR,FLT[:...] Polygon vertices, also a DS9 region file. .TP \fB\-\-polygonout\fR Keep the polygon's outside, mask the inside. .TP \fB\-\-polygonsort\fR Sort polygon vertices as counter\-clockwise. .TP \fB\-s\fR, \fB\-\-section\fR=\fI\,STR\/\fR Image section string specifying crop range. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Crop is maintained as a Texinfo manual. If the .B info and .B Crop programs are properly installed at your site, the command .IP .B info Crop .PP should give you access to the complete manual. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astfits.1���������������������������������������������������������������������0000644�0001750�0001750�00000015044�14557514026�012054� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH FITS "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME Fits \- view and manipulate FITS headers .SH SYNOPSIS .B astfits [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION Fits is part of GNU Astronomy Utilities 0.22. Fits allows you to view and manipulate (add, delete, or modify) FITS extensions (or HDUs) and FITS header keywords within one extension. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Fits's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astfits \fB\-P\fR .TP Inputs/Outputs and options: $ info astfits .TP Full section in manual/book: $ info Fits .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Fits options: .IP Input: .TP \fB\-\-arguments\fR=\fI\,STR\/\fR Plain\-text file with command\-line arguments. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .IP Output: .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-\-outhdu\fR=\fI\,STR\/\fR HDU/extension in output for \fB\-\-copykeys\fR. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name (not for keywords). .TP \fB\-O\fR, \fB\-\-colinfoinstdout\fR Column info/metadata when printing to stdout. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table fmt: 'fits\-ascii', 'fits\-binary', 'txt'. .TP \fB\-T\fR, \fB\-\-type\fR=\fI\,STR\/\fR Type of output: e.g., int16, float32, etc... .IP HDU (extension) information: .TP \fB\-\-datasum\fR Calculate HDU's datasum and print in stdout. .TP \fB\-\-datasum\-encoded\fR 16 character string encoding of '\-\-datasum'. .TP \fB\-\-hasimagehdu\fR File has at least one image HDU. .TP \fB\-\-hastablehdu\fR File has at least one table HDU. .TP \fB\-\-listallhdus\fR List all HDUs within the file. .TP \fB\-\-listimagehdus\fR List all image HDUs within the file. .TP \fB\-\-listtablehdus\fR List all table HDUs within the file. .TP \fB\-n\fR, \fB\-\-numhdus\fR Print number of HDUs in the given FITS file. .TP \fB\-\-pixelareaarcsec2\fR Pixel area in arc\-seconds squared. .TP \fB\-\-pixelscale\fR Return the pixel\-scale of the HDU's WCS. .TP \fB\-\-skycoverage\fR Image coverage in the WCS coordinates. .IP HDU (extension) manipulation: .TP \fB\-C\fR, \fB\-\-copy\fR=\fI\,STR\/\fR/INT Copy extension to output file. .TP \fB\-k\fR, \fB\-\-cut\fR=\fI\,STR\/\fR/INT Copy extension to output and remove from input. .TP \fB\-\-primaryimghdu\fR Copy/cut image HDUs to primary/zero\-th HDU. .TP \fB\-R\fR, \fB\-\-remove\fR=\fI\,STR\/\fR/INT Remove extension from input file. .IP Keywords (in one HDU): .TP \fB\-a\fR, \fB\-\-asis\fR=\fI\,STR\/\fR Write value as\-is (may corrupt FITS file). .TP \fB\-\-copykeys\fR=\fI\,INT\/\fR:INT/STR,STR Range/Names of keywords to copy in output. .TP \fB\-c\fR, \fB\-\-comment\fR=\fI\,STR\/\fR Add COMMENT keyword, any length is ok. .TP \fB\-d\fR, \fB\-\-delete\fR=\fI\,STR\/\fR Delete a keyword from the header. .TP \fB\-H\fR, \fB\-\-history\fR=\fI\,STR\/\fR Add HISTORY keyword, any length is ok. .TP \fB\-l\fR, \fB\-\-keyvalue\fR=\fI\,STR[\/\fR,STR,...] Only print the value of requested keyword(s). .TP \fB\-\-printkeynames\fR Print all keyword names. .TP \fB\-p\fR, \fB\-\-printallkeys\fR Print all keywords in the selected HDU. .TP \fB\-r\fR, \fB\-\-rename\fR=\fI\,STR\/\fR,STR Rename keyword, keeping value and comments. .TP \fB\-s\fR, \fB\-\-datetosec\fR=\fI\,STR\/\fR FITS date to sec from 1970/01/01T00:00:00 .TP \fB\-t\fR, \fB\-\-date\fR Set the DATE keyword to the current time. .TP \fB\-u\fR, \fB\-\-update\fR=\fI\,STR\/\fR,STR Update a keyword value or comments. .TP \fB\-v\fR, \fB\-\-verify\fR Verify the CHECKSUM and DATASUM keywords. .TP \fB\-\-wcscoordsys\fR=\fI\,STR\/\fR Convert WCS coordinate system. .TP \fB\-\-wcsdistortion\fR=\fI\,STR\/\fR Convert WCS distortion to another type. .TP \fB\-w\fR, \fB\-\-write\fR=\fI\,STR\/\fR Write a keyword (with value, comments and units). .IP Meta\-image creation: .TP \fB\-\-edgesampling\fR=\fI\,INT\/\fR Number of extra samplings in pixel sides. .TP \fB\-\-pixelareaonwcs\fR Image where pixels show their area in sky (WCS). .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-Q\fR, \fB\-\-quitonerror\fR Quit if there is an error on any action. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Fits is maintained as a Texinfo manual. If the .B info and .B Fits programs are properly installed at your site, the command .IP .B info Fits .PP should give you access to the complete manual. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astmatch.1��������������������������������������������������������������������0000644�0001750�0001750�00000011713�14557514026�012202� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH MATCH "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME Match \- match catalogs by 1D or 2D positions .SH SYNOPSIS .B astmatch [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION Match is part of GNU Astronomy Utilities 0.22. Match matches catalogs of objects and (by default) will return the re\-arranged matching inputs. The optional log file will return low\-level information about the match (indexs and distances). .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Match's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astmatch \fB\-P\fR .TP Inputs/Outputs and options: $ info astmatch .TP Full section in manual/book: $ info Match .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Match options: .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of first input. .TP \fB\-H\fR, \fB\-\-hdu2\fR=\fI\,STR\/\fR/INT Extension name or number of second input. .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .TP \fB\-\-searchin\fR=\fI\,STR\/\fR Select column(s): 'name', 'unit', 'comment'. .TP \fB\-\-stdintimeout\fR=\fI\,INT\/\fR Micro\-seconds to wait for standard input. .IP Output: .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-l\fR, \fB\-\-logasoutput\fR No rearranging of inputs, output is log file .TP \fB\-\-notmatched\fR Output is rows that don't match. .TP \fB\-\-outcols\fR=\fI\,STR\/\fR Out cols in CSV, 'a': first, 'b': second input. .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table fmt: 'fits\-ascii', 'fits\-binary', 'txt'. .TP \fB\-\-wcslinearmatrix\fR=\fI\,STR\/\fR WCS linear matrix of output ('pc' or 'cd'). .IP Catalog matching .TP \fB\-a\fR, \fB\-\-aperture\fR=\fI\,FLT[\/\fR,...] Acceptable aperture for matching. .TP \fB\-c\fR, \fB\-\-ccol1\fR=\fI\,STR[\/\fR,STR] Column name/number of first catalog. .TP \fB\-C\fR, \fB\-\-ccol2\fR=\fI\,STR[\/\fR,STR] Column name/number of second catalog. .TP \fB\-d\fR, \fB\-\-coord\fR=\fI\,FLT[\/\fR,FLT] Manually input coordiantes. .TP \fB\-\-kdtreehdu\fR=\fI\,STR\/\fR HDU of k\-d tree when \fB\-\-kdtree\fR=\fI\,FILE\/\fR.fits. .TP \fB\-k\fR, \fB\-\-kdtree\fR=\fI\,STR\/\fR build, internal, disable, CUSTOM\-FITS\-FILE. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Match is maintained as a Texinfo manual. If the .B info and .B Match programs are properly installed at your site, the command .IP .B info Match .PP should give you access to the complete manual. �����������������������������������������������������gnuastro-0.22/doc/man/astmkcatalog.1����������������������������������������������������������������0000644�0001750�0001750�00000034604�14557514026�013054� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH MAKECATALOG "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME MakeCatalog \- Make a catalog from labeled input images .SH SYNOPSIS .B astmkcatalog [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION MakeCatalog is part of GNU Astronomy Utilities 0.22. MakeCatalog will create a catalog from an input, labeled, and noise images. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of MakeCatalog's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astmkcatalog \fB\-P\fR .TP Inputs/Outputs and options: $ info astmkcatalog .TP Full section in manual/book: $ info MakeCatalog .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP MakeCatalog options: .IP Input: .TP \fB\-\-clumpshdu\fR=\fI\,STR\/\fR Clump labels extension name or number. .TP \fB\-\-forcereadstd\fR Read STD even if no columns need it. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .TP \fB\-l\fR, \fB\-\-clumpsfile\fR=\fI\,FITS\/\fR Dataset containing clump labels. .TP \fB\-\-sigmaclip\fR=\fI\,FLT\/\fR,FLT Sigma\-clip column multiple and tolerance. .TP \fB\-\-skyhdu\fR=\fI\,STR\/\fR Sky image extension name or number. .TP \fB\-\-stdhdu\fR=\fI\,STR\/\fR Sky STD extension name or number. .TP \fB\-\-subtractsky\fR Subtract the Sky dataset from the values. .TP \fB\-s\fR, \fB\-\-insky\fR=\fI\,FITS\/\fR/FLT Input Sky value or file. .TP \fB\-t\fR, \fB\-\-instd\fR=\fI\,STR\/\fR/FLT Sky standard deviation value or dataset. .TP \fB\-\-valueshdu\fR=\fI\,STR\/\fR Name or number of extension containing values. .TP \fB\-\-variance\fR STD input dataset is actually variance. .TP \fB\-v\fR, \fB\-\-valuesfile\fR=\fI\,FITS\/\fR Values/brightness dataset. .TP \fB\-\-zeropoint\fR=\fI\,FLT\/\fR Zeropoint magnitude of input dataset. .IP Tessellation (tile grid): .TP \fB\-\-checktiles\fR Tile IDs in an image, the size of input. .TP \fB\-F\fR, \fB\-\-remainderfrac\fR=\fI\,FLT\/\fR Fraction of remainder to split last tile. .TP \fB\-\-interpmetric\fR=\fI\,STR\/\fR Interpolation metric (radial, manhattan). .HP \fB\-M\fR, \fB\-\-numchannels\fR=\fI\,INT[\/\fR,..] No. of channels in dim.s (FITS order). .TP \fB\-\-oneelempertile\fR Display 1 element/tile, not full input res. .TP \fB\-Z\fR, \fB\-\-tilesize\fR=\fI\,INT[\/\fR,INT] Regular tile size on dim.s (FITS order). .IP Output: .TP \fB\-C\fR, \fB\-\-clumpscat\fR Make a clumps catalog also. .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-\-inbetweenints\fR Keep rows (integer ids) with no labels. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-\-noclumpsort\fR Don't sort the clumps catalog by ID. .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name. .TP \fB\-\-sfmagarea\fR=\fI\,FLT\/\fR Surface brightness area (in arcseconds^2). .TP \fB\-\-sfmagnsigma\fR=\fI\,FLT\/\fR Surface brightness multiple of Sky STD. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table fmt: 'fits\-ascii', 'fits\-binary', 'txt'. .TP \fB\-\-wcslinearmatrix\fR=\fI\,STR\/\fR WCS linear matrix of output ('pc' or 'cd'). .IP Upper limit magnitude settings: .HP \fB\-\-checkuplim\fR=\fI\,INT[\/\fR,INT] Check random distribution for one label. .TP \fB\-e\fR, \fB\-\-envseed\fR Use GSL_RNG_SEED environment variable for seed. .TP \fB\-\-upmaskfile\fR=\fI\,FITS\/\fR Mask image file name only for upper limit. .TP \fB\-\-upmaskhdu\fR=\fI\,STR\/\fR Mask image HDU only for upper limit. .TP \fB\-\-upnsigma\fR=\fI\,FLT\/\fR Multiple of sigma to define upperlimit. .TP \fB\-\-upnum\fR=\fI\,INT\/\fR Number of randomly positioned samples .TP \fB\-\-uprange\fR=\fI\,INT\/\fR,INT Range of random positions (pix) around target. .TP \fB\-\-upsigmaclip\fR=\fI\,FLT\/\fR,FLT Sigma multiple and, tolerance or number. .IP Settings for other columns: .TP \fB\-\-frac\-max\fR=\fI\,FLT[\/\fR,FLT] Fraction(s) in \fB\-\-frac\-max\fR* options. .TP \fB\-\-spatialresolution\fR=\fI\,FLT\/\fR Spatial resolution (for surf. brightness err). .IP Identifier columns .TP \fB\-\-id\-in\-host\-obj\fR ID of clump in host object. .TP \fB\-i\fR, \fB\-\-ids\fR All IDs of objects and clumps. .TP \fB\-j\fR, \fB\-\-host\-obj\-id\fR ID of object hosting this clump. .TP \fB\-\-obj\-id\fR Object label/ID. .IP Positional (pixel/image) measurements .TP \fB\-\-area\-max\-val\fR Number of pixels used in '\-\-max\-val\-*'. .TP \fB\-\-area\-min\-val\fR Number of pixels used in '\-\-min\-val\-*'. .TP \fB\-\-clumps\-geo\-x\fR Geometric center of all clumps in obj. (X). .TP \fB\-\-clumps\-geo\-y\fR Geometric center of all clumps in obj. (Y). .TP \fB\-\-clumps\-geo\-z\fR Geometric center of all clumps in obj. (Z). .TP \fB\-\-clumps\-x\fR Flux.wht center of all clumps in obj. (X). .TP \fB\-\-clumps\-y\fR Flux.wht center of all clumps in obj. (Y). .TP \fB\-\-clumps\-z\fR Flux.wht center of all clumps in obj. (Z). .TP \fB\-\-geo\-x\fR Geometric center in first FITS axis. .TP \fB\-\-geo\-y\fR Geometric center in second FITS axis. .TP \fB\-\-geo\-z\fR Geometric center in third FITS axis. .TP \fB\-\-max\-val\-x\fR Maximum value's X axis position. .TP \fB\-\-max\-val\-y\fR Maximum value's Y axis position. .TP \fB\-\-max\-val\-z\fR Maximum value's Z axis position .TP \fB\-\-max\-x\fR Maximum X axis position. .TP \fB\-\-max\-y\fR Maximum Y axis position. .TP \fB\-\-max\-z\fR Maximum Z axis position. .TP \fB\-\-min\-val\-x\fR Minimum value's X axis position. .TP \fB\-\-min\-val\-y\fR Minimum value's Y axis position. .TP \fB\-\-min\-val\-z\fR Minimum value's Z axis position. .TP \fB\-\-min\-x\fR Minimum X axis position. .TP \fB\-\-min\-y\fR Minimum Y axis position. .TP \fB\-\-min\-z\fR Minimum Z axis position .TP \fB\-x\fR, \fB\-\-x\fR Flux weighted center in first FITS axis. .TP \fB\-y\fR, \fB\-\-y\fR Flux weighted center in second FITS axis. .TP \fB\-z\fR, \fB\-\-z\fR Flux weighted center in third FITS axis. .IP Positional (WCS) measurements .TP \fB\-\-clumps\-geo\-w1\fR Geometric center of all clumps in 1st WCS. .TP \fB\-\-clumps\-geo\-w2\fR Geometric center of all clumps in 2nd WCS. .TP \fB\-\-clumps\-geo\-w3\fR Geometric center of all clumps in 3rd WCS. .TP \fB\-\-clumps\-w1\fR Flux.wht center of all clumps in 1st WCS. .TP \fB\-\-clumps\-w2\fR Flux.wht center of all clumps in 2nd WCS. .TP \fB\-\-clumps\-w3\fR Flux.wht center of all clumps in 3rd WCS. .TP \fB\-d\fR, \fB\-\-dec\fR Flux weighted center declination. .TP \fB\-\-geo\-w1\fR Geometric center in first WCS axis. .TP \fB\-\-geo\-w2\fR Geometric center in second WCS axis. .TP \fB\-\-geo\-w3\fR Geometric center in third WCS axis. .TP \fB\-r\fR, \fB\-\-ra\fR Flux weighted center right ascension. .TP \fB\-\-w1\fR Flux weighted center in first WCS axis. .TP \fB\-\-w2\fR Flux weighted center in second WCS axis. .TP \fB\-\-w3\fR Flux weighted center in third WCS axis. .IP Brightness/magnitude (only using pixel value/error) measurements .TP \fB\-\-clumps\-magnitude\fR Magnitude of all clumps in object. .TP \fB\-\-clumps\-sum\fR Brightness of clumps in an object. .TP \fB\-\-magnitude\-error\fR Magnitude error of objects or clumps. .TP \fB\-\-maximum\fR Maximum value (mean of top three pixels) .TP \fB\-\-mean\fR Mean of values in object/clump. .TP \fB\-\-median\fR Median of values in object/clump. .TP \fB\-m\fR, \fB\-\-magnitude\fR Total magnitude of objects or clumps. .TP \fB\-\-river\-max\fR Maximum river value around clump. .TP \fB\-\-river\-mean\fR Mean river value surrounding a clump. .TP \fB\-\-river\-min\fR Minimum river value around clump. .TP \fB\-\-river\-num\fR Number of river pixels around a clump. .TP \fB\-\-sigclip\-mean\fR Mean after Sigma\-clipping .TP \fB\-\-sigclip\-median\fR Median after Sigma\-clipping .TP \fB\-\-sigclip\-number\fR Number of pixels in Sigma\-clipped measurement. .TP \fB\-\-sigclip\-std\fR Standard deviation after Sigma\-clipping .TP \fB\-\-sky\fR Sky value (per pixel). .TP \fB\-\-sky\-std\fR Sky standard deviation (per pixel). .TP \fB\-\-sn\fR Signal to noise ratio of objects or clumps. .TP \fB\-\-std\fR Standard dev. of values in object/clump. .TP \fB\-\-sum\fR Sum of pixel values in each label. .TP \fB\-\-sum\-error\fR Error (1\-sigma) in measuring sum. .TP \fB\-\-sum\-no\-river\fR Sky (not river) subtracted clump sum. .TP \fB\-\-upperlimit\fR Upper\-limit value, use other options to config. .TP \fB\-\-upperlimit\-mag\fR Upper\-limit mag. use other options to config. .TP \fB\-\-upperlimit\-onesigma\fR Upper\-limit one sigma value. .TP \fB\-\-upperlimit\-quantile\fR Quantile in random distribution (max 1). .TP \fB\-\-upperlimit\-sigma\fR Place in random distribution (sigma multiple). .TP \fB\-\-upperlimit\-skew\fR (Mean\-Median)/STD of random distribution. .IP Surface brightness measurements (all: mag/arcsec^2) .TP \fB\-\-half\-max\-sb\fR Surface brightness within half the maximum. .TP \fB\-\-half\-sum\-sb\fR Surface brightness within \fB\-\-halfsumarea\fR. .TP \fB\-\-sb\fR Surface brightness. .TP \fB\-\-sb\-error\fR Surface brightness error from STD/VAR image. .TP \fB\-\-sigclip\-mean\-sb\fR Surface brightness of sigclip\-mean (1 pix area). .TP \fB\-\-sigclip\-mean\-sb\-delta\fR sigclip\-mean\-sb delta from sigclip'd STD. .TP \fB\-\-sigclip\-std\-sb\fR Surface brightness of sigclip\-std (1 pix area). .TP \fB\-\-upperlimit\-sb\fR Upper\-limit surface brightness. .IP Morphology/shape (non\-parametric) measurements .TP \fB\-\-area\fR Number of non\-blank valued pixels. .TP \fB\-\-area\-arcsec2\fR Area of labeled region in arcsec^2. .TP \fB\-\-area\-xy\fR Projected area in first two dimensions. .TP \fB\-\-clumps\-area\fR Non\-blank area covered by clumps. .TP \fB\-\-frac\-max1\-area\fR Area containing 1st fraction of maximum. .TP \fB\-\-frac\-max1\-radius\fR Radius calculated from \fB\-\-fracmaxarea1\fR. .TP \fB\-\-frac\-max1\-sum\fR Sum of pixels brighter than 1st frac. of max. .TP \fB\-\-frac\-max2\-area\fR Area containing 2nd fraction of maximum. .TP \fB\-\-frac\-max2\-radius\fR Radius calculated from \fB\-\-fracmaxarea2\fR. .TP \fB\-\-frac\-max2\-sum\fR Sum of pixels brighter than 2nd frac. of max. .TP \fB\-\-fwhm\fR Full width at half max (non\-parametric). .TP \fB\-\-geo\-area\fR Area labled region (irrespective of value). .TP \fB\-\-geo\-area\-xy\fR Projected geo\-area in first two dimensions. .TP \fB\-\-half\-max\-area\fR No. pixels valued above half the max. .TP \fB\-\-half\-max\-radius\fR Radius at half the maximum (non\-parametric). .TP \fB\-\-half\-max\-sum\fR Sum of pixels above half the maximum. .TP \fB\-\-half\-sum\-area\fR Area containing half of \fB\-\-brightness\fR. .TP \fB\-\-half\-sum\-radius\fR Radius calculated from \fB\-\-halfsumarea\fR. .TP \fB\-\-num\-clumps\fR Number of clumps in this object. .TP \fB\-\-weight\-area\fR Area used for value weighted positions. .IP Morphology/shape (elliptical) measurements .TP \fB\-\-axis\-ratio\fR Flux weighted axis ratio. .TP \fB\-\-geo\-axis\-ratio\fR Geometric (ignoring values, only lab) axis ratio. .TP \fB\-\-geo\-position\-angle\fR Geometric (ignoring values, only lab) pos. angle. .TP \fB\-\-geo\-semi\-major\fR Geometric RMS along major axis (ignoring value). .TP \fB\-\-geo\-semi\-minor\fR Geometric RMS along minor axis (ignoring value). .TP \fB\-\-position\-angle\fR Flux weighted position angle. .TP \fB\-\-semi\-major\fR RMS along major axis (in pixels). .TP \fB\-\-semi\-minor\fR RMS along minor axis (in pixels). .IP Vector (multi\-valued) measurements .TP \fB\-\-area\-in\-slice\fR [3D input] Number of labeled in each slice. .TP \fB\-\-area\-other\-in\-slice\fR [3D input] Area of other lab. in projected area. .TP \fB\-\-area\-proj\-in\-slice\fR [3D input] Num. voxels in '\-\-sum\-proj\-in\-slice'. .TP \fB\-\-sum\-err\-in\-slice\fR [3D input] Error in '\-\-sum\-in\-slice'. .TP \fB\-\-sum\-in\-slice\fR [3D input] Sum of values in each slice. .TP \fB\-\-sum\-other\-err\-in\-slice\fR [3D input] Area in '\-\-sum\-other\-in\-slice'. .TP \fB\-\-sum\-other\-in\-slice\fR [3D input] Sum of other lab. in projected area. .TP \fB\-\-sum\-proj\-err\-in\-slice\fR [3D input] Error of '\-\-sum\-proj\-in\-slice'. .TP \fB\-\-sum\-proj\-in\-slice\fR [3D input] Sum of projected area in each slice. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B MakeCatalog is maintained as a Texinfo manual. If the .B info and .B MakeCatalog programs are properly installed at your site, the command .IP .B info MakeCatalog .PP should give you access to the complete manual. ����������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astmkprof.1�������������������������������������������������������������������0000644�0001750�0001750�00000017647�14557514026�012420� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH MAKEPROFILES "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME MakeProfiles \- make standard 2D profiles on an image .SH SYNOPSIS .B astmkprof [\fI\,OPTION\/\fR...] [\fI\,Options\/\fR] [\fI\,Catalog\/\fR] .SH DESCRIPTION MakeProfiles is part of GNU Astronomy Utilities 0.22. MakeProfiles will create a FITS image containing any number of mock astronomical profiles based on an input catalog. All the profiles will be built from the center outwards. First by Monte Carlo integration, then using the central pixel position. The tolerance level specifies when the switch will occur. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of MakeProfiles's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astmkprof \fB\-P\fR .TP Inputs/Outputs and options: $ info astmkprof .TP Full section in manual/book: $ info MakeProfiles .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP MakeProfiles options: .IP Input: .TP \fB\-B\fR, \fB\-\-backhdu\fR=\fI\,INT\/\fR/STR HDU of background image. .TP \fB\-\-customimg\fR=\fI\,FITS\/\fR Image file for 'custom\-img' profile. .HP \fB\-\-customimghdu\fR=\fI\,INT\/\fR/STR HDU of image given to '\-\-customimg'. .HP \fB\-\-customtable\fR=\fI\,FITS\/\fR/TXT File for 'custom\-prof' profile. .TP \fB\-\-customtablehdu\fR=\fI\,INT\/\fR/STR HDU of table given to '\-\-customtable'. .TP \fB\-C\fR, \fB\-\-clearcanvas\fR All pixels in background image read as zero. .TP \fB\-E\fR, \fB\-\-kernel\fR=\fI\,STR\/\fR Parameters to only build one kernel. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Input catalog HDU name or number (if FITS). .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .TP \fB\-k\fR, \fB\-\-background\fR=\fI\,FITS\/\fR A background image to make the profiles on. .TP \fB\-\-searchin\fR=\fI\,STR\/\fR Select column(s): 'name', 'unit', 'comment'. .TP \fB\-\-stdintimeout\fR=\fI\,INT\/\fR Micro\-seconds to wait for standard input. .IP Output: .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-i\fR, \fB\-\-individual\fR Build all profiles separately. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-m\fR, \fB\-\-nomerged\fR Do not create a merged image of all profiles. .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name. .TP \fB\-\-psfinimg\fR PSF profiles made with all in output image. .TP \fB\-s\fR, \fB\-\-oversample\fR=\fI\,INT\/\fR Scale of oversampling (>0 and odd). .TP \fB\-T\fR, \fB\-\-type\fR=\fI\,STR\/\fR Type of output: e.g., int16, float32, etc... .TP \fB\-\-wcslinearmatrix\fR=\fI\,STR\/\fR WCS linear matrix of output ('pc' or 'cd'). .TP \fB\-x\fR, \fB\-\-mergedsize\fR=\fI\,INT[\/\fR,INT,...] Merged image size along each dimension. .IP Profiles: .TP \fB\-c\fR, \fB\-\-prepforconv\fR Shift and expand based on first catalog PSF. .TP \fB\-e\fR, \fB\-\-envseed\fR Use GSL_RNG_SEED environment variable for seed. .TP \fB\-f\fR, \fB\-\-mforflatpix\fR mcol is flat pixel value (when fcol is 5 or 6) .TP \fB\-\-magatpeak\fR Magnitude is for peak pixel, not full profile. .TP \fB\-\-mcolissum\fR mcol is total sum, not magnitude. .TP \fB\-\-mcolnocustimg\fR Ignore value of mcol in 'custom\-img'. .TP \fB\-\-mcolnocustprof\fR Ignore value of mcol in 'custom\-prof'. .TP \fB\-\-mode\fR=\fI\,STR\/\fR Mode of '\-\-ccol': 'img' or 'wcs'. .TP \fB\-p\fR, \fB\-\-tunitinp\fR Truncation is in units of pixels, not radius. .TP \fB\-r\fR, \fB\-\-numrandom\fR=\fI\,INT\/\fR No. of random points in Monte Carlo integ. .TP \fB\-R\fR, \fB\-\-replace\fR Replace overlapping profile pixels, don't add. .TP \fB\-t\fR, \fB\-\-tolerance\fR=\fI\,FLT\/\fR Tolerance to switch to less accurate method. .TP \fB\-w\fR, \fB\-\-circumwidth\fR=\fI\,FLT\/\fR Width of circumference (inward) profiles .TP \fB\-X\fR, \fB\-\-shift\fR=\fI\,INT[\/\fR, ...] Shift profile centers in output image. .TP \fB\-z\fR, \fB\-\-zeropoint\fR=\fI\,FLT\/\fR Magnitude zero point. .IP Columns, by info (see '\-\-searchin'), or number (starting from 1): .TP \fB\-\-ccol\fR=\fI\,STR\/\fR/INT Coordinate columns (one call for each dim.). .TP \fB\-\-fcol\fR=\fI\,STR\/\fR/INT sersic (1), moffat (2), gaussian (3), point (4), flat (5), circumference (6), distance (7), custom\-prof (8), azimuth (9), custom\-img (10). .TP \fB\-\-mcol\fR=\fI\,STR\/\fR/INT Magnitude. .TP \fB\-\-ncol\fR=\fI\,STR\/\fR/INT Sersic index or Moffat beta. .TP \fB\-\-p2col\fR=\fI\,STR\/\fR/INT Second Euler angle (X\-Z\-X order). .TP \fB\-\-p3col\fR=\fI\,STR\/\fR/INT Third Euler angle (X\-Z\-X order). .TP \fB\-\-pcol\fR=\fI\,STR\/\fR/INT Position angle (3D: first X\-Z\-X Euler angle). .TP \fB\-\-q2col\fR=\fI\,STR\/\fR/INT Axis ratio (major/dim3 in 3D). .TP \fB\-\-qcol\fR=\fI\,STR\/\fR/INT Axis ratio (major/dim2 in 3D). .TP \fB\-\-rcol\fR=\fI\,STR\/\fR/INT Effective radius or FWHM in pixels. .TP \fB\-\-tcol\fR=\fI\,STR\/\fR/INT Truncation in units of \fB\-\-rcol\fR. .IP WCS parameters: .TP \fB\-\-cdelt\fR=\fI\,FLT[\/\fR, ...] Resolution in each dimension. .TP \fB\-\-crpix\fR=\fI\,FLT[\/\fR, ...] Pixel coordinates of reference point. .TP \fB\-\-crval\fR=\fI\,FLT[\/\fR, ...] WCS coordinates of reference point. .TP \fB\-\-ctype\fR=\fI\,STR[\/\fR, ... ] One of FITS standard WCS types. .TP \fB\-\-cunit\fR=\fI\,STR[\/\fR, ... ] Units of the WCS coordinates (e.g., 'deg'). .TP \fB\-\-pc\fR=\fI\,FLT[\/\fR, ...] WCS rotation matrix (all elements). .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B MakeProfiles is maintained as a Texinfo manual. If the .B info and .B MakeProfiles programs are properly installed at your site, the command .IP .B info MakeProfiles .PP should give you access to the complete manual. �����������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astnoisechisel.1��������������������������������������������������������������0000644�0001750�0001750�00000020010�14557514026�013401� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH NOISECHISEL "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME NoiseChisel \- detect signal in a noisy image .SH SYNOPSIS .B astnoisechisel [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION NoiseChisel is part of GNU Astronomy Utilities 0.22. NoiseChisel Detects and segments signal that is deeply burried in noise. It employs a noise\-based detection and segmentation method enabling it to be very resilient to the rich diversity of shapes in astronomical targets. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of NoiseChisel's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astnoisechisel \fB\-P\fR .TP Inputs/Outputs and options: $ info astnoisechisel .TP Full section in manual/book: $ info NoiseChisel .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP NoiseChisel options: .IP Input: .TP \fB\-\-chdu\fR=\fI\,STR\/\fR HDU/extension of convolved image in file. .TP \fB\-\-convolved\fR=\fI\,FITS\/\fR Convolved image file to avoid convolution. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .TP \fB\-\-khdu\fR=\fI\,STR\/\fR HDU containing kernel image. .TP \fB\-k\fR, \fB\-\-kernel\fR=\fI\,FITS\/\fR Filename of kernel to convolve with input .TP \fB\-\-whdu\fR=\fI\,STR\/\fR HDU containing wide kernel image. .TP \fB\-w\fR, \fB\-\-widekernel\fR=\fI\,FITS\/\fR Filename of wider kernel for better qthresh .IP Tessellation (tile grid): .TP \fB\-\-checktiles\fR Tile IDs in an image, the size of input. .TP \fB\-F\fR, \fB\-\-remainderfrac\fR=\fI\,FLT\/\fR Fraction of remainder to split last tile. .TP \fB\-\-interpmetric\fR=\fI\,STR\/\fR Interpolation metric (radial, manhattan). .TP \fB\-\-interpnumngb\fR=\fI\,INT\/\fR No. of neighbors to use for interpolation. .TP \fB\-\-interponlyblank\fR Only interpolate over the blank tiles. .TP \fB\-L\fR, \fB\-\-largetilesize\fR=\fI\,INT[\/\fR,INT] Sim. to \fB\-\-tilesize\fR, but for larger tiles. .HP \fB\-M\fR, \fB\-\-numchannels\fR=\fI\,INT[\/\fR,..] No. of channels in dim.s (FITS order). .TP \fB\-\-oneelempertile\fR Display 1 element/tile, not full input res. .TP \fB\-\-workoverch\fR Work (not tile) over channel edges. .TP \fB\-Z\fR, \fB\-\-tilesize\fR=\fI\,INT[\/\fR,INT] Regular tile size on dim.s (FITS order). .IP Output: .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-\-ignoreblankintiles\fR Don't write input's blanks in tiled output. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-l\fR, \fB\-\-label\fR Label/count detected pixels that are connected. .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name. .TP \fB\-\-rawoutput\fR Output only detection labels & 1\-elem/tile grid. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR \&'txt', 'fits\-ascii', 'fits\-binary'. .TP \fB\-\-wcslinearmatrix\fR=\fI\,STR\/\fR WCS linear matrix of output ('pc' or 'cd'). .IP Detection: .TP \fB\-a\fR, \fB\-\-outliernumngb\fR=\fI\,INT\/\fR Num neighboring tiles to look for outlier. .TP \fB\-\-blankasforeground\fR Blanks are foreground in erosion and opening. .TP \fB\-B\fR, \fB\-\-minskyfrac\fR=\fI\,FLT\/\fR Min. fraction of undetected area in tile. .TP \fB\-\-checkdetection\fR Save all the detection steps to a file. .TP \fB\-\-checkdetsky\fR Save Sky value estimation for pseudo\-dets. .TP \fB\-\-checkqthresh\fR Save quantile threshold estimation in file. .TP \fB\-\-checksky\fR Final sky and its STD steps in a file. .TP \fB\-\-checksn\fR Save pseudo\-detection S/N values to a file. .TP \fB\-\-cleangrowndet\fR Remove small S/N grown detections. .TP \fB\-c\fR, \fB\-\-snquant\fR=\fI\,FLT\/\fR Quantile in pseudo\-det. to define true. .TP \fB\-\-detgrowmaxholesize\fR=\fI\,INT\/\fR Max. area of holes after growth to fill. .TP \fB\-\-dopening\fR=\fI\,INT\/\fR Depth of opening after dthresh. .TP \fB\-\-dopeningngb\fR=\fI\,INT\/\fR 4 or 8 connectivity for dthresh opening. .TP \fB\-d\fR, \fB\-\-detgrowquant\fR=\fI\,FLT\/\fR Minimum quant. to expand true detections. .TP \fB\-\-erodengb\fR=\fI\,INT\/\fR Connectivity in erosion (number of ngbs). .TP \fB\-e\fR, \fB\-\-erode\fR=\fI\,INT\/\fR Number of erosions after thresholding. .TP \fB\-\-holengb\fR=\fI\,INT\/\fR 4 or 8 connectivity for filling holes. .TP \fB\-\-minnumfalse\fR=\fI\,INT\/\fR Minimum number for S/N estimation. .TP \fB\-m\fR, \fB\-\-snminarea\fR=\fI\,INT\/\fR Min. pseudo\-detection area for S/N dist. .TP \fB\-\-noerodequant\fR=\fI\,FLT\/\fR Quantile for no erosion. .TP \fB\-\-openingngb\fR=\fI\,INT\/\fR Connectivity in opening (number of ngbs). .HP \fB\-\-outliersclip\fR=\fI\,FLT\/\fR,FLT Sigma\-clip params for qthresh outliers. .TP \fB\-\-outliersigma\fR=\fI\,FLT\/\fR Multiple of sigma to define outliers. .TP \fB\-\-pseudoconcomp\fR=\fI\,INT\/\fR 4 or 8 neighbors for labeling pseudo\-dets. .TP \fB\-p\fR, \fB\-\-opening\fR=\fI\,INT\/\fR Depth of opening after erosion. .TP \fB\-Q\fR, \fB\-\-meanmedqdiff\fR=\fI\,FLT\/\fR Max. mean and median quant diff. per tile. .TP \fB\-R\fR, \fB\-\-dthresh\fR=\fI\,FLT\/\fR Sigma threshold for Pseudo\-detections. .TP \fB\-\-skyfracnoblank\fR No blanks in tile undetected frac. (minskyfrac). .TP \fB\-\-smoothwidth\fR=\fI\,INT\/\fR Flat kernel width to smooth interpolated. .TP \fB\-\-snthresh\fR=\fI\,FLT\/\fR Manually input pseudo\-det S/N threshold. .TP \fB\-s\fR, \fB\-\-sigmaclip\fR=\fI\,FLT\/\fR,FLT Sigma multiple and, tolerance or number. .TP \fB\-t\fR, \fB\-\-qthresh\fR=\fI\,FLT\/\fR Quantile threshold on convolved image. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-C\fR, \fB\-\-continueaftercheck\fR Continue processing after checks. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B NoiseChisel is maintained as a Texinfo manual. If the .B info and .B NoiseChisel programs are properly installed at your site, the command .IP .B info NoiseChisel .PP should give you access to the complete manual. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astquery.1��������������������������������������������������������������������0000644�0001750�0001750�00000011764�14557514026�012261� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH QUERY "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME query \- query remote data servers and download .SH SYNOPSIS .B astquery [\fI\,OPTION\/\fR...] \fI\,DATABASE\/\fR .SH DESCRIPTION query is part of GNU Astronomy Utilities 0.22. query is just a place holder used as a minimal set of files and functions necessary for a program in Gnuastro. It can be used for learning or as a template to build new programs. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of query's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astquery \fB\-P\fR .TP Inputs/Outputs and options: $ info astquery .TP Full section in manual/book: $ info query .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP query options: .IP Input: .TP \fB\-\-ccol\fR=\fI\,STR\/\fR,STR Coordinate (RA, Dec) column names in dataset. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .TP \fB\-L\fR, \fB\-\-limitinfo\fR=\fI\,STR\/\fR Only retrieve dataset info. with this string. .TP \fB\-Q\fR, \fB\-\-query\fR=\fI\,STR\/\fR The raw query as a simple string. .TP \fB\-v\fR, \fB\-\-overlapwith\fR=\fI\,FITS\/\fR Set query region to overlap with this image. .IP Output: .TP \fB\-\-dry\-run\fR Only print the download command, don't run it. .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-i\fR, \fB\-\-information\fR Print database or dataset information. .TP \fB\-k\fR, \fB\-\-keeprawdownload\fR Don't delete raw downloaded file. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table fmt: 'fits\-ascii', 'fits\-binary', 'txt'. .TP \fB\-\-wcslinearmatrix\fR=\fI\,STR\/\fR WCS linear matrix of output ('pc' or 'cd'). .IP Generate query internally (not compatible with '\-\-query'): .TP \fB\-b\fR, \fB\-\-noblank\fR=\fI\,STR[\/\fR,STR] No rows with blank value in given column(s). .TP \fB\-c\fR, \fB\-\-column\fR=\fI\,STR\/\fR Column names to download from catalog. .TP \fB\-C\fR, \fB\-\-center\fR=\fI\,FLT\/\fR,FLT Center coords. to select by region in sky. .TP \fB\-g\fR, \fB\-\-range\fR=\fI\,STR\/\fR,FLT:FLT Range of selected targets in given column. .TP \fB\-H\fR, \fB\-\-head\fR=\fI\,INT\/\fR Only download given number of top rows. .TP \fB\-r\fR, \fB\-\-radius\fR=\fI\,FLT\/\fR Radius around \fB\-\-center\fR to select targets. .TP \fB\-\-sort\fR=\fI\,STR[\/\fR,STR] Sort based on values of given columns. .TP \fB\-s\fR, \fB\-\-dataset\fR=\fI\,STR\/\fR Name of dataset in database. .TP \fB\-w\fR, \fB\-\-width\fR=\fI\,FLT[\/\fR,FLT] Width of box around \fB\-\-center\fR to select targets. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B query is maintained as a Texinfo manual. If the .B info and .B query programs are properly installed at your site, the command .IP .B info query .PP should give you access to the complete manual. ������������gnuastro-0.22/doc/man/astsegment.1������������������������������������������������������������������0000644�0001750�0001750�00000015356�14557514026�012557� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH SEGMENT "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME Segment \- segmentation based on signal structure .SH SYNOPSIS .B astsegment [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION Segment is part of GNU Astronomy Utilities 0.22. Segment will segment an initially labeled region based on structure with the signal. It will first find true clumps (local maxima), estimate which ones have strong connections, and then grow them to cover the full area of each detection. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Segment's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astsegment \fB\-P\fR .TP Inputs/Outputs and options: $ info astsegment .TP Full section in manual/book: $ info Segment .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Segment options: .IP Input: .TP \fB\-\-chdu\fR=\fI\,STR\/\fR HDU/extension of convolved image in file. .TP \fB\-\-convolved\fR=\fI\,FITS\/\fR Convolved image file to avoid convolution. .TP \fB\-\-dhdu\fR=\fI\,STR\/\fR HDU containing detection image. .TP \fB\-d\fR, \fB\-\-detection\fR=\fI\,FITS\/\fR Filename of detection image (to segment). .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT HDU containing values (science image). .TP \fB\-\-khdu\fR=\fI\,STR\/\fR HDU containing kernel image. .TP \fB\-k\fR, \fB\-\-kernel\fR=\fI\,FITS\/\fR Filename of kernel to convolve with input. .TP \fB\-\-sky\fR=\fI\,STR\/\fR/FLT Filename of Sky values image to subtract. .TP \fB\-\-skyhdu\fR=\fI\,STR\/\fR HDU containing Sky value to subtract. .TP \fB\-\-std\fR=\fI\,STR\/\fR/FLT Filename of Sky standard deviation. .TP \fB\-\-stdhdu\fR=\fI\,STR\/\fR HDU containing Sky standard deviation. .TP \fB\-\-variance\fR STD input is actually variance. .IP Tessellation (tile grid): .TP \fB\-\-checktiles\fR Tile IDs in an image, the size of input. .TP \fB\-F\fR, \fB\-\-remainderfrac\fR=\fI\,FLT\/\fR Fraction of remainder to split last tile. .TP \fB\-\-interpmetric\fR=\fI\,STR\/\fR Interpolation metric (radial, manhattan). .TP \fB\-\-interpnumngb\fR=\fI\,INT\/\fR No. of neighbors to use for interpolation. .TP \fB\-\-interponlyblank\fR Only interpolate over the blank tiles. .TP \fB\-L\fR, \fB\-\-largetilesize\fR=\fI\,INT[\/\fR,INT] Sim. to \fB\-\-tilesize\fR, but for larger tiles. .HP \fB\-M\fR, \fB\-\-numchannels\fR=\fI\,INT[\/\fR,..] No. of channels in dim.s (FITS order). .TP \fB\-\-oneelempertile\fR Display 1 element/tile, not full input res. .TP \fB\-\-workoverch\fR Work (not tile) over channel edges. .TP \fB\-Z\fR, \fB\-\-tilesize\fR=\fI\,INT[\/\fR,INT] Regular tile size on dim.s (FITS order). .IP Output: .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-\-noobjects\fR Finish with true clumps, don't create objects. .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name. .TP \fB\-\-rawoutput\fR Output contains only CLUMPS and/or OBJECTS HDUs. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR \&'txt', 'fits\-ascii', 'fits\-binary'. .TP \fB\-\-wcslinearmatrix\fR=\fI\,STR\/\fR WCS linear matrix of output ('pc' or 'cd'). .IP Segmentation: .TP \fB\-B\fR, \fB\-\-minskyfrac\fR=\fI\,FLT\/\fR Min. fraction of undetected area in tile. .TP \fB\-\-checksegmentation\fR Store segmentation steps in a file. .TP \fB\-\-checksn\fR Save clump S/N values into a file. .TP \fB\-c\fR, \fB\-\-snquant\fR=\fI\,FLT\/\fR S/N Quantile of true sky clumps. .TP \fB\-\-grownclumps\fR Save grown clumps instead of original. .TP \fB\-G\fR, \fB\-\-gthresh\fR=\fI\,FLT\/\fR Multiple of STD to stop growing clumps. .TP \fB\-\-minima\fR Built internal clumps from minima. .TP \fB\-\-minnumfalse\fR=\fI\,INT\/\fR Minimum number for S/N estimation. .TP \fB\-m\fR, \fB\-\-snminarea\fR=\fI\,INT\/\fR Minimum area of clumps for S/N estimation. .TP \fB\-O\fR, \fB\-\-objbordersn\fR=\fI\,FLT\/\fR Min. S/N for grown clumps as one object. .TP \fB\-s\fR, \fB\-\-clumpsnthresh\fR=\fI\,FLT\/\fR S/N threshold of true clumps. .TP \fB\-v\fR, \fB\-\-keepmaxnearriver\fR Keep clumps with peak touching a river. .TP \fB\-y\fR, \fB\-\-minriverlength\fR=\fI\,INT\/\fR Minimum len of useful grown clump rivers. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-C\fR, \fB\-\-continueaftercheck\fR Continue processing after checks. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Segment is maintained as a Texinfo manual. If the .B info and .B Segment programs are properly installed at your site, the command .IP .B info Segment .PP should give you access to the complete manual. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/aststatistics.1���������������������������������������������������������������0000644�0001750�0001750�00000024775�14557514026�013314� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH STATISTICS "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME Statistics \- calculate statistics of a dataset .SH SYNOPSIS .B aststatistics [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION Statistics is part of GNU Astronomy Utilities 0.22. Statistics will do statistical analysis on the input dataset (table column or image). All blank pixels or pixels outside of the given range are ignored. You can either directly ask for certain statistics in one line/row as shown below with the same order as requested, or get tables of different statistical measures like the histogram, cumulative frequency style and etc. If no particular statistic is requested, some basic information about the dataset is printed on the command\-line. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Statistics's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ aststatistics \fB\-P\fR .TP Inputs/Outputs and options: $ info aststatistics .TP Full section in manual/book: $ info Statistics .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Statistics options: .IP Input: .TP \fB\-c\fR, \fB\-\-column\fR=\fI\,STR\/\fR Column number (counting from 1) or search string. .TP \fB\-\-greaterequal2\fR=\fI\,FLT\/\fR Upper range of 2nd dim in 2D histograms. .TP \fB\-g\fR, \fB\-\-greaterequal\fR=\fI\,FLT\/\fR Only use values greater\-equal than this. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .TP \fB\-\-lessthan2\fR=\fI\,FLT\/\fR Lower range of 2nd dim in 2D histograms. .TP \fB\-l\fR, \fB\-\-lessthan\fR=\fI\,FLT\/\fR Only use values less than this. .TP \fB\-Q\fR, \fB\-\-qrange\fR=\fI\,FLT[\/\fR,FLT] Quantile range: one (from Q to 1\-Q) or two. .TP \fB\-\-searchin\fR=\fI\,STR\/\fR Select column(s): 'name', 'unit', 'comment'. .TP \fB\-\-stdintimeout\fR=\fI\,INT\/\fR Micro\-seconds to wait for standard input. .IP Tessellation (tile grid): .TP \fB\-\-checktiles\fR Tile IDs in an image, the size of input. .TP \fB\-F\fR, \fB\-\-remainderfrac\fR=\fI\,FLT\/\fR Fraction of remainder to split last tile. .TP \fB\-\-interpmetric\fR=\fI\,STR\/\fR Interpolation metric (radial, manhattan). .TP \fB\-\-interpnumngb\fR=\fI\,INT\/\fR No. of neighbors to use for interpolation. .TP \fB\-\-interponlyblank\fR Only interpolate over the blank tiles. .TP \fB\-i\fR, \fB\-\-interpolate\fR Interpolate over blank tiles to fill them. .HP \fB\-M\fR, \fB\-\-numchannels\fR=\fI\,INT[\/\fR,..] No. of channels in dim.s (FITS order). .TP \fB\-\-oneelempertile\fR Display 1 element/tile, not full input res. .TP \fB\-\-workoverch\fR Work (not tile) over channel edges. .TP \fB\-Z\fR, \fB\-\-tilesize\fR=\fI\,INT[\/\fR,INT] Regular tile size on dim.s (FITS order). .IP Output: .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table fmt: 'fits\-ascii', 'fits\-binary', 'txt'. .TP \fB\-\-wcslinearmatrix\fR=\fI\,STR\/\fR WCS linear matrix of output ('pc' or 'cd'). .IP Single value measurements .TP \fB\-d\fR, \fB\-\-std\fR Standad deviation. .TP \fB\-E\fR, \fB\-\-median\fR Median. .TP \fB\-\-mad\fR Median absolute deviation. .TP \fB\-\-madclip\-mad\fR MAD\-clipped Median Absolute Deviation. .TP \fB\-\-madclip\-mean\fR MAD\-clipped mean. .TP \fB\-\-madclip\-median\fR MAD\-clipped median. .TP \fB\-\-madclip\-number\fR Number of elements after MAD\-clipping. .TP \fB\-\-madclip\-std\fR MAD\-clipped standard deviation. .TP \fB\-\-maximum\fR Maximum. .TP \fB\-\-minimum\fR Minimum. .TP \fB\-\-modequant\fR Mode quantile (see \fB\-\-mode\fR) .TP \fB\-\-modesym\fR Mode symmetricity (see \fB\-\-mode\fR). .TP \fB\-\-modesymvalue\fR Value at mode symmetricity (see \fB\-\-mode\fR). .TP \fB\-m\fR, \fB\-\-mean\fR Mean. .TP \fB\-\-number\fR Number (non\-blank). .TP \fB\-O\fR, \fB\-\-mode\fR Mode (Appendix C of arXiv:1505.01664). .TP \fB\-\-quantfunc\fR=\fI\,FLT[\/\fR,...] Quantile function (multiple values acceptable). .TP \fB\-\-quantofmean\fR Quantile of the mean. .TP \fB\-\-sigclip\-mad\fR Sigma\-clipped Median Absolute Deviation. .TP \fB\-\-sigclip\-mean\fR Sigma\-clipped mean. .TP \fB\-\-sigclip\-median\fR Sigma\-clipped median. .TP \fB\-\-sigclip\-number\fR Number of elements after sigma\-clipping. .TP \fB\-\-sigclip\-std\fR Sigma\-clipped standard deviation. .TP \fB\-\-sum\fR Sum. .TP \fB\-u\fR, \fB\-\-quantile\fR=\fI\,FLT[\/\fR,...] Quantile (multiple values acceptable). .IP Particular calculation .TP \fB\-\-asciicfp\fR Print an ASCII cumulative frequency plot. .TP \fB\-A\fR, \fB\-\-asciihist\fR Print an ASCII histogram. .TP \fB\-C\fR, \fB\-\-cumulative\fR Save the cumulative frequency plot in output. .TP \fB\-\-histogram2d\fR=\fI\,STR\/\fR 2D histogram (as 'table' or 'image'). .TP \fB\-H\fR, \fB\-\-histogram\fR Save the histogram in output. .TP \fB\-\-madclip\fR Overall MAD\-clipping (see '\-\-mclipparams') .TP \fB\-\-mirror\fR=\fI\,FLT\/\fR Save the histogram and CFP of the mirror dist. .TP \fB\-R\fR, \fB\-\-contour\fR=\fI\,STR\/\fR Contour levels, save in PGFPlots format. .TP \fB\-s\fR, \fB\-\-sigmaclip\fR Overall sigma\-clipping (see '\-\-sclipparams') .TP \fB\-t\fR, \fB\-\-ontile\fR Single values on separate tiles, not full input. .TP \fB\-y\fR, \fB\-\-sky\fR Find the Sky and its STD over the tessellation. .IP Sky and Sky STD settings .TP \fB\-a\fR, \fB\-\-outliernumngb\fR=\fI\,INT\/\fR Num neighboring tiles to look for outlier. .TP \fB\-\-checksky\fR Store steps in '_sky_steps.fits' file. .TP \fB\-\-checkskynointerp\fR Similar to \fB\-\-checksky\fR, stops at interpolation. .TP \fB\-\-ignoreblankintiles\fR Don't write input's blanks in the tiled output. .TP \fB\-\-khdu\fR=\fI\,STR\/\fR HDU/extension name or number of kernel. .TP \fB\-k\fR, \fB\-\-kernel\fR=\fI\,FITS\/\fR File name of kernel to convolve input. .TP \fB\-\-mclipparams\fR=\fI\,FLT\/\fR,FLT MAD clip: Multiple, and tolerance/number. .TP \fB\-\-meanmedqdiff\fR=\fI\,FLT\/\fR Max. mode and median quantile diff. per tile. .TP \fB\-\-mirrordist\fR=\fI\,FLT\/\fR Max. distance (error multip.) to find mode. .HP \fB\-\-outliersclip\fR=\fI\,FLT\/\fR,FLT Sigma\-clip params for qthresh outliers. .TP \fB\-\-outliersigma\fR=\fI\,FLT\/\fR Multiple of sigma to define outliers. .TP \fB\-\-sclipparams\fR=\fI\,FLT\/\fR,FLT Sigma clip: Multiple, and tolerance/number. .TP \fB\-\-smoothwidth\fR=\fI\,INT\/\fR Sky: flat kernel width to smooth interpolated. .IP Histogram and CFP settings .TP \fB\-\-asciiheight\fR=\fI\,INT\/\fR Height of ASCII histogram or CFP plots. .TP \fB\-\-manualbinrange\fR Set min/max of bins manually, not from data. .TP \fB\-\-maxbinone\fR Scale such that the maximum bin has value of one. .TP \fB\-\-numasciibins\fR=\fI\,INT\/\fR No. of bins in ASCII histogram or CFP plots. .TP \fB\-\-numbins\fR=\fI\,INT\/\fR No. of bins in histogram or CFP tables. .TP \fB\-\-numbins2\fR=\fI\,INT\/\fR No. of bins in second\-dim of 2D histogram. .TP \fB\-n\fR, \fB\-\-normalize\fR Set sum of all bins to 1. .TP \fB\-\-onebinstart\fR=\fI\,FLT\/\fR Shift bins so one bin starts on this value. .TP \fB\-\-onebinstart2\fR=\fI\,FLT\/\fR Similar to \fB\-\-onebinstart\fR, for 2D histogram .IP Fitting (1 dimensional) .TP \fB\-\-fitestimate\fR=\fI\,STR\/\fR/FLT Estimate fitted func. (number, file or 'self'). .TP \fB\-\-fitestimatecol\fR=\fI\,STR\/\fR/INT Column containing the \fB\-\-fitestimate\fR values. .TP \fB\-\-fitestimatehdu\fR=\fI\,STR\/\fR/INT HDU containing the \fB\-\-fitestimate\fR values. .TP \fB\-\-fitrobust\fR=\fI\,STR\/\fR The robust function name to use. .TP \fB\-\-fitweight\fR=\fI\,STR\/\fR Input weight: 'std', 'var' or 'inv\-variance'. .TP \fB\-f\fR, \fB\-\-fit\fR=\fI\,STR\/\fR Type of fitting: 'linear', 'linear\-weighted', \&'linear\-no\-constant', \&'linear\-no\-constant\-weighted', 'polynomial', \&'polynomial\-weighted', 'polynomial\-robust'. .TP \fB\-p\fR, \fB\-\-fitmaxpower\fR=\fI\,INT\/\fR Maximum power in polynomial to fit. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Statistics is maintained as a Texinfo manual. If the .B info and .B Statistics programs are properly installed at your site, the command .IP .B info Statistics .PP should give you access to the complete manual. ���gnuastro-0.22/doc/man/asttable.1��������������������������������������������������������������������0000644�0001750�0001750�00000017441�14557514026�012201� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH TABLE "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME Table \- read and write ASCII and FITS tables .SH SYNOPSIS .B asttable [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION Table is part of GNU Astronomy Utilities 0.22. Table can be used to view the information, select columns, or convert tables. The inputs and outputs can be plain text (with white\-space or comma as delimiters), FITS ascii, or FITS binary tables. The output columns can either be selected by number (counting from 1), name or using regular expressions. For regular expressions, enclose the value to the '\-\-column' ('\-c') option in slashes ('\e', as in '\-c\e^mag\e'). To print the selected columns on the command\-line, don't specify an output file. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Table's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ asttable \fB\-P\fR .TP Inputs/Outputs and options: $ info asttable .TP Full section in manual/book: $ info Table .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Table options: .IP Input: .TP \fB\-b\fR, \fB\-\-noblank\fR=\fI\,STR[\/\fR,STR] Remove rows with blank in given columns. .TP \fB\-c\fR, \fB\-\-column\fR=\fI\,STR\/\fR Column number (counting from 1) or search string. .TP \fB\-C\fR, \fB\-\-catcolumns\fR=\fI\,STR\/\fR Columns to use in \fB\-\-catcolumnfile\fR. .HP \fB\-E\fR, \fB\-\-noblankend\fR=\fI\,STR[\/\fR,STR] Sim. to \fB\-\-noblank\fR, at end (e.g., after arith.). .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .TP \fB\-\-inpolygon\fR=\fI\,STR\/\fR,STR Coord. columns that are inside '\-\-polygon'. .TP \fB\-I\fR, \fB\-\-ignorecase\fR Ignore case in matching/searching columns. .TP \fB\-L\fR, \fB\-\-catcolumnfile\fR=\fI\,FITS\/\fR/TXT File(s) to be concatenated by column. .TP \fB\-\-outpolygon\fR=\fI\,STR\/\fR,STR Coord. columns that are outside '\-\-polygon'. .TP \fB\-R\fR, \fB\-\-catrowfile\fR=\fI\,FITS\/\fR/TXT File(s) to be concatenated by row. .TP \fB\-\-searchin\fR=\fI\,STR\/\fR Select column(s): 'name', 'unit', 'comment'. .TP \fB\-\-stdintimeout\fR=\fI\,INT\/\fR Micro\-seconds to wait for standard input. .HP \fB\-u\fR, \fB\-\-catcolumnhdu\fR=\fI\,STR\/\fR/INT HDU/Extension(s) in catcolumnfile. .TP \fB\-w\fR, \fB\-\-wcsfile\fR=\fI\,FITS\/\fR File with WCS if conversion is requested. .TP \fB\-W\fR, \fB\-\-wcshdu\fR=\fI\,STR\/\fR HDU in file with WCS for conversion. .TP \fB\-X\fR, \fB\-\-catrowhdu\fR=\fI\,STR\/\fR/INT HDU/Extension(s) in \fB\-\-catrowfile\fR. .IP Output: .TP \fB\-A\fR, \fB\-\-txtf64format\fR=\fI\,STR\/\fR Text output float64 format: 'fixed' or 'exp'. .TP \fB\-B\fR, \fB\-\-txtf64precision\fR=\fI\,INT\/\fR Text output float64 precision. .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-f\fR, \fB\-\-txtf32format\fR=\fI\,STR\/\fR Text output float32 format: 'fixed' or 'exp'. .TP \fB\-\-info\-num\-cols\fR Only print input table's number of columns. .TP \fB\-\-info\-num\-rows\fR Only print input table's number of rows. .TP \fB\-i\fR, \fB\-\-information\fR Only print input table's information. .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name. .TP \fB\-O\fR, \fB\-\-colinfoinstdout\fR Column info/metadata when printing to stdout. .TP \fB\-p\fR, \fB\-\-txtf32precision\fR=\fI\,INT\/\fR Text output float32 precision. .TP \fB\-\-tableformat\fR=\fI\,STR\/\fR Table fmt: 'fits\-ascii', 'fits\-binary', 'txt'. .TP \fB\-\-wcslinearmatrix\fR=\fI\,STR\/\fR WCS linear matrix of output ('pc' or 'cd'). .TP \fB\-Y\fR, \fB\-\-txteasy\fR Short for '\-Afixed \fB\-B6\fR \fB\-ffixed\fR \fB\-p3\fR'. .IP Precedence (default: column operations first) .TP \fB\-\-rowfirst\fR Apply row\-based operations first. .IP Columns in output: .TP \fB\-\-catcolumnrawname\fR Don't touch column names of \fB\-\-catcolumnfile\fR. .TP \fB\-\-fromvector\fR=\fI\,STR\/\fR,INT[,INT] Extract column(s) from a vector column. .TP \fB\-k\fR, \fB\-\-keepvectfin\fR Keep inputs of '\-\-tovector' & '\-\-fromvector'. .HP \fB\-m\fR, \fB\-\-colmetadata\fR=\fI\,ID\/\fR,S,S,S Column metadata (S=STR: Name, Unit, Comments). .TP \fB\-\-tovector\fR=\fI\,STR\/\fR,STR[,STR] Merge column(s) into a vector column. .TP \fB\-\-transpose\fR Transpose table (must only contain vector cols). .IP Rows in output: .TP \fB\-d\fR, \fB\-\-descending\fR Sort in descending order: largets first. .TP \fB\-\-envseed\fR Use GSL_RNG_SEED env. for '\-\-rowrandom'. .TP \fB\-e\fR, \fB\-\-equal\fR=\fI\,STR\/\fR,FLT[,...] Column, values to keep in output. .TP \fB\-H\fR, \fB\-\-head\fR=\fI\,INT\/\fR Only return given number of top rows. .TP \fB\-n\fR, \fB\-\-notequal\fR=\fI\,STR\/\fR,FLT[,...] Column, values to remove from output. .TP \fB\-\-polygon\fR=\fI\,FLT\/\fR,FLT[:...] Polygon vertices, also a DS9 region file. .TP \fB\-\-rowrandom\fR=\fI\,INT\/\fR Number of rows to select randomly. .TP \fB\-\-rowrange\fR=\fI\,INT\/\fR,INT Only rows in this row\-counter range. .TP \fB\-r\fR, \fB\-\-range\fR=\fI\,STR\/\fR,FLT:FLT Column, and range to limit output. .TP \fB\-s\fR, \fB\-\-sort\fR=\fI\,STR\/\fR/INT Column name or number for sorting. .TP \fB\-t\fR, \fB\-\-tail\fR=\fI\,INT\/\fR Only return given number of bottom rows. .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B Table is maintained as a Texinfo manual. If the .B info and .B Table programs are properly installed at your site, the command .IP .B info Table .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astwarp.1���������������������������������������������������������������������0000644�0001750�0001750�00000013601�14557514026�012055� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH WARP "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME Warp \- warp (transform) input dataset .SH SYNOPSIS .B astwarp [\fI\,OPTION\/\fR...] \fI\,ASTRdata\/\fR .SH DESCRIPTION Warp is part of GNU Astronomy Utilities 0.22. Warp will resample the pixel grid of an input image. By default (if no special linear warping is requested), it will align the image to the WCS coordinates in anyand remove any possible distortion. Linear warping (like '\-\-rotate' or \&'\-\-scale') should be explicitly requested with the options under the "Linear warps" group below. .PP For more information, please run any of the following commands. In particular the second contains a very comprehensive explanation of Warp's invocation: expected input(s), output(s), and a full description of all the options. .TP All options and their values: $ astwarp \fB\-P\fR .TP Inputs/Outputs and options: $ info astwarp .TP Full section in manual/book: $ info Warp .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .PP Warp options: .IP Input: .TP \fB\-\-hendwcs\fR=\fI\,INT\/\fR Header keyword number to end reading WCS. .TP \fB\-\-hstartwcs\fR=\fI\,INT\/\fR Header keyword number to start reading WCS. .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT Extension name or number of input data. .IP Output: .TP \fB\-C\fR, \fB\-\-coveredfrac\fR=\fI\,FLT\/\fR Acceptable fraction of output pixel covered. .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-k\fR, \fB\-\-keepwcs\fR Do not apply warp to input's WCS .TP \fB\-K\fR, \fB\-\-keepinputdir\fR Keep input directory for automatic output. .TP \fB\-\-outfitsnocommit\fR No Git commit in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoconfig\fR No metadata in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnodate\fR No 'DATE' in 0\-th HDU of output FITS. .TP \fB\-\-outfitsnoversions\fR No versions in 0\-th HDU of output FITS. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Output file name. .TP \fB\-T\fR, \fB\-\-type\fR=\fI\,STR\/\fR Type of output: e.g., int16, float32, etc... .TP \fB\-\-wcslinearmatrix\fR=\fI\,STR\/\fR WCS linear matrix of output ('pc' or 'cd'). .IP Align with WCS coordinates (correcting distortion, default mode) .TP \fB\-\-checkmaxfrac\fR Moire pattern: Max.frac. input pixels on output. .TP \fB\-\-ctype\fR=\fI\,STR[\/\fR,STR] FITS standard CTYPE value (e.g., 'RA\-\-\-TAN'). .TP \fB\-c\fR, \fB\-\-center\fR=\fI\,FLT\/\fR,FLT Center coordinate of the output image in RA,DEC. .TP \fB\-\-edgesampling\fR=\fI\,INT\/\fR Number of extra samplings in pixel sides. .TP \fB\-G\fR, \fB\-\-gridfile\fR=\fI\,FITS\/\fR File to use for output grid. .TP \fB\-H\fR, \fB\-\-gridhdu\fR=\fI\,STR\/\fR HDU/extension to use for output grid. .HP \fB\-\-widthinpix\fR \fB\-\-width\fR is in pixels, not in WCS coordinates. .TP \fB\-w\fR, \fB\-\-width\fR=\fI\,INT\/\fR,INT Output image size in both dimensions. .TP \fB\-x\fR, \fB\-\-cdelt\fR=\fI\,FLT[\/\fR,FLT] Pixel scale of output (usually degrees/pixel). .IP Linear warps (must be called explicitly on command\-line) .TP \fB\-\-centeroncorner\fR Center of coordinates on first pixel corner. .TP \fB\-e\fR, \fB\-\-shear\fR=\fI\,FLT[\/\fR,FLT] Shear along the given axis(es). .TP \fB\-f\fR, \fB\-\-flip\fR=\fI\,INT[\/\fR,INT] Flip along the given axis(es). .TP \fB\-m\fR, \fB\-\-matrix\fR=\fI\,STR\/\fR Raw transformation matrix, highest priority. .TP \fB\-p\fR, \fB\-\-project\fR=\fI\,FLT[\/\fR,FLT] Project along the given axis(es). .TP \fB\-r\fR, \fB\-\-rotate\fR=\fI\,FLT\/\fR Rotate by the given angle in degrees. .TP \fB\-s\fR, \fB\-\-scale\fR=\fI\,FLT[\/\fR,FLT] Scale along the given axis(es). .TP \fB\-t\fR, \fB\-\-translate\fR=\fI\,FLT[\/\fR,FLT] Translate along the given axis(es). .IP Operating modes: .TP \-?, \fB\-\-help\fR give this help list .TP \fB\-\-checkconfig\fR List all config files and variables read. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-\-config\fR=\fI\,STR\/\fR Read configuration file STR immediately. .TP \fB\-\-config\-prefix\fR=\fI\,STR\/\fR Custom prefix of option names config files. .TP \fB\-\-lastconfig\fR Do not parse any more configuration files. .TP \fB\-\-log\fR Information about output(s) in a log file. .TP \fB\-\-minmapsize\fR=\fI\,INT\/\fR Min. bytes to avoid RAM automatically. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of CPU threads to use. .TP \fB\-\-onlyversion\fR=\fI\,STR\/\fR Only run if the program version is STR. .TP \fB\-P\fR, \fB\-\-printparams\fR Print parameter values to be used and abort. .TP \fB\-\-quietmmap\fR Don't print mmap'd file's name and size. .TP \fB\-q\fR, \fB\-\-quiet\fR Only report errors, remain quiet about steps. .TP \fB\-S\fR, \fB\-\-setdirconf\fR Set default values for this directory and abort. .TP \fB\-\-usage\fR give a short usage message .TP \fB\-U\fR, \fB\-\-setusrconf\fR Set default values for this user and abort. .TP \fB\-V\fR, \fB\-\-version\fR print program version .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi and Pedram Ashofteh\-Ardakani .SH "SEE ALSO" The full documentation for .B Warp is maintained as a Texinfo manual. If the .B info and .B Warp programs are properly installed at your site, the command .IP .B info Warp .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astscript-pointing-simulate.1�������������������������������������������������0000644�0001750�0001750�00000006640�14557514026�016063� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH ASTSCRIPT-POINTING-SIMULATE "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME astscript-pointing-simulate \- Simulate the exposure map of a pointing pattern .SH SYNOPSIS .B astscript-pointing-simulate \fI\,positions-cat.fits --center=1.23,4.56 --width=2,2 --img=image.fits \/\fR[\fI\,OPTIONS\/\fR] .SH DESCRIPTION Given a set of dithering positions ('positions\-cat.fits' in the example above), and an image ('image.fits' which can be from any part of the sky, only its distortion and orientation are important), build the exposure map of the output stack after applying that dither (where each pixel contains the number of exposures that were used in it). The field of the final stack can be set with the '\-\-center' and '\-\-width' options. .SS "astscript-pointing-simulate options:" .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT HDU name or number of the positions catalog. .TP \fB\-i\fR, \fB\-\-img\fR=\fI\,STR\/\fR Name of reference image. .TP \fB\-H\fR, \fB\-\-imghdu\fR=\fI\,STR\/\fR/INT HDU name or number of the input image. .TP \fB\-r\fR, \fB\-\-racol\fR=\fI\,STR\/\fR/INT Name/number of column containing RA. .TP \fB\-d\fR, \fB\-\-deccol\fR=\fI\,STR\/\fR/INT Name/number of column containing Declination. .TP \fB\-\-mksrc\fR=\fI\,STR\/\fR Makefile (for developers when debugging). .IP Hooks: .TP \fB\-\-hook\-warp\-before=\fR'COMMAND' Before warping each exposure; Input: ''. Output: ''. .TP \fB\-\-hook\-warp\-after=\fR'COMMAND' After warping each exposure; Input: ''. Output: ''. .IP Output: .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Name of finally stacked image. .TP \fB\-C\fR, \fB\-\-center\fR=\fI\,FLT\/\fR,FLT Center of output stack (in RA,Dec). .TP \fB\-w\fR, \fB\-\-width\fR=\fI\,FLT\/\fR,FLT Width of output stack (in WCS). .TP \fB\-\-ctype\fR=\fI\,STR\/\fR,STR Projection of output (CTYPEi in WCS). .TP \fB\-\-widthinpix\fR Interpret '\-\-width' values in pixels. .HP \fB\-\-stack\-operator=\fR"STR" Arithmetic operator to use for stacking. .TP \fB\-t\fR, \fB\-\-tmpdir\fR=\fI\,STR\/\fR Directory to keep temporary files. .TP \fB\-k\fR, \fB\-\-keeptmp\fR Keep temporal/auxiliar files. .IP Operating mode: .TP \-?, \fB\-\-help\fR Print this help. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of threads; maximum if not given. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-q\fR, \fB\-\-quiet\fR Don't print any extra information in stdout. .TP \fB\-V\fR, \fB\-\-version\fR Print program version. .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponfing short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org .SH COPYRIGHT Copyright \(co 2023\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi, Raul Infante\-Sainz and Sepideh Eskandarlou. .SH "SEE ALSO" The full documentation for .B astscript-pointing-simulate is maintained as a Texinfo manual. If the .B info and .B astscript-pointing-simulate programs are properly installed at your site, the command .IP .B info astscript-pointing-simulate .PP should give you access to the complete manual. ������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astscript-ds9-region.1��������������������������������������������������������0000644�0001750�0001750�00000005621�14557514026�014371� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH ASTSCRIPT-DS9-REGION "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME astscript-ds9-region \- Create an SAO DS9 region file from a table .SH SYNOPSIS .B astscript-ds9-region [\fI\,OPTION\/\fR] \fI\,FITS-files\/\fR .SH DESCRIPTION This script is part of GNU Astronomy Utilities 0.22. .PP This script will take two column names (or numbers) and return a "region file" (with one region over each entry) for easy inspection of catalog entries in this SAO DS9. .PP For more information, please run any of the following commands. In particular the first contains a very comprehensive explanation of this script's invocation: expected input(s), output(s), and a full description of all the options. .TP Inputs/Outputs and options: $ info astscript\-ds9\-region .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .SS "astscript-ds9-region options:" .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR HDU/extension of all input FITS files. .TP \fB\-c\fR, \fB\-\-column\fR=\fI\,STR\/\fR,STR Columns to use as coordinates (name or number). .TP \fB\-m\fR, \fB\-\-mode\fR=\fI\,wcs\/\fR|img Coordinates in WCS or image (default: wcs) .TP \fB\-n\fR, \fB\-\-namecol\fR=\fI\,STR\/\fR ID of each region (name or number of a column) .IP Output: .TP \fB\-C\fR, \fB\-\-color\fR Color for the regions (read by DS9). .TP \fB\-w\fR, \fB\-\-width\fR Line thickness of the regions (in DS9). .TP \fB\-r\fR, \fB\-\-radius\fR Radius of each region (arcseconds if in WCS mode). .TP \fB\-D\fR, \fB\-\-dontdelete\fR Don't delete output if it exists. .TP \fB\-o\fR, \fB\-\-output\fR=\fI\,STR\/\fR Name of output file. .TP \fB\-\-command=\fR"STR" DS9 command to run after making region. .IP Operating mode: .TP \-?, \fB\-\-help\fR Print this help list. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-V\fR, \fB\-\-version\fR Print program version. .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B astscript-ds9-region is maintained as a Texinfo manual. If the .B info and .B astscript-ds9-region programs are properly installed at your site, the command .IP .B info astscript-ds9-region .PP should give you access to the complete manual. ���������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astscript-fits-view.1���������������������������������������������������������0000644�0001750�0001750�00000006214�14557514026�014325� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH ASTSCRIPT-FITS-VIEW "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME astscript-fits-view \- View FITS images in DS9 and tables in TOPCAT .SH SYNOPSIS .B astscript-fits-view [\fI\,OPTION\/\fR] \fI\,FITS-file(s)\/\fR .SH DESCRIPTION This script is part of GNU Astronomy Utilities 0.22. .PP This script will take any number of FITS inputs and will pass them to TOPCAT or SAO DS9 depending on the the first input FITS file: if it contains an image HDU, the files will be passed to SAO DS9, otherwise, to TOPCAT. .PP For more information, please run any of the following commands. In particular the first contains a very comprehensive explanation of this script's invocation: expected input(s), output(s), and a full description of all the options. .TP Inputs/Outputs and options: $ info astscript\-fits\-view .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .SS "astscript-fits-view options:" .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR Extension name or number of input data. .IP Output: .TP \fB\-g\fR, \fB\-\-ds9geometry\fR=\fI\,INTxINT\/\fR Size of DS9 window, e.g., for HD (800x1000) and for 4K (1800x3000). If not given, the script will attempt to find your screen resolution and find a good match, otherwise, use the default size. .TP \fB\-e\fR, \fB\-\-ds9extra\fR=\fI\,STR\/\fR Extra options to pass to DS9 after default ones. .TP \fB\-s\fR, \fB\-\-ds9scale\fR=\fI\,STR\/\fR Custom value to '\-scale' option in DS9. .HP \fB\-c\fR, \fB\-\-ds9center\fR=\fI\,FLT\/\fR,FLT Coordinates of center in shown DS9 window. .TP \fB\-O\fR, \fB\-\-ds9mode\fR=\fI\,img\/\fR/wcs Coord system to interpret '\-\-ds9center' (img/wcs). .TP \fB\-m\fR, \fB\-\-ds9colorbarmulti\fR Separate color bars for each loaded image. .TP \fB\-p\fR, \fB\-\-prefix\fR=\fI\,STR\/\fR Directory containing DS9 or TOPCAT executables. .IP Operating mode: .TP \-?, \fB\-\-help\fR Print this help list. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-q\fR, \fB\-\-quiet\fR Don't print any extra information in stdout. .TP \fB\-V\fR, \fB\-\-version\fR Print program version. .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2020\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi and Sepideh Eskandarlou .SH "SEE ALSO" The full documentation for .B astscript-fits-view is maintained as a Texinfo manual. If the .B info and .B astscript-fits-view programs are properly installed at your site, the command .IP .B info astscript-fits-view .PP should give you access to the complete manual. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astscript-psf-scale-factor.1��������������������������������������������������0000644�0001750�0001750�00000006510�14557514026�015540� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH ASTSCRIPT-PSF-SCALE-FACTOR "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME astscript-psf-scale-factor \- Find factor to scale PSF to a given star .SH SYNOPSIS .B astscript-psf-scale-factor [\fI\,OPTION\/\fR] \fI\,FITS-files\/\fR .SH DESCRIPTION This script is part of GNU Astronomy Utilities 0.22. .PP This script will consider a center position and then compute the factor by which it is necessary to multiply the specified PSF image in order to match it with the object at the center (within a ring radii). The main idea is to have the necessary factor that will be used to allocate the PSF with the proper flux value for constructing the scattered light field. .PP For more information, please run any of the following commands. In particular the first contains a very comprehensive explanation of this script's invocation: expected input(s), output(s), and a full description of all the options. .TP Inputs/Outputs and options: $ info astscript\-psf\-scale\-factor .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .SS "astscript-psf-scale-factor options:" .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR HDU/extension of all input FITS files. .TP \fB\-p\fR, \fB\-\-psf\fR=\fI\,STR\/\fR PSF image fits file. .TP \fB\-P\fR, \fB\-\-psfhdu\fR=\fI\,STR\/\fR HDU/extension of the PSF image. .TP \fB\-O\fR, \fB\-\-mode\fR=\fI\,STR\/\fR Coordinates mode ('wcs' or 'img'). .TP \fB\-c\fR, \fB\-\-center\fR=\fI\,FLT\/\fR,FLT Center coordinates of the object. .HP \fB\-W\fR, \fB\-\-widthinpix\fR=\fI\,INT\/\fR,INT Width of the stamp in pixels. .TP \fB\-n\fR, \fB\-\-normradii\fR=\fI\,INT\/\fR,INT Minimum and maximum radii (in pixels) for computing the scaling factor value. .TP \fB\-S\fR, \fB\-\-segment\fR=\fI\,STR\/\fR Output of Segment (with OBJECTS and CLUMPS). .HP \fB\-s\fR, \fB\-\-sigmaclip\fR=\fI\,FLT\/\fR,FLT Sigma\-clip multiple and tolerance. .IP Output: .TP \fB\-t\fR, \fB\-\-tmpdir\fR Directory to keep temporary files. .TP \fB\-k\fR, \fB\-\-keeptmp\fR Keep temporal/auxiliar files. .IP Operating mode: .TP \-?, \fB\-\-help\fR Print this help list. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-q\fR, \fB\-\-quiet\fR Don't print any extra information in stdout. .TP \fB\-V\fR, \fB\-\-version\fR Print program version. .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2020\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Raul Infante\-Sainz .SH "SEE ALSO" The full documentation for .B astscript-psf-scale-factor is maintained as a Texinfo manual. If the .B info and .B astscript-psf-scale-factor programs are properly installed at your site, the command .IP .B info astscript-psf-scale-factor .PP should give you access to the complete manual. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astscript-psf-select-stars.1��������������������������������������������������0000644�0001750�0001750�00000007205�14557514026�015610� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH ASTSCRIPT-PSF-SELECT-STARS "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME astscript-psf-select-stars \- Select good stars for constructing the PSF .SH SYNOPSIS .B astscript-psf-select-stars [\fI\,OPTIONS\/\fR] \fI\,image.fits\/\fR .SH DESCRIPTION Build a catalogue of "good stars" that will be considered for constructing an extended and non parametric PSF. Here, "good stars" means that they don't have close objects that affect it sourrondings and consequently they are not contaminated. The script will construct a catalog of stars from reference datasets (Gaia) if the user does not provide another one. In addition to this, other parameters like the axis ratio are considered to filter the sample and select only proper stars. .SS "astscript-psf-select-stars options:" .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT HDU/Extension name of number of the input file. .TP \fB\-S\fR, \fB\-\-segmented\fR=\fI\,STR\/\fR Segmentation file obtained by Segment (astsegment). .TP \fB\-D\fR, \fB\-\-dataset\fR=\fI\,STR\/\fR Query dataset ("gaia \fB\-\-dataset\fR=\fI\,edr3\/\fR", etc.). .TP \fB\-r\fR, \fB\-\-racolumn\fR=\fI\,STR\/\fR Right Ascension (R.A.) column name. .TP \fB\-d\fR, \fB\-\-deccolumn\fR=\fI\,STR\/\fR Declination (Dec) column name. .TP \fB\-f\fR, \fB\-\-field\fR=\fI\,STR\/\fR Magnitude column name ("phot_rp_mean_mag", for Gaia). .HP \fB\-p\fR, \fB\-\-parallaxanderrorcolumn\fR=\fI\,STR\/\fR,STR The name of the parallax column. .HP \fB\-m\fR, \fB\-\-magnituderange\fR=\fI\,FLT\/\fR,FLT The range of magnitude. .TP \fB\-Q\fR, \fB\-\-minaxisratio\fR=\fI\,FLT\/\fR Minimum axis ratio to be accepted (default to 0.9). .TP \fB\-M\fR, \fB\-\-mindistdeg\fR=\fI\,FLT\/\fR Minimum distance to more bright neighbour stars. to be accepted, in degrees. .TP \fB\-c\fR, \fB\-\-catalog\fR=\fI\,STR\/\fR Catalog of stars containing: ra, dec, magnitude, parrallax, parrallax_error. .TP \fB\-a\fR, \fB\-\-matchaperturedeg\fR=\fI\,FLT\/\fR Aperture, in pixels, to match catalogue ra and dec coordinates with clumps' ra and dec. .TP \fB\-F\fR, \fB\-\-faintmagdiff\fR The difference from the faintest star which the user will be determined the faintest star in \&'\-\-magnituderange' option. .TP \fB\-b\fR, \fB\-\-brightmag\fR The limit for selecting wider range of bright stars. .IP Output: .TP \fB\-o\fR, \fB\-\-output\fR Output table with the object coordinates. .TP \fB\-t\fR, \fB\-\-tmpdir\fR Directory to keep temporary files. .TP \fB\-k\fR, \fB\-\-keeptmp\fR Keep temporal/auxiliar files. .IP Operating mode: .TP \fB\-h\fR, \fB\-\-help\fR Print this help. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-q\fR, \fB\-\-quiet\fR Don't print any extra information in stdout. .TP \fB\-V\fR, \fB\-\-version\fR Print program version. .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponfing short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org .SH COPYRIGHT Copyright \(co 2020\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Sepideh Eskandarlou. .SH "SEE ALSO" The full documentation for .B astscript-psf-select-stars is maintained as a Texinfo manual. If the .B info and .B astscript-psf-select-stars programs are properly installed at your site, the command .IP .B info astscript-psf-select-stars .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astscript-psf-stamp.1���������������������������������������������������������0000644�0001750�0001750�00000006763�14557514026�014333� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH ASTSCRIPT-PSF-STAMP "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME astscript-psf-stamp \- Make normalized stamp with other sources masked .SH SYNOPSIS .B astscript-psf-stamp [\fI\,OPTION\/\fR] \fI\,FITS-files\/\fR .SH DESCRIPTION This script is part of GNU Astronomy Utilities 0.22. .PP This script will consider a center position to make a normalized stamp. It is intendeed to generate several stamps and combine them to obtain a PSF. .PP For more information, please run any of the following commands. In particular the first contains a very comprehensive explanation of this script's invocation: expected input(s), output(s), and a full description of all the options. .TP Inputs/Outputs and options: $ info astscript\-psf\-stamp .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .SS "astscript-psf-stamp options:" .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR HDU/extension of all input FITS files. .TP \fB\-O\fR, \fB\-\-mode\fR=\fI\,STR\/\fR Coordinates mode ('wcs' or 'img'). .TP \fB\-c\fR, \fB\-\-center\fR=\fI\,FLT\/\fR,FLT Center coordinates of the object. .HP \fB\-W\fR, \fB\-\-widthinpix\fR=\fI\,INT\/\fR,INT Width of the stamp in pixels. .TP \fB\-T\fR, \fB\-\-snthresh\fR=\fI\,FLT\/\fR Mask pixels below this S/N (only when \&'\-\-segment' is given). .TP \fB\-n\fR, \fB\-\-normradii\fR=\fI\,INT\/\fR,INT Minimum and maximum radii (in pixels) for computing the normalization value. .TP \fB\-S\fR, \fB\-\-segment\fR=\fI\,STR\/\fR Output of Segment (with OBJECTS and CLUMPS). .TP \fB\-N\fR, \fB\-\-normop\fR=\fI\,STR\/\fR Operator for computing the normalization value (mean, sigclip\-mean, etc.). .TP \fB\-Q\fR, \fB\-\-axis\-ratio\fR=\fI\,FLT\/\fR Axis ratio for ellipse maskprofile (A/B). .HP \fB\-p\fR, \fB\-\-position\-angle\fR=\fI\,FLT\/\fR Position angle for ellipse mask profile. .HP \fB\-s\fR, \fB\-\-sigmaclip\fR=\fI\,FLT\/\fR,FLT Sigma\-clip multiple and tolerance. .TP \fB\-d\fR, \fB\-\-nocentering\fR Don't warp the center coord to central pixel. .IP Output: .TP \fB\-o\fR, \fB\-\-output\fR Output table with the radial profile. .TP \fB\-t\fR, \fB\-\-tmpdir\fR Directory to keep temporary files. .TP \fB\-k\fR, \fB\-\-keeptmp\fR Keep temporal/auxiliar files. .IP Operating mode: .TP \-?, \fB\-\-help\fR Print this help list. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-q\fR, \fB\-\-quiet\fR Don't print any extra information in stdout. .TP \fB\-V\fR, \fB\-\-version\fR Print program version. .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2020\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Raul Infante\-Sainz .SH "SEE ALSO" The full documentation for .B astscript-psf-stamp is maintained as a Texinfo manual. If the .B info and .B astscript-psf-stamp programs are properly installed at your site, the command .IP .B info astscript-psf-stamp .PP should give you access to the complete manual. �������������gnuastro-0.22/doc/man/astscript-psf-subtract.1������������������������������������������������������0000644�0001750�0001750�00000005603�14557514026�015026� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH ASTSCRIPT-PSF-SUBTRACT "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME astscript-psf-subtract \- Subtract a given PSF model from the image .SH SYNOPSIS .B astscript-psf-subtract [\fI\,OPTION\/\fR] \fI\,FITS-files\/\fR .SH DESCRIPTION This script is part of GNU Astronomy Utilities 0.22. .PP This script will place the given PSF image into a certain central position with the image and subtract it. .PP For more information, please run any of the following commands. In particular the first contains a very comprehensive explanation of this script's invocation: expected input(s), output(s), and a full description of all the options. .TP Inputs/Outputs and options: $ info astscript\-psf\-subtract .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .SS "astscript-psf-subtract options:" .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR HDU/extension of all input FITS files. .TP \fB\-p\fR, \fB\-\-psf\fR=\fI\,STR\/\fR PSF FITS image. .TP \fB\-P\fR, \fB\-\-psfhdu\fR=\fI\,STR\/\fR HDU/extension of the PSF image. .TP \fB\-O\fR, \fB\-\-mode\fR=\fI\,STR\/\fR Coordinates mode ('wcs' or 'img'). .TP \fB\-c\fR, \fB\-\-center\fR=\fI\,FLT\/\fR,FLT Center coordinates of the object. .TP \fB\-s\fR, \fB\-\-scale\fR=\fI\,FLT\/\fR Factor by which the PSF is multiplied. .IP Output: .TP \fB\-o\fR, \fB\-\-output\fR Output table with the radial profile. .TP \fB\-t\fR, \fB\-\-tmpdir\fR Directory to keep temporary files. .TP \fB\-k\fR, \fB\-\-keeptmp\fR Keep temporal/auxiliar files. .TP \fB\-m\fR, \fB\-\-modelonly\fR Give the model as output (don't subtract it). .IP Operating mode: .TP \-?, \fB\-\-help\fR Print this help list. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-q\fR, \fB\-\-quiet\fR Don't print any extra information in stdout. .TP \fB\-V\fR, \fB\-\-version\fR Print program version. .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2020\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Raul Infante\-Sainz .SH "SEE ALSO" The full documentation for .B astscript-psf-subtract is maintained as a Texinfo manual. If the .B info and .B astscript-psf-subtract programs are properly installed at your site, the command .IP .B info astscript-psf-subtract .PP should give you access to the complete manual. �����������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astscript-psf-unite.1���������������������������������������������������������0000644�0001750�0001750�00000005764�14557514026�014333� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH ASTSCRIPT-PSF-UNITE "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME astscript-psf-unite \- Unite the outer and inner regions of the PSF .SH SYNOPSIS .B astscript-psf-unite [\fI\,OPTION\/\fR] \fI\,FITS-files\/\fR .SH DESCRIPTION This script is part of GNU Astronomy Utilities 0.22. .PP This script will consider two different PSF images to join them into a single one. It is intendeed to generate a single PSF by combining different PSF regions (inner and outer). .PP For more information, please run any of the following commands. In particular the first contains a very comprehensive explanation of this script's invocation: expected input(s), output(s), and a full description of all the options. .TP Inputs/Outputs and options: $ info astscript\-psf\-unite .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .SS "astscript-psf-unite options:" .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR HDU/extension of all input FITS files. .TP \fB\-i\fR, \fB\-\-inner\fR=\fI\,STR\/\fR Inner PSF FITS image. .TP \fB\-I\fR, \fB\-\-innerhdu\fR=\fI\,STR\/\fR HDU/extension of the inner PSF image. .TP \fB\-r\fR, \fB\-\-radius\fR=\fI\,FLT\/\fR Radius at which the junction is done (in pixels). .TP \fB\-s\fR, \fB\-\-scale\fR=\fI\,FLT\/\fR Factor by which the inner PSF is multiplied. .TP \fB\-Q\fR, \fB\-\-axis\-ratio\fR=\fI\,FLT\/\fR Axis ratio for ellipse maskprofile (A/B). .HP \fB\-p\fR, \fB\-\-position\-angle\fR=\fI\,FLT\/\fR Position angle for ellipse mask profile. .IP Output: .TP \fB\-o\fR, \fB\-\-output\fR Output table with the radial profile. .TP \fB\-t\fR, \fB\-\-tmpdir\fR Directory to keep temporary files. .TP \fB\-k\fR, \fB\-\-keeptmp\fR Keep temporal/auxiliar files. .IP Operating mode: .TP \-?, \fB\-\-help\fR Print this help list. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-q\fR, \fB\-\-quiet\fR Don't print any extra information in stdout. .TP \fB\-V\fR, \fB\-\-version\fR Print program version. .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2020\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Raul Infante\-Sainz .SH "SEE ALSO" The full documentation for .B astscript-psf-unite is maintained as a Texinfo manual. If the .B info and .B astscript-psf-unite programs are properly installed at your site, the command .IP .B info astscript-psf-unite .PP should give you access to the complete manual. ������������gnuastro-0.22/doc/man/astscript-radial-profile.1����������������������������������������������������0000644�0001750�0001750�00000007543�14557514026�015310� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH ASTSCRIPT-RADIAL-PROFILE "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME astscript-radial-profile \- Create a radial profile of an object in an image .SH SYNOPSIS .B astscript-radial-profile [\fI\,OPTION\/\fR] \fI\,FITS-files\/\fR .SH DESCRIPTION This script is part of GNU Astronomy Utilities 0.22. .PP This script will consider the input image for constructing the radial profile around a given center with elliptical apertures. .PP For more information, please run any of the following commands. In particular the first contains a very comprehensive explanation of this script's invocation: expected input(s), output(s), and a full description of all the options. .TP Inputs/Outputs and options: $ info astscript\-radial\-profile .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .SS "astscript-radial-profile options:" .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR HDU/extension of all input FITS files. .TP \fB\-O\fR, \fB\-\-mode\fR=\fI\,STR\/\fR Coordinate mode: img or wcs. .TP \fB\-c\fR, \fB\-\-center\fR=\fI\,FLT\/\fR,FLT Coordinate of the center along 2 axes. .TP \fB\-R\fR, \fB\-\-rmax\fR=\fI\,FLT\/\fR Maximum radius for the radial profile (in pixels). .TP \fB\-Q\fR, \fB\-\-axis\-ratio\fR=\fI\,FLT\/\fR Axis ratio for ellipse profiles (A/B). .TP \fB\-a\fR, \fB\-\-azimuth\fR=\fI\,FLT\/\fR,FLT Azimuthal angles range (from the major axis). .HP \fB\-p\fR, \fB\-\-position\-angle\fR=\fI\,FLT\/\fR Position angle for ellipse profiles. .TP \fB\-s\fR, \fB\-\-sigmaclip\fR=\fI\,FLT\/\fR,FLT Sigma\-clip multiple and tolerance. .TP \fB\-z\fR, \fB\-\-zeropoint\fR=\fI\,FLT\/\fR Zeropoint magnitude of input dataset. .TP \fB\-Z\fR, \fB\-\-zeroisnotblank\fR 0.0 in float or double images are not blank. .IP Output: .TP \fB\-o\fR, \fB\-\-output\fR Output table with the radial profile. .TP \fB\-t\fR, \fB\-\-tmpdir\fR Directory to keep temporary files. .TP \fB\-k\fR, \fB\-\-keeptmp\fR Keep temporal/auxiliar files. .TP \fB\-m\fR, \fB\-\-measure\fR=\fI\,STR\/\fR Measurement operator (mean, sigclip\-mean, etc.). .TP \fB\-P\fR, \fB\-\-precision\fR=\fI\,INT\/\fR Number of digits after the decimal point for radius. .TP \fB\-v\fR, \fB\-\-oversample\fR=\fI\,INT\/\fR Oversample for higher resolution radial profile. .TP \fB\-u\fR, \fB\-\-undersample\fR=\fI\,INT\/\fR Undersample for lower resolution radial profile. .TP \fB\-i\fR, \fB\-\-instd\fR=\fI\,FLT\/\fR/STR Sky standard deviation per pixel, as a single number or as the filename. .TP \fB\-d\fR, \fB\-\-stdhdu\fR=\fI\,STR\/\fR HDU/extension of the sky standard deviation image. .IP Operating mode: .TP \-?, \fB\-\-help\fR Print this help list. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-q\fR, \fB\-\-quiet\fR Don't print any extra information in stdout. .TP \fB\-V\fR, \fB\-\-version\fR Print program version. .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2020\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Raul Infante\-Sainz .SH "SEE ALSO" The full documentation for .B astscript-radial-profile is maintained as a Texinfo manual. If the .B info and .B astscript-radial-profile programs are properly installed at your site, the command .IP .B info astscript-radial-profile .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astscript-sort-by-night.1�����������������������������������������������������0000644�0001750�0001750�00000006435�14557514026�015123� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH ASTSCRIPT-SORT-BY-NIGHT "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME astscript-sort-by-night \- Sort input FITS files by night .SH SYNOPSIS .B astscript-sort-by-night [\fI\,OPTION\/\fR] \fI\,FITS-files\/\fR .SH DESCRIPTION This script is part of GNU Astronomy Utilities 0.22. .PP This script will look into a HDU/extension for a header keyword in the given FITS files and interpret the value as a date. The inputs will be separated by "night"s. The definition a "nights" is set with the '\-\-hour' option (just note that the FITS time may be recorded in UTC, not local time)! It will then print a list of all the input files along with the following two columns: night number and file number in that night (sorted by time). With '\-\-link' a symbolic link (one for each input) will be made with names including the night classifier. With '\-\-copy' instead of a link, a copy of the inputs will be made. .PP For more information, please run any of the following commands. In particular the first contains a very comprehensive explanation of this script's invocation: expected input(s), output(s), and a full description of all the options. .TP Inputs/Outputs and options: $ info astscript\-sort\-by\-night .TP Full Gnuastro manual/book: $ info gnuastro .PP If you couldn't find your answer in the manual, you can get direct help from experienced Gnuastro users and developers. For more information, please run: .IP \f(CW$ info help-gnuastro\fR .SS "astscript-sort-by-night options:" .IP Input: .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR HDU/extension of all input FITS files. .TP \fB\-k\fR, \fB\-\-key\fR=\fI\,STR\/\fR Header keyword specifying date to use. .TP \fB\-H\fR, \fB\-\-hour\fR=\fI\,FLT\/\fR Hour in next day to be included in night. Be aware of time zones with this argument! .IP Output: .TP \fB\-l\fR, \fB\-\-link\fR list of inputs with night and file number. .TP \fB\-c\fR, \fB\-\-copy\fR Copy the files, don't make symbolic links. .TP \fB\-p\fR, \fB\-\-prefix\fR=\fI\,STR\/\fR Prefix for outputs of '\-\-copy' and '\-\-link'. .IP Operating mode: .TP \-?, \fB\-\-help\fR Print this help list. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-q\fR, \fB\-\-quiet\fR Don't print any extra information in stdout. .TP \fB\-V\fR, \fB\-\-version\fR Print program version. .TP \fB\-\-stdintimeout\fR Micro\-seconds to wait for standard input (used for operations within this script). .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org. .SH COPYRIGHT Copyright \(co 2015\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Mohammad Akhlaghi .SH "SEE ALSO" The full documentation for .B astscript-sort-by-night is maintained as a Texinfo manual. If the .B info and .B astscript-sort-by-night programs are properly installed at your site, the command .IP .B info astscript-sort-by-night .PP should give you access to the complete manual. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/man/astscript-zeropoint.1���������������������������������������������������������0000644�0001750�0001750�00000006673�14557514026�014452� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. .TH ASTSCRIPT-ZEROPOINT "1" "February 2024" "GNU Astronomy Utilities 0.22" "User Commands" .SH NAME astscript-zeropoint \- Estimate zero point of an image .SH SYNOPSIS .B astscript-zeropoint [\fI\,OPTIONS\/\fR] \fI\,image.fits\/\fR .SH DESCRIPTION Calculate the Zeropoint of the image based on a reference images or catalog. .SS "astscript-zeropoint options:" .IP Input(s): .TP \fB\-h\fR, \fB\-\-hdu\fR=\fI\,STR\/\fR/INT HDU/Extension name or number of input. .TP \fB\-S\fR, \fB\-\-starcat\fR=\fI\,STR\/\fR Catalog with positions for aperture photomery. .TP \fB\-\-starcathdu\fR=\fI\,STR\/\fR/INT HDU of table in '\-\-starcat'. .TP \fB\-\-starcatra\fR=\fI\,STR\/\fR/INT Column in '\-\-starcat' that contains RA. .TP \fB\-\-starcatdec\fR=\fI\,STR\/\fR/INT Column in '\-\-starcat' that contains DEC. .TP \fB\-\-mksrc\fR=\fI\,STR\/\fR Makefile (for developers when debugging). .IP Output: .TP \fB\-o\fR, \fB\-\-output\fR Output file name. .TP \fB\-t\fR, \fB\-\-tmpdir\fR Directory to keep temporary files. .TP \fB\-k\fR, \fB\-\-keeptmp\fR Keep temporal/auxiliar files. .TP \fB\-K\fR, \fB\-\-keepzpap\fR Keep each aperture's zp in a different HDU. .IP General settings .TP \fB\-a\fR, \fB\-\-aperarcsec\fR=\fI\,FLT[\/\fR,FLT] Aperture radius (in arc\-seconds) for photometry. .HP \fB\-M\fR, \fB\-\-magnituderange\fR=\fI\,FLT\/\fR,FLT Range of the magnitude to be considered. .IP Reference catalog mode .TP \fB\-c\fR, \fB\-\-refcat\fR=\fI\,STR\/\fR Reference catalog file name. .TP \fB\-C\fR, \fB\-\-refcathdu\fR=\fI\,STR\/\fR/INT Reference catalog HDU name of number. .TP \fB\-r\fR, \fB\-\-refcatra\fR=\fI\,STR\/\fR Reference catalog Right Ascension (R.A.) column. .TP \fB\-d\fR, \fB\-\-refcatdec\fR=\fI\,STR\/\fR Reference catalog Declination (Dec) column. .TP \fB\-m\fR, \fB\-\-refcatmag\fR=\fI\,STR\/\fR Reference catalog Magnitude column. .TP \fB\-s\fR, \fB\-\-matchradius\fR=\fI\,FLT\/\fR Radius (arcsec) to match stars and ref. catalog. .IP Reference image mode .TP \fB\-R\fR, \fB\-\-refimgs\fR=\fI\,STR[\/\fR,STR] Reference image name(s) with known zeropoint. .TP \fB\-H\fR, \fB\-\-refimgshdu\fR=\fI\,STR\/\fR/INT Reference image HDU name(s) or number (s). .TP \fB\-z\fR, \fB\-\-refimgszp\fR=\fI\,FLT[\/\fR,FLT] Zero point(s) of the reference image(s). .IP Operating mode: .TP \fB\-h\fR, \fB\-\-help\fR Print this help. .TP \fB\-\-cite\fR BibTeX citation for this program. .TP \fB\-q\fR, \fB\-\-quiet\fR Don't print any extra information in stdout. .TP \fB\-V\fR, \fB\-\-version\fR Print program version. .TP \fB\-N\fR, \fB\-\-numthreads\fR=\fI\,INT\/\fR Number of threads; maximum if not given. .PP Mandatory or optional arguments to long options are also mandatory or optional for any corresponfing short options. .PP GNU Astronomy Utilities home page: http://www.gnu.org/software/gnuastro/ .SH "REPORTING BUGS" Report bugs to bug\-gnuastro@gnu.org .SH COPYRIGHT Copyright \(co 2022\-2024 Free Software Foundation, Inc. License GPLv3+: GNU General public license version 3 or later. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .PP Written/developed by Sepideh Eskandarlou et al. .SH "SEE ALSO" The full documentation for .B astscript-zeropoint is maintained as a Texinfo manual. If the .B info and .B astscript-zeropoint programs are properly installed at your site, the command .IP .B info astscript-zeropoint .PP should give you access to the complete manual. ���������������������������������������������������������������������gnuastro-0.22/doc/Makefile.am�����������������������������������������������������������������������0000644�0001750�0001750�00000030413�14551337306�011571� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## This is part of GNU Astronomy Utilities (gnuastro). It will be ## called by the Makefile.am in the top directory. ## ## Original author: ## Mohammad Akhlaghi <mohammad@akhlaghi.org> ## Contributing author(s): ## Copyright (C) 2015-2024 Free Software Foundation, Inc. ## ## GNU Astronomy Utilities is free software: you can redistribute it ## and/or modify it under the terms of the GNU General Public License ## as published by the Free Software Foundation, either version 3 of ## the License, or (at your option) any later version. ## ## GNU Astronomy Utilities 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 General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with GNU Astronomy Utilities. If not, see ## <http://www.gnu.org/licenses/>. ## Set the shell SHELL=/bin/sh # Built files that should be treated as sources for the main job. # imgrepresentative: This is just one of the images that is used in the # book as a representative for all of them because they are all built with # one script. imgrepresentative = $(top_srcdir)/doc/gnuastro-figures/done.txt BUILT_SOURCES = $(srcdir)/authors.texi $(imgrepresentative) ## gpl-3.0.texi (which is just the GPL in Texinfo format) is bootstrapped ## from Gnulib. Therefore it is not in this directory. However, it is ## needed by gnuastro.texi to build the documentation. It is the job of ## AM_MAKEINFOFLAGS, to pass options to the documentation build ## programs. BOOTSTRPDOC is defined in 'configure.ac'. bootstrpdoc = $(top_srcdir)/bootstrapped/doc AM_MAKEINFOFLAGS = -I $(bootstrpdoc) -I $(srcdir) # This is just a temporary work-around since Automake does not pass the # AM_MAKEINFOFLAGS to texi2dvi (which builds DVI and PDF outputs). This was # reported in Automake's bug 23599. Note that a space is necessary between # the '-I' and directory for texi2dvi. TEXI2DVI = texi2dvi -I $(bootstrpdoc) -I $(srcdir) ## Commands to make the texinfo tools. info_TEXINFOS = gnuastro.texi gnuastro_TEXINFOS = fdl.texi formath.texi $(srcdir)/authors.texi \ $(bootstrpdoc)/gpl-3.0.texi ## Files not predefined by Automake, and not in dependencies that must ## be included in the final tar-ball distribution. EXTRA_DIST = genauthors README ## We want to build 'imgrepresentative' and 'authors.texi' only when we are ## building in the version controlled source (in other words: when ## 'configure' has been re-built). For the non version controlled souce, ## deleting these files is like somehow deleting formath.texi (a core ## file), it will not be rebuilt and result in an error. $(srcdir)/authors.texi: $(top_srcdir)/configure $(top_srcdir)/doc/genauthors $(top_srcdir) ## Build the images of the book (with one chosen as representative to act ## as a target in Make). $(imgrepresentative): cd $(top_srcdir)/doc/plotsrc; make ## Images and their directories. infognuastrodir=$(infodir)/gnuastro-figures/ dist_infognuastro_DATA = $(top_srcdir)/doc/gnuastro-figures/* ## Man pages to build ## ================== ## ## Installing all the programs is not mandatory in Gnuastro. If a program ## is not built, we shouldn't build its man-page either. if COND_ARITHMETIC MAYBE_ARITHMETIC_MAN = man/astarithmetic.1 endif if COND_BUILDPROG MAYBE_BUILDPROG_MAN = man/astbuildprog.1 endif if COND_CONVERTT MAYBE_CONVERTT_MAN = man/astconvertt.1 endif if COND_CONVOLVE MAYBE_CONVOLVE_MAN = man/astconvolve.1 endif if COND_COSMICCAL MAYBE_COSMICCAL_MAN = man/astcosmiccal.1 endif if COND_CROP MAYBE_CROP_MAN = man/astcrop.1 endif if COND_FITS MAYBE_FITS_MAN = man/astfits.1 endif if COND_MATCH MAYBE_MATCH_MAN = man/astmatch.1 endif if COND_MKCATALOG MAYBE_MKCATALOG_MAN = man/astmkcatalog.1 endif if COND_MKPROF MAYBE_MKPROF_MAN = man/astmkprof.1 endif if COND_NOISECHISEL MAYBE_NOISECHISEL_MAN = man/astnoisechisel.1 endif if COND_QUERY MAYBE_QUERY_MAN = man/astquery.1 endif if COND_SEGMENT MAYBE_SEGMENT_MAN = man/astsegment.1 endif if COND_STATISTICS MAYBE_STATISTICS_MAN = man/aststatistics.1 endif if COND_TABLE MAYBE_TABLE_MAN = man/asttable.1 endif if COND_WARP MAYBE_WARP_MAN = man/astwarp.1 endif #if COND_TEMPLATE # MAYBE_TEMPLATE_MAN = man/astTEMPLATE.1 #endif dist_man_MANS = $(MAYBE_ARITHMETIC_MAN) \ $(MAYBE_BUILDPROG_MAN) \ $(MAYBE_CONVERTT_MAN) \ $(MAYBE_CONVOLVE_MAN) \ $(MAYBE_COSMICCAL_MAN) \ $(MAYBE_CROP_MAN) \ $(MAYBE_FITS_MAN) \ $(MAYBE_MATCH_MAN) \ $(MAYBE_MKCATALOG_MAN) \ $(MAYBE_MKPROF_MAN) \ $(MAYBE_NOISECHISEL_MAN) \ $(MAYBE_QUERY_MAN) \ $(MAYBE_SEGMENT_MAN) \ $(MAYBE_STATISTICS_MAN) \ $(MAYBE_TABLE_MAN) \ $(MAYBE_WARP_MAN) \ man/astscript-pointing-simulate.1 \ man/astscript-ds9-region.1 \ man/astscript-fits-view.1 \ man/astscript-psf-scale-factor.1 \ man/astscript-psf-select-stars.1 \ man/astscript-psf-stamp.1 \ man/astscript-psf-subtract.1 \ man/astscript-psf-unite.1 \ man/astscript-radial-profile.1 \ man/astscript-sort-by-night.1 \ man/astscript-zeropoint.1 ## See if help2man is present or not. When help2man doesn't exist, we don't ## want to overwhelm the user with any commands, so we just let them know ## that the distributed man pages will be used. if COND_HASHELP2MAN MAYBE_HELP2MAN = help2man --no-discard-stderr --output=$@ \ --source="$(PACKAGE_STRING)" else MAYBE_HELP2MAN = @echo "Using man page in tarball (no help2man) for" endif # Build the 'man' directory and then put all the man pages in # it. Unfortunately as far as I know, pattern rules are not portable in all # implementations of Make, so we have to list all the utilities manually. toputildir=$(top_builddir)/bin ALLMANSDEP = $(top_srcdir)/lib/gnuastro-internal/options.h man/astarithmetic.1: $(top_srcdir)/bin/arithmetic/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "arithmetic operations on images and numbers" \ --libtool $(toputildir)/arithmetic/astarithmetic man/astbuildprog.1: $(top_srcdir)/bin/buildprog/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "compile, link with Gnuastro library and its dependencies, and run a C program" \ --libtool $(toputildir)/buildprog/astbuildprog man/astconvertt.1: $(top_srcdir)/bin/convertt/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "convert known data types to each other" \ --libtool $(toputildir)/convertt/astconvertt man/astconvolve.1: $(top_srcdir)/bin/convolve/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "convolve an image with a given kernel" \ --libtool $(toputildir)/convolve/astconvolve man/astcosmiccal.1: $(top_srcdir)/bin/cosmiccal/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "estimate cosmological values" \ --libtool $(toputildir)/cosmiccal/astcosmiccal man/astcrop.1: $(top_srcdir)/bin/crop/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "crop regions of a dataset" \ --libtool $(toputildir)/crop/astcrop man/astfits.1: $(top_srcdir)/bin/fits/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "view and manipulate FITS headers" \ --libtool $(toputildir)/fits/astfits man/astmatch.1: $(top_srcdir)/bin/match/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "match catalogs by 1D or 2D positions" \ --libtool $(toputildir)/match/astmatch man/astmkcatalog.1: $(top_srcdir)/bin/mkcatalog/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Make a catalog from labeled input images" \ --libtool $(toputildir)/mkcatalog/astmkcatalog man/astmkprof.1: $(top_srcdir)/bin/mkprof/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "make standard 2D profiles on an image" \ --libtool $(toputildir)/mkprof/astmkprof man/astnoisechisel.1: $(top_srcdir)/bin/noisechisel/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "detect signal in a noisy image" \ --libtool $(toputildir)/noisechisel/astnoisechisel man/astquery.1: $(top_srcdir)/bin/query/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "query remote data servers and download" \ --libtool $(toputildir)/query/astquery man/astsegment.1: $(top_srcdir)/bin/segment/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "segmentation based on signal structure" \ --libtool $(toputildir)/segment/astsegment man/aststatistics.1: $(top_srcdir)/bin/statistics/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "calculate statistics of a dataset" \ --libtool $(toputildir)/statistics/aststatistics man/asttable.1: $(top_srcdir)/bin/table/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "read and write ASCII and FITS tables" \ --libtool $(toputildir)/table/asttable #man/astTEMPLATE.1: $(top_srcdir)/bin/TEMPLATE/args.h $(ALLMANSDEP) # $(MAYBE_HELP2MAN) -n "put a short description here" \ --libtool $(toputildir)/TEMPLATE/astTEMPLATE man/astwarp.1: $(top_srcdir)/bin/warp/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "warp (transform) input dataset" \ --libtool $(toputildir)/warp/astwarp # The Scripts: man/astscript-color-faint-gray.1: $(top_srcdir)/bin/script/color-faint-gray.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "RGB image from FITS images showing bright and faint features" \ --libtool $(toputildir)/script/astscript-color-faint-gray man/astscript-ds9-region.1: $(top_srcdir)/bin/script/ds9-region.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Create an SAO DS9 region file from a table" \ --libtool $(toputildir)/script/astscript-ds9-region man/astscript-fits-view.1: $(top_srcdir)/bin/script/fits-view.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "View FITS images in DS9 and tables in TOPCAT" \ --libtool $(toputildir)/script/astscript-fits-view man/astscript-pointing-simulate.1: $(top_srcdir)/bin/script/pointing-simulate.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Simulate the exposure map of a pointing pattern" \ --libtool \ $(toputildir)/script/astscript-pointing-simulate man/astscript-psf-scale-factor.1: $(top_srcdir)/bin/script/psf-scale-factor.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Find factor to scale PSF to a given star" \ --libtool \ $(toputildir)/script/astscript-psf-scale-factor man/astscript-psf-select-stars.1: $(top_srcdir)/bin/script/psf-select-stars.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Select good stars for constructing the PSF" \ --libtool \ $(toputildir)/script/astscript-psf-select-stars man/astscript-psf-stamp.1: $(top_srcdir)/bin/script/psf-stamp.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Make normalized stamp with other sources masked" \ --libtool $(toputildir)/script/astscript-psf-stamp man/astscript-psf-subtract.1: $(top_srcdir)/bin/script/psf-subtract.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Subtract a given PSF model from the image" \ --libtool \ $(toputildir)/script/astscript-psf-subtract man/astscript-psf-unite.1: $(top_srcdir)/bin/script/psf-unite.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Unite the outer and inner regions of the PSF" \ --libtool $(toputildir)/script/astscript-psf-unite man/astscript-radial-profile.1: $(top_srcdir)/bin/script/radial-profile.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Create a radial profile of an object in an image" \ --libtool \ $(toputildir)/script/astscript-radial-profile man/astscript-sort-by-night.1: $(top_srcdir)/bin/script/sort-by-night.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Sort input FITS files by night" \ --libtool \ $(toputildir)/script/astscript-sort-by-night man/astscript-zeropoint.1: $(top_srcdir)/bin/script/zeropoint.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Estimate zero point of an image" \ --libtool $(toputildir)/script/astscript-zeropoint �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/version.texi����������������������������������������������������������������������0000644�0001750�0001750�00000000142�14557514026�012113� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@set UPDATED 3 February 2024 @set UPDATED-MONTH February 2024 @set EDITION 0.22 @set VERSION 0.22 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/stamp-vti�������������������������������������������������������������������������0000644�0001750�0001750�00000000142�14557514026�011402� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@set UPDATED 3 February 2024 @set UPDATED-MONTH February 2024 @set EDITION 0.22 @set VERSION 0.22 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/fdl.texi��������������������������������������������������������������������������0000644�0001750�0001750�00000055612�14435153342�011202� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@c The GNU Free Documentation License. @center Version 1.3, 3 November 2008 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. @uref{https://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, La@TeX{} input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG@. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The ``publisher'' means any person or entity that distributes copies of the Document to the public. A section ``Entitled XYZ'' means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as ``Acknowledgements'', ``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' of such a section when you modify the Document means that it remains a section ``Entitled XYZ'' according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section Entitled ``History'', Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section Entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section. @item Preserve any Warranty Disclaimers. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled ``History'' in the various original documents, forming one section Entitled ``History''; likewise combine any sections Entitled ``Acknowledgements'', and any sections Entitled ``Dedications''. You must delete all sections Entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled ``Acknowledgements'', ``Dedications'', or ``History'', the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See @uref{https://www.gnu.org/licenses/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. @item RELICENSING ``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A ``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the site means any set of copyrightable works thus published on the MMC site. ``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. ``Incorporate'' means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is ``eligible for relicensing'' if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. @end enumerate @page @heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ``with@dots{}Texts.''@: line with this: @smallexample @group with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. @end group @end smallexample If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: ����������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/formath.texi����������������������������������������������������������������������0000644�0001750�0001750�00000002712�14551337306�012071� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@ignore Some macros to be able to show math nicely in HTML and TeX. The problem is that when you use braces in the TeX commands, Texinfo will complain for other formats and when you quote the braces with the at sign, e.g. @{, then TeX will not see the brace properly. So I made two macro functions: mymath{} and dispmath{}. The first is for inline math and the second is for display math where the equation has a line of its own. For the other formats, everything is normal, except the display math equations that don't have any proper solution, so I have just put a $$ $$ around the math. Copyright (C) 2015-2024 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty. @end ignore @c HTML: @ifhtml @macro mymath{arg} @inlineraw{html,\\(\arg\\\)} @end macro @macro dispmath{arg} @inlineraw{html,$$\arg\$$} @end macro @end ifhtml @c Docbook @ifdocbook @macro mymath{arg} @math{\arg\} @end macro @macro dispmath{arg} @center@inlineraw{docbook,$$\arg\$$} @end macro @end ifdocbook @c info and plaintext @ifinfo @macro mymath{arg} @inlineraw{info,$\arg\$} @end macro @macro dispmath{arg} @center@inlineraw{info,$$\arg\$$} @end macro @end ifinfo @c TeX @iftex @macro mymath{arg} @math{\arg\} @end macro @macro dispmath{arg} @tex $$\arg\$$ @end tex @end macro @end iftex ������������������������������������������������������gnuastro-0.22/doc/authors.texi����������������������������������������������������������������������0000644�0001750�0001750�00000003237�14557514026�012123� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Mohammad Akhlaghi (mohammad@@akhlaghi.org, 2215)@* Raul Infante-Sainz (infantesainz@@gmail.com, 142)@* Sepideh Eskandarlou (sepideh.eskandarlou@@gmail.com, 83)@* Pedram Ashofteh-Ardakani (pedramardakani@@pm.me, 75)@* Mos@`e Giordano (mose@@gnu.org, 29)@* Faezeh Bidjarchian (fbidjarchian@@gmail.com, 27)@* Elham Saremi (saremi_elham@@yahoo.com, 20)@* Vladimir Markelov (vmatroskin@@gmail.com, 20)@* Sachin Kumar Singh (sachinkumarsingh092@@gmail.com, 18)@* Zahra Sharbaf (zahra.sharbaf2@@gmail.com, 13)@* Boud Roukema (boud@@cosmo.torun.pl, 9)@* Natáli D. Anzanello (natali.anzanello@@ufrgs.br, 8)@* Jash Shah (jash28582@@gmail.com, 5)@* Samane Raji (samaneraji@@gmail.com, 4)@* Carlos Morales-Socorro (cmorsoc@@gmail.com, 3)@* Marjan Akbari (mrjakbari@@gmail.com, 3)@* Thorsten Alteholz (thorsten@@alteholz.dev, 3)@* Th@'er@`ese Godefroy (godef.th@@free.fr, 3)@* Zohreh Ghaffari (zoh.ghaffari@@gmail.com, 3)@* Fathma Mehnoor (fathmamehnoor@@gmail.com, 2)@* Joseph Putko (josephputko@@gmail.com, 2)@* S. Zahra Hosseini Shahisavandi (2hs.zahra@@gmail.com, 2)@* Alexey Dokuchaev (danfe@@freebsd.org, 1)@* Andreas Stieger (astieger@@suse.com, 1)@* Bharat Bhandari (bharatbhandari1024@@gmail.com, 1)@* Fran@,{c}ois Ochsenbein (francois.ochsenbein@@gmail.com, 1)@* Giulia Golini (giulia.golini@@gmail.com, 1)@* Kartik Ohri (kartikohri13@@gmail.com, 1)@* Labeeb Asari (asari.r.labeeb7@@gmail.com, 1)@* Leindert Boogaard (leindertboogaard@@gmail.com, 1)@* Lucas MacQuarrie (macquarrielucas@@gmail.com, 1)@* Madhav Bansal (madhavbansal.cse18@@itbhu.ac.in, 1)@* Miguel de Val-Borro (miguel.deval@@gmail.com, 1)@* Nafise Sedighi (sedighinafise94@@gmail.com, 1)@* Rashid Yaaqib (r.yaaqib@@gmail.com, 1)@* �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/Makefile.in�����������������������������������������������������������������������0000644�0001750�0001750�00000376006�14557513750�011622� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \ $(srcdir)/stamp-vti $(dist_infognuastro_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) am__v_DVIPS_0 = @echo " DVIPS " $@; am__v_DVIPS_1 = AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; am__v_MAKEINFO_1 = AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) am__v_INFOHTML_0 = @echo " INFOHTML" $@; am__v_INFOHTML_1 = AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; am__v_TEXI2DVI_1 = AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; am__v_TEXI2PDF_1 = AM_V_texinfo = $(am__v_texinfo_@AM_V@) am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) am__v_texinfo_0 = -q am__v_texinfo_1 = AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) am__v_texidevnull_0 = > /dev/null am__v_texidevnull_1 = INFO_DEPS = $(srcdir)/gnuastro.info TEXINFO_TEX = $(top_srcdir)/bootstrapped/build-aux/texinfo.tex am__TEXINFO_TEX_DIR = $(top_srcdir)/bootstrapped/build-aux DVIS = gnuastro.dvi PDFS = gnuastro.pdf PSS = gnuastro.ps HTMLS = gnuastro.html TEXINFOS = gnuastro.texi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(infognuastrodir)" am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man_MANS) DATA = $(dist_infognuastro_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(dist_man_MANS) $(gnuastro_TEXINFOS) \ $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/mdate-sh \ $(top_srcdir)/bootstrapped/build-aux/texinfo.tex README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = /bin/sh SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Built files that should be treated as sources for the main job. # imgrepresentative: This is just one of the images that is used in the # book as a representative for all of them because they are all built with # one script. imgrepresentative = $(top_srcdir)/doc/gnuastro-figures/done.txt BUILT_SOURCES = $(srcdir)/authors.texi $(imgrepresentative) bootstrpdoc = $(top_srcdir)/bootstrapped/doc AM_MAKEINFOFLAGS = -I $(bootstrpdoc) -I $(srcdir) # This is just a temporary work-around since Automake does not pass the # AM_MAKEINFOFLAGS to texi2dvi (which builds DVI and PDF outputs). This was # reported in Automake's bug 23599. Note that a space is necessary between # the '-I' and directory for texi2dvi. TEXI2DVI = texi2dvi -I $(bootstrpdoc) -I $(srcdir) info_TEXINFOS = gnuastro.texi gnuastro_TEXINFOS = fdl.texi formath.texi $(srcdir)/authors.texi \ $(bootstrpdoc)/gpl-3.0.texi EXTRA_DIST = genauthors README infognuastrodir = $(infodir)/gnuastro-figures/ dist_infognuastro_DATA = $(top_srcdir)/doc/gnuastro-figures/* @COND_ARITHMETIC_TRUE@MAYBE_ARITHMETIC_MAN = man/astarithmetic.1 @COND_BUILDPROG_TRUE@MAYBE_BUILDPROG_MAN = man/astbuildprog.1 @COND_CONVERTT_TRUE@MAYBE_CONVERTT_MAN = man/astconvertt.1 @COND_CONVOLVE_TRUE@MAYBE_CONVOLVE_MAN = man/astconvolve.1 @COND_COSMICCAL_TRUE@MAYBE_COSMICCAL_MAN = man/astcosmiccal.1 @COND_CROP_TRUE@MAYBE_CROP_MAN = man/astcrop.1 @COND_FITS_TRUE@MAYBE_FITS_MAN = man/astfits.1 @COND_MATCH_TRUE@MAYBE_MATCH_MAN = man/astmatch.1 @COND_MKCATALOG_TRUE@MAYBE_MKCATALOG_MAN = man/astmkcatalog.1 @COND_MKPROF_TRUE@MAYBE_MKPROF_MAN = man/astmkprof.1 @COND_NOISECHISEL_TRUE@MAYBE_NOISECHISEL_MAN = man/astnoisechisel.1 @COND_QUERY_TRUE@MAYBE_QUERY_MAN = man/astquery.1 @COND_SEGMENT_TRUE@MAYBE_SEGMENT_MAN = man/astsegment.1 @COND_STATISTICS_TRUE@MAYBE_STATISTICS_MAN = man/aststatistics.1 @COND_TABLE_TRUE@MAYBE_TABLE_MAN = man/asttable.1 @COND_WARP_TRUE@MAYBE_WARP_MAN = man/astwarp.1 #if COND_TEMPLATE # MAYBE_TEMPLATE_MAN = man/astTEMPLATE.1 #endif dist_man_MANS = $(MAYBE_ARITHMETIC_MAN) \ $(MAYBE_BUILDPROG_MAN) \ $(MAYBE_CONVERTT_MAN) \ $(MAYBE_CONVOLVE_MAN) \ $(MAYBE_COSMICCAL_MAN) \ $(MAYBE_CROP_MAN) \ $(MAYBE_FITS_MAN) \ $(MAYBE_MATCH_MAN) \ $(MAYBE_MKCATALOG_MAN) \ $(MAYBE_MKPROF_MAN) \ $(MAYBE_NOISECHISEL_MAN) \ $(MAYBE_QUERY_MAN) \ $(MAYBE_SEGMENT_MAN) \ $(MAYBE_STATISTICS_MAN) \ $(MAYBE_TABLE_MAN) \ $(MAYBE_WARP_MAN) \ man/astscript-pointing-simulate.1 \ man/astscript-ds9-region.1 \ man/astscript-fits-view.1 \ man/astscript-psf-scale-factor.1 \ man/astscript-psf-select-stars.1 \ man/astscript-psf-stamp.1 \ man/astscript-psf-subtract.1 \ man/astscript-psf-unite.1 \ man/astscript-radial-profile.1 \ man/astscript-sort-by-night.1 \ man/astscript-zeropoint.1 @COND_HASHELP2MAN_FALSE@MAYBE_HELP2MAN = @echo "Using man page in tarball (no help2man) for" @COND_HASHELP2MAN_TRUE@MAYBE_HELP2MAN = help2man --no-discard-stderr --output=$@ \ @COND_HASHELP2MAN_TRUE@ --source="$(PACKAGE_STRING)" # Build the 'man' directory and then put all the man pages in # it. Unfortunately as far as I know, pattern rules are not portable in all # implementations of Make, so we have to list all the utilities manually. toputildir = $(top_builddir)/bin ALLMANSDEP = $(top_srcdir)/lib/gnuastro-internal/options.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs .texi.info: $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ $< .texi.pdf: $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ $< .texi.html: $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@ && mv $(@:.html=.htp) $@; \ else \ rm -rf $(@:.html=.htp); exit 1; \ fi $(srcdir)/gnuastro.info: gnuastro.texi $(srcdir)/version.texi $(gnuastro_TEXINFOS) gnuastro.dvi: gnuastro.texi $(srcdir)/version.texi $(gnuastro_TEXINFOS) gnuastro.pdf: gnuastro.texi $(srcdir)/version.texi $(gnuastro_TEXINFOS) gnuastro.html: gnuastro.texi $(srcdir)/version.texi $(gnuastro_TEXINFOS) $(srcdir)/version.texi: $(srcdir)/stamp-vti $(srcdir)/stamp-vti: gnuastro.texi $(top_srcdir)/configure @(dir=.; test -f ./gnuastro.texi || dir=$(srcdir); \ set `$(SHELL) $(top_srcdir)/bootstrapped/build-aux/mdate-sh $$dir/gnuastro.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \ (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \ || (echo "Updating $(srcdir)/version.texi" && \ cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \ mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \ rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$ @cp $(srcdir)/version.texi $@ mostlyclean-vti: -rm -f vti.tmp* $(srcdir)/version.texi.tmp* maintainer-clean-vti: -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi .dvi.ps: $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) $(AM_V_texinfo) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf gnuastro.t2d gnuastro.t2p clean-aminfo: -test -z "gnuastro.dvi gnuastro.pdf gnuastro.ps gnuastro.html" \ || rm -rf gnuastro.dvi gnuastro.pdf gnuastro.ps gnuastro.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-dist_infognuastroDATA: $(dist_infognuastro_DATA) @$(NORMAL_INSTALL) @list='$(dist_infognuastro_DATA)'; test -n "$(infognuastrodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infognuastrodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infognuastrodir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infognuastrodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infognuastrodir)" || exit $$?; \ done uninstall-dist_infognuastroDATA: @$(NORMAL_UNINSTALL) @list='$(dist_infognuastro_DATA)'; test -n "$(infognuastrodir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(infognuastrodir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(INFO_DEPS) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(infognuastrodir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: $(DVIS) html: html-am html-am: $(HTMLS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-dist_infognuastroDATA install-info-am \ install-man install-dvi: install-dvi-am install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-html: install-html-am install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-am install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ mostlyclean-libtool mostlyclean-vti pdf: pdf-am pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-dist_infognuastroDATA uninstall-dvi-am \ uninstall-html-am uninstall-info-am uninstall-man \ uninstall-pdf-am uninstall-ps-am uninstall-man: uninstall-man1 .MAKE: all check install install-am install-exec install-strip .PHONY: all all-am check check-am clean clean-aminfo clean-generic \ clean-libtool cscopelist-am ctags-am dist-info distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dist_infognuastroDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean \ mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool \ mostlyclean-vti pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_infognuastroDATA uninstall-dvi-am \ uninstall-html-am uninstall-info-am uninstall-man \ uninstall-man1 uninstall-pdf-am uninstall-ps-am .PRECIOUS: Makefile $(srcdir)/authors.texi: $(top_srcdir)/configure $(top_srcdir)/doc/genauthors $(top_srcdir) $(imgrepresentative): cd $(top_srcdir)/doc/plotsrc; make man/astarithmetic.1: $(top_srcdir)/bin/arithmetic/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "arithmetic operations on images and numbers" \ --libtool $(toputildir)/arithmetic/astarithmetic man/astbuildprog.1: $(top_srcdir)/bin/buildprog/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "compile, link with Gnuastro library and its dependencies, and run a C program" \ --libtool $(toputildir)/buildprog/astbuildprog man/astconvertt.1: $(top_srcdir)/bin/convertt/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "convert known data types to each other" \ --libtool $(toputildir)/convertt/astconvertt man/astconvolve.1: $(top_srcdir)/bin/convolve/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "convolve an image with a given kernel" \ --libtool $(toputildir)/convolve/astconvolve man/astcosmiccal.1: $(top_srcdir)/bin/cosmiccal/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "estimate cosmological values" \ --libtool $(toputildir)/cosmiccal/astcosmiccal man/astcrop.1: $(top_srcdir)/bin/crop/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "crop regions of a dataset" \ --libtool $(toputildir)/crop/astcrop man/astfits.1: $(top_srcdir)/bin/fits/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "view and manipulate FITS headers" \ --libtool $(toputildir)/fits/astfits man/astmatch.1: $(top_srcdir)/bin/match/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "match catalogs by 1D or 2D positions" \ --libtool $(toputildir)/match/astmatch man/astmkcatalog.1: $(top_srcdir)/bin/mkcatalog/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Make a catalog from labeled input images" \ --libtool $(toputildir)/mkcatalog/astmkcatalog man/astmkprof.1: $(top_srcdir)/bin/mkprof/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "make standard 2D profiles on an image" \ --libtool $(toputildir)/mkprof/astmkprof man/astnoisechisel.1: $(top_srcdir)/bin/noisechisel/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "detect signal in a noisy image" \ --libtool $(toputildir)/noisechisel/astnoisechisel man/astquery.1: $(top_srcdir)/bin/query/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "query remote data servers and download" \ --libtool $(toputildir)/query/astquery man/astsegment.1: $(top_srcdir)/bin/segment/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "segmentation based on signal structure" \ --libtool $(toputildir)/segment/astsegment man/aststatistics.1: $(top_srcdir)/bin/statistics/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "calculate statistics of a dataset" \ --libtool $(toputildir)/statistics/aststatistics man/asttable.1: $(top_srcdir)/bin/table/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "read and write ASCII and FITS tables" \ --libtool $(toputildir)/table/asttable #man/astTEMPLATE.1: $(top_srcdir)/bin/TEMPLATE/args.h $(ALLMANSDEP) # $(MAYBE_HELP2MAN) -n "put a short description here" \ # --libtool $(toputildir)/TEMPLATE/astTEMPLATE man/astwarp.1: $(top_srcdir)/bin/warp/args.h $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "warp (transform) input dataset" \ --libtool $(toputildir)/warp/astwarp # The Scripts: man/astscript-color-faint-gray.1: $(top_srcdir)/bin/script/color-faint-gray.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "RGB image from FITS images showing bright and faint features" \ --libtool $(toputildir)/script/astscript-color-faint-gray man/astscript-ds9-region.1: $(top_srcdir)/bin/script/ds9-region.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Create an SAO DS9 region file from a table" \ --libtool $(toputildir)/script/astscript-ds9-region man/astscript-fits-view.1: $(top_srcdir)/bin/script/fits-view.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "View FITS images in DS9 and tables in TOPCAT" \ --libtool $(toputildir)/script/astscript-fits-view man/astscript-pointing-simulate.1: $(top_srcdir)/bin/script/pointing-simulate.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Simulate the exposure map of a pointing pattern" \ --libtool \ $(toputildir)/script/astscript-pointing-simulate man/astscript-psf-scale-factor.1: $(top_srcdir)/bin/script/psf-scale-factor.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Find factor to scale PSF to a given star" \ --libtool \ $(toputildir)/script/astscript-psf-scale-factor man/astscript-psf-select-stars.1: $(top_srcdir)/bin/script/psf-select-stars.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Select good stars for constructing the PSF" \ --libtool \ $(toputildir)/script/astscript-psf-select-stars man/astscript-psf-stamp.1: $(top_srcdir)/bin/script/psf-stamp.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Make normalized stamp with other sources masked" \ --libtool $(toputildir)/script/astscript-psf-stamp man/astscript-psf-subtract.1: $(top_srcdir)/bin/script/psf-subtract.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Subtract a given PSF model from the image" \ --libtool \ $(toputildir)/script/astscript-psf-subtract man/astscript-psf-unite.1: $(top_srcdir)/bin/script/psf-unite.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Unite the outer and inner regions of the PSF" \ --libtool $(toputildir)/script/astscript-psf-unite man/astscript-radial-profile.1: $(top_srcdir)/bin/script/radial-profile.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Create a radial profile of an object in an image" \ --libtool \ $(toputildir)/script/astscript-radial-profile man/astscript-sort-by-night.1: $(top_srcdir)/bin/script/sort-by-night.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Sort input FITS files by night" \ --libtool \ $(toputildir)/script/astscript-sort-by-night man/astscript-zeropoint.1: $(top_srcdir)/bin/script/zeropoint.sh \ $(ALLMANSDEP) $(MAYBE_HELP2MAN) -n "Estimate zero point of an image" \ --libtool $(toputildir)/script/astscript-zeropoint # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/README����������������������������������������������������������������������������0000644�0001750�0001750�00000005301�14551337306�010413� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Documentation of GNU Astronomy Utilities ======================================== Copyright (C) 2015-2024 Free Software Foundation, Inc. See the end of the file for license conditions. This directory contains the documentation (manual) of GNU Astronomy Utilities (Gnuastro) and also all the files necessary for the Gnuastro webpage. Note that only the basic files needed to make the webpage are version controlled. The generated files are not. Documentation (manual): ----------------------- The documentation of Gnuastro is written in Texinfo. The main source file is 'gnuastro.texi'. Webpage (only for maintainer) ----------------------------- The top Gnuastro webpage files are also held here, after all, a webpage is another form of documentation. To update the webpage, run the following script: $ ./forwebpage This script will generate the webpage using Gnulib's gendocs.sh script (which was part of the bootstrapping process), then it will copy them all in a specified directory anywhere you like (specified by the TOPWEBCHECKOUT shell variable). You don't have to version control any of the files in that directory, but it is easiest to have a fixed place since CVS needs a local copy. Unfortunately the GNU webpage runs on CVS! Read the top comments of the 'forwebpage' script for instructions on what to do for the first time and later times. Update MathJax (for the webpage, only for maintainer) ----------------------------------------------------- There is a script in the 'MathJax' directory on the Gnuastro webpage directory to update MathJax ('addmissing.sh'). You can get a recent version of MathJax from its webpage and put it in the correct place (see the comments in the script). That script will then add all the new files from MathJax to the checked out files and then you can use 'cvs -nq update' and 'cvs add' to add all the new files and directories. Just note that CVS is an antique(!) and so you have to add all the files in separate directories separately, first add the directory, then CVS will find the untracked files inside it and add them one by one! Image copyright --------------- This directory also contains the 'gnuastrologo.xcf' image which is a crude logo for Gnuastro in case we need it. It is released under the GNU Free Documentation License, Version 1.3 or later, just like this README (statement is at the bottom of this file) Copyright --------- Copyright (C) 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro.texi���������������������������������������������������������������������0000644�0001750�0001750�00013145165�14557512635�012317� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\input texinfo @c -*-texinfo-*- @c ONE SENTENCE PER LINE @c --------------------- @c For main printed text in this file, to allow easy tracking of history @c with Git, we are following a one-sentence-per-line convention. @c @c Since the manual is long, this is being done gradually from the start. @c %**start of header @setfilename gnuastro.info @settitle GNU Astronomy Utilities @documentencoding UTF-8 @allowcodebreaks false @c@afourpaper @c %**end of header @include version.texi @include formath.texi @c So dashes and underscores can be used in HTMLs @allowcodebreaks true @c So function output type is printed on first line @deftypefnnewline on @c Enable single quotes @codequoteundirected on @c Use section titles in cross references, not node titles. @xrefautomaticsectiontitle on @c For the indexes: @syncodeindex vr cp @syncodeindex pg cp @c Copyright information: @copying This book documents version @value{VERSION} of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright @copyright{} 2015-2024 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @c To include in the info directory. @dircategory Astronomy @direntry * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * Match: (gnuastro)Match. Match two separate catalogs. * astmatch: (gnuastro)Invoking astmatch. Options to Match. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Segment: (gnuastro)Segment. Segment detections based on signal structure. * astsegment: (gnuastro)Invoking astsegment. Options to Segment. * Query: (gnuastro)Query. Access remote databases for downloading data. * astquery: (gnuastro)Invoking astquery. Options to Query. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. * astscript: (gnuastro)Installed scripts. Gnuastro's installed scripts. * astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script * astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script * astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script * astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script * astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script * astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script * astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script * astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script * astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script * astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script * astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script @end direntry @c Print title information: @titlepage @title GNU Astronomy Utilities @subtitle Astronomical data manipulation and analysis programs and libraries @subtitle for version @value{VERSION}, @value{UPDATED} @iftex @subtitle @subtitle @subtitle @subtitle @image{gnuastro-figures/gnuastro, 6cm} { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } @subtitle @subtitle @end iftex @c @subtitle @strong{Important note:} @c @subtitle This is an @strong{under-development} Gnuastro release (bleeding-edge!). @c @subtitle It is not yet officially released. @c @subtitle The source tarball corresponding to this version is (temporarily) available at this URL: @c @subtitle @url{http://akhlaghi.org/src/gnuastro-@value{VERSION}.tar.lz} @c @subtitle (the tarball link above will not be available after the next official release) @c @subtitle The most recent under-development source and its corresponding book are available at: @c @subtitle @url{http://akhlaghi.org/gnuastro.pdf} @c @subtitle @url{http://akhlaghi.org/gnuastro-latest.tar.lz} @c @subtitle To stay up to date with Gnuastro's official releases, please subscribe to this mailing list: @c @subtitle @url{https://lists.gnu.org/mailman/listinfo/info-gnuastro} @author Mohammad Akhlaghi @page @vskip 0pt plus 1filll @insertcopying @page Gnuastro (source code, book and web page) authors (sorted by number of commits): @quotation @include authors.texi @end quotation @page @quotation @* @* @* @* @* @* @* @* @* For myself, I am interested in science and in philosophy only because I want to learn something about the riddle of the world in which we live, and the riddle of man's knowledge of that world. And I believe that only a revival of interest in these riddles can save the sciences and philosophy from narrow specialization and from an obscurantist faith in the expert's special skill, and in his personal knowledge and authority; a faith that so well fits our `post-rationalist' and `post-critical' age, proudly dedicated to the destruction of the tradition of rational philosophy, and of rational thought itself. @author Karl Popper. The logic of scientific discovery. 1959. @end quotation @end titlepage @shortcontents @contents @c Online version top information. @ifnottex @node Top, Introduction, (dir), (dir) @top GNU Astronomy Utilities @insertcopying @ifhtml To navigate easily in this web page, you can use the @code{Next}, @code{Previous}, @code{Up} and @code{Contents} links in the top and bottom of each page. @code{Next} and @code{Previous} will take you to the next or previous topic in the same level, for example, from chapter 1 to chapter 2 or vice versa. To go to the sections or subsections, you have to click on the menu entries that are there when ever a sub-component to a title is present. @end ifhtml @end ifnottex @menu * Introduction:: General introduction. * Tutorials:: Tutorials or Cookbooks. * Installation:: Requirements and installation. * Common program behavior:: Common behavior in all programs. * Data containers:: Tools to operate on extensions and tables. * Data manipulation:: Tools for basic image manipulation. * Data analysis:: Analyze images. * Data modeling:: Modeling observed data. * High-level calculations:: Physical calculations. * Installed scripts:: Installed scripts that operate like programs. * Makefile extensions:: Use Gnuastro's features as GNU Make functions. * Library:: Gnuastro's library of useful functions. * Developing:: The development environment. * Other useful software:: Installing other useful software. * GNU Free Doc License:: Full text of the GNU Free documentation license. * GNU General Public License:: Full text of the GNU General public license. * Index:: Index of terms @detailmenu --- The Detailed Node Listing --- Introduction * Quick start:: A quick start to installation. * Gnuastro programs list:: List of command-line programs. * Science and its tools:: Some philosophy and history. * Your rights:: User rights. * Logo of Gnuastro:: Meaning behind Gnuastro's logo. * Naming convention:: About names of programs in Gnuastro. * Version numbering:: Understanding version numbers. * New to GNU/Linux?:: Suggested GNU/Linux distribution. * Report a bug:: Search and report the bug you found. * Suggest new feature:: How to suggest a new feature. * Announcements:: How to stay up to date with Gnuastro. * Conventions:: Conventions used in this book. * Acknowledgments:: People who helped in the production. Version numbering * GNU Astronomy Utilities 1.0:: Plans for version 1.0 release New to GNU/Linux? * Command-line interface:: Introduction to the command-line Tutorials * General program usage tutorial:: Tutorial on many programs in generic scenario. * Detecting large extended targets:: NoiseChisel for huge extended targets. * Building the extended PSF:: How to extract an extended PSF from science data. * Sufi simulates a detection:: Simulating a detection. * Detecting lines and extracting spectra in 3D data:: Extracting spectra and emission line properties. * Color images with full dynamic range:: Bright pixels with color, faint pixels in grayscale. * Zero point of an image:: Estimate the zero point of an image. * Pointing pattern design:: Optimizing the pointings of your observations. * Moire pattern in stacking and its correction:: How to avoid this grid-based artifact. * Clipping outliers:: How to avoid outliers in your measurements. General program usage tutorial * Calling Gnuastro's programs:: Easy way to find Gnuastro's programs. * Accessing documentation:: Access to manual of programs you are running. * Setup and data download:: Setup this template and download datasets. * Dataset inspection and cropping:: Crop the flat region to use in next steps. * Angular coverage on the sky:: Measure the field size on the sky. * Cosmological coverage and visualizing tables:: Size in Mpc2, and plotting its change. * Building custom programs with the library:: Easy way to build new programs. * Option management and configuration files:: Dealing with options and configuring them. * Warping to a new pixel grid:: Transforming/warping the dataset. * NoiseChisel and Multi-Extension FITS files:: Running NoiseChisel and having multiple HDUs. * NoiseChisel optimization for detection:: Check NoiseChisel's operation and improve it. * NoiseChisel optimization for storage:: Dramatically decrease output's volume. * Segmentation and making a catalog:: Finding true peaks and creating a catalog. * Measuring the dataset limits:: One way to measure the ``depth'' of your data. * Working with catalogs estimating colors:: Estimating colors using the catalogs. * Column statistics color-magnitude diagram:: Visualizing column correlations. * Aperture photometry:: Doing photometry on a fixed aperture. * Matching catalogs:: Easily find corresponding rows from two catalogs. * Reddest clumps cutouts and parallelization:: Parallelization and selecting a subset of the data. * FITS images in a publication:: How to display FITS images in a PDF. * Marking objects for publication:: How to mark some objects over the image in a PDF. * Writing scripts to automate the steps:: Scripts will greatly help in re-doing things fast. * Citing and acknowledging Gnuastro:: How to cite and acknowledge Gnuastro in your papers. Detecting large extended targets * Downloading and validating input data:: How to get and check the input data. * NoiseChisel optimization:: Detect the extended and diffuse wings. * Skewness caused by signal and its measurement:: How signal changes the distribution. * Image surface brightness limit:: Standards to quantify the noise level. * Achieved surface brightness level:: Calculate the outer surface brightness. * Extract clumps and objects:: Find sub-structure over the detections. Building the extended PSF * Preparing input for extended PSF:: Which stars should be used? * Saturated pixels and Segment's clumps:: Saturation is a major hurdle! * One object for the whole detection:: Avoiding over-segmentation in objects. * Building outer part of PSF:: Building the outermost PSF wings. * Inner part of the PSF:: Going towards the PSF center. * Uniting the different PSF components:: Merging all the components into one PSF. * Subtracting the PSF:: Having the PSF, we now want to subtract it. Detecting lines and extracting spectra in 3D data * Viewing spectra and redshifted lines:: Interactively see the spectra of an object * Sky lines in optical IFUs:: How to see sky lines in a cube. * Continuum subtraction:: Removing the continuum from a data cube. * 3D detection with NoiseChisel:: Finding emission-lines and their spectra. * 3D measurements and spectra:: Measuring 3d properties including spectra. * Extracting a single spectrum and plotting it:: Extracting a single vector row. * Pseudo narrow-band images:: Collapsing the third dimension into a 2D image. Color images with full dynamic range * Color channels in same pixel grid:: Warping all inputs to the same pixel grid. * Color image using linear transformation:: A linear color mapping won't show much! * Color for bright regions and grayscale for faint:: Show the full dynamic range. * Manually setting color-black-gray regions:: Physically motivated regions. * Weights contrast markers and other customizations:: Nice ways to enhance visual appearance. Zero point of an image * Zero point tutorial with reference image:: Using a reference image. * Zero point tutorial with reference catalog:: Using a reference catalog. Pointing pattern design * Preparing input and generating exposure map:: Download and image and build exposure map. * Area of non-blank pixels on sky:: Account for the curved area on the sky. * Script with pointing simulation steps so far:: Summary of steps for easy testing. * Larger steps sizes for better calibration:: The initial small dither is not enough. * Pointings that account for sky curvature:: Sky curvature will cause problems! * Accounting for non-exposed pixels:: Parts of the detector do not get exposed to light. Clipping outliers * Building inputs and analysis without clipping:: Building a dataset for demonstration below. * Sigma clipping:: Standard deviation (STD) clipping. * MAD clipping:: Median Absolute Deviation (MAD) clipping. * Filled re-clipping:: Two clips with holes filled in the middle. Installation * Dependencies:: Necessary packages for Gnuastro. * Downloading the source:: Ways to download the source code. * Build and install:: Configure, build and install Gnuastro. Dependencies * Mandatory dependencies:: Gnuastro will not install without these. * Optional dependencies:: Adding more functionality. * Bootstrapping dependencies:: If you have the version controlled source. * Dependencies from package managers:: Installing from OS package managers. Mandatory dependencies * GNU Scientific Library:: Installing GSL. * CFITSIO:: C interface to the FITS standard. * WCSLIB:: C interface to the WCS standard of FITS. Downloading the source * Release tarball:: Download a stable official release. * Version controlled source:: Get and use the version controlled source. Version controlled source * Bootstrapping:: Adding all the automatically generated files. * Synchronizing:: Keep your local clone up to date. Build and install * Configuring:: Configure Gnuastro * Separate build and source directories:: Keeping derivate/build files separate. * Tests:: Run tests to see if it is working. * A4 print book:: Customize the print book. * Known issues:: Issues you might encounter. Configuring * Gnuastro configure options:: Configure options particular to Gnuastro. * Installation directory:: Specify the directory to install. * Executable names:: Changing executable names. * Configure and build in RAM:: For minimal use of HDD or SSD, and clean source. Common program behavior * Command-line:: How to use the command-line. * Configuration files:: Values for unspecified variables. * Getting help:: Getting more information on the go. * Multi-threaded operations:: How threads are managed in Gnuastro. * Numeric data types:: Different types and how to specify them. * Memory management:: How memory is allocated (in RAM or HDD/SSD). * Tables:: Recognized table formats. * Tessellation:: Tile the dataset into non-overlapping bins. * Automatic output:: About automatic output names. * Output FITS files:: Common properties when outputs are FITS. * Numeric locale:: Decimal point printed like 0.5 instead of 0,5. Command-line * Arguments and options:: Different ways to specify inputs and configuration. * Common options:: Options that are shared between all programs. * Shell TAB completion:: Customized TAB completion in Gnuastro. * Standard input:: Using output of another program as input. * Shell tips:: Useful tips and tricks for program usage. Arguments and options * Arguments:: For specifying the main input files/operations. * Options:: For configuring the behavior of the program. Common options * Input output options:: Common input/output options. * Processing options:: Options for common processing steps. * Operating mode options:: Common operating mode options. Shell tips * Separate shell variables for multiple outputs:: When you get values from one command. * Truncating start of long string FITS keyword values:: When the end of the string matters. Configuration files * Configuration file format:: ASCII format of configuration file. * Configuration file precedence:: Precedence of configuration files. * Current directory and User wide:: Local and user configuration files. * System wide:: System wide configuration files. Getting help * --usage:: View option names and value formats. * --help:: List all options with description. * Man pages:: Man pages generated from --help. * Info:: View complete book in terminal. * help-gnuastro mailing list:: Contacting experienced users. Multi-threaded operations * A note on threads:: Caution and suggestion on using threads. * How to run simultaneous operations:: How to run things simultaneously. Tables * Recognized table formats:: Table formats that are recognized in Gnuastro. * Gnuastro text table format:: Gnuastro's convention plain text tables. * Selecting table columns:: Identify/select certain columns from a table Recognized table formats * Gnuastro text table format:: Reading plain text tables Data containers * Fits:: View and manipulate extensions and keywords. * ConvertType:: Convert data to various formats. * Table:: Read and Write FITS tables to plain text. * Query:: Import data from external databases. Fits * Invoking astfits:: Arguments and options to Header. Invoking Fits * HDU information and manipulation:: Learn about the HDUs and move them. * Keyword inspection and manipulation:: Manipulate metadata keywords in a HDU. * Pixel information images:: Pixel values contain information on the pixels. ConvertType * Raster and Vector graphics:: Images coming from nature, and the abstract. * Recognized file formats:: Recognized file formats * Color:: Some explanations on color. * Annotations for figure in paper:: Adding coordinates or physical scale. * Invoking astconvertt:: Options and arguments to ConvertType. Color * Pixel colors:: Multiple filters in each pixel. * Colormaps for single-channel pixels:: Better display of single-filter images. * Vector graphics colors:: Annotations for figure in paper * Full script of annotations on figure:: All the steps in one script Invoking ConvertType * ConvertType input and output:: Input/output file names and formats. * Pixel visualization:: Visualizing the pixels in the output. * Drawing with vector graphics:: Adding marks in many shapes and colors over the pixels. Table * Printing floating point numbers:: Optimal storage of floating point types. * Vector columns:: How to keep more than one value in each column. * Column arithmetic:: How to do operations on table columns. * Operation precedence in Table:: Order of running options in Table. * Invoking asttable:: Options and arguments to Table. Query * Available databases:: List of available databases to Query. * Invoking astquery:: Inputs, outputs and configuration of Query. Data manipulation * Crop:: Crop region(s) from a dataset. * Arithmetic:: Arithmetic on input data. * Convolve:: Convolve an image with a kernel. * Warp:: Warp/Transform an image to a different grid. Crop * Crop modes:: Basic modes to define crop region. * Crop section syntax:: How to define a section to crop. * Blank pixels:: Pixels with no value. * Invoking astcrop:: Calling Crop on the command-line Invoking Crop * Crop options:: A list of all the options with explanation. * Crop output:: The outputs of Crop. * Crop known issues:: Known issues in running Crop. Arithmetic * Reverse polish notation:: The current notation style for Arithmetic. * Integer benefits and pitfalls:: Integers have benefits, but require care. * Noise basics:: Introduction various noise models. * Arithmetic operators:: List of operators known to Arithmetic. * Invoking astarithmetic:: How to run Arithmetic: options and output. Noise basics * Photon counting noise:: Poisson noise * Instrumental noise:: Readout, dark current and other sources. * Final noised pixel value:: How the final noised value is calculated. * Generating random numbers:: How random numbers are generated. Arithmetic operators * Basic mathematical operators:: For example, +, -, /, log, and pow. * Trigonometric and hyperbolic operators:: sin, cos, atan, asinh, etc. * Constants:: Physical and Mathematical constants. * Coordinate conversion operators:: For example equatorial J2000 to Galactic. * Unit conversion operators:: Various unit conversions necessary. * Statistical operators:: Statistics of a single dataset (for example, mean). * Stacking operators:: Coadding or combining multiple datasets into one. * Filtering operators:: Smoothing a dataset through mixing pixel with neighbors. * Pooling operators:: Reducing size through statistics of pixels in window. * Interpolation operators:: Giving blank pixels a value. * Dimensionality changing operators:: Collapse or expand a dataset. * Conditional operators:: Select certain pixels within the dataset. * Mathematical morphology operators:: Work on binary images, for example, erode. * Bitwise operators:: Work on bits within one pixel. * Numerical type conversion operators:: Convert the numeric datatype of a dataset. * Random number generators:: Random numbers can be used to add noise for example. * Coordinate and border operators:: Return edges of 2D boxes. * Loading external columns:: Read a column from a table into the stack. * Size and position operators:: Extracting image size and pixel positions. * Building new dataset and stack management:: How to construct an empty dataset from scratch. * Operand storage in memory or a file:: Tools for complex operations in one command. Convolve * Spatial domain convolution:: Only using the input image values. * Frequency domain and Fourier operations:: Using frequencies in input. * Spatial vs. Frequency domain:: When to use which? * Convolution kernel:: How to specify the convolution kernel. * Invoking astconvolve:: Options and argument to Convolve. Spatial domain convolution * Convolution process:: More basic explanations. * Edges in the spatial domain:: Dealing with the edges of an image. Frequency domain and Fourier operations * Fourier series historical background:: Historical background. * Circles and the complex plane:: Interpreting complex numbers. * Fourier series:: Fourier Series definition. * Fourier transform:: Fourier Transform definition. * Dirac delta and comb:: Dirac delta and Dirac comb. * Convolution theorem:: Derivation of Convolution theorem. * Sampling theorem:: Sampling theorem (Nyquist frequency). * Discrete Fourier transform:: Derivation and explanation of DFT. * Fourier operations in two dimensions:: Extend to 2D images. * Edges in the frequency domain:: Interpretation of edge effects. Warp * Linear warping basics:: Basics of coordinate transformation. * Merging multiple warpings:: How to merge multiple matrices. * Resampling:: Warping an image is re-sampling it. * Invoking astwarp:: Arguments and options for Warp. Invoking Warp * Align pixels with WCS considering distortions:: Default operation. * Linear warps to be called explicitly:: Other warps. Data analysis * Statistics:: Calculate dataset statistics. * NoiseChisel:: Detect objects in an image. * Segment:: Segment detections based on signal structure. * MakeCatalog:: Catalog from input and labeled images. * Match:: Match two datasets. Statistics * Histogram and Cumulative Frequency Plot:: Basic definitions. * 2D Histograms:: Plotting the distribution of two variables. * Least squares fitting:: Fitting with various parametric functions. * Sky value:: Definition and derivation of the Sky value. * Invoking aststatistics:: Arguments and options to Statistics. 2D Histograms * 2D histogram as a table for plotting:: Format and usage in table format. * 2D histogram as an image:: Format and usage in image format Sky value * Sky value definition:: Definition of the Sky/reference value. * Sky value misconceptions:: Wrong methods to estimate the Sky value. * Quantifying signal in a tile:: Method to estimate the presence of signal. Invoking Statistics * Input to Statistics:: How to specify the inputs to Statistics. * Single value measurements:: Can be used together (like --mean, or --maximum). * Generating histograms and cumulative frequency plots:: Histogram and CFP tables. * Fitting options:: Least squares fitting. * Contour options:: Table of contours. * Statistics on tiles:: Possible to do single-valued measurements on tiles. NoiseChisel * NoiseChisel changes after publication:: Updates since published papers. * Invoking astnoisechisel:: Options and arguments for NoiseChisel. Invoking NoiseChisel * NoiseChisel input:: NoiseChisel's input options. * Detection options:: Configure detection in NoiseChisel. * NoiseChisel output:: NoiseChisel's output options and format. Segment * Invoking astsegment:: Inputs, outputs and options to Segment Invoking Segment * Segment input:: Input files and options. * Segmentation options:: Parameters of the segmentation process. * Segment output:: Outputs of Segment MakeCatalog * Detection and catalog production:: Discussing why/how to treat these separately * Brightness flux magnitude:: More on Magnitudes, surface brightness, etc. * Quantifying measurement limits:: For comparing different catalogs. * Measuring elliptical parameters:: Estimating elliptical parameters. * Adding new columns to MakeCatalog:: How to add new columns. * MakeCatalog measurements:: List of all the measurements/columns by MakeCatalog. * Invoking astmkcatalog:: Options and arguments to MakeCatalog. Quantifying measurement limits * Standard deviation vs error:: The std is not a measure of the error. * Magnitude measurement error of each detection:: Error in measuring magnitude. * Surface brightness error of each detection:: Error in measuring the Surface brightness. * Completeness limit of each detection:: Possibility of detecting similar objects? * Upper limit magnitude of each detection:: How reliable is your magnitude? * Magnitude limit of image:: Measured magnitude of objects at certain S/N. * Surface brightness limit of image:: Extrapolate per-pixel noise-level to standard units. * Upper limit surface brightness of image:: Measure the noise-level for a certain aperture. MakeCatalog measurements * Identifier columns:: Identifying labels of each row (object/clumps). * Position measurements in pixels:: Containing image/pixel (X/Y) measurements. * Position measurements in WCS:: Containing WCS (for example RA/Dec) measurements. * Brightness measurements:: Using pixel values of each label. * Surface brightness measurements:: Various ways to measure surface brightness. * Morphology measurements nonparametric:: Non-parametric morphology. * Morphology measurements elliptical:: Elliptical morphology measurements. * Measurements per slice spectra:: Measurements on each slice (like spectra). Invoking MakeCatalog * MakeCatalog inputs and basic settings:: Input files and basic settings. * Upper-limit settings:: Settings for upper-limit measurements. * MakeCatalog output:: File names of MakeCatalog's output table. Match * Matching algorithms:: Different ways to find the match * Invoking astmatch:: Inputs, outputs and options of Match Data modeling * MakeProfiles:: Making mock galaxies and stars. MakeProfiles * Modeling basics:: Astronomical modeling basics. * If convolving afterwards:: Considerations for convolving later. * Profile magnitude:: Definition of total profile magnitude. * Invoking astmkprof:: Inputs and Options for MakeProfiles. Modeling basics * Defining an ellipse and ellipsoid:: Definition of these important shapes. * PSF:: Radial profiles for the PSF. * Stars:: Making mock star profiles. * Galaxies:: Radial profiles for galaxies. * Sampling from a function:: Sample a function on a pixelated canvas. * Oversampling:: Oversampling the model. Invoking MakeProfiles * MakeProfiles catalog:: Required catalog properties. * MakeProfiles profile settings:: Configuration parameters for all profiles. * MakeProfiles output dataset:: The canvas/dataset to build profiles over. * MakeProfiles log file:: A description of the optional log file. High-level calculations * CosmicCalculator:: Calculate cosmological variables CosmicCalculator * Distance on a 2D curved space:: Distances in 2D for simplicity. * Extending distance concepts to 3D:: Going to 3D (our real universe). * Invoking astcosmiccal:: How to run CosmicCalculator. Invoking CosmicCalculator * CosmicCalculator input options:: Options to specify input conditions. * CosmicCalculator basic cosmology calculations:: Such as distance modulus and distances. * CosmicCalculator spectral line calculations:: How they get affected by redshift. Installed scripts * Sort FITS files by night:: Sort many files by date. * Generate radial profile:: Radial profile of an object in an image. * SAO DS9 region files from table:: Create ds9 region file from a table. * Viewing FITS file contents with DS9 or TOPCAT:: Open DS9 (images/cubes) or TOPCAT (tables). * Zero point estimation:: Zero point of an image from reference catalog or image(s). * Pointing pattern simulation:: Simulate a stack with a given series of pointings. * Color images with gray faint regions:: Color for bright pixels and grayscale for faint. * PSF construction and subtraction:: Set of scripts to create extended PSF of an image. Sort FITS files by night * Invoking astscript-sort-by-night:: Inputs and outputs to this script. Generate radial profile * Invoking astscript-radial-profile:: How to call astscript-radial-profile SAO DS9 region files from table * Invoking astscript-ds9-region:: How to call astscript-ds9-region Viewing FITS file contents with DS9 or TOPCAT * Invoking astscript-fits-view:: How to call this script Zero point estimation * Invoking astscript-zeropoint:: How to call the script Invoking astscript-zeropoint * zero point output:: Format of the output. * zero point options:: List and details of options. Pointing pattern simulation * Invoking astscript-pointing-simulate:: Options and running mode. Color images with gray faint regions * Invoking astscript-color-faint-gray:: Details of options and arguments. PSF construction and subtraction * Overview of the PSF scripts:: Summary of concepts and methods * Invoking astscript-psf-select-stars:: Select good starts within an image. * Invoking astscript-psf-stamp:: Make a stamp of each star to stack. * Invoking astscript-psf-unite:: Merge stacks of different regions of PSF. * Invoking astscript-psf-scale-factor:: Calculate factor to scale PSF to star. * Invoking astscript-psf-subtract:: Put the PSF in the image to subtract. Makefile extensions (for GNU Make) * Loading the Gnuastro Make functions:: How to find and load Gnuastro's Make library. * Makefile functions of Gnuastro:: The available functions. Makefile functions of Gnuastro * Text functions for Makefiles:: Basic text operations to supplement Make. * Astronomy functions for Makefiles:: Astronomy/FITS related functions. Library * Review of library fundamentals:: Guide on libraries and linking. * BuildProgram:: Link and run source files with this library. * Gnuastro library:: Description of all library functions. * Library demo programs:: Demonstration for using libraries. Review of library fundamentals * Headers:: Header files included in source. * Linking:: Linking the compiled source files into one. * Summary and example on libraries:: A summary and example on using libraries. BuildProgram * Invoking astbuildprog:: Options and examples for using this program. Gnuastro library * Configuration information:: General information about library config. * Multithreaded programming:: Tools for easy multi-threaded operations. * Library data types:: Definitions and functions for types. * Pointers:: Wrappers for easy working with pointers.@strong{} * Library blank values:: Blank values and functions to deal with them. * Library data container:: General data container in Gnuastro. * Dimensions:: Dealing with coordinates and dimensions. * Linked lists:: Various types of linked lists. * Array input output:: Reading and writing images or cubes. * Table input output:: Reading and writing table columns. * FITS files:: Working with FITS data. * File input output:: Reading and writing to various file formats. * World Coordinate System:: Dealing with the world coordinate system. * Arithmetic on datasets:: Arithmetic operations on a dataset. * Tessellation library:: Functions for working on tiles. * Bounding box:: Finding the bounding box. * Polygons:: Working with the vertices of a polygon. * Qsort functions:: Helper functions for Qsort. * K-d tree:: Space partitioning in K dimensions. * Permutations:: Re-order (or permute) the values in a dataset. * Matching:: Matching catalogs based on position. * Statistical operations:: Functions for basic statistics. * Fitting functions:: Fit independent and measured variables. * Binary datasets:: Datasets that can only have values of 0 or 1. * Labeled datasets:: Working with Segmented/labeled datasets. * Convolution functions:: Library functions to do convolution. * Pooling functions:: Reduce size of input by statistical methods. * Interpolation:: Interpolate (over blank values possibly). * Warp library:: Warp pixel grid to a new one. * Color functions:: Definitions and operations related to colors. * Git wrappers:: Wrappers for functions in libgit2. * Python interface:: Functions to help in writing Python wrappers. * Unit conversion library:: Converting between recognized units. * Spectral lines library:: Functions for operating on Spectral lines. * Cosmology library:: Cosmological calculations. * SAO DS9 library:: Take inputs from files generated by SAO DS9. Multithreaded programming (@file{threads.h}) * Implementation of pthread_barrier:: Some systems do not have pthread_barrier * Gnuastro's thread related functions:: Functions for managing threads. Data container (@file{data.h}) * Generic data container:: Definition of Gnuastro's generic container. * Dataset allocation:: Allocate, initialize and free a dataset. * Arrays of datasets:: Functions to help with array of datasets. * Copying datasets:: Functions to copy a dataset to a new one. Linked lists (@file{list.h}) * List of strings:: Simply linked list of strings. * List of int32_t:: Simply linked list of int32_ts. * List of size_t:: Simply linked list of size_ts. * List of float:: Simply linked list of floats. * List of double:: Simply linked list of doubles * List of void:: Simply linked list of void * pointers. * Ordered list of size_t:: Simply linked, ordered list of size_t. * Doubly linked ordered list of size_t:: Definition and functions. * List of gal_data_t:: Simply linked list Gnuastro's generic datatype. FITS files (@file{fits.h}) * FITS macros errors filenames:: General macros, errors and checking names. * CFITSIO and Gnuastro types:: Conversion between FITS and Gnuastro types. * FITS HDUs:: Opening and getting information about HDUs. * FITS header keywords:: Reading and writing FITS header keywords. * FITS arrays:: Reading and writing FITS images/arrays. * FITS tables:: Reading and writing FITS tables. File input output * Text files:: Reading and writing from/to plain text files. * TIFF files:: Reading and writing from/to TIFF files. * JPEG files:: Reading and writing from/to JPEG files. * EPS files:: Writing to EPS files. * PDF files:: Writing to PDF files. Tessellation library (@file{tile.h}) * Independent tiles:: Work on or check independent tiles. * Tile grid:: Cover a full dataset with non-overlapping tiles. Library demo programs * Library demo - reading a image:: Read a FITS image into memory. * Library demo - inspecting neighbors:: Inspect the neighbors of a pixel. * Library demo - multi-threaded operation:: Doing an operation on threads. * Library demo - reading and writing table columns:: Simple Column I/O. * Library demo - Warp to another image:: Output pixel grid and WCS from another image. * Library demo - Warp to new grid:: Define a new pixel grid and WCS to resample the input. Developing * Why C:: Why Gnuastro is designed in C. * Program design philosophy:: General ideas behind the package structure. * Coding conventions:: Gnuastro coding conventions. * Program source:: Conventions for the code. * Documentation:: Documentation is an integral part of Gnuastro. * Building and debugging:: Build and possibly debug during development. * Test scripts:: Understanding the test scripts. * Bash programmable completion:: Auto-completions for better user experience. * Developer's checklist:: Checklist to finalize your changes. * Gnuastro project webpage:: Central hub for Gnuastro activities. * Developing mailing lists:: Stay up to date with Gnuastro's development. * Contributing to Gnuastro:: Share your changes with all users. Program source * Mandatory source code files:: Description of files common to all programs. * The TEMPLATE program:: Template for easy creation of a new program. Bash programmable completion * Bash TAB completion tutorial:: Fast tutorial to get you started on concepts. * Implementing TAB completion in Gnuastro:: How Gnuastro uses Bash auto-completion features. Contributing to Gnuastro * Copyright assignment:: Copyright has to be assigned to the FSF. * Commit guidelines:: Guidelines for commit messages. * Production workflow:: Submitting your commits (work) for inclusion. * Forking tutorial:: Tutorial on workflow steps with Git. Other useful software * SAO DS9:: Viewing FITS images. * TOPCAT:: Plotting tables of data. * PGPLOT:: Plotting directly in C. @end detailmenu @end menu @node Introduction, Tutorials, Top, Top @chapter Introduction @cindex GNU coding standards @cindex GNU Astronomy Utilities (Gnuastro) GNU Astronomy Utilities (Gnuastro) is an official GNU package consisting of separate programs and libraries for the manipulation and analysis of astronomical data. All the programs share the same basic command-line user interface for the comfort of both the users and developers. Gnuastro is written to comply fully with the GNU coding standards so it integrates finely with the GNU/Linux operating system. This also enables astronomers to expect a fully familiar experience in the source code, building, installing and command-line user interaction that they have seen in all the other GNU software that they use. The official and always up to date version of this book (or manual) is freely available under @ref{GNU Free Doc License} in various formats (PDF, HTML, plain text, info, and as its Texinfo source) at @url{http://www.gnu.org/software/gnuastro/manual/}. For users who are new to the GNU/Linux environment, unless otherwise specified most of the topics in @ref{Installation} and @ref{Common program behavior} are common to all GNU software, for example, installation, managing command-line options or getting help (also see @ref{New to GNU/Linux?}). So if you are new to this empowering environment, we encourage you to go through these chapters carefully. They can be a starting point from which you can continue to learn more from each program's own manual and fully benefit from and enjoy this wonderful environment. Gnuastro also comes with a large set of libraries, so you can write your own programs using Gnuastro's building blocks, see @ref{Review of library fundamentals} for an introduction. In Gnuastro, no change to any program or library will be committed to its history, before it has been fully documented here first. As discussed in @ref{Science and its tools} this is a founding principle of the Gnuastro. @menu * Quick start:: A quick start to installation. * Gnuastro programs list:: List of command-line programs. * Science and its tools:: Some philosophy and history. * Your rights:: User rights. * Logo of Gnuastro:: Meaning behind Gnuastro's logo. * Naming convention:: About names of programs in Gnuastro. * Version numbering:: Understanding version numbers. * New to GNU/Linux?:: Suggested GNU/Linux distribution. * Report a bug:: Search and report the bug you found. * Suggest new feature:: How to suggest a new feature. * Announcements:: How to stay up to date with Gnuastro. * Conventions:: Conventions used in this book. * Acknowledgments:: People who helped in the production. @end menu @node Quick start, Gnuastro programs list, Introduction, Introduction @section Quick start @cindex Test @cindex Gzip @cindex Lzip @cindex Check @cindex Build @cindex Compile @cindex GNU Tar @cindex Uncompress source @cindex Source, uncompress The latest official release tarball is always available as @url{http://ftp.gnu.org/gnu/gnuastro/gnuastro-latest.tar.lz, @file{gnuastro-latest.tar.lz}}. The @url{http://www.nongnu.org/lzip/lzip.html, Lzip} format is used for better compression (smaller output size, thus faster download), and robust archival features and standards. For historical reasons (those users that do not yet have Lzip), the Gzip'd tarball@footnote{The Gzip library and program are commonly available on most systems. However, Gnuastro recommends Lzip as described above and the beta-releases are also only distributed in @file{tar.lz}.} is available at the same URL (just change the @file{.lz} suffix above to @file{.gz}; however, the Lzip'd file is recommended). See @ref{Release tarball} for more details on the tarball release. Let's assume the downloaded tarball is in the @file{TOPGNUASTRO} directory. You can follow the commands below to download and un-compress the Gnuastro source. You need to have the @command{lzip} program for the decompression (see @ref{Dependencies from package managers}) If your Tar implementation does not recognize Lzip (the third command fails), run the fourth command. Note that lines starting with @code{##} do not need to be typed (they are only a description of the following command): @example ## Go into the download directory. $ cd TOPGNUASTRO ## If you do not already have the tarball, you can download it: $ wget http://ftp.gnu.org/gnu/gnuastro/gnuastro-latest.tar.lz ## If this fails, run the next command. $ tar -xf gnuastro-latest.tar.lz ## Only when the previous command fails. $ lzip -cd gnuastro-latest.tar.lz | tar -xf - @end example Gnuastro has three mandatory dependencies and some optional dependencies for extra functionality, see @ref{Dependencies} for the full list. In @ref{Dependencies from package managers} we have prepared the command to easily install Gnuastro's dependencies using the package manager of some operating systems. When the mandatory dependencies are ready, you can configure, compile, check and install Gnuastro on your system with the following commands. See @ref{Known issues} if you confront any complications. @example $ cd gnuastro-X.X # Replace X.X with version number. $ ./configure $ make -j8 # Replace 8 with no. CPU threads. $ make check -j8 # Replace 8 with no. CPU threads. $ sudo make install @c $ echo "source /usr/local/share/gnuastro/completion.bash" >> ~/.bashrc @end example @c @noindent @c The last command is to enable Gnuastro's custom TAB completion in Bash. @c For more on this useful feature, see @ref{Shell TAB completion}). For each program there is an `Invoke ProgramName' sub-section in this book which explains how the programs should be run on the command-line (for example, see @ref{Invoking asttable}). In @ref{Tutorials}, we have prepared some complete tutorials with common Gnuastro usage scenarios in astronomical research. They even contain links to download the necessary data, and thoroughly describe every step of the process (the science, statistics and optimal usage of the command-line). We therefore recommend to read (an run the commands in) the tutorials before starting to use Gnuastro. @node Gnuastro programs list, Science and its tools, Quick start, Introduction @section Gnuastro programs list One of the most common ways to operate Gnuastro is through its command-line programs. For some tutorials on several real-world usage scenarios, see @ref{Tutorials}. The list here is just provided as a general summary for those who are new to Gnuastro. GNU Astronomy Utilities @value{VERSION}, contains the following programs. They are sorted in alphabetical order and a short description is provided for each program. The description starts with the executable names in @file{thisfont} followed by a pointer to the respective section in parenthesis. Throughout this book, they are ordered based on their context, please see the top-level contents for contextual ordering (based on what they do). @table @asis @item Arithmetic (@file{astarithmetic}, see @ref{Arithmetic}) For arithmetic operations on multiple (theoretically unlimited) number of datasets (images). It has a large and growing set of arithmetic, mathematical, and even statistical operators (for example, @command{+}, @command{-}, @command{*}, @command{/}, @command{sqrt}, @command{log}, @command{min}, @command{average}, @command{median}, see @ref{Arithmetic operators}). @item BuildProgram (@file{astbuildprog}, see @ref{BuildProgram}) Compile, link and run custom C programs that depend on the Gnuastro library (see @ref{Gnuastro library}). This program will automatically link with the libraries that Gnuastro depends on, so there is no need to explicitly mention them every time you are compiling a Gnuastro library dependent program. @item ConvertType (@file{astconvertt}, see @ref{ConvertType}) Convert astronomical data files (FITS or IMH) to and from several other standard image and data formats, for example, TXT, JPEG, EPS or PDF. Optionally, it is also possible to add vector graphics markers over the output image (for example, circles from catalogs containing RA or Dec). @item Convolve (@file{astconvolve}, see @ref{Convolve}) Convolve (blur or smooth) data with a given kernel in spatial and frequency domain on multiple threads. Convolve can also do deconvolution to find the appropriate kernel to PSF-match two images. @item CosmicCalculator (@file{astcosmiccal}, see @ref{CosmicCalculator}) Do cosmological calculations, for example, the luminosity distance, distance modulus, comoving volume and many more. @item Crop (@file{astcrop}, see @ref{Crop}) Crop region(s) from one or many image(s) and stitch several images if necessary. Input coordinates can be in pixel coordinates or world coordinates. @item Fits (@file{astfits}, see @ref{Fits}) View and manipulate FITS file extensions and header keywords. @item MakeCatalog (@file{astmkcatalog}, see @ref{MakeCatalog}) Make catalog of labeled image (output of NoiseChisel). The catalogs are highly customizable and adding new calculations/columns is very straightforward. @item MakeProfiles (@file{astmkprof}, see @ref{MakeProfiles}) Make mock 2D profiles in an image. The central regions of radial profiles are made with a configurable 2D Monte Carlo integration. It can also build the profiles on an over-sampled image. @item Match (@file{astmatch}, see @ref{Match}) Given two input catalogs, find the rows that match with each other within a given aperture (may be an ellipse). @item NoiseChisel (@file{astnoisechisel}, see @ref{NoiseChisel}) Detect signal in noise. It uses a technique to detect very faint and diffuse, irregularly shaped signal in noise (galaxies in the sky), using thresholds that are below the Sky value, see Akhlaghi and Ichikawa @url{http://arxiv.org/abs/1505.01664,2015}. @item Query (@file{astquery}, see @ref{Query}) High-level interface to query pre-defined remote, or external databases, and directly download the required sub-tables on the command-line. @item Segment (@file{astsegment}, see @ref{Segment}) Segment detected regions based on the structure of signal and the input dataset's noise properties. @item Statistics (@file{aststatistics}, see @ref{Statistics}) Statistical calculations on the input dataset (column in a table, image or datacube). This includes man operations such as generating histogram, sigma clipping, and least squares fitting. @item Table (@file{asttable}, @ref{Table}) Convert FITS binary and ASCII tables into other such tables, print them on the command-line, save them in a plain text file, do arithmetic on the columns or get the FITS table information. For a full list of operations, see @ref{Operation precedence in Table}. @item Warp (@file{astwarp}, see @ref{Warp}) Warp image to new pixel grid. By default it will align the pixel and WCS coordinates, removing any non-linear WCS distortions. Any linear warp (projective transformation or Homography) can also be applied to the input images by explicitly calling the respective operation. @end table The programs listed above are designed to be highly modular and generic. Hence, they are naturally for lower-level operations. In Gnuastro, higher-level operations (combining multiple programs, or running a program in a special way), are done with installed Bash scripts (all prefixed with @code{astscript-}). They can be run just like a program and behave very similarly (with minor differences, see @ref{Installed scripts}). @table @code @item astscript-ds9-region (See @ref{SAO DS9 region files from table}) Given a table (either as a file or from standard input), create an SAO DS9 region file from the requested positional columns (WCS or image coordinates). @item astscript-fits-view (see @ref{Viewing FITS file contents with DS9 or TOPCAT}) Given any number of FITS files, this script will either open SAO DS9 (for images or cubes) or TOPCAT (for tables) to view them in a graphic user interface (GUI). @item astscript-pointing-simulate (See @ref{Pointing pattern simulation}) Given a table of pointings on the sky, create and a reference image that contains your camera's distortions and properties, generate a stacked exposure map. This is very useful in testing the coverage of dither patterns when designing your observing strategy and it is highly customizable. See Akhlaghi @url{https://arxiv.org/abs/2310.15006,2023}, or the dedicated tutorial in @ref{Pointing pattern design}. @item astscript-radial-profile (See @ref{Generate radial profile}) Calculate the radial profile of an object within an image. The object can be at any location in the image, using various measures (median, sigma-clipped mean, etc.), and the radial distance can also be measured on any general ellipse. See Infante-Sainz et al. @url{https://arxiv.org/abs/2401.05303,2024}. @item astscript-color-faint-gray (see @ref{Color images with gray faint regions}) Given three images for the Red-Green-Blue (RGB) channels, this script will use the bright pixels for color and will show the faint/diffuse regions in grayscale. This greatly helps in visualizing the full dynamic range of astronomical data. See Infante-Sainz et al. @url{https://arxiv.org/abs/2401.03814,2024} or a dedicated tutorial in @ref{Color images with full dynamic range}. @item astscript-sort-by-night (See @ref{Sort FITS files by night}) Given a list of FITS files, and a HDU and keyword name (for a date), this script separates the files in the same night (possibly over two calendar days). @item astscript-zeropoint (see @ref{Zero point estimation}) Estimate the zero point (to calibrate pixel values) of an input image using a reference image or a reference catalog. This is necessary to produce measurements with physical units from new images. See Eskandarlou et al. @url{https://arxiv.org/abs/2312.04263,2023}, or a dedicated tutorial in @ref{Zero point of an image}. @item astscript-psf-* The following scripts are used to estimate the extended PSF estimation and subtraction as described in the tutorial @ref{Building the extended PSF}: @table @code @item astscript-psf-select-stars (see @ref{Invoking astscript-psf-select-stars}) Find all the stars within an image that are suitable for constructing an extended PSF. If the image has WCS, this script can automatically query Gaia to find the good stars. @item astscript-psf-stamp (see @ref{Invoking astscript-psf-stamp}) build a crop (stamp) of a certain width around a star at a certain coordinate in a larger image. This script will do sub-pixel re-positioning to make sure the star is centered and can optionally mask all other background sources). @item astscript-psf-scale-factor (see @ref{Invoking astscript-psf-scale-factor}) Given a PSF model, and the central coordinates of a star in an image, find the scale factor that has to be multiplied by the PSF to scale it to that star. @item astscript-psf-unite (see @ref{Invoking astscript-psf-unite}) Unite the various components of a PSF into one. Because of saturation and non-linearity, to get a good estimate of the extended PSF, it is necessary to construct various parts from different magnitude ranges. @item astscript-psf-subtract (see @ref{Invoking astscript-psf-subtract}) Given the model of a PSF and the central coordinates of a star in the image, do sub-pixel re-positioning of the PSF, scale it to the star and subtract it from the image. @end table @end table @node Science and its tools, Your rights, Gnuastro programs list, Introduction @section Gnuastro manifesto: Science and its tools History of science indicates that there are always inevitably unseen faults, hidden assumptions, simplifications and approximations in all our theoretical models, data acquisition and analysis techniques. It is precisely these that will ultimately allow future generations to advance the existing experimental and theoretical knowledge through their new solutions and corrections. In the past, scientists would gather data and process them individually to achieve an analysis thus having a much more intricate knowledge of the data and analysis. The theoretical models also required little (if any) simulations to compare with the data. Today both methods are becoming increasingly more dependent on pre-written software. Scientists are dissociating themselves from the intricacies of reducing raw observational data in experimentation or from bringing the theoretical models to life in simulations. These `intricacies' are precisely those unseen faults, hidden assumptions, simplifications and approximations that define scientific progress. @quotation @cindex Anscombe F. J. Unfortunately, most persons who have recourse to a computer for statistical analysis of data are not much interested either in computer programming or in statistical method, being primarily concerned with their own proper business. Hence the common use of library programs and various statistical packages. ... It's time that was changed. @author F.J. Anscombe. The American Statistician, Vol. 27, No. 1. 1973 @end quotation @cindex Anscombe's quartet @cindex Statistical analysis @url{http://en.wikipedia.org/wiki/Anscombe%27s_quartet,Anscombe's quartet} demonstrates how four data sets with widely different shapes (when plotted) give nearly identical output from standard regression techniques. Anscombe uses this (now famous) quartet, which was introduced in the paper quoted above, to argue that ``@emph{Good statistical analysis is not a purely routine matter, and generally calls for more than one pass through the computer}''. Echoing Anscombe's concern after 44 years, some of the highly recognized statisticians of our time (Leek, McShane, Gelman, Colquhoun, Nuijten and Goodman), wrote in Nature that: @quotation We need to appreciate that data analysis is not purely computational and algorithmic -- it is a human behavior....Researchers who hunt hard enough will turn up a result that fits statistical criteria -- but their discovery will probably be a false positive. @author Five ways to fix statistics, Nature, 551, Nov 2017. @end quotation Users of statistical (scientific) methods (software) are therefore not passive (objective) agents in their results. It is necessary to actually understand the method, not just use it as a black box. The subjective experience gained by frequently using a method/software is not sufficient to claim an understanding of how the tool/method works and how relevant it is to the data and analysis. This kind of subjective experience is prone to serious misunderstandings about the data, what the software/statistical-method really does (especially as it gets more complicated), and thus the scientific interpretation of the result. This attitude is further encouraged through non-free software@footnote{@url{https://www.gnu.org/philosophy/free-sw.html}}, poorly written (or non-existent) scientific software manuals, and non-reproducible papers@footnote{Where the authors omit many of the analysis/processing ``details'' from the paper by arguing that they would make the paper too long/unreadable. However, software engineers have been dealing with such issues for a long time. There are thus software management solutions that allow us to supplement papers with all the details necessary to exactly reproduce the result. For example, see Akhlaghi et al. @url{https://arxiv.org/abs/2006.03018,2021}.}. This approach to scientific software and methods only helps in producing dogmas and an ``@emph{obscurantist faith in the expert's special skill, and in his personal knowledge and authority}''@footnote{Karl Popper. The logic of scientific discovery. 1959. Larger quote is given at the start of the PDF (for print) version of this book.}. @quotation @cindex Douglas Rushkoff Program or be programmed. Choose the former, and you gain access to the control panel of civilization. Choose the latter, and it could be the last real choice you get to make. @author Douglas Rushkoff. Program or be programmed, O/R Books (2010). @end quotation It is obviously impractical for any one human being to gain the intricate knowledge explained above for every step of an analysis. On the other hand, scientific data can be large and numerous, for example, images produced by telescopes in astronomy. This requires efficient algorithms. To make things worse, natural scientists have generally not been trained in the advanced software techniques, paradigms and architecture that are taught in computer science or engineering courses and thus used in most software. The GNU Astronomy Utilities are an effort to tackle this issue. Gnuastro is not just a software, this book is as important to the idea behind Gnuastro as the source code (software). This book has tried to learn from the success of the ``Numerical Recipes'' book in educating those who are not software engineers and computer scientists but still heavy users of computational algorithms, like astronomers. There are two major differences. The first difference is that Gnuastro's code and the background information are segregated: the code is moved within the actual Gnuastro software source code and the underlying explanations are given here in this book. In the source code, every non-trivial step is heavily commented and correlated with this book, it follows the same logic of this book, and all the programs follow a similar internal data, function and file structure, see @ref{Program source}. Complementing the code, this book focuses on thoroughly explaining the concepts behind those codes (history, mathematics, science, software and usage advice when necessary) along with detailed instructions on how to run the programs. At the expense of frustrating ``professionals'' or ``experts'', this book and the comments in the code also intentionally avoid jargon and abbreviations. The source code and this book are thus intimately linked, and when considered as a single entity can be thought of as a real (an actual software accompanying the algorithms) ``Numerical Recipes'' for astronomy. @cindex GNU free documentation license @cindex GNU General Public License (GPL) The second major, and arguably more important, difference is that ``Numerical Recipes'' does not allow you to distribute any code that you have learned from it. In other words, it does not allow you to release your software's source code if you have used their codes, you can only publicly release binaries (a black box) to the community. Therefore, while it empowers the privileged individual who has access to it, it exacerbates social ignorance. Exactly at the opposite end of the spectrum, Gnuastro's source code is released under the GNU general public license (GPL) and this book is released under the GNU free documentation license. You are therefore free to distribute any software you create using parts of Gnuastro's source code or text, or figures from this book, see @ref{Your rights}. With these principles in mind, Gnuastro's developers aim to impose the minimum requirements on you (in computer science, engineering and even the mathematics behind the tools) to understand and modify any step of Gnuastro if you feel the need to do so, see @ref{Why C} and @ref{Program design philosophy}. @cindex Brahe, Tycho @cindex Galileo, Galilei Without prior familiarity and experience with optics, it is hard to imagine how, Galileo could have come up with the idea of modifying the Dutch military telescope optics to use in astronomy. Astronomical objects could not be seen with the Dutch military design of the telescope. In other words, it is unlikely that Galileo could have asked a random optician to make modifications (not understood by Galileo) to the Dutch design, to do something no astronomer of the time took seriously. In the paradigm of the day, what could be the purpose of enlarging geometric spheres (planets) or points (stars)? In that paradigm only the position and movement of the heavenly bodies was important, and that had already been accurately studied (recently by Tycho Brahe). In the beginning of his ``The Sidereal Messenger'' (published in 1610) he cautions the readers on this issue and @emph{before} describing his results/observations, Galileo instructs us on how to build a suitable instrument. Without a detailed description of @emph{how} he made his tools and done his observations, no reasonable person would believe his results. Before he actually saw the moons of Jupiter, the mountains on the Moon or the crescent of Venus, Galileo was “evasiveâ€@footnote{Galileo G. (Translated by Maurice A. Finocchiaro). @emph{The essential Galileo}.Hackett publishing company, first edition, 2008.} to Kepler. Science is defined by its tools/methods, @emph{not} its raw results@footnote{For example, take the following two results on the age of the universe: roughly 14 billion years (suggested by the current consensus of the standard model of cosmology) and less than 10,000 years (suggested from some interpretations of the Bible). Both these numbers are @emph{results}. What distinguishes these two results, is the tools/methods that were used to derive them. Therefore, as the term ``Scientific method'' also signifies, a scientific statement it defined by its @emph{method}, not its result.}. The same is true today: science cannot progress with a black box, or poorly released code. The source code of a research is the new (abstractified) communication language in science, understandable by humans @emph{and} computers. Source code (in any programming language) is a language/notation designed to express all the details that would be too tedious/long/frustrating to report in spoken languages like English, similar to mathematic notation. @quotation An article about computational science [almost all sciences today] ... is not the scholarship itself, it is merely advertising of the scholarship. The Actual Scholarship is the complete software development environment and the complete set of instructions which generated the figures. @author Buckheit & Donoho, Lecture Notes in Statistics, Vol 103, 1996 @end quotation Today, the quality of the source code that goes into a scientific result (and the distribution of that code) is as critical to scientific vitality and integrity, as the quality of its written language/English used in publishing/distributing its paper. A scientific paper will not even be reviewed by any respectable journal if its written in a poor language/English. A similar level of quality assessment is thus increasingly becoming necessary regarding the codes/methods used to derive the results of a scientific paper. For more on this, please see Akhlaghi et al. @url{https://arxiv.org/abs/2006.03018,2021}). @cindex Ken Thomson @cindex Stroustrup, Bjarne Bjarne Stroustrup (creator of the C++ language) says: ``@emph{Without understanding software, you are reduced to believing in magic}''. Ken Thomson (the designer or the Unix operating system) says ``@emph{I abhor a system designed for the `user' if that word is a coded pejorative meaning `stupid and unsophisticated'}.'' Certainly no scientist (user of a scientific software) would want to be considered a believer in magic, or stupid and unsophisticated. This can happen when scientists get too distant from the raw data and methods, and are mainly discussing results. In other words, when they feel they have tamed Nature into their own high-level (abstract) models (creations), and are mainly concerned with scaling up, or industrializing those results. Roughly five years before special relativity, and about two decades before quantum mechanics fundamentally changed Physics, Lord Kelvin is quoted as saying: @quotation @cindex Lord Kelvin @cindex William Thomson There is nothing new to be discovered in physics now. All that remains is more and more precise measurement. @author William Thomson (Lord Kelvin), 1900 @end quotation @noindent A few years earlier Albert. A. Michelson made the following statement: @quotation @cindex Albert. A. Michelson @cindex Michelson, Albert. A. The more important fundamental laws and facts of physical science have all been discovered, and these are now so firmly established that the possibility of their ever being supplanted in consequence of new discoveries is exceedingly remote.... Our future discoveries must be looked for in the sixth place of decimals. @author Albert. A. Michelson, dedication of Ryerson Physics Lab, U. Chicago 1894 @end quotation @cindex Puzzle solving scientist @cindex Scientist, puzzle solver If scientists are considered to be more than mere puzzle solvers@footnote{Thomas S. Kuhn. @emph{The Structure of Scientific Revolutions}, University of Chicago Press, 1962.} (simply adding to the decimals of existing values or observing a feature in 10, 100, or 100000 more galaxies or stars, as Kelvin and Michelson clearly believed), they cannot just passively sit back and uncritically repeat the previous (observational or theoretical) methods/tools on new data. Today there is a wealth of raw telescope images ready (mostly for free) at the finger tips of anyone who is interested with a fast enough internet connection to download them. The only thing lacking is new ways to analyze this data and dig out the treasure that is lying hidden in them to existing methods and techniques. @quotation @cindex Jaynes E. T. New data that we insist on analyzing in terms of old ideas (that is, old models which are not questioned) cannot lead us out of the old ideas. However many data we record and analyze, we may just keep repeating the same old errors, missing the same crucially important things that the experiment was competent to find. @author Jaynes, Probability theory, the logic of science. Cambridge U. Press (2003). @end quotation @node Your rights, Logo of Gnuastro, Science and its tools, Introduction @section Your rights @cindex GNU Texinfo The paragraphs below, in this section, belong to the GNU Texinfo@footnote{Texinfo is the GNU documentation system. It is used to create this book in all the various formats.} manual and are not written by us! The name ``Texinfo'' is just changed to ``GNU Astronomy Utilities'' or ``Gnuastro'' because they are released under the same licenses and it is beautifully written to inform you of your rights. @cindex Free software @cindex Copyright @cindex Public domain GNU Astronomy Utilities is ``free software''; this means that everyone is free to use it and free to redistribute it on certain conditions. Gnuastro is not in the public domain; it is copyrighted and there are restrictions on its distribution, but these restrictions are designed to permit everything that a good cooperating citizen would want to do. What is not allowed is to try to prevent others from further sharing any version of Gnuastro that they might get from you. Specifically, we want to make sure that you have the right to give away copies of the programs that relate to Gnuastro, that you receive the source code or else can get it if you want it, that you can change these programs or use pieces of them in new free programs, and that you know you can do these things. To make sure that everyone has such rights, we have to forbid you to deprive anyone else of these rights. For example, if you distribute copies of the Gnuastro related programs, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. Also, for our own protection, we must make certain that everyone finds out that there is no warranty for the programs that relate to Gnuastro. If these programs are modified by someone else and passed on, we want their recipients to know that what they have is not what we distributed, so that any problems introduced by others will not reflect on our reputation. @cindex GNU General Public License (GPL) @cindex GNU Free Documentation License The full text of the licenses for the Gnuastro book and software can be respectively found in @ref{GNU General Public License}@footnote{Also available in @url{http://www.gnu.org/copyleft/gpl.html}} and @ref{GNU Free Doc License}@footnote{Also available in @url{http://www.gnu.org/copyleft/fdl.html}}. @node Logo of Gnuastro, Naming convention, Your rights, Introduction @section Logo of Gnuastro Gnuastro's logo is an abstract image of a @url{https://en.wikipedia.org/wiki/Barred_spiral_galaxy,barred spiral galaxy}. The galaxy is vertically cut in half: on the left side, the beauty of a contiguous galaxy image is visible. But on the right, the image gets pixelated, and we only see the parts that are within the pixels. The pixels that are more near to the center of the galaxy (which is brighter) are also larger. But as we follow the spiral arms (and get more distant from the center), the pixels get smaller (signifying less signal). This sharp distinction between the contiguous and pixelated view of the galaxy signifies the main struggle in science: in the ``real'' world, objects are not pixelated or discrete and have no noise. However, when we observe nature, we are confined and constrained by the resolution of our data collection (CCD imager in this case). On the other hand, we read English text from the left and progress towards the right. This defines the positioning of the ``real'' and observed halves of the galaxy: the no-noised and contiguous half (on the left) passes through our observing tools and becomes pixelated and noisy half (on the right). It is the job of scientific software like Gnuastro to help interpret the underlying mechanisms of the ``real'' universe from the pixelated and noisy data. Gnuastro's logo was designed by Marjan Akbari. The concept behind it was created after several design iterations with Mohammad Akhlaghi. @node Naming convention, Version numbering, Logo of Gnuastro, Introduction @section Naming convention @cindex Names, programs @cindex Program names Gnuastro is a package of independent programs and a collection of libraries, here we are mainly concerned with the programs. Each program has an official name which consists of one or two words, describing what they do. The latter are printed with no space, for example, NoiseChisel or Crop. On the command-line, you can run them with their executable names which start with an @file{ast} and might be an abbreviation of the official name, for example, @file{astnoisechisel} or @file{astcrop}, see @ref{Executable names}. @pindex ProgramName @pindex @file{astprogname} We will use ``ProgramName'' for a generic official program name and @file{astprogname} for a generic executable name. In this book, the programs are classified based on what they do and thoroughly explained. An alphabetical list of the programs that are installed on your system with this installation are given in @ref{Gnuastro programs list}. That list also contains the executable names and version numbers along with a one line description. @node Version numbering, New to GNU/Linux?, Naming convention, Introduction @section Version numbering @cindex Version number @cindex Number, version @cindex Major version number @cindex Minor version number @cindex Mailing list: info-gnuastro Gnuastro can have two formats of version numbers, for official and unofficial releases. Official Gnuastro releases are announced on the @command{info-gnuastro} mailing list, they have a version control tag in Gnuastro's development history, and their version numbers are formatted like ``@file{A.B}''. @file{A} is a major version number, marking a significant planned achievement (for example, see @ref{GNU Astronomy Utilities 1.0}), while @file{B} is a minor version number, see below for more on the distinction. Note that the numbers are not decimals, so version 2.34 is much more recent than version 2.5, which is not equal to 2.50. Gnuastro also allows a unique version number for unofficial releases. Unofficial releases can mark any point in Gnuastro's development history. This is done to allow astronomers to easily use any point in the version controlled history for their data-analysis and research publication. See @ref{Version controlled source} for a complete introduction. This section is not just for developers and is intended to straightforward and easy to read, so please have a look if you are interested in the cutting-edge. This unofficial version number is a meaningful and easy to read string of characters, unique to that particular point of history. With this feature, users can easily stay up to date with the most recent bug fixes and additions that are committed between official releases. The unofficial version number is formatted like: @file{A.B.C-D}. @file{A} and @file{B} are the most recent official version number. @file{C} is the number of commits that have been made after version @file{A.B}. @file{D} is the first 4 or 5 characters of the commit hash number@footnote{Each point in Gnuastro's history is uniquely identified with a 40 character long hash which is created from its contents and previous history for example: @code{5b17501d8f29ba3cd610673261e6e2229c846d35}. So the string @file{D} in the version for this commit could be @file{5b17}, or @file{5b175}.}. Therefore, the unofficial version number `@code{3.92.8-29c8}', corresponds to the 8th commit after the official version @code{3.92} and its commit hash begins with @code{29c8}. The unofficial version number is sort-able (unlike the raw hash) and as shown above is descriptive of the state of the unofficial release. Of course an official release is preferred for publication (since its tarballs are easily available and it has gone through more tests, making it more stable), so if an official release is announced prior to your publication's final review, please consider updating to the official release. The major version number is set by a major goal which is defined by the developers and user community before hand, for example, see @ref{GNU Astronomy Utilities 1.0}. The incremental work done in minor releases are commonly small steps in achieving the major goal. Therefore, there is no limit on the number of minor releases and the difference between the (hypothetical) versions 2.927 and 3.0 can be a small (negligible to the user) improvement that finalizes the defined goals. @menu * GNU Astronomy Utilities 1.0:: Plans for version 1.0 release @end menu @node GNU Astronomy Utilities 1.0, , Version numbering, Version numbering @subsection GNU Astronomy Utilities 1.0 @cindex Gnuastro major version number Currently (prior to Gnuastro 1.0), the aim of Gnuastro is to have a complete system for data manipulation and analysis at least similar to IRAF@footnote{@url{http://iraf.noao.edu/}}. So an astronomer can take all the standard data analysis steps (starting from raw data to the final reduced product and standard post-reduction tools) with the various programs in Gnuastro. @cindex Shell script The maintainers of each camera or detector on a telescope can provide a completely transparent shell script or Makefile to the observer for data analysis. This script can set configuration files for all the required programs to work with that particular camera. The script can then run the proper programs in the proper sequence. The user/observer can easily follow the standard shell script to understand (and modify) each step and the parameters used easily. Bash (or other modern GNU/Linux shell scripts) is powerful and made for this gluing job. This will simultaneously improve performance and transparency. Shell scripting (or Makefiles) are also basic constructs that are easy to learn and readily available as part of the Unix-like operating systems. If there is no program to do a desired step, Gnuastro's libraries can be used to build specific programs. The main factor is that all observatories or projects can freely contribute to Gnuastro and all simultaneously benefit from it (since it does not belong to any particular one of them), much like how for-profit organizations (for example, RedHat, or Intel and many others) are major contributors to free and open source software for their shared benefit. Gnuastro's copyright has been fully awarded to GNU, so it does not belong to any particular astronomer or astronomical facility or project. @node New to GNU/Linux?, Report a bug, Version numbering, Introduction @section New to GNU/Linux? Some astronomers initially install and use a GNU/Linux operating system because their necessary tools can only be installed in this environment. However, the transition is not necessarily easy. To encourage you in investing the patience and time to make this transition, and actually enjoy it, we will first start with a basic introduction to GNU/Linux operating systems. Afterwards, in @ref{Command-line interface} we will discuss the wonderful benefits of the command-line interface, how it beautifully complements the graphic user interface, and why it is worth the (apparently steep) learning curve. Finally a complete chapter (@ref{Tutorials}) is devoted to real world scenarios of using Gnuastro (on the command-line). Therefore if you do not yet feel comfortable with the command-line we strongly recommend going through that chapter after finishing this section. You might have already noticed that we are not using the name ``Linux'', but ``GNU/Linux''. Please take the time to have a look at the following essays and FAQs for a complete understanding of this very important distinction. @itemize @item @url{https://gnu.org/philosophy} @item @url{https://www.gnu.org/gnu/the-gnu-project.html} @item @url{https://www.gnu.org/gnu/gnu-users-never-heard-of-gnu.html} @item @url{https://www.gnu.org/gnu/linux-and-gnu.html} @item @url{https://www.gnu.org/gnu/why-gnu-linux.html} @item @url{https://www.gnu.org/gnu/gnu-linux-faq.html} @item Recorded talk: @url{https://peertube.stream/w/ddeSSm33R1eFWKJVqpcthN} (first 20 min is about the history of Unix-like operating systems). @end itemize @cindex Linux @cindex GNU/Linux @cindex GNU C library @cindex GCC: GNU Compiler Collection @cindex GNU Compiler Collection (GCC) In short, the Linux kernel@footnote{In Unix-like operating systems, the kernel connects software and hardware worlds.} is built using the GNU C library (glibc) and GNU compiler collection (gcc). The Linux kernel software alone is just a means for other software to access the hardware resources, it is useless alone! A normal astronomer (or scientist) will never interact with the kernel directly! For example, the command-line environment that you interact with is usually GNU Bash. It is GNU Bash that then talks to kernel. To better clarify, let's use this analogy inspired from one of the links above@footnote{https://www.gnu.org/gnu/gnu-users-never-heard-of-gnu.html}: saying that you are ``running Linux'' is like saying you are ``driving your engine''. The car's engine is the main source of power in the car, no one doubts that. But you do not ``drive'' the engine, you drive the ``car''. The engine alone is useless for transportation without the radiator, battery, transmission, wheels, chassis, seats, wind-shield, etc. @cindex Window Subsystem for Linux To have an operating system, you need lower-level tools (to build the kernel), and higher-level (to use it) software packages. For the Linux kernel, both the lower-level and higher-level tools are GNU. In other words,``the whole system is basically GNU with Linux loaded''. You can replace the Linux kernel and still have the GNU shell and higher-level utilities. For example, using the ``Windows Subsystem for Linux'', you can use almost all GNU tools without the original Linux kernel, but using the host Windows operating system, as in @url{https://ubuntu.com/wsl}. Alternatively, you can build a fully functional GNU-based working environment on a macOS or BSD-based operating system (using the host's kernel and C compiler), for example, through projects like Maneage, see Akhlaghi et al. @url{https://arxiv.org/abs/2006.03018,2021}, in particular Appendix C with all the GNU software tools that is exactly reproducible on a macOS also. Therefore to acknowledge GNU's instrumental role in the creation and usage of the Linux kernel and the operating systems that use it, we should call these operating systems ``GNU/Linux''. @menu * Command-line interface:: Introduction to the command-line @end menu @node Command-line interface, , New to GNU/Linux?, New to GNU/Linux? @subsection Command-line interface @cindex Shell @cindex Graphic user interface @cindex Command-line user interface @cindex GUI: graphic user interface @cindex CLI: command-line user interface One aspect of Gnuastro that might be a little troubling to new GNU/Linux users is that (at least for the time being) it only has a command-line user interface (CLI). This might be contrary to the mostly graphical user interface (GUI) experience with proprietary operating systems. Since the various actions available are not always on the screen, the command-line interface can be complicated, intimidating, and frustrating for a first-time user. This is understandable and also experienced by anyone who started using the computer (from childhood) in a graphical user interface (this includes most of Gnuastro's authors). Here we hope to convince you of the unique benefits of this interface which can greatly enhance your productivity while complementing your GUI experience. @cindex GNOME 3 Through GNOME 3@footnote{@url{http://www.gnome.org/}}, most GNU/Linux based operating systems now have an advanced and useful GUI. Since the GUI was created long after the command-line, some wrongly consider the command-line to be obsolete. Both interfaces are useful for different tasks. For example, you cannot view an image, video, PDF document or web page on the command-line. On the other hand you cannot reproduce your results easily in the GUI. Therefore they should not be regarded as rivals but as complementary user interfaces, here we will outline how the CLI can be useful in scientific programs. You can think of the GUI as a veneer over the CLI to facilitate a small subset of all the possible CLI operations. Each click you do on the GUI, can be thought of as internally running a different CLI command. So asymptotically (if a good designer can design a GUI which is able to show you all the possibilities to click on) the GUI is only as powerful as the command-line. In practice, such graphical designers are very hard to find for every program, so the GUI operations are always a subset of the internal CLI commands. For programs that are only made for the GUI, this results in not including lots of potentially useful operations. It also results in `interface design' to be a crucially important part of any GUI program. Scientists do not usually have enough resources to hire a graphical designer, also the complexity of the GUI code is far more than CLI code, which is harmful for a scientific software, see @ref{Science and its tools}. @cindex GUI: repeating operations For programs that have a GUI, one action on the GUI (moving and clicking a mouse, or tapping a touchscreen) might be more efficient and easier than its CLI counterpart (typing the program name and your desired configuration). However, if you have to repeat that same action more than once, the GUI will soon become frustrating and prone to errors. Unless the designers of a particular program decided to design such a system for a particular GUI action, there is no general way to run any possible series of actions automatically on the GUI. @cindex GNU Bash @cindex Reproducible results @cindex CLI: repeating operations On the command-line, you can run any series of actions which can come from various CLI capable programs you have decided yourself in any possible permutation with one command@footnote{By writing a shell script and running it, for example, see the tutorials in @ref{Tutorials}.}. This allows for much more creativity and exact reproducibility that is not possible to a GUI user. For technical and scientific operations, where the same operation (using various programs) has to be done on a large set of data files, this is crucially important. It also allows exact reproducibility which is a foundation principle for scientific results. The most common CLI (which is also known as a shell) in GNU/Linux is GNU Bash, we strongly encourage you to put aside several hours and go through this beautifully explained web page: @url{https://flossmanuals.net/command-line/}. You do not need to read or even fully understand the whole thing, only a general knowledge of the first few chapters are enough to get you going. Since the operations in the GUI are limited and they are visible, reading a manual is not that important in the GUI (most programs do not even have any!). However, to give you the creative power explained above, with a CLI program, it is best if you first read the manual of any program you are using. You do not need to memorize any details, only an understanding of the generalities is needed. Once you start working, there are more easier ways to remember a particular option or operation detail, see @ref{Getting help}. @cindex GNU Emacs @cindex Virtual console To experience the command-line in its full glory and not in the GUI terminal emulator, press the following keys together: @key{CTRL+ALT+F4}@footnote{Instead of @key{F4}, you can use any of the keys from @key{F1} to @key{F6} for different virtual consoles depending on your GNU/Linux distribution, try them all out. You can also run a separate GUI from within this console if you want to.} to access the virtual console. To return back to your GUI, press the same keys above replacing @key{F4} with @key{F7} (or @key{F1}, or @key{F2}, depending on your GNU/Linux distribution). In the virtual console, the GUI, with all its distracting colors and information, is gone. Enabling you to focus entirely on your actual work. @cindex Resource heavy operations For operations that use a lot of your system's resources (processing a large number of large astronomical images for example), the virtual console is the place to run them. This is because the GUI is not competing with your research work for your system's RAM and CPU. Since the virtual consoles are completely independent, you can even log out of your GUI environment to give even more of your hardware resources to the programs you are running and thus reduce the operating time. @cindex Secure shell @cindex SSH @cindex Remote operation Since it uses far less system resources, the CLI is also convenient for remote access to your computer. Using secure shell (SSH) you can log in securely to your system (similar to the virtual console) from anywhere even if the connection speeds are low. There are apps for smart phones and tablets which allow you to do this. @node Report a bug, Suggest new feature, New to GNU/Linux?, Introduction @section Report a bug @cindex Bug @cindex Wrong output @cindex Software bug @cindex Output, wrong @cindex Wrong results @cindex Results, wrong @cindex Halted program @cindex Program crashing @cindex Inconsistent results According to Wikipedia ``a software bug is an error, flaw, failure, or fault in a computer program or system that causes it to produce an incorrect or unexpected result, or to behave in unintended ways''. So when you see that a program is crashing, not reading your input correctly, giving the wrong results, or not writing your output correctly, you have found a bug. In such cases, it is best if you report the bug to the developers. The programs will also inform you if known impossible situations occur (which are caused by something unexpected) and will ask the users to report the bug issue. @cindex Bug reporting Prior to actually filing a bug report, it is best to search previous reports. The issue might have already been found and even solved. The best place to check if your bug has already been discussed is the bugs tracker on @ref{Gnuastro project webpage} at @url{https://savannah.gnu.org/bugs/?group=gnuastro}. In the top search fields (under ``Display Criteria'') set the ``Open/Closed'' drop-down menu to ``Any'' and choose the respective program or general category of the bug in ``Category'' and click the ``Apply'' button. The results colored green have already been solved and the status of those colored in red is shown in the table. @cindex Version control Recently corrected bugs are probably not yet publicly released because they are scheduled for the next Gnuastro stable release. If the bug is solved but not yet released and it is an urgent issue for you, you can get the version controlled source and compile that, see @ref{Version controlled source}. To solve the issue as readily as possible, please follow the following to guidelines in your bug report. The @url{http://www.chiark.greenend.org.uk/~sgtatham/bugs.html, How to Report Bugs Effectively} and @url{http://catb.org/~esr/faqs/smart-questions.html, How To Ask Questions The Smart Way} essays also provide some good generic advice for all software (do not contact their authors for Gnuastro's problems). Mastering the art of giving good bug reports (like asking good questions) can greatly enhance your experience with any free and open source software. So investing the time to read through these essays will greatly reduce your frustration after you see something does not work the way you feel it is supposed to for a large range of software, not just Gnuastro. @table @strong @item Be descriptive Please provide as many details as possible and be very descriptive. Explain what you expected and what the output was: it might be that your expectation was wrong. Also please clearly state which sections of the Gnuastro book (this book), or other references you have studied to understand the problem. This can be useful in correcting the book (adding links to likely places where users will check). But more importantly, it will be encouraging for the developers, since you are showing how serious you are about the problem and that you have actually put some thought into it. ``To be able to ask a question clearly is two-thirds of the way to getting it answered.'' -- John Ruskin (1819-1900). @item Individual and independent bug reports If you have found multiple bugs, please send them as separate (and independent) bugs (as much as possible). This will significantly help us in managing and resolving them sooner. @cindex Reproducible bug reports @item Reproducible bug reports If we cannot exactly reproduce your bug, then it is very hard to resolve it. So please send us a Minimal working example@footnote{@url{http://en.wikipedia.org/wiki/Minimal_Working_Example}} along with the description. For example, in running a program, please send us the full command-line text and the output with the @option{-P} option, see @ref{Operating mode options}. If it is caused only for a certain input, also send us that input file. In case the input FITS is large, please use Crop to only crop the problematic section and make it as small as possible so it can easily be uploaded and downloaded and not waste the archive's storage, see @ref{Crop}. @end table @noindent There are generally two ways to inform us of bugs: @itemize @cindex Mailing list archives @cindex Mailing list: bug-gnuastro @cindex @code{bug-gnuastro@@gnu.org} @item Send a mail to @code{bug-gnuastro@@gnu.org}. Any mail you send to this address will be distributed through the bug-gnuastro mailing list@footnote{@url{https://lists.gnu.org/mailman/listinfo/bug-gnuastro}}. This is the simplest way to send us bug reports. The developers will then register the bug into the project web page (next choice) for you. @cindex Gnuastro project page @cindex Support request manager @cindex Submit new tracker item @cindex Anonymous bug submission @item Use the Gnuastro project web page at @url{https://savannah.gnu.org/projects/gnuastro/}: There are two ways to get to the submission page as listed below. Fill in the form as described below and submit it (see @ref{Gnuastro project webpage} for more on the project web page). @itemize @item Using the top horizontal menu items, immediately under the top page title. Hovering your mouse on ``Support'' will open a drop-down list. Select ``Submit new''. Also if you have an account in Savannah, you can choose ``Bugs'' in the menu items and then select ``Submit new''. @item In the main body of the page, under the ``Communication tools'' section, click on ``Submit new item''. @end itemize @end itemize @cindex Tracker @cindex Bug tracker @cindex Task tracker @cindex Viewing trackers Once the items have been registered in the mailing list or web page, the developers will add it to either the ``Bug Tracker'' or ``Task Manager'' trackers of the Gnuastro project web page. These two trackers can only be edited by the Gnuastro project developers, but they can be browsed by anyone, so you can follow the progress on your bug. You are most welcome to join us in developing Gnuastro and fixing the bug you have found maybe a good starting point. Gnuastro is designed to be easy for anyone to develop (see @ref{Science and its tools}) and there is a full chapter devoted to developing it: @ref{Developing}. @cartouche @noindent @strong{Savannah's Markup:} When posting to Savannah, it helps to have the code displayed in mono-space font and a different background, you may also want to make a list of items or make some words bold. For features like these, you should use Savannah's ``Markup'' guide at @url{https://savannah.gnu.org/markup-test.php}. You can access this page by clicking on the ``Full Markup'' link that is just beside the ``Preview'' button, near the box that you write your comments. As you see there, for example when you want to high-light code, you should put it within a ``+verbatim+'' and ``-verbatim-'' environment like below: @example +verbatim+ astarithmetic image.fits image_arith.fits -h1 isblank nan where -verbatim- @end example @noindent Unfortunately, Savannah doesn't have a way to edit submitted comments. Therefore be sure to press the ``Preview'' button and check your report's final format before the final submission. @end cartouche @node Suggest new feature, Announcements, Report a bug, Introduction @section Suggest new feature @cindex Feature requests @cindex Additions to Gnuastro We would always be happy to hear of suggested new features. For every program, there are already lists of features that we are planning to add. You can see the current list of plans from the Gnuastro project web page at @url{https://savannah.gnu.org/projects/gnuastro/} and following @clicksequence{``Tasks''@click{}``Browse''} on the horizontal menu at the top of the page immediately under the title, see @ref{Gnuastro project webpage}. If you want to request a feature to an existing program, click on the ``Display Criteria'' above the list and under ``Category'', choose that particular program. Under ``Category'' you can also see the existing suggestions for new programs or other cases like installation, documentation or libraries. Also, be sure to set the ``Open/Closed'' value to ``Any''. If the feature you want to suggest is not already listed in the task manager, then follow the steps that are fully described in @ref{Report a bug}. Please have in mind that the developers are all busy with their own astronomical research, and implementing existing ``task''s to add or resolve bugs. Gnuastro is a volunteer effort and none of the developers are paid for their hard work. So, although we will try our best, please do not expect for your suggested feature to be immediately included (for the next release of Gnuastro). The best person to apply the exciting new feature you have in mind is you, since you have the motivation and need. In fact, Gnuastro is designed for making it as easy as possible for you to hack into it (add new features, change existing ones and so on), see @ref{Science and its tools}. Please have a look at the chapter devoted to developing (@ref{Developing}) and start applying your desired feature. Once you have added it, you can use it for your own work and if you feel you want others to benefit from your work, you can request for it to become part of Gnuastro. You can then join the developers and start maintaining your own part of Gnuastro. If you choose to take this path of action please contact us beforehand (@ref{Report a bug}) so we can avoid possible duplicate activities and get interested people in contact. @cartouche @noindent @strong{Gnuastro is a collection of low level programs:} As described in @ref{Program design philosophy}, a founding principle of Gnuastro is that each library or program should be basic and low-level. High level jobs should be done by running the separate programs or using separate functions in succession through a shell script or calling the libraries by higher level functions, see the examples in @ref{Tutorials}. So when making the suggestions please consider how your desired job can best be broken into separate steps and modularized. @end cartouche @node Announcements, Conventions, Suggest new feature, Introduction @section Announcements @cindex Announcements @cindex Mailing list: info-gnuastro Gnuastro has a dedicated mailing list for making announcements (@code{info-gnuastro}). Anyone can subscribe to this mailing list. Anytime there is a new stable or test release, an email will be circulated there. The email contains a summary of the overall changes along with a detailed list (from the @file{NEWS} file). This mailing list is thus the best way to stay up to date with new releases, easily learn about the updated/new features, or dependencies (see @ref{Dependencies}). To subscribe to this list, please visit @url{https://lists.gnu.org/mailman/listinfo/info-gnuastro}. Traffic (number of mails per unit time) in this list is designed to be low: only a handful of mails per year. Previous announcements are available on @url{http://lists.gnu.org/archive/html/info-gnuastro/, its archive}. @node Conventions, Acknowledgments, Announcements, Introduction @section Conventions In this book we have the following conventions: @itemize @item All commands that are to be run on the shell (command-line) prompt as the user start with a @command{$}. In case they must be run as a superuser or system administrator, they will start with a single @command{#}. If the command is in a separate line and next line @code{is also in the code type face}, but does not have any of the @command{$} or @command{#} signs, then it is the output of the command after it is run. As a user, you do not need to type those lines. A line that starts with @command{##} is just a comment for explaining the command to a human reader and must not be typed. @item If the command becomes larger than the page width a @key{\} is inserted in the code. If you are typing the code by hand on the command-line, you do not need to use multiple lines or add the extra space characters, so you can omit them. If you want to copy and paste these examples (highly discouraged!) then the @key{\} should stay. The @key{\} character is a shell escape character which is used commonly to make characters which have special meaning for the shell, lose that special meaning (the shell will not treat them especially if there is a @key{\} behind them). When @key{\} is the last visible character in a line (the next character is a new-line character) the new-line character loses its meaning. Therefore, the shell sees it as a simple white-space character not the end of a command! This enables you to use multiple lines to write your commands. @end itemize This is not a convention, but a bi-product of the PDF building process of the manual: In the PDF version of this manual, a single quote (or apostrophe) character in the commands or codes is shown like this: @code{'}. Single quotes are sometimes necessary in combination with commands like @code{awk} or @code{sed}, or when using Column arithmetic in Gnuastro's own Table (see @ref{Column arithmetic}). Therefore when typing (recommended) or copy-pasting (not recommended) the commands that have a @code{'}, please correct it to the single-quote (or apostrophe) character, otherwise the command will fail. @node Acknowledgments, , Conventions, Introduction @section Acknowledgments Gnuastro would not have been possible without scholarships and grants from several funding institutions. We thus ask that if you used Gnuastro in any of your papers/reports, please add the proper citation and acknowledge the funding agencies/projects. For details of which papers to cite (may be different for different programs) and get the acknowledgment statement to include in your paper, please run the relevant programs with the common @option{--cite} option like the example commands below (for more on @option{--cite}, please see @ref{Operating mode options}). @example $ astnoisechisel --cite $ astmkcatalog --cite @end example Here, we will acknowledge all the institutions (and their grants) along with the people who helped make Gnuastro possible. The full list of Gnuastro authors is available at the start of this book and the @file{AUTHORS} file in the source code (both are generated automatically from the version controlled history). The plain text file @file{THANKS}, which is also distributed along with the source code, contains the list of people and institutions who played an indirect role in Gnuastro (not committed any code in the Gnuastro version controlled history). The Japanese Ministry of Education, Culture, Sports, Science, and Technology (MEXT) scholarship for Mohammad Akhlaghi's Masters and PhD degree in Tohoku University Astronomical Institute had an instrumental role in the long term learning and planning that made the idea of Gnuastro possible. The very critical view points of Professor Takashi Ichikawa (Mohammad's adviser) were also instrumental in the initial ideas and creation of Gnuastro. Afterwards, the European Research Council (ERC) advanced grant 339659-MUSICOS (Principal investigator: Roland Bacon) was vital in the growth and expansion of Gnuastro. Working with Roland at the Centre de Recherche Astrophysique de Lyon (CRAL), enabled a thorough re-write of the core functionality of all libraries and programs, turning Gnuastro into the large collection of generic programs and libraries it is today. At the Instituto de Astrofisica de Canarias (IAC, and in particular in collaboration with Johan Knapen and Ignacio Trujillo), Gnuastro matured and its user base significantly grew. Work on improving Gnuastro is now continuing primarily in the Centro de Estudios de F@'isica del Cosmos de Arag@'on (CEFCA), located in Teruel, Spain. @c To the developers: please keep this in the same order as the THANKS file @c (alphabetical, except for the names in the paragraph above). In general, we would like to gratefully thank the following people for their useful and constructive comments and suggestions (in alphabetical order by family name): Valentina Abril-melgarejo, Marjan Akbari, Carlos Allende Prieto, Hamed Altafi, Roland Bacon, Roberto Baena Gall@'e, Zahra Bagheri, Karl Berry, Faezeh Bidjarchian, Leindert Boogaard, Nicolas Bouch@'e, Stefan Br@"uns, Fernando Buitrago, Adrian Bunk, Rosa Calvi, Mark Calabretta Nushkia Chamba, Sergio Chueca Urzay, Tamara Civera Lorenzo, Benjamin Clement, Nima Dehdilani, Andr@'es Del Pino Molina, Antonio Diaz Diaz, Paola Dimauro, Alexey Dokuchaev, Pierre-Alain Duc, Alessandro Ederoclite, Elham Eftekhari, Paul Eggert, Sepideh Eskandarlou, S@'ilvia Farras, Juan Antonio Fernández Ontiveros, Gaspar Galaz, Andr@'es García-Serra Romero, Zohre Ghaffari, Th@'er@`ese Godefroy, Giulia Golini, Craig Gordon, Martin Guerrero Roncel, Madusha Gunawardhana, Bruno Haible, Stephen Hamer, Siyang He, Zahra Hosseini, Leslie Hunt, Takashi Ichikawa, Ra@'ul Infante Sainz, Brandon Invergo, Oryna Ivashtenko, Aur@'elien Jarno, Lee Kelvin, Brandon Kelly, Mohammad-Reza Khellat, Johan Knapen, Geoffry Krouchi, Martin Kuemmel, Teet Kuutma, Clotilde Laigle, Floriane Leclercq, Alan Lefor, Javier Licandro, Jeremy Lim, Alejandro Lumbreras Calle, Sebasti@'an Luna Valero, Alberto Madrigal, Guillaume Mahler, Juan Miro, Alireza Molaeinezhad, Javier Moldon, Juan Molina Tobar, Francesco Montanari, Raphael Morales, Carlos Morales Socorro, Sylvain Mottet, Dmitrii Oparin, Fran@,{c}ois Ochsenbein, Bertrand Pain, William Pence, Irene Pintos Castro, Mamta Pommier, Marcel Popescu, Bob Proulx, Joseph Putko, Samane Raji, Ignacio Ruiz Cejudo, Teymoor Saifollahi, Joanna Sakowska, Elham Saremi, Nafise Sedighi, Markus Schaney, Yahya Sefidbakht, Alejandro Serrano Borlaff, Zahra Sharbaf, David Shupe, Leigh Smith, Jenny Sorce, Manuel S@'anchez-Benavente, Lee Spitler, Richard Stallman, Michael Stein, Ole Streicher, Alfred M. Szmidt, Michel Tallon, Juan C. Tello, Vincenzo Testa, @'Eric Thi@'ebaut, Ignacio Trujillo, Peter Teuben, David Valls-Gabaud, Jes@'us Varela, Aaron Watkins, Richard Wilbur, Michael H.F. Wilkinson, Christopher Willmer, Xiuqin Wu, Sara Yousefi Taemeh, Johannes Zabl. The GNU French Translation Team is also managing the French version of the top Gnuastro web page which we highly appreciate. Finally, we should thank all the (sometimes anonymous) people in various online forums who patiently answered all our small (but important) technical questions. All work on Gnuastro has been voluntary, but the authors are most grateful to the following institutions (in chronological order) for hosting/supporting us in our research. Where necessary, these institutions have disclaimed any ownership of the parts of Gnuastro that were developed there, thus insuring the freedom of Gnuastro for the future (see @ref{Copyright assignment}). We highly appreciate their support for free software, and thus free science, and therefore a free society. @quotation Tohoku University Astronomical Institute, Sendai, Japan.@* University of Salento, Lecce, Italy.@* Centre de Recherche Astrophysique de Lyon (CRAL), Lyon, France.@* Instituto de Astrofisica de Canarias (IAC), Tenerife, Spain.@* Centro de Estudios de F@'isica del Cosmos de Arag@'on (CEFCA), Teruel, Spain.@* Google Summer of Code 2020, 2021 and 2022 @end quotation @node Tutorials, Installation, Introduction, Top @chapter Tutorials @cindex Tutorial @cindex Cookbook To help new users have a smooth and easy start with Gnuastro, in this chapter several thoroughly elaborated tutorials, or cookbooks, are provided. These tutorials demonstrate the capabilities of different Gnuastro programs and libraries, along with tips and guidelines for the best practices of using them in various realistic situations. We strongly recommend going through these tutorials to get a good feeling of how the programs are related (built in a modular design to be used together in a pipeline), very similar to the core Unix-based programs that they were modeled on. Therefore these tutorials will help in optimally using Gnuastro's programs (and generally, the Unix-like command-line environment) effectively for your research. The first three tutorials (@ref{General program usage tutorial} and @ref{Detecting large extended targets} and @ref{Building the extended PSF}) use real input datasets from some of the deep Hubble Space Telescope (HST) images, the Sloan Digital Sky Survey (SDSS) and the Javalambre Photometric Local Universe Survey (J-PLUS) respectively. Their aim is to demonstrate some real-world problems that many astronomers often face and how they can be solved with Gnuastro's programs. The fourth tutorial (@ref{Sufi simulates a detection}) focuses on simulating astronomical images, which is another critical aspect of any analysis! The ultimate aim of @ref{General program usage tutorial} is to detect galaxies in a deep HST image, measure their positions, magnitude and select those with the strongest colors. In the process, it takes many detours to introduce you to the useful capabilities of many of the programs. So please be patient in reading it. If you do not have much time and can only try one of the tutorials, we recommend this one. @cindex PSF @cindex Point spread function @ref{Detecting large extended targets} deals with a major problem in astronomy: effectively detecting the faint outer wings of bright (and large) nearby galaxies to extremely low surface brightness levels (roughly one quarter of the local noise level in the example discussed). Besides the interesting scientific questions in these low-surface brightness features, failure to properly detect them will bias the measurements of the background objects and the survey's noise estimates. This is an important issue, especially in wide surveys. Because bright/large galaxies and stars@footnote{Stars also have similarly large and extended wings due to the point spread function, see @ref{PSF}.}, cover a significant fraction of the survey area. @ref{Building the extended PSF} tackles an important problem in astronomy: how the extract the PSF of an image, to the largest possible extent, without assuming any functional form. In Gnuastro we have multiple installed scripts for this job. Their usage and logic behind best tuning them for the particular step, is fully described in this tutorial, on a real dataset. The tutorial concludes with subtracting that extended PSF from the science image; thus giving you a cleaner image (with no scattered light of the brighter stars) for your higher-level analysis. @ref{Sufi simulates a detection} has a fictional@footnote{The two historically motivated tutorials (@ref{Sufi simulates a detection} is not intended to be a historical reference (the historical facts of this fictional tutorial used Wikipedia as a reference).) This form of presenting a tutorial was influenced by the PGF/TikZ and Beamer manuals. They are both packages in @TeX{} and @LaTeX{}, the first is a high-level vector graphic programming environment, while with the second you can make presentation slides. On a similar topic, there are also some nice words of wisdom for Unix-like systems called @url{http://catb.org/esr/writings/unix-koans, Rootless Root}. These also have a similar style but they use a mythical figure named Master Foo. If you already have some experience in Unix-like systems, you will definitely find these Unix Koans entertaining/educative.} setting! Showing how Abd al-rahman Sufi (903 -- 986 A.D., the first recorded description of ``nebulous'' objects in the heavens is attributed to him) could have used some of Gnuastro's programs for a realistic simulation of his observations and see if his detection of nebulous objects was trust-able. Because all conditions are under control in a simulated/mock environment/dataset, mock datasets can be a valuable tool to inspect the limitations of your data analysis and processing. But they need to be as realistic as possible, so this tutorial is dedicated to this important step of an analysis (simulations). There are other tutorials also, on things that are commonly necessary in astronomical research: In @ref{Detecting lines and extracting spectra in 3D data}, we use MUSE cubes (an IFU dataset) to show how you can subtract the continuum, detect emission-line features, extract spectra and build pseudo narrow-band images. In @ref{Color channels in same pixel grid} we demonstrate how you can warp multiple images into a single pixel grid (often necessary with multi-wavelength data), and build a single color image. In @ref{Moire pattern in stacking and its correction} we show how you can avoid the unwanted Moir@'e pattern which happens when warping separate exposures to build a stacked/co-add deeper image. In @ref{Zero point of an image} we review the process of estimating the zero point of an image using a reference image or catalog. Finally, in @ref{Pointing pattern design} we show the process by which you can simulate a dither pattern to find the best observing strategy for your next exciting scientific project. In these tutorials, we have intentionally avoided too many cross references to make it more easy to read. For more information about a particular program, you can visit the section with the same name as the program in this book. Each program section in the subsequent chapters starts by explaining the general concepts behind what it does, for example, see @ref{Convolve}. If you only want practical information on running a program, for example, its options/configuration, input(s) and output(s), please consult the subsection titled ``Invoking ProgramName'', for example, see @ref{Invoking astnoisechisel}. For an explanation of the conventions we use in the example codes through the book, please see @ref{Conventions}. @menu * General program usage tutorial:: Tutorial on many programs in generic scenario. * Detecting large extended targets:: NoiseChisel for huge extended targets. * Building the extended PSF:: How to extract an extended PSF from science data. * Sufi simulates a detection:: Simulating a detection. * Detecting lines and extracting spectra in 3D data:: Extracting spectra and emission line properties. * Color images with full dynamic range:: Bright pixels with color, faint pixels in grayscale. * Zero point of an image:: Estimate the zero point of an image. * Pointing pattern design:: Optimizing the pointings of your observations. * Moire pattern in stacking and its correction:: How to avoid this grid-based artifact. * Clipping outliers:: How to avoid outliers in your measurements. @end menu @node General program usage tutorial, Detecting large extended targets, Tutorials, Tutorials @section General program usage tutorial @cindex Hubble Space Telescope (HST) @cindex Colors, broad-band photometry Measuring colors of astronomical objects in broad-band or narrow-band images is one of the most basic and common steps in astronomical analysis. Here, we will use Gnuastro's programs to get a physical scale (area at certain redshifts) of the field we are studying, detect objects in a Hubble Space Telescope (HST) image, measure their colors and identify the ones with the strongest colors, do a visual inspection of these objects and inspect spatial position in the image. After this tutorial, you can also try the @ref{Detecting large extended targets} tutorial which goes into a little more detail on detecting very low surface brightness signal. During the tutorial, we will take many detours to explain, and practically demonstrate, the many capabilities of Gnuastro's programs. In the end you will see that the things you learned during this tutorial are much more generic than this particular problem and can be used in solving a wide variety of problems involving the analysis of data (images or tables). So please do not rush, and go through the steps patiently to optimally master Gnuastro. @cindex XDF survey @cindex eXtreme Deep Field (XDF) survey In this tutorial, we will use the HST@url{https://archive.stsci.edu/prepds/xdf, eXtreme Deep Field} dataset. Like almost all astronomical surveys, this dataset is free for download and usable by the public. You will need the following tools in this tutorial: Gnuastro, SAO DS9 @footnote{See @ref{SAO DS9}, available at @url{http://ds9.si.edu/site/Home.html}}, GNU Wget@footnote{@url{https://www.gnu.org/software/wget}}, and AWK (most common implementation is GNU AWK@footnote{@url{https://www.gnu.org/software/gawk}}). This tutorial was first prepared for the ``Exploring the Ultra-Low Surface Brightness Universe'' workshop (November 2017) at the ISSI in Bern, Switzerland. It was further extended in the ``4th Indo-French Astronomy School'' (July 2018) organized by LIO, CRAL CNRS UMR5574, UCBL, and IUCAA in Lyon, France. We are very grateful to the organizers of these workshops and the attendees for the very fruitful discussions and suggestions that made this tutorial possible. @cartouche @noindent @strong{Write the example commands manually:} Try to type the example commands on your terminal manually and use the history feature of your command-line (by pressing the ``up'' button to retrieve previous commands). Do not simply copy and paste the commands shown here. This will help simulate future situations when you are processing your own datasets. @end cartouche @menu * Calling Gnuastro's programs:: Easy way to find Gnuastro's programs. * Accessing documentation:: Access to manual of programs you are running. * Setup and data download:: Setup this template and download datasets. * Dataset inspection and cropping:: Crop the flat region to use in next steps. * Angular coverage on the sky:: Measure the field size on the sky. * Cosmological coverage and visualizing tables:: Size in Mpc2, and plotting its change. * Building custom programs with the library:: Easy way to build new programs. * Option management and configuration files:: Dealing with options and configuring them. * Warping to a new pixel grid:: Transforming/warping the dataset. * NoiseChisel and Multi-Extension FITS files:: Running NoiseChisel and having multiple HDUs. * NoiseChisel optimization for detection:: Check NoiseChisel's operation and improve it. * NoiseChisel optimization for storage:: Dramatically decrease output's volume. * Segmentation and making a catalog:: Finding true peaks and creating a catalog. * Measuring the dataset limits:: One way to measure the ``depth'' of your data. * Working with catalogs estimating colors:: Estimating colors using the catalogs. * Column statistics color-magnitude diagram:: Visualizing column correlations. * Aperture photometry:: Doing photometry on a fixed aperture. * Matching catalogs:: Easily find corresponding rows from two catalogs. * Reddest clumps cutouts and parallelization:: Parallelization and selecting a subset of the data. * FITS images in a publication:: How to display FITS images in a PDF. * Marking objects for publication:: How to mark some objects over the image in a PDF. * Writing scripts to automate the steps:: Scripts will greatly help in re-doing things fast. * Citing and acknowledging Gnuastro:: How to cite and acknowledge Gnuastro in your papers. @end menu @node Calling Gnuastro's programs, Accessing documentation, General program usage tutorial, General program usage tutorial @subsection Calling Gnuastro's programs A handy feature of Gnuastro is that all program names start with @code{ast}. This will allow your command-line processor to easily list and auto-complete Gnuastro's programs for you. Try typing the following command (press @key{TAB} key when you see @code{<TAB>}) to see the list: @example $ ast<TAB><TAB> @end example @noindent Any program that starts with @code{ast} (including all Gnuastro programs) will be shown. By choosing the subsequent characters of your desired program and pressing @key{<TAB><TAB>} again, the list will narrow down and the program name will auto-complete once your input characters are unambiguous. In short, you often do not need to type the full name of the program you want to run. @node Accessing documentation, Setup and data download, Calling Gnuastro's programs, General program usage tutorial @subsection Accessing documentation Gnuastro contains a large number of programs and it is natural to forget the details of each program's options or inputs and outputs. Therefore, before starting the analysis steps of this tutorial, let's review how you can access this book to refresh your memory any time you want, without having to take your hands off the keyboard. When you install Gnuastro, this book is also installed on your system along with all the programs and libraries, so you do not need an internet connection to access/read it. Also, by accessing this book as described below, you can be sure that it corresponds to your installed version of Gnuastro. @cindex GNU Info GNU Info@footnote{GNU Info is already available on almost all Unix-like operating systems.} is the program in charge of displaying the manual on the command-line (for more, see @ref{Info}). To see this whole book on your command-line, please run the following command and press subsequent keys. Info has its own mini-environment, therefore we will show the keys that must be pressed in the mini-environment after a @code{->} sign. You can also ignore anything after the @code{#} sign in the middle of the line, they are only for your information. @example $ info gnuastro # Open the top of the manual. -> <SPACE> # All the book chapters. -> <SPACE> # Continue down: show sections. -> <SPACE> ... # Keep pressing space to go down. -> q # Quit Info, return to the command-line. @end example The thing that greatly simplifies navigation in Info is the links (regions with an underline). You can immediately go to the next link in the page with the @key{<TAB>} key and press @key{<ENTER>} on it to go into that part of the manual. Try the commands above again, but this time also use @key{<TAB>} to go to the links and press @key{<ENTER>} on them to go to the respective section of the book. Then follow a few more links and go deeper into the book. To return to the previous page, press @key{l} (small L). If you are searching for a specific phrase in the whole book (for example, an option name), press @key{s} and type your search phrase and end it with an @key{<ENTER>}. Finally, you can return to the command line and quit Info by pressing the @key{q} key. You do not need to start from the top of the manual every time. For example, to get to @ref{Invoking astnoisechisel}, run the following command. In general, all programs have such an ``Invoking ProgramName'' section in this book. These sections are specifically for the description of inputs, outputs and configuration options of each program. You can access them directly for each program by giving its executable name to Info. @example $ info astnoisechisel @end example The other sections do not have such shortcuts. To directly access them from the command-line, you need to tell Info to look into Gnuastro's manual, then look for the specific section (an unambiguous title is necessary). For example, if you only want to review/remember NoiseChisel's @ref{Detection options}), just run the following command. Note how case is irrelevant for Info when calling a title in this manner. @example $ info gnuastro "Detection options" @end example In general, Info is a powerful and convenient way to access this whole book with detailed information about the programs you are running. If you are not already familiar with it, please run the following command and just read along and do what it says to learn it. Do not stop until you feel sufficiently fluent in it. Please invest the half an hour's time necessary to start using Info comfortably. It will greatly improve your productivity and you will start reaping the rewards of this investment very soon. @example $ info info @end example As a good scientist you need to feel comfortable to play with the features/options and avoid (be critical to) using default values as much as possible. On the other hand, our human memory is limited, so it is important to be able to easily access any part of this book fast and remember the option names, what they do and their acceptable values. If you just want the option names and a short description, calling the program with the @option{--help} option might also be a good solution like the first example below. If you know a few characters of the option name, you can feed the printed output to @command{grep} like the second or third example commands. @example $ astnoisechisel --help $ astnoisechisel --help | grep quant $ astnoisechisel --help | grep check @end example @node Setup and data download, Dataset inspection and cropping, Accessing documentation, General program usage tutorial @subsection Setup and data download The first step in the analysis of the tutorial is to download the necessary input datasets. First, to keep things clean, let's create a @file{gnuastro-tutorial} directory and continue all future steps in it: @example $ mkdir gnuastro-tutorial $ cd gnuastro-tutorial @end example We will be using the near infra-red @url{http://www.stsci.edu/hst/wfc3, Wide Field Camera} dataset. If you already have them in another directory (for example, @file{XDFDIR}, with the same FITS file names), you can set the @file{download} directory to be a symbolic link to @file{XDFDIR} with a command like this: @example $ ln -s XDFDIR download @end example @noindent Otherwise, when the following images are not already present on your system, you can make a @file{download} directory and download them there. @example $ mkdir download $ cd download $ xdfurl=http://archive.stsci.edu/pub/hlsp/xdf $ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_f105w_v1_sci.fits $ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_f125w_v1_sci.fits $ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits $ cd .. @end example @noindent In this tutorial, we will just use these three filters. Later, you may need to download more filters. To do that, you can use the shell's @code{for} loop to download them all in series (one after the other@footnote{Note that you only have one port to the internet, so downloading in parallel will actually be slower than downloading in series.}) with one command like the one below for the WFC3 filters. Put this command instead of the three @code{wget} commands above. Recall that all the extra spaces, backslashes (@code{\}), and new lines can be ignored if you are typing on the lines on the terminal. @example $ for f in f105w f125w f140w f160w; do \ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_"$f"_v1_sci.fits; \ done @end example @node Dataset inspection and cropping, Angular coverage on the sky, Setup and data download, General program usage tutorial @subsection Dataset inspection and cropping First, let's visually inspect the datasets we downloaded in @ref{Setup and data download}. Let's take F160W image as an example. One of the most common programs for viewing FITS images is SAO DS9, which is usually called through the @command{ds9} command-line program, like the command below. If you do not already have DS9 on your computer and the command below fails, please see @ref{SAO DS9}. @example $ ds9 download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits @end example By default, DS9 open a relatively small window (for modern browsers) and its default scale and color bar make it very hard to see any structure in the image: everything will look black. Also, by default, it zooms into the center of the image and you need to scroll to zoom-out and see the whole thing. To avoid these problems, Gnuastro has the @command{astscript-fits-view} script: @example $ astscript-fits-view \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits @end example After running this command, you will see that the DS9 window fully covers the height of your monitor, it is showing the whole image, using a more clear color-map, and many more useful things. In fact, you see the DS9 command that is used in your terminal@footnote{When comparing DS9's command-line options to Gnuastro's, you will notice how SAO DS9 does not follow the GNU style of options where ``long'' and ``short'' options are preceded by @option{--} and @option{-} respectively (for example, @option{--width} and @option{-w}, see @ref{Options}).}. On GNU/Linux operating systems (like Ubuntu, and Fedora), you can also set your graphics user interface to use this script for opening FITS files when you click on them. For more, see the instructions in the checklist at the start of @ref{Invoking astscript-fits-view}. As you hover your mouse over the image, notice how the ``Value'' and positional fields on the top of the ds9 window get updated. The first thing you might notice is that when you hover the mouse over the regions with no data, they have a value of zero. The next thing might be that the dataset has a shallower and deeper component (see @ref{Quantifying measurement limits}). Recall that this is a combined/reduced image of many exposures, and the parts that have more exposures are deeper. In particular, the exposure time of the deep inner region is more than 4 times the exposure time of the outer (more shallower) parts. To simplify the analysis in this tutorial, we will only be working on the deep field, so let's crop it out of the full dataset. Fortunately the XDF survey web page (above) contains the vertices of the deep flat WFC3-IR field@footnote{@url{https://archive.stsci.edu/prepds/xdf/#dataproducts}}. With Gnuastro's Crop program, you can use those vertices to cutout this deep region from the larger image (to learn more about the Crop program see @ref{Crop}). But before that, to keep things organized, let's make a directory called @file{flat-ir} and keep the flat (single-depth) regions in that directory (with a `@file{xdf-}' prefix for a shorter and easier filename). @example $ mkdir flat-ir $ astcrop --mode=wcs -h0 --output=flat-ir/xdf-f105w.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f105w_v1_sci.fits $ astcrop --mode=wcs -h0 --output=flat-ir/xdf-f125w.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f125w_v1_sci.fits $ astcrop --mode=wcs -h0 --output=flat-ir/xdf-f160w.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits @end example @noindent Run the command below to have a look at the cropped images: @example $ astscript-fits-view flat-ir/*.fits @end example You only see the deep region now, does not the noise look much cleaner? An important result of this crop is that regions with no data now have a NaN (Not-a-Number, or a blank value) value. Any self-respecting statistical program will ignore NaN values, so they will not affect your outputs. For example, notice how changing the DS9 color bar will not affect the NaN pixels (their colors will not change). However, do you remember that in the downloaded files, such regions had a value of zero? That is a big problem! Because zero is a number, and is thus meaningful, especially when you later want to NoiseChisel to detect@footnote{As you will see below, unlike most other detection algorithms, NoiseChisel detects the objects from their faintest parts, it does not start with their high signal-to-noise ratio peaks. Since the Sky is already subtracted in many images and noise fluctuates around zero, zero is commonly higher than the initial threshold applied. Therefore keeping zero-valued pixels in this image will cause them to identified as part of the detections!} all the signal from the deep universe in this image. Generally, when you want to ignore some pixels in a dataset, and avoid higher-level ambiguities or complications, it is always best to give them blank values (not zero, or some other absurdly large or small number). Gnuastro has the Arithmetic program for such cases, and we will introduce it later in this tutorial. In the example above, the polygon vertices are in degrees, but you can also replace them with sexagesimal@footnote{@url{https://en.wikipedia.org/wiki/Sexagesimal}} coordinates (for example, using @code{03h32m44.9794} or @code{03:32:44.9794} instead of @code{53.187414}, the first RA, and @code{-27d46m44.9472} or @code{-27:46:44.9472} instead of @code{-27.779152}, the first Dec). To further simplify things, you can even define your polygon visually as a DS9 ``region'', save it as a ``region file'' and give that file to crop. But we need to continue, so if you are interested to learn more, see @ref{Crop}. Before closing this section, let's just take a look at the three cropping commands we ran above. The only thing varying in the three commands the filter name! Note how everything else is the same! In such cases, you should generally avoid repeating a command manually, it is prone to @emph{many} bugs, and as you see, it is very hard to read (did not you suddenly write a @code{7} as an @code{8}?). To simplify the command, and allow you to work on more filters, we can use the shell's @code{for} loop as shown below. Notice how the place where the filter names (@file{f105w}, @file{f125w} and @file{f160w}) are used above, have been replaced with @file{$f} (the shell variable that @code{for} will update in every loop) below. @example $ rm flat-ir/*.fits $ for f in f105w f125w f160w; do \ astcrop --mode=wcs -h0 --output=flat-ir/xdf-$f.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_"$f"_v1_sci.fits; \ done @end example @node Angular coverage on the sky, Cosmological coverage and visualizing tables, Dataset inspection and cropping, General program usage tutorial @subsection Angular coverage on the sky @cindex @code{CDELT} @cindex Coordinate scales @cindex Scales, coordinate The cropped images in @ref{Dataset inspection and cropping} are the deepest images we currently have of the sky. The first thing that comes to mind may be this: ``How large is this field on the sky?''. @cartouche @noindent @strong{More accurate method:} the steps mentioned in this section are primarily designed to help you get familiar with the FITS WCS standard and some shells scripting. The accuracy of this method will decrease as your image becomes large (on the scale of degrees). For an accurate method, see @ref{Area of non-blank pixels on sky}. @end cartouche @noindent You can get a fast and crude answer with Gnuastro's Fits program, using this command: @example $ astfits flat-ir/xdf-f160w.fits --skycoverage @end example It will print the sky coverage in two formats (all numbers are in units of degrees for this image): 1) the image's central RA and Dec and full width around that center, 2) the range of RA and Dec covered by this image. You can use these values in various online query systems. You can also use this option to automatically calculate the area covered by this image. With the @option{--quiet} option, the printed output of @option{--skycoverage} will not contain human-readable text, making it easier for automatic (computer) processing: @example $ astfits flat-ir/xdf-f160w.fits --skycoverage --quiet @end example The second row is the coverage range along RA and Dec (compare with the outputs before using @option{--quiet}). We can thus simply subtract the second from the first column and multiply it with the difference of the fourth and third columns to calculate the image area. We will also multiply each by 60 to have the area in arc-minutes squared. @example $ astfits flat-ir/xdf-f160w.fits --skycoverage --quiet \ | awk 'NR==2@{print ($2-$1)*60*($4-$3)*60@}' @end example The returned value is @mymath{9.06711} arcmin@mymath{^2}. @strong{However, this method ignores the fact that many of the image pixels are blank!} In other words, the image does cover this area, but there is no data in more than half of the pixels. So let's calculate the area coverage over-which we actually have data. The FITS world coordinate system (WCS) metadata standard contains the key to answering this question. Run the following command to see all the FITS keywords (metadata) for one of the images (almost identical with the other images because they are scaled to the same region of Sky): @example $ astfits flat-ir/xdf-f160w.fits -h1 @end example Look into the keywords grouped under the `@code{World Coordinate System (WCS)}' title. These keywords define how the image relates to the outside world. In particular, the @code{CDELT*} keywords (or @code{CDELT1} and @code{CDELT2} in this 2D image) contain the ``Coordinate DELTa'' (or change in coordinate units) with a change in one pixel. But what is the units of each ``world'' coordinate? The @code{CUNIT*} keywords (for ``Coordinate UNIT'') have the answer. In this case, both @code{CUNIT1} and @code{CUNIT1} have a value of @code{deg}, so both ``world'' coordinates are in units of degrees. We can thus conclude that the value of @code{CDELT*} is in units of degrees-per-pixel@footnote{With the FITS @code{CDELT} convention, rotation (@code{PC} or @code{CD} keywords) and scales (@code{CDELT}) are separated. In the FITS standard the @code{CDELT} keywords are optional. When @code{CDELT} keywords are not present, the @code{PC} matrix is assumed to contain @emph{both} the coordinate rotation and scales. Note that not all FITS writers use the @code{CDELT} convention. So you might not find the @code{CDELT} keywords in the WCS metadata of some FITS files. However, all Gnuastro programs (which use the default FITS keyword writing format of WCSLIB) write their output WCS with the @code{CDELT} convention, even if the input does not have it. If your dataset does not use the @code{CDELT} convention, you can feed it to any (simple) Gnuastro program (for example, Arithmetic) and the output will have the @code{CDELT} keyword. See Section 8 of the @url{https://fits.gsfc.nasa.gov/standard40/fits_standard40aa-le.pdf, FITS standard} for more}. With the commands below, we will use @code{CDELT} (along with the number of non-blank pixels) to find the answer of our initial question: ``how much of the sky does this image cover?''. The lines starting with @code{##} are just comments for you to read and understand each command. Do not type them on the terminal (no problem if you do, they will just not have any effect). The commands are intentionally repetitive in some places to better understand each step and also to demonstrate the beauty of command-line features like history, variables, pipes and loops (which you will commonly use as you become more proficient on the command-line). @cartouche @noindent @strong{Use shell history:} Do not forget to make effective use of your shell's history: you do not have to re-type previous command to add something to them (like the examples below). This is especially convenient when you just want to make a small change to your previous command. Press the ``up'' key on your keyboard (possibly multiple times) to see your previous command(s) and modify them accordingly. @end cartouche @cartouche @noindent @strong{Your locale does not use `.' as decimal separator:} on systems that do not use an English language environment, the dates, numbers, etc., can be printed in different formats (for example, `0.5' can be written as `0,5': with a comma). With the @code{LC_NUMERIC} line at the start of the script below, we are ensuring a unified format in the output of @command{seq}. For more, please see @ref{Numeric locale}. @end cartouche @example ## Make sure that the decimal separator is a point in any environment. $ export LC_NUMERIC=C ## See the general statistics of non-blank pixel values. $ aststatistics flat-ir/xdf-f160w.fits ## We only want the number of non-blank pixels (add '--number'). $ aststatistics flat-ir/xdf-f160w.fits --number ## Keep the result of the command above in the shell variable `n'. $ n=$(aststatistics flat-ir/xdf-f160w.fits --number) ## See what is stored the shell variable `n'. $ echo $n ## Show all the FITS keywords of this image. $ astfits flat-ir/xdf-f160w.fits -h1 ## The resolution (in degrees/pixel) is in the `CDELT' keywords. ## Only show lines that contain these characters, by feeding ## the output of the previous command to the `grep' program. $ astfits flat-ir/xdf-f160w.fits -h1 | grep CDELT ## Since the resolution of both dimensions is (approximately) equal, ## we will only read the value of one (CDELT1) with '--keyvalue'. $ astfits flat-ir/xdf-f160w.fits -h1 --keyvalue=CDELT1 ## We do not need the file name in the output (add '--quiet'). $ astfits flat-ir/xdf-f160w.fits -h1 --keyvalue=CDELT1 --quiet ## Save it as the shell variable `r'. $ r=$(astfits flat-ir/xdf-f160w.fits -h1 --keyvalue=CDELT1 --quiet) ## Print the values of `n' and `r'. $ echo $n $r ## Use the number of pixels (first number passed to AWK) and ## length of each pixel's edge (second number passed to AWK) ## to estimate the area of the field in arc-minutes squared. $ echo $n $r | awk '@{print $1 * ($2*60)^2@}' @end example The output of the last command (area of this field) is 4.03817 (or approximately 4.04) arc-minutes squared. Just for comparison, this is roughly 175 times smaller than the average moon's angular area (with a diameter of 30 arc-minutes or half a degree). Some FITS writers do not use the @code{CDELT} convention, making it hard to use the steps above. In such cases, you can extract the pixel scale with the @option{--pixelscale} option of Gnuastro's Fits program like the command below. Similar to the @option{--skycoverage} option above, you can also use the @option{--quiet} option to allow easy usage of the values in scripts. @example $ astfits flat-ir/xdf-f160w.fits --pixelscale @end example @cindex GNU AWK @cartouche @noindent @strong{AWK for table/value processing:} As you saw above AWK is a powerful and simple tool for text processing. You will see it often in shell scripts. GNU AWK (the most common implementation) comes with a free and wonderful @url{https://www.gnu.org/software/gawk/manual/, book} in the same format as this book which will allow you to master it nicely. Just like this manual, you can also access GNU AWK's manual on the command-line whenever necessary without taking your hands off the keyboard. Just run @code{info awk}. @end cartouche @node Cosmological coverage and visualizing tables, Building custom programs with the library, Angular coverage on the sky, General program usage tutorial @subsection Cosmological coverage and visualizing tables Having found the angular coverage of the dataset in @ref{Angular coverage on the sky}, we can now use Gnuastro to answer a more physically motivated question: ``How large is this area at different redshifts?''. To get a feeling of the tangential area that this field covers at redshift 2, you can use Gnuastro's CosmicCalcular program (@ref{CosmicCalculator}). In particular, you need the tangential distance covered by 1 arc-second as raw output. Combined with the field's area that was measured before, we can calculate the tangential distance in Mega Parsecs squared (@mymath{Mpc^2}). @example ## If your system language uses ',' (not '.') as decimal separator. $ export LC_NUMERIC=C ## Print general cosmological properties at redshift 2 (for example). $ astcosmiccal -z2 ## When given a "Specific calculation" option, CosmicCalculator ## will just print that particular calculation. To see all such ## calculations, add a `--help' token to the previous command ## (under the same title). Note that with `--help', no processing ## is done, so you can always simply append it to remember ## something without modifying the command you want to run. $ astcosmiccal -z2 --help ## Only print the "Tangential dist. covered by 1arcsec at z (kpc)". ## in units of kpc/arc-seconds. $ astcosmiccal -z2 --arcsectandist ## It is easier to use the short (single character) version of ## this option when typing (but this is hard to read, so use ## the long version in scripts or notes you plan to archive). $ astcosmiccal -z2 -s ## Short options can be merged (they are only a single character!) $ astcosmiccal -sz2 ## Convert this distance to kpc^2/arcmin^2 and save in `k'. $ k=$(astcosmiccal -sz2 | awk '@{print ($1*60)^2@}') ## Calculate the area of the dataset in arcmin^2. $ n=$(aststatistics flat-ir/xdf-f160w.fits --number) $ r=$(astfits flat-ir/xdf-f160w.fits -h1 --keyvalue=CDELT1 -q) $ a=$(echo $n $r | awk '@{print $1 * ($2*60)^2 @}') ## Multiply `k' and `a' and divide by 10^6 for value in Mpc^2. $ echo $k $a | awk '@{print $1 * $2 / 1e6@}' @end example @noindent At redshift 2, this field therefore covers approximately 1.07 @mymath{Mpc^2}. If you would like to see how this tangential area changes with redshift, you can use a shell loop like below. @example $ for z in 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0; do \ k=$(astcosmiccal -sz$z); \ echo $z $k $a | awk '@{print $1, ($2*60)^2 * $3 / 1e6@}'; \ done @end example @noindent Fortunately, the shell has a useful tool/program to print a sequence of numbers that is nicely called @code{seq} (short for ``sequence''). You can use it instead of typing all the different redshifts in the loop above. For example, the loop below will calculate and print the tangential coverage of this field across a larger range of redshifts (0.1 to 5) and with finer increments of 0.1. For more on the @code{LC_NUMERIC} command, see @ref{Numeric locale}. @example ## If your system language uses ',' (not '.') as decimal separator. $ export LC_NUMERIC=C ## The loop over the redshifts $ for z in $(seq 0.1 0.1 5); do \ k=$(astcosmiccal -z$z --arcsectandist); \ echo $z $k $a | awk '@{print $1, ($2*60)^2 * $3 / 1e6@}'; \ done @end example Have a look at the two printed columns. The first is the redshift, and the second is the area of this image at that redshift (in Mega Parsecs squared). @url{https://en.wikipedia.org/wiki/Redshift, Redshift} (@mymath{z}) is a measure of distance in galaxy evolution and cosmology: a higher redshift corresponds to larger distance. @cindex Turn over point (angular diameter distance) Now, have a look at the first few values. At @mymath{z=0.1} and @mymath{z=0.5}, this image covers @mymath{0.05 Mpc^2} and @mymath{0.57 Mpc^2} respectively. This increase of coverage with redshift is expected because a fixed angle will cover a larger tangential area at larger distances. However, as you come down the list (to higher redshifts) you will notice that this relation does not hold! The largest coverage is at @mymath{z=1.6}: at higher redshifts, the area decreases, and continues decreasing!!! In @mymath{\Lambda{}CDM} cosmology, this happens because of the finite speed of light and the expansion of the universe, see @url{https://en.wikipedia.org/wiki/Angular_diameter_distance#Angular_diameter_turnover_point, the Wikipedia page}. In case you have TOPCAT, you can visualize this as a plot (if you do not have TOPCAT, see @ref{TOPCAT}). To do so, first you need to save the output of the loop above into a FITS table by piping the output to Gnuastro's Table program and giving an output name: @example $ for z in $(seq 0.1 0.1 5); do \ k=$(astcosmiccal -z$z --arcsectandist); \ echo $z $k $a | awk '@{print $1, ($2*60)^2 * $3 / 1e6@}'; \ done | asttable --output=z-vs-tandist.fits @end example You can now use Gnuastro's @command{astscript-fits-view} to open this table in TOPCAT with the command below. Do you remember this script from @ref{Dataset inspection and cropping}? There, we used it to view a FITS image with DS9! This script will see if the first dataset in the image is a table or an image and will call TOPCAT or DS9 accordingly: making it a very convenient tool to inspect the contents of all types of FITS data. @example $ astscript-fits-view z-vs-tandist.fits @end example After TOPCAT opens, you will see the name of the table @file{z-vs-tandist.fits} in the left panel. On the top menu bar, select the ``Graphics'' menu, then select ``Plain plot'' to visualize the two columns printed above as a plot and get a better impression of the turn over point of the image cosmological coverage. @node Building custom programs with the library, Option management and configuration files, Cosmological coverage and visualizing tables, General program usage tutorial @subsection Building custom programs with the library In @ref{Cosmological coverage and visualizing tables}, we repeated a certain calculation/output of a program multiple times using the shell's @code{for} loop. This simple way of repeating a calculation is great when it is only necessary once. However, if you commonly need this calculation and possibly for a larger number of redshifts at higher precision, the command above can be slow. Please try it out by changing the sequence command in the previous section to `@code{seq 0.1 0.01 10}'. It will take about 11 seconds@footnote{To measure how much time the loop of @ref{Cosmological coverage and visualizing tables} takes on your system, you can use the @command{time} command. First put the whole loop (and pipe) into a plain-text file (to be loaded as a shell script) called @file{z-vs-tandist.sh}. Then run this command: @command{time -p bash z-vs-tandist.sh}. The relevant time (in seconds) is shown after @code{real}.}! This can be improved by @emph{hundreds} of times! This section will show you how. Generally, repeated calls to a generic program (like CosmicCalculator) are slow, because a generic program can have a lot of overhead on each call. To be generic and easy to operate, CosmicCalculator has to parse the command-line and all configuration files (see @ref{Option management and configuration files}) which contain human-readable characters and need a lot of pre-processing to be ready for processing by the computer. Afterwards, CosmicCalculator has to check the sanity of its inputs and check which of its many options you have asked for. All the this pre-processing takes as much time as the high-level calculation you are requesting, and it has to re-do all of these for every redshift in your loop. To greatly speed up the processing, you can directly access the core work-horse of CosmicCalculator without all that overhead by designing your custom program for this job. Using Gnuastro's library, you can write your own tiny program particularly designed for this exact calculation (and nothing else!). To do that, copy and paste the following C program in a file called @file{myprogram.c}. @example #include <math.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro/cosmology.h> int main(void) @{ double area=4.03817; /* Area of field (arcmin^2). */ double z, adist, tandist; /* Temporary variables. */ /* Constants from Plank 2018 (arXiv:1807.06209, Table 2) */ double H0=67.66, olambda=0.6889, omatter=0.3111, oradiation=0; /* Do the same thing for all redshifts (z) between 0.1 and 5. */ for(z=0.1; z<10; z+=0.01) @{ /* Calculate the angular diameter distance. */ adist=gal_cosmology_angular_distance(z, H0, olambda, omatter, oradiation); /* Calculate the tangential distance of one arcsecond. */ tandist = adist * 1000 * M_PI / 3600 / 180; /* Print the redshift and area. */ printf("%-5.2f %g\n", z, pow(tandist * 60,2) * area / 1e6); @} /* Tell the system that everything finished successfully. */ return EXIT_SUCCESS; @} @end example @noindent Then run the following command to compile your program and run it. @example $ astbuildprog myprogram.c @end example @noindent In the command above, you used Gnuastro's BuildProgram program. Its job is to simplify the compilation, linking and running of simple C programs that use Gnuastro's library (like this one). BuildProgram is designed to manage Gnuastro's dependencies, compile and link your custom program and then run it. Did you notice how your custom program created the table almost instantaneously? Technically, it only took about 0.03 seconds! Recall that the @code{for} loop of @ref{Cosmological coverage and visualizing tables} took more than 11 seconds (or @mymath{\sim367} times slower!). Please run the @command{ls} command to see a listing of the files in the current directory. You will notice that a new file called @file{myprogram} has been created. This is the compiled program that was created and run by the command above (its in binary machine code format, not human-readable any more). You can run it again to get the same results by executing it: @example $ ./myprogram @end example The efficiency of your custom @file{myprogram} compared to repeated calls to CosmicCalculator is because in the latter, the requested processing is comparable to the necessary overheads. For other programs that take large input datasets and do complicated processing on them, the overhead is usually negligible compared to the processing. In such cases, the libraries are only useful if you want a different/new processing compared to the functionalities in Gnuastro's existing programs. Gnuastro has a large library which is used extensively by all the programs. In other words, the library is like the skeleton of Gnuastro. For the full list of available functions classified by context, please see @ref{Gnuastro library}. Gnuastro's library and BuildProgram are created to make it easy for you to use these powerful features as you like. This gives you a high level of creativity, while also providing efficiency and robustness. Several other complete working examples (involving images and tables) of Gnuastro's libraries can be see in @ref{Library demo programs}. But for this tutorial, let's stop discussing the libraries here and get back to Gnuastro's already built programs (which do not need C programming). But before continuing, let's clean up the files we do not need any more: @example $ rm myprogram* z-vs-tandist* @end example @node Option management and configuration files, Warping to a new pixel grid, Building custom programs with the library, General program usage tutorial @subsection Option management and configuration files In the previous section (@ref{Cosmological coverage and visualizing tables}), when you ran CosmicCalculator, you only specified the redshfit with @option{-z2} option. You did not specify the cosmological parameters that are necessary for the calculations! Parameters like the Hubble constant (@mymath{H_0}) and the matter density. In spite of this, CosmicCalculator done its processing and printed results. None of Gnuastro's programs keep a default value internally within their code (they are all set by the user)! So where did the necessary cosmological parameters that are necessary for its calculations come from? What were the values to those parameters? In short, they come from a configuration file (see @ref{Configuration file precedence}), and the final used values can be checked/edited on the command-line. In this section we will review this important aspect of all the programs in Gnuastro. Configuration files are an important part of all Gnuastro's programs, especially the ones with a large number of options, so it is important to understand this part well. Once you get comfortable with configuration files, you can make good use of them in all Gnuastro programs (for example, NoiseChisel). For example, to do optimal detection on various datasets, you can have configuration files for different noise properties. The configuration of each program (besides its version) is vital for the reproducibility of your results, so it is important to manage them properly. As we saw above, the full list of the options in all Gnuastro programs can be seen with the @option{--help} option. Try calling it with CosmicCalculator as shown below. Note how options are grouped by context to make it easier to find your desired option. However, in each group, options are ordered alphabetically. @example $ astcosmiccal --help @end example After running the command above, please scroll to the line that you ran this command and read through the output (its the same format for all the programs). All options have a long format (starting with @code{--} and a multi-character name) and some have a short format (starting with @code{-} and a single character), for more see @ref{Options}. The options that expect a value, have an @key{=} sign after their long version. The format of their expected value is also shown as @code{FLT}, @code{INT} or @code{STR} for floating point numbers, integer numbers, and strings (filenames for example) respectively. You can see the values of all options that need one with the @option{--printparams} option (or its short format: @code{-P}). @option{--printparams} is common to all programs (see @ref{Common options}). You can see the default cosmological parameters, from the Plank collaboration @url{https://arxiv.org/abs/1807.06209,2020}, under the @code{# Input:} title: @example $ astcosmiccal -P # Input: H0 67.66 # Current expansion rate (Hubble constant). olambda 0.6889 # Current cosmological cst. dens. per crit. dens. omatter 0.3111 # Current matter density per critical density. oradiation 0 # Current radiation density per critical density. @end example Let's say you want to do the calculation in the previous section using @mymath{H_0=70} km/s/Mpc. To do this, just add @option{--H0=70} after the command above (while keeping the @option{-P}). In the output, you can see that the used Hubble constant has also changed. @example $ astcosmiccal -P --H0=70 @end example @noindent Afterwards, delete the @option{-P} and add a @option{-z2} to see the calculations with the new cosmology (or configuration). @example $ astcosmiccal --H0=70 -z2 @end example From the output of the @code{--help} option, note how the option for Hubble constant has both short (@code{-H}) and long (@code{--H0}) formats. One final note is that the equal (@key{=}) sign is not mandatory. In the short format, the value can stick to the actual option (the short option name is just one character after-all, thus easily identifiable) and in the long format, a white-space character is also enough. @example $ astcosmiccal -H70 -z2 $ astcosmiccal --H0 70 -z2 --arcsectandist @end example @noindent When an option does not need a value, and has a short format (like @option{--arcsectandist}), you can easily append it @emph{before} other short options. So the last command above can also be written as: @example $ astcosmiccal --H0 70 -sz2 @end example Let's assume that in one project, you want to only use rounded cosmological parameters (@mymath{H_0} of 70km/s/Mpc and matter density of 0.3). You should therefore run CosmicCalculator like this: @example $ astcosmiccal --H0=70 --olambda=0.7 --omatter=0.3 -z2 @end example But having to type these extra options every time you run CosmicCalculator will be prone to errors (typos in particular), frustrating and slow. Therefore in Gnuastro, you can put all the options and their values in a ``Configuration file'' and tell the programs to read the option values from there. Let's create a configuration file... With your favorite text editor, make a file named @file{my-cosmology.conf} (or @file{my-cosmology.txt}, the suffix does not matter for Gnuastro, but a more descriptive suffix like @file{.conf} is recommended for humans reading your code and seeing your files: this includes you, looking into your own project, in a couple of months that you have forgot the details!). Then put the following lines inside of the plain-text file. One space between the option value and name is enough, the values are just under each other to help in readability. Also note that you should only use @emph{long option names} in configuration files. @example H0 70 olambda 0.7 omatter 0.3 @end example @noindent You can now tell CosmicCalculator to read this file for option values immediately using the @option{--config} option as shown below. Do you see how the output of the following command corresponds to the option values in @file{my-cosmology.conf}, and is therefore identical to the previous command? @example $ astcosmiccal --config=my-cosmology.conf -z2 @end example But still, having to type @option{--config=my-cosmology.conf} every time is annoying, is not it? If you need this cosmology every time you are working in a specific directory, you can use Gnuastro's default configuration file names and avoid having to type it manually. The default configuration files (that are checked if they exist) must be placed in the hidden @file{.gnuastro} sub-directory (in the same directory you are running the program). Their file name (within @file{.gnuastro}) must also be the same as the program's executable name. So in the case of CosmicCalculator, the default configuration file in a given directory is @file{.gnuastro/astcosmiccal.conf}. Let's do this. We will first make a directory for our custom cosmology, then build a @file{.gnuastro} within it. Finally, we will copy the custom configuration file there: @example $ mkdir my-cosmology $ mkdir my-cosmology/.gnuastro $ mv my-cosmology.conf my-cosmology/.gnuastro/astcosmiccal.conf @end example Once you run CosmicCalculator within @file{my-cosmology} (as shown below), you will see how your custom cosmology has been implemented without having to type anything extra on the command-line. @example $ cd my-cosmology $ astcosmiccal -P # Your custom cosmology is printed. $ cd .. $ astcosmiccal -P # The default cosmology is printed. @end example To further simplify the process, you can use the @option{--setdirconf} option. If you are already in your desired working directory, calling this option with the others will automatically write the final values (along with descriptions) in @file{.gnuastro/astcosmiccal.conf}. For example, try the commands below: @example $ mkdir my-cosmology2 $ cd my-cosmology2 $ astcosmiccal -P $ astcosmiccal --H0 70 --olambda=0.7 --omatter=0.3 --setdirconf $ astcosmiccal -P $ cd .. @end example Gnuastro's programs also have default configuration files for a specific user (when run in any directory). This allows you to set a special behavior every time a program is run by a specific user. Only the directory and filename differ from the above, the rest of the process is similar to before. Finally, there are also system-wide configuration files that can be used to define the option values for all users on a system. See @ref{Configuration file precedence} for a more detailed discussion. We will stop the discussion on configuration files here, but you can always read about them in @ref{Configuration files}. Before continuing the tutorial, let's delete the two extra directories that we do not need any more: @example $ rm -rf my-cosmology* @end example @node Warping to a new pixel grid, NoiseChisel and Multi-Extension FITS files, Option management and configuration files, General program usage tutorial @subsection Warping to a new pixel grid We are now ready to start processing the deep HST images that were prepared in @ref{Dataset inspection and cropping}. One of the most important points while using several images for data processing is that those images must have the same pixel grid. The process of changing the pixel grid is named `warp'. Fortunately, Gnuastro has Warp program for warping the pixel grid (see @ref{Warp}). Warping to a different/matched pixel grid is commonly needed before higher-level analysis especially when you are using datasets from different instruments. The XDF datasets we are using here are already aligned to the same pixel grid. But let's have a look at some of Gnuastro's linear warping features here. For example, try rotating one of the images by 20 degrees with the first command below. With the second command, open the output and input to see how it is rotated. @example $ astwarp flat-ir/xdf-f160w.fits --rotate=20 $ astscript-fits-view flat-ir/xdf-f160w.fits xdf-f160w_rotated.fits @end example Warp can generally be used for many kinds of pixel grid manipulation (warping), not just rotations. For example, the outputs of the commands below will have larger pixels respectively (new resolution being one quarter the original resolution), get shifted by 2.8 (by sub-pixel), get a shear of 2, and be tilted (projected). Run each of them and open the output file to see the effect, they will become handy for you in the future. @example $ astwarp flat-ir/xdf-f160w.fits --scale=0.25 $ astwarp flat-ir/xdf-f160w.fits --translate=2.8 $ astwarp flat-ir/xdf-f160w.fits --shear=0.2 $ astwarp flat-ir/xdf-f160w.fits --project=0.001,0.0005 $ astscript-fits-view flat-ir/xdf-f160w.fits *.fits @end example @noindent If you need to do multiple warps, you can combine them in one call to Warp. For example, to first rotate the image, then scale it, run this command: @example $ astwarp flat-ir/xdf-f160w.fits --rotate=20 --scale=0.25 @end example If you have multiple warps, do them all in one command. Do not warp them in separate commands because the correlated noise will become too strong. As you see in the matrix that is printed when you run Warp, it merges all the warps into a single warping matrix (see @ref{Merging multiple warpings}) and simply applies that (mixes the pixel values) just once. However, if you run Warp multiple times, the pixels will be mixed multiple times, creating a strong artificial blur/smoothing, or stronger correlated noise. Recall that the merging of multiple warps is done through matrix multiplication, therefore order matters in the separate operations. At a lower level, through Warp's @option{--matrix} option, you can directly request your desired final warp and do not have to break it up into different warps like above (see @ref{Invoking astwarp}). Fortunately these datasets are already aligned to the same pixel grid, so you do not actually need the files that were just generated. You can safely delete them all with the following command. Here, you see why we put the processed outputs that we need later into a separate directory. In this way, the top directory can be used for temporary files for testing that you can simply delete with a generic command like below. @example $ rm *.fits @end example @node NoiseChisel and Multi-Extension FITS files, NoiseChisel optimization for detection, Warping to a new pixel grid, General program usage tutorial @subsection NoiseChisel and Multi-Extension FITS files In the previous sections, we completed a review of the basics of Gnuastro's programs. We are now ready to do some more serious analysis on the downloaded images: extract the pixels containing signal from the image, find sub-structure of the extracted signal, do measurements over the extracted objects and analyze them (finding certain objects of interest in the image). The first step is to separate the signal (galaxies or stars) from the background noise in the image. We will be using the results of @ref{Dataset inspection and cropping}, so be sure you already have them. Gnuastro has NoiseChisel for this job. But NoiseChisel's output is a multi-extension FITS file, therefore to better understand how to use NoiseChisel, let's take a look at multi-extension FITS files and how you can interact with them. In the FITS format, each extension contains a separate dataset (image in this case). You can get basic information about the extensions in a FITS file with Gnuastro's Fits program (see @ref{Fits}). To start with, let's run NoiseChisel without any options, then use Gnuastro's Fits program to inspect the number of extensions in this file. @example $ astnoisechisel flat-ir/xdf-f160w.fits $ astfits xdf-f160w_detected.fits @end example From the output list, we see that NoiseChisel's output contains 5 extensions. The zero-th (counting from zero, with name @code{NOISECHISEL-CONFIG}) is empty: it has value of @code{0} in the fourth column (which shows its size in pixels). Like NoiseChisel, in all of Gnuastro's programs, the first (or zero-th) extension of the output only contains meta-data: data about/describing the datasets within (all) the output's extensions. This is recommended by the FITS standard, see @ref{Fits} for more. In the case of Gnuastro's programs, this generic zero-th/meta-data extension (for the whole file) contains all the configuration options of the program that created the file. Metadata regarding how the analysis was done (or a dataset was created) is very important for higher-level analysis and reproducibility. Therefore, Let's first take a closer look at the @code{NOISECHISEL-CONFIG} extension. If you specify a special header in the FITS file, Gnuastro's Fits program will print the header keywords (metadata) of that extension. You can either specify the HDU/extension counter (starting from 0), or name. Therefore, the two commands below are identical for this file. We are usually tempted to use the first (shorter format), but when putting your commands into a script, please use the second format which is more human-friendly and understandable for readers of your code who may not know what is in the 0-th extension (this includes yourself in a few months!): @example $ astfits xdf-f160w_detected.fits -h0 $ astfits xdf-f160w_detected.fits -hNOISECHISEL-CONFIG @end example The first group of FITS header keywords you see (containing the @code{SIMPLE} and @code{BITPIX} keywords; before the first empty line) are standard keywords. They are required by the FITS standard and must be present in any FITS extension. The second group starts with the input file name (value to the @code{INPUT} keyword). The rest of the keywords you see afterwards have the same name as NoiseChisel's options, and the value used by NoiseChisel in this run is shown after the @code{=} sign. Finally, the last group (starting with @code{DATE}) contains the date and version information of Gnuastro and its dependencies that were used to generate this file. Besides the option values, these are also critical for future reproducibility of the result (you may update Gnuastro or its dependencies, and they may behave differently afterwards). The ``versions and date'' group of keywords are present in all Gnuastro's FITS extension outputs, for more see @ref{Output FITS files}. Note that if a keyword name is larger than 8 characters, it is preceded by a @code{HIERARCH} keyword and that all keyword names are in capital letters. These are all part of the FITS standard and originate from its history. But in short, both can be ignored! For example, with the commands below, let's see at first what the default values are, and then just check the value of @option{--detgrowquant} option (using the @option{-P} option described in @ref{Option management and configuration files}). @example $ astnoisechisle -P $ astnoisechisel -P | grep detgrowquant @end example To confirm that NoiseChisel used this value when we ran it above, let's use @code{grep} to extract the keyword line with @code{detgrowquant} from the metadata extension. However, as you saw above, keyword names in the header is in all caps. So we need to ask @code{grep} to ignore case with the @option{-i} option. @example $ astfits xdf-f160w_detected.fits -h0 | grep -i detgrowquant @end example In the output of the above command, you see @code{HIERARCH} at the start of the line. According to the FITS standard, @code{HIERARCH} is placed at the start of all keywords that have a name that is more than 8 characters long. Both the all-caps and the @code{HIERARCH} keyword can be annoying when you want to read/check the value. Therefore, the best solution is to use the @option{--keyvalue} option of Gnuastro's @command{astfits} program as shown below. With it, you do not have to worry about @code{HIERARCH} or the case of the name (FITS keyword names are not case-sensitive). @example $ astfits xdf-f160w_detected.fits -h0 --keyvalue=detgrowquant -q @end example @noindent The metadata (that is stored in the output) can later be used to exactly reproduce/understand your result, even if you have lost/forgot the command you used to create the file. This feature is present in all of Gnuastro's programs, not just NoiseChisel. The rest of the HDUs in NoiseChisel have data. So let's open them in a DS9 window and then describe each: @example $ astscript-fits-view xdf-f160w_detected.fits @end example A ``cube'' window opens along with DS9's main window. The buttons and horizontal scroll bar in this small new window can be used to navigate between the extensions. In this mode, all DS9's settings (for example, zoom or color-bar) will be identical between the extensions. Try zooming into one part and flipping through the extensions to see how the galaxies were detected along with the Sky and Sky standard deviation values for that region. Just have in mind that NoiseChisel's job is @emph{only} detection (separating signal from noise). We will do segmentation on this result later to find the individual galaxies/peaks over the detected pixels. The second extension of NoiseChisel's output (numbered 1, named @code{INPUT-NO-SKY}) is the Sky-subtracted input that you provided. The third (@code{DETECTIONS}) is NoiseChisel's main output which is a binary image with only two possible values for all pixels: 0 for noise and 1 for signal. Since it only has two values, to avoid taking too much space on your computer, its numeric datatype an unsigned 8-bit integer (or @code{uint8})@footnote{To learn more about numeric data types see @ref{Numeric data types}.}. The fourth and fifth (@code{SKY} and @code{SKY_STD}) extensions, have the Sky and its standard deviation values for the input on a tile grid and were calculated over the undetected regions (for more on the importance of the Sky value, see @ref{Sky value}). Each HDU/extension in a FITS file is an independent dataset (image or table) which you can delete from the FITS file, or copy/cut to another file. For example, with the command below, you can copy NoiseChisel's @code{DETECTIONS} HDU/extension to another file: @example $ astfits xdf-f160w_detected.fits --copy=DETECTIONS -odetections.fits @end example There are similar options to conveniently cut (@option{--cut}, copy, then remove from the input) or delete (@option{--remove}) HDUs from a FITS file also. See @ref{HDU information and manipulation} for more. @node NoiseChisel optimization for detection, NoiseChisel optimization for storage, NoiseChisel and Multi-Extension FITS files, General program usage tutorial @subsection NoiseChisel optimization for detection In @ref{NoiseChisel and Multi-Extension FITS files}, we ran NoiseChisel and reviewed NoiseChisel's output format. Now that you have a better feeling for multi-extension FITS files, let's optimize NoiseChisel for this particular dataset. One good way to see if you have missed any signal (small galaxies, or the wings of brighter galaxies) is to mask all the detected pixels and inspect the noise pixels. For this, you can use Gnuastro's Arithmetic program (in particular its @code{where} operator, see @ref{Arithmetic operators}). The command below will produce @file{mask-det.fits}. In it, all the pixels in the @code{INPUT-NO-SKY} extension that are flagged 1 in the @code{DETECTIONS} extension (dominated by signal, not noise) will be set to NaN. Since the various extensions are in the same file, for each dataset we need the file and extension name. To make the command easier to read/write/understand, let's use shell variables: `@code{in}' will be used for the Sky-subtracted input image and `@code{det}' will be used for the detection map. Recall that a shell variable's value can be retrieved by adding a @code{$} before its name, also note that the double quotations are necessary when we have white-space characters in a variable value (like this case). @example $ in="xdf-f160w_detected.fits -hINPUT-NO-SKY" $ det="xdf-f160w_detected.fits -hDETECTIONS" $ astarithmetic $in $det nan where --output=mask-det.fits @end example @noindent To invert the result (only keep the detected pixels), you can flip the detection map (from 0 to 1 and vice-versa) by adding a `@code{not}' after the second @code{$det}: @example $ astarithmetic $in $det not nan where --output=mask-sky.fits @end example @cindex Correlated noise @cindex Noise, correlated Look again at the @code{DETECTIONS} extension, in particular the long worm-like structure around @footnote{To find a particular coordiante easily in DS9, you can do this: Click on the ``Edit'' menu, and select ``Region''. Then click on any random part of the image to see a circle show up in that location (this is the ``region''). Double-click on the region and a ``Circle'' window will open. If you have celestial coordinates, keep the default ``fk5'' in the scroll-down menu after the ``Center''. But if you have pixel/image coordinates, click on the ``fk5'' and select ``Image''. Now you can set the ``Center'' coordinates of the region (@code{1650} and @code{1470} in this case) by manually typing them in the two boxes in front of ``Center''. Finally, when everything is ready, click on the ``Apply'' button and your region will go over your requested coordinates. You can zoom out (to see the whole image) and visually find it.} pixel 1650 (X) and 1470 (Y). These types of long wiggly structures show that we have dug too deep into the noise, and are a signature of correlated noise. Correlated noise is created when we warp (for example, rotate) individual exposures (that are each slightly offset compared to each other) into the same pixel grid before adding them into one deeper image. During the warping, nearby pixels are mixed and the effect of this mixing on the noise (which is in every pixel) is called ``correlated noise''. Correlated noise is a form of convolution and it slightly smooths the image. In terms of the number of exposures (and thus correlated noise), the XDF dataset is by no means an ordinary dataset. Therefore the default parameters need to be slightly customized. It is the result of warping and adding roughly 80 separate exposures which can create strong correlated noise/smoothing. In common surveys the number of exposures is usually 10 or less. See Figure 2 of Akhlaghi @url{https://arxiv.org/abs/1909.11230, 2019} and the discussion on @option{--detgrowquant} there for more on how NoiseChisel ``grow''s the detected objects and the patterns caused by correlated noise. Let's tweak NoiseChisel's configuration a little to get a better result on this dataset. Do not forget that ``@emph{Good statistical analysis is not a purely routine matter, and generally calls for more than one pass through the computer}'' (Anscombe 1973, see @ref{Science and its tools}). A good scientist must have a good understanding of her tools to make a meaningful analysis. So do not hesitate in playing with the default configuration and reviewing the manual when you have a new dataset (from a new instrument) in front of you. Robust data analysis is an art, therefore a good scientist must first be a good artist. Once you have found the good configuration for that particular noise pattern (instrument) you can safely use it for all new data that have a similar noise pattern. NoiseChisel can produce ``Check images'' to help you visualize and inspect how each step is done. You can see all the check images it can produce with this command. @example $ astnoisechisel --help | grep check @end example Let's check the overall detection process to get a better feeling of what NoiseChisel is doing with the following command. To learn the details of NoiseChisel in more detail, please see @ref{NoiseChisel}, Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015} and Akhlaghi @url{https://arxiv.org/abs/1909.11230,2019}. @example $ astnoisechisel flat-ir/xdf-f160w.fits --checkdetection @end example The check images/tables are also multi-extension FITS files. As you saw from the command above, when check datasets are requested, NoiseChisel will not go to the end. It will abort as soon as all the extensions of the check image are ready. Please list the extensions of the output with @command{astfits} and then opening it with @command{ds9} as we done above. If you have read the paper, you will see why there are so many extensions in the check image. @example $ astfits xdf-f160w_detcheck.fits $ astscript-fits-view xdf-f160w_detcheck.fits @end example In order to understand the parameters and their biases (especially as you are starting to use Gnuastro, or running it a new dataset), it is @emph{strongly} encouraged to play with the different parameters and use the respective check images to see which step is affected by your changes and how, for example, see @ref{Detecting large extended targets}. @cindex FWHM Let's focus on one step: the @code{OPENED_AND_LABELED} extension shows the initial detection step of NoiseChisel. We see the seeds of that correlated noise structure with many small detections (a relatively early stage in the processing). Such connections at the lowest surface brightness limits usually occur when the dataset is too smoothed, the threshold is too low, or the final ``growth'' is too much. As you see from the 2nd (@code{CONVOLVED}) extension, the first operation that NoiseChisel does on the data is to slightly smooth it. However, the natural correlated noise of this dataset is already one level of artificial smoothing, so further smoothing it with the default kernel may be the culprit. To see the effect, let's use a sharper kernel as a first step to convolve/smooth the input. By default NoiseChisel uses a Gaussian with full-width-half-maximum (FWHM) of 2 pixels. We can use Gnuastro's MakeProfiles to build a kernel with FWHM of 1.5 pixel (truncated at 5 times the FWHM, like the default) using the following command. MakeProfiles is a powerful tool to build any number of mock profiles on one image or independently, to learn more of its features and capabilities, see @ref{MakeProfiles}. @example $ astmkprof --kernel=gaussian,1.5,5 --oversample=1 @end example @noindent Please open the output @file{kernel.fits} and have a look (it is very small and sharp). We can now tell NoiseChisel to use this instead of the default kernel with the following command (we will keep the @option{--checkdetection} to continue checking the detection steps) @example $ astnoisechisel flat-ir/xdf-f160w.fits --kernel=kernel.fits \ --checkdetection @end example Open the output @file{xdf-f160w_detcheck.fits} as a multi-extension FITS file and go to the last extension (@code{DETECTIONS-FINAL}, it is the same pixels as the final NoiseChisel output without @option{--checkdetections}). Look again at that position mentioned above (1650,1470), you see that the long wiggly structure is gone. This shows we are making progress :-). Looking at the new @code{OPENED_AND_LABELED} extension, we see that the thin connections between smaller peaks has now significantly decreased. Going two extensions/steps ahead (in the first @code{HOLES-FILLED}), you can see that during the process of finding false pseudo-detections, too many holes have been filled: do you see how the many of the brighter galaxies are connected? At this stage all holes are filled, irrespective of their size. Try looking two extensions ahead (in the first @code{PSEUDOS-FOR-SN}), you can see that there are not too many pseudo-detections because of all those extended filled holes. If you look closely, you can see the number of pseudo-detections in the printed outputs of NoiseChisel (around 6400). This is another side-effect of correlated noise. To address it, we should slightly increase the pseudo-detection threshold (before changing @option{--dthresh}, run with @option{-P} to see the default value): @example $ astnoisechisel flat-ir/xdf-f160w.fits --kernel=kernel.fits \ --dthresh=0.1 --checkdetection @end example Before visually inspecting the check image, you can already see the effect of this small change in NoiseChisel's command-line output: notice how the number of pseudo-detections has increased to more than 7100! Open the check image now and have a look, you can see how the pseudo-detections are distributed much more evenly in the blank sky regions of the @code{PSEUDOS-FOR-SN} extension. @cartouche @noindent @strong{Maximize the number of pseudo-detections:} When using NoiseChisel on datasets with a new noise-pattern (for example, going to a Radio astronomy image, or a shallow ground-based image), play with @code{--dthresh} until you get a maximal number of pseudo-detections: the total number of pseudo-detections is printed on the command-line when you run NoiseChisel, you do not even need to open a FITS viewer. In this particular case, try @option{--dthresh=0.2} and you will see that the total printed number decreases to around 6700 (recall that with @option{--dthresh=0.1}, it was roughly 7100). So for this type of very deep HST images, we should set @option{--dthresh=0.1}. @end cartouche As discussed in Section 3.1.5 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}, the signal-to-noise ratio of pseudo-detections are critical to identifying/removing false detections. For an optimal detection they are very important to get right (where you want to detect the faintest and smallest objects in the image successfully). Let's have a look at their signal-to-noise distribution with @option{--checksn}. @example $ astnoisechisel flat-ir/xdf-f160w.fits --kernel=kernel.fits \ --dthresh=0.1 --checkdetection --checksn @end example The output (@file{xdf-f160w_detsn.fits}) contains two extensions for the pseudo-detections containing two-column tables over the undetected (@code{SKY_PSEUDODET_SN}) regions and those over detections (@code{DET_PSEUDODET_SN}). With the first command below you can see the HDUs of this file, and with the second you can see the information of the table in the first HDU (which is the default when you do not use @option{--hdu}): @example $ astfits xdf-f160w_detsn.fits $ asttable xdf-f160w_detsn.fits -i @end example @noindent You can see the table columns with the first command below and get a feeling of the signal-to-noise value distribution with the second command (the two Table and Statistics programs will be discussed later in the tutorial): @example $ asttable xdf-f160w_detsn.fits -hSKY_PSEUDODET_SN $ aststatistics xdf-f160w_detsn.fits -hSKY_PSEUDODET_SN -c2 ... [output truncated] ... Histogram: | * | *** | ****** | ********* | ********** | ************* | ***************** | ******************** | ************************** | ******************************** |******************************************************* * ** * |---------------------------------------------------------------------- @end example The correlated noise is again visible in the signal-to-noise distribution of sky pseudo-detections! Do you see how skewed this distribution is? In an image with less correlated noise, this distribution would be much more symmetric. A small change in the quantile will translate into a big change in the S/N value. For example, see the difference between the three 0.99, 0.95 and 0.90 quantiles with this command: @example $ aststatistics xdf-f160w_detsn.fits -hSKY_PSEUDODET_SN -c2 \ --quantile=0.99 --quantile=0.95 --quantile=0.90 @end example We get a change of almost 2 units (which is very significant). If you run NoiseChisel with @option{-P}, you'll see the default signal-to-noise quantile @option{--snquant} is 0.99. In effect with this option you specify the purity level you want (contamination by false detections). With the @command{aststatistics} command above, you see that a small number of extra false detections (impurity) in the final result causes a big change in completeness (you can detect more lower signal-to-noise true detections). So let's loosen-up our desired purity level, remove the check-image options, and then mask the detected pixels like before to see if we have missed anything. @example $ astnoisechisel flat-ir/xdf-f160w.fits --kernel=kernel.fits \ --dthresh=0.1 --snquant=0.95 $ in="xdf-f160w_detected.fits -hINPUT-NO-SKY" $ det="xdf-f160w_detected.fits -hDETECTIONS" $ astarithmetic $in $det nan where --output=mask-det.fits @end example Overall it seems good, but if you play a little with the color-bar and look closer in the noise, you'll see a few very sharp, but faint, objects that have not been detected. For example, the object around pixel (456, 1662). Despite its high valued pixels, this object was lost because erosion ignores the precise pixel values. Losing small/sharp objects like this only happens for under-sampled datasets like HST (where the pixel size is larger than the point spread function FWHM). So this will not happen on ground-based images. To address this problem of sharp objects, we can use NoiseChisel's @option{--noerodequant} option. All pixels above this quantile will not be eroded, thus allowing us to preserve small/sharp objects (that cover a small area, but have a lot of signal in it). Check its default value, then run NoiseChisel like below and make the mask again. @example $ astnoisechisel flat-ir/xdf-f160w.fits --kernel=kernel.fits \ --noerodequant=0.95 --dthresh=0.1 --snquant=0.95 @end example This seems to be fine and the object above is now detected. We will stop editing the configuration of NoiseChisel here, but please feel free to keep looking into the data to see if you can improve it even more. Once you have found the proper configuration for the type of images you will be using you do not need to change them any more. The same configuration can be used for any dataset that has been similarly produced (and has a similar noise pattern). But entering all these options on every call to NoiseChisel is annoying and prone to bugs (mistakenly typing the wrong value for example). To simplify things, we will make a configuration file in a visible @file{config} directory. Then we will define the hidden @file{.gnuastro} directory (that all Gnuastro's programs will look into for configuration files) as a symbolic link to the @file{config} directory. Finally, we will write the finalized values of the options into NoiseChisel's standard configuration file within that directory. We will also put the kernel in a separate directory to keep the top directory clean of any files we later need. @example $ mkdir kernel config $ ln -s config/ .gnuastro $ mv kernel.fits kernel/noisechisel.fits $ echo "kernel kernel/noisechisel.fits" > config/astnoisechisel.conf $ echo "noerodequant 0.95" >> config/astnoisechisel.conf $ echo "dthresh 0.1" >> config/astnoisechisel.conf $ echo "snquant 0.95" >> config/astnoisechisel.conf @end example @noindent We are now ready to finally run NoiseChisel on the three filters and keep the output in a dedicated directory (which we will call @file{nc} for simplicity). @example $ rm *.fits $ mkdir nc $ for f in f105w f125w f160w; do \ astnoisechisel flat-ir/xdf-$f.fits --output=nc/xdf-$f.fits; \ done @end example @node NoiseChisel optimization for storage, Segmentation and making a catalog, NoiseChisel optimization for detection, General program usage tutorial @subsection NoiseChisel optimization for storage As we showed before (in @ref{NoiseChisel and Multi-Extension FITS files}), NoiseChisel's output is a multi-extension FITS file with several images the same size as the input. As the input datasets get larger this output can become hard to manage and waste a lot of storage space. Fortunately there is a solution to this problem (which is also useful for Segment's outputs). In this small section we will take a short detour to show this feature. Please note that the outputs generated here are not needed for the rest of the tutorial. But first, let's have a look at the contents/HDUs and volume of NoiseChisel's output from @ref{NoiseChisel optimization for detection} (fast answer, it is larger than 100 mega-bytes): @example $ astfits nc/xdf-f160w.fits $ ls -lh nc/xdf-f160w.fits @end example Two options can drastically decrease NoiseChisel's output file size: 1) With the @option{--rawoutput} option, NoiseChisel will not create a Sky-subtracted output. After all, it is redundant: you can always generate it by subtracting the @code{SKY} extension from the input image (which you have in your database) using the Arithmetic program. 2) With the @option{--oneelempertile}, you can tell NoiseChisel to store its Sky and Sky standard deviation results with one pixel per tile (instead of many pixels per tile). So let's run NoiseChisel with these options, then have another look at the HDUs and the over-all file size: @example $ astnoisechisel flat-ir/xdf-f160w.fits --oneelempertile --rawoutput \ --output=nc-for-storage.fits $ astfits nc-for-storage.fits $ ls -lh nc-for-storage.fits @end example @noindent See how @file{nc-for-storage.fits} has four HDUs, while @file{nc/xdf-f160w.fits} had five HDUs? As explained above, the missing extension is @code{INPUT-NO-SKY}. Also, look at the sizes of the @code{SKY} and @code{SKY_STD} HDUs, unlike before, they are not the same size as @code{DETECTIONS}, they only have one pixel for each tile (group of pixels in raw input). Finally, you see that @file{nc-for-storage.fits} is just under 8 mega bytes (while @file{nc/xdf-f160w.fits} was 100 mega bytes)! But we are not yet finished! You can even be more efficient in storage, archival or transferring NoiseChisel's output by compressing this file. Try the command below to see how NoiseChisel's output has now shrunk to about 250 kilo-byes while keeping all the necessary information as the original 100 mega-byte output. @example $ gzip --best nc-for-storage.fits $ ls -lh nc-for-storage.fits.gz @end example We can get this wonderful level of compression because NoiseChisel's output is binary with only two values: 0 and 1. Compression algorithms are highly optimized in such scenarios. You can open @file{nc-for-storage.fits.gz} directly in SAO DS9 or feed it to any of Gnuastro's programs without having to decompress it. Higher-level programs that take NoiseChisel's output (for example, Segment or MakeCatalog) can also deal with this compressed image where the Sky and its Standard deviation are one pixel-per-tile. You just have to give the ``values'' image as a separate option, for more, see @ref{Segment} and @ref{MakeCatalog}. Segment (the program we will introduce in the next section for identifying sub-structure), also has similar features to optimize its output for storage. Since this file was only created for a fast detour demonstration, let's keep our top directory clean and move to the next step: @example rm nc-for-storage.fits.gz @end example @node Segmentation and making a catalog, Measuring the dataset limits, NoiseChisel optimization for storage, General program usage tutorial @subsection Segmentation and making a catalog The main output of NoiseChisel is the binary detection map (@code{DETECTIONS} extension, see @ref{NoiseChisel optimization for detection}). It only has two values: 1 or 0. This is useful when studying the noise or background properties, but hardly of any use when you actually want to study the targets/galaxies in the image, especially in such a deep field where almost everything is connected. To find the galaxies over the detections, we will use Gnuastro's @ref{Segment} program: @example $ mkdir seg $ astsegment nc/xdf-f160w.fits -oseg/xdf-f160w.fits $ astsegment nc/xdf-f125w.fits -oseg/xdf-f125w.fits $ astsegment nc/xdf-f105w.fits -oseg/xdf-f105w.fits @end example Segment's operation is very much like NoiseChisel (in fact, prior to version 0.6, it was part of NoiseChisel). For example, the output is a multi-extension FITS file (previously discussed in @ref{NoiseChisel and Multi-Extension FITS files}), it has check images and uses the undetected regions as a reference (previously discussed in @ref{NoiseChisel optimization for detection}). Please have a look at Segment's multi-extension output to get a good feeling of what it has done. Do not forget to flip through the extensions in the ``Cube'' window. @example $ astscript-fits-view seg/xdf-f160w.fits @end example Like NoiseChisel, the first extension is the input. The @code{CLUMPS} extension shows the true ``clumps'' with values that are @mymath{\ge1}, and the diffuse regions labeled as @mymath{-1}. Please flip between the first extension and the clumps extension and zoom-in on some of the clumps to get a feeling of what they are. In the @code{OBJECTS} extension, we see that the large detections of NoiseChisel (that may have contained many galaxies) are now broken up into separate labels. Play with the color-bar and hover your mouse of the various detections to see their different labels. The clumps are not affected by the hard-to-deblend and low signal-to-noise diffuse regions, they are more robust for calculating the colors (compared to objects). From this step onward, we will continue with clumps. Having localized the regions of interest in the dataset, we are ready to do measurements on them with @ref{MakeCatalog}. MakeCatalog is specialized and optimized for doing measurements over labeled regions of an image. In other words, through MakeCatalog, you can ``reduce'' an image to a table (catalog of certain properties of objects in the image). Each requested measurement (over each label) will be given a column in the output table. To see the full set of available measurements run it with @option{--help} like below (and scroll up), note that measurements are classified by context. @example $ astmkcatalog --help @end example So let's select the properties we want to measure in this tutorial. First of all, we need to know which measurement belongs to which object or clump, so we will start with the @option{--ids} (read as: IDs@footnote{This option is plural because we need two ID columns for identifying ``clumps'' in the clumps catalog/table: the first column will be the ID of the host ``object'', and the second one will be the ID of the clump within that object. In the ``objects'' catalog/table, only a single column will be returned for this option.}). We also want to measure (in this order) the Right Ascension (with @option{--ra}), Declination (@option{--dec}), magnitude (@option{--magnitude}), and signal-to-noise ratio (@option{--sn}) of the objects and clumps. Furthermore, as mentioned above, we also want measurements on clumps, so we also need to call @option{--clumpscat}. The following command will make these measurements on Segment's F160W output and write them in a catalog for each object and clump in a FITS table. For more on the zero point, see @ref{Brightness flux magnitude}. @example $ mkdir cat $ astmkcatalog seg/xdf-f160w.fits --ids --ra --dec --magnitude --sn \ --zeropoint=25.94 --clumpscat --output=cat/xdf-f160w.fits @end example @noindent From the printed statements on the command-line, you see that MakeCatalog read all the extensions in Segment's output for the various measurements it needed. Let's look at the output of the command above: @example $ astfits cat/xdf-f160w.fits @end example You will see that the output of the MakeCatalog has two extensions. The first extension shows the measurements over the @code{OBJECTS}, and the second extension shows the measurements over the clumps @code{CLUMPS}. To calculate colors, we also need magnitude measurements on the other filters. So let's repeat the command above on them, just changing the file names and zero point (which we got from the XDF survey web page): @example $ astmkcatalog seg/xdf-f125w.fits --ids --ra --dec --magnitude --sn \ --zeropoint=26.23 --clumpscat --output=cat/xdf-f125w.fits $ astmkcatalog seg/xdf-f105w.fits --ids --ra --dec --magnitude --sn \ --zeropoint=26.27 --clumpscat --output=cat/xdf-f105w.fits @end example However, the galaxy properties might differ between the filters (which is the whole purpose behind observing in different filters!). Also, the noise properties and depth of the datasets differ. You can see the effect of these factors in the resulting clump catalogs, with Gnuastro's Table program. We will go deep into working with tables in the next section, but in summary: the @option{-i} option will print information about the columns and number of rows. To see the column values, just remove the @option{-i} option. In the output of each command below, look at the @code{Number of rows:}, and note that they are different. @example $ asttable cat/xdf-f105w.fits -hCLUMPS -i $ asttable cat/xdf-f125w.fits -hCLUMPS -i $ asttable cat/xdf-f160w.fits -hCLUMPS -i @end example Matching the catalogs is possible (for example, with @ref{Match}). However, the measurements of each column are also done on different pixels: the clump labels can/will differ from one filter to another for one object. Please open them and focus on one object to see for yourself. This can bias the result, if you match catalogs. An accurate color calculation can only be done when magnitudes are measured from the same pixels on all images and this can be done easily with MakeCatalog. In fact this is one of the reasons that NoiseChisel or Segment do not generate a catalog like most other detection/segmentation software. This gives you the freedom of selecting the pixels for measurement in any way you like (from other filters, other software, manually, etc.). Fortunately in these images, the Point spread function (PSF) is very similar, allowing us to use a single labeled image output for all filters@footnote{When the PSFs between two images differ largely, you would have to PSF-match the images before using the same pixels for measurements.}. The F160W image is deeper, thus providing better detection/segmentation, and redder, thus observing smaller/older stars and representing more of the mass in the galaxies. We will thus use the F160W filter as a reference and use its segment labels to identify which pixels to use for which objects/clumps. But we will do the measurements on the sky-subtracted F105W and F125W images (using MakeCatalog's @option{--valuesfile} option) as shown below: Notice that the only difference between these calls and the call to generate the raw F160W catalog (excluding the zero point and the output name) is the @option{--valuesfile}. @example $ astmkcatalog seg/xdf-f160w.fits --ids --ra --dec --magnitude --sn \ --valuesfile=nc/xdf-f125w.fits --zeropoint=26.23 \ --clumpscat --output=cat/xdf-f125w-on-f160w-lab.fits $ astmkcatalog seg/xdf-f160w.fits --ids --ra --dec --magnitude --sn \ --valuesfile=nc/xdf-f105w.fits --zeropoint=26.27 \ --clumpscat --output=cat/xdf-f105w-on-f160w-lab.fits @end example After running the commands above, look into what MakeCatalog printed on the command-line. You can see that (as requested) the object and clump pixel labels in both were taken from the respective extensions in @file{seg/xdf-f160w.fits}. However, the pixel values and pixel Sky standard deviation were respectively taken from @file{nc/xdf-f105w.fits} and @file{nc/xdf-f125w.fits}. Since we used the same labeled image on all filters, the number of rows in both catalogs are now identical. Let's have a look: @example $ asttable cat/xdf-f105w-on-f160w-lab.fits -hCLUMPS -i $ asttable cat/xdf-f125w-on-f160w-lab.fits -hCLUMPS -i $ asttable cat/xdf-f160w.fits -hCLUMPS -i @end example Finally, MakeCatalog also does basic calculations on the full dataset (independent of each labeled region but related to whole data), for example, pixel area or per-pixel surface brightness limit. They are stored as keywords in the FITS headers (or lines starting with @code{#} in plain text). This (and other ways to measure the limits of your dataset) are discussed in the next section: @ref{Measuring the dataset limits}. @node Measuring the dataset limits, Working with catalogs estimating colors, Segmentation and making a catalog, General program usage tutorial @subsection Measuring the dataset limits In @ref{Segmentation and making a catalog}, we created a catalog of the different objects with the image. Before measuring colors, or doing any other kind of analysis on the catalogs (and detected objects), it is very important to understand the limitations of the dataset. Without understanding the limitations of your dataset, you cannot make any physical interpretation of your results. The theory behind the calculations discussed here is thoroughly introduced in @ref{Quantifying measurement limits}. For example, with the command below, let's sort all the detected clumps in the image by magnitude (with @option{--sort=magnitude}) and and print the magnitude and signal-to-noise ratio (S/N; with @option{-cmagnitude,sn}): @example $ asttable cat/xdf-f160w.fits -hclumps -cmagnitude,sn \ --sort=magnitude --noblank=magnitude @end example As you see, we have clumps with a total magnitude of almost 32! This is @emph{extremely faint}! Are these things trustable? Let's have a look at all of those with a magnitude between 31 and 32 with the command below. We are first using Table to only keep the relevant columns rows, and using Gnuastro's DS9 region file creation script (@code{astscript-ds9-region}) to generate DS9 region files, and open DS9: @example $ asttable cat/xdf-f160w.fits -hclumps -cra,dec \ --range=magnitude,31:32 \ | astscript-ds9-region -c1,2 --radius=0.5 \ --command="ds9 -mecube seg/xdf-f160w.fits -zscale" @end example Zoom-out a little and you will see some green circles (DS9 region files) in some regions of the image. There actually does seem to be a true peak under the selected regions, but as you see, they are very small, diffuse and noisy. How reliable are the measured magnitudes? Using the S/N column from the first command above, you can see that such objects only have a signal to noise of about 2.6 (which is indeed too low for most analysis purposes) @example $ asttable cat/xdf-f160w.fits -hclumps -csn \ --range=magnitude,31:32 | aststatistics @end example This brings us to the first method of quantifying your dataset's @emph{magnitude limit}, which is also sometimes called @emph{detection limit} (see @ref{Magnitude limit of image}). To estimate the @mymath{5\sigma} detection limit of your dataset, you simply report the median magnitude of the objects that have a signal to noise of (approximately) five. This is very easy to calculate with the command below: @example $ asttable cat/xdf-f160w.fits -hclumps --range=sn,4.8:5.2 -cmagnitude \ | aststatistics --median 29.9949 @end example Let's have a look at these objects, to get a feeling of what these clump looks like: @example $ asttable cat/xdf-f160w.fits -hclumps --range=sn,4.8:5.2 \ -cra,dec,magnitude \ | astscript-ds9-region -c1,2 --namecol=3 \ --width=2 --radius=0.5 \ --command="ds9 -mecube seg/xdf-f160w.fits -zscale" @end example The number you see on top of each region is the clump's magnitude. Please go over the objects and have a close look at them! It is very important to have a feeling of what your dataset looks like, and how to interpret the numbers to associate an image with them. @cindex Correlated noise @cindex Noise (correlated) Generally, they look very small with different levels of diffuse-ness! Those that are sharper make more visual sense (to be @mymath{5\sigma} detections), but the more diffuse ones extend over a larger area. Furthermore, the noise is measured on individual pixel measurements. However, during the reduction many exposures are co-added and stacked, mixing the pixels like a small convolution (creating ``correlated noise''). Therefore you clearly see two main issues with the detection limit as defined above: it depends on the morphology, and it does not take into account the correlated noise. @cindex Upper-limit A more realistic way to estimate the significance of the detection is to take its footprint, randomly place it in thousands of undetected regions of the image and use that distribution as a reference. This is technically known as upper-limit measurements. For a full discussion, see @ref{Upper limit magnitude of each detection}). Since it is for each separate object, the upper-limit measurements should be requested as extra columns in MakeCatalog's output. For example, with the command below, let's generate a new catalog of the F160W filter, but with two extra columns compared to the one in @file{cat/}: the upper-limit magnitude and the upper-limit multiple of sigma. @example $ astmkcatalog seg/xdf-f160w.fits --ids --ra --dec --magnitude --sn \ --zeropoint=25.94 --clumpscat --upnsigma=3 \ --upperlimit-mag --upperlimit-sigma \ --output=xdf-f160w.fits @end example @noindent Let's compare the upper-limit magnitude with the measured magnitude of each clump: @example $ asttable xdf-f160w.fits -hclumps -cmagnitude,upperlimit_mag @end example As you see, in almost all of the cases, the measured magnitude is sufficiently higher than the upper-limit magnitude. Let's subtract the latter from the former to better see this difference in a third column: @example $ asttable xdf-f160w.fits -hclumps -cmagnitude,upperlimit_mag \ -c'arith upperlimit_mag magnitude -' @end example The ones with a positive third column (difference) show that the clump has sufficiently higher brightness than the noisy background to be usable. Let's use Table's @ref{Column arithmetic} to find only those that have a negative difference: @example $ asttable xdf-f160w.fits -hclumps -cra,dec --noblankend=3 \ -c'arith upperlimit_mag magnitude - set-d d d 0 gt nan where' @end example @noindent From more than 3500 clumps, this command only gave @mymath{\sim150} rows (this number may slightly change on different runs due to the random nature of the upper-limit sampling@footnote{You can fix the random number generator seed, so you always get the same sampling, see @ref{Generating random numbers}.})! Let's have a look at them: @example $ asttable xdf-f160w.fits -hclumps -cra,dec --noblankend=3 \ -c'arith upperlimit_mag magnitude - set-d d d 0 gt nan where' \ | astscript-ds9-region -c1,2 --namecol=3 --width=2 \ --radius=0.5 \ --command="ds9 -mecube seg/xdf-f160w.fits -zscale" @end example You see that they are all extremely faint and diffuse/small peaks. Therefore, if an object's magnitude is fainter than its upper-limit magnitude, you should not use the magnitude: it is not accurate! You should use the upper-limit magnitude instead (with an arrow in your plots to mark which ones are upper-limits). But the main point (in relation to the magnitude limit) with the upper-limit, is the @code{UPPERLIMIT_SIGMA} column. you can think of this as a @emph{realistic} S/N for extremely faint/diffuse/small objects). The raw S/N column is simply calculated on a pixel-by-pixel basis, however, the upper-limit sigma is produced by actually taking the label's footprint, and randomly placing it thousands of time over un-detected parts of the image and measuring the brightness of the sky. The clump's brightness is then divided by the standard deviation of the resulting distribution to give you exactly how significant it is (accounting for inter-pixel issues like correlated noise, which are strong in this dataset). You can actually compare the two values with the command below: @example $ asttable xdf-f160w.fits -hclumps -csn,upperlimit_sigma @end example As you see, the second column (upper-limit sigma) is almost always less than the S/N. This clearly shows the effect of correlated noise! If you now use this column as the reference for deriving the magnitude limit, you will see that it will shift by almost 0.5 magnitudes brighter and is now more reasonable: @example $ asttable xdf-f160w.fits -hclumps --range=upperlimit_sigma,4.8:5.2 \ -cmagnitude | aststatistics --median 29.6257 @end example We see that the @mymath{5\sigma} detection limit is @mymath{\sim29.6}! This is extremely deep! For example, in the Legacy Survey@footnote{@url{https://www.legacysurvey.org/dr9/description}}, the @mymath{5\sigma} detection limit for @emph{point sources} is approximately 24.5 (5 magnitudes, or 100 times, shallower than this image). As mentioned above, an important caveat in this simple calculation is that we should only be looking at point-like objects, not simply everything. This is because the shape or radial slope of the profile has an important effect on this measurement: at the same total magnitude, a sharper object will have a higher S/N. To be more precise, we should first perform star-galaxy separation, then do this only for the objects that are classified as stars. A crude, first-order, method is to use the @option{--axis-ratio} option so MakeCatalog also measures the axis ratio, then call Table with @option{--range=upperlimit_sigma,,4.8:5.2} and @option{--range=axis_ratio,0.95:1} (in one command). Please do this for yourself as an exercise to see the difference with the result above. @noindent Before continuing, let's remove this temporarily produced catalog: @example $ rm xdf-f160w.fits @end example Another measure of the dataset's limit is the completeness limit (@ref{Completeness limit of each detection}). This is necessary when you are looking at populations of objects over the image. You want to know until what magnitude you can be sure that you have detected an object (if it was present). As described in @ref{Completeness limit of each detection}, the best way to do this is with mock images. But a crude, first order result can be obtained from the actual image: by simply plotting the histogram of the magnitudes: @example $ aststatistics cat/xdf-f160w.fits -hclumps -cmagnitude ... Histogram: | * | ** **** | *********** | ************* | **************** | ******************* | ********************** | ************************** | ********************************* | ********************************************* |* * ** ** ********************************************************** |---------------------------------------------------------------------- @end example @cindex Number count This plot (the histogram of magnitudes; where fainter magnitudes are towards the right) is technically called the dataset's @emph{number count} plot. You see that the number of objects increases with magnitude as the magnitudes get fainter (to the right). However, beyond a certain magnitude, you see it becomes flat, and soon afterwards, the numbers suddenly drop. Once you have your catalog, you can easily find this point with the two commands below. First we generate a histogram with fewer bins (to have more numbers in each bin). We then use AWK to find the magnitude bin where the number of points decrease compared to the previous bin. But we only do this for bins that have more than 50 items (to avoid scatter in the bright end). Finally, in Statistics, we have manually set the magnitude range and number of bins so each bin is roughly 0.5 magnitudes thick (with @option{--greaterequal=20}, @option{--lessthan=32} and @option{--numbins=24}) @example $ aststatistics cat/xdf-f160w.fits -hclumps -cmagnitude --histogram \ --greaterequal=20 --lessthan=32 --numbins=24 \ --output=f160w-hist.txt $ asttable f160w-hist.txt \ | awk '$2>50 && $2<prev@{print prevbin; exit@} \ @{prev=$2; prevbin=$1@}' 28.932122667631 @end example Therefore, to first order (and very crudely!) we can say that if an object is in our field of view and has a magnitude of @mymath{\sim29} or brighter, we can be highly confident that we have detected it. But before continuing, let's clean up behind ourselves: @example $ rm f160w-hist.txt @end example Another important limiting parameter in a processed dataset is the surface brightness limit (@ref{Surface brightness limit of image}). The surface brightness limit of a dataset is an important measure for extended structures (for example, when you want to look at the outskirts of galaxies). In the next tutorial, we have thoroughly described the derivation of the surface brightness limit of a dataset. So we will just show the final result here, and encourage you to follow up with that tutorial after finishing this tutorial (see @ref{Image surface brightness limit}) By default, MakeCatalog will estimate the surface brightness limit of a given dataset, and put it in the keywords of the output (all keywords starting with @code{SBL}, which is short for surface brightness limit): @example $ astfits cat/xdf-f160w.fits -h1 | grep SBL @end example As you see, the only one with a unit of @code{mag/arcsec^2} is @code{SBLMAG}. It contains the surface brightness limit of the input dataset over @code{SBLAREA} arcsec@mymath{^2} with @code{SBLNSIG} multiples of @mymath{\sigma}. In the current version of Gnuastro, @code{SBLAREA=100} and @code{SBLNSIG=3}, so the surface brightness limit of this image is 32.66 mag/arcsec@mymath{^2} (@mymath{3\sigma}, over 100 arcsec@mymath{^2}). Therefore, if this default area and multiple of sigma are fine for you@footnote{You can change these values with the @option{--sfmagarea} and @option{--sfmagnsigma}} (these are the most commonly used values), you can simply read the image surface brightness limit from the catalogs produced by MakeCatalog with this command: @example $ astfits cat/*.fits -h1 --keyvalue=SBLMAG @end example @node Working with catalogs estimating colors, Column statistics color-magnitude diagram, Measuring the dataset limits, General program usage tutorial @subsection Working with catalogs (estimating colors) In the previous step we generated catalogs of objects and clumps over our dataset (see @ref{Segmentation and making a catalog}). The catalogs are available in the two extensions of the single FITS file@footnote{MakeCatalog can also output plain text tables. However, in the plain text format you can only have one table per file. Therefore, if you also request measurements on clumps, two plain text tables will be created (suffixed with @file{_o.txt} and @file{_c.txt}).}. Let's see the extensions and their basic properties with the Fits program: @example $ astfits cat/xdf-f160w.fits # Extension information @end example Let's inspect the table in each extension with Gnuastro's Table program (see @ref{Table}). We should have used @option{-hOBJECTS} and @option{-hCLUMPS} instead of @option{-h1} and @option{-h2} respectively. The numbers are just used here to convey that both names or numbers are possible, in the next commands, we will just use names. @example $ asttable cat/xdf-f160w.fits -h1 --info # Objects catalog info. $ asttable cat/xdf-f160w.fits -h1 # Objects catalog columns. $ asttable cat/xdf-f160w.fits -h2 -i # Clumps catalog info. $ asttable cat/xdf-f160w.fits -h2 # Clumps catalog columns. @end example @noindent As you see above, when given a specific table (file name and extension), Table will print the full contents of all the columns. To see the basic metadata about each column (for example, name, units and comments), simply append a @option{--info} (or @option{-i}) to the command. To print the contents of special column(s), just give the column number(s) (counting from @code{1}) or the column name(s) (if they have one) to the @option{--column} (or @option{-c}) option. For example, if you just want the magnitude and signal-to-noise ratio of the clumps (in the clumps catalog), you can get it with any of the following commands @example $ asttable cat/xdf-f160w.fits -hCLUMPS --column=5,6 $ asttable cat/xdf-f160w.fits -hCLUMPS -c5,SN $ asttable cat/xdf-f160w.fits -hCLUMPS -c5 -c6 $ asttable cat/xdf-f160w.fits -hCLUMPS -cMAGNITUDE -cSN @end example @noindent Similar to HDUs, when the columns have names, always use the name: it is so common to mis-write numbers or forget the order later! Using column names instead of numbers has many advantages: @enumerate @item You do not have to worry about the order of columns in the table. @item It acts as a documentation in the script. @item Column meta-data (including a name) are not just limited to FITS tables and can also be used in plain text tables, see @ref{Gnuastro text table format}. @end enumerate @noindent Table also has tools to limit the displayed rows. For example, with the first command below only rows with a magnitude in the range of 29 to 30 will be shown. With the second command, you can further limit the displayed rows to rows with an S/N larger than 10 (a range between 10 to infinity). You can further sort the output rows, only show the top (or bottom) N rows, etc., see @ref{Table} for more. @example $ asttable cat/xdf-f160w.fits -hCLUMPS --range=MAGNITUDE,28:29 $ asttable cat/xdf-f160w.fits -hCLUMPS \ --range=MAGNITUDE,28:29 --range=SN,10:inf @end example Now that you are comfortable in viewing table columns and rows, let's look into merging columns of multiple tables into one table (which is necessary for measuring the color of the clumps). Since @file{cat/xdf-f160w.fits} and @file{cat/xdf-f105w-on-f160w-lab.fits} have exactly the same number of rows and the rows correspond to the same clump, let's merge them to have one table with magnitudes in both filters. We can merge columns with the @option{--catcolumnfile} option like below. You give this option a file name (which is assumed to be a table that has the same number of rows as the main input), and all the table's columns will be concatenated/appended to the main table. Now, try it out with the commands below. We will first look at the metadata of the first table (only the @code{CLUMPS} extension). With the second command, we will concatenate the two tables and write them in, @file{two-in-one.fits} and finally, we will check the new catalog's metadata. @example $ asttable cat/xdf-f160w.fits -i -hCLUMPS $ asttable cat/xdf-f160w.fits -hCLUMPS --output=two-in-one.fits \ --catcolumnfile=cat/xdf-f125w-on-f160w-lab.fits \ --catcolumnhdu=CLUMPS $ asttable two-in-one.fits -i @end example By comparing the two metadata, we see that both tables have the same number of rows. But what might have attracted your attention more, is that @file{two-in-one.fits} has double the number of columns (as expected, after all, you merged both tables into one file, and did not ask for any specific column). In fact you can concatenate any number of other tables in one command, for example: @example $ asttable cat/xdf-f160w.fits -hCLUMPS --output=three-in-one.fits \ --catcolumnfile=cat/xdf-f125w-on-f160w-lab.fits \ --catcolumnfile=cat/xdf-f105w-on-f160w-lab.fits \ --catcolumnhdu=CLUMPS --catcolumnhdu=CLUMPS $ asttable three-in-one.fits -i @end example As you see, to avoid confusion in column names, Table has intentionally appended a @code{-1} to the column names of the first concatenated table if the column names are already present in the original table. For example, we have the original @code{RA} column, and another one called @code{RA-1}). Similarly a @code{-2} has been added for the columns of the second concatenated table. However, this example clearly shows a problem with this full concatenation: some columns are identical (for example, @code{HOST_OBJ_ID} and @code{HOST_OBJ_ID-1}), or not needed (for example, @code{RA-1} and @code{DEC-1} which are not necessary here). In such cases, you can use @option{--catcolumns} to only concatenate certain columns, not the whole table. For example, this command: @example $ asttable cat/xdf-f160w.fits -hCLUMPS --output=two-in-one-2.fits \ --catcolumnfile=cat/xdf-f125w-on-f160w-lab.fits \ --catcolumnhdu=CLUMPS --catcolumns=MAGNITUDE $ asttable two-in-one-2.fits -i @end example You see that we have now only appended the @code{MAGNITUDE} column of @file{cat/xdf-f125w-on-f160w-lab.fits}. This is what we needed to be able to later subtract the magnitudes. Let's go ahead and add the F105W magnitudes also with the command below. Note how we need to call @option{--catcolumnhdu} once for every table that should be appended, but we only call @option{--catcolumn} once (assuming all the tables that should be appended have this column). @example $ asttable cat/xdf-f160w.fits -hCLUMPS --output=three-in-one-2.fits \ --catcolumnfile=cat/xdf-f125w-on-f160w-lab.fits \ --catcolumnfile=cat/xdf-f105w-on-f160w-lab.fits \ --catcolumnhdu=CLUMPS --catcolumnhdu=CLUMPS \ --catcolumns=MAGNITUDE $ asttable three-in-one-2.fits -i @end example But we are not finished yet! There is a very big problem: it is not immediately clear which one of @code{MAGNITUDE}, @code{MAGNITUDE-1} or @code{MAGNITUDE-2} columns belong to which filter! Right now, you know this because you just ran this command. But in one hour, you'll start doubting yourself and will be forced to go through your command history, trying to figure out if you added F105W first, or F125W. You should never torture your future-self (or your colleagues) like this! So, let's rename these confusing columns in the matched catalog. Fortunately, with the @option{--colmetadata} option, you can correct the column metadata of the final table (just before it is written). It takes four values: 1) the original column name or number, 2) the new column name, 3) the column unit and 4) the column comments. Since the comments are usually human-friendly sentences and contain space characters, you should put them in double quotations like below. For example, by adding three calls of this option to the previous command, we write the filter name in the magnitude column name and description. @example $ asttable cat/xdf-f160w.fits -hCLUMPS --output=three-in-one-3.fits \ --catcolumnfile=cat/xdf-f125w-on-f160w-lab.fits \ --catcolumnfile=cat/xdf-f105w-on-f160w-lab.fits \ --catcolumnhdu=CLUMPS --catcolumnhdu=CLUMPS \ --catcolumns=MAGNITUDE \ --colmetadata=MAGNITUDE,MAG-F160W,log,"Magnitude in F160W." \ --colmetadata=MAGNITUDE-1,MAG-F125W,log,"Magnitude in F125W." \ --colmetadata=MAGNITUDE-2,MAG-F105W,log,"Magnitude in F105W." $ asttable three-in-one-3.fits -i @end example We now have all three magnitudes in one table and can start doing arithmetic on them (to estimate colors, which are just a subtraction of magnitudes). To use column arithmetic, simply call the column selection option (@option{--column} or @option{-c}), put the value in single quotations and start the value with @code{arith} (followed by a space) like the example below. Column arithmetic uses the same ``reverse polish notation'' as the Arithmetic program (see @ref{Reverse polish notation}), with almost all the same operators (see @ref{Arithmetic operators}), and some column-specific operators (that are not available for images). In column-arithmetic, you can identify columns by number (prefixed with a @code{$}) or name, for more see @ref{Column arithmetic}. So let's estimate one color from @file{three-in-one-3.fits} using column arithmetic. All the commands below will produce the same output, try them each and focus on the differences. Note that column arithmetic can be mixed with other ways to choose output columns (the @code{-c} option). @example $ asttable three-in-one-3.fits -ocolor-cat.fits \ -c1,2,3,4,'arith $5 $7 -' $ asttable three-in-one-3.fits -ocolor-cat.fits \ -c1,2,RA,DEC,'arith MAG-F125W MAG-F160W -' $ asttable three-in-one-3.fits -ocolor-cat.fits -c1,2 \ -cRA,DEC --column='arith MAG-F105W MAG-F160W -' @end example This example again highlights the important point on using column names: if you do not know the commands before, you have no way of making sense of the first command: what is in column 5 and 7? why not subtract columns 3 and 4 from each other? Do you see how cryptic the first one is? Then look at the last one: even if you have no idea how this table was created, you immediately understand the desired operation. @strong{When you have column names, please use them.} If your table does not have column names, give them names with the @option{--colmetadata} (described above) as you are creating them. But how about the metadata for the column you just created with column arithmetic? Have a look at the column metadata of the table produced above: @example $ asttable color-cat.fits -i @end example The name of the column produced by arithmetic column is @command{ARITH_1}! This is natural: Arithmetic has no idea what the modified column is! You could have multiplied two columns, or done much more complex transformations with many columns. @emph{Metadata cannot be set automatically, your (the human) input is necessary.} To add metadata, you can use @option{--colmetadata} like before: @example $ asttable three-in-one-3.fits -ocolor-cat.fits -c1,2,RA,DEC \ --column='arith MAG-F105W MAG-F160W -' \ --colmetadata=ARITH_1,F105W-F160W,log,"Magnitude difference" $ asttable color-cat.fits -i @end example Sometimes, because of a particular way of storing data, you might need to take all input columns. If there are many columns (for example hundreds!), listing them (like above) will become annoying, buggy and time-consuming. In such cases, you can give @option{-c_all}. Upon execution, @code{_all} will be replaced with a comma-separated list of all the input columns. This allows you to add new columns easily, without having to worry about the number of input columns that you want anyway. A lower-level but more customizable method is to use the @command{seq} (sequence) command with the @code{-s} (separator) option set to @code{','}). For example, if you have 216 columns and only want to return columns 1 and 2 as well as all the columns between 12 to 58 (inclusive), you can use the command below: @example $ asttable table.fits -c1,2,$(seq -s',' 12 58) @end example We are now ready to make our final table. We want it to have the magnitudes in all three filters, as well as the three possible colors. Recall that by convention in astronomy colors are defined by subtracting the bluer magnitude from the redder magnitude. In this way a larger color value corresponds to a redder object. So from the three magnitudes, we can produce three colors (as shown below). Also, because this is the final table we are creating here and want to use it later, we will store it in @file{cat/} and we will also give it a clear name and use the @option{--range} option to only print columns with a signal-to-noise ratio (@code{SN} column, from the F160W filter) above 5. @example $ asttable three-in-one-3.fits --range=SN,5,inf -c1,2,RA,DEC,SN \ -cMAG-F160W,MAG-F125W,MAG-F105W \ -c'arith MAG-F125W MAG-F160W -' \ -c'arith MAG-F105W MAG-F125W -' \ -c'arith MAG-F105W MAG-F160W -' \ --colmetadata=SN,SN-F160W,ratio,"F160W signal to noise ratio" \ --colmetadata=ARITH_1,F125W-F160W,log,"Color F125W-F160W." \ --colmetadata=ARITH_2,F105W-F125W,log,"Color F105W-F125W." \ --colmetadata=ARITH_3,F105W-F160W,log,"Color F105W-F160W." \ --output=cat/mags-with-color.fits $ asttable cat/mags-with-color.fits -i @end example The table now has all the columns we need and it has the proper metadata to let us safely use it later (without frustrating over column orders!) or passing it to colleagues. Let's finish this section of the tutorial with a useful tip on modifying column metadata. Above, updating/changing column metadata was done with the @option{--colmetadata} in the same command that produced the newly created Table file. But in many situations, the table is already made and you just want to update the metadata of one column. In such cases using @option{--colmetadata} is over-kill (wasting CPU/RAM energy or time if the table is large) because it will load the full table data and metadata into memory, just change the metadata and write it back into a file. In scenarios when the table's data does not need to be changed and you just want to set or update the metadata, it is much more efficient to use basic FITS keyword editing. For example, in the FITS standard, column names are stored in the @code{TTYPE} header keywords, so let's have a look: @example $ asttable two-in-one.fits -i $ astfits two-in-one.fits -h1 | grep TTYPE @end example Changing/updating the column names is as easy as updating the values to these keywords. You do not need to touch the actual data! With the command below, we will just update the @code{MAGNITUDE} and @code{MAGNITUDE-1} columns (which are respectively stored in the @code{TTYPE5} and @code{TTYPE11} keywords) by modifying the keyword values and checking the effect by listing the column metadata again: @example $ astfits two-in-one.fits -h1 \ --update=TTYPE5,MAG-F160W \ --update=TTYPE11,MAG-F125W $ asttable two-in-one.fits -i @end example You can see that the column names have indeed been changed without touching any of the data. You can do the same for the column units or comments by modifying the keywords starting with @code{TUNIT} or @code{TCOMM}. Generally, Gnuastro's table is a very useful program in data analysis and what you have seen so far is just the tip of the iceberg. But to avoid making the tutorial even longer, we will stop reviewing the features here, for more, please see @ref{Table}. Before continuing, let's just delete all the temporary FITS tables we placed in the top project directory: @example rm *.fits @end example @node Column statistics color-magnitude diagram, Aperture photometry, Working with catalogs estimating colors, General program usage tutorial @subsection Column statistics (color-magnitude diagram) In @ref{Working with catalogs estimating colors} we created a single catalog containing the magnitudes of our desired clumps in all three filters, and their colors. To start with, let's inspect the distribution of three colors with the Statistics program. @example $ aststatistics cat/mags-with-color.fits -cF105W-F125W $ aststatistics cat/mags-with-color.fits -cF105W-F160W $ aststatistics cat/mags-with-color.fits -cF125W-F160W @end example This tiny and cute ASCII histogram (and the general information printed above it) gives you a crude (but very useful and fast) feeling on the distribution. You can later use Gnuastro's Statistics program with the @option{--histogram} option to build a much more fine-grained histogram as a table to feed into your favorite plotting program for a much more accurate/appealing plot (for example, with PGFPlots in @LaTeX{}). If you just want a specific measure, for example, the mean, median and standard deviation, you can ask for them specifically, like below: @example $ aststatistics cat/mags-with-color.fits -cF105W-F160W \ --mean --median --std @end example @cindex Color-magnitude diagram The basic statistics we measured above were just on one column. In many scenarios this is fine, but things get much more exciting if you look at the correlation of two columns with each other. For example, let's create the color-magnitude diagram for our measured targets. @cindex Scatter plot @cindex 2D histogram @cindex Plot, scatter @cindex Histogram, 2D In many papers, the color-magnitude diagram is usually plotted as a scatter plot. However, scatter plots have a major limitation when there are a lot of points and they cluster together in one region of the plot: the possible correlation in that dense region is lost (because the points fall over each other). In such cases, it is much better to use a 2D histogram. In a 2D histogram, the full range in both columns is divided into discrete 2D bins (or pixels!) and we count how many objects fall in that 2D bin. Since a 2D histogram is a pixelated space, we can simply save it as a FITS image and view it in a FITS viewer. Let's do this in the command below. As is common with color-magnitude plots, we will put the redder magnitude on the horizontal axis and the color on the vertical axis. We will set both dimensions to have 100 bins (with @option{--numbins} for the horizontal and @option{--numbins2} for the vertical). Also, to avoid strong outliers in any of the dimensions, we will manually set the range of each dimension with the @option{--greaterequal}, @option{--greaterequal2}, @option{--lessthan} and @option{--lessthan2} options. @example $ aststatistics cat/mags-with-color.fits -cMAG-F160W,F105W-F160W \ --histogram2d=image --manualbinrange \ --numbins=100 --greaterequal=22 --lessthan=30 \ --numbins2=100 --greaterequal2=-1 --lessthan2=3 \ --manualbinrange --output=cmd.fits @end example @noindent You can now open this FITS file as a normal FITS image, for example, with the command below. Try hovering/zooming over the pixels: not only will you see the number of objects in catalog that fall in each bin/pixel, but you also see the @code{F160W} magnitude and color of that pixel also (in the same place you usually see RA and Dec when hovering over an astronomical image). @example $ astscript-fits-view cmd.fits --ds9scale=minmax @end example Having a 2D histogram as a FITS image with WCS has many great advantages. For example, just like FITS images of the night sky, you can ``match'' many 2D histograms that were created independently. You can add two histograms with each other, or you can use advanced features of FITS viewers to find structure in the correlation of your columns. @noindent With the first command below, you can activate the grid feature of DS9 to actually see the coordinate grid, as well as values on each line. With the second command, DS9 will even read the labels of the axes and use them to generate an almost publication-ready plot. @example $ astscript-fits-view cmd.fits --ds9scale=minmax --ds9extra="-grid yes" $ astscript-fits-view cmd.fits --ds9scale=minmax \ --ds9extra="-grid yes -grid type publication" @end example If you are happy with the grid and coloring and the rest, you can also use ds9 to save this as a JPEG image to directly use in your documents/slides with these extra DS9 options (DS9 will write the image to @file{cmd-2d.jpeg} and quit immediately afterwards): @example $ astscript-fits-view cmd.fits --ds9scale=minmax \ --ds9extra="-grid yes -grid type publication" \ --ds9extra="-saveimage cmd-2d.jpeg -quit" @end example @cindex PGFPlots (@LaTeX{} package) This is good for a fast progress update. But for your paper or more official report, you want to show something with higher quality. For that, you can use the PGFPlots package in @LaTeX{} to add axes in the same font as your text, sharp grids and many other elegant/powerful features (like over-plotting interesting points and lines). But to load the 2D histogram into PGFPlots first you need to convert the FITS image into a more standard format, for example, PDF. We will use Gnuastro's @ref{ConvertType} for this, and use the @code{sls-inverse} color map (which will map the pixels with a value of zero to white): @example $ astconvertt cmd.fits --colormap=sls-inverse --borderwidth=0 -ocmd.pdf @end example Open the resulting @file{cmd.pdf} and see the PDF. Below you can see a minimally working example of how to add axis numbers, labels and a grid to the PDF generated above. First, let's create a new @file{report} directory to keep the @LaTeX{} outputs, then put the minimal report's source in a file called @file{report.tex}. Notice the @code{xmin}, @code{xmax}, @code{ymin}, @code{ymax} values and how they are the same as the range specified above. @example $ mkdir report-cmd $ mv cmd.pdf report-cmd/ $ cat report-cmd/report.tex \documentclass@{article@} \usepackage@{pgfplots@} \dimendef\prevdepth=0 \begin@{document@} You can write all you want here... \begin@{tikzpicture@} \begin@{axis@}[ enlargelimits=false, grid, axis on top, width=\linewidth, height=\linewidth, xlabel=@{Magnitude (F160W)@}, ylabel=@{Color (F105W-F160W)@}] \addplot graphics[xmin=22, xmax=30, ymin=-1, ymax=3] @{cmd.pdf@}; \end@{axis@} \end@{tikzpicture@} \end@{document@} @end example @noindent Run this command to build your PDF (assuming you have @LaTeX{} and PGFPlots). @example $ cd report-cmd $ pdflatex report.tex @end example Open the newly created @file{report.pdf} and enjoy the exquisite quality. The improved quality, blending in with the text, vector-graphics resolution and other features make this plot pleasing to the eye, and let your readers focus on the main point of your scientific argument. PGFPlots can also built the PDF of the plot separately from the rest of the paper/report, see @ref{2D histogram as a table for plotting} for the necessary changes in the preamble. We will not go much deeper into the Statistics program here, but there is so much more you can do with it. After finishing the tutorial, see @ref{Statistics}. @node Aperture photometry, Matching catalogs, Column statistics color-magnitude diagram, General program usage tutorial @subsection Aperture photometry The colors we calculated in @ref{Working with catalogs estimating colors} used a different segmentation map for each object. This might not satisfy some science cases that need the flux within a fixed area/aperture. Fortunately Gnuastro's modular programs make it very easy do this type of measurement (photometry). To do this, we can ignore the labeled images of NoiseChisel of Segment, we can just built our own labeled image! That labeled image can then be given to MakeCatalog @cindex GNU AWK To generate the apertures catalog we will use Gnuastro's MakeProfiles (see @ref{MakeProfiles}). But first we need a list of positions (aperture photometry needs a-priori knowledge of your target positions). So we will first read the clump positions from the F160W catalog, then use AWK to set the other parameters of each profile to be a fixed circle of radius 5 pixels (recall that we want all apertures to have an identical size/area in this scenario). @example $ rm *.fits *.txt $ asttable cat/xdf-f160w.fits -hCLUMPS -cRA,DEC \ | awk '!/^#/@{print NR, $1, $2, 5, 5, 0, 0, 1, NR, 1@}' \ > apertures.txt $ cat apertures.txt @end example We can now feed this catalog into MakeProfiles using the command below to build the apertures over the image. The most important option for this particular job is @option{--mforflatpix}, it tells MakeProfiles that the values in the magnitude column should be used for each pixel of a flat profile. Without it, MakeProfiles would build the profiles such that the @emph{sum} of the pixels of each profile would have a @emph{magnitude} (in log-scale) of the value given in that column (what you would expect when simulating a galaxy for example). See @ref{Invoking astmkprof} for details on the options. @example $ astmkprof apertures.txt --background=flat-ir/xdf-f160w.fits \ --clearcanvas --replace --type=int16 --mforflatpix \ --mode=wcs --output=apertures.fits @end example Open @file{apertures.fits} with a FITS image viewer (like SAO DS9) and look around at the circles placed over the targets. Also open the input image and Segment's clumps image and compare them with the positions of these circles. Where the apertures overlap, you will notice that one label has replaced the other (because of the @option{--replace} option). In the future, MakeCatalog will be able to work with overlapping labels, but currently it does not. If you are interested, please join us in completing Gnuastro with added improvements like this (see task 14750 @footnote{@url{https://savannah.gnu.org/task/index.php?14750}}). We can now feed the @file{apertures.fits} labeled image into MakeCatalog instead of Segment's output as shown below. In comparison with the previous MakeCatalog call, you will notice that there is no more @option{--clumpscat} option, since there is no more separate ``clump'' image now, each aperture is treated as a separate ``object''. @example $ astmkcatalog apertures.fits -h1 --zeropoint=26.27 \ --valuesfile=nc/xdf-f105w.fits \ --ids --ra --dec --magnitude --sn \ --output=cat/xdf-f105w-aper.fits @end example This catalog has the same number of rows as the catalog produced from clumps in @ref{Working with catalogs estimating colors}. Therefore similar to how we found colors, you can compare the aperture and clump magnitudes for example. You can also change the filter name and zero point magnitudes and run this command again to have the fixed aperture magnitude in the F160W filter and measure colors on apertures. @node Matching catalogs, Reddest clumps cutouts and parallelization, Aperture photometry, General program usage tutorial @subsection Matching catalogs In the example above, we had the luxury to generate the catalogs ourselves, and where thus able to generate them in a way that the rows match. But this is not generally the case. In many situations, you need to use catalogs from many different telescopes, or catalogs with high-level calculations that you cannot simply regenerate with the same pixels without spending a lot of time or using heavy computation. In such cases, when each catalog has the coordinates of its own objects, you can use the coordinates to match the rows with Gnuastro's Match program (see @ref{Match}). As the name suggests, Gnuastro's Match program will match rows based on distance (or aperture in 2D) in one, two, or three columns. For this tutorial, let's try matching the two catalogs that were not created from the same labeled images, recall how each has a different number of rows: @example $ asttable cat/xdf-f105w.fits -hCLUMPS -i $ asttable cat/xdf-f160w.fits -hCLUMPS -i @end example You give Match two catalogs (from the two different filters we derived above) as argument, and the HDUs containing them (if they are FITS files) with the @option{--hdu} and @option{--hdu2} options. The @option{--ccol1} and @option{--ccol2} options specify the coordinate-columns which should be matched with which in the two catalogs. With @option{--aperture} you specify the acceptable error (radius in 2D), in the same units as the columns. @example $ astmatch cat/xdf-f160w.fits cat/xdf-f105w.fits \ --hdu=CLUMPS --hdu2=CLUMPS \ --ccol1=RA,DEC --ccol2=RA,DEC \ --aperture=0.5/3600 \ --output=matched.fits $ astfits matched.fits @end example From the second command, you see that the output has two extensions and that both have the same number of rows. The rows in each extension are the matched rows of the respective input table: those in the first HDU come from the first input and those in the second HDU come from the second. However, their order may be different from the input tables because the rows match: the first row in the first HDU matches with the first row in the second HDU, etc. You can also see which objects did not match with the @option{--notmatched}, like below. Note how each extension of now has a different number of rows. @example $ astmatch cat/xdf-f160w.fits cat/xdf-f105w.fits \ --hdu=CLUMPS --hdu2=CLUMPS \ --ccol1=RA,DEC --ccol2=RA,DEC \ --aperture=0.5/3600 \ --output=not-matched.fits --notmatched $ astfits not-matched.fits @end example The @option{--outcols} of Match is a very convenient feature: you can use it to specify which columns from the two catalogs you want in the output (merge two input catalogs into one). If the first character is an `@key{a}', the respective matched column (number or name, similar to Table above) in the first catalog will be written in the output table. When the first character is a `@key{b}', the respective column from the second catalog will be written in the output. Also, if the first character is followed by @code{_all}, then all the columns from the respective catalog will be put in the output. @example $ astmatch cat/xdf-f160w.fits cat/xdf-f105w.fits \ --hdu=CLUMPS --hdu2=CLUMPS \ --ccol1=RA,DEC --ccol2=RA,DEC \ --aperture=0.35/3600 \ --outcols=a_all,bMAGNITUDE,bSN \ --output=matched.fits $ astfits matched.fits @end example @node Reddest clumps cutouts and parallelization, FITS images in a publication, Matching catalogs, General program usage tutorial @subsection Reddest clumps, cutouts and parallelization @cindex GNU AWK As a final step, let's go back to the original clumps-based color measurement we generated in @ref{Working with catalogs estimating colors}. We will find the objects with the strongest color and make a cutout to inspect them visually and finally, we will see how they are located on the image. With the command below, we will select the reddest objects (those with a color larger than 1.5): @example $ asttable cat/mags-with-color.fits --range=F105W-F160W,1.5,inf @end example @noindent You can see how many they are by piping it to @code{wc -l}: @example $ asttable cat/mags-with-color.fits --range=F105W-F160W,1.5,inf | wc -l @end example Let's crop the F160W image around each of these objects, but we first need a unique identifier for them. We will define this identifier using the object and clump labels (with an underscore between them) and feed the output of the command above to AWK to generate a catalog. Note that since we are making a plain text table, we will define the necessary (for the string-type first column) metadata manually (see @ref{Gnuastro text table format}). @example $ echo "# Column 1: ID [name, str10] Object ID" > cat/reddest.txt $ asttable cat/mags-with-color.fits --range=F105W-F160W,1.5,inf \ | awk '@{printf("%d_%-10d %f %f\n", $1, $2, $3, $4)@}' \ >> cat/reddest.txt @end example @cindex DS9 @cindex SAO DS9 Let's see how these objects are positioned over the dataset. DS9 has the ``Region''s concept for this purpose. And you build such regions easily from a table using Gnuastro's @command{astscript-ds9-region} installed script, using the command below: @example $ astscript-ds9-region cat/reddest.txt -c2,3 --mode=wcs \ --command="ds9 flat-ir/xdf-f160w.fits -zscale" @end example We can now feed @file{cat/reddest.txt} into Gnuastro's Crop program to get separate postage stamps for each object. To keep things clean, we will make a directory called @file{crop-red} and ask Crop to save the crops in this directory. We will also add a @file{-f160w.fits} suffix to the crops (to remind us which filter they came from). The width of the crops will be 15 arc-seconds (or 15/3600 degrees, which is the units of the WCS). @example $ mkdir crop-red $ astcrop flat-ir/xdf-f160w.fits --mode=wcs --namecol=ID \ --catalog=cat/reddest.txt --width=15/3600,15/3600 \ --suffix=-f160w.fits --output=crop-red @end example Like the MakeProfiles command in @ref{Aperture photometry}, if you look at the order of the crops, you will notice that the crops are not made in order! This is because each crop is independent of the rest, therefore crops are done in parallel, and parallel operations are asynchronous. So the order can differ in each run, but the final output is the same! In the command above, you can change @file{f160w} to @file{f105w} to make the crops in both filters. You can see all the cropped FITS files in the @file{crop-red} directory with this command: @example $ astscript-fits-view crop-red/*.fits @end example To view the crops more easily (not having to open ds9 for each image), you can convert the FITS crops into the JPEG format with a shell loop like below. @example $ cd crop-red $ for f in *.fits; do \ astconvertt $f --fluxlow=-0.001 --fluxhigh=0.005 --invert -ojpg; \ done $ cd .. $ ls crop-red/ @end example You can now use your general graphic user interface image viewer to flip through the images more easily, or import them into your papers/reports. @cindex GNU Make @cindex @file{Makefile} The @code{for} loop above to convert the images will do the job in series: each file is converted only after the previous one is complete. But like the crops, each JPEG image is independent, so let's parallelize it. In other words, we want to run more than one instance of the command at any moment. To do that, we will use @url{https://en.wikipedia.org/wiki/Make_(software), Make}. Make is a very wonderful pipeline management system, and the most common and powerful implementation is @url{https://www.gnu.org/software/make, GNU Make}, which has a complete manual just like this one. We cannot go into the details of Make here, for a hands-on video tutorial, see this @url{https://peertube.stream/w/iJitjS3r232Z8UPMxKo6jq, video introduction}. To do the process above in Make, please copy the contents below into a plain-text file called @file{Makefile}. Just replace the @code{__[TAB]__} part at the start of the line with a single `@key{TAB}' button on your keyboard. @example jpgs=$(subst .fits,.jpg,$(wildcard *.fits)) all: $(jpgs) $(jpgs): %.jpg: %.fits __[TAB]__astconvertt $< --fluxlow=-0.001 --fluxhigh=0.005 \ __[TAB]__ --invert -o$@ @end example Now that the @file{Makefile} is ready, you can run Make on 12 threads using the commands below. Feel free to replace the 12 with any number of threads you have on your system (you can find out by running the @command{nproc} command on GNU/Linux operating systems): @example $ make -j12 @end example @noindent Did you notice how much faster this one was? When possible, it is always very helpful to do your analysis in parallel. You can build very complex workflows with Make, for example, see Akhlaghi @url{https://arxiv.org/abs/2006.03018,2021} so it is worth spending some time to master. @node FITS images in a publication, Marking objects for publication, Reddest clumps cutouts and parallelization, General program usage tutorial @subsection FITS images in a publication In the previous section (@ref{Reddest clumps cutouts and parallelization}), we visually inspected the positions of the reddest objects using DS9. That is very good for an interactive inspection of the objects: you can zoom-in and out, you can do measurements, etc. Once the experimentation phase of your project is complete, you want to show these objects over the whole image in a report, paper or slides. One solution is to use DS9 itself! For example, run the @command{astscript-fits-view} command of the previous section to open DS9 with the regions over-plotted. Click on the ``File'' menu and select ``Save Image''. In the side-menu that opens, you have multiple formats to select from. Usually for publications, we want to show the regions and text (in the colorbar) in vector graphics, so it is best to export to EPS. Once you have made the EPS, you can then convert it to PDF with the @command{epspdf} command. Another solution is to use Gnuastro's ConvertType program. The main difference is that DS9 is a Graphic User Interface (GUI) program, so it takes relatively long (about a second) to load, and it requires many dependencies. This will slow-down automatic conversion of many files, and will make your code hard to move to another operating system. DS9 does have a command-line interface that you can use to automate the creation of each file, however, it has a very peculiar command-line interface and formats (like the ``region'' files). However, in ConvertType, there is no graphic interface, so it has very few dependencies, it is fast, and finally, it takes normal tables (in plain-text or FITS) as input. So in this concluding step of the analysis, let's build a nice publication-ready plot, showing the positions of the reddest objects in the image for our paper. In @ref{Reddest clumps cutouts and parallelization}, we already used ConvertType to make JPEG postage stamps. Here, we will use it to make a PDF image of the whole deep region. To start, let's simply run ConvertType on the F160W image: @example $ astconvertt flat-ir/xdf-f160w.fits -oxdf.pdf @end example Open the output in a PDF viewer. You see that it is almost fully black! Let's see why this happens! First, with the two commands below, let's calculate the maximum value, and the standard deviation of the sky in this image (using NoiseChisel's output, which we found at the end of @ref{NoiseChisel optimization for detection}). Note that NoiseChisel writes the median sky standard deviation @emph{before} interpolation in the @code{MEDSTD} keyword of the @code{SKY_STD} HDU. This is more robust than the median of the Sky standard deviation image (which has gone through interpolation). @example $ max=$(aststatistics nc/xdf-f160w.fits -hINPUT-NO-SKY --maximum) $ skystd=$(astfits nc/xdf-f160w.fits -hSKY_STD --keyvalue=MEDSTD -q) $ echo $max $skystd 58.8292 0.000410282 $ echo $max $skystd | awk '@{print $1/$2@}' 143387 @end example @noindent In the last command above, we divided the maximum by the sky standard deviation. You see that the maximum value is more than @mymath{140000} times larger than the noise level! On the other hand common monitors or printers, usually have a maximum dynamic range of 8-bits, only allowing for @mymath{2^8=256} layers. This is therefore the maximum number of ``layers'' you can have in a common display formats like JPEG, PDF or PNG! Dividing the result above by 256, we get a layer spacing of @example $ echo $max $skystd | awk '@{print $1/$2/256@}' 560.106 @end example In other words, the first layer (which is black) will contain all the pixel values below @mymath{\sim560}! So all pixels with a signal-to-noise ratio lower than @mymath{\sim560} will have a black color since they fall in the first layer of an 8-bit PDF (or JPEG) image. This happens because by default we are assuming a linear mapping from floating point to 8-bit integers. @cindex Surface Brightness To fix this, we should move to a different mapping. A good, physically motivated, mapping is Surface Brightness (which is in log-scale, see @ref{Brightness flux magnitude}). Fortunately this is very easy to do with Gnuastro's Arithmetic program, as shown in the commands below (using the known zero point@footnote{@url{https://archive.stsci.edu/prepds/xdf/#science-images}}, and after calculating the pixel area in units of arcsec@mymath{^2}): @example $ zeropoint=25.94 $ pixarcsec2=$(astfits nc/xdf-f160w.fits --pixelareaarcsec2) $ astarithmetic nc/xdf-f160w.fits $zeropoint $pixarcsec2 counts-to-sb \ --output=xdf-f160w-sb.fits @end example @noindent With the two commands below, first, let's look at the dynamic range of the image now (dividing the maximum by the minimum), and then let's open the image and have a look at it: @example $ aststatistics xdf-f160w-sb.fits --minimum --maximum $ astscript-fits-view xdf-f160w-sb.fits @end example @noindent The good news is that the dynamic range has now decreased to about 2! In other words, we can distribute the 256 layers of an 8-bit display over a much smaller range of values, and therefore better visualize the data. However, there are two important points to consider from the output of the first command and a visual inspection of the second. @itemize @item The largest pixel value (faintest surface brightness level) in the image is @mymath{\sim43}! This is far too low to be realistic, and is just due to noise. As discussed in @ref{Measuring the dataset limits}, the @mymath{3\sigma} surface brightness limit of this image, over 100 arcsec@mymath{^2} is roughly 32.66 mag/arcsec@mymath{^2}. @item You see many NaN pixels in between the galaxies! These are due to the fact that the magnitude is defined on a logarithmic scale and the logarithm of a negative number is not defined. @end itemize In other words, we should replace all NaN pixels, and pixels with a surface brightness value fainter than the image surface brightness limit to this limit. With the first command below, we will first extract the surface brightness limit from the catalog headers that we calculated before, and then call Arithmetic to use this limit. @example $ sblimit=$(astfits cat/xdf-f160w.fits --keyvalue=SBLMAG -q) $ astarithmetic nc/xdf-f160w.fits $zeropoint $pixarcsec2 \ counts-to-sb set-sb \ sb sb $sblimit gt sb isblank or $sblimit where \ --output=xdf-f160w-sb.fits @end example @noindent Let's convert this image into a PDF with the command below: @example $ astconvertt xdf-f160w-sb.fits --output=xdf-f160w-sb.pdf @end example It is much better now and we can visualize many features of the FITS file (from the central structures of the galaxies and stars, to a little into the noise and their low surface brightness features. However, the image generally looks a little too gray! This is because of that bright star in the bottom half of the image! Stars are very sharp! So let's manually tell ConvertType to set any pixel with a value less than (brighter than) 20 to black (and not use the minimum). We do this with the @option{--fluxlow} option: @example $ astconvertt xdf-f160w-sb.fits --output=xdf-f160w-sb.pdf --fluxlow=20 @end example We are still missing some of the diffuse flux in this PDF. This is because of those negative pixels that were set to NaN. To better show these structures, we should warp the image to larger pixels. So let's warp it to a pixel grid where the new pixels are @mymath{4\times4} larger than the original pixels. But be careful that warping should be done on the original image, not on the surface brightness image. We should re-calculate the surface brightness image after the warping is one. This is because @mymath{log(a+b)\ne log(a)+log(b)}. Recall that surface brightness calculation involves a logarithm, and warping involves addition of pixel values. @example $ astwarp nc/xdf-f160w.fits --scale=1/4 --centeroncorner \ --output=xdf-f160w-warped.fits $ pixarcsec2=$(astfits xdf-f160w-warped.fits --pixelareaarcsec2) $ astarithmetic xdf-f160w-warped.fits $zeropoint $pixarcsec2 \ counts-to-sb set-sb \ sb sb $sblimit gt sb isblank or $sblimit where \ --output=xdf-f160w-sb.fits $ astconvertt xdf-f160w-sb.fits --output=xdf-f160w-sb.pdf --fluxlow=20 @end example Above, we needed to re-calculate the pixel area of the warpped image, but we did not need to re-calculate the surface brightness limit! The reason is that the surface brightness limit is independent of the pixel area (in its derivation, the pixel area has been accounted for). As a side-effect of the warping, the number of pixels in the image also dramatically decreased, therefore the volume of the output PDF (in bytes) is also smaller, making your paper/report easier to upload/download or send by email. This visual resolution is still more than enough for including on top of a column in your paper! @cartouche @noindent @strong{I do not have the zero point of my image:} The absolute value of the zero point is irrelevant for the finally produced PDF. We used it here because it was available and makes the numbers physically understandable. If you do not have the zero point, just set it to zero (which is also the default zero point used by MakeCatalog when it estimates the surface brightness limit). For the value to @option{--fluxlow} above, you can simply subtract @mymath{\sim10} from the surface brightness limit. @end cartouche @noindent To summarize, and to keep the image for the next section in a separate directory, here are the necessary commands: @example $ zeropoint=25.94 $ mkdir report-image $ cd report-image $ sblimit=$(astfits cat/xdf-f160w.fits --keyvalue=SBLMAG -q) $ astwarp nc/xdf-f160w.fits --scale=1/4 --centeroncorner \ --output=warped.fits $ pixarcsec2=$(astfits warped.fits --pixelareaarcsec2) $ astarithmetic warped.fits $zeropoint $pixarcsec2 \ counts-to-sb set-sb \ sb sb $sblimit gt sb isblank or $sblimit where \ --output=sb.fits $ astconvertt sb.fits --output=sb.pdf --fluxlow=20 @end example @noindent Finally, let's remove all the temporary files we built in the top-level tutorial directory: @example $ rm *.fits *.pdf @end example @cartouche @noindent @strong{Color images:} In this tutorial we just used one of the filters and showed the surface brightness image of that single filter as a grayscale image. But the image can also be in color (using three filters) to better convey the physical properties of the objects in your image. To create an image that shows the full dynamic range of your data, see this dedicated tutorial @ref{Color images with full dynamic range}. @end cartouche @node Marking objects for publication, Writing scripts to automate the steps, FITS images in a publication, General program usage tutorial @subsection Marking objects for publication In @ref{FITS images in a publication} we created a ready-to-print visualization of the FITS image used in this tutorial. However, you rarely want to show a naked image like that! You usually want to highlight some objects (that are the target of your science) over the image and show different marks for the various types of objects you are studying. In this tutorial, we will do just that: select a sub-set of the full catalog of clumps, and show them with different marks shapes and colors, while also adding some text under each mark. To add coordinates on the edges of the figure in your paper, see @ref{Annotations for figure in paper}. To start with, let's put a red plus sign over the sub-sample of reddest clumps similar to @ref{Reddest clumps cutouts and parallelization}. First, we will need to make the table of marks. We will choose those with a color stronger than 1.5 magnitudes and a signal-to-noise ratio (in F160W) larger than 5. We also only need the RA, Dec, color and magnitude (in F160W) columns (recall that at the end of the previous section we were already in the @file{report-image/} directory): @example $ asttable cat/mags-with-color.fits --range=F105W-F160W,1.5:inf \ --range=sn-f160w,5:inf -cRA,DEC,MAG-F160w,F105W-F160W \ --output=reddest-cat.fits @end example Gnuastro's ConvertType program also has features to add marks over the finally produced PDF. Below, we will start with the same @command{astconvertt} command of the previous section. The positions of the marks should be given as a table to the @option{--marks} option. Two other options are also mandatory: @option{--markcoords} identifies the columns that contain the coordinates of each mark and @option{--mode} specifies if the coordinates are in image or WCS coordinates. @example $ astconvertt sb.fits --output=reddest.pdf --fluxlow=20 \ --marks=reddest-cat.fits --mode=wcs \ --markcoords=RA,DEC @end example Open the output @file{reddest.pdf} and see the result. You will see relatively thick red circles placed over the given coordinates. In your PDF browser, zoom-in to one of the regions, you will see that while the pixels of the background image become larger, the lines of these regions do not degrade! This is the concept/power of Vector Graphics: ideal for publication! For more on raster (pixelated) and vector (infinite-resolution) graphics, see @ref{Raster and Vector graphics}. We had planned to put a plus-sign on each object. However, because we did not explicitly ask for a certain shape, ConvertType put a circle. Each mark can have its own separate shape. Shapes can be given by a name or a code. The full list of available shapes names and codes is given in the description of @option{--markshape} option of @ref{Drawing with vector graphics}. To use a different shape, we need to add a new column to the base table, containing the identifier of the desired shape for each mark. For example, the code for the plus sign is @code{2}. With the commands below, we will add a new column with this fixed value. With the first AWK command we will make a single-column file, where all the rows have the same value. We pipe our base table into AWK, so it has the same number of rows. With the second command, we concatenate (or append) the new column with Table, and give this new column the name @code{SHAPE} (to easily refer to it later and not have to count). With the third command, we clean-up behind our selves (deleting the extra @file{params.txt} file). Finally, we use the @option{--markshape} option to tell ConvertType which column to use for the shape identifier. @example $ asttable reddest-cat.fits | awk '@{print 2@}' > params.txt $ asttable reddest-cat.fits --catcolumnfile=params.txt \ --colmetadata=5,SHAPE,id,"Shape of mark" \ --output=reddest-marks.fits $ rm params.txt $ astconvertt sb.fits --output=reddest.pdf --fluxlow=20 \ --marks=reddest-marks.fits --mode=wcs \ --markcoords=RA,DEC --markshape=SHAPE @end example Open the PDF and have a look! You do see red signs over the coordinates, but the thick plus-signs only become visible after you zoom-in multiple times! To make them larger, you can give another column to specify the size of each mark. Let's set the full width of the plus sign to extend 3 arcseconds. The commands are similar to above, try to follow the difference (in particular, how we use @option{--sizeinarcsec}). @example $ asttable reddest-cat.fits | awk '@{print 2, 3@}' > params.txt $ asttable reddest-cat.fits --catcolumnfile=params.txt \ --colmetadata=5,SHAPE,id,"Shape of mark" \ --colmetadata=6,SIZE,arcsec,"Size in arcseconds" \ --output=reddest-marks.fits $ rm params.txt $ astconvertt sb.fits --output=reddest.pdf --fluxlow=20 \ --marks=reddest-marks.fits --mode=wcs \ --markcoords=RA,DEC --markshape=SHAPE \ --marksize=SIZE --sizeinarcsec @end example The power of this methodology is that each mark can be completely different! For example, let's show the objects with a color less than 2 magnitudes with a circle, and those with a stronger color with a plus (recall that the code for a circle was @code{1} and that of a plus was @code{2}). You only need to replace the first command above with the one below. Afterwards, run the rest of the commands in the last code-block. @example $ asttable reddest-cat.fits -cF105W-F160W \ | awk '@{if($1<2) shape=1; else shape=2; print shape, 3@}' \ > params.txt @end example Have a look at the resulting @file{reddest.pdf}. You see that the circles are much larger than the plus signs. This is because the ``size'' of a cross is defined to be its full width, but for a circle, the value in the size column is the radius. The way each shape interprets the value of the size column is fully described under @option{--markshape} of @ref{Drawing with vector graphics}. To make them more comparable, let's set the circle sizes to be half of the cross sizes. @example $ asttable reddest-cat.fits -cF105W-F160W \ | awk '@{if($1<2) @{shape=1; size=1.5@} \ else @{shape=2; size=3@} \ print shape, size@}' \ > params.txt @end example Let's make things a little more complex (and show more information in the visualization) by using color. Gnuastro recognizes the full @url{https://en.wikipedia.org/wiki/Web_colors#Extended_colors, extended web colors}, for their full list (containing names and codes) see @ref{Vector graphics colors}. But like everything else, an even easier way to view and select the color for your figure is on the command-line! If your terminal supports 24-bit true-color, you can see all the colors by running this command (supported on modern GNU/Linux distributions): @example $ astconvertt --listcolors @end example we will give a ``Sienna'' color for the objects that are fainter than 29th magnitude and a ``deeppink'' color to the brighter ones (while keeping the same shapes definition as before) Since there are many colors, using their codes can make the table hard to read by a human! So let's use the color names instead of the color codes in the example below (this is useful in other columns require strings-only, like the font name). The only intricacy is in the making of @file{params.txt}. Recall that string columns need column metadata (@ref{Gnuastro text table format}). In this particular case, since the string column is the last one, we can safely use AWK's @code{print} command. But if you have multiple string columns, to be safe it is better to use AWK's @code{printf} and explicitly specify the number of characters in the string columns. @example $ asttable reddest-cat.fits -cF105W-F160W,MAG-F160W \ | awk 'BEGIN@{print "# Column 3: COLOR [name, str8]"@}\ @{if($1<2) @{shape=1; size=1.5@} \ else @{shape=2; size=3@} \ if($2>29) @{color="sienna"@} \ else @{color="deeppink"@} \ print shape, size, color@}' \ > params.txt $ asttable reddest-cat.fits --catcolumnfile=params.txt \ --colmetadata=5,SHAPE,id,"Shape of mark" \ --colmetadata=6,SIZE,arcsec,"Size in arcseconds" \ --output=reddest-marks.fits $ rm params.txt $ astconvertt sb.fits --output=reddest.pdf --fluxlow=20 \ --marks=reddest-marks.fits --mode=wcs \ --markcoords=RA,DEC --markshape=SHAPE \ --marksize=SIZE --sizeinarcsec --markcolor=COLOR @end example As one final example, let's write the magnitude of each object under it. Since the magnitude is already in the @file{marks.fits} that we produced above, it is very easy to add it (just add @option{--marktext} option to ConvertType): @example $ astconvertt sb.fits --output=reddest.pdf --fluxlow=20 \ --marks=reddest-marks.fits --mode=wcs \ --markcoords=RA,DEC --markshape=SHAPE \ --marksize=SIZE --sizeinarcsec \ --markcolor=COLOR --marktext=MAG-F160W @end example Open the final PDF (@file{reddest.pdf}) and you will see the magnitudes written under each mark in the same color. In the case of magnitudes (where the magnitude error is usually much larger than 0.01 magnitudes, four decimals is not too meaningful. By default, for printing floating point columns, we use the compiler's default precision (which is about 4 digits for 32-bit floating point numbers). But you can over-write this (to only show two digits after the decimal point) with the @option{--marktextprecision=2} option. You can customize the written text by specifying a different line-width (for the text, different from the main mark), or even specifying a different font for each mark! You can see the full list of available fonts for the text under a mark with the first command below and with the second, you can actually see them in a custom PDF (to only show the fonts). @example $ astconvertt --listfonts $ astconvertt --showfonts @end example As you see, there are many ways you can customize each mark! The above examples were just the tip of the iceburg! But this section has already become long so we will stop it here (see the box at the end of this section for yet another useful example). Like above, each feature of a mark can be controlled with a column in the table of mark information. Please see in @ref{Drawing with vector graphics} for the full list of columns/features that you can use. @cartouche @noindent @strong{Drawing ellipses:} With the commands below, you can measure the elliptical properties of the objects and visualized them in a ready-to-publish PDF (we will only show the ellipses of the largest clumps): @example $ astmkcatalog ../seg/xdf-f160w.fits --ra --dec --semi-major \ --axis-ratio --position-angle --clumpscat \ --output=ellipseinfo.fits $ asttable ellipseinfo.fits -hCLUMPS | awk '@{print 4@}' > params.txt $ asttable ellipseinfo.fits -hCLUMPS --catcolumnfile=params.txt \ --range=SEMI_MAJOR,10,inf -oellipse-marks.fits \ --colmetadata=6,SHAPE,id,"Shape of mark" $ astconvertt sb.fits --output=ellipse.pdf --fluxlow=20 \ --marks=ellipse-marks.fits --mode=wcs \ --markcoords=RA,DEC --markshape=SHAPE \ --marksize=SEMI_MAJOR,AXIS_RATIO --sizeinpix \ --markrotate=POSITION_ANGLE @end example @end cartouche @cindex Point (Vector graphics; PostScript) To conclude this section, let us highlight an important factor to consider in vector graphics. In ConvertType, things like line width or font size are defined in units of @emph{points}. In vector graphics standards, 72 points correspond to one inch. Therefore, one way you can change these factors for all the objects is to assign a larger or smaller print size to the image. The print size is just a meta-data entry, and will not affect the file's volume in bytes! You can do this with the @option{--widthincm} option. Try adding this option and giving it very different values like @code{5} or @code{30}. @node Writing scripts to automate the steps, Citing and acknowledging Gnuastro, Marking objects for publication, General program usage tutorial @subsection Writing scripts to automate the steps In the previous sub-sections, we went through a series of steps like downloading the necessary datasets (in @ref{Setup and data download}), detecting the objects in the image, and finally selecting a particular subset of them to inspect visually (in @ref{Reddest clumps cutouts and parallelization}). To benefit most effectively from this subsection, please go through the previous sub-sections, and if you have not actually done them, we recommended to do/run them before continuing here. @cindex @command{history} @cindex Shell history Each sub-section/step of the sub-sections above involved several commands on the command-line. Therefore, if you want to reproduce the previous results (for example, to only change one part, and see its effect), you'll have to go through all the sections above and read through them again. If you have ran the commands recently, you may also have them in the history of your shell (command-line environment). You can see many of your previous commands on the shell (even if you have closed the terminal) with the @command{history} command, like this: @example $ history @end example @cindex GNU Bash Try it in your teminal to see for yourself. By default in GNU Bash, it shows the last 500 commands. You can also save this ``history'' of previous commands to a file using shell redirection (to have it after your next 500 commands), with this command @example $ history > my-previous-commands.txt @end example This is a good way to temporarily keep track of every single command you ran. But in the middle of all the useful commands, you will have many extra commands, like tests that you did before/after the good output of a step (that you decided to continue working on), or an unrelated job you had to do in the middle of this project. Because of these impurities, after a few days (that you have forgot the context: tests you did not end-up using, or unrelated jobs) reading this full history will be very frustrating. Keeping the final commands that were used in each step of an analysis is a common problem for anyone who is doing something serious with the computer. But simply keeping the most important commands in a text file is not enough, the small steps in the middle (like making a directory to keep the outputs of one step) are also important. In other words, the only way you can be sure that you are under control of your processing (and actually understand how you produced your final result) is to run the commands automatically. @cindex Shell script @cindex Script, shell Fortunately, typing commands interactively with your fingers is not the only way to operate the shell. The shell can also take its orders/commands from a plain-text file, which is called a @emph{script}. When given a script, the shell will read it line-by-line as if you have actually typed it manually. @cindex Redirection in shell @cindex Shell redirection Let's continue with an example: try typing the commands below in your shell. With these commands we are making a text file (@code{a.txt}) containing a simple @mymath{3\times3} matrix, converting it to a FITS image and computing its basic statistics. After the first three commands open @file{a.txt} with a text editor to actually see the values we wrote in it, and after the fourth, open the FITS file to see the matrix as an image. @file{a.txt} is created through the shell's redirection feature: `@code{>}' overwrites the existing contents of a file, and `@code{>>}' appends the new contents after the old contents. @example $ echo "1 1 1" > a.txt $ echo "1 2 1" >> a.txt $ echo "1 1 1" >> a.txt $ astconvertt a.txt --output=a.fits $ aststatistics a.fits @end example To automate these series of commands, you should put them in a text file. But that text file must have two special features: 1) It should tell the shell what program should interpret the script. 2) The operating system should know that the file can be directly executed. @cindex Shebang @cindex Hashbang For the first, Unix-like operating systems define the @emph{shebang} concept (also known as @emph{sha-bang} or @emph{hashbang}). In the shebang convention, the first two characters of a file should be `@code{#!}'. When confronted with these characters, the script will be interpreted with the program that follows them. In this case, we want to write a shell script and the most common shell program is GNU Bash which is installed in @file{/bin/bash}. So the first line of your script should be `@code{#!/bin/bash}'@footnote{ When the script is to be run by the same shell that is calling it (like this script), the shebang is optional. But it is still recommended, because it ensures that even if the user is not using GNU Bash, the script will be run in GNU Bash: given the differences between various shells, writing truly portable shell scripts, that can be run by many shell programs/implementations, is not easy (sometimes not possible!).}. It may happen (rarely) that GNU Bash is in another location on your system. In other cases, you may prefer to use a non-standard version of Bash installed in another location (that has higher priority in your @code{PATH}, see @ref{Installation directory}). In such cases, you can use the `@code{#!/usr/bin/env bash}' shebang instead. Through the @code{env} program, this shebang will look in your @code{PATH} and use the first @command{bash} it finds to run your script. But for simplicity in the rest of the tutorial, we will continue with the `@code{#!/bin/bash}' shebang. Using your favorite text editor, make a new empty file, let's call it @file{my-first-script.sh}. Write the GNU Bash shebang (above) as its first line. After the shebang, copy the series of commands we ran above. Just note that the `@code{$}' sign at the start of every line above is the prompt of the interactive shell (you never actually typed it, remember?). Therefore, commands in a shell script should not start with a `@code{$}'. Once you add the commands, close the text editor and run the @command{cat} command to confirm its contents. It should look like the example below. Recall that you should only type the line that starts with a `@code{$}', the lines without a `@code{$}', are printed automatically on the command-line (they are the contents of your script). @example $ cat my-first-script.sh #!/bin/bash echo "1 1 1" > a.txt echo "1 2 1" >> a.txt echo "1 1 1" >> a.txt astconvertt a.txt --output=a.fits aststatistics a.fits @end example @cindex File flags @cindex Flags, file The script contents are now ready, but to run it, you should activate the script file's @emph{executable flag}. In Unix-like operating systems, every file has three types of flags: @emph{read} (or @code{r}), @emph{write} (or @code{w}) and @emph{execute} (or @code{x}). To toggle a file's flags, you should use the @command{chmod} (for ``change mode'') command. To activate a flag, you put a `@code{+}' before the flag character (for example, @code{+x}). To deactivate it, you put a `@code{-}' (for example, @code{-x}). In this case, you want to activate the script's executable flag, so you should run @example $ chmod +x my-first-script.sh @end example Your script is now ready to run/execute the series of commands. To run it, you should call it while specifying its location in the file system. Since you are currently in the same directory as the script, it is easiest to use relative addressing like below (where `@code{./}' means the current directory). But before running your script, first delete the two @file{a.txt} and @file{a.fits} files that were created when you interactively ran the commands. @example $ rm a.txt a.fits $ ls $ ./my-first-script.sh $ ls @end example @noindent The script immediately prints the statistics while doing all the previous steps in the background. With the last @command{ls}, you see that it automatically re-built the @file{a.txt} and @file{a.fits} files, open them and have a look at their contents. An extremely useful feature of shell scripts is that the shell will ignore anything after a `@code{#}' character. You can thus add descriptions/comments to the commands and make them much more useful for the future. For example, after adding comments, your script might look like this: @example $ cat my-first-script.sh #!/bin/bash # This script is my first attempt at learning to write shell scripts. # As a simple series of commands, I am just building a small FITS # image, and calculating its basic statistics. # Write the matrix into a file. echo "1 1 1" > a.txt echo "1 2 1" >> a.txt echo "1 1 1" >> a.txt # Convert the matrix to a FITS image. astconvertt a.txt --output=a.fits # Calculate the statistics of the FITS image. aststatistics a.fits @end example @noindent Is Not this much more easier to read now? Comments help to provide human-friendly context to the raw commands. At the time you make a script, comments may seem like an extra effort and slow you down. But in one year, you will forget almost everything about your script and you will appreciate the effort so much! Think of the comments as an email to your future-self and always put a well-written description of the context/purpose (most importantly, things that are not directly clear by reading the commands) in your scripts. The example above was very basic and mostly redundant series of commands, to show the basic concepts behind scripts. You can put any (arbitrarily long and complex) series of commands in a script by following the two rules: 1) add a shebang, and 2) enable the executable flag. In fact, as you continue your own research projects, you will find that any time you are dealing with more than two or three commands, keeping them in a script (and modifying that script, and running it) is much more easier, and future-proof, then typing the commands directly on the command-line and relying on things like @command{history}. Here are some tips that will come in handy when you are writing your scripts: As a more realistic example, let's have a look at a script that will do the steps of @ref{Setup and data download} and @ref{Dataset inspection and cropping}. In particular note how often we are using variables to avoid repeating fixed strings of characters (usually file/directory names). This greatly helps in scaling up your project, and avoiding hard-to-find bugs that are caused by typos in those fixed strings. @example $ cat gnuastro-tutorial-1.sh #!/bin/bash # Download the input datasets # --------------------------- # # The default file names have this format (where `FILTER' differs for # each filter): # hlsp_xdf_hst_wfc3ir-60mas_hudf_FILTER_v1_sci.fits # To make the script easier to read, a prefix and suffix variable are # used to sandwich the filter name into one short line. dldir=download xdfsuffix=_v1_sci.fits xdfprefix=hlsp_xdf_hst_wfc3ir-60mas_hudf_ xdfurl=http://archive.stsci.edu/pub/hlsp/xdf # The file name and full URLs of the input data. f105w_in=$xdfprefix"f105w"$xdfsuffix f160w_in=$xdfprefix"f160w"$xdfsuffix f105w_url=$xdfurl/$f105w_in f160w_url=$xdfurl/$f160w_in # Go into the download directory and download the images there, # then come back up to the top running directory. mkdir $dldir cd $dldir wget $f105w_url wget $f160w_url cd .. # Only work on the deep region # ---------------------------- # # To help in readability, each vertice of the deep/flat field is stored # as a separate variable. They are then merged into one variable to # define the polygon. flatdir=flat-ir vertice1="53.187414,-27.779152" vertice2="53.159507,-27.759633" vertice3="53.134517,-27.787144" vertice4="53.161906,-27.807208" f105w_flat=$flatdir/xdf-f105w.fits f160w_flat=$flatdir/xdf-f160w.fits deep_polygon="$vertice1:$vertice2:$vertice3:$vertice4" mkdir $flatdir astcrop --mode=wcs -h0 --output=$f105w_flat \ --polygon=$deep_polygon $dldir/$f105w_in astcrop --mode=wcs -h0 --output=$f160w_flat \ --polygon=$deep_polygon $dldirdir/$f160w_in @end example The first thing you may notice is that even if you already have the downloaded input images, this script will always try to re-download them. Also, if you re-run the script, you will notice that @command{mkdir} prints an error message that the download directory already exists. Therefore, the script above is not too useful and some modifications are necessary to make it more generally useful. Here are some general tips that are often very useful when writing scripts: @table @strong @item Stop script if a command crashes By default, if a command in a script crashes (aborts and fails to do what it was meant to do), the script will continue onto the next command. In GNU Bash, you can tell the shell to stop a script in the case of a crash by adding this line at the start of your script: @example set -e @end example @item Check if a file/directory exists to avoid re-creating it Conditionals are a very useful feature in scripts. One common conditional is to check if a file exists or not. Assuming the file's name is @file{FILENAME}, you can check its existance (to avoid re-doing the commands that build it) like this: @example if [ -f FILENAME ]; then echo "FILENAME exists" else # Some commands to generate the file echo "done" > FILENAME fi @end example To check the existance of a directory instead of a file, use @code{-d} instead of @code{-f}. To negate a conditional, use `@code{!}' and note that conditionals can be written in one line also (useful for when it is short). One common scenario that you'll need to check the existance of directories is when you are making them: the default @command{mkdir} command will crash if the desired directory already exists. On some systems (including GNU/Linux distributions), @code{mkdir} has options to deal with such cases. But if you want your script to be portable, it is best to check yourself like below: @example if ! [ -d DIRNAME ]; then mkdir DIRNAME; fi @end example @item Avoid changing directories (with `@code{cd}') within the script You can directly read and write files within other directories. Therefore using @code{cd} to enter a directory (like what we did above, around the @code{wget} commands), running command there and coming out is extra, and not good practice. This is because the running directory is part of the environment of a command. You can simply give the directory name before the input and output file names to use them from anywhere on the file system. See the same @code{wget} commands below for an example. @end table @cartouche @noindent @strong{Copyright notice:} A very important thing to put @emph{at the top} of your script is a one-line description of what it does and its copyright information (see the example below). Here, we specify who is the author(s) of this script, in which years, and under what license others are allowed to use this file. Without it, your script does not credibility or identity, and others cannot trust, use or acknowledge your work on it. Since Gnuastro is itself licensed under a @url{https://en.wikipedia.org/wiki/Copyleft,copyleft} license (see @ref{Your rights} and @ref{GNU General Public License} or GNU GPL, the license finishes with a template on how to add it), any script that uses Gnuastro should also have a copyleft license: we recommend the same GNU GPL v3+ like below. @end cartouche Taking the above points into consideration, we can write a better version of the script above. Please compare this script with the previous one carefully to spot the differences. These are very important points that you will definitely encouter during your own research, and knowing them can greatly help your productiveity, so pay close attention (even in the comments). @example #!/bin/bash # Script to download and keep the deep region of the XDF survey. # # Copyright (C) 2024 Your Name <yourname@@email.company> # Copyright (C) 2021-2024 Initial Author <incase@@there-is.any> # # This script is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This script 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. # Abort the script in case of an error. set -e # Download the input datasets # --------------------------- # # The default file names have this format (where `FILTER' differs for # each filter): # hlsp_xdf_hst_wfc3ir-60mas_hudf_FILTER_v1_sci.fits # To make the script easier to read, a prefix and suffix variable are # used to sandwich the filter name into one short line. dldir=download xdfsuffix=_v1_sci.fits xdfprefix=hlsp_xdf_hst_wfc3ir-60mas_hudf_ xdfurl=http://archive.stsci.edu/pub/hlsp/xdf # The file name and full URLs of the input data. f105w_in=$xdfprefix"f105w"$xdfsuffix f160w_in=$xdfprefix"f160w"$xdfsuffix f105w_url=$xdfurl/$f105w_in f160w_url=$xdfurl/$f160w_in # Make sure the download directory exists, and download the images. if ! [ -d $dldir ]; then mkdir $dldir; fi if ! [ -f $f105w_in ]; then wget $f105w_url -O $dldir/$f105w_in; fi if ! [ -f $f160w_in ]; then wget $f160w_url -O $dldir/$f160w_in; fi # Crop out the deep region # ------------------------ # # To help in readability, each vertice of the deep/flat field is stored # as a separate variable. They are then merged into one variable to # define the polygon. flatdir=flat-ir vertice1="53.187414,-27.779152" vertice2="53.159507,-27.759633" vertice3="53.134517,-27.787144" vertice4="53.161906,-27.807208" f105w_flat=$flatdir/xdf-f105w.fits f160w_flat=$flatdir/xdf-f160w.fits deep_polygon="$vertice1:$vertice2:$vertice3:$vertice4" if ! [ -d $flatdir ]; then mkdir $flatdir; fi if ! [ -f $f105w_flat ]; then astcrop --mode=wcs -h0 --output=$f105w_flat \ --polygon=$deep_polygon $dldir/$f105w_in fi if ! [ -f $f160w_flat ]; then astcrop --mode=wcs -h0 --output=$f160w_flat \ --polygon=$deep_polygon $dldir/$f160w_in fi @end example @node Citing and acknowledging Gnuastro, , Writing scripts to automate the steps, General program usage tutorial @subsection Citing and acknowledging Gnuastro In conclusion, we hope this extended tutorial has been a good starting point to help in your exciting research. If this book or any of the programs in Gnuastro have been useful for your research, please cite the respective papers, and acknowledge the funding agencies that made all of this possible. Without citations, we will not be able to secure future funding to continue working on Gnuastro or improving it, so please take software citation seriously (for all the scientific software you use, not just Gnuastro). To help you in this, all Gnuastro programs have a @option{--cite} option to facilitate the citation and acknowledgment. Just note that it may be necessary to cite additional papers for different programs, so please try it out on all the programs that you used, for example: @example $ astmkcatalog --cite $ astnoisechisel --cite @end example @node Detecting large extended targets, Building the extended PSF, General program usage tutorial, Tutorials @section Detecting large extended targets The outer wings of large and extended objects can sink into the noise very gradually and can have a large variety of shapes (for example, due to tidal interactions). Therefore separating the outer boundaries of the galaxies from the noise can be particularly tricky. Besides causing an under-estimation in the total estimated brightness of the target, failure to detect such faint wings will also cause a bias in the noise measurements, thereby hampering the accuracy of any measurement on the dataset. Therefore even if they do not constitute a significant fraction of the target's light, or are not your primary target, these regions must not be ignored. In this tutorial, we will walk you through the strategy of detecting such targets using @ref{NoiseChisel}. @cartouche @noindent @strong{Do not start with this tutorial:} If you have not already completed @ref{General program usage tutorial}, we strongly recommend going through that tutorial before starting this one. Basic features like access to this book on the command-line, the configuration files of Gnuastro's programs, benefiting from the modular nature of the programs, viewing multi-extension FITS files, or using NoiseChisel's outputs are discussed in more detail there. @end cartouche @cindex M51 @cindex NGC5195 @cindex SDSS, Sloan Digital Sky Survey @cindex Sloan Digital Sky Survey, SDSS We will try to detect the faint tidal wings of the beautiful M51 group@footnote{@url{https://en.wikipedia.org/wiki/M51_Group}} in this tutorial. We will use a dataset/image from the public @url{http://www.sdss.org/, Sloan Digital Sky Survey}, or SDSS. Due to its more peculiar low surface brightness structure/features, we will focus on the dwarf companion galaxy of the group (or NGC 5195). @menu * Downloading and validating input data:: How to get and check the input data. * NoiseChisel optimization:: Detect the extended and diffuse wings. * Skewness caused by signal and its measurement:: How signal changes the distribution. * Image surface brightness limit:: Standards to quantify the noise level. * Achieved surface brightness level:: Calculate the outer surface brightness. * Extract clumps and objects:: Find sub-structure over the detections. @end menu @node Downloading and validating input data, NoiseChisel optimization, Detecting large extended targets, Detecting large extended targets @subsection Downloading and validating input data To get the image, you can use the @url{https://dr12.sdss.org/fields, simple field search} tool of SDSS. As long as it is covered by the SDSS, you can find an image containing your desired target either by providing a standard name (if it has one), or its coordinates. To access the dataset we will use here, write @code{NGC5195} in the ``Object Name'' field and press ``Submit'' button. @cartouche @noindent @strong{Type the example commands:} Try to type the example commands on your terminal and use the history feature of your command-line (by pressing the ``up'' button to retrieve previous commands). Do not simply copy and paste the commands shown here. This will help simulate future situations when you are processing your own datasets. @end cartouche @cindex GNU Wget You can see the list of available filters under the color image. For this demonstration, we will use the r-band filter image. By clicking on the ``r-band FITS'' link, you can download the image. Alternatively, you can just run the following command to download it with GNU Wget@footnote{To make the command easier to view on screen or in a page, we have defined the top URL of the image as the @code{topurl} shell variable. You can just replace the value of this variable with @code{$topurl} in the @command{wget} command.}. To keep things clean, let's also put it in a directory called @file{ngc5195}. With the @option{-O} option, we are asking Wget to save the downloaded file with a more manageable name: @file{r.fits.bz2} (this is an r-band image of NGC 5195, which was the directory name). @example $ mkdir ngc5195 $ cd ngc5195 $ topurl=https://dr12.sdss.org/sas/dr12/boss/photoObj/frames $ wget $topurl/301/3716/6/frame-r-003716-6-0117.fits.bz2 -Or.fits.bz2 @end example When you want to reproduce a previous result (a known analysis, on a known dataset, to get a known result: like the case here!) it is important to verify that the file is correct: that the input file has not changed (on the remote server, or in your own archive), or there was no downloading problem. Otherwise, if the data have changed in your server/archive, and you use the same script, you will get a different result, causing a lot of confusion! @cindex Checksum @cindex SHA-1 checksum @cindex Verification, checksum One good way to verify the contents of a file is to store its @emph{Checksum} in your analysis script and check it before any other operation. The @emph{Checksum} algorithms look into the contents of a file and calculate a fixed-length string from them. If any change (even in a bit or byte) is made within the file, the resulting string will change, for more see @url{https://en.wikipedia.org/wiki/Checksum, Wikipedia}. There are many common algorithms, but a simple one is the @url{https://en.wikipedia.org/wiki/SHA-1, SHA-1 algorithm} (Secure Hash Algorithm 1) that you can calculate easily with the command below (the second line is the output, and the checksum is the first/long string: it is independent of the file name) @example $ sha1sum r.fits.bz2 5fb06a572c6107c72cbc5eb8a9329f536c7e7f65 r.fits.bz2 @end example If the checksum on your computer is different from this, either the file has been incorrectly downloaded (most probable), or it has changed on SDSS servers (very unlikely@footnote{If your checksum is different, try uncompressing the file with the @command{bunzip2} command after this, and open the resulting FITS file. If it opens and you see the image of M51 and NGC5195, then there was no download problem, and the file has indeed changed on the SDSS servers! In this case, please contact us at @code{bug-gnuastro@@gnu.org}.}). To get a better feeling of checksums open your favorite text editor and make a test file by writing something in it. Save it and calculate the text file's SHA-1 checksum with @command{sha1sum}. Try renaming that file, and you'll see the checksum has not changed (checksums only look into the contents, not the name/location of the file). Then open the file with your text editor again, make a change and re-calculate its checksum, you'll see the checksum string has changed. Its always good to keep this short checksum string with your project's scripts and validate your input data before using them. You can do this with a shell conditional like this: @example filename=r.fits.bz2 expected=5fb06a572c6107c72cbc5eb8a9329f536c7e7f65 sum=$(sha1sum $filename | awk '@{print $1@}') if [ $sum = $expected ]; then echo "$filename: validated" else echo "$filename: wrong checksum!" exit 1 fi @end example @cindex Bzip2 @noindent Now that we know you have the same data that we wrote this tutorial with, let's continue. The SDSS server keeps the files in a Bzip2 compressed file format (that have a @code{.bz2} suffix). So we will first decompress it with the following command to use it as a normal FITS file. By convention, compression programs delete the original file (compressed when uncompressing, or uncompressed when compressing). To keep the original file, you can use the @option{--keep} or @option{-k} option which is available in most compression programs for this job. Here, we do not need the compressed file any more, so we will just let @command{bunzip} delete it for us and keep the directory clean. @example $ bunzip2 r.fits.bz2 @end example @node NoiseChisel optimization, Skewness caused by signal and its measurement, Downloading and validating input data, Detecting large extended targets @subsection NoiseChisel optimization In @ref{Detecting large extended targets} we downloaded the single exposure SDSS image. Let's see how NoiseChisel operates on it with its default parameters: @example $ astnoisechisel r.fits -h0 @end example As described in @ref{NoiseChisel and Multi-Extension FITS files}, NoiseChisel's default output is a multi-extension FITS file. Open the output @file{r_detected.fits} file and have a look at the extensions, the 0-th extension is only meta-data and contains NoiseChisel's configuration parameters. The rest are the Sky-subtracted input, the detection map, Sky values and Sky standard deviation. @example $ ds9 -mecube r_detected.fits -zscale -zoom to fit @end example Flipping through the extensions in a FITS viewer, you will see that the first image (Sky-subtracted image) looks reasonable: there are no major artifacts due to bad Sky subtraction compared to the input. The second extension also seems reasonable with a large detection map that covers the whole of NGC5195, but also extends towards the bottom of the image where we actually see faint and diffuse signal in the input image. Now try flipping between the @code{DETECTIONS} and @code{SKY} extensions. In the @code{SKY} extension, you'll notice that there is still significant signal beyond the detected pixels. You can tell that this signal belongs to the galaxy because the far-right side of the image (away from M51) is dark (has lower values) and the brighter parts in the Sky image (with larger values) are just under the detections and follow a similar pattern. The fact that signal from the galaxy remains in the @code{SKY} HDU shows that NoiseChisel can be optimized for a much better result. The @code{SKY} extension must not contain any light around the galaxy. Generally, any time your target is much larger than the tile size and the signal is very diffuse and extended at low signal-to-noise values (like this case), this @emph{will} happen. Therefore, when there are large objects in the dataset, @strong{the best place} to check the accuracy of your detection is the estimated Sky image. When dominated by the background, noise has a symmetric distribution. However, signal is not symmetric (we do not have negative signal). Therefore when non-constant@footnote{by constant, we mean that it has a single value in the region we are measuring.} signal is present in a noisy dataset, the distribution will be positively skewed. For a demonstration, see Figure 1 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. This skewness is a good measure of how much faint signal we have in the distribution. The skewness can be accurately measured by the difference in the mean and median (assuming no strong outliers): the more distant they are, the more skewed the dataset is. This important concept will be discussed more extensively in the next section (@ref{Skewness caused by signal and its measurement}). However, skewness is only a proxy for signal when the signal has structure (varies per pixel). Therefore, when it is approximately constant over a whole tile, or sub-set of the image, the constant signal's effect is just to shift the symmetric center of the noise distribution to the positive and there will not be any skewness (major difference between the mean and median). This positive@footnote{In processed images, where the Sky value can be over-estimated, this constant shift can be negative.} shift that preserves the symmetric distribution is the Sky value. When there is a gradient over the dataset, different tiles will have different constant shifts/Sky-values, for example, see Figure 11 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. To make this very large diffuse/flat signal detectable, you will therefore need a larger tile to contain a larger change in the values within it (and improve number statistics, for less scatter when measuring the mean and median). So let's play with the tessellation a little to see how it affects the result. In Gnuastro, you can see the option values (@option{--tilesize} in this case) by adding the @option{-P} option to your last command. Try running NoiseChisel with @option{-P} to see its default tile size. You can clearly see that the default tile size is indeed much smaller than this (huge) galaxy and its tidal features. As a result, NoiseChisel was unable to identify the skewness within the tiles under the outer parts of M51 and NGC 5159 and the threshold has been over-estimated on those tiles. To see which tiles were used for estimating the quantile threshold (no skewness was measured), you can use NoiseChisel's @option{--checkqthresh} option: @example $ astnoisechisel r.fits -h0 --checkqthresh @end example Did you see how NoiseChisel aborted after finding and applying the quantile thresholds? When you call any of NoiseChisel's @option{--check*} options, by default, it will abort as soon as all the check steps have been written in the check file (a multi-extension FITS file). This allows you to focus on the problem you wanted to check as soon as possible (you can disable this feature with the @option{--continueaftercheck} option). To optimize the threshold-related settings for this image, let's play with this quantile threshold check image a little. Do not forget that ``@emph{Good statistical analysis is not a purely routine matter, and generally calls for more than one pass through the computer}'' (Anscombe 1973, see @ref{Science and its tools}). A good scientist must have a good understanding of her tools to make a meaningful analysis. So do not hesitate in playing with the default configuration and reviewing the manual when you have a new dataset (from a new instrument) in front of you. Robust data analysis is an art, therefore a good scientist must first be a good artist. So let's open the check image as a multi-extension cube: @example $ ds9 -mecube r_qthresh.fits -zscale -cmap sls -zoom to fit @end example The first extension (called @code{CONVOLVED}) of @file{r_qthresh.fits} is the convolved input image where the threshold(s) is(are) defined (and later applied to). For more on the effect of convolution and thresholding, see Sections 3.1.1 and 3.1.2 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. The second extension (@code{QTHRESH_ERODE}) has a blank/white value for all the pixels of any tile that was identified as having significant signal. The other tiles have the measured threshold over them. The next two extensions (@code{QTHRESH_NOERODE} and @code{QTHRESH_EXPAND}) are the other two quantile thresholds that are necessary in NoiseChisel's later steps. Every step in this file is repeated on the three thresholds. Play a little with the color bar of the @code{QTHRESH_ERODE} extension, you clearly see how the non-blank tiles around NGC 5195 have a gradient. As one line of attack against discarding too much signal below the threshold, NoiseChisel rejects outlier tiles. Go forward by three extensions to @code{VALUE1_NO_OUTLIER} and you will see that many of the tiles over the galaxy have been removed in this step. For more on the outlier rejection algorithm, see the latter half of @ref{Quantifying signal in a tile}. Even though much of the galaxy's footprint has been rejected as outliers, there are still tiles with signal remaining: play with the DS9 color-bar and you still see a gradient near the outer tidal feature of the galaxy. Before trying to correct this, let's look at the other extensions of this check image. We will use a @code{*} as a wild-card that can be 1, 2 or 3. In the @code{THRESH*_INTERP} extensions, you see that all the blank tiles have been interpolated using their nearest neighbors (the relevant option here is @option{--interpnumngb}). In the following @code{THRESH*_SMOOTH} extensions, you can see the tile values after smoothing (configured with @option{--smoothwidth} option). Finally, in @code{QTHRESH-APPLIED}, you see the thresholded image: pixels with a value of 1 will be eroded later, but pixels with a value of 2 will pass the erosion step un-touched. Let's get back to the problem of optimizing the result. You have two strategies for detecting the outskirts of the merging galaxies: 1) Increase the tile size to get more accurate measurements of skewness. 2) Strengthen the outlier rejection parameters to discard more of the tiles with signal (primarily by increasing @option{--outliernumngb}). Fortunately in this image we have a sufficiently large region on the right side of the image that the galaxy does not extend to. So we can use the more robust first solution. In situations where this does not happen (for example, if the field of view in this image was shifted to the left to have more of M51 and less sky) you are limited to a combination of the two solutions or just to the second solution. @cartouche @noindent @strong{Skipping convolution for faster tests:} The slowest step of NoiseChisel is the convolution of the input dataset. Therefore when your dataset is large (unlike the one in this test), and you are not changing the input dataset or kernel in multiple runs (as in the tests of this tutorial), it is faster to do the convolution separately once (using @ref{Convolve}) and use NoiseChisel's @option{--convolved} option to directly feed the convolved image and avoid convolution. For more on @option{--convolved}, see @ref{NoiseChisel input}. @end cartouche To better identify the skewness caused by the flat NGC 5195 and M51 tidal features on the tiles under it, we have to choose a larger tile size. Let's try a tile size of 100 by 100 pixels and inspect the check image. @example $ astnoisechisel r.fits -h0 --tilesize=100,100 --checkqthresh $ ds9 -mecube r_qthresh.fits -zscale -cmap sls -zoom to fit @end example You can clearly see the effect of this increased tile size: the tiles are much larger and when you look into @code{VALUE1_NO_OUTLIER}, you see that all the tiles are nicely grouped on the right side of the image (the farthest from M51, where we do not see a gradient in @code{QTHRESH_ERODE}). Things look good now, so let's remove @option{--checkqthresh} and let NoiseChisel proceed with its detection. @example $ astnoisechisel r.fits -h0 --tilesize=100,100 $ ds9 -mecube r_detected.fits -zscale -cmap sls -zoom to fit @end example The detected pixels of the @code{DETECTIONS} extension have expanded a little, but not as much. Also, the gradient in the @code{SKY} image is almost fully removed (and does not fall over M51 anymore). However, on the bottom-right of the m51 detection, we see many holes gradually increasing in size. This hints that there is still signal out there. Let's check the next series of detection steps by adding the @code{--checkdetection} option this time: @example $ astnoisechisel r.fits -h0 --tilesize=100,100 --checkdetection $ ds9 -mecube r_detcheck.fits -zscale -cmap sls -zoom to fit @end example @cindex Erosion (image processing) The output now has 16 extensions, showing every step that is taken by NoiseChisel. The first and second (@code{INPUT} and @code{CONVOLVED}) are clear from their names. The third (@code{THRESHOLDED}) is the thresholded image after finding the quantile threshold (last extension of the output of @code{--checkqthresh}). The fourth HDU (@code{ERODED}) is new: it is the name-stake of NoiseChisel, or eroding pixels that are above the threshold. By erosion, we mean that all pixels with a value of @code{1} (above the threshold) that are touching a pixel with a value of @code{0} (below the threshold) will be flipped to zero (or ``carved'' out)@footnote{Pixels with a value of @code{2} are very high signal-to-noise pixels, they are not eroded, to preserve sharp and bright sources.}. You can see its effect directly by going back and forth between the @code{THRESHOLDED} and @code{ERODED} extensions. @cindex Dilation (image processing) In the fifth extension (@code{OPENED-AND-LABELED}) the image is ``opened'', which is a name for eroding once, then dilating (dilation is the inverse of erosion). This is good to remove thin connections that are only due to noise. Each separate connected group of pixels is also given its unique label here. Do you see how just beyond the large M51 detection, there are many smaller detections that get smaller as you go more distant? This hints at the solution: the default number of erosions is too much. Let's see how many erosions take place by default (by adding @command{-P | grep erode} to the previous command) @example $ astnoisechisel r.fits -h0 --tilesize=100,100 -P | grep erode @end example @noindent We see that the value of @code{erode} is @code{2}. The default NoiseChisel parameters are primarily targeted to processed images (where there is correlated noise due to all the processing that has gone into the warping and stacking of raw images, see @ref{NoiseChisel optimization for detection}). In those scenarios 2 erosions are commonly necessary. But here, we have a single-exposure image where there is no correlated noise (the pixels are not mixed). So let's see how things change with only one erosion: @example $ astnoisechisel r.fits -h0 --tilesize=100,100 --erode=1 \ --checkdetection $ ds9 -mecube r_detcheck.fits -zscale -cmap sls -zoom to fit @end example Looking at the @code{OPENED-AND-LABELED} extension again, we see that the main/large detection is now much larger than before. While the immediately-outer connected regions are still present, they have decreased dramatically, so we can pass this step. After the @code{OPENED-AND-LABELED} extension, NoiseChisel goes onto finding false detections using the undetected pixels. The process is fully described in Section 3.1.5. (Defining and Removing False Detections) of Akhlaghi and Ichikawa @url{https://arxiv.org/pdf/1505.01664.pdf,2015}. Please compare the extensions to what you read there and things will be very clear. In the last HDU (@code{DETECTION-FINAL}), we have the final detected pixels that will be used to estimate the Sky and its Standard deviation. We see that the main detection has indeed been detected very far out, so let's see how the full NoiseChisel will estimate the Sky and its standard deviation (by removing @code{--checkdetection}): @example $ astnoisechisel r.fits -h0 --tilesize=100,100 --erode=1 $ ds9 -mecube r_detected.fits -zscale -cmap sls -zoom to fit @end example The @code{DETECTIONS} extension of @code{r_detected.fits} closely follows what the @code{DETECTION-FINAL} of the check image (looks good!). If you go ahead to the @code{SKY} extension, things still look good. But it can still be improved. Look at the @code{DETECTIONS} again, you will see the right-ward edges of M51's detected pixels have many ``holes'' that are fully surrounded by signal (value of @code{1}) and the signal stretches out in the noise very thinly (the size of the holes increases as we go out). This suggests that there is still undetected signal and that we can still dig deeper into the noise. With the @option{--detgrowquant} option, NoiseChisel will ``grow'' the detections in to the noise. Its value is the ultimate limit of the growth in units of quantile (between 0 and 1). Therefore @option{--detgrowquant=1} means no growth and @option{--detgrowquant=0.5} means an ultimate limit of the Sky level (which is usually too much and will cover the whole image!). See Figure 2 of Akhlaghi @url{https://arxiv.org/pdf/1909.11230.pdf,2019} for more on this option. Try running the previous command with various values (from 0.6 to higher values) to see this option's effect on this dataset. For this particularly huge galaxy (with signal that extends very gradually into the noise), we will set it to @option{0.75}: @example $ astnoisechisel r.fits -h0 --tilesize=100,100 --erode=1 \ --detgrowquant=0.75 $ ds9 -mecube r_detected.fits -zscale -cmap sls -zoom to fit @end example Beyond this level (smaller @option{--detgrowquant} values), you see many of the smaller background galaxies (towards the right side of the image) starting to create thin spider-leg-like features, showing that we are following correlated noise for too much. Please try it for yourself by changing it to @code{0.6} for example. When you look at the @code{DETECTIONS} extension of the command shown above, you see the wings of the galaxy being detected much farther out, But you also see many holes which are clearly just caused by noise. After growing the objects, NoiseChisel also allows you to fill such holes when they are smaller than a certain size through the @option{--detgrowmaxholesize} option. In this case, a maximum area/size of 10,000 pixels seems to be good: @example $ astnoisechisel r.fits -h0 --tilesize=100,100 --erode=1 \ --detgrowquant=0.75 --detgrowmaxholesize=10000 $ ds9 -mecube r_detected.fits -zscale -cmap sls -zoom to fit @end example When looking at the raw input image (which is very ``shallow'': less than a minute exposure!), you do not see anything so far out of the galaxy. You might just think to yourself that ``this is all noise, I have just dug too deep and I'm following systematics''! If you feel like this, have a look at the deep images of this system in Watkins @url{https://arxiv.org/abs/1501.04599,2015}, or a 12 hour deep image of this system (with a 12-inch telescope): @url{https://i.redd.it/jfqgpqg0hfk11.jpg}@footnote{The image is taken from this Reddit discussion: @url{https://www.reddit.com/r/Astronomy/comments/9d6x0q/12_hours_of_exposure_on_the_whirlpool_galaxy/}}. In these deeper images you clearly see how the outer edges of the M51 group follow this exact structure, below in @ref{Achieved surface brightness level}, we will measure the exact level. As the gradient in the @code{SKY} extension shows, and the deep images cited above confirm, the galaxy's signal extends even beyond this. But this is already far deeper than what most (if not all) other tools can detect. Therefore, we will stop configuring NoiseChisel at this point in the tutorial and let you play with the other options a little more, while reading more about it in the papers: Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015} and @url{https://arxiv.org/abs/1909.11230,2019}) and @ref{NoiseChisel}. When you do find a better configuration feel free to contact us for feedback. Do not forget that good data analysis is an art, so like a sculptor, master your chisel for a good result. To avoid typing all these options every time you run NoiseChisel on this image, you can use Gnuastro's configuration files, see @ref{Configuration files}. For an applied example of setting/using them, see @ref{Option management and configuration files}. @cartouche @noindent @strong{This NoiseChisel configuration is NOT GENERIC:} Do not use the configuration derived above, on another instrument's image @emph{blindly}. If you are unsure, just use the default values. As you saw above, the reason we chose this particular configuration for NoiseChisel to detect the wings of the M51 group was strongly influenced by the noise properties of this particular image. Remember @ref{NoiseChisel optimization for detection}, where we looked into the very deep XDF image which had strong correlated noise? As long as your other images have similar noise properties (from the same data-reduction step of the same instrument), you can use your configuration on any of them. But for images from other instruments, please follow a similar logic to what was presented in these tutorials to find the optimal configuration. @end cartouche @cartouche @noindent @strong{Smart NoiseChisel:} As you saw during this section, there is a clear logic behind the optimal parameter value for each dataset. Therefore, we plan to add capabilities to (optionally) automate some of the choices made here based on the actual dataset, please join us in doing this if you are interested. However, given the many problems in existing ``smart'' solutions, such automatic changing of the configuration may cause more problems than they solve. So even when they are implemented, we would strongly recommend quality checks for a robust analysis. @end cartouche @node Skewness caused by signal and its measurement, Image surface brightness limit, NoiseChisel optimization, Detecting large extended targets @subsection Skewness caused by signal and its measurement In the previous section (@ref{NoiseChisel optimization}) we showed how to customize NoiseChisel for a single-exposure SDSS image of the M51 group. During the customization, we also discussed the skewness caused by signal. In the next section (@ref{Image surface brightness limit}), we will use this to measure the surface brightness limit of the image. However, to better understand NoiseChisel and also, the image surface brightness limit, understanding the skewness caused by signal, and how to measure it properly are very important. Therefore now that we have separated signal from noise, let's pause for a moment and look into skewness, how signal creates it, and find the best way to measure it. Let's start masking all the detected pixels found at the end of the previous section (@ref{NoiseChisel optimization}) and having a look at the noise distribution with Gnuastro's Arithmetic and Statistics programs as shown below (while visually inspecting the masked image with DS9 in the middle). @example $ astarithmetic r_detected.fits -hINPUT-NO-SKY set-in \ r_detected.fits -hDETECTIONS set-det \ in det nan where -odet-masked.fits $ ds9 det-masked.fits $ aststatistics det-masked.fits @end example @noindent You will see that Gnuastro's Statistics program prints an ASCII histogram when no option is given (it is shown below). This is done to give you a fast and easy view of the distribution of values in the dataset (pixels in an image, or rows in a table's column). @example ------- Input: det-masked.fits (hdu: 1) ------- Number of elements: 903920 Minimum: -0.113543 Maximum: 0.130339 Median: -0.00216306 Mean: -0.0001893073877 Standard deviation: 0.02569057188 ------- Histogram: | ** * | * ** * * | ** ** * * | * ** ** ** * | ** ** ** ** * ** | ** ** ** ** * ** * | * ** ** ** ** * ** ** | ** ** ** ** **** ** ** * | ** ** ** ** ** **** ** ** ** * | ** ** ** ** ** ** ******* ** ** ** * |*********** ** ** ** ******************* ** ** ** ** ***** ** ***** ** |---------------------------------------------------------------------- @end example @noindent @cindex Skewness This histogram shows a roughly symmetric noise distribution, so let's have a look at its skewness. The most commonly used definition of skewness is known as the ``Pearson's first skewness coefficient''. It measures the difference between the mean and median, in units of the standard deviation (STD): @dispmath{\rm{Skewness}\equiv\frac{(\rm{mean}-\rm{median})}{\rm{STD}}} The logic behind this definition is simple: as more signal is added to the same pixels that originally only have raw noise (skewness is increased), the mean shifts to the positive faster than the median, so the distance between the mean and median should increase. Let's measure the skewness (as defined above) over the image without any signal. Its very easy with Gnuastro's Statistics program (and piping the output to AWK): @verbatim $ aststatistics det-masked.fits --mean --median --std \ | awk '{print ($1-$2)/$3}' 0.0768279 @end verbatim @noindent We see that the mean and median are only @mymath{0.08\sigma} (rounded) away from each other (which is very close)! All pixels with significant signal are masked, so this is expected, and everything is fine. Now, let's check the pixel distribution of the sky-subtracted input (where pixels with significant signal remain, and are not masked): @example $ ds9 r_detected.fits $ aststatistics r_detected.fits -hINPUT-NO-SKY ------- Input: r_detected.fits (hdu: INPUT-NO-SKY) Unit: nanomaggy ------- Number of elements: 3049472 Minimum: -0.113543 Maximum: 159.25 Median: 0.0241158 Mean: 0.1057885317 Standard deviation: 0.698167489 ------- Histogram: |* |* |* |* |* |* |* |* |* |* |******************************************* *** ** **** * * * * * |---------------------------------------------------------------------- @end example @noindent Comparing the distributions above, you can see that the @emph{minimum} value of the image has not changed because we have not masked the minimum values. However, as expected, the @emph{maximum} value of the image has changed (from @mymath{0.13} to @mymath{159.25}). This is clearly evident from the ASCII histogram: the distribution is very elongated because the galaxy inside the image is extremely bright. Now, let's limit the displayed information with the @option{--lessthan=0.13} option of Statistics as shown below (to only use values less than 0.13; the maximum of the image where all signal is masked). @example $ aststatistics r_detected.fits -hINPUT-NO-SKY --lessthan=0.13 ------- Input: r_detected.fits (hdu: INPUT-NO-SKY) Range: up to (exclusive) 0.13. Unit: nanomaggy ------- Number of elements: 2531949 Minimum: -0.113543 Maximum: 0.126233 Median: 0.0137138 Mean: 0.01735551527 Standard deviation: 0.03590550597 ------- Histogram: | * | * ** ** | * * ** ** ** | * * ** ** ** * | * ** * ** ** ** * | ** ** * ** ** ** * * | * ** ** * ** ** ** * * | ** ** ** * ** ** ** ** * ** * | * ** ** **** ** ** ** **** ** ** ** | * ** ** ** **** ** ** ** ******* ** ** ** * ** ** ** |***** ** ********** ** ** ********** ** ********** ** ************* ** |---------------------------------------------------------------------- @end example The improvement is obvious: the ASCII histogram better shows the pixel values near the noise level. We can now compare with the distribution of @file{det-masked.fits} that we found earlier. The ASCII histogram of @file{det-masked.fits} was approximately symmetric, while this is asymmetric in this range, especially in outer (to the right, or positive) direction. The heavier right-side tail is a clear visual demonstration of skewness that is caused by the signal in the un-masked image. Having visually confirmed the skewness, let's quantify it with Pearson's first skewness coefficient. Like before, we can simply use Gnuastro's Statistics and AWK for the measurement and calculation: @verbatim $ aststatistics r_detected.fits --mean --median --std \ | awk '{print ($1-$2)/$3}' 0.116982 @end verbatim The difference between the mean and median is now approximately @mymath{0.12\sigma}. This is larger than the skewness of the masked image (which was approximately @mymath{0.08\sigma}). At a glance (only looking at the numbers), it seems that there is not much difference between the two distributions. However, visually looking at the non-masked image, or the ASCII histogram, you would expect the quantified skewness to be much larger than that of the masked image, but that has not happened! Why is that? The reason is that the presence of signal does not only shift the mean and median, it @emph{also} increases the standard deviation! To see this for yourself, compare the standard deviation of @file{det-masked.fits} (which was approximately @mymath{0.025}) to @file{r_detected.fits} (without @option{--lessthan}; which was approximately @mymath{0.699}). The latter is almost 28 times larger! This happens because the standard deviation is defined only in a symmetric (and Gaussian) distribution. In a non-Gaussian distribution, the standard deviation is poorly defined and is not a good measure of ``width''. Since Pearson's first skewness coefficient is defined in units of the standard deviation, this very large increase in the standard deviation has hidden the much increased distance between the mean and median after adding signal. @cindex Quantile We therefore need a better unit or scale to quantify the distance between the mean and median. A unit that is less affected by skewness or outliers. One solution that we have found to be very useful is the quantile units or quantile scale. The quantile scale is defined by first sorting the dataset (which has @mymath{N} elements). If we want the quantile of a value @mymath{V} in a distribution, we first find the nearest data element to @mymath{V} in the sorted dataset. Let's assume the nearest element is the @mymath{i}-th element, counting from 0, after sorting. The quantile of V in that distribution is then defined as @mymath{i/(N-1)} (which will have a value between 0 and 1). The quantile of the median is obvious from its definition: 0.5. This is because the median is defined to be the middle element of the distribution after sorting. We can therefore define skewness as the quantile of the mean (@mymath{q_m}). If @mymath{q_m\sim0.5} (the median), then the distribution (of signal blended in noise) is symmetric (possibly Gaussian, but the functional form is irrelevant here). A larger value for @mymath{|q_m-0.5|} quantifies a more skewed the distribution. Furthermore, a @mymath{q_m>0.5} signifies a positive skewness, while @mymath{q_m<0.5} signifies a negative skewness. Let's put this definition to a test on the same two images we have already created. Fortunately Gnuastro's Statistics program has the @option{--quantofmean} option to easily calculate @mymath{q_m} for you. So testing is easy: @example $ aststatistics det-masked.fits --quantofmean 0.51295636 $ aststatistics r_detected.fits -hINPUT-NO-SKY --quantofmean 0.8105163158 @end example The two quantiles of mean are now very distinctly different (@mymath{0.51} and @mymath{0.81}): differing by about @mymath{0.3} (on a scale of 0 to 1)! Recall that when defining skewness with Pearson's first skewness coefficient, their difference was negligible (@mymath{0.04\sigma})! You can now better appreciate why we discussed quantile so extensively in @ref{NoiseChisel optimization}. In case you would like to know more about the usage of the quantile of the mean in Gnuastro, please see @ref{Quantifying signal in a tile}, or watch this video demonstration: @url{https://peertube.stream/w/35b7c398-9fd7-4bcf-8911-1e01c5124585}. @node Image surface brightness limit, Achieved surface brightness level, Skewness caused by signal and its measurement, Detecting large extended targets @subsection Image surface brightness limit @cindex Surface brightness limit @cindex Limit, surface brightness When your science is related to extended emission (like the example here) and you are presenting your results in a scientific conference, usually the first thing that someone will ask (if you do not explicitly say it!), is the dataset's @emph{surface brightness limit} (a standard measure of the noise level), and your target's surface brightness (a measure of the signal, either in the center or outskirts, depending on context). For more on the basics of these important concepts please see @ref{Quantifying measurement limits}). So in this section of the tutorial, we will measure these values for this image and this target. @noindent Before measuring the surface brightness limit, let's see how reliable our detection was. In other words, let's see how ``clean'' our noise is (after masking all detections, as described previously in @ref{Skewness caused by signal and its measurement}) @example $ aststatistics det-masked.fits --quantofmean 0.5111848629 @end example @noindent Showing that the mean is indeed very close to the median, although just about 1 quantile larger. As we saw in @ref{NoiseChisel optimization}, a very small residual signal still remains in the undetected regions and this very small difference is a quantitative measure of that undetected signal. It was up to you as an exercise to improve it, so we will continue with this dataset. The surface brightness limit of the image can be measured from the masked image and the equation in @ref{Quantifying measurement limits}. Let's do it for a @mymath{3\sigma} surface brightness limit over an area of @mymath{25 \rm{arcsec}^2}: @example $ nsigma=3 $ zeropoint=22.5 $ areaarcsec2=25 $ std=$(aststatistics det-masked.fits --sigclip-std) $ pixarcsec2=$(astfits det-masked.fits --pixelscale --quiet \ | awk '@{print $3*3600*3600@}') $ astarithmetic --quiet $nsigma $std x \ $areaarcsec2 $pixarcsec2 x \ sqrt / $zeropoint counts-to-mag 26.0241 @end example The customizable steps above are good for any type of mask. For example, your field of view may contain a very deep part so you need to mask all the shallow parts @emph{as well as} the detections before these steps. But when your image is flat (like this), there is a much simpler method to obtain the same value through MakeCatalog (when the standard deviation image is made by NoiseChisel). NoiseChisel has already calculated the minimum (@code{MINSTD}), maximum (@code{MAXSTD}) and median (@code{MEDSTD}) standard deviation within the tiles during its processing and has stored them as FITS keywords within the @code{SKY_STD} HDU. You can see them by piping all the keywords in this HDU into @command{grep}. In Grep, each @samp{.} represents one character that can be anything so @code{M..STD} will match all three keywords mentioned above. @example $ astfits r_detected.fits --hdu=SKY_STD | grep 'M..STD' @end example The @code{MEDSTD} value is very similar to the standard deviation derived above, so we can safely use it instead of having to mask and run Statistics. In fact, MakeCatalog also uses this keyword and will report the dataset's @mymath{n\sigma} surface brightness limit as keywords in the output (not as measurement columns, since it is related to the noise, not labeled signal): @example $ astmkcatalog r_detected.fits -hDETECTIONS --output=sbl.fits \ --forcereadstd --ids @end example @noindent Before looking into the measured surface brightness limits, let's review some important points about this call to MakeCatalog first: @itemize @item We are only concerned with the noise (not the signal), so we do not ask for any further measurements, because they can un-necessarily slow it down. However, MakeCatalog requires at least one column, so we will only ask for the @option{--ids} column (which does not need any measurement!). The output catalog will therefore have a single row and a single column, with 1 as its value@footnote{Recall that NoiseChisel's output is a binary image: 0-valued pixels are noise and 1-valued pixel are signal. NoiseChisel does not identify sub-structure over the signal, this is the job of Segment, see @ref{Extract clumps and objects}.}. @item If we do not ask for any noise-related column (for example, the signal-to-noise ratio column with @option{--sn}, among other noise-related columns), MakeCatalog is not going to read the noise standard deviation image (again, to speed up its operation when it is redundant). We are thus using the @option{--forcereadstd} option (short for ``force read standard deviation image'') here so it is ready for the surface brightness limit measurements that are written as keywords. @end itemize With the command below you can see all the keywords that were measured with the table. Notice the group of keywords that are under the ``Surface brightness limit (SBL)'' title. @example $ astfits sbl.fits -h1 @end example @noindent Since all the keywords of interest here start with @code{SBL}, we can get a more cleaner view with this command. @example $ astfits sbl.fits -h1 | grep ^SBL @end example Notice how the @code{SBLSTD} has the same value as NoiseChisel's @code{MEDSTD} above. Using @code{SBLSTD}, MakeCatalog has determined the @mymath{n\sigma} surface brightness limiting magnitude in these header keywords. The multiple of @mymath{\sigma}, or @mymath{n}, is the value of the @code{SBLNSIG} keyword which you can change with the @option{--sfmagnsigma}. The surface brightness limiting magnitude within a pixel (@code{SBLNSIG}) and within a pixel-agnostic area of @code{SBLAREA} arcsec@mymath{^2} are stored in @code{SBLMAG}. @cindex SDSS @cindex Nanomaggy @cindex Zero point magnitude You will notice that the two surface brightness limiting magnitudes above have values around 3 and 4 (which is not correct!). This is because we have not given a zero point magnitude to MakeCatalog, so it uses the default value of @code{0}. SDSS image pixel values are calibrated in units of ``nanomaggy'' which are defined to have a zero point magnitude of 22.5@footnote{From @url{https://www.sdss.org/dr12/algorithms/magnitudes}}. So with the first command below we give the zero point value and with the second we can see the surface brightness limiting magnitudes with the correct values (around 25 and 26) @example $ astmkcatalog r_detected.fits -hDETECTIONS --zeropoint=22.5 \ --output=sbl.fits --forcereadstd --ids $ astfits sbl.fits -h1 | grep ^SBL @end example As you see from @code{SBLNSIG} and @code{SBLAREA}, the default multiple of sigma is 1 and the default area is 1 arcsec@mymath{^2}. Usually higher values are used for these two parameters. Following the manual example we did above, you can ask for the multiple of sigma to be 3 and the area to be 25 arcsec@mymath{^2}: @example $ astmkcatalog r_detected.fits -hDETECTIONS --zeropoint=22.5 \ --output=sbl.fits --sfmagarea=25 --sfmagnsigma=3 \ --forcereadstd --ids $ astfits sbl.fits -h1 | awk '/^SBLMAG /@{print $3@}' 26.02296 @end example You see that the value is identical to the custom surface brightness limiting magnitude we measured above (a difference of @mymath{0.00114} magnitudes is negligible and hundreds of times larger than the typical errors in the zero point magnitude or magnitude measurements). But it is much more easier to have MakeCatalog do this measurement, because these values will be appended (as keywords) into your final catalog of objects within that image. @cartouche @noindent @strong{Custom STD for MakeCatalog's Surface brightness limit:} You can manually change/set the value of the @code{MEDSTD} keyword in your input STD image with @ref{Fits}: @example $ std=$(aststatistics masked.fits --sigclip-std) $ astfits noisechisel.fits -hSKY_STD --update=MEDSTD,$std @end example With this change, MakeCatalog will use your custom standard deviation for the surface brightness limit. This is necessary in scenarios where your image has multiple depths and during your masking, you also mask the shallow regions (as well as the detections of course). @end cartouche We have successfully measured the image's @mymath{3\sigma} surface brightness limiting magnitude over 25 arcsec@mymath{^2}. However, as discussed in @ref{Quantifying measurement limits} this value is just an extrapolation of the per-pixel standard deviation. Issues like correlated noise will cause the real noise over a large area to be different. So for a more robust measurement, let's use the upper-limit magnitude of similarly sized region. For more on the upper-limit magnitude, see the respective item in @ref{Quantifying measurement limits}. In summary, the upper-limit measurements involve randomly placing the footprint of an object in undetected parts of the image many times. This results in a random distribution of brightness measurements, the standard deviation of that distribution is then converted into magnitudes. To be comparable with the results above, let's make a circular aperture that has an area of 25 arcsec@mymath{^2} (thus with a radius of @mymath{2.82095} arcsec). @example zeropoint=22.5 r_arcsec=2.82095 ## Convert the radius (in arcseconds) to pixels. r_pixel=$(astfits r_detected.fits --pixelscale -q \ | awk '@{print '$r_arcsec'/($1*3600)@}') ## Make circular aperture at pixel (100,100) position is irrelevant. echo "1 100 100 5 $r_pixel 0 0 1 1 1" \ | astmkprof --background=r_detected.fits \ --clearcanvas --mforflatpix --type=uint8 \ --output=lab.fits ## Do the upper-limit measurement, ignoring all NoiseChisel's ## detections as a mask for the upper-limit measurements. astmkcatalog lab.fits -h1 --zeropoint=$zeropoint -osbl.fits \ --sfmagarea=25 --sfmagnsigma=3 --forcereadstd \ --valuesfile=r_detected.fits --valueshdu=INPUT-NO-SKY \ --upmaskfile=r_detected.fits --upmaskhdu=DETECTIONS \ --upnsigma=3 --checkuplim=1 --upnum=1000 \ --ids --upperlimit-sb @end example The @file{sbl.fits} catalog now contains the upper-limit surface brightness for a circle with an area of 25 arcsec@mymath{^2}. You can check the value with the command below, but the great thing is that now you have both of the surface brightness limiting magnitude in the headers discussed above, and the upper-limit surface brightness within the table. You can also add more profiles with different shapes and sizes if necessary. Of course, you can also use @option{--upperlimit-sb} in your actual science objects and clumps to get an object-specific or clump-specific value. @example $ asttable sbl.fits -cUPPERLIMIT_SB 25.9119 @end example @cindex Random number generation @cindex Seed, random number generator @noindent You will get a slightly different value from the command above. In fact, if you run the MakeCatalog command again and look at the measured upper-limit surface brightness, it will be slightly different with your first trial! Please try exactly the same MakeCatalog command above a few times to see how it changes. This is because of the @emph{random} factor in the upper-limit measurements: every time you run it, different random points will be checked, resulting in a slightly different distribution. You can decrease the random scatter by increasing the number of random checks (for example, setting @option{--upnum=100000}, compared to 1000 in the command above). But this will be slower and the results will not be exactly reproducible. The only way to ensure you get an identical result later is to fix the random number generator function and seed like the command below@footnote{You can use any integer for the seed. One recommendation is to run MakeCatalog without @option{--envseed} once and use the randomly generated seed that is printed on the terminal.}. This is a very important point regarding any statistical process involving random numbers, please see @ref{Generating random numbers}. @example export GSL_RNG_TYPE=ranlxs1 export GSL_RNG_SEED=1616493518 astmkcatalog lab.fits -h1 --zeropoint=$zeropoint -osbl.fits \ --sfmagarea=25 --sfmagnsigma=3 --forcereadstd \ --valuesfile=r_detected.fits --valueshdu=INPUT-NO-SKY \ --upmaskfile=r_detected.fits --upmaskhdu=DETECTIONS \ --upnsigma=3 --checkuplim=1 --upnum=1000 \ --ids --upperlimit-sb --envseed @end example But where do all the random apertures of the upper-limit measurement fall on the image? It is good to actually inspect their location to get a better understanding for the process and also detect possible bugs/biases. When MakeCatalog is run with the @option{--checkuplim} option, it will print all the random locations and their measured brightness as a table in a file with the suffix @file{_upcheck.fits}. With the first command below you can use Gnuastro's @command{asttable} and @command{astscript-ds9-region} to convert the successful aperture locations into a DS9 region file, and with the second can load the region file into the detections and sky-subtracted image to visually see where they are. @example ## Create a DS9 region file from the check table (activated ## with '--checkuplim') asttable lab_upcheck.fits --noblank=RANDOM_SUM \ | astscript-ds9-region -c1,2 --mode=img \ --radius=$r_pixel ## Have a look at the regions in relation with NoiseChisel's ## detections. ds9 r_detected.fits[INPUT-NO-SKY] -regions load ds9.reg ds9 r_detected.fits[DETECTIONS] -regions load ds9.reg @end example In this example, we were looking at a single-exposure image that has no correlated noise. Because of this, the surface brightness limit and the upper-limit surface brightness are very close. They will have a bigger difference on deep datasets with stronger correlated noise (that are the result of stacking many individual exposures). As an exercise, please try measuring the upper-limit surface brightness level and surface brightness limit for the deep HST data that we used in the previous tutorial (@ref{General program usage tutorial}). @node Achieved surface brightness level, Extract clumps and objects, Image surface brightness limit, Detecting large extended targets @subsection Achieved surface brightness level In @ref{NoiseChisel optimization} we customized NoiseChisel for a single-exposure SDSS image of the M51 group and in @ref{Image surface brightness limit} we measured the surface brightness limit and the upper-limit surface brightness level (which are both measures of the noise level). In this section, let's do some measurements on the outer-most edges of the M51 group to see how they relate to the noise measurements found in the previous section. @cindex Opening For this measurement, we will need to estimate the average flux on the outer edges of the detection. Fortunately all this can be done with a few simple commands using @ref{Arithmetic} and @ref{MakeCatalog}. First, let's separate each detected region, or give a unique label/counter to all the connected pixels of NoiseChisel's detection map with the command below. Recall that with the @code{set-} operator, the popped operand will be given a name (@code{det} in this case) for easy usage later. @example $ astarithmetic r_detected.fits -hDETECTIONS set-det \ det 2 connected-components -olabeled.fits @end example You can find the label of the main galaxy visually (by opening the image and hovering your mouse over the M51 group's label). But to have a little more fun, let's do this automatically (which is necessary in a general scenario). The M51 group detection is by far the largest detection in this image, this allows us to find its ID/label easily. We will first run MakeCatalog to find the area of all the labels, then we will use Table to find the ID of the largest object and keep it as a shell variable (@code{id}): @example # Run MakeCatalog to find the area of each label. $ astmkcatalog labeled.fits --ids --geo-area -h1 -ocat.fits ## Sort the table by the area column. $ asttable cat.fits --sort=AREA_FULL ## The largest object, is the last one, so we will use '--tail'. $ asttable cat.fits --sort=AREA_FULL --tail=1 ## We only want the ID, so let's only ask for that column: $ asttable cat.fits --sort=AREA_FULL --tail=1 --column=OBJ_ID ## Now, let's put this result in a variable (instead of printing) $ id=$(asttable cat.fits --sort=AREA_FULL --tail=1 --column=OBJ_ID) ## Just to confirm everything is fine. $ echo $id @end example @noindent We can now use the @code{id} variable to reject all other detections: @example $ astarithmetic labeled.fits $id eq -oonly-m51.fits @end example Open the image and have a look. To separate the outer edges of the detections, we will need to ``erode'' the M51 group detection. So in the same Arithmetic command as above, we will erode three times (to have more pixels and thus less scatter), using a maximum connectivity of 2 (8-connected neighbors). We will then save the output in @file{eroded.fits}. @example $ astarithmetic labeled.fits $id eq 2 erode 2 erode 2 erode \ -oeroded.fits @end example @noindent In @file{labeled.fits}, we can now set all the 1-valued pixels of @file{eroded.fits} to 0 using Arithmetic's @code{where} operator added to the previous command. We will need the pixels of the M51 group in @code{labeled.fits} two times: once to do the erosion, another time to find the outer pixel layer. To do this (and be efficient and more readable) we will use the @code{set-i} operator (to give this image the name `@code{i}'). In this way we can use it any number of times afterwards, while only reading it from disk and finding M51's pixels once. @example $ astarithmetic labeled.fits $id eq set-i i \ i 2 erode 2 erode 2 erode 0 where -oedge.fits @end example Open the image and have a look. You'll see that the detected edge of the M51 group is now clearly visible. You can use @file{edge.fits} to mark (set to blank) this boundary on the input image and get a visual feeling of how far it extends: @example $ astarithmetic r.fits -h0 edge.fits nan where -oedge-masked.fits @end example To quantify how deep we have detected the low-surface brightness regions (in units of signal to-noise ratio), we will use the command below. In short it just divides all the non-zero pixels of @file{edge.fits} in the Sky subtracted input (first extension of NoiseChisel's output) by the pixel standard deviation of the same pixel. This will give us a signal-to-noise ratio image. The mean value of this image shows the level of surface brightness that we have achieved. You can also break the command below into multiple calls to Arithmetic and create temporary files to understand it better. However, if you have a look at @ref{Reverse polish notation} and @ref{Arithmetic operators}, you should be able to easily understand what your computer does when you run this command@footnote{@file{edge.fits} (extension @code{1}) is a binary (0 or 1 valued) image. Applying the @code{not} operator on it, just flips all its pixels (from @code{0} to @code{1} and vice-versa). Using the @code{where} operator, we are then setting all the newly 1-valued pixels (pixels that are not on the edge) to NaN/blank in the sky-subtracted input image (@file{r_detected.fits}, extension @code{INPUT-NO-SKY}, which we call @code{skysub}). We are then dividing all the non-blank pixels (only those on the edge) by the sky standard deviation (@file{r_detected.fits}, extension @code{SKY_STD}, which we called @code{skystd}). This gives the signal-to-noise ratio (S/N) for each of the pixels on the boundary. Finally, with the @code{meanvalue} operator, we are taking the mean value of all the non-blank pixels and reporting that as a single number.}. @example $ astarithmetic edge.fits -h1 set-edge \ r_detected.fits -hSKY_STD set-skystd \ r_detected.fits -hINPUT-NO-SKY set-skysub \ skysub skystd / edge not nan where meanvalue --quiet @end example @cindex Surface brightness We have thus detected the wings of the M51 group down to roughly 1/3rd of the noise level in this image which is a very good achievement! But the per-pixel S/N is a relative measurement. Let's also measure the depth of our detection in absolute surface brightness units; or magnitudes per square arc-seconds (see @ref{Brightness flux magnitude}). We will also ask for the S/N and magnitude of the full edge we have defined. Fortunately doing this is very easy with Gnuastro's MakeCatalog: @example $ astmkcatalog edge.fits -h1 --valuesfile=r_detected.fits \ --zeropoint=22.5 --ids --sb --sn --magnitude $ asttable edge_cat.fits 1 25.6971 55.2406 15.8994 @end example We have thus reached an outer surface brightness of @mymath{25.70} magnitudes/arcsec@mymath{^2} (second column in @file{edge_cat.fits}) on this single exposure SDSS image! This is very similar to the surface brightness limit measured in @ref{Image surface brightness limit} (which is a big achievement!). But another point in the result above is very interesting: the total S/N of the edge is @mymath{55.24} with a total edge magnitude@footnote{You can run MakeCatalog on @file{only-m51.fits} instead of @file{edge.fits} to see the full magnitude of the M51 group in this image.} of 15.90!!! This is very large for such a faint signal (recall that the mean S/N per pixel was 0.32) and shows a very important point in the study of galaxies: While the per-pixel signal in their outer edges may be very faint (and invisible to the eye in noise), a lot of signal hides deeply buried in the noise. In interpreting this value, you should just have in mind that NoiseChisel works based on the contiguity of signal in the pixels. Therefore the larger the object, the deeper NoiseChisel can carve it out of the noise (for the same outer surface brightness). In other words, this reported depth, is the depth we have reached for this object in this dataset, processed with this particular NoiseChisel configuration. If the M51 group in this image was larger/smaller than this (the field of view was smaller/larger), or if the image was from a different instrument, or if we had used a different configuration, we would go deeper/shallower. @node Extract clumps and objects, , Achieved surface brightness level, Detecting large extended targets @subsection Extract clumps and objects (Segmentation) In @ref{NoiseChisel optimization} we found a good detection map over the image, so pixels harboring signal have been differentiated from those that do not. For noise-related measurements like the surface brightness limit, this is fine. However, after finding the pixels with signal, you are most likely interested in knowing the sub-structure within them. For example, how many star forming regions (those bright dots along the spiral arms) of M51 are within this image? What are the colors of each of these star forming regions? In the outer most wings of M51, which pixels belong to background galaxies and foreground stars? And many more similar questions. To address these questions, you can use @ref{Segment} to identify all the ``clumps'' and ``objects'' over the detection. @example $ astsegment r_detected.fits --output=r_segmented.fits $ ds9 -mecube r_segmented.fits -cmap sls -zoom to fit -scale limits 0 2 @end example @cindex DS9 @cindex SAO DS9 Open the output @file{r_segmented.fits} as a multi-extension data cube with the second command above and flip through the first and second extensions, zoom-in to the spiral arms of M51 and see the detected clumps (all pixels with a value larger than 1 in the second extension). To optimize the parameters and make sure you have detected what you wanted, we recommend to visually inspect the detected clumps on the input image. For visual inspection, you can make a simple shell script like below. It will first call MakeCatalog to estimate the positions of the clumps, then make an SAO DS9 region file and open ds9 with the image and region file. Recall that in a shell script, the numeric variables (like @code{$1}, @code{$2}, and @code{$3} in the example below) represent the arguments given to the script. But when used in the AWK arguments, they refer to column numbers. To create the shell script, using your favorite text editor, put the contents below into a file called @file{check-clumps.sh}. Recall that everything after a @code{#} is just comments to help you understand the command (so read them!). Also note that if you are copying from the PDF version of this book, fix the single quotes in the AWK command. @example #! /bin/bash set -e # Stop execution when there is an error. set -u # Stop execution when a variable is not initialized. # Run MakeCatalog to write the coordinates into a FITS table. # Default output is `$1_cat.fits'. astmkcatalog $1.fits --clumpscat --ids --ra --dec # Use Gnuastro's Table and astscript-ds9-region to build the DS9 # region file (a circle of radius 1 arcseconds on each point). asttable $1"_cat.fits" -hCLUMPS -cRA,DEC \ | astscript-ds9-region -c1,2 --mode=wcs --radius=1 \ --output=$1.reg # Show the image (with the requested color scale) and the region file. ds9 -geometry 1800x3000 -mecube $1.fits -zoom to fit \ -scale limits $2 $3 -regions load all $1.reg # Clean up (delete intermediate files). rm $1"_cat.fits" $1.reg @end example @noindent Finally, you just have to activate the script's executable flag with the command below. This will enable you to directly/easily call the script as a command. @example $ chmod +x check-clumps.sh @end example @cindex AWK @cindex GNU AWK This script does not expect the @file{.fits} suffix of the input's filename as the first argument. Because the script produces intermediate files (a catalog and DS9 region file, which are later deleted). However, we do not want multiple instances of the script (on different files in the same directory) to collide (read/write to the same intermediate files). Therefore, we have used suffixes added to the input's name to identify the intermediate files. Note how all the @code{$1} instances in the commands (not within the AWK command@footnote{In AWK, @code{$1} refers to the first column, while in the shell script, it refers to the first argument.}) are followed by a suffix. If you want to keep the intermediate files, put a @code{#} at the start of the last line. The few, but high-valued, bright pixels in the central parts of the galaxies can hinder easy visual inspection of the fainter parts of the image. With the second and third arguments to this script, you can set the numerical values of the color map (first is minimum/black, second is maximum/white). You can call this script with any@footnote{Some modifications are necessary based on the input dataset: depending on the dynamic range, you have to adjust the second and third arguments. But more importantly, depending on the dataset's world coordinate system, you have to change the region @code{width}, in the AWK command. Otherwise the circle regions can be too small/large.} output of Segment (when @option{--rawoutput} is @emph{not} used) with a command like this: @example $ ./check-clumps.sh r_segmented -0.1 2 @end example Go ahead and run this command. You will see the intermediate processing being done and finally it opens SAO DS9 for you with the regions superimposed on all the extensions of Segment's output. The script will only finish (and give you control of the command-line) when you close DS9. If you need your access to the command-line before closing DS9, add a @code{&} after the end of the command above. @cindex Purity @cindex Completeness While DS9 is open, slide the dynamic range (values for black and white, or minimum/maximum values in different color schemes) and zoom into various regions of the M51 group to see if you are satisfied with the detected clumps. Do not forget that through the ``Cube'' window that is opened along with DS9, you can flip through the extensions and see the actual clumps also. The questions you should be asking yourself are these: 1) Which real clumps (as you visually @emph{feel}) have been missed? In other words, is the @emph{completeness} good? 2) Are there any clumps which you @emph{feel} are false? In other words, is the @emph{purity} good? Note that completeness and purity are not independent of each other, they are anti-correlated: the higher your purity, the lower your completeness and vice-versa. You can see this by playing with the purity level using the @option{--snquant} option. Run Segment as shown above again with @code{-P} and see its default value. Then increase/decrease it for higher/lower purity and check the result as before. You will see that if you want the best purity, you have to sacrifice completeness and vice versa. One interesting region to inspect in this image is the many bright peaks around the central parts of M51. Zoom into that region and inspect how many of them have actually been detected as true clumps. Do you have a good balance between completeness and purity? Also look out far into the wings of the group and inspect the completeness and purity there. An easier way to inspect completeness (and only completeness) is to mask all the pixels detected as clumps and visually inspecting the rest of the pixels. You can do this using Arithmetic in a command like below. For easy reading of the command, we will define the shell variable @code{i} for the image name and save the output in @file{masked.fits}. @example $ in="r_segmented.fits -hINPUT-NO-SKY" $ clumps="r_segmented.fits -hCLUMPS" $ astarithmetic $in $clumps 0 gt nan where -oclumps-masked.fits @end example Inspecting @file{clumps-masked.fits}, you can see some very diffuse peaks that have been missed, especially as you go farther away from the group center and into the diffuse wings. This is due to the fact that with this configuration, we have focused more on the sharper clumps. To put the focus more on diffuse clumps, you can use a wider convolution kernel. Using a larger kernel can also help in detecting the existing clumps to fainter levels (thus better separating them from the surrounding diffuse signal). You can make any kernel easily using the @option{--kernel} option in @ref{MakeProfiles}. But note that a larger kernel is also going to wash-out many of the sharp/small clumps close to the center of M51 and also some smaller peaks on the wings. Please continue playing with Segment's configuration to obtain a more complete result (while keeping reasonable purity). We will finish the discussion on finding true clumps at this point. The properties of the clumps within M51, or the background objects can then easily be measured using @ref{MakeCatalog}. To measure the properties of the background objects (detected as clumps over the diffuse region), you should not mask the diffuse region. When measuring clump properties with @ref{MakeCatalog} and using the @option{--clumpscat}, the ambient flux (from the diffuse region) is calculated and subtracted. If the diffuse region is masked, its effect on the clump brightness cannot be calculated and subtracted. To keep this tutorial short, we will stop here. See @ref{Segmentation and making a catalog} and @ref{Segment} for more on using Segment, producing catalogs with MakeCatalog and using those catalogs. @node Building the extended PSF, Sufi simulates a detection, Detecting large extended targets, Tutorials @section Building the extended PSF Deriving the extended PSF of an image is very important in many aspects of the analysis of the objects within it. Gnuastro has a set of installed scripts, designed to simplify the process following the recipe of Infante-Sainz et al. @url{https://arxiv.org/abs/1911.01430,2020}; for more, see @ref{PSF construction and subtraction}. An overview of the process is given in @ref{Overview of the PSF scripts}. @menu * Preparing input for extended PSF:: Which stars should be used? * Saturated pixels and Segment's clumps:: Saturation is a major hurdle! * One object for the whole detection:: Avoiding over-segmentation in objects. * Building outer part of PSF:: Building the outermost PSF wings. * Inner part of the PSF:: Going towards the PSF center. * Uniting the different PSF components:: Merging all the components into one PSF. * Subtracting the PSF:: Having the PSF, we now want to subtract it. @end menu @node Preparing input for extended PSF, Saturated pixels and Segment's clumps, Building the extended PSF, Building the extended PSF @subsection Preparing input for extended PSF We will use an image of the M51 galaxy group in the r (SDSS) band of the Javalambre Photometric Local Universe Survey (J-PLUS) to extract its extended PSF. For more information on J-PLUS, and its unique features visit: @url{http://www.j-plus.es}. First, let's download the image from the J-PLUS web page using @code{wget}. But to have a generalize-able, and easy to read command, we will define some base variables (in all-caps) first. After the download is complete, open the image with SAO DS9 (or any other FITS viewer you prefer!) to have a feeling of the data (and of course, enjoy the beauty of M51 in such a wide field of view): @example $ urlend="jplus-dr2/get_fits?id=67510" $ urlbase="http://archive.cefca.es/catalogues/vo/siap/" $ mkdir jplus-dr2 $ wget $urlbase$urlend -O jplus-dr2/67510.fits.fz $ astscript-fits-view jplus-dr2/67510.fits.fz @end example After enjoying the large field of view, have a closer look at the edges of the image. Please zoom in to the corners. You will see that on the edges, the pixel values are either zero or with significantly different values than the main body of the image. This is due to the dithering pattern that was used to make this image and happens in all imaging surveys@footnote{Recall the cropping in a previous tutorial for a similar reason (varying ``depth'' across the image): @ref{Dataset inspection and cropping}.}. To avoid potential issues or problems that these regions may cause, we will first crop out the main body of the image with the command below. To keep the top-level directory clean, let's also put the crop in a directory called @file{flat}. @example $ mkdir flat $ astcrop jplus-dr2/67510.fits.fz --section=225:9275,150:9350 \ --mode=img -oflat/67510.fits $ astscript-fits-view flat/67510.fits @end example @noindent Please zoom into the edges again, you will see that they now have the same noise-level as the rest of the image (the problematic parts are now gone). @node Saturated pixels and Segment's clumps, One object for the whole detection, Preparing input for extended PSF, Building the extended PSF @subsection Saturated pixels and Segment's clumps A constant-depth (flat) image was created in the previous section (@ref{Preparing input for extended PSF}). As explained in @ref{Overview of the PSF scripts}, an important step when building the PSF is to mask other sources in the image. Therefore, before going onto selecting stars, let's detect all significant signal, and identify the clumps of background objects over the wings of the extended PSF. There is a problem however: the saturated pixels of the bright stars are going to cause problems in the segmentation phase. To see this problem, let's make a @mymath{1000\times1000} crop around a bright star to speed up the test (and its solution). Afterwards we will apply the solution to the whole image. @example $ astcrop flat/67510.fits --mode=wcs --widthinpix --width=1000 \ --center=203.3916736,46.7968652 --output=saturated.fits $ astnoisechisel saturated.fits --output=sat-nc.fits $ astsegment sat-nc.fits --output=sat-seg.fits $ astscript-fits-view sat-seg.fits @end example Have a look at the @code{CLUMPS} extension. You will see that instead of a single clump at the center of the bright star, we have many clumps! This has happened because of the saturated pixels! When saturation occurs, the sharp peak of the profile is lost (like cutting off the tip of a mountain to build a telescope!) and all saturated pixels get a noisy value close to the saturation level. To see this saturation noise run the last command again and in SAO DS9, set the ``Scale'' to ``min max'' and zoom into the center. You will see the noisy saturation pixels at the center of the star in red. This noise-at-the-peak disrupts Segment's assumption to expand clumps from a local maxima: each noisy peak is being treated as a separate local maxima and thus a separate clump. For more on how Segment defines clumps, see Section 3.2.1 and Figure 8 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. To have the center identified as a single clump, we should mask these saturated pixels in a way that suites Segment's non-parametric methodology. First we need to find the saturation level! The saturation level is usually fixed for any survey or input data that you receive from a certain database, so you will usually have to do this only once (the first time you get data from that database). Let's make a smaller crop of @mymath{50\times50} pixels around the star with the first command below. With the next command, please look at the crop with DS9 to visually understand the problem. You will see the saturated pixels as the noisy red pixels in the center of the image. A non-saturated star will have a single pixel as the maximum and will not have such a large area covered by a noisy constant value (find a few stars in the image and see for yourself). Visual and qualitative inspection of the process is very important for understanding the solution. @example $ astcrop saturated.fits --mode=wcs --widthinpix --width=50 \ --center=203.3916736,46.7968652 --output=sat-center.fits $ astscript-fits-view sat-center.fits --ds9scale=minmax @end example @noindent To quantitatively identify the saturation level in this image, let's have a look at the distribution of pixels with a value larger than 100 (above the noise level): @example $ aststatistics sat-center.fits --greaterequal=100 Histogram: |* |* |* |* |* * |** * |*** ** |**** ** |****** **** |********** * * * ****** |************************* ************ * *** ******* *** ************ |---------------------------------------------------------------------- @end example The peak you see in the right end (larger values) of the histogram shows the saturated pixels (a constant level, with some scatter due to the large Poisson noise). If there was no saturation, the number of pixels should have decreased at increasing values; until reaching the maximum value of the profile in one pixel. But that is not the case here. Please try this experiment on a non-saturated (fainter) star to see what we mean. If you still have not experimented on a non-saturated star, please stop reading this tutorial! Please open @file{flat/67510.fits} in DS9, select a fainter/smaller star and repeat the last three commands (with a different center). After you have confirmed the point above (visually, and with the histogram), please continue with the rest of this tutorial. Finding the saturation level is easy with Statistics (by using the @option{--lessthan} option until the histogram becomes as expected: only decreasing). First, let's try @option{--lessthan=3000}: @example $ aststatistics sat-center.fits --greaterequal=100 --lessthan=3000 ------- Histogram: |* |* |* |* |* |** |*** * |**** * |******* ** |*********** * * * * * * * **** |************************* * ***** ******* ***** ** ***** * ******** |---------------------------------------------------------------------- @end example @noindent We still see an increase in the histogram around 3000. Let's try a threshold of 2500: @example $ aststatistics sat-center.fits --greaterequal=100 --lessthan=2500 ------- Histogram: |* |* |** |** |** |** |**** |***** |********* |************* * * * * |********************************* ** ** ** *** ** * **** ** ***** |---------------------------------------------------------------------- @end example The peak at the large end of the histogram has gone! But let's have a closer look at the values (the resolution of an ASCII histogram is limited!). To do this, we will ask Statistics to save the histogram into a table with the @option{--histogram} option, then look at the last 20 rows: @example $ aststatistics sat-center.fits --greaterequal=100 --lessthan=2500 \ --histogram --output=sat-center-hist.fits $ asttable sat-center-hist.fits --tail=20 2021.1849112701 1 2045.0495397186 0 2068.9141681671 1 2092.7787966156 1 2116.6434250641 0 2140.5080535126 0 2164.3726819611 0 2188.2373104095 0 2212.101938858 1 2235.9665673065 1 2259.831195755 2 2283.6958242035 0 2307.560452652 0 2331.4250811005 1 2355.289709549 1 2379.1543379974 1 2403.0189664459 2 2426.8835948944 1 2450.7482233429 2 2474.6128517914 2 @end example Since the number of points at the extreme end are increasing (from 1 to 2), We therefore see that a value 2500 is still above the saturation level (the number of pixels has started to increase)! A more reasonable saturation level for this image would be 2200! As an exercise, you can try automating this selection with AWK. Therefore, we can set the saturation level in this image@footnote{In raw exposures, this value is usually around 65000 (close to @mymath{2^{16}}, since most CCDs have 16-bit pixels; see @ref{Numeric data types}). But that is not the case here, because this is a processed/stacked image that has been calibrated.} to be 2200. Let's mask all such pixels with the command below: @example $ astarithmetic saturated.fits set-i i i 2200 gt nan where \ --output=sat-masked.fits $ astscript-fits-view sat-masked.fits --ds9scale=minmax @end example Please see the peaks of several bright stars, not just the central very bright star. Zoom into each of the peaks you see. Besides the central very bright one that we were looking at closely until now, only one other star is saturated (its center is NaN, or Not-a-Number). Try to find it. But we are not done yet! Please zoom-in to that central bright star and have another look on the edges of the vertical ``bleeding'' saturated pixels, there are strong positive/negative values touching it (almost like ``waves''). These will also cause problems and have to be masked! So with a small addition to the previous command, let's dilate the saturated regions (with 2-connectivity, or 8-connected neighbors) four times and have another look: @example $ astarithmetic saturated.fits set-i i i 2200 gt \ 2 dilate 2 dilate 2 dilate 2 dilate \ nan where --output=sat-masked.fits $ astscript-fits-view sat-masked.fits --ds9scale=minmax @end example Now that saturated pixels (and their problematic neighbors) have been masked, we can convolve the image (recall that Segment will use the convolved image for identifying clumps) with the command below. However, we will use the Spatial Domain convolution which can account for blank pixels (for more on the pros and cons of spatial and frequency domain convolution, see @ref{Spatial vs. Frequency domain}). We will also create a Gaussian kernel with @mymath{\rm{FWHM}=2} pixels, truncated at @mymath{5\times\rm{FWHM}}. @example $ astmkprof --kernel=gaussian,2,5 --oversample=1 -okernel.fits $ astconvolve sat-masked.fits --kernel=kernel.fits --domain=spatial \ --output=sat-masked-conv.fits $ astscript-fits-view sat-masked-conv.fits --ds9scale=minmax @end example @noindent Please zoom-in to the star and look closely to see how after spatial-domain convolution, the problematic pixels are still NaN. But Segment requires the profile to start with a maximum value and decrease. So before feeding into Segment, let's fill the blank values with the maximum value of the neighboring pixels in both the input and convolved images (see @ref{Interpolation operators}): @example $ astarithmetic sat-masked.fits 2 interpolate-maxofregion \ --output=sat-fill.fits $ astarithmetic sat-masked-conv.fits 2 interpolate-maxofregion \ --output=sat-fill-conv.fits $ astscript-fits-view sat-fill* --ds9scale=minmax @end example @noindent Have a closer look at the opened images. Please zoom-in (you will notice that they are already matched and locked, so they will both zoom-in together). Go to the centers of the saturated stars and confirm how they are filled with the largest non-blank pixel. We can now feed this image to NoiseChisel and Segment as the convolved image: @example $ astnoisechisel sat-fill.fits --convolved=sat-fill-conv.fits \ --output=sat-nc.fits $ astsegment sat-nc.fits --convolved=sat-fill-conv.fits \ --output=sat-seg.fits --rawoutput $ ds9 -mecube sat-seg.fits -zoom to fit -scale limits -1 1 @end example @noindent See the @code{CLUMPS} extension. Do you see how the whole center of the star has indeed been identified as a single clump? We thus achieved our aim and did not let the saturated pixels harm the identification of the center! If the issue was only clumps (like in a normal deep image processing), this was the end of Segment's special considerations. However, in the scenario here, with the very extended wings of the bright stars, it usually happens that background objects become ``clumps'' in the outskirts and will rip the bright star outskirts into separate ``objects''. In the next section (@ref{One object for the whole detection}), we will describe how you can modify Segment to avoid this issue. @node One object for the whole detection, Building outer part of PSF, Saturated pixels and Segment's clumps, Building the extended PSF @subsection One object for the whole detection In @ref{Saturated pixels and Segment's clumps}, we described how you can run Segment such that saturated pixels do not interfere with its clumps. However, due to the very extended wings of the PSF, the default definition of ``objects'' should also be modified for the scenario here. To better see the problem, let's inspect now the @code{OBJECTS} extension, focusing on those objects with a label between 50 to 150 (which include the main star): @example $ astscript-fits-view sat-seg.fits -hOBJECTS --ds9scale="limits 50 150" @end example We can see that the detection corresponding to the star has been broken into different objects. This is not a good object segmentation image for our scenario here. Since those objects in the outer wings of the bright star's detection harbor a lot of the extended PSF. We want to keep them with the same ``object'' label as the star (we only need to mask the ``clumps'' of the background sources). To do this, we will make the following changes to Segment's options (see @ref{Segmentation options} for more on this options): @itemize @item Since we want the extended diffuse flux of the PSF to be taken as a single object, we want all the grown clumps to touch. Therefore, it is necessary to decrease @option{--gthresh} to very low values, like @mymath{-10}. Recall that its value is in units of the input standard deviation, so @option{--gthresh=-10} corresponds to @mymath{-10\sigma}. The default value is not for such extended sources that dominate all background sources. @item Since we want all connected grown clumps to be counted as a single object in any case, we will set @option{--objbordersn=0} (its smallest possible value). @end itemize @noindent Let's make these changes and check if the star has been kept as a single object in the @code{OBJECTS} extension or not: @example $ astsegment sat-nc.fits --convolved=sat-fill-conv.fits \ --gthresh=-10 --objbordersn=0 \ --output=sat-seg.fits --rawoutput $ astscript-fits-view sat-seg.fits -hOBJECTS --ds9scale="limits 50 150" @end example Now we can extend these same steps to the whole image. To detect signal, we can run NoiseChisel using the command below. We modified the default value to two of the options, below you can see the reason for these changes. See @ref{Detecting large extended targets} for more on optimizing NoiseChisel. @itemize @item Since the image is so large, we have increased @option{--outliernumngb} to get better outlier statistics on the tiles. The default value is primarily for small images, so this is usually the first thing you should do when running NoiseChisel on a real/large image. @item Since the image is not too deep (made from few exposures), it does not have strong correlated noise, so we will decrease @option{--detgrowquant} and increase @option{--detgrowmaxholesize} to better extract signal. @end itemize @noindent Furthermore, since both NoiseChisel and Segment need a convolved image, we will do the convolution before and feed it to both (to save running time). But in the first command below, let's delete all the temporary files we made above. Since the image is large (+300 MB), to avoid wasting storage, any temporary file that is no longer necessary for later processing is deleted after it is used. You can visually check each of them with DS9 before deleting them (or not delete them at all!). Generally, within a pipeline it is best to remove such large temporary files, because space runs out much faster than you think (for example, once you get good results and want to use more fields). @example $ rm *.fits $ mkdir label $ astmkprof --kernel=gaussian,2,5 --oversample=1 \ -olabel/kernel.fits $ astarithmetic flat/67510.fits set-i i i 2200 gt \ 2 dilate 2 dilate 2 dilate 2 dilate nan where \ --output=label/67510-masked-sat.fits $ astconvolve label/67510-masked-sat.fits --kernel=label/kernel.fits \ --domain=spatial --output=label/67510-masked-conv.fits $ rm label/kernel.fits $ astarithmetic label/67510-masked-sat.fits 2 interpolate-maxofregion \ --output=label/67510-fill.fits $ astarithmetic label/67510-masked-conv.fits 2 interpolate-maxofregion \ --output=label/67510-fill-conv.fits $ rm label/67510-masked-conv.fits $ astnoisechisel label/67510-fill.fits --outliernumngb=100 \ --detgrowquant=0.8 --detgrowmaxholesize=100000 \ --convolved=label/67510-fill-conv.fits \ --output=label/67510-nc.fits $ rm label/67510-fill.fits $ astsegment label/67510-nc.fits --output=label/67510-seg-raw.fits \ --convolved=label/67510-fill-conv.fits --rawoutput \ --gthresh=-10 --objbordersn=0 $ rm label/67510-fill-conv.fits $ astscript-fits-view label/67510-seg-raw.fits @end example We see that the saturated pixels have not caused any problem and the central clumps/objects of bright stars are now a single clump/object. We can now proceed to estimating the outer PSF. But before that, let's make a ``standard'' segment output: one that can safely be fed into MakeCatalog for measurements and can contain all necessary outputs of this whole process in a single file (as multiple extensions). The main problem is again the saturated pixels: we interpolated them to be the maximum of their nearby pixels. But this will cause problems in any measurement that is done over those regions. To let MakeCatalog know that those pixels should not be used, the first extension of the file given to MakeCatalog should have blank values on those pixels. We will do this with the commands below: @example ## First HDU of Segment (Sky-subtracted input) $ astarithmetic label/67510-nc.fits -hINPUT-NO-SKY \ label/67510-masked-sat.fits isblank nan where \ --output=label/67510-seg.fits $ astfits label/67510-seg.fits --update=EXTNAME,INPUT-NO-SKY ## Second and third HDUs: CLUMPS and OBJECTS $ astfits label/67510-seg-raw.fits --copy=CLUMPS --copy=OBJECTS \ --output=label/67510-seg.fits ## Fourth HDU: Sky standard deviation (from NoiseChisel): $ astfits label/67510-nc.fits --copy=SKY_STD \ --output=label/67510-seg.fits ## Clean up all the un-necessary files: $ rm label/67510-masked-sat.fits label/67510-nc.fits \ label/67510-seg-raw.fits @end example @noindent You can now simply run MakeCatalog on this image and be sure that saturated pixels will not affect the measurements. As one example, you can use MakeCatalog to find the clumps containing saturated pixels: recall that the @option{--area} column only calculates the area of non-blank pixels, while @option{--geo-area} calculates the area of the label (independent of their blank-ness in the values image): @example $ astmkcatalog label/67510-seg.fits --ids --ra --dec --area \ --geo-area --clumpscat --output=cat.fits @end example The information of the clumps that have been affected by saturation can easily be found by selecting those with a differing value in the @code{AREA} and @code{AREA_FULL} columns: @example ## With AWK (second command, counts the number of rows) $ asttable cat.fits -hCLUMPS | awk '$5!=$6' $ asttable cat.fits -hCLUMPS | awk '$5!=$6' | wc -l ## Using Table arithmetic (compared to AWK, you can use column ## names, save as FITS, and be faster): $ asttable cat.fits -hCLUMPS -cRA,DEC --noblankend=3 \ -c'arith AREA AREA AREA_FULL eq nan where' ## Remove the table (which was just for a demo) $ rm cat.fits @end example @noindent We are now ready to start building the outer parts of the PSF in @ref{Building outer part of PSF}. @node Building outer part of PSF, Inner part of the PSF, One object for the whole detection, Building the extended PSF @subsection Building outer part of PSF In @ref{Saturated pixels and Segment's clumps}, and @ref{One object for the whole detection}, we described how to create a Segment clump and object map, while accounting for saturated stars and not having over-fragmentation of objects in the outskirts of stars. We are now ready to start building the extended PSF. First we will build the outer parts of the PSF, so we want the brightest stars. You will see we have several bright stars in this very large field of view, but we do not yet have a feeling how many they are, and at what magnitudes. So let's use Gnuastro's Query program to find the magnitudes of the brightest stars (those brighter than g-magnitude 10 in Gaia data release 3, or DR3). For more on Query, see @ref{Query}. @example $ astquery gaia --dataset=dr3 --overlapwith=flat/67510.fits \ --range=phot_g_mean_mag,-inf,10 \ --output=flat/67510-bright.fits @end example Now, we can easily visualize the magnitude and positions of these stars using @command{astscript-ds9-region} and the command below (for more on this script, see @ref{SAO DS9 region files from table}) @example $ astscript-ds9-region flat/67510-bright.fits -cra,dec \ --namecol=phot_g_mean_mag \ --command="ds9 flat/67510.fits -zoom to fit -zscale" @end example You can see that we have several stars between magnitudes 6 to 10. Let's use @file{astscript-psf-select-stars} in the command below to select the relevant stars in the image (the brightest; with a magnitude between 6 to 10). The advantage of using this script (instead of a simple @option{--range} in Table), is that it will also check distances to nearby stars and reject those that are too close (and not good for constructing the PSF). Since we have very bright stars in this very wide-field image, we will also increase the distance to nearby neighbors with brighter or similar magnitudes (the default value is 1 arcmin). To do this, we will set @option{--mindistdeg=0.02}, which corresponds to 1.2 arcmin. The details of the options for this script are discussed in @ref{Invoking astscript-psf-select-stars}. @example $ mkdir outer $ astscript-psf-select-stars flat/67510.fits \ --magnituderange=6,10 --mindistdeg=0.02 \ --output=outer/67510-6-10.fits @end example @noindent Let's have a look at the selected stars in the image (it is very important to visually check every step when you are first discovering a new dataset). @example $ astscript-ds9-region outer/67510-6-10.fits -cra,dec \ --namecol=phot_g_mean_mag \ --command="ds9 flat/67510.fits -zoom to fit -zscale" @end example Now that the catalog of good stars is ready, it is time to construct the individual stamps from the catalog above. To create stamps, first, we need to crop a fixed-size box around each isolated star in the catalog. The contaminant objects in the crop should be masked and finally, the fluxes in these cropped images should be normalized. To do these, we will use @file{astscript-psf-stamp} (for more on this script see @ref{Invoking astscript-psf-stamp}). One of the most important parameters for this script is the normalization radii @code{--normradii}. This parameter defines a ring for the flux normalization of each star stamp. The normalization of the flux is necessary because each star has a different brightness, and consequently, it is crucial for having all the stamps with the same flux level in the same region. Otherwise the final stack of the different stamps would have no sense. Depending on the PSF shape, internal reflections, ghosts, saturated pixels, and other systematics, it would be necessary to choose the @code{--normradii} appropriately. The selection of the normalization radii is something that requires a good understanding of the data. To do that, let's use two useful parameters that will help us in the checking of the data: @code{--tmpdir} and @code{--keeptmp}; @itemize @item With @code{--tmpdir=checking-normradii} all temporary files, including the radial profiles, will be save in that directory (instead of an internally-created name). @item With @code{--keeptmp} we will not remove the temporal files, so it is possible to have a look at them (by default the temporary directory gets deleted at the end). It is necessary to specify the @code{--normradii} even if we do not know yet the final values. Otherwise the script will not generate the radial profile. @end itemize @noindent As a consequence, in this step we put the normalization radii equal to the size of the stamps. By doing this, the script will generate the radial profile of the entire stamp. In this particular step we set it to @code{--normradii=500,510}. We also use the @option{--nocentering} option to disable sub-pixel warping in this phase (it is only relevant for the central part of the PSF). Furthermore, since there are several stars, we iterate over each row of the catalog using a while loop. @example $ counter=1 $ mkdir finding-normradii $ asttable outer/67510-6-10.fits \ | while read -r ra dec mag; do astscript-psf-stamp label/67510-seg.fits \ --mode=wcs \ --nocentering \ --center=$ra,$dec \ --normradii=500,510 \ --widthinpix=1000,1000 \ --segment=label/67510-seg.fits \ --output=finding-normradii/$counter.fits \ --tmpdir=finding-normradii --keeptmp; \ counter=$((counter+1)); \ done @end example First let's have a look at all the masked postage stamps of the cropped stars. Once they all open, feel free to zoom-in, they are all matched and locked. It is always good to check the different stamps to ensure the quality and possible two dimensional features that are difficult to detect from the radial profiles (such as ghosts and internal reflections). @example $ astscript-fits-view finding-normradii/cropped-masked*.fits @end example @noindent If everything looks good in the image, let's open all the radial profiles and visually check those with the command below. Note that @command{astscript-fits-view} calls the @command{topcat} graphic user interface (GUI) program to visually inspect (plot) tables. If you do not already have it, see @ref{TOPCAT}. @example $ astscript-fits-view finding-normradii/rprofile*.fits @end example After some study of this data, we could say that a good normalization ring is those pixels between R=20 and R=30 pixels. Such a ring ensures having a high number of pixels so the estimation of the flux normalization will be robust. Also, at such distance from the center the signal to noise is high and there are not obvious features that can affect the normalization. Note that the profiles are different because we are considering a wide range of magnitudes, so the fainter stars are much more noisy. However, in this tutorial we will keep these stars in order to have a higher number of stars for the outer part. In a real case scenario, we should look for stars with a much more similar brightness (smaller range of magnitudes) to not lose signal to noise as a consequence of the inclusion of fainter stars. @example $ rm -r finding-normradii $ counter=1 $ mkdir outer/stamps $ asttable outer/67510-6-10.fits \ | while read -r ra dec mag; do astscript-psf-stamp label/67510-seg.fits \ --mode=wcs \ --nocentering \ --center=$ra,$dec \ --normradii=20,30 \ --widthinpix=1000,1000 \ --segment=label/67510-seg.fits \ --output=outer/stamps/67510-$counter.fits; \ counter=$((counter+1)); \ done @end example After the stamps are created, we need to stack them together with a simple Arithmetic command (see @ref{Stacking operators}). The stack is done using the sigma-clipped mean operator that will preserve more of the signal, while rejecting outliers (more than @mymath{3\sigma} with a tolerance of @mymath{0.2}, for more on sigma-clipping see @ref{Sigma clipping}). Just recall that we need to specify the number of inputs into the stacking operators, so we are reading the list of images and counting them as separate variables before calling Arithmetic. @c We are not using something like 'ls' because on some systems, 'ls' @c always prints outputs on a one-file-per-line format and this will cause @c a problem in Arithmetic, see: @c https://lists.gnu.org/archive/html/bug-gnuastro/2023-01/msg00007.html @example $ numimgs=$(echo outer/stamps/*.fits | wc -w) $ astarithmetic outer/stamps/*.fits $numimgs 3 0.2 sigclip-mean \ -g1 --output=outer/stack.fits --wcsfile=none @end example @noindent Did you notice the @option{--wcsfile=none} option above? With it, the stacked image no longer has any WCS information. This is natural, because the stacked image does not correspond to any specific region of the sky any more. Let's compare this stacked PSF with the images of the individual stars that were used to create it. You can clearly see that the number of masked pixels is significantly decreased and the PSF is much more ``cleaner''. @example $ astscript-fits-view outer/stack.fits outer/stamps/*.fits @end example However, the saturation in the center still remains. Also, because we did not have too many images, some regions still are very noisy. If we had more bright stars in our selected magnitude range, we could have filled those outer remaining patches. In a large survey like J-PLUS (that we are using here), you can simply look into other fields that were observed soon before/after the image ID 67510 that we used here (to have a similar PSF) and get more stars in those images to add to these. In fact, the J-PLUS DR2 image ID of the field above was intentionally preserved during the steps above to show how easy it is to use images from other fields and blend them all into the output PSF. @node Inner part of the PSF, Uniting the different PSF components, Building outer part of PSF, Building the extended PSF @subsection Inner part of the PSF In @ref{Building outer part of PSF}, we were able to create a stack of the outer-most behavior of the PSF in a J-PLUS survey image. But the central part that was affected by saturation and non-linearity is still remaining, and we still do not have a ``complete'' PSF! In this section, we will use the same steps before to make stacks of more inner regions of the PSF to ultimately unite them all into a single PSF in @ref{Uniting the different PSF components}. For the outer PSF, we selected stars in the magnitude range of 6 to 10. So let's have a look and see how many stars we have in the magnitude range of 12 to 13 with a more relaxed condition on the minimum distance for neighbors, @option{--mindistdeg=0.01} (36 arcsec, since these stars are fainter), and use the ds9 region script to visually inspect them: @example $ mkdir inner $ astscript-psf-select-stars flat/67510.fits \ --magnituderange=12,13 --mindistdeg=0.01 \ --output=inner/67510-12-13.fits $ astscript-ds9-region inner/67510-12-13.fits -cra,dec \ --namecol=phot_g_mean_mag \ --command="ds9 flat/67510.fits -zoom to fit -zscale" @end example We have 41 stars, but if you zoom into their centers, you will see that they do not have any major bleeding-vertical saturation any more. Only the very central core of some of the stars is saturated. We can therefore use these stars to fill the strong bleeding footprints that were present in the outer stack of @file{outer/stack.fits}. Similar to before, let's build ready-to-stack crops of these stars. To get a better feeling of the normalization radii, follow the same steps of @ref{Building outer part of PSF} (setting @option{--tmpdir} and @option{--keeptmp}). In this case, since the stars are fainter, we can set a smaller size for the individual stamps, @option{--widthinpix=500,500}, to speed up the calculations: @c For 'numimgs' and the 'astarithmetic' commands, see the comments above @c the same step for the outer part. @example $ counter=1 $ mkdir inner/stamps $ asttable inner/67510-12-13.fits \ | while read -r ra dec mag; do astscript-psf-stamp label/67510-seg.fits \ --mode=wcs \ --normradii=5,10 \ --center=$ra,$dec \ --widthinpix=500,500 \ --segment=label/67510-seg.fits \ --output=inner/stamps/67510-$counter.fits; \ counter=$((counter+1)); \ done $ numimgs=$(echo inner/stamps/*.fits | wc -w) $ astarithmetic inner/stamps/*.fits $numimgs 3 0.2 sigclip-mean \ -g1 --output=inner/stack.fits --wcsfile=none $ astscript-fits-view inner/stack.fits inner/stamps/*.fits @end example @noindent We are now ready to unite the two stacks we have constructed: the outer and the inner parts. @node Uniting the different PSF components, Subtracting the PSF, Inner part of the PSF, Building the extended PSF @subsection Uniting the different PSF components In @ref{Building outer part of PSF} we built the outer part of the extended PSF and the inner part was built in @ref{Inner part of the PSF}. The outer part was built with very bright stars, and the inner part using fainter stars to not have saturation in the core of the PSF. The next step is to join these two parts in order to have a single PSF. First of all, let's have a look at the two stacks and also to their radial profiles to have a good feeling of the task. Note that you will need to have TOPCAT to run the last command and plot the radial profile (see @ref{TOPCAT}). @example $ astscript-fits-view outer/stack.fits inner/stack.fits $ astscript-radial-profile outer/stack.fits -o outer/profile.fits $ astscript-radial-profile inner/stack.fits -o inner/profile.fits $ astscript-fits-view outer/profile.fits inner/profile.fits @end example From the visual inspection of the images and the radial profiles, it is clear that we have saturation in the center for the outer part. Note that the absolute flux values of the PSFs are meaningless since they depend on the normalization radii we used to obtain them. The uniting step consists in scaling up (or down) the inner part of the PSF to have the same flux at the junction radius, and then, use that flux-scaled inner part to fill the center of the outer PSF. To get a feeling of the process, first, let's open the two radial profiles and find the factor manually first: @enumerate @item Run this command to open the two tables in @ref{TOPCAT}: @example $ astscript-fits-view outer/profile.fits inner/profile.fits @end example @item On the left side of the screen, under ``Table List'', you will see the two imported tables. Click on the first one (profile of the outer part) so it is shown first. @item Under the ``Graphics'' menu item, click on ``Plane plot''. A new window will open with the plot of the first two columns: @code{RADIUS} on the horizontal axis and @code{MEAN} on the vertical. The rest of the steps are done in this window. @item In the bottom settings, within the left panel, click on the ``Axes'' item. This will allow customization of the plot axes. @item In the bottom-right panel, click on the box in front of ``Y Log'' to make the vertical axis logarithmic-scaled. @item On the ``Layers'' menu, select ``Add Position Control'' to allow adding the profile of the inner region. After it, you will see that a new red-blue scatter plot icon opened on the bottom-left menu (with a title of @code{<no table>}). @item On the bottom-right panel, in the drop-down menu in front of @code{Table:}, select @code{2: profile.fits}. Afterwards, you will see the radial profile of the inner stack as the newly added blue plot. Our goal here is to find the factor that is necessary to multiply with the inner profile so it matches the outer one. @item On the bottom-right panel, in front of @code{Y:}, you will see @code{MEAN}. Click in the white-space after it, and type this: @code{*100}. This will display the @code{MEAN} column of the inner profile, after multiplying it by 100. Afterwards, you will see that the inner profile (blue) matches more cleanly with the outer (red); especially in the smaller radii. At larger radii, it does not drop like the red plot. This is because of the extremely low signal-to-noise ratio at those regions in the fainter stars used to make this stack. @item Take your mouse cursor over the profile, in particular over the bump around a radius of 100 pixels. Scroll your mouse down-ward to zoom-in to the profile and up-ward to zoom-out. You can click-and-hold any part of the profile and if you move your cursor (while still holding the mouse-button) to look at different parts of the profile. This is particular helpful when you have zoomed-in to the profile. @item Zoom-in to the bump around a radius of 100 pixels until the horizontal axis range becomes around 50 to 130 pixels. @item You clearly see that the inner stack (blue) is much more noisy than the outer (red) stack. By ``noisy'', we mean that the scatter of the points is much larger. If you further zoom-out, you will see that the shallow slope at the larger radii of the inner (blue) profile has also affected the height of this bump in the inner profile. This is a @emph{very important} point: this clearly shows that the inner profile is too noisy at these radii. @item Click-and-hold your mouse to see the inner parts of the two profiles (in the range 0 to 80). You will see that for radii less than 40 pixels, the inner profile (blue) points loose their scatter (and thus have a good signal-to-noise ratio). @item Zoom-in to the plot and follow the profiles until smaller radii (for example, 10 pixels). You see that for each radius, the inner (blue) points are consistently above the outer (red) points. This shows that the @mymath{\times100} factor we selected above was too much. @item In the bottom-right panel, change the @code{100} to @code{80} and zoom-in to the same region. At each radius, the blue points are now below the red points, so the scale-factor 80 is not enough. So let's increase it and try @code{90}. After zooming-in, you will notice that in the inner-radii (less than 30 pixels), they are now very similar. The ultimate aim of the steps below is to find this factor automatically. @cindex Saturation (CCDs) @cindex Non-linearity (CCDs) @item But before continuing, let's focus on another important point about the central regions: non-linearity and saturation. While you are zoomed-in (from the step above), follow (click-and-drag) the profile towards smaller radii. You will see that smaller than a radius of 10, they start to diverge. But this time, the outer (red) profile is getting a shallower slope and diverges significantly from about the radius of 8. We had masked all saturated pixels before, so this divergence for radii smaller than 10 shows the effect of the CCD's non-linearity (where the number of electrons will not be linearly correlated with the number of incident photons). This is present in all CCDs and pixels beyond this level should not be used in measurements (or properly corrected). @end enumerate The items above were only listed so you get a good mental/visual understanding of the logic behind the operation of the next script (and to learn how to tune its parameters where necessary): @file{astscript-psf-scale-factor}. This script is more general than this particular problem, but can be used for this special case also. Its job is to take a model of an object (PSF, or inner stack in this case) and the position of an instance of that model (a star, or the outer stack in this case) in a larger image. Instead of dealing with radial profiles (that enforce a certain shape), this script will put the centers of the inner and outer PSFs over each other and divide the outer by the inner. Let's have a look with the command below. Just note that we are running it with @option{--keeptmp} so the temporary directory with all the intermediate files remain for further clarification: @example $ astscript-psf-scale-factor outer/stack.fits \ --psf=inner/stack.fits --center=501,501 \ --mode=img --normradii=10,15 --keeptmp $ astscript-fits-view stack_psfmodelscalefactor/cropped-*.fits \ stack_psfmodelscalefactor/for-factor-*.fits @end example With the second command, you see the four steps of the process: the first two images show the cropped outer and inner stacks (to same width image). The third shows the radial position of each pixel (which is used to only keep the pixels within the desired radial range). The fourth shows the per-pixel division of the outer by the inner within the requested radii. The sigma-clipped median of these pixels is finally reported. Unlike the radial profile method (which averages over a circular/elliptical annulus for each radius), this method imposes no a-priori shape on the PSF. This makes it very useful for complex PSFs (like the case here). To continue, let's remove the temporary directory and re-run the script but with @option{--quiet} mode so we can put the output in a shell variable. @example $ rm -r stack_psfmodelscalefactor $ scale=$(astscript-psf-scale-factor outer/stack.fits \ --psf=inner/stack.fits --center=501,501 \ --mode=img --normradii=10,15 --quiet) $ echo $scale @end example Now that we know the scaling factor, we are ready to unite the outer and the inner part of the PSF. To do that, we will use the script @file{astscript-psf-unite} with the command below (for more on this script, see @ref{Invoking astscript-psf-unite}). The basic parameters are the inner part of the PSF (given to @option{--inner}), the inner part's scale factor (@option{--scale}), and the junction radius (@option{--radius}). The inner part is first scaled, and all the pixels of the outer image within the given radius are replaced with the pixels of the inner image. Since the flux factor was computed for a ring of pixels between 10 and 15 pixels, let's set the junction radius to be 12 pixels (roughly in between 10 and 15): @example $ astscript-psf-unite outer/stack.fits \ --inner=inner/stack.fits --radius=12 \ --scale=$scale --output=psf.fits @end example @noindent Let's have a look at the outer stack and the final PSF with the command below. Since we want several other DS9 settings to help you directly see the main point, we are using @option{--ds9extra}. After DS9 is opened, you can see that the center of the PSF has now been nicely filled. You can click on the ``Edit'' button and then the ``Colorbar'' and hold your cursor over the image and move it. You can see that besides filling the inner regions nicely, there is also no major discontinuity in the 2D image around the union radius of 12 pixels around the center. @example $ astscript-fits-view outer/stack.fits psf.fits --ds9scale=minmax \ --ds9extra="-scale limits 0 22000 -match scale" \ --ds9extra="-lock scale yes -zoom 4 -scale log" @end example Nothing demonstrates the effect of a bad analysis than actually seeing a bad result! So let's choose a bad normalization radial range (50 to 60 pixels) and unite the inner and outer parts based on that. The last command will open the two PSFs together in DS9, you should be able to immediately see the discontinuity in the union radius. @example $ scale=$(astscript-psf-scale-factor outer/stack.fits \ --psf=inner/stack.fits --center=501,501 \ --mode=img --normradii=50,60 --quiet) $ astscript-psf-unite outer/stack.fits \ --inner=inner/stack.fits --radius=55 \ --scale=$scale --output=psf-bad.fits $ astscript-fits-view psf-bad.fits psf.fits --ds9scale=minmax \ --ds9extra="-scale limits 0 50 -match scale" \ --ds9extra="-lock scale yes -zoom 4 -scale log" @end example As you see, the selection of the normalization radii and the unite radius are very important. The first time you are trying to build the PSF of a new dataset, it has to be explored with a visual inspection of the images and radial profiles. Once you have found a good normalization radius for a certain part of the PSF in a survey, you can generally use it comfortably without change. But for a new survey, or a different part of the PSF, be sure to repeat the visual checks above to choose the best radii. As a summary, a good junction radius is one that: @itemize @item Is large enough to not let saturation and non-linearity (from the outer profile) into the inner region. @item Is small enough to have a sufficiently high signal to noise ratio (from the inner profile) to avoid adding noise in the union radius. @end itemize Now that the complete PSF has been obtained, let's remove that bad-looking PSF, and stick with the nice and clean PSF for the next step in @ref{Subtracting the PSF}. @example $ rm -rf psf-bad.fits @end example @node Subtracting the PSF, , Uniting the different PSF components, Building the extended PSF @subsection Subtracting the PSF Previously (in @ref{Uniting the different PSF components}) we constructed a full PSF, from the central pixel to a radius of 500 pixels. Now, let's use the PSF to subtract the scattered light from each individual star in the image. By construction, the pixel values of the PSF came from the normalization of the individual stamps (that were created for stars of different magnitudes). As a consequence, it is necessary to compute a scale factor to fit that PSF image to each star. This is done with the same @file{astscript-psf-scale-factor} command that we used previously in @ref{Uniting the different PSF components}. The difference is that now we are not aiming to join two different PSF parts but looking for the necessary scale factor to match the star with the PSF. Afterwards, we will use @file{astscript-psf-subtract} for placing the PSF image at the desired coordinates within the same pixel grid as the image. Finally, once the stars have been modeled by the PSF, we will subtract it. First, let's start with a single star. Later, when the basic idea has been explained, we will generalize the method for any number of stars. With the following command we obtain the coordinates (RA and DEC) and magnitude of the brightest star in the image (which is on the top edge of the image): @example $ mkdir single-star $ center=$(asttable flat/67510-bright.fits --sort phot_g_mean_mag \ --column=ra,dec --head 1 \ | awk '@{printf "%s,%s", $1, $2@}') $ echo $center @end example With the center position of that star, let's obtain the flux factor using the same normalization ring we used for the creation of the outer part of the PSF: @example $ scale=$(astscript-psf-scale-factor label/67510-seg.fits \ --mode=wcs --quiet \ --psf=psf.fits \ --center=$center \ --normradii=10,15 \ --segment=label/67510-seg.fits) @end example Now we have all the information necessary to model the star using the PSF: the position on the sky and the flux factor. Let's use this data with the script @file{astscript-psf-subtract} for modeling this star and have a look with DS9. @example $ astscript-psf-subtract label/67510-seg.fits \ --mode=wcs \ --psf=psf.fits \ --scale=$scale \ --center=$center \ --output=single-star/subtracted.fits $ astscript-fits-view label/67510-seg.fits single-star/subtracted.fits \ --ds9center=$center --ds9mode=wcs --ds9extra="-zoom 4" @end example You will notice that there is something wrong with this ``subtraction''! The box of the extended PSF is clearly visible! The sky noise under the box is clearly larger than the rest of the noise in the image. Before reading on, please try to think about the cause of this yourself. To understand the cause, let's look at the scale factor, the number of stamps used to build the outer part (and its square root): @example $ echo $scale $ ls outer/stamps/*.fits | wc -l $ ls outer/stamps/*.fits | wc -l | awk '@{print sqrt($1)@}' @end example You see that the scale is almost 19! As a result, the PSF has been multiplied by 19 before being subtracted. However, the outer part of the PSF was created with only a handful of star stamps. When you stack @mymath{N} images, the stack's signal-to-noise ratio (S/N) improves by @mymath{\sqrt{N}}. We had 8 images for the outer part, so the S/N has only improved by a factor of just under 3! When we multiply the final stacked PSF with 19, we are also scaling up the noise by that same factor (most importantly: in the outer most regions where there is almost no signal). So the stacked image's noise-level is @mymath{19/3=6.3} times larger than the noise of the input image. This terrible noise-level is what you clearly see as the footprint of the PSF. To confirm this, let's use the commands below to subtract the faintest of the bright-stars catalog (note the use of @option{--tail} when finding the central position). You will notice that the scale factor (@mymath{\sim1.3}) is now smaller than 3. So when we multiply the PSF with this factor, the PSF's noise level is lower than our input image and we should not see any footprint like before. Note also that we are using a larger zoom factor, because this star is smaller in the image. @example $ center=$(asttable flat/67510-bright.fits --sort phot_g_mean_mag \ --column=ra,dec --tail 1 \ | awk '@{printf "%s,%s", $1, $2@}') $ scale=$(astscript-psf-scale-factor label/67510-seg.fits \ --mode=wcs --quiet \ --psf=psf.fits \ --center=$center \ --normradii=10,15 \ --segment=label/67510-seg.fits) $ echo $scale $ astscript-psf-subtract label/67510-seg.fits \ --mode=wcs \ --psf=psf.fits \ --scale=$scale \ --center=$center \ --output=single-star/subtracted.fits $ astscript-fits-view label/67510-seg.fits single-star/subtracted.fits \ --ds9center=$center --ds9mode=wcs --ds9extra="-zoom 10" @end example In a large survey like J-PLUS, it is easy to use more and more bright stars from different pointings (ideally with similar FWHM and similar telescope properties@footnote{For example, in J-PLUS, the baffle of the secondary mirror was adjusted in 2017 because it produced extra spikes in the PSF. So all images after that date have a PSF with 4 spikes (like this one), while those before it have many more spikes.}) to improve the S/N of the PSF. As explained before, we designed the output files of this tutorial with the @code{67510} (which is this image's pointing label in J-PLUS) where necessary so you see how easy it is to add more pointings to use in the creation of the PSF. Let's consider now more than one single star. We should have two things in mind: @itemize @item The brightest (subtract-able, see the point below) star should be the first star to be subtracted. This is because of its extended wings which may affect the scale factor of nearby stars. So we should sort the catalog by magnitude and come down from the brightest. @item We should only subtract stars where the scale factor is less than the S/N of the PSF (in relation to the data). @end itemize Since it can get a little complex, it is easier to implement this step as a script (that is heavily commented for you to easily understand every step; especially if you put it in a good text editor with color-coding!). You will notice that script also creates a @file{.log} file, which shows which star was subtracted and which one was not (this is important, and will be used below!). @example #!/bin/bash # Abort the script on first error. set -e # ID of image to subtract stars from. imageid=67510 # Get S/N level of the final PSF in relation to the actual data: snlevel=$(ls outer/stamps/*.fits | wc -l | awk '@{print sqrt($1)@}') # Put a copy of the image we want to subtract the PSF from in the # final file (this will be over-written after each subtraction). subtracted=subtracted/$imageid.fits cp label/$imageid-seg.fits $subtracted # Name of log-file to keep status of the subtraction of each star. logname=subtracted/$imageid.log echo "# Column 1: RA [deg, f64] Right ascension of star." > $logname echo "# Column 2: Dec [deg, f64] Declination of star." >> $logname echo "# Column 3: Stat [deg, f64] Status (1: subtracted)" >> $logname # Go over each item in the bright star catalog: asttable flat/67510-bright.fits -cra,dec --sort phot_g_mean_mag \ | while read -r ra dec; do # Put a comma between the RA/Dec to pass to options. center=$(echo $ra $dec | awk '@{printf "%s,%s", $1, $2@}') # Calculate the scale value scale=$(astscript-psf-scale-factor label/67510-seg.fits \ --mode=wcs --quiet\ --psf=psf.fits \ --center=$center \ --normradii=10,15 \ --segment=label/67510-seg.fits) # Subtract this star if the scale factor is less than the S/N # level calculated above. check=$(echo $snlevel $scale \ | awk '@{if($1>$2) c="good"; else c="bad"; print c@}') if [ $check = good ]; then # A temporary file to subtract this star. subtmp=subtracted/$imageid-tmp.fits # Subtract this star from the image where all previous stars # were subtracted. astscript-psf-subtract $subtracted \ --mode=wcs \ --psf=psf.fits \ --scale=$scale \ --center=$center \ --output=$subtmp # Rename the temporary subtracted file to the final one: mv $subtmp $subtracted # Keep the status for this star. status=1 else # Let the user know this star did not work, and keep the status # for this star. echo "$center: $scale is larger than $snlevel" status=0 fi # Keep the status in a log file. echo "$ra $dec $status" >> $logname done @end example Copy the contents above into a file called @file{subtract-psf-from-cat.sh} and run the following commands. Just note that in the script above, we assumed the output is written in the @file{subtracted/}, directory, so we will first make that. @example $ mkdir subtracted $ chmod +x subtract-psf-from-cat.sh $ ./subtract-psf-from-cat.sh $ astscript-fits-view label/67510-seg.fits subtracted/67510.fits @end example Can you visually find the stars that have been subtracted? Its a little hard, is not it? This shows that you done a good job this time (the sky-noise is not significantly affected)! So let's subtract the actual image from the PSF-subtracted image to see the scattered light field of the subtracted stars. With the second command below we will zoom into the brightest subtracted star, but of course feel free to zoom-out and inspect the others also. @example $ astarithmetic label/67510-seg.fits subtracted/67510.fits - \ --output=scattered-light.fits -g1 $ center=$(asttable subtracted/67510.log --equal=Stat,1 --head=1 \ -cra,dec | awk '@{printf "%s,%s", $1, $2@}') $ astscript-fits-view label/67510-seg.fits subtracted/67510.fits \ scattered-light.fits \ --ds9center=$center --ds9mode=wcs \ --ds9extra="-scale limits -0.5 1.5 -match scale" \ --ds9extra="-lock scale yes -zoom 10" \ --ds9extra="-tile mode column" ## We can always make it easily, so let's remove this. $ rm scattered-light.fits @end example You will probably have noticed that in the scattered light field there are some patches that correspond to the saturation of the stars. Since we obtained the scattered light field by subtracting PSF-subtracted image from the original image, it is natural that we have such saturated regions. To solve such inconvenience, this script also has an option to not make the subtraction of the PSF but to give as output the modeled star. For doing that, it is necessary to run the script with the option @option{--modelonly}. We encourage the reader to obtain such scattered light field model. In some scenarios it could be interesting having such way of correcting the PSF. For example, if there are many faint stars that can be modeled at the same time because their flux do not affect each other. In such situation, the task could be easily parallelized without having to wait to model the brighter stars before the fainter ones. At the end, once all stars have been modeled, a simple Arithmetic command could be used to sum the different modeled-PSF stamps to obtain the entire scattered light field. In general you see that the subtraction has been done nicely and almost all the extended wings of the PSF have been subtracted. The central regions of the stars are not perfectly subtracted: @itemize @item Some may get too dark at the center. This may be due to the non-linearity of the CCD counting (as discussed previously in @ref{Uniting the different PSF components}). @item Others may have a strong gradient: one side is too positive and one side is too negative (only in the very central few pixels). This is due to the non-accurate positioning: most probably this happens because of imperfect astrometry. @end itemize Note also that during this process we assumed that the PSF does not vary with the CCD position or any other parameter. In other words, we are obtaining an averaged PSF model from a few star stamps that are naturally different, and this also explains the residuals on each subtracted star. We let as an interesting exercise the modeling and subtraction of other stars, for example, the non saturated stars of the image. By doing this, you will notice that in the core region the residuals are different compared to the residuals of brighter stars that we have obtained. In general, in this tutorial we have showed how to deal with the most important challenges for constructing an extended PSF. Each image or dataset will have its own particularities that you will have to take into account when constructing the PSF. @node Sufi simulates a detection, Detecting lines and extracting spectra in 3D data, Building the extended PSF, Tutorials @section Sufi simulates a detection @cindex Azophi @cindex Abd al-rahman Sufi @cindex Sufi, Abd al-rahman It is the year 953 A.D. and Abd al-rahman Sufi (903 -- 986 A.D.)@footnote{In Latin Sufi is known as Azophi. He was an Iranian astronomer. His manuscript ``Book of fixed stars'' contains the first recorded observations of the Andromeda galaxy, the Large Magellanic Cloud and seven other non-stellar or `nebulous' objects.} is in Shiraz as a guest astronomer. He had come there to use the advanced 123 centimeter astrolabe for his studies on the ecliptic. However, something was bothering him for a long time. While mapping the constellations, there were several non-stellar objects that he had detected in the sky, one of them was in the Andromeda constellation. During a trip he had to Yemen, Sufi had seen another such object in the southern skies looking over the Indian ocean. He was not sure if such cloud-like non-stellar objects (which he was the first to call `Sah@={a}bi' in Arabic or `nebulous') were real astronomical objects or if they were only the result of some bias in his observations. Could such diffuse objects actually be detected at all with his detection technique? @cindex Almagest @cindex Claudius Ptolemy @cindex Ptolemy, Claudius He still had a few hours left until nightfall (when he would continue his studies on the ecliptic) so he decided to find an answer to this question. He had thoroughly studied Claudius Ptolemy's (90 -- 168 A.D) Almagest and had made lots of corrections to it, in particular in measuring the brightness. Using his same experience, he was able to measure a magnitude for the objects and wanted to simulate his observation to see if a simulated object with the same brightness and size could be detected in simulated noise with the same detection technique. The general outline of the steps he wants to take are: @enumerate @item Make some mock profiles in an over-sampled image. The initial mock image has to be over-sampled prior to convolution or other forms of transformation in the image. Through his experiences, Sufi knew that this is because the image of heavenly bodies is actually transformed by the atmosphere or other sources outside the atmosphere (for example, gravitational lenses) prior to being sampled on an image. Since that transformation occurs on a continuous grid, to best approximate it, he should do all the work on a finer pixel grid. In the end he can resample the result to the initially desired grid size. @item @cindex PSF Convolve the image with a point spread function (PSF, see @ref{PSF}) that is over-sampled to the same resolution as the mock image. Since he wants to finish in a reasonable time and the PSF kernel will be very large due to oversampling, he has to use frequency domain convolution which has the side effect of dimming the edges of the image. So in the first step above he also has to build the image to be larger by at least half the width of the PSF convolution kernel on each edge. @item With all the transformations complete, the image should be resampled to the same size of the pixels in his detector. @item He should remove those extra pixels on all edges to remove frequency domain convolution artifacts in the final product. @item He should add noise to the (until now, noise-less) mock image. After all, all observations have noise associated with them. @end enumerate Fortunately Sufi had heard of GNU Astronomy Utilities from a colleague in Isfahan (where he worked) and had installed it on his computer a year before. It had tools to do all the steps above. He had used MakeProfiles before, but was not sure which columns he had chosen in his user or system-wide configuration files for which parameters, see @ref{Configuration files}. So to start his simulation, Sufi runs MakeProfiles with the @option{-P} option to make sure what columns in a catalog MakeProfiles currently recognizes, and confirm the output image parameters. In particular, Sufi is interested in the recognized columns (shown below). @example $ astmkprof -P [[[ ... Truncated lines ... ]]] # Output: type float32 # Type of output: e.g., int16, float32, etc. mergedsize 1000,1000 # Number of pixels along first FITS axis. oversample 5 # Scale of oversampling (>0 and odd). [[[ ... Truncated lines ... ]]] # Columns, by info (see `--searchin'), or number (starting from 1): ccol 2 # Coord. columns (one call for each dim.). ccol 3 # Coord. columns (one call for each dim.). fcol 4 # sersic (1), moffat (2), gaussian (3), point # (4), flat (5), circumference (6), distance # (7), custom-prof (8), azimuth (9), # custom-img (10). rcol 5 # Effective radius or FWHM in pixels. ncol 6 # Sersic index or Moffat beta. pcol 7 # Position angle. qcol 8 # Axis ratio. mcol 9 # Magnitude. tcol 10 # Truncation in units of radius or pixels. [[[ ... Truncated lines ... ]]] @end example @noindent In Gnuastro, column counting starts from 1, so the columns are ordered such that the first column (number 1) can be an ID he specifies for each object (and MakeProfiles ignores), each subsequent column is used for another property of the profile. It is also possible to use column names for the values of these options and change these defaults, but Sufi preferred to stick to the defaults. Fortunately MakeProfiles has the capability to also make the PSF which is to be used on the mock image and using the @option{--prepforconv} option, he can also make the mock image to be larger by the correct amount and all the sources to be shifted by the correct amount. For his initial check he decides to simulate the nebula in the Andromeda constellation. The night he was observing, the PSF had roughly a FWHM of about 5 pixels, so as the first row (profile) in the table below, he defines the PSF parameters. Sufi sets the radius column (@code{rcol} above, fifth column) to @code{5.000}, he also chooses a Moffat function for its functional form. Remembering how diffuse the nebula in the Andromeda constellation was, he decides to simulate it with a mock S@'{e}rsic index 1.0 profile. He wants the output to be 499 pixels by 499 pixels, so he can put the center of the mock profile in the central pixel of the image which is the 250th pixel along both dimensions (note that an even number does not have a ``central'' pixel). Looking at his drawings of it, he decides a reasonable effective radius for it would be 40 pixels on this image pixel scale (second row, 5th column below). He also sets the axis ratio (0.4) and position angle (-25 degrees) to approximately correct values too, and finally he sets the total magnitude of the profile to 3.44 which he had measured. Sufi also decides to truncate both the mock profile and PSF at 5 times the respective radius parameters. In the end he decides to put four stars on the four corners of the image at very low magnitudes as a visual scale. While he was preparing the catalog, one of his students approached him and was also following the steps. @noindent As described above, the catalog of profiles to build will be a table (multiple columns of numbers) like below: @example 0 0.000 0.000 2 5 4.7 0.0 1.0 30.0 5.0 1 250.0 250.0 1 40 1.0 -25 0.4 3.44 5.0 2 50.00 50.00 4 0 0.0 0.0 0.0 6.00 0.0 3 450.0 50.00 4 0 0.0 0.0 0.0 6.50 0.0 4 50.00 450.0 4 0 0.0 0.0 0.0 7.00 0.0 5 450.0 450.0 4 0 0.0 0.0 0.0 7.50 0.0 @end example This contains all the ``data'' to build the profile, and you can easily pass it to Gnuastro's MakeProfiles: since Sufi already knows the columns and expected values very good, he has placed the information in the proper columns. However, when the student sees this, he just sees a mumble-jumble of numbers! Generally, Sufi explains to the student that even if you know the number positions and values very nicely today, in a couple of months you will forget! It will then be very hard for you to interpret the numbers properly. So you should never use naked data (or data without any extra information). @cindex Metadata Data (or information) that describes other data is called ``metadata''! One common example is column names (the name of a column is itself a data element, but data that describes the lower-level data within that column: how to interpret the numbers within it). Sufi explains to his student that Gnuastro has a convention for adding metadata within a plain-text file; and guides him to @ref{Gnuastro text table format}. Because we do not want metadata to be confused with the actual data, in a plain-text file, we start lines containing metadata with a `@code{#}'. For example, see the same data above, but this time with metadata for every column: @example # Column 1: ID [counter, u8] Identifier # Column 2: X [pix, f32] Horizontal position # Column 3: Y [pix, f32] Vertical position # Column 4: PROFILE [name, u8] Radial profile function # Column 5: R [pix, f32] Effective radius # Column 6: N [n/a, f32] Sersic index # Column 7: PA [deg, f32] Position angle # Column 8: Q [n/a, f32] Axis ratio # Column 9: MAG [log, f32] Magnitude # Column 10: TRUNC [n/a, f32] Truncation (multiple of R) 0 0.000 0.000 2 5 4.7 0.0 1.0 30.0 5.0 1 250.0 250.0 1 40 1.0 -25 0.4 3.44 5.0 2 50.00 50.00 4 0 0.0 0.0 0.0 6.00 0.0 3 450.0 50.00 4 0 0.0 0.0 0.0 6.50 0.0 4 50.00 450.0 4 0 0.0 0.0 0.0 7.00 0.0 5 450.0 450.0 4 0 0.0 0.0 0.0 7.50 0.0 @end example @noindent The numbers now make much more sense for the student! Before continuing, Sufi reminded the student that even though metadata may not be strictly/technically necessary (for the computer programs), metadata are critical for human readers! Therefore, a good scientist should never forget to keep metadata with any data that they create, use or archive. To start simulating the nebula, Sufi creates a directory named @file{simulationtest} in his home directory. Note that the @command{pwd} command will print the ``parent working directory'' of the current directory (its a good way to confirm/check your current location in the full file system: it always starts from the root, or `@code{/}'). @example $ mkdir ~/simulationtest $ cd ~/simulationtest $ pwd /home/rahman/simulationtest @end example @cindex Redirection @cindex Standard output It is possible to use a plain-text editor to manually put the catalog contents above into a plain-text file. But to easily automate catalog production (in later trials), Sufi decides to fill the input catalog with the redirection features of the command-line (or shell). Sufi's student was not familiar with this feature of the shell! So Sufi decided to do a fast demo; giving the following explanations while running the commands: Shell redirection allows you to ``re-direct'' the ``standard output'' of a program (which is usually printed by the program on the command-line during its execution; like the output of @command{pwd} above) into a file. For example, let's simply ``echo'' (or print to standard output) the line ``This is a test.'': @example $ echo "This is a test." This is a test. @end example @noindent As you see, our statement was simply ``echo''-ed to the standard output! To redirect this sentence into a file (instead of simply printing it on the standard output), we can simply use the @code{>} character, followed by the name of the file we want it to be dumped in. @example $ echo "This is a test." > test.txt @end example This time, the @command{echo} command did not print anything in the terminal. Instead, the shell (command-line environment) took the output, and ``re-directed'' it into a file called @file{test.txt}. Let's confirm this with the @command{ls} command (@command{ls} is short for ``list'' and will list all the files in the current directory): @example $ ls test.txt @end example @noindent Now that you confirm the existence of @file{test.txt}, you can see its contents with the @command{cat} command (short for ``concatenation''; because it can also merge multiple files together): @example $ cat test.txt This is a test. @end example @noindent Now that we have written our first line in @file{test.txt}, let's try adding a second line (do not forget that our final catalog of objects to simulate will have multiple lines): @example $ echo "This is my second line." > test.txt $ cat test.txt This is my second line. @end example As you see, the first line that you put in the file is no longer present! This happens because `@code{>}' always starts dumping content to a file from the start of the file. In effect, this means that any possibly pre-existing content is over-written by the new content! To append new lines (or dumping new content at the end of existing content), you can use `@code{>>}'. for example, with the commands below, first we will write the first sentence (using `@code{>}'), then use `@code{>>}' to add the second and third sentences. Finally, we will print the contents of @file{test.txt} to confirm that all three lines are preserved. @example $ echo "My first sentence." > test.txt $ echo "My second sentence." >> test.txt $ echo "My third sentence." >> test.txt $ cat test.txt My first sentence. My second sentence. My third sentence. @end example The student thanked Sufi for this explanation and now feels more comfortable with redirection. Therefore Sufi continues with the main project. But before that, he deletes the temporary test file: @example $ rm test.txt @end example To put the catalog of profile data and their metadata (that was described above) into a file, Sufi uses the commands below. While Sufi was writing these commands, the student complained that ``I could have done in this in a text editor''. Sufi reminded the student that it is indeed possible; but it requires manual intervention. The advantage of a solution like below is that it can be automated (for example, adding more rows; for more profiles in the final image). @example $ echo "# Column 1: ID [counter, u8] Identifier" > cat.txt $ echo "# Column 2: X [pix, f32] Horizontal position" >> cat.txt $ echo "# Column 3: Y [pix, f32] Vertical position" >> cat.txt $ echo "# Column 4: PROF [name, u8] Radial profile function" \ >> cat.txt $ echo "# Column 5: R [pix, f32] Effective radius" >> cat.txt $ echo "# Column 6: N [n/a, f32] Sersic index" >> cat.txt $ echo "# Column 7: PA [deg, f32] Position angle" >> cat.txt $ echo "# Column 8: Q [n/a, f32] Axis ratio" >> cat.txt $ echo "# Column 9: MAG [log, f32] Magnitude" >> cat.txt $ echo "# Column 10: TRUNC [n/a, f32] Truncation (multiple of R)" \ >> cat.txt $ echo "0 0.000 0.000 2 5 4.7 0.0 1.0 30.0 5.0" >> cat.txt $ echo "1 250.0 250.0 1 40 1.0 -25 0.4 3.44 5.0" >> cat.txt $ echo "2 50.00 50.00 4 0 0.0 0.0 0.0 6.00 0.0" >> cat.txt $ echo "3 450.0 50.00 4 0 0.0 0.0 0.0 6.50 0.0" >> cat.txt $ echo "4 50.00 450.0 4 0 0.0 0.0 0.0 7.00 0.0" >> cat.txt $ echo "5 450.0 450.0 4 0 0.0 0.0 0.0 7.50 0.0" >> cat.txt @end example @noindent To make sure if the catalog's content is correct (and there was no typo for example!), Sufi runs `@command{cat cat.txt}', and confirms that it is correct. @cindex Zero point Now that the catalog is created, Sufi is ready to call MakeProfiles to build the image containing these objects. He looks into his records and finds that the zero point magnitude for that night, and that particular detector, was 18 magnitudes. The student was a little confused on the concept of zero point, so Sufi pointed him to @ref{Brightness flux magnitude}, which the student can study in detail later. Sufi therefore runs MakeProfiles with the command below: @example $ astmkprof --prepforconv --mergedsize=499,499 --zeropoint=18.0 cat.txt MakeProfiles @value{VERSION} started on Sat Oct 6 16:26:56 953 - 6 profiles read from cat.txt - Random number generator (RNG) type: ranlxs1 - Basic RNG seed: 1652884540 - Using 12 threads. ---- row 3 complete, 5 left to go ---- row 4 complete, 4 left to go ---- row 6 complete, 3 left to go ---- row 5 complete, 2 left to go ---- ./0_cat_profiles.fits created. ---- row 1 complete, 1 left to go ---- row 2 complete, 0 left to go - ./cat_profiles.fits created. 0.092573 seconds -- Output: ./cat_profiles.fits MakeProfiles finished in 0.293644 seconds @end example Sufi encourages the student to read through the printed output. As the statements say, two FITS files should have been created in the running directory. So Sufi ran the command below to confirm: @example $ ls 0_cat_profiles.fits cat_profiles.fits cat.txt @end example @cindex Oversample @noindent The file @file{0_cat_profiles.fits} is the PSF Sufi had asked for, and @file{cat_profiles.fits} is the image containing the main objects in the catalog. Sufi opened the main image with the command below (using SAO DS9): @example $ astscript-fits-view cat_profiles.fits --ds9scale=95 @end example The student could clearly see the main elliptical structure in the center. However, the size of @file{cat_profiles.fits} was surprising for the student, instead of 499 by 499 (as we had requested), it was 2615 by 2615 pixels (from the command below): @example $ astfits cat_profiles.fits Fits (GNU Astronomy Utilities) @value{VERSION} Run on Sat Oct 6 16:26:58 953 ----- HDU (extension) information: 'cat_profiles.fits'. Column 1: Index (counting from 0, usable with '--hdu'). Column 2: Name ('EXTNAME' in FITS standard, usable with '--hdu'). Column 3: Image data type or 'table' format (ASCII or binary). Column 4: Size of data in HDU. ----- 0 MKPROF-CONFIG no-data 0 1 Mock profiles float32 2615x2615 @end example @noindent So Sufi explained why oversampling is important in modeling, especially for parts of the image where the flux change is significant over a pixel. Recall that when you oversample the model (for example, by 5 times), for every desired pixel, you get 25 pixels (@mymath{5\times5}). Sufi then explained that after convolving (next step below) we will down-sample the image to get our originally desired size/resolution. After seeing the image, the student complained that only the large elliptical model for the Andromeda nebula can be seen in the center. He could not see the four stars that we had also requested in the catalog. So Sufi had to explain that the stars are there in the image, but the reason that they are not visible when looking at the whole image at once, is that they only cover a single pixel! To prove it, he centered the image around the coordinates 2308 and 2308, where one of the stars is located in the over-sampled image [you can do this in @command{ds9} by selecting ``Pan'' in the ``Edit'' menu, then clicking around that position]. Sufi then zoomed in to that region and soon, the star's non-zero pixel could be clearly seen. Sufi explained that the stars will take the shape of the PSF (cover an area of more than one pixel) after convolution. If we did not have an atmosphere and we did not need an aperture, then stars would only cover a single pixel with normal CCD resolutions. So Sufi convolved the image with this command: @example $ astconvolve --kernel=0_cat_profiles.fits cat_profiles.fits \ --output=cat_convolved.fits Convolve started on Sat Oct 6 16:35:32 953 - Using 8 CPU threads. - Input: cat_profiles.fits (hdu: 1) - Kernel: 0_cat_profiles.fits (hdu: 1) - Input and Kernel images padded. 0.075541 seconds - Images converted to frequency domain. 6.728407 seconds - Multiplied in the frequency domain. 0.040659 seconds - Converted back to the spatial domain. 3.465344 seconds - Padded parts removed. 0.016767 seconds - Output: cat_convolved.fits Convolve finished in: 10.422161 seconds @end example @noindent When convolution finished, Sufi opened @file{cat_convolved.fits} and the four stars could be easily seen now: @example $ astscript-fits-view cat_convolved.fits --ds9scale=95 @end example It was interesting for the student that all the flux in that single pixel is now distributed over so many pixels (the sum of all the pixels in each convolved star is actually equal to the value of the single pixel before convolution). Sufi explained how a PSF with a larger FWHM would make the points even wider than this (distributing their flux in a larger area). With the convolved image ready, they were prepared to resample it to the original pixel scale Sufi had planned [from the @command{$ astmkprof -P} command above, recall that MakeProfiles had over-sampled the image by 5 times]. Sufi explained the basic concepts of warping the image to his student and ran Warp with the following command: @example $ astwarp --scale=1/5 --centeroncorner cat_convolved.fits Warp started on Sat Oct 6 16:51:59 953 Using 8 CPU threads. Input: cat_convolved.fits (hdu: 1) matrix: 0.2000 0.0000 0.4000 0.0000 0.2000 0.4000 0.0000 0.0000 1.0000 $ astfits cat_convolved_scaled.fits --quiet 0 WARP-CONFIG no-data 0 1 Warped float32 523x523 @end example @noindent @file{cat_convolved_scaled.fits} now has the correct pixel scale. However, the image is still larger than what we had wanted, it is @mymath{523\times523} pixels (not our desired @mymath{499\times499}). The student is slightly confused, so Sufi also resamples the PSF with the same scale by running @example $ astwarp --scale=1/5 --centeroncorner 0_cat_profiles.fits $ astfits 0_cat_profiles_scaled.fits --quiet 0 WARP-CONFIG no-data 0 1 Warped float32 25x25 @end example @noindent Sufi notes that @mymath{25=12+12+1} and that @mymath{523=499+12+12}. He goes on to explain that frequency space convolution will dim the edges and that is why he added the @option{--prepforconv} option to MakeProfiles above. Now that convolution is done, Sufi can remove those extra pixels using Crop with the command below. Crop's @option{--section} option accepts coordinates inclusively and counting from 1 (according to the FITS standard), so the crop region's first pixel has to be 13, not 12. @example $ astcrop cat_convolved_scaled.fits --section=13:*-12,13:*-12 \ --mode=img --zeroisnotblank Crop started on Sat Oct 6 17:03:24 953 - Read metadata of 1 image. 0.001304 seconds ---- ...nvolved_scaled_cropped.fits created: 1 input. Crop finished in: 0.027204 seconds @end example @noindent To fully convince the student, Sufi checks the size of the output of the crop command above: @example $ astfits cat_convolved_scaled_cropped.fits --quiet 0 n/a no-data 0 1 n/a float32 499x499 @end example @noindent Finally, @file{cat_convolved_scaled_cropped.fits} is @mymath{499\times499} pixels and the mock Andromeda galaxy is centered on the central pixel. This is the same dimensions as Sufi had desired in the beginning. All this trouble was certainly worth it because now there is no dimming on the edges of the image and the profile centers are more accurately sampled. The final step to simulate a real observation would be to add noise to the image. Sufi set the zero point magnitude to the same value that he set when making the mock profiles and looking again at his observation log, he had measured the background flux near the nebula had a @emph{per-pixel} magnitude of 7 that night. For more on how the background value determines the noise, see @ref{Noise basics}. So using these values he ran Arithmetic's @code{mknoise-sigma-from-mean} operator, and with the second command, he visually inspected the image. The @code{mknoise-sigma-from-mean} operator takes the noise standard deviation in linear units, not magnitudes (which are logarithmic). Therefore within the same Arithmetic command, he has converted the sky background magnitude to counts using Arithmetic's @code{counts-to-mag} operator. @example $ astarithmetic cat_convolved_scaled_cropped.fits \ 7 18 mag-to-counts mknoise-sigma-from-mean \ --output=out.fits $ astscript-fits-view out.fits @end example @noindent The @file{out.fits} file now contains the noised image of the mock catalog Sufi had asked for. The student had not observed the nebula in the sky, so when he saw the mock image in SAO DS9 (with the second command above), he understood why Sufi was dubious: it was very diffuse! Seeing how the @option{--output} option allows the user to specify the name of the output file, the student was confused and wanted to know why Sufi had not used it more regularly before? Sufi explained that for intermediate steps, you can rely on the automatic output of the programs (see @ref{Automatic output}). Doing so will give all the intermediate files a similar basic name structure, so in the end you can simply remove them all with the Shell's capabilities, and it will be familiar for other users. So Sufi decided to show this to the student by making a shell script from the commands he had used before. The command-line shell has the capability to read all the separate input commands from a file. This is useful when you want to do the same thing multiple times, with only the names of the files or minor parameters changing between the different instances. Using the shell's history (by pressing the up keyboard key) Sufi reviewed all the commands and then he retrieved the last 5 commands with the @command{$ history 5} command. He selected all those lines he had input and put them in a text file named @file{mymock.sh}. Then he defined the @code{edge} and @code{base} shell variables for easier customization later, and before every command, he added some comments (lines starting with @key{#}) for future readability. Finally, Sufi pointed the student to Gnuastro's @ref{General program usage tutorial}, which has a full section on @ref{Writing scripts to automate the steps}. @example #!/bin/bash edge=12 base=cat # Stop running next commands if one fails. set -e # Remove any (possibly) existing output (from previous runs) # before starting. rm -f out.fits # Run MakeProfiles to create an oversampled FITS image. astmkprof --prepforconv --mergedsize=499,499 --zeropoint=18.0 \ "$base".txt # Convolve the created image with the kernel. astconvolve "$base"_profiles.fits \ --kernel=0_"$base"_profiles.fits \ --output="$base"_convolved.fits # Scale the image back to the intended resolution. astwarp --scale=1/5 --centeroncorner "$base"_convolved.fits # Crop the edges out (dimmed during convolution). '--section' # accepts inclusive coordinates, so the start of the section # must be one pixel larger than its end. st_edge=$(( edge + 1 )) astcrop "$base"_convolved_scaled.fits --zeroisnotblank \ --mode=img --section=$st_edge:*-$edge,$st_edge:*-$edge # Add noise to the image. $ astarithmetic "$base"_convolved_scaled_cropped.fits \ 7 18 mag-to-counts mknoise-sigma-from-mean \ --output=out.fits # Remove all the temporary files. rm 0*.fits "$base"*.fits @end example @cindex Comments He used this chance to remind the student of the importance of comments in code or shell scripts! Just like metadata in a dataset, when writing the code, you have a good mental picture of what you are doing, so writing comments might seem superfluous and excessive. However, in one month when you want to re-use the script, you have lost that mental picture and remembering it can be time-consuming and frustrating. The importance of comments is further amplified when you want to share the script with a friend/colleague. So it is good to accompany any step of a script, or code, with useful comments while you are writing it (create a good mental picture of why you are doing something: do not just describe the command, but its purpose). @cindex Gedit @cindex GNU Emacs Sufi then explained to the eager student that you define a variable by giving it a name, followed by an @code{=} sign and the value you want. Then you can reference that variable from anywhere in the script by calling its name with a @code{$} prefix. So in the script whenever you see @code{$base}, the value we defined for it above is used. If you use advanced editors like GNU Emacs or even simpler ones like Gedit (part of the GNOME graphical user interface) the variables will become a different color which can really help in understanding the script. We have put all the @code{$base} variables in double quotation marks (@code{"}) so the variable name and the following text do not get mixed, the shell is going to ignore the @code{"} after replacing the variable value. To make the script executable, Sufi ran the following command: @example $ chmod +x mymock.sh @end example @noindent Then finally, Sufi ran the script, simply by calling its file name: @example $ ./mymock.sh @end example After the script finished, the only file remaining is the @file{out.fits} file that Sufi had wanted in the beginning. Sufi then explained to the student how he could run this script anywhere that he has a catalog if the script is in the same directory. The only thing the student had to modify in the script was the name of the catalog (the value of the @code{base} variable in the start of the script) and the value to the @code{edge} variable if he changed the PSF size. The student was also happy to hear that he will not need to make it executable again when he makes changes later, it will remain executable unless he explicitly changes the executable flag with @command{chmod}. The student was really excited, since now, through simple shell scripting, he could really speed up his work and run any command in any fashion he likes allowing him to be much more creative in his works. Until now he was using the graphical user interface which does not have such a facility and doing repetitive things on it was really frustrating and some times he would make mistakes. So he left to go and try scripting on his own computer. He later reminded Sufi that the second tutorial in the Gnuastro book as more complex commands in data analysis, and a more advanced introduction to scripting (see @ref{General program usage tutorial}). Sufi could now get back to his own work and see if the simulated nebula which resembled the one in the Andromeda constellation could be detected or not. Although it was extremely faint@footnote{The brightness of a diffuse object is added over all its pixels to give its final magnitude, see @ref{Brightness flux magnitude}. So although the magnitude 3.44 (of the mock nebula) is orders of magnitude brighter than 6 (of the stars), the central galaxy is much fainter. Put another way, the brightness is distributed over a large area in the case of a nebula.}. Therefore, Sufi ran Gnuastro's detection software (@ref{NoiseChisel}) to see if this object is detectable or not. NoiseChisel's output (@file{out_detected.fits}) is a multi-extension FITS file, so he used Gnuastro's @command{astscript-fits-view} program in the second command to see the output: @example $ astnoisechisel out.fits $ astscript-fits-view out_detected.fits @end example In the ``Cube'' window (that was opened with DS9), if Sufi clicked on the ``Next'' button to see the pixels that were detected to contain significant signal. Fortunately the nebula's shape was detectable and he could finally confirm that the nebula he kept in his notebook was actually observable. He wrote this result in the draft manuscript that would later become ``Book of fixed stars''@footnote{@url{https://en.wikipedia.org/wiki/Book_of_Fixed_Stars}}. He still had to check the other nebula he saw from Yemen and several other such objects, but they could wait until tomorrow (thanks to the shell script, he only has to define a new catalog). It was nearly sunset and they had to begin preparing for the night's measurements on the ecliptic. @node Detecting lines and extracting spectra in 3D data, Color images with full dynamic range, Sufi simulates a detection, Tutorials @section Detecting lines and extracting spectra in 3D data @cindex IFU @cindex MUSE @cindex ACIS @cindex Pixel @cindex Voxel @cindex Spectrum @cindex 3D data cube @cindex Cube (3D) spectra @cindex Integral field unit @cindex Hyperspectral imaging 3D data cubes are an increasingly common format of data products in observational astronomy. As opposed to 2D images (where each 2D ``picture element'' or ``pixel'' covers an infinitesimal area on the surface of the sky), 3D data cubes contain ``volume elements'' or ``voxels'' that are also connected in a third dimension. The most common case of 3D data in observational astrophysics is when the first two dimensions are spatial (RA and Dec on the sky), and the third dimension is wavelength. This type of data is generically (also outside of astronomy) known as Hyperspectral imaging@footnote{@url{https://en.wikipedia.org/wiki/Hyperspectral_imaging}}. For example high-level data products of Integral Field Units (IFUs) like MUSE@footnote{@url{https://en.wikipedia.org/wiki/Multi-unit_spectroscopic_explorer}} in the optical, ACIS@footnote{@url{https://en.wikipedia.org/wiki/Advanced_CCD_Imaging_Spectrometer}} in the X-ray, or in the radio where most data are 3D cubes. @cindex Abell 370 galaxy cluster In this tutorial, we'll use a small crop of a reduced deep MUSE cube centered on the @url{https://en.wikipedia.org/wiki/Abell_370, Abell 370} galaxy cluster from the Pilot-WINGS survey; see Lagattuta et al. @url{https://arxiv.org/abs/2202.04663,2022}. Abell 370 has a spiral galaxy in its background that is stretched due to the cluster's gravitational potential to create a beautiful arch. If you haven't seen it yet, have a look at some of its images in the Wikipedia link above before continuing. The Pilot-WINGS survey data are available in its webpage@footnote{@url{https://astro.dur.ac.uk/~hbpn39/pilot-wings.html}}. The cube of the @emph{core} region is 10.2GBs. This can be prohibitively large to download (and later process) on many networks and smaller computers. Therefore, in this demonstration we won't be using the full cube. We have prepared a small crop@footnote{You can download the full cube and create the crop your self with the commands below. Due to the decompression of the +10GB file that is necessary for the compressed downloaded file (note that its suffix is @file{.fits.gz}), the Crop command will take a little long. @example $ wget https://astro.dur.ac.uk/~hbpn39/pilotWINGS/A370_PilotWINGS_CORE.fits.gz $ astcrop A370_PilotWINGS_CORE.fits.gz -hDATA --mode=img \ --section=200:300,100:200 -oa370-crop.fits --metaname=DATA $ astcrop A370_PilotWINGS_CORE.fits.gz -hSTAT --mode=img --append \ --section=200:300,100:200 -oa370-crop.fits --metaname=STAT @end example } of the full cube that you can download with the first command below. The randomly selected crop is centered on (RA,Dec) of (39.96769,-1.58930), with a width of about 27 arcseconds. @example $ mkdir tutorial-3d $ cd tutorial-3d $ wget http://akhlaghi.org/data/a370-crop.fits # Downloads 287 MB @end example In the sections below, we will first review how you can visually inspect a 3D datacube in DS9 and interactively see the spectra of any region. We will then subtract the continuum emission, detect the emission-lines within this cube and extract their spectra. We will finish with creating pseudo narrow-band images optimized for some of the emission lines. @menu * Viewing spectra and redshifted lines:: Interactively see the spectra of an object * Sky lines in optical IFUs:: How to see sky lines in a cube. * Continuum subtraction:: Removing the continuum from a data cube. * 3D detection with NoiseChisel:: Finding emission-lines and their spectra. * 3D measurements and spectra:: Measuring 3d properties including spectra. * Extracting a single spectrum and plotting it:: Extracting a single vector row. * Pseudo narrow-band images:: Collapsing the third dimension into a 2D image. @end menu @node Viewing spectra and redshifted lines, Sky lines in optical IFUs, Detecting lines and extracting spectra in 3D data, Detecting lines and extracting spectra in 3D data @subsection Viewing spectra and redshifted lines In @ref{Detecting lines and extracting spectra in 3D data} we downloaded a small crop from the Pilot-WINGS survey of Abell 370 cluster; observed with MUSE. In this section, we will review how you can visualize/inspect a datacube using that example. With the first command below, we'll open DS9 such that each 2D slice of the cube (at a fixed wavelength) is seen as a single image. If you move the slider in the ``Cube'' window (that also opens), you can view the same field at different wavelengths. We are ending the first command with a `@code{&}' so you can continue viewing DS9 while using the command-line (press one extra @code{ENTER} to see the prompt). With the second command, you can see that the spacing between each slice is @mymath{1.25\times10^{-10}} meters (or 1.25 Angstroms). @example $ astscript-fits-view a370-crop.fits -h1 --ds9scale="limits -5 20" & $ astfits a370-crop.fits --pixelscale Basic info. for --pixelscale (remove info with '--quiet' or '-q') Input: a370-crop.fits (hdu 1) has 3 dimensions. Pixel scale in each FITS dimension: 1: 5.55556e-05 (deg/pixel) = 0.2 (arcsec/pixel) 2: 5.55556e-05 (deg/pixel) = 0.2 (arcsec/pixel) 3: 1.25e-10 (m/slice) Pixel area (on each 2D slice) : 3.08642e-09 (deg^2) = 0.04 (arcsec^2) Voxel volume: 3.85802e-19 (deg^2*m) = 5e-12 (arcsec^2*m) = 0.05 (arcsec^2*A) @end example In the DS9 ``Cube'' window, you will see two numbers on the two sides of the scroller. The left number is the wavelength in meters (WCS coordinate in 3rd dimension) and the right number is the slice number (slice number or array coordinates in 3rd dimension). You can manually edit any of these numbers and press ENTER to go to that slice in any coordinate system. If you want to go one-by-one, simply press the ``Next'' button. The first few slides are very noisy, but in the rest the noise level decreases and the galaxies are more obvious. As you slide between the different wavelengths, you see that the noise-level is not constant and in some slices, the sky noise is very strong (for example, go to slice 3201 and press the ``Next'' button). We will discuss these issues below (in @ref{Sky lines in optical IFUs}). To view the spectra of a region in DS9 take the following steps: @enumerate @item Click somewhere on the image (to make sure DS9 receives your keyboard inputs), then press @code{Ctrl+R} to activate regions and click on the brightest galaxy of this cube (center-right, at RA, Dec of 39.9659175 and -1.5893075). @item A thin green circle will show up; this is called a ``region'' in DS9. @item Double-click on the region, and you will see a ``Circle'' window. @item Within the ``Circle'' window, click on the ``Analysis'' menu and select ``Plot 3D''. @item A second ``Circle'' window will open that shows the spectra within your selected region. This is just the sum of values on each slice within the region. @item Don't close the second ``circle'' window (that shows the spectrum). Click and hold the region in DS9, and move it to other objects within the cube. You will see that the spectrum changes as you move the region, and you can see that different objects have very different spectra. You can even see the spectra of only one part of a galaxy, not the whole galaxy. @item Take the region back to the first (brightest) galaxy that we originally started with. @item Slide over different wavelengths in the ``Cube'' window, you will see the light-blue line moving through the spectrum as you slide to different wavelengths. This line shows the wavelength of the displayed image in the main window over the spectra. @cindex H-alpha @item The strongest emission line in this galaxy appears to be around 8500 Angstroms or @mymath{8.5\times10^{-7}} meters. From the position of the @url{https://en.wikipedia.org/wiki/Balmer_jump, Balmer break} (blue-ward of 5000 Angstroms for this galaxy), the strong seems to be H-alpha. @item To confirm that this is H-alpha, you can select the ``Edit'' menu in the spectrum window and select ``Zoom''. @item Double-click and hold (for next step also) somewhere before the strongest line and slightly above the continuum (for example at @code{8E-07} in the horizontal and @mymath{60\times10^{-20}}erg/Angstrom/cm@mymath{^2}/s on the vertical). As you move your cursor (while holding), you will see a rectangular box getting created. @item Move the bottom-left corner of the box to somewhere after the strongest line and below the continuum. For example at @code{9E-07} and @mymath{20\times10^{-20}}erg/Angstrom/cm@mymath{^2}/s. @item Once you remove your finger from the mouse/touchpad, it will zoom-in to that part of the spectrum. @item To zoom out to the full spectrum, just press the right mouse button over the spectra (or tap with two fingers on a touchpad). @item Select that zoom-box again to see the brightest line much more clearly. You can also see the two lines of the Nitrogen II doublet that sandwich H-alpha. Beside its relative position to the Balmer break, this is further evidence that the strongest line is H-alpha. @item @cindex NII doublet Let's have a look at the galaxy in its best glory: right over the H-alpha line: Move the wavelength slider accurately (by pressing the ``Previous'' or ``Next'' buttons) such that the blue line falls in the middle of the H-alpha line. We see that the wavelength at this slice is @code{8.56593e-07} meters or 8565.93 Angstroms. Please compare the image of the galaxy at this wavelength with the wavelengths before (by pressing ``Next'' or ``Previous''). You will also see that it is much more extended and brighter than other wavelengths! H-alpha shows the un-obscured star formation of the galaxy! @end enumerate @cartouche @noindent @strong{Automaticly going to next slice:} When you want to get a general feeling of the cube, pressing the ``Next'' button many times is annoying and slow. To automatically shift between the slices, you can press the ``Play'' button in the DS9 ``Cube'' window. You can adjust the time it stays on each slice by clicking on the ``Interval'' menu and selecting lower values. @end cartouche Knowing that this is H-alpha at 8565.93 Angstroms, you can get the redshift of the galaxy with the first command below and the location of all other expected lines in Gnuastro's spectral line database with the second command. Because there are many lines in the second command (more than 200!), with the third command, we'll only limit it to the Balmer series (that start with @code{H-}) using @command{grep}. The output of the second command prints the metadata on the top (that is not shown any more in the third command due to the @code{grep} call). To be complete, the first column is the observed wavelength of the given line in the given redshift and the second column is the name of the line. @example # Redshift where H-alpha falls on 8565.93. $ astcosmiccal --obsline=H-alpha,8565.93 --usedredshift 0.305221 # Wavelength of all lines in Gnuastro's database at this redshift $ astcosmiccal --obsline=H-alpha,8565.93 --listlinesatz # Only the Balmer series (Lines starting with 'H-'; given to Grep). $ astcosmiccal --obsline=H-alpha,8565.93 --listlinesatz | grep H- 4812.13 H-19 4818.29 H-18 4825.61 H-17 4834.36 H-16 4844.95 H-15 4857.96 H-14 4874.18 H-13 4894.79 H-12 4921.52 H-11 4957.1 H-10 5006.03 H-9 5076.09 H-8 5181.83 H-epsilon 5353.68 H-delta 5665.27 H-gamma 6345.11 H-beta 8565.93 H-alpha 4758.84 H-limit @end example @cindex H-beta Zoom-out to the full spectrum and move the displayed slice to the location of the first emission line that is blue-ward (at shorter wavelengths) of H-alpha (at around 6300 Angstroms) and follow the previous steps to confirm that you are on its center. You will see that it falls exactly on @mymath{6.34468\times10^{-7}} m or 6344.68 Angstroms. Now, have a look at the Balmer lines above. You have found the H-beta line! The rest of the @url{https://en.wikipedia.org/wiki/Balmer_series, Balmer series} that you see in the list above (like H-gamma, H-delta and H-epsilon) are visible only as absorption lines. Please check their location by moving the blue line on the wavelengths above and confirm the spectral absorption lines with the ones above. The Balmer break is caused by the fact that these stronger Balmer absorption lines become too close to each other. Looking back at the full spectrum, you can also confirm that the only other relatively strong emission line in this galaxy, that is on the blue side of the spectrum is the weakest OII line that is approximately located at 4864 Angstroms in the observed spectra of this galaxy. The numbers after the various OII emission lines show their rest-frame wavelengths (``OII'' can correspond to many electron transitions, so we should be clear about which one we are talking about). @example $ astcosmiccal --obsline=H-alpha,8565.93 --listlinesatz | grep O-II- 4863.3 O-II-3726 4866.93 O-II-3728 5634.82 O-II-4317 5762.42 O-II-4414 9554.21 O-II-7319 9568.22 O-II-7330 @end example Please stop here and spend some time on doing the exercise above on other galaxies in the this cube to get a feeling of types of galaxy spectral features (and later on the full/large cube). You will notice that only star-forming galaxies have such strong emission lines! If you enjoy it, go get the full non-cropped cube and investigate the spectra, redshifts and emission/absorption lines of many more galaxies. But going into those higher-level details of the physical meaning of the spectra (as intriguing as they are!) is beyond the scope of this tutorial. So we have to stop at this stage unfortunately. Now that you have a relatively good feeling of this small cube, let's start doing some analysis to extract the spectra of the objects in this cube. @node Sky lines in optical IFUs, Continuum subtraction, Viewing spectra and redshifted lines, Detecting lines and extracting spectra in 3D data @subsection Sky lines in optical IFUs @cindex Sky emission-lines @cindex O-H lines (from atmosphere) As we were visually inspecting the cube in @ref{Viewing spectra and redshifted lines}, we noticed some slices with very bad noise. They will later affect our detection within the cube, so in this section let's have a fast look at them here. We'll start by looking at the two cubes within the downloaded FITS file: @example $ astscript-fits-view a370-crop.fits @end example The cube on the left is the same cube we studied before. The cube on the right (which is called @code{STAT}) shows the variance of each voxel. Go to slice 3195 and press ``Next'' to view the subsequent slices. Initially (for the first 5 or 6 slices), the noise looks reasonable. But as you pass slice 3206, you will see that the noise becomes very bad in both cubes. It stays like this until about slice 3238! As you go through the whole cube, you will notice that these slices are much more frequent in the reddest wavelengths. @cindex Sky @cindex Atmosphere emission lines These slices are affected by the emission lines from our own atmosphere! The atmosphere's emission in these wavelengths significantly raises the background level in these slices. As a result, the Poisson noise also increases significantly (see @ref{Photon counting noise}). During the data reduction, the excess background flux of each slice is removed as the Sky (or the mean of undetected pixels, see @ref{Sky value}). However, the increased Poisson noise (scatter of pixel values) remains! To see spectrum of the sky emission lines, simply put a region somewhere in the @code{STAT} cube and generate its spectrum (as we did in @ref{Viewing spectra and redshifted lines}). You will clearly see the comb-like shape of atmospheric emission lines and can use this to know where to expect them. @node Continuum subtraction, 3D detection with NoiseChisel, Sky lines in optical IFUs, Detecting lines and extracting spectra in 3D data @subsection Continuum subtraction @cindex Continuum subtraction In @ref{Viewing spectra and redshifted lines}, we visually inspected some of the most prominent emission lines of the brightest galaxy of the demo MUSE cube (see @ref{Detecting lines and extracting spectra in 3D data}). Here, we will remove the ``continuum'' flux from under the emission lines to see them more distinctly. Within a spectra, the continuum is the local ``background'' flux in the third/wavelength dimension. In other words, it is the flux that would be present at that wavelength if the emission line didn't exist. Therefore, to accurately measure the flux of the emission line, we first need to subtract the continuum. One crude way of estimating the continuum flux at every slice is to use the sigma-clipped median value of that same pixel in the @mymath{\pm{N/2}} slides around it (for more on sigma-clipping, see @ref{Sigma clipping}). In this case, @mymath{N=100} should be a good first approximate (since it is much larger than any of the absorption or emission lines). With the first command below, let's use Arithmetic's filtering operators for estimating the sigma-clipped median only along the third dimension for every pixel in every slice (see @ref{Filtering operators}). With the second command, have a look at the filtered cube and spectra. Note that the first command is computationally expensive and may take a minute or so. @example $ astarithmetic a370-crop.fits set-i --output=filtered.fits \ 3 0.2 1 1 100 i filter-sigclip-median $ astscript-fits-view filtered.fits -h1 --ds9scale="limits -5 20" @end example Looking at the filtered cube above, and sliding through the different wavelengths, you will see the noise in each slice has been significantly reduced! This is expected because each pixel's value is now calculated from 100 others (along the third dimension)! Using the same steps as @ref{Viewing spectra and redshifted lines}, plot the spectra of the brightest galaxy. Then, have a look at its spectra. You see that the emission lines have been significantly smoothed out to become almost@footnote{For more on why Sigma-clipping is only a crude solution to background removal, see Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}.} invisible. You can now subtract this ``continuum'' cube from the input cube to create the emission-line cube. In fact, as you see below, we can do it in a single Arithmetic command (blending the filtering and subtraction in one command). Note how the only difference with the previous Arithmetic command is that we added an @code{i} before the @code{3} and a @code{-} after @code{filter-sigclip-median}. For more on Arithmetic's powerful notation, see @ref{Reverse polish notation}. With the second command below, let's view the input @emph{and} continuum-subtracted cubes together: @example $ astarithmetic a370-crop.fits set-i --output=no-continuum.fits \ i 3 0.2 1 1 100 i filter-sigclip-median - $ astscript-fits-view a370-crop.fits no-continuum.fits -h1 \ --ds9scale="limits -5 20" @end example Once the cubes are open, slide through the different wavelengths. Comparing the left (input) and right (continuum-subtracted) slices, you will rarely see any galaxy in the continuum-subtracted one! As its name suggests, the continuum flux is continuously present in all the wavelengths (with gradual change)! But the continuum has been subtracted now; so in the right-side image, you don't see anything on wavelengths that don't contain a spectral emission line. Some dark regions also appear; these are absorption lines! Please spend a few minutes sliding through the wavelengths and seeing how the emission lines pop-up and disappear again. It is almost like scuba diving, with fish appearing out of nowhere and passing by you. @cindex Doppler effect @cindex Galaxy kinematics @cindex Kinematics (galaxies) Let's go to slice 3046 (corresponding to 8555.93 Angstroms; just before the H-alpha line for the brightest galaxy in @ref{Viewing spectra and redshifted lines}). Now press the ``Next'' button to change slices one by one until there is no more emission in the brightest galaxy. As you go to redder slices, you will see that not only does the brightness increase, but the position of the emission also changes. This is the @url{https://en.wikipedia.org/wiki/Doppler_effect, Doppler effect} caused by the rotation of the galaxy: the side that rotating towards us gets blue-shifted to bluer slices and the one that is going away from us gets redshifted to redder slices. If you go to the emission lines of the other galaxies, you will see that they move with a different angle! We can use this to derive the galaxy's rotational properties and kinematics (Gnuastro doesn't have this feature yet). To see the Doppler shift in the spectrum, plot the spectrum over the top-side of the galaxy (which is visible in slice 3047). Then Zoom-in to the H-alpha line (as we did in @ref{Viewing spectra and redshifted lines}) and press ``Next'' until you reach the end of the H-alpha emission-line. You see that by the time H-alpha disappears in the spectrum, within the cube, the emission shifts in the vertical axis by about 15 pixels! Then, move the region across the same path that the emission passed. You will clearly see that the H-alpha and Nitrogen II lines also move with you, in the zoomed-in spectra. Again, try this for several other emission lines, and several other galaxies to get a good feeling of this important concept when using hyper-spectral 3D data. @node 3D detection with NoiseChisel, 3D measurements and spectra, Continuum subtraction, Detecting lines and extracting spectra in 3D data @subsection 3D detection with NoiseChisel In @ref{Continuum subtraction} we subtracted the continuum emission, leaving us with only noise and the absorption and emission lines. The absorption lines are negative and will be missed by detection methods that look for a positive skewness@footnote{But if you want to detect the absorption lines, just multiply the cube by @mymath{-1} and repeat the same steps here (the noise is symmetric around 0).} (like @ref{NoiseChisel}). So we will focus on the detection and extraction of emission lines here. The first step is to extract the voxels that contain emission signal. To do that, we will be using @ref{NoiseChisel}. NoiseChisel and @ref{Segment} operate on 2D images or 3D cubes. But by default, they are configured for 2D images (some parameters like tile size take a different number of values based on the dimensionality). Therefore, to do 3D detection, the first necessary step is to run NoiseChisel with the default 3D configuration file. To see where Gnuastro's programs are installed, you can run the following command (the printed output is the default location when you install Gnuastro from source, but if you used another installation method or manually set a different location, you will see a different output, just use that): @example $ which astnoisechisel /usr/local/bin/astnoisechisel @end example As you see, the compiled binary programs (like NoiseChisel) are installed in the @file{bin/} sub-directory of the install path (@file{/usr/local} in the example above, may be different on your system). The configuration files are in the @file{etc/} sub-directory of the install path (here only showing NoiseChisel's configuration files): @example $ ls /usr/local/etc/astnoisechisel*.conf /usr/local/etc/astnoisechisel-3d.conf /usr/local/etc/astnoisechisel.conf @end example @noindent We should therefore call NoiseChisel with the 3D configuration file like below (please change @file{/usr/local} to any directory that you find from the @code{which} command above): @example $ astnoisechisel --config=/usr/local/etc/astnoisechisel-3d.conf \ no-continuum.fits --output=det.fits @end example But having to add this long @option{--config} option is annoying and makes the command hard to read! To simplify the calling of NoiseChisel in 3D, let's first make a shell alias called @command{astnoisechisel-3d} using the @command{alias} command. Afterwards, we can just use the alias. Afterwards (in the second command below), we are calling the alias, producing the same output as above. Finally (with the last command), let's have a look at NoiseChisel's output: @example $ alias astnoisechisel-3d="astnoisechisel \ --config=/usr/local/etc/astnoisechisel-3d.conf" $ astnoisechisel-3d no-continuum.fits --output=det.fits $ astscript-fits-view det.fits @end example Similar to its 2D outputs, NoiseChisel's output contains four extensions/HDUs (see @ref{NoiseChisel output}). For a multi-extension file with 3D data, @code{astscript-fits-view} shows each cube as a separate DS9 ``Frame''. In this way, as you slide through the wavelengths, you see the same slice in all the cubes. The third and fourth extensions are the Sky and Sky standard deviation, which are not relevant here, so you can close them. To do that, press on the ``Frame'' button (in the top row of buttons), then press ``delete'' two times in the second row of buttons. As a final preparation, manually set the scale of @code{INPUT-NO-SKY} cube to a fixed range so the changing flux/noise in each slice doesn't interfere with visually comparing the data in the slices as you move around: @enumerate @item Click on the @code{INPUT-NO-SKY} cube, so it is selected. @item Click on the ``Scale'' menu, then the ``Scale Parameters''. @item For the ``Low'' value set -2 and for the ``High'' value set 5. @item In the ``Cube'' window, slide between the slices to confirm that the noise level is visually fixed. @item Go back to the first slice for the next steps. Note that the first and last couple of slices have much higher noise, don't worry about those. @end enumerate As you press the ``Next'' button in the first few slides, you will notice that the @code{DETECTION} cube is fully black: showing that nothing has been detected. The first detection pops up in the 55th slice for the galaxy on the top of this cube. As you press ``Next'' you will see that the detection fades away and other detections pop up. Spend a few minutes shifting between the different slices and comparing the detected voxels with the emission lines in the continuum-subtracted cube (the @code{INPUT-NO-SKY} extension). Go ahead to slice 2815 and press ``Next'' a few times. You will notice that the detections suddenly start covering the whole slice and until slice 2859 where the detection map becomes normal (no extra detections!). This is the effect of the sky lines we mentioned before in @ref{Sky lines in optical IFUs}. The increased noise makes the reduction very hard and as a result, a lot of artifacts appear. To reduce the effect of sky lines, we can divide the cube by its standard deviation (the square root of the variance or @code{STAT} extension; see @ref{Sky lines in optical IFUs}) and run NoiseChisel afterwards. @example $ astarithmetic no-continuum.fits -h1 a370-crop.fits -hSTAT sqrt / \ --output=sn.fits $ astnoisechisel-3d sn.fits --output=det.fits $ astscript-fits-view det.fits @end example After the new detection map opens have another look at the specific slices mentioned above (from slice 2851 to 2859). You will see that there are no more detection maps that cover the whole field of view. Scroll the slide counter across the whole cube, you will rarely see such effects by Sky lines any more. But this is just a crude solution and doesn't remove all sky line artifacts. For example go to slide 650 and press ``Next''. You will see that the artifacts caused by this sky line are so strong that the solution above wasn't successful. For these very strong emission lines, we need to improve the reduction. But generally, since the number of sky-line affected slices has significantly decreased, we can go ahead. @node 3D measurements and spectra, Extracting a single spectrum and plotting it, 3D detection with NoiseChisel, Detecting lines and extracting spectra in 3D data @subsection 3D measurements and spectra In the context of optical IFUs or radio IFUs in astronomy, a ``Spectrum'' is defined as separate measurements on each 2D slice of the 3D cube. Each 2D slice is defined by the first two FITS dimensions: the first FITS dimension is the horizontal axis and the second is the vertical axis. As with the tutorial on 2D image analysis (in @ref{Segmentation and making a catalog}), let's run Segment to see how it works in 3D. Like NoiseChisel above, to simplify the commands, let's make an alias (@ref{3D detection with NoiseChisel}): @example $ alias astsegment-3d="astsegment \ --config=/usr/local/etc/astsegment-3d.conf" $ astsegment-3d det.fits --output=seg.fits $ astscript-fits-view seg.fits @end example You see that we now have 3D clumps and 3D objects. So we can go ahead to do measurements. MakeCatalog can do single-valued measurements (as in 2D) on 3D datasets also. For example, with the command below, let's get the flux-weighted center (in the three dimensions) and sum of pixel values. There isn't usually a standard name for the third WCS dimension (unlike Ra/Dec). So in Gnuastro, we just call it @option{--w3}. With the second command, we are having a look at the first 5 rows. Note that we are not using @option{-Y} with @command{asttable} anymore because it the wavelength column would only be shown as zero (since it is in meters!). @example $ astmkcatalog seg.fits --ids --ra --dec --w3 --sum --output=cat.fits $ asttable cat.fits -h1 -O --txtf64p=5 --head=5 # Column 1: OBJ_ID [counter ,i32,] Object identifier. # Column 2: RA [deg ,f64,] Flux weighted center (WCS axis 1). # Column 3: DEC [deg ,f64,] Flux weighted center (WCS axis 2). # Column 4: AWAV [m ,f64,] Flux weighted center (WCS axis 3). # Column 5: SUM [input-units,f32,] Sum of sky subtracted values. 1 3.99677e+01 -1.58660e+00 4.82994e-07 7.311189e+02 2 3.99660e+01 -1.58927e+00 4.86411e-07 7.872681e+03 3 3.99682e+01 -1.59141e+00 4.90609e-07 1.314548e+03 4 3.99677e+01 -1.58666e+00 4.90816e-07 7.798024e+02 5 3.99659e+01 -1.58930e+00 4.93657e-07 3.255210e+03 @end example Besides the single-valued measurements above (that are shared with 2D inputs), on 3D cubes, MakeCatalog can also do per-slice measurements. The options for these measurements are formatted as @option{--*in-slice}. With the command below, you can check their list: @example $ astmkcatalog --help | grep in-slice --area-in-slice [3D input] Number of labeled in each slice. --area-other-in-slice [3D input] Area of other lab. in projected area. --area-proj-in-slice [3D input] Num. voxels in '--sum-proj-in-slice'. --sum-err-in-slice [3D input] Error in '--sum-in-slice'. --sum-in-slice [3D input] Sum of values in each slice. --sum-other-err-in-slice [3D input] Area in '--sum-other-in-slice'. --sum-other-in-slice [3D input] Sum of other lab. in projected area. --sum-proj-err-in-slice [3D input] Error of '--sum-proj-in-slice'. --sum-proj-in-slice [3D input] Sum of projected area in each slice. @end example For every label and measurement, these options will give many values in a vector column (see @ref{Vector columns}). Let's have a look by asking for the sum of values and area of each label in each slice associated to each label with the command below. There is just one important point: in @ref{3D detection with NoiseChisel}, we ran NoiseChisel on the signal-to-noise image, not the continuum-subtracted image! So the values to use for the measurement of each label should come from the @file{no-continuum.fits} file (not @file{seg.fits}). @example $ astmkcatalog seg.fits --ids --ra --dec --w3 --sum \ --area-in-slice --sum-in-slice --output=cat.fits \ --valuesfile=no-continuum.fits $ asttable -i cat.fits -------- seg_cat.fits (hdu: 1) ------- ----- ---- ------- No.Name Units Type Comment ------- ----- ---- ------- 1 OBJ_ID counter int32 Object identifier. 2 RA deg float64 Flux wht center (WCS 1). 3 DEC deg float64 Flux wht center (WCS 2). 4 AWAV m float64 Flux wht center (WCS 3). 5 SUM input-units float32 Sum of sky-subed values. 6 AREA-IN-SLICE counter int32(3681) Number of pix. in each slice. 7 SUM-IN-SLICE input-units float32(3681) Sum of values in each slice. -------- Number of rows: 211 -------- @end example You can see that the new @code{AREA-IN-SLICE} and @code{SUM-IN-SLICE} columns have a @code{(3681)} in their types. This shows that unlike the single-valued columns before them, in these columns, each row has 3681 values (a ``vector'' column). If you are not already familiar with vector columns, please take a few minutes to read @ref{Vector columns}. Since a MUSE data cube has 3681 slices, this is effectively the spectrum of each object. Let's find the object that corresponds to the H-alpha emission of the brightest galaxy (that we found in @ref{Viewing spectra and redshifted lines}). That emission line was around 8565.93 Angstroms, so let's look for the objects within @mymath{\pm5} Angstroms of that value (between 8560 to 8570 Angstroms): @example $ asttable cat.fits --range=AWAV,8.560e-7,8.570e-7 -cobj_id,ra,dec -Y 198 39.965897 -1.589279 @end example From the command above, we see that at this wavelength, there was only one object. Let's extract its spectrum by asking for the @code{sum-in-slice} column: @example $ asttable cat.fits --range=AWAV,8.560e-7,8.570e-7 \ -carea-in-slice,sum-in-slice @end example If you look into the outputs, you will see that it is a single line! It contains a long list of 0 values at the start and @code{nan} values in the end. If you scroll slowly, in the middle of each you will see some non-zero and non-NaN numbers. To help interpret this more easily, let's transpose these vector columns (so each value of the vector column becomes a row in the output). We will use the @option{--transpose} option of Table for this (just note that since transposition changes the number of rows, it can only be used when your table only has vector columns and they all have the same number of elements (as in this case, for more): @example $ asttable cat.fits --range=AWAV,8.560e-7,8.570e-7 \ -carea-in-slice,sum-in-slice --transpose @end example We now see the measurements on each slice printed in a separate line (making it much more easier to visually read). However, without a counter, it is very hard to interpret them. Let's pipe the output to a new Table command and use column arithmetic's @code{counter} operator for displaying the slice number (see @ref{Size and position operators}). Note that since we are piping the output, we also added @option{-O} so the column metadata are also passed to the new instance of Table: @example $ asttable cat.fits --range=AWAV,8.560e-7,8.570e-7 -O \ -carea-in-slice,sum-in-slice --transpose \ | asttable -c'arith $1 counter swap',2 ...[[truncated]]... 3040 0 nan 3041 0 nan 3042 0 nan 3043 0 nan 3044 1 4.311140e-01 3045 18 3.936019e+00 3046 161 -5.800080e+00 3047 360 2.967184e+02 3048 625 1.912855e+03 3049 823 5.140487e+03 3050 945 7.174101e+03 3051 999 6.967604e+03 3052 1046 6.468591e+03 3053 1025 6.457354e+03 3054 996 6.599119e+03 3055 966 6.762280e+03 3056 873 5.014052e+03 3057 649 2.003334e+03 3058 335 3.167579e+02 3059 131 1.670975e+01 3060 25 -2.953789e+00 3061 0 nan 3062 0 nan 3063 0 nan 3064 0 nan ...[[truncated]]... $ astscript-fits-view seg.fits @end example After DS9 opens with the last command above, go to slice 3044 (which is the first non-NaN slice in the spectrum above). In the @code{OBJECTS} extension of this slice, you see several non-zero pixels. The few non-zero pixels on the bottom have a label of 197 and the single non-zero pixel at a higher Y axis position has a label of 198 (which as we saw above, was the label of the H-alpha emission of this galaxy). The few 197 labeled pixels in this slice are the last voxels of the NII emission that is just blue-ward of H-alpha. The single pixel you see in slice 3044 is why you see a value of 1 in the @code{AREA-IN-SLICE} column. As you go to the next slices, if you count the pixels, you will see they add up to the same number you see in that column. The values in the @code{SUM-IN-SLICE} are the sum of values in the continuum-subtracted cube for those same voxels. You should now be able to understand why the @option{--sum-in-slice} column has NaN values in all other slices: because this label doesn't exist in any other slice! Also, within slices that contain label 198, this column only uses the voxels that have the label. So as you see in the second column above, the area that is used in each changes. Therefore @option{--sum-in-slice} or @option{area-in-slice} are the raw 3D spectrum of each 3D emission-line. This is a different concept from the traditional ``spectrum'' where the same area is used over all the slices. To get that you should use the @option{--sumprojinslice} column of MakeCatalog. All the @option{--*in-slice} options that contain a @code{proj} in their name are measurements over the fixed ``projection'' of the 3D volume on the 2D surface of each slice. To see the effect, let's also ask MakeCatalog to measure this projected sum column: @example $ astmkcatalog seg.fits --ids --ra --dec --w3 --sum \ --area-in-slice --sum-in-slice --sum-proj-in-slice \ --output=cat.fits --valuesfile=no-continuum.fits $ asttable cat.fits --range=AWAV,8.560e-7,8.570e-7 -O \ -carea-in-slice,sum-in-slice,sum-proj-in-slice \ --transpose \ | asttable -c'arith $1 counter swap',2,3 ...[[truncated]]... 3040 0 nan 8.686357e+02 3041 0 nan 4.384907e+02 3042 0 nan 4.994813e+00 3043 0 nan -1.595918e+02 3044 1 4.311140e-01 -2.793141e+02 3045 18 3.936019e+00 -3.251023e+02 3046 161 -5.800080e+00 -2.709914e+02 3047 360 2.967184e+02 1.049625e+02 3048 625 1.912855e+03 1.841315e+03 3049 823 5.140487e+03 5.108451e+03 3050 945 7.174101e+03 7.149740e+03 3051 999 6.967604e+03 6.913166e+03 3052 1046 6.468591e+03 6.442184e+03 3053 1025 6.457354e+03 6.393185e+03 3054 996 6.599119e+03 6.572642e+03 3055 966 6.762280e+03 6.716916e+03 3056 873 5.014052e+03 4.974084e+03 3057 649 2.003334e+03 1.870787e+03 3058 335 3.167579e+02 1.057906e+02 3059 131 1.670975e+01 -2.415764e+02 3060 25 -2.953789e+00 -3.534623e+02 3061 0 nan -3.745465e+02 3062 0 nan -2.532008e+02 3063 0 nan -2.372232e+02 3064 0 nan -2.153670e+02 ...[[truncated]]... @end example As you see, in the new @code{SUM-PROJ-IN-SLICE} column, we have a measurement in each slice: including slices that do not have the label of 198 at all. Also, the area used to measure this sum is the same in all slices (similar to a classical spectrometer's output). However, there is a big problem: have a look at the sums in slices 3040 and 3041: the values are increasing! This is because of the emission in the NII line that also falls over the projected area of H-alpha. This shows the power of IFUs as opposed to classical spectrometers: we can distinguish between individual lines based on spatial position and do measurements in 3D! Finally, in case you want the spectrum with the continuum, you just have to change the file given to @option{--valuesfile}: @example $ astmkcatalog seg.fits --ids --ra --dec --w3 --sum \ --area-in-slice --sum-in-slice --sum-proj-in-slice \ --valuesfile=a370-crop.fits \ --output=cat-with-continuum.fits @end example @node Extracting a single spectrum and plotting it, Pseudo narrow-band images, 3D measurements and spectra, Detecting lines and extracting spectra in 3D data @subsection Extracting a single spectrum and plotting it In @ref{3D measurements and spectra} we measured the spectra of all the objects with the MUSE data cube of this demonstration tutorial. Let's now write the resulting spectra for our object 198 into a file to view our measured spectra in TOPCAT for a more visual inspection. But we don't want slice numbers (which are specific to MUSE), we want the horizontal axis to be in Angstroms. To do that, we can use the WCS information: @table @code @item CRPIX3 The ``Coordinate Reference PIXel'' in the 3rd dimension (or slice number of reference) Let's call this @mymath{s_r}. @item CRVAL3 The ``Coordinate Reference VALue'' in the 3rd dimension (the WCS coordinate of the slice in @code{CRPIX3}. Let's call this @mymath{\lambda_r} @item CDELT3 The ``Coordinate DELTa'' in the 3rd dimension, or how much the WCS changes with every slice. Let's call this @mymath{\delta}. @end table @noindent To find the @mymath{\lambda} (wavelength) of any slice with number @mymath{s}, we can simply use this equation: @dispmath{\lambda=\lambda_r+\delta(s-s_r)} Let's extract these three values from the FITS WCS keywords as shell variables to automatically do this within Table's column arithmetic. Here we are using the technique that is described in @ref{Separate shell variables for multiple outputs}. @example $ eval $(astfits seg.fits --keyvalue=CRPIX3,CRVAL3,CDELT3 -q \ | xargs printf "sr=%s; lr=%s; d=%s;") ## Just for a check: $ echo $sr 1.000000e+00 $ echo $lr 4.749679687500000e-07 $ echo $d 1.250000000000000e-10 @end example Now that we have the necessary constants, we can simply convert the equation above into @ref{Reverse polish notation} and use column arithmetic to convert the slice counter into wavelength in the command of @ref{3D measurements and spectra}. @example $ asttable cat.fits --range=AWAV,8.560e-7,8.570e-7 -O \ -carea-in-slice,sum-in-slice,sum-proj-in-slice \ --transpose \ | asttable -c'arith $1 counter '$sr' - '$d' x '$lr' + f32 swap' \ -c2,3 --output=spectrum-obj-198.fits \ --colmetadata=1,WAVELENGTH,m,"Wavelength of slice." \ --colmetadata=2,"AREA-IN-SLICE",voxel,"No. of voxels." $ astscript-fits-view spectrum-obj-198.fits @end example Once TOPCAT opens, take the following steps: @enumerate @item In the ``Graphics'' menu, select ``Plane plot''. @item Change @code{AREA-IN-SLICE} to @code{SUM-PROJ-IN-SLICE}. @item Select the ``Form'' tab. @item Click on the button with the large green ``+'' button and select ``Add line''. @item Un-select the ``Mark'' item that was originally selected. @end enumerate @noindent Of course, the table in @file{spectrum-obj-198.fits} can be plotted using any other plotting tool you prefer to use in your scientific papers. @node Pseudo narrow-band images, , Extracting a single spectrum and plotting it, Detecting lines and extracting spectra in 3D data @subsection Pseudo narrow-band images In @ref{Continuum subtraction} we subtracted/separated the continuum from the emission/absorption lines of our galaxy in the MUSE cube. Let's visualize the morphology of the galaxy at some of the spectral lines to see how it looks. To do this, we will create pseudo narrow-band 2D images by collapsing the cube along the third dimension within a certain wavelength range that is optimized for that flux. Let's find the wavelength range that corresponds to H-alpha emission we studied in @ref{Extracting a single spectrum and plotting it}. Fortunately MakeCatalog can calculate the minimum and maximum position of each label along each dimension like the command below. If you always need these values, you can include these columns in the same MakeCatalog with @option{--sum-proj-in-slice}. Here we are running it separately to help you follow the discussion there. @example $ astmkcatalog seg.fits --output=cat-ranges.fits \ --ids --min-x --max-x --min-y --max-y --min-z --max-z @end example Let's extract the minimum and maximum positions of this particular object with the first command and with the second, we'll write them into different shell variables. With the second command, we are writing those six values into a single string in the format of Crop's @ref{Crop section syntax}. For more on the @code{eval}-based shell trick we used here, see @ref{Separate shell variables for multiple outputs}. Finally, we are running Crop and viewing the cropped 3D cube. @example $ asttable cat-ranges.fits --equal=OBJ_ID,198 \ -cMIN_X,MAX_X,MIN_Y,MAX_Y,MIN_Z,MAX_Z 56 101 11 61 3044 3060 $ eval $(asttable cat-ranges.fits --equal=OBJ_ID,198 \ -cMIN_X,MAX_X,MIN_Y,MAX_Y,MIN_Z,MAX_Z \ | xargs printf "section=%s:%s,%s:%s,%s:%s; ") $ astcrop no-continuum.fits --mode=img --section=$section \ --output=crop-no-continuum.fits $ astscript-fits-view crop-no-continuum.fits @end example Go through the slices and you will only see this particular region of the full cube. We can now collapse the third dimension of this image into a 2D pseudo-narrow band image with Arithmetic's @ref{Dimensionality changing operators}: @example $ astarithmetic crop-no-continuum.fits 3 collapse-sum \ --output=collapsed-all.fits $ astscript-fits-view collapsed-all.fits @end example During the collapse, used all the pixels in each slice. This is not good for the faint outskirts in the peak of the emission line: the noise of the slices with less signal decreases the over-all signal-to-noise ratio in the pseudo-narrow band image. So let's set all the pixels that aren't labeled with this object as NaN, then collapse. To do that, we first need to crop the @code{OBJECT} cube in @file{seg.fits}. With the second command, please have a look to confirm how the labels change as a function of wavelength. @example $ astcrop seg.fits -hOBJECTS --mode=img --section=$section \ --output=crop-obj.fits $ astscript-fits-view crop-obj.fits @end example Let's use Arithmetic to first set all the pixels that are not equal to 198 in @file{collapsed-obj.fits} to be NaN in @file{crop-no-continuum.fits}. With the second command, we are opening the two collapsed images together: @example $ astarithmetic crop-no-continuum.fits set-i \ crop-obj.fits set-o \ i o 198 ne nan where 3 collapse-sum \ --output=collapsed-obj.fits $ astscript-fits-view collapsed-all.fits collapsed-obj.fits \ --ds9extra="-lock scalelimits yes -blink" @end example Let it blink a few times and focus on the outskirts: you will see that the diffuse flux in the outskirts has indeed been preserved better in the object-based collapsed narrow-band image. But this is a little hard to appreciate in the 2D image. To see it better practice, let's get the two radial profiles. We will approximately assume a position angle of -80 and axis ratio of 0.7@footnote{To derive the axis ratio and position angle automatically, you can take the following steps. Note that we are not using NoiseChisel because this crop has been intentionally selected to contain signal, so there is no raw noise inside of it. @example $ aststatistics collapsed-all.fits --sky --tilesize=5,5 $ astarithmetic collapsed-all.fits -h1 collapsed-all_sky.fits -hSKY_STD / 5 gt \ -ocollapsed-lab.fits $ astmkcatalog collapsed-lab.fits -h1 --valuesfile=collapsed-all.fits \ --position-angle --axis-ratio $ asttable collapsed-all_arith_cat.fits -Y -78.817 0.694 @end example }. With the final command below, we are opening both radial profiles in TOPCAT to visualize them. We are also undersampling the radial profile to have better signal-to-noise ratio in the outer radii: @example $ astscript-radial-profile collapsed-all.fits \ --position-angle=-80 --axis-ratio=0.7 \ --undersample=2 --output=collapsed-all-rad.fits $ astscript-radial-profile collapsed-obj.fits \ --position-angle=-80 --axis-ratio=0.7 \ --undersample=2 --output=collapsed-obj-rad.fits @end example To view the difference, let's merge the two profiles (the @code{MEAN} column) into one table and simply print the two profiles beside each other. We will then pipe the resulting table containing both columns to a second call to Gnuastro's Table and use column arithmetic to subtract the two mean values and divide them by the optimized one (to get the fractional difference): @example $ asttable collapsed-all-rad.fits --catcolumns=MEAN -O \ --catcolumnfile=collapsed-obj-rad.fits \ | asttable -c1,2,3 -c'arith $3 $2 - $3 /' \ --colmetadata=2,MEAN-ALL \ --colmetadata=3,MEAN-OBJ \ --colmetadata=4,DIFF,frac,"Fractional diff." -YO # Column 1: RADIUS [pix ,f32,] Radial distance # Column 2: MEAN-ALL [input-units,f32,] Mean of sky subtracted values. # Column 3: MEAN-OBJ [input-units,f32,] Mean of sky subtracted values. # Column 4: DIFF [frac ,f32,] Fractional diff. 0.000 436.737 450.256 0.030 2.000 371.880 384.071 0.032 4.000 313.429 320.138 0.021 6.000 275.744 280.102 0.016 8.000 152.214 154.470 0.015 10.000 59.311 62.207 0.047 12.000 18.466 20.396 0.095 14.000 6.940 8.671 0.200 16.000 3.052 4.256 0.283 18.000 1.590 2.848 0.442 20.000 1.430 2.550 0.439 22.000 0.838 1.975 0.576 @end example @noindent As you see, beyond a radius of 10, the last fractional difference column becomes very large, showing that a lot of signal is missing in the @code{MEAN-ALL} column. For a more visual comparison of the two profiles, you can use the command below to open both tables in TOPCAT: @example $ astscript-fits-view collapsed-all-rad.fits \ collapsed-obj-rad.fits @end example Once TOPCAT has opened take the following steps: @enumerate @item Select @file{collapsed-all-rad.fits} @item In the ``Graphics'' menu, select ``Plane Plot''. @item Click on the ``Axes'' side-bar (by default, at the bottom half of the window), and click on ``Y Log'' to view the vertical axis in logarithmic scale. @item In the ``Layers'' menu, select ``Add Position Control''. You will see that at the bottom half, a new scatter plot information is displayed. @item Click on the scroll-down menu in front of ``Table'' and select @file{2: collapsed-obj-rad.fits}. Afterwards, you will see the optimized pseudo-narrow-band image radial profile as blue points. @end enumerate @node Color images with full dynamic range, Zero point of an image, Detecting lines and extracting spectra in 3D data, Tutorials @section Color images with full dynamic range Color images are fundamental tools to visualize astronomical datasets, allowing to visualize valuable physical information within them. A color image is a composite representation derived from different channels. Each channel usually corresponding to different filters (each showing wavelength intervals of the object's spectrum). In general, most common color image formats (like JPEG, PNG or PDF) are defined from a combination of Red-Green-Blue (RGB) channels (to cover the optical range with normal cameras). These three filters are hard-wired in your monitor and in most normal camera (for example smartphone or DSLR) pixels. For more on the concept and usage of colors, see @ref{Color} and @ref{Colormaps for single-channel pixels}. @cindex Dynamic range However, normal images (that you take with your smartphone during the day for example) have a very limited dynamic range (difference between brightest and fainest part of an image). For example in an image you take from a farm, the brightness pixel (the sky) cannot be more than 255 times the faintest/darkest shadow in the image (because normal cameras produce unsigned 8 bit integers; containing @mymath{2^8=256} levels; see @ref{Numeric data types}). However, astronomical sources span a much wider dynamic range such that their central parts can be tens of millions of times brighter than their larger outer regions. Our astronomical images in the FITS format are therefore usually 32-bit floating points to preserve this information. Therefore a simple linear scaling of 32-bit astronomical data to the 8-bit range will put most of the pixels on the darkest level and barely show anything! This presents a major challenge in visualizing our astronomical images on a monitor, in print or for a projector when showing slides. In this tutorial, we review how to prepare your images and create informative RGB images for your PDF reports. We start with aligning the images to the same pixel grid (which is usually necessary!) and using the low-level engine (Gnuastro's @ref{ConvertType} program) directly to create an RGB image. Afterwards, we will use a higher-level installed script (@ref{Color images with gray faint regions}). This is a high-level wrapper over ConvertType that does some pre-processing and stretches the pixel values to enhance their 8-bit representation before calling ConvertType. @menu * Color channels in same pixel grid:: Warping all inputs to the same pixel grid. * Color image using linear transformation:: A linear color mapping won't show much! * Color for bright regions and grayscale for faint:: Show the full dynamic range. * Manually setting color-black-gray regions:: Physically motivated regions. * Weights contrast markers and other customizations:: Nice ways to enhance visual appearance. @end menu @node Color channels in same pixel grid, Color image using linear transformation, Color images with full dynamic range, Color images with full dynamic range @subsection Color channels in same pixel grid In order to use different images as color channels, it is important that the images be properly aligned and on the same pixel grid. When your inputs are high-level products of the same survey, this is usually the case. However, in many other situations the images you plan to use as different color channels lie on different sky positions, even if they may have the same number of pixels. In this section we will show how to solve this problem. For an example dataset, let's use the same SDSS field that we used in @ref{Detecting large extended targets}: the field covering the outer parts of the M51 group. With the commands below, we'll make an @file{inputs} directory and download and prepare the three g, r and i band images of SDSS over the same field there: @example $ mkdir in $ sdssurl=https://dr12.sdss.org/sas/dr12/boss/photoObj/frames $ for f in g r i; do \ wget $sdssurl/301/3716/6/frame-$f-003716-6-0117.fits.bz2 \ -O$f.fits.bz2; \ bunzip2 $f.fits.bz2; \ astfits $f.fits --copy=0 -oin/$f-sdss.fits; \ rm $f.fits; \ done @end example Let's have a look at the three three images with the first command, and get their number of pixels with the second: @example ## Open the images locked by image coordinates $ astscript-fits-view in/*-sdss.fits ## Check the number of pixels along each axis of all images. $ astfits in/*-sdss.fits --keyvalue=NAXIS1,NAXIS2 in/g-sdss.fits 2048 1489 in/i-sdss.fits 2048 1489 in/r-sdss.fits 2048 1489 @end example From the first command, the images look like they cover the same astronomical object (M51) in the same region of the sky, and with the second, we see that they have the same number of pixels. But this general visual inspection does not guarantee that the astronomical objects within the pixel grid cover exactly the same positions (within a pixel!) on the sky. Let's open the images again, but this time asking DS9 to only show one at a time, and to ``blink'' between them: @example $ astscript-fits-view in/*-sdss.fits \ --ds9extra="-single -zoom to fit -blink" @end example If you pay attention, you will see that the objects within each image are at slightly different locations. If you don't immediately see it, try zooming in to any star within the image and let DS9 continue blinking. You will see that the star jumps a few pixels between each blink. In essence, the images are not aligned on the same pixel grid, therefore, the same source does not share identical image coordinates across these three images. As a consequence, it is necessary to align the images before making the color image, otherwise this misalignment will generate multiply-peaked point-sources (stars and centers of galaxies) and artificial color gradients in the more diffuse parts. To align the images to the same pixel grid, we will employ Gnuastro's @ref{Warp} program. In particular, its features to @ref{Align pixels with WCS considering distortions}. Let's take the middle (r band) filter as the reference to define our grid. With the first command after building the @file{aligned/} directory, let's align the r filter to the celestial coordinates (so the M51 group's position angle doesn't depend on the orientation of the telescope when it took this image). With for the other two filters, we will use Warp's @option{--gridfile} option to ensure that ensure that their pixel grid and WCS exactly match the r band image, but the pixel values come from the other two filters. Finally, in the last command, we'll visualize the three aligned images. @example ## Put all three channels in the same pixel grid. $ mkdir aligned $ astwarp in/r-sdss.fits --output=aligned/r-sdss.fits $ astwarp in/g-sdss.fits --output=aligned/g-sdss.fits \ --gridfile=aligned/r-sdss.fits $ astwarp in/i-sdss.fits --output=aligned/i-sdss.fits \ --gridfile=aligned/r-sdss.fits ## Open the images locked by image coordinates $ astscript-fits-view aligned/*-sdss.fits \ --ds9extra="-single -zoom to fit -blink" @end example As the images blink between each other, zoom in to some of the smaller stars and you will see that they no longer jump from one blink to the next. These images are now precisely pixel-aligned. We are now equipped with the essential data to proceed with the color image generation in @ref{Color image using linear transformation}. @node Color image using linear transformation, Color for bright regions and grayscale for faint, Color channels in same pixel grid, Color images with full dynamic range @subsection Color image using linear transformation Previously (in @ref{Color channels in same pixel grid}), we downloaded three SDSS filters of M51 and described how you can put them all in the same pixel grid. In this section, we will explore the raw and low-level process of generating color images using the input images (without modifying the pixel value distributions). We will use Gnuastro's ConvertType program (with executable name @command{astconvertt}). Let's create our first color image using the aligned SDSS images mentioned in the previous section. The order in which you provide the images matters, so ensure that you sort the filters from redder to bluer (iSDSS and gSDSS are respectively the reddest and bluest of the three filters used here). @example $ astconvertt aligned/i-sdss.fits aligned/r-sdss.fits \ aligned/g-sdss.fits -g1 --output=m51.pdf @end example @cartouche @noindent @strong{Other color formats:} In the example above, we are using PDF because this is usually the best format to later also insert marks that are commonly necessary in scientific publications (see @ref{Marking objects for publication}. But you can also generate JPEG and TIFF outputs simply by using a different suffix for your output file (for example @option{--output=m51.jpg} or @option{--output=m51.tiff}). @end cartouche Open the image with your PDF viewer and have a look. Do you see something? Initially, it appears predominantly black. However, upon closer inspection, you will discern very tiny points where some color is visible. These points correspond to the brightest part of the brightest sources in this field! The reason you saw much more structure when looking at the image in DS9 previously in @ref{Color channels in same pixel grid} was that @code{astscript-fits-view} used DS9's @option{-zscale} option to scale the values in a non-linear way! Let's have another look at the images with the linear @code{minmax} scaling of DS9: @example $ astscript-fits-view aligned/*-sdss.fits \ --ds9extra="-scale minmax -lock scalelimits" @end example You see that it looks very similar to the PDF we generated above: almost fully black! This phenomenon exemplifies the challenge discussed at the start of this tutorial in @ref{Color images with full dynamic range}). Given the vast number of pixels close to the sky background level compared to the relatively few very bright pixels, visualizing the entire dynamic range simultaneously is tricky. To address this challenge, the low-level ConvertType program allows you to selectively choose the pixel value ranges to be displayed in the color image. This can be accomplished using the @option{--fluxlow} and @option{--fluxhigh} options of ConvertType. Pixel values below @option{--fluxlow} are mapped to the minimum value (displayed as black in the default colormap), and pixel values above @option{--fluxhigh} are mapped to the maximum value (displayed as white)) The choice of these values depends on the pixel value distribution of the images. But before that, we have to account for an important differences between the filters: the brightness of the background also has different values in different filters (the sky has colors!) So before making more progress, generally, first you have to subtract the sky from all three images you want to feed to the color channels. In a previous tutorial (@ref{Detecting large extended targets}) we used these same images as a basis to show how you can do perfect sky subtraction in the presence of large extended objects like M51. Here we are just doing a visualization and bringing pixels to 8-bit, so we don't need that level of precision reached there (we won't be doing photometry!). Therefore, let's just keep the @option{--tilesize=100,100} of NoiseChisel. @example $ mkdir no-sky $ for f in i r g; do \ astnoisechisel aligned/$f-sdss.fits --tilesize=100,100 \ --output=no-sky/$f-sdss.fits; \ done @end example @cartouche @noindent @strong{Accounting for zero points:} An important step that we have not implemented in this section is to unify the zero points of the three filters. In the case of SDSS (and some other surveys), the images have already been brought to the same zero point, but that is not generally the case. So before subtracting sky (and estimating the standard deviation) you should also unify the zero points of your images (for example through Arithmetic's @code{counts-to-nanomaggy} or @code{counts-to-jy} described in @ref{Unit conversion operators}). If you don't already have the zero point of your images, see the dedicated tutorial: @ref{Zero point of an image}. @end cartouche Now that we know the noise fluctuates around zero in all three images, we can start to define the values for the @option{--fluxlow} and @option{--fluxhigh}. But the sky standard deviation comes from the sky brightness in different filters and is therefore different! Let's have a look by taking the median value of the @code{SKY_STD} extension of NoiseChisel's output: @example $ aststatistics no-sky/i-sdss.fits -hSKY_STD --median 2.748338e-02 $ aststatistics no-sky/r-sdss.fits -hSKY_STD --median 1.678463e-02 $ aststatistics no-sky/g-sdss.fits -hSKY_STD --median 9.687680e-03 @end example You see that the sky standard deviation of the reddest filter (i) is almost three times the bluest filter (g)! This is usually the case in any scenario (redder emission usually requires much less energy and gets absorbed less, so the background is usually brighter in the reddest filters). As a result, we should define our limits based on the noise of the reddest filter. Let's set the minimum flux to 0 and the maximum flux to ~50 times the noise of the i-band image (@mymath{0.027\times50=1.35}). @example $ astconvertt no-sky/i-sdss.fits no-sky/r-sdss.fits no-sky/g-sdss.fits \ -g1 --fluxlow=0.0 --fluxhigh=1.35 --output=m51.pdf @end example After opening the new color image, you will observe that a spiral arm of M51 and M51B (or NGC5195, which is interacting with M51), become visible. However, the majority of the image remains black. Feel free to experiment with different values for @option{--fluxhigh} to set the maximum value closer to the noise-level and see the more diffuse structures. For instance, try with @option{--fluxhigh=0.27} the brightest pixels will have a signal-to-noise ratio of 10, or even @option{--fluxhigh=0.135} for a signal-to-noise ratio of 5. But you will notice that, the brighter areas of the galaxy become "saturated": you don't see the structure of brighter parts of the galaxy any more. As you bring down the maximum threshold, the saturated areas also increase in size: loosing some useful information on the bright side! Let's go to the extreme and decrease the threshold to close the noise-level (for example @option{--fluxhigh=0.027} to have a signal-to-noise ratio of 1)! You will see that the noise now becomes colored! You generally don't want this because the difference in filter values of one pixel are only physically meaningful when they have a high signal-to-noise ratio. For lower signal-to-noise ratios, we should avoid color. Ideally, we want to see both the brighter parts of the central galaxy, as well as the fainter diffuse parts together! But with the simple linear transformation here, that is not possible! You need some pre-processing (before calling ConvertType) to scale the images. For example, you can experiment with taking the logarithm or the square root of the images (using @ref{Arithmetic}) before creating the color image. These non-linear functions transform pixel values, mapping them to a new range. After applying such transformations, you can use the transformed images as inputs to @command{astconvertt} to generate color images (similar to how we subtracted the sky; which is a linear operation). In addition to that, it is possible to use a different color schema for showing the different brightness ranges as it is explained in the next section. In the next section (@ref{Color for bright regions and grayscale for faint}), we'll review one high-level installed script which will simplify all these pre-processings and help you produce images with more information in them. @node Color for bright regions and grayscale for faint, Manually setting color-black-gray regions, Color image using linear transformation, Color images with full dynamic range @subsection Color for bright regions and grayscale for faint In the previous sections we aligned three SDSS images of M51 group @ref{Color channels in same pixel grid}, and created a linearly-scaled color image (only using @command{astconvertt} program) in @ref{Color image using linear transformation}. But we saw that showing the brighter and fainter parts of the galaxy in a single image is impossible in the linear scale! In this section, we will use Gnuastro's @command{astscript-color-faint-gray} installed script to address this problem and create images which visualize a major fraction of the contents of our astronomical data. This script aims to solve the problems mentioned in the previous section. See Infante-Sainz et al. @url{https://arxiv.org/abs/2401.03814,2024}, which first introduced this script, for examples of the final images we will be producing in this tutorial. This script uses a non-linear transformation to modify the bright input values before combining them to produce the color image. Furthermore, for the faint regions of the image, it will use grayscale and avoid color over all (as we saw, colored noised is not too nice to look at!). The faint regions are also inverted: so the brightest pixel in the faint (black-and-white or grayscale) region is black and the faintest pixels will be white. Black therefore creates a smooth transition from the colored bright pixels: the faintest colored pixel is also black. Since the background is white and the diffuse parts are black, the final product will also show nice in print or show on a projector (the background is not black, but white!). The SDSS image we used in the previous sections doesn't show the full glory of the M51 group! Therefore, in this section, we will use the wider images from the @url{https://www.j-plus.es, J-PLUS survey}. Fortunately J-PLUS includes the SDSS filters, so we can use the same iSDSS, rSDSSS, and gSDSS filters of J-PLUS. As a consequence, similar to the previous section, the R, G, and B channels are respectively mapped to the iSDSS, rSDSS and gSDSS filters of J-PLUS. The J-PLUS identification numbers for the images containing the M51 galaxy group are in these three filters are respectively: 92797, 92801, 92803. The J-PLUS images are already sky subtracted and aligned into the same pixel grid (so we will not need the @command{astwarp} and @command{astnoisechisel} steps before). However, zero point magnitudes of the J-PLUS images are different: 23.43, 23.74, 23.74. Also, the field of view of the J-PLUS Camera is very large and we only need a small region to see the M51 galaxy group. Therefore, we will crop the regions around the M51 group with a width of 0.35 degree wide (or 21 arcmin) and put the crops in the same @file{aligned/} directory we made before (which contains the inputs to the colored images). With all the above information, let's download, crop, and have a look at the images to check that everything is fine. Finally, let's run @command{astscript-color-faint-gray} on the three cropped images. @example ## Download $ url=https://archive.cefca.es/catalogues/vo/siap/jplus-dr3/get_fits?id= $ wget "$url"92797 -Oin/i-jplus.fits.fz $ wget "$url"92801 -Oin/r-jplus.fits.fz $ wget "$url"92803 -Oin/g-jplus.fits.fz ## Crop $ widthdeg=0.35 $ ra=202.4741207 $ dec=47.2171879 $ for f in i r g; do \ astcrop in/$f-jplus.fits.fz --center=$ra,$dec \ --width=$widthdeg --output=aligned/$f-jplus.fits; \ done ## Visual inspection of the images used for the color image $ astscript-fits-view aligned/*-jplus.fits ## Create colored image. $ R=aligned/i-jplus.fits $ G=aligned/r-jplus.fits $ B=aligned/g-jplus.fits $ astscript-color-faint-gray $R $G $B -g1 --output=m51.pdf @end example After opening the PDF, you will notice that it is a color image with a gray background, making the M51 group and background galaxies visible together. However, the images does not look nice and there is significant room for improvement! You will notice that at the end of its operation, the script printed some numerical values for four options in a table, to show automatically estimated parameter values. To enhance the output, let's go through and explain these step by step. The first important point to take into account is the photometric calibration. If the images are photometrically calibrated, then it is necessary to use the calibration to put the images in the same physical units and create ``real'' colors. The script is able to do it through the zero point magnitudes with the option @option{--zeropoint} (or @option{-z}). With this option, the images are internally transformed to have the same pixel units and then create the color image. Since the magnitude zero points are 23.43, 23.74, 23.74 for the i, r, and g images, let's use them in the definition @example $ astscript-color-faint-gray $R $G $B -g1 --output=m51.pdf \ -z23.43 -z23.74 -z23.74 @end example Open the image and have a look. This image does not differ too much from the one generated by default (not using the zero point magnitudes). This is because the zero point values used here are similar for the three images. But in other datasets the calibration could make a big difference! Let's consider another vital parameter: the minimum value to be displayed (@option{--minimum} or @option{-m}). Pixel values below this number will not be shown on the color image. In general, if the sky background has been subtracted (see @ref{Color image using linear transformation}), you can use the same value (0) for all three. However, it is possible to consider different minimum values for the inputs (in this case use as many @option{-m} as input images). In this particular case, a minimum value of zero for all images is suitable. To keep the command simple, we'll add the zero point, minimum and HDU of each image in the variable that also had its filename. @example $ R="aligned/i-jplus.fits -h1 --zeropoint=23.43 --minimum=0.0" $ G="aligned/r-jplus.fits -h1 --zeropoint=23.74 --minimum=0.0" $ B="aligned/g-jplus.fits -h1 --zeropoint=23.74 --minimum=0.0" $ astscript-color-faint-gray $R $G $B --output=m51.pdf @end example In contrast to the previous image, the new PDF (with a minimum value of zero) exhibits a better background visualization because it is avoiding negative pixels to be included in the scaling (they are white). Now let's review briefly how the script modifies the pixel value distribution in order to show the entire dynamical range in an appropriate way. The script combines the three images into a single one by using a the mean operator, as a consequence, the combined image is the average of the three R, G, and B images. This averaged image is used for performing the asinh transformation of Lupton et al. @url{https://ui.adsabs.harvard.edu/abs/2004PASP..116..133L, 2004} that is controlled by two parameters: @option{--qbright} (@mymath{q}) and @option{--stretch} (@mymath{s}). The asinh transformation consists in transforming the combined image (@mymath{I}) according to the expression: @mymath{f(I) = asinh(q\times{}s\times{}I)/q}. When @mymath{q\rightarrow0}, the expression becomes linear with a slope of the ``stretch'' (@mymath{s}) parameter: @mymath{f(I) = s\times{}I}. In practice, we can use this characteristic to first set a low value for @option{--qbright} and see the brighter parts in color, while changing the parameter @option{--stretch} to show linearly the fainter regions (outskirts of the galaxies for example. The image obtained previously was computed by the default parameters (@option{--qthresh=1.0} and @option{--stretch=1.0}). So, let's set a lower value for @option{--qbright} and check the result. @example $ astscript-color-faint-gray $R $G $B --output=m51-qlow.pdf \ --qbright=0.01 @end example Comparing @file{m51.pdf} and @file{m51-qlow.pdf}, you will see that a large area of the previously colored colored pixels have become black. Only the very brightest pixels (core of the galaxies and stars) are shown in color. Now, let's bring out the fainter regions around the brightest pixels linearly by increasing @option{--stretch}. This allows you to reveal fainter regions, such as outer parts of galaxies, spiral arms, stellar streams, and similar structures. Please, try different values to see the effect of changing this parameter. Here, we will use the value of @option{--stretch=100}. @example $ astscript-color-faint-gray $R $G $B --output=m51-qlow-shigh.pdf \ --qbright=0.01 --stretch=100 @end example Do you see how the spiral arms and the outskirts of the galaxies have become visible as @option{--stretch} is increased? After some trials, you will have the necessary feeling to see how it works. Please, play with these two parameters until you obtain the desired results. Depending on the absolute pixel values of the input images and the photometric calibration, these two parameters will be different. So, when using this script on your own data, take your time to study and analyze which parameters are good for showing the entire dynamical range. For this tutorial, we will keep it simple and use the previous parameters. Let's define a new variable to keep the parameters already discussed so we have short command-line examples. @example $ params="--qbright=0.01 --stretch=100" $ astscript-color-faint-gray $R $G $B $params --output=m51.pdf $ rm m51-qlow.pdf m51-qlow-shigh.pdf @end example Having a separate color-map for the fainter parts is generally a good thing, but for some reason you may not want it! To disable this feature, you can use the @option{--coloronly} option: @example $ astscript-color-faint-gray $R $G $B $params --coloronly \ --output=m51-coloronly.pdf @end example Open the image and note that now the coloring has gone all the way into the noise (producing a black background). In contrast with the gray background images before, the fainter/smaller stars/galaxies and the low surface brightness features are not visible anymore! These regions show the interaction of two galaxies; as well as all the other background galaxies and foreground stars. These structures were entirely hidden in the ``only-color'' images. Consequently, the gray background color scheme is particularly useful for visualizing the most features of your data and you will rarely need to use the @option{--coloronly} option. We will therefore not use this option anymore in this tutorial; and let's clean the temporary file made before: @example $ rm m51-coloronly.pdf @end example Now that we have the basic parameters are set, let's consider other parameters that allow to fine tune the three ranges of values: color for the brightest pixel values, black for intermediate pixel values, and gray for the faintest pixel values: @itemize @item @option{--colorval} defines the boundary between the color and black regions (the lowest pixel value that is colored). @item @option{--grayval} defines the boundary between the black and gray regions (the highest gray value). @end itemize Looking at the last lines that the script prints, we see that the default value estimated for @option{--colorval} and @option{--grayval} are roughly 1.4. What do they mean? To answer this question it is necessary to have a look at the image that is used to separate those different regions. By default, this image is computed internally by the script and removed at the end. To have a look at it, you need to use the option @option{--keeptmp} to keep the temporary files. Let's put the temporary files into the @file{tmp} directory with the option @option{--tmpdir=tmp --keeptmp}. The first will use the name @file{tmp} for the temporary directory and with the second, we ask the script to not delete (keep) it after all operations are done. @example $ astscript-color-faint-gray $R $G $B $params --output=m51.pdf \ --tmpdir=tmp --keeptmp @end example The image that defines the thresholds is @file{./tmp/colorgray_threshold.fits}. By default, this image is the asinh-transformed image with the pixel values between 0 (faint) and 100 (bright). If you obtain the statistics of this image, you will see that the median value is exactly the value that the script is giving as the @option{--colorval}. @example $ aststatistics ./tmp/colorgray_threshold.fits @end example In other words, all pixels between 100 and this value (1.4) on the threshold image will be shown in color. To see its effect, let's increase this parameter to @option{--colorval=25}. By doing this, we expect that only bright pixels (those between 100 and 25 in the threshold image) will be in color. @example $ astscript-color-faint-gray $R $G $B $params --colorval=25 \ --output=m51-colorval.pdf @end example Open @file{m51-colorval.pdf} and check that it is true! Only the central part of the objects (very bright pixels, those between 100 and 25 on the threshold image) are shown in color. Fainter pixels (below 25 on the threshold image) are shown in black and gray. However, in many situations it is good to be able to show the outskirts of galaxies and low surface brightness features in pure black, while showing the background in gray. To do that, we can use another threshold that separates the black and gray pixels: @option{--grayval}. Similar to @option{--colorval}, the @option{--grayval} option defines the separation between the pure black and the gray pixels from the threshold image. For example, by setting @option{--grayval=5}, those pixels below 5 in the threshold image will be shown in gray, brighter pixels will be shown in black until the value 25. Pixels brighter than 25 are shown in color. @example $ astscript-color-faint-gray $R $G $B $params --output=m51-check.pdf \ --colorval=25 --grayval=5 @end example Open the image and check that the regions shown in color are smaller (as before), and that now there is a region around those color pixels that are in pure black. After the black pixels toward the fainter ones, they are shown in gray. As explained above, in the gray region, the brightest are black and the faintest are white. It is recommended to experiment with different values around the estimated one to have a feeling on how it changes the image. To have even better idea of those regions, please run the following example to keep temporary files and check the labeled image it has produced: @example $ astscript-color-faint-gray $R $G $B $params --output=m51-check.pdf \ --colorval=25 --grayval=5 \ --tmpdir=tmp --keeptmp $ astscript-fits-view tmp/total_mask-2color-1black-0gray.fits @end example In this segmentation image, pixels equal to 2 will be shown in color, pixels equal to 1 will be shown as pure black, and pixels equal to zero are shown in gray. By default, the script sets the same value for both thresholds. That means that there is not many pure black pixels. By adjusting the @option{--colorval} and @option{--grayval} parameters, you can obtain an optimal result to show the bright and faint parts of your data within one printable image. The values used here are somewhat extreme to illustrate the logic of the procedure, but we encourage you to experiment with values close to the estimated by default in order to have a smooth transition between the three regions (color, black, and gray). The script can provide additional information about the pixel value distributions used to estimate the parameters by using the @option{--checkparams} option. To conclude this section of the tutorial, let's clean up the temporary test files: @example $ rm m51-check.pdf m51-colorval.pdf @end example @node Manually setting color-black-gray regions, Weights contrast markers and other customizations, Color for bright regions and grayscale for faint, Color images with full dynamic range @subsection Manually setting color-black-gray regions In @ref{Color for bright regions and grayscale for faint}, we created a non-linear colored image. We used the @option{--colorval} and @option{--grayval} options to specify which regions to show in gray (faintest values), black (intermediate values) and color (brightest values). We also saw that the script uses a labeled image with three possible values for each pixel to identify how that pixel should be colored. A useful feature of this script is the possibility of providing this labeled image as an input directly. This expands the possibilities of generating color images in a more quantitative way. In this section, we'll use this feature to use a more physically motivated criteria to select these three regions (the surface brightness in the reddest band). First, let's generate a surface brightness image from the R channel. That is, the value of each pixel will be in the units of surface brightness (mag/arcsec@mymath{^2}). To do that, we need obtain the pixel area in arcsec and use the zero point value of the image. Then, the @option{counts-to-sb} operator of @command{astarithmetic} is used. For more on the conversion of NaN surface brightness values and the value to @code{R_sbl} (which is roughly the surface brightness limit of this image), see @ref{FITS images in a publication}. @example $ sb_sbl=26 $ sb_zp=23.43 $ sb_img=aligned/i-jplus.fits $ pixarea=$(astfits $sb_img --pixelareaarcsec2 --quiet) # Compute the SB image (set NaNs to SB of 26!) $ astarithmetic $sb_img $sb_zp $pixarea counts-to-sb set-sb \ sb sb isblank sb $sb_sbl gt or $sb_sbl where \ --output=sb.fits # Have a look at the image $ astscript-fits-view sb.fits --ds9scale=minmax \ --ds9extra="-invert" @end example Remember that because @file{sb.fits} is a surface brightness image where lower values are brighter and higher values are fainter. Let's build the labeled image that defines the regions (@file{regions.fits}) step-by-step with the following criteria in surface brightness (SB) @table @asis @item @mymath{\rm{SB}<23} These are the brightest pixels, we want these in color. In the regions labeled image, these should get a value of 2. @item @mymath{23<\rm{SB}<25} These are the intermediate pixel values, to see the fainter parts better, we want these in pure black (no change in color in this range). In the regions labeled image, these should get a value of 1. @item @mymath{\rm{SB}>25} These are the faintest pixel values, we want these in a gray color map (pixels with an SB of 25 will be black and as they become fainter, they will become lighter shades of gray). In the regions labeled image, these should get a value of 0. @end table @example # SB thresholds (low and high) $ sb_faint=25 $ sb_bright=23 # Select the three ranges of pixels. $ astarithmetic sb.fits set-sb \ sb $sb_bright lt set-color \ sb $sb_bright ge sb $sb_faint lt and set-black \ color 2 u8 x black + \ --output=regions.fits # Check the images $ astscript-fits-view regions.fits @end example We can now use this labeled image with the @option{--regions} option for obtaining the final image with the desired regions (the @code{R}, @code{G}, @code{B} and @code{params} shell variables were set previously in @ref{Color for bright regions and grayscale for faint}): @example $ astscript-color-faint-gray $R $G $B $params --output=m51-sb.pdf \ --regions=regions.fits @end example Open @file{m51-sb.pdf} and have a look. Do you see how the different regions (SB intervals) have been colored differently? They come from the SB levels we defined, and because it is using absolute thresholds in physical units of surface brightness, the visualization is not only a nice looking color image, but can be used in scientific analysis. This is really interesting because now it is possible to use color images for detecting low surface brightness features at the same time they provide quantitative measurements. Of course, here we have defined this region label image just using two surface brightness values, but it is possible to define any other labeled region image that you may need for your particular purpose. @node Weights contrast markers and other customizations, , Manually setting color-black-gray regions, Color images with full dynamic range @subsection Weights, contrast, markers and other customizations Previously (in @ref{Manually setting color-black-gray regions}) we used an absolute (in units of surface brightness) thresholding for selecting which regions to show by color, black and gray. To keep the previous configurations and avoid long commands, let's add the previous options to the @code{params} shell variable. To help in readability, we will repeat the other shell variables from previous sections also: @example $ R="aligned/i-jplus.fits -h1 --zeropoint=23.43 --minimum=0.0" $ G="aligned/r-jplus.fits -h1 --zeropoint=23.74 --minimum=0.0" $ B="aligned/g-jplus.fits -h1 --zeropoint=23.74 --minimum=0.0" $ params="--regions=regions.fits --qbright=0.01 --stretch=100" $ astscript-color-faint-gray $R $G $B $params --output=m51.pdf @end example To modify the color balance of the output image, you can weigh the three channels differently with the @option{--weight} or @option{-w} option. For example, by using @option{-w1 -w1 -w2}, you give two times more weight to the blue channel than to the red and green channels: @example $ astscript-color-faint-gray $R $G $B $params -w1 -w1 -w2 \ --output=m51-weighted.pdf @end example The colored pixels of the output are much bluer now and the distinction between the two merging galaxies is more clear. However, keep in mind that altering the different filters can lead to incorrect subsequent analyses by the readers/viewers of this work (for example they will falsely think that the galaxy is blue, and not red!). If the reduction and photometric calibration are correct, and the images represent what you consider as the red, green, and blue channels, then the output color image should be suitable without weights. In certain situations, the combination of channels may not have a traditional color interpretation. For instance, combining an X-ray channel with an optical filter and a far-infrared image can complicate the interpretation in terms of human understanding of color. But the physical interpretation remains valid as the different channels (colors in the output) represent different physical phenomena of astronomical sources. Another easier example is the use of narrow-band filters such as the H-alpha of J-PLUS survey. This is shown in the Bottom-right panel of Figure 1 by Infante-Sainz et al. @url{https://arxiv.org/abs/2401.03814,2024}, in this case the G channel has been substituted by the image corresponding to the H-alpha filter to show the star formation regions. Therefore, please use the weights with caution, as it can significantly affect the output and misinform your readers/viewers. If you do apply weights be sure to report the weights in the caption of the image (beside the filters that were used for each channel). With great power there must also come great responsibility! Two additional transformations are available to modify the appearance of the output color image. The linear transformation combines bias adjustment and contrast enhancement through the @option{--bias} and @option{--contrast} options. In most cases, only the contrast adjustment is necessary to improve the quality of the color image. To illustrate the impact of adjusting image contrast, we will generate an image with higher contrast and compare with the previous one. @example $ astscript-color-faint-gray $R $G $B $params --contrast=2 \ --output=m51-contrast.pdf @end example When you compare this (@file{m51-contrast.pdf}) with the previous output (@file{m51.pdf}), you see that the colored parts are now much more clear! Use this option also with caution because it may happen that the bright parts become saturated. Another option available for transforming the image appearance is the gamma correction, a non-linear transformation that can be useful in specific cases. You can experiment with different gamma values to observe the impact on the resulting image. Lower gamma values will enhance faint structures, while higher values will emphasize brighter regions. Let's have a look by giving two very different values to it with the simple loop below: @example $ for g in 0.4 2.0; do \ astscript-color-faint-gray $R $G $B $params --contrast=2 \ --gamma=$g --output=m51-gamma-$g.pdf; \ done @end example Comparing the last three files (@file{m51-contrast.pdf}, @file{m51-gamma-0.4.pdf} and @file{m51-gamma-2.0.pdf}), you will clearly see the effect of the @option{--gamma}. Instead of using a combination of the three input images for the gray background, you can introduce a fourth image that will be used for generating the gray background. This image is referred to as the "K" channel and may be useful when a particular filter is deeper, has unique characteristics, or you have built by some custom processing to show the diffuse features better. In this case, this image will be used for defining the @option{--colorval} and @option{--grayval} thresholds, but the rationale remains the same as explained earlier. Two additional options are available to smooth different regions by convolving with a Gaussian kernel: @option{--colorkernelfwhm} for smoothing color regions and @option{--graykernelfwhm} for convolving gray regions. The value specified for these options represents the full width at half maximum of the Gaussian kernel. Finally, another commonly useful feature is @option{--markoptions}: it allows you to mark and label the final output image with vector graphics over the color image. The arguments passed through this option are directly passed to ConvertType for the generation of the output image. This feature was already used in @ref{Marking objects for publication} of the @ref{General program usage tutorial}; see there for a more complete introduction. Let's create four marks/labels just to illustrate the procedure within @command{astscript-color-faint-gray}. First we need to create a table that contains the parameters for creating the marks (coordinates, shape, size, colors, etc.). In order to have an example that could be easily salable to more marks, with elaborated options let's create it by parts: the header with the column names, and the parameters. With the following commands, we'll create the header that contains the column metadata. @example echo "# Column 1: ra [pix, f32] RA coordinate" > markers.txt echo "# Column 2: dec [pix, f32] Dec coordinate" >> markers.txt echo "# Column 3: shape [none, u8] Marker shape" >> markers.txt echo "# Column 4: size [pix, f32] Marker Size" >> markers.txt echo "# Column 5: aratio [none, f32] Axis ratio" >> markers.txt echo "# Column 6: angle [deg, f32] Position angle" >> markers.txt echo "# Column 7: color [none, u8] Marker color" >> markers.txt @end example Next is to create the parameters that define the markers. In this case, with the lines below we create four markers (cross, ellipse, square, and line) at different positions, with different shapes, and colors. These lines are appended to the header file created previously. @example echo "400.00 400.00 3 60.000 0.50 0.000 8" >> markers.txt echo "1800.0 400.00 4 120.00 0.30 45.00 58" >> markers.txt echo "400.00 1800.0 6 180.00 1.00 0.000 85" >> markers.txt echo "1800.0 1800.0 8 240.00 1.00 -45.0 25" >> markers.txt @end example Now that we have the table containing the definition of the markers, we use the @option{--markoptions} option of this script. This option will pass what ever is given to it directly to ConvertType, so you can use all the options in @ref{Drawing with vector graphics}. For this basic example, let's give it the following options: @example markoptions="--mode=img \ --sizeinarcsec \ --markshape=shape \ --markrotate=angle \ --markcolor=color \ --marks=markers.txt \ --markcoords=ra,dec \ --marksize=size,aratio" @end example The last step consists in executing the script with the option that provides all the markers options. @example $ astscript-color-faint-gray $R $G $B $params --contrast=2 \ --markoptions="$markoptions" \ --output=m51-marked.pdf @end example Open the @file{m51-marked.pdf} and check that the four markers have been printed on the image. With this quick example we just show the possibility of drawing markers on images very easily. This task can be automated, for example by plotting markers from a given catalog at specific positions, and so on. Note that there are many other options for customize your markers/drawings over an output of ConvertType, see @ref{Drawing with vector graphics} and @ref{Marking objects for publication}. Congratulations! By following the tutorial up to this point, we have been able to reproduce three images of Infante-Sainz et al. @url{https://arxiv.org/abs/2401.03814,2024}. You can see the commands that were used to generate them within the reproducible source of that paper at @url{https://codeberg.org/gnuastro/papers/src/branch/color-faint-gray}. Remember that this paper is exactly reproducible with Maneage, so you can explore and build the entire paper by yourself. For more on Maneage, see Akhlaghi et al. @url{https://ui.adsabs.harvard.edu/abs/2021CSE....23c..82A, 2021}. This tutorial provided a general overview of the various options to construct a color image from three different FITS images using the @command{astscript-color-faint-gray} script. Keep in mind that the optimal parameters for generating the best color image depend on your specific goals and the quality of your input images. We encourage you to follow this tutorial with the provided J-PLUS images and later with your own dataset. See @ref{Color images with gray faint regions} for more information, and please consider citing Infante-Sainz et al. @url{https://arxiv.org/abs/2401.03814,2024} if you use this script in your work (the full Bib@TeX{} entry of this paper will be given to you with the @option{--cite} option). @node Zero point of an image, Pointing pattern design, Color images with full dynamic range, Tutorials @section Zero point of an image The ``zero point'' of an image is astronomical jargon for the calibration factor of its pixel values; allowing us to convert the raw pixel values to physical units. It is therefore a critical step during data reduction. For more on the definition and importance of the zero point magnitude, see @ref{Brightness flux magnitude} and @ref{Zero point estimation}. @cindex SDSS In this tutorial, we will use Gnuastro's @command{astscript-zeropoint}, to estimate the zero point of a single exposure image from the @url{https://www.j-plus.es, J-PLUS survey}, while using an @url{http://www.sdss.org, SDSS} image as reference (recall that all SDSS images have been calibrated to have a fixed zero point of 22.5). In this case, both images that we are using were taken with the SDSS @emph{r} filter. See Eskandarlou et al. @url{https://arxiv.org/abs/2312.04263,2023}. @cartouche @cindex Johnson filters @cindex Johnson vs. SDSS filters @cindex SDSS vs. Johnson filters @cindex Filter transmission curve @cindex Transmission curve of filters @cindex SVO database (filter transmission curve) @noindent @strong{Same filters and SVO filter database:} It is very important that both your images are taken with the same filter. When looking at filter names, don't forget that different filter systems sometimes have the same names for one filter, such as the name ``R''; which is used in both the Johnson and SDSS filter systems. Hence if you confront an image in the ``R'' or ``r'' filter, double check to see exactly which filter system it corresponds to. If you know which observatory your data came from, you can use the @url{http://svo2.cab.inta-csic.es/theory/fps, SVO database} to confirm the similarity of the transmission curves of the filters of your input and reference images. SVO contains the filter data for many of the observatories world-wide. @end cartouche @menu * Zero point tutorial with reference image:: Using a reference image. * Zero point tutorial with reference catalog:: Using a reference catalog. @end menu @node Zero point tutorial with reference image, Zero point tutorial with reference catalog, Zero point of an image, Zero point of an image @subsection Zero point tutorial with reference image First, let’s create a directory named @file{tutorial-zeropoint} to keep things clean and work in that. Then, with the commands below, you can download an image from J-PLUS and SDSS. To speed up the analysis, the image is cropped to have a smaller region around its center. @example $ mkdir tutorial-zeropoint $ cd tutorial-zeropoint $ jplusdr2=http://archive.cefca.es/catalogues/vo/siap/jplus-dr2/reduced $ wget $jplusdr2/get_fits?id=771463 -O jplus.fits.fz $ astcrop jplus.fits.fz --center=107.7263,40.1754 \ --width=0.6 --output=jplus-crop.fits @end example Although we cropped the J-PLUS image, it is still very large in comparison with the SDSS image (the J-PLUS field of view is almost @mymath{1.5\times1.5} deg@mymath{^2}, while the field of view of SDSS in each filter is almost @mymath{0.3\times0.5} deg@mymath{^2}). Therefore, let's download two SDSS images (and then decompress them) in the region of the cropped J-PLUS image to have a more accurate result compared to a single SDSS footprint: generally, your zero point estimation will have less scatter with more overlap between your reference image(s) and your input image. @example $ sdssbase=https://dr12.sdss.org/sas/dr12/boss/photoObj/frames $ wget $sdssbase/301/6509/5/frame-r-006509-5-0115.fits.bz2 \ -O sdss1.fits.bz2 $ wget $sdssbase/301/6573/5/frame-r-006573-5-0174.fits.bz2 \ -O sdss2.fits.bz2 $ bunzip2 sdss1.fits.bz2 $ bunzip2 sdss2.fits.bz2 @end example To have a feeling of the data, let's open the three images with @command{astscript-fits-view} using the command below. Wait a few seconds to see the three images ``blinking'' one after another. The largest one is the J-PLUS crop and the two smaller ones that partially cover it in different regions are from SDSS. @example $ astscript-fits-view sdss1.fits sdss2.fits jplus-crop.fits \ --ds9extra="-lock frame wcs -single -zoom to fit -blink yes" @end example The test above showed that the three images are already astrometrically calibrated (the coverage of the pixel positions on the sky is correct in both). To confirm, you can zoom-in to a certain object and confirm it on a pixel level. It is always good to do the visual check above when you are confronted with new images (and may not be confident about the accuracy of the astrometry). Do not forget that the goal here is to find the calibration of pixel values; and that we assume pixel positions are already calibrated (the image already has a good astrometry). The SDSS images are Sky subtracted, while this single-exposure J-PLUS image still contains the counts related to the Sky emission within them. In the J-PLUS survey, the sky-level in each pixel is kept in a separate @code{BACKGROUND_MODEL} HDU of @file{jplus.fits.fz}; this allows you to use a different sky if you like. The SDSS image FITS files also have multiple extensions. To understand our inputs, let's have a fast look at the basic info of each: @example $ astfits sdss1.fits Fits (GNU Astronomy Utilities) @value{VERSION} Run on Fri Apr 14 11:24:03 2023 ----- HDU (extension) information: 'sdss1.fits'. Column 1: Index (counting from 0, usable with '--hdu'). Column 2: Name ('EXTNAME' in FITS standard, usable with '--hdu'). ('n/a': no name in HDU metadata) Column 3: Image data type or 'table' format (ASCII or binary). Column 4: Size of data in HDU. Column 5: Units of data in HDU (only images). ('n/a': no unit in HDU metadata, or HDU is a table) ----- 0 n/a float32 2048x1489 nanomaggy 1 n/a float32 2048 n/a 2 n/a table_binary 1x3 n/a 3 n/a table_binary 1x31 n/a $ astfits jplus.fits.fz Fits (GNU Astronomy Utilities) @value{VERSION} Run on Fri Apr 14 11:21:30 2023 ----- HDU (extension) information: 'jplus.fits.fz'. Column 1: Index (counting from 0, usable with '--hdu'). Column 2: Name ('EXTNAME' in FITS standard, usable with '--hdu'). ('n/a': no name in HDU metadata) Column 3: Image data type or 'table' format (ASCII or binary). Column 4: Size of data in HDU. Column 5: Units of data in HDU (only images). ('n/a': no unit in HDU metadata, or HDU is a table) ----- 0 n/a no-data 0 n/a 1 IMAGE float32 9216x9232 adu 2 MASKED_PIXELS int16 9216x9232 n/a 3 BACKGROUND_MODEL float32 9216x9232 n/a 4 MASK_MODEL uint8 9216x9232 n/a @end example Therefore, in order to be able to compare the SDSS and J-PLUS images, we should first subtract the sky from the J-PLUS image. To do that, we can either subtract the @code{BACKGROUND_MODEL} HDU from the @code{IMAGE} HDU using @ref{Arithmetic}, or we can use @ref{NoiseChisel} to find a good sky ourselves. As scientists we like to tweak and be creative, so let's estimate it ourselves with the command below. Generally, you may not have a pre-estimated Sky estimation like above, so you should be prepared to subtract the sky yourself. @example $ astnoisechisel jplus-crop.fits --output=jplus-nc.fits $ astscript-fits-view jplus-nc.fits @end example Notice that there is a relatively bright star in the center-bottom of the image. In the ``Cube'' window, click on the ``Next'' button to see the @code{DETECTIONS} HDU. The large footprint of the bright star is obvious. Press the ``Next'' button one more time to get to the @code{SKY} HDU. You see that in the center-bottom, the footprint of the large star is clearly visible in the measured Sky level. This is not good! With Sky values above 54 ADU in the center of the star (the white pixels). This over-subtracted Sky level in part of the image will affect your magnitude measurements and thus the zero point! In @ref{General program usage tutorial}, we have a section on @ref{NoiseChisel optimization for detection}, there is also a full tutorial on this in @ref{Detecting large extended targets}. Therefore, we will not go into the details of NoiseChisel optimization here. Given the large images of J-PLUS, we will increase the tile-size to @mymath{100\times100} pixels and the number of neighbors to identify outlying tiles to 50 (these are usually the first parameters you should start editing when you are confronted with a new image). After the second command, check the @code{SKY} extension to confirm that there is no footprint of any bright object there. You will still see a gradient, but note the minimum and maximum values of the Sky level: their difference is more than 26 times smaller than the noise standard deviation (so statistically speaking, it is pretty flat!) @example $ astnoisechisel jplus-crop.fits --output=jplus-nc.fits \ --tilesize=100,100 --outliernumngb=50 $ astscript-fits-view jplus-nc.fits ## Check that the gradient in the sky is statistically negligible. $ aststatistics jplus-nc.fits -hSKY --minimum --maximum \ | awk '@{print $2-$1@}' 0.32809 $ aststatistics jplus-nc.fits -hSKY_STD --median 8.377977e+00 @end example We are now ready to find the zero point! First, let's run the @command{astscript-zeropoint} with @option{--help} to see the option names (recall that you can see more details of each option in @ref{Invoking astscript-zeropoint}). For the first time, let's use the script in the most simple state possible. We will keep only the essential options: the names of the input and reference images (and their HDUs), the name of the output, and also two apertures with radii of 3 arcsec to start with: @example $ astscript-zeropoint --help $ astscript-zeropoint jplus-nc.fits --hdu=INPUT-NO-SKY \ --refimgs=sdss1.fits,sdss2.fits \ --output=jplus-zeropoint.fits \ --refimgszp=22.5,22.5 \ --refimgshdu=0,0 \ --aperarcsec=3 @end example The output is a FITS table (because generally, you will give more apertures and choose the best one based on a higher-level analysis). Let's check the output's internal structure with Gnuastro's @command{astfits} program. @example $ astfits jplus-zeropoint.fits ----- 0 n/a no-data 0 n/a 1 ZEROPOINTS table_binary 1x3 n/a 2 APER-3 table_binary 321x2 n/a @end example You can see that there are two HDUs in this file. The HDU names give a hint, so let's have a look at each extension with Gnuastro's @command{asttable} program: @example $ asttable jplus-zeropoint.fits --hdu=1 -i -------- jplus-zeropoint.fits (hdu: 1) ------- ----- ---- ------- No.Name Units Type Comment ------- ----- ---- ------- 1 APERTURE arcsec float32 n/a 2 ZEROPOINT mag float32 n/a 3 ZPSTD mag float32 n/a -------- Number of rows: 1 -------- @end example @noindent As you can see, in the first extension, for each of the apertures you requested (@code{APERTURE}), there is a zero point (@code{ZEROPOINT}) and the standard deviation of the measurements on the apertures (@code{ZPSTD}). In this case, we only requested one aperture, so it only has one row. Now, let's have a look at the next extension: @example $ asttable jplus-zeropoint.fits --hdu=2 -i -------- jplus-zeropoint.fits (hdu: 2) ------- ----- ---- ------- No.Name Units Type Comment ------- ----- ---- ------- 1 MAG-REF f32 float32 Magnitude of reference. 2 MAG-DIFF f32 float32 Magnitude diff with input. -------- Number of rows: 321 -------- @end example It contains a table of measurements for the aperture with the least scatter. In this case, we only gave one aperture, so it is the same. If you give multiple apertures, only the one with least scatter will be present by default. In the @code{MAG-REF} column you see the magnitudes within each aperture on the reference (SDSS) image(s). The @code{MAG-DIFF} column contains the difference of the input (J-PLUS) and reference (SDSS) magnitudes for each aperture (see @ref{Zero point estimation}). The two catalogs, created by the aperture photometry from the SDSS images, are merged into one so that there are more stars to compare. Therefore, no matter how many reference images you provide, there will only be a single table here. If the two SDSS images overlapped, each object in the overlap region would have two rows (one row for the measurement from one SDSS image, and another from the measurement from the other). Now that we have obtained the zero point of the J-PLUS image, let's go a little deeper into lower-level details of how this script operates. This will help you better understand what happened and how to interpret and improve the outputs when you are confronted with a new image and strange outputs. To keep intermediate results the @command{astscript-zeropoint} script keeps temporary files in a temporary directory and later deletes it (and all the intermediate products). If you like to check the temporary files of the intermediate steps, you can use @option{--keeptmp} option to not remove them. Let's take a closer look into the contents of each HDU. First, we'll use Gnuastro’s @command{asttable} to see the measured zero point for this aperture. We are using @option{-Y} to have human-friendly (non-scientific!) numbers (which are sufficient here) and @option{-O} to also show the metadata of each column at the start. @example $ asttable jplus-zeropoint.fits -Y -O # Column 1: APERTURE [arcsec,f32,] Aperture used. # Column 2: ZEROPOINT [mag ,f32,] Zero point (sig-clip median). # Column 3: ZPSTD [mag ,f32,] Zero point Standard deviation. 3.000 26.435 0.057 @end example @noindent Now, let's have a look at the first 10 rows of the second (@code{APER-3}) extension. From the previous check we did above, we see that it contains 321 rows! @example $ asttable jplus-zeropoint.fits -Y -O --hdu=APER-3 --head=10 # Column 1: MAG-REF [f32,f32,] Magnitude of reference. # Column 2: MAG-DIFF [f32,f32,] Magnitude diff with input. 16.461 30.035 16.243 28.209 15.427 26.427 20.064 26.459 17.334 26.425 20.518 26.504 17.100 26.400 16.919 26.428 17.654 26.373 15.392 26.429 @end example But the table above is hard to interpret, so let's plot it. To do this, we'll use the same @command{astscript-fits-view} command above that we used for images. It detects if the file has a image or table HDU and will call DS9 or TOPCAT respectively. You can also use any other plotter you like (TOPCAT is not part of Gnuastro), this script just calls it. @example $ astscript-fits-view jplus-zeropoint.fits --hdu=APER-3 @end example After @code{TOPCAT} opens, you can select the ``Graphics'' menu and then ``Plain plot''. This will show a plot with the SDSS (reference image) magnitude on the horizontal axis and the difference of magnitudes between the the input and reference (the zero point) on the vertical axis. In an ideal world, the zero point should be independent of the magnitude of the different stars that were used. Therefore, this plot should be a horizontal line (with some scatter as we go to fainter stars). But as you can see in the plot, in the real world, this expected behavior is seen only for stars with magnitudes about 16 to 19 in the reference SDSS images. The stars that are brighter than 16 are saturated in one (or both) surveys@footnote{To learn more about saturated pixels and recognition of the saturated level of the image, please see @ref{Saturated pixels and Segment's clumps}}. Therefore, they do not have the correct magnitude or mag-diff. You can check some of these stars visually by using the blinking command above and zooming into some of the brighter stars in the SDSS images. @cindex Depth of data On the other hand, it is natural that we cannot measure accurate magnitudes for the fainter stars because the noise level (or ``depth'') of each image is limited. As a result, the horizontal line becomes wider (scattered) as we go to the right (fainter magnitudes on the horizontal axis). So, let's limit the range of used magnitudes from the SDSS catalog to calculate a more accurate zero point for the J-PLUS image. For this reason, we have the @option{--magnituderange} option in @command{astscript-zeropoint}. @cartouche @noindent @strong{Necessity of sky subtraction:} To obtain this horizontal line, it is very important that both your images have been sky subtracted. Please, repeat the last @command{astscript-zeropoint} command above only by changing the input file to @file{jplus-crop.fits}. Then use Gnuastro’s @command{astscript-fits-view} again to draw a plot with @code{TOPCAT} (also same as above). Instead of a horizontal line, you will see @emph{a sloped line} in the magnitude range above! This happens because the sky level acts as a source of constant signal in all apertures, so the magnitude difference will not be independent of the star's magnitude, but dependent on it (the measurement on a fainter star will be dominated by the sky level). @strong{Remember:} if you see a sloped line instead of a horizontal line, the input or reference image(s) are not sky subtracted. @end cartouche Another key parameter of this script is the aperture size (@option{--aperarcsec}) for the aperture photometry of images. On one hand, if the selected aperture is too small, you will be at the mercy of the differing PSFs between your input and reference image(s): part of the light of the star will be lost in the image with the worse PSF. On the other hand, with large aperture size, the light of neighboring objects (stars/galaxies) can affect the photometry. We should select an aperture radius of the same order than the one used in the reference image, typically 2 to 3 times the PSF FWHM of the images. For now, let's assume the values 2, 3, 4, 5, and 6 arcsec for the aperture sizes parameter. The script will compare the result for several aperture sizes and choose the one with least standard deviation value, @code{ZPSTD} column of the @code{ZEROPOINTS} HDU. Let's re-run the script with the following changes: @itemize @item Using @option{--magnituderange} to limit the stars used for estimating the zero point. @item Giving more values for aperture size to find the best for these two images as explained above. @item Call @option{--keepzpap} option to keep the result of matching the catalogs done with the selected apertures in the different extensions of the output file. @end itemize @example $ astscript-zeropoint jplus-nc.fits --hdu=INPUT-NO-SKY \ --refimgs=sdss1.fits,sdss2.fits \ --output=jplus-zeropoint.fits \ --refimgszp=22.5,22.5 \ --aperarcsec=2,3,4,5,6 \ --magnituderange=16,18 \ --refimgshdu=0,0 \ --keepzpap @end example Now, check number of HDU extensions by @command{astfits}. @example $ astfits jplus-zeropoint.fits ----- 0 n/a no-data 0 n/a 1 ZEROPOINTS table_binary 5x3 n/a 2 APER-2 table_binary 319x2 n/a 3 APER-3 table_binary 321x2 n/a 4 APER-4 table_binary 323x2 n/a 5 APER-5 table_binary 323x2 n/a 6 APER-6 table_binary 325x2 n/a @end example You can see that the output file now has a separate HDU for each aperture (thanks to @option{--keepzpap}.) The @code{ZEROPOINTS} hdu contains the final zero point values for each aperture and their error. The best zero point value belongs to the aperture that has the least scatter (has the lowest standard deviation). The rest of extensions contain the zero point value computed within each aperture (as discussed above). Let's check the different tables by plotting all magnitude tables at the same time with @code{TOPCAT}. @example $ astscript-fits-view jplus-zeropoint.fits @end example @noindent After @code{TOPCAT} has opened take the following steps: @enumerate @item From the ``Graphics'' menu, select ``Plain plot''. You will see the last HDU's scatter plot open in a new window (for @code{APER-6}, with red points). The Bottom-left panel has the logo of a red-blue scatter plot that has written @code{6:jplus-zeropoint.fits} in front of it (showing that this is the 6th HDU of this file). In the bottom-right panel, you see the names of the columns that are being displayed. @item In the ``Layers'' menu, Click on ``Add Position Control''. On the bottom-left panel, you will notice that a new blue-red scatter plot has appeared but it just says @code{<no table>}. In the bottom-right panel, in front of ``Table:'', select any other extension. This will plot the same two columns of that extension as blue points. Zoom-in to the region of the horizontal line to see/compare the different scatters. Change the HDU given to ``Table:'' and see the distribution of zero points for the different apertures. @end enumerate The manual/visual operation above is critical if this is your first time with a new dataset (it shows all kinds of systematic biases (like the Sky issue above)! But once you know your data has no systematic biases, choosing between the different apertures is not easy visually! Let's have a look at the table the @code{ZEROPOINTS} HDU (we don't need to explicitly call this HDU since it is the first one): @example $ asttable jplus-zeropoint.fits -O -Y # Column 1: APERTURE [arcsec,f32,] Aperture used. # Column 2: ZEROPOINT [mag ,f32,] Zero point (sig-clip median). # Column 3: ZPSTD [mag ,f32,] Zero point Standard deviation. 2.000 26.405 0.028 3.000 26.436 0.030 4.000 26.448 0.035 5.000 26.458 0.042 6.000 26.466 0.056 @end example The most accurate zero point is the one where @code{ZPSTD} is the smallest. In this case, minimum of @code{ZPSTD} is with radii of 2 and 3 arcseconds. Run the @command{astscript-fits-view} command above again to open TOPCAT. Let's focus on the magnitude plots in these two apertures and determine a more accurate range of magnitude. The more reliable option is the range between 16.4 (where we have no saturated stars) and 18.5 mag (fainter than this, the scatter becomes too strong). Finally, let's set some more apertures between 2 and 3 arcseconds radius: @example $ astscript-zeropoint jplus-nc.fits --hdu=INPUT-NO-SKY \ --refimgs=sdss1.fits,sdss2.fits \ --output=jplus-zeropoint.fits \ --magnituderange=16.4,18.5 \ --refimgszp=22.5,22.5 \ --aperarcsec=2,2.5,3,3.5,4 \ --refimgshdu=0,0 \ --keepzpap $ asttable jplus-zeropoint.fits -Y 2.000 26.405 0.037 2.500 26.425 0.033 3.000 26.436 0.034 3.500 26.442 0.039 4.000 26.449 0.044 @end example The aperture with the least scatter is therefore the 2.5 arcsec radius aperture, giving a zero point of 26.425 magnitudes for this image. However, you can see that the scatter for the 3 arcsec aperture is also acceptable. Actually, the @code{ZPSTD} for of the 2.5 and 3 arcsec apertures only have a difference of @mymath{3\%} (@mymath{= (0.034−0.0333)/0.033\times100}). So simply choosing the minimum is just a first-order approximation (which is accurate within @mymath{26.436−26.425=0.011} magnitudes) Note that in aperture photometry, the PSF plays an important role (because the aperture is fixed but the two images can have very different PSFs). The aperture with the least scatter should also account for the differing PSFs. Overall, please, always check the different and intermediate steps to make sure the parameters are the good so the estimation of the zero point is correct. If you are happy with the minimum, you don't have to search for the minimum aperture or its corresponding zero point yourself. This script has written it in @code{ZPVALUE} keyword of the table. With the first command, we also see the name of the file also, (you can use this on many files for example). With the second command, we are only printing the number by adding the @option{-q} (or @option{--quiet}) option (this is useful in a script where you want to write the value in a shell variable to use later). @example $ astfits jplus-zeropoint.fits --keyvalue=ZPVALUE jplus-zeropoint.fits 2.642512e+01 $ astfits jplus-zeropoint.fits --keyvalue=ZPVALUE -q 2.642512e+01 @end example Generally, this script will write the following FITS keywords (all starting with @code{ZP}) for your future reference in its output: @example $ astfits jplus-zeropoint.fits -h1 | grep ^ZP ZPAPER = 2.5 / Best aperture. ZPVALUE = 26.42512 / Best zero point. ZPSTD = 0.03276644 / Best std. dev. of zeropoint. ZPMAGMIN= 16.4 / Min mag for obtaining zeropoint. ZPMAGMAX= 18.5 / Max mag for obtaining zeropoint. @end example Using the @option{--keyvalue} option of the @ref{Fits} program, you can easily get multiple of the values in one run (where necessary): @example $ astfits jplus-zeropoint.fits --hdu=1 --quiet \ --keyvalue=ZPAPER,ZPVALUE,ZPSTD 2.500000e+00 2.642512e+01 3.276644e-02 @end example @node Zero point tutorial with reference catalog, , Zero point tutorial with reference image, Zero point of an image @subsection Zero point tutorial with reference catalog In @ref{Zero point tutorial with reference image}, we explained how to use the @command{astscript-zeropoint} for estimating the zero point of one image based on a reference image. Sometimes there is not a reference image and we need to use a reference catalog. Fortunately, @command{astscript-zeropoint} can also use the catalog instead of the image to find the zero point. To show this, let's download a catalog of SDSS in the area that overlaps with the cropped J-PLUS image (used in the previous section). For more on Gnuastro's Query program, please see @ref{Query}. The columns of ID, RA, Dec and magnitude in the SDSS @emph{r} filter are called by their name in the SDSS catalog. @example $ astquery vizier \ --dataset=sdss12 \ --overlapwith=jplus-crop.fits \ --column=objID,RA_ICRS,DE_ICRS,rmag \ --output=sdss-catalog.fits @end example To visualize the position of the SDSS objects over the J-PLUS image, let's use @command{astscript-ds9-region} (for more details please see @ref{SAO DS9 region files from table}) with the command below (it will automatically open DS9 and load the regions it created): @example $ astscript-ds9-region sdss-catalog.fits \ --column=RA_ICRS,DE_ICRS \ --color=red --width=3 --output=sdss.reg \ --command="ds9 jplus-nc.fits[INPUT-NO-SKY] \ -scale zscale" @end example Now, we are ready to estimate the zero point of the J-PLUS image based on the SDSS catalog. To download the input image and understand how to use the @command{astscript-zeropoint}, please see @ref{Zero point tutorial with reference image}. Many of the options (like the aperture size) and magnitude range are the same so we will not discuss them further. You will notice that the only substantive difference of the command below with the last command in the previous section is that we are using @option{--refcat} instead of @option{--refimgs}. There are also some cosmetic differences for example a new output name, not using @option{--refimgszp} since it is only necessary for images) and the @option{--*column} options which are used to identify the names of the necessary columns of the input catalog: @example $ astscript-zeropoint jplus-nc.fits --hdu=INPUT-NO-SKY \ --refcat=sdss-catalog.fits \ --refcatmag=rmag \ --refcatra=RA_ICRS \ --refcatdec=DE_ICRS \ --output=jplus-zeropoint-cat.fits \ --magnituderange=16.4,18.5 \ --aperarcsec=2,2.5,3,3.5,4 \ --keepzpap @end example @noindent Let's inspect the output with the command below. @example $ asttable jplus-zeropoint-cat.fits -Y 2.000 26.337 0.034 2.500 26.386 0.036 3.000 26.417 0.041 3.500 26.439 0.043 4.000 26.455 0.050 @end example As you see, the values and standard deviations are very similar to the results we got previously in @ref{Zero point tutorial with reference image}. The Standard deviations are generally a little higher here because we didn't do the photometry ourselves, but they are statistically similar. Before we finish, let's open the two outputs (from a reference image and reference catalog) with the command below. To confirm how they compare, we are showing the result for @code{APER-3} extension in both (following the TOPCAT plotting recipe in @ref{Zero point tutorial with reference image}). @example $ astscript-fits-view jplus-zeropoint.fits jplus-zeropoint-cat.fits \ -hAPER-3 @end example @node Pointing pattern design, Moire pattern in stacking and its correction, Zero point of an image, Tutorials @section Pointing pattern design @cindex Dithering @cindex Pointings @cindex Observing strategy @cindex Offset (in observing strategy) A dataset that is ready for scientific analysis is usually composed of many separate exposures and how they are taken is usually known as ``observing strategy''. This tutorial describes Gnuastro's tools to simplify the process of deciding the pointing pattern of your observing strategy. A ``pointing'' is the location on the sky that each exposure is aimed at. Each exposure's pointing is usually moved (on the sky) compared to the previous exposure. This is done for reasons like improving calibration, increasing resolution, expending the area of the observation and etc. Therefore, deciding a suitable pointing pattern is one of the most important steps when planning your observation strategy. There are commonly two types of pointings: ``dither'' and ``offset''. These are sometimes used interchangeably with ``pointing'' (especially when the final stack is roughly the same area as the field of view. Alternatively, ``dither'' and ``offset'' are used to distinguish pointings with large or small (on the scale of the field of view) movement compared to a previous one. When a pointing has a large distance to the previous pointing, it is known as an ``offset'', while pointings with a small displacement are known as a ``dither''. This distinction originates from the mechanics and optics of most modern telescopes: the overhead (for example the need to re-focus the camera) to make small movements is usually less than large movements. In this tutorial, let's simulate a hypothetical pointing pattern using Gnuastro's @command{astscript-pointing-simulate} installed script (see @ref{Pointing pattern simulation}). Since we will be testing very different displacements between pointings, we'll ignore the difference between offset and dither here, and only use the term pointing. Let's assume you want to observe @url{https://en.wikipedia.org/wiki/Messier_94, M94} in the H-alpha and rSDSS filters (to study the extended star formation in the outer rings of this beautiful galaxy!). Including the outer parts of the rings, the galaxy is half a degree in diameter! This is very large, and you want to design a pointing pattern that will allow you to cover as much area, while not loosing your ability to calibrate properly. @cartouche @noindent @strong{Do not start with this tutorial:} If you are new to Gnuastro and have not already completed @ref{General program usage tutorial}, we recommend going through that tutorial before starting this one. Basic features like access to this book on the command-line, the configuration files of Gnuastro's programs, benefiting from the modular nature of the programs, viewing multi-extension FITS files, and many others are discussed in more detail there. @end cartouche @menu * Preparing input and generating exposure map:: Download and image and build exposure map. * Area of non-blank pixels on sky:: Account for the curved area on the sky. * Script with pointing simulation steps so far:: Summary of steps for easy testing. * Larger steps sizes for better calibration:: The initial small dither is not enough. * Pointings that account for sky curvature:: Sky curvature will cause problems! * Accounting for non-exposed pixels:: Parts of the detector do not get exposed to light. @end menu @node Preparing input and generating exposure map, Area of non-blank pixels on sky, Pointing pattern design, Pointing pattern design @subsection Preparing input and generating exposure map As mentioned in @ref{Pointing pattern design}, the assumed goal here is to plan an observations strategy for M94. Let's assume that after some searching, you decide to write a proposal for the @url{https://oaj.cefca.es/telescopes/jast80, JAST80 telescope} at the @url{https://oaj.cefca.es, Observatorio Astrofísico de Javalambre}, OAJ@footnote{For full disclosure, Gnuastro is being developed at CEFCA (Centro de Estudios de F@'isica del Cosmos de Arag@'on); which also hosts OAJ.}, in Teruel (Spain). The field of view of this telescope's camera is almost 1.4 degrees wide, nicely fitting M94! It also has these two filters that you need@footnote{For the full list of available filters, see the @url{https://oaj.cefca.es/telescopes/t80cam, T80Cam description}.}. Before we start, as described in @ref{Pointing pattern simulation}, it is just important to remember that the ideal pointing pattern depends primarily on your scientific objective, as well as the limitations of the instrument you are observing with. Therefore, there is no single pointing pattern for all purposes. However, the tools, methods, criteria or logic to check if your pointing pattern satisfies your scientific requirement are similar. Therefore, you can use the same methods, tools or logic here to simulate or verify that your pointing pattern will produce the products you expect after the observation. To start simulating a pointing pattern for a certain telescope, you just need a single-exposure image of that telescope with WCS information. In other words, after astrometry, but before warping into any other pixel grid (to combine into a deeper stack). The image will give us the default number of the camera's pixels, its pixel scale (width of pixel in arcseconds) and the camera distortion. These are reference parameters that are independent of the position of the image on the sky. Because the actual position of the reference image is irrelevant, let's assume that in a previous project, presumably on @url{https://en.wikipedia.org/wiki/NGC_4395, NGC 4395}, you already had the download command of the following single exposure image. With the last command, please take a look at this image before continuing and explore it. @example $ mkdir pointing-tutorial $ cd pointing-tutorial $ mkdir input $ siapurl=https://archive.cefca.es/catalogues/vo/siap $ wget $siapurl/jplus-dr3/reduced/get_fits?id=1050345 \ -O input/jplus-1050345.fits.fz $ astscript-fits-view input/jplus-1050345.fits.fz @end example @cartouche @noindent @strong{This is the first time I am using an instrument:} In case you haven't already used images from your desired instrument (to use as reference), you can find such images from their public archives; or contacting them. A single exposure images is rarely of any scientific value (post-processing and stacking is necessary to make high-level and science-ready products). Therefore, they become publicly available very soon after the observation date; furthermore, calibration images are usually public immediately. @end cartouche As you see from the image above, the T80Cam images are large (9216 by 9232 pixels). Therefore, to speed up the pointing testing, let's down-sample the image by a factor of 10. This step is optional and you can safely use the full resolution, which will give you a more precise stack. But it will be much slower (maybe good after you have an almost final solution on the down-sampled image). We will call the output @file{ref.fits} (since it is the ``reference'' for our test). We are putting these two ``input'' files (to the script) in a dedicated directory to keep the running directory clean (and be able to easily delete temporary/test files for a fresh start with a `@command{rm *.fits}'). @example $ astwarp input/jplus-1050345.fits.fz --scale=1/10 -oinput/ref.fits @end example For a first trial, let's create a cross-shaped pointing pattern with 5 points around M94, which is centered at its center on the RA and Dec of 192.721250, 41.120556. We'll center one exposure on the center of the galaxy, and include 4 more exposures that are each 1 arc-minute away along the RA and Dec axes. To simplify the actual command later@footnote{Instead of this, later, when you called @command{astscript-pointing-simulate}, you could pass the @option{--racol=1} and @option{--deccol=2} options. But having metadata is always preferred (will avoid many bugs/frustrations in the long-run!).}, let's also include the column names in @file{pointing.txt} through two lines of metadata. Also note that the @file{pointing.txt} file can be made in any manner you like, for example, by writing the coordinates manually on your favorite text editor, or through another programming language or logic, or etc. Here, we are using AWK because it is sufficiently powerful for this job, and it is a very small program that is available on any Unix-based operating system (allowing you to easily run your programs on any computer). @example $ step_arcmin=1 $ center_ra=192.721250 $ center_dec=41.120556 $ echo "# Column 1: RA [deg, f64] Right Ascension" > pointing.txt $ echo "# Column 2: Dec [deg, f64] Declination" >> pointing.txt $ echo $center_ra $center_dec \ | awk '@{s='$step_arcmin'/60; fmt="%-10.6f %-10.6f\n"; \ printf fmt, $1, $2; \ printf fmt, $1+s, $2; \ printf fmt, $1, $2+s; \ printf fmt, $1-s, $2; \ printf fmt, $1, $2-s@}' \ >> pointing.txt @end example With the commands below, let's have a look at the produced file, first as plain-text, then with TOPCAT (which needs conversion to FITS). After TOPCAT is opened, in the ``Graphics'' menu, select ``Plane plot'' to see the five points in a flat RA, Dec plot. @example $ cat pointing.txt # Column 1: RA [deg, f64] Right Ascension # Column 2: Dec [deg, f64] Declination 192.721250 41.120556 192.737917 41.120556 192.721250 41.137223 192.704583 41.120556 192.721250 41.103889 $ asttable pointing.txt -opointing.fits $ astscript-fits-view pointing.fits $ rm pointing.fits @end example We are now ready to generate the exposure map of the pointing pattern above using the reference image that we downloaded before. Let's put the center of our final stack to be on the center of the galaxy, and we'll assume the stack has a size of 2 degrees. With the second command, you can see the exposure map of the final stack. Recall that in this image, each pixel shows the number of input images that went into it. @example $ astscript-pointing-simulate pointing.txt --output=stack.fits \ --img=input/ref.fits --center=$center_ra,$center_dec \ --width=2 $ astscript-fits-view stack.fits @end example You will see that except for a thin boundary, we have a depth of 5 exposures over the area of the single exposure. Let's see what the width of the deepest part of the image is. First, we'll use Arithmetic to set all pixels that contain less than 5 exposures (the outer pixels) to NaN (Not a Number). In the same Arithmetic command, let's trim all the blank rows and columns, so the output only contains the pixels that are exposed 5 times. With the next command, let's view the deep region and with the last command below, let's use the @option{--skycoverage} option of the Fits program to see the coverage of deep part on the sky. @example $ deep_thresh=5 $ astarithmetic stack.fits set-s s s $deep_thresh lt nan where trim \ --output=deep.fits $ astscript-fits-view deep.fits $ astfits deep.fits --skycoverage Input file: deep.fits (hdu: 1) Sky coverage by center and (full) width: Center: 192.72125 41.120556 Width: 1.880835157 1.392461166 Sky coverage by range along dimensions: RA 191.7808324 193.6616676 DEC 40.42058203 41.81304319 @end example @cindex Sky value @cindex Flat field As we see, in declination, the width of this deep field is about 1.4 degrees. Recall that RA is only defined on the equator and actual coverage in RA depends on the declination due to the spherical nature of the sky. This area therefore nicely covers the expected outer parts of M94. On first thought, it may seem that we are now finished, but that is not the case unfortunately! There is a problem: with a step size of 1 arc-minute, the brighter central parts of this large galaxy will always be on very similar pixels; making it hard to calibrate those pixels properly. If you are interested in the low surface brightness parts of this galaxy, it is even worse: the outer parts of the galaxy will always cover similar parts of the detector in all the exposures; and they cover a large area on your image. To be able to accurately calibrate the image (in particular to estimate the flat field pattern and subtract the sky), you do not want this to happen! You want each exposure to cover very different sources of astrophysical signal, so you can accurately calibrate the artifacts created by the instrument or environment (for example flat field) or of natural causes (for example the Sky). For an example of how these calibration issues can ruin low surface brightness science, please see the image of M94 in the @url{https://www.legacysurvey.org/viewer,Legacy Survey interactive viewer}. After it is loaded, at the bottom-left corner of the window, write ``M94'' in the box of ``Jump to object'' and press ENTER. At first, M94 looks good with a black background, but as you increase the ``Brightness'' (by scrolling it to the right and seeing what is under the originally black pixels), you will see the calibration artifacts clearly. @node Area of non-blank pixels on sky, Script with pointing simulation steps so far, Preparing input and generating exposure map, Pointing pattern design @subsection Area of non-blank pixels on sky In @ref{Preparing input and generating exposure map} we generated a pointing pattern with very small steps, showing how this can cause calibration problems. Later (in @ref{Larger steps sizes for better calibration}) using larger steps is discussed. In this section, let's see how we can get an accurate measure of the area that is covered in a certain depth. A first thought would be to simply multiply the widths along RA and Dec reported before: @mymath{1.8808\times1.3924=2.6189} degrees squared. But there are several problems with this: @itemize @item It ignores the fact that RA only has units of degrees on the equator: at different declinations, differences in RA should be converted to degrees. This is discussed further in this tutorial: @ref{Pointings that account for sky curvature}. @item It doesn't take into account the thin rows/columns of blank pixels (NaN) that are on the four edges of the @file{deep.fits} image. @item The differing area of the pixels on the spherical sky in relation to those blank values can result in wrong estimations of the area. @end itemize Let's get a very accurate estimation of the area that will not be affected by the issues above. With the first command below, we'll use the @option{--pixelareaonwcs} option of the Fits program that will return the area of each pixel (in pixel units of degrees squared). After running the second command, please have a look at the produced image. @example $ astfits deep.fits --pixelareaonwcs --output=deep-pix-area.fits $ astfits deep.fits --pixelscale Basic info. for --pixelscale (remove extra info with '--quiet' or '-q') Input: deep.fits (hdu 1) has 2 dimensions. Pixel scale in each FITS dimension: 1: 0.00154403 (deg/pixel) = 5.5585 (arcsec/pixel) 2: 0.00154403 (deg/pixel) = 5.5585 (arcsec/pixel) Pixel area: 2.38402e-06 (deg^2) = 30.8969 (arcsec^2) $ astscript-fits-view deep-pix-area.fits @end example @cindex Gnomonic projection (@code{TAN} in WCS) @cindex @code{TAN} in WCS (Gnomonic projection) You see a donut-like shape in DS9. Move your mouse over the central (white) region of the region and look at the values. You will see that the pixel area (in degrees squared) is exactly the same as we saw in the output of @option{--pixelscale}. As you move your mouse away to other colors, you will notice that the area covered by each pixel (its value in this image) deceases very slightly (in the 5th decimal!). This is the effect of the @url{https://en.wikipedia.org/wiki/Gnomonic_projection, Gnomonic projection}; summarized as @code{TAN} (for ``tangential'') in the FITS WCS standard, the most commonly used in optical astronomical surveys and the default in this script. Having @file{deep-pix-area.fits}, we can now use Arithmetic to set the areas of all the pixels that were NaN in @file{deep.fits} and sum all the values to get an accurate estimate of the area we get from this pointing pattern: @example $ astarithmetic deep-pix-area.fits deep.fits isblank nan where -g1 \ sumvalue --quiet 1.93836806631634e+00 @end example Therefore, the actual area that is covered is less than the simple multiplication above. At these declinations, the dominant cause of this difference is the first point above (that RA needs correction), this will be discussed in more detail later in this tutorial (see @ref{Pointings that account for sky curvature}). Generally, using this method to measure the area of your non-NAN pixels in an image is very easy and robust (automatically takes into account the curvature, coordinate system, projection and blank pixels of the image). @node Script with pointing simulation steps so far, Larger steps sizes for better calibration, Area of non-blank pixels on sky, Pointing pattern design @subsection Script with pointing simulation steps so far In @ref{Preparing input and generating exposure map} and @ref{Area of non-blank pixels on sky}, the basic steps to simulate a pointing pattern's exposure map and measure the final output area on the sky where described in detail. From this point on in the tutorial, we will be experimenting with the shell variables that were set above, but the actual commands will not be changed regularly. If a change is necessary in a command, it is clearly mentioned in the text. Therefore, it is better to write the steps above (after downloading the reference image) as a script. In this way, you can simply change those variables and see the final result fast by running your script. For more on writing scripts, see as described in @ref{Writing scripts to automate the steps}. Here is a summary of some points to remember when transferring the code in the sections before into a script: @itemize @item Where the commands are edited/changed, please also update them in your script. @item Keep all the variables at the top, even if they are used later. This allows to easily view or changed them without digging into the script. @item You do not need to include visual check commands like the @code{astscript-fits-view} or @code{cat} commands above. Those can be run interactively after your script is finished; recall that a script is for batch (non-interactive) processing. @item Put all your intermediate products inside a ``build'' directory. @end itemize Here is the script that summarizes the steps in @ref{Preparing input and generating exposure map} (after download) and @ref{Area of non-blank pixels on sky}: @verbatim #!/bin/bash # # Copyright (C) 2024-2024 Mohammad Akhlaghi <mohammad@akhlaghi.org> # # Copying and distribution of this file, with or without modification, # are permitted in any medium under the GNU GPL v3+, without royalty # provided the copyright notice and this notice are preserved. This # file is offered as-is, without any warranty. # Parameters of the script deep_thresh=5 step_arcmin=1 center_ra=192.721250 center_dec=41.120556 # Input and build directories (can be anywhere in your file system) indir=input bdir=build # Abort the script in case of an error. set -e # Make the build directory if it doesn't already exist. if ! [ -d $bdir ]; then mkdir $bdir; fi # Build the 5-pointing pointing pattern (with the step size above). pointingcat=$bdir/pointing.txt echo "# Column 1: RA [deg, f64] Right Ascension" > $pointingcat echo "# Column 2: Dec [deg, f64] Declination" >> $pointingcat echo $center_ra $center_dec \ | awk '{s='$step_arcmin'/60; fmt="%-10.6f %-10.6f\n"; \ printf fmt, $1, $2; \ printf fmt, $1+s, $2; \ printf fmt, $1, $2+s; \ printf fmt, $1-s, $2; \ printf fmt, $1, $2-s}' \ >> $pointingcat # Simulate the pointing pattern. stack=$bdir/stack.fits astscript-pointing-simulate $pointingcat --output=$stack \ --img=input/ref.fits --center=$center_ra,$center_dec \ --width=2 # Trim the regions shallower than the threshold. deep=$bdir/deep.fits astarithmetic $stack set-s s s $deep_thresh lt nan where trim \ --output=$deep # Calculate the area of each pixel on the curved celestial sphere: pixarea=$bdir/deep-pix-area.fits astfits $deep --pixelareaonwcs --output=$pixarea # Report the final area (the empty 'echo's are for visual help in outputs) echo; echo echo "Area with step of $step_arcmin arcminutes, at $deep_thresh depth:" astarithmetic $pixarea $deep isblank nan where -g1 \ sumvalue --quiet @end verbatim For a description of how to make it executable and how to run it, see @ref{Writing scripts to automate the steps}. Note that as you start adding your own text to the script, be sure to add your name (and year that you modified) in the copyright notice at the start of the script (this is very important!). @node Larger steps sizes for better calibration, Pointings that account for sky curvature, Script with pointing simulation steps so far, Pointing pattern design @subsection Larger steps sizes for better calibration In @ref{Preparing input and generating exposure map} we saw that a small pointing pattern is not good for the reduction of data from a large object like M94! M94 is about half a degree in diameter; so let's set @code{step_arcmin=15}. This is one quarter of a degree and will put the center of the four exposures on the four corners of the M94's main ring. Furthermore, @ref{Script with pointing simulation steps so far}, the steps were summarized into a script to allow easy changing of variables without manually re-entering the individual/separate commands. After you change @code{step_arcmin=15} and re-run the script, you will get a total area (from counting of per-pixel areas) of approximately 0.96 degrees squared. This is just roughly half the previous area and will barely fit M94! To understand the cause, let's have a look at the full stack (not just the deepest area): @example $ astscript-fits-view build/stack.fits @end example Compared to the first run (with @code{step_arcmin=1}), we clearly see how there are indeed fewer pixels that get photons in all 5 exposures. As the area of the deepest part has decreased, the areas with fewer exposures have also grown. Let's define our deep region to be the pixels with 3 or more exposures. Please set @code{deep_thresh=3} in the script and re-run it. You will see that the ``deep'' area is now almost 2.02 degrees squared! This is (slightly) larger than the first run (with @code{step_arcmin=1})! The difference between 3 exposures and 5 exposures seems a lot at first. But let's calculate how much it actually affects the achieved signal-to-noise ratio and the surface brightness limit. The surface brightness limit (or upper-limit surface brightness) are both calculated by applying the definition of magnitude to the standard deviation of the background. So we should first calculate how much this difference in depth affects the sky standard deviation. For a complete discussion on the definition of the surface brightness limit, see @ref{Quantifying measurement limits}. @cindex Poisson noise Deep images will usually be dominated by @ref{Photon counting noise} (or Poisson noise). Therefore, if a single exposure image has a sky standard deviation of @mymath{\sigma_s}, and we combine @mymath{N} such exposures by taking their mean, the final/stacked sky standard deviation (@mymath{\sigma}) will be @mymath{\sigma=\sigma_s/\sqrt{N}}. As a result, the surface brightness limit between the regions with @mymath{N} exposures and @mymath{M} exposures differs by @mymath{2.5\times log_{10}(\sqrt{N/M}) = 1.25\times log_{10}(N/M)} magnitudes. If we set @mymath{N=3} and @mymath{M=5}, we get a surface brightness magnitude difference of 0.28! This is a very small difference; given all the other sources of error that will be present; but how much it improves the calibration artifacts. Therefore at the cost of decreasing our surface brightness limit by 0.28 magnitudes, we are now able to calibrate the individual exposures much better, and even cover a larger area! The argument above didn't involve any image and was primarily theoretical. For the more visually-inclined readers, let's add raw Gaussian noise (with a @mymath{\sigma} of 100 counts) over each simulated exposure. We will then instruct @command{astscript-pointing-simulate} to stack them as we would stack actual data (by taking the sigma-clipped mean). The command below is identical to the previous call to the pointing simulation script with the following differences. Note that this is just for demonstration, so you should not include this in your script (unless you want to see the noisy stack every time; at double the processing time). @table @option @item --output We are using a different output name, so we can compare the output of the new command with the previous one. @item --stack-operator This should be one of the Arithmetic program's @ref{Stacking operators}. By default the value is @code{sum}; because by default, each pixel of each exposure is given a value of 1. When stacking is defined through the summation operator, we can obtain the exposure map that you have already seen above. But in this run, we are adding noise to each input exposure (through the hook that is described below) and stacking them (as we would stack actual science images). Since the purpose differs here, we are using this option to change the operator. @item --hook-warp-after @cindex Hook (programming) This is the most visible difference of this command the previous one. Through a ``hook'', you can give any arbitrarily long (series of) command(s) that will be added to the processing of this script at a certain location. This particular hook gets applied ``after'' the ``warp''ing phase of each exposure (when the pixels of each exposure are mapped to the final pixel grid; but not yet stacked). Since the script runs in parallel (the actual work-horse is a Makefile!), you can't assume any fixed file name for the input(s) and output. Therefore the inputs to, and output(s) of, hooks are some pre-defined shell variables that you should use in the command(s) that you hook into the processing. They are written in full-caps to be clear and separate from your own variables. In this case, they are the @code{$WARPED} (input file of the hook) and @code{$TARGET} (output name that next steps in the script will operate on). As you see from the command below, through this hook we are calling the Arithmetic program to add noise to all non-zero pixels in the warped image. For more on the noise-adding operators, see @ref{Random number generators}. @end table @example $ center_ra=192.721250 $ center_dec=41.120556 $ astscript-pointing-simulate build/pointing.txt --img=input/ref.fits \ --center=$center_ra,$center_dec \ --width=2 --stack-operator="3 0.2 sigclip-mean" \ --output=build/stack-noised.fits \ --hook-warp-after='astarithmetic $WARPED set-i \ i i 0 uint8 eq nan where \ 100 mknoise-sigma \ --output=$TARGET' $ astscript-fits-view build/stack.fits build/stack-noised.fits @end example When you visually compare the two images of the last command above, you will see that (at least by eye) it is almost impossible to distinguish the differing noise pattern in the regions with 3 exposures from the regions with 5 exposures. But the regions with a single exposure are clearly visible! This is because the surface brightness limit in the single-exposure regions is @mymath{1.25\times\log_{10}(1/5)=-0.87} magnitudes brighter. This almost one magnitude difference in surface brightness is significant and clearly visible in the stacked image (recall that magnitudes are measured in a logarithmic scale). Thanks to the argument above, we can now have a sufficiently large area with a usable depth. However, each the center of each pointing will still contain the central part of the galaxy. In other words, M94 will be present in all the exposures while doing the calibrations. Even in not-too-deep observations, we already see a large ring around this galaxy. When we do a low surface brightness optimized reduction, there is a good chance that the size of the galaxy is much larger than that ring. This very extended structure will make it hard to do the calibrations on very accurate scales. Accurate calibration is necessary if you do not want to loose the faint photons that have been recorded in your exposures. @cartouche @noindent @strong{Calibration is very important:} Better calibration can result in a fainter surface brightness limit than more exposures with poor calibration; especially for very low surface brightness signal that covers a large area and is systematically affected by calibration issues. @end cartouche Ideally, you want your target to be on the four edges/corners of each image. This will make sure that a large fraction of each exposure will not be covered by your final target in each exposure, allowing you to calibrate much more accurately. @node Pointings that account for sky curvature, Accounting for non-exposed pixels, Larger steps sizes for better calibration, Pointing pattern design @subsection Pointings that account for sky curvature In @ref{Larger steps sizes for better calibration}, we saw how a small loss in surface brightness limit can allow better calibration and even a larger area. Let's extend this by setting @code{step_arcmin=40} (almost half the width of the detector) inside your script (see @ref{Script with pointing simulation steps so far}). After running the script with this change, take a look at @file{build/deep.fits}: @example $ astscript-fits-view build/deep.fits --ds9scale=minmax @end example You will see that the region with 5 exposure depth is a horizontally elongated rectangle now! Also, the vertical component of the cross with four exposures is much thicker than the horizontal component! Where does this asymmetry come from? All the steps in our pointing strategy had the same (fixed) size of 40 arc minutes. This happens because the same change in RA and Dec (defined on the curvature of a sphere) will result in different absolute changes on the equator. To visually see this, let's look at the pointing positions in TOPCAT: @example $ cat build/pointing.txt # Column 1: RA [deg, f64] Right Ascension # Column 2: Dec [deg, f64] Declination 192.721250 41.120556 193.387917 41.120556 192.721250 41.787223 192.054583 41.120556 192.721250 40.453889 $ asttable build/pointing.txt -obuild/pointing.fits $ astscript-fits-view build/pointing.fits @end example After TOPCAT opens, under the ``graphics'' window, select ``Plane Plot''. In the newly opened window, click on the ``Axes'' item on the bottom-left list of items. Then activate the ``Aspect lock'' box so the vertical and horizontal axes have the same scaling. You will see what you expect from the numbers: we have a beautifully symmetric set of 5 points shaped like a `+' sign. Keep the previous window, and let's go back to the original TOPCAT window. In the first TOPCAT window, click on ``Graphics'' again, but this time, select ``Sky plot''. You will notice that the vertical component of the cross is now longer than the horizontal component! If you zoom-out (by scrolling your mouse over the plot) a lot, you will see that this is actually on the spherical surface of the sky! In other words, as you see here, on the sky, the horizontal points are closer to each other than the vertical points; causing a larger overlap between them, making the vertical overlap thicker in @file{build/pointing.fits}. @cindex Declination @cindex Right Ascension @cindex Celestial sphere On the celestial sphere, only the declination is measured in degrees. In other words, the difference in declination of two points can be calculated only with their declination. However, except for points that are on the equator, differences in right ascension depend on the declination. Therefore, the origin of this problem is that we done the additions and subtractions for defining the pointing points in a flat space: based on the step size in arc minutes that was applied similarly on RA and Dec (in @ref{Preparing input and generating exposure map}). To fix this problem, we need to convert our points from the flat RA/Dec into the spherical RA/Dec. In the FITS standard, we have the ``World Coordinate System'' (WCS) that defines this type of conversion, using pre-defined projections in the @code{CTYPEi} keyword (short for for ``Coordinate TYPE in dimension i''). Let's have a look at the stack to see the default projection of our final stack: @verbatim $ astfits build/stack.fits -h1 | grep CTYPE CTYPE1 = 'RA---TAN' / Right ascension, gnomonic projection CTYPE2 = 'DEC--TAN' / Declination, gnomonic projection @end verbatim We therefore see that the default projection of our final stack is the @code{TAN} (short for ``tangential'') projection, which is more formally known as the @url{https://en.wikipedia.org/wiki/Gnomonic_projection, Gnomonic projection}. This is the most commonly used projection in optical astronomy. Now that we know the final projection, we can do this conversion using Table's column arithmetic operator @option{eq-j2000-from-flat} like below: @verbatim $ pointingcat=build/pointing.txt $ pointingonsky=build/pointing-on-sky.fits $ asttable $pointingcat --output=$pointingonsky \ -c'arith RA set-r \ DEC set-d \ r meanvalue set-ref-r \ d meanvalue set-ref-d \ r d ref-r ref-d TAN eq-j2000-from-flat' \ --colmetadata=1,RA,deg,"Right ascension" \ --colmetadata=2,Dec,deg,"Declination" $ astscript-fits-view build/pointing-on-sky.fits @end verbatim Here is a break-down of the first command above: to do the flat-to-sky conversion, we need a reference point (where the two are equal). We have used the mean RA and mean Dec (through the @code{meanvalue} operator in Arithmetic) as our reference point (which are placed in the @code{ref-r} and @code{red-d} variables. After calling the @option{eq-j2000-from-flat} operator, we have just added metadata to the two columns. To confirm that this operator done the job correctly, after the second command above, repeat the same experiment as before with TOPCAT (where you viewed the pointing positions on a flat and spherical coordinate system). You will see that indeed, on the sphere you have a `+' shape, but on the flat plot, it looks stretched. @cartouche @noindent @strong{Script update 1:} you should now add the @code{pointingonsky} definition and the @code{asttable} command above into the script of @ref{Script with pointing simulation steps so far}. They should be placed before the call to @code{astscript-pointing-simulate}. Also, in the call to @code{astscript-pointing-simulate}, @code{$pointingcat} should be replaced with @code{$pointingonsky} (so it doesn't use the flat RA, Dec pointings). @end cartouche After implementing this change in your script and running it, open @file{deep.fits} and you will see that the widths of both the horizontal and vertical regions are much more similar. The top of the vertical overlap is slightly wider than the bottom, but that is something you can't fix by just pointing (your camera's field of view is fixed on the sky!). It can be correctly by slightly rotating some of the exposures, but that will result in different PSFs from one exposure to another; and this can cause more important problems for your final science. @cartouche @noindent @strong{Plotting the spherical RA and Dec in your papers:} The inverse of the @code{eq-j2000-from-flat} operator above is the @code{eq-j2000-to-flat}. @code{eq-j2000-to-flat} can be used when you want to plot a set points with spherical RA and Dec in a paper. When the minimum and maximum RA and Dec differ by larger than half a degree, you'll clearly see the difference. For more, see the description of these operators in @ref{Column arithmetic}. @end cartouche Try to slightly increase @code{step_arcmin} to make the cross-like region with 4 exposures as thin as possible. For example, set it to @code{step_arcmin=42}. When you open @file{deep.fits}, you will see that the depth across this image is almost contiguous (which is another positive factor!). Try increasing it to 43 arc minutes to see that the central cross will become almost fully NaN in @file{deep.fits} (which is bad!). You will notice that the vertical region of 4 exposure depth is thinner in the bottom than on the top. This is due to the RA/Dec change above, but across the width of the image. We can't therefore change this by just changing the position of the pointings, we need to rotate some of the exposures if we want it to be removed. But rotation is not yet implemented in this script. You can construct any complex pointing pattern (with more than 5 points and in any shape) based on the logic and reasoning above to help extract the most science from the valuable telescope time that you will be getting. Since the output is a FITS file, you can easily download another FITS file of your target, open it with DS9 (and ``lock'' the ``WCS'') with the stack produced by this simulation to make sure that the deep parts correspond to the area of interest for your science case. Factors like the optimal exposure time are also critical for the final result@footnote{The exposure time will determine the Signal-to-noise ration on a single exposure level.}, but is was beyond the scope of this tutorial. One relevant factor however is the effect of vignetting: the pixels on the outer extremes of the field of view that are not exposed to light and should be removed from your final stack. They effect your pointing pattern: by decreasing your total area, they act like a larger spacing between your points, causing similar shallow crosses as you saw when you set @code{step_arcmin} to 43 arc minutes. In @ref{Accounting for non-exposed pixels}, we will show how this can be done within the same test concept that we done here. @node Accounting for non-exposed pixels, , Pointings that account for sky curvature, Pointing pattern design @subsection Accounting for non-exposed pixels @cindex Baffle @cindex Vignetting @cindex Bad pixels At the end of @ref{Pointings that account for sky curvature} we were able to maximize the region of same depth in our stack. But we noticed that issues like strong @url{https://en.wikipedia.org/wiki/Vignetting,vignetting} can create discontinuity in our final stacked data product. In this section, we'll review the steps to account for such effects. Generally, the full area of a detector is not usually used in the final stack. Vignetting is one cause, it can be due to other problems also. For example due to baffles in the optical path (to block stray light), or large regions of bad (unusable or ``dead'') pixels that may be in any place on the detector@footnote{For an example of bad pixels over the detector, see Figures 4 and 6 of @url{https://www.stsci.edu/files/live/sites/www/files/home/hst/instrumentation/wfc3/documentation/instrument-science-reports-isrs/_documents/2019/WFC3-2019-03.pdf, Instrument Science Report WFC3 2019-03} by the Space Telescope Science Institute.}. Without accounting for these pixels that do not receive any light, the deep area we measured in the sections above will be over-estimated. In this sub-section, let's review the necessary additions to account for such artifacts. Therefore, before continuing, please make sure that you have already read and applied the steps of the previous sections (this sub-section builds upon that section). @cindex Hook (programming) Vignetting strongly depends on the optical design of the instrument you are using. It can be a constant number of pixels on all the edges the detector, or it can have a more complex shape. For example on cameras that have multiple detectors on the field of view, in this case, the regions to exclude on each detector can be very different and will not be symmetric! Therefore, within Gnuastro's @command{astscript-pointing-simulate} script there is no parameter for pre-defined vignetting shapes. Instead, you should define a mask that you can apply on each exposure through the provided hook (@option{--hook-warp-before}; recall that we previously used another hook in @ref{Larger steps sizes for better calibration}). Through the mask, you are free to set any vignetted or bad pixel to NaN (thus ignoring them in the stack) and applying it in any way that best suites your instrument and detector. The mask image should be same size as the reference image, but only containing two values: 0 or 1. Pixels in each exposure that have a value of 1 in the mask will be set to NaN before the stacking process and will not contribute to the final stack. Ideally, you can use the master flat field image of the previous reductions to create this mask: any pixel that has a low sensitivity in the master flat (for any reason) can be set to 1, and the rest of the pixels to 0. Let's build a simple mask by assuming that we only have strong vignetting that is affecting the outer 30 arc seconds of the individual exposures. To mask the outer edges of an image we can use Gnuastro's Arithmetic program; and in particular, the @code{indexonly} operator. To learn more about this operator, see @ref{Size and position operators}. But before doing that, we need convert this angular distance to pixels on the detector. In @ref{Pointing pattern design}, we used an undersampled version of the input image, so we should do this conversion on that image: @example $ margin_arcsec=30 $ margin_pix=$(astfits input/ref.fits --pixelscale --quiet \ | awk '@{print int('$margin_arcsec'/($1*3600))@}') $ echo $margin_pix 5 @end example To build the mask, we can now follow the recipe under ``Image: masking margins'' of the @code{index} operator in Arithmetic (for a full description of what this command is doing@footnote{By learning how this command works, you can customize it. For example, to mask different widths along each separate edge: it often happens that the left/right or top/bottom edges are affected differently by vignetting.}, see @ref{Size and position operators}). Finally, in the last command, let's look at the mask image in the ``red'' color map of DS9 (which will shows the thin 1-valued pixels to mask on the border more clearly). @example $ width=$(astfits input/ref.fits --keyvalue=NAXIS1 -q) $ height=$(astfits input/ref.fits --keyvalue=NAXIS2 -q) $ astarithmetic input/ref.fits indexonly set-i \ $width uint16 set-w \ $height uint16 set-h \ $margin_pix uint16 set-m \ i w % uint16 set-X \ i w / uint16 set-Y \ X m lt X w m - gt or \ Y m lt Y h m - gt or \ or --output=build/mask.fits $ astscript-fits-view build/mask.fits --ds9extra="-cmap red" @end example We are now ready to run the main pointing simulate script. With the command below, we will use the @option{--hook-warp-before} to apply this mask on the image of each exposure just before warping. The concept of this hook is very similar to that of @option{--hook-warp-after} in @ref{Pointing pattern design}. As the name suggests, this hook is applied ``before'' the warping. The input to the command given to this hook should be called with @code{$EXPOSURE} and the output should be called with @code{$TOWARP}. With the second command, let's compare the two outputs: @example $ astscript-pointing-simulate build/pointing-on-sky.fits \ --output=build/stack-with-trim.fits --img=input/ref.fits \ --center=$center_ra,$center_dec --width=2 \ --hook-warp-before='astarithmetic $EXPOSURE build/mask.fits \ nan where -g1 -o$TOWARP' $ astscript-fits-view build/stack.fits build/stack-with-trim.fits @end example As expected, due to the smaller area of the detector that is exposed to photons, the regions with 4 exposures have become much thinner and on the bottom, it has been removed. To have contiguous depth in the deeper region, use this new call in your script and decrease the @code{step_arcmin=41}. You can use the same command on a mask that is created in any way and as realistic as possible. More generically, you can use the before and after hooks for any other operation; for example to insert objects from a catalog using @ref{MakeProfiles} as well as adding noise as we did in @ref{Pointing pattern design}. Therefore it is also good to add the mask and its application in your script. This should be pretty easy by now (following @ref{Script with pointing simulation steps so far} and the ``Script update 1'' box of @ref{Pointings that account for sky curvature}). So we will leave this as an exercise. @node Moire pattern in stacking and its correction, Clipping outliers, Pointing pattern design, Tutorials @section Moir@'e pattern in stacking and its correction @cindex Moir@'e pattern or fringes After warping some images with the default mode of Warp (see @ref{Align pixels with WCS considering distortions}) you may notice that the background noise is no longer flat. Some regions will be smoother and some will be sharper; depending on the orientation and distortion of the input/output pixel grids. This is due to the @url{https://en.wikipedia.org/wiki/Moir%C3%A9_pattern, Moir@'e pattern}, which is especially noticeable/significant when two slightly different grids are super-imposed. With the commands below, we'll download a single exposure image from the @url{https://www.j-plus.es,J-PLUS survey} and run Warp (on a @mymath{8\times8} arcmin@mymath{^2} region to speed it up the demos here). Finally, we'll open the image to visually see the artificial Moir@'e pattern on the warped image. @example ## Download the image (73.7 MB containing an 9216x9232 pixel image) $ jplusdr2=http://archive.cefca.es/catalogues/vo/siap/jplus-dr2/reduced $ wget $jplusdr2/get_fits?id=771463 -Ojplus-exp1.fits.fz ## Align a small part of it with the sky coordinates. $ astwarp jplus-exp1.fits.fz --center=107.62920,39.72472 \ --width=8/60 -ojplus-e1.fits ## Open the aligned region with DS9 $ astscript-fits-view jplus-e1.fits @end example In the opened DS9 window, you can see the Moir@'e pattern as wave-like patterns in the noise: some parts of the noise are more smooth and some parts are more sharp. Right in the center of the image is a blob of sharp noise. Warp has the @option{--checkmaxfrac} option for direct inspection of the Moir@'e pattern (described with the other options in @ref{Align pixels with WCS considering distortions}). When run with this option, an extra HDU (called @code{MAX-FRAC}) will be added to the output. The image in this HDU has the same size as the output. However, each output pixel will contain the largest (maximum) fraction of area that it covered over the input pixel grid. So if an output pixel has a value of 0.9, this shows that it covered @mymath{90\%} of an input pixel. Let's run Warp with @option{--checkmaxfrac} and see the output (after DS9 opens, in the ``Cube'' window, flip between the first and second HDUs): @example $ astwarp jplus-exp1.fits.fz --center=107.62920,39.72472 \ --width=8/60 -ojplus-e1.fits --checkmaxfrac $ astscript-fits-view jplus-e1.fits @end example By comparing the first and second HDUs/extensions, you will clearly see that the regions with a sharp noise pattern fall exactly on parts of the @code{MAX-FRAC} extension with values larger than 0.5. In other words, output pixels where one input pixel contributed more than half of the its value. As this fraction increases, the sharpness also increases because a single input pixel's value dominates the value of the output pixel. On the other hand, when this value is small, we see that many input pixels contribute to that output pixel. Since many input pixels contribute to an output pixel, it acts like a convolution, hence that output pixel becomes smoother (see @ref{Spatial domain convolution}). Let's have a look at the distribution of the @code{MAX-FRAC} pixel values: @example $ aststatistics jplus-e1.fits -hMAX-FRAC Statistics (GNU Astronomy Utilities) @value{VERSION} ------- Input: jplus-e1.fits (hdu: MAX-FRAC) ------- Number of elements: 744769 Minimum: 0.250213461 Maximum: 0.9987495374 Mode: 0.5034223567 Mode quantile: 0.3773819498 Median: 0.5520805544 Mean: 0.5693956458 Standard deviation: 0.1554693738 ------- Histogram: | *** | ********** | ***************** | ************************ | ******************************* | ************************************** | ********************************************* | **************************************************** | *********************************************************** | ****************************************************************** |********************************************************************** |---------------------------------------------------------------------- @end example The smallest value is 0.25 (=1/4), showing that 4 input pixels contributed to the output pixels value. While the maximum is almost 1.0, showing that a single input pixel defined the output pixel value. You can also see that the most probable value (the mode) is 0.5, and that the distribution is positively skewed. @cindex Pixel scale @cindex @code{CDELT} This is a well-known problem in astronomical imaging and professional photography. If you only have a single image (that is already taken!), you can undersample the input: set the angular size of the output pixels to be larger than the input. This will decrease the resolution of your image, but will ensure that pixel-mixing will always happen. In the example below we are setting the output pixel scale (which is known as @code{CDELT} in the FITS standard) to @mymath{1/0.5=2} of the input's. In other words each output pixel edge will cover double the input pixel's edge on the sky, and the output's number of pixels in each dimension will be half of the previous output. @example $ cdelt=$(astfits jplus-exp1.fits.fz --pixelscale -q \ | awk '@{print $1@}') $ astwarp jplus-exp1.fits.fz --center=107.62920,39.72472 \ --width=8/60 -ojplus-e1.fits --cdelt=$cdelt/0.5 \ --checkmaxfrac @end example In the first extension, you can hardly see any Moir@'e pattern in the noise. When you go to the next (@code{MAX-FRAC}) extension, you will see that almost all the pixels have a value of 1. Of course, decreasing the resolution by half is a little too drastic. Depending on your image, you may be able to reach a sufficiently good result without such a drastic degrading of the input image. For example, if you want an output pixel scale that is just 1.5 times larger than the input, you can divide the original coordinate-delta (or ``cdelt'') by @mymath{1/1.5=0.6666} and try again. In the @code{MAX-FRAC} extension, you will see that the range of pixel values is now between 0.56 to 1.0 (recall that originally, this was between 0.25 and 1.0). This shows that the pixels are more similarly mixed and in fact, when you look at the actual warped image, you can hardly distinguish any Moir@'e pattern in the noise. @cindex Stacking @cindex Pointing @cindex Coaddition However, deep astronomical data are usually built by several exposures (images), not a single one. Each image is also taken by (slightly) shifting the telescope compared to the previous exposure. This shift is known as ``dithering'' or a ``pointing pattern'', see @ref{Pointing pattern design}. We do this for many reasons (for example tracking errors in the telescope, high background values, removing the effect of bad pixels or those affected by cosmic rays, robust flat pattern measurement, etc.@footnote{E.g., @url{https://www.stsci.edu/hst/instrumentation/wfc3/proposing/dithering-strategies}}). One of those ``etc.'' reasons is to correct the Moir@'e pattern in the final coadded deep image. The Moir@'e pattern is fixed to the grid of the image, slightly shifting the telescope will result in the pattern appearing in different parts of the sky. Therefore when we later stack, or coadd, the separate exposures into a deep image, the Moir@'e pattern will be decreased there. However, dithering has possible drawbacks based on the scientific goal. For example when observing time-variable phenomena where cutting the exposures to several shorter ones is not feasible. If this is not the case for you (for example in galaxy evolution), continue with the rest of this section. Because we have multiple exposures that are slightly (sub-pixel) shifted, we can also increase the spatial resolution of the output. For example, let's set the output coordinate-delta (@option{--cdelt}, or pixel scale) to be 1/2 of the input. In other words, the number of pixels in each dimension of the output is double the first Warp command of this section: @example $ astwarp jplus-exp1.fits.fz --center=107.62920,39.72472 \ --width=8/60 -ojplus-e1.fits --cdelt=$cdelt/2 \ --checkmaxfrac $ aststatistics jplus-e1.fits -hMAX-FRAC --minimum --maximum 6.26360438764095e-02 2.50680270139128e-01 $ astscript-fits-view jplus-e1.fits @end example From the last command, you see that like the previous change in @option{--cdelt}, the range of @code{MAX-FRAC} has decreased. However, when you look at the warped image and the @code{MAX-FRAC} image with the last command, you still visually see the Moir@'e pattern in the noise (although it has significantly decreased compared to the original resolution). It is still present because 2 is an exact multiple of 1. Let's try increasing the resolution (oversampling) by a factor of 1.25 (which isn't an exact multiple of 1): @example $ astwarp jplus-exp1.fits.fz --center=107.62920,39.72472 \ --width=8/60 -ojplus-e1.fits --cdelt=$cdelt/1.25 \ --checkmaxfrac $ astscript-fits-view jplus-e1.fits @end example You don't see any Moir@'e pattern in the noise any more, but when you look at the @code{MAX-FRAC} extension, you see it is very different from the ones you had seen before. In the previous @code{MAX-FRAC} image, you could see large blobs of similar values. But here, you see that the variation is almost on a pixel scale, and the difference between one pixel to the next is not significant. This is why you don't see any Moir@'e pattern in the warped image. In J-PLUS, each part of the sky was observed with a three-point pointing pattern (very small shifts in each pointing). Let's download the other two exposures and warp the same region of the sky to the same pixel grid (using the @option{--gridfile} feature). Then, let's open all three warped images in one DS9 instance: @example $ wget $jplusdr2/get_fits?id=771465 -Ojplus-exp2.fits.fz $ wget $jplusdr2/get_fits?id=771467 -Ojplus-exp3.fits.fz $ astwarp jplus-exp2.fits.fz --gridfile jplus-e1.fits \ -o jplus-e2.fits --checkmaxfrac $ astwarp jplus-exp3.fits.fz --gridfile jplus-e1.fits \ -o jplus-e3.fits --checkmaxfrac $ astscript-fits-view jplus-e*.fits @end example @noindent In the three warped images, you don't see any Moir@'e pattern, so far so good... now, take the following steps: @enumerate @item In the small ``Cube'' window, click the ``Next'' button so you see the @code{MAX-FRAC} extension/HDU. @item Click on the ``Frame'' button (in the top row of buttons just on top of the image), and select the ``Single'' button in the bottom row. @item Open the ``Zoom'' menu (not button), and select ``Zoom 16''. @item Press the @key{TAB} key to flip through each exposure. @item Focus your eyes on the pixels with the largest value (white colored pixels), while pressing @key{TAB} to flip between the exposures. You will see that in each exposure they cover different pixels (nicely getting averaged out after stacking). @end enumerate The exercise above shows that the Moir@'e pattern (that had already decreased significantly) will be further decreased after we stack the images. So let's stack these three images with the commands below. First, we need to remove the sky-level from each image using @ref{NoiseChisel}, then we'll stack the @code{INPUT-NO-SKY} extensions using filled MAD-clipping (to reject outliers, and especially diffuse outliers, robustly, see @ref{Clipping outliers}). @example $ for i in $(seq 3); do \ astnoisechisel jplus-e$i.fits -ojplus-nc$i.fits; \ done $ astarithmetic jplus-nc*.fits 3 5 0.2 sigclip-mean \ -gINPUT-NO-SKY -ojplus-stack.fits $ astscript-fits-view jplus-nc*.fits jplus-stack.fits @end example @noindent After opening the individual exposures and the final stack with the last command, take the following steps to see the comparisons properly: @enumerate @item Click on the stack image so it is selected. @item Go to the ``Frame'' menu, then the ``Lock'' item, then activate ``Scale and Limits''. @item Scroll your mouse or touchpad to zoom into the image. @end enumerate @noindent You clearly see that the stacked image is deeper and that there is no Moir@'e pattern, while you have slightly @emph{improved} the spatial resolution of the output compared to the input. In case you want the stack to have the original pixel resolution, you just need one more warp: @example $ astwarp jplus-stack.fits --cdelt=$cdelt -ojplus-stack-origres.fits @end example For optimal results, the oversampling should be determined by the dithering pattern of the observation: For example if you only have two dither points, you want the pixels with maximum value in the @code{MAX-FRAC} image of one exposure to fall on those with a minimum value in the other exposure. Ideally, many more dither points should be chosen when you are planning your observation (not just for the Moir@'e pattern, but also for all the other reasons mentioned above). Based on the dithering pattern, you want to select the increased resolution such that the maximum @code{MAX-FRAC} values fall on every different pixel of the output grid for each exposure. Note that this discussion is on small shifts between pointings (dithers), not large ones like offsets); see @ref{Pointing pattern design}. @node Clipping outliers, , Moire pattern in stacking and its correction, Tutorials @section Clipping outliers @cindex Outlier @cindex Clipping of outliers Outliers occur often in data sets. For example cosmic rays in astronomical imaging: the image of your target galaxy can be affected by a cosmic ray in one of the five exposures you took in one night. As a result, when you compare the measured magnitude of your target galaxy in all the exposures, you will get measurements like this (all in magnitudes) 19.8, 20.1, 20.5, 17.0, 19.9 (all fluctuating around magnitude 20, except the much brighter 17th magnitude measurement). Normally, you would simply take the mean of these measurements to estimate the magnitude of your target with more precision. However, the 17th magnitude measurement above is clearly wrong and will significantly affect the mean: without it, the mean magnitude is 20.07, but with it, the mean is 19.46: @example $ echo " 19.8 20.1 20.5 17 19.9" \ | tr ' ' '\n' \ | aststatistics --mean 1.94600000000000e+01 $ echo " 19.8 20.1 20.5 19.9" \ | tr ' ' '\n' \ | aststatistics --mean 2.00750000000000e+01 @end example This difference of 0.61 magnitudes (or roughly 1.75 times) is significant (for the definition of magnitudes in astronomy, see @ref{Brightness flux magnitude}). In the simple example above, you can visually identify the ``outlier'' and manually remove it. But in most common situations you will not be so lucky! For example when you want to stack the five images of the five exposures above, and each image has @mymath{4000\times4000} (or 16 million!) pixels and not possible by hand in a reasonable time (an average human's lifetime!). This tutorial reviews the effect of outliers and different available ways to remove them. In particular, we will be looking at stacking of multiple datasets and collapsing one dataset along one of its dimensions. But the concepts and methods are applicable to any analysis that is affected by outliers. @menu * Building inputs and analysis without clipping:: Building a dataset for demonstration below. * Sigma clipping:: Standard deviation (STD) clipping. * MAD clipping:: Median Absolute Deviation (MAD) clipping. * Filled re-clipping:: Two clips with holes filled in the middle. @end menu @node Building inputs and analysis without clipping, Sigma clipping, Clipping outliers, Clipping outliers @subsection Building inputs and analysis without clipping As described in @ref{Clipping outliers}, the goal of this tutorial is to demonstrate the effects of outliers and show how to ``clip'' them from basic statistics measurements. This is best done on an actual dataset (rather than pure theory). In this section we will build nine noisy images with the script below, such that one of the images has a circle in the middle. We will then stack the 9 images into one final image based on different statistical measurements: the mean, median, standard deviation (STD), median absolute deviation (MAD) and number of inputs used in each pixel. We will then analyze the resulting stacks to demonstrate the problem with outliers. Put the script below into a plain-text file (assuming it is called @file{script.sh}), and run it with @command{bash ./script.sh}. For more on writing and good practices in shell scripts, see @ref{Writing scripts to automate the steps}. The last command of the script above calls DS9 to visualize the five output stacked images mentioned above. @verbatim # Constants list="" sigma=10 number=9 radius=30 width=201 bdir=build profsum=3e5 background=10 random_seed=1699270427 # Clipping parameters (will be set later when we start clipping). # clip_multiple: 3 for sigma; 4.48 for MAD # clip_tolerance: 0.1 for sigma; 0.01 for MAD clip_operator="" clip_multiple="" clip_tolerance="" # Stop if there is any error. set -e # If the build directory does not exist, build it. if ! [ -d $bdir ]; then mkdir $bdir; fi # The final image (with largest number) will contain the outlier: # we'll put a flat circle in the center of the image as the outlier # structure. outlier=$bdir/in-$number.fits nn=$bdir/$number-no-noise.fits export GSL_RNG_SEED=$random_seed center=$(echo $width | awk '{print int($1/2)+1}') echo "1 $center $center 5 $radius 0 0 1 $profsum 1" \ | astmkprof --mode=img --mergedsize=$width,$width \ --oversample=1 --output=$nn --mcolissum astarithmetic $nn $background + $sigma mknoise-sigma \ --envseed -o$outlier # Build pure noise and add elements to the list of images to stack. list=$outlier numnoise=$(echo $number | awk '{print $1-1}') for i in $(seq 1 $numnoise); do img="$bdir/in-$i.fits" if ! [ -f $img ]; then export GSL_RNG_SEED=$(echo $random_seed | awk '{print $1+'$i'}') astarithmetic $width $width 2 makenew float32 $background + \ $sigma mknoise-sigma --envseed --output=$img fi list="$list $img" done # Stack the images, for op in mean median std mad number; do if [ x"$clip_operator" = x ]; then out=$bdir/stack-$op.fits astarithmetic $list $number $op -g1 --output=$out else operator=$clip_operator-$op out=$bdir/stack-$operator.fits astarithmetic $list $number $clip_multiple $clip_tolerance \ $operator -g1 --output=$out fi done # Collapse the first and last image along the 2nd dimension. for i in 1 $number; do if [ x"$clip_operator" = x ]; then out=$bdir/collapsed-$i.fits astarithmetic $bdir/in-$i.fits 2 collapse-median counter \ --writeall --output=$out else out=$bdir/collapsed-$clip_operator-$i.fits astarithmetic $bdir/in-$i.fits $clip_multiple $clip_tolerance \ 2 collapse-$clip_operator-median counter \ --writeall --output=$out fi done @end verbatim @noindent After the script finishes, you can see the generated input images with the first command below. The second command shows the stacked images. @example $ astscript-fits-view build/in-*.fits --ds9extra="-lock scalelimits yes" $ astscript-fits-view build/stack-*.fits @end example Color-blind readers may not clearly see the issue in the opened images with this color bar. In this case, please choose the ``color'' menu at the top of the DS9 and select ``gray'' or any other color that makes the circle most visible. The effect of an outlier on the different measurements above can be visually seen (and quantitatively measured) through the visibility of the circle (that was only present in one image, of nine). Let's look at them one by one (from the one that is most affected to the least): @table @file @item std.fits The standard deviation (third image in DS9) is the most strongly affected statistic by an outlier. This is so strong that the edge of the circle is also clearly visible! The standard deviation is calculated by first finding the mean, and estimating the difference of each element from the mean. Those differences are then taken to the power of two and finally the square root is taken (after a division by the number). It is the power-of-two component that amplifies the effect of the single outlier as you see here. @item mean.fits The mean (first image in DS9) is also affected by the outlier in such a way that the circle footprint is clearly visible. This is because the nine images have the same importance in the combination with a simple mean. Therefore, the outlier value pushes the result to higher values and the circle is printed. @item median.fits The median (second image in DS9) is also affected by the outlier; although much less significantly than the standard deviation or mean. At first sight the circle may not be too visible! To see it more clearly, click on the ``Analysis'' menu in DS9 and then the ``smooth'' item. After smoothing, you will see how the single outlier has leaked into the median stack. Intuitively, we would think that since the median is calculated from the middle element after sorting, the outlier goes to the end and won't affect the result. However, this is not the case as we see here: with 9 elements, the ``central'' element is the 5th (counting from 1; after sorting). Since the pixels covered by the circle only have 8 pure noise elements; the ``true'' median should have been the average of the 4th and 5th elements (after sorting). By definition, the 5th element is always larger than the mean of the 4th and 5th (because the 4th element after sorting has a smaller value than the 5th element). Therefore, using the 5th element (after sorting), we are systematically choosing higher noise values in regions that are covered by the circle! With larger datasets, the difference between the central elements will be less. However, the improved precision (in the elements without an outlier) will also be more. A detailed analysis of the effect of a single outlier on the median based on the number of inputs can be done as an exercise; but in general, as this argument shows, the median is not immune to outliers; especially when you care about low signal-to-noise regimes (as we do in astronomy: low surface brightness science). @item mad.fits The median absolute deviation (fourth image in DS9) is affected by outliers in a similar fashion to the median. @item number.fits The number image (last image in DS9) shows the number of images that went into each pixel. Since we haven't rejected any outliers (yet!), all the pixels in this image have a value of 9. @end table The example above included a single outlier. But we are not usually that lucky: there are usually more outliers! For example, the last command in the script above collapsed @file{1.fits} (that was pure noise, without the circle) and @file{9.fits} (with the circle) along their second dimension (the vertical). Collapsing was done by taking the median along all the pixels in the vertical dimension. The output of collapsing has one less dimension; in this case, producing a 1D table (with the same number of rows as the image's horizontal axis). To easily plot the output afterwards, we have also used the @code{counter} operator. With the command below, you can open both tables and compare them: @example $ astscript-fits-view build/collapsed-*.fits @end example The last command opens TOPCAT. In the ``Graphics'' menu, select plane plot and you will see all the values fluctuating around 10 (with a maximum/minimum around @mymath{\pm2}). Afterwards, click on the ``Layers'' menu and click on ``Add position control''. In the opened tab at the bottom (where the scroll bar in front of ``Table'' is empty), select the other table. In the regions that there was no circle in any of the vertical axes, the two match nicely (the noise level is the same). However, you see that the image columns that were partly covered by the outlying circle gradually get more affected as the width of the circle in that column increases (the full diameter of the circle was in the middle of the image). This shows how the median is biased by outliers as their number increases. To see the problem more prominently, use the @code{collapse-mean} operator instead of the median. The reason that the mean is more strongly affected by the outlier is exactly the same as above for the stacking of the input images. In the subsections below, we will describe some of the basic ways to reject the effect of these outliers (and have better stacks or collapses). But the methodology is not limited to these types of data and can be generically applied; unless specified explicitly. @node Sigma clipping, MAD clipping, Building inputs and analysis without clipping, Clipping outliers @subsection Sigma clipping Let's assume that you have pure noise (centered on zero) with a clear @url{https://en.wikipedia.org/wiki/Normal_distribution,Gaussian distribution}, or see @ref{Photon counting noise}. Now let's assume you add very bright objects (signal) on the image which have a very sharp boundary. By a sharp boundary, we mean that there is a clear cutoff (from the noise) at the pixels the objects finish. In other words, at their boundaries, the objects do not fade away into the noise. In optical astronomical imaging, cosmic rays (when they collide at a near normal incidence angle) are a very good example of such outliers. The tracks they leave behind in the image are perfectly immune to the blurring caused by the atmosphere on images of stars or galaxies and they have a very high signal-to-noise ratio. They are also very energetic and so their borders are usually clearly separated from the surrounding noise. See Figure 15 in Akhlaghi and Ichikawa, @url{https://arxiv.org/abs/1505.01664,2015}. In such a case, when you plot the histogram (see @ref{Histogram and Cumulative Frequency Plot}) of the distribution, the pixels relating to those objects will be clearly separate from pixels that belong to parts of the image that did not have any signal (were just noise). In the cumulative frequency plot, after a steady rise (due to the noise), you would observe a long flat region were for a certain range of data (horizontal axis), there is no increase in the index (vertical axis). In the previous section (@ref{Building inputs and analysis without clipping}) we created one such dataset (@file{9.fits}). With the command below, let's have a look at its histogram and cumulative frequency plot (in simple ASCII format; we are decreasing the default number of bins with @option{--numasciibins} to show them easily within the width of the print version of this manual; feel free to change this). @example $ aststatistics build/in-9.fits --asciihist --asciicfp \ --numasciibins=65 ASCII Histogram: Number: 40401 Y: (linear: 0 to 4191) X: (linear: -31.9714 -- 150.323, in 65 bins) | ** | **** | ****** | ****** | ******** | ******** | ********** | ************ | ************** | ****************** ****** |******************************* ************************* |----------------------------------------------------------------- ASCII Cumulative frequency plot: Y: (linear: 0 to 40401) X: (linear: -31.9714 -- 150.323, in 65 bins) | *************** | ********************************************** | *********************************************** | ************************************************* | ************************************************** | *************************************************** | **************************************************** | ***************************************************** | ****************************************************** | ******************************************************** |***************************************************************** |----------------------------------------------------------------- @end example @cindex Cosmic rays Outliers like the example above can significantly bias the measurement of the background noise statistics. For example let's compare the median, mean and standard deviation of the image above with @file{1.fits}: @example $ aststatistics build/in-1.fits --median --mean --std 9.90529778313248e+00 9.96143102101206e+00 1.00137568561776e+01 $ aststatistics build/in-9.fits --median --mean --std 1.09305819367634e+01 1.74470443173776e+01 2.88895986970341e+01 @end example The effect of the outliers is obvious in all three measures: the median has become 1.10 times larger, the mean 1.75 times and the standard deviation about 2.88 times! The differing effect of outliers in different statistics was already discussed in @ref{Building inputs and analysis without clipping}; also see @ref{Quantifying signal in a tile}. @mymath{\sigma}-clipping is one way to remove/clip the effect of such very strong outliers in measures like the above. @mymath{\sigma}-clipping is defined as the very simple iteration below. In each iteration, the range of input data might decrease. When the outliers are as strong as above, the outliers will be removed through this iteration. @enumerate @item Calculate the standard deviation (@mymath{\sigma}) and median (@mymath{m}) of a distribution. The median is used because, as shown above, the mean is too significantly affected by the presence of outliers. @item Remove all points that are smaller or larger than @mymath{m\pm\alpha\sigma}. @item Go back to step 1, unless the selected exit criteria is reached. There are commonly two types of exit criteria (to stop the @mymath{\sigma}-clipping iteration). Within Gnuastro's programs that use sigma-clipping, the exit criteria is the second value to the @option{--sclipparams} option (the first value is the @mymath{\alpha} above): @itemize @item When a certain number of iterations has taken place (exit criteria is an integer, larger than 1). @item When the new measured standard deviation is within a certain tolerance level of the previous iteration (exit criteria is floating point and less than 1.0). The tolerance level is defined by: @dispmath{\sigma_{old}-\sigma_{new} \over \sigma_{new}} In each clipping, the dispersion in the distribution is either less or equal. So @mymath{\sigma_{old}\geq\sigma_{new}}. @end itemize @end enumerate Let's see the algorithm in practice with the @option{--sigmaclip} option of Gnuastro's Statistics program (using the default configuration of @mymath{3\sigma} clipping and tolerance of 0.1): @example $ aststatistics build/in-9.fits --sigmaclip Statistics (GNU Astronomy Utilities) @value{VERSION} ------- Input: build/in-9.fits (hdu: 1) ------- 3-sigma clipping steps until relative change in STD is less than 0.1: round number median STD 1 40401 1.09306e+01 2.88896e+01 2 37660 1.00306e+01 1.07153e+01 3 37539 1.00080e+01 9.93741e+00 ------- Statistics (after clipping): Number of input elements: 40401 Number of clips: 2 Final number of elements: 37539 Median: 1.000803e+01 Mean: 1.001822e+01 Standard deviation: 9.937410e+00 Median Absolute Deviation: 6.772760e+00 @end example After the basic information about the input and settings, the Statistics program has printed the information for each round (iteration) of clipping. Initially, there was 40401 elements (the image is @mymath{201\times201} pixels). After the first round of clipping, only 37660 elements remained and because the difference in standard deviation was larger than the tolerance level, a third clipping was one. But the change in standard deviation after the third clip was smaller than the tolerance level, so the exit criteria was activated and the clipping finished with 37539 elements. In the end, we see that the final median, mean and standard deviation are very similar to the data without any outlier (@file{build/1.fits} in the example above). The example above provided a single statistic from a single dataset. Other scenarios where sigma-clipping becomes necessary are stacking and collapsing (that was the main goal of the script in @ref{Building inputs and analysis without clipping}). To generate @mymath{\sigma}-clipped stacks and collapsed tables, you just need to change the values of the three variables of the script (shown below). After making this change in your favorite text editor, have a look at the outputs: @example $ grep ^clip_ script.sh clip_operator=sigclip # These variables will be used more clip_multiple=3 # effectively with the clipping clip_tolerance=0.1 # operators of the next sections. $ bash ./script.sh $ astscript-fits-view build/stack-std.fits \ build/stack-sigclip-std.fits \ build/stack-*mean.fits \ build/stack-*median.fits \ build/stack-*number.fits \ --ds9extra="-tile grid layout 2 4 -scale minmax" @end example It is clear that the @mymath{\sigma}-clipped results have significantly improved in all four measures (images in the right column in DS9). The reason is clear in the @file{stack-sigclip-number.fits} image (which show how many images were used for each pixel): almost all of the outlying circle has been accounted for (the pixel values are 8, not 9, showing 8 images went into those). It is the leaked holes in the @file{stack-sigclip-number.fits} image (with value of 9) that keep the circle in the final stack of the other measures (at various levels). See @ref{Filled re-clipping} for stacking operators that can account for this. So far, @mymath{\sigma}-clipping has preformed nicely. However, there are important caveats to @mymath{\sigma}-clipping that are listed in the box below and further elaborated (with examples) afterwards. @cartouche @noindent @strong{Caveats of @mymath{\sigma}-clipping}: There are some important caveats to @mymath{\sigma}-clipping: @itemize @item The standard deviation is itself heavily influenced by the presence of outliers. Therefore a sufficiently small number of outliers can expand the standard deviation such that they stay within the boundaries. @item When the outliers do not constitute a clearly distinct distribution like the example here, sigma-clipping will not be able to separate them like here. @end itemize @end cartouche To demonstrate how weaker outliers will not be clipped in sigma clipping, let's decrease the total sum of values in the outlying circle, then re-run the script: @example $ grep ^profsum script.sh profsum=1e5 $ bash ./script.sh @end example Let's have a look at the new outlying circle with the first command below. With the second command, let's view its pixel value histogram (recall that previously, the circle had a clearly separate distribution): @example $ astscript-fits-view build/in-9.fits $ aststatistics build/in-9.fits --asciihist --numasciibins=65 ASCII Histogram: Number: 40401 Y: (linear: 0 to 2654) X: (linear: -31.9714 -- 79.4266, in 65 bins) | ** | ***** | ********* | ********** | ************* | ************** | ***************** | ******************* | *********************** | **************************************** |***************************************************************** |----------------------------------------------------------------- @end example We see that even tough the circle is still clearly visible in the noise, the histogram is not longer separate; it has blended into the noise, and just caused a skewness in the otherwise symmetric noise distribution. Let's try running the @option{--sigmaclip} option as above: @example $ aststatistics build/in-9.fits --sigmaclip Statistics (GNU Astronomy Utilities) @value{VERSION} ------- Input: build/in-9.fits (hdu: 1) ------- 3-sigma clipping steps until relative change in STD is less than 0.1: round number median STD 1 40401 1.09295e+01 1.34784e+01 2 39618 1.06762e+01 1.19852e+01 3 39126 1.05265e+01 1.12983e+01 ------- Statistics (after clipping): Number of input elements: 40401 Number of clips: 2 Final number of elements: 39126 Median: 1.052652e+01 Mean: 1.114819e+01 Standard deviation: 1.129831e+01 Median Absolute Deviation: 7.106166e+00 @end example We see that the median, mean and standard deviation are over estimated (each worse than the previous!). Let's see how the @mymath{\sigma}-clipping stacking on this outlying flat circle: @example $ astscript-fits-view build/stack-std.fits \ build/stack-sigclip-std.fits \ build/stack-*mean.fits \ build/stack-*median.fits \ build/stack-*number.fits \ --ds9extra="-tile grid layout 2 4 -scale minmax" @end example Compared to the previous run (where the outlying circle was brighter), we see that @mymath{\sigma}-clipping is now less successful in removing the outlying circle from the stacks; or in the single value measurements. This is particularly visible in the @file{stack-sigclip-number.fits} image: the circle barely visible any more: there is only a very weak clustering of pixels with a value of 8 over the circle's pixels. This has happened because the outliers have biased the standard deviation itself to a level that includes them with this multiple of the standard deviation. To gauge if @mymath{\sigma}-clipping will be useful for your dataset, look at the histogram (see @ref{Histogram and Cumulative Frequency Plot}). The ASCII histogram that is printed on the command-line with @option{--asciihist} (like above) is good enough in most cases. But you can't do this manually in every case (as in the stacking which involved more than forty thousand pixels)! Clipping outliers should be based on a measure of scatter that is less affected by outliers! Therefore, in Gnuastro we also have median absolute deviation (MAD) clipping which is described in the next section (@ref{MAD clipping}). @node MAD clipping, Filled re-clipping, Sigma clipping, Clipping outliers @subsection MAD clipping @cindex Median absolute deviation (MAD) @cindex MAD (median absolute deviation) When clipping outliers, it is important that the used measure of dispersion is itself not strongly affected by the outliers. Previously (in @ref{Sigma clipping}), we saw that the standard deviation is not a good measure of dispersion because of its strong dependency on outliers. In this section, we'll introduce clipping operators that are based on the @url{https://en.wikipedia.org/wiki/Median_absolute_deviation, median absolute deviation} (MAD). The median absolute deviation is defined as the median of the differences of each element from the median of the elements. As mathematically derived in the Wikipedia page above, for a pure Gaussian distribution, the median absolute deviation will be roughly @mymath{0.67449\sigma}. We can confirm this numerically from the images with pure noise that we created previously in @ref{Building inputs and analysis without clipping}. With the first command below we can see the raw standard deviation and median absolute deviation values and the second command shows their division: @verbatim $ aststatistics build/in-1.fits --std --mad 1.00137568561776e+01 6.74662296703343e+00 $ aststatistics build/in-1.fits --std --mad | awk '{print $2/$1}' 0.673735 @end verbatim The algorithm of MAD-clipping is identical to @mymath{\sigma}-clipping, except that instead of @mymath{\sigma}, it uses the median absolute deviation. Since the median absolute deviation is smaller than the standard deviation by roughly 0.67, if you regularly use @mymath{3\sigma} there, you should use @mymath{(3/0.67)\rm{MAD}=(4.48)\rm{MAD}} when doing MAD-clipping. The usual tolerance should also be changed due to the differing nature of the median absolute deviation (based on sorted differences) in relation to the standard deviation (based on the sum of squared differences). A tolerance of 0.01 is better suited to the termination criteria of MAD-clipping. To demonstrate the steps in practice, let's assume you have the original script in @ref{Building inputs and analysis without clipping} with the changes shown in the first command below. With the second command we'll execute the script, and with the third command we'll do the iterations of MAD-clipping: @verbatim $ grep '^clip_\|^profsum' script.sh profsum=1e5 clip_operator=madclip clip_multiple=4.48 clip_tolerance=0.01 $ bash ./script.sh $ aststatistics build/in-9.fits --madclip Statistics (GNU Astronomy Utilities) 0.21.6-28a1 ------- Input: build/in-9.fits (hdu: 1) ------- 4.48-MAD clipping steps until relative change in MAD (median absolute deviation) is less than 0.01: round number median MAD 1 40401 1.09295e+01 7.38609e+00 2 38789 1.04261e+01 7.03508e+00 3 38549 1.03469e+01 6.97927e+00 ------- Statistics (after clipping): Number of input elements: 40401 Number of clips: 2 Final number of elements: 38549 Median: 1.034690e+01 Mean: 1.068946e+01 Standard deviation: 1.062083e+01 Median Absolute Deviation: 6.979274e+00 @end verbatim We see that the median, mean and standard deviation after MAD-clipping is much better than the basic @mymath{\sigma}-clipping (see @ref{Sigma clipping}): the median is now 10.3 (was 10.5 in @mymath{\sigma}-clipping), mean is 10.7 (was 10.11) and the standard deviation is 10.6 (was 10.12). Let's compare the MAD-clipped stacks with the results of the previous section. Since we want the images shown in a certain order, we'll first construct the list of images (with a @code{for} loop that will fill the @file{imgs} variable). Note that this assumes you have ran and carefully read/understand all the commands in the previous sections (@ref{Building inputs and analysis without clipping} and @ref{Sigma clipping}). Tip: the three @option{--ds9extra} options ensure that the bottom row (showing the number of images used in each pixel) has the same scale and limits in all three columns. @example $ imgs="" $ p=build/stack # 'p' is short for "prefix" $ for m in std mean median mad number; do \ imgs="$imgs $p-$m.fits $p-sigclip-$m.fits $p-madclip-$m.fits"; \ done $ astscript-fits-view $imgs --ds9extra="-tile grid layout 3 5" \ --ds9extra="-scale limits 1 9" \ --ds9extra="-frame move back -scale limits 1 9" \ --ds9extra="-frame move back -scale limits 1 9" @end example The third column shows the newly created MAD-clipped stacks. We see that the outlying circle is much more weaker in the MAD-clipped stacks than in the @mymath{\sigma}-clipped stacks in all measures (except for the ``number'' measure where the circle should be stronger). However, unfortunately even MAD-clipping is not perfect and we still see the circle in all four cases, even with the MAD-clipped median (more clearly: after smoothing/blocking). The reason is similar to what was described in @mymath{\sigma}-clipping (using the original @code{profsum=3e5}: the leaked holes in the numbers image. Because the circle is not too distant from the noise some of its elements do not get clipped, and their stacked value gets systematically higher than the rest of the image. In Gnuastro, we have a fix for this that is described fully in the next section (@ref{Filled re-clipping}). @node Filled re-clipping, , MAD clipping, Clipping outliers @subsection Filled re-clipping When source of the outlier covers more than one element, and its flux is close to the noise level, not all of its elements will be clipped: because of noise, some of its elements will remain un-clipped; and thus affecting the output. Examples of this were created and thoroughly discussed in previous sections with @mymath{\sigma}-clipping and MAD-clipping (see @ref{Sigma clipping} and @ref{MAD clipping}). To avoid this problem, in Gnuastro we have an extra set of clipping operators that will do two rounds of clips and with some basic operations in the middle. @enumerate @item The requested clipping is first applied. This will the return the median and dispersion measure (MAD or STD). @item A mask is created for each input image (in stacking) or 1D array (in collapsing). Any pixel that is outside the requested clip range is set to 1; the rest are set to 0. @item Isolated regions are found: @itemize @item For 2D images (were each pixel has 8 neighbors) the mask pixels are first dilated (so the edges of the regions are closed off from the surrounding noise). @item For 1D arrays (where each element only has two neighbors), the mask is first eroded. This is necessary because the next step (where the holes are filled), two pixels that have been clipped purely due to noise with a large distance between them can wrongly mask a very large range of the input data. @end itemize @item Any 0-valued pixel in the masks that are fully surrounded by 1s (or ``holes'') are filled (given a value of 1). @item All the pixels that have a value of 1 in the mask are set to NaN in the respective input data (that the mask corresponds to). @item The requested clipping is repeated on the newly masked inputs. @end enumerate Through this process, the less significant outliers (which do not get clipped independently) are clipped based on their surrounding elements. The filled re-clipping operators have an extra @code{-fill} in their names. For example the filled MAD-clipped mean is called @code{madclip-fill-mean} (while the simple MAD-clipped mean operator was called @code{madclip-mean}). Let's run our script with the filled @mymath{\sigma}-clipping and @mymath{MAD}-clipping (before each run, make sure the values shown under the @code{grep} command are correct). With the last command, we'll view all the outputs generated so far (in this section and the previous ones (@ref{Building inputs and analysis without clipping}, @ref{Sigma clipping} and @ref{MAD clipping}): @verbatim $ grep '^clip_\|^profsum' script.sh profsum=1e5 clip_operator=madclip-fill clip_multiple=4.48 clip_tolerance=0.01 $ bash ./script $ $ grep '^clip_\|^profsum' script.sh profsum=1e5 clip_operator=sigclip-fill clip_multiple=3 clip_tolerance=0.1 $ bash ./script $ imgs="" $ for m in std mean median mad number; do \ imgs="$imgs $p-$m.fits $p-sigclip-$m.fits $p-sigclip-fill-$m.fits" \ imgs="$p-madclip-$m.fits $p-madclip-fill-$m.fits"; \ done $ astscript-fits-view $imgs --ds9extra="-tile grid layout 5 6" \ --ds9extra="-scale limits 1 9" \ --ds9extra="-frame move back -scale limits 1 9" \ --ds9extra="-frame move back -scale limits 1 9" \ --ds9extra="-frame move back -scale limits 1 9" \ --ds9extra="-frame move back -scale limits 1 9" @end verbatim The last column (belonging to the @code{madclip-fill-*} operators) is @emph{finally} free of the outlying circle (that was present in only one of nine inputs). The filling operation did not affect the @code{sigclip-fill-*} operators (third column DS9 from the last command above)! The reason is clear from the bottom row (showing the number of images used in each pixel). The weak over density of clipped pixels over the circle is barely visible and was not strong enough for defining ``holes'' (that will be filled). On the contrary, when comparing the @file{madclip-number.fits} and @file{madclip-fill-number.fits}, the filled holes within the circle are clearly visible. But the script also generated collapsed columns of @file{build/in-9.fits} (to a 1D table). In this case, for each column, the number of outliers increase as we enter the circle and reach a maximum in the middle of the image. Let's have a look at those outputs: @example $ astscript-fits-view build/collapsed-madclip-9.fits \ build/collapsed-madclip-fill-9.fits @end example When comparing the two in TOPCAT (following the same process described in @ref{Building inputs and analysis without clipping}) you will notice that the difference is only in the edges of the circle. The 4.48 multiple of MAD-clipping (corresponding to 3 sigma), was not successful in removing the many outlying pixels due to the circle in the central pixels of the image. This is a relatively high threshold and was used because for the images, we only had 9 elements in each clipping for every pixel. But for the collapsing, we have many more pixels in each vertical direction of the image (201 pixels). Let's decrease the threshold to 3 and calculate the collapsed mean after MAD-clipping, once with filled re-clipping and once without it: @example $ for m in mean number; do \ for clip in madclip madclip-fill; do \ astarithmetic build/in-9.fits 3 0.01 2 collapse-$clip-$m \ counter --writeall -ocollapse-$clip-$m.fits; \ done; \ done @end example The two loops above created four tables. First, with the command below, let's look at the two measured mean values (one with filling and the other without it): @example $ astscript-fits-view collapse-*-mean.fits @end example In the table without filled re-clipping, you see a small shift in the center of the image (around 100 in the horizontal axis). Let's have a look at the final number of pixels used in each clipping: @example $ astscript-fits-view collapse-*-number.fits @end example The difference is now clearly visible when you plot both in one ``Plane plot'' window. In the filled re-clipping case, we see a clear dip in the number of pixels that very nicely corresponds to the number of pixels associated to the circle. But the dip is much more noisy in the simple MAD-clipping. @node Installation, Common program behavior, Tutorials, Top @chapter Installation @c This link is put here because the `Quick start' section of the first @c chapter is not the most eye-catching part of the manual and some users @c were seen to follow this ``Installation'' chapter title in search of the @c tarball and fast instructions. @cindex Installation The latest released version of Gnuastro source code is always available at the following URL: @url{http://ftpmirror.gnu.org/gnuastro/gnuastro-latest.tar.gz} @noindent @ref{Quick start} describes the commands necessary to configure, build, and install Gnuastro on your system. This chapter will be useful in cases where the simple procedure above is not sufficient, for example, your system lacks a mandatory/optional dependency (in other words, you cannot pass the @command{$ ./configure} step), or you want greater customization, or you want to build and install Gnuastro from other random points in its history, or you want a higher level of control on the installation. Thus if you were happy with downloading the tarball and following @ref{Quick start}, then you can safely ignore this chapter and come back to it in the future if you need more customization. @ref{Dependencies} describes the mandatory, optional and bootstrapping dependencies of Gnuastro. Only the first group are required/mandatory when you are building Gnuastro using a tarball (see @ref{Release tarball}), they are very basic and low-level tools used in most astronomical software, so you might already have them installed, if not they are very easy to install as described for each. @ref{Downloading the source} discusses the two methods you can obtain the source code: as a tarball (a significant snapshot in Gnuastro's history), or the full history@footnote{@ref{Bootstrapping dependencies} are required if you clone the full history.}. The latter allows you to build Gnuastro at any random point in its history (for example, to get bug fixes or new features that are not released as a tarball yet). The building and installation of Gnuastro is heavily customizable, to learn more about them, see @ref{Build and install}. This section is essentially a thorough explanation of the steps in @ref{Quick start}. It discusses ways you can influence the building and installation. If you encounter any problems in the installation process, it is probably already explained in @ref{Known issues}. In @ref{Other useful software} the installation and usage of some other free software that are not directly required by Gnuastro but might be useful in conjunction with it is discussed. @menu * Dependencies:: Necessary packages for Gnuastro. * Downloading the source:: Ways to download the source code. * Build and install:: Configure, build and install Gnuastro. @end menu @node Dependencies, Downloading the source, Installation, Installation @section Dependencies A minimal set of dependencies are mandatory for building Gnuastro from the standard tarball release. If they are not present you cannot pass Gnuastro's configuration step. The mandatory dependencies are therefore very basic (low-level) tools which are easy to obtain, build and install, see @ref{Mandatory dependencies} for a full discussion. If you have the packages of @ref{Optional dependencies}, Gnuastro will have additional functionality (for example, converting FITS images to JPEG or PDF). If you are installing from a tarball as explained in @ref{Quick start}, you can stop reading after this section. If you are cloning the version controlled source (see @ref{Version controlled source}), an additional bootstrapping step is required before configuration and its dependencies are explained in @ref{Bootstrapping dependencies}. Your operating system's package manager is an easy and convenient way to download and install the dependencies that are already pre-built for your operating system. In @ref{Dependencies from package managers}, we will list some common operating system package manager commands to install the optional and mandatory dependencies. @menu * Mandatory dependencies:: Gnuastro will not install without these. * Optional dependencies:: Adding more functionality. * Bootstrapping dependencies:: If you have the version controlled source. * Dependencies from package managers:: Installing from OS package managers. @end menu @node Mandatory dependencies, Optional dependencies, Dependencies, Dependencies @subsection Mandatory dependencies @cindex Dependencies, Gnuastro @cindex GNU build system The mandatory Gnuastro dependencies are very basic and low-level tools. They all follow the same basic GNU based build system (like that shown in @ref{Quick start}), so even if you do not have them, installing them should be pretty straightforward. In this section we explain each program and any specific note that might be necessary in the installation. @menu * GNU Scientific Library:: Installing GSL. * CFITSIO:: C interface to the FITS standard. * WCSLIB:: C interface to the WCS standard of FITS. @end menu @node GNU Scientific Library, CFITSIO, Mandatory dependencies, Mandatory dependencies @subsubsection GNU Scientific Library @cindex GNU Scientific Library The @url{http://www.gnu.org/software/gsl/, GNU Scientific Library}, or GSL, is a large collection of functions that are very useful in scientific applications, for example, integration, random number generation, and Fast Fourier Transform among many others. To download and install GSL from source, you can run the following commands. @example $ wget https://ftp.gnu.org/gnu/gsl/gsl-latest.tar.gz $ tar -xf gsl-latest.tar.gz $ cd gsl-X.X # Replace X.X with version number. $ ./configure CFLAGS="$CFLAGS -g0 -O3" $ make -j8 # Replace 8 with no. CPU threads. $ make check $ sudo make install @end example @node CFITSIO, WCSLIB, GNU Scientific Library, Mandatory dependencies @subsubsection CFITSIO @cindex CFITSIO @cindex FITS standard @url{http://heasarc.gsfc.nasa.gov/fitsio/, CFITSIO} is the closest you can get to the pixels in a FITS image while remaining faithful to the @url{http://fits.gsfc.nasa.gov/fits_standard.html, FITS standard}. It is written by William Pence, the principal author of the FITS standard@footnote{Pence, W.D. et al. Definition of the Flexible Image Transport System (FITS), version 3.0. (2010) Astronomy and Astrophysics, Volume 524, id.A42, 40 pp.}, and is regularly updated. Setting the definitions for all other software packages using FITS images. @vindex --enable-reentrant @cindex Reentrancy, multiple file opening @cindex Multiple file opening, reentrancy Some GNU/Linux distributions have CFITSIO in their package managers, if it is available and updated, you can use it. One problem that might occur is that CFITSIO might not be configured with the @option{--enable-reentrant} option by the distribution. This option allows CFITSIO to open a file in multiple threads, it can thus provide great speed improvements. If CFITSIO was not configured with this option, any program which needs this capability will warn you and abort when you ask for multiple threads (see @ref{Multi-threaded operations}). To install CFITSIO from source, we strongly recommend that you have a look through Chapter 2 (Creating the CFITSIO library) of the CFITSIO manual and understand the options you can pass to @command{$ ./configure} (they are not too much). This is a very basic package for most astronomical software and it is best that you configure it nicely with your system. Once you download the source and unpack it, the following configure script should be enough for most purposes. Do not forget to read chapter two of the manual though, for example, the second option is only for 64bit systems. The manual also explains how to check if it has been installed correctly. CFITSIO comes with two executable files called @command{fpack} and @command{funpack}. From their manual: they ``are standalone programs for compressing and uncompressing images and tables that are stored in the FITS (Flexible Image Transport System) data format. They are analogous to the gzip and gunzip compression programs except that they are optimized for the types of astronomical images that are often stored in FITS format''. The commands below will compile and install them on your system along with CFITSIO. They are not essential for Gnuastro, since they are just wrappers for functions within CFITSIO, but they can come in handy. The @command{make utils} command is only available for versions above 3.39, it will build these executable files along with several other executable test files which are deleted in the following commands before the installation (otherwise the test files will also be installed). The commands necessary to download the source, decompress, build and install CFITSIO from source are described below. @example $ urlbase=http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c $ wget $urlbase/cfitsio_latest.tar.gz $ tar -xf cfitsio_latest.tar.gz $ cd cfitsio-X.XX # Replace X.XX with version $ ./configure --prefix=/usr/local --enable-sse2 --enable-reentrant \ CFLAGS="$CFLAGS -g0 -O3" $ make $ make utils $ ./testprog > testprog.lis # See below if this has an error $ diff testprog.lis testprog.out # Should have no output $ cmp testprog.fit testprog.std # Should have no output $ rm cookbook fitscopy imcopy smem speed testprog $ sudo make install @end example In the @code{./testprog > testprog.lis} step, you may confront an error, complaining that it cannot find @file{libcfitsio.so.AAA} (where @code{AAA} is an integer). This is the library that you just built and have not yet installed. But unfortunately some versions of CFITSIO do not account for this on some OSs. To fix the problem, you need to tell your OS to also look into current CFITSIO build directory with the first command below, afterwards, the problematic command (second below) should run properly. @example $ export LD_LIBRARY_PATH="$(pwd):$LD_LIBRARY_PATH" $ ./testprog > testprog.lis @end example Recall that the modification above is ONLY NECESSARY FOR THIS STEP. @emph{Do not} put the @code{LD_LIBRARY_PATH} modification command in a permanent place (like your bash startup file). After installing CFITSIO, close your terminal and continue working on a new terminal (so @code{LD_LIBRARY_PATH} has its default value). For more on @code{LD_LIBRARY_PATH}, see @ref{Installation directory}. @node WCSLIB, , CFITSIO, Mandatory dependencies @subsubsection WCSLIB @cindex WCS @cindex WCSLIB @cindex World Coordinate System @url{http://www.atnf.csiro.au/people/mcalabre/WCS/, WCSLIB} is written and maintained by one of the authors of the World Coordinate System (WCS) definition in the @url{http://fits.gsfc.nasa.gov/fits_standard.html, FITS standard}@footnote{Greisen E.W., Calabretta M.R. (2002) Representation of world coordinates in FITS. Astronomy and Astrophysics, 395, 1061-1075.}, Mark Calabretta. It might be already built and ready in your distribution's package management system. However, here the installation from source is explained, for the advantages of installation from source please see @ref{Mandatory dependencies}. To install WCSLIB you will need to have CFITSIO already installed, see @ref{CFITSIO}. @vindex --without-pgplot WCSLIB also has plotting capabilities which use PGPLOT (a plotting library for C). If you wan to use those capabilities in WCSLIB, @ref{PGPLOT} provides the PGPLOT installation instructions. However PGPLOT is old@footnote{As of early June 2016, its most recent version was uploaded in February 2001.}, so its installation is not easy, there are also many great modern WCS plotting tools (mostly in written in Python). Hence, if you will not be using those plotting functions in WCSLIB, you can configure it with the @option{--without-pgplot} option as shown below. If you have the cURL library @footnote{@url{https://curl.haxx.se}} on your system and you installed CFITSIO version 3.42 or later, you will need to also link with the cURL library at configure time (through the @code{-lcurl} option as shown below). CFITSIO uses the cURL library for its HTTPS (or HTTP Secure@footnote{@url{https://en.wikipedia.org/wiki/HTTPS}}) support and if it is present on your system, CFITSIO will depend on it. Therefore, if @command{./configure} command below fails (you do not have the cURL library), then remove this option and rerun it. To download, configure, build, check and install WCSLIB from source, you can follow the steps below. @example ## Download and unpack the source tarball $ wget ftp://ftp.atnf.csiro.au/pub/software/wcslib/wcslib.tar.bz2 $ tar -xf wcslib.tar.bz2 ## In the `cd' command, replace `X.X' with version number. $ cd wcslib-X.X ## If `./configure' fails, remove `-lcurl' and run again. $ ./configure LIBS="-pthread -lcurl -lm" --without-pgplot \ --disable-fortran CFLAGS="$CFLAGS -g0 -O3" $ make $ make check $ sudo make install @end example @node Optional dependencies, Bootstrapping dependencies, Mandatory dependencies, Dependencies @subsection Optional dependencies The libraries listed here are only used for very specific applications, therefore they are optional and Gnuastro can be built without them (with only those specific features disabled). Since these are pretty low-level tools, they are not too hard to install from source, but you can also use your operating system's package manager to easily install all of them. For more, see @ref{Dependencies from package managers}. @cindex GPL Ghostscript If the @command{./configure} script cannot find any of these optional dependencies, it will notify you of the operation(s) you cannot do due to not having them. If you continue the build and request an operation that uses a missing library, Gnuastro's programs will warn that the optional library was missing at build-time and abort. Since Gnuastro was built without that library, installing the library afterwards will not help. The only way is to rebuild Gnuastro from scratch (after the library has been installed). However, for program dependencies (like cURL or Ghostscript) things are easier: you can install them after building Gnuastro also. This is because libraries are used to build the internal structure of Gnuastro's executables. However, a program dependency is called by Gnuastro's programs at run-time and has no effect on their internal structure. So if a dependency program becomes available later, it will be used next time it is requested. @table @asis @item GNU Libtool @cindex GNU Libtool Libtool is a program to simplify managing of the libraries to build an executable (a program). GNU Libtool has some added functionality compared to other implementations. If GNU Libtool is not present on your system at configuration time, a warning will be printed and @ref{BuildProgram} will not be built or installed. The configure script will look into your search path (@code{PATH}) for GNU Libtool through the following executable names: @command{libtool} (acceptable only if it is the GNU implementation) or @command{glibtool}. See @ref{Installation directory} for more on @code{PATH}. GNU Libtool (the binary/executable file) is a low-level program that is probably already present on your system, and if not, is available in your operating system package manager@footnote{Note that we want the binary/executable Libtool program which can be run on the command-line. In Debian-based operating systems which separate various parts of a package, you want want @code{libtool-bin}, the @code{libtool} package will not contain the executable program.}. If you want to install GNU Libtool's latest version from source, please visit its @url{https://www.gnu.org/software/libtool/, web page}. Gnuastro's tarball is shipped with an internal implementation of GNU Libtool. Even if you have GNU Libtool, Gnuastro's internal implementation is used for the building and installation of Gnuastro. As a result, you can still build, install and use Gnuastro even if you do not have GNU Libtool installed on your system. However, this internal Libtool does not get installed. Therefore, after Gnuastro's installation, if you want to use @ref{BuildProgram} to compile and link your own C source code which uses the @ref{Gnuastro library}, you need to have GNU Libtool available on your system (independent of Gnuastro). See @ref{Review of library fundamentals} to learn more about libraries. @item GNU Make extension headers @cindex GNU Make GNU Make is a workflow management system that can be used to run a series of commands in a specific order, and in parallel if you want. GNU Make offers special features to extend it with custom functions within a dynamic library. They are defined in the @file{gnumake.h} header. If @file{gnumake.h} can be found on your system at configuration time, Gnuastro will build a custom library that GNU Make can use for extended functionality in (astronomical) data analysis scenarios. @item libgit2 @cindex Git @pindex libgit2 @cindex Version control systems Git is one of the most common version control systems (see @ref{Version controlled source}). When @file{libgit2} is present, and Gnuastro's programs are run within a version controlled directory, outputs will contain the version number of the working directory's repository for future reproducibility. See the @command{COMMIT} keyword header in @ref{Output FITS files} for a discussion. @item libjpeg @pindex libjpeg @cindex JPEG format libjpeg is only used by ConvertType to read from and write to JPEG images, see @ref{Recognized file formats}. @url{http://www.ijg.org/, libjpeg} is a very basic library that provides tools to read and write JPEG images, most Unix-like graphic programs and libraries use it. Therefore you most probably already have it installed. @url{http://libjpeg-turbo.virtualgl.org/, libjpeg-turbo} is an alternative to libjpeg. It uses Single instruction, multiple data (SIMD) instructions for ARM based systems that significantly decreases the processing time of JPEG compression and decompression algorithms. @item libtiff @pindex libtiff @cindex TIFF format libtiff is used by ConvertType and the libraries to read TIFF images, see @ref{Recognized file formats}. @url{http://www.simplesystems.org/libtiff/, libtiff} is a very basic library that provides tools to read and write TIFF images, most Unix-like operating system graphic programs and libraries use it. Therefore even if you do not have it installed, it must be easily available in your package manager. @item cURL @cindex cURL (downloading tool) cURL's executable (@command{curl}) is called by @ref{Query} for submitting queries to remote datasets and retrieving the results. It is not necessary for the build of Gnuastro from source (only a warning will be printed if it cannot be found at configure time), so if you do not have it at build-time there is no problem. Just be sure to have it when you run @command{astquery}, otherwise you'll get an error about not finding @command{curl}. @item GPL Ghostscript @cindex GPL Ghostscript GPL Ghostscript's executable (@command{gs}) is called by ConvertType to compile a PDF file from a source PostScript file, see @ref{ConvertType}. Therefore its headers (and libraries) are not needed. @item Python3 with Numpy @cindex Numpy @cindex Python3 Python is a high-level programming language and Numpy is the most commonly used library within Python to add multi-dimensional arrays and matrices. If you configure Gnuastro with @option{--with-python} @emph{and} version 3 of Python is available with a corresponding Numpy Library, Gnuastro's library will be built with some Python-related helper functions. Python wrappers for Gnuastro's library (for example, `pyGnuastro') can use these functions when being built from source. For more on Gnuastro's Python helper functions, see @ref{Python interface}. @cindex PyPI This Python interface is only relevant if you want to build the Python wrappers (like `pyGnuastro') from source. If you install the Gnuastro Python wrapper from a pre-built repository like PyPI, this feature of your Gnuastro library won't be used. Pre-built libraries contain the full Gnuastro library that they need within them (you don't even need to have Gnuastro at all!). @cartouche @noindent @strong{Can't find the Python3 and Numpy of a virtual environment:} make sure to set the @code{$PYTHON} variable to point to the @code{python3} command of the virtual environment before running @code{./configure}. Note that you don't need to activate the virtual env, just point @code{PYTHON} to its Python3 executable, like the example below: @example $ python3 -m venv test-env # Setting up the virtual env. $ export PYTHON="$(pwd)/test-env/bin/python3" $ ./configure # Gnuastro's configure script. @end example @end cartouche @item SAO DS9 SAO DS9 (@command{ds9}) is a visualization tool for FITS images. Gnuastro's @command{astscript-fits-view} program calls DS9 to visualize FITS images. We have a full appendix on it and how to install it in @ref{SAO DS9}. Since it is a run-time dependency, it can be installed at any later time (after building and installing Gnuastro). @item TOPCAT TOPCAT (@command{topcat}) is a visualization tool for astronomical tables (most commonly: plotting). Gnuastro's @command{astscript-fits-view} program calls TOPCAT it to visualize tables. We have a full appendix on it and how to install it in @ref{TOPCAT}. Since it is a run-time dependency, it can be installed at any later time (after building and installing Gnuastro). @end table @node Bootstrapping dependencies, Dependencies from package managers, Optional dependencies, Dependencies @subsection Bootstrapping dependencies Bootstrapping is only necessary if you have decided to obtain the full version controlled history of Gnuastro, see @ref{Version controlled source} and @ref{Bootstrapping}. Using the version controlled source enables you to always be up to date with the most recent development work of Gnuastro (bug fixes, new functionalities, improved algorithms, etc.). If you have downloaded a tarball (see @ref{Downloading the source}), then you can ignore this subsection. To successfully run the bootstrapping process, there are some additional dependencies to those discussed in the previous subsections. These are low level tools that are used by a large collection of Unix-like operating systems programs, therefore they are most probably already available in your system. If they are not already installed, you should be able to easily find them in any GNU/Linux distribution package management system (@command{apt-get}, @command{yum}, @command{pacman}, etc.). The short names in parenthesis in @command{typewriter} font after the package name can be used to search for them in your package manager. For the GNU Portability Library, GNU Autoconf Archive and @TeX{} Live, it is recommended to use the instructions here, not your operating system's package manager. @table @asis @item GNU Portability Library (Gnulib) @cindex GNU C library @cindex Gnulib: GNU Portability Library @cindex GNU Portability Library (Gnulib) To ensure portability for a wider range of operating systems (those that do not include GNU C library, namely glibc), Gnuastro depends on the GNU portability library, or Gnulib. Gnulib keeps a copy of all the functions in glibc, implemented (as much as possible) to be portable to other operating systems. The @file{bootstrap} script can automatically clone Gnulib (as a @file{gnulib/} directory inside Gnuastro), however, as described in @ref{Bootstrapping} this is not recommended. The recommended way to bootstrap Gnuastro is to first clone Gnulib and the Autoconf archives (see below) into a local directory outside of Gnuastro. Let's call it @file{DEVDIR}@footnote{If you are not a developer in Gnulib or Autoconf archives, @file{DEVDIR} can be a directory that you do not backup. In this way the large number of files in these projects will not slow down your backup process or take bandwidth (if you backup to a remote server).} (which you can set to any directory; preferentially where you keep your other development projects). Currently in Gnuastro, both Gnulib and Autoconf archives have to be cloned in the same top directory@footnote{If you already have the Autoconf archives in a separate directory, or cannot clone it in the same directory as Gnulib, or you have it with another directory name (not @file{autoconf-archive/}), you can follow this short step. Set @file{AUTOCONFARCHIVES} to your desired address. Then define a symbolic link in @file{DEVDIR} with the following command so Gnuastro's bootstrap script can find it:@*@command{$ ln -s $AUTOCONFARCHIVES $DEVDIR/autoconf-archive}.} like the case here@footnote{If your internet connection is active, but Git complains about the network, it might be due to your network setup not recognizing the git protocol. In that case use the following URL for the HTTP protocol instead (for Autoconf archives, replace the name): @command{http://git.sv.gnu.org/r/gnulib.git}}: @example $ DEVDIR=/home/yourname/Development ## Select any location. $ mkdir $DEVDIR ## If it doesn't exist! $ cd $DEVDIR $ git clone https://git.sv.gnu.org/git/gnulib.git $ git clone https://git.sv.gnu.org/git/autoconf-archive.git @end example Gnulib is a source-based dependency of Gnuastro's bootstrapping process, so simply having it is enough on your computer, there is no need to install, and thus check anything. @noindent You now have the full version controlled source of these two repositories in separate directories. Both these packages are regularly updated, so every once in a while, you can run @command{$ git pull} within them to get any possible updates. @item GNU Automake (@command{automake}) @cindex GNU Automake GNU Automake will build the @file{Makefile.in} files in each sub-directory using the (hand-written) @file{Makefile.am} files. The @file{Makefile.in}s are subsequently used to generate the @file{Makefile}s when the user runs @command{./configure} before building. To check that you have a working GNU Automake in your system, you can try this command: @example $ automake --version @end example @item GNU Autoconf (@command{autoconf}) @cindex GNU Autoconf GNU Autoconf will build the @file{configure} script using the configurations we have defined (hand-written) in @file{configure.ac}. To check that you have a working GNU Autoconf in your system, you can try this command: @example $ autoconf --version @end example @item GNU Autoconf Archive @cindex GNU Autoconf Archive These are a large collection of tests that can be called to run at @command{./configure} time. See the explanation under GNU Portability Library (Gnulib) above for instructions on obtaining it and keeping it up to date. GNU Autoconf Archive is a source-based dependency of Gnuastro's bootstrapping process, so simply having it is enough on your computer, there is no need to install, and thus check anything. Just do not forget that it has to be in the same directory as Gnulib (described above). @item GNU Texinfo (@command{texinfo}) @cindex GNU Texinfo GNU Texinfo is the tool that formats this manual into the various output formats. To bootstrap Gnuastro you need all of Texinfo's command-line programs. However, some operating systems package them separately, for example, in Fedora, @command{makeinfo} is packaged in the @command{texinfo-tex} package. To check that you have a working GNU Texinfo in your system, you can try this command: @example $ makeinfo --version @end example @item GNU Libtool (@command{libtool}) @cindex GNU Libtool GNU Libtool is in charge of building all the libraries in Gnuastro. The libraries contain functions that are used by more than one program and are installed for use in other programs. They are thus put in a separate directory (@file{lib/}). To check that you have a working GNU Libtool in your system, you can try this command (and from the output, make sure it is GNU's libtool) @example $ libtool --version @end example @item GNU help2man (@command{help2man}) @cindex GNU help2man GNU help2man is used to convert the output of the @option{--help} option (@ref{--help}) to the traditional Man page (@ref{Man pages}). To check that you have a working GNU Help2man in your system, you can try this command: @example $ help2man --version @end example @item @LaTeX{} and some @TeX{} packages @cindex @LaTeX{} @cindex @TeX{} Live Some of the figures in this book are built by @LaTeX{} (using the PGF/TikZ package). The @LaTeX{} source for those figures is version controlled for easy maintenance not the actual figures. So the @file{./boostrap} script will run @LaTeX{} to build the figures. The best way to install @LaTeX{} and all the necessary packages is through @url{https://www.tug.org/texlive/, @TeX{} live} which is a package manager for @TeX{} related tools that is independent of any operating system. It is thus preferred to the @TeX{} Live versions distributed by your operating system. To install @TeX{} Live, go to the web page and download the appropriate installer by following the ``download'' link. Note that by default the full package repository will be downloaded and installed (around 4 Gigabytes) which can take @emph{very} long to download and to update later. However, most packages are not needed by everyone, it is easier, faster and better to install only the ``Basic scheme'' (consisting of only the most basic @TeX{} and @LaTeX{} packages, which is less than 200 Mega bytes)@footnote{You can also download the DVD iso file at a later time to keep as a backup for when you do not have internet connection if you need a package.}. After the installation, be sure to set the environment variables as suggested in the end of the outputs. Any time you confront (need) a package you do not have, simply install it with a command like below (similar to how you install software from your operating system's package manager)@footnote{After running @TeX{}, or @LaTeX{}, you might get a warning complaining about a @file{missingfile}. Run `@command{tlmgr info missingfile}' to see the package(s) containing that file which you can install.}. To install all the necessary @TeX{} packages for a successful Gnuastro bootstrap, run this command: @example $ sudo su # tlmgr install epsf jknapltx caption biblatex biber iftex \ etoolbox logreq xstring xkeyval pgf ms \ xcolor pgfplots times rsfs ps2eps epspdf @end example To check that you have a working @LaTeX{} executable in your system, you can try this command (this just checks if @LaTeX{} exists, as described above, if you have a missing package, you can easily identify it from the output and install it with @command{tlmgr}): @example $ latex --version @end example @item ImageMagick (@command{imagemagick}) @cindex ImageMagick ImageMagick is a wonderful and robust program for image manipulation on the command-line. @file{bootstrap} uses it to convert the book images into the formats necessary for the various book formats. Since ImageMagick version 7, it is necessary to edit the policy file (@file{/etc/ImageMagick-7/policy.xml}) to have the following line (it maybe present, but commented, in this case un-comment it): @example <policy domain="coder" rights="read|write" pattern="@{PS,PDF,XPS@}"/> @end example If the following line is present, it is also necessary to comment/remove it. @example <policy domain="delegate" rights="none" pattern="gs" /> @end example To learn more about the ImageMagick security policy please see: @url{https://imagemagick.org/script/security-policy.php}. To check that you have a working ImageMagick in your system, you can try this command: @example $ convert --version @end example @end table @node Dependencies from package managers, , Bootstrapping dependencies, Dependencies @subsection Dependencies from package managers @cindex Package managers @cindex Source code building @cindex Building from source @cindex Compiling from source @cindex Source code compilation @cindex Distributions, GNU/Linux The most basic way to install a package on your system is to build the packages from source yourself. Alternatively, you can use your operating system's package manager to download pre-compiled files and install them. The latter choice is easier and faster. However, we recommend that you build the @ref{Mandatory dependencies} yourself from source (all necessary commands and links are given in the respective section). Here are some basic reasons behind this recommendation. @enumerate @item Your operating system's pre-built software might not be the most recent release. For example, Gnuastro itself is also packaged in some package managers. For the list see: @url{https://repology.org/project/gnuastro/versions}. You will notice that Gnuastro's version in some operating systems is more than 10 versions old! It is the same for all the dependencies of Gnuastro. @item For each package, Gnuastro might preform better (or require) certain configuration options that your distribution's package managers did not add for you. If present, these configuration options are explained during the installation of each in the sections below (for example, in @ref{CFITSIO}). When the proper configuration has not been set, the programs should complain and inform you. @item For the libraries, they might separate the binary file from the header files which can cause confusion, see @ref{Known issues}. @item Like any other tool, the science you derive from Gnuastro's tools highly depend on these lower level dependencies, so generally it is much better to have a close connection with them. By reading their manuals, installing them and staying up to date with changes/bugs in them, your scientific results and understanding (of what is going on, and thus how you interpret your scientific results) will also correspondingly improve. @end enumerate Based on your package manager, you can use any of the following commands to install the mandatory and optional dependencies. If your package manager is not included in the list below, please send us the respective command, so we add it. For better archivability and compression ratios, Gnuastro's recommended tarball compression format is with the @url{http://lzip.nongnu.org/lzip.html, Lzip} program, see @ref{Release tarball}. Therefore, the package manager commands below also contain Lzip. @table @asis @item @command{apt-get} (Debian-based OSs: Debian, Ubuntu, Linux Mint, etc.) @cindex Debian @cindex Ubuntu @cindex Linux Mint @cindex @command{apt-get} @cindex Advanced Packaging Tool (APT, Debian) @url{https://en.wikipedia.org/wiki/Debian,Debian} is one of the oldest GNU/Linux distributions@footnote{@url{https://en.wikipedia.org/wiki/List_of_Linux_distributions#Debian-based}}. It thus has a very extended user community and a robust internal structure and standards. All of it is free software and based on the work of volunteers around the world. Many distributions are thus derived from it, for example, Ubuntu and Linux Mint. This arguably makes Debian-based OSs the largest, and most used, class of GNU/Linux distributions. All of them use Debian's Advanced Packaging Tool (APT, for example, @command{apt-get}) for managing packages. @table @asis @item Development features (Ubuntu or derivatives) By default, a newly installed Ubuntu does not contain the low-level tools that are necessary for building a software from source. Therefore, if you are using Ubuntu, please run the following command. @example $ sudo apt-get install gcc make zlib1g-dev lzip @end example @item Mandatory dependencies Without these, Gnuastro cannot be built, they are necessary for input/output and low-level mathematics (see @ref{Mandatory dependencies})! @example $ sudo apt-get install libgsl-dev libcfitsio-dev \ wcslib-dev @end example @item Optional dependencies If present, these libraries can be used in Gnuastro's build for extra features, see @ref{Optional dependencies}. @example $ sudo apt-get install ghostscript libtool-bin \ libjpeg-dev libtiff-dev \ libgit2-dev curl @end example @item Programs to view FITS images or tables These are not used in Gnuastro's build. They can just help in viewing the inputs/outputs independent of Gnuastro! @example $ sudo apt-get install saods9 topcat @end example @end table @noindent Gnuastro is @url{https://tracker.debian.org/pkg/gnuastro,packaged} in Debian (and thus some of its derivate operating systems). Just make sure it is the most recent version. @item @command{dnf} @itemx @command{yum} (Red Hat-based OSs: Red Hat, Fedora, CentOS, Scientific Linux, etc.) @cindex RHEL @cindex Fedora @cindex CentOS @cindex Red Hat @cindex @command{dnf} @cindex @command{yum} @cindex Scientific Linux @url{https://en.wikipedia.org/wiki/Red_Hat,Red Hat Enterprise Linux} (RHEL) is released by Red Hat Inc. RHEL requires paid subscriptions for use of its binaries and support. But since it is free software, many other teams use its code to spin-off their own distributions based on RHEL. Red Hat-based GNU/Linux distributions initially used the ``Yellowdog Updated, Modifier'' (YUM) package manager, which has been replaced by ``Dandified yum'' (DNF). If the latter is not available on your system, you can use @command{yum} instead of @command{dnf} in the command below. @table @asis @item Mandatory dependencies Without these, Gnuastro cannot be built, they are necessary for input/output and low-level mathematics (see @ref{Mandatory dependencies})! @example $ sudo dnf install gsl-devel cfitsio-devel \ wcslib-devel @end example @item Optional dependencies If present, these libraries can be used in Gnuastro's build for extra features, see @ref{Optional dependencies}. @example $ sudo dnf install ghostscript libtool \ libjpeg-devel libtiff-devel \ libgit2-devel lzip curl @end example @item Programs to view FITS images or tables These are not used in Gnuastro's build. They can just help in viewing the inputs/outputs independent of Gnuastro! @example $ sudo dnf install saods9 topcat @end example @end table @item @command{brew} (macOS) @cindex macOS @cindex Homebrew @cindex MacPorts @cindex @command{brew} @url{https://en.wikipedia.org/wiki/MacOS,macOS} is the operating system used on Apple devices. macOS does not come with a package manager pre-installed, but several widely used, third-party package managers exist, such as Homebrew or MacPorts. Both are free software. Currently we have only tested Gnuastro's installation with Homebrew as described below. If not already installed, first obtain Homebrew by following the instructions at @url{https://brew.sh}. @table @asis @item Mandatory dependencies Without these, Gnuastro cannot be built, they are necessary for input/output and low-level mathematics (see @ref{Mandatory dependencies})! Homebrew manages packages in different `taps'. To install WCSLIB via Homebrew you will need to @command{tap} into @command{brewsci/science} first (the tap may change in the future, but can be found by calling @command{brew search wcslib}). @example $ brew tap brewsci/science $ brew install wcslib gsl cfitsio @end example @item Optional dependencies If present, these libraries can be used in Gnuastro's build for extra features, see @ref{Optional dependencies}. @example $ brew install ghostscript libtool libjpeg \ libtiff libgit2 curl lzip @end example @item Programs to view FITS images or tables These are not used in Gnuastro's build. They can just help in viewing the inputs/outputs independent of Gnuastro! @example $ brew install saoimageds9 topcat @end example @end table @item @command{pacman} (Arch Linux) @cindex Arch GNU/Linux @cindex @command{pacman} @url{https://en.wikipedia.org/wiki/Arch_Linux,Arch Linux} is a smaller GNU/Linux distribution, which follows the KISS principle (``keep it simple, stupid'') as a general guideline. It ``focuses on elegance, code correctness, minimalism and simplicity, and expects the user to be willing to make some effort to understand the system's operation''. Arch GNU/Linux uses ``Package manager'' (Pacman) to manage its packages/components. @table @asis @item Mandatory dependencies Without these, Gnuastro cannot be built, they are necessary for input/output and low-level mathematics (see @ref{Mandatory dependencies})! @example $ sudo pacman -S gsl cfitsio wcslib @end example @item Optional dependencies If present, these libraries can be used in Gnuastro's build for extra features, see @ref{Optional dependencies}. @example $ sudo pacman -S ghostscript libtool libjpeg \ libtiff libgit2 curl lzip @end example @item Programs to view FITS images or tables These are not used in Gnuastro's build. They can just help in viewing the inputs/outputs independent of Gnuastro! SAO DS9 and TOPCAT are not available in the standard Arch GNU/Linux repositories. However, installing and using both is very easy from their own web pages, as described in @ref{SAO DS9} and @ref{TOPCAT}. @end table @item @command{zypper} (openSUSE and SUSE Linux Enterprise Server) @cindex openSUSE @cindex SUSE Linux Enterprise Server @cindex @command{zypper}, OpenSUSE package manager SUSE Linux Enterprise Server@footnote{@url{https://www.suse.com/products/server}} (SLES) is the commercial offering which shares code and tools. Many additional packages are offered in the Build Service@footnote{@url{https://build.opensuse.org}}. openSUSE and SLES use @command{zypper} (cli) and YaST (GUI) for managing repositories and packages. @table @asis @item Configuration When building Gnuastro, run the configure script with the following @code{CPPFLAGS} environment variable: @example $ ./configure CPPFLAGS="-I/usr/include/cfitsio" @end example @item Mandatory dependencies Without these, Gnuastro cannot be built, they are necessary for input/output and low-level mathematics (see @ref{Mandatory dependencies})! @example $ sudo zypper install gsl-devel cfitsio-devel \ wcslib-devel @end example @item Optional dependencies If present, these libraries can be used in Gnuastro's build for extra features, see @ref{Optional dependencies}. @example $ sudo zypper install ghostscript_any libtool \ pkgconfig libcurl-devel \ libgit2-devel \ libjpeg62-devel \ libtiff-devel curl @end example @item Programs to view FITS images or tables These are not used in Gnuastro's build. They can just help in viewing the inputs/outputs independent of Gnuastro! @example $ sudo zypper install ds9 topcat @end example @end table @c Gnuastro is @url{https://software.opensuse.org/package/gnuastro,packaged} @c in @command{zypper}. Just make sure it is the most recent version. @end table Usually, when libraries are installed by operating system package managers, there should be no problems when configuring and building other programs from source (that depend on the libraries: Gnuastro in this case). However, in some special conditions, problems may pop-up during the configuration, building, or checking/running any of Gnuastro's programs. The most common of such problems and their solution are discussed below. @cartouche @noindent @strong{Not finding library during configuration:} If a library is installed, but during Gnuastro's @command{configure} step the library is not found, then configure Gnuastro like the command below (correcting @file{/path/to/lib}). For more, see @ref{Known issues} and @ref{Installation directory}. @example $ ./configure LDFLAGS="-L/path/to/lib" @end example @end cartouche @cartouche @noindent @strong{Not finding header (.h) files while building:} If a library is installed, but during Gnuastro's @command{make} step, the library's header (file with a @file{.h} suffix) is not found, then configure Gnuastro like the command below (correcting @file{/path/to/include}). For more, see @ref{Known issues} and @ref{Installation directory}. @example $ ./configure CPPFLAGS="-I/path/to/include" @end example @end cartouche @cartouche @noindent @strong{Gnuastro's programs do not run during check or after install:} If a library is installed, but the programs do not run due to linking problems, set the @code{LD_LIBRARY_PATH} variable like below (assuming Gnuastro is installed in @file{/path/to/installed}). For more, see @ref{Known issues} and @ref{Installation directory}. @example $ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/to/installed/lib" @end example @end cartouche @node Downloading the source, Build and install, Dependencies, Installation @section Downloading the source Gnuastro's source code can be downloaded in two ways. As a tarball, ready to be configured and installed on your system (as described in @ref{Quick start}), see @ref{Release tarball}. If you want official releases of stable versions this is the best, easiest and most common option. Alternatively, you can clone the version controlled history of Gnuastro, run one extra bootstrapping step and then follow the same steps as the tarball. This will give you access to all the most recent work that will be included in the next release along with the full project history. The process is thoroughly introduced in @ref{Version controlled source}. @menu * Release tarball:: Download a stable official release. * Version controlled source:: Get and use the version controlled source. @end menu @node Release tarball, Version controlled source, Downloading the source, Downloading the source @subsection Release tarball A release tarball (commonly compressed) is the most common way of obtaining free and open source software. A tarball is a snapshot of one particular moment in the Gnuastro development history along with all the necessary files to configure, build, and install Gnuastro easily (see @ref{Quick start}). It is very straightforward and needs the least set of dependencies (see @ref{Mandatory dependencies}). Gnuastro has tarballs for official stable releases and pre-releases for testing. See @ref{Version numbering} for more on the two types of releases and the formats of the version numbers. The URLs for each type of release are given below. @table @asis @item Official stable releases (@url{http://ftp.gnu.org/gnu/gnuastro}): This URL hosts the official stable releases of Gnuastro. Always use the most recent version (see @ref{Version numbering}). By clicking on the ``Last modified'' title of the second column, the files will be sorted by their date which you can also use to find the latest version. It is recommended to use a mirror to download these tarballs, please visit @url{http://ftpmirror.gnu.org/gnuastro/} and see below. @item Pre-release tarballs (@url{http://alpha.gnu.org/gnu/gnuastro}): This URL contains unofficial pre-release versions of Gnuastro. The pre-release versions of Gnuastro here are for enthusiasts to try out before an official release. If there are problems, or bugs then the testers will inform the developers to fix before the next official release. See @ref{Version numbering} to understand how the version numbers here are formatted. If you want to remain even more up-to-date with the developing activities, please clone the version controlled source as described in @ref{Version controlled source}. @end table @cindex Gzip @cindex Lzip Gnuastro's official/stable tarball is released with two formats: Gzip (with suffix @file{.tar.gz}) and Lzip (with suffix @file{.tar.lz}). The pre-release tarballs (after version 0.3) are released only as an Lzip tarball. Gzip is a very well-known and widely used compression program created by GNU and available in most systems. However, Lzip provides a better compression ratio and more robust archival capacity. For example, Gnuastro 0.3's tarball was 2.9MB and 4.3MB with Lzip and Gzip respectively, see the @url{http://www.nongnu.org/lzip/lzip.html, Lzip web page} for more. Lzip might not be pre-installed in your operating system, if so, installing it from your operating system's package manager or from source is very easy and fast (it is a very small program). The GNU FTP server is mirrored (has backups) in various locations on the globe (@url{http://www.gnu.org/order/ftp.html}). You can use the closest mirror to your location for a more faster download. Note that only some mirrors keep track of the pre-release (alpha) tarballs. Also note that if you want to download immediately after and announcement (see @ref{Announcements}), the mirrors might need some time to synchronize with the main GNU FTP server. @node Version controlled source, , Release tarball, Downloading the source @subsection Version controlled source @cindex Git @cindex Version control The publicly distributed Gnuastro tarball (for example, @file{gnuastro-X.X.tar.gz}) does not contain the revision history, it is only a snapshot of the source code at one significant instant of Gnuastro's history (specified by the version number, see @ref{Version numbering}), ready to be configured and built. To be able to develop successfully, the revision history of the code can be very useful to track when something was added or changed, also some updates that are not yet officially released might be in it. We use Git for the version control of Gnuastro. For those who are not familiar with it, we recommend the @url{https://git-scm.com/book/en, ProGit book}. The whole book is publicly available for online reading and downloading and does a wonderful job at explaining the concepts and best practices. Let's assume you want to keep Gnuastro in the @file{TOPGNUASTRO} directory (can be any directory, change the value below). The full version controlled history of Gnuastro can be cloned in @file{TOPGNUASTRO/gnuastro} by running the following commands@footnote{If your internet connection is active, but Git complains about the network, it might be due to your network setup not recognizing the Git protocol. In that case use the following URL which uses the HTTP protocol instead: @command{http://git.sv.gnu.org/r/gnuastro.git}}: @example $ TOPGNUASTRO=/home/yourname/Research/projects/ $ cd $TOPGNUASTRO $ git clone git://git.sv.gnu.org/gnuastro.git @end example @noindent The @file{$TOPGNUASTRO/gnuastro} directory will contain hand-written (version controlled) source code for Gnuastro's programs, libraries, this book and the tests. All are divided into sub-directories with standard and very descriptive names. The version controlled files in the top cloned directory are either mainly in capital letters (for example, @file{THANKS} and @file{README}) or mainly written in small-caps (for example, @file{configure.ac} and @file{Makefile.am}). The former are non-programming, standard writing for human readers containing high-level information about the whole package. The latter are instructions to customize the GNU build system for Gnuastro. For more on Gnuastro's source code structure, please see @ref{Developing}. We will not go any deeper here. The cloned Gnuastro source cannot immediately be configured, compiled, or installed since it only contains hand-written files, not automatically generated or imported files which do all the hard work of the build process. See @ref{Bootstrapping} for the process of generating and importing those files (it is not too hard!). Once you have bootstrapped Gnuastro, you can run the standard procedures (in @ref{Quick start}). Very soon after you have cloned it, Gnuastro's main @file{master} branch will be updated on the main repository (since the developers are actively working on Gnuastro), for the best practices in keeping your local history in sync with the main repository see @ref{Synchronizing}. @menu * Bootstrapping:: Adding all the automatically generated files. * Synchronizing:: Keep your local clone up to date. @end menu @node Bootstrapping, Synchronizing, Version controlled source, Version controlled source @subsubsection Bootstrapping @cindex Bootstrapping @cindex GNU Autoconf Archive @cindex Gnulib: GNU Portability Library @cindex GNU Portability Library (Gnulib) @cindex Automatically created build files @noindent The version controlled source code lacks the source files that we have not written or are automatically built. These automatically generated files are included in the distributed tarball for each distribution (for example, @file{gnuastro-X.X.tar.gz}, see @ref{Version numbering}) and make it easy to immediately configure, build, and install Gnuastro. However from the perspective of version control, they are just bloatware and sources of confusion (since they are not changed by Gnuastro developers). The process of automatically building and importing necessary files into the cloned directory is known as @emph{bootstrapping}. After bootstrapping is done you are ready to follow the default GNU build steps that you normally run on the tarball (@command{./configure && make} for example, described more in @ref{Quick start}). Some known issues with bootstrapping may occur during the process, to see how to fix them, please see @ref{Known issues}. All the instructions for an automatic bootstrapping are available in @file{bootstrap} and configured using @file{bootstrap.conf}. @file{bootstrap} and @file{COPYING} (which contains the software copyright notice) are the only files not written by Gnuastro developers but under version control to enable simple bootstrapping and legal information on usage immediately after cloning. @file{bootstrap.conf} is maintained by the GNU Portability Library (Gnulib) and this file is an identical copy, so do not make any changes in this file since it will be replaced when Gnulib releases an update. Make all your changes in @file{bootstrap.conf}. The bootstrapping process has its own separate set of dependencies, the full list is given in @ref{Bootstrapping dependencies}. They are generally very low-level and used by a very large set of commonly used programs, so they are probably already installed on your system. The simplest way to bootstrap Gnuastro is to simply run the bootstrap script within your cloned Gnuastro directory as shown below. However, please read the next paragraph before doing so (see @ref{Version controlled source} for @file{TOPGNUASTRO}). @example $ cd TOPGNUASTRO/gnuastro $ ./bootstrap # Requires internet connection @end example Without any options, @file{bootstrap} will clone Gnulib within your cloned Gnuastro directory (@file{TOPGNUASTRO/gnuastro/gnulib}) and download the necessary Autoconf archives macros. So if you run bootstrap like this, you will need an internet connection every time you decide to bootstrap. Also, Gnulib is a large package and cloning it can be slow. It will also keep the full Gnulib repository within your Gnuastro repository, so if another one of your projects also needs Gnulib, and you insist on running bootstrap like this, you will have two copies. In case you regularly backup your important files, Gnulib will also slow down the backup process. Therefore while the simple invocation above can be used with no problem, it is not recommended. To do better, see the next paragraph. The recommended way to get these two packages is thoroughly discussed in @ref{Bootstrapping dependencies} (in short: clone them in the separate @file{DEVDIR/} directory). The following commands will take you into the cloned Gnuastro directory and run the @file{bootstrap} script, while telling it to copy some files (instead of making symbolic links, with the @option{--copy} option, this is not mandatory@footnote{The @option{--copy} option is recommended because some backup systems might do strange things with symbolic links.}) and where to look for Gnulib (with the @option{--gnulib-srcdir} option). Please note that the address given to @option{--gnulib-srcdir} has to be an absolute address (so do not use @file{~} or @file{../} for example). @example $ cd $TOPGNUASTRO/gnuastro $ ./bootstrap --copy --gnulib-srcdir=$DEVDIR/gnulib @end example @cindex GNU Texinfo @cindex GNU Libtool @cindex GNU Autoconf @cindex GNU Automake @cindex GNU C library @cindex GNU build system Since Gnulib and Autoconf archives are now available in your local directories, you do not need an internet connection every time you decide to remove all un-tracked files and redo the bootstrap (see box below). You can also use the same command on any other project that uses Gnulib. All the necessary GNU C library functions, Autoconf macros and Automake inputs are now available along with the book figures. The standard GNU build system (@ref{Quick start}) will do the rest of the job. @cartouche @noindent @strong{Undoing the bootstrap:} During the development, it might happen that you want to remove all the automatically generated and imported files. In other words, you might want to reverse the bootstrap process. Fortunately Git has a good program for this job: @command{git clean}. Run the following command and every file that is not version controlled will be removed. @example git clean -fxd @end example @noindent It is best to commit any recent change before running this command. You might have created new files since the last commit and if they have not been committed, they will all be gone forever (using @command{rm}). To get a list of the non-version controlled files instead of deleting them, add the @option{n} option to @command{git clean}, so it becomes @option{-fxdn}. @end cartouche Besides the @file{bootstrap} and @file{bootstrap.conf}, the @file{bootstrapped/} directory and @file{README-hacking} file are also related to the bootstrapping process. The former hosts all the imported (bootstrapped) directories. Thus, in the version controlled source, it only contains a @file{README} file, but in the distributed tarball it also contains sub-directories filled with all bootstrapped files. @file{README-hacking} contains a summary of the bootstrapping process discussed in this section. It is a necessary reference when you have not built this book yet. It is thus not distributed in the Gnuastro tarball. @node Synchronizing, , Bootstrapping, Version controlled source @subsubsection Synchronizing The bootstrapping script (see @ref{Bootstrapping}) is not regularly needed: you mainly need it after you have cloned Gnuastro (once) and whenever you want to re-import the files from Gnulib, or Autoconf archives@footnote{@url{https://savannah.gnu.org/task/index.php?13993} is defined for you to check if significant (for Gnuastro) updates are made in these repositories, since the last time you pulled from them.} (not too common). However, Gnuastro developers are constantly working on Gnuastro and are pushing their changes to the official repository. Therefore, your local Gnuastro clone will soon be out-dated. Gnuastro has two mailing lists dedicated to its developing activities (see @ref{Developing mailing lists}). Subscribing to them can help you decide when to synchronize with the official repository. To pull all the most recent work in Gnuastro, run the following command from the top Gnuastro directory. If you do not already have a built system, ignore @command{make distclean}. The separate steps are described in detail afterwards. @example $ make distclean && git pull && autoreconf -f @end example @noindent You can also run the commands separately: @example $ make distclean $ git pull $ autoreconf -f @end example @cindex GNU Autoconf @cindex Mailing list: info-gnuastro @cindex @code{info-gnuastro@@gnu.org} If Gnuastro was already built in this directory, you do not want some outputs from the previous version being mixed with outputs from the newly pulled work. Therefore, the first step is to clean/delete all the built files with @command{make distclean}. Fortunately the GNU build system allows the separation of source and built files (in separate directories). This is a great feature to keep your source directory clean and you can use it to avoid the cleaning step. Gnuastro comes with a script with some useful options for this job. It is useful if you regularly pull recent changes, see @ref{Separate build and source directories}. After the pull, we must re-configure Gnuastro with @command{autoreconf -f} (part of GNU Autoconf). It will update the @file{./configure} script and all the @file{Makefile.in}@footnote{In the GNU build system, @command{./configure} will use the @file{Makefile.in} files to create the necessary @file{Makefile} files that are later read by @command{make} to build the package.} files based on the hand-written configurations (in @file{configure.ac} and the @file{Makefile.am} files). After running @command{autoreconf -f}, a warning about @code{TEXI2DVI} might show up, you can ignore that. The most important reason for rebuilding Gnuastro's build system is to generate/update the version number for your updated Gnuastro snapshot. This generated version number will include the commit information (see @ref{Version numbering}). The version number is included in nearly all outputs of Gnuastro's programs, therefore it is vital for reproducing an old result. As a summary, be sure to run `@command{autoreconf -f}' after every change in the Git history. This includes synchronization with the main server or even a commit you have made yourself. If you would like to see what has changed since you last synchronized your local clone, you can take the following steps instead of the simple command above (do not type anything after @code{#}): @example $ git checkout master # Confirm if you are on master. $ git fetch origin # Fetch all new commits from server. $ git log master..origin/master # See all the new commit messages. $ git merge origin/master # Update your master branch. $ autoreconf -f # Update the build system. @end example @noindent By default @command{git log} prints the most recent commit first, add the @option{--reverse} option to see the changes chronologically. To see exactly what has been changed in the source code along with the commit message, add a @option{-p} option to the @command{git log}. If you want to make changes in the code, have a look at @ref{Developing} to get started easily. Be sure to commit your changes in a separate branch (keep your @code{master} branch to follow the official repository) and re-run @command{autoreconf -f} after the commit. If you intend to send your work to us, you can safely use your commit since it will be ultimately recorded in Gnuastro's official history. If not, please upload your separate branch to a public hosting service, for example, @url{https://codeberg.org, Codeberg}, and link to it in your report/paper. Alternatively, run @command{make distcheck} and upload the output @file{gnuastro-X.X.X.XXXX.tar.gz} to a publicly accessible web page so your results can be considered scientific (reproducible) later. @node Build and install, , Downloading the source, Installation @section Build and install This section is basically a longer explanation to the sequence of commands given in @ref{Quick start}. If you did not have any problems during the @ref{Quick start} steps, you want to have all the programs of Gnuastro installed in your system, you do not want to change the executable names during or after installation, you have root access to install the programs in the default system wide directory, the Letter paper size of the print book is fine for you or as a summary you do not feel like going into the details when everything is working, you can safely skip this section. If you have any of the above problems or you want to understand the details for a better control over your build and install, read along. The dependencies which you will need prior to configuring, building and installing Gnuastro are explained in @ref{Dependencies}. The first three steps in @ref{Quick start} need no extra explanation, so we will skip them and start with an explanation of Gnuastro specific configuration options and a discussion on the installation directory in @ref{Configuring}, followed by some smaller subsections: @ref{Tests}, @ref{A4 print book}, and @ref{Known issues} which explains the solutions to known problems you might encounter in the installation steps and ways you can solve them. @menu * Configuring:: Configure Gnuastro * Separate build and source directories:: Keeping derivate/build files separate. * Tests:: Run tests to see if it is working. * A4 print book:: Customize the print book. * Known issues:: Issues you might encounter. @end menu @node Configuring, Separate build and source directories, Build and install, Build and install @subsection Configuring @pindex ./configure @cindex Configuring The @command{$ ./configure} step is the most important step in the build and install process. All the required packages, libraries, headers and environment variables are checked in this step. The behaviors of make and make install can also be set through command-line options to this command. @cindex Configure options @cindex Customizing installation @cindex Installation, customizing The configure script accepts various arguments and options which enable the final user to highly customize whatever she is building. The options to configure are generally very similar to normal program options explained in @ref{Arguments and options}. Similar to all GNU programs, you can get a full list of the options along with a short explanation by running @example $ ./configure --help @end example @noindent @cindex GNU Autoconf A complete explanation is also included in the @file{INSTALL} file. Note that this file was written by the authors of GNU Autoconf (which builds the @file{configure} script), therefore it is common for all programs which use the @command{$ ./configure} script for building and installing, not just Gnuastro. Here we only discuss cases where you do not have superuser access to the system and if you want to change the executable names. But before that, a review of the options to configure that are particular to Gnuastro are discussed. @menu * Gnuastro configure options:: Configure options particular to Gnuastro. * Installation directory:: Specify the directory to install. * Executable names:: Changing executable names. * Configure and build in RAM:: For minimal use of HDD or SSD, and clean source. @end menu @node Gnuastro configure options, Installation directory, Configuring, Configuring @subsubsection Gnuastro configure options @cindex @command{./configure} options @cindex Configure options particular to Gnuastro Most of the options to configure (which are to do with building) are similar for every program which uses this script. Here the options that are particular to Gnuastro are discussed. The next topics explain the usage of other configure options which can be applied to any program using the GNU build system (through the configure script). @vtable @option @item --enable-debug @cindex Valgrind @cindex Debugging @cindex GNU Debugger Compile/build Gnuastro with debugging information, no optimization and without shared libraries. In order to allow more efficient programs when using Gnuastro (after the installation), by default Gnuastro is built with a 3rd level (a very high level) optimization and no debugging information. By default, libraries are also built for static @emph{and} shared linking (see @ref{Linking}). However, when there are crashes or unexpected behavior, these three features can hinder the process of localizing the problem. This configuration option is identical to manually calling the configuration script with @code{CFLAGS="-g -O0" --disable-shared}. In the (rare) situations where you need to do your debugging on the shared libraries, do not use this option. Instead run the configure script by explicitly setting @code{CFLAGS} like this: @example $ ./configure CFLAGS="-g -O0" @end example @item --enable-check-with-valgrind @cindex Valgrind Do the @command{make check} tests through Valgrind. Therefore, if any crashes or memory-related issues (segmentation faults in particular) occur in the tests, the output of Valgrind will also be put in the @file{tests/test-suite.log} file without having to manually modify the check scripts. This option will also activate Gnuastro's debug mode (see the @option{--enable-debug} configure-time option described above). Valgrind is free software. It is a program for easy checking of memory-related issues in programs. It runs a program within its own controlled environment and can thus identify the exact line-number in the program's source where a memory-related issue occurs. However, it can significantly slow-down the tests. So this option is only useful when a segmentation fault is found during @command{make check}. @item --enable-progname Only build and install @file{progname} along with any other program that is enabled in this fashion. @file{progname} is the name of the executable without the @file{ast}, for example, @file{crop} for Crop (with the executable name of @file{astcrop}). Note that by default all the programs will be installed. This option (and the @option{--disable-progname} options) are only relevant when you do not want to install all the programs. Therefore, if this option is called for any of the programs in Gnuastro, any program which is not explicitly enabled will not be built or installed. @item --disable-progname @itemx --enable-progname=no Do not build or install the program named @file{progname}. This is very similar to the @option{--enable-progname}, but will build and install all the other programs except this one. @cartouche @noindent @strong{Note:} If some programs are enabled and some are disabled, it is equivalent to simply enabling those that were enabled. Listing the disabled programs is redundant. @end cartouche @item --enable-gnulibcheck @cindex GNU C library @cindex Gnulib: GNU Portability Library @cindex GNU Portability Library (Gnulib) Enable checks on the GNU Portability Library (Gnulib). Gnulib is used by Gnuastro to enable users of non-GNU based operating systems (that do not use GNU C library or glibc) to compile and use the advanced features that this library provides. We make extensive use of such functions. If you give this option to @command{$ ./configure}, when you run @command{$ make check}, first the functions in Gnulib will be tested, then the Gnuastro executables. If your operating system does not support glibc or has an older version of it and you have problems in the build process (@command{$ make}), you can give this flag to configure to see if the problem is caused by Gnulib not supporting your operating system or Gnuastro, see @ref{Known issues}. @item --disable-guide-message @itemx --enable-guide-message=no Do not print a guiding message during the GNU Build process of @ref{Quick start}. By default, after each step, a message is printed guiding the user what the next command should be. Therefore, after @command{./configure}, it will suggest running @command{make}. After @command{make}, it will suggest running @command{make check} and so on. If Gnuastro is configured with this option, for example @example $ ./configure --disable-guide-message @end example Then these messages will not be printed after any step (like most programs). For people who are not yet fully accustomed to this build system, these guidelines can be very useful and encouraging. However, if you find those messages annoying, use this option. @item --without-libgit2 @cindex Git @pindex libgit2 @cindex Version control systems Build Gnuastro without libgit2 (for including Git commit hashes in output files), see @ref{Optional dependencies}. libgit2 is an optional dependency, with this option, Gnuastro will ignore any possibly existing libgit2 that may already be on the system. @item --without-libjpeg @pindex libjpeg @cindex JPEG format Build Gnuastro without libjpeg (for reading/writing to JPEG files), see @ref{Optional dependencies}. libjpeg is an optional dependency, with this option, Gnuastro will ignore any possibly existing libjpeg that may already be on the system. @item --without-libtiff @pindex libtiff @cindex TIFF format Build Gnuastro without libtiff (for reading/writing to TIFF files), see @ref{Optional dependencies}. libtiff is an optional dependency, with this option, Gnuastro will ignore any possibly existing libtiff that may already be on the system. @item --with-python @cindex PyPI @cindex Python Build the Python interface within Gnuastro's dynamic library. This interface can be used for easy communication with Python wrappers (for example, the pyGnuastro package). When you install the pyGnuastro package from PyPI, the correct configuration of the Gnuastro Library is already packaged with it (with the Python interface) and that is independent of your Gnuastro installation. The Python interface is only necessary if you want to build pyGnuastro from source (which is only necessary for developers). Therefore it has to be explicitly activated at configure time with this option. For more on the interface functions, see @ref{Python interface}. @end vtable The tests of some programs might depend on the outputs of the tests of other programs. For example, MakeProfiles is one the first programs to be tested when you run @command{$ make check}. MakeProfiles' test outputs (FITS images) are inputs to many other programs (which in turn provide inputs for other programs). Therefore, if you do not install MakeProfiles for example, the tests for many the other programs will be skipped. To avoid this, in one run, you can install all the programs and run the tests but not install. If everything is working correctly, you can run configure again with only the programs you want. However, do not run the tests and directly install after building. @node Installation directory, Executable names, Gnuastro configure options, Configuring @subsubsection Installation directory @vindex --prefix @cindex Superuser, not possible @cindex Root access, not possible @cindex No access to superuser install @cindex Install with no superuser access One of the most commonly used options to @file{./configure} is @option{--prefix}, it is used to define the directory that will host all the installed files (or the ``prefix'' in their final absolute file name). For example, when you are using a server and you do not have administrator or root access. In this example scenario, if you do not use the @option{--prefix} option, you will not be able to install the built files and thus access them from anywhere without having to worry about where they are installed. However, once you prepare your startup file to look into the proper place (as discussed thoroughly below), you will be able to easily use this option and benefit from any software you want to install without having to ask the system administrators or install and use a different version of a software that is already installed on the server. The most basic way to run an executable is to explicitly write its full file name (including all the directory information) and run it. One example is running the configuration script with the @command{$ ./configure} command (see @ref{Quick start}). By giving a specific directory (the current directory or @file{./}), we are explicitly telling the shell to look in the current directory for an executable file named `@file{configure}'. Directly specifying the directory is thus useful for executables in the current (or nearby) directories. However, when the program (an executable file) is to be used a lot, specifying all those directories will become a significant burden. For example, the @file{ls} executable lists the contents in a given directory and it is (usually) installed in the @file{/usr/bin/} directory by the operating system maintainers. Therefore, if using the full address was the only way to access an executable, each time you wanted a listing of a directory, you would have to run the following command (which is very inconvenient, both in writing and in remembering the various directories). @example $ /usr/bin/ls @end example @cindex Shell variables @cindex Environment variables To address this problem, we have the @file{PATH} environment variable. To understand it better, we will start with a short introduction to the shell variables. Shell variable values are basically treated as strings of characters. For example, it does not matter if the value is a name (string of @emph{alphabetic} characters), or a number (string of @emph{numeric} characters), or both. You can define a variable and a value for it by running @example $ myvariable1=a_test_value $ myvariable2="a test value" @end example @noindent As you see above, if the value contains white space characters, you have to put the whole value (including white space characters) in double quotes (@key{"}). You can see the value it represents by running @example $ echo $myvariable1 $ echo $myvariable2 @end example @noindent @cindex Environment @cindex Environment variables If a variable has no value or it was not defined, the last command will only print an empty line. A variable defined like this will be known as long as this shell or terminal is running. Other terminals will have no idea it existed. The main advantage of shell variables is that if they are exported@footnote{By running @command{$ export myvariable=a_test_value} instead of the simpler case in the text}, subsequent programs that are run within that shell can access their value. So by changing their value, you can change the ``environment'' of a program which uses them. The shell variables which are accessed by programs are therefore known as ``environment variables''@footnote{You can use shell variables for other actions too, for example, to temporarily keep some names or run loops on some files.}. You can see the full list of exported variables that your shell recognizes by running: @example $ printenv @end example @cindex @file{HOME} @cindex @file{HOME/.local/} @cindex Environment variable, @code{HOME} @file{HOME} is one commonly used environment variable, it is any user's (the one that is logged in) top directory. Try finding it in the command above. It is used so often that the shell has a special expansion (alternative) for it: `@file{~}'. Whenever you see file names starting with the tilde sign, it actually represents the value to the @file{HOME} environment variable, so @file{~/doc} is the same as @file{$HOME/doc}. @vindex PATH @pindex ./configure @cindex Setting @code{PATH} @cindex Default executable search directory @cindex Search directory for executables Another one of the most commonly used environment variables is @file{PATH}, it is a list of directories to search for executable names. Its value is a list of directories (separated by a colon, or `@key{:}'). When the address of the executable is not explicitly given (like @file{./configure} above), the system will look for the executable in the directories specified by @file{PATH}. If you have a computer nearby, try running the following command to see which directories your system will look into when it is searching for executable (binary) files, one example is printed here (notice how @file{/usr/bin}, in the @file{ls} example above, is one of the directories in @command{PATH}): @example $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/bin @end example By default @file{PATH} usually contains system-wide directories, which are readable (but not writable) by all users, like the above example. Therefore if you do not have root (or administrator) access, you need to add another directory to @file{PATH} which you actually have write access to. The standard directory where you can keep installed files (not just executables) for your own user is the @file{~/.local/} directory. The names of hidden files start with a `@key{.}' (dot), so it will not show up in your common command-line listings, or on the graphical user interface. You can use any other directory, but this is the most recognized. The top installation directory will be used to keep all the package's components: programs (executables), libraries, include (header) files, shared data (like manuals), or configuration files (see @ref{Review of library fundamentals} for a thorough introduction to headers and linking). So it commonly has some of the following sub-directories for each class of installed components respectively: @file{bin/}, @file{lib/}, @file{include/} @file{man/}, @file{share/}, @file{etc/}. Since the @file{PATH} variable is only used for executables, you can add the @file{~/.local/bin} directory (which keeps the executables/programs or more generally, ``binary'' files) to @file{PATH} with the following command. As defined below, first the existing value of @file{PATH} is used, then your given directory is added to its end and the combined value is put back in @file{PATH} (run `@command{$ echo $PATH}' afterwards to check if it was added). @example $ PATH=$PATH:~/.local/bin @end example @cindex GNU Bash @cindex Startup scripts @cindex Scripts, startup Any executable that you installed in @file{~/.local/bin} will now be usable without having to remember and write its full address. However, as soon as you leave/close your current terminal session, this modified @file{PATH} variable will be forgotten. Adding the directories which contain executables to the @file{PATH} environment variable each time you start a terminal is also very inconvenient and prone to errors. Fortunately, there are standard `startup files' defined by your shell precisely for this (and other) purposes. There is a special startup file for every significant starting step: @table @asis @cindex GNU Bash @item @file{/etc/profile} and everything in @file{/etc/profile.d/} These startup scripts are called when your whole system starts (for example, after you turn on your computer). Therefore you need administrator or root privileges to access or modify them. @item @file{~/.bash_profile} If you are using (GNU) Bash as your shell, the commands in this file are run, when you log in to your account @emph{through Bash}. Most commonly when you login through the virtual console (where there is no graphic user interface). @item @file{~/.bashrc} If you are using (GNU) Bash as your shell, the commands here will be run each time you start a terminal and are already logged in. For example, when you open your terminal emulator in the graphic user interface. @end table For security reasons, it is highly recommended to directly type in your @file{HOME} directory value by hand in startup files instead of using variables. So in the following, let's assume your user name is `@file{name}' (so @file{~} may be replaced with @file{/home/name}). To add @file{~/.local/bin} to your @file{PATH} automatically on any startup file, you have to ``export'' the new value of @command{PATH} in the startup file that is most relevant to you by adding this line: @example export PATH=$PATH:/home/name/.local/bin @end example @cindex GNU build system @cindex Install directory @cindex Directory, install Now that you know your system will look into @file{~/.local/bin} for executables, you can tell Gnuastro's configure script to install everything in the top @file{~/.local} directory using the @option{--prefix} option. When you subsequently run @command{$ make install}, all the install-able files will be put in their respective directory under @file{~/.local/} (the executables in @file{~/.local/bin}, the compiled library files in @file{~/.local/lib}, the library header files in @file{~/.local/include} and so on, to learn more about these different files, please see @ref{Review of library fundamentals}). Note that tilde (`@key{~}') expansion will not happen if you put a `@key{=}' between @option{--prefix} and @file{~/.local}@footnote{If you insist on using `@key{=}', you can use @option{--prefix=$HOME/.local}.}, so we have avoided the @key{=} character here which is optional in GNU-style options, see @ref{Options}. @example $ ./configure --prefix ~/.local @end example @cindex @file{MANPATH} @cindex @file{INFOPATH} @cindex @file{LD_LIBRARY_PATH} @cindex Library search directory @cindex Default library search directory You can install everything (including libraries like GSL, CFITSIO, or WCSLIB which are Gnuastro's mandatory dependencies, see @ref{Mandatory dependencies}) locally by configuring them as above. However, recall that @command{PATH} is only for executable files, not libraries and that libraries can also depend on other libraries. For example, WCSLIB depends on CFITSIO and Gnuastro needs both. Therefore, when you installed a library in a non-recognized directory, you have to guide the program that depends on them to look into the necessary library and header file directories. To do that, you have to define the @command{LDFLAGS} and @command{CPPFLAGS} environment variables respectively. This can be done while calling @file{./configure} as shown below: @example $ ./configure LDFLAGS=-L/home/name/.local/lib \ CPPFLAGS=-I/home/name/.local/include \ --prefix ~/.local @end example It can be annoying/buggy to do this when configuring every software that depends on such libraries. Hence, you can define these two variables in the most relevant startup file (discussed above). The convention on using these variables does not include a colon to separate values (as @command{PATH}-like variables do). They use white space characters and each value is prefixed with a compiler option@footnote{These variables are ultimately used as options while building the programs. Therefore every value has be an option name followed be a value as discussed in @ref{Options}.}. Note the @option{-L} and @option{-I} above (see @ref{Options}), for @option{-I} see @ref{Headers}, and for @option{-L}, see @ref{Linking}. Therefore we have to keep the value in double quotation signs to keep the white space characters and adding the following two lines to the startup file of choice: @example export LDFLAGS="$LDFLAGS -L/home/name/.local/lib" export CPPFLAGS="$CPPFLAGS -I/home/name/.local/include" @end example @cindex Dynamic libraries Dynamic libraries are linked to the executable every time you run a program that depends on them (see @ref{Linking} to fully understand this important concept). Hence dynamic libraries also require a special path variable called @command{LD_LIBRARY_PATH} (same formatting as @command{PATH}). To use programs that depend on these libraries, you need to add @file{~/.local/lib} to your @command{LD_LIBRARY_PATH} environment variable by adding the following line to the relevant start-up file: @example export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/name/.local/lib @end example If you also want to access the Info (see @ref{Info}) and man pages (see @ref{Man pages}) documentations add @file{~/.local/share/info} and @file{~/.local/share/man} to your @command{INFOPATH}@footnote{Info has the following convention: ``If the value of @command{INFOPATH} ends with a colon [or it is not defined] ..., the initial list of directories is constructed by appending the build-time default to the value of @command{INFOPATH}.'' So when installing in a non-standard directory and if @command{INFOPATH} was not initially defined, add a colon to the end of @command{INFOPATH} as shown below. Otherwise Info will not be able to find system-wide installed documentation: @*@command{echo 'export INFOPATH=$INFOPATH:/home/name/.local/share/info:' >> ~/.bashrc}@* Note that this is only an internal convention of Info: do not use it for other @command{*PATH} variables.} and @command{MANPATH} environment variables respectively. @cindex Search directory order @cindex Order in search directory A final note is that order matters in the directories that are searched for all the variables discussed above. In the examples above, the new directory was added after the system specified directories. So if the program, library or manuals are found in the system wide directories, the user directory is no longer searched. If you want to search your local installation first, put the new directory before the already existing list, like the example below. @example export LD_LIBRARY_PATH=/home/name/.local/lib:$LD_LIBRARY_PATH @end example @noindent This is good when a library, for example, CFITSIO, is already present on the system, but the system-wide install was not configured with the correct configuration flags (see @ref{CFITSIO}), or you want to use a newer version and you do not have administrator or root access to update it on the whole system/server. If you update @file{LD_LIBRARY_PATH} by placing @file{~/.local/lib} first (like above), the linker will first find the CFITSIO you installed for yourself and link with it. It thus will never reach the system-wide installation. There are important security problems with using local installations first: all important system-wide executables and libraries (important executables like @command{ls} and @command{cp}, or libraries like the C library) can be replaced by non-secure versions with the same file names and put in the customized directory (@file{~/.local} in this example). So if you choose to search in your customized directory first, please @emph{be sure} to keep it clean from executables or libraries with the same names as important system programs or libraries. @cartouche @noindent @strong{Summary:} When you are using a server which does not give you administrator/root access AND you would like to give priority to your own built programs and libraries, not the version that is (possibly already) present on the server, add these lines to your startup file. See above for which startup file is best for your case and for a detailed explanation on each. Do not forget to replace `@file{/YOUR-HOME-DIR}' with your home directory (for example, `@file{/home/your-id}'): @example export PATH="/YOUR-HOME-DIR/.local/bin:$PATH" export LDFLAGS="-L/YOUR-HOME-DIR/.local/lib $LDFLAGS" export MANPATH="/YOUR-HOME-DIR/.local/share/man/:$MANPATH" export CPPFLAGS="-I/YOUR-HOME-DIR/.local/include $CPPFLAGS" export INFOPATH="/YOUR-HOME-DIR/.local/share/info/:$INFOPATH" export LD_LIBRARY_PATH="/YOUR-HOME-DIR/.local/lib:$LD_LIBRARY_PATH" @end example @noindent Afterwards, you just need to add an extra @option{--prefix=/YOUR-HOME-DIR/.local} to the @file{./configure} command of the software that you intend to install. Everything else will be the same as a standard build and install, see @ref{Quick start}. @end cartouche @node Executable names, Configure and build in RAM, Installation directory, Configuring @subsubsection Executable names @cindex Executable names @cindex Names of executables At first sight, the names of the executables for each program might seem to be uncommonly long, for example, @command{astnoisechisel} or @command{astcrop}. We could have chosen terse (and cryptic) names like most programs do. We chose this complete naming convention (something like the commands in @TeX{}) so you do not have to spend too much time remembering what the name of a specific program was. Such complete names also enable you to easily search for the programs. @cindex Shell auto-complete @cindex Auto-complete in the shell To facilitate typing the names in, we suggest using the shell auto-complete. With this facility you can find the executable you want very easily. It is very similar to file name completion in the shell. For example, simply by typing the letters below (where @key{[TAB]} stands for the Tab key on your keyboard) @example $ ast[TAB][TAB] @end example @noindent you will get the list of all the available executables that start with @command{ast} in your @command{PATH} environment variable directories. So, all the Gnuastro executables installed on your system will be listed. Typing the next letter for the specific program you want along with a Tab, will limit this list until you get to your desired program. @cindex Names, customize @cindex Customize executable names In case all of this does not convince you and you still want to type short names, some suggestions are given below. You should have in mind though, that if you are writing a shell script that you might want to pass on to others, it is best to use the standard name because other users might not have adopted the same customization. The long names also serve as a form of documentation in such scripts. A similar reasoning can be given for option names in scripts: it is good practice to always use the long formats of the options in shell scripts, see @ref{Options}. @cindex Symbolic link The simplest solution is making a symbolic link to the actual executable. For example, let's assume you want to type @file{ic} to run Crop instead of @file{astcrop}. Assuming you installed Gnuastro executables in @file{/usr/local/bin} (default) you can do this simply by running the following command as root: @example # ln -s /usr/local/bin/astcrop /usr/local/bin/ic @end example @noindent In case you update Gnuastro and a new version of Crop is installed, the default executable name is the same, so your custom symbolic link still works. @vindex --program-prefix @vindex --program-suffix @vindex --program-transform-name The installed executable names can also be set using options to @command{$ ./configure}, see @ref{Configuring}. GNU Autoconf (which configures Gnuastro for your particular system), allows the builder to change the name of programs with the three options @option{--program-prefix}, @option{--program-suffix} and @option{--program-transform-name}. The first two are for adding a fixed prefix or suffix to all the programs that will be installed. This will actually make all the names longer! You can use it to add versions of program names to the programs in order to simultaneously have two executable versions of a program. @cindex SED, stream editor @cindex Stream editor, SED The third configure option allows you to set the executable name at install time using the SED program. SED is a very useful `stream editor'. There are various resources on the internet to use it effectively. However, we should caution that using configure options will change the actual executable name of the installed program and on every re-install (an update for example), you have to also add this option to keep the old executable name updated. Also note that the documentation or configuration files do not change from their standard names either. @cindex Removing @file{ast} from executables For example, let's assume that typing @file{ast} on every invocation of every program is really annoying you! You can remove this prefix from all the executables at configure time by adding this option: @example $ ./configure --program-transform-name='s/ast/ /' @end example @node Configure and build in RAM, , Executable names, Configuring @subsubsection Configure and build in RAM @cindex File I/O @cindex Input/Output, file Gnuastro's configure and build process (the GNU build system) involves the creation, reading, and modification of a large number of files (input/output, or I/O). Therefore file I/O issues can directly affect the work of developers who need to configure and build Gnuastro numerous times. Some of these issues are listed below: @itemize @cindex HDD @cindex SSD @item I/O will cause wear and tear on both the HDDs (mechanical failures) and SSDs (decreasing the lifetime). @cindex Backup @item Having the built files mixed with the source files can greatly affect backing up (synchronization) of source files (since it involves the management of a large number of small files that are regularly changed. Backup software can of course be configured to ignore the built files and directories. However, since the built files are mixed with the source files and can have a large variety, this will require a high level of customization. @end itemize @cindex tmpfs file system @cindex file systems, tmpfs One solution to address both these problems is to use the @url{https://en.wikipedia.org/wiki/Tmpfs, tmpfs file system}. Any file in tmpfs is actually stored in the RAM (and possibly SWAP), not on HDDs or SSDs. The RAM is built for extensive and fast I/O. Therefore the large number of file I/Os associated with configuring and building will not harm the HDDs or SSDs. Due to the volatile nature of RAM, files in the tmpfs file-system will be permanently lost after a power-off. Since all configured and built files are derivative files (not files that have been directly written by hand) there is no problem in this and this feature can be considered as an automatic cleanup. @cindex Linux kernel @cindex GNU C library @cindex GNU build system The modern GNU C library (and thus the Linux kernel) defines the @file{/dev/shm} directory for this purpose in the RAM (POSIX shared memory). To build in it, you can use the GNU build system's ability to build in a separate directory (not necessarily in the source directory) as shown below. Just set @file{SRCDIR} as the address of Gnuastro's top source directory (for example, where there is the unpacked tarball). @example $ SRCDIR=/home/username/gnuastro $ mkdir /dev/shm/tmp-gnuastro-build $ cd /dev/shm/tmp-gnuastro-build $ $SRCDIR/configure --srcdir=$SRCDIR $ make @end example Gnuastro comes with a script to simplify this process of configuring and building in a different directory (a ``clean'' build), for more see @ref{Separate build and source directories}. @node Separate build and source directories, Tests, Configuring, Build and install @subsection Separate build and source directories The simple steps of @ref{Quick start} will mix the source and built files. This can cause inconvenience for developers or enthusiasts following the most recent work (see @ref{Version controlled source}). The current section is mainly focused on this later group of Gnuastro users. If you just install Gnuastro on major releases (following @ref{Announcements}), you can safely ignore this section. @cindex GNU build system When it is necessary to keep the source (which is under version control), but not the derivative (built) files (after checking or installing), the best solution is to keep the source and the built files in separate directories. One application of this is already discussed in @ref{Configure and build in RAM}. To facilitate this process of configuring and building in a separate directory, Gnuastro comes with the @file{developer-build} script. It is available in the top source directory and is @emph{not} installed. It will make a directory under a given top-level directory (given to @option{--top-build-dir}) and build Gnuastro there. It thus keeps the source completely separated from the built files. For easy access to the built files, it also makes a symbolic link to the built directory in the top source files called @file{build}. When running the developer-build script without any options in the Gnuastro's top source directory, default values will be used for its configuration. As with Gnuastro's programs, you can inspect the default values with @option{-P} (or @option{--printparams}, the output just looks a little different here). The default top-level build directory is @file{/dev/shm}: the shared memory directory in RAM on GNU/Linux systems as described in @ref{Configure and build in RAM}. @cindex Debug Besides these, it also has some features to facilitate the job of developers or bleeding edge users like the @option{--debug} option to do a fast build, with debug information, no optimization, and no shared libraries. Here is the full list of options you can feed to this script to configure its operations. @cartouche @noindent @strong{Not all Gnuastro's common program behavior usable here:} @file{developer-build} is just a non-installed script with a very limited scope as described above. It thus does not have all the common option behaviors or configuration files for example. @end cartouche @cartouche @noindent @strong{White space between option and value:} @file{developer-build} does not accept an @key{=} sign between the options and their values. It also needs at least one character between the option and its value. Therefore @option{-n 4} or @option{--numthreads 4} are acceptable, while @option{-n4}, @option{-n=4}, or @option{--numthreads=4} are not. Finally multiple short option names cannot be merged: for example, you can say @option{-c -n 4}, but unlike Gnuastro's programs, @option{-cn4} is not acceptable. @end cartouche @cartouche @noindent @strong{Reusable for other packages:} This script can be used in any software which is configured and built using the GNU Build System. Just copy it in the top source directory of that software and run it from there. @end cartouche @cartouche @noindent @strong{Example usage:} See @ref{Forking tutorial} for an example usage of this script in some scenarios. @end cartouche @table @option @item -b STR @itemx --top-build-dir STR The top build directory to make a directory for the build. If this option is not called, the top build directory is @file{/dev/shm} (only available in GNU/Linux operating systems, see @ref{Configure and build in RAM}). @item -V @itemx --version Print the version string of Gnuastro that will be used in the build. This string will be appended to the directory name containing the built files. @item -a @itemx --autoreconf Run @command{autoreconf -f} before building the package. In Gnuastro, this is necessary when a new commit has been made to the project history. In Gnuastro's build system, the Git description will be used as the version, see @ref{Version numbering} and @ref{Synchronizing}. @item -c @itemx --clean @cindex GNU Autoreconf Delete the contents of the build directory (clean it) before starting the configuration and building of this run. This is useful when you have recently pulled changes from the main Git repository, or committed a change yourself and ran @command{autoreconf -f}, see @ref{Synchronizing}. After running GNU Autoconf, the version will be updated and you need to do a clean build. @item -d @itemx --debug @cindex Valgrind @cindex GNU Debugger (GDB) Build with debugging flags (for example, to use in GNU Debugger, also known as GDB, or Valgrind), disable optimization and also the building of shared libraries. Similar to running the configure script of below @example $ ./configure --enable-debug @end example Besides all the debugging advantages of building with this option, it will also be significantly speed up the build (at the cost of slower built programs). So when you are testing something small or working on the build system itself, it will be much faster to test your work with this option. @item -v @itemx --valgrind @cindex Valgrind Build all @command{make check} tests within Valgrind. For more, see the description of @option{--enable-check-with-valgrind} in @ref{Gnuastro configure options}. @item -j INT @itemx --jobs INT The maximum number of threads/jobs for Make to build at any moment. As the name suggests (Make has an identical option), the number given to this option is directly passed on to any call of Make with its @option{-j} option. @item -C @itemx --check After finishing the build, also run @command{make check}. By default, @command{make check} is not run because the developer usually has their own checks to work on (for example, defined in @file{tests/during-dev.sh}). @item -i @itemx --install After finishing the build, also run @command{make install}. @item -D @itemx --dist Run @code{make dist-lzip pdf} to build a distribution tarball (in @file{.tar.lz} format) and a PDF manual. This can be useful for archiving, or sending to colleagues who do not use Git for an easy build and manual. @item -u STR @item --upload STR Activate the @option{--dist} (@option{-D}) option, then use secure copy (@command{scp}, part of the SSH tools) to copy the tarball and PDF to the @file{src} and @file{pdf} sub-directories of the specified server and its directory (value to this option). For example, @command{--upload my-server:dir}, will copy the tarball in the @file{dir/src}, and the PDF manual in @file{dir/pdf} of @code{my-server} server. It will then make a symbolic link in the top server directory to the tarball that is called @file{gnuastro-latest.tar.lz}. @item -p STR @itemx --publish=STR Clean, bootstrap, build, check and upload the checked tarball and PDF of the book to the URL given as @code{STR}. This option is just a wrapper for @option{--autoreconf --clean --debug --check --upload STR}. @option{--debug} is added because it will greatly speed up the build. @option{--debug} will have no effect on the produced tarball (people who later download will be building with the default optimized, and non-debug mode). This option is good when you have made a commit and are ready to publish it on your server (if nothing crashes). Recall that if any of the previous steps fail the script aborts. @item -I @item --install-archive Short for @option{--autoreconf --clean --check --install --dist}. This is useful when you actually want to install the commit you just made (if the build and checks succeed). It will also produce a distribution tarball and PDF manual for easy access to the installed tarball on your system at a later time. Ideally, Gnuastro's Git version history makes it easy for a prepared system to revert back to a different point in history. But Gnuastro also needs to bootstrap files and also your collaborators might (usually do!) find it too much of a burden to do the bootstrapping themselves. So it is convenient to have a tarball and PDF manual of the version you have installed (and are using in your research) handily available. @item -h @itemx --help @itemx -P @itemx --printparams Print a description of this script along with all the options and their current values. @end table @node Tests, A4 print book, Separate build and source directories, Build and install @subsection Tests @cindex @command{make check} @cindex @file{mock.fits} @cindex Tests, running @cindex Checking tests After successfully building (compiling) the programs with the @command{$ make} command you can check the installation before installing. To run the tests, run @example $ make check @end example For every program some tests are designed to check some possible operations. Running the command above will run those tests and give you a final report. If everything is OK and you have built all the programs, all the tests should pass. In case any of the tests fail, please have a look at @ref{Known issues} and if that still does not fix your problem, look that the @file{./tests/test-suite.log} file to see if the source of the error is something particular to your system or more general. If you feel it is general, please contact us because it might be a bug. Note that the tests of some programs depend on the outputs of other program's tests, so if you have not installed them they might be skipped or fail. Prior to releasing every distribution all these tests are checked. If you have a reasonably modern terminal, the outputs of the successful tests will be colored green and the failed ones will be colored red. These scripts can also act as a good set of examples for you to see how the programs are run. All the tests are in the @file{tests/} directory. The tests for each program are shell scripts (ending with @file{.sh}) in a sub-directory of this directory with the same name as the program. See @ref{Test scripts} for more detailed information about these scripts in case you want to inspect them. @node A4 print book, Known issues, Tests, Build and install @subsection A4 print book @cindex A4 print book @cindex Modifying print book @cindex A4 paper size @cindex US letter paper size @cindex Paper size, A4 @cindex Paper size, US letter The default print version of this book is provided in the letter paper size. If you would like to have the print version of this book on paper and you are living in a country which uses A4, then you can rebuild the book. The great thing about the GNU build system is that the book source code which is in Texinfo is also distributed with the program source code, enabling you to do such customization (hacking). @cindex GNU Texinfo In order to change the paper size, you will need to have GNU Texinfo installed. Open @file{doc/gnuastro.texi} with any text editor. This is the source file that created this book. In the first few lines you will see this line: @example @@c@@afourpaper @end example @noindent In Texinfo, a line is commented with @code{@@c}. Therefore, un-comment this line by deleting the first two characters such that it changes to: @example @@afourpaper @end example @noindent Save the file and close it. You can now run the following command @example $ make pdf @end example @noindent and the new PDF book will be available in @file{SRCdir/doc/gnuastro.pdf}. By changing the @command{pdf} in @command{$ make pdf} to @command{ps} or @command{dvi} you can have the book in those formats. Note that you can do this for any book that is in Texinfo format, they might not have @code{@@afourpaper} line, so you can add it close to the top of the Texinfo source file. @node Known issues, , A4 print book, Build and install @subsection Known issues Depending on your operating system and the version of the compiler you are using, you might confront some known problems during the configuration (@command{$ ./configure}), compilation (@command{$ make}) and tests (@command{$ make check}). Here, their solutions are discussed. @itemize @cindex Configuration, not finding library @cindex Development packages @item @command{$ ./configure}: @emph{Configure complains about not finding a library even though you have installed it.} The possible solution is based on how you installed the package: @itemize @item From your distribution's package manager. Most probably this is because your distribution has separated the header files of a library from the library parts. Please also install the `development' packages for those libraries too. Just add a @file{-dev} or @file{-devel} to the end of the package name and re-run the package manager. This will not happen if you install the libraries from source. When installed from source, the headers are also installed. @item @cindex @command{LDFLAGS} From source. Then your linker is not looking where you installed the library. If you followed the instructions in this chapter, all the libraries will be installed in @file{/usr/local/lib}. So you have to tell your linker to look in this directory. To do so, configure Gnuastro like this: @example $ ./configure LDFLAGS="-L/usr/local/lib" @end example If you want to use the libraries for your other programming projects, then export this environment variable in a start-up script similar to the case for @file{LD_LIBRARY_PATH} explained below, also see @ref{Installation directory}. @end itemize @item @vindex --enable-gnulibcheck @cindex Gnulib: GNU Portability Library @cindex GNU Portability Library (Gnulib) @command{$ make}: @emph{Complains about an unknown function on a non-GNU based operating system.} In this case, please run @command{$ ./configure} with the @option{--enable-gnulibcheck} option to see if the problem is from the GNU Portability Library (Gnulib) not supporting your system or if there is a problem in Gnuastro, see @ref{Gnuastro configure options}. If the problem is not in Gnulib and after all its tests you get the same complaint from @command{make}, then please contact us at @file{bug-gnuastro@@gnu.org}. The cause is probably that a function that we have used is not supported by your operating system and we did not included it along with the source tarball. If the function is available in Gnulib, it can be fixed immediately. @item @cindex @command{CPPFLAGS} @command{$ make}: @emph{Cannot find the headers (.h files) of installed libraries.} Your C preprocessor (CPP) is not looking in the right place. To fix this, configure Gnuastro with an additional @code{CPPFLAGS} like below (assuming the library is installed in @file{/usr/local/include}: @example $ ./configure CPPFLAGS="-I/usr/local/include" @end example If you want to use the libraries for your other programming projects, then export this environment variable in a start-up script similar to the case for @file{LD_LIBRARY_PATH} explained below, also see @ref{Installation directory}. @cindex Tests, only one passes @cindex @file{LD_LIBRARY_PATH} @item @command{$ make check}: @emph{Only the first couple of tests pass, all the rest fail or get skipped.} It is highly likely that when searching for shared libraries, your system does not look into the @file{/usr/local/lib} directory (or wherever you installed Gnuastro or its dependencies). To make sure it is added to the list of directories, add the following line to your @file{~/.bashrc} file and restart your terminal. Do not forget to change @file{/usr/local/lib} if the libraries are installed in other (non-standard) directories. @example export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" @end example You can also add more directories by using a colon `@code{:}' to separate them. See @ref{Installation directory} and @ref{Linking} to learn more on the @code{PATH} variables and dynamic linking respectively. @cindex GPL Ghostscript @item @command{$ make check}: @emph{The tests relying on external programs (for example, @file{fitstopdf.sh} fail.)} This is probably due to the fact that the version number of the external programs is too old for the tests we have preformed. Please update the program to a more recent version. For example, to create a PDF image, you will need GPL Ghostscript, but older versions do not work, we have successfully tested it on version 9.15. Older versions might cause a failure in the test result. @item @cindex @TeX{} @cindex GNU Texinfo @command{$ make pdf}: @emph{The PDF book cannot be made.} To make a PDF book, you need to have the GNU Texinfo program (like any program, the more recent the better). A working @TeX{} program is also necessary, which you can get from Tex Live@footnote{@url{https://www.tug.org/texlive/}}. @item @cindex GNU Libtool After @code{make check}: do not copy the programs' executables to another (for example, the installation) directory manually (using @command{cp}, or @command{mv} for example). In the default configuration@footnote{If you configure Gnuastro with the @option{--disable-shared} option, then the libraries will be statically linked to the programs and this problem will not exist, see @ref{Linking}.}, the program binaries need to link with Gnuastro's shared library which is also built and installed with the programs. Therefore, to run successfully before and after installation, linking modifications need to be made by GNU Libtool at installation time. @command{make install} does this internally, but a simple copy might give linking errors when you run it. If you need to copy the executables, you can do so after installation. @cindex Tests, error in converting images @item @command{$ make} (when bootstrapping): After you have bootstrapped Gnuastro from the version-controlled source, you may confront the following (or a similar) error when converting images (for more on bootstrapping, see @ref{Bootstrapping}): @example @code{convert: attempt to perform an operation not allowed by the security policy `gs' @ error/delegate.c/ExternalDelegateCommand/378.} @end example This error is a known issue@footnote{@url{https://wiki.archlinux.org/title/ImageMagick}} with @code{ImageMagick} security policies in some operating systems. In short, @code{imagemagick} uses Ghostscript for PDF, EPS, PS and XPS parsing. However, because some security vulnerabilities have been found in Ghostscript@footnote{@url{https://security.archlinux.org/package/ghostscript}}, by default, ImageMagick may be compiled without Ghostscript library. In such cases, if allowed, ImageMagick will fall back to the external @command{gs} command instead of the library. But this may be disabled with the following (or a similar) lines in @code{/etc/ImageMagick-7/policy.xml} (anything related to PDF, PS, or Ghostscript). @example <policy domain="delegate" rights="none" pattern="gs" /> <policy domain="module" rights="none" pattern="@{PS,PDF,XPS@}" /> @end example To fix this problem, simply comment such lines (by placing a @code{<!--} before each statement/line and @code{-->} at the end of that statement/line). @end itemize @noindent If your problem was not listed above, please file a bug report (@ref{Report a bug}). @node Common program behavior, Data containers, Installation, Top @chapter Common program behavior All the programs in Gnuastro share a set of common behavior mainly to do with user interaction to facilitate their usage and development. This includes how to feed input datasets into the programs, how to configure them, specifying the outputs, numerical data types, treating columns of information in tables, etc. This chapter is devoted to describing this common behavior in all programs. Because the behaviors discussed here are common to several programs, they are not repeated in each program's description. In @ref{Command-line}, a very general description of running the programs on the command-line is discussed, like difference between arguments and options, as well as options that are common/shared between all programs. None of Gnuastro's programs keep any internal configuration value (values for their different operational steps), they read their configuration primarily from the command-line, then from specific files in directory, user, or system-wide settings. Using these configuration files can greatly help reproducible and robust usage of Gnuastro, see @ref{Configuration files} for more. It is not possible to always have the different options and configurations of each program on the top of your head. It is very natural to forget the options of a program, their current default values, or how it should be run and what it did. Gnuastro's programs have multiple ways to help you refresh your memory in multiple levels (just an option name, a short description, or fast access to the relevant section of the manual. See @ref{Getting help} for more for more on benefiting from this very convenient feature. Many of the programs use the multi-threaded character of modern CPUs, in @ref{Multi-threaded operations} we will discuss how you can configure this behavior, along with some tips on making best use of them. In @ref{Numeric data types}, we will review the various types to store numbers in your datasets: setting the proper type for the usage context@footnote{For example, if the values in your dataset can only be integers between 0 or 65000, store them in a unsigned 16-bit type, not 64-bit floating point type (which is the default in most systems). It takes four times less space and is much faster to process.} can greatly improve the file size and also speed of reading, writing or processing them. We will then look into the recognized table formats in @ref{Tables} and how large datasets are broken into tiles, or mesh grid in @ref{Tessellation}. Finally, we will take a look at the behavior regarding output files: @ref{Automatic output} describes how the programs set a default name for their output when you do not give one explicitly (using @option{--output}). When the output is a FITS file, all the programs also store some very useful information in the header that is discussed in @ref{Output FITS files}. @menu * Command-line:: How to use the command-line. * Configuration files:: Values for unspecified variables. * Getting help:: Getting more information on the go. * Multi-threaded operations:: How threads are managed in Gnuastro. * Numeric data types:: Different types and how to specify them. * Memory management:: How memory is allocated (in RAM or HDD/SSD). * Tables:: Recognized table formats. * Tessellation:: Tile the dataset into non-overlapping bins. * Automatic output:: About automatic output names. * Output FITS files:: Common properties when outputs are FITS. * Numeric locale:: Decimal point printed like 0.5 instead of 0,5. @end menu @node Command-line, Configuration files, Common program behavior, Common program behavior @section Command-line Gnuastro's programs are customized through the standard Unix-like command-line environment and GNU style command-line options. Both are very common in many Unix-like operating system programs. In @ref{Arguments and options} we will start with the difference between arguments and options and elaborate on the GNU style of options. Afterwards, in @ref{Common options}, we will go into the detailed list of all the options that are common to all the programs in Gnuastro. @menu * Arguments and options:: Different ways to specify inputs and configuration. * Common options:: Options that are shared between all programs. * Shell TAB completion:: Customized TAB completion in Gnuastro. * Standard input:: Using output of another program as input. * Shell tips:: Useful tips and tricks for program usage. @end menu @node Arguments and options, Common options, Command-line, Command-line @subsection Arguments and options @cindex Shell @cindex Options to programs @cindex Command-line options @cindex Arguments to programs @cindex Command-line arguments When you type a command on the command-line, it is passed onto the shell (a generic name for the program that manages the command-line) as a string of characters. As an example, see the ``Invoking ProgramName'' sections in this manual for some examples of commands with each program, like @ref{Invoking asttable}, @ref{Invoking astfits}, or @ref{Invoking aststatistics}. The shell then brakes up your string into separate @emph{tokens} or @emph{words} using any @emph{metacharacters} (like white-space, tab, @command{|}, @command{>} or @command{;}) that are in the string. On the command-line, the first thing you usually enter is the name of the program you want to run. After that, you can specify two types of tokens: @emph{arguments} and @emph{options}. In the GNU-style, arguments are those tokens that are not preceded by any hyphens (@command{-}, see @ref{Arguments}). Here is one example: @example $ astcrop --center=53.162551,-27.789676 -w10/3600 --mode=wcs udf.fits @end example In the example above, we are running @ref{Crop} to crop a region of width 10 arc-seconds centered at the given RA and Dec from the input Hubble Ultra-Deep Field (UDF) FITS image. Here, the argument is @file{udf.fits}. Arguments are most commonly the input file names containing your data. Options start with one or two hyphens, followed by an identifier for the option (the option's name, for example, @option{--center}, @option{-w}, @option{--mode} in the example above) and its value (anything after the option name, or the optional @key{=} character). Through options you can configure how the program runs (interprets the data you provided). @vindex --help @vindex --usage @cindex Mandatory arguments Arguments can be mandatory and optional and unlike options, they do not have any identifiers. Hence, when there multiple arguments, their order might also matter (for example, in @command{cp} which is used for copying one file to another location). The outputs of @option{--usage} and @option{--help} shows which arguments are optional and which are mandatory, see @ref{--usage}. As their name suggests, @emph{options} can be considered to be optional and most of the time, you do not have to worry about what order you specify them in. When the order does matter, or the option can be invoked multiple times, it is explicitly mentioned in the ``Invoking ProgramName'' section of each program (this is a very important aspect of an option). @cindex Metacharacters on the command-line In case your arguments or option values contain any of the shell's meta-characters, you have to quote them. If there is only one such character, you can use a backslash (@command{\}) before it. If there are multiple, it might be easier to simply put your whole argument or option value inside of double quotes (@command{"}). In such cases, everything inside the double quotes will be seen as one token or word. @cindex HDU @cindex Header data unit For example, let's say you want to specify the header data unit (HDU) of your FITS file using a complex expression like `@command{3; images(exposure > 100)}'. If you simply add these after the @option{--hdu} (@option{-h}) option, the programs in Gnuastro will read the value to the HDU option as `@command{3}' and run. Then, the shell will attempt to run a separate command `@command{images(exposure > 100)}' and complain about a syntax error. This is because the semicolon (@command{;}) is an `end of command' character in the shell. To solve this problem you can simply put double quotes around the whole string you want to pass to @option{--hdu} as seen below: @example $ astcrop --hdu="3; images(exposure > 100)" image.fits @end example @menu * Arguments:: For specifying the main input files/operations. * Options:: For configuring the behavior of the program. @end menu @node Arguments, Options, Arguments and options, Arguments and options @subsubsection Arguments In Gnuastro, arguments are almost exclusively used as the input data file names. Please consult the first few paragraph of the ``Invoking ProgramName'' section for each program for a description of what it expects as input, how many arguments, or input data, it accepts, or in what order. Everything particular about how a program treats arguments, is explained under the ``Invoking ProgramName'' section for that program. @cindex Filename suffix @cindex Suffix (filename) @cindex FITS filename suffixes Generally, if there is a standard file name suffix for a particular format, that filename extension is checked to identify their format. In astronomy (and thus Gnuastro), FITS is the preferred format for inputs and outputs, so the focus here and throughout this book is on FITS. However, other formats are also accepted in special cases, for example, @ref{ConvertType} also accepts JPEG or TIFF inputs, and writes JPEG, EPS or PDF files. The recognized suffixes for these formats are listed there. The list below shows the recognized suffixes for FITS data files in Gnuastro's programs. However, in some scenarios FITS writers may not append a suffix to the file, or use a non-recognized suffix (not in the list below). Therefore if a FITS file is expected, but it does not have any of these suffixes, Gnuastro programs will look into the contents of the file and if it does conform with the FITS standard, the file will be used. Just note that checking about 5 characters at the end of a name string is much more efficient than opening and checking the contents of a file, so it is generally recommended to have a recognized FITS suffix. @itemize @item @file{.fits}: The standard file name ending of a FITS image. @item @file{.fit}: Alternative (3 character) FITS suffix. @item @file{.fits.Z}: A FITS image compressed with @command{compress}. @item @file{.fits.gz}: A FITS image compressed with GNU zip (gzip). @item @file{.fits.fz}: A FITS image compressed with @command{fpack}. @item @file{.imh}: IRAF format image file. @end itemize Throughout this book and in the command-line outputs, whenever we want to generalize all such astronomical data formats in a text place-holder, we will use @file{ASTRdata} and assume that the extension is also part of this name. Any file ending with these names is directly passed on to CFITSIO to read. Therefore you do not necessarily have to have these files on your computer, they can also be located on an FTP or HTTP server too, see the CFITSIO manual for more information. CFITSIO has its own error reporting techniques, if your input file(s) cannot be opened, or read, those errors will be printed prior to the final error by Gnuastro. @node Options, , Arguments, Arguments and options @subsubsection Options @cindex GNU style options @cindex Options, GNU style @cindex Options, short (@option{-}) and long (@option{--}) Command-line options allow configuring the behavior of a program in all GNU/Linux applications for each particular execution on a particular input data. A single option can be called in two ways: @emph{long} or @emph{short}. All options in Gnuastro accept the long format which has two hyphens an can have many characters (for example, @option{--hdu}). Short options only have one hyphen (@key{-}) followed by one character (for example, @option{-h}). You can see some examples in the list of options in @ref{Common options} or those for each program's ``Invoking ProgramName'' section. Both formats are shown for those which support both. First the short is shown then the long. Usually, the short options are handy when you are writing on the command-line and want to save keystrokes and time. The long options are good for shell scripts, where you are not usually rushing. Long options provide a level of documentation, since they are more descriptive and less cryptic. Usually after a few months of not running a program, the short options will be forgotten and reading your previously written script will not be easy. @cindex On/Off options @cindex Options, on/off Some options need to be given a value if they are called and some do not. You can think of the latter type of options as on/off options. These two types of options can be distinguished using the output of the @option{--help} and @option{--usage} options, which are common to all GNU software, see @ref{Getting help}. In Gnuastro we use the following strings to specify when the option needs a value and what format that value should be in. More specific tests will be done in the program and if the values are out of range (for example, negative when the program only wants a positive value), an error will be reported. @vtable @option @item INT The value is read as an integer. @item FLT The value is read as a float. There are generally two types, depending on the context. If they are for fractions, they will have to be less than or equal to unity. @item STR The value is read as a string of characters. For example, column names in a table, or HDU names in a multi-extension FITS file. Other examples include human-readable settings by some programs like the @option{--domain} option of the Convolve program that can be either @code{spatial} or @code{frequency} (to specify the type of convolution, see @ref{Convolve}). @item FITS @r{or} FITS/TXT The value should be a file (most commonly FITS). In many cases, other formats may also be accepted (for example, input tables can be FITS or plain-text, see @ref{Recognized table formats}). @end vtable @noindent @cindex Values to options @cindex Option values To specify a value in the short format, simply put the value after the option. Note that since the short options are only one character long, you do not have to type anything between the option and its value. For the long option you either need white space or an @option{=} sign, for example, @option{-h2}, @option{-h 2}, @option{--hdu 2} or @option{--hdu=2} are all equivalent. The short format of on/off options (those that do not need values) can be concatenated for example, these two hypothetical sequences of options are equivalent: @option{-a -b -c4} and @option{-abc4}. As an example, consider the following command to run Crop: @example $ astcrop -Dr3 --wwidth 3 catalog.txt --deccol=4 ASTRdata @end example @noindent The @command{$} is the shell prompt, @command{astcrop} is the program name. There are two arguments (@command{catalog.txt} and @command{ASTRdata}) and four options, two of them given in short format (@option{-D}, @option{-r}) and two in long format (@option{--width} and @option{--deccol}). Three of them require a value and one (@option{-D}) is an on/off option. @vindex --printparams @cindex Options, abbreviation @cindex Long option abbreviation If an abbreviation is unique between all the options of a program, the long option names can be abbreviated. For example, instead of typing @option{--printparams}, typing @option{--print} or maybe even @option{--pri} will be enough, if there are conflicts, the program will warn you and show you the alternatives. Finally, if you want the argument parser to stop parsing arguments beyond a certain point, you can use two dashes: @option{--}. No text on the command-line beyond these two dashes will be parsed. @cindex Repeated options @cindex Options, repeated Gnuastro has two types of options with values, those that only take a single value are the most common type. If these options are repeated or called more than once on the command-line, the value of the last time it was called will be assigned to it. This is very useful when you are testing/experimenting. Let's say you want to make a small modification to one option value. You can simply type the option with a new value in the end of the command and see how the script works. If you are satisfied with the change, you can remove the original option for human readability. If the change was not satisfactory, you can remove the one you just added and not worry about forgetting the original value. Without this capability, you would have to memorize or save the original value somewhere else, run the command and then change the value again which is not at all convenient and is potentially cause lots of bugs. On the other hand, some options can be called multiple times in one run of a program and can thus take multiple values (for example, see the @option{--column} option in @ref{Invoking asttable}. In these cases, the order of stored values is the same order that you specified on the command-line. @cindex Configuration files @cindex Default option values Gnuastro's programs do not keep any internal default values, so some options are mandatory and if they do not have a value, the program will complain and abort. Most programs have many such options and typing them by hand on every call is impractical. To facilitate the user experience, after parsing the command-line, Gnuastro's programs read special configuration files to get the necessary values for the options you have not identified on the command-line. These configuration files are fully described in @ref{Configuration files}. @cartouche @noindent @cindex Tilde expansion as option values @strong{CAUTION:} In specifying a file address, if you want to use the shell's tilde expansion (@command{~}) to specify your home directory, leave at least one space between the option name and your value. For example, use @command{-o ~/test}, @command{--output ~/test} or @command{--output= ~/test}. Calling them with @command{-o~/test} or @command{--output=~/test} will disable shell expansion. @end cartouche @cartouche @noindent @strong{CAUTION:} If you forget to specify a value for an option which requires one, and that option is the last one, Gnuastro will warn you. But if it is in the middle of the command, it will take the text of the next option or argument as the value which can cause undefined behavior. @end cartouche @cartouche @noindent @cindex Counting from zero. @strong{NOTE:} In some contexts Gnuastro's counting starts from 0 and in others 1. You can assume by default that counting starts from 1, if it starts from 0 for a special option, it will be explicitly mentioned. @end cartouche @node Common options, Shell TAB completion, Arguments and options, Command-line @subsection Common options @cindex Options common to all programs @cindex Gnuastro common options To facilitate the job of the users and developers, all the programs in Gnuastro share some basic command-line options for the options that are common to many of the programs. The full list is classified as @ref{Input output options}, @ref{Processing options}, and @ref{Operating mode options}. In some programs, some of the options are irrelevant, but still recognized (you will not get an unrecognized option error, but the value is not used). Unless otherwise mentioned, these options are identical between all programs. @menu * Input output options:: Common input/output options. * Processing options:: Options for common processing steps. * Operating mode options:: Common operating mode options. @end menu @node Input output options, Processing options, Common options, Common options @subsubsection Input/Output options These options are to do with the input and outputs of the various programs. @vtable @option @cindex Timeout @cindex Standard input @item --stdintimeout Number of micro-seconds to wait for writing/typing in the @emph{first line} of standard input from the command-line (see @ref{Standard input}). This is only relevant for programs that also accept input from the standard input, @emph{and} you want to manually write/type the contents on the terminal. When the standard input is already connected to a pipe (output of another program), there will not be any waiting (hence no timeout, thus making this option redundant). If the first line-break (for example, with the @key{ENTER} key) is not provided before the timeout, the program will abort with an error that no input was given. Note that this time interval is @emph{only} for the first line that you type. Once the first line is given, the program will assume that more data will come and accept rest of your inputs without any time limit. You need to specify the ending of the standard input, for example, by pressing @key{CTRL-D} after a new line. Note that any input you write/type into a program on the command-line with Standard input will be discarded (lost) once the program is finished. It is only recoverable manually from your command-line (where you actually typed) as long as the terminal is open. So only use this feature when you are sure that you do not need the dataset (or have a copy of it somewhere else). @cindex HDU @cindex Header data unit @item -h STR/INT @itemx --hdu=STR/INT The name or number of the desired Header Data Unit, or HDU, in the FITS image. A FITS file can store multiple HDUs or extensions, each with either an image or a table or nothing at all (only a header). Note that counting of the extensions starts from 0(zero), not 1(one). Counting from 0 is forced on us by CFITSIO which directly reads the value you give with this option (see @ref{CFITSIO}). When specifying the name, case is not important so @command{IMAGE}, @command{image} or @command{ImAgE} are equivalent. CFITSIO has many capabilities to help you find the extension you want, far beyond the simple extension number and name. See CFITSIO manual's ``HDU Location Specification'' section for a very complete explanation with several examples. A @code{#} is appended to the string you specify for the HDU@footnote{With the @code{#} character, CFITSIO will only read the desired HDU into your memory, not all the existing HDUs in the fits file.} and the result is put in square brackets and appended to the FITS file name before calling CFITSIO to read the contents of the HDU for all the programs in Gnuastro. @cartouche @noindent @strong{Default HDU is HDU number 1 (counting from 0):} by default, Gnuastro’s programs assume that their (main/first) input is in HDU number 1 (counting from zero). So if you don’t specify the HDU number, the program will read the input from this HDU. For programs that can take multiple FITS datasets as input (like @ref{Arithmetic}) this default HDU applies to the first input, you still need to call @option{--hdu} for the other inputs. Generally, all Gnuastro's programs write their outputs in HDU number 1 (HDU 0 is reserved for metadata like the configuration parameters that the program was run with). For more on this, see @ref{Fits}. @end cartouche @item -s STR @itemx --searchin=STR Where to match/search for columns when the column identifier was not a number, see @ref{Selecting table columns}. The acceptable values are @command{name}, @command{unit}, or @command{comment}. This option is only relevant for programs that take table columns as input. @item -I @itemx --ignorecase Ignore case while matching/searching column meta-data (in the field specified by the @option{--searchin}). The FITS standard suggests to treat the column names as case insensitive, which is strongly recommended here also but is not enforced. This option is only relevant for programs that take table columns as input. This option is not relevant to @ref{BuildProgram}, hence in that program the short option @option{-I} is used for include directories, not to ignore case. @item -o STR @itemx --output=STR The name of the output file or directory. With this option the automatic output names explained in @ref{Automatic output} are ignored. @item -T STR @itemx --type=STR The data type of the output depending on the program context. This option is not applicable to some programs like @ref{Fits} and will be ignored by them. The different acceptable values to this option are fully described in @ref{Numeric data types}. @item -D @itemx --dontdelete By default, if the output file already exists, Gnuastro's programs will silently delete it and put their own outputs in its place. When this option is activated, if the output file already exists, the programs will not delete it, will warn you, and will abort. @item -K @itemx --keepinputdir In automatic output names, do not remove the directory information of the input file names. As explained in @ref{Automatic output}, if no output name is specified (with @option{--output}), then the output name will be made in the existing directory based on your input's file name (ignoring the directory of the input). If you call this option, the directory information of the input will be kept and the automatically generated output name will be in the same directory as the input (usually with a suffix added). Note that his is only relevant if you are running the program in a different directory than the input data. @item -t STR @itemx --tableformat=STR The output table's type. This option is only relevant when the output is a table and its format cannot be deduced from its filename. For example, if a name ending in @file{.fits} was given to @option{--output}, then the program knows you want a FITS table. But there are two types of FITS tables: FITS ASCII, and FITS binary. Thus, with this option, the program is able to identify which type you want. The currently recognized values to this option are: @item --wcslinearmatrix=STR Select the linear transformation matrix of the output's WCS. This option only takes two values: @code{pc} (for the @code{PCi_j} formalism) and @code{cd} (for @code{CDi_j}). For more on the different formalisms, please see Section 8.1 of the FITS standard@footnote{@url{https://fits.gsfc.nasa.gov/standard40/fits_standard40aa-le.pdf}}, version 4.0. @cindex @code{CDELT} In short, in the @code{PCi_j} formalism, we only keep the linear rotation matrix in these keywords and put the scaling factor (or the pixel scale in astronomical imaging) in the @code{CDELTi} keywords. In the @code{CDi_j} formalism, we blend the scaling into the rotation into a single matrix and keep that matrix in these FITS keywords. By default, Gnuastro uses the @code{PCi_j} formalism, because it greatly helps in human readability of the raw keywords and is also the default mode of WCSLIB. However, in some circumstances it may be necessary to have the keywords in the CD format; for example, when you need to feed the outputs into other software that do not follow the full FITS standard and only recognize the @code{CDi_j} formalism. @table @command @item txt A plain text table with white-space characters between the columns (see @ref{Gnuastro text table format}). @item fits-ascii A FITS ASCII table (see @ref{Recognized table formats}). @item fits-binary A FITS binary table (see @ref{Recognized table formats}). @end table @item --outfitsnoconfig Do not write any of the program's metadata (option values or versions and dates) into the 0-th HDU of the output FITS file, see @ref{Output FITS files}. @item --outfitsnodate Do not write the @code{DATE} or @code{DATEUTC} keywords into the 0-th HDU of the output FITS file, see @ref{Output FITS files}. @item --outfitsnocommit Do not write the @code{COMMIT} keyword into the 0-th HDU of the output FITS file, see @ref{Output FITS files}. @item --outfitsnoversions Do not write the versions of any dependency software into the 0-th HDU of the output FITS file, see @ref{Output FITS files}. @end vtable @node Processing options, Operating mode options, Input output options, Common options @subsubsection Processing options Some processing steps are common to several programs, so they are defined as common options to all programs. Note that this class of common options is thus necessarily less common between all the programs than those described in @ref{Input output options}, or @ref{Operating mode options} options. Also, if they are irrelevant for a program, these options will not display in the @option{--help} output of the program. @table @option @item --minmapsize=INT The minimum size (in bytes) to memory-map a processing/internal array as a file (on the non-volatile HDD/SSD), and not use the system's RAM. Before using this option, please read @ref{Memory management}. By default processing arrays will only be memory-mapped to a file when the RAM is full. With this option, you can force the memory-mapping, even when there is enough RAM. To ensure this default behavior, the pre-defined value to this option is an extremely large value (larger than any existing RAM). Please note that using a non-volatile file (in the HDD/SDD) instead of RAM can significantly increase the program's running time, especially on HDDs (where read/write is slower). Also, note that the number of memory-mapped files that your kernel can support is limited. So when this option is necessary, it is best to give it values larger than 1 megabyte (@option{--minmapsize=1000000}). You can then decrease it for a specific program's invocation on a large input after you see memory issues arise (for example, an error, or the program not aborting and fully consuming your memory). If you see randomly named files remaining in this directory when the program finishes normally, please send us a bug report so we address the problem, see @ref{Report a bug}. @cartouche @noindent @strong{Limited number of memory-mapped files:} The operating system kernels usually support a limited number of memory-mapped files. Therefore never set @code{--minmapsize} to zero or a small number of bytes (so too many files are created). If the kernel capacity is exceeded, the program will crash. @end cartouche @item --quietmmap Do not print any message when an array is stored in non-volatile memory (HDD/SSD) and not RAM, see the description of @option{--minmapsize} (above) for more. @item -Z INT[,INT[,...]] @itemx --tilesize=[,INT[,...]] The size of regular tiles for tessellation, see @ref{Tessellation}. For each dimension an integer length (in units of data-elements or pixels) is necessary. If the number of input dimensions is different from the number of values given to this option, the program will stop with an error. Values must be separated by commas (@key{,}) and can also be fractions (for example, @code{4/2}). If they are fractions, the result must be an integer, otherwise an error will be printed. @item -M INT[,INT[,...]] @itemx --numchannels=INT[,INT[,...]] The number of channels for larger input tessellation, see @ref{Tessellation}. The number and types of acceptable values are similar to @option{--tilesize}. The only difference is that instead of length, the integers values given to this option represent the @emph{number} of channels, not their size. @item -F FLT @itemx --remainderfrac=FLT The fraction of remainder size along all dimensions to add to the first tile. See @ref{Tessellation} for a complete description. This option is only relevant if @option{--tilesize} is not exactly divisible by the input dataset's size in a dimension. If the remainder size is larger than this fraction (compared to @option{--tilesize}), then the remainder size will be added with one regular tile size and divided between two tiles at the start and end of the given dimension. @item --workoverch Ignore the channel borders for the high-level job of the given application. As a result, while the channel borders are respected in defining the small tiles (such that no tile will cross a channel border), the higher-level program operation will ignore them, see @ref{Tessellation}. @item --checktiles Make a FITS file with the same dimensions as the input but each pixel is replaced with the ID of the tile that it is associated with. Note that the tile IDs start from 0. See @ref{Tessellation} for more on Tiling an image in Gnuastro. @item --oneelempertile When showing the tile values (for example, with @option{--checktiles}, or when the program's output is tessellated) only use one element for each tile. This can be useful when only the relative values given to each tile compared to the rest are important or need to be checked. Since the tiles usually have a large number of pixels within them the output will be much smaller, and so easier to read, write, store, or send. Note that when the full input size in any dimension is not exactly divisible by the given @option{--tilesize} in that dimension, the edge tile(s) will have different sizes (in units of the input's size), see @option{--remainderfrac}. But with this option, all displayed values are going to have the (same) size of one data-element. Hence, in such cases, the image proportions are going to be slightly different with this option. If your input image is not exactly divisible by the tile size and you want one value per tile for some higher-level processing, all is not lost though. You can see how many pixels were within each tile (for example, to weight the values or discard some for later processing) with Gnuastro's Statistics (see @ref{Statistics}) as shown below. The output FITS file is going to have two extensions, one with the median calculated on each tile and one with the number of elements that each tile covers. You can then use the @code{where} operator in @ref{Arithmetic} to set the values of all tiles that do not have the regular area to a blank value. @example $ aststatistics --median --number --ontile input.fits \ --oneelempertile --output=o.fits $ REGULAR_AREA=1600 # Check second extension of `o.fits'. $ astarithmetic o.fits o.fits $REGULAR_AREA ne nan where \ -h1 -h2 @end example Note that if @file{input.fits} also has blank values, then the median on tiles with blank values will also be ignored with the command above (which is desirable). @item --inteponlyblank When values are to be interpolated, only change the values of the blank elements, keep the non-blank elements untouched. @item --interpmetric=STR @cindex Radial metric @cindex Taxicab metric @cindex Manhattan metric @cindex Metric: Manhattan, Taxicab, Radial The metric to use for finding nearest neighbors. Currently it only accepts the Manhattan (or taxicab) metric with @code{manhattan}, or the radial metric with @code{radial}. The Manhattan distance between two points is defined with @mymath{|\Delta{x}|+|\Delta{y}|}. Thus the Manhattan metric has the advantage of being fast, but at the expense of being less accurate. The radial distance is the standard definition of distance in a Euclidean space: @mymath{\sqrt{\Delta{x}^2+\Delta{y}^2}}. It is accurate, but the multiplication and square root can slow down the processing. @item --interpnumngb=INT The number of nearby non-blank neighbors to use for interpolation. @end table @node Operating mode options, , Processing options, Common options @subsubsection Operating mode options Another group of options that are common to all the programs in Gnuastro are those to do with the general operation of the programs. The explanation for those that are not only limited to Gnuastro but are common to all GNU programs start with (GNU option). @vtable @option @item -- (GNU option) Stop parsing the command-line. This option can be useful in scripts or when using the shell history. Suppose you have a long list of options, and want to see if removing some of them (to read from configuration files, see @ref{Configuration files}) can give a better result. If the ones you want to remove are the last ones on the command-line, you do not have to delete them, you can just add @option{--} before them and if you do not get what you want, you can remove the @option{--} and get the same initial result. @item --usage (GNU option) Only print the options and arguments and abort. This is very useful for when you know the what the options do, and have just forgot their long/short identifiers, see @ref{--usage}. @item -? @itemx --help (GNU option) Print all options with an explanation and abort. Adding this option will print all the options in their short and long formats, also displaying which ones need a value if they are called (with an @option{=} after the long format followed by a string specifying the format, see @ref{Options}). A short explanation is also given for what the option is for. The program will quit immediately after the message is printed and will not do any form of processing, see @ref{--help}. @item -V @itemx --version (GNU option) Print a short message, showing the full name, version, copyright information and program authors and abort. On the first line, it will print the official name (not executable name) and version number of the program. Following this is a blank line and a copyright information. The program will not run. @item -q @itemx --quiet Do not report steps. All the programs in Gnuastro that have multiple major steps will report their steps for you to follow while they are operating. If you do not want to see these reports, you can call this option and only error/warning messages will be printed. If the steps are done very fast (depending on the properties of your input) disabling these reports will also decrease running time. @item --cite Print all necessary information to cite and acknowledge Gnuastro in your published papers. With this option, the programs will print the Bib@TeX{} entry to include in your paper for Gnuastro in general, and the particular program's paper (if that program comes with a separate paper). It will also print the necessary acknowledgment statement to add in the respective section of your paper and it will abort. For a more complete explanation, please see @ref{Acknowledgments}. Citations and acknowledgments are vital for the continued work on Gnuastro. Gnuastro started, and is continued, based on separate research projects. So if you find any of the tools offered in Gnuastro to be useful in your research, please use the output of this command to cite and acknowledge the program (and Gnuastro) in your research paper. Thank you. Gnuastro is still new, there is no separate paper only devoted to Gnuastro yet. Therefore currently the paper to cite for Gnuastro is the paper for NoiseChisel which is the first published paper introducing Gnuastro to the astronomical community. Upon reaching a certain point, a paper completely devoted to describing Gnuastro's many functionalities will be published, see @ref{GNU Astronomy Utilities 1.0}. @item -P @itemx --printparams With this option, Gnuastro's programs will read your command-line options and all the configuration files. If there is no problem (like a missing parameter or a value in the wrong format or range) and immediately before actually running, the programs will print the full list of option names, values and descriptions, sorted and grouped by context and abort. They will also report the version number, the date they were configured on your system and the time they were reported. As an example, you can give your full command-line options and even the input and output file names and finally just add @option{-P} to check if all the parameters are finely set. If everything is OK, you can just run the same command (easily retrieved from the shell history, with the top arrow key) and simply remove the last two characters that showed this option. No program will actually start its processing when this option is called. The otherwise mandatory arguments for each program (for example, input image or catalog files) are no longer required when you call this option. @item --config=STR Parse @option{STR} as a configuration file name, immediately when this option is confronted (see @ref{Configuration files}). The @option{--config} option can be called multiple times in one run of any Gnuastro program on the command-line or in the configuration files. In any case, it will be immediately read (before parsing the rest of the options on the command-line, or lines in a configuration file). If the given file does not exist or cannot be read for any reason, the program will print a warning and continue its processing. The warning can be suppressed with @option{--quiet}. Note that by definition, options on the command-line still take precedence over those in any configuration file, including the file(s) given to this option if they are called before it. Also see @option{--lastconfig} and @option{--onlyversion} on how this option can be used for reproducible results. You can use @option{--checkconfig} (below) to check/confirm the parsing of configuration files. @item --checkconfig Print options and their values, within the command-line or configuration files, as they are parsed (see @ref{Configuration file precedence}). If an option has already been set, or is ignored by the program, this option will also inform you with special values like @code{--ALREADY-SET--}. Only options that are parsed after this option are printed, so to see the parsing of all input options, it is recommended to put this option immediately after the program name before any other options. @cindex Debug This is a very good option to confirm where the value of each option is has been defined in scenarios where there are multiple configuration files (for debugging). @item --config-prefix=STR Accept option names in configuration files that start with the given prefix. Since order matters when reading custom configuration files, this option should be called @strong{before} the @option{--config} option(s) that contain options with the given prefix. This option does not affect the options within configuration files that have the standard name (without a prefix). This gives unique features to Gnuastro's configuration files, especially in large pipelines. Let's demonstrate this with the simple scenario below. You have multiple configuration files for different instances of one program (let's assume @file{nc-a.conf} and @file{nc-b.conf}). At the same time, want to load all the option names/values into your shell as environment variables (for example with @code{source}). This happens when you want to use the options as shell variables in other parts of the your pipeline. If the two configuration files have different values for the same option (as shown below), and you don't use @code{--config-prefix}, the shell will over-write the common option values between the configuration files. But thanks to @code{--config-prefix}, you can give a different prefix for the different instances of the same option in different configuration files. @example $ cat nc-a.conf a_tilesize=20,20 $ cat nc-b.conf b_tilesize=40,40 ## Load configuration files as shell scripts (to define the ## option name and values as shell variables with values). ## Just note that 'source' only takes one file at a time. $ for c in nc-*.conf; do source $c; done $ astnoisechisel img.fits \ --config=nc-a.conf --config-prefix=a_ $ echo "NoiseChisel run with --tilesize=$a_tilesize" $ astnoisechisel img.fits \ --config=nc-b.conf --config-prefix=b_ $ echo "NoiseChisel run with --tilesize=$b_tilesize" @end example @item -S @itemx --setdirconf Update the current directory configuration file for the Gnuastro program and quit. The full set of command-line and configuration file options will be parsed and options with a value will be written in the current directory configuration file for this program (see @ref{Configuration files}). If the configuration file or its directory does not exist, it will be created. If a configuration file exists it will be replaced (after it, and all other configuration files have been read). In any case, the program will not run. This is the recommended method@footnote{Alternatively, you can use your favorite text editor.} to edit/set the configuration file for all future calls to Gnuastro's programs. It will internally check if your values are in the correct range and type and save them according to the configuration file format, see @ref{Configuration file format}. So if there are unreasonable values to some options, the program will notify you and abort before writing the final configuration file. When this option is called, the otherwise mandatory arguments, for example input image or catalog file(s), are no longer mandatory (since the program will not run). @item -U @itemx --setusrconf Update the user configuration file and quit (see @ref{Configuration files}). See explanation under @option{--setdirconf} for more details. @item --lastconfig This is the last configuration file that must be read. When this option is confronted in any stage of reading the options (on the command-line or in a configuration file), no other configuration file will be parsed, see @ref{Configuration file precedence} and @ref{Current directory and User wide}. Like all on/off options, on the command-line, this option does not take any values. But in a configuration file, it takes the values of @option{0} or @option{1}, see @ref{Configuration file format}. If it is present in a configuration file with a value of @option{0}, then all later occurrences of this option will be ignored. @item --onlyversion=STR Only run the program if Gnuastro's version is exactly equal to @option{STR} (see @ref{Version numbering}). Note that it is not compared as a number, but as a string of characters, so @option{0}, or @option{0.0} and @option{0.00} are different. If the running Gnuastro version is different, then this option will report an error and abort as soon as it is confronted on the command-line or in a configuration file. If the running Gnuastro version is the same as @option{STR}, then the program will run as if this option was not called. This is useful if you want your results to be exactly reproducible and not mistakenly run with an updated/newer or older version of the program. Besides internal algorithmic/behavior changes in programs, the existence of options or their names might change between versions (especially in these earlier versions of Gnuastro). Hence, when using this option (probably in a script or in a configuration file), be sure to call it before other options. The benefit is that, when the version differs, the other options will not be parsed and you, or your collaborators/users, will not get errors saying an option in your configuration does not exist in the running version of the program. Here is one example of how this option can be used in conjunction with the @option{--lastconfig} option. Let's assume that you were satisfied with the results of this command: @command{astnoisechisel image.fits --snquant=0.95} (along with various options set in various configuration files). You can save the state of NoiseChisel and reproduce that exact result on @file{image.fits} later by following these steps (the extra spaces, and @key{\}, are only for easy readability, if you want to try it out, only one space between each token is enough). @example $ echo "onlyversion X.XX" > reproducible.conf $ echo "lastconfig 1" >> reproducible.conf $ astnoisechisel image.fits --snquant=0.95 -P \ >> reproducible.conf @end example @option{--onlyversion} was available from Gnuastro 0.0, so putting it immediately at the start of a configuration file will ensure that later, you (or others using different version) will not get a non-recognized option error in case an option was added/removed. @option{--lastconfig} will inform the installed NoiseChisel to not parse any other configuration files. This is done because we do not want the user's user-wide or system wide option values affecting our results. Finally, with the third command, which has a @option{-P} (short for @option{--printparams}), NoiseChisel will print all the option values visible to it (in all the configuration files) and the shell will append them to @file{reproduce.conf}. Hence, you do not have to worry about remembering the (possibly) different options in the different configuration files. Afterwards, if you run NoiseChisel as shown below (telling it to read this configuration file with the @file{--config} option). You can be sure that there will either be an error (for version mismatch) or it will produce exactly the same result that you got before. @example $ astnoisechisel --config=reproducible.conf @end example @item --log Some programs can generate extra information about their outputs in a log file. When this option is called in those programs, the log file will also be printed. If the program does not generate a log file, this option is ignored. @cartouche @noindent @strong{@option{--log} is not thread-safe}: The log file usually has a fixed name. Therefore if two simultaneous calls (with @option{--log}) of a program are made in the same directory, the program will try to write to he same file. This will cause problems like unreasonable log file, undefined behavior, or a crash. @end cartouche @cindex CPU threads, set number @cindex Number of CPU threads to use @item -N INT @itemx --numthreads=INT Use @option{INT} CPU threads when running a Gnuastro program (see @ref{Multi-threaded operations}). If the value is zero (@code{0}), or this option is not given on the command-line or any configuration file, the value will be determined at run-time: the maximum number of threads available to the system when you run a Gnuastro program. Note that multi-threaded programming is only relevant to some programs. In others, this option will be ignored. @end vtable @node Shell TAB completion, Standard input, Common options, Command-line @subsection Shell TAB completion (highly customized) @cartouche @noindent @strong{Under development:} Gnuastro's TAB completion in Bash already greatly improves usage of Gnuastro on the command-line, but still under development and not yet complete. If you are interested to try it out, please go ahead and activate it (as described below), we encourage this. But please have in mind that there are known issues@footnote{@url{http://savannah.gnu.org/bugs/index.php?group=gnuastro&category_id=128}} and you may find new issues. If you do, please get in touch with us as described in @ref{Report a bug}. TAB completion is currently only implemented in the following programs: Arithmetic, BuildProgram, ConvertType, Convolve, CosmicCalculator, Crop, Fits and Table. For progress on this task, please see Task 15799@footnote{@url{https://savannah.gnu.org/task/?15799}}. @end cartouche @cindex Bash auto-complete @cindex Completion in the shell @cindex Bash programmable completion @cindex Autocomplete (in the shell/Bash) Bash provides a built-in feature called @emph{programmable completion}@footnote{@url{https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html}} to help increase interactive workflow efficiency and minimize the number of keystrokes @emph{and} the need to memorize things. It is also known as TAB completion, bash completion, auto-completion, or word completion. Completion is activated by pressing @key{[TAB]} while you are typing a command. For file arguments this is the default behavior already and you have probably used it a lot with any command-line program. Besides this simple/default mode, Bash also enables a high level of customization features for its completion. These features have been extensively used in Gnuastro to improve your work efficiency@footnote{To learn how Gnuastro implements TAB completion in Bash, see @ref{Bash programmable completion}.}. For example, if you are running @code{asttable} (which only accepts files containing a table), and you press @key{[TAB]}, it will only suggest files containing tables. As another example, if an option needs image HDUs within a FITS file, pressing @key{[TAB]} will only suggest the image HDUs (and not other possibly existing HDUs that contain tables, or just metadata). Just note that the file name has to be already given on the command-line before reaching such options (that look into the contents of a file). But TAB completion is not limited to file types or contents. Arguments/Options that take certain fixed string values will directly suggest those strings with TAB, and completely ignore the file structure (for example, spectral line names in @ref{Invoking astcosmiccal})! As another example, the option @option{--numthreads} option (to specify the number of threads to use by the program), will find the number of available threads on the system, and suggest the possible numbers with a TAB! To activate Gnuastro's custom TAB completion in Bash, you need to put the following line in one of your Bash startup files (for example, @file{~/.bashrc}). If you installed Gnuastro using the steps of @ref{Quick start}, you should have already done this (the command just after @command{sudo make install}). For a list of (and discussion on) Bash startup files and installation directories see @ref{Installation directory}. Of course, if Gnuastro was installed in a custom location, replace the `@file{/usr/local}' part of the line below to the value that was given to @option{--prefix} during Gnuastro's configuration@footnote{In case you do not know the installation directory of Gnuastro on your system, you can find out with this command: @code{which astfits | sed -e"s|/bin/astfits||"}}. @example # Enable Gnuastro's TAB completion source /usr/local/share/gnuastro/completion.bash @end example After adding the line above in a Bash startup file, TAB completion will always be activated in any new terminal. To see if it has been activated, try it out with @command{asttable [TAB][TAB]} and @command{astarithmetic [TAB][TAB]} in a directory that contains tables and images. The first will only suggest the files with a table, and the second, only those with an image. @cartouche @noindent @strong{TAB completion only works with long option names:} As described above, short options are much more complex to generalize, therefore TAB completion is only available for long options. But do not worry! TAB completion also involves option names, so if you just type @option{--a[TAB][TAB]}, you will get the list of options that start with an @option{--a}. Therefore as a side-effect of TAB completion, your commands will be far more human-readable with minimal key strokes. @end cartouche @node Standard input, Shell tips, Shell TAB completion, Command-line @subsection Standard input @cindex Standard input @cindex Stream: standard input The most common way to feed the primary/first input dataset into a program is to give its filename as an argument (discussed in @ref{Arguments}). When you want to run a series of programs in sequence, this means that each will have to keep the output of each program in a separate file and re-type that file's name in the next command. This can be very slow and frustrating (mis-typing a file's name). @cindex Standard output stream @cindex Stream: standard output To solve the problem, the founders of Unix defined pipes to directly feed the output of one program (its ``Standard output'' stream) into the ``standard input'' of a next program. This removes the need to make temporary files between separate processes and became one of the best demonstrations of the Unix-way, or Unix philosophy. Every program has three streams identifying where it reads/writes non-file inputs/outputs: @emph{Standard input}, @emph{Standard output}, and @emph{Standard error}. When a program is called alone, all three are directed to the terminal that you are using. If it needs an input, it will prompt you for one and you can type it in. Or, it prints its results in the terminal for you to see. For example, say you have a FITS table/catalog containing the B and V band magnitudes (@code{MAG_B} and @code{MAG_V} columns) of a selection of galaxies along with many other columns. If you want to see only these two columns in your terminal, can use Gnuastro's @ref{Table} program like below: @example $ asttable cat.fits -cMAG_B,MAG_V @end example Through the Unix pipe mechanism, when the shell confronts the pipe character (@key{|}), it connects the standard output of the program before the pipe, to the standard input of the program after it. So it is literally a ``pipe'': everything that you would see printed by the first program on the command (without any pipe), is now passed to the second program (and not seen by you). @cindex AWK @cindex GNU AWK To continue the previous example, let's say you want to see the B-V color. To do this, you can pipe Table's output to AWK (a wonderful tool for processing things like plain text tables): @example $ asttable cat.fits -cMAG_B,MAG_V | awk '@{print $1-$2@}' @end example But understanding the distribution by visually seeing all the numbers under each other is not too useful! You can therefore feed this single column information into @ref{Statistics} to give you a general feeling of the distribution with the same command: @example $ asttable cat.fits -cMAG_B,MAG_V | awk '@{print $1-$2@}' | aststatistics @end example Gnuastro's programs that accept input from standard input, only look into the Standard input stream if there is no first argument. In other words, arguments take precedence over Standard input. When no argument is provided, the programs check if the standard input stream is already full or not (output from another program is waiting to be used). If data is present in the standard input stream, it is used. When the standard input is empty, the program will wait @option{--stdintimeout} micro-seconds for you to manually enter the first line (ending with a new-line character, or the @key{ENTER} key, see @ref{Input output options}). If it detects the first line in this time, there is no more time limit, and you can manually write/type all the lines for as long as it takes. To inform the program that Standard input has finished, press @key{CTRL-D} after a new line. If the program does not catch the first line before the time-out finishes, it will abort with an error saying that no input was provided. @cartouche @noindent @strong{Manual input in Standard input is discarded:} Be careful that when you manually fill the Standard input, the data will be discarded once the program finishes and reproducing the result will be impossible. Therefore this form of providing input is only good for temporary tests. @end cartouche @cartouche @noindent @strong{Standard input currently only for plain text:} Currently Standard input only works for plain text inputs like the example above. We will later allow FITS files into the programs through standard input also. @end cartouche @node Shell tips, , Standard input, Command-line @subsection Shell tips Gnuastro's programs are primarily meant to be run on the command-line shell environment. In this section, we will review some useful tips and tricks that can be helpful in the pipelines that you run. @menu * Separate shell variables for multiple outputs:: When you get values from one command. * Truncating start of long string FITS keyword values:: When the end of the string matters. @end menu @node Separate shell variables for multiple outputs, Truncating start of long string FITS keyword values, Shell tips, Shell tips @subsubsection Separate shell variables for multiple outputs Sometimes your commands print multiple values and you want to use them as different shell variables. Let's describe the problem (shown in the box below) with an example (that you can reproduce without any external data). With the commands below, we'll first make a noisy (@mymath{\sigma=5}) image (@mymath{100\times100} pixels) using @ref{Arithmetic}. Then, we'll measure@footnote{The actual printed values by @command{aststatistics} may slightly differ for you. This is because of a different random number generator seed used in @command{astarithmetic}. To get an exactly reproducible result, see @ref{Generating random numbers}} its mean and standard deviation using @ref{Statistics}. @example $ astarithmetic 100 100 2 makenew 5 mknoise-sigma -oimg.fits $ aststatistics img.fits --mean --std -3.10938611484039e-03 4.99607077069093e+00 @end example @cartouche @noindent @strong{THE PROBLEM:} you want the first number printed above to be stored in a shell variable called @code{my_mean} and the second number to be stored as the @code{my_std} shell variable (you are free to choose any name!). @end cartouche @noindent The first thing that may come to mind is to run Statistics two times, and write the output into separate variables like below: @example $ my_std=$(aststatistics img.fits --std) ## NOT SOLUTION! ## $ my_mean=$(aststatistics img.fits --mean) ## NOT SOLUTION! ## @end example @cindex Global warming @cindex Carbon footprint But this is not a good solution because as @file{img.fits} becomes larger (more pixels), the time it takes for Statistics to simply load the data into memory can be significant. This will slow down your pipeline and besides wasting your time, it contributes to global warming (by spending energy on an un-necessary action; take this seriously because your pipeline may scale up to involve thousands of large datasets)! Furthermore, besides loading of the input data, Statistics (and Gnuastro in general) is designed to do multiple measurements in one pass over the data as much as possible (to further decrease Gnuastro's carbon footprint). So when given @option{--mean --std}, it will measure both in one pass over the pixels (not two passes!). In other words, in this case, you get the two measurements for the cost of one. How do you separate the values from the first @command{aststatistics} command above? One ugly way is to write the two-number output string into a single shell variable and then separate, or tokenize, the string with two subsequent commands like below: @c Note that the comments aren't aligned in the Texinfo source because of @c the '@' characters before the braces of AWK. In the output, they are @c aligned. @example $ meanstd=$(aststatistics img.fits --mean --std) ## NOT SOLUTION! ## $ my_mean=$(echo $meanstd | awk '@{print $1@}') ## NOT SOLUTION! ## $ my_std=$(echo $meanstd | awk '@{print $2@}') ## NOT SOLUTION! ## @end example @cartouche @noindent @cindex Evaluate string as command (@command{eval}) @cindex @command{eval} to evaluate string as command @strong{SOLUTION:} The solution is to formatted-print (@command{printf}) the numbers as shell variables definitions in a string, and evaluate (@command{eval}) that string as a command: @example $ eval "$(aststatistics img.fits --mean --std \ | xargs printf "my_mean=%s; my_std=%s")" @end example @end cartouche @noindent Let's review the solution (in more detail): @enumerate @item @cindex Standard input @cindex @command{xargs} (extended arguments) We pipe the output into @command{xargs}@footnote{For more on @command{xargs}, see @url{https://en.wikipedia.org/wiki/Xargs}. It will take the standard input (from the pipe in this scenario) and put it as arguments of the next program (@command{printf} in this scenario). In other words, it is good for programs that don't take input from standard input (@command{printf} in this case; but also includes others like @command{cp}, @command{rm}, or @command{echo}).} (extended arguments) which puts the two numbers it gets from the pipe, as arguments for @command{printf} (formatted print; because @command{printf} doesn't take input from pipes). @item Within the @command{printf} call, we write the values after putting a variable name and equal-sign, and in between them we put a @key{;} (as if it was a shell command). The @code{%s} tells @command{printf} to print each input as a string (not to interpret it as a number and loose precision). Here is the output of this phase: @example $ aststatistics img.fits --mean --std \ | xargs printf "my_mean=%s; my_std=%s" my_mean=-3.10938611484039e-03; my_std=4.99607077069093e+00 @end example @item But the output above is a string! To evaluate this string as a command, we give it to the eval command like above. @end enumerate @noindent After the solution above, you will have the two @code{my_mean} and @code{my_std} variables to use separately in your pipeline: @example $ echo $my_mean -3.10938611484039e-03 $ echo $my_std 4.99607077069093e+00 @end example @cindex Zsh shell @cindex Dash shell @cindex Portable script This @command{eval}-based solution has been tested in in GNU Bash, Dash and Zsh and it works nicely in them (is ``portable''). This is because the constructs used here are pretty low-level (and widely available). For examples usages of this technique, see the following sections: @ref{Extracting a single spectrum and plotting it} and @ref{Pseudo narrow-band images}. @node Truncating start of long string FITS keyword values, , Separate shell variables for multiple outputs, Shell tips @subsubsection Truncating start of long string FITS keyword values When you want to put a string (not a number, for example a file name) into the keyword value, if it is longer than 68 characters, CFITSIO is going to truncate the end of the string. The number 68 is the maximum allowable sting keyword length in the FITS standard@footnote{In the FITS standard, the full length of a keyword (including its name) is 80 characters. The keyword name occupies 8 characters, which is followed by an @key{=} (1 character). For strings, we need one SPACE after the @key{=}, and the string should be enclosed in two single quotes. Accounting for all of these, we get @mymath{80-8-1-1-2=68} available characters.}. A robust way to solve this problem is to break the keyword into multiple keywords and continue the file name there. However, especially when dealing with file names, it is usually the last few characters that you want to preserve (the first ones are usually just basic operating system locations). Below, you can see the three necessary commands to optionally (when the length is too long) truncate such long strings in GNU Bash. When truncation is necessary, to inform the reader that the value has been truncated, we'll put `@code{...}' at the start of the string. @verbatim $ fname="/a/very/long/file/location" $ if [ ${#fname} -gt 68 ]; then value="...${fname: -65}"; \ else value=$fname; \ fi $ astfits image.fits --write=KEYNAME,"$value" @end verbatim @noindent Here are the core handy constructs of Bash that we are using here: @table @code @item $@{#fname@} Returns the length of the value given to the @code{fname} variable. @item $@{fname: -65@} Returns the last 65 characters in the value of the @code{fname} variable. @end table @node Configuration files, Getting help, Command-line, Common program behavior @section Configuration files @cindex @file{etc} @cindex Configuration files @cindex Necessary parameters @cindex Default option values @cindex File system Hierarchy Standard Each program needs a certain number of parameters to run. Supplying all the necessary parameters each time you run the program is very frustrating and prone to errors. Therefore all the programs read the values for the necessary options you have not given in the command-line from one of several plain text files (which you can view and edit with any text editor). These files are known as configuration files and are usually kept in a directory named @file{etc/} according to the file system hierarchy standard@footnote{@url{http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard}}. @vindex --output @vindex --numthreads @cindex CPU threads, number @cindex Internal default value @cindex Number of CPU threads to use The thing to have in mind is that none of the programs in Gnuastro keep any internal default value. All the values must either be stored in one of the configuration files or explicitly called in the command-line. In case the necessary parameters are not given through any of these methods, the program will print a missing option error and abort. The only exception to this is @option{--numthreads}, whose default value is determined at run-time using the number of threads available to your system, see @ref{Multi-threaded operations}. Of course, you can still provide a default value for the number of threads at any of the levels below, but if you do not, the program will not abort. Also note that through automatic output name generation, the value to the @option{--output} option is also not mandatory on the command-line or in the configuration files for all programs which do not rely on that value as an input@footnote{One example of a program that uses the value given to @option{--output} as an input is ConvertType, this value specifies the type of the output through the value to @option{--output}, see @ref{Invoking astconvertt}.}, see @ref{Automatic output}. @menu * Configuration file format:: ASCII format of configuration file. * Configuration file precedence:: Precedence of configuration files. * Current directory and User wide:: Local and user configuration files. * System wide:: System wide configuration files. @end menu @node Configuration file format, Configuration file precedence, Configuration files, Configuration files @subsection Configuration file format @cindex Configuration file suffix The configuration files for each program have the standard program executable name with a `@file{.conf}' suffix. When you download the source code, you can find them in the same directory as the source code of each program, see @ref{Program source}. @cindex White space character @cindex Configuration file format Any line in the configuration file whose first non-white character is a @key{#} is considered to be a comment and is ignored. An empty line is also similarly ignored. The long name of the option should be used as an identifier. The option name and option value should be separated by any number of `white-space' characters (space, tab or vertical tab) or an equal (@key{=}). By default several space characters are used. If the value of an option has space characters (most commonly for the @option{hdu} option), then the full value can be enclosed in double quotation signs (@key{"}, similar to the example in @ref{Arguments and options}). If it is an option without a value in the @option{--help} output (on/off option, see @ref{Options}), then the value should be @option{1} if it is to be `on' and @option{0} otherwise. In each non-commented and non-blank line, any text after the first two words (option identifier and value) is ignored. If an option identifier is not recognized in the configuration file, the name of the file, the line number of the unrecognized option, and the unrecognized identifier name will be reported and the program will abort. If a parameter is repeated more more than once in the configuration files, accepts only one value, and is not set on the command-line, then only the first value will be used, the rest will be ignored. @cindex Writing configuration files @cindex Automatic configuration file writing @cindex Configuration files, writing You can build or edit any of the directories and the configuration files yourself using any text editor. However, it is recommended to use the @option{--setdirconf} and @option{--setusrconf} options to set default values for the current directory or this user, see @ref{Operating mode options}. With these options, the values you give will be checked before writing in the configuration file. They will also print a set of commented lines guiding the reader and will also classify the options based on their context and write them in their logical order to be more understandable. @node Configuration file precedence, Current directory and User wide, Configuration file format, Configuration files @subsection Configuration file precedence @cindex Configuration file precedence @cindex Configuration file directories @cindex Precedence, configuration files The option values in all the programs of Gnuastro will be filled in the following order. If an option only takes one value which is given in an earlier step, any value for that option in a later step will be ignored. Note that if the @option{lastconfig} option is specified in any step below, no other configuration files will be parsed (see @ref{Operating mode options}). @enumerate @item Command-line options, for a particular run of ProgramName. @item @file{.gnuastro/astprogname.conf} is parsed by ProgramName in the current directory. @item @file{.gnuastro/gnuastro.conf} is parsed by all Gnuastro programs in the current directory. @item @file{$HOME/.local/etc/astprogname.conf} is parsed by ProgramName in the user's home directory (see @ref{Current directory and User wide}). @item @file{$HOME/.local/etc/gnuastro.conf} is parsed by all Gnuastro programs in the user's home directory (see @ref{Current directory and User wide}). @item @file{prefix/etc/astprogname.conf} is parsed by ProgramName in the system-wide installation directory (see @ref{System wide} for @file{prefix}). @item @file{prefix/etc/gnuastro.conf} is parsed by all Gnuastro programs in the system-wide installation directory (see @ref{System wide} for @file{prefix}). @end enumerate The basic idea behind setting this progressive state of checking for parameter values is that separate users of a computer or separate folders in a user's file system might need different values for some parameters. @cartouche @noindent @strong{Checking the order:} You can confirm/check the order of parsing configuration files using the @option{--checkconfig} option with any Gnuastro program, see @ref{Operating mode options}. Just be sure to place this option immediately after the program name, before any other option. @end cartouche As you see above, there can also be a configuration file containing the common options in all the programs: @file{gnuastro.conf} (see @ref{Common options}). If options specific to one program are specified in this file, there will be unrecognized option errors, or unexpected behavior if the option has different behavior in another program. On the other hand, there is no problem with @file{astprogname.conf} containing common options@footnote{As an example, the @option{--setdirconf} and @option{--setusrconf} options will also write the common options they have read in their produced @file{astprogname.conf}.}. @cartouche @noindent @strong{Manipulating the order:} You can manipulate this order or add new files with the following two options which are fully described in @ref{Operating mode options}: @table @option @item --config Allows you to define any file to be parsed as a configuration file on the command-line or within the any other configuration file. Recall that the file given to @option{--config} is parsed immediately when this option is confronted (on the command-line or in a configuration file). @item --lastconfig Allows you to stop the parsing of subsequent configuration files. Note that if this option is given in a configuration file, it will be fully read, so its position in the configuration does not matter (unlike @option{--config}). @end table @end cartouche One example of benefiting from these configuration files can be this: raw telescope images usually have their main image extension in the second FITS extension, while processed FITS images usually only have one extension. If your system-wide default input extension is 0 (the first), then when you want to work with the former group of data you have to explicitly mention it to the programs every time. With this progressive state of default values to check, you can set different default values for the different directories that you would like to run Gnuastro in for your different purposes, so you will not have to worry about this issue any more. The same can be said about the @file{gnuastro.conf} files: by specifying a behavior in this single file, all Gnuastro programs in the respective directory, user, or system-wide steps will behave similarly. For example, to keep the input's directory when no specific output is given (see @ref{Automatic output}), or to not delete an existing file if it has the same name as a given output (see @ref{Input output options}). @node Current directory and User wide, System wide, Configuration file precedence, Configuration files @subsection Current directory and User wide @cindex @file{$HOME} @cindex @file{./.gnuastro/} @cindex @file{$HOME/.local/etc/} For the current (local) and user-wide directories, the configuration files are stored in the hidden sub-directories named @file{.gnuastro/} and @file{$HOME/.local/etc/} respectively. Unless you have changed it, the @file{$HOME} environment variable should point to your home directory. You can check it by running @command{$ echo $HOME}. Each time you run any of the programs in Gnuastro, this environment variable is read and placed in the above address. So if you suddenly see that your home configuration files are not being read, probably you (or some other program) has changed the value of this environment variable. @vindex --setdirconf @vindex --setusrconf Although it might cause confusions like above, this dependence on the @file{HOME} environment variable enables you to temporarily use a different directory as your home directory. This can come in handy in complicated situations. To set the user or current directory configuration files based on your command-line input, you can use the @option{--setdirconf} or @option{--setusrconf}, see @ref{Operating mode options}. @node System wide, , Current directory and User wide, Configuration files @subsection System wide @cindex @file{prefix/etc/} @cindex System wide configuration files @cindex Configuration files, system wide When Gnuastro is installed, the configuration files that are shipped with the distribution are copied into the (possibly system wide) @file{prefix/etc/} directory. For more details on @file{prefix}, see @ref{Installation directory} (by default it is: @file{/usr/local}). This directory is the final place (with the lowest priority) that the programs in Gnuastro will check to retrieve parameter values. If you remove an option and its value from the system wide configuration files, you either have to specify it in more immediate configuration files or set it each time in the command-line. Recall that none of the programs in Gnuastro keep any internal default values and will abort if they do not find a value for the necessary parameters (except the number of threads and output file name). So even though you might never expect to use an optional option, it safe to have it available in this system-wide configuration file even if you do not intend to use it frequently. Note that in case you install Gnuastro from your distribution's repositories, @file{prefix} will either be set to @file{/} (the root directory) or @file{/usr}, so you can find the system wide configuration variables in @file{/etc/} or @file{/usr/etc/}. The prefix of @file{/usr/local/} is conventionally used for programs you install from source by yourself as in @ref{Quick start}. @node Getting help, Multi-threaded operations, Configuration files, Common program behavior @section Getting help @cindex Help @cindex Book formats @cindex Remembering options @cindex Convenient book formats Probably the first time you read this book, it is either in the PDF or HTML formats. These two formats are very convenient for when you are not actually working, but when you are only reading. Later on, when you start to use the programs and you are deep in the middle of your work, some of the details will inevitably be forgotten. Going to find the PDF file (printed or digital) or the HTML web page is a major distraction. @cindex Online help @cindex Command-line help GNU software have a very unique set of tools for aiding your memory on the command-line, where you are working, depending how much of it you need to remember. In the past, such command-line help was known as ``online'' help, because they were literally provided to you `on' the command `line'. However, nowadays the word ``online'' refers to something on the internet, so that term will not be used. With this type of help, you can resume your exciting research without taking your hands off the keyboard. @cindex Installed help methods Another major advantage of such command-line based help routines is that they are installed with the software in your computer, therefore they are always in sync with the executable you are actually running. Three of them are actually part of the executable. You do not have to worry about the version of the book or program. If you rely on external help (a PDF in your personal print or digital archive or HTML from the official web page) you have to check to see if their versions fit with your installed program. If you only need to remember the short or long names of the options, @option{--usage} is advised. If it is what the options do, then @option{--help} is a great tool. Man pages are also provided for those who are use to this older system of documentation. This full book is also available to you on the command-line in Info format. If none of these seems to resolve the problems, there is a mailing list which enables you to get in touch with experienced Gnuastro users. In the subsections below each of these methods are reviewed. @menu * --usage:: View option names and value formats. * --help:: List all options with description. * Man pages:: Man pages generated from --help. * Info:: View complete book in terminal. * help-gnuastro mailing list:: Contacting experienced users. @end menu @node --usage, --help, Getting help, Getting help @subsection @option{--usage} @vindex --usage @cindex Usage pattern @cindex Mandatory arguments @cindex Optional and mandatory tokens If you give this option, the program will not run. It will only print a very concise message showing the options and arguments. Everything within square brackets (@option{[]}) is optional. For example, here are the first and last two lines of Crop's @option{--usage} is shown: @example $ astcrop --usage Usage: astcrop [-Do?IPqSVW] [-d INT] [-h INT] [-r INT] [-w INT] [-x INT] [-y INT] [-c INT] [-p STR] [-N INT] [--deccol=INT] .... [--setusrconf] [--usage] [--version] [--wcsmode] [ASCIIcatalog] FITSimage(s).fits @end example There are no explanations on the options, just their short and long names shown separately. After the program name, the short format of all the options that do not require a value (on/off options) is displayed. Those that do require a value then follow in separate brackets, each displaying the format of the input they want, see @ref{Options}. Since all options are optional, they are shown in square brackets, but arguments can also be optional. For example, in this example, a catalog name is optional and is only required in some modes. This is a standard method of displaying optional arguments for all GNU software. @node --help, Man pages, --usage, Getting help @subsection @option{--help} @vindex --help If the command-line includes this option, the program will not be run. It will print a complete list of all available options along with a short explanation. The options are also grouped by their context. Within each context, the options are sorted alphabetically. Since the options are shown in detail afterwards, the first line of the @option{--help} output shows the arguments and if they are optional or not, similar to @ref{--usage}. In the @option{--help} output of all programs in Gnuastro, the options for each program are classified based on context. The first two contexts are always options to do with the input and output respectively. For example, input image extensions or supplementary input files for the inputs. The last class of options is also fixed in all of Gnuastro, it shows operating mode options. Most of these options are already explained in @ref{Operating mode options}. @cindex Long outputs @cindex Redirection of output @cindex Command-line, long outputs The help message will sometimes be longer than the vertical size of your terminal. If you are using a graphical user interface terminal emulator, you can scroll the terminal with your mouse, but we promised no mice distractions! So here are some suggestions: @itemize @item @cindex Scroll command-line @cindex Command-line scroll @cindex @key{Shift + PageUP} and @key{Shift + PageDown} @key{Shift + PageUP} to scroll up and @key{Shift + PageDown} to scroll down. For most help output this should be enough. The problem is that it is limited by the number of lines that your terminal keeps in memory and that you cannot scroll by lines, only by whole screens. @item @cindex Pipe @cindex @command{less} Pipe to @command{less}. A pipe is a form of shell re-direction. The @command{less} tool in Unix-like systems was made exactly for such outputs of any length. You can pipe (@command{|}) the output of any program that is longer than the screen to it and then you can scroll through (up and down) with its many tools. For example: @example $ astnoisechisel --help | less @end example @noindent Once you have gone through the text, you can quit @command{less} by pressing the @key{q} key. @item @cindex Save output to file @cindex Redirection of output Redirect to a file. This is a less convenient way, because you will then have to open the file in a text editor! You can do this with the shell redirection tool (@command{>}): @example $ astnoisechisel --help > filename.txt @end example @end itemize @cindex GNU Grep @cindex Searching text @cindex Command-line searching text In case you have a special keyword you are looking for in the help, you do not have to go through the full list. GNU Grep is made for this job. For example, if you only want the list of options whose @option{--help} output contains the word ``axis'' in Crop, you can run the following command: @example $ astcrop --help | grep axis @end example @cindex @code{ARGP_HELP_FMT} @cindex Argp argument parser @cindex Customize @option{--help} output @cindex @option{--help} output customization If the output of this option does not fit nicely within the confines of your terminal, GNU does enable you to customize its output through the environment variable @code{ARGP_HELP_FMT}, you can set various parameters which specify the formatting of the help messages. For example, if your terminals are wider than 70 spaces (say 100) and you feel there is too much empty space between the long options and the short explanation, you can change these formats by giving values to this environment variable before running the program with the @option{--help} output. You can define this environment variable in this manner: @example $ export ARGP_HELP_FMT=rmargin=100,opt-doc-col=20 @end example @cindex @file{.bashrc} This will affect all GNU programs using GNU C library's @file{argp.h} facilities as long as the environment variable is in memory. You can see the full list of these formatting parameters in the ``Argp User Customization'' part of the GNU C library manual. If you are more comfortable to read the @option{--help} outputs of all GNU software in your customized format, you can add your customization (similar to the line above, without the @command{$} sign) to your @file{~/.bashrc} file. This is a standard option for all GNU software. @node Man pages, Info, --help, Getting help @subsection Man pages @cindex Man pages Man pages were the Unix method of providing command-line documentation to a program. With GNU Info, see @ref{Info} the usage of this method of documentation is highly discouraged. This is because Info provides a much more easier to navigate and read environment. However, some operating systems require a man page for packages that are installed and some people are still used to this method of command-line help. So the programs in Gnuastro also have Man pages which are automatically generated from the outputs of @option{--version} and @option{--help} using the GNU help2man program. So if you run @example $ man programname @end example @noindent You will be provided with a man page listing the options in the standard manner. @node Info, help-gnuastro mailing list, Man pages, Getting help @subsection Info @cindex GNU Info @cindex Command-line, viewing full book Info is the standard documentation format for all GNU software. It is a very useful command-line document viewing format, fully equipped with links between the various pages and menus and search capabilities. As explained before, the best thing about it is that it is available for you the moment you need to refresh your memory on any command-line tool in the middle of your work without having to take your hands off the keyboard. This complete book is available in Info format and can be accessed from anywhere on the command-line. To open the Info format of any installed programs or library on your system which has an Info format book, you can simply run the command below (change @command{executablename} to the executable name of the program or library): @example $ info executablename @end example @noindent @cindex Learning GNU Info @cindex GNU software documentation In case you are not already familiar with it, run @command{$ info info}. It does a fantastic job in explaining all its capabilities itself. It is very short and you will become sufficiently fluent in about half an hour. Since all GNU software documentation is also provided in Info, your whole GNU/Linux life will significantly improve. @cindex GNU Emacs @cindex GNU C library Once you've become an efficient navigator in Info, you can go to any part of this book or any other GNU software or library manual, no matter how long it is, in a matter of seconds. It also blends nicely with GNU Emacs (a text editor) and you can search manuals while you are writing your document or programs without taking your hands off the keyboard, this is most useful for libraries like the GNU C library. To be able to access all the Info manuals installed in your GNU/Linux within Emacs, type @key{Ctrl-H + i}. To see this whole book from the beginning in Info, you can run @example $ info gnuastro @end example @noindent If you run Info with the particular program executable name, for example @file{astcrop} or @file{astnoisechisel}: @example $ info astprogramname @end example @noindent you will be taken to the section titled ``Invoking ProgramName'' which explains the inputs and outputs along with the command-line options for that program. Finally, if you run Info with the official program name, for example, Crop or NoiseChisel: @example $ info ProgramName @end example @noindent you will be taken to the top section which introduces the program. Note that in all cases, Info is not case sensitive. @node help-gnuastro mailing list, , Info, Getting help @subsection help-gnuastro mailing list @cindex help-gnuastro mailing list @cindex Mailing list: help-gnuastro Gnuastro maintains the help-gnuastro mailing list for users to ask any questions related to Gnuastro. The experienced Gnuastro users and some of its developers are subscribed to this mailing list and your email will be sent to them immediately. However, when contacting this mailing list please have in mind that they are possibly very busy and might not be able to answer immediately. @cindex Mailing list archives @cindex @code{help-gnuastro@@gnu.org} To ask a question from this mailing list, send a mail to @code{help-gnuastro@@gnu.org}. Anyone can view the mailing list archives at @url{http://lists.gnu.org/archive/html/help-gnuastro/}. It is best that before sending a mail, you search the archives to see if anyone has asked a question similar to yours. If you want to make a suggestion or report a bug, please do not send a mail to this mailing list. We have other mailing lists and tools for those purposes, see @ref{Report a bug} or @ref{Suggest new feature}. @node Multi-threaded operations, Numeric data types, Getting help, Common program behavior @section Multi-threaded operations @pindex nproc @cindex pthread @cindex CPU threads @cindex GNU Coreutils @cindex Using CPU threads @cindex CPU, using all threads @cindex Multi-threaded programs @cindex Using multiple CPU cores @cindex Simultaneous multithreading Some of the programs benefit significantly when you use all the threads your computer's CPU has to offer to your operating system. The number of threads available can be larger than the number of physical (hardware) cores in the CPU (also known as Simultaneous multithreading). For example, in Intel's CPUs (those that implement its Hyper-threading technology) the number of threads is usually double the number of physical cores in your CPU. On a GNU/Linux system, the number of threads available can be found with the command @command{$ nproc} command (part of GNU Coreutils). @vindex --numthreads @cindex Number of threads available @cindex Available number of threads @cindex Internally stored option value Gnuastro's programs can find the number of threads available to your system internally at run-time (when you execute the program). However, if a value is given to the @option{--numthreads} option, the given number will be used, see @ref{Operating mode options} and @ref{Configuration files} for ways to use this option. Thus @option{--numthreads} is the only common option in Gnuastro's programs with a value that does not have to be specified anywhere on the command-line or in the configuration files. @menu * A note on threads:: Caution and suggestion on using threads. * How to run simultaneous operations:: How to run things simultaneously. @end menu @node A note on threads, How to run simultaneous operations, Multi-threaded operations, Multi-threaded operations @subsection A note on threads @cindex Using multiple threads @cindex Best use of CPU threads @cindex Efficient use of CPU threads Spinning off threads is not necessarily the most efficient way to run an application. Creating a new thread is not a cheap operation for the operating system. It is most useful when the input data are fixed and you want the same operation to be done on parts of it. For example, one input image to Crop and multiple crops from various parts of it. In this fashion, the image is loaded into memory once, all the crops are divided between the number of threads internally and each thread cuts out those parts which are assigned to it from the same image. On the other hand, if you have multiple images and you want to crop the same region(s) out of all of them, it is much more efficient to set @option{--numthreads=1} (so no threads spin off) and run Crop multiple times simultaneously, see @ref{How to run simultaneous operations}. @cindex Wall-clock time You can check the boost in speed by first running a program on one of the data sets with the maximum number of threads and another time (with everything else the same) and only using one thread. You will notice that the wall-clock time (reported by most programs at their end) in the former is longer than the latter divided by number of physical CPU cores (not threads) available to your operating system. Asymptotically these two times can be equal (most of the time they are not). So limiting the programs to use only one thread and running them independently on the number of available threads will be more efficient. @cindex System Cache @cindex Cache, system Note that the operating system keeps a cache of recently processed data, so usually, the second time you process an identical data set (independent of the number of threads used), you will get faster results. In order to make an unbiased comparison, you have to first clean the system's cache with the following command between the two runs. @example $ sync; echo 3 | sudo tee /proc/sys/vm/drop_caches @end example @cartouche @noindent @strong{SUMMARY: Should I use multiple threads?} Depends: @itemize @item If you only have @strong{one} data set (image in most cases!), then yes, the more threads you use (with a maximum of the number of threads available to your OS) the faster you will get your results. @item If you want to run the same operation on @strong{multiple} data sets, it is best to set the number of threads to 1 and use Make, or GNU Parallel, as explained in @ref{How to run simultaneous operations}. @end itemize @end cartouche @node How to run simultaneous operations, , A note on threads, Multi-threaded operations @subsection How to run simultaneous operations There are two@footnote{A third way would be to open multiple terminal emulator windows in your GUI, type the commands separately on each and press @key{Enter} once on each terminal, but this is far too frustrating, tedious and prone to errors. It's therefore not a realistic solution when tens, hundreds or thousands of operations (your research targets, multiplied by the operations you do on each) are to be done.} approaches to simultaneously execute a program: using GNU Parallel or Make (GNU Make is the most common implementation). The first is very useful when you only want to do one job multiple times and want to get back to your work without actually keeping the command you ran. The second is usually for more important operations, with lots of dependencies between the different products (for example, a full scientific research). @table @asis @item GNU Parallel @cindex GNU Parallel When you only want to run multiple instances of a command on different threads and get on with the rest of your work, the best method is to use GNU parallel. Surprisingly GNU Parallel is one of the few GNU packages that has no Info documentation but only a Man page, see @ref{Info}. So to see the documentation after installing it please run @example $ man parallel @end example @noindent As an example, let's assume we want to crop a region fixed on the pixels (500, 600) with the default width from all the FITS images in the @file{./data} directory ending with @file{sci.fits} to the current directory. To do this, you can run: @example $ parallel astcrop --numthreads=1 --xc=500 --yc=600 ::: \ ./data/*sci.fits @end example @noindent GNU Parallel can help in many more conditions, this is one of the simplest, see the man page for lots of other examples. For absolute beginners: the backslash (@command{\}) is only a line breaker to fit nicely in the page. If you type the whole command in one line, you should remove it. @item Make @cindex Make Make is a program for building ``targets'' (e.g., files) using ``recipes'' (a set of operations) when their known ``prerequisites'' (other files) have been updated. It elegantly allows you to define dependency structures for building your final output and updating it efficiently when the inputs change. It is the most common infra-structure to build software today. Scientific research methodology is very similar to software development: you start by testing a hypothesis on a small sample of objects/targets with a simple set of steps. As you are able to get promising results, you improve the method and use it on a larger, more general, sample. In the process, you will confront many issues that have to be corrected (bugs in software development jargon). Make is a wonderful tool to manage this style of development. Besides the raw data analysis pipeline, Make has been used to for producing reproducible papers, for example, see @url{https://gitlab.com/makhlaghi/NoiseChisel-paper, the reproduction pipeline} of the paper introducing @ref{NoiseChisel} (one of Gnuastro's programs). In fact the NoiseChisel paper's Make-based workflow was the foundation of a parallel project called @url{http://maneage.org,Maneage} (@emph{Man}aging data lin@emph{eage}): @url{http://maneage.org} that is described more fully in Akhlaghi et al. @url{https://arxiv.org/abs/2006.03018,2021}. Therefore, it is a very useful tool for complex scientific workflows. @cindex GNU Make GNU Make@footnote{@url{https://www.gnu.org/software/make/}} is the most common implementation which (similar to nearly all GNU programs, comes with a wonderful manual@footnote{@url{https://www.gnu.org/software/make/manual/}}). Make is very basic and simple, and thus the manual is short (the most important parts are in the first roughly 100 pages) and easy to read/understand. Make comes with a @option{--jobs} (@option{-j}) option which allows you to specify the maximum number of jobs that can be done simultaneously. For example, if you have 8 threads available to your operating system. You can run: @example $ make -j8 @end example With this command, Make will process your @file{Makefile} and create all the targets (can be thousands of FITS images for example) simultaneously on 8 threads, while fully respecting their dependencies (only building a file/target when its prerequisites are successfully built). Make is thus strongly recommended for managing scientific research where robustness, archiving, reproducibility and speed@footnote{Besides its multi-threaded capabilities, Make will only rebuild those targets that depend on a change you have made, not the whole work. For example, if you have set the prerequisites properly, you can easily test the changing of a parameter on your paper's results without having to re-do everything (which is much faster). This allows you to be much more productive in easily checking various ideas/assumptions of the different stages of your research and thus produce a more robust result for your exciting science.} are important. @end table @node Numeric data types, Memory management, Multi-threaded operations, Common program behavior @section Numeric data types @cindex Bit @cindex Type At the lowest level, the computer stores everything in terms of @code{1} or @code{0}. For example, each program in Gnuastro, or each astronomical image you take with the telescope is actually a string of millions of these zeros and ones. The space required to keep a zero or one is the smallest unit of storage, and is known as a @emph{bit}. However, understanding and manipulating this string of bits is extremely hard for most people. Therefore, different standards are defined to package the bits into separate @emph{type}s with a fixed interpretation of the bits in each package. @cindex Byte @cindex Signed integer @cindex Unsigned integer @cindex Integer, Signed To store numbers, the most basic standard/type is for integers (@mymath{..., -2, -1, 0, 1, 2, ...}). The common integer types are 8, 16, 32, and 64 bits wide (more bits will give larger limits). Each bit corresponds to a power of 2 and they are summed to create the final number. In the integer types, for each width there are two standards for reading the bits: signed and unsigned. In the `signed' convention, one bit is reserved for the sign (stating that the integer is positive or negative). The `unsigned' integers use that bit in the actual number and thus contain only positive numbers (starting from zero). Therefore, at the same number of bits, both signed and unsigned integers can allow the same number of integers, but the positive limit of the @code{unsigned} types is double their @code{signed} counterparts with the same width (at the expense of not having negative numbers). When the context of your work does not involve negative numbers (for example, counting, where negative is not defined), it is best to use the @code{unsigned} types. For the full numerical range of all integer types, see below. Another standard of converting a given number of bits to numbers is the floating point standard, this standard can @emph{approximately} store any real number with a given precision. There are two common floating point types: 32-bit and 64-bit, for single and double precision floating point numbers respectively. The former is sufficient for data with less than 8 significant decimal digits (most astronomical data), while the latter is good for less than 16 significant decimal digits. The representation of real numbers as bits is much more complex than integers. If you are interested to learn more about it, you can start with the @url{https://en.wikipedia.org/wiki/Floating_point, Wikipedia article}. Practically, you can use Gnuastro's Arithmetic program to convert/change the type of an image/datacube (see @ref{Arithmetic}), or Gnuastro Table program to convert a table column's data type (see @ref{Column arithmetic}). Conversion of a dataset's type is necessary in some contexts. For example, the program/library, that you intend to feed the data into, only accepts floating point values, but you have an integer image/column. Another situation that conversion can be helpful is when you know that your data only has values that fit within @code{int8} or @code{uint16}. However it is currently formatted in the @code{float64} type. The important thing to consider is that operations involving wider, floating point, or signed types can be significantly slower than smaller-width, integer, or unsigned types respectively. Note that besides speed, a wider type also requires much more storage space (by 4 or 8 times). Therefore, when you confront such situations that can be optimized and want to store/archive/transfer the data, it is best to use the most efficient type. For example, if your dataset (image or table column) only has positive integers less than 65535, store it as an unsigned 16-bit integer for faster processing, faster transfer, and less storage space. The short and long names for the recognized numeric data types in Gnuastro are listed below. Both short and long names can be used when you want to specify a type. For example, as a value to the common option @option{--type} (see @ref{Input output options}), or in the information comment lines of @ref{Gnuastro text table format}. The ranges listed below are inclusive. @table @code @item u8 @itemx uint8 8-bit unsigned integers, range:@* @mymath{[0\rm{\ to\ }2^8-1]} or @mymath{[0\rm{\ to\ }255]}. @item i8 @itemx int8 8-bit signed integers, range:@* @mymath{[-2^7\rm{\ to\ }2^7-1]} or @mymath{[-128\rm{\ to\ }127]}. @item u16 @itemx uint16 16-bit unsigned integers, range:@* @mymath{[0\rm{\ to\ }2^{16}-1]} or @mymath{[0\rm{\ to\ }65535]}. @item i16 @itemx int16 16-bit signed integers, range:@* @mymath{[-2^{15}\rm{\ to\ }2^{15}-1]} or @mymath{[-32768\rm{\ to\ }32767]}. @item u32 @itemx uint32 32-bit unsigned integers, range:@* @mymath{[0\rm{\ to\ }2^{32}-1]} or @mymath{[0\rm{\ to\ }4294967295]}. @item i32 @itemx int32 32-bit signed integers, range:@* @mymath{[-2^{31}\rm{\ to\ }2^{31}-1]} or @mymath{[-2147483648\rm{\ to\ }2147483647]}. @item u64 @itemx uint64 64-bit unsigned integers, range@* @mymath{[0\rm{\ to\ }2^{64}-1]} or @mymath{[0\rm{\ to\ }18446744073709551615]}. @item i64 @itemx int64 64-bit signed integers, range:@* @mymath{[-2^{63}\rm{\ to\ }2^{63}-1]} or @mymath{[-9223372036854775808\rm{\ to\ }9223372036854775807]}. @item f32 @itemx float32 32-bit (single-precision) floating point types. The maximum (minimum is its negative) possible value is @mymath{3.402823\times10^{38}}. Single-precision floating points can accurately represent a floating point number up to @mymath{\sim7.2} significant decimals. Given the heavy noise in astronomical data, this is usually more than sufficient for storing results. For more, see @ref{Printing floating point numbers}. @item f64 @itemx float64 64-bit (double-precision) floating point types. The maximum (minimum is its negative) possible value is @mymath{\sim10^{308}}. Double-precision floating points can accurately represent a floating point number @mymath{\sim15.9} significant decimals. This is usually good for processing (mixing) the data internally, for example, a sum of single precision data (and later storing the result as @code{float32}). For more, see @ref{Printing floating point numbers}. @end table @cartouche @noindent @strong{Some file formats do not recognize all types.} for example, the FITS standard (see @ref{Fits}) does not define @code{uint64} in binary tables or images. When a type is not acceptable for output into a given file format, the respective Gnuastro program or library will let you know and abort. On the command-line, you can convert the numerical type of an image, or table column into another type with @ref{Arithmetic} or @ref{Table} respectively. If you are writing your own program, you can use the @code{gal_data_copy_to_new_type()} function in Gnuastro's library, see @ref{Copying datasets}. @end cartouche @node Memory management, Tables, Numeric data types, Common program behavior @section Memory management @cindex Memory management @cindex Non-volatile memory @cindex Memory, non-volatile In this section we will review how Gnuastro manages your input data in your system's memory. Knowing this can help you optimize your usage (in speed and memory consumption) when the data volume is large and approaches, or exceeds, your available RAM (usually in various calls to multiple programs simultaneously). But before diving into the details, let's have a short basic introduction to memory in general and in particular the types of memory most relevant to this discussion. Input datasets (that are later fed into programs for analysis) are commonly first stored in @emph{non-volatile memory}. This is a type of memory that does not need a constant power supply to keep the data and is therefore primarily aimed for long-term storage, like HDDs or SSDs. So data in this type of storage is preserved when you turn off your computer. But by its nature, non-volatile memory is much slower, in reading or writing, than the speeds that CPUs can process the data. Thus relying on this type of memory alone would create a bad bottleneck in the input/output (I/O) phase of any processing. @cindex RAM @cindex Volatile memory @cindex Memory, volatile The first step to decrease this bottleneck is to have a faster storage space, but with a much limited storage volume. For this type of storage, computers have a Random Access Memory (or RAM). RAM is classified as a @emph{volatile memory} because it needs a constant flow of electricity to keep the information. In other words, the moment power is cut-off, all the stored information in your RAM is gone (hence the ``volatile'' name). But thanks to that constant supply of power, it can access any random address with equal (and very high!) speed. Hence, the general/simplistic way that programs deal with memory is the following (this is general to almost all programs, not just Gnuastro's): 1) Load/copy the input data from the non-volatile memory into RAM. 2) Use the copy of the data in RAM as input for all the internal processing as well as the intermediate data that is necessary during the processing. 3) Finally, when the analysis is complete, write the final output data back into non-volatile memory, and free/delete all the used space in the RAM (the initial copy and all the intermediate data). Usually the RAM is most important for the data of the intermediate steps (that you never see as a user of a program!). When the input dataset(s) to a program are small (compared to the available space in your system's RAM at the moment it is run) Gnuastro's programs and libraries follow the standard series of steps above. The only exception is that deleting the intermediate data is not only done at the end of the program. As soon as an intermediate dataset is no longer necessary for the next internal steps, the space it occupied is deleted/freed. This allows Gnuastro programs to minimize their usage of your system's RAM over the full running time. The situation gets complicated when the datasets are large (compared to your available RAM when the program is run). For example, if a dataset is half the size of your system's available RAM, and the program's internal analysis needs three or more intermediately processed copies of it at one moment in its analysis. There will not be enough RAM to keep those higher-level intermediate data. In such cases, programs that do not do any memory management will crash. But fortunately Gnuastro's programs do have a memory management plans for such situations. @cindex Memory-mapped file When the necessary amount of space for an intermediate dataset cannot be allocated in the RAM, Gnuastro's programs will not use the RAM at all. They will use the ``memory-mapped file'' concept in modern operating systems to create a randomly-named file in your non-volatile memory and use that instead of the RAM. That file will have the exact size (in bytes) of that intermediate dataset. Any time the program needs that intermediate dataset, the operating system will directly go to that file, and bypass your RAM. As soon as that file is no longer necessary for the analysis, it will be deleted. But as mentioned above, non-volatile memory has much slower I/O speed than the RAM. Hence in such situations, the programs will become noticeably slower (sometimes by factors of 10 times slower, depending on your non-volatile memory speed). Because of the drop in I/O speed (and thus the speed of your running program), the moment that any to-be-allocated dataset is memory-mapped, Gnuastro's programs and libraries will notify you with a descriptive statement like below (can happen in any phase of their analysis). It shows the location of the memory-mapped file, its size, complemented with a small description of the cause, a pointer to this section of the book for more information on how to deal with it (if necessary), and what to do to suppress it. @example astarithmetic: ./gnuastro_mmap/Fu7Dhs: temporary memory-mapped file (XXXXXXXXXXX bytes) created for intermediate data that is not stored in RAM (see the "Memory management" section of Gnuastro's manual for optimizing your project's memory management, and thus speed). To disable this warning, please use the option '--quiet-mmap' @end example @noindent Finally, when the intermediate dataset is no longer necessary, the program will automatically delete it and notify you with a statement like this: @example astarithmetic: ./gnuastro_mmap/Fu7Dhs: deleted @end example @noindent To disable these messages, you can run the program with @code{--quietmmap}, or set the @code{quietmmap} variable in the allocating library function to be non-zero. An important component of these messages is the name of the memory-mapped file. Knowing that the file has been deleted is important for the user if the program crashes for any reason: internally (for example, a parameter is given wrongly) or externally (for example, you mistakenly kill the running job). In the event of a crash, the memory-mapped files will not be deleted and you have to manually delete them because they are usually large and they may soon fill your full storage if not deleted in a long time due to successive crashes. This brings us to managing the memory-mapped files in your non-volatile memory. In other words: knowing where they are saved, or intentionally placing them in different places of your file system, or deleting them when necessary. As the examples above show, memory-mapped files are stored in a sub-directory of the running directory called @file{gnuastro_mmap}. If this directory does not exist, Gnuastro will automatically create it when memory mapping becomes necessary. Alternatively, it may happen that the @file{gnuastro_mmap} sub-directory exists and is not writable, or it cannot be created. In such cases, the memory-mapped file for each dataset will be created in the running directory with a @file{gnuastro_mmap_} prefix. Therefore one easy way to delete all memory-mapped files in case of a crash, is to delete everything within the sub-directory (first command below), or all files stating with this prefix: @example rm -f gnuastro_mmap/* rm -f gnuastro_mmap_* @end example A much more common issue when dealing with memory-mapped files is their location. For example, you may be running a program in a partition that is hosted by an HDD. But you also have another partition on an SSD (which has much faster I/O). So you want your memory-mapped files to be created in the SSD to speed up your processing. In this scenario, you want your project source directory to only contain your plain-text scripts and you want your project's built products (even the temporary memory-mapped files) to be built in a different location because they are large; thus I/O speed becomes important. To host the memory-mapped files in another location (with fast I/O), you can set (@file{gnuastro_mmap}) to be a symbolic link to it. For example, let's assume you want your memory-mapped files to be stored in @file{/path/to/dir/for/mmap}. All you have to do is to run the following command before your Gnuastro analysis command(s). @example ln -s /path/to/dir/for/mmap gnuastro_mmap @end example The programs will delete a memory-mapped file when it is no longer needed, but they will not delete the @file{gnuastro_mmap} directory that hosts them. So if your project involves many Gnuastro programs (possibly called in parallel) and you want your memory-mapped files to be in a different location, you just have to make the symbolic link above once at the start, and all the programs will use it if necessary. Another memory-management scenario that may happen is this: you do not want a Gnuastro program to allocate internal datasets in the RAM at all. For example, the speed of your Gnuastro-related project does not matter at that moment, and you have higher-priority jobs that are being run at the same time which need to have RAM available. In such cases, you can use the @option{--minmapsize} option that is available in all Gnuastro programs (see @ref{Processing options}). Any intermediate dataset that has a size larger than the value of this option will be memory-mapped, even if there is space available in your RAM. For example, if you want any dataset larger than 100 megabytes to be memory-mapped, use @option{--minmapsize=100000000} (8 zeros!). @cindex Linux kernel @cindex Kernel, Linux You should not set the value of @option{--minmapsize} to be too small, otherwise even small intermediate values (that are usually very numerous) in the program will be memory-mapped. However the kernel can only host a limited number of memory-mapped files at every moment (by all running programs combined). For example, in the default@footnote{If you need to host more memory-mapped files at one moment, you need to build your own customized Linux kernel.} Linux kernel on GNU/Linux operating systems this limit is roughly 64000. If the total number of memory-mapped files exceeds this number, all the programs using them will crash. Gnuastro's programs will warn you if your given value is too small and may cause a problem later. Actually, the default behavior for Gnuastro's programs (to only use memory-mapped files when there is not enough RAM) is a side-effect of @option{--minmapsize}. The pre-defined value to this option is an extremely large value in the lowest-level Gnuastro configuration file (the installed @file{gnuastro.conf} described in @ref{Configuration file precedence}). This value is larger than the largest possible available RAM. You can check by running any Gnuastro program with a @option{-P} option. Because no dataset will be larger than this, by default the programs will first attempt to use the RAM for temporary storage. But if writing in the RAM fails (for any reason, mainly due to lack of available space), then a memory-mapped file will be created. @node Tables, Tessellation, Memory management, Common program behavior @section Tables ``A table is a collection of related data held in a structured format within a database. It consists of columns, and rows.'' (from Wikipedia). Each column in the table contains the values of one property and each row is a collection of properties (columns) for one target object. For example, let's assume you have just ran MakeCatalog (see @ref{MakeCatalog}) on an image to measure some properties for the labeled regions (which might be detected galaxies for example) in the image. For each labeled region (detected galaxy), there will be a @emph{row} which groups its measured properties as @emph{columns}, one column for each property. One such property can be the object's magnitude, which is the sum of pixels with that label, or its center can be defined as the light-weighted average value of those pixels. Many such properties can be derived from the raw pixel values and their position, see @ref{Invoking astmkcatalog} for a long list. As a summary, for each labeled region (or, galaxy) we have one @emph{row} and for each measured property we have one @emph{column}. This high-level structure is usually the first step for higher-level analysis, for example, finding the stellar mass or photometric redshift from magnitudes in multiple colors. Thus, tables are not just outputs of programs, in fact it is much more common for tables to be inputs of programs. For example, to make a mock galaxy image, you need to feed in the properties of each galaxy into @ref{MakeProfiles} for it do the inverse of the process above and make a simulated image from a catalog, see @ref{Sufi simulates a detection}. In other cases, you can feed a table into @ref{Crop} and it will crop out regions centered on the positions within the table, see @ref{Reddest clumps cutouts and parallelization}. So to end this relatively long introduction, tables play a very important role in astronomy, or generally all branches of data analysis. In @ref{Recognized table formats} the currently recognized table formats in Gnuastro are discussed. You can use any of these tables as input or ask for them to be built as output. The most common type of table format is a simple plain text file with each row on one line and columns separated by white space characters, this format is easy to read/write by eye/hand. To give it the full functionality of more specific table types like the FITS tables, Gnuastro has a special convention which you can use to give each column a name, type, unit, and comments, while still being readable by other plain text table readers. This convention is described in @ref{Gnuastro text table format}. When tables are input to a program, the program reading it needs to know which column(s) it should use for its desired purposes. Gnuastro's programs all follow a similar convention, on the way you can select columns in a table. They are thoroughly discussed in @ref{Selecting table columns}. @menu * Recognized table formats:: Table formats that are recognized in Gnuastro. * Gnuastro text table format:: Gnuastro's convention plain text tables. * Selecting table columns:: Identify/select certain columns from a table @end menu @node Recognized table formats, Gnuastro text table format, Tables, Tables @subsection Recognized table formats The list of table formats that Gnuastro can currently read from and write to are described below. Each has their own advantage and disadvantages, so a short review of the format is also provided to help you make the best choice based on how you want to define your input tables or later use your output tables. @table @asis @item Plain text table This is the most basic and simplest way to create, view, or edit the table by hand on a text editor. The other formats described below are less eye-friendly and have a more formal structure (for easier computer readability). It is fully described in @ref{Gnuastro text table format}. @cindex FITS Tables @cindex Tables FITS @cindex ASCII table, FITS @item FITS ASCII tables The FITS ASCII table extension is fully in ASCII encoding and thus easily readable on any text editor (assuming it is the only extension in the FITS file). If the FITS file also contains binary extensions (for example, an image or binary table extensions), then there will be many hard to print characters. The FITS ASCII format does not have new line characters to separate rows. In the FITS ASCII table standard, each row is defined as a fixed number of characters (value to the @code{NAXIS1} keyword), so to visually inspect it properly, you would have to adjust your text editor's width to this value. All columns start at given character positions and have a fixed width (number of characters). Numbers in a FITS ASCII table are printed into ASCII format, they are not in binary (that the CPU uses). Hence, they can take a larger space in memory, loose their precision, and take longer to read into memory. If you are dealing with integer type columns (see @ref{Numeric data types}), another issue with FITS ASCII tables is that the type information for the column will be lost (there is only one integer type in FITS ASCII tables). One problem with the binary format on the other hand is that it is not portable (different CPUs/compilers) have different standards for translating the zeros and ones. But since ASCII characters are defined on a byte and are well recognized, they are better for portability on those various systems. Gnuastro's plain text table format described below is much more portable and easier to read/write/interpret by humans manually. Generally, as the name implies, this format is useful for when your table mainly contains ASCII columns (for example, file names, or descriptions). They can be useful when you need to include columns with structured ASCII information along with other extensions in one FITS file. In such cases, you can also consider header keywords (see @ref{Fits}). @cindex Binary table, FITS @item FITS binary tables The FITS binary table is the FITS standard's solution to the issues discussed with keeping numbers in ASCII format as described under the FITS ASCII table title above. Only columns defined as a string type (a string of ASCII characters) are readable in a text editor. The portability problem with binary formats discussed above is mostly solved thanks to the portability of CFITSIO (see @ref{CFITSIO}) and the very long history of the FITS format which has been widely used since the 1970s. In the case of most numbers, storing them in binary format is more memory efficient than ASCII format. For example, to store @code{-25.72034} in ASCII format, you need 9 bytes/characters. But if you keep this same number (to the approximate precision possible) as a 4-byte (32-bit) floating point number, you can keep/transmit it with less than half the amount of memory. When catalogs contain thousands/millions of rows in tens/hundreds of columns, this can lead to significant improvements in memory/band-width usage. Moreover, since the CPU does its operations in the binary formats, reading the table in and writing it out is also much faster than an ASCII table. When you are dealing with integer numbers, the compression ratio can be even better, for example, if you know all of the values in a column are positive and less than @code{255}, you can use the @code{unsigned char} type which only takes one byte! If they are between @code{-128} and @code{127}, then you can use the (signed) @code{char} type. So if you are thoughtful about the limits of your integer columns, you can greatly reduce the size of your file and also the speed at which it is read/written. This can be very useful when sharing your results with collaborators or publishing them. To decrease the file size even more you can name your output as ending in @file{.fits.gz} so it is also compressed after creation. Just note that compression/decompressing is CPU intensive and can slow down the writing/reading of the file. Fortunately the FITS Binary table format also accepts ASCII strings as column types (along with the various numerical types). So your dataset can also contain non-numerical columns. @end table @menu * Gnuastro text table format:: Reading plain text tables @end menu @node Gnuastro text table format, Selecting table columns, Recognized table formats, Tables @subsection Gnuastro text table format Plain text files are the most generic, portable, and easiest way to (manually) create, (visually) inspect, or (manually) edit a table. In this format, the ending of a row is defined by the new-line character (a line on a text editor). So when you view it on a text editor, every row will occupy one line. The delimiters (or characters separating the columns) are white space characters (space, horizontal tab, vertical tab) and a comma (@key{,}). The only further requirement is that all rows/lines must have the same number of columns. The columns do not have to be exactly under each other and the rows can be arbitrarily long with different lengths. For example, the following contents in a file would be interpreted as a table with 4 columns and 2 rows, with each element interpreted as a 64-bit floating point type (see @ref{Numeric data types}). @example 1 2.234948 128 39.8923e8 2 , 4.454 792 72.98348e7 @end example However, the example above has no other information about the columns (it is just raw data, with no meta-data). To use this table, you have to remember what the numbers in each column represent. Also, when you want to select columns, you have to count their position within the table. This can become frustrating and prone to bad errors (getting the columns wrong in your scientific project!) especially as the number of columns increase. It is also bad for sending to a colleague, because they will find it hard to remember/use the columns properly. To solve these problems in Gnuastro's programs/libraries you are not limited to using the column's number, see @ref{Selecting table columns}. If the columns have names, units, or comments you can also select your columns based on searches/matches in these fields, for example, see @ref{Table}. Also, in this manner, you cannot guide the program reading the table on how to read the numbers. As an example, the first and third columns above can be read as integer types: the first column might be an ID and the third can be the number of pixels an object occupies in an image. So there is no need to read these to columns as a 64-bit floating point type (which takes more memory, and is slower). In the bare-minimum example above, you also cannot use strings of characters, for example, the names of filters, or some other identifier that includes non-numerical characters. In the absence of any information, only numbers can be read robustly. Assuming we read columns with non-numerical characters as string, there would still be the problem that the strings might contain space (or any delimiter) character for some rows. So, each `word' in the string will be interpreted as a column and the program will abort with an error that the rows do not have the same number of columns. To correct for these limitations, Gnuastro defines the following convention for storing the table meta-data along with the raw data in one plain text file. The format is primarily designed for ease of reading/writing by eye/fingers, but is also structured enough to be read by a program. When the first non-white character in a line is @key{#}, or there are no non-white characters in it, then the line will not be considered as a row of data in the table (this is a pretty standard convention in many programs, and higher level languages). In the first case (when the first character of the line is @key{#}), the line is interpreted as a @emph{comment}. If the comment line starts with `@code{# Column N:}', then it is assumed to contain information about column @code{N} (a number, counting from 1). Comment lines that do not start with this pattern are ignored and you can use them to include any further information you want to store with the table in the text file. The most generic column information comment line has the following format: @example # Column N: NAME [UNIT, TYPE(NUM), BLANK] COMMENT @end example @cindex NaN @noindent Any sequence of characters between `@key{:}' and `@key{[}' will be interpreted as the column name (so it can contain anything except the `@key{[}' character). Anything between the `@key{]}' and the end of the line is defined as a comment. Within the brackets, anything before the first `@key{,}' is the units (physical units, for example, km/s, or erg/s), anything before the second `@key{,}' is the short type identifier (see below, and @ref{Numeric data types}). If the type identifier is not recognized, the default 64-bit floating point type will be used. The type identifier can optionally be followed by an integer within parenthesis. If the parenthesis is present and the integer is larger than 1, the column is assumed to be a ``vector column'' (which can have multiple values, for more see @ref{Vector columns}). Finally (still within the brackets), any non-white characters after the second `@key{,}' are interpreted as the blank value for that column (see @ref{Blank pixels}). The blank value can either be in the same type as the column (for example, @code{-99} for a signed integer column), or any string (for example, @code{NaN} in that same column). In both cases, the values will be stored in memory as Gnuastro's fixed blank values for each type. For floating point types, Gnuastro's internal blank value is IEEE NaN (Not-a-Number). For signed integers, it is the smallest possible value and for unsigned integers its the largest possible value. When a formatting problem occurs, or when the column was already given meta-data in a previous comment, or when the column number is larger than the actual number of columns in the table (the non-commented or empty lines), then the comment information line will be ignored. When a comment information line can be used, the leading and trailing white space characters will be stripped from all of the elements. For example, in this line: @example # Column 5: column name [km/s, f32,-99] Redshift as speed @end example The @code{NAME} field will be `@code{column name}' and the @code{TYPE} field will be `@code{f32}'. Note how all the white space characters before and after strings are not used, but those in the middle remained. Also, white space characters are not mandatory. Hence, in the example above, the @code{BLANK} field will be given the value of `@code{-99}'. Except for the column number (@code{N}), the rest of the fields are optional. Also, the column information comments do not have to be in order. In other words, the information for column @mymath{N+m} (@mymath{m>0}) can be given in a line before column @mymath{N}. Furthermore, you do not have to specify information for all columns. Those columns that do not have this information will be interpreted with the default settings (like the case above: values are double precision floating point, and the column has no name, unit, or comment). So these lines are all acceptable for any table (the first one, with nothing but the column number is redundant): @example # Column 5: # Column 1: ID [,i8] The Clump ID. # Column 3: mag_f160w [AB mag, f32] Magnitude from the F160W filter @end example @noindent The data type of the column should be specified with one of the following values: @itemize @item For a numeric column, you can use any of the numeric types (and their recognized identifiers) described in @ref{Numeric data types}. @item `@code{strN}': for strings. The @code{N} value identifies the length of the string (how many characters it has). The start of the string on each row is the first non-delimiter character of the column that has the string type. The next @code{N} characters will be interpreted as a string and all leading and trailing white space will be removed. If the next column's characters, are closer than @code{N} characters to the start of the string column in that line/row, they will be considered part of the string column. If there is a new-line character before the ending of the space given to the string column (in other words, the string column is the last column), then reading of the string will stop, even if the @code{N} characters are not complete yet. See @file{tests/table/table.txt} for one example. Therefore, the only time you have to pay attention to the positioning and spaces given to the string column is when it is not the last column in the table. The only limitation in this format is that trailing and leading white space characters will be removed from the columns that are read. In most cases, this is the desired behavior, but if trailing and leading white-spaces are critically important to your analysis, define your own starting and ending characters and remove them after the table has been read. For example, in the sample table below, the two `@key{|}' characters (which are arbitrary) will remain in the value of the second column and you can remove them manually later. If only one of the leading or trailing white spaces is important for your work, you can only use one of the `@key{|}'s. @example # Column 1: ID [label, u8] # Column 2: Notes [no unit, str50] 1 leading and trailing white space is ignored here 2.3442e10 2 | but they will be preserved here | 8.2964e11 @end example @end itemize Note that the FITS binary table standard does not define the @code{unsigned int} and @code{unsigned long} types, so if you want to convert your tables to FITS binary tables, use other types. Also, note that in the FITS ASCII table, there is only one integer type (@code{long}). So if you convert a Gnuastro plain text table to a FITS ASCII table with the @ref{Table} program, the type information for integers will be lost. Conversely if integer types are important for you, you have to manually set them when reading a FITS ASCII table (for example, with the Table program when reading/converting into a file, or with the @file{gnuastro/table.h} library functions when reading into memory). @node Selecting table columns, , Gnuastro text table format, Tables @subsection Selecting table columns At the lowest level, the only defining aspect of a column in a table is its number, or position. But selecting columns purely by number is not very convenient and, especially when the tables are large it can be very frustrating and prone to errors. Hence, table file formats (for example, see @ref{Recognized table formats}) have ways to store additional information about the columns (meta-data). Some of the most common pieces of information about each column are its @emph{name}, the @emph{units} of data in it, and a @emph{comment} for longer/informal description of the column's data. To facilitate research with Gnuastro, you can select columns by matching, or searching in these three fields, besides the low-level column number. To view the full list of information on the columns in the table, you can use the Table program (see @ref{Table}) with the command below (replace @file{table-file} with the filename of your table, if its FITS, you might also need to specify the HDU/extension which contains the table): @example $ asttable --information table-file @end example Gnuastro's programs need the columns for different purposes, for example, in Crop, you specify the columns containing the central coordinates of the crop centers with the @option{--coordcol} option (see @ref{Crop options}). On the other hand, in MakeProfiles, to specify the column containing the profile position angles, you must use the @option{--pcol} option (see @ref{MakeProfiles catalog}). Thus, there can be no unified common option name to select columns for all programs (different columns have different purposes). However, when the program expects a column for a specific context, the option names end in the @option{col} suffix like the examples above. These options accept values in integer (column number), or string (metadata match/search) format. If the value can be parsed as a positive integer, it will be seen as the low-level column number. Note that column counting starts from 1, so if you ask for column 0, the respective program will abort with an error. When the value cannot be interpreted as an a integer number, it will be seen as a string of characters which will be used to match/search in the table's meta-data. The meta-data field which the value will be compared with can be selected through the @option{--searchin} option, see @ref{Input output options}. @option{--searchin} can take three values: @code{name}, @code{unit}, @code{comment}. The matching will be done following this convention: @itemize @item If the value is enclosed in two slashes (for example, @command{-x/RA_/}, or @option{--coordcol=/RA_/}, see @ref{Crop options}), then it is assumed to be a regular expression with the same convention as GNU AWK. GNU AWK has a very well written @url{https://www.gnu.org/software/gawk/manual/html_node/Regexp.html, chapter} describing regular expressions, so we will not continue discussing them here. Regular expressions are a very powerful tool in matching text and useful in many contexts. We thus strongly encourage reviewing this chapter for greatly improving the quality of your work in many cases, not just for searching column meta-data in Gnuastro. @item When the string is not enclosed between `@key{/}'s, any column that exactly matches the given value in the given field will be selected. @end itemize Note that in both cases, you can ignore the case of alphabetic characters with the @option{--ignorecase} option, see @ref{Input output options}. Also, in both cases, multiple columns may be selected with one call to this function. In this case, the order of the selected columns (with one call) will be the same order as they appear in the table. @node Tessellation, Automatic output, Tables, Common program behavior @section Tessellation It is sometimes necessary to classify the elements in a dataset (for example, pixels in an image) into a grid of individual, non-overlapping tiles. For example, when background sky gradients are present in an image, you can define a tile grid over the image. When the tile sizes are set properly, the background's variation over each tile will be negligible, allowing you to measure (and subtract) it. In other cases (for example, spatial domain convolution in Gnuastro, see @ref{Convolve}), it might simply be for speed of processing: each tile can be processed independently on a separate CPU thread. In the arts and mathematics, this process is formally known as @url{https://en.wikipedia.org/wiki/Tessellation, tessellation}. The size of the regular tiles (in units of data-elements, or pixels in an image) can be defined with the @option{--tilesize} option. It takes multiple numbers (separated by a comma) which will be the length along the respective dimension (in FORTRAN/FITS dimension order). Divisions are also acceptable, but must result in an integer. For example, @option{--tilesize=30,40} can be used for an image (a 2D dataset). The regular tile size along the first FITS axis (horizontal when viewed in SAO DS9) will be 30 pixels and along the second it will be 40 pixels. Ideally, @option{--tilesize} should be selected such that all tiles in the image have exactly the same size. In other words, that the dataset length in each dimension is divisible by the tile size in that dimension. However, this is not always possible: the dataset can be any size and every pixel in it is valuable. In such cases, Gnuastro will look at the significance of the remainder length, if it is not significant (for example, one or two pixels), then it will just increase the size of the first tile in the respective dimension and allow the rest of the tiles to have the required size. When the remainder is significant (for example, one pixel less than the size along that dimension), the remainder will be added to one regular tile's size and the large tile will be cut in half and put in the two ends of the grid/tessellation. In this way, all the tiles in the central regions of the dataset will have the regular tile sizes and the tiles on the edge will be slightly larger/smaller depending on the remainder significance. The fraction which defines the remainder significance along all dimensions can be set through @option{--remainderfrac}. The best tile size is directly related to the spatial properties of the property you want to study (for example, gradient on the image). In practice we assume that the gradient is not present over each tile. So if there is a strong gradient (for example, in long wavelength ground based images) or the image is of a crowded area where there is not too much blank area, you have to choose a smaller tile size. A larger mesh will give more pixels and so the scatter in the results will be less (better statistics). @cindex CCD @cindex Amplifier @cindex Bias current @cindex Subaru Telescope @cindex Hyper Suprime-Cam @cindex Hubble Space Telescope (HST) For raw image processing, a single tessellation/grid is not sufficient. Raw images are the unprocessed outputs of the camera detectors. Modern detectors usually have multiple readout channels each with its own amplifier. For example, the Hubble Space Telescope Advanced Camera for Surveys (ACS) has four amplifiers over its full detector area dividing the square field of view to four smaller squares. Ground based image detectors are not exempt, for example, each CCD of Subaru Telescope's Hyper Suprime-Cam camera (which has 104 CCDs) has four amplifiers, but they have the same height of the CCD and divide the width by four parts. @cindex Channel The bias current on each amplifier is different, and initial bias subtraction is not perfect. So even after subtracting the measured bias current, you can usually still identify the boundaries of different amplifiers by eye. See Figure 11(a) in Akhlaghi and Ichikawa (2015) for an example. This results in the final reduced data to have non-uniform amplifier-shaped regions with higher or lower background flux values. Such systematic biases will then propagate to all subsequent measurements we do on the data (for example, photometry and subsequent stellar mass and star formation rate measurements in the case of galaxies). Therefore an accurate analysis requires a two layer tessellation: the top layer contains larger tiles, each covering one amplifier channel. For clarity we will call these larger tiles ``channels''. The number of channels along each dimension is defined through the @option{--numchannels}. Each channel is then covered by its own individual smaller tessellation (with tile sizes determined by the @option{--tilesize} option). This will allow independent analysis of two adjacent pixels from different channels if necessary. If the image is processed or the detector only has one amplifier, you can set the number of channels in both dimension to 1. The final tessellation can be inspected on the image with the @option{--checktiles} option that is available to all programs which use tessellation for localized operations. When this option is called, a FITS file with a @file{_tiled.fits} suffix will be created along with the outputs, see @ref{Automatic output}. Each pixel in this image has the number of the tile that covers it. If the number of channels in any dimension are larger than unity, you will notice that the tile IDs are defined such that the first channels is covered first, then the second and so on. For the full list of processing-related common options (including tessellation options), please see @ref{Processing options}. @node Automatic output, Output FITS files, Tessellation, Common program behavior @section Automatic output @cindex Standard input @cindex Automatic output file names @cindex Output file names, automatic @cindex Setting output file names automatically All the programs in Gnuastro are designed such that specifying an output file or directory (based on the program context) is optional. When no output name is explicitly given (with @option{--output}, see @ref{Input output options}), the programs will automatically set an output name based on the input name(s) and what the program does. For example, when you are using ConvertType to save FITS image named @file{dataset.fits} to a JPEG image and do not specify a name for it, the JPEG output file will be name @file{dataset.jpg}. When the input is from the standard input (for example, a pipe, see @ref{Standard input}), and @option{--output} is not given, the output name will be the program's name (for example, @file{converttype.jpg}). @vindex --keepinputdir Another very important part of the automatic output generation is that all the directory information of the input file name is stripped off of it. This feature can be disabled with the @option{--keepinputdir} option, see @ref{Input output options}. It is the default because astronomical data are usually very large and organized specially with special file names. In some cases, the user might not have write permissions in those directories@footnote{In fact, even if the data is stored on your own computer, it is advised to only grant write permissions to the super user or root. This way, you will not accidentally delete or modify your valuable data!}. Let's assume that we are working on a report and want to process the FITS images from two projects (ABC and DEF), which are stored in the sub-directories named @file{ABCproject/} and @file{DEFproject/} of our top data directory (@file{/mnt/data}). The following shell commands show how one image from the former is first converted to a JPEG image through ConvertType and then the objects from an image in the latter project are detected using NoiseChisel. The text after the @command{#} sign are comments (not typed!). @example $ pwd # Current location /home/usrname/research/report $ ls # List directory contents ABC01.jpg $ ls /mnt/data/ABCproject # Archive 1 ABC01.fits ABC02.fits ABC03.fits $ ls /mnt/data/DEFproject # Archive 2 DEF01.fits DEF02.fits DEF03.fits $ astconvertt /mnt/data/ABCproject/ABC02.fits --output=jpg # Prog 1 $ ls ABC01.jpg ABC02.jpg $ astnoisechisel /mnt/data/DEFproject/DEF01.fits # Prog 2 $ ls ABC01.jpg ABC02.jpg DEF01_detected.fits @end example @node Output FITS files, Numeric locale, Automatic output, Common program behavior @section Output FITS files @cindex FITS @cindex Output FITS headers @cindex CFITSIO version on outputs The output of many of Gnuastro's programs are (or can be) FITS files. The FITS format has many useful features for storing scientific datasets (cubes, images and tables) along with a robust features for archivability. For more on this standard, please see @ref{Fits}. As a community convention described in @ref{Fits}, the first extension of all FITS files produced by Gnuastro's programs only contains the meta-data that is intended for the file's extension(s). For a Gnuastro program, this generic meta-data (that is stored as FITS keyword records) is its configuration when it produced this dataset: file name(s) of input(s) and option names, values and comments. You can use the @option{--outfitsnoconfig} option to stop the programs from writing these keywords into the first extension of their output. When the configuration is too trivial (only input filename, for example, the program @ref{Table}) no meta-data is written in this extension. FITS keywords have the following limitations in regards to generic option names and values which are described below: @itemize @item If a keyword (option name) is longer than 8 characters, the first word in the record (80 character line) is @code{HIERARCH} which is followed by the keyword name. @item Values can be at most 75 characters, but for strings, this changes to 73 (because of the two extra @key{'} characters that are necessary). However, if the value is a file name, containing slash (@key{/}) characters to separate directories, Gnuastro will break the value into multiple keywords. @item Keyword names ignore case, therefore they are all in capital letters. Therefore, if you want to use Grep to inspect these keywords, use the @option{-i} option, like the example below. @example $ astfits image_detected.fits -h0 | grep -i snquant @end example @end itemize The keywords above are classified (separated by an empty line and title) as a group titled ``ProgramName configuration''. This meta-data extension also contains a final group of keywords to keep the basic date and version information of Gnuastro, its dependencies and the pipeline that is using Gnuastro (if it is under version control); they are listed below. @table @command @item DATE The creation time of the FITS file. This date is written directly by CFITSIO and is in UT format. While the date can be a good metadata in most scenarios, it does have a caveat: when everything else in your output is the same between multiple runs, the date will be different! If exact reproducibility is important for you, this can be annoying! To stop any Gnuastro program from writing the @code{DATE} keyword, you can use the @option{--outfitsnodate} (see @ref{Input output options}). @item DATEUTC If the date in the @code{DATE} keyword is in @url{https://en.wikipedia.org/wiki/Coordinated_Universal_Time, UTC}, this keyword will have a value of 1; otherwise, it will have a value of 0. If @code{DATE} is not written, this is also ignored. @item COMMIT Git's commit description from the running directory of Gnuastro's programs. If the running directory is not version controlled or @file{libgit2} is not installed (see @ref{Optional dependencies}) then this keyword will not be present. The printed value is equivalent to the output of the following command: @example git describe --dirty --always @end example If the running directory contains non-committed work, then the stored value will have a `@command{-dirty}' suffix. This can be very helpful to let you know that the data is not ready to be shared with collaborators or submitted to a journal. You should only share results that are produced after all your work is committed (safely stored in the version controlled history and thus reproducible). At first sight, version control appears to be mainly a tool for software developers. However progress in a scientific research is almost identical to progress in software development: first you have a rough idea that starts with handful of easy steps. But as the first results appear to be promising, you will have to extend, or generalize, it to make it more robust and work in all the situations your research covers, not just your first test samples. Slowly you will find wrong assumptions or bad implementations that need to be fixed (`bugs' in software development parlance). Finally, when you submit the research to your collaborators or a journal, many comments and suggestions will come in, and you have to address them. Software developers have created version control systems precisely for this kind of activity. Each significant moment in the project's history is called a ``commit'', see @ref{Version controlled source}. A snapshot of the project in each ``commit'' is safely stored away, so you can revert back to it at a later time, or check changes/progress. This way, you can be sure that your work is reproducible and track the progress and history. With version control, experimentation in the project's analysis is greatly facilitated, since you can easily revert back if a brainstorm test procedure fails. One important feature of version control is that the research result (FITS image, table, report or paper) can be stamped with the unique commit information that produced it. This information will enable you to exactly reproduce that same result later, even if you have made changes/progress. For one example of a research paper's reproduction pipeline, please see the @url{https://gitlab.com/makhlaghi/NoiseChisel-paper, reproduction pipeline} of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015} describing @ref{NoiseChisel}. In case you don't want the @code{COMMIT} keyword in the first extension of your output FITS file, you can use the @option{--outfitsnocommit} option (see @ref{Input output options}). @item CFITSIO The version of CFITSIO used (see @ref{CFITSIO}). This can be disabled with @option{--outfitsnoversions} (see @ref{Input output options}). @item WCSLIB The version of WCSLIB used (see @ref{WCSLIB}). Note that older versions of WCSLIB do not report the version internally. So this is only available if you are using more recent WCSLIB versions. This can be disabled with @option{--outfitsnoversions} (see @ref{Input output options}). @item GSL The version of GNU Scientific Library that was used, see @ref{GNU Scientific Library}. This can be disabled with @option{--outfitsnoversions} (see @ref{Input output options}). @item GNUASTRO The version of Gnuastro used (see @ref{Version numbering}). This can be disabled with @option{--outfitsnoversions} (see @ref{Input output options}). @end table @node Numeric locale, , Output FITS files, Common program behavior @section Numeric locale @cindex Locale @cindex @code{LC_ALL} @cindex @code{LC_NUMERIC} @cindex Decimal separator @cindex Language of command-line If your @url{https://en.wikipedia.org/wiki/Locale_(computer_software), system locale} is not English, it may happen that the `.' is not used as the decimal separator of basic command-line tools for input or output. For example, in Spanish and some other languages the decimal separator (symbol used to separate the integer and fractional part of a number), is a comma. Therefore in such systems, some programs may print @mymath{0.5} as as `@code{0,5}' (instead of `@code{0.5}'). This mainly happens in some core operating system tools like @command{awk} or @command{seq} depend on the locale. This can cause problems for other programs (like those in Gnuastro that expect a `@key{.}' as the decimal separator). To see the effect, please try the commands below. The first one will print @mymath{0.5} in your default locale's format. The second set will use the Spanish locale for printing numbers (which will put a comma between the 0 and the 5). The third will use the English (US) locale for printing numbers (which will put a point between the 0 and the 5). @example $ seq 0.5 1 $ export LC_NUMERIC=es_ES.utf8 $ seq 0.5 1 $ export LC_NUMERIC=en_US.utf8 $ seq 0.5 1 @end example @noindent With the simple command below, you can check your current locale environment variables for specifying the formats of various things like date, time, monetary, telephone, numbers, etc. You can change any of these, by simply giving different values to the respective variable like above. For a more complete explanation on each variable, see @url{https://www.baeldung.com/linux/locale-environment-variables}. @example $ locale @end example To avoid these kinds of locale-specific problems (for example, another program not being able to read `@code{0,5}' as half of unity), you can change the locale by giving the value of @code{C} to the @code{LC_NUMERIC} environment variable (or the lower-level/generic @code{LC_ALL}). You will notice that @code{C} is not a human-language and country identifier like @code{en_US}, it is the programming locale, which is well recognized by programmers in all countries and is available on all Unix-like operating systems (others may not be pre-defined and may need installation). You can set the @code{LC_NUMERIC} only for a single command (the first one below: simply defining the variable in the same line), or all commands within the running session (the second command below, or ``exporting'' it to all subsequent commands): @example ## Change the numeric locale, only for this 'seq' command. $ LC_NUMERIC=C seq 0.5 1 ## Change the locale to the standard, for all commands after it. $ export LC_NUMERIC=C @end example If you want to change it generally for all future sessions, you can put the second command in your shell's startup file. For more on startup files, please see @ref{Installation directory}. @node Data containers, Data manipulation, Common program behavior, Top @chapter Data containers @cindex File operations @cindex Operations on files @cindex General file operations The most low-level and basic property of a dataset is how it is stored. To process, archive and transmit the data, you need a container to store it first. From the start of the computer age, different formats have been defined to store data, optimized for particular applications. One format/container can never be useful for all applications: the storage defines the application and vice-versa. In astronomy, the Flexible Image Transport System (FITS) standard has become the most common format of data storage and transmission. It has many useful features, for example, multiple sub-containers (also known as extensions or header data units, HDUs) within one file, or support for tables as well as images. Each HDU can store an independent dataset and its corresponding meta-data. Therefore, Gnuastro has one program (see @ref{Fits}) specifically designed to manipulate FITS HDUs and the meta-data (header keywords) in each HDU. Your astronomical research does not just involve data analysis (where the FITS format is very useful). For example, you want to demonstrate your raw and processed FITS images or spectra as figures within slides, reports, or papers. The FITS format is not defined for such applications. Thus, Gnuastro also comes with the ConvertType program (see @ref{ConvertType}) which can be used to convert a FITS image to and from (where possible) other formats like plain text and JPEG (which allow two way conversion), along with EPS and PDF (which can only be created from FITS, not the other way round). Finally, the FITS format is not just for images, it can also store tables. Binary tables in particular can be very efficient in storing catalogs that have more than a few tens of columns and rows. However, unlike images (where all elements/pixels have one data type), tables contain multiple columns and each column can have different properties: independent data types (see @ref{Numeric data types}) and meta-data. In practice, each column can be viewed as a separate container that is grouped with others in the table. The only shared property of the columns in a table is thus the number of elements they contain. To allow easy inspection/manipulation of table columns, Gnuastro has the Table program (see @ref{Table}). It can be used to select certain table columns in a FITS table and see them as a human readable output on the command-line, or to save them into another plain text or FITS table. @menu * Fits:: View and manipulate extensions and keywords. * ConvertType:: Convert data to various formats. * Table:: Read and Write FITS tables to plain text. * Query:: Import data from external databases. @end menu @node Fits, ConvertType, Data containers, Data containers @section Fits @cindex Vatican library The ``Flexible Image Transport System'', or FITS, is by far the most common data container format in astronomy and in constant use since the 1970s. Archiving (future usage, simplicity) has been one of the primary design principles of this format. In the last few decades it has proved so useful and robust that the Vatican Library has also chosen FITS for its ``long-term digital preservation'' project@footnote{@url{https://www.vaticanlibrary.va/home.php?pag=progettodigit}}. @cindex IAU, international astronomical union Although the full name of the standard invokes the idea that it is only for images, it also contains complete and robust features for tables. It started off in the 1970s and was formally published as a standard in 1981, it was adopted by the International Astronomical Union (IAU) in 1982 and an IAU working group to maintain its future was defined in 1988. The FITS 2.0 and 3.0 standards were approved in 2000 and 2008 respectively, and the 4.0 draft has also been released recently, please see the @url{https://fits.gsfc.nasa.gov/fits_standard.html, FITS standard document web page} for the full text of all versions. Also see the @url{https://doi.org/10.1051/0004-6361/201015362, FITS 3.0 standard paper} for a nice introduction and history along with the full standard. @cindex Meta-data Many common image formats, for example, a JPEG, only have one image/dataset per file, however one great advantage of the FITS standard is that it allows you to keep multiple datasets (images or tables along with their separate meta-data) in one file. In the FITS standard, each data + metadata is known as an extension, or more formally a header data unit or HDU. The HDUs in a file can be completely independent: you can have multiple images of different dimensions/sizes or tables as separate extensions in one file. However, while the standard does not impose any constraints on the relation between the datasets, it is strongly encouraged to group data that are contextually related with each other in one file. For example, an image and the table/catalog of objects and their measured properties in that image. Other examples can be images of one patch of sky in different colors (filters), or one raw telescope image along with its calibration data (tables or images). As discussed above, the extensions in a FITS file can be completely independent. To keep some information (meta-data) about the group of extensions in the FITS file, the community has adopted the following convention: put no data in the first extension, so it is just meta-data. This extension can thus be used to store Meta-data regarding the whole file (grouping of extensions). Subsequent extensions may contain data along with their own separate meta-data. All of Gnuastro's programs also follow this convention: the main output dataset(s) are placed in the second (or later) extension(s). The first extension contains no data the program's configuration (input file name, along with all its option values) are stored as its meta-data, see @ref{Output FITS files}. The meta-data contain information about the data, for example, which region of the sky an image corresponds to, the units of the data, what telescope, camera, and filter the data were taken with, it observation date, or the software that produced it and its configuration. Without the meta-data, the raw dataset is practically just a collection of numbers and really hard to understand, or connect with the real world (other datasets). It is thus strongly encouraged to supplement your data (at any level of processing) with as much meta-data about your processing/science as possible. The meta-data of a FITS file is in ASCII format, which can be easily viewed or edited with a text editor or on the command-line. Each meta-data element (known as a keyword generally) is composed of a name, value, units and comments (the last two are optional). For example, below you can see three FITS meta-data keywords for specifying the world coordinate system (WCS, or its location in the sky) of a dataset: @example LATPOLE = -27.805089 / [deg] Native latitude of celestial pole RADESYS = 'FK5' / Equatorial coordinate system EQUINOX = 2000.0 / [yr] Equinox of equatorial coordinates @end example However, there are some limitations which discourage viewing/editing the keywords with text editors. For example, there is a fixed length of 80 characters for each keyword (its name, value, units and comments) and there are no new-line characters, so on a text editor all the keywords are seen in one line. Also, the meta-data keywords are immediately followed by the data which are commonly in binary format and will show up as strange looking characters on a text editor, and significantly slowing down the processor. Gnuastro's Fits program was designed to allow easy manipulation of FITS extensions and meta-data keywords on the command-line while conforming fully with the FITS standard. For example, you can copy or cut (copy and remove) HDUs/extensions from one FITS file to another, or completely delete them. It also has features to delete, add, or edit meta-data keywords within one HDU. @menu * Invoking astfits:: Arguments and options to Header. @end menu @node Invoking astfits, , Fits, Fits @subsection Invoking Fits Fits can print or manipulate the FITS file HDUs (extensions), meta-data keywords in a given HDU. The executable name is @file{astfits} with the following general template @example $ astfits [OPTION...] ASTRdata @end example @noindent One line examples: @example ## View general information about every extension: $ astfits image.fits ## Print the header keywords in the second HDU (counting from 0): $ astfits image.fits -h1 ## Only print header keywords that contain `NAXIS': $ astfits image.fits -h1 | grep NAXIS ## Only print the WCS standard PC matrix elements $ astfits image.fits -h1 | grep 'PC._.' ## Copy a HDU from input.fits to out.fits: $ astfits input.fits --copy=hdu-name --output=out.fits ## Update the OLDKEY keyword value to 153.034: $ astfits --update=OLDKEY,153.034,"Old keyword comment" ## Delete one COMMENT keyword and add a new one: $ astfits --delete=COMMENT --comment="Anything you like ;-)." ## Write two new keywords with different values and comments: $ astfits --write=MYKEY1,20.00,"An example keyword" --write=MYKEY2,fd ## Inspect individual pixel area taken based on its WCS (in degree^2). ## Then convert the area to arcsec^2 with the Arithmetic program. $ astfits input.fits --pixelareaonwcs -o pixarea.fits $ astarithmetic pixarea.fits 3600 3600 x x -o pixarea_arcsec2.fits @end example @cindex HDU @cindex HEALPix When no action is requested (and only a file name is given), Fits will print a list of information about the extension(s) in the file. This information includes the HDU number, HDU name (@code{EXTNAME} keyword), type of data (see @ref{Numeric data types}, and the number of data elements it contains (size along each dimension for images and table rows and columns). Optionally, a comment column is printed for special situations (like a 2D HEALPix grid that is usually stored as a 1D dataset/table). You can use this to get a general idea of the contents of the FITS file and what HDU to use for further processing, either with the Fits program or any other Gnuastro program. Here is one example of information about a FITS file with four extensions: the first extension has no data, it is a purely meta-data HDU (commonly used to keep meta-data about the whole file, or grouping of extensions, see @ref{Fits}). The second extension is an image with name @code{IMAGE} and single precision floating point type (@code{float32}, see @ref{Numeric data types}), it has 4287 pixels along its first (horizontal) axis and 4286 pixels along its second (vertical) axis. The third extension is also an image with name @code{MASK}. It is in 2-byte integer format (@code{int16}) which is commonly used to keep information about pixels (for example, to identify which ones were saturated, or which ones had cosmic rays and so on), note how it has the same size as the @code{IMAGE} extension. The third extension is a binary table called @code{CATALOG} which has 12371 rows and 5 columns (it probably contains information about the sources in the image). @example GNU Astronomy Utilities X.X Run on Day Month DD HH:MM:SS YYYY ----- HDU (extension) information: `image.fits'. Column 1: Index (counting from 0). Column 2: Name (`EXTNAME' in FITS standard). Column 3: Image data type or `table' format (ASCII or binary). Column 4: Size of data in HDU. ----- 0 n/a uint8 0 1 IMAGE float32 4287x4286 2 MASK int16 4287x4286 3 CATALOG table_binary 12371x5 @end example If a specific HDU is identified on the command-line with the @option{--hdu} (or @option{-h} option) and no operation requested, then the full list of header keywords in that HDU will be printed (as if the @option{--printallkeys} was called, see below). It is important to remember that this only occurs when @option{--hdu} is given on the command-line. The @option{--hdu} value given in a configuration file will only be used when a specific operation on keywords requested. Therefore as described in the paragraphs above, when no explicit call to the @option{--hdu} option is made on the command-line and no operation is requested (on the command-line or configuration files), the basic information of each HDU/extension is printed. The operating mode and input/output options to Fits are similar to the other programs and fully described in @ref{Common options}. The options particular to Fits can be divided into three groups: 1) those related to modifying HDUs or extensions (see @ref{HDU information and manipulation}), and 2) those related to viewing/modifying meta-data keywords (see @ref{Keyword inspection and manipulation}). 3) those related to creating meta-images where each pixel shows values for a specific property of the image (see @ref{Pixel information images}). These three classes of options cannot be called together in one run: you can either work on the extensions, meta-data keywords in any instance of Fits, or create meta-images where each pixel shows a particular information about the image itself. @menu * HDU information and manipulation:: Learn about the HDUs and move them. * Keyword inspection and manipulation:: Manipulate metadata keywords in a HDU. * Pixel information images:: Pixel values contain information on the pixels. @end menu @node HDU information and manipulation, Keyword inspection and manipulation, Invoking astfits, Invoking astfits @subsubsection HDU information and manipulation Each FITS file header data unit, or HDU (also known as an extension) is an independent dataset (data + meta-data). Multiple HDUs can be stored in one FITS file, see @ref{Fits}. The general HDU-related options to the Fits program are listed below as two general classes: the first group below focus on HDU information while the latter focus on manipulating (moving or deleting) the HDUs. The options below print information about the given HDU on the command-line. Thus they cannot be called together in one command (each has its own independent output). @table @option @item -n @itemx --numhdus Print the number of extensions/HDUs in the given file. Note that this option must be called alone and will only print a single number. It is thus useful in scripts, for example, when you need to do check the number of extensions in a FITS file. For a complete list of basic meta-data on the extensions in a FITS file, do not use any of the options in this section or in @ref{Keyword inspection and manipulation}. For more, see @ref{Invoking astfits}. @item --hastablehdu Print @code{1} (on standard output) if at least one table HDU (ASCII or binary) exists in the FITS file. Otherwise (when no table HDU exists in the file), print @code{0}. @item --listtablehdus Print the names or numbers (when a name does not exist, counting from zero) of HDUs that contain a table (ASCII or Binary) on standard output, one per line. Otherwise (when no table HDU exists in the file) nothing will be printed. @item --hasimagehdu Print @code{1} (on standard output) if at least one image HDU exists in the FITS file. Otherwise (when no image HDU exists in the file), print @code{0}. In the FITS standard, any array with any dimensions is called an ``image'', therefore this option includes 1, 3 and 4 dimensional arrays too. However, an image HDU with zero dimensions (which is usually the first extension and only contains metadata) is not counted here. @item --listimagehdus Print the names or numbers (when a name does not exist, counting from zero) of HDUs that contain an image on standard output, one per line. Otherwise (when no image HDU exists in the file) nothing will be printed. In the FITS standard, any array with any dimensions is called an ``image'', therefore this option includes 1, 3 and 4 dimensional arrays too. However, an image HDU with zero dimensions (which is usually the first extension and only contains metadata) is not counted here. @item --listallhdus Print the names or numbers (when a name does not exist, counting from zero) of all HDUs within the input file on the standard output, one per line. @item --pixelscale Print the HDU's pixel-scale (change in world coordinate for one pixel along each dimension) and pixel area or voxel volume. Without the @option{--quiet} option, the output of @option{--pixelscale} has multiple lines and explanations, thus being more human-friendly. It prints the file/HDU name, number of dimensions, and the units along with the actual pixel scales. Also, when any of the units are in degrees, the pixel scales and area/volume are also printed in units of arc-seconds. For 3D datasets, the pixel area (on each 2D slice of the 3D cube) is printed as well as the voxel volume. If you only want the pixel area of a 2D image in units of arcsec@mymath{^2} you can use @option{--pixelareaarcsec2} described below. However, in scripts (that are to be run automatically), this human-friendly format is annoying, so when called with the @option{--quiet} option, only the pixel-scale value(s) along each dimension is(are) printed in one line. These numbers are followed by the pixel area (in the raw WCS units). For 3D datasets, this will be area on each 2D slice. Finally, for 3D datasets, a final number (the voxel volume) is printed. As a summary, in @option{--quiet} mode, for 2D datasets three numbers are printed and for 3D datasets, 5 numbers are printed. If the dataset has more than 3 dimensions, only the pixel-scale values are printed (no area or volume will be printed). @item --pixelareaarcsec2 Print the HDU's pixel area in units of arcsec@mymath{^2}. This option only works on 2D images, that have WCS coordinates in units of degrees. For lower-level information about the pixel scale in each dimension, see @option{--pixelscale} (described above). @item --skycoverage @cindex Image's sky coverage @cindex Coverage of image over sky Print the rectangular area (or 3D cube) covered by the given image/datacube HDU over the Sky in the WCS units. The covered area is reported in two ways: 1) the center and full width in each dimension, 2) the minimum and maximum sky coordinates in each dimension. This is option is thus useful when you want to get a general feeling of a new image/dataset, or prepare the inputs to query external databases in the region of the image (for example, with @ref{Query}). If run without the @option{--quiet} option, the values are given with a human-friendly description. For example, here is the output of this option on an image taken near the star Castor: @example $ astfits castor.fits --skycoverage Input file: castor.fits (hdu: 1) Sky coverage by center and (full) width: Center: 113.9149075 31.93759664 Width: 2.41762045 2.67945253 Sky coverage by range along dimensions: RA 112.7235592 115.1411797 DEC 30.59262123 33.27207376 @end example With the @option{--quiet} option, the values are more machine-friendly (easy to parse). It has two lines, where the first line contains the center/width values and the second line shows the coordinate ranges in each dimension. @example $ astfits castor.fits --skycoverage --quiet 113.9149075 31.93759664 2.41762045 2.67945253 112.7235592 115.1411797 30.59262123 33.27207376 @end example Note that this is a simple rectangle (cube in 3D) definition, so if the image is rotated in relation to the celestial coordinates a general polygon is necessary to exactly describe the coverage. Hence when there is rotation, the reported area will be larger than the actual area containing data, you can visually see the area with the @option{--pixelareaonwcs} option of @ref{Fits}. Currently this option only supports images that are less than 180 degrees in width (which is usually the case!). This requirement has been necessary to account for images that cross the RA=0 hour circle on the sky. Please get in touch with us at @url{mailto:bug-gnuastro@@gnu.org} if you have an image that is larger than 180 degrees so we try to find a solution based on need. @item --datasum @cindex @code{DATASUM}: FITS keyword Calculate and print the given HDU's "datasum" to stdout. The given HDU is specified with the @option{--hdu} (or @option{-h}) option. This number is calculated by parsing all the bytes of the given HDU's data records (excluding keywords). This option ignores any possibly existing @code{DATASUM} keyword in the HDU. For more on @code{DATASUM} in the FITS standard, see @ref{Keyword inspection and manipulation} (under the @code{checksum} component of @option{--write}). You can use this option to confirm that the data in two different HDUs (possibly with different keywords) is identical. Its advantage over @option{--write=datasum} (which writes the @code{DATASUM} keyword into the given HDU) is that it does not require write permissions. @item --datasum-encoded Similar to @option{--datasum}, except that the output will be an encoded string of numbers and small-caps alphabetic characters. This is the same encoding algorithm that is used for the @code{CHECKSUM} keyword, but applied to the value of the @code{DATASUM} result. In some scenarios, this string can be more useful than the raw integer. @end table The following options manipulate (move/delete) the HDUs in one FITS file or to another FITS file. These options may be called multiple times in one run. If so, the extensions will be copied from the input FITS file to the output FITS file in the given order (on the command-line and also in configuration files, see @ref{Configuration file precedence}). If the separate classes are called together in one run of Fits, then first @option{--copy} is run (on all specified HDUs), followed by @option{--cut} (again on all specified HDUs), and then @option{--remove} (on all specified HDUs). The @option{--copy} and @option{--cut} options need an output FITS file (specified with the @option{--output} option). If the output file exists, then the specified HDU will be copied following the last extension of the output file (the existing HDUs in it will be untouched). Thus, after Fits finishes, the copied HDU will be the last HDU of the output file. If no output file name is given, then automatic output will be used to store the HDUs given to this option (see @ref{Automatic output}). @table @option @item -C STR @itemx --copy=STR Copy the specified extension into the output file, see explanations above. @item -k STR @itemx --cut=STR Cut (copy to output, remove from input) the specified extension into the output file, see explanations above. @item -R STR @itemx --remove=STR Remove the specified HDU from the input file. The first (zero-th) HDU cannot be removed with this option. Consider using @option{--copy} or @option{--cut} in combination with @option{primaryimghdu} to not have an empty zero-th HDU. From CFITSIO: ``In the case of deleting the primary array (the first HDU in the file) then [it] will be replaced by a null primary array containing the minimum set of required keywords and no data.''. So in practice, any existing data (array) and meta-data in the first extension will be removed, but the number of extensions in the file will not change. This is because of the unique position the first FITS extension has in the FITS standard (for example, it cannot be used to store tables). @item --primaryimghdu Copy or cut an image HDU to the zero-th HDU/extension a file that does not yet exist. This option is thus irrelevant if the output file already exists or the copied/cut extension is a FITS table. For example, with the commands below, first we make sure that @file{out.fits} does not exist, then we copy the first extension of @file{in.fits} to the zero-th extension of @file{out.fits}. @example $ rm -f out.fits $ astfits in.fits --copy=1 --primaryimghdu --output=out.fits @end example If we had not used @option{--primaryimghdu}, then the zero-th extension of @file{out.fits} would have no data, and its second extension would host the copied image (just like any other output of Gnuastro). @end table @node Keyword inspection and manipulation, Pixel information images, HDU information and manipulation, Invoking astfits @subsubsection Keyword inspection and manipulation The meta-data in each header data unit, or HDU (also known as extension, see @ref{Fits}) is stored as ``keyword''s. Each keyword consists of a name, value, unit, and comments. The Fits program (see @ref{Fits}) options related to viewing and manipulating keywords in a FITS HDU are described below. First, let's review the @option{--keyvalue} option which should be called separately from the rest of the options described in this section. Also, unlike the rest of the options in this section, with @option{--keyvalue}, you can give more than one input file. @table @option @item -l STR[,STR[,...] @itemx --keyvalue=STR[,STR[,...] Only print the value of the requested keyword(s): the @code{STR}s. @option{--keyvalue} can be called multiple times, and each call can contain multiple comma-separated keywords. If more than one file is given, this option uses the same HDU/extension for all of them (value to @option{--hdu}). For example, you can get the number of dimensions of the three FITS files in the running directory, as well as the length along each dimension, with this command: @example $ astfits *.fits --keyvalue=NAXIS,NAXIS1 --keyvalue=NAXIS2 image-a.fits 2 774 672 image-b.fits 2 774 672 image-c.fits 2 387 336 @end example If only one input is given, and the @option{--quiet} option is activated, the file name is not printed on the first column, only the values of the requested keywords. @example $ astfits image-a.fits --keyvalue=NAXIS,NAXIS1 \ --keyvalue=NAXIS2 --quiet 2 774 672 @end example @cartouche @noindent @cindex Argument list too long @strong{Argument list too long:} if the list of input files are too long, the shell is going to complain with the @code{Argument list too long} error! To avoid this problem, you can put the list of files in a plain-text file and give that plain-text file to the Fits program through the @option{--arguments} option discussed below. @end cartouche The output is internally stored (and finally printed) as a table (with one column per keyword). Therefore just like the Table program, you can use @option{--colinfoinstdout} to print the metadata like the example below (also see @ref{Invoking asttable}). The keyword metadata (comments and units) are extracted from the comments and units of the keyword in the input files (first file that has a comment or unit). Hence if the keyword does not have units or comments in any of the input files, they will be empty. For more on Gnuastro's plain-text metadata format, see @ref{Gnuastro text table format}. @example $ astfits *.fits --keyvalue=NAXIS,NAXIS1,NAXIS2 \ --colinfoinstdout # Column 1: FILENAME [name,str10,] Name of input file. # Column 2: NAXIS [ ,u8 ,] number of data axes # Column 3: NAXIS1 [ ,u16 ,] length of data axis 1 # Column 4: NAXIS2 [ ,u16 ,] length of data axis 2 image-a.fits 2 774 672 image-b.fits 2 774 672 image-c.fits 2 387 336 @end example Another advantage of a table output is that you can directly write the table to a file. For example, if you add @option{--output=fileinfo.fits}, the information above will be printed into a FITS table. You can also pipe it into @ref{Table} to select files based on certain properties, to sort them based on another property, or any other operation that can be done with Table (including @ref{Column arithmetic}). For example, with the command below, you can select all the files that have a size larger than 500 pixels in both dimensions. @example $ astfits *.fits --keyvalue=NAXIS,NAXIS1,NAXIS2 \ --colinfoinstdout \ | asttable --range=NAXIS1,500,inf \ --range=NAXIS2,500,inf -cFILENAME image-a.fits image-b.fits @end example Note that @option{--colinfoinstdout} is necessary to use column names when piping to other programs (like @command{asttable} above). Also, with the @option{-cFILENAME} option, we are asking Table to only print the final file names (we do not need the sizes any more). The commands with multiple files above used @file{*.fits}, which is only useful when all your FITS files are in the same directory. However, in many cases, your FITS files will be scattered in multiple sub-directories of a certain top-level directory, or you may only want those with more particular file name patterns. A more powerful way to list the input files to @option{--keyvalue} is to use the @command{find} program in Unix-like operating systems. For example, with the command below you can search all the FITS files in all the sub-directories of @file{/TOP/DIR}. @example astfits $(find /TOP/DIR/ -name "*.fits") --keyvalue=NAXIS2 @end example @item --arguments=STR A plain-text file containing the list of input files that will be used in @option{--keyvalue}. Each word (group of characters separated by SPACE or new-line) is assumed to be the name of the separate input file. This option is only relevant when no input files are given as arguments on the command-line: if any arguments are given, this option is ignored. This is necessary when the list of input files are very long; causing the shell to abort with an @code{Argument list too long} error. In such cases, you can put the list into a plain-text file and use this option like below: @example $ ls $(path)/*.fits > list.txt $ astfits --arguments=list.txt --keyvalue=NAXIS1 @end example @item -O @itemx --colinfoinstdout Print column information (or metadata) above the column values when writing keyword values to standard output with @option{--keyvalue}. You can read this option as column-information-in-standard-output. @end table Below we will discuss the options that can be used to manipulate keywords. To see the full list of keywords in a FITS HDU, you can use the @option{--printallkeys} option. If any of the keyword modification options below are requested (for example, @option{--update}), the headers of the input file/HDU will be changed first, then printed. Keyword modification is done within the input file. Therefore, if you want to keep the original FITS file or HDU intact, it is easiest to create a copy of the file/HDU first and then run Fits on that (for copying a HDU to another file, see @ref{HDU information and manipulation}. In the FITS standard, keywords are always uppercase. So case does not matter in the input or output keyword names you specify. @cartouche @noindent @strong{@code{CHECKSUM} automatically updated, when present:} the keyword modification options will change the contents of the HDU. Therefore, if a @code{CHECKSUM} is present in the HDU, after all the keyword modification options have been complete, Fits will also update @code{CHECKSUM} before closing the file. @end cartouche Most of the options can accept multiple instances in one command. For example, you can add multiple keywords to delete by calling @option{--delete} multiple times, since repeated keywords are allowed, you can even delete the same keyword multiple times. The action of such options will start from the top most keyword. The precedence of operations are described below. Note that while the order within each class of actions is preserved, the order of individual actions is not. So irrespective of what order you called @option{--delete} and @option{--update}. First, all the delete operations are going to take effect then the update operations. @enumerate @item @option{--delete} @item @option{--rename} @item @option{--update} @item @option{--write} @item @option{--asis} @item @option{--history} @item @option{--comment} @item @option{--date} @item @option{--printallkeys} @item @option{--verify} @item @option{--copykeys} @end enumerate @noindent All possible syntax errors will be reported before the keywords are actually written. FITS errors during any of these actions will be reported, but Fits will not stop until all the operations are complete. If @option{--quitonerror} is called, then Fits will immediately stop upon the first error. @cindex GNU Grep If you want to inspect only a certain set of header keywords, it is easiest to pipe the output of the Fits program to GNU Grep. Grep is a very powerful and advanced tool to search strings which is precisely made for such situations. for example, if you only want to check the size of an image FITS HDU, you can run: @example $ astfits input.fits | grep NAXIS @end example @cartouche @noindent @strong{FITS STANDARD KEYWORDS:} Some header keywords are necessary for later operations on a FITS file, for example, BITPIX or NAXIS, see the FITS standard for their full list. If you modify (for example, remove or rename) such keywords, the FITS file extension might not be usable any more. Also be careful for the world coordinate system keywords, if you modify or change their values, any future world coordinate system (like RA and Dec) measurements on the image will also change. @end cartouche @noindent The keyword related options to the Fits program are fully described below. @table @option @item -d STR @itemx --delete=STR Delete one instance of the @option{STR} keyword from the FITS header. Multiple instances of @option{--delete} can be given (possibly even for the same keyword, when its repeated in the meta-data). All keywords given will be removed from the headers in the same given order. If the keyword does not exist, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with @option{--quitonerror}. @item -r STR,STR @itemx --rename=STR,STR Rename a keyword to a new value (for example, @option{--rename=OLDNAME,NEWNAME}. @option{STR} contains both the existing and new names, which should be separated by either a comma (@key{,}) or a space character. Note that if you use a space character, you have to put the value to this option within double quotation marks (@key{"}) so the space character is not interpreted as an option separator. Multiple instances of @option{--rename} can be given in one command. The keywords will be renamed in the specified order. If the keyword does not exist, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with @option{--quitonerror}. @item -u STR @itemx --update=STR Update a keyword, its value, its comments and its units in the format described below. If there are multiple instances of the keyword in the header, they will be changed from top to bottom (with multiple @option{--update} options). @noindent The format of the values to this option can best be specified with an example: @example --update=KEYWORD,value,"comments for this keyword",unit @end example If there is a writing error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with @option{--quitonerror}. @noindent The value can be any numerical or string value@footnote{Some tricky situations arise with values like `@command{87095e5}', if this was intended to be a number it will be kept in the header as @code{8709500000} and there is no problem. But this can also be a shortened Git commit hash. In the latter case, it should be treated as a string and stored as it is written. Commit hashes are very important in keeping the history of a file during your research and such values might arise without you noticing them in your reproduction pipeline. One solution is to use @command{git describe} instead of the short hash alone. A less recommended solution is to add a space after the commit hash and Fits will write the value as `@command{87095e5 }' in the header. If you later compare the strings on the shell, the space character will be ignored by the shell in the latter solution and there will be no problem.}. Other than the @code{KEYWORD}, all the other values are optional. To leave a given token empty, follow the preceding comma (@key{,}) immediately with the next. If any space character is present around the commas, it will be considered part of the respective token. So if more than one token has space characters within it, the safest method to specify a value to this option is to put double quotation marks around each individual token that needs it. Note that without double quotation marks, space characters will be seen as option separators and can lead to undefined behavior. @item -w STR @itemx --write=STR Write a keyword to the header. For the possible value input formats, comments and units for the keyword, see the @option{--update} option above. The special names (first string) below will cause a special behavior: @table @option @item / Write a ``title'' to the list of keywords. A title consists of one blank line and another which is blank for several spaces and starts with a slash (@key{/}). The second string given to this option is the ``title'' or string printed after the slash. For example, with the command below you can add a ``title'' of `My keywords' after the existing keywords and add the subsequent @code{K1} and @code{K2} keywords under it (note that keyword names are not case sensitive). @example $ astfits test.fits -h1 --write=/,"My keywords" \ --write=k1,1.23,"My first keyword" \ --write=k2,4.56,"My second keyword" $ astfits test.fits -h1 [[[ ... truncated ... ]]] / My keywords K1 = 1.23 / My first keyword K2 = 4.56 / My second keyword END @end example Adding a ``title'' before each contextually separate group of header keywords greatly helps in readability and visual inspection of the keywords. So generally, when you want to add new FITS keywords, it is good practice to also add a title before them. The reason you need to use @key{/} as the keyword name for setting a title is that @key{/} is the first non-white character. The title(s) is(are) written into the FITS with the same order that @option{--write} is called. Therefore in one run of the Fits program, you can specify many different titles (with their own keywords under them). For example, the command below that builds on the previous example and adds another group of keywords named @code{A1} and @code{A2}. @example $ astfits test.fits -h1 --write=/,"My keywords" \ --write=k1,1.23,"My first keyword" \ --write=k2,4.56,"My second keyword" \ --write=/,"My second group of keywords" \ --write=a1,7.89,"First keyword" \ --write=a2,0.12,"Second keyword" @end example @item checksum @cindex CFITSIO @cindex @code{DATASUM}: FITS keyword @cindex @code{CHECKSUM}: FITS keyword When nothing is given afterwards, the header integrity keywords @code{DATASUM} and @code{CHECKSUM} will be calculated and written/updated. The calculation and writing is done fully by CFITSIO, therefore they comply with the FITS standard 4.0@footnote{@url{https://fits.gsfc.nasa.gov/standard40/fits_standard40aa-le.pdf}} that defines these keywords (its Appendix J). If a value is given (e.g., @option{--write=checksum,MyOwnCheckSum}), then CFITSIO will not be called to calculate these two keywords and the value (as well as possible comment and unit) will be written just like any other keyword. This is generally not recommended since @code{CHECKSUM} is a reserved FITS standard keyword. If you want to calculate the checksum with another hashing standard manually and write it into the header, it is recommended to use another keyword name. In the FITS standard, @code{CHECKSUM} depends on the HDU's data @emph{and} header keywords, it will therefore not be valid if you make any further changes to the header after writing the @code{CHECKSUM} keyword. This includes any further keyword modification options in the same call to the Fits program. However, @code{DATASUM} only depends on the data section of the HDU/extension, so it is not changed when you add, remove or update the header keywords. Therefore, it is recommended to write these keywords as the last keywords that are written/modified in the extension. You can use the @option{--verify} option (described below) to verify the values of these two keywords. @item datasum Similar to @option{checksum}, but only write the @code{DATASUM} keyword (that does not depend on the header keywords, only the data). @end table @item -a STR @itemx --asis=STR Write the given @code{STR} @emph{exactly} as it is, into the given FITS file header with no modifications. If the contents of @code{STR} does not conform to the FITS standard for keywords, then it may (most probably: it will!) corrupt your file and you may not be able to open it any more. So please be @strong{very careful} with this option (its your responsibility to make sure that the string conforms with the FITS standard for keywords). If you want to define the keyword from scratch, it is best to use the @option{--write} option (see below) and let CFITSIO worry about complying with the FITS standard. Also, you want to copy keywords from one FITS file to another, you can use @option{--copykeys} that is described below. Through these high-level instances, you don't have to worry about low-level issues. One common usage of @option{--asis} occurs when you are given the contents of a FITS header (many keywords) as a plain-text file (so the format of each keyword line conforms with the FITS standard, just the file is plain-text, and you have one keyword per line when you open it in a plain-text editor). In that case, Gnuastro's Fits program won't be able to parse it (it doesn't conform to the FITS standard, which doesn't have a new-line character!). With the command below, you can insert those headers in @file{headers.txt} into @file{img.fits} (its HDU number 1, the default; you can change the HDU to modify with @option{--hdu}). @example $ cat headers.txt \ | while read line; do \ astfits img.fits --asis="$line"; \ done @end example @cartouche @noindent @strong{Don't forget a title:} Since the newly added headers in the example above weren't originally in the file, they are probably some form of high-level metadata. The raw example above will just append the new keywords after the last one. Making it hard for human readability (its not clear what this new group of keywords signify, where they start, and where this group of keywords end). To help the human readability of the header, add a title for this group of keywords before writing them. To do that, run the following command before the @command{cat ...} command above (replace @code{Imported keys} with any title that best describes this group of new keywords based on their context): @example $ astfits img.fits --write=/,"Imported keys" @end example @end cartouche @item -H STR @itemx --history STR Add a @code{HISTORY} keyword to the header with the given value. A new @code{HISTORY} keyword will be created for every instance of this option. If the string given to this option is longer than 70 characters, it will be separated into multiple keyword cards. If there is an error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with @option{--quitonerror}. @item -c STR @itemx --comment STR Add a @code{COMMENT} keyword to the header with the given value. Similar to the explanation for @option{--history} above. @item -t @itemx --date Put the current date and time in the header. If the @code{DATE} keyword already exists in the header, it will be updated. If there is a writing error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with @option{--quitonerror}. @item -p @itemx --printallkeys Print the full metadata (keywords, values, units and comments) in the specified FITS extension (HDU). If this option is called along with any of the other keyword editing commands, as described above, all other editing commands take precedence to this. Therefore, it will print the final keywords after all the editing has been done. @item --printkeynames Print only the keyword names of the specified FITS extension (HDU), one line per name. This option must be called alone. @item -v @itemx --verify Verify the @code{DATASUM} and @code{CHECKSUM} data integrity keywords of the FITS standard. See the description under the @code{checksum} (under @option{--write}, above) for more on these keywords. This option will print @code{Verified} for both keywords if they can be verified. Otherwise, if they do not exist in the given HDU/extension, it will print @code{NOT-PRESENT}, and if they cannot be verified it will print @code{INCORRECT}. In the latter case (when the keyword values exist but cannot be verified), the Fits program will also return with a failure. By default this function will also print a short description of the @code{DATASUM} AND @code{CHECKSUM} keywords. You can suppress this extra information with @code{--quiet} option. @item --copykeys=INT:INT/STR,STR[,STR] Copy the desired set of the input's keyword records, to the to the output (specified with the @option{--output} and @option{--outhdu} for the filename and HDU/extension respectively). The keywords to copy can be given either as a range (in the format of @code{INT:INT}, inclusive) or a list of keyword names as comma-separated strings (@code{STR,STR}), the list can have any number of keyword names. More details and examples of the two forms are given below: @table @asis @item Range The given string to this option must be two integers separated by a colon (@key{:}). The first integer must be positive (counting of the keyword records starts from 1). The second integer may be negative (zero is not acceptable) or an integer larger than the first. A negative second integer means counting from the end. So @code{-1} is the last copy-able keyword (not including the @code{END} keyword). To see the header keywords of the input with a number before them, you can pipe the output of the Fits program (when it prints all the keywords in an extension) into the @command{cat} program like below: @example $ astfits input.fits -h1 | cat -n @end example @item List of names The given string to this option must be a comma separated list of keyword names. For example, see the command below: @example $ astfits input.fits -h1 --copykeys=KEY1,KEY2 \ --output=output.fits --outhdu=1 @end example Please consider the notes below when copying keywords with names: @itemize @item If the number of characters in the name is more than 8, CFITSIO will place a @code{HIERARCH} before it. In this case simply give the name and do not give the @code{HIERARCH} (which is a constant and not considered part of the keyword name). @item If your keyword name is composed only of digits, do not give it as the first name given to @option{--copykeys}. Otherwise, it will be confused with the range format above. You can safely give an only-digit keyword name as the second, or third requested keywords. @item If the keyword is repeated more than once in the header, currently only the first instance will be copied. In other words, even if you call @option{--copykeys} multiple times with the same keyword name, its first instance will be copied. If you need to copy multiple instances of the same keyword, please get in touch with us at @code{bug-gnuastro@@gnu.org}. @end itemize @end table @item --outhdu The HDU/extension to write the output keywords of @option{--copykeys}. @item -Q @itemx --quitonerror Quit if any of the operations above are not successful. By default if an error occurs, Fits will warn the user of the faulty keyword and continue with the rest of actions. @item -s STR @itemx --datetosec STR @cindex Unix epoch time @cindex Time, Unix epoch @cindex Epoch, Unix time Interpret the value of the given keyword in the FITS date format (most generally: @code{YYYY-MM-DDThh:mm:ss.ddd...}) and return the corresponding Unix epoch time (number of seconds that have passed since 00:00:00 Thursday, January 1st, 1970). The @code{Thh:mm:ss.ddd...} section (specifying the time of day), and also the @code{.ddd...} (specifying the fraction of a second) are optional. The value to this option must be the FITS keyword name that contains the requested date, for example, @option{--datetosec=DATE-OBS}. @cindex GNU C Library This option can also interpret the older FITS date format (@code{DD/MM/YYThh:mm:ss.ddd...}) where only two characters are given to the year. In this case (following the GNU C Library), this option will make the following assumption: values 68 to 99 correspond to the years 1969 to 1999, and values 0 to 68 as the years 2000 to 2068. This is a very useful option for operations on the FITS date values, for example, sorting FITS files by their dates, or finding the time difference between two FITS files. The advantage of working with the Unix epoch time is that you do not have to worry about calendar details (for example, the number of days in different months, or leap years). @item --wcscoordsys=STR @cindex FK5 @cindex Galactic coordinate system @cindex Ecliptic coordinate system @cindex Equatorial coordinate system @cindex Supergalactic coordinate system @cindex Coordinate system: Galactic @cindex Coordinate system: Ecliptic @cindex Coordinate system: Equatorial @cindex Coordinate system: Supergalactic Convert the coordinate system of the image's world coordinate system (WCS) to the given coordinate system (@code{STR}) and write it into the file given to @option{--output} (or an automatically named file if no @option{--output} has been given). For example, with the command below, @file{img-eq.fits} will have an identical dataset (pixel values) as @file{image.fits}. However, the WCS coordinate system of @file{img-eq.fits} will be the equatorial coordinate system in the Julian calendar epoch 2000 (which is the most common epoch used today). Fits will automatically extract the current coordinate system of @file{image.fits} and as long as it is one of the recognized coordinate systems listed below, it will do the conversion. @example $ astfits image.fits --wcscoordsys=eq-j2000 \ --output=img-eq.fits @end example The currently recognized coordinate systems are listed below (the most common one today is @code{eq-j2000}): @table @code @item eq-j2000 2000.0 (Julian-year) equatorial coordinates. This is also known as FK5 (short for ``Fundamental Katalog No 5'' which was the source of the star coordinates used to define it). This coordinate system is based on the motion of the Sun and has epochs when the mean equator was used (for example @code{eq-b1950} below). Furthermore, the definition of year is different: either the Besselian year in 1950.0, or the Julian year in 2000. For more on their difference and links for further reading about epochs in astronomy, please see the description in @url{https://en.wikipedia.org/wiki/Epoch_(astronomy), Wikipedia}. Because of these difficulties, the equatorial J2000.0 coordinate system has been deprecated by the IAU in favor of International Celestial Refernece System (ICRS) but is still used extensively. ICRS is defined based on extra-galactic quasars, so it does not depend on the dynamics of the solar system any more. But to enable historical continuity, ICRS has been defined to be equivalent to the equatorial J2000.0 within its accepted error bars of the latter (tens of milli-arcseconds). This justifies the reason that moving to ICRS has been relatively slow. @item eq-b1950 1950.0 (Besselian-year) equatorial coordinates. @item ec-j2000 2000.0 (Julian-year) ecliptic coordinates. @item ec-b1950 1950.0 (Besselian-year) ecliptic coordinates. @item galactic Galactic coordinates. @item supergalactic Supergalactic coordinates. @end table @item --wcsdistortion=STR @cindex WCS distortion @cindex Distortion, WCS @cindex SIP WCS distortion @cindex TPV WCS distortion If the argument has a WCS distortion, the output (file given with the @option{--output} option) will have the distortion given to this option (for example, @code{SIP}, @code{TPV}). The output will be a new file (with a copy of the image, and the new WCS), so if it already exists, the file will be delete (unless you use the @code{--dontdelete} option, see @ref{Input output options}). With this option, the Fits program will read the minimal set of keywords from the input HDU and the HDU data. It will then write them into the file given to the @option{--output} option but with a newly created set of WCS-related keywords corresponding to the desired distortion standard. If no @option{--output} file is specified, an automatically generated output name will be used which is composed of the input's name but with the @file{-DDD.fits} suffix, see @ref{Automatic output}. Where @file{DDD} is the value given to this option (desired output distortion). Note that all possible conversions between all standards are not yet supported. If the requested conversion is not supported, an informative error message will be printed. If this happens, please let us know and we will try our best to add the respective conversions. For example, with the command below, you can be sure that if @file{in.fits} has a distortion in its WCS, the distortion of @file{out.fits} will be in the SIP standard. @example $ astfits in.fits --wcsdistortion=SIP --output=out.fits @end example @end table @node Pixel information images, , Keyword inspection and manipulation, Invoking astfits @subsubsection Pixel information images In @ref{Keyword inspection and manipulation} options like @option{--pixelscale} were introduced for information on the pixels from the keywords. But that only provides a single value for all the pixels! This will not be sufficient in some scenarios; for example due to distortion, different regions of the image will have different pixel areas when projected onto the sky. @cindex Meta image The options in this section provide such ``meta'' images: images where the pixel values are information about the pixel itself. Such images can be useful in understanding the underlying pixel grid with the same tools that you study the astronomical objects within the image (like @ref{SAO DS9}). After all, nothing beats visual inspection with tools you are familiar with. @table @code @item --pixelareaonwcs Create a meta-image where each pixel's value shows its area in the WCS units (usually degrees squared). The output is therefore the same size as the input. @cindex Pixel mixing @cindex Area resampling @cindex Resampling by area This option uses the same ``pixel mixing'' or ``area resampling'' concept that is described in @ref{Resampling} (as part of the Warp program). Similar to Warp, its sampling can be tuned with the @option{--edgesampling} that is described below. @cindex Distortion @cindex Area of pixel on sky One scenario where this option becomes handy is when you are debugging aligned images using the Warp program (see @ref{Warp}). You may observe gradients after warping and can check if they caused by the distortion of the instrument or not. Such gradients can happen due to distortions because the detectors pixels are measuring photons from different areas on the sky (or the type of projection you're seeing). This effect is more pronounced in images covering larger portions of the sky, for instance, the TESS images@footnote{@url{https://www.nasa.gov/tess-transiting-exoplanet-survey-satellite}}. Here is an example usage of the @option{--pixelareaonwcs} option: @example # Check the area each 'input.fits' pixel takes in sky $ astfits input.fits -h1 --pixelareaonwcs -o pixarea.fits # Convert each pixel's area to arcsec^2 $ astarithmetic pixarea.fits 3600 3600 x x \ --output=pixarea_arcsec2.fits # Compare area relative to the actual reported pixel scale $ pixarea=$(astfits input.fits --pixelscale -q \ | awk '@{print $3@}') $ astarithmetic pixarea.fits $pixarea / -o pixarea_rel.fits @end example @item --edgesampling=INT Extra sampling along the pixel edges for @option{--pixelareaonwcs}. The default value is 0, meaning that only the pixel vertices are used. Values greater than zero improve the accuracy in the expense of greater time and memory consumption. With that said, the default value of zero usually has a good precision unless the given image has extreme distortions that produce irregular pixel shapes. For more, see @ref{Align pixels with WCS considering distortions}). @cartouche @noindent @strong{Caution:} This option does not ``oversample'' the output image! Rather, it makes Warp use more points to calculate the @emph{input} pixel area. To oversample the output image, set a reasonable @option{--cdelt} value. @end cartouche @end table @node ConvertType, Table, Fits, Data containers @section ConvertType @cindex Data format conversion @cindex Converting data formats @cindex Image format conversion @cindex Converting image formats @pindex @r{ConvertType (}astconvertt@r{)} The FITS format used in astronomy was defined mainly for archiving, transmission, and processing. In other situations, the data might be useful in other formats. For example, when you are writing a paper or report, or if you are making slides for a talk, you cannot use a FITS image. Other image formats should be used. In other cases you might want your pixel values in a table format as plain text for input to other programs that do not recognize FITS. ConvertType is created for such situations. The various types will increase with future updates and based on need. The conversion is not only one way (from FITS to other formats), but two ways (except the EPS and PDF formats@footnote{Because EPS and PDF are vector, not raster/pixelated formats}). So you can also convert a JPEG image or text file into a FITS image. Basically, other than EPS/PDF, you can use any of the recognized formats as different color channel inputs to get any of the recognized outputs. Before explaining the options and arguments (in @ref{Invoking astconvertt}), we will start with a short discussion on the difference between raster and vector graphics in @ref{Raster and Vector graphics}. In ConvertType, vector graphics are used to add markers over your originally rasterized data, producing high quality images, ready to be used in your exciting papers. We will continue with a description of the recognized files types in @ref{Recognized file formats}, followed a short introduction to digital color in @ref{Color}. A tutorial on how to add markers over an image is then given in @ref{Marking objects for publication} and we conclude with a @LaTeX{} based solution to add coordinates over an image. @menu * Raster and Vector graphics:: Images coming from nature, and the abstract. * Recognized file formats:: Recognized file formats * Color:: Some explanations on color. * Annotations for figure in paper:: Adding coordinates or physical scale. * Invoking astconvertt:: Options and arguments to ConvertType. @end menu @node Raster and Vector graphics, Recognized file formats, ConvertType, ConvertType @subsection Raster and Vector graphics @cindex Raster graphics @cindex Graphics (raster) Images that are produced by a hardware (for example, the camera in your phone, or the camera connected to a telescope) provide pixelated data. Such data are therefore stored in a @url{https://en.wikipedia.org/wiki/Raster_graphics, Raster graphics} format which has discrete, independent, equally spaced data elements. For example, this is the format used FITS (see @ref{Fits}), JPEG, TIFF, PNG and other image formats. @cindex Vector graphics @cindex Graphics (vector) On the other hand, when something is generated by the computer (for example, a diagram, plot or even adding a cross over a camera image to highlight something there), there is no ``observation'' or connection with nature! Everything is abstract! For such things, it is much easier to draw a mathematical line (with infinite resolution). Therefore, no matter how much you zoom-in, it will never get pixelated. This is the realm of @url{https://en.wikipedia.org/wiki/Vector_graphics, Vector graphics}. If you open the Gnuastro manual in @url{https://www.gnu.org/software/gnuastro/manual/gnuastro.pdf, PDF format} You can see such graphics in the Gnuastro manual, for example, in @ref{Circles and the complex plane} or @ref{Distance on a 2D curved space}. The most common vector graphics format is PDF for document sharing or SVG for web-based applications. The pixels of a raster image can be shown as vector-based squares with different shades, so vector graphics can generally also support raster graphics. This is very useful when you want to add some graphics over an image to help your discussion (for example a @mymath{+} over your object of interest). However, vector graphics is not optimized for rasterized data (which are usually also noisy!), and can either not display nicely, or result in much larger file volume (in bytes). Therefore, if it is not necessary to add any marks over a FITS image, for example, it may be better to store it in a rasterized format. The distinction between the vector and raster graphics is also the primary theme behind Gnuastro's logo, see @ref{Logo of Gnuastro}. @node Recognized file formats, Color, Raster and Vector graphics, ConvertType @subsection Recognized file formats The various standards and the file name extensions recognized by ConvertType are listed below. For a review on the difference between Raster and Vector graphics, see @ref{Raster and Vector graphics}. For a review on the concept of color and channels, see @ref{Color}. Currently, except for the FITS format, Gnuastro uses the file name's suffix to identify the format, so if the file's name does not end with one of the suffixes mentioned below, it will not be recognized. @table @asis @item FITS or IMH @cindex IRAF @cindex Astronomical data format Astronomical data are commonly stored in the FITS format (or the older data IRAF @file{.imh} format), a list of file name suffixes which indicate that the file is in this format is given in @ref{Arguments}. FITS is a raster graphics format. Each image extension of a FITS file only has one value per pixel/element. Therefore, when used as input, each input FITS image contributes as one color channel. If you want multiple extensions in one FITS file for different color channels, you have to repeat the file name multiple times and use the @option{--hdu}, @option{--hdu2}, @option{--hdu3} or @option{--hdu4} options to specify the different extensions. @item JPEG @cindex JPEG format @cindex Raster graphics @cindex Pixelated graphics The JPEG standard was created by the Joint photographic experts group. It is currently one of the most commonly used image formats. Its major advantage is the compression algorithm that is defined by the standard. Like the FITS standard, this is a raster graphics format, which means that it is pixelated. A JPEG file can have 1 (for gray-scale), 3 (for RGB) and 4 (for CMYK) color channels. If you only want to convert one JPEG image into other formats, there is no problem, however, if you want to use it in combination with other input files, make sure that the final number of color channels does not exceed four. If it does, then ConvertType will abort and notify you. @cindex Suffixes, JPEG images The file name endings that are recognized as a JPEG file for input are: @file{.jpg}, @file{.JPG}, @file{.jpeg}, @file{.JPEG}, @file{.jpe}, @file{.jif}, @file{.jfif} and @file{.jfi}. @item TIFF @cindex TIFF format TIFF (or Tagged Image File Format) was originally designed as a common format for scanners in the early 90s and since then it has grown to become very general. In many aspects, the TIFF standard is similar to the FITS image standard: it can allow data of many types (see @ref{Numeric data types}), and also allows multiple images to be stored in a single file (like a FITS extension: each image in the file is called a `directory' in the TIFF standard). However, unlike FITS, it can only store images, it has no constructs for tables. Also unlike FITS, each `directory' of a TIFF file can have a multi-channel (e.g., RGB) image. Another (inconvenient) difference with the FITS standard is that keyword names are stored as numbers, not human-readable text. However, outside of astronomy, because of its support of different numeric data types, many fields use TIFF images for accurate (for example, 16-bit integer or floating point for example) imaging data. @item EPS @cindex EPS @cindex PostScript @cindex Vector graphics @cindex Encapsulated PostScript The Encapsulated PostScript (EPS) format is essentially a one page PostScript file which has a specified size. Postscript is used to store a full document like this whole Gnuastro book. PostScript therefore also includes non-image data, for example, lines and texts. It is a fully functional programming language to describe a document. A PostScript file is a plain text file that can be edited like any program source with any plain-text editor. Therefore in ConvertType, EPS is only an output format and cannot be used as input. Contrary to the FITS or JPEG formats, PostScript is not a raster format, but is categorized as vector graphics. @cindex @TeX{} @cindex @LaTeX{} With these features in mind, you can see that when you are compiling a document with @TeX{} or @LaTeX{}, using an EPS file is much more low level than a JPEG and thus you have much greater control and therefore quality. Since it also includes vector graphic lines we also use such lines to make a thin border around the image to make its appearance in the document much better. Furthermore, through EPS, you can add marks over the image in many shapes and colors. No matter the resolution of the display or printer, these lines will always be clear and not pixelated. However, this can be done better with tools within @TeX{} or @LaTeX{} such as PGF/Tikz@footnote{@url{http://sourceforge.net/projects/pgf/}}. @cindex Binary image @cindex Saving binary image @cindex Black and white image If the final input image (possibly after all operations on the flux explained below) is a binary image or only has two colors of black and white (in segmentation maps for example), then PostScript has another great advantage compared to other formats. It allows for 1 bit pixels (pixels with a value of 0 or 1), this can decrease the output file size by 8 times. So if a gray-scale image is binary, ConvertType will exploit this property in the EPS and PDF (see below) outputs. @cindex Suffixes, EPS format The standard formats for an EPS file are @file{.eps}, @file{.EPS}, @file{.epsf} and @file{.epsi}. The EPS outputs of ConvertType have the @file{.eps} suffix. @item PDF @cindex PDF @cindex Adobe systems @cindex PostScript vs. PDF @cindex Compiled PostScript @cindex Portable Document format @cindex Static document description format The Portable Document Format (PDF) is currently the most common format for documents. It is a vector graphics format, allowing abstract constructs like marks or borders. The PDF format is based on Postscript, so it shares all the features mentioned above for EPS. To be able to display it is programmed content or print, a Postscript file needs to pass through a processor or compiler. A PDF file can be thought of as the processed output of the PostScript compiler. PostScript, EPS and PDF were created and are registered by Adobe Systems. @cindex Suffixes, PDF format @cindex GPL Ghostscript As explained under EPS above, a PDF document is a static document description format, viewing its result is therefore much faster and more efficient than PostScript. To create a PDF output, ConvertType will make an EPS file and convert that to PDF using GPL Ghostscript. The suffixes recognized for a PDF file are: @file{.pdf}, @file{.PDF}. If GPL Ghostscript cannot be run on the PostScript file, The EPS will remain and a warning will be printed (see @ref{Optional dependencies}). @item @option{blank} @cindex @file{blank} color channel This is not actually a file type! But can be used to fill one color channel with a blank value. If this argument is given for any color channel, that channel will not be used in the output. @item Plain text @cindex Plain text @cindex Suffixes, plain text The value of each pixel in a 2D image can be written as a 2D matrix in a plain-text file. Therefore, for the purpose of ConvertType, plain-text files are a single-channel raster graphics file format. Plain text files have the advantage that they can be viewed with any text editor or on the command-line. Most programs also support input as plain text files. As input, each plain text file is considered to contain one color channel. In ConvertType, the recognized extensions for plain text files are @file{.txt} and @file{.dat}. As described in @ref{Invoking astconvertt}, if you just give these extensions, (and not a full filename) as output, then automatic output will be preformed to determine the final output name (see @ref{Automatic output}). Besides these, when the format of a file cannot be recognized from its name, ConvertType will fall back to plain text mode. So you can use any name (even without an extension) for a plain text input or output. Just note that when the suffix is not recognized, automatic output will not be preformed. The basic input/output on plain text images is very similar to how tables are read/written as described in @ref{Gnuastro text table format}. Simply put, the restrictions are very loose, and there is a convention to define a name, units, data type (see @ref{Numeric data types}), and comments for the data in a commented line. The only difference is that as a table, a text file can contain many datasets (columns), but as a 2D image, it can only contain one dataset. As a result, only one information comment line is necessary for a 2D image, and instead of the starting `@code{# Column N}' (@code{N} is the column number), the information line for a 2D image must start with `@code{# Image 1}'. When ConvertType is asked to output to plain text file, this information comment line is written before the image pixel values. When converting an image to plain text, consider the fact that if the image is large, the number of columns in each line will become very large, possibly making it very hard to open in some text editors. @item Standard output (command-line) This is very similar to the plain text output, but instead of creating a file to keep the printed values, they are printed on the command-line. This can be very useful when you want to redirect the results directly to another program in one command with no intermediate file. The only difference is that only the pixel values are printed (with no information comment line). To print to the standard output, set the output name to `@file{stdout}'. @end table @node Color, Annotations for figure in paper, Recognized file formats, ConvertType @subsection Color @cindex RGB @cindex Filter @cindex Color channel @cindex Channel (color) Color is generally defined after mixing various data ``channels''. The values for each channel usually come a filter that is placed in the optical path. Filters, only allow a certain window of the spectrum to pass (for example, the SDSS @emph{r} filter only allows light from about 5500 to 7000 Angstroms). In digital monitors or common digital cameras, a different set of filters are used: Red, Green and Blue (commonly known as RGB) that are more optimized to the eye's perception. On the other hand, when printing on paper, standard printers use the cyan, magenta, yellow and key (CMYK, key=black) color space. @menu * Pixel colors:: Multiple filters in each pixel. * Colormaps for single-channel pixels:: Better display of single-filter images. * Vector graphics colors:: @end menu @node Pixel colors, Colormaps for single-channel pixels, Color, Color @subsubsection Pixel colors @cindex RGB @cindex CMYK @cindex Image @cindex Color @cindex Pixels @cindex Colormap @cindex Primary colors @cindex Color channel @cindex Channel, color As discussed in @ref{Color}, for each displayed/printed pixel of a color image, the dataset/image has three or four values. To store/show the three values for each pixel, cameras and monitors allocate a certain fraction of each pixel's area to red, green and blue filters. These three filters are thus built into the hardware at the pixel level. However, because measurement accuracy is very important in scientific instruments, and we want to do measurements (take images) with various/custom filters (without having to order a new expensive detector!), scientific detectors use the full area of the pixel to store one value for it in a single/mono channel dataset. To make measurements in different filters, we just place a filter in the light path before the detector. Therefore, the FITS format that is used to store astronomical datasets is inherently a mono-channel format (see @ref{Recognized file formats} or @ref{Fits}). @cindex False color @cindex Pseudo color When a subject has been imaged in multiple filters, you can feed each different filter into the red, green and blue channels of your monitor and obtain a false-colored visualization. The reason we say ``false-color'' (or pseudo color) is that generally, the three data channels you provide are not from the same Red, Green and Blue filters of your monitor! So the observed color on your monitor does not correspond the physical ``color'' that you would have seen if you looked at the object by eye. Nevertheless, it is good (and sometimes necessary) for visualization (of special features). In ConvertType, you can do this by giving each separate single-channel dataset (for example, in the FITS image format) as an argument (in the proper order), then asking for the output in a format that supports multi-channel datasets (for example, see the command below, or @ref{ConvertType input and output}). @example $ astconvertt r.fits g.fits b.fits --output=color.jpg @end example @node Colormaps for single-channel pixels, Vector graphics colors, Pixel colors, Color @subsubsection Colormaps for single-channel pixels @cindex Visualization @cindex Colormap, HSV @cindex HSV: Hue Saturation Value As discussed in @ref{Pixel colors}, color is not defined when a dataset/image contains a single value for each pixel. However, we interact with scientific datasets through monitors or printers. They allow multiple channels (independent values) per pixel and produce color with them (on monitors, this is usually with three channels: Red, Green and Blue). As a result, there is a lot of freedom in visualizing a single-channel dataset. The mapping of single-channel values to multi-channel colors is called called a ``color map''. Since more information can be put in multiple channels, this usually results in better visualizing the dynamic range of your single-channel data. In ConvertType, you can use the @option{--colormap} option to choose between different mappings of mono-channel inputs, see @ref{Invoking astconvertt}. Below, we will review two of the basic color maps, please see the description of @option{--colormap} in @ref{Invoking astconvertt} for the full list. @itemize @item @cindex Grayscale @cindex Colormap, gray-scale The most basic colormap is shades of black (because of its strong contrast with white). This scheme is called @url{https://en.wikipedia.org/wiki/Grayscale, Grayscale}. But ultimately, the black is just one color, so with Grayscale, you are not using the full dynamic range of the three-channel monitor effectively. To help in visualization, more complex mappings can be defined. @item A slightly more complex color map can be defined when you scale the values to a range of 0 to 360, and use as it as the ``Hue'' term of the @url{https://en.wikipedia.org/wiki/HSL_and_HSV, Hue-Saturation-Value} (HSV) color space (while fixing the ``Saturation'' and ``Value'' terms). The increased usage of the monitor's 3-channel color space is indeed better, but the resulting images can be un-''natural'' to the eye. @end itemize Since grayscale is a commonly used mapping of single-valued datasets, we will continue with a closer look at how it is stored. One way to represent a gray-scale image in different color spaces is to use the same proportions of the primary colors in each pixel. This is the common way most FITS image viewers work: for each pixel, they fill all the channels with the single value. While this is necessary for displaying a dataset, there are downsides when storing/saving this type of grayscale visualization (for example, in a paper). @itemize @item Three (for RGB) or four (for CMYK) values have to be stored for every pixel, this makes the output file very heavy (in terms of bytes). @item If printing, the printing errors of each color channel can make the printed image slightly more blurred than it actually is. @end itemize @cindex PNG standard @cindex Single channel CMYK To solve both these problems when storing grayscale visualization, the best way is to save a single-channel dataset into the black channel of the CMYK color space. The JPEG standard is the only common standard that accepts CMYK color space. The JPEG and EPS standards set two sizes for the number of bits in each channel: 8-bit and 12-bit. The former is by far the most common and is what is used in ConvertType. Therefore, each channel should have values between 0 to @math{2^8-1=255}. From this we see how each pixel in a gray-scale image is one byte (8 bits) long, in an RGB image, it is 3 bytes long and in CMYK it is 4 bytes long. But thanks to the JPEG compression algorithms, when all the pixels of one channel have the same value, that channel is compressed to one pixel. Therefore a Grayscale image and a CMYK image that has only the K-channel filled are approximately the same file size. @node Vector graphics colors, , Colormaps for single-channel pixels, Color @subsubsection Vector graphics colors @cindex Web colors @cindex Colors (web) When creating vector graphics, ConvertType recognizes the @url{https://en.wikipedia.org/wiki/Web_colors#Extended_colors, extended web colors} that are the result of merging the colors in the HTML 4.01, CSS 2.0, SVG 1.0 and CSS3 standards. They are all shown with their standard name in @ref{colornames}. The names are not case sensitive so you can use them in any form (for example, @code{turquoise} is the same as @code{Turquoise} or @code{TURQUOISE}). @cindex 24-bit terminal @cindex True color terminal @cindex Terminal (true color, 24 bit) On the command-line, you can also get the list of colors with the @option{--listcolors} option to CovertType, like below. In particular, if your terminal is 24-bit or "true color", in the last column, you will see each color. This greatly helps in selecting the best color for our purpose easily on the command-line (without taking your hands off the keyboard and getting distracted). @example $ astconvertt --listcolors @end example @float Figure,colornames @center@image{gnuastro-figures/color-names, 15cm, , } @caption{Recognized color names in Gnuastro, shown with their numerical identifiers.} @end float @node Annotations for figure in paper, Invoking astconvertt, Color, ConvertType @subsection Annotations for figure in paper @cindex Image annotation @cindex Annotation of images for paper To make a nice figure from your FITS images, it is important to show more than merely the raw image (converted to a printer friendly format like PDF or JPEG). Annotations (or visual metadata) over the raw image greatly help the readers clearly see your argument and put the image/result in a larger context. Examples include: @itemize @item Coordinates (Right Ascension and Declination) on the edges of the image, so viewers of your paper or presentation slides can get a physical feeling of the field's sky coverage. @item Thick line that has a fixed tangential size (for example, in kilo parsecs) at the redshift/distance of interest. @item Contours over the image to show radio/X-ray emission, over an optical image for example. @item Text, arrows, etc., over certain parts of the image. @end itemize @cindex PGFPlots Because of the modular philosophy of Gnuastro, ConvertType is only focused on converting your FITS images to printer friendly formats like JPEG or PDF. But to present your results in a slide or paper, you will often need to annotate the raw JPEG or PDF with some of the features above. The good news is that there are many powerful plotting programs that you can use to add such annotations. As a result, there is no point in making a new one, specific to Gnuastro. In this section, we will demonstrate this using the very powerful PGFPlots@footnote{@url{http://mirrors.ctan.org/graphics/pgf/contrib/pgfplots/doc/pgfplots.pdf}} package of @LaTeX{}. @cartouche @noindent @strong{Single script for easy running:} In this section we are reviewing the reason and details of every step which is good for educational purposes. But when you know the steps already, these separate code blocks can be annoying. Therefore the full script (except for the data download step) is available in @ref{Full script of annotations on figure}. @end cartouche @cindex TiKZ @cindex Matplotlib PGFPlots uses the same @LaTeX{} graphic engine that typesets your paper/slide. Therefore when you build your plots and figures using PGFPlots (and its underlying package PGF/TiKZ@footnote{@url{http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf}}) your plots will blend beautifully within your text: same fonts, same colors, same line properties, etc. Since most papers (and presentation slides@footnote{To build slides, @LaTeX{} has packages like Beamer, see @url{http://mirrors.ctan.org/macros/latex/contrib/beamer/doc/beameruserguide.pdf}}) are made with @LaTeX{}, PGFPlots is therefore the best tool for those who use @LaTeX{} to create documents. PGFPlots also does not need any extra dependencies beyond a basic/minimal @TeX{}-live installation, so it is much more reliable than tools like Matplotlib in Python that have hundreds of fast-evolving dependencies@footnote{See Figure 1 of Alliez et al. @url{https://arxiv.org/abs/1905.11123,2019}.}. To demonstrate this, we will create a surface brightness image of a galaxy in the F160W filter of the ABYSS survey@footnote{@url{http://research.iac.es/proyecto/abyss}}. In the code-block below, let's make a ``build'' directory to keep intermediate files and avoid populating the source. Afterwards, we will download the full image and crop out a 20 arcmin wide image around the galaxy with the commands below. You can run these commands in an empty directory. @example $ mkdir build $ wget http://cdsarc.u-strasbg.fr/ftp/J/A+A/621/A133/fits/ah_f160w.fits $ astcrop ah_f160w.fits --center=53.1616278,-27.7802446 --mode=wcs \ --width=20/3600 --output=build/crop.fits @end example To better show the low surface brightness (LSB) outskirts, we will warp the image, then convert the pixel units to surface brightness with the commands below. It is very important that the warping is done @emph{before} the conversion to surface brightness (in units of mag/arcsec@mymath{^2}), because the definition of surface brightness is non-linear. For more, see the surface brightness topic of @ref{Brightness flux magnitude}, and for a more complete tutorial, see @ref{FITS images in a publication}. @example $ zeropoint=25.94 $ astwarp build/crop.fits --centeroncorner --scale=1/3 \ --output=build/scaled.fits $ pixarea=$(astfits build/scaled.fits --pixelareaarcsec2) $ astarithmetic build/scaled.fits $zeropoint $pixarea counts-to-sb \ --output=build/sb.fits @end example We are now ready to convert the surface brightness image into a PDF. To better show the LSB features, we will also limit the color range with the @code{--fluxlow} and @option{--fluxhigh} options: all pixels with a surface brightness brighter than 22 mag/arcsec@mymath{^2} will be shown as black, and all pixels with a surface brightness fainter than 30 mag/arcsec@mymath{^2} will be white. These thresholds are being defined as variables, because we will also need them below (to pass into PGFPlots). We will also set @option{--borderwidth=0}, because the coordinate system we will add over the image will effectively be a border for the image (separating it from the background). @example $ sblow=22 $ sbhigh=30 $ astconvertt build/sb.fits --colormap=gray --borderwidth=0 \ --fluxhigh=$sbhigh --fluxlow=$sblow --output=build/sb.pdf @end example Please open @file{sb.pdf} and have a look. Also, please open @file{sb.fits} in DS9 (or any other FITS viewer) and play with the color range. Can the surface brightness limits be changed to better show the LSB structure? If so, you are free to change the limits above. We now have the printable PDF representation of the image, but as discussed above, it is not enough for a paper. We will add 1) a thick line showing the size of 20 kpc (kilo parsecs) at the redshift of the central galaxy, 2) coordinates and 3) a color bar, showing the surface brightness level of each grayscale level. To get the first job done, we first need to know the redshift of the central galaxy. To do this, we can use Gnuastro's Query program to look into all the objects in NED within this image (only asking for the RA, Dec and redshift columns). We will then use the Match program to find the NED entry that corresponds to our galaxy. @example $ astquery ned --dataset=objdir --overlapwith=build/sb.fits \ --column=ra,dec,z --output=ned.fits $ astmatch ned.fits -h1 --coord=53.1616278,-27.7802446 \ --ccol1=RA,Dec --aperture=1/3600 $ redshift=$(asttable ned_matched.fits -cz) $ echo $redshift @end example Now that we know the redshift of the central object, we can define the coordinates of the thick line that will show the length of 20 kpc at that redshift. It will be a horizontal line (fixed Declination) across a range of RA. The start of this thick line will be located at the top edge of the image (at the 95-percent of the width and height of the image). With the commands below we will find the three necessary parameters (one declination and two RAs). Just note that in astronomical images, RA increases to the left/east, which is the reason we are using the minimum and @code{+} to find the RA starting point. @example $ scalelineinkpc=20 $ coverage=$(astfits build/sb.fits --skycoverage --quiet | awk 'NR==2') $ scalelinedec=$(echo $coverage | awk '@{print $4-($4-$3)*0.05@}') $ scalelinerastart=$(echo $coverage | awk '@{print $1+($2-$1)*0.05@}') $ scalelineraend=$(astcosmiccal --redshift=$redshift --arcsectandist \ | awk '@{start='$scalelinerastart'; \ width='$scalelineinkpc'/$1/3600; \ print start+width@}') @end example To draw coordinates over the image, we need to feed these values into PGFPlots. But manually entering numbers into the PGFPlots source will be very frustrating and prone to many errors! Fortunately there is an easy way to do this: @LaTeX{} macros. New macros are defined by this @LaTeX{} command: @example \newcommand@{\macroname@}@{value@} @end example @noindent Anywhere that @LaTeX{} confronts @code{\macroname}, it will replace @code{value} when building the output. We will have one file called @file{macros.tex} in the build directory and define macros based on those values. We will use the shell's @code{printf} command to write these macro definition lines into the macro file. We just have to use double backslashes in the @code{printf} command, because backslash is a meaningful character for @code{printf}, but we want to keep one of them. Also, we put a @code{\n} at the end of each line, otherwise, all the commands will go into a single line of the macro file. We will also place the random `@code{ma}' string at the start of all our @LaTeX{} macros to help identify the macros for this plot. @example $ macros=build/macros.tex $ printf '\\newcommand@{\\maScaleDec@}'"@{$scalelinedec@}\n" > $macros $ printf '\\newcommand@{\\maScaleRAa@}'"@{$scalelinerastart@}\n" >> $macros $ printf '\\newcommand@{\\maScaleRAb@}'"@{$scalelineraend@}\n" >> $macros $ printf '\\newcommand@{\\maScaleKpc@}'"@{$scalelineinkpc@}\n" >> $macros $ printf '\\newcommand@{\\maCenterZ@}'"@{$redshift@}\n" >> $macros @end example Please open the macros file after these commands and have a look to see if they do conform to the expected format above. Another set of macros we will need to feed into PGFPlots is the coordinates of the image corners. Fortunately the @code{coverage} variable found above is also useful here. We just need to extract each item before feeding it into the macros. To do this, we will use AWK and keep each value with the temporary shell variable `@code{v}'. @example $ v=$(echo $coverage | awk '@{print $1@}') $ printf '\\newcommand@{\\maCropRAMin@}'"@{$v@}\n" >> $macros $ v=$(echo $coverage | awk '@{print $2@}') $ printf '\\newcommand@{\\maCropRAMax@}'"@{$v@}\n" >> $macros $ v=$(echo $coverage | awk '@{print $3@}') $ printf '\\newcommand@{\\maCropDecMin@}'"@{$v@}\n" >> $macros $ v=$(echo $coverage | awk '@{print $4@}') $ printf '\\newcommand@{\\maCropDecMax@}'"@{$v@}\n" >> $macros @end example Finally, we also need to pass some other numbers to PGFPlots: 1) the major tick distance (in the coordinate axes that will be printed on the edge of the image). We will assume 7 ticks for this image. 2) The minimum and maximum surface brightness values that we gave to ConvertType when making the PDF; PGFPlots will define its color-bar based on these two values. @example $ v=$(echo $coverage | awk '@{print ($2-$1)/7@}') $ printf '\\newcommand@{\\maTickDist@}'"@{$v@}\n" >> $macros $ printf '\\newcommand@{\\maSBlow@}'"@{$sblow@}\n" >> $macros $ printf '\\newcommand@{\\maSBhigh@}'"@{$sbhigh@}\n" >> $macros @end example All the necessary numbers are now ready. Please copy the contents below into a file called @file{my-figure.tex}. This is the PGFPlots source for this particular plot. Besides the coordinates and scale-line, we will also add some text over the image and an orange arrow pointing to the central object with its redshift printed over it. The parameters are generally human-readable, so you should be able to get a good feeling of every line. There are also comments which will show up as a different color when you copy this into a plain-text editor. @verbatim \begin{tikzpicture} %% Define the coordinates and colorbar \begin{axis}[ at={(0,0)}, axis on top, x dir=reverse, scale only axis, width=\linewidth, height=\linewidth, minor tick num=10, xmin=\maCropRAMin, xmax=\maCropRAMax, ymin=\maCropDecMin, ymax=\maCropDecMax, enlargelimits=false, every tick/.style={black}, xtick distance=\maTickDist, ytick distance=\maTickDist, yticklabel style={rotate=90}, ylabel={Declination (degrees)}, xlabel={Right Ascension (degrees)}, ticklabel style={font=\small, /pgf/number format/.cd, precision=4,/tikz/.cd}, x label style={at={(axis description cs:0.5,0.02)}, anchor=north,font=\small}, y label style={at={(axis description cs:0.07,0.5)}, anchor=south,font=\small}, colorbar, colormap name=gray, point meta min=\maSBlow, point meta max=\maSBhigh, colorbar style={ at={(1.01,1)}, ylabel={Surface brightness (mag/arcsec$^2$)}, yticklabel style={ /pgf/number format/.cd, precision=1, /tikz/.cd}, y label style={at={(axis description cs:5.3,0.5)}, anchor=south,font=\small}, }, ] %% Put the image in the proper positions of the plot. \addplot graphics[ xmin=\maCropRAMin, xmax=\maCropRAMax, ymin=\maCropDecMin, ymax=\maCropDecMax] {sb.pdf}; %% Draw the scale factor. \addplot[black, line width=5, name=scaleline] coordinates {(\maScaleRAa,\maScaleDec) (\maScaleRAb,\maScaleDec)} node [anchor=north west] {\large $\maScaleKpc$ kpc}; \end{axis} %% Add some text anywhere over the plot. The text is added two %% times: the first time with a white background (that with a %% certain opacity), the second time just the text with opacity. \node[anchor=south west, fill=white, opacity=0.5] at (0.01\linewidth,0.01\linewidth) {(a) Text can be added here}; \node[anchor=south west] at (0.01\linewidth,0.01\linewidth) {(a) Text can be added here}; %% Add an arrow to highlight certain structures. \draw [->, red!70!yellow, line width=5] (0.35\linewidth,0.35\linewidth) -- node [anchor=south, rotate=45]{$z=\maCenterZ$} (0.45\linewidth,0.45\linewidth); \end{tikzpicture} @end verbatim Finally, we need another simple @LaTeX{} source for the main PDF ``report'' that will host this figure. This can actually be your paper or slides for example. Here, we will suffice to the minimal working example. @verbatim \documentclass{article} %% Import the TiKZ package and activate its "external" feature. \usepackage{tikz} \usetikzlibrary{external} \tikzexternalize %% PGFPlots (which uses TiKZ). \usepackage{pgfplots} \pgfplotsset{axis line style={thick}} \pgfplotsset{ /pgfplots/colormap={gray}{rgb255=(0,0,0) rgb255=(255,255,255)} } %% Import the macros. \input{macros.tex} %% Start document. \begin{document} You can write anything here. %% Add the figure and its caption. \begin{figure} \input{my-figure.tex} \caption{A demo image.} \end{figure} %% Finish the document. \end{document} @end verbatim You are now ready to create the PDF. But @LaTeX{} creates many temporary files, so to avoid populating our top-level directory, we will copy the two @file{.tex} files into the build directory, go there and run @LaTeX{}. Before running it though, we will first delete all the files that have the name pattern @file{*-figure0*}, these are ``external'' files created by TiKZ+PGFPlots, including the actual PDF of the figure. @example $ cp report.tex my-figure.tex build $ cd build $ rm -f *-figure0* $ pdflatex -shell-escape -halt-on-error report.tex @end example You now have the full ``report'' in @file{report.pdf}. Try adding some extra text on top of the figure, or in the caption and re-running the last four commands. Also try changing the 20kpc scale line length to 50kpc, or try changing the redshift, to see how the length and text of the thick scale-line will automatically change. But the good news is that you also have the raw PDF of the figure that you can use in other places. You can see that file in @file{report-figure0.pdf}. In a larger paper, you can add multiple such figures (with different @file{.tex} files that are placed in different @code{figure} environments with different captions). Each figure will get a number in the build directory. TiKZ also allows setting a file name for each ``external'' figure (to avoid such numbers that can be annoying if the image orders are changed). PGFPlots is also highly customizable, you can make a lot of changes and customizations. Both TiKZ@footnote{@url{http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf}} and PGFPLots@footnote{@url{http://mirrors.ctan.org/graphics/pgf/contrib/pgfplots/doc/pgfplots.pdf}} have wonderful manuals, so have a look trough them. @menu * Full script of annotations on figure:: All the steps in one script @end menu @node Full script of annotations on figure, , Annotations for figure in paper, Annotations for figure in paper @subsubsection Full script of annotations on figure In @ref{Annotations for figure in paper}, we each one of the steps to add annotations over an image were described in detail. So if you have understood the steps, but need to add annotations over an image, repeating those steps individually will be annoying. Therefore in this section, we will summarize all the steps in a single script that you can simply copy-paste into a text editor, configure, and run. @cartouche @noindent @strong{Necessary files:} To run this script, you will need an image to crop your object from (here assuming it is called @file{ah_f160w.fits} with a certain zero point) and two @file{my-figure.tex} and @file{report.tex} files that were fully included in @ref{Annotations for figure in paper}. Also, we have brought the redshift as a parameter here. But if the center of your image always points to your main object, you can also include the Query command to automatically find the object's redshift from NED. Alternatively, your image may already be cropped, in this case, you can remove the cropping step and @end cartouche @verbatim # Parameters. sblow=22 # Minimum surface brightness. sbhigh=30 # Maximum surface brightness. bdir=build # Build directory location on filesystem. numticks=7 # Number of major ticks in each axis. redshift=0.619 # Redshift of object of interest. zeropoint=25.94 # Zero point of input image. scalelineinkpc=20 # Length of scale-line (in kilo parsecs). input=ah_f160w.fits # Name of input (to crop). # Stop the script in case of a crash. set -e # Build directory if ! [ -d $bdir ]; then mkdir $bdir; fi # Crop out the desired region. crop=$bdir/crop.fits astcrop $input --center=53.1616278,-27.7802446 --mode=wcs \ --width=20/3600 --output=$crop # Warp the image to larger pixels to show surface brightness better. scaled=$bdir/scaled.fits astwarp $crop --centeroncorner --scale=1/3 --output=$scaled # Calculate the pixel area and convert image to Surface brightness. sb=$bdir/sb.fits pixarea=$(astfits $scaled --pixelareaarcsec2) astarithmetic $scaled $zeropoint $pixarea counts-to-sb \ --output=$sb # Convert the surface brightness image into PDF. sbpdf=$bdir/sb.pdf astconvertt $sb --colormap=gray --borderwidth=0 \ --fluxhigh=$sbhigh --fluxlow=$sblow --output=$sbpdf # Specify the coordinates of the scale line (specifying a certain # width in kpc). We will put it on the top-right side of the image (5% # of the full width of the image away from the edge). coverage=$(astfits $sb --skycoverage --quiet | awk 'NR==2') scalelinedec=$(echo $coverage | awk '{print $4-($4-$3)*0.05}') scalelinerastart=$(echo $coverage | awk '{print $1+($2-$1)*0.05}') scalelineraend=$(astcosmiccal --redshift=$redshift --arcsectandist \ | awk '{start='$scalelinerastart'; \ width='$scalelineinkpc'/$1/3600; \ print start+width}') # Write the LaTeX macros to use in plot. Start with the thick line # showing tangential distance. macros=$bdir/macros.tex printf '\\newcommand{\\maScaleDec}'"{$scalelinedec}\n" > $macros printf '\\newcommand{\\maScaleRAa}'"{$scalelinerastart}\n" >> $macros printf '\\newcommand{\\maScaleRAb}'"{$scalelineraend}\n" >> $macros printf '\\newcommand{\\maScaleKpc}'"{$scalelineinkpc}\n" >> $macros printf '\\newcommand{\\maCenterZ}'"{$redshift}\n" >> $macros # Add image extrema for the coordinates. v=$(echo $coverage | awk '{print $1}') printf '\\newcommand{\maCropRAMin}'"{$v}\n" >> $macros v=$(echo $coverage | awk '{print $2}') printf '\\newcommand{\maCropRAMax}'"{$v}\n" >> $macros v=$(echo $coverage | awk '{print $3}') printf '\\newcommand{\maCropDecMin}'"{$v}\n" >> $macros v=$(echo $coverage | awk '{print $4}') printf '\\newcommand{\maCropDecMax}'"{$v}\n" >> $macros # Distance between each tick value. v=$(echo $coverage | awk '{print ($2-$1)/'$numticks'}') printf '\\newcommand{\maTickDist}'"{$v}\n" >> $macros printf '\\newcommand{\maSBlow}'"{$sblow}\n" >> $macros printf '\\newcommand{\maSBhigh}'"{$sbhigh}\n" >> $macros # Copy the LaTeX source into the build directory and go there to run # it and have all the temporary LaTeX files there. cp report.tex my-figure.tex $bdir cd $bdir rm -f *-figure0* pdflatex -shell-escape -halt-on-error report.tex @end verbatim @node Invoking astconvertt, , Annotations for figure in paper, ConvertType @subsection Invoking ConvertType ConvertType will convert any recognized input file type to any specified output type. The executable name is @file{astconvertt} with the following general template @example $ astconvertt [OPTION...] InputFile [InputFile2] ... [InputFile4] @end example @noindent One line examples: @example ## Convert an image in FITS to PDF: $ astconvertt image.fits --output=pdf ## Similar to before, but use the Viridis color map: $ astconvertt image.fits --colormap=viridis --output=pdf ## Add markers to to highlight parts of the image ## ('marks.fits' is a table containing coordinates) $ astconvertt image.fits --marks=marks.fits --output=pdf ## Convert an image in JPEG to FITS (with multiple extensions ## if it has color): $ astconvertt image.jpg -oimage.fits ## Use three 2D arrays to create an RGB JPEG output (two are ## plain-text, the third is FITS, but all have the same size). $ astconvertt f1.txt f2.txt f3.fits -o.jpg ## Use two images and one blank for an RGB EPS output: $ astconvertt M31_r.fits M31_g.fits blank -oeps ## Directly pass input from output of another program through Standard ## input (not a file). $ cat 2darray.txt | astconvertt -oimg.fits @end example In the sub-sections below various options that are specific to ConvertType are grouped in different categories. Please see those sections for a detailed discussion on each group and its options. Besides those, ConvertType also shares the @ref{Common options} with other Gnuastro programs. The common options are not repeated here. @menu * ConvertType input and output:: Input/output file names and formats. * Pixel visualization:: Visualizing the pixels in the output. * Drawing with vector graphics:: Adding marks in many shapes and colors over the pixels. @end menu @node ConvertType input and output, Pixel visualization, Invoking astconvertt, Invoking astconvertt @subsubsection ConvertType input and output @cindex Standard input At most four input files (one for each color channel for formats that allow it) are allowed in ConvertType. The first input dataset can either be a file, or come from Standard input (see @ref{Standard input} and @ref{Recognized file formats}). The order of multiple input files is important. After reading the input file(s) the number of color channels in all the inputs will be used to define which color space to use for the outputs and how each color channel is interpreted: 1 (for grayscale), 3 (for RGB) and 4 (for CMYK) input channels. For more on pixel color channels, see @ref{Pixel colors}. Depending on the format of the input(s), the number of input files can differ. For example, if you plan to build an RGB PDF and your three channels are in the first HDU of @file{r.fits}, @file{g.fits} and @file{b.fits}, then you can simply call MakeProfiles like this: @example $ astconvertt r.fits g.fits b.fits -g1 --output=rgb.pdf @end example @noindent However, if the three color channels are in three extensions (assuming the HDUs are respectively named @code{R}, @code{G} and @code{B}) of a single file (assuming @file{channels.fits}), you should run it like this: @example $ astconvertt channels.fits -hR -hG -hB --output=rgb.pdf @end example @noindent On the other hand, if the channels are already in a multi-channel format (like JPEG), you can simply provide that file: @example $ astconvertt image.jpg --output=rgb.pdf @end example @noindent If multiple channels are given as input, and the output format does not support multiple color channels (for example, FITS), ConvertType will put the channels in different HDUs, like the example below. After running the @command{astfits} command, if your JPEG file was not grayscale (single channel), you will see multiple HDUs in @file{channels.fits}. @example $ astconvertt image.jpg --output=channels.fits $ astfits channels.fits @end example As shown above, the output's file format will be interpreted from the name given to the @option{--output} option (as a common option to all Gnuastro programs, for the description of @option{--output}, see @ref{Input output options}). It can either be given on the command-line or in any of the configuration files (see @ref{Configuration files}). When the output suffix is not recognized, it will default to plain text format, see @ref{Recognized file formats}. If there is one input dataset (color channel) the output will be gray-scale. When three input datasets (color channels) are given, they are respectively considered to be the red, green and blue color channels. Finally, if there are four color channels they will be cyan, magenta, yellow and black (CMYK colors). The value to @option{--output} (or @option{-o}) can be either a full file name or just the suffix of the desired output format. In the former case (full name), it will be directly used for the output's file name. In the latter case, the name of the output file will be set based on the automatic output guidelines, see @ref{Automatic output}. Note that the suffix name can optionally start with a @file{.} (dot), so for example, @option{--output=.jpg} and @option{--output=jpg} are equivalent. See @ref{Recognized file formats}. The relevant options for input/output formats are described below: @table @option @item -h STR/INT @itemx --hdu=STR/INT Input HDU name or counter (counting from 0) for each input FITS file. If the same HDU should be used from all the FITS files, you can use the @option{--globalhdu} option described below. In ConvertType, it is possible to call the HDU option multiple times for the different input FITS or TIFF files in the same order that they are called on the command-line. Note that in the TIFF standard, one `directory' (similar to a FITS HDU) may contain multiple color channels (for example, when the image is in RGB). Except for the fact that multiple calls are possible, this option is identical to the common @option{--hdu} in @ref{Input output options}. The number of calls to this option cannot be less than the number of input FITS or TIFF files, but if there are more, the extra HDUs will be ignored, note that they will be read in the order described in @ref{Configuration file precedence}. Unlike CFITSIO, libtiff (which is used to read TIFF files) only recognizes numbers (counting from zero, similar to CFITSIO) for `directory' identification. Hence the concept of names is not defined for the directories and the values to this option for TIFF files must be numbers. @item -g STR/INT @itemx --globalhdu=STR/INT Use the value given to this option (a HDU name or a counter, starting from 0) for the HDU identifier of all the input FITS files. This is useful when all the inputs are distributed in different files, but have the same HDU in those files. @item -w FLT @itemx --widthincm=FLT The width of the output in centimeters. This is only relevant for those formats that accept such a width as metadata (not FITS or plain-text for example), see @ref{Recognized file formats}. For most digital purposes, the number of pixels is far more important than the value to this parameter because you can adjust the absolute width (in inches or centimeters) in your document preparation program. @item -x @itemx --hex @cindex ASCII85 encoding @cindex Hexadecimal encoding Use Hexadecimal encoding in creating EPS output. By default the ASCII85 encoding is used which provides a much better compression ratio. When converted to PDF (or included in @TeX{} or @LaTeX{} which is finally saved as a PDF file), an efficient binary encoding is used which is far more efficient than both of them. The choice of EPS encoding will thus have no effect on the final PDF. So if you want to transfer your EPS files (for example, if you want to submit your paper to arXiv or journals in PostScript), their storage might become important if you have large images or lots of small ones. By default ASCII85 encoding is used which offers a much better compression ratio (nearly 40 percent) compared to Hexadecimal encoding. @item -u INT @itemx --quality=INT @cindex JPEG compression quality @cindex Compression quality in JPEG @cindex Quality of compression in JPEG The quality (compression) of the output JPEG file with values from 0 to 100 (inclusive). For other formats the value to this option is ignored. Note that only in gray-scale (when one input color channel is given) will this actually be the exact quality (each pixel will correspond to one input value). If it is in color mode, some degradation will occur. While the JPEG standard does support loss-less graphics, it is not commonly supported. @end table @node Pixel visualization, Drawing with vector graphics, ConvertType input and output, Invoking astconvertt @subsubsection Pixel visualization The main goal of ConvertType is to visualize pixels to/from print or web friendly formats. Astronomical data usually have a very large dynamic range (difference between maximum and minimum value) and different subjects might be better demonstrated with a limited flux range. @table @option @item --colormap=STR[,FLT,...] The color map to visualize a single channel. The first value given to this option is the name of the color map, which is shown below. Some color maps can be configured. In this case, the configuration parameters are optionally given as numbers following the name of the color map for example, see @option{hsv}. The table below contains the usable names of the color maps that are currently supported: @table @option @item gray @itemx grey @cindex Colorspace, gray-scale Grayscale color map. This color map does not have any parameters. The full dataset range will be scaled to 0 and @mymath{2^8-1=255} to be stored in the requested format. @item hsv @cindex Colorspace, HSV @cindex Hue, saturation, value @cindex HSV: Hue Saturation Value Hue, Saturation, Value@footnote{@url{https://en.wikipedia.org/wiki/HSL_and_HSV}} color map. If no values are given after the name (@option{--colormap=hsv}), the dataset will be scaled to 0 and 360 for hue covering the full spectrum of colors. However, you can limit the range of hue (to show only a special color range) by explicitly requesting them after the name (for example, @option{--colormap=hsv,20,240}). The mapping of a single-channel dataset to HSV is done through the Hue and Value elements: Lower dataset elements have lower ``value'' @emph{and} lower ``hue''. This creates darker colors for fainter parts, while also respecting the range of colors. @item viridis @cindex matplotlib @cindex Colormap: Viridis @cindex Viridis: Colormap Viridis is the default colormap of the popular Matplotlib module of Python and available in many other visualization tools like PGFPlots. @item sls @cindex DS9 @cindex SAO DS9 @cindex SLS Color @cindex Colormap: SLS The SLS color range, taken from the commonly used @url{http://ds9.si.edu,SAO DS9}. The advantage of this color range is that it starts with black, going into dark blue and finishes with the brighter colors of red and white. So unlike the HSV color range, it includes black and white and brighter colors (like yellow, red) show the larger values. @item sls-inverse @cindex Colormap: SLS-inverse The inverse of the SLS color map (see above), where the lowest value corresponds to white and the highest value is black. While SLS is good for visualizing on the monitor, SLS-inverse is good for printing. @end table @item --rgbtohsv When there are three input channels and the output is in the FITS format, interpret the three input channels as red, green and blue channels (RGB) and convert them to the hue, saturation, value (HSV) color space. The currently supported output formats of ConvertType do not have native support for HSV. Therefore this option is only supported when the output is in FITS format and each of the hue, saturation and value arrays can be saved as one FITS extension in the output for further analysis (for example, to select a certain color). @item -c STR @itemx --change=STR @cindex Change converted pixel values (@option{=STR}) Change pixel values with the following format @option{"from1:to1, from2:to2,..."}. This option is very useful in displaying labeled pixels (not actual data images which have noise) like segmentation maps. In labeled images, usually a group of pixels have a fixed integer value. With this option, you can manipulate the labels before the image is displayed to get a better output for print or to emphasize on a particular set of labels and ignore the rest. The labels in the images will be changed in the same order given. By default first the pixel values will be converted then the pixel values will be truncated (see @option{--fluxlow} and @option{--fluxhigh}). You can use any number for the values irrespective of your final output, your given values are stored and used in the double precision floating point format. So for example, if your input image has labels from 1 to 20000 and you only want to display those with labels 957 and 11342 then you can run ConvertType with these options: @example $ astconvertt --change=957:50000,11342:50001 --fluxlow=5e4 \ --fluxhigh=1e5 segmentationmap.fits --output=jpg @end example @noindent While the output JPEG format is only 8 bit, this operation is done in an intermediate step which is stored in double precision floating point. The pixel values are converted to 8-bit after all operations on the input fluxes have been complete. By placing the value in double quotes you can use as many spaces as you like for better readability. @item -C @itemx --changeaftertrunc Change pixel values (with @option{--change}) after truncation of the flux values, by default it is the opposite. @item -L FLT @itemx --fluxlow=FLT The minimum flux (pixel value) to display in the output image, any pixel value below this value will be set to this value in the output. If the value to this option is the same as @option{--fluxhigh}, then no flux truncation will be applied. Note that when multiple channels are given, this value is used for all the color channels. @item -H FLT @itemx --fluxhigh=FLT The maximum flux (pixel value) to display in the output image, see @option{--fluxlow}. @item -m INT @itemx --maxbyte=INT This is only used for the JPEG and EPS output formats which have an 8-bit space for each channel of each pixel. The maximum value in each pixel can therefore be @mymath{2^8-1=255}. With this option you can change (decrease) the maximum value. By doing so you will decrease the dynamic range. It can be useful if you plan to use those values for other purposes. @item -A @itemx --forcemin Enforce the value of @option{--fluxlow} (when it is given), even if it is smaller than the minimum of the dataset and the output is format supporting color. This is particularly useful when you are converting a number of images to a common image format like JPEG or PDF with a single command and want them all to have the same range of colors, independent of the contents of the dataset. Note that if the minimum value is smaller than @option{--fluxlow}, then this option is redundant. @cindex PDF @cindex EPS @cindex PostScript By default, when the dataset only has two values, @emph{and} the output format is PDF or EPS, ConvertType will use the PostScript optimization that allows setting the pixel values per bit, not byte (@ref{Recognized file formats}). This can greatly help reduce the file size. However, when @option{--fluxlow} or @option{--fluxhigh} are called, this optimization is disabled: even though there are only two values (is binary), the difference between them does not correspond to the full contrast of black and white. @item -B @itemx --forcemax Similar to @option{--forcemin}, but for the maximum. @item -i @itemx --invert For 8-bit output types (JPEG, EPS, and PDF for example) the final value that is stored is inverted so white becomes black and vice versa. The reason for this is that astronomical images usually have a very large area of blank sky in them. The result will be that a large are of the image will be black. Note that this behavior is ideal for gray-scale images, if you want a color image, the colors are going to be mixed up. @end table @node Drawing with vector graphics, , Pixel visualization, Invoking astconvertt @subsubsection Drawing with vector graphics With the options described in this section, you can draw marks over your to-be-published images (for example, in PDF). Each mark can be highly customized so they can have different shapes, colors, line widths, text, text size, etc. The properties of the marks should be stored in a table that is given to the @option{--marks} option described below. A fully working demo on adding marks is provided in @ref{Marking objects for publication}. @cindex PostScript point @cindex Vector graphics point @cindex Point (Vector graphics; PostScript) An important factor to consider when drawing vector graphics is that vector graphics standards (the PostScript standard in this case) use a ``point'' as the primary unit of line thickness or font size. Such that 72 points correspond to 1 inch (or 2.54 centimeters). In other words, there are roughly 3 PostScript points in every millimeter. On the other hand, the pixels of the images you plan to show as the background do not have any real size! Pixels are abstract and can be associated with any print-size. In ConvertType, the print-size of your final image is set with the @option{--widthincm} option (see @ref{ConvertType input and output}). The value to @option{--widthincm} is the to-be width of the image in centimeters. It therefore defines the thickness of lines or font sizes for your vector graphics features (like the image border or marks). Just recall that we are not talking about resolution! Vector graphics have infinite resolution! We are talking about the relative thickness of the lines (or font sizes) in relation to the pixels in your background image. @table @option @item -b INT @itemx --borderwidth=INT @cindex Border on an image The width of the border to be put around the EPS and PDF outputs in units of PostScript points. If you are planning on adding a border, its thickness in relation to your image pixel sizes is highly correlated with the value you give to the @option{--widthincm} parameter. See the description at the start of this section for more. Unfortunately in the document structuring convention of the PostScript language, the ``bounding box'' has to be in units of PostScript points with no fractions allowed. So the border values only have to be specified in integers. To have a final border that is thinner than one PostScript point in your document, you can ask for a larger width in ConvertType and then scale down the output EPS or PDF file in your document preparation program. For example, by setting @command{width} in your @command{includegraphics} command in @TeX{} or @LaTeX{} to be larger than the value to @option{--widthincm}. Since it is vector graphics, the changes of size have no effect on the quality of your output (pixels do not get different values). @item --bordercolor=STR The name of the color to use for border that will be put around the EPS and PDF outputs. The list of available colors, along with their name and an example can be seen with the following command (also see @ref{Vector graphics colors}): @example $ astconvertt --listcolors @end example This option only accepts the name of the color, not the numeric identifier. @item --marks=STR Draw vector graphics (infinite resolution) marks over the image. The value to this option should be the file name of a table containing the mark information. The table given to this option can have various properties for each mark in each column. You can specify which column contains which property of the marks using the options below that start with @option{--mark}. Only two property columns are mandatory (@option{--markcoords}), the rest are optional. The table can be in any of the Gnuastro's @ref{Recognized table formats}. For more on the difference between vector and raster graphics, see @ref{Raster and Vector graphics}. For example, if your table with mark information is called @file{my-marks.fits}, you can use the command below to draw red circles of radius 5 pixels over the coordinates. @example $ astconvertt image.fits --output=image.pdf \ --marks=marks.fits --mode=wcs \ --markcoords=RA,DEC @end example You can highly customize each mark with different columns in @file{marks.fits} using the @option{--mark*} options below (for example, using different colors, different shapes, different sizes, text, and the rest on each mark). @item --markshdu=STR/INT The HDU (or extension) name or number of the table containing mark properties (file given to @option{--marks}). This is only relevant if the table is in the FITS format and there is more than one HDU in the FITS file. @item -r STR,STR @itemx --markcoords=STR,STR The column names (or numbers) containing the coordinates of each mark (in table given to @option{--marks}). Only two values should be given to this option (one for each coordinate). They can either be given to one call (@option{--markcoords=RA,DEC}) or in separate calls (@option{--markcoords=RA --markcoords=DEC}). When @option{--mode=image} the columns will be associated to the horizontal/vertical coordinates of the image, and interpreted in units of pixels. In @option{--mode=wcs}, the columns will be associated to the WCS coordinates (typically Right Ascension and Declination, in units of degrees). @item -O STR @itemx --mode=STR The coordinate mode for interpreting the values in the columns given to the @option{--markcoord1} and @option{--markcoord2} options. The acceptable values are either @code{img} (for image or pixel coordinates), and @code{wcs} for World Coordinate System (typically RA and Dec). For the WCS-mode, the input image should have the necessary WCS keywords, otherwise ConvertType will crash. @item --markshape=STR/INT @cindex Shapes for marks (vector graphics) The column name(s), or number(s), containing the shapes of each mark (in table given to @option{--marks}). The shapes can either be identified by their name, or their numerical identifier. If identifying them by name in a plain-text table, you need to define a string column (see @ref{Gnuastro text table format}). The full list of names is shown below, with their numerical identifier in parenthesis afterwards. For each shape, you can also specify properties such as the size, line width, rotation, and color. See the description of the relevant @option{--mark*} option below. @table @code @item circle (1) A circular circumference. It's @emph{radius} is defined by a single size element (the first column given to @option{--marksize}). Any value in the second size column (if given for other shapes in the same call) are ignored by this shape. @item plus (2) The plus sign (@mymath{+}). The @emph{length of its lines} is defined by a single size element (the first column given to @option{--marksize}). Such that the intersection of its lines is on the central coordinate of the mark. Any value in the second size column (if given for other shapes in the same call) are ignored by this shape. @item cross (3) A multiplication sign (@mymath{\times}). The @emph{length of its lines} is defined by a single size element (the first column given to @option{--marksize}). Such that the intersection of its lines is on the central coordinate of the mark. Any value in the second size column (if given for other shapes in the same call) are ignored by this shape. @item ellipse (4) An elliptical circumference. Its major axis radius is defined by the first size element (first column given to @option{--marksize}), and its axis ratio is defined through the second size element (second column given to @option{--marksize}). @item point (5) A point (or a filled circle). Its @emph{radius} is defined by a single size element (the first column given to @option{--marksize}). Any value in the second size column (if given for other shapes in the same call) are ignored by this shape. This filled circle mark is defined as a ``point'' because it is usually relevant as a small size (or point in the whole image). But there is no limit on its size, so it can be arbitrarily large. @item square (6) A square circumference. Its @emph{edge length} is defined by a single size element (the first column given to @option{--marksize}). Any value in the second size column (if given for other shapes in the same call) are ignored by this shape. @item rectangle (7) A rectangular circumference. Its length along the horizontal image axis is defined by first size element (first column given to @option{--marksize}), and its length along the vertical image axis is defined through the second size element (second column given to @option{--marksize}). @item line (8) A line. The line's @emph{length} is defined by a single size element (the first column given to @option{--marksize}. The line will be centered on the given coordinate. Like all shapes, you can rotate the line about its center using the @option{--markrotate} column. Any value in the second size column (if given for other shapes in the same call) are ignored by this shape. @end table @item --markrotate=STR/INT Column name or number that contains the mark's rotation angle. The rotation angle should be in degrees and be relative to the horizontal axis of the image. @item --marksize=STR[,STR] The column name(s), or number(s), containing the size(s) of each mark (in table given to @option{--marks}). All shapes need at least one ``size'' parameter and some need two. For the interpretation of the size column(s) for each shape, see the @option{--markshape} option's description. Since the size column(s) is (are) optional, when not specified, default values will be used (which may be too small in larger images, so you need to change them). By default, the values in the size column are assumed to be in the same units as the coordinates (defined by the @option{--mode} option, described above). However, when the coordinates are in WCS-mode, some special cases may occur for the size. @itemize @item The native WCS units (usually degrees) can be too large, and it may be more convenient for the values in the size column(s) to be in arc-seconds. In this case, you can use the @option{--sizeinarcsec} option. @item Similar to above, but in units of arc-minutes. In this case, you can use the @option{--sizeinarcmin} option. @item Your sizes may be in units of pixels, not the WCS units. In this case, you can use the @option{--sizeinpix} option. @end itemize @item --sizeinpix In WCS-mode, assume that the sizes are in units of pixels. By default, when in WCS-mode, the sizes are assumed to be in the units of the WCS coordinates (usually degrees). @item --sizeinarcsec In WCS-mode, assume that the sizes are in units of arc-seconds. By default, when in WCS-mode, the sizes are assumed to be in the units of the WCS coordinates (usually degrees). @item --sizeinarcmin In WCS-mode, assume that the sizes are in units of arc-seconds. By default, when in WCS-mode, the sizes are assumed to be in the units of the WCS coordinates (usually degrees). @item --marklinewidth=STR/INT Column containing the width (thickness) of the line to draw each mark. The line width is measured in units of ``points'' (where 72 points is one inch), and it can be any positive floating point number. Therefore, the thickness (in relation to the pixels of your image) depends on @option{--widthincm} option. For more, see the description at the start of this section. @item --markcolor=STR/INT Column containing the color of the mark. This column can be either a string or an integer. As a string, the color name can be written directly in your table (this greatly helps in human readability). For more on string columns see @ref{Gnuastro text table format}. As an integer, you can simply use the numerical identifier of the column. You can see the list of colors with their names and numerical identifiers in Gnuastro by running ConvertType with @option{--listcolors}, or see @ref{Vector graphics colors}. @item --listcolors The list of acceptable color names, their codes and their representation can be seen with the @option{--listcolors} option. By ``representation'' we mean that the color will be shown on the terminal as the background in that column. But this will only be properly visible with ``true color'' or 24-bit terminals, see @url{https://en.wikipedia.org/wiki/ANSI_escape_code,ANSI escape sequence standard}. Most modern GNU/Linux terminals support 24-bit colors natively, and no modification is necessary. For macOS, see the box below. The printed text in standard output is in the @ref{Gnuastro text table format}, so if you want to store this table, you can simply pipe the output to Gnuastro's Table program and store it as a FITS table: @example $ astconvertt --listcolors | astttable -ocolors.fits @end example @cindex iTerm @cindex macOS terminal 24-bit color @cindex Color in macOS terminals @cartouche @noindent @strong{macOS terminal colors}: as of August 2022, the default macOS terminal (iTerm) does not support 24-bit colors! The output of @option{--listlines} therefore does not display the actual colors (you can only use the color names). One tested solution is to install and use @url{https://iterm2.com, iTerm2}, which is free software and available in @url{https://formulae.brew.sh/cask/iterm2, Homebrew}. iTerm2 is described as a successor for iTerm and works on macOS 10.14 (released in September 2018) or newer. @end cartouche @item --marktext=STR/INT Column name or number that contains the text that should be printed under the mark. If the column is numeric, the number will be printed under the mark (for example, if you want to write the magnitude or redshift of the object under the mark showing it). For the precision of writing floating point columns, see @option{--marktextprecision}. But if the column has a string format (for example, the name of the object like an NGC1234), you need to define the column as a string column (see @ref{Gnuastro text table format}). For text with different lengths, set the length in the definition of the column to the maximum length of the strings to be printed. If there are some rows or marks that don't require text, set the string in this column to @option{n/a} (not applicable; the blank value for strings in Gnuastro). When having strings with different lengths, make sure to have enough white spaces (for the shorter strings) so the adjacent columns are not taken as part of the string (see @ref{Gnuastro text table format}). @item --marktextprecision=INT The number of decimal digits to print after the floating point. This is only relevant when @option{--marktext} is given, and the selected column has a floating point format. @item --markfont=STR/INT @cindex Fonts @cindex Ghostscript fonts Column name or number that contains the font for the displayed text under the mark. This is only relevant if @option{--marktext} is called. The font should be accessible by Ghostscript. If you are not familiar with the available fonts on your system's Ghostscript, you can use the @option{--showfonts} option to see all the fonts in a custom PDF file (one page per font). If you are already familiar with the font you want, but just want to make sure about its presence (or spelling!), you can get a list (on standard output) of all the available fonts with the @option{--listfonts} option. Both are described below. @cindex Adding Ghostscript fonts It is possible to add custom fonts to Ghostscript as described in the @url{https://ghostscript.com/doc/current/Fonts.htm, Fonts section} of the Ghostscript manual. @item --markfontsize=STR/INT Column name or number that contains the font size to use. This is only relevant if a text column has been defined (with @option{--marktext}, described above). The font size is in units of ``point''s, see description at the start of this section for more. @item --showfonts Create a special PDF file that shows the name and shape of all available fonts in your system's Ghostscript. You can use this for selecting the best font to put in the @option{--markfonts} column. The available fonts can differ from one system to another (depending on how Ghostscript was configured in that system). The PDF file's name is constructed by appending a @file{-fonts.pdf} to the file name given to the @option{--output} option. The PDF file will have one page for each font, and the sizes of the pages are customized for showing the fonts (each page is horizontally elongated). This helps to better check the files by disable ``continuous'' mode in your PDF viewer, and setting the zoom such that the width of the page corresponds to the width of your PDF viewer. Simply pressing the left/right keys will then nicely show each fonts separately. @item --listfonts Print (to standard output) the names of all available fonts in Ghostscript that you can use for the @option{--markfonts} column. The available fonts can differ from one system to another (depending on how Ghostscript was configured in that system). If you are not already familiar with the shape of each font, please use @option{--showfonts} (described above). @end table @node Table, Query, ConvertType, Data containers @section Table Tables are the high-level products of processing on low-leveler data like images or spectra. For example, in Gnuastro, MakeCatalog will process the pixels over an object and produce a catalog (or table) with the properties of each object such as magnitudes and positions (see @ref{MakeCatalog}). Each one of these properties is a column in its output catalog (or table) and for each input object, we have a row. When there are only a small number of objects (rows) and not too many properties (columns), then a simple plain text file is mainly enough to store, transfer, or even use the produced data. However, to be more efficient, astronomers have defined the FITS binary table standard to store data in a binary format (which cannot be seen in a text editor text). This can offer major advantages: the file size will be greatly reduced and the reading and writing will also be faster (because the RAM and CPU also work in binary). The acceptable table formats are fully described in @ref{Tables}. @cindex AWK @cindex GNU AWK Binary tables are not easily readable with basic plain-text editors. There is no fixed/unified standard on how the zero and ones should be interpreted. Unix-like operating systems have flourished because of a simple fact: communication between the various tools is based on human readable characters@footnote{In ``The art of Unix programming'', Eric Raymond makes this suggestion to programmers: ``When you feel the urge to design a complex binary file format, or a complex binary application protocol, it is generally wise to lie down until the feeling passes.''. This is a great book and strongly recommended, give it a look if you want to truly enjoy your work/life in this environment.}. So while the FITS table standards are very beneficial for the tools that recognize them, they are hard to use in the vast majority of available software. This creates limitations for their generic use. Table is Gnuastro's solution to this problem. Table has a large set of operations that you can directly do on any recognized table (such as selecting certain rows and doing arithmetic on the columns). For operations that Table does not do internally, FITS tables (ASCII or binary) are directly accessible to the users of Unix-like operating systems (in particular those working the command-line or shell, see @ref{Command-line interface}). With Table, a FITS table (in binary or ASCII formats) is only one command away from AWK (or any other tool you want to use). Just like a plain text file that you read with the @command{cat} command. You can pipe the output of Table into any other tool for higher-level processing, see the examples in @ref{Invoking asttable} for some simple examples. In the sections below we describe how to effectively use the Table program. We start with @ref{Column arithmetic}, where the basic concept and methods of applying arithmetic operations on one or more columns are discussed. Afterwards, in @ref{Operation precedence in Table}, we review the various types of operations available and their precedence in an instance of calling Table. This is a good place to get a general feeling of all the things you can do with Table. Finally, in @ref{Invoking asttable}, we give some examples and describe each option in Table. @menu * Printing floating point numbers:: Optimal storage of floating point types. * Vector columns:: How to keep more than one value in each column. * Column arithmetic:: How to do operations on table columns. * Operation precedence in Table:: Order of running options in Table. * Invoking asttable:: Options and arguments to Table. @end menu @node Printing floating point numbers, Vector columns, Table, Table @subsection Printing floating point numbers @cindex Floating point numbers @cindex Printing floating point numbers Many of the columns containing astronomical data will contain floating point numbers (those that aren't an integer, like @mymath{1.23} or @mymath{4.56\times10^{-7}}). However, printing (for human readability) of floating point numbers has some intricacies that we will explain in this section. For a basic introduction to different types of integers or floating points, see @ref{Numeric data types}. It may be tempting to simply use 64-bit floating points all the time and avoid this section over all. But have in mind that compared to 32-bit floating point type, a 64-bit floating point type will consume double the storage, double the RAM and will take almost double the time for processing. So when the statistical precision of your numbers is less than that offered by 32-bit floating point precision, it is much better to store them in this format. Within almost all commonly used CPUs of today, numbers (including integers or floating points) are stored in binary base-2 format (where the only digits that can be used to represent the number are 0 and 1). However, we (humans) are use to numbers in base-10 (where we have 10 digits: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9). For integers, there is a one-to-one correspondence between a base-2 and base-10 representation. Therefore, converting a base-10 integer (that you will be giving as an option value when running a Gnuastro program, for example) to base-2 (that the computer will store in memory), or vice-versa, will not cause any loss of information for integers. The problem is that floating point numbers don't have such a one-to-one correspondence between the two notations. The full discussion on how floating point numbers are stored in binary format is beyond the scope of this book. But please have a look at the corresponding @url{https://en.wikipedia.org/wiki/Floating-point_arithmetic, Wikipedia article} to get a rough feeling about the complexity. Of course, if you are interested in the details, that Wikipedia article should be a good starting point for further reading. @cindex IEEE 754 (floating point) The most common convention for storing floating point numbers in digital storage is IEEE Standard for Floating-Point Arithmetic; @url{https://en.wikipedia.org/wiki/IEEE_754, IEEE 754}. In short, the full width (in bits) assigned to that type (for example the 32 bits allocated for 32-bit floating point types) is divided into separate components: The first bit is the ``sign'' (specifying if the number is negative or positive). In 32-bit floats, the next 8 bits are the ``exponent'' and finally (again, in 32-bit floats), the ``fraction'' is stored in the next 23 bits. For example see @url{https://commons.wikimedia.org/wiki/File:Float_example.svg, this image on Wikipedia}. @cindex Decimal digits @cindex Precision of floats In IEEE 754, around zero, the base-2 and base-10 representations approximately match. However, as we go away from 0, you will loose precision. The important concept in understanding the precision of floating point numbers is ``decimal digits'', or the number of digits in the number, independent of where the decimal point is. For example @mymath{1.23} has three decimal digits and @mymath{4.5678\times10^9} has 5 decimal digits. According to IEEE 754@footnote{@url{https://en.wikipedia.org/wiki/IEEE_754#Basic_and_interchange_formats}}, 32-bit and 64-bit floating point numbers can accurately (statistically) represent a floating point with 7.22 and 15.95 decimal digits respectively. @cartouche @noindent @strong{Should I store my columns as 32-bit or 64-bit floating point type?} If your floating point numbers have 7 decimal digits or less (for example noisy image pixel values, measured star or galaxy magnitudes, and anything that is derived from them like galaxy mass and etc), you can safely use 32-bit precision (the statistical error on the measurements is usually significantly larger than 7 digits!). However, some columns require more digits; thus 64-bit precision. For example, RA or Dec with more than one arcsecond accuracy: the degrees can have 3 digits, and 1 arcsecond is @mymath{1/3600\sim0.0003} of a degree, requiring 4 more digits). You can use the @ref{Numerical type conversion operators} of @ref{Column arithmetic} to convert your columns to a certain type for storage. @end cartouche The discussion above was for the storage of floating point numbers. When printing floating point numbers in a human-friendly format (for example, in a plain-text file or on standard output in the command-line), the computer has to convert its internal base-2 representation to a base-10 representation. This second conversion may cause a small discrepancy between the stored and printed values. @cartouche @noindent @strong{Use FITS tables as output of measurement programs:} When you are doing a measurement to produce a catalog (for example with @ref{MakeCatalog}) set the output to be a FITS table (for example @option{--output=mycatalog.fits}). A FITS binary table will store the same the base-2 number that was measured by the CPU. However, if you choose to store the output table as a plain-text table, you risk loosing information due to the human friendly base-10 floating point conversion (which is necessary in a plain-text output). @end cartouche To customize how columns containing floating point values are printed (in a plain-text output file, or in the standard output in your terminal), Table has four options for the two different types: @option{--txtf32format}, @option{--txtf32precision}, @option{--txtf64format} and @option{--txtf64precision}. They are fully described in @ref{Invoking asttable}. @cartouche @noindent @strong{Summary:} it is therefore recommended to always store your tables as FITS (binary) tables. To view the contents of the table on the command-line or to feed it to a program that doesn't recognize FITS tables, you can use the four options above for a custom base-10 conversion that will not cause any loss of data. @end cartouche @node Vector columns, Column arithmetic, Printing floating point numbers, Table @subsection Vector columns @cindex Vector columns @cindex Columns (Vector) @cindex Multi-value columns (vector) In its most common format, each column of a table only has a single value in each row. For example, we usually have one column for the magnitude, another column for the RA (Right Ascension) and yet another column for the DEC (Declination) of a set of galaxies/stars (where each galaxy is represented by one row in the table). This common single-valued column format is sufficient in many scenarios. However, in some situations (like those below) it would help to have multiple values for each row in each column, not just one. @itemize @item @cindex MUSE @cindex Spectrum @cindex Radial profile Conceptually: the various numbers are ``connected'' to each other. In other words, their order and position in relation to each other matters. Common examples in astronomy are the radial profiles of each galaxy in your catalog, or their spectrum. For example, each MUSE@footnote{@url{https://www.eso.org/sci/facilities/develop/instruments/muse.html}} spectra has 3681 points (with a sampling of of 1.25 Angstroms). Dealing with this many separate measurements as separate columns in your table is very annoying and prone to error: you don't want to forget moving some of them in an output table for further analysis, mistakenly change their order, or do some operation only on a sub-set of them. @item Technically: in the FITS standard, you can only store a maximum of 999 columns in a FITS table. Therefore, if you have more than 999 data points for each galaxy (like the MUSE spectra example above), it is impossible to store each point in one table as separate columns. @end itemize To address these problems, the FITS standard has defined the concept of ``vector'' columns in its Binary table format (ASCII FITS tables don't support vector columns, but Gnuastro's plain-text format does, as described here). Within each row of a single vector column, we can store any number of data points (like the MUSE spectra above or the full radial profile of each galaxy). All the values in a vector column have to have the same @ref{Numeric data types}, and the number of elements within each vector column is the same for all rows. By grouping conceptually similar data points (like a spectrum) in one vector column, we can significantly reduce the number of columns and make it much more manageable, without loosing any information! To demonstrate the vector column features of Gnuastro's Table program, let's start with a randomly generated small (5 rows and 3 columns) catalog. This will allows us to show the outputs of each step here, but you can apply the same concept to vectors with any number of columns. With the command below, we use @code{seq} to generate a single-column table that is piped to Gnuastro's Table program. Table then uses column arithmetic to generate three columns with random values from that column (for more, see @ref{Column arithmetic}). Each column becomes noisy, with standard deviations of 2, 5 and 10. Finally, we will add metadata to each column, giving each a different name (using names is always the best way to work with columns): @example $ seq 1 5 \ | asttable -c'arith $1 2 mknoise-sigma f32' \ -c'arith $1 5 mknoise-sigma f32' \ -c'arith $1 10 mknoise-sigma f32' \ --colmetadata=1,abc,none,"First column." \ --colmetadata=2,def,none,"Second column." \ --colmetadata=3,ghi,none,"Third column." \ --output=table.fits @end example With the command below, let's have a look at the table. When you run it, you will have a different random number generator seed, so the numbers will be slightly different. For making reproducible random numbers, see @ref{Generating random numbers}. The @option{-Y} option is used for more easily readable numbers (without it, floating point numbers are written in scientific notation, for more see @ref{Printing floating point numbers}) and with the @option{-O} we are asking Table to also print the metadata. For more on Table's options, see @ref{Invoking asttable} and for seeing how the short options can be merged (such that @option{-Y -O} is identical to @option{-YO}), see @ref{Options}. @example $ asttable table.fits -YO # Column 1: abc [none,f32,] First column. # Column 2: def [none,f32,] Second column. # Column 3: ghi [none,f32,] Third column. 1.074 5.535 -4.464 0.606 -2.011 15.397 1.475 1.811 5.687 2.248 7.663 -7.789 6.355 17.374 6.767 @end example We see that indeed, it has three columns, with our given names. Now, let's assume that you want to make a two-element vector column from the values in the @code{def} and @code{ghi} columns. To do that, you can use the @option{--tovector} option like below. As the name suggests, @option{--tovector} will merge the rows of the two columns into one vector column with multiple values in each row. @example $ asttable table.fits -YO --tovector=def,ghi # Column 1: abc [none,f32 ,] First column. # Column 2: def-VECTOR [none,f32(2),] Vector by merging multiple cols. 1.074 5.535 -4.464 0.606 -2.011 15.397 1.475 1.811 5.687 2.248 7.663 -7.789 6.355 17.374 6.767 @end example @cindex Tokens If you ignore the metadata, this doesn't seem to have changed anything! You see that each line of numbers still has three ``tokens'' (to distinguish them from ``columns''). But once you look at the metadata, you only see metadata for two columns, not three. If you look closely, the numeric data type of the newly added fourth column is `@code{f32(2)}' (look above; previously it was @code{f32}). The @code{(2)} shows that the second column contains two numbers/tokens not one. If your vector column consisted of 3681 numbers, this would be @code{f32(3681)}. Looking again at the metadata, we see that @option{--tovector} has also created a new name and comments for the new column. This is done all the time to avoid confusion with the old columns. Let's confirm that the newly added column is indeed a single column but with two values. To do this, with the command below, we'll write the output into a FITS table. In the same command, let's also give a more suitable name for the new merged/vector column). We can get a first confirmation by looking at the table's metadata in the second command below: @example $ asttable table.fits -YO --tovector=def,ghi --output=vec.fits \ --colmetadata=2,vector,nounits,"New vector column." $ asttable vec.fits -i -------- vec.fits (hdu: 1) ------- ----- ---- ------- No.Name Units Type Comment ------- ----- ---- ------- 1 abc none float32 First column. 2 vector nounits float32(2) New vector column. -------- Number of rows: 5 -------- @end example @noindent A more robust confirmation would be to print the values in the newly added @code{vector} column. As expected, asking for a single column with @option{--column} (or @option{-c}) will given us two numbers per row/line (instead of one!). @example $ asttable vec.fits -c vector -YO # Column 1: vector [nounits,f32(2),] New vector column. 5.535 -4.464 -2.011 15.397 1.811 5.687 7.663 -7.789 17.374 6.767 @end example If you want to keep the original single-valued columns that went into the vector column, you can use the @code{--keepvectfin} option (read it as ``KEEP VECtor To/From Inputs''): @example $ asttable table.fits -YO --tovector=def,ghi --keepvectfin \ --colmetadata=4,vector,nounits,"New vector column." # Column 1: abc [none ,f32 ,] First column. # Column 2: def [none ,f32 ,] Second column. # Column 3: ghi [none ,f32 ,] Third column. # Column 4: vector [nounits,f32(2),] New vector column. 1.074 5.535 -4.464 5.535 -4.464 0.606 -2.011 15.397 -2.011 15.397 1.475 1.811 5.687 1.811 5.687 2.248 7.663 -7.789 7.663 -7.789 6.355 17.374 6.767 17.374 6.767 @end example Now that you know how to create vector columns, let's assume you have the inverse scenario: you want to extract one of the values of a vector column into a separate single-valued column. To do this, you can use the @option{--fromvector} option. The @option{--fromvector} option takes the name (or counter) of a vector column, followed by any number of integer counters (counting from 1). It will extract those elements into separate single-valued columns. For example, let's assume you want to extract the second element of the @code{defghi} column in the file you made before: @example $ asttable vec.fits --fromvector=vector,2 -YO # Column 1: abc [none ,f32,] First column. # Column 2: vector-2 [nounits,f32,] New vector column. 1.074 -4.464 0.606 15.397 1.475 5.687 2.248 -7.789 6.355 6.767 @end example @noindent Just like the case with @option{--tovector} above, if you want to keep the input vector column, use @option{--keepvectfin}. This feature is useful in scenarios where you want to select some rows based on a single element (or multiple) of the vector column. @cartouche @noindent @strong{Vector columns and FITS ASCII tables:} As mentioned above, the FITS standard only recognizes vector columns in its Binary table format (the default FITS table format in Gnuastro). You can still use the @option{--tableformat=fits-ascii} option to write your tables in the FITS ASCII format (see @ref{Input output options}). In this case, if a vector column is present, it will be written as separate single-element columns to avoid loosing information (as if you run called @option{--fromvector} on all the elements of the vector column). A warning is printed if this occurs. @end cartouche For an application of the vector column concepts introduced here on MUSE data, see the 3D data cube tutorial and in particular these two sections: @ref{3D measurements and spectra} and @ref{Extracting a single spectrum and plotting it}. @node Column arithmetic, Operation precedence in Table, Vector columns, Table @subsection Column arithmetic In many scenarios, you want to apply some kind of operation on the columns and save them in another table or feed them into another program. With Table you can do a rich set of operations on the contents of one or more columns in a table, and save the resulting values as new column(s) in the output table. For seeing the precedence of Column arithmetic in relation to other Table operators, see @ref{Operation precedence in Table}. To enable column arithmetic, the first 6 characters of the value to @option{--column} (@code{-c}) should be the activation word `@option{arith }' (note the space character in the end, after `@code{arith}'). After the activation word, you can use reverse polish notation to identify the operators and their operands, see @ref{Reverse polish notation}. Just note that white-space characters are used between the tokens of the arithmetic expression and that they are meaningful to the command-line environment. Therefore the whole expression (including the activation word) has to be quoted on the command-line or in a shell script (see the examples below). To identify a column you can directly use its name, or specify its number (counting from one, see @ref{Selecting table columns}). When you are giving a column number, it is necessary to prefix the number with a @code{$}, similar to AWK. Otherwise the number is not distinguishable from a constant number to use in the arithmetic operation. For example, with the command below, the first two columns of @file{table.fits} will be printed along with a third column that is the result of multiplying the first column with @mymath{10^{10}} (for example, to convert wavelength from Meters to Angstroms). Note that without the `@key{$}', it is not possible to distinguish between ``1'' as a column-counter, or ``1'' as a constant number to use in the arithmetic operation. Also note that because of the significance of @key{$} for the command-line environment, the single-quotes are the recommended quoting method (as in an AWK expression), not double-quotes (for the significance of using single quotes see the box below). @example $ asttable table.fits -c1,2 -c'arith $1 1e10 x' @end example @cartouche @noindent @strong{Single quotes when string contains @key{$}}: On the command-line, or in shell-scripts, @key{$} is used to expand variables, for example, @code{echo $PATH} prints the value (a string of characters) in the variable @code{PATH}, it will not simply print @code{$PATH}. This operation is also permitted within double quotes, so @code{echo "$PATH"} will produce the same output. This is good when printing values, for example, in the command below, @code{$PATH} will expand to the value within it. @example $ echo "My path is: $PATH" @end example If you actually want to return the literal string @code{$PATH}, not the value in the @code{PATH} variable (like the scenario here in column arithmetic), you should put it in single quotes like below. The printed value here will include the @code{$}, please try it to see for yourself and compare to above. @example $ echo 'My path is: $PATH' @end example Therefore, when your column arithmetic involves the @key{$} sign (to specify columns by number), quote your @code{arith } string with a single quotation mark. Otherwise you can use both single or double quotes. @end cartouche @cartouche @noindent @strong{Manipulate all columns in one call using @key{$_all}}: Usually we manipulate one column in one call of column arithmetic. For instance, with the command below the elements of the @code{AWAV} column will be sumed. @example $ asttable table.fits -c'arith AWAV sumvalue' @end example But sometimes, we want to manipulate more than one column with the same expression. For example we want to sum all the elements of all the columns. In this case we could use the following command (assuming that the table has four different @code{AWAV-*} columns): @example $ asttable table.fits -c'arith AWAV-1 sumvalue' \ -c'arith AWAV-2 sumvalue' \ -c'arith AWAV-3 sumvalue' \ -c'arith AWAV-4 sumvalue' @end example To avoid repetition and mistakes, instead of using column arithmetic many times, we can use the @code{$_all} identifier. When column arithmetic confronts this special string, it will repeat the expression for all the columns in the input table. Therefore the command above can be written as: @example $ asttable table.fits -c'arith $_all sumvalue' @end example @end cartouche Alternatively, if the columns have meta-data and the first two are respectively called @code{AWAV} and @code{SPECTRUM}, the command above is equivalent to the command below. Note that the character `@key{$}' is no longer necessary in this scenario (because names will not be confused with numbers): @example $ asttable table.fits -cAWAV,SPECTRUM -c'arith AWAV 1e10 x' @end example Comparison of the two commands above clearly shows why it is recommended to use column names instead of numbers. When the columns have descriptive names, the command/script actually becomes much more readable, describing the intent of the operation. It is also independent of the low-level table structure: for the second command, the column numbers of the @code{AWAV} and @code{SPECTRUM} columns in @file{table.fits} is irrelevant. Column arithmetic changes the values of the data within the column. So the old column metadata cannot be used any more. By default the output column of the arithmetic operation will be given a generic metadata (for example, its name will be @code{ARITH_1}, which is hardly useful!). But metadata are critically important and it is good practice to always have short, but descriptive, names for each columns, units and also some comments for more explanation. To add metadata to a column, you can use the @option{--colmetadata} option that is described in @ref{Invoking asttable} and @ref{Operation precedence in Table}. Since the arithmetic expressions are a value to @option{--column}, it does not necessarily have to be a separate option, so the commands above are also identical to the command below (note that this only has one @option{-c} option). Just be very careful with the quoting! With the @option{--colmetadata} option, we are also giving a name, units and a comment to the third column. @example $ asttable table.fits -cAWAV,SPECTRUM,'arith AWAV 1e10 x' \ --colmetadata=3,AWAV_A,angstrom,"Wavelength (in Angstroms)" @end example In case you need to append columns from other tables (with @option{--catcolumnfile}), you can use those extra columns in column arithmetic also. The easiest, and most robust, way is that your columns of interest (in all files whose columns are to be merged) have different names. In this scenario, you can simply use the names of the columns you plan to append. If there are similar names, note that by default Table appends a @code{-N} to similar names (where @code{N} is the file counter given to @option{--catcolumnfile}, see the description of @option{--catcolumnfile} for more). Using column numbers can get complicated: if the number is smaller than the main input's number of columns, the main input's column will be used. Otherwise (when the requested column number is larger than the main input's number of columns), the final output (after appending all the columns from all the possible files) column number will be used. Almost all the arithmetic operators of @ref{Arithmetic operators} are also supported for column arithmetic in Table. In particular, the few that are not present in the Gnuastro library@footnote{For a list of the Gnuastro library arithmetic operators, please see the macros starting with @code{GAL_ARITHMETIC_OP} and ending with the operator name in @ref{Arithmetic on datasets}.} are not yet supported for column arithmetic. Besides the operators in @ref{Arithmetic operators}, several operators are only available in Table to use on table columns. @cindex WCS: World Coordinate System @cindex World Coordinate System (WCS) @table @code @item wcs-to-img Convert the given WCS positions to image/dataset coordinates based on the number of dimensions in the WCS structure of @option{--wcshdu} extension/HDU in @option{--wcsfile}. It will output the same number of columns. The first popped operand is the last FITS dimension. For example, the two commands below (which have the same output) will produce 5 columns. The first three columns are the input table's ID, RA and Dec columns. The fourth and fifth columns will be the pixel positions in @file{image.fits} that correspond to each RA and Dec. @example $ asttable table.fits -cID,RA,DEC,'arith RA DEC wcs-to-img' \ --wcsfile=image.fits $ asttable table.fits -cID,RA -cDEC \ -c'arith RA DEC wcs-to-img' --wcsfile=image.fits @end example @item img-to-wcs Similar to @code{wcs-to-img}, except that image/dataset coordinates are converted to WCS coordinates. @item eq-j2000-to-flat Convert spherical RA and Dec (in Julian year 2000.0 equatorial coordinates; which are the most common) into RA and Dec on a flat surface based on the given reference point and projection. The full details of the operands to this operator are given below, but let's start with a practical example to show the concept. At (or very near) the reference point the output of this operator will be the same as the input. But as you move away from the reference point, distortions due to the particular projection will gradually cause changes in the output (when compared to the input). For example if you simply plot RA and Dec without this operator, a circular annulus on the sky will become elongated as the declination of its center goes farther from the equator. For a demonstration of the difference between curved and flat RA and Decs, see @ref{Pointings that account for sky curvature} in the Tutorials chapter. Let's assume you want to plot a set of RA and Dec points (defined on a spherical surface) in a paper (a flat surface) and that @file{table.fits} contains the RA and Dec in columns that are called @code{RA} and @code{DEC}. With the command below, the points will be converted to flat-RA and flat-Dec using the Gnomonic projection (which is known as @code{TAN} in the FITS WSC standard; see the description of the first popped operand below): @example $ asttable table.fits \ -c'arith RA set-r DEC set-d \ r d r meanvalue d meanvalue TAN \ eq-j2000-to-flat' @end example As you see, the RA and Dec (@code{r} and @code{d}) are the last two operators that are popped. Before them, the reference point's coordinates are calculated from the mean of the RA and Decs (`@code{r meanvalue}' and `@code{d meanvalue}'), and the first popped operand is the projection (@code{TAN}). We are using the mean RA and Dec as the reference point since we are assuming that this is the only set of points you want to convert. In case you have to plot multiple sets of points in the same plot, you should give the same reference point in each separate conversion; like the example below: @example $ ref_ra=123.45 $ ref_dec=-6.789 $ asttable table-1.fits --output=flat-1.txt \ -c'arith RA DEC '$ref_ra' '$ref_dec' TAN \ eq-j2000-to-flat' $ asttable table-2.fits --output=flat-2.txt \ -c'arith RA DEC '$ref_ra' '$ref_dec' TAN \ eq-j2000-to-flat' @end example This operator takes 5 operands: @enumerate @item The @emph{first} popped operand (closest to the operator) is the standard FITS WCS projection to use; and should contain a single element (not a column). The full list of projections can be seen in the description of the @option{--ctype} option in @ref{Align pixels with WCS considering distortions}. The most common projection for smaller fields of view is @code{TAN} (Gnomonic), but when your input catalog contains large portions of the sky, projections like @code{MOL} (Mollweide) should be used. This is because distortions caused by the @code{TAN} projection can become very significant after a couple of degrees from the reference point. @item The @emph{second} popped operand is the reference point's declination; and should contain a single value (not a column). @item The @emph{third} popped operand is the reference point's right ascension; and should contain a single value (not a column). @item The @emph{fourth} popped operand is the declination column of your input table (the points that will be converted). @item The @emph{fifth} popped operand is the right ascension column of your input table (the points that will be converted). @end enumerate @item eq-j2000-from-flat The inverse of @code{eq-j2000-to-flat}. In other words, you have a set of points defined on the flat RA and Dec (after the projection from spherical to flat), but you want to map them to spherical RA and Dec. For an example, see @ref{Pointings that account for sky curvature} in the Gnuastro tutorials. @item distance-flat Return the distance between two points assuming they are on a flat surface. Note that each point needs two coordinates, so this operator needs four operands (currently it only works for 2D spaces). The first and second popped operands are considered to belong to one point and the third and fourth popped operands to the second point. Each of the input points can be a single coordinate or a full table column (containing many points). In other words, the following commands are all valid: @example $ asttable table.fits \ -c'arith X1 Y1 X2 Y2 distance-flat' $ asttable table.fits \ -c'arith X Y 12.345 6.789 distance-flat' $ asttable table.fits \ -c'arith 12.345 6.789 X Y distance-flat' @end example In the first case we are assuming that @file{table.fits} has the following four columns @code{X1}, @code{Y1}, @code{X2}, @code{Y2}. The returned column by this operator will be the difference between two points in each row with coordinates like the following (@code{X1}, @code{Y1}) and (@code{X2}, @code{Y2}). In other words, for each row, the distance between different points is calculated. In the second and third cases (which are identical), it is assumed that @file{table.fits} has the two columns @code{X} and @code{Y}. The returned column by this operator will be the difference of each row with the fixed point at (12.345, 6.789). @item distance-on-sphere Return the spherical angular distance (along a great circle, in degrees) between the given two points. Note that each point needs two coordinates (in degrees), so this operator needs four operands. The first and second popped operands are considered to belong to one point and the third and fourth popped operands to the second point. Each of the input points can be a single coordinate or a full table column (containing many points). In other words, the following commands are all valid: @example $ asttable table.fits \ -c'arith RA1 DEC1 RA2 DEC2 distance-on-sphere' $ asttable table.fits \ -c'arith RA DEC 9.876 5.432 distance-on-sphere' $ asttable table.fits \ -c'arith 9.876 5.432 RA DEC distance-on-sphere' @end example In the first case we are assuming that @file{table.fits} has the following four columns @code{RA1}, @code{DEC1}, @code{RA2}, @code{DEC2}. The returned column by this operator will be the difference between two points in each row with coordinates like the following (@code{RA1}, @code{DEC1}) and (@code{RA2}, @code{DEC2}). In other words, for each row, the angular distance between different points is calculated. In the second and third cases (which are identical), it is assumed that @file{table.fits} has the two columns @code{RA} and @code{DEC}. The returned column by this operator will be the difference of each row with the fixed point at (9.876, 5.432). The distance (along a great circle) on a sphere between two points is calculated with the equation below, where @mymath{r_1}, @mymath{r_2}, @mymath{d_1} and @mymath{d_2} are the right ascensions and declinations of points 1 and 2. @dispmath {\cos(d)=\sin(d_1)\sin(d_2)+\cos(d_1)\cos(d_2)\cos(r_1-r_2)} @item ra-to-degree Convert the hour-wise Right Ascension (RA) string, in the sexagesimal format of @code{_h_m_s} or @code{_:_:_}, to degrees. Note that the input column has to have a string format. In FITS tables, string columns are well-defined. For plain-text tables, please follow the standards defined in @ref{Gnuastro text table format}, otherwise the string column will not be read. @example $ asttable catalog.fits -c'arith RA ra-to-degree' $ asttable catalog.fits -c'arith $5 ra-to-degree' @end example @item dec-to-degree Convert the sexagesimal Declination (Dec) string, in the format of @code{_d_m_s} or @code{_:_:_}, to degrees (a single floating point number). For more details please see the @option{ra-to-degree} operator. @item degree-to-ra @cindex Sexagesimal @cindex Right Ascension Convert degrees (a column with a single floating point number) to the Right Ascension, RA, string (in the sexagesimal format hours, minutes and seconds, written as @code{_h_m_s}). The output will be a string column so no further mathematical operations can be done on it. The output file can be in any format (for example, FITS or plain-text). If it is plain-text, the string column will be written following the standards described in @ref{Gnuastro text table format}. @item degree-to-dec @cindex Declination Convert degrees (a column with a single floating point number) to the Declination, Dec, string (in the format of @code{_d_m_s}). See the @option{degree-to-ra} for more on the format of the output. @item date-to-sec @cindex Unix epoch time @cindex Time, Unix epoch @cindex Epoch, Unix time Return the number of seconds from the Unix epoch time (00:00:00 Thursday, January 1st, 1970). The input (popped) operand should be a string column in the FITS date format (most generally: @code{YYYY-MM-DDThh:mm:ss.ddd...}). The returned operand will be named @code{UNIXSEC} (short for Unix-seconds) and will be a 64-bit, signed integer, see @ref{Numeric data types}. If the input string has sub-second precision, it will be ignored because floating point numbers cannot accurately store numbers with many significant digits. To preserve sub-second precision, please use @code{date-to-millisec}. For example, in the example below we are using this operator, in combination with the @option{--keyvalue} option of the Fits program, to sort your desired FITS files by observation date (value in the @code{DATE-OBS} keyword in example below): @example $ astfits *.fits --keyvalue=DATE-OBS --colinfoinstdout \ | asttable -cFILENAME,'arith DATE-OBS date-to-sec' \ --colinfoinstdout \ | asttable --sort=UNIXSEC @end example If you do not need to see the Unix-seconds any more, you can add a @option{-cFILENAME} (short for @option{--column=FILENAME}) at the end. For more on @option{--keyvalue}, see @ref{Keyword inspection and manipulation}. @item date-to-millisec Return the number of milli-seconds from the Unix epoch time (00:00:00 Thursday, January 1st, 1970). The input (popped) operand should be a string column in the FITS date format (most generally: @code{YYYY-MM-DDThh:mm:ss.ddd...}, where @code{.ddd} is the optional sub-second component). The returned operand will be named @code{UNIXMILLISEC} (short for Unix milli-seconds) and will be a 64-bit, signed integer, see @ref{Numeric data types}. The returned value is not a floating point type because for large numbers, floating point data types loose single-digit precision (which is important here). Other than the units of the output, this operator behaves similarly to @code{date-to-sec}. See the description of that operator for an example. @item sorted-to-interval Given a single column (which must be already sorted and have a numeric data type), return two columns: the first returned column is the minimum and the second returned column is the maximum value of the interval of each row row. The maximum of each row is equal to the minimum of the previous row; thus creating a contiguous interval coverage of the input column's range in all rows. The minimum value of the first row and maximum of the last row will be smaller/larger than the respective row of the input (based on the distance to the next/previous element). This is done to ensure that if your input has a fixed interval length between all elements, the first and last intervals also have that fixed length. For example, with the command below, we'll use this operator on a hypothetical radial profile. Note how the intervals are contiguous even though the radius values are not equally distant (if the row with a radius of 2.5 didn't exist, the intervals would all be the same length). For another example of the usage of this operator, see the example in the description of @option{--customtable} in @ref{MakeProfiles profile settings}. @example $ cat radial-profile.txt # Column 1: RADIUS [pix,f32,] Distance to center in pixels. # Column 2: MEAN [ADU,f32,] Mean value at that radius. 0 100 1 40 2 30 2.5 25 3 20 $ asttable radial-profile.txt --txtf32f=fixed --txtf32p=3 \ -c'arith RADIUS sorted-to-interval',MEAN -0.500 0.500 100.000 0.500 1.500 40.000 1.500 2.250 30.000 2.250 2.750 25.000 2.750 3.250 20.000 @end example Such intervals can be useful in scenarios like generating the input to @option{--customtable} in MakeProfiles (see @ref{MakeProfiles profile settings}) from a radial profile (see @ref{Generate radial profile}). @end table @node Operation precedence in Table, Invoking asttable, Column arithmetic, Table @subsection Operation precedence in Table The Table program can do many operations on the rows and columns of the input tables and they are not always applied in the order you call the operation on the command-line. In this section we will describe which operation is done before/after which operation. Knowing this precedence table is important to avoid confusion when you ask for more than one operation. For a description of each option, please see @ref{Invoking asttable}. By default, column-based operations will be done first. You can ask for switching to row-based operations to be done first, using the @option{--rowfirst} option. @cartouche @noindent @strong{Pipes for different precedence:} It may happen that your desired series of operations cannot be done with the precedence mentioned below (in one command). In this case, you can pipe the output of one call to @command{asttable} to another @command{asttable}. Just don't forget to give @option{-O} (or @option{--colinfoinstdout}) to the first instance (so the column metadata are also passed to the next instance). Without metadata, all numbers will be read as double-precision (see @ref{Gnuastro text table format}; recall that piping is done in plain text format), vector columns will be broken into single-valued columns, and column names, units and comments will be lost. At the end of this section, there is an example of doing this. @end cartouche @table @asis @item Input table information The first set of operations that will be preformed (if requested) are the printing of the input table information. Therefore, when the following options are called, the column data are not read at all. Table simply reads the main input's column metadata (name, units, numeric data type and comments), and the number of rows and prints them. Table then terminates and no other operation is done. These can therefore be called at the end of an arbitrarily long Table command. When you have forgot some information about the input table. You can then delete these options and continue writing the command (using the shell's history to retrieve the previous command with an up-arrow key). At any time only a single one of the options in this category may be called. The order of checking for these options is therefore important: in the same order that they are described below: @table @asis @item Column and row information (@option{--information} or @option{-i}) Print the list of input columns and the metadata of each column in a single row. This includes the column name, numeric data type, units and comments of each column within a separate row of the output. Finally, print the number of rows. @item Number of columns (@option{--info-num-cols}) Print the number of columns in the input table. Only a single integer (number of columns) is printed before Table terminates. @item Number of rows (@option{--info-num-rows}) Print the number of rows in the input table. Only a single integer (number of rows) is printed before Table terminates. @end table @item Column selection (@option{--column}) When this option is given, only the columns given to this option (from the main input) will be used for all future steps. When @option{--column} (or @option{-c}) is not given, then all the main input's columns will be used in the next steps. @item Column-based operations By default the following column-based operations will be done before the row-based operations in the next item. If you need to give precedence to row-based operations, use @option{--rowfirst}. @table @asis @item Column(s) from other file(s): @option{--catcolumnfile} When column concatenation (addition) is requested, columns from other tables (in other files, or other HDUs of the same FITS file) will be added after the existing columns are read from the main input. In one command, you can call @option{--catcolumnfile} multiple times to allow addition of columns from many files. Therefore you can merge the columns of various tables into one table in this step (at the start), then start adding/limiting the rows, or building vector columns, . If any of the row-based operations below are requested in the same @code{asttable} command, they will also be applied to the rows of the added columns. However, the conditions to keep/reject rows can only be applied to the rows of the columns in main input table (not the columns that are added with these options). @item Extracting single-valued columns from vectors (@option{--fromvector}) Once all the input columns are read into memory, if any of them are vectors, you can extract a single-valued column from the vector columns at this stage. For more on vector columns, see @ref{Vector columns}. @item Creating vector columns (@option{--tovector}) After column arithmetic, there is no other way to add new columns so the @option{--tovector} operator is applied at this stage. You can use it to merge multiple columns that are available in this stage to a single vector column. For more, see @ref{Vector columns}. @item Column arithmetic Once the final rows are selected in the requested order, column arithmetic is done (if requested). For more on column arithmetic, see @ref{Column arithmetic}. @end table @item Row-based operations Row-based operations only work within the rows of existing columns when they are activated. By default row-based operations are activated after column-based operations (which are mentioned above). If you need to give precedence to row-based operations, use @option{--rowfirst}. @table @asis @item Rows from other file(s) (@option{--catrowfile}) With this feature, you can import rows from other tables (in other files, or other HDUs of the same FITS file). The same column selection of @option{--column} is applied to the tables given to this option. The column metadata (name, units and comments) will be taken from the main input. Two conditions are mandatory for adding rows: @itemize @item The number of columns used from the new tables must be equal to the number of columns in memory, by the time control reaches here. @item The data type of each column (see @ref{Numeric data types}) should be the same as the respective column in memory by the time control reaches here. If the data types are different, you can use the type conversion operators of column arithmetic which has higher precedence (and will therefore be applied before this by default). For more on type conversion, see @ref{Numerical type conversion operators} and @ref{Column arithmetic}). @end itemize @item Row selection by value in a column The following operations select rows based on the values in them. A more complete description of each of these options is given in @ref{Invoking asttable}. @itemize @item @option{--range}: only keep rows where the value in the given column is within a certain interval. @item @option{--inpolygon}: only keep rows where the value is within the polygon of @option{--polygon}. @item @option{--outpolygon}: only keep rows outside the polygon of @option{--polygon}. @item @option{--equal}: only keep rows with an specified value in given column. @item @option{--notequal}: only keep rows without specified value in given column. @item @option{--noblank}: only keep rows that are not blank in the given column(s). @end itemize These options can be called any number of times (to limit the final rows based on values in different columns for example). Since these are row-rejection operations, their internal order is irrelevant. In other words, it makes no difference if @option{--equal} is called before or after @option{--range} for example. As a side-effect, because NaN/blank values are defined to fail on any condition, these operations will also remove rows with NaN/blank values in the specified column they are checking. Also, the columns that are used for these operations do not necessarily have to be in the final output table (you may not need the column after doing the selection based on it). By default, these options are applied after merging columns from other tables. However, currently, the column given to these options can only come from the main input table. If you need to apply these operations on columns from @option{--catcolumnfile}, pipe the output of one instance of Table with @option{--catcolumnfile} into another instance of Table as suggested in the box above this list. These row-based operations options are applied first because the speed of later operations can be greatly affected by the number of rows. For example, if you also call the @option{--sort} option, and your row selection will result in 50 rows (from an input of 10000 rows), limiting the number of rows first will greatly speed up the sorting in your final output. @item Sorting (@option{--sort}) Sort of the rows based on values in a certain column. The column to sort by can only come from the main input table columns (not columns that may have been added with @option{--catcolumnfile}). @item Row selection (by position) @itemize @item @option{--head}: keep only requested number of top rows. @item @option{--tail}: keep only requested number of bottom rows. @item @option{--rowrandom}: keep only a random number of rows. @item @option{--rowrange}: keep only rows within a certain positional interval. @end itemize These options limit/select rows based on their position within the table (not their value in any certain column). @item Transpose vector columns (@option{--transpose}) Transposing vector columns will not affect the number or metadata of columns, it will just re-arrange them in their 2D structure. As a result, after transposing, the number of rows changes, as well as the number of elements in each vector column. See the description of this option in @ref{Invoking asttable} for more (with an example). @end table @item Column metadata (@option{--colmetadata}) Once the structure of the final table is set, you can set the column metadata just before finishing. @item Output row selection (@option{--noblankend}) Only keep the output rows that do not have a blank value in the given column(s). For example, you may need to apply arithmetic operations on the columns (through @ref{Column arithmetic}) before rejecting the undesired rows. After the arithmetic operation is done, you can use the @code{where} operator to set the non-desired columns to NaN/blank and use @option{--noblankend} option to remove them just before writing the output. In other scenarios, you may want to remove blank values based on columns in another table. To help in readability, you can also use the final column names that you set with @option{--colmetadata}! See the example below for applying any generic value-based row selection based on @option{--noblankend}. @end table As an example, let's review how Table interprets the command below. We are assuming that @file{table.fits} contains at least three columns: @code{RA}, @code{DEC} and @code{PARAM} and you only want the RA and Dec of the rows where @mymath{p\times 2<5} (@mymath{p} is the value of each row in the @code{PARAM} column). @example $ asttable table.fits -cRA,DEC --noblankend=MULTIP \ -c'arith PARAM 2 x set-i i i 5 gt nan where' \ --colmetadata=3,MULTIP,unit,"Description of column" @end example @noindent Due to the precedence described in this section, Table does these operations (which are independent of the order of the operations written on the command-line): @enumerate @item At the start (with @code{-cRA,DEC}), Table reads the @code{RA} and @code{DEC} columns. @item In between all the operations in the command above, Column arithmetic (with @option{-c'arith ...'}) has the highest precedence. So the arithmetic operation is done and stored as a new (third) column. In this arithmetic operation, we multiply all the values of the @code{PARAM} column by 2, then set all those with a value larger than 5 to NaN (for more on understanding this operation, see the `@code{set-}' and `@code{where}' operators in @ref{Arithmetic operators}). @item Updating column metadata (with @option{--colmetadata}) is then done to give a name (@code{MULTIP}) to the newly calculated (third) column. During the process, besides a name, we also set a unit and description for the new column. These metadata entries are @emph{very important}, so always be sure to add metadata after doing column arithmetic. @item The lowest precedence operation is @option{--noblankend=MULTIP}. So only rows that are not blank/NaN in the @code{MULTIP} column are kept. @item Finally, the output table (with three columns) is written to the command-line. If you also want to print the column metadata, you can use the @option{-O} (or @option{--colinfoinstdout}) option. Alternatively, if you want the output in a file, you can use the @option{--output} option to save the table in FITS or plain-text format. @end enumerate It may happen that your desired operation needs a separate precedence. In this case you can pipe the output of Table into another call of Table and use the @option{-O} (or @option{--colinfoinstdout}) option to preserve the metadata between the two calls. For example, let's assume that you want to sort the output table from the example command above based on the new @code{MULTIP} column. Since sorting is done prior to column arithmetic, you cannot do it in one command, but you can circumvent this limitation by simply piping the output (including metadata) to another call to Table: @example asttable table.fits -cRA,DEC --noblankend=MULTIP --colinfoinstdout \ -c'arith PARAM 2 x set-i i i 5 gt nan where' \ --colmetadata=3,MULTIP,unit,"Description of column" \ | asttable --sort=MULTIP --output=selected.fits @end example @node Invoking asttable, , Operation precedence in Table, Table @subsection Invoking Table Table will read/write, select, modify, or show the information of the rows and columns in recognized Table formats (including FITS binary, FITS ASCII, and plain text table files, see @ref{Tables}). Output columns can also be determined by number or regular expression matching of column names, units, or comments. The executable name is @file{asttable} with the following general template @example $ asttable [OPTION...] InputFile @end example @noindent One line examples: @example ## Get the table column information (name, units, or data type), and ## the number of rows: $ asttable table.fits --information ## Print columns named RA and DEC, followed by all the columns where ## the name starts with "MAG_": $ asttable table.fits --column=RA --column=DEC --column=/^MAG_/ ## Similar to the above, but with one call to `--column' (or `-c'), ## also sort the rows by the input's photometric redshift (`Z_PHOT') ## column. To confirm the sort, you can add `Z_PHOT' to the columns ## to print. $ asttable table.fits -cRA,DEC,/^MAG_/ --sort=Z_PHOT ## Similar to the above, but only print rows that have a photometric ## redshift between 2 and 3. $ asttable table.fits -cRA,DEC,/^MAG_/ --range=Z_PHOT,2:3 ## Only print rows with a value in the 10th column above 100000: $ asttable table.txt --range=10,10e5,inf ## Only print the 2nd column, and the third column multiplied by 5, ## Save the resulting two columns in `table.txt' $ asttable table.fits -c2,'arith $2 5 x' -otable.fits ## Sort the output columns by the third column, save output: $ asttable table.fits --sort=3 -ooutput.txt ## Subtract the first column from the second in `cat.txt' (can also ## be a FITS table) and keep the third and fourth columns. $ asttable cat.txt -c'arith $2 $1 -',3,4 -ocat.fits ## Convert sexagesimal coordinates to degrees (same can be done in a ## large table given as argument). $ echo "7h34m35.5498 31d53m14.352s" | asttable ## Convert RA and Dec in degrees to sexagesimal (same can be done in a ## large table given as argument). $ echo "113.64812416667 31.88732" \ | asttable -c'arith $1 degree-to-ra $2 degree-to-dec' ## Extract columns 1 and 2, as well as all those between 12 to 58: $ asttable table.fits -c1,2,$(seq -s',' 12 58) @end example Table's input dataset can be given either as a file or from Standard input (piped from another program, see @ref{Standard input}). In the absence of selected columns, all the input's columns and rows will be written to the output. The full set of operations Table can do are described in detail below, but for a more high-level introduction to the various operations, and their precedence, see @ref{Operation precedence in Table}. If any output file is explicitly requested (with @option{--output}) the output table will be written in it. When no output file is explicitly requested the output table will be written to the standard output. If the specified output is a FITS file, the type of FITS table (binary or ASCII) will be determined from the @option{--tabletype} option. If the output is not a FITS file, it will be printed as a plain text table (with space characters between the columns). When the output is not binary (for example standard output or a plain-text), the @option{--txtf32*} or @option{--txtf64*} options can be used for the formatting of floating point columns (see @ref{Printing floating point numbers}). When the columns are accompanied by meta-data (like column name, units, or comments), this information will also printed in the plain text file before the table, as described in @ref{Gnuastro text table format}. For the full list of options common to all Gnuastro programs please see @ref{Common options}. Options can also be stored in directory, user or system-wide configuration files to avoid repeating on the command-line, see @ref{Configuration files}. Table does not follow Automatic output that is common in most Gnuastro programs, see @ref{Automatic output}. Thus, in the absence of an output file, the selected columns will be printed on the command-line with no column information, ready for redirecting to other tools like @command{awk}. @cartouche @noindent @strong{Sexagesimal coordinates as floats in plain-text tables:} When a column is determined to be a floating point type (32-bit or 64-bit) in a plain-text table, it can contain sexagesimal values in the format of `@code{_h_m_s}' (for RA) and `@code{_d_m_s}' (for Dec), where the `@code{_}'s are place-holders for numbers. In this case, the string will be immediately converted to a single floating point number (in units of degrees) and stored in memory with the rest of the column or table. Besides being useful in large tables, with this feature, conversion to sexagesimal coordinates to degrees becomes very easy, for example: @example echo "7h34m35.5498 31d53m14.352s" | asttable @end example @noindent The inverse can also be done with the more general column arithmetic operators: @example echo "113.64812416667 31.88732" \ | asttable -c'arith $1 degree-to-ra $2 degree-to-dec' @end example @noindent If you want to preserve the sexagesimal contents of a column, you should store that column as a string, see @ref{Gnuastro text table format}. @end cartouche @table @option @item -i @itemx --information Only print the column information in the specified table on the command-line and exit. Each column's information (number, name, units, data type, and comments) will be printed as a row on the command-line. If the column is a multi-value (vector) a @code{[N]} is printed after the type, where @code{N} is the number of elements within that vector. Note that the FITS standard only requires the data type (see @ref{Numeric data types}), and in plain text tables, no meta-data/information is mandatory. Gnuastro has its own convention in the comments of a plain text table to store and transfer this information as described in @ref{Gnuastro text table format}. This option will take precedence over all other operations in Table, so when it is called along with other operations, they will be ignored, see @ref{Operation precedence in Table}. This can be useful if you forget the identifier of a column after you have already typed some on the command-line. You can simply add a @option{-i} to your already-written command (without changing anything) and run Table, to see the whole list of column names and information. Then you can use the shell history (with the up arrow key on the keyboard), and retrieve the last command with all the previously typed columns present, delete @option{-i} and add the identifier you had forgot. @item --info-num-cols Similar to @option{--information}, but only the number of the input table's columns will be printed as a single integer (useful in scripts for example). @item --info-num-rows Similar to @option{--information}, but only the number of the input table's rows will be printed as a single integer (useful in scripts for example). @cindex AWK @cindex GNU AWK @item -c STR/INT @itemx --column=STR/INT Set the output columns either by specifying the column number, or name. For more on selecting columns, see @ref{Selecting table columns}. If a value of this option starts with `@code{arith }', column arithmetic will be activated, allowing you to edit/manipulate column contents. For more on column arithmetic see @ref{Column arithmetic}. To ask for multiple columns this option can be used in two ways: 1) multiple calls to this option, 2) using a comma between each column specifier in one call to this option. These different solutions may be mixed in one call to Table: for example, `@option{-cRA,DEC,MAG}', or `@option{-cRA,DEC -cMAG}' are both equivalent to `@option{-cRA -cDEC -cMAG}'. The order of the output columns will be the same order given to the option or in the configuration files (see @ref{Configuration file precedence}). This option is not mandatory, if no specific columns are requested, all the input table columns are output. When this option is called multiple times, it is possible to output one column more than once. @cartouche @noindent @strong{Sequence of columns:} when dealing with a large number catalogs (hundreds for example!), it will be frustrating, annoying and buggy to insert the columns manually. If you want to read all the input columns, you can use the special @option{_all} value to @option{--column} option. A more generic solution (for example if you want every second one, or all the columns within a special range) is to use the @command{seq} command's features with an extra @option{-s','} (so a comma is used as the ``separator''). For example if you want columns 1, 2 and all columns between 12 to 58 (inclusive), you can use the following command: @example $ asttable table.fits -c1,2,$(seq -s',' 12 58) @end example @end cartouche @item -w FITS @itemx --wcsfile=FITS FITS file that contains the WCS to be used in the @code{wcs-to-img} and @code{img-to-wcs} operators of @ref{Column arithmetic}. The extension name/number within the FITS file can be specified with @option{--wcshdu}. If the value to this option is `@option{none}', no WCS will be written in the output. @item -W STR @itemx --wcshdu=STR FITS extension/HDU in the FITS file given to @option{--wcsfile} (see the description of @option{--wcsfile} for more). @item -L FITS/TXT @itemx --catcolumnfile=FITS/TXT Concatenate (or add, or append) the columns of this option's value (a filename) to the output columns. This option may be called multiple times (to add columns from more than one file into the final output), the columns from each file will be added in the same order that this option is called. The number of rows in the file(s) given to this option has to be the same as the input table (before any type of row-selection), see @ref{Operation precedence in Table}. By default all the columns of the given file will be appended, if you only want certain columns to be appended, use the @option{--catcolumns} option to specify their name or number (see @ref{Selecting table columns}). Note that the columns given to @option{--catcolumns} must be present in all the given files (if this option is called more than once with more than one file). If the file given to this option is a FITS file, it is necessary to also define the corresponding HDU/extension with @option{--catcolumnhdu}. Also note that no operation (such as row selection and arithmetic) is applied to the table given to this option. If the appended columns have a name, and their name is already present in the table before adding those columns, the column names of each file will be appended with a @code{-N}, where @code{N} is a counter starting from 1 for each appended table. Just note that in the FITS standard (and thus in Gnuastro), column names are not case-sensitive. This is done because when concatenating columns from multiple tables (more than two) into one, they may have the same name, and it is not good practice to have multiple columns with the same name. You can disable this feature with @option{--catcolumnrawname}. Generally, you can use the @option{--colmetadata} option to update column metadata in the same command, after all the columns have been concatenated. For example, let's assume you have two catalogs of the same objects (same number of rows) in different filters. Such that @file{f160w-cat.fits} has a @code{MAGNITUDE} column that has the magnitude of each object in the @code{F160W} filter and similarly @file{f105w-cat.fits}, also has a @code{MAGNITUDE} column, but for the @code{F105W} filter. You can use column concatenation like below to import the @code{MAGNITUDE} column from the @code{F105W} catalog into the @code{F160W} catalog, while giving each magnitude column a different name: @example asttable f160w-cat.fits --output=both.fits \ --catcolumnfile=f105w-cat.fits --catcolumns=MAGNITUDE \ --colmetadata=MAGNITUDE,MAG-F160W,log,"Magnitude in F160W" \ --colmetadata=MAGNITUDE-1,MAG-F105W,log,"Magnitude in F105W" @end example @noindent For a more complete example, see @ref{Working with catalogs estimating colors}. @cartouche @noindent @strong{Loading external columns with Arithmetic:} an alternative way to load external columns into your output is to use column arithmetic (@ref{Column arithmetic}) In particular the @option{load-col-} operator described in @ref{Loading external columns}. But this operator will load only one column per file/HDU every time it is called. So if you have many columns to insert, it is much faster to use @option{--catcolumnfile}. Because @option{--catcolumnfile} will load all the columns in one opening of the file, and possibly even read them all into memory in parallel! @end cartouche @item -u STR/INT @itemx --catcolumnhdu=STR/INT The HDU/extension of the FITS file(s) that should be concatenated, or appended, by column with @option{--catcolumnfile}. If @option{--catcolumn} is called more than once with more than one FITS file, it is necessary to call this option more than once. The HDUs will be loaded in the same order as the FITS files given to @option{--catcolumnfile}. @item -C STR/INT @itemx --catcolumns=STR/INT The column(s) in the file(s) given to @option{--catcolumnfile} to append. When this option is not given, all the columns will be concatenated. See @option{--catcolumnfile} for more. @item --catcolumnrawname Do not modify the names of the concatenated (appended) columns, see description in @option{--catcolumnfile}. @item --transpose Transpose (as in a matrix) the given vector column(s) individually. When this operation is done (see @ref{Operation precedence in Table}), only vector columns of the same data type and with the same number of elements should exist in the table. A usage of this operator is presented in the IFU spectroscopy tutorial in @ref{Extracting a single spectrum and plotting it}. As a generic example, see the commands below. The @file{in.txt} table below has two vector columns (each with three elements) in two rows. After running @command{asttable} with @option{--transpose}, you can see how the vector columns have two elements per row (@code{u8(3)} has been replaced by @code{u8(2)}), and that the table now has three rows. @example $ cat in.txt # Column 1: abc [nounits,u8(3),] First vector column. # Column 2: def [nounits,u8(3),] Second vector column. 111 112 113 211 212 213 121 122 123 221 222 223 $ asttable in.txt --transpose -O # Column 1: abc [nounits,u8(2),] First vector column. # Column 2: def [nounits,u8(2),] Second vector column. 111 121 211 221 112 122 212 222 113 123 213 223 @end example @item --fromvector=STR,INT[,INT[,INT]] Extract the given tokens/elements from the given vector column into separate single-valued columns. The input vector column can be identified by its name or counter, see @ref{Selecting table columns}. After the columns are extracted, the input vector is deleted by default. To preserve the input vector column, you can use @option{--keepvectfin} described below. For a complete usage scenario see @ref{Vector columns}. @item --tovector=STR/INT,STR/INT[,STR/INT] Move the given columns into a newly created vector column. The given columns can be identified by their name or counter, see @ref{Selecting table columns}. After the columns are copied, they are deleted by default. To preserve the inputs, you can use @option{--keepvectfin} described below. For a complete usage scenario see @ref{Vector columns}. @item -k @itemx --keepvectfin Do not delete the input column(s) when using @option{--fromvector} or @option{--tovector}. @item -R FITS/TXT @itemx --catrowfile=FITS/TXT Add the rows of the given file to the output table. The selected columns in the tables given to this option should have the same number and datatype and the rows before control reaches this phase (after column selection and column concatenation), for more see @ref{Operation precedence in Table}. For example, if @file{a.fits}, @file{b.fits} and @file{c.fits} have the columns @code{RA}, @code{DEC} and @code{MAGNITUDE} (possibly in different column-numbers in their respective table, along with many more columns), the command below will add their rows into the final output that will only have these three columns: @example $ asttable a.fits --catrowfile=b.fits --catrowhdu=1 \ --catrowfile=c.fits --catrowhdu=1 \ -cRA,DEC,MAGNITUDE --output=allrows.fits @end example @cartouche @cindex Provenance @noindent @strong{Provenance of each row:} When merging rows from separate catalogs, it is important to keep track of the source catalog of each row (its provenance). To do this, you can use @option{--catrowfile} in combination with the @code{constant} operator and @ref{Column arithmetic}. For a working example of this scenario, see the example within the documentation of the @code{constant} operator in @ref{Building new dataset and stack management}. @end cartouche @cartouche @noindent @strong{How to avoid repetition when adding rows:} this option will simply add the rows of multiple tables into one, it does not check their contents! Therefore if you use this option on multiple catalogs that may have some shared physical objects in some of their rows, those rows/objects will be repeated in the final table. In such scenarios, to avoid potential repetition, it is better to use @ref{Match} (with @option{--notmatched} and @option{--outcols=AAA,BBB}) instead of Table. For more on using Match for this scenario, see the description of @option{--outcols} in @ref{Invoking astmatch}. @end cartouche @item -X STR @itemx --catrowhdu=STR The HDU/extension of the FITS file(s) that should be concatenated, or appended, by rows with @option{--catrowfile}. If @option{--catrowfile} is called more than once with more than one FITS file, it is necessary to call this option more than once also (once for every FITS table given to @option{--catrowfile}). The HDUs will be loaded in the same order as the FITS files given to @option{--catrowfile}. @item -O @itemx --colinfoinstdout @cindex Standard output Add column metadata when the output is printed in the standard output. Usually the standard output is used for a fast visual check, or to pipe into other metadata-agnostic programs (like AWK) for further processing. So by default meta-data are not included. But when piping to other Gnuastro programs (where metadata can be interpreted and used) it is recommended to use this option and use column names in the next program. @item -r STR,FLT:FLT @itemx --range=STR,FLT:FLT Only output rows that have a value within the given range in the @code{STR} column (can be a name or counter). Note that the range is only inclusive in the lower-limit. For example, with @code{--range=sn,5:20} the output's columns will only contain rows that have a value in the @code{sn} column (not case-sensitive) that is greater or equal to 5, and less than 20. Also you can use the comma for separating the values such as this @code{--range=sn,5,20}. For the precedence of this operation in relation to others, see @ref{Operation precedence in Table}. This option can be called multiple times (different ranges for different columns) in one run of the Table program. This is very useful for selecting the final rows from multiple criteria/columns. The chosen column does not have to be in the output columns. This is good when you just want to select using one column's values, but do not need that column anymore afterwards. For one example of using this option, see the example under @option{--sigclip-median} in @ref{Invoking aststatistics}. @item --inpolygon=STR1,STR2 Only return rows where the given coordinates are inside the polygon specified by the @option{--polygon} option. The coordinate columns are the given @code{STR1} and @code{STR2} columns, they can be a column name or counter (see @ref{Selecting table columns}). For the precedence of this operation in relation to others, see @ref{Operation precedence in Table}. Note that the chosen columns does not have to be in the output columns (which are specified by the @code{--column} option). For example, if we want to select rows in the polygon specified in @ref{Dataset inspection and cropping}, this option can be used like this (you can remove the double quotations and write them all in one line if you remove the white-spaces around the colon separating the column vertices): @example asttable table.fits --inpolygon=RA,DEC \ --polygon="53.187414,-27.779152 \ : 53.159507,-27.759633 \ : 53.134517,-27.787144 \ : 53.161906,-27.807208" \ @end example @cartouche @noindent @strong{Flat/Euclidean space: } The @option{--inpolygon} option assumes a flat/Euclidean space so it is only correct for RA and Dec when the polygon size is very small like the example above. If your polygon is a degree or larger, it may not return correct results. Please get in touch if you need such a feature (see @ref{Suggest new feature}). @end cartouche @item --outpolygon=STR1,STR2 Only return rows where the given coordinates are outside the polygon specified by the @option{--polygon} option. This option is very similar to the @option{--inpolygon} option, so see the description there for more. @item --polygon=STR @itemx --polygon=FLT,FLT:FLT,FLT:... The polygon to use for the @code{--inpolygon} and @option{--outpolygon} options. This option is parsed in an identical way to the same option in the Crop program, so for more information on how to use it, see @ref{Crop options}. @item -e STR,INT/FLT,... @itemx --equal=STR,INT/FLT,... Only output rows that are equal to the given number(s) in the given column. The first argument is the column identifier (name or number, see @ref{Selecting table columns}), after that you can specify any number of values. For the precedence of this operation in relation to others, see @ref{Operation precedence in Table}. For example, @option{--equal=ID,5,6,8} will only print the rows that have a value of 5, 6, or 8 in the @code{ID} column. This option can also be called multiple times, so @option{--equal=ID,4,5 --equal=ID,6,7} has the same effect as @option{--equal=4,5,6,7}. @cartouche @noindent @strong{Equality and floating point numbers:} Floating point numbers are only approximate values (see @ref{Numeric data types}). In this context, their equality depends on how the input table was originally stored (as a plain text table or as an ASCII/binary FITS table). If you want to select floating point numbers, it is strongly recommended to use the @option{--range} option and set a very small interval around your desired number, do not use @option{--equal} or @option{--notequal}. @end cartouche The @option{--equal} and @option{--notequal} options also work when the given column has a string type. In this case the given value to the option will also be parsed as a string, not as a number. When dealing with string columns, be careful with trailing white space characters (the actual value maybe adjusted to the right, left, or center of the column's width). If you need to account for such white spaces, you can use shell quoting. For example, @code{--equal=NAME," myname "}. @cartouche @noindent @strong{Strings with a comma (,):} When your desired column values contain a comma, you need to put a `@code{\}' before the internal comma (within the value). Otherwise, the comma will be interpreted as a delimiter between multiple values, and anything after it will be interpreted as a separate string. For example, assume column @code{AB} of your @file{table.fits} contains this value: `@code{cd,ef}' in your desired rows. To extract those rows, you should use the command below: @example $ asttable table.fits --equal=AB,cd\,ef @end example @end cartouche @item -n STR,INT/FLT,... @itemx --notequal=STR,INT/FLT,... Only output rows that are @emph{not} equal to the given number(s) in the given column. The first argument is the column identifier (name or number, see @ref{Selecting table columns}), after that you can specify any number of values. For example, @option{--notequal=ID,5,6,8} will only print the rows where the @code{ID} column does not have value of 5, 6, or 8. This option can also be called multiple times, so @option{--notequal=ID,4,5 --notequal=ID,6,7} has the same effect as @option{--notequal=4,5,6,7}. Be very careful if you want to use the non-equality with floating point numbers, see the special note under @option{--equal} for more. This option also works when the given column has a string type, see the description under @option{--equal} (above) for more. @item -b STR[,STR[,STR]] @itemx --noblank=STR[,STR[,STR]] Only output rows that are @emph{not} blank in the given column of the @emph{input} table. Like above, the columns can be specified by their name or number (counting from 1). This option can be called multiple times, so @option{--noblank=MAG --noblank=PHOTOZ} is equivalent to @option{--noblank=MAG,PHOTOZ}. For the precedence of this operation in relation to others, see @ref{Operation precedence in Table}. For example, if @file{table.fits} has blank values (NaN in floating point types) in the @code{magnitude} and @code{sn} columns, with @code{--noblank=magnitude,sn}, the output will not contain any rows with blank values in these two columns. If you want @emph{all} columns to be checked, simply set the value to @code{_all} (in other words: @option{--noblank=_all}). This mode is useful when there are many columns in the table and you want a ``clean'' output table (with no blank values in any column): entering their name or number one-by-one can be buggy and frustrating. In this mode, no other column name should be given. For example, if you give @option{--noblank=_all,magnitude}, then Table will assume that your table actually has a column named @code{_all} and @code{magnitude}, and if it does not, it will abort with an error. If you want to change column values using @ref{Column arithmetic} (and set some to blank, to later remove), or you want to select rows based on columns that you have imported from other tables, you should use the @option{--noblankend} option described below. Also, see @ref{Operation precedence in Table}. @item -s STR @itemx --sort=STR Sort the output rows based on the values in the @code{STR} column (can be a column name or number). By default the sort is done in ascending/increasing order, to sort in a descending order, use @option{--descending}. For the precedence of this operation in relation to others, see @ref{Operation precedence in Table}. The chosen column does not have to be in the output columns. This is good when you just want to sort using one column's values, but do not need that column anymore afterwards. @item -d @itemx --descending When called with @option{--sort}, rows will be sorted in descending order. @item -H INT @itemx --head=INT Only print the given number of rows from the @emph{top} of the final table. Note that this option only affects the @emph{output} table. For example, if you use @option{--sort}, or @option{--range}, the printed rows are the first @emph{after} applying the sort sorting, or selecting a range of the full input. This option cannot be called with @option{--tail}, @option{--rowrange} or @option{--rowrandom}. For the precedence of this operation in relation to others, see @ref{Operation precedence in Table}. @cindex GNU Coreutils If the given value to @option{--head} is 0, the output columns will not have any rows and if it is larger than the number of rows in the input table, all the rows are printed (this option is effectively ignored). This behavior is taken from the @command{head} program in GNU Coreutils. @item -t INT @itemx --tail=INT Only print the given number of rows from the @emph{bottom} of the final table. See @option{--head} for more. This option cannot be called with @option{--head}, @option{--rowrange} or @option{--rowrandom}. @item --rowrange=INT,INT Only return the rows within the requested positional range (inclusive on both sides). Therefore, @code{--rowrange=5,7} will return 3 of the input rows, row 5, 6 and 7. This option will abort if any of the given values is larger than the total number of rows in the table. For the precedence of this operation in relation to others, see @ref{Operation precedence in Table}. With the @option{--head} or @option{--tail} options you can only see the top or bottom few rows. However, with this option, you can limit the returned rows to a contiguous set of rows in the middle of the table. Therefore this option cannot be called with @option{--head}, @option{--tail}, or @option{--rowrandom}. @item --rowrandom=INT @cindex Random row selection @cindex Row selection, by random Select @code{INT} rows from the input table by random (assuming a uniform distribution). This option is applied @emph{after} the value-based selection options (such as @option{--sort}, @option{--range}, and @option{--polygon}). On the other hand, only the row counters are randomly selected, this option does not change the order. Therefore, if @option{--rowrandom} is called together with @option{--sort}, the returned rows are still sorted. This option cannot be called with @option{--head}, @option{--tail}, or @option{--rowrange}. For the precedence of this operation in relation to others, see @ref{Operation precedence in Table}. This option will only have an effect if @code{INT} is larger than the number of rows when it is activated (after the value-based selection options have been applied). When there are fewer rows, a warning is printed, saying that this option has no effect. The warning can be disabled with the @option{--quiet} option. @cindex Reproducibility Due to its nature (to be random), the output of this option differs in each run. Therefore 5 calls to Table with @option{--rowrandom} on the same input table will generate 5 different outputs. If you want a reproducible random selection, set the @code{GSL_RNG_SEED} environment variable and also use the @option{--envseed} option, for more see @ref{Generating random numbers}. @item --envseed Read the random number generator seed from the @code{GSL_RNG_SEED} environment variable for @option{--rowrandom} (instead of generating a different seed internally on every run). This is useful if you want a reproducible random selection of the input rows. For more, see @ref{Generating random numbers}. @item -E STR[,STR[,STR]] @itemx --noblankend=STR[,STR[,STR]] Remove all rows in the requested @emph{output} columns that have a blank value. Like above, the columns can be specified by their name or number (counting from 1). This option can be called multiple times, so @option{--noblank=MAG --noblank=PHOTOZ} is equivalent to @option{--noblank=MAG,PHOTOZ}. For the precedence of this operation in relation to others, see @ref{Operation precedence in Table}. for example, if your final output table (possibly after column arithmetic, or adding new columns) has blank values (NaN in floating point types) in the @code{magnitude} and @code{sn} columns, with @code{--noblankend=magnitude,sn}, the output will not contain any rows with blank values in these two columns. If you want blank values to be removed from the main input table _before_ any further processing (like adding columns, sorting or column arithmetic), you should use the @option{--noblank} option. With the @option{--noblank} option, the column(s) that is(are) given does not necessarily have to be in the output (it is just temporarily used for reading the inputs and selecting rows, but does not necessarily need to be present in the output). However, the column(s) given to this option should exist in the output. If you want @emph{all} columns to be checked, simply set the value to @code{_all} (in other words: @option{--noblankend=_all}). This mode is useful when there are many columns in the table and you want a ``clean'' output table (with no blank values in any column): entering their name or number one-by-one can be buggy and frustrating. In this mode, no other column name should be given. For example, if you give @option{--noblankend=_all,magnitude}, then Table will assume that your table actually has a column named @code{_all} and @code{magnitude}, and if it does not, it will abort with an error. This option is applied just before writing the final table (after @option{--colmetadata} has finished). So in case you changed the column metadata, or added new columns, you can use the new names, or the newly defined column numbers. For the precedence of this operation in relation to others, see @ref{Operation precedence in Table}. @item -m STR/INT,STR[,STR[,STR]] @itemx --colmetadata=STR/INT,STR[,STR[,STR]] Update the specified column metadata in the output table. This option is applied after all other column-related operations are complete, for example, column arithmetic, or column concatenation. For the precedence of this operation in relation to others, see @ref{Operation precedence in Table}. The first value (before the first comma) given to this option is the column's identifier. It can either be a counter (positive integer, counting from 1), or a name (the column's name in the output if this option was not called). After the to-be-updated column is identified, at least one other string should be given, with a maximum of three strings. The first string after the original name will the selected column's new name. The next (optional) string will be the selected column's unit and the third (optional) will be its comments. If the two optional strings are not given, the original column's units or comments will remain unchanged. If any of the values contains a comma, you should place a `@code{\}' before the comma to avoid it getting confused with a delimiter. For example, see the command below for a column description that contains a comma: @example $ asttable table.fits \ --colmetadata=NAME,UNIT,"Comments\, with a comma" @end example Generally, since the comma is commonly used as a delimiter in many scenarios, to avoid complicating your future analysis with the table, it is best to avoid using a comma in the column name and units. Some examples of this option are available in the tutorials, in particular @ref{Working with catalogs estimating colors}. Here are some more specific examples: @table @option @item --colmetadata=MAGNITUDE,MAG_F160W This will convert name of the original @code{MAGNITUDE} column to @code{MAG_F160W}, leaving the unit and comments unchanged. @item --colmetadata=3,MAG_F160W,mag This will convert name of the third column of the final output to @code{MAG_F160W} and the units to @code{mag}, while leaving the comments untouched. @item --colmetadata=MAGNITUDE,MAG_F160W,mag,"Magnitude in F160W filter" This will convert name of the original @code{MAGNITUDE} column to @code{MAG_F160W}, and the units to @code{mag} and the comments to @code{Magnitude in F160W filter}. Note the double quotations around the comment string, they are necessary to preserve the white-space characters within the column comment from the command-line, into the program (otherwise, upon reaching a white-space character, the shell will consider this option to be finished and cause un-expected behavior). @end table If your table is large and generated by a script, you can first do all your operations on your table's data and write it into a temporary file (maybe called @file{temp.fits}). Then, look into that file's metadata (with @command{asttable temp.fits -i}) to see the exact column positions and possible names, then add the necessary calls to this option to your previous call to @command{asttable}, so it writes proper metadata in the same run (for example, in a script or Makefile). Recall that when a name is given, this option will update the metadata of the first column that matches, so if you have multiple columns with the same name, you can call this options multiple times with the same first argument to change them all to different names. Finally, if you already have a FITS table by other means (for example, by downloading) and you merely want to update the column metadata and leave the data intact, it is much more efficient to directly modify the respective FITS header keywords with @code{astfits}, using the keyword manipulation features described in @ref{Keyword inspection and manipulation}. @option{--colmetadata} is mainly intended for scenarios where you want to edit the data so it will always load the full/partial dataset into memory, then write out the resulting datasets with updated/corrected metadata. @item -f STR @itemx --txtf32format=STR The plain-text format of 32-bit floating point columns when output is not binary (this option is ignored for binary outputs like FITS tables, see @ref{Printing floating point numbers}). The acceptable values are listed below. This is just the format of the plain-text outputs; see @option{--txtf32precision} for customizing their precision. @table @code @item fixed Fixed-point notation (for example @code{123.4567}). @item exp Exponential notation (for example @code{1.234567e+02}). @end table The default mode is @code{exp} since it is the most generic and will not cause any loss of data. Be very cautious if you set it to @code{fixed}. As a rule of thumb, the fixed-point notation is only good if the numbers are larger than 1.0, but not too large! Given that the total number of accurate decimal digits is fixed the more digits you have on the left of the decimal point (integer part), the more un-accurate digits will be printed on the right of the decimal point. @item -p STR @itemx --txtf32precision=INT Number of digits after (to the right side of) the decimal point (precision) for columns with a 32-bit floating point datatype (this option is ignored for binary outputs like FITS tables, see @ref{Printing floating point numbers}). This can take any positive integer (including 0). When given a value of zero, the floating point number will be rounded to the nearest integer. @cindex IEEE 754 The default value to this option is 6. This is because according to IEEE 754, 32-bit floating point numbers can be accurately presented to 7.22 decimal digits (see @ref{Printing floating point numbers}). Since we only have an integer number of digits in a number, we'll round it to 7 decimal digits. Furthermore, the precision is only defined to the right side of the decimal point. In exponential notation (default of @option{--txtf32format}), one decimal digit will be printed on the left of the decimal point. So the default value to this option is @mymath{7-1=6}. @item -A STR @itemx --txtf64format=STR The plain-text format of 64-bit floating point columns when output is not binary (this option is ignored for binary outputs like FITS tables, see @ref{Printing floating point numbers}). The acceptable values are listed below. This is just the format of the plain-text outputs; see @option{--txtf64precision} for customizing their precision. @table @code @item fixed Fixed-point notation (for example @code{12345.6789012345}). @item exp Exponential notation (for example @code{1.23456789012345e4}). @end table The default mode is @code{exp} since it is the most generic and will not cause any loss of data. Be very cautious if you set it to @code{fixed}. As a rule of thumb, the fixed-point notation is only good if the numbers are larger than 1.0, but not too large! Given that the total number of accurate decimal digits is fixed the more digits you have on the left of the decimal point (integer part), the more un-accurate digits will be printed on the right of the decimal point. @item -B STR @itemx --txtf64precision=INT Number of digits after the decimal point (precision) for columns with a 64-bit floating point datatype (this option is ignored for binary outputs like FITS tables, see @ref{Printing floating point numbers}). This can take any positive integer (including 0). When given a value of zero, the floating point number will be rounded to the nearest integer. @cindex IEEE 754 The default value to this option is 15. This is because according to IEEE 754, 64-bit floating point numbers can be accurately presented to 15.95 decimal digits (see @ref{Printing floating point numbers}). Since we only have an integer number of digits in a number, we'll round it to 16 decimal digits. Furthermore, the precision is only defined to the right side of the decimal point. In exponential notation (default of @option{--txtf64format}), one decimal digit will be printed on the left of the decimal point. So the default value to this option is @mymath{16-1=15}. @item -Y @itemx --txteasy When output is a plain-text file or just gets printed on standard output (the terminal), all floating point columns are printed in fixed point notation (as in @code{123.456}) instead of the default exponential notation (as in @code{1.23456e+02}). For 32-bit floating points, this option will use a precision of 3 digits (see @option{--txtf32precision}) and for 64-bit floating points use a precision of 6 digits (see @option{--txtf64precision}). This can be useful for human readability, but be careful with some scenarios (for example @code{1.23e-120}, which will show only as @code{0.0}!). When this option is called any value given the following options is ignored: @option{--txtf32format}, @option{--txtf32precision}, @option{--txtf64format} and @option{--txtf64precision}. For example below you can see the output of table with and without this option: @example $ asttable table.fits --head=5 -O # Column 1: OBJNAME [name ,str23, ] Name in HyperLeda. # Column 2: RAJ2000 [deg ,f64 , ] Right Ascension. # Column 3: DEJ2000 [deg ,f64 , ] Declination. # Column 4: RADIUS [arcmin,f32 , ] Major axis radius. NGC0884 2.3736267000000e+00 5.7138753300000e+01 8.994357e+00 NGC1629 4.4935191000000e+00 -7.1838322400000e+01 5.000000e-01 NGC1673 4.7109672000000e+00 -6.9820892700000e+01 3.499210e-01 NGC1842 5.1216920000000e+00 -6.7273195300000e+01 3.999171e-01 $ asttable table.fits --head=5 -O -Y # Column 1: OBJNAME [name ,str23, ] Name in HyperLeda. # Column 2: RAJ2000 [deg ,f64 , ] Right Ascension. # Column 3: DEJ2000 [deg ,f64 , ] Declination. # Column 4: RADIUS [arcmin,f32 , ] Major axis radius. NGC0884 2.373627 57.138753 8.994 NGC1629 4.493519 -71.838322 0.500 NGC1673 4.710967 -69.820893 0.350 NGC1842 5.121692 -67.273195 0.400 @end example This is also useful when you want to make outputs of other programs more ``easy'' to read, for example: @example $ echo 123.45678 | asttable 1.234567800000000e+02 $ echo 123.45678 | asttable -Y 123.456780 @end example @cartouche @noindent @strong{Can result in loss of information}: be very careful with this option! It can loose precision or generally the full value if the value is not within a "good" range like this example. Such cases are the reason that this is not the default format of plain-text outputs. @example $ echo 123.4e-9 | asttable -Y 0.000000 @end example @end cartouche @end table @node Query, , Table, Data containers @section Query @cindex IVOA @cindex Query @cindex TAP (Table Access Protocol) @cindex ADQL (Astronomical Data Query Language) @cindex Astronomical Data Query Language (ADQL) There are many astronomical databases available for downloading astronomical data. Most follow the International Virtual Observatory Alliance (IVOA, @url{https://ivoa.net}) standards (and in particular the Table Access Protocol, or TAP@footnote{@url{https://ivoa.net/documents/TAP}}). With TAP, it is possible to submit your queries via a command-line downloader (for example, @command{curl}) to only get specific tables, targets (rows in a table) or measurements (columns in a table): you do not have to download the full table (which can be very large in some cases)! These customizations are done through the Astronomical Data Query Language (ADQL@footnote{@url{https://ivoa.net/documents/ADQL}}). Therefore, if you are sufficiently familiar with TAP and ADQL, you can easily custom-download any part of an online dataset. However, you also need to keep a record of the URLs of each database and in many cases, the commands will become long and hard/buggy to type on the command-line. On the other hand, most astronomers do not know TAP or ADQL at all, and are forced to go to the database's web page which is slow (it needs to download so many images, and has too much annoying information), requires manual interaction (further making it slow and buggy), and cannot be automated. Gnuastro's Query program is designed to be the middle-man in this process: it provides a simple high-level interface to let you specify your constraints on what you want to download. It then internally constructs the command to download the data based on your inputs and runs it to download your desired data. Query also prints the full command before it executes it (if not called with @option{--quiet}). Also, if you ask for a FITS output table, the full command is written into its 0-th extension along with other input parameters to query (all Gnuastro programs generally keep their input configuration parameters as FITS keywords in the zero-th output). You can see it with Gnuastro's Fits program, like below: @example $ astfits query-output.fits -h0 @end example With the full command used to download the dataset, you only need a minimal knowledge of ADQL to do lower-level customizations on your downloaded dataset. You can simply copy that command and change the parts of the query string you want: ADQL is very powerful! For example, you can ask the server to do mathematical operations on the columns and apply selections after those operations, or combine/match multiple datasets. We will try to add high-level interfaces for such capabilities, but generally, do not limit yourself to the high-level operations (that cannot cover everything!). @menu * Available databases:: List of available databases to Query. * Invoking astquery:: Inputs, outputs and configuration of Query. @end menu @node Available databases, Invoking astquery, Query, Query @subsection Available databases The current list of databases supported by Query are listed at the end of this section. To get the list of available datasets within each database, you can use the @option{--information} option. for example, with the command below you can get a list of the roughly 100 datasets that are available within the ESA Gaia server with their description: @example $ astquery gaia --information @end example @noindent However, other databases like VizieR host many more datasets (tens of thousands!). Therefore it is very inconvenient to get the @emph{full} information every time you want to find your dataset of interest (the full metadata file VizieR is more than 20Mb). In such cases, you can limit the downloaded and displayed information with the @code{--limitinfo} option. For example, with the first command below, you can get all datasets relating to the MUSE (an instrument on the Very Large Telescope), and those that include Roland Bacon (Principle Investigator of MUSE) as an author (@code{Bacon, R.}). Recall that @option{-i} is the short format of @option{--information}. @example $ astquery vizier -i --limitinfo=MUSE $ astquery vizier -i --limitinfo="Bacon R." @end example Once you find the recognized name of your desired dataset, you can see the column information of that dataset with adding the dataset name. For example, with the command below you can see the column metadata in the @code{J/A+A/608/A2/udf10} dataset (one of the datasets in the search above) using this command: @example $ astquery vizier --dataset=J/A+A/608/A2/udf10 -i @end example @cindex SDSS DR12 For very popular datasets of a database, Query provides an easier-to-remember short name that you can feed to @option{--dataset}. This short name will map to the officially recognized name of the dataset on the server. In this mode, Query will also set positional columns accordingly. For example, most VizieR datasets have an @code{RAJ2000} column (the RA and the epoch of 2000) so it is the default RA column name for coordinate search (using @option{--center} or @option{--overlapwith}). However, some datasets do not have this column (for example, SDSS DR12). So when you use the short name and Query knows about this dataset, it will internally set the coordinate columns that SDSS DR12 has: @code{RA_ICRS} and @code{DEC_ICRS}. Recall that you can always change the coordinate columns with @option{--ccol}. For example, in the VizieR and Gaia databases, the recognized name for data release 3 data is respectively @code{I/355/gaiadr3} and @code{gaiadr3.gaia_source}. These technical names are hard to remember. Therefore Query provides @code{gaiadr3} (for VizieR) and @code{dr3} (for ESA's Gaia database) shortcuts which you can give to @option{--dataset} instead. They will be internally mapped to the fully recognized name by Query. In the list below that describes the available databases, the available short names, that are recognized for each, are also listed. @cartouche @noindent @strong{Not all datasets support TAP:} Large databases like VizieR have TAP access for all their datasets. However, smaller databases have not implemented TAP for all their tables. Therefore some datasets that are searchable in their web interface may not be available for a TAP search. To see the full list of TAP-ed datasets in a database, use the @option{--information} (or @option{-i}) option with the dataset name like the command below. @example $ astquery astron -i @end example @noindent If your desired dataset is not in this list, but has web-access, contact the database maintainers and ask them to add TAP access for it. After they do it, you should see the name added to the output list of the command above. @end cartouche The list of databases recognized by Query (and their names in Query) is described below. Since Query is a new member of the Gnuastro family (first available in Gnuastro 0.14), this list will hopefully grow significantly in the next releases. If you have any particular datasets in mind, please let us know by sending an email to @code{bug-gnuastro@@gnu.org}. If the dataset supports IVOA's TAP (Table Access Protocol), it should be very easy to add. @table @code @item astron @cindex ASTRON @cindex Radio astronomy The ASTRON Virtual Observatory service (@url{https://vo.astron.nl}) is a database focused on radio astronomy data and images, primarily those collected by ASTRON itself. A query to @code{astron} is submitted to @code{https://vo.astron.nl/__system__/tap/run/tap/sync}. Here is the list of short names for dataset(s) in ASTRON's VO service: @itemize @item @code{tgssadr --> tgssadr.main} @end itemize @item gaia @cindex Gaia catalog @cindex Catalog, Gaia @cindex Database, Gaia The Gaia project (@url{https://www.cosmos.esa.int/web/gaia}) database which is a large collection of star positions on the celestial sphere, as well as peculiar velocities, parallaxes and magnitudes in some bands among many others. Besides scientific studies (like studying resolved stellar populations in the Galaxy and its halo), Gaia is also invaluable for raw data calibrations, like astrometry. A query to @code{gaia} is submitted to @code{https://gea.esac.esa.int/tap-server/tap/sync}. Here is the list of short names for popular datasets within Gaia: @itemize @item @code{dr3 --> gaiadr3.gaia_source} @item @code{edr3 --> gaiaedr3.gaia_source} @item @code{dr2 --> gaiadr2.gaia_source} @item @code{dr1 --> gaiadr1.gaia_source} @item @code{tycho2 --> public.tycho2} @item @code{hipparcos --> public.hipparcos} @end itemize @item ned @cindex NASA/IPAC Extragalactic Database (NED) @cindex NED (NASA/IPAC Extragalactic Database) The NASA/IPAC Extragalactic Database (NED, @url{http://ned.ipac.caltech.edu}) is a fusion database, integrating the information about extra-galactic sources from many large sky surveys into a single catalog. It covers the full spectrum, from Gamma rays to radio frequencies and is updated when new data arrives. A TAP query to @code{ned} is submitted to @code{https://ned.ipac.caltech.edu/tap/sync}. @itemize @item @code{objdir --> NEDTAP.objdir}: default TAP-based dataset in NED. @item @cindex VOTable @code{extinction}: A command-line interface to the @url{https://ned.ipac.caltech.edu/extinction_calculator, NED Extinction Calculator}. It only takes a central coordinate and returns a VOTable of the calculated extinction in many commonly used filters at that point. As a result, options like @option{--width} or @option{--radius} are not supported. However, Gnuastro does not yet support the VOTable format. Therefore, if you specify an @option{--output} file, it should have an @file{.xml} suffix and the downloaded file will not be checked. Until VOTable support is added to Gnuastro, you can use GREP, AWK and SED to convert the VOTable data into a FITS table with a command like below (assuming the queried VOTable is called @file{ned-extinction.xml}): @verbatim grep '^<TR><TD>' ned-extinction.xml \ | sed -e's|<TR><TD>||' \ -e's|</TD></TR>||' \ -e's|</TD><TD>|@|g' \ | awk 'BEGIN{FS="@"; \ print "# Column 1: FILTER [name,str15] Filter name"; \ print "# Column 2: CENTRAL [um,f32] Central Wavelength"; \ print "# Column 3: EXTINCTION [mag,f32] Galactic Ext."; \ print "# Column 4: ADS_REF [ref,str50] ADS reference"} \ {printf "%-15s %g %g %s\n", $1, $2, $3, $4}' \ | asttable -oned-extinction.fits @end verbatim Once the table is in FITS, you can easily get the extinction for a certain filter (for example, the @code{SDSS r} filter) like the command below: @example asttable ned-extinction.fits --equal=FILTER,"SDSS r" \ -cEXTINCTION @end example @end itemize @item vizier @cindex VizieR @cindex CDS, VizieR @cindex Catalog, Vizier @cindex Database, VizieR Vizier (@url{https://vizier.u-strasbg.fr}) is arguably the largest catalog database in astronomy: containing more than 20500 catalogs as of mid January 2021. Almost all published catalogs in major projects, and even the tables in many papers are archived and accessible here. For example, VizieR also has a full copy of the Gaia database mentioned below, with some additional standardized columns (like RA and Dec in J2000). The current implementation of @option{--limitinfo} only looks into the description of the datasets, but since VizieR is so large, there is still a lot of room for improvement. Until then, if @option{--limitinfo} is not sufficient, you can use VizieR's own web-based search for your desired dataset: @url{http://cdsarc.u-strasbg.fr/viz-bin/cat} Because VizieR curates such a diverse set of data from tens of thousands of projects and aims for interoperability between them, the column names in VizieR may not be identical to the column names in the surveys' own databases (Gaia in the example above). A query to @code{vizier} is submitted to @code{http://tapvizier.u-strasbg.fr/TAPVizieR/tap/sync}. @cindex 2MASS All-Sky Catalog @cindex AKARI/FIS All-Sky Survey @cindex AllWISE Data Release @cindex AAVSO Photometric All Sky Survey, DR9 @cindex CatWISE 2020 catalog @cindex Dark Energy Survey data release 1 @cindex GAIA Data Release (2 or 3) @cindex All-sky Survey of GALEX DR5 @cindex Naval Observatory Merged Astrometric Dataset @cindex Pan-STARRS Data Release 1 @cindex SDSS Photometric Catalogue, Release 12 @cindex Whole-Sky USNO-B1.0 Catalog @cindex U.S. Naval Observatory CCD Astrograph Catalog @cindex Band-merged unWISE Catalog @cindex WISE All-Sky data Release Here is the list of short names for popular datasets within VizieR (sorted alphabetically by their short name). Please feel free to suggest other major catalogs (covering a wide area or commonly used in your field).. For details on each dataset with necessary citations, and links to web pages, look into their details with their ViziR names in @url{https://vizier.u-strasbg.fr/viz-bin/VizieR}. @itemize @item @code{2mass --> II/246/out} (2MASS All-Sky Catalog) @item @code{akarifis --> II/298/fis} (AKARI/FIS All-Sky Survey) @item @code{allwise --> II/328/allwise} (AllWISE Data Release) @item @code{apass9 --> II/336/apass9} (AAVSO Photometric All Sky Survey, DR9) @item @code{catwise --> II/365/catwise} (CatWISE 2020 catalog) @item @code{des1 --> II/357/des_dr1} (Dark Energy Survey data release 1) @item @code{gaiadr3 --> I/355/gaiadr3} (GAIA Data Release 3) @item @code{gaiaedr3 --> I/350/gaiadr3} (GAIA Early Data Release 3) @item @code{gaiadr2 --> I/345/gaia2} (GAIA Data Release 2) @item @code{galex5 --> II/312/ais} (All-sky Survey of GALEX DR5) @item @code{nomad --> I/297/out} (Naval Observatory Merged Astrometric Dataset) @item @code{panstarrs1 --> II/349/ps1} (Pan-STARRS Data Release 1). @item @code{ppmxl --> I/317/sample} (Positions and proper motions on the ICRS) @item @code{sdss12 --> V/147/sdss12} (SDSS Photometric Catalogue, Release 12) @item @code{usnob1 --> I/284/out} (Whole-Sky USNO-B1.0 Catalog) @item @code{ucac5 --> I/340/ucac5} (5th U.S. Naval Obs. CCD Astrograph Catalog) @item @code{unwise --> II/363/unwise} (Band-merged unWISE Catalog) @item @code{wise --> II/311/wise} (WISE All-Sky data Release) @end itemize @end table @node Invoking astquery, , Available databases, Query @subsection Invoking Query Query provides a high-level interface to downloading subsets of data from databases. The executable name is @file{astquery} with the following general template @example $ astquery DATABASE-NAME [OPTION...] ... @end example @noindent One line examples: @example ## Information about all datasets in ESA's GAIA database: $ astquery gaia --information ## Only show catalogs in VizieR that have 'MUSE' in their ## description. The '-i' is short for '--information'. $ astquery vizier -i --limitinfo=MUSE ## List of columns in 'J/A+A/608/A2/udf10' (one of the above). $ astquery vizier --dataset=J/A+A/608/A2/udf10 -i ## ID, RA and Dec of all Gaia sources within an image. $ astquery gaia --dataset=dr3 --overlapwith=image.fits \ -csource_id,ra,dec ## RA, Dec and Spectroscopic redshifts of objects in SDSS DR12 ## spectroscopic redshift that overlap with 'image.fits'. $ astquery vizier --dataset=sdss12 --overlapwith=image.fits \ -cRA_ICRS,DE_ICRS,zsp --range=zsp,1e-10,inf ## All columns of all entries in the Gaia DR3 catalog (hosted at ## VizieR) within 1 arc-minute of the given coordinate. $ astquery vizier --dataset=gaiadr3 --output=my-gaia.fits \ --center=113.8729761,31.9027152 --radius=1/60 \ ## Similar to above, but only ID, RA and Dec columns for objects with ## magnitude range 10 to 15. In VizieR, this column is called 'Gmag'. ## Also, using sexagesimal coordinates instead of degrees for center. $ astquery vizier --dataset=gaiadr3 --output=my-gaia.fits \ --center=07h35m29.51,31d54m9.77 --radius=1/60 \ --range=Gmag,10:15 -cDR3Name,RAJ2000,DEJ2000 @end example Query takes a single argument which is the name of the database. For the full list of available databases and accessing them, see @ref{Available databases}. There are two methods to query the databases, each is more fully discussed in its option's description below. @itemize @item @strong{Low-level:} With @option{--query} you can directly give a raw query statement that is recognized by the database. This is very low level and will require a good knowledge of the database's query language, but of course, it is much more powerful. If this option is given, the raw string is directly passed to the server and all other constraints/options (for Query's high-level interface) are ignored. @item @strong{High-level:} With the high-level options (like @option{--column}, @option{--center}, @option{--radius}, @option{--range} and other constraining options below), the low-level query will be constructed automatically for the particular database. This method is only limited to the generic capabilities that Query provides for all servers. So @option{--query} is more powerful, however, in this mode, you do not need any knowledge of the database's query language. You can see the internally generated query on the terminal (if @option{--quiet} is not used) or in the 0-th extension of the output (if it is a FITS file). This full command contains the internally generated query. @end itemize The name of the downloaded output file can be set with @option{--output}. The requested output format can have any of the @ref{Recognized table formats} (currently @file{.txt} or @file{.fits}). Like all Gnuastro programs, if the output is a FITS file, the zero-th/first HDU of the output will contain all the command-line options given to Query as well as the full command used to access the server. When @option{--output} is not set, the output name will be in the format of @file{NAME-STRING.fits}, where @file{NAME} is the name of the database and @file{STRING} is a randomly selected 6-character set of numbers and alphabetic characters. With this feature, a second run of @command{astquery} that is not called with @option{--output} will not over-write an already downloaded one. Generally, when calling Query more than once, it is recommended to set an output name for each call based on your project's context. The outputs of Query will have a common output format, irrespective of the used database. To achieve this, Query will ask the databases to provide a FITS table output (for larger tables, FITS can consume much less download volume). After downloading is complete, the raw downloaded file will be read into memory once by Query, and written into the file given to @option{--output}. The raw downloaded file will be deleted by default, but can be preserved with the @option{--keeprawdownload} option. This strategy avoids unnecessary surprises depending on database. For example, some databases can download a compressed FITS table, even though we ask for FITS. But with the strategy above, the final output will be an uncompressed FITS file. The metadata that is added by Query (including the full download command) is also very useful for future usage of the downloaded data. Unfortunately many databases do not write the input queries into their generated tables. @table @option @item --dry-run Only print the final download command to contact the server, do not actually run it. This option is good when you want to check the finally constructed query or download options given to the download program. You may also want to use the constructed command as a base to do further customizations on it and run it yourself. @item -k @itemx --keeprawdownload Do not delete the raw downloaded file from the database. The name of the raw download will have a @file{OUTPUT-raw-download.fits} format. Where @file{OUTPUT} is either the base-name of the final output file (without a suffix). @item -i @itemx --information Print the information of all datasets (tables) within a database or all columns within a database. When @option{--dataset} is specified, the latter mode (all column information) is downloaded and printed and when it is not defined, all dataset information (within the database) is printed. Some databases (like VizieR) contain tens of thousands of datasets, so you can limit the downloaded and printed information for available databases with the @option{--limitinfo} option (described below). Dataset descriptions are often large and contain a lot of text (unlike column descriptions). Therefore when printing the information of all datasets within a database, the information (e.g., database name) will be printed on separate lines before the description. However, when printing column information, the output has the same format as a similar option in Table (see @ref{Invoking asttable}). Important note to consider: the printed order of the datasets or columns is just for displaying in the printed output. You cannot ask for datasets or columns based on the printed order, you need to use dataset or column names. @item -L STR @itemx --limitinfo=STR Limit the information that is downloaded and displayed (with @option{--information}) to those that have the string given to this option in their description. Note that @emph{this is case-sensitive}. This option is only relevant when @option{--information} is also called. Databases may have thousands (or tens of thousands) of datasets. Therefore just the metadata (information) to show with @option{--information} can be tens of megabytes (for example, the full VizieR metadata file is about 23Mb as of January 2021). Once downloaded, it can also be hard to parse manually. With @option{--limitinfo}, only the metadata of datasets that contain this string @emph{in their description} will be downloaded and displayed, greatly improving the speed of finding your desired dataset. @item -Q "STR" @itemx --query="STR" Directly specify the query to be passed onto the database. The queries will generally contain space and other meta-characters, so we recommend placing the query within quotations. @item -s STR @itemx --dataset=STR The dataset to query within the database (not compatible with @option{--query}). This option is mandatory when @option{--query} or @option{--information} are not provided. You can see the list of available datasets within a database using @option{--information} (possibly supplemented by @option{--limitinfo}). The output of @option{--information} will contain the recognized name of the datasets within that database. You can pass the recognized name directly to this option. For more on finding and using your desired database, see @ref{Available databases}. @item -c STR @itemx --column=STR[,STR[,...]] The column name(s) to retrieve from the dataset in the given order (not compatible with @option{--query}). If not given, all the dataset's columns for the selected rows will be queried (which can be large!). This option can take multiple values in one instance (for example, @option{--column=ra,dec,mag}), or in multiple instances (for example, @option{-cra -cdec -cmag}), or mixed (for example, @option{-cra,dec -cmag}). In case, you do not know the full list of the dataset's column names a-priori, and you do not want to download all the columns (which can greatly decrease your download speed), you can use the @option{--information} option combined with the @option{--dataset} option, see @ref{Available databases}. @item -H INT @itemx --head=INT Only ask for the first @code{INT} rows of the finally selected columns, not all the rows. This can be good when your search can result a large dataset, but before downloading the full volume, you want to see the top rows and get a feeling of what the whole dataset looks like. @item -v FITS @itemx --overlapwith=FITS File name of FITS file containing an image (in the HDU given by @option{--hdu}) to use for identifying the region to query in the give database and dataset. Based on the image's WCS and pixel size, the sky coverage of the image is estimated and values to the @option{--center}, @option{--width} will be calculated internally. Hence this option cannot be used with @code{--center}, @code{--width} or @code{--radius}. Also, since it internally generates the query, it cannot be used with @code{--query}. Note that if the image has WCS distortions and the reference point for the WCS is not within the image, the WCS will not be well-defined. Therefore the resulting catalog may not overlap, or correspond to a larger/small area in the sky. @item -C FLT,FLT @itemx --center=FLT,FLT The spatial center position (mostly RA and Dec) to use for the automatically generated query (not compatible with @option{--query}). The comma-separated values can either be in degrees (a single number), or sexagesimal (@code{_h_m_} for RA, @code{_d_m_} for Dec, or @code{_:_:_} for both). The given values will be compared to two columns in the database to find/return rows within a certain region around this center position will be requested and downloaded. Pre-defined RA and Dec column names are defined in Query for every database, however you can use @option{--ccol} to select other columns to use instead. The region can either be a circle and the point (configured with @option{--radius}) or a box/rectangle around the point (configured with @option{--width}). @item --ccol=STR,STR The name of the coordinate-columns in the dataset to compare with the values given to @option{--center}. Query will use its internal defaults for each dataset (for example, @code{RAJ2000} and @code{DEJ2000} for VizieR data). But each dataset is treated separately and it is not guaranteed that these columns exist in all datasets. Also, more than one coordinate system/epoch may be present in a dataset and you can use this option to construct your spatial constraint based on the others coordinate systems/epochs. @item -r FLT @itemx --radius=FLT The radius about the requested center to use for the automatically generated query (not compatible with @option{--query}). The radius is in units of degrees, but you can use simple division with this option directly on the command-line. For example, if you want a radius of 20 arc-minutes or 20 arc-seconds, you can use @option{--radius=20/60} or @option{--radius=20/3600} respectively (which is much more human-friendly than @code{0.3333} or @code{0.005556}). @item -w FLT[,FLT] @itemx --width=FLT[,FLT] The square (or rectangle) side length (width) about the requested center to use for the automatically generated query (not compatible with @option{--query}). If only one value is given to @code{--width} the region will be a square, but if two values are given, the widths of the query box along each dimension will be different. The value(s) is (are) in the same units as the coordinate column (see @option{--ccol}, usually RA and Dec which are degrees). You can use simple division for each value directly on the command-line if you want relatively small (and more human-friendly) sizes. For example, if you want your box to be 1 arc-minutes along the RA and 2 arc-minutes along Dec, you can use @option{--width=1/60,2/60}. @item -g STR,FLT,FLT @itemx --range=STR,FLT,FLT The column name and numerical range (inclusive) of acceptable values in that column (not compatible with @option{--query}). This option can be called multiple times for applying range limits on many columns in one call (thus greatly reducing the download size). For example, when used on the ESA gaia database, you can use @code{--range=phot_g_mean_mag,10:15} to only get rows that have a value between 10 and 15 (inclusive on both sides) in the @code{phot_g_mean_mag} column. If you want all rows larger, or smaller, than a certain number, you can use @code{inf}, or @code{-inf} as the first or second values respectively. For example, if you want objects with SDSS spectroscopic redshifts larger than 2 (from the VizieR @code{sdss12} database), you can use @option{--range=zsp,2,inf} If you want the interval to not be inclusive on both sides, you can run @code{astquery} once and get the command that it executes. Then you can edit it to be non-inclusive on your desired side. @item -b STR[,STR] @item --noblank=STR[,STR] Only ask for rows that do not have a blank value in the @code{STR} column. This option can be called many times, and each call can have multiple column names (separated by a comma or @key{,}). For example, if you want the retrieved rows to not have a blank value in columns @code{A}, @code{B}, @code{C} and @code{D}, you can use @command{--noblank=A -bB,C,D}. @item --sort=STR[,STR] Ask for the server to sort the downloaded data based on the given columns. For example, let's assume your desired catalog has column @code{Z} for redshift and column @code{MAG_R} for magnitude in the R band. When you call @option{--sort=Z,MAG_R}, it will primarily sort the columns based on the redshift, but if two objects have the same redshift, they will be sorted by magnitude. You can add as many columns as you like for higher-level sorting. @end table @node Data manipulation, Data analysis, Data containers, Top @chapter Data manipulation Images are one of the major formats of data that is used in astronomy. The functions in this chapter explain the GNU Astronomy Utilities which are provided for their manipulation. For example, cropping out a part of a larger image or convolving the image with a given kernel or applying a transformation to it. @menu * Crop:: Crop region(s) from a dataset. * Arithmetic:: Arithmetic on input data. * Convolve:: Convolve an image with a kernel. * Warp:: Warp/Transform an image to a different grid. @end menu @node Crop, Arithmetic, Data manipulation, Data manipulation @section Crop @cindex Section of an image @cindex Crop part of image @cindex Postage stamp images @cindex Large astronomical images @pindex @r{Crop (}astcrop@r{)} Astronomical images are often very large, filled with thousands of galaxies. It often happens that you only want a section of the image, or you have a catalog of sources and you want to visually analyze them in small postage stamps. Crop is made to do all these things. When more than one crop is required, Crop will divide the crops between multiple threads to significantly reduce the run time. @cindex Mosaicing @cindex Image tiles @cindex Image mosaic @cindex COSMOS survey @cindex Imaging surveys @cindex Hubble Space Telescope (HST) Astronomical surveys are usually extremely large. So large in fact, that the whole survey will not fit into a reasonably sized file. Because of this, surveys usually cut the final image into separate tiles and store each tile in a file. For example, the COSMOS survey's Hubble space telescope, ACS F814W image consists of 81 separate FITS images, with each one having a volume of 1.7 Gigabytes. @cindex Stitch multiple images Even though the tile sizes are chosen to be large enough that too many galaxies/targets do not fall on the edges of the tiles, inevitably some do. So when you simply crop the image of such targets from one tile, you will miss a large area of the surrounding sky (which is essential in estimating the noise). Therefore in its WCS mode, Crop will stitch parts of the tiles that are relevant for a target (with the given width) from all the input images that cover that region into the output. Of course, the tiles have to be present in the list of input files. Besides cropping postage stamps around certain coordinates, Crop can also crop arbitrary polygons from an image (or a set of tiles by stitching the relevant parts of different tiles within the polygon), see @option{--polygon} in @ref{Invoking astcrop}. Alternatively, it can crop out rectangular regions through the @option{--section} option from one image, see @ref{Crop section syntax}. @menu * Crop modes:: Basic modes to define crop region. * Crop section syntax:: How to define a section to crop. * Blank pixels:: Pixels with no value. * Invoking astcrop:: Calling Crop on the command-line @end menu @node Crop modes, Crop section syntax, Crop, Crop @subsection Crop modes In order to be comprehensive, intuitive, and easy to use, there are two ways to define the crop: @enumerate @item From its center and side length. For example, if you already know the coordinates of an object and want to inspect it in an image or to generate postage stamps of a catalog containing many such coordinates. @item The vertices of the crop region, this can be useful for larger crops over many targets, for example, to crop out a uniformly deep, or contiguous, region of a large survey. @end enumerate Irrespective of how the crop region is defined, the coordinates to define the crop can be in Image (pixel) or World Coordinate System (WCS) standards. All coordinates are read as floating point numbers (not integers, except for the @option{--section} option, see below). By setting the @emph{mode} in Crop, you define the standard that the given coordinates must be interpreted. Here, the different ways to specify the crop region are discussed within each standard. For the full list options, please see @ref{Invoking astcrop}. When the crop is defined by its center, the respective (integer) central pixel position will be found internally according to the FITS standard. To have this pixel positioned in the center of the cropped region, the final cropped region will have an add number of pixels (even if you give an even number to @option{--width} in image mode). Furthermore, when the crop is defined as by its center, Crop allows you to only keep crops what do not have any blank pixels in the vicinity of their center (your primary target). This can be very convenient when your input catalog/coordinates originated from another survey/filter which is not fully covered by your input image, to learn more about this feature, please see the description of the @option{--checkcenter} option in @ref{Invoking astcrop}. @table @asis @item Image coordinates In image mode (@option{--mode=img}), Crop interprets the pixel coordinates and widths in units of the input data-elements (for example, pixels in an image, not world coordinates). In image mode, only one image may be input. The output crop(s) can be defined in multiple ways as listed below. @table @asis @item Center of multiple crops (in a catalog) The center of (possibly multiple) crops are read from a text file. In this mode, the columns identified with the @option{--coordcol} option are interpreted as the center of a crop with a width of @option{--width} pixels along each dimension. The columns can contain any floating point value. The value to @option{--output} option is seen as a directory which will host (the possibly multiple) separate crop files, see @ref{Crop output} for more. For a tutorial using this feature, please see @ref{Reddest clumps cutouts and parallelization}. @item Center of a single crop (on the command-line) The center of the crop is given on the command-line with the @option{--center} option. The crop width is specified by the @option{--width} option along each dimension. The given coordinates and width can be any floating point number. @item Vertices of a single crop In Image mode there are two options to define the vertices of a region to crop: @option{--section} and @option{--polygon}. The former is lower-level (does not accept floating point vertices, and only a rectangular region can be defined), it is also only available in Image mode. Please see @ref{Crop section syntax} for a full description of this method. The latter option (@option{--polygon}) is a higher-level method to define any polygon (with any number of vertices) with floating point values. Please see the description of this option in @ref{Invoking astcrop} for its syntax. @end table @item WCS coordinates In WCS mode (@option{--mode=wcs}), the coordinates and width are interpreted using the World Coordinate System (WCS, that must accompany the dataset), not pixel coordinates. You can optionally use @option{--widthinpix} for the width to be interpreted in pixels (even though the coordinates are in WCS). In WCS mode, Crop accepts multiple datasets as input. When the cropped region (defined by its center or vertices) overlaps with multiple of the input images/tiles, the overlapping regions will be taken from the respective input (they will be stitched when necessary for each output crop). In this mode, the input images do not necessarily have to be the same size, they just need to have the same orientation and pixel resolution. Currently only orientation along the celestial coordinates is accepted, if your input has a different orientation or resolution you can use Warp's @option{--gridfile} option to align the image before cropping it (see @ref{Warp}). Each individual input image/tile can even be smaller than the final crop. In any case, any part of any of the input images which overlaps with the desired region will be used in the crop. Note that if there is an overlap in the input images/tiles, the pixels from the last input image read are going to be used for the overlap. Crop will not change pixel values, so it assumes your overlapping tiles were cutout from the same original image. There are multiple ways to define your cropped region as listed below. @table @asis @item Center of multiple crops (in a catalog) Similar to catalog inputs in Image mode (above), except that the values along each dimension are assumed to have the same units as the dataset's WCS information. For example, the central RA and Dec value for each crop will be read from the first and second calls to the @option{--coordcol} option. The width of the cropped box (in units of the WCS, or degrees in RA and Dec mode) must be specified with the @option{--width} option. You can optionally use @option{--widthinpix} for the value of @option{--width} to be interpreted in pixels. @item Center of a single crop (on the command-line) You can specify the center of only one crop box with the @option{--center} option. If it exists in the input images, it will be cropped similar to the catalog mode, see above also for @code{--width}. @item Vertices of a single crop The @option{--polygon} option is a high-level method to define any convex polygon (with any number of vertices). Please see the description of this option in @ref{Invoking astcrop} for its syntax. @end table @cartouche @noindent @strong{CAUTION:} In WCS mode, the image has to be aligned with the celestial coordinates, such that the first FITS axis is parallel (opposite direction) to the Right Ascension (RA) and the second FITS axis is parallel to the declination. If these conditions are not met for an image, Crop will warn you and abort. You can use Warp to align the input image to standard celestial coordinates, see @ref{Warp}. @end cartouche @end table As a summary, if you do not specify a catalog, you have to define the cropped region manually on the command-line. In any case the mode is mandatory for Crop to be able to interpret the values given as coordinates or widths. @node Crop section syntax, Blank pixels, Crop modes, Crop @subsection Crop section syntax @cindex Crop a given section of image When in image mode, one of the methods to crop only one rectangular section from the input image is to use the @option{--section} option. Crop has a powerful syntax to read the box parameters from a string of characters. If you leave certain parts of the string to be empty, Crop can fill them for you based on the input image sizes. @cindex Define section to crop To define a box, you need the coordinates of two points: the first (@code{X1}, @code{Y1}) and the last pixel (@code{X2}, @code{Y2}) pixel positions in the image, or four integer numbers in total. The four coordinates can be specified with one string in this format: `@command{X1:X2,Y1:Y2}'. This string is given to the @option{--section} option. Therefore, the pixels along the first axis that are @mymath{\geq}@command{X1} and @mymath{\leq}@command{X2} will be included in the cropped image. The same goes for the second axis. Note that each different term will be read as an integer, not a float. The reason it only accepts integers is that @option{--section} is a low-level option (which is also very fast!). For a higher-level way to specify region (any polygon, not just a box), please see the @option{--polygon} option in @ref{Crop options}. Also note that in the FITS standard, pixel indexes along each axis start from unity(1) not zero(0). @cindex Crop section format You can omit any of the values and they will be filled automatically. The left hand side of the colon (@command{:}) will be filled with @command{1}, and the right side with the image size. So, @command{2:,:} will include the full range of pixels along the second axis and only those with a first axis index larger than @command{2} in the first axis. If the colon is omitted for a dimension, then the full range is automatically used. So the same string is also equal to @command{2:,} or @command{2:} or even @command{2}. If you want such a case for the second axis, you should set it to: @command{,2}. If you specify a negative value, it will be seen as before the indexes of the image which are outside the image along the bottom or left sides when viewed in SAO DS9. In case you want to count from the top or right sides of the image, you can use an asterisk (@option{*}). When confronted with a @option{*}, Crop will replace it with the maximum length of the image in that dimension. So @command{*-10:*+10,*-20:*+20} will mean that the crop box will be @math{20\times40} pixels in size and only include the top corner of the input image with 3/4 of the image being covered by blank pixels, see @ref{Blank pixels}. If you feel more comfortable with space characters between the values, you can use as many space characters as you wish, just be careful to put your value in double quotes, for example, @command{--section="5:200, 123:854"}. If you forget the quotes, anything after the first space will not be seen by @option{--section} and you will most probably get an error because the rest of your string will be read as a filename (which most probably does not exist). See @ref{Command-line} for a description of how the command-line works. @node Blank pixels, Invoking astcrop, Crop section syntax, Crop @subsection Blank pixels @cindex Blank pixel The cropped box can potentially include pixels that are beyond the image range. For example, when a target in the input catalog was very near the edge of the input image. The parts of the cropped image that were not in the input image will be filled with the following two values depending on the data type of the image. In both cases, SAO DS9 will not color code those pixels. @itemize @item If the data type of the image is a floating point type (float or double), IEEE NaN (Not a number) will be used. @item For integer types, pixels out of the image will be filled with the value of the @command{BLANK} keyword in the cropped image header. The value assigned to it is the lowest value possible for that type, so you will probably never need it any way. Only for the unsigned character type (@command{BITPIX=8} in the FITS header), the maximum value is used because it is unsigned, the smallest value is zero which is often meaningful. @end itemize You can ask for such blank regions to not be included in the output crop image using the @option{--noblank} option. In such cases, there is no guarantee that the image size of your outputs are what you asked for. In some survey images, unfortunately they do not use the @command{BLANK} FITS keyword. Instead they just give all pixels outside of the survey area a value of zero. So by default, when dealing with float or double image types, any values that are 0.0 are also regarded as blank regions. This can be turned off with the @option{--zeroisnotblank} option. @node Invoking astcrop, , Blank pixels, Crop @subsection Invoking Crop Crop will crop a region from an image. If in WCS mode, it will also stitch parts from separate images in the input files. The executable name is @file{astcrop} with the following general template @example $ astcrop [OPTION...] [ASCIIcatalog] ASTRdata ... @end example @noindent One line examples: @example ## Crop all objects in cat.txt from image.fits: $ astcrop --catalog=cat.txt image.fits ## Crop all options in catalog (with RA,DEC) from all the files ## ending in `_drz.fits' in `/mnt/data/COSMOS/': $ astcrop --mode=wcs --catalog=cat.txt /mnt/data/COSMOS/*_drz.fits ## Crop the outer 10 border pixels of the input image and give ## the output HDU a name ('EXTNAME' keyword in FITS) of 'mysection'. $ astcrop --section=10:*-10,10:*-10 --hdu=2 image.fits \ --metaname=mysection ## Crop region around RA and Dec of (189.16704, 62.218203): $ astcrop --mode=wcs --center=189.16704,62.218203 goodsnorth.fits ## Same crop above, but coordinates given in sexagesimal (you can ## also use ':' between the sexagesimal components). $ astcrop --mode=wcs --center=12h36m40.08,62d13m5.53 goodsnorth.fits ## Crop region around pixel coordinate (568.342, 2091.719): $ astcrop --mode=img --center=568.342,2091.719 --width=201 image.fits ## Crop all HDUs within a FITS file at a certain coordinate, while ## preserving the names of the HDUs in the output. $ for hdu in $(astfits input.fits --listimagehdus); do \ astcrop input.fits --hdu=$hdu --append --output=crop.fits \ --metaname=$hdu --mode=wcs --center=189.16704,62.218203 \ --width=10/3600 done @end example @noindent Crop has one mandatory argument which is the input image name(s), shown above with @file{ASTRdata ...}. You can use shell expansions, for example, @command{*} for this if you have lots of images in WCS mode. If the crop box centers are in a catalog, you can use the @option{--catalog} option. In other cases, you have to provide the single cropped output parameters must be given with command-line options. See @ref{Crop output} for how the output file name(s) can be specified. For the full list of general options to all Gnuastro programs (including Crop), please see @ref{Common options}. Floating point numbers can be used to specify the crop region (except the @option{--section} option, see @ref{Crop section syntax}). In such cases, the floating point values will be used to find the desired integer pixel indices based on the FITS standard. Hence, Crop ultimately does not do any sub-pixel cropping (in other words, it does not change pixel values). If you need such crops, you can use @ref{Warp} to first warp the image to the a new pixel grid, then crop from that. For example, let's assume you want a crop from pixels 12.982 to 80.982 along the first dimension. You should first translate the image by @mymath{-0.482} (note that the edge of a pixel is at integer multiples of @mymath{0.5}). So you should run Warp with @option{--translate=-0.482,0} and then crop the warped image with @option{--section=13:81}. There are two ways to define the cropped region: with its center or its vertices. See @ref{Crop modes} for a full description. In the former case, Crop can check if the central region of the cropped image is indeed filled with data or is blank (see @ref{Blank pixels}), and not produce any output when the center is blank, see the description under @option{--checkcenter} for more. @cindex Asynchronous thread allocation When in catalog mode, Crop will run in parallel unless you set @option{--numthreads=1}, see @ref{Multi-threaded operations}. Note that when multiple outputs are created with threads, the outputs will not be created in the same order. This is because the threads are asynchronous and thus not started in order. This has no effect on each output, see @ref{Reddest clumps cutouts and parallelization} for a tutorial on effectively using this feature. @menu * Crop options:: A list of all the options with explanation. * Crop output:: The outputs of Crop. * Crop known issues:: Known issues in running Crop. @end menu @node Crop options, Crop output, Invoking astcrop, Invoking astcrop @subsubsection Crop options The options can be classified into the following contexts: Input, Output and operating mode options. Options that are common to all Gnuastro program are listed in @ref{Common options} and will not be repeated here. When you are specifying the crop vertices yourself (through @option{--section}, or @option{--polygon}) on relatively small regions (depending on the resolution of your images) the outputs from image and WCS mode can be approximately equivalent. However, as the crop sizes get large, the curved nature of the WCS coordinates have to be considered. For example, when using @option{--section}, the right ascension of the bottom left and top left corners will not be equal. If you only want regions within a given right ascension, use @option{--polygon} in WCS mode. @noindent Input image parameters: @table @option @item --hstartwcs=INT Specify the first keyword card (line number) to start finding the input image world coordinate system information. This is useful when certain header keywords of the input may cause bad conflicts with your crop (see an example described below). To get line numbers of the header keywords, you can pipe the fully printed header into @command{cat -n} like below: @example $ astfits image.fits -h1 | cat -n @end example @cindex CANDELS survey For example, distortions have only been present in WCSLIB from version 5.15 (released in mid 2016). Therefore some pipelines still apply their own specific set of WCS keywords for distortions and put them into the image header along with those that WCSLIB does recognize. So now that WCSLIB recognizes most of the standard distortion parameters, they will get confused with the old ones and give wrong results. For example, in the CANDELS-GOODS South images that were created before WCSLIB 5.15@footnote{@url{https://archive.stsci.edu/pub/hlsp/candels/goods-s/gs-tot/v1.0/}}. The two @option{--hstartwcs} and @option{--hendwcs} are thus provided so when using older datasets, you can specify what region in the FITS headers you want to use to read the WCS keywords. Note that this is only relevant for reading the WCS information, basic data information like the image size are read separately. These two options will only be considered when the value to @option{--hendwcs} is larger than that of @option{--hstartwcs}. So if they are equal or @option{--hstartwcs} is larger than @option{--hendwcs}, then all the input keywords will be parsed to get the WCS information of the image. @item --hendwcs=INT Specify the last keyword card to read for specifying the image world coordinate system on the input images. See @option{--hstartwcs} @end table @noindent Crop box parameters: @table @option @item -c FLT[,FLT[,...]] @itemx --center=FLT[,FLT[,...]] The central position of the crop in the input image. The positions along each dimension must be separated by a comma (@key{,}) and fractions are also acceptable. The comma-separated values can either be in degrees (a single number), or sexagesimal (@code{_h_m_} for RA, @code{_d_m_} for Dec, or @code{_:_:_} for both). The number of values given to this option must be the same as the dimensions of the input dataset. The width of the crop should be set with @code{--width}. The units of the coordinates are read based on the value to the @option{--mode} option, see below. @item -O STR @itemx --mode=STR Mode to interpret the crop's coordinates (for example with @option{--center}, @option{--catalog} or @option{--polygon}). The value must either be @option{img} (to assume image/pixel coordinates) or @option{wcs} (to assume WCS, usually RA/Dec, coordinates), see @ref{Crop modes} for a full description. @item -w FLT[,FLT[,...]] @itemx --width=FLT[,FLT[,...]] Width of the cropped region about coordinate given to @option{--center}. If in WCS mode, value(s) given to this option will be read in the same units as the dataset's WCS information along this dimension (unless @option{--widthinpix} is given). This option may take either a single value (to be used for all dimensions: @option{--width=10} in image-mode will crop a @mymath{10\times10} pixel image) or multiple values (a specific value for each dimension: @option{--width=10,20} in image-mode will crop a @mymath{10\times20} pixel image). The @code{--width} option also accepts fractions. For example, if you want the width of your crop to be 3 by 5 arcseconds along RA and Dec respectively and you are in wcs-mode, you can use: @option{--width=3/3600,5/3600}. The final output will have an odd number of pixels to allow easy identification of the pixel which keeps your requested coordinate (from @option{--center} or @option{--catalog}). If you want an even sided crop, you can run Crop afterwards with @option{--section=":*-1,:*-1"} or @option{--section=2:,2:} (depending on which side you do not need), see @ref{Crop section syntax}. The basic reason for making an odd-sided crop is that your given central coordinate will ultimately fall within a discrete pixel in the image (defined by the FITS standard). When the crop has an odd number of pixels in each dimension, that pixel can be very well defined as the ``central'' pixel of the crop, making it unambiguously easy to identify. However, for an even-sided crop, it will be very hard to identify the central pixel (it can be on any of the four pixels adjacent to the central point of the image!). @item -X @itemx --widthinpix In WCS mode, interpret the value to @option{--width} as number of pixels, not the WCS units like degrees. This is useful when you want a fixed crop size in pixels, even though your center coordinates are in WCS (for example, RA and Dec). @item -l STR @itemx -l FLT:FLT,... @itemx --polygon=STR @itemx --polygon=FLT,FLT:FLT,FLT:... @cindex Sexagesimal Polygon vertice coordinates (when value is in @option{FLT,FLT:FLT,FLT:...} format) or the filename of a SAO DS9 region file (when the value has no @file{,} or @file{:} characters). Each vertice can either be in degrees (a single floating point number) or sexagesimal (in formats of `@code{_h_m_}' for RA and `@code{_d_m_}' for Dec, or simply `@code{_:_:_}' for either of them). The vertices are used to define the polygon: in the same order given to this option. When the vertices are not necessarily ordered in the proper order (for example, one vertice in a square comes after its diagonal opposite), you can add the @option{--polygonsort} option which will attempt to sort the vertices before cropping. Note that for concave polygons, sorting is not recommended because there is no unique solution, for more, see the description under @option{--polygonsort}. This option can be used both in the image and WCS modes, see @ref{Crop modes}. If a SAO DS9 region file is used, the coordinate mode of Crop will be determined by the contents of the file and any value given to @code{--mode} is ignored. The cropped image will be the size of the rectangular region that completely encompasses the polygon. By default all the pixels that are outside of the polygon will be set as blank values (see @ref{Blank pixels}). However, if @option{--polygonout} is called all pixels internal to the vertices will be set to blank. In WCS-mode, you may provide many FITS images/tiles: Crop will stitch them to produce this cropped region, then apply the polygon. The syntax for the polygon vertices is similar to, and simpler than, that for @option{--section}. In short, the dimensions of each coordinate are separated by a comma (@key{,}) and each vertex is separated by a colon (@key{:}). You can define as many vertices as you like. If you would like to use space characters between the dimensions and vertices to make them more human-readable, then you have to put the value to this option in double quotation marks. For example, let's assume you want to work on the deepest part of the WFC3/IR images of Hubble Space Telescope eXtreme Deep Field (HST-XDF). @url{https://archive.stsci.edu/prepds/xdf/, According to the web page}@footnote{@url{https://archive.stsci.edu/prepds/xdf/}} the deepest part is contained within the coordinates: @example [ (53.187414,-27.779152), (53.159507,-27.759633), (53.134517,-27.787144), (53.161906,-27.807208) ] @end example They have provided mask images with only these pixels in the WFC3/IR images, but what if you also need to work on the same region in the full resolution ACS images? Also what if you want to use the CANDELS data for the shallow region? Running Crop with @option{--polygon} will easily pull out this region of the image for you, irrespective of the resolution. If you have set the operating mode to WCS mode in your nearest configuration file (see @ref{Configuration files}), there is no need to call @option{--mode=wcs} on the command-line. @example $ astcrop --mode=wcs desired-filter-image(s).fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" @end example @cindex SAO DS9 region file @cindex Region file (SAO DS9) More generally, you have an image and want to define the polygon yourself (it is not already published like the example above). As the number of vertices increases, checking the vertex coordinates on a FITS viewer (for example, SAO DS9) and typing them in, one by one, can be very tedious and prone to typo errors. In such cases, you can make a polygon ``region'' in DS9 and using your mouse, easily define (and visually see) it. Given that SAO DS9 has a graphic user interface (GUI), if you do not have the polygon vertices before-hand, it is much more easier build your polygon there and pass it onto Crop through the region file. You can take the following steps to make an SAO DS9 region file containing your polygon. Open your desired FITS image with SAO DS9 and activate its ``region'' mode with @clicksequence{Edit@click{}Region}. Then define the region as a polygon with @clicksequence{Region@click{}Shape@click{}Polygon}. Click on the approximate center of the region you want and a small square will appear. By clicking on the vertices of the square you can shrink or expand it, clicking and dragging anywhere on the edges will enable you to define a new vertex. After the region has been nicely defined, save it as a file with @clicksequence{Region@click{}``Save Regions''}. You can then select the name and address of the output file, keep the format as @command{REG (*.reg)} and press the ``OK'' button. In the next window, keep format as ``ds9'' and ``Coordinate System'' as ``fk5'' for RA and Dec (or ``Image'' for pixel coordinates). A plain text file is now created (let's call it @file{ds9.reg}) which you can pass onto Crop with @command{--polygon=ds9.reg}. For the expected format of the region file, see the description of @code{gal_ds9_reg_read_polygon} in @ref{SAO DS9 library}. However, since SAO DS9 makes this file for you, you do not usually need to worry about its internal format unless something un-expected happens and you find a bug. @item --polygonout Keep all the regions outside the polygon and mask the inner ones with blank pixels (see @ref{Blank pixels}). This is practically the inverse of the default mode of treating polygons. Note that this option only works when you have only provided one input image. If multiple images are given (in WCS mode), then the full area covered by all the images has to be shown and the polygon excluded. This can lead to a very large area if large surveys like COSMOS are used. So Crop will abort and notify you. In such cases, it is best to crop out the larger region you want, then mask the smaller region with this option. @item --polygonsort Sort the given set of vertices to the @option{--polygon} option. For a concave polygon it will sort the vertices correctly, however for a convex polygon it there is no unique sorting, so be careful because the crop may not be what you expected. @cindex Convex polygons @cindex Concave polygons @cindex Polygons, Convex @cindex Polygons, Concave Polygons come in two classes: convex and concave (or generally, non-convex!), see below for a demonstration. Convex polygons are those where all inner angles are less than 180 degrees. By contrast, a concave polygon is one where an inner angle may be more than 180 degrees. @example Concave Polygon Convex Polygon D --------C D------------- C \ | E / | \E | \ | / | \ | A--------B A ----------B @end example @item -s STR @itemx --section=STR Section of the input image which you want to be cropped. See @ref{Crop section syntax} for a complete explanation on the syntax required for this input. @item -C FITS/TXT @itemx --catalog=FITS/TXT File name of catalog for making multiple crops from the input images/cubes. The catalog can be in any of Gnuastro's recognized @ref{Recognized table formats}. The columns containing the coordinates for the crop centers can be specified with the @option{--coordcol} option (using column names or numbers, see @ref{Selecting table columns}). The catalog can also contain the name of each crop, you can specify the column containing the name with the @option{--namecol}. @item --cathdu=STR/INT The HDU (extension) containing the catalog (if the file given to @option{--catalog} is a FITS file). This can either be the HDU name (if it has one) or number (counting from 0). By default (if this option is not given), the second HDU will be used (equivalent to @option{--cathdu=1}. For more on how to specify the HDU, see the explanation of the @option{--hdu} option in @ref{Input output options}. @item -x STR/INT @itemx --coordcol=STR/INT The column in a catalog to read as a coordinate. The value can be either the column number (starting from 1), or a match/search in the table meta-data, see @ref{Selecting table columns}. This option must be called multiple times, depending on the number of dimensions in the input dataset. If it is called more than necessary, the extra columns (later calls to this option on the command-line or configuration files) will be ignored, see @ref{Configuration file precedence}. @item -n STR/INT @item --namecol=STR/INT Column selection of crop file name. The value can be either the column number (starting from 1), or a match/search in the table meta-data, see @ref{Selecting table columns}. This option can be used both in Image and WCS modes, and not a mandatory. When a column is given to this option, the final crop base file name will be taken from the contents of this column. The directory will be determined by the @option{--output} option (current directory if not given) and the value to @option{--suffix} will be appended. When this column is not given, the row number will be used instead. @end table @node Crop output, Crop known issues, Crop options, Invoking astcrop @subsubsection Crop output The string given to @option{--output} option will be interpreted depending on how many crops were requested, see @ref{Crop modes}: @itemize @item When a catalog is given, the value of the @option{--output} (see @ref{Common options}) will be read as the directory to store the output cropped images. Hence if it does not already exist, Crop will abort with an ``No such file or directory'' error. The crop file names will consist of two parts: a variable part (the row number of each target starting from 1) along with a fixed string which you can set with the @option{--suffix} option. Optionally, you may also use the @option{--namecol} option to define a column in the input catalog to use as the file name instead of numbers. @item When only one crop is desired, the value to @option{--output} will be read as a file name. If no output is specified or if it is a directory, the output file name will follow the automatic output names of Gnuastro, see @ref{Automatic output}: The string given to @option{--suffix} will be replaced with the @file{.fits} suffix of the input. @end itemize By default, as suggested by the FITS standard and implemented in all Gnuastro programs, the first/primary extension of the output files will only contain metadata. The cropped images/cubes will be written into the 2nd HDU of their respective FITS file (which is actually counted as @code{1} because HDU counting starts from @code{0}). However, if you want the cropped data to be written into the primary (0-th) HDU, run Crop with the @option{--primaryimghdu} option. If the output file already exists by default Crop will re-write it (so that all existing HDUs in it will be deleted). If you want the cropped HDU to be appended to existing HDUs, use @option{--append} described below. The 0-th HDU of each output cropped image will contain the names of the input image(s) it was cut from. If a name is longer than the 70 character space that the FITS standard allows for header keyword values, the name will be cut into several keywords from the nearest slash (@key{/}). The keywords have the following format: @command{ICFn_m} (for Crop File). Where @command{n} is the number of the image used in this crop and @command{m} is the part of the name (it can be broken into multiple keywords). Following the name is another keyword named @command{ICFnPIX} which shows the pixel range from that input image in the same syntax as @ref{Crop section syntax}. So this string can be directly given to the @option{--section} option later. Once done, a log file can be created in the current directory with the @code{--log} option. This file will have three columns and the same number of rows as the number of cropped images. There are also comments on the top of the log file explaining basic information about the run and descriptions for the columns. A short description of the columns is also given below: @enumerate @item The cropped image file name for that row. @item The number of input images that were used to create that image. @item A @code{0} if the central few pixels (value to the @option{--checkcenter} option) are blank and @code{1} if they are not. When the crop was not defined by its center (see @ref{Crop modes}), or @option{--checkcenter} was given a value of 0 (see @ref{Invoking astcrop}), the center will not be checked and this column will be given a value of @code{-1}. @end enumerate If the output crop(s) have a single element (pixel in an image) and @option{--oneelemstdout} has been called, no output file will be produced! Instead, the single element's value is printed on the standard output. See the description of @option{--oneelemstdout} below for more: @table @option @item -p STR @itemx --suffix=STR The suffix (or post-fix) of the output files for when you want all the cropped images to have a special ending. One case where this might be helpful is when besides the science images, you want the weight images (or exposure maps, which are also distributed with survey images) of the cropped regions too. So in one run, you can set the input images to the science images and @option{--suffix=_s.fits}. In the next run you can set the weight images as input and @option{--suffix=_w.fits}. @item -a STR @itemx --metaname=STR Name of cropped HDU (value to the @code{EXTNAME} keyword of FITS). If not given, a default @code{CROP} will be placed there (so the @code{EXTNAME} keyword will always be present in the output). If crop produces many outputs from a catalog, they will be given the same string as @code{EXTNAME} (the file names containing the cropped HDU will be different). @item -A @itemx --append If the output file already exists, append the cropped image HDU to the end of any existing HDUs. By default (when this option isn't given), if an output file already exists, any existing HDU in it will be deleted. If the output file doesn't exist, this option is redundant. @item --primaryimghdu Write the output into the primary (0-th) HDU/extension of the output. By default, like all Gnuastro's default outputs, no data is written in the primary extension because the FITS standard suggests keeping that extension free of data and only for metadata. @item -t @itemx --oneelemstdout When a crop only has a single element (a single pixel), print it to the standard output instead of making a file. By default (without this option), a single-pixel crop will be saved to a file, just like a crop of any other size. When a single crop is requested (either through @option{--center}, or a catalog of one row is given), the single value alone is printed with nothing else. This makes it easy to immediately write the value into a shell variable for example: @example value=$(astcrop img.fits --mode=wcs --center=1.234,5.678 \ --width=1 --widthinpix --oneelemstdout \ --quiet) @end example If a catalog of coordinates is given (that would produce multiple crops; or multiple values in this scenario), the solution for a single value will not work! Recall that Crop will do the crops in parallel, therefore each time you run it, the order of the rows will be different and not correspond to the order of the inputs. To allow identification of each value (which row of the input catalog it corresponds to), Crop will first print the name of the would-be created file name, and print the value after it (separated by an empty SPACE character). In other words, the file in the first column will not actually be created, but the value of the pixel it would have contained (if this option was not called) is printed after it. @item -c FLT/INT @itemx --checkcenter=FLT/INT @cindex Check center of crop Square box width of region in the center of the image to check for blank values. If any of the pixels in this central region of a crop (defined by its center) are blank, then it will not be stored in an output file. If the value to this option is zero, no checking is done. This check is only applied when the cropped region(s) are defined by their center (not by the vertices, see @ref{Crop modes}). The units of the value are interpreted based on the @option{--mode} value (in WCS or pixel units). The ultimate checked region size (in pixels) will be an odd integer around the center (converted from WCS, or when an even number of pixels are given to this option). In WCS mode, the value can be given as fractions, for example, if the WCS units are in degrees, @code{0.1/3600} will correspond to a check size of 0.1 arcseconds. Because survey regions do not often have a clean square or rectangle shape, some of the pixels on the sides of the survey FITS image do not commonly have any data and are blank (see @ref{Blank pixels}). So when the catalog was not generated from the input image, it often happens that the image does not have data over some of the points. When the given center of a crop falls in such regions or outside the dataset, and this option has a non-zero value, no crop will be created. Therefore with this option, you can specify a width of a small box (3 pixels is often good enough) around the central pixel of the cropped image. You can check which crops were created and which were not from the command-line (if @option{--quiet} was not called, see @ref{Operating mode options}), or in Crop's log file (see @ref{Crop output}). @item -b @itemx --noblank Pixels outside of the input image that are in the crop box will not be used. By default they are filled with blank values (depending on type), see @ref{Blank pixels}. This option only applies only in Image mode, see @ref{Crop modes}. @item -z @itemx --zeroisnotblank In float or double images, it is common to give the value of zero to blank pixels. If the input image type is one of these two types, such pixels will also be considered as blank. You can disable this behavior with this option, see @ref{Blank pixels}. @end table @node Crop known issues, , Crop output, Invoking astcrop @subsubsection Crop known issues When running Crop, you may encounter strange errors and bugs. In these cases, please report a bug and we will try to fix it as soon as possible, see @ref{Report a bug}. However, some things are beyond our control, or may take too long to fix directly. In this section we list such known issues that may occur in known cases and suggest the hack (or work-around) to fix the problem: @table @asis @item Crash with @samp{Killed} when cropping catalog from @file{.fits.gz} This happens because CFISTIO (that reads and writes FITS files) will internally decompress the file in a temporary place (possibly in the RAM), then start reading from it. On the other hand, by default when given a catalog (with many crops) and not specifying @option{--numthreads}, Crop will use the maximum number of threads available on your system to do each crop faster. On an normal (not compressed) file, parallel access will not cause a problem, however, when attempting parallel access with the maximum number of threads on a compressed file, CFITSIO crashes with @code{Killed}. Therefore the following solutions can be used to fix this crash: @itemize @item Decrease the number of threads (at the minimum, set @option{--numthreads=1}). Since this solution does not attempt to change any of your previous Crop command components or does not change your local file structure, it is the preferred way. @item Decompress the file (with the command below) and feed the @file{.fits} file into Crop without changing the number of threads. @example $ gunzip -k image.fits.gz @end example @end itemize @end table @node Arithmetic, Convolve, Crop, Data manipulation @section Arithmetic It is commonly necessary to do operations on some or all of the elements of a dataset independently (pixels in an image). For example, in the reduction of raw data it is necessary to subtract the Sky value (@ref{Sky value}) from each image image. Later (once the images as warped into a single grid using Warp for example, see @ref{Warp}), the images are co-added (the output pixel grid is the average of the pixels of the individual input images). Arithmetic is Gnuastro's program for such operations on your datasets directly from the command-line. It currently uses the reverse polish or post-fix notation, see @ref{Reverse polish notation} and will work on the native data types of the input images/data to reduce CPU and RAM resources, see @ref{Numeric data types}. For more information on how to run Arithmetic, please see @ref{Invoking astarithmetic}. @menu * Reverse polish notation:: The current notation style for Arithmetic. * Integer benefits and pitfalls:: Integers have benefits, but require care. * Noise basics:: Introduction various noise models. * Arithmetic operators:: List of operators known to Arithmetic. * Invoking astarithmetic:: How to run Arithmetic: options and output. @end menu @node Reverse polish notation, Integer benefits and pitfalls, Arithmetic, Arithmetic @subsection Reverse polish notation @cindex Post-fix notation @cindex Reverse Polish Notation The most common notation for arithmetic operations is the @url{https://en.wikipedia.org/wiki/Infix_notation, infix notation} where the operator goes between the two operands, for example, @mymath{4+5}. The infix notation is the preferred way in most programming languages which come with scripting features for large programs. This is because the infix notation requires a way to define precedence when more than one operator is involved. For example, consider the statement @code{5 + 6 / 2}. Should 6 first be divided by 2, then added by 5? Or should 5 first be added with 6, then divided by 2? Therefore we need parenthesis to show precedence: @code{5+(6/2)} or @code{(5+6)/2}. Furthermore, if you need to leave a value for later processing, you will need to define a variable for it; for example, @code{a=(5+6)/2}. Gnuastro provides libraries where you can also use infix notation in C or C++ programs. However, Gnuastro's programs are primarily designed to be run on the command-line and the level of complexity that infix notation requires can be annoying/confusing to write on the command-line (where they can get confused with the shell's parenthesis or variable definitions). Therefore Gnuastro's Arithmetic and Table (when doing column arithmetic) programs use the post-fix notation, also known as @url{https://en.wikipedia.org/wiki/Reverse_Polish_notation, reverse polish notation}. For example, instead of writing @command{5+6}, we write @command{5 6 +}. The Wikipedia article on the reverse polish notation provides some excellent explanation on this notation but here we will give a short summary here for self-sufficiency. In short, in the reverse polish notation, the operator is placed after the operands. As we will see below this removes the need to define parenthesis and lets you use previous values without needing to define a variable. In the future@footnote{@url{https://savannah.gnu.org/task/index.php?13867}} we do plan to also optionally allow infix notation when arithmetic operations on datasets are desired, but due to time constraints on the developers we cannot do it immediately. To easily understand how the reverse polish notation works, you can think of each operand (@code{5} and @code{6} in the example above) as a node in a ``last-in-first-out'' stack. One such stack in daily life is a stack of dishes in the kitchen: you put a clean dish, on the top of a stack of dishes when it is ready for later usage. Later, when you need a dish, you pick the top one (hence the ``last'' dish placed ``in'' the stack is the ``first'' dish that comes ``out'' when necessary). Each operator will need a certain number of operands (in the example above, the @code{+} operator needs two operands: @code{5} and @code{6}). In the kitchen metaphor, an operator can be an oven. Every time an operator is confronted, the operator takes (or ``pops'') the number of operands it needs from the top of the stack (so they do not exist in the stack any more), does its operation, and places (or ``pushes'') the result back on top of the stack. So if you want the average of 5 and 6, you would write: @command{5 6 + 2 /}. The operations that are done are: @enumerate @item @command{5} is an operand, so Arithmetic pushes it to the top of the stack (which is initially empty). In the kitchen metaphor, you can visualize this as taking a new dish from the cabinet, putting the number 5 inside of the dish, and putting the dish on top of the (empty) cooking table in front of you. You now have a stack of one dish on the table in front of you. @item @command{6} is also an operand, so it is pushed to the top of the stack. Like before, you can visualize this as taking a new dish from the cabinet, putting the number 6 in it and placing it on top of the previous dish. You now have a stack of two dishes on the table in front of you. @item @command{+} is a @emph{binary} operator, so it will pop the top two elements of the stack out of it, and perform addition on them (the order is @mymath{5+6} in the example above). The result is @command{11} which is pushed to the top of the stack. To visualize this, you can think of the @code{+} operator as an oven with a place for two dishes. You pick up the top-most dish (that has the number 6 in it) and put it in the oven. The top dish is now the one that has the number 5. You also pick it up and put it in the oven, and close the oven door. When the oven has finished its cooking, it produces a single output (in one dish, with the number 11 inside of it). You take that output dish and put it back on the table. You now have a stack of one dish on the table in front of you. @item @command{2} is an operand so push it onto the top of the stack. In the kitchen metaphor, you again go to the cabinet, pick up a dish and put the number 2 inside of it and put the dish over the previous dish (that has the number 11). You now have a stack of two dishes on the table in front of you. @item @command{/} (division) is a binary operator, so pull out the top two elements of the stack (top-most is @command{2}, then @command{11}) and divide the second one by the first. In the kitchen metaphor, the @command{/} operator can be visualized as a microwave that takes two dishes. But unlike the oven (@code{+} operator) before, the order of inputs matters (they are on top of each other: with the top dish holder being the numerator and the bottom one being the denominator). Again, you look at your stack of dishes on the table. You pick up the top one (with value 2 inside of it) and put it in the microwave's bottom (denominator) dish holder. Then you go back to your stack of dishes on the table and pick up the top dish (with value 11 inside of it) and put that in the top (nominator) dish holder. The microwave will do its work and when it is finished, returns a new dish with the single value 5.5 inside of it. You pick up the dish from the microwave and place it back on the table. @item There are no more operands or operators, so simply return the remaining operand in the output. In the kitchen metaphor, you see that your recipe has no more steps, so you just pick up the remaining dish and take it to the dining room to enjoy a good dinner. @end enumerate In the Arithmetic program, the operands can be FITS images of any dimensionality, or numbers (see @ref{Invoking astarithmetic}). In Table's column arithmetic, they can be any column in the table (a series of numbers in an array) or a single number (see @ref{Column arithmetic}). With this notation, very complicated procedures can be created without the need for parenthesis or worrying about precedence. Even functions which take an arbitrary number of arguments can be defined in this notation. This is a very powerful notation and is used in languages like Postscript @footnote{See the EPS and PDF part of @ref{Recognized file formats} for a little more on the Postscript language.} which produces PDF files when compiled. @node Integer benefits and pitfalls, Noise basics, Reverse polish notation, Arithmetic @subsection Integer benefits and pitfalls Integers are the simplest numerical data types (@ref{Numeric data types}). Because of this, their storage space is much less, and their processing is much faster than floating point types. You can confirm this on your computer with the series of commands below. You will make four 5000 by 5000 pixel images filled with random values. Two of them will be saved as signed 8-bit integers, and two with 64-bit floating point types. The last command prints the size of the created images. @example $ astarithmetic 5000 5000 2 makenew 5 mknoise-sigma int8 -oint-1.fits $ astarithmetic 5000 5000 2 makenew 5 mknoise-sigma int8 -oint-2.fits $ astarithmetic 5000 5000 2 makenew 5 mknoise-sigma float64 -oflt-1.fits $ astarithmetic 5000 5000 2 makenew 5 mknoise-sigma float64 -oflt-2.fits $ ls -lh int-*.fits flt-*.fits @end example The 8-bit integer images are only 24MB, while the 64-bit floating point images are 191 MB! Besides helping in storage (on your disk, or in RAM, while the program is running), the small size of these files also helps in faster reading of the inputs. Furthermore, CPUs can process integer operations much faster than floating points. In the integers, the ones with a smaller width (number of bits) can be processed much faster. You can see this with the two commands below where you will add the integer images with each other and the floats with each other: @example $ astarithmetic flt-1.fits flt-2.fits + -oflt-sum.fits -g1 $ astarithmetic int-1.fits int-2.fits + -oint-sum.fits -g1 @end example Have a look at the running time of the two commands above (that is printed on their last line). On the system that this paragraph was written on, the floating point and integer image sums were respectively done in 0.481 and 0.089 seconds (the integer operation was almost 5 times faster!). @cartouche @noindent @strong{If your data does not have decimal points, use integer types:} integer types are much faster and can take much less space in your storage or RAM (while the program is running). @end cartouche @cartouche @noindent @strong{Select the smallest width that can host the range/precision of values:} for example, if the largest possible value in your dataset is 1000 and all numbers are integers, store it as a 16-bit integer. Also, if you know the values can never become negative, store it as an unsigned 16-bit integer. For floating point types, if you know you will not need a precision of more than 6 significant digits, use the 32-bit floating point type. For more on the range (for integers) and precision (for floats), see @ref{Numeric data types}. @end cartouche There is a price to be paid for this improved efficiency in integers: your wisdom! If you have not selected your types wisely, strange situations may happen. For example, try the command below: @example $ astarithmetic 125 10 + @end example @cindex Integer overflow @cindex Overflow, integer @noindent You expect the output to be @mymath{135}, but it will be @mymath{-121}! The reason is that when Arithmetic (or column-arithmetic in Table) confronts a number on the command-line, it use the principles above to select the most efficient type for each number. Both @mymath{125} and @mymath{10} can safely fit within a signed, 8-bit integer type, so arithmetic will store both as an 8-bit integer. However, the sum (@mymath{135}) is larger than the maximum possible value of an 8-bit signed integer (@mymath{127}). Therefore an integer overflow will occur, and the bits will be over-written. As a result, the value will be @mymath{135-128=7} more than the minimum value of this type (@mymath{-128}), which is @mymath{-128+7=-121}. When you know situations like this may occur, you can simply use @ref{Numerical type conversion operators}, to set just one of the inputs to a wider data type (the smallest, wider type to avoid wasting resources). In the example above, this would be @code{uint16}: @example $ astarithmetic 125 uint16 10 + @end example The reason this worked is that @mymath{125} is now converted into an unsigned 16-bit integer before the @code{+} operator. Since this is larger than an 8-bit integer, the C programming language's automatic type conversion will treat both as the wider type and store the result of the binary operation (@code{+}) in that type. For such a basic operation like the command above, a faster hack would be any of the two commands below (which are equivalent). This is because @code{125.0} or @code{125.} are interpreted as floating-point types and they do not suffer from such issues (converting only on one input is enough): @example $ astarithmetic 125. 10 + $ astarithmetic 125.0 10 + @end example For this particular command, the fix above will be as fast as the @code{uint16} solution. This is because there are only two numbers, and the overhead of Arithmetic (reading configuration files, etc.) dominates the running time. However, for large datasets, the @code{uint16} solution will be faster (as you saw above), Arithmetic will consume less RAM while running, and the output will consume less storage in your system (all major benefits)! It is possible to do internal checks in Gnuastro and catch integer overflows and correct them internally. However, we have not opted for this solution because all those checks will consume significant resources and slow down the program (especially with large datasets where RAM, storage and running time become important). To be optimal, we therefore trust that you (the wise Gnuastro user!) make the appropriate type conversion in your commands where necessary (recall that the operators are available in @ref{Numerical type conversion operators}). @node Noise basics, Arithmetic operators, Integer benefits and pitfalls, Arithmetic @subsection Noise basics @cindex Noise @cindex Image noise Deep astronomical images, like those used in extragalactic studies, seriously suffer from noise in the data. Generally speaking, the sources of noise in an astronomical image are photon counting noise and Instrumental noise which are discussed in @ref{Photon counting noise} and @ref{Instrumental noise}. This review finishes with @ref{Generating random numbers} which is a short introduction on how random numbers are generated. We will see that while software random number generators are not perfect, they allow us to obtain a reproducible series of random numbers through setting the random number generator function and seed value. Therefore in this section, we will also discuss how you can set these two parameters in Gnuastro's programs (including the arithmetic operators in @ref{Random number generators}). @menu * Photon counting noise:: Poisson noise * Instrumental noise:: Readout, dark current and other sources. * Final noised pixel value:: How the final noised value is calculated. * Generating random numbers:: How random numbers are generated. @end menu @node Photon counting noise, Instrumental noise, Noise basics, Noise basics @subsubsection Photon counting noise @cindex Counting error @cindex de Moivre, Abraham @cindex Poisson distribution @cindex Photon counting noise @cindex Poisson, Sim@'eon Denis With the very accurate electronics used in today's detectors, photon counting noise@footnote{In practice, we are actually counting the electrons that are produced by each photon, not the actual photons.} is the most significant source of uncertainty in most datasets. To understand this noise (error in counting) and its effect on the images of astronomical targets, let's start by reviewing how a distribution produced by counting can be modeled as a parametric function. Counting is an inherently discrete operation, which can only produce positive integer outputs (including zero). For example, we cannot count @mymath{3.2} or @mymath{-2} of anything. We only count @mymath{0}, @mymath{1}, @mymath{2}, @mymath{3} and so on. The distribution of values, as a result of counting efforts is formally known as the @url{https://en.wikipedia.org/wiki/Poisson_distribution, Poisson distribution}. It is associated to Sim@'eon Denis Poisson, because he discussed it while working on the number of wrongful convictions in court cases in his 1837 book@footnote{[From Wikipedia] Poisson's result was also derived in a previous study by Abraham de Moivre in 1711. Therefore some people suggest it should rightly be called the de Moivre distribution.}. @cindex Probability density function Let's take @mymath{\lambda} to represent the expected mean count of something. Furthermore, let's take @mymath{k} to represent the output of a counting attempt (hence @mymath{k} is a positive integer). The probability density function of getting @mymath{k} counts (in each attempt, given the expected/mean count of @mymath{\lambda}) can be written as: @cindex Poisson distribution @dispmath{f(k)={\lambda^k \over k!} e^{-\lambda},\quad k\in @{0, 1, 2, 3, \dots @}} @cindex Skewed Poisson distribution Because the Poisson distribution is only applicable to positive integer values (note the factorial operator, which only applies to non-negative integers), naturally it is very skewed when @mymath{\lambda} is near zero. One qualitative way to understand this behavior is that for smaller values near zero, there simply are not enough integers smaller than the mean, than integers that are larger. Therefore to accommodate all possibilities/counts, it has to be strongly skewed to the positive when the mean is small. For more on Skewness, see @ref{Skewness caused by signal and its measurement}. @cindex Compare Poisson and Gaussian As @mymath{\lambda} becomes larger, the distribution becomes more and more symmetric, and the variance of that distribution is equal to its mean. In other words, the standard deviation is the square root of the mean. It can also be proved that when the mean is large, say @mymath{\lambda>1000}, the Poisson distribution approaches the @url{https://en.wikipedia.org/wiki/Normal_distribution, Normal (Gaussian) distribution} with mean @mymath{\mu=\lambda} and standard deviation @mymath{\sigma=\sqrt{\lambda}}. In other words, a Poisson distribution (with a sufficiently large @mymath{\lambda}) is simply a Gaussian that has one free parameter (@mymath{\mu=\lambda} and @mymath{\sigma=\sqrt{\lambda}}), instead of the two parameters that the Gaussian distribution originally has (independent @mymath{\mu} and @mymath{\sigma}). @cindex Sky value @cindex Background flux @cindex Undetected objects In real situations, the photons/flux from our targets are combined with photons from a certain background (observationally, the @emph{Sky} value). The Sky value is defined to be the average flux of a region in the dataset with no targets. Its physical origin can be the brightness of the atmosphere (for ground-based instruments), possible stray light within the imaging instrument, the average flux of undetected targets, etc. The Sky value is thus an ideal definition, because in real datasets, what lies deep in the noise (far lower than the detection limit) is never known@footnote{In a real image, a relatively large number of very faint objects can be fully buried in the noise and never detected. These undetected objects will bias the background measurement to slightly larger values. Our best approximation is thus to simply assume they are uniform, and consider their average effect. See Figure 1 (a.1 and a.2) and Section 2.2 in Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}.}. To account for all of these, the sky value is defined to be the average count/value of the undetected regions in the image. In a mock image/dataset, we have the luxury of setting the background (Sky) value. @cindex Simulating noise @cindex Noise simulation In summary, the value in each element of the dataset (pixel in an image) is the sum of contributions from various galaxies and stars (after convolution by the PSF, see @ref{PSF}). Let's name the convolved sum of possibly overlapping objects in each pixel as @mymath{I_{nn}}. @mymath{nn} represents `no noise'. For now, let's assume the background (@mymath{B}) is constant and sufficiently high for the Poisson distribution to be approximated by a Gaussian. Then the flux of that pixel, after adding noise, is @emph{a random value} taken from a Gaussian distribution with the following mean (@mymath{\mu}) and standard deviation (@mymath{\sigma}): @dispmath{\mu=B+I_{nn}, \quad \sigma=\sqrt{B+I_{nn}}} @cindex Bias level in detectors @cindex Dark level in detectors In astronomical instruments, @mymath{B} is enhanced by adding a ``bias'' level to each pixel before the shutter is even opened (for the exposure to start). As the exposure is ongoing and photo-electrons are accumulating from the astronomical objects, a ``dark'' current (due to thermal radiation of the instrument) also builds up in the pixels. The ``dark'' current will accumulate even when the shutter is closed, but the CCD electronics are working (hence the name ``dark''). This added dark level further enhances the mean value in a real observation compared to the raw background value (from the atmosphere for example). Since this type of noise is inherent in the objects we study, it is usually measured on the same scale as the astronomical objects, namely the magnitude system, see @ref{Brightness flux magnitude}. It is then internally converted to the flux scale for further processing. The equations above clearly show the importance of the background value and its effect on the final signal to noise ratio in each pixel of a science image. It is therefore, one of the most important factors in understanding the noise (and properly simulating observations where necessary). An inappropriately bright background value can hide the signal of the mock profile hide behind the noise. In other words, a brighter background has larger standard deviation and vice versa. As a result, the only necessary parameter to define photon-counting noise over a mock image of simulated profiles is the background. For a complete example, see @ref{Sufi simulates a detection}. To better understand the correlation between the mean (or background) value and the noise standard deviation, let's use an analogy. Consider the profile of your galaxy to be analogous to the profile of a ship that is sailing in the sea. The height of the ship would therefore be analogous to the maximum flux difference between your galaxy's minimum and maximum values. Furthermore, let's take the depth of the sea to represent the background value: a deeper sea, corresponds to a brighter background. In this analogy, the ``noise'' would be the height of the waves that surround the ship: in deeper waters, the waves would also be taller (the square root of the mean depth at the ship's position). If the ship is in deep waters, the height of waves are greater than when the ship is near to the beach (at lower depths). Therefore, when the ship is in the middle of the sea, there are high waves that are capable of hiding a significant part of the ship from our perspective. This corresponds to a brighter background value in astronomical images: the resulting noise from that brighter background can completely wash out the signal from a fainter galaxy, star or solar system object. @node Instrumental noise, Final noised pixel value, Photon counting noise, Noise basics @subsubsection Instrumental noise @cindex Readout noise @cindex Instrumental noise @cindex Noise, instrumental While taking images with a camera, a bias current is fed to the pixels, the variation of the value of this bias current over the pixels, also adds to the final image noise. Another source of noise is the readout noise that is produced by the electronics in the detector. Specifically, the parts that attempt to digitize the voltage produced by the photo-electrons in the analog to digital converter. With the current generation of instruments, this source of noise is not as significant as the noise due to the background Sky discussed in @ref{Photon counting noise}. Let @mymath{C} represent the combined standard deviation of all these instrumental sources of noise. When only this source of noise is present, the noised pixel value would be a random value chosen from a Gaussian distribution with @dispmath{\mu=I_{nn}, \quad \sigma=\sqrt{C^2+I_{nn}}} @cindex ADU @cindex Gain @cindex Counts This type of noise is independent of the signal in the dataset, it is only determined by the instrument. So the flux scale (and not magnitude scale) is most commonly used for this type of noise. In practice, this value is usually reported in analog-to-digital units or ADUs, not flux or electron counts. The gain value of the device can be used to convert between these two, see @ref{Brightness flux magnitude}. @node Final noised pixel value, Generating random numbers, Instrumental noise, Noise basics @subsubsection Final noised pixel value Based on the discussions in @ref{Photon counting noise} and @ref{Instrumental noise}, depending on the values you specify for @mymath{B} and @mymath{C} from the above, the final noised value for each pixel is a random value chosen from a Gaussian distribution with @dispmath{\mu=B+I_{nn}, \quad \sigma=\sqrt{C^2+B+I_{nn}}} @node Generating random numbers, , Final noised pixel value, Noise basics @subsubsection Generating random numbers @cindex Random numbers @cindex Numbers, random As discussed above, to generate noise we need to make random samples of a particular distribution. So it is important to understand some general concepts regarding the generation of random numbers. For a very complete and nice introduction we strongly advise reading Donald Knuth's ``The art of computer programming'', volume 2, chapter 3@footnote{Knuth, Donald. 1998. The art of computer programming. Addison--Wesley. ISBN 0-201-89684-2 }. Quoting from the GNU Scientific Library manual, ``If you do not own it, you should stop reading right now, run to the nearest bookstore, and buy it''@footnote{For students, running to the library might be more affordable!}! @cindex Psuedo-random numbers @cindex Numbers, psuedo-random Using only software, we can only produce what is called a psuedo-random sequence of numbers. A true random number generator is a hardware (let's assume we have made sure it has no systematic biases), for example, throwing dice or flipping coins (which have remained from the ancient times). More modern hardware methods use atmospheric noise, thermal noise or other types of external electromagnetic or quantum phenomena. All pseudo-random number generators (software) require a seed to be the basis of the generation. The advantage of having a seed is that if you specify the same seed for multiple runs, you will get an identical sequence of random numbers which allows you to reproduce the same final noised image. @cindex Environment variables @cindex GNU Scientific Library The programs in GNU Astronomy Utilities (for example, MakeNoise or MakeProfiles) use the GNU Scientific Library (GSL) to generate random numbers. GSL allows the user to set the random number generator through environment variables, see @ref{Installation directory} for an introduction to environment variables. In the chapter titled ``Random Number Generation'' they have fully explained the various random number generators that are available (there are a lot of them!). Through the two environment variables @code{GSL_RNG_TYPE} and @code{GSL_RNG_SEED} you can specify the generator and its seed respectively. @cindex Seed, Random number generator @cindex Random number generator, Seed If you do not specify a value for @code{GSL_RNG_TYPE}, GSL will use its default random number generator type. The default type is sufficient for most general applications. If no value is given for the @code{GSL_RNG_SEED} environment variable and you have asked Gnuastro to read the seed from the environment (through the @option{--envseed} option), then GSL will use the default value of each generator to give identical outputs. If you do not explicitly tell Gnuastro programs to read the seed value from the environment variable, then they will use the system time (accurate to within a microsecond) to generate (apparently random) seeds. In this manner, every time you run the program, you will get a different random number distribution. There are two ways you can specify values for these environment variables. You can call them on the same command-line for example: @example $ GSL_RNG_TYPE="taus" GSL_RNG_SEED=345 astarithmetic input.fits \ mknoise-sigma \ --envseed @end example @noindent In this manner the values will only be used for this particular execution of Arithmetic. However, it makes your code hard to read! Alternatively, you can define them for the full period of your terminal session or script, using the shell's @command{export} command with the two separate commands below (for a script remove the @code{$} signs): @example $ export GSL_RNG_TYPE="taus" $ export GSL_RNG_SEED=345 @end example @cindex Startup scripts @cindex @file{.bashrc} @noindent The subsequent programs which use GSL's random number generators will hence forth use these values in this session of the terminal you are running or while executing this script. In case you want to set fixed values for these parameters every time you use the GSL random number generator, you can add these two lines to your @file{.bashrc} startup script@footnote{Do not forget that if you are going to give your scripts (that use the GSL random number generator) to others you have to make sure you also tell them to set these environment variable separately. So for scripts, it is best to keep all such variable definitions within the script, even if they are within your @file{.bashrc}.}, see @ref{Installation directory}. @strong{IMPORTANT NOTE:} If the two environment variables @code{GSL_RNG_TYPE} and @code{GSL_RNG_SEED} are defined, GSL will report them by default, even if you do not use the @option{--envseed} option. For example, see this call to MakeProfiles: @example $ export GSL_RNG_TYPE=taus $ export GSL_RNG_SEED=345 $ astmkprof -s1 --kernel=gaussian,2,5 GSL_RNG_TYPE=taus GSL_RNG_SEED=345 MakeProfiles V.VV started on DDD MMM DDD HH:MM:SS YYYY - Building one gaussian kernel - Random number generator (RNG) type: taus - Basic RNG seed: 1618960836 ---- ./kernel.fits created. -- Output: ./kernel.fits MakeProfiles finished in 0.068945 seconds @end example @noindent @cindex Seed, Random number generator @cindex Random number generator, Seed The first two output lines (showing the names and values of the GSL environment variables) are printed by GSL before MakeProfiles actually starts generating random numbers. Gnuastro's programs will report the actual values they use independently (after the name of the program), you should check them for the final values used, not GSL's printed values. In the example above, did you notice how the random number generator seed above is different between GSL and MakeProfiles? However, if @option{--envseed} was given, both printed seeds would be the same. @node Arithmetic operators, Invoking astarithmetic, Noise basics, Arithmetic @subsection Arithmetic operators In this section, list of recognized operators in Arithmetic (and the Table program's @ref{Column arithmetic}) and discussed in detail with examples. As mentioned before, to be able to easily do complex operations on the command-line, the Reverse Polish Notation is used (where you write `@mymath{4\quad5\quad+}' instead of `@mymath{4 + 5}'), if you are not already familiar with it, before continuing, please see @ref{Reverse polish notation}. The operands to all operators can be a data array (for example, a FITS image or data cube) or a number, the output will be an array or number according to the inputs. For example, a number multiplied by an array will produce an array. The numerical data type of the output of each operator is described within it. Here are some generic tips and tricks (relevant to all operators): @table @asis @item Multiple operators in one command When you need to use arithmetic commands in several consecutive operations, you can use one command instead of multiple commands and perform all calculations in the same command. For example, assume you want to apply a threshold of 10 on your image, and label the connected groups of pixel above this threshold. You need two operators for this: @code{gt} (for ``greater than'', see @ref{Conditional operators}) and @code{connected-components} (see @ref{Mathematical morphology operators}). The bad (non-optimized and slow) way of doing this is to call Arithmetic two times: @example $ astarithmetic image.fits 10 gt --output=thresh.fits $ astarithmetic thresh.fits 2 connected-components \ --output=labeled.fits $ rm thresh.fits @end example The good (optimal) way is to call them after each other (remember @ref{Reverse polish notation}): @example $ astarithmetic image.fits 10 gt 2 connected-components \ --output=labeled.fits @end example You can similarly add any number of operations that must be done sequentially in a single command and benefit from the speed and lack of intermediate files. When your commands become long, you can use the @code{set-AAA} operator to make it more readable, see @ref{Operand storage in memory or a file}. @item Blank pixels in Arithmetic Blank pixels in the image (see @ref{Blank pixels}) will be stored based on the data type. When the input is floating point type, blank values are NaN. One aspect of NaN values is that by definition they will fail on @emph{any} comparison. Also, any operator that includes a NaN as a an operand will produce a NaN (irrespective of its other operands). Hence both equal and not-equal operators will fail when both their operands are NaN! Therefore, the only way to guarantee selection of blank pixels is through the @command{isblank} operator explained above. One way you can exploit this property of the NaN value to your advantage is when you want a fully zero-valued image (even over the blank pixels) based on an already existing image (with same size and world coordinate system settings). The following command will produce this for you: @example $ astarithmetic input.fits nan eq --output=all-zeros.fits @end example @noindent Note that on the command-line you can write NaN in any case (for example, @command{NaN}, or @command{NAN} are also acceptable). Reading NaN as a floating point number in Gnuastro is not case-sensitive. @end table @menu * Basic mathematical operators:: For example, +, -, /, log, and pow. * Trigonometric and hyperbolic operators:: sin, cos, atan, asinh, etc. * Constants:: Physical and Mathematical constants. * Coordinate conversion operators:: For example equatorial J2000 to Galactic. * Unit conversion operators:: Various unit conversions necessary. * Statistical operators:: Statistics of a single dataset (for example, mean). * Stacking operators:: Coadding or combining multiple datasets into one. * Filtering operators:: Smoothing a dataset through mixing pixel with neighbors. * Pooling operators:: Reducing size through statistics of pixels in window. * Interpolation operators:: Giving blank pixels a value. * Dimensionality changing operators:: Collapse or expand a dataset. * Conditional operators:: Select certain pixels within the dataset. * Mathematical morphology operators:: Work on binary images, for example, erode. * Bitwise operators:: Work on bits within one pixel. * Numerical type conversion operators:: Convert the numeric datatype of a dataset. * Random number generators:: Random numbers can be used to add noise for example. * Coordinate and border operators:: Return edges of 2D boxes. * Loading external columns:: Read a column from a table into the stack. * Size and position operators:: Extracting image size and pixel positions. * Building new dataset and stack management:: How to construct an empty dataset from scratch. * Operand storage in memory or a file:: Tools for complex operations in one command. @end menu @node Basic mathematical operators, Trigonometric and hyperbolic operators, Arithmetic operators, Arithmetic operators @subsubsection Basic mathematical operators These are some of the most common operations you will be doing on your data and include, so no further explanation is necessary. If you are new to Gnuastro, just read the description of each carefully. @table @command @item + Addition, so ``@command{4 5 +}'' is equivalent to @mymath{4+5}. For example, in the command below, the value 20000 is added to each pixel's value in @file{image.fits}: @example $ astarithmetic 20000 image.fits + @end example You can also use this operator to sum the values of one pixel in two images (which have to be the same size). For example, in the commands below (which are identical, see paragraph after the commands), each pixel of @file{sum.fits} is the sum of the same pixel's values in @file{a.fits} and @file{b.fits}. @example $ astarithmetic a.fits b.fits + -h1 -h1 --output=sum.fits $ astarithmetic a.fits b.fits + -g1 --output=sum.fits @end example The HDU/extension has to be specified for each image with @option{-h}. However, if the HDUs are the same in all inputs, you can use @option{-g} to only specify the HDU once If you need to add more than one dataset, one way is to use this operator multiple times, for example, see the two commands below that are identical in the Reverse Polish Notation (@ref{Reverse polish notation}): @example $ astarithmetic a.fits b.fits + c.fits + -osum.fits $ astarithmetic a.fits b.fits c.fits + + -osum.fits @end example However, this can get annoying/buggy if you have more than three or four images, in that case, a better way to sum data is to use the @code{sum} operator (which also ignores blank pixels), that is discussed in @ref{Stacking operators}. @cartouche @noindent @strong{NaN values:} if a single argument of @code{+} has a NaN value, the output will also be NaN. To ignore NaN values, use the @code{sum} operator of @ref{Stacking operators}. You can see the difference with the two commands below: @example $ astarithmetic --quiet 1.0 2.0 3.0 nan + + + nan $ astarithmetic --quiet 1.0 2.0 3.0 nan 4 sum 6.000000e+00 @end example The same goes for all the @ref{Stacking operators} so if your data may include NaN pixels, be sure to use the stacking operators. @end cartouche @item - Subtraction, so ``@command{4 5 -}'' is equivalent to @mymath{4-5}. Usage of this operator is similar to @command{+} operator, for example: @example $ astarithmetic 20000 image.fits - $ astarithmetic a.fits b.fits - -g1 --output=sub.fits @end example @item x Multiplication, so ``@command{4 5 x}'' is equivalent to @mymath{4\times5}. For example, in the command below, the value of each output pixel is 5 times its value in @file{image.fits}: @example $ astarithmetic image.fits 5 x @end example And you can multiply the value of each pixel in two images, like this: @example $ astarithmetic a.fits a.fits x -g1 –output=multip.fits @end example @item / Division, so ``@command{4 5 /}'' is equivalent to @mymath{4/5}. Like the multiplication, for example @example $ astarithmetic image.fits 5 -h1 / $ astarithmetic a.fits b.fits / -g1 –output=div.fits @end example @item % Modulo (remainder), so ``@command{3 2 %}'' will return @mymath{1}. Note that the modulo operator only works on integer types (see @ref{Numeric data types}). This operator is therefore not defined for most processed astronomical astronomical images that have floating-point value. However it is useful in labeled images, for example, @ref{Segment output}). In such cases, each pixel is the integer label of the object it is associated with hence with the example command below, we can change the labels to only be between 1 and 4 and decrease all objects on the image to 4/5th (all objects with a label that is a multiple of 5 will be set to 0). @example $ astarithmetic label.fits 5 1 % @end example @item abs Absolute value of first operand, so ``@command{4 abs}'' is equivalent to @mymath{|4|}. For example, the output of the command bellow will not have any negative pixels (all negative pixels will be multiplied by @mymath{-1} to become positive) @example $ astarithmetic image.fits abs @end example @item pow First operand to the power of the second, so ``@command{4.3 5 pow}'' is equivalent to @mymath{4.3^{5}}. For example, with the command below all pixels will be squared @example $ astarithmetic image.fits 2 pow @end example @item sqrt The square root of the first operand, so ``@command{5 sqrt}'' is equivalent to @mymath{\sqrt{5}}. Since the square root is only defined for positive values, any negative-valued pixel will become NaN (blank). The output will have a floating point type, but its precision is determined from the input: if the input is a 64-bit floating point, the output will also be 64-bit. Otherwise, the output will be 32-bit floating point (see @ref{Numeric data types} for the respective precision). Therefore if you require 64-bit precision in estimating the square root, convert the input to 64-bit floating point first, for example, with @code{5 float64 sqrt}. For example, each pixel of the output of the command below will be the square root of that pixel in the input. @example $ astarithmetic image.fits sqrt @end example If you just want to scale an image with negative values using this operator (for better visual inspection, and the actual values do not matter for you), you can subtract the image from its minimum value, then take its square root: @example $ astarithmetic image.fits image.fits minvalue - sqrt -g1 @end example Alternatively, to avoid reading the image into memory two times, you can use the @option{set-} operator to read it into the variable @option{i} and use @option{i} two times to speed up the operation (described below): @example $ astarithmetic image.fits set-i i i minvalue - sqrt @end example @item log Natural logarithm of first operand, so ``@command{4 log}'' is equivalent to @mymath{ln(4)}. Negative pixels will become NaN, and the output type is determined from the input, see the explanation under @command{sqrt} for more on these features. For example, the command below will take the natural logarithm of every pixel in the input. @example $ astarithmetic image.fits log --output=log.fits @end example @item log10 Base-10 logarithm of first popped operand, so ``@command{4 log}'' is equivalent to @mymath{log_{10}(4)}. Negative pixels will become NaN, and the output type is determined from the input, see the explanation under @command{sqrt} for more on these features. For example, the command below will take the base-10 logarithm of every pixel in the input. @example $ astarithmetic image.fits log10 @end example @end table @node Trigonometric and hyperbolic operators, Constants, Basic mathematical operators, Arithmetic operators @subsubsection Trigonometric and hyperbolic operators All the trigonometric and hyperbolic functions are described here. One good thing with these operators is that they take inputs and outputs in degrees (which we usually need as input or output), not radians (like most other programs/libraries). @table @command @item sin @itemx cos @itemx tan @cindex Trigonometry Basic trigonometric functions. They take one operand, in units of degrees. @item asin @itemx acos @itemx atan Inverse trigonometric functions. They take one operand and the returned values are in units of degrees. @item atan2 Inverse tangent (output in units of degrees) that uses the signs of the input coordinates to distinguish between the quadrants. This operator therefore needs two operands: the first popped operand is assumed to be the X axis position of the point, and the second popped operand is its Y axis coordinate. For example, see the commands below. To be more clear, we are using Table's @ref{Column arithmetic} which uses exactly the same internal library function as the Arithmetic program for images. We are showing the results for four points in the four quadrants of the 2D space (if you want to try running them, you do not need to type/copy the parts after @key{#}). The first point (2,2) is in the first quadrant, therefore the returned angle is 45 degrees. But the second, third and fourth points are in the quadrants of the same order, and the returned angles reflect the quadrant. @example $ echo " 2 2" | asttable -c'arith $2 $1 atan2' # --> 45 $ echo " 2 -2" | asttable -c'arith $2 $1 atan2' # --> -45 $ echo "-2 -2" | asttable -c'arith $2 $1 atan2' # --> -135 $ echo "-2 2" | asttable -c'arith $2 $1 atan2' # --> 135 @end example However, if you simply use the classic arc-tangent operator (@code{atan}) for the same points, the result will only be in two quadrants as you see below: @example $ echo " 2 2" | asttable -c'arith $2 $1 / atan' # --> 45 $ echo " 2 -2" | asttable -c'arith $2 $1 / atan' # --> -45 $ echo "-2 -2" | asttable -c'arith $2 $1 / atan' # --> 45 $ echo "-2 2" | asttable -c'arith $2 $1 / atan' # --> -45 @end example @item sinh @itemx cosh @itemx tanh @cindex Hyperbolic functions Hyperbolic sine, cosine, and tangent. These operators take a single operand. @item asinh @itemx acosh @itemx atanh Inverse Hyperbolic sine, cosine, and tangent. These operators take a single operand. @end table @node Constants, Coordinate conversion operators, Trigonometric and hyperbolic operators, Arithmetic operators @subsubsection Constants @cindex Pi During your analysis it is often necessary to have certain constants like the number @mymath{\pi}. The ``operators'' in this section do not actually take any operand, they just replace the desired constant into the stack. So in effect, these are actually operands. But since their value is not inserted by the user, we have placed them in the list of operators. @table @code @item e @cindex e (base of natural logarithm) @cindex Euler's number (@mymath{e}) @cindex Base of natural logarithm (@mymath{e}) Euler’s number, or the base of the natural logarithm (no units). See @url{https://en.wikipedia.org/wiki/E_(mathematical_constant), Wikipedia}. @item pi @cindex Pi Ratio of circle’s circumference to its diameter (no units). See @url{https://en.wikipedia.org/wiki/Pi, Wikipedia}. @item c @cindex Speed of light The speed of light in vacuum, in units of @mymath{m/s}. see @url{https://en.wikipedia.org/wiki/Speed_of_light, Wikipedia}. @item G @cindex @mymath{g} (gravitational constant) @cindex Gravitational constant (@mymath{g}) The gravitational constant, in units of @mymath{m^3/kg/s^2}. See @url{https://en.wikipedia.org/wiki/Gravitational_constant, Wikipedia}. @item h @cindex @mymath{h} (Plank's constant) @cindex Plank's constant (@mymath{h}) Plank's constant, in units of @mymath{J/Hz} or @mymath{kg\times m^2/s}. See @url{https://en.wikipedia.org/wiki/Planck_constant, Wikipedia}. @item au @cindex Astronomical Unit (AU) @cindex AU (Astronomical Unit) Astronomical Unit, in units of meters. See @url{https://en.wikipedia.org/wiki/Astronomical_unit, Wikipedia}. @item ly @cindex Light year Distance covered by light in vacuum in one year, in units of meters. See @url{https://en.wikipedia.org/wiki/Light-year, Wikipedia}. @item avogadro @cindex Avogradro's number Avogadro's constant, in units of @mymath{1/mol}. See @url{https://en.wikipedia.org/wiki/Avogadro_constant, Wikipedia}. @item fine-structure @cindex Fine structure constant The fine-structure constant (no units). See @url{https://en.wikipedia.org/wiki/Fine-structure_constant, Wikipedia}. @end table @node Coordinate conversion operators, Unit conversion operators, Constants, Arithmetic operators @subsubsection Coordinate conversion operators @cindex Galactic coordinate system @cindex Ecliptic coordinate system @cindex Equatorial coordinate system Different celestial coordinate systems are useful for different scenarios. For example, assume you have the RA and Dec of large sample of galaxies that you plan to study the halos of galaxies from. For such studies, you prefer to stay as far away as possible from the Galactic plane, because the density of stars and interstellar filaments (cirrus) significantly increases as you get close to the Milky way's disk. But the @url{https://en.wikipedia.org/wiki/Equatorial_coordinate_system, Equatorial coordinate system} which defines the RA and Dec and is based on Earth's equator; and does not show the position of your objects in relation to the galactic disk. The best way forward in the example above is to convert your RA and Dec table into the @url{https://en.wikipedia.org/wiki/Galactic_coordinate_system, Galactic coordinate system}; and select those with a large (positive or negative) Galactic latitude. Alternatively, if you observe a bright point on a galaxy and want to confirm if it was actually a super-nova and not a moving asteroid, a first step is to convert your RA and Dec to the @url{https://en.wikipedia.org/wiki/Ecliptic_coordinate_system, Ecliptic coordinate system} and confirm if you are sufficiently distant from the ecliptic (plane of the Solar System; where fast moving objects are most common). The operators described in this section are precisely for the purpose above: to convert various celestial coordinate systems that are supported within Gnuastro into each other. For example, if you want to convert the RA and Dec equatorial (at the Julian year 2000 equinox) coordinates (within the @code{RA} and @code{DEC} columns) of @file{points.fits} into Galactic longitude and latitude, you can use the command below (the column metadata are not mandatory, but to avoid later confusion, it is always good to have them in your output. @example $ asttable points.fits -c'arith RA DEC eq-j2000-to-galactic' \ --colmetadata=1,GLON,deg,"Galactic longitude" \ --colmetadata=2,GLAT,deg,"Galactic latitude" \ --output=points-gal.fits @end example One important thing to consider is that the equatorial and ecliptic coordinates are not static: they include the dynamics of Earth in the solar system: in particular, the reference point on the equator moves over decades. Therefore these two (equatorial and ecliptic) coordinate systems are defined within epochs: the 1950 epoch is defined by @url{https://en.wikipedia.org/wiki/Epoch_(astronomy)#Besselian_years, Besselian years}, while the 2000 epoch is defined in @url{https://en.wikipedia.org/wiki/Epoch_(astronomy)#Julian_years_and_J2000, Julian years}. So when dealing with these coordinates one of the `@code{-b1950}' or `@code{-j2000}' suffixes are necessary (for example @code{eq-j2000} or @code{ec-b1950}). @cindex ICRS The Galactic or Supergalactic coordinates are not defined based on the Earth's dynamics; therefore they do not have any epoch associated with them. Extra-galactic studies do not depend on the dynamics of the earth, but the equatorial coordinate system is the most dominant in that field. Therefore in its 23rd General Assembly, the International Astronomical Union approved the @url{https://en.wikipedia.org/wiki/International_Celestial_Reference_System_and_its_realizations, International Celestial Reference System} or ICRS based on quasars (which are static within our observational limitations)viewed through long baseline radio interferometry (the most accurate method of observation that we currently have). ICRS is designed to be within the errors of the Equatorial J2000 coordinate system, so they are currently very similar; but ICRS has much better accuracy. We will be adding ICRS in the operators below soon. @strong{Floating point errors:} The operation to convert between the coordinate systems involves many sines, cosines (and their inverse). Therefore, floating point errors (due to the limited precision of the definition of floating points in bits) can cause small offsets. For example see the code below were we convert equatorial to galactic and back, then compare the input and output (which is in the 5th and 6th decimal of a degree; or about 0.2 or 0.01 arcseconds). @example $ sys1=eq-j2000 $ sys2=galactic $ echo "10.2345689 45.6789012" \ | asttable -Afixed -B8 \ -c'arith $1 $2 '$sys1'-to-'$sys2' \ '$sys2'-to-'$sys1' set-lat set-lng \ lng $1 - lat $2 -' 0.00000363 -0.00007725 @end example If you set @code{sys2=ec-j2000} or @code{sys2=supergalactic}, it will be zero until the full set of 8 decimals that are printed here (the displayed precision can be changed with the value of the @code{-B} option above). It is therefore useful to have your original coordinates (in the same table for example) and not do too many conversions on conversions (to propagate this problem). @table @code @item eq-b1950-to-eq-j2000 @itemx eq-b1950-to-ec-b1950 @itemx eq-b1950-to-ec-j2000 @itemx eq-b1950-to-galactic @itemx eq-b1950-to-supergalactic Convert Equatorial (B1950 equinox) coordinates into the respective coordinate system within each operator's name. @item eq-j2000-to-eq-b1950 @itemx eq-j2000-to-ec-b1950 @itemx eq-j2000-to-ec-j2000 @itemx eq-j2000-to-galactic @itemx eq-j2000-to-supergalactic Convert Equatorial (J2000 equinox) coordinates into the respective coordinate system within each operator's name. @item ec-b1950-to-eq-b1950 @itemx ec-b1950-to-eq-j2000 @itemx ec-b1950-to-ec-j2000 @itemx ec-b1950-to-galactic @itemx ec-b1950-to-supergalactic Convert Ecliptic (B1950 equinox) coordinates into the respective coordinate system within each operator's name. @item ec-j2000-to-eq-b1950 @itemx ec-j2000-to-eq-j2000 @itemx ec-j2000-to-ec-b1950 @itemx ec-j2000-to-galactic @itemx ec-j2000-to-supergalactic Convert Ecliptic (J2000 equinox) coordinates into the respective coordinate system within each operator's name. @item galactic-to-eq-b1950 @itemx galactic-to-eq-j2000 @itemx galactic-to-ec-b1950 @itemx galactic-to-ec-j2000 @itemx galactic-to-supergalactic Convert Galactic coordinates into the respective coordinate system within each operator's name. @item supergalactic-to-eq-b1950 @itemx supergalactic-to-eq-j2000 @itemx supergalactic-to-ec-b1950 @itemx supergalactic-to-ec-j2000 @itemx supergalactic-to-galactic Convert Supergalactic coordinates into the respective coordinate system within each operator's name. @end table @node Unit conversion operators, Statistical operators, Coordinate conversion operators, Arithmetic operators @subsubsection Unit conversion operators It often happens that you have data in one unit (for example, counts on your CCD), but would like to convert it into another (for example, magnitudes, to measure the brightness of a galaxy). While the equations for the unit conversions can be easily found on the internet, the operators in this section are designed to simplify the process and let you do it easily and fast without having to remember constants and relations. @table @command @item counts-to-mag Convert counts (usually CCD outputs) to magnitudes using the given zero point. The zero point is the first popped operand and the count image or value is the second popped operand. For example, assume you have measured the standard deviation of the noise in an image to be @code{0.1} counts, and the image's zero point is @code{22.5} and you want to measure the @emph{per-pixel} surface brightness limit of the dataset@footnote{The @emph{per-pixel} surface brightness limit is the magnitude of the noise standard deviation. For more on surface brightness see @ref{Brightness flux magnitude}. In the example command, because the output is a single number, we are using @option{--quiet} to avoid printing extra information.}. To apply this operator on an image, simply replace @code{0.1} with the image name, as described below. @example $ astarithmetic 0.1 22.5 counts-to-mag --quiet @end example Of course, you can also convert every pixel in an image (or table column in Table's @ref{Column arithmetic}) with this operator if you replace the second popped operand with an image/column name. For an example of applying this operator on an image, see the description of surface brightness in @ref{Brightness flux magnitude}, where we will convert an image's pixel values to surface brightness. @item mag-to-counts Convert magnitudes to counts (usually CCD outputs) using the given zero point. The zero point is the first popped operand and the magnitude value is the second. For example, if an object has a magnitude of 20, you can estimate the counts corresponding to it (when the image has a zero point of 24.8) with this command: Note that because the output is a single number, we are using @option{--quiet} to avoid printing extra information. @example $ astarithmetic 20 24.8 mag-to-counts --quiet @end example @item counts-to-sb Convert counts to surface brightness using the zero point and area (in units of arcsec@mymath{^2}). The first popped operand is the area (in arcsec@mymath{^2}), the second popped operand is the zero point and the third are the count values. Estimating the surface brightness involves taking the logarithm. Therefore this operator will produce NaN for counts with a negative value. For example, with the commands below, we read the zero point from the image headers (assuming it is in the @code{ZPOINT} keyword), we calculate the pixel area from the image itself, and we call this operator to convert the image pixels (in counts) to surface brightness (mag/arcsec@mymath{^2}). @example $ zeropoint=$(astfits image.fits --keyvalue=ZPOINT -q) $ pixarea=$(astfits image.fits --pixelareaarcsec2) $ astarithmetic image.fits $zeropoint $pixarea counts-to-sb \ --output=image-sb.fits @end example For more on the definition of surface brightness see @ref{Brightness flux magnitude}, and for a fully tutorial on optimal usage of this, see @ref{FITS images in a publication}. @item sb-to-counts Convert surface brightness using the zero point and area (in units of arcsec@mymath{^2}) to counts. The first popped operand is the area (in arcsec@mymath{^2}), the second popped operand is the zero point and the third are the surface brightness values. See the description of @command{counts-to-sb} for more. @item mag-to-sb Convert magnitudes to surface brightness over a certain area (in units of arcsec@mymath{^2}). The first popped operand is the area and the second is the magnitude. For example, let's assume you have a table with the two columns of magnitude (called @code{MAG}) and area (called @code{AREAARCSEC2}). In the command below, we will use @ref{Column arithmetic} to return the surface brightness. @example $ asttable table.fits -c'arith MAG AREAARCSEC2 mag-to-sb' @end example @item sb-to-mag Convert surface brightness to magnitudes over a certain area (in units of arcsec@mymath{^2}). The first popped operand is the area and the second is the magnitude. See the description of @code{mag-to-sb} for more. @item counts-to-jy @cindex AB magnitude @cindex Magnitude, AB Convert counts (usually CCD outputs) to Janskys through an AB-magnitude based zero point. The top-popped operand is assumed to be the AB-magnitude zero point and the second-popped operand is assumed to be a dataset in units of counts (an image in Arithmetic, and a column in Table's @ref{Column arithmetic}). For the full equation and basic definitions, see @ref{Brightness flux magnitude}. @cindex SDSS @cindex Nanomaggy For example, SDSS images are calibrated in units of nanomaggies, with a fixed zero point magnitude of 22.5. Therefore you can convert the units of SDSS image pixels to Janskys with the command below: @example $ astarithmetic sdss-image.fits 22.5 counts-to-jy @end example @item jy-to-counts Convert Janskys to counts (usually CCD outputs) through an AB-magnitude based zero point. This is the inverse operation of the @code{counts-to-jy}, see there for usage example. @item counts-to-nanomaggy @cindex Nanomaggy Convert counts to Nanomaggy (with fixed zero point of 22.5, used as the pixel units of many surveys like SDSS). For example if your image has a zero point of 24.93, you can convert it to Nanomaggies with the command below: @example $ astarithmetic image.fits 24.93 counts-to-nanomaggy @end example @item nanomaggy-to-counts @cindex Nanomaggy Convert Nanomaggy to counts. Nanomaggy is defined to have a fixed zero point of 22.5 and is the pixel units of many surveys like SDSS. For example if you would like to convert an image in units of Nanomaggy (for example from SDSS) to the counts of a camera with a zero point of 25.92, you can use the command below: @example $ astarithmetic image.fits 25.92 nanomaggy-to-counts @end example @item mag-to-jy Convert AB magnitudes to Janskys, see @ref{Brightness flux magnitude}. @item jy-to-mag Convert Janskys to AB magnitude, see @ref{Brightness flux magnitude}. @item au-to-pc @cindex Parsecs @cindex Astronomical Units (AU) Convert Astronomical Units (AUs) to Parsecs (PCs). This operator takes a single argument which is interpreted to be the input AUs. The conversion is based on the definition of Parsecs: @mymath{1 \rm{PC} = 1/tan(1^{\prime\prime}) \rm{AU}}, where @mymath{1^{\prime\prime}} is one arcseconds. In other words, @mymath{1 (\rm{PC}) = 648000/\pi (\rm{AU})}. For example, if we take Pluto's average distance to the Sun to be 40 AUs, we can obtain its distance in Parsecs using this command: @example echo 40 | asttable -c'arith $1 au-to-pc' @end example @item pc-to-au Convert Parsecs (PCs) to Astronomical Units (AUs). This operator takes a single argument which is interpreted to be the input PCs. For more on the conversion equation, see description of @code{au-to-pc}. For example, Proxima Centauri (the nearest star to the Solar system) is 1.3020 Parsecs from the Sun, we can calculate this distance in units of AUs with the command below: @example echo 1.3020 | asttable -c'arith $1 pc-to-au' @end example @item ly-to-pc @cindex Light-year Convert Light-years (LY) to Parsecs (PCs). This operator takes a single argument which is interpreted to be the input LYs. The conversion is done from IAU's definition of the light-year (9460730472580800 m @mymath{\approx} 63241.077 AU = 0.306601 PC, for the conversion of AU to PC, see the description of @code{au-to-pc}). For example, the distance of Andromeda galaxy to our galaxy is 2.5 million light-years, so its distance in kilo-Parsecs can be calculated with the command below (note that we want the output in kilo-parsecs, so we are dividing the output of this operator by 1000): @example echo 2.5e6 | asttable -c'arith $1 ly-to-pc 1000 /' @end example @item pc-to-ly Convert Parsecs (PCs) to Light-years (LY). This operator takes a single argument which is interpreted to be the input PCs. For the conversion and an example of the inverse of this operator, see the description of @code{ly-to-pc}. @item ly-to-au Convert Light-years (LY) to Astronomical Units (AUs). This operator takes a single argument which is interpreted to be the input LYs. For the conversion and a similar example, see the description of @code{ly-to-pc}. @item au-to-ly Convert Astronomical Units (AUs) to Light-years (LY). This operator takes a single argument which is interpreted to be the input AUs. For the conversion and a similar example, see the description of @code{ly-to-pc}. @end table @node Statistical operators, Stacking operators, Unit conversion operators, Arithmetic operators @subsubsection Statistical operators The operators in this section take a single dataset as input, and will return the desired statistic as a single value. @table @command @item minvalue Minimum value in the first popped operand, so ``@command{a.fits minvalue}'' will push the minimum pixel value in this image onto the stack. When this operator acts on a single image, the output (operand that is put back on the stack) will no longer be an image, but a number. The output of this operand is in the same type as the input. This operator is mainly intended for multi-element datasets (for example, images or data cubes), if the popped operand is a number, it will just return it without any change. Note that when the final remaining/output operand is a single number, it is printed onto the standard output. For example, with the command below the minimum pixel value in @file{image.fits} will be printed in the terminal: @example $ astarithmetic image.fits minvalue @end example However, the output above also includes a lot of extra information that are not relevant in this context. If you just want the final number, run Arithmetic in quiet mode: @example $ astarithmetic image.fits minvalue -q @end example Also see the description of @option{sqrt} for other example usages of this operator. @item maxvalue Maximum value of first operand in the same type, similar to @command{minvalue}, see the description there for more. For example @example $ astarithmetic image.fits maxvalue -q @end example @item numbervalue Number of non-blank elements in first operand in the @code{uint64} type (since it is always a positive integer, see @ref{Numeric data types}). Its usage is similar to @command{minvalue}, for example @example $ astarithmetic image.fits numbervalue -q @end example @item sumvalue Sum of non-blank elements in first operand in the @code{float32} type. Its usage is similar to @command{minvalue}, for example @example $ astarithmetic image.fits sumvalue -q @end example @item meanvalue Mean value of non-blank elements in first operand in the @code{float32} type. Its usage is similar to @command{minvalue}, for example @example $ astarithmetic image.fits meanvalue -q @end example @item stdvalue Standard deviation of non-blank elements in first operand in the @code{float32} type. Its usage is similar to @command{minvalue}, for example @example $ astarithmetic image.fits stdvalue -q @end example @item medianvalue Median of non-blank elements in first operand with the same type. Its usage is similar to @command{minvalue}, for example @example $ astarithmetic image.fits medianvalue -q @end example @item unique Remove all duplicate (and blank) elements from the first popped operand. The unique elements of the dataset will be stored in a single-dimensional dataset. Recall that by default, single-dimensional datasets are stored as a table column in the output. But you can use @option{--onedasimage} or @option{--onedonstdout} to respectively store them as a single-dimensional FITS array/image, or to print them on the standard output. Although you can use this operator on the floating point dataset, due to floating-point errors it may give non-reasonable values: because the tenth digit of the decimal point is also considered although it may be statistically meaningless, see @ref{Numeric data types}. It is therefore better/recommended to use it on the integer dataset like the labeled images of @ref{Segment output} where each pixel has the integer label of the object/clump it is associated with. For example, let's assume you have cropped a region of a larger labeled image and want to find the labels/objects that are within the crop. With this operator, this job is trivial: @example $ astarithmetic seg-crop.fits unique @end example @item noblank Remove all blank elements from the first popped operand. Since the blank pixels are being removed, the output dataset will always be single-dimensional, independent of the dimensionality of the input. Recall that by default, single-dimensional datasets are stored as a table column in the output. But you can use @option{--onedasimage} or @option{--onedonstdout} to respectively store them as a single-dimensional FITS array/image, or to print them on the standard output. For example, with the command below, the non-blank pixel values of @file{cropped.fits} are printed on the command-line (the @option{--quiet} option is used to remove the extra information that Arithmetic prints as it reads the inputs, its version and its running time). @example $ astarithmetic cropped.fits noblank --onedonstdout --quiet @end example @end table @node Stacking operators, Filtering operators, Statistical operators, Arithmetic operators @subsubsection Stacking operators @cindex Stacking @cindex Coaddition The operators in this section are used when you have multiple datasets that you would like to merge into one, commonly known as ``stacking'' or ``coaddition''. For example, you have taken ten exposures of your scientific target, and you would like to combine them all into one deep stacked image that is deeper. When calling these operators you should determine how many operands they should take in (unlike the rest of the operators that have a fixed number of input operands). As described in the first operand below, you do this through their first popped operand (which should be a single integer number that is larger than one). Below are Some important points for all the stacking operators described in this section: @itemize @item @cindex NaN NaN/blank pixels will be ignored, see @ref{Blank pixels}. @item The output will have the same type as the inputs. This is natural for the @command{min} and @command{max} operators, but for other similar operators (for example, @command{sum}, or @command{average}) the per-pixel operations will be done in double precision floating point and then stored back in the input type. Therefore, if the input was an integer, C's internal type conversion will be used. @item The operation will be multi-threaded, greatly speeding up the process if you have large and numerous data to stack. You can disable multi-threaded operations with the @option{--numthreads=1} option (see @ref{Multi-threaded operations}). @end itemize @table @command @item min @itemx max @itemx sum @itemx std @itemx mad @itemx mean @itemx median @itemx number For each pixel, calculate the respective statistic from in all given datasets. For the @code{min} and @code{max} operators, the output will have the same type as the input. For the @code{number} operator, the output will have an unsigned 32-bit integer type and the rest will be 32-bit floating point. The first popped operand to this operator must be a positive integer number which specifies how many further operands should be popped from the stack. All the subsequently popped operands must have the same type and size. This operator (and all the variable-operand operators similar to it that are discussed below) will work in multi-threaded mode unless Arithmetic is called with the @option{--numthreads=1} option, see @ref{Multi-threaded operations}. For example, the following command will produce an image with the same size and type as the three inputs, but each output pixel value will be the minimum of the same pixel's values in all three input images. @example $ astarithmetic a.fits b.fits c.fits 3 min --output=min.fits @end example Regarding the @code{number} operator: some datasets may have blank values (which are also ignored in all similar operators like @command{min}, @command{sum}, @command{mean} or @command{median}). Hence, the final pixel values of this operator will not, in general, be equal to the number of inputs. This operator is therefore mostly called in parallel with those operators to know the ``weight'' of each pixel (in case you want to only keep pixels that had the full exposure for example). @item quantile For each pixel, find the quantile from all given datasets. The output will have the same numeric data type and size as the input datasets. Besides the input datasets, the quantile operator also needs a single parameter (the requested quantile). The parameter should be the first popped operand, with a value between (and including) 0 and 1. The second popped operand must be the number of datasets to use. In the example below, the first-popped operand (@command{0.7}) is the quantile, the second-popped operand (@command{3}) is the number of datasets to pop. @example astarithmetic a.fits b.fits c.fits 3 0.7 quantile @end example @item madclip-fill-mad @itemx madclip-fill-std @itemx madclip-fill-mean @itemx madclip-fill-median @itemx madclip-fill-number @cindex Median absolute deviation (MAD) @cindex MAD (Median absolute deviation) Find the respective statistic after median absolute deviation (MAD) filled re-clipping of the values of the same element (pixel in an image) of all the inputs. For a complete tutorial on clipping outliers see @ref{Clipping outliers} (if you haven't read it yet, we encourage you to read through it before continuing). For the particular case of filled re-clipping (the @code{madclip-fill-*} operators here) see @ref{Filled re-clipping}. Spoiler alert: this is currently the most robust stacking operator in Gnuastro. The output data type of all these operators is a 32-bit floating point number, except for @code{madclip-fill-number}, where an unsigned 32-bit integer is returned (see @ref{Numeric data types}). This operator will combine the given inputs into a single output of the same dimension as one of the inputs. Each pixel of the output contains the requested statistic from the remaining values after filled MAD re-clipping. This operator is very similar to @command{min}, with the exception that it expects two extra operands (parameters for MAD-clipping) before the total number of inputs. The first popped operand is the termination criteria and the second is the multiple of the median absolute deviation. For example, in the command below, the first popped operand (@command{0.01}) is the MAD-clipping termination criteria. If the termination criteria is larger than, or equal to, 1 it is interpreted as a pre-defined the number of clips. But if it is between 0 and 1, then it is the tolerance level on the change in the median absolute deviation (see @ref{MAD clipping}). The second popped operand (@command{5}) is the multiple of the median absolute deviation to use in MAD-clipping. The third popped operand (@command{3}) is number of datasets that will be used (similar to the first popped operand to @command{min}). @example $ astarithmetic a.fits b.fits c.fits 3 5 0.01 madclip-fill-std @end example @item madclip-mad @itemx madclip-std @itemx madclip-mean @itemx madclip-median @itemx madclip-number Find the number of useful values after median absolute deviation (MAD) clipping of the values of the same element (pixel in an image) of all the inputs. These operators are called in an identical fashion to the @code{madclip-fill-*} operators described above; see the description there for more. @item sigclip-fill-number Find the number of useful values after filled sigma (@mymath{\sigma}, which stands for the standard deviation) re-clipping of the values of the same element (pixel in an image) of all the inputs. For a complete tutorial on clipping outliers see @ref{Clipping outliers} (if you haven't read it yet, we encourage you to read through it before continuing). For the particular case of filled re-clipping (the @code{sigclip-fill-*} operators here) see @ref{Filled re-clipping}. Spoiler alert: MAD filled re-clipping is currently most robust stacking operator in Gnuastro (the @code{madclip-fill-*} operators). This operator will combine the specified number of inputs into a single output that contains the number of remaining elements after @mymath{\sigma}-clipping on each element/pixel (for more on @mymath{\sigma}-clipping, see @ref{Sigma clipping}). This operator is very similar to @command{min}, with the exception that it expects two operands (parameters for @mymath{\sigma}-clipping) before the total number of inputs. The first popped operand is the termination criteria and the second is the multiple of @mymath{\sigma}. For example, in the command below, the first popped operand (@command{0.2}) is the sigma clipping termination criteria. If the termination criteria is larger than, or equal to, 1 it is interpreted as the number of clips to do. But if it is between 0 and 1, then it is the tolerance level on the standard deviation (see @ref{Sigma clipping}). The second popped operand (@command{5}) is the multiple of sigma to use in @mymath{\sigma}-clipping. The third popped operand (@command{10}) is number of datasets that will be used (similar to the first popped operand to @command{min}). @example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-fill-number @end example @item sigclip-fill-median For each pixel, find the @mymath{\sigma}-clipped median in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the @command{sigclip-fill-number} operator, please see there for more. For example @example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-fill-median @end example @item sigclip-fill-mean For each pixel, find the @mymath{\sigma}-clipped mean in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the @command{sigclip-fill-number} operator, please see there for more. For example @example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-fill-mean @end example @item sigclip-fill-std For each pixel, find the @mymath{\sigma}-clipped standard deviation in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the @command{sigclip-fill-number} operator, please see there for more. For example @example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-fill-std @end example @item sigclip-fill-mad For each pixel, find the @mymath{\sigma}-clipped median absolute deviation (MAD) in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the @command{sigclip-fill-number} operator, please see there for more. For example @example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-fill-mad @end example @item sigclip-number Find the number of useful values after sigma (@mymath{\sigma}, which stands for the standard deviation) clipping of the values of the same element (pixel in an image) of all the inputs. For a complete tutorial on clipping outliers see @ref{Clipping outliers} (if you haven't read it yet, we encourage you to read through it before continuing). For the particular case of @mymath{\sigma}-clipping (the @code{sigclip-*} operators here) see @ref{Sigma clipping}. Spoiler alert: MAD filled re-clipping is currently most robust stacking operator in Gnuastro (the @code{madclip-fill-*} operators). This operator will combine the specified number of inputs into a single output that contains the number of remaining elements after @mymath{\sigma}-clipping on each element/pixel (for more on @mymath{\sigma}-clipping, see @ref{Sigma clipping}). This operator is very similar to @command{min}, with the exception that it expects two operands (parameters for @mymath{\sigma}-clipping) before the total number of inputs. The first popped operand is the termination criteria and the second is the multiple of @mymath{\sigma}. For example, in the command below, the first popped operand (@command{0.2}) is the sigma clipping termination criteria. If the termination criteria is larger than, or equal to, 1 it is interpreted as the number of clips to do. But if it is between 0 and 1, then it is the tolerance level on the standard deviation (see @ref{Sigma clipping}). The second popped operand (@command{5}) is the multiple of sigma to use in @mymath{\sigma}-clipping. The third popped operand (@command{10}) is number of datasets that will be used (similar to the first popped operand to @command{min}). @example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-number @end example @item sigclip-median For each pixel, find the @mymath{\sigma}-clipped median in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the @command{sigclip-number} operator, please see there for more. For example @example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-median @end example @item sigclip-mean For each pixel, find the @mymath{\sigma}-clipped mean in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the @command{sigclip-number} operator, please see there for more. For example @example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-mean @end example @item sigclip-std For each pixel, find the @mymath{\sigma}-clipped standard deviation in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the @command{sigclip-number} operator, please see there for more. For example @example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-std @end example @item sigclip-mad For each pixel, find the @mymath{\sigma}-clipped median absolute deviation (MAD) in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the @command{sigclip-number} operator, please see there for more. For example @example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-mad @end example @end table @node Filtering operators, Pooling operators, Stacking operators, Arithmetic operators @subsubsection Filtering (smoothing) operators Image filtering is commonly used for smoothing: every pixel value in the output image is created by applying a certain statistic to the pixels in its vicinity. @table @command @item filter-mean Apply mean filtering (or @url{https://en.wikipedia.org/wiki/Moving_average, moving average}) on the input dataset. During mean filtering, each pixel (data element) is replaced by the mean value of all its surrounding pixels (excluding blank values). The number of surrounding pixels in each dimension (to calculate the mean) is determined through the earlier operands that have been pushed onto the stack prior to the input dataset. The number of necessary operands is determined by the dimensions of the input dataset (first popped operand). The order of the dimensions on the command-line is the order in FITS format. Here is one example: @example $ astarithmetic 5 4 image.fits filter-mean @end example @noindent In this example, each pixel is replaced by the mean of a 5 by 4 box around it. The box is 5 pixels along the first FITS dimension (horizontal when viewed in ds9) and 4 pixels along the second FITS dimension (vertical). Each pixel will be placed in the center of the box that the mean is calculated on. If the given width along a dimension is even, then the center is assumed to be between the pixels (not in the center of a pixel). When the pixel is close to the edge, the pixels of the box that fall outside the image are ignored. Therefore, on the edge, less points will be used in calculating the mean. The final effect of mean filtering is to smooth the input image, it is essentially a convolution with a kernel that has identical values for all its pixels (is flat), see @ref{Convolution process}. Note that blank pixels will also be affected by this operator: if there are any non-blank elements in the box surrounding a blank pixel, in the filtered image, it will have the mean of the non-blank elements, therefore it will not be blank any more. If blank elements are important for your analysis, you can use the @code{isblank} operator with the @code{where} operator to set them back to blank after filtering. For example in the command below, we are first filtering the image, then setting its original blank elements back to blank in the output of filtering (all within one Arithmetic command). Note how we are using the @code{set-} operator to give names to the temporary outputs of steps and simplify the code (see @ref{Operand storage in memory or a file}). @example $ astarithmetic image.fits -h1 set-in \ 5 4 in filter-mean set-filtered \ filtered in isblank nan where \ --output=out.fits @end example @item filter-median Apply @url{https://en.wikipedia.org/wiki/Median_filter, median filtering} on the input dataset. This is very similar to @command{filter-mean}, except that instead of the mean value of the box pixels, the median value is used to replace a pixel value. For more on how to use this operator, please see @command{filter-mean}. The median is less susceptible to outliers compared to the mean. As a result, after median filtering, the pixel values will be more discontinuous than mean filtering. @item filter-sigclip-mean Apply a @mymath{\sigma}-clipped mean filtering onto the input dataset. This is very similar to @code{filter-mean}, except that all outliers (identified by the @mymath{\sigma}-clipping algorithm) have been removed, see @ref{Sigma clipping} for more on the basics of this algorithm. As described there, two extra input parameters are necessary for @mymath{\sigma}-clipping: the multiple of @mymath{\sigma} and the termination criteria. @code{filter-sigclip-mean} therefore needs to pop two other operands from the stack after the dimensions of the box. For example, the line below uses the same box size as the example of @code{filter-mean}. However, all elements in the box that are iteratively beyond @mymath{3\sigma} of the distribution's median are removed from the final calculation of the mean until the change in @mymath{\sigma} is less than @mymath{0.2}. @example $ astarithmetic 3 0.2 5 4 image.fits filter-sigclip-mean @end example The median (which needs a sorted dataset) is necessary for @mymath{\sigma}-clipping, therefore @code{filter-sigclip-mean} can be significantly slower than @code{filter-mean}. However, if there are strong outliers in the dataset that you want to ignore (for example, emission lines on a spectrum when finding the continuum), this is a much better solution. @item filter-sigclip-median Apply a @mymath{\sigma}-clipped median filtering onto the input dataset. This operator and its necessary operands are almost identical to @code{filter-sigclip-mean}, except that after @mymath{\sigma}-clipping, the median value (which is less affected by outliers than the mean) is added back to the stack. @end table @node Pooling operators, Interpolation operators, Filtering operators, Arithmetic operators @subsubsection Pooling operators @cindex Pooling @cindex Convolutional Neural Networks Pooling is one way of reducing the complexity of the input image by grouping multiple input pixels into one output pixel (using any statistical measure). As a result, the output image has fewer pixels (less complexity). In Computer Vision, Pooling is commonly used in @url{https://en.wikipedia.org/wiki/Convolutional_neural_network, Convolutional Neural Networks} (CNNs). @cindex Stride In pooling, the inputs are an image (e.g., a FITS file) and a square window pixel size that is known as a pooling window. The window has to be smaller than the input's number of pixels in both dimensions and its width is called the ``pool size''. The pooling window starts at the top-left corner pixel of the input and calculates statistical operations on the pixels that overlap with it. It slides forward by the ``stride'' pixels, moving over all pixels in the input from the top-left corner to the bottom-right corner, and repeats the same calculation for the overlapping pixels in each position. Usually, the stride (or spacing between the windows as they slide over the input) is equal to the window-size. In other words, in pooling, the separate ``windows'' do not overlap with each other on the input. However, you can choose any size for the stride. Remember this, It's crucial to ensure that the stride size is less than the pool size. If not, some pixels may be missed during the pooling process. Therefore there are two major differences with @ref{Spatial domain convolution} or @ref{Filtering operators}, but pooling has some similarities to the @ref{Warp}. @itemize @item In convolution or filtering the input and output sizes are the same. However, when the stride is larger than 1 then, the output of pooling must have fewer pixels. @item In convolution or filters, the kernels slide over the input in a pixel-by-pixel manner. As a result, the same pixel's value will be used in many of the output pixels. However, in pooling each input pixel may be only used in a single output pixel (if the stride and the pool size are the same). @item Special cases of Warping an image are similar to pooling. For example calling @code{pool-sum} with pool size of 2 will give the same pixel values (except the outer edges) as giving the same image to @command{astwarp} with @option{--scale=1/2 --centeroncorner}. However, warping will only provide the sum of the input pixels, there is no easy way to generically define something like @code{pool-max} in Warp (which is far more general than pooling). Also, due to its generic features (for example for non-linear warps), Warp is slower than the @code{pool-max} that is introduced here. @end itemize @cartouche @noindent @strong{No WCS in output:} As of Gnuastro @value{VERSION}, the output of pooling will not contain WCS information (primarily due to a lack of time by developers). Please inform us of your interest in having it, by contacting us at @command{bug-gnuastro@@gnu.org}. If you need @code{pool-sum}, you can use @ref{Warp} (which also modifies the WCS, see note above). @end cartouche If the width or height of input is not divisible by the stride size, the pool window will go beyond the input pixel grid. In this case, the window pixels that do not overlap with the input are given a blank value (and thus ignored in the calculation of the desired statistical operation). The simple ASCII figure below shows the pooling operation where the input is a @mymath{3\times3} pixel image with a pool size of 2 pixels. In the center of the second row, you see the intermediate input matrix that highlights how the input and output pixels relate with each other. Since the input is @mymath{3\times3} and we have a stride size of 2, as mentioned above blank pseudo-pixels are added with a value of @code{B} (for blank). @example Pool window: Input: +-----------+ +-------------+ | | | | 10 12 9 | | _ _ | _ _ |___________________________| 31 4 1 | | | | || || | 16 5 8 | | | | || || +-------------+ +-----------+ || || The pooling window 2*2 || || stride 2 \/ \/ +---------------------+ |/ 10 12\|/ 9 B \| | | | +-------+ pool-min |\ 31 4 /|\ 1 B /| pool-max +-------+ | 4 1 | /------ |---------------------| ------\ |31 9 | | 5 8 | \------ |/ 16 5 \|/ 8 B \| ------/ |16 8 | +-------+ | | | +-------+ |\ B B /.\ B B /| +---------------------+ @end example The choice of the statistic to use depends on the specific use case, the characteristics of the input data, and the desired output. Each statistic has its advantages and disadvantages and the choice of which to use should be informed by the specific needs of the problem at hand. Below, the various pool operators of arithmetic are listed: @table @command @item pool-max Apply max-pooling on the input dataset. This operator takes three operands: the first popped operand is the stride and the second is the width of the square pooling window (which should be a single integer). Also, The third operand should be the input image. Within the pooling window, this operator will place the largest value in the output pixel (any blank pixels will be ignored). See the ASCII diagram above for a demonstration of how max-pooling works. Here is an example of using this operator: @example $ astarithmetic image.fits 2 2 pool-max @end example Max-pooling retains the largest value of the input window in the output, so the returned image is sharper where you have strong signal-to-noise ratio and more noisy in regions with no significant signal (only noise). It is therefore useful when the background of the image is dark and we are interested in only the highest signal-to-noise ratio regions of the image. @item pool-min Apply min-pooling on the input dataset. This operator takes three operands: the first popped operand is the stride and the second is the width of the square pooling window (which should be a single integer). Also, The third operand should be the input image. Except the used statistical measurement, this operator is similar to @code{pool-max}, see the description there for more. Min-pooling is mostly used when the image has a high signal-to-noise ratio and a light background: min-pooling will select darker (lower-valued) pixels. For low signal-to-noise regions, this operator will increase the noise level (similar to the maximum, the scatter in the minimum is very strong). @item pool-sum Apply sum-pooling to the input dataset. This operator takes three operands: the first popped operand is the stride and the second is the width of the square pooling window (which should be a single integer). Also, The third operand should be the input image. Except the used statistical measurement, this operator is similar to @code{pool-max}, see the description there for more. Sum-pooling will increase the signal-to-noise ratio at the cost of having a smoother output (less resolution). @item pool-mean Apply mean pooling on the input dataset. This operator takes three operands: the first popped operand is the stride and the second is the width of the square pooling window (which should be a single integer). Also, The third operand should be the input image. Except the used statistical measurement, this operator is similar to @code{pool-max}, see the description there for more. The mean pooling method smooths out the image and hence the sharp features may not be identified when this pooling method is used. This therefore preserves more information than max-pooling, but may also reduces the effect of the most prominent pixels. Mean is often used where a more accurate representation of the input is required. @item pool-median Apply median pooling on the input dataset. This operator takes three operands: the first popped operand is the stride and the second is the width of the square pooling window (which should be a single integer). Also, The third operand should be the input image. Except the used statistical measurement, this operator is similar to @code{pool-max}, see the description there for more. In general, the mean is mathematically easier to interpret and more susceptible to outliers, while the median outputs as being less subject to the influence of outliers compared to the mean so we have a smoother image. This is therefore better for low signal-to-ratio (noisy) features and extended features (where you don't want a single high or low valued pixel to affect the output). @end table @node Interpolation operators, Dimensionality changing operators, Pooling operators, Arithmetic operators @subsubsection Interpolation operators Interpolation is the process of removing blank pixels from a dataset (by giving them a value based on the non-blank neighbors). @table @command @item interpolate-medianngb Interpolate the blank elements of the second popped operand with the median of nearest non-blank neighbors to each. The number of the nearest non-blank neighbors used to calculate the median is given by the first popped operand. The distance of the nearest non-blank neighbors is irrelevant in this interpolation. The neighbors of each blank pixel will be parsed in expanding circular rings (for 2D images) or spherical surfaces (for 3D cube) and each non-blank element over them is stored in memory. When the requested number of non-blank neighbors have been found, their median is used to replace that blank element. For example, the line below replaces each blank element with the median of the nearest 5 pixels. @example $ astarithmetic image.fits 5 interpolate-medianngb @end example When you want to interpolate blank regions and you want each blank region to have a fixed value (for example, the centers of saturated stars) this operator is not good. Because the pixels used to interpolate various parts of the region differ. For such scenarios, you may use @code{interpolate-maxofregion} or @code{interpolate-inofregion} (described below). @item interpolate-meanngb Similar to @code{interpolate-medianngb}, but will fill the blank values of the dataset with the mean value of the requested number of nearest neighbors. @item interpolate-minngb Similar to @code{interpolate-medianngb}, but will fill the blank values of the dataset with the minimum value of the requested number of nearest neighbors. @item interpolate-maxngb Similar to @code{interpolate-medianngb}, but will fill the blank values of the dataset with the maximum value of the requested number of nearest neighbors. One useful implementation of this operator is to fill the saturated pixels of stars in images. @item interpolate-minofregion Interpolate all blank regions (consisting of many blank pixels that are touching) in the second popped operand with the minimum value of the pixels that are immediately bordering that region (a single value). The first popped operand is the connectivity (see description in @command{connected-components}). For example, with the command below all the connected blank regions of @file{image.fits} will be filled. Its an image (2D dataset), so a 2 connectivity means that the independent blank regions are defined by 8-connected neighbors. If connectivity was 1, the regions would be defined by 4-connectivity: blank regions that may only be touching on the corner of one pixel would be identified as separate regions. @example $ astarithmetic image.fits 2 interpolate-minofregion @end example @item interpolate-maxofregion @cindex Saturated pixels Similar to @code{interpolate-minofregion}, but the maximum is used to fill the blank regions. This operator can be useful in filling saturated pixels in stars for example. Recall that the @option{interpolate-maxngb} operator looks for the maximum value with a given number of neighboring pixels and is more useful in small noisy regions. Therefore as the blank regions become larger, @option{interpolate-maxngb} can cause a fragmentation in the connected blank region because the nearest neighbor to one part of the blank region, may not fall within the pixels searched for the other regions. With this option, the size of the blank region is irrelevant: all the pixels bordering the blank region are parsed and their maximum value is used for the whole region. @end table @node Dimensionality changing operators, Conditional operators, Interpolation operators, Arithmetic operators @subsubsection Dimensionality changing operators Through these operators you can change the dimensions of the output through certain statistics on the dimensions that should be removed. For example, let's assume you have a 3D data cube that has 300 by 300 pixels in the RA and Dec dimensions (first two dimensions), and 3600 slices along the wavelength (third dimension), so the whole cube is @mymath{300\times300\times3600} voxels (volume elements). To create a narrow-band image that only contains 100 slices around a certain wavelength, you can crop that section (using @ref{Crop}), giving you a @mymath{300\times300\times100} cube. You can now use the @code{collapse-sum} operator below to ``collapse'' all the 100 slices into one 2D image that has @mymath{300\times300} pixels. Every pixel in this 2D image will have the flux of the sum of the 100 slices. @table @command @item to-1d Convert the input operand into a 1D array; irrespective of the number of dimensions it has. This operator only takes a single operand (the input array) and just updates the metadata. Therefore it does not change the layout of the array contents in memory and is very fast. If no further operation is requested on the 1D array, recall that Arithmetic will write a 1D array as a table column by default. In case you want the output to be saved as a 1D image, or to see it on the standard output, please use the @code{--onedasimage} or @code{--onedonstdout} options respectively (see @ref{Invoking astarithmetic}). This operator is useful in scenarios where after some operations on a 2D image or 3D cube, the dimensionality is no longer relevant for you and you just care about the values. In the example below, we will first make a simple 2D image from a plain-text file, then convert it to a 1D array: @example ## Contents of 'a.txt' to start with. $ cat a.txt # Image 1: DEMO [counts, uint8] An example image 1 2 3 4 5 6 7 8 9 ## Convert the text image into a FITS image. $ astconvertt a.txt -o a.fits ## Convert it into a table column (1D): $ astarithmetic a.fits to-1d -o table.fits ## Convert it into a 1D image: $ astarithmetic a.fits to-1d -o table.fits --onedasimage @end example @cindex Flattening (CNNs) A more real-world example would be the following: assume you want to ``flatten'' two images into a single 1D array (as commonly done in convolutional neural networks, or CNNs@footnote{@url{https://en.wikipedia.org/wiki/Convolutional_neural_network}}). First, we show the contents of a new @mymath{2\times2} image in plain-text image, then convert it to a 2D FITS image (@file{b.fits}). We will then use arithmetic to make both @file{a.fits} (from the example above) and @file{b.fits} into a 1D array and stitch them together into a single 1D image with one call to Arithmetic. For a description of the @code{stitch} operator, see below (same section). @example ## Contents of 'b.txt': $ cat b.txt # Image 1: DEMO [counts, uint8] An example image 10 11 12 13 ## Convert the text image into a FITS image. $ astconvertt b.txt -o b.fits # Flatten the two images into a single 1D image: $ astarithmetic a.fits to-1d b.fits to-1d 2 1 stitch -g1 \ --onedonstdout --quiet 1 2 3 4 5 6 7 8 9 10 11 12 13 @end example @item stitch Stitch (connect) any number of given images together along the given dimension. The output has the same number of dimensions as the input, but the number of pixels along the requested dimension will be different from the inputs. The @code{stitch} operator takes at least three operands: @itemize @item The first popped operand (placed just before @code{stitch}) is the direction (dimension) that the images should be stitched along. The first FITS dimension is along the horizontal, therefore a value of @code{1} will stitch them horizontally. Similarly, giving a value of @code{2} will result in a vertical stitch. @item The second popped operand is the number of images that should be stitched. @item Depending on the value given to the second popped operand, @code{stitch} will pop the given number of datasets from the stack and stitch them along the given dimension. The popped images have to have the same number of pixels along the other dimension. The order of the stitching is defined by how they are placed in the command-line, not how they are popped (after being popped, they are placed in a list in the same order). @end itemize For example, in the commands below, we will first crop out fixed sized regions of @mymath{100\times300} pixels of a larger image (@file{large.fits}) first. In the first call of Arithmetic below, we will stitch the bottom set of crops together along the first (horizontal) axis. In the second Arithmetic call, we will stitch all 6 along both dimensions. @example ## Crop the fixed-size regions of a larger image ('-O' is the ## short form of the '--mode' option). $ astcrop large.fits -Oimg --section=1:100,1:300 -oa.fits $ astcrop large.fits -Oimg --section=101:200,1:300 -ob.fits $ astcrop large.fits -Oimg --section=201:300,1:300 -oc.fits $ astcrop large.fits -Oimg --section=1:100,301:600 -od.fits $ astcrop large.fits -Oimg --section=101:200,301:600 -oe.fits $ astcrop large.fits -Oimg --section=201:300,301:600 -of.fits ## Stitch the bottom three crops into one image. $ astarithmetic a.fits b.fits c.fits 3 1 stitch -obottom.fits # Stitch all the 6 crops along both dimensions $ astarithmetic a.fits b.fits c.fits 3 1 stitch \ d.fits e.fits f.fits 3 1 stitch \ 2 2 stitch -g1 -oall.fits @end example The start of the last command is like the one before it (stitching the bottom three crops along the first FITS dimension, producing a @mymath{300\times300} image). Later in the same command, we then stitch the top three crops horizontally (again, into a @mymath{300\times300} image) This leaves the the two @mymath{300\times300} images on the stack (see @ref{Reverse polish notation}). We finally stitch those two along the second (vertical) dimension. This operator is therefore useful in scenarios like placing the CCD amplifiers into one image. @item trim Trim all blank elements from the outer edges of the input operand (it only takes a single operand). For example see the commands below using Table's @ref{Column arithmetic}: @example $ cat table.txt nan nan nan 3 4 nan 5 6 nan $ asttable table.txt -Y -c'arith $1 trim' 3.000000 4.000000 nan 5.000000 6.000000 @end example Similarly, on 2D images or 3D cubes, all outer rows/columns or slices that are fully blank get ``trim''ed with this operator. This is therefore a very useful operator for extracting a certain feature within your dataset. For example, let's assume that you have set @ref{NoiseChisel} and @ref{Segment} on an image to extract all clumps and objects. With the command below on Segment's output, you will have a smaller image that only contains the sky-subtracted input pixels corresponding to object 263. @example $ astarithmetic seg.fits -hINPUT-NO-SKY seg.fits -hOBJECTS \ 263 ne nan where trim --output=obj-263.fits @end example @item add-dimension-slow Build a higher-dimensional dataset from all the input datasets stacked after one another (along the slowest dimension). The first popped operand has to be a single number. It is used by the operator to know how many operands it should pop from the stack (and the size of the output in the new dimension). The rest of the operands must have the same size and numerical data type. This operator currently only works for 2D input operands, please contact us if you want inputs to have different dimensions. The output's WCS (which should have a different dimensionality compared to the inputs) can be read from another file with the @option{--wcsfile} option. If no file is specified for the WCS, the first dataset's WCS will be used, you can later add/change the necessary WCS keywords with the FITS keyword modification features of the Fits program (see @ref{Fits}). If your datasets do not have the same type, you can use the type transformation operators of Arithmetic that are discussed below. Just beware of overflow if you are transforming to a smaller type, see @ref{Numeric data types}. For example, let's assume you have 3 two-dimensional images @file{a.fits}, @file{b.fits} and @file{c.fits} (each with @mymath{200\times100} pixels). You can construct a 3D data cube with @mymath{200\times100\times3} voxels (volume-pixels) using the command below: @example $ astarithmetic a.fits b.fits c.fits 3 add-dimension-slow @end example @item add-dimension-fast Similar to @code{add-dimension-slow} but along the fastest dimension. This operator currently only works for 1D input operands, please contact us if you want inputs to have different dimensions. For example, let's assume you have 3 one-dimensional datasets, each with 100 elements. With this operator, you can construct a @mymath{3\times100} pixel FITS image that has 3 pixels along the horizontal and 5 pixels along the vertical. @item collapse-sum Collapse the given dataset (second popped operand), by summing all elements along the first popped operand (a dimension in FITS standard: counting from one, from fastest dimension). The returned dataset has one dimension less compared to the input. The output will have a double-precision floating point type irrespective of the input dataset's type. Doing the operation in double-precision (64-bit) floating point will help the collapse (summation) be affected less by floating point errors. But afterwards, single-precision floating points are usually enough in real (noisy) datasets. So depending on the type of the input and its nature, it is recommended to use one of the type conversion operators on the returned dataset. @cindex World Coordinate System (WCS) If any WCS is present, the returned dataset will also lack the respective dimension in its WCS matrix. Therefore, when the WCS is important for later processing, be sure that the input is aligned with the respective axes: all non-diagonal elements in the WCS matrix are zero. @cindex Data cubes @cindex 3D data-cubes @cindex Cubes (3D data) @cindex Narrow-band image @cindex IFU: Integral Field Unit @cindex Integral field unit (IFU) One common application of this operator is the creation of pseudo broad-band or narrow-band 2D images from 3D data cubes. For example, integral field unit (IFU) data products that have two spatial dimensions (first two FITS dimensions) and one spectral dimension (third FITS dimension). The command below will collapse the whole third dimension into a 2D array the size of the first two dimensions, and then convert the output to single-precision floating point (as discussed above). @example $ astarithmetic cube.fits 3 collapse-sum float32 @end example @item collapse-min @itemx collapse-max @itemx collapse-mean @itemx collapse-median Similar to @option{collapse-sum}, but the returned dataset will be the desired statistic along the collapsed dimension, not the sum. @item collapse-madclip-fill-mad @itemx collapse-madclip-fill-std @itemx collapse-madclip-fill-mean @itemx collapse-madclip-fill-median @itemx collapse-madclip-fill-number Collapse the input dataset (fourth popped operand) along the FITS dimension given as the first popped operand by calculating the desired statistic after median absolute deviation (MAD) filled re-clipping. The MAD-clipping parameters (namely, the multiple of sigma and termination criteria) are read as the third and second popped operands respectively. This is the most robust method to reject outliers; for more on filled re-clipping and its advantages, see @ref{Filled re-clipping}. For a more general tutorial on rejecting outliers, see @ref{Clipping outliers}. If you have not done this tutorial yet, we recommend you to take an hour or so and go through that tutorial for optimal understanding and results. For example, with the command below, the pixels of the input 2 dimensional @file{image.fits} will be collapsed to a single dimension output. The first popped operand is @code{2}, so it will collapse all the pixels that are vertically on top of each other. Such that the output will have the same number of pixels as the horizontal axis of the input. During the collapsing, all pixels that are more than @mymath{3\sigma} (third popped operand) are rejected, and the clipping will continue until the standard deviation changes less than @mymath{0.2} between clips. Finally the @code{counter} operator is used to have a two-column table with the first one being a simple counter starting from one (see @ref{Size and position operators}). @example $ astarithmetic image.fits 3 0.2 2 collapse-sigclip-mean \ counter --output=collapsed-vertical.fits @end example @cartouche @noindent @strong{Printing output of collapse in plain-text:} the default datatype of @code{collapse-sigclip-mean} is 32-bit floating point. This is sufficient for any observed astronomical data. However, if you request a plain-text output, or decide to print/view the output as plain-text on the standard output, the full set of decimals may not be printed in some situations. This can lead to apparently discrete values in the output of this operator when viewed in plain-text! The FITS format is always superior (since it stores the value in binary, therefore not having the problem above). But if you are forced to save the output in plain-text, use the @code{float64} operator after this to change the type to 64-bit floating point (which will print more decimals). @end cartouche @item collapse-madclip-mad @itemx collapse-madclip-std @itemx collapse-madclip-mean @itemx collapse-madclip-median @itemx collapse-madclip-number Collapse the input dataset (fourth popped operand) along the FITS dimension given as the first popped operand by calculating the desired statistic after median absolute deviation (MAD) clipping. This operator is called similarly to the @code{collapse-madclip-fill-*} operators, see the description there for more. @item collapse-sigclip-fill-mad @itemx collapse-sigclip-fill-std @itemx collapse-sigclip-fill-mean @itemx collapse-sigclip-fill-median @itemx collapse-sigclip-fill-number Collapse the input dataset (fourth popped operand) along the FITS dimension given as the first popped operand by calculating the desired statistic after filled @mymath{\sigma} re-clipping. This operator is called similarly to the @code{collapse-madclip-fill-*} operators, see the description there for more. @item collapse-sigclip-mad @itemx collapse-sigclip-std @itemx collapse-sigclip-mean @itemx collapse-sigclip-median @itemx collapse-sigclip-number Collapse the input dataset (fourth popped operand) along the FITS dimension given as the first popped operand by calculating the desired statistic after @mymath{\sigma}-clipping. This operator is called similarly to the @code{collapse-madclip-fill-*} operators, see the description there for more. @end table @node Conditional operators, Mathematical morphology operators, Dimensionality changing operators, Arithmetic operators @subsubsection Conditional operators Conditional operators take two inputs and return a binary output that can only have two values 0 (for pixels where the condition was false) or 1 (for the pixels where the condition was true). Because of the binary (2-valued) nature of their outputs, the output is therefore stored in an @code{unsigned char} data type (see @ref{Numeric data types}) to speed up process and take less space in your storage. There are two exceptions to the general features above: @code{isblank} only takes one input, and @code{where} takes three, while not returning a binary output, see their description for more. @table @command @item lt Less than: creates a binary output (values either 0 or 1) where each pixel will be 1 if the second popped operand is smaller than the first popped operand and 0 otherwise. If both operands are images, then all the pixels will be compared with their counterparts in the other image. For example, the pixels in the output of the command below will have a value of 1 (true) if their value in @file{image1.fits} is less than their value in @file{image2.fits}. Otherwise, their value will be 0 (false). @example $ astarithmetic image1.fits image2.fits lt @end example If only one operand is an image, then all the pixels will be compared with the single value (number) of the other operand. For example: @example $ astarithmetic image1.fits 1000 lt @end example Finally if both are numbers, then the output is also just one number (0 or 1). @example $ astarithmetic 4 5 lt @end example @item le Less or equal: similar to @code{lt} (`less than' operator), but returning 1 when the second popped operand is smaller or equal to the first. For example @example $ astarithmetic image1.fits 1000 le @end example @item gt Greater than: similar to @code{lt} (`less than' operator), but returning 1 when the second popped operand is greater than the first. For example @example $ astarithmetic image1.fits 1000 gt @end example @item ge Greater or equal: similar to @code{lt} (`less than' operator), but returning 1 when the second popped operand is larger or equal to the first. For example @example $ astarithmetic image1.fits 1000 ge @end example @item eq Equality: similar to @code{lt} (`less than' operator), but returning 1 when the two popped operands are equal (to double precision floating point accuracy). @example $ astarithmetic image1.fits 1000 eq @end example @item ne Non-Equality: similar to @code{lt} (`less than' operator), but returning 1 when the two popped operands are @emph{not} equal (to double precision floating point accuracy). @example $ astarithmetic image1.fits 1000 ne @end example @item and Logical AND: returns 1 if both operands have a non-zero value and 0 if both are zero. Both operands have to be the same kind: either both images or both numbers and it mostly makes meaningful values when the inputs are binary (with pixel values of 0 or 1). @example $ astarithmetic image1.fits image2.fits -g1 and @end example For example, if you only want to see which pixels in an image have a value @emph{between} 50 (greater equal, or inclusive) and 200 (less than, or exclusive), you can use this command: @example $ astarithmetic image.fits set-i i 50 ge i 200 lt and @end example @item or Logical OR: returns 1 if either one of the operands is non-zero and 0 only when both operators are zero. Both operands have to be the same kind: either both images or both numbers. The usage is similar to @code{and}. For example, if you only want to see which pixels in an image have a value @emph{outside of} -100 (greater equal, or inclusive) and 200 (less than, or exclusive), you can use this command: @example $ astarithmetic image.fits set-i i -100 lt i 200 ge or @end example @item not Logical NOT: returns 1 when the operand is 0 and 0 when the operand is non-zero. The operand can be an image or number, for an image, it is applied to each pixel separately. For example, if you want to know which pixels are not blank (and assuming that we didn't have the @code{isnotblank} operator), you can use this @code{not} operator on the output of the @command{isblank} operator described below: @example $ astarithmetic image.fits isblank not @end example @cindex Blank pixel @item isblank Test each pixel for being a blank value (see @ref{Blank pixels}). This is a conditional operator: the output has the same size and dimensions as the input, but has an unsigned 8-bit integer type with two possible values: either 1 (for a pixel that was blank) or 0 (for a pixel that was not blank). See the description of @code{lt} operator above). The difference is that it only needs one operand. For example: @example $ astarithmetic image.fits isblank @end example Because of the definition of a blank pixel, a blank value is not even equal to itself, so you cannot use the equal operator above to select blank pixels. See the ``Blank pixels'' box below for more on Blank pixels in Arithmetic. In case you want to set non-blank pixels to an output pixel value of 1, it is better to use @code{isnotblank} instead of `@code{isblank not}' (for more, see the description of @code{isnotblank}). @item isnotblank The inverse of the @code{isblank} operator above (see that description for more). Therefore, if a pixel has a blank value, the output of this operator will have a 0 value for it. This operator is therefore similar to running `@option{isblank not}', but slightly more efficient (won't need the intermediate product of two operators). @item where Change the input (pixel) value @emph{where}/if a certain condition holds. The conditional operators above can be used to define the condition. Three operands are required for @command{where}. The input format is demonstrated in this simplified example: @example $ astarithmetic modify.fits binary.fits if-true.fits where @end example The value of any pixel in @file{modify.fits} that corresponds to a non-zero @emph{and} non-blank pixel of @file{binary.fits} will be changed to the value of the same pixel in @file{if-true.fits} (this may also be a number). The 3rd and 2nd popped operands (@file{modify.fits} and @file{binary.fits} respectively, see @ref{Reverse polish notation}) have to have the same dimensions/size. @file{if-true.fits} can be either a number, or have the same dimension/size as the other two. The 2nd popped operand (@file{binary.fits}) has to have @code{uint8} (or @code{unsigned char} in standard C) type (see @ref{Numeric data types}). It is treated as a binary dataset (with only two values: zero and non-zero, hence the name @code{binary.fits} in this example). However, commonly you will not be dealing with an actual FITS file of a condition/binary image. You will probably define the condition in the same run based on some other reference image and use the conditional and logical operators above to make a true/false (or one/zero) image for you internally. For example, the case below: @example $ astarithmetic in.fits reference.fits 100 gt new.fits where @end example In the example above, any of the @file{in.fits} pixels that has a value in @file{reference.fits} greater than @command{100}, will be replaced with the corresponding pixel in @file{new.fits}. Effectively the @code{reference.fits 100 gt} part created the condition/binary image which was added to the stack (in memory) and later used by @code{where}. The command above is thus equivalent to these two commands: @example $ astarithmetic reference.fits 100 gt --output=binary.fits $ astarithmetic in.fits binary.fits new.fits where @end example Finally, the input operands are read and used independently, so you can use the same file more than once as any of the operands. When the 1st popped operand to @code{where} (@file{if-true.fits}) is a single number, it may be a NaN value (or any blank value, depending on its type) like the example below (see @ref{Blank pixels}). When the number is blank, it will be converted to the blank value of the type of the 3rd popped operand (@code{in.fits}). Hence, in the example below, all the pixels in @file{reference.fits} that have a value greater than 100, will become blank in the natural data type of @file{in.fits} (even though NaN values are only defined for floating point types). @example $ astarithmetic in.fits reference.fits 100 gt nan where @end example @end table @node Mathematical morphology operators, Bitwise operators, Conditional operators, Arithmetic operators @subsubsection Mathematical morphology operators @cindex Mathematical morphology From Wikipedia: ``Mathematical morphology (MM) is a theory and technique for the analysis and processing of geometrical structures, based on set theory, lattice theory, topology, and random functions. MM is most commonly applied to digital images''. In theory it extends a very large body of research and methods in image processing, but currently in Gnuastro it mainly applies to images that are binary (only have a value of 0 or 1). For example, you have applied the greater-than operator (@code{gt}, see @ref{Conditional operators}) to select all pixels in your image that are larger than a value of 100. But they will all have a value of 1, and you want to separate the various groups of pixels that are connected (for example, peaks of stars in your image). With the @code{connected-components} operator, you can give each connected region of the output of @code{gt} a separate integer label. @table @command @item erode @cindex Erosion Erode the foreground pixels (with value @code{1}) of the input dataset (second popped operand). The first popped operand is the connectivity (see description in @command{connected-components}). Erosion is simply a flipping of all foreground pixels (with value @code{1}) to background (with value @code{0}) that are ``touching'' background pixels. ``Touching'' is defined by the connectivity. In effect, this operator ``carves off'' the outer borders of the foreground, making them thinner. This operator assumes a binary dataset (all pixels are @code{0} or @code{1}). For example, imagine that you have an astronomical image with a mean/sky value of 0 units and a standard deviation (@mymath{\sigma}) of 100 units and many galaxies in it. With the first command below, you can apply a threshold of @mymath{2\sigma} on the image (by only keeping pixels that are greater than 200 using the @command{gt} operator). The output of thresholding the image is a binary image (each pixel is either smaller or equal to the threshold or larger than it). You can then erode the binary image with the second command below to remove very small false positives (one or two pixel peaks). @example $ astarithmetic image.fits 100 gt -obinary.fits $ astarithmetic binary.fits 2 erode -oout.fits @end example In fact, you can merge these operations into one command thanks to the reverse polish notation (see @ref{Reverse polish notation}): @example $ astarithmetic image.fits 100 gt 2 erode -oout.fits @end example To see the effect of connectivity, try this: @example $ astarithmetic image.fits 100 gt 1 erode -oout-con-1.fits @end example @item dilate @cindex Dilation Dilate the foreground pixels (with value @code{1}) of the binary input dataset (second popped operand). The first popped operand is the connectivity (see description in @command{connected-components}). Dilation is simply a flipping of all background pixels (with value @code{0}) to foreground (with value @code{1}) that are ``touching'' foreground pixels. ``Touching'' is defined by the connectivity. In effect, this expands the outer borders of the foreground. This operator assumes a binary dataset (all pixels are @code{0} and @code{1}). The usage is similar to @code{erode}, for example: @example $ astarithmetic binary.fits 2 dilate -oout.fits @end example @item number-neighbors Return a dataset of the same size as the second popped operand, but where each non-zero and non-blank input pixel is replaced with the number of its non-zero and non-blank neighbors. The first popped operand is the connectivity (see above) and must be a single-value of an integer type. The dataset is assumed to be binary (having an unsigned, 8-bit dataset). For example with the command below, you can select all pixels above a value of 100 in your image with the ``greater-than'' or @code{gt} operator (see @ref{Conditional operators}). Recall that the output of all conditional operators is a binary output (having a value of 0 or 1). In the same command, we will then find how many neighboring pixels of each pixel (that was originally above the threshold) are also above the threshold. @example $ astarithmetic image.fits 100 gt 2 number-neighbors @end example @item connected-components @cindex Connected components Find the connected components in the input dataset (second popped operand). The first popped is the connectivity used in the connected components algorithm. The second popped operand is the dataset where connected components are to be found. It is assumed to be a binary image (with values of 0 or 1). It must have an 8-bit unsigned integer type which is the format produced by conditional operators. This operator will return a labeled dataset where the non-zero pixels in the input will be labeled with a counter (starting from 1). The connectivity is a number between 1 and the number of dimensions in the dataset (inclusive). 1 corresponds to the weakest (symmetric) connectivity between elements and the number of dimensions the strongest. For example, on a 2D image, a connectivity of 1 corresponds to 4-connected neighbors and 2 corresponds to 8-connected neighbors. One example usage of this operator can be the identification of regions above a certain threshold, as in the command below. With this command, Arithmetic will first separate all pixels greater than 100 into a binary image (where pixels with a value of 1 are above that value). Afterwards, it will label all those that are connected. @example $ astarithmetic in.fits 100 gt 2 connected-components @end example If your input dataset does not have a binary type, but you know all its values are 0 or 1, you can use the @code{uint8} operator (below) to convert it to binary. @item fill-holes Flip background (0) pixels surrounded by foreground (1) in a binary dataset. This operator takes two operands (similar to @code{connected-components}): the second is the binary (0 or 1 valued) dataset to fill holes in and the first popped operand is the connectivity (to define a hole). Imagine that in your dataset there are some holes with zero value inside the objects with one value (for example, the output of the thresholding example of @command{erode}) and you want to fill the holes: @example $ astarithmetic binary.fits 2 fill-holes @end example @item invert Invert an unsigned integer dataset (will not work on other data types, see @ref{Numeric data types}). This is the only operator that ignores blank values (which are set to be the maximum values in the unsigned integer types). This is useful in cases where the target(s) has(have) been imaged in absorption as raw formats (which are unsigned integer types). With this option, the maximum value for the given type will be subtracted from each pixel value, thus ``inverting'' the image, so the target(s) can be treated as emission. This can be useful when the higher-level analysis methods/tools only work on emission (positive skew in the noise, not negative). @example $ astarithmetic image.fits invert @end example @end table @node Bitwise operators, Numerical type conversion operators, Mathematical morphology operators, Arithmetic operators @subsubsection Bitwise operators @cindex Bitwise operators Astronomical images are usually stored as an array multi-byte pixels with different sizes for different precision levels (see @ref{Numeric data types}). For example, images from CCDs are usually in the unsigned 16-bit integer type (each pixel takes 16 bits, or 2 bytes, of memory) and fully reduced deep images have a 32-bit floating point type (each pixel takes 32 bits or 4 bytes). On the other hand, during the data reduction, we need to preserve a lot of meta-data about some pixels. For example, if a cosmic ray had hit the pixel during the exposure, or if the pixel was saturated, or is known to have a problem, or if the optical vignetting is too strong on it. A crude solution is to make a new image when checking for each one of these things and make a binary image where we flag (set to 1) pixels that satisfy any of these conditions above, and set the rest to zero. However, processing pipelines sometimes need more than 20 flags to store important per-pixel meta-data, and recall that the smallest numeric data type is one byte (or 8 bits, that can store up to 256 different values), while we only need two values for each flag! This is a major waste of storage space! @cindex Flag (mask) images @cindex Mask (flag) images A much more optimal solution is to use the bits within each pixel to store different flags! In other words, if you have an 8-bit pixel, use each bit as a flag to mark if a certain condition has happened on a certain pixel or not. For example, let's set the following standard based on the four cases mentioned above: the first bit will show that a cosmic ray has hit that pixel. So if a pixel is only affected by cosmic rays, it will have this sequence of bits (note that the bit-counting starts from the right): @code{00000001}. The second bit shows that the pixel was saturated (@code{00000010}), the third bit shows that it has known problems (@code{00000100}) and the fourth bit shows that it was affected by vignetting (@code{00001000}). Since each bit is independent, we can thus mark multiple metadata about that pixel in the actual image, within a single ``flag'' or ``mask'' pixel of a flag or mask image that has the same number of pixels. For example, a flag-pixel with the following bits @code{00001001} shows that it has been affected by cosmic rays @emph{and} it has been affected by vignetting at the same time. The common data type to store these flagging pixels are unsigned integer types (see @ref{Numeric data types}). Therefore when you open an unsigned 8-bit flag image in a viewer like DS9, you will see a single integer in each pixel that actually has 8 layers of metadata in it! For example, the integer you will see for the bit sequences given above will respectively be: @mymath{2^0=1} (for a pixel that only has cosmic ray), @mymath{2^1=2} (for a pixel that was only saturated), @mymath{2^2=4} (for a pixel that only has known problems), @mymath{2^3=8} (for a pixel that is only affected by vignetting) and @mymath{2^0 + 2^3 = 9} (for a pixel that has a cosmic ray @emph{and} was affected by vignetting). You can later use this bit information to mark objects in your final analysis or to mask certain pixels. For example, you may want to set all pixels affected by vignetting to NaN, but can interpolate over cosmic rays. You therefore need ways to separate the pixels with a desired flag(s) from the rest. It is possible to treat a flag pixel as a single integer (and try to define certain ranges in value to select certain flags). But a much more easier and robust way is to actually look at each pixel as a sequence of bits (not as a single integer!) and use the bitwise operators below for this job. For more on the theory behind bitwise operators, see @url{https://en.wikipedia.org/wiki/Bitwise_operation, Wikipedia}. @table @command @item bitand Bitwise AND operator: only bits with values of 1 in both popped operands will get the value of 1, the rest will be set to 0. For example, (assuming numbers can be written as bit strings on the command-line): @code{00101000 00100010 bitand} will give @code{00100000}. Note that the bitwise operators only work on integer type datasets. @item bitor Bitwise inclusive OR operator: The bits where at least one of the two popped operands has a 1 value get a value of 1, the others 0. For example, (assuming numbers can be written as bit strings on the command-line): @code{00101000 00100010 bitand} will give @code{00101010}. Note that the bitwise operators only work on integer type datasets. @item bitxor Bitwise exclusive OR operator: A bit will be 1 if it differs between the two popped operands. For example, (assuming numbers can be written as bit strings on the command-line): @code{00101000 00100010 bitand} will give @code{00001010}. Note that the bitwise operators only work on integer type datasets. @item lshift Bitwise left shift operator: shift all the bits of the first operand to the left by a number of times given by the second operand. For example, (assuming numbers can be written as bit strings on the command-line): @code{00101000 2 lshift} will give @code{10100000}. This is equivalent to multiplication by 4. Note that the bitwise operators only work on integer type datasets. @item rshift Bitwise right shift operator: shift all the bits of the first operand to the right by a number of times given by the second operand. For example, (assuming numbers can be written as bit strings on the command-line): @code{00101000 2 rshift} will give @code{00001010}. Note that the bitwise operators only work on integer type datasets. @item bitnot Bitwise not (more formally known as one's complement) operator: flip all the bits of the popped operand (note that this is the only unary, or single operand, bitwise operator). In other words, any bit with a value of @code{0} is changed to @code{1} and vice-versa. For example, (assuming numbers can be written as bit strings on the command-line): @code{00101000 bitnot} will give @code{11010111}. Note that the bitwise operators only work on integer type datasets/numbers. @end table @node Numerical type conversion operators, Random number generators, Bitwise operators, Arithmetic operators @subsubsection Numerical type conversion operators With the operators below you can convert the numerical data type of your input, see @ref{Numeric data types}. Type conversion is particularly useful when dealing with integers, see @ref{Integer benefits and pitfalls}. As an example, let's assume that your colleague gives you many single exposure images for processing, but they have a double-precision floating point type! You know that the statistical error a single-exposure image can never exceed 6 or 7 significant digits, so you would prefer to archive them as a single-precision floating point and save space on your computer (a double-precision floating point is also double the file size!). You can do this with the @code{float32} operator described below. @table @command @item u8 @itemx uint8 Convert the type of the popped operand to 8-bit unsigned integer type (see @ref{Numeric data types}). The internal conversion of C will be used. @item i8 @itemx int8 Convert the type of the popped operand to 8-bit signed integer type (see @ref{Numeric data types}). The internal conversion of C will be used. @item u16 @itemx uint16 Convert the type of the popped operand to 16-bit unsigned integer type (see @ref{Numeric data types}). The internal conversion of C will be used. @item i16 @itemx int16 Convert the type of the popped operand to 16-bit signed integer (see @ref{Numeric data types}). The internal conversion of C will be used. @item u32 @itemx uint32 Convert the type of the popped operand to 32-bit unsigned integer type (see @ref{Numeric data types}). The internal conversion of C will be used. @item i32 @itemx int32 Convert the type of the popped operand to 32-bit signed integer type (see @ref{Numeric data types}). The internal conversion of C will be used. @item u64 @itemx uint64 Convert the type of the popped operand to 64-bit unsigned integer (see @ref{Numeric data types}). The internal conversion of C will be used. @item f32 @itemx float32 Convert the type of the popped operand to 32-bit (single precision) floating point (see @ref{Numeric data types}). The internal conversion of C will be used. For example, if @file{f64.fits} is a 64-bit floating point image, and you want to store it as a 32-bit floating point image, you can use the command below (the second command is to show that the output file consumes half the storage) @example $ astarithmetic f64.fits float32 --output=f32.fits $ ls -lh f64.fits f32.fits @end example @item f64 @itemx float64 Convert the type of the popped operand to 64-bit (double precision) floating point (see @ref{Numeric data types}). The internal conversion of C will be used. @end table @node Random number generators, Coordinate and border operators, Numerical type conversion operators, Arithmetic operators @subsubsection Random number generators When you simulate data (for example, see @ref{Sufi simulates a detection}), everything is ideal and there is no noise! The final step of the process is to add simulated noise to the data. The operators in this section are designed for that purpose. To learn more about the definition and implementation ``noise'', see @ref{Noise basics}. In case each data element's random distribution should have an independent parameter (for example @mymath{\sigma} in a Gaussian distribution), the first popped operand can be a dataset of the same size as the second. In this case (when the parameter is not a single value, but an array), each element will have a different parameter. When @option{--quiet} is not given, a statement will be printed on each invocation of these operators (if there are multiple calls to the @code{mknoise-*} operators, the statement will be printed multiple times). It will show the random number generator function and seed that was used in that invocation. These are necessary for the future reproducibility of the outputs using the @option{--envseed} option, for more, see @ref{Generating random numbers}. For example, with the first command below, @file{image.fits} will be degraded by a noise of standard deviation 3 units. @example $ astarithmetic image.fits 3 mknoise-sigma @end example Alternatively, you can use the operators in this section within the @ref{Column arithmetic} feature of the Table program. For example, with the command below, you can generate a random number (centered on 0, with @mymath{\sigma=3}). With the second command, you can put it into a shell variable for later usage. @example $ echo 0 | asttable -c'arith $1 3 mknoise-sigma' $ value=$(echo 0 | asttable -c'arith $1 3 mknoise-sigma' --quiet) $ echo $value @end example You can also use the operators here in combination with AWK to easily generate an arbitrarily large table with random columns. In the example below, we will create a two column table with 20 rows. The first column will be centered on 5 and @mymath{\sigma_1=2}, the second will be centered on 10 and @mymath{\sigma_2=3}: @example $ echo 5 10 \ | awk '@{for(i=0;i<20;++i) print $1, $2@}' \ | asttable -c'arith $1 2 mknoise-sigma' \ -c'arith $2 3 mknoise-sigma' @end example By adding an extra @option{--output=random.fits}, the table will be saved into a file called @file{random.fits}, and you can change the @code{i<20} to @code{i<5000} to have 5000 rows instead. Of course, if your input table has different values in the desired column the noisy distribution will be centered on each input element, but all will have the same scatter/sigma. As mentioned above, you can use the @option{--envseed} option to pre-define the random number generator seed (and thus get a reproducible result). For more on @option{--envseed}, see @ref{Generating random numbers}. When using column arithmetic in Table, it may happen that multiple columns need random numbers (with any of the @code{mknoise-*} operators) in one call of @command{asttable}. In such cases, the value given to @code{GSL_RNG_SEED} is incremented by one on every call to the @code{mknoise-*} operators. Without this increment, when the column values are the same (happens a lot, for no-noised datasets), the returned values for all columns will be identical. But this feature has a side-effect: that if the order of calling the @code{mknoise-*} operators changes, the seeds used for each operator will change@footnote{We have defined @url{https://savannah.gnu.org/task/?15971, Task 15971} in Gnuastro's project management system to address this. If you need this feature please send us an email at @code{bug-gnuastro@@gnu.org} (to motivate us in its implementation).}. @table @command @item mknoise-sigma Add a Gaussian noise with pre-defined @mymath{\sigma} to each element of the input dataset (independent of the input pixel value). @mymath{\sigma} is the standard deviation of the @url{https://en.wikipedia.org/wiki/Normal_distribution, Gaussian or Normal distribution}. This operator takes two arguments: the top/first popped operand is the noise standard deviation, the next popped operand is the dataset that the noise should be added to. For example, with the first command below, let's put a S@'ersic profile with S@'ersic index 1 and effective radius 10 pixels, truncated at 5 times the effective radius in the center of a mock image that is @mymath{100\times100} pixels wide. We will also give it a position angle of 45 degrees and an axis ratio of 0.8, and set it to have a total electron count of 10000 (@code{1e4} in the command). Note that this example is focused on this operator, for a robust simulation, see the tutorial in @ref{Sufi simulates a detection}. With the second command, let's add noise to this image and with the third command, we'll subtract the raw image from the noised image. Finally, we'll view them both together: @example $ echo "1 50 50 1 10 1 45 0.8 1e4 5" \ | astmkprof --mergedsize=100,100 --oversample=1 \ --mcolissum --output=raw.fits $ astarithmetic raw.fits 2 mknoise-sigma --output=sigma.fits $ astarithmetic raw.fits sigma.fits - -g1 \ --output=diff-sigma.fits $ astscript-fits-view raw.fits sigma.fits diff-sigma.fits @end example You see that the final @file{diff-sigma.fits} distribution was independent of the pixel values of the input. You will also notice that within @file{sigma.fits} the noisy pixels that had a zero value in @file{raw.fits}, the noise fluctuates around zero (is negative in half of those pixels). These behaviors will be different in the case for @code{mknoise-sigma-from-mean} below, which is more ``realistic'' (or Poisson-like). @item mknoise-sigma-from-mean @cindex Poisson noise Replace each input element (e.g., pixel in an image) of the input with a random value taken from a Gaussian distribution (for pixel @mymath{i}) with mean @mymath{\mu_i} and standard deviation @mymath{\sigma_i}. Where, @mymath{\sigma_i=\sqrt{I_i+B_i}} and @mymath{\mu_i=I_i+B_i} and @mymath{I_i} and @mymath{B_i} are respectively the values of the input image, and background in that same pixel. In other words, this can be seen as approximating a Poisson distribution at high mean values (where the Poisson distribution becomes identical to the Gaussian distribution). This operator takes two arguments: 1. the first popped operand (just before the operator) is the @emph{per-pixel} background value (in units of electron counts). 2. The second popped operand is the dataset that the noise should be added to. To demonstrate the effect of this noise pattern, please run the example commands in the description of @code{mknoise-sigma}. With the first command below, let's add this Poisson-like noise (assuming a background level of 4 electron counts, to be similar to a @mymath{\sigma=2} of the example in @code{mknoise-sigma}). With the second command, let's subtract the raw image from this noise pattern: @example $ astarithmetic raw.fits 4 mknoise-sigma-from-mean \ --output=sigma-from-mean.fits $ astarithmetic raw.fits sigma-from-mean.fits - -g1 \ --output=diff-sigma-from-mean.fits $ astscript-fits-view diff-sigma.fits \ diff-sigma-from-mean.fits @end example You clearly see how the noise in the center of the S@'ersic profile is much stronger than the outer parts. As described, above, this is behavior we would expect in a ``real'' observation: the regions with stronger signal, also have stronger noise as defined through the @url{https://en.wikipedia.org/wiki/Poisson_distribution, Poisson distribution}! The reason we described this operator as ``Poisson-like'' is that, it has some shortcomings as opposed to the @code{mknoise-poisson} operator (that is described below): @itemize @item For low mean values (less than 3 for example), this will produce a symmetric Gaussian distribution, while the Poisson distribution will not be symmetric. @item The random values from this distribution are floating point (unlike the Poisson distribution that produces integers. @item The random values can be negative (which is not possible in a Poisson distribution). @end itemize @cindex Coadds @cindex Stacking @cindex Photon-starved images Therefore to simulate photon-starved images (for example UV or X-ray data), the @code{mknoise-poisson} operator should always be used, not this one. However, in optical (or redder bands) data, the background is very bright (much brighter than 10 counts for example). In such cases (as the mean increases), the Poisson distributions becomes identical to the Gaussian distribution. Furthermore, processed co-add/stacked images are no longer integers, but floating points with the Sky-level already subtracted (see @ref{Sky value}). Therefore if you are trying to simulate a processed, photon-rich dataset, you can safely use this operator. @cindex Dark night @cindex Gray night @cindex Nights (dark or gray) Recall that the background values reported by observatories (for example, to define dark or gray nights), or in papers, is usually reported in units of magnitudes per arcseconds square. You need to do the conversion to counts per pixel manually. The conversion of magnitudes to counts is described below. For converting arcseconds squared to number of pixels, you can use the @option{--pixelscale} option of @ref{Fits}. For example, @code{astfits image.fits --pixelscale}. Except for the noise-model, this operator is very similar to @code{mknoise-sigma} and the examples there apply here too. The main difference with @code{mknoise-sigma} is that in a Poisson distribution the scatter/sigma will depend on each element's value. For example, let's assume you have made a mock image called @file{mock.fits} with @ref{MakeProfiles} and it is assumed zero point is 22.5 (for more on the zero point, see @ref{Brightness flux magnitude}). Let's assume the background level for the Poisson noise has a value of 19 magnitudes. You can first use the @code{mag-to-counts} operator to convert this background magnitude into counts, then feed the background value in counts to @code{mknoise-sigma-from-mean} operator: @example $ astarithmetic mock.fits 19 22.5 mag-to-counts \ mknoise-sigma-from-mean @end example Try changing the background value from 19 to 10 to see the effect! Recall that the tutorial @ref{Sufi simulates a detection} shows how you can use MakeProfiles to build mock images. @item mknoise-poisson Replace every pixel of the input with a random integer taken from a Poisson distribution with the mean value of that input pixel. Similar to @code{mknoise-sigma-from-mean}, it takes two operands: 1. The first popped operand (just before the operator) is the per-pixel background value (in units of electron counts). 2. The second popped operand is the dataset that the noise should be added to. To demonstrate this noise pattern, let's use @code{mknoise-poisson} in the example of the description of @code{mknoise-sigma-from-mean} with the first command below. The second command below will show you the two images side-by-side, you will notice that the Poisson distribution's un-detected regions are slightly darker (this is because of the skewness of the Poisson distribution). Finally, with the last two commands, you can see the histograms of the two distributions: @example $ astarithmetic raw.fits 4 mknoise-poisson \ --output=poisson.fits $ astscript-fits-view sigma-from-mean.fits poisson.fits $ aststatistics sigma-from-mean.fits --lessthan=10 ------- Histogram: | *** | ****** | ********** | *********** | ************** | **************** | ****************** | ********************** | ************************** | ********************************** * |* ********************************************************** |------------------------------------------------------------ $ aststatistics poisson.fits --lessthan=10 ------- Histogram: | * * | * * | * * * | * * * * | * * * * * | * * * * * | * * * * * * * | * * * * * * * | * * * * * * * * | * * * * * * * * | * * * * * * * * |------------------------------------------------------------ @end example The extra skewness in the Poisson distribution, and the fact that it only returns integers is therefore clear with the commands above. The comparison was further made above in the description of @code{mknoise-sigma-from-mean}. In summary, you should prefer the Poisson distribution when you are simulating the following scenarios: @itemize @item A photon-starved image (as in UV or X-ray). @item A raw exposure of a photon-rich image (which may be photon-rich, but always integers). @end itemize @item mknoise-uniform Add uniform noise to each element of the input dataset. This operator takes two arguments: the top/first popped operand is the width of the interval, the second popped operand is the dataset that the noise should be added to (each element will be the center of the interval). The returned random values may happen to be the minimum interval value, but will never be the maximum. Except for the noise-model, this operator behaves very similar to @code{mknoise-sigma}, see the explanation there for more. For example, with the command below, a random value will be selected between 10 to 14 (centered on 12, which is the only input data element, with a total width of 4). @example echo 12 | asttable -c'arith $1 4 mknoise-uniform' @end example Similar to the example in @code{mknoise-sigma}, you can pipe the output of @command{echo} to @command{awk} before passing it to @command{asttable} to generate a full column of uniformly selected values within the same interval. @item random-from-hist-raw Generate random values from a custom distribution (defined by a histogram). The output will have a double-precision floating point type (see @ref{Numeric data types}). This operator takes three operands: @itemize @item The first popped operand (nearest to the operator) is the histogram values. The histogram is a 1-dimensional dataset (a table column) and contains the probability of obtaining a certain interval of values. The histogram does not have to be normalized: the GNU Scientific Library (or GSL, which is used by Gnuastro for this operator), will normalize it internally. The value of each bin (whose probability is given in the histogram) is given in the second popped operand. Therefore these two operands have to have the same number of rows. @item The second popped operand is the bin value (mostly the bin center, but it can be anything). The probability of each bin is defined in the histogram operand (first popped operand). The bins can have any width (do not have to be evenly spaced), and any order. Just make sure that the same row in the bins column corresponds to the same row in the histogram: the number of rows in the bins and histogram must be equal. @item The third popped operand is the dataset that the random values should be written over. Effectively only its size will be used by this operator (all values will be over-written as a double-precision floating point number). @end itemize The first two operands have to be single-dimensional (a table column) and have the same number of rows, but the last popped operand can have any number of dimensions. You can use the @code{load-col-} operator to load the two bins and histogram columns from an external file (see @ref{Loading external columns}). For example, in the command below, we first construct a fake histogram to represent a @mymath{y=x^2} distribution with AWK. We aim to distribute random values from this distribution in a @mymath{100\times100} image. Therefore, we use the @command{makenew} operator to construct an empty image of that size, use the @command{load-col-} operator to load the histogram columns into Arithmetic and put the output in @file{random.fits}. Finally we visually inspect @file{random.fits} with DS9 and also have a look at its pixel distribution with @command{aststatistics}. @example $ echo "" | awk '@{for(i=1;i<5;++i) print i, i*i@}' \ > histogram.txt $ cat histogram.txt 1 1 2 4 3 9 4 16 $ astarithmetic 100 100 2 makenew \ load-col-1-from-histogram.txt \ load-col-2-from-histogram.txt \ random-from-hist-raw \ --output=random.fits $ astscript-fits-view random.fits $ aststatistics random.fits --asciihist --numasciibins=50 | * | * | * | * | * * | * * | * * | * * * | * * * |* * * * |* * * * |-------------------------------------------------- @end example As you see, the 10000 pixels in the image only have values 1, 2, 3 or 4 (which were the values in the bins column of @file{histogram.txt}), and the number of times each of these values occurs follows the @mymath{y=x^2} distribution. Generally, any value given in the bins column will be used for the final output values. For example, in the command below (for generating a histogram from an analytical function), we are adding the bins by 20 (while keeping the same probability distribution of @mymath{y=x^2}). If you re-run the Arithmetic command above after this, you will notice that the pixels values are now one of the following 21, 22, 23 or 24 (instead of 1, 2, 3, or 4). But the shape of the histogram of the resulting random distribution will be unchanged. @example $ echo "" | awk '@{for(i=1;i<5;++i) print 20+i, i*i@}' \ > histogram.txt @end example If you do not want the outputs to have exactly the value of the bin identifier, but be a randomly selected value from a uniform distribution within the bin, you should use @command{random-from-hist} (see below). As mentioned above, the output will have a double-precision floating point type (see @ref{Numeric data types}). Therefore, by default each element of the output will consume 8 bytes (64-bits) of storage. This is usually far more than the statistical error/precision of your data (and just results in wasted storage in your file system, or wasted RAM when a program that uses the data is being run, and a slower running time of the program). It is therefore recommended to use a type-conversion operator after this operator to put the output in the smallest type that can be used to safely store your data without wasting storage, RAM or time. For the list of type conversion operators, see @ref{Numerical type conversion operators}. Recall that you already know the values returned by this operator (they are one of the values in the bins column). For example, in the example above, the whole image only has values 1, 2, 3 or 4. Since they are always positive and are below 255, we can safely place them in an unsigned 8-bit integer (see @ref{Numeric data types}) with the command below (note the @code{uint8} after the operator name, and that we are using a different name for the output). After building the new image, let's have a look at the sizes of the two images with @command{ls -l}: @example $ astarithmetic 100 100 2 makenew \ load-col-1-from-histogram.txt \ load-col-2-from-histogram.txt \ random-from-hist-raw uint8 \ --output=random-u8.fits $ ls -lh random.fits random-u8.fits -rw-r--r-- 1 name name 85K Jan 01 13:40 random.fits -rw-r--r-- 1 name name 17K Jan 01 13:45 random-u8.fits @end example As you see, when using a suitable data type, we can shrink the size of the file significantly without loosing any information (from 85 kilobytes to 17 kilobytes). This difference can be felt much better for larger (real-world) datasets, so be sure to always set the output data type after calling this operator. @item random-from-hist Similar to @code{random-from-hist-raw}, but do not return the exact bin value, instead return a random value from a uniform distribution within each bin. Therefore the following limitations have to be taken into account (compared to @code{random-from-hist-raw}): @itemize @item The number associated with each bin (in the bin column) should be its center. @item The bins have to be in descending order (so the second row in the bin column is larger than the first). @item The bin widths (distance from one bin to another) have to be fixed. @end itemize For a demonstration, let's replace @code{random-from-hist-raw} with @code{random-from-hist} in the example of the description of @code{random-from-hist-raw}. Note how we are manually converting the output of this operator into single-precision floating point (32-bit, since the default 64-bit precision is statistically meaningless in this scenario and we do not want to waste storage, memory and running time): @example $ echo "" | awk '@{for(i=1;i<5;++i) print i, i*i@}' \ > histogram.txt $ astarithmetic 100 100 2 makenew \ load-col-1-from-histogram.txt \ load-col-2-from-histogram.txt \ random-from-hist float32 \ --output=random.fits $ aststatistics random.fits --asciihist --numasciibins=50 | * | *** ******** | ************ | ************* | * * ************* | * *********************** | ************************* | ************************* | ************************************* |********* * ************************************** |************************************************** |-------------------------------------------------- @end example You can see that the pixels of @file{histogram.fits} are no longer just 1, 2, 3 or 4. Instead, the values within each bin are selected from a uniform distribution covering that bin. This creates the step-like feature in the histogram of the output. Of course, this extra uniform random number generation can make your program slower so be sure to check if it is worth it. In particular, one way to avoid this (and use @command{random-from-hist-raw} with a more contiguous-looking output distribution) is to simply use a higher-resolution histogram (assuming it is possible: you have a sufficient number of data points, or you have an analytical expression that you can sample at smaller bin sizes). To better demonstrate this operator and its practical usage in everyday research, let's look at another example: Assume you want to get 100 random star magnitudes that follow the real-world Gaia Data release 3 magnitude distribution within a radius of 2 degrees around the (RA,Dec) coordinate of (1.23,4.56). Let's further assume that you want to distribute them uniformly over an image of size 1000 by 1000 pixels. So your desired output table should have three columns, the first two are pixel positions of each star, and the third is the magnitude. First, we need to query the Gaia database and ask for all the magnitudes in this region of the sky. We know that Gaia is not complete for stars fainter than the 20th magnitude, so we will use the @option{--range} option and only ask for those stars that are brighter than magnitude 20. @example $ astquery gaia --dataset=dr3 --center=1.23,3.45 --radius=2 \ --column=phot_g_mean_mag --output=gaia.fits \ --range=phot_g_mean_mag,-inf,20 @end example We now have more than 25000 magnitudes in @file{gaia.fits}! To get a more accurate random sampling of our stars, let's construct a histogram with 500 bins, and generate our three desired randomly selected columns: @example $ aststatistics gaia.fits --histogram --numbins=500 \ --output=gaia-hist.fits $ asttable gaia-hist.fits -i $ echo 1000 \ | awk '@{for(i=0;i<100;++i) print $1/2@}' \ | asttable -c'arith $1 500 mknoise-uniform' \ -c'arith $1 500 mknoise-uniform' \ -c'arith $1 \ load-col-1-from-gaia-hist.fits-hdu-1 \ load-col-2-from-gaia-hist.fits-hdu-1 \ random-from-hist float32' @end example These columns can easily be placed in the format for @ref{MakeProfiles} to be inserted into an image automatically. @end table @node Coordinate and border operators, Loading external columns, Random number generators, Arithmetic operators @subsubsection Coordinate and border operators The operators here help you in defining or manipulating coordinates. For examples to define the ``box'' (a rectangular region) that surrounds an ellipse or to rotate a point around a reference point. @table @command @item rotate-coord Rotate the given point (horizontal and vertical coordinates given in 5th and 4th popped operands) around a center/reference point (coordinates given in the 3rd and 2nd popped operands) by a given angle (first popped operand). For example, if you want to trace the outer edge of a circle centered on (1.23,45.6) with a radius of 0.78, you can use this operator like below. The logic is that we assume a single point that is located on 0.78 units after the center on the horizontal axis (the point's vertical axis position is the same as the center). We then rotate this point in each row by one degree to build the circle's circumference. @verbatim $ cx=1.23 $ cy=45.6 $ rad=0.78 $ seq 0 360 \ | awk '{print '$rad'+'$cx', '$cy', $1}' \ | asttable -c'arith $1 $2 '$cx' '$cy' $3 rotate-coord' \ --output=circle.fits ## Within TOPCAT, after opening "Plane Plot", within "Axes" select ## "Aspect lock" so the steps in both axis is the same. $ astscript-fits-view circle.fits @end verbatim If you want the points to create a circle on the celestial sphere, you can use the @code{eq-j2000-from-flat} operator after this one (see @ref{Column arithmetic}): @verbatim $ seq 0 360 \ | awk '{print '$rad'+'$cx', '$cy', $1}' \ | asttable -c'arith $1 $2 '$cx' '$cy' $3 rotate-coord \ '$cx' '$cy' TAN eq-j2000-from-flat' \ --output=circle-on-sky.fits @end verbatim When you open TOPCAT, if you open the ``Plane Plot'', you will see an ellipse. However, if you open ``Sky Plot'' (from the ``Graphics'' menu), and select the first and second columns respectively, you will see a circle. The center coordinates and angle can be fixed for all the rows (as in the example above) or be different for every row. Recall that if you want these to change on every row, you should give the column name (or number followed by @code{$}) for these operands instead of the constant number above. @item box-around-ellipse Return the width (along horizontal) and height (along vertical) of a box that encompasses an ellipse with the same center point. The top-popped operand is assumed to be the position angle (angle from the horizontal axis) in @emph{degrees}. The second and third popped operands are the minor and major radii of the ellipse respectively. This operator outputs two operands on the general stack. The first one is the width and the second (which will be the top one when this operator finishes) is the height. If the value to the second popped operand (minor axis) is larger than the third (major axis), a NaN value will be written for both the width and height of that element and a warning will be printed (the warning can be disabled with the @option{--quiet} option). As an example, if your ellipse has a major axis radius of 10 units, a minor axis radius of 4 units and a position angle of 20 degrees, you can estimate the bounding box with this command: @example $ echo "10 4 20" \ | asttable -c'arith $1 $2 $3 box-around-ellipse' @end example Alternatively if your three values are in separate FITS arrays/images, you can use the command below to have the width and height in similarly sized fits arrays. In this example @file{a.fits} and @file{b.fits} are respectively the major and minor axis lengths and @file{pa.fits} is the position angle (in degrees). Also, in all three, we assume the first extension is used. After it is done, the height of the box will be put in @file{h.fits} and the width will be in @file{w.fits}. Just note that because this operator has two output datasets, you need to first write the height (top output operand) into a file and free it with the @code{tofilefree-} operator, then write the width in the file given to @option{--output}. @example $ astarithmetic a.fits b.fits pa.fits box-around-ellipse \ tofilefree-h.fits -ow.fits -g1 @end example Finally, if you need to treat the width and height separately for further processing, you can call the @code{set-} operator two times afterwards like below. Recall that the @code{set-} operator will pop the top operand, and put it in memory with a certain name, bringing the next operand to the top of the stack. For example, let's assume @file{catalog.fits} has at least three columns @code{MAJOR}, @code{MINOR} and @code{PA} which specify the major axis, minor axis and position angle respectively. But you want the final width and height in 32-bit floating point numbers (not the default 64-bit, which may be too much precision in many scenarios). You can do this with the command below (note you can also break lines with @key{\}, within the single-quote environment) @example $ asttable catalog.fits \ -c'arith MAJOR MINOR PA box-around-ellipse \ set-height set-width \ width float32 height float32' @end example @item box-vertices-on-sphere @cindex Polygon @cindex Vertices on sphere (sky) Convert a box center and width to the coordinates of the vertices of the box on a left-hand spherical coordinate system. In a left-handed spherical coordinate system, the longitude increases towards the left while north is up (as in the RA and Dec direction of the equatorial coordinate system used in astronomy). This operator therefore takes four input operands (the RA and Dec of the box's center, as well as the width of the box in each direction). After it is complete, this operator places 8 operands on the stack which contain the RA and Dec of the four vertices of the box in the following anti-clockwise order: @enumerate @item Bottom-left vertice Longitude (RA) @item Bottom-left vertice Latitude (Dec) @item Bottom-right vertice Longitude (RA) @item Bottom-right vertice Latitude (Dec) @item Top-right vertice Longitude (RA) @item Top-right vertice Latitude (Dec) @item Top-left vertice Longitude (RA) @item Top-left vertice Latitude (Dec) @end enumerate For example, with the command below, we will retrieve the vertice coordinates of a rectangle around a point with RA=20 and Dec=0 (on the equator). The rectangle will have a 1 degree edge along the RA direction and a 2 degree edge along the declination. In this example, we are using the @option{-Afixed -B2} only for demonstration purposes here due to the round numbers! In general, it is best to write your outputs to a binary FITS table to preserve the full precision (see @ref{Printing floating point numbers}). @example $ echo "20 0 1 2" \ | asttable -Afixed -B2 \ -c'arith $1 $2 $3 $4 box-vertices-on-sphere' 20.50 -1.00 19.50 -1.00 19.50 1.00 20.50 1.00 @end example We see that the bottom-left vertice is at (RA,Dec) of @mymath{(20.50,-1.0)} and the top-right vertice is at @mymath{(19.50,1.00)}. These could have easily been done by manually adding and subtracting! But you will see that the complexity arises at higher/lower declinations. For example, with the command below, let's see how vertice coordinates of the same box, but after moving its center to (RA,Dec) of (20,85): @example $ echo "20 85 1 2" \ | asttable -Afixed -B2 \ -c'arith $1 $2 $3 $4 box-vertices-on-sphere' 24.78 84.00 15.22 84.00 12.83 86.00 27.17 86.00 @end example Even though, we didn't change the central RA (20) or the size of the box along the RA (1 degree), the RA of the bottom-left vertice is now at 24.78; almost 5 degrees away! This occurs because of the spherical coordinate system, we measure the longitude (e.g., RA) with the following way: @enumerate @item @cindex Meridian @cindex Great circle @cindex Circle (great) Draw a meridian that passes your point. The meridian is half of a @url{https://en.wikipedia.org/wiki/Great_circle, great-circle} (which has a diameter that is equal to the sphere's diameter) passes both poles. @item Find the intersection of that meridian with the equator. @item The distance of the intersection and the reference point (along the equator) defines the longitude angle. @end enumerate @cindex Small circle @cindex Circle (small) As you get more distant from the equator (declination becomes non-zero), any change along the RA (towards the east; 1 degree in the example above) will on longer be on a great circle, but along a ``@url{https://en.wikipedia.org/wiki/Circle_of_a_sphere, small circle}''. On a small circle that is defined by the fixed declination @mymath{\delta}, the distance of two points is closer than the distances of their projection on the equator (as described in the definition of longitude above). It is smaller by a factor of @mymath{\cos({\delta})}. Therefore, an angular change (let's call it @mymath{\Delta_{lon}}) along the small circle defined by the fixed declination of @mymath{\delta} corresponds to @mymath{\Delta_{lon}/\cos(\delta)} on the equator. @end table @node Loading external columns, Size and position operators, Coordinate and border operators, Arithmetic operators @subsubsection Loading external columns In the Arithmetic program, you can always load new dataset by simply giving their name. However, they can only be images, not a column. In the Table program, you can load columns in @ref{Column arithmetic}, but it has to be columns within the same table (and thus the same number of rows). However, in some situations, it is necessary to use certain columns of a table in the Arithmetic program, or columns of different rows (from the main input) in Table. @table @command @item load-col-%-from-% @itemx load-col-%-from-%-hdu-% Load the requested column (first @command{%}) from the requested file (second @command{%}). If the file is a FITS file, it is also necessary to specify a HDU using the second form (where the HDU identifier is the third @command{%}. For example, @command{load-col-MAG-from-catalog.fits-hdu-1} will load the @code{MAG} column from HDU 1 of @code{catalog.fits}. For example, let's assume you have the following two tables, and you would like to add the first column of the first with the second: @example $ asttable tab-1.fits 1 43.23 2 21.91 3 71.28 4 18.10 $ cat tab-2.txt 5 6 7 8 $ asttable tab-1.txt -c'arith $1 load-col-1-from-tab-2.txt +' 6 8 10 12 @end example @end table @node Size and position operators, Building new dataset and stack management, Loading external columns, Arithmetic operators @subsubsection Size and position operators With the operators below you can get metadata about the top dataset on the stack. @table @code @item index Add a new operand to the stack with an integer type and the same size (in all dimensions) as top operand on the stack (before it was called; it is not popped!). The first pixel in the returned operand is zero, and every later pixel's value is incremented by one. It is important to remember that the top operand is not popped by this operand, so it remains on the stack. After this operand is finished, it adds a new operand to the stack. To pop the previous operand, you can use the @code{indexonly} operator. The data type of the output is always an unsigned integer, and its width is determined from the number of pixels/rows in the top operand. For example if there are only 108 rows in a table, the returned column will have an unsigned 8-bit integer type (that can keep 256 separate values). But if the top operand is a @mymath{1000\times1000=10^6} pixel image, the output will be a 32-bit unsigned integer. For the various types of integers, see @ref{Numeric data types}. To see the index image along with the actual image, you can use the @option{--writeall} operator to have a multi-HDU output (without @option{--writeall}, Arithmetic will complain if more than one operand is left at the end). After DS9 opens with the second command, flip between the two extensions. @example $ astarithmetic image.fits index --writeall $ astscript-fits-view image_arith.fits @end example Below is a review some usage examples of this operator: @table @asis @item Image: masking margins With the command below, we will be masking all pixels that are 20 pixels away from the edges of the image (on the margin). Here is a description of the command below (for the basics of Arithmetic's notation, see @ref{Reverse polish notation}): @itemize @item The @code{index} operator just adds a new dataset on the stack: unlike almost all other operators in Arithmetic, @code{index} doesn't remove its input dataset from the stack (use @code{indexonly} for the ``normal'' behavior). This is because @code{index} returns the pixel metadata not data. As a result, after @code{index}, we have two operands on the stack: the input image and the index image. @item With the @code{set-i} operator, the top operand (the image containing the index of each pixel) is popped from the stack and associated to the name @code{i}. Therefore after this, the stack only has the input image. For more on the @code{set-} operator, see @ref{Operand storage in memory or a file}. @item We need three values from the commands before Arithmetic (for the width and height of the image and the size of the margin). To make the rest of the command easier to read/use, we'll define them in Arithmetic as three named operators (respectively called @code{w}, @code{h} and @code{m}). All three are integers that will have a positive value lower than @mymath{2^{16}=65536} (for a ``normal'' image!). Therefore, we will store them as 16-bit unsigned integers with the @code{uint16} operator (this will help optimal processing in later steps). For more the type changing operators, see @ref{Numerical type conversion operators}. @item Using the modulo @code{%} and division (@code{/}) operators on the index image and the width, we extract the horizontal (X) and vertical (Y) positions of each pixel in separately named operands called @code{X} and @code{Y}. The maximum value in these two will also fit within an unsigned 16-bit integer, so we'll also store these in that type. @item For the horizontal (X) dimension, we select pixels that are less than the margin (@code{X m lt}) and those that are more than the width subtracted by the margin (@code{X w m - gt}). @item The output of the @code{lt} and @code{gt} conditional operators above is a binary (0 or 1 valued) image. We therefore merge them into one binary image using the @code{or} operator. For more, see @ref{Conditional operators}. @item We repeat the two steps above for the vertical (Y) dimension. @item Once the images containing the to-be-masked pixels in each dimension are made, we combine them into one binary image with a final @code{or} operator. At this point, the stack only has two operands: 1) the input image and 2) the binary image that has a value of 1 for all pixels whose value should be changed. @item A single-element operand (@code{nan}) is added on the stack. @item Using the @code{where} operator, we replace all the pixels that are non-zero in the second operand (on the margins) to the top operand's value (NaN) in the third popped operand (image that was read from @code{image.fits}). For more on the @code{where} operator, see @ref{Conditional operators}. @end itemize @example $ margin=20 $ width=$(astfits image.fits --keyvalue=NAXIS1 -q) $ height=$(astfits image.fits --keyvalue=NAXIS2 -q) $ astarithmetic image.fits index set-i \ $width uint16 set-w \ $height uint16 set-h \ $margin uint16 set-m \ i w % uint16 set-X \ i w / uint16 set-Y \ X m lt X w m - gt or \ Y m lt Y h m - gt or \ or nan where @end example @item Image: Masking regions outside a circle As another example for usage on an image, in the command below we are using @code{index} to define an image where each pixel contains the distance to the pixel with X,Y coordinates of 345,250. We are then using that distance image to only keep the pixels that are within a 50 pixel radius of that point. The basic concept behind this process is very similar to the previous example, with a different mathematical definition for pixels to mask. The major difference is that we want the distance to a pixel within the image, we need to have negative values and the center coordinates can be in a sub-pixel positions. The best numeric datatype for intermediate steps is therefore floating point. 64-bit floating point can have a precision of up to 15 digits after the decimal point. This is far too much for what we need here: in astronomical imaging, the PSF is usually on the scale of 1 or more pixels (see @ref{Sampling theorem}). So even reaching a precision of one millionth of a pixel (offered by 32-bit floating points) is beyond our wildest dreams (see @ref{Numeric data types}). We will also define the horizontal (X) and vertical (Y) operands after shifting to the desired central point. @example $ radius=50 $ centerx=345.2 $ centery=250.3 $ width=$(astfits image.fits --keyvalue=NAXIS1 -q) $ astarithmetic image.fits index set-i \ $width uint16 set-w \ $radius float32 set-r \ $centerx float32 set-cx \ $centery float32 set-cy \ i w % cx - set-X \ i w / cy - set-Y \ X X x Y Y x + sqrt r gt \ nan where --output=arith-masked.fits @end example @cartouche @noindent @strong{Optimal data types have significant benefits:} choosing the minimum required datatype for your operation is very important to avoid wasting your CPU and RAM. Don't simply default to 64-bit floating points for everything! Integer operations are much faster than floating points, and within floating point types, 32-bit is faster and will use half the RAM/storage! For more, see @ref{Numeric data types}. @end cartouche The example above was just a demo for usage of the @code{index} operator and some important concepts. But it is not the easiest way to achieve the desired result above! An easier way for the scenario above (to keep a circle within an image and set everything else to NaN) is to use MakeProfiles in combination with Arithmetic, like below: @example $ radius=50 $ centerx=345.2 $ centery=250.3 $ echo "1 $centerx $centery 5 $radius 0 0 1 1 1" \ | astmkprof --background=image.fits \ --mforflatpix --clearcanvas \ -omkprof-mask.fits --type=uint8 $ astarithmetic image.fits mkprof-mask.fits not \ nan where -g1 -omkprof-masked.fits @end example @item Tables: adding new columns with row index Within Table, you can use this operator to add an index column like below (see the @code{counter} operator for starting the count from one). @example ## The index will be the second column. $ asttable table.fits -c'arith $1 index' ## The index will be the first column $ asttable table.fits -c'arith $1 index swap' @end example @end table @item indexonly Similar to @code{index}, except that the top operand is popped from the stack and is no longer available afterwards. @item counter Similar to @code{index}, except that counting starts from one (not zero as in @code{index}). Counting from one is usually necessary when adding row counters in tables, like below: @example $ asttable table.fits -c'arith $1 counter swap' @end example @item counteronly Similar to @code{counter}, but the top operand before it is popped (no longer available). @item size Size of the dataset along a given FITS (or FORTRAN) dimension (counting from 1). The desired dimension should be the first popped operand and the dataset must be the second popped operand. The output will be a single unsigned integer (dimensions cannot be negative). For example, the following command will produce the size of the first extension/HDU (the default HDU) of @file{a.fits} along the second FITS axis. @example $ astarithmetic a.fits 2 size @end example @cartouche @noindent @strong{Not optimal:} This operator reads the top element on the stack and then simply reads its size along the given dimension. On a small dataset this won't consume much RAM, but if you want to put this in a pipeline or use it on large image, the extra RAM and slow operation can become meaningful. To avoid such issues, you can read the size along the given dimension using the @option{--keyvalue} option of @ref{Keyword inspection and manipulation}. For example, in the code below, the X axis position of every pixel is returned: @example $ width=$(astfits image.fits --keyvalue=NAXIS1 -q) $ astarithmetic image.fits indexonly $width % -opix-x.fits @end example @end cartouche @end table @node Building new dataset and stack management, Operand storage in memory or a file, Size and position operators, Arithmetic operators @subsubsection Building new dataset and stack management With the operator here, you can create a new dataset from scratch to start certain operations without any input data. @table @command @item makenew Create a new dataset that only has zero values. The number of dimensions is read as the first popped operand and the number of elements along each dimension are the next popped operand (in reverse of the popping order). The type of the new dataset is an unsigned 8-bit integer and all pixel values have a value of zero. For example, if you want to create a new 100 by 200 pixel image, you can run this command: @example $ astarithmetic 100 200 2 makenew @end example @noindent To further extend the example, you can use any of the noise-making operators to add noise to this new dataset (see @ref{Random number generators}), like the command below: @example $ astarithmetic 100 200 2 makenew 5 mknoise-sigma @end example @item constant Return an operand that will have a constant value (first popped operand) in all its elements. The number of elements is read from the second popped operand. The second popped operand is only used for its number of elements, its numeric data type, or its values are fully ignored and it is later freed. @cindex Provenance Here is one useful scenario for this operator in tables: you want to merge the objects/rows of some catalogs together, but you first want to give each source catalog a label/counter that distinguishes between the source of each rows in the merged/final catalog (using @ref{Invoking asttable}). The steps below show the the usage of this. @example ## Add label 1 to the RA, Dec, magnitude and magnitude error ## rows of the first catalog. $ asttable cat-1.fits -cRA,DEC,MAG,MAG_ERR \ -c'arith $1 1 constant' --output=tab-1.fits ## Similar to above, but for the second catalog. $ asttable cat-2.fits -cRA,DEC,MAG,MAG_ERR \ -c'arith $1 2 constant' --output=tab-2.fits ## Concatenate (merge/blend) the rows of the two tables into ## one for the 5 columns, but also add a counter for each ## object or row in the final catalog. $ asttable tab-1.fits --catrowfile=tab-2.fits \ -c'arith $1 counteronly' \ -cRA,DEC,MAG,MAG_ERR,5 --output=merged.fits \ --colmetadata=1,ID_MERGED,counter,"Merged ID." \ --colmetadata=6,SOURCE-CAT,counter,"Source ID." ## Add keyword information on each input. It is very important ## to preserve this within the merged catalog. If the tables ## came from public databases (for example on VizieR), give ## their public identifier as the value. $ astfits merged.fits --write=/,"Source catalogs" \ --write=CATSRC1,"I/355/gaiadr3","VizieR ID." \ --write=CATSRC2,"Jane Doe","Name of source." ## Check the metadata in 'merged.fits' and clean the ## temporary files. $ rm tab-1.fits tab-2.fits $ astfits merged.fits -h1 @end example Like most operators, @code{constant} is not limited to tables, you can also apply it on images. In the example below, we'll use @code{constant} to set all the pixels of the input image to NaN (which is necessary in scenarios that you need to include in an image in an analysis, but you don't want its pixels to affect the processing): @example $ astarithmetic image.fits nan constant @end example @item swap Swap the top two operands on the stack. For example the @code{index} operator doesn't pop with the top operand (the input to @code{index}), it just adds the index image to the stack. In case you want your next operation to be on the input to @code{index}, you can simply call @code{swap} and continue the operations on that image, while keeping the indexed pixels for later steps. In the example below we are using the @option{--writeall} option to write the full stack and if you open the outputs you will see that the stack order has changed. @example ## Index image is written in HDU 1. $ astarithmetic image.fits index --writeall \ --output=ind-first.fits ## image.fits in HDU 1. $ astarithmetic image.fits index swap --writeall \ --output=img-first.fits @end example @end table @node Operand storage in memory or a file, , Building new dataset and stack management, Arithmetic operators @subsubsection Operand storage in memory or a file In your early days of using Gnuastro, to do multiple operations, it is likely that you will simply call Arithmetic (or Table, with column arithmetic) multiple times: feed the output file of the first call to the second call. But as you get more proficient in the reverse polish notation, you will find yourself combining many operations into one call. This greatly speeds up your operation, because instead of writing the dataset to a file in one command, and reading it in the next command, it will just keep the intermediate dataset in memory! But adding more complexity to your operations, can make them much harder to debug, or extend even further. Therefore in this section we have some special operators that behave differently from the rest: they do not touch the contents of the data, only where/how they are stored. They are designed to do complex operations, without necessarily having a complex command. @table @command @item set-AAA Set the characters after the dash (@code{AAA} in the case shown here) as a name for the first popped operand on the stack. The named dataset will be freed from memory as soon as it is no longer needed, or if the name is reset to refer to another dataset later in the command. This operator thus enables reusability of a dataset without having to reread it from a file every time it is necessary during a process. When a dataset is necessary more than once, this operator can thus help simplify reading/writing on the command-line (thus avoiding potential bugs), while also speeding up the processing. Like all operators, this operator pops the top operand off of the main processing stack, but unlike other operands, it will not add anything back to the stack immediately. It will keep the popped dataset in memory through a separate list of named datasets (not on the main stack). That list will be used to add/copy any requested dataset to the main processing stack when the name is called. The name to give the popped dataset is part of the operator's name. For example, the @code{set-a} operator of the command below, gives the name ``@code{a}'' to the contents of @file{image.fits}. This name is then used instead of the actual filename to multiply the dataset by two. @example $ astarithmetic image.fits set-a a 2 x @end example The name can be any string, but avoid strings ending with standard filename suffixes (for example, @file{.fits})@footnote{A dataset name like @file{a.fits} (which can be set with @command{set-a.fits}) will cause confusion in the initial parser of Arithmetic. It will assume this name is a FITS file, and if it is used multiple times, Arithmetic will abort, complaining that you have not provided enough HDUs.}. One example of the usefulness of this operator is in the @code{where} operator. For example, let's assume you want to mask all pixels larger than @code{5} in @file{image.fits} (extension number 1) with a NaN value. Without setting a name for the dataset, you have to read the file two times from memory in a command like this: @example $ astarithmetic image.fits image.fits 5 gt nan where -g1 @end example But with this operator you can simply give @file{image.fits} the name @code{i} and simplify the command above to the more readable one below (which greatly helps when the filename is long): @example $ astarithmetic image.fits set-i i i 5 gt nan where @end example @item repeat Add N copies of the second popped operand to the stack of operands. N is the first popped operand. For example, let's assume @file{image.fits} is a @mymath{100\times100} image. The output of the command below will be a 3D datacube of size @mymath{100\times100\times20} voxels (volume-pixels): @example $ astarithmetic image.fits 20 repeat 20 add-dimension-slow @end example @item tofile-AAA Write the top operand on the operands stack into a file called @code{AAA} (can be any FITS file name) without changing the operands stack. If you do not need the dataset any more and would like to free it, see the @code{tofilefree} operator below. By default, any file that is given to this operator is deleted before Arithmetic actually starts working on the input datasets. The deletion can be deactivated with the @option{--dontdelete} option (as in all Gnuastro programs, see @ref{Input output options}). If the same FITS file is given to this operator multiple times, it will contain multiple extensions (in the same order that it was called. For example, the operator @command{tofile-check.fits} will write the top operand to @file{check.fits}. Since it does not modify the operands stack, this operator is very convenient when you want to debug, or understanding, a string of operators and operands given to Arithmetic: simply put @command{tofile-AAA} anywhere in the process to see what is happening behind the scenes without modifying the overall process. @item tofilefree-AAA Similar to the @code{tofile} operator, with the only difference that the dataset that is written to a file is popped from the operand stack and freed from memory (cannot be used any more). @end table @node Invoking astarithmetic, , Arithmetic operators, Arithmetic @subsection Invoking Arithmetic Arithmetic will do pixel to pixel arithmetic operations on the individual pixels of input data and/or numbers. For the full list of operators with explanations, please see @ref{Arithmetic operators}. Any operand that only has a single element (number, or single pixel FITS image) will be read as a number, the rest of the inputs must have the same dimensions. The general template is: @example $ astarithmetic [OPTION...] ASTRdata1 [ASTRdata2] OPERATOR ... @end example @noindent One line examples: @example ## Calculate (10.32-3.84)^2.7 quietly (will just print 155.329): $ astarithmetic -q 10.32 3.84 - 2.7 pow ## Inverse the input image (1/pixel): $ astarithmetic 1 image.fits / --out=inverse.fits ## Multiply each pixel in image by -1: $ astarithmetic image.fits -1 x --out=negative.fits ## Subtract extension 4 from extension 1 (counting from zero): $ astarithmetic image.fits image.fits - --out=skysub.fits \ --hdu=1 --hdu=4 ## Add two images, then divide them by 2 (2 is read as floating point): ## Note that without the '.0', the '2' will be read/used as an integer. $ astarithmetic image1.fits image2.fits + 2.0 / --out=average.fits ## Use Arithmetic's average operator: $ astarithmetic image1.fits image2.fits average --out=average.fits ## Calculate the median of three images in three separate extensions: $ astarithmetic img1.fits img2.fits img3.fits median \ -h0 -h1 -h2 --out=median.fits @end example Arithmetic's notation for giving operands to operators is fully described in @ref{Reverse polish notation}. The output dataset is last remaining operand on the stack. When the output dataset a single number, and @option{--output} is not called, it will be printed on the standard output (command-line). When the output is an array, it will be stored as a file. The name of the final file can be specified with the @option{--output} option, but if it is not given (and the output dataset has more than one element), Arithmetic will use ``automatic output'' on the name of the first FITS image encountered to generate an output file name, see @ref{Automatic output}. By default, if the output file already exists, it will be deleted before Arithmetic starts operation. However, this can be disabled with the @option{--dontdelete} option (see below). At any point during Arithmetic's operation, you can also write the top operand on the stack to a file, using the @code{tofile} or @code{tofilefree} operators, see @ref{Arithmetic operators}. By default, the world coordinate system (WCS) information of the output dataset will be taken from the first input image (that contains a WCS) on the command-line. This can be modified with the @option{--wcsfile} and @option{--wcshdu} options described below. When the @option{--quiet} option is not given, the name and extension of the dataset used for the output's WCS is printed on the command-line. Through operators like those starting with @code{collapse-}, the dimensionality of the inputs may not be the same as the outputs. By default, when the output is 1D, Arithmetic will write it as a table, not an image/array. The format of the output table (plain text or FITS ASCII or binary) can be set with the @option{--tableformat} option, see @ref{Input output options}). You can disable this feature (write 1D arrays as FITS images/arrays, or to the standard output) with the @option{--onedasimage} or @option{--onedonstdout} options. See @ref{Common options} for a review of the options in all Gnuastro programs. Arithmetic just redefines the @option{--hdu} and @option{--dontdelete} options as explained below. @table @option @item --arguments=STR A plain-text file containing the command-line arguments that will be used by Arithmetic. This option is only relevant when no arguments are given on the command-line: if any arguments are given, this option is ignored. @cindex Argument list too long This is necessary when the set of of input files and operators (arguments; see @ref{Arguments and options}) are very long (thousands of long file names for example; usually generated within large pipelines). Such long arguments will cause the shell to abort with an @code{Argument list too long} error. In such cases, you can put the list into a plain-text file and use this option like below (assuming you want to stack all the files in a certain directory with the @code{mean} operator; see @ref{Stacking operators}): @example $ counter=0; $ for f in $(pwd)/*.fits; do \ echo $f; counter=$((counter+1)); \ done > arguments.txt; \ echo "$counter mean" >> arguments.txt $ astarithmetic --arguments=list.txt -g1 @end example @item -h INT/STR @itemx --hdu INT/STR The header data unit of the input FITS images, see @ref{Input output options}. Unlike most options in Gnuastro (which will ultimately only have one value for this option), Arithmetic allows @option{--hdu} to be called multiple times and the value of each invocation will be stored separately (for the unlimited number of input images you would like to use). Recall that for other programs this (common) option only takes a single value. So in other programs, if you specify it multiple times on the command-line, only the last value will be used and in the configuration files, it will be ignored if it already has a value. The order of the values to @option{--hdu} has to be in the same order as input FITS images. Options are first read from the command-line (from left to right), then top-down in each configuration file, see @ref{Configuration file precedence}. If the number of HDUs is less than the number of input images, Arithmetic will abort and notify you. However, if there are more HDUs than FITS images, there is no problem: they will be used in the given order (every time a FITS image comes up on the stack) and the extra HDUs will be ignored in the end. So there is no problem with having extra HDUs in the configuration files and by default several HDUs with a value of @option{0} are kept in the system-wide configuration file when you install Gnuastro. @item -g INT/STR @itemx --globalhdu INT/STR Use the value to this option as the HDU of all input FITS files. This option is very convenient when you have many input files and the dataset of interest is in the same HDU of all the files. When this option is called, any values given to the @option{--hdu} option (explained above) are ignored and will not be used. @item -w FITS @itemx --wcsfile FITS FITS Filename containing the WCS structure that must be written to the output. The HDU/extension should be specified with @option{--wcshdu}. When this option is used, the respective WCS will be read before any processing is done on the command-line and directly used in the final output. If the given file does not have any WCS, then the default WCS (first file on the command-line with WCS) will be used in the output. This option will mostly be used when the default file (first of the set of inputs) is not the one containing your desired WCS. But with this option, you can also use Arithmetic to rewrite/change the WCS of an existing FITS dataset from another file: @example $ astarithmetic data.fits --wcsfile=other.fits -ofinal.fits @end example @item -W STR @itemx --wcshdu STR HDU/extension to read the WCS within the file given to @option{--wcsfile}. For more, see the description of @option{--wcsfile}. @item --envseed Use the environment for the random number generator settings in operators that need them (for example, @code{mknoise-sigma}). This is very important for obtaining reproducible results, for more see @ref{Generating random numbers}. @item -n STR @itemx --metaname=STR Metadata (name) of the output dataset. For a FITS image or table, the string given to this option is written in the @code{EXTNAME} or @code{TTYPE1} keyword (respectively). If this keyword is present in a FITS extension, it will be printed in the table output of a command like @command{astfits image.fits} (for images) or @command{asttable table.fits -i} (for tables). This metadata can be very helpful for yourself in the future (when you have forgotten the details), so it is recommended to use this option for files that should be archived or shared with colleagues. @item -u STR @itemx --metaunit=STR Metadata (units) of the output dataset. For a FITS image or table, the string given to this option is written in the @code{BUNIT} or @code{TTYPE1} keyword respectively. In the case of tables, recall that the Arithmetic program only outputs a single column, you should use column arithmetic in Table for more than one column (see @ref{Column arithmetic}). For more on the importance of metadata, see the description of @option{--metaname}. @item -c STR @itemx --metacomment=STR Metadata (comments) of the output dataset. For a FITS image or table, the string given to this option is written in the @code{COMMENT} or @code{TCOMM1} keyword respectively. In the case of tables, recall that the Arithmetic program only outputs a single column, you should use column arithmetic in Table for more than one column (see @ref{Column arithmetic}). For more on the importance of metadata, see the description of @option{--metaname}. @item -O @itemx --onedasimage Write final dataset as a FITS image/array even if it has a single dimension. By default, if the output is 1D, it will be written as a table, see above. If the output has more than one dimension, this option is redundant. @item -s @itemx --onedonstdout Write final dataset (only when it is 1D) to standard output, not as a file. By default 1D datasets will be written as a table, see above. If the output has more than one dimension, this option is redundant. @item -D @itemx --dontdelete Do not delete the output file, or files given to the @code{tofile} or @code{tofilefree} operators, if they already exist. Instead append the desired datasets to the extensions that already exist in the respective file. Note it does not matter if the final output file name is given with the @option{--output} option, or determined automatically. Arithmetic treats this option differently from its default operation in other Gnuastro programs (see @ref{Input output options}). If the output file exists, when other Gnuastro programs are called with @option{--dontdelete}, they simply complain and abort. But when Arithmetic is called with @option{--dontdelete}, it will appended the dataset(s) to the existing extension(s) in the file. @item -a @itemx --writeall Write all datasets on the stack as separate HDUs in the output file. This only affects datasets with multiple dimensions (or single-dimension datasets when the @option{--onedasimg} is called). This option is useful to debug Arithmetic calls: to check all the images on the stack while you are designing your operation. The top dataset on the stack will be on HDU number 1 of the output, the second dataset will be on HDU number 2 and so on. @end table Arithmetic accepts two kinds of input: images and numbers. Images are considered to be any of the inputs that is a file name of a recognized type (see @ref{Arguments}) and has more than one element/pixel. Numbers on the command-line will be read into the smallest type (see @ref{Numeric data types}) that can store them, so @command{-2} will be read as a @code{char} type (which is signed on most systems and can thus keep negative values), @command{2500} will be read as an @code{unsigned short} (all positive numbers will be read as unsigned), while @code{3.1415926535897} will be read as a @code{double} and @code{3.14} will be read as a @code{float}. To force a number to be read as float, put a @code{.} after it (possibly followed by a zero for easier readability), or add an @code{f} after it. Hence while @command{5} will be read as an integer, @command{5.}, @command{5.0} or @command{5f} will be added to the stack as @code{float} (see @ref{Reverse polish notation}). Unless otherwise stated (in @ref{Arithmetic operators}), the operators can deal with numeric multiple data types (see @ref{Numeric data types}). For example, in ``@command{a.fits b.fits +}'', the image types can be @code{long} and @code{float}. In such cases, C's internal type conversion will be used. The output type will be set to the higher-ranking type of the two inputs. Unsigned integer types have smaller ranking than their signed counterparts and floating point types have higher ranking than the integer types. So the internal C type conversions done in the example above are equivalent to this piece of C: @example size_t i; long a[100]; float b[100], out[100]; for(i=0;i<100;++i) out[i]=a[i]+b[i]; @end example @noindent Relying on the default C type conversion significantly speeds up the processing and also requires less RAM (when using very large images). Some operators can only work on integer types (of any length, for example, bitwise operators) while others only work on floating point types, (currently only the @code{pow} operator). In such cases, if the operand type(s) are different, an error will be printed. Arithmetic also comes with internal type conversion operators which you can use to convert the data into the appropriate type, see @ref{Arithmetic operators}. @cindex Options The hyphen (@command{-}) can be used both to specify options (see @ref{Options}) and also to specify a negative number which might be necessary in your arithmetic. In order to enable you to do this, Arithmetic will first parse all the input strings and if the first character after a hyphen is a digit, then that hyphen is temporarily replaced by the vertical tab character which is not commonly used. The arguments are then parsed and these strings will not be specified as an option. Then the given arguments are parsed and any vertical tabs are replaced back with a hyphen so they can be read as negative numbers. Therefore, as long as the names of the files you want to work on, do not start with a vertical tab followed by a digit, there is no problem. An important consequence of this implementation is that you should not write negative fractions like this: @command{-.3}, instead write them as @command{-0.3}. @cindex AWK @cindex GNU AWK Without any images, Arithmetic will act like a simple calculator and print the resulting output number on the standard output like the first example above. If you really want such calculator operations on the command-line, AWK (GNU AWK is the most common implementation) is much faster, easier and much more powerful. For example, the numerical one-line example above can be done with the following command. In general AWK is a fantastic tool and GNU AWK has a wonderful manual (@url{https://www.gnu.org/software/gawk/manual/}). So if you often confront situations like this, or have to work with large text tables/catalogs, be sure to checkout AWK and simplify your life. @example $ echo "" | awk '@{print (10.32-3.84)^2.7@}' 155.329 @end example @node Convolve, Warp, Arithmetic, Data manipulation @section Convolve @cindex Convolution @cindex Neighborhood @cindex Weighted average @cindex Average, weighted @cindex Kernel, convolution On an image, convolution can be thought of as a process to blur or remove the contrast in an image. If you are already familiar with the concept and just want to run Convolve, you can jump to @ref{Convolution kernel} and @ref{Invoking astconvolve} and skip the lengthy introduction on the basic definitions and concepts of convolution. There are generally two methods to convolve an image. The first and more intuitive one is in the ``spatial domain'' or using the actual image pixel values, see @ref{Spatial domain convolution}. The second method is when we manipulate the ``frequency domain'', or work on the magnitudes of the different frequencies that constitute the image, see @ref{Frequency domain and Fourier operations}. Understanding convolution in the spatial domain is more intuitive and thus recommended if you are just starting to learn about convolution. However, getting a good grasp of the frequency domain is a little more involved and needs some concentration and some mathematical proofs. However, its reward is a faster operation and more importantly a very fundamental understanding of this very important operation. @cindex Detection @cindex Atmosphere @cindex Blur image @cindex Cosmic rays @cindex Pixel mixing @cindex Mixing pixel values Convolution of an image will generally result in blurring the image because it mixes pixel values. In other words, if the image has sharp differences in neighboring pixel values@footnote{In astronomy, the only major time we confront such sharp borders in signal are cosmic rays. All other sources of signal in an image are already blurred by the atmosphere or the optics of the instrument.}, those sharp differences will become smoother. This has very good consequences in detection of signal in noise for example. In an actual observed image, the variation in neighboring pixel values due to noise can be very high. But after convolution, those variations will decrease and we have a better hope in detecting the possible underlying signal. Another case where convolution is extensively used is in mock images and modeling in general, convolution can be used to simulate the effect of the atmosphere or the optical system on the mock profiles that we create, see @ref{PSF}. Convolution is a very interesting and important topic in any form of signal analysis (including astronomical observations). So we have thoroughly@footnote{A mathematician will certainly consider this explanation is incomplete and inaccurate. However this text is written for an understanding on the operations that are done on a real (not complex, discrete and noisy) astronomical image, not any general form of abstract function} explained the concepts behind it in the following sub-sections. @menu * Spatial domain convolution:: Only using the input image values. * Frequency domain and Fourier operations:: Using frequencies in input. * Spatial vs. Frequency domain:: When to use which? * Convolution kernel:: How to specify the convolution kernel. * Invoking astconvolve:: Options and argument to Convolve. @end menu @node Spatial domain convolution, Frequency domain and Fourier operations, Convolve, Convolve @subsection Spatial domain convolution The pixels in an input image represent different ``spatial'' positions, therefore when convolution is done only using the actual input pixel values, we name the process as being done in the ``Spatial domain''. In particular this is in contrast to the ``frequency domain'' that we will discuss later in @ref{Frequency domain and Fourier operations}. In the spatial domain (and in realistic situations where the image and the convolution kernel do not extend to infinity), convolution is the process of changing the value of one pixel to the @emph{weighted} average of all the pixels in its @emph{neighborhood}. The `neighborhood' of each pixel (how many pixels in which direction) and the `weight' function (how much each neighboring pixel should contribute depending on its position) are given through a second image which is known as a ``kernel''@footnote{Also known as filter, here we will use `kernel'.}. @menu * Convolution process:: More basic explanations. * Edges in the spatial domain:: Dealing with the edges of an image. @end menu @node Convolution process, Edges in the spatial domain, Spatial domain convolution, Spatial domain convolution @subsubsection Convolution process In convolution, the kernel specifies the weight and positions of the neighbors of each pixel. To find the convolved value of a pixel, the central pixel of the kernel is placed on that pixel. The values of each overlapping pixel in the kernel and image are multiplied by each other and summed for all the kernel pixels. To have one pixel in the center, the sides of the convolution kernel have to be an odd number. This process effectively mixes the pixel values of each pixel with its neighbors, resulting in a blurred image compared to the sharper input image. @cindex Linear spatial filtering Formally, convolution is one kind of linear `spatial filtering' in image processing texts. If we assume that the kernel has @mymath{2a+1} and @mymath{2b+1} pixels on each side, the convolved value of a pixel placed at @mymath{x} and @mymath{y} (@mymath{C_{x,y}}) can be calculated from the neighboring pixel values in the input image (@mymath{I}) and the kernel (@mymath{K}) from @dispmath{C_{x,y}=\sum_{s=-a}^{a}\sum_{t=-b}^{b}K_{s,t}\times{}I_{x+s,y+t}.} @cindex Correlation @cindex Convolution Formally, any pixel that is outside of the image in the equation above will be considered to be zero (although, see @ref{Edges in the spatial domain}). When the kernel is symmetric about its center the blurred image has the same orientation as the original image. However, if the kernel is not symmetric, the image will be affected in the opposite manner, this is a natural consequence of the definition of spatial filtering. In order to avoid this we can rotate the kernel about its center by 180 degrees so the convolved output can have the same original orientation (this is done by default in the Convolve program). Technically speaking, only if the kernel is flipped the process is known as @emph{Convolution}. If it is not it is known as @emph{Correlation}. To be a weighted average, the sum of the weights (the pixels in the kernel) has to be unity. This will have the consequence that the convolved image of an object and unconvolved object will have the same brightness (see @ref{Brightness flux magnitude}), which is natural, because convolution should not eat up the object photons, it only disperses them. The convolution of each pixel is independent of the other pixels, and in some cases, it may be necessary to convolve different parts of an image separately (for example, when you have different amplifiers on the CCD). Therefore, to speed up spatial convolution, Gnuastro first defines a tessellation over the input; assigning each group of pixels to ``tiles''. It then does the convolution in parallel on each tile. For more on how Gnuastro's programs create the tile grid (tessellation), see @ref{Tessellation}. @node Edges in the spatial domain, , Convolution process, Spatial domain convolution @subsubsection Edges in the spatial domain In purely `linear' spatial filtering (convolution), there are problems with the edges of the input image. Here we will explain the problem in the spatial domain. For a discussion of this problem from the frequency domain perspective, see @ref{Edges in the frequency domain}. The problem originates from the fact that on the edges, in practice, the sum of the weights we use on the actual image pixels is not unity@footnote{Because we assumed the overlapping pixels outside the input image have a value of zero.}. For example, as discussed above, a profile in the center of an image will have the same brightness before and after convolution. However, for partially imaged profile on the edge of the image, the brightness (sum of its pixel fluxes within the image, see @ref{Brightness flux magnitude}) will not be equal, some of the flux is going to be `eaten' by the edges. If you run @command{$ make check} on the source files of Gnuastro, you can see this effect by comparing the @file{convolve_frequency.fits} with @file{convolve_spatial.fits} in the @file{./tests/} directory. In the spatial domain, by default, no assumption will be made about pixels outside of the image or any blank pixels in the image. The problem explained above will also occur on the sides of blank regions (see @ref{Blank pixels}). The solution to this edge effect problem is only possible in the spatial domain. For pixels near the edge, we have to abandon the assumption that the sum of the kernel pixels is unity during the convolution process@footnote{Of course the sum of the kernel pixels still have to be unity in general.}. So taking @mymath{W} as the sum of the kernel pixels that overlapped with non-blank and in-image pixels, the equation in @ref{Convolution process} will become: @dispmath{C_{x,y}= { \sum_{s=-a}^{a}\sum_{t=-b}^{b}K_{s,t}\times{}I_{x+s,y+t} \over W}.} @noindent In this manner, objects which are near the edges of the image or blank pixels will also have the same brightness (within the image) before and after convolution. This correction is applied by default in Convolve when convolving in the spatial domain. To disable it, you can use the @option{--noedgecorrection} option. In the frequency domain, there is no way to avoid this loss of flux near the edges of the image, see @ref{Edges in the frequency domain} for an interpretation from the frequency domain perspective. Note that the edge effect discussed here is different from the one in @ref{If convolving afterwards}. In making mock images we want to simulate a real observation. In a real observation, the images of the galaxies on the sides of the CCD are first blurred by the atmosphere and instrument, then imaged. So light from the parts of a galaxy which are immediately outside the CCD will affect the parts of the galaxy which are covered by the CCD. Therefore in modeling the observation, we have to convolve an image that is larger than the input image by exactly half of the convolution kernel. We can hence conclude that this correction for the edges is only useful when working on actual observed images (where we do not have any more data on the edges) and not in modeling. @node Frequency domain and Fourier operations, Spatial vs. Frequency domain, Spatial domain convolution, Convolve @subsection Frequency domain and Fourier operations Getting a good grip on the frequency domain is usually not an easy job! So we have decided to give the issue a complete review here. Convolution in the frequency domain (see @ref{Convolution theorem}) heavily relies on the concepts of Fourier transform (@ref{Fourier transform}) and Fourier series (@ref{Fourier series}) so we will be investigating these important operations first. It has become something of a clich@'e for people to say that the Fourier series ``is a way to represent a (wave-like) function as the sum of simple sine waves'' (from Wikipedia). However, sines themselves are abstract functions, so this statement really adds no extra layer of physical insight. Before jumping head-first into the equations and proofs, we will begin with a historical background to see how the importance of frequencies actually roots in our ancient desire to see everything in terms of circles. A short review of how the complex plane should be interpreted is then given. Having paved the way with these two basics, we define the Fourier series and subsequently the Fourier transform. The final aim is to explain discrete Fourier transform, however some very important concepts need to be solidified first: The Dirac comb, convolution theorem and sampling theorem. So each of these topics are explained in their own separate sub-sub-section before going on to the discrete Fourier transform. Finally we revisit (after @ref{Edges in the spatial domain}) the problem of convolution on the edges, but this time in the frequency domain. Understanding the sampling theorem and the discrete Fourier transform is very important in order to be able to pull out valuable science from the discrete image pixels. Therefore we have included the mathematical proofs and figures so you can have a clear understanding of these very important concepts. @menu * Fourier series historical background:: Historical background. * Circles and the complex plane:: Interpreting complex numbers. * Fourier series:: Fourier Series definition. * Fourier transform:: Fourier Transform definition. * Dirac delta and comb:: Dirac delta and Dirac comb. * Convolution theorem:: Derivation of Convolution theorem. * Sampling theorem:: Sampling theorem (Nyquist frequency). * Discrete Fourier transform:: Derivation and explanation of DFT. * Fourier operations in two dimensions:: Extend to 2D images. * Edges in the frequency domain:: Interpretation of edge effects. @end menu @node Fourier series historical background, Circles and the complex plane, Frequency domain and Fourier operations, Frequency domain and Fourier operations @subsubsection Fourier series historical background Ever since the ancient times, the circle has been (and still is) the simplest shape for abstract comprehension. All you need is a center point and a radius and you are done. All the points on a circle are at a fixed distance from the center. However, the moment you try to connect this elegantly simple and beautiful abstract construct (the circle) with the real world (for example, compute its area or its circumference), things become really hard (ideally, impossible) because the irrational number @mymath{\pi} gets involved. The key to understanding the Fourier series (thus the Fourier transform and finally the Discrete Fourier Transform) is our ancient desire to express everything in terms of circles or the most exceptionally simple and elegant abstract human construct. Most people prefer to say the same thing in a more ahistorical manner: to break a function into sines and cosines. As the term ``ancient'' in the previous sentence implies, Jean-Baptiste Joseph Fourier (1768 -- 1830 A.D.) was not the first person to do this. The main reason we know this process by his name today is that he came up with an ingenious method to find the necessary coefficients (radius of) and frequencies (``speed'' of rotation on) the circles for any generic (integrable) function. @float Figure,epicycle @c Since these links are long, we had to write them like this so they do not @c jump out of the text width. @cindex Qutb al-Din al-Shirazi @cindex al-Shirazi, Qutb al-Din @image{gnuastro-figures/epicycles, 15.2cm, , Middle ages epicycles along with two demonstrations of breaking a generic function using epicycles.} @caption{Epicycles and the Fourier series. Left: A demonstration of Mercury's epicycles relative to the ``center of the world'' by Qutb al-Din al-Shirazi (1236 -- 1311 A.D.) retrieved @url{https://commons.wikimedia.org/wiki/File:Ghotb2.jpg, from Wikipedia}. @url{https://commons.wikimedia.org/wiki/File:Fourier_series_square_wave_circles_animation.gif, Middle} and Right: How adding more epicycles (or terms in the Fourier series) will approximate functions. The @url{https://commons.wikimedia.org/wiki/File:Fourier_series_sawtooth_wave_circles_animation.gif, right} animation is also available.} @end float Like most aspects of mathematics, this process of interpreting everything in terms of circles, began for astronomical purposes. When astronomers noticed that the orbit of Mars and other outer planets, did not appear to be a simple circle (as everything should have been in the heavens). At some point during their orbit, the revolution of these planets would become slower, stop, go back a little (in what is known as the retrograde motion) and then continue going forward again. The correction proposed by Ptolemy (90 -- 168 A.D.) was the most agreed upon. He put the planets on Epicycles or circles whose center itself rotates on a circle whose center is the earth. Eventually, as observations became more and more precise, it was necessary to add more and more epicycles in order to explain the complex motions of the planets@footnote{See the Wikipedia page on ``Deferent and epicycle'' for a more complete historical review.}. @ref{epicycle}(Left) shows an example depiction of the epicycles of Mercury in the late 13th century. @cindex Aristarchus of Samos Of course we now know that if they had abdicated the Earth from its throne in the center of the heavens and allowed the Sun to take its place, everything would become much simpler and true. But there was not enough observational evidence for changing the ``professional consensus'' of the time to this radical view suggested by a small minority@footnote{Aristarchus of Samos (310 -- 230 B.C.) appears to be one of the first people to suggest the Sun being in the center of the universe. This approach to science (that the standard model is defined by consensus) and the fact that this consensus might be completely wrong still applies equally well to our models of particle physics and cosmology today.}. So the pre-Galilean astronomers chose to keep Earth in the center and find a correction to the models (while keeping the heavens a purely ``circular'' order). The main reason we are giving this historical background which might appear off topic is to give historical evidence that while such ``approximations'' do work and are very useful for pragmatic reasons (like measuring the calendar from the movement of astronomical bodies). They offer no physical insight. The astronomers who were involved with the Ptolemaic world view had to add a huge number of epicycles during the centuries after Ptolemy in order to explain more accurate observations. Finally the death knell of this world-view was Galileo's observations with his new instrument (the telescope). So the physical insight, which is what Astronomers and Physicists are interested in (as opposed to Mathematicians and Engineers who just like proving and optimizing or calculating!) comes from being creative and not limiting ourselves to such approximations. Even when they work. @node Circles and the complex plane, Fourier series, Fourier series historical background, Frequency domain and Fourier operations @subsubsection Circles and the complex plane Before going onto the derivation, it is also useful to review how the complex numbers and their plane relate to the circles we talked about above. The two schematics in the middle and right of @ref{epicycle} show how a 1D function of time can be made using the 2D real and imaginary surface. Seeing the animation in Wikipedia will really help in understanding this important concept. At each point in time, we take the vertical coordinate of the point and use it to find the value of the function at that point in time. @ref{iandtime} shows this relation with the axes marked. @cindex Roger Cotes @cindex Cotes, Roger @cindex Caspar Wessel @cindex Wassel, Caspar @cindex Leonhard Euler @cindex Euler, Leonhard @cindex Abraham de Moivre @cindex de Moivre, Abraham Leonhard Euler@footnote{Other forms of this equation were known before Euler. For example, in 1707 A.D. (the year of Euler's birth) Abraham de Moivre (1667 -- 1754 A.D.) showed that @mymath{(\cos{x}+i\sin{x})^n=\cos(nx)+i\sin(nx)}. In 1714 A.D., Roger Cotes (1682 -- 1716 A.D. a colleague of Newton who proofread the second edition of Principia) showed that: @mymath{ix=\ln(\cos{x}+i\sin{x})}.} (1707 -- 1783 A.D.) showed that the complex exponential (@mymath{e^{iv}} where @mymath{v} is real) is periodic and can be written as: @mymath{e^{iv}=\cos{v}+isin{v}}. Therefore @mymath{e^{iv+2\pi}=e^{iv}}. Later, Caspar Wessel (mathematician and cartographer 1745 -- 1818 A.D.) showed how complex numbers can be displayed as vectors on a plane. Euler's identity might seem counter intuitive at first, so we will try to explain it geometrically (for deeper physical insight). On the real-imaginary 2D plane (like the left hand plot in each box of @ref{iandtime}), multiplying a number by @mymath{i} can be interpreted as rotating the point by @mymath{90} degrees (for example, the value @mymath{3} on the real axis becomes @mymath{3i} on the imaginary axis). On the other hand, @mymath{e\equiv\lim_{n\rightarrow\infty}(1+{1\over n})^n}, therefore, defining @mymath{m\equiv nu}, we get: @dispmath{e^{u}=\lim_{n\rightarrow\infty}\left(1+{1\over n}\right)^{nu} =\lim_{n\rightarrow\infty}\left(1+{u\over nu}\right)^{nu} =\lim_{m\rightarrow\infty}\left(1+{u\over m}\right)^{m}} @noindent Taking @mymath{u\equiv iv} the result can be written as a generic complex number (a function of @mymath{v}): @dispmath{e^{iv}=\lim_{m\rightarrow\infty}\left(1+i{v\over m}\right)^{m}=a(v)+ib(v)} @noindent For @mymath{v=\pi}, a nice geometric animation of going to the limit can be seen @url{https://commons.wikimedia.org/wiki/File:ExpIPi.gif, on Wikipedia}. We see that @mymath{\lim_{m\rightarrow\infty}a(\pi)=-1}, while @mymath{\lim_{m\rightarrow\infty}b(\pi)=0}, which gives the famous @mymath{e^{i\pi}=-1} equation. The final value is the real number @mymath{-1}, however the distance of the polygon points traversed as @mymath{m\rightarrow\infty} is half the circumference of a circle or @mymath{\pi}, showing how @mymath{v} in the equation above can be interpreted as an angle in units of radians and therefore how @mymath{a(v)=cos(v)} and @mymath{b(v)=sin(v)}. Since @mymath{e^{iv}} is periodic (let's assume with a period of @mymath{T}), it is more clear to write it as @mymath{v\equiv{2{\pi}n\over T}t} (where @mymath{n} is an integer), so @mymath{e^{iv}=e^{i{2{\pi}n\over T}t}}. The advantage of this notation is that the period (@mymath{T}) is clearly visible and the frequency (@mymath{2{\pi}n \over T}, in units of 1/cycle) is defined through the integer @mymath{n}. In this notation, @mymath{t} is in units of ``cycle''s. As we see from the examples in @ref{epicycle} and @ref{iandtime}, for each constituting frequency, we need a respective `magnitude' or the radius of the circle in order to accurately approximate the desired 1D function. The concepts of ``period'' and ``frequency'' are relatively easy to grasp when using temporal units like time because this is how we define them in every-day life. However, in an image (astronomical data), we are dealing with spatial units like distance. Therefore, by one ``period'' we mean the @emph{distance} at which the signal is identical and frequency is defined as the inverse of that spatial ``period''. The complex circle of @ref{iandtime} can be thought of the Moon rotating about Earth which is rotating around the Sun; so the ``Real (signal)'' axis shows the Moon's position as seen by a distant observer on the Sun as time goes by. Because of the scalar (not having any direction or vector) nature of time, @ref{iandtime} is easier to understand in units of time. When thinking about spatial units, mentally replace the ``Time (sec)'' axis with ``Distance (meters)''. Because length has direction and is a vector, visualizing the rotation of the imaginary circle and the advance along the ``Distance (meters)'' axis is not as simple as temporal units like time. @float Figure,iandtime @image{gnuastro-figures/iandtime, 15.2cm, , } @caption{Relation between the real (signal), imaginary (@mymath{i\equiv\sqrt{-1}}) and time axes at two snapshots of time.} @end float @node Fourier series, Fourier transform, Circles and the complex plane, Frequency domain and Fourier operations @subsubsection Fourier series In astronomical images, our variable (brightness, or number of photo-electrons, or signal to be more generic) is recorded over the 2D spatial surface of a camera pixel. However to make things easier to understand, here we will assume that the signal is recorded in 1D (assume one row of the 2D image pixels). Also for this section and the next (@ref{Fourier transform}) we will be talking about the signal before it is digitized or pixelated. Let's assume that we have the continuous function @mymath{f(l)} which is integrable in the interval @mymath{[l_0, l_0+L]} (always true in practical cases like images). Take @mymath{l_0} as the position of the first pixel in the assumed row of the image and @mymath{L} as the width of the image along that row. The units of @mymath{l_0} and @mymath{L} can be in any spatial units (for example, meters) or an angular unit (like radians) multiplied by a fixed distance which is more common. To approximate @mymath{f(l)} over this interval, we need to find a set of frequencies and their corresponding `magnitude's (see @ref{Circles and the complex plane}). Therefore our aim is to show @mymath{f(l)} as the following sum of periodic functions: @dispmath{ f(l)=\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}n\over L}l} } @noindent Note that the different frequencies (@mymath{2{\pi}n/L}, in units of cycles per meters for example) are not arbitrary. They are all integer multiples of the fundamental frequency of @mymath{\omega_0=2\pi/L}. Recall that @mymath{L} was the length of the signal we want to model. Therefore, we see that the smallest possible frequency (or the frequency resolution) in the end, depends on the length we observed the signal or @mymath{L}. In the case of each dimension on an image, this is the size of the image in the respective dimension. The frequencies have been defined in this ``harmonic'' fashion to insure that the final sum is periodic outside of the @mymath{[l_0, l_0+L]} interval too. At this point, you might be thinking that the sky is not periodic with the same period as my camera's view angle. You are absolutely right! The important thing is that since your camera's observed region is the only region we are ``observing'' and will be using, the rest of the sky is irrelevant; so we can safely assume the sky is periodic outside of it. However, this working assumption will haunt us later in @ref{Edges in the frequency domain}. The frequencies are thus determined by definition. So all we need to do is to find the coefficients (@mymath{c_n}), or magnitudes, or radii of the circles for each frequency which is identified with the integer @mymath{n}. Fourier's approach was to multiply both sides with a fixed term: @dispmath{ f(l)e^{-i{2{\pi}m\over L}l}=\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}(n-m)\over L}l} } @noindent where @mymath{m>0}@footnote{ We could have assumed @mymath{m<0} and set the exponential to positive, but this is more clear.}. We can then integrate both sides over the observation period: @dispmath{ \int_{l_0}^{l_0+L}f(l)e^{-i{2{\pi}m\over L}l}dl =\int_{l_0}^{l_0+L}\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}(n-m)\over L}l}dl=\displaystyle\sum_{n=-\infty}^{\infty}c_n\int_{l_0}^{l_0+L}e^{i{2{\pi}(n-m)\over L}l}dl } @noindent Both @mymath{n} and @mymath{m} are positive integers. Also, we know that a complex exponential is periodic so after one period (@mymath{L}) it comes back to its starting point. Therefore @mymath{\int_{l_0}^{l_0+L}e^{2{\pi}k/L}dl=0} for any @mymath{k>0}. However, when @mymath{k=0}, this integral becomes: @mymath{\int_{l_0}^{l_0+T}e^0dt=\int_{l_0}^{l_0+T}dt=T}. Hence since the integral will be zero for all @mymath{n{\neq}m}, we get: @dispmath{ \displaystyle\sum_{n=-\infty}^{\infty}c_n\int_{l_0}^{l_0+T}e^{i{2{\pi}(n-m)\over L}l}dl=Lc_m } @noindent The origin of the axis is fundamentally an arbitrary position. So let's set it to the start of the image such that @mymath{l_0=0}. So we can find the ``magnitude'' of the frequency @mymath{2{\pi}m/L} within @mymath{f(l)} through the relation: @dispmath{ c_m={1\over L}\int_{0}^{L}f(l)e^{-i{2{\pi}m\over L}l}dl } @node Fourier transform, Dirac delta and comb, Fourier series, Frequency domain and Fourier operations @subsubsection Fourier transform In @ref{Fourier series}, we had to assume that the function is periodic outside of the desired interval with a period of @mymath{L}. Therefore, assuming that @mymath{L\rightarrow\infty} will allow us to work with any function. However, with this approximation, the fundamental frequency (@mymath{\omega_0}) or the frequency resolution that we discussed in @ref{Fourier series} will tend to zero: @mymath{\omega_0\rightarrow0}. In the equation to find @mymath{c_m}, every @mymath{m} represented a frequency (multiple of @mymath{\omega_0}) and the integration on @mymath{l} removes the dependence of the right side of the equation on @mymath{l}, making it only a function of @mymath{m} or frequency. Let's define the following two variables: @dispmath{\omega{\equiv}m\omega_0={2{\pi}m\over L}} @dispmath{F(\omega){\equiv}Lc_m} @noindent The equation to find the coefficients of each frequency in @ref{Fourier series} thus becomes: @dispmath{ F(\omega)=\int_{-\infty}^{\infty}f(l)e^{-i{\omega}l}dl.} @noindent The function @mymath{F(\omega)} is thus the @emph{Fourier transform} of @mymath{f(l)} in the frequency domain. So through this transformation, we can find (analyze) the magnitudes of the constituting frequencies or the value in the frequency space@footnote{As we discussed before, this `magnitude' can be interpreted as the radius of the circle rotating at this frequency in the epicyclic interpretation of the Fourier series, see @ref{epicycle} and @ref{iandtime}.} of our spatial input function. The great thing is that we can also do the reverse and later synthesize the input function from its Fourier transform. Let's do it: with the approximations above, multiply the right side of the definition of the Fourier Series (@ref{Fourier series}) with @mymath{1=L/L=({\omega_0}L)/(2\pi)}: @dispmath{ f(l)={1\over 2\pi}\displaystyle\sum_{n=-\infty}^{\infty}Lc_ne^{{2{\pi}in\over L}l}\omega_0={1\over 2\pi}\displaystyle\sum_{n=-\infty}^{\infty}F(\omega)e^{i{\omega}l}\Delta\omega } @noindent To find the right most side of this equation, we renamed @mymath{\omega_0} as @mymath{\Delta\omega} because it was our resolution, @mymath{2{\pi}n/L} was written as @mymath{\omega} and finally, @mymath{Lc_n} was written as @mymath{F(\omega)} as we defined above. Now, as @mymath{L\rightarrow\infty}, @mymath{\Delta\omega\rightarrow0} so we can write: @dispmath{ f(l)={1\over 2\pi}\int_{-\infty}^{\infty}F(\omega)e^{i{\omega}l}d\omega } Together, these two equations provide us with a very powerful set of tools that we can use to process (analyze) and recreate (synthesize) the input signal. Through the first equation, we can break up our input function into its constituent frequencies and analyze it, hence it is also known as @emph{analysis}. Using the second equation, we can synthesize or make the input function from the known frequencies and their magnitudes. Thus it is known as @emph{synthesis}. Here, we symbolize the Fourier transform (analysis) and its inverse (synthesis) of a function @mymath{f(l)} and its Fourier Transform @mymath{F(\omega)} as @mymath{{\cal F}[f]} and @mymath{{\cal F}^{-1}[F]}. @node Dirac delta and comb, Convolution theorem, Fourier transform, Frequency domain and Fourier operations @subsubsection Dirac delta and comb The Dirac @mymath{\delta} (delta) function (also known as an impulse) is the way that we convert a continuous function into a discrete one. It is defined to satisfy the following integral: @dispmath{\int_{-\infty}^{\infty}\delta(l)dl=1} @noindent When integrated with another function, it gives that function's value at @mymath{l=0}: @dispmath{\int_{-\infty}^{\infty}f(l)\delta(l)dt=f(0)} @noindent An impulse positioned at another point (say @mymath{l_0}) is written as @mymath{\delta(l-l_0)}: @dispmath{\int_{-\infty}^{\infty}f(l)\delta(l-l_0)dt=f(l_0)} @noindent The Dirac @mymath{\delta} function also operates similarly if we use summations instead of integrals. The Fourier transform of the delta function is: @dispmath{{\cal F}[\delta(l)]=\int_{-\infty}^{\infty}\delta(l)e^{-i{\omega}l}dl=e^{-i{\omega}0}=1} @dispmath{{\cal F}[\delta(l-l_0)]=\int_{-\infty}^{\infty}\delta(l-l_0)e^{-i{\omega}l}dl=e^{-i{\omega}l_0}} @noindent From the definition of the Dirac @mymath{\delta} we can also define a Dirac comb (@mymath{{\rm III}_P}) or an impulse train with infinite impulses separated by @mymath{P}: @dispmath{ {\rm III}_P(l)\equiv\displaystyle\sum_{k=-\infty}^{\infty}\delta(l-kP) } @noindent @mymath{P} is chosen to represent ``pixel width'' later in @ref{Sampling theorem}. Therefore the Dirac comb is periodic with a period of @mymath{P}. We have intentionally used a different name for the period of the Dirac comb compared to the input signal's length of observation that we showed with @mymath{L} in @ref{Fourier series}. This difference is highlighted here to avoid confusion later when these two periods are needed together in @ref{Discrete Fourier transform}. The Fourier transform of the Dirac comb will be necessary in @ref{Sampling theorem}, so let's derive it. By its definition, it is periodic, with a period of @mymath{P}, so the Fourier coefficients of its Fourier Series (@ref{Fourier series}) can be calculated within one period: @dispmath{{\rm III}_P=\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}n\over P}l}} @noindent We can now find the @mymath{c_n} from @ref{Fourier series}: @dispmath{ c_n={1\over P}\int_{-P/2}^{P/2}\delta(l)e^{-i{2{\pi}n\over P}l} ={1\over P}\quad\quad \rightarrow \quad\quad {\rm III}_P={1\over P}\displaystyle\sum_{n=-\infty}^{\infty}e^{i{2{\pi}n\over P}l} } @noindent So we can write the Fourier transform of the Dirac comb as: @dispmath{ {\cal F}[{\rm III}_P]=\int_{-\infty}^{\infty}{\rm III}_Pe^{-i{\omega}l}dl ={1\over P}\displaystyle\sum_{n=-\infty}^{\infty}\int_{-\infty}^{\infty}e^{-i(\omega-{2{\pi}n\over P})l}dl={1\over P}\displaystyle\sum_{n=-\infty}^{\infty}\delta\left(\omega-{2{\pi}n\over P}\right) } @noindent In the last step, we used the fact that the complex exponential is a periodic function, that @mymath{n} is an integer and that as we defined in @ref{Fourier transform}, @mymath{\omega{\equiv}m\omega_0}, where @mymath{m} was an integer. The integral will be zero for any @mymath{\omega} that is not equal to @mymath{2{\pi}n/P}, a more complete explanation can be seen in @ref{Fourier series}. Therefore, while in the spatial domain the impulses had spacing of @mymath{P} (meters for example), in the frequency space, the spacing between the different impulses are @mymath{2\pi/P} cycles per meters. @node Convolution theorem, Sampling theorem, Dirac delta and comb, Frequency domain and Fourier operations @subsubsection Convolution theorem The convolution (shown with the @mymath{\ast} operator) of the two functions @mymath{f(l)} and @mymath{h(l)} is defined as: @dispmath{ c(l)\equiv[f{\ast}h](l)=\int_{-\infty}^{\infty}f(\tau)h(l-\tau)d\tau } @noindent See @ref{Convolution process} for a more detailed physical (pixel based) interpretation of this definition. The Fourier transform of convolution (@mymath{C(\omega)}) can be written as: @dispmath{ C(\omega)=\int_{-\infty}^{\infty}[f{\ast}h](l)e^{-i{\omega}l}dl= \int_{-\infty}^{\infty}f(\tau)\left[\int_{-\infty}^{\infty}h(l-\tau)e^{-i{\omega}l}dl\right]d\tau } @noindent To solve the inner integral, let's define @mymath{s{\equiv}l-\tau}, so that @mymath{ds=dl} and @mymath{l=s+\tau} then the inner integral becomes: @dispmath{ \int_{-\infty}^{\infty}h(l-\tau)e^{-i{\omega}l}dl= \int_{-\infty}^{\infty}h(s)e^{-i{\omega}(s+\tau)}ds=e^{-i{\omega}\tau}\int_{-\infty}^{\infty}h(s)e^{-i{\omega}s}ds=H(\omega)e^{-i{\omega}\tau} } @noindent where @mymath{H(\omega)} is the Fourier transform of @mymath{h(l)}. Substituting this result for the inner integral above, we get: @dispmath{ C(\omega)=H(\omega)\int_{-\infty}^{\infty}f(\tau)e^{-i{\omega}\tau}d\tau=H(\omega)F(\omega)=F(\omega)H(\omega) } @noindent where @mymath{F(\omega)} is the Fourier transform of @mymath{f(l)}. So multiplying the Fourier transform of two functions individually, we get the Fourier transform of their convolution. The convolution theorem also proves a relation between the convolutions in the frequency space. Let's define: @dispmath{D(\omega){\equiv}F(\omega){\ast}H(\omega)} @noindent Applying the inverse Fourier Transform or synthesis equation (@ref{Fourier transform}) to both sides and following the same steps above, we get: @dispmath{d(l)=f(l)h(l)} @noindent Where @mymath{d(l)} is the inverse Fourier transform of @mymath{D(\omega)}. We can therefore re-write the two equations above formally as the convolution theorem: @dispmath{ {\cal F}[f{\ast}h]={\cal F}[f]{\cal F}[h] } @dispmath{ {\cal F}[fh]={\cal F}[f]\ast{\cal F}[h] } Besides its usefulness in blurring an image by convolving it with a given kernel, the convolution theorem also enables us to do another very useful operation in data analysis: to match the blur (or PSF) between two images taken with different telescopes/cameras or under different atmospheric conditions. This process is also known as deconvolution. Let's take @mymath{f(l)} as the image with a narrower PSF (less blurry) and @mymath{c(l)} as the image with a wider PSF which appears more blurred. Also let's take @mymath{h(l)} to represent the kernel that should be convolved with the sharper image to create the more blurry image. Above, we proved the relation between these three images through the convolution theorem. But there, we assumed that @mymath{f(l)} and @mymath{h(l)} are known (given) and the convolved image is desired. In deconvolution, we have @mymath{f(l)} --the sharper image-- and @mymath{f*h(l)} --the more blurry image-- and we want to find the kernel @mymath{h(l)}. The solution is a direct result of the convolution theorem: @dispmath{ {\cal F}[h]={{\cal F}[f{\ast}h]\over {\cal F}[f]} \quad\quad {\rm or} \quad\quad h(l)={\cal F}^{-1}\left[{{\cal F}[f{\ast}h]\over {\cal F}[f]}\right] } While this works really nice, it has two problems: @itemize @item If @mymath{{\cal F}[f]} has any zero values, then the inverse Fourier transform will not be a number! @item If there is significant noise in the image, then the high frequencies of the noise are going to significantly reduce the quality of the final result. @end itemize A standard solution to both these problems is the Weiner deconvolution algorithm@footnote{@url{https://en.wikipedia.org/wiki/Wiener_deconvolution}}. @node Sampling theorem, Discrete Fourier transform, Convolution theorem, Frequency domain and Fourier operations @subsubsection Sampling theorem Our mathematical functions are continuous, however, our data collecting and measuring tools are discrete. Here we want to give a mathematical formulation for digitizing the continuous mathematical functions so that later, we can retrieve the continuous function from the digitized recorded input. Assuming that we have a continuous function @mymath{f(l)}, then we can define @mymath{f_s(l)} as the `sampled' @mymath{f(l)} through the Dirac comb (see @ref{Dirac delta and comb}): @dispmath{ f_s(l)=f(l){\rm III}_P=\displaystyle\sum_{n=-\infty}^{\infty}f(l)\delta(l-nP) } @noindent The discrete data-element @mymath{f_k} (for example, a pixel in an image), where @mymath{k} is an integer, can thus be represented as: @dispmath{f_k=\int_{-\infty}^{\infty}f_s(l)dl=\int_{-\infty}^{\infty}f(l)\delta(l-kP)dt=f(kP)} Note that in practice, our discrete data points are not found in this fashion. Each detector pixel (in an image for example) has an area and averages the signal it receives over that area, not a mathematical point as the Dirac @mymath{\delta} function defines. However, as long as the variation in the signal over one detector pixel is not significant, this can be a good approximation. Having put this issue to the side, we can now try to find the relation between the Fourier transforms of the un-sampled @mymath{f(l)} and the sampled @mymath{f_s(l)}. For a more clear notation, let's define: @dispmath{F_s(\omega)\equiv{\cal F}[f_s]} @dispmath{D(\omega)\equiv{\cal F}[{\rm III}_P]} @noindent Then using the Convolution theorem (see @ref{Convolution theorem}), @mymath{F_s(\omega)} can be written as: @dispmath{F_s(\omega)={\cal F}[f(l){\rm III}_P]=F(\omega){\ast}D(\omega)} @noindent Finally, from the definition of convolution and the Fourier transform of the Dirac comb (see @ref{Dirac delta and comb}), we get: @dispmath{ \eqalign{ F_s(\omega) &= \int_{-\infty}^{\infty}F(\omega)D(\omega-\mu)d\mu \cr &= {1\over P}\displaystyle\sum_{n=-\infty}^{\infty}\int_{-\infty}^{\infty}F(\omega)\delta\left(\omega-\mu-{2{\pi}n\over P}\right)d\mu \cr &= {1\over P}\displaystyle\sum_{n=-\infty}^{\infty}F\left( \omega-{2{\pi}n\over P}\right).\cr } } @mymath{F(\omega)} was only a simple function, see @ref{samplingfreq}(left). However, from the sampled Fourier transform function we see that @mymath{F_s(\omega)} is the superposition of infinite copies of @mymath{F(\omega)} that have been shifted, see @ref{samplingfreq}(right). From the equation, it is clear that the shift in each copy is @mymath{2\pi/P}. @float Figure,samplingfreq @image{gnuastro-figures/samplingfreq, 15.2cm, , } @caption{Sampling causes infinite repetition in the frequency domain. FT is an abbreviation for `Fourier transform'. @mymath{\omega_m} represents the maximum frequency present in the input. @mymath{F(\omega)} is only symmetric on both sides of 0 when the input is real (not complex). In general @mymath{F(\omega)} is complex and thus cannot be simply plotted like this. Here we have assumed a real Gaussian @mymath{f(t)} which has produced a Gaussian @mymath{F(\omega)}.} @end float The input @mymath{f(l)} can have any distribution of frequencies in it. In the example of @ref{samplingfreq}(left), the input consisted of a range of frequencies equal to @mymath{\Delta\omega=2\omega_m}. Fortunately as @ref{samplingfreq}(right) shows, the assumed pixel size (@mymath{P}) we used to sample this hypothetical function was such that @mymath{2\pi/P>\Delta\omega}. The consequence is that each copy of @mymath{F(\omega)} has become completely separate from the surrounding copies. Such a digitized (sampled) data set is thus called @emph{over-sampled}. When @mymath{2\pi/P=\Delta\omega}, @mymath{P} is just small enough to finely separate even the largest frequencies in the input signal and thus it is known as @emph{critically-sampled}. Finally if @mymath{2\pi/P<\Delta\omega} we are dealing with an @emph{under-sampled} data set. In an under-sampled data set, the separate copies of @mymath{F(\omega)} are going to overlap and this will deprive us of recovering high constituent frequencies of @mymath{f(l)}. The effects of under-sampling in an image with high rates of change (for example, a brick wall imaged from a distance) can clearly be visually seen and is known as @emph{aliasing}. When the input @mymath{f(l)} is composed of a finite range of frequencies, @mymath{f(l)} is known as a @emph{band-limited} function. The example in @ref{samplingfreq}(left) was a nice demonstration of such a case: for all @mymath{\omega<-\omega_m} or @mymath{\omega>\omega_m}, we have @mymath{F(\omega)=0}. Therefore, when the input function is band-limited and our detector's pixels are placed such that we have critically (or over-) sampled it, then we can exactly reproduce the continuous @mymath{f(l)} from the discrete or digitized samples. To do that, we just have to isolate one copy of @mymath{F(\omega)} from the infinite copies and take its inverse Fourier transform. This ability to exactly reproduce the continuous input from the sampled or digitized data leads us to the @emph{sampling theorem} which connects the inherent property of the continuous signal (its maximum frequency) to that of the detector (the spacing between its pixels). The sampling theorem states that the full (continuous) signal can be recovered when the pixel size (@mymath{P}) and the maximum constituent frequency in the signal (@mymath{\omega_m}) have the following relation@footnote{This equation is also shown in some places without the @mymath{2\pi}. Whether @mymath{2\pi} is included or not depends on how you define the frequency}: @dispmath{{2\pi\over P}>2\omega_m} @noindent This relation was first formulated by Harry Nyquist (1889 -- 1976 A.D.) in 1928 and formally proved in 1949 by Claude E. Shannon (1916 -- 2001 A.D.) in what is now known as the Nyquist-Shannon sampling theorem. In signal processing, the signal is produced (synthesized) by a transmitter and is received and de-coded (analyzed) by a receiver. Therefore producing a band-limited signal is necessary. In astronomy, we do not produce the shapes of our targets, we are only observers. Galaxies can have any shape and size, therefore ideally, our signal is not band-limited. However, since we are always confined to observing through an aperture, the aperture will cause a point source (for which @mymath{\omega_m=\infty}) to be spread over several pixels. This spread is quantitatively known as the point spread function or PSF. This spread does blur the image which is undesirable; however, for this analysis it produces the positive outcome that there will be a finite @mymath{\omega_m}. Though we should caution that any detector will have noise which will add lots of very high frequency (ideally infinite) changes between the pixels. However, the coefficients of those noise frequencies are usually exceedingly small. @node Discrete Fourier transform, Fourier operations in two dimensions, Sampling theorem, Frequency domain and Fourier operations @subsubsection Discrete Fourier transform As we have stated several times so far, the input image is a digitized, pixelated or discrete array of values (@mymath{f_s(l)}, see @ref{Sampling theorem}). The input is not a continuous function. Also, all our numerical calculations can only be done on a sampled, or discrete Fourier transform. Note that @mymath{F_s(\omega)} is not discrete, it is continuous. One way would be to find the analytic @mymath{F_s(\omega)}, then sample it at any desired ``freq-pixel''@footnote{We are using the made-up word ``freq-pixel'' so they are not confused with spatial domain ``pixels''.} spacing. However, this process would involve two steps of operations and computers in particular are not too good at analytic operations for the first step. So here, we will derive a method to directly find the `freq-pixel'ated @mymath{F_s(\omega)} from the pixelated @mymath{f_s(l)}. Let's start with the definition of the Fourier transform (see @ref{Fourier transform}): @dispmath{F_s(\omega)=\int_{-\infty}^{\infty}f_s(l)e^{-i{\omega}l}dl } @noindent From the definition of @mymath{f_s(\omega)} (using @mymath{x} instead of @mymath{n}) we get: @dispmath{ \eqalign{ F_s(\omega) &= \displaystyle\sum_{x=-\infty}^{\infty} \int_{-\infty}^{\infty}f(l)\delta(l-xP)e^{-i{\omega}l}dl \cr &= \displaystyle\sum_{x=-\infty}^{\infty} f_xe^{-i{\omega}xP} } } @noindent Where @mymath{f_x} is the value of @mymath{f(l)} on the point @mymath{x} or the value of the @mymath{x}th pixel. As shown in @ref{Sampling theorem} this function is infinitely periodic with a period of @mymath{2\pi/P}. So all we need is the values within one period: @mymath{0<\omega<2\pi/P}, see @ref{samplingfreq}. We want @mymath{X} samples within this interval, so the frequency difference between each frequency sample or freq-pixel is @mymath{1/XP}. Hence we will evaluate the equation above on the points at: @dispmath{\omega={u\over XP} \quad\quad u = 0, 1, 2, ..., X-1} @noindent Therefore the value of the freq-pixel @mymath{u} in the frequency domain is: @dispmath{F_u=\displaystyle\sum_{x=0}^{X-1} f_xe^{-i{ux\over X}} } @noindent Therefore, we see that for each freq-pixel in the frequency domain, we are going to need all the pixels in the spatial domain@footnote{So even if one pixel is a blank pixel (see @ref{Blank pixels}), all the pixels in the frequency domain will also be blank.}. If the input (spatial) pixel row is also @mymath{X} pixels wide, then we can exactly recover the @mymath{x}th pixel with the following summation: @dispmath{f_x={1\over X}\displaystyle\sum_{u=0}^{X-1} F_ue^{i{ux\over X}} } When the input pixel row (we are still only working on 1D data) has @mymath{X} pixels, then it is @mymath{L=XP} spatial units wide. @mymath{L}, or the length of the input data was defined in @ref{Fourier series} and @mymath{P} or the space between the pixels in the input was defined in @ref{Dirac delta and comb}. As we saw in @ref{Sampling theorem}, the input (spatial) pixel spacing (@mymath{P}) specifies the range of frequencies that can be studied and in @ref{Fourier series} we saw that the length of the (spatial) input, (@mymath{L}) determines the resolution (or size of the freq-pixels) in our discrete Fourier transformed image. Both result from the fact that the frequency domain is the inverse of the spatial domain. @node Fourier operations in two dimensions, Edges in the frequency domain, Discrete Fourier transform, Frequency domain and Fourier operations @subsubsection Fourier operations in two dimensions Once all the relations in the previous sections have been clearly understood in one dimension, it is very easy to generalize them to two or even more dimensions since each dimension is by definition independent. Previously we defined @mymath{l} as the continuous variable in 1D and the inverse of the period in its direction to be @mymath{\omega}. Let's show the second spatial direction with @mymath{m} the inverse of the period in the second dimension with @mymath{\nu}. The Fourier transform in 2D (see @ref{Fourier transform}) can be written as: @dispmath{F(\omega, \nu)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty} f(l, m)e^{-i({\omega}l+{\nu}m)}dl} @dispmath{f(l, m)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty} F(\omega, \nu)e^{i({\omega}l+{\nu}m)}dl} The 2D Dirac @mymath{\delta(l,m)} is non-zero only when @mymath{l=m=0}. The 2D Dirac comb (or Dirac brush! See @ref{Dirac delta and comb}) can be written in units of the 2D Dirac @mymath{\delta}. For most image detectors, the sides of a pixel are equal in both dimensions. So @mymath{P} remains unchanged, if a specific device is used which has non-square pixels, then for each dimension a different value should be used. @dispmath{{\rm III}_P(l, m)\equiv\displaystyle\sum_{j=-\infty}^{\infty} \displaystyle\sum_{k=-\infty}^{\infty} \delta(l-jP, m-kP) } The Two dimensional Sampling theorem (see @ref{Sampling theorem}) is thus very easily derived as before since the frequencies in each dimension are independent. Let's take @mymath{\nu_m} as the maximum frequency along the second dimension. Therefore the two dimensional sampling theorem says that a 2D band-limited function can be recovered when the following conditions hold@footnote{If the pixels are not a square, then each dimension has to use the respective pixel size, but since most detectors have square pixels, we assume so here too}: @dispmath{ {2\pi\over P} > 2\omega_m \quad\quad\quad {\rm and} \quad\quad\quad {2\pi\over P} > 2\nu_m} Finally, let's represent the pixel counter on the second dimension in the spatial and frequency domains with @mymath{y} and @mymath{v} respectively. Also let's assume that the input image has @mymath{Y} pixels on the second dimension. Then the two dimensional discrete Fourier transform and its inverse (see @ref{Discrete Fourier transform}) can be written as: @dispmath{F_{u,v}=\displaystyle\sum_{x=0}^{X-1}\displaystyle\sum_{y=0}^{Y-1} f_{x,y}e^{-i({ux\over X}+{vy\over Y})} } @dispmath{f_{x,y}={1\over XY}\displaystyle\sum_{u=0}^{X-1}\displaystyle\sum_{v=0}^{Y-1} F_{u,v}e^{i({ux\over X}+{vy\over Y})} } @node Edges in the frequency domain, , Fourier operations in two dimensions, Frequency domain and Fourier operations @subsubsection Edges in the frequency domain With a good grasp of the frequency domain, we can revisit the problem of convolution on the image edges, see @ref{Edges in the spatial domain}. When we apply the convolution theorem (see @ref{Convolution theorem}) to convolve an image, we first take the discrete Fourier transforms (DFT, @ref{Discrete Fourier transform}) of both the input image and the kernel, then we multiply them with each other and then take the inverse DFT to construct the convolved image. Of course, in order to multiply them with each other in the frequency domain, the two images have to be the same size, so let's assume that we pad the kernel (it is usually smaller than the input image) with zero valued pixels in both dimensions so it becomes the same size as the input image before the DFT. Having multiplied the two DFTs, we now apply the inverse DFT which is where the problem is usually created. If the DFT of the kernel only had values of 1 (unrealistic condition!) then there would be no problem and the inverse DFT of the multiplication would be identical with the input. However in real situations, the kernel's DFT has a maximum of 1 (because the sum of the kernel has to be one, see @ref{Convolution process}) and decreases something like the hypothetical profile of @ref{samplingfreq}. So when multiplied with the input image's DFT, the coefficients or magnitudes (see @ref{Circles and the complex plane}) of the smallest frequency (or the sum of the input image pixels) remains unchanged, while the magnitudes of the higher frequencies are significantly reduced. As we saw in @ref{Sampling theorem}, the Fourier transform of a discrete input will be infinitely repeated. In the final inverse DFT step, the input is in the frequency domain (the multiplied DFT of the input image and the kernel DFT). So the result (our output convolved image) will be infinitely repeated in the spatial domain. In order to accurately reconstruct the input image, we need all the frequencies with the correct magnitudes. However, when the magnitudes of higher frequencies are decreased, longer periods (shorter frequencies) will dominate in the reconstructed pixel values. Therefore, when constructing a pixel on the edge of the image, the newly empowered longer periods will look beyond the input image edges and will find the repeated input image there. So if you convolve an image in this fashion using the convolution theorem, when a bright object exists on one edge of the image, its blurred wings will be present on the other side of the convolved image. This is often termed as circular convolution or cyclic convolution. So, as long as we are dealing with convolution in the frequency domain, there is nothing we can do about the image edges. The least we can do is to eliminate the ghosts of the other side of the image. So, we add zero valued pixels to both the input image and the kernel in both dimensions so the image that will be convolved has a size equal to the sum of both images in each dimension. Of course, the effect of this zero-padding is that the sides of the output convolved image will become dark. To put it another way, the edges are going to drain the flux from nearby objects. But at least it is consistent across all the edges of the image and is predictable. In Convolve, you can see the padded images when inspecting the frequency domain convolution steps with the @option{--viewfreqsteps} option. @node Spatial vs. Frequency domain, Convolution kernel, Frequency domain and Fourier operations, Convolve @subsection Spatial vs. Frequency domain With the discussions above it might not be clear when to choose the spatial domain and when to choose the frequency domain. Here we will try to list the benefits of each. @noindent The spatial domain, @itemize @item Can correct for the edge effects of convolution, see @ref{Edges in the spatial domain}. @item Can operate on blank pixels. @item Can be faster than frequency domain when the kernel is small (in terms of the number of pixels on the sides). @end itemize @noindent The frequency domain, @itemize @item Will be much faster when the image and kernel are both large. @end itemize @noindent As a general rule of thumb, when working on an image of modeled profiles use the frequency domain and when working on an image of real (observed) objects use the spatial domain (corrected for the edges). The reason is that if you apply a frequency domain convolution to a real image, you are going to loose information on the edges and generally you do not want large kernels. But when you have made the profiles in the image yourself, you can just make a larger input image and crop the central parts to completely remove the edge effect, see @ref{If convolving afterwards}. Also due to oversampling, both the kernels and the images can become very large and the speed boost of frequency domain convolution will significantly improve the processing time, see @ref{Oversampling}. @node Convolution kernel, Invoking astconvolve, Spatial vs. Frequency domain, Convolve @subsection Convolution kernel All the programs that need convolution will need to be given a convolution kernel file and extension. In most cases (other than Convolve, see @ref{Convolve}) the kernel file name is optional. However, the extension is necessary and must be specified either on the command-line or at least one of the configuration files (see @ref{Configuration files}). Within Gnuastro, there are two ways to create a kernel image: @itemize @item MakeProfiles: You can use MakeProfiles to create a parametric (based on a radial function) kernel, see @ref{MakeProfiles}. By default MakeProfiles will make the Gaussian and Moffat profiles in a separate file so you can feed it into any of the programs. @item ConvertType: You can write your own desired kernel into a text file table and convert it to a FITS file with ConvertType, see @ref{ConvertType}. Just be careful that the kernel has to have an odd number of pixels along its two axes, see @ref{Convolution process}. All the programs that do convolution will normalize the kernel internally, so if you choose this option, you do not have to worry about normalizing the kernel. Only within Convolve, there is an option to disable normalization, see @ref{Invoking astconvolve}. @end itemize @noindent The two options to specify a kernel file name and its extension are shown below. These are common between all the programs that will do convolution. @table @option @item -k FITS @itemx --kernel=FITS The convolution kernel file name. The @code{BITPIX} (data type) value of this file can be any standard type and it does not necessarily have to be normalized. Several operations will be done on the kernel image prior to the program's processing: @itemize @item It will be converted to floating point type. @item All blank pixels (see @ref{Blank pixels}) will be set to zero. @item It will be normalized so the sum of its pixels equal unity. @item It will be flipped so the convolved image has the same orientation. This is only relevant if the kernel is not circular. See @ref{Convolution process}. @end itemize @item -U STR @itemx --khdu=STR The convolution kernel HDU. Although the kernel file name is optional, before running any of the programs, they need to have a value for @option{--khdu} even if the default kernel is to be used. So be sure to keep its value in at least one of the configuration files (see @ref{Configuration files}). By default, the system configuration file has a value. @end table @node Invoking astconvolve, , Convolution kernel, Convolve @subsection Invoking Convolve Convolve an input dataset (2D image or 1D spectrum for example) with a known kernel, or make the kernel necessary to match two PSFs. The general template for Convolve is: @example $ astconvolve [OPTION...] ASTRdata @end example @noindent One line examples: @example ## Convolve mockimg.fits with psf.fits: $ astconvolve --kernel=psf.fits mockimg.fits ## Convolve in the spatial domain: $ astconvolve observedimg.fits --kernel=psf.fits --domain=spatial ## Convolve a 3D cube (only spatial domain is supported in 3D). ## It is also necessary to define 3D tiles and channels for ## parallelization (see the Tessellation section for more). $ astconvolve cube.fits --kernel=kernel3d.fits --domain=spatial \ --tilesize=30,30,30 --numchannels=1,1,1 ## Find the kernel to match sharper and blurry PSF images (they both ## have to have the same pixel size). $ astconvolve --kernel=sharperimage.fits --makekernel=10 \ blurryimage.fits ## Convolve a Spectrum (column 14 in the FITS table below) with a ## custom kernel (the kernel will be normalized internally, so only ## the ratios are important). Sed is used to replace the spaces with ## new line characters so Convolve sees them as values in one column. $ echo "1 3 10 3 1" | sed 's/ /\n/g' | astconvolve spectra.fits -c14 @end example The only argument accepted by Convolve is an input image file. Some of the options are the same between Convolve and some other Gnuastro programs. Therefore, to avoid repetition, they will not be repeated here. For the full list of options shared by all Gnuastro programs, please see @ref{Common options}. In particular, in the spatial domain, on a multi-dimensional datasets, convolve uses Gnuastro's tessellation to speed up the run, see @ref{Tessellation}. Common options related to tessellation are described in @ref{Processing options}. 1-dimensional datasets (for example, spectra) are only read as columns within a table (see @ref{Tables} for more on how Gnuastro programs read tables). Note that currently 1D convolution is only implemented in the spatial domain and thus kernel-matching is also not supported. Here we will only explain the options particular to Convolve. Run Convolve with @option{--help} in order to see the full list of options Convolve accepts, irrespective of where they are explained in this book. @table @option @item --kernelcolumn Column containing the 1D kernel. When the input dataset is a 1-dimensional column, and the host table has more than one column, use this option to specify which column should be used. @item --nokernelflip Do not flip the kernel after reading; only for spatial domain convolution. This can be useful if the flipping has already been applied to the kernel. By default, the input kernel is flipped to avoid the output getting flipped; see @ref{Convolution process}. @item --nokernelnorm Do not normalize the kernel after reading it, such that the sum of its pixels is unity. As described in @ref{Convolution process}, the kernel is normalized by default. @item --conv-on-blank Do not ignore blank pixels in the convolution. The output pixels that were originally non-blank are not affected by this option (they will have the same value if this option is called or not). This option just expands/dilates the non-blank regions of your dataset into the blank regions and only works in spatial domain convolution. Therefore, with this option convolution can be used as a proxy for interpolation or dilation. By default, blank pixels are ignored during spatial domain convolution; so the input and output have exactly the same number of blank pixels. With this option, the blank pixels that are sufficiently close to non-blank pixels (based on the kernel) will be given a value based on the non-blank elements that overlap with the kernel for that blank pixel (see @ref{Edges in the spatial domain}). @item -d STR @itemx --domain=STR @cindex Discrete Fourier transform The domain to use for the convolution. The acceptable values are `@code{spatial}' and `@code{frequency}', corresponding to the respective domain. For large images, the frequency domain process will be more efficient than convolving in the spatial domain. However, the edges of the image will loose some flux (see @ref{Edges in the spatial domain}) and the image must not contain any blank pixels, see @ref{Spatial vs. Frequency domain}. @item --checkfreqsteps With this option a file with the initial name of the output file will be created that is suffixed with @file{_freqsteps.fits}, all the steps done to arrive at the final convolved image are saved as extensions in this file. The extensions in order are: @enumerate @item The padded input image. In frequency domain convolution the two images (input and convolved) have to be the same size and both should be padded by zeros. @item The padded kernel, similar to the above. @item @cindex Phase angle @cindex Complex numbers @cindex Numbers, complex @cindex Fourier spectrum @cindex Spectrum, Fourier The Fourier spectrum of the forward Fourier transform of the input image. Note that the Fourier transform is a complex operation (and not view able in one image!) So we either have to show the `Fourier spectrum' or the `Phase angle'. For the complex number @mymath{a+ib}, the Fourier spectrum is defined as @mymath{\sqrt{a^2+b^2}} while the phase angle is defined as @mymath{\arctan(b/a)}. @item The Fourier spectrum of the forward Fourier transform of the kernel image. @item The Fourier spectrum of the multiplied (through complex arithmetic) transformed images. @item @cindex Round-off error @cindex Floating point round-off error @cindex Error, floating point round-off The inverse Fourier transform of the multiplied image. If you open it, you will see that the convolved image is now in the center, not on one side of the image as it started with (in the padded image of the first extension). If you are working on a mock image which originally had pixels of precisely 0.0, you will notice that in those parts that your convolved profile(s) did not convert, the values are now @mymath{\sim10^{-18}}, this is due to floating-point round off errors. Therefore in the final step (when cropping the central parts of the image), we also remove any pixel with a value less than @mymath{10^{-17}}. @end enumerate @item --noedgecorrection Do not correct the edge effect in spatial domain convolution (this correction is done in spatial domain convolution by default). For a full discussion, please see @ref{Edges in the spatial domain}. @item -m INT @itemx --makekernel=INT If this option is called, Convolve will do PSF-matching: the output will be the kernel that you should convolve with the sharper image to obtain the blurry one (see @ref{Convolution theorem}). The two images must have the same size (number of pixels). This option is not yet supported in 1-dimensional datasets. In effect, it is only necessary to give the two PSFs of your two datasets, find the matching kernel based on that, then apply that kernel to the higher-resolution (sharper image). The image given to the @option{--kernel} option is assumed to be the sharper (less blurry) image and the input image (with no option) is assumed to be the more blurry image. The value given to this option will be used as the maximum radius of the kernel. Any pixel in the final kernel that is larger than this distance from the center will be set to zero. Noise has large frequencies which can make the result less reliable for the higher frequencies of the final result. So all the frequencies which have a spectrum smaller than the value given to the @option{minsharpspec} option in the sharper input image are set to zero and not divided. This will cause the wings of the final kernel to be flatter than they would ideally be which will make the convolved image result unreliable if it is too high. Some notes to on how to prepare your two input PSFs. Note that these (and several other issues that relate to an accurate estimation of the PSF) are practically described in the following tutorial: @ref{Building the extended PSF}. @itemize @item Choose a bright (unsaturated) star and use a region box (with Crop for example, see @ref{Crop}) that is sufficiently above the noise. @item Mask all background sources that may be nearby (you can use Segment's clumps, see @ref{Segment}). @item Use Warp (see @ref{Warp}) to warp the pixel grid so the star's center is exactly on the center of the central pixel in the cropped image. This will certainly slightly degrade the result, however, it is necessary. If there are multiple good stars, you can shift all of them, then normalize them (so the sum of each star's pixels is one) and then take their average to decrease this effect. @item The shifting might move the center of the star by one pixel in any direction, so crop the central pixel of the warped image to have a clean image for the deconvolution. @end itemize @item -c @itemx --minsharpspec (@option{=FLT}) The minimum frequency spectrum (or coefficient, or pixel value in the frequency domain image) to use in deconvolution, see the explanations under the @option{--makekernel} option for more information. @end table @node Warp, , Convolve, Data manipulation @section Warp Image warping is the process of mapping the pixels of one image onto a new pixel grid. This process is sometimes known as transformation, however following the discussion of Heckbert 1989@footnote{Paul S. Heckbert. 1989. @emph{Fundamentals of Texture mapping and Image Warping}, Master's thesis at University of California, Berkeley.} we will not be using that term because it can be confused with only pixel value or flux transformations. Here we specifically mean the pixel grid transformation which is better conveyed with `warp'. @cindex Gravitational lensing Image warping is a very important step in astronomy, both in observational data analysis and in simulating modeled images. In modeling, warping an image is necessary when we want to apply grid transformations to the initial models, for example, in simulating gravitational lensing. Observational reasons for warping an image are listed below: @itemize @cindex Signal to noise ratio @item @strong{Noise:} Most scientifically interesting targets are inherently faint (have a very low Signal to noise ratio). Therefore one short exposure is not enough to detect such objects that are drowned deeply in the noise. We need multiple exposures so we can add them together and increase the objects' signal to noise ratio. Keeping the telescope fixed on one field of the sky is practically impossible. Therefore very deep observations have to put into the same grid before adding them. @cindex Mosaicing @cindex Image mosaic @item @strong{Resolution:} If we have multiple images of one patch of the sky (hopefully at multiple orientations) we can warp them to the same grid. The multiple orientations will allow us to `guess' the values of pixels on an output pixel grid that has smaller pixel sizes and thus increase the resolution of the output. This process of merging multiple observations is known as Mosaicing. @cindex Cosmic rays @item @strong{Cosmic rays:} Cosmic rays can randomly fall on any part of an image. If they collide vertically with the camera, they are going to create a very sharp and bright spot that in most cases can be separated easily@footnote{All astronomical targets are blurred with the PSF, see @ref{PSF}, however a cosmic ray is not and so it is very sharp (it suddenly stops at one pixel).}. However, depending on the depth of the camera pixels, and the angle that a cosmic rays collides with it, it can cover a line-like larger area on the CCD which makes the detection using their sharp edges very hard and error prone. One of the best methods to remove cosmic rays is to compare multiple images of the same field. To do that, we need all the images to be on the same pixel grid. @cindex Optical distortion @cindex Distortion, optical @item @strong{Optical distortion:} In wide field images, the optical distortion that occurs on the outer parts of the focal plane will make accurate comparison of the objects at various locations impossible. It is therefore necessary to warp the image and correct for those distortions prior to the analysis. @cindex ACS @cindex CCD @cindex WFC3 @cindex Wide Field Camera 3 @cindex Charge-coupled device @cindex Advanced camera for surveys @cindex Hubble Space Telescope (HST) @item @strong{Detector not on focal plane:} In some cases (like the Hubble Space Telescope ACS and WFC3 cameras), the CCD might be tilted compared to the focal plane, therefore the recorded CCD pixels have to be projected onto the focal plane before further analysis. @end itemize @menu * Linear warping basics:: Basics of coordinate transformation. * Merging multiple warpings:: How to merge multiple matrices. * Resampling:: Warping an image is re-sampling it. * Invoking astwarp:: Arguments and options for Warp. @end menu @node Linear warping basics, Merging multiple warpings, Warp, Warp @subsection Linear warping basics @cindex Scaling @cindex Coordinate transformation Let's take @mymath{\left[\matrix{u&v}\right]} as the coordinates of a point in the input image and @mymath{\left[\matrix{x&y}\right]} as the coordinates of that same point in the output image@footnote{These can be any real number, we are not necessarily talking about integer pixels here.}. The simplest form of coordinate transformation (or warping) is the scaling of the coordinates, let's assume we want to scale the first axis by @mymath{M} and the second by @mymath{N}, the output coordinates of that point can be calculated by @dispmath{\left[\matrix{x\cr y}\right]= \left[\matrix{Mu\cr Nv}\right]= \left[\matrix{M&0\cr0&N}\right]\left[\matrix{u\cr v}\right]} @cindex Matrix @cindex Multiplication, Matrix @cindex Rotation of coordinates @noindent Note that these are matrix multiplications. We thus see that we can represent any such grid warping as a matrix. Another thing we can do with this @mymath{2\times2} matrix is to rotate the output coordinate around the common center of both coordinates. If the output is rotated anticlockwise by @mymath{\theta} degrees from the positive (to the right) horizontal axis, then the warping matrix should become: @dispmath{\left[\matrix{x\cr y}\right]= \left[\matrix{ucos\theta-vsin\theta\cr usin\theta+vcos\theta}\right]= \left[\matrix{cos\theta&-sin\theta\cr sin\theta&cos\theta}\right] \left[\matrix{u\cr v}\right] } @cindex Flip coordinates @noindent We can also flip the coordinates around the first axis, the second axis and the coordinate center with the following three matrices respectively: @dispmath{\left[\matrix{1&0\cr0&-1}\right]\quad\quad \left[\matrix{-1&0\cr0&1}\right]\quad\quad \left[\matrix{-1&0\cr0&-1}\right]} @cindex Shear @noindent The final thing we can do with this definition of a @mymath{2\times2} warping matrix is shear. If we want the output to be sheared along the first axis with @mymath{A} and along the second with @mymath{B}, then we can use the matrix: @dispmath{\left[\matrix{1&A\cr B&1}\right]} @noindent To have one matrix representing any combination of these steps, you use matrix multiplication, see @ref{Merging multiple warpings}. So any combinations of these transformations can be displayed with one @mymath{2\times2} matrix: @dispmath{\left[\matrix{a&b\cr c&d}\right]} @cindex Wide Field Camera 3 @cindex Advanced Camera for Surveys @cindex Hubble Space Telescope (HST) The transformations above can cover a lot of the needs of most coordinate transformations. However they are limited to mapping the point @mymath{[\matrix{0&0}]} to @mymath{[\matrix{0&0}]}. Therefore they are useless if you want one coordinate to be shifted compared to the other one. They are also space invariant, meaning that all the coordinates in the image will receive the same transformation. In other words, all the pixels in the output image will have the same area if placed over the input image. So transformations which require varying output pixel sizes like projections cannot be applied through this @mymath{2\times2} matrix either (for example, for the tilted ACS and WFC3 camera detectors on board the Hubble space telescope). @cindex M@"obius, August. F. @cindex Homogeneous coordinates @cindex Coordinates, homogeneou To add these further capabilities, namely translation and projection, we use the homogeneous coordinates. They were defined about 200 years ago by August Ferdinand M@"obius (1790 -- 1868). For simplicity, we will only discuss points on a 2D plane and avoid the complexities of higher dimensions. We cannot provide a deep mathematical introduction here, interested readers can get a more detailed explanation from Wikipedia@footnote{@url{http://en.wikipedia.org/wiki/Homogeneous_coordinates}} and the references therein. By adding an extra coordinate to a point we can add the flexibility we need. The point @mymath{[\matrix{x&y}]} can be represented as @mymath{[\matrix{xZ&yZ&Z}]} in homogeneous coordinates. Therefore multiplying all the coordinates of a point in the homogeneous coordinates with a constant will give the same point. Put another way, the point @mymath{[\matrix{x&y&Z}]} corresponds to the point @mymath{[\matrix{x/Z&y/Z}]} on the constant @mymath{Z} plane. Setting @mymath{Z=1}, we get the input image plane, so @mymath{[\matrix{u&v&1}]} corresponds to @mymath{[\matrix{u&v}]}. With this definition, the transformations above can be generally written as: @dispmath{\left[\matrix{x\cr y\cr 1}\right]= \left[\matrix{a&b&0\cr c&d&0\cr 0&0&1}\right] \left[\matrix{u\cr v\cr 1}\right]} @noindent @cindex Affine Transformation @cindex Transformation, affine We thus acquired 4 extra degrees of freedom. By giving non-zero values to the zero valued elements of the last column we can have translation (try the matrix multiplication!). In general, any coordinate transformation that is represented by the matrix below is known as an affine transformation@footnote{@url{http://en.wikipedia.org/wiki/Affine_transformation}}: @dispmath{\left[\matrix{a&b&c\cr d&e&f\cr 0&0&1}\right]} @cindex Homography @cindex Projective transformation @cindex Transformation, projective We can now consider translation, but the affine transform is still spatially invariant. Giving non-zero values to the other two elements in the matrix above gives us the projective transformation or Homography@footnote{@url{http://en.wikipedia.org/wiki/Homography}} which is the most general type of transformation with the @mymath{3\times3} matrix: @dispmath{\left[\matrix{x'\cr y'\cr w}\right]= \left[\matrix{a&b&c\cr d&e&f\cr g&h&1}\right] \left[\matrix{u\cr v\cr 1}\right]} @noindent So the output coordinates can be calculated from: @dispmath{x={x' \over w}={au+bv+c \over gu+hv+1}\quad\quad\quad\quad y={y' \over w}={du+ev+f \over gu+hv+1}} Thus with Homography we can change the sizes of the output pixels on the input plane, giving a `perspective'-like visual impression. This can be quantitatively seen in the two equations above. When @mymath{g=h=0}, the denominator is independent of @mymath{u} or @mymath{v} and thus we have spatial invariance. Homography preserves lines at all orientations. A very useful fact about Homography is that its inverse is also a Homography. These two properties play a very important role in the implementation of this transformation. A short but instructive and illustrated review of affine, projective and also bi-linear mappings is provided in Heckbert 1989@footnote{ Paul S. Heckbert. 1989. @emph{Fundamentals of Texture mapping and Image Warping}, Master's thesis at University of California, Berkeley. Note that since points are defined as row vectors there, the matrix is the transpose of the one discussed here.}. @node Merging multiple warpings, Resampling, Linear warping basics, Warp @subsection Merging multiple warpings @cindex Commutative property @cindex Matrix multiplication @cindex Multiplication, matrix @cindex Non-commutative operations @cindex Operations, non-commutative In @ref{Linear warping basics} we saw how a basic warp/transformation can be represented with a matrix. To make more complex warpings (for example, to define a translation, rotation and scale as one warp) the individual matrices have to be multiplied through matrix multiplication. However matrix multiplication is not commutative, so the order of the set of matrices you use for the multiplication is going to be very important. The first warping should be placed as the left-most matrix. The second warping to the right of that and so on. The second transformation is going to occur on the warped coordinates of the first. As an example for merging a few transforms into one matrix, the multiplication below represents the rotation of an image about a point @mymath{[\matrix{U&V}]} anticlockwise from the horizontal axis by an angle of @mymath{\theta}. To do this, first we take the origin to @mymath{[\matrix{U&V}]} through translation. Then we rotate the image, then we translate it back to where it was initially. These three operations can be merged in one operation by calculating the matrix multiplication below: @dispmath{\left[\matrix{1&0&U\cr0&1&V\cr{}0&0&1}\right] \left[\matrix{cos\theta&-sin\theta&0\cr sin\theta&cos\theta&0\cr 0&0&1}\right] \left[\matrix{1&0&-U\cr0&1&-V\cr{}0&0&1}\right]} @node Resampling, Invoking astwarp, Merging multiple warpings, Warp @subsection Resampling @cindex Pixel @cindex Camera @cindex Detector @cindex Sampling @cindex Resampling @cindex Pixel mixing @cindex Photoelectrons @cindex Picture element @cindex Mixing pixel values A digital image is composed of discrete `picture elements' or `pixels'. When a real image is created from a camera or detector, each pixel's area is used to store the number of photo-electrons that were created when incident photons collided with that pixel's surface area. This process is called the `sampling' of a continuous or analog data into digital data. When we change the pixel grid of an image, or ``warp'' it, we have to calculate the flux value of each pixel on the new grid based on the old grid, or resample it. Because of the calculation (as opposed to observation), any form of warping on the data is going to degrade the image and mix the original pixel values with each other. So if an analysis can be done on an unwarped data image, it is best to leave the image untouched and pursue the analysis. However as discussed in @ref{Warp} this is not possible in some scenarios and re-sampling is necessary. @cindex Point pixels @cindex Interpolation @cindex Sampling theorem @cindex Bicubic interpolation @cindex Signal to noise ratio @cindex Bi-linear interpolation @cindex Interpolation, bicubic @cindex Interpolation, bi-linear When the FWHM of the PSF of the camera is much larger than the pixel scale (see @ref{Sampling theorem}) we are sampling the signal in a much higher resolution than the camera can offer. This is usually the case in many applications of image processing (nonastronomical imaging). In such cases, we can consider each pixel to be a point and not an area: the PSF doesn't vary much over a single pixel. Approximating a pixel's area to a point can significantly speed up the resampling and also the simplicity of the code. Because resampling becomes a problem of interpolation: points of the input grid need to be interpolated at certain other points (over the output grid). To increase the accuracy, you might also sample more than one point from within a pixel giving you more points for a more accurate interpolation in the output grid. @cindex Image edges @cindex Edges, image However, interpolation has several problems. The first one is that it will depend on the type of function you want to assume for the interpolation. For example, you can choose a bi-linear or bi-cubic (the `bi's are for the 2 dimensional nature of the data) interpolation method. For the latter there are various ways to set the constants@footnote{see @url{http://entropymine.com/imageworsener/bicubic/} for a nice introduction.}. Such parametric interpolation functions can fail seriously on the edges of an image, or when there is a sharp change in value (for example, the bleeding saturation of bright stars in astronomical CCDs). They will also need normalization so that the flux of the objects before and after the warping is comparable. The parametric nature of these methods adds a level of subjectivity to the data (it makes more assumptions through the functions than the data can handle). For most applications this is fine (as discussed above: when the PSF is over-sampled), but in scientific applications where we push our instruments to the limit and the aim is the detection of the faintest possible galaxies or fainter parts of bright galaxies, we cannot afford this loss. Because of these reasons Warp will not use parametric interpolation techniques. @cindex Drizzle @cindex Pixel mixing @cindex Exact area resampling Warp will do interpolation based on ``pixel mixing''@footnote{For a graphic demonstration see @url{http://entropymine.com/imageworsener/pixelmixing/}.} or ``area resampling''. This is also similar to what the Hubble Space Telescope pipeline calls ``Drizzling''@footnote{@url{http://en.wikipedia.org/wiki/Drizzle_(image_processing)}}. This technique requires no functions, it is thus non-parametric. It is also the closest we can get (make least assumptions) to what actually happens on the detector pixels. In pixel mixing, the basic idea is that you reverse-transform each output pixel to find which pixels of the input image it covers, and what fraction of the area of the input pixels are covered by that output pixel. We then multiply each input pixel's value by the fraction of its area that overlaps with the output pixel (between 0 to 1). The output's pixel value is derived by summing all these multiplications for the input pixels that it covers. Through this process, pixels are treated as an area not as a point (which is how detectors create the image), also the brightness (see @ref{Brightness flux magnitude}) of an object will be fully preserved. Since it involves the mixing of the input's pixel values, this pixel mixing method is a form of @ref{Spatial domain convolution}. Therefore, after comparing the input and output, you will notice that the output is slightly smoothed, thus boosting the more diffuse signal, but creating correlated noise. In astronomical imaging the correlated noise will be decreased later when you stack many exposures@footnote{If you are working on a single exposure image and see pronounced Moir@'e patterns after Warping, check @ref{Moire pattern in stacking and its correction} for a possible way to reduce them}. If there are very high spatial-frequency signals in the image (for example, fringes) which vary on a scale @emph{smaller than} your output image pixel size (this is rarely the case in astronomical imaging), pixel mixing can cause ailiasing@footnote{@url{http://en.wikipedia.org/wiki/Aliasing}}. Therefore, in case such fringes are present, they have to be calculated and removed separately (which would naturally be done in any astronomical reduction pipeline). Because of the PSF, no astronomical target has a sharp change in their signal. Thus this issue is less important for astronomical applications, see @ref{PSF}. To find the overlap area of the output pixel over the input pixels, we need to define polygons and clip them (find the overlap). Usually, it is sufficient to define a pixel with a four-vertice polygon. However, when a non-linear distortion (for example, @code{SIP} or @code{TPV}) is present and the distortion is significant over an output pixel's size (usually far from the reference point), the shadow of the output pixel on the input grid can be curved. To account for such cases (which can only happen when correcting for non-linear distortions), Warp has the @option{--edgesampling} option to sample the output pixel over more vertices. For more, see the description of this option in @ref{Align pixels with WCS considering distortions}. @node Invoking astwarp, , Resampling, Warp @subsection Invoking Warp Warp will warp an input image into a new pixel grid by pixel mixing (see @ref{Resampling}). Without any options, Warp will remove any non-linear distortions from the image and align the output pixel coordinates to its WCS coordinates. Any homographic warp (for example, scaling, rotation, translation, projection, see @ref{Linear warping basics}) can also be done by calling the relevant option explicitly. The general template for invoking Warp is: @example $ astwarp [OPTIONS...] InputImage @end example @noindent One line examples: @example ## Align image with celestial coordinates and remove any distortion $ astwarp image.fits ## Align four exposures to same pixel grid and stack them with ## Arithmetic program's sigma-clipped mean operator (out of many ## stacking operators, see Arithmetic's documentation). $ grid="--center=1.234,5.678 --width=1001,1001 --widthinpix --cdelt=0.2/3600" $ astwarp a.fits $grid --output=A.fits $ astwarp b.fits $grid --output=B.fits $ astwarp c.fits $grid --output=C.fits $ astwarp d.fits $grid --output=D.fits $ astarithmetic A.fits B.fits C.fits D.fits 4 5 0.2 sigclip-mean \ -g1 --output=stack.fits ## Warp a previously created mock image to the same pixel grid as the ## real image (including any distortions). $ astwarp mock.fits --gridfile=real.fits ## Rotate and then scale input image: $ astwarp --rotate=37.92 --scale=0.8 image.fits ## Scale, then translate the input image: $ astwarp --scale 8/3 --translate 2.1 image.fits ## Directly input a custom warping matrix (using fraction): $ astwarp --matrix=1/5,0,4/10,0,1/5,4/10,0,0,1 image.fits ## Directly input a custom warping matrix, with final numbers: $ astwarp --matrix="0.7071,-0.7071, 0.7071,0.7071" image.fits @end example If any processing is to be done, Warp needs to be given a 2D FITS image. As in all Gnuastro programs, when an output is not explicitly set with the @option{--output} option, the output filename will be set automatically based on the operation, see @ref{Automatic output}. For the full list of general options to all Gnuastro programs (including Warp), please see @ref{Common options}. Warp uses pixel mixing to derive the pixel values of the output image, see @ref{Resampling}. To be the most accurate, the input image will be read as a 64-bit double precision floating point dataset and all internal processing is done in this format. Upon writing, by default it will be converted to 32-bit single precision floating point type (actual observational data rarely have such precision!). In case you want a different output type, you can use the @option{--type} option that is common to several Gnuastro programs. For example, if your input is a mock image without noise, and you want to preserve the 64-bit precision, use (with @option{--type=float64}. Just note that the file size will also be double! For more on the precision of various types, see @ref{Numeric data types}. By default (if no linear operation is requested), Warp will align the pixel grid of the input image to the WCS coordinates it contains. This operation and the the options that govern it are described in @ref{Align pixels with WCS considering distortions}. You can Warp an input image to the same pixel grid as a reference FITS file using the @option{--wcsfile} option. In this case, the output image will take all the information needed from the reference WCS file and HDU/extension specified with @option{--wcshdu}, thus it will discard any other resampling options given. If you need any custom linear warping (independent of the WCS, see @ref{Linear warping basics}), you need to call the respective operation manually. These are described in @ref{Linear warps to be called explicitly}. Please note that you may not use both linear and non-linear modes simultaneously. For example, you cannot scale or rotate the image while removing its non-linear distortions at the same time. The following options are shared between both modes: @table @option @item --hstartwcs=INT Specify the first header keyword number (line) that should be used to read the WCS information, see the full explanation in @ref{Invoking astcrop}. @item --hendwcs=INT Specify the last header keyword number (line) that should be used to read the WCS information, see the full explanation in @ref{Invoking astcrop}. @item -C FLT @itemx --coveredfrac=FLT Depending on the warp, the output pixels that cover pixels on the edge of the input image, or blank pixels in the input image, are not going to be fully covered by input data. With this option, you can specify the acceptable covered fraction of such pixels (any value between 0 and 1). If you only want output pixels that are fully covered by the input image area (and are not blank), then you can set @option{--coveredfrac=1} (which is the default!). Alternatively, a value of @code{0} will keep output pixels that are even infinitesimally covered by the input. As a result, with @option{--coveredfrac=0}, the sum of the pixels in the input and output images will be exactly the same. @end table @menu * Align pixels with WCS considering distortions:: Default operation. * Linear warps to be called explicitly:: Other warps. @end menu @node Align pixels with WCS considering distortions, Linear warps to be called explicitly, Invoking astwarp, Invoking astwarp @subsubsection Align pixels with WCS considering distortions @cindex Resampling @cindex WCS distortion @cindex TPV distortion @cindex SIP distortion @cindex Non-linear distortion @cindex Align pixel and WCS coordinates When none of the linear warps@footnote{For linear warps, see @ref{Linear warps to be called explicitly}.} are requested, Warp will align the input's pixel axes with it's WCS axes. In the process, any possibly existing distortion is also removed (such as @code{TPV} and @code{SIP}). Usually, the WCS axes are the Right Ascension and Declination in equatorial coordinates. The output image's pixel grid is highly customizable through the options in this section. To learn about Warp's strategy to build the new pixel grid, see @ref{Resampling}. For strong distortions (that produce strong curvatures), you can fine-tune the area-based resampling with @option{--edgesampling}, as described below. On the other hand, sometimes you need to Warp an input image to the exact same grid of an already available reference FITS image with an existing WCS. If that image is already aligned, finding its center, number of pixels and pixel scale can be annoying (and just increase the complexity of your script). On the other hand, if that image is not aligned (for example, has a certain rotation in the sky, and has a different distortion), there are too many WCS parameters to set (some are not yet available explicitly in the options here)! For such scenarios, Warp has the @option{--gridfile} option. When @option{--gridfile} is called, the options below that are used to define the output's WCS will be ignored (these options: @option{--center}, @option{--widthinpix}, @option{--cdelt}, @option{--ctype}). In this case, the output's WCS and pixel grid will exactly match the image given to @option{--gridfile} (including any rotation, pixel scale, or distortion or projection). @cartouche @noindent @cindex Stacking @cindex Coaddition @strong{Set @option{--cdelt} explicitly when you plan to stack many warped images:} To align some images and later stack them, it is necessary to be sure the pixel sizes of all the images are the same exactly. Most of the time the measured (during astrometry) pixel scale of the separate exposures, will be different in the second or third digit number after the decimal point. It is a normal/statistical error in measuring the astrometry. On a large image, these slight differences can cause different output sizes (of one or two pixels on a very large image). You can fix this by explicitly setting the pixel scale of each warped exposure with Warp's @option{--cdelt} option that is described below. For good strategies of setting the pixel scale, see @ref{Moire pattern in stacking and its correction}. @end cartouche Another problem that may arise when aligning images to new pixel grids is the aliasing or visible Moir@'e patterns on the output image. This artifact should be removed if you are stacking several exposures, especially with a pointing pattern. If not see @ref{Moire pattern in stacking and its correction} for ways to mitigate the visible patterns. See the description of @option{--gridfile} below for more. @cartouche @noindent @cindex WCSLIB @strong{Known issue:} Warp's WCS-based aligning works best with WCSLIB version 7.12 (released in September 2022) and above. If you have an older version of WCSLIB, you might get a @code{wcss2p} error otherwise. @end cartouche @table @option @item -c FLT,FLT @itemx --center=FLT,FLT @cindex CRVALi @cindex Aligning an image WCS coordinates of the center of the central pixel of the output image. Since a central pixel is only defined with an odd number of pixels along both dimensions, the output will always have an odd number of pixels. When @option{--center} or @option{--gridfile} aren't given, the output will have the same central WCS coordinate as the input. Usually, the WCS coordinates are Right Ascension and Declination (when the first three characters of @code{CTYPE1} and @code{CTYPE2} are respectively @code{RA-} and @code{DEC}). For more on the @code{CTYPEi} keyword values, see @code{--ctype} below. @item -w INT[,INT] @itemx --width=INT[,INT] Width and height of the output image in units of WCS (usually degrees). If you want the values to be read as pixels, also call the @option{--widthinpix} option with @option{--width}. If a single value is given, Warp will use the same value for the second dimension (creating a square output). When @option{--width} or @option{--gridfile} aren't given, Warp will calculate the necessary size of the output pixel grid to fully contain the input image. Usually the WCS coordinates are in units of degrees (defined by the @code{CUNITi} keywords of the FITS standard). But entering a certain number of arcseconds or arcminutes for the width can be annoying (you will usually need to go to the calculator!). To simplify such situations, this option also accepts division. For example @option{--width=1/60,2/60} will make an aligned warp that is 1 arcmin along Right Ascension and 2 arcminutes along the Declination. With the @option{--widthinpix} option the values will be interpreted as numbers of pixels. In this scenario, this option should be given @emph{odd} integer(s) that are greater than 1. This ensures that the output image can have a @emph{central} pixel. Recall that through the @option{--center} option, you specify the WCS coordinate of the center of the central pixel. The central coordinate of an image with an even number of pixels will be on the edge of two pixels, so a ``central'' pixel is not well defined. If any of the given values are even, Warp will automatically add a single pixel (to make it an odd integer) and print a warning message. @item --widthinpix When called, the values given to the @option{--width} option will be interpreted as the number of pixels along each dimension(s). See the description of @option{--width} for more. @item -x FLT[,FLT] @itemx --cdelt=FLT[,FLT] @cindex CDELTi @cindex Pixel scale Coordinate deltas or increments (@code{CDELTi} in the FITS standard), or the pixel scale in both dimensions. If a single value is given, it will be used for both axes. In this way, the output's pixels will be squares on the sky at the reference point (as is usually expected!). When @option{--cdelt} or @option{--gridfile} aren't given, Warp will read the input's pixel scale and choose the larger of @code{CDELT1} or @code{CDELT2} so the output pixels are square. Usually (when dealing with RA and Dec, and the @code{CUNITi}s have a value of @code{deg}), the units of the given values are degrees/pixel. Warp allows you to easily convert from @emph{arcsec} to @emph{degrees} by simply appending a @code{/3600} to the value. For example, for an output image of pixel scale @code{0.27} arcsec/pixel, you can use @code{--cdelt=0.27/3600}. @item --ctype=STR,STR @cindex Align @cindex CTYPEi @cindex Resampling The coordinate types of the output (@code{CTYPE1} and @code{CTYPE2} keywords in the FITS standard), separated by a comma. By default the value to this option is `@code{RA---TAN,DEC--TAN}'. However, if @option{--gridfile} is given, this option is ignored. If you don't call @option{--ctype} or @option{--gridfile}, the output WCS coordinates will be Right Ascension and Declination, while the output's projection will be @url{https://en.wikipedia.org/wiki/Gnomonic_projection,Gnomonic}, also known as Tangential (TAN). This combination is the most common in extra-galactic imaging surveys. For other coordinates and projections in your output use other values, as described below. According to the FITS standard version 4.0@footnote{FITS standard version 4.0: @url{https://fits.gsfc.nasa.gov/standard40/fits_standard40aa-le.pdf}}: @code{CTYPEi} is the ``type for the Intermediate-coordinate Axis @mymath{i}. Any coordinate type that is not covered by this Standard or an officially recognized FITS convention shall be taken to be linear. All non-linear coordinate system names must be expressed in `4–3' form: the first four characters specify the coordinate type, the fifth character is a hyphen (@code{-}), and the remaining three characters specify an algorithm code for computing the world coordinate value. Coordinate types with names of fewer than four characters are padded on the right with hyphens, and algorithm codes with fewer than three characters are padded on the right with SPACE. Algorithm codes should be three characters'' (see list of algorithm codes below). @cindex WCS Projections @cindex Projections (world coordinate system) You can use any of the projection algorithms (last three characters of each coordinate's type) provided by your host WCSLIB (a mandatory dependency of Gnuastro; see @ref{WCSLIB}). For a very elaborate and complete description of projection algorithms in the FITS WCS standard, see @url{https://doi.org/10.1051/0004-6361:20021327, Calabretta and Greisen 2002}. Wikipedia also has a nice article on @url{https://en.wikipedia.org/wiki/Map_projection, Map projections}. As an example, WCSLIB 7.12 (released in September 2022) has the following projection algorithms: @table @code @item AZP @cindex Zenithal/azimuthal projection Zenithal/azimuthal perspective @item SZP @cindex Slant zenithal projection Slant zenithal perspective @item TAN @cindex Gnomonic (tangential) projection Gnomonic (tangential) @item STG @cindex Stereographic projection Stereographic @item SIN @cindex Orthographic/synthesis projection Orthographic/synthesis @item ARC @cindex Zenithal/azimuthal equidistant projection Zenithal/azimuthal equidistant @item ZPN @cindex Zenithal/azimuthal polynomial projection Zenithal/azimuthal polynomial @item ZEA @cindex Zenithal/azimuthal equal area projection Zenithal/azimuthal equal area @item AIR @cindex Airy projection Airy @item CYP @cindex Cylindrical perspective projection Cylindrical perspective @item CEA @cindex Cylindrical equal area projection Cylindrical equal area @item CAR @cindex Plate carree projection Plate carree @item MER @cindex Mercator projection Mercator @item SFL @cindex Sanson-Flamsteed projection Sanson-Flamsteed @item PAR @cindex Parabolic projection Parabolic @item MOL @cindex Mollweide projection Mollweide @item AIT @cindex Hammer-Aitoff projection Hammer-Aitoff @item COP @cindex Conic perspective projection Conic perspective @item COE @cindex Conic equal area projection Conic equal area @item COD @cindex Conic equidistant projection Conic equidistant @item COO @cindex Conic orthomorphic projection Conic orthomorphic @item BON @cindex Bonne projection Bonne @item PCO @cindex Polyconic projection Polyconic @item TSC @cindex Tangential spherical cube projection Tangential spherical cube @item CSC @cindex COBE spherical cube projection COBE spherical cube @item QSC @cindex Quadrilateralized spherical cube projection Quadrilateralized spherical cube @item HPX @cindex HEALPix projection HEALPix @item XPH @cindex Butterfly projection @cindex HEALPix polar projection HEALPix polar, aka "butterfly" @end table @item -G @itemx --gridfile FITS filename containing the final pixel grid and WCS for the output image. The HDU/extension containing should be specified with @option{--gridhdu} or its short option @option{-H}. The HDU should contain a WCS, otherwise, Warp will abort with a crash. When this option is used, Warp will read the respective WCS and the size of the image to resample the input. Since this WCS of this HDU contains everything needed to construct the WCS the options above will be ignored when @option{--gridfile} is called: @option{--cdelt}, @option{--center}, and @option{--widthinpix}. In the example below, let's use this option to put the image of M51 in one survey (J-PLUS) into the pixel grid of another survey (SDSS) containing M51. The J-PLUS field of view is very large (almost @mymath{1.5\times1.5} deg@mymath{^2}, in @mymath{9500\times9500} pixels), while the field of view of SDSS in each filter is small (almost @mymath{0.3\times0.25} deg@mymath{^2} in @mymath{2048\times1489} pixels). With the first two commands, we'll first download the two images, then we'll extract the portion of the J-PLUS image that overlaps with the SDSS image and align it exactly to SDSS's pixel grid. Note that these are the two images that were used in two of Gnuastro's tutorials: @ref{Building the extended PSF} and @ref{Detecting large extended targets}. @example ## Download the J-PLUS DR2 image of M51 in the r filter. $ jplusbase="http://archive.cefca.es/catalogues/vo/siap" $ wget $jplusbase/jplus-dr2/get_fits?id=67510 \ -O jplus.fits.fz ## Download the SDSS image in r filter and decompress it ## (Bzip2 is not a standard FITS compression algorithm). $ sdssbase=https://dr12.sdss.org/sas/dr12/boss/photoObj/frames $ wget $sdssbase/301/3716/6/frame-r-003716-6-0117.fits.bz2 \ -O sdss.fits.bz2 $ bunzip2 sdss.fits.bz2 ## Warp and crop the J-PLUS image so the output exactly ## matches the SDSS pixel gid. $ astwarp jplus.fits.fz --gridfile=sdss.fits --gridhdu=0 \ --output=jplus-on-sdss.fits ## View the two images side-by-side: $ astscript-fits-view sdss.fits jplus-on-sdss.fits @end example As the example above shows, this option can therefore be very useful when comparing images from multiple surveys. But there are other very interesting use cases also. For example, when you are making a mock dataset and need to add distortion to the image so it matches the distortion of your camera. Through @option{--gridhdu}, you can easily insert that distortion over the mock image and put the mock image in the pixel grid of an exposure. @item -H @itemx --gridhdu The HDU/extension of the reference WCS file specified with option @option{--wcsfile} or its short version @option{-H} (see the description of @option{--wcsfile} for more). @item --edgesampling=INT Number of extra samplings along the edge of a pixel. By default the value is @code{0} (the output pixel's polygon over the input will be a quadrilateral (a polygon with four edges/vertices). Warp uses pixel mixing to derive the output pixel values. For a complete introduction, see @ref{Resampling}, and in particular its later part on distortions. To account for this possible curvature due to distortion, you can use this option. For example, @option{--edgesampling=1} will add one extra vertice in the middle of each edge of the output pixel, producing an 8-vertice polygon. Similarly, @option{--edgesampling=5} will put 5 extra vertices along each edge, thus sampling the shape (and possible curvature) of the output pixel over an input pixel with @mymath{4+5\times4=24} vertice polygon. Since the polygon clipping will happen for every output pixel, a higher value to this option can significantly reduce the running speed and increase the RAM usage of Warp; so use it with caution: in most cases the default @option{--edgesampling=0} is sufficient. To visually inspect the curvature effect on pixel area of the input image, see option @option{--pixelareaonwcs} in @ref{Pixel information images}. @item --checkmaxfrac Check each output pixel's maximum coverage on the input data and append as the `@code{MAX-FRAC}' HDU/extension to the output aligned image. This option provides an easy visual inspection for possible recurring patterns or fringes caused by aligning to a new pixel grid. For more detail about the origin of these patterns and how to mitigate them see @ref{Moire pattern in stacking and its correction}. Note that the `@code{MAX-FRAC}' HDU/extension is not showing the patterns themselves; It represents the largest area coverage on the input data for that particular pixel. The values can be in the range between 0 to 1, where 1 means the pixel is covering at least one complete pixel of the input data. On the other hand, 0 means that the pixel is not covering any pixels of the input at all. @end table @node Linear warps to be called explicitly, , Align pixels with WCS considering distortions, Invoking astwarp @subsubsection Linear warps to be called explicitly Linear warps include operations like rotation, scaling, sheer, etc. For an introduction, see @ref{Linear warping basics}. These are warps that don't depend on the WCS of the image and should be explicitly requested. To align the input pixel coordinates with the WCS coordinates, see @ref{Align pixels with WCS considering distortions}. While they will correct any existing WCS based on the warp, they can also operate on images without any WCS. For example, you have a mock image that doesn't (yet!) have its mock WCS, and it has been created on an over-sampled grid and convolved with an over-sampled PSF. In this scenario, you can use the @option{--scale} option to under-sample it to your desired resolution. This is similar to the @ref{Sufi simulates a detection} tutorial. Linear warps must be specified as command-line options, either as (possibly multiple) modular warpings (for example, @option{--rotate}, or @option{--scale}), or directly as a single raw matrix (with @option{--matrix}). If specified together, the latter (direct matrix) will take precedence and all the modular warpings will be ignored. Any number of modular warpings can be specified on the command-line and configuration files. If more than one modular warping is given, all will be merged to create one warping matrix. As described in @ref{Merging multiple warpings}, matrix multiplication is not commutative, so the order of specifying the modular warpings on the command-line, and/or configuration files makes a difference (see @ref{Configuration file precedence}). The full list of modular warpings and the other options particular to Warp are described below. The values to the warping options (modular warpings as well as @option{--matrix}), are a sequence of at least one number. Each number in this sequence is separated from the next by a comma (@key{,}). Each number can also be written as a single fraction (with a forward-slash @key{/} between the numerator and denominator). Space and Tab characters are permitted between any two numbers, just do not forget to quote the whole value. Otherwise, the value will not be fully passed onto the option. See the examples above as a demonstration. @cindex FITS standard Based on the FITS standard, integer values are assigned to the center of a pixel and the coordinate [1.0, 1.0] is the center of the first pixel (bottom left of the image when viewed in SAO DS9). So the coordinate center [0.0, 0.0] is half a pixel away (in each axis) from the bottom left vertex of the first pixel. The resampling that is done in Warp (see @ref{Resampling}) is done on the coordinate axes and thus directly depends on the coordinate center. In some situations this if fine, for example, when rotating/aligning a real image, all the edge pixels will be similarly affected. But in other situations (for example, when scaling an over-sampled mock image to its intended resolution, this is not desired: you want the center of the coordinates to be on the corner of the pixel. In such cases, you can use the @option{--centeroncorner} option which will shift the center by @mymath{0.5} before the main warp, then shift it back by @mymath{-0.5} after the main warp. @table @option @item -r FLT @itemx --rotate=FLT Rotate the input image by the given angle in degrees: @mymath{\theta} in @ref{Linear warping basics}. Note that commonly, the WCS structure of the image is set such that the RA is the inverse of the image horizontal axis which increases towards the right in the FITS standard and as viewed by SAO DS9. So the default center for rotation is on the right of the image. If you want to rotate about other points, you have to translate the warping center first (with @option{--translate}) then apply your rotation and then return the center back to the original position (with another call to @option{--translate}, see @ref{Merging multiple warpings}. @item -s FLT[,FLT] @itemx --scale=FLT[,FLT] Scale the input image by the given factor(s): @mymath{M} and @mymath{N} in @ref{Linear warping basics}. If only one value is given, then both image axes will be scaled with the given value. When two values are given (separated by a comma), the first will be used to scale the first axis and the second will be used for the second axis. If you only need to scale one axis, use @option{1} for the axis you do not need to scale. The value(s) can also be written (on the command-line or in configuration files) as a fraction. @item -f FLT[,FLT] @itemx --flip=FLT[,FLT] Flip the input image around the given axis(s). If only one value is given, then both image axes are flipped. When two values are given (separated by acomma), you can choose which axis to flip over. @option{--flip} only takes values @code{0} (for no flip), or @code{1} (for a flip). Hence, if you want to flip by the second axis only, use @option{--flip=0,1}. @item -e FLT[,FLT] @itemx --shear=FLT[,FLT] Shear the input image by the given value(s): @mymath{A} and @mymath{B} in @ref{Linear warping basics}. If only one value is given, then both image axes will be sheared with the given value. When two values are given (separated by a comma), the first will be used to shear the first axis and the second will be used for the second axis. If you only need to shear along one axis, use @option{0} for the axis that must be untouched. The value(s) can also be written (on the command-line or in configuration files) as a fraction. @item -t FLT[,FLT] @itemx --translate=FLT[,FLT] Translate (move the center of coordinates) the input image by the given value(s): @mymath{c} and @mymath{f} in @ref{Linear warping basics}. If only one value is given, then both image axes will be translated by the given value. When two values are given (separated by a comma), the first will be used to translate the first axis and the second will be used for the second axis. If you only need to translate along one axis, use @option{0} for the axis that must be untouched. The value(s) can also be written (on the command-line or in configuration files) as a fraction. @item -p FLT[,FLT] @itemx --project=FLT[,FLT] Apply a projection to the input image by the given values(s): @mymath{g} and @mymath{h} in @ref{Linear warping basics}. If only one value is given, then projection will apply to both axes with the given value. When two values are given (separated by a comma), the first will be used to project the first axis and the second will be used for the second axis. If you only need to project along one axis, use @option{0} for the axis that must be untouched. The value(s) can also be written (on the command-line or in configuration files) as a fraction. @item -m STR @itemx --matrix=STR The warp/transformation matrix. All the elements in this matrix must be separated by commas(@key{,}) characters and as described above, you can also use fractions (a forward-slash between two numbers). The transformation matrix can be either a 2 by 2 (4 numbers), or a 3 by 3 (9 numbers) array. In the former case (if a 2 by 2 matrix is given), then it is put into a 3 by 3 matrix (see @ref{Linear warping basics}). @cindex NaN The determinant of the matrix has to be non-zero and it must not contain any non-number values (for example, infinities or NaNs). The elements of the matrix have to be written row by row. So for the general Homography matrix of @ref{Linear warping basics}, it should be called with @command{--matrix=a,b,c,d,e,f,g,h,1}. The raw matrix takes precedence over all the modular warping options listed above, so if it is called with any number of modular warps, the latter are ignored. @item --centeroncorner Put the center of coordinates on the corner of the first (bottom-left when viewed in SAO DS9) pixel. This option is applied after the final warping matrix has been finalized: either through modular warpings or the raw matrix. See the explanation above for coordinates in the FITS standard to better understand this option and when it should be used. @item -k @itemx --keepwcs @cindex WCSLIB @cindex World Coordinate System Do not correct the WCS information of the input image and save it untouched to the output image. By default the WCS (World Coordinate System) information of the input image is going to be corrected in the output image so the objects in the image are at the same WCS coordinates. But in some cases it might be useful to keep it unchanged (for example, to correct alignments). @end table @node Data analysis, Data modeling, Data manipulation, Top @chapter Data analysis Astronomical datasets (images or tables) contain very valuable information, the tools in this section can help in analyzing, extracting, and quantifying that information. For example, getting general or specific statistics of the dataset (with @ref{Statistics}), detecting signal within a noisy dataset (with @ref{NoiseChisel}), or creating a catalog from an input dataset (with @ref{MakeCatalog}). @menu * Statistics:: Calculate dataset statistics. * NoiseChisel:: Detect objects in an image. * Segment:: Segment detections based on signal structure. * MakeCatalog:: Catalog from input and labeled images. * Match:: Match two datasets. @end menu @node Statistics, NoiseChisel, Data analysis, Data analysis @section Statistics The distribution of values in a dataset can provide valuable information about it. For example, in an image, if it is a positively skewed distribution, we can see that there is significant data in the image. If the distribution is roughly symmetric, we can tell that there is no significant data in the image. In a table, when we need to select a sample of objects, it is important to first get a general view of the whole sample. On the other hand, you might need to know certain statistical parameters of the dataset. For example, if we have run a detection algorithm on an image, and we want to see how accurate it was, one method is to calculate the average of the undetected pixels and see how reasonable it is (if detection is done correctly, the average of undetected pixels should be approximately equal to the background value, see @ref{Sky value}). In a table, you might have calculated the magnitudes of a certain class of objects and want to get some general characteristics of the distribution immediately on the command-line (very fast!), to possibly change some parameters. The Statistics program is designed for such situations. @menu * Histogram and Cumulative Frequency Plot:: Basic definitions. * 2D Histograms:: Plotting the distribution of two variables. * Least squares fitting:: Fitting with various parametric functions. * Sky value:: Definition and derivation of the Sky value. * Invoking aststatistics:: Arguments and options to Statistics. @end menu @node Histogram and Cumulative Frequency Plot, 2D Histograms, Statistics, Statistics @subsection Histogram and Cumulative Frequency Plot @cindex Histogram Histograms and the cumulative frequency plots are both used to visually study the distribution of a dataset. A histogram shows the number of data points which lie within pre-defined intervals (bins). So on the horizontal axis we have the bin centers and on the vertical, the number of points that are in that bin. You can use it to get a general view of the distribution: which values have been repeated the most? how close/far are the most significant bins? Are there more values in the larger part of the range of the dataset, or in the lower part? Similarly, many very important properties about the dataset can be deduced from a visual inspection of the histogram. In the Statistics program, the histogram can be either output to a table to plot with your favorite plotting program@footnote{ We recommend @url{http://pgfplots.sourceforge.net/,PGFPlots} which generates your plots directly within @TeX{} (the same tool that generates your document).}, or it can be shown with ASCII characters on the command-line, which is very crude, but good enough for a fast and on-the-go analysis, see the example in @ref{Invoking aststatistics}. @cindex Intervals, histogram @cindex Bin width, histogram @cindex Normalizing histogram @cindex Probability density function The width of the bins is only necessary parameter for a histogram. In the limiting case that the bin-widths tend to zero (while assuming the number of points in the dataset tend to infinity), then the histogram will tend to the @url{https://en.wikipedia.org/wiki/Probability_density_function, probability density function} of the distribution. When the absolute number of points in each bin is not relevant to the study (only the shape of the histogram is important), you can @emph{normalize} a histogram so like the probability density function, the sum of all its bins will be one. @cindex Cumulative Frequency Plot In the cumulative frequency plot of a distribution, the horizontal axis is the sorted data values and the y axis is the index of each data in the sorted distribution. Unlike a histogram, a cumulative frequency plot does not involve intervals or bins. This makes it less prone to any sort of bias or error that a given bin-width would have on the analysis. When a larger number of the data points have roughly the same value, then the cumulative frequency plot will become steep in that vicinity. This occurs because on the horizontal axis, there is little change while on the vertical axis, the indexes constantly increase. Normalizing a cumulative frequency plot means to divide each index (y axis) by the total number of data points (or the last value). Unlike the histogram which has a limited number of bins, ideally the cumulative frequency plot should have one point for every data element. Even in small datasets (for example, a @mymath{200\times200} image) this will result in an unreasonably large number of points to plot (40000)! As a result, for practical reasons, it is common to only store its value on a certain number of points (intervals) in the input range rather than the whole dataset, so you should determine the number of bins you want when asking for a cumulative frequency plot. In Gnuastro (and thus the Statistics program), the number reported for each bin is the total number of data points until the larger interval value for that bin. You can see an example histogram and cumulative frequency plot of a single dataset under the @option{--asciihist} and @option{--asciicfp} options of @ref{Invoking aststatistics}. So as a summary, both the histogram and cumulative frequency plot in Statistics will work with bins. Within each bin/interval, the lower value is considered to be within then bin (it is inclusive), but its larger value is not (it is exclusive). Formally, an interval/bin between a and b is represented by [a, b). When the over-all range of the dataset is specified (with the @option{--greaterequal}, @option{--lessthan}, or @option{--qrange} options), the acceptable values of the dataset are also defined with a similar inclusive-exclusive manner. But when the range is determined from the actual dataset (none of these options is called), the last element in the dataset is included in the last bin's count. @node 2D Histograms, Least squares fitting, Histogram and Cumulative Frequency Plot, Statistics @subsection 2D Histograms @cindex 2D histogram @cindex Histogram, 2D In @ref{Histogram and Cumulative Frequency Plot} the concept of histograms were introduced on a single dataset. But they are only useful for viewing the distribution of a single variable (column in a table). In many contexts, the distribution of two variables in relation to each other may be of interest. For example, the color-magnitude diagrams in astronomy, where the horizontal axis is the luminosity or magnitude of an object, and the vertical axis is the color. Scatter plots are useful to see these relations between the objects of interest when the number of the objects is small. As the density of points in the scatter plot increases, the points will fall over each other and just make a large connected region hide potentially interesting behaviors/correlations in the densest regions. This is where 2D histograms can become very useful. A 2D histogram is composed of 2D bins (boxes or pixels), just as a 1D histogram consists of 1D bins (lines). The number of points falling within each box/pixel will then be the value of that box. Added with a color-bar, you can now clearly see the distribution independent of the density of points (for example, you can even visualize it in log-scale if you want). Gnuastro's Statistics program has the @option{--histogram2d} option for this task. It takes a single argument (either @code{table} or @code{image}) that specifies the format of the output 2D histogram. The two formats will be reviewed separately in the sub-sections below. But let's start with the generalities that are common to both (related to the input, not the output). You can specify the two columns to be shown using the @option{--column} (or @option{-c}) option. So if you want to plot the color-magnitude diagram from a table with the @code{MAG-R} column on the horizontal and @code{COLOR-G-R} on the vertical column, you can use @option{--column=MAG-r,COLOR-G-r}. The number of bins along each dimension can be set with @option{--numbins} (for first input column) and @option{--numbins2} (for second input column). Without specifying any range, the full range of values will be used in each dimension. If you only want to focus on a certain interval of the values in the columns in any dimension you can use the @option{--greaterequal} and @option{--lessthan} options to limit the values along the first/horizontal dimension and @option{--greaterequal2} and @option{--lessthan2} options for the second/vertical dimension. @menu * 2D histogram as a table for plotting:: Format and usage in table format. * 2D histogram as an image:: Format and usage in image format @end menu @node 2D histogram as a table for plotting, 2D histogram as an image, 2D Histograms, 2D Histograms @subsubsection 2D histogram as a table for plotting When called with the @option{--histogram=table} option, Statistics will output a table file with three columns that have the information of every box as a column. If you asked for @option{--numbins=N} and @option{--numbins2=M}, all three columns will have @mymath{M\times N} rows (one row for every box/pixel of the 2D histogram). The first and second columns are the position of the box along the first and second dimensions. The third column has the number of input points that fall within that box/pixel. For example, you can make high-quality plots within your paper (using the same @LaTeX{} engine, thus blending very nicely with your text) using @url{https://ctan.org/pkg/pgfplots, PGFPlots}. Below you can see one such minimal example, using your favorite text editor, save it into a file, make the two small corrections in it, then run the commands shown at the top. This assumes that you have @LaTeX{} installed, if not the steps to install a minimally sufficient @LaTeX{} package on your system, see the respective section in @ref{Bootstrapping dependencies}. The two parts that need to be corrected are marked with '@code{%% <--}': the first one (@code{XXXXXXXXX}) should be replaced by the value to the @option{--numbins} option which is the number of bins along the first dimension. The second one (@code{FILE.txt}) should be replaced with the name of the file generated by Statistics. @example %% Replace 'XXXXXXXXX' with your selected number of bins in the first %% dimension. %% %% Then run these commands to build the plot in a LaTeX command. %% mkdir tikz %% pdflatex --shell-escape --halt-on-error report.tex \documentclass@{article@} %% Load PGFPlots and set it to build the figure separately in a 'tikz' %% directory (which has to exist before LaTeX is run). This %% "externalization" is very useful to include the commands of multiple %% plots in the middle of your paper/report, but also have the plots %% separately to use in slides or other scenarios. \usepackage@{pgfplots@} \usetikzlibrary@{external@} \tikzexternalize \tikzsetexternalprefix@{tikz/@} %% Define colormap for the PGFPlots 2D histogram \pgfplotsset@{ /pgfplots/colormap=@{hsvwhitestart@}@{ rgb255(0cm)=(255,255,255) rgb255(0.10cm)=(128,0,128) rgb255(0.5cm)=(0,0,230) rgb255(1.cm)=(0,255,255) rgb255(2.5cm)=(0,255,0) rgb255(3.5cm)=(255,255,0) rgb255(6cm)=(255,0,0) @} @} %% Start the prinable document \begin@{document@} You can write a full paper here and include many figures! Describe what the two axes are, and how you measured them. Also, do not forget to explain what it shows and how to interpret it. You also have separate PDFs for every figure in the `tikz' directory. Feel free to change this text. %% Draw the plot. \begin@{tikzpicture@} \small \begin@{axis@}[ width=\linewidth, view=@{0@}@{90@}, colorbar horizontal, xlabel=X axis, ylabel=Y axis, ylabel shift=-0.1cm, colorbar style=@{at=@{(0,1.01)@}, anchor=south west, xticklabel pos=upper@}, ] \addplot3[ surf, shader=flat corner, mesh/ordering=rowwise, mesh/cols=XXXXXXXXX, %% <-- Number of bins in 1st column. ] file @{FILE.txt@}; %% <-- Name of aststatistics output. \end@{axis@} \end@{tikzpicture@} %% End the printable document. \end@{document@} @end example Let's assume you have put the @LaTeX{} source above, into a plain-text file called @file{report.tex}. The PGFPlots call above is configured to build the plots as separate PDF files in a @file{tikz/} directory@footnote{@url{https://www.ctan.org/pkg/pgf, TiKZ} is the name of the lower-level engine behind PGPlots.}. This allows you to directly load those PDFs in your slides or other reports. Therefore, before building the PDF report, you should first make a @file{tikz/} directory: @example $ mkdir tikz @end example To build the final PDF, you should run @command{pdflatex} with the @option{--shell-escape} option, so it can build the separate PDF(s) separately. We are also adding the @option{--halt-on-error} so it immediately aborts in the case of an error (in the case of an error, by default @LaTeX{} will not abort, it will stop and ask for your input to temporarily change things and try fixing the error, but it has a special interface which can be hard to master). @example $ pdflatex --shell-escape --halt-on-error report.tex @end example @noindent You can now open @file{report.pdf} to see your very high quality 2D histogram within your text. And if you need the plots separately (for example, for slides), you can take the PDF inside the @file{tikz/} directory. @node 2D histogram as an image, , 2D histogram as a table for plotting, 2D Histograms @subsubsection 2D histogram as an image When called with the @option{--histogram=image} option, Statistics will output a FITS file with an image/array extension. If you asked for @option{--numbins=N} and @option{--numbins2=M} the image will have a size of @mymath{N\times M} pixels (one pixel per 2D bin). Also, the FITS image will have a linear WCS that is scaled to the 2D bin size along each dimension. So when you hover your mouse over any part of the image with a FITS viewer (for example, SAO DS9), besides the number of points in each pixel, you can directly also see ``coordinates'' of the pixels along the two axes. You can also use the optimized and fast FITS viewer features for many aspects of visually inspecting the distributions (which we will not go into further). @cindex Color-magnitude diagram @cindex Diagram, Color-magnitude For example, let's assume you want to derive the color-magnitude diagram (CMD) of the @url{http://uvudf.ipac.caltech.edu, UVUDF survey}. You can run the first command below to download the table with magnitudes of objects in many filters and run the second command to see general column metadata after it is downloaded. @example $ wget http://asd.gsfc.nasa.gov/UVUDF/uvudf_rafelski_2015.fits.gz $ asttable uvudf_rafelski_2015.fits.gz -i @end example Let's assume you want to find the color to be between the @code{F606W} and @code{F775W} filters (roughly corresponding to the g and r filters in ground-based imaging). However, the original table does not have color columns (there would be too many combinations!). Therefore you can use the @ref{Column arithmetic} feature of Gnuastro's Table program for deriving a new table with the @code{F775W} magnitude in one column and the difference between the @code{F606W} and @code{F775W} on the other column. With the second command, you can see the actual values if you like. @example $ asttable uvudf_rafelski_2015.fits.gz -cMAG_F775W \ -c'arith MAG_F606W MAG_F775W -' \ --colmetadata=ARITH_1,F606W-F775W,"AB mag" -ocmd.fits $ asttable cmd.fits @end example @noindent You can now construct your 2D histogram as a @mymath{100\times100} pixel FITS image with this command (assuming you want @code{F775W} magnitudes between 22 and 30, colors between -1 and 3 and 100 bins in each dimension). Note that without the @option{--manualbinrange} option the range of each axis will be determined by the values within the columns (which may be larger or smaller than your desired large). @example aststatistics cmd.fits -cMAG_F775W,F606W-F775W --histogram2d=image \ --numbins=100 --greaterequal=22 --lessthan=30 \ --numbins2=100 --greaterequal2=-1 --lessthan2=3 \ --manualbinrange --output=cmd-2d-hist.fits @end example @noindent If you have SAO DS9, you can now open this FITS file as a normal FITS image, for example, with the command below. Try hovering/zooming over the pixels: not only will you see the number of objects in the UVUDF catalog that fall in each bin, but you also see the @code{F775W} magnitude and color of that pixel also. @example $ ds9 cmd-2d-hist.fits -cmap sls -zoom to fit @end example @noindent With the first command below, you can activate the grid feature of DS9 to actually see the coordinate grid, as well as values on each line. With the second command, DS9 will even read the labels of the axes and use them to generate an almost publication-ready plot. @example $ ds9 cmd-2d-hist.fits -cmap sls -zoom to fit -grid yes $ ds9 cmd-2d-hist.fits -cmap sls -zoom to fit -grid yes \ -grid type publication @end example If you are happy with the grid, coloring and the rest, you can also use ds9 to save this as a JPEG image to directly use in your documents/slides with these extra DS9 options (DS9 will write the image to @file{cmd-2d.jpeg} and quit immediately afterwards): @example $ ds9 cmd-2d-hist.fits -cmap sls -zoom 4 -grid yes \ -grid type publication -saveimage cmd-2d.jpeg -quit @end example @cindex PGFPlots (@LaTeX{} package) This is good for a fast progress update. But for your paper or more official report, you want to show something with higher quality. For that, you can use the PGFPlots package in @LaTeX{} to add axes in the same font as your text, sharp grids and many other elegant/powerful features (like over-plotting interesting points and lines). But to load the 2D histogram into PGFPlots first you need to convert the FITS image into a more standard format, for example, PDF. We will use Gnuastro's @ref{ConvertType} for this, and use the @code{sls-inverse} color map (which will map the pixels with a value of zero to white): @example $ astconvertt cmd-2d-hist.fits --colormap=sls-inverse \ --borderwidth=0 -ocmd-2d-hist.pdf @end example @noindent Below you can see a minimally working example of how to add axis numbers, labels and a grid to the PDF generated above. Copy and paste the @LaTeX{} code below into a plain-text file called @file{cmd-report.tex} Notice the @code{xmin}, @code{xmax}, @code{ymin}, @code{ymax} values and how they are the same as the range specified above. @example \documentclass@{article@} \usepackage@{pgfplots@} \dimendef\prevdepth=0 \begin@{document@} You can write all you want here... \begin@{tikzpicture@} \begin@{axis@}[ enlargelimits=false, grid, axis on top, width=\linewidth, height=\linewidth, xlabel=@{Magnitude (F775W)@}, ylabel=@{Color (F606W-F775W)@}] \addplot graphics[xmin=22, xmax=30, ymin=-1, ymax=3] @{cmd-2d-hist.pdf@}; \end@{axis@} \end@{tikzpicture@} \end@{document@} @end example @noindent Run this command to build your PDF (assuming you have @LaTeX{} and PGFPlots). @example $ pdflatex cmd-report.tex @end example The improved quality, blending in with the text, vector-graphics resolution and other features make this plot pleasing to the eye, and let your readers focus on the main point of your scientific argument. PGFPlots can also built the PDF of the plot separately from the rest of the paper/report, see @ref{2D histogram as a table for plotting} for the necessary changes in the preamble. @node Least squares fitting, Sky value, 2D Histograms, Statistics @subsection Least squares fitting @cindex Radial profile @cindex Least squares fitting @cindex Fitting (least squares) @cindex Star formation main sequence After completing a good observation, doing robust data reduction and finalizing the measurements, it is commonly necessary to parameterize the derived correlations. For example, you have derived the radial profile of the PSF of your image (see @ref{Building the extended PSF}). You now want to parameterize the radial profile to estimate the slope. Alternatively, you may have found the star formation rate and stellar mass of your sample of galaxies. Now, you want to derive the star formation main sequence as a parametric relation between the two. The fitting functions below can be used for such purposes. @cindex GSL @cindex GNU Scientific Library Gnuastro's least squares fitting features are just wrappers over the least squares fitting methods of the @url{https://www.gnu.org/software/gsl/doc/html/lls.html, linear} and @url{https://www.gnu.org/software/gsl/doc/html/nls.html, nonlinear} least-squares fitting functions of the GNU Scientific Library (GSL). For the low-level details and equations of the methods, please see the GSL documentation. The names have been preserved here in Gnuastro to simplify the connection with GSL and follow the details in the detailed documentation there. GSL is a very low-level library, designed for maximal portability to many scenarios, and power. Therefore calling GSL's functions directly for a fast operation requires a good knowledge of the C programming language and many lines of code. As a low-level library, GSL is designed to be the back-end of higher-level programs (like Gnuastro). Through the Statistics program, in Gnuastro we provide a high-level interface to access to GSL's very powerful least squares fitting engine to read/write from/to standard data formats in astronomy. A fully working example is shown below. @cindex Gaussian noise @cindex Noise (Gaussian) To activate fitting in Statistics, simply give your desired fitting method to the @option{--fit} option (for the full list of acceptable methods, see @ref{Fitting options}). For example, with the command below, we'll build a fake measurement table (including noise) from the polynomial @mymath{y=1.23-4.56x+7.89x^2}. To understand how this equation translates to the command below (part before @code{set-y}), see @ref{Reverse polish notation} and @ref{Column arithmetic}. We will set the X axis to have values from 0.1 to 2, with steps of 0.01 and let's assume a random Gaussian noise to each @mymath{y} measurement: @mymath{\sigma_y=0.1y}. To make the random number generation exactly reproducible, we are also setting the seed (see @ref{Generating random numbers}, which also uses GSL as a backend). To learn more about the @code{mknoise-sigma} operator, see the Arithmetic program's @ref{Random number generators}. @example $ export GSL_RNG_SEED=1664015492 $ seq 0.1 0.01 2 \ | asttable --output=noisy.fits --envseed -c1 \ -c'arith 1.23 -4.56 $1 x + 7.89 $1 x $1 x + set-y \ 0.1 y x set-yerr \ y yerr mknoise-sigma yerr' \ --colmetadata=1,X --colmetadata=2,Y \ --colmetadata=3,Yerr @end example @noindent Let's have a look at the output plot with TOPCAT using the command below. @example $ astscript-fits-view noisy.fits @end example @noindent To see the error-bars, after opening the scatter plot, go into the ``Form'' tab for that plot. Click on the button with a green ``+'' sign followed by ``Forms'' and select ``XYError''. On the side-menu, in front of ``Y Positive Error'', select the @code{Yerr} column of the input table. As you see, the error bars do indeed increase for higher X axis values. Since we have error bars in this example (as in any measurement), we can use weighted fitting. Also, this isn't a linear relation, so we'll use a polynomial to second order (a maximum power of 2 in the form of @mymath{Y=c_0+c_1X+c_2X^2}): @example $ aststatistics noisy.fits -cX,Y,Yerr --fit=polynomial-weighted \ --fitmaxpower=2 Statistics (GNU Astronomy Utilities) @value{VERSION} ------- Fitting results (remove extra info with '--quiet' or '-q) Input file: noisy.fits (hdu: 1) with 191 non-blank rows. X column: X Y column: Y Weight column: Yerr [Standard deviation of Y in each row] Fit function: Y = c0 + (c1 * X^1) + (c2 * X^2) + ... (cN * X^N) N: 2 c0: +1.2286211608 c1: -4.5127796636 c2: +7.8435883943 Covariance matrix: +0.0010496001 -0.0039928488 +0.0028367390 -0.0039928488 +0.0175244127 -0.0138030778 +0.0028367390 -0.0138030778 +0.0128129806 Reduced chi^2 of fit: +0.9740670090 @end example As you see from the elaborate message, the weighted polynomial fitting has found return the @mymath{c_0}, @mymath{c_1} and @mymath{c_2} of @mymath{Y=c_0+c_1X+c_2X^2} that best represents the data we inserted. Our input values were @mymath{c_0=1.23}, @mymath{c_1=-4.56} and @mymath{c_2=7.89}, and the fitted values are @mymath{c_0\approx1.2286}, @mymath{c_1\approx-4.5128} and @mymath{c_2\approx7.8436} (which is statistically a very good fit! given that we knew the original values a-priori!). The covariance matrix is also calculated, it is necessary to calculate error bars on the estimations and contains a lot of information (e.g., possible correlations between parameters). Finally, the reduced @mymath{\chi^2} (or @mymath{\chi_{red}^2}) of the fit is also printed (which was the measure to minimize). A @mymath{\chi_{red}^2\approx1} shows a good fit. This is good for real-world scenarios when you don't know the original values a-priori. For more on interpreting @mymath{\chi_{red}^2\approx1}, see Andrae et al. @url{https://arxiv.org/abs/1012.3754,2010}. The comparison of fitted and input values look pretty good, but nothing beats visual inspection! To see how this looks compared to the data, let's open the table again: @example $ astscript-fits-view noisy.fits @end example Repeat the steps below to show the scatter plot and error-bars. Then, go to the ``Layers'' menu and select ``Add Function Control''. Use the results above to fill the box in front of ``Function Expression'': @code{1.2286+(-4.5128*x)+(7.8436*x*x)}. You will see that the second order polynomial falls very nicely over the points@footnote{After plotting, you will notice that the legend made the plot too thin. Fortunately you have a lot of empty space within the plot. To bring the legend in, click on the ``Legend'' item on the bottom-left menu, in the ``Location'' tab, click on ``Internal'' and hold and move it to the top-left in the box below. To make the functional fit more clear, you can click on the ``Function'' item of the bottom-left menu. In the ``Style'' tab, change the color and thickness.}. But this fit is not perfect: it also has errors (inherited from the measurement errors). We need the covariance matrix to estimate the errors on each point, and that can be complex to do by hand. Fortunately GSL has the tools to easily estimate the function at any point and also calculate its corresponding error. To access this feature within Gnuastro's Statistics program, you should use the @option{--fitestimate} option. You can either give an independent table file name (with @option{--fitestimatehdu} and @option{--fitestimatecol} to specify the HDU and column in that file), or just @code{self} so it uses the same X axis column that was used in this fit. Let's use the easier case: @example $ aststatistics noisy.fits -cX,Y,Yerr --fit=polynomial-weighted \ --fitmaxpower=2 --fitestimate=self --output=est.fits ...[[truncated; same as above]]... Requested estimation: Written to: est.fits @end example The first lines of the printed text are the same as before. Afterwards, you will see a new line printed in the output, saying that the estimation was written in @file{est.fits}. You can now inspect the two tables with TOPCAT again with the command below. After TOPCAT opens, plot both scatter plots: @example $ astscript-fits-view noisy.fits est.fits @end example It is clear that they fall nicely on top of each other. The @file{est.fits} table also has a third column with error bars. You can follow the same steps before and draw the error bars to see how they compare with the scatter of the measured data. They are much smaller than the error in each point because we had a very good sampling of the function in our noisy data. Another useful point with the estimated output file is that it contains all the fitting outputs as keywords in the header: @example $ astfits est.fits -h1 ...[[truncated]]... / Fit results FITTYPE = 'polynomial-weighted' / Functional form of the fitting. FITMAXP = 2 / Maximum power of polynomial. FITIN = 'noisy.fits' / Name of file with input columns. FITINHDU= '1 ' / Name or Number of HDU with input cols. FITXCOL = 'X ' / Name or Number of independent (X) col. FITYCOL = 'Y ' / Name or Number of measured (Y) column. FITWCOL = 'Yerr ' / Name or Number of weight column. FITWNAT = 'Standard deviation' / Nature of weight column. FRDCHISQ= 0.974067008958516 / Reduced chi^2 of fit. FITC0 = 1.22862116084727 / C0: multiple of x^0 in polynomial FITC1 = -4.51277966356177 / C1: multiple of x^1 in polynomial FITC2 = 7.84358839431161 / C2: multiple of x^2 in polynomial FCOV11 = 0.00104960011629718 / Covariance matrix element (1,1). FCOV12 = -0.00399284880859776 / Covariance matrix element (1,2). FCOV13 = 0.00283673901863388 / Covariance matrix element (1,3). FCOV21 = -0.00399284880859776 / Covariance matrix element (2,1). FCOV22 = 0.0175244126670659 / Covariance matrix element (2,2). FCOV23 = -0.0138030778380786 / Covariance matrix element (2,3). FCOV31 = 0.00283673901863388 / Covariance matrix element (3,1). FCOV32 = -0.0138030778380786 / Covariance matrix element (3,2). FCOV33 = 0.0128129806394559 / Covariance matrix element (3,3). ...[[truncated]]... @end example In scenarios were you don't want the estimation, but only the fitted parameters, all that verbose, human-friendly text or FITS keywords can be an annoying extra step. For such cases, you should use the @option{--quiet} option like below. It will print the parameters, rows of the covariance matrix and @mymath{\chi_{red}^2} on separate lines with nothing extra. This allows you to parse the values in any way that you would like. @example $ aststatistics noisy.fits -cX,Y,Yerr --fit=polynomial-weighted \ --fitmaxpower=2 --quiet +1.2286211608 -4.5127796636 +7.8435883943 +0.0010496001 -0.0039928488 +0.0028367390 -0.0039928488 +0.0175244127 -0.0138030778 +0.0028367390 -0.0138030778 +0.0128129806 +0.9740670090 @end example As a final example, because real data usually have outliers, let's look at the ``robust'' polynomial fit which has special features to remove outliers. First, we need to add some outliers to the table. To do this, we'll make a plain-text table with @command{echo}, and use Table's @option{--catrowfile} to concatenate (or append) those two rows to the original table. Finally, we'll run the same fitting step above: @example $ echo "0.6 20 0.01" > outliers.txt $ echo "0.8 20 0.01" >> outliers.txt $ asttable noisy.fits --catrowfile=outliers.txt \ --output=with-outlier.fits $ aststatistics with-outlier.fits -cX,Y,Yerr --fit=polynomial-weighted \ --fitmaxpower=2 --fitestimate=self \ --output=est-out.fits Statistics (GNU Astronomy Utilities) @value{VERSION} ------- Fitting results (remove extra info with '--quiet' or '-q) Input file: with-outlier.fits (hdu: 1) with 193 non-blank rows. X column: X Y column: Y Weight column: Yerr [Standard deviation of Y in each row] Fit function: Y = c0 + (c1 * X^1) + (c2 * X^2) + ... (cN * X^N) N: 2 c0: -13.6446036899 c1: +66.8463258547 c2: -30.8746303591 Covariance matrix: +0.0007889160 -0.0027706310 +0.0022208939 -0.0027706310 +0.0113922468 -0.0100306732 +0.0022208939 -0.0100306732 +0.0094087226 Reduced chi^2 of fit: +4501.8356719150 Requested estimation: Written to: est-out.fit @end example We see that the coefficient values have changed significantly and that @mymath{\chi_{red}^2} has increased to @mymath{4501}! Recall that a good fit should have @mymath{\chi_{red}^2\approx1}. These numbers clearly show that the fit was bad, but again, nothing beats a visual inspection. To visually see the effect of those outliers, let's plot them with the command below. You see that those two points have clearly caused a turn in the fitted result which is terrible. @example $ astscript-fits-view with-outlier.fits est-out.fits @end example For such cases, GSL has @url{https://www.gnu.org/software/gsl/doc/html/lls.html#robust-linear-regression, Robust linear regression}. In Gnuastro's Statistics, you can access it with @option{--fit=polynomial-robust}, like the example below. Just note that the robust method doesn't take an error column (because it estimates the errors internally while rejecting outliers, based on the method). @example $ aststatistics with-outlier.fits -cX,Y --fit=polynomial-robust \ --fitmaxpower=2 --fitestimate=self \ --output=est-out.fits --quiet $ astfits est-out.fits -h1 | grep ^FITC FITC0 = 1.20422691185238 / C0: multiple of x^0 in polynomial FITC1 = -4.4779253576348 / C1: multiple of x^1 in polynomial FITC2 = 7.84986153686548 / C2: multiple of x^2 in polynomial $ astscript-fits-view with-outlier.fits est-out.fits @end example It is clear that the coefficients are very similar to the no-outlier scenario above and if you run the second command to view the scatter plots on TOPCAT, you also see that the fit nicely follows the curve and is not affected by those two points. GSL provides many methods to reject outliers. For their full list, see the description of @option{--fitrobust} in @ref{Fitting options}. For a description of the outlier rejection methods, see the @url{https://www.gnu.org/software/gsl/doc/html/lls.html#c.gsl_multifit_robust_workspace, GSL manual}. You may have noticed that unlike the cases before the last Statistics command above didn't print anything on the standard output. This is becasue @option{--quiet} and @option{--fitestimate} were called together. In this case, because all the fitting parameters are written as FITS keywords, because of the @option{--quiet} option, they are no longer printed on standard output. @node Sky value, Invoking aststatistics, Least squares fitting, Statistics @subsection Sky value @cindex Sky One of the most important aspects of a dataset is its reference value: the value of the dataset where there is no signal. Without knowing, and thus removing the effect of, this value it is impossible to compare the derived results of many high-level analyses over the dataset with other datasets (in the attempt to associate our results with the ``real'' world). In astronomy, this reference value is known as the ``Sky'' value: the value that noise fluctuates around: where there is no signal from detectable objects or artifacts (for example, galaxies, stars, planets or comets, star spikes or internal optical ghost). Depending on the dataset, the Sky value maybe a fixed value over the whole dataset, or it may vary based on location. For an example of the latter case, see Figure 11 in Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. Because of the significance of the Sky value in astronomical data analysis, we have devoted this subsection to it for a thorough review. We start with a thorough discussion on its definition (@ref{Sky value definition}). In the astronomical literature, researchers use a variety of methods to estimate the Sky value, so in @ref{Sky value misconceptions}) we review those and discuss their biases. From the definition of the Sky value, the most accurate way to estimate the Sky value is to run a detection algorithm (for example, @ref{NoiseChisel}) over the dataset and use the undetected pixels. However, there is also a more crude method that maybe useful when good direct detection is not initially possible (for example, due to too many cosmic rays in a shallow image). A more crude (but simpler method) that is usable in such situations is discussed in @ref{Quantifying signal in a tile}. @menu * Sky value definition:: Definition of the Sky/reference value. * Sky value misconceptions:: Wrong methods to estimate the Sky value. * Quantifying signal in a tile:: Method to estimate the presence of signal. @end menu @node Sky value definition, Sky value misconceptions, Sky value, Sky value @subsubsection Sky value definition @cindex Sky value This analysis is taken from Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. Let's assume that all instrument defects -- bias, dark and flat -- have been corrected and the magnitude (see @ref{Brightness flux magnitude}) of a detected object, @mymath{O}, is desired. The sources of flux on pixel@footnote{For this analysis the dimension of the data (image) is irrelevant. So if the data is an image (2D) with width of @mymath{w} pixels, then a pixel located on column @mymath{x} and row @mymath{y} (where all counting starts from zero and (0, 0) is located on the bottom left corner of the image), would have an index: @mymath{i=x+y\times{}w}.} @mymath{i} of the image can be written as follows: @itemize @item Contribution from the target object (@mymath{O_i}). @item Contribution from other detected objects (@mymath{D_i}). @item Undetected objects or the fainter undetected regions of bright objects (@mymath{U_i}). @item @cindex Cosmic rays A cosmic ray (@mymath{C_i}). @item @cindex Background flux The background flux, which is defined to be the count if none of the others exists on that pixel (@mymath{B_i}). @end itemize @noindent The total flux in this pixel (@mymath{T_i}) can thus be written as: @dispmath{T_i=B_i+D_i+U_i+C_i+O_i.} @cindex Cosmic ray removal @noindent By definition, @mymath{D_i} is detected and it can be assumed that it is correctly estimated (deblended) and subtracted, we can thus set @mymath{D_i=0}. There are also methods to detect and remove cosmic rays, for example, the method described in van Dokkum (2001)@footnote{van Dokkum, P. G. (2001). Publications of the Astronomical Society of the Pacific. 113, 1420.}, or by comparing multiple exposures. This allows us to set @mymath{C_i=0}. Note that in practice, @mymath{D_i} and @mymath{U_i} are correlated, because they both directly depend on the detection algorithm and its input parameters. Also note that no detection or cosmic ray removal algorithm is perfect. With these limitations in mind, the observed Sky value for this pixel (@mymath{S_i}) can be defined as @cindex Sky value @dispmath{S_i\equiv{}B_i+U_i.} @noindent Therefore, as the detection process (algorithm and input parameters) becomes more accurate, or @mymath{U_i\to0}, the Sky value will tend to the background value or @mymath{S_i\to B_i}. Hence, we see that while @mymath{B_i} is an inherent property of the data (pixel in an image), @mymath{S_i} depends on the detection process. Over a group of pixels, for example, in an image or part of an image, this equation translates to the average of undetected pixels (Sky@mymath{=\sum{S_i}}). With this definition of Sky, the object flux in the data can be calculated, per pixel, with @dispmath{ T_{i}=S_{i}+O_{i} \quad\rightarrow\quad O_{i}=T_{i}-S_{i}.} @cindex photo-electrons In the fainter outskirts of an object, a very small fraction of the photo-electrons in a pixel actually belongs to objects, the rest is caused by random factors (noise), see Figure 1b in Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. Therefore even a small over estimation of the Sky value will result in the loss of a very large portion of most galaxies. Besides the lost area/brightness, this will also cause an over-estimation of the Sky value and thus even more under-estimation of the object's magnitude. It is thus very important to detect the diffuse flux of a target, even if they are not your primary target. In summary, the more accurately the Sky is measured, the more accurately the magnitude (calculated from the sum of pixel values) of the target object can be measured (photometry). Any under/over-estimation in the Sky will directly translate to an over/under-estimation of the measured object's magnitude. @cartouche @noindent The @strong{Sky value} is only correctly found when all the detected objects (@mymath{D_i} and @mymath{C_i}) have been removed from the data. @end cartouche @node Sky value misconceptions, Quantifying signal in a tile, Sky value definition, Sky value @subsubsection Sky value misconceptions As defined in @ref{Sky value}, the sky value is only accurately defined when the detection algorithm is not significantly reliant on the sky value. In particular its detection threshold. However, most signal-based detection tools@footnote{According to Akhlaghi and Ichikawa (2015), signal-based detection is a detection process that relies heavily on assumptions about the to-be-detected objects. This method was the most heavily used technique prior to the introduction of NoiseChisel in that paper.} use the sky value as a reference to define the detection threshold. These older techniques therefore had to rely on approximations based on other assumptions about the data. A review of those other techniques can be seen in Appendix A of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. These methods were extensively used in astronomical data analysis for several decades, therefore they have given rise to a lot of misconceptions, ambiguities and disagreements about the sky value and how to measure it. As a summary, the major methods used until now were an approximation of the mode of the image pixel distribution and @mymath{\sigma}-clipping. @itemize @cindex Histogram @cindex Distribution mode @cindex Mode of a distribution @cindex Probability density function @item To find the mode of a distribution those methods would either have to assume (or find) a certain probability density function (PDF) or use the histogram. But astronomical datasets can have any distribution, making it almost impossible to define a generic function. Also, histogram-based results are very inaccurate (there is a large dispersion) and it depends on the histogram bin-widths. Generally, the mode of a distribution also shifts as signal is added. Therefore, even if it is accurately measured, the mode is a biased measure for the Sky value. @cindex Sigma-clipping @item Another approach was to iteratively clip the brightest pixels in the image (which is known as @mymath{\sigma}-clipping). See @ref{Sigma clipping} for a complete explanation. @mymath{\sigma}-clipping is useful when there are clear outliers (an object with a sharp edge in an image for example). However, real astronomical objects have diffuse and faint wings that penetrate deeply into the noise, see Figure 1 in Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. @end itemize As discussed in @ref{Sky value}, the sky value can only be correctly defined as the average of undetected pixels. Therefore all such approaches that try to approximate the sky value prior to detection are ultimately poor approximations. @node Quantifying signal in a tile, , Sky value misconceptions, Sky value @subsubsection Quantifying signal in a tile In order to define detection thresholds on the image, or calibrate it for measurements (subtract the signal of the background sky and define errors), we need some basic measurements. For example, the quantile threshold in NoiseChisel (@option{--qthresh} option), or the mean of the undetected regions (Sky) and the Sky standard deviation (Sky STD) which are the output of NoiseChisel and Statistics. But astronomical images will contain a lot of stars and galaxies that will bias those measurements if not properly accounted for. Quantifying where signal is present is thus a very important step in the usage of a dataset; for example, if the Sky level is over-estimated, your target object's magnitude will be under-estimated. @cindex Data @cindex Noise @cindex Signal @cindex Gaussian distribution Let's start by clarifying some definitions: @emph{Signal} is defined as the non-random source of flux in each pixel (you can think of this as the mean in a Gaussian or Poisson distribution). In astronomical images, signal is mostly photons coming of a star or galaxy, and counted in each pixel. @emph{Noise} is defined as the random source of flux in each pixel (or the standard deviation of a Gaussian or Poisson distribution). Noise is mainly due to counting errors in the detector electronics upon data collection. @emph{Data} is defined as the combination of signal and noise (so a noisy image of a galaxy is one @emph{data}set). When a dataset does not have any signal (for example, you take an image with a closed shutter, producing an image that only contains noise), the mean, median and mode of the distribution are equal within statistical errors. Signal from emitting objects, like astronomical targets, always has a positive value and will never become negative, see Figure 1 in Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. Therefore, when signal is added to the data (you take an image with an open shutter pointing to a galaxy for example), the mean, median and mode of the dataset shift to the positive, creating a positively skewed distribution. The shift of the mean is the largest. The median shifts less, since it is defined after ordering all the elements/pixels (the median is the value at a quantile of 0.5), thus it is not affected by outliers. Finally, the mode's shift to the positive is the least. @cindex Mean @cindex Median @cindex Quantile Inverting the argument above gives us a robust method to quantify the significance of signal in a dataset: when the mean and median of a distribution are approximately equal we can argue that there is no significant signal. In other words: when the quantile of the mean (@mymath{q_{mean}}) is around 0.5. This definition of skewness through the quantile of the mean is further introduced with a real image the tutorials, see @ref{Skewness caused by signal and its measurement}. @cindex Signal-to-noise ratio However, in an astronomical image, some of the pixels will contain more signal than the rest, so we cannot simply check @mymath{q_{mean}} on the whole dataset. For example, if we only look at the patch of pixels that are placed under the central parts of the brightest stars in the field of view, @mymath{q_{mean}} will be very high. The signal in other parts of the image will be weaker, and in some parts it will be much smaller than the noise (for example, 1/100-th of the noise level). When the signal-to-noise ratio is very small, we can generally assume no signal (because its effectively impossible to measure it) and @mymath{q_{mean}} will be approximately 0.5. To address this problem, we break the image into a grid of tiles@footnote{The options to customize the tessellation are discussed in @ref{Processing options}.} (see @ref{Tessellation}). For example, a tile can be a square box of size @mymath{30\times30} pixels. By measuring @mymath{q_{mean}} on each tile, we can find which tiles that contain significant signal and ignore them. Technically, if a tile's @mymath{|q_{mean}-0.5|} is larger than the value given to the @option{--meanmedqdiff} option, that tile will be ignored for the next steps. You can read this option as ``mean-median-quantile-difference''. @cindex Skewness @cindex Convolution The raw dataset's pixel distribution (in each tile) is noisy, to decrease the noise/error in estimating @mymath{q_{mean}}, we convolve the image before tessellation (see @ref{Convolution process}. Convolution decreases the range of the dataset and enhances its skewness, See Section 3.1.1 and Figure 4 in Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. This enhanced skewness can be interpreted as an increase in the Signal to noise ratio of the objects buried in the noise. Therefore, to obtain an even better measure of the presence of signal in a tile, the mean and median discussed above are measured on the convolved image. @cindex Cosmic rays There is one final hurdle: raw astronomical datasets are commonly peppered with Cosmic rays. Images of Cosmic rays are not smoothed by the atmosphere or telescope aperture, so they have sharp boundaries. Also, since they do not occupy too many pixels, they do not affect the mode and median calculation. But their very high values can greatly bias the calculation of the mean (recall how the mean shifts the fastest in the presence of outliers), for example, see Figure 15 in Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. The effect of outliers like cosmic rays on the mean and standard deviation can be removed through @mymath{\sigma}-clipping, see @ref{Sigma clipping} for a complete explanation. Therefore, after asserting that the mean and median are approximately equal in a tile (see @ref{Tessellation}), the Sky and its STD are measured on each tile after @mymath{\sigma}-clipping with the @option{--sigmaclip} option (see @ref{Sigma clipping}). In the end, some of the tiles will pass the test and will be given a value. Others (that had signal in them) will just be assigned a NaN (not-a-number) value. But we need a measurement over each tile (and thus pixel). We will therefore use interpolation to assign a value to the NaN tiles. However, prior to interpolating over the failed tiles, another point should be considered: large and extended galaxies, or bright stars, have wings which sink into the noise very gradually. In some cases, the gradient over these wings can be on scales that is larger than the tiles (for example, the pixel value changes by @mymath{0.1\sigma} after 100 pixels, but the tile has a width of 30 pixels). In such cases, the @mymath{q_{mean}} test will be successful, even though there is signal. Recall that @mymath{q_{mean}} is a measure of skewness. If we do not identify (and thus set to NaN) such outlier tiles before the interpolation, the photons of the outskirts of the objects will leak into the detection thresholds or Sky and Sky STD measurements and bias our result, see @ref{Detecting large extended targets}. Therefore, the final step of ``quantifying signal in a tile'' is to look at this distribution of successful tiles and remove the outliers. @mymath{\sigma}-clipping is a good solution for removing a few outliers, but the problem with outliers of this kind is that there may be many such tiles (depending on the large/bright stars/galaxies in the image). We therefore apply the following local outlier rejection strategy. For each tile, we find the nearest @mymath{N_{ngb}} tiles that had a usable value (@mymath{N_{ngb}} is the value given to @option{--outliernumngb}). We then sort them and find the difference between the largest and second-to-smallest elements (The minimum is not used because the scatter can be large). Let's call this the tile's @emph{slope} (measured from its neighbors). All the tiles that are on a region of flat noise will have similar slope values, but if a few tiles fall on the wings of a bright star or large galaxy, their slope will be significantly larger than the tiles with no signal. We just have to find the smallest tile slope value that is an outlier compared to the rest, and reject all tiles with a slope larger than that. @cindex Outliers @cindex Identifying outliers To identify the smallest outlier, we will use the distribution of distances between sorted elements. Let's assume the total number of tiles with a good mean-median quantile difference is @mymath{N}. They are first sorted and searching for the outlier starts on element @mymath{N/3} (integer division). Let's take @mymath{v_i} to be the @mymath{i}-th element of the sorted input (with no blank values) and @mymath{m} and @mymath{\sigma} as the @mymath{\sigma}-clipped median and standard deviation from the distances of the previous @mymath{N/3-1} elements (not including @mymath{v_i}). If the value given to @option{--outliersigma} is displayed with @mymath{s}, the @mymath{i}-th element is considered as an outlier when the condition below is true. @dispmath{{(v_i-v_{i-1})-m\over \sigma}>s} @noindent Since @mymath{i} begins from the @mymath{N/3}-th element in the sorted array (a quantile of @mymath{1/3=0.33}), the outlier has to be larger than the @mymath{0.33} quantile value of the dataset (this is usually the case; otherwise, it is hard to define it as an ``outlier''!). @cindex Bicubic interpolation @cindex Interpolation, bicubic @cindex Nearest-neighbor interpolation @cindex Interpolation, nearest-neighbor Once the outlying tiles have been successfully identified and set to NaN, we use nearest-neighbor interpolation to give a value to all tiles in the image. We do not use parametric interpolation methods (like bicubic), because they will effectively extrapolate on the edges, creating strong artifacts. Nearest-neighbor interpolation is very simple: for each tile, we find the @mymath{N_{ngb}} nearest tiles that had a good value, the tile's value is found by estimating the median. You can set @mymath{N_{ngb}} through the @option{--interpnumngb} option. Once all the tiles are given a value, a smoothing step is implemented to remove the sharp value contrast that can happen on the edges of tiles. The size of the smoothing box is set with the @option{--smoothwidth} option. As mentioned above, the process above is used for any of the basic measurements (for example, identifying the quantile-based thresholds in NoiseChisel, or the Sky value in Statistics). You can use the check-image feature of NoiseChisel or Statistics to inspect the steps and visually see each step (all the options that start with @option{--check}). For example, as mentioned in the @ref{NoiseChisel optimization} tutorial, when given a dataset from a new instrument (with differing noise properties), we highly recommend to use @option{--checkqthresh} in your first call and visually inspect how the parameters above affect the final quantile threshold (e.g., have the wings of bright sources leaked into the threshold?). The same goes for the @option{--checksky} option of Statistics or NoiseChisel. @node Invoking aststatistics, , Sky value, Statistics @subsection Invoking Statistics Statistics will print statistical measures of an input dataset (table column or image). The executable name is @file{aststatistics} with the following general template @example $ aststatistics [OPTION ...] InputImage.fits @end example @noindent One line examples: @example ## Print some general statistics of input image: $ aststatistics image.fits ## Print some general statistics of column named MAG_F160W: $ aststatistics catalog.fits -h1 --column=MAG_F160W ## Make the histogram of the column named MAG_F160W: $ aststatistics table.fits -cMAG_F160W --histogram ## Find the Sky value on image with a given kernel: $ aststatistics image.fits --sky --kernel=kernel.fits ## Print Sigma-clipped results of records with a MAG_F160W ## column value between 26 and 27: $ aststatistics cat.fits -cMAG_F160W -g26 -l27 --sigmaclip=3,0.2 ## Find the polynomial (to third order) that best fits the X and Y ## columns of 'table.fits'. Robust fitting will be used to reject ## outliers. Also, estimate the fitted polynomial on the same input ## column (with errors). $ aststatistics table.fits --fit=polynomial-robust --fitmaxpower=3 \ -cX,Y --fitestimate=self --output=estimated.fits ## Print the median value of all records in column MAG_F160W that ## have a value larger than 3 in column PHOTO_Z: $ aststatistics tab.txt -rPHOTO_Z -g3 -cMAG_F160W --median ## Calculate the median of the third column in the input table, but only ## for rows where the mean of the first and second columns is >5. $ awk '($1+$2)/2 > 5 @{print $3@}' table.txt | aststatistics --median @end example @noindent @cindex Standard input Statistics can take its input dataset either from a file (image or table) or the Standard input (see @ref{Standard input}). If any output file is to be created, the value to the @option{--output} option, is used as the base name for the generated files. Without @option{--output}, the input name will be used to generate an output name, see @ref{Automatic output}. The options described below are particular to Statistics, but for general operations, it shares a large collection of options with the other Gnuastro programs, see @ref{Common options} for the full list. For more on reading from standard input, please see the description of @code{--stdintimeout} option in @ref{Input output options}. Options can also be given in configuration files, for more, please see @ref{Configuration files}. The input dataset may have blank values (see @ref{Blank pixels}), in this case, all blank pixels are ignored during the calculation. Initially, the full dataset will be read, but it is possible to select a specific range of data elements to use in the analysis of each run. You can either directly specify a minimum and maximum value for the range of data elements to use (with @option{--greaterequal} or @option{--lessthan}), or specify the range using quantiles (with @option{--qrange}). If a range is specified, all pixels outside of it are ignored before any processing. @cindex ASCII plot When no operation is requested, Statistics will print some general basic properties of the input dataset on the command-line like the example below (ran on one of the output images of @command{make check}@footnote{You can try it by running the command in the @file{tests} directory, open the image with a FITS viewer and have a look at it to get a sense of how these statistics relate to the input image/dataset.}). This default behavior is designed to help give you a general feeling of how the data are distributed and help in narrowing down your analysis. @example $ aststatistics convolve_spatial_scaled_noised.fits \ --greaterequal=9500 --lessthan=11000 Statistics (GNU Astronomy Utilities) X.X ------- Input: convolve_spatial_scaled_noised.fits (hdu: 0) Range: from (inclusive) 9500, upto (exclusive) 11000. Unit: counts ------- Number of elements: 9074 Minimum: 9622.35 Maximum: 10999.7 Mode: 10055.45996 Mode quantile: 0.4001983908 Median: 10093.7 Mean: 10143.98257 Standard deviation: 221.80834 ------- Histogram: | ** | ****** | ******* | ********* | ************* | ************** | ****************** | ******************** | *************************** * | ***************************************** *** |* ************************************************************** |----------------------------------------------------------------- @end example Gnuastro's Statistics is a very general purpose program, so to be able to easily understand this diversity in its operations (and how to possibly run them together), we will divided the operations into two types: those that do not respect the position of the elements and those that do (by tessellating the input on a tile grid, see @ref{Tessellation}). The former treat the whole dataset as one and can re-arrange all the elements (for example, sort them), but the former do their processing on each tile independently. First, we will review the operations that work on the whole dataset. @cindex AWK @cindex GNU AWK The group of options below can be used to get single value measurement(s) of the whole dataset. They will print only the requested value as one field in a line/row, like the @option{--mean}, @option{--median} options. These options can be called any number of times and in any order. The outputs of all such options will be printed on one line following each other (with a space character between them). This feature makes these options very useful in scripts, or to redirect into programs like GNU AWK for higher-level processing. These are some of the most basic measures, Gnuastro is still under heavy development and this list will grow. If you want another statistical parameter, please contact us and we will do out best to add it to this list, see @ref{Suggest new feature}. @menu * Input to Statistics:: How to specify the inputs to Statistics. * Single value measurements:: Can be used together (like --mean, or --maximum). * Generating histograms and cumulative frequency plots:: Histogram and CFP tables. * Fitting options:: Least squares fitting. * Contour options:: Table of contours. * Statistics on tiles:: Possible to do single-valued measurements on tiles. @end menu @node Input to Statistics, Single value measurements, Invoking aststatistics, Invoking aststatistics @subsubsection Input to Statistics The following set of options are for specifying the input/outputs of Statistics. There are many other input/output options that are common to all Gnuastro programs including Statistics, see @ref{Input output options} for those. @table @option @item -c STR/INT @itemx --column=STR/INT The column to use when the input file is a table with more than one column. See @ref{Selecting table columns} for a full description of how to use this option. For more on how tables are read in Gnuastro, please see @ref{Tables}. @item -g FLT @itemx --greaterequal=FLT Limit the range of inputs into those with values greater and equal to what is given to this option. None of the values below this value will be used in any of the processing steps below. @item -l FLT @itemx --lessthan=FLT Limit the range of inputs into those with values less-than what is given to this option. None of the values greater or equal to this value will be used in any of the processing steps below. @item -Q FLT[,FLT] @itemx --qrange=FLT[,FLT] Specify the range of usable inputs using the quantile. This option can take one or two quantiles to specify the range. When only one number is input (let's call it @mymath{Q}), the range will be those values in the quantile range @mymath{Q} to @mymath{1-Q}. So when only one value is given, it must be less than 0.5. When two values are given, the first is used as the lower quantile range and the second is used as the larger quantile range. @cindex Quantile The quantile of a given element in a dataset is defined by the fraction of its index to the total number of values in the sorted input array. So the smallest and largest values in the dataset have a quantile of 0.0 and 1.0. The quantile is a very useful non-parametric (making no assumptions about the input) relative measure to specify a range. It can best be understood in terms of the cumulative frequency plot, see @ref{Histogram and Cumulative Frequency Plot}. The quantile of each horizontal axis value in the cumulative frequency plot is the vertical axis value associate with it. @end table @node Single value measurements, Generating histograms and cumulative frequency plots, Input to Statistics, Invoking aststatistics @subsubsection Single value measurements @table @option @item -n @itemx --number Print the number of all used (non-blank and in range) elements. @item --minimum Print the minimum value of all used elements. @item --maximum Print the maximum value of all used elements. @item --sum Print the sum of all used elements. @item -m @itemx --mean Print the mean (average) of all used elements. @item -t @itemx --std Print the standard deviation of all used elements. @item --mad Print the median absolute deviation (MAD) of all used elements. @item -E @itemx --median Print the median of all used elements. @item -u FLT[,FLT[,...]] @itemx --quantile=FLT[,FLT[,...]] Print the values at the given quantiles of the input dataset. Any number of quantiles may be given and one number will be printed for each. Values can either be written as a single number or as fractions, but must be between zero and one (inclusive). Hence, in effect @command{--quantile=0.25 --quantile=0.75} is equivalent to @option{--quantile=0.25,3/4}, or @option{-u1/4,3/4}. The returned value is one of the elements from the dataset. Taking @mymath{q} to be your desired quantile, and @mymath{N} to be the total number of used (non-blank and within the given range) elements, the returned value is at the following position in the sorted array: @mymath{round(q\times{}N}). @item --quantfunc=FLT[,FLT[,...]] Print the quantiles of the given values in the dataset. This option is the inverse of the @option{--quantile} and operates similarly except that the acceptable values are within the range of the dataset, not between 0 and 1. Formally it is known as the ``Quantile function''. Since the dataset is not continuous this function will find the nearest element of the dataset and use its position to estimate the quantile function. @item --quantofmean @cindex Quantile of the mean Print the quantile of the mean in the dataset. This is a very good measure of detecting skewness or outliers. The concept is used by programs like NoiseChisel to identify the presence of signal in a tile of the image (because signal in noise causes skewness). For example, take this simple array: @code{1 2 20 4 5 6 3}. The mean is @code{5.85}. The nearest element to this mean is @code{6} and the quantile of @code{6} in this distribution is 0.8333. Here is how we got to this: in the sorted dataset (@code{1 2 3 4 5 6 20}), @code{6} is the 5-th element (counting from zero, since a quantile of zero corresponds to the minimum, by definition) and the maximum is the 6-th element (again, counting from zero). So the quantile of the mean in this case is @mymath{5/6=0.8333}. In the example above, if we had @code{7} instead of @code{20} (which was an outlier), then the mean would be @code{4} and the quantile of the mean would be 0.5 (which by definition, is the quantile of the median), showing no outliers. As the number of elements increases, the mean itself is less affected by a small number of outliers, but skewness can be nicely identified by the quantile of the mean. @item -O @itemx --mode Print the mode of all used elements. The mode is found through the mirror distribution which is fully described in Appendix C of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. See that section for a full description. This mode calculation algorithm is non-parametric, so when the dataset is not large enough (larger than about 1000 elements usually), or does not have a clear mode it can fail. In such cases, this option will return a value of @code{nan} (for the floating point NaN value). As described in that paper, the easiest way to assess the quality of this mode calculation method is to use it's symmetricity (see @option{--modesym} below). A better way would be to use the @option{--mirror} option to generate the histogram and cumulative frequency tables for any given mirror value (the mode in this case) as a table. If you generate plots like those shown in Figure 21 of that paper, then your mode is accurate. @item --modequant Print the quantile of the mode. You can get the actual mode value from the @option{--mode} described above. In many cases, the absolute value of the mode is irrelevant, but its position within the distribution is important. In such cases, this option will become handy. @item --modesym Print the symmetricity of the calculated mode. See the description of @option{--mode} for more. This mode algorithm finds the mode based on how symmetric it is, so if the symmetricity returned by this option is too low, the mode is not too accurate. See Appendix C of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015} for a full description. In practice, symmetricity values larger than 0.2 are mostly good. @item --modesymvalue Print the value in the distribution where the mirror and input distributions are no longer symmetric, see @option{--mode} and Appendix C of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015} for more. @item --sigclip-std @item --sigclip-mad @itemx --sigclip-mean @itemx --sigclip-number @itemx --sigclip-median Calculate the desired statistic after applying @mymath{\sigma}-clipping (see @ref{Sigma clipping}, part of the tutorial @ref{Clipping outliers}). @mymath{\sigma}-clipping configuration is done with the @option{--sclipparams} option. @cindex Outlier Here is one scenario where this can be useful: assume you have a table and you would like to remove the rows that are outliers (not within the @mymath{\sigma}-clipping range). Let's assume your table is called @file{table.fits} and you only want to keep the rows that have a value in @code{COLUMN} within the @mymath{\sigma}-clipped range (to @mymath{3\sigma}, with a tolerance of 0.1). This command will return the @mymath{\sigma}-clipped median and standard deviation (used to define the range later). @example $ aststatistics table.fits -cCOLUMN --sclipparams=3,0.1 \ --sigclip-median --sigclip-std @end example @cindex GNU AWK You can then use the @option{--range} option of Table (see @ref{Table}) to select the proper rows. But for that, you need the actual starting and ending values of the range (@mymath{m\pm s\sigma}; where @mymath{m} is the median and @mymath{s} is the multiple of sigma to define an outlier). Therefore, the raw outputs of Statistics in the command above are not enough. To get the starting and ending values of the non-outlier range (and put a `@key{,}' between them, ready to be used in @option{--range}), pipe the result into AWK. But in AWK, we will also need the multiple of @mymath{\sigma}, so we will define it as a shell variable (@code{s}) before calling Statistics (note how @code{$s} is used two times now): @example $ s=3 $ aststatistics table.fits -cCOLUMN --sclipparams=$s,0.1 \ --sigclip-median --sigclip-std \ | awk '@{s='$s'; printf("%f,%f\n", $1-s*$2, $1+s*$2)@}' @end example To pass it onto Table, we will need to keep the printed output from the command above in another shell variable (@code{r}), not print it. In Bash, can do this by putting the whole statement within a @code{$()}: @example $ s=3 $ r=$(aststatistics table.fits -cCOLUMN --sclipparams=$s,0.1 \ --sigclip-median --sigclip-std \ | awk '@{s='$s'; printf("%f,%f\n", $1-s*$2, $1+s*$2)@}') $ echo $r # Just to confirm. @end example Now you can use Table with the @option{--range} option to only print the rows that have a value in @code{COLUMN} within the desired range: @example $ asttable table.fits --range=COLUMN,$r @end example To save the resulting table (that is clean of outliers) in another file (for example, named @file{cleaned.fits}, it can also have a @file{.txt} suffix), just add @option{--output=cleaned.fits} to the command above. @item --madclip-std @item --madclip-mad @itemx --madclip-mean @itemx --madclip-number @itemx --madclip-median Calculate the desired statistic after applying median absolute deviation (MAD) clipping (see @ref{MAD clipping}, part of the tutorial @ref{Clipping outliers}). MAD-clipping configuration is done with the @option{--mclipparams} option. This option behaves similarly to @option{--sigclip-*} options, read their description for usage examples. @end table @node Generating histograms and cumulative frequency plots, Fitting options, Single value measurements, Invoking aststatistics @subsubsection Generating histograms and cumulative freq. The list of options below are for those statistical operations that output more than one value. So while they can be called together in one run, their outputs will be distinct (each one's output will usually be printed in more than one line). @table @option @item -A @itemx --asciihist Print an ASCII histogram of the usable values within the input dataset along with some basic information like the example below (from the UVUDF catalog@footnote{@url{https://asd.gsfc.nasa.gov/UVUDF/uvudf_rafelski_2015.fits.gz}}). The width and height of the histogram (in units of character widths and heights on your command-line terminal) can be set with the @option{--numasciibins} (for the width) and @option{--asciiheight} options. For a full description of the histogram, please see @ref{Histogram and Cumulative Frequency Plot}. An ASCII plot is certainly very crude and cannot be used in any publication, but it is very useful for getting a general feeling of the input dataset very fast and easily on the command-line without having to take your hands off the keyboard (which is a major distraction!). If you want to try it out, you can write it all in one line and ignore the @key{\} and extra spaces. @example $ aststatistics uvudf_rafelski_2015.fits.gz --hdu=1 \ --column=MAG_F160W --lessthan=40 \ --asciihist --numasciibins=55 ASCII Histogram: Number: 8593 Y: (linear: 0 to 660) X: (linear: 17.7735 -- 31.4679, in 55 bins) | **** | ***** | ****** | ******** | ********* | *********** | ************** | ***************** | *********************** | ******************************** |*** *************************************************** |------------------------------------------------------- @end example @item --asciicfp Print the cumulative frequency plot of the usable elements in the input dataset. Please see descriptions under @option{--asciihist} for more, the example below is from the same input table as that example. To better understand the cumulative frequency plot, please see @ref{Histogram and Cumulative Frequency Plot}. @example $ aststatistics uvudf_rafelski_2015.fits.gz --hdu=1 \ --column=MAG_F160W --lessthan=40 \ --asciicfp --numasciibins=55 ASCII Cumulative frequency plot: Y: (linear: 0 to 8593) X: (linear: 17.7735 -- 31.4679, in 55 bins) | ******* | ********** | *********** | ************* | ************** | *************** | ***************** | ******************* | *********************** | ****************************** |******************************************************* |------------------------------------------------------- @end example @item -H @itemx --histogram Save the histogram of the usable values in the input dataset into a table. The first column is the value at the center of the bin and the second is the number of points in that bin. If the @option{--cumulative} option is also called with this option in a run, then the table will have three columns (the third is the cumulative frequency plot). Through the @option{--numbins}, @option{--onebinstart}, or @option{--manualbinrange}, you can modify the first column values and with @option{--normalize} and @option{--maxbinone} you can modify the second columns. See below for the description of each. By default (when no @option{--output} is specified) a plain text table will be created, see @ref{Gnuastro text table format}. If a FITS name is specified, you can use the common option @option{--tableformat} to have it as a FITS ASCII or FITS binary format, see @ref{Common options}. This table can then be fed into your favorite plotting tool and get a much more clean and nice histogram than what the raw command-line can offer you (with the @option{--asciihist} option). @item --histogram2d Save the 2D histogram of two input columns into an output file, see @ref{2D Histograms}. The output will have three columns: the first two are the coordinates of each box's center in the first and second dimensions/columns. The third will be number of input points that fall within that box. @item -C @itemx --cumulative Save the cumulative frequency plot of the usable values in the input dataset into a table, similar to @option{--histogram}. @item --madclip Do median absolute deviation (MAD) clipping on the usable pixels of the input dataset. See @ref{MAD clipping} for a description on MAD-clipping and @ref{Clipping outliers} for a complete tutorial on clipping of outliers. The MAD-clipping parameters can be set through the @option{--mclipparams} option (see below). @item -s @itemx --sigmaclip Do @mymath{\sigma}-clipping on the usable pixels of the input dataset. See @ref{Sigma clipping} for a full description on @mymath{\sigma}-clipping and @ref{Clipping outliers} for a complete tutorial on clipping of outliers. The @mymath{\sigma}-clipping parameters can be set through the @option{--sclipparams} option (see below). @item --mirror=FLT Make a histogram and cumulative frequency plot of the mirror distribution for the given dataset when the mirror is located at the value to this option. The mirror distribution is fully described in Appendix C of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015} and currently it is only used to calculate the mode (see @option{--mode}). Just note that the mirror distribution is a discrete distribution like the input, so while you may give any number as the value to this option, the actual mirror value is the closest number in the input dataset to this value. If the two numbers are different, Statistics will warn you of the actual mirror value used. This option will make a table as output. Depending on your selected name for the output, it will be either a FITS table or a plain text table (which is the default). It contains three columns: the first is the center of the bins, the second is the histogram (with the largest value set to 1) and the third is the normalized cumulative frequency plot of the mirror distribution. The bins will be positioned such that the mode is on the starting interval of one of the bins to make it symmetric around the mirror. With this output file and the input histogram (that you can generate in another run of Statistics, using the @option{--onebinvalue}), it is possible to make plots like Figure 21 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. @end table The list of options below allow customization of the histogram and cumulative frequency plots (for the @option{--histogram}, @option{--cumulative}, @option{--asciihist}, and @option{--asciicfp} options). @table @option @item --numbins The number of bins (rows) to use in the histogram and the cumulative frequency plot tables (outputs of @option{--histogram} and @option{--cumulative}). @item --numasciibins The number of bins (characters) to use in the ASCII plots when printing the histogram and the cumulative frequency plot (outputs of @option{--asciihist} and @option{--asciicfp}). @item --asciiheight The number of lines to use when printing the ASCII histogram and cumulative frequency plot on the command-line (outputs of @option{--asciihist} and @option{--asciicfp}). @item -n @itemx --normalize Normalize the histogram or cumulative frequency plot tables (outputs of @option{--histogram} and @option{--cumulative}). For a histogram, the sum of all bins will become one and for a cumulative frequency plot the last bin value will be one. @item --maxbinone Divide all the histogram values by the maximum bin value so it becomes one and the rest are similarly scaled. In some situations (for example, if you want to plot the histogram and cumulative frequency plot in one plot) this can be very useful. @item --onebinstart=FLT Make sure that one bin starts with the value to this option. In practice, this will shift the bins used to find the histogram and cumulative frequency plot such that one bin's lower interval becomes this value. For example, when a histogram range includes negative and positive values and zero has a special significance in your analysis, then zero might fall somewhere in one bin. As a result that bin will have counts of positive and negative. By setting @option{--onebinstart=0}, you can make sure that one bin will only count negative values in the vicinity of zero and the next bin will only count positive ones in that vicinity. @cindex NaN Note that by default, the first row of the histogram and cumulative frequency plot show the central values of each bin. So in the example above you will not see the 0.000 in the first column, you will see two symmetric values. If the value is not within the usable input range, this option will be ignored. When it is, this option is the last operation before the bins are finalized, therefore it has a higher priority than options like @option{--manualbinrange}. @item --manualbinrange Use the values given to the @option{--greaterequal} and @option{--lessthan} to define the range of all bin-based calculations like the histogram. This option itself does not take any value, but just tells the program to use the values of those two options instead of the minimum and maximum values of a plot. If any of the two options are not given, then the minimum or maximum will be used respectively. Therefore, if none of them are called calling this option is redundant. The @option{--onebinstart} option has a higher priority than this option. In other words, @option{--onebinstart} takes effect after the range has been finalized and the initial bins have been defined, therefore it has the power to (possibly) shift the bins. If you want to manually set the range of the bins @emph{and} have one bin on a special value, it is thus better to avoid @option{--onebinstart}. @item --numbins2=INT Similar to @option{--numbins}, but for the second column when a 2D histogram is requested, see @option{--histogram2d}. @item --greaterequal2=FLT Similar to @option{--greaterequal}, but for the second column when a 2D histogram is requested, see @option{--histogram2d}. @item --lessthan2=FLT Similar to @option{--lessthan}, but for the second column when a 2D histogram is requested, see @option{--histogram2d}. @item --onebinstart2=FLT Similar to @option{--onebinstart}, but for the second column when a 2D histogram is requested, see @option{--histogram2d}. @end table @node Fitting options, Contour options, Generating histograms and cumulative frequency plots, Invoking aststatistics @subsubsection Fitting options With the options below, you can customize the least squares fitting features of Statistics. For a tutorial of the usage of least squares fitting in Statistics, please see @ref{Least squares fitting}. Here, we will just review the details of each option. To activate least squares fitting in Statistics, it is necessary to use the @option{--fit} option to specify the type of fit you want to do. See the description of @option{--fit} for the various available fitting models. The fitting models that account for weights require three input columns, while the non-weighted ones only take two input columns. Here is a summary of the input columns: @enumerate @item The first input column is assumed to be the independent variable (on the horizontal axis of a plot, or @mymath{X} in the equations of each fit). @item The second input column is assumed to be the measured value (on the vertical axis of a plot, or @mymath{Y} in the equation above). @item The third input column is only for fittings with a weight. It is assumed to be the ``weight'' of the measurement column. The nature of the ``weight'' can be set with the @option{--fitweight} option, for example, if you have the standard deviation of the error in @mymath{Y}, you can use @option{--fitweight=std} (which is the default, so unless the default value has been changed, you will not need to set this). @end enumerate If three columns are given to a model without weight, or two columns are given to a model that requires weights, Statistics will abort and inform you. Below you can see an example of fitting with the same linear model, once weighted and once without weights. @example $ aststatistics table.fits --column=X,Y --fit=linear $ aststatistics table.fits --column=X,Y,Yerr --fit=linear-weighted @end example The output of the fitting can be in three modes listed below. For a complete example, see the tutorial in @ref{Least squares fitting}). @table @asis @item Human friendly format By default (for example, the commands above) the output is an elaborate description of the model parameters. For example, @mymath{c_0} and @mymath{c_1} in the linear model (@mymath{Y=c_0+c_1X}). Their covariance matrix and the reduced @mymath{\chi^2} of the fit are also printed on the output. @item Raw numbers If you don't need the human friendly components of the output (which are annoying when you want to parse the outputs in some scenarios), you can use @option{--quiet} option. Only the raw output numbers will be printed. @item Estimate on a custom X column Through the @option{--fitestimate} option, you can specify an independent table column to estimate the fit (it can also take a single value). See the description of this option for more. @end table @table @option @item -f STR @itemx --fit=STR The name of the fitting method to use. They are based on the @url{https://www.gnu.org/software/gsl/doc/html/lls.html, linear} and @url{https://www.gnu.org/software/gsl/doc/html/nls.html, nonlinear} least-squares fitting functions of the GNU Scientific Library (GSL). @table @code @item linear @mymath{Y=c_0+c_1X} @item linear-weighted @mymath{Y=c_0+c_1X}; accounting for ``weights'' in @mymath{Y}. @item linear-no-constant @mymath{Y=c_1X}. @item linear-no-constant-weighted @mymath{Y=c_1X}; accounting for ``weights'' in @mymath{Y}. @item polynomial @mymath{Y=c_0+c_1X+c_2X^2+\cdots+c_nX^n}; the maximum required power (@mymath{n}) is specified by @option{--fitmaxpower}. @item polynomial-weighted @mymath{Y=c_0+c_1X+c_2X^2+\cdots+c_nX^n}; accounting for ``weights'' in @mymath{Y}. The maximum required power (@mymath{n}) is specified by @option{--fitmaxpower}. @item polynomial-robust @cindex Robust polynomial fit @cindex Polynomial fit (robust) @mymath{Y=c_0+c_1X+c_2X^2+\cdots+c_nX^n}; rejects outliers. The function to use for outlier removal can be specified with the @option{--fitrobust} option described below. This model doesn't take weights since they are calculated internally based on the outlier removal function (requires two input columns). The maximum required power (@mymath{n}) is specified by @option{--fitmaxpower}. For a comprehensive review of ``robust'' fitting and the available functions, please see the @url{https://www.gnu.org/software/gsl/doc/html/lls.html#robust-linear-regression, Robust linear regression} section of the GNU Scientific Library. @end table @item --fitweight=STR The nature of the ``weight'' column (when a weight is necessary for the model). It can take one of the following values: @table @code @item std Standard deviation of each @mymath{Y} axis measurement: this is the usual ``error'' associated with a measurement (for example, in @ref{MakeCatalog}) and is the default value to this option. @item var Variance of each @mymath{Y} axis measurement. Assuming a Gaussian distribution with standard deviation @mymath{\sigma}, the variance is @mymath{\sigma^2}. @item inv-var Inverse variance of each @mymath{Y} axis measurement. Assuming a Gaussian distribution with standard deviation @mymath{\sigma}, the variance is @mymath{1/\sigma^2}. @end table @item --fitmaxpower=INT The maximum power (an integer) in a polynomial (@mymath{n} in @mymath{Y=c_0+c_1X+c_2X^2+\cdots+c_nX^n}). This is only relevant when one of the polynomial models is given to @option{--fit}. The fit will return @mymath{n+1} coefficients. @item --fitrobust=STR The function for rejecting outliers in the @code{polynomial-robust} fitting model. For a comprehensive review of ``robust'' fitting and the available functions, please see the @url{https://www.gnu.org/software/gsl/doc/html/lls.html#robust-linear-regression, Robust linear regression} section of the GNU Scientific Library. This function can take the following values: @table @code @item bisquare @cindex Tukey’s biweight (bisquare) function @cindex Biweight function of Tukey @cindex Bisquare function of Tukey Tukey’s biweight (bisquare) function, this is the default function. According to the GSL manual, this is a good general purpose weight function. @item cauchy @cindex Cauchy's function (robust weight) @cindex Lorentzian function (robust weight) Cauchy’s function (also known as the Lorentzian function). It doesn't guarantee a unique solution, so it should be used with care. @item fair @cindex Fair function (robust weight) The fair function. It guarantees a unique solution and has continuous derivatives to three orders. @item huber @cindex Huber function (robust weight) Huber's @mymath{\rho} function. This is also a good general purpose weight function for rejecting outliers, but can cause difficulty in some special scenarios. @item ols Ordinary Least Squares (OLS) solution with a constant weight of unity. @item welsch @cindex Welsch function (robust weight) Welsch function which is useful when the residuals follow an exponential distribution. @end table @item --fitestimate=STR/FLT Estimate the fitted function at a single point or a complete column of points. The input @mymath{X} axis positions to estimate the function can be specified in the following ways: @itemize @item A real number: the fitted function will be estimated at that @mymath{X} position and the corresponding @mymath{Y} and its error will be printed to standard output. @item @code{self}: in this mode, the same X axis column that was used in the fit will be used for estimating the fitted function. This can be useful to visually/easily check the fit, see @ref{Least squares fitting}. @item A file name: If the value is none of the above, Statistics expects it to be a file name containing a table. If the file is a FITS file, the HDU containing the table should be specified with the @option{--fitestimatehdu} option. The column of the table to use for the @mymath{X} axis points should be specified with the @option{--fitestimatecol} option. @end itemize The output in this mode can be customized in the following ways: @itemize @item If a single floating point value is given @option{--fitestimate}, the fitted function will be estimated on that point and printed to standard output. @item When nothing is given to @option{--output}, the independent column and the estimated values and errors are printed on the standard output. @item If a file name is given to @option{--output}, the estimated table above is saved in that file. It can have any of the formats in @ref{Recognized table formats}. As a FITS file, all the fit outputs (coefficients, covariance matrix and reduced @mymath{\chi^2}) are kept as FITS keywords in the same HDU of the estimated table. For a complete example, see @ref{Least squares fitting}. When the covariance matrix (and thus the @mymath{\chi^2}) cannot be calculated (for example if you only have two rows!), the printed values on the terminal will be NaN. However, the FITS standard does not allow NaN values in keyword values! Therefore, when writing the @mymath{\chi^2} and covariance matrix elements into the output FITS keywords, the largest value of the 64-bit floating point type will be written: @mymath{1.79769313486232\times10^{308}}; see @ref{Numeric data types}. @item When @option{--quiet} is given with @option{--fitestimate}, the fitted parameters are no longer printed on the standard output; they are available as FITS keywords in the file given to @option{--output}. @end itemize @item --fitestimatehdu=STR/INT HDU name or counter (counting from zero) that contains the table to be used for the estimating the fitted function over many points through @option{--fitestimate}. For more on selecting a HDU, see the description of @option{--hdu} in @ref{Input output options}. @item --fitestimatecol=STR/INT Column name or counter (counting from one) that contains the table to be used for the estimating the fitted function over many points through @option{--fitestimate}. See @ref{Selecting table columns}. @end table @node Contour options, Statistics on tiles, Fitting options, Invoking aststatistics @subsubsection Contour options Contours are useful to highlight the 2D shape of a certain flux level over an image. To derive contours in Statistics, you can use the option below: @table @option @item -R FLT[,FLT[,FLT...]] @itemx --contour=FLT[,FLT[,FLT...]] @cindex Contour @cindex Plot: contour Write the contours for the requested levels in a file ending with @file{_contour.txt}. It will have three columns: the first two are the coordinates of each point and the third is the level it belongs to (one of the input values). Each disconnected contour region will be separated by a blank line. This is the requested format for adding contours with PGFPlots in @LaTeX{}. If any other format can be useful for your work please let us know so we can add it. If the image has World Coordinate System information, the written coordinates will be in RA and Dec, otherwise, they will be in pixel coordinates. Note that currently, this is a very crude/simple implementation, please let us know if you find problematic situations so we can fix it. @end table @node Statistics on tiles, , Contour options, Invoking aststatistics @subsubsection Statistics on tiles All the options described until now were from the first class of operations discussed above: those that treat the whole dataset as one. However, it often happens that the relative position of the dataset elements over the dataset is significant. For example, you do not want one median value for the whole input image, you want to know how the median changes over the image. For such operations, the input has to be tessellated (see @ref{Tessellation}). Thus this class of options cannot currently be called along with the options above in one run of Statistics. @table @option @item -t @itemx --ontile Do the respective single-valued calculation over one tile of the input dataset, not the whole dataset. This option must be called with at least one of the single valued options discussed above (for example, @option{--mean} or @option{--quantile}). The output will be a file in the same format as the input. If the @option{--oneelempertile} option is called, then one element/pixel will be used for each tile (see @ref{Processing options}). Otherwise, the output will have the same size as the input, but each element will have the value corresponding to that tile's value. If multiple single valued operations are called, then for each operation there will be one extension in the output FITS file. @item -y @itemx --sky Estimate the Sky value on each tile as fully described in @ref{Quantifying signal in a tile}. As described in that section, several options are necessary to configure the Sky estimation which are listed below. The output file will have two extensions: the first is the Sky value and the second is the Sky standard deviation on each tile. Similar to @option{--ontile}, if the @option{--oneelempertile} option is called, then one element/pixel will be used for each tile (see @ref{Processing options}). @end table The parameters for estimating the sky value can be set with the following options, except for the @option{--sclipparams} option (which is also used by the @option{--sigmaclip}), the rest are only used for the Sky value estimation. @table @option @item -k=FITS @itemx --kernel=FITS File name of kernel to help in estimating the significance of signal in a tile, see @ref{Quantifying signal in a tile}. @item --khdu=STR Kernel HDU to help in estimating the significance of signal in a tile, see @ref{Quantifying signal in a tile}. @item --meanmedqdiff=FLT The maximum acceptable distance between the quantiles of the mean and median, see @ref{Quantifying signal in a tile}. The initial Sky and its standard deviation estimates are measured on tiles where the quantiles of their mean and median are less distant than the value given to this option. For example, @option{--meanmedqdiff=0.01} means that only tiles where the mean's quantile is between 0.49 and 0.51 (recall that the median's quantile is 0.5) will be used. @item --sclipparams=FLT,FLT The @mymath{\sigma}-clipping parameters, see @ref{Sigma clipping}. This option takes two values which are separated by a comma (@key{,}). Each value can either be written as a single number or as a fraction of two numbers (for example, @code{3,1/10}). The first value to this option is the multiple of @mymath{\sigma} that will be clipped (@mymath{\alpha} in that section). The second value is the exit criteria. If it is less than 1, then it is interpreted as tolerance and if it is larger than one it is a specific number. Hence, in the latter case the value must be an integer. @item --mclipparams=FLT,FLT The MAD-clipping parameters. This is very similar to @option{--sclipparams} above, see there for more. @item --outliersclip=FLT,FLT @mymath{\sigma}-clipping parameters for the outlier rejection of the Sky value (similar to @option{--sclipparams}). Outlier rejection is useful when the dataset contains a large and diffuse (almost flat within each tile) signal. The flatness of the profile will cause it to successfully pass the mean-median quantile difference test, so we will need to use the distribution of successful tiles for removing these false positive. For more, see the latter half of @ref{Quantifying signal in a tile}. @item --outliernumngb=INT Number of neighboring tiles to use for outlier rejection (mostly the wings of bright stars or galaxies). If this option is given a value of zero, no outlier rejection will take place. For more see the latter half of @ref{Quantifying signal in a tile}. @item --outliersigma=FLT Multiple of sigma to define an outlier in the Sky value estimation. If this option is given a value of zero, no outlier rejection will take place. For more see @option{--outliersclip} and the latter half of @ref{Quantifying signal in a tile}. @item --smoothwidth=INT Width of a flat kernel to convolve the interpolated tile values. Tile interpolation is done using the median of the @option{--interpnumngb} neighbors of each tile (see @ref{Processing options}). If this option is given a value of zero or one, no smoothing will be done. Without smoothing, strong boundaries will probably be created between the values estimated for each tile. It is thus good to smooth the interpolated image so strong discontinuities do not show up in the final Sky values. The smoothing is done through convolution (see @ref{Convolution process}) with a flat kernel, so the value to this option must be an odd number. @item --ignoreblankintiles Do not set the input's blank pixels to blank in the tiled outputs (for example, Sky and Sky standard deviation extensions of the output). This is only applicable when the tiled output has the same size as the input, in other words, when @option{--oneelempertile} is not called. By default, blank values in the input (commonly on the edges which are outside the survey/field area) will be set to blank in the tiled outputs also. But in other scenarios this default behavior is not desired; for example, if you have masked something in the input, but want the tiled output under that also. @item --checksky Create a multi-extension FITS file showing the steps that were used to estimate the Sky value over the input, see @ref{Quantifying signal in a tile}. The file will have two extensions for each step (one for the Sky and one for the Sky standard deviation). @item --checkskynointerp Similar to @code{--checksky}, but it will stop as soon as the outlier tiles have been identified and before it interpolates the values to cover the whole image. This is useful when you want the good tile values before interpolation, and don't want to slow down your pipeline with the extra computing that interpolation and smoothing require. @end table @node NoiseChisel, Segment, Statistics, Data analysis @section NoiseChisel @cindex Labeling @cindex Detection @cindex Segmentation Once instrumental signatures are removed from the raw data (image) in the initial reduction process (see @ref{Data manipulation}). You are naturally eager to start answering the scientific questions that motivated the data collection in the first place. However, the raw dataset/image is just an array of values/pixels, that is all! These raw values cannot directly be used to answer your scientific questions; for example, ``how many galaxies are there in the image?'' and ``What is their magnitude?''. The first high-level step your analysis will therefore be to classify, or label, the dataset elements (pixels) into two classes: 1) Noise, where random effects are the major contributor to the value, and 2) Signal, where non-random factors (for example, light from a distant galaxy) are present. This classification of the elements in a dataset is formally known as @emph{detection}. In an observational/experimental dataset, signal is always buried in noise: only mock/simulated datasets are free of noise. Therefore detection, or the process of separating signal from noise, determines the number of objects you study and the accuracy of any higher-level measurement you do on them. Detection is thus the most important step of any analysis and is not trivial. In particular, the most scientifically interesting astronomical targets are faint, can have a large variety of morphologies, along with a large distribution in magnitude and size. Therefore when noise is significant, proper detection of your targets is a uniquely decisive step in your final scientific analysis/result. @cindex Erosion NoiseChisel is Gnuastro's program for detection of targets that do not have a sharp border (almost all astronomical objects). When the targets have sharp edges/borders (for example, cells in biological imaging), a simple threshold is enough to separate them from noise and each other (if they are not touching). To detect such sharp-edged targets, you can use Gnuastro's Arithmetic program in a command like below (assuming the threshold is @code{100}, see @ref{Arithmetic}): @example $ astarithmetic in.fits 100 gt 2 connected-components @end example Since almost no astronomical target has such sharp edges, we need a more advanced detection methodology. NoiseChisel uses a new noise-based paradigm for detection of very extended and diffuse targets that are drowned deeply in the ocean of noise. It was initially introduced in Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015} and improvements after the first four were published in Akhlaghi @url{https://arxiv.org/abs/1909.11230,2019}. Please take the time to go through these papers to most effectively understand the need of NoiseChisel and how best to use it. The name of NoiseChisel is derived from the first thing it does after thresholding the dataset: to erode it. In mathematical morphology, erosion on pixels can be pictured as carving-off boundary pixels. Hence, what NoiseChisel does is similar to what a wood chisel or stone chisel do. It is just not a hardware, but a software. In fact, looking at it as a chisel and your dataset as a solid cube of rock will greatly help in effectively understanding and optimally using it: with NoiseChisel you literally carve your targets out of the noise. Try running it with the @option{--checkdetection} option, and open the temporary output as a multi-extension cube, to see each step of the carving process on your input dataset (see @ref{Viewing FITS file contents with DS9 or TOPCAT}). @cindex Segmentation NoiseChisel's primary output is a binary detection map with the same size as the input but its pixels only have two values: 0 (background) and 1 (foreground). Pixels that do not harbor any detected signal (noise) are given a label (or value) of zero and those with a value of 1 have been identified as hosting signal. Segmentation is the process of classifying the signal into higher-level constructs. For example, if you have two separate galaxies in one image, NoiseChisel will give a value of 1 to the pixels of both (each forming an ``island'' of touching foreground pixels). After segmentation, the connected foreground pixels will get separate labels, enabling you to study them individually. NoiseChisel is only focused on detection (separating signal from noise), to @emph{segment} the signal (into separate galaxies for example), Gnuastro has a separate specialized program @ref{Segment}. NoiseChisel's output can be directly/readily fed into Segment. For more on NoiseChisel's output format and its benefits (especially in conjunction with @ref{Segment} and later @ref{MakeCatalog}), please see Akhlaghi @url{https://arxiv.org/abs/1611.06387,2016}. Just note that when that paper was published, Segment was not yet spun-off into a separate program, and NoiseChisel done both detection and segmentation. NoiseChisel's output is designed to be generic enough to be easily used in any higher-level analysis. If your targets are not touching after running NoiseChisel and you are not interested in their sub-structure, you do not need the Segment program at all. You can ask NoiseChisel to find the connected pixels in the output with the @option{--label} option. In this case, the output will not be a binary image any more, the signal will have counters/labels starting from 1 for each connected group of pixels. You can then directly feed NoiseChisel's output into MakeCatalog for measurements over the detections and the production of a catalog (see @ref{MakeCatalog}). Thanks to the published papers mentioned above, there is no need to provide a more complete introduction to NoiseChisel in this book. However, published papers cannot be updated any more, but the software has evolved/changed. The changes since publication are documented in @ref{NoiseChisel changes after publication}. In @ref{Invoking astnoisechisel}, the details of running NoiseChisel and its options are discussed. As discussed above, detection is one of the most important steps for your scientific result. It is therefore very important to obtain a good understanding of NoiseChisel (and afterwards @ref{Segment} and @ref{MakeCatalog}). We strongly recommend reviewing two tutorials of @ref{General program usage tutorial} and @ref{Detecting large extended targets}. They are designed to show how to most effectively use NoiseChisel for the detection of small faint objects and large extended objects. In the meantime, they also show the modular principle behind Gnuastro's programs and how they are built to complement, and build upon, each other. @ref{General program usage tutorial} culminates in using NoiseChisel to detect galaxies and use its outputs to find the galaxy colors. Defining colors is a very common process in most science-cases. Therefore it is also recommended to (patiently) complete that tutorial for optimal usage of NoiseChisel in conjunction with all the other Gnuastro programs. @ref{Detecting large extended targets} shows you can optimize NoiseChisel's settings for very extended objects to successfully carve out to signal-to-noise ratio levels of below 1/10. After going through those tutorials, play a little with the settings (in the order presented in the paper and @ref{Invoking astnoisechisel}) on a dataset you are familiar with and inspect all the check images (options starting with @option{--check}) to see the effect of each parameter. Below, in @ref{Invoking astnoisechisel}, we will review NoiseChisel's input, detection, and output options in @ref{NoiseChisel input}, @ref{Detection options}, and @ref{NoiseChisel output}. If you have used NoiseChisel within your research, please run it with @option{--cite} to list the papers you should cite and how to acknowledge its funding sources. @menu * NoiseChisel changes after publication:: Updates since published papers. * Invoking astnoisechisel:: Options and arguments for NoiseChisel. @end menu @node NoiseChisel changes after publication, Invoking astnoisechisel, NoiseChisel, NoiseChisel @subsection NoiseChisel changes after publication NoiseChisel was initially introduced in Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015} and updates after the first four years were published in Akhlaghi @url{https://arxiv.org/abs/1909.11230,2019}. To help in understanding how it works, those papers have many figures showing every step on multiple mock and real examples. We recommended to read these papers for a good understanding of what it does and how each parameter influences the output. However, the papers cannot be updated anymore, but NoiseChisel has evolved (and will continue to do so): better algorithms or steps have been found and implemented and some options have been added, removed or changed behavior. This book is thus the final and definitive guide to NoiseChisel. The aim of this section is to make the transition from the papers above to the installed version on your system, as smooth as possible with the list below. For a more detailed list of changes in each Gnuastro version, please see the @file{NEWS} file@footnote{The @file{NEWS} file is present in the released Gnuastro tarball, see @ref{Release tarball}.}. @itemize @item An improved outlier rejection for identifying tiles without any signal has been implemented in the quantile-threshold phase: Prior to version 0.14, outliers were defined globally: the distribution of all tiles with an acceptable @option{--meanmedqdiff} was inspected and outliers were found and rejected. However, this caused problems when there are strong gradients over the image (for example, an image prior to flat-fielding, or in the presence of a large foreground galaxy). In these cases, the faint wings of galaxies/stars could be mistakenly identified as Sky (leaving a footprint of the object on the Sky output) and wrongly subtracted. It was possible to play with the parameters to correct this for that particular dataset, but that was frustrating. Therefore from version 0.14, instead of finding outliers from the full tile distribution, we now measure the @emph{slope} of the tile's nearby tiles and find outliers locally. Three options have been added to configure this part of NoiseChisel: @option{--outliernumngb}, @option{--outliersclip} and @option{--outliersigma}. For more on the local outlier-by-distance algorithm and the definition of @emph{slope} mentioned above, see @ref{Quantifying signal in a tile}. In our tests, this gave a much improved estimate of the quantile thresholds and final Sky values with default values. @end itemize @node Invoking astnoisechisel, , NoiseChisel changes after publication, NoiseChisel @subsection Invoking NoiseChisel NoiseChisel will detect signal in noise producing a multi-extension dataset containing a binary detection map which is the same size as the input. Its output can be readily used for input into @ref{Segment}, for higher-level segmentation, or @ref{MakeCatalog} to do measurements and generate a catalog. The executable name is @file{astnoisechisel} with the following general template @example $ astnoisechisel [OPTION ...] InputImage.fits @end example @noindent One line examples: @example ## Detect signal in input.fits. $ astnoisechisel input.fits ## Inspect all the detection steps after changing a parameter. $ astnoisechisel input.fits --qthresh=0.4 --checkdetection ## Detect signal assuming input has 4 amplifier channels along first ## dimension and 1 along the second. Also set the regular tile size ## to 100 along both dimensions: $ astnoisechisel --numchannels=4,1 --tilesize=100,100 input.fits @end example @cindex Gaussian @noindent If NoiseChisel is to do processing (for example, you do not want to get help, or see the values to each input parameter), an input image should be provided with the recognized extensions (see @ref{Arguments}). NoiseChisel shares a large set of common operations with other Gnuastro programs, mainly regarding input/output, general processing steps, and general operating modes. To help in a unified experience between all of Gnuastro's programs, these operations have the same command-line options, see @ref{Common options} for a full list/description (they are not repeated here). As in all Gnuastro programs, options can also be given to NoiseChisel in configuration files. For a thorough description on Gnuastro's configuration file parsing, please see @ref{Configuration files}. All of NoiseChisel's options with a short description are also always available on the command-line with the @option{--help} option, see @ref{Getting help}. To inspect the option values without actually running NoiseChisel, append your command with @option{--printparams} (or @option{-P}). NoiseChisel's input image may contain blank elements (see @ref{Blank pixels}). Blank elements will be ignored in all steps of NoiseChisel. Hence if your dataset has bad pixels which should be masked with a mask image, please use Gnuastro's @ref{Arithmetic} program (in particular its @command{where} operator) to convert those pixels to blank pixels before running NoiseChisel. Gnuastro's Arithmetic program has bitwise operators helping you select specific kinds of bad-pixels when necessary. A convolution kernel can also be optionally given. If a value (file name) is given to @option{--kernel} on the command-line or in a configuration file (see @ref{Configuration files}), then that file will be used to convolve the image prior to thresholding. Otherwise a default kernel will be used. For a 2D image, the default kernel is a 2D Gaussian with a FWHM of 2 pixels truncated at 5 times the FWHM. This choice of the default kernel is discussed in Section 3.1.1 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. For a 3D cube, it is a Gaussian with FWHM of 1.5 pixels in the first two dimensions and 0.75 pixels in the third dimension. See @ref{Convolution kernel} for kernel related options. Passing @code{none} to @option{--kernel} will disable convolution. On the other hand, through the @option{--convolved} option, you may provide an already convolved image, see descriptions below for more. NoiseChisel defines two tessellations over the input (see @ref{Tessellation}). This enables it to deal with possible gradients in the input dataset and also significantly improve speed by processing each tile on different threads simultaneously. Tessellation related options are discussed in @ref{Processing options}. In particular, NoiseChisel uses two tessellations (with everything between them identical except the tile sizes): a fine-grained one with smaller tiles (used in thresholding and Sky value estimations) and another with larger tiles which is used for pseudo-detections over non-detected regions of the image. The common Tessellation options described in @ref{Processing options} define all parameters of both tessellations. The large tile size for the latter tessellation is set through the @option{--largetilesize} option. To inspect the tessellations on your input dataset, run NoiseChisel with @option{--checktiles}. @cartouche @noindent @strong{Usage TIP:} Frequently use the options starting with @option{--check}. Since the noise properties differ between different datasets, you can often play with the parameters/options for a better result than the default parameters. You can start with @option{--checkdetection} for the main steps. For the full list of NoiseChisel's checking options please run: @example $ astnoisechisel --help | grep check @end example @end cartouche @cartouche @noindent @strong{Not detecting wings of bright galaxies:} In such cases, probably the best solution is to increase @option{--outliernumngb} (to reject tiles that are affected by very flat diffuse signal). For more, see @ref{Quantifying signal in a tile}. @end cartouche When working on 3D datacubes, the tessellation options need three values and updating them every time can be annoying/buggy. To simplify the job, NoiseChisel also installs a @file{astnoisechisel-3d.conf} configuration file (see @ref{Configuration files}). You can use this for default values on datacubes. For example, if you installed Gnuastro with the prefix @file{/usr/local} (the default location, see @ref{Installation directory}), you can benefit from this configuration file by running NoiseChisel like the example below. @example $ astnoisechisel cube.fits \ --config=/usr/local/etc/astnoisechisel-3d.conf @end example @cindex Shell alias @cindex Alias (shell) @cindex Shell startup @cindex Startup, shell To further simplify the process, you can define a shell alias in any startup file (for example, @file{~/.bashrc}, see @ref{Installation directory}). Assuming that you installed Gnuastro in @file{/usr/local}, you can add this line to the startup file (you may put it all in one line, it is broken into two lines here for fitting within page limits). @example alias astnoisechisel-3d="astnoisechisel \ --config=/usr/local/etc/astnoisechisel-3d.conf" @end example @noindent Using this alias, you can call NoiseChisel with the name @command{astnoisechisel-3d} (instead of @command{astnoisechisel}). It will automatically load the 3D specific configuration file first, and then parse any other arguments, options or configuration files. You can change the default values in this 3D configuration file by calling them on the command-line as you do with @command{astnoisechisel}@footnote{Recall that for single-invocation options, the last command-line invocation takes precedence over all previous invocations (including those in the 3D configuration file). See the description of @option{--config} in @ref{Operating mode options}.}. For example: @example $ astnoisechisel-3d --numchannels=3,3,1 cube.fits @end example In the sections below, NoiseChisel's options are classified into three general classes to help in easy navigation. @ref{NoiseChisel input} mainly discusses the options relating to input and those that are shared in both detection and segmentation. Options to configure the detection are described in @ref{Detection options} and @ref{Segmentation options} we discuss how you can fine-tune the segmentation of the detections. Finally, in @ref{NoiseChisel output} the format of NoiseChisel's output is discussed. The order of options here follow the same logical order that the respective action takes place within NoiseChisel (note that the output of @option{--help} is sorted alphabetically). Below, we will discuss NoiseChisel's options, classified into two general classes, to help in easy navigation. @ref{NoiseChisel input} mainly discusses the basic options relating to inputs and prior to the detection process detection. Afterwards, @ref{Detection options} fully describes every configuration parameter (option) related to detection and how they affect the final result. The order of options in this section follow the logical order within NoiseChisel. On first reading (while you are still new to NoiseChisel), it is therefore strongly recommended to read the options in the given order below. The output of @option{--printparams} (or @option{-P}) also has this order. However, the output of @option{--help} is sorted alphabetically. Finally, in @ref{NoiseChisel output} the format of NoiseChisel's output is discussed. @menu * NoiseChisel input:: NoiseChisel's input options. * Detection options:: Configure detection in NoiseChisel. * NoiseChisel output:: NoiseChisel's output options and format. @end menu @node NoiseChisel input, Detection options, Invoking astnoisechisel, Invoking astnoisechisel @subsubsection NoiseChisel input The options here can be used to configure the inputs and output of NoiseChisel, along with some general processing options. Recall that you can always see the full list of Gnuastro's options with the @option{--help} (see @ref{Getting help}), or @option{--printparams} (or @option{-P}) to see their values (see @ref{Operating mode options}). @table @option @item -k FITS @itemx --kernel=FITS File name of kernel to smooth the image before applying the threshold, see @ref{Convolution kernel}. If no convolution is needed, give this option a value of @option{none}. The first step of NoiseChisel is to convolve/smooth the image and use the convolved image in multiple steps including the finding and applying of the quantile threshold (see @option{--qthresh}). The @option{--kernel} option is not mandatory. If not called, for a 2D, image a 2D Gaussian profile with a FWHM of 2 pixels truncated at 5 times the FWHM is used. This choice of the default kernel is discussed in Section 3.1.1 of Akhlaghi and Ichikawa [2015]. For a 3D cube, when no file name is given to @option{--kernel}, a Gaussian with FWHM of 1.5 pixels in the first two dimensions and 0.75 pixels in the third dimension will be used. The reason for this particular configuration is that commonly in astronomical applications, 3D datasets do not have the same nature in all three dimensions, commonly the first two dimensions are spatial (RA and Dec) while the third is spectral (for example, wavelength). The samplings are also different, in the default case, the spatial sampling is assumed to be larger than the spectral sampling, hence a wider FWHM in the spatial directions, see @ref{Sampling theorem}. You can use MakeProfiles to build a kernel with any of its recognized profile types and parameters. For more details, please see @ref{MakeProfiles output dataset}. For example, the command below will make a Moffat kernel (with @mymath{\beta=2.8}) with FWHM of 2 pixels truncated at 10 times the FWHM. @example $ astmkprof --oversample=1 --kernel=moffat,2,2.8,10 @end example Since convolution can be the slowest step of NoiseChisel, for large datasets, you can convolve the image once with Gnuastro's Convolve (see @ref{Convolve}), and use the @option{--convolved} option to feed it directly to NoiseChisel. This can help getting faster results when you are playing/testing the higher-level options. @item --khdu=STR HDU containing the kernel in the file given to the @option{--kernel} option. @item --convolved=FITS Use this file as the convolved image and do not do convolution (ignore @option{--kernel}). NoiseChisel will just check the size of the given dataset is the same as the input's size. If a wrong image (with the same size) is given to this option, the results (errors, bugs, etc.) are unpredictable. So please use this option with care and in a highly controlled environment, for example, in the scenario discussed below. In almost all situations, as the input gets larger, the single most CPU (and time) consuming step in NoiseChisel (and other programs that need a convolved image) is convolution. Therefore minimizing the number of convolutions can save a significant amount of time in some scenarios. One such scenario is when you want to segment NoiseChisel's detections using the same kernel (with @ref{Segment}, which also supports this @option{--convolved} option). This scenario would require two convolutions of the same dataset: once by NoiseChisel and once by Segment. Using this option in both programs, only one convolution (prior to running NoiseChisel) is enough. Another common scenario where this option can be convenient is when you are testing NoiseChisel (or Segment) for the best parameters. You have to run NoiseChisel multiple times and see the effect of each change. However, once you are happy with the kernel, re-convolving the input on every change of higher-level parameters will greatly hinder, or discourage, further testing. With this option, you can convolve the input image with your chosen kernel once before running NoiseChisel, then feed it to NoiseChisel on each test run and thus save valuable time for better/more tests. To build your desired convolution kernel, you can use @ref{MakeProfiles}. To convolve the image with a given kernel you can use @ref{Convolve}. Spatial domain convolution is mandatory: in the frequency domain, blank pixels (if present) will cover the whole image and gradients will appear on the edges, see @ref{Spatial vs. Frequency domain}. Below you can see an example of the second scenario: you want to see how variation of the growth level (through the @option{--detgrowquant} option) will affect the final result. Recall that you can ignore all the extra spaces, new lines, and backslash's (`@code{\}') if you are typing in the terminal. In a shell script, remove the @code{$} signs at the start of the lines. @example ## Make the kernel to convolve with. $ astmkprof --oversample=1 --kernel=gaussian,2,5 ## Convolve the input with the given kernel. $ astconvolve input.fits --kernel=kernel.fits \ --domain=spatial --output=convolved.fits ## Run NoiseChisel with seven growth quantile values. $ for g in 60 65 70 75 80 85 90; do \ astnoisechisel input.fits --convolved=convolved.fits \ --detgrowquant=0.$g --output=$g.fits; \ done @end example @item --chdu=STR The HDU/extension containing the convolved image in the file given to @option{--convolved}. @item -w FITS @itemx --widekernel=FITS File name of a wider kernel to use in estimating the difference of the mode and median in a tile (this difference is used to identify the significance of signal in that tile, see @ref{Quantifying signal in a tile}). As displayed in Figure 4 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}, a wider kernel will help in identifying the skewness caused by data in noise. The image that is convolved with this kernel is @emph{only} used for this purpose. Once the mode is found to be sufficiently close to the median, the quantile threshold is found on the image convolved with the sharper kernel (@option{--kernel}), see @option{--qthresh}). Since convolution will significantly slow down the processing, this feature is optional. When it is not given, the image that is convolved with @option{--kernel} will be used to identify good tiles @emph{and} apply the quantile threshold. This option is mainly useful in conditions were you have a very large, extended, diffuse signal that is still present in the usable tiles when using @option{--kernel}. See @ref{Detecting large extended targets} for a practical demonstration on how to inspect the tiles used in identifying the quantile threshold. @item --whdu=STR HDU containing the kernel file given to the @option{--widekernel} option. @item -L INT[,INT] @itemx --largetilesize=INT[,INT] The size of each tile for the tessellation with the larger tile sizes. Except for the tile size, all the other parameters for this tessellation are taken from the common options described in @ref{Processing options}. The format is identical to that of the @option{--tilesize} option that is discussed in that section. @end table @node Detection options, NoiseChisel output, NoiseChisel input, Invoking astnoisechisel @subsubsection Detection options Detection is the process of separating the pixels in the image into two groups: 1) Signal, and 2) Noise. Through the parameters below, you can customize the detection process in NoiseChisel. Recall that you can always see the full list of NoiseChisel's options with the @option{--help} (see @ref{Getting help}), or @option{--printparams} (or @option{-P}) to see their values (see @ref{Operating mode options}). @table @option @item -Q FLT @itemx --meanmedqdiff=FLT The maximum acceptable distance between the quantiles of the mean and median in each tile, see @ref{Quantifying signal in a tile}. The quantile threshold estimates are measured on tiles where the quantiles of their mean and median are less distant than the value given to this option. For example, @option{--meanmedqdiff=0.01} means that only tiles where the mean's quantile is between 0.49 and 0.51 (recall that the median's quantile is 0.5) will be used. @item -a INT @itemx --outliernumngb=INT Number of neighboring tiles to use for outlier rejection (mostly the wings of bright stars or galaxies). For optimal detection of the wings of bright stars or galaxies, this is @strong{the most important} option in NoiseChisel. This is because the extended wings of bright galaxies or stars (the PSF) can become flat over the tile. In this case, they will satisfy the @option{--meanmedqdiff} condition and pass that step. Therefore, to correctly identify such bad tiles, we need to look at the neighboring nearby tiles. A tile that is on the wing of a bright galaxy/star will clearly be an outlier when looking at the neighbors. For more on the details of the outlier rejection algorithm, see the latter half of @ref{Quantifying signal in a tile}. If this option is given a value of zero, no outlier rejection will take place. @item --outliersclip=FLT,FLT @mymath{\sigma}-clipping parameters for the outlier rejection of the quantile threshold. The format of the given values is similar to @option{--sigmaclip} below. In NoiseChisel, outlier rejection on tiles is used when identifying the quantile thresholds (@option{--qthresh}, @option{--noerodequant}, and @option{detgrowquant}). Outlier rejection is useful when the dataset contains a large and diffuse (almost flat within each tile) signal. The flatness of the profile will cause it to successfully pass the mean-median quantile difference test, so we will need to use the distribution of successful tiles for removing these false positives. For more, see the latter half of @ref{Quantifying signal in a tile}. @item --outliersigma=FLT Multiple of sigma to define an outlier. If this option is given a value of zero, no outlier rejection will take place. For more see @option{--outliersclip} and the latter half of @ref{Quantifying signal in a tile}. @item -t FLT @itemx --qthresh=FLT The quantile threshold to apply to the convolved image. The detection process begins with applying a quantile threshold to each of the tiles in the small tessellation. The quantile is only calculated for tiles that do not have any significant signal within them, see @ref{Quantifying signal in a tile}. Interpolation is then used to give a value to the unsuccessful tiles and it is finally smoothed. @cindex Quantile @cindex Binary image @cindex Foreground pixels @cindex Background pixels The quantile value is a floating point value between 0 and 1. Assume that we have sorted the @mymath{N} data elements of a distribution (the pixels in each mesh on the convolved image). The quantile (@mymath{q}) of this distribution is the value of the element with an index of (the nearest integer to) @mymath{q\times{N}} in the sorted data set. After thresholding is complete, we will have a binary (two valued) image. The pixels above the threshold are known as foreground pixels (have a value of 1) while those which lie below the threshold are known as background (have a value of 0). @item --smoothwidth=INT Width of flat kernel used to smooth the interpolated quantile thresholds, see @option{--qthresh} for more. @cindex NaN @item --checkqthresh Check the quantile threshold values on the mesh grid. A multi-extension FITS file, suffixed with @file{_qthresh.fits} will be created showing each step of how the final quantile threshold is found. With this option, NoiseChisel will abort as soon as quantile estimation has been completed, allowing you to inspect the steps leading to the final quantile threshold, this can be disabled with @option{--continueaftercheck}. By default the output will have the same pixel size as the input, but with the @option{--oneelempertile} option, only one pixel will be used for each tile (see @ref{Processing options}). The key things to remember are: @itemize @item The measurements to find the thresholds are done on tiles that cover the whole image in a tessellation. Recall that you can set the size of tiles with @option{--tilesize} and check them with @option{--checktiles}. Therefore except for the first and last extensions, the rest only show tiles. @item NoiseChisel ultimately has three thresholds: the quantile threshold (that you set with @option{--qthresh}), the no-erode quantile (set with @option{--noerodequant}) and the growth quantile (set with @option{--detgrowquant}). Therefore for each step, we have three extensions. @end itemize The output file will have the following extensions. Below, the extensions are put in the same order as you see in the file, with their name. @table @code @item CONVOLVED This is the input image after convolution with the kernel (which is a FWHM=2 Gaussian by default, but you can change with @option{--kernel}). Recall that the thresholds are defined on the convolved image. @item QTHRESH_ERODE @itemx QTHRESH_NOERODE @itemx QTHRESH_EXPAND In these three extensions, the tiles that have a quantile-of-mean more/less than 0.5 (quantile of median) @mymath{\pm d} are set to NaN (@mymath{d} is the value given to @option{--meanmedqdiff}, see @ref{Quantifying signal in a tile}). Therefore the non-NaN tiles that you see here are the tiles where there is no significant skewness (changing signal) within that tile. The only differing thing between the three extensions is the values of the non-NaN tiles. These values will be used to construct the final threshold map over the whole image. @item VALUE1_NO_OUTLIER @itemx VALUE2_NO_OUTLIER @itemx VALUE3_NO_OUTLIER All outlier tiles have been masked. The reason for removing outliers is that the quantile-of-mean is only sensitive to signal that varies on a scale that is smaller than the tile size. Therefore the extended wings of large galaxies or bright stars (which vary on scales much larger than the tile size) will pass that test. As described in @ref{Quantifying signal in a tile} outlier rejection is customized through @option{--outliernumngb}, @option{--outliersclip} and @option{--outliersigma}. @item THRESH1_INTERP @itemx THRESH2_INTERP @itemx THRESH3_INTERP Using the successful values that remain after the previous step, give values to all (interpolate) the tiles in the image. The interpolation is done using the nearest-neighbor method: for each tile, the N nearest neighbors are found and the median of their values is used to fill it. You can set the value of N through the @option{--interpnumngb} option. @item THRESH1_SMOOTH @itemx THRESH2_SMOOTH @itemx THRESH3_SMOOTH Smooth the interpolated image to remove the strong differences between touching tiles. Because we used the median value of the N nearest neighbors in the previous step, there can be strong discontinuities on the edges of tiles (which can directly show in the image after applying the threshold). The scale of the smoothing (number of nearby tiles to smooth with) is set with the @option{--smoothwidth} option. @item QTHRESH-APPLIED The pixels in this image can only have three values: @table @code @item 0 These pixels had a value below the quantile threshold. @item 1 These pixels had a value above the quantile threshold, but below the threshold for no erosion. Therefore in the next step, NoiseChisel will erode (set them to 0) these pixels if they are touching a 0-valued pixel. @item 2 These pixels had a value above the no-erosion threshold. So NoiseChisel will not erode these pixels, it will only apply Opening to them afterwards. Recall that this was done to avoid loosing sharp point-sources (like stars in space-based imaging). @end table @end table @item --blankasforeground In the erosion and opening steps below, treat blank elements as foreground (regions above the threshold). By default, blank elements in the dataset are considered to be background, so if a foreground pixel is touching it, it will be eroded. This option is irrelevant if the datasets contains no blank elements. When there are many blank elements in the dataset, treating them as foreground will systematically erode their regions less, therefore systematically creating more false positives. So use this option (when blank values are present) with care. @item -e INT @itemx --erode=INT @cindex Erosion The number of erosions to apply to the binary thresholded image. Erosion is simply the process of flipping (from 1 to 0) any of the foreground pixels that neighbor a background pixel. In a 2D image, there are two kinds of neighbors, 4-connected and 8-connected neighbors. In a 3D dataset, there are three: 6-connected, 18-connected, and 26-connected. You can specify which class of neighbors should be used for erosion with the @option{--erodengb} option, see below. Erosion has the effect of shrinking the foreground pixels. To put it another way, it expands the holes. This is a founding principle in NoiseChisel: it exploits the fact that with very low thresholds, the holes in the very low surface brightness regions of an image will be smaller than regions that have no signal. Therefore by expanding those holes, we are able to separate the regions harboring signal. @item --erodengb=INT The type of neighborhood (structuring element) used in erosion, see @option{--erode} for an explanation on erosion. If the input is a 2D image, only two integer values are acceptable: 4 or 8. For a 3D input datacube, the acceptable values are: 6, 18 and 26. In 2D 4-connectivity, the neighbors of a pixel are defined as the four pixels on the top, bottom, right and left of a pixel that share an edge with it. The 8-connected neighbors on the other hand include the 4-connected neighbors along with the other 4 pixels that share a corner with this pixel. See Figure 6 (a) and (b) in Akhlaghi and Ichikawa (2015) for a demonstration. A similar argument applies to 3D datacubes. @item --noerodequant Pure erosion is going to carve off sharp and small objects completely out of the detected regions. This option can be used to avoid missing such sharp and small objects (which have significant pixels, but not over a large area). All pixels with a value larger than the significance level specified by this option will not be eroded during the erosion step above. However, they will undergo the erosion and dilation of the opening step below. Like the @option{--qthresh} option, the significance level is determined using the quantile (a value between 0 and 1). Just as a reminder, in the normal distribution, @mymath{1\sigma}, @mymath{1.5\sigma}, and @mymath{2\sigma} are approximately on the 0.84, 0.93, and 0.98 quantiles. @item -p INT @itemx --opening=INT Depth of opening to be applied to the eroded binary image. Opening is a composite operation. When opening a binary image with a depth of @mymath{n}, @mymath{n} erosions (explained in @option{--erode}) are followed by @mymath{n} dilations. Simply put, dilation is the inverse of erosion. When dilating an image any background pixel is flipped (from 0 to 1) to become a foreground pixel. Dilation has the effect of fattening the foreground. Note that in NoiseChisel, the erosion which is part of opening is independent of the initial erosion that is done on the thresholded image (explained in @option{--erode}). The structuring element for the opening can be specified with the @option{--openingngb} option. Opening has the effect of removing the thin foreground connections (mostly noise) between separate foreground `islands' (detections) thereby completely isolating them. Once opening is complete, we have @emph{initial} detections. @item --openingngb=INT The structuring element used for opening, see @option{--erodengb} for more information about a structuring element. @item --skyfracnoblank Ignore blank pixels when estimating the fraction of undetected pixels for Sky estimation. NoiseChisel only measures the Sky over the tiles that have a sufficiently large fraction of undetected pixels (value given to @option{--minskyfrac}). By default this fraction is found by dividing number of undetected pixels in a tile by the tile's area. But this default behavior ignores the possibility of blank pixels. In situations that blank/masked pixels are scattered across the image and if they are large enough, all the tiles can fail the @option{--minskyfrac} test, thus not allowing NoiseChisel to proceed. With this option, such scenarios can be fixed: the denominator of the fraction will be the number of non-blank elements in the tile, not the total tile area. @item -B FLT @itemx --minskyfrac=FLT Minimum fraction (value between 0 and 1) of Sky (undetected) areas in a tile. Only tiles with a fraction of undetected pixels (Sky) larger than this value will be used to estimate the Sky value. NoiseChisel uses this option value twice to estimate the Sky value: after initial detections and in the end when false detections have been removed. Because of the PSF and their intrinsic amorphous properties, astronomical objects (except cosmic rays) never have a clear cutoff and commonly sink into the noise very slowly. Even below the very low thresholds used by NoiseChisel. So when a large fraction of the area of one mesh is covered by detections, it is very plausible that their faint wings are present in the undetected regions (hence causing a bias in any measurement). To get an accurate measurement of the above parameters over the tessellation, tiles that harbor too many detected regions should be excluded. The used tiles are visible in the respective @option{--check} option of the given step. @item --checkdetsky Check the initial approximation of the sky value and its standard deviation in a FITS file ending with @file{_detsky.fits}. With this option, NoiseChisel will abort as soon as the sky value used for defining pseudo-detections is complete. This allows you to inspect the steps leading to the final quantile threshold, this behavior can be disabled with @option{--continueaftercheck}. By default the output will have the same pixel size as the input, but with the @option{--oneelempertile} option, only one pixel will be used for each tile (see @ref{Processing options}). @item -s FLT,FLT @itemx --sigmaclip=FLT,FLT The @mymath{\sigma}-clipping parameters for measuring the initial and final Sky values from the undetected pixels, see @ref{Sigma clipping}. This option takes two values which are separated by a comma (@key{,}). Each value can either be written as a single number or as a fraction of two numbers (for example, @code{3,1/10}). The first value to this option is the multiple of @mymath{\sigma} that will be clipped (@mymath{\alpha} in that section). The second value is the exit criteria. If it is less than 1, then it is interpreted as tolerance and if it is larger than one it is assumed to be the fixed number of iterations. Hence, in the latter case the value must be an integer. @item -R FLT @itemx --dthresh=FLT The detection threshold: a multiple of the initial Sky standard deviation added with the initial Sky approximation (which you can inspect with @option{--checkdetsky}). This flux threshold is applied to the initially undetected regions on the unconvolved image. The background pixels that are completely engulfed in a 4-connected foreground region are converted to background (holes are filled) and one opening (depth of 1) is applied over both the initially detected and undetected regions. The Signal to noise ratio of the resulting `pseudo-detections' are used to identify true vs. false detections. See Section 3.1.5 and Figure 7 in Akhlaghi and Ichikawa (2015) for a very complete explanation. @item --dopening=INT The number of openings to do after applying @option{--dthresh}. @item --dopeningngb=INT The connectivity used in the opening of @option{--dopening}. In a 2D image this must be either 4 or 8. The stronger the connectivity, the more smaller regions will be discarded. @item --holengb=INT The connectivity (defined by the number of neighbors) to fill holes after applying @option{--dthresh} (above) to find pseudo-detections. For example, in a 2D image it must be 4 (the neighbors that are most strongly connected) or 8 (all neighbors). The stronger the connectivity, the stronger the hole will be enclosed. So setting a value of 8 in a 2D image means that the walls of the hole are 4-connected. If standard (near Sky level) values are given to @option{--dthresh}, setting @option{--holengb=4}, might fill the complete dataset and thus not create enough pseudo-detections. @item --pseudoconcomp=INT The connectivity (defined by the number of neighbors) to find individual pseudo-detections. If it is a weaker connectivity (4 in a 2D image), then pseudo-detections that are connected on the corners will be treated as separate. @item -m INT @itemx --snminarea=INT The minimum area to calculate the Signal to noise ratio on the pseudo-detections of both the initially detected and undetected regions. When the area in a pseudo-detection is too small, the Signal to noise ratio measurements will not be accurate and their distribution will be heavily skewed to the positive. So it is best to ignore any pseudo-detection that is smaller than this area. Use @option{--detsnhistnbins} to check if this value is reasonable or not. @item --checksn Save the S/N values of the pseudo-detections (and possibly grown detections if @option{--cleangrowndet} is called) into separate tables. If @option{--tableformat} is a FITS table, each table will be written into a separate extension of one file suffixed with @file{_detsn.fits}. If it is plain text, a separate file will be made for each table (ending in @file{_detsn_sky.txt}, @file{_detsn_det.txt} and @file{_detsn_grown.txt}). For more on @option{--tableformat} see @ref{Input output options}. You can use these to inspect the S/N values and their distribution (in combination with the @option{--checkdetection} option to see where the pseudo-detections are). You can use Gnuastro's @ref{Statistics} to make a histogram of the distribution or any other analysis you would like for better understanding of the distribution (for example, through a histogram). @item --minnumfalse=INT The minimum number of `pseudo-detections' over the undetected regions to identify a Signal-to-Noise ratio threshold. The Signal to noise ratio (S/N) of false pseudo-detections in each tile is found using the quantile of the S/N distribution of the pseudo-detections over the undetected pixels in each mesh. If the number of S/N measurements is not large enough, the quantile will not be accurate (can have large scatter). For example, if you set @option{--snquant=0.99} (or the top 1 percent), then it is best to have at least 100 S/N measurements. @item -c FLT @itemx --snquant=FLT The quantile of the Signal to noise ratio distribution of the pseudo-detections in each mesh to use for filling the large mesh grid. Note that this is only calculated for the large mesh grids that satisfy the minimum fraction of undetected pixels (value of @option{--minbfrac}) and minimum number of pseudo-detections (value of @option{--minnumfalse}). @item --snthresh=FLT Manually set the signal-to-noise ratio of true pseudo-detections. With this option, NoiseChisel will not attempt to find pseudo-detections over the noisy regions of the dataset, but will directly go onto applying the manually input value. This option is useful in crowded images where there is no blank sky to find the sky pseudo-detections. You can get this value on a similarly reduced dataset (from another region of the Sky with more undetected regions spaces). @item -d FLT @itemx --detgrowquant=FLT Quantile limit to ``grow'' the final detections. As discussed in the previous options, after applying the initial quantile threshold, layers of pixels are carved off the objects to identify true signal. With this step you can return those low surface brightness layers that were carved off back to the detections. To disable growth, set the value of this option to @code{1}. The process is as follows: after the true detections are found, all the non-detected pixels above this quantile will be put in a list and used to ``grow'' the true detections (seeds of the growth). Like all quantile thresholds, this threshold is defined and applied to the convolved dataset. Afterwards, the dataset is dilated once (with minimum connectivity) to connect very thin regions on the boundary: imagine building a dam at the point rivers spill into an open sea/ocean. Finally, all holes are filled. In the geography metaphor, holes can be seen as the closed (by the dams) rivers and lakes, so this process is like turning the water in all such rivers and lakes into soil. See @option{--detgrowmaxholesize} for configuring the hole filling. Note that since the growth occurs on all neighbors of a data element, the quantile for 3D detection must be must larger than that of 2D detection. Recall that in 2D each element has 8 neighbors while in 3D there are 27 neighbors. @item --detgrowmaxholesize=INT The maximum hole size to fill during the final expansion of the true detections as described in @option{--detgrowquant}. This is necessary when the input contains many smaller objects and can be used to avoid marking blank sky regions as detections. For example, multiple galaxies can be positioned such that they surround an empty region of sky. If all the holes are filled, the Sky region in between them will be taken as a detection which is not desired. To avoid such cases, the integer given to this option must be smaller than the hole between such objects. However, we should caution that unless the ``hole'' is very large, the combined faint wings of the galaxies might actually be present in between them, so be very careful in not filling such holes. On the other hand, if you have a very large (and extended) galaxy, the diffuse wings of the galaxy may create very large holes over the detections. In such cases, a large enough value to this option will cause all such holes to be detected as part of the large galaxy and thus help in detecting it to extremely low surface brightness limits. Therefore, especially when large and extended objects are present in the image, it is recommended to give this option (very) large values. For one real-world example, see @ref{Detecting large extended targets}. @item --cleangrowndet After dilation, if the signal-to-noise ratio of a detection is less than the derived pseudo-detection S/N limit, that detection will be discarded. In an ideal/clean noise, a true detection's S/N should be larger than its constituent pseudo-detections because its area is larger and it also covers more signal. However, on a false detections (especially at lower @option{--snquant} values), the increase in size can cause a decrease in S/N below that threshold. This will improve purity and not change completeness (a true detection will not be discarded). Because a true detection has flux in its vicinity and dilation will catch more of that flux and increase the S/N. So on a true detection, the final S/N cannot be less than pseudo-detections. However, in many real images bad processing creates artifacts that cannot be accurately removed by the Sky subtraction. In such cases, this option will decrease the completeness (will artificially discard true detections). So this feature is not default and should to be explicitly called when you know the noise is clean. @item --checkdetection Every step of the detection process will be added as an extension to a file with the suffix @file{_det.fits}. Going through each would just be a repeat of the explanations above and also of those in Akhlaghi and Ichikawa (2015). The extension label should be sufficient to recognize which step you are observing. Viewing all the steps can be the best guide in choosing the best set of parameters. With this option, NoiseChisel will abort as soon as a snapshot of all the detection process is saved. This behavior can be disabled with @option{--continueaftercheck}. @item --checksky Check the derivation of the final sky and its standard deviation values on the mesh grid. With this option, NoiseChisel will abort as soon as the sky value is estimated over the image (on each tile). This behavior can be disabled with @option{--continueaftercheck}. By default the output will have the same pixel size as the input, but with the @option{--oneelempertile} option, only one pixel will be used for each tile (see @ref{Processing options}). @end table @node NoiseChisel output, , Detection options, Invoking astnoisechisel @subsubsection NoiseChisel output NoiseChisel's output is a multi-extension FITS file. The main extension/dataset is a (binary) detection map. It has the same size as the input but with only two possible values for all pixels: 0 (for pixels identified as noise) and 1 (for those identified as signal/detections). The detection map is followed by a Sky and Sky standard deviation dataset (which are calculated from the binary image). By default (when @option{--rawoutput} is not called), NoiseChisel will also subtract the Sky value from the input and save the sky-subtracted input as the first extension in the output with data. The zero-th extension (that contains no data), contains NoiseChisel's configuration as FITS keywords, see @ref{Output FITS files}. The name of the output file can be set by giving a value to @option{--output} (this is a common option between all programs and is therefore discussed in @ref{Input output options}). If @option{--output} is not used, the input name will be suffixed with @file{_detected.fits} and used as output, see @ref{Automatic output}. If any of the options starting with @option{--check*} are given, NoiseChisel will not complete and will abort as soon as the respective check images are created. For more information on the different check images, see the description for the @option{--check*} options in @ref{Detection options} (this can be disabled with @option{--continueaftercheck}). The last two extensions of the output are the Sky and its Standard deviation, see @ref{Sky value} for a complete explanation. They are calculated on the tile grid that you defined for NoiseChisel. By default these datasets will have the same size as the input, but with all the pixels in one tile given one value. To be more space-efficient (keep only one pixel per tile), you can use the @option{--oneelempertile} option, see @ref{Tessellation}. @cindex GNOME To inspect any of NoiseChisel's output files, assuming you use SAO DS9, you can configure your Graphic User Interface (GUI) to open NoiseChisel's output as a multi-extension data cube. This will allow you to flip through the different extensions and visually inspect the results. This process has been described for the GNOME GUI (most common GUI in GNU/Linux operating systems) in @ref{Viewing FITS file contents with DS9 or TOPCAT}. NoiseChisel's output configuration options are described in detail below. @table @option @item --continueaftercheck Continue NoiseChisel after any of the options starting with @option{--check} (see @ref{Detection options}. NoiseChisel involves many steps and as a result, there are many checks, allowing you to inspect the status of the processing. The results of each step affect the next steps of processing. Therefore, when you want to check the status of the processing at one step, the time spent to complete NoiseChisel is just wasted/distracting time. To encourage easier experimentation with the option values, when you use any of the NoiseChisel options that start with @option{--check}, NoiseChisel will abort once its desired extensions have been written. With @option{--continueaftercheck} option, you can disable this behavior and ask NoiseChisel to continue with the rest of the processing, even after the requested check files are complete. @item --ignoreblankintiles Do not set the input's blank pixels to blank in the tiled outputs (for example, Sky and Sky standard deviation extensions of the output). This is only applicable when the tiled output has the same size as the input, in other words, when @option{--oneelempertile} is not called. By default, blank values in the input (commonly on the edges which are outside the survey/field area) will be set to blank in the tiled outputs also. But in other scenarios this default behavior is not desired; for example, if you have masked something in the input, but want the tiled output under that also. @item -l @itemx --label Run a connected-components algorithm on the finally detected pixels to identify which pixels are connected to which. By default the main output is a binary dataset with only two values: 0 (for noise) and 1 (for signal/detections). See @ref{NoiseChisel output} for more. The purpose of NoiseChisel is to detect targets that are extended and diffuse, with outer parts that sink into the noise very gradually (galaxies and stars for example). Since NoiseChisel digs down to extremely low surface brightness values, many such targets will commonly be detected together as a single large body of connected pixels. To properly separate connected objects, sophisticated segmentation methods are commonly necessary on NoiseChisel's output. Gnuastro has the dedicated @ref{Segment} program for this job. Since input images are commonly large and can take a significant volume, the extra volume necessary to store the labels of the connected components in the detection map (which will be created with this @option{--label} option, in 32-bit signed integer type) can thus be a major waste of space. Since the default output is just a binary dataset, an 8-bit unsigned dataset is enough. The binary output will also encourage users to segment the result separately prior to doing higher-level analysis. As an alternative to @option{--label}, if you have the binary detection image, you can use the @code{connected-components} operator in Gnuastro's Arithmetic program to identify regions that are connected with each other. For example, with this command (assuming NoiseChisel's output is called @file{nc.fits}): @example $ astarithmetic nc.fits 2 connected-components -hDETECTIONS @end example @item --rawoutput Do not include the Sky-subtracted input image as the first extension of the output. By default, the Sky-subtracted input is put in the first extension of the output. The next extensions are NoiseChisel's main outputs described above. The extra Sky-subtracted input can be convenient in checking NoiseChisel's output and comparing the detection map with the input: visually see if everything you expected is detected (reasonable completeness) and that you do not have too many false detections (reasonable purity). This visual inspection is simplified if you use SAO DS9 to view NoiseChisel's output as a multi-extension data-cube, see @ref{Viewing FITS file contents with DS9 or TOPCAT}. When you are satisfied with your NoiseChisel configuration (therefore you do not need to check on every run), or you want to archive/transfer the outputs, or the datasets become large, or you are running NoiseChisel as part of a pipeline, this Sky-subtracted input image can be a significant burden (take up a large volume). The fact that the input is also noisy, makes it hard to compress it efficiently. In such cases, this @option{--rawoutput} can be used to avoid the extra sky-subtracted input in the output. It is always possible to easily produce the Sky-subtracted dataset from the input (assuming it is in extension @code{1} of @file{in.fits}) and the @code{SKY} extension of NoiseChisel's output (let's call it @file{nc.fits}) with a command like below (assuming NoiseChisel was not run with @option{--oneelempertile}, see @ref{Tessellation}): @example $ astarithmetic in.fits nc.fits - -h1 -hSKY @end example @end table @cartouche @noindent @cindex Compression @strong{Save space:} with the @option{--rawoutput} and @option{--oneelempertile}, NoiseChisel's output will only be one binary detection map and two much smaller arrays with one value per tile. Since none of these have noise they can be compressed very effectively (without any loss of data) with exceptionally high compression ratios. This makes it easy to archive, or transfer, NoiseChisel's output even on huge datasets. To compress it with the most efficient method (take up less volume), run the following command: @cindex GNU Gzip @example $ gzip --best noisechisel_output.fits @end example @noindent The resulting @file{.fits.gz} file can then be fed into any of Gnuastro's programs directly, or viewed in viewers like SAO DS9, without having to decompress it separately (they will just take a little longer, because they have to internally decompress it before starting). See @ref{NoiseChisel optimization for storage} for an example on a real dataset. @end cartouche @node Segment, MakeCatalog, NoiseChisel, Data analysis @section Segment Once signal is separated from noise (for example, with @ref{NoiseChisel}), you have a binary dataset: each pixel is either signal (1) or noise (0). Signal (for example, every galaxy in your image) has been ``detected'', but all detections have a label of 1. Therefore while we know which pixels contain signal, we still cannot find out how many galaxies they contain or which detected pixels correspond to which galaxy. At the lowest (most generic) level, detection is a kind of segmentation (segmenting the whole dataset into signal and noise, see @ref{NoiseChisel}). Here, we will define segmentation only on signal: to separate sub-structure within the detections. @cindex Connected component labeling If the targets are clearly separated, or their detected regions are not touching, a simple connected components@footnote{@url{https://en.wikipedia.org/wiki/Connected-component_labeling}} algorithm (very basic segmentation) is enough to separate the regions that are touching/connected. This is such a basic and simple form of segmentation that Gnuastro's Arithmetic program has an operator for it: see @code{connected-components} in @ref{Arithmetic operators}. Assuming the binary dataset is called @file{binary.fits}, you can use it with a command like this: @example $ astarithmetic binary.fits 2 connected-components @end example @noindent You can even do a very basic detection (a threshold, say at value @code{100}) @emph{and} segmentation in Arithmetic with a single command like below: @example $ astarithmetic in.fits 100 gt 2 connected-components @end example However, in most astronomical situations our targets are not nicely separated or have a sharp boundary/edge (for a threshold to suffice): they touch (for example, merging galaxies), or are simply in the same line-of-sight (which is much more common). This causes their images to overlap. In particular, when you do your detection with NoiseChisel, you will detect signal to very low surface brightness limits: deep into the faint wings of galaxies or bright stars (which can extend very far and irregularly from their center). Therefore, it often happens that several galaxies are detected as one large detection. Since they are touching, a simple connected components algorithm will not suffice. It is therefore necessary to do a more sophisticated segmentation and break up the detected pixels (even those that are touching) into multiple target objects as accurately as possible. Segment will use a detection map and its corresponding dataset to find sub-structure over the detected areas and use them for its segmentation. Until Gnuastro version 0.6 (released in 2018), Segment was part of @ref{NoiseChisel}. Therefore, similar to NoiseChisel, the best place to start reading about Segment and understanding what it does (with many illustrative figures) is Section 3.2 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}, and continue with Akhlaghi @url{https://arxiv.org/abs/1909.11230,2019}. @cindex river @cindex Watershed algorithm As a summary, Segment first finds true @emph{clump}s over the detections. Clumps are associated with local maxima/minima@footnote{By default the maximum is used as the first clump pixel, to define clumps based on local minima, use the @option{--minima} option.} and extend over the neighboring pixels until they reach a local minimum/maximum (@emph{river}/@emph{watershed}). By default, Segment will use the distribution of clump signal-to-noise ratios over the undetected regions as reference to find ``true'' clumps over the detections. Using the undetected regions can be disabled by directly giving a signal-to-noise ratio to @option{--clumpsnthresh}. The true clumps are then grown to a certain threshold over the detections. Based on the strength of the connections (rivers/watersheds) between the grown clumps, they are considered parts of one @emph{object} or as separate @emph{object}s. See Section 3.2 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015} for more. Segment's main output are thus two labeled datasets: 1) clumps, and 2) objects. See @ref{Segment output} for more. To start learning about Segment, especially in relation to detection (@ref{NoiseChisel}) and measurement (@ref{MakeCatalog}), the recommended references are Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}, Akhlaghi @url{https://arxiv.org/abs/1611.06387,2016} and Akhlaghi @url{https://arxiv.org/abs/1909.11230,2019}. If you have used Segment within your research, please run it with @option{--cite} to list the papers you should cite and how to acknowledge its funding sources. Those papers cannot be updated any more but the software will evolve. For example, Segment became a separate program (from NoiseChisel) in 2018 (after those papers were published). Therefore this book is the definitive reference. @c To help in the transition from those papers to the software you are using, see @ref{Segment changes after publication}. Finally, in @ref{Invoking astsegment}, we will discuss Segment's inputs, outputs and configuration options. @menu * Invoking astsegment:: Inputs, outputs and options to Segment @end menu @c @node Segment changes after publication, Invoking astsegment, Segment, Segment @c @subsection Segment changes after publication @c Segment's main algorithm and working strategy were initially defined and introduced in Section 3.2 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015} and @url{https://arxiv.org/abs/1909.11230,2019}. @c It is strongly recommended to read those papers for a good understanding of what Segment does, how it relates to detection, and how each parameter influences the output. @c They have many figures showing every step on multiple mock and real examples. @c However, the papers cannot be updated anymore, but Segment has evolved (and will continue to do so): better algorithms or steps have been (and will be) found. @c This book is thus the final and definitive guide to Segment. @c The aim of this section is to make the transition from the paper to your installed version, as smooth as possible through the list below. @c For a more detailed list of changes in previous Gnuastro releases/versions, please follow the @file{NEWS} file@footnote{The @file{NEWS} file is present in the released Gnuastro tarball, see @ref{Release tarball}.}. @node Invoking astsegment, , Segment, Segment @subsection Invoking Segment Segment will identify substructure within the detected regions of an input image. Segment's output labels can be directly used for measurements (for example, with @ref{MakeCatalog}). The executable name is @file{astsegment} with the following general template @example $ astsegment [OPTION ...] InputImage.fits @end example @noindent One line examples: @example ## Segment NoiseChisel's detected regions. $ astsegment default-noisechisel-output.fits ## Use a hand-input S/N value for keeping true clumps ## (avoid finding the S/N using the undetected regions). $ astsegment nc-out.fits --clumpsnthresh=10 ## Inspect all the segmentation steps after changing a parameter. $ astsegment input.fits --snquant=0.9 --checksegmentaion ## Use the fixed value of 0.01 for the input's Sky standard deviation ## (in the units of the input), and assume all the pixels are a ## detection (for example, a large structure extending over the whole ## image), and only keep clumps with S/N>10 as true clumps. $ astsegment in.fits --std=0.01 --detection=all --clumpsnthresh=10 @end example @cindex Gaussian @noindent If Segment is to do processing (for example, you do not want to get help, or see the values of each option), at least one input dataset is necessary along with detection and error information, either as separate datasets (per-pixel) or fixed values, see @ref{Segment input}. Segment shares a large set of common operations with other Gnuastro programs, mainly regarding input/output, general processing steps, and general operating modes. To help in a unified experience between all of Gnuastro's programs, these common operations have the same names and defined in @ref{Common options}. As in all Gnuastro programs, options can also be given to Segment in configuration files. For a thorough description of Gnuastro's configuration file parsing, please see @ref{Configuration files}. All of Segment's options with a short description are also always available on the command-line with the @option{--help} option, see @ref{Getting help}. To inspect the option values without actually running Segment, append your command with @option{--printparams} (or @option{-P}). To help in easy navigation between Segment's options, they are separately discussed in the three sub-sections below: @ref{Segment input} discusses how you can customize the inputs to Segment. @ref{Segmentation options} is devoted to options specific to the high-level segmentation process. Finally, in @ref{Segment output}, we will discuss options that affect Segment's output. @menu * Segment input:: Input files and options. * Segmentation options:: Parameters of the segmentation process. * Segment output:: Outputs of Segment @end menu @node Segment input, Segmentation options, Invoking astsegment, Invoking astsegment @subsubsection Segment input Besides the input dataset (for example, astronomical image), Segment also needs to know the Sky standard deviation and the regions of the dataset that it should segment. The values dataset is assumed to be Sky subtracted by default. If it is not, you can ask Segment to subtract the Sky internally by calling @option{--sky}. For the rest of this discussion, we will assume it is already sky subtracted. The Sky and its standard deviation can be a single value (to be used for the whole dataset) or a separate dataset (for a separate value per pixel). If a dataset is used for the Sky and its standard deviation, they must either be the size of the input image, or have a single value per tile (generated with @option{--oneelempertile}, see @ref{Processing options} and @ref{Tessellation}). The detected regions/pixels can be specified as a detection map (for example, see @ref{NoiseChisel output}). If @option{--detection=all}, Segment will not read any detection map and assume the whole input is a single detection. For example, when the dataset is fully covered by a large nearby galaxy/globular cluster. When dataset are to be used for any of the inputs, Segment will assume they are multiple extensions of a single file by default (when @option{--std} or @option{--detection} are not called). For example, NoiseChisel's default output @ref{NoiseChisel output}. When the Sky-subtracted values are in one file, and the detection and Sky standard deviation are in another, you just need to use @option{--detection}: in the absence of @option{--std}, Segment will look for both the detection labels and Sky standard deviation in the file given to @option{--detection}. Ultimately, if all three are in separate files, you need to call both @option{--detection} and @option{--std}. The extensions of the three mandatory inputs can be specified with @option{--hdu}, @option{--dhdu}, and @option{--stdhdu}. For a full discussion on what to give to these options, see the description of @option{--hdu} in @ref{Input output options}. To see their default values (along with all the other options), run Segment with the @option{--printparams} (or @option{-P}) option. Just recall that in the absence of @option{--detection} and @option{--std}, all three are assumed to be in the same file. If you only want to see Segment's default values for HDUs on your system, run this command: @example $ astsegment -P | grep hdu @end example By default Segment will convolve the input with a kernel to improve the signal-to-noise ratio of true peaks. If you already have the convolved input dataset, you can pass it directly to Segment for faster processing (using the @option{--convolved} and @option{--chdu} options). Just do not forget that the convolved image must also be Sky-subtracted before calling Segment. If a value/file is given to @option{--sky}, the convolved values will also be Sky subtracted internally. Alternatively, if you prefer to give a kernel (with @option{--kernel} and @option{--khdu}), Segment can do the convolution internally. To disable convolution, use @option{--kernel=none}. @table @option @item --sky=STR/FLT The Sky value(s) to subtract from the input. This option can either be given a constant number or a file name containing a dataset (multiple values, per pixel or per tile). By default, Segment will assume the input dataset is Sky subtracted, so this option is not mandatory. If the value cannot be read as a number, it is assumed to be a file name. When the value is a file, the extension can be specified with @option{--skyhdu}. When it is not a single number, the given dataset must either have the same size as the output or the same size as the tessellation (so there is one pixel per tile, see @ref{Tessellation}). When this option is given, its value(s) will be subtracted from the input and the (optional) convolved dataset (given to @option{--convolved}) prior to starting the segmentation process. @item --skyhdu=STR/INT The HDU/extension containing the Sky values. This is mandatory when the value given to @option{--sky} is not a number. Please see the description of @option{--hdu} in @ref{Input output options} for the different ways you can identify a special extension. @item --std=STR/FLT The Sky standard deviation value(s) corresponding to the input. The value can either be a constant number or a file name containing a dataset (multiple values, per pixel or per tile). The Sky standard deviation is mandatory for Segment to operate. If the value cannot be read as a number, it is assumed to be a file name. When the value is a file, the extension can be specified with @option{--skyhdu}. When it is not a single number, the given dataset must either have the same size as the output or the same size as the tessellation (so there is one pixel per tile, see @ref{Tessellation}). When this option is not called, Segment will assume the standard deviation is a dataset and in a HDU/extension (@option{--stdhdu}) of another one of the input file(s). If a file is given to @option{--detection}, it will assume that file contains the standard deviation dataset, otherwise, it will look into input filename (the main argument, without any option). @item --stdhdu=INT/STR The HDU/extension containing the Sky standard deviation values, when the value given to @option{--std} is a file name. Please see the description of @option{--hdu} in @ref{Input output options} for the different ways you can identify a special extension. @item --variance The input Sky standard deviation value/dataset is actually variance. When this option is called, the square root of input Sky standard deviation (see @option{--std}) is used internally, not its raw value(s). @item -d FITS @itemx --detection=FITS Detection map to use for segmentation. If given a value of @option{all}, Segment will assume the whole dataset must be segmented, see below. If a detection map is given, the extension can be specified with @option{--dhdu}. If not given, Segment will assume the desired HDU/extension is in the main input argument (input file specified with no option). The final segmentation (clumps or objects) will only be over the non-zero pixels of this detection map. The dataset must have the same size as the input image. Only datasets with an integer type are acceptable for the labeled image, see @ref{Numeric data types}. If your detection map only has integer values, but it is stored in a floating point container, you can use Gnuastro's Arithmetic program (see @ref{Arithmetic}) to convert it to an integer container, like the example below: @example $ astarithmetic float.fits int32 --output=int.fits @end example It may happen that the whole input dataset is covered by signal, for example, when working on parts of the Andromeda galaxy, or nearby globular clusters (that cover the whole field of view). In such cases, segmentation is necessary over the complete dataset, not just specific regions (detections). By default Segment will first use the undetected regions as a reference to find the proper signal-to-noise ratio of ``true'' clumps (give a purity level specified with @option{--snquant}). Therefore, in such scenarios you also need to manually give a ``true'' clump signal-to-noise ratio with the @option{--clumpsnthresh} option to disable looking into the undetected regions, see @ref{Segmentation options}. In such cases, is possible to make a detection map that only has the value @code{1} for all pixels (for example, using @ref{Arithmetic}), but for convenience, you can also use @option{--detection=all}. @item --dhdu The HDU/extension containing the detection map given to @option{--detection}. Please see the description of @option{--hdu} in @ref{Input output options} for the different ways you can identify a special extension. @item -k FITS @itemx --kernel=FITS The name of file containing kernel that will be used to convolve the input image. The usage of this option is identical to NoiseChisel's @option{--kernel} option (@ref{NoiseChisel input}). Please see the descriptions there for more. To disable convolution, you can give it a value of @option{none}. @item --khdu The HDU/extension containing the kernel used for convolution. For acceptable values, please see the description of @option{--hdu} in @ref{Input output options}. @item --convolved=FITS The convolved image's file name to avoid internal convolution by Segment. The usage of this option is identical to NoiseChisel's @option{--convolved} option. Please see @ref{NoiseChisel input} for a thorough discussion of the usefulness and best practices of using this option. If you want to use the same convolution kernel for detection (with @ref{NoiseChisel}) and segmentation, with this option, you can use the same convolved image (that is also available in NoiseChisel) and avoid two convolutions. However, just be careful to use the input to NoiseChisel as the input to Segment also, then use the @option{--sky} and @option{--std} to specify the Sky and its standard deviation (from NoiseChisel's output). Recall that when NoiseChisel is not called with @option{--rawoutput}, the first extension of NoiseChisel's output is the @emph{Sky-subtracted} input (see @ref{NoiseChisel output}). So if you use the same convolved image that you fed to NoiseChisel, but use NoiseChisel's output with Segment's @option{--convolved}, then the convolved image will not be Sky subtracted. @item --chdu The HDU/extension containing the convolved image (given to @option{--convolved}). For acceptable values, please see the description of @option{--hdu} in @ref{Input output options}. @item -L INT[,INT] @itemx --largetilesize=INT[,INT] The size of the large tiles to use for identifying the clump S/N threshold over the undetected regions. The usage of this option is identical to NoiseChisel's @option{--largetilesize} option (@ref{NoiseChisel input}). Please see the descriptions there for more. The undetected regions can be a significant fraction of the dataset and finding clumps requires sorting of the desired regions, which can be slow. To speed up the processing, Segment finds clumps in the undetected regions over separate large tiles. This allows it to have to sort a much smaller set of pixels and also to treat them independently and in parallel. Both these issues greatly speed it up. Just be sure to not decrease the large tile sizes too much (less than 100 pixels in each dimension). It is important for them to be much larger than the clumps. @end table @node Segmentation options, Segment output, Segment input, Invoking astsegment @subsubsection Segmentation options The options below can be used to configure every step of the segmentation process in the Segment program. For a more complete explanation (with figures to demonstrate each step), please see Section 3.2 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}, and also @ref{Segment}. By default, Segment will follow the procedure described in the paper to find the S/N threshold based on the noise properties. This can be disabled by directly giving a trustable signal-to-noise ratio to the @option{--clumpsnthresh} option. Recall that you can always see the full list of Gnuastro's options with the @option{--help} (see @ref{Getting help}), or @option{--printparams} (or @option{-P}) to see their values (see @ref{Operating mode options}). @table @option @item -B FLT @itemx --minskyfrac=FLT Minimum fraction (value between 0 and 1) of Sky (undetected) areas in a large tile. Only (large) tiles with a fraction of undetected pixels (Sky) greater than this value will be used for finding clumps. The clumps found in the undetected areas will be used to estimate a S/N threshold for true clumps. Therefore this is an important option (to decrease) in crowded fields. Operationally, this is almost identical to NoiseChisel's @option{--minskyfrac} option (@ref{Detection options}). Please see the descriptions there for more. @item --minima Build the clumps based on the local minima, not maxima. By default, clumps are built starting from local maxima (see Figure 8 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}). Therefore, this option can be useful when you are searching for true local minima (for example, absorption features). @item -m INT @itemx --snminarea=INT The minimum area which a clump in the undetected regions should have in order to be considered in the clump Signal to noise ratio measurement. If this size is set to a small value, the Signal to noise ratio of false clumps will not be accurately found. It is recommended that this value be larger than the value to NoiseChisel's @option{--snminarea}. Because the clumps are found on the convolved (smoothed) image while the pseudo-detections are found on the input image. You can use @option{--checksn} and @option{--checksegmentation} to see if your chosen value is reasonable or not. @item --checksn Save the S/N values of the clumps over the sky and detected regions into separate tables. If @option{--tableformat} is a FITS format, each table will be written into a separate extension of one file suffixed with @file{_clumpsn.fits}. If it is plain text, a separate file will be made for each table (ending in @file{_clumpsn_sky.txt} and @file{_clumpsn_det.txt}). For more on @option{--tableformat} see @ref{Input output options}. You can use these tables to inspect the S/N values and their distribution (in combination with the @option{--checksegmentation} option to see where the clumps are). You can use Gnuastro's @ref{Statistics} to make a histogram of the distribution (ready for plotting in a text file, or a crude ASCII-art demonstration on the command-line). With this option, Segment will abort as soon as the two tables are created. This allows you to inspect the steps leading to the final S/N quantile threshold, this behavior can be disabled with @option{--continueaftercheck}. @item --minnumfalse=INT The minimum number of clumps over undetected (Sky) regions to identify the requested Signal-to-Noise ratio threshold. Operationally, this is almost identical to NoiseChisel's @option{--minnumfalse} option (@ref{Detection options}). Please see the descriptions there for more. @item -c FLT @itemx --snquant=FLT The quantile of the signal-to-noise ratio distribution of clumps in undetected regions, used to define true clumps. After identifying all the usable clumps in the undetected regions of the dataset, the given quantile of their signal-to-noise ratios is used to define the signal-to-noise ratio of a ``true'' clump. Effectively, this can be seen as an inverse p-value measure. See Figure 9 and Section 3.2.1 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015} for a complete explanation. The full distribution of clump signal-to-noise ratios over the undetected areas can be saved into a table with @option{--checksn} option and visually inspected with @option{--checksegmentation}. @item -v @itemx --keepmaxnearriver Keep a clump whose maximum (minimum if @option{--minima} is called) flux is 8-connected to a river pixel. By default such clumps over detections are considered to be noise and are removed irrespective of their significance measure; see Akhlaghi @url{https://arxiv.org/abs/1909.11230,2019}. Over large profiles, that sink into the noise very slowly, noise can cause part of the profile (which was flat without noise) to become a very large and with a very high Signal to noise ratio. In such cases, the pixel with the maximum flux in the clump will be immediately touching a river pixel. @item -s FLT @itemx --clumpsnthresh=FLT The signal-to-noise threshold for true clumps. If this option is given, then the segmentation options above will be ignored and the given value will be directly used to identify true clumps over the detections. This can be useful if you have a large dataset with similar noise properties. You can find a robust signal-to-noise ratio based on a (sufficiently large) smaller portion of the dataset. Afterwards, with this option, you can speed up the processing on the whole dataset. Other scenarios where this option may be useful is when, the image might not contain enough/any Sky regions. @item -G FLT @itemx --gthresh=FLT Threshold (multiple of the sky standard deviation added with the sky) to stop growing true clumps. Once true clumps are found, they are set as the basis to segment the detected region. They are grown until the threshold specified by this option. @item -y INT @itemx --minriverlength=INT The minimum length of a river between two grown clumps for it to be considered in signal-to-noise ratio estimations. Similar to @option{--snminarea}, if the length of the river is too short, the signal-to-noise ratio can be noisy and unreliable. Any existing rivers shorter than this length will be considered as non-existent, independent of their Signal to noise ratio. The clumps are grown on the input image, therefore this value can be smaller than the value given to @option{--snminarea}. Recall that the clumps were defined on the convolved image so @option{--snminarea} should be larger. @item -O FLT @itemx --objbordersn=FLT The maximum Signal to noise ratio of the rivers between two grown clumps in order to consider them as separate `objects'. If the Signal to noise ratio of the river between two grown clumps is larger than this value, they are defined to be part of one `object'. Note that the physical reality of these `objects' can never be established with one image, or even multiple images from one broad-band filter. Any method we devise to define `object's over a detected region is ultimately subjective. Two very distant galaxies or satellites in one halo might lie in the same line of sight and be detected as clumps on one detection. On the other hand, the connection (through a spiral arm or tidal tail for example) between two parts of one galaxy might have such a low surface brightness that they are broken up into multiple detections or objects. In fact if you have noticed, exactly for this purpose, this is the only Signal to noise ratio that the user gives into NoiseChisel. The `true' detections and clumps can be objectively identified from the noise characteristics of the image, so you do not have to give any hand input Signal to noise ratio. @item --checksegmentation A file with the suffix @file{_seg.fits} will be created. This file keeps all the relevant steps in finding true clumps and segmenting the detections into multiple objects in various extensions. Having read the paper or the steps above. Examining this file can be an excellent guide in choosing the best set of parameters. Note that calling this function will significantly slow NoiseChisel. In verbose mode (without the @option{--quiet} option, see @ref{Operating mode options}) the important steps (along with their extension names) will also be reported. With this option, NoiseChisel will abort as soon as the two tables are created. This behavior can be disabled with @option{--continueaftercheck}. @end table @node Segment output, , Segmentation options, Invoking astsegment @subsubsection Segment output The main output of Segment are two label datasets (with integer types, separating the dataset's elements into different classes). They have HDU/extension names of @code{CLUMPS} and @code{OBJECTS}. Similar to all Gnuastro's FITS outputs, the zero-th extension/HDU of the main output file only contains header keywords and image or table. It contains the Segment input files and parameters (option names and values) as FITS keywords. Note that if an option name is longer than 8 characters, the keyword name is the second word. The first word is @code{HIERARCH}. Also note that according to the FITS standard, the keyword names must be in capital letters, therefore, if you want to use Grep to inspect these keywords, use the @option{-i} option, like the example below. @example $ astfits image_segmented.fits -h0 | grep -i snquant @end example @cindex DS9 @cindex SAO DS9 By default, besides the @code{CLUMPS} and @code{OBJECTS} extensions, Segment's output will also contain the (technically redundant) sky-subtracted input dataset (@code{INPUT-NO-SKY}) and the sky standard deviation dataset (@code{SKY_STD}, if it was not a constant number). This can help in visually inspecting the result when viewing the images as a ``Multi-extension data cube'' in SAO DS9 for example, (see @ref{Viewing FITS file contents with DS9 or TOPCAT}). You can simply flip through the extensions and see the same region of the image and its corresponding clumps/object labels. It also makes it easy to feed the output (as one file) into MakeCatalog when you intend to make a catalog afterwards (see @ref{MakeCatalog}. To remove these redundant extensions from the output (for example, when designing a pipeline), you can use @option{--rawoutput}. The @code{OBJECTS} and @code{CLUMPS} extensions can be used as input into @ref{MakeCatalog} to generate a catalog for higher-level analysis. If you want to treat each clump separately, you can give a very large value (or even a NaN, which will always fail) to the @option{--gthresh} option (for example, @code{--gthresh=1e10} or @code{--gthresh=nan}), see @ref{Segmentation options}. For a complete definition of clumps and objects, please see Section 3.2 of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015} and @ref{Segmentation options}. The clumps are ``true'' local maxima (minima if @option{--minima} is called) and their surrounding pixels until a local minimum/maximum (caused by noise fluctuations, or another ``true'' clump). Therefore it may happen that some of the input detections are not covered by clumps at all (very diffuse objects without any strong peak), while some objects may contain many clumps. Even in those that have clumps, there will be regions that are too diffuse. The diffuse regions (within the input detected regions) are given a negative label (-1) to help you separate them from the undetected regions (with a value of zero). Each clump is labeled with respect to its host object. Therefore, if an object has three clumps for example, the clumps within it have labels 1, 2 and 3. As a result, if an initial detected region has multiple objects, each with a single clump, all the clumps will have a label of 1. The total number of clumps in the dataset is stored in the @code{NCLUMPS} keyword of the @code{CLUMPS} extension and printed in the verbose output of Segment (when @option{--quiet} is not called). The @code{OBJECTS} extension of the output will give a positive counter/label to every detected pixel in the input. As described in Akhlaghi and Ichikawa [2015], the true clumps are grown until a certain threshold. If the grown clumps touch other clumps and the connection is strong enough, they are considered part of the same @emph{object}. Once objects (grown clumps) are identified, they are grown to cover the whole detected area. The options to configure the output of Segment are listed below: @table @option @item --continueaftercheck Do not abort Segment after producing the check image(s). The usage of this option is identical to NoiseChisel's @option{--continueaftercheck} option (@ref{NoiseChisel input}). Please see the descriptions there for more. @item --noobjects Abort Segment after finding true clumps and do not continue with finding options. Therefore, no @code{OBJECTS} extension will be present in the output. Each true clump in @code{CLUMPS} will get a unique label, but diffuse regions will still have a negative value. To make a catalog of the clumps, the input detection map (where all the labels are one) can be fed into @ref{MakeCatalog} along with the input detection map to Segment (that only had a value of @code{1} for all detected pixels) with @option{--clumpscat}. In this way, MakeCatalog will assume all the clumps belong to a single ``object''. @item --grownclumps In the output @code{CLUMPS} extension, store the grown clumps. If a detected region contains no clumps or only one clump, then it will be fully given a label of @code{1} (no negative valued pixels). @item --rawoutput Only write the @code{CLUMPS} and @code{OBJECTS} datasets in the output file. Without this option (by default), the first and last extensions of the output will the Sky-subtracted input dataset and the Sky standard deviation dataset (if it was not a number). When the datasets are small, these redundant extensions can make it convenient to inspect the results visually or feed the output to @ref{MakeCatalog} for measurements. Ultimately both the input and Sky standard deviation datasets are redundant (you had them before running Segment). When the inputs are large/numerous, these extra dataset can be a burden. @end table @cartouche @noindent @cindex Compression @strong{Save space:} with the @option{--rawoutput}, Segment's output will only be two labeled datasets (only containing integers). Since they have no noise, such datasets can be compressed very effectively (without any loss of data) with exceptionally high compression ratios. You can use the following command to compress it with the best ratio: @cindex GNU Gzip @example $ gzip --best segment_output.fits @end example @noindent The resulting @file{.fits.gz} file can then be fed into any of Gnuastro's programs directly, without having to decompress it separately (it will just take them a little longer, because they have to decompress it internally before use). @end cartouche When the input is a 2D image, to inspect NoiseChisel's output you can configure SAO DS9 in your Graphic User Interface (GUI) to open NoiseChisel's output as a multi-extension data cube. This will allow you to flip through the different extensions and visually inspect the results. This process has been described for the GNOME GUI (most common GUI in GNU/Linux operating systems) in @ref{Viewing FITS file contents with DS9 or TOPCAT}. @node MakeCatalog, Match, Segment, Data analysis @section MakeCatalog At the lowest level, a dataset (for example, an image) is just a collection of values, placed after each other in any number of dimensions (for example, an image is a 2D dataset). Each data-element (pixel) just has two properties: its position (relative to the rest) and its value. In higher-level analysis, an entire dataset (an image for example) is rarely treated as a singular entity@footnote{You can derive the over-all properties of a complete dataset (1D table column, 2D image, or 3D data-cube) treated as a single entity with Gnuastro's Statistics program (see @ref{Statistics}).}. You usually want to know/measure the properties of the (separate) scientifically interesting targets that are embedded in it. For example, the magnitudes, positions and elliptical properties of the galaxies that are in the image. MakeCatalog is Gnuastro's program for localized measurements over a dataset. In other words, MakeCatalog is Gnuastro's program to convert low-level datasets (like images), to high level catalogs. The role of MakeCatalog in a scientific analysis and the benefits of its model (where detection/segmentation is separated from measurement) is discussed in Akhlaghi @url{https://arxiv.org/abs/1611.06387v1,2016}@footnote{A published paper cannot undergo any more change, so this manual is the definitive guide.} and summarized in @ref{Detection and catalog production}. We strongly recommend reading this short paper for a better understanding of this methodology. Understanding the effective usage of MakeCatalog, will thus also help effective use of other (lower-level) Gnuastro's programs like @ref{NoiseChisel} or @ref{Segment}. It is important to define your regions of interest for measurements @emph{before} running MakeCatalog. MakeCatalog is specialized in doing measurements accurately and efficiently. Therefore MakeCatalog will not do detection, segmentation, or defining apertures on requested positions in your dataset. Following Gnuastro's modularity principle, there are separate and highly specialized and customizable programs in Gnuastro for these other jobs as shown below (for a usage example in a real-world analysis, see @ref{General program usage tutorial} and @ref{Detecting large extended targets}). @itemize @item @ref{Arithmetic}: Detection with a simple threshold. @item @ref{NoiseChisel}: Advanced detection. @item @ref{Segment}: Segmentation (substructure over detections). @item @ref{MakeProfiles}: Aperture creation for known positions. @end itemize These programs will/can return labeled dataset(s) to be fed into MakeCatalog. A labeled dataset for measurement has the same size/dimensions as the input, but with integer valued pixels that have the label/counter for each sub-set of pixels that must be measured together. For example, all the pixels covering one galaxy in an image, get the same label. The requested measurements are then done on similarly labeled pixels. The final result is a catalog where each row corresponds to the measurements on pixels with a specific label. For example, the flux weighted average position of all the pixels with a label of 42 will be written into the 42nd row of the output catalog/table's central position column@footnote{See @ref{Measuring elliptical parameters} for a discussion on this and the derivation of positional parameters, which includes the center.}. Similarly, the sum of all these pixels will be the 42nd row in the sum column, etc. Pixels with labels equal to, or smaller than, zero will be ignored by MakeCatalog. In other words, the number of rows in MakeCatalog's output is already known before running it (the maximum value of the labeled dataset). Before getting into the details of running MakeCatalog (in @ref{Invoking astmkcatalog}, we will start with a discussion on the basics of its approach to separating detection from measurements in @ref{Detection and catalog production}. A very important factor in any measurement is understanding its validity range, or limits. Therefore in @ref{Quantifying measurement limits}, we will discuss how to estimate the reliability of the detection and basic measurements. This section will continue with a derivation of elliptical parameters from the labeled datasets in @ref{Measuring elliptical parameters}. For those who feel MakeCatalog's existing measurements/columns are not enough and would like to add further measurements, in @ref{Adding new columns to MakeCatalog}, a checklist of steps is provided for readily adding your own new measurements/columns. @menu * Detection and catalog production:: Discussing why/how to treat these separately * Brightness flux magnitude:: More on Magnitudes, surface brightness, etc. * Quantifying measurement limits:: For comparing different catalogs. * Measuring elliptical parameters:: Estimating elliptical parameters. * Adding new columns to MakeCatalog:: How to add new columns. * MakeCatalog measurements:: List of all the measurements/columns by MakeCatalog. * Invoking astmkcatalog:: Options and arguments to MakeCatalog. @end menu @node Detection and catalog production, Brightness flux magnitude, MakeCatalog, MakeCatalog @subsection Detection and catalog production Most existing common tools in low-level astronomical data-analysis (for example, SExtractor@footnote{@url{https://www.astromatic.net/software/sextractor}}) merge the two processes of detection and measurement (catalog production) in one program. However, in light of Gnuastro's modularized approach (modeled on the Unix system) detection is separated from measurements and catalog production. This modularity is therefore new to many experienced astronomers and deserves a short review here. Further discussion on the benefits of this methodology can be seen in Akhlaghi @url{https://arxiv.org/abs/1611.06387v1,2016}. As discussed in the introduction of @ref{MakeCatalog}, detection (identifying which pixels to do measurements on) can be done with different programs. Their outputs (a labeled dataset) can be directly fed into MakeCatalog to do the measurements and write the result as a catalog/table. Beyond that, Gnuastro's modular approach has many benefits that will become clear as you get more experienced in astronomical data analysis and want to be more creative in using your valuable data for the exciting scientific project you are working on. In short the reasons for this modularity can be classified as below: @itemize @item Simplicity/robustness of independent, modular tools: making a catalog is a logically separate process from labeling (detection, segmentation, or aperture production). A user might want to do certain operations on the labeled regions before creating a catalog for them. Another user might want the properties of the same pixels/objects in another image (another filter for example) to measure the colors or SED fittings. Here is an example of doing both: suppose you have images in various broad band filters at various resolutions and orientations. The image of one color will thus not lie exactly on another or even be in the same scale. However, it is imperative that the same pixels be used in measuring the colors of galaxies. To solve the problem, NoiseChisel can be run on the reference image to generate the labeled detection image. Afterwards, the labeled image can be warped into the grid of the other color (using @ref{Warp}). MakeCatalog will then generate the same catalog for both colors (with the different labeled images). It is currently customary to warp the images to the same pixel grid, however, modification of the scientific dataset is very harmful for the data and creates correlated noise. It is much more accurate to do the transformations on the labeled image. @item Complexity of a monolith: Adding in a catalog functionality to the detector program will add several more steps (and many more options) to its processing that can equally well be done outside of it. This makes following what the program does harder for the users and developers, it can also potentially add many bugs. As an example, if the parameter you want to measure over one profile is not provided by the developers of MakeCatalog. You can simply open this tiny little program and add your desired calculation easily. This process is discussed in @ref{Adding new columns to MakeCatalog}. However, if making a catalog was part of NoiseChisel for example, adding a new column/measurement would require a lot of energy to understand all the steps and internal structures of that huge program. It might even be so intertwined with its processing, that adding new columns might cause problems/bugs in its primary job (detection). @end itemize @node Brightness flux magnitude, Quantifying measurement limits, Detection and catalog production, MakeCatalog @subsection Brightness, Flux, Magnitude and Surface brightness @cindex ADU @cindex Gain @cindex Counts Astronomical data pixels are usually in units of counts@footnote{Counts are also known as analog to digital units (ADU).} or electrons or either one divided by seconds. To convert from the counts to electrons, you will need to know the instrument gain. In any case, they can be directly converted to energy or energy/time using the basic hardware (telescope, camera and filter) information (that is summarized in the @emph{zero point}, and we will discuss below). We will continue the discussion assuming the pixels are in units of energy/time. @table @asis @cindex Flux @cindex Luminosity @cindex Brightness @item Brightness The @emph{brightness} of an object is defined as its measured energy in units of time. If our detector pixels directly measured the energy from the astronomical object@footnote{In practice, the measured pixels don't just count the astronomical object's energy: imaging detectors insert a certain bias level before the exposure, they amplify the photo-electrons, there are optical artifacts like flat-fielding, and finally, there is the background light.}, then the brightness would be the total sum of pixel values (energy) associated to the object, divided by the exposure time. The @emph{flux} of an object is defined in units of energy/time/collecting-area. For an astronomical target, the flux is therefore defined as its brightness divided by the area used to collect the light from the source; or the telescope aperture (for example, in units of @mymath{cm^2}). Knowing the flux (@mymath{f}) and distance to the object (@mymath{r}), we can define its @emph{luminosity}: @mymath{L=4{\pi}r^2f}. Therefore, while flux and luminosity are intrinsic properties of the object, brightness depends on our detecting tools (hardware and software). In low-level observational astronomy data analysis, we are usually more concerned with measuring the brightness, because it is the thing we directly measure from the image pixels and create in catalogs. On the other hand, luminosity is used in higher-level analysis (after image contents are measured as catalogs to deduce physical interpretations, because high-level things like distance/redshift need to be calculated). At this stage, it is just important avoid confusion between luminosity and brightness because both have the same units of energy per seconds. @item Magnitude @cindex Magnitudes from flux @cindex Flux to magnitude conversion @cindex Astronomical Magnitude system Images of astronomical objects span over a very large range of brightness: the Sun (as the brightest object) is roughly @mymath{2.5^{60}=10^{24}} times brighter than the fainter galaxies we can currently detect in the deepest images. Therefore discussing brightness directly will involve a large range of values which is inconvenient. So astronomers have chosen to use a logarithmic scale for the brightness of astronomical objects. @cindex Hipparchus of Nicaea But the logarithm can only be usable with a dimensionless value that is always positive. Fortunately brightness is always positive (at least in theory@footnote{In practice, for very faint objects, if the background brightness is over-subtracted, we may end up with a negative ``brightness'' or sum of pixels in a real object.}). To remove the dimensions, we divide the brightness of the object (@mymath{B}) by a reference brightness (@mymath{B_r}). We then define a logarithmic scale as @mymath{magnitude} through the relation below. The @mymath{-2.5} factor in the definition of magnitudes is a legacy of the our ancient colleagues and in particular Hipparchus of Nicaea (190-120 BC). @dispmath{m-m_r=-2.5\log_{10} \left( B \over B_r \right)} @noindent @mymath{m} is defined as the magnitude of the object and @mymath{m_r} is the pre-defined magnitude of the reference brightness. For estimating the error in measuring a magnitude, see @ref{Quantifying measurement limits}. @item Zero point @cindex Zero point magnitude @cindex Magnitude zero point A unique situation in the magnitude equation above occurs when the reference brightness is unity (@mymath{B_r=1}). This brightness will thus summarize all the hardware-specific parameters discussed above (like the conversion of pixel values to physical units) into one number. That reference magnitude is commonly known as the @emph{Zero point} magnitude because when @mymath{B=B_r=1}, the right side of the magnitude definition above will be zero. Using the zero point magnitude (@mymath{Z}), we can write the magnitude relation above in a more simpler format: @dispmath{m = -2.5\log_{10}(B) + Z} @cindex Janskys (Jy) @cindex AB magnitude @cindex Magnitude, AB Gnuastro has an installed script to estimate the zero point of any image, see @ref{Zero point estimation} (it contains practical tutorials to help you get started fast). Having the zero point of an image, you can convert its pixel values to physical units like microJanskys (or @mymath{\mu{}Jy}). This enables direct pixel-based comparisons with images from other instruments@footnote{Comparing data from different instruments assumes instrument and observation signatures are properly corrected, things like the flat-field or the Sky absorption. It is also valid for pixel values, assuming that factors that can change the morphology (like the @ref{PSF}) are the same.}. Jansky is a commonly used unit for measuring spectral flux density and one Jansky is equivalent to @mymath{10^{-26} W/m^2/Hz} (watts per square meter per hertz). This conversion can be done with the fact that in the AB magnitude standard@footnote{@url{https://en.wikipedia.org/wiki/AB_magnitude}}, @mymath{3631Jy} corresponds to the zero-th magnitude, therefore @mymath{B\equiv3631\times10^{6}\mu{Jy}} and @mymath{m\equiv0}. We can therefore estimate the brightness (@mymath{B_z}, in @mymath{\mu{Jy}}) corresponding to the image zero point (@mymath{Z}) using this equation: @dispmath{m - Z = -2.5\log_{10}(B/B_z)} @dispmath{0 - Z = -2.5\log_{10}({3631\times10^{6}\over B_z})} @dispmath{B_z = 3631\times10^{\left(6 - {Z \over 2.5} \right)} \mu{Jy}} @cindex SDSS Because the image zero point corresponds to a pixel value of @mymath{1}, the @mymath{B_z} value calculated above also corresponds to a pixel value of @mymath{1}. Therefore you simply have to multiply your image by @mymath{B_z} to convert it to @mymath{\mu{Jy}}. Do not forget that this only applies when your zero point was also estimated in the AB magnitude system. On the command-line, you can estimate this value for a certain zero point with AWK, then multiply it to all the pixels in the image with @ref{Arithmetic}. For example, let's assume you are using an SDSS image with a zero point of 22.5: @example bz=$(echo 22.5 | awk '@{print 3631 * 10^(6-$1/2.5)@}') astarithmetic sdss.fits $bz x --output=sdss-in-muJy.fits @end example @noindent But in Gnuastro, it gets even easier: Arithmetic has an operator called @code{counts-to-jy}. This will directly convert your image pixels (in units of counts) to Janskys though a provided AB Magnitude-based zero point like below. See @ref{Arithmetic operators} for more. @example $ astarithmetic sdss.fits 22.5 counts-to-jy @end example @cartouche @noindent @strong{Be careful with the exposure time:} as described at the start of this section, we are assuming your data are in units of counts/sec. As a result, the counts you get from the command above, are only for one second of exposure! Please see the discussion below in ``Magnitude to counts'' for more. @end cartouche @item Magnitude to counts (accounting for exposure time) @cindex Exposure time Until now, we had assumed that the data are in units of counts/sec. As a result, the equations given above (in the ``Zero point'' item to convert magnitudes to pixel counts), give the count level for the reference (1 second) exposure. But we rarely take 1 second exposures! It is therefore very important to take the exposure time into account in scenarios like simulating observations with varying exposure times (where you need to know how many counts the object of a certain magnitude will add to a certain image with a certain exposure time). To clarify the concept, let's define @mymath{C} as the @emph{counted} electrons (which has a linear relation with the photon energy entering the CCD pixel). In this case, if an object of brightness @mymath{B} is observed for @mymath{t} seconds, it will accumulate @mymath{C=B\times t} counts@footnote{Recall that counts another name for ADUs, which already includes the CCD gain.}. Therefore, the generic magnitude equation above can be written as: @dispmath{m = -2.5\log_{10}(B) + Z = -2.5\log_{10}(C/t) + Z} @noindent From this, we can derive @mymath{C(t)} in relation to @mymath{C(1)}, or counts from a 1 second exposure, using this relation: @dispmath{C(t) = t\times10^{(m-Z)/2.5} = t\times C(1)} In other words, you should simply multiply the counts for one second with the number of observed seconds. Another approach is to shift the time-dependence of the counts into the zero point (after all exposure time is also a hardware issue). Let's derive the equation below: @dispmath{m = -2.5\log_{10}(C/t) + Z = -2.5\log_{10}(C) + 2.5\log_{10}(t) + Z} Therefore, defining an exposure-time-dependent zero point as @mymath{Z(t)}, we can directly correlate a certain object's magnitude with counts after an exposure of @mymath{t} seconds: @dispmath{m = -2.5\log_{10}(C) + Z(t) \quad\rm{where}\quad Z(t)=Z + 2.5\log_{10}(t)} This solution is useful in programs like @ref{MakeCatalog} or @ref{MakeProfiles}, when you cannot (or do not want to: because of the extra storage/speed costs) manipulate the values image (for example, divide it by the exposure time to use a counts/sec zero point). @item Surface brightness @cindex Steradian @cindex Angular coverage @cindex Celestial sphere @cindex Surface brightness @cindex SI (International System of Units) Another important concept is the distribution of an object's brightness over its area. For this, we define the @emph{surface brightness} to be the magnitude of an object's brightness divided by its solid angle over the celestial sphere (or coverage in the sky, commonly in units of arcsec@mymath{^2}). The solid angle is expressed in units of arcsec@mymath{^2} because astronomical targets are usually much smaller than one steradian. Recall that the steradian is the dimension-less SI unit of a solid angle and 1 steradian covers @mymath{1/4\pi} (almost @mymath{8\%}) of the full celestial sphere. Surface brightness is therefore most commonly expressed in units of mag/arcsec@mymath{^2}. For example, when the brightness is measured over an area of A arcsec@mymath{^2}, then the surface brightness becomes: @dispmath{S = -2.5\log_{10}(B/A) + Z = -2.5\log_{10}(B) + 2.5\log_{10}(A) + Z} @noindent In other words, the surface brightness (in units of mag/arcsec@mymath{^2}) is related to the object's magnitude (@mymath{m}) and area (@mymath{A}, in units of arcsec@mymath{^2}) through this equation: @dispmath{S = m + 2.5\log_{10}(A)} A common mistake is to follow the mag/arcsec@mymath{^2} unit literally, and divide the object's magnitude by its area. But this is wrong because magnitude is a logarithmic scale while area is linear. It is the brightness that should be divided by the solid angle because both have linear scales. The magnitude of that ratio is then defined to be the surface brightness. One usual application of this is to convert an image's pixel values to surface brightness, when you know its zero point. This can be done with the two simple commands below. First, we derive the pixel area (in arcsec@mymath{^2}) then we use Arithmetic to convert the pixels into surface brightness, see below for the details. @example $ zeropoint=22.5 $ pixarea=$(astfits image.fits --pixelareaarcsec2) $ astarithmetic image.fits $zeropoint $pixarea counts-to-sb \ --output=image-sb.fits @end example See @ref{Reverse polish notation} for more on Arithmetic's notation and @ref{Arithmetic operators} for a description of each operator. And see @ref{FITS images in a publication} for a fully working tutorial on how to optimally convert a FITS image to a PDF image for usage in a publication using the surface brightness conversion shown above. @cartouche @noindent @strong{Do not warp or convolve magnitude or surface brightness images:} Warping an image involves calculating new pixel values (of the new pixel grid) from the old pixel values. Convolution is also a process of finding the weighted mean of pixel values. During these processes, many arithmetic operations are done on the original pixel values, for example, addition or multiplication. However, @mymath{log_{10}(a+b)\ne log_{10}(a)+log_{10}(b)}. Therefore after calculating a magnitude or surface brightness image, do not apply any such operations on it! If you need to warp or convolve the image, do it @emph{before} the conversion. @end cartouche @end table @node Quantifying measurement limits, Measuring elliptical parameters, Brightness flux magnitude, MakeCatalog @subsection Quantifying measurement limits @cindex Depth of data @cindex Clump magnitude limit @cindex Object magnitude limit @cindex Limit, object/clump magnitude @cindex Magnitude, object/clump detection limit No measurement on a real dataset can be perfect: you can only reach a certain level/limit of accuracy and a meaningful (scientific) analysis requires an understanding of these limits. Different datasets have different noise properties and different detection methods (one method/algorithm/software that is run with a different set of parameters is considered as a different detection method) will have different abilities to detect or measure certain kinds of signal (astronomical objects) and their properties in the dataset. Hence, quantifying the detection and measurement limitations with a particular dataset and analysis tool is the most crucial/critical aspect of any high-level analysis. In two separate tutorials, we have touched upon some of these points. So to see the discussions below in action (on real data), see @ref{Measuring the dataset limits} and @ref{Image surface brightness limit}. Here, we will review some of the most commonly used methods to quantify the limits in astronomical data analysis and how MakeCatalog makes it easy to measure them. Depending on the higher-level analysis, there are more tests that must be done, but these are relatively low-level and usually necessary in most cases. In astronomy, it is common to use the magnitude (a unit-less scale) and physical units, see @ref{Brightness flux magnitude}. Therefore the measurements discussed here are commonly used in units of magnitudes. @menu * Standard deviation vs error:: The std is not a measure of the error. * Magnitude measurement error of each detection:: Error in measuring magnitude. * Surface brightness error of each detection:: Error in measuring the Surface brightness. * Completeness limit of each detection:: Possibility of detecting similar objects? * Upper limit magnitude of each detection:: How reliable is your magnitude? * Magnitude limit of image:: Measured magnitude of objects at certain S/N. * Surface brightness limit of image:: Extrapolate per-pixel noise-level to standard units. * Upper limit surface brightness of image:: Measure the noise-level for a certain aperture. @end menu @node Standard deviation vs error, Magnitude measurement error of each detection, Quantifying measurement limits, Quantifying measurement limits @subsubsection Standard deviation vs error The error and the standard deviation are sometimes confused with each other. Therefore, before continuing with the various measurement limits below, let's review these two fundamental concepts. Instead of going into the theoretical definitions of the two (which you can see in their respective Wikipedia pages), we'll discuss the concepts in a hands-on and practical way here. Let's simulate an observation of the sky, but without any astronomical sources! In other words, where we only a background flux level (from the sky emission). With the first command below, let's make an image called @file{1.fits} that contains @mymath{200\times200} pixels that are filled with random noise from a Poisson distribution with a mean of 100 counts (the flux from the background sky). Recall that the Poisson distribution is equal to a normal distribution for larger mean values (as in this case). The standard deviation (@mymath{\sigma}) of the Poisson distribution is the square root of the mean, see @ref{Photon counting noise}. With the second command, we'll have a look at the image. Note that due to the random nature of the noise, the values reported in the next steps on your computer will be very slightly different. To reproducible exactly the same values in different runs, see @ref{Generating random numbers}, and for more on the first command, see @ref{Arithmetic}. @example $ astarithmetic 200 200 2 makenew 100 mknoise-poisson \ --output=1.fits $ astscript-fits-view 1.fits @end example Each pixel shows the result of one sampling from the Poisson distribution. In other words, assuming the sky emission in our simulation is constant over our field of view, each pixel's value shows one measurement of the sky emission. Statistically speaking, a ``measurement'' is a sampling from an underlying distribution of values. Through our measurements, we aim to identify that underlying distribution (the ``truth'')! With the command below, let's look at the pixel statistics of @file{1.fits} (output is shown immediately under it). @c If you change this output, replace the standard deviation (10.0) below @c in the text. @example $ aststatistics 1.fits Statistics (GNU Astronomy Utilities) @value{VERSION} ------- Input: 1.fits (hdu: 1) ------- Number of elements: 40000 Minimum: 61 Maximum: 155 Median: 100 Mean: 100.044925 Standard deviation: 10.00066032 ------- Histogram: | * * | * * * | * * * * | * * * * * | * * * * * | * * ******** * * | * ************* * | * ****************** * | ************************ * | ********************************* |* ********************************************************** ** * |---------------------------------------------------------------------- @end example As expected, you see that the ASCII histogram nicely resembles a normal distribution. The measured mean and standard deviation (@mymath{\sigma_x}) are also very similar to the input (mean of 100, standard deviation of @mymath{\sigma=10}). But the measured mean (and standard deviation) aren't exactly equal to the input! Every time we make a different simulated image from the same distribution, the measured mean and standard deviation will slightly differ. With the second command below, let's build 500 images like above and measure their mean and standard deviation. The outputs will be written into a file (@file{mean-stds.txt}; in the first command we are deleting it to make sure we write into an empty file within the loop). With the third command, let's view the top 10 rows: @example $ rm -f mean-stds.txt $ for i in $(seq 500); do \ astarithmetic 200 200 2 makenew 100 mknoise-poisson \ --output=$i.fits --quiet; \ aststatistics $i.fits --mean --std >> mean-stds.txt; \ echo "$i: complete"; \ done $ asttable mean-stds.txt -Y --head=10 99.989381 9.936407 100.036622 10.059997 100.006054 9.985470 99.944535 9.960069 100.050318 9.970116 100.002718 9.905395 100.067555 9.964038 100.027167 10.018562 100.051951 9.995859 100.000212 9.970293 @end example From this table, you see that each simulation has produced a slightly different measured mean and measured standard deviation (@mymath{\sigma_x}) that are just fluctuating around the input mean (which was 100) and input standard deviation (@mymath{\sigma=10}). Let's have a look at the distribution of mean measurements: @example $ aststatistics mean-stds.txt -c1 Statistics (GNU Astronomy Utilities) @value{VERSION} ------- Input: mean-stds.txt Column: 1 ------- Number of elements: 500 Minimum: 9.98183528700191e+01 Maximum: 1.00146490891332e+02 Mode: 99.99709739 Mode quantile: 0.49498998 Median: 9.99977393190436e+01 Mean: 99.99891826 Standard deviation: 0.04901635275 ------- Histogram: | * | * ** | ****** **** * * | ****** **** * * * | * * ************* * * | * ****************** ** | * ********************* *** * | * ***************************** *** | *** ********************************** * | *** ******************************************* ** | * ************************************************* ** * |---------------------------------------------------------------------- @end example @cindex Standard error of mean The standard deviation of the various mean measurements above shows the scatter in measuring the mean with an image of this size from this underlying distribution. This is therefore defined as the @emph{standard error of the mean}, or ``error'' for short (since most measurements are actually the mean of a population) and shown with @mymath{\widehat\sigma_{\bar{x}}}. From the example above, you see that the error is smaller than the standard deviation (smaller when you have a larger sample). In fact, @url{https://en.wikipedia.org/wiki/Standard_error#Derivation, it can be shown} that this ``error of the mean'' (@mymath{\sigma_{\bar{x}}}) is related to the distribution standard deviation (@mymath{\sigma}) through the following equation. Where @mymath{N} is the number of points used to measure the mean in one sample (@mymath{200\times200=40000} in this case). Note that the @mymath{10.0} below was reported as ``standard deviation'' in the first run of @code{aststatistics} on @file{1.fits} above): @c The 10.0 depends on the 'aststatistics 1.fits' command above. @dispmath{\sigma_{\bar{x}}=\frac{\sigma}{\sqrt{N}} \quad\quad {\rm or} \quad\quad \widehat\sigma_{\bar{x}}\approx\frac{\sigma_x}{\sqrt{N}} = \frac{10.0}{200} = 0.05} @noindent Taking the considerations above into account, we should clearly distinguish the following concepts when talking about the standard deviation or error: @table @asis @item Standard deviation of population This is the standard deviation of the underlying distribution (10 in the example above), and shown by @mymath{\sigma}. This is something you can never measure, and is just the ideal value. @item Standard deviation of mean Ideal error of measuring the mean (assuming we know @mymath{\sigma}). @item Standard deviation of sample (i.e., @emph{Standard deviation}) Measured Standard deviation from a sampling of the ideal distribution. This is the second column of @file{mean-stds.txt} above and is shown with @mymath{\sigma_x} above. In astronomical literature, this is simply referred to as the ``standard deviation''. In other words, the standard deviation is computed on the input itself and MakeCatalog just needs a ``values'' file. For example, when measuring the standard deviation of an astronomical object using MakeCatalog it is computed directly from the input values. @item Standard error (i.e., @emph{error}) Measurable scatter of measuring the mean (@mymath{\widehat\sigma_{\bar{x}}}) that can be estimated from the size of the sample and the measured standard deviation (@mymath{\sigma_x}). In astronomical literature, this is simply referred to as the ``error''. In other words, when asking for an ``error'' measurement with MakeCatalog, a separate standard deviation dataset should be always provided. This dataset should take into account all sources of scatter. For example, during the reduction of an image, the standard deviation dataset should take into account the dispersion of each pixel that comes from the bias, dark, flat fielding, etc. If this image is not available, it is possible to use the @code{SKY_STD} extension from NoiseChisel as an estimation. For more see @ref{NoiseChisel output}. @end table @node Magnitude measurement error of each detection, Surface brightness error of each detection, Standard deviation vs error, Quantifying measurement limits @subsubsection Magnitude measurement error of each detection The raw error in measuring the magnitude is only meaningful when the object's magnitude is brighter than the upper-limit magnitude (see below). As discussed in @ref{Brightness flux magnitude}, the magnitude (@mymath{M}) of an object with brightness @mymath{B} and zero point magnitude @mymath{z} can be written as: @dispmath{M=-2.5\log_{10}(B)+z} @noindent Calculating the derivative with respect to @mymath{B}, we get: @dispmath{{dM\over dB} = {-2.5\over {B\times ln(10)}}} @noindent From the Tailor series (@mymath{\Delta{M}=dM/dB\times\Delta{B}}), we can write: @dispmath{\Delta{M} = \left|{-2.5\over ln(10)}\right|\times{\Delta{B}\over{B}}} @noindent But, @mymath{\Delta{B}/B} is just the inverse of the Signal-to-noise ratio (@mymath{S/N}), so we can write the error in magnitude in terms of the signal-to-noise ratio: @dispmath{ \Delta{M} = {2.5\over{S/N\times ln(10)}} } MakeCatalog uses this relation to estimate the magnitude errors. The signal-to-noise ratio is calculated in different ways for clumps and objects, see Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}), but this single equation can be used to estimate the measured magnitude error afterwards for any type of target. @node Surface brightness error of each detection, Completeness limit of each detection, Magnitude measurement error of each detection, Quantifying measurement limits @subsubsection Surface brightness error of each detection @cindex Surface brightness error @cindex Error in surface brightness We can derive the error in measuring the surface brightness based on the surface brightness (SB) equation of @ref{Brightness flux magnitude} and the generic magnitude error (@mymath{\Delta{M}}) of @ref{Magnitude measurement error of each detection}. Let's set @mymath{A} to represent the area and @mymath{\Delta{A}} to represent the error in measuring the area. For more on @mymath{\Delta{A}}, see the description of @option{--spatialresolution} in @ref{MakeCatalog inputs and basic settings}. @dispmath{\Delta{(SB)} = \Delta{M} + \left|{-2.5\over ln(10)}\right|\times{\Delta{A}\over{A}}} In the surface brightness equation mentioned above, @mymath{A} is in units of arcsecond squared and the conversion between arcseconds to pixels is a multiplication factor. Therefore as long as @mymath{A} and @mymath{\Delta{A}} have the same units, it does not matter if they are in arcseconds or pixels. Since the measure of spatial resolution (or area error) is the FWHM of the PSF which is usually defined in terms of pixels, its more intuitive to use pixels for @mymath{A} and @mymath{\Delta{A}}. @node Completeness limit of each detection, Upper limit magnitude of each detection, Surface brightness error of each detection, Quantifying measurement limits @subsubsection Completeness limit of each detection @cindex Completeness As the surface brightness of the objects decreases, the ability to detect them will also decrease. An important statistic is thus the fraction of objects of similar morphology and magnitude that will be detected with our detection algorithm/parameters in a given image. This fraction is known as @emph{completeness}. For brighter objects, completeness is 1: all bright objects that might exist over the image will be detected. However, as we go to objects of lower overall surface brightness, we will fail to detect a fraction of them, and fainter than a certain surface brightness level (for each morphology),nothing will be detectable in the image: you will need more data to construct a ``deeper'' image. For a given profile and dataset, the magnitude where the completeness drops below a certain level (usually above @mymath{90\%}) is known as the completeness limit. @cindex Purity @cindex False detections @cindex Detections false Another important parameter in measuring completeness is purity: the fraction of true detections to all detections. In effect purity is the measure of contamination by false detections: the higher the purity, the lower the contamination. Completeness and purity are anti-correlated: if we can allow a large number of false detections (that we might be able to remove by other means), we can significantly increase the completeness limit. One traditional way to measure the completeness and purity of a given sample is by embedding mock profiles in regions of the image with no detection. However in such a study we must be really careful to choose model profiles as similar to the target of interest as possible. @node Upper limit magnitude of each detection, Magnitude limit of image, Completeness limit of each detection, Quantifying measurement limits @subsubsection Upper limit magnitude of each detection Due to the noisy nature of data, it is possible to get arbitrarily faint magnitudes, especially when you use labels from another image (for example see @ref{Working with catalogs estimating colors}). Given the scatter caused by the dataset's noise, values fainter than a certain level are meaningless: another similar depth observation will give a radically different value. In such cases, measurements like the image magnitude limit are not useful because it is estimated for a certain morphology and is given for the whole image (it is a crude generalization; see see @ref{Magnitude limit of image}). You want a quality measure that is specific to each object. For example, assume that you have done your detection and segmentation on one filter and now you do measurements over the same labeled regions, but on other filters to measure colors (as we did in the tutorial @ref{Segmentation and making a catalog}). Some objects are not going to have any significant signal in the other filters, but for example, you measure magnitude of 36 for one of them! This is clearly unreliable (no dataset in current astronomy is able to detect such a faint signal). In another image with the same depth, using the same filter, you might measure a magnitude of 30 for it, and yet another might give you 33. Furthermore, the total sum of pixel values might actually be negative in some images of the same depth (due to noise). In these cases, no magnitude can be defined and MakeCatalog will place a NaN there (recall that a magnitude is a base-10 logarithm). @cindex Upper limit magnitude @cindex Magnitude, upper limit Using such unreliable measurements will directly affect our analysis, so we must not use the raw measurements. When approaching the limits of your detection method, it is therefore important to be able to identify such cases. But how can we know how reliable a measurement of one object on a given dataset is? When we confront such unreasonably faint magnitudes, there is one thing we can deduce: that if something actually exists under our labeled pixels (possibly buried deep under the noise), it's inherent magnitude is fainter than an @emph{upper limit magnitude}. To find this upper limit magnitude, we place the object's footprint (segmentation map) over a random part of the image where there are no detections, and measure the sum of pixel values within the footprint. Doing this a large number of times will give us a distribution of measurements of the sum. The standard deviation (@mymath{\sigma}) of that distribution can be used to quantify the upper limit magnitude for that particular object (given its particular shape and area): @dispmath{M_{up,n\sigma}=-2.5\times\log_{10}{(n\sigma_m)}+z \quad\quad [mag/target]} @cindex Correlated noise Traditionally, faint/small object photometry was done using fixed circular apertures (for example, with a diameter of @mymath{N} arc-seconds) and there was not much processing involved (to make a deep stack). Hence, the upper limit was synonymous with the surface brightness limit discussed above: one value for the whole image. The problem with this simplified approach is that the number of pixels in the aperture directly affects the final distribution and thus magnitude. Also the image correlated noise might actually create certain patterns, so the shape of the object can also affect the final result. Fortunately, with the much more advanced hardware and software of today, we can make customized segmentation maps (footprint) for each object and have enough computing power to actually place that footprint over many random places. As a result, the per-target upper-limit magnitude and general surface brightness limit have diverged. When any of the upper-limit-related columns requested, MakeCatalog will randomly place each target's footprint over the undetected parts of the dataset as described above, and estimate the required properties. The procedure is fully configurable with the options in @ref{Upper-limit settings}. You can get the full list of upper-limit related columns of MakeCatalog with this command (the extra @code{--} before @code{--upperlimit} is necessary@footnote{Without the extra @code{--}, grep will assume that @option{--upperlimit} is one of its own options, and will thus abort, complaining that it has no option with this name.}): @example $ astmkcatalog --help | grep -- --upperlimit @end example @node Magnitude limit of image, Surface brightness limit of image, Upper limit magnitude of each detection, Quantifying measurement limits @subsubsection Magnitude limit of image @cindex Magnitude limit Suppose we have taken two images of the same field of view with the same CCD, once with a smaller telescope, and once with a larger one. Because we used the same CCD, the noise will be very similar. However, the larger telescope has gathered more light, therefore the same star or galaxy will have a higher signal-to-noise ratio (S/N) in the image taken with the larger one. The same applies for a stacked image of the field compared to a single-exposure image of the same telescope. This concept is used by some researchers to define the ``magnitude limit'' or ``detection limit'' at a certain S/N (sometimes 10, 5 or 3 for example, also written as @mymath{10\sigma}, @mymath{5\sigma} or @mymath{3\sigma}). To do this, they measure the magnitude and signal-to-noise ratio of all the objects within an image and measure the mean (or median) magnitude of objects at the desired S/N. A fully working example of deriving the magnitude limit is available in the tutorials section: @ref{Measuring the dataset limits}. However, this method should be used with extreme care! This is because the shape of the object becomes important in this method: a sharper object will have a higher @emph{measured} S/N compared to a more diffuse object at the same original magnitude. Besides the inherent shape/sharpness of the object, issues like the PSF also become important in this method (because the finally observed shapes of objects are important here): two surveys with the same surface brightness limit (see @ref{Surface brightness limit of image}) will have different magnitude limits if one is taken from space and the other from the ground. @node Surface brightness limit of image, Upper limit surface brightness of image, Magnitude limit of image, Quantifying measurement limits @subsubsection Surface brightness limit of image @cindex Surface brightness As we make more observations on one region of the sky and add/combine the observations into one dataset, both the signal and the noise increase. However, the signal increases much faster than the noise: Assuming you add @mymath{N} datasets with equal exposure times, the signal will increases as a multiple of @mymath{N}, while noise increases as @mymath{\sqrt{N}}. Therefore the signal-to-noise ratio increases by a factor of @mymath{\sqrt{N}}. Visually, fainter (per pixel) parts of the objects/signal in the image will become more visible/detectable. The noise-level is known as the dataset's surface brightness limit. You can think of the noise as muddy water that is completely covering a flat ground@footnote{The ground is the sky value in this analogy, see @ref{Sky value}. Note that this analogy only holds for a flat sky value across the surface of the image or ground.}. The signal (coming from astronomical objects in real data) will be summits/hills that start from the flat sky level (under the muddy water) and their summits can sometimes reach above the muddy water. Let's assume that in your first observation the muddy water has just been stirred and except a few small peaks, you cannot see anything through the mud. As you wait and make more observations/exposures, the mud settles down and the @emph{depth} of the transparent water increases. As a result, more and more summits become visible and the lower parts of the hills (parts with lower surface brightness) can be seen more clearly. In this analogy@footnote{Note that this muddy water analogy is not perfect, because while the water-level remains the same all over a peak, in data analysis, the Poisson noise increases with the level of data.}, height (from the ground) is the @emph{surface brightness} and the height of the muddy water at the moment you combine your data, is your @emph{surface brightness limit} for that moment. @cindex Data's depth The outputs of NoiseChisel include the Sky standard deviation (@mymath{\sigma}) on every group of pixels (a tile) that were calculated from the undetected pixels in each tile, see @ref{Tessellation} and @ref{NoiseChisel output}. Let's take @mymath{\sigma_m} as the median @mymath{\sigma} over the successful meshes in the image (prior to interpolation or smoothing). It is recorded in the @code{MEDSTD} keyword of the @code{SKY_STD} extension of NoiseChisel's output. @cindex ACS camera @cindex Surface brightness limit @cindex Limit, surface brightness On different instruments, pixels cover different spatial angles over the sky. For example, the width of each pixel on the ACS camera on the Hubble Space Telescope (HST) is roughly 0.05 seconds of arc, while the pixels of SDSS are each 0.396 seconds of arc (almost eight times wider@footnote{Ground-based instruments like the SDSS suffer from strong smoothing due to the atmosphere. Therefore, increasing the pixel resolution (or decreasing the width of a pixel) will not increase the received information).}). Nevertheless, irrespective of its sky coverage, a pixel is our unit of data collection. To start with, we define the low-level Surface brightness limit or @emph{depth}, in units of magnitude/pixel with the equation below (assuming the image has zero point magnitude @mymath{z} and we want the @mymath{n}th multiple of @mymath{\sigma_m}). @dispmath{SB_{n\sigma,\rm pixel}=-2.5\times\log_{10}{(n\sigma_m)}+z \quad\quad [mag/pixel]} @cindex XDF survey @cindex CANDELS survey @cindex eXtreme Deep Field (XDF) survey As an example, the XDF survey covers part of the sky that the HST has observed the most (for 85 orbits) and is consequently very small (@mymath{\sim4} minutes of arc, squared). On the other hand, the CANDELS survey, is one of the widest multi-color surveys done by the HST covering several fields (about 720 arcmin@mymath{^2}) but its deepest fields have only 9 orbits observation. The @mymath{1\sigma} depth of the XDF and CANDELS-deep surveys in the near infrared WFC3/F160W filter are respectively 34.40 and 32.45 magnitudes/pixel. In a single orbit image, this same field has a @mymath{1\sigma} depth of 31.32 magnitudes/pixel. Recall that a larger magnitude corresponds to fainter objects, see @ref{Brightness flux magnitude}. @cindex Pixel scale The low-level magnitude/pixel measurement above is only useful when all the datasets you want to use, or compare, have the same pixel size. However, you will often find yourself using, or comparing, datasets from various instruments with different pixel scales (projected pixel width, in arc-seconds). If we know the pixel scale, we can obtain a more easily comparable surface brightness limit in units of: magnitude/arcsec@mymath{^2}. But another complication is that astronomical objects are usually larger than 1 arcsec@mymath{^2}. As a result, it is common to measure the surface brightness limit over a larger (but fixed, depending on context) area. Let's assume that every pixel is @mymath{p} arcsec@mymath{^2} and we want the surface brightness limit for an object covering A arcsec@mymath{^2} (so @mymath{A/p} is the number of pixels that cover an area of @mymath{A} arcsec@mymath{^2}). On the other hand, noise is added in RMS@footnote{If you add three datasets with noise @mymath{\sigma_1}, @mymath{\sigma_2} and @mymath{\sigma_3}, the resulting noise level is @mymath{\sigma_t=\sqrt{\sigma_1^2+\sigma_2^2+\sigma_3^2}}, so when @mymath{\sigma_1=\sigma_2=\sigma_3\equiv\sigma}, then @mymath{\sigma_t=\sigma\sqrt{3}}. In this case, the area @mymath{A} is covered by @mymath{A/p} pixels, so the noise level is @mymath{\sigma_t=\sigma\sqrt{A/p}}.}, hence the noise level in @mymath{A} arcsec@mymath{^2} is @mymath{n\sigma_m\sqrt{A/p}}. But we want the result in units of arcsec@mymath{^2}, so we should divide this by @mymath{A} arcsec@mymath{^2}: @mymath{n\sigma_m\sqrt{A/p}/A=n\sigma_m\sqrt{A/(pA^2)}=n\sigma_m/\sqrt{pA}}. Plugging this into the magnitude equation, we get the @mymath{n\sigma} surface brightness limit, over an area of A arcsec@mymath{^2}, in units of magnitudes/arcsec@mymath{^2}: @dispmath{SB_{{n\sigma,\rm A arcsec}^2}=-2.5\times\log_{10}{\left(n\sigma_m\over \sqrt{pA}\right)+z} \quad\quad [mag/arcsec^2]} @cindex World Coordinate System (WCS) MakeCatalog will calculate the input dataset's @mymath{SB_{n\sigma,\rm pixel}} and @mymath{SB_{{n\sigma,\rm A arcsec}^2}} and will write them as the @code{SBLMAGPIX} and @code{SBLMAG} keywords the output catalog(s), see @ref{MakeCatalog output}. You can set your desired @mymath{n}-th multiple of @mymath{\sigma} and the @mymath{A} arcsec@mymath{^2} area using the following two options respectively: @option{--sfmagnsigma} and @option{--sfmagarea} (see @ref{MakeCatalog output}). Just note that @mymath{SB_{{n\sigma,\rm A arcsec}^2}} is only calculated if the input has World Coordinate System (WCS). Without WCS, the pixel scale cannot be derived. @cindex Correlated noise @cindex Noise, correlated As you saw in its derivation, the calculation above extrapolates the noise in one pixel over all the input's pixels! In other words, all pixels are treated independently in the measurement of the standard deviation. It therefore implicitly assumes that the noise is the same in all of the pixels. But this only happens in individual exposures: reduced data will have correlated noise because they are a stack of many individual exposures that have been warped (thus mixing the pixel values). A more accurate measure which will provide a realistic value for every labeled region is known as the @emph{upper-limit magnitude}, which is discussed in the next section (@ref{Upper limit surface brightness of image}). @node Upper limit surface brightness of image, , Surface brightness limit of image, Quantifying measurement limits @subsubsection Upper limit surface brightness of image @cindex Correlated noise @cindex Noise, correlated As mentioned in @ref{Surface brightness limit of image}, the surface brightness limit assumes independent pixels when deriving the standard deviation (the main input in the equation). It just extrapolates the standard devaiation derived from one pixel to the requested area. But as mentioned at the end of that section, we have correlated noise in our science-ready (deep) images and the noise of the pixels are not independent. Because of this, the surface brightness limit will always under-estimate the surface brightness (give fainter values than what is statistically possible in the data for the requested area). To account for the correlated noise in the images, we need to derive the standard deviation over a group of pixels that fall within a certain footprint/shape. For example over a circular aperture of radius 5.6419 arcsec, or a square with a side length of @mymath{10} arcsec. Depending on the correlated noise systematics, the limit can be (very) different for different shapes, even if they have the same area (as in the circle and square mentioned in the previous sentence: both have an area of 100 arcsec@mymath{^2}). Therefore we need to derive the standard deviation that goes into the surface brightness limit equation over a certain footprint/shape. To do that, we should: @enumerate @item Place the desired footprint many times randomly over all the undetected pixels in an image. In MakeCatalog, the number of these random positions can be configured with @option{--upnum} and you can check their positions with @option{--checkuplim}. @item Calculate the sum of pixel values in each randomly placed footprint. @item Calculate the sigma-clipped standard deviation of the resulting distribution (of sum of pixel values in the randomly placed apertures). Therefore, each footprint's measurement is be independent of the other. @item Calculate the surface brightness of that standrad deviation (after multiplying it with your desired multiple of sigma). For the definition of surface brightness, see @ref{Brightness flux magnitude}. @end enumerate If you have reviewed the previous sections, the measurements over randomly placed apertures should remind you of @ref{Upper limit magnitude of each detection}. Generally, the ``upper limit'' prefix is given to all measurements with this way of measurement. Therefore this limit is called ``Upper limit surface brightness'' of an image (for a multiple of sigma, over a certain shape). Traditionally a circular aperture of a fixed radius (in arcseconds) has been used. In Gnuastro, a labeled image containing the desired shape/aperture can be generated with MakeProfiles. The position of the label is irrelevant because the upper limit measurements are done on the many randomly placed footprints in undetected regions (independent of where the label is positioned). That labeled image should then be given to MakeCatalog, while requesting @option{--upperlimit-sb}. Of course, all detected signal in the image needs to be masked (set to blank/NaN) so MakeCatalog doesn't use randomly placed apertures that overlap with detected signal in the image. Going into the implementation details can get pretty hard to follow in English, so a full hands-on tutorial is available in the second half of @ref{Image surface brightness limit}. Read that tutorial with the same input images and run the commands, and see each output image to get a good understanding of how to properly measure the upper limit surface brightness of your images. @node Measuring elliptical parameters, Adding new columns to MakeCatalog, Quantifying measurement limits, MakeCatalog @subsection Measuring elliptical parameters The shape or morphology of a target is one of the most commonly desired parameters of a target. Here, we will review the derivation of the most basic/simple morphological parameters: the elliptical parameters for a set of labeled pixels. The elliptical parameters are: the (semi-)major axis, the (semi-)minor axis and the position angle along with the central position of the profile. The derivations below follow the SExtractor manual derivations with some added explanations for easier reading. @cindex Moments Let's begin with one dimension for simplicity: Assume we have a set of @mymath{N} values @mymath{B_i} (for example, showing the spatial distribution of a target's brightness), each at position @mymath{x_i}. The simplest parameter we can define is the geometric center of the object (@mymath{x_g}) (ignoring the brightness values): @mymath{x_g=(\sum_ix_i)/N}. @emph{Moments} are defined to incorporate both the value (brightness) and position of the data. The first moment can be written as: @dispmath{\overline{x}={\sum_iB_ix_i \over \sum_iB_i}} @cindex Variance @cindex Second moment @noindent This is essentially the weighted (by @mymath{B_i}) mean position. The geometric center (@mymath{x_g}, defined above) is a special case of this with all @mymath{B_i=1}. The second moment is essentially the variance of the distribution: @dispmath{\overline{x^2}\equiv{\sum_iB_i(x_i-\overline{x})^2 \over \sum_iB_i} = {\sum_iB_ix_i^2 \over \sum_iB_i} - 2\overline{x}{\sum_iB_ix_i\over\sum_iB_i} + \overline{x}^2 ={\sum_iB_ix_i^2 \over \sum_iB_i} - \overline{x}^2} @cindex Standard deviation @noindent The last step was done from the definition of @mymath{\overline{x}}. Hence, the square root of @mymath{\overline{x^2}} is the spatial standard deviation (along the one-dimension) of this particular brightness distribution (@mymath{B_i}). Crudely (or qualitatively), you can think of its square root as the distance (from @mymath{\overline{x}}) which contains a specific amount of the flux (depending on the @mymath{B_i} distribution). Similar to the first moment, the geometric second moment can be found by setting all @mymath{B_i=1}. So while the first moment quantified the position of the brightness distribution, the second moment quantifies how that brightness is dispersed about the first moment. In other words, it quantifies how ``sharp'' the object's image is. @cindex Floating point error Before continuing to two dimensions and the derivation of the elliptical parameters, let's pause for an important implementation technicality. You can ignore this paragraph and the next two if you do not want to implement these concepts. The basic definition (first definition of @mymath{\overline{x^2}} above) can be used without any major problem. However, using this fraction requires two runs over the data: one run to find @mymath{\overline{x}} and another run to find @mymath{\overline{x^2}} from @mymath{\overline{x}}, this can be slow. The advantage of the last fraction above, is that we can estimate both the first and second moments in one run (since the @mymath{-\overline{x}^2} term can easily be added later). The logarithmic nature of floating point number digitization creates a complication however: suppose the object is located between pixels 10000 and 10020. Hence the target's pixels are only distributed over 20 pixels (with a standard deviation @mymath{<20}), while the mean has a value of @mymath{\sim10000}. The @mymath{\sum_iB_i^2x_i^2} will go to very very large values while the individual pixel differences will be orders of magnitude smaller. This will lower the accuracy of our calculation due to the limited accuracy of floating point operations. The variance only depends on the distance of each point from the mean, so we can shift all position by a constant/arbitrary @mymath{K} which is much closer to the mean: @mymath{\overline{x-K}=\overline{x}-K}. Hence we can calculate the second order moment using: @dispmath{ \overline{x^2}={\sum_iB_i(x_i-K)^2 \over \sum_iB_i} - (\overline{x}-K)^2 } @noindent The closer @mymath{K} is to @mymath{\overline{x}}, the better (the sums of squares will involve smaller numbers), as long as @mymath{K} is within the object limits (in the example above: @mymath{10000\leq{K}\leq10020}), the floating point error induced in our calculation will be negligible. For the most simplest implementation, MakeCatalog takes @mymath{K} to be the smallest position of the object in each dimension. Since @mymath{K} is arbitrary and an implementation/technical detail, we will ignore it for the remainder of this discussion. In two dimensions, the mean and variances can be written as: @dispmath{\overline{x}={\sum_iB_ix_i\over B_i}, \quad \overline{x^2}={\sum_iB_ix_i^2 \over \sum_iB_i} - \overline{x}^2} @dispmath{\overline{y}={\sum_iB_iy_i\over B_i}, \quad \overline{y^2}={\sum_iB_iy_i^2 \over \sum_iB_i} - \overline{y}^2} @dispmath{\quad\quad\quad\quad\quad\quad\quad\quad\quad \overline{xy}={\sum_iB_ix_iy_i \over \sum_iB_i} - \overline{x}\times\overline{y}} If an elliptical profile's major axis exactly lies along the @mymath{x} axis, then @mymath{\overline{x^2}} will be directly proportional with the profile's major axis, @mymath{\overline{y^2}} with its minor axis and @mymath{\overline{xy}=0}. However, in reality we are not that lucky and (assuming galaxies can be parameterized as an ellipse) the major axis of galaxies can be in any direction on the image (in fact this is one of the core principles behind weak-lensing by shear estimation). So the purpose of the remainder of this section is to define a strategy to measure the position angle and axis ratio of some randomly positioned ellipses in an image, using the raw second moments that we have calculated above in our image coordinates. Let's assume we have rotated the galaxy by @mymath{\theta}, the new second order moments are: @dispmath{\overline{x_\theta^2} = \overline{x^2}\cos^2\theta + \overline{y^2}\sin^2\theta - 2\overline{xy}\cos\theta\sin\theta } @dispmath{\overline{y_\theta^2} = \overline{x^2}\sin^2\theta + \overline{y^2}\cos^2\theta + 2\overline{xy}\cos\theta\sin\theta} @dispmath{\overline{xy_\theta} = \overline{x^2}\cos\theta\sin\theta - \overline{y^2}\cos\theta\sin\theta + \overline{xy}(\cos^2\theta-\sin^2\theta)} @noindent The best @mymath{\theta} (@mymath{\theta_0}, where major axis lies along the @mymath{x_\theta} axis) can be found by: @dispmath{\left.{\partial \overline{x_\theta^2} \over \partial \theta}\right|_{\theta_0}=0} Taking the derivative, we get: @dispmath{2\cos\theta_0\sin\theta_0(\overline{y^2}-\overline{x^2}) + 2(\cos^2\theta_0-\sin^2\theta_0)\overline{xy}=0} When @mymath{\overline{x^2}\neq\overline{y^2}}, we can write: @dispmath{\tan2\theta_0 = 2{\overline{xy} \over \overline{x^2}-\overline{y^2}}.} @cindex Position angle @noindent MakeCatalog uses the standard C math library's @code{atan2} function to estimate @mymath{\theta_0}, which we define as the position angle of the ellipse. To recall, this is the angle of the major axis of the ellipse with the @mymath{x} axis. By definition, when the elliptical profile is rotated by @mymath{\theta_0}, then @mymath{\overline{xy_{\theta_0}}=0}, @mymath{\overline{x_{\theta_0}^2}} will be the extent of the maximum variance and @mymath{\overline{y_{\theta_0}^2}} the extent of the minimum variance (which are perpendicular for an ellipse). Replacing @mymath{\theta_0} in the equations above for @mymath{\overline{x_\theta}} and @mymath{\overline{y_\theta}}, we can get the semi-major (@mymath{A}) and semi-minor (@mymath{B}) lengths: @dispmath{A^2\equiv\overline{x_{\theta_0}^2}= {\overline{x^2} + \overline{y^2} \over 2} + \sqrt{\left({\overline{x^2}-\overline{y^2} \over 2}\right)^2 + \overline{xy}^2}} @dispmath{B^2\equiv\overline{y_{\theta_0}^2}= {\overline{x^2} + \overline{y^2} \over 2} - \sqrt{\left({\overline{x^2}-\overline{y^2} \over 2}\right)^2 + \overline{xy}^2}} As a summary, it is important to remember that the units of @mymath{A} and @mymath{B} are in pixels (the standard deviation of a positional distribution) and that they represent the spatial light distribution of the object in both image dimensions (rotated by @mymath{\theta_0}). When the object cannot be represented as an ellipse, this interpretation breaks down: @mymath{\overline{xy_{\theta_0}}\neq0} and @mymath{\overline{y_{\theta_0}^2}} will not be the direction of minimum variance. @node Adding new columns to MakeCatalog, MakeCatalog measurements, Measuring elliptical parameters, MakeCatalog @subsection Adding new columns to MakeCatalog MakeCatalog is designed to allow easy addition of different measurements over a labeled image; see Akhlaghi @url{https://arxiv.org/abs/1611.06387v1,2016}. A check-list style description of necessary steps to do that is described in this section. The common development characteristics of MakeCatalog and other Gnuastro programs is explained in @ref{Developing}. We strongly encourage you to have a look at that chapter to greatly simplify your navigation in the code. After adding and testing your column, you are most welcome (and encouraged) to share it with us so we can add to the next release of Gnuastro for everyone else to also benefit from your efforts. MakeCatalog will first pass over each label's pixels two times and do necessary raw/internal calculations. Once the passes are done, it will use the raw information for filling the final catalog's columns. In the first pass it will gather mainly object information and in the second run, it will mainly focus on the clumps, or any other measurement that needs an output from the first pass. These two passes are designed to be raw summations: no extra processing. This will allow parallel processing and simplicity/clarity. So if your new calculation, needs new raw information from the pixels, then you will need to also modify the respective @code{mkcatalog_first_pass} and @code{mkcatalog_second_pass} functions (both in @file{bin/mkcatalog/mkcatalog.c}) and define new raw table columns in @file{main.h} (hopefully the comments in the code are clear enough). In all these different places, the final columns are sorted in the same order (same order as @ref{Invoking astmkcatalog}). This allows a particular column/option to be easily found in all steps. Therefore in adding your new option, be sure to keep it in the same relative place in the list in all the separate places (it does not necessarily have to be in the end), and near conceptually similar options. @table @file @item main.h The @code{objectcols} and @code{clumpcols} enumerated variables (@code{enum}) define the raw/internal calculation columns. If your new column requires new raw calculations, add a row to the respective list. If your calculation requires any other settings parameters, you should add a variable to the @code{mkcatalogparams} structure. @item ui.c If the new column needs raw calculations (an entry was added in @code{objectcols} and @code{clumpcols}), specify which inputs it needs in @code{ui_necessary_inputs}, similar to the other options. Afterwards, if your column includes any particular settings (you needed to add a variable to the @code{mkcatalogparams} structure in @file{main.h}), you should do the sanity checks and preparations for it here. @item ui.h The @code{option_keys_enum} associates a unique value for each option to MakeCatalog. The options that have a short option version, the single character short comment is used for the value. Those that do not have a short option version, get a large integer automatically. You should add a variable here to identify your desired column. @cindex GNU C library @item args.h This file specifies all the parameters for the GNU C library, Argp structure that is in charge of reading the user's options. To define your new column, just copy an existing set of parameters and change the first, second and 5th values (the only ones that differ between all the columns), you should use the macro you defined in @file{ui.h} here. @item columns.c This file contains the main definition and high-level calculation of your new column through the @code{columns_define_alloc} and @code{columns_fill} functions. In the first, you specify the basic information about the column: its name, units, comments, type (see @ref{Numeric data types}) and how it should be printed if the output is a text file. You should also specify the raw/internal columns that are necessary for this column here as the many existing examples show. Through the types for objects and rows, you can specify if this column is only for clumps, objects or both. The second main function (@code{columns_fill}) writes the final value into the appropriate column for each object and clump. As you can see in the many existing examples, you can define your processing on the raw/internal calculations here and save them in the output. @item mkcatalog.c This file contains the low-level parsing functions. To be optimized, the parsing is done in parallel through the @code{mkcatalog_single_object} function. This function initializes the necessary arrays and calls the lower-level @code{parse_objects} and @code{parse_clumps} for actually going over the pixels. They are all heavily commented, so you should be able to follow where to add your necessary low-level calculations. @item doc/gnuastro.texi Update this manual and add a description for the new column. @end table @node MakeCatalog measurements, Invoking astmkcatalog, Adding new columns to MakeCatalog, MakeCatalog @subsection MakeCatalog measurements MakeCatalog's output measurements/columns can be specified using command-line options (@ref{Options}). The current measurements in MakeCatalog are those which only produce one final value for each label (for example, its magnitude: a single number). All the different label's measurements can be written as one column in a final table/catalog that contains other columns for other similar single-number measurements. In this case, all the different label's measurements can be written as one column in a final table/catalog that contains other columns for other similar single-number measurements. The majority of this section is devoted to MakeCatalog's single-valued measurements. However, MakeCatalog can also do measurements that produce more than one value for each label. Currently the only such measurement is generation of spectra from 3D cubes with the @option{--spectrum} option and it is discussed in the end of this section. Command-line options are used to identify which measurements you want in the final catalog(s) and in what order. If any of the options below is called on the command-line or in any of the configuration files, it will be included as a column in the output catalog. The order of the columns is in the same order as the options were seen by MakeCatalog (see @ref{Configuration file precedence}). Some of the columns apply to both ``objects'' and ``clumps'' and some are particular to only one of them (for the definition of ``objects'' and ``clumps'', see @ref{Segment}). Columns/options that are unique to one catalog (only objects, or only clumps), are explicitly marked with [Objects] or [Clumps] to specify the catalog they will be placed in. @menu * Identifier columns:: Identifying labels of each row (object/clumps). * Position measurements in pixels:: Containing image/pixel (X/Y) measurements. * Position measurements in WCS:: Containing WCS (for example RA/Dec) measurements. * Brightness measurements:: Using pixel values of each label. * Surface brightness measurements:: Various ways to measure surface brightness. * Morphology measurements nonparametric:: Non-parametric morphology. * Morphology measurements elliptical:: Elliptical morphology measurements. * Measurements per slice spectra:: Measurements on each slice (like spectra). @end menu @node Identifier columns, Position measurements in pixels, MakeCatalog measurements, MakeCatalog measurements @subsubsection Identifier columns The identifier of each row (group of measurements) is usually the first thing you will be requesting from MakeCatalog. Without the identifier, it is not clear which measurement corresponds to which label for the input. Since MakeCatalog can also optionally take sub-structure label (clumps; see @ref{Segment}), there are various identifiers in general that are listed below. The most generic (and shortest and easiest to type!) is the @option{--ids} option which can be used in object-only or object-clump catalogs. @table @option @item --i @itemx --ids This is a unique option which can add multiple columns to the final catalog(s). Calling this option will put the object IDs (@option{--obj-id}) in the objects catalog and host-object-ID (@option{--host-obj-id}) and ID-in-host-object (@option{--id-in-host-obj}) into the clumps catalog. Hence if only object catalogs are required, it has the same effect as @option{--obj-id}. @item --obj-id [Objects] ID of this object. @item -j @itemx --host-obj-id [Clumps] The ID of the object which hosts this clump. @item --id-in-host-obj [Clumps] The ID of this clump in its host object. @end table @node Position measurements in pixels, Position measurements in WCS, Identifier columns, MakeCatalog measurements @subsubsection Position measurements in pixels The position of a labeled region within your input dataset (in its own units) can be measured with the options in this section. By ``in its own units'' we mean pixels in a 2D image or voxels in a 3D cube. For example if the flux-weighted center of a label lies 123 pixels on the horizontal and 456 pixels on the vertical, the @option{--x} and @option{--y} options will put a value of 123 and 456 in their respective columns. As you see below, there are various ways to define the ``position'' of an object, so read the differences carefully to choose the one that corresponds best to your usage. @table @option @item -x @itemx --x The flux weighted center of all objects and clumps along the first FITS axis (horizontal when viewed in SAO DS9), see @mymath{\overline{x}} in @ref{Measuring elliptical parameters}. The weight has to have a positive value (pixel value larger than the Sky value) to be meaningful! Specially when doing matched photometry, this might not happen: no pixel value might be above the Sky value. For such detections, the geometric center will be reported in this column (see @option{--geo-x}). You can use @option{--weight-area} to see which was used. @item -y @itemx --y The flux weighted center of all objects and clumps along the second FITS axis (vertical when viewed in SAO DS9). See @option{--x}. @item -z @itemx --z The flux weighted center of all objects and clumps along the third FITS axis. See @option{--x}. @item --geo-x The geometric center of all objects and clumps along the first FITS axis axis. The geometric center is the average pixel positions irrespective of their pixel values. @item --geo-y The geometric center of all objects and clumps along the second FITS axis axis, see @option{--geo-x}. @item --geo-z The geometric center of all objects and clumps along the third FITS axis axis, see @option{--geo-x}. @item --min-val-x Position of pixel with minimum value in objects and clumps, along the first FITS axis. @item --max-val-x Position of pixel with maximum value in objects and clumps, along the first FITS axis. @item --min-val-y Position of pixel with minimum value in objects and clumps, along the first FITS axis. @item --max-val-y Position of pixel with maximum value in objects and clumps, along the first FITS axis. @item --min-val-z Position of pixel with minimum value in objects and clumps, along the first FITS axis. @item --max-val-z Position of pixel with maximum value in objects and clumps, along the first FITS axis. @item --min-x The minimum position of all objects and clumps along the first FITS axis. @item --max-x The maximum position of all objects and clumps along the first FITS axis. @item --min-y The minimum position of all objects and clumps along the second FITS axis. @item --max-y The maximum position of all objects and clumps along the second FITS axis. @item --min-z The minimum position of all objects and clumps along the third FITS axis. @item --max-z The maximum position of all objects and clumps along the third FITS axis. @item --clumps-x [Objects] The flux weighted center of all the clumps in this object along the first FITS axis. See @option{--x}. @item --clumps-y [Objects] The flux weighted center of all the clumps in this object along the second FITS axis. See @option{--x}. @item --clumps-z [Objects] The flux weighted center of all the clumps in this object along the third FITS axis. See @option{--x}. @item --clumps-geo-x [Objects] The geometric center of all the clumps in this object along the first FITS axis. See @option{--geo-x}. @item --clumps-geo-y [Objects] The geometric center of all the clumps in this object along the second FITS axis. See @option{--geo-x}. @item --clumps-geo-z [Objects] The geometric center of all the clumps in this object along the third FITS axis. See @option{--geo-z}. @end table @node Position measurements in WCS, Brightness measurements, Position measurements in pixels, MakeCatalog measurements @subsubsection Position measurements in WCS The position of a labeled region within your input dataset (in the World Coordinate System, or WCS) can be measured with the options in this section. As you see below, there are various ways to define the ``position'' of an object, so read the differences carefully to choose the one that corresponds best to your usage. The most common WCS coordinates are Right Ascension (RA) and Declination in an equatorial system. Therefore, to simplify their usage, we have special @option{--ra} and @option{--dec} options. However, the WCS of datasets are in Galactic coordinates, so to be generic, you can use the @option{--w1}, @option{--w2} or @option{--w3} (if you have a 3D cube) options. In case your dataset's WCS is not in your desired system (for example it is Galactic, but you want equatorial 2000), you can use the @option{--wcscoordsys} option of Gnuastro's Fits program on the labeled image before running MakeCatalog (see @ref{Keyword inspection and manipulation}). @table @option @item -r @itemx --ra Flux weighted right ascension of all objects or clumps, see @option{--x}. This is just an alias for one of the lower-level @option{--w1} or @option{--w2} options. Using the FITS WCS keywords (@code{CTYPE}), MakeCatalog will determine which axis corresponds to the right ascension. If no @code{CTYPE} keywords start with @code{RA}, an error will be printed when requesting this column and MakeCatalog will abort. @item -d @itemx --dec Flux weighted declination of all objects or clumps, see @option{--x}. This is just an alias for one of the lower-level @option{--w1} or @option{--w2} options. Using the FITS WCS keywords (@code{CTYPE}), MakeCatalog will determine which axis corresponds to the declination. If no @code{CTYPE} keywords start with @code{DEC}, an error will be printed when requesting this column and MakeCatalog will abort. @item --w1 Flux weighted first WCS axis of all objects or clumps, see @option{--x}. The first WCS axis is commonly used as right ascension in images. @item --w2 Flux weighted second WCS axis of all objects or clumps, see @option{--x}. The second WCS axis is commonly used as declination in images. @item --w3 Flux weighted third WCS axis of all objects or clumps, see @option{--x}. The third WCS axis is commonly used as wavelength in integral field unit data cubes. @item --geo-w1 Geometric center in first WCS axis of all objects or clumps, see @option{--geo-x}. The first WCS axis is commonly used as right ascension in images. @item --geo-w2 Geometric center in second WCS axis of all objects or clumps, see @option{--geo-x}. The second WCS axis is commonly used as declination in images. @item --geo-w3 Geometric center in third WCS axis of all objects or clumps, see @option{--geo-x}. The third WCS axis is commonly used as wavelength in integral field unit data cubes. @item --clumps-w1 [Objects] Flux weighted center in first WCS axis of all clumps in this object, see @option{--x}. The first WCS axis is commonly used as right ascension in images. @item --clumps-w2 [Objects] Flux weighted declination of all clumps in this object, see @option{--x}. The second WCS axis is commonly used as declination in images. @item --clumps-w3 [Objects] Flux weighted center in third WCS axis of all clumps in this object, see @option{--x}. The third WCS axis is commonly used as wavelength in integral field unit data cubes. @item --clumps-geo-w1 [Objects] Geometric center right ascension of all clumps in this object, see @option{--geo-x}. The first WCS axis is commonly used as right ascension in images. @item --clumps-geo-w2 [Objects] Geometric center declination of all clumps in this object, see @option{--geo-x}. The second WCS axis is commonly used as declination in images. @item --clumps-geo-w3 [Objects] Geometric center in third WCS axis of all clumps in this object, see @option{--geo-x}. The third WCS axis is commonly used as wavelength in integral field unit data cubes. @end table @node Brightness measurements, Surface brightness measurements, Position measurements in WCS, MakeCatalog measurements @subsubsection Brightness measurements Within an image, pixels have both a position and a value. In the sections above all the measurements involved position (see @ref{Position measurements in pixels} or @ref{Position measurements in WCS}). The measurements in this section only deal with pixel values and ignore the pixel positions completely. In other words, for the options of this section each labeled region within the input is just a group of values (and their associated error values if necessary), and they let you do various types of measurements on the resulting distribution of values. @table @option @item --sum The sum of all pixel values associated to this label (object or clump). Note that if a sky value or image has been given, it will be subtracted before any column measurement. For clumps, the ambient values (average of river pixels around the clump, multiplied by the area of the clump) is subtracted, see @option{--river-mean}. So the sum of all the clump-sums in the clump catalog of one object will be smaller than the @option{--clumps-sum} column of the objects catalog. If no usable pixels are present over the clump or object (for example, they are all blank), the returned value will be NaN (note that zero is meaningful). @item --sum-error The (@mymath{1\sigma}) error in measuring the sum of values of a label (objects or clumps). The returned value will be NaN when the label covers only NaN pixels in the values image, or a pixel is NaN in the @option{--instd} image, but non-NaN in the values image. The latter situation usually happens when there is a bug in the previous steps of your analysis, and is important because those pixels with a NaN in the @option{--instd} image may contribute significantly to the final error. If you want to ignore those pixels in the error measurement, set them to zero (which is a meaningful number in such scenarios). @item --clumps-sum [Objects] The total sum of the pixels covered by clumps (before subtracting the river) within each object. This is simply the sum of @option{--sum-no-river} in the clumps catalog (see below). If no usable pixels are present over the clump or object (for example, they are all blank), the stored value will be NaN (note that zero is meaningful). @item --sum-no-river [Clumps] The sum of Sky (not river) subtracted clump pixel values. By definition, for the clumps, the average value of the rivers surrounding it are subtracted from it for a first order accounting for contamination by neighbors. If no usable pixels are present over the clump or object (for example, they are all blank), the stored value will be NaN (note that zero is meaningful). @item --mean The mean sky subtracted value of pixels within the object or clump. For clumps, the average river flux is subtracted from the sky subtracted mean. @item --std The standard deviation of the pixels within the object or clump. For clumps, the river pixels are not subtracted because that is a constant (per pixel) value and should not affect the standard deviation. @item --median The median sky subtracted value of pixels within the object or clump. For clumps, the average river flux is subtracted from the sky subtracted median. @item --maximum The maximum value of pixels within the object or clump. When the label (object or clump) is larger than three pixels, the maximum is actually derived by the mean of the brightest three pixels, not the largest pixel value of the same label. This is because noise fluctuations can be very strong in the extreme values of the objects/clumps due to Poisson noise (which gets stronger as the mean gets higher). Simply using the maximum pixel value will create a strong scatter in results that depend on the maximum (for example, the @option{--fwhm} option also uses this value internally). @item --sigclip-number The number of elements/pixels in the dataset after sigma-clipping the object or clump. The sigma-clipping parameters can be set with the @option{--sigmaclip} option described in @ref{MakeCatalog inputs and basic settings}. For more on Sigma-clipping, see @ref{Sigma clipping}. @item --sigclip-median The sigma-clipped median value of the object of clump's pixel distribution. For more on sigma-clipping and how to define it, see @option{--sigclip-number}. @item --sigclip-mean The sigma-clipped mean value of the object of clump's pixel distribution. For more on sigma-clipping and how to define it, see @option{--sigclip-number}. @item --sigclip-std The sigma-clipped standard deviation of the object of clump's pixel distribution. For more on sigma-clipping and how to define it, see @option{--sigclip-number}. @item -m @itemx --magnitude The magnitude of clumps or objects, see @option{--sum}. @item --magnitude-error The magnitude error of clumps or objects. The magnitude error is calculated from the signal-to-noise ratio (see @option{--sn} and @ref{Quantifying measurement limits}). Note that until now this error assumes uncorrelated pixel values and also does not include the error in estimating the aperture (or error in generating the labeled image). For now these factors have to be found by other means. @url{https://savannah.gnu.org/task/index.php?14124, Task 14124} has been defined for work on adding these sources of error too. The returned value will be NaN when the label covers only NaN pixels in the values image, or a pixel is NaN in the @option{--instd} image, but non-NaN in the values image. The latter situation usually happens when there is a bug in the previous steps of your analysis, and is important because those pixels with a NaN in the @option{--instd} image may contribute significantly to the final error. If you want to ignore those pixels in the error measurement, set them to zero (which is a meaningful number in such scenarios). @item --clumps-magnitude [Objects] The magnitude of all clumps in this object, see @option{--clumps-sum}. @item --upperlimit The upper limit value (in units of the input image) for this object or clump. This is the sigma-clipped standard deviation of the random distribution, multiplied by the value of @option{--upnsigma}). See @ref{Quantifying measurement limits} and @ref{Upper-limit settings} for a complete explanation. This is very important for the fainter and smaller objects in the image where the measured magnitudes are not reliable. @item --upperlimit-mag The upper limit magnitude for this object or clump. See @ref{Quantifying measurement limits} and @ref{Upper-limit settings} for a complete explanation. This is very important for the fainter and smaller objects in the image where the measured magnitudes are not reliable. @item --upperlimit-onesigma The @mymath{1\sigma} upper limit value (in units of the input image) for this object or clump. See @ref{Quantifying measurement limits} and @ref{Upper-limit settings} for a complete explanation. When @option{--upnsigma=1}, this column's values will be the same as @option{--upperlimit}. @item --upperlimit-sigma The position of the label's sum measured within the distribution of randomly placed upperlimit measurements in units of the distribution's @mymath{\sigma} or standard deviation. See @ref{Quantifying measurement limits} and @ref{Upper-limit settings} for a complete explanation. @item --upperlimit-quantile The position of the label's sum within the distribution of randomly placed upperlimit measurements as a quantile (value between 0 or 1). See @ref{Quantifying measurement limits} and @ref{Upper-limit settings} for a complete explanation. If the object is brighter than the brightest randomly placed profile, a value of @code{inf} is returned. If it is less than the minimum, a value of @code{-inf} is reported. @item --upperlimit-skew @cindex Skewness This column contains the non-parametric skew of the @mymath{\sigma}-clipped random distribution that was used to estimate the upper-limit magnitude. Taking @mymath{\mu} as the mean, @mymath{\nu} as the median and @mymath{\sigma} as the standard deviation, the traditional definition of skewness is defined as: @mymath{(\mu-\nu)/\sigma}. This can be a good measure to see how much you can trust the random measurements, or in other words, how accurately the regions with signal have been masked/detected. If the skewness is strong (and to the positive), then you can tell that you have a lot of undetected signal in the dataset, and therefore that the upper-limit measurement (and other measurements) are not reliable. @item --river-mean [Clumps] The average of the river pixel values around this clump. River pixels were defined in Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. In short they are the pixels immediately outside of the clumps. This value is used internally to find the sum (or magnitude) and signal to noise ratio of the clumps. It can generally also be used as a scale to gauge the base (ambient) flux surrounding the clump. In case there was no river pixels, then this column will have the value of the Sky under the clump. So note that this value is @emph{not} sky subtracted. @item --river-num [Clumps] The number of river pixels around this clump, see @option{--river-mean}. @item --river-min [Clumps] Minimum river value around this clump, see @option{--river-mean}. @item --river-max [Clumps] Maximum river value around this clump, see @option{--river-mean}. @item --sn The Signal to noise ratio (S/N) of all clumps or objects. See Akhlaghi and Ichikawa (2015) for the exact equations used. The returned value will be NaN when the label covers only NaN pixels in the values image, or a pixel is NaN in the @option{--instd} image, but non-NaN in the values image. The latter situation usually happens when there is a bug in the previous steps of your analysis, and is important because those pixels with a NaN in the @option{--instd} image may contribute significantly to the final error. If you want to ignore those pixels in the error measurement, set them to zero (which is a meaningful number). @item --sky The sky flux (per pixel) value under this object or clump. This is actually the mean value of all the pixels in the sky image that lie on the same position as the object or clump. @item --sky-std The sky value standard deviation (per pixel) for this clump or object. This is the square root of the mean variance under the object, or the root mean square. @end table @node Surface brightness measurements, Morphology measurements nonparametric, Brightness measurements, MakeCatalog measurements @subsubsection Surface brightness measurements In astronomy, Surface brightness is most commonly measured in units of magnitudes per arcsec@mymath{^2} (for the formal definition, see @ref{Brightness flux magnitude}). Therefore it involves both the values of the pixels within each input label (or output row) and their position. @table @option @item --sb The surface brightness (in units of mag/arcsec@mymath{^2}) of the labeled region (objects or clumps). For more on the definition of the surface brightness, see @ref{Brightness flux magnitude}. @item --sb-error Error in measuring the surface brightness (the @option{--sb} column). This column will use the value given to @option{--spatialresolution} in the processing (in pixels). For more on @option{--spatialresolution}, see @ref{MakeCatalog inputs and basic settings} and for the equation used to derive the surface brightness error, see @ref{Surface brightness error of each detection}. @item --upperlimit-sb The upper-limit surface brightness (in units of mag/arcsec@mymath{^2}) of this labeled region (object or clump). In other words, this option measures the surface brightness of noise within the footprint of each input label. This is just a simple wrapper over lower-level columns: setting B and A as the value in the columns @option{--upperlimit} and @option{--area-arcsec2}, we fill this column by simply use the surface brightness equation of @ref{Brightness flux magnitude}. @item --half-sum-sb Surface brightness (in units of mag/arcsec@mymath{^2}) within the area that contains half the total sum of the label's pixels (object or clump). This is useful as a measure of the sharpness of an astronomical object: for example a star will have very few pixels at half the maximum, so its @option{--half-sum-sb} will be much brighter than a galaxy at the same magnitude. Also consider @option{--half-max-sb} below. This column just plugs in the values of half the value of the @option{--sum} column and the @option{--half-sum-area} column, into the surface brightness equation. Therefore please see the description in @option{--half-sum-area} to understand the systematics of this column and potential biases (see @ref{Morphology measurements nonparametric}). @item --half-max-sb The surface brightness (in units of mag/arcsec@mymath{^2}) within the region that contains half the maximum value of the labeled region. Like @option{--half-sum-sb} this option this is a good way to identify the ``central'' surface brightness of an object. To know when this measurement is reasonable, see the description of @option{--fwhm} in @ref{Morphology measurements nonparametric}. @item --sigclip-mean-sb Surface brightness (over 1 pixel's area in arcsec@mymath{^2}) of the sigma-clipped mean value of the pixel values distribution associated to each label (object or clump). This is useful in scenarios where your labels have approximately @emph{constant} surface brightness values @emph{after} after removing outliers: for example in a radial profile, see @ref{Invoking astscript-radial-profile}). In other scenarios it should be used with extreme care. For example over the full area of a galaxy/star the pixel distribution is not constant (or symmetric after adding noise), their pixel distributions are inherently skewed (with fewer pixels in the center, having a very large value and many pixels in the outer parts having lower values). Therefore, sigma-clipping is not meaningful for such objects! For more on the definition of the surface brightness, see @ref{Brightness flux magnitude}, for more on sigma-clipping, see @ref{Sigma clipping}. The error in this magnitude can be retrieved from the @option{--sigclip-mean-sb-delta} column described below, and you can use the @option{--sigclip-std-sb} column to find when the magnitude has become noise-dominated (signal-to-noise ratio is roughly 1). See the description of these two options for more. @item --sigclip-mean-sb-delta Scatter in the @option{--sigclip-mean-sb} without using the standard deviation of each pixel (that is given by @option{--instd} in @ref{MakeCatalog inputs and basic settings}). The scatter here is measured from the values of the label themselves. This measurement is therefore most meaningful when you expect the flux across one label to be constant (as in a radial profile for example). This is calculated using the equation in @ref{Surface brightness error of each detection}, where @mymath{\Delta{A}=0} (since sigma-clip is calculated per pixel and there is no error in a single pixel). Within the equation to derive @mymath{\Delta{M}} (the error in magnitude, derived in @ref{Magnitude measurement error of each detection}), the signal-to-noise ratio is defined by dividing the sigma-clipped mean by the sigma-clipped standard deviation. @item --sigclip-std-sb The surface brightness of the sigma-clipped standard deviation of all the pixels with the same label. For labels that are expected to have the same value in all their pixels (for example each annulus of a radial profile) this can be used to find the reliable (@mymath{1\sigma}) surface brightness for that label. In other words, if @option{--sigclip-mean-sb} is fainter than the value of this column, you know that noise is becoming significant. However, as described in @option{--sigclip-mean-sb}, the sigma-clipped measurements of MakeCatalog should only be used in certain situations like radial profiles, see the description there for more. @end table @node Morphology measurements nonparametric, Morphology measurements elliptical, Surface brightness measurements, MakeCatalog measurements @subsubsection Morphology measurements (non-parametric) Morphology defined as a way to quantify the ``shape'' of an object in your input image. This includes both the position and value of the pixels within your input labels. There are many ways to define the morphology of an object. In this section, we will review the available non-parametric measures of morphology. By non-parametric, we mean that no functional shape is assumed for the measurement. In @ref{Morphology measurements elliptical} you can see some parametric elliptical measurements (which are only valid when the object is actually an ellipse). @table @option @item --num-clumps [Objects] The number of clumps in this object. @item --area The raw area (number of pixels/voxels) in any clump or object independent of what pixel it lies over (if it is NaN/blank or unused for example). @item --arcsec2-area The used (non-blank in values image) area of the labeled region in units of arc-seconds squared. This column is just the value of the @option{--area} column, multiplied by the area of each pixel in the input image (in units of arcsec^2). Similar to the @option{--ra} or @option{--dec} columns, for this option to work, the objects extension used has to have a WCS structure. @item --area-min-val The number of pixels that are equal to the minimum value of the labeled region (clump or object). @item --area-max-val The number of pixels that are equal to the maximum value of the labeled region (clump or object). @item --area-xy @cindex IFU: Integral Field Unit @cindex Integral Field Unit Similar to @option{--area}, when the clump or object is projected onto the first two dimensions. This is only available for 3-dimensional datasets. When working with Integral Field Unit (IFU) datasets, this projection onto the first two dimensions would be a narrow-band image. @item --fwhm @cindex FWHM The full width at half maximum (in units of pixels, along the semi-major axis) of the labeled region (object or clump). The maximum value is estimated from the mean of the top-three pixels with the highest values, see the description under @option{--maximum}. The number of pixels that have half the value of that maximum are then found (value in the @option{--half-max-area} column) and a radius is estimated from the area. See the description under @option{--half-sum-radius} for more on converting area to radius along major axis. Because of its non-parametric nature, this column is most reliable on clumps and should only be used in objects with great caution. This is because objects can have more than one clump (peak with true signal) and multiple peaks are not treated separately in objects, so the result of this column will be biased. Also, because of its non-parametric nature, this FWHM it does not account for the PSF, and it will be strongly affected by noise if the object is faint/diffuse So when half the maximum value (which can be requested using the @option{--maximum} column) is too close to the local noise level (which can be requested using the @option{--sky-std} column), the value returned in this column is meaningless (its just noise peaks which are randomly distributed over the area). You can therefore use the @option{--maximum} and @option{--sky-std} columns to remove, or flag, unreliable FWHMs. For example, if a labeled region's maximum is less than 2 times the sky standard deviation, the value will certainly be unreliable (half of that is @mymath{1\sigma}!). For a more reliable value, this fraction should be around 4 (so half the maximum is 2@mymath{\sigma}). @item --half-max-area The number of pixels with values larger than half the maximum flux within the labeled region. This option is used to estimate @option{--fwhm}, so please read the notes there for the caveats and necessary precautions. @item --half-max-radius The radius of region containing half the maximum flux within the labeled region. This is just half the value reported by @option{--fwhm}. @item --half-max-sum The sum of the pixel values containing half the maximum flux within the labeled region (or those that are counted in @option{--halfmaxarea}). This option uses the pixels within @option{--fwhm}, so please read the notes there for the caveats and necessary precautions. @item --half-sum-area The number of pixels that contain half the object or clump's total sum of pixels (half the value in the @option{--sum} column). To count this area, all the non-blank values associated with the given label (object or clump) will be sorted and summed in order (starting from the maximum), until the sum becomes larger than half the total sum of the label's pixels. This option is thus good for clumps (which are defined to have a single peak in their morphology), but for objects you should be careful: if the object includes multiple peaks/clumps at roughly the same level, then the area reported by this option will be distributed over all the peaks. @item --half-sum-radius Radius (in units of pixels) derived from the area that contains half the total sum of the label's pixels (value reported by @option{--halfsumarea}). If the area is @mymath{A_h} and the axis ratio is @mymath{q}, then the value returned in this column is @mymath{\sqrt{A_h/({\pi}q)}}. This option is a good measure of the concentration of the @emph{observed} (after PSF convolution and noisy) object or clump, But as described below it underestimates the effective radius. Also, it should be used in caution with objects that may have multiple clumps. It is most reliable with clumps or objects that have one or zero clumps, see the note under @option{--halfsumarea}. @cindex Ellipse area @cindex Area, ellipse Recall that in general, for an ellipse with semi-major axis @mymath{a}, semi-minor axis @mymath{b}, and axis ratio @mymath{q=b/a} the area (@mymath{A}) is @mymath{A={\pi}ab={\pi}qa^2}. For a circle (where @mymath{q=1}), this simplifies to the familiar @mymath{A={\pi}a^2}. @cindex S@'ersic profile @cindex Effective radius This option should not be confused with the @emph{effective radius} for S@'ersic profiles, commonly written as @mymath{r_e}. For more on the S@'ersic profile and @mymath{r_e}, please see @ref{Galaxies}. Therefore, when @mymath{r_e} is meaningful for the target (the target is elliptically symmetric and can be parameterized as a S@'ersic profile), @mymath{r_e} should be derived from fitting the profile with a S@'ersic function which has been convolved with the PSF. But from the equation above, you see that this radius is derived from the raw image's labeled values (after convolution, with no parametric profile), so this column's value will generally be (much) smaller than @mymath{r_e}, depending on the PSF, depth of the dataset, the morphology, or if a fraction of the profile falls on the edge of the image. In other words, this option can only be interpreted as an effective radius if there is no noise and no PSF and the profile within the image extends to infinity (or a very large multiple of the effective radius) and it not near the edge of the image. @item --frac-max1-area @itemx --frac-max2-area Number of pixels brighter than the given fraction(s) of the maximum pixel value. For the maximum value, see the description of @option{--maximum} column. The fraction(s) are given through the @option{--frac-max} option (that can take two values) and is described in @ref{MakeCatalog inputs and basic settings}. Recall that in @option{--halfmaxarea}, the fraction is fixed to 0.5. Hence, added with these two columns, you can sample three parts of the profile area. @item --frac-max1-sum @itemx --frac-max2-sum Sum of pixels brighter than the given fraction(s) of the maximum pixel value. For the maximum value, see the description of @option{--maximum} column below. The fraction(s) are given through the @option{--frac-max} option (that can take two values) and is described in @ref{MakeCatalog inputs and basic settings}. Recall that in @option{--halfmaxsum}, the fraction is fixed to 0.5. Hence, added with these two columns, you can sample three parts of the profile's sum of pixels. @item --frac-max1-radius @itemx --frac-max2-radius Radius (in units of pixels) derived from the area that contains the given fractions of the maximum valued pixel(s) of the label's pixels (value reported by @option{--frac-max1-area} or @option{--frac-max2-area}). For the maximum value, see the description of @option{--maximum} column below. The fractions are given through the @option{--frac-max} option (that can take two values) and is described in @ref{MakeCatalog inputs and basic settings}. Recall that in @option{--fwhm}, the fraction is fixed to 0.5. Hence, added with these two columns, you can sample three parts of the profile's radius. @item --clumps-area [Objects] The total area of all the clumps in this object. @item --weight-area The area (number of pixels) used in the flux weighted position calculations. @item --geo-area The area of all the pixels labeled with an object or clump. Note that unlike @option{--area}, pixel values are completely ignored in this column. For example, if a pixel value is blank, it will not be counted in @option{--area}, but will be counted here. @item --geo-area-xy Similar to @option{--geo-area}, when the clump or object is projected onto the first two dimensions. This is only available for 3-dimensional datasets. When working with Integral Field Unit (IFU) datasets, this projection onto the first two dimensions would be a narrow-band image. @end table @node Morphology measurements elliptical, Measurements per slice spectra, Morphology measurements nonparametric, MakeCatalog measurements @subsubsection Morphology measurements (elliptical) When your target objects are sufficiently ellipse-like, you can use the measurements below to quantify the various parameters of the ellipse. For details of how the elliptical parameters are measured, see @ref{Measuring elliptical parameters}. For non-parametric morphological measurements, see @ref{Morphology measurements nonparametric}. The measures that start with @option{--geo-*} ignore the pixel values and just do the measurements on the label's ``geometric'' shape. @table @option @item --semi-major The pixel-value weighted root mean square (RMS) along the semi-major axis of the profile (assuming it is an ellipse) in units of pixels. @item --semi-minor The pixel-value weighted root mean square (RMS) along the semi-minor axis of the profile (assuming it is an ellipse) in units of pixels. @item --axis-ratio The pixel-value weighted axis ratio (semi-minor/semi-major) of the object or clump. @item --position-angle The pixel-value weighted angle of the semi-major axis with the first FITS axis in degrees. @item --geo-semi-major The geometric (ignoring pixel values) root mean square (RMS) along the semi-major axis of the profile, assuming it is an ellipse, in units of pixels. @item --geo-semi-minor The geometric (ignoring pixel values) root mean square (RMS) along the semi-minor axis of the profile, assuming it is an ellipse, in units of pixels. @item --geo-axis-ratio The geometric (ignoring pixel values) axis ratio of the profile, assuming it is an ellipse. @item --geo-position-angle The geometric (ignoring pixel values) angle of the semi-major axis with the first FITS axis in degrees. @end table @node Measurements per slice spectra, , Morphology measurements elliptical, MakeCatalog measurements @subsubsection Measurements per slice (spectra) @cindex Spectrum @cindex 3D data-cubes @cindex Cubes (3D data) @cindex IFU: Integral Field Unit @cindex Integral field unit (IFU) @cindex Spectrum (of astronomical source) When the input is a 3D data cube, MakeCatalog has the following multi-valued measurements per label. For a tutorial on how to use these options and interpret their values, see @ref{Detecting lines and extracting spectra in 3D data}. These options will do measurements on each 2D slice of the input 3D cube; hence the common the format of @code{--*-in-slice}. Each slice usually corresponds to a certain wavelength, you can also think of these measurements as spectra. For each row (input label), each of the columns described here will contain multiple values as a vector column. The number of measurements in each column is the number of slices in the cube, or the size of the cube along the third dimension. To learn more about vector columns and how to manipulate them, see @ref{Vector columns}. For example usage of these columns in the tutorial above, see @ref{3D measurements and spectra} and @ref{Extracting a single spectrum and plotting it}. @noindent There are two ways to do each measurement on a slice for each label: @table @asis @item Only label The measurement will only be done on the voxels in the slice that are associated to that label. These types of per-slice measurement therefore have the following properties: @itemize @item This will only be a measurement of that label and will not be affected by any other label. @item The number of voxels used in each slice can be different (usually only one or two voxels at the two extremes of the label (along the third dimension), and many in the middle. @item Since most labels are localized along the third dimension (maybe only covering 20 slices out of thousands!), many of the measurements (on slices where the label doesn't exist) will be NaN (for the sum measurements for example) or 0 (for the area measurements). @end itemize @item Projected label MakeCatalog will first project the 3D label into a 2D surface (along the third dimension) to get its 2D footprint. Afterwards, all the voxels in that 2D footprint will be measured all slices. All these measurements will have a @option{-proj-} component in their name. These types of per-slice measurement therefore has the following properties: @itemize @item A measurement will be done on each slice of the cube. @item All measurements will be done on the same surface area. @item Labels can overlap when they are projected onto the first two FITS dimensions (the spatial coordinates, not spectral). As a result, other emission lines or objects may contaminate the resulting spectrum for each label. @end itemize To help separate other labels, MakeCatalog can do a third type of measurement on each slice: measurements on the voxels that belong to other labels but overlap with the 2D projection. This can be used to see how much your projected measurement is affected by other emission sources (on the projected spectra) and also if multiple lines (labeled regions) belong to the same physical object. These measurements contain @code{-other-} in their name. @end table @table @option @item --sum-in-slice [Only label] Sum of values in each slice. @item --sum-err-in-slice [Only label] Error in '--sum-in-slice'. @item --area-in-slice [Only label] Number of labeled in each slice. @item --sum-proj-in-slice [Projected label] Sum of projected area in each slice. @item --area-proj-in-slice: [Projected label] Number of voxels that are used in @option{--sum-proj-in-slice}. @item --sum-proj-err-in-slice [Projected label] Error of @option{--sum-proj-in-slice}. @item --area-other-in-slice [Projected label] Area of other label in projected area on each slice. @item --sum-other-in-slice [Projected label] Sum of other label in projected area on each slice. @item --sum-other-err-in-slice: [Projected label] Area in @option{--sum-other-in-slice}. @end table @node Invoking astmkcatalog, , MakeCatalog measurements, MakeCatalog @subsection Invoking MakeCatalog MakeCatalog will do measurements and produce a catalog from a labeled dataset and optional values dataset(s). The executable name is @file{astmkcatalog} with the following general template @example $ astmkcatalog [OPTION ...] InputImage.fits @end example @noindent One line examples: @example ## Create catalog with RA, Dec, Magnitude and Magnitude error, ## from Segment's output: $ astmkcatalog --ra --dec --magnitude seg-out.fits ## Same catalog as above (using short options): $ astmkcatalog -rdm seg-out.fits ## Write the catalog to a text table: $ astmkcatalog -rdm seg-out.fits --output=cat.txt ## Output columns specified in `columns.conf': $ astmkcatalog --config=columns.conf seg-out.fits ## Use object and clump labels from a K-band image, but pixel values ## from an i-band image. $ astmkcatalog K_segmented.fits --hdu=DETECTIONS --clumpscat \ --clumpsfile=K_segmented.fits --clumpshdu=CLUMPS \ --valuesfile=i_band.fits @end example @cindex Gaussian @noindent If MakeCatalog is to do processing (not printing help or option values), an input labeled image should be provided. The options described in this section are those that are particular to MakeProfiles. For operations that MakeProfiles shares with other programs (mainly involving input/output or general processing steps), see @ref{Common options}. Also see @ref{Common program behavior} for some general characteristics of all Gnuastro programs including MakeCatalog. The various measurements/columns of MakeCatalog are requested as options, either on the command-line or in configuration files, see @ref{Configuration files}. The full list of available columns is available in @ref{MakeCatalog measurements}. Depending on the requested columns, MakeCatalog needs more than one input dataset, for more details, please see @ref{MakeCatalog inputs and basic settings}. The upper-limit measurements in particular need several configuration options which are thoroughly discussed in @ref{Upper-limit settings}. Finally, in @ref{MakeCatalog output} the output file(s) created by MakeCatalog are discussed. @menu * MakeCatalog inputs and basic settings:: Input files and basic settings. * Upper-limit settings:: Settings for upper-limit measurements. * MakeCatalog output:: File names of MakeCatalog's output table. @end menu @node MakeCatalog inputs and basic settings, Upper-limit settings, Invoking astmkcatalog, Invoking astmkcatalog @subsubsection MakeCatalog inputs and basic settings MakeCatalog works by using a localized/labeled dataset (see @ref{MakeCatalog}). This dataset maps/labels pixels to a specific target (row number in the final catalog) and is thus the only necessary input dataset to produce a minimal catalog in any situation. Because it only has labels/counters, it must have an integer type (see @ref{Numeric data types}), see below if your labels are in a floating point container. When the requested measurements only need this dataset (for example, @option{--geo-x}, @option{--geo-y}, or @option{--geo-area}), MakeCatalog will not read any more datasets. Low-level measurements that only use the labeled image are rarely sufficient for any high-level science case. Therefore necessary input datasets depend on the requested columns in each run. For example, let's assume you want the brightness/magnitude and signal-to-noise ratio of your labeled regions. For these columns, you will also need to provide an extra dataset containing values for every pixel of the labeled input (to measure magnitude) and another for the Sky standard deviation (to measure error). All such auxiliary input files have to have the same size (number of pixels in each dimension) as the input labeled image. Their numeric data type is irrelevant (they will be converted to 32-bit floating point internally). For the full list of available measurements, see @ref{MakeCatalog measurements}. The ``values'' dataset is used for measurements like brightness/magnitude, or flux-weighted positions. If it is a real image, by default it is assumed to be already Sky-subtracted prior to running MakeCatalog. If it is not, you use the @option{--subtractsky} option to, so MakeCatalog reads and subtracts the Sky dataset before any processing. To obtain the Sky value, you can use the @option{--sky} option of @ref{Statistics}, but the best recommended method is @ref{NoiseChisel}, see @ref{Sky value}. MakeCatalog can also do measurements on sub-structures of detections. In other words, it can produce two catalogs. Following the nomenclature of Segment (see @ref{Segment}), the main labeled input dataset is known as ``object'' labels and the (optional) sub-structure input dataset is known as ``clumps''. If MakeCatalog is run with the @option{--clumpscat} option, it will also need a labeled image containing clumps, similar to what Segment produces (see @ref{Segment output}). Since clumps are defined within detected regions (they exist over signal, not noise), MakeCatalog uses their boundaries to subtract the level of signal under them. There are separate options to explicitly request a file name and HDU/extension for each of the required input datasets as fully described below (with the @option{--*file} format). When each dataset is in a separate file, these options are necessary. However, one great advantage of the FITS file format (that is heavily used in astronomy) is that it allows the storage of multiple datasets in one file. So in most situations (for example, if you are using the outputs of @ref{NoiseChisel} or @ref{Segment}), all the necessary input datasets can be in one file. When none of the @option{--*file} options are given (for example @option{--clumpsfile} or @option{--valuesfile}), MakeCatalog will assume the necessary input datasets are available as HDUs in the file given as its argument (without any option). When the Sky or Sky standard deviation datasets are necessary and the only @option{--*file} option called is @option{--valuesfile}, MakeCatalog will search for these datasets (with the default/given HDUs) in the file given to @option{--valuesfile} (before looking into the main argument file). It may happen that your labeled objects image was created with a program that only outputs floating point files. However, you know it only has integer valued pixels that are stored in a floating point container. In such cases, you can use Gnuastro's Arithmetic program (see @ref{Arithmetic}) to change the numerical data type of the image (@file{float.fits}) to an integer type image (@file{int.fits}) with a command like below: @example @command{$ astarithmetic float.fits int32 --output=int.fits} @end example To summarize: if the input file to MakeCatalog is the default/full output of Segment (see @ref{Segment output}) you do not have to worry about any of the @option{--*file} options below. You can just give Segment's output file to MakeCatalog as described in @ref{Invoking astmkcatalog}. To feed NoiseChisel's output into MakeCatalog, just change the labeled dataset's header (with @option{--hdu=DETECTIONS}). The full list of input dataset options and general setting options are described below. @table @option @item -l FITS @itemx --clumpsfile=FITS The FITS file containing the labeled clumps dataset when @option{--clumpscat} is called (see @ref{MakeCatalog output}). When @option{--clumpscat} is called, but this option is not, MakeCatalog will look into the main input file (given as an argument) for the required extension/HDU (value to @option{--clumpshdu}). @item --clumpshdu=STR The HDU/extension of the clump labels dataset. Only pixels with values above zero will be considered. The clump labels dataset has to be an integer data type (see @ref{Numeric data types}) and only pixels with a value larger than zero will be used. See @ref{Segment output} for a description of the expected format. @item -v FITS @itemx --valuesfile=FITS The file name of the (sky-subtracted) values dataset. When any of the columns need values to associate with the input labels (for example, to measure the sum of pixel values or magnitude of a galaxy, see @ref{Brightness flux magnitude}), MakeCatalog will look into a ``values'' for the respective pixel values. In most common processing, this is the actual astronomical image that the labels were defined, or detected, over. The HDU/extension of this dataset in the given file can be specified with @option{--valueshdu}. If this option is not called, MakeCatalog will look for the given extension in the main input file. @item --valueshdu=STR/INT The name or number (counting from zero) of the extension containing the ``values'' dataset, see the descriptions above and those in @option{--valuesfile} for more. @item -s FITS/FLT @itemx --insky=FITS/FLT Sky value as a single number, or the file name containing a dataset (different values per pixel or tile). The Sky dataset is only necessary when @option{--subtractsky} is called or when a column directly related to the Sky value is requested (currently @option{--sky}). This dataset may be a tessellation, with one element per tile (see @option{--oneelempertile} of NoiseChisel's @ref{Processing options}). When the Sky dataset is necessary but this option is not called, MakeCatalog will assume it is an HDU/extension (specified by @option{--skyhdu}) in one of the already given files. First it will look for it in the @option{--valuesfile} (if it is given) and then the main input file (given as an argument). By default the values dataset is assumed to be already Sky subtracted, so this dataset is not necessary for many of the columns. @item --skyhdu=STR HDU/extension of the Sky dataset, see @option{--skyfile}. @item --subtractsky Subtract the sky value or dataset from the values file prior to any processing. @item -t STR/FLT @itemx --instd=STR/FLT Sky standard deviation value as a single number, or the file name containing a dataset (different values per pixel or tile). With the @option{--variance} option you can tell MakeCatalog to interpret this value/dataset as a variance image, not standard deviation. @strong{Important note:} This must only be the SKY standard deviation or variance (not including the signal's contribution to the error). In other words, the final standard deviation of a pixel depends on how much signal there is in it. MakeCatalog will find the amount of signal within each pixel (while subtracting the Sky, if @option{--subtractsky} is called) and account for the extra error due to it's value (signal). Therefore if the input standard deviation (or variance) image also contains the contribution of signal to the error, then the final error measurements will be over-estimated. @item --stdhdu=STR The HDU of the Sky value standard deviation image. @item --variance The dataset given to @option{--instd} (and @option{--stdhdu} has the Sky variance of every pixel, not the Sky standard deviation. @item --forcereadstd Read the input STD image even if it is not required by any of the requested columns. This is because some of the output catalog's metadata may need it, for example, to calculate the dataset's surface brightness limit (see @ref{Quantifying measurement limits}, configured with @option{--sfmagarea} and @option{--sfmagnsigma} in @ref{MakeCatalog output}). Furthermore, if the input STD image does not have the @code{MEDSTD} keyword (that is meant to contain the representative standard deviation of the full image), with this option, the median will be calculated and used for the surface brightness limit. @item -z FLT @itemx --zeropoint=FLT The zero point magnitude for the input image, see @ref{Brightness flux magnitude}. @item --sigmaclip FLT,FLT The sigma-clipping parameters when any of the sigma-clipping related columns are requested (for example, @option{--sigclip-median} or @option{--sigclip-number}). This option takes two values: the first is the multiple of @mymath{\sigma}, and the second is the termination criteria. If the latter is larger than 1, it is read as an integer number and will be the number of times to clip. If it is smaller than 1, it is interpreted as the tolerance level to stop clipping. See @ref{Sigma clipping} for a complete explanation. @item --frac-max=FLT[,FLT] The fractions (one or two) of maximum value in objects or clumps to be used in the related columns, for example, @option{--frac-max1-area}, @option{--frac-max1-sum} or @option{--frac-max1-radius}, see @ref{MakeCatalog measurements}. For the maximum value, see the description of @option{--maximum} column below. The value(s) of this option must be larger than 0 and smaller than 1 (they are a fraction). When only @option{--frac-max1-area} or @option{--frac-max1-sum} is requested, one value must be given to this option, but if @option{--frac-max2-area} or @option{--frac-max2-sum} are also requested, two values must be given to this option. The values can be written as simple floating point numbers, or as fractions, for example, @code{0.25,0.75} and @code{0.25,3/4} are the same. @item --spatialresolution=FLT The error in measuring spatial properties (for example, the area) in units of pixels. You can think of this as the FWHM of the dataset's PSF and is used in measurements like the error in surface brightness (@option{--sb-error}, see @ref{MakeCatalog measurements}). Ideally, images are taken in the optimal Nyquist sampling @ref{Sampling theorem}, so the default value for this option is 2. But in practice real images my be over-sampled (usually ground-based images, where you will need to increase the default value) or undersampled (some space-based images, where you will need to decrease the default value). @item --inbetweenints Output will contain one row for all integers between 1 and the largest label in the input (irrespective of their existance in the input image). By default, MakeCatalog's output will only contain rows with integers that actually corresponded to at least one pixel in the input dataset. For example, if the input's only labeled pixel values are 11 and 13, MakeCatalog's default output will only have two rows. If you use this option, it will have 13 rows and all the columns corresponding to integer identifiers that did not correspond to any pixel will be 0 or NaN (depending on context). @end table @node Upper-limit settings, MakeCatalog output, MakeCatalog inputs and basic settings, Invoking astmkcatalog @subsubsection Upper-limit settings The upper-limit magnitude was discussed in @ref{Quantifying measurement limits}. Unlike other measured values/columns in MakeCatalog, the upper limit magnitude needs several extra parameters which are discussed here. All the options specific to the upper-limit measurements start with @option{up} for ``upper-limit''. The only exception is @option{--envseed} that is also present in other programs and is general for any job requiring random number generation in Gnuastro (see @ref{Generating random numbers}). @cindex Reproducibility One very important consideration in Gnuastro is reproducibility. Therefore, the values to all of these parameters along with others (like the random number generator type and seed) are also reported in the comments of the final catalog when the upper limit magnitude column is desired. The random seed that is used to define the random positions for each object or clump is unique and set based on the (optionally) given seed, the total number of objects and clumps and also the labels of the clumps and objects. So with identical inputs, an identical upper-limit magnitude will be found. However, even if the seed is identical, when the ordering of the object/clump labels differs between different runs, the result of upper-limit measurements will not be identical. MakeCatalog will randomly place the object/clump footprint over the dataset. When the randomly placed footprint does not fall on any object or masked region (see @option{--upmaskfile}) it will be used in the final distribution. Otherwise that particular random position will be ignored and another random position will be generated. Finally, when the distribution has the desired number of successfully measured random samples (@option{--upnum}) the distribution's properties will be measured and placed in the catalog. When the profile is very large or the image is significantly covered by detections, it might not be possible to find the desired number of samplings in a reasonable time. MakeProfiles will continue searching until it is unable to find a successful position (since the last successful measurement@footnote{The counting of failed positions restarts on every successful measurement.}), for a large multiple of @option{--upnum} (currently@footnote{In Gnuastro's source, this constant number is defined as the @code{MKCATALOG_UPPERLIMIT_MAXFAILS_MULTIP} macro in @file{bin/mkcatalog/main.h}, see @ref{Downloading the source}.} this is 10). If @option{--upnum} successful samples cannot be found until this limit is reached, MakeCatalog will set the upper-limit magnitude for that object to NaN (blank). MakeCatalog will also print a warning if the range of positions available for the labeled region is smaller than double the size of the region. In such cases, the limited range of random positions can artificially decrease the standard deviation of the final distribution. If your dataset can allow it (it is large enough), it is recommended to use a larger range if you see such warnings. @table @option @item --upmaskfile=FITS File name of mask image to use for upper-limit calculation. In some cases (especially when doing matched photometry), the object labels specified in the main input and mask image might not be adequate. In other words they do not necessarily have to cover @emph{all} detected objects: the user might have selected only a few of the objects in their labeled image. This option can be used to ignore regions in the image in these situations when estimating the upper-limit magnitude. All the non-zero pixels of the image specified by this option (in the @option{--upmaskhdu} extension) will be ignored in the upper-limit magnitude measurements. For example, when you are using labels from another image, you can give NoiseChisel's objects image output for this image as the value to this option. In this way, you can be sure that regions with data do not harm your distribution. See @ref{Quantifying measurement limits} for more on the upper limit magnitude. @item --upmaskhdu=STR The extension in the file specified by @option{--upmask}. @item --upnum=INT The number of random samples to take for all the objects. A larger value to this option will give a more accurate result (asymptotically), but it will also slow down the process. When a randomly positioned sample overlaps with a detected/masked pixel it is not counted and another random position is found until the object completely lies over an undetected region. So you can be sure that for each object, this many samples over undetected objects are made. See the upper limit magnitude discussion in @ref{Quantifying measurement limits} for more. @item --uprange=INT,INT The range/width of the region (in pixels) to do random sampling along each dimension of the input image around each object's position. This is not a mandatory option and if not given (or given a value of zero in a dimension), the full possible range of the dataset along that dimension will be used. This is useful when the noise properties of the dataset vary gradually. In such cases, using the full range of the input dataset is going to bias the result. However, note that decreasing the range of available positions too much will also artificially decrease the standard deviation of the final distribution (and thus bias the upper-limit measurement). @item --envseed @cindex Seed, Random number generator @cindex Random number generator, Seed Read the random number generator type and seed value from the environment (see @ref{Generating random numbers}). Random numbers are used in calculating the random positions of different samples of each object. @item --upsigmaclip=FLT,FLT The raw distribution of random values will not be used to find the upper-limit magnitude, it will first be @mymath{\sigma}-clipped (see @ref{Sigma clipping}) to avoid outliers in the distribution (mainly the faint undetected wings of bright/large objects in the image). This option takes two values: the first is the multiple of @mymath{\sigma}, and the second is the termination criteria. If the latter is larger than 1, it is read as an integer number and will be the number of times to clip. If it is smaller than 1, it is interpreted as the tolerance level to stop clipping. See @ref{Sigma clipping} for a complete explanation. @item --upnsigma=FLT The multiple of the final (@mymath{\sigma}-clipped) standard deviation (or @mymath{\sigma}) used to measure the upper-limit sum or magnitude. @item --checkuplim=INT[,INT] Print a table of positions and measured values for all the full random distribution used for one particular object or clump. If only one integer is given to this option, it is interpreted to be an object's label. If two values are given, the first is the object label and the second is the ID of requested clump within it. The output is a table with three columns (whether it is FITS or plain-text is determined with the @option{--tableformat} option, see @ref{Input output options}). The first two columns are the pixel X,Y positions of the center of each label's tile (see next paragraph), in each random sampling of this particular object/clump. The third column is the measured flux over that region. If the region overlapped with a detection or masked pixel, then its measured value will be a NaN (not-a-number). The total number of rows is thus unknown before running. However, if an upper-limit measurement was made in the main output of MakeCatalog, you can be sure that the number of rows with non-NaN measurements is the number given to the @option{--upnum} option. The ``tile'' of each label is defined by the minimum and maximum positions of each label: values of the @option{--min-x}, @option{--max-x}, @option{--min-y} and @option{--max-y} columns in the main output table for each label. Therefore, the tile center position that is recorded in the output of this column ignores the distribution of labeled pixels within the tile. Precise interpretation of the position is only relevant when the footprint of your label is highly un-symmetrical and you want to use this catalog to insert your object into the image. In such a case, you can also ask for @option{--min-x} and @option{--min-y} and manually calculate their difference with the following two positional measurements of your desired label: @option{--geo-x} and @option{--geo-y} (which report the label's ``geometric'' center; only using the label positions ignoring any ``values'') or @option{--x} and @option{--y} (which report the value-weighted center of the label). Adding the difference with the position reported by this column, will let you define alternative ``center''s for your label in particular situations (this will usually not be necessary!). For more on these positional columns, see @ref{Position measurements in pixels}. @end table @node MakeCatalog output, , Upper-limit settings, Invoking astmkcatalog @subsubsection MakeCatalog output After it has completed all the requested measurements (see @ref{MakeCatalog measurements}), MakeCatalog will store its measurements in table(s). If an output filename is given (see @option{--output} in @ref{Input output options}), the format of the table will be deduced from the name. When it is not given, the input name will be appended with a @file{_cat} suffix (see @ref{Automatic output}) and its format will be determined from the @option{--tableformat} option, which is also discussed in @ref{Input output options}. @option{--tableformat} is also necessary when the requested output name is a FITS table (recall that FITS can accept ASCII and binary tables, see @ref{Table}). By default (when @option{--spectrum} or @option{--clumpscat} are not called) only a single catalog/table will be created for the labeled ``objects''. @itemize @item if @option{--clumpscat} is called, a secondary catalog/table will also be created for ``clumps'' (one of the outputs of the Segment program, for more on ``objects'' and ``clumps'', see @ref{Segment}). In short, if you only have one labeled image, you do not have to worry about clumps and just ignore this. @item When @option{--spectrum} is called, it is not mandatory to specify any single-valued measurement columns. In this case, the output will only be the spectra of each labeled region within a 3D datacube. For more, see the description of @option{--spectrum} in @ref{MakeCatalog measurements}. @end itemize @cindex Surface brightness limit @cindex Limit, Surface brightness When possible, MakeCatalog will also measure the full input's noise level (also known as surface brightness limit, see @ref{Quantifying measurement limits}). Since these measurements are related to the noise and not any particular labeled object, they are stored as keywords in the output table. Furthermore, they are only possible when a standard deviation image has been loaded (done automatically for any column measurement that involves noise, for example, @option{--sn}, @option{--magnitude-error} or @option{--sky-std}). But if you just want the surface brightness limit and no noise-related column, you can use @option{--forcereadstd}. All these keywords start with @code{SBL} (for ``surface brightness limit'') and are described below: @table @code @item SBLSTD Per-pixel standard deviation. If a @code{MEDSTD} keyword exists in the standard deviation dataset, then that value is directly used. @item SBLNSIG Sigma multiple for surface brightness limit (value you gave to @option{--sfmagnsigma}), used for @code{SBLMAGPX} and @code{SBLMAG}. @item SBLMAGPX Per-pixel surface brightness limit (in units of magnitudes/pixel). @item SBLAREA Area (in units of arcsec@mymath{^2}) used in @code{SBLMAG} (value you gave to @option{--sfmagarea}). @item SBLMAG Surface brightness limit of data calculated over @code{SBLAREA} (in units of mag/arcsec@mymath{^2}). @end table When any of the upper-limit measurements are requested, the input parameters for the upper-limit measurement are stored in the keywords starting with @code{UP}: @code{UPNSIGMA}, @code{UPNUMBER}, @code{UPRNGNAM}, @code{UPRNGSEE}, @code{UPSCMLTP}, @code{UPSCTOL}. These are primarily input arguments, so they correspond to the options with a similar name. The full list of MakeCatalog's options relating to the output file format and keywords are listed below. See @ref{MakeCatalog measurements} for specifying which columns you want in the final catalog. @table @option @item -C @itemx --clumpscat Do measurements on clumps and produce a second catalog (only devoted to clumps). When this option is given, MakeCatalog will also look for a secondary labeled dataset (identifying substructure) and produce a catalog from that. For more on the definition on ``clumps'', see @ref{Segment}. When the output is a FITS file, the objects and clumps catalogs/tables will be stored as multiple extensions of one FITS file. You can use @ref{Table} to inspect the column meta-data and contents in this case. However, in plain text format (see @ref{Gnuastro text table format}), it is only possible to keep one table per file. Therefore, if the output is a text file, two output files will be created, ending in @file{_o.txt} (for objects) and @file{_c.txt} (for clumps). @item --noclumpsort Do not sort the clumps catalog based on object ID (only relevant with @option{--clumpscat}). This option will benefit the performance@footnote{The performance boost due to @option{--noclumpsort} can only be felt when there are a huge number of objects. Therefore, by default the output is sorted to avoid miss-understandings or bugs in the user's scripts when the user forgets to sort the outputs.} of MakeCatalog when it is run on multiple threads @emph{and} the position of the rows in the clumps catalog is irrelevant (for example, you just want the number-counts). MakeCatalog does all its measurements on each @emph{object} independently and in parallel. As a result, while it is writing the measurements on each object's clumps, it does not know how many clumps there were in previous objects. Each thread will just fetch the first available row and write the information of clumps (in order) starting from that row. After all the measurements are done, by default (when this option is not called), MakeCatalog will reorder/permute the clumps catalog to have both the object and clump ID in an ascending order. If you would like to order the catalog later (when it is a plain text file), you can run the following command to sort the rows by object ID (and clump ID within each object), assuming they are respectively the first and second columns: @example $ awk '!/^#/' out_c.txt | sort -g -k1,1 -k2,2 @end example @item --sfmagnsigma=FLT Value to multiply with the median standard deviation (from a @command{MEDSTD} keyword in the Sky standard deviation image) for estimating the surface brightness limit. Note that the surface brightness limit is only reported when a standard deviation image is read, in other words a column using it is requested (for example, @option{--sn}) or @option{--forcereadstd} is called. This value is a per-pixel value, not per object/clump and is not found over an area or aperture, like the common @mymath{5\sigma} values that are commonly reported as a measure of depth or the upper-limit measurements (see @ref{Quantifying measurement limits}). @item --sfmagarea=FLT Area (in arc-seconds squared) to convert the per-pixel estimation of @option{--sfmagnsigma} in the comments section of the output tables. Note that the surface brightness limit is only reported when a standard deviation image is read, in other words a column using it is requested (for example, @option{--sn}) or @option{--forcereadstd} is called. Note that this is just a unit conversion using the World Coordinate System (WCS) information in the input's header. It does not actually do any measurements on this area. For random measurements on any area, please use the upper-limit columns of MakeCatalog (see the discussion on upper-limit measurements in @ref{Quantifying measurement limits}). @end table @node Match, , MakeCatalog, Data analysis @section Match Data can come come from different telescopes, filters, software and even different configurations for a single software. As a result, one of the primary things to do after generating catalogs from each of these sources (for example, with @ref{MakeCatalog}), is to find which sources in one catalog correspond to which in the other(s). In other words, to `match' the two catalogs with each other. Gnuastro's Match program is in charge of such operations. The nearest objects in the two catalogs, within the given aperture, will be found and given as output. The aperture can be a circle or an ellipse with any orientation. @menu * Matching algorithms:: Different ways to find the match * Invoking astmatch:: Inputs, outputs and options of Match @end menu @node Matching algorithms, Invoking astmatch, Match, Match @subsection Matching algorithms Matching involves two catalogs, let's call them catalog A (with N rows) and catalog B (with M rows). The most basic matching algorithm that immediately comes to mind is this: for each row in A (let's call it @mymath{A_i}), go over all the rows in B (@mymath{B_j}, where @mymath{0<j<M}) and calculate the distance @mymath{|B_j-A_i|}. If this distance is less than a certain acceptable distance threshold (or radius, or aperture), consider @mymath{A_i} and @mymath{B_j} as a match. This basic parsing algorithm is very computationally expensive: @mymath{N\times M} distances have to measured, and calculating the distance requires a square root and power of 2: in 2 dimensions it would be @mymath{\sqrt{(B_{ix}-A_{ix})^2+(B_{iy}-A_{iy})^2}}. If an elliptical aperture is necessary, it can even get more complicated, see @ref{Defining an ellipse and ellipsoid}. Such operations are not simple, and will consume many cycles of your CPU! As a result, this basic algorithm will become terribly slow as your datasets grow in size. For example, when N or M exceed hundreds of thousands (which is common in the current days with datasets like the European Space Agency's Gaia mission). Therefore that basic parsing algorithm will take too much time and more efficient ways to @emph{find the nearest neighbor} need to be found. Gnuastro's Match currently has algorithms for finding the nearest neighbor: @table @asis @item Sort-based In this algorithm, we will use a moving window over the sorted datasets: @enumerate @item Sort the two datasets by their first coordinate. Therefore @mymath{A_i<A_j} (when @mymath{i<j}; only in first coordinate), and similarly, sort the elements of B based on the first coordinate. @item Use the radial distance threshold to define the width of a moving interval over both A and B. Therefore, with a single parsing of both simultaneously, for each A-point, we can find all the elements in B that are sufficiently near to it (within the requested aperture). @end enumerate This method has some caveats: 1) It requires sorting, which can again be slow on large numbers. 2) It can only be done on a single CPU thread! So it cannot benefit from the modern CPUs with many threads. 3) There is no way to preserve intermediate information for future matches, for example, this can greatly help when one of the matched datasets is always the same. To use this sorting method in Match, use @option{--kdtree=disable}. @item k-d tree based The k-d tree concept is much more abstract, but powerful (addressing all the caveats of the sort-based method described above.). In short a k-d tree is a partitioning of a k-dimensional space (``k'' is just a place-holder, so together with ``d'' for dimension, ``k-d'' means ``any number of dimensions''!). The k-d tree of table A is another table with the same number of rows, but only two integer columns: the integers contain the row indexs (counting from zero) of the left and right ``branch'' (in the ``tree'') of that row. With a k-d tree we can find the nearest point with much fewer (statistically) checks, compared to always parsing from the top-down. For more on the k-d tree concept and Gnuastro's implementation, please see @ref{K-d tree}. When given two catalogs (like the command below), Gnuastro's Match will internally construct a k-d tree for catalog A (the first catalog given to it) and use the k-d tree of A, for finding the nearest B-point(s) to each A-point (this is done in parallel on all available CPU threads, unless you specify a certain number of threads to use with @option{--numthreads}, see @ref{Multi-threaded operations}) @example $ astmatch A.fits --ccol1=ra,dec B.fits --ccol2=RA,DEC \ --aperture=1/3600 @end example However, optionally, you can also build the k-d tree of A and save it into a file, with a separate call to Match, like below @example $ astmatch A.fits --ccol1=ra,dec --kdtree=build \ --output=A-kdtree.fits @end example This external k-d tree (@file{A-kdtree.fits}) can be fed to Match later (to avoid having to reconstruct it every time you want to match a new catalog with A) like below for matching both @file{B.fits} and @file{C.fits} with @file{A.fits}. Note that the same @option{--kdtree} option above, is now given the file name of the k-d tree, instead of @code{build}. @example $ astmatch A.fits --ccol1=ra,dec --kdtree=A-kdtree.fits \ B.fits --ccol2=RA,DEC --aperture=1/3600 \ --output=A-B.fits $ astmatch A.fits --ccol1=ra,dec --kdtree=A-kdtree.fits \ C.fits --ccol2=RA,DEC --aperture=1/3600 \ --output=A-C.fits @end example Irrespective of how the k-d tree is made ready (by importing or by constructing internally), it will be used to find the nearest A-point to each B-point. The k-d tree is parsed independently (on different CPU threads) for each row of B. There is just one technical issue however: when there is no neighbor within the acceptable distance of the k-d tree, it is forced to parse all elements to confirm that there is no match! Therefore if one catalog only covers a small portion (in the coordinate space) of the other catalog, the k-d tree algorithm will be forced to parse the full k-d tree for the majority of points! This will dramatically decrease the running speed of Match. Therefore, Match first divides the range of the first input in all its dimensions into bins that have a width of the requested aperture (similar to a histogram), and will only do the k-d tree based search when the point in catalog B actually falls within a bin that has at least one element in A. @end table Above, we described different ways of finding the @mymath{A_i} that is nearest to each @mymath{B_j}. But this is not the whole matching process! Let's go ahead with a ``basic'' description of what happens next... You may be tempted to remove @mymath{A_i} from the search of matches for @mymath{B_k} (where @mymath{k>j}). Therefore, as you go down B (and more matches are found), you have to calculate less distances (there are fewer elements in A that remain to be checked). However, this will introduce an important bias: @mymath{A_i} may actually be closer to @mymath{B_k} than to @mymath{B_j}! But because @mymath{B_j} happened to be before @mymath{B_k} in your table, @mymath{A_i} was removed from the potential search domain of @mymath{B_k}. The good match (@mymath{B_k} with @mymath{A_i} will therefore be lost, and replaced by a false match between @mymath{B_j} and @mymath{A_i}! In a single-dimensional match, this bias depends on the sorting of your two datasets (leading to different matches if you shuffle your datasets). But it will get more complex as you add dimensionality. For example, catalogs derived from 2D images or 3D cubes, where you have 2 and 3 different coordinates for each point. To address this problem, in Gnuastro (the Match program, or the matching functions of the library) similar to above, we first parse over the elements of B. But we will not associate the first nearest-neighbor with a match! Instead, we will use an array (with the number of rows in A, let's call it ``B-in-A'') to keep the list of all nearest element(s) in B that match each A-point. Once all the points in B are parsed, each A-point in B-in-A will (possibly) have a sorted list of B-points (there may be multiple B-points that fall within the acceptable aperture of each A-point). In the previous example, the @mymath{i} element (corresponding to @mymath{A_i}) of B-in-A will contain the following list of B-points: @mymath{B_j} and @mymath{B_k}. A new array (with the number of points in B, let's call it A-in-B) is then used to find the final match. We parse over B-in-A (that was completed above), and from it extract the nearest B-point to each A-point (@mymath{B_k} for @mymath{A_i} in the example above). If this is the first A-point that is found for this B-point, then we put this A-point into A-in-B (in the example above, element @mymath{k} is filled with @mymath{A_k}). If another A-point was previously found for this B-point, then the distance of the two A-points to that B-point are compared, and the A-point with the smaller distance is kept in A-in-B. This will give us the best match between the two catalogs, independent of any sorting issues. Both the B-in-A and A-in-B will also keep the distances, so distances are only measured once. @noindent In summary, here are the points to consider when selecting an algorithm, or the order of your inputs (for optimal speed, the match will be the same): @itemize @item For larger datasets, the k-d tree based method (when running on all threads possible) is much more faster than the classical sort-based method. @item The k-d tree is constructed for the first input table and the multi-threading is done on the rows of the second input table. The construction of a larger dataset's k-d tree will take longer, but multi-threading will work better when you have more rows. As a result, the optimal way to place your inputs is to give the smaller input table (with fewer rows) as the first argument (so its k-d tree is constructed), and the larger table as the second argument (so its rows are checked in parallel). @item If you always need to match against one catalog (that is large!), the k-d tree construction itself can take a significant fraction of the running time. Therefore you can save its k-d tree into a file and simply give it to later calls, like the example given in the description of the k-d algorithm mentioned above. @end itemize @node Invoking astmatch, , Matching algorithms, Match @subsection Invoking Match When given two catalogs, Match finds the rows that are nearest to each other within an input aperture. The executable name is @file{astmatch} with the following general template @example $ astmatch [OPTION ...] input-1 input-2 @end example @noindent One line examples: @example ## 1D wavelength match (within 5 angstroms) of the two inputs. ## The wavelengths are in the 5th and 10th columns respectively. $ astmatch --aperture=5e-10 --ccol1=5 --ccol2=10 in1.fits in2.txt ## Find the row that is closest to (RA,DEC) of (12.3456,6.7890) ## with a maximum distance of 1 arcseconds (1/3600 degrees). ## The coordinates can also be given in sexagesimal. $ astmatch input1.txt --ccol1=ra,dec --coord=12.3456,6.7890 \ --aperture=1/3600 ## Find matching rows of two catalogs with a circular aperture ## of width 2 (same unit as position columns: pixels in this case). $ astmatch input1.txt input2.fits --aperture=2 \ --ccol1=X,Y --ccol2=IMG_X,IMG_Y ## Similar to before, but the output is created by merging various ## columns from the two inputs: columns 1, RA, DEC from the first ## input, followed by all columns starting with `MAG' and the `BRG' ## column from second input and the 10th column from first input. $ astmatch input1.txt input2.fits --aperture=1/3600 \ --ccol1=ra,dec --ccol2=RAJ2000,DEJ2000 \ --outcols=a1,aRA,aDEC,b/^MAG/,bBRG,a10 ## Assuming both inputs have the same column metadata (same name ## and numeric type), the output will contain all the rows of the ## first input, appended with the non-matching rows of the second ## input (good when you need to merge multiple catalogs that ## may have matching items, which you do not want to repeat). $ astmatch input1.fits input2.fits --ccol1=RA,DEC --ccol2=RA,DEC \ --aperture=1/3600 --notmatched --outcols=_all ## Match the two catalogs within an elliptical aperture of 1 and 2 ## arc-seconds along RA and Dec respectively. $ astmatch --aperture=1/3600,2/3600 in1.fits in2.txt ## Match the RA and DEC columns of the first input with the RA_D ## and DEC_D columns of the second within a 0.5 arcseconds aperture. $ astmatch --ccol1=RA,DEC --ccol2=RA_D,DEC_D --aperture=0.5/3600 \ in1.fits in2.fits ## Match in 3D (RA, Dec and Wavelength). $ astmatch --ccol1=2,3,4 --ccol2=2,3,4 -a0.5/3600,0.5/3600,5e-10 \ in1.fits in2.txt @end example Match will find the rows that are nearest to each other in two catalogs (given some coordinate columns). Alternatively, it can construct the k-d tree of one catalog to save in a FITS file for future matching of the same catalog with many others. To understand the inner working of Match and its algorithms, see @ref{Matching algorithms}. When matching, two catalogs are necessary for input. But for constructing a k-d tree, only a single catalog should be given. The input tables can be plain text tables or FITS tables, for more see @ref{Tables}. But other ways of feeding inputs area also supported: @itemize @item The @emph{first} catalog can also come from the standard input (for example, a pipe that feeds the output of a previous command to Match, see @ref{Standard input}); @item When you only want to match one point with another catalog, you can use the @option{--coord} option to avoid creating a file for the @emph{second} input catalog. @end itemize Match follows the same basic behavior of all Gnuastro programs as fully described in @ref{Common program behavior}. If the first input is a FITS file, the common @option{--hdu} option (see @ref{Input output options}) should be used to identify the extension. When the second input is FITS, the extension must be specified with @option{--hdu2}. When @option{--quiet} is not called, Match will print its various processing phases (including the number of matches found) in standard output (on the command-line). When matches are found, by default, two tables will be output (if in FITS format, as two HDUs). Each output table will contain the re-arranged rows of the respective input table. In other words, both tables will have the same number of rows, and row N in both corresponds to the 10th match between the two. If no matches are found, the columns of the output table(s) will have zero rows (with proper meta-data). The output format can be changed with the following options: @itemize @item @option{--outcols}: The output will be a single table with rows chosen from either of the two inputs in any order. @item @option{--notmatched}: The output tables will contain the rows that did not match between the two tables. If called with @option{--outcols}, the output will be a single table with all non-matched rows of both tables. @item @option{--logasoutput}: The output will be a single table with the contents of the log file, see below. @end itemize If no output file name is given with the @option{--output} option, then automatic output @ref{Automatic output} will be used to determine the output name(s). Depending on @option{--tableformat} (see @ref{Input output options}), the output will be a (possibly multi-extension) FITS file or (possibly two) plain text file(s). Generally, giving a filename to @option{--output} is recommended. When the @option{--log} option is called (see @ref{Operating mode options}), and there was a match, Match will also create a file named @file{astmatch.fits} (or @file{astmatch.txt}, depending on @option{--tableformat}, see @ref{Input output options}) in the directory it is run in. This log table will have three columns. The first and second columns show the matching row/record number (counting from 1) of the first and second input catalogs respectively. The third column is the distance between the two matched positions. The units of the distance are the same as the given coordinates (given the possible ellipticity, see description of @option{--aperture} below). When @option{--logasoutput} is called, no log file (with a fixed name) will be created. In this case, the output file (possibly given by the @option{--output} option) will have the contents of this log file. @cartouche @noindent @strong{@option{--log} is not thread-safe}: As described above, when @option{--logasoutput} is not called, the Log file has a fixed name for all calls to Match. Therefore if a separate log is requested in two simultaneous calls to Match in the same directory, Match will try to write to the same file. This will cause problems like unreasonable log file, undefined behavior, or a crash. Remember that @option{--log} is mainly intended for debugging purposes, if you want the log file with a specific name, simply use @option{--logasoutput} (which will also be faster, since no arranging of the input columns is necessary). @end cartouche @table @option @item -H STR @itemx --hdu2=STR The extension/HDU of the second input if it is a FITS file. When it is not a FITS file, this option's value is ignored. For the first input, the common option @option{--hdu} must be used. @item -k STR @itemx --kdtree=STR Select the algorithm and/or the way to construct or import the k-d tree. A summary of the four acceptable strings for this option are described here for completeness. However, for a much more detailed discussion on Match's algorithms with examples, see @ref{Matching algorithms}. @table @code @item internal Construct a k-d tree for the first input internally (within the same run of Match), and parallelize over the rows of the second to find the nearest points. This is the default algorithm/method used by Match (when this option is not called). @item build Only construct a k-d tree of a single input and abort. The name of the k-d tree is value to @option{--output}. @item CUSTOM-FITS-FILE Use the given FITS file as a k-d tree (that was previously constructed with Match itself) of the first input, and do not construct any k-d tree internally. The FITS file should have two columns with an unsigned 32-bit integer data type and a @code{KDTROOT} keyword that contains the index of the root of the k-d tree. For more on Gnuastro's k-d tree format, see @ref{K-d tree}. @item disable Do not use the k-d tree algorithm for finding the nearest neighbor, instead, use the sort-based method. @end table @item --kdtreehdu=STR The HDU of the FITS file, when a FITS file is given to the @option{--kdtree} option that was described above. @item --outcols=STR[,STR,[...]] Columns (from both inputs) to write into a single matched table output. The value to @code{--outcols} must be a comma-separated list of column identifiers (number or name, see @ref{Selecting table columns}). The expected format depends on @option{--notmatched} and explained below. By default (when @option{--nomatched} is not called), the number of rows in the output will be equal to the number of matches. However, when @option{--notmatched} is called, all the rows (from the requested columns) of the first input are placed in the output, and the not-matched rows of the second input are inserted afterwards (useful when you want to merge unique entries of multiple catalogs into one). @table @asis @item Default (only matching rows) The first character of each string specifies the input catalog: @option{a} for the first and @option{b} for the second. The rest of the characters of the string will be directly used to identify the proper column(s) in the respective table. See @ref{Selecting table columns} for how columns can be specified in Gnuastro. For example, the output of @option{--outcols=a1,bRA,bDEC} will have three columns: the first column of the first input, along with the @option{RA} and @option{DEC} columns of the second input. If the string after @option{a} or @option{b} is @option{_all}, then all the columns of the respective input file will be written in the output. For example, the command below will print all the input columns from the first catalog along with the 5th column from the second: @example $ astmatch a.fits b.fits --outcols=a_all,b5 @end example @code{_all} can be used multiple times, possibly on both inputs. Tip: if an input's column is called @code{_all} (an unlikely name!) and you do not want all the columns from that table the output, use its column number to avoid confusion. Another example is given in the one-line examples above. Compared to the default case (where two tables with all their columns) are saved separately, using this option is much faster: it will only read and re-arrange the necessary columns and it will write a single output table. Combined with regular expressions in large tables, this can be a very powerful and convenient way to merge various tables into one. When @option{--coord} is given, no second catalog will be read. The second catalog will be created internally based on the values given to @option{--coord}. So column names are not defined and you can only request integer column numbers that are less than the number of coordinates given to @option{--coord}. For example, if you want to find the row matching RA of 1.2345 and Dec of 6.7890, then you should use @option{--coord=1.2345,6.7890}. But when using @option{--outcols}, you cannot give @code{bRA}, or @code{b25}. @item With @option{--notmatched} Only the column names/numbers should be given (for example, @option{--outcols=RA,DEC,MAGNITUDE}). It is assumed that both input tables have the requested column(s) and that the numerical data types of each column in each input (with same name) is the same as the corresponding column in the other. Therefore if one input has a @code{MAGNITUDE} column with a 32-bit floating point type, but the @code{MAGNITUDE} column of the other is 64-bit floating point, Match will crash with an error. The metadata of the columns will come from the first input. As an example, let's assume @file{input1.txt} and @file{input2.fits} each have a different number of columns and rows. However, they both have the @code{RA} (64-bit floating point), @code{DEC} (64-bit floating point) and @code{MAGNITUDE} (32-bit floating point) columns. If @file{input1.txt} has 100 rows and @file{input2.fits} has 300 rows (such that 50 of them match within 1 arcsec of the first), then the output of the command above will have @mymath{100+(300-50)=350} rows and only three columns. Other columns in each catalog, which may be different, are ignored. @example $ astmatch input1.txt --ccol1=RA,DEC \ input2.fits --ccol2=RA,DEC \ --aperture=1/3600 \ --notmatched --outcols=RA,DEC,MAGNITUDE @end example @end table @item -l @itemx --logasoutput The output file will have the contents of the log file: indexes in the two catalogs that match with each other along with their distance, see description of the log file above. When this option is called, a separate log file will not be created and the output will not contain any of the input columns (either as two tables containing the re-arranged columns of each input, or a single table mixing columns), only their indices in the log format. @item --notmatched Write the non-matching rows into the outputs, not the matched ones. By default, this will produce two output tables, that will not necessarily have the same number of rows. However, when called with @option{--outcols}, it is possible to import non-matching rows of the second into the first. See the description of @option{--outcols} for more. @item -c INT/STR[,INT/STR] @itemx --ccol1=INT/STR[,INT/STR] The coordinate columns of the first input. The number of dimensions for the match is determined by the number of comma-separated values given to this option. The values can be the column number (counting from 1), exact column name or a regular expression. For more, see @ref{Selecting table columns}. See the one-line examples above for some usages of this option. @item -C INT/STR[,INT/STR] @itemx --ccol2=INT/STR[,INT/STR] The coordinate columns of the second input. See the example in @option{--ccol1} for more. @item -d FLT[,FLT] @itemx --coord=FLT[,FLT] Manually specify the coordinates to match against the given catalog. With this option, Match will not look for a second input file/table and will directly use the coordinates given to this option. When the coordinates are RA and Dec, the comma-separated values can either be in degrees (a single number), or sexagesimal (@code{_h_m_} for RA, @code{_d_m_} for Dec, or @code{_:_:_} for both). When this option is called, the output changes in the following ways: 1) when @option{--outcols} is specified, for the second input, it can only accept integer numbers that are less than the number of values given to this option, see description of that option for more. 2) By default (when @option{--outcols} is not used), only the matching row of the first table will be output (a single file), not two separate files (one for each table). This option is good when you have a (large) catalog and only want to match a single coordinate to it (for example, to find the nearest catalog entry to your desired point). With this option, you can write the coordinates on the command-line and thus avoid the need to make a single-row file. @item -a FLT[,FLT[,FLT]] @itemx --aperture=FLT[,FLT[,FLT]] Parameters of the aperture for matching. The values given to this option can be fractions, for example, when the position columns are in units of degrees, @option{1/3600} can be used to ask for one arc-second. The interpretation of the values depends on the requested dimensions (determined from @option{--ccol1} and @code{--ccol2}) and how many values are given to this option. When multiple objects are found within the aperture, the match is defined as the nearest one. In a multi-dimensional dataset, when the aperture is a general ellipse or ellipsoid (and not a circle or sphere), the distance is calculated in the elliptical space along the major axis. For the defintion of this distance, see @mymath{r_{el}} in @ref{Defining an ellipse and ellipsoid}. @table @asis @item 1D match The aperture/interval can only take one value: half of the interval around each point (maximum distance from each point). @item 2D match In a 2D match, the aperture can be a circle, an ellipse aligned in the axes or an ellipse with a rotated major axis. To simply the usage, you can determine the shape based on the number of free parameters for each. @table @asis @item 1 number for example, @option{--aperture=2}. The aperture will be a circle of the given radius. The value will be in the same units as the columns in @option{--ccol1} and @option{--ccol2}). @item 2 numbers for example, @option{--aperture=3,4e-10}. The aperture will be an ellipse (if the two numbers are different) with the respective value along each dimension. The numbers are in units of the first and second axis. In the example above, the semi-axis value along the first axis will be 3 (in units of the first coordinate) and along the second axis will be @mymath{4\times10^{-10}} (in units of the second coordinate). Such values can happen if you are comparing catalogs of a spectra for example. If more than one object exists in the aperture, the nearest will be found along the major axis as described in @ref{Defining an ellipse and ellipsoid}. @item 3 numbers for example, @option{--aperture=2,0.6,30}. The aperture will be an ellipse (if the second value is not 1). The first number is the semi-major axis, the second is the axis ratio and the third is the position angle (in degrees). If multiple matches are found within the ellipse, the distance (to find the nearest) is calculated along the major axis in the elliptical space, see @ref{Defining an ellipse and ellipsoid}. @end table @item 3D match The aperture (matching volume) can be a sphere, an ellipsoid aligned on the three axes or a genenral ellipsoid rotated in any direction. To simplifythe usage, the shape can be determined based on the number of values given to this option. @table @asis @item 1 number for example, @option{--aperture=3}. The matching volume will be a sphere of the given radius. The value is in the same units as the input coordinates. @item 3 numbers for example, @option{--aperture=4,5,6e-10}. The aperture will be a general ellipsoid with the respective extent along each dimension. The numbers must be in the same units as each axis. This is very similar to the two number case of 2D inputs. See there for more. @item 6 numbers for example, @option{--aperture=4,0.5,0.6,10,20,30}. The numbers represent the full general ellipsoid definition (in any orientation). For the definition of a general ellipsoid, see @ref{Defining an ellipse and ellipsoid}. The first number is the semi-major axis. The second and third are the two axis ratios. The last three are the three Euler angles in units of degrees in the ZXZ order as fully described in @ref{Defining an ellipse and ellipsoid}. @end table @end table @end table @node Data modeling, High-level calculations, Data analysis, Top @chapter Data modeling @cindex Fitting @cindex Modeling In order to fully understand observations after initial analysis on the image, it is very important to compare them with the existing models to be able to further understand both the models and the data. The tools in this chapter create model galaxies and will provide 2D fittings to be able to understand the detections. @menu * MakeProfiles:: Making mock galaxies and stars. @end menu @node MakeProfiles, , Data modeling, Data modeling @section MakeProfiles @cindex Checking detection algorithms @pindex @r{MakeProfiles (}astmkprof@r{)} MakeProfiles will create mock astronomical profiles from a catalog, either individually or together in one output image. In data analysis, making a mock image can act like a calibration tool, through which you can test how successfully your detection technique is able to detect a known set of objects. There are commonly two aspects to detecting: the detection of the fainter parts of bright objects (which in the case of galaxies fade into the noise very slowly) or the complete detection of an over-all faint object. Making mock galaxies is the most accurate (and idealistic) way these two aspects of a detection algorithm can be tested. You also need mock profiles in fitting known functional profiles with observations. MakeProfiles was initially built for extra galactic studies, so currently the only astronomical objects it can produce are stars and galaxies. We welcome the simulation of any other astronomical object. The general outline of the steps that MakeProfiles takes are the following: @enumerate @item Build the full profile out to its truncation radius in a possibly over-sampled array. @item Multiply all the elements by a fixed constant so its total magnitude equals the desired total magnitude. @item If @option{--individual} is called, save the array for each profile to a FITS file. @item If @option{--nomerged} is not called, add the overlapping pixels of all the created profiles to the output image and abort. @end enumerate Using input values, MakeProfiles adds the World Coordinate System (WCS) headers of the FITS standard to all its outputs (except PSF images!). For a simple test on a set of mock galaxies in one image, there is no need for the third step or the WCS information. @cindex Transform image @cindex Lensing simulations @cindex Image transformations However in complicated simulations like weak lensing simulations, where each galaxy undergoes various types of individual transformations based on their position, those transformations can be applied to the different individual images with other programs. After all the transformations are applied, using the WCS information in each individual profile image, they can be merged into one output image for convolution and adding noise. @menu * Modeling basics:: Astronomical modeling basics. * If convolving afterwards:: Considerations for convolving later. * Profile magnitude:: Definition of total profile magnitude. * Invoking astmkprof:: Inputs and Options for MakeProfiles. @end menu @node Modeling basics, If convolving afterwards, MakeProfiles, MakeProfiles @subsection Modeling basics In the subsections below, first a review of some very basic information and concepts behind modeling a real astronomical image is given. You can skip this subsection if you are already sufficiently familiar with these concepts. @menu * Defining an ellipse and ellipsoid:: Definition of these important shapes. * PSF:: Radial profiles for the PSF. * Stars:: Making mock star profiles. * Galaxies:: Radial profiles for galaxies. * Sampling from a function:: Sample a function on a pixelated canvas. * Oversampling:: Oversampling the model. @end menu @node Defining an ellipse and ellipsoid, PSF, Modeling basics, Modeling basics @subsubsection Defining an ellipse and ellipsoid @cindex Ellipse @cindex Axis ratio @cindex Position angle The PSF, see @ref{PSF}, and galaxy radial profiles are generally defined on an ellipse. Therefore, in this section we will start defining an ellipse on a pixelated 2D surface. Labeling the major axis of an ellipse @mymath{a}, and its minor axis with @mymath{b}, the @emph{axis ratio} is defined as: @mymath{q\equiv b/a}. The major axis of an ellipse can be aligned in any direction, therefore the angle of the major axis with respect to the horizontal axis of the image is defined to be the @emph{position angle} of the ellipse and in this book, we show it with @mymath{\theta}. @cindex Radial profile on ellipse Our aim is to put a radial profile of any functional form @mymath{f(r)} over an ellipse. Hence we need to associate a radius/distance to every point in space. Let's define the radial distance @mymath{r_{el}} as the distance on the major axis to the center of an ellipse which is located at @mymath{i_c} and @mymath{j_c} (in other words @mymath{r_{el}\equiv{a}}). We want to find @mymath{r_{el}} of a point located at @mymath{(i,j)} (in the image coordinate system) from the center of the ellipse with axis ratio @mymath{q} and position angle @mymath{\theta}. First the coordinate system is rotated@footnote{Do not confuse the signs of @mymath{sin} with the rotation matrix defined in @ref{Linear warping basics}. In that equation, the point is rotated, here the coordinates are rotated and the point is fixed.} by @mymath{\theta} to get the new rotated coordinates of that point @mymath{(i_r,j_r)}: @dispmath{i_r(i,j)=+(i_c-i)\cos\theta+(j_c-j)\sin\theta} @dispmath{j_r(i,j)=-(i_c-i)\sin\theta+(j_c-j)\cos\theta} @cindex Elliptical distance @noindent Recall that an ellipse is defined by @mymath{(i_r/a)^2+(j_r/b)^2=1} and that we defined @mymath{r_{el}\equiv{a}}. Hence, multiplying all elements of the ellipse definition with @mymath{r_{el}^2} we get the elliptical distance at this point point located: @mymath{r_{el}=\sqrt{i_r^2+(j_r/q)^2}}. To place the radial profiles explained below over an ellipse, @mymath{f(r_{el})} is calculated based on the functional radial profile desired. @cindex Ellipsoid @cindex Euler angles An ellipse in 3D, or an @url{https://en.wikipedia.org/wiki/Ellipsoid, ellipsoid}, can be defined following similar principles as before. Labeling the major (largest) axis length as @mymath{a}, the second and third (in a right-handed coordinate system) axis lengths can be labeled as @mymath{b} and @mymath{c}. Hence we have two axis ratios: @mymath{q_1\equiv{b/a}} and @mymath{q_2\equiv{c/a}}. The orientation of the ellipsoid can be defined from the orientation of its major axis. There are many ways to define 3D orientation and order matters. So to be clear, here we use the ZXZ (or @mymath{Z_1X_2Z_3}) proper @url{https://en.wikipedia.org/wiki/Euler_angles, Euler angles} to define the 3D orientation. In short, when a point is rotated in this order, we first rotate it around the Z axis (third axis) by @mymath{\alpha}, then about the (rotated) X axis by @mymath{\beta} and finally about the (rotated) Z axis by @mymath{\gamma}. Following the discussion in @ref{Merging multiple warpings}, we can define the full rotation with the following matrix multiplication. However, here we are rotating the coordinates, not the point. Therefore, both the rotation angles and rotation order are reversed. We are also not using homogeneous coordinates (see @ref{Linear warping basics}) since we are not concerned with translation in this context: @dispmath{\left[\matrix{i_r\cr j_r\cr k_r}\right] = \left[\matrix{cos\gamma&sin\gamma&0\cr -sin\gamma&cos\gamma&0\cr 0&0&1}\right] \left[\matrix{1&0&0\cr 0&cos\beta&sin\beta\cr 0&-sin\beta&cos\beta }\right] \left[\matrix{cos\alpha&sin\alpha&0\cr -sin\alpha&cos\alpha&0\cr 0&0&1}\right] \left[\matrix{i_c-i\cr j_c-j\cr k_c-k}\right] } @noindent Recall that an ellipsoid can be characterized with @mymath{(i_r/a)^2+(j_r/b)^2+(k_r/c)^2=1}, so similar to before (@mymath{r_{el}\equiv{a}}), we can find the ellipsoidal radius at pixel @mymath{(i,j,k)} as: @mymath{r_{el}=\sqrt{i_r^2+(j_r/q_1)^2+(k_r/q_2)^2}}. @cindex Breadth first search @cindex Inside-out construction @cindex Making profiles pixel by pixel @cindex Pixel by pixel making of profiles MakeProfiles builds the profile starting from the nearest element (pixel in an image) in the dataset to the profile center. The profile value is calculated for that central pixel using Monte Carlo integration, see @ref{Sampling from a function}. The next pixel is the next nearest neighbor to the central pixel as defined by @mymath{r_{el}}. This process goes on until the profile is fully built upto the truncation radius. This is done fairly efficiently using a breadth first parsing strategy@footnote{@url{http://en.wikipedia.org/wiki/Breadth-first_search}} which is implemented through an ordered linked list. Using this approach, we build the profile by expanding the circumference. Not one more extra pixel has to be checked (the calculation of @mymath{r_{el}} from above is not cheap in CPU terms). Another consequence of this strategy is that extending MakeProfiles to three dimensions becomes very simple: only the neighbors of each pixel have to be changed. Everything else after that (when the pixel index and its radial profile have entered the linked list) is the same, no matter the number of dimensions we are dealing with. @node PSF, Stars, Defining an ellipse and ellipsoid, Modeling basics @subsubsection Point spread function @cindex PSF @cindex Point source @cindex Diffraction limited @cindex Point spread function @cindex Spread of a point source Assume we have a `point' source, or a source that is far smaller than the maximum resolution (a pixel). When we take an image of it, it will `spread' over an area. To quantify that spread, we can define a `function'. This is how the ``point spread function'' or the PSF of an image is defined. This `spread' can have various causes, for example, in ground-based astronomy, due to the atmosphere. In practice we can never surpass the `spread' due to the diffraction of the telescope aperture (even in Space!). Various other effects can also be quantified through a PSF. For example, the simple fact that we are sampling in a discrete space, namely the pixels, also produces a very small `spread' in the image. @cindex Blur image @cindex Convolution @cindex Image blurring @cindex PSF image size Convolution is the mathematical process by which we can apply a `spread' to an image, or in other words blur the image, see @ref{Convolution process}. The sum of pixels of an image should remain unchanged after convolution. Therefore, it is important that the sum of all the pixels of the PSF be unity. The PSF image also has to have an odd number of pixels on its sides so one pixel can be defined as the center. In MakeProfiles, the PSF can be set by the two methods explained below: @table @asis @item Parametric functions @cindex FWHM @cindex PSF width @cindex Parametric PSFs @cindex Full Width at Half Maximum A known mathematical function is used to make the PSF. In this case, only the parameters to define the functions are necessary and MakeProfiles will make a PSF based on the given parameters for each function. In both cases, the center of the profile has to be exactly in the middle of the central pixel of the PSF (which is automatically done by MakeProfiles). When talking about the PSF, usually, the full width at half maximum or FWHM is used as a scale of the width of the PSF. @table @cite @item Gaussian @cindex Gaussian distribution In the older papers, and to a lesser extent even today, some researchers use the 2D Gaussian function to approximate the PSF of ground based images. In its most general form, a Gaussian function can be written as: @dispmath{f(r)=a \exp \left( -(x-\mu)^2 \over 2\sigma^2 \right)+d} Since the center of the profile is pre-defined, @mymath{\mu} and @mymath{d} are constrained. @mymath{a} can also be found because the function has to be normalized. So the only important parameter for MakeProfiles is the @mymath{\sigma}. In the Gaussian function we have this relation between the FWHM and @mymath{\sigma}: @cindex Gaussian FWHM @dispmath{\rm{FWHM}_g=2\sqrt{2\ln{2}}\sigma \approx 2.35482\sigma} @item Moffat @cindex Moffat function The Gaussian profile is much sharper than the images taken from stars on photographic plates or CCDs. Therefore in 1969, Moffat proposed this functional form for the image of stars: @dispmath{f(r)=a \left[ 1+\left( r\over \alpha \right)^2 \right]^{-\beta}} @cindex Moffat beta Again, @mymath{a} is constrained by the normalization, therefore two parameters define the shape of the Moffat function: @mymath{\alpha} and @mymath{\beta}. The radial parameter is @mymath{\alpha} which is related to the FWHM by @cindex Moffat FWHM @dispmath{\rm{FWHM}_m=2\alpha\sqrt{2^{1/\beta}-1}} @cindex Compare Moffat and Gaussian @cindex PSF, Moffat compared Gaussian @noindent Comparing with the PSF predicted from atmospheric turbulence theory with a Moffat function, Trujillo et al.@footnote{ Trujillo, I., J. A. L. Aguerri, J. Cepa, and C. M. Gutierrez (2001). ``The effects of seeing on S@'ersic profiles - II. The Moffat PSF''. In: MNRAS 328, pp. 977---985.} claim that @mymath{\beta} should be 4.765. They also show how the Moffat PSF contains the Gaussian PSF as a limiting case when @mymath{\beta\to\infty}. @end table @item An input FITS image An input image file can also be specified to be used as a PSF. If the sum of its pixels are not equal to 1, the pixels will be multiplied by a fraction so the sum does become 1. Gnuastro has tools to extract the non-parametric (extended) PSF of any image as a FITS file (assuming there are a sufficient number of stars in it), see @ref{Building the extended PSF}. This method is not perfect (will have noise if you do not have many stars), but it is the actual PSF of the data that is not forced into any parametric form. @end table While the Gaussian is only dependent on the FWHM, the Moffat function is also dependent on @mymath{\beta}. Comparing these two functions with a fixed FWHM gives the following results: @itemize @item Within the FWHM, the functions do not have significant differences. @item For a fixed FWHM, as @mymath{\beta} increases, the Moffat function becomes sharper. @item The Gaussian function is much sharper than the Moffat functions, even when @mymath{\beta} is large. @end itemize @node Stars, Galaxies, PSF, Modeling basics @subsubsection Stars @cindex Modeling stars @cindex Stars, modeling In MakeProfiles, stars are generally considered to be a point source. This is usually the case for extra galactic studies, where nearby stars are also in the field. Since a star is only a point source, we assume that it only fills one pixel prior to convolution. In fact, exactly for this reason, in astronomical images the light profiles of stars are one of the best methods to understand the shape of the PSF and a very large fraction of scientific research is preformed by assuming the shapes of stars to be the PSF of the image. @node Galaxies, Sampling from a function, Stars, Modeling basics @subsubsection Galaxies @cindex Galaxy profiles @cindex S@'ersic profile @cindex Profiles, galaxies @cindex Generalized de Vaucouleur profile Today, most practitioners agree that the flux of galaxies can be modeled with one or a few generalized de Vaucouleur's (or S@'ersic) profiles. @dispmath{I(r) = I_e \exp \left ( -b_n \left[ \left( r \over r_e \right)^{1/n} -1 \right] \right )} @cindex Brightness @cindex S@'ersic, J. L. @cindex S@'ersic index @cindex Effective radius @cindex Radius, effective @cindex de Vaucouleur profile @cindex G@'erard de Vaucouleurs G@'erard de Vaucouleurs (1918-1995) was first to show in 1948 that this function resembles the galaxy light profiles, with the only difference that he held @mymath{n} fixed to a value of 4. Twenty years later in 1968, J. L. S@'ersic showed that @mymath{n} can have a variety of values and does not necessarily need to be 4. This profile depends on the effective radius (@mymath{r_e}) which is defined as the radius which contains half of the profile's 2-dimensional integral to infinity (see @ref{Profile magnitude}). @mymath{I_e} is the flux at the effective radius. The S@'ersic index @mymath{n} is used to define the concentration of the profile within @mymath{r_e} and @mymath{b_n} is a constant dependent on @mymath{n}. MacArthur et al.@footnote{MacArthur, L. A., S. Courteau, and J. A. Holtzman (2003). ``Structure of Disk-dominated Galaxies. I. Bulge/Disk Parameters, Simulations, and Secular Evolution''. In: ApJ 582, pp. 689---722.} show that for @mymath{n>0.35}, @mymath{b_n} can be accurately approximated using this equation: @dispmath{b_n=2n - {1\over 3} + {4\over 405n} + {46\over 25515n^2} + {131\over 1148175n^3}-{2194697\over 30690717750n^4}} @node Sampling from a function, Oversampling, Galaxies, Modeling basics @subsubsection Sampling from a function @cindex Sampling A pixel is the ultimate level of accuracy to gather data, we cannot get any more accurate in one image, this is known as sampling in signal processing. However, the mathematical profiles which describe our models have infinite accuracy. Over a large fraction of the area of astrophysically interesting profiles (for example, galaxies or PSFs), the variation of the profile over the area of one pixel is not too significant. In such cases, the elliptical radius (@mymath{r_{el}}) of the center of the pixel can be assigned as the final value of the pixel, (see @ref{Defining an ellipse and ellipsoid}). @cindex Integration over pixel @cindex Gradient over pixel area @cindex Function gradient over pixel area As you approach their center, some galaxies become very sharp (their value significantly changes over one pixel's area). This sharpness increases with smaller effective radius and larger S@'ersic values. Thus rendering the central value extremely inaccurate. The first method that comes to mind for solving this problem is integration. The functional form of the profile can be integrated over the pixel area in a 2D integration process. However, unfortunately numerical integration techniques also have their limitations and when such sharp profiles are needed they can become extremely inaccurate. @cindex Monte carlo integration The most accurate method of sampling a continuous profile on a discrete space is by choosing a large number of random points within the boundaries of the pixel and taking their average value (or Monte Carlo integration). This is also, generally speaking, what happens in practice with the photons on the pixel. The number of random points can be set with @option{--numrandom}. Unfortunately, repeating this Monte Carlo process would be extremely time and CPU consuming if it is to be applied to every pixel. In order to not loose too much accuracy, in MakeProfiles, the profile is built using both methods explained below. The building of the profile begins from its central pixel and continues (radially) outwards. Monte Carlo integration is first applied (which yields @mymath{F_r}), then the central pixel value (@mymath{F_c}) is calculated on the same pixel. If the fractional difference (@mymath{|F_r-F_c|/F_r}) is lower than a given tolerance level (specified with @option{--tolerance}) MakeProfiles will stop using Monte Carlo integration and only use the central pixel value. @cindex Inside-out construction The ordering of the pixels in this inside-out construction is based on @mymath{r=\sqrt{(i_c-i)^2+(j_c-j)^2}}, not @mymath{r_{el}}, see @ref{Defining an ellipse and ellipsoid}. When the axis ratios are large (near one) this is fine. But when they are small and the object is highly elliptical, it might seem more reasonable to follow @mymath{r_{el}} not @mymath{r}. The problem is that the gradient is stronger in pixels with smaller @mymath{r} (and larger @mymath{r_{el}}) than those with smaller @mymath{r_{el}}. In other words, the gradient is strongest along the minor axis. So if the next pixel is chosen based on @mymath{r_{el}}, the tolerance level will be reached sooner and lots of pixels with large fractional differences will be missed. Monte Carlo integration uses a random number of points. Thus, every time you run it, by default, you will get a different distribution of points to sample within the pixel. In the case of large profiles, this will result in a slight difference of the pixels which use Monte Carlo integration each time MakeProfiles is run. To have a deterministic result, you have to fix the random number generator properties which is used to build the random distribution. This can be done by setting the @code{GSL_RNG_TYPE} and @code{GSL_RNG_SEED} environment variables and calling MakeProfiles with the @option{--envseed} option. To learn more about the process of generating random numbers, see @ref{Generating random numbers}. @cindex Seed, Random number generator @cindex Random number generator, Seed The seed values are fixed for every profile: with @option{--envseed}, all the profiles have the same seed and without it, each will get a different seed using the system clock (which is accurate to within one microsecond). The same seed will be used to generate a random number for all the sub-pixel positions of all the profiles. So in the former, the sub-pixel points checked for all the pixels undergoing Monte carlo integration in all profiles will be identical. In other words, the sub-pixel points in the first (closest to the center) pixel of all the profiles will be identical with each other. All the second pixels studied for all the profiles will also receive an identical (different from the first pixel) set of sub-pixel points and so on. As long as the number of random points used is large enough or the profiles are not identical, this should not cause any systematic bias. @node Oversampling, , Sampling from a function, Modeling basics @subsubsection Oversampling @cindex Oversampling The steps explained in @ref{Sampling from a function} do give an accurate representation of a profile prior to convolution. However, in an actual observation, the image is first convolved with or blurred by the atmospheric and instrument PSF in a continuous space and then it is sampled on the discrete pixels of the camera. @cindex PSF over-sample In order to more accurately simulate this process, the unconvolved image and the PSF are created on a finer pixel grid. In other words, the output image is a certain odd-integer multiple of the desired size, we can call this `oversampling'. The user can specify this multiple as a command-line option. The reason this has to be an odd number is that the PSF has to be centered on the center of its image. An image with an even number of pixels on each side does not have a central pixel. The image can then be convolved with the PSF (which should also be oversampled on the same scale). Finally, image can be sub-sampled to get to the initial desired pixel size of the output image. After this, mock noise can be added as explained in the next section. This is because unlike the PSF, the noise occurs in each output pixel, not on a continuous space like all the prior steps. @node If convolving afterwards, Profile magnitude, Modeling basics, MakeProfiles @subsection If convolving afterwards In case you want to convolve the image later with a given point spread function, make sure to use a larger image size. After convolution, the profiles become larger and a profile that is normally completely outside of the image might fall within it. On one axis, if you want your final (convolved) image to be @mymath{m} pixels and your PSF is @mymath{2n+1} pixels wide, then when calling MakeProfiles, set the axis size to @mymath{m+2n}, not @mymath{m}. You also have to shift all the pixel positions of the profile centers on the that axis by @mymath{n} pixels to the positive. After convolution, you can crop the outer @mymath{n} pixels with the section crop box specification of Crop: @option{--section=n+1:*-n,n+1:*-n} (according to the FITS standard, counting is from 1 so we use @code{n+1}) assuming your PSF is a square, see @ref{Crop section syntax}. This will also remove all discrete Fourier transform artifacts (blurred sides) from the final image. To facilitate this shift, MakeProfiles has the options @option{--xshift}, @option{--yshift} and @option{--prepforconv}, see @ref{Invoking astmkprof}. @node Profile magnitude, Invoking astmkprof, If convolving afterwards, MakeProfiles @subsection Profile magnitude @cindex Truncation radius @cindex Sum for total flux To find the profile's total magnitude, (see @ref{Brightness flux magnitude}), it is customary to use the 2D integration of the flux to infinity. However, in MakeProfiles we do not follow this idealistic approach and apply a more realistic method to find the total magnitude: the sum of all the pixels belonging to a profile within its predefined truncation radius. Note that if the truncation radius is not large enough, this can be significantly different from the total integrated light to infinity. @cindex Integration to infinity An integration to infinity is not a realistic condition because no galaxy extends indefinitely (important for high S@'ersic index profiles), pixelation can also cause a significant difference between the actual total pixel sum value of the profile and that of integration to infinity, especially in small and high S@'ersic index profiles. To be safe, you can specify a large enough truncation radius for such compact high S@'ersic index profiles. If oversampling is used then the pixel value is calculated using the over-sampled image, see @ref{Oversampling} which is much more accurate. The profile is first built in an array completely bounding it with a normalization constant of unity (see @ref{Galaxies}). Taking @mymath{V} to be the desired pixel value and @mymath{S} to be the sum of the pixels in the created profile, every pixel is then multiplied by @mymath{V/S} so the sum is exactly @mymath{V}. If the @option{--individual} option is called, this same array is written to a FITS file. If not, only the overlapping pixels of this array and the output image are kept and added to the output array. @node Invoking astmkprof, , Profile magnitude, MakeProfiles @subsection Invoking MakeProfiles MakeProfiles will make any number of profiles specified in a catalog either individually or in one image. The executable name is @file{astmkprof} with the following general template @example $ astmkprof [OPTION ...] [Catalog] @end example @noindent One line examples: @example ## Make an image with profiles in catalog.txt (with default size): $ astmkprof catalog.txt ## Make the profiles in catalog.txt over image.fits: $ astmkprof --background=image.fits catalog.txt ## Make a Moffat PSF with FWHM 3pix, beta=2.8, truncation=5 $ astmkprof --kernel=moffat,3,2.8,5 --oversample=1 ## Make profiles in catalog, using RA and Dec in the given column: $ astmkprof --ccol=RA_CENTER --ccol=DEC_CENTER --mode=wcs catalog.txt ## Make a 1500x1500 merged image (oversampled 500x500) image along ## with an individual image for all the profiles in catalog: $ astmkprof --individual --oversample 3 --mergedsize=500,500 cat.txt @end example @noindent The parameters of the mock profiles can either be given through a catalog (which stores the parameters of many mock profiles, see @ref{MakeProfiles catalog}), or the @option{--kernel} option (see @ref{MakeProfiles output dataset}). The catalog can be in the FITS ASCII, FITS binary format, or plain text formats (see @ref{Tables}). A plain text catalog can also be provided using the Standard input (see @ref{Standard input}). The columns related to each parameter can be determined both by number, or by match/search criteria using the column names, units, or comments, with the options ending in @option{col}, see below. Without any file given to the @option{--background} option, MakeProfiles will make a zero-valued image and build the profiles on that (its size and main WCS parameters can also be defined through the options described in @ref{MakeProfiles output dataset}). Besides the main/merged image containing all the profiles in the catalog, it is also possible to build individual images for each profile (only enclosing one full profile to its truncation radius) with the @option{--individual} option. If an image is given to the @option{--background} option, the pixels of that image are used as the background value for every pixel hence flux value of each profile pixel will be added to the pixel in that background value. You can disable this with the @code{--clearcanvas} option (which will initialize the background to zero-valued pixels and build profiles over that). With the @option{--background} option, the values to all options relating to the ``canvas'' (output size and WCS) will be ignored if specified: @option{--oversample}, @option{--mergedsize}, @option{--prepforconv}, @option{--crpix}, @option{--crval}, @option{--cdelt}, @option{--cdelt}, @option{--pc}, @option{cunit} and @option{ctype}. The sections below discuss the options specific to MakeProfiles based on context: the input catalog settings which can have many rows for different profiles are discussed in @ref{MakeProfiles catalog}, in @ref{MakeProfiles profile settings}, we discuss how you can set general profile settings (that are the same for all the profiles in the catalog). Finally @ref{MakeProfiles output dataset} and @ref{MakeProfiles log file} discuss the outputs of MakeProfiles and how you can configure them. Besides these, MakeProfiles also supports all the common Gnuastro program options that are discussed in @ref{Common options}, so please flip through them is well for a more comfortable usage. When building 3D profiles, there are more degrees of freedom. Hence, more columns are necessary and all the values related to dimensions (for example, size of dataset in each dimension and the WCS properties) must also have 3 values. To allow having an independent set of default values for creating 3D profiles, MakeProfiles also installs a @file{astmkprof-3d.conf} configuration file (see @ref{Configuration files}). You can use this for default 3D profile values. For example, if you installed Gnuastro with the prefix @file{/usr/local} (the default location, see @ref{Installation directory}), you can benefit from this configuration file by running MakeProfiles like the example below. As with all configuration files, if you want to customize a given option, call it before the configuration file. @example $ astmkprof --config=/usr/local/etc/astmkprof-3d.conf catalog.txt @end example @cindex Shell alias @cindex Alias, shell @cindex Shell startup @cindex Startup, shell To further simplify the process, you can define a shell alias in any startup file (for example, @file{~/.bashrc}, see @ref{Installation directory}). Assuming that you installed Gnuastro in @file{/usr/local}, you can add this line to the startup file (you may put it all in one line, it is broken into two lines here for fitting within page limits). @example alias astmkprof-3d="astmkprof --config=/usr/local/etc/astmkprof-3d.conf" @end example @noindent Using this alias, you can call MakeProfiles with the name @command{astmkprof-3d} (instead of @command{astmkprof}). It will automatically load the 3D specific configuration file first, and then parse any other arguments, options or configuration files. You can change the default values in this 3D configuration file by calling them on the command-line as you do with @command{astmkprof}@footnote{Recall that for single-invocation options, the last command-line invocation takes precedence over all previous invocations (including those in the 3D configuration file). See the description of @option{--config} in @ref{Operating mode options}.}. Please see @ref{Sufi simulates a detection} for a very complete tutorial explaining how one could use MakeProfiles in conjunction with other Gnuastro's programs to make a complete simulated image of a mock galaxy. @menu * MakeProfiles catalog:: Required catalog properties. * MakeProfiles profile settings:: Configuration parameters for all profiles. * MakeProfiles output dataset:: The canvas/dataset to build profiles over. * MakeProfiles log file:: A description of the optional log file. @end menu @node MakeProfiles catalog, MakeProfiles profile settings, Invoking astmkprof, Invoking astmkprof @subsubsection MakeProfiles catalog The catalog containing information about each profile can be in the FITS ASCII, FITS binary, or plain text formats (see @ref{Tables}). The latter can also be provided using standard input (see @ref{Standard input}). Its columns can be ordered in any desired manner. You can specify which columns belong to which parameters using the set of options discussed below. For example, through the @option{--rcol} and @option{--tcol} options, you can specify the column that contains the radial parameter for each profile and its truncation respectively. See @ref{Selecting table columns} for a thorough discussion on the values to these options. The value for the profile center in the catalog (the @option{--ccol} option) can be a floating point number so the profile center can be on any sub-pixel position. Note that pixel positions in the FITS standard start from 1 and an integer is the pixel center. So a 2D image actually starts from the position (0.5, 0.5), which is the bottom-left corner of the first pixel. When a @option{--background} image with WCS information is provided, or you specify the WCS parameters with the respective options@footnote{The options to set the WCS are the following: @option{--crpix}, @option{--crval}, @option{--cdelt}, @option{--cdelt}, @option{--pc}, @option{cunit} and @option{ctype}. Just recall that these options are only used if @option{--background} is not given: if the image you give to @option{--background} does not have WCS, these options will not be used and you cannot use WCS-mode coordinates like RA or Dec.}, you may also use RA and Dec to identify the center of each profile (see the @option{--mode} option below). In MakeProfiles, profile centers do not have to be in (overlap with) the final image. Even if only one pixel of the profile within the truncation radius overlaps with the final image size, the profile is built and included in the final image. Profiles that are completely out of the image will not be created (unless you explicitly ask for it with the @option{--individual} option). You can use the output log file (created with @option{--log} to see which profiles were within the image, see @ref{Common options}. If PSF profiles (Moffat or Gaussian, see @ref{PSF}) are in the catalog and the profiles are to be built in one image (when @option{--individual} is not used), it is assumed they are the PSF(s) you want to convolve your created image with. So by default, they will not be built in the output image but as separate files. The sum of pixels of these separate files will also be set to unity (1) so you are ready to convolve, see @ref{Convolution process}. As a summary, the position and magnitude of PSF profile will be ignored. This behavior can be disabled with the @option{--psfinimg} option. If you want to create all the profiles separately (with @option{--individual}) and you want the sum of the PSF profile pixels to be unity, you have to set their magnitudes in the catalog to the zero point magnitude and be sure that the central positions of the profiles do not have any fractional part (the PSF center has to be in the center of the pixel). The list of options directly related to the input catalog columns is shown below. @table @option @item --ccol=STR/INT Center coordinate column for each dimension. This option must be called two times to define the center coordinates in an image. For example, @option{--ccol=RA} and @option{--ccol=DEC} (along with @option{--mode=wcs}) will inform MakeProfiles to look into the catalog columns named @option{RA} and @option{DEC} for the Right Ascension and Declination of the profile centers. @item --fcol=INT/STR The functional form of the profile with one of the values below depending on the desired profile. The column can contain either the numeric codes (for example, `@code{1}') or string characters (for example, `@code{sersic}'). The numeric codes are easier to use in scripts which generate catalogs with hundreds or thousands of profiles. The string format can be easier when the catalog is to be written/checked by hand/eye before running MakeProfiles. It is much more readable and provides a level of documentation. All Gnuastro's recognized table formats (see @ref{Recognized table formats}) accept string type columns. To have string columns in a plain text table/catalog, see @ref{Gnuastro text table format}. @itemize @item S@'ersic profile with `@code{sersic}' or `@code{1}'. @item Moffat profile with `@code{moffat}' or `@code{2}'. @item Gaussian profile with `@code{gaussian}' or `@code{3}'. @item Point source with `@code{point}' or `@code{4}'. @item Flat profile with `@code{flat}' or `@code{5}'. @item Circumference profile with `@code{circum}' or `@code{6}'. A fixed value will be used for all pixels less than or equal to the truncation radius (@mymath{r_t}) and greater than @mymath{r_t-w} (@mymath{w} is the value to the @option{--circumwidth}). @item Radial distance profile with `@code{distance}' or `@code{7}'. At the lowest level, each pixel only has an elliptical radial distance given the profile's shape and orientation (see @ref{Defining an ellipse and ellipsoid}). When this profile is chosen, the pixel's elliptical radial distance from the profile center is written as its value. For this profile, the value in the magnitude column (@option{--mcol}) will be ignored. You can use this for checks or as a first approximation to define your own higher-level radial function. In the latter case, just note that the central values are going to be incorrect (see @ref{Sampling from a function}). @item Custom radial profile with `@code{custom-prof}' or `@code{8}'. The values to use for each radial interval should be in the table given to @option{--customtable}. By default, once the profile is built with the given values, it will be scaled to have a total magnitude that you have requested in the magnitude column of the profile (in @option{--mcol}). If you want the raw values in the 2D profile (to ignore the magnitude column), use @option{--mcolnocustprof}. For more, see the description of @option{--customtable} in @ref{MakeProfiles profile settings}. @item Azimuthal angle profile with `@code{azimuth}' or `@code{9}'. Every pixel within the truncation radius will be given its azimuthal angle (in degrees, from 0 to 360) from the major axis. In combination with the radial distance profile, you can now create complex features in polar coordinates, such as tidal tails or tidal shocks (using the Arithmetic program to mix the radius and azimuthal angle through a function to create your desired features). @item Custom image with `@code{custom-img}' or `@code{10}'. The image(s) to use should be given to the @option{--customimg} option (which can be called multiple times for multiple images). To identify which one of the images (given to @option{--customimg}) should be used, you should specify their counter in the ``radius'' column below. For more, see the description of @code{custom-img} in @ref{MakeProfiles profile settings}. @end itemize @item --rcol=STR/INT The radius parameter of the profiles. Effective radius (@mymath{r_e}) if S@'ersic, FWHM if Moffat or Gaussian. For a custom image profile, this option is not interpreted as a radius, but as a counter (identifying which one of the images given to @option{--customimg} should be used for each row). @item --ncol=STR/INT The S@'ersic index (@mymath{n}) or Moffat @mymath{\beta}. @item --pcol=STR/INT The position angle (in degrees) of the profiles relative to the first FITS axis (horizontal when viewed in SAO DS9). When building a 3D profile, this is the first Euler angle: first rotation of the ellipsoid major axis from the first FITS axis (rotating about the third axis). See @ref{Defining an ellipse and ellipsoid}. @item --p2col=STR/INT Second Euler angle (in degrees) when building a 3D ellipsoid. This is the second rotation of the ellipsoid major axis (following @option{--pcol}) about the (rotated) X axis. See @ref{Defining an ellipse and ellipsoid}. This column is ignored when building a 2D profile. @item --p3col=STR/INT Third Euler angle (in degrees) when building a 3D ellipsoid. This is the third rotation of the ellipsoid major axis (following @option{--pcol} and @option{--p2col}) about the (rotated) Z axis. See @ref{Defining an ellipse and ellipsoid}. This column is ignored when building a 2D profile. @item --qcol=STR/INT The axis ratio of the profiles (minor axis divided by the major axis in a 2D ellipse). When building a 3D ellipse, this is the ratio of the major axis to the semi-axis length of the second dimension (in a right-handed coordinate system). See @mymath{q1} in @ref{Defining an ellipse and ellipsoid}. @item --q2col=STR/INT The ratio of the ellipsoid major axis to the third semi-axis length (in a right-handed coordinate system) of a 3D ellipsoid. See @mymath{q1} in @ref{Defining an ellipse and ellipsoid}. This column is ignored when building a 2D profile. @item --mcol=STR/INT The total pixelated magnitude of the profile within the truncation radius, see @ref{Profile magnitude}. @item --tcol=STR/INT The truncation radius of this profile. By default it is in units of the radial parameter of the profile (the value in the @option{--rcol} of the catalog). If @option{--tunitinp} is given, this value is interpreted in units of pixels (prior to oversampling) irrespective of the profile. @end table @node MakeProfiles profile settings, MakeProfiles output dataset, MakeProfiles catalog, Invoking astmkprof @subsubsection MakeProfiles profile settings The profile parameters that differ between each created profile are specified through the columns in the input catalog and described in @ref{MakeProfiles catalog}. Besides those there are general settings for some profiles that do not differ between one profile and another, they are a property of the general process. For example, how many random points to use in the monte-carlo integration, this value is fixed for all the profiles. The options described in this section are for configuring such properties. @table @option @item --mode=STR Interpret the center position columns (@option{--ccol} in @ref{MakeProfiles catalog}) in image or WCS coordinates. This option thus accepts only two values: @option{img} and @option{wcs}. It is mandatory when a catalog is being used as input. @item -r @itemx --numrandom The number of random points used in the central regions of the profile, see @ref{Sampling from a function}. @item -e @itemx --envseed @cindex Seed, Random number generator @cindex Random number generator, Seed Use the value to the @code{GSL_RNG_SEED} environment variable to generate the random Monte Carlo sampling distribution, see @ref{Sampling from a function} and @ref{Generating random numbers}. @item -t FLT @itemx --tolerance=FLT The tolerance to switch from Monte Carlo integration to the central pixel value, see @ref{Sampling from a function}. @item -p @itemx --tunitinp The truncation column of the catalog is in units of pixels. By default, the truncation column is considered to be in units of the radial parameters of the profile (@option{--rcol}). Read it as `t-unit-in-p' for `truncation unit in pixels'. @item -f @itemx --mforflatpix When making fixed value profiles (``flat'', ``circumference'' or ``point'' profiles, see `@option{--fcol}'), do not use the value in the column specified by `@option{--mcol}' as the magnitude. Instead use it as the exact value that all the pixels of these profiles should have. This option is irrelevant for other types of profiles. This option is very useful for creating masks, or labeled regions in an image. Any integer, or floating point value can used in this column with this option, including @code{NaN} (or `@code{nan}', or `@code{NAN}', case is irrelevant), and infinities (@code{inf}, @code{-inf}, or @code{+inf}). For example, with this option if you set the value in the magnitude column (@option{--mcol}) to @code{NaN}, you can create an elliptical or circular mask over an image (which can be given as the argument), see @ref{Blank pixels}. Another useful application of this option is to create labeled elliptical or circular apertures in an image. To do this, set the value in the magnitude column to the label you want for this profile. This labeled image can then be used in combination with NoiseChisel's output (see @ref{NoiseChisel output}) to do aperture photometry with MakeCatalog (see @ref{MakeCatalog}). Alternatively, if you want to mark regions of the image (for example, with an elliptical circumference) and you do not want to use NaN values (as explained above) for some technical reason, you can get the minimum or maximum value in the image @footnote{ The minimum will give a better result, because the maximum can be too high compared to most pixels in the image, making it harder to display.} using Arithmetic (see @ref{Arithmetic}), then use that value in the magnitude column along with this option for all the profiles. Please note that when using MakeProfiles on an already existing image, you have to set `@option{--oversample=1}'. Otherwise all the profiles will be scaled up based on the oversampling scale in your configuration files (see @ref{Configuration files}) unless you have accounted for oversampling in your catalog. @item --mcolissum The value given in the ``magnitude'' column (specified by @option{--mcol}, see @ref{MakeProfiles catalog}) must be interpreted as total sum of pixel values, not magnitude (which is measured from the total sum and zero point, see @ref{Brightness flux magnitude}). When this option is called, the zero point magnitude (value to the @option{--zeropoint} option) is ignored and the given value must have the same units as the input dataset's pixels. Recall that the total profile magnitude that is specified with in the @option{--mcol} column of the input catalog is not an integration to infinity, but the actual sum of pixels in the profile (until the desired truncation radius). See @ref{Profile magnitude} for more on this point. @item --mcolnocustprof Do not touch (re-scale) the custom profile that should be inserted in @code{custom-prof} profile (see the description of @option{--fcol} in @ref{MakeProfiles catalog} or the description of @option{--customtable} below). By default, MakeProfiles will scale (multiply) the custom image's pixels to have the desired magnitude (or sum of pixels if @option{--mcolissum} is called) in that row. @item --mcolnocustimg Do not touch (re-scale) the custom image that should be inserted in @code{custom-img} profile (see the description of @option{--fcol} in @ref{MakeProfiles catalog}). By default, MakeProfiles will scale (multiply) the custom image's pixels to have the desired magnitude (or sum of pixels if @option{--mcolissum} is called) in that row. @item --magatpeak The magnitude column in the catalog (see @ref{MakeProfiles catalog}) will be used to set the value only for the profile's peak (maximum) pixel, not the full profile. Note that this is the flux of the profile's peak (maximum) pixel in the final output of MakeProfiles. So beware of the oversampling, see @ref{Oversampling}. This option can be useful if you want to check a mock profile's total magnitude at various truncation radii. Without this option, no matter what the truncation radius is, the total magnitude will be the same as that given in the catalog. But with this option, the total magnitude will become brighter as you increase the truncation radius. In sharper profiles, sometimes the accuracy of measuring the peak profile flux is more than the overall object sum or magnitude. In such cases, with this option, the final profile will be built such that its peak has the given magnitude, not the total profile. @cartouche @strong{CAUTION:} If you want to use this option for comparing with observations, please note that MakeProfiles does not do convolution. Unless you have deconvolved your data, your images are convolved with the instrument and atmospheric PSF, see @ref{PSF}. Particularly in sharper profiles, the flux in the peak pixel is strongly decreased after convolution. Also note that in such cases, besides deconvolution, you will have to set @option{--oversample=1} otherwise after resampling your profile with Warp (see @ref{Warp}), the peak flux will be different. @end cartouche @item --customtable FITS/TXT The filename of the table to use in the custom radial profiles (see description of @option{--fcol} in @ref{MakeProfiles catalog}. This can be a plain-text table, or FITS table, see @ref{Recognized table formats}, if it is a FITS table, you can use @option{--customtablehdu} to specify which HDU should be used (described below). A custom radial profile can have any value you want for a given radial profile (including NaN/blank values). Each interval is defined by its minimum (inclusive) and maximum (exclusive) radius, when a pixel center falls within a radius interval, the value specified for that interval will be used. If a pixel is not in the given intervals, a value of 0.0 will be used for that pixel. The table should have 3 columns as shown below. If the intervals are contiguous (the maximum value of the previous interval is equal to the minimum value of an interval) and the intervals all have the same size (difference between minimum and maximum values) the creation of these profiles will be fast. However, if the intervals are not sorted and contiguous, MakeProfiles will parse the intervals from the top of the table and use the first interval that contains the pixel center (this may slow it down). @table @asis @item Column 1: The interval's minimum radius. @item Column 2: The interval's maximum radius. @item Column 3: The value to be used for pixels within the given interval (including NaN/blank). @end table Gnuastro's column arithmetic in the Table program has the @code{sorted-to-interval} operator that will generate the first two columns from a single column (your radial profile). See the description of that operator in @ref{Column arithmetic} and the example below. By default, once a 2D image is constructed for the radial profile, it will be scaled such that its total magnitude corresponds to the value in the magnitude column (@option{--mcol}) of the main input catalog. If you want to disable the scaling and use the raw values in your custom profile (in other words: you want to ignore the magnitude column) you need to call @option{--mcolnocustprof} (see above). In the example below, we'll start with a certain radial profile, and use this option to build its 2D representation in an image (recall that you can build radial profiles with @ref{Generate radial profile}). But first, we will need to use the @code{sorted-to-interval} to build the necessary input format (see @ref{Column arithmetic}). @example $ cat radial.txt # Column 1: RADIUS [pix ,f32,] Radial distance # Column 2: MEAN [input-units,f32,] Mean of values. 0.0 1.00000 1.0 0.50184 1.4 0.37121 2.0 0.26414 2.2 0.23427 2.8 0.17868 3.0 0.16627 3.1 0.15567 3.6 0.13132 4.0 0.11404 ## Convert the radius in each row to an interval $ asttable radial.txt --output=interval.fits \ -c'arith RADIUS sorted-to-interval',MEAN ## Inspect the table containing intervals $ asttable interval.fits -ffixed -0.500000 0.500000 1.000000 0.500000 1.200000 0.501840 1.200000 1.700000 0.371210 1.700000 2.100000 0.264140 2.100000 2.500000 0.234270 2.500000 2.900000 0.178680 2.900000 3.050000 0.166270 3.050000 3.350000 0.155670 3.350000 3.800000 0.131320 3.800000 4.200000 0.114040 ## Build the 2D image of the profile from the interval. $ echo "1 7 7 8 10 2.5 0 1 1 2" \ | astmkprof --mergedsize=13,13 --oversample=1 \ --customtable=interval.fits \ --output=image.fits ## View the created FITS image. $ astscript-fits-view image.fits --ds9scale=minmax @end example Recall that if you want your image pixels to have the same values as the @code{MEAN} column in your profile, you should run MakeProfiles with @option{--mcolnocustprof}. In case you want to build the profile using @ref{Generate radial profile}, be sure to use the @option{--oversample} option of @command{astscript-radial-profile}. The higher the oversampling, the better your result will be. For example you can run the following script to see the effect (also see @url{https://savannah.gnu.org/bugs/?65106, bug 65106}). But don't take the oversampling too high: both the radial profile script and MakeProfiles will become slower and the precision of your results will decrease. @verbatim #!/bin/bash # Function to avoid repeating code: first generate a radial profile # with a certain oversampling, then build a 2D profile from it): # The first argument is the oversampling, the second is the suffix. gen_rad_make_2dprf () { # Generate the radial profile radraw=$bdir/radial-profile-$2.fits astscript-radial-profile $prof -o$radraw \ --oversample=$1 \ --zeroisnotblank # Generate the custom table format custraw=$bdir/customtable-$2.fits asttable $radraw --output=interval.fits \ -c'arith RADIUS sorted-to-interval',MEAN \ -o$custraw # Build the 2D profile. prof2draw=$bdir/prof2d-$2.fits echo "1 $xc $yc 8 30 0 0 1 0 1" \ | astmkprof --customtable=$custraw \ --mergedsize=$xw,$yw \ --output=$prof2draw \ --mcolnocustprof \ --oversample=1 \ --clearcanvas \ --mode=img } # Directory to hold built files bdir=build if ! [ -d $bdir ]; then mkdir $bdir; fi # Build a Gaussian profile in the center of an image to start with. prof=$bdir/prof.fits astmkprof --kernel=gaussian,2,5 -o$prof # Find the center pixel of the image xw=$(astfits $prof --keyvalue=NAXIS1 --quiet) yw=$(astfits $prof --keyvalue=NAXIS2 --quiet) xc=$(echo $xw | awk '{print int($1/2)+1}') yc=$(echo $yw| awk '{print int($1/2)+1}') # Generate two 2D radial profiles, one with an oversampling of 1 # and another with an oversampling of 5. gen_rad_make_2dprf 1 "raw" gen_rad_make_2dprf 5 "oversample" # View the two images beside each other: astscript-fits-view $bdir/prof2d-raw.fits \ $bdir/prof2d-oversample.fits @end verbatim @item --customtablehdu INT/STR The HDU/extension in the FITS file given to @option{--customtable}. @item --customimg=STR[,STR] A custom FITS image that should be used for the @code{custom-img} profiles (see the description of @option{--fcol} in @ref{MakeProfiles catalog}). Multiple files can be given to this option (separated by a comma), and this option can be called multiple times itself (useful when many custom image profiles should be added). If the HDU of the images are different, you can use @option{--customimghdu} (described below). Through the ``radius'' column, MakeProfiles will know which one of the images given to this option should be used in each row. For example, let's assume your input catalog (@file{cat.fits}) has the following contents (output of first command below), and you call MakeProfiles like the second command below to insert four profiles into the background @file{back.fits} image. The first profile below is Sersic (with an @option{--fcol}, or 4-th column, code of @code{1}). So MakeProfiles builds the pixels of the first profile, and all column values are meaningful. However, the second, third and fourth inserted objects are custom images (with an @option{--fcol} code of @code{10}). For the custom image profiles, you see that the radius column has values of @code{1} or @code{2}. This tells MakeProfiles to use the first image given to @option{--customimg} (or @file{gal-1.fits}) for the second and fourth inserted objects. The second image given to @option{--customimage} (or @file{gal-2.fits}) will be used for the third inserted object. Finally, all three custom image profiles have different magnitudes, and the values in @option{--ncol}, @option{--pcol}, @option{--qcol} and @option{--tcol} are ignored. @example $ cat cat.fits 1 53.15506 -27.785165 1 20 1 20 0.6 25 5 2 53.15602 -27.777887 10 1 0 0 0 22 0 3 53.16440 -27.775876 10 2 0 0 0 24 0 4 53.16849 -27.787406 10 1 0 0 0 23 0 $ astmkprof cat.fits --mode=wcs --zeropoint=25.68 \ --background=back.fits --output=out.fits \ --customimg=gal-1.fits --customimg=gal-2.fits @end example @item --customimghdu=INT/STR The HDU(s) of the images given to @option{--customimghdu}. If this option is only called once, but @option{--customimg} is called many times, MakeProfiles will assume that all images given to @option{--customimg} have the same HDU. Otherwise (if the number of HDUs is equal to the number of images), then each image will use its corresponding HDU. @item -X INT,INT @itemx --shift=INT,INT Shift all the profiles and enlarge the image along each dimension. To better understand this option, please see @mymath{n} in @ref{If convolving afterwards}. This is useful when you want to convolve the image afterwards. If you are using an external PSF, be sure to oversample it to the same scale used for creating the mock images. If a background image is specified, any possible value to this option is ignored. @item -c @itemx --prepforconv Shift all the profiles and enlarge the image based on half the width of the first Moffat or Gaussian profile in the catalog, considering any possible oversampling see @ref{If convolving afterwards}. @option{--prepforconv} is only checked and possibly activated if @option{--xshift} and @option{--yshift} are both zero (after reading the command-line and configuration files). If a background image is specified, any possible value to this option is ignored. @item -z FLT @itemx --zeropoint=FLT The zero point magnitude of the input. For more on the zero point magnitude, see @ref{Brightness flux magnitude}. @item -w FLT @itemx --circumwidth=FLT The width of the circumference if the profile is to be an elliptical circumference or annulus. See the explanations for this type of profile in @option{--fcol}. @item -R @itemx --replace Do not add the pixels of each profile over the background, or other profiles. But replace the values. By default, when two profiles overlap, the final pixel value is the sum of all the profiles that overlap on that pixel. This is the expected situation when dealing with physical object profiles like galaxies or stars/PSF. However, when MakeProfiles is used to build integer labeled images (for example, in @ref{Aperture photometry}), this is not the expected situation: the sum of two labels will be a new label. With this option, the pixels are not added but the largest (maximum) value over that pixel is used. Because the maximum operator is independent of the order of values, the output is also thread-safe. @end table @node MakeProfiles output dataset, MakeProfiles log file, MakeProfiles profile settings, Invoking astmkprof @subsubsection MakeProfiles output dataset MakeProfiles takes an input catalog uses basic properties that are defined there to build a dataset, for example, a 2D image containing the profiles in the catalog. In @ref{MakeProfiles catalog} and @ref{MakeProfiles profile settings}, the catalog and profile settings were discussed. The options of this section, allow you to configure the output dataset (or the canvas that will host the built profiles). @table @option @item -k FITS @itemx --background=FITS A background image FITS file to build the profiles on. The extension that contains the image should be specified with the @option{--backhdu} option, see below. When a background image is specified, it will be used to derive all the information about the output image. Hence, the following options will be ignored: @option{--mergedsize}, @option{--oversample}, @option{--crpix}, @option{--crval} (generally, all other WCS related parameters) and the output's data type (see @option{--type} in @ref{Input output options}). The background image will act like a canvas to build the profiles on: profile pixel values will be summed with the background image pixel values. With the @option{--replace} option you can disable this behavior and replace the profile pixels with the background pixels. If you want to use all the image information above, except for the pixel values (you want to have a blank canvas to build the profiles on, based on an input image), you can call @option{--clearcanvas}, to set all the input image's pixels to zero before starting to build the profiles over it (this is done in memory after reading the input, so nothing will happen to your input file). @item -B STR/INT @itemx --backhdu=STR/INT The header data unit (HDU) of the file given to @option{--background}. @item -C @itemx --clearcanvas When an input image is specified (with the @option{--background} option, set all its pixels to 0.0 immediately after reading it into memory. Effectively, this will allow you to use all its properties (described under the @option{--background} option), without having to worry about the pixel values. @option{--clearcanvas} can come in handy in many situations, for example, if you want to create a labeled image (segmentation map) for creating a catalog (see @ref{MakeCatalog}). In other cases, you might have modeled the objects in an image and want to create them on the same frame, but without the original pixel values. @item -E STR/INT,FLT[,FLT,[...]] @itemx --kernel=STR/INT,FLT[,FLT,[...]] Only build one kernel profile with the parameters given as the values to this option. The different values must be separated by a comma (@key{,}). The first value identifies the radial function of the profile, either through a string or through a number (see description of @option{--fcol} in @ref{MakeProfiles catalog}). Each radial profile needs a different total number of parameters: S@'ersic and Moffat functions need 3 parameters: radial, S@'ersic index or Moffat @mymath{\beta}, and truncation radius. The Gaussian function needs two parameters: radial and truncation radius. The point function does not need any parameters and flat and circumference profiles just need one parameter (truncation radius). The PSF or kernel is a unique (and highly constrained) type of profile: the sum of its pixels must be one, its center must be the center of the central pixel (in an image with an odd number of pixels on each side), and commonly it is circular, so its axis ratio and position angle are one and zero respectively. Kernels are commonly necessary for various data analysis and data manipulation steps (for example, see @ref{Convolve}, and @ref{NoiseChisel}. Because of this it is inconvenient to define a catalog with one row and many zero valued columns (for all the non-necessary parameters). Hence, with this option, it is possible to create a kernel with MakeProfiles without the need to create a catalog. Here are some examples: @table @option @item --kernel=moffat,3,2.8,5 A Moffat kernel with FWHM of 3 pixels, @mymath{\beta=2.8} which is truncated at 5 times the FWHM. @item --kernel=gaussian,2,3 A circular Gaussian kernel with FWHM of 2 pixels and truncated at 3 times the FWHM. @end table This option may also be used to create a 3D kernel. To do that, two small modifications are necessary: add a @code{-3d} (or @code{-3D}) to the profile name (for example, @code{moffat-3d}) and add a number (axis-ratio along the third dimension) to the end of the parameters for all profiles except @code{point}. The main reason behind providing an axis ratio in the third dimension is that in 3D astronomical datasets, commonly the third dimension does not have the same nature (units/sampling) as the first and second. For example, in IFU (optical) or Radio data cubes, the first and second dimensions are commonly spatial/angular positions (like RA and Dec) but the third dimension is wavelength or frequency (in units of Angstroms for Herz). Because of this different nature (which also affects the processing), it may be necessary for the kernel to have a different extent in that direction. If the 3rd dimension axis ratio is equal to @mymath{1.0}, then the kernel will be a spheroid. If it is smaller than @mymath{1.0}, the kernel will be button-shaped: extended less in the third dimension. However, when it islarger than @mymath{1.0}, the kernel will be bullet-shaped: extended more in the third dimension. In the latter case, the radial parameter will correspond to the length along the 3rd dimension. For example, let's have a look at the two examples above but in 3D: @table @option @item --kernel=moffat-3d,3,2.8,5,0.5 An ellipsoid Moffat kernel with FWHM of 3 pixels, @mymath{\beta=2.8} which is truncated at 5 times the FWHM. The ellipsoid is circular in the first two dimensions, but in the third dimension its extent is half the first two. @item --kernel=gaussian-3d,2,3,1 A spherical Gaussian kernel with FWHM of 2 pixels and truncated at 3 times the FWHM. @end table Of course, if a specific kernel is needed that does not fit the constraints imposed by this option, you can always use a catalog to define any arbitrary kernel. Just call the @option{--individual} and @option{--nomerged} options to make sure that it is built as a separate file (individually) and no ``merged'' image of the input profiles is created. @item -x INT,INT @itemx --mergedsize=INT,INT The number of pixels along each axis of the output, in FITS order. This is before over-sampling. For example, if you call MakeProfiles with @option{--mergedsize=100,150 --oversample=5} (assuming no shift due for later convolution), then the final image size along the first axis will be 500 by 750 pixels. Fractions are acceptable as values for each dimension, however, they must reduce to an integer, so @option{--mergedsize=150/3,300/3} is acceptable but @option{--mergedsize=150/4,300/4} is not. When viewing a FITS image in DS9, the first FITS dimension is in the horizontal direction and the second is vertical. As an example, the image created with the example above will have 500 pixels horizontally and 750 pixels vertically. If a background image is specified, this option is ignored. @item -s INT @itemx --oversample=INT The scale to over-sample the profiles and final image. If not an odd number, will be added by one, see @ref{Oversampling}. Note that this @option{--oversample} will remain active even if an input image is specified. If your input catalog is based on the background image, be sure to set @option{--oversample=1}. @item --psfinimg Build the possibly existing PSF profiles (Moffat or Gaussian) in the catalog into the final image. By default they are built separately so you can convolve your images with them, thus their magnitude and positions are ignored. With this option, they will be built in the final image like every other galaxy profile. To have a final PSF in your image, make a point profile where you want the PSF and after convolution it will be the PSF. @item -i @itemx --individual @cindex Individual profiles @cindex Build individual profiles If this option is called, each profile is created in a separate FITS file within the same directory as the output and the row number of the profile (starting from zero) in the name. The file for each row's profile will be in the same directory as the final combined image of all the profiles and will have the final image's name as a suffix. So for example, if the final combined image is named @file{./out/fromcatalog.fits}, then the first profile that will be created with this option will be named @file{./out/0_fromcatalog.fits}. Since each image only has one full profile out to the truncation radius the profile is centered and so, only the sub-pixel position of the profile center is important for the outputs of this option. The output will have an odd number of pixels. If there is no oversampling, the central pixel will contain the profile center. If the value to @option{--oversample} is larger than unity, then the profile center is on any of the central @option{--oversample}'d pixels depending on the fractional value of the profile center. If the fractional value is larger than half, it is on the bottom half of the central region. This is due to the FITS definition of a real number position: The center of a pixel has fractional value @mymath{0.00} so each pixel contains these fractions: .5 -- .75 -- .00 (pixel center) -- .25 -- .5. @item -m @itemx --nomerged Do not make a merged image. By default after making the profiles, they are added to a final image with side lengths specified by @option{--mergedsize} if they overlap with it. @end table @noindent The options below can be used to define the world coordinate system (WCS) properties of the MakeProfiles outputs. The option names are deliberately chosen to be the same as the FITS standard WCS keywords. See Section 8 of @url{https://doi.org/10.1051/0004-6361/201015362, Pence et al [2010]} for a short introduction to WCS in the FITS standard@footnote{The world coordinate standard in FITS is a very beautiful and powerful concept to link/associate datasets with the outside world (other datasets). The description in the FITS standard (link above) only touches the tip of the ice-burg. To learn more please see @url{https://doi.org/10.1051/0004-6361:20021326, Greisen and Calabretta [2002]}, @url{https://doi.org/10.1051/0004-6361:20021327, Calabretta and Greisen [2002]}, @url{https://doi.org/10.1051/0004-6361:20053818, Greisen et al. [2006]}, and @url{http://www.atnf.csiro.au/people/mcalabre/WCS/dcs_20040422.pdf, Calabretta et al.}}. If you look into the headers of a FITS image with WCS for example, you will see all these names but in uppercase and with numbers to represent the dimensions, for example, @code{CRPIX1} and @code{PC2_1}. You can see the FITS headers with Gnuastro's @ref{Fits} program using a command like this: @command{$ astfits -p image.fits}. If the values given to any of these options does not correspond to the number of dimensions in the output dataset, then no WCS information will be added. Also recall that if you use the @option{--background} option, all of these options are ignored. Such that if the image given to @option{--background} does not have any WCS, the output of MakeProfiles will also not have any WCS, even if these options are given@footnote{If you want to add profiles @emph{and} WCS over the background image (to produce your output), you need more than one command: 1. You should use @option{--mergedsize} in MakeProfiles to manually set the output number of pixels equal to your desired background image (so the background is zero). In this mode, you can use these WCS-related options to define the WCS. 2. Then use Arithmetic to add the pixels of your mock image to the background (see @ref{Arithmetic}.}. @table @option @item --crpix=FLT,FLT The pixel coordinates of the WCS reference point. Fractions are acceptable for the values of this option. @item --crval=FLT,FLT The WCS coordinates of the Reference point. Fractions are acceptable for the values of this option. The comma-separated values can either be in degrees (a single number), or sexagesimal (@code{_h_m_} for RA, @code{_d_m_} for Dec, or @code{_:_:_} for both). In any case, the final value that will be written in the @code{CRVAL} keyword will be a floating point number in degrees (according to the FITS standard). @item --cdelt=FLT,FLT The resolution (size of one data-unit or pixel in WCS units) of the non-oversampled dataset. Fractions are acceptable for the values of this option. @item --pc=FLT,FLT,FLT,FLT The PC matrix of the WCS rotation, see the FITS standard (link above) to better understand the PC matrix. @item --cunit=STR,STR The units of each WCS axis, for example, @code{deg}. Note that these values are part of the FITS standard (link above). MakeProfiles will not complain if you use non-standard values, but later usage of them might cause trouble. @item --ctype=STR,STR The type of each WCS axis, for example, @code{RA---TAN} and @code{DEC--TAN}. Note that these values are part of the FITS standard (link above). MakeProfiles will not complain if you use non-standard values, but later usage of them might cause trouble. @end table @node MakeProfiles log file, , MakeProfiles output dataset, Invoking astmkprof @subsubsection MakeProfiles log file Besides the final merged dataset of all the profiles, or the individual datasets (see @ref{MakeProfiles output dataset}), if the @option{--log} option is called MakeProfiles will also create a log file in the current directory (where you run MockProfiles). See @ref{Common options} for a full description of @option{--log} and other options that are shared between all Gnuastro programs. The values for each column are explained in the first few commented lines of the log file (starting with @command{#} character). Here is a more complete description. @itemize @item An ID (row number of profile in input catalog). @item The total magnitude of the profile in the output dataset. When the profile does not completely overlap with the output dataset, this will be different from your input magnitude. @item The number of pixels (in the oversampled image) which used Monte Carlo integration and not the central pixel value, see @ref{Sampling from a function}. @item The fraction of flux in the Monte Carlo integrated pixels. @item If an individual image was created, this column will have a value of @code{1}, otherwise it will have a value of @code{0}. @end itemize @node High-level calculations, Installed scripts, Data modeling, Top @chapter High-level calculations After the reduction of raw data (for example, with the programs in @ref{Data manipulation}) you will have reduced images/data ready for processing/analyzing (for example, with the programs in @ref{Data analysis}). But the processed/analyzed data (or catalogs) are still not enough to derive any scientific result. Even higher-level analysis is still needed to convert the observed magnitudes, sizes or volumes into physical quantities that we associate with each catalog entry or detected object which is the purpose of the tools in this section. @menu * CosmicCalculator:: Calculate cosmological variables @end menu @node CosmicCalculator, , High-level calculations, High-level calculations @section CosmicCalculator To derive higher-level information regarding our sources in extra-galactic astronomy, cosmological calculations are necessary. In Gnuastro, CosmicCalculator is in charge of such calculations. Before discussing how CosmicCalculator is called and operates (in @ref{Invoking astcosmiccal}), it is important to provide a rough but mostly self sufficient review of the basics and the equations used in the analysis. In @ref{Distance on a 2D curved space} the basic idea of understanding distances in a curved and expanding 2D universe (which we can visualize) are reviewed. Having solidified the concepts there, in @ref{Extending distance concepts to 3D}, the formalism is extended to the 3D universe we are trying to study in our research. The focus here is obtaining a physical insight into these equations (mainly for the use in real observational studies). There are many books thoroughly deriving and proving all the equations with all possible initial conditions and assumptions for any abstract universe, interested readers can study those books. @menu * Distance on a 2D curved space:: Distances in 2D for simplicity. * Extending distance concepts to 3D:: Going to 3D (our real universe). * Invoking astcosmiccal:: How to run CosmicCalculator. @end menu @node Distance on a 2D curved space, Extending distance concepts to 3D, CosmicCalculator, CosmicCalculator @subsection Distance on a 2D curved space The observations to date (for example, the Planck 2015 results), have not measured@footnote{The observations are interpreted under the assumption of uniform curvature. For a relativistic alternative to dark energy (and maybe also some part of dark matter), non-uniform curvature may be even be more critical, but that is beyond the scope of this brief explanation.} the presence of significant curvature in the universe. However to be generic (and allow its measurement if it does in fact exist), it is very important to create a framework that allows non-zero uniform curvature. However, this section is not intended to be a fully thorough and mathematically complete derivation of these concepts. There are many references available for such reviews that go deep into the abstract mathematical proofs. The emphasis here is on visualization of the concepts for a beginner. As 3D beings, it is difficult for us to mentally create (visualize) a picture of the curvature of a 3D volume. Hence, here we will assume a 2D surface/space and discuss distances on that 2D surface when it is flat and when it is curved. Once the concepts have been created/visualized here, we will extend them, in @ref{Extending distance concepts to 3D}, to a real 3D spatial @emph{slice} of the Universe we live in and hope to study. To be more understandable (actively discuss from an observer's point of view) let's assume there's an imaginary 2D creature living on the 2D space (which @emph{might} be curved in 3D). Here, we will be working with this creature in its efforts to analyze distances in its 2D universe. The start of the analysis might seem too mundane, but since it is difficult to imagine a 3D curved space, it is important to review all the very basic concepts thoroughly for an easy transition to a universe that is more difficult to visualize (a curved 3D space embedded in 4D). To start, let's assume a static (not expanding or shrinking), flat 2D surface similar to @ref{flatplane} and that the 2D creature is observing its universe from point @mymath{A}. One of the most basic ways to parameterize this space is through the Cartesian coordinates (@mymath{x}, @mymath{y}). In @ref{flatplane}, the basic axes of these two coordinates are plotted. An infinitesimal change in the direction of each axis is written as @mymath{dx} and @mymath{dy}. For each point, the infinitesimal changes are parallel with the respective axes and are not shown for clarity. Another very useful way of parameterizing this space is through polar coordinates. For each point, we define a radius (@mymath{r}) and angle (@mymath{\phi}) from a fixed (but arbitrary) reference axis. In @ref{flatplane} the infinitesimal changes for each polar coordinate are plotted for a random point and a dashed circle is shown for all points with the same radius. @float Figure,flatplane @center@image{gnuastro-figures/flatplane, 10cm, , } @caption{Two dimensional Cartesian and polar coordinates on a flat plane.} @end float Assuming an object is placed at a certain position, which can be parameterized as @mymath{(x,y)}, or @mymath{(r,\phi)}, a general infinitesimal change in its position will place it in the coordinates @mymath{(x+dx,y+dy)}, or @mymath{(r+dr,\phi+d\phi)}. The distance (on the flat 2D surface) that is covered by this infinitesimal change in the static universe (@mymath{ds_s}, the subscript signifies the static nature of this universe) can be written as: @dispmath{ds_s^2=dx^2+dy^2=dr^2+r^2d\phi^2} The main question is this: how can the 2D creature incorporate the (possible) curvature in its universe when it's calculating distances? The universe that it lives in might equally be a curved surface like @ref{sphereandplane}. The answer to this question but for a 3D being (us) is the whole purpose to this discussion. Here, we want to give the 2D creature (and later, ourselves) the tools to measure distances if the space (that hosts the objects) is curved. @ref{sphereandplane} assumes a spherical shell with radius @mymath{R} as the curved 2D plane for simplicity. The 2D plane is tangent to the spherical shell and only touches it at @mymath{A}. This idea will be generalized later. The first step in measuring the distance in a curved space is to imagine a third dimension along the @mymath{z} axis as shown in @ref{sphereandplane}. For simplicity, the @mymath{z} axis is assumed to pass through the center of the spherical shell. Our imaginary 2D creature cannot visualize the third dimension or a curved 2D surface within it, so the remainder of this discussion is purely abstract for it (similar to us having difficulty in visualizing a 3D curved space in 4D). But since we are 3D creatures, we have the advantage of visualizing the following steps. Fortunately the 2D creature is already familiar with our mathematical constructs, so it can follow our reasoning. With the third axis added, a generic infinitesimal change over @emph{the full} 3D space corresponds to the distance: @dispmath{ds_s^2=dx^2+dy^2+dz^2=dr^2+r^2d\phi^2+dz^2.} @float Figure,sphereandplane @center@image{gnuastro-figures/sphereandplane, 10cm, , } @caption{2D spherical shell (centered on @mymath{O}) and flat plane (light gray) tangent to it at point @mymath{A}.} @end float It is very important to recognize that this change of distance is for @emph{any} point in the 3D space, not just those changes that occur on the 2D spherical shell of @ref{sphereandplane}. Recall that our 2D friend can only do measurements on the 2D surfaces, not the full 3D space. So we have to constrain this general change to any change on the 2D spherical shell. To do that, let's look at the arbitrary point @mymath{P} on the 2D spherical shell. Its image (@mymath{P'}) on the flat plain is also displayed. From the dark gray triangle, we see that @dispmath{\sin\theta={r\over R},\quad\cos\theta={R-z\over R}.}These relations allow the 2D creature to find the value of @mymath{z} (an abstract dimension for it) as a function of r (distance on a flat 2D plane, which it can visualize) and thus eliminate @mymath{z}. From @mymath{\sin^2\theta+\cos^2\theta=1}, we get @mymath{z^2-2Rz+r^2=0} and solving for @mymath{z}, we find: @dispmath{z=R\left(1\pm\sqrt{1-{r^2\over R^2}}\right).} The @mymath{\pm} can be understood from @ref{sphereandplane}: For each @mymath{r}, there are two points on the sphere, one in the upper hemisphere and one in the lower hemisphere. An infinitesimal change in @mymath{r}, will create the following infinitesimal change in @mymath{z}: @dispmath{dz={\mp r\over R}\left(1\over \sqrt{1-{r^2/R^2}}\right)dr.}Using the positive signed equation instead of @mymath{dz} in the @mymath{ds_s^2} equation above, we get: @dispmath{ds_s^2={dr^2\over 1-r^2/R^2}+r^2d\phi^2.} The derivation above was done for a spherical shell of radius @mymath{R} as a curved 2D surface. To generalize it to any surface, we can define @mymath{K=1/R^2} as the curvature parameter. Then the general infinitesimal change in a static universe can be written as: @dispmath{ds_s^2={dr^2\over 1-Kr^2}+r^2d\phi^2.} Therefore, when @mymath{K>0} (and curvature is the same everywhere), we have a finite universe, where @mymath{r} cannot become larger than @mymath{R} as in @ref{sphereandplane}. When @mymath{K=0}, we have a flat plane (@ref{flatplane}) and a negative @mymath{K} will correspond to an imaginary @mymath{R}. The latter two cases may be infinite in area (which is not a simple concept, but mathematically can be modeled with @mymath{r} extending infinitely), or finite-area (like a cylinder is flat everywhere with @mymath{ds_s^2={dx^2 + dy^2}}, but finite in one direction in size). @cindex Proper distance A very important issue that can be discussed now (while we are still in 2D and can actually visualize things) is that @mymath{\overrightarrow{r}} is tangent to the curved space at the observer's position. In other words, it is on the gray flat surface of @ref{sphereandplane}, even when the universe if curved: @mymath{\overrightarrow{r}=P'-A}. Therefore for the point @mymath{P} on a curved space, the raw coordinate @mymath{r} is the distance to @mymath{P'}, not @mymath{P}. The distance to the point @mymath{P} (at a specific coordinate @mymath{r} on the flat plane) over the curved surface (thick line in @ref{sphereandplane}) is called the @emph{proper distance} and is displayed with @mymath{l}. For the specific example of @ref{sphereandplane}, the proper distance can be calculated with: @mymath{l=R\theta} (@mymath{\theta} is in radians). Using the @mymath{\sin\theta} relation found above, we can find @mymath{l} as a function of @mymath{r}: @dispmath{\theta=\sin^{-1}\left({r\over R}\right)\quad\rightarrow\quad l(r)=R\sin^{-1}\left({r\over R}\right)} @mymath{R} is just an arbitrary constant and can be directly found from @mymath{K}, so for cleaner equations, it is common practice to set @mymath{R=1}, which gives: @mymath{l(r)=\sin^{-1}r}. Also note that when @mymath{R=1}, then @mymath{l=\theta}. Generally, depending on the curvature, in a @emph{static} universe the proper distance can be written as a function of the coordinate @mymath{r} as (from now on we are assuming @mymath{R=1}): @dispmath{l(r)=\sin^{-1}(r)\quad(K>0),\quad\quad l(r)=r\quad(K=0),\quad\quad l(r)=\sinh^{-1}(r)\quad(K<0).}With @mymath{l}, the infinitesimal change of distance can be written in a more simpler and abstract form of @dispmath{ds_s^2=dl^2+r^2d\phi^2.} @cindex Comoving distance Until now, we had assumed a static universe (not changing with time). But our observations so far appear to indicate that the universe is expanding (it is not static). Since there is no reason to expect the observed expansion is unique to our particular position of the universe, we expect the universe to be expanding at all points with the same rate at the same time. Therefore, to add a time dependence to our distance measurements, we can include a multiplicative scaling factor, which is a function of time: @mymath{a(t)}. The functional form of @mymath{a(t)} comes from the cosmology, the physics we assume for it: general relativity, and the choice of whether the universe is uniform (`homogeneous') in density and curvature or inhomogeneous. In this section, the functional form of @mymath{a(t)} is irrelevant, so we can avoid these issues. With this scaling factor, the proper distance will also depend on time. As the universe expands, the distance between two given points will shift to larger values. We thus define a distance measure, or coordinate, that is independent of time and thus does not `move'. We call it the @emph{comoving distance} and display with @mymath{\chi} such that: @mymath{l(r,t)=\chi(r)a(t)}. We have therefore, shifted the @mymath{r} dependence of the proper distance we derived above for a static universe to the comoving distance: @dispmath{\chi(r)=\sin^{-1}(r)\quad(K>0),\quad\quad \chi(r)=r\quad(K=0),\quad\quad \chi(r)=\sinh^{-1}(r)\quad(K<0).} Therefore, @mymath{\chi(r)} is the proper distance to an object at a specific reference time: @mymath{t=t_r} (the @mymath{r} subscript signifies ``reference'') when @mymath{a(t_r)=1}. At any arbitrary moment (@mymath{t\neq{t_r}}) before or after @mymath{t_r}, the proper distance to the object can be scaled with @mymath{a(t)}. Measuring the change of distance in a time-dependent (expanding) universe only makes sense if we can add up space and time@footnote{In other words, making our space-time consistent with Minkowski space-time geometry. In this geometry, different observers at a given point (event) in space-time split up space-time into `space' and `time' in different ways, just like people at the same spatial position can make different choices of splitting up a map into `left--right' and `up--down'. This model is well supported by twentieth and twenty-first century observations.}. But we can only add bits of space and time together if we measure them in the same units: with a conversion constant (similar to how 1000 is used to convert a kilometer into meters). Experimentally, we find strong support for the hypothesis that this conversion constant is the speed of light (or gravitational waves@footnote{The speed of gravitational waves was recently found to be very similar to that of light in vacuum, see LIGO Collaboration @url{https://arxiv.org/abs/1710.05834,2017}.}) in a vacuum. This speed is postulated to be constant@footnote{In @emph{natural units}, speed is measured in units of the speed of light in vacuum.} and is almost always written as @mymath{c}. We can thus parameterize the change in distance on an expanding 2D surface as @dispmath{ds^2=c^2dt^2-a^2(t)ds_s^2 = c^2dt^2-a^2(t)(d\chi^2+r^2d\phi^2).} @node Extending distance concepts to 3D, Invoking astcosmiccal, Distance on a 2D curved space, CosmicCalculator @subsection Extending distance concepts to 3D The concepts of @ref{Distance on a 2D curved space} are here extended to a 3D space that @emph{might} be curved. We can start with the generic infinitesimal distance in a static 3D universe, but this time in spherical coordinates instead of polar coordinates. @mymath{\theta} is shown in @ref{sphereandplane}, but here we are 3D beings, positioned on @mymath{O} (the center of the sphere) and the point @mymath{O} is tangent to a 4D-sphere. In our 3D space, a generic infinitesimal displacement will correspond to the following distance in spherical coordinates: @dispmath{ds_s^2=dx^2+dy^2+dz^2=dr^2+r^2(d\theta^2+\sin^2{\theta}d\phi^2).} Like the 2D creature before, we now have to assume an abstract dimension which we cannot visualize easily. Let's call the fourth dimension @mymath{w}, then the general change in coordinates in the @emph{full} four dimensional space will be: @dispmath{ds_s^2=dr^2+r^2(d\theta^2+\sin^2{\theta}d\phi^2)+dw^2.} @noindent But we can only work on a 3D curved space, so following exactly the same steps and conventions as our 2D friend, we arrive at: @dispmath{ds_s^2={dr^2\over 1-Kr^2}+r^2(d\theta^2+\sin^2{\theta}d\phi^2).} @noindent In a non-static universe (with a scale factor a(t)), the distance can be written as: @dispmath{ds^2=c^2dt^2-a^2(t)[d\chi^2+r^2(d\theta^2+\sin^2{\theta}d\phi^2)].} @c@dispmath{H(z){\equiv}\left(\dot{a}\over a\right)(z)=H_0E(z) } @c@dispmath{E(z)=[ \Omega_{\Lambda,0} + \Omega_{C,0}(1+z)^2 + @c\Omega_{m,0}(1+z)^3 + \Omega_{r,0}(1+z)^4 ]^{1/2}} @c Let's take @mymath{r} to be the radial coordinate of the emitting @c source, which emitted its light at redshift $z$. Then the comoving @c distance of this object would be: @c@dispmath{ \chi(r)={c\over H_0a_0}\int_0^z{dz'\over E(z')} } @c@noindent @c So the proper distance at the current time to that object is: @c @mymath{a_0\chi(r)}, therefore the angular diameter distance @c (@mymath{d_A}) and luminosity distance (@mymath{d_L}) can be written @c as: @c@dispmath{ d_A={a_0\chi(r)\over 1+z}, \quad d_L=a_0\chi(r)(1+z) } @node Invoking astcosmiccal, , Extending distance concepts to 3D, CosmicCalculator @subsection Invoking CosmicCalculator CosmicCalculator will calculate cosmological variables based on the input parameters. The executable name is @file{astcosmiccal} with the following general template @example $ astcosmiccal [OPTION...] ... @end example @noindent One line examples: @example ## Print basic cosmological properties at redshift 2.5: $ astcosmiccal -z2.5 ## Only print Comoving volume over 4pi stradian to z (Mpc^3): $ astcosmiccal --redshift=0.8 --volume ## Print redshift and age of universe when Lyman-alpha line is ## at 6000 angstrom (another way to specify redshift). $ astcosmiccal --obsline=Ly-alpha,6000 --age ## Print luminosity distance, angular diameter distance and age ## of universe in one row at redshift 0.4 $ astcosmiccal -z0.4 -LAg ## Assume Lambda and matter density of 0.7 and 0.3 and print ## basic cosmological parameters for redshift 2.1: $ astcosmiccal -l0.7 -m0.3 -z2.1 ## Print wavelength of all pre-defined spectral lines when ## Lyman-alpha is observed at 4000 Angstroms. $ astcosmiccal --obsline=Ly-alpha,4000 --listlinesatz @end example The input parameters (current matter density, etc.) can be given as command-line options or in the configuration files, see @ref{Configuration files}. For a definition of the different parameters, please see the sections prior to this. If no redshift is given, CosmicCalculator will just print its input parameters and abort. For a full list of the input options, please see @ref{CosmicCalculator input options}. Without any particular output requested (and only a given redshift), CosmicCalculator will print all basic cosmological calculations (one per line) with some explanations before each. This can be good when you want a general feeling of the conditions at a specific redshift. Alternatively, if any specific calculation(s) are requested (its possible to call more than one), only the requested value(s) will be calculated and printed with one character space between them. In this case, no description or units will be printed. See @ref{CosmicCalculator basic cosmology calculations} for the full list of these options along with some explanations how when/how they can be useful. Another common operation in observational cosmology is dealing with spectral lines at different redshifts. CosmicCalculator also has features to help in such situations, please see @ref{CosmicCalculator spectral line calculations}. @menu * CosmicCalculator input options:: Options to specify input conditions. * CosmicCalculator basic cosmology calculations:: Such as distance modulus and distances. * CosmicCalculator spectral line calculations:: How they get affected by redshift. @end menu @node CosmicCalculator input options, CosmicCalculator basic cosmology calculations, Invoking astcosmiccal, Invoking astcosmiccal @subsubsection CosmicCalculator input options The inputs to CosmicCalculator can be specified with the following options: @table @option @item -z FLT @itemx --redshift=FLT The redshift of interest. There are two other ways that you can specify the target redshift: 1) Spectral lines and their observed wavelengths, see @option{--obsline}. 2) Velocity, see @option{--velocity}. Hence this option cannot be called with @option{--obsline} or @option{--velocity}. @item -y FLT @itemx --velocity=FLT Input velocity in km/s. The given value will be converted to redshift internally, and used in any subsequent calculation. This option is thus an alternative to @code{--redshift} or @code{--obsline}, it cannot be used with them. The conversion will be done with the more general and accurate relativistic equation of @mymath{1+z=\sqrt{(c+v)/(c-v)}}, not the simplified @mymath{z\approx v/c}. @item -H FLT @itemx --H0=FLT Current expansion rate (in km sec@mymath{^{-1}} Mpc@mymath{^{-1}}). @item -l FLT @itemx --olambda=FLT Cosmological constant density divided by the critical density in the current Universe (@mymath{\Omega_{\Lambda,0}}). @item -m FLT @itemx --omatter=FLT Matter (including massive neutrinos) density divided by the critical density in the current Universe (@mymath{\Omega_{m,0}}). @item -r FLT @itemx --oradiation=FLT Radiation density divided by the critical density in the current Universe (@mymath{\Omega_{r,0}}). @item -O STR/FLT,FLT @itemx --obsline=STR/FLT,FLT @cindex Rest-frame wavelength @cindex Wavelength, rest-frame Find the redshift to use in next steps based on the rest-frame and observed wavelengths of a line. This option is thus an alternative to @code{--redshift} or @code{--velocity}, it cannot be used with them. The first argument identifies the line. It can be one of the standard names, or any rest-frame wavelength in Angstroms. The second argument is the observed wavelength of that line. For example, @option{--obsline=Ly-alpha,6000} is the same as @option{--obsline=1215.64,6000}. Wavelengths are assumed to be in Angstroms by default (other units can be selected with @option{--lineunit}, see @ref{CosmicCalculator spectral line calculations}). The list of pre-defined names for the lines in Gnuastro's database is available by running @example $ astcosmiccal --listlines @end example @end table @node CosmicCalculator basic cosmology calculations, CosmicCalculator spectral line calculations, CosmicCalculator input options, Invoking astcosmiccal @subsubsection CosmicCalculator basic cosmology calculations By default, when no specific calculations are requested, CosmicCalculator will print a complete set of all its calculators (one line for each calculation, see @ref{Invoking astcosmiccal}). The full list of calculations can be useful when you do not want any specific value, but just a general view. In other contexts (for example, in a batch script or during a discussion), you know exactly what you want and do not want to be distracted by all the extra information. You can use any number of the options described below in any order. When any of these options are requested, CosmicCalculator's output will just be a single line with a single space between the (possibly) multiple values. In the example below, only the tangential distance along one arc-second (in kpc), absolute magnitude conversion, and age of the universe at redshift 2 are printed (recall that you can merge short options together, see @ref{Options}). @example $ astcosmiccal -z2 -sag 8.585046 44.819248 3.289979 @end example Here is one example of using this feature in scripts: by adding the following two lines in a script to keep/use the comoving volume with varying redshifts: @example z=3.12 vol=$(astcosmiccal --redshift=$z --volume) @end example @cindex GNU Grep @noindent In a script, this operation might be necessary for a large number of objects (several of galaxies in a catalog for example). So the fact that all the other default calculations are ignored will also help you get to your result faster. If you are indeed dealing with many (for example, thousands) of redshifts, using CosmicCalculator is not the best/fastest solution. Because it has to go through all the configuration files and preparations for each invocation. To get the best efficiency (least overhead), we recommend using Gnuastro's cosmology library (see @ref{Cosmology library}). CosmicCalculator also calls the library functions defined there for its calculations, so you get the same result with no overhead. Gnuastro also has libraries for easily reading tables into a C program, see @ref{Table input output}. Afterwards, you can easily build and run your C program for the particular processing with @ref{BuildProgram}. If you just want to inspect the value of a variable visually, the description (which comes with units) might be more useful. In such cases, the following command might be better. The other calculations will also be done, but they are so fast that you will not notice on modern computers (the time it takes your eye to focus on the result is usually longer than the processing: a fraction of a second). @example $ astcosmiccal --redshift=0.832 | grep volume @end example The full list of CosmicCalculator's specific calculations is present below in two groups: basic cosmology calculations and those related to spectral lines. In case you have forgot the units, you can use the @option{--help} option which has the units along with a short description. @table @option @item -e @itemx --usedredshift The redshift that was used in this run. In many cases this is the main input parameter to CosmicCalculator, but it is useful in others. For example, in combination with @option{--obsline} (where you give an observed and rest-frame wavelength and would like to know the redshift) or with @option{--velocity} (where you specify the velocity instead of redshift). Another example is when you run CosmicCalculator in a loop, while changing the redshift and you want to keep the redshift value with the resulting calculation. @item -Y @itemx --usedvelocity The velocity (in km/s) that was used in this run. The conversion from redshift will be done with the more general and accurate relativistic equation of @mymath{1+z=\sqrt{(c+v)/(c-v)}}, not the simplified @mymath{z\approx v/c}. @item -G @itemx --agenow The current age of the universe (given the input parameters) in Ga (Giga annum, or billion years). @item -C @itemx --criticaldensitynow The current critical density (given the input parameters) in grams per centimeter-cube (@mymath{g/cm^3}). @item -d @itemx --properdistance The proper distance (at current time) to object at the given redshift in Megaparsecs (Mpc). See @ref{Distance on a 2D curved space} for a description of the proper distance. @item -A @itemx --angulardiamdist The angular diameter distance to object at given redshift in Megaparsecs (Mpc). @item -s @itemx --arcsectandist The tangential distance covered by 1 arc-seconds at the given redshift in kiloparsecs (Kpc). This can be useful when trying to estimate the resolution or pixel scale of an instrument (usually in units of arc-seconds) at a given redshift. @item -L @itemx --luminositydist The luminosity distance to object at given redshift in Megaparsecs (Mpc). @item -u @itemx --distancemodulus The distance modulus at given redshift. @item -a @itemx --absmagconv The conversion factor (addition) to absolute magnitude. Note that this is practically the distance modulus added with @mymath{-2.5\log{(1+z)}} for the desired redshift based on the input parameters. Once the apparent magnitude and redshift of an object is known, this value may be added with the apparent magnitude to give the object's absolute magnitude. @item -g @itemx --age Age of the universe at given redshift in Ga (Giga annum, or billion years). @item -b @itemx --lookbacktime The look-back time to given redshift in Ga (Giga annum, or billion years). The look-back time at a given redshift is defined as the current age of the universe (@option{--agenow}) subtracted by the age of the universe at the given redshift. @item -c @itemx --criticaldensity The critical density at given redshift in grams per centimeter-cube (@mymath{g/cm^3}). @item -v @itemx --onlyvolume The comoving volume in Megaparsecs cube (Mpc@mymath{^3}) until the desired redshift based on the input parameters. @end table @node CosmicCalculator spectral line calculations, , CosmicCalculator basic cosmology calculations, Invoking astcosmiccal @subsubsection CosmicCalculator spectral line calculations @cindex Rest frame wavelength At different redshifts, observed spectral lines are shifted compared to their rest frame wavelengths with this simple relation: @mymath{\lambda_{obs}=\lambda_{rest}(1+z)}. Although this relation is very simple and can be done for one line in the head (or a simple calculator!), it slowly becomes tiring when dealing with a lot of lines or redshifts, or some precision is necessary. The options in this section are thus provided to greatly simplify usage of this simple equation, and also helping by storing a list of pre-defined spectral line wavelengths. For example, if you want to know the wavelength of the @mymath{H\alpha} line (at 6562.8 Angstroms in rest frame), when @mymath{Ly\alpha} is at 8000 Angstroms, you can call CosmicCalculator like the first example below. And if you want the wavelength of all pre-defined spectral lines at this redshift, you can use the second command. @example $ astcosmiccal --obsline=lyalpha,8000 --lineatz=halpha $ astcosmiccal --obsline=lyalpha,8000 --listlinesatz @end example Bellow you can see the printed/output calculations of CosmicCalculator that are related to spectral lines. Note that @option{--obsline} is an input parameter, so it is discussed (with the full list of known lines) in @ref{CosmicCalculator input options}. @table @option @item --listlines List the pre-defined rest frame spectral line wavelengths and their names on standard output, then abort CosmicCalculator. The units of the displayed wavelengths for each line can be determined with @option{--lineunit} (see below). When this option is given, other operations on the command-line will be ignored. This is convenient when you forget the specific name of the spectral line used within Gnuastro, or when you forget the exact wavelength of a certain line. These names can be used with the options that deal with spectral lines, for example, @option{--obsline} and @option{--lineatz} (@ref{CosmicCalculator basic cosmology calculations}). The format of the output list is a two-column table, with Gnuastro's text table format (see @ref{Gnuastro text table format}). Therefore, if you are only looking for lines in a specific range, you can pipe the output into Gnuastro's table program and use its @option{--range} option on the @code{wavelength} (first) column. For example, if you only want to see the lines between 4000 and 6000 Angstroms, you can run this command: @example $ astcosmiccal --listlines \ | asttable --range=wavelength,4000,6000 @end example @noindent And if you want to use the list later and have it as a table in a file, you can easily add the @option{--output} (or @option{-o}) option to the @command{asttable} command, and specify the filename, for example, @option{--output=lines.fits} or @option{--output=lines.txt}. @item --listlinesatz Similar to @option{--listlines} (above), but the printed wavelength is not in the rest frame, but redshifted to the given redshift. Recall that the redshift can be specified by @option{--redshift} directly or by @option{--obsline}, see @ref{CosmicCalculator input options}. For an example usage of this option, see @ref{Viewing spectra and redshifted lines}. @item -i STR/FLT @itemx --lineatz=STR/FLT The wavelength of the specified line at the redshift given to CosmicCalculator. The line can be specified either by its name or directly as a number (its wavelength). The units of the displayed wavelengths for each line can be determined with @option{--lineunit} (see below). To get the list of pre-defined names for the lines and their wavelength, you can use the @option{--listlines} option, see @ref{CosmicCalculator input options}. In the former case (when a name is given), the returned number is in units of Angstroms. In the latter (when a number is given), the returned value is the same units of the input number (assuming it is a wavelength). @item --lineunit=STR The units to display line wavelengths above. It can take the following four values. If you need any other unit, please contact us at @code{bug-gnuastro@@gnu.org}. @table @code @item m Meter. @item micro-m Micrometer or @mymath{10^{-6}m}. @item nano-m Nanometer, or @mymath{10^{-9}m}. @item angstrom Angstrom or @mymath{10^{-10}m}; the default unit when this option is not called. @end table @end table @node Installed scripts, Makefile extensions, High-level calculations, Top @chapter Installed scripts Gnuastro's programs (introduced in previous chapters) are designed to be highly modular and thus contain lower-level operations on the data. However, in many contexts, certain higher-level are also shared between many contexts. For example, a sequence of calls to multiple Gnuastro programs, or a special way of running a program and treating the output. To facilitate such higher-level data analysis, Gnuastro also installs some scripts on your system with the (@code{astscript-}) prefix (in contrast to the other programs that only have the @code{ast} prefix). @cindex GNU Bash @cindex Portable shell @cindex Shell, portable Like all of Gnuastro's source code, these scripts are also heavily commented. They are written in portable shell scripts (command-line environments), which does not need compilation. Therefore, if you open the installed scripts in a text editor, you can actually read them@footnote{Gnuastro's installed programs (those only starting with @code{ast}) are not human-readable. They are written in C and need to be compiled before execution. Compilation optimizes the steps into the low-level hardware CPU instructions/language to improve efficiency. Because compiled programs do not need an interpreter like Bash on every run, they are much faster and more independent than scripts. To read the source code of the programs, look into the @file{bin/progname} directory of Gnuastro's source (@ref{Downloading the source}). If you would like to read more about why C was chosen for the programs, please see @ref{Why C}.}. For example, with this command (just replace @code{nano} with your favorite text editor, like @command{emacs} or @command{vim}): @example $ nano $(which astscript-NAME) @end example Shell scripting is the same language that you use when typing on the command-line. Therefore shell scripting is much more widely known and used compared to C (the language of other Gnuastro programs). Because Gnuastro's installed scripts do higher-level operations, customizing these scripts for a special project will be more common than the programs. These scripts also accept options and are in many ways similar to the programs (see @ref{Common options}) with some minor differences: @itemize @item Currently they do not accept configuration files themselves. However, the configuration files of the Gnuastro programs they call are indeed parsed and used by those programs. As a result, they do not have the following options: @option{--checkconfig}, @option{--config}, @option{--lastconfig}, @option{--onlyversion}, @option{--printparams}, @option{--setdirconf} and @option{--setusrconf}. @item They do not directly allocate any memory, so there is no @option{--minmapsize}. @item They do not have an independent @option{--usage} option: when called with @option{--usage}, they just recommend running @option{--help}. @item The output of @option{--help} is not configurable like the programs (see @ref{--help}). @item @cindex GNU AWK @cindex GNU SED The scripts will commonly use your installed shell and other basic command-line tools (for example, AWK or SED). Different systems have different versions and implementations of these basic tools (for example, GNU/Linux systems use GNU Bash, GNU AWK and GNU SED which are far more advanced and up to date then the minimalist AWK and SED of most other systems). Therefore, unexpected errors in these tools might come up when you run these scripts on non-GNU/Linux operating systems. If you do confront such strange errors, please submit a bug report so we fix it as soon as possible (see @ref{Report a bug}). @end itemize @menu * Sort FITS files by night:: Sort many files by date. * Generate radial profile:: Radial profile of an object in an image. * SAO DS9 region files from table:: Create ds9 region file from a table. * Viewing FITS file contents with DS9 or TOPCAT:: Open DS9 (images/cubes) or TOPCAT (tables). * Zero point estimation:: Zero point of an image from reference catalog or image(s). * Pointing pattern simulation:: Simulate a stack with a given series of pointings. * Color images with gray faint regions:: Color for bright pixels and grayscale for faint. * PSF construction and subtraction:: Set of scripts to create extended PSF of an image. @end menu @node Sort FITS files by night, Generate radial profile, Installed scripts, Installed scripts @section Sort FITS files by night @cindex Calendar FITS images usually contain (several) keywords for preserving important dates. In particular, for lower-level data, this is usually the observation date and time (for example, stored in the @code{DATE-OBS} keyword value). When analyzing observed datasets, many calibration steps (like the dark, bias or flat-field), are commonly calculated on a per-observing-night basis. However, the FITS standard's date format (@code{YYYY-MM-DDThh:mm:ss.ddd}) is based on the western (Gregorian) calendar. Dates that are stored in this format are complicated for automatic processing: a night starts in the final hours of one calendar day, and extends to the early hours of the next calendar day. As a result, to identify datasets from one night, we commonly need to search for two dates. However calendar peculiarities can make this identification very difficult. For example, when an observation is done on the night separating two months (like the night starting on March 31st and going into April 1st), or two years (like the night starting on December 31st 2018 and going into January 1st, 2019). To account for such situations, it is necessary to keep track of how many days are in a month, and leap years, etc. @cindex Unix epoch time @cindex Time, Unix epoch @cindex Epoch, Unix time Gnuastro's @file{astscript-sort-by-night} script is created to help in such important scenarios. It uses @ref{Fits} to convert the FITS date format into the Unix epoch time (number of seconds since 00:00:00 of January 1st, 1970), using the @option{--datetosec} option. The Unix epoch time is a single number (integer, if not given in sub-second precision), enabling easy comparison and sorting of dates after January 1st, 1970. You can use this script as a basis for making a much more highly customized sorting script. Here are some examples @itemize @item If you need to copy the files, but only need a single extension (not the whole file), you can add a step just before the making of the symbolic links, or copies, and change it to only copy a certain extension of the FITS file using the Fits program's @option{--copy} option, see @ref{HDU information and manipulation}. @item If you need to classify the files with finer detail (for example, the purpose of the dataset), you can add a step just before the making of the symbolic links, or copies, to specify a file-name prefix based on other certain keyword values in the files. For example, when the FITS files have a keyword to specify if the dataset is a science, bias, or flat-field image. You can read it and to add a @code{sci-}, @code{bias-}, or @code{flat-} to the created file (after the @option{--prefix}) automatically. For example, let's assume the observing mode is stored in the hypothetical @code{MODE} keyword, which can have three values of @code{BIAS-IMAGE}, @code{SCIENCE-IMAGE} and @code{FLAT-EXP}. With the step below, you can generate a mode-prefix, and add it to the generated link/copy names (just correct the filename and extension of the first line to the script's variables): @example modepref=$(astfits infile.fits -h1 \ | sed -e"s/'/ /g" \ | awk '$1=="MODE"@{ \ if($3=="BIAS-IMAGE") print "bias-"; \ else if($3=="SCIENCE-IMAGE") print "sci-"; \ else if($3==FLAT-EXP) print "flat-"; \ else print $3, "NOT recognized"; exit 1@}') @end example @cindex GNU AWK @cindex GNU Sed Here is a description of it. We first use @command{astfits} to print all the keywords in extension @code{1} of @file{infile.fits}. In the FITS standard, string values (that we are assuming here) are placed in single quotes (@key{'}) which are annoying in this context/use-case. Therefore, we pipe the output of @command{astfits} into @command{sed} to remove all such quotes (substituting them with a blank space). The result is then piped to AWK for giving us the final mode-prefix: with @code{$1=="MODE"}, we ask AWK to only consider the line where the first column is @code{MODE}. There is an equal sign between the key name and value, so the value is the third column (@code{$3} in AWK). We thus use a simple @code{if-else} structure to look into this value and print our custom prefix based on it. The output of AWK is then stored in the @code{modepref} shell variable which you can add to the link/copy name. With the solution above, the increment of the file counter for each night will be independent of the mode. If you want the counter to be mode-dependent, you can add a different counter for each mode and use that counter instead of the generic counter for each night (based on the value of @code{modepref}). But we will leave the implementation of this step to you as an exercise. @end itemize @menu * Invoking astscript-sort-by-night:: Inputs and outputs to this script. @end menu @node Invoking astscript-sort-by-night, , Sort FITS files by night, Sort FITS files by night @subsection Invoking astscript-sort-by-night This installed script will read a FITS date formatted value from the given keyword, and classify the input FITS files into individual nights. For more on installed scripts please see (see @ref{Installed scripts}). This script can be used with the following general template: @example $ astscript-sort-by-night [OPTION...] FITS-files @end example @noindent One line examples: @example ## Use the DATE-OBS keyword $ astscript-sort-by-night --key=DATE-OBS /path/to/data/*.fits ## Make links to the input files with the `img-' prefix $ astscript-sort-by-night --link --prefix=img- /path/to/data/*.fits @end example This script will look into a HDU/extension (@option{--hdu}) for a keyword (@option{--key}) in the given FITS files and interpret the value as a date. The inputs will be separated by "night"s (11:00a.m to next day's 10:59:59a.m, spanning two calendar days, exact hour can be set with @option{--hour}). The default output is a list of all the input files along with the following two columns: night number and file number in that night (sorted by time). With @option{--link} a symbolic link will be made (one for each input) that contains the night number, and number of file in that night (sorted by time), see the description of @option{--link} for more. When @option{--copy} is used instead of a link, a copy of the inputs will be made instead of symbolic link. Below you can see one example where all the @file{target-*.fits} files in the @file{data} directory should be separated by observing night according to the @code{DATE-OBS} keyword value in their second extension (number @code{1}, recall that HDU counting starts from 0). You can see the output after the @code{ls} command. @example $ astscript-sort-by-night -pimg- -h1 -kDATE-OBS data/target-*.fits $ ls img-n1-1.fits img-n1-2.fits img-n2-1.fits ... @end example The outputs can be placed in a different (already existing) directory by including that directory's name in the @option{--prefix} value, for example, @option{--prefix=sorted/img-} will put them all under the @file{sorted} directory. This script can be configured like all Gnuastro's programs (through command-line options, see @ref{Common options}), with some minor differences that are described in @ref{Installed scripts}. The particular options to this script are listed below: @table @option @item -h STR @itemx --hdu=STR The HDU/extension to use in all the given FITS files. All of the given FITS files must have this extension. @item -k STR @itemx --key=STR The keyword name that contains the FITS date format to classify/sort by. @item -H FLT @itemx --hour=FLT The hour that defines the next ``night''. By default, all times before 11:00a.m are considered to belong to the previous calendar night. If a sub-hour value is necessary, it should be given in units of hours, for example, @option{--hour=9.5} corresponds to 9:30a.m. @cartouche @noindent @cindex Time zone @cindex UTC (Universal time coordinate) @cindex Universal time coordinate (UTC) @strong{Dealing with time zones:} The time that is recorded in @option{--key} may be in UTC (Universal Time Coordinate). However, the organization of the images taken during the night depends on the local time. It is possible to take this into account by setting the @option{--hour} option to the local time in UTC. For example, consider a set of images taken in Auckland (New Zealand, UTC+12) during different nights. If you want to classify these images by night, you have to know at which time (in UTC time) the Sun rises (or any other separator/definition of a different night). For example, if your observing night finishes before 9:00a.m in Auckland, you can use @option{--hour=21}. Because in Auckland the local time of 9:00 corresponds to 21:00 UTC. @end cartouche @item -l @itemx --link Create a symbolic link for each input FITS file. This option cannot be used with @option{--copy}. The link will have a standard name in the following format (variable parts are written in @code{CAPITAL} letters and described after it): @example PnN-I.fits @end example @table @code @item P This is the value given to @option{--prefix}. By default, its value is @code{./} (to store the links in the directory this script was run in). See the description of @code{--prefix} for more. @item N This is the night-counter: starting from 1. @code{N} is just incremented by 1 for the next night, no matter how many nights (without any dataset) there are between two subsequent observing nights (its just an identifier for each night which you can easily map to different calendar nights). @item I File counter in that night, sorted by time. @end table @item -c @itemx --copy Make a copy of each input FITS file with the standard naming convention described in @option{--link}. With this option, instead of making a link, a copy is made. This option cannot be used with @option{--link}. @item -p STR @itemx --prefix=STR Prefix to append before the night-identifier of each newly created link or copy. This option is thus only relevant with the @option{--copy} or @option{--link} options. See the description of @option{--link} for how it is used. For example, with @option{--prefix=img-}, all the created file names in the current directory will start with @code{img-}, making outputs like @file{img-n1-1.fits} or @file{img-n3-42.fits}. @option{--prefix} can also be used to store the links/copies in another directory relative to the directory this script is being run (it must already exist). For example, @code{--prefix=/path/to/processing/img-} will put all the links/copies in the @file{/path/to/processing} directory, and the files (in that directory) will all start with @file{img-}. @item --stdintimeout=INT Number of micro-seconds to wait for standard input within this script. This does not correspond to general inputs into the script, inputs to the script should always be given as a file. However, within the script, pipes are often used to pass the output of one program to another. The value given to this option will be passed to those internal pipes. When running this script, if you confront an error, saying ``No input!'', you should be able to fix it by giving a larger number to this option (the default value is 10000000 micro-seconds or 10 seconds). @end table @node Generate radial profile, SAO DS9 region files from table, Sort FITS files by night, Installed scripts @section Generate radial profile @cindex Radial profile @cindex Profile, profile The 1 dimensional radial profile of an object is an important parameter in many aspects of astronomical image processing. For example, you want to study how the light of a galaxy is distributed as a function of the radial distance from the center. In other cases, the radial profile of a star can show the PSF (see @ref{PSF}). Gnuastro's @file{astscript-radial-profile} script is created to obtain such radial profiles for one object within an image. This script uses @ref{MakeProfiles} to generate elliptical apertures with the values equal to the distance from the center of the object and @ref{MakeCatalog} for measuring the values over the apertures. @menu * Invoking astscript-radial-profile:: How to call astscript-radial-profile @end menu @node Invoking astscript-radial-profile, , Generate radial profile, Generate radial profile @subsection Invoking astscript-radial-profile This installed script will measure the radial profile of an object within an image. A general overview of this script has been published in Infante-Sainz et al. @url{https://arxiv.org/abs/2401.05303,2024)}; please cite it if this script proves useful in your research. For more on installed scripts please see (see @ref{Installed scripts}). This script can be used with the following general template: @example $ astscript-radial-profile [OPTION...] FITS-file @end example @noindent Examples: @example ## Generate the radial profile with default options (assuming the ## object is in the center of the image, and using the mean). $ astscript-radial-profile image.fits ## Generate the radial profile centered at x=44 and y=37 (in pixels), ## up to a radial distance of 19 pixels, use the mean value. $ astscript-radial-profile image.fits --center=44,37 --rmax=19 ## Generate the radial profile centered at x=44 and y=37 (in pixels), ## up to a radial distance of 100 pixels, compute sigma clipped ## mean and standard deviation (sigclip-mean and sigclip-std) using ## 5 sigma and 0.1 tolerance (default is 3 sigma and 0.2 tolerance). $ astscript-radial-profile image.fits --center=44,37 --rmax=100 \ --sigmaclip=5,0.1 \ --measure=sigclip-mean,sigclip-std ## Generate the radial profile centered at RA=20.53751695, ## DEC=0.9454292263, up to a radial distance of 88 pixels, ## axis ratio equal to 0.32, and position angle of 148 deg. ## Name the output table as `radial-profile.fits' $ astscript-radial-profile image.fits --mode=wcs \ --center=20.53751695,0.9454292263 \ --rmax=88 --axis-ratio=0.32 \ --position-angle=148 -oradial-profile.fits ## Generate the radial profile centered at RA=40.062675270971, ## DEC=-8.1511992735126, up to a radial distance of 20 pixels, ## and calculate the SNR using the INPUT-NO-SKY and SKY-STD ## extensions of the NoiseChisel output file. $ astscript-radial-profile image_detected.fits -hINPUT-NO-SKY \ --mode=wcs --measure=sn \ --center=40.062675270971,-8.1511992735126 \ --rmax=20 --stdhdu=SKY_STD ## Generate the radial profile centered at RA=40.062675270971, ## DEC=-8.1511992735126, up to a radial distance of 20 pixels, ## and compute the SNR with a fixed value for std, std=10. $ astscript-radial-profile image.fits -h1 --mode=wcs --rmax=20 \ --center=40.062675270971,-8.1511992735126 \ --measure=sn --instd=10 ## Generate the radial profile centered at X=1201, Y=1201 pixels, up ## to a radial distance of 20 pixels and compute the median and the ## SNR using the first extension of sky-std.fits as the dataset for std ## values. $ astscript-radial-profile image.fits -h1 --mode=img --rmax=20 \ --center=1201,1201 --measure=median,sn \ --instd=sky-std.fits @end example This installed script will read a FITS image and will use it as the basis for constructing the radial profile. The output radial profile is a table (FITS or plain-text) containing the radial distance from the center in the first row and the specified measurements in the other columns (mean, median, sigclip-mean, sigclip-median, etc.). To measure the radial profile, this script needs to generate temporary files. All these temporary files will be created within the directory given to the @option{--tmpdir} option. When @option{--tmpdir} is not called, a temporary directory (with a name based on the inputs) will be created in the running directory. If the directory does not exist at run-time, this script will create it. After the output is created, this script will delete the directory by default, unless you call the @option{--keeptmp} option. With the default options, the script will generate a circular radial profile using the mean value and centered at the center of the image. In order to have more flexibility, several options are available to configure for the desired radial profile. In this sense, you can change the center position, the maximum radius, the axis ratio and the position angle (elliptical apertures are considered), the operator for obtaining the profiles, and others (described below). @cartouche @noindent @strong{Debug your profile:} to debug your results, especially close to the center of your object, you can see the radial distance associated to every pixel in your input. To do this, use @option{--keeptmp} to keep the temporary files, and compare @file{crop.fits} (crop of your input image centered on your desired coordinate) with @file{apertures.fits} (radial distance of each pixel). @end cartouche @cartouche @noindent @strong{Finding properties of your elliptical target: } you want to measure the radial profile of a galaxy, but do not know its exact location, position angle or axis ratio. To obtain these values, you can use @ref{NoiseChisel} to detect signal in the image, feed it to @ref{Segment} to do basic segmentation, then use @ref{MakeCatalog} to measure the center (@option{--x} and @option{--y} in MakeCatalog), axis ratio (@option{--axis-ratio}) and position angle (@option{--position-angle}). @end cartouche @cartouche @noindent @strong{Masking other sources:} The image of an astronomical object will usually have many other sources with your main target. A crude solution is to use sigma-clipped measurements for the profile. However, sigma-clipped measurements can easily be biased when the number of sources at each radial distance increases at larger distances. Therefore a robust solution is to mask all other detections within the image. You can use @ref{NoiseChisel} and @ref{Segment} to detect and segment the sources, then set all pixels that do not belong to your target to blank using @ref{Arithmetic} (in particular, its @code{where} operator). @end cartouche @table @option @item -h STR @itemx --hdu=STR The HDU/extension of the input image to use. @item -o STR @itemx --output=STR Filename of measured radial profile. It can be either a FITS table, or plain-text table (determined from your given file name suffix). @item -c FLT[,FLT[,...]] @itemx --center=FLT[,FLT[,...]] The central position of the radial profile. This option is used for placing the center of the profiles. This parameter is used in @ref{Crop} to center and crop the region. The positions along each dimension must be separated by a comma (@key{,}) and fractions are also acceptable. The number of values given to this option must be the same as the dimensions of the input dataset. The units of the coordinates are read based on the value to the @option{--mode} option, see below. @item -O STR @itemx --mode=STR Interpret the center position of the object (values given to @option{--center}) in image or WCS coordinates. This option thus accepts only two values: @option{img} or @option{wcs}. By default, it is @option{--mode=img}. @item -R FLT @itemx --rmax=FLT Maximum radius for the radial profile (in pixels). By default, the radial profile will be computed up to a radial distance equal to the maximum radius that fits into the image (assuming circular shape). @item -P INT @itemx --precision=INT The precision (number of digits after the decimal point) in resolving the radius. The default value is @option{--precision=0} (or @option{-P0}), and the value cannot be larger than @option{6}. A higher precision is primarily useful when the very central few pixels are important for you. A larger precision will over-resolve larger radial regions, causing scatter to significantly affect the measurements. For example, in the command below, we will generate the radial profile of an imaginary source (at RA,DEC of 1.23,4.567) and check the output without setting a precision: @example $ astscript-radial-profile image.fits --center=1.23,4.567 \ --mode=wcs --measure=mean,area --rmax=10 \ --output=radial.fits --quiet $ asttable radial.fits --head=10 -ffixed -p4 0.0000 0.0139 1 1.0000 0.0048 8 2.0000 0.0023 16 3.0000 0.0015 20 4.0000 0.0011 24 5.0000 0.0008 40 6.0000 0.0006 36 7.0000 0.0005 48 8.0000 0.0004 56 9.0000 0.0003 56 @end example Let's repeat the command above, but use a precision of 3 to resolve more finer details of the radial profile, while only printing the top 10 rows of the profile: @example $ astscript-radial-profile image.fits --center=1.23,4.567 \ --mode=wcs --measure=mean,area --rmax=10 \ --precision=3 --output=radial.fits --quiet $ asttable radial.fits --head=10 -ffixed -p4 0.0000 0.0139 1 1.0000 0.0056 4 1.4140 0.0040 4 2.0000 0.0027 4 2.2360 0.0024 8 2.8280 0.0018 4 3.0000 0.0017 4 3.1620 0.0016 8 3.6050 0.0013 8 4.0000 0.0011 4 @end example Do you see how many more radii have been added? Between 1.0 and 2.0, we now have one extra radius, between 2.0 to 3.0, we have two new radii and so on. If you go to larger and larger radii, you will notice that they get resolved into many sub-components and the number of pixels used in each measurement will not be significant (you can already see that in the comparison above). This has two problems: 1. statistically, the scatter in larger radii (where the signal-to-noise ratio is usually low will make it hard to interpret the profile. 2. technically, the output table will have many more rows! @cartouche @noindent @strong{Use higher precision only for small radii:} If you want to look at the whole profile (or the outer parts!), don't set the precision, the default mode is usually more than enough! But when you are targeting the very central few pixels (usually less than a pixel radius of 5), use a higher precision. @end cartouche @item -v INT @itemx --oversample=INT Oversample the input dataset to the fraction given to this option. Therefore if you set @option{--rmax=20} for example, and @option{--oversample=5}, your output will have 100 rows (without @option{--oversample} it will only have 20 rows). Unless the object is heavily undersampled (the pixels are larger than the actual object), this method provides a much more accurate result and there are sufficient number of pixels to get the profile accurately. Due to the discrete nature of pixels, if you use this option to oversample your profile, set @option{--precision=0}. Otherwise, your profile will become step-like (with several radii having a single value). @item -u INT @itemx --undersample=INT Undersample the input dataset by the number given to this option. This option is for considering larger apertures than the original pixel size (aperture size is equal to 1 pixel). For example, if a radial profile computed by default has 100 different radii (apertures of 1 pixel width), by considering @option{--undersample=2} the radial profile will be computed over apertures of 2 pixels, so the final radial profile will have 50 different radii. This option is good to measure over a larger number of pixels to improve the measurement. @item -Q FLT @itemx --axis-ratio=FLT The axis ratio of the apertures (minor axis divided by the major axis in a 2D ellipse). By default (when this option is not given), the radial profile will be circular (axis ratio of 1). This parameter is used as the option @option{--qcol} in the generation of the apertures with @command{astmkprof}. @item -p FLT @itemx --position-angle=FLT The position angle (in degrees) of the profiles relative to the first FITS axis (horizontal when viewed in SAO DS9). By default, it is @option{--position-angle=0}, which means that the semi-major axis of the profiles will be parallel to the first FITS axis. @item -a FLT,FLT @itemx --azimuth=FLT,FLT @cindex Wedge (radial profile) @cindex Azimuthal range (radial profile) Limit the profile to the given azimuthal angle range (two numbers given to this option, in degrees, from 0 to 360) from the major axis (defined by @option{--position-angle}). The radial profile will therefore be created on a wedge-like shape, not the full circle/ellipse. The pixel containing the center of the profile will always be included in the profile (because it contains all azimuthal angles!). If the first angle is @emph{smaller} than the second (for example, @option{--azimuth=10,80}), the region between, or @emph{inside}, the two angles will be used. Otherwise (for example, @option{--azimuth=80,10}), the region @emph{outside} the two angles will be used. The latter case can be useful when you want to ignore part of the 2D shape (for example, due to a bright star that can be contaminating it). You can visually see the shape of the region used by running this script with @option{--keeptmp} and viewing the @file{values.fits} and @file{apertures.fits} files of the temporary directory with a FITS image viewer like @ref{SAO DS9}. You can use @ref{Viewing FITS file contents with DS9 or TOPCAT} to open them together in one instance of DS9, with both frames matched and locked (for easy comparison in case you want to zoom-in or out). For example, see the commands below (based on your target object, just change the image name, center, position angle, etc.): @example ## Generate the radial profile $ astscript-radial-profile image.fits --center=1.234,6.789 \ --mode=wcs --rmax=50 --position-angle=20 \ --axis-ratio=0.8 --azimuth=95,150 --keeptmp \ --tmpdir=radial-tmp ## Visually check the values and apertures used. $ astscript-fits-view radial-tmp/values.fits \ radial-tmp/apertures.fits @end example @item -m STR @itemx --measure=STR The operator for measuring the values over each radial distance. The values given to this option will be directly passed to @ref{MakeCatalog}. As a consequence, all MakeCatalog measurements like the magnitude, magnitude error, median, mean, signal-to-noise ratio (S/N), std, surface brightness, sigclip-mean, and sigclip-number can be used here. For a full list of MakeCatalog's measurements, please run @command{astmkcatalog --help} or see @ref{MakeCatalog measurements}. Multiple values can be given to this option, each separated by a comma. This option can also be called multiple times. @cartouche @noindent @strong{Masking background/foreground objects:} For crude rejection of outliers, you can use sigma-clipping using MakeCatalog measurements like @option{--sigclip-mean} or @option{--sigclip-mean-sb} (see @ref{MakeCatalog measurements}). To properly mask the effect of background/foreground objects from your target object's radial profile, you can use @command{astscript-psf-stamp} script, see @ref{Invoking astscript-psf-stamp}, and feed it the output of @ref{Segment}. This script will mask unwanted objects from the image that is later used to measure the radial profile. @end cartouche Some measurements by MakeCatalog require a per-pixel sky standard deviation (for example, magnitude error or S/N). Therefore when asking for such measurements, use the @option{--instd} option (described below) to specify the per-pixel sky standard deviation over each pixel. For other measurements like the magnitude or surface brightness, MakeCatalog will need a Zero point, which you can set with the @option{--zeropoint} option. For example, by setting @option{--measure=mean,sigclip-mean --measure=median}, the mean, sigma-clipped mean and median values will be computed. The output radial profile will have 4 columns in this order: radial distance, mean, sigma-clipped and median. By default (when this option is not given), the mean of all pixels at each radial position will be computed. @item -s FLT,FLT @itemx --sigmaclip=FLT,FLT Sigma clipping parameters: only relevant if sigma-clipping operators are requested by @option{--measure}. For more on sigma-clipping, see @ref{Sigma clipping}. If given, the value to this option is directly passed to the @option{--sigmaclip} option of @ref{MakeCatalog}, see @ref{MakeCatalog inputs and basic settings}. By default (when this option is not given), the default values within MakeCatalog will be used. To see the default value of this option in MakeCatalog, you can run this command: @example $ astmkcatalog -P | grep " sigmaclip " @end example @item -z FLT @itemx --zeropoint=FLT The Zero point of the input dataset. This is necessary when you request measurements like magnitude, or surface brightness. @item -Z @itemx --zeroisnotblank Account for zero-valued pixels in the profile. By default, such pixels are not considered (when this script crops the necessary region of the image before generating the profile). The long format of this option is identical to a similarly named option in Crop (see @ref{Invoking astcrop}). When this option is called, it is passed directly to Crop, therefore the zero-valued pixels are not considered as blank and used in the profile creation. @item -i FLT/STR @itemx --instd=FLT/STR Sky standard deviation as a single number (FLT) or as the filename (STR) containing the image with the std value for each pixel (the HDU within the file should be given to the @option{--stdhdu} option mentioned below). This is only necessary when the requested measurement (value given to @option{--measure}) by MakeCatalog needs the Standard deviation (for example, the signal-to-noise ratio or magnitude error). If your measurements do not require a standard deviation, it is best to ignore this option (because it will slow down the script). @item -d INT/STR @itemx --stdhdu=INT/STR HDU/extension of the sky standard deviation image specified with @option{--instd}. @item -t STR @itemx --tmpdir=STR Several intermediate files are necessary to obtain the radial profile. All of these temporal files are saved into a temporal directory. With this option, you can directly specify this directory. By default (when this option is not called), it will be built in the running directory and given an input-based name. If the directory does not exist at run-time, this script will create it. Once the radial profile has been obtained, this directory is removed. You can disable the deletion of the temporary directory with the @option{--keeptmp} option. @item -k @itemx --keeptmp Do not delete the temporary directory (see description of @option{--tmpdir} above). This option is useful for debugging. For example, to check that the profiles generated for obtaining the radial profile have the desired center, shape and orientation. @item --cite Give BibTeX and acknowledgment information for citing this script within your paper. For more, see @option{Operating mode options}. @end table @node SAO DS9 region files from table, Viewing FITS file contents with DS9 or TOPCAT, Generate radial profile, Installed scripts @section SAO DS9 region files from table Once your desired catalog (containing the positions of some objects) is created (for example, with @ref{MakeCatalog}, @ref{Match}, or @ref{Table}) it often happens that you want to see your selected objects on an image for a feeling of the spatial properties of your objects. For example, you want to see their positions relative to each other. In this section we describe a simple installed script that is provided within Gnuastro for converting your given columns to an SAO DS9 region file to help in this process. SAO DS9@footnote{@url{http://ds9.si.edu}} is one of the most common FITS image visualization tools in astronomy and is free software. @menu * Invoking astscript-ds9-region:: How to call astscript-ds9-region @end menu @node Invoking astscript-ds9-region, , SAO DS9 region files from table, SAO DS9 region files from table @subsection Invoking astscript-ds9-region This installed script will read two positional columns within an input table and generate an SAO DS9 region file to visualize the position of the given objects over an image. For more on installed scripts please see (see @ref{Installed scripts}). This script can be used with the following general template: @example ## Use the RA and DEC columns of 'table.fits' for the region file. $ astscript-ds9-region table.fits --column=RA,DEC \ --output=ds9.reg ## Select objects with a magnitude between 18 to 20, and generate the ## region file directly (through a pipe), each region with radius of ## 0.5 arcseconds. $ asttable table.fits --range=MAG,18:20 --column=RA,DEC \ | astscript-ds9-region --column=1,2 --radius=0.5 ## With the first command, select objects with a magnitude of 25 to 26 ## as red regions in 'bright.reg'. With the second command, select ## objects with a magnitude between 28 to 29 as a green region and ## show both. $ asttable cat.fits --range=MAG_F160W,25:26 -cRA,DEC \ | astscript-ds9-region -c1,2 --color=red -obright.reg $ asttable cat.fits --range=MAG_F160W,28:29 -cRA,DEC \ | astscript-ds9-region -c1,2 --color=green \ --command="ds9 image.fits -regions bright.reg" @end example The input can either be passed as a named file, or from standard input (a pipe). Only the @option{--column} option is mandatory (to specify the input table columns): two columns from the input table must be specified, either by name (recommended) or number. You can optionally also specify the region's radius, width and color of the regions with the @option{--radius}, @option{--width} and @option{--color} options, otherwise default values will be used for these (described under each option). The created region file will be written into the file name given to @option{--output}. When @option{--output} is not called, the default name of @file{ds9.reg} will be used (in the running directory). If the file exists before calling this script, it will be overwritten, unless you pass the @option{--dontdelete} option. Optionally you can also use the @option{--command} option to give the full command that should be run to execute SAO DS9 (see example above and description below). In this mode, the created region file will be deleted once DS9 is closed (unless you pass the @option{--dontdelete} option). A full description of each option is given below. @table @option @item -h INT/STR @item --hdu INT/STR The HDU of the input table when a named FITS file is given as input. The HDU (or extension) can be either a name or number (counting from zero). For more on this option, see @ref{Input output options}. @item -c STR,STR @itemx --column=STR,STR Identifiers of the two positional columns to use in the DS9 region file from the table. They can either be in WCS (RA and Dec) or image (pixel) coordinates. The mode can be specified with the @option{--mode} option, described below. @item -n STR @itemx --namecol=STR The column containing the name (or label) of each region. The type of the column (numeric or a character-based string) is irrelevant: you can use both types of columns as a name or label for the region. This feature is useful when you need to recognize each region with a certain ID or property (for example, magnitude or redshift). @item -m wcs|img @itemx --mode=wcs|org The coordinate system of the positional columns (can be either @option{--mode=wcs} and @option{--mode=img}). In the WCS mode, the values within the columns are interpreted to be RA and Dec. In the image mode, they are interpreted to be pixel X and Y positions. This option also affects the interpretation of the value given to @option{--radius}. When this option is not explicitly given, the columns are assumed to be in WCS mode. @item -C STR @itemx --color=STR The color to use for created regions. These will be directly interpreted by SAO DS9 when it wants to open the region file so it must be recognizable by SAO DS9. As of SAO DS9 8.2, the recognized color names are @code{black}, @code{white}, @code{red}, @code{green}, @code{blue}, @code{cyan}, @code{magenta} and @code{yellow}. The default color (when this option is not called) is @code{green} @item -w INT @itemx --width=INT The line width of the regions. These will be directly interpreted by SAO DS9 when it wants to open the region file so it must be recognizable by SAO DS9. The default value is @code{1}. @item -r FLT @itemx --radius=FLT The radius of all the regions. In WCS mode, the radius is assumed to be in arc-seconds, in image mode, it is in pixel units. If this option is not explicitly given, in WCS mode the default radius is 1 arc-seconds and in image mode it is 3 pixels. @item --dontdelete If the output file name exists, abort the program and do not over-write the contents of the file. This option is thus good if you want to avoid accidentally writing over an important file. Also, do not delete the created region file when @option{--command} is given (by default, when @option{--command} is given, the created region file will be deleted after SAO DS9 closes). @item -o STR @itemx --output=STR Write the created SAO DS9 region file into the name given to this option. If not explicitly given on the command-line, a default name of @file{ds9.reg} will be used. If the file already exists, it will be over-written, you can avoid the deletion (or over-writing) of an existing file with the @option{--dontdelete}. @item --command="STR" After creating the region file, run the string given to this option as a command-line command. The SAO DS9 region command will be appended to the end of the given command. Because the command will mostly likely contain white-space characters it is recommended to put the given string in double quotations. For example, let's assume @option{--command="ds9 image.fits -zscale"}. After making the region file (assuming it is called @file{ds9.reg}), the following command will be executed: @example ds9 image.fits -zscale -regions ds9.reg @end example You can customize all aspects of SAO DS9 with its command-line options, therefore the value of this option can be as long and complicated as you like. For example, if you also want the image to fit into the window, this option will be: @command{--command="ds9 image.fits -zscale -zoom to fit"}. You can see the SAO DS9 command-line descriptions by clicking on the ``Help'' menu and selecting ``Reference Manual''. In the opened window, click on ``Command Line Options''. @end table @node Viewing FITS file contents with DS9 or TOPCAT, Zero point estimation, SAO DS9 region files from table, Installed scripts @section Viewing FITS file contents with DS9 or TOPCAT @cindex Multi-Extension FITS @cindex Opening multi-extension FITS The FITS definition allows for multiple extensions (or HDUs) inside one FITS file. Each HDU can have a completely independent dataset inside of it. One HDU can be a table, another can be an image and another can be another independent image. For example, each image HDU can be one CCD of a multi-CCD camera, or in processed images one can be the deep science image and the next can be its weight map, alternatively, one HDU can be an image, and another can be the catalog/table of objects within it. The most common software for viewing FITS images is SAO DS9 (see @ref{SAO DS9}) and for plotting tables, TOPCAT is the most commonly used tool in astronomy (see @ref{TOPCAT}). After installing them (as described in the respective appendix linked in the previous sentence), you can open any number of FITS images or tables with DS9 or TOPCAT with the commands below: @example $ ds9 image-a.fits image-b.fits $ topcat table-a.fits table-b.fits @end example But usually the default mode is not enough. For example, in DS9, the window can be too small (not covering the height of your monitor), you probably want to match and lock multiple images, you have a favorite color map that you prefer to use, or you may want to open a multi-extension FITS file as a cube. Using the simple commands above, you need to manually do all these in the DS9 window once it opens and this can take several tens of seconds (which is enough to distract you from what you wanted to inspect). For example, if you have a multi-extension file containing 2D images, one way to load and switch between each 2D extension is to take the following steps in the SAO DS9 window: @clicksequence{``File''@click{}``Open Other''@click{}``Open Multi Ext Cube''} and then choose the Multi extension FITS file in your computer's file structure. @cindex @option{-mecube} (DS9) The method above is a little tedious to do every time you want view a multi-extension FITS file. A different series of steps is also necessary if you the extensions are 3D data cubes (since they are already cubes, and should be opened as multi-frame). Furthermore, if you have multiple images and want to ``match'' and ``lock'' them (so when you zoom-in to one, all get zoomed-in) you will need several other sequence of menus and clicks. Fortunately SAO DS9 also provides command-line options that you can use to specify a particular behavior before/after opening a file. One of those options is @option{-mecube} which opens a FITS image as a multi-extension data cube (treating each 2D extension as a slice in a 3D cube). This allows you to flip through the extensions easily while keeping all the settings similar. Just to avoid confusion, note that SAO DS9 does not follow the GNU style of separating long and short options as explained in @ref{Arguments and options}. In the GNU style, this `long' (multi-character) option should have been called like @option{--mecube}, but SAO DS9 follows its own conventions. For example, try running @command{$ds9 -mecube foo.fits} to see the effect (for example, on the output of @ref{NoiseChisel}). If the file has multiple extensions, a small window will also be opened along with the main DS9 window. This small window allows you to slide through the image extensions of @file{foo.fits}. If @file{foo.fits} only consists of one extension, then SAO DS9 will open as usual. On the other hand, for visualizing the contents of tables (that are also commonly stored in the FITS format), you need to call a different software (most commonly, people use TOPCAT, see @ref{TOPCAT}). And to make things more inconvenient, by default both of these are only installed as command-line software, so while you are navigating in your GUI, you need to open a terminal there, and run these commands. All of the issues above are the founding purpose of the installed script that is introduced in @ref{Invoking astscript-fits-view}. @menu * Invoking astscript-fits-view:: How to call this script @end menu @node Invoking astscript-fits-view, , Viewing FITS file contents with DS9 or TOPCAT, Viewing FITS file contents with DS9 or TOPCAT @subsection Invoking astscript-fits-view Given any number of FITS files, this script will either open SAO DS9 (for images or cubes) or TOPCAT (for tables) to visualize their contents in a graphic user interface (GUI). For more on installed scripts please see (see @ref{Installed scripts}). This script can be used with the following general template: @example $ astscript-fits-view [OPTION] input.fits [input-b.fits ...] @end example @noindent One line examples @example ## Call TOPCAT to load all the input FITS tables. $ astscript-fits-view table-*.fits ## Call SAO DS9 to open all the input FITS images. $ astscript-fits-view image-*.fits @end example This script will use Gnuastro's @ref{Fits} program to see if the file is a table or image. If the first input file contains an image HDU, then the sequence of files will be given to @ref{SAO DS9}. Otherwise, the input(s) will be given to @ref{TOPCAT} to visualize (plot) as tables. When opening DS9 it will also inspect the dimensionality of the first image HDU of the first input and open it slightly differently when the input is 2D or 3D: @table @asis @item 2D DS9's @option{-mecube} will be used to open all the 2D extensions of each input file as a ``Multi-extension cube''. A ``Cube'' window will also be opened with DS9 that can be used to slide/flip through each extensions. When multiple files are given, each file will be in one ``frame''. @item 3D DS9's @option{-multiframe} option will be used to open all the extensions in a separate ``frame'' (since each input is already a 3D cube, the @option{-mecube} option can be confusing). To flip through the extensions (while keeping the slice fixed), click the ``frame'' button on the top row of buttons, then use the last four buttons of the bottom row ("first", "previous", "next" and "last") to change between the extensions. If multiple files are given, there will be a separate frame for each HDU of each input (each HDU's name or number will be put in square brackets after its name). @end table @cartouche @noindent @strong{Double-clicking on FITS file to open DS9 or TOPCAT:} for those graphic user interface (GUI) that follow the freedesktop.org standards (including GNOME, KDS Plasma, or Xfce) Gnuastro installs a @file{fits-view.desktop} file to instruct your GUI to call this script for opening FITS files when you click on them. To activate this feature take the following steps: @enumerate @item Run the following command, while replacing @code{PREFIX}. If you do not know what to put in @code{PREFIX}, run @command{which astfits} on the command-line, and extract @code{PREFIX} from the output (the string before @file{/bin/astfits}). For more, see @ref{Installation directory}. @example ln -sf PREFIX/share/gnuastro/astscript-fits-view.desktop \ ~/.local/share/applications/ @end example @item Right-click on a FITS file, and choose these items in order (based on GNOME, may be different in KDE or Xfce): @clicksequence{``Open with other application''@click{}``View all applications''@click{}``astscript-fits-view''}. @end enumerate @end cartouche @noindent This script takes the following options @table @option @item -h STR @itemx --hdu=STR The HDU (extension) of the input dataset to display. The value can be the HDU name or number (the first HDU is counted from 0). @item -p STR @itemx --prefix=STR Directory to search for SAO DS9 or TOPCAT's executables (assumed to be @command{ds9} and @command{topcat}). If not called they will be assumed to be present in your @file{PATH} (see @ref{Installation directory}). If you do not have them already installed, their installation directories are available in @ref{SAO DS9} and @ref{TOPCAT} (they can be installed in non-system-wide locations that do not require administrator/root permissions). @item -s STR @itemx --ds9scale=STR The string to give to DS9's @option{-scale} option. You can use this option to use a different scaling. The Fits-view script will place @option{-scale} before your given string when calling DS9. If you do not call this option, the default behavior is to cal DS9 with: @option{-scale mode zscale} or @option{--ds9scale="mode zscale"} when using this script. The Fits-view script has the following aliases to simplify the calling of this option (and avoid the double-quotations and @code{mode} in the example above): @table @option @item zscale or @option{--ds9scale=zscale} equivalent to @option{--ds9scale="mode zscale"}. @item minmax or @option{--ds9scale=minmax} equivalent to @option{--ds9scale="mode minmax"}. @end table @item -c=FLT,FLT @itemx --ds9center=FLT,FLT The central coordinate for DS9's view of the FITS image after it opens. This is equivalent to the ``Pan'' button in DS9. The nature of the coordinates will be determined by the @option{--ds9mode} option that is described below. @item -O img/wcs @itemx --ds9mode=img/wcs The coordinate system (or mode) to interpret the values given to @option{--ds9center}. This can either be @option{img} (or DS9's ``Image'' coordinates) or @option{wcs} (or DS9's ``wcs fk5'' coordinates). @item -g INTxINT @itemx --ds9geometry=INTxINT The initial DS9 window geometry (value to DS9's @option{-geometry} option). @item -m @itemx --ds9colorbarmulti Do not show a single color bar for all the loaded images. By default this script will call DS9 in a way that a single color bar is shown for any number of images. A single color bar is preferred for two reasons: 1) when there are a lot of images, they consume a large fraction of the display area. 2) the color-bars are locked by this script, so there is no difference between! With this option, you can have separate color bars under each image. @end table @node Zero point estimation, Pointing pattern simulation, Viewing FITS file contents with DS9 or TOPCAT, Installed scripts @section Zero point estimation @cindex Zero point @cindex Calibration @cindex Astrometry Through the ``zero point'', we are able to give physical units to the pixel values of an image (often in units of ``counts'' or ADUs) and thus compare them with other images (as well as measurements that are done on them). The zero point is therefore an important calibration of pixel values (as astromerty is a calibration of the pixel positions). The fundamental concepts behind the zero point are described in @ref{Brightness flux magnitude}. We will therefore not go deeper into the basics here and stick to the practical aspects of it. The purpose of Gnuastro’s @command{astscript-zeropoint} script is to obtain the zero point of an image by considering another image (where the zero point is already known), or a catalog. In the The operation involves multiple lower-level programs in a standard series of steps. For example, when using another image, the script will take the following steps: @enumerate @item Download the Gaia catalog that overlaps with the input image using Gnuastro’s Query program (see @ref{Query}). This is done to determine the stars within the image@footnote{Stars have an almost identical shape in the image (as opposed to galaxies for example), using confirmed stars will produce a more reliable result.}. @item Perform aperture photometry@footnote{For a complete tutorial on aperture photometry, see @ref{Aperture photometry}.} with @ref{MakeProfiles} @ref{MakeCatalog}. We will assume a zero point of 0 for the input image. If the reference is an image, then we should perform aperture photometry also in that image. @item Match the two catalogs@footnote{For a tutorial on matching catalogs, see @ref{Matching catalogs}).} with @ref{Match}. @item The difference between the input and reference magnitudes should be independent of the magnitude of the stars. This does not hold when the stars are saturated in one/both the images (giving us a bright-limit for the magnitude range to use) or for stars fainter than a certain magnitude, where the signal-to-noise ratio drops significantly in one/both images (giving us a faint limit for the magnitude range to use). @item Since a zero point of 0 was used for the input image, the magnitude difference above (in the reliable magnitude range) is the zero point of the input image. @end enumerate In the ``Tutorials'' chapter of this Gnuastro book, there are two tutorials dedicated to the usage of this script. The first uses an image as a reference (@ref{Zero point tutorial with reference image}) and the second uses a catalog (@ref{Zero point tutorial with reference catalog}). For the full set of options an a detailed description of each, see @ref{Invoking astscript-zeropoint}. @menu * Invoking astscript-zeropoint:: How to call the script @end menu @node Invoking astscript-zeropoint, , Zero point estimation, Zero point estimation @subsection Invoking astscript-zeropoint This installed script will calculate the zero point of an input image to calibrate it. A general overview of this script has been published in Eskandarlou et al. @url{https://arxiv.org/abs/2312.04263,2023}; please cite it if this script proves useful in your research. The reference can be an image or catalog (which have been previously calibrated) The executable name is @command{astscript-zeropoint}, with the following general template: @example ## Using a reference image in four apertures. $ astscript-zeropoint image.fits --hdu=1 \ --refimgs=ref-img1.fits,ref-img2.fits \ --refimgshdu=1,1 \ --refimgszp=22.5,22.5 \ --aperarcsec=1.5,2,2.5,3 \ --magnituderange=16,18 \ --output=output.fits ## Using a reference catalog $ astscript-zeropoint image.fits --hdu=1 \ --refcat=cat.fits \ --refcathdu=1 \ --aperarcsec=1.5,2,2.5,3 \ --magnituderange=16,18 \ --output=output.fits @end example To learn more about the core concepts behind the zero point, please see @ref{Brightness flux magnitude}. For a practical review of how to optimally use this script and ways to interpret its results, we have two tutorials: @ref{Zero point tutorial with reference image} and @ref{Zero point tutorial with reference catalog}. To find the zero point of your input image, this script can use a reference image (that already has a zero point) or a reference catalog (that just has magnitudes). In any case, it is mandatory to identify at least one aperture for aperture photometry over the image (using @option{--aperarcsec}). If reference image(s) is(are) given, it is mandatory to specify its(their) zero point(s) using the @option{--refimgszp} option (it can take a separate value for each reference image). When a catalog is given, it should already contain the magnitudes of the object (you can specify which column to use). This script will not estimate the zero point based on all the objects in the reference image or catalog. It will first query Gaia database and only select objects have a significant parallax (because Gaia's algorithms sometimes confuse galaxies and stars based on pure morphology). You can bypass this step (which needs internet connection and can only be used on real data, not simulations) using the @option{--starcat} option described in @ref{zero point options}. This script will then match the catalog of stars (either through Gaia or @option{--starcat}) with the reference catalog and only use them. If the reference is an image, it will simply use the stars catalog to do aperture photometry. By default, this script will estimate the number of available threads and run all independent steps in parallel on those threads. To control this behavior (and allow it to only run on a certain number of threads), you can use the @option{--numthreads} option. During its operation, this script will build a temporary file in the running directory that will be deleted once it is finished. The @option{--tmpdir} option can be used to manually set the temporary directory's location at any location in your file system. The @option{--keeptmp} option can be used to stop the deletion of that directory (useful for when you want to debug the script or better understand what it does). @menu * zero point output:: Format of the output. * zero point options:: List and details of options. @end menu @node zero point output, zero point options, Invoking astscript-zeropoint, Invoking astscript-zeropoint @subsubsection astscript-zeropoint output The output will be a multi-extension FITS table. The first table in the output gives the zero point and its standard deviation for all the requested apertures. This gives you the ability to inspect them and select the best. The other table(s) give the exact measurements for each star that was used (if you use @option{--keepzpap}, it will be for all your apertures, if not, only for the aperture with the smallest standard deviation). For a full tutorial on how to interpret the output of this script, see @ref{Zero point tutorial with reference image} If you just want the estimated zero point with the least standard deviation, this script will write it as a FITS keyword in the first table of the output. @table @code @item ZPAPER Read as ``Zero Point APERture''. This shows the aperture radius (in arcseconds) that had the smallest standard deviation in the estimated zero points. @item ZPVALUE The zero point estimation for the aperture of @code{ZPAPER}. @item ZPSTD The standard deviation of the zero point (for all the stars used, within the aperture of @code{ZPAPER}). @item ZPMAGMIN The minimum (brightest) magnitude used to estimate the zero point. @item ZPMAGMAX The maximum (faintest) magnitude used to estimate the zero point. @end table @noindent A simple way to see these keywords, or read the value of one is shown below. For more on viewing and manipulating FITS keywords, see @ref{Keyword inspection and manipulation}. @example ## See all the keywords written by this script (that start with 'ZP') $ astfits out.fits -h1 | grep ^ZP ## If you just want the zero point $ astfits jplus-zeropoint.fits -h1 --keyvalue=ZPVALUE @end example @node zero point options, , zero point output, Invoking astscript-zeropoint @subsubsection astscript-zeropoint options All the operating phases of the this script can be customized through the options below. @table @option @item -h STR/INT @itemx --hdu=STR/INT The HDU/extension of the input image to use. @item -o STR @itemx --output=STR The name of the output file produced by this script. See @ref{zero point output} for the format of its contents. @item -N INT @itemx --numthreads=INT The number of threads to use. By default this script will attempt to find the number of available threads at run-time and will use them. @item -a FLT,[FLT] @itemx --aperarcsec=FLT,[FLT] The radius/radii (in arc seconds) of aperture(s) used in aperture photometry of the input image. This option can take many values (to check different apertures and find the best for a more accurate zero point estimation). If a reference image is used, the same aperture radii will be used for aperture photometry there. @item -M FLT,FLT @itemx --magnituderange=FLT,FLT Range of the magnitude for finding the best aperture and zero point. Very bright stars get saturated and fainter stars are affected too much by noise. Therefore, it is important to limit the range of magnitudes used in estimating the zero point. A full tutorial is given in @ref{Zero point tutorial with reference image}. @item -S STR @itemx --starcat=STR Name of catalog containing the RA and Dec of positions for aperture photometry in the input image and reference (catalog or image). If not given, the Gaia database will be queried for all stars that overlap with the input image (see @ref{Available databases}). This option is therefore useful in the following scenarios (among others): @itemize @item No internet connection. @item Many images having a major overlap in the sky, making it inefficient to query Gaia for every image separately: you can query the larger area (containing all the images) once, and directly give the downloaded table to all the separate runs of this script. Especially if the field is wide, the download time can be the slowest part of this script. @item In simulations (where you have a pre-defined list of stars). @end itemize Through the @option{--starcathdu}, @option{--starcatra} and @option{--starcatdec} options described below, you can specify the HDU, RA column and Dec Column within this file. The reference image or catalog probably have many objects that are not stars. But it is only stars that have the same shape (the PSF) across the image@footnote{The PSF itself can vary across the field of view; but that is second-order for this analysis.}. Therefore @item --starcathdu=STR/INT The HDU name or number in file given to @option{--starcat} (described above) that contains the table of RA and Dec positions for aperture photometry. If not given, it is assumed that the table is in HDU number 1 (counting from 0). @item --starcatra=STR/INT The column name or number (in the table given to @option{--starcat}) that contains the Right Ascension. @item --starcatdec=STR/INT The column name or number (in the table given to @option{--starcat}) that contains the Declination. @item -c STR @itemx --refcat=STR Reference catalog used to estimate the zero point of the input image. This option is mutually exclusive with (cannot be given at the same time as) @option{--refimgs}. This catalog should have RA, Dec and Magnitude of the stars (that match with Gaia or @option{--starcat}). @item -C STR/INT @itemx --refcathdu=STR/INT The HDU/extension of the reference catalog will be calculated. @item -r STR @itemx --refcatra=STR Right Ascension column name of the reference catalog. @item -d STR @itemx --refcatdec=STR Declination column name of the reference catalog. @item -m STR @itemx --refcatmag=STR Magnitude column name of the reference catalog. @item -s FLT @itemx --matchradius=FLT Matching radius of stars (in arc seconds) and reference catalog in arc-seconds. By default it is 0.2 arc seconds. @item -R STR,[STR] @itemx --refimgs=STR,[STR] Reference image(s) for estimating the zero point. This option can take any number of separate file names, separated by a comma. The HDUs of each reference image should be given to the @option{refimgshdu} option. In case the images are in separate HDUs of the same file, you need to repeat the file name here. This option is mutually exclusive with (cannot be given at the same time as) @option{--refimgs}. @item -H STR/INT @itemx --refimgshdu=STR/INT HDU/Extension name of number of the reference files. The number of values given to this option should be the same as the number of reference image(s). @item -z FLT,[FLT] @itemx --refimgszp=FLT,[FLT] Zero point of the reference image(s). The number of values given to this should be the same as the number of names given to @option{--refimgs}. @item -K @itemx --keepzpap Keep the table of separate zero points found for each star for all apertures. By default, this table is only present for the aperture that had the least standard deviation in the estimated zero point. @item -t @itemx --tmpdir Directory to keep temporary files during the execution of the script. If the directory does not exist at run$-$time, this script will create it. By default, upon completion of the script, this directory will be deleted. However, if you would like to keep the intermediate files, you can use the @option{--keeptmp} option. @item -k @itemx --keeptmp Its recommended to not remove the temporary directory (see description of @option{--keeptmp}). This option is useful for debugging and checking the outputs of internal steps. @item --mksrc=STR Use a non-standard Makefile for the Makefile to call. This option is primarily useful during the development of this script and its Makefile, not for normal/regular user. So if you are not developing this script, you can safely ignore this option. When this option is given, the default installed Makefile will not be used: the file given to this option will be read by @command{make} (within the script) instead. @item --cite Give BibTeX and acknowledgment information for citing this script within your paper. For more, see @option{Operating mode options}. @end table @node Pointing pattern simulation, Color images with gray faint regions, Zero point estimation, Installed scripts @section Pointing pattern simulation @cindex Depth of data Astronomical images are often composed of many single exposures. When the science topic does not depend on the time of observation (for example galaxy evolution), after completing the observations, we stack those single exposures into one ``deep'' image. Designing the strategy to take those single exposures is therefore a very important aspect of planning your astronomical observation. There are many reasons for taking many short exposures instead of one long exposure: @itemize @item Modern astronomical telescopes have very high precision (with pixels that are often much smaller than an arc-second or 1/3600 degrees. However, the Earth is orbiting the Sun at a very high speed of roughly 15 degrees every hour! Keeping the (often very large!) telescopes in track with this fast moving sky is not easy; such that most cannot continue accurate tracking more than 10 minutes. @item @cindex Seeing For ground-based observations, the turbulence of the atmosphere changes very fast (on the scale of minutes!). So if you plan to observe at 10 minutes and at the start of your observations the seeing is good, it may happen that on the 8th minute, it becomes bad. This will affect the quality of your final exposure! @item @cindex Vignetting When an exposure is taken, the instrument/environment imprint a lot of artifacts on it. One common example that we also see in normal cameras is @url{https://en.wikipedia.org/wiki/Vignetting, vignetting}; where the center receives a larger fraction of the incoming light than the periphery). In order to characterize and remove such artifacts (which depend on many factors at the precision that we need in astronomy!), we need to take many exposures of our science target. @item By taking many exposures we can build a stack that has a higher resolution; this is often done in under-sampled data, like those in the Hubble Space Telescope (HST) or James Webb Space Telescope (JWST). @item The scientific target can be larger than the field of view of your telescope and camera. @end itemize @cindex Pointing In the jargon of observational astronomers, each exposure is also known as a ``dither'' (literally/generally meaning ``trembling'' or ``vibration''). This name was chosen because two exposures are not usually taken on exactly the same position of the sky (known as ``pointing''). In order to improve all the item above, we often move the center of the field of view from one exposure to the next. In most cases this movement is small compared to the field of view, so most of the central part of the final stack has a fixed depth, but the edges are shallower (conveying a sense of vibration). When the spacing between pointings is large, they are known as an ``offset''. A ``pointing'' is used to refer to either a dither or an offset. @cindex Exposure map For example see Figures 3 and 4 of Illingworth et al. @url{https://arxiv.org/pdf/1305.1931.pdf,2013} which show the exposures that went into the XDF survey. The pointing pattern can also be large compared to the field of view, for example see Figure 1 of Trujillo et al. @url{https://arxiv.org/pdf/2109.07478.pdf,2021}, which show the pointing strategy for the LIGHTS survey. These types of images (where each pixel contains the number of exposures, or time, that were used in it) are known as exposure maps. The pointing pattern therefore is strongly defined by the science case (high-level purpose of the observation) and your telescope's field of view. For example in the XDF survey is focused on very high redshift (most distant!) galaxies. These are very small objects and within that small footprint (of just 1 arcmin) we have thousands of them. However, the LIGHTS survey is focused on the halos of large nearby galaxies (that can be more than 10 arcminutes wide!). In @ref{Invoking astscript-pointing-simulate} of Gnuastro's @ref{Installed scripts} is described in detail. This script is designed to simplify the process of selecting the best pointing pattern for your observation strategy. For a practical tutorial on using this script, see @ref{Pointing pattern design}. @menu * Invoking astscript-pointing-simulate:: Options and running mode. @end menu @node Invoking astscript-pointing-simulate, , Pointing pattern simulation, Pointing pattern simulation @subsection Invoking astscript-pointing-simulate This installed script will simulate a final stacked image from a certain pointing pattern (given as a table). A general overview of this script has been published in @url{https://ui.adsabs.harvard.edu/abs/2023RNAAS...7..211A,Akhlaghi (2023)}; please cite it if this script proves useful in your research. The executable name is @file{astscript-pointing-simulate}, with the following general template: @example $ astscript-pointing-simulate [OPTION...] pointings.fits @end example @noindent Examples (for a tutorial, see @ref{Pointing pattern design}): @example $ astscript-pointing-simulate pointing.fits --output=stack.fits \ --img=image.fits --center=10,10 --width=1,1 @end example The default output of this script is a stacked image that results from placing the given image (given to @option{--img}) in the pointings of a pointing pattern. The Right Ascension (RA) and Declination (Dec) of each pointing is given in the main input catalog (@file{pointing.fits} in the example above). The center and width of the final stack (both in degrees by default) should be specified using the @option{--width} option. Therefore, in order to successfully run, this script at least needs the following four inputs: @table @asis @item Pointing positions A table containing the RA and Dec of each pointing (the only input argument). The actual column names that contain them can be set with the @option{--racol} and @option{--deccol} options (see below). @item An image This is used for its distortion and rotation, its pixel values and position on the sky will be ignored. The file containing the image should be given to the @option{--img} option. @item Stack's central coordinate The central RA and Dec of the finally produced stack (given to the @option{--center} option). @item Stack's width The width (in degrees) of the final stack (given to the @option{--width} option). @end table This script will ignore the pixel values of the reference image (given to @option{--img}) and the Reference coordinates (values to @code{CRVAL1} and @code{CRVAL2} in its WCS keywords). For each pointing pointing, this script will put the given RA and Dec into the @code{CRVAL1} and @code{CRVAL2} keywords of a copy of the input (not changing the input in anyway), and reset that input's pixel values to 1. The script will then warp the modified copy into the final pixel grid (correcting any rotation and distortions that are used from the original input). This process is done for all the pointing points in parallel. Finally, all the exposures in the pointing list are stacked together to produce an exposure map (showing how many exposures go into each pixel of the final stack. Except for the table of pointing positions, the rest of the inputs and settings are configured through @ref{Options}, just note the restrictions in @ref{Installed scripts}. @table @option @item -o STR @itemx --output=STR Name of the output. The output is an image of the requested size (@option{--width}) and position (@option{--center}) in the sky, but each pixel will contain the number of exposures that go into it after the pointing has been done. See description above for more. @item -h STR/INT @itemx --hdu=STR/INT The name or counter (counting from zero; from the FITS standard) of HDU containing the table of pointing pointing positions (the file name of this table is the main input argument to this script). For more, see the description of this option in @ref{Input output options}. @item -i STR @itemx --img=STR The references image. The pixel values and central location in this image will be ignored by the script. The only relevant information within this script are the WCS properties (except for @option{CRVAL1} and @option{CRVAL2}, which connect it to a certain position on the sky) and image size. See the description above for more. @item -H STR/INT @itemx --imghdu=STR/INT The name or counter (counting from zero; from the FITS standard) of the HDU containing the reference image (file name should be given to the @option{--img} option). If not given, a default value of @code{1} is assumed; so this is not a mandatory option. @item -r STR/INT @itemx --racol=STR/INT The name or counter (counting from 1; from the FITS standard) of the column containing the Right Ascension (RA) of each pointing to be used in the pointing pattern. The file containing the table is given to this script as its only argument. @item -d STR/INT @itemx --deccol=STR/INT The name or counter (counting from 1; from the FITS standard) of the column containing the Declination (Dec) of each pointing to be used in the pointing pattern. The file containing the table is given to this script as its only argument. @item -C FLT,FLT @itemx --center=FLT,FLT The central RA and Declination of the final stack in degrees. @item -w FLT,FLT @itemx --width=FLT,FLT The width of the final stack in degrees. If @option{--widthinpix} is given, the two values given to this option will be interpreted as degrees. @item --widthinpix Interpret the values given to @option{--width} as number of pixels along each dimension), and not as degrees. @item --ctype=STR,STR The projection of the output stack (@code{CTYPEi} keyword in the FITS WCS standard). For more, see the description of the same option in @ref{Align pixels with WCS considering distortions}. @item --hook-warp-before='STR' Command to run before warping each exposure into the output pixel grid. By default, the exposure is immediately warped to the final pixel grid, but in some scenarios it is necessary to do some operations on the exposure before warping (for example account for vignetting; see @ref{Accounting for non-exposed pixels}). The warping of each exposure is done in parallel by default; therefore there are pre-defined variables that you should use for the input and output file names of your command: @table @code @item $EXPOSURE Input: name of file with the same size as the reference image with all pixels having a fixed value of 1. The WCS has also been corrected based on the pointing pattern. @item $TOWARP Output: name of the expected output of your hook. If it is not created by your script, the script will complain and abort. This file will be given to Warp to be warped into the output pixel grid. @end table For an example of using hooks with an extended discussion, see @ref{Pointing pattern design} and @ref{Accounting for non-exposed pixels}. To develop your command, you can use @command{--hook-warp-before='...; echo GOOD; exit 1'} (where @code{...} can be replaced by any command) and run the script on a single thread (with @option{--numthreads=1}) to produce a single file and simplify the checking that your desired operation works as expected. All the files will be within the temporary directory (see @option{--tmpdir}). @item --hook-warp-after='STR' Command to run after the warp of each exposure into the output pixel grid, but before the stacking of all exposures. For more on hooks, see the description of @code{--hook-warp-before}, @ref{Pointing pattern design} and @ref{Accounting for non-exposed pixels}. @table @code @item $WARPED Input: name of file containing the warped exposure in the output pixel grid. @item $TOWARP Output: name of the expected output of your hook. If it is not created by your script, the script will complain and abort. This file will be stacked from the same file for all exposures into the final output. @end table @item --stack-operator="STR" The operator to use for stacking the warped individual exposures into the final output of this script. For the full list, see @ref{Stacking operators}. By default it is the @code{sum} operator (to produce an output exposure map). For an example usage, see the tutorial in @ref{Pointing pattern design}. @item --mksrc=STR Use a non-standard Makefile for the Makefile to call. This option is primarily useful during the development of this script and its Makefile, not for normal/regular usage. So if you are not developing this script, you can safely ignore this option. When this option is given, the default installed Makefile will not be used: the file given to this option will be read by @command{make} (within the script) instead. @item -t STR @itemx --tmpdir=STR Name of directory containing temporary files. If not given, a temporary directory will be created in the running directory with a long name using some of the input options. By default, this temporary directory will be deleted after the output is created. You can disable the deletion of the temporary directory (useful for debugging!) with the @option{--keeptmp} option. Using this option has multiple benefits in larger pipelines: @itemize @item You can avoid conflicts in case the used inputs in the default name are the same. @item You can put this directory somewhere else in the running file system to avoid mixing output files with your source, or to use other storage hardware that are mounted on the running file system. @end itemize @item -k @itemx --keeptmp Keep the temporary directory (and do not delete it). @item -? @itemx --help Print a list of all the options, along with a short description and context for the program. For more, see @option{Operating mode options}. @item -N INT @itemx --numthreads=INT The number of threads to use for parallel operations (warping the input into the different pointing points). If not given (by default), the script will try to find the number of available threads on the running system and use that. For more, see @option{Operating mode options}. @item --cite Give BibTeX and acknowledgment information for citing this script within your paper. For more, see @option{Operating mode options}. @item -q @itemx --quiet Do not print the series of commands or their outputs in the terminal. For more, see @option{Operating mode options}. @item -V @itemx --version Print the version of the running Gnuastro along with a copyright notice and list of authors that contributed to this script. For more, see @option{Operating mode options}. @end table @node Color images with gray faint regions, PSF construction and subtraction, Pointing pattern simulation, Installed scripts @section Color images with gray faint regions Typical astronomical images have a very wide range of pixel values and generally, it is difficult to show the entire dynamical range in a color image. For example, by using @ref{ConvertType}, it is possible to obtain a color image with three FITS images as each of the Red-Green-Blue (or RGB) color channels. However, depending on the pixel distribution, it could be very difficult to see the different regions together (faint and bright objects at the same time). In something like DS9, you end up changing the color map parameters to see the regions you are most interested in. The reason is that images usually have a lot of faint pixels (near to the sky background or noise values), and few bright pixels (corresponding to the center of stars, galaxies, etc.) that can be millions of times brighter! As a consequence, by considering the images without any modification, it is extremely hard to visualize the entire range of values in a color image. This is because standard color formats like JPEG, TIFF or PDF are defined as 8-bit integer precision, while astronomical data are usually 32-bit floating point! To solve this issue, it is possible to perform some transformations of the images and then obtain the color image. This is actually what the current script does: it makes some non-linear transformations and then uses Gnuastro's ConvertType to generate the color image. There are several parameters and options in order to change the final output that are described in @ref{Invoking astscript-color-faint-gray}. A full tutorial describing this script with actual data is available in @ref{Color images with full dynamic range}. A general overview of this script is published in Infante-Sainz et al. @url{https://arxiv.org/abs/2401.03814,2024}; please cite it if this script proves useful in your research. @menu * Invoking astscript-color-faint-gray:: Details of options and arguments. @end menu @node Invoking astscript-color-faint-gray, , Color images with gray faint regions, Color images with gray faint regions @subsection Invoking astscript-color-faint-gray This installed script will consider several images to combine them into a single color image to visualize the full dynamic range. The executable name is @file{astscript-color-faint-gray}, with the following general template: @example $ astscript-color-faint-gray [OPTION...] r.fits g.fits b.fits @end example @noindent Examples (for a tutorial, see @ref{Color images with full dynamic range}): @example ## Generate a color image from three images with default options. $ astscript-color-faint-gray r.fits g.fits b.fits -g1 --output color.pdf ## Generate a color image, consider the minimum value to be zero. $ astscript-color-faint-gray r.fits g.fits b.fits -g1 \ --minimum=0.0 --output=color.jpg ## Generate a color image considering different zero points, minimum ## values, weights, and also increasing the contrast. $ astscript-color-faint-gray r.fits g.fits b.fits -g1 \ -z=22.4 -z=25.5 -z=24.6 \ -m=-0.1 -m=0.0 -m=0.1 \ -w=1 -w=2 -w=3 \ --contrast=3 \ --output=color.tiff @end example This script takes three inputs images to generate a RGB color image as the output. The order of the images matters, reddest (longest wavelength) filter (R), green (an intermediate wavelength) filter (G) and bluest (shortest wavelength). In astronomy, these can be any filter (for example from infra-red, radio, optical or x-ray); the ``RGB'' designation is from the general definition of colors (see @url{https://en.wikipedia.org/wiki/RGB_color_spaces}) These images are internally manipulated by a series of non-linear transformations and normalized to homogenize and finally combine them into a color image. In general, for typical astronomical images, the default output is an image with bright pixels in color and noise pixels in black. The option @option{--minimum} sets the minimum value to be shown and it is a key parameter, it uses to be a value close to the sky background level. The current non-linear transformation is from Lupton et al. @url{https://ui.adsabs.harvard.edu/abs/2004PASP..116..133L, 2004}, which we call the ``asinh'' transformation. The two important parameters that control this transformation are @option{--qthresh} and @option{--stretch}. With the option @option{--coloronly}, it is possible to generate a color image with the background in black: bright pixels in color and the sky background (or noise) values in black. It is possible to provide a fourth image (K) that will be used for showing the gray region: R, G, B, K The generation of a good color image is something that requires several trials, so we encourage the user to play with the different parameters cleverly. After some testing, we find it useful to follow the steps. For a more complete description of the logic of the process, see the dedicated tutorial in @ref{Color images with full dynamic range}. @enumerate @item Use the default options to estimate the parameters. By running the script with no options at all, it will estimate the parameters and they will be printed on the command-line. @item Select a good sky background value of the images. If the sky background has been subtracted, a minimum value of zero could be a good option: @option{--minimum=0.0}. @item Focus on the bright regions to tweak @option{--qbright} and @option{--stretch}. First, try low values of @option{--qbright} to show the bright parts. Then, adjust @option{--stretch} to show the fainter regions around bright parts. Overall, play with these two parameters to show the color regions appropriately. @item Change @option{--colorval} to separate the color and black regions. This is the lowest value of the threshold image that is shown in color. @item Change @option{--grayval} to separate the black and gray regions. This is highest value of the threshold image that is shown in gray. @item Use @option{--checkparams} to check the pixel value distributions. @item Use @option{--keeptmp} to not remove the threshold image and check it. @end enumerate @noindent A full description of each option is given below: @table @code @item -h @itemx --hdu=STR/INT Input HDU name or counter (counting from 0) for each input FITS file. If the same HDU should be used from all the FITS files, you can use the @option{--globalhdu} option described below to avoid repeating this option. @item -g @itemx --globalhdu=STR/INT Use the value given to this option (a HDU name or a counter, starting from 0) for the HDU identifier of all the input FITS files. This is useful when all the inputs are distributed in different files, but have the same HDU in those files. @item -o @itemx --output Output color image name. The output can be in any of the recognized output formats of ConvertType (including PDF, JPEG and TIFF). @item -m @itemx --minimum=FLT Minimum value to be mapped for each R, G, B, and K FITS images. If a single value is given to this option it will be used for all the input images. This parameter controls the smallest visualized pixel value. In general, it is a good decision to set this value close to the sky background level. This value can dramatically change the output color image (especially when there are large negative values in the image that you do not intend to visualize). @item -Z @itemx --zeropoint=FLT Zero point value for each R, G, B, and K FITS images. If a single value is given, it is used for all the input images. Internally, the zero point values are used to transform the pixel values in units of Janskys. The units are not important for a color image, but the fact that the images are photometrically calibrated is important for obtaining an output color image whose color distribution is realistic. @item -w @itemx --weight=FLT Relative weight for each R, G, B channel. With this parameter, it is possible to change the importance of each channel to modify the color balance of the image. For example, @option{-w=1 -w=2 -w=5} indicates that the B band will be 5 times more important than the R band, and that the G band is 2 times more important than the R channel. In this particular example, the combination will be done as @mymath{\rm{colored}=(1{\times}\rm{R}+2{\times}\rm{G}+5{\times}\rm{B})/(1 + 2 + 5)=0.125{\times}\rm{R} + 0.250{\times}\rm{G} + 0.625{\times}\rm{B}}. In principle, a color image should recreate ``real'' colors, but ``real'' is a very subjective matter and with this option, it is possible to change the color balance and make it more aesthetically interesting. However, be careful to avoid confusing the viewers of your image and report the weights with the filters you used for each channel. It is up to the user to use this parameter carefully. @item -Q @itemx --qbright=FLT It is one of the parameters that control the asinh transformation. It should be used in combination with @option{--stretch}. In general, it has to be set to low values to better show the brightest regions. Afterwards, adjust @option{--stretch} to set the linear stretch (show the intermediate/faint structures). @item -s @itemx --stretch=FLT It is one of the parameters that control the asinh transformation. It should be used in combination with @option{--qbright}. It is used for bringing out the faint/intermediate bright structures of the image that are shown linearly. In general, this parameter is chosen after setting @option{--qbright} to a low value. @cartouche @noindent @strong{The asinh transformation.} The asinh transformation is done on the stacked R, G, B image. It consists in the modification of the stacked image (I) in order to show the entire dynamical range appropriately following the expression: @mymath{f(I) = asinh(} @option{qbright} @mymath{\cdot} @option{stretch} @mymath{\cdot I) /} @option{qbright}. See @ref{Color images with full dynamic range} for a complete tutorial that shows the intricacies of this transformation with step-by-step examples. @end cartouche @item --coloronly By default, the fainter parts of the image are shown in grayscale (not color, since colored noise is not too informative). With this option, the output image will be fully in color with the background (noise pixels) in black. @item --colorval=FLT The value that separates the color and black regions. By default, it ranges from 100 (all pixels becoming in color) to 0 (all pixels becoming black). Check the histogram @code{FOR COLOR and GRAY THRESHOLDS} with the option @option{--checkparams} for selecting a good value. @item --grayval=FLT This parameter defines the value that separates the black and gray regions. It ranges from 100 (all pixels becoming black) to 0 (all pixels becoming white). Check the histogram @code{FOR COLOR and GRAY THRESHOLDS} with the option @option{--checkparams} to select the value. @item --regions=STR Labeled image, identifying the pixels to use for color (value 2), those to use for black (value 1) and those to use for gray (value 0). When this option is given the @option{--colorval} and @option{--grayval} options will be ignored. This gives you the freedom to select the pixels to show in color, black or gray based on any criteria that is relevant for your purpose. For an example of using this option to get a physically motivated threshold, see @ref{Manually setting color-black-gray regions}. @cartouche @noindent @strong{IMPORTANT NOTE.} The options @option{--colorval} and @option{--grayval} are related one to each other. They are defined from the threshold image (an image generated in the temporary directory) named @file{colorgray_threshold.fits}. By default, this image is computed from the stack and later asinh-transformation of the three R, G, B channels. Its pixel values range between 100 (brightest) to 0 (faintest). The @option{--colorval} value computed by default is the median of this image. Pixels above this value are shown in color. Pixels below this value are shown in gray. Regions of pure black color can be defined with the @option{--grayval} option if this value is between 0 and @option{--colorval}. In other words. Color region are defined by those pixels between 100 and @option{--colorval}. Pure black region are defined by those pixels between @option{--colorval} to @option{grayval}. Gray region are defined by those pixels between @option{--grayval} to 0. If a fourth image is provided as the ``K'' channel, then this image is used as the threshold image. See @ref{Color images with full dynamic range} for a complete tutorial. @end cartouche @item --colorkernelfwhm=FLT Gaussian kernel FWHM (in pixels) for convolving the color regions. Sometimes, a convolution of the color regions (bright pixels) is desired to further increase their signal-to-noise ratio (but make them look smoother). With this option, the kernel will be created internally and convolved with the colored regions. @item --graykernelfwhm=FLT Gaussian kernel FWHM (in pixels) for convolving the background image. Sometimes, a convolution of the background image is necessary to smooth the noisier regions and increase their signal-to-noise ratios. With this option, the kernel will be created internally and convolved with the colored regions. @item -b @itemx --bias=FLT Change the brightness of the final image. By increasing this value, a pedestal value will be added to the color image. This option is rarely useful, it is most common to use @option{--contrast}, see below. @item -c @itemx --contrast=FLT Change the contrast of the final image. The transformation is: @mymath{\rm{output}=\rm{contrast}\times{image}+brightness}. @item -G @itemx --gamma=FLT Gamma exponent value for a gamma transformation. This transformation is not linear: @mymath{\rm{output}=\rm{image}^{gamma}}. This option overrides @option{--bias} or @option{--contrast}. @item --markoptions=STR Options to draw marks on the final output image. Anything given to this option is passed directly to ConvertType in order to draw marks on the output image. For example, if you construct a table named @file{marks.txt} that contains the column names: x, y, shape, size, axis ratio, angle, color; you will execute the script with the following option: @option{--markoptions="--marks=markers.txt --markcoords=x,y --markshape=shape --marksize=size,axisratio --markrotate=angle --markcolor=color"}. See @ref{Drawing with vector graphics} for more information on how to draw markers and @ref{Weights contrast markers and other customizations} for a tutorial. @item --checkparams Print the statistics of intermediate images that are used for estimating the parameters. This option is useful to decide the optimum set of parameters. @item --keeptmp Do not remove the temporary directory. This is useful for debugging and checking the outputs of internal steps. @item --cite Give BibTeX and acknowledgment information for citing this script within your paper. For more, see @option{Operating mode options}. @item -q @itemx --quiet Do not print the series of commands or their outputs in the terminal. For more, see @option{Operating mode options}. @item -V @itemx --version Print the version of the running Gnuastro along with a copyright notice and list of authors that contributed to this script. For more, see @option{Operating mode options}. @end table @node PSF construction and subtraction, , Color images with gray faint regions, Installed scripts @section PSF construction and subtraction The point spread function (PSF) describes how the light of a point-like source is affected by several optical scattering effects (atmosphere, telescope, instrument, etc.). Since the light of all astrophysical sources undergoes all these effects, characterizing the PSF is key in astronomical analysis (for small and large objects). Consequently, having a good characterization of the PSF is fundamental to any analysis. In some situations@footnote{An example scenario where a parametric PSF may be enough: you are only interested in very small, high redshift objects that only extended a handful of pixels.} a parametric (analytical) model is sufficient for the PSF (such as Gaussian or Moffat, see @ref{PSF}). However, once you are interested in objects that are larger than a handful of pixels, it is almost impossible to find an analytic function to adequately characterize the PSF. Therefore, it is necessary to obtain an empirical (non-parametric) and extended PSF. In this section we describe a set of installed scrips in Gnuastro that will let you construct the non-parametric PSF using point-like sources. They allow you to derive the PSF from the same astronomical images that the science is derived from (without assuming any analytical function). The scripts are based on the concepts described in Infante-Sainz et al. @url{https://arxiv.org/abs/1911.01430,2020}. But to be complete, we first give a summary of the logic and overview of their combined usage in @ref{Overview of the PSF scripts}. Furthermore, before going into the technical details of each script, we encourage you to go through the tutorial that is devoted to this at @ref{Building the extended PSF}. The tutorial uses a real dataset and includes all the logic and reasoning behind every step of the usage in every installed script. @menu * Overview of the PSF scripts:: Summary of concepts and methods * Invoking astscript-psf-select-stars:: Select good starts within an image. * Invoking astscript-psf-stamp:: Make a stamp of each star to stack. * Invoking astscript-psf-unite:: Merge stacks of different regions of PSF. * Invoking astscript-psf-scale-factor:: Calculate factor to scale PSF to star. * Invoking astscript-psf-subtract:: Put the PSF in the image to subtract. @end menu @node Overview of the PSF scripts, Invoking astscript-psf-select-stars, PSF construction and subtraction, PSF construction and subtraction @subsection Overview of the PSF scripts To obtain an extended and non-parametric PSF, several steps are necessary and we will go through them here. The fundamental ideas of the following methodology are thoroughly described in Infante-Sainz et al. @url{https://arxiv.org/abs/1911.01430,2020}. A full tutorial is also available in @ref{Building the extended PSF}. The tutorial will go through the full process on a pre-selected dataset, but will describe the logic behind every step in away that can easily be modified/generalized to other datasets. This section is basically just a summary of that tutorial. We could have put all these steps into one large program (installed script), however this would introduce several problems. The most prominent of these problems are: @itemize @item The command would require @emph{many} options, making it very complex to run every time. @item You usually have many stars in an image, and many of the steps can be optimized or parallelized depending on the particular analysis scenario. Predicting all the possible optimizations for all the possible usage scenarios would make the code extremely complex (filled with many unforeseen bugs!). @end itemize Therefore, following the modularity principle of software engineering, after several years of working on this, we have broken the full job into the smallest number of independent steps as separate scripts. All scripts are independent of each other, meaning this that you are free to use all of them as you wish (for example, only some of them, using another program for a certain step, using them for other purposes, or running independent parts in parallel). For constructing the PSF from your dataset, the first step is to obtain a catalog of stars within it (you cannot use galaxies to build the PSF!). But you cannot blindly use all the stars either! For example, we do not want contamination from other bright, and nearby objects. The first script below is therefore designed for selecting only good star candidates in your image. It will use different criteria, for example, good parallax (where available, to avoid confusion with galaxies), not being near to bright stars, axis ratio, etc. For more on this script, see @ref{Invoking astscript-psf-select-stars}. Once the catalog of stars is constructed, another script is in charge of making appropriate stamps of the stars. Each stamp is a cropped image of the star with the desired size, normalization of the flux, and mask of the contaminant objects. For more on this script, see @ref{Invoking astscript-psf-stamp} After obtaining a set of star stamps, they can be stacked for obtaining the combined PSF from many stars (for example, with @ref{Stacking operators}). In the combined PSF, the masked background objects of each star's image will be covered and the signal-to-noise ratio will increase, giving a very nice view of the ``clean'' PSF. However, it is usually necessary to obtain different regions of the same PSF from different stars. For example, to construct the far outer wings of the PSF, it is necessary to consider very bright stars. However, these stars will be saturated in the most inner part, and immediately outside of the saturation level, they will be deformed due to non-linearity effects. Consequently, fainter stars are necessary for the inner regions. Therefore, you need to repeat the steps above for certain stars (in a certain magnitude range) to obtain the PSF in certain radial ranges. For example, in Infante-Sainz et al. @url{https://arxiv.org/abs/1911.01430,2020}, the final PSF was constructed from three regions (and thus, using stars from three ranges in magnitude). In other cases, we even needed four groups of stars! But in the example dataset from the tutorial, only two groups are necessary (see @ref{Building the extended PSF}). Once clean stacks of different parts of the PSF have been constructed through the steps above, it is therefore necessary to blend them all into one. This is done by finding a common radial region in both, and scaling the inner region by a factor to add with the outer region. This is not trivial, therefore, a third script is in charge of it, see @ref{Invoking astscript-psf-unite}. Having constructed the PSF as described above (or by any other procedure), it can be scaled to the magnitude of the various stars in the image to get subtracted (and thus remove the extended/bright wings; better showing the background objects of interest). Note that the absolute flux of a PSF is meaningless (and in fact, it is usually normalized to have a total sum of unity!), so it should be scaled. We therefore have another script that will calculate the scale (multiplication) factor of the PSF for each star. For more on the scaling script, see @ref{Invoking astscript-psf-scale-factor}. Once the flux factor has been computed, a final script is in charge of placing the scaled PSF over the proper location in the image, and subtracting it. It is also possible to only obtain the modeled star by the PSF. For more on the scaling and positioning script, see @ref{Invoking astscript-psf-subtract}. As mentioned above, in the following sections, each script has its own documentation and list of options for very detailed customization (if necessary). But if you are new to these scripts, before continuing, we recommend that you do the tutorial @ref{Building the extended PSF}. Just do not forget to run every command, and try to tweak its steps based on the logic to nicely understand it. @node Invoking astscript-psf-select-stars, Invoking astscript-psf-stamp, Overview of the PSF scripts, PSF construction and subtraction @subsection Invoking astscript-psf-select-stars This installed script will select good star candidates for constructing a PSF. It will consider stars within a given range of magnitudes without nearby contaminant objects. To do that, it allows to the user to specify different options described here. A complete tutorial is available to show the operation of this script as a modular component to extract the PSF of a dataset: @ref{Building the extended PSF}. The executable name is @file{astscript-psf-select-stars}, with the following general template: @example $ astscript-psf-select-stars [OPTION...] FITS-file @end example @noindent Examples: @example ## Select all stars within 'image.fits' with magnitude in range ## of 6 to 10; only keeping those that are less than 0.02 degrees ## from other nearby stars. $ astscript-psf-select-stars image.fits \ --magnituderange=6,10 --mindistdeg=0.02 @end example The input of this script is an image, and the output is a catalog of stars with magnitude in the requested range of magnitudes (provided with @option{--magnituderange}). The output catalog will also only contain stars that are sufficiently distant (@option{--mindistdeg}) from all other brighter, and some fainter stars. It is possible to consider different datasets with the option @option{--dataset} (by default, Gaia DR3 dataset is considered) All stars that are @option{--faintmagdiff} fainter than the faintest limit will also be accounted for, when selecting good stars. The @option{--magnituderange}, and @option{--mindistdeg} are mandatory: if not specified the code will abort. The output of this script is a file whose name can be specified with the (optional) @option{--output} option. If not given, an automatically generated name will be used for the output. A full description of each option is given below. @table @option @item -h STR/INT @itemx --hdu=STR/INT The HDU/extension of the input image to use. @item -S STR @itemx --segmented=STR Optional segmentation file obtained by @ref{Segment}. It should have two extensions (@option{CLUMPS} and @option{OBJECTS}). If given, a catalog of @option{CLUMPS} will be computed and matched with the Gaia catalog to reject those objects that are too elliptical (see @option{--minaxisratio}). The matching will occur on an aperture (in degrees) specified by @option{--matchaperturedeg}. @item -a FLT @itemx --matchaperturedeg=FLT This option determines the aperture (in degrees) for matching the catalog from gaia with the clumps catalog that is produced by the segmentation image given to @option{--segmented}. The default value is 10 arc-seconds. @item -c STR @itemx --catalog=STR Optional reference catalog to use for selecting stars (instead of querying an external catalog like Gaia). When this option is given, @option{--dataset} (described below) will be ignored and no internet connection will be necessary. @item -d STR @itemx --dataset=STR Optional dataset to query (see @ref{Query}). It should contain the database and dataset entries to Query. Its value will be immediately given to @command{astquery}. By default, its value is @code{gaia --dataset=dr3} (so it connects to the Gaia database and requests the data release 3). For example, if you want to use VizieR's Gaia DR3 instead (for example due to a maintenance on ESA's Gaia servers), you should use @option{--dataset="vizier --dataset=gaiadr3"}. It is possible to specify a different dataset from which the catalog is downloaded. In that case, the necessary column names may also differ, so you also have to set @option{--refcatra}, @option{--refcatdec} and @option{--field}. See their description for more. @item -r STR @itemx --refcatra=STR The name of the column containing the Right Ascension (RA) in the requested dataset (@option{--dataset}). If the user does not determine this option, the default value is assumed to be @code{ra}. @item -d STR @itemx --refcatdec=STR The name of the column containing the Declination (Dec) in the requested dataset (@option{--dataset}). If the user does not determine this option, the default value is assumed to be @code{dec}. @item -f STR @itemx --field=STR The name of the column containing the magnitude in the requested dataset (@option{--dataset}). The output will only contain stars that have a value in this column, between the values given to @option{--magnituderange} (see below). By default, the value of this option is @option{phot_g_mean_mag} (that corresponds to the name of the magnitude of the G-band in the Gaia catalog). @item -m FLT,FLT @itemx --magnituderange=FLT,FLT The acceptable range of values for the column in @option{--field}. This option is mandatory and no default value is assumed. @item -p STR,STR @itemx --parallaxanderrorcolumn=STR,STR With this option the user can provide the parallax and parallax error column names in the requested dataset. When given, the output will only contain stars for which the parallax value is smaller than three times the parallax error. If the user does not provide this option, the script will not use parallax information for selecting the stars. In the case of Gaia, if you want to use parallax to further limit the good stars, you can pass @option{parallax,parallax_error}. @item -D FLT @itemx --mindistdeg=FLT Stars with nearby bright stars closer than this distance are rejected. The default value is 1 arc minute. For fainter stars (when constructing the center of the PSF), you should decrease the value. @item -b INT @itemx --brightmag=INT The brightest star magnitude to avoid (should be brighter than the brightest of @option{--magnituderange}). The basic idea is this: if a user asks for stars with magnitude 6 to 10 and one of those stars is near a magnitude 3 star, that star (with a magnitude of 6 to 10) should be rejected because it is contaminated. But since the catalog is constrained to stars of magnitudes 6-10, the star with magnitude 3 is not present and cannot be compared with! Therefore, when considering proximity to nearby stars, it is important to use a larger magnitude range than the user's requested magnitude range for good stars. The acceptable proximity is defined by @option{--mindistdeg}. With this option, you specify the brightest limit for the proximity check. The default value is a magnitude of @mymath{-10}, so you'll rarely need to change or customize this option! The faint limit of the proximity check is specified by @option{--faintmagdiff}. As the name suggests, this is a ``diff'' or relative value. The default value is 4. Therefore if the user wants to build the PSF with stars in the magnitude range of 6 to 10, the faintest stars used for the proximity check will have a magnitude of 14: @mymath{10+4}. In summary, by default, the proximity check will be done with stars in the magnitude range @mymath{-10} to @mymath{14}. @item -F INT @itemx --faintmagdiff The magnitude difference of the faintest star used for proximity checks to the faintest limit of @option{--magnituderange}. For more, see the description of @option{--brightmag}. @item -Q FLT @itemx --minaxisratio=FLT Minimum acceptable axis ratio for the selected stars. In other words, only stars with axis ratio between @option{--minaxisratio} to 1.0 will be selected. Default value is @option{--minaxisratio=0.9}. Recall that the axis ratio is only used when you also give a segmented image with @option{--segmented}. @item -t @itemx --tmpdir Directory to keep temporary files during the execution of the script. If the directory does not exist at run-time, this script will create it. By default, upon completion of the script, this directory will be deleted. However, if you would like to keep the intermediate files, you can use the @option{--keeptmp} option. @item -k @itemx --keeptmp Do not remove the temporary directory (see description of @option{--keeptmp}). This option is useful for debugging and checking the outputs of internal steps. @item -o STR @itemx --output=STR The output name of the final catalog containing good stars. @end table @node Invoking astscript-psf-stamp, Invoking astscript-psf-unite, Invoking astscript-psf-select-stars, PSF construction and subtraction @subsection Invoking astscript-psf-stamp This installed script will generate a stamp of fixed size, centered at the provided coordinates (performing sub-pixel re-gridding if necessary) and normalized at a certain normalization radius. Optionally, it will also mask all the other background sources. A complete tutorial is available to show the operation of this script as a modular component to extract the PSF of a dataset: @ref{Building the extended PSF}. The executable name is @file{astscript-psf-stamp}, with the following general template: @example $ astscript-psf-stamp [OPTION...] FITS-file @end example @noindent Examples: @example ## Make a stamp around (x,y)=(53,69) of width=151 pixels. ## Normalize the stamp within the radii 20 and 30 pixels. $ astscript-psf-stamp image.fits --mode=img \ --center=53,69 --widthinpix=151,151 --normradii=20,30 \ --output=stamp.fits ## Iterate over a catalog with positions of stars that are ## in the input image. Use WCS coordinates. $ asttable catalog.fits | while read -r ra dec mag; do \ astscript-psf-stamp image.fits \ --mode=wcs \ --center=$ra,$dec \ --normradii=20,30 \ --widthinpix=150,150 \ --output=stamp-"$ra"-"$dec".fits; done @end example The input is an image from which the stamp of the stars are constructed. The output image will have the following properties: @itemize @item A certain width (specified by @option{--widthinpix} in pixels). @item Centered at the coordinate specified by the option @option{--center} (it can be in image/pixel or WCS coordinates, see @option{--mode}). If no center is specified, then it is assumed that the object of interest is already in the center of the image. @item If the given coordinate has sub-pixel elements (for example, pixel coordinates 1.234,4.567), the pixel grid of the output will be warped so your given coordinate falls in the center of the central pixel of the final output. This is very important for building the central parts of the PSF, but not too effective for the middle or outer parts (to speed up the program in such cases, you can disable it with the @option{--nocentering} option). @item Normalized ``normalized'' by the value computed within the ring around the center (at a radial distance between the two radii specified by the option @option{--normradii}). If no normalization ring is considered, the output will not be normalized. @end itemize In the following cases, this script will produce a fully NaN-valued stamp (of the size given to @option{--widthinpix}). A fully NaN image can safely be used with the stacking operators of Arithmetic (see @ref{Stacking operators}) because they will be ignored. In case you do not want to waste storage with fully NaN images, you can compress them with @code{gzip --best output.fits}, and give the resulting @file{.fits.gz} file to Arithmetic. @itemize @item The requested box (center coordinate with desired width) is not within the input image at all. @item If a normalization radius is requested, and all the pixels within the normalization radii are NaN. Here are some scenarios that this can happen: 1) You have a saturated star (where the saturated pixels are NaN), and your normalization radius falls within the saturated region. 2) The star is outside the image by more than your larger normalization radius (so there are no pixels for doing normalization), but the full stamp width still overlaps part of the image. @end itemize @noindent The full set of options are listed below for optimal customization in different scenarios: @table @option @item -h STR @itemx --hdu=STR The HDU/extension of the input image to use. @item -O STR @itemx --mode=STR Interpret the center position of the object (values given to @option{--center}) in image or WCS coordinates. This option thus accepts only two values: @option{img} or @option{wcs}. @item -c FLT,FLT @itemx --center=FLT,FLT The central position of the object. This option is used for placing the center of the stamp. This parameter is used in @ref{Crop} to center and crop the image. The positions along each dimension must be separated by a comma (@key{,}). The units of the coordinates are read based on the value to the @option{--mode} option, see the examples above. The given coordinate for the central value can have sub-pixel elements (for example, it falls on coordinate 123.4,567.8 of the input image pixel grid). In such cases, after cropping, this script will use Gnuastro's @ref{Warp} to shift (or translate) the pixel grid by @mymath{-0.4} pixels along the horizontal and @mymath{1-0.8=0.2} pixels along the vertical. Finally the newly added pixels (due to the warping) will be trimmed to have your desired coordinate exactly in the center of the central pixel of the output. This is very important (critical!) when you are constructing the central part of the PSF. But for the outer parts it is not too effective, so to avoid wasting time for the warping, you can simply use @option{--nocentering} to disable it. @item -d @itemx --nocentering Do not do the sub-pixel centering to a new pixel grid. See the description of the @option{--center} option for more. @item -W INT,INT @itemx --widthinpix=INT,INT Size (width) of the output image stamp in pixels. The size of the output image will be always an odd number of pixels. As a consequence, if the user specify an even number, the final size will be the specified size plus 1 pixel. This is necessary to place the specified coordinate (given to @option{--center}) in the center of the central pixel. This is very important (and necessary) in the case of the centers of stars, therefore a sub-pixel translation will be performed internally to ensure this. @item -n FLT,FLT @itemx --normradii=FLT,FLT Minimum and maximum radius of ring to normalize the image. This option takes two values, separated by a comma (@key{,}). The first value is the inner radius, the second is the outer radius. @item -S STR @itemx --segment=STR Optional filename of a segmentation image from Segment's output (must contain the @code{CLUMPS} and @code{OBJECT} HDUs). For more on the definition of ``objects'' and ``clumps'', see @ref{Segment}. If given, Segment's output is used to mask all background sources from the large foreground object (a bright star): @itemize @item Objects that are not the central object. @item Clumps (within the central object) that are not the central clump. @end itemize The result is that all objects and clumps that contaminate the central source are masked, while the diffuse flux of the central object remains. The non masked object and clump labels are kept into the header of the output image. The keywords are @code{CLABEL} and @code{OLABEL}. If no segmentation image is used, then their values are set to @code{none}. @item -T FLT @itemx --snthresh=FLT Mask all the pixels below the given signal-to-noise ratio (S/N) threshold. This option is only valid with the @option{--segment} option (it will use the @code{SKY_STD} extension of the @ref{Segment output}. This threshold is applied prior to the possible normalization or centering of the stamp. After all pixels below the given threshold are masked, the mask is also dilated by one level to avoid single pixels above the threshold (which are mainly due to noise when the threshold is lower). After applying the signal-to-noise threshold (if it is requested), any extra pixels that are not connected to the central target are also masked. Such pixels can remain in rivers between bright clumps and will cause problem in the final stack, if they are not masked. This is useful for increasing the S/N of inner parts of each region of the finally stacked PSF. As the stars (that are to be stacked) become fainter, the S/N of their outer parts (at a fixed radius) decreases. The stack of a higher-S/N image with a lower-S/N image will have an S/N that is lower than the higher one. But we can still use the inner parts of those fainter stars (that have sufficiently high S/N). @item -N STR @itemx --normop=STR The operator for measuring the values within the ring defined by the option @option{--normradii}. The operator given to this option will be directly passed to the radial profile script @file{astscript-radial-profile}, see @ref{Generate radial profile}. As a consequence, all MakeCatalog measurements (median, mean, sigclip-mean, sigclip-number, etc.) can be used here. For a full list of MakeCatalog's measurements, please run @command{astmkcatalog --help}. The final normalization value is saved into the header of the output image with the keyword @code{NORMVAL}. If no normalization is done, then the value is set to @code{1.0}. @item -Q FLT @itemx --axis-ratio=FLT The axis ratio of the radial profiles for computing the normalization value. By default (when this option is not given), the radial profile will be circular (axis ratio of 1). This parameter is used directly in the @file{astscript-radial-profile} script. @item -p FLT @itemx --position-angle=FLT The position angle (in degrees) of the profiles relative to the first FITS axis (horizontal when viewed in SAO DS9). By default, it is @option{--position-angle=0}, which means that the semi-major axis of the profiles will be parallel to the first FITS axis. This parameter is used directly in the @file{astscript-radial-profile} script. @item -s FLT,FLT @itemx --sigmaclip=FLT,FLT Sigma clipping parameters: only relevant if sigma-clipping operators are requested by @option{--normop}. For more on sigma-clipping, see @ref{Sigma clipping}. @item -t @itemx --tmpdir Directory to keep temporary files during the execution of the script. If the directory does not exist at run-time, this script will create it. By default, upon completion of the script, this directory will be deleted. However, if you would like to keep the intermediate files, you can use the @option{--keeptmp} option. @item -k @itemx --keeptmp Do not remove the temporary directory (see description of @option{--keeptmp}). This option is useful for debugging and checking the outputs of internal steps. @item -o STR @itemx --output=STR Filename of stamp image. By default the name of the stamp will be a combination of the input image name, the name of the script, and the coordinates of the center. For example, if the input image is named image.fits and the center is @option{--center=33,78}, then the output name wil be: image_stamp_33_78.fits The main reason of setting this name is to have an unique name for each stamp by default. @end table @node Invoking astscript-psf-unite, Invoking astscript-psf-scale-factor, Invoking astscript-psf-stamp, PSF construction and subtraction @subsection Invoking astscript-psf-unite This installed script will join two PSF images at a given radius. This operation is commonly used when merging (uniting) the inner and outer parts of the PSF. A complete tutorial is available to show the operation of this script as a modular component to extract the PSF of a dataset: @ref{Building the extended PSF}. The executable name is @file{astscript-psf-unite}, with the following general template: @example $ astscript-psf-unite [OPTION...] FITS-file @end example @noindent Examples: @example ## Multiply inner.fits by 3 and put it in the center (within a radius of ## 25 pixels) of outer.fits. The core goes up to a radius of 25 pixels. $ astscript-psf-unite outer.fits \ --core=inner.fits --scale=3 \ --radius=25 --output=joined.fits ## Same example than the above, but considering an ## ellipse (instead of a circle). $ astscript-psf-unite outer.fits \ --core=inner.fits --scale=3 \ --radius=25 --axis-ratio=0.5 \ --position-angle=40 --output=joined.fits @end example The junction is done by considering the input image as the outer part. The central part is specified by FITS image given to @option{--inner} and it is multiplied by the factor @option{--scale}. All pixels within @option{--radius} (in pixels) of the center of the outer part are then replaced with the inner image. The scale factor to multiply with the inner part has to be explicitly provided (see the description of @option{--scale} below). Note that this script assumes that PSF is centered in both images. More options are available with the goal of obtaining a good junction. A full description of each option is given below. @table @option @item -h STR @itemx --hdu=STR The HDU/extension of the input image to use. @item -i STR @itemx --inner=STR Filename of the inner PSF. This image is considered to be the central part of the PSF. It will be cropped at the radius specified by the option @option{--radius}, and multiplied by the factor specified by @option{--scale}. After that, it will be appended to the outer part (input image). @item -I STR @itemx --innerhdu=STR The HDU/extension of the inner PSF (option @option{--inner}). @item -f FLT @itemx --scale=FLT Factor by which the inner part (@option{--inner}) is multiplied. This factor is necessary to put the two different parts of the PSF at the same flux level. A convenient way of obtaining this value is by using the script @file{astscript-model-scale-factor}, see @ref{Invoking astscript-psf-scale-factor}. There is also a full tutorial on using all the @command{astscript-psf-*} installed scripts together, see @ref{Building the extended PSF}. We recommend doing that tutorial before starting to work on your own datasets. @item -r FLT @itemx --radius=FLT Radius (in pixels) at which the junction of the images is done. All pixels in the outer image within this radius (from its center) will be replaced with the pixels of the inner image (that has been scaled). By default, a circle is assumed for the shape of the inner region, but this can be tweaked with @option{--axis-ratio} and @option{--position-angle} (see below). @item -Q FLT @itemx --axisratio=FLT Axis ratio of ellipse to define the inner region. By default this option has a value of 1.0, so all central pixels (of the outer image) within a circle of radius @option{--radius} are replaced with the scaled inner image pixels. With this option, you can customize the shape of pixels to take from the inner and outer profiles. For a PSF, it will usually not be necessary to change this option: even if the PSF is non-circular, the inner and outer parts will both have the same ellipticity. So if the scale factor is chosen accurately, using a circle to select which pixels from the inner image to use in the outer image will be irrelevant. @item -p FLT @itemx --position-angle=FLT Position angle of the ellipse (in degrees) to define which central pixels of the outer image to replace with the scaled inner image. Similar to @option{--axis-ratio} (see above). @item -t @itemx --tmpdir Directory to keep temporary files during the execution of the script. If the directory does not exist at run-time, this script will create it. By default, upon completion of the script, this directory will be deleted. However, if you would like to keep the intermediate files, you can use the @option{--keeptmp} option. @item -k @itemx --keeptmp Do not remove the temporary directory (see description of @option{--keeptmp}). This option is useful for debugging and checking the outputs of internal steps. @end table @node Invoking astscript-psf-scale-factor, Invoking astscript-psf-subtract, Invoking astscript-psf-unite, PSF construction and subtraction @subsection Invoking astscript-psf-scale-factor This installed script will compute the multiplicative factor (scale) that is necessary to match the PSF to a given star. The match in flux is done within a ring of pixels. It can also be used to compute the scale factor to multiply the inner part of the PSF with the outer part during the creation of a PSF. A complete tutorial is available to show the operation of this script as a modular component to extract the PSF of a dataset: @ref{Building the extended PSF}. The executable name is @file{astscript-psf-scale-factor}, with the following general template: @example $ astscript-psf-scale-factor [OPTION...] FITS-file @end example @noindent Examples: @example ## Compute the scale factor for the object at (x,y)=(53,69) for ## the PSF (psf.fits). Compute it in the ring 20-30 pixels. $ astscript-psf-scale-factor image.fits --mode=img \ --center=53,69 --normradii=20,30 --psf=psf.fits ## Iterate over a catalog with RA,Dec positions of stars that are in ## the input image to compute their scale factors. $ asttable catalog.fits | while read -r ra dec mag; do \ astscript-psf-scale-factor image.fits \ --mode=wcs \ --psf=psf.fits \ --center=$ra,$dec --quiet \ --normradii=20,30 > scale-"$ra"-"$dec".txt; done @end example The input should be an image containing the star that you want to match in flux with the PSF. The output will be a single number that is printed on the command-line. That number is the multiplicative factor to scale the PSF image (given to @option{--psf}) to match in flux with the given star (which is located in @option{--center} coordinate of the input image). The scale factor will be calculated within the ring of pixels specified by the option @option{--normradii}. All the pixels within this ring will be separated from both the PSF and input images. For the input image, around the selected coordinate; while masking all other sources (see @option{--segment}). The finally selected pixels of the input image will then be divided by those of the PSF image. This gives us an image containing one scale factor per pixel. The finally reported value is the sigma-clipped median of all the scale factors in the finally-used pixels. To fully understand the process on first usage, we recommend that you run this script with @option{--keeptmp} and inspect the files inside of the temporary directory. The most common use-cases of this scale factor are: @enumerate @item To find the factor for joining two different parts of the same PSF, see @ref{Invoking astscript-psf-unite}. @item When modeling a star in order to subtract it using the PSF, see @ref{Invoking astscript-psf-subtract}. @end enumerate For a full tutorial on how to use this script along with the other @command{astscript-psf-*} scripts in Gnuastro, please see @ref{Building the extended PSF}. To allow full customizability, the following options are available with this script. @table @option @item -h STR @itemx --hdu=STR The HDU/extension of the input image to use. @item -p STR @itemx --psf=STR Filename of the PSF image. The PSF is assumed to be centered in this image. @item -P STR @itemx --psfhdu=STR The HDU/extension of the PSF image. @item -c FLT,FLT @itemx --center=FLT,FLT The central position of the object to scale with the PSF. This parameter is passed to Gnuastro's Crop program make a crop for further processing (see @ref{Crop}). The positions along each dimension must be separated by a comma (@key{,}). The units of the coordinates are interpreted based on the value to the @option{--mode} option (see below). @item -O STR @itemx --mode=STR Interpret the center position of the object (values given to @option{--center}) in image or WCS coordinates. This option thus accepts only two values: @option{img} or @option{wcs}. @item -n INT,INT @itemx --normradii=INT,INT Inner (inclusive) and outer (exclusive) radii (in units of pixels) around the central position in which the scale factor is computed. The option takes two values separated by a comma (@key{,}). The first value is the inner radius, the second is the outer radius. These two radii define a ring of pixels around the center that is used for obtaining the scale factor value. @item -W INT,INT @itemx --widthinpix=INT,INT Size (width) of the image stamp in pixels. This is an intermediate product computed internally by the script. By default, the size of the stamp is automatically set to be as small as possible (i.e., two times the external radius of the ring specified by @option{--normradii}) to make the computation fast. As a consequence, this option is only relevant for checking and testing that everything is fine (debugging; it will usually not be necessary). @item -S STR @itemx --segment=STR Optional filename of a segmentation image from Segment's output (must contain the @code{CLUMPS} and @code{OBJECT} HDUs). For more on the definition of ``objects'' and ``clumps'', see @ref{Segment}. If given, Segment's output is used to mask all background sources from the large foreground object (a bright star): @itemize @item Objects that are not the central object. @item Clumps (within the central object) that are not the central clump. @end itemize The result is that all objects and clumps that contaminate the central source are masked, while the diffuse flux of the central object remains. @item -s FLT,FLT @itemx --sigmaclip=FLT,FLT Sigma clipping parameters used in the end to find the final scale factor from the distribution of all pixels used. For more on sigma-clipping, see @ref{Sigma clipping}. @item -t @itemx --tmpdir Directory to keep temporary files during the execution of the script. If the directory does not exist at run-time, this script will create it. By default, upon completion of the script, this directory will be deleted. However, if you would like to keep the intermediate files, you can use the @option{--keeptmp} option. @item -k @itemx --keeptmp Do not remove the temporary directory (see description of @option{--keeptmp}). This option is useful for debugging and checking the outputs of internal steps. @end table @node Invoking astscript-psf-subtract, , Invoking astscript-psf-scale-factor, PSF construction and subtraction @subsection Invoking astscript-psf-subtract This installed script will put the provided PSF into a given position within the input image (implementing sub-pixel adjustments where necessary), and then it will subtract it. It is aimed at modeling and subtracting the scattered light field of an input image. It is also possible to obtain the modeled star with the PSF (and not make the subtraction of it from the original image). A complete tutorial is available to show the operation of this script as a modular component to extract the PSF of a dataset: @ref{Building the extended PSF}. The executable name is @file{astscript-psf-subtract}, with the following general template: @example $ astscript-psf-subtract [OPTION...] FITS-file @end example @noindent Examples: @example ## Multiply the PSF (psf.fits) by 3 and subtract it from the ## input image (image.fits) at the pixel position (x,y)=(53,69). $ astscript-psf-subtract image.fits \ --psf=psf.fits \ --mode=img \ --scale=3 \ --center=53,69 \ --output=star-53_69.fits ## Iterate over a catalog with positions of stars that are ## in the input image. Use WCS coordinates. $ asttable catalog.fits | while read -r ra dec mag; do scale=$(cat scale-"$ra"_"$dec".txt) astscript-psf-subtract image.fits \ --mode=wcs \ --psf=psf.fits \ --scale=$scale \ --center=$ra,$dec; done @end example The input is an image from which the star is considered. The result is the same image but with the star subtracted (modeled by the PSF). The modeling of the star is done with the PSF image specified with the option @option{--psf}, and flux-scaled with the option @option{--scale} at the position defined by @option{--center}. Instead of obtaining the PSF-subtracted image, it is also possible to obtain the modeled star by the PSF. To do that, use the option @option{--modelonly}. With this option, the output will be an image with the same size as the original one with the PSF situated in the star coordinates and flux-scaled. In this case, the region not covered by the PSF are set to zero values. Note that this script works over individual objects. As a consequence, to generate a scattered light field of many stars, it is necessary to make multiple calls. A full description of each option is given below. @table @option @item -h STR @itemx --hdu=STR The HDU/extension of the input image to use. @item -p STR @itemx --psf=STR Filename of the PSF image. The PSF is assumed to be centered in this image. @item -P STR @itemx --psfhdu=STR The HDU/extension of the PSF image. @item -O STR @itemx --mode=STR Interpret the center position of the object (values given to @option{--center}) in image or WCS coordinates. This option thus accepts only two values: @option{img} or @option{wcs}. @item -c FLT,FLT @itemx --center=FLT,FLT The central position of the object. This parameter is used in @ref{Crop} to center and crop the image. The positions along each dimension must be separated by a comma (@key{,}). The number of values given to this option must be the same as the dimensions of the input dataset. The units of the coordinates are read based on the value to the @option{--mode} option, see above. If the central position does not fall in the center of a pixel in the input image, the PSF is resampled with sub-pixel change in the pixel grid before subtraction. @item -s FLT @itemx --scale=FLT Factor by which the PSF (@option{--psf}) is multiplied. This factor is necessary to put the PSF with the desired flux level. A convenient way of obtaining this value is by using the script @file{astscript-scale-factor}, see @ref{Invoking astscript-psf-scale-factor}. For a full tutorial on using the @command{astscript-psf-*} scripts together, see @ref{Building the extended PSF}. @item -t @itemx --tmpdir Directory to keep temporary files during the execution of the script. If the directory does not exist at run-time, this script will create it. By default, upon completion of the script, this directory will be deleted. However, if you would like to keep the intermediate files, you can use the @option{--keeptmp} option. @item -k @itemx --keeptmp Do not remove the temporary directory (see description of @option{--keeptmp}). This option is useful for debugging and checking the outputs of internal steps. @item -m @itemx --modelonly Do not make the subtraction of the modeled star by the PSF. This option is useful when the user wants to obtain the scattered light field given by the PSF modeled star. @end table @node Makefile extensions, Library, Installed scripts, Top @chapter Makefile extensions (for GNU Make) @cindex Make @url{https://en.wikipedia.org/wiki/Make_(software), Make} is a build automation tool. It can greatly help manage your analysis workflow, even very complex projects with thousands of files and hundreds of processing steps. In this book, we have discussed Make previously in the context of parallelization (see @ref{How to run simultaneous operations}). It has also been used in @cindex GNU Make GNU Make is the most common and powerful implementation of Make, with many unique additions to the core POSIX standard of Make. One of those features is the ability to add extensions using a dynamic library (that Gnuastro provides). For the details of this feature from GNU Make's own manual, see its @url{https://www.gnu.org/software/make/manual/html_node/Loading-Objects.html, Loading dynamic objects} section. Through this feature, Gnuastro provides additional Make functions that are useful in the context of data analysis. To use this feature, Gnuastro has to be built in shared library more. Gnuastro's Make extensions will not work if you build Gnuastro without shared libraries (for example, when you configure Gnuastro with @option{--disable-shared} or @option{--debug}). @menu * Loading the Gnuastro Make functions:: How to find and load Gnuastro's Make library. * Makefile functions of Gnuastro:: The available functions. @end menu @node Loading the Gnuastro Make functions, Makefile functions of Gnuastro, Makefile extensions, Makefile extensions @section Loading the Gnuastro Make functions To load Gnuastro's Make functions in your Makefile, you should use the @command{load} command of GNU Make in your Makefile. The load command should be given Gnuastro's @file{libgnuastro_make.so} dynamic library, which has been specifically written for being called by GNU Make. The generic command looks like this (the @file{/PATH/TO} part should be changed): @example load /PATH/TO/lib/libgnuastro_make.so @end example @noindent Here are the possible replacements of the @file{/PATH/TO} component: @table @file @item /usr/local If you installed Gnuastro from source and did not use the @option{--prefix} option at configuration time, you should use this base directory. @item /usr/ If you installed Gnuastro through your operating system's package manager, it is highly likely that Gnuastro's library is here. @item ~/.local If you installed Gnuastro from source, but used @option{--prefix} to install Gnuastro in your home directory (as described in @ref{Installation directory}). @end table If you cannot find @file{libgnuastro_make.so} in the locations above, the command below should give you its location. It assumes that the libraries are in the same base directory as the programs (which is usually the case). @example $ which astfits | sed -e's|bin/astfits|lib/libgnuastro_make.so|' @end example @node Makefile functions of Gnuastro, , Loading the Gnuastro Make functions, Makefile extensions @section Makefile functions of Gnuastro All Gnuastro Make functions start with the @command{ast-} prefix (similar to the programs on the command-line, but with a dash). After you have loaded Gnuastro's shared library for Makefiles within your Makefile, you can call these functions just like any Make function. For instructions on how to load Gnuastro's Make functions, see @ref{Loading the Gnuastro Make functions}. There are two types of Make functions in Gnuastro's Make extensions: 1) Basic operations on text which more general than astronomy or Gnuastro, see @ref{Text functions for Makefiles}). 2) Operations that are directly related to astronomy (mostly FITS files) and Gnuastro, see @ref{Astronomy functions for Makefiles}). @cartouche @noindent @strong{Difference between `@code{=}' or `@code{:=}' for variable definition} When you define a variable with `@code{=}', its value is expanded only when used, not when defined. However, when you use `@code{:=}', it is immediately expanded when defined. Therefore the location of a `@code{:=}' variable in the Makefile matters: if used before its definition, it will be empty! Those defined by `@code{=}' can be used even before they are defined! On the other hand, if your variable invokes functions (like @code{foreach} or @code{wildcard}), it is better to use `@code{:=}'. Otherwise, each time the value is used, the function will be expanded (possibly may times) and this will reduce the speed of your pipeline. For more, see the @url{https://www.gnu.org/software/make/manual/html_node/Flavors.html, The two flavors of variables} in the GNU Make manual. @end cartouche @menu * Text functions for Makefiles:: Basic text operations to supplement Make. * Astronomy functions for Makefiles:: Astronomy/FITS related functions. @end menu @node Text functions for Makefiles, Astronomy functions for Makefiles, Makefile functions of Gnuastro, Makefile functions of Gnuastro @subsection Text functions for Makefiles The functions described below are generic (not limited to astronomy/FITS) functions that operate on plain text. You can see these as functions that should have been implemented in GNU Make itself. The names of these functions start with @code{ast-text-*} and each has a fully working example to demonstrate its usage. @table @code @item $(ast-text-contains STRING, TEXT) Returns all white-space-separated words in @code{TEXT} that contain the @code{STRING}, removing any words that @emph{do not} match. For example, the following minimal Makefile will only print the @code{bAaz Aah} word of the list. @example load /usr/local/lib/libgnuastro_make.so list = fooo baar bAaz uggh Aah all: echo $(ast-text-contains Aa, $(list)) @end example This can be thought of as Make's own @code{filter} function, but if it would accept two patterns in a format like this @code{$(filter %Aa%,$(list))} (for the example above). In fact, the first sentence describing this function is taken from the Make manual's first sentence that describes the @code{filter} function! However, unfortunately Make's @code{filter} function only accepts a single @code{%}, not two! @item $(ast-text-not-contains STRING, TEXT) Returns all white-space-separated words in @code{TEXT} that @emph{do not} contain the @code{STRING}, removing any words that @emph{do not} match. This is the inverse of the @code{ast-text-contains} function. For example, the following minimal Makefile will print @code{fooo baar uggh} word of the list. @example load /usr/local/lib/libgnuastro_make.so list = fooo baar bAaz uggh Aah all: echo $(ast-text-not-contains Aa, $(list)) @end example @item $(ast-text-to-upper STRING) Returns the input string but with all characters in UPPER-CASE. For example, the following minimal Makefile will print @code{FOOO BAAR UGGH} word of the list. @example load /usr/local/lib/libgnuastro_make.so list = fOOo bAar UggH ulist := $(ast-text-to-upper $(list)) all:; echo $(ulist) @end example @item $(ast-text-to-lower STRING) Returns the input string but with all characters in lower-case. For example, the following minimal Makefile will print @code{fooo baar uggh} word of the list. @example load /usr/local/lib/libgnuastro_make.so list = fOOo bAar UggH list := $(ast-text-to-lower $(list)) all:; echo $(ulist) @end example @end table @node Astronomy functions for Makefiles, , Text functions for Makefiles, Makefile functions of Gnuastro @subsection Astronomy functions for Makefiles FITS files (the standard data format in astronomy) have unique features (header keywords and HDUs) that can greatly help designing workflows in Makefiles. The Makefile extension functions of this section allow you to optimally use those features within your pipelines. Besides FITS, when designing your workflow/pipeline with Gnuastro, there are also special features like version checking that simplify your design. @table @code @item $(ast-version-is STRING) @cindex Reproducibility Returns @code{1} if the version of the used Gnuastro is equal to @code{STRING}, and @code{0} otherwise. This is useful/critical for obtaining reproducible results on different systems. It can be used in combination with @url{https://www.gnu.org/software/make/manual/html_node/Conditionals.html, Conditionals in Make} to ensure the required version of Gnuastro is going to be used in your workflow. For example, in the minimal working Makefile below, we are using it to specify if the default (first) target (@code{all}) should have any prerequisites (and let the workflow start), or if it should simply print a message (that the required version of Gnuastro isn't installed) and abort (without any prerequisites). @example load /usr/local/lib/libgnuastro_make.so gnuastro-version = 0.19 ifeq ($(ast-version-is $(gnuastro-version)),1) all: paper.pdf else all:; @@echo "Please use Gnuastro $(gnuastro-version)" endif result.fits: input.fits astnoisechisel $< --output=$@@ paper.pdf: result.fits pdflatex --halt-on-error paper.tex @end example @item $(ast-fits-with-keyvalue KEYNAME, KEYVALUES, HDU, FITS_FILES) Will select only the FITS files (from a list of many in @code{FITS_FILES}, non-FITS files are ignored), where the @code{KEYNAME} keyword has the value(s) given in @code{KEYVALUES}. Only the HDU given in the @code{HDU} argument will be checked. According to the FITS standard, the keyword name is not case sensitive, but the keyword value is. For example, if you have many FITS files in the @file{/datasets/images} directory, the minimal Makefile below will put those with a value of @code{BAR} or @code{BAZ} for the @code{FOO} keyword in HDU number @code{1} in the @code{selected} Make variable. Notice how there is no comma between @code{BAR} and @code{BAZ}: you can specify any series of values. @verbatim load /usr/local/lib/libgnuastro_make.so files := $(wildcard /datasets/images/*.fits) selected := $(ast-fits-with-keyvalue FOO, BAR BAZ, 1, $(files)) all: echo "Full: $(words $(files)) files"; echo "Selected: $(words $(selected)) files" @end verbatim @item $(ast-fits-unique-keyvalues KEYNAME, HDU, FITS_FILES) Will return the unique values given to the given FITS keyword (@code{KEYNAME}) in the given HDU of all the input FITS files (non-FITS files are ignored). For example, after the commands below, the @code{keyvalues} variable will contain the unique values given to the @code{FOO} keyword in HDU number 1 of all the FITS files in @file{/datasets/images/*.fits}. @example files := $(wildcard /datasets/images/*.fits) keyvalues := $(ast-fits-unique-keyvalues FOO, 1, $(files)) @end example This is useful when you do not know the full range of values a-priori. For example, let's assume that you are looking at a night's observations with a telescope and the purpose of the FITS image is written in the @code{OBJECT} keyword of the image (which we can assume is in HDU number 1). This keyword can have the name of the various science targets (for example, @code{NGC123} and @code{M31}) and calibration targets (for example, @code{BIAS} and @code{FLAT}). The list of science targets is different from project to project, such that in one night, you can observe multiple projects. But the calibration frames have unique names. Knowing the calibration keyword values, you can extract the science keyword values of the night with the command below (feeding the output of this function to Make's @code{filter-out} function). @example calib = BIAS FLAT files := $(wildcard /datasets/images/*.fits) science := $(filter-out $(calib), \ $(ast-fits-unique-keyvalues OBJECT, 1, $(files))) @end example The @code{science} variable will now contain the unique science targets that were observed in your selected FITS images. You can use it to group the various exposures together in the next stages to make separate stacks of deep images for each science target (you can select FITS files based on their keyword values using the @code{ast-fits-with-keyvalue} function, which is described separately in this section). @end table @node Library, Developing, Makefile extensions, Top @chapter Library Each program in Gnuastro that was discussed in the prior chapters (or any program in general) is a collection of functions that is compiled into one executable file which can communicate directly with the outside world. The outside world in this context is the operating system. By communication, we mean that control is directly passed to a program from the operating system with a (possible) set of inputs and after it is finished, the program will pass control back to the operating system. For programs written in C and C++, the unique @code{main} function is in charge of this communication. Similar to a program, a library is also a collection of functions that is compiled into one executable file. However, unlike programs, libraries do not have a @code{main} function. Therefore they cannot communicate directly with the outside world. This gives you the chance to write your own @code{main} function and call library functions from within it. After compiling your program into a binary executable, you just have to @emph{link} it to the library and you are ready to run (execute) your program. In this way, you can use Gnuastro at a much lower-level, and in combination with other libraries on your system, you can significantly boost your creativity. This chapter starts with a basic introduction to libraries and how you can use them in @ref{Review of library fundamentals}. The separate functions in the Gnuastro library are then introduced (classified by context) in @ref{Gnuastro library}. If you end up routinely using a fixed set of library functions, with a well-defined input and output, it will be much more beneficial if you define a program for the job. Therefore, in its @ref{Version controlled source}, Gnuastro comes with the @ref{The TEMPLATE program} to easily define your own programs(s). @menu * Review of library fundamentals:: Guide on libraries and linking. * BuildProgram:: Link and run source files with this library. * Gnuastro library:: Description of all library functions. * Library demo programs:: Demonstration for using libraries. @end menu @node Review of library fundamentals, BuildProgram, Library, Library @section Review of library fundamentals Gnuastro's libraries are written in the C programming language. In @ref{Why C}, we have thoroughly discussed the reasons behind this choice. C was actually created to write Unix, thus understanding the way C works can greatly help in effectively using programs and libraries in all Unix-like operating systems. Therefore, in the following subsections some important aspects of C, as it relates to libraries (and thus programs that depend on them) on Unix are reviewed. First we will discuss header files in @ref{Headers} and then go onto @ref{Linking}. This section finishes with @ref{Summary and example on libraries}. If you are already familiar with these concepts, please skip this section and go directly to @ref{Gnuastro library}. @cindex Modularity In theory, a full operating system (or any software) can be written as one function. Such a software would not need any headers or linking (that are discussed in the subsections below). However, writing that single function and maintaining it (adding new features, fixing bugs, documentation, etc.) would be a programmer or scientist's worst nightmare! Furthermore, all the hard work that went into creating it cannot be reused in other software: every other programmer or scientist would have to re-invent the wheel. The ultimate purpose behind libraries (which come with headers and have to be linked) is to address this problem and increase modularity: ``the degree to which a system's components may be separated and recombined'' (from Wikipedia). The more modular the source code of a program or library, the easier maintaining it will be, and all the hard work that went into creating it can be reused for a wider range of problems. @menu * Headers:: Header files included in source. * Linking:: Linking the compiled source files into one. * Summary and example on libraries:: A summary and example on using libraries. @end menu @node Headers, Linking, Review of library fundamentals, Review of library fundamentals @subsection Headers @cindex Pre-Processor C source code is read from top to bottom in the source file, therefore program components (for example, variables, data structures and functions) should all be @emph{defined} or @emph{declared} closer to the top of the source file: before they are used. @emph{Defining} something in C or C++ is jargon for providing its full details. @emph{Declaring} it, on the other-hand, is jargon for only providing the minimum information needed for the compiler to pass it temporarily and fill in the detailed definition later. For a function, the @emph{declaration} only contains the inputs and their data-types along with the output's type@footnote{Recall that in C, functions only have one output.}. The @emph{definition} adds to the declaration by including the exact details of what operations are done to the inputs to generate the output. As an example, take this simple summation function: @example double sum(double a, double b) @{ return a + b; @} @end example @noindent What you see above is the @emph{definition} of this function: it shows you (and the compiler) exactly what it does to the two @code{double} type inputs and that the output also has a @code{double} type. Note that a function's internal operations are rarely so simple and short, it can be arbitrarily long and complicated. This unreasonably short and simple function was chosen here for ease of reading. The declaration for this function is: @example double sum(double a, double b); @end example @noindent You can think of a function's declaration as a building's address in the city, and the definition as the building's complete blueprints. When the compiler confronts a call to a function during its processing, it does not need to know anything about how the inputs are processed to generate the output. Just as the postman does not need to know the inner structure of a building when delivering the mail. The declaration (address) is enough. Therefore by @emph{declaring} the functions once at the start of the source files, we do not have to worry about @emph{defining} them after they are used. Even for a simple real-world operation (not a simple summation like above!), you will soon need many functions (for example, some for reading/preparing the inputs, some for the processing, and some for preparing the output). Although it is technically possible, managing all the necessary functions in one file is not easy and is contrary to the modularity principle (see @ref{Review of library fundamentals}), for example, the functions for preparing the input can be usable in your other projects with a different processing. Therefore, as we will see later (in @ref{Linking}), the functions do not necessarily need to be defined in the source file where they are used. As long as their definitions are ultimately linked to the final executable, everything will be fine. For now, it is just important to remember that the functions that are called within one source file must be declared within the source file (declarations are mandatory), but not necessarily defined there. In the spirit of modularity, it is common to define contextually similar functions in one source file. For example, in Gnuastro, functions that calculate the median, mean and other statistical functions are defined in @file{lib/statistics.c}, while functions that deal directly with FITS files are defined in @file{lib/fits.c}. Keeping the definition of similar functions in a separate file greatly helps their management and modularity, but this fact alone does not make things much easier for the caller's source code: recall that while definitions are optional, declarations are mandatory. So if this was all, the caller would have to manually copy and paste (@emph{include}) all the declarations from the various source files into the file they are working on now. To address this problem, programmers have adopted the header file convention: the header file of a source code contains all the declarations that a caller would need to be able to use any of its functions. For example, in Gnuastro, @file{lib/statistics.c} (file containing function definitions) comes with @file{lib/gnuastro/statistics.h} (only containing function declarations). The discussion above was mainly focused on functions, however, there are many more programming constructs such as preprocessor macros and data structures. Like functions, they also need to be known to the compiler when it confronts a call to them. So the header file also contains their definitions or declarations when they are necessary for the functions. @cindex Macro @cindex Structures @cindex Data structures @cindex Pre-processor macros Preprocessor macros (or macros for short) are replaced with their defined value by the preprocessor before compilation. Conventionally they are written only in capital letters to be easily recognized. It is just important to understand that the compiler does not see the macros, it sees their fixed values. So when a header specifies macros you can do your programming without worrying about the actual values. The standard C types (for example, @code{int}, or @code{float}) are very low-level and basic. We can collect multiple C types into a @emph{structure} for a higher-level way to keep and pass-along data. See @ref{Generic data container} for some examples of macros and data structures. The contents in the header need to be @emph{include}d into the caller's source code with a special preprocessor command: @code{#include <path/to/header.h>}. As the name suggests, the @emph{preprocessor} goes through the source code prior to the processor (or compiler). One of its jobs is to include, or merge, the contents of files that are mentioned with this directive in the source code. Therefore the compiler sees a single entity containing the contents of the main file and all the included files. This allows you to include many (sometimes thousands of) declarations into your code with only one line. Since the headers are also installed with the library into your system, you do not even need to keep a copy of them for each separate program, making things even more convenient. Try opening some of the @file{.c} files in Gnuastro's @file{lib/} directory with a text editor to check out the include directives at the start of the file (after the copyright notice). Let's take @file{lib/fits.c} as an example. You will notice that Gnuastro's header files (like @file{gnuastro/fits.h}) are indeed within this directory (the @file{fits.h} file is in the @file{gnuastro/} directory). You will notice that files like @file{stdio.h}, or @file{string.h} are not in this directory (or anywhere within Gnuastro). On most systems the basic C header files (like @file{stdio.h} and @file{string.h} mentioned above) are located in @file{/usr/include/}@footnote{The @file{include/} directory name is taken from the pre-processor's @code{#include} directive, which is also the motivation behind the `I' in the @option{-I} option to the pre-processor.}. Your compiler is configured to automatically search that directory (and possibly others), so you do not have to explicitly mention these directories. Go ahead, look into the @file{/usr/include} directory and find @file{stdio.h} for example. When the necessary header files are not in those specific libraries, the preprocessor can also search in places other than the current directory. You can specify those directories with this preprocessor option@footnote{Try running Gnuastro's @command{make} and find the directories given to the compiler with the @option{-I} option.}: @table @option @item -I DIR ``Add the directory @file{DIR} to the list of directories to be searched for header files. Directories named by '-I' are searched before the standard system include directories. If the directory @file{DIR} is a standard system include directory, the option is ignored to ensure that the default search order for system directories and the special treatment of system headers are not defeated...'' (quoted from the GNU Compiler Collection manual). Note that the space between @key{I} and the directory is optional and commonly not used. @end table If the preprocessor cannot find the included files, it will abort with an error. In fact a common error when building programs that depend on a library is that the compiler does not know where a library's header is (see @ref{Known issues}). So you have to manually tell the compiler where to look for the library's headers with the @option{-I} option. For a small software with one or two source files, this can be done manually (see @ref{Summary and example on libraries}). However, to enhance modularity, Gnuastro (and most other bin/libraries) contain many source files, so the compiler is invoked many times@footnote{Nearly every command you see being executed after running @command{make} is one call to the compiler.}. This makes manual addition or modification of this option practically impossible. @cindex GNU build system @cindex @command{CPPFLAGS} To solve this problem, in the GNU build system, there are conventional environment variables for the various kinds of compiler options (or flags). These environment variables are used in every call to the compiler (they can be empty). The environment variable used for the C preprocessor (or CPP) is @command{CPPFLAGS}. By giving @command{CPPFLAGS} a value once, you can be sure that each call to the compiler will be affected. See @ref{Known issues} for an example of how to set this variable at configure time. @cindex GNU build system As described in @ref{Installation directory}, you can select the top installation directory of a software using the GNU build system, when you @command{./configure} it. All the separate components will be put in their separate sub-directory under that, for example, the programs, compiled libraries and library headers will go into @file{$prefix/bin} (replace @file{$prefix} with a directory), @file{$prefix/lib}, and @file{$prefix/include} respectively. For enhanced modularity, libraries that contain diverse collections of functions (like GSL, WCSLIB, and Gnuastro), put their header files in a sub-directory unique to themselves. For example, all Gnuastro's header files are installed in @file{$prefix/include/gnuastro}. In your source code, you need to keep the library's sub-directory when including the headers from such libraries, for example, @code{#include <gnuastro/fits.h>}@footnote{the top @file{$prefix/include} directory is usually known to the compiler}. Not all libraries need to follow this convention, for example, CFITSIO only has one header (@file{fitsio.h}) which is directly installed in @file{$prefix/include}. @node Linking, Summary and example on libraries, Headers, Review of library fundamentals @subsection Linking @cindex GNU Libtool To enhance modularity, similar functions are defined in one source file (with a @file{.c} suffix, see @ref{Headers} for more). After running @command{make}, each human-readable, @file{.c} file is translated (or compiled) into a computer-readable ``object'' file (ending with @file{.o}). Note that object files are also created when building programs, they are not particular to libraries. Try opening Gnuastro's @file{lib/} and @file{bin/progname/} directories after running @command{make} to see these object files@footnote{Gnuastro uses GNU Libtool for portable library creation. Libtool will also make a @file{.lo} file for each @file{.c} file when building libraries (@file{.lo} files are human-readable).}. Afterwards, the object files are @emph{linked} together to create an executable program or a library. @cindex GNU Binutils The object files contain the full definition of the functions in the respective @file{.c} file along with a list of any other function (or generally ``symbol'') that is referenced there. To get a list of those functions you can use the @command{nm} program which is part of GNU Binutils. For example, from the top Gnuastro directory, run: @example $ nm bin/arithmetic/arithmetic.o @end example @noindent This will print a list of all the functions (more generally, `symbols') that were called within @file{bin/arithmetic/arithmetic.c} along with some further information (for example, a @code{T} in the second column shows that this function is actually defined here, @code{U} says that it is undefined here). Try opening the @file{.c} file to check some of these functions for yourself. Run @command{info nm} for more information. @cindex Linking To recap, the @emph{compiler} created the separate object files mentioned above for each @file{.c} file. The @emph{linker} will then combine all the symbols of the various object files (and libraries) into one program or library. In the case of Arithmetic (a program) the contents of the object files in @file{bin/arithmetic/} are copied (and re-ordered) into one final executable file which we can run from the operating system. @cindex Static linking @cindex Linking: Static @cindex Dynamic linking @cindex Linking: Dynamic There are two ways to @emph{link} all the necessary symbols: static and dynamic/shared. When the symbols (computer-readable function definitions in most cases) are copied into the output, it is called @emph{static} linking. When the symbols are kept in their original file and only a reference to them is kept in the executable, it is called @emph{dynamic}, or @emph{shared} linking. Let's have a closer look at the executable to understand this better: we will assume you have built Gnuastro without any customization and installed Gnuastro into the default @file{/usr/local/} directory (see @ref{Installation directory}). If you tried the @command{nm} command on one of Arithmetic's object files above, then with the command below you can confirm that all the functions that were defined in the object file above (had a @code{T} in the second column) are also defined in the @file{astarithmetic} executable: @example $ nm /usr/local/bin/astarithmetic @end example @noindent These symbols/function have been statically linked (copied) in the final executable. But you will notice that there are still many undefined symbols in the executable (those with a @code{U} in the second column). One class of such functions are Gnuastro's own library functions that start with `@code{gal_}': @example $ nm /usr/local/bin/astarithmetic | grep gal_ @end example @cindex Plugin @cindex GNU Libtool @cindex Shared library @cindex Library: shared @cindex Dynamic linking @cindex Linking: dynamic These undefined symbols (functions) are present in another file and will be linked to the Arithmetic program every time you run it. Therefore they are known as dynamically @emph{linked} libraries @footnote{Do not confuse dynamically @emph{linked} libraries with dynamically @emph{loaded} libraries. The former (that is discussed here) are only loaded once at the program startup. However, the latter can be loaded anytime during the program's execution, they are also known as plugins.}. As we saw above, static linking is done when the executable is being built. However, when a program is dynamically linked to a library, at build-time, the library's symbols are only checked with the available libraries: they are not actually copied into the program's executable. Every time you run the program, the (dynamic) linker will be activated and will try to link the program to the installed library before the program starts. If you want all the libraries to be statically linked to the executables, you have to tell Libtool (which Gnuastro uses for the linking) to disable shared libraries at configure time@footnote{Libtool is very common and is commonly used. Therefore, you can use this option to configure on most programs using the GNU build system if you want static linking.}: @example $ configure --disable-shared @end example @noindent Try configuring Gnuastro with the command above, then build and install it (as described in @ref{Quick start}). Afterwards, check the @code{gal_} symbols in the installed Arithmetic executable like before. You will see that they are actually copied this time (have a @code{T} in the second column). If the second column does not convince you, look at the executable file size with the following command: @example $ ls -lh /usr/local/bin/astarithmetic @end example @noindent It should be around 4.2 Megabytes with this static linking. If you configure and build Gnuastro again with shared libraries enabled (which is the default), you will notice that it is roughly 100 Kilobytes! This huge difference would have been very significant in the old days, but with the roughly Terabyte storage drives commonly in use today, it is negligible. Fortunately, output file size is not the only benefit of dynamic linking: since it links to the libraries at run-time (rather than build-time), you do not have to rebuild a higher-level program or library when an update comes for one of the lower-level libraries it depends on. You just install the new low-level library and it will automatically be used/linked next time in the programs that use it. To be fair, this also creates a few complications@footnote{Both of these can be avoided by joining the mailing lists of the lower-level libraries and checking the changes in newer versions before installing them. Updates that result in such behaviors are generally heavily emphasized in the release notes.}: @itemize @item Reproducibility: Even though your high-level tool has the same version as before, with the updated library, you might not get the same results. @item Broken links: if some functions have been changed or removed in the updated library, then the linker will abort with an error at run-time. Therefore you need to rebuild your higher-level program or library. @end itemize @cindex GNU C library To see a list of all the shared libraries that are needed for a program or a shared library to run, you can use GNU C library's @command{ldd}@footnote{If your operating system is not using the GNU C library, you might need another tool.} program, for example: @example $ ldd /usr/local/bin/astarithmetic @end example Library file names (in their installation directory) start with a @file{lib} and their ending (suffix) shows if they are static (@file{.a}) or dynamic (@file{.so}), as described below. The name of the library is in the middle of these two, for example, @file{libgsl.a} or @file{libgnuastro.a} (GSL and Gnuastro's static libraries), and @file{libgsl.so.23.0.0} or @file{libgnuastro.so.4.0.0} (GSL and Gnuastro's shared library, the numbers may be different). @itemize @item A static library is known as an archive file and has the @file{.a} suffix. A static library is not an executable file. @item @cindex Shared library versioning @cindex Versioning: Shared library A shared library ends with the @file{.so.X.Y.Z} suffix and is executable. The three numbers in the suffix, describe the version of the shared library. Shared library versions are defined to allow multiple versions of a shared library simultaneously on a system and to help detect possible updates in the library and programs that depend on it by the linker. It is very important to mention that this version number is different from the software version number (see @ref{Version numbering}), so do not confuse the two. See the ``Library interface versions'' chapter of GNU Libtool for more. For each shared library, we also have two symbolic links ending with @file{.so.X} and @file{.so}. They are automatically set by the installer, but you can change them (point them to another version of the library) when you have multiple versions of a library on your system. @end itemize @cindex GNU Libtool Libraries that are built with GNU Libtool (including Gnuastro and its dependencies), build both static and dynamic libraries by default and install them in @file{prefix/lib/} directory (for more on @file{prefix}, see @ref{Installation directory}). In this way, programs depending on the libraries can link with them however they prefer. See the contents of @file{/usr/local/lib} with the command below to see both the static and shared libraries available there, along with their executable nature and the symbolic links: @example $ ls -l /usr/local/lib/ @end example To link with a library, the linker needs to know where to find the library. @emph{At compilation time}, these locations can be passed to the linker with two separate options (see @ref{Summary and example on libraries} for an example) as described below. You can see these options and their usage in practice while building Gnuastro (after running @command{make}): @table @option @item -L DIR Will tell the linker to look into @file{DIR} for the libraries. For example, @file{-L/usr/local/lib}, or @file{-L/home/yourname/.local/lib}. You can make multiple calls to this option, so the linker looks into several directories at compilation time. Note that the space between @key{L} and the directory is optional and commonly ignored (written as @option{-LDIR}). @item -lLIBRARY Specify the unique library identifier/name (not containing directory or shared/dynamic nature) to be linked with the executable. As discussed above, library file names have fixed parts which must not be given to this option. So @option{-lgsl} will guide the linker to either look for @file{libgsl.a} or @file{libgsl.so} (depending on the type of linking it is suppose to do). You can link many libraries by repeated calls to this option. @strong{Very important: } The place of this option on the compiler's command matters. This is often a source of confusion for beginners, so let's assume you have asked the linker to link with library A using this option. As soon as the linker confronts this option, it looks into the list of the undefined symbols it has found until that point and does a search in library A for any of those symbols. If any pending undefined symbol is found in library A, it is used. After the search in undefined symbols is complete, the contents of library A are completely discarded from the linker's memory. Therefore, if a later object file or library uses an unlinked symbol in library A, the linker will abort after it has finished its search in all the input libraries or object files. As an example, Gnuastro's @code{gal_fits_img_read} function depends on the @code{fits_read_pix} function of CFITSIO (specified with @option{-lcfitsio}, which in turn depends on the cURL library, called with @option{-lcurl}). So the proper way to link something that uses this function is @option{-lgnuastro -lcfitsio -lcurl}. If instead, you give: @option{-lcfitsio -lgnuastro} the linker will complain and abort. To avoid such linking complexities when using Gnuastro's library, we recommend using @ref{BuildProgram}. @end table If you have compiled and linked your program with a dynamic library, then the dynamic linker also needs to know the location of the libraries after building the program: @emph{every time} the program is run afterwards. Therefore, it may happen that you do not get any errors when compiling/linking a program, but are unable to run your program because of a failure to find a library. This happens because the dynamic linker has not found the dynamic library @emph{at run time}. To find the dynamic libraries at run-time, the linker looks into the paths, or directories, in the @code{LD_LIBRARY_PATH} environment variable. For a discussion on environment variables, especially search paths like @code{LD_LIBRARY_PATH}, and how you can add new directories to them, see @ref{Installation directory}. @node Summary and example on libraries, , Linking, Review of library fundamentals @subsection Summary and example on libraries After the mostly abstract discussions of @ref{Headers} and @ref{Linking}, we will give a small tutorial here. But before that, let's recall the general steps of how your source code is prepared, compiled and linked to the libraries it depends on so you can run it: @enumerate @item The @strong{preprocessor} includes the header (@file{.h}) files into the function definition (@file{.c}) files, expands preprocessor macros. Generally the preprocessor prepares the human-readable source for compilation (reviewed in @ref{Headers}). @item The @strong{compiler} will translate (compile) the human-readable contents of each source (merged @file{.c} and the @file{.h} files, or generally the output of the preprocessor) into the computer-readable code of @file{.o} files. @item The @strong{linker} will link the called function definitions from various compiled files to create one unified object. When the unified product has a @code{main} function, this function is the product's only entry point, enabling the operating system or user to directly interact with it, so the product is a program. When the product does not have a @code{main} function, the linker's product is a library and it is exported functions can be linked to other executables (it has many entry points). @end enumerate @cindex GCC: GNU Compiler Collection @cindex GNU Compiler Collection (GCC) The GNU Compiler Collection (or GCC for short) will do all three steps. So as a first example, from Gnuastro's source, go to @file{tests/lib/}. This directory contains the library tests, you can use these as some simple tutorials. For this demonstration, we will compile and run the @file{arraymanip.c}. This small program will call Gnuastro library for some simple operations on an array (open it and have a look). To compile this program, run this command inside the directory containing it. @example $ gcc arraymanip.c -lgnuastro -lm -o arraymanip @end example @noindent The two @option{-lgnuastro} and @option{-lm} options (in this order) tell GCC to first link with the Gnuastro library and then with C's math library. The @option{-o} option is used to specify the name of the output executable, without it the output file name will be @file{a.out} (on most OSs), independent of your input file name(s). If your top Gnuastro installation directory (let's call it @file{$prefix}, see @ref{Installation directory}) is not recognized by GCC, you will get preprocessor errors for unknown header files. Once you fix it, you will get linker errors for undefined functions. To fix both, you should run GCC as follows: additionally telling it which directories it can find Gnuastro's headers and compiled library (see @ref{Headers} and @ref{Linking}): @example $ gcc -I$prefix/include -L$prefix/lib arraymanip.c -lgnuastro -lm \ -o arraymanip @end example @noindent This single command has done all the preprocessor, compilation and linker operations. Therefore no intermediate files (object files in particular) were created, only a single output executable was created. You are now ready to run the program with: @example $ ./arraymanip @end example The Gnuastro functions called by this program only needed to be linked with the C math library. But if your program needs WCS coordinate transformations, needs to read a FITS file, needs special math operations (which include its linear algebra operations), or you want it to run on multiple CPU threads, you also need to add these libraries in the call to GCC: @option{-lgnuastro -lwcs -lcfitsio -lgsl -lgslcblas -pthread -lm}. In @ref{Gnuastro library}, where each function is documented, it is mentioned which libraries (if any) must also be linked when you call a function. If you feel all these linkings can be confusing, please consider Gnuastro's @ref{BuildProgram} program. @node BuildProgram, Gnuastro library, Review of library fundamentals, Library @section BuildProgram The number and order of libraries that are necessary for linking a program with Gnuastro library might be too confusing when you need to compile a small program for one particular job (with one source file). BuildProgram will use the information gathered during configuring Gnuastro and link with all the appropriate libraries on your system. This will allow you to easily compile, link and run programs that use Gnuastro's library with one simple command and not worry about which libraries to link to, or the linking order. @cindex GNU Libtool BuildProgram uses GNU Libtool to find the necessary libraries to link against (GNU Libtool is the same program that builds all of Gnuastro's libraries and programs when you run @code{make}). So in the future, if Gnuastro's prerequisite libraries change or other libraries are added, you do not have to worry, you can just run BuildProgram and internal linking will be done correctly. @cartouche @noindent @strong{BuildProgram requires GNU Libtool:} BuildProgram depends on GNU Libtool, other implementations do not have some necessary features. If GNU Libtool is not available at Gnuastro's configure time, you will get a notice at the end of the configuration step and BuildProgram will not be built or installed. Please see @ref{Optional dependencies} for more information. @end cartouche @menu * Invoking astbuildprog:: Options and examples for using this program. @end menu @node Invoking astbuildprog, , BuildProgram, BuildProgram @subsection Invoking BuildProgram BuildProgram will compile and link a C source program with Gnuastro's library and all its dependencies, greatly facilitating the compilation and running of small programs that use Gnuastro's library. The executable name is @file{astbuildprog} with the following general template: @example $ astbuildprog [OPTION...] C_SOURCE_FILE @end example @noindent One line examples: @example ## Compile, link and run `myprogram.c': $ astbuildprog myprogram.c ## Similar to previous, but with optimization and compiler warnings: $ astbuildprog -Wall -O2 myprogram.c ## Compile and link `myprogram.c', then run it with `image.fits' ## as its argument: $ astbuildprog myprogram.c image.fits ## Also look in other directories for headers and linking: $ astbuildprog -Lother -Iother/dir myprogram.c ## Just build (compile and link) `myprogram.c', do not run it: $ astbuildprog --onlybuild myprogram.c @end example If BuildProgram is to run, it needs a C programming language source file as input. By default it will compile and link the given source into a final executable program and run it. The built executable name can be set with the optional @option{--output} option. When no output name is set, BuildProgram will use Gnuastro's @ref{Automatic output} system to remove the suffix of the input source file (usually @file{.c}) and use the resulting name as the built program name. For the full list of options that BuildProgram shares with other Gnuastro programs, see @ref{Common options}. You may also use Gnuastro's @ref{Configuration files} to specify other libraries/headers to use for special directories and not have to type them in every time. The C compiler can be chosen with the @option{--cc} option, or environment variables, please see the description of @option{--cc} for more. The two common @code{LDFLAGS} and @code{CPPFLAGS} environment variables are also checked and used in the build by default. Note that they are placed after the values to the corresponding options @option{--includedir} and @option{--linkdir}. Therefore BuildProgram's own options take precedence. Using environment variables can be disabled with the @option{--noenv} option. Just note that BuildProgram also keeps the important flags in these environment variables in its configuration file. Therefore, in many cases, even though you may needed them to build Gnuastro, you will not need them in BuildProgram. The first argument is considered to be the C source file that must be compiled and linked. Any other arguments (non-option tokens on the command-line) will be passed onto the program when BuildProgram wants to run it. Recall that by default BuildProgram will run the program after building it. This behavior can be disabled with the @code{--onlybuild} option. @cindex GNU Make When the @option{--quiet} option (see @ref{Operating mode options}) is not called, BuildPrograms will print the compilation and running commands. Once your program grows and you break it up into multiple files (which are much more easily managed with Make), you can use the linking flags of the non-quiet output in your @code{Makefile}. @table @option @item -c STR @itemx --cc=STR @cindex C compiler @cindex Compiler, C @cindex GCC: GNU Compiler Collection @cindex GNU Compiler Collection (GCC) C compiler to use for the compilation, if not given environment variables will be used as described in the next paragraph. If the compiler is in your system's search path, you can simply give its name, for example, @option{--cc=gcc}. If it is not in your system's search path, you can give its full path, for example, @option{--cc=/path/to/your/custom/cc}. If this option has no value after parsing the command-line and all configuration files (see @ref{Configuration file precedence}), then BuildProgram will look into the following environment variables in the given order @code{CC} and @code{GCC}. If they are also not defined, BuildProgram will ultimately default to the @command{gcc} command which is present in many systems (sometimes as a link to other compilers). @item -I STR @itemx --includedir=STR @cindex GNU CPP @cindex C preprocessor Directory to search for files that you @code{#include} in your C program. Note that headers relating to Gnuastro and its dependencies do not need this option. This is only necessary if you want to use other headers. It may be called multiple times and order matters. This directory will be searched before those of Gnuastro's build and also the system search directories. See @ref{Headers} for a thorough introduction. From the GNU C preprocessor manual: ``Add the directory @code{STR} to the list of directories to be searched for header files. Directories named by @option{-I} are searched before the standard system include directories. If the directory @code{STR} is a standard system include directory, the option is ignored to ensure that the default search order for system directories and the special treatment of system headers are not defeated''. @item -L STR @itemx --linkdir=STR @cindex GNU Libtool Directory to search for compiled libraries to link the program with. Note that all the directories that Gnuastro was built with will already be used by BuildProgram (GNU Libtool). This option is only necessary if your libraries are in other directories. Multiple calls to this option are possible and order matters. This directory will be searched before those of Gnuastro's build and also the system search directories. See @ref{Linking} for a thorough introduction. @item -l STR @itemx --linklib=STR Library to link with your program. Note that all the libraries that Gnuastro was built with will already be linked by BuildProgram (GNU Libtool). This option is only necessary if you want to link with other directories. Multiple calls to this option are possible and order matters. This library will be linked before Gnuastro's library or its dependencies. See @ref{Linking} for a thorough introduction. @item -O INT/STR @itemx --optimize=INT/STR @cindex Optimization @cindex GCC: GNU Compiler Collection @cindex GNU Compiler Collection (GCC) Compiler optimization level: 0 (for no optimization, good debugging), 1, 2, 3 (for the highest level of optimizations). From the GNU Compiler Collection (GCC) manual: ``Without any optimization option, the compiler's goal is to reduce the cost of compilation and to make debugging produce the expected results. Statements are independent: if you stop the program with a break point between statements, you can then assign a new value to any variable or change the program counter to any other statement in the function and get exactly the results you expect from the source code. Turning on optimization flags makes the compiler attempt to improve the performance and/or code size at the expense of compilation time and possibly the ability to debug the program.'' Please see your compiler's manual for the full list of acceptable values to this option. @item -g @itemx --debug @cindex Debug Emit extra information in the compiled binary for use by a debugger. When calling this option, it is best to explicitly disable optimization with @option{-O0}. To combine both options you can run @option{-gO0} (see @ref{Options} for how short options can be merged into one). @item -W STR @itemx --warning=STR Print compiler warnings on command-line during compilation. ``Warnings are diagnostic messages that report constructions that are not inherently erroneous but that are risky or suggest there may have been an error.'' (from the GCC manual). It is always recommended to compile your programs with warnings enabled. All compiler warning options that start with @option{W} are usable by this option in BuildProgram also, see your compiler's manual for the full list. Some of the most common values to this option are: @option{pedantic} (Warnings related to standard C) and @option{all} (all issues the compiler confronts). @item -t @itemx --tag=STR The language configuration information. Libtool can build objects and libraries in many languages. In many cases, it can identify the language automatically, but when it does not you can use this option to explicitly notify Libtool of the language. The acceptable values are: @code{CC} for C, @code{CXX} for C++, @code{GCJ} for Java, @code{F77} for Fortran 77, @code{FC} for Fortran, @code{GO} for Go and @code{RC} for Windows Resource. Note that the Gnuastro library is not yet fully compatible with all these languages. @item -b @itemx --onlybuild Only build the program, do not run it. By default, the built program is immediately run afterwards. @item -d @itemx --deletecompiled Delete the compiled binary file after running it. This option is only relevant when the compiled program is run after being built. In other words, it is only relevant when @option{--onlybuild} is not called. It can be useful when you are busy testing a program or just want a fast result and the actual binary/compiled file is not of later use. @item -a STR @itemx --la=STR Use the given @file{.la} file (Libtool control file) instead of the one that was produced from Gnuastro's configuration results. The Libtool control file keeps all the necessary information for building and linking a program with a library built by Libtool. The default @file{prefix/lib/libgnuastro.la} keeps all the information necessary to build a program using the Gnuastro library gathered during configure time (see @ref{Installation directory} for prefix). This option is useful when you prefer to use another Libtool control file. @item -e @itemx --noenv @cindex @code{CC} @cindex @code{GCC} @cindex @code{LDFLAGS} @cindex @code{CPPFLAGS} Do not use environment variables in the build, just use the values given to the options. As described above, environment variables like @code{CC}, @code{GCC}, @code{LDFLAGS}, @code{CPPFLAGS} will be read by default and used in the build if they have been defined. @end table @node Gnuastro library, Library demo programs, BuildProgram, Library @section Gnuastro library Gnuastro library's programming constructs (function declarations, macros, data structures, or global variables) are classified by context into multiple header files (see @ref{Headers})@footnote{Within Gnuastro's source, all installed @file{.h} files in @file{lib/gnuastro/} are accompanied by a @file{.c} file in @file{/lib/}.}. In this section, the functions in each header will be discussed under a separate sub-section, which includes the name of the header. Assuming a function declaration is in @file{headername.h}, you can include its declaration in your source code with: @example # include <gnuastro/headername.h> @end example @noindent The names of all constructs in @file{headername.h} are prefixed with @code{gal_headername_} (or @code{GAL_HEADERNAME_} for macros). The @code{gal_} prefix stands for @emph{G}NU @emph{A}stronomy @emph{L}ibrary. Gnuastro library functions are compiled into a single file which can be linked on the command-line with the @option{-lgnuastro} option. See @ref{Linking} and @ref{Summary and example on libraries} for an introduction on linking and some fully working examples of the libraries. Gnuastro's library is a high-level library which depends on lower level libraries for some operations (see @ref{Dependencies}). Therefore if at least one of Gnuastro's functions in your program use functions from the dependencies, you will also need to link those dependencies after linking with Gnuastro. See @ref{BuildProgram} for a convenient way to deal with the dependencies. BuildProgram will take care of the libraries to link with your program (which uses the Gnuastro library), and can even run the built program afterwards. Therefore it allows you to conveniently focus on your exciting science/research when using Gnuastro's libraries. @cartouche @noindent @strong{Libraries are still under heavy development: } Gnuastro was initially created to be a collection of command-line programs. However, as the programs and their the shared functions grew, internal (not installed) libraries were added. Since the 0.2 release, the libraries are install-able. Hence the libraries are currently under heavy development and will significantly evolve between releases and will become more mature and stable in due time. It will stabilize with the removal of this notice. Check the @file{NEWS} file for interface changes. If you use the Info version of this manual (see @ref{Info}), you do not have to worry: the documentation will correspond to your installed version. @end cartouche @menu * Configuration information:: General information about library config. * Multithreaded programming:: Tools for easy multi-threaded operations. * Library data types:: Definitions and functions for types. * Pointers:: Wrappers for easy working with pointers.@strong{} * Library blank values:: Blank values and functions to deal with them. * Library data container:: General data container in Gnuastro. * Dimensions:: Dealing with coordinates and dimensions. * Linked lists:: Various types of linked lists. * Array input output:: Reading and writing images or cubes. * Table input output:: Reading and writing table columns. * FITS files:: Working with FITS data. * File input output:: Reading and writing to various file formats. * World Coordinate System:: Dealing with the world coordinate system. * Arithmetic on datasets:: Arithmetic operations on a dataset. * Tessellation library:: Functions for working on tiles. * Bounding box:: Finding the bounding box. * Polygons:: Working with the vertices of a polygon. * Qsort functions:: Helper functions for Qsort. * K-d tree:: Space partitioning in K dimensions. * Permutations:: Re-order (or permute) the values in a dataset. * Matching:: Matching catalogs based on position. * Statistical operations:: Functions for basic statistics. * Fitting functions:: Fit independent and measured variables. * Binary datasets:: Datasets that can only have values of 0 or 1. * Labeled datasets:: Working with Segmented/labeled datasets. * Convolution functions:: Library functions to do convolution. * Pooling functions:: Reduce size of input by statistical methods. * Interpolation:: Interpolate (over blank values possibly). * Warp library:: Warp pixel grid to a new one. * Color functions:: Definitions and operations related to colors. * Git wrappers:: Wrappers for functions in libgit2. * Python interface:: Functions to help in writing Python wrappers. * Unit conversion library:: Converting between recognized units. * Spectral lines library:: Functions for operating on Spectral lines. * Cosmology library:: Cosmological calculations. * SAO DS9 library:: Take inputs from files generated by SAO DS9. @end menu @node Configuration information, Multithreaded programming, Gnuastro library, Gnuastro library @subsection Configuration information (@file{config.h}) The @file{gnuastro/config.h} header contains information about the full Gnuastro installation on your system. Gnuastro developers should note that this is the only header that is not available within Gnuastro, it is only available to a Gnuastro library user @emph{after} installation. Within Gnuastro, @file{config.h} (which is included in every Gnuastro @file{.c} file, see @ref{Coding conventions}) has more than enough information about the overall Gnuastro installation. @deffn Macro GAL_CONFIG_VERSION This macro can be used as a string literal@footnote{@url{https://en.wikipedia.org/wiki/String_literal}} containing the version of Gnuastro that is being used. See @ref{Version numbering} for the version formats. For example: @example printf("Gnuastro version: %s\n", GAL_CONFIG_VERSION); @end example @noindent or @example char *gnuastro_version=GAL_CONFIG_VERSION; @end example @end deffn @deffn Macro GAL_CONFIG_HAVE_GSL_INTERP_STEFFEN GNU Scientific Library (GSL) is a mandatory dependency of Gnuastro (see @ref{GNU Scientific Library}). The Steffen interpolation function that can be used in Gnuastro was introduced in GSL version 2.0 (released in October 2015). This macro will have a value of @code{1} if the host GSL contains this feature at configure time, and @code{0} otherwise. @end deffn @deffn Macro GAL_CONFIG_HAVE_FITS_IS_REENTRANT @cindex CFITSIO This macro will have a value of 1 when the CFITSIO of the host system has the @code{fits_is_reentrant} function (available from CFITSIO version 3.30). This function is used to see if CFITSIO was configured to read a FITS file simultaneously on different threads. @end deffn @deffn Macro GAL_CONFIG_HAVE_WCSLIB_VERSION WCSLIB is the reference library for world coordinate system transformation (see @ref{WCSLIB} and @ref{World Coordinate System}). However, only more recent versions of WCSLIB also provide its version number. If the WCSLIB that is installed on the system provides its version (through the possibly existing @code{wcslib_version} function), this macro will have a value of one, otherwise it will have a value of zero. @end deffn @deffn Macro GAL_CONFIG_HAVE_WCSLIB_DIS_H This macro has a value of 1 if the host's WCSLIB has the @file{wcslib/dis.h} header for distortion-related operations. @end deffn @deffn Macro GAL_CONFIG_HAVE_WCSLIB_MJDREF This macro has a value of 1 if the host's WCSLIB reads and stores the @file{MJDREF} FITS header keyword as part of its core @code{wcsprm} structure. @end deffn @deffn Macro GAL_CONFIG_HAVE_WCSLIB_OBSFIX This macro has a value of 1 if the host's WCSLIB supports the @code{OBSFIX} feature (used by @code{wcsfix} function to parse the input WCS for known errors). @end deffn @deffn Macro GAL_CONFIG_HAVE_PTHREAD_BARRIER The POSIX threads standard define barriers as an optional requirement. Therefore, some operating systems choose to not include it. As one of the @command{./configure} step checks, Gnuastro we check if your system has this POSIX thread barriers. If so, this macro will have a value of @code{1}, otherwise it will have a value of @code{0}. see @ref{Implementation of pthread_barrier} for more. @end deffn @cindex 32-bit @cindex 64-bit @cindex bit-32 @cindex bit-64 @deffn Macro GAL_CONFIG_SIZEOF_LONG @deffnx Macro GAL_CONFIG_SIZEOF_SIZE_T The size of (number of bytes in) the system's @code{long} and @code{size_t} types. Their values are commonly either 4 or 8 for 32-bit and 64-bit systems. You can also get this value with the expression `@code{sizeof size_t}' for example, without having to include this header. @end deffn @deffn Macro GAL_CONFIG_HAVE_LIBGIT2 Libgit2 is an optional dependency of Gnuastro (see @ref{Optional dependencies}). When it is installed and detected at configure time, this macro will have a value of @code{1} (one). Otherwise, it will have a value of @code{0} (zero). Gnuastro also comes with some wrappers to make it easier to use libgit2 (see @ref{Git wrappers}). @end deffn @deffn Macro GAL_CONFIG_HAVE_PYTHON Gnuastro can optionally provide a set of basic functions to facilitate wrapper libraries in Python (see @ref{Python interface}). If a version of Python 3.X was found on the host system that has the necessary Numpy headers, this macro will be given a value of @code{1}. Otherwise, it will be given a value of @code{0} and the the Python interface functions won't be available in the host's Gnuastro library. @end deffn @deffn Macro GAL_CONFIG_HAVE_GNUMAKE_H Gnuastro provides a set of GNU Make extension functions (see @ref{Makefile extensions}). In order to use those, the host should have @file{gnumake.h} in its include paths. This check is done at Gnuastro's configuration time. If it was found, this macro is given a value of @code{1}, otherwise, it will have a value of @code{0}. @end deffn @node Multithreaded programming, Library data types, Configuration information, Gnuastro library @subsection Multithreaded programming (@file{threads.h}) @cindex Multithreaded programming In recent years, newer CPUs do not have significantly higher frequencies any more. However, CPUs are being manufactured with more cores, enabling more than one operation (thread) at each instant. This can be very useful to speed up many aspects of processing and in particular image processing. Most of the programs in Gnuastro utilize multi-threaded programming for the CPU intensive processing steps. This can potentially lead to a significant decrease in the running time of a program, see @ref{A note on threads}. In terms of reading the code, you do not need to know anything about multi-threaded programming. You can simply follow the case where only one thread is to be used. In these cases, threads are not used and can be completely ignored. @cindex POSIX threads library @cindex Lawrence Livermore National Laboratory When the C language was defined (the K&R's book was written), using threads was not common, so C's threading capabilities are not introduced there. Gnuastro uses POSIX threads for multi-threaded programming, defined in the @file{pthread.h} system wide header. There are various resources for learning to use POSIX threads. An excellent @url{https://computing.llnl.gov/tutorials/pthreads/, tutorial} is provided by the Lawrence Livermore National Laboratory, with abundant figures to better understand the concepts, it is a very good start. The book `Advanced programming in the Unix environment'@footnote{Do not let the title scare you! The two chapters on Multi-threaded programming are very self-sufficient and do not need any more knowledge than K&R.}, by Richard Stevens and Stephen Rago, Addison-Wesley, 2013 (Third edition) also has two chapters explaining the POSIX thread constructs which can be very helpful. @cindex OpenMP An alternative to POSIX threads was OpenMP, but POSIX threads are low level, allowing much more control, while being easier to understand, see @ref{Why C}. All the situations where threads are used in Gnuastro currently are completely independent with no need of coordination between the threads. Such problems are known as ``embarrassingly parallel'' problems. They are some of the simplest problems to solve with threads and are also the ones that benefit most from them, see the LLNL introduction@footnote{@url{https://computing.llnl.gov/tutorials/parallel_comp/}}. One very useful POSIX thread concept is @code{pthread_barrier}. Unfortunately, it is only an optional feature in the POSIX standard, so some operating systems do not include it. Therefore in @ref{Implementation of pthread_barrier}, we introduce our own implementation. This is a rather technical section only necessary for more technical readers and you can safely ignore it. Following that, we describe the helper functions in this header that can greatly simplify writing a multi-threaded program, see @ref{Gnuastro's thread related functions} for more. @menu * Implementation of pthread_barrier:: Some systems do not have pthread_barrier * Gnuastro's thread related functions:: Functions for managing threads. @end menu @node Implementation of pthread_barrier, Gnuastro's thread related functions, Multithreaded programming, Multithreaded programming @subsubsection Implementation of @code{pthread_barrier} @cindex POSIX threads @cindex pthread_barrier One optional feature of the POSIX Threads standard is the @code{pthread_barrier} concept. It is a very useful high-level construct that allows for independent threads to ``wait'' behind a ``barrier'' for the rest after they finish. Barriers can thus greatly simplify the code in a multi-threaded program, so they are heavily used in Gnuastro. However, since it is an optional feature in the POSIX standard, some operating systems do not include it. So to make Gnuastro portable, we have written our own implementation of those @code{pthread_barrier} functions. At @command{./configure} time, Gnuastro will check if @code{pthread_barrier} constructs are available on your system or not. If @code{pthread_barrier} is not available, our internal implementation will be compiled into the Gnuastro library and the definitions and declarations below will be usable in your code with @code{#include <gnuastro/threads.h>}. @deffn Type pthread_barrierattr_t Type to specify the attributes of a POSIX threads barrier. @end deffn @deffn Type pthread_barrier_t Structure defining the POSIX threads barrier. @end deffn @deftypefun int pthread_barrier_init (pthread_barrier_t @code{*b}, pthread_barrierattr_t @code{*attr}, unsigned int @code{limit}) Initialize the barrier @code{b}, with the attributes @code{attr} and total @code{limit} (a number of) threads that must wait behind it. This function must be called before spinning off threads. @end deftypefun @deftypefun int pthread_barrier_wait (pthread_barrier_t @code{*b}) This function is called within each thread, just before it is ready to return. Once a thread's function hits this, it will ``wait'' until all the other functions are also finished. @end deftypefun @deftypefun int pthread_barrier_destroy (pthread_barrier_t @code{*b}) Destroy all the information in the barrier structure. This should be called by the function that spun-off the threads after all the threads have finished. @cartouche @noindent @strong{Destroy a barrier before re-using it:} It is very important to destroy the barrier before (possibly) reusing it. This destroy function not only destroys the internal structures, it also waits (in 1 microsecond intervals, so you will not notice!) until all the threads do not need the barrier structure any more. If you immediately start spinning off new threads with a not-destroyed barrier, then the internal structure of the remaining threads will get mixed with the new ones and you will get very strange and apparently random errors that are extremely hard to debug. @end cartouche @end deftypefun @node Gnuastro's thread related functions, , Implementation of pthread_barrier, Multithreaded programming @subsubsection Gnuastro's thread related functions @cindex POSIX Threads The POSIX Threads functions offered in the C library are very low-level and offer a great range of control over the properties of the threads. So if you are interested in customizing your tools for complicated thread applications, it is strongly encouraged to get a nice familiarity with them. Some resources were introduced in @ref{Multithreaded programming}. However, in many cases used in astronomical data analysis, you do not need communication between threads and each target operation can be done independently. Since such operations are very common, Gnuastro provides the tools below to facilitate the creation and management of jobs without any particular knowledge of POSIX Threads for such operations. The most interesting high-level functions of this section are the @code{gal_threads_number} and @code{gal_threads_spin_off} that identify the number of threads on the system and spin-off threads. You can see a demonstration of using these functions in @ref{Library demo - multi-threaded operation}. @deftp {C @code{struct}} gal_threads_params Structure keeping the parameters of each thread. When each thread is created, a pointer to this structure is passed to it. The @code{params} element can be the pointer to a structure defined by the user which contains all the necessary parameters to pass onto the worker function. The rest of the elements within this structure are set internally by @code{gal_threads_spin_off} and are relevant to the worker function. @example struct gal_threads_params @{ size_t id; /* Id of this thread. */ void *params; /* User-identified pointer. */ size_t *indexs; /* Target indices given to this thread. */ pthread_barrier_t *b; /* Barrier for all threads. */ @}; @end example @end deftp @deftypefun size_t gal_threads_number () Return the number of threads that the operating system has available for your program. This number is usually fixed for a single machine and does not change. So this function is useful when you want to run your program on different machines (with different CPUs). @end deftypefun @deftypefun void gal_threads_spin_off (void @code{*(*worker)(void *)}, void @code{*caller_params}, size_t @code{numactions}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Distribute @code{numactions} jobs between @code{numthreads} threads and spin-off each thread by calling the @code{worker} function. The @code{caller_params} pointer will also be passed to @code{worker} as part of the @code{gal_threads_params} structure. For a fully working example of this function, please see @ref{Library demo - multi-threaded operation}. If there are many jobs (millions or billions) to organize, memory issues may become important. With @code{minmapsize} you can specify the minimum byte-size to allocate the necessary space in a memory-mapped file or alternatively in RAM. If @code{quietmmap} is non-zero, then a warning will be printed upon creating a memory-mapped file. For more on Gnuastro's memory management, see @ref{Memory management}. @end deftypefun @deftypefun void gal_threads_attr_barrier_init (pthread_attr_t @code{*attr}, pthread_barrier_t @code{*b}, size_t @code{limit}) @cindex Detached threads This is a low-level function in case you do not want to use @code{gal_threads_spin_off}. It will initialize the general thread attribute @code{attr} and the barrier @code{b} with @code{limit} threads to wait behind the barrier. For maximum efficiency, the threads initialized with this function will be detached. Therefore no communication is possible between these threads and in particular @code{pthread_join} will not work on these threads. You have to use the barrier constructs to wait for all threads to finish. @end deftypefun @deftypefun {char *} gal_threads_dist_in_threads (size_t @code{numactions}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}, size_t @code{**indexs}, size_t @code{*icols}) This is a low-level function in case you do not want to use @code{gal_threads_spin_off}. The job of this function is to distribute @code{numactions} jobs/actions in @code{numthreads} threads. To do this, it will assign each job an ID, ranging from 0 to @code{numactions}-1. The output is the allocated @code{*indexs} array and the @code{*icols} number. In memory, it is just a simple 1D array that has @code{numthreads} @mymath{\times} @code{*icols} elements. But you can visualize it as a 2D array with @code{numthreads} rows and @code{*icols} columns. For more on the logic of the distribution, see below. @cindex RAM @cindex Memory management When you have millions/billions of jobs to distribute, @code{indexs} will become very large. For memory management (when to use a memory-mapped file, and when to use RAM), you need to specify the @code{minmapsize} and @code{quietmmap} arguments. For more on memory management, see @ref{Memory management}. In general, if your distributed jobs will not be on the scale of billions (and you want everything to always be written in RAM), just set @code{minmapsize=-1} and @code{quietmmap=1}. When @code{indexs} is actually in a memory-mapped file, this function will return a string containing the name of the file (that you can later give to @code{gal_pointer_mmap_free} to free/delete). When @code{indexs} is in RAM, this function will return a @code{NULL} pointer. So after you are finished with @code{indexs}, you can free it like this: @example char *mmapname; int quietmmap=1; size_t *indexs, thrdcols; size_t numactions=5000, minmapsize=-1; size_t numthreads=gal_threads_number(); /* Distribute the jobs. */ mmapname=gal_threads_dist_in_threads(numactions, numthreads, minmapsize, quietmmap, &indexs, &thrdcols); /* Do any processing you want... */ /* Free the 'indexs' array. */ if(mmapname) gal_pointer_mmap_free(&mmapname, quietmmap); else free(indexs); @end example Here is a brief description of the reasoning behind the @code{indexs} array and how the jobs are distributed. Let's assume you have @mymath{A} actions (where there is only one function and the input values differ for each action) and @mymath{T} threads available to the system with @mymath{A>T} (common values for these two would be @mymath{A>1000} and @mymath{T<10}). Spinning off a thread is not a cheap job and requires a significant number of CPU cycles. Therefore, creating @mymath{A} threads is not the best way to address such a problem. The most efficient way to manage the actions is such that only @mymath{T} threads are created, and each thread works on a list of actions identified for it in series (one after the other). This way your CPU will get all the actions done with minimal overhead. The purpose of this function is to do what we explained above: each row in the @code{indexs} array contains the indices of actions which must be done by one thread (so it has @code{numthreads} rows with @code{*icols} columns). However, when using @code{indexs}, you do not have to know the number of columns. It is guaranteed that all the rows finish with @code{GAL_BLANK_SIZE_T} (see @ref{Library blank values}). The @code{GAL_BLANK_SIZE_T} macro plays a role very similar to a string's @code{\0}: every row finishes with this macro, so can easily stop parsing the indexes in the row as soon as you confront @code{GAL_BLANK_SIZE_T}. For some real examples, please see the example program in @file{tests/lib/multithread.c} for a demonstration. @end deftypefun @node Library data types, Pointers, Multithreaded programming, Gnuastro library @subsection Library data types (@file{type.h}) Data in astronomy can have many types, numeric (numbers) and strings (names, identifiers). The former can also be divided into integers and floats, see @ref{Numeric data types} for a thorough discussion of the different numeric data types and which one is useful for different contexts. To deal with the very large diversity of types that are available (and used in different contexts), in Gnuastro each type is identified with global integer variable with a fixed name, this variable is then passed onto functions that can work on any type or is stored in Gnuastro's @ref{Generic data container} as one piece of meta-data. The actual values within these integer constants is irrelevant and you should never rely on them. When you need to check, explicitly use the named variable in the table below. If you want to check with more than one type, you can use C's @code{switch} statement. Since Gnuastro heavily deals with file input-output, the types it defines are fixed width types, these types are portable to all systems and are defined in the standard C header @file{stdint.h}. You do not need to include this header, it is included by any Gnuastro header that deals with the different types. However, the most commonly used types in a C (or C++) program (for example, @code{int} or @code{long}) are not defined by their exact width (storage size), but by their minimum storage. So for example, on some systems, @code{int} may be 2 bytes (16-bits, the minimum required by the standard) and on others it may be 4 bytes (32-bits, common in modern systems). With every type, a unique ``blank'' value (or place-holder showing the absence of data) can be defined. Please see @ref{Library blank values} for constants that Gnuastro recognizes as a blank value for each type. See @ref{Numeric data types} for more explanation on the limits and particular aspects of each type. @deffn {Global integer} GAL_TYPE_INVALID This is just a place-holder to specifically mark that no type has been set. @end deffn @deffn {Global integer} GAL_TYPE_BIT Identifier for a bit-stream. Currently no program in Gnuastro works directly on bits, but features will be added in the future. @end deffn @deffn {Global integer} GAL_TYPE_UINT8 Identifier for an unsigned, 8-bit integer type: @code{uint8_t} (from @file{stdint.h}), or an @code{unsigned char} in most modern systems. @end deffn @deffn {Global integer} GAL_TYPE_INT8 Identifier for a signed, 8-bit integer type: @code{int8_t} (from @file{stdint.h}), or an @code{signed char} in most modern systems. @end deffn @deffn {Global integer} GAL_TYPE_UINT16 Identifier for an unsigned, 16-bit integer type: @code{uint16_t} (from @file{stdint.h}), or an @code{unsigned short} in most modern systems. @end deffn @deffn {Global integer} GAL_TYPE_INT16 Identifier for a signed, 16-bit integer type: @code{int16_t} (from @file{stdint.h}), or a @code{short} in most modern systems. @end deffn @deffn {Global integer} GAL_TYPE_UINT32 Identifier for an unsigned, 32-bit integer type: @code{uint32_t} (from @file{stdint.h}), or an @code{unsigned int} in most modern systems. @end deffn @deffn {Global integer} GAL_TYPE_INT32 Identifier for a signed, 32-bit integer type: @code{int32_t} (from @file{stdint.h}), or an @code{int} in most modern systems. @end deffn @deffn {Global integer} GAL_TYPE_UINT64 Identifier for an unsigned, 64-bit integer type: @code{uint64_t} (from @file{stdint.h}), or an @code{unsigned long} in most modern 64-bit systems. @end deffn @deffn {Global integer} GAL_TYPE_INT64 Identifier for a signed, 64-bit integer type: @code{int64_t} (from @file{stdint.h}), or an @code{long} in most modern 64-bit systems. @end deffn @deffn {Global integer} GAL_TYPE_INT Identifier for a @code{int} type. This is just an alias to @code{int16}, or @code{int32} types, depending on the system. @end deffn @deffn {Global integer} GAL_TYPE_UINT Identifier for a @code{unsigned int} type. This is just an alias to @code{uint16}, or @code{uint32} types, depending on the system. @end deffn @deffn {Global integer} GAL_TYPE_ULONG Identifier for a @code{unsigned long} type. This is just an alias to @code{uint32}, or @code{uint64} types for 32-bit, or 64-bit systems respectively. @end deffn @deffn {Global integer} GAL_TYPE_LONG Identifier for a @code{long} type. This is just an alias to @code{int32}, or @code{int64} types for 32-bit, or 64-bit systems respectively. @end deffn @deffn {Global integer} GAL_TYPE_SIZE_T Identifier for a @code{size_t} type. This is just an alias to @code{uint32}, or @code{uint64} types for 32-bit, or 64-bit systems respectively. @end deffn @deffn {Global integer} GAL_TYPE_FLOAT32 Identifier for a 32-bit single precision floating point type or @code{float} in C. @end deffn @deffn {Global integer} GAL_TYPE_FLOAT64 Identifier for a 64-bit double precision floating point type or @code{double} in C. @end deffn @deffn {Global integer} GAL_TYPE_COMPLEX32 Identifier for a complex number composed of two @code{float} types. Note that the complex type is not yet fully implemented in all Gnuastro's programs. @end deffn @deffn {Global integer} GAL_TYPE_COMPLEX64 Identifier for a complex number composed of two @code{double} types. Note that the complex type is not yet fully implemented in all Gnuastro's programs. @end deffn @deffn {Global integer} GAL_TYPE_STRING Identifier for a string of characters (@code{char *}). @end deffn @deffn {Global integer} GAL_TYPE_STRLL Identifier for a linked list of string of characters (@code{gal_list_str_t}, see @ref{List of strings}). @end deffn @noindent The functions below are defined to make working with the integer constants above easier. In the functions below, the constants above can be used for the @code{type} input argument. @deftypefun size_t gal_type_sizeof (uint8_t @code{type}) Return the number of bytes occupied by @code{type}. Internally, this function uses C's @code{sizeof} operator to measure the size of each type. For strings, this function will return the size of @code{char *}. @end deftypefun @deftypefun {char *} gal_type_name (uint8_t @code{type}, int @code{long_name}) Return a string literal that contains the name of @code{type}. It can return both short and long formats of the type names (for example, @code{f32} and @code{float32}). If @code{long_name} is non-zero, the long format will be returned, otherwise the short name will be returned. The output string is statically allocated, so it should not be freed. This function is the inverse of the @code{gal_type_from_name} function. For the full list of names/strings that this function will return, see @ref{Numeric data types}. @end deftypefun @deftypefun uint8_t gal_type_from_name (char @code{*str}) Return the Gnuastro integer constant that corresponds to the string @code{str}. This function is the inverse of the @code{gal_type_name} function and accepts both the short and long formats of each type. For the full list of names/strings that this function will return, see @ref{Numeric data types}. @end deftypefun @deftypefun void gal_type_min (uint8_t @code{type}, void @code{*in}) Put the minimum possible value of @code{type} in the space pointed to by @code{in}. Since the value can have any type, this function does not return anything, it assumes the space for the given type is available to @code{in} and writes the value there. Here is one example @example int32_t min; gal_type_min(GAL_TYPE_INT32, &min); @end example @noindent Note: Do not use the minimum value for a blank value of a general (initially unknown) type, please use the constants/functions provided in @ref{Library blank values} for the definition and usage of blank values. @end deftypefun @deftypefun void gal_type_max (uint8_t @code{type}, void @code{*in}) Put the maximum possible value of @code{type} in the space pointed to by @code{in}. Since the value can have any type, this function does not return anything, it assumes the space for the given type is available to @code{in} and writes the value there. Here is one example @example uint16_t max; gal_type_max(GAL_TYPE_INT16, &max); @end example @noindent Note: Do not use the maximum value for a blank value of a general (initially unknown) type, please use the constants/functions provided in @ref{Library blank values} for the definition and usage of blank values. @end deftypefun @deftypefun int gal_type_is_int (uint8_t @code{type}) Return 1 if the type is an integer (any width and any sign). @end deftypefun @deftypefun int gal_type_is_list (uint8_t @code{type}) Return 1 if the type is a linked list and zero otherwise. @end deftypefun @deftypefun int gal_type_out (int @code{first_type}, int @code{second_type}) Return the larger of the two given types which can be used for the type of the output of an operation involving the two input types. @end deftypefun @deftypefun {char *} gal_type_bit_string (void @code{*in}, size_t @code{size}) Return the bit-string in the @code{size} bytes that @code{in} points to. The string is dynamically allocated and must be freed afterwards. You can use it to inspect the bits within one region of memory. Here is one short example: @example int32_t a=2017; char *bitstr=gal_type_bit_string(&a, 4); printf("%d: %s (%X)\n", a, bitstr, a); free(bitstr); @end example @noindent which will produce: @example 2017: 11100001000001110000000000000000 (7E1) @end example As the example above shows, the bit-string is not the most efficient way to inspect bits. If you are familiar with hexadecimal notation, it is much more compact, see @url{https://en.wikipedia.org/wiki/Hexadecimal}. You can use @code{printf}'s @code{%x} or @code{%X} to print integers in hexadecimal format. @end deftypefun @deftypefun {char *} gal_type_to_string (void @code{*ptr}, uint8_t @code{type}, int @code{quote_if_str_has_space}); Read the contents of the memory that @code{ptr} points to (assuming it has type @code{type} and print it into an allocated string which is returned. If the memory is a string of characters and @code{quote_if_str_has_space} is non-zero, the output string will have double-quotes around it if it contains space characters. Also, note that in this case, @code{ptr} must be a pointer to an array of characters (or @code{char **}), as in the example below (which will put @code{"sample string"} into @code{out}): @example char *out, *string="sample string" out = gal_type_to_string(&string, GAL_TYPE_STRING, 1); @end example @end deftypefun @deftypefun int gal_type_from_string (void @code{**out}, char @code{*string}, uint8_t @code{type}) Read a string as a given data type and put a pointer to it in @code{*out}. When @code{*out!=NULL}, then it is assumed to be already allocated and the value will be simply put there. If @code{*out==NULL}, then space will be allocated for the given type and the string will be read into that type. Note that when we are dealing with a string type, @code{*out} should be interpreted as @code{char **} (one element in an array of pointers to different strings). In other words, @code{out} should be @code{char ***}. This function can be used to fill in arrays of numbers from strings (in an already allocated data structure), or add nodes to a linked list (if the type is a list type). For an array, you have to pass the pointer to the @code{i}th element where you want the value to be stored, for example, @code{&(array[i])}. If the string was successfully parsed to the requested type, this function will return a @code{0} (zero), otherwise it will return @code{1} (one). This output format will help you check the status of the conversion in a code like the example below where we will try reading a string as a single precision floating point number. @example float out; void *outptr=&out; if( gal_type_from_string(&outptr, string, GAL_TYPE_FLOAT32) ) @{ fprintf(stderr, "%s could not be read as float32\n", string); exit(EXIT_FAILURE); @} @end example @noindent When you need to read many numbers into an array, @code{out} would be an array, and you can simply increment @code{outptr=out+i} (where you increment @code{i}). @end deftypefun @deftypefun {void *} gal_type_string_to_number (char @code{*string}, uint8_t @code{*type}) Read @code{string} into smallest type that can host the number, the allocated space for the number will be returned and the type of the number will be put into the memory that @code{type} points to. If @code{string} could not be read as a number, this function will return @code{NULL}. This function first calls the C library's @code{strtod} function to read @code{string} as a double-precision floating point number. When successful, it will check the value to put it in the smallest numerical data type that can handle it; for example, @code{120} and @code{50000} will be read as a signed 8-bit integer and unsigned 16-bit integer types. When reading as an integer, the C library's @code{strtol} function is used (in base-10) to parse the string again. This re-parsing as an integer is necessary because integers with many digits (for example, the Unix epoch seconds) will not be accurately stored as a floating point and we cannot use the result of @code{strtod}. When @code{string} is successfully parsed as a number @emph{and} there is @code{.} in @code{string}, it will force the number into floating point types. For example, @code{"5"} is read as an integer, while @code{"5."} or @code{"5.0"}, or @code{"5.00"} will be read as a floating point (single-precision). For floating point types, this function will count the number of significant digits and determine if the given string is single or double precision as described in @ref{Numeric data types}. For integers, negative numbers will always be placed in signed types (as expected). If a positive integer falls below the maximum of a signed type of a certain width, it will be signed (for example, @code{10} and @code{150} will be defined as a signed and unsigned 8-bit integer respectively). In other words, even though @code{10} can be unsigned, it will be read as a signed 8-bit integer. This is done to respect the C implicit type conversion in binary operators, where signed integers will be interpreted as unsigned, when the other operand is an unsigned integer of the same width. For example, see the short program below. It will print @code{-50 is larger than 100000} (which is wrong!). This happens because when a negative number is parsed as an unsigned, the value is effectively subtracted from the maximum and @mymath{4294967295-50} is indeed larger than 100000 (recall that @mymath{4294967295} is the largest unsigned 32-bit integer, see @ref{Numeric data types}). @example #include <stdio.h> #include <stdlib.h> #include <stdint.h> int main(void) @{ int32_t a=-50; uint32_t b=100000; printf("%d is %s than %d\n", a, a>b ? "larger" : "less or equal", b); return 0; @} @end example However, if we read 100000 as a signed 32-bit integer, there will not be any problem and the printed sentence will be logically correct (for someone who does not know anything about numeric data types: users of your programs). For the advantages of integers, see @ref{Integer benefits and pitfalls}. @end deftypefun @node Pointers, Library blank values, Library data types, Gnuastro library @subsection Pointers (@file{pointer.h}) @cindex Pointers Pointers play an important role in the C programming language. As the name suggests, they @emph{point} to a byte in memory (like an address in a city). The C programming language gives you complete freedom in how to use the byte (and the bytes that follow it). Pointers are thus a very powerful feature of C. However, as the saying goes: ``With great power comes great responsibility'', so they must be approached with care. The functions in this header are not very complex, they are just wrappers over some basic pointer functionality regarding pointer arithmetic and allocation (in memory or HDD/SSD). @deftypefun {void *} gal_pointer_increment (void @code{*pointer}, size_t @code{increment}, uint8_t @code{type}) Return a pointer to an element that is @code{increment} elements ahead of @code{pointer}, assuming each element has type of @code{type}. For the type codes, see @ref{Library data types}. When working with the @code{array} elements of @code{gal_data_t}, we are actually dealing with @code{void *} pointers. However, pointer arithmetic does not apply to @code{void *}, because the system does not know how many bytes there are in each element to increment the pointer respectively. This function will use the given @code{type} to calculate where the incremented element is located in memory. @end deftypefun @deftypefun size_t gal_pointer_num_between (void @code{*earlier}, void @code{*later}, uint8_t @code{type}) Return the number of elements (in the given @code{type}) between @code{earlier} and @code{later}. For the type codes, see @ref{Library data types}). @end deftypefun @deftypefun {void *} gal_pointer_allocate (uint8_t @code{type}, size_t @code{size}, int @code{clear}, const char @code{*funcname}, const char @code{*varname}) Allocate an array of type @code{type} with @code{size} elements in RAM (for the type codes, see @ref{Library data types}). If @code{clear!=0}, then the allocated space is set to zero (cleared). This is effectively just a wrapper around C's @code{malloc} or @code{calloc} functions but takes Gnuastro's integer type codes and will also abort with a clear error if there the allocation was not successful. The number of allocated bytes is the value given to @code{size} that is multiplied by the returned value of @code{gal_type_sizeof} for the given type. So if you want to allocate space for an array of strings you should pass the type @code{GAL_TYPE_STRING}. Otherwise, if you just want space for one string (for example, 6 bytes for @code{hello}, including the string-termination character), you should set the type @code{GAL_TYPE_UINT8}. @cindex C99 When space cannot be allocated, this function will abort the program with a message containing the reason for the failure. @code{funcname} (name of the function calling this function) and @code{varname} (name of variable that needs this space) will be used in this error message if they are not @code{NULL}. In most modern compilers, you can use the generic @code{__func__} variable for @code{funcname}. In this way, you do not have to manually copy and paste the function name or worry about it changing later (@code{__func__} was standardized in C99). To use this function effectively and avoid memory leaks, make sure to free the allocated array after you are done with it. Also, be mindful of any functions that make use of this function as they should also free any allocated arrays to maintain memory management and prevent issues with the system. @end deftypefun @deftypefun {void *} gal_pointer_allocate_ram_or_mmap (uint8_t @code{type}, size_t @code{size}, int @code{clear}, size_t @code{minmapsize}, char @code{**mmapname}, int @code{quietmmap}, const char @code{*funcname}, const char @code{*varname}) Allocate the given space either in RAM or in a memory-mapped file. This function is just a high-level wrapper to @code{gal_pointer_allocate} (to allocate in RAM) or @code{gal_pointer_mmap_allocate} (to use a memory-mapped file). For more on memory management in Gnuastro, please see @ref{Memory management}. The various arguments are more fully explained in the two functions above. @end deftypefun @deftypefun {void *} gal_pointer_mmap_allocate (size_t @code{size}, uint8_t @code{type}, int @code{clear}, char @code{**mmapname}) Allocate the necessary space to keep @code{size} elements of type @code{type} in HDD/SSD (a file, not in RAM). For the type codes, see @ref{Library data types}. If @code{clear!=0}, then the allocated space will also be cleared. The allocation is done using C's @code{mmap} function. The name of the file containing the allocated space is an allocated string that will be put in @code{*mmapname}. Note that the kernel does not allow an infinite number of memory mappings to files. So it is not recommended to use this function with every allocation. The best-case scenario to use this function is for arrays that are very large and can fill up the RAM. Keep the smaller arrays in RAM, which is faster and can have a (theoretically) unlimited number of allocations. When you are done with the dataset and do not need it anymore, do not use @code{free} (the dataset is not in RAM). Just delete the file (and the allocated space for the filename) with the commands below, or simply use @code{gal_pointer_mmap_free}. @example remove(mmapname); free(mmapname); @end example @end deftypefun @deftypefun void gal_pointer_mmap_free (char @code{**mmapname}, int @code{quietmmap}) ``Free'' (actually delete) the memory-mapped file that is named @code{*mmapname}, then free the string. If @code{quietmmap} is non-zero, then a warning will be printed for the user to know that the given file has been deleted. @end deftypefun @node Library blank values, Library data container, Pointers, Gnuastro library @subsection Library blank values (@file{blank.h}) When the position of an element in a dataset is important (for example, a pixel in an image), a place-holder is necessary for the element if we do not have a value to fill it with (for example, the CCD cannot read those pixels). We cannot simply shift all the other pixels to fill in the one we have no value for. In other cases, it often occurs that the field of sky that you are studying is not a clean rectangle to nicely fit into the boundaries of an image. You need a way to separate the pixels outside your scientific field from those inside it. Blank values act as these place holders in a dataset. They have no usable value but they have a position. @cindex NaN Every type needs a corresponding blank value (see @ref{Numeric data types} and @ref{Library data types}). Floating point types have a unique value identified by IEEE known as Not-a-Number (or NaN) which is a unique value that is recognized by the compiler. However, integer and string types do not have any standard value. For integers, in Gnuastro we take an extremum of the given type: for signed types (that allow negatives), the minimum possible value is used as blank and for unsigned types (that only accept positives), the maximum possible value is used. To be generic and easy to read/write we define a macro for these blank values and strongly encourage you only use these, and never make any assumption on the value of a type's blank value. @cindex NaN The IEEE NaN blank value type is defined to fail on any comparison, so if you are dealing with floating point types, you cannot use equality (a NaN will @emph{not} be equal to a NaN). If you know your dataset is floating point, you can use the @code{isnan} function in C's @file{math.h} header. For a description of numeric data types see @ref{Numeric data types}. For the constants identifying integers, please see @ref{Library data types}. @deffn {Global integer} GAL_BLANK_UINT8 Blank value for an unsigned, 8-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_INT8 Blank value for a signed, 8-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_UINT16 Blank value for an unsigned, 16-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_INT16 Blank value for a signed, 16-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_UINT32 Blank value for an unsigned, 32-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_INT32 Blank value for a signed, 32-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_UINT64 Blank value for an unsigned, 64-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_INT64 Blank value for a signed, 64-bit integer. @end deffn @deffn {Global integer} GAL_BLANK_INT Blank value for @code{int} type (@code{int16_t} or @code{int32_t} depending on the system. @end deffn @deffn {Global integer} GAL_BLANK_UINT Blank value for @code{int} type (@code{int16_t} or @code{int32_t} depending on the system. @end deffn @deffn {Global integer} GAL_BLANK_LONG Blank value for @code{long} type (@code{int32_t} or @code{int64_t} in 32-bit or 64-bit systems). @end deffn @deffn {Global integer} GAL_BLANK_ULONG Blank value for @code{unsigned long} type (@code{uint32_t} or @code{uint64_t} in 32-bit or 64-bit systems). @end deffn @deffn {Global integer} GAL_BLANK_SIZE_T Blank value for @code{size_t} type (@code{uint32_t} or @code{uint64_t} in 32-bit or 64-bit systems). @end deffn @cindex NaN @deffn {Global integer} GAL_BLANK_FLOAT32 Blank value for a single precision, 32-bit floating point type (IEEE NaN value). @end deffn @cindex NaN @deffn {Global integer} GAL_BLANK_FLOAT64 Blank value for a double precision, 64-bit floating point type (IEEE NaN value). @end deffn @deffn {Global integer} GAL_BLANK_STRING Blank value for string types (this is itself a string, it is not the @code{NULL} pointer). @end deffn @noindent The functions below can be used to work with blank pixels. @deftypefun void gal_blank_write (void @code{*pointer}, uint8_t @code{type}) Write the blank value for the given @code{type} into the space that @code{pointer} points to. This can be used when the space is already allocated (for example, one element in an array or a statically allocated variable). @end deftypefun @deftypefun {void *} gal_blank_alloc_write (uint8_t @code{type}) Allocate the space required to keep the blank for the given data type @code{type}, write the blank value into it and return the pointer to it. @end deftypefun @deftypefun void gal_blank_initialize (gal_data_t @code{*input}) Initialize all the elements in the @code{input} dataset to the blank value that corresponds to its type. If @code{input} is not a string, and is a tile over a larger dataset, only the region that the tile covers will be set to blank. For strings, the full dataset will be initialized. @end deftypefun @deftypefun void gal_blank_initialize_array (void @code{*array}, size_t @code{size}, uint8_t @code{type}) Initialize all the elements in the @code{array} to the blank value that corresponds to its type (identified with @code{type}), assuming the array has @code{size} elements. @end deftypefun @deftypefun {char *} gal_blank_as_string (uint8_t @code{type}, int @code{width}) Write the blank value for the given data type @code{type} into a string and return it. The space for the string is dynamically allocated so it must be freed after you are done with it. If @code{width!=0}, then the final string will be padded with white space characters to have the requested width if it is smaller. @end deftypefun @deftypefun int gal_blank_is (void @code{*pointer}, uint8_t @code{type}) Return 1 if the contents of @code{pointer} (assuming a type of @code{type}) is blank. Otherwise, return 0. Note that this function only works on one element of the given type. So if @code{pointer} is an array, only its first element will be checked. Therefore for strings, the type of @code{pointer} is assumed to be @code{char *}. To check if an array/dataset has blank elements or to find which elements in an array are blank, you can use @code{gal_blank_present} or @code{gal_blank_flag} respectively (described below). @end deftypefun @deftypefun int gal_blank_present (gal_data_t @code{*input}, int @code{updateflag}) Return 1 if the dataset has a blank value and zero if it does not. Before checking the dataset, this function will look at @code{input}'s flags. If the @code{GAL_DATA_FLAG_BLANK_CH} bit of @code{input->flag} is on, this function will not do any check and will just use the information in the flags. This can greatly speed up processing when a dataset needs to be checked multiple times. When the dataset's flags were not used and @code{updateflags} is non-zero, this function will set the flags appropriately to avoid having to re-check the dataset in future calls. When @code{updateflags==0}, this function has no side-effects on the dataset: it will not toggle the flags. If you want to re-check a dataset with the blank-value-check flag already set (for example, if you have made changes to it), then explicitly set the @code{GAL_DATA_FLAG_BLANK_CH} bit to zero before calling this function. When there are no other flags, you can just set the flags to zero (@code{input->flag=0}), otherwise you can use this expression: @example input->flag &= ~GAL_DATA_FLAG_BLANK_CH; @end example @end deftypefun @deftypefun size_t gal_blank_number (gal_data_t @code{*input}, int @code{updateflag}) Return the number of blank elements in @code{input}. If @code{updateflag!=0}, then the dataset blank keyword flags will be updated. See the description of @code{gal_blank_present} (above) for more on these flags. If @code{input==NULL}, then this function will return @code{GAL_BLANK_SIZE_T}. @end deftypefun @deftypefun {gal_data_t *} gal_blank_flag (gal_data_t @code{*input}) Return a ``flag'' dataset with the same size as the input, but with an @code{uint8_t} type that has a value of 1 for data elements that are blank and 0 for those that are not. @end deftypefun @deftypefun {gal_data_t *} gal_blank_flag_not (gal_data_t @code{*input}) Return a ``flag'' dataset with the same size as the input, but with an @code{uint8_t} type that has a value of 1 for data elements that are @emph{not} blank and 0 for those that are blank. @end deftypefun @deftypefun {size_t *} gal_blank_not_minmax_coords (gal_data_t @code{*input}) Find the minimum and maximum coordinates of the non-blank regions within the input dataset. The coordinates are in C order: starting from 0, and with the slowest dimension being first. The output is an allocated array (that should be freed later) with @mymath{2\times N} elements; where @mymath{N} is the number of dimensions. The first two elements contain the minimum and maximum of regions containing non-blank elements along the 0-th dimension (the slowest), the second two elements contain the next dimension's extrema; and so on. @end deftypefun @deftypefun {gal_data_t *} gal_blank_trim (gal_data_t @code{*input}, int @code{inplace}) Trim all the outer layers of blank values from the input dataset. For example in the 2D image, ``layers'' would correspond to columns or rows that are fully blank and touching the edge of the image. For a more complete description, see the description of the @code{trim} operator in @ref{Dimensionality changing operators}. @end deftypefun @deftypefun void gal_blank_flag_apply (gal_data_t @code{*input}, gal_data_t @code{*flag}) Set all non-zero and non-blank elements of @code{flag} to blank in @code{input}. @code{flag} has to have an unsigned 8-bit type and be the same size as @code{input}. @end deftypefun @deftypefun void gal_blank_flag_remove (gal_data_t @code{*input}, gal_data_t @code{*flag}) Remove all elements within @code{input} that are flagged, convert it to a 1D dataset and adjust the size properly (the number of non-flagged elements). In practice this function does not@code{realloc} the input array (see @code{gal_blank_remove_realloc} for shrinking/re-allocating also), it just shifts the blank elements to the end and adjusts the size elements of the @code{gal_data_t}, see @ref{Generic data container}. Note that elements that are blank, but not flagged will not be removed. This function will only remove flagged elements. If all the elements were flagged, then @code{input->size} will be zero. This is thus a good parameter to check after calling this function to see if there actually were any non-flagged elements in the input or not and take the appropriate measure. This check is highly recommended because it will avoid strange bugs in later steps. @end deftypefun @deftypefun void gal_blank_remove (gal_data_t @code{*input}) Remove blank elements from a dataset, convert it to a 1D dataset, adjust the size properly (the number of non-blank elements), and toggle the blank-value-related bit-flags. In practice this function does not@code{realloc} the input array (see @code{gal_blank_remove_realloc} for shrinking/re-allocating also), it just shifts the blank elements to the end and adjusts the size elements of the @code{gal_data_t}, see @ref{Generic data container}. If all the elements were blank, then @code{input->size} will be zero. This is thus a good parameter to check after calling this function to see if there actually were any non-blank elements in the input or not and take the appropriate measure. This check is highly recommended because it will avoid strange bugs in later steps. @end deftypefun @deftypefun void gal_blank_remove_realloc (gal_data_t @code{*input}) Similar to @code{gal_blank_remove}, but also shrinks/re-allocates the dataset's allocated memory. @end deftypefun @deftypefun {gal_data_t *} gal_blank_remove_rows (gal_data_t @code{*columns}, gal_list_sizet_t @code{*column_indexs}, int @code{onlydim0}) Remove (in place) any row that has at least one blank value in any of the input columns and return a ``flag'' dataset (that should be freed later). The input @code{columns} is a list of @code{gal_data_t}s (see @ref{List of gal_data_t}). When @code{onlydim0!=0} the vector columns (with 2 dimensions) will not be checked for the presence of blank values. After this function, all the elements in @code{columns} will still have the same size as each other, but if any of the searched columns has blank elements, all their sizes will decrease together. The returned flag dataset has the same size as the original input dataset, with a type of @code{uint8_t}. Every row that has been removed from the original dataset has a value of 1, and the rest have a value of 0. When @code{column_indexs!=NULL}, only the columns whose index (counting from zero) is in @code{column_indexs} will be used to check for blank values (see @ref{List of size_t}. Therefore, if you want to check all columns, just set this to @code{NULL}. In any case (no matter which columns are checked for blanks), the selected rows from all columns will be removed. @end deftypefun @node Library data container, Dimensions, Library blank values, Gnuastro library @subsection Data container (@file{data.h}) Astronomical datasets have various dimensions, for example, 1D spectra or table columns, 2D images, or 3D Integral field data cubes. Datasets can also have various numeric data types, depending on the operation/purpose, for example, processed images are commonly stored in floating point format, but their mask images are integers (allowing bit-wise flags to identify certain classes of pixels to keep or mask, see @ref{Numeric data types}). Certain other information about a dataset are also commonly necessary, for example, the units of the dataset, the name of the dataset and some comments. To deal with any generic dataset, Gnuastro defines the @code{gal_data_t} as input or output. @menu * Generic data container:: Definition of Gnuastro's generic container. * Dataset allocation:: Allocate, initialize and free a dataset. * Arrays of datasets:: Functions to help with array of datasets. * Copying datasets:: Functions to copy a dataset to a new one. @end menu @node Generic data container, Dataset allocation, Library data container, Library data container @subsubsection Generic data container (@code{gal_data_t}) To be able to deal with any dataset (various dimensions, numeric data types, units and higher-level structures), Gnuastro defines the @code{gal_data_t} type which is the input/output container of choice for many of Gnuastro library's functions. It is defined in @file{gnuastro/data.h}. If you will be using (`@code{# include}'ing) those libraries, you do not need to include this header explicitly, it is already included by any library header that uses @code{gal_data_t}. @deftp {Type (C @code{struct})} gal_data_t The main container for datasets in Gnuastro. It can host data of any dimensions, with any numeric data type. It is actually a structure, but @code{typedef}'d as a new type to avoid having to write the @code{struct} before any declaration. The actual structure is shown below which is followed by a description of each element. @example typedef struct gal_data_t @{ void *restrict array; /* Basic array information. */ uint8_t type; size_t ndim; size_t *dsize; size_t size; int quietmmap; char *mmapname; size_t minmapsize; int nwcs; /* WCS information. */ struct wcsprm *wcs; uint8_t flag; /* Content description. */ int status; char *name; char *unit; char *comment; int disp_fmt; /* For text printing. */ int disp_width; int disp_precision; struct gal_data_t *next; /* For higher-level datasets. */ struct gal_data_t *block; @} gal_data_t; @end example @end deftp @noindent The list below contains a description for each @code{gal_data_t} element. @cindex @code{void *} @table @code @item void *restrict array This is the pointer to the main array of the dataset containing the raw data (values). All the other elements in this data-structure are actually meta-data enabling us to use/understand the series of values in this array. It must allow data of any type (see @ref{Numeric data types}), so it is defined as a @code{void *} pointer. A @code{void *} array is not directly usable in C, so you have to cast it to proper type before using it, please see @ref{Library demo - reading a image} for a demonstration. @cindex @code{restrict} @cindex C: @code{restrict} The @code{restrict} keyword was formally introduced in C99 and is used to tell the compiler that at any moment only this pointer will modify what it points to (a pixel in an image for example)@footnote{Also see @url{https://en.wikipedia.org/wiki/Restrict}.}. This extra piece of information can greatly help in compiler optimizations and thus the running time of the program. But older compilers might not have this capability, so at @command{./configure} time, Gnuastro checks this feature and if the user's compiler does not support @code{restrict}, it will be removed from this definition. @cindex Data type @item uint8_t type A fixed code (integer) used to identify the type of data in @code{array} (see @ref{Numeric data types}). For the list of acceptable values to this variable, please see @ref{Library data types}. @item size_t ndim The dataset's number of dimensions. @cindex FORTRAN @cindex FITS standard @cindex Standard, FITS @item size_t *dsize The size of the dataset along each dimension. This is an array (with @code{ndim} elements), of positive integers in row-major order@footnote{Also see @url{https://en.wikipedia.org/wiki/Row-_and_column-major_order}.} (based on C). When a data file is read into memory with Gnuastro's libraries, this array is dynamically allocated based on the number of dimensions that the dataset has. It is important to remember that C's row-major ordering is the opposite of the FITS standard which is in column-major order: in the FITS standard the fastest dimension's size is specified by @code{NAXIS1}, and slower dimensions follow. The FITS standard was defined mainly based on the FORTRAN language which is the opposite of C's approach to multi-dimensional arrays (and also starts counting from 1 not 0). Hence if a FITS image has @code{NAXIS1==20} and @code{NAXIS2==50}, the @code{dsize} array must be filled with @code{dsize[0]==50} and @code{dsize[1]==20}. The fastest dimension is the one that is contiguous in memory: to increment by one along that dimension, just go to the next element in the array. As we go to slower dimensions, the number of memory cells we have to skip for an increment along that dimension becomes larger. @item size_t size The total number of elements in the dataset. This is actually a multiplication of all the values in the @code{dsize} array, so it is not an independent parameter. However, low-level operations with the dataset (irrespective of its dimensions) commonly need this number, so this element is designed to avoid calculating it every time. @item int quietmmap When this value is zero, and the dataset must not be allocated in RAM (see @code{mmapname} and @code{minmapsize} below), a warning will be printed to inform the user when the file is created and when it is deleted. The warning includes the filename, the size in bytes, and the fact that they can toggle this behavior through @code{--minmapsize} option in Gnuastro's programs. @item char *mmapname Name of file hosting the @code{mmap}'d contents of @code{array}. If the value of this variable is @code{NULL}, then the contents of @code{array} are actually stored in RAM, not in a file on the HDD/SSD. See the description of @code{minmapsize} below for more. If a file is used, it will be kept in the @file{gnuastro_mmap} directory of the running directory. Its name is randomly selected to allow multiple arrays at the same time, see description of @option{--minmapsize} in @ref{Processing options}. When @code{gal_data_free} is called the randomly named file will be deleted. @item size_t minmapsize The minimum size of an array (in bytes) to store the contents of @code{array} as a file (on the non-volatile HDD/SSD), not in RAM. This can be very useful for large datasets which can be very memory intensive and the user's RAM might not be sufficient to keep/process it. A random filename is assigned to the array which is available in the @code{mmapname} element of @code{gal_data_t} (above), see there for more. @code{minmapsize} is stored in each @code{gal_data_t}, so it can be passed on to subsequent/derived datasets. See the description of the @option{--minmapsize} option in @ref{Processing options} for more on using this value. @item nwcs The number of WCS coordinate representations (for WCSLIB). @item struct wcsprm *wcs The main WCSLIB structure keeping all the relevant information necessary for WCSLIB to do its processing and convert data-set positions into real-world positions. When it is given a @code{NULL} value, all possible WCS calculations/measurements will be ignored. @item uint8_t flag Bit-wise flags to describe general properties of the dataset. The number of bytes available in this flag is stored in the @code{GAL_DATA_FLAG_SIZE} macro. Note that you should use bit-wise operators@footnote{See @url{https://en.wikipedia.org/wiki/Bitwise_operations_in_C}.} to check these flags. The currently recognized bits are stored in these macros: @table @code @cindex Blank data @item GAL_DATA_FLAG_BLANK_CH Marking that the dataset has been checked for blank values or not. When a dataset does not have any blank values, the @code{GAL_DATA_FLAG_HASBLANK} bit will be zero. But upon initialization, all bits also get a value of zero. Therefore, a checker needs this flag to see if the value in @code{GAL_DATA_FLAG_HASBLANK} is reliable (dataset has actually been parsed for a blank value) or not. Also, if it is necessary to re-check the presence of flags, you just have to set this flag to zero and call @code{gal_blank_present} for example, to parse the dataset and check for blank values. Note that for improved efficiency, when this flag is set, @code{gal_blank_present} will not actually parse the dataset, it will just use @code{GAL_DATA_FLAG_HASBLANK}. @item GAL_DATA_FLAG_HASBLANK This bit has a value of @code{1} when the given dataset has blank values. If this bit is @code{0} and @code{GAL_DATA_FLAG_BLANK_CH} is @code{1}, then the dataset has been checked and it did not have any blank values, so there is no more need for further checks. @item GAL_DATA_FLAG_SORT_CH Marking that the dataset is already checked for being sorted or not and thus that the possible @code{0} values in @code{GAL_DATA_FLAG_SORTED_I} and @code{GAL_DATA_FLAG_SORTED_D} are meaningful. The logic behind this is similar to that in @code{GAL_DATA_FLAG_BLANK_CH}. @item GAL_DATA_FLAG_SORTED_I This bit has a value of @code{1} when the given dataset is sorted in an increasing manner. If this bit is @code{0} and @code{GAL_DATA_FLAG_SORT_CH} is @code{1}, then the dataset has been checked and was not sorted (increasing), so there is no more need for further checks. @item GAL_DATA_FLAG_SORTED_D This bit has a value of @code{1} when the given dataset is sorted in a decreasing manner. If this bit is @code{0} and @code{GAL_DATA_FLAG_SORT_CH} is @code{1}, then the dataset has been checked and was not sorted (decreasing), so there is no more need for further checks. @end table The macro @code{GAL_DATA_FLAG_MAXFLAG} contains the largest internally used bit-position. Higher-level flags can be defined with the bit-wise shift operators using this macro to define internal flags for libraries/programs that depend on Gnuastro without causing any possible conflict with the internal flags discussed above or having to check the values manually on every release. @item int status A context-specific status values for this data-structure. This integer will not be set by Gnuastro's libraries. You can use it keep some additional information about the dataset (with integer constants) depending on your applications. @item char *name The name of the dataset. If the dataset is a multi-dimensional array and read/written as a FITS image, this will be the value in the @code{EXTNAME} FITS keyword. If the dataset is a one-dimensional table column, this will be the column name. If it is set to @code{NULL} (by default), it will be ignored. @item char *unit The units of the dataset (for example, @code{BUNIT} in the standard FITS keywords) that will be read from or written to files/tables along with the dataset. If it is set to @code{NULL} (by default), it will be ignored. @item char *comment Any further explanation about the dataset which will be written to any output file if present. @item disp_fmt Format to use for printing each element of the dataset to a plain text file, the acceptable values to this element are defined in @ref{Table input output}. Based on C's @code{printf} standards. @item disp_width Width of printing each element of the dataset to a plain text file, the acceptable values to this element are defined in @ref{Table input output}. Based on C's @code{printf} standards. @item disp_precision Precision of printing each element of the dataset to a plain text file, the acceptable values to this element are defined in @ref{Table input output}. Based on C's @code{printf} standards. @item gal_data_t *next Through this pointer, you can link a @code{gal_data_t} with other datasets related datasets, for example, the different columns in a dataset each have one @code{gal_data_t} associate with them and they are linked to each other using this element. There are several functions described below to facilitate using @code{gal_data_t} as a linked list. See @ref{Linked lists} for more on these wonderful high-level constructs. @item gal_data_t *block Pointer to the start of the complete allocated block of memory. When this pointer is not @code{NULL}, the dataset is not treated as a contiguous patch of memory. Rather, it is seen as covering only a portion of the larger patch of memory that @code{block} points to. See @ref{Tessellation library} for a more thorough explanation and functions to help work with tiles that are created from this pointer. @end table @node Dataset allocation, Arrays of datasets, Generic data container, Library data container @subsubsection Dataset allocation Gnuastro's main data container was defined in @ref{Generic data container}. The functions listed in this section describe the most basic operations on @code{gal_data_t}: those related to allocation and freeing. These functions are declared in @file{gnuastro/data.h} which is also visible from the function names (see @ref{Gnuastro library}). @deftypefun {gal_data_t *} gal_data_alloc (void @code{*array}, uint8_t @code{type}, size_t @code{ndim}, size_t @code{*dsize}, struct wcsprm @code{*wcs}, int @code{clear}, size_t @code{minmapsize}, int @code{quietmmap}, char @code{*name}, char @code{*unit}, char @code{*comment}) Dynamically allocate a @code{gal_data_t} and initialize it will all the given values. See the description of @code{gal_data_initialize} and @ref{Generic data container} for more information. This function will often be the most frequently used because it allocates the @code{gal_data_t} hosting all the values @emph{and} initializes it. Once you are done with the dataset, be sure to clean up all the allocated spaces with @code{gal_data_free}. @end deftypefun @deftypefun void gal_data_initialize (gal_data_t @code{*data}, void @code{*array}, uint8_t @code{type}, size_t @code{ndim}, size_t @code{*dsize}, struct wcsprm @code{*wcs}, int @code{clear}, size_t @code{minmapsize}, int @code{quietmmap}, char @code{*name}, char @code{*unit}, char @code{*comment}) Initialize the given data structure (@code{data}) with all the given values. Note that the raw input @code{gal_data_t} must already have been allocated before calling this function. For a description of each variable see @ref{Generic data container}. It will set the values and do the necessary allocations. If they are not @code{NULL}, all input arrays (@code{dsize}, @code{wcs}, @code{name}, @code{unit}, @code{comment}) are separately copied (allocated) by this function for usage in @code{data}, so you can safely use one value to initialize many datasets or use statically allocated variables in this function call. Once you are done with the dataset, you can free all the allocated spaces with @code{gal_data_free_contents}. If @code{array} is not @code{NULL}, it will be directly copied into @code{data->array} (based on the total number of elements calculated from @code{dsize}) and no new space will be allocated for the array of this dataset, this has many low-level advantages and can be used to work on regions of a dataset instead of the whole allocated array (see the description under @code{block} in @ref{Generic data container} for one example). If the given pointer is not the start of an allocated block of memory or it is used in multiple datasets, be sure to set it to @code{NULL} (with @code{data->array=NULL}) before cleaning up with @code{gal_data_free_contents}. @code{ndim} may be zero. In this case no allocation will occur, @code{data->array} and @code{data->dsize} will be set to @code{NULL} and @code{data->size} will be zero. However (when necessary) @code{dsize} must not have any zero values (a dimension of length zero is not defined). @end deftypefun @deftypefun {gal_data_t *} gal_data_alloc_empty (size_t @code{ndim}, size_t @code{minmapsize}, int @code{quietmmap}) Allocate an empty dataset with a certain number of dimensions, but no 'array' component. The @code{size} element will be set to zero and the @code{dsize} array will be properly allocated (based on the number of dimensions), but all elements will be zero. This is useful in scenarios where you just need a @code{gal_data_t} for metadata. @end deftypefun @deftypefun void gal_data_free_contents (gal_data_t @code{*data}) Free all the non-@code{NULL} pointers in @code{gal_data_t} except for @code{next} and @code{block}. All freed arrays are set to @code{NULL}. If @code{data} is actually a tile (@code{data->block!=NULL}, see @ref{Tessellation library}), then @code{data->array} is not freed. For a complete description of @code{gal_data_t} and its contents, see @ref{Generic data container}. @end deftypefun @deftypefun void gal_data_free (gal_data_t @code{*data}) Free all the non-@code{NULL} pointers in @code{gal_data_t}, then free the actual data structure. @end deftypefun @node Arrays of datasets, Copying datasets, Dataset allocation, Library data container @subsubsection Arrays of datasets Gnuastro's generic data container (@code{gal_data_t}) is a very versatile structure that can be used in many higher-level contexts. One such higher-level construct is an array of @code{gal_data_t} structures to simplify the allocation (and later cleaning) of several @code{gal_data_t}s that are related. For example, each column in a table is usually represented by one @code{gal_data_t} (so it has its own name, data type, units, etc.). A table (with many columns) can be seen as an array of @code{gal_data_t}s (when the number of columns is known a-priori). The functions below are defined to create a cleared array of data structures and to free them when none are necessary any more. These functions are declared in @file{gnuastro/data.h} which is also visible from the function names (see @ref{Gnuastro library}). @deftypefun {gal_data_t *} gal_data_array_calloc (size_t @code{size}) Allocate an array of @code{gal_data_t} with @code{size} elements. This function will also initialize all the values (@code{NULL} for pointers and 0 for other types). You can use @code{gal_data_initialize} to fill each element of the array afterwards. The following code snippet is one example of doing this. @example size_t i; gal_data_t *dataarr; dataarr=gal_data_array_calloc(10); for(i=0;i<10;++i) gal_data_initialize(&dataarr[i], ...); ... gal_data_array_free(dataarr, 10, 1); @end example @end deftypefun @deftypefun void gal_data_array_free (gal_data_t @code{*dataarr}, size_t @code{num}, int @code{free_array}) Free all the @code{num} elements within @code{dataarr} and the actual allocated array. If @code{free_array} is not zero, then the @code{array} element of all the datasets will also be freed, see @ref{Generic data container}. @end deftypefun @deftypefun {gal_data_t **} gal_data_array_ptr_calloc (size_t @code{size}) Allocate an array of pointers to Gnuastro's generic data structure and initialize all pointers to @code{NULL}. This is useful when you want to allocate individual datasets later (for example, with @code{gal_data_alloc}). @end deftypefun @deftypefun void gal_data_array_ptr_free (gal_data_t @code{**dataptr}, size_t @code{size}, int @code{free_array}); Free all the individual datasets within the elements of @code{dataptr}, then free @code{dataptr} itself (the array of pointers that was probably allocated with @code{gal_data_array_ptr_calloc}. @end deftypefun @node Copying datasets, , Arrays of datasets, Library data container @subsubsection Copying datasets The functions in this section describes Gnuastro's facilities to copy a given dataset into another. The new dataset can have a different type (including a string), it can be already allocated (in which case only the values will be written into it). In all these cases, if the input dataset is a tile or a list, only the data within the given tile, or the given node in a list, are copied. If the input is a list, the @code{next} pointer will also be copied to the output, see @ref{List of gal_data_t}. In many of the functions here, it is possible to copy the dataset to a new numeric data type (see @ref{Numeric data types}. In such cases, Gnuastro's library is going to use the native conversion by C. So if you are converting to a smaller type, it is up to you to make sure that the values fit into the output type. @deftypefun {gal_data_t *} gal_data_copy (gal_data_t @code{*in}) Return a new dataset that is a copy of @code{in}, all of @code{in}'s meta-data will also copied into the output, except for @code{block}. If the dataset is a tile/list, only the given tile/node will be copied, the @code{next} pointer will also be copied however. @end deftypefun @deftypefun {gal_data_t *} gal_data_copy_to_new_type (gal_data_t @code{*in}, uint8_t @code{newtype}) Return a copy of the dataset @code{in}, converted to @code{newtype}, see @ref{Library data types} for Gnuastro library's type identifiers. The returned dataset will have all meta-data except their type and @code{block} equal to the input's metadata. If the dataset is a tile/list, only the given tile/node will be copied, the @code{next} pointer will also be copied however. @end deftypefun @deftypefun {gal_data_t *} gal_data_copy_to_new_type_free (gal_data_t @code{*in}, uint8_t @code{newtype}) Return a copy of the dataset @code{in} that is converted to @code{newtype} and free the input dataset. See @ref{Library data types} for Gnuastro library's type identifiers. The returned dataset will have all meta-data, except their type, equal to the input's metadata (including @code{next}). Note that if the input is a tile within a larger block, it will not be freed. This function is similar to @code{gal_data_copy_to_new_type}, except that it will free the input dataset. @end deftypefun @deftypefun {void} gal_data_copy_to_allocated (gal_data_t @code{*in}, gal_data_t @code{*out}) Copy the contents of the array in @code{in} into the already allocated array in @code{out}. The types of the input and output may be different, type conversion will be done internally. When @code{in->size != out->size} this function will behave as follows: @table @code @item out->size < in->size This function will not re-allocate the necessary space, it will abort with an error, so please check before calling this function. @item out->size > in->size This function will write the values in @code{out->size} and @code{out->dsize} from the same values of @code{in}. So if you want to use a pre-allocated space/dataset multiple times with varying input sizes, be sure to reset @code{out->size} before every call to this function. @end table @end deftypefun @deftypefun {gal_data_t *} gal_data_copy_string_to_number (char @code{*string}) Read @code{string} into the smallest type that can store the value (see @ref{Numeric data types}). This function is just a wrapper for the @code{gal_type_string_to_number}, but will put the value into a single-element dataset. @end deftypefun @node Dimensions, Linked lists, Library data container, Gnuastro library @subsection Dimensions (@file{dimension.h}) An array is a contiguous region of memory. Hence, at the lowest level, every element of an array just has one single-valued position: the number of elements that lie between it and the first element in the array. This is also known as the @emph{index} of the element within the array. A dataset's number of dimensions is high-level abstraction (meta-data) that we project onto that contiguous patch of memory. When the array is interpreted as a one-dimensional dataset, this index is also the @emph{coordinate} of the element. But once we associate the patch of memory with a higher dimension, there must also be one coordinate for each dimension. The functions and macros in this section provide you with the tools to convert an index into a coordinate and vice-versa along with several other issues for example, issues with the neighbors of an element in a multi-dimensional context. @deftypefun size_t gal_dimension_total_size (size_t @code{ndim}, size_t @code{*dsize}) Return the total number of elements for a dataset with @code{ndim} dimensions that has @code{dsize} elements along each dimension. @end deftypefun @deftypefun int gal_dimension_is_different (gal_data_t @code{*first}, gal_data_t @code{*second}) Return @code{1} (one) if the two datasets do not have the same size along all dimensions. This function will also return @code{1} when the number of dimensions of the two datasets are different. @end deftypefun @deftypefun {size_t *} gal_dimension_increment (size_t @code{ndim}, size_t @code{*dsize}) Return an allocated array that has the number of elements necessary to increment an index along every dimension. For example, along the fastest dimension (last element in the @code{dsize} and returned arrays), the value is @code{1} (one). @end deftypefun @deftypefun size_t gal_dimension_num_neighbors (size_t @code{ndim}) The maximum number of neighbors (any connectivity) that a data element can have in @code{ndim} dimensions. Effectively, this function just returns @mymath{3^n-1} (where @mymath{n} is the number of dimensions). @end deftypefun @deffn {Function-like macro} GAL_DIMENSION_FLT_TO_INT (@code{FLT}) Calculate the integer pixel position that the floating point @code{FLT} number belongs to. In the FITS format (and thus in Gnuastro), the center of each pixel is allocated on an integer (not it edge), so the pixel which hosts a floating point number cannot simply be found with internal type conversion. @end deffn @deftypefun void gal_dimension_add_coords (size_t @code{*c1}, size_t @code{*c2}, size_t @code{*out}, size_t @code{ndim}) For every dimension, add the coordinates in @code{c1} with @code{c2} and put the result into @code{out}. In other words, for dimension @code{i} run @code{out[i]=c1[i]+c2[i];}. Hence @code{out} may be equal to any one of @code{c1} or @code{c2}. @end deftypefun @deftypefun size_t gal_dimension_coord_to_index (size_t @code{ndim}, size_t @code{*dsize}, size_t @code{*coord}) Return the index (counting from zero) from the coordinates in @code{coord} (counting from zero) assuming the dataset has @code{ndim} elements and the size of the dataset along each dimension is in the @code{dsize} array. @end deftypefun @deftypefun void gal_dimension_index_to_coord (size_t @code{index}, size_t @code{ndim}, size_t @code{*dsize}, size_t @code{*coord}) Fill in the @code{coord} array with the coordinates that correspond to @code{index} assuming the dataset has @code{ndim} elements and the size of the dataset along each dimension is in the @code{dsize} array. Note that both @code{index} and each value in @code{coord} are assumed to start from @code{0} (zero). Also that the space which @code{coord} points to must already be allocated before calling this function. @end deftypefun @deftypefun size_t gal_dimension_dist_manhattan (size_t @code{*a}, size_t @code{*b}, size_t @code{ndim}) @cindex Manhattan distance @cindex Distance, Manhattan Return the manhattan distance (see @url{https://en.wikipedia.org/wiki/Taxicab_geometry, Wikipedia}) between the two coordinates @code{a} and @code{b} (each an array of @code{ndim} elements). @end deftypefun @deftypefun float gal_dimension_dist_radial (size_t @code{*a}, size_t @code{*b}, size_t @code{ndim}) Return the radial distance between the two coordinates @code{a} and @code{b} (each an array of @code{ndim} elements). @end deftypefun @deftypefun float gal_dimension_dist_elliptical (double @code{*center}, double @code{*pa_deg}, double @code{*q}, size_t @code{ndim}, double @code{*point}) @cindex Ellipse @cindex Ellipsoid @cindex Axis ratio @cindex Position angle @cindex Elliptical distance @cindex Ellipsoidal distance @cindex Distance, elliptical/ellipsoidal Return the elliptical/ellipsoidal distance of the single point @code{point} (containing @code{ndim} values: coordinates of the point in each dimension) from an ellipse that is defined by @code{center}, @code{pa_deg} and @code{q}. @code{center} is the coordinates of the ellipse center (also with @code{ndim} elements). @code{pa} is the position-angle in degrees (the angle of the semi-major axis from the first dimension in a 2D ellipse) and @code{q} is the axis ratio. In a 2D ellipse, @code{pa} and @code{q} are a single-element array. However, in a 3D ellipsoid, @code{pa} must have three elements, and @code{q} must have 2 elements. For more see @ref{Defining an ellipse and ellipsoid}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_sum (gal_data_t @code{*in}, size_t @code{c_dim}, gal_data_t @code{*weight}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by summing all elements in that direction. If @code{weight!=NULL}, it must be a single-dimensional array, with the same size as the dimension to be collapsed. The respective weight will be multiplied to each element during the collapse. For generality, the returned dataset will have a @code{GAL_TYPE_FLOAT64} type. See @ref{Copying datasets} for converting the returned dataset to a desired type. Also, for more on the application of this function, see the Arithmetic program's @option{collapse-sum} operator (which uses this function) in @ref{Arithmetic operators}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_mean (gal_data_t @code{*in}, size_t @code{c_dim}, gal_data_t @code{*weight}) Similar to @code{gal_dimension_collapse_sum} (above), but the collapse will be done by calculating the mean along the requested dimension, not summing over it. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_number (gal_data_t @code{*in}, size_t @code{c_dim}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by counting how many non-blank elements there are along that dimension. For generality, the returned dataset will have a @code{GAL_TYPE_INT32} type. See @ref{Copying datasets} for converting the returned dataset to a desired type. Also, for more on the application of this function, see the Arithmetic program's @option{collapse-number} operator (which uses this function) in @ref{Arithmetic operators}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_minmax (gal_data_t @code{*in}, size_t @code{c_dim}, int @code{max1_min0}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by using the largest/smallest non-blank value along that dimension. If @code{max1_min0} is non-zero, then the collapsed dataset will have the maximum value along the given dimension and if it is zero, the minimum. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_median (gal_data_t @code{*in}, size_t @code{c_dim}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by finding the median non-blank value along that dimension. Since the median involves sorting, this operator benefits from many threads (which needs to be set with @code{numthreads}). For more on @code{minmapsize} and @code{quietmmap} see @ref{Memory management}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_sclip_std (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by finding the standard deviation of pixels along that dimension after sigma-clipping. Since sigma-clipping involves sorting, this operator benefits from many threads (which needs to be set with @code{numthreads}). For more on @code{minmapsize} and @code{quietmmap} see @ref{Memory management}. For more on sigma clipping, see @ref{Sigma clipping}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_sclip_fill_std (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Similar to @code{gal_dimension_collapse_sclip_std}, but with filled re-clipping (see @ref{Filled re-clipping}). @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_sclip_mad (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by finding the median absolute deviation (MAD) of pixels along that dimension after sigma-clipping. Since sigma-clipping involves sorting, this operator benefits from many threads (which needs to be set with @code{numthreads}). For more on @code{minmapsize} and @code{quietmmap} see @ref{Memory management}. For more on sigma clipping, see @ref{Sigma clipping}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_sclip_fill_mad (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Similar to @code{gal_dimension_collapse_sclip_mad}, but with filled re-clipping (see @ref{Filled re-clipping}). @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_sclip_mean (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by finding the mean of pixels along that dimension after sigma-clipping. Since sigma-clipping involves sorting, this operator benefits from many threads (which needs to be set with @code{numthreads}). For more on @code{minmapsize} and @code{quietmmap} see @ref{Memory management}. For more on sigma clipping, see @ref{Sigma clipping}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_sclip_fill_mean (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Similar to @code{gal_dimension_collapse_sclip_mean}, but with filled re-clipping (see @ref{Filled re-clipping}). @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_sclip_median (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by finding the median of pixels along that dimension after sigma-clipping. Since sigma-clipping involves sorting, this operator benefits from many threads (which needs to be set with @code{numthreads}). For more on @code{minmapsize} and @code{quietmmap} see @ref{Memory management}. For more on sigma clipping, see @ref{Sigma clipping}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_sclip_fill_median (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Similar to @code{gal_dimension_collapse_sclip_median}, but with filled re-clipping (see @ref{Filled re-clipping}). @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_sclip_number (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by finding the number of pixels along that dimension after sigma-clipping. Since sigma-clipping involves sorting, this operator benefits from many threads (which needs to be set with @code{numthreads}). For more on @code{minmapsize} and @code{quietmmap} see @ref{Memory management}. For more on sigma clipping, see @ref{Sigma clipping}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_sclip_fill_number (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Similar to @code{gal_dimension_collapse_sclip_number}, but with filled re-clipping (see @ref{Filled re-clipping}). @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_mclip_std (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by finding the standard deviation of pixels along that dimension after median absolute deviation (MAD) clipping. Since MAD-clipping involves sorting, this operator benefits from many threads (which needs to be set with @code{numthreads}). For more on @code{minmapsize} and @code{quietmmap} see @ref{Memory management}. For more on MAD-clipping, see @ref{MAD clipping}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_mclip_fill_std (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Similar to @code{gal_dimension_collapse_mclip_std}, but with filled re-clipping (see @ref{Filled re-clipping}). @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_mclip_mad (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by finding the median absolute deviation (MAD) of pixels along that dimension after median absolute deviation (MAD) clipping. Since MAD-clipping involves sorting, this operator benefits from many threads (which needs to be set with @code{numthreads}). For more on @code{minmapsize} and @code{quietmmap} see @ref{Memory management}. For more on MAD-clipping, see @ref{MAD clipping}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_mclip_fill_mad (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Similar to @code{gal_dimension_collapse_mclip_mad}, but with filled re-clipping (see @ref{Filled re-clipping}). @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_mclip_mean (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by finding the mean of pixels along that dimension after median absolute deviation (MAD) clipping. Since MAD-clipping involves sorting, this operator benefits from many threads (which needs to be set with @code{numthreads}). For more on @code{minmapsize} and @code{quietmmap} see @ref{Memory management}. For more on MAD-clipping, see @ref{MAD clipping}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_mclip_fill_mean (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Similar to @code{gal_dimension_collapse_mclip_mean}, but with filled re-clipping (see @ref{Filled re-clipping}). @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_mclip_median (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by finding the median of pixels along that dimension after median absolute deviation (MAD) clipping. Since MAD-clipping involves sorting, this operator benefits from many threads (which needs to be set with @code{numthreads}). For more on @code{minmapsize} and @code{quietmmap} see @ref{Memory management}. For more on MAD-clipping, see @ref{MAD clipping}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_mclip_fill_median (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Similar to @code{gal_dimension_collapse_mclip_median}, but with filled re-clipping (see @ref{Filled re-clipping}). @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_mclip_number (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Collapse the input dataset (@code{in}) along the given dimension (@code{c_dim}, in C definition: starting from zero, from the slowest dimension), by finding the number of pixels along that dimension after median absolute deviation (MAD) clipping. Since MAD-clipping involves sorting, this operator benefits from many threads (which needs to be set with @code{numthreads}). For more on @code{minmapsize} and @code{quietmmap} see @ref{Memory management}. For more on MAD-clipping, see @ref{MAD clipping}. @end deftypefun @deftypefun {gal_data_t *} gal_dimension_collapse_mclip_fill_number (gal_data_t @code{*in}, size_t @code{c_dim}, float @code{multip}, float @code{param}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}) Similar to @code{gal_dimension_collapse_mclip_number}, but with filled re-clipping (see @ref{Filled re-clipping}). @end deftypefun @deftypefun size_t gal_dimension_remove_extra (size_t @code{ndim}, size_t @code{*dsize}, struct wcsprm @code{*wcs}) Remove extra dimensions (those that only have a length of 1) from the basic size information of a dataset. @code{ndim} is the number of dimensions and @code{dsize} is an array with @code{ndim} elements containing the size along each dimension in the C dimension order. When @code{wcs!=NULL}, the respective dimension will also be removed from the WCS. This function will return the new number of dimensions and the @code{dsize} elements will contain the length along each new dimension. @end deftypefun @deffn {Function-like macro} GAL_DIMENSION_NEIGHBOR_OP (@code{index}, @code{ndim}, @code{dsize}, @code{connectivity}, @code{dinc}, @code{operation}) Parse the neighbors of the element located at @code{index} and do the requested operation on them. This is defined as a macro to allow easy definition of any operation on the neighbors of a given element without having to use loops within your source code (the loops are implemented by this macro). For an example of using this function, please see @ref{Library demo - inspecting neighbors}. The input arguments to this function-like macro are described below: @table @code @item index Distance of this element from the first element in the array on a contiguous patch of memory (starting from 0), see the discussion above. @item ndim The number of dimensions associated with the contiguous patch of memory. @item dsize The full array size along each dimension. This must be an array and is assumed to have the same number elements as @code{ndim}. See the discussion under the same element in @ref{Generic data container}. @item connectivity Most distant neighbors to consider. Depending on the number of dimensions, different neighbors may be defined for each element. This function-like macro distinguish between these different neighbors with this argument. It has a value between @code{1} (one) and @code{ndim}. For example, in a 2D dataset, 4-connected neighbors have a connectivity of @code{1} and 8-connected neighbors have a connectivity of @code{2}. Note that this is inclusive, so in this example, a connectivity of @code{2} will also include connectivity @code{1} neighbors. @item dinc An array keeping the length necessary to increment along each dimension. You can make this array with the following function. Just do not forget to free the array after you are done with it: @example size_t *dinc=gal_dimension_increment(ndim, dsize); free(dinc); @end example @code{dinc} depends on @code{ndim} and @code{dsize}, but it must be defined outside this function-like macro since it involves allocation to help in performance. @item operation Any C operation that you would like to do on the neighbor. This macro will provide you a @code{nind} variable that can be used as the index of the neighbor that is currently being studied. It is defined as `@code{size_t ndim;}'. Note that @code{operation} will be repeated the number of times there is a neighbor for this element. @end table This macro works fully within its own @code{@{@}} block and except for the @code{nind} variable that shows the neighbor's index, all the variables within this macro's block start with @code{gdn_}. @end deffn @node Linked lists, Array input output, Dimensions, Gnuastro library @subsection Linked lists (@file{list.h}) @cindex Array @cindex Linked list An array is a contiguous region of memory that is very efficient and easy to use for recording and later accessing any random element as fast as any other. This makes array the primary data container when you have many elements (for example, an image which has millions of pixels). One major problem with an array is that the number of elements that go into it must be known in advance and adding or removing an element will require a re-set of all the other elements. For example, if you want to remove the 3rd element in a 1000 element array, all 997 subsequent elements have to pulled back by one position, the reverse will happen if you need to add an element. In many contexts such situations never come up, for example, you do not want to shift all the pixels in an image by one or two pixels from some random position in the image: their positions have scientific value. But in other contexts you will find yourself frequently adding/removing an a-priori unknown number of elements. Linked lists (or @emph{lists} for short) are the data-container of choice in such situations. As in a chain, each @emph{node} in a list is an independent C structure, keeping its own data along with pointer(s) to its immediate neighbor(s). Below, you can see one simple linked list node structure along with an ASCII art schematic of how we can use the @code{next} pointer to add any number of elements to the list that we want. By convention, a list is terminated when @code{next} is the @code{NULL} pointer. @c The second and last lines lines are pushed line space forward, because @c the `@{' at the start of the line is only seen as `{' in the book. @example struct list_float /* --------- --------- */ @{ /* | Value | | Value | */ float value; /* | --- | | --- | */ struct list_float *next; /* | next-|--> | next-|--> NULL */ @} /* --------- --------- */ @end example The schematic shows another great advantage of linked lists: it is very easy to add or remove/pop a node anywhere in the list. If you want to modify the first node, you just have to change one pointer. If it is in the middle, you just have to change two. You initially define a variable of this type with a @code{NULL} pointer as shown below: @example struct list_float *list=NULL; @end example @noindent To add or remove/pop a node from the list you can use functions provided for the respective type in the sections below. @cindex last-in-first-out @cindex first-in-first-out @noindent When you add an element to the list, it is conventionally added to the ``top'' of the list: the general list pointer will point to the newly created node, which will point to the previously created node and so on. So when you ``pop'' from the top of the list, you are actually retrieving the last value you put in and changing the list pointer to the next youngest node. This is thus known as a ``last-in-first-out'' list. This is the most efficient type of linked list (easier to implement and faster to process). Alternatively, you can add each newly created node at the end of the list. If you do that, you will get a ``first-in-first-out'' list. But that will force you to go through the whole list for each new element that is created (this will slow down the processing)@footnote{A better way to get a first-in-first-out is to first keep the data as last-in-first-out until they are all read. Afterwards, reverse the list by popping each node and immediately add it to the new list. This practically reverses the last-in-first-out list to a first-in-first-out one. All the list types discussed in this chapter have a function with a @code{_reverse} suffix for this job.}. The node example above creates the simplest kind of a list. We can define each node with two pointers to both the next and previous neighbors, this is called a ``Doubly linked list''. In general, lists are very powerful and simple constructs that can be very useful. But going into more detail would be out of the scope of this short introduction in this book. @url{https://en.wikipedia.org/wiki/Linked_list, Wikipedia} has a nice and more thorough discussion of the various types of lists. To appreciate/use the beauty and elegance of these powerful constructs even further, see Chapter 2 (Information Structures, in volume 1) of Donald Knuth's ``The art of computer programming''. In this section we will review the functions and structures that are available in Gnuastro for working on lists. They differ by the type of data that each node can keep. For each linked-list node structure, we will first introduce the structure, then the functions for working on the structure. All these structures and functions are defined and declared in @file{gnuastro/list.h}. @menu * List of strings:: Simply linked list of strings. * List of int32_t:: Simply linked list of int32_ts. * List of size_t:: Simply linked list of size_ts. * List of float:: Simply linked list of floats. * List of double:: Simply linked list of doubles * List of void:: Simply linked list of void * pointers. * Ordered list of size_t:: Simply linked, ordered list of size_t. * Doubly linked ordered list of size_t:: Definition and functions. * List of gal_data_t:: Simply linked list Gnuastro's generic datatype. @end menu @node List of strings, List of int32_t, Linked lists, Linked lists @subsubsection List of strings Probably one of the most common lists you will be using are lists of strings. They are the best tools when you are reading the user's inputs, or when adding comments to the output files. Below you can see Gnuastro's string list type and several functions to help in adding, removing/popping, reversing and freeing the list. @deftp {Type (C @code{struct})} gal_list_str_t A single node in a list containing a string of characters. @example typedef struct gal_list_str_t @{ char *v; struct gal_list_str_t *next; @} gal_list_str_t; @end example @end deftp @deftypefun void gal_list_str_add (gal_list_str_t @code{**list}, char @code{*value}, int @code{allocate}) Add a new node to the list of strings (@code{list}) and update it. The new node will contain the string @code{value}. If @code{allocate} is not zero, space will be allocated specifically for the string of the new node and the contents of @code{value} will be copied into it. This can be useful when your string may be changed later in the program, but you want your list to remain. Here is one short/simple example of initializing and adding elements to a string list: @example gal_list_str_t *list=NULL; gal_list_str_add(&list, "bottom of list.", 1); gal_list_str_add(&list, "second last element of list.", 1); @end example @end deftypefun @deftypefun {char *} gal_list_str_pop (gal_list_str_t @code{**list}) Pop the top element of @code{list}, change @code{list} to point to the next node in the list, and return the string that was in the popped node. If @code{*list==NULL}, then this function will also return a @code{NULL} pointer. @end deftypefun @deftypefun size_t gal_list_str_number (gal_list_str_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun {gal_list_str_t *} gal_list_str_last (gal_list_str_t @code{*list}) Return a pointer to the last node in @code{list}. @end deftypefun @deftypefun void gal_list_str_print (gal_list_str_t @code{*list}) Print the strings within each node of @code{*list} on the standard output in the same order that they are stored. Each string is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, it is best to make your own implementation with a better, more user-friendly, format. For example, the following code snippet. @example size_t i=0; gal_list_str_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("String %zu: %s\n", ++i, tmp->v); @end example @end deftypefun @deftypefun void gal_list_str_reverse (gal_list_str_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun void gal_list_str_free (gal_list_str_t @code{*list}, int @code{freevalue}) Free every node in @code{list}. If @code{freevalue} is not zero, also free the string within the nodes. @end deftypefun @deftypefun {gal_list_str_t *} gal_list_str_extract (char @code{*string}) Extract space-separated components of the input string. If any space element should be kept (and not considered as a delimiter between two tokens), precede it with a backslash (@code{\}). Be aware that in C programming, when including a backslash character within a string literal, the correct format is indeed to use two backslashes ("\\") to represent a single backslash: @example gal_list_str_extract("bottom of\\ list"); @end example @end deftypefun @deftypefun {char *} gal_list_str_cat (gal_list_str_t @code{*list}, char @code{delimiter}) Concatenate (append) the input list of strings into a single string where each node is separated from the next with the given @code{delimiter}. The space for the output string is allocated by this function and should be freed when you have finished with it. If there is any delimiter characters are present in any of the elements, a backslash (@code{\}) will be printed before the SPACE character. This is necessary, otherwise, a function like @code{gal_list_str_extract} will not be able to extract the elements back into separate elements in a list. @end deftypefun @node List of int32_t, List of size_t, List of strings, Linked lists @subsubsection List of @code{int32_t} Signed integers are the best types when you are dealing with a positive or negative integers. The are generally useful in many contexts, for example when you want to keep the order of a series of states (each state stored as a given number in an @code{enum} for example). On many modern systems, @code{int32_t} is just an alias for @code{int}, so you can use them interchangeably. To make sure, check the size of @code{int} on your system: @deftp {Type (C @code{struct})} gal_list_i32_t A single node in a list containing a 32-bit signed integer (see @ref{Numeric data types}). @example typedef struct gal_list_i32_t @{ int32_t v; struct gal_list_i32_t *next; @} gal_list_i32_t; @end example @end deftp @deftypefun void gal_list_i32_add (gal_list_i32_t @code{**list}, int32_t @code{value}) Add a new node (containing @code{value}) to the top of the @code{list} of @code{int32_t}s (@code{uint32_t} is equal to @code{int} on many modern systems), and update @code{list}. Here is one short example of initializing and adding elements to a string list: @example gal_list_i32_t *list=NULL; gal_list_i32_add(&list, 52); gal_list_i32_add(&list, -4); @end example @end deftypefun @deftypefun {int32_t} gal_list_i32_pop (gal_list_i32_t @code{**list}) Pop the top element of @code{list} and return the value. This function will also change @code{list} to point to the next node in the list. If @code{*list==NULL}, then this function will also return @code{GAL_BLANK_INT32} (see @ref{Library blank values}). @end deftypefun @deftypefun size_t gal_list_i32_number (gal_list_i32_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun size_t gal_list_i32_last (gal_list_i32_t @code{*list}) Return a pointer to the last node in @code{list}. @end deftypefun @deftypefun void gal_list_i32_print (gal_list_i32_t @code{*list}) Print the integers within each node of @code{*list} on the standard output in the same order that they are stored. Each integer is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, it is best to make your own implementation with a better, more user-friendly format. For example, the following code snippet. You can also modify it to print all values in one line, etc., depending on the context of your program. @example size_t i=0; gal_list_i32_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("Number %zu: %s\n", ++i, tmp->v); @end example @end deftypefun @deftypefun void gal_list_i32_reverse (gal_list_i32_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun {int32_t *} gal_list_i32_to_array (gal_list_i32_t @code{*list}, int @code{reverse}, size_t @code{*num}) Dynamically allocate an array and fill it with the values in @code{list}. The function will return a pointer to the allocated array and put the number of elements in the array into the @code{num} pointer. If @code{reverse} has a non-zero value, the array will be filled in the opposite order of elements in @code{list}. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. @end deftypefun @deftypefun void gal_list_i32_free (gal_list_i32_t @code{*list}) Free every node in @code{list}. @end deftypefun @node List of size_t, List of float, List of int32_t, Linked lists @subsubsection List of @code{size_t} The @code{size_t} type is a unique type in C: as the name suggests it is defined to store sizes, or more accurately, the distances between memory locations. Hence it is always positive (an @code{unsigned} type) and it is directly related to the address-able spaces on the host system: on 32-bit and 64-bit systems it is an alias for @code{uint32_t} and @code{uint64_t}, respectively (see @ref{Numeric data types}). @code{size_t} is the default compiler type to index an array (recall that an array index in C is just a pointer increment of a given @emph{size}). Since it is unsigned, it is a great type for counting (where negative is not defined), you are always sure it will never exceed the system's (virtual) memory and since its name has the word ``size'' inside it, it provides a good level of documentation@footnote{So you know that a variable of this type is not used to store some generic state for example.}. In Gnuastro, we do all counting and array indexing with this type, so this list is very handy. As discussed above, @code{size_t} maps to different types on different machines, so a portable way to print them with @code{printf} is to use C99's @code{%zu} format. @deftp {Type (C @code{struct})} gal_list_sizet_t A single node in a list containing a @code{size_t} value (which maps to @code{uint32_t} or @code{uint64_t} on 32-bit and 64-bit systems), see @ref{Numeric data types}. @example typedef struct gal_list_sizet_t @{ size_t v; struct gal_list_sizet_t *next; @} gal_list_sizet_t; @end example @end deftp @deftypefun void gal_list_sizet_add (gal_list_sizet_t @code{**list}, size_t @code{value}) Add a new node (containing @code{value}) to the top of the @code{list} of @code{size_t}s and update @code{list}. Here is one short example of initializing and adding elements to a string list: @example gal_list_sizet_t *list=NULL; gal_list_sizet_add(&list, 45493); gal_list_sizet_add(&list, 930484); @end example @end deftypefun @deftypefun {sizet_t} gal_list_sizet_pop (gal_list_sizet_t @code{**list}) Pop the top element of @code{list} and return the value. This function will also change @code{list} to point to the next node in the list. If @code{*list==NULL}, then this function will also return @code{GAL_BLANK_SIZE_T} (see @ref{Library blank values}). @end deftypefun @deftypefun size_t gal_list_sizet_number (gal_list_sizet_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun size_t gal_list_sizet_last (gal_list_sizet_t @code{*list}) Return a pointer to the last node in @code{list}. @end deftypefun @deftypefun void gal_list_sizet_print (gal_list_sizet_t @code{*list}) Print the values within each node of @code{*list} on the standard output in the same order that they are stored. Each integer is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, it is best to make your own implementation with a better, more user-friendly format. For example, the following code snippet. You can also modify it to print all values in one line, etc., depending on the context of your program. @example size_t i=0; gal_list_sizet_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("Number %zu: %zu\n", ++i, tmp->v); @end example @end deftypefun @deftypefun void gal_list_sizet_reverse (gal_list_sizet_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun {size_t *} gal_list_sizet_to_array (gal_list_sizet_t @code{*list}, int @code{reverse}, size_t @code{*num}) Dynamically allocate an array and fill it with the values in @code{list}. The function will return a pointer to the allocated array and put the number of elements in the array into the @code{num} pointer. If @code{reverse} has a non-zero value, the array will be filled in the inverse of the order of elements in @code{list}. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. @end deftypefun @deftypefun void gal_list_sizet_free (gal_list_sizet_t @code{*list}) Free every node in @code{list}. @end deftypefun @node List of float, List of double, List of size_t, Linked lists @subsubsection List of @code{float} Single precision floating point numbers can accurately store real number until 7.2 decimals and only consume 4 bytes (32-bits) of memory, see @ref{Numeric data types}. Since astronomical data rarely reach that level of precision, single precision floating points are the type of choice to keep and read data. However, when processing the data, it is best to use double precision floating points (since errors propagate). @deftp {Type (C @code{struct})} gal_list_f32_t A single node in a list containing a 32-bit single precision @code{float} value: see @ref{Numeric data types}. @example typedef struct gal_list_f32_t @{ float v; struct gal_list_f32_t *next; @} gal_list_f32_t; @end example @end deftp @deftypefun void gal_list_f32_add (gal_list_f32_t @code{**list}, float @code{value}) Add a new node (containing @code{value}) to the top of the @code{list} of @code{float}s and update @code{list}. Here is one short example of initializing and adding elements to a string list: @example gal_list_f32_t *list=NULL; gal_list_f32_add(&list, 3.89); gal_list_f32_add(&list, 1.23e-20); @end example @end deftypefun @deftypefun {float} gal_list_f32_pop (gal_list_f32_t @code{**list}) Pop the top element of @code{list} and return the value. This function will also change @code{list} to point to the next node in the list. If @code{*list==NULL}, then this function will return @code{GAL_BLANK_FLOAT32} (NaN, see @ref{Library blank values}). @end deftypefun @deftypefun size_t gal_list_f32_number (gal_list_f32_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun size_t gal_list_f32_last (gal_list_f32_t @code{*list}) Return a pointer to the last node in @code{list}. @end deftypefun @deftypefun void gal_list_f32_print (gal_list_f32_t @code{*list}) Print the values within each node of @code{*list} on the standard output in the same order that they are stored. Each floating point number is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, it is best to make your own implementation with a better, more user-friendly format. For example, in the following code snippet. You can also modify it to print all values in one line, etc., depending on the context of your program. @example size_t i=0; gal_list_f32_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("Number %zu: %f\n", ++i, tmp->v); @end example @end deftypefun @deftypefun void gal_list_f32_reverse (gal_list_f32_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun {float *} gal_list_f32_to_array (gal_list_f32_t @code{*list}, int @code{reverse}, size_t @code{*num}) Dynamically allocate an array and fill it with the values in @code{list}. The function will return a pointer to the allocated array and put the number of elements in the array into the @code{num} pointer. If @code{reverse} has a non-zero value, the array will be filled in the inverse of the order of elements in @code{list}. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. @end deftypefun @deftypefun void gal_list_f32_free (gal_list_f32_t @code{*list}) Free every node in @code{list}. @end deftypefun @node List of double, List of void, List of float, Linked lists @subsubsection List of @code{double} Double precision floating point numbers can accurately store real number until 15.9 decimals and consume 8 bytes (64-bits) of memory, see @ref{Numeric data types}. This level of precision makes them very good for serious processing in the middle of a program's execution: in many cases, the propagation of errors will still be insignificant compared to actual observational errors in a data set. But since they consume 8 bytes and more CPU processing power, they are often not the best choice for storing and transferring of data. @deftp {Type (C @code{struct})} gal_list_f64_t A single node in a list containing a 64-bit double precision @code{double} value: see @ref{Numeric data types}. @example typedef struct gal_list_f64_t @{ double v; struct gal_list_f64_t *next; @} gal_list_f64_t; @end example @end deftp @deftypefun void gal_list_f64_add (gal_list_f64_t @code{**list}, double @code{value}) Add a new node (containing @code{value}) to the top of the @code{list} of @code{double}s and update @code{list}. Here is one short example of initializing and adding elements to a string list: @example gal_list_f64_t *list=NULL; gal_list_f64_add(&list, 3.8129395763193); gal_list_f64_add(&list, 1.239378923931e-20); @end example @end deftypefun @deftypefun {double} gal_list_f64_pop (gal_list_f64_t @code{**list}) Pop the top element of @code{list} and return the value. This function will also change @code{list} to point to the next node in the list. If @code{*list==NULL}, then this function will return @code{GAL_BLANK_FLOAT64} (NaN, see @ref{Library blank values}). @end deftypefun @deftypefun size_t gal_list_f64_number (gal_list_f64_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun size_t gal_list_f64_last (gal_list_f64_t @code{*list}) Return a pointer to the last node in @code{list}. @end deftypefun @deftypefun void gal_list_f64_print (gal_list_f64_t @code{*list}) Print the values within each node of @code{*list} on the standard output in the same order that they are stored. Each floating point number is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, it is best to make your own implementation with a better, more user-friendly format. For example, in the following code snippet. You can also modify it to print all values in one line, etc., depending on the context of your program. @example size_t i=0; gal_list_f64_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("Number %zu: %f\n", ++i, tmp->v); @end example @end deftypefun @deftypefun void gal_list_f64_reverse (gal_list_f64_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun {double *} gal_list_f64_to_array (gal_list_f64_t @code{*list}, int @code{reverse}, size_t @code{*num}) Dynamically allocate an array and fill it with the values in @code{list}. The function will return a pointer to the allocated array and put the number of elements in the array into the @code{num} pointer. If @code{reverse} has a non-zero value, the array will be filled in the inverse of the order of elements in @code{list}. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. @end deftypefun @deftypefun {gal_data_t *} gal_list_f64_to_data (gal_list_f64_t @code{*list}, uint8_t @code{type}, size_t @code{minmapsize}, int @code{quietmmap}) Write the values in the given @code{list} into a @code{gal_data_t} dataset of the requested @code{type}. The order of the values in the dataset will be the same as the order from the top of the list. @end deftypefun @deftypefun void gal_list_f64_free (gal_list_f64_t @code{*list}) Free every node in @code{list}. @end deftypefun @node List of void, Ordered list of size_t, List of double, Linked lists @subsubsection List of @code{void *} In C, @code{void *} is the most generic pointer. Usually pointers are associated with the type of content they point to. For example, @code{int *} means a pointer to an integer. This ancillary information about the contents of the memory location is very useful for the compiler, catching bad errors and also documentation (it helps the reader see what the address in memory actually contains). However, @code{void *} is just a raw address (pointer), it contains no information on the contents it points to. These properties make the @code{void *} very useful when you want to treat the contents of an address in different ways. You can use the @code{void *} list defined in this section and its function on any kind of data: for example, you can use it to keep a list of custom data structures that you have built for your own separate program. Each node in the list can keep anything and this gives you great versatility. But in using @code{void *}, please beware that ``with great power comes great responsibility''. @deftp {Type (C @code{struct})} gal_list_void_t A single node in a list containing a @code{void *} pointer. @example typedef struct gal_list_void_t @{ void *v; struct gal_list_void_t *next; @} gal_list_void_t; @end example @end deftp @deftypefun void gal_list_void_add (gal_list_void_t @code{**list}, void @code{*value}) Add a new node (containing @code{value}) to the top of the @code{list} of @code{void *}s and update @code{list}. Here is one short example of initializing and adding elements to a string list: @example gal_list_void_t *list=NULL; gal_list_f64_add(&list, some_pointer); gal_list_f64_add(&list, another_pointer); @end example @end deftypefun @deftypefun {void *} gal_list_void_pop (gal_list_void_t @code{**list}) Pop the top element of @code{list} and return the value. This function will also change @code{list} to point to the next node in the list. If @code{*list==NULL}, then this function will return @code{NULL}. @end deftypefun @deftypefun size_t gal_list_void_number (gal_list_void_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun size_t gal_list_void_last (gal_list_void_t @code{*list}) Return a pointer to the last node in @code{list}. @end deftypefun @deftypefun void gal_list_void_reverse (gal_list_void_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun void gal_list_void_free (gal_list_void_t @code{*list}) Free every node in @code{list}. @end deftypefun @node Ordered list of size_t, Doubly linked ordered list of size_t, List of void, Linked lists @subsubsection Ordered list of @code{size_t} Positions/sizes in a dataset are conventionally in the @code{size_t} type (see @ref{List of size_t}) and it sometimes occurs that you want to parse and read the values in a specific order. For example, you want to start from one pixel and add pixels to the list based on their distance to that pixel. So that ever time you pop an element from the list, you know it is the nearest that has not yet been studied. The @code{gal_list_osizet_t} type and its functions in this section are designed to facilitate such operations. @deftp {Type (C @code{struct})} gal_list_osizet_t @cindex @code{size_t} Each node in this singly-linked list contains a @code{size_t} value and a floating point value. The floating point value is used as a reference to add new nodes in a sorted manner. At any moment, the first popped node in this list will have the smallest @code{tosort} value, and subsequent nodes will have larger to values. @end deftp @example typedef struct gal_list_osizet_t @{ size_t v; /* The actual value. */ float s; /* The parameter to sort by. */ struct gal_list_osizet_t *next; @} gal_list_osizet_t; @end example @deftypefun void gal_list_osizet_add (gal_list_osizet_t @code{**list}, size_t @code{value}, float @code{tosort}) Allocate space for a new node in @code{list}, and store @code{value} and @code{tosort} into it. The new node will not necessarily be at the ``top'' of the list. If @code{*list!=NULL}, then the @code{tosort} values of existing nodes is inspected and the given node is placed in the list such that the top element (which is popped with @code{gal_list_osizet_pop}) has the smallest @code{tosort} value. @end deftypefun @deftypefun size_t gal_list_osizet_pop (gal_list_osizet_t @code{**list}, float @code{*sortvalue}) Pop a node from the top of @code{list}, return the node's @code{value} and put its sort value in the space that @code{sortvalue} points to. This function will also free the allocated space for the popped node and after this function, @code{list} will point to the next node (which has a larger @code{tosort} element). @end deftypefun @deftypefun void gal_list_osizet_to_sizet_free (gal_list_osizet_t @code{*in}, gal_list_sizet_t @code{**out}) Convert the ordered list of @code{size_t}s into an ordinary @code{size_t} linked list. This can be useful when all the elements have been added and you just need to pop-out elements and do not care about the sorting values any more. After the conversion is done, this function will free the input list. Note that the @code{out} list does not have to be empty. If it already contains some nodes, the new nodes will be added on top of them. @end deftypefun @node Doubly linked ordered list of size_t, List of gal_data_t, Ordered list of size_t, Linked lists @subsubsection Doubly linked ordered list of @code{size_t} An ordered list of indices is required in many contexts, one example was discussed at the beginning of @ref{Ordered list of size_t}. But the list that was introduced there only has one point of entry: you can always only parse the list from smallest to largest. In this section, the doubly-linked @code{gal_list_dosizet_t} node is defined which will allow us to parse the values in ascending or descending order. @deftp {Type (C @code{struct})} gal_list_dosizet_t @cindex @code{size_t} Doubly-linked, ordered @code{size_t} list node structure. Each node in this Doubly-linked list contains a @code{size_t} value and a floating point value. The floating point value is used as a reference to add new nodes in a sorted manner. In the functions here, this linked list can be pointed to by two pointers (largest and smallest) with the following format: @example largest pointer | NULL <-- (v0,s0) <--> (v1,s1) <--> ... (vn,sn) --> NULL | smallest pointer @end example At any moment, the two pointers will point to the nodes containing the ``largest'' and ``smallest'' values and the rest of the nodes will be sorted. This is useful when an unknown number of nodes are being added continuously and during the operations it is important to have the nodes in a sorted format. @example typedef struct gal_list_dosizet_t @{ size_t v; /* The actual value. */ float s; /* The parameter to sort by. */ struct gal_list_dosizet_t *prev; struct gal_list_dosizet_t *next; @} gal_list_dosizet_t; @end example @end deftp @deftypefun void gal_list_dosizet_add (gal_list_dosizet_t @code{**largest}, gal_list_dosizet_t @code{**smallest}, size_t @code{value}, float @code{tosort}) Allocate space for a new node in @code{list}, and store @code{value} and @code{tosort} into it. If the list is empty, both @code{largest} and @code{smallest} must be @code{NULL}. @end deftypefun @deftypefun size_t gal_list_dosizet_pop_smallest (gal_list_dosizet_t @code{**largest}, gal_list_dosizet_t @code{**smallest}, float @code{tosort}) Pop the value with the smallest reference from the doubly linked list and store the reference into the space pointed to by @code{tosort}. Note that even though only the smallest pointer will be popped, when there was only one node in the list, the @code{largest} pointer also has to change, so we need both. @end deftypefun @deftypefun void gal_list_dosizet_print (gal_list_dosizet_t @code{*largest}, gal_list_dosizet_t @code{*smallest}) Print the largest and smallest values sequentially until the list is parsed. @end deftypefun @deftypefun void gal_list_dosizet_to_sizet (gal_list_dosizet_t @code{*in}, gal_list_sizet_t @code{**out}) Convert the doubly linked, ordered @code{size_t} list into a singly-linked list of @code{size_t}. @end deftypefun @deftypefun void gal_list_dosizet_free (gal_list_dosizet_t @code{*largest}) Free the doubly linked, ordered @code{sizet_t} list. @end deftypefun @node List of gal_data_t, , Doubly linked ordered list of size_t, Linked lists @subsubsection List of @code{gal_data_t} Gnuastro's generic data container has a @code{next} element which enables it to be used as a singly-linked list (see @ref{Generic data container}). The ability to connect the different data containers offers great advantages. For example, each column in a table in an independent dataset: with its own name, units, numeric data type (see @ref{Numeric data types}). Another application is in Tessellating an input dataset into separate tiles or only studying particular regions, or tiles, of a larger dataset (see @ref{Tessellation} and @ref{Tessellation library}). Each independent tile over the dataset can be connected to the others as a linked list and thus any number of tiles can be represented with one variable. @deftypefun void gal_list_data_add (gal_data_t @code{**list}, gal_data_t @code{*newnode}) Add an already allocated dataset (@code{newnode}) to top of @code{list}. Note that if @code{newnode->next!=NULL} (@code{newnode} is itself a list), then @code{list} will be added to its end. In this example multiple images are linked together as a list: @example int quietmmap=1; size_t minmapsize=-1; gal_data_t *tmp, *list=NULL; tmp = gal_fits_img_read("file1.fits", "1", minmapsize, quietmmap, NULL); gal_list_data_add( &list, tmp ); tmp = gal_fits_img_read("file2.fits", "1", minmapsize, quietmmap, NULL); gal_list_data_add( &list, tmp ); @end example @end deftypefun @deftypefun void gal_list_data_add_alloc (gal_data_t @code{**list}, void @code{*array}, uint8_t @code{type}, size_t @code{ndim}, size_t @code{*dsize}, struct wcsprm @code{*wcs}, int @code{clear}, size_t @code{minmapsize}, int @code{quietmmap}, char @code{*name}, char @code{*unit}, char @code{*comment}) Allocate a new dataset (with @code{gal_data_alloc} in @ref{Dataset allocation}) and put it as the first element of @code{list}. Note that if this is the first node to be added to the list, @code{list} must be @code{NULL}. @end deftypefun @deftypefun {gal_data_t *} gal_list_data_pop (gal_data_t @code{**list}) Pop the top node from @code{list} and return it. @end deftypefun @deftypefun void gal_list_data_remove (gal_data_t @code{**list}, gal_data_t @code{*node}) Remove @code{node} from the given @code{list}. After finding the given node, this function will just set @code{node->next=NULL} and correct the @code{next} node of its previous element to its next element (thus ``removing'' it from the list). If @code{node} doesn't exist in the list, this function won't make any change to list. @end deftypefun @deftypefun {gal_data_t *} gal_list_data_select_by_name (gal_data_t @code{*list}, char @code{*name}) Select the dataset within the list, that has a @code{name} element that is identical (case-sensitive) to the given @code{name}. If not found, a @code{NULL} pointer will be returned. Note that this dataset will not be popped from the list, only a pointer to it will be returned and if you free it or change its @code{next} element, it may harm your original list. @end deftypefun @deftypefun {gal_data_t *} gal_list_data_select_by_id (gal_data_t @code{*table}, char @code{*idstr}, size_t @code{*index}) Select the dataset within the list that can be identified with the string given to @code{idstr} (which can be a counter, starting from 1, or a name). If not found, a @code{NULL} pointer will be returned. Note that this dataset will not be popped from the list, only a pointer to it will be returned and if you free it or change its @code{next} element, it may harm your original list. @end deftypefun @deftypefun void gal_list_data_reverse (gal_data_t @code{**list}) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. @end deftypefun @deftypefun {gal_data_t **} gal_list_data_to_array_ptr (gal_data_t @code{*list}, size_t @code{*num}) Allocate and return an array of @code{gal_data_t *} pointers with the same number of elements as the nodes in @code{list}. The pointers will be put in the same order that the list is parsed. Hence the N-th element in the array will point to the same dataset that the N-th node in the list points to. @end deftypefun @deftypefun size_t gal_list_data_number (gal_data_t @code{*list}) Return the number of nodes in @code{list}. @end deftypefun @deftypefun {gal_data_t *} gal_list_data_last (gal_data_t @code{*list}) Return a pointer to the last node in @code{list}. @end deftypefun @deftypefun void gal_list_data_free (gal_data_t @code{*list}) Free all the datasets in @code{list} along with all the allocated spaces in each. @end deftypefun @node Array input output, Table input output, Linked lists, Gnuastro library @subsection Array input output Getting arrays (commonly images or cubes) from a file into your program or writing them after the processing into an output file are some of the most common operations. The functions in this section are designed for such operations with the known file types. The functions here are thus just wrappers around functions of lower-level file type functions of this library, for example, @ref{FITS files} or @ref{TIFF files}. If the file type of the input/output file is already known, you can use the functions in those sections respectively. @deftypefun int gal_array_name_recognized (char @code{*filename}) Return 1 if the given file name corresponds to one of the recognized file types for reading arrays. @end deftypefun @deftypefun int gal_array_name_recognized_multiext (char @code{*filename}) Return 1 if the given file name corresponds to one of the recognized file types for reading arrays which may contain multiple extensions (for example FITS or TIFF) formats. @end deftypefun @deftypefun int gal_array_file_recognized (char @code{*filename}) Similar to @code{gal_array_name_recognized}, but for FITS files, it will also check the contents of the file if the recognized file name suffix is not found. See the description of @code{gal_fits_file_recognized} for more (@ref{FITS macros errors filenames}). @end deftypefun @deftypefun gal_data_t gal_array_read (char @code{*filename}, char @code{*extension}, gal_list_str_t @code{*lines}, size_t @code{minmapsize}, int @code{quietmmap}, char @code{*hdu_option_name}) Read the array within the given extension (@code{extension}) of @code{filename}, or the @code{lines} list (see below). If the array is larger than @code{minmapsize} bytes, then it will not be read into RAM, but a file on the HDD/SSD (no difference for the programmer). Messages about the memory-mapped file can be disabled with @code{quietmmap}. @code{extension} will be ignored for files that do not support them (for example JPEG or text). For FITS files, @code{extension} can be a number or a string (name of the extension), but for TIFF files, it has to be number. In both cases, counting starts from zero. For multi-channel formats (like RGB images in JPEG or TIFF), this function will return a @ref{List of gal_data_t}: one data structure per channel. Thus if you just want a single array (and want to check if the user has not given a multi-channel input), you can check the @code{next} pointer of the returned @code{gal_data_t}. @code{lines} is a list of strings with each node representing one line (including the new-line character), see @ref{List of strings}. It will mostly be the output of @code{gal_txt_stdin_read}, which is used to read the program's input as separate lines from the standard input (see @ref{Text files}). Note that @code{filename} and @code{lines} are mutually exclusive and one of them must be @code{NULL}. @code{hdu_option_name} is used in error messages related to extensions (e.g., HDUs in FITS) and is expected to be the command-line option name that users of your program can specify to select an input HDU for this particular input; for example, if the kernel is used as the input, users should determine @option{--khdu} for this option. If the given @code{extension} doesn't exist in @file{filename}, a descriptive error message is printed instructing the users how to find and fix the problem. This error message also suggests the option to use in order to help users of your program to inform them what option they should give a HDU to. If you don't have an option that is configured by the users of your program, you can set this to @code{NONE} or @code{NULL}. @end deftypefun @deftypefun void gal_array_read_to_type (char @code{*filename}, char @code{*extension}, gal_list_str_t @code{*lines}, uint8_t @code{type}, size_t @code{minmapsize}, int @code{quietmmap}, char @code{*hdu_option_name}) Similar to @code{gal_array_read}, but the output data structure(s) will have a numeric data type of @code{type}, see @ref{Numeric data types}. @end deftypefun @deftypefun void gal_array_read_one_ch (char @code{*filename}, char @code{*extension}, gal_list_str_t @code{*lines}, size_t @code{minmapsize}, int @code{quietmmap}, char @code{*hdu_option_name}) @cindex Channel @cindex Color channel Read the dataset within @code{filename} (extension/hdu/dir @code{extension}) and make sure it is only a single channel. This is just a simple wrapper around @code{gal_array_read} that checks if there was more than one dataset and aborts with an informative error if there is more than one channel in the dataset. Formats like JPEG or TIFF support multiple channels per input, but it may happen that your program only works on a single dataset. This function can be a convenient way to make sure that the data that comes into your program is only one channel. Regarding @code{*hdu_option_name}, see the description for the same argument in the description of @code{gal_array_read}. @end deftypefun @deftypefun void gal_array_read_one_ch_to_type (char @code{*filename}, char @code{*extension}, gal_list_str_t @code{*lines}, uint8_t @code{type}, size_t @code{minmapsize}, int @code{quietmmap}, char @code{*hdu_option_name}) Similar to @code{gal_array_read_one_ch}, but the output data structure will has a numeric data type of @code{type}, see @ref{Numeric data types}. @end deftypefun @node Table input output, FITS files, Array input output, Gnuastro library @subsection Table input output (@file{table.h}) Tables are a collection of one dimensional datasets that are packed together into one file. They are the single most common format to store high-level (processed) information, hence they play a very important role in Gnuastro. For a more thorough introduction, please see @ref{Table}. Gnuastro's Table program, and all the other programs that can read from and write into tables, use the functions of this section for reading and writing their input/output tables. For a simple demonstration of using the constructs introduced here, see @ref{Library demo - reading and writing table columns}. Currently only plain text (see @ref{Gnuastro text table format}) and FITS (ASCII and binary) tables are supported by Gnuastro. However, the low-level table infra-structure is written such that accommodating other formats is also possible and in future releases more formats will hopefully be supported. Please do not hesitate to suggest your favorite format so it can be implemented when possible. @deffn Macro GAL_TABLE_DEF_WIDTH_STR @deffnx Macro GAL_TABLE_DEF_WIDTH_INT @deffnx Macro GAL_TABLE_DEF_WIDTH_LINT @deffnx Macro GAL_TABLE_DEF_WIDTH_FLT @deffnx Macro GAL_TABLE_DEF_WIDTH_DBL @deffnx Macro GAL_TABLE_DEF_PRECISION_INT @deffnx Macro GAL_TABLE_DEF_PRECISION_FLT @deffnx Macro GAL_TABLE_DEF_PRECISION_DBL @cindex @code{printf} The default width and precision for generic types to use in writing numeric types into a text file (plain text and FITS ASCII tables). When the dataset does not have any pre-set width and precision (see @code{disp_width} and @code{disp_precision} in @ref{Generic data container}) these will be directly used in C's @code{printf} command to write the number as a string. @end deffn @deffn Macro GAL_TABLE_DISPLAY_FMT_STRING @deffnx Macro GAL_TABLE_DISPLAY_FMT_DECIMAL @deffnx Macro GAL_TABLE_DISPLAY_FMT_UDECIMAL @deffnx Macro GAL_TABLE_DISPLAY_FMT_OCTAL @deffnx Macro GAL_TABLE_DISPLAY_FMT_HEX @deffnx Macro GAL_TABLE_DISPLAY_FMT_FIXED @deffnx Macro GAL_TABLE_DISPLAY_FMT_EXP @deffnx Macro GAL_TABLE_DISPLAY_FMT_GENERAL The display format used in C's @code{printf} to display data of different types. The @code{_STRING} and @code{_DECIMAL} are unique for printing strings and signed integers, they are mainly here for completeness. However, unsigned integers and floating points can be displayed in multiple formats: @table @asis @item Unsigned integer For unsigned integers, it is possible to choose from @code{_UDECIMAL} (unsigned decimal), @code{_OCTAL} (octal notation, for example, @code{125} in decimal will be displayed as @code{175}), and @code{_HEX} (hexadecimal notation, for example, @code{125} in decimal will be displayed as @code{7D}). @item Floating point For floating point, it is possible to display the number in @code{_FLOAT} (floating point, for example, @code{1500.345}), @code{_EXP} (exponential, for example, @code{1.500345e+03}), or @code{_GENERAL} which is the best of the two for the given number. @end table @end deffn @deffn Macro GAL_TABLE_FORMAT_INVALID @deffnx Macro GAL_TABLE_FORMAT_TXT @deffnx Macro GAL_TABLE_FORMAT_AFITS @deffnx Macro GAL_TABLE_FORMAT_BFITS All the current acceptable table formats to Gnuastro. The @code{AFITS} and @code{BFITS} represent FITS ASCII tables and FITS Binary tables. You can use these anywhere you see the @code{tableformat} variable. @end deffn @deffn Macro GAL_TABLE_SEARCH_INVALID @deffnx Macro GAL_TABLE_SEARCH_NAME @deffnx Macro GAL_TABLE_SEARCH_UNIT @deffnx Macro GAL_TABLE_SEARCH_COMMENT When the desired column is not a number, these values determine if the string to match, or regular expression to search, be in the @emph{name}, @emph{units} or @emph{comments} of the column metadata. These values should be used for the @code{searchin} variables of the functions. @end deffn @deftypefun uint8_t gal_table_displayflt_from_str (char @code{*string}) Convert the input @code{string} into one of the @code{GAL_TABLE_DISPLAY_FMT_FIXED} (for fixed-point notation) or @code{GAL_TABLE_DISPLAY_FMT_EXP} (for exponential notation). @end deftypefun @deftypefun {char *} gal_table_displayflt_to_str (uint8_t @code{id}) Convert the input identifier (one of the @code{GAL_TABLE_DISPLAY_FMT_FIXED}; for fixed-point notation, or @code{GAL_TABLE_DISPLAY_FMT_EXP}; for exponential notation) into a standard string that is used to identify them. @end deftypefun @deftypefun {gal_data_t *} gal_table_info (char @code{*filename}, char @code{*hdu}, gal_list_str_t @code{*lines}, size_t @code{*numcols}, size_t @code{*numrows}, int @code{*tableformat}) Store the information of each column of a table into an array of meta-data @code{gal_data_t}s. In a metadata @code{gal_data_t}, the size elements are zero (@code{ndim=size=0} and @code{dsize=NULL}) but other relevant elements are filled). See the end of this description for the exact components of each @code{gal_data_t} that are filled. The returned array of @code{gal_data_t}s has @code{numcols} datasets (one data structure for each column). The number of rows in each dataset is stored in @code{numrows} (in a table, all the columns have the same number of rows). The format of the table (e.g., ASCII text file, or FITS binary or ASCII table) will be put in @code{tableformat} (macros defined above). If the @code{filename} is not a FITS file, then @code{hdu} will not be used (can be @code{NULL}). The input must be either a file (specified by @code{filename}) or a list of strings (@code{lines}). @code{lines} is a list of strings with each node representing one line (including the new-line character), see @ref{List of strings}. It will mostly be the output of @code{gal_txt_stdin_read}, which is used to read the program's input as separate lines from the standard input (see @ref{Text files}). Note that @code{filename} and @code{lines} are mutually exclusive and one of them must be @code{NULL}. In the output datasets, only the meta-data strings (column name, units and comments), will be allocated and set as shown below. This function is just for column information (meta-data), not column contents. @example *restrict array -> Blank value (if present, in col's own type). type -> Type of column data. ndim -> 0 *dsize -> NULL size -> 0 quietmmap -> ------------ *mmapname -> ------------ minmapsize -> Repeat (length of vector; 1 if not vector). nwcs -> ------------ *wcs -> ------------ flag -> 'GAL_TABLEINTERN_FLAG_*' macros. status -> ------------ *name -> Column name. *unit -> Column unit. *comment -> Column comments. disp_fmt -> 'GAL_TABLE_DISPLAY_FMT' macros. disp_width -> Width of string columns. disp_precision -> ------------ *next -> Pointer to next column's metadata *block -> ------------ @end example @end deftypefun @deftypefun void gal_table_print_info (gal_data_t @code{*allcols}, size_t @code{numcols}, size_t @code{numrows}, char @code{*hdu_option_name}) Print the column information for all the columns (output of @code{gal_table_info}) to standard output. The output is in the same format as this command with Gnuastro Table program (see @ref{Invoking asttable}): @example $ asttable --info table.fits @end example @end deftypefun @deftypefun {gal_data_t *} gal_table_read (char @code{*filename}, char @code{*hdu}, gal_list_str_t @code{*lines}, gal_list_str_t @code{*cols}, int @code{searchin}, int @code{ignorecase}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}, size_t @code{*colmatch}, char @code{*hdu_option_name}) Read the specified columns in a file (named @code{filename}), or list of strings (@code{lines}) into a linked list of data structures. If the file is FITS, then @code{hdu} will also be used, otherwise, @code{hdu} is ignored. For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. @code{lines} is a list of strings with each node representing one line (including the new-line character), see @ref{List of strings}. It will mostly be the output of @code{gal_txt_stdin_read}, which is used to read the program's input as separate lines from the standard input (see @ref{Text files}). Note that @code{filename} and @code{lines} are mutually exclusive and one of them must be @code{NULL}. @cindex AWK @cindex GNU AWK The information to search for columns should be specified by the @code{cols} list of strings (see @ref{List of strings}). The string in each node of the list may be a number, an exact match to a column name, or a regular expression (in GNU AWK format) enclosed in @code{/ /}. The @code{searchin} value must be one of the macros defined above. If @code{cols} is NULL, then this function will read the full table. Also, the @code{ignorecase} value should be 1 if you want to ignore the case of alphabetic characters while matching/searching column meta-data (see @ref{Input output options}). For FITS tables, each column will be read independently. Therefore they will be read in @code{numthreads} CPU threads to greatly speed up the reading when there are many columns and rows. However, this only happens if CFITSIO was configured with @option{--enable-reentrant}. This test has been done at Gnuastro's configuration time; if so, @code{GAL_CONFIG_HAVE_FITS_IS_REENTRANT} will have a value of 1, otherwise, it will have a value of 0. For more on this macro, see @ref{Configuration information}). Multi-threaded table reading is not currently applicable to other table formats (only for FITS tables). The output is an individually allocated list of datasets (see @ref{List of gal_data_t}) with the same order of the @code{cols} list. Note that one column node in the @code{cols} list might give multiple columns (for example, from regular expressions), in this case, the order of output columns that correspond to that one input, are in order of the table (which column was read first). So the first requested column is the first popped data structure and so on. if @code{colmatch!=NULL}, it is assumed to be an array that has at least the same number of elements as nodes in the @code{cols} list. The number of columns that matched each input column will be stored in each element. @end deftypefun @deftypefun {gal_list_sizet_t *} gal_table_list_of_indexs (gal_list_str_t @code{*cols}, gal_data_t @code{*allcols}, size_t @code{numcols}, int @code{searchin}, int @code{ignorecase}, char @code{*filename}, char @code{*hdu}, size_t @code{*colmatch}) Returns a list of indices (starting from 0) of the input columns that match the names/numbers given to @code{cols}. This is a low-level operation which is called by @code{gal_table_read} (described above), see there for more on each argument's description. @code{allcols} is the returned array of @code{gal_table_info}. @end deftypefun @cindex Git @deftypefun void gal_table_comments_add_intro (gal_list_str_t @code{**comments}, char @code{*program_string}, time_t @code{*rawtime}) Add some basic information to the list of @code{comments}. This basic information includes the following information @itemize @item If the program is run in a Git version controlled directory, Git's description is printed (see description under @code{COMMIT} in @ref{Output FITS files}). @item The calendar time that is stored in @code{rawtime} (@code{time_t} is C's calendar time format defined in @file{time.h}). You can calculate the time in this format with the following expressions: @example time_t rawtime; time(&rawtime); @end example @item The name of your program in @code{program_string}. If it is @code{NULL}, this line is ignored. @end itemize @end deftypefun @deftypefun void gal_table_write (gal_data_t @code{*cols}, struct gal_fits_list_key_t @code{**keylist}, gal_list_str_t @code{*comments}, int @code{tableformat}, char @code{*filename}, char @code{*extname}, uint8_t @code{colinfoinstdout}, int @code{freekeys}) Write @code{cols} (a list of datasets, see @ref{List of gal_data_t}) into a table stored in @code{filename}. The format of the table can be determined with @code{tableformat} that accepts the macros defined above. When @code{filename==NULL}, the column information will be printed on the standard output (command-line). If @code{comments!=NULL}, the list of comments (see @ref{List of strings}) will also be printed into the output table. When the output table is a plain text file, every node of @code{comments} will be printed after a @code{#} (so it can be considered as a comment) and in FITS table they will follow a @code{COMMENT} keyword. If a file named @code{filename} already exists, the operation depends on the type of output. When @code{filename} is a FITS file, the table will be added as a new extension after all existing extensions. If @code{filename} is a plain text file, this function will abort with an error. If @code{filename} is a FITS file, the table extension will have the name @code{extname}. When @code{colinfoinstdout!=0} and @code{filename==NULL} (columns are printed in the standard output), the dataset metadata will also printed in the standard output. When printing to the standard output, the column information can be piped into another program for further processing and thus the meta-data (lines starting with a @code{#}) must be ignored. In such cases, you only print the column values by passing @code{0} to @code{colinfoinstdout}. @end deftypefun @deftypefun void gal_table_write_log (gal_data_t @code{*logll}, char @code{*program_string}, time_t @code{*rawtime}, gal_list_str_t @code{*comments}, char @code{*filename}, int @code{quiet}) Write the @code{logll} list of datasets into a table in @code{filename} (see @ref{List of gal_data_t}). This function is just a wrapper around @code{gal_table_comments_add_intro} and @code{gal_table_write} (see above). If @code{quiet} is non-zero, this function will print a message saying that the @code{filename} has been created. @end deftypefun @deftypefun {gal_data_t *} gal_table_col_vector_extract (gal_data_t @code{*vector}, gal_list_sizet_t @code{*indexs}) Given the ``vector'' column @code{vector} (which is assumed to be a 2D dataset), extract the tokens that are identified in the @code{indexs} list into a list of one dimensional datasets. For more on vector columns in tables, see @ref{Vector columns}. @end deftypefun @deftypefun {gal_data_t *} gal_table_cols_to_vector (gal_data_t @code{*list}) Merge the one-dimensional datasets in the given list into one 2-dimensional dataset that can be treated as a vector column. All the input datasets have to have the same size and type. For more on vector columns in tables, see @ref{Vector columns}. @end deftypefun @node FITS files, File input output, Table input output, Gnuastro library @subsection FITS files (@file{fits.h}) @cindex FITS @cindex CFITSIO The FITS format is the most common format to store data (images and tables) in astronomy. The CFITSIO library already provides a very good low-level collection of functions for manipulating FITS data. The low-level nature of CFITSIO is defined for versatility and portability. As a result, even a simple and basic operation, like reading an image or table column into memory, will require a special sequence of CFITSIO function calls which can be inconvenient and buggy to manage in separate locations. To ease this process, Gnuastro's library provides wrappers for CFITSIO functions. With these, it much easier to read, write, or modify FITS file data, header keywords and extensions. Hence, if you feel these functions do not exactly do what you want, we strongly recommend reading the CFITSIO manual to use its great features directly (afterwards, send us your wrappers so we can include it here for others to benefit also). All the functions and macros introduced in this section are declared in @file{gnuastro/fits.h}. When you include this header, you are also including CFITSIO's @file{fitsio.h} header. So you do not need to explicitly include @file{fitsio.h} anymore and can freely use any of its macros or functions in your code along with those discussed here. @menu * FITS macros errors filenames:: General macros, errors and checking names. * CFITSIO and Gnuastro types:: Conversion between FITS and Gnuastro types. * FITS HDUs:: Opening and getting information about HDUs. * FITS header keywords:: Reading and writing FITS header keywords. * FITS arrays:: Reading and writing FITS images/arrays. * FITS tables:: Reading and writing FITS tables. @end menu @node FITS macros errors filenames, CFITSIO and Gnuastro types, FITS files, FITS files @subsubsection FITS Macros, errors and filenames Some general constructs provided by Gnuastro's FITS handling functions are discussed here. In particular there are several useful functions about FITS file names. @deffn Macro GAL_FITS_MAX_NDIM The maximum number of dimensions a dataset can have in FITS format, according to the FITS standard this is 999. @end deffn @deftypefun void gal_fits_io_error (int @code{status}, char @code{*message}) If @code{status} is non-zero, this function will print the CFITSIO error message corresponding to status, print @code{message} (optional) in the next line and abort the program. If @code{message==NULL}, it will print a default string after the CFITSIO error. @end deftypefun @deftypefun int gal_fits_name_is_fits (char @code{*name}) If the @code{name} is an acceptable CFITSIO FITS filename return @code{1} (one), otherwise return @code{0} (zero). The currently acceptable FITS suffixes are @file{.fits}, @file{.fit}, @file{.fits.gz}, @file{.fits.Z}, @file{.imh}, @file{.fits.fz}. IMH is the IRAF format which is acceptable to CFITSIO. @end deftypefun @deftypefun int gal_fits_suffix_is_fits (char @code{*suffix}) Similar to @code{gal_fits_name_is_fits}, but only for the suffix. The suffix does not have to start with `@key{.}': this function will return @code{1} (one) for both @code{fits} and @code{.fits}. @end deftypefun @deftypefun int gal_fits_file_recognized (char @code{*name}) Return @code{1} if the given file name (possibly including its contents) is a FITS file. This is necessary in when the contents of a FITS file do follow the FITS standard, but it the file does not have a Gnuastro-recognized FITS suffix. Therefore, it will first call @code{gal_fits_name_is_fits}, if the result is negative, then this function will attempt to open the file with CFITSIO and if it works, it will close it again and return 1. In the process of opening the file, CFITSIO will just to open the file, no reading will take place, so it should have minimal CPU footprint. @end deftypefun @deftypefun {char *} gal_fits_name_save_as_string (char @code{*filename}, char @code{*hdu}) If the name is a FITS name, then put a @code{(hdu: ...)} after it and return the string. If it is not a FITS file, just print the name, if @code{filename==NULL}, then return the string @code{stdin}. Note that the output string's space is allocated. This function is useful when you want to report a random file to the user which may be FITS or not (for a FITS file, simply the filename is not enough, the HDU is also necessary). @end deftypefun @node CFITSIO and Gnuastro types, FITS HDUs, FITS macros errors filenames, FITS files @subsubsection CFITSIO and Gnuastro types Both Gnuastro and CFITSIO have special and different identifiers for each type that they accept. Gnuastro's type identifiers are fully described in @ref{Library data types} and are usable for all kinds of datasets (images, table columns, etc) as part of Gnuastro's @ref{Generic data container}. However, following the FITS standard, CFITSIO has different identifiers for images and tables. Following CFITSIO's own convention, we will use @code{bitpix} for image type identifiers and @code{datatype} for its internal identifiers (and mainly used in tables). The functions introduced in this section can be used to convert between CFITSIO and Gnuastro's type identifiers. One important issue to consider is that CFITSIO's types are not fixed width (for example, @code{long} may be 32-bits or 64-bits on different systems). However, Gnuastro's types are defined by their width. These functions will use information on the host system to do the proper conversion. To have a portable (usable on different systems) code, is thus recommended to use these functions and not to assume a fixed correspondence between CFITSIO and Gnuastro's types. @deftypefun uint8_t gal_fits_bitpix_to_type (int @code{bitpix}) Return the Gnuastro type identifier that corresponds to CFITSIO's @code{bitpix} on this system. @end deftypefun @deftypefun int gal_fits_type_to_bitpix (uint8_t @code{type}) Return the CFITSIO @code{bitpix} value that corresponds to Gnuastro's @code{type}. @end deftypefun @deftypefun char gal_fits_type_to_bin_tform (uint8_t @code{type}) Return the FITS standard binary table @code{TFORM} character that corresponds to Gnuastro's @code{type}. @end deftypefun @deftypefun int gal_fits_type_to_datatype (uint8_t @code{type}) Return the CFITSIO @code{datatype} that corresponds to Gnuastro's @code{type} on this machine. @end deftypefun @deftypefun uint8_t gal_fits_datatype_to_type (int @code{datatype}, int @code{is_table_column}) Return Gnuastro's type identifier that corresponds to the CFITSIO @code{datatype}. Note that when dealing with CFITSIO's @code{TLONG}, the fixed width type differs between tables and images. So if the corresponding dataset is a table column, put a non-zero value into @code{is_table_column}. @end deftypefun @node FITS HDUs, FITS header keywords, CFITSIO and Gnuastro types, FITS files @subsubsection FITS HDUs A FITS file can contain multiple HDUs/extensions. The functions in this section can be used to get basic information about the extensions or open them. Note that @code{fitsfile} is defined in CFITSIO's @code{fitsio.h} which is automatically included by Gnuastro's @file{gnuastro/fits.h}. @deftypefun {fitsfile *} gal_fits_open_to_write (char @code{*filename}) If @file{filename} exists, open it and return the @code{fitsfile} pointer that corresponds to it. If @file{filename} does not exist, the file will be created which contains a blank first extension and the pointer to its next extension will be returned. @end deftypefun @deftypefun size_t gal_fits_hdu_num (char @code{*filename}) Return the number of HDUs/extensions in @file{filename}. @end deftypefun @deftypefun {unsigned long} gal_fits_hdu_datasum (char @code{*filename}, char @code{*hdu}, char @code{*hdu_option_name}) @cindex @code{DATASUM}: FITS keyword Return the @code{DATASUM} of the given HDU in the given FITS file. For more on @code{DATASUM} in the FITS standard, see @ref{Keyword inspection and manipulation} (under the @code{checksum} component of @option{--write}). For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. @end deftypefun @deftypefun {unsigned long} gal_fits_hdu_datasum_encoded (char @code{*filename}, char @code{*hdu}, char @code{*hdu_option_name}) Similar to @code{gal_fits_hdu_datasum}, but the returned value is always a 16-character string following the encoding that is described in the FITS standard (primarily for the @code{CHECKSUM} keyword, but can also be used for @code{DATASUM}. @end deftypefun @deftypefun {unsigned long} gal_fits_hdu_datasum_ptr (fitsfile @code{*fptr}) @cindex @code{DATASUM}: FITS keyword Return the @code{DATASUM} of the already opened HDU in @code{fptr}. For more on @code{DATASUM} in the FITS standard, see @ref{Keyword inspection and manipulation} (under the @code{checksum} component of @option{--write}). @end deftypefun @deftypefun int gal_fits_hdu_format (char @code{*filename}, char @code{*hdu}, char @code{*hdu_option_name}) Return the format of the HDU as one of CFITSIO's recognized macros: @code{IMAGE_HDU}, @code{ASCII_TBL}, or @code{BINARY_TBL}. For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. @end deftypefun @deftypefun int gal_fits_hdu_is_healpix (fitsfile @code{*fptr}) @cindex HEALPix Return @code{1} if the dataset may be a HEALpix grid and @code{0} otherwise. Technically, it is considered to be a HEALPix if the HDU is not an ASCII table, and has the @code{NSIDE}, @code{FIRSTPIX} and @code{LASTPIX}. @end deftypefun @deftypefun {fitsfile *} gal_fits_hdu_open (char @code{*filename}, char @code{*hdu}, int @code{iomode}, int @code{exitonerror}, char @code{*hdu_option_name}) Open the HDU/extension @code{hdu} from @file{filename} and return a pointer to CFITSIO's @code{fitsfile}. @code{iomode} determines how the FITS file will be opened using CFITSIO's macros: @code{READONLY} or @code{READWRITE}. The string in @code{hdu} will be appended to @file{filename} in square brackets so CFITSIO only opens this extension. You can use any formatting for the @code{hdu} that is acceptable to CFITSIO. See the description under @option{--hdu} in @ref{Input output options} for more. If @code{exitonerror!=0} and the given HDU cannot be opened for any reason, the function will exit the program, and print an informative message. Otherwise, when the HDU cannot be opened, it will just return a NULL pointer. For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. @end deftypefun @deftypefun {fitsfile *} gal_fits_hdu_open_format (char @code{*filename}, char @code{*hdu}, int @code{img0_tab1}, char @code{*hdu_option_name}) Open (in read-only format) the @code{hdu} HDU/extension of @file{filename} as an image or table. When @code{img0_tab1} is @code{0}(zero) but the HDU is a table, this function will abort with an error. It will also abort with an error when @code{img0_tab1} is @code{1} (one), but the HDU is an image. For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. A FITS HDU may contain both tables or images. When your program needs one of these formats, you can call this function so if the user provided the wrong HDU/file, it will abort and inform the user that the file/HDU is has the wrong format. @end deftypefun @node FITS header keywords, FITS arrays, FITS HDUs, FITS files @subsubsection FITS header keywords Each FITS extension/HDU contains a raw dataset which can either be a table or an image along with some header keywords. The keywords can be used to store meta-data about the actual dataset. The functions in this section describe Gnuastro's high-level functions for reading and writing FITS keywords. Similar to all Gnuastro's FITS-related functions, these functions are all wrappers for CFITSIO's low-level functions. The necessary meta-data (header keywords) for a particular dataset are commonly numerous, it is much more efficient to list them in one variable and call the reading/writing functions once. Hence the functions in this section use linked lists, a thorough introduction to them is given in @ref{Linked lists}. To reading FITS keywords, these functions use a list of Gnuastro's generic dataset format that is discussed in @ref{List of gal_data_t}. To write FITS keywords we define the @code{gal_fits_list_key_t} node that is defined below. @deftp {Type (C @code{struct})} gal_fits_list_key_t @cindex Linked list @cindex last-in-first-out @cindex first-in-first-out Structure for writing FITS keywords. This structure is used for one keyword and you do not need to set all elements. With the @code{next} element, you can link it to another keyword thus creating a linked list to add any number of keywords easily and at any step during your program (see @ref{Linked lists} for an introduction on lists). See the functions below for adding elements to the list. @example typedef struct gal_fits_list_key_t @{ int tfree; /* ==1, free title string. */ int kfree; /* ==1, free keyword name. */ int vfree; /* ==1, free keyword value. */ int cfree; /* ==1, free comment. */ int ufree; /* ==1, free unit. */ uint8_t type; /* Keyword value type. */ char *title; /* !=NULL, only print title.*/ char *keyname; /* Keyword Name. */ void *value; /* Keyword value. */ char *comment; /* Keyword comment. */ char *unit; /* Keyword unit. */ struct gal_fits_list_key_t *next; /* Pointer next keyword. */ @} gal_fits_list_key_t; @end example @end deftp @deftypefun int gal_fits_key_exists_fptr (fitsfile @code{*fptr}, char @code{*keyname}) Return 1 (true) if the opened FITS file pointer contains the requested keyword and 0 (false) otherwise. @end deftypefun @deftypefun {void *} gal_fits_key_img_blank (uint8_t @code{type}) Returns a pointer to an allocated space containing the value to the FITS @code{BLANK} header keyword, when the input array has a type of @code{type}. This is useful when you want to write the @code{BLANK} keyword using CFITSIO's @code{fits_write_key} function. According to the FITS standard: ``If the @code{BSCALE} and @code{BZERO} keywords do not have the default values of 1.0 and 0.0, respectively, then the value of the @code{BLANK} keyword must equal the actual value in the FITS data array that is used to represent an undefined pixel and not the corresponding physical value''. Therefore a special @code{BLANK} value is needed for datasets containing signed 8-bit, unsigned 16-bit, unsigned 32-bit, and unsigned 64-bit integers (types that are defined with @code{BSCALE} and @code{BZERO} in the FITS standard). @cartouche @noindent @strong{Not usable when reading a dataset:} As quoted from the FITS standard above, the value returned by this function can only be generically used for the writing of the @code{BLANK} keyword header. It @emph{must not} be used as the blank pointer when when reading a FITS array using CFITSIO. When reading an array with CFITSIO, you can use @code{gal_blank_alloc_write} to generate the necessary pointer. @end cartouche @end deftypefun @deftypefun void gal_fits_key_clean_str_value (char @code{*string}) Remove the single quotes and possible extra spaces around the keyword values that CFITSIO returns when reading a string keyword. CFITSIO does not remove the two single quotes around the string value of a keyword. Hence the strings it reads are like: @code{'value '}, or @code{'some_very_long_value'}. To use the value during your processing, it is commonly necessary to remove the single quotes (and possible extra spaces). This function will do this within the allocated space of the string. @end deftypefun @deftypefun {char *} gal_fits_key_date_to_struct_tm (char @code{*fitsdate}, struct tm @code{*tp}) @cindex Date: FITS format Parse @code{fitsdate} as a FITS date format string (most generally: @code{YYYY-MM-DDThh:mm:ss.ddd...}) into the C library's broken-down time structure, or @code{struct tm} (declared in @file{time.h}) and return a pointer to a newly allocated array for the sub-second part of the format (@code{.ddd...}). Therefore it needs to be freed afterwards (if it is not @code{NULL}) When there is no sub-second portion, this pointer will be @code{NULL}. This is a relatively low-level function, an easier function to use is @code{gal_fits_key_date_to_seconds} which will return the sub-seconds as double precision floating point. Note that the FITS date format mentioned above is the most complete representation. The following two formats are also acceptable: @code{YYYY-MM-DDThh:mm:ss} and @code{YYYY-MM-DD}. This option can also interpret the older FITS date format where only two characters are given to the year and the date format is reversed (@code{DD/MM/YYThh:mm:ss.ddd...}). In this case (following the GNU C Library), this option will make the following assumption: values 68 to 99 correspond to the years 1969 to 1999, and values 0 to 68 as the years 2000 to 2068. @end deftypefun @deftypefun size_t gal_fits_key_date_to_seconds (char @code{*fitsdate}, char @code{**subsecstr}, double @code{*subsec}) @cindex Unix epoch time @cindex Epoch time, Unix Return the Unix epoch time (number of seconds that have passed since 00:00:00 Thursday, January 1st, 1970) corresponding to the FITS date format string @code{fitsdate} (see description of @code{gal_fits_key_date_to_struct_tm} above). This function will return @code{GAL_BLANK_SIZE_T} if the broken-down time could not be converted to seconds. The Unix epoch time is in units of seconds, but the FITS date format allows sub-second accuracy. The last two arguments are for the optional sub-second portion. If you do not want sub-second information, just set the second argument to @code{NULL}. If @code{fitsdate} contains sub-second accuracy and @code{subsecstr!=NULL}, then the starting of the sub-second part's string is stored in @code{subsecstr} (malloc'ed), and @code{subsec} will be the corresponding numerical value (between 0 and 1, in double precision floating point). So to avoid leaking memory, if a sub-second string is requested, it must be freed after calling this function. When a sub-second string does not exist (and it is requested), then a value of @code{NULL} and NaN will be written in @code{*subsecstr} and @code{*subsec} respectively. This is a very useful function for operations on the FITS date values, for example, sorting FITS files by their dates, or finding the time difference between two FITS files. The advantage of working with the Unix epoch time is that you do not have to worry about calendar details (such as the number of days in different months or leap years). @end deftypefun @deftypefun void gal_fits_key_read_from_ptr (fitsfile @code{*fptr}, gal_data_t @code{*keysll}, int @code{readcomment}, int @code{readunit}) Read the list of keyword values from a FITS pointer. The input should be a linked list of Gnuastro's generic data container (@code{gal_data_t}). Before calling this function, you just have to set the @code{name}, and optionally, the desired @code{type} of the value of each keyword. The given @code{name} value will be directly passed to CFITSIO to read the desired keyword name. This function will allocate space to keep the value. If no pre-defined type is requested for a certain keyword's value, the smallest possible type to host the value will be found and used. If @code{readcomment} and @code{readunit} are non-zero, this function will also try to read the possible comments and units of the keyword. Here is one example of using this function: @example /* Allocate an array of datasets. */ gal_data_t *keysll=gal_data_array_calloc(N); /* Make the array usable as a list too (by setting `next'). */ for(i=0;i<N-1;++i) keysll[i].next=&keysll[i+1]; /* Fill the datasets with a `name' and a `type'. */ keysll[0].name="NAME1"; keysll[0].type=GAL_TYPE_INT32; keysll[1].name="NAME2"; keysll[1].type=GAL_TYPE_STRING; ... ... /* Call this function. */ gal_fits_key_read_from_ptr(fptr, keysll, 0, 0); /* Use the values as you like... */ /* Free all the allocated spaces. Note that `name' was not allocated in this example, so we should explicitly set it to NULL before calling `gal_data_array_free'. */ for(i=0;i<N;++i) keysll[i].name=NULL; gal_data_array_free(keysll, N, 1); @end example If the @code{array} pointer of each keyword's dataset is not @code{NULL}, then it is assumed that the space to keep the value has already been allocated. If it is @code{NULL}, space will be allocated for the value by this function. Strings need special consideration: the reason is that generally, @code{gal_data_t} needs to also allow for array of strings (as it supports arrays of integers for example). Hence when reading a string value, two allocations may be done by this function (one if @code{array!=NULL}). Therefore, when using the values of strings after this function, @code{keysll[i].array} must be interpreted as @code{char **}: one allocation for the pointer, one for the actual characters. If you use something like the example, above you do not have to worry about the freeing, @code{gal_data_array_free} will free both allocations. So to read a string, one easy way would be the following: @example char *str, **strarray; strarr = keysll[i].array; str = strarray[0]; @end example If CFITSIO is unable to read a keyword for any reason the @code{status} element of the respective @code{gal_data_t} will be non-zero. If it is zero, then the keyword was found and successfully read. Otherwise, it is a CFITSIO status value. You can use CFITSIO's error reporting tools or @code{gal_fits_io_error} (see @ref{FITS macros errors filenames}) for reporting the reason of the failure. A tip: when the keyword does not exist, CFITSIO's status value will be @code{KEY_NO_EXIST}. CFITSIO will start searching for the keywords from the last place in the header that it searched for a keyword. So it is much more efficient if the order that you ask for keywords is based on the order they are stored in the header. @end deftypefun @deftypefun void gal_fits_key_read (char @code{*filename}, char @code{*hdu}, gal_data_t @code{*keysll}, int @code{readcomment}, int @code{readunit}, char @code{*hdu_option_name}) Same as @code{gal_fits_read_keywords_fptr} (see above), but accepts the filename and HDU as input instead of an already opened CFITSIO @code{fitsfile} pointer. @end deftypefun @deftypefun void gal_fits_key_list_add (gal_fits_list_key_t @code{**list}, uint8_t @code{type}, char @code{*keyname}, int @code{kfree}, void @code{*value}, int @code{vfree}, char @code{*comment}, int @code{cfree}, char @code{*unit}, int @code{ufree}) Add a keyword to the top of list of header keywords that need to be written into a FITS file. In the end, the keywords will have to be freed, so it is important to know before hand if they were allocated or not (hence the presence of the arguments ending in @code{free}). If the space for the respective element is not allocated, set these arguments to @code{0} (zero). You can call this function multiple times on a single list add several keys that will be written in one call to @code{gal_fits_key_write} or @code{gal_fits_key_write_in_ptr}. However, the resulting list will be a last-in-first-out list (for more on lists, see @ref{Linked lists}). Hence, the written keys will have the inverse order of your calls to this function. To avoid this problem, you can either use @code{gal_fits_key_list_add_end} instead (which will add each key to the end of the list, not to the top like this function). Alternatively, you can use @code{gal_fits_key_list_reverse} after adding all the keys with this function. @strong{Important note for strings}: the value should be the pointer to the string its-self (@code{char *}), not a pointer to a pointer (@code{char **}). @end deftypefun @deftypefun void gal_fits_key_list_add_end (gal_fits_list_key_t @code{**list}, uint8_t @code{type}, char @code{*keyname}, int @code{kfree}, void @code{*value}, int @code{vfree}, char @code{*comment}, int @code{cfree}, char @code{*unit}, int @code{ufree}) Similar to @code{gal_fits_key_list_add}, but add the given keyword to the end of the list, see the description of @code{gal_fits_key_list_add} for more. Use this function if you want the keywords to be written in the same order that you add nodes to the list of keywords. @end deftypefun @deftypefun void gal_fits_key_list_title_add (gal_fits_list_key_t @code{**list}, char @code{*title}, int @code{tfree}) Add a special ``title'' keyword (with the @code{title} string) to the top of the keywords list. If @code{cfree} is non-zero, the space allocated for @code{comment} will be freed immediately after writing the keyword (in another function). @end deftypefun @deftypefun void gal_fits_key_list_title_add_end (gal_fits_list_key_t @code{**list}, char @code{*title}, int @code{tfree}) Similar to @code{gal_fits_key_list_title_add}, but put the comments at the end of the list. @end deftypefun @deftypefun void gal_fits_key_list_fullcomment_add (gal_fits_list_key_t @code{**list}, char @code{*comment}, int @code{fcfree}) Add a @code{COMMENT} keyword to the top of the keywords list. If the comment is longer than 70 characters, CFITSIO will automatically break it into multiple @code{COMMENT} keywords. If @code{fcfree} is non-zero, the space allocated for @code{comment} will be freed immediately after writing the keyword (in another function). @end deftypefun @deftypefun void gal_fits_key_list_fullcomment_add_end (gal_fits_list_key_t @code{**list}, char @code{*comment}, int @code{fcfree}) Similar to @code{gal_fits_key_list_comment_add}, but put the comments at the end of the list. @end deftypefun @deftypefun void gal_fits_key_list_add_date (gal_fits_list_key_t @code{**keylist}, char @code{*comment}) Add a @code{DATE} keyword to the input list of keywords containing the date this function was activated in the format of @code{YYYY-MM-DDThh:mm:ss}. This function will also add a @code{DATEUTC} keyword that specifies if the date is in UTC or local time (this depends on CFITSIO being able to detect UTC in the running operating system or not). The comment of the keyword should also be specified as the second argument. The comment is useful to inform users what this date refers to; for example the program starting time, its ending time, or etc. For more, see the description under @code{DATE} in @ref{Output FITS files}. @end deftypefun @deftypefun void gal_fits_key_list_add_software_versions (gal_fits_list_key_t @code{**keylist}) Add the version of Gnuastro @ref{Mandatory dependencies} to the list of keywords. Each software's keyword has the same name as the software itself (for example @code{GNUASTRO} or @code{GSL}. For the full list of software, see @ref{Output FITS files}. @end deftypefun @deftypefun void gal_fits_key_list_add_git_commit (gal_fits_list_key_t @code{**keylist}) If the optional libgit2 dependency is installed and your program is being run in a directory that is under version control, a @code{COMMIT} keyword will be added on the top of the list of keywords. For more, see the description of @code{COMMIT} in @ref{Output FITS files}. @end deftypefun @deftypefun void gal_fits_key_list_reverse (gal_fits_list_key_t @code{**list}) Reverse the input list of keywords. @end deftypefun @deftypefun void gal_fits_key_write_title_in_ptr (char @code{*title}, fitsfile @code{*fptr}) Add two lines of ``title'' keywords to the given CFITSIO @code{fptr} pointer. The first line will be blank and the second will have the string in @code{title} roughly in the middle of the line (a fixed distance from the start of the keyword line). A title in the list of keywords helps in classifying the keywords into groups and inspecting them by eye. If @code{title==NULL}, this function will not do anything. @end deftypefun @deftypefun void gal_fits_key_write_filename (char @code{*keynamebase}, char @code{*filename}, gal_fits_list_key_t @code{**list}, int @code{top1end0}, int @code{quiet}) Put @file{filename} into the @code{gal_fits_list_key_t} list (possibly broken up into multiple keywords) to later write into a HDU header. The @code{keynamebase} string will be appended with a @code{_N} (N>0) and used as the keyword name. If @code{top1end0!=0}, then the keywords containing the filename will be added to the top of the list. The FITS standard sets a maximum length of 69 characters for the string values of a keyword@footnote{The limit is actually 71 characters (which is the full 80 character length, subtracted by 8 for the keyword name and one character for the @key{=}). However, for strings, FITS also requires two single quotes.}. This creates problems with file names (which include directories) because file names/addresses can become longer than the maximum number of characters in a FITS keyword (around 70 characters). Therefore, when @code{filename} is longer than the maximum length of a FITS keyword value, this function will break it into several keywords (breaking up the string on directory separators). So the full file/directory address (including directories) can be longer than 69 characters. However, if a single file or directory name (within a larger address) is longer than 69 characters, this function will truncate the name and print a warning. If @code{quiet!=0}, then the warning will not be printed. @end deftypefun @deftypefun void gal_fits_key_write_wcsstr (fitsfile @code{*fptr}, struct wcsprm @code{wcs}, char @code{*wcsstr}, int @code{nkeyrec}) Write the WCS header string (produced with WCSLIB's @code{wcshdo} function) into the CFITSIO @code{fitsfile} pointer. @code{nkeyrec} is the number of FITS header keywords in @code{wcsstr}. This function will put a few blank keyword lines along with a comment @code{WCS information} before writing each keyword record. @end deftypefun @deftypefun void gal_fits_key_write (gal_fits_list_key_t @code{**keylist}, char @code{*filename}, char @code{*hdu}, char @code{*hdu_option_name}, int @code{freekeys}, int @code{create_fits_not_exists}) Write the list of keywords in @code{keylist} into the @code{hdu} extension of the file called @code{filename}. If the file may not exist before this function is activated, set @code{create_fits_not_exists} to non-zero and set the HDU to @code{"0"}. If the keywords should be freed after they are written, set the @code{freekeys} value to non-zero. For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. The list nodes are meant to be dynamically allocated (because they will be freed after being written). We thus recommend using the @code{gal_fits_key_list_add} or @code{gal_fits_key_list_add_end} to create and fill the list. Below is one fully working example of using this function to write a keyword into an existing FITS file. @example #include <stdio.h> #include <stdlib.h> #include <gnuastro/fits.h> int main() @{ char *filename="test.fits"; gal_fits_list_key_t *keylist=NULL; char *unit="unit"; float value=123.456; char *keyname="MYKEY"; char *comment="A good description of the key"; gal_fits_key_list_add_end(&keylist, GAL_TYPE_FLOAT32, keyname, 0, &value, 0, comment, 0, unit, 0); gal_fits_key_list_title_add(&keylist, "Matching metadata", 0); gal_fits_key_write(&keylist, filename, "1", "NONE", 1, 0); return EXIT_SUCCESS; @} @end example @end deftypefun @deftypefun void gal_fits_key_write_in_ptr (gal_fits_list_key_t @code{**keylist}, fitsfile @code{*fptr}, int @code{freekeys}) Write the list of keywords in @code{keylist} into the given CFITSIO @code{fitsfile} pointer and free keylist. For more on the input @code{keylist}, see the description and example for @code{gal_fits_key_write}, above. @end deftypefun @deftypefun {gal_list_str_t *} gal_fits_with_keyvalue (gal_list_str_t *files, char *hdu, char *name, gal_list_str_t *values, char *hdu_option_name) Given a list of FITS file names (@code{files}), a certain HDU (@code{hdu}), a certain keyword name (@code{name}), and a list of acceptable values (@code{values}), return the subset of file names where the requested keyword name has one of the acceptable values. For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. @end deftypefun @deftypefun {gal_list_str_t *} gal_fits_unique_keyvalues (gal_list_str_t @code{*files}, char @code{*hdu}, char @code{*name}, char @code{*hdu_option_name}) Given a list of FITS file names (@code{files}), a certain HDU (@code{hdu}), a certain keyword name (@code{name}), return the list of unique values to that keyword name in all the files. For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. @end deftypefun @node FITS arrays, FITS tables, FITS header keywords, FITS files @subsubsection FITS arrays (images) Images (or multi-dimensional arrays in general) are one of the common data formats that is stored in FITS files. Only one image may be stored in each FITS HDU/extension. The functions described here can be used to get the information of, read, or write images in FITS files. @deftypefun void gal_fits_img_info (fitsfile @code{*fptr}, int @code{*type}, size_t @code{*ndim}, size_t @code{**dsize}, char @code{**name}, char @code{**unit}) Read the type (see @ref{Library data types}), number of dimensions, and size along each dimension of the CFITSIO @code{fitsfile} into the @code{type}, @code{ndim}, and @code{dsize} pointers respectively. If @code{name} and @code{unit} are not @code{NULL} (point to a @code{char *}), then if the image has a name and units, the respective string will be put in these pointers. @end deftypefun @deftypefun {size_t *} gal_fits_img_info_dim (char @code{*filename}, char @code{*hdu}, size_t @code{*ndim}, char @code{*hdu_option_name}) Put the number of dimensions in the @code{hdu} extension of @file{filename} in the space that @code{ndim} points to and return the size of the dataset along each dimension as an allocated array with @code{*ndim} elements. For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. @end deftypefun @deftypefun {gal_data_t *} gal_fits_img_read (char @code{*filename}, char @code{*hdu}, size_t @code{minmapsize}, int @code{quietmmap}, char @code{*hdu_option_name}) Read the contents of the @code{hdu} extension/HDU of @code{filename} into a Gnuastro generic data container (see @ref{Generic data container}) and return it. If the necessary space is larger than @code{minmapsize}, then do not keep the data in RAM, but in a file on the HDD/SSD. For more on @code{minmapsize} and @code{quietmmap} see the description under the same name in @ref{Generic data container}. For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. Note that this function only reads the main data within the requested FITS extension, the WCS will not be read into the returned dataset. To read the WCS, you can use @code{gal_wcs_read} function as shown below. Afterwards, the @code{gal_data_free} function will free both the dataset and any WCS structure (if there are any). @example data=gal_fits_img_read(filename, hdu, -1, 1, NULL); data->wcs=gal_wcs_read(filename, hdu, 0, 0, 0, &data->wcs->nwcs, NULL); @end example @end deftypefun @deftypefun {gal_data_t *} gal_fits_img_read_to_type (char @code{*inputname}, char @code{*inhdu}, uint8_t @code{type}, size_t @code{minmapsize}, int @code{quietmmap}, char @code{*hdu_option_name}) Read the contents of the @code{hdu} extension/HDU of @code{filename} into a Gnuastro generic data container (see @ref{Generic data container}) of type @code{type} and return it. This is just a wrapper around @code{gal_fits_img_read} (to read the image/array of any type) and @code{gal_data_copy_to_new_type_free} (to convert it to @code{type} and free the initially read dataset). See the description there for more. @end deftypefun @cindex NaN @cindex Convolution kernel @cindex Kernel, convolution @deftypefun {gal_data_t *} gal_fits_img_read_kernel (char @code{*filename}, char @code{*hdu}, size_t @code{minmapsize}, int @code{quietmmap}, char @code{*hdu_option_name}) Read the @code{hdu} of @code{filename} as a convolution kernel. A convolution kernel must have an odd size along all dimensions, it must not have blank (NaN in floating point types) values and must be flipped around the center to make the proper convolution (see @ref{Convolution process}). If there are blank values, this function will change the blank values to @code{0.0}. If the input image does not have the other two requirements, this function will abort with an error describing the condition to the user. The finally returned dataset will have a @code{float32} type. For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. @end deftypefun @deftypefun {fitsfile *} gal_fits_img_write_to_ptr (gal_data_t @code{*input}, char @code{*filename}, gal_fits_list_key_t @code{*keylist}, int @code{freekeys}) Write the @code{input} dataset into a FITS file named @file{filename} and return the corresponding CFITSIO @code{fitsfile} pointer. This function will not close @code{fitsfile}, so you can still add other extensions to it after this function or make other modifications. In case you want to add keywords into the HDU that contain the data, you can use the second two arguments (see the description of @code{gal_fits_key_write}). These keywords will be written into the HDU before writing the data: when there are more than roughly 5 keywords (assuming your dataset has WCS) and your dataset is large, this can result in significant optimization of the running time (because adding a keyword beyond the 36 key slots will cause the whole data to shift for another block of 36 keywords). @end deftypefun @deftypefun void gal_fits_img_write (gal_data_t @code{*data}, char @code{*filename}, gal_fits_list_key_t @code{*keylist}, int @code{freekeys}) Write the @code{input} dataset into the FITS file named @file{filename}. Also add the list of header keywords (@code{keylist}) to the newly created HDU/extension The list of keywords will be freed after writing into the HDU, if you need them later, keep a separate copy of the list before calling this function. For the importance of why it is better to add your keywords in this function (before writing the data) or after it, see the description of @code{gal_fits_img_write_to_ptr}. @end deftypefun @deftypefun void gal_fits_img_write_to_type (gal_data_t @code{*data}, char @code{*filename}, gal_fits_list_key_t @code{*keylist}, int @code{type}, int @code{freekeys}) Convert the @code{input} dataset into @code{type}, then write it into the FITS file named @file{filename}. Also add the @code{keylist} keywords to the newly created HDU/extension along with your program's name (@code{program_string}). After the FITS file is written, this function will free the copied dataset (with type @code{type}) from memory. For the importance of why it is better to add your keywords in this function (before writing the data) or after it, see the description of @code{gal_fits_img_write_to_ptr}. This is just a wrapper for the @code{gal_data_copy_to_new_type} and @code{gal_fits_img_write} functions. @end deftypefun @deftypefun void gal_fits_img_write_corr_wcs_str (gal_data_t @code{*data}, char @code{*filename}, char @code{*wcsstr}, int @code{nkeyrec}, double @code{*crpix}, gal_fits_list_key_t @code{*keylist}, int @code{freekeys}) Write the @code{input} dataset into @file{filename} using the @code{wcsstr} while correcting the @code{CRPIX} values. For the importance of why it is better to add your keywords in this function (before writing the data) or after it, see the description of @code{gal_fits_img_write_to_ptr}. This function is mainly useful when you want to make FITS files in parallel (from one main WCS structure, with just a differing CRPIX), for more on the arguments, see the description of @code{gal_fits_img_write}. This can happen in the following cases for example: @itemize @item When a large number of FITS images (with WCS) need to be created in parallel, it can be much more efficient to write the header's WCS keywords once at first, write them in the FITS file, then just correct the CRPIX values. @item WCSLIB's header writing function is not thread safe. So when writing FITS images in parallel, we cannot write the header keywords in each thread. @end itemize @end deftypefun @node FITS tables, , FITS arrays, FITS files @subsubsection FITS tables Tables are one of the common formats of data that is stored in FITS files. Only one table may be stored in each FITS HDU/extension, but each table column must be viewed as a different dataset (with its own name, units and numeric data type for example). The only constraint of the column datasets in a table is that they must be one-dimensional and have the same number of elements as the other columns. The functions described here can be used to get the information of, read, or write columns into FITS tables. @deftypefun void gal_fits_tab_size (fitsfile @code{*fitsptr}, size_t @code{*nrows}, size_t @code{*ncols}) Read the number of rows and columns in the table within CFITSIO's @code{fitsptr}. @end deftypefun @deftypefun int gal_fits_tab_format (fitsfile @code{*fitsptr}) Return the format of the FITS table contained in CFITSIO's @code{fitsptr}. Recall that FITS tables can be in binary or ASCII formats. This function will return @code{GAL_TABLE_FORMAT_AFITS} or @code{GAL_TABLE_FORMAT_BFITS} (defined in @ref{Table input output}). If the @code{fitsptr} is not a table, this function will abort the program with an error message informing the user of the problem. @end deftypefun @deftypefun {gal_data_t *} gal_fits_tab_info (char @code{*filename}, char @code{*hdu}, size_t @code{*numcols}, size_t @code{*numrows}, int @code{*tableformat}, char @code{*hdu_option_name}) Store the information of each column in @code{hdu} of @code{filename} into an array of data structures with @code{numcols} elements (one data structure for each column) see @ref{Arrays of datasets}. The total number of rows in the table is also put into the memory that @code{numrows} points to. The format of the table (e.g., FITS binary or ASCII table) will be put in @code{tableformat} (macros defined in @ref{Table input output}). For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. This function is just for column information. Therefore it only stores meta-data like column name, units and comments. No actual data (contents of the columns for example, the @code{array} or @code{dsize} elements) will be allocated by this function. This is a low-level function particular to reading tables in FITS format. To be generic, it is recommended to use @code{gal_table_info} which will allow getting information from a variety of table formats based on the filename (see @ref{Table input output}). @end deftypefun @deftypefun {gal_data_t *} gal_fits_tab_read (char @code{*filename}, char @code{*hdu}, size_t @code{numrows}, gal_data_t @code{*colinfo}, gal_list_sizet_t @code{*indexll}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}, char @code{*hdu_option_name}) Read the columns given in the list @code{indexll} from a FITS table (in @file{filename} and HDU/extension @code{hdu}) into the returned linked list of data structures, see @ref{List of size_t} and @ref{List of gal_data_t}. For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. Each column will be read independently, therefore they will be read in @code{numthreads} CPU threads to greatly speed up the reading when there are many columns and rows. However, this only happens if CFITSIO was configured with @option{--enable-reentrant}. This test has been done at Gnuastro's configuration time; if so, @code{GAL_CONFIG_HAVE_FITS_IS_REENTRANT} will have a value of 1, otherwise, it will have a value of 0. For more on this macro, see @ref{Configuration information}). If the necessary space for each column is larger than @code{minmapsize}, do not keep it in the RAM, but in a file in the HDD/SSD. For more on @code{minmapsize} and @code{quietmmap}, see the description under the same name in @ref{Generic data container}. Each column will have @code{numrows} rows and @code{colinfo} contains any further information about the columns (returned by @code{gal_fits_tab_info}, described above). Note that this is a low-level function, so the output data linked list is the inverse of the input indexes linked list. It is recommended to use @code{gal_table_read} for generic reading of tables, see @ref{Table input output}. @end deftypefun @deftypefun void gal_fits_tab_write (gal_data_t @code{*cols}, gal_list_str_t @code{*comments}, int @code{tableformat}, char @code{*filename}, char @code{*extname}, gal_fits_list_key_t @code{*keywords}, int @code{freekeys}) Write the list of datasets in @code{cols} (see @ref{List of gal_data_t}) as separate columns in a FITS table in @code{filename}. If @code{filename} already exists then this function will write the table as a new extension called @code{extname}, after all existing ones. The format of the table (ASCII or binary) may be specified with the @code{tableformat} (see @ref{Table input output}). If @code{comments!=NULL}, each node of the list of strings will be written as a @code{COMMENT} keywords in the output FITS file (see @ref{List of strings}. In case your table needs metadata keywords, you can use the @code{listkeys} and @code{freekeys}. For more on these, see the description of @code{gal_fits_key_write_in_ptr}. This is a low-level function for tables. It is recommended to use @code{gal_table_write} for generic writing of tables in a variety of formats, see @ref{Table input output}. @end deftypefun @node File input output, World Coordinate System, FITS files, Gnuastro library @subsection File input output The most commonly used file format in astronomical data analysis is the FITS format (see @ref{Fits} for an introduction), therefore Gnuastro's library provides a large and separate collection of functions to read/write data from/to them (see @ref{FITS files}). However, FITS is not well recognized outside the astronomical community and cannot be imported into documents or slides. Therefore, in this section, we discuss the other different file formats that Gnuastro's library recognizes. @menu * Text files:: Reading and writing from/to plain text files. * TIFF files:: Reading and writing from/to TIFF files. * JPEG files:: Reading and writing from/to JPEG files. * EPS files:: Writing to EPS files. * PDF files:: Writing to PDF files. @end menu @node Text files, TIFF files, File input output, File input output @subsubsection Text files (@file{txt.h}) The most universal and portable format for data storage are plain text files. They can be viewed and edited on any text editor or even on the command-line. This section are describes some functions that help in reading from and writing to plain text files. @cindex CRLF line terminator @cindex Line terminator, CRLF Lines are one of the most basic building blocks (delimiters) of a text file. Some operating systems like Microsoft Windows, terminate their ASCII text lines with a carriage return character and a new-line character (two characters, also known as CRLF line terminators). While Unix-like operating systems just use a single new-line character. The functions below that read an ASCII text file are able to identify lines with both kinds of line terminators. Gnuastro defines a simple format for metadata of table columns in a plain text file that is discussed in @ref{Gnuastro text table format}. The functions to get information from, read from and write to plain text files also follow those conventions. @deffn Macro GAL_TXT_LINESTAT_INVALID @deffnx Macro GAL_TXT_LINESTAT_BLANK @deffnx Macro GAL_TXT_LINESTAT_COMMENT @deffnx Macro GAL_TXT_LINESTAT_DATAROW Status codes for lines in a plain text file that are returned by @code{gal_txt_line_stat}. Lines which have a @key{#} character as their first non-white character are considered to be comments. Lines with nothing but white space characters are considered blank. The remaining lines are considered as containing data. @end deffn @deftypefun int gal_txt_line_stat (char @code{*line}) Check the contents of @code{line} and see if it is a blank, comment, or data line. The returned values are the macros that start with @code{GAL_TXT_LINESTAT}. @end deftypefun @deftypefun {char *} gal_txt_trim_space (char @code{*str}) Trim the white space characters before and after the given string. The operation is done within the allocated space of the string, so if you need the string untouched, please pass an allocated copy of the string to this function. The returned pointer is within the input string. If the input pointer is @code{NULL}, or the string only has white-space characters, the returned pointer will be @code{NULL}. @end deftypefun @deftypefun int gal_txt_contains_string (char @code{*full}, char @code{*match}) Return 1 if the string that @code{match} points to, can be exactly found within the string that @code{full} points to (character by character). The to-match string can be in any part of the full string. If any of the two strings have zero length or are a @code{NULL} pointer, this function will return 0. @end deftypefun @deftypefun {gal_data_t *} gal_txt_table_info (char @code{*filename}, gal_list_str_t @code{*lines}, size_t @code{*numcols}, size_t @code{*numrows}) Store the information of each column in a text file @code{filename}, or list of strings (@code{lines}) into an array of data structures with @code{numcols} elements (one data structure for each column) see @ref{Arrays of datasets}. The total number of rows in the table is also put into the memory that @code{numrows} points to. @code{lines} is a list of strings with each node representing one line (including the new-line character), see @ref{List of strings}. It will mostly be the output of @code{gal_txt_stdin_read}, which is used to read the program's input as separate lines from the standard input (see below). Note that @code{filename} and @code{lines} are mutually exclusive and one of them must be @code{NULL}. This function is just for column information. Therefore it only stores meta-data like column name, units and comments. No actual data (contents of the columns for example, the @code{array} or @code{dsize} elements) will be allocated by this function. This is a low-level function particular to reading tables in plain text format. To be generic, it is recommended to use @code{gal_table_info} which will allow getting information from a variety of table formats based on the filename (see @ref{Table input output}). @end deftypefun @deftypefun {gal_data_t *} gal_txt_table_read (char @code{*filename}, gal_list_str_t @code{*lines}, size_t @code{numrows}, gal_data_t @code{*colinfo}, gal_list_sizet_t @code{*indexll}, size_t @code{minmapsize}, int @code{quietmmap}) Read the columns given in the list @code{indexll} from a plain text file (@code{filename}) or list of strings (@code{lines}), into a linked list of data structures (see @ref{List of size_t} and @ref{List of gal_data_t}). If the necessary space for each column is larger than @code{minmapsize}, do not keep it in the RAM, but in a file on the HDD/SSD. For more one @code{minmapsize} and @code{quietmmap}, see the description under the same name in @ref{Generic data container}. @code{lines} is a list of strings with each node representing one line (including the new-line character), see @ref{List of strings}. It will mostly be the output of @code{gal_txt_stdin_read}, which is used to read the program's input as separate lines from the standard input (see below). Note that @code{filename} and @code{lines} are mutually exclusive and one of them must be @code{NULL}. Note that this is a low-level function, so the output data list is the inverse of the input indices linked list. It is recommended to use @code{gal_table_read} for generic reading of tables in any format, see @ref{Table input output}. @end deftypefun @deftypefun {gal_data_t *} gal_txt_image_read (char @code{*filename}, gal_list_str_t @code{*lines}, size_t @code{minmapsize}, int @code{quietmmap}) Read the 2D plain text dataset in file (@code{filename}) or list of strings (@code{lines}) into a dataset and return the dataset. If the necessary space for the image is larger than @code{minmapsize}, do not keep it in the RAM, but in a file on the HDD/SSD. For more on @code{minmapsize} and @code{quietmmap}, see the description under the same name in @ref{Generic data container}. @code{lines} is a list of strings with each node representing one line (including the new-line character), see @ref{List of strings}. It will mostly be the output of @code{gal_txt_stdin_read}, which is used to read the program's input as separate lines from the standard input (see below). Note that @code{filename} and @code{lines} are mutually exclusive and one of them must be @code{NULL}. @end deftypefun @deftypefun {gal_list_str_t *} gal_txt_stdin_read (long @code{timeout_microsec}) @cindex Standard input Read the complete standard input and return a list of strings with each line (including the new-line character) as one node of that list. If the standard input is already filled (for example, connected to another program's output with a pipe), then this function will parse the whole stream. If Standard input is not pre-configured and the @emph{first line} is typed/written in the terminal before @code{timeout_microsec} micro-seconds, it will continue parsing until reaches an end-of-file character (@key{CTRL-D} after a new-line on the keyboard) with no time limit. If nothing is entered before @code{timeout_microsec} micro-seconds, it will return @code{NULL}. All the functions that can read plain text tables will accept a filename as well as a list of strings (intended to be the output of this function for using Standard input). The reason for keeping the standard input is that once something is read from the standard input, it is hard to put it back. We often need to read a text file several times: once to count how many columns it has and which ones are requested, and another time to read the desired columns. So it easier to keep it all in allocated memory and pass it on from the start for each round. @end deftypefun @deftypefun {gal_list_str_t *} gal_txt_read_to_list (char *filename) Read the contents of the given plain-text file and put each word (separated by a SPACE character, into a new node of the output list. The order of nodes in the output is the same as the input. Any new-line character at the end of a word is removed in the output list. @end deftypefun @deftypefun void gal_txt_write (gal_data_t @code{*cols}, struct gal_fits_list_key_t @code{**keylist}, gal_list_str_t @code{*comment}, char @code{*filename}, uint8_t @code{colinfoinstdout}, int @code{tab0_img1}, int @code{freekeys}) Write @code{cols} in a plain text file @code{filename} (table when @code{tab0_img1==0} and image when @code{tab0_img1==1}). @code{cols} may have one or two dimensions which determines the output: @table @asis @item 1D @code{cols} is treated as a column and a list of datasets (see @ref{List of gal_data_t}): every node in the list is written as one column in a table. @item 2D @code{cols} is a two dimensional array, it cannot be treated as a list (only one 2D array can currently be written to a text file). So if @code{cols->next!=NULL} the next nodes in the list are ignored and will not be written. @end table This is a low-level function for tables. It is recommended to use @code{gal_table_write} for generic writing of tables in a variety of formats, see @ref{Table input output}. It is possible to add two types of metadata to the printed table: comments and keywords. Each string in the list given to @code{comments} will be printed into the file as a separate line, starting with @code{#}. Keywords have a more specific and computer-parsable format and are passed through @code{keylist}. Each keyword is also printed in one line, but with the format below. Because of the various components in a keyword, it is thus necessary to use the @code{gal_fits_list_key_t} data structure. For more, see @ref{FITS header keywords}. @example # [key] NAME: VALUE / [UNIT] KEYWORD COMMENT. @end example If @code{filename} already exists this function will abort with an error and will not write over the existing file. Before calling this function make sure if the file exists or not. If @code{comments!=NULL}, a @code{#} will be put at the start of each node of the list of strings and will be written in the file before the column meta-data in @code{filename} (see @ref{List of strings}). When @code{filename==NULL}, the column information will be printed on the standard output (command-line). When @code{colinfoinstdout!=0} and @code{filename==NULL} (columns are printed in the standard output), the dataset metadata will also printed in the standard output. When printing to the standard output, the column information can be piped into another program for further processing and thus the meta-data (lines starting with a @code{#}) must be ignored. In such cases, you only print the column values by passing @code{0} to @code{colinfoinstdout}. @end deftypefun @node TIFF files, JPEG files, Text files, File input output @subsubsection TIFF files (@file{tiff.h}) @cindex TIFF format Outside of astronomy, the TIFF standard is arguably the most commonly used format to store high-precision data/images. Unlike FITS however, the TIFF standard only supports images (not tables), but like FITS, it has support for all standard data types (see @ref{Numeric data types}) which is the primary reason other fields use it. Another similarity of the TIFF and FITS standards is that TIFF supports multiple images in one file. The TIFF standard calls each one of these images (and their accompanying meta-data) a `directory' (roughly equivalent to the FITS extensions). Unlike FITS however, the directories can only be identified by their number (counting from zero), recall that in FITS you can also use the extension name to identify it. The functions described here allow easy reading (and later writing) of TIFF files within Gnuastro or for users of Gnuastro's libraries. Currently only reading is supported, but if you are interested, please get in touch with us. @deftypefun {int} gal_tiff_name_is_tiff (char @code{*name}) Return @code{1} if @code{name} has a TIFF suffix. This can be used to make sure that a given input file is TIFF. See @code{gal_tiff_suffix_is_tiff} for a list of recognized suffixes. @end deftypefun @deftypefun {int} gal_tiff_suffix_is_tiff (char @code{*name}) Return @code{1} if @code{suffix} is a recognized TIFF suffix. The recognized suffixes are @file{tif}, @file{tiff}, @file{TIFF} and @file{TIFF}. @end deftypefun @deftypefun {size_t} gal_tiff_dir_string_read (char @code{*string}) Return the number within @code{string} as a @code{size_t} number to identify a TIFF directory. Note that the directories start counting from zero. @end deftypefun @deftypefun {gal_data_t *} gal_tiff_read (char @code{*filename}, size_t @code{dir}, size_t @code{minmapsize}, int @code{quietmmap}) Read the @code{dir} directory within the TIFF file @code{filename} and return the contents of that TIFF directory as @code{gal_data_t}. If the directory's image contains multiple channels, the output will be a list (see @ref{List of gal_data_t}). @end deftypefun @deftypefun {void} gal_tiff_write (gal_data_t @code{*in}, char @code{*filename}, int @code{widthinpx}, int @code{heightinpix}, int @code{bitspersample}, int @code{numimg}) Write the given dataset (@code{in}) into @file{filename} (a TIFF file) with the specified image width in pixels (@code{widthinpix}),height in pixels (@code{heightinpix}), bits per sample (@code{bitspersample}), and number of images (@code{numimg}). @end deftypefun @node JPEG files, EPS files, TIFF files, File input output @subsubsection JPEG files (@file{jpeg.h}) @cindex JPEG format The JPEG file format is one of the most common formats for storing and transferring images, recognized by almost all image rendering and processing programs. In particular, because of its lossy compression algorithm, JPEG files can have low volumes, making it used heavily on the internet. For more on this file format, and a comparison with others, please see @ref{Recognized file formats}. For scientific purposes, the lossy compression and very limited dynamic range (8-bit integers) make JPEG very unattractive for storing of valuable data. However, because of its commonality, it will inevitably be needed in some situations. The functions here can be used to read and write JPEG images into Gnuastro's @ref{Generic data container}. If the JPEG file has more than one color channel, each channel is treated as a separate node in a list of datasets (see @ref{List of gal_data_t}). @deftypefun {int} gal_jpeg_name_is_jpeg (char @code{*name}) Return @code{1} if @code{name} has a JPEG suffix. This can be used to make sure that a given input file is JPEG. See @code{gal_jpeg_suffix_is_jpeg} for a list of recognized suffixes. @end deftypefun @deftypefun {int} gal_jpeg_suffix_is_jpeg (char @code{*name}) Return @code{1} if @code{suffix} is a recognized JPEG suffix. The recognized suffixes are @code{.jpg}, @code{.JPG}, @code{.jpeg}, @code{.JPEG}, @code{.jpe}, @code{.jif}, @code{.jfif} and @code{.jfi}. @end deftypefun @deftypefun {gal_data_t *} gal_jpeg_read (char @code{*filename}, size_t @code{minmapsize}, int @code{quietmmap}) Read the JPEG file @code{filename} and return the contents as @code{gal_data_t}. If the directory's image contains multiple colors/channels, the output will be a list with one node per color/channel (see @ref{List of gal_data_t}). @end deftypefun @cindex JPEG compression quality @deftypefun {void} gal_jpeg_write (gal_data_t @code{*in}, char @code{*filename}, uint8_t @code{quality}, float @code{widthincm}) Write the given dataset (@code{in}) into @file{filename} (a JPEG file). If @code{in} is a list, then each node in the list will be a color channel, therefore there can only be 1, 3 or 4 nodes in the list. If the number of nodes is different, then this function will abort the program with a message describing the cause. The lossy JPEG compression level can be set through @code{quality} which is a value between 0 and 100 (inclusive, 100 being the best quality). The display width of the JPEG file in units of centimeters (to suggest to viewers/users, only a meta-data) can be set through @code{widthincm}. @end deftypefun @node EPS files, PDF files, JPEG files, File input output @subsubsection EPS files (@file{eps.h}) The Encapsulated PostScript (EPS) format is commonly used to store images (or individual/single-page parts of a document) in the PostScript documents. For a more complete introduction, please see @ref{Recognized file formats}. To provide high quality graphics, the Postscript language is a vectorized format, therefore pixels (elements of a ``rasterized'' format) are not defined in their context. To display rasterized images, PostScript does allow arrays of pixels. However, since the over-all EPS file may contain many vectorized elements (for example, borders, text, or other lines over the text) and interpreting them is not trivial or necessary within Gnuastro's scope, Gnuastro only provides some functions to write a dataset (in the @code{gal_data_t} format, see @ref{Generic data container}) into EPS. @deffn Macro GAL_EPS_MARK_COLNAME_TEXT @deffnx Macro GAL_EPS_MARK_COLNAME_FONT @deffnx Macro GAL_EPS_MARK_COLNAME_XPIX @deffnx Macro GAL_EPS_MARK_COLNAME_YPIX @deffnx Macro GAL_EPS_MARK_COLNAME_SHAPE @deffnx Macro GAL_EPS_MARK_COLNAME_COLOR @deffnx Macro GAL_EPS_MARK_COLNAME_SIZE1 @deffnx Macro GAL_EPS_MARK_COLNAME_SIZE2 @deffnx Macro GAL_EPS_MARK_COLNAME_ROTATE @deffnx Macro GAL_EPS_MARK_COLNAME_FONTSIZE @deffnx Macro GAL_EPS_MARK_COLNAME_LINEWIDTH Name of column that the required property will be read from. @end deffn @deffn Macro GAL_EPS_MARK_DEFAULT_SHAPE @deffnx Macro GAL_EPS_MARK_DEFAULT_COLOR @deffnx Macro GAL_EPS_MARK_DEFAULT_SIZE1 @deffnx Macro GAL_EPS_MARK_DEFAULT_SIZE2 @deffnx Macro GAL_EPS_MARK_DEFAULT_SIZE2_ELLIPSE @deffnx Macro GAL_EPS_MARK_DEFAULT_ROTATE @deffnx Macro GAL_EPS_MARK_DEFAULT_LINEWIDTH @deffnx Macro GAL_EPS_MARK_DEFAULT_FONT @deffnx Macro GAL_EPS_MARK_DEFAULT_FONTSIZE Default values for the various mark properties. These constants will be used if the caller has not provided any of the given property. @end deffn @deftypefun {int} gal_eps_name_is_eps (char @code{*name}) Return @code{1} if @code{name} has an EPS suffix. This can be used to make sure that a given input file is EPS. See @code{gal_eps_suffix_is_eps} for a list of recognized suffixes. @end deftypefun @deftypefun {int} gal_eps_suffix_is_eps (char @code{*name}) Return @code{1} if @code{suffix} is a recognized EPS suffix. The recognized suffixes are @code{.eps}, @code{.EPS}, @code{.epsf}, @code{.epsi}. @end deftypefun @deftypefun {void} gal_eps_to_pt (float @code{widthincm}, size_t @code{*dsize}, size_t @code{*w_h_in_pt}) Given a specific width in centimeters (@code{widthincm} and the number of he dataset's pixels in each dimension (@code{dsize}) calculate the size of he output in PostScript points. The output values are written in the @code{w_h_in_pt} array (which has to be allocated before calling this unction). The first element in @code{w_h_in_pt} is the width and the second is the height of the image. @end deftypefun @deftypefun uint8_t gal_eps_shape_name_to_id (char *name) Return the shape ID of a mark from its name (which is not case-sensitive). @end deftypefun @deftypefun uint8_t gal_eps_shape_id_to_name (uint8_t id) Return the shape name from its ID. @end deftypefun @deftypefun {void} gal_eps_write (gal_data_t @code{*in}, char @code{*filename}, float @code{widthincm}, uint32_t @code{borderwidth}, uint8_t @code{bordercolor}, int @code{hex}, int @code{dontoptimize}, int @code{forps}, gal_data_t @code{*marks}) Write the @code{in} dataset into an EPS file called @code{filename}. @code{in} has to be an unsigned 8-bit character type @code{GAL_TYPE_UINT8}, see @ref{Numeric data types}). The desired width of the image in human/non-pixel units can be set with he @code{widthincm} argument. If @code{borderwidth} is non-zero, it is interpreted as the width (in points) of a solid black border around the mage. A border can helpful when importing the EPS file into a document. The color of the border can be set with @code{bordercolor}, use the macros in @ref{Color functions}. If @code{forpdf} is not zero, the output can be imported into a Postscript file directly (not as an ``encapsulated'' postscript, which is the default). @cindex ASCII85 encoding @cindex Hexadecimal encoding EPS files are plain-text (can be opened/edited in a text editor), therefore there are different encodings to store the data (pixel values) within them. Gnuastro supports the Hexadecimal and ASCII85 encoding. ASCII85 is more efficient (producing small file sizes), so it is the default encoding. To use Hexadecimal encoding, set @code{hex} to a non-zero value. @cindex PDF @cindex EPS @cindex PostScript By default, when the dataset only has two values, this function will use the PostScript optimization that allows setting the pixel values per bit, not byte (@ref{Recognized file formats}). This can greatly help reduce the file size. However, when @option{dontoptimize!=0}, this optimization is disabled: even though there are only two values (is binary), the difference between them does not correspond to the full contrast of black and white. If @code{marks!=NULL}, it is assumed to contain multiple columns of information to draw marks over the background image. The multiple columns are a linked list of 1D @code{gal_data_t} of the same size (number of rows) that are connected to each other through the @code{next} element (this is the same format that Gnuastro's library uses for tables, see @ref{Table input output} or @ref{Library demo - reading and writing table columns}). The macros defined above that have the format of @code{GAL_EPS_MARK_COLNAME_*} show all the possible columns that you can provide in this linked list. Only the two coordinate columns are mandatory (@code{GAL_EPS_MARK_COLNAME_XPIX} and @code{GAL_EPS_MARK_COLNAME_YPIX}. If any of the other properties is not in the linked list, then the default properties of the @code{GAL_EPS_MARK_DEFAULT_*} macros will be used (also defined above. The columns are identified based on the @code{name} element of Gnuastro's generic data structure (see @ref{Generic data container}). The names must have the pre-defined names of the @code{GAL_EPS_MARK_COLNAME_*} macros (case sensitive). Therefore, the order of columns in the list is irrelevant! @end deftypefun @node PDF files, , EPS files, File input output @subsubsection PDF files (@file{pdf.h}) The portable document format (PDF) has arguably become the most common format used for distribution of documents. In practice, a PDF file is just a compiled PostScript file. For a more complete introduction, please see @ref{Recognized file formats}. To provide high quality graphics, the PDF is a vectorized format, therefore pixels (elements of a ``rasterized'' format) are not defined in their context. As a result, similar to @ref{EPS files}, Gnuastro only writes datasets to a PDF file, not vice-versa. @deftypefun {int} gal_pdf_name_is_pdf (char @code{*name}) Return @code{1} if @code{name} has an PDF suffix. This can be used to make sure that a given input file is PDF. See @code{gal_pdf_suffix_is_pdf} for a list of recognized suffixes. @end deftypefun @deftypefun {int} gal_pdf_suffix_is_pdf (char @code{*name}) Return @code{1} if @code{suffix} is a recognized PDF suffix. The recognized suffixes are @code{.pdf} and @code{.PDF}. @end deftypefun @deftypefun {void} gal_pdf_write (gal_data_t @code{*in}, char @code{*filename}, float @code{widthincm}, uint32_t @code{borderwidth}, uint8_t @code{bordercolor}, int @code{dontoptimize}, gal_data_t @code{*marks}) Write the @code{in} dataset into an EPS file called @code{filename}. @code{in} has to be an unsigned 8-bit character type (@code{GAL_TYPE_UINT8}, see @ref{Numeric data types}). The desired width of the image in human/non-pixel units can be set with the @code{widthincm} argument. If @code{borderwidth} is non-zero, it is interpreted as the width (in points) of a solid black border around the image. A border can helpful when importing the PDF file into a document. The color of the border can be set with @code{bordercolor}, use the macros in @ref{Color functions}. This function is just a wrapper for the @code{gal_eps_write} function in @ref{EPS files}. After making the EPS file, Ghostscript (with a version of 9.10 or above, see @ref{Optional dependencies}) will be used to compile the EPS file to a PDF file. Therefore if Ghostscript does not exist, does not have the proper version, or fails for any other reason, the EPS file will remain. It can be used to find the cause, or use another converter or PostScript compiler. @cindex PDF @cindex EPS @cindex PostScript By default, when the dataset only has two values, this function will use the PostScript optimization that allows setting the pixel values per bit,not byte (@ref{Recognized file formats}). This can greatly help reduce the file size. However, when @option{dontoptimize!=0}, this optimization is disabled: even though there are only two values (is binary), the difference between them does not correspond to the full contrast of black and white. If @code{marks!=NULL}, it is assumed to contain information on how to draw marks over the image. This is directly fed to the @code{gal_eps_write} function, so for more on how to provide the mark information, see the description of @code{gal_eps_write} in @ref{EPS files}. @end deftypefun @node World Coordinate System, Arithmetic on datasets, File input output, Gnuastro library @subsection World Coordinate System (@file{wcs.h}) The FITS standard defines the world coordinate system (WCS) as a mechanism to associate physical values to positions within a dataset. For example, it can be used to convert pixel coordinates in an image to celestial coordinates like the right ascension and declination. The functions in this section are mainly just wrappers over CFITSIO, WCSLIB and GSL library functions to help in common applications. @cindex Thread safety @cindex WCSLIB thread safety [@strong{Tread safety}] Since WCSLIB version 5.18 (released in January 2018), most WCSLIB functions are thread safe@footnote{@url{https://www.atnf.csiro.au/people/mcalabre/WCS/wcslib/threads.html}}. Gnuastro has high-level functions to easily spin-off threads and speed up your programs. For a fully working example see @ref{Library demo - multi-threaded operation}. However you still need to be cautious in the following scenarios below. @itemize @item Many users or operating systems may still use an older version. @item The @code{wcsprm} structure of WCSLIB is not thread-safe: you can't use the same pointer on multiple threads. For example, if you use @code{gal_wcs_img_to_world} simultaneously on multiple threads, you shouldn't pass the same @code{wcsprm} structure pointer. You can use @code{gal_wcs_copy} to keep and use separate copies the main structure within each thread, and later free the copies with @code{gal_wcs_free}. @end itemize The full set of functions and global constants that are defined by Gnuastro's @file{gnuastro/wcs.h} are described below. @deffn {Global integer} GAL_WCS_DISTORTION_TPD @deffnx {Global integer} GAL_WCS_DISTORTION_SIP @deffnx {Global integer} GAL_WCS_DISTORTION_TPV @deffnx {Global integer} GAL_WCS_DISTORTION_DSS @deffnx {Global integer} GAL_WCS_DISTORTION_WAT @deffnx {Global integer} GAL_WCS_DISTORTION_INVALID @cindex WCS distortion @cindex Distortion, WCS @cindex TPD WCS distortion @cindex SIP WCS distortion @cindex TPV WCS distortion @cindex DSS WCS distortion @cindex WAT WCS distortion @cindex Prior WCS distortion @cindex sequent WCS distortion Gnuastro identifiers of the various WCS distortion conventions, for more, see Calabretta et al. (2004, preprint)@footnote{@url{https://www.atnf.csiro.au/people/mcalabre/WCS/dcs_20040422.pdf}}. Among these, SIP is a prior distortion, the rest other are sequent distortions. TPD is a superset of all these, hence it has both prior and sequeal distortion coefficients. More information is given in the documentation of @code{dis.h}, from the WCSLIB manual@footnote{@url{https://www.atnf.csiro.au/people/mcalabre/WCS/wcslib/dis_8h.html}}. @end deffn @deffn {Global integer} GAL_WCS_COORDSYS_EQB1950 @deffnx {Global integer} GAL_WCS_COORDSYS_EQJ2000 @deffnx {Global integer} GAL_WCS_COORDSYS_ECB1950 @deffnx {Global integer} GAL_WCS_COORDSYS_ECJ2000 @deffnx {Global integer} GAL_WCS_COORDSYS_GALACTIC @deffnx {Global integer} GAL_WCS_COORDSYS_SUPERGALACTIC @deffnx {Global integer} GAL_WCS_COORDSYS_INVALID @cindex Galactic coordinate system @cindex Ecliptic coordinate system @cindex Equatorial coordinate system @cindex Supergalactic coordinate system @cindex Coordinate system: Galactic @cindex Coordinate system: Ecliptic @cindex Coordinate system: Equatorial @cindex Coordinate system: Supergalactic Recognized WCS coordinate systems in Gnuastro. @code{EQ} and @code{EC} stand for the EQuatorial and ECliptic coordinate systems. In the equatorial and ecliptic coordinates, @code{B1950} stands for the Besselian 1950 epoch and @code{J2000} stands for the Julian 2000 epoch. @end deffn @deffn {Global integer} GAL_WCS_LINEAR_MATRIX_PC @deffnx {Global integer} GAL_WCS_LINEAR_MATRIX_CD @deffnx {Global integer} GAL_WCS_LINEAR_MATRIX_INVALID Identifiers of the linear transformation matrix: either in the @code{PCi_j} or the @code{CDi_j} formalism. For more, see the description of @option{--wcslinearmatrix} in @ref{Input output options}. @end deffn @deffn {Global integer} GAL_WCS_PROJECTION_AZP @deffnx {Global integer} GAL_WCS_PROJECTION_SZP @deffnx {Global integer} GAL_WCS_PROJECTION_TAN @deffnx {Global integer} GAL_WCS_PROJECTION_STG @deffnx {Global integer} GAL_WCS_PROJECTION_SIN @deffnx {Global integer} GAL_WCS_PROJECTION_ARC @deffnx {Global integer} GAL_WCS_PROJECTION_ZPN @deffnx {Global integer} GAL_WCS_PROJECTION_ZEA @deffnx {Global integer} GAL_WCS_PROJECTION_AIR @deffnx {Global integer} GAL_WCS_PROJECTION_CYP @deffnx {Global integer} GAL_WCS_PROJECTION_CEA @deffnx {Global integer} GAL_WCS_PROJECTION_CAR @deffnx {Global integer} GAL_WCS_PROJECTION_MER @deffnx {Global integer} GAL_WCS_PROJECTION_SFL @deffnx {Global integer} GAL_WCS_PROJECTION_PAR @deffnx {Global integer} GAL_WCS_PROJECTION_MOL @deffnx {Global integer} GAL_WCS_PROJECTION_AIT @deffnx {Global integer} GAL_WCS_PROJECTION_COP @deffnx {Global integer} GAL_WCS_PROJECTION_COE @deffnx {Global integer} GAL_WCS_PROJECTION_COD @deffnx {Global integer} GAL_WCS_PROJECTION_COO @deffnx {Global integer} GAL_WCS_PROJECTION_BON @deffnx {Global integer} GAL_WCS_PROJECTION_PCO @deffnx {Global integer} GAL_WCS_PROJECTION_TSC @deffnx {Global integer} GAL_WCS_PROJECTION_CSC @deffnx {Global integer} GAL_WCS_PROJECTION_QSC @deffnx {Global integer} GAL_WCS_PROJECTION_HPX @deffnx {Global integer} GAL_WCS_PROJECTION_XPH The various types of recognized FITS WCS projections; for more details see @ref{Align pixels with WCS considering distortions}. @end deffn @deffn Macro GAL_WCS_FLTERROR Limit of rounding for floating point errors. @end deffn @deftypefun int gal_wcs_distortion_name_to_id (char @code{*name}) Convert the given string (assumed to be a FITS-standard, string-based distortion identifier) to a Gnuastro's integer-based distortion identifier (one of the @code{GAL_WCS_DISTORTION_*} macros defined above). The sting-based distortion identifiers have three characters and are all in capital letters. @end deftypefun @deftypefun int gal_wcs_distortion_name_from_id (int @code{id}) Convert the given Gnuastro integer-based distortion identifier (one of the @code{GAL_WCS_DISTORTION_*} macros defined above) to the string-based distortion identifier) of the FITS standard. The sting-based distortion identifiers have three characters and are all in capital letters. @end deftypefun @deftypefun int gal_wcs_coordsys_name_to_id (char @code{*name}) Convert the given string to Gnuastro's integer-based WCS coordinate system identifier (one of the @code{GAL_WCS_COORDSYS_*}, listed above). The expected strings can be seen in the description of the @option{--wcscoordsys} option of the Fits program, see @ref{Keyword inspection and manipulation}. @end deftypefun @deftypefun int gal_wcs_distortion_name_to_id (char @code{*name}) Convert the given string (assumed to be a FITS-standard, string-based distortion identifier) to a Gnuastro's integer-based distortion identifier (one of the @code{GAL_WCS_DISTORTION_*} macros defined above). The sting-based distortion identifiers have three characters and are all in capital letters. @end deftypefun @deftypefun int gal_wcs_projection_name_from_id (int @code{id}) Convert the given Gnuastro integer-based projection identifier (one of the @code{GAL_WCS_PROJECTION_*} macros defined above) to the string-based distortion identifier) of the FITS standard. The string-based projection identifiers have three characters and are all in capital letters. For a description of the various projections, see @ref{Align pixels with WCS considering distortions}. @end deftypefun @deftypefun int gal_wcs_projection_name_to_id (char @code{*name}) Convert the given string (assumed to be a FITS-standard, string-based projection identifier) to a Gnuastro's integer-based projection identifier (one of the @code{GAL_WCS_PROJECTION_*} macros defined above). The string-based projection identifiers have three characters and are all in capital letters. For a description of the various projections, see @ref{Align pixels with WCS considering distortions}. @end deftypefun @deftypefun {struct wcsprm *} gal_wcs_create (double @code{*crpix}, double @code{*crval}, double @code{*cdelt}, double @code{*pc}, char @code{**cunit}, char @code{**ctype}, size_t @code{ndim}, int @code{linearmatrix}) Given all the most common standard components of the WCS standard, construct a @code{struct wcsprm}, initialize and set it for future processing. See the FITS WCS standard for more on these keywords. All the arrays must have @code{ndim} elements with them except for @code{pc} which should have @code{ndim*ndim} elements (a square matrix). Also, @code{cunit} and @code{ctype} are arrays of strings. If @code{GAL_WCS_LINEAR_MATRIX_CD} is passed to @code{linearmatrix} then the output WCS structure will have a CD matrix (even though you have given a PC and CDELT matrix as input to this function). Otherwise, the output will have a PC and CDELT matrix (which is the recommended format by WCSLIB). @example @verbatim #include <stdio.h> #include <stdlib.h> #include <gnuastro/wcs.h> int main(void) { int status; size_t ndim=2; struct wcsprm *wcs; double crpix[]={50, 50}; double pc[]={-1, 0, 0, 1}; double cdelt[]={0.4, 0.4}; double crval[]={178.23, 36.98}; char *cunit[]={"deg", "deg"}; char *ctype[]={"RA---TAN", "DEC--TAN"}; int linearmatrix = GAL_WCS_LINEAR_MATRIX_PC; /* Allocate and fill the 'wcsprm' structure. */ wcs=gal_wcs_create(crpix, crval, cdelt, pc, cunit, ctype, ndim, linearmatrix); printf("WCS structure created.\n"); /*... Add any operation with the WCS structure here ...*/ /* Free the WCS structure. */ gal_wcs_free(wcs); printf("WCS structure freed.\n"); /* Return successfully. */ return EXIT_SUCCESS; } @end verbatim @end example @end deftypefun @deftypefun {struct wcsprm *} gal_wcs_read_fitsptr (fitsfile @code{*fptr}, int @code{linearmatrix}, size_t @code{hstartwcs}, size_t @code{hendwcs}, int @code{*nwcs}) Return the WCSLIB @code{wcsprm} structure that is read from the CFITSIO @code{fptr} pointer to an opened FITS file. With older WCSLIB versions (in particular below version 5.18) this function may not be thread-safe. Also put the number of coordinate representations found into the space that @code{nwcs} points to. To read the WCS structure directly from a filename, see @code{gal_wcs_read} below. After processing has finished, you should free the WCS structure that this function returns with @code{gal_wcs_free}. The @code{linearmatrix} argument takes one of three values: @code{0}, @code{GAL_WCS_LINEAR_MATRIX_PC} and @code{GAL_WCS_LINEAR_MATRIX_CD}. It will determine the format of the WCS when it is later written to file with @code{gal_wcs_write} or @code{gal_wcs_write_in_fitsptr} (which is called by @code{gal_fits_img_write}) So if you do not want to write the WCS into a file later, just give it a value of @code{0}. For more on the difference between these modes, see the description of @option{--wcslinearmatrix} in @ref{Input output options}. If you do not want to search the full FITS header for WCS-related FITS keywords (for example, due to conflicting keywords), but only a specific range of the header keywords you can use the @code{hstartwcs} and @code{hendwcs} arguments to specify the keyword number range (counting from zero). If @code{hendwcs} is larger than @code{hstartwcs}, then only keywords in the given range will be checked. Hence, to ignore this feature (and search the full FITS header), give both these arguments the same value. If the WCS information could not be read from the FITS file, this function will return a @code{NULL} pointer and put a zero in @code{nwcs}. A WCSLIB error message will also be printed in @code{stderr} if there was an error. This function is just a wrapper over WCSLIB's @code{wcspih} function which is not thread-safe. Therefore, be sure to not call this function simultaneously (over multiple threads). @end deftypefun @deftypefun {struct wcsprm *} gal_wcs_read (char @code{*filename}, char @code{*hdu}, int @code{linearmatrix}, size_t @code{hstartwcs}, size_t @code{hendwcs}, int @code{*nwcs}, char @code{*hdu_option_name}) [@strong{Not thread-safe}] Return the WCSLIB structure that is read from the HDU/extension @code{hdu} of the file @code{filename}. Also put the number of coordinate representations found into the space that @code{nwcs} points to. Please see @code{gal_wcs_read_fitsptr} for more. For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. After processing has finished, you should free the WCS structure that this function returns with @code{gal_wcs_free}. @end deftypefun @deftypefun void gal_wcs_free (struct wcsprm @code{*wcs}) Free the contents @emph{and} the space that @code{wcs} points to. WCSLIB's @code{wcsfree} function only frees the contents of the @code{wcsprm} structure, not the actual pointer. However, Gnuastro's @code{wcsprm} creation and reading functions allocate the structure also. This higher-level function therefore simplifies the processing. A complete working example is given in the description of @code{gal_wcs_create}. @end deftypefun @deftypefun {char *} gal_wcs_dimension_name (struct wcsprm @code{*wcs}, size_t @code{dimension}) Return an allocated string array (that should be freed later) containing the first part of the @code{CTYPEi} FITS keyword (which contains the dimension name in the FITS standard). For example, if @code{CTYPE1} is @code{RA---TAN}, the string that function returns will be @code{RA}. Recall that the second component of @code{CTYPEi} contains the type of projection. @end deftypefun @deftypefun {char *} gal_wcs_write_wcsstr (struct wcsprm @code{*wcs}, int @code{*nkeyrec}) Return an allocated string which contains the respective FITS keywords for the given WCS structure into it. The number of keywords is written in the space pointed by @code{nkeyrec}. Each FITS keyword is 80 characters wide (according to the FITS standard), and the next one is placed immediately after it, so the full string has @code{80*nkeyrec} bytes. The output of this function can later be written into an opened FITS file using @code{gal_fits_key_write_wcsstr} (see @ref{FITS header keywords}). @end deftypefun @deftypefun void gal_wcs_write (struct wcsprm @code{*wcs}, char @code{*filename}, char @code{*extname}, gal_fits_list_key_t @code{*keylist}, int @code{freekeys}) Write the given WCS structure into the second extension of an empty FITS header. The first/primary extension will be empty like the default format of all Gnuastro outputs. When @code{extname!=NULL} it will be used as the FITS extension name. Any set of extra headers can also be written through the @code{keylist} list. If @code{freekeys!=0} then the list of keywords will be freed after they are written. @end deftypefun @deftypefun void gal_wcs_write_in_fitsptr (fitsfile @code{*fptr}, struct wcsprm @code{*wcs}) Convert the input @code{wcs} structure (keeping the WCS programmatically) into FITS keywords and write them into the given FITS file pointer. This is a relatively low-level function which assumes the FITS file has already been opened with CFITSIO. If you just want to write the WCS into an empty file, you can use @code{gal_wcs_write} (which internally calls this function after creating the FITS file and later closes it safely). @end deftypefun @deftypefun {struct wcsprm *} gal_wcs_copy (struct wcsprm @code{*wcs}) Return a fully allocated (independent) copy of @code{wcs}. @end deftypefun @deftypefun {struct wcsprm *} gal_wcs_copy_new_crval (struct wcsprm @code{*wcs}, double @code{*crval}) Return a fully allocated (independent) copy of @code{wcs} with a new set of @code{CRVAL} values. WCSLIB keeps a lot of extra information within @code{wcsprm} and for optimizations, those extra information are used in its calculations. Therefore, if you want to change parameters like the reference point's sky coordinate values (@code{CRVAL}), simply changing the values in @code{wcs->crval[0]} or @code{wcs->crval[1]} will not affect WCSLIB's calculations; you need to call this function. @end deftypefun @deftypefun void gal_wcs_remove_dimension (struct wcsprm @code{*wcs}, size_t @code{fitsdim}) Remove the given FITS dimension from the given @code{wcs} structure. @end deftypefun @deftypefun void gal_wcs_on_tile (gal_data_t @code{*tile}) Create a WCSLIB @code{wcsprm} structure for @code{tile} using WCS parameters of the tile's allocated block dataset, see @ref{Tessellation library} for the definition of tiles. If @code{tile} already has a WCS structure, this function will not do anything. In many cases, tiles are created for internal/low-level processing. Hence for performance reasons, when creating the tiles they do not have any WCS structure. When needed, this function can be used to add a WCS structure to each tile tile by copying the WCS structure of its block and correcting the reference point's coordinates within the tile. @end deftypefun @deftypefun {double *} gal_wcs_warp_matrix (struct wcsprm @code{*wcs}) Return the Warping matrix of the given WCS structure as an array of double precision floating points. This will be the final matrix, irrespective of the type of storage in the WCS structure. Recall that the FITS standard has several methods to store the matrix. The output is an allocated square matrix with each side equal to the number of dimensions. @end deftypefun @deftypefun void gal_wcs_clean_small_errors (struct wcsprm @code{*wcs}) Errors can make small differences between the pixel-scale elements (@code{CDELT}) and can also lead to extremely small values in the @code{PC} matrix. With this function, such errors will be ``cleaned'' as follows: 1) if the maximum difference between the @code{CDELT} elements is smaller than the reference error, it will be set to the mean value. When the FITS keyword @code{CRDER} (optional) is defined it will be used as a reference, if not the default value is @code{GAL_WCS_FLTERROR}. 2) If any of the PC elements differ from 0, 1 or -1 by less than @code{GAL_WCS_FLTERROR}, they will be rounded to the respective value. @end deftypefun @deftypefun void gal_wcs_decompose_pc_cdelt (struct wcsprm @code{*wcs}) Decompose the @code{PCi_j} and @code{CDELTi} elements of @code{wcs}. According to the FITS standard, in the @code{PCi_j} WCS formalism, the rotation matrix elements @mymath{m_{ij}} are encoded in the @code{PCi_j} keywords and the scale factors are encoded in the @code{CDELTi} keywords. There is also another formalism (the @code{CDi_j} formalism) which merges the two into one matrix. However, WCSLIB's internal operations are apparently done in the @code{PCi_j} formalism. So its outputs are also all in that format by default. When the input is a @code{CDi_j}, WCSLIB will still read the matrix directly into the @code{PCi_j} matrix and the @code{CDELTi} values are set to @code{1} (one). This function is designed to correct such issues: after it is finished, the @code{CDELTi} values in @code{wcs} will correspond to the pixel scale, and the @code{PCi_j} will correction show the rotation. @end deftypefun @deftypefun void gal_wcs_to_cd (struct wcsprm @code{*wcs}) Make sure that the WCS structure's @code{PCi_j} and @code{CDi_j} keywords have the same value and that the @code{CDELTi} keywords have a value of 1.0. Also, set the @code{wcs->altlin=2} (for the @code{CDi_j} formalism). With these changes @code{gal_wcs_write_in_fitsptr} (and thus @code{gal_wcs_write} and @code{gal_fits_img_write} and its derivatives) will have an output file in the format of @code{CDi_j}. @end deftypefun @deftypefun int gal_wcs_coordsys_identify (struct wcsprm @code{*wcs}) Read the given WCS structure and return its coordinate system as one of Gnuastro's WCS coordinate system identifiers (the macros @code{GAL_WCS_COORDSYS_*}, listed above). @end deftypefun @deftypefun {struct wcsprm *} gal_wcs_coordsys_convert (struct wcsprm @code{*inwcs}, int @code{coordsysid}) Return a newly allocated WCS structure with the @code{coordsysid} coordinate system identifier. The Gnuastro WCS distortion identifiers are defined in the @code{GAL_WCS_COORDSYS_*} macros mentioned above. Since the returned dataset is newly allocated, if you do not need the original dataset after this, use the WCSLIB library function @code{wcsfree} to free the input, for example, @code{wcsfree(inwcs)}. @end deftypefun @deftypefun void gal_wcs_coordsys_convert_points (int @code{sys1}, double @code{*lng1_d}, double @code{*lat1_d}, int @code{sys2}, double @code{*lng2_d}, double @code{*lat2_d}, size_t @code{number}) Convert the input set of longitudes (@code{lng1_d}, in degrees) and latitudes (@code{lat1_d}, in degrees) within a recognized coordinate system (@code{sys1}; one of the @code{GAL_WCS_COORDSYS_*} macros above) into an output coordinate system (@code{sys2}). The output values are written in @code{lng2_d} and @code{lng2_d}. The total number of points should be given in @code{number}. If you want the operation to be done in place (without allocating a new dataset), give the same pointers to the coordinate arguments. @end deftypefun @deftypefun void gal_wcs_coordsys_sys1_ref_in_sys2 (int @code{sys1}, int @code{sys2}, double @code{*lng2}, double @code{*lat2}) Return the longitude and latitude of the reference point (on the equator) of the first coordinate system (@code{sys1}) within the second system (@code{sys2}). Coordinate systems are identified by the @code{GAL_WCS_COORDSYS_*} macros above. @end deftypefun @cindex WCS distortion @cindex Distortion, WCS @deftypefun {int} gal_wcs_distortion_identify (struct wcsprm @code{*wcs}) Returns the Gnuastro identifier for the distortion of the input WCS structure. The returned value is one of the @code{GAL_WCS_DISTORTION_*} macros defined above. When the input pointer to a structure is @code{NULL}, or it does not contain a distortion, the returned value will be @code{GAL_WCS_DISTORTION_INVALID}. @end deftypefun @cindex SIP WCS distortion @cindex TPV WCS distortion @deftypefun {struct wcsprm *} gal_wcs_distortion_convert(struct wcsprm @code{*inwcs}, int @code{outdisptype}, size_t @code{*fitsize}) Return a newly allocated WCS structure, where the distortion is implemented in a different standard, identified by the identifier @code{outdisptype}. The Gnuastro WCS distortion identifiers are defined in the @code{GAL_WCS_DISTORTION_*} macros mentioned above. The available conversions in this function will grow. Currently it only supports converting TPV to SIP and vice versa, following the recipe of Shupe et al. (2012)@footnote{Proc. of SPIE Vol. 8451 84511M-1. @url{https://doi.org/10.1117/12.925460}, also available at @url{http://web.ipac.caltech.edu/staff/shupe/reprints/SIP_to_PV_SPIE2012.pdf}.}. Please get in touch with us if you need other types of conversions. For some conversions, direct analytical conversions do not exist. It is thus necessary to model and fit the two types. In such cases, it is also necessary to specify the @code{fitsize} array that is the size of the array along each C-ordered dimension, so you can simply pass the @code{dsize} element of your @code{gal_data_t} dataset, see @ref{Generic data container}. Currently this is only necessary when converting TPV to SIP. For other conversions you may simply pass a @code{NULL} pointer. For example, if you want to convert the TPV coefficients of your input @file{image.fits} to SIP coefficients, you can use the following functions (which are also available as a command-line operation in @ref{Fits}). @example int nwcs; gal_data_t *data=gal_fits_img_read("image.fits", "1", -1, 1, NULL); inwcs=gal_wcs_read("image.fits", "1", 0, 0, 0, &nwcs, NULL); data->wcs=gal_wcs_distortion_convert(inwcs, GAL_WCS_DISTORTION_TPV, NULL); wcsfree(inwcs); gal_fits_img_write(data, "tpv.fits", NULL, 0); @end example @end deftypefun @deftypefun double gal_wcs_angular_distance_deg (double @code{r1}, double @code{d1}, double @code{r2}, double @code{d2}) Return the angular distance (in degrees) between a point located at (@code{r1}, @code{d1}) to (@code{r2}, @code{d2}). All input coordinates are in degrees. The distance (along a great circle) on a sphere between two points is calculated with the equation below. @dispmath {\cos(d)=\sin(d_1)\sin(d_2)+\cos(d_1)\cos(d_2)\cos(r_1-r_2)} However, since the pixel scales are usually very small numbers, this function will not use that direct formula. It will be use the @url{https://en.wikipedia.org/wiki/Haversine_formula, Haversine formula} which is better considering floating point errors: @dispmath{{\sin^2(d)\over 2}=\sin^2\left( {d_1-d_2\over 2} \right)+\cos(d_1)\cos(d_2)\sin^2\left( {r_1-r_2\over 2} \right)} @end deftypefun @deftypefun void gal_wcs_box_vertices_from_center (double @code{ra_center}, double @code{dec_center}, double @code{ra_delta}, double @code{dec_delta}, double @code{*out}) Calculate the vertices of a rectangular box given the central RA and Dec and delta of each. The vertice coordinates are written in the space that @code{out} points to (assuming it has space for eight @code{double}s). Given the spherical nature of the coordinate system, the vertice lengths can't be calculated with a simple addition/subtraction. For the declination, a simple addition/subtraction is enough. Also, on the equator (where the RA is defined), a simple addition/subtraction along the RA is fine. However, at other declinations, the new RA after a shift needs special treatment, such that close to the poles, a shift of 1 degree can correspond to a new RA that is much more distant than the original RA. Assuming a point at Right Ascension (RA) and Declination of @mymath{\alpha} and @mymath{\delta}, a shift of @mymath{R} degrees along the positive RA direction corresponds to a right ascension of @mymath{\alpha+\frac{R}{\cos(\delta)}}. For more, see the description of @code{box-vertices-on-sphere} in @ref{Coordinate and border operators}. The 8 coordinates of the 4 vertices of the box are written in the order below. Where ``bottom'' corresponds to a lower declination and ``top'' to higher declination, ``left'' corresponds to a larger RA and ``right'' corresponds to lower RA. @example out[0]: bottom-left RA out[1]: bottom-left Dec out[2]: bottom-right RA out[3]: bottom-right Dec out[4]: top-right RA out[5]: top-right Dec out[6]: top-left RA out[7]: top-left Dec @end example @end deftypefun @deftypefun {double *} gal_wcs_pixel_scale (struct wcsprm @code{*wcs}) Return the pixel scale for each dimension of @code{wcs} in degrees. The output is an allocated array of double precision floating point type with one element for each dimension. If it is not successful, this function will return @code{NULL}. @end deftypefun @deftypefun double gal_wcs_pixel_area_arcsec2 (struct wcsprm @code{*wcs}) Return the pixel area of @code{wcs} in arc-second squared. This only works when the input dataset has at least two dimensions and the units of the first two dimensions (@code{CUNIT} keywords) are @code{deg} (for degrees). In other cases, this function will return a NaN. @end deftypefun @deftypefun int gal_wcs_coverage (char @code{*filename}, char @code{*hdu}, size_t @code{*ondim}, double @code{**ocenter}, double @code{**owidth}, double @code{**omin}, double @code{**omax}, char @code{*hdu_option_name}) Find the sky coverage of the image HDU (@code{hdu}) within @file{filename}. The number of dimensions is written into @code{ndim}, and space for the various output arrays is internally allocated and filled with the respective values. Therefore you need to free them afterwards. For more on @code{hdu_option_name} see the description of @code{gal_array_read} in @ref{Array input output}. Currently this function only supports images that are less than 180 degrees in width (which is usually the case!). This requirement has been necessary to account for images that cross the RA=0 hour circle on the sky. Please get in touch with us at @url{mailto:bug-gnuastro@@gnu.org} if you have an image that is larger than 180 degrees so we try to find a solution based on need. @end deftypefun @deftypefun {gal_data_t *} gal_wcs_world_to_img (gal_data_t @code{*coords}, struct wcsprm @code{*wcs}, int @code{inplace}) Convert the linked list of world coordinates in @code{coords} to a linked list of image coordinates given the input WCS structure. @code{coords} must be a linked list of data structures of float64 (`double') type, see@ref{Linked lists} and @ref{List of gal_data_t}. The top (first popped/read) node of the linked list must be the first WCS coordinate (RA in an image usually) etc. Similarly, the top node of the output will be the first image coordinate (in the FITS standard). In case WCSLIB fails to convert any of the coordinates (for example, the RA of one coordinate is given as 400!), the respective element in the output will be written as NaN. If @code{inplace} is zero, then the output will be a newly allocated list and the input list will be untouched. However, if @code{inplace} is non-zero, the output values will be written into the input's already allocated array and the returned pointer will be the same pointer to @code{coords} (in other words, you can ignore the returned value). Note that in the latter case, only the values will be changed, things like units or name (if present) will be untouched. @end deftypefun @deftypefun {gal_data_t *} gal_wcs_img_to_world (gal_data_t @code{*coords}, struct wcsprm @code{*wcs}, int @code{inplace}) Convert the linked list of image coordinates in @code{coords} to a linked list of world coordinates given the input WCS structure. See the description of @code{gal_wcs_world_to_img} for more details. @end deftypefun @node Arithmetic on datasets, Tessellation library, World Coordinate System, Gnuastro library @subsection Arithmetic on datasets (@file{arithmetic.h}) When the dataset's type and other information are already known, any programming language (including C) provides some very good tools for various operations (including arithmetic operations like addition) on the dataset with a simple loop. However, as an author of a program, making assumptions about the type of data, its dimensions and other basic characteristics will come with a large processing burden. For example, if you always read your data as double precision floating points for a simple operation like addition with an integer constant, you will be wasting a lot of CPU and memory when the input dataset is @code{int32} type for example, (see @ref{Numeric data types}). This overhead may be small for small images, but as you scale your process up and work with hundred/thousands of files that can be very large, this overhead will take a significant portion of the processing power. The functions and macros in this section are designed precisely for this purpose: to allow you to do any of the defined operations on any dataset with no overhead (in the native type of the dataset). Gnuastro's Arithmetic program uses the functions and macros of this section, so please also have a look at the @ref{Arithmetic} program and in particular @ref{Arithmetic operators} for a better description of the operators discussed here. The main function of this library is @code{gal_arithmetic} that is described below. It can take an arbitrary number of arguments as operands (depending on the operator, similar to @code{printf}). Its first two arguments are integers specifying the flags and operator. So first we will review the constants for the recognized flags and operators and discuss them, then introduce the actual function. @deffn Macro GAL_ARITHMETIC_FLAG_INPLACE @deffnx Macro GAL_ARITHMETIC_FLAG_FREE @deffnx Macro GAL_ARITHMETIC_FLAG_NUMOK @deffnx Macro GAL_ARITHMETIC_FLAG_ENVSEED @deffnx Macro GAL_ARITHMETIC_FLAG_QUIET @deffnx Macro GAL_ARITHMETIC_FLAGS_BASIC @cindex Bitwise Or Bit-wise flags to pass onto @code{gal_arithmetic} (see below). To pass multiple flags, use the bitwise-or operator. For example, if you pass @code{GAL_ARITHMETIC_FLAG_INPLACE | GAL_ARITHMETIC_FLAG_NUMOK}, then the operation will be done in-place (without allocating a new array), and a single number will also be acceptable (that will be applied to all the pixels). Each flag is described below: @table @code @item GAL_ARITHMETIC_FLAG_INPLACE Do the operation in-place (in the input dataset, thus modifying it) to improve CPU and memory usage. If this flag is used, after @code{gal_arithmetic} finishes, the input dataset will be modified. It is thus useful if you have no more need for the input after the operation. @item GAL_ARITHMETIC_FLAG_FREE Free (all the) input dataset(s) after the operation is done. Hence the inputs are no longer usable after @code{gal_arithmetic}. @item GAL_ARITHMETIC_FLAG_NUMOK It is acceptable to use a number and an array together. For example, if you want to add all the pixels in an image with a single number you can pass this flag to avoid having to allocate a constant array the size of the image (with all the pixels having the same number). @item GAL_ARITHMETIC_FLAG_ENVSEED Use the pre-defined environment variable for setting the random number generator seed when an operator needs it (for example, @code{mknoise-sigma}). For more on random number generation in Gnuastro see @ref{Generating random numbers}. @item GAL_ARITHMETIC_FLAG_QUIET Do not print any warnings or messages for operators that may benefit from it. For example, by default the @code{mknoise-sigma} operator prints the random number generator function and seed that it used (in case the user wants to reproduce this result later). By activating this bit flag to the call, that extra information is not printed on the command-line. @item GAL_ARITHMETIC_FLAGS_BASIC A wrapper for activating the three ``basic'' operations that are commonly necessary together: @code{GAL_ARITHMETIC_FLAG_INPLACE}, @code{GAL_ARITHMETIC_FLAG_FREE} and @code{GAL_ARITHMETIC_FLAG_NUMOK}. @end table @end deffn @deffn Macro GAL_ARITHMETIC_OP_PLUS @deffnx Macro GAL_ARITHMETIC_OP_MINUS @deffnx Macro GAL_ARITHMETIC_OP_MULTIPLY @deffnx Macro GAL_ARITHMETIC_OP_DIVIDE @deffnx Macro GAL_ARITHMETIC_OP_LT @deffnx Macro GAL_ARITHMETIC_OP_LE @deffnx Macro GAL_ARITHMETIC_OP_GT @deffnx Macro GAL_ARITHMETIC_OP_GE @deffnx Macro GAL_ARITHMETIC_OP_EQ @deffnx Macro GAL_ARITHMETIC_OP_NE @deffnx Macro GAL_ARITHMETIC_OP_AND @deffnx Macro GAL_ARITHMETIC_OP_OR Binary operators (requiring two operands) that accept datasets of any recognized type (see @ref{Numeric data types}). When @code{gal_arithmetic} is called with any of these operators, it expects two datasets as arguments. For a full description of these operators with the same name, see @ref{Arithmetic operators}. The first dataset/operand will be put on the left of the operator and the second will be put on the right. The output type of the first four is determined from the input types (largest type of the inputs). The rest (which are all conditional operators) will output a binary @code{uint8_t} (or @code{unsigned char}) dataset with values of either @code{0} (zero) or @code{1} (one). @end deffn @deffn Macro GAL_ARITHMETIC_OP_NOT The logical NOT operator. When @code{gal_arithmetic} is called with this operator, it only expects one operand (dataset), since this is a unary operator. The output is @code{uint8_t} (or @code{unsigned char}) dataset of the same size as the input. Any non-zero element in the input will be @code{0} (zero) in the output and any @code{0} (zero) will have a value of @code{1} (one). @end deffn @deffn Macro GAL_ARITHMETIC_OP_ISBLANK A unary operator with output that is @code{1} for any element in the input that is blank, and @code{0} for any non-blank element. When @code{gal_arithmetic} is called with this operator, it will only expect one input dataset. The output dataset will have @code{uint8_t} (or @code{unsigned char}) type. @code{gal_arithmetic} with this operator is just a wrapper for the @code{gal_blank_flag} function of @ref{Library blank values} and this operator is just included for completeness in arithmetic operations. So in your program, it might be easier to just call @code{gal_blank_flag}. @end deffn @deffn Macro GAL_ARITHMETIC_OP_WHERE The three-operand @emph{where} operator thoroughly discussed in @ref{Arithmetic operators}. When @code{gal_arithmetic} is called with this operator, it will only expect three input datasets: the first (which is the same as the returned dataset) is the array that will be modified. The second is the condition dataset (that must have a @code{uint8_t} or @code{unsigned char} type), and the third is the value to be used if condition is non-zero. As a result, note that the order of operands when calling @code{gal_arithmetic} with @code{GAL_ARITHMETIC_OP_WHERE} is the opposite of running Gnuastro's Arithmetic program with the @code{where} operator (see @ref{Arithmetic}). This is because the latter uses the reverse-Polish notation which is not necessary when calling a function (see @ref{Reverse polish notation}). @end deffn @deffn Macro GAL_ARITHMETIC_OP_SQRT @deffnx Macro GAL_ARITHMETIC_OP_LOG @deffnx Macro GAL_ARITHMETIC_OP_LOG10 Unary operator functions for calculating the square root (@mymath{\sqrt{i}}), @mymath{ln(i)} and @mymath{log(i)} mathematical operators on each element of the input dataset. The returned dataset will have a floating point type, but its precision is determined from the input: if the input is a 64-bit floating point, the output will also be 64-bit. Otherwise, the returned dataset will be 32-bit floating point: you do not gain precision by using these operators, but you gain in operating speed if you use the sufficient precision. See @ref{Numeric data types} for more on the precision of floating point numbers to help in selecting your required floating point precision. If you want your output to be 64-bit floating point but your input is a different type, you can convert the input to a 64-bit floating point type with @code{gal_data_copy_to_new_type} or @code{gal_data_copy_to_new_type_free}(see @ref{Copying datasets}). Alternatively, you can use the @code{GAL_ARITHMETIC_OP_TO_FLOAT64} operators in the arithmetic library. @end deffn @deffn Macro GAL_ARITHMETIC_OP_SIN @deffnx Macro GAL_ARITHMETIC_OP_COS @deffnx Macro GAL_ARITHMETIC_OP_TAN @deffnx Macro GAL_ARITHMETIC_OP_ASIN @deffnx Macro GAL_ARITHMETIC_OP_ACOS @deffnx Macro GAL_ARITHMETIC_OP_ATAN @deffnx Macro GAL_ARITHMETIC_OP_ATAN2 Trigonometric functions (and their inverse). All the angles, either inputs or outputs, are in units of degrees. @end deffn @deffn Macro GAL_ARITHMETIC_OP_SINH @deffnx Macro GAL_ARITHMETIC_OP_COSH @deffnx Macro GAL_ARITHMETIC_OP_TANH @deffnx Macro GAL_ARITHMETIC_OP_ASINH @deffnx Macro GAL_ARITHMETIC_OP_ACOSH @deffnx Macro GAL_ARITHMETIC_OP_ATANH Hyperbolic functions (and their inverse). @end deffn @deffn Macro GAL_ARITHMETIC_OP_RA_TO_DEGREE @deffnx Macro GAL_ARITHMETIC_OP_DEC_TO_DEGREE @deffnx Macro GAL_ARITHMETIC_OP_DEGREE_TO_RA @deffnx Macro GAL_ARITHMETIC_OP_DEGREE_TO_DEC @cindex Sexagesimal @cindex Declination @cindex Right Ascension Unary operators to convert between degrees (as a single floating point number) to the sexagesimal Right Ascension and Declination format (as strings, respectively in the format of @code{_h_m_s} and @code{_d_m_s}). The first two operators expect a string operand (in the sexagesimal formats mentioned above, but also in the @code{_:_:_}) and will return a double-precision floating point operand. The latter two are the opposite. @end deffn @deffn Macro GAL_ARITHMETIC_OP_COUNTS_TO_MAG @deffnx Macro GAL_ARITHMETIC_OP_MAG_TO_COUNTS @deffnx Macro GAL_ARITHMETIC_OP_MAG_TO_SB @deffnx Macro GAL_ARITHMETIC_OP_SB_TO_MAG @deffnx Macro GAL_ARITHMETIC_OP_COUNTS_TO_JY @deffnx Macro GAL_ARITHMETIC_OP_JY_TO_COUNTS @deffnx Macro GAL_ARITHMETIC_OP_MAG_TO_JY @deffnx Macro GAL_ARITHMETIC_OP_JY_TO_MAG @deffnx Macro GAL_ARITHMETIC_OP_MAG_TO_NANOMAGGY @deffnx Macro GAL_ARITHMETIC_OP_NANOMAGGY_TO_MAG @cindex Surface Brightness Binary operators for converting brightness and surface brightness units to and from each other. The first operand to all of them are the values in the input unit (left of the @code{-TO-}, for example counts in @code{COUNTS_TO_MAG}). The second popped operand is the zero point (right of the @code{-TO-}, for example magnitudes in @code{COUNTS_TO_MAG}). The exceptions are the operators that involve surface brightness (those with @code{SB}). For the surface brightness related operators, the second popped operand is the area in units of arcsec@mymath{^2} and the third popped operand is the final unit. @end deffn @deffn Macro GAL_ARITHMETIC_OP_COUNTS_TO_SB @deffnx Macro GAL_ARITHMETIC_OP_SB_TO_COUNTS Operators for converting counts to surface brightness and vice-versa. These operators take three operands: 1) the input dataset in units of counts or surface brightness (depending on the operator), 2) the zero point, 3) the area in units of arcsec@mymath{^2}. @end deffn @deffn Macro GAL_ARITHMETIC_OP_AU_TO_PC @deffnx Macro GAL_ARITHMETIC_OP_PC_TO_AU @deffnx Macro GAL_ARITHMETIC_OP_LY_TO_PC @deffnx Macro GAL_ARITHMETIC_OP_PC_TO_LY @deffnx Macro GAL_ARITHMETIC_OP_LY_TO_AU @deffnx Macro GAL_ARITHMETIC_OP_AU_TO_LY Unary operators to convert various distance units to and from each other: Astronomical Units (AU), Parsecs (PC) and Light years (LY). @end deffn @deffn Macro GAL_ARITHMETIC_OP_MINVAL @deffnx Macro GAL_ARITHMETIC_OP_MAXVAL @deffnx Macro GAL_ARITHMETIC_OP_NUMBERVAL @deffnx Macro GAL_ARITHMETIC_OP_SUMVAL @deffnx Macro GAL_ARITHMETIC_OP_MEANVAL @deffnx Macro GAL_ARITHMETIC_OP_STDVAL @deffnx Macro GAL_ARITHMETIC_OP_MEDIANVAL Unary operand statistical operators that will return a single value for datasets of any size. These are just wrappers around similar functions in @ref{Statistical operations} and are included in @code{gal_arithmetic} only for completeness (to use easily in @ref{Arithmetic}). In your programs, it will probably be easier if you use those @code{gal_statistics_} functions directly. @end deffn @deffn Macro GAL_ARITHMETIC_OP_UNIQUE @deffnx Macro GAL_ARITHMETIC_OP_NOBLANK Unary operands that will remove some elements from the input dataset. The first will return the unique elements, and the second will return the non-blank elements. Due to the removal of elements, the dimensionality of the output will be lost. These are just wrappers over the @code{gal_statistics_unique} and @code{gal_blank_remove}. These are just wrappers around similar functions in @ref{Statistical operations} and are included in @code{gal_arithmetic} only for completeness (to use easily in @ref{Arithmetic}). In your programs, it will probably be easier if you use those @code{gal_statistics_} functions directly. @end deffn @deffn Macro GAL_ARITHMETIC_OP_ABS Unary operand absolute-value operator. @end deffn @deffn Macro GAL_ARITHMETIC_OP_MIN @deffnx Macro GAL_ARITHMETIC_OP_MAX @deffnx Macro GAL_ARITHMETIC_OP_NUMBER @deffnx Macro GAL_ARITHMETIC_OP_SUM @deffnx Macro GAL_ARITHMETIC_OP_MEAN @deffnx Macro GAL_ARITHMETIC_OP_STD @deffnx Macro GAL_ARITHMETIC_OP_MEDIAN Multi-operand statistical operations. When @code{gal_arithmetic} is called with any of these operators, it will expect only a single operand that will be interpreted as a list of datasets (see @ref{List of gal_data_t}). These operators can work on multiple threads using the @code{numthreads} argument. See the discussion under the @code{min} operator in @ref{Arithmetic operators}. The output will be a single dataset with each of its elements replaced by the respective statistical operation on the whole list. The type of the output is determined from the operator (irrespective of the input type): for @code{GAL_ARITHMETIC_OP_MIN} and @code{GAL_ARITHMETIC_OP_MAX}, it will be the same type as the input, for @code{GAL_ARITHMETIC_OP_NUMBER}, the output will be @code{GAL_TYPE_UINT32} and for the rest, it will be @code{GAL_TYPE_FLOAT32}. @end deffn @deffn Macro GAL_ARITHMETIC_OP_QUANTILE Similar to the operands above (including @code{GAL_ARITHMETIC_MIN}), except that when @code{gal_arithmetic} is called with these operators, it requires two arguments. The first is the list of datasets like before, and the second is the 1-element dataset with the quantile value. The output type is the same as the inputs. @end deffn @deffn Macro GAL_ARITHMETIC_OP_SIGCLIP_STD @deffnx Macro GAL_ARITHMETIC_OP_SIGCLIP_MEAN @deffnx Macro GAL_ARITHMETIC_OP_SIGCLIP_MEDIAN @deffnx Macro GAL_ARITHMETIC_OP_SIGCLIP_NUMBER Similar to the operands above (including @code{GAL_ARITHMETIC_MIN}), except that when @code{gal_arithmetic} is called with these operators, it requires two arguments. The first is the list of datasets like before, and the second is the 2-element list of @mymath{\sigma}-clipping parameters. The first element in the parameters list is the multiple of sigma and the second is the termination criteria (see @ref{Sigma clipping}). The output type of @code{GAL_ARITHMETIC_OP_SIGCLIP_NUMBER} will be @code{GAL_TYPE_UINT32} and for the rest it will be @code{GAL_TYPE_FLOAT32}. @end deffn @deffn Macro GAL_ARITHMETIC_OP_MKNOISE_SIGMA @deffnx Macro GAL_ARITHMETIC_OP_MKNOISE_POISSON @deffnx Macro GAL_ARITHMETIC_OP_MKNOISE_UNIFORM Add noise to the input dataset. These operators take two arguments: the first is the input data set (can have any dimensionality or number of elements. The second argument is the noise specifier (a single element, of any type): for a fixed-sigma noise, it is the Gaussian standard deviation, for the Poisson noise, it is the background (see @ref{Photon counting noise}) and for the uniform distribution it is the width of the interval around each element of the input dataset. By default, a separate random number generator seed will be used on each separate run of these operators. Therefore two identical runs on the same input will produce different results. You can get reproducible results by setting the @code{GAL_RNG_SEED} environment variable and activating the @code{GAL_ARITHMETIC_FLAG_ENVSEED} flag. For more on random number generation in Gnuastro, see @ref{Generating random numbers}. By default these operators will print the random number generator function and seed (in case the user wants to reproduce the result later), but this can be disabled by activating the bit-flag @code{GAL_ARITHMETIC_FLAG_QUIET} described above. @end deffn @deffn Macro GAL_ARITHMETIC_OP_RANDOM_FROM_HIST @deffnx Macro GAL_ARITHMETIC_OP_RANDOM_FROM_HIST_RAW Select random values from a custom distribution (defined by a histogram). For more, see the description of the respective operators in @ref{Generating random numbers}. @end deffn @deffn Macro GAL_ARITHMETIC_OP_STITCH Stitch a list of input datasets along the requested dimension. See the description of the @code{stitch} operator in Arithmetic (@ref{Dimensionality changing operators}). @end deffn @deffn Macro GAL_ARITHMETIC_OP_POW Binary operator to-power operator. When @code{gal_arithmetic} is called with any of these operators, it will expect two operands: raising the first by the second (returning a floating point, inputs can be integers). @end deffn @deffn Macro GAL_ARITHMETIC_OP_BITAND @deffnx Macro GAL_ARITHMETIC_OP_BITOR @deffnx Macro GAL_ARITHMETIC_OP_BITXOR @deffnx Macro GAL_ARITHMETIC_OP_BITLSH @deffnx Macro GAL_ARITHMETIC_OP_BITRSH @deffnx Macro GAL_ARITHMETIC_OP_MODULO Binary integer-only operand operators. These operators are only defined on integer data types. When @code{gal_arithmetic} is called with any of these operators, it will expect two operands: the first is put on the left of the operator and the second on the right. The ones starting with @code{BIT} are the respective bit-wise operators in C and @code{MODULO} is the modulo/remainder operator. For a discussion on these operators, please see @ref{Arithmetic operators}. The output type is determined from the input types and C's internal conversions: it is strongly recommended that both inputs have the same type (any integer type), otherwise the bit-wise behavior will be determined by your compiler. @end deffn @deffn Macro GAL_ARITHMETIC_OP_BITNOT The unary bit-wise NOT operator. When @code{gal_arithmetic} is called with any of these operators, it will expect one operand of an integer type and preform the bitwise-NOT operation on it. The output will have the same type as the input. @end deffn @deffn Macro GAL_ARITHMETIC_OP_TO_UINT8 @deffnx Macro GAL_ARITHMETIC_OP_TO_INT8 @deffnx Macro GAL_ARITHMETIC_OP_TO_UINT16 @deffnx Macro GAL_ARITHMETIC_OP_TO_INT16 @deffnx Macro GAL_ARITHMETIC_OP_TO_UINT32 @deffnx Macro GAL_ARITHMETIC_OP_TO_INT32 @deffnx Macro GAL_ARITHMETIC_OP_TO_UINT64 @deffnx Macro GAL_ARITHMETIC_OP_TO_INT64 @deffnx Macro GAL_ARITHMETIC_OP_TO_FLOAT32 @deffnx Macro GAL_ARITHMETIC_OP_TO_FLOAT64 Unary type-conversion operators. When @code{gal_arithmetic} is called with any of these operators, it will expect one operand and convert it to the requested type. Note that with these operators, @code{gal_arithmetic} is just a wrapper over the @code{gal_data_copy_to_new_type} or @code{gal_data_copy_to_new_type_free} that are discussed in @code{Copying datasets}. It accepts these operators only for completeness and easy usage in @ref{Arithmetic}. So in your programs, it might be preferable to directly use those functions. @end deffn @deffn Macro GAL_ARITHMETIC_OP_E @deffnx Macro GAL_ARITHMETIC_OP_C @deffnx Macro GAL_ARITHMETIC_OP_G @deffnx Macro GAL_ARITHMETIC_OP_H @deffnx Macro GAL_ARITHMETIC_OP_AU @deffnx Macro GAL_ARITHMETIC_OP_LY @deffnx Macro GAL_ARITHMETIC_OP_PI @deffnx Macro GAL_ARITHMETIC_OP_AVOGADRO @deffnx Macro GAL_ARITHMETIC_OP_FINESTRUCTURE Return the respective mathematical constant. For their description please see @ref{Constants}. The constant values are taken from the GNU Scientific Library's headers (defined in @file{gsl/gsl_math.h}). @end deffn @deffn Macro GAL_ARITHMETIC_OP_BOX_AROUND_ELLIPSE Return the width (along horizontal) and height (along vertical) of a box that encompasses an ellipse with the same center point. For more on the three input operands to this operator see the description of @code{box-around-ellipse}. This function returns two datasets as a @code{gal_data_t} linked list. The top element of the list is the height and its next element is the width. @end deffn @deffn Macro GAL_ARITHMETIC_OP_BOX_VERTICES_ON_SPHERE Return the vertices of a (possibly rectangular) box on a sphere, given its center RA, Dec and the width of the box along the two dimensions. It will take the spherical nature of the coordinate system into account (for more, see the description of @code{gal_wcs_box_vertices_from_center} in @ref{World Coordinate System}). This function returns 8 datasets as a @code{gal_data_t} linked list in the following order: bottom-left RA, bottom-left Dec, bottom-right RA, bottom-right Dec, top-right RA, top-right Dec, top-left RA, top-left Dec. @end deffn @deffn Macro GAL_ARITHMETIC_OP_MAKENEW Create a new, zero-valued dataset with an unsigned 8-bit data type. The length along each dimension of the dataset should be given as a single list of @code{gal_data_t}s. The number of dimensions is derived from the number of nodes in the list and the length along each dimension is the single-valued element within that list. Just note that the list should be in the reverse of the desired dimensions. @end deffn @deffn Macro GAL_ARITHMETIC_OP_MAKENEW Given a dataset and a constant, @end deffn @deffn Macro GAL_ARITHMETIC_OPSTR_LOADCOL_HDU @deffnx Macro GAL_ARITHMETIC_OPSTR_LOADCOL_FILE @deffnx Macro GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX @deffnx Macro GAL_ARITHMETIC_OPSTR_LOADCOL_HDU_LEN @deffnx Macro GAL_ARITHMETIC_OPSTR_LOADCOL_FILE_LEN @deffnx Macro GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX_LEN Constant components of the @command{load-col-} operator (see @ref{Loading external columns}). These are just fixed strings (and their lengths) that are placed in between the various components of that operator to allow choosing a certain column of a certain HDU of a certain file. @end deffn @deffn Macro GAL_ARITHMETIC_OP_INDEX @deffnx Macro GAL_ARITHMETIC_OP_COUNTER @deffnx Macro GAL_ARITHMETIC_OP_INDEXONLY @deffnx Macro GAL_ARITHMETIC_OP_COUNTERONLY Return a dataset with the same number of elements and dimensionality as the first (and only!) input dataset. But each output pixel's value will be replaced by its index (counting from 0) or counter (counting from 1). Note that the @code{GAL_ARITHMETIC_OP_INDEX} and @code{GAL_ARITHMETIC_OP_INDEXONLY} operators are identical within the library (same for the counter operators). They are given separate macros here to help the higher-level callers to manage their inputs separately (see @ref{Size and position operators}). @end deffn @deffn Macro GAL_ARITHMETIC_OP_SIZE Size operator that will return a single value for datasets of any kind. When @code{gal_arithmetic} is called with this operator, it requires two arguments. The first is the dataset, and the second is a single integer value. The output type is a single integer. @end deffn @deffn Macro GAL_ARITHMETIC_OP_SWAP Return the first dataset, but with the second dataset being placed in the @code{next} element of the first. This is useful to swap the operators on the stacks of the higher-level programs that call the arithmetic library. @end deffn @deffn Macro GAL_ARITHMETIC_OP_EQB1950_TO_EQJ2000 @deffnx Macro GAL_ARITHMETIC_OP_EQB1950_TO_ECB1950 @deffnx Macro GAL_ARITHMETIC_OP_EQB1950_TO_ECJ2000 @deffnx Macro GAL_ARITHMETIC_OP_EQB1950_TO_GALACTIC @deffnx Macro GAL_ARITHMETIC_OP_EQB1950_TO_SUPERGALACTIC @deffnx Macro GAL_ARITHMETIC_OP_EQJ2000_TO_EQB1950 @deffnx Macro GAL_ARITHMETIC_OP_EQJ2000_TO_ECB1950 @deffnx Macro GAL_ARITHMETIC_OP_EQJ2000_TO_ECJ2000 @deffnx Macro GAL_ARITHMETIC_OP_EQJ2000_TO_GALACTIC @deffnx Macro GAL_ARITHMETIC_OP_EQJ2000_TO_SUPERGALACTIC @deffnx Macro GAL_ARITHMETIC_OP_ECB1950_TO_EQB1950 @deffnx Macro GAL_ARITHMETIC_OP_ECB1950_TO_EQJ2000 @deffnx Macro GAL_ARITHMETIC_OP_ECB1950_TO_ECJ2000 @deffnx Macro GAL_ARITHMETIC_OP_ECB1950_TO_GALACTIC @deffnx Macro GAL_ARITHMETIC_OP_ECB1950_TO_SUPERGALACTIC @deffnx Macro GAL_ARITHMETIC_OP_ECJ2000_TO_EQB1950 @deffnx Macro GAL_ARITHMETIC_OP_ECJ2000_TO_EQJ2000 @deffnx Macro GAL_ARITHMETIC_OP_ECJ2000_TO_ECB1950 @deffnx Macro GAL_ARITHMETIC_OP_ECJ2000_TO_GALACTIC @deffnx Macro GAL_ARITHMETIC_OP_ECJ2000_TO_SUPERGALACTIC @deffnx Macro GAL_ARITHMETIC_OP_GALACTIC_TO_EQB1950 @deffnx Macro GAL_ARITHMETIC_OP_GALACTIC_TO_EQJ2000 @deffnx Macro GAL_ARITHMETIC_OP_GALACTIC_TO_ECB1950 @deffnx Macro GAL_ARITHMETIC_OP_GALACTIC_TO_ECJ2000 @deffnx Macro GAL_ARITHMETIC_OP_GALACTIC_TO_SUPERGALACTIC @deffnx Macro GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQB1950 @deffnx Macro GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQJ2000 @deffnx Macro GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECB1950 @deffnx Macro GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECJ2000 @deffnx Macro GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_GALACTIC Operators that convert recognized celestial coordinates to and from each other. They all take two operands and return two @code{gal_data_t}s (as a list). For more on celestial coordinate conversion, see @ref{Coordinate conversion operators}. @end deffn @deftypefun {gal_data_t *} gal_arithmetic (int @code{operator}, size_t @code{numthreads}, int @code{flags}, ...) Apply the requested arithmetic operator on the operand(s). The @emph{operator} is identified through the macros above (that start with @code{GAL_ARITHMETIC_OP_}). The number of necessary operands (number of arguments to replace `@code{...}' in the declaration of this function, above) depends on the operator and is described under each operator, above. Each operand has a type of `@code{gal_data_t *}' (see last paragraph with example). If the operator can work on multiple threads, the number of threads can be specified with @code{numthreads}. When the operator is single-threaded, @code{numthreads} will be ignored. Special conditions can also be specified with the @code{flag} operator (a bit-flag with bits described above, for example, @code{GAL_ARITHMETIC_FLAG_INPLACE} or @code{GAL_ARITHMETIC_FLAG_FREE}). @code{gal_arithmetic} is a multi-argument function (like C's @code{printf}). In other words, the number of necessary arguments is not fixed and depends on the value to @code{operator}. Below, you can see a minimal, fully working example, showing how different operators need different numbers of arguments. @example #include <stdio.h> #include <stdlib.h> #include <gnuastro/fits.h> #include <gnuastro/arithmetic.h> int main(void) @{ /* Define the datasets and flag. */ gal_data_t *in1, *in2, *out1, *out2; int flag=GAL_ARITHMETIC_FLAGS_BASIC; /* Read the input images. */ in1=gal_fits_img_read("image1.fits", "1", -1, 1, NULL); in2=gal_fits_img_read("image2.fits", "1", -1, 1, NULL); /* Take the logarithm (base-e) of the first input. */ out1=gal_arithmetic(GAL_ARITHMETIC_OP_LOG, 1, flag, in1); /* Add the second input with the logarithm of the first. */ out2=gal_arithmetic(GAL_ARITHMETIC_OP_PLUS, 1, flag, in2, out1); /* Write the output into a file. */ gal_fits_img_write(out2, "out.fits", NULL, 0); /* Clean up. Due to the in-place flag (in * 'GAL_ARITHMETIC_FLAGS_BASIC'), 'out1' and 'out2' point to the * same array in memory and due to the freeing flag, any input * dataset(s) that were not returned have been freed internally * by 'gal_arithmetic'. Therefore it is only necessary to free * 'out2': all other allocated spaces have been freed internally. * before reaching this point. */ gal_data_free(out2); /* Return control back to the OS (saying that we succeeded). */ return EXIT_SUCCESS; @} @end example As you see above, you can feed the returned dataset from one call of @code{gal_arithmetic} to another call. The advantage of using @code{gal_arithmetic} (as opposed to manually writing a @code{for} or @code{while} loop and doing the operation with the @code{+} operator and @code{log()} function yourself), is that you do not have to worry about the type of the input data (for a list of acceptable data types in Gnuastro, see @ref{Library data types}). Arithmetic will automatically deal with the data types internally and choose the best output type depending on the operator. @end deftypefun @deftypefun int gal_arithmetic_set_operator (char @code{*string}, size_t @code{*num_operands}) Return the operator macro/code that corresponds to @code{string}. The number of operands that it needs are written into the space that @code{*num_operands} points to. If the string could not be interpreted as an operator, this function will return @code{GAL_ARITHMETIC_OP_INVALID}. This function will check @code{string} with the fixed human-readable names (using @code{strcmp}) for the operators and return the two numbers. Note that @code{string} must only contain the single operator name and nothing else (not even any extra white space). @end deftypefun @deftypefun {char *} gal_arithmetic_operator_string (int @code{operator}) Return the human-readable standard string that corresponds to the given operator. For example, when the input is @code{GAL_ARITHMETIC_OP_PLUS} or @code{GAL_ARITHMETIC_OP_MEAN}, the strings @code{+} or @code{mean} will be returned. @end deftypefun @deftypefun {gal_data_t *} gal_arithmetic_load_col (char @code{*str}, int @code{searchin}, int @code{ignorecase}, size_t @code{minmapsize}, int @code{quietmmap}) Return the column that corresponds to the identifier in the input string (@code{str}). @code{str} is expected to be in the format of the @command{load-col-} operator (see @ref{Loading external columns}). This function will extract the column identifier, the file name and the HDU (if necessary) from the string, read the requested column in memory and return it. See @ref{Table input output} for the macros that can be given to @code{searchin} and @code{ignorecase} and @ref{Generic data container} for the definitions of @code{minmapsize} and @code{quietmmap}. @end deftypefun @node Tessellation library, Bounding box, Arithmetic on datasets, Gnuastro library @subsection Tessellation library (@file{tile.h}) In many contexts, it is desirable to slice the dataset into subsets or tiles (overlapping or not). In such a way that you can work on each tile independently. One method would be to copy that region to a separate allocated space, but in many contexts this is not necessary and in fact can be a big burden on CPU/Memory usage. The @code{block} pointer in Gnuastro's @ref{Generic data container} is defined for such situations: where allocation is not necessary. You just want to read the data or write to it independently (or in coordination with) other regions of the dataset. Added with parallel processing, this can greatly improve the time/memory consumption. See the figure below for example: assume the @code{larger} dataset is a contiguous block of memory that you are interpreting as a 2D array. But you only want to work on the smaller @code{tile} region. @example larger --------------------------------- | | | tile | | ---------- | | | | | | |_ | | | |*| | | | ---------- | | tile->block = larger | |_ | |*| | --------------------------------- @end example To use @code{gal_data_t}'s @code{block} concept, you allocate a @code{gal_data_t *tile} which is initialized with the pointer to the first element in the sub-array (as its @code{array} argument). Note that this is not necessarily the first element in the larger array. You can set the size of the tile along with the initialization as you please. Recall that, when given a non-@code{NULL} pointer as @code{array}, @code{gal_data_initialize} (and thus @code{gal_data_alloc}) do not allocate any space and just uses the given pointer for the new @code{array} element of the @code{gal_data_t}. So your @code{tile} data structure will not be pointing to a separately allocated space. After the allocation is done, you just point @code{tile->block} to the @code{larger} dataset which hosts the full block of memory. Where relevant, Gnuastro's library functions will check the @code{block} pointer of their input dataset to see how to deal with dimensions and increments so they can always remain within the tile. The tools introduced in this section are designed to help in defining and working with tiles that are created in this manner. Since the block structure is defined as a pointer, arbitrary levels of tessellation/grid-ing are possible (@code{tile->block} may itself be a tile in an even larger allocated space). Therefore, just like a linked-list (see @ref{Linked lists}), it is important to have the @code{block} pointer of the largest (allocated) dataset set to @code{NULL}. Normally, you will not have to worry about this, because @code{gal_data_initialize} (and thus @code{gal_data_alloc}) will set the @code{block} element to @code{NULL} by default, just remember not to change it. You can then only change the @code{block} element for the tiles you define over the allocated space. Below, we will first review constructs for @ref{Independent tiles} and then define the current approach to fully tessellating a dataset (or covering every pixel/data-element with a non-overlapping tile grid in @ref{Tile grid}. This approach to dealing with parts of a larger block was inspired from a similarly named concept in the GNU Scientific Library (GSL), see its ``Vectors and Matrices'' chapter for their implementation. @menu * Independent tiles:: Work on or check independent tiles. * Tile grid:: Cover a full dataset with non-overlapping tiles. @end menu @node Independent tiles, Tile grid, Tessellation library, Tessellation library @subsubsection Independent tiles The most general application of tiles is to treat each independently, for example they may overlap, or they may not cover the full image. This section provides functions to help in checking/inspecting such tiles. In @ref{Tile grid} we will discuss functions that define/work-with a tile grid (where the tiles do not overlap and fully cover the input dataset). Therefore, the functions in this section are general and can be used for the tiles produced by that section also. @deftypefun void gal_tile_start_coord (gal_data_t @code{*tile}, size_t @code{*start_coord}) Calculate the starting coordinates of a tile in its allocated block of memory and write them in the memory that @code{start_coord} points to (which must have @code{tile->ndim} elements). @end deftypefun @deftypefun void gal_tile_start_end_coord (gal_data_t @code{*tile}, size_t @code{*start_end}, int @code{rel_block}) Put the starting and ending (end point is not inclusive) coordinates of @code{tile} into the @code{start_end} array. It is assumed that a space of @code{2*tile->ndim} has been already allocated (static or dynamic) for @code{start_end} before this function is called. @code{rel_block} (or relative-to-block) is only relevant when @code{tile} has an intermediate tile between it and the allocated space (like a channel, see @code{gal_tile_full_two_layers}). If it does not (@code{tile->block} points the allocated dataset), then the value to @code{rel_block} is irrelevant. When @code{tile->block} is itself a larger block and @code{rel_block} is set to 0, then the starting and ending positions will be based on the position within @code{tile->block}, not the allocated space. @end deftypefun @deftypefun {void *} gal_tile_start_end_ind_inclusive (gal_data_t @code{*tile}, gal_data_t @code{*work}, size_t @code{*start_end_inc}) Put the indices of the first/start and last/end pixels (inclusive) in a tile into the @code{start_end} array (that must have two elements). NOTE: this function stores the index of each point, not its coordinates. It will then return the pointer to the start of the tile in the @code{work} data structure (which does not have to be equal to @code{tile->block}. The outputs of this function are defined to make it easy to parse over an n-dimensional tile. For example, this function is one of the most important parts of the internal processing of in @code{GAL_TILE_PARSE_OPERATE} function-like macro that is described below. @end deftypefun @deftypefun {gal_data_t *} gal_tile_series_from_minmax (gal_data_t @code{*block}, size_t @code{*minmax}, size_t @code{number}) Construct a list of tile(s) given coordinates of the minimum and maximum of each tile. The minimum and maximums are assumed to be inclusive and in C order (slowest dimension first). The returned pointer is an allocated @code{gal_data_t} array that can later be freed with @code{gal_data_array_free} (see @ref{Arrays of datasets}). Internally, each element of the output array points to the next element, so the output may also be treated as a list of datasets (see @ref{List of gal_data_t}) and passed onto the other functions described in this section. The array keeping the minimum and maximum coordinates for each tile must have the following format. So in total @code{minmax} must have @code{2*ndim*number} elements. @example | min0_d0 | min0_d1 | max0_d0 | max0_d1 | ... ... | minN_d0 | minN_d1 | maxN_d0 | maxN_d1 | @end example @end deftypefun @deftypefun {gal_data_t *} gal_tile_block (gal_data_t @code{*tile}) Return the dataset that contains @code{tile}'s allocated block of memory. If tile is immediately defined as part of the allocated block, then this is equivalent to @code{tile->block}. However, it is possible to have multiple layers of tiles (where @code{tile->block} is itself a tile). So this function is the most generic way to get to the actual allocated dataset. @end deftypefun @deftypefun size_t gal_tile_block_increment (gal_data_t @code{*block}, size_t @code{*tsize}, size_t @code{num_increment}, size_t @code{*coord}) Return the increment necessary to start at the next contiguous patch memory associated with a tile. @code{block} is the allocated block of memory and @code{tsize} is the size of the tile along every dimension. If @code{coord} is @code{NULL}, it is ignored. Otherwise, it will contain the coordinate of the start of the next contiguous patch of memory. This function is intended to be used in a loop and @code{num_increment} is the main variable to this function. For the first time you call this function, it should be @code{1}. In subsequent calls (while you are parsing a tile), it should be increased by one. @end deftypefun @deftypefun {gal_data_t *} gal_tile_block_write_const_value (gal_data_t @code{*tilevalues}, gal_data_t @code{*tilesll}, int @code{withblank}, int @code{initialize}) Write a constant value for each tile over the area it covers in an allocated dataset that is the size of @code{tile}'s allocated block of memory (found through @code{gal_tile_block} described above). The arguments to this function are: @table @code @item tilevalues This must be an array that has the same number of elements as the nodes in in @code{tilesll} and in the same order that `tilesll' elements are parsed (from top to bottom, see @ref{Linked lists}). As a result the array's number of dimensions is irrelevant, it will be parsed contiguously. @item tilesll The list of input tiles (see @ref{List of gal_data_t}). Internally, it might be stored as an array (for example, the output of @code{gal_tile_series_from_minmax} described above), but this function does not care, it will parse the @code{next} elements to go to the next tile. This function will not pop-from or free the @code{tilesll}, it will only parse it from start to end. @item withblank If the block containing the tiles has blank elements, those blank elements will be blank in the output of this function also, hence the array will be initialized with blank values when this option is called (see below). @item initialize Initialize the allocated space with blank values before writing in the constant values. This can be useful when the tiles do not cover the full allocated block. @end table @end deftypefun @deftypefun {gal_data_t *} gal_tile_block_check_tiles (gal_data_t @code{*tilesll}) Make a copy of the memory block and fill it with the index of each tile in @code{tilesll} (counting from 0). The non-filled areas will have blank values. The output dataset will have a type of @code{GAL_TYPE_INT32} (see @ref{Library data types}). This function can be used when you want to check the coverage of each tile over the allocated block of memory. It is just a wrapper over the @code{gal_tile_block_write_const_value} (with @code{withblank} set to zero). @end deftypefun @deftypefun {void *} gal_tile_block_relative_to_other (gal_data_t @code{*tile}, gal_data_t @code{*other}) Return the pointer corresponding to the start of the region covered by @code{tile} over the @code{other} dataset. See the examples in @code{GAL_TILE_PARSE_OPERATE} for some example applications of this function. @end deftypefun @deftypefun void gal_tile_block_blank_flag (gal_data_t @code{*tilell}, size_t @code{numthreads}) Check if each tile in the list has blank values and update its @code{flag} to mark this check and its result (see @ref{Generic data container}). The operation will be done on @code{numthreads} threads. @end deftypefun @deffn {Function-like macro} GAL_TILE_PARSE_OPERATE (@code{IN}, @code{OTHER}, @code{PARSE_OTHER}, @code{CHECK_BLANK}, @code{OP}) Parse @code{IN} (which can be a tile or a fully allocated block of memory) and do the @code{OP} operation on it. @code{OP} can be any combination of C expressions. If @code{OTHER!=NULL}, @code{OTHER} will be interpreted as a dataset and this macro will allow access to its element(s) and it can optionally be parsed while parsing over @code{IN}. If @code{OTHER} is a fully allocated block of memory (not a tile), then the same region that is covered by @code{IN} within its own block will be parsed (the same starting pixel with the same number of pixels in each dimension). Hence, in this case, the blocks of @code{OTHER} and @code{IN} must have the same size. When @code{OTHER} is a tile it must have the same size as @code{IN} and parsing will start from its starting element/pixel. Also, the respective allocated blocks of @code{OTHER} and @code{IN} (if different) may have different sizes. Using @code{OTHER} (along with @code{PARSE_OTHER}), this function-like macro will thus enable you to parse and define your own operation on two fixed size regions in one or two blocks of memory. In the latter case, they may have different numeric data types, see @ref{Numeric data types}). The input arguments to this macro are explained below, the expected type of each argument are also written following the argument name: @table @code @item IN (gal_data_t) Input dataset, this can be a tile or an allocated block of memory. @item OTHER (gal_data_t) Dataset (@code{gal_data_t}) to parse along with @code{IN}. It can be @code{NULL}. In that case, @code{o} (see description of @code{OP} below) will be @code{NULL} and should not be used. If @code{PARSE_OTHER} is zero, only its first element will be used and the size of this dataset is irrelevant. When @code{OTHER} is a block of memory, it has to have the same size as the allocated block of @code{IN}. When it s a tile, it has to have the same size as @code{IN}. @item PARSE_OTHER (int) Parse the other dataset along with the input. When this is non-zero and @code{OTHER!=NULL}, then the @code{o} pointer will be incremented to cover the @code{OTHER} tile at the same rate as @code{i}, see description of @code{OP} for @code{i} and @code{o}. @item CHECK_BLANK (int) If it is non-zero, then the input will be checked for blank values and @code{OP} will only be called when we are not on a blank element. @item OP Operator: this can be any number of C expressions. This macro is going to define a @code{itype *i} variable which will increment over each element of the input array/tile. @code{itype} will be replaced with the C type that corresponds to the type of @code{INPUT}. As an example, if @code{INPUT}'s type is @code{GAL_DATA_UINT16} or @code{GAL_DATA_FLOAT32}, @code{i} will be defined as @code{uint16} or @code{float} respectively. This function-like macro will also define an @code{otype *o} which you can use to access an element of the @code{OTHER} dataset (if @code{OTHER!=NULL}). @code{o} will correspond to the type of @code{OTHER} (similar to @code{itype} and @code{INPUT} discussed above). If @code{PARSE_OTHER} is non-zero, then @code{o} will also be incremented to the same index element but in the other array. You can use these along with any other variable you define before this macro to process the input and/or the other. All variables within this function-like macro begin with @code{tpo_} except for the three variables listed below. Therefore, as long as you do not start the names of your variables with this prefix everything will be fine. Note that @code{i} (and possibly @code{o}) will be incremented once by this function-like macro, so do not increment them within @code{OP}. @table @code @item i Pointer to the element of @code{INPUT} that is being parsed with the proper type. @item o Pointer to the element of @code{OTHER} that is being parsed with the proper type. @code{o} can only be used if @code{OTHER!=NULL} and it will be parsed/incremented if @code{PARSE_OTHER} is non-zero. @item b Blank value in the type of @code{INPUT}. @end table @end table You can use a given tile (@code{tile} on a dataset that it was not initialized with but has the same size, let's call it @code{new}) with the following steps: @example void *tarray; gal_data_t *tblock; /* `tile->block' must be corrected AFTER `tile->array'. */ tarray = tile->array; tblock = tile->block; tile->array = gal_tile_block_relative_to_other(tile, new); tile->block = new; /* Parse and operate over this region of the `new' dataset. */ GAL_TILE_PARSE_OPERATE(tile, NULL, 0, 0, @{ YOUR_PROCESSING; @}); /* Reset `tile->block' and `tile->array'. */ tile->array=tarray; tile->block=tblock; @end example You can work on the same region of another block in one run of this function-like macro. To do that, you can make a fake tile and pass that as the @code{OTHER} argument. Below is a demonstration, @code{tile} is the actual tile that you start with and @code{new} is the other block of allocated memory. @example size_t zero=0; gal_data_t *faketile; /* Allocate the fake tile, these can be done outside a loop * (over many tiles). */ faketile=gal_data_alloc(NULL, new->type, 1, &zero, NULL, 0, -1, 1, NULL, NULL, NULL); free(faketile->array); /* To keep things clean. */ free(faketile->dsize); /* To keep things clean. */ faketile->block = new; faketile->ndim = new->ndim; /* These can be done in a loop (over many tiles). */ faketile->size = tile->size; faketile->dsize = tile->dsize; faketile->array = gal_tile_block_relative_to_other(tile, new); /* Do your processing.... in a loop (over many tiles). */ GAL_TILE_PARSE_OPERATE(tile, faketile, 1, 1, @{ YOUR_PROCESSING_EXPRESSIONS; @}); /* Clean up (outside the loop). */ faketile->array=NULL; faketile->dsize=NULL; gal_data_free(faketile); @end example @end deffn @node Tile grid, , Independent tiles, Tessellation library @subsubsection Tile grid One very useful application of tiles is to completely cover an input dataset with tiles. Such that you know every pixel/data-element of the input image is covered by only one tile. The constructs in this section allow easy definition of such a tile structure. They will create lists of tiles that are also usable by the general tools discussed in @ref{Independent tiles}. As discussed in @ref{Tessellation}, (mainly raw) astronomical images will mostly require two layers of tessellation, one for amplifier channels which all have the same size and another (smaller tile-size) tessellation over each channel. Hence, in this section we define a general structure to keep the main parameters of this two-layer tessellation and help in benefiting from it. @deftp {Type (C @code{struct})} gal_tile_two_layer_params The general structure to keep all the necessary parameters for a two-layer tessellation. @example struct gal_tile_two_layer_params @{ /* Inputs */ size_t *tilesize; /*******************************/ size_t *numchannels; /* These parameters have to be */ float remainderfrac; /* filled manually before */ uint8_t workoverch; /* calling the functions in */ uint8_t checktiles; /* this section. */ uint8_t oneelempertile; /*******************************/ /* Internal parameters. */ size_t ndim; size_t tottiles; size_t tottilesinch; size_t totchannels; size_t *channelsize; size_t *numtiles; size_t *numtilesinch; char *tilecheckname; size_t *permutation; size_t *firsttsize; /* Tile and channel arrays (which are also lists). */ gal_data_t *tiles; gal_data_t *channels; @}; @end example @end deftp @deftypefun {size_t *} gal_tile_full (gal_data_t @code{*input}, size_t @code{*regular}, float @code{remainderfrac}, gal_data_t @code{**out}, size_t @code{multiple}, size_t @code{**firsttsize}) Cover the full dataset with (mostly) identical tiles and return the number of tiles created along each dimension. The regular tile size (along each dimension) is determined from the @code{regular} array. If @code{input}'s size is not an exact multiple of @code{regular} for each dimension, then the tiles touching the edges in that dimension will have a different size to fully cover every element of the input (depending on @code{remainderfrac}). The output is an array with the same dimensions as @code{input} which contains the number of tiles along each dimension. See @ref{Tessellation} for a description of its application in Gnuastro's programs and @code{remainderfrac}, just note that this function defines only one layer of tiles. This is a low-level function (independent of the @code{gal_tile_two_layer_params} structure defined above). If you want a two-layer tessellation, directly call @code{gal_tile_full_two_layers} that is described below. The input arguments to this function are: @table @code @item input The main dataset (allocated block) which you want to create a tessellation over (only used for its sizes). So @code{input} may be a tile also. @item regular The size of the regular tiles along each of the input's dimensions. So it must have the same number of elements as the dimensions of @code{input} (or @code{input->ndim}). @item remainderfrac The significant fraction of the remainder space to see if it should be split into two and put on both sides of a dimension or not. This is thus only relevant @code{input} length along a dimension is not an exact multiple of the regular tile size along that dimension. See @ref{Tessellation} for a more thorough discussion. @item out Pointer to the array of data structures that will keep all the tiles (see @ref{Arrays of datasets}). If @code{*out==NULL}, then the necessary space to keep all the tiles will be allocated. If not, then all the tile information will be filled from the dataset that @code{*out} points to, see @code{multiple} for more. @item multiple When @code{*out==NULL} (and thus will be allocated by this function), allocate space for @code{multiple} times the number of tiles needed. This can be very useful when you have several more identically sized @code{inputs}, and you want all their tiles to be allocated (and thus indexed) together, even though they have different @code{block} datasets (that then link to one allocated space). See the definition of channels in @ref{Tessellation} and @code{gal_tile_full_two_layers} below. @item firsttsize The size of the first tile along every dimension. This is only different from the regular tile size when @code{regular} is not an exact multiple of @code{input}'s length along every dimension. This array is allocated internally by this function. @end table @end deftypefun @deftypefun void gal_tile_full_sanity_check (char @code{*filename}, char @code{*hdu}, gal_data_t @code{*input}, struct gal_tile_two_layer_params @code{*tl}) Make sure that the input parameters (in @code{tl}, short for two-layer) correspond to the input dataset. @code{filename} and @code{hdu} are only required for error messages. Also, allocate and fill the @code{tl->channelsize} array. @end deftypefun @deftypefun void gal_tile_full_two_layers (gal_data_t @code{*input}, struct gal_tile_two_layer_params @code{*tl}) Create the two layered tessellation in @code{tl}. The general set of steps you need to take to define the two-layered tessellation over an image can be seen in the example code below. @example gal_data_t *input; struct gal_tile_two_layer_params tl; char *filename="input.fits", *hdu="1"; /* Set all the inputs shown in the structure definition. */ ... /* Read the input dataset. */ input=gal_fits_img_read(filename, hdu, -1, 1, NULL); /* Do a sanity check and preparations. */ gal_tile_full_sanity_check(filename, hdu, input, &tl); /* Build the two-layer tessellation*/ gal_tile_full_two_layers(input, &tl); /* `tl.tiles' and `tl.channels' are now a lists of tiles.*/ @end example @end deftypefun @deftypefun void gal_tile_full_permutation (struct gal_tile_two_layer_params @code{*tl}) Make a permutation to allow the conversion of tile location in memory to its location in the full input dataset and put it in @code{tl->permutation}. If a permutation has already been defined for the tessellation, this function will not do anything. If permutation will not be necessary (there is only one channel or one dimension), then this function will not do anything (@code{tl->permutation} must have been initialized to @code{NULL}). When there is only one channel OR one dimension, the tiles are allocated in memory in the same order that they represent the input data. However, to make channel-independent processing possible in a generic way, the tiles of each channel are allocated contiguously. So, when there is more than one channel AND more than one dimension, the index of the tile does not correspond to its position in the grid covering the input dataset. The example below may help clarify: assume you have a 6x6 tessellation with two channels in the horizontal and one in the vertical. On the left you can see how the tile IDs correspond to the input dataset. NOTE how `03' is on the second row, not on the first after `02'. On the right, you can see how the tiles are stored in memory (and shown if you simply write the array into a FITS file for example). @example Corresponding to input In memory ---------------------- -------------- 15 16 17 33 34 35 30 31 32 33 34 35 12 13 14 30 31 32 24 25 26 27 28 29 09 10 11 27 28 29 18 19 20 21 22 23 06 07 08 24 25 26 <-- 12 13 14 15 16 17 03 04 05 21 22 23 06 07 08 09 10 11 00 01 02 18 19 20 00 01 02 03 04 05 @end example As a result, if your values are stored in same order as the tiles, and you want them in over-all memory (for example, to save as a FITS file), you need to permute the values: @example gal_permutation_apply(values, tl->permutation); @end example If you have values over-all and you want them in tile-order, you can apply the inverse permutation: @example gal_permutation_apply_inverse(values, tl->permutation); @end example Recall that this is the definition of permutation in this context: @example permute: IN_ALL[ i ] = IN_MEMORY[ perm[i] ] inverse: IN_ALL[ perm[i] ] = IN_MEMORY[ i ] @end example @end deftypefun @deftypefun void gal_permutation_apply_onlydim0 (gal_data_t @code{*input}, size_t @code{*permutation}) Similar to @code{gal_permutation_apply}, but when the dataset is 2-dimensional, permute each row (dimension 1 in C) as one element. In other words, only permute along dimension 0. The @code{permutation} array should therefore only have @code{input->dsize[0]} elements. @end deftypefun @deftypefun void gal_tile_full_values_write (gal_data_t @code{*tilevalues}, struct gal_tile_two_layer_params @code{*tl}, int @code{withblank}, char @code{*filename}, gal_fits_list_key_t @code{*keys}, int @code{freekeys}) Write one value for each tile into a file. It is important to note that the values in @code{tilevalues} must be ordered in the same manner as the tiles, so @code{tilevalues->array[i]} is the value that should be given to @code{tl->tiles[i]}. The @code{tl->permutation} array must have been initialized before calling this function with @code{gal_tile_full_permutation}. If @code{withblank} is non-zero, then block structure of the tiles will be checked and all blank pixels in the block will be blank in the final output file also. @end deftypefun @deftypefun {gal_data_t *} gal_tile_full_values_smooth (gal_data_t @code{*tilevalues}, struct gal_tile_two_layer_params @code{*tl}, size_t @code{width}, size_t @code{numthreads}) Smooth the given values with a flat kernel of the given @code{width}. This cannot be done manually because if @code{tl->workoverch==0}, tiles in different channels must not be mixed/smoothed. Also the tiles are contiguous within the channel, not within the image, see the description under @code{gal_tile_full_permutation}. @end deftypefun @deftypefun size_t gal_tile_full_id_from_coord (struct gal_tile_two_layer_params @code{*tl}, size_t @code{*coord}) Return the ID of the tile that corresponds to the coordinates @code{coord}. Having this ID, you can use the @code{tl->tiles} array to get to the proper tile or read/write a value into an array that has one value per tile. @end deftypefun @deftypefun void gal_tile_full_free_contents (struct gal_tile_two_layer_params @code{*tl}) Free all the allocated arrays within @code{tl}. @end deftypefun @node Bounding box, Polygons, Tessellation library, Gnuastro library @subsection Bounding box (@file{box.h}) Functions related to reporting the bounding box of certain inputs are declared in @file{gnuastro/box.h}. All coordinates in this header are in the FITS format (first axis is the horizontal and the second axis is vertical). @deftypefun void gal_box_bound_ellipse_extent (double @code{a}, double @code{b}, double @code{theta_deg}, double @code{*extent}) Return the maximum extent along each dimension of the given ellipse from the center of the ellipse. Therefore this is half the extent of the box in each dimension. @code{a} is the ellipse semi-major axis, @code{b} is the semi-minor axis, @code{theta_deg} is the position angle in degrees. The extent in each dimension is in floating point format and stored in @code{extent} which must already be allocated before this function. @end deftypefun @deftypefun void gal_box_bound_ellipse (double @code{a}, double @code{b}, double @code{theta_deg}, long @code{*width}) Any ellipse can be enclosed into a rectangular box. This function will write the height and width of that box where @code{width} points to. It assumes the center of the ellipse is located within the central pixel of the box. @code{a} is the ellipse semi-major axis length, @code{b} is the semi-minor axis, @code{theta_deg} is the position angle in degrees. The @code{width} array will contain the output size in long integer type. @code{width[0]}, and @code{width[1]} are the number of pixels along the first and second FITS axis. Since the ellipse center is assumed to be in the center of the box, all the values in @code{width} will be an odd integer. @end deftypefun @deftypefun void gal_box_bound_ellipsoid_extent (double @code{*semiaxes}, double @code{*euler_deg}, double @code{*extent}) Return the maximum extent along each dimension of the given ellipsoid from its center. Therefore this is half the extent of the box in each dimension. The semi-axis lengths of the ellipsoid must be present in the 3 element @code{semiaxis} array. The @code{euler_deg} array contains the three ellipsoid Euler angles in degrees. For a description of the Euler angles, see description of @code{gal_box_bound_ellipsoid} below. The extent in each dimension is in floating point format and stored in @code{extent} which must already be allocated before this function. @end deftypefun @deftypefun void gal_box_bound_ellipsoid (double @code{*semiaxes}, double @code{*euler_deg}, long @code{*width}) Any ellipsoid can be enclosed into a rectangular volume/box. The purpose of this function is to give the integer size/width of that box. The semi-axes lengths of the ellipse must be in the @code{semiaxes} array (with three elements). The major axis length must be the first element of @code{semiaxes}. The only other condition is that the next two semi-axes must both be smaller than the first. The orientation of the major axis is defined through three proper Euler angles (ZXZ order in degrees) that are given in the @code{euler_deg} array. The @code{width} array will contain the output size in long integer type (in FITS axis order). Since the ellipsoid center is assumed to be in the center of the box, all the values in @code{width} will be an odd integer. @cindex Euler angles The proper Euler angles can be defined in many ways (which axes to rotate about). For a full description of the Euler angles, please see @url{https://en.wikipedia.org/wiki/Euler_angles, Wikipedia}. Here we adopt the ZXZ (or @mymath{Z_1X_2Z_3}) proper Euler angles were the first rotation is done around the Z axis, the second one about the (rotated) X axis and the third about the (rotated) Z axis. @end deftypefun @deftypefun void gal_box_border_from_center (double @code{center}, size_t @code{ndim}, long @code{*width}, long @code{*fpixel}, long @code{*lpixel}) Given the center coordinates in @code{center} and the @code{width} (along each dimension) of a box, return the coordinates of the first (@code{fpixel}) and last (@code{lpixel}) pixels. All arrays must have @code{ndim} elements (one for each dimension). @end deftypefun @deftypefun void gal_box_border_rotate_around_center (long @code{*fpixel}, long @code{*lpixel}, size_t @code{ndim}, float @code{rotate_deg}) Modify the input first and last pixels (@code{fpixel} and @code{lpixel}, that you can estimate with @code{gal_box_border_from_center}) to account for the given rotation (in units of degrees) in 2D (currently @code{ndim} can only have a value of @code{2}). @end deftypefun @deftypefun int gal_box_overlap (long @code{*naxes}, long @code{*fpixel_i}, long @code{*lpixel_i}, long @code{*fpixel_o}, long @code{*lpixel_o}, size_t @code{ndim}) An @code{ndim}-dimensional dataset of size @code{naxes} (along each dimension, in FITS order) and a box with first and last (inclusive) coordinate of @code{fpixel_i} and @code{lpixel_i} is given. This box does not necessarily have to lie within the dataset, it can be outside of it, or only partially overlap. This function will change the values of @code{fpixel_i} and @code{lpixel_i} to exactly cover the overlap in the input dataset's coordinates. This function will return 1 if there is an overlap and 0 if there is not. When there is an overlap, the coordinates of the first and last pixels of the overlap will be put in @code{fpixel_o} and @code{lpixel_o}. @end deftypefun @node Polygons, Qsort functions, Bounding box, Gnuastro library @subsection Polygons (@file{polygon.h}) Polygons are commonly necessary in image processing. For example, in Crop they are used for cutting out non-rectangular regions of a image (see @ref{Crop}), and in Warp, for mapping different pixel grids over each other (see @ref{Warp}). @cindex Convex polygons @cindex Concave polygons @cindex Polygons, Convex @cindex Polygons, Concave Polygons come in two classes: convex and concave (or generally, non-convex!), see below for a demonstration. Convex polygons are those where all inner angles are less than 180 degrees. By contrast, a convex polygon is one where an inner angle may be more than 180 degress. @example Concave Polygon Convex Polygon D --------C D------------- C \ | E / | \E | \ | / | \ | A--------B A ----------B @end example In all the functions here the vertices (and points) are defined as an array. So a polygon with 4 vertices will be identified with an array of 8 elements with the first two elements keeping the 2D coordinates of the first vertice and so on. @deffn Macro GAL_POLYGON_MAX_CORNERS The largest number of vertices a polygon can have in this library. @end deffn @deffn Macro GAL_POLYGON_ROUND_ERR @cindex Round-off error We have to consider floating point round-off errors when dealing with polygons. For example, we will take @code{A} as the maximum of @code{A} and @code{B} when @code{A>B-GAL_POLYGON_ROUND_ERR}. @end deffn @deftypefun void gal_polygon_vertices_sort_convex (double @code{*in}, size_t @code{n}, size_t @code{*ordinds}) We have a simple polygon (that can result from projection, so its edges do not collide or it does not have holes) and we want to order its corners in an anticlockwise fashion. This is necessary for clipping it and finding its area later. The input vertices can have practically any order. The input (@code{in}) is an array containing the coordinates (two values) of each vertice. @code{n} is the number of corners. So @code{in} should have @code{2*n} elements. The output (@code{ordinds}) is an array with @code{n} elements specifying the indices in order. This array must have been allocated before calling this function. The indexes are output for more generic usage, for example, in a homographic transform (necessary in warping an image, see @ref{Linear warping basics}), the necessary order of vertices is the same for all the pixels. In other words, only the positions of the vertices change, not the way they need to be ordered. Therefore, this function would only be necessary once. As a summary, the input is unchanged, only @code{n} values will be put in the @code{ordinds} array. Such that calling the input coordinates in the following fashion will give an anti-clockwise order when there are 4 vertices: @example 1st vertice: in[ordinds[0]*2], in[ordinds[0]*2+1] 2nd vertice: in[ordinds[1]*2], in[ordinds[1]*2+1] 3rd vertice: in[ordinds[2]*2], in[ordinds[2]*2+1] 4th vertice: in[ordinds[3]*2], in[ordinds[3]*2+1] @end example @cindex Convex Hull @noindent The implementation of this is very similar to the Graham scan in finding the Convex Hull. However, in projection we will never have a concave polygon (the left condition below, where this algorithm will get to E before D), we will always have a convex polygon (right case) or E will not exist! This is because we are always going to be calculating the area of the overlap between a quadrilateral and the pixel grid or the quadrilateral itself. The @code{GAL_POLYGON_MAX_CORNERS} macro is defined so there will be no need to allocate these temporary arrays separately. Since we are dealing with pixels, the polygon cannot really have too many vertices. @end deftypefun @deftypefun int gal_polygon_is_convex (double @code{*v}, size_t @code{n}) Returns @code{1} if the polygon is convex with vertices defined by @code{v} and @code{0} if it is a concave polygon. Note that the vertices of the polygon should be sorted in an anti-clockwise manner. @end deftypefun @deftypefun double gal_polygon_area_flat (double @code{*v}, size_t @code{n}) Find the area of a polygon with vertices defined in @code{v} on a euclidian (flat) coordinate system. @code{v} points to an array of doubles which keep the positions of the vertices such that @code{v[0]} and @code{v[1]} are the positions of the first vertice to be considered. @end deftypefun @deftypefun double gal_polygon_area_sky (double @code{*v}, size_t @code{n}) Find the area of a polygon with vertices defined in @code{v} on a celestial coordinate system. This is a coordinate system where the first coordinate goes from 0 to 360 (increasing to the right), while the second coordinate ranges from -90 to +90 (on the poles). @code{v} points to an array of doubles which keep the positions of the vertices such that @code{v[0]} and @code{v[1]} are the positions of the first vertice to be considered. This function uses an approximation to account for the curvature of the sky and the different nature of spherical coordinates with respect to the flat coordinate system. @url{https://savannah.gnu.org/bugs/index.php?64617, Bug 64617} has been defined in Gnuastro to address this problem. Please check that bug in case it has been fixed. Until this bug is fixed, here are some tips: @itemize @item Subtract the RA and Dec of all the vertice coordinates from a constant so the center of the polygon falls on (RA, Dec) of (180,0). The sphere has a similar nature everywhere on it, so shifting the polygon vertices will not change its area; this also removes issues with the RA=0 or RA=360 coordinate and decrease issues caused by RA depending on declination. @item These approximations should not cause any statistically significant error on normal (less than a few degrees) scales. But it won't hurt to do a small sanity check for your particular usage scenario. @item Any help (even in the mathematics of the problem; not necessary programming) would be appreciated (we didn't have time to derive the necessary equations), so if you have some background in this and can prepare the mathematical description of the problem, please get in touch. @end itemize @end deftypefun @deftypefun int gal_polygon_is_inside (double @code{*v}, double @code{*p}, size_t @code{n}) Returns @code{0} if point @code{p} in inside a polygon, either convex or concave. The vertices of the polygon are defined by @code{v} and @code{0} otherwise, they have to be ordered in an anti-clockwise manner. This function uses the @url{https://en.wikipedia.org/wiki/Point_in_polygon#Winding_number_algorithm, winding number algorithm}, to check the points. Note that this is a generic function (working on both concave and convex polygons, so if you know before-hand that your polygon is convex, it is much more efficient to use @code{gal_polygon_is_inside_convex}. @end deftypefun @deftypefun int gal_polygon_is_inside_convex (double @code{*v}, double @code{*p}, size_t @code{n}) Return @code{1} if the point @code{p} is within the polygon whose vertices are defined by @code{v}. The polygon is assumed to be convex, for a more generic function that deals with concave and convex polygons, see @code{gal_polygon_is_inside}. Note that the vertices of the polygon have to be sorted in an anti-clock-wise manner. @end deftypefun @deftypefun int gal_polygon_ppropin (double @code{*v}, double @code{*p}, size_t @code{n}) Similar to @code{gal_polygon_is_inside_convex}, except that if the point @code{p} is on one of the edges of a polygon, this will return @code{0}. @end deftypefun @deftypefun int gal_polygon_is_counterclockwise (double @code{*v}, size_t @code{n}) Returns @code{1} if the sorted polygon has a counter-clockwise orientation and @code{0} otherwise. This function uses the concept of ``winding'', which defines the relative order in which the vertices of a polygon are listed to determine the orientation of vertices. For complex polygons (where edges, or sides, intersect), the most significant orientation is returned. In a complex polygon, when the alternative windings are equal (for example, an @code{8}-shape) it will return @code{1} (as if it was counter-clockwise). Note that the polygon vertices have to be sorted before calling this function. @end deftypefun @deftypefun int gal_polygon_to_counterclockwise (double @code{*v}, size_t @code{n}) Arrange the vertices of the sorted polygon in place, to be in a counter-clockwise direction. If the input polygon already has a counter-clockwise direction it will not touch the input. The return value is @code{1} on successful execution. This function is just a wrapper over @code{gal_polygon_is_counterclockwise}, and will reverse the order of the vertices when necessary. @end deftypefun @deftypefun void gal_polygon_clip (double @code{*s}, size_t @code{n}, double @code{*c}, size_t @code{m}, double @code{*o}, size_t @code{*numcrn}) Clip (find the overlap of) two polygons. This function uses the @url{https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm, Sutherland-Hodgman} polygon clipping algorithm. Note that the vertices of both polygons have to be sorted in an anti-clock-wise manner. The Pseudocode from Wikipedia: @verbatim List outputList = subjectPolygon; for (Edge clipEdge in clipPolygon) do List inputList = outputList; outputList.clear(); Point S = inputList.last; for (Point E in inputList) do if (E inside clipEdge) then if (S not inside clipEdge) then outputList.add(ComputeIntersection(S,E,clipEdge)); end if outputList.add(E); else if (S inside clipEdge) then outputList.add(ComputeIntersection(S,E,clipEdge)); end if S = E; done done @end verbatim The difference is that we are not using lists, but arrays to keep polygon vertices. The two polygons are called Subject @code{s} and Clip @code{c} with @code{n} and @code{m} vertices respectively. The output is stored in @code{o} and the number of elements in the output are stored in what @code{*numcrn} (for number of corners) points to. @end deftypefun @deftypefun void gal_polygon_vertices_sort (double @code{*vertices}, size_t @code{n}, size_t @code{*ordinds}) Sort the indices of the un-ordered @code{vertices} array to a counter-clockwise polygon in the already allocated space of @code{ordinds}. It is assumed that there are @code{n} vertices, and thus that @code{vertices} contains @code{2*n} elements where the two coordinates of the first vertice occupy the first two elements of the array and so on. The polygon can be both concave and convex (see the start of this section). However, note that for concave polygons there is no unique sort from an un-ordered set of vertices. So after this function you may want to use @code{gal_polygon_is_convex} and print a warning to check the output if the polygon was concave. Note that the contents of the @code{vertices} array are left untouched by this function. If you want to write the ordered vertice coordinates in another array with the same size, you can use a loop like this: @example for(i=0;i<n;++i) @{ ordered[i*2 ] = vertices[ ordinds[i]*2 ]; ordered[i*2+1] = vertices[ ordinds[i]*2 + 1]; @} @end example In this algorithm, we find the rightmost and leftmost points (based on their x-coordinate) and use the diagonal vector between those points to group the points in arrays based on their position with respect to this vector. For anticlockwise sorting, all the points below the vector are sorted by their ascending x-coordinates and points above the vector are sorted in decreasing order using @code{qsort}. Finally, both these arrays are merged together to get the final sorted array of points, from which the points are indexed into the @code{ordinds} using linear search. @end deftypefun @node Qsort functions, K-d tree, Polygons, Gnuastro library @subsection Qsort functions (@file{qsort.h}) @cindex @code{qsort} When sorting a dataset is necessary, the C programming language provides the @code{qsort} (Quick sort) function. @code{qsort} is a generic function which allows you to sort any kind of data structure (not just a single array of numbers). To define ``greater'' and ``smaller'' (for sorting), @code{qsort} needs another function, even for simple numerical types. The functions introduced in this section are to passed onto @code{qsort}. @cindex NaN Note that larger and smaller operators are not defined on NaN elements. Therefore, if the input array is a floating point type, and contains NaN values, the relevant functions of this section are going to put the NaN elements at the end of the list (after the sorted non-NaN elements), irrespective of the requested sorting order (increasing or decreasing). The first class of functions below (with @code{TYPE} in their names) can be used for sorting a simple numeric array. Just replace @code{TYPE} with the dataset's numeric datatype. The second set of functions can be used to sort indices (leave the actual numbers untouched). To use the second set of functions, a global variable or structure are also necessary as described below. @deffn {Global variable} {gal_qsort_index_single} @cindex Thread safety @cindex Multi-threaded operation Pointer to an array (for example, @code{float *} or @code{int *}) to use as a reference in @code{gal_qsort_index_single_TYPE_d} or @code{gal_qsort_index_single_TYPE_i}, see the explanation of these functions for more. Note that if @emph{more than one} array is to be sorted in a multi-threaded operation, these functions will not work as expected. However, when all the threads just sort the indices based on a @emph{single array}, this global variable can safely be used in a multi-threaded scenario. @end deffn @deftp {Type (C @code{struct})} gal_qsort_index_multi Structure to get the sorted indices of multiple datasets on multiple threads with @code{gal_qsort_index_multi_d} or @code{gal_qsort_index_multi_i}. Note that the @code{values} array will not be changed by these functions, it is only read. Therefore all the @code{values} elements in the (to be sorted) array of @code{gal_qsort_index_multi} must point to the same place. @example struct gal_qsort_index_multi @{ float *values; /* Array of values (same in all). */ size_t index; /* Index of each element to be sorted. */ @}; @end example @end deftp @deftypefun int gal_qsort_TYPE_d (const void @code{*a}, const void @code{*b}) When passed to @code{qsort}, this function will sort a @code{TYPE} array in decreasing order (first element will be the largest). Please replace @code{TYPE} (in the function name) with one of the @ref{Numeric data types}, for example, @code{gal_qsort_int32_d}, or @code{gal_qsort_float64_d}. @end deftypefun @deftypefun int gal_qsort_TYPE_i (const void @code{*a}, const void @code{*b}) When passed to @code{qsort}, this function will sort a @code{TYPE} array in increasing order (first element will be the smallest). Please replace @code{TYPE} (in the function name) with one of the @ref{Numeric data types}, for example, @code{gal_qsort_int32_i}, or @code{gal_qsort_float64_i}. @end deftypefun @deftypefun int gal_qsort_index_single_TYPE_d (const void @code{*a}, const void @code{*b}) When passed to @code{qsort}, this function will sort a @code{size_t} array based on decreasing values in the @code{gal_qsort_index_single}. The global @code{gal_qsort_index_single} pointer has a @code{void *} pointer which will be cast to the proper type based on this function: for example @code{gal_qsort_index_single_uint16_d} will cast the array to an unsigned 16-bit integer type. The array that @code{gal_qsort_index_single} points to will not be changed, it is only read. For example, see this demo program: @example #include <stdio.h> #include <stdlib.h> /* qsort is defined in stdlib.h. */ #include <gnuastro/qsort.h> int main (void) @{ size_t s[4]=@{0, 1, 2, 3@}; float f[4]=@{1.3,0.2,1.8,0.1@}; gal_qsort_index_single=f; qsort(s, 4, sizeof(size_t), gal_qsort_index_single_float_d); printf("%zu, %zu, %zu, %zu\n", s[0], s[1], s[2], s[3]); return EXIT_SUCCESS; @} @end example @noindent The output will be: @code{2, 0, 1, 3}. @end deftypefun @deftypefun int gal_qsort_index_single_TYPE_i (const void @code{*a}, const void @code{*b}) Similar to @code{gal_qsort_index_single_TYPE_d}, but will sort the indexes such that the values of @code{gal_qsort_index_single} can be parsed in increasing order. @end deftypefun @deftypefun int gal_qsort_index_multi_d (const void @code{*a}, const void @code{*b}) When passed to @code{qsort} with an array of @code{gal_qsort_index_multi}, this function will sort the array based on the values of the given indices. The sorting will be ordered according to the @code{values} pointer of @code{gal_qsort_index_multi}. Note that @code{values} must point to the same place in all the structures of the @code{gal_qsort_index_multi} array. This function is only useful when the indices of multiple arrays on multiple threads are to be sorted. If your program is single threaded, or all the indices belong to a single array (sorting different sub-sets of indices in a single array on multiple threads), it is recommended to use @code{gal_qsort_index_single_d}. @end deftypefun @deftypefun int gal_qsort_index_multi_i (const void @code{*a}, const void *@code{b}) Similar to @code{gal_qsort_index_multi_d}, but the result will be sorted in increasing order (first element will have the smallest value). @end deftypefun @node K-d tree, Permutations, Qsort functions, Gnuastro library @subsection K-d tree (@file{kdtree.h}) @cindex K-d tree K-d tree is a space-partitioning binary search tree for organizing points in a k-dimensional space. They are a very useful data structure for multidimensional searches like range searches and nearest neighbor searches. For a more formal and complete introduction see @url{https://en.wikipedia.org/wiki/K-d_tree, the Wikipedia page}. Each non-leaf node in a k-d tree divides the space into two parts, known as half-spaces. To select the top/root node for partitioning, we find the median of the points and make a hyperplane normal to the first dimension. The points to the left of this space are represented by the left subtree of that node and points to the right of the space are represented by the right subtree. This is then repeated for all the points in the input, thus associating a ``left'' and ``right'' branch for each input point. Gnuastro uses the standard algorithms of the k-d tree with one small difference that makes it much more memory and CPU optimized. The set of input points that define the tree nodes are given as a list of Gnuastro's data container type, see @ref{List of gal_data_t}. Each @code{gal_data_t} in the list represents the point's coordinate in one dimension, and the first element in the list is the first dimension. Hence the number of data values in each @code{gal_data_t} (which must be equal in all of them) represents the number of points. This is the same format that Gnuastro's Table reading/writing functions read/write columns in tables, see @ref{Table input output}. The output k-d tree is a list of two @code{gal_data_t}s, representing the input's row-number (or index, counting from 0) of the left and right subtrees of each row. Each @code{gal_data_t} thus has the same number of rows (or points) as the input, but only containing integers with a type of @code{uint32_t} (unsigned 32-bit integer). If a node has no left, or right subtree, then @code{GAL_BLANK_UINT32} will be used. Below you can see the simple tree for 2D points from Wikipedia. The input point coordinates are represented as two input @code{gal_data_t}s (@code{X} and @code{Y}, where @code{X->next=Y} and @code{Y->next=NULL}). If you had three dimensional points, you could define an extra @code{gal_data_t} such that @code{Y->next=Z} and @code{Z->next=NULL}. The output is always a list of two @code{gal_data_t}s, where the first one contains the index of the left sub-tree in the input, and the second one, the index of the right subtree. The index of the root node (@code{0} in the case below@footnote{This example input table is the same as the example in Wikipedia (as of December 2020). However, on the Wikipedia output, the root node is (7,2), not (5,4). The difference is primarily because there are 6 rows and the median element of an even number of elements can vary by integer calculation strategies. Here we use 0-based indexes for finding median and round to the smaller integer.}) is also returned as a single number. @example INDEX INPUT OUTPUT K-D Tree (as guide) X --> Y LEFT --> RIGHT (visualized) ---------- ------- -------------- ------------------ 0 5 4 1 2 (5,4) 1 2 3 BLANK 4 / \ 2 7 2 5 3 (2,3) \ 3 9 6 BLANK BLANK \ (7,2) 4 4 7 BLANK BLANK (4,7) / \ 5 8 1 BLANK BLANK (8,1) (9,6) @end example This format is therefore scalable to any number of dimensions: the number of dimensions are determined from the number of nodes in the input list of @code{gal_data_t}s (for example, using @code{gal_list_data_number}). In Gnuastro's k-d tree implementation, there are thus no special structures to keep every tree node (which would take extra memory and would need to be moved around as the tree is being created). Everything is done internally on the index of each point in the input dataset: the only thing that is flipped/sorted during tree creation is the index to the input row for any number of dimensions. As a result, Gnuastro's k-d tree implementation is very memory and CPU efficient and its two output columns can directly be written into a standard table (without having to define any special binary format). @deftypefun {gal_data_t *} gal_kdtree_create (gal_data_t @code{*coords_raw}, size_t @code{*root}) Create a k-d tree in a bottom-up manner (from leaves to the root). This function returns two @code{gal_data_t}s connected as a list, see description above. The first dataset contains the indexes of left and right nodes of the subtrees for each input node. The index of the root node is written into the memory that @code{root} points to. @code{coords_raw} is the list of the input points (one @code{gal_data_t} per dimension, see above). If the input dataset has no data (@code{coords_raw->size==0}), this function will return a @code{NULL} pointer. For example, assume you have the simple set of points below (from the visualized example at the start of this section) in a plain-text file called @file{coordinates.txt}: @example $ cat coordinates.txt 5 4 2 3 7 2 9 6 4 7 8 1 @end example With the program below, you can calculate the kd-tree, and write it in a FITS file (while keeping the root index as a FITS keyword inside of it). @example #include <stdio.h> #include <gnuastro/table.h> #include <gnuastro/kdtree.h> int main (void) @{ gal_data_t *input, *kdtree; char kdtreefile[]="kd-tree.fits"; char inputfile[]="coordinates.txt"; /* To write the root within the saved file. */ size_t root; char *unit="index"; char *keyname="KDTROOT"; gal_fits_list_key_t *keylist=NULL; char *comment="k-d tree root index (counting from 0)."; /* Read the input table. Note: this assumes the table only * contains your input point coordinates (one column for each * dimension). If it contains more columns with other properties * for each point, you can specify which columns to read by * name or number, see the documentation of 'gal_table_read'. */ input=gal_table_read(inputfile, "1", NULL, NULL, GAL_TABLE_SEARCH_NAME, 0, -1, 0, NULL); /* Construct a k-d tree. The index of root is stored in `root` */ kdtree=gal_kdtree_create(input, &root); /* Write the k-d tree to a file and write root index and input * name as FITS keywords ('gal_table_write' frees 'keylist').*/ gal_fits_key_list_title_add(&keylist, "k-d tree parameters", 0); gal_fits_key_write_filename("KDTIN", inputfile, &keylist, 0, 1); gal_fits_key_list_add_end(&keylist, GAL_TYPE_SIZE_T, keyname, 0, &root, 0, comment, 0, unit, 0); gal_table_write(kdtree, &keylist, NULL, GAL_TABLE_FORMAT_BFITS, kdtreefile, "kdtree", 0, 1); /* Clean up and return. */ gal_list_data_free(input); gal_list_data_free(kdtree); return EXIT_SUCCESS; @} @end example You can inspect the saved k-d tree FITS table with Gnuastro's @ref{Table} (first command below), and you can see the keywords containing the root index with @ref{Fits} (second command below): @example asttable kd-tree.fits astfits kd-tree.fits -h1 @end example @end deftypefun @deftypefun size_t gal_kdtree_nearest_neighbour (gal_data_t @code{*coords_raw}, gal_data_t @code{*kdtree}, size_t @code{root}, double @code{*point}, double @code{*least_dist}) Returns the index of the nearest input point to the query point (@code{point}, assumed to be an array with same number of elements as @code{gal_data_t}s in @code{coords_raw}). The distance between the query point and its nearest neighbor is stored in the space that @code{least_dist} points to. This search is efficient due to the constant checking for the presence of possible best points in other branches. If it is not possible for the other branch to have a better nearest neighbor, that branch is not searched. As an example, let's use the k-d tree that was created in the example of @code{gal_kdtree_create} (above) and find the nearest row to a given coordinate (@code{point}). This will be a very common scenario, especially in large and multi-dimensional datasets where the k-d tree creation can take long and you do not want to re-create the k-d tree every time. In the @code{gal_kdtree_create} example output, we also wrote the k-d tree root index as a FITS keyword (@code{KDTROOT}), so after loading the two table data (input coordinates and k-d tree), we will read the root from the FITS keyword. This is a very simple example, but the scalability is clear: for example, it is trivial to parallelize (see @ref{Library demo - multi-threaded operation}). @example #include <stdio.h> #include <gnuastro/table.h> #include <gnuastro/kdtree.h> int main (void) @{ /* INPUT: desired point. */ double point[2]=@{8.9,5.9@}; /* Same as example in description of 'gal_kdtree_create'. */ gal_data_t *input, *kdtree; char kdtreefile[]="kd-tree.fits"; char inputfile[]="coordinates.txt"; /* Processing variables of this function. */ char kdtreehdu[]="1"; double *in_x, *in_y, least_dist; size_t root, nkeys=1, nearest_index; gal_data_t *rkey, *keysll=gal_data_array_calloc(nkeys); /* Read the input coordinates, see comments in example of * 'gal_kdtree_create' for more. */ input=gal_table_read(inputfile, "1", NULL, NULL, GAL_TABLE_SEARCH_NAME, 0, -1, 0, NULL); /* Read the k-d tree contents (created before). */ kdtree=gal_table_read(kdtreefile, "1", NULL, NULL, GAL_TABLE_SEARCH_NAME, 0, -1, 0, NULL); /* Read the k-d tree root index from the header keyword. * See example in description of 'gal_fits_key_read_from_ptr'.*/ keysll[0].name="KDTROOT"; keysll[0].type=GAL_TYPE_SIZE_T; gal_fits_key_read(kdtreefile, kdtreehdu, keysll, 0, 0, NULL); keysll[0].name=NULL; /* Since we did not allocate it. */ rkey=gal_data_copy_to_new_type(&keysll[0], GAL_TYPE_SIZE_T); root=((size_t *)(rkey->array))[0]; /* Find the nearest neighbour of the point. */ nearest_index=gal_kdtree_nearest_neighbour(input, kdtree, root, point, &least_dist); /* Print the results. */ in_x=input->array; in_y=input->next->array; printf("(%g, %g): nearest is (%g, %g), with a distance of %g\n", point[0], point[1], in_x[nearest_index], in_y[nearest_index], least_dist); /* Clean up and return. */ gal_data_free(rkey); gal_list_data_free(input); gal_list_data_free(kdtree); gal_data_array_free(keysll, nkeys, 1); return EXIT_SUCCESS; @} @end example @end deftypefun @node Permutations, Matching, K-d tree, Gnuastro library @subsection Permutations (@file{permutation.h}) @cindex permutation Permutation is the technical name for re-ordering of values. The need for permutations occurs a lot during (mainly low-level) processing. To do permutation, you must provide two inputs: an array of values (that you want to re-order in place) and a permutation array which contains the new index of each element (let's call it @code{perm}). The diagram below shows the input array before and after the re-ordering. @example permute: AFTER[ i ] = BEFORE[ perm[i] ] i = 0 .. N-1 inverse: AFTER[ perm[i] ] = BEFORE[ i ] i = 0 .. N-1 @end example @cindex GNU Scientific Library The functions here are a re-implementation of the GNU Scientific Library's @code{gsl_permute} function. The reason we did not use that function was that it uses system-specific types (like @code{long} and @code{int}) which can have different widths on different systems, hence are not easily convertible to Gnuastro's fixed width types (see @ref{Numeric data types}). There is also a separate function for each type, heavily using macros to allow a @code{base} function to work on all the types. Thus it is hard to read/understand. Hence, Gnuastro contains a re-write of their steps in a new type-agnostic method which is a single function that can work on any type. As described in GSL's source code and manual, this implementation comes from Donald Knuth's @emph{Art of computer programming} book, in the "Sorting and Searching" chapter of Volume 3 (3rd ed). Exercise 10 of Section 5.2 defines the problem and in the answers, Knuth describes the solution. So if you are interested, please have a look there for more. We are in contact with the GSL developers and in the future@footnote{Gnuastro's @url{http://savannah.gnu.org/task/?14497, Task 14497}. If this task is still ``postponed'' when you are reading this and you are interested to help, your contributions would be very welcome. Both Gnuastro and GSL developers are very busy, hence both would appreciate your help.} we will submit these implementations to GSL. If they are finally incorporated there, we will delete this section in future versions. @deftypefun void gal_permutation_check (size_t @code{*permutation}, size_t @code{size}) Print how @code{permutation} will re-order an array that has @code{size} elements for each element in one one line. @end deftypefun @deftypefun void gal_permutation_apply (gal_data_t @code{*input}, size_t @code{*permutation}) Apply @code{permutation} on the @code{input} dataset (can have any type), see above for the definition of permutation. @end deftypefun @deftypefun void gal_permutation_apply_inverse (gal_data_t @code{*input}, size_t @code{*permutation}) Apply the inverse of @code{permutation} on the @code{input} dataset (can have any type), see above for the definition of permutation. @end deftypefun @deftypefun void gal_permutation_transpose_2d (gal_data_t @code{*input}) Transpose an input 2D matrix into a new dataset. If the input is not a square, this function will change the @code{input->array} element to a newly allocated array (the old one will be freed internally). Therefore, in case you have already stored @code{input->array} for other usage @emph{before} this function, and the input is not a square, be sure to update the previously stored pointer if the input is not a square. @end deftypefun @node Matching, Statistical operations, Permutations, Gnuastro library @subsection Matching (@file{match.h}) @cindex Matching @cindex Coordinate matching Matching is often necessary when two measurements of the same points have been done using different instruments (or hardware), different software or different configurations of the same software. In other words, you have two catalogs or tables, and each has N columns containing the N-dimensional ``coordinate'' values of each point. Each table can have other columns too, for example, one can have magnitudes in one filter, and another can have morphology measurements. The matching functions here will use the coordinate columns of the two tables to find a permutation for each, and the total number of matched rows (@mymath{N_{match}}). This will enable you to match by the positions if you like. At a higher level, you can apply the permutation to the magnitude or morphology columns to merge the catalogs over the @mymath{N_{match}} rows. The input and output data formats of the functions are the some and described below before the actual functions. Each function also has extra arguments due to the particular algorithm it uses for the matching. The two inputs of the functions (@code{coord1} and @code{coord2}) must be @ref{List of gal_data_t}. Each @code{gal_data_t} node in @code{coord1} or @code{coord2} should be a single dimensional dataset (column in a table) and all the nodes (in each) must have the same number of elements (rows). In other words, each column can be visualized as having the coordinates of each point in its respective dimension. The dimensions of the coordinates is determined by the number of @code{gal_data_t} nodes in the two input lists (which must be equal). The number of rows (or the number of elements in each @code{gal_data_t}) in the columns of @code{coord1} and @code{coord2} can (and, usually will!) be different. In summary, these functions will be happy if you use @code{gal_table_read} to read the two coordinate columns from a file, see @ref{Table input output}. @cindex Permutation The functions below return a simply-linked list of three 1D datasets (see @ref{List of gal_data_t}), let's call the returned dataset @code{ret}. The first two (@code{ret} and @code{ret->next}) are permutations. In other words, the @code{array} elements of both have a type of @code{size_t}, see @ref{Permutations}. The third node (@code{ret->next->next}) is the calculated distance for that match and its array has a type of @code{double}. The number of matches will be put in the space pointed by the @code{nummatched} argument. If there was not any match, this function will return @code{NULL}. The two permutations can be applied to the rows of the two inputs: the first one (@code{ret}) should be applied to the rows of the table containing @code{coord1} and the second one (@code{ret->next}) to the table containing @code{coord2}. After applying the returned permutations to the inputs, the top @code{nummatched} elements of both will match with each other. The ordering of the rest of the elements is undefined (depends on the matching function used). The third node is the distances between the respective match (which may be elliptical distance, see discussion of ``aperture'' below). The functions will not simply return the nearest neighbor as a match. This is because the nearest neighbor may be too far to be a meaningful! They will check the distance between the nearest neighbor of each point and only return a match if it is within an acceptable N-dimensional distance (or ``aperture''). The matching aperture is defined by the @code{aperture} array that is an input argument to the functions. If several points of one catalog lie within this aperture of a point in the other catalog, the nearest is defined as the match. In a 2D situation (where the input lists have two nodes), for the most generic case, @code{aperture} must have three elements: the major axis length, axis ratio and position angle (see @ref{Defining an ellipse and ellipsoid}). If @code{aperture[1]==1}, the aperture will be a circle of radius @code{aperture[0]} and the third value will not be used. When the aperture is an ellipse, distances between the points are also calculated in the respective elliptical distances (@mymath{r_{el}} in @ref{Defining an ellipse and ellipsoid}). @strong{Output permutations ignore internal sorting}: the output permutations will correspond to the initial inputs. Therefore, even when @code{inplace!=0} (and this function re-arranges the inputs in place), the output permutation will correspond to original (possibly non-sorted) inputs. The reason for this is that you rarely want to permute the actual positional columns after the match. Usually, you also have other columns (such as the magnitude and morphology) and you want to find how they differ between the objects that match. Once you have the permutations, they can be applied to those other columns (see @ref{Permutations}) and the higher-level processing can continue. So if you do not need the coordinate columns for the rest of your analysis, it is better to set @code{inplace=1}. @deftypefun {gal_data_t *} gal_match_sort_based (gal_data_t @code{*coord1}, gal_data_t @code{*coord2}, double @code{*aperture}, int @code{sorted_by_first}, int @code{inplace}, size_t @code{minmapsize}, int @code{quietmmap}, size_t @code{*nummatched}) Use a basic sort-based match to find the matching points of two input coordinates. See the descriptions above on the format of the inputs and outputs. To speed up the search, this function will sort the input coordinates by their first column (first axis). If @emph{both} are already sorted by their first column, you can avoid the sorting step by giving a non-zero value to @code{sorted_by_first}. When sorting is necessary and @code{inplace} is non-zero, the actual input columns will be sorted. Otherwise, an internal copy of the inputs will be made, used (sorted) and later freed before returning. Therefore, when @code{inplace==0}, inputs will remain untouched, but this function will take more time and memory. If internal allocation is necessary and the space is larger than @code{minmapsize}, the space will be not allocated in the RAM, but in a file, see description of @option{--minmapsize} and @code{--quietmmap} in @ref{Processing options}. @end deftypefun @deftypefun {gal_data_t *} gal_match_kdtree (gal_data_t @code{*coord1}, gal_data_t @code{*coord2}, gal_data_t @code{*coord1_kdtree}, size_t @code{kdtree_root}, double @code{*aperture}, size_t @code{numthreads}, size_t @code{minmapsize}, int @code{quietmmap}, size_t @code{*nummatched}) @cindex Matching by k-d tree @cindex k-d tree matching Use the k-d tree concept for finding matches between two catalogs, optionally in parallel (on @code{numthreads} threads). The k-d tree of the first input (@code{coord1_kdtree}), and its root index (@code{kdtree_root}), should be constructed and found before calling this function, to do this, you can use the @code{gal_kdtree_create} of @ref{K-d tree}. The desired @code{aperture} array is the same as @code{gal_match_sort_based} and described at the top of this section. If @code{coord1_kdtree==NULL}, this function will return a @code{NULL} pointer and write a value of @code{0} in the space that @code{nummatched} points to. The final number of matches is returned in @code{nummatched} and the format of the returned dataset (three columns) is described above. If internal allocation is necessary and the space is larger than @code{minmapsize}, the space will be not allocated in the RAM, but in a file, see description of @option{--minmapsize} and @code{--quietmmap} in @ref{Processing options}. @end deftypefun @node Statistical operations, Fitting functions, Matching, Gnuastro library @subsection Statistical operations (@file{statistics.h}) After reading a dataset into memory from a file or fully simulating it with another process, the most common processes that will be done on it are statistical operations to let you quantify different aspects of the data. the functions in this section describe Gnuastro's current set of tools for this job. All these functions can work on any numeric data type natively (see @ref{Numeric data types}) and can also work on tiles over a dataset. Hence the inputs and outputs are in Gnuastro's @ref{Generic data container}. @deffn Macro GAL_STATISTICS_SIG_CLIP_MAX_CONVERGE The maximum number of clips, when @mymath{\sigma}-clipping should be done by convergence. If the clipping does not converge before making this many clips, all @mymath{\sigma}-clipping outputs will be NaN. @end deffn @deffn Macro GAL_STATISTICS_MODE_GOOD_SYM The minimum acceptable symmetricity of the mode calculation. If the symmetricity of the derived mode is less than this value, all the returned values by @code{gal_statistics_mode} will have a value of NaN. @end deffn @deffn Macro GAL_STATISTICS_BINS_INVALID @deffnx Macro GAL_STATISTICS_BINS_REGULAR @deffnx Macro GAL_STATISTICS_BINS_IRREGULAR Macros used to identify if the regularity of the bins when defining bins. @end deffn @deffn Macro GAL_STATISTICS_CLIP_OUTCOL_STD @deffnx Macro GAL_STATISTICS_CLIP_OUTCOL_MAD @deffnx Macro GAL_STATISTICS_CLIP_OUTCOL_MEAN @deffnx Macro GAL_STATISTICS_CLIP_OUTCOL_MEDIAN @deffnx Macro GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED @deffnx Macro GAL_STATISTICS_CLIP_OUTCOL_NUMBER_CLIPS Macros containing the index of the clipping outputs, see the descriptions of @code{gal_statistics_clip_sigma} below. @end deffn @deffn Macro GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD @deffnx Macro GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MAD @deffnx Macro GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN Macros containing bit flags for optional clipping outputs, see the descriptions of @code{gal_statistics_clip_sigma} below. @end deffn @cindex Number @deftypefun {gal_data_t *} gal_statistics_number (gal_data_t @code{*input}) Return a single-element dataset with type @code{size_t} which contains the number of non-blank elements in @code{input}. @end deftypefun @cindex Minimum @deftypefun {gal_data_t *} gal_statistics_minimum (gal_data_t @code{*input}) Return a single-element dataset containing the minimum non-blank value in @code{input}. The numerical datatype of the output is the same as @code{input}. @end deftypefun @cindex Maximum @deftypefun {gal_data_t *} gal_statistics_maximum (gal_data_t @code{*input}) Return a single-element dataset containing the maximum non-blank value in @code{input}. The numerical datatype of the output is the same as @code{input}. @end deftypefun @cindex Sum @deftypefun {gal_data_t *} gal_statistics_sum (gal_data_t @code{*input}) Return a single-element (@code{double} or @code{float64}) dataset containing the sum of the non-blank values in @code{input}. @end deftypefun @cindex Mean @cindex Average @deftypefun {gal_data_t *} gal_statistics_mean (gal_data_t @code{*input}) Return a single-element (@code{double} or @code{float64}) dataset containing the mean of the non-blank values in @code{input}. @end deftypefun @cindex Standard deviation @deftypefun {gal_data_t *} gal_statistics_std (gal_data_t @code{*input}) Return a single-element (@code{double} or @code{float64}) dataset containing the standard deviation of the non-blank values in @code{input}. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_mean_std (gal_data_t @code{*input}) Return a two-element (@code{double} or @code{float64}) dataset containing the mean and standard deviation of the non-blank values in @code{input}. The first element of the returned dataset is the mean and the second is the standard deviation. This function will calculate both values in one pass over the dataset. Hence when both the mean and standard deviation of a dataset are necessary, this function is much more efficient than calling @code{gal_statistics_mean} and @code{gal_statistics_std} separately. @end deftypefun @deftypefun double gal_statistics_std_from_sums (double @code{sum}, double @code{sump2}, size_t @code{num}) Return the standard deviation from the values that can be obtained in a single pass through the distribution: @code{sum}: the sum of the elements, @code{sump2}: the sum of the power-of-2 of each element, and @code{num}: the number of elements. This is a low-level function that is only useful after the distribution of values has been parsed (and the three input arguments are calculated). It is the lower-level function that is used in functions like @code{gal_statistics_std}, or other components of Gnuastro that measure the standard deviation (for example, MakeCatalog's @option{--std} column). @end deftypefun @cindex Median @deftypefun {gal_data_t *} gal_statistics_median (gal_data_t @code{*input}, int @code{inplace}) Return a single-element dataset containing the median of the non-blank values in @code{input}. The numerical datatype of the output is the same as @code{input}. Calculating the median involves sorting the dataset and removing blank values, for better performance (and less memory usage), you can give a non-zero value to the @code{inplace} argument. In this case, the sorting and removal of blank elements will be done directly on the input dataset. However, after this function the original dataset may have changed (if it was not sorted or had blank values). @end deftypefun @cindex Median absolute deviation (MAD) @cindex MAD (Median absolute deviation) @deftypefun {gal_data_t *} gal_statistics_mad (gal_data_t @code{*input}, int @code{inplace}) Return a single-element dataset with same type as input, containing the median absolute deviation (MAD) of the non-blank values in @code{input}. If @code{inplace==0}, the input dataset will remain untouched. Otherwise, the MAD calculation will be done on the input dataset without allocating a new one (its values will be changed after this function). This is good when you do not need the input after this function and avoid taking extra RAM and CPU. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_median_mad (gal_data_t @code{*input}, int @code{inplace}) Return a two-element dataset with same type as input, containing the median and median absolute deviation (MAD) of the non-blank values in @code{input}. If @code{inplace==0}, the input dataset will remain untouched. Otherwise, the MAD calculation will be done on the input dataset without allocating a new one (its values will be changed after this function). This is good when you do not need the input after this function and avoid taking extra RAM and CPU. @end deftypefun @cindex Quantile @deftypefun size_t gal_statistics_quantile_index (size_t @code{size}, double @code{quantile}) Return the index of the element that has a quantile of @code{quantile} assuming the dataset has @code{size} elements. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_quantile (gal_data_t @code{*input}, double @code{quantile}, int @code{inplace}) Return a single-element dataset containing the value with in a quantile @code{quantile} of the non-blank values in @code{input}. The numerical datatype of the output is the same as @code{input}. See @code{gal_statistics_median} for a description of @code{inplace}. @end deftypefun @deftypefun size_t gal_statistics_quantile_function_index (gal_data_t @code{*input}, gal_data_t @code{*value}, int @code{inplace}) Return the index of the quantile function (inverse quantile) of @code{input} at @code{value}. In other words, this function will return the index of the nearest element (of a sorted and non-blank) @code{input} to @code{value}. If the value is outside the range of the input, then this function will return @code{GAL_BLANK_SIZE_T}. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_quantile_function (gal_data_t @code{*input}, gal_data_t @code{*value}, int @code{inplace}) Return a single-element dataset containing the quantile function of the non-blank values in @code{input} at @code{value} (a single-element dataset). The numerical data type is of the returned dataset is @code{float64} (or @code{double}). In other words, this function will return the quantile of @code{value} in @code{input}. @code{value} has to have the same type as @code{input}. See @code{gal_statistics_median} for a description of @code{inplace}. When all elements are blank, the returned value will be NaN. If the value is smaller than the input's smallest element, the returned value will be negative infinity. If the value is larger than the input's largest element, then the returned value will be positive infinity @end deftypefun @deftypefun {gal_data_t *} gal_statistics_unique (gal_data_t @code{*input}, int @code{inplace}) Return a 1D dataset with the same numeric data type as the input, but only containing its unique elements and without any (possible) blank/NaN elements. Note that the input's number of dimensions is irrelevant for this function. If @code{inplace} is not zero, then the unique values will over-write the allocated space of the input, otherwise a new space will be allocated and the input will not be touched. @end deftypefun @deftypefun int gal_statistics_has_negative (gal_data_t @code{*input}) Return @code{1} if the input dataset contains a negative number and @code{0} otherwise. If the dataset doesn't have a numeric type (as in a string), this function will abort with, saying that it does not recognize the file type. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_mode (gal_data_t @code{*input}, float @code{mirrordist}, int @code{inplace}) Return a four-element (@code{double} or @code{float64}) dataset that contains the mode of the @code{input} distribution. This function implements the non-parametric algorithm to find the mode that is described in Appendix C of Akhlaghi and Ichikawa @url{https://arxiv.org/abs/1505.01664,2015}. In short it compares the actual distribution and its ``mirror distribution'' to find the mode. In order to be efficient, you can determine how far the comparison goes away from the mirror through the @code{mirrordist} parameter (think of it as a multiple of sigma/error). See @code{gal_statistics_median} for a description of @code{inplace}. The output array has the following elements (in the given order, note that counting in C starts from 0). @example array[0]: mode array[1]: mode quantile. array[2]: symmetricity. array[3]: value at the end of symmetricity. @end example @end deftypefun @deftypefun {gal_data_t *} gal_statistics_mode_mirror_plots (gal_data_t @code{*input}, gal_data_t @code{*value}, size_t @code{numbins}, int @code{inplace}, double @code{*mirror_val}) Make a mirrored histogram and cumulative frequency plot (with @code{numbins}) with the mirror distribution of the @code{input} having a value in @code{value}. If all the input elements are blank, or the mirror value is outside the range of the input, this function will return a @code{NULL} pointer. The output is a list of data structures (see @ref{List of gal_data_t}): the first is the bins with one bin at the mirror point, the second is the histogram with a maximum of one and the third is the cumulative frequency plot (with a maximum of one). @end deftypefun @deftypefun int gal_statistics_is_sorted (gal_data_t @code{*input}, int @code{updateflags}) Return @code{0} if the input is not sorted, if it is sorted, this function will return @code{1} and @code{2} if it is increasing or decreasing, respectively. This function will abort with an error if @code{input} has zero elements and will return @code{1} (sorted, increasing) when there is only one element. This function will only look into the dataset if the @code{GAL_DATA_FLAG_SORT_CH} bit of @code{input->flag} is @code{0}, see @ref{Generic data container}. When the flags do not indicate a previous check @emph{and} @code{updateflags} is non-zero, this function will set the flags appropriately to avoid having to re-check the dataset in future calls (this can be very useful when repeated checks are necessary). When @code{updateflags==0}, this function has no side-effects on the dataset: it will not toggle the flags. If you want to re-check a dataset with the blank-value-check flag already set (for example, if you have made changes to it), then explicitly set the @code{GAL_DATA_FLAG_SORT_CH} bit to zero before calling this function. When there are no other flags, you can simply set the flags to zero (with @code{input->flag=0}), otherwise you can use this expression: @example input->flag &= ~GAL_DATA_FLAG_SORT_CH; @end example @end deftypefun @deftypefun void gal_statistics_sort_increasing (gal_data_t @code{*input}) Sort the input dataset (in place) in an increasing order and toggle the sort-related bit flags accordingly. @end deftypefun @deftypefun void gal_statistics_sort_decreasing (gal_data_t @code{*input}) Sort the input dataset (in place) in a decreasing order and toggle the sort-related bit flags accordingly. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_no_blank_sorted (gal_data_t @code{*input}, int @code{inplace}) Remove all the blanks and sort the input dataset. If @code{inplace} is non-zero this will happen on the input dataset (in the allocated space of the input dataset). However, if @code{inplace} is zero, this function will allocate a new copy of the dataset and work on that. Therefore if @code{inplace==0}, the input dataset will be modified. This function uses the bit flags of the input, so if you have modified the dataset, set @code{input->flag=0} before calling this function. Also note that @code{inplace} is only for the dataset elements. Therefore even when @code{inplace==0}, if the input is already sorted @emph{and} has no blank values, then the flags will be updated to show this. If all the elements were blank, then the returned dataset's @code{size} will be zero. This is thus a good parameter to check after calling this function to see if there actually were any non-blank elements in the input or not and take the appropriate measure. This can help avoid strange bugs in later steps. The flags of a zero-sized returned dataset will indicate that it has no blanks and is sorted in an increasing order. Even if having blank values or being sorted is not defined on a zero-element dataset, it is up to the caller to choose what they will do with a zero-element dataset. The flags have to be set after this function any way. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_regular_bins (gal_data_t @code{*input}, gal_data_t @code{*inrange}, size_t @code{numbins}, double @code{onebinstart}) Generate an array of regularly spaced elements as a 1D array (column) of type @code{double} (i.e., @code{float64}, it has to be double to account for small differences on the bin edges). The input arguments are described below @table @code @item input The dataset you want to apply the bins to. This is only necessary if the range argument is not complete, see below. If @code{inrange} has all the necessary information, you can pass a @code{NULL} pointer for this. @item inrange This dataset keeps the desired range along each dimension of the input data structure, it has to be in @code{float} (i.e., @code{float32}) type. @itemize @item If you want the full range of the dataset (in any dimensions, then just set @code{inrange} to @code{NULL} and the range will be specified from the minimum and maximum value of the dataset (@code{input} cannot be @code{NULL} in this case). @item If there is one element for each dimension in range, then it is viewed as a quantile (Q), and the range will be: `Q to 1-Q'. @item If there are two elements for each dimension in range, then they are assumed to be your desired minimum and maximum values. When either of the two are NaN, the minimum and maximum will be calculated for it. @end itemize @item numbins The number of bins: must be larger than 0. @item onebinstart A desired value to start one bin. Note that with this option, the bins will not start and end exactly on the given range values, it will be slightly shifted to accommodate this request (enough for the bin containing the value to start at it). If you do not have any preference on where to start a bin, set this to NAN. @end table @end deftypefun @deftypefun {gal_data_t *} gal_statistics_histogram (gal_data_t @code{*input}, gal_data_t @code{*bins}, int @code{normalize}, int @code{maxone}) @cindex Histogram Make a histogram of all the elements in the given dataset with bin values that are defined in the @code{bins} structure (see @code{gal_statistics_regular_bins}, they currently have to be equally spaced). The returned histogram is a 1-D @code{gal_data_t} of type @code{GAL_TYPE_FLOAT32}, with the same number of elements as @code{bins}. For each bin, it will contain the number of input elements that fell inside of that bin. Let's write the center of the @mymath{i}th element of the bin array as @mymath{b_i}, and the fixed half-bin width as @mymath{h}. Then element @mymath{j} of the input array (@mymath{in_j}) will be counted in @mymath{b_i} if @mymath{(b_i-h) \le in_j < (b_i+h)}. However, if @mymath{in_j} is somewhere in the last bin, the condition changes to @mymath{(b_i-h) \le in_j \le (b_i+h)}. If @code{normalize!=0}, the histogram will be ``normalized'' such that the sum of the counts column will be one. In other words, all the counts in every bin will be divided by the total number of counts. If @code{maxone!=0}, the histogram's maximum count will be 1. In other words, the counts in every bin will be divided by the value of the maximum. In both of these cases, the output dataset will have a @code{GAL_DATA_FLOAT32} datatype. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_histogram2d (gal_data_t @code{*input}, gal_data_t @code{*bins}) @cindex Histogram, 2D @cindex 2D histogram This function is very similar to @code{gal_statistics_histogram}, but will build a 2D histogram (count how many of the elements of @code{input} are a within a 2D box. The bins comprising the first dimension of the 2D box are defined by @code{bins}. The bins of the second dimension are defined by @code{bins->next} (@code{bins} is a @ref{List of gal_data_t}). Both the @code{bin} and @code{bin->next} can be created with @code{gal_statistics_regular_bins}. This function returns a list of @code{gal_data_t} with three nodes/columns, so you can directly write them into a table (see @ref{Table input output}). Assuming @code{bins} has @mymath{N1} bins and @code{bins->next} has @mymath{N2} bins, each node/column of the returned output is a 1D array with @mymath{N1\times N2} elements. The first and second columns are the center of the 2D bin along the first and second dimensions and have a @code{double} data type. The third column is the 2D histogram (the number of input elements that have a value within that 2D bin) and has a @code{uint32} data type (see @ref{Numeric data types}). @end deftypefun @deftypefun {gal_data_t *} gal_statistics_cfp (gal_data_t @code{*input}, gal_data_t @code{*bins}, int @code{normalize}) Make a cumulative frequency plot (CFP) of all the elements in @code{input} with bin values that are defined in the @code{bins} structure (see @code{gal_statistics_regular_bins}). The CFP is built from the histogram: in each bin, the value is the sum of all previous bins in the histogram. Thus, if you have already calculated the histogram before calling this function, you can pass it onto this function as the data structure in @code{bins->next} (see @code{List of gal_data_t}). If @code{bin->next!=NULL}, then it is assumed to be the histogram. If it is @code{NULL}, then the histogram will be calculated internally and freed after the job is finished. When a histogram is given and it is normalized, the CFP will also be normalized (even if the normalized flag is not set here): note that a normalized CFP's maximum value is 1. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_clip_sigma (gal_data_t @code{*input}, float @code{multip}, float @code{param}, float @code{extrastats}, int @code{inplace}, int @code{quiet}) Apply @mymath{\sigma}-clipping on a given dataset and return a dataset that contains the results. For a description of @mymath{\sigma}-clipping see @ref{Sigma clipping}. @code{multip} is the multiple of the standard deviation (or @mymath{\sigma}, that is used to define outliers in each round of clipping). The role of @code{param} is determined based on its value. If @code{param} is larger than @code{1} (one), it must be an integer and will be interpreted as the number clips to do. If it is less than @code{1} (one), it is interpreted as the tolerance level to stop the iteration. The returned dataset (let's call it @code{out}) contains a 6-element array with type @code{GAL_TYPE_FLOAT32}. Through the @code{GAL_STATISTICS_CLIP_OUTCOL_*} macros below, you can access any particular measurement. @example out=gal_statistics_clip_sigma(input, ....); float *array=out->array; array[ GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED ] array[ GAL_STATISTICS_CLIP_OUTCOL_MEAN ] array[ GAL_STATISTICS_CLIP_OUTCOL_STD ] array[ GAL_STATISTICS_CLIP_OUTCOL_MEDIAN ] array[ GAL_STATISTICS_CLIP_OUTCOL_MAD ] array[ GAL_STATISTICS_CLIP_OUTCOL_NUMBER_CLIPS ] @end example However, note that all are not measured by default! Since the mean and MAD are not necessary during sigma-clipping, if you want them, you have to set the following two bit flags in the @code{extrastats} argument as below. @example int extrastats=0; /* To initialize all bits */ /* If you want the sigma-clipped MAD. */ extrastats |= GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MAD; /* If you want the sigma-clipped mean. */ extrastats |= GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN; @end example If the @mymath{\sigma}-clipping does not converge or all input elements are blank, then this function will return NaN values for all the elements above. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_clip_mad (gal_data_t @code{*input}, float @code{multip}, float @code{param}, uint8_t @code{extrastats}, int @code{inplace}, int @code{quiet}) Similar to @code{gal_statistics_clip_sigma}, but will do median absolute deviation (MAD) based clipping, see @ref{MAD clipping}. The only difference is that for this function the MAD is automatically calculated during clipping. It is the mean and standard deviation that will not be calculated unless requested with the @code{GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN} and @code{GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD} bit flats respectively. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_outlier_bydistance (int @code{pos1_neg0}, gal_data_t @code{*input}, size_t @code{window_size}, float @code{sigma}, float @code{sigclip_multip}, float @code{sigclip_param}, int @code{inplace}, int @code{quiet}) Find the first positive outlier (if @code{pos1_neg0!=0}) in the @code{input} distribution. When @code{pos1_neg0==0}, the same algorithm goes to the start of the dataset. The returned dataset contains a single element: the first positive outlier. It is one of the dataset's elements, in the same type as the input. If the process fails for any reason (for example, no outlier was found), a @code{NULL} pointer will be returned. All (possibly existing) blank elements are first removed from the input dataset, then it is sorted. A sliding window of @code{window_size} elements is parsed over the dataset. Starting from the @code{window_size}-th element of the dataset, in the direction of increasing values. This window is used as a reference. The first element where the distance to the previous (sorted) element is @code{sigma} units away from the distribution of distances in its window is considered an outlier and returned by this function. Formally, if we assume there are @mymath{N} non-blank elements. They are first sorted. Searching for the outlier starts on element @mymath{W}. Let's take @mymath{v_i} to be the @mymath{i}-th element of the sorted input (with no blank values) and @mymath{m} and @mymath{\sigma} as the @mymath{\sigma}-clipped median and standard deviation from the distances of the previous @mymath{W} elements (not including @mymath{v_i}). If the value given to @code{sigma} is displayed with @mymath{s}, the @mymath{i}-th element is considered as an outlier when the condition below is true. @dispmath{{(v_i-v_{i-1})-m\over \sigma}>s} The @code{sigclip_multip} and @code{sigclip_param} arguments specify the properties of the @mymath{\sigma}-clipping (see @ref{Sigma clipping} for more). You see that by this definition, the outlier cannot be any of the lower half elements. The advantage of this algorithm compared to @mymath{\sigma}-clippign is that it only looks backwards (in the sorted array) and parses it in one direction. If @code{inplace!=0}, the removing of blank elements and sorting will be done within the input dataset's allocated space. Otherwise, this function will internally allocate (and later free) the necessary space to keep the intermediate space that this process requires. If @code{quiet!=0}, this function will report the parameters every time it moves the window as a separate line with several columns. The first column is the value, the second (in square brackets) is the sorted index, the third is the distance of this element from the previous one. The Fourth and fifth (in parenthesis) are the median and standard deviation of the @mymath{\sigma}-clipped distribution within the window and the last column is the difference between the third and fourth, divided by the fifth. @end deftypefun @deftypefun {gal_data_t *} gal_statistics_outlier_flat_cfp (gal_data_t @code{*input}, size_t @code{numprev}, float @code{sigclip_multip}, float @code{sigclip_param}, float @code{thresh}, size_t @code{numcontig}, int @code{inplace}, int @code{quiet}, size_t @code{*index}) Return the first element in the given dataset where the cumulative frequency plot first becomes significantly flat for a sufficient number of elements. The returned dataset only has one element (with the same type as the input). If @code{index!=NULL}, the index (counting from zero, after sorting the dataset and removing any blanks) is written in the space that @code{index} points to. If no sufficiently flat portion is found, the returned pointer will be @code{NULL}. @cindex Sigma-clipping The flatness on the cumulative frequency plot is defined like this (see @ref{Histogram and Cumulative Frequency Plot}): on the sorted dataset, for every point (@mymath{a_i}), we calculate @mymath{d_i=a_{i+2}-a_{i-2}}. This done on the first @mymath{N} elements (value of @code{numprev}). After element @mymath{a_{N+2}}, we start estimating the flatness as follows: for every element we use the @mymath{N}, @mymath{d_i} measurements before it as the reference. Let's call this set @mymath{D_i} for element @mymath{i}. The @mymath{\sigma}-clipped median (@mymath{m}) and standard deviation (@mymath{s}) of @mymath{D_i} are then calculated. The @mymath{\sigma}-clipping can be configured with the two @code{sigclip_param} and @code{sigclip_multip} arguments. Taking @mymath{t} as the significance threshold (value to @code{thresh}), a point is considered flat when @mymath{a_i>m+t\sigma}. But a single point satisfying this condition will probably just be due to noise. To make a more robust estimate, this significance/condition has to hold for @code{numcontig} contiguous elements after @mymath{a_i}. When this is satisfied, @mymath{a_i} is returned as the point where the distribution's cumulative frequency plot becomes flat. To get a good estimate of @mymath{m} and @mymath{s}, it is thus recommended to set @code{numprev} as large as possible. However, be careful not to set it too high: the checks in the paragraph above are not done on the first @code{numprev} elements and this function assumes the flatness occurs after them. Also, be sure that the value to @code{numcontig} is much less than @code{numprev}, otherwise @mymath{\sigma}-clipping may not be able to remove the immediate outliers in @mymath{D_i} near the boundary of the flat region. When @code{quiet==0}, the basic measurements done on each element are printed on the command-line (good for finding the best parameters). When @code{inplace!=0}, the sorting and removal of blank elements is done on the input dataset, so the input may be altered after this function. @end deftypefun @node Fitting functions, Binary datasets, Statistical operations, Gnuastro library @subsection Fitting functions (@file{fit.h}) @cindex Fitting @cindex Least squares fitting After doing a measurement, it is usually necessary to parameterize the relation that has been found. The functions in this section are wrappers over the GNU Scientific Library (GSL) @url{https://www.gnu.org/software/gsl/doc/html/lls.html, Linear Least-Squares Fitting}, to make them easily accessible using Gnuastro's @ref{Generic data container}. The respective GSL function is mentioned under each function. @deffn {Global integer} GAL_FIT_INVALID @deffnx {Global integer} GAL_FIT_LINEAR @deffnx {Global integer} GAL_FIT_LINEAR_WEIGHTED @deffnx {Global integer} GAL_FIT_LINEAR_NO_CONSTANT @deffnx {Global integer} GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED @deffnx {Global integer} GAL_FIT_POLYNOMIAL @deffnx {Global integer} GAL_FIT_POLYNOMIAL_WEIGHTED @deffnx {Global integer} GAL_FIT_POLYNOMIAL_NUMBER Identifiers for the various types of fitting functions. These can be used by the callers of these functions to select between various fitting types. They can easily be converted to, and from, fixed human-readable strings using the @code{gal_fit_name_*} functions below. The last one @code{GAL_FIT_ROBUST_NUMBER} is the total number of available fitting methods (can be used to add more macros in the calling program and to avoid overlaps with existing codes). @end deffn @deffn {Global integer} GAL_FIT_ROBUST_INVALID @deffnx {Global integer} GAL_FIT_ROBUST_DEFAULT @deffnx {Global integer} GAL_FIT_ROBUST_BISQUARE @deffnx {Global integer} GAL_FIT_ROBUST_CAUCHY @deffnx {Global integer} GAL_FIT_ROBUST_FAIR @deffnx {Global integer} GAL_FIT_ROBUST_HUBER @deffnx {Global integer} GAL_FIT_ROBUST_OLS @deffnx {Global integer} GAL_FIT_ROBUST_WELSCH @deffnx {Global integer} GAL_FIT_ROBUST_NUMBER Identifiers for the various types of robust polynomial fitting functions. For a description of each, see @url{https://www.gnu.org/s/gsl/doc/html/lls.html#c.gsl_multifit_robust_alloc}. The last one @code{GAL_FIT_ROBUST_NUMBER} is the total number of available functions (can be used to add more macros in the calling program and to avoid overlaps with existing codes). @end deffn @deftypefun uint8_t gal_fit_name_to_id (char @code{*name}) Return the internal code of a standard human-readable name for the various fitting functions. If the name is not recognized, the returned value will be @code{GAL_FIT_INVALID}. @end deftypefun @deftypefun {char *} gal_fit_name_from_id (uint8_t @code{fitid}) Return a standard human-readable name for the fitting function identified with the @code{fitid} (read as ``fitting ID''). If the fitting ID couldn't be recognized, a NULL pointer is returned. @end deftypefun @deftypefun uint8_t gal_fit_name_robust_to_id (char @code{*name}) Return the internal code of a standard human-readable name for the various robust fitting types. If the name is not recognized, the returned value will be @code{GAL_FIT_INVALID}. @end deftypefun @deftypefun {char *} gal_fit_name_robust_from_id (uint8_t @code{robustid}) Return a standard human-readable name for the input robust fitting type. If the fitting ID couldn't be recognized, a NULL pointer is returned. @end deftypefun @deftypefun {gal_data_t *} gal_fit_1d_linear (gal_data_t @code{*xin}, gal_data_t @code{*yin}, gal_data_t @code{*ywht}) @cindex Weight (in fitting) Preform a 1D linear regression fit with a constant term@footnote{@url{https://www.gnu.org/s/gsl/doc/html/lls.html#linear-regression-with-a-constant-term}} in the form of @mymath{Y=c_0+c_1X}. The input @code{xin} contains the independent variable values and @code{yin} contains the measured variable values for each independent variable. When @code{ywht!=NULL}, it is assumed to contain the ``weight'' of each Y measurement (if you don't have weights on your measured values, simply set this to @code{NULL}). The weight of each measurement is the inverse of its variance. For a Gaussian error distribution with standard deviation @mymath{\sigma}, the weight is therefore @mymath{1/\sigma^2}. If any of the values in any of the inputs is blank (NaN in floating point), the final fitted parameters will all be NaN. To remove rows with a NaN/blank, you can use @code{gal_blank_remove_rows} (which will remove all rows with a blank values in any of the columns with a single call). @cindex Chi-squared @cindex Covariance matrix @cindex Matrix (covariance) @cindex Variance-covariance matrix The output is a single dataset with a @code{GAL_TYPE_FLOAT64} type with 6 elements: @enumerate @item @mymath{c_0}: the constant in @mymath{Y=c_0+c_1X}. @item @mymath{c_1}: the multiple in @mymath{Y=c_0+c_1X}. @item First element of variance-covariance matrix. @item Second and third (which are equal) elements of the variance-covariance matrix. @item Fourth element of the variance-covariance matrix. @item The reduced @mymath{\chi^2} of the fit. @end enumerate @end deftypefun @deftypefun {gal_data_t *} gal_fit_1d_linear_no_constant (gal_data_t @code{*xin}, gal_data_t @code{*yin}, gal_data_t @code{*ywht}) @cindex Weight (in fitting) Preform a 1D linear regression fit @emph{without} a constant term@footnote{@url{https://www.gnu.org/s/gsl/doc/html/lls.html#linear-regression-without-a-constant-term}}, formally: @mymath{Y=c_1X}. The input @code{xin} contains the independent variable values and @code{yin} contains the measured variable values for each independent variable. When @code{ywht!=NULL}, it is assumed to contain the ``weight'' of each Y measurement (if you don't have weights on your measured values, simply set this to @code{NULL}). The weight of each measurement is the inverse of its variance. For a Gaussian error distribution with standard deviation @mymath{\sigma}, the weight is therefore @mymath{1/\sigma^2}. If any of the values in any of the inputs is blank (NaN in floating point), the final fitted parameters will all be NaN. To remove rows with a NaN/blank, you can use @code{gal_blank_remove_rows} (which will remove all rows with a blank values in any of the columns with a single call). The output is a single dataset with a @code{GAL_TYPE_FLOAT64} type with 3 elements: @enumerate @item @mymath{c_1}: the multiple in @mymath{Y=c_0+c_1X}. @item Variance of @mymath{c_1}. @item The reduced @mymath{\chi^2} of the fit. @end enumerate @end deftypefun @deftypefun {gal_data_t *} gal_fit_1d_linear_estimate (gal_data_t @code{*fit}, gal_data_t @code{*xin}) Given a linear least squares fit output (@code{fit}), estimate the fit on an arbitrary number of independent variable (horizontal axis, or X, in an X-Y plot) within @code{xin}. @code{fit} is assumed to be the output of either @code{gal_fit_1d_linear} or @code{gal_fit_1d_linear_no_constant}. In case you haven't used those functions to obtain the constants and covariance matrix elements, see the description of those functions for the expected format of @code{fit}. This function returns two columns (as a @ref{List of gal_data_t}): The top node of the list is the estimated values at the input X-axis positions, and the next node is the errors in the estimation. Naturally, both have the same number of elements as @code{xin}. Being a list, helps in easily printing the output columns to a table (see @ref{Table input output}). @end deftypefun @deftypefun {gal_data_t *} gal_fit_1d_polynomial (gal_data_t @code{*xin}, gal_data_t @code{*yin}, gal_data_t @code{*ywht}, size_t @code{maxpower}, double @code{*redchisq}) @cindex Polynomial fit @cindex Fitting (polynomial) Preform a 1D polynomial fit, formally: @mymath{Y=c+0+c_1X+c_2X^2+\cdots+c_nX^n} (using GSL's multi-parameter regression@footnote{@url{https://www.gnu.org/s/gsl/doc/html/lls.html#multi-parameter-regression}}). The largest power of @mymath{X} is determined with the @code{maxpower} argument (which is @mymath{n} in the equation above). The reduced @mymath{\chi^2} of the fit is written in the space that @code{*redchisq} points to. The input @code{xin} contains the independent variable values and the input @code{yin} contains the measured variable values for each independent variable. When @code{ywht!=NULL}, it is assumed to contain the ``weight'' of each Y measurement (if you don't have weights on your measured values, simply set this to @code{NULL}). The weight of each measurement is the inverse of its variance. For a Gaussian error distribution with standard deviation @mymath{\sigma}, the weight is therefore @mymath{1/\sigma^2}. If any of the values in any of the inputs is blank (NaN in floating point), the final fitted parameters will all be NaN. To remove rows with a NaN/blank, you can use @code{gal_blank_remove_rows} (which will remove all rows with a blank values in any of the columns with a single call). The output of this function is a list of two datasets, linked as a list (as a @ref{List of gal_data_t}). Both have a @code{GAL_TYPE_FLOAT64} type, and are described below (in order). @enumerate @item A one dimensional and contains @mymath{n+1} elements (for the @mymath{n+1} constants that have been found @mymath{(c_0, c_1, c_2, \cdots, c_n)}. @item A two dimensional variance-covariance matrix with @mymath{(n+1)\times(n+1)} elements. @end enumerate @end deftypefun @deftypefun {gal_data_t *} gal_fit_1d_polynomial_robust (gal_data_t @code{*xin}, gal_data_t @code{*yin}, size_t @code{maxpower}, uint8_t @code{robustid}, double @code{*redchisq}) @cindex Robust Polynomial fit Preform a 1D robust polynomial fit, formally: @mymath{Y=c+0+c_1X+c_2X^2+\cdots+c_nX^n} (using GSL's robust linear regression@footnote{@url{https://www.gnu.org/software/gsl/doc/html/lls.html#robust-linear-regression}}). See the description there for the details. The inputs and outputs of this function are almost identical to @code{gal_fit_1d_polynomial}, with the difference that you need to specify the function to reject outliers through the @code{robustid} input argument. You can pass any of the @code{GAL_FIT_ROBUST_*} codes defined at the top of this section to this (the names are identical to the names in GSL). @end deftypefun @deftypefun {gal_data_t *} gal_fit_1d_polynomial_estimate (gal_data_t @code{*fit}, gal_data_t @code{*xin}) Given a 1D polynomial fit output (@code{fit}), estimate the fit on an arbitrary number of independent variable (horizontal axis, or X, in an X-Y plot) within @code{xin}. @code{fit} is assumed to be the output of @code{gal_fit_1d_polynomial}. In case you haven't used this function to obtain the constants and covariance matrix, see the description of that function for the expected format of @code{fit}. This function returns two columns (as a @ref{List of gal_data_t}): The top node of the list is the estimated values at the input X-axis positions, and the next node is the errors in the estimation. Naturally, both have the same number of elements as @code{xin}. Being a list, helps in easily printing the output columns to a table (see @ref{Table input output}). @end deftypefun @node Binary datasets, Labeled datasets, Fitting functions, Gnuastro library @subsection Binary datasets (@file{binary.h}) @cindex Thresholding @cindex Binary datasets @cindex Dataset: binary Binary datasets only have two (usable) values: 0 (also known as background) or 1 (also known as foreground). They are created after some binary classification is applied to the dataset. The most common is thresholding: for example, in an image, pixels with a value above the threshold are given a value of 1 and those with a value less than the threshold are assigned a value of 0. @cindex Connectivity @cindex Immediate neighbors @cindex Neighbors, immediate Since there is only two values, in the processing of binary images, you are usually concerned with the positioning of an element and its vicinity (neighbors). When a dataset has more than one dimension, multiple classes of immediate neighbors (that are touching the element) can be defined for each data-element. To separate these different classes of immediate neighbors, we define @emph{connectivity}. The classification is done by the distance from element center to the neighbor's center. The nearest immediate neighbors have a connectivity of 1, the second nearest class of neighbors have a connectivity of 2 and so on. In total, the largest possible connectivity for data with @code{ndim} dimensions is @code{ndim}. For example, in a 2D dataset, 4-connected neighbors (that share an edge and have a distance of 1 pixel) have a connectivity of 1. The other 4 neighbors that only share a vertice (with a distance of @mymath{\sqrt{2}} pixels) have a connectivity of 2. Conventionally, the class of connectivity-2 neighbors also includes the connectivity 1 neighbors, so for example, we call them 8-connected neighbors in 2D datasets. Ideally, one bit is sufficient for each element of a binary dataset. However, CPUs are not designed to work on individual bits, the smallest unit of memory addresses is a byte (containing 8 bits on modern CPUs). Therefore, in Gnuastro, the type used for binary dataset is @code{uint8_t} (see @ref{Numeric data types}). Although it does take 8-times more memory, this choice offers much better performance and the some extra (useful) features. The advantage of using a full byte for each element of a binary dataset is that you can also have other values (that will be ignored in the processing). One such common ``other'' value in real datasets is a blank value (to mark regions that should not be processed because there is no data). The constant @code{GAL_BLANK_UINT8} value must be used in these cases (see @ref{Library blank values}). Another is some temporary value(s) that can be given to a processed pixel to avoid having another copy of the dataset as in @code{GAL_BINARY_TMP_VALUE} that is described below. @deffn Macro GAL_BINARY_TMP_VALUE The functions described below work on a @code{uint8_t} type dataset with values of 1 or 0 (no other pixel will be touched). However, in some cases, it is necessary to put temporary values in each element during the processing of the functions. This temporary value has a special meaning for the operation and will be operated on. So if your input datasets have values other than 0 and 1 that you do not want these functions to work on, be sure they are not equal to this macro's value. Note that this value is also different from @code{GAL_BLANK_UINT8}, so your input datasets may also contain blank elements. @end deffn @deftypefun {gal_data_t *} gal_binary_erode (gal_data_t @code{*input}, size_t @code{num}, int @code{connectivity}, int @code{inplace}) Do @code{num} erosions on the @code{connectivity}-connected neighbors of @code{input} (see above for the definition of connectivity). If @code{inplace} is non-zero @emph{and} the input's type is @code{GAL_TYPE_UINT8}, then the erosion will be done within the input dataset and the returned pointer will be @code{input}. Otherwise, @code{input} is copied (and converted if necessary) to @code{GAL_TYPE_UINT8} and erosion will be done on this new dataset which will also be returned. This function will only work on the elements with a value of 1 or 0. It will leave all the rest unchanged. @cindex Erosion @cindex Mathematical morphology Erosion (inverse of dilation) is an operation in mathematical morphology where each foreground pixel that is touching a background pixel is flipped (changed to background). The @code{connectivity} value determines the definition of ``touching''. Erosion will thus decrease the area of the foreground regions by one layer of pixels. @end deftypefun @deftypefun {gal_data_t *} gal_binary_dilate (gal_data_t @code{*input}, size_t @code{num}, int @code{connectivity}, int @code{inplace}) Do @code{num} dilations on the @code{connectivity}-connected neighbors of @code{input} (see above for the definition of connectivity). For more on @code{inplace} and the output, see @code{gal_binary_erode}. @cindex Dilation Dilation (inverse of erosion) is an operation in mathematical morphology where each background pixel that is touching a foreground pixel is flipped (changed to foreground). The @code{connectivity} value determines the definition of ``touching''. Dilation will thus increase the area of the foreground regions by one layer of pixels. @end deftypefun @deftypefun {gal_data_t *} gal_binary_open (gal_data_t @code{*input}, size_t @code{num}, int @code{connectivity}, int @code{inplace}) Do @code{num} openings on the @code{connectivity}-connected neighbors of @code{input} (see above for the definition of connectivity). For more on @code{inplace} and the output, see @code{gal_binary_erode}. @cindex Opening (Mathematical morphology) Opening is an operation in mathematical morphology which is defined as erosion followed by dilation (see above for the definitions of erosion and dilation). Opening will thus remove the outer structure of the foreground. In this implementation, @code{num} erosions are going to be applied on the dataset, then @code{num} dilations. @end deftypefun @deftypefun {gal_data_t *} gal_binary_number_neighbors (gal_data_t @code{*input}, int @code{connectivity}, int @code{inplace}) Return an image of the same size as the input, but where each non-zero and non-blank input pixel is replaced with the number of its non-zero and non-blank neighbors. The input dataset is assumed to be binary (having an unsigned, 8-bit dataset). The neighbors are defined through the @code{connectivity} argument (see above) and if @code{inplace!=0}, then the output will be written into the input. @end deftypefun @deftypefun size_t gal_binary_connected_components (gal_data_t @code{*binary}, gal_data_t @code{**out}, int @code{connectivity}) @cindex Breadth first search @cindex Connected component labeling Return the number of connected components in @code{binary} through the breadth first search algorithm (finding all pixels belonging to one component before going on to the next). Connection between two pixels is defined based on the value to @code{connectivity}. @code{out} is a dataset with the same size as @code{binary} with @code{GAL_TYPE_INT32} type. Every pixel in @code{out} will have the label of the connected component it belongs to. The labeling of connected components starts from 1, so a label of zero is given to the input's background pixels. When @code{*out!=NULL} (its space is already allocated), it will be cleared (to zero) at the start of this function. Otherwise, when @code{*out==NULL}, the necessary dataset to keep the output will be allocated by this function. @code{binary} must have a type of @code{GAL_TYPE_UINT8}, otherwise this function will abort with an error. Other than blank pixels (with a value of @code{GAL_BLANK_UINT8} defined in @ref{Library blank values}), all other non-zero pixels in @code{binary} will be considered as foreground (and will be labeled). Blank pixels in the input will also be blank in the output. @end deftypefun @deftypefun {gal_data_t *} gal_binary_connected_indexs(gal_data_t @code{*binary}, int @code{connectivity}) Build a @code{gal_data_t} linked list, where each node of the list contains an array with indices of the connected regions. Therefore the arrays of each node can have a different size. Note that the indices will only be calculated on the pixels with a value of 1 and internally, it will temporarily change the values to 2 (and return them back to 1 in the end). @end deftypefun @deftypefun {gal_data_t *} gal_binary_connected_adjacency_matrix (gal_data_t @code{*adjacency}, size_t @code{*numconnected}) @cindex Adjacency matrix @cindex Matrix, adjacency Find the number of connected labels and new labels based on an adjacency matrix, which must be a square binary array (type @code{GAL_TYPE_UINT8}). The returned dataset is a list of new labels for each old label. In other words, this function will find the objects that are connected (possibly through a third object) and in the output array, the respective elements for all input labels is going to have the same value. The total number of connected labels is put into the space that @code{numconnected} points to. An adjacency matrix defines connection between two labels. For example, let's assume we have 5 labels and we know that labels 1 and 5 are connected to label 3, but are not connected with each other. Also, labels 2 and 4 are not touching any other label. So in total we have 3 final labels: one combined object (merged from labels 1, 3, and 5) and the initial labels 2 and 4. The input adjacency matrix would look like this (note the extra row and column for a label 0 which is ignored): @example INPUT OUTPUT ===== ====== in_lab 1 2 3 4 5 | | numconnected = 3 0 0 0 0 0 0 | in_lab 1 --> 0 0 0 1 0 0 | in_lab 2 --> 0 0 0 0 0 0 | Returned: new labels for the in_lab 3 --> 0 1 0 0 0 1 | 5 initial objects in_lab 4 --> 0 0 0 0 0 0 | | 0 | 1 | 2 | 1 | 3 | 1 | in_lab 5 --> 0 0 0 1 0 0 | @end example Although the adjacency matrix as used here is symmetric, currently this function assumes that it is filled on both sides of the diagonal. @end deftypefun @deftypefun {gal_data_t *} gal_binary_connected_adjacency_list (gal_list_sizet_t @code{**listarr}, size_t @code{number}, size_t @code{minmapsize}, int @code{quietmmap}, size_t @code{*numconnected}) @cindex RAM Find the number of connected labels and new labels based on an adjacency list. The output of this function is identical to that of @code{gal_binary_connected_adjacency_matrix}. But the major difference is that it uses a list of connected labels to each label instead of a square adjacency matrix. This is done because when the number of labels becomes very large (for example, on the scale of 100,000), the adjacency matrix can consume more than 10GB of RAM! The input list has the following format: it is an array of pointers to @code{gal_list_sizet_t *} (or @code{gal_list_sizet_t **}). The array has @code{number} elements and each @code{listarr[i]} is a linked list of @code{gal_list_sizet_t *}. As a demonstration, the input of the same example in @code{gal_binary_connected_adjacency_matrix} would look like below and the output of this function will be identical to there. @example listarr[0] = NULL listarr[1] = 3 listarr[2] = NULL listarr[3] = 1 -> 5 listarr[4] = NULL listarr[5] = 3 @end example From this example, it is already clear that this method will consume far less memory. But because it needs to parse lists (and not easily jump between array elements), it can be slower. But in scenarios where there are too many objects (that may exceed the whole system's RAM+SWAP), this option is a good alternative and the drop in processing speed is worth getting the job done. Similar to @code{gal_binary_connected_adjacency_matrix}, this function will write the final number of connected labels in @code{numconnected}. But since it takes no @code{gal_data_t *} argument (where it can inherit the @code{minmapsize} and @code{quietmmap} parameters), it also needs these as input. For more on @code{minmapsize} and @code{quietmmap}, see @ref{Memory management}. @end deftypefun @deftypefun {gal_data_t *} gal_binary_holes_label (gal_data_t @code{*input}, int @code{connectivity}, size_t @code{*numholes}) Label all the holes in the foreground (non-zero elements in input) as independent regions. Holes are background regions (zero-valued in input) that are fully surrounded by the foreground, as defined by @code{connectivity}. The returned dataset has a 32-bit signed integer type with the size of the input. All holes in the input will have labels/counters greater or equal to @code{1}. The rest of the background regions will still have a value of @code{0} and the initial foreground pixels will have a value of @code{-1}. The total number of holes will be written where @code{numholes} points to. @end deftypefun @deftypefun void gal_binary_holes_fill (gal_data_t @code{*input}, int @code{connectivity}, size_t @code{maxsize}) Fill all the holes (0 valued pixels surrounded by 1 valued pixels) of the binary @code{input} dataset. The connectivity of the holes can be set with @code{connectivity}. Holes larger than @code{maxsize} are not filled. This function currently only works on a 2D dataset. @end deftypefun @node Labeled datasets, Convolution functions, Binary datasets, Gnuastro library @subsection Labeled datasets (@file{label.h}) A labeled dataset is one where each element/pixel has an integer label (or counter). The label identifies the group/class that the element belongs to. This form of labeling allows the higher-level study of all pixels within a certain class. For example, to detect objects/targets in an image/dataset, you can apply a threshold to separate the noise from the signal (to detect diffuse signal, a threshold is useless and more advanced methods are necessary, for example @ref{NoiseChisel}). But the output of detection is a binary dataset (which is just a very low-level labeling of @code{0} for noise and @code{1} for signal). The raw detection map is therefore hardly useful for any kind of analysis on objects/targets in the image. One solution is to use a connected-components algorithm (see @code{gal_binary_connected_components} in @ref{Binary datasets}). It is a simple and useful way to separate/label connected patches in the foreground. This higher-level (but still elementary) labeling therefore allows you to count how many connected patches of signal there are in the dataset and is a major improvement compared to the raw detection. However, when your objects/targets are touching, the simple connected components algorithm is not enough and a still higher-level labeling mechanism is necessary. This brings us to the necessity of the functions in this part of Gnuastro's library. The main inputs to the functions in this section are already labeled datasets (for example, with the connected components algorithm above). Each of the labeled regions are independent of each other (the labels specify different classes of targets). Therefore, especially in large datasets, it is often useful to process each label on independent CPU threads in parallel rather than in series. Therefore the functions of this section actually use an array of pixel/element indices (belonging to each label/class) as the main identifier of a region. Using indices will also allow processing of overlapping labels (for example, in deblending problems). Just note that overlapping labels are not yet implemented, but planned. You can use @code{gal_label_indexs} to generate lists of indices belonging to separate classes from the labeled input. @deffn Macro GAL_LABEL_INIT @deffnx Macro GAL_LABEL_RIVER @deffnx Macro GAL_LABEL_TMPCHECK Special negative integer values used internally by some of the functions in this section. Recall that meaningful labels are considered to be positive integers (@mymath{\geq1}). Zero is conventionally kept for regions with no labels, therefore negative integers can be used for any extra classification in the labeled datasets. @end deffn @deftypefun {gal_data_t *} gal_label_indexs (gal_data_t @code{*labels}, size_t @code{numlabs}, size_t @code{minmapsize}, int @code{quietmmap}) Return an array of @code{gal_data_t} containers, each containing the pixel indices of the respective label (see @ref{Generic data container}). @code{labels} contains the label of each element and has to have an @code{GAL_TYPE_INT32} type (see @ref{Library data types}). Only positive (greater than zero) values in @code{labels} will be used/indexed, other elements will be ignored. Meaningful labels start from @code{1} and not @code{0}, therefore the output array of @code{gal_data_t} will contain @code{numlabs+1} elements. The first (zero-th) element of the output (@code{indexs[0]} in the example below) will be initialized to a dataset with zero elements. This will allow easy (non-confusing) access to the indices of each (meaningful) label. @code{numlabs} is the number of labels in the dataset. If it is given a value of zero, then the maximum value in the input (largest label) will be found and used. Therefore if it is given, but smaller than the actual number of labels, this function may/will crash (it will write in un-allocated space). @code{numlabs} is therefore useful in a highly optimized/checked environment. For example, if the returned array is called @code{indexs}, then @code{indexs[10].size} contains the number of elements that have a label of @code{10} in @code{labels} and @code{indexs[10].array} is an array (after casting to @code{size_t *}) containing the indices of each one of those elements/pixels. By @emph{index} we mean the 1D position: the input number of dimensions is irrelevant (any dimensionality is supported). In other words, each element's index is the number of elements/pixels between it and the dataset's first element/pixel. Therefore it is always greater or equal to zero and stored in @code{size_t} type. @end deftypefun @deftypefun size_t gal_label_watershed (gal_data_t @code{*values}, gal_data_t @code{*indexs}, gal_data_t @code{*label}, size_t @code{*topinds}, int @code{min0_max1}) @cindex Watershed algorithm @cindex Algorithm: watershed Use the watershed algorithm@footnote{The watershed algorithm was initially introduced by @url{https://doi.org/10.1109/34.87344, Vincent and Soille}. It starts from the minima and puts the pixels in, one by one, to grow them until the touch (create a watershed). For more, also see the Wikipedia article: @url{https://en.wikipedia.org/wiki/Watershed_%28image_processing%29}.} to ``over-segment'' the pixels in the @code{indexs} dataset based on values in the @code{values} dataset. Internally, each local extrema (maximum or minimum, based on @code{min0_max1}) and its surrounding pixels will be given a unique label. For demonstration, see Figures 8 and 9 of Akhlaghi and Ichikawa @url{http://arxiv.org/abs/1505.01664,2015}. If @code{topinds!=NULL}, it is assumed to point to an already allocated space to write the index of each clump's local extrema, otherwise, it is ignored. The @code{values} dataset must have a 32-bit floating point type (@code{GAL_TYPE_FLOAT32}, see @ref{Library data types}) and will only be read by this function. @code{indexs} must contain the indices of the elements/pixels that will be over-segmented by this function and have a @code{GAL_TYPE_SIZE_T} type, see the description of @code{gal_label_indexs}, above. The final labels will be written in the respective positions of @code{labels}, which must have a @code{GAL_TYPE_INT32} type and be the same size as @code{values}. When @code{indexs} is already sorted, this function will ignore @code{min0_max1}. To judge if the dataset is sorted or not (by the values the indices correspond to in @code{values}, not the actual indices), this function will look into the bits of @code{indexs->flag}, for the respective bit flags, see @ref{Generic data container}. If @code{indexs} is not already sorted, this function will sort it according to the values of the respective pixel in @code{values}. The increasing/decreasing order will be determined by @code{min0_max1}. Note that if this function is called on multiple threads @emph{and} @code{values} points to a different array on each thread, this function will not return a reasonable result. In this case, please sort @code{indexs} prior to calling this function (see @code{gal_qsort_index_multi_d} in @ref{Qsort functions}). When @code{indexs} is decreasing (increasing), or @code{min0_max1} is @code{1} (@code{0}), local minima (maxima), are considered rivers (watersheds) and given a label of @code{GAL_LABEL_RIVER} (see above). Note that rivers/watersheds will also be formed on the edges of the labeled regions or when the labeled pixels touch a blank pixel. Therefore this function will need to check for the presence of blank values. To be most efficient, it is thus recommended to use @code{gal_blank_present} (with @code{updateflag=1}) prior to calling this function (see @ref{Library blank values}. Once the flag has been set, no other function (including this one) that needs special behavior for blank pixels will have to parse the dataset to see if it has blank values any more. If you are sure your dataset does not have blank values (by the design of your software), to avoid an extra parsing of the dataset and improve performance, you can set the two bits manually (see the description of @code{flags} in @ref{Generic data container}): @example input->flag |= GAL_DATA_FLAG_BLANK_CH; /* Set bit to 1. */ input->flag &= ~GAL_DATA_FLAG_HASBLANK; /* Set bit to 0. */ @end example @end deftypefun @deftypefun void gal_label_clump_significance (gal_data_t @code{*values}, gal_data_t @code{*std}, gal_data_t @code{*label}, gal_data_t @code{*indexs}, struct gal_tile_two_layer_params @code{*tl}, size_t @code{numclumps}, size_t @code{minarea}, int @code{variance}, int @code{keepsmall}, gal_data_t @code{*sig}, gal_data_t @code{*sigind}) @cindex Clump This function is usually called after @code{gal_label_watershed}, and is used as a measure to identify which over-segmented ``clumps'' are real and which are noise. A measurement is done on each clump (using the @code{values} and @code{std} datasets, see below). To help in multi-threaded environments, the operation is only done on pixels which are indexed in @code{indexs}. It is expected for @code{indexs} to be sorted by their values in @code{values}. If not sorted, the measurement may not be reliable. If sorted in a decreasing order, then clump building will start from their highest value and vice-versa. See the description of @code{gal_label_watershed} for more on @code{indexs}. Each ``clump'' (identified by a positive integer) is assumed to be surrounded by at least one river/watershed pixel (with a non-positive label). This function will parse the pixels identified in @code{indexs} and make a measurement on each clump and over all the river/watershed pixels. The number of clumps (@code{numclumps}) must be given as an input argument and any clump that is smaller than @code{minarea} is ignored (because of scatter). If @code{variance} is non-zero, then the @code{std} dataset is interpreted as variance, not standard deviation. The @code{values} and @code{std} datasets must have a @code{float} (32-bit floating point) type. Also, @code{label} and @code{indexs} must respectively have @code{int32} and @code{size_t} types. @code{values} and @code{label} must have the same size, but @code{std} can have three possible sizes: 1) a single element (which will be used for the whole dataset, 2) the same size as @code{values} (so a different error can be assigned to every pixel), 3) a single value for each tile, based on the @code{tl} tessellation (see @ref{Tile grid}). In the last case, a tile/value will be associated to each clump based on its flux-weighted (only positive values) center. The main output is an internally allocated, 1-dimensional array with one value per label. The array information (length, type, etc.) will be written into the @code{sig} generic data container. Therefore @code{sig->array} must be @code{NULL} when this function is called. After this function, the details of the array (number of elements, type and size, etc) will be written in to the various components of @code{sig}, see the definition of @code{gal_data_t} in @ref{Generic data container}. Therefore @code{sig} must already be allocated before calling this function. Optionally (when @code{sigind!=NULL}, similar to @code{sig}) the clump labels of each measurement in @code{sig} will be written in @code{sigind->array}. If @code{keepsmall} zero, small clumps (where no measurement is made) will not be included in the output table. This function is initially intended for a multi-threaded environment. In such cases, you will be writing arrays of clump measures from different regions in parallel into an array of @code{gal_data_t}s. You can simply allocate (and initialize), such an array with the @code{gal_data_array_calloc} function in @ref{Arrays of datasets}. For example, if the @code{gal_data_t} array is called @code{array}, you can pass @code{&array[i]} as @code{sig}. Along with some other functions in @code{label.h}, this function was initially written for @ref{Segment}. The description of the parameter used to measure a clump's significance is fully given in Akhlaghi @url{https://arxiv.org/abs/1909.11230,2019}. @end deftypefun @deftypefun void gal_label_grow_indexs (gal_data_t @code{*labels}, gal_data_t @code{*indexs}, int @code{withrivers}, int @code{connectivity}) Grow the (positive) labels of @code{labels} over the pixels in @code{indexs} (see description of @code{gal_label_indexs}). The pixels (position in @code{indexs}, values in @code{labels}) that must be ``grown'' must have a value of @code{GAL_LABEL_INIT} in @code{labels} before calling this function. For a demonstration see Columns 2 and 3 of Figure 10 in Akhlaghi and Ichikawa @url{http://arxiv.org/abs/1505.01664,2015}. In many aspects, this function is very similar to over-segmentation (watershed algorithm, @code{gal_label_watershed}). The big difference is that in over-segmentation local maximums (that are not touching any already labeled pixel) get a separate label. However, here the final number of labels will not change. All pixels that are not directly touching a labeled pixel just get pushed back to the start of the loop, and the loop iterates until its size does not change any more. This is because in a generic scenario some of the indexed pixels might not be reachable through other indexed pixels. The next major difference with over-segmentation is that when there is only one label in growth region(s), it is not mandatory for @code{indexs} to be sorted by values. If there are multiple labeled regions in growth region(s), then values are important and you can use @code{qsort} with @code{gal_qsort_index_single_d} to sort the indices by values in a separate array (see @ref{Qsort functions}). This function looks for positive-valued neighbors of each pixel in @code{indexs} and will label a pixel if it touches one. Therefore, it is very important that only pixels/labels that are intended for growth have positive values in @code{labels} before calling this function. Any non-positive (zero or negative) value will be ignored as a label by this function. Thus, it is recommended that while filling in the @code{indexs} array values, you initialize all the pixels that are in @code{indexs} with @code{GAL_LABEL_INIT}, and set non-labeled pixels that you do not want to grow to @code{0}. This function will write into both the input datasets. After this function, some of the non-positive @code{labels} pixels will have a new positivelabel and the number of useful elements in @code{indexs} will have decreased. The index of those pixels that could not be labeled will remain inside @code{indexs}. If @code{withrivers} is non-zero, then pixels that are immediately touching more than one positive value will be given a @code{GAL_LABEL_RIVER} label. @cindex GNU C library Note that the @code{indexs->array} is not re-allocated to its new size at the end@footnote{Note that according to the GNU C Library, even a @code{realloc} to a smaller size can also cause a re-write of the whole array, which is not a cheap operation.}. But since @code{indexs->dsize[0]} and @code{indexs->size} have new values after this function is returned, the extra elements just will not be used until they are ultimately freed by @code{gal_data_free}. Connectivity is a value between @code{1} (fewest number of neighbors) and the number of dimensions in the input (most number of neighbors). For example, in a 2D dataset, a connectivity of @code{1} and @code{2} corresponds to 4-connected and 8-connected neighbors. @end deftypefun @node Convolution functions, Pooling functions, Labeled datasets, Gnuastro library @subsection Convolution functions (@file{convolve.h}) Convolution is a very common operation during data analysis and is thoroughly described as part of Gnuastro's @ref{Convolve} program which is fully devoted to this job. Because of the complete introduction that was presented there, we will directly skip onto the currently available convolution functions in Gnuastro's library. As of this version, only spatial domain convolution is available in Gnuastro's libraries. We have not had the time to liberate the frequency domain function convolution and deconvolution functions that are available in the Convolve program@footnote{Hence any help would be greatly appreciated.}. @deftypefun {gal_data_t *} gal_convolve_spatial (gal_data_t @code{*tiles}, gal_data_t @code{*kernel}, size_t @code{numthreads}, int @code{edgecorrection}, int @code{convoverch}, int @code{conv_on_blank}) Convolve the given @code{tiles} dataset (possibly a list of tiles, see @ref{List of gal_data_t} and @ref{Tessellation library}) with @code{kernel} on @code{numthreads} threads. When @code{edgecorrection} is non-zero, it will correct for the edge dimming effects as discussed in @ref{Edges in the spatial domain}. When @code{conv_on_blank} is non-zero, this function will also attempt convolution over the blank pixels (and therefore give values to the blank pixels that are near non-blank pixels). @code{tiles} can be a single/complete dataset, but in that case the speed will be very slow. Therefore, for larger images, it is recommended to give a list of tiles covering a dataset. To create a tessellation that fully covers an input image, you may use @code{gal_tile_full}, or @code{gal_tile_full_two_layers} to also define channels over your input dataset. These functions are discussed in @ref{Tile grid}. You may then pass the list of tiles to this function. This is the recommended way to call this function because spatial domain convolution is slow and breaking the job into many small tiles and working on simultaneously on several threads can greatly speed up the processing. If the tiles are defined within a channel (a larger tile), by default convolution will be done within the channel, so pixels on the edge of a channel will not be affected by their neighbors that are in another channel. See @ref{Tessellation} for the necessity of channels in astronomical data analysis. This behavior may be disabled when @code{convoverch} is non-zero. In this case, it will ignore channel borders (if they exist) and mix all pixels that cover the kernel within the dataset. @end deftypefun @deftypefun void gal_convolve_spatial_correct_ch_edge (gal_data_t @code{*tiles}, gal_data_t @code{*kernel}, size_t @code{numthreads}, int @code{edgecorrection}, int @code{conv_on_blank}, gal_data_t @code{*tocorrect}) Correct the edges of channels in an already convolved image when it was initially convolved with @code{gal_convolve_spatial} and @code{convoverch==0}. In that case, strong boundaries might exist on the channel edges. So if you later need to remove those boundaries at later steps of your processing, you can call this function. It will only do convolution on the tiles that are near the edge and were effected by the channel borders. Other pixels in the image will not be touched. Hence, it is much faster. When @code{conv_on_blank} is non-zero, this function will also attempt convolution over the blank pixels (and therefore give values to the blank pixels that are near non-blank pixels). @end deftypefun @node Pooling functions, Interpolation, Convolution functions, Gnuastro library @subsection Pooling functions (@file{pool.h}) Pooling is the process of reducing the complexity of the input image (its size and variation of pixel values). Its underlying concepts, and an analysis of its usefulness, is fully described in @ref{Pooling operators}. The following functions are available pooling in Gnuastro. Just note that unlike the Arithmetic operators, the output of these functions should contain a correct WCS in their output. @deftypefun {gal_data_t *} gal_pool_max (gal_data_t @code{*input}, size_t @code{psize}, size_t @code{numthreads}) Return the max-pool of @code{input}, assuming a pool size of @code{psize} pixels. The number of threads to use can be set with @code{numthreads}. @end deftypefun @deftypefun {gal_data_t *} gal_pool_min (gal_data_t @code{*input}, size_t @code{psize}, size_t @code{numthreads}) Return the min-pool of @code{input}, assuming a pool size of @code{psize} pixels. The number of threads to use can be set with @code{numthreads}. @end deftypefun @deftypefun {gal_data_t *} gal_pool_sum (gal_data_t @code{*input}, size_t @code{psize}, size_t @code{numthreads}) Return the sum-pool of @code{input}, assuming a pool size of @code{psize} pixels. The number of threads to use can be set with @code{numthreads}. @end deftypefun @deftypefun {gal_data_t *} gal_pool_mean (gal_data_t @code{*input}, size_t @code{psize}, size_t @code{numthreads}) Return the mean-pool of @code{input}, assuming a pool size of @code{psize} pixels. The number of threads to use can be set with @code{numthreads}. @end deftypefun @deftypefun {gal_data_t *} gal_pool_median (gal_data_t @code{*input}, size_t @code{psize}, size_t @code{numthreads}) Return the median-pool of @code{input}, assuming a pool size of @code{psize} pixels. The number of threads to use can be set with @code{numthreads}. @end deftypefun @node Interpolation, Warp library, Pooling functions, Gnuastro library @subsection Interpolation (@file{interpolate.h}) @cindex Sky line @cindex Interpolation During data analysis, it happens that parts of the data cannot be given a value, but one is necessary for the higher-level analysis. For example, a very bright star saturated part of your image and you need to fill in the saturated pixels with some values. Another common usage case are masked sky-lines in 1D spectra that similarly need to be assigned a value for higher-level analysis. In other situations, you might want a value in an arbitrary point: between the elements/pixels where you have data. The functions described in this section are for such operations. @cindex GNU Scientific Library The parametric interpolations discussed below are wrappers around the interpolation functions of the GNU Scientific Library (or GSL, see @ref{GNU Scientific Library}). To identify the different GSL interpolation types, Gnuastro's @file{gnuastro/interpolate.h} header file contains macros that are discussed below. The GSL wrappers provided here are not yet complete because we are too busy. If you need them, please consider helping us in adding them to Gnuastro's library. Your contributions would be very welcome and appreciated. @deffn Macro GAL_INTERPOLATE_NEIGHBORS_METRIC_RADIAL @deffnx Macro GAL_INTERPOLATE_NEIGHBORS_METRIC_MANHATTAN @deffnx Macro GAL_INTERPOLATE_NEIGHBORS_METRIC_INVALID The metric used to find distance for nearest neighbor interpolation. A radial metric uses the simple Euclidean function to find the distance between two pixels. A manhattan metric will always be an integer and is like steps (but is also much faster to calculate than radial metric because it does not need a square root calculation). @end deffn @deffn Macro GAL_INTERPOLATE_NEIGHBORS_FUNC_MIN @deffnx Macro GAL_INTERPOLATE_NEIGHBORS_FUNC_MAX @deffnx Macro GAL_INTERPOLATE_NEIGHBORS_FUNC_MEAN @deffnx Macro GAL_INTERPOLATE_NEIGHBORS_FUNC_MEDIAN @deffnx Macro GAL_INTERPOLATE_NEIGHBORS_FUNC_INVALID @cindex Saturated stars The various types of nearest-neighbor interpolation functions for @code{gal_interpolate_neighbors}. The names are descriptive for the operation they do, so we will not go into much more detail here. The median operator will be one of the most used, but operators like the maximum are good to fill the center of saturated stars. @end deffn @deftypefun {gal_data_t *} gal_interpolate_neighbors (gal_data_t @code{*input}, struct gal_tile_two_layer_params @code{*tl}, uint8_t @code{metric}, size_t @code{numneighbors}, size_t @code{numthreads}, int @code{onlyblank}, int @code{aslinkedlist}, int @code{function}) Interpolate the values in the input dataset using a calculated statistics from the distribution of their @code{numneighbors} closest neighbors. The desired statistics is determined from the @code{func} argument, which takes any of the @code{GAL_INTERPOLATE_NEIGHBORS_FUNC_} macros (see above). This function is non-parametric and thus agnostic to the input's number of dimension or shape of the distribution. Distance can be defined on different metrics that are identified through @code{metric} (taking values determined by the @code{GAL_INTERPOLATE_NEIGHBORS_METRIC_} macros described above). If @code{onlyblank} is non-zero, then only blank elements will be interpolated and pixels that already have a value will be left untouched. This function is multi-threaded and will run on @code{numthreads} threads (see @code{gal_threads_number} in @ref{Multithreaded programming}). @code{tl} is Gnuastro's tessellation structure used to define tiles over an image and is fully described in @ref{Tile grid}. When @code{tl!=NULL}, then it is assumed that the @code{input->array} contains one value per tile and interpolation will respect certain tessellation properties, for example, to not interpolate over channel borders. If several datasets have the same set of blank values, you do not need to call this function multiple times. When @code{aslinkedlist} is non-zero, then @code{input} will be seen as a @ref{List of gal_data_t}. In this case, the same neighbors will be used for all the datasets in the list. Of course, the values for each dataset will be different, so a different value will be written in each dataset, but the neighbor checking that is the most CPU intensive part will only be done once. This is a non-parametric and robust function for interpolation. The interpolated values are also always within the range of the non-blank values and strong outliers do not get created. However, this type of interpolation must be used with care when there are gradients. This is because it is non-parametric and if there are not enough neighbors, step-like features can be created. @end deftypefun @deffn Macro GAL_INTERPOLATE_1D_INVALID This is just a place-holder to manage errors. @end deffn @deffn Macro GAL_INTERPOLATE_1D_LINEAR [From GSL:] Linear interpolation. This interpolation method does not require any additional memory. @end deffn @deffn Macro GAL_INTERPOLATE_1D_POLYNOMIAL @cindex Polynomial interpolation @cindex Interpolation: Polynomial [From GSL:] Polynomial interpolation. This method should only be used for interpolating small numbers of points because polynomial interpolation introduces large oscillations, even for well-behaved datasets. The number of terms in the interpolating polynomial is equal to the number of points. @end deffn @deffn Macro GAL_INTERPOLATE_1D_CSPLINE @cindex Interpolation: Spline @cindex Cubic spline interpolation @cindex Spline (cubic) interpolation [From GSL:] Cubic spline with natural boundary conditions. The resulting curve is piece-wise cubic on each interval, with matching first and second derivatives at the supplied data-points. The second derivative is chosen to be zero at the first point and last point. @end deffn @deffn Macro GAL_INTERPOLATE_1D_CSPLINE_PERIODIC [From GSL:] Cubic spline with periodic boundary conditions. The resulting curve is piece-wise cubic on each interval, with matching first and second derivatives at the supplied data-points. The derivatives at the first and last points are also matched. Note that the last point in the data must have the same y-value as the first point, otherwise the resulting periodic interpolation will have a discontinuity at the boundary. @end deffn @deffn Macro GAL_INTERPOLATE_1D_AKIMA @cindex Interpolation: Akima spline @cindex Akima spline interpolation @cindex Spline (Akima) interpolation [From GSL:] Non-rounded Akima spline with natural boundary conditions. This method uses the non-rounded corner algorithm of Wodicka. @end deffn @deffn Macro GAL_INTERPOLATE_1D_AKIMA_PERIODIC [From GSL:] Non-rounded Akima spline with periodic boundary conditions. This method uses the non-rounded corner algorithm of Wodicka. @end deffn @deffn Macro GAL_INTERPOLATE_1D_STEFFEN @cindex Steffen interpolation @cindex Interpolation: Steffen @cindex Interpolation: monotonic [From GSL:] Steffen's method@footnote{@url{http://adsabs.harvard.edu/abs/1990A%26A...239..443S}} guarantees the monotonicity of the interpolating function between the given data points. Therefore, minima and maxima can only occur exactly at the data points, and there can never be spurious oscillations between data points. The interpolated function is piece-wise cubic in each interval. The resulting curve and its first derivative are guaranteed to be continuous, but the second derivative may be discontinuous. @end deffn @deftypefun {gsl_spline *} gal_interpolate_1d_make_gsl_spline (gal_data_t @code{*X}, gal_data_t @code{*Y}, int @code{type_1d}) @cindex GNU Scientific Library Allocate and initialize a GNU Scientific Library (GSL) 1D @code{gsl_spline} structure using the non-blank elements of @code{Y}. @code{type_1d} identifies the interpolation scheme and must be one of the @code{GAL_INTERPOLATE_1D_*} macros defined above. If @code{X==NULL}, the X-axis is assumed to be integers starting from zero (the index of each element in @code{Y}). Otherwise, the values in @code{X} will be used to initialize the interpolation structure. Note that when given, @code{X} must @emph{not} contain any blank elements and it must be sorted (in increasing order). Each interpolation scheme needs a minimum number of elements to successfully operate. If the number of non-blank values in @code{Y} is less than this number, this function will return a @code{NULL} pointer. To be as generic and modular as possible, GSL's tools are low-level. Therefore before doing the interpolation, many steps are necessary (like preparing your dataset, then allocating and initializing @code{gsl_spline}). The metadata available in Gnuastro's @ref{Generic data container} make it easy to hide all those preparations within this function. Once @code{gsl_spline} has been initialized by this function, the interpolation can be evaluated for any X value within the non-blank range of the input using @code{gsl_spline_eval} or @code{gsl_spline_eval_e}. For example, in the small program below (@file{sample-interp.c}), we read the first two columns of the table in @file{table.txt} and feed them to this function to later estimate the values in the second column for three selected points. You can use @ref{BuildProgram} to compile and run this function, see @ref{Library demo programs} for more. Contents of the @file{table.txt} file: @example @verbatim $ cat table.txt 0 0 1 2 3 6 4 8 6 12 8 16 9 18 @end verbatim @end example Contents of the @file{sample-interp.c} file: @cindex first-in-first-out @example #include <stdio.h> #include <stdlib.h> #include <gnuastro/table.h> #include <gnuastro/interpolate.h> int main(void) @{ size_t i; gal_data_t *X, *Y; gsl_spline *spline; gsl_interp_accel *acc; gal_list_str_t *cols=NULL; /* Change the values based on your input table. */ double points[]=@{1.8, 2.5, 7@}; /* Read the first two columns from `tab.txt'. IMPORTANT: the list is first-in-first-out, so the output column order is the inverse of the input order. */ gal_list_str_add(&cols, "1", 0); gal_list_str_add(&cols, "2", 0); Y=gal_table_read("table.txt", NULL, NULL, cols, GAL_TABLE_SEARCH_NAME, 0, 1, -1, 1, NULL); X=Y->next; /* Allocate the GSL interpolation accelerator and make the `gsl_spline' structure. */ acc=gsl_interp_accel_alloc(); spline=gal_interpolate_1d_make_gsl_spline(X, Y, GAL_INTERPOLATE_1D_STEFFEN); /* Calculate the respective value for all the given points, if `spline' could be allocated. */ if(spline) for(i=0; i<(sizeof points)/(sizeof *points); ++i) printf("%f: %f\n", points[i], gsl_spline_eval(spline, points[i], acc)); /* Clean up and return. */ gal_data_free(X); gal_data_free(Y); gsl_spline_free(spline); gsl_interp_accel_free(acc); gal_list_str_free(cols, 0); return EXIT_SUCCESS; @} @end example @end deftypefun @noindent Compile and run this program with @ref{BuildProgram} to see the interpolation results for the three points within the program. @example $ astbuildprog sample-interp.c --quiet 1.800000: 3.600000 2.500000: 5.000000 7.000000: 14.000000 @end example @deftypefun void gal_interpolate_1d_blank (gal_data_t @code{*in}, int @code{type_1d}) Fill the blank elements of @code{in} using the rest of the elements and the given interpolation. The interpolation scheme can be set through @code{type_1d}, which accepts any of the @code{GAL_INTERPOLATE_1D_*} macros above. The interpolation is internally done in 64-bit floating point type (@code{double}). However the evaluated/interpolated values (originally blank) will be written (in @code{in}) with its original numeric datatype, using C's standard type conversion. By definition, interpolation is only defined ``between'' valid points. Therefore, if any number of elements on the start or end of the 1D array are blank, those elements will not be interpolated and will remain blank. To see if any blank (non-interpolated) elements remain, you can use @code{gal_blank_present} on @code{in} after this function is finished. @end deftypefun @cindex Warp @cindex Align @cindex Resampling @cindex WCS distortion @cindex Non-linear distortion @node Warp library, Color functions, Interpolation, Gnuastro library @subsection Warp library (@file{warp.h}) Warping an image to a new pixel grid is commonly necessary as part of astronomical data reduction, for an introduction, see @ref{Warp}. For details of how we resample the old pixel grid to the new pixel grid, see @ref{Resampling}. Gnuastro's Warp program uses the following functions for its default mode (when no linear warps are requested). Through the following functions, you can directly access those features in your own custom programs. The linear warping operations of the Warp program aren't yet brought into the library. If you need them please get in touch with us at @code{bug-gnuastro@@gnu.org}. For usage examples of this library, please see @ref{Library demo - Warp to another image} or @ref{Library demo - Warp to new grid}. You are free to provide any valid WCS keywords to the functions defined in this library using the @code{gal_warp_wcsalign_t} data type. This might be used to align the input image to the standard WCS grid, potentially changing the pixel scale, removing any valid WCS non-linear distortion available, and projecting to any valid WCS projection type. Further details of the warp library functions and parameters are shown below: @deffn Macro GAL_WARP_OUTPUT_NAME_WARPED @deffnx Macro GAL_WARP_OUTPUT_NAME_MAXFRAC Names of the output datasets (in the @code{name} component of the output @code{gal_data_t}s). By default the output is only a single dataset, but when the @code{checkmaxfrac} component of the input is non-zero, it will contain two datasets. @end deffn @deftp {Type (C @code{struct})} gal_warp_wcsalign_t The main data container for inputs, output and internal variables to simplify the WCS-aligning functions. Due to the large number of input variables, this structure makes it easy to call the main functions. Similar to @code{gal_data_t}, the @code{gal_warp_wcsalign_t} is a structure @code{typedef}'d as a new type, see @ref{Library data container}. Please note that this structure has elements that are @emph{allocated} dynamically and must be freed after usage. @code{gal_warp_wcsalign_free} only frees the internal variables, so you are responsible for freeing your own inputs (@code{cdelt}, @code{input}, etc.) and the output. The internal variables are cached here to cut cpu-intensive computations. To prevent from using uninitialized variables, we recommend using the helper function @code{gal_warp_wcsalign_template} to get a clean structure before setting your own variables. The structure and each of its elements are defined below: @example typedef struct @{ /* Arguments given (and later freed) by the caller. If 'twcs' is given, then the "WCS To build" elements will be ignored. */ gal_data_t *input; size_t numthreads; double coveredfrac; size_t edgesampling; gal_data_t *widthinpix; uint8_t checkmaxfrac; struct wcsprm *twcs; /* WCS Predefined. */ gal_data_t *ctype; /* WCS To build. */ gal_data_t *cdelt; /* WCS To build. */ gal_data_t *center; /* WCS To build. */ /* Output (must be freed by caller) */ gal_data_t *output; /* Internal variables (allocated and freed internally) */ size_t v0; size_t nhor; size_t ncrn; size_t gcrn; int isccw; gal_data_t *vertices; @} gal_warp_wcsalign_t; @end example @table @code @item gal_data_t *input The input dataset. This dataset must contain both the image array of type @code{GAL_TYPE_FLOAT64}, and @code{input->wcs} should not be @code{NULL} for the WCS-aligning operations to work, see @ref{Library demo - Warp to new grid}. @item size_t numthreads Number of threads to use during the WCS aligning operations. If the given value is @code{0}, the library will calculate the number of available threads at run-time. The @code{warp} library functions are @emph{thread-safe} so you can freely enjoy the merits of parallel processing. @item double coveredfrac Acceptable fraction of output pixel that is covered by input pixels. The value should be between 0 and 1 (inclusive). If the area of an output pixel is covered by less than this fraction, its value will be @code{NaN}. For more, see the description of @option{--coveredfrac} in @ref{Invoking astwarp}. @item size_t edgesampling Set the number of extra vertices along each edge of the output pixel's polygon to account for potential curvature due to projection or distortion. A value of @code{0} is usually enough for this (so the pixel is only defined by a four vertice polygon. Greater values increase memory usage and program execution time. For more, please see the description of @option{--edgesampling} in @ref{Align pixels with WCS considering distortions}. @item gal_data_t *widthinpix Output image size (width and height) in number of pixels. If a @code{NULL} pointer is passed, the WCS-aligning operations will estimate the output image size internally such that it contains the full input. This dataset should have a type of @code{GAL_TYPE_SIZE_T} and contain exactly two @emph{odd} values. This ensures that the center of the central pixel lies at the requested central coordinate (note that an image with an even number of pixels doesn't have a ``central'' pixel! @item struct wcsprm *twcs The target grid WCS which must follow the standard WCSLIB structure. You can read it from a file using @code{gal_wcs_read} or create an entirely new one with @code{gal_wcs_create} and later free it with @code{gal_wcs_free}, see @ref{World Coordinate System}. If this element is given, the @code{ctype}, @code{cdelt} and @code{center} elements (which are used to construct a WCS internally) are ignored. Please note that the @code{wcsprm} structure doesn't contain the image size. To set the final image size, you should use @option{widthinpix}. @item gal_data_t *ctype The output's projection type. The dataset has to have the type @code{GAL_TYPE_STRING}, containing exactly two strings. Both strings will be directly passed to WCSLIB and should conform to the FITS standard's @code{CTYPEi} keywords, see the description of @option{--ctype} in @ref{Align pixels with WCS considering distortions}. For example, @code{"RA---TAN"} and @code{"DEC--TAN"}, or @code{"RA---HPX"} and @code{"DEC--HPX"}. @item gal_data_t *cdelt Output pixel scale (size of pixel in the WCS units: value to @code{CUNITi} keywords in FITS, usually degrees). The dataset should have a type of @code{GAL_TYPE_FLOAT64} and contain exactly two values. Hint: to convert arcsec to degrees, just divide by 3600. @item gal_data_t *center WCS coordinate of the center of the central pixel of the output. The units depend on the WCS, for example, if the @code{CUNITi} keywords are @code{deg}, it is in degrees. This dataset should have a type of @code{GAL_TYPE_FLOAT64} and contain exactly two values. @item uint8_t checkmaxfrac When this is non-zero, the output will be a two-element @ref{List of gal_data_t}. The second element shows the @url{https://en.wikipedia.org/wiki/Moir%C3%A9_pattern, Moir@'e pattern} of the warp. For more, see @ref{Moire pattern in stacking and its correction}. @end table @end deftp @deftypefun gal_warp_wcsalign_t gal_warp_wcsalign_template (void) A high-level helper function that returns a clean @code{gal_warp_wcsalign_t} struct with all values initialized This function returns a copy of a statically allocated structure. So you don't need to free the returned structure. The Warp library decides on the program flow based on this struct. Uninitialized pointers can point to random space in RAM which can create segmentation faults, or even worse, produce unnoticed side-effects. It is therefore good practice to manually set unused pointers to @code{NULL} and give blank values to numbers Since there are many variables and pointers in @code{gal_warp_wcsalign_t}, it is easy to forget @emph{initializing} them. With that said, we recommend using this function to minimize human error. @end deftypefun @deftypefun void gal_warp_wcsalign (gal_warp_wcsalign_t *wa) A high-level function to align the input dataset's pixels to its WCS coordinates and write the result in @code{wa->output}. This function assumes that the input variables have already been set in the @code{wa} structure. The input variables are clearly shown in the definition of @code{gal_warp_wcsalign_t}. It will call the lower level functions below to do the job and will free the internal variables afterwards. @end deftypefun The following low-level functions are called from the high-level @code{gal_warp_wcsalign} function. They are provided here in scenarios where fine grain control over the thread workflow is necessary, see @ref{Multithreaded programming}. @deftypefun void gal_warp_wcsalign_init (gal_warp_wcsalign_t *wa) Low-level function to initialize all the elements inside the @code{wa} structure assuming that the input variables have been set. The input variables are clearly shown in the definition of @code{gal_warp_wcsalign_t}. This includes sanity checking the input arguments, as well as allocating the output image's empty pixels (that can be filled with @code{gal_warp_wcsalign_onpix}, possibly on threads). @end deftypefun @deftypefun void gal_warp_wcsalign_onpix (gal_warp_wcsalign_t *nl, size_t ind) Low-level function that fills pixel @code{ind} (counting from 0) in the already initialized output image. @end deftypefun @deftypefun {void *} gal_warp_wcsalign_onthread (void *inparam) Low-level worker function that can be passed to the high-level @code{gal_threads_spin_off} or the lower-level @code{pthread_create} with some modifications, see @ref{Multithreaded programming}. @end deftypefun @deftypefun void gal_warp_wcsalign_free (gal_warp_wcsalign_t *wa) Low-level function to free the internal variables inside @code{wa} only. The caller must free the input pointers themselves, this function will not free them (they may be necessary in other parts of the caller's higher-level architecture). @end deftypefun @deftypefun void gal_warp_pixelarea (gal_warp_wcsalign_t *wa) Calculate each input pixel's area based on its WCS and save it to a copy of the input image with only one difference: the pixel values now show pixel area. For examples on its usage, see @ref{Pixel information images}. @end deftypefun @node Color functions, Git wrappers, Warp library, Gnuastro library @subsection Color functions (@file{color.h}) @cindex Colors The available pre-defined colors in Gnuastro are shown and discussed in @ref{Vector graphics colors}. This part of Gnuastro is currently in charge of mapping the color names to the color IDs and to return the red-green-blue fractions of each color. On a terminal that supports 24-bit (true color), you can see the full list of color names and a demo of each color with this command: @example $ astconvertt --listcolors @end example @noindent For each color we have a separate macro that starts with @code{GAL_COLOR_}, and ends with the color name in all-caps. @deffn Macro GAL_COLOR_INVALID @deffnx Macro GAL_COLOR_MEDIUMVIOLETRED @deffnx Macro GAL_COLOR_DEEPPINK @deffnx Macro GAL_COLOR_* The integer identifiers for each of the named colors in Gnuastro. Except for the first one (@code{GAL_COLOR_INVALID}), we currently have 140 colors from the @url{https://en.wikipedia.org/wiki/Web_colors#Extended_colors, extended web colors}. The full list of colors and a demo can be visually inspected on the command-line with the @command{astconvertt --listcolors} command and is also shown in @ref{Vector graphics colors}. The macros have the same names, just in full-caps. @end deffn @noindent The functions below can be used to interact with the pre-defined colors: @deftypefun uint8_t gal_color_name_to_id (char @code{*name}) Given the name of a color, return the identifier. The name matching is not case-sensitive. @end deftypefun @deftypefun {char *} gal_color_id_to_name (uint8_t @code{color}) Given the ID of a color, return its name. @end deftypefun @deftypefun void gal_color_in_rgb (uint8_t @code{color}, float @code{*f}) Given the identifier of a color, write the color's red-green-blue fractions in the space that @code{f} points to. It is up to the caller to have the space for three 32-bit floating point numbers to be already allocated before calling this function. @end deftypefun @node Git wrappers, Python interface, Color functions, Gnuastro library @subsection Git wrappers (@file{git.h}) @cindex Git @cindex libgit2 Git is one of the most common tools for version control and it can often be useful during development, for example, see @code{COMMIT} keyword in @ref{Output FITS files}. At installation time, Gnuastro will also check for the existence of libgit2, and store the value in the @code{GAL_CONFIG_HAVE_LIBGIT2}, see @ref{Configuration information} and @ref{Optional dependencies}. @file{gnuastro/git.h} includes @file{gnuastro/config.h} internally, so you will not have to include both for this macro. @deftypefun {char *} gal_git_describe ( ) When libgit2 is present and the program is called within a directory that is version controlled, this function will return a string containing the commit description (similar to Gnuastro's unofficial version number, see @ref{Version numbering}). If there are uncommitted changes in the running directory, it will add a `@code{-dirty}' prefix to the description. When there is no tagged point in the previous commit, this function will return a uniquely abbreviated commit object as fallback. This function is used for generating the value of the @code{COMMIT} keyword in @ref{Output FITS files}. The output string is similar to the output of the following command: @example $ git describe --dirty --always @end example Space for the output string is allocated within this function, so after using the value you have to @code{free} the output string. If libgit2 is not installed or the program calling this function is not within a version controlled directory, then the output will be the @code{NULL} pointer. @end deftypefun @node Python interface, Unit conversion library, Git wrappers, Gnuastro library @subsection Python interface (@file{python.h}) @url{https://en.wikipedia.org/wiki/Python_(programming_language), Python} is a high-level interpreted programming language that is used by some for data analysis. Python itself is written in C, which is the same language that Gnuastro is written in. Hence Gnuastro's library can be directly used in Python wrappers. The functions in this section provide some low-level features to simplify the creation of Python modules that may want to use Gnuastro's advanced and powerful features directly. To see why Gnuastro was written in C, please see @ref{Why C}. @cartouche @noindent @strong{Python interface is not built by default:} to have the features described in this section, Gnuastro's library needs to be built with the @option{--with-python} configuration option. For more, on this configuration option, see @ref{Gnuastro configure options}. To see if the Gnuastro library that you are linking with has these features, you can check the value of @code{GAL_CONFIG_HAVE_PYTHON} macro, see @ref{Configuration information}. @end cartouche The Gnuastro Python Package is built using CPython. This entails using Python wrappers around currently existing Gnuastro library functions to build @url{https://docs.python.org/3/extending/extending.html#, Python Extension Modules}. It also makes use of the @url{https://numpy.org/doc/stable/reference/c-api/index.html, NumPy C-API} for dealing with data arrays. Writing an interface between these and Gnuastro can be simplified using the functions below. Since many of these functions depend on the Gnuastro Library itself, it is more convenient to package them with the Library to facilitate the work of Python package. These functions will be expanding as Gnuastro's own Python module (pyGnuastro) grows. The Python interface of Gnuastro's library is built and installed by default if a Python 3.0.0 or greater with NumPy is found in @code{$PATH}. Users may disable this interface with the @option{--without-python} option to @code{./configure} when they installed Gnuastro, see @ref{Gnuastro configure options}. If you have problems in a Python virtual env, see @ref{Optional dependencies}. Because Python is an optional dependency of Gnuastro, the following functions may not be available on some systems. To check if the installed Gnuastro library was compiled with the following functions, you can use the @code{GAL_CONFIG_HAVE_PYTHON} macro which is defined in @file{gnuastro/config.h}, see @ref{Configuration information}. @deftypefun int gal_python_type_to_numpy (uint8_t @code{type}) Returns the NumPy datatype corresponding to a certain Gnuastro @code{type}, see @ref{Library data types}. @end deftypefun @deftypefun uint8_t gal_python_type_from_numpy (int @code{type}) Returns Gnuastro's numerical datatype that corresponds to the input NumPy @code{type}. For Gnuastro's recognized data types, see @ref{Library data types}. @end deftypefun @node Unit conversion library, Spectral lines library, Python interface, Gnuastro library @subsection Unit conversion library (@file{units.h}) Datasets can contain values in various formats or units. The functions in this section are defined to facilitate the easy conversion between them and are declared in @file{units.h}. If there are certain conversions that are useful for your work, please get in touch. @deftypefun int gal_units_extract_decimal (char @code{*convert}, const char @code{*delimiter}, double @code{*args}, size_t @code{n}) Parse the input @code{convert} string with a certain delimiter (for example, @code{01:23:45}, where the delimiter is @code{":"}) as multiple numbers (for example, 1,23,45) and write them as an array in the space that @code{args} is pointing to. The expected number of values in the string is specified by the @code{n} argument (3 in the example above). If the function succeeds, it will return 1, otherwise it will return 0 and the values may not be fully written into @code{args}. If the number of values parsed in the string is different from @code{n}, this function will fail. @end deftypefun @deftypefun double gal_units_ra_to_degree (char @code{*convert}) @cindex Right Ascension Convert the input Right Ascension (RA) string (in the format of hours, minutes and seconds either as @code{_h_m_s} or @code{_:_:_}) to degrees (a single floating point number). @end deftypefun @deftypefun double gal_units_dec_to_degree (char @code{*convert}) @cindex Declination Convert the input Declination (Dec) string (in the format of degrees, arc-minutes and arc-seconds either as @code{_d_m_s} or @code{_:_:_}) to degrees (a single floating point number). @end deftypefun @deftypefun {char *} gal_units_degree_to_ra (double @code{decimal}, int @code{usecolon}) @cindex Right Ascension Convert the input Right Ascension (RA) degree (a single floating point number) to old/standard notation (in the format of hours, minutes and seconds of @code{_h_m_s}). If @code{usecolon!=0}, then the delimiters between the components will be colons: @code{_:_:_}. @end deftypefun @deftypefun {char *} gal_units_degree_to_dec (double @code{decimal}, int @code{usecolon}) @cindex Declination Convert the input Declination (Dec) degree (a single floating point number) to old/standard notation (in the format of degrees, arc-minutes and arc-seconds of @code{_d_m_s}). If @code{usecolon!=0}, then the delimiters between the components will be colons: @code{_:_:_}. @end deftypefun @deftypefun double gal_units_counts_to_mag (double @code{counts}, double @code{zeropoint}) @cindex Magnitude Convert counts to magnitudes through the given zero point. For more on the equation, see @ref{Brightness flux magnitude}. @end deftypefun @deftypefun double gal_units_mag_to_counts (double @code{mag}, double @code{zeropoint}) @cindex Magnitude Convert magnitudes to counts through the given zero point. For more on the equation, see @ref{Brightness flux magnitude}. @end deftypefun @deftypefun double gal_units_mag_to_sb (double @code{mag}, double @code{area_arcsec2}) @cindex Magnitude @cindex Surface Brightness Calculate the surface brightness of a given magnitude, over a certain area in units of arcsec@mymath{^2}. For more on the equation, see @ref{Brightness flux magnitude}. @end deftypefun @deftypefun double gal_units_sb_to_mag (double @code{sb}, double @code{area_arcsec2}) Calculate the magnitude of a given surface brightness, over a certain area in units of arcsec@mymath{^2}. For more on the equation, see @ref{Brightness flux magnitude}. @end deftypefun @deftypefun double gal_units_counts_to_sb (double @code{counts}, double @code{zeropoint_ab}, double @code{area_arcsec2}) Calculate the surface brightness of a given count level, over a certain area in units of arcsec@mymath{^2}, assuming a certain AB zero point. For more on the equation, see @ref{Brightness flux magnitude}. @end deftypefun @deftypefun double gal_units_sb_to_counts (double @code{sb}, double @code{zeropoint_ab}, double @code{area_arcsec2}) Calculate the counts corresponding to a given surface brightness, over a certain area in units of arcsec@mymath{^2}. For more on the equation, see @ref{Brightness flux magnitude}. @end deftypefun @deftypefun double gal_units_counts_to_jy (double @code{counts}, double @code{zeropoint_ab}) @cindex Jansky (Jy) @cindex AB Magnitude @cindex Magnitude, AB Convert counts to Janskys through an AB magnitude-based zero point. For more on the equation, see @ref{Brightness flux magnitude}. @end deftypefun @deftypefun double gal_units_au_to_pc (double @code{au}) @cindex Parsecs @cindex Astronomical Units (AU) Convert the input value (assumed to be in Astronomical Units) to Parsecs. For the conversion equation, see the description of @code{au-to-pc} operator in @ref{Arithmetic operators}. @end deftypefun @deftypefun double gal_units_counts_to_nanomaggy (double @code{counts}, double @code{zeropoint_ab}) @cindex Nanomaggy @cindex Magnitude (nanomaggy) Convert counts to Nanomaggy (with fixed zero point of 22.5) through an AB magnitude-based zero point. @end deftypefun @deftypefun double gal_units_nanomaggy_to_counts (double @code{counts}, double @code{zeropoint_ab}) Convert Nanomaggy (with fixed zero point of 22.5) to counts through an AB magnitude-based zero point. @end deftypefun @deftypefun double gal_units_pc_to_au (double @code{pc}) Convert the input value (assumed to be in Parsecs) to Astronomical Units (AUs). For the conversion equation, see the description of @code{au-to-pc} operator in @ref{Arithmetic operators}. @end deftypefun @deftypefun double gal_units_ly_to_pc (double @code{ly}) @cindex Light-year Convert the input value (assumed to be in Light-years) to Parsecs. For the conversion equation, see the description of @code{ly-to-pc} operator in @ref{Arithmetic operators}. @end deftypefun @deftypefun double gal_units_pc_to_ly (double @code{pc}) Convert the input value (assumed to be in Parsecs) to Light-years. For the conversion equation, see the description of @code{ly-to-pc} operator in @ref{Arithmetic operators}. @end deftypefun @deftypefun double gal_units_ly_to_au (double @code{ly}) Convert the input value (assumed to be in Light-years) to Astronomical Units. For the conversion equation, see the description of @code{ly-to-pc} operator in @ref{Arithmetic operators}. @end deftypefun @deftypefun double gal_units_au_to_ly (double @code{au}) Convert the input value (assumed to be in Astronomical Units) to Light-years. For the conversion equation, see the description of @code{ly-to-pc} operator in @ref{Arithmetic operators}. @end deftypefun @node Spectral lines library, Cosmology library, Unit conversion library, Gnuastro library @subsection Spectral lines library (@file{speclines.h}) Gnuastro's library has the following macros and functions for dealing with spectral lines. All these functions are declared in @file{gnuastro/spectra.h}. @cindex H-alpha @cindex H-beta @cindex H-gamma @cindex H-delta @cindex H-epsilon @cindex OII doublet @cindex SII doublet @cindex Lyman-alpha @cindex Lyman limit @cindex NII doublet @cindex Doublet: NII @cindex Doublet: OII @cindex Doublet: SII @cindex OIII doublet @cindex MgII doublet @cindex CIII doublet @cindex Balmer limit @cindex Doublet: OIII @cindex Doublet: MgII @cindex Doublet: CIII @deffn Macro GAL_SPECLINES_INVALID @deffnx Macro GAL_SPECLINES_Ne_VIII_770 @deffnx Macro GAL_SPECLINES_Ne_VIII_780 @deffnx Macro GAL_SPECLINES_Ly_epsilon @deffnx Macro GAL_SPECLINES_Ly_delta @deffnx Macro GAL_SPECLINES_Ly_gamma @deffnx Macro GAL_SPECLINES_C_III_977 @deffnx Macro GAL_SPECLINES_N_III_989 @deffnx Macro GAL_SPECLINES_N_III_991_51 @deffnx Macro GAL_SPECLINES_N_III_991_57 @deffnx Macro GAL_SPECLINES_Ly_beta @deffnx Macro GAL_SPECLINES_O_VI_1031 @deffnx Macro GAL_SPECLINES_O_VI_1037 @deffnx Macro GAL_SPECLINES_Ar_I_1066 @deffnx Macro GAL_SPECLINES_Ly_alpha @deffnx Macro GAL_SPECLINES_N_V_1238 @deffnx Macro GAL_SPECLINES_N_V_1242 @deffnx Macro GAL_SPECLINES_Si_II_1260 @deffnx Macro GAL_SPECLINES_Si_II_1264 @deffnx Macro GAL_SPECLINES_O_I_1302 @deffnx Macro GAL_SPECLINES_C_II_1334 @deffnx Macro GAL_SPECLINES_C_II_1335 @deffnx Macro GAL_SPECLINES_Si_IV_1393 @deffnx Macro GAL_SPECLINES_O_IV_1397 @deffnx Macro GAL_SPECLINES_O_IV_1399 @deffnx Macro GAL_SPECLINES_Si_IV_1402 @deffnx Macro GAL_SPECLINES_N_IV_1486 @deffnx Macro GAL_SPECLINES_C_IV_1548 @deffnx Macro GAL_SPECLINES_C_IV_1550 @deffnx Macro GAL_SPECLINES_He_II_1640 @deffnx Macro GAL_SPECLINES_O_III_1660 @deffnx Macro GAL_SPECLINES_O_III_1666 @deffnx Macro GAL_SPECLINES_N_III_1746 @deffnx Macro GAL_SPECLINES_N_III_1748 @deffnx Macro GAL_SPECLINES_Al_III_1854 @deffnx Macro GAL_SPECLINES_Al_III_1862 @deffnx Macro GAL_SPECLINES_Si_III @deffnx Macro GAL_SPECLINES_C_III_1908 @deffnx Macro GAL_SPECLINES_N_II_2142 @deffnx Macro GAL_SPECLINES_O_III_2320 @deffnx Macro GAL_SPECLINES_C_II_2323 @deffnx Macro GAL_SPECLINES_C_II_2324 @deffnx Macro GAL_SPECLINES_Fe_XI_2648 @deffnx Macro GAL_SPECLINES_He_II_2733 @deffnx Macro GAL_SPECLINES_Mg_V_2782 @deffnx Macro GAL_SPECLINES_Mg_II_2795 @deffnx Macro GAL_SPECLINES_Mg_II_2802 @deffnx Macro GAL_SPECLINES_Fe_IV_2829 @deffnx Macro GAL_SPECLINES_Fe_IV_2835 @deffnx Macro GAL_SPECLINES_Ar_IV_2853 @deffnx Macro GAL_SPECLINES_Ar_IV_2868 @deffnx Macro GAL_SPECLINES_Mg_V_2928 @deffnx Macro GAL_SPECLINES_He_I_2945 @deffnx Macro GAL_SPECLINES_O_III_3132 @deffnx Macro GAL_SPECLINES_He_I_3187 @deffnx Macro GAL_SPECLINES_He_II_3203 @deffnx Macro GAL_SPECLINES_O_III_3312 @deffnx Macro GAL_SPECLINES_Ne_V_3345 @deffnx Macro GAL_SPECLINES_Ne_V_3425 @deffnx Macro GAL_SPECLINES_O_III_3444 @deffnx Macro GAL_SPECLINES_N_I_3466_4 @deffnx Macro GAL_SPECLINES_N_I_3466_5 @deffnx Macro GAL_SPECLINES_He_I_3487 @deffnx Macro GAL_SPECLINES_Fe_VII_3586 @deffnx Macro GAL_SPECLINES_Fe_VI_3662 @deffnx Macro GAL_SPECLINES_H_19 @deffnx Macro GAL_SPECLINES_H_18 @deffnx Macro GAL_SPECLINES_H_17 @deffnx Macro GAL_SPECLINES_H_16 @deffnx Macro GAL_SPECLINES_H_15 @deffnx Macro GAL_SPECLINES_H_14 @deffnx Macro GAL_SPECLINES_O_II_3726 @deffnx Macro GAL_SPECLINES_O_II_3728 @deffnx Macro GAL_SPECLINES_H_13 @deffnx Macro GAL_SPECLINES_H_12 @deffnx Macro GAL_SPECLINES_Fe_VII_3758 @deffnx Macro GAL_SPECLINES_H_11 @deffnx Macro GAL_SPECLINES_H_10 @deffnx Macro GAL_SPECLINES_H_9 @deffnx Macro GAL_SPECLINES_Fe_V_3839 @deffnx Macro GAL_SPECLINES_Ne_III_3868 @deffnx Macro GAL_SPECLINES_He_I_3888 @deffnx Macro GAL_SPECLINES_H_8 @deffnx Macro GAL_SPECLINES_Fe_V_3891 @deffnx Macro GAL_SPECLINES_Fe_V_3911 @deffnx Macro GAL_SPECLINES_Ne_III_3967 @deffnx Macro GAL_SPECLINES_H_epsilon @deffnx Macro GAL_SPECLINES_He_I_4026 @deffnx Macro GAL_SPECLINES_S_II_4068 @deffnx Macro GAL_SPECLINES_Fe_V_4071 @deffnx Macro GAL_SPECLINES_S_II_4076 @deffnx Macro GAL_SPECLINES_H_delta @deffnx Macro GAL_SPECLINES_He_I_4143 @deffnx Macro GAL_SPECLINES_Fe_II_4178 @deffnx Macro GAL_SPECLINES_Fe_V_4180 @deffnx Macro GAL_SPECLINES_Fe_II_4233 @deffnx Macro GAL_SPECLINES_Fe_V_4227 @deffnx Macro GAL_SPECLINES_Fe_II_4287 @deffnx Macro GAL_SPECLINES_Fe_II_4304 @deffnx Macro GAL_SPECLINES_O_II_4317 @deffnx Macro GAL_SPECLINES_H_gamma @deffnx Macro GAL_SPECLINES_O_III_4363 @deffnx Macro GAL_SPECLINES_Ar_XIV @deffnx Macro GAL_SPECLINES_O_II_4414 @deffnx Macro GAL_SPECLINES_Fe_II_4416 @deffnx Macro GAL_SPECLINES_Fe_II_4452 @deffnx Macro GAL_SPECLINES_He_I_4471 @deffnx Macro GAL_SPECLINES_Fe_II_4489 @deffnx Macro GAL_SPECLINES_Fe_II_4491 @deffnx Macro GAL_SPECLINES_N_III_4510 @deffnx Macro GAL_SPECLINES_Fe_II_4522 @deffnx Macro GAL_SPECLINES_Fe_II_4555 @deffnx Macro GAL_SPECLINES_Fe_II_4582 @deffnx Macro GAL_SPECLINES_Fe_II_4583 @deffnx Macro GAL_SPECLINES_Fe_II_4629 @deffnx Macro GAL_SPECLINES_N_III_4634 @deffnx Macro GAL_SPECLINES_N_III_4640 @deffnx Macro GAL_SPECLINES_N_III_4641 @deffnx Macro GAL_SPECLINES_C_III_4647 @deffnx Macro GAL_SPECLINES_C_III_4650 @deffnx Macro GAL_SPECLINES_C_III_5651 @deffnx Macro GAL_SPECLINES_Fe_III_4658 @deffnx Macro GAL_SPECLINES_He_II_4685 @deffnx Macro GAL_SPECLINES_Ar_IV_4711 @deffnx Macro GAL_SPECLINES_Ar_IV_4740 @deffnx Macro GAL_SPECLINES_H_beta @deffnx Macro GAL_SPECLINES_Fe_VII_4893 @deffnx Macro GAL_SPECLINES_Fe_IV_4903 @deffnx Macro GAL_SPECLINES_Fe_II_4923 @deffnx Macro GAL_SPECLINES_O_III_4958 @deffnx Macro GAL_SPECLINES_O_III_5006 @deffnx Macro GAL_SPECLINES_Fe_II_5018 @deffnx Macro GAL_SPECLINES_Fe_III_5084 @deffnx Macro GAL_SPECLINES_Fe_VI_5145 @deffnx Macro GAL_SPECLINES_Fe_VII_5158 @deffnx Macro GAL_SPECLINES_Fe_II_5169 @deffnx Macro GAL_SPECLINES_Fe_VI_5176 @deffnx Macro GAL_SPECLINES_Fe_II_5197 @deffnx Macro GAL_SPECLINES_N_I_5200 @deffnx Macro GAL_SPECLINES_Fe_II_5234 @deffnx Macro GAL_SPECLINES_Fe_IV_5236 @deffnx Macro GAL_SPECLINES_Fe_III_5270 @deffnx Macro GAL_SPECLINES_Fe_II_5276 @deffnx Macro GAL_SPECLINES_Fe_VII_5276 @deffnx Macro GAL_SPECLINES_Fe_XIV @deffnx Macro GAL_SPECLINES_Ca_V @deffnx Macro GAL_SPECLINES_Fe_II_5316_6 @deffnx Macro GAL_SPECLINES_Fe_II_5316_7 @deffnx Macro GAL_SPECLINES_Fe_VI_5335 @deffnx Macro GAL_SPECLINES_Fe_VI_5424 @deffnx Macro GAL_SPECLINES_Cl_III_5517 @deffnx Macro GAL_SPECLINES_Cl_III_5537 @deffnx Macro GAL_SPECLINES_Fe_VI_5637 @deffnx Macro GAL_SPECLINES_Fe_VI_5677 @deffnx Macro GAL_SPECLINES_C_III_5697 @deffnx Macro GAL_SPECLINES_Fe_VII_5720 @deffnx Macro GAL_SPECLINES_N_II_5754 @deffnx Macro GAL_SPECLINES_C_IV_5801 @deffnx Macro GAL_SPECLINES_C_IV_5811 @deffnx Macro GAL_SPECLINES_He_I_5875 @deffnx Macro GAL_SPECLINES_O_I_6046 @deffnx Macro GAL_SPECLINES_Fe_VII_6087 @deffnx Macro GAL_SPECLINES_O_I_6300 @deffnx Macro GAL_SPECLINES_S_III_6312 @deffnx Macro GAL_SPECLINES_Si_II_6347 @deffnx Macro GAL_SPECLINES_O_I_6363 @deffnx Macro GAL_SPECLINES_Fe_II_6369 @deffnx Macro GAL_SPECLINES_Fe_X @deffnx Macro GAL_SPECLINES_Fe_II_6516 @deffnx Macro GAL_SPECLINES_N_II_6548 @deffnx Macro GAL_SPECLINES_H_alpha @deffnx Macro GAL_SPECLINES_N_II_6583 @deffnx Macro GAL_SPECLINES_S_II_6716 @deffnx Macro GAL_SPECLINES_S_II_6730 @deffnx Macro GAL_SPECLINES_O_I_7002 @deffnx Macro GAL_SPECLINES_Ar_V @deffnx Macro GAL_SPECLINES_He_I_7065 @deffnx Macro GAL_SPECLINES_Ar_III_7135 @deffnx Macro GAL_SPECLINES_Fe_II_7155 @deffnx Macro GAL_SPECLINES_Ar_IV_7170 @deffnx Macro GAL_SPECLINES_Fe_II_7172 @deffnx Macro GAL_SPECLINES_C_II_7236 @deffnx Macro GAL_SPECLINES_Ar_IV_7237 @deffnx Macro GAL_SPECLINES_O_I_7254 @deffnx Macro GAL_SPECLINES_Ar_IV_7262 @deffnx Macro GAL_SPECLINES_He_I_7281 @deffnx Macro GAL_SPECLINES_O_II_7319 @deffnx Macro GAL_SPECLINES_O_II_7330 @deffnx Macro GAL_SPECLINES_Ni_II_7377 @deffnx Macro GAL_SPECLINES_Ni_II_7411 @deffnx Macro GAL_SPECLINES_Fe_II_7452 @deffnx Macro GAL_SPECLINES_N_I_7468 @deffnx Macro GAL_SPECLINES_S_XII @deffnx Macro GAL_SPECLINES_Ar_III_7751 @deffnx Macro GAL_SPECLINES_He_I_7816 @deffnx Macro GAL_SPECLINES_Ar_I_7868 @deffnx Macro GAL_SPECLINES_Ni_III @deffnx Macro GAL_SPECLINES_Fe_XI_7891 @deffnx Macro GAL_SPECLINES_He_II_8236 @deffnx Macro GAL_SPECLINES_Pa_20 @deffnx Macro GAL_SPECLINES_Pa_19 @deffnx Macro GAL_SPECLINES_Pa_18 @deffnx Macro GAL_SPECLINES_O_I_8446 @deffnx Macro GAL_SPECLINES_Pa_17 @deffnx Macro GAL_SPECLINES_Ca_II_8498 @deffnx Macro GAL_SPECLINES_Pa_16 @deffnx Macro GAL_SPECLINES_Ca_II_8542 @deffnx Macro GAL_SPECLINES_Pa_15 @deffnx Macro GAL_SPECLINES_Cl_II @deffnx Macro GAL_SPECLINES_Pa_14 @deffnx Macro GAL_SPECLINES_Fe_II_8616 @deffnx Macro GAL_SPECLINES_Ca_II_8662 @deffnx Macro GAL_SPECLINES_Pa_13 @deffnx Macro GAL_SPECLINES_N_I_8680 @deffnx Macro GAL_SPECLINES_N_I_8703 @deffnx Macro GAL_SPECLINES_N_I_8711 @deffnx Macro GAL_SPECLINES_Pa_12 @deffnx Macro GAL_SPECLINES_Pa_11 @deffnx Macro GAL_SPECLINES_Fe_II_8891 @deffnx Macro GAL_SPECLINES_Pa_10 @deffnx Macro GAL_SPECLINES_S_III_9068 @deffnx Macro GAL_SPECLINES_Pa_9 @deffnx Macro GAL_SPECLINES_S_III_9531 @deffnx Macro GAL_SPECLINES_Pa_epsilon @deffnx Macro GAL_SPECLINES_C_I_9824 @deffnx Macro GAL_SPECLINES_C_I_9850 @deffnx Macro GAL_SPECLINES_S_VIII @deffnx Macro GAL_SPECLINES_He_I_10027 @deffnx Macro GAL_SPECLINES_He_I_10031 @deffnx Macro GAL_SPECLINES_Pa_delta @deffnx Macro GAL_SPECLINES_S_II_10286 @deffnx Macro GAL_SPECLINES_S_II_10320 @deffnx Macro GAL_SPECLINES_S_II_10336 @deffnx Macro GAL_SPECLINES_Fe_XIII @deffnx Macro GAL_SPECLINES_He_I_10830 @deffnx Macro GAL_SPECLINES_Pa_gamma @deffnx Macro GAL_SPECLINES_NUMBER Internal values/identifiers for recognized spectral lines as is clear from their names. They are based on the UV an optical table of galaxy emission lines of Drew Chojnowski@footnote{@url{http://astronomy.nmsu.edu/drewski/tableofemissionlines.html}}. Note the first and last macros, they can be used when parsing the lines automatically: both do not correspond to any line, but their integer values correspond to the two integers just before and after the first and last line identifier: @code{GAL_SPECLINES_INVALID} has a value of zero, and allows you to have a fixed integer which never corresponds to a line. @code{GAL_SPECLINES_INVALID_MAX} is the total number of pre-defined lines, plus one. So you can parse all the known lines with a @code{for} loop like this: @example for(i=1;i<GAL_SPECLINES_INVALID_MAX;++i) @end example @end deffn @deffn Macro GAL_SPECLINES_ANGSTROM_* Wavelength (in Angstroms) of the named lines. The @code{*} can take any of the line names of the @code{GAL_SPECLINES_*} Macros above. @end deffn @deffn Macro GAL_SPECLINES_NAME_* Names (as literal stings without any space) that can be used to refer to the lines in your program and converted to and from line identifiers using the functions below. The @code{*} can take any of the line names of the @code{GAL_SPECLINES_*} Macros above. @end deffn @deftypefun {char *} gal_speclines_line_name (int @code{linecode}) Return the literal string of the given spectral line identifier Macro (for example @code{GAL_SPECLINES_HALPHA} or @code{GAL_SPECLINES_LYLIMIT}). @end deftypefun @deftypefun int gal_speclines_line_code (char @code{*name}) Return the spectral line identifier of the given standard name (for example @code{GAL_SPECLINES_NAME_HALPHA} or @code{GAL_SPECLINES_NAME_LYLIMIT}). @end deftypefun @deftypefun double gal_speclines_line_angstrom (int @code{linecode}) Return the wavelength (in Angstroms) of the given line. @end deftypefun @deftypefun double gal_speclines_line_redshift (double @code{obsline}, double @code{restline}) @cindex Rest-frame Return the redshift where the observed wavelength (@code{obsline}) was emitted from (if its restframe wavelength was @code{restline}). @end deftypefun @deftypefun double gal_speclines_line_redshift_code (double @code{obsline}, int @code{linecode}) Return the redshift where the observed wavelength (@code{obsline}) was emitted from a pre-defined spectral line in the macros above. For example, you want the redshift where the H-alpha line falls at a wavelength of 8000 Angstroms, you can call this function like this: @example gal_speclines_line_redshift_code(8000, GAL_SPECLINES_H_alpha); @end example @end deftypefun @node Cosmology library, SAO DS9 library, Spectral lines library, Gnuastro library @subsection Cosmology library (@file{cosmology.h}) This library does the main cosmological calculations that are commonly necessary in extra-galactic astronomical studies. The main variable in this context is the redshift (@mymath{z}). The cosmological input parameters in the functions below are @code{H0}, @code{o_lambda_0}, @code{o_matter_0}, @code{o_radiation_0} which respectively represent the current (at redshift 0) expansion rate (Hubble constant in units of km/sec/Mpc), cosmological constant (@mymath{\Lambda}), matter and radiation densities. All these functions are declared in @file{gnuastro/cosmology.h}. For a more extended introduction/discussion of the cosmological parameters, please see @ref{CosmicCalculator}. @deftypefun double gal_cosmology_age (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Returns the age of the universe at redshift @code{z} in units of Giga years. @end deftypefun @deftypefun double gal_cosmology_proper_distance (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Returns the proper distance to an object at redshift @code{z} in units of Mega parsecs. @end deftypefun @deftypefun double gal_cosmology_comoving_volume (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Returns the comoving volume over 4pi stradian to @code{z} in units of Mega parsecs cube. @end deftypefun @deftypefun double gal_cosmology_critical_density (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Returns the critical density at redshift @code{z} in units of @mymath{g/cm^3}. @end deftypefun @deftypefun double gal_cosmology_angular_distance (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Return the angular diameter distance to an object at redshift @code{z} in units of Mega parsecs. @end deftypefun @deftypefun double gal_cosmology_luminosity_distance (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Return the luminosity diameter distance to an object at redshift @code{z} in units of Mega parsecs. @end deftypefun @deftypefun double gal_cosmology_distance_modulus (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Return the distance modulus at redshift @code{z} (with no units). @end deftypefun @deftypefun double gal_cosmology_to_absolute_mag (double @code{z}, double @code{H0}, double @code{o_lambda_0}, double @code{o_matter_0}, double @code{o_radiation_0}) Return the conversion from apparent to absolute magnitude for an object at redshift @code{z}. This value has to be added to the apparent magnitude to give the absolute magnitude of an object at redshift @code{z}. @end deftypefun @deftypefun double gal_cosmology_velocity_from_z (double @code{z}) Return the velocity (in km/s) corresponding to the given redshift (@code{z}). @end deftypefun @deftypefun double gal_cosmology_z_from_velocity (double @code{v}) Return the redshift corresponding to the given velocity (@code{v} in km/s). @end deftypefun @node SAO DS9 library, , Cosmology library, Gnuastro library @subsection SAO DS9 library (@file{ds9.h}) @cindex SAO DS9 This library operates on the output files of SAO DS9@footnote{@url{https://sites.google.com/cfa.harvard.edu/saoimageds9}}. SAO DS9 is one of the most commonly used FITS image and cube viewers today with an easy to use graphic user interface (GUI), see @ref{SAO DS9}. But besides merely opening FITS data, it can also produce certain kinds of files that can be useful in common analysis. For example, on DS9's GUI, it is very easy to define a (possibly complex) polygon as a ``region''. You can then save that ``region'' into a file and using the functions below, feed the polygon into Gnuastro's programs (or your custom programs). @deffn Macro GAL_DS9_COORD_MODE_IMG @deffnx Macro GAL_DS9_COORD_MODE_WCS @deffnx Macro GAL_DS9_COORD_MODE_INVALID Macros to identify the coordinate mode of the DS9 file. Their names are sufficiently descriptive. The last one (@code{INVALID}) is for sanity checks (for example, to know if the mode is already selected). @end deffn @deftypefun {gal_data_t *} gal_ds9_reg_read_polygon (char @code{*filename}) @cindex SAO DS9 region file @cindex Region file (SAO DS9) Returns an allocated generic data container (@code{gal_data_t}, with an array of @code{GAL_TYPE_FLOAT64}) containing the vertices of a polygon within the SAO DS9 region file given by @code{*filename}. Since SAO DS9 region files are 2 dimensional, if there are @mymath{N} vertices in the SAO DS9 region file, the returned dataset will have @mymath{2\times N} elements (first two elements belonging to first vertice, etc.). The mode to interpret the vertice coordinates is also read from the SAO DS9 region file and written into the @code{status} attribute of the output @code{gal_data_t}. The coordinate mode can be one of the @code{GAL_DS9_COORD_MODE_*} macros, mentioned above. It is assumed that the file begins with @code{# Region file format: DS9} and it has two more lines (at least): a line containing the mode of the coordinates (the line should only contain either @code{fk5} or @code{image}), a line with the polygon vertices following this format: @code{polygon(V1X,V1Y,V2X,V2Y,...)} where @code{V1X} and @code{V1Y} are the horizontal and vertical coordinates of the first vertice, and so on. For example, here is a minimal acceptable SAO DS9 region file: @example # Region file format: DS9 fk5 polygon(53.187414,-27.779152,53.159507,-27.759633,...) @end example @end deftypefun @node Library demo programs, , Gnuastro library, Library @section Library demo programs In this final section of @ref{Library}, we give some example Gnuastro programs to demonstrate various features in the library. All these programs have been tested and once Gnuastro is installed you can compile and run them with Gnuastro's @ref{BuildProgram} program that will take care of linking issues. If you do not have any FITS file to experiment on, you can use those that are generated by Gnuastro after @command{make check} in the @file{tests/} directory, see @ref{Quick start}. @menu * Library demo - reading a image:: Read a FITS image into memory. * Library demo - inspecting neighbors:: Inspect the neighbors of a pixel. * Library demo - multi-threaded operation:: Doing an operation on threads. * Library demo - reading and writing table columns:: Simple Column I/O. * Library demo - Warp to another image:: Output pixel grid and WCS from another image. * Library demo - Warp to new grid:: Define a new pixel grid and WCS to resample the input. @end menu @node Library demo - reading a image, Library demo - inspecting neighbors, Library demo programs, Library demo programs @subsection Library demo - reading a FITS image The following simple program demonstrates how to read a FITS image into memory and use the @code{void *array} pointer in of @ref{Generic data container}. For easy linking/compilation of this program along with a first run see @ref{BuildProgram} (in short: Compile, link and run ‘myprogram.c' with this command: `@command{astbuildprog myprogram.c}). Before running, also change the @code{filename} and @code{hdu} variable values to specify an existing FITS file and/or extension/HDU. This is just intended to demonstrate how to use the @code{array} pointer of @code{gal_data_t}. Hence it does not do important sanity checks, for example in real datasets you may also have blank pixels. In such cases, this program will return a NaN value (see @ref{Blank pixels}). So for general statistical information of a dataset, it is much better to use Gnuastro's @ref{Statistics} program which can deal with blank pixels and many other issues in a generic dataset. To encourage good coding practices, this script contains a copyright notice with a place holder for your name and your email (as you customize it for your own purpose). Always keep a one-line description and copyright notice like this in all your scripts, such ``metadata'' is very important to accompany every source file you write. Of course, when you write the source file from scratch and just learn how to use a single function from this manual, only your name/year should appear. The existing name of the original author of this example program is only for cases where you copy-paste this whole file. @example /* Reading a FITS image into memory. * * The following simple program demonstrates how to read a FITS image * into memory and use the 'void *array' pointer. This is just intended * to demonstrate how to use the array pointer of 'gal_data_t'. * * Copyright (C) 2024 Your Name <your@@email.address> * Copyright (C) 2020-2024 Mohammad Akhlaghi <mohammad@@akhlaghi.org> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <gnuastro/fits.h> /* includes gnuastro's data.h and type.h */ #include <gnuastro/statistics.h> int main(void) @{ size_t i; float *farray; double sum=0.0f; gal_data_t *image; char *filename="img.fits", *hdu="1"; /* Read `img.fits' (HDU: 1) as a float32 array. */ image=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32, -1, 1, NULL); /* Use the allocated space as a single precision floating * point array (recall that `image->array' has `void *' * type, so it is not directly usable). */ farray=image->array; /* Calculate the sum of all the values. */ for(i=0; i<image->size; ++i) sum += farray[i]; /* Report the sum. */ printf("Sum of values in %s (hdu %s) is: %f\n", filename, hdu, sum); /* Clean up and return. */ gal_data_free(image); return EXIT_SUCCESS; @} @end example @node Library demo - inspecting neighbors, Library demo - multi-threaded operation, Library demo - reading a image, Library demo programs @subsection Library demo - inspecting neighbors The following simple program shows how you can inspect the neighbors of a pixel using the @code{GAL_DIMENSION_NEIGHBOR_OP} function-like macro that was introduced in @ref{Dimensions}. For easy linking/compilation of this program along with a first run see @ref{BuildProgram}. Before running, also change the file name and HDU (first and second arguments to @code{gal_fits_img_read_to_type}) to specify an existing FITS file and/or extension/HDU. To encourage good coding practices, this script contains a copyright notice with a place holder for your name and your email (as you customize it for your own purpose). Always keep a one-line description and copyright notice like this in all your scripts, such ``metadata'' is very important to accompany every source file you write. Of course, when you write the source file from scratch and just learn how to use a single function from this manual, only your name/year should appear. The existing name of the original author of this example program is only for cases where you copy-paste this whole file. @example /* Reading a FITS image into memory. * * The following simple program shows how you can inspect the neighbors * of a pixel using the GAL_DIMENSION_NEIGHBOR_OP function-like macro. * * Copyright (C) 2024 Your Name <your@@email.address> * Copyright (C) 2020-2024 Mohammad Akhlaghi <mohammad@@akhlaghi.org> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <gnuastro/fits.h> #include <gnuastro/dimension.h> int main(void) @{ double sum; float *array; size_t i, num, *dinc; gal_data_t *input=gal_fits_img_read_to_type("input.fits", "1", GAL_TYPE_FLOAT32, -1, 1, NULL); /* To avoid the `void *' pointer and have `dinc'. */ array=input->array; dinc=gal_dimension_increment(input->ndim, input->dsize); /* Go over all the pixels. */ for(i=0;i<input->size;++i) @{ num=0; sum=0.0f; GAL_DIMENSION_NEIGHBOR_OP( i, input->ndim, input->dsize, input->ndim, dinc, @{++num; sum+=array[nind];@} ); printf("%zu: num: %zu, sum: %f\n", i, num, sum); @} /* Clean up and return. */ gal_data_free(input); free(dinc); return EXIT_SUCCESS; @} @end example @node Library demo - multi-threaded operation, Library demo - reading and writing table columns, Library demo - inspecting neighbors, Library demo programs @subsection Library demo - multi-threaded operation The following simple program shows how to use Gnuastro to simplify spinning off threads and distributing different jobs between the threads. The relevant thread-related functions are defined in @ref{Gnuastro's thread related functions}. For easy linking/compilation of this program, along with a first run, see Gnuastro's @ref{BuildProgram}. Before running, also change the @code{filename} and @code{hdu} variable values to specify an existing FITS file and/or extension/HDU. This is a very simple program to open a FITS image, distribute its pixels between different threads and print the value of each pixel and the thread it was assigned to. The actual operation is very simple (and would not usually be done with threads in a real-life program). It is intentionally chosen to put more focus on the important steps in spinning off threads and how the worker function (which is called by each thread) can identify the job-IDs it should work on. For example, instead of an array of pixels, you can define an array of tiles or any other context-specific structures as separate targets. The important thing is that each action should have its own unique ID (counting from zero, as is done in an array in C). You can then follow the process below and use each thread to work on all the targets that are assigned to it. Recall that spinning off threads is itself an expensive process and we do not want to spin-off one thread for each target (see the description of @code{gal_threads_dist_in_threads} in @ref{Gnuastro's thread related functions}. There are many (more complicated, real-world) examples of using @code{gal_threads_spin_off} in Gnuastro's actual source code, you can see them by searching for the @code{gal_threads_spin_off} function from the top source (after unpacking the tarball) directory (for example, with this command): @example $ grep -r gal_threads_spin_off ./ @end example To encourage good coding practices, this script contains a copyright notice with a place holder for your name and your email (as you customize it for your own purpose). Always keep a one-line description and copyright notice like this in all your scripts, such ``metadata'' is very important to accompany every source file you write. Of course, when you write the source file from scratch and just learn how to use a single function from this manual, only your name/year should appear. The existing name of the original author of this example program is only for cases where you copy-paste this whole file. The code of this demonstration program is shown below. This program was also built and run when you ran @code{make check} during the building of Gnuastro (@code{tests/lib/multithread.c}), so it is already tested for your system and you can safely use it as a guide. @example /* Demo of Gnuastro's high-level multi-threaded interface. * * This is a very simple program to open a FITS image, distribute its * pixels between different threads and print the value of each pixel * and the thread it was assigned to. * * Copyright (C) 2024 Your Name <your@@email.address> * Copyright (C) 2020-2024 Mohammad Akhlaghi <mohammad@@akhlaghi.org> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <gnuastro/fits.h> #include <gnuastro/threads.h> /* This structure can keep all information you want to pass onto the * worker function on each thread. */ struct params @{ gal_data_t *image; /* Dataset to print values of. */ @}; /* This is the main worker function which will be called by the * different threads. `gal_threads_params' is defined in * `gnuastro/threads.h' and contains the pointer to the parameter we * want. Note that the input argument and returned value of this * function always must have `void *' type. */ void * worker_on_thread(void *in_prm) @{ /* Low-level definitions to be done first. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct params *p=(struct params *)tprm->params; /* Subsequent definitions. */ float *array=p->image->array; size_t i, index, *dsize=p->image->dsize; /* Go over all the actions (pixels in this case) that were assigned * to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) @{ /* For easy reading. */ index = tprm->indexs[i]; /* Print the information. */ printf("(%zu, %zu) on thread %zu: %g\n", index%dsize[1]+1, index/dsize[1]+1, tprm->id, array[index]); @} /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; @} /* High-level function (called by the operating system). */ int main(void) @{ struct params p; char *filename="input.fits", *hdu="1"; size_t numthreads=gal_threads_number(); /* We are using * `-1' for `minmapsize' to ensure that the image is * read into * memory and `1' for `quietmmap' (which can also be * zero), see the "Memory management" section in the book. */ int quietmmap=1; size_t minmapsize=-1; /* Read the image into memory as a float32 data type. */ p.image=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32, minmapsize, quietmmap, NULL); /* Print some basic information before the actual contents: */ printf("Pixel values of %s (HDU: %s) on %zu threads.\n", filename, hdu, numthreads); printf("Used to check the compiled library's capability in opening " "a FITS file, and also spinning off threads.\n"); /* A small sanity check: this is only intended for 2D arrays (to * print the coordinates of each pixel). */ if(p.image->ndim!=2) @{ fprintf(stderr, "only 2D images are supported."); exit(EXIT_FAILURE); @} /* Spin-off the threads and do the processing on each thread. */ gal_threads_spin_off(worker_on_thread, &p, p.image->size, numthreads, minmapsize, quietmmap); /* Clean up and return. */ gal_data_free(p.image); return EXIT_SUCCESS; @} @end example @node Library demo - reading and writing table columns, Library demo - Warp to another image, Library demo - multi-threaded operation, Library demo programs @subsection Library demo - reading and writing table columns Tables are some of the most common inputs to, and outputs of programs. This section contains a small program for reading and writing tables using the constructs described in @ref{Table input output}. For easy linking/compilation of this program, along with a first run, see Gnuastro's @ref{BuildProgram}. Before running, also set the following file and column names in the first two lines of @code{main}. The input and output names may be @file{.txt} and @file{.fits} tables, @code{gal_table_read} and @code{gal_table_write} will be able to write to both formats. For plain text tables see @ref{Gnuastro text table format}. If you do not have any table in text file format to use as your input, you can use the table that is generated in @ref{Sufi simulates a detection} section. This example program reads three columns from a table. The first two columns are selected by their name (@code{NAME1} and @code{NAME2}) and the third is selected by its number: column 10 (counting from 1). Gnuastro's column selection is discussed in @ref{Selecting table columns}. The first and second columns can be any type, but this program will convert them to @code{int32_t} and @code{float} for its internal usage respectively. However, the third column must be double for this program. So if it is not, the program will abort with an error. Having the columns in memory, it will print them out along with their sum (just a simple application, you can do what ever you want at this stage). Reading the table finishes here. The rest of the program is a demonstration of writing a table. While parsing the rows, this program will change the first column (to be counters) and multiply the second by 10 (so the output will be different). Then it will define the order of the output columns by setting the @code{next} element (to create a @ref{List of gal_data_t}). Before writing, this function will also set names for the columns (units and comments can be defined in a similar manner). Writing the columns to a file is then done through a simple call to @code{gal_table_write}. The operations that are shown in this example program are not necessary all the time. For example, in many cases, you know the numerical data type of the column before writing your program (see @ref{Numeric data types}), so type checking and copying to a specific type will not be necessary. To encourage good coding practices, this script contains a copyright notice with a place holder for your name and your email (as you customize it for your own purpose). Always keep a one-line description and copyright notice like this in all your scripts, such ``metadata'' is very important to accompany every source file you write. Of course, when you write the source file from scratch and just learn how to use a single function from this manual, only your name/year should appear. The existing name of the original author of this example program is only for cases where you copy-paste this whole file. @example @verbatim /* Reading and writing table columns. * * This example program reads three columns from a table. Having the * columns in memory, it will print them out along with their sum. The * rest of the program is a demonstration of writing a table. * * Copyright (C) 2024 Your Name <your@@email.address> * Copyright (C) 2020-2024 Mohammad Akhlaghi <mohammad@@akhlaghi.org> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <gnuastro/table.h> int main(void) { /* File names and column names (which may also be numbers). */ char *c1_name="NAME1", *c2_name="NAME2", *c3_name="10"; char *inname="input.fits", *hdu="1", *outname="out.fits"; /* Internal parameters. */ float *array2=NULL; double *array3=NULL; int32_t *array1=NULL; size_t i, counter=0; gal_data_t *c1=NULL; gal_data_t *c2=NULL; gal_data_t tmp, *col, *columns; gal_list_str_t *column_ids=NULL; /* Define the columns to read. */ gal_list_str_add(&column_ids, c1_name, 0); gal_list_str_add(&column_ids, c2_name, 0); gal_list_str_add(&column_ids, c3_name, 0); /* The columns were added in reverse, so correct it. */ gal_list_str_reverse(&column_ids); /* Read the desired columns. */ columns = gal_table_read(inname, hdu, NULL, column_ids, GAL_TABLE_SEARCH_NAME, 0, 1, -1, 1, NULL); /* Go over the columns, we will assume that you do not know their type * a-priori, so we will check */ counter=1; for(col=columns; col!=NULL; col=col->next) switch(counter++) { case 1: /* First column: we want it as int32_t. */ c1=gal_data_copy_to_new_type(col, GAL_TYPE_INT32); array1 = c1->array; break; case 2: /* Second column: we want it as float. */ c2=gal_data_copy_to_new_type(col, GAL_TYPE_FLOAT32); array2 = c2->array; break; case 3: /* Third column: it MUST be double. */ if(col->type!=GAL_TYPE_FLOAT64) { fprintf(stderr, "Column %s must be float64 type, it is " "%s", c3_name, gal_type_name(col->type, 1)); exit(EXIT_FAILURE); } array3 = col->array; break; default: exit(EXIT_FAILURE); } /* As an example application we will just print them out. In the * meantime (just for a simple demonstration), change the first * array value to the counter and multiply the second by 10. */ for(i=0;i<c1->size;++i) { printf("%zu: %d + %f + %f = %f\n", i+1, array1[i], array2[i], array3[i], array1[i]+array2[i]+array3[i]); array1[i] = i+1; array2[i] *= 10; } /* Link the first two columns as a list. */ c1->next = c2; c2->next = NULL; /* Set names for the columns and write them out. */ c1->name = "COUNTER"; c2->name = "VALUE"; gal_table_write(c1, NULL, NULL, GAL_TABLE_FORMAT_BFITS, outname, "MY-COLUMNS", 0, 0); /* The names were not allocated, so to avoid cleaning-up problems, * we will set them to NULL. */ c1->name = c2->name = NULL; /* Clean up and return. */ gal_data_free(c1); gal_data_free(c2); gal_list_data_free(columns); gal_list_str_free(column_ids, 0); /* strings were not allocated. */ return EXIT_SUCCESS; } @end verbatim @end example @node Library demo - Warp to another image, Library demo - Warp to new grid, Library demo - reading and writing table columns, Library demo programs @subsection Library demo - Warp to another image Gnuastro's warp library (that you can access by including @file{gnuastro/warp.h}) allows you to resample an image from a grid to another entirely using the WCSLIB (while accounting for distortions if necessary; see @ref{Warp library}). The Warp library uses a pixel-mixing or area-based resampling approach which is fully described in @ref{Resampling}. The most generic uses cases for this library are already available in the @ref{Invoking astwarp} program. For a related demo (where the output grid and WCS are constructed from scratch), see @ref{Library demo - Warp to new grid}. In the example below, we are warping the @code{input.fits} file to the same pixel grid and WCS as @code{reference.fits} image (assuming it is in hdu @code{0}). You can download the FITS files in the @ref{Color channels in same pixel grid} section and use them as @code{input.fits} and @code{reference.fits} files. Feel free to change these names to your own test file names. This can be useful when you have a complex grid and WCS containing various keywords such as non-linear distortion coefficients, etc. For example datasets, see the description of the @option{--gridfile} option in @ref{Align pixels with WCS considering distortions}. To compile the demonstration program below, copy and paste the contents in a plain-text file (let's assume you named it @file{align-to-img.c}) and use @ref{BuildProgram} with this command: `@command{astbuildprog align-to-img.c}'. Please note that the demo program does not perform many sanity checks to avoid making it too complex and to highlight this particular feature in the library. For a robust method write programs with all the necessary sanity checks, see Gnuastro's Warp source code, see @ref{Program source}. To encourage good coding practices, this script contains a copyright notice with a place holder for your name and your email (as you customize it for your own purpose). Always keep a one-line description and copyright notice like this in all your scripts, such ``metadata'' is very important to accompany every source file you write. Of course, when you write the source file from scratch and just learn how to use a single function from this manual, only your name/year should appear. The existing name of the original author of this example program is only for cases where you copy-paste this whole file. @example @verbatim /* Warp to another image. * * In the example below, we are warping the input.fits file to the same * pixel grid and WCS as reference.fits image. * * Copyright (C) 2024 Your Name <your@@email.address> * Copyright (C) 2022-2024 Pedram Ashofteh-Ardakani <pedramardakani@pm.me> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <gnuastro/wcs.h> /* contains gnuastro's fits.h */ #include <gnuastro/warp.h> /* contains gnuastro's data.h */ #include <gnuastro/array.h> /* contains gnuastro's type.h */ int main(void) { /* Input file's name and HDU. */ char *filename="input.fits", *hdu="1"; /* Reference file's name and HDU. */ char *gridfile="reference.fits", *gridhdu="0"; /* Output file name. */ char *outname="align-to-img.fits"; /* Low-level variables needed to read the reference file's size. */ int nwcs; size_t ndim, *dsize; /* Initialize the 'wa' struct with empty values and NULL pointers. */ gal_warp_wcsalign_t wa=gal_warp_wcsalign_template(); /* Read the input image and its WCS. */ wa.input=gal_array_read_one_ch_to_type(filename, hdu, NULL, GAL_TYPE_FLOAT64, -1, 0, NULL); wa.input->wcs=gal_wcs_read(filename, hdu, 0, 0, 0, &wa.input->nwcs, NULL); /* Prepare the warp input structure, use all threads available. */ wa.coveredfrac=1; wa.edgesampling=0; wa.numthreads=0; /* Set the target grid to be the same as wcsref.fits file on hdu 0. */ wa.twcs=gal_wcs_read(gridfile, gridhdu, 0, 0, 0, &nwcs, NULL); if(wa.twcs==NULL) { fprintf(stderr, "%s (hdu %s): no WCS! Can't continue\n", gridfile, gridhdu); exit(EXIT_FAILURE); } /* Read the output image size (from the reference image). Note that * 'dsize' will be freed while freeing 'widthinpix'). */ dsize=gal_fits_img_info_dim(gridfile, gridhdu, &ndim, NULL); /* Convert the 'dsize' to a 'gal_data_t' so the library can use it. */ wa.widthinpix=gal_data_alloc(dsize, GAL_TYPE_SIZE_T, 1, &ndim, NULL, 1, -1, 0, NULL, NULL, NULL); /* Do the warp, then convert the output to a 32-bit float (the default * float64 is too much for observational data and just wastes * storage!). But if you are warping mock data before adding noise * (where you do have float64 level precision), remove the type * conversion line. */ gal_warp_wcsalign(&wa); wa.output=gal_data_copy_to_new_type_free(wa.output, GAL_TYPE_FLOAT32); /* WARNING: make sure there is no file with same name as 'out.fits' * or the result will be appended to its final HDU. */ gal_fits_img_write(wa.output, outname, NULL, 0); /* Clean up. */ gal_data_free(wa.input); gal_data_free(wa.output); gal_data_free(wa.widthinpix); /* Give control back to the operating system. */ return EXIT_SUCCESS; } @end verbatim @end example @node Library demo - Warp to new grid, , Library demo - Warp to another image, Library demo programs @subsection Library demo - Warp to new grid Gnuastro's warp library (that you can access by including @file{gnuastro/warp.h}) allows you to resample an image from a grid to another entirely using the WCSLIB (while accounting for distortions if necessary; see @ref{Warp library}). The Warp library uses a pixel-mixing or area-based resampling approach which is fully described in @ref{Resampling}. The most generic uses cases for this library are already available in the @ref{Invoking astwarp} program. For a related demo (where the output grid and WCS are imported from another file), see @ref{Library demo - Warp to another image}. In the example below, we'll assume you have the SDSS image downloaded in @ref{Downloading and validating input data}. After downloading the image as described there, you will have @file{r.fits} in your current directory. We will therefore use @file{r.fits} as the input to the rest program here. The image is not aligned to the celestial coordinates, so we will align the pixel and WCS coordinates, but set the center of the pixel grid to be at (RA,Dec) of (202.4173735,47.3374525). We also give it a @code{TAN} projection with a pixel scale of 0.27 arcsecs, a defined center pixel. However, we'll let the Warp library measure the proper output image size that will contain the aligned image. To compile the demonstration program below, copy and paste the contents in a plain-text file (let's assume you named it @file{align-to-new.c}) and use @ref{BuildProgram} with this command: `@command{astbuildprog align-to-new.c}'. Please note that the demo program does not perform many sanity checks to avoid making it too complex and to highlight this particular feature in the library. For a robust method write programs with all the necessary sanity checks, see Gnuastro's Warp source code, see @ref{Program source}. To encourage good coding practices, this script contains a copyright notice with a place holder for your name and your email (as you customize it for your own purpose). Always keep a one-line description and copyright notice like this in all your scripts, such ``metadata'' is very important to accompany every source file you write. Of course, when you write the source file from scratch and just learn how to use a single function from this manual, only your name/year should appear. The existing name of the original author of this example program is only for cases where you copy-paste this whole file. @example @verbatim /* Warp an image to a new grid. * * In the example below, We will use 'r.fits' as the input. The image is * not aligned to the celestial coordinates, so we will align the pixel * and WCS coordinates. We also give it a TAN projection. However, we’ll * let the Warp library measure the proper output image size that will * contain the aligned image. * * Copyright (C) 2024 Your Name <your@@email.address> * Copyright (C) 2022-2024 Pedram Ashofteh-Ardakani <pedramardakani@pm.me> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <gnuastro/wcs.h> /* Contains gnuastro's fits.h */ #include <gnuastro/warp.h> /* Contains gnuastro's data.h */ #include <gnuastro/array.h> /* Contains gnuastro's type.h */ int main(void) { /* Input file's name and HDU. */ char *filename="r.fits", *hdu="0"; /* Output file name. */ char *outname="align-to-new.fits"; /* RA/Dec of the center of the central pixel of output. Please * change the center based on your input. */ double center[]={202.4173735, 47.3374525}; /* Coordinate and Projection algorithms of output. */ char *ctype[2]={"RA---TAN", "DEC--TAN"}; /* Output pixel scale (in units of degrees/pixel). */ double cdelt[]={0.27/3600, 0.27/3600}; /* For intermediate steps. */ size_t two=2; /* Initialize the 'wa' struct with empty values and NULL pointers. */ gal_warp_wcsalign_t wa=gal_warp_wcsalign_template(); /* Set the width (and height!) of the output in pixels (as a 1D and * 2 element 'gal_data_t'). When it is NULL, the library will * calculate the appropriate width to fully fit the input image * after alignment. */ wa.widthinpix=NULL; /* Set the number of threads to use. If the value is '0', the * library will estimate the maximum available threads at * run-time on the host operating system. */ wa.numthreads=0; /* Read the input image and its WCS. */ wa.input=gal_array_read_one_ch_to_type(filename, hdu, NULL, GAL_TYPE_FLOAT64, -1, 0, NULL); wa.input->wcs=gal_wcs_read(filename, hdu, 0, 0, 0, &wa.input->nwcs, NULL); /* Prepare the warp input structure. */ wa.coveredfrac=1; wa.edgesampling=0; wa.ctype=gal_data_alloc(ctype, GAL_TYPE_STRING, 1, &two, NULL, 1, -1, 0, NULL, NULL, NULL); wa.cdelt=gal_data_alloc(cdelt, GAL_TYPE_FLOAT64, 1, &two, NULL, 1, -1, 0, NULL, NULL, NULL); wa.center=gal_data_alloc(center, GAL_TYPE_FLOAT64, 1, &two, NULL, 1, -1, 0, NULL, NULL, NULL); /* Do the warp, then convert it to a 32-bit float. */ gal_warp_wcsalign(&wa); wa.output=gal_data_copy_to_new_type_free(wa.output, GAL_TYPE_FLOAT32); /* WARNING: make sure there is no file with same name as 'out.fits' * or the result will be appended to its final HDU. */ gal_fits_img_write(wa.output, outname, NULL, 0); /* Remove the pointers to arrays that we didn't allocate (and thus, * should not be freed by 'gal_data_free' below). */ wa.cdelt->array=wa.center->array=wa.ctype->array=NULL; /* Clean up. */ gal_data_free(wa.cdelt); gal_data_free(wa.ctype); gal_data_free(wa.input); gal_data_free(wa.output); gal_data_free(wa.center); gal_data_free(wa.widthinpix); /* Give control back to the operating system. */ return EXIT_SUCCESS; } @end verbatim @end example @node Developing, Other useful software, Library, Top @chapter Developing The basic idea of GNU Astronomy Utilities is for an interested astronomer to be able to easily understand the code of any of the programs or libraries, be able to modify the code if s/he feels there is an improvement and finally, to be able to add new programs or libraries for their own benefit, and the larger community if they are willing to share it. In short, we hope that at least from the software point of view, the ``obscurantist faith in the expert's special skill and in his personal knowledge and authority'' can be broken, see @ref{Science and its tools}. With this aim in mind, Gnuastro was designed to have a very basic, simple, and easy to understand architecture for any interested inquirer. This chapter starts with very general design choices, in particular @ref{Why C} and @ref{Program design philosophy}. It will then get a little more technical about the Gnuastro code and file/directory structure in @ref{Coding conventions} and @ref{Program source}. @ref{The TEMPLATE program} discusses a minimal (and working) template to help in creating new programs or easier learning of a program's internal structure. Some other general issues about documentation, building and debugging are then discussed. This chapter concludes with how you can learn about the development and get involved in @ref{Gnuastro project webpage}, @ref{Developing mailing lists} and @ref{Contributing to Gnuastro}. @menu * Why C:: Why Gnuastro is designed in C. * Program design philosophy:: General ideas behind the package structure. * Coding conventions:: Gnuastro coding conventions. * Program source:: Conventions for the code. * Documentation:: Documentation is an integral part of Gnuastro. * Building and debugging:: Build and possibly debug during development. * Test scripts:: Understanding the test scripts. * Bash programmable completion:: Auto-completions for better user experience. * Developer's checklist:: Checklist to finalize your changes. * Gnuastro project webpage:: Central hub for Gnuastro activities. * Developing mailing lists:: Stay up to date with Gnuastro's development. * Contributing to Gnuastro:: Share your changes with all users. @end menu @node Why C, Program design philosophy, Developing, Developing @section Why C programming language? @cindex C programming language @cindex C++ programming language @cindex Java programming language @cindex Python programming language Currently the programming languages that are commonly used in scientific applications are C++@footnote{@url{https://isocpp.org/}}, Java@footnote{@url{https://en.wikipedia.org/wiki/Java_(programming_language)}}; Python@footnote{@url{https://www.python.org/}}, and Julia@footnote{@url{https://julialang.org/}} (which is a newcomer but swiftly gaining ground). One of the main reasons behind choosing these is their high-level abstractions. However, GNU Astronomy Utilities is fully written in the C programming language@footnote{@url{https://en.wikipedia.org/wiki/C_(programming_language)}}. The reasons can be summarized with simplicity, portability and efficiency/speed. All four are very important in a scientific software and we will discuss them below. @cindex ANSI C @cindex ISO C90 @cindex Ritchie, Dennis @cindex Kernighan, Brian @cindex Stroustrup, Bjarne Simplicity can best be demonstrated in a comparison of the main books of C++ and C. The ``C programming language''@footnote{Brian Kernighan, Dennis Ritchie. @emph{The C programming language}. Prentice Hall, Inc., Second edition, 1988. It is also commonly known as K&R and is based on the ANSI C and ISO C90 standards.} book, written by the authors of C, is only 286 pages and covers a very good fraction of the language, it has also remained unchanged from 1988. C is the main programming language of nearly all operating systems and there is no plan of any significant update. On the other hand, the most recent ``C++ programming language''@footnote{Bjarne Stroustrup. @emph{The C++ programming language}. Addison-Wesley Professional; 4 edition, 2013.} book, also written by its author, has 1366 pages and its fourth edition came out in 2013! As discussed in @ref{Science and its tools}, it is very important for other scientists to be able to readily read the code of a program at their will with minimum requirements. @cindex Object oriented programming In C++ or Java, inheritance in the object oriented programming paradigm and their internal functions make the code very easy to write for a programmer who is deeply invested in those objects and understands all their relations well. But it simultaneously makes reading the program for a first time reader (a curious scientist who wants to know only how a small step was done) extremely hard. Before understanding the methods, the scientist has to invest a lot of time and energy in understanding those objects and their relations. But in C, everything is done with basic language types for example @code{int}s or @code{float}s and their pointers to define arrays. So when an outside reader is only interested in one part of the program, that part is all they have to understand. Recently it is also becoming common to write scientific software in Python, or a combination of it with C or C++. Python is a high level scripting language which does not need compilation. It is very useful when you want to do something on the go and do not want to be halted by the troubles of compiling, linking, memory checking, etc. When the datasets are small and the job is temporary, this ability of Python is great and is highly encouraged. A very good example might be plotting, in which Python is undoubtedly one of the best. But as the data sets increase in size and the processing becomes more complicated, the speed of Python scripts significantly decrease. So when the program does not change too often and is widely used in a large community, mostly on large data sets (like astronomical images), using Python will waste a lot of valuable research-hours. It is possible to wrap C or C++ functions with Python to fix the speed issue. But this creates further complexity, because the interested scientist has to master two programming languages and their connection (which is not trivial). Like C++, Python is object oriented, so as explained above, it needs a high level of experience with that particular program to reasonably understand its inner workings. To make things worse, since it is mainly for on-the-go programming@footnote{Note that Python is good for fast programming, not fast programs.}, it can undergo significant changes. One recent example is how Python 2.x and Python 3.x are not compatible. Lots of research teams that invested heavily in Python 2.x cannot benefit from Python 3.x or future versions any more. Some converters are available, but since they are automatic, lots of complications might arise in the conversion@footnote{For example see Jenness @url{https://arxiv.org/abs/1712.00461,2017}, which describes how LSST is managing the transition.}. If a research project begins using Python 3.x today, there is no telling how compatible their investments will be when Python 4.x or 5.x will come out. @cindex JVM: Java virtual machine @cindex Java Virtual Machine (JVM) Java is also fully object-oriented, but uses a different paradigm: its compilation generates a hardware-independent @emph{bytecode}, and a @emph{Java Virtual Machine} (JVM) is required for the actual execution of this bytecode on a computer. Java also evolved with time, and tried to remain backward compatible, but inevitably this evolution required discontinuities and replacements of a few Java components which were first declared as becoming @emph{deprecated}, and removed from later versions. @cindex Reproducibility This stems from the core principles of high-level languages like Python or Java: that they evolve significantly on the scale of roughly 5 to 10 years. They are therefore useful when you want to solve a short-term problem and you are ready to pay the high cost of keeping your software up to date with all the changes in the language. This is fine for private companies, but usually too expensive for scientific projects that have limited funding for a fixed period. As a result, the reproducibility of the result (ability to regenerate the result in the future, which is a core principal of any scientific result) and reusability of all the investments that went into the science software will be lost to future generations! Rebuilding all the dependencies of a software in an obsolete language is not easy, or even not possible. Future-proof code (as long as current operating systems will be used) is therefore written in C. The portability of C is best demonstrated by the fact that C++, Java and Python are part of the C-family of programming languages which also include Julia, Perl, and many other languages. C libraries can be immediately included in C++, and it is easy to write wrappers for them in all C-family programming languages. This will allow other scientists to benefit from C libraries using any C-family language that they prefer. As a result, Gnuastro's library is already usable in C and C++, and wrappers will be@footnote{@url{http://savannah.gnu.org/task/?13786}} added for higher-level languages like Python, Julia and Java. @cindex Low level programming @cindex Programming, low level The final reason was speed. This is another very important aspect of C which is not independent of simplicity (first reason discussed above). The abstractions provided by the higher-level languages (which also makes learning them harder for a newcomer) come at the cost of speed. Since C is a low-level language@footnote{Low-level languages are those that directly operate the hardware like assembly languages. So C is actually a high-level language, but it can be considered one of the lowest-level languages among all high-level languages.} (closer to the hardware), it has a direct access to the CPU@footnote{for instance the @emph{long double} numbers with at least 64-bit mantissa are not accessible in Python or Java.}, is generally considered as being faster in its execution, and is much less complex for both the human reader @emph{and} the computer. The benefits of simplicity for a human were discussed above. Simplicity for the computer translates into more efficient (faster) programs. This creates a much closer relation between the scientist/programmer (or their program) and the actual data and processing. The GNU coding standards@footnote{@url{http://www.gnu.org/prep/standards/}} also encourage the use of C over all other languages when generality of usage and ``high speed'' is desired. @node Program design philosophy, Coding conventions, Why C, Developing @section Program design philosophy @cindex Gnulib The core processing functions of each program (and all libraries) are written mostly with the basic ISO C90 standard. We do make lots of use of the GNU additions to the C language in the GNU C library@footnote{Gnuastro uses many GNU additions to the C library. However, thanks to the GNU Portability library (Gnulib) which is included in the Gnuastro tarball, users of non-GNU/Linux operating systems can also benefit from all these features when using Gnuastro.}, but these functions are mainly used in the user interface functions (reading your inputs and preparing them prior to or after the analysis). The actual algorithms, which most scientists would be more interested in, are much more closer to ISO C90. For this reason, program source files that deal with user interface issues and those doing the actual processing are clearly separated, see @ref{Program source}. If anything particular to the GNU C library is used in the processing functions, it is explained in the comments in between the code. @cindex GNU Coreutils All the Gnuastro programs provide very low level and modular operations (modeled on GNU Coreutils). Almost all the basic command-line programs like @command{ls}, @command{cp} or @command{rm} on GNU/Linux operating systems are part of GNU Coreutils. This enables you to use shell scripting languages (for example, GNU Bash) to operate on a large number of files or do very complex things through the creative combinations of these tools that the authors had never dreamed of. We have put a few simple examples in @ref{Tutorials}. @cindex @LaTeX{} @cindex GNU Bash @cindex Python Matplotlib @cindex Matplotlib, Python @cindex PGFplots in @TeX{} or @LaTeX{} For example, all the analysis output can be saved as ASCII tables which can be fed into your favorite plotting program to inspect visually. Python's Matplotlib is very useful for fast plotting of the tables to immediately check your results. If you want to include the plots in a document, you can use the PGFplots package within @LaTeX{}, no attempt is made to include such operations in Gnuastro. In short, Bash can act as a glue to connect the inputs and outputs of all these various Gnuastro programs (and other programs) in any fashion. Of course, Gnuastro's programs are just front-ends to the main workhorse (@ref{Gnuastro library}), allowing a user to create their own programs (for example, with @ref{BuildProgram}). So once the functions within programs become mature enough, they will be moved within the libraries for even more general applications. The advantage of this architecture is that the programs become small and transparent: the starting and finishing point of every program is clearly demarcated. For nearly all operations on a modern computer (fast file input-output) with a modest level of complexity, the read/write speed is insignificant compared to the actual processing a program does. Therefore the complexity which arises from sharing memory in a large application is simply not worth the speed gain. Gnuastro's design is heavily influenced from Eric Raymond's ``The Art of Unix Programming''@footnote{Eric S. Raymond, 2004, @emph{The Art of Unix Programming}, Addison-Wesley Professional Computing Series.} which beautifully describes the design philosophy and practice which lead to the success of Unix-based operating systems@footnote{KISS principle: Keep It Simple, Stupid!}. @node Coding conventions, Program source, Program design philosophy, Developing @section Coding conventions @cindex GNU coding standards @cindex Gnuastro coding convention In Gnuastro, we try our best to follow the GNU coding standards. Added to those, Gnuastro defines the following conventions. It is very important for readability that the whole package follows the same convention. @itemize @item The code must be easy to read by eye. So when the order of several lines within a function does not matter (for example, when defining variables at the start of a function). You should put the lines in the order of increasing length and group the variables with similar types such that this half-pyramid of declarations becomes most visible. If the reader is interested, a simple search will show them the variable they are interested in. However, this visual aid greatly helps in general inspections of the code and help the reader get a grip of the function's processing. @item A function that cannot be fully displayed (vertically) in your monitor is probably too long and may be more useful if it is broken up into multiple functions. 40 lines is usually a good reference. When the start and end of a function are clearly visible in one glance, the function is much more easier to understand. This is most important for low-level functions (which usually define a lot of variables). Low-level functions do most of the processing, they will also be the most interesting part of a program for an inquiring astronomer. This convention is less important for higher level functions that do not define too many variables and whose only purpose is to run the lower-level functions in a specific order and with checks. @cindex Optimization flag @cindex GCC: GNU Compiler Collection @cindex GNU Compiler Collection (GCC) In general you can be very liberal in breaking up the functions into smaller parts, the GNU Compiler Collection (GCC) will automatically compile the functions as inline functions when the optimizations are turned on. So you do not have to worry about decreasing the speed. By default Gnuastro will compile with the @option{-O3} optimization flag. @cindex Buffers (Emacs) @cindex Emacs buffers @item All Gnuastro hand-written text files (C source code, Texinfo documentation source, and version control commit messages) should normally be no more than @strong{75} characters per line. Monitors today are certainly much wider, but with this limit, reading the functions becomes much more easier. Also for the developers, it allows multiple files (or multiple views of one file) to be displayed beside each other on wide monitors. Emacs's buffers are excellent for this capability, setting a buffer width of 80 with `@key{C-u 80 C-x 3}' will allow you to view and work on several files or different parts of one file using the wide monitors common today. Emacs buffers can also be used as a shell prompt and compile the program (with @key{M-x compile}), and 80 characters is the default width in most terminal emulators. If you use Emacs, Gnuastro sets the 75 character @command{fill-column} variable automatically for you, see cartouche below. For long comments you can use press @key{Alt-q} in Emacs to separate them into separate lines automatically. For long literal strings, you can use the fact that in C, two strings immediately after each other are concatenated, for example, @code{"The first part, " "and the second part."}. Note the space character in the end of the first part. Since they are now separated, you can easily break a long literal string into several lines and adhere to the maximum 75 character line length policy. @cindex Header file @item The headers required by each source file (ending with @file{.c}) should be defined inside of it. All the headers a complete program needs should @emph{not} be stacked in another header to include in all source files (for example @file{main.h}). Although most `professional' programmers choose this single header method, Gnuastro is primarily written for professional/inquisitive astronomers (who are generally amateur programmers). The list of header files included provides valuable general information and helps the reader. @file{main.h} may only include the header file(s) that define types that the main program structure needs, see @file{main.h} in @ref{Program source}. Those particular header files that are included in @file{main.h} can of course be ignored (not included) in separate source files. @item The headers should be classified (by an empty line) into separate groups: @enumerate @cindex GNU C library @cindex Gnulib: GNU Portability Library @cindex GNU Portability Library (Gnulib) @item @code{#include <config.h>}: This must be the first code line (not commented or blank) in each source file @emph{within Gnuastro}. It sets macros that the GNU Portability Library (Gnulib) will use for a unified environment (GNU C Library), even when the user is building on a system that does not use the GNU C library. @item The C library header files, for example, @file{stdio.h}, @file{stdlib.h}, or @file{math.h}. @item Installed library header files, including Gnuastro's installed headers (for example @file{cfitsio.h} or @file{gsl/gsl_rng.h}, or @file{gnuastro/fits.h}). @item Gnuastro's internal headers (that are not installed), for example @file{gnuastro-internal/options.h}. @item For programs, the @file{main.h} file (which is needed by the next group of headers). @item That particular program's header files, for example, @file{mkprof.h}, or @file{noisechisel.h}. @end enumerate @noindent As much as order does not matter when you include the header of each group, sort them by length, as described above. @item All function names, variables, etc., should be in lower case. Macros and constant global @code{enum}s should be in upper case. @item For the naming of exported header files, functions, variables, macros, and library functions, we adopt similar conventions to those used by the GNU Scientific Library (GSL)@footnote{@url{https://www.gnu.org/software/gsl/design/gsl-design.html#SEC15}}. In particular, in order to avoid clashes with the names of functions and variables coming from other libraries the name-space `@code{gal_}' is prefixed to them. GAL stands for @emph{G}NU @emph{A}stronomy @emph{L}ibrary. @item All installed header files should be in the @file{lib/gnuastro} directory (under the top Gnuastro source directory). After installation, they will be put in the @file{$prefix/include/gnuastro} directory (see @ref{Installation directory} for @file{$prefix}). Therefore with this convention Gnuastro's headers can be included in internal (to Gnuastro) and external (a library user) source files with the same line @example # include <gnuastro/headername.h> @end example Note that the GSL convention for header file names is @file{gsl_specialname.h}, so your include directive for a GSL header must be something like @code{#include <gsl/gsl_specialname.h>}. Gnuastro does not follow this GSL guideline because of the repeated @code{gsl} in the include directive. It can be confusing and cause bugs for beginners. All Gnuastro (and GSL) headers must be located within a unique directory and will not be mixed with other headers. Therefore the `@file{gsl_}' prefix to the header file names is redundant@footnote{For GSL, this prefix has an internal technical application: GSL's architecture mixes installed and not-installed headers in the same directory. This prefix is used to identify their installation status. Therefore this filename prefix in GSL a technical internal issue (for developers, not users).}. @item @cindex GNU coding standards All installed functions and variables should also include the base-name of the file in which they are defined as prefix, using underscores to separate words@footnote{The convention to use underscores to separate words, called ``snake case'' (or ``snake_case''). This is also recommended by the GNU coding standards.}. The same applies to exported macros, but in upper case. For example, in Gnuastro's top source directory, the prototype of function @code{gal_box_border_from_center} is in @file{lib/gnuastro/box.h}, and the macro @code{GAL_POLYGON_MAX_CORNERS} is defined in @code{lib/gnuastro/polygon.h}. This is necessary to give any user (who is not familiar with the library structure) the ability to follow the code. This convention does make the function names longer (a little harder to write), but the extra documentation it provides plays an important role in Gnuastro and is worth the cost. @item @cindex GNU Emacs @cindex Trailing space There should be no trailing white space in a line. To do this automatically every time you save a file in Emacs, add the following line to your @file{~/.emacs} file. @example (add-hook 'before-save-hook 'delete-trailing-whitespace) @end example @item @cindex Tabs are evil There should be no tabs in the indentation@footnote{If you use Emacs, Gnuastro's @file{.dir-locals.el} file will automatically never use tabs for indentation. To make this a default in all your Emacs sessions, you can add the following line to your @file{~/.emacs} file: @command{(setq-default indent-tabs-mode nil)}}. @item @cindex GNU Emacs @cindex Function groups @cindex Groups of similar functions Individual, contextually similar, functions in a source file are separated by 5 blank lines to be easily seen to be related in a group when parsing the source code by eye. In Emacs you can use @key{CTRL-u 5 CTRL-o}. @item One group of contextually similar functions in a source file is separated from another with 20 blank lines. In Emacs you can use @key{CTRL-u 20 CTRL-o}. Each group of functions has short descriptive title of the functions in that group. This title is surrounded by asterisks (@key{*}) to make it clearly distinguishable. Such contextual grouping and clear title are very important for easily understanding the code. @item Always read the comments before the patch of code under it. Similarly, try to add as many comments as you can regarding every patch of code. Effectively, we want someone to get a good feeling of the steps, without having to read the C code and only by reading the comments. This follows similar principles as @url{https://en.wikipedia.org/wiki/Literate_programming, Literate programming}. @end itemize The last two conventions are not common and might benefit from a short discussion here. With a good experience in advanced text editor operations, the last two are redundant for a professional developer. However, recall that Gnuastro aspires to be friendly to unfamiliar, and inexperienced (in programming) eyes. In other words, as discussed in @ref{Science and its tools}, we want the code to appear welcoming to someone who is completely new to coding (and text editors) and only has a scientific curiosity. Newcomers to coding and development, who are curious enough to venture into the code, will probably not be using (or have any knowledge of) advanced text editors. They will see the raw code in the web page or on a simple text editor (like Gedit) as plain text. Trying to learn and understand a file with dense functions that are all spaced with one or two blank lines can be very taunting for a newcomer. But when they scroll through the file and see clear titles and meaningful spaces for similar functions, we are helping them find and focus on the part they are most interested in sooner and easier. @cartouche @cindex GNU Emacs @noindent @strong{GNU Emacs, the recommended text editor:} GNU Emacs is an extensible and easily customizable text editor which many programmers rely on for developing due to its countless features. Among them, it allows specification of certain settings that are applied to a single file or to all files in a directory and its sub-directories. In order to harmonize code coming from different contributors, Gnuastro comes with a @file{.dir-locals.el} file which automatically configures Emacs to satisfy most of the coding conventions above when you are using it within Gnuastro's directories. Thus, Emacs users can readily start hacking into Gnuastro. If you are new to developing, we strongly recommend this editor. Emacs was the first project released by GNU and is still one of its flagship projects. Some resources can be found at: @table @asis @item Official manual At @url{https://www.gnu.org/software/emacs/manual/emacs.html}. This is a great and very complete manual which is being improved for over 30 years and is the best starting point to learn it. It just requires a little patience and practice, but rest assured that you will be rewarded. If you install Emacs, you also have access to this manual on the command-line with the following command (see @ref{Info}). @example $ info emacs @end example @item A guided tour of emacs At @url{https://www.gnu.org/software/emacs/tour/}. A short visual tour of Emacs, officially maintained by the Emacs developers. @item Unofficial mini-manual At @url{https://tuhdo.github.io/emacs-tutor.html}. A shorter manual which contains nice animated images of using Emacs. @end table @end cartouche @node Program source, Documentation, Coding conventions, Developing @section Program source @cindex Source file navigation @cindex Navigating source files @cindex Program structure convention @cindex Convention for program source @cindex Gnuastro program structure convention Besides the fact that all the programs share some functions that were explained in @ref{Library}, everything else about each program is completely independent. Recall that Gnuastro is written for an active astronomer/scientist (not a passive one who just uses a software). It must thus be easily navigable. Hence there are fixed source files (that contain fixed operations) that must be present in all programs, these are discussed fully in @ref{Mandatory source code files}. To easily understand the explanations in this section you can use @ref{The TEMPLATE program} which contains the bare minimum code for one working program. This template can also be used to easily add new utilities: just copy and paste the directory and change @code{TEMPLATE} with your program's name. @menu * Mandatory source code files:: Description of files common to all programs. * The TEMPLATE program:: Template for easy creation of a new program. @end menu @node Mandatory source code files, The TEMPLATE program, Program source, Program source @subsection Mandatory source code files Some programs might need lots of source files and if there is no fixed convention, navigating them can become very hard for a new inquirer into the code. The following source files exist in every program's source directory (which is located in @file{bin/progname}). For small programs, these files are enough. Larger programs will need more files and developers are encouraged to define any number of new files. It is just important that the following list of files exist and do what is described here. When creating other source files, please choose filenames that are a complete single word: do not abbreviate (abbreviations are cryptic). For a minimal program containing all these files, see @ref{The TEMPLATE program}. @vtable @file @item main.c @cindex @code{main} function Each executable has a @code{main} function, which is located in @file{main.c}. Therefore this file is the starting point when reading any program's source code. No actual processing functions must be defined in this file, the function(s) in this file are only meant to connect the most high level steps of each program. Generally, @code{main} will first call the top user interface function to read user input and make all the preparations. Then it will pass control to the top processing function for that program. The functions to do both these jobs must be defined in other source files. @item main.h @cindex Top root structure @cindex @code{prognameparams} @cindex Root parameter structure @cindex Main parameters C structure All the major parameters which will be used in the program must be stored in a structure which is defined in @file{main.h}. The name of this structure is usually @code{prognameparams}, for example, @code{cropparams} or @code{noisechiselparams}. So @code{#include "main.h"} will be a staple in all the source codes of the program. It is also regularly the first (and only) argument of many of the program's functions which greatly helps in readability. Keeping all the major parameters of a program in this structure has the major benefit that most functions will only need one argument: a pointer to this structure. This will significantly facilitate the job of the programmer, the inquirer and the computer. All the programs in Gnuastro are designed to be low-level, small and independent parts, so this structure should not get too large. @cindex @code{p} The main root structure of all programs contains at least one instance of the @code{gal_options_common_params} structure. This structure will keep the values to all common options in Gnuastro's programs (see @ref{Common options}). This top root structure is conveniently called @code{p} (short for parameters) by all the functions in the programs and the common options parameters within it are called @code{cp}. With this convention any reader can immediately understand where to look for the definition of one parameter. For example, you know that @code{p->cp->output} is in the common parameters while @code{p->threshold} is in the program's parameters. @cindex Structure de-reference operator @cindex Operator, structure de-reference With this basic root structure, the source code of functions can potentially become full of structure de-reference operators (@command{->}) which can make the code very unreadable. In order to avoid this, whenever a structure element is used more than a couple of times in a function, a variable of the same type and with the same name (so it can be searched) as the desired structure element should be defined with the value of the root structure inside of it in definition time. Here is an example: @example char *hdu=p->cp.hdu; float threshold=p->threshold; @end example @item args.h @cindex GNU C library @cindex Argp argument parser The options particular to each program are defined in this file. Each option is defined by a block of parameters in @code{program_options}. These blocks are all you should modify in this file, leave the bottom group of definitions untouched. These are fed directly into the GNU C library's Argp facilities and it is recommended to have a look at that for better understand what is going on, although this is not required here. Each element of the block defining an option is described under @code{argp_option} in @code{bootstrapped/lib/argp.h} (from Gnuastro's top source file). Note that the last few elements of this structure are Gnuastro additions (not documented in the standard Argp manual). The values to these last elements are defined in @code{lib/gnuastro/type.h} and @code{lib/gnuastro-internal/options.h} (from Gnuastro's top source directory). @item ui.h Besides declaring the exported functions of @code{ui.c}, this header also keeps the ``key''s to every program-specific option. The first class of keys for the options that have a short-option version (single letter, see @ref{Options}). The character that is defined here is the option's short option name. The list of available alphabet characters can be seen in the comments. Recall that some common options also take some characters, for those, see @file{lib/gnuastro-internal/options.h}. The second group of options are those that do not have a short option alternative. Only the first in this group needs a value (@code{1000}), the rest will be given a value by C's @code{enum} definition, so the actual value is irrelevant and must never be used, always use the name. @item ui.c @cindex User interface functions @cindex Functions for user interface Everything related to reading the user input arguments and options, checking the configuration files and checking the consistency of the input parameters before the actual processing is run should be done in this file. Since most functions are the same, with only the internal checks and structure parameters differing. We recommend going through the @code{ui.c} of @ref{The TEMPLATE program}, or several other programs for a better understanding. The most high-level function in @file{ui.c} is named @code{ui_read_check_inputs_setup}. It accepts the raw command-line inputs and a pointer to the root structure for that program (see the explanation for @file{main.h}). This is the function that @code{main} calls. The basic idea of the functions in this file is that the processing functions should need a minimum number of such checks. With this convention an inquirer who only wants to understand only one part (mostly the processing part and not user input details and sanity checks) of the code can easily do so in the later files. It also makes all the errors related to input appear before the processing begins which is more convenient for the user. @item progname.c, progname.h @cindex Top processing source file The high-level processing functions in each program are in a file named @file{progname.c}, for example, @file{crop.c} or @file{noisechisel.c}. The function within these files which @code{main} calls is also named after the program, for example: @example void crop(struct cropparams *p) @end example @noindent or @example void noisechisel(struct noisechiselparams *p) @end example @noindent In this manner, if an inquirer is interested in the processing steps, they can immediately come and check this file for the first processing step without having to go through @file{main.c} and @file{ui.c} first. In most situations, any failure in any step of the programs will result in an informative error message and an immediate abort in the program. So there is usually no need for return values. Under more complicated situations where a return value might be necessary, @code{void} will be replaced with an @code{int} in the examples above. This value must be directly returned by @code{main}, so it has to be an @code{int}. @item authors-cite.h @cindex Citation information This header file keeps the global variable for the program authors and its BibTeX record for citation. They are used in the outputs of the common options @option{--version} and @option{--cite}, see @ref{Operating mode options}. @item progname-complete.bash @cindex GNU Bash @cindex Bash auto-complete @cindex Completion in the shell @cindex Bash programmable completion @cindex Autocomplete (in the shell/Bash) This shell script is used for implementing auto-completion features when running Gnuastro's programs within GNU Bash. For more on the concept of shell auto-completion and how it is managed in Gnuastro, see @ref{Bash programmable completion}. These files assume a set of common shell functions that have the prefix @code{_gnuastro_autocomplete_} in their name and are defined in @file{bin/complete.bash.in} (of the source directory, and under version control) and @file{bin/complete.bash.built} (built during the building of Gnuastro in the build directory). During Gnuastro's build, all these Bash completion files are merged into one file that is installed and the user can @code{source} them into their Bash startup file, for example, see @ref{Quick start}. @end vtable @node The TEMPLATE program, , Mandatory source code files, Program source @subsection The TEMPLATE program The extra creativity offered by libraries comes at a cost: you have to actually write your @code{main} function and get your hands dirty in managing user inputs: are all the necessary parameters given a value? is the input in the correct format? do the options and the inputs correspond? and many other similar checks. So when an operation has well-defined inputs and outputs and is commonly needed, it is much more worthwhile to simply do use all the great features that Gnuastro has already defined for such operations. To make it easier to learn/apply the internal program infrastructure discussed in @ref{Mandatory source code files}, in the @ref{Version controlled source}, Gnuastro ships with a template program. This template program is not available in the Gnuastro tarball so it does not confuse people using the tarball. The @file{bin/TEMPLATE} directory in Gnuastro's Git repository contains the bare minimum files necessary to define a new program and all the basic/necessary files/functions are pre-defined there. Below you can see a list of initial steps to take for customizing this template. We just assume that after cloning Gnuastro's history, you have already bootstrapped Gnuastro, if not, please see @ref{Bootstrapping}. @enumerate @item Select a name for your new program (for example, @file{myprog}). @item Copy the @file{TEMPLATE} directory to a directory with your program's name: @example $ cp -R bin/TEMPLATE bin/myprog @end example @item As with all source files in Gnuastro, all the files in template also have a copyright notice at their top. Open all the files and correct these notices: 1) The first line contains a single-line description of the program. 2) In the second line only the name or your program needs to be fixed and 3) Add your name and email as a ``Contributing author''. As your program grows, you will need to add new files, do not forget to add this notice in those new files too, just put your name and email under ``Original author'' and correct the copyright years. @item Open @file{configure.ac} in the top Gnuastro source. This file manages the operations that are done when a user runs @file{./configure}. Going down the file, you will notice repetitive parts for each program. You will notice that the program names follow an alphabetic ordering in each part. There is also a commented line/patch for the @file{TEMPLATE} program in each part. You can copy one line/patch (from the program above or below your desired name for example) and paste it in the proper place for your new program. Then correct the names of the copied program to your new program name. There are multiple places where this has to be done, so be patient and go down to the bottom of the file. Ultimately add @file{bin/myprog/Makefile} to @code{AC_CONFIG_FILES}, only here the ordering depends on the length of the name (it is not alphabetical). @item Open @file{Makefile.am} in the top Gnuastro source. Similar to the previous step, add your new program similar to all the other programs. Here there are only two places: 1) at the top where we define the conditionals (three lines per program), and 2) immediately under it as part of the value for @code{SUBDIRS}. @item Open @file{doc/Makefile.am} and similar to @file{Makefile.am} (above), add the proper entries for the man page of your program to be created (here, the variable that keeps all the man pages to be created is @code{dist_man_MANS}). Then scroll down and add a rule to build the man page similar to the other existing rules (in alphabetical order). Do not forget to add a short one-line description here, it will be displayed on top of the man page. @item Change @code{TEMPLATE.c} and @code{TEMPLATE.h} to @code{myprog.c} and @code{myprog.h} in the file names: @example $ cd bin/myprog $ mv TEMPLATE.c myprog.c $ mv TEMPLATE.h myprog.h @end example @item @cindex GNU Grep Correct all occurrences of @code{TEMPLATE} in the input files to @code{myprog} (in short or long format). You can get a list of all occurrences with the following command. If you use Emacs, it will be able to parse the Grep output and open the proper file and line automatically. So this step can be very easy. @example $ grep --color -nHi -e template * @end example @item Run the following commands to rebuild the configuration and build system, and then to configure and build Gnuastro (which now includes your exciting new program). @example $ autoreconf -f $ ./configure $ make @end example @item You are done! You can now start customizing your new program to do your special processing. When it is complete, just do not forget to add checks also, so it can be tested at least once on a user's system with @command{make check}, see @ref{Test scripts}. Finally, if you would like to share it with all Gnuastro users, inform us so we merge it into Gnuastro's main history. @end enumerate @node Documentation, Building and debugging, Program source, Developing @section Documentation Documentation (this book) is an integral part of Gnuastro (see @ref{Science and its tools}). Documentation is not considered a separate project and must be written by its developers. Users can make edits/corrections, but the initial writing must be by the developer. So, no change is considered valid for implementation unless the respective parts of the book have also been updated. The following procedure can be a good suggestion to take when you have a new idea and are about to start implementing it. The steps below are not a requirement, the important thing is that when you send your work to be included in Gnuastro, the book and the code have to both be fully up-to-date and compatible, with the purpose of the update very clearly explained. You can follow any strategy you like, the following strategy was what we have found to be most useful until now. @enumerate @item Edit the book and fully explain your desired change, such that your idea is completely embedded in the general context of the book with no sense of discontinuity for a first time reader. This will allow you to plan the idea much more accurately and in the general context of Gnuastro (a particular program or library). Later on, when you are coding, this general context will significantly help you as a road-map. A very important part of this process is the program/library introduction. These first few paragraphs explain the purposes of the program or library and are fundamental to Gnuastro. Before actually starting to code, explain your idea's purpose thoroughly in the start of the respective/new section you wish to work on. While actually writing its purpose for a new reader, you will probably get some valuable and interesting ideas that you had not thought of before. This has occurred several times during the creation of Gnuastro. If an introduction already exists, embed or blend your idea's purpose with the existing introduction. We emphasize that doing this is equally useful for you (as the programmer) as it is useful for the user (reader). Recall that the purpose of a program is very important, see @ref{Program design philosophy}. As you have already noticed for every program/library, it is very important that the basics of the science and technique be explained in separate subsections prior to the `Invoking Programname' subsection. If you are writing a new program or your addition to an existing program involves a new concept, also include such subsections and explain the concepts so a person completely unfamiliar with the concepts can get a general initial understanding. You do not have to go deep into the details, just enough to get an interested person (with absolutely no background) started with some good pointers/links to where they can continue studying if they are more interested. If you feel you cannot do that, then you have probably not understood the concept yourself. If you feel you do not have the time, then think about yourself as the reader in one year: you will forget almost all the details, so now that you have done all the theoretical preparations, add a few more hours and document it. Therefore in one year, when you find a bug or want to add a new feature, you do not have to prepare as much. Have in mind that your only limitation in length is the fatigue of the reader after reading a long text, nothing else. So as long as you keep it relevant/interesting for the reader, there is no page number limit/cost. It might also help if you start discussing the usage of your idea in the `Invoking ProgramName' subsection (explaining the options and arguments you have in mind) at this stage too. Actually starting to write it here will really help you later when you are coding. @item After you have finished adding your initial intended plan to the book, then start coding your change or new program within the Gnuastro source files. While you are coding, you will notice that somethings should be different from what you wrote in the book (your initial plan). So correct them as you are actually coding, but do not worry too much about missing a few things (see the next step). @item After your work has been fully implemented, read the section documentation from the start and check if you did not miss any change in the coding. Also, ensure that the context is fairly continuous for a first-time reader (who has not seen the book or has known Gnuastro before you made your change). @item If the change is notable, also update the @file{NEWS} file. @end enumerate @node Building and debugging, Test scripts, Documentation, Developing @section Building and debugging @cindex GNU Libtool @cindex GNU Autoconf @cindex GNU Automake @cindex GNU build system To build the various programs and libraries in Gnuastro, the GNU build system is used which defines the steps in @ref{Quick start}. It consists of GNU Autoconf, GNU Automake and GNU Libtool which are collectively known as GNU Autotools. They provide a very portable system to check the hosts environment and compile Gnuastro based on that. They also make installing everything in their standard places very easy for the programmer. Most of the small caps files that you see in the top source directory of the tarball are created by these three tools (see @ref{Version controlled source}). To facilitate the building and testing of your work during development, Gnuastro comes with two useful scripts: @table @file @cindex @file{developer-build} @item developer-build This is more fully described in @ref{Configure and build in RAM}. During development, you will usually run this command only once (at the start of your work). @cindex @file{tests/during-dev.sh} @item tests/during-dev.sh This script is designed to be run each time you make a change and want to test your work (with some possible input and output). The script itself is heavily commented and thoroughly describes the best way to use it, so we will not repeat it here. For a usage example, see @ref{Forking tutorial}. As a short summary: you specify the build directory, an output directory (for the built program to be run in, and also contains the inputs), the program's short name and the arguments and options that it should be run with. This script will then build Gnuastro, go to the output directory and run the built executable from there. One option for the output directory might be your desktop, so you can easily see the output files and delete them when you are finished. The main purpose of these scripts is to keep your source directory clean and facilitate your development. @end table @cindex Debugging @cindex Optimization By default all the programs are compiled with optimization flags for increased speed. A side effect of optimization is that valuable debugging information is lost. All the libraries are also linked as shared libraries by default. Shared libraries further complicate the debugging process and significantly slow down the compilation (the @command{make} command). So during development it is recommended to configure Gnuastro as follows: @example $ ./configure --enable-debug @end example @noindent In @file{developer-build} you can ask for this behavior through the @option{--debug} option, see @ref{Separate build and source directories}. In order to understand the building process, you can go through the Autoconf, Automake and Libtool manuals, like all GNU manuals they provide both a great tutorial and technical documentation. The ``A small Hello World'' section in Automake's manual (in chapter 2) can be a good starting guide after you have read the separate introductions. @node Test scripts, Bash programmable completion, Building and debugging, Developing @section Test scripts @cindex Test scripts @cindex Gnuastro test scripts As explained in @ref{Tests}, for every program some simple tests are written to check the various independent features of the program. All the tests are placed in the @file{tests/} directory. The @file{tests/prepconf.sh} script is the first `test' that will be run. It will copy all the configuration files from the various directories to a @file{tests/.gnuastro} directory (which it will make) so the various tests can set the default values. This script will also make sure the programs do not go searching for user and system wide configuration files to avoid the mixing of values with different Gnuastro version on the system. For each program, the tests are placed inside directories with the program name. Each test is written as a shell script. The last line of this script is the test which runs the program with certain parameters. The return value of this script determines the fate of the test, see the ``Support for test suites'' chapter of the Automake manual for a very nice and complete explanation. In every script, two variables are defined at first: @code{prog} and @code{execname}. The first specifies the program name and the second the location of the executable. @cindex Build tree @cindex Source tree @cindex @file{developer-build} The most important thing to have in mind about all the test scripts is that they are run from inside the @file{tests/} directory in the ``build tree''. Which can be different from the directory they are stored in (known as the ``source tree'')@footnote{The @file{developer-build} script also uses this feature to keep the source and build directories separate (see @ref{Separate build and source directories}).}. This distinction is made by GNU Autoconf and Automake (which configure, build and install Gnuastro) so that you can install the program even if you do not have write access to the directory keeping the source files. See the ``Parallel build trees (a.k.a VPATH builds)'' in the Automake manual for a nice explanation. Because of this, any necessary inputs that are distributed in the tarball@footnote{In many cases, the inputs of a test are outputs of previous tests, this does not apply to this class of inputs. Because all outputs of previous tests are in the ``build tree''.}, for example, the catalogs necessary for checks in MakeProfiles and Crop, must be identified with the @command{$topsrc} prefix instead of @command{../} (for the top source directory that is unpacked). This @command{$topsrc} variable points to the source tree where the script can find the source data (it is defined in @file{tests/Makefile.am}). The executables and other test products were built in the build tree (where they are being run), so they do not need to be prefixed with that variable. This is also true for images or files that were produced by other tests. @node Bash programmable completion, Developer's checklist, Test scripts, Developing @section Bash programmable completion @cartouche @strong{Under development:} While work on TAB completion is ongoing, it is not yet fully ready, please see the notice at the start of @ref{Shell TAB completion}. @end cartouche @cindex Bash auto-complete @cindex Completion in the shell @cindex Bash programmable completion @cindex Autocomplete (in the shell/Bash) Gnuastro provides Programmable completion facilities in Bash. This greatly helps users reach their desired result with minimal keystrokes, and helps them spend less time on figuring out the option names and values their acceptable values. Gnuastro's completion script not only completes the half-written commands, but also prints suggestions based on previous arguments. Imagine a scenario where we need to download three columns containing the right ascension, declination, and parallax from the GAIA DR3 dataset. We have to make sure how these columns are abbreviated or spelled. So we can call the command below, and store the column names in a file such as @file{gaia-dr3-columns.txt}. @example $ astquery gaia --information > gaia-dr3-columns.txt @end example @noindent Then we need to memorize or copy the column names of interest, and specify an output fits file name such as @file{gaia.fits}: @example $ astquery gaia --dataset=dr3 --output=gaia.fits \ --column=ra,dec,parallax @end example @noindent However, this is much easier using the auto-completion feature: @example $ astquery gaia --dataset=dr3 --output=gaia.fits --column=@key{[TAB]} @end example @noindent After pressing @key{[TAB]}, a full list of gaia dr3 dataset column names will be displayed. Typing the first key of the desired column and pressing @key{[TAB]} again will limit the displayed list to only the matching ones until the desired column is found. @menu * Bash TAB completion tutorial:: Fast tutorial to get you started on concepts. * Implementing TAB completion in Gnuastro:: How Gnuastro uses Bash auto-completion features. @end menu @node Bash TAB completion tutorial, Implementing TAB completion in Gnuastro, Bash programmable completion, Bash programmable completion @subsection Bash TAB completion tutorial When a user presses the @key{[TAB]} key while typing commands, Bash will inspect the input to find a relevant ``completion specification'', or @command{compspec}. If available, the @command{compspec} will generate a list of possible suggestions to complete the current word. A custom @command{compsec} can be generated for any command using @i{bash completion builtins}@footnote{@url{https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html}} and the bash variables that start with the @code{COMP} keyword@footnote{@url{https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html}}. First, let's see a quick example of how you can make a completion script in just one line of code. With the command below, we are asking Bash to give us three suggestions for @command{echo}: @code{foo}, @code{bar} and @code{bAr}. Please run it in your terminal for the next steps. @example $ complete -W "foo bar bAr" echo @end example The possible completion suggestions are fed into @command{complete} using the @option{-W} option followed by a list of space delimited words. Let's see it in action: @example $ echo @key{[TAB][TAB]} bar bAr foo @end example Nicely done! Just note that the strings are sorted alphabetically, not in the original order. Also, an arbitrary number of space characters are printed between them (based on the number of suggestions and terminal size, etc.). Now, if you type @samp{f} and press @key{[TAB]}, bash will automatically figure out that you wanted @code{foo} and it be completed right away: @example $ myprogram f@key{[TAB]} $ myprogram foo @end example @noindent However, nothing will happen if you type @samp{b} and press @key{[TAB]} only @i{once}. This is because of the ambiguity: there is not enough information to figure out which suggestion you want: @code{bar} or @code{bAr}? So, if you press @key{[TAB]} twice, it will print out all the options that start with @samp{b}: @example $ echo b@key{[TAB][TAB]} bar bAr $ echo ba@key{[TAB]} $ echo bar @end example Not bad for a simple program. But what if you need more control? By passing the @option{-F} option to @command{complete} instead of @option{-W}, it will run a @i{function} for generating the suggestions, instead of using a static string. For example, let's assume that the expected value after @code{foo} is the number of files in the current directory. Since the logic is getting more complex, let's write and save the commands below into a shell script with an arbitrary name such as @file{completion-tutorial.sh}: @example @verbatim $ cat completion-tutorial.sh _echo(){ if [ "$3" == "foo" ]; then COMPREPLY=( $(ls | wc -l) ) else COMPREPLY=( $(compgen -W "foo bar bAr" -- "$2") ) fi } complete -F _echo echo @end verbatim @end example @noindent We will look at it in detail soon. But for now, let's @command{source} the file into your current terminal and check if it works as expected: @example $ source completion-tutorial.sh $ echo @key{[TAB][TAB]} foo bar bAr $ echo foo @key{[TAB]} $ touch empty.txt $ echo foo @key{[TAB]} @end example @noindent Success! As you see, this allows for setting up highly customized completion scripts. Now let's have a closer look at the @file{completion-tutorial.sh} completion script from above. First, the @samp{-F} option in front the @command{complete} command indicates that we want shell to execute the @command{_echo} function whenever @command{echo} is called. As a convention, the function name should be the same as the program name, but prefixed with an underscore (@samp{_}). Within the @command{_echo} function, we're checking if @code{$3} is equal to @option{foo}. In Bash's auto-complete, @code{$3} means the word @b{before} current cursor position. In fact, these are the arguments that the @command{_echo} function is receiving: @table @code @item $1 The name of the command, here it is @samp{echo}. @item $2 The current word being completed (empty unless we are in the middle of typing a word). @item $3 The word before the word being completed. @end table To tell the completion script what to reply with, we use the @command{COMPREPLY} array. This array holds all the suggestions that @command{complete} will show for the user in the end. In the example above, we simply give it the string output of @samp{ls | wc -l}. Finally, we have the @command{compgen} command. According to bash programmable completion builtins manual, the command @code{compgen [OPTION] [WORD]} generates possible completion matches for @code{[WORD]} according to @code{[OPTIONS]}. Using the @samp{-W} option asks @command{compgen} to generate a list of words from an input string. This is known as @i{Word Splitting}@footnote{@url{https://www.gnu.org/software/bash/manual/html_node/Word-Splitting.html}}. @command{compgen} will automatically use the @command{$IFS} variable to split the string into a list of words. You can check the default delimiters by calling: @example $ printf %q "$IFS" @end example @noindent The default value of @command{$IFS} might be @samp{ \t\n}. This means the SPACE, TAB, and New-line characters. Finally, notice the @samp{-- "$2"} in this command: @example COMPREPLY=( $(compgen -W "foo bar bAr" -- "$2") ) @end example @noindent Here, the @samp{--} instructs @command{compgen} to only reply with a list of words that match @command{$2}, i.e. the current word being completed. That is why when you type the letter @samp{b}, @command{complete} will reply only with its matches (@samp{bar} and @samp{bAr}), and will exclude @samp{foo}. Let's get a little more realistic, and develop a very basic completion script for one of Gnuastro's programs. Since the @option{--help} option will list all the options available in Gnuastro's programs, we are going to use its output and create a very basic TAB completion for it. Note that the actual TAB completion in Gnuastro is a little more complex than this and fully described in @ref{Implementing TAB completion in Gnuastro}. But this is a good exercise to get started. We will use @command{asttable} as the demo, and the goal is to suggest all options that this program has to offer. You can print all of them (with a lot of extra information) with this command: @example $ asttable --help @end example Let's write an @command{awk} script that prints all of the long options. When printing the option names we can safely ignore the short options because if a user knows about the short options, s/he already knows exactly what they want! Also, due to their single-character length, they will be too cryptic without their descriptions. One way to catch the long options is through @command{awk} as shown below. We only keep the lines that 1) starting with an empty space, 2) their first no-white character is @samp{-} and that have the format of @samp{--} followed by any number of numbers or characters. Within those lines, if the first word ends in a comma (@samp{,}), the first word is the short option, so we want the second word (which is the long option). Otherwise, the first word is the long option. But for options that take a value, this will also include the format of the value (for example, @option{--column=STR}). So with a @command{sed} command, we remove everything that is after the equal sign, but keep the equal sign itself (to highlight to the user that this option should have a value). @example $ asttable --help \ | awk '/^ / && $1 ~ /^-/ && /--+[a-zA-Z0-9]*/ @{ \ if($1 ~ /,$/) name=$2; \ else name=$1; \ print name@}' \ | sed -e's|=.*|=|' @end example If we wanted to show all the options to the user, we could simply feed the values of the command above to @command{compgen} and @command{COMPREPLY} subsequently. But, we need @emph{smarter} completions: we want to offer suggestions based on the previous options that have already been typed in. Just Beware! Sometimes the program might not be acting as you expected. In that case, using debug messages can clear things up. You can add a @command{echo} command before the completion function ends, and check all current variables. This can save a lot of headaches, since things can get complex. Take the option @code{--wcsfile=} for example. This option accepts a FITS file. Usually, the user is trying to feed a FITS file from the current directory. So it would be nice if we could help them and print only a list of FITS files sitting in the current directory -- or whatever directory they have typed-in so far. But there's a catch. When splitting the user's input line, Bash will consider @samp{=} as a separate word. To avoid getting caught in changing the @command{IFS} or @command{WORDBREAKS} values, we will simply check for @samp{=} and act accordingly. That is, if the previous word is a @samp{=}, we will ignore it and take the word before that as the previous word. Also, if the current word is a @samp{=}, ignore it completely. Taking all of that into consideration, the code below might serve well: @verbatim _asttable(){ if [ "$2" = "=" ]; then word="" else word="$2" fi if [ "$3" = "=" ]; then prev="${COMP_WORDS[COMP_CWORD-2]}" else prev="${COMP_WORDS[COMP_CWORD-1]}" fi case "$prev" in --wcsfile) COMPREPLY=( $(compgen -f -X "!*.[fF][iI][tT][sS]" -- "$word") ) ;; esac } complete -o nospace -F _asttable asttable @end verbatim @noindent To test the code above, write it into @file{asttable-tutorial.sh}, and load it into your running terminal with this command: @example $ source asttable-tutorial.sh @end example If you then go to a directory that has at least one FITS file (with a @file{.fits} suffix, among other files), you can checkout the function by typing the following command. You will see that only files ending in @file{.fits} are shown, not any other file. @example asttable --wcsfile=[TAB][TAB] @end example The code above first identifies the current and previous words. It then checks if the previous word is equal to @code{--wcsfile} and if so, fills @code{COMPREPLY} array with the necessary suggestions. We are using @code{case} here (instead of @code{if}) because in a real scenario, we need to check many more values and @code{case} is far better suited for such cases (cleaner and more efficient code). The @option{-f} option in @command{compgen} indicates we're looking for a file. The @option{-X} option @emph{filters out} the filenames that match the next regular expression pattern. Therefore we should start the regular expression with @samp{!} if we want the files matching the regular expression. The @code{-- "$word"} component collects only filenames that match the current word being typed. And last but not least, the @samp{-o nospace} option in the @command{complete} command instructs the completion script to @emph{not} append a white space after each suggestion. That is important because the long format of an option, its value is more clear when it sticks to the option name with a @samp{=} sign. You have now written a very basic and working TAB completion script that can easily be generalized to include more options (and be good for a single/simple program). However, Gnuastro has many programs that share many similar things and the options are not independent. Also, complex situations do often come up: for example, some people use a @file{.fit} suffix for FITS files and others do not even use a suffix at all! So in practice, things need to get a little more complicated, but the core concept is what you learnt in this section. We just modularize the process (breaking logically independent steps into separate functions to use in different situations). In @ref{Implementing TAB completion in Gnuastro}, we will review the generalities of Gnuastro's implementation of Bash TAB completion. @node Implementing TAB completion in Gnuastro, , Bash TAB completion tutorial, Bash programmable completion @subsection Implementing TAB completion in Gnuastro The basics of Bash auto-completion was reviewed in @ref{Bash TAB completion tutorial}. Gnuastro is a very complex package of many programs, that have many similar features, so implementing those principles in an easy to maintain manner requires a modular solution. As a result, Bash's TAB completion is implemented as multiple files in Gnuastro: @table @asis @item @file{bin/completion.bash.built} (in build directory, automatically created) This file contains the values of all Gnuastro options or arguments that take fixed strings as values (not file names). For example, the names of Arithmetic's operators (see @ref{Arithmetic operators}), or spectral line names (like @option{--obsline} in @ref{CosmicCalculator input options}). This file is created automatically during the building of Gnuastro. The recipe to build it is available in Gnuastro's top-level @file{Makefile.am} (under the target @code{bin/completion.bash}). It parses the respective Gnuastro source file that contains the necessary user-specified strings. All the acceptable values values are then stored as shell variables (within a function). @item @file{bin/completion.bash.in} (in source directory, under version control) All the low-level completion functions that are common to all programs are stored here. It thus contains functions that will parse the command-line or files, or suggest the completion replies. @item @file{PROGNAME-complete.bash} (in source directory, under version control) All Gnuastro programs contain a @file{PROGNAME-complete.bash} script within their source (for more on the fixed files of each program, see @ref{Program source}). This file contains the very high-level (program-specific) Bash programmable completion features that are almost always defined in Gnuastro-generic Bash completion file (@file{bin/completion.bash.in}). The top-level function that is called by Bash should be called @code{_gnuastro_autocomplete_PROGNAME} and its last line should be the @command{complete} command of Bash which calls this function. The contents of @code{_gnuastro_autocomplete_PROGNAME} are almost identical for all the programs, it is just a very high-level function that either calls @code{_gnuastro_autocomplete_PROGNAME_arguments} to manage suggestions for the program's arguments or @code{_gnuastro_autocomplete_PROGNAME_option_value} to manage suggestions for the program's option values. @end table @noindent The scripts above follow the following conventions. After reviewing the list, please also look into the functions for examples of each point. @itemize @item No global shell variables in any completion script: the contents of the files above are directly loaded into the user's environment. So to keep the user's environment clean and avoid annoyance to the users, everything should be defined as shell functions, and any variable within the functions should be set as @code{local}. @item All the function names should start with `@code{_gnuastro_autocomplete_}', again to avoid populating the user's function name-space with possibly conflicting names. @item Outputs of functions should be written in the @code{local} variables of the higher-level functions that called them. @end itemize @node Developer's checklist, Gnuastro project webpage, Bash programmable completion, Developing @section Developer's checklist This is a checklist of things to do after applying your changes/additions in Gnuastro: @enumerate @item If the change is non-trivial, write test(s) in the @file{tests/progname/} directory to test the change(s)/addition(s) you have made. Then add their file names to @file{tests/Makefile.am}. @item If your change involves a change in command-line behavior of a Gnuastro program or script (for example, adding a new option or argument), create or update the respective @file{bin/PROGNAME/completion.sh} file described under the @ref{Bash programmable completion} section. @item Run @command{$ make check} to make sure everything is working correctly. @item Make sure the documentation (this book) is completely up to date with your changes, see @ref{Documentation}. @item Commit the change to your issue branch (see @ref{Production workflow} and @ref{Forking tutorial}). Afterwards, run Autoreconf to generate the appropriate version number: @example $ autoreconf -f @end example @cindex Making a distribution package @item Finally, to make sure everything will be built, installed and checked correctly run the following command (after re-configuring, and rebuilding). To greatly speed up the process, use multiple threads (8 in the example below, change it appropriately) @example $ make distcheck -j8 @end example @noindent This command will create a distribution file (ending with @file{.tar.gz}) and try to compile it in the most general cases, then it will run the tests on what it has built in its own mini-environment. If @command{$ make distcheck} finishes successfully, then you are safe to send your changes to us to implement or for your own purposes. See @ref{Production workflow} and @ref{Forking tutorial}. @end enumerate @node Gnuastro project webpage, Developing mailing lists, Developer's checklist, Developing @section Gnuastro project webpage @cindex Bug @cindex Issue @cindex Tracker @cindex GNU Savannah @cindex Report a bug @cindex Management hub @cindex Feature request @cindex Central management @url{https://savannah.gnu.org/projects/gnuastro/, Gnuastro's central management hub}@footnote{@url{https://savannah.gnu.org/projects/gnuastro/}} is located on @url{https://savannah.gnu.org/, GNU Savannah}@footnote{@url{https://savannah.gnu.org/}}. Savannah is the central software development management system for many GNU projects. Through this central hub, you can view the list of activities that the developers are engaged in, their activity on the version controlled source, and other things. Each defined activity in the development cycle is known as an `issue' (or `item'). An issue can be a bug (see @ref{Report a bug}), or a suggested feature (see @ref{Suggest new feature}) or an enhancement or generally any @emph{one} job that is to be done. In Savannah, issues are classified into three categories or `tracker's: @table @asis @cindex Mailing list: bug-gnuastro @item Support This tracker is a way that (possibly anonymous) users can get in touch with the Gnuastro developers. It is a complement to the bug-gnuastro mailing list (see @ref{Report a bug}). Anyone can post an issue to this tracker. The developers will not submit an issue to this list. They will only reassign the issues in this list to the other two trackers if they are valid@footnote{Some of the issues registered here might be due to a mistake on the user's side, not an actual bug in the program.}. Ideally (when the developers have time to put on Gnuastro, please do not forget that Gnuastro is a volunteer effort), there should be no open items in this tracker. @item Bugs This tracker contains all the known bugs in Gnuastro (problems with the existing tools). @item Tasks The items in this tracker contain the future plans (or new features/capabilities) that are to be added to Gnuastro. @end table @noindent All the trackers can be browsed by a (possibly anonymous) visitor, but to edit and comment on the Bugs and Tasks trackers, you have to be a registered on Savannah. When posting an issue to a tracker, it is very important to choose the `Category' and `Item Group' options accurately. The first contains a list of all Gnuastro's programs along with `Installation', `New program' and `Webpage'. The ``Item Group'' contains the nature of the issue, for example, if it is a `Crash' in the software (a bug), or a problem in the documentation (also a bug) or a feature request or an enhancement. The set of horizontal links on the top of the page (Starting with `Main' and `Homepage' and finishing with `News') are the easiest way to access these trackers (and other major aspects of the project) from any part of the project web page. Hovering your mouse over them will open a drop down menu that will link you to the different things you can do on each tracker (for example, `Submit new' or `Browse'). When you browse each tracker, you can use the ``Display Criteria'' link above the list to limit the displayed issues to what you are interested in. The `Category' and `Group Item' (explained above) are a good starting point. @cindex Mailing list: gnuastro-devel Any new issue that is submitted to any of the trackers, or any comments that are posted for an issue, is directly forwarded to the gnuastro-devel mailing list (@url{https://lists.gnu.org/mailman/listinfo/gnuastro-devel}, see @ref{Developing mailing lists} for more). This will allow anyone interested to be up to date on the over-all development activity in Gnuastro and will also provide an alternative (to Savannah) archiving for the development discussions. Therefore, it is not recommended to directly post an email to this mailing list, but do all the activities (for example add new issues, or comment on existing ones) on Savannah. @cartouche @noindent @strong{Do I need to be a member in Savannah to contribute to Gnuastro?} No. The full version controlled history of Gnuastro is available for anonymous download or cloning. See @ref{Production workflow} for a description of Gnuastro's Integration-Manager Workflow. In short, you can either send in patches, or make your own fork. If you choose the latter, you can push your changes to your own fork and inform us. We will then pull your changes and merge them into the main project. Please see @ref{Forking tutorial} for a tutorial. @end cartouche @node Developing mailing lists, Contributing to Gnuastro, Gnuastro project webpage, Developing @section Developing mailing lists To keep the developers and interested users up to date with the activity and discussions within Gnuastro, there are two mailing lists which you can subscribe to: @table @asis @item @command{gnuastro-devel@@gnu.org} @itemx (at @url{https://lists.gnu.org/mailman/listinfo/gnuastro-devel}) @cindex Mailing list: gnuastro-devel All the posts made in the support, bugs and tasks discussions of @ref{Gnuastro project webpage} are also sent to this mailing address and archived. By subscribing to this list you can stay up to date with the discussions that are going on between the developers before, during and (possibly) after working on an issue. All discussions are either in the context of bugs or tasks which are done on Savannah and circulated to all interested people through this mailing list. Therefore it is not recommended to post anything directly to this mailing list. Any mail that is sent to it from Savannah to this list has a link under the title ``Reply to this item at:''. That link will take you directly to the issue discussion page, where you can read the discussion history or join it. While you are posting comments on the Savannah issues, be sure to update the meta-data. For example, if the task/bug is not assigned to anyone and you would like to take it, change the ``Assigned to'' box, or if you want to report that it has been applied, change the status and so on. All these changes will also be circulated with the email very clearly. @item @command{gnuastro-commits@@gnu.org} @itemx (at @url{https://lists.gnu.org/mailman/listinfo/gnuastro-commits}) @cindex Mailing list: gnuastro-commits This mailing list is defined to circulate all commits that are done in Gnuastro's version controlled source, see @ref{Version controlled source}. If you have any ideas, or suggestions on the commits, please use the bug and task trackers on Savannah to followup the discussion, do not post to this list. All the commits that are made for an already defined issue or task will state the respective ID so you can find it easily. @end table @node Contributing to Gnuastro, , Developing mailing lists, Developing @section Contributing to Gnuastro You have this great idea or have found a good fix to a problem which you would like to implement in Gnuastro. You have also become familiar with the general design of Gnuastro in the previous sections of this chapter (see @ref{Developing}) and want to start working on and sharing your new addition/change with the whole community as part of the official release. This is great and your contribution is most welcome. This section and the next (see @ref{Developer's checklist}) are written in the hope of making it as easy as possible for you to share your great idea with the community. @cindex FSF @cindex Free Software Foundation In this section we discuss the final steps you have to take: legal and technical. From the legal perspective, the copyright of any work you do on Gnuastro has to be assigned to the Free Software Foundation (FSF) and the GNU operating system, or you have to sign a disclaimer. We do this to ensure that Gnuastro can remain free in the future, see @ref{Copyright assignment}. From the technical point of view, in this section we also discuss commit guidelines (@ref{Commit guidelines}) and the general version control workflow of Gnuastro in @ref{Production workflow}, along with a tutorial in @ref{Forking tutorial}. Recall that before starting the work on your idea, be sure to checkout the bugs and tasks trackers in @ref{Gnuastro project webpage} and announce your work there so you do not end up spending time on something others have already worked on, and also to attract similarly interested developers to help you. @menu * Copyright assignment:: Copyright has to be assigned to the FSF. * Commit guidelines:: Guidelines for commit messages. * Production workflow:: Submitting your commits (work) for inclusion. * Forking tutorial:: Tutorial on workflow steps with Git. @end menu @node Copyright assignment, Commit guidelines, Contributing to Gnuastro, Contributing to Gnuastro @subsection Copyright assignment @cindex Free Software Foundation Gnuastro's copyright is owned by the Free Software Foundation (FSF) to ensure that Gnuastro always remains free. The FSF has also provided a @url{https://www.fsf.org/licensing/contributor-faq, Contributor FAQ} to further clarify the reasons, so we encourage you to read it. Professor Eben Moglen, of the Columbia University Law School has given a nice summary of the reasons for this at @url{https://www.gnu.org/licenses/why-assign}. Below we are copying it verbatim for self consistency (in case you are offline or reading in print). @quotation Under US copyright law, which is the law under which most free software programs have historically been first published, there are very substantial procedural advantages to registration of copyright. And despite the broad right of distribution conveyed by the GPL, enforcement of copyright is generally not possible for distributors: only the copyright holder or someone having assignment of the copyright can enforce the license. If there are multiple authors of a copyrighted work, successful enforcement depends on having the cooperation of all authors. In order to make sure that all of our copyrights can meet the record keeping and other requirements of registration, and in order to be able to enforce the GPL most effectively, FSF requires that each author of code incorporated in FSF projects provide a copyright assignment, and, where appropriate, a disclaimer of any work-for-hire ownership claims by the programmer's employer. That way we can be sure that all the code in FSF projects is free code, whose freedom we can most effectively protect, and therefore on which other developers can completely rely. @end quotation Please get in touch with the Gnuastro maintainer (currently Mohammad Akhlaghi, mohammad -at- akhlaghi -dot- org) to follow the procedures. It is possible to do this for each change (good for a single contribution), and also more generally for all the changes/additions you do in the future within Gnuastro. So if you have already assigned the copyright of your work on another GNU software to the FSF, it should be done again for Gnuastro. The FSF has staff working on these legal issues and the maintainer will get you in touch with them to do the paperwork. The maintainer will just be informed in the end so your contributions can be merged within the Gnuastro source code. Gnuastro will gratefully acknowledge (see @ref{Acknowledgments}) all the people who have assigned their copyright to the FSF and have thus helped to guarantee the freedom and reliability of Gnuastro. The Free Software Foundation will also acknowledge your copyright contributions in the Free Software Supporter: @url{https://www.fsf.org/free-software-supporter} which will circulate to a very large community (225,910 people in July 2021). See the archives for some examples and subscribe to receive interesting updates. The very active code contributors (or developers) will also be recognized as project members on the Gnuastro project web page (see @ref{Gnuastro project webpage}) and can be given a @code{gnu.org} email address. So your very valuable contribution and copyright assignment will not be forgotten and is highly appreciated by a very large community. If you are reluctant to sign an assignment, a disclaimer is also acceptable. @cartouche @noindent @strong{Do I need a disclaimer from my university or employer?} It depends on the contract with your university or employer. From the FSF's @file{/gd/gnuorg/conditions.text}: ``If you are employed to do programming, or have made an agreement with your employer that says it owns programs you write, we need a signed piece of paper from your employer disclaiming rights to'' Gnuastro. The FSF's copyright clerk will kindly help you decide, please consult the following email address: ``assign -at- gnu -dot- org''. @end cartouche @node Commit guidelines, Production workflow, Copyright assignment, Contributing to Gnuastro @subsection Commit guidelines To be able to cleanly integrate your work with the other developers, @strong{never commit on the @file{master} branch} (see @ref{Production workflow} for a complete discussion and @ref{Forking tutorial} for a cookbook example). In short, leave @file{master} only for changes you fetch, or pull from the official repository (see @ref{Synchronizing}). In the Gnuastro commit messages, we strive to follow these standards. Note that in the early phases of Gnuastro's development, we are experimenting and so if you notice earlier commits do not satisfy some of the guidelines below, it is because they predate that guideline. @table @asis @item Commit title The commits have to start with one short descriptive title. The title is separated from the body with one blank line. Run @command{git log} to see some of the most recent commit messages as an example. In general, the title should satisfy the following conditions: @itemize @item It is best for the title to be short, about 60 (or even 50) characters. Most emulated command-line terminals are about 80 characters wide. However, we should also allow for the commit hashes which are printed in @command{git log --oneline}, and also branch names or the graph structure outputs of @command{git log} which are also commonly used. @item The title should not finish with any full-stops or periods (`@key{.}'). @end itemize @item Commit body @cindex Mailing list: gnuastro-commits The body of the commit message is separated from the title by one empty line. Recall that anyone who has subscribed to @command{gnuastro-commits} mailing list will get the commit in their email after it has been pushed to @file{master}. People will also read them when they synchronize with the main Gnuastro repository (see @ref{Synchronizing}). Finally, the commit messages will later be used to update the @file{NEWS} file on each release. Therefore the commit message body plays a very important role in the development of Gnuastro, so please adhere to the following guidelines. @itemize @item The body should be very descriptive. Start the commit message body by explaining what changes your commit makes from a user's perspective (added, changed, or removed options, or arguments to programs or libraries, or modified algorithms, or new installation step, etc.). @item @cindex Mailing list: gnuastro-commits Try to explain the committed contents as best as you can. Recall that the readers of your commit message do not necessarily have your current background. After some time you will also forget the context, so this request is not just for others@footnote{@url{http://catb.org/esr/writings/unix-koans/prodigy.html}}. Therefore be very descriptive and explain as much as possible: what the bug/task was, justify the way you fixed it and discuss other possible solutions that you might not have included. For the last item, it is best to discuss them thoroughly as comments in the appropriate section of the code, but only give a short summary in the commit message. Note that all added and removed source code lines will also be circulated in the @command{gnuastro-commits} mailing list. @item Like all other Gnuastro's text files, the lines in the commit body should not be longer than 75 characters, see @ref{Coding conventions}. This is to ensure that on standard terminal emulators (with 80 character width), the @command{git log} output can be cleanly displayed (note that the commit message is indented in the output of @command{git log}). If you use Emacs, Gnuastro's @file{.dir-locals.el} file will ensure that your commits satisfy this condition (using @key{M-q}). @item @cindex Mailing list: gnuastro-commits When the commit is related to a task or a bug, please include the respective ID (in the format of @code{bug/task #ID}, note the space) in the commit message (from @ref{Gnuastro project webpage}) for interested people to be able to followup the discussion that took place there. If the commit fixes a bug or finishes a task, the recommended way is to add a line after the body with `@code{This fixes bug #ID.}', or `@code{This finishes task #ID.}'. Do not assume that the reader has internet access to check the bug's full description when reading the commit message, so give a short introduction too. @end itemize @end table Below you can see a good commit message example (do not forget to read it, it has tips for you). After reading this, please run @command{git log} on the @code{master} branch and read some of the recent commits for more realistic examples. @example The first line should be the title of the commit An empty line is necessary after the title so Git does not confuse lines. This top paragraph of the body of the commit usually describes the reason this commit was done. Therefore it usually starts with "Until now ...". It is very useful to explain the reason behind the change, things that are not immediately obvious when looking into the code. You do not need to list the names of the files, or what lines have been changed, do not forget that the code changes are fully stored within Git :-). In the second paragraph (or any later paragraph!) of the body, we describe the solution and why (not "how"!) the particular solution was implemented. So we usually start this part of the commit body with "With this commit ...". Again, you do not need to go into the details that can be seen from the 'git diff' command (like the file names that have been changed or the code that has been implemented). The important thing here is the things that are not immediately obvious from looking into the code. You can continue the explanation and it is encouraged to be very explicit about the "human factor" of the change as much as possible, not technical details. @end example @node Production workflow, Forking tutorial, Commit guidelines, Contributing to Gnuastro @subsection Production workflow Fortunately `Pro Git' has done a wonderful job in explaining the different workflows in Chapter 5@footnote{@url{http://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows}} and in particular the ``Integration-Manager Workflow'' explained there. The implementation of this workflow is nicely explained in Section 5.2@footnote{@url{http://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project}} under ``Forked-Public-Project''. We have also prepared a short tutorial in @ref{Forking tutorial}. Anything on the master branch should always be tested and ready to be built and used. As described in `Pro Git', there are two methods for you to contribute to Gnuastro in the Integration-Manager Workflow: @enumerate @item You can send commit patches by email as fully explained in `Pro Git'. This is good for your first few contributions. Just note that raw patches (containing only the diff) do not have any meta-data (author name, date, etc.). Therefore they will not allow us to fully acknowledge your contributions as an author in Gnuastro: in the @file{AUTHORS} file and at the start of the PDF book. These author lists are created automatically from the version controlled source. To receive full acknowledgment when submitting a patch, is thus advised to use Git's @code{format-patch} tool. See Pro Git's @url{https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#Public-Project-over-Email, Public project over email} section for a nice explanation. If you would like to get more heavily involved in Gnuastro's development, then you can try the next solution. @item You can have your own forked copy of Gnuastro on any hosting site you like (Codeberg, Gitlab, GitHub, BitBucket, etc.) and inform us when your changes are ready so we merge them in Gnuastro. This is more suited for people who commonly contribute to the code (see @ref{Forking tutorial}). @end enumerate In both cases, your commits (with your name and information) will be preserved and your contributions will thus be fully recorded in the history of Gnuastro and in the @file{AUTHORS} file and this book (second page in the PDF format) once they have been incorporated into the official repository. Needless to say that in such cases, be sure to follow the bug or task trackers (or subscribe to the @command{gnuastro-devel} mailing list) and contact us before hand so you do not do something that someone else is already working on. In that case, you can get in touch with them and help the job go on faster, see @ref{Gnuastro project webpage}. This workflow is currently mostly borrowed from the general recommendations of Git@footnote{@url{https://github.com/git/git/blob/master/Documentation/SubmittingPatches}} and GitHub. But since Gnuastro is currently under heavy development, these might change and evolve to better suit our needs. @node Forking tutorial, , Production workflow, Contributing to Gnuastro @subsection Forking tutorial This is a tutorial on the second suggested method (commonly known as forking) that you can submit your modifications in Gnuastro (see @ref{Production workflow}). To start, please create an @emph{empty} repository on your hosting service web page (we recommend Codeberg since it is fully free software@footnote{See @url{https://www.gnu.org/software/repo-criteria-evaluation.html} for an evaluation of the major existing repositories. Gnuastro uses GNU Savannah (which also has the highest ranking in the evaluation), but for starters, Codeberg may be easier (it is fully free software).}). By empty, we mean that you don't let the web service fill your new repository with a @file{README.md} file (they usually have a check-box for this). Also, since Gnuastro is a public repository, it is much easier if you define your project as a public repository (not a private one). If this is your first hosted repository on the web page, you also have to upload your public SSH key@footnote{for example, see this explanation provided by Codeberg: @url{https://docs.codeberg.org/security/ssh-key}.} for the @command{git push} command below to work. Here we will assume you use the name @file{janedoe} to refer to yourself everywhere and that you choose @file{gnuastro} as the name of your Gnuastro fork. Any online hosting service will give you an address (similar to the `@file{git@@codeberg.org:...}' below) of the empty repository you have created using their web page, use that address in the third line below. @example $ git clone git://git.sv.gnu.org/gnuastro.git $ cd gnuastro $ git remote add janedoe git@@codeberg.org:janedoe/gnuastro.git $ git push janedoe master @end example The full Gnuastro history is now pushed onto your hosting service and the @file{janedoe} remote is now also following your @file{master} branch. If you run @command{git remote show REMOTENAME} for the @file{origin} and @file{janedoe} remotes, you will see their difference: the first has pull access and the second does not. This nicely summarizes the main idea behind this workflow: you push to your remote repository, we pull from it and merge it into @file{master}, then you finalize it by pulling from the main repository. To test (compile) your changes during your work, you will need to bootstrap the version controlled source, see @ref{Bootstrapping} for a full description. The cloning process above is only necessary for your first time setup, you do not need to repeat it. However, please repeat the steps below for each independent issue you intend to work on. Let's assume you have found a bug in @file{lib/statistics.c}'s median calculating function. Before actually doing anything, please announce it (see @ref{Report a bug}) so everyone knows you are working on it, or to confirm if others are not already working on it. With the commands below, you make a branch, checkout to it, correct the bug and check if it is indeed fixed. But before all of this, make sure that you are on the @file{master} branch and that your @file{master} branch is up to date with the main Gnuastro repository with the first two commands. @example $ git checkout master $ git pull $ git checkout -b bug-median-stats # Choose a descriptive name $ emacs lib/statistics.c @end example With the commands above, you have opened your favorite text editor (if it is not Emacs, feel free to use any other!) and are starting to make changes. Making changes will usually involve checking the compilation and outputs of the parts you have changed. Gnuastro already has some facilities to help you in your checks during/after development. @table @file @item developer-build This script does a full build (from the configuration phase to producing the final distribution tarball). During the process, if there is any error or crash, it will abort. This allows you to find problems that you hadn't predicted while modifying the files. This script is described more completely in @ref{Separate build and source directories}. Here is an example of running this script from scratch (the @file{junk} is just a place-holder for a URL): @example $ ./developer-build -p junk @end example If you just want a fast build to start your developing, the recommended way is to run it in debugging mode like below: @example $ ./developer-build -d @end example Without debugging mode, building Gnuastro can take several minutes due to the highly optimizable code structure of Gnuastro (which significantly improves the run-time of the programs, but is slower in the compilation phase). During development, you rarely need high speed at @emph{run-time}. This is because once you find the bug, you can decrease the size of the dataset to be very small and not be affected by run-time optimizations. However, during development, you do need a high speed at @emph{build-time} to see the changes fast and also need debugging flags (for example to run with Valgrind). Debugging flags are lost in the default highly-optimized build. @item tests/during-dev.sh This script is most commonly used during the development of a new feature within the library or programs (it is also mentioned in @ref{Building and debugging}). It assumes that you have built Gnuastro with the @file{./developer-build} script (usually in debugging mode). In other words, it assumes that all the built products are in the @file{build} directory. It has internal variables to set the name of the program you are testing, the name of its arguments and options, as well as the location that the built program should be run in. It is heavily commented, so we recommend reading those comments and will not go into more detail here. @item make pdf When making changes in the book, you can run this in the @file{build} directory to see your changes in the final PDF before committing. Furthermore, if you add or update an example code block of the book, you should copy-paste it into a text editor and check that it runs correctly (typos are very common and can be very annoying for first-time readers). If there are no problems, you can add your modification and commit it. @end table Once you have implemented your bug fix and made sure that it works, through the checks above, you are ready to stage, commit and push your changes with the commands below. Since Gnuastro is a large project, commit messages have to follow certain standards that you should follow, they are described in @ref{Commit guidelines}. Please read that section carefully, and view previous commits (with @code{git log}) before writing the commit message: @example $ git add lib/statistics.c $ git commit $ git push janedoe bug-median-stats @end example Your new branch is now on your hosted repository. Through the respective tacker on Savannah (see @ref{Gnuastro project webpage}) you can then let the other developers know that your @file{bug-median-stats} branch is ready. They will pull your work, test it themselves and if it is ready to be merged into the main Gnuastro history, they will merge it into the @file{master} branch. After that is done, you can simply checkout your local @file{master} branch and pull all the changes from the main repository. After the pull you can run `@command{git log}' as shown below, to see how @file{bug-median-stats} is merged with master. To finalize, you can push all the changes to your hosted repository and delete the branch: @example $ git checkout master $ git pull $ git log --oneline --graph --decorate --all $ git push janedoe master $ git branch -d bug-median-stats # delete local branch $ git push janedoe --delete bug-median-stats # delete remote branch @end example Just as a reminder, always keep your work on each issue in a separate local and remote branch so work can progress on them independently. After you make your announcement, other people might contribute to the branch before merging it in to @file{master}, so this is very important. As a final reminder: before starting each issue branch from @file{master}, be sure to run @command{git pull} in @file{master} as shown above. This will enable you to start your branch (work) from the most recent commit and thus simplify the final merging of your work. @node Other useful software, GNU Free Doc License, Developing, Top @appendix Other useful software In this appendix the installation of programs and libraries that are not direct Gnuastro dependencies are discussed. However they can be useful for working with Gnuastro. @menu * SAO DS9:: Viewing FITS images. * TOPCAT:: Plotting tables of data. * PGPLOT:: Plotting directly in C. @end menu @node SAO DS9, TOPCAT, Other useful software, Other useful software @section SAO DS9 @cindex SAO DS9 @cindex FITS image viewer @url{http://ds9.si.edu,SAO DS9} is not a requirement of Gnuastro, it is a FITS image viewer. It is therefore a useful tool to visually inspect the images/cubes of your Gnuastro inputs or outputs (for tables, see @ref{TOPCAT}). In Gnuastro we have an installed script to run DS9 or TOPCAT on any number of FITS files (depending on it being an image or table), see @ref{Viewing FITS file contents with DS9 or TOPCAT} (which also includes a @file{.desktop} file for GUI integration). After installing DS9, you can easily use that script to open any FITS file (table, image or cube). Like the other packages, it might already be available in your distribution's repositories; but these may be outdated. DS9 is also already pre-compiled for many common operating systems in the download section of its own web page: @enumerate @item Find your operating system in @url{https://ds9.si.edu/download}. Here are some tips when trying to find the proper directory: @itemize @item Many GNU/Linux operating systems are compatible with Debian or Fedora, so if you don't find your operating system's name, probably the latest Debian or Fedora will also work for you. @item macOS uses the low-level ``Darwin'' kernel. Therefore, if you have a macOS, also consider those directories that start with @code{darwin}. @item The CPU architectures (as suffixes) at the end of the directory names can be classified like this: @table @code @item @code{x86} Intel CPUs. @item @code{arm64} Apple's M1 CPUs. @end table @end itemize @item With the operating system directories, you will find a compressed tarball that you need to download (choose the latest one). @item Unpack the tarball with a command like below: @example $ tar -xf ds9.XXXXXXX.X.X.X.tar.gz @end example @item This should produce a simple @file{ds9} file. Before installing, it is good to actually test it like below: @example $ ./ds9 @end example @item If the command above opened DS9 with no error, you can safely install it with this command: @example $ rm ds9*.tar.gz $ sudo mv ds9* /usr/local/bin @end example @item Go to your home directory and try running DS9 with the two commands below. If it doesn't find it, then you need to add @file{/usr/local/bin} to your @file{PATH}, see @ref{Installation directory}. @example $ cd $ ds9 @end example @end enumerate @cartouche @noindent @strong{Install without root permissions:} If you do not have root permissions, you can simply replace @file{/usr/local/bin} in the command above with @file{$HOME/.local/bin}. If this directory is not in your @code{PATH}, you can simply add it with the command below (in your startup file, e.g., @file{~/.bashrc}). For more on @code{PATH} and the startup files, see @ref{Installation directory}. @example export PATH="$HOME/.local/bin:$PATH" @end example @end cartouche @noindent Below you can see a list of known issues in some operating systems that we have found so far. You should be able to identify any potential error when running DS9 from the command-line like above. @itemize @item There might be a complaint about the Xss library, which you can find in your distribution package management system. @item You might also get an @command{XPA} related error. In this case, you have to add the following line to your @file{~/.bashrc} and @file{~/.profile} file (you will have to log out and back in again for the latter): @example export XPA_METHOD=local @end example @item Your system may not have the SSL library in its standard library path, in this case, put this command in your startup file (for example, @file{~/.bashrc}): @example export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/ssl/lib" @end example @end itemize @node TOPCAT, PGPLOT, SAO DS9, Other useful software @section TOPCAT @cindex VOTable @cindex Table viewer @url{http://www.star.bris.ac.uk/~mbt/topcat, TOPCAT} is not a requirement of Gnuastro, it is a table viewer and plotter (in many input formats, including FITS, VOTable, and others). TOPCAT is therefore a useful tool to visually inspect the tables of your Gnuastro inputs or outputs (for images, see @ref{SAO DS9}). In Gnuastro we have an installed script to run DS9 or TOPCAT on any number of FITS files (depending on it being an image or table), see @ref{Viewing FITS file contents with DS9 or TOPCAT} (which also includes a @file{.desktop} file for GUI integration). After installing DS9, you can easily use that script to open any FITS file (table, image or cube). TOPCAT is a very large package with many capabilities to visualize tables (as plots). It also has an @url{http://www.star.bris.ac.uk/~mbt/topcat/#docs, extensive documentation} that you can read for optimally using it. TOPCAT is written in Java, so it just needs a relatively recent (in the last decade) Java Virtual Machine (JVM) and Java Runtime Environment (JRE). Your operating system already has a relatively recent Java installation in its package manager, and there is a large chance that it is already installed. So before trying to install Java, try running TOPCAT. If it complains about not finding a suitable Java environment, then proceed to search your operating system's package manager. To install TOPCAT, you just need to run the following two commands. The first @file{.jar} file is the main TOPCAT Java ARchive (JAR). JAR is a compressed package of Java files and definitions that should be run with a special Java command. But to avoid bothering users with details of how to call Java, TOPCAT also provides a simple shell script (the second downloaded file below) that is easier to call and will do all the internal checks and call Java properly. @example $ wget http://www.star.bris.ac.uk/~mbt/topcat/topcat-full.jar $ wget http://www.star.bris.ac.uk/~mbt/topcat/topcat $ chmod +x topcat $ ./topcat # Just for a check to see if everything works! $ sudo mv topcat-full.jar topcat /usr/local/bin/ @end example @noindent Once the two TOPCAT files are copied in the system-wide directory, you can easily open tables with a command like below from anywhere in your operating system. @example $ topcat table.fits @end example @cartouche @noindent @strong{Install without root permissions:} If you do not have root permissions, you can simply replace @file{/usr/local/bin} in the command above with @file{$HOME/.local/bin}. If this directory is not in your @code{PATH}, you can simply add it with the command below (in your startup file, e.g., @file{~/.bashrc}). For more on @code{PATH} and the startup files, see @ref{Installation directory}. @example export PATH="$HOME/.local/bin:$PATH" @end example @end cartouche @node PGPLOT, , TOPCAT, Other useful software @section PGPLOT @cindex PGPLOT @cindex C, plotting @cindex Plotting directly in C PGPLOT is a package for making plots in C. It is not directly needed by Gnuastro, but can be used by WCSLIB, see @ref{WCSLIB}. As explained in @ref{WCSLIB}, you can install WCSLIB without it too. It is very old (the most recent version was released early 2001!), but remains one of the main packages for plotting directly in C. WCSLIB uses this package to make plots if you want it to make plots. If you are interested you can also use it for your own purposes. @cindex Python Matplotlib @cindex Matplotlib, Python @cindex PGFplots in @TeX{} or @LaTeX{} If you want your plotting codes in between your C program, PGPLOT is currently one of your best options. The recommended alternative to this method is to get the raw data for the plots in text files and input them into any of the various more modern and capable plotting tools separately, for example, the Matplotlib library in Python or PGFplots in @LaTeX{}. This will also significantly help code readability. Let's get back to PGPLOT for the sake of WCSLIB. Installing it is a little tricky (mainly because it is so old!). You can download the most recent version from the FTP link in its web page@footnote{@url{http://www.astro.caltech.edu/~tjp/pgplot/}}. You can unpack it with the @command{tar -xf} command. Let's assume the directory you have unpacked it to is @file{PGPLOT}, most probably it is: @file{/home/username/Downloads/pgplot/}. Open the @file{drivers.list} file: @example $ gedit drivers.list @end example @noindent Remove the @code{!} for the following lines and save the file in the end: @example PSDRIV 1 /PS PSDRIV 2 /VPS PSDRIV 3 /CPS PSDRIV 4 /VCPS XWDRIV 1 /XWINDOW XWDRIV 2 /XSERVE @end example @noindent Do not choose GIF or VGIF, there is a problem in their codes. Open the @file{PGPLOT/sys_linux/g77_gcc.conf} file: @example $ gedit PGPLOT/sys_linux/g77_gcc.conf @end example @noindent change the line saying: @code{FCOMPL="g77"} to @code{FCOMPL="gfortran"}, and save it. This is a very important step during the compilation of the code if you are in GNU/Linux. You now have to create a folder in @file{/usr/local}, do not forget to replace @file{PGPLOT} with your unpacked address: @example $ su # mkdir /usr/local/pgplot # cd /usr/local/pgplot # cp PGPLOT/drivers.list ./ @end example To make the Makefile, type the following command: @example # PGPLOT/makemake PGPLOT linux g77_gcc @end example @noindent It should finish by saying: @command{Determining object file dependencies}. You have done the hard part! The rest is easy: run these three commands in order: @example # make # make clean # make cpg @end example Finally you have to place the position of this directory you just made into the @command{LD_LIBRARY_PATH} environment variable and define the environment variable @command{PGPLOT_DIR}. To do that, you have to edit your @file{.bashrc} file: @example $ cd ~ $ gedit .bashrc @end example @noindent Copy these lines into the text editor and save it: @cindex @file{LD_LIBRARY_PATH} @example PGPLOT_DIR="/usr/local/pgplot/"; export PGPLOT_DIR LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgplot/ export LD_LIBRARY_PATH @end example @noindent You need to log out and log back in again so these definitions take effect. After you logged back in, you want to see the result of all this labor, right? Tim Pearson has done that for you, create a temporary folder in your home directory and copy all the demonstration files in it: @example $ cd ~ $ mkdir temp $ cd temp $ cp /usr/local/pgplot/pgdemo* ./ $ ls @end example You will see a lot of pgdemoXX files, where XX is a number. In order to execute them type the following command and drink your coffee while looking at all the beautiful plots! You are now ready to create your own. @example $ ./pgdemoXX @end example @node GNU Free Doc License, GNU General Public License, Other useful software, Top @appendix GNU Free Doc. License @cindex GNU Free Documentation License @include fdl.texi @node GNU General Public License, Index, GNU Free Doc License, Top @appendix GNU Gen. Pub. License v3 @cindex GPL @cindex GNU General Public License (GPL) @include gpl-3.0.texi @c Print the index and finish: @node Index, , GNU General Public License, Top @unnumbered Index: Macros, structures and functions All Gnuastro library's exported macros start with @code{GAL_}, and its exported structures and functions start with @code{gal_}. This abbreviation stands for @emph{G}NU @emph{A}stronomy @emph{L}ibrary. The next element in the name is the name of the header which declares or defines them, so to use the @code{gal_array_fset_const} function, you have to @code{#include <gnuastro/array.h>}. See @ref{Gnuastro library} for more. The @code{pthread_barrier} constructs are our implementation and are only available on systems that do not have them, see @ref{Implementation of pthread_barrier}. @printindex fn @unnumbered Index @printindex cp @bye �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/genauthors������������������������������������������������������������������������0000755�0001750�0001750�00000006202�14551337306�011641� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # # Update/create authors for the documentation. But only when there is a Git # repository. When there is no $(top_srcdir)/.git directory, rely on the # existing authors list. If the authors.texi file has for some reason been # deleted from the non version controlled source, then the book will not be # made (Texinfo will complain about a missing authors.texi). # # Call like this: # genauthors TOP_SRCDIR # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Mosè Giordano <mose@gnu.org> # Copyright (C) 2016-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see <http://www.gnu.org/licenses/>. # Status report echo "Generating authors list for documentation." # Only do the job if a .git directory exists in the top source directory # (recall that this script is also present in the tar-ball with no .git # directory and might be run from there) if [ -d $1/.git ]; then # We will need to import the '.mailmap' file from the source directory # temporarily to correct the changing emails (see the comments in # '.mailmap'). Note that this script is run from within the 'doc/' # directory. The original '.mailmap' is in the 'TOP_SRCDIR', so even # when the source and build directories are the same, there is no # problem. # # But in case '.mailmap' already exists (for example the script is run # in the top source directory not from the 'doc' directory, or if a # symbolic link was already created), we won't do any copying. if [ -e .mailmap ]; then keepmailmap=1; else keepmailmap=0; cp $1/.mailmap .mailmap; fi # Do NOT test if authors.texi is newer than ../.git. In some cases the # list of authors is created empty when running make in top directory # (in particular "make -jN" with N > 1), so authors.texi needs to be # recreated anyway. git --git-dir=$1/.git shortlog --numbered --summary --email --no-merges \ | sed -e 's/</ /' \ -e 's/>/ /' \ -e 's/@/@@/' \ -e "s/è/@\`e/" \ -e "s/é/@\'e/" \ -e "s/ç/@,{c}/" \ | awk '{for(i=2;i<NF;++i) printf("%s ", $i); \ printf("(%s, %s)@*\n", $NF, $1)}' \ > $1/doc/authors.texi # Clean up (if necessary) if [ $keepmailmap = 0 ]; then rm .mailmap; fi # Check if the authors.texi file was actually written: if [ ! -s $1/doc/authors.texi ]; then echo "authors.texi is empty!" exit 1 fi else echo "No Git repository detected, leaving $1/doc/authors.texi unchanged." fi ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro.info���������������������������������������������������������������������0000644�0001750�0001750�00000107577�14557514041�012273� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is gnuastro.info, produced by makeinfo version 7.1 from gnuastro.texi. This book documents version 0.22 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * Match: (gnuastro)Match. Match two separate catalogs. * astmatch: (gnuastro)Invoking astmatch. Options to Match. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Segment: (gnuastro)Segment. Segment detections based on signal structure. * astsegment: (gnuastro)Invoking astsegment. Options to Segment. * Query: (gnuastro)Query. Access remote databases for downloading data. * astquery: (gnuastro)Invoking astquery. Options to Query. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. * astscript: (gnuastro)Installed scripts. Gnuastro's installed scripts. * astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script * astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script * astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script * astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script * astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script * astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script * astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script * astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script * astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script * astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script * astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script END-INFO-DIR-ENTRY  Indirect: gnuastro.info-1: 4282 gnuastro.info-2: 305508 gnuastro.info-3: 607124 gnuastro.info-4: 906434 gnuastro.info-5: 1229345 gnuastro.info-6: 1507676 gnuastro.info-7: 1810186 gnuastro.info-8: 2112550 gnuastro.info-9: 2413644 gnuastro.info-10: 2715219 gnuastro.info-11: 3010365  Tag Table: (Indirect) Node: Top4282 Node: Introduction40431 Node: Quick start43241 Ref: Quick start-Footnote-146294 Node: Gnuastro programs list46490 Node: Science and its tools56427 Ref: Science and its tools-Footnote-169025 Ref: Science and its tools-Footnote-269079 Ref: Science and its tools-Footnote-369532 Ref: Science and its tools-Footnote-469677 Ref: Science and its tools-Footnote-569810 Ref: Science and its tools-Footnote-670319 Node: Your rights70422 Ref: Your rights-Footnote-172584 Ref: Your rights-Footnote-272693 Ref: Your rights-Footnote-372758 Node: Logo of Gnuastro72823 Node: Naming convention74460 Node: Version numbering75600 Ref: Version numbering-Footnote-178679 Node: GNU Astronomy Utilities 1.078981 Ref: GNU Astronomy Utilities 1.0-Footnote-180908 Node: New to GNU/Linux?80940 Ref: New to GNU/Linux?-Footnote-184800 Ref: New to GNU/Linux?-Footnote-284890 Node: Command-line interface84956 Ref: Command-line interface-Footnote-190754 Ref: Command-line interface-Footnote-290786 Ref: Command-line interface-Footnote-390889 Node: Report a bug91125 Ref: Report a bug-Footnote-197945 Ref: Report a bug-Footnote-298008 Node: Suggest new feature98070 Node: Announcements100931 Node: Conventions101887 Node: Acknowledgments104237 Node: Tutorials110119 Ref: Tutorials-Footnote-1116563 Ref: Tutorials-Footnote-2116673 Node: General program usage tutorial117491 Ref: General program usage tutorial-Footnote-1121904 Ref: General program usage tutorial-Footnote-2121981 Ref: General program usage tutorial-Footnote-3122025 Node: Calling Gnuastro's programs122069 Node: Accessing documentation122986 Ref: Accessing documentation-Footnote-1127688 Node: Setup and data download127769 Ref: Setup and data download-Footnote-1129700 Node: Dataset inspection and cropping129837 Ref: Dataset inspection and cropping-Footnote-1136494 Ref: Dataset inspection and cropping-Footnote-2136775 Ref: Dataset inspection and cropping-Footnote-3136836 Ref: Dataset inspection and cropping-Footnote-4137284 Node: Angular coverage on the sky137336 Ref: Angular coverage on the sky-Footnote-1144994 Node: Cosmological coverage and visualizing tables145942 Node: Building custom programs with the library152015 Ref: Building custom programs with the library-Footnote-1157603 Node: Option management and configuration files158001 Node: Warping to a new pixel grid166852 Node: NoiseChisel and Multi-Extension FITS files170360 Ref: NoiseChisel and Multi-Extension FITS files-Footnote-1178444 Node: NoiseChisel optimization for detection178523 Ref: NoiseChisel optimization for detection-Footnote-1194557 Node: NoiseChisel optimization for storage195375 Node: Segmentation and making a catalog199127 Ref: Segmentation and making a catalog-Footnote-1207914 Ref: Segmentation and making a catalog-Footnote-2208238 Node: Measuring the dataset limits208381 Ref: Measuring the dataset limits-Footnote-1222171 Ref: Measuring the dataset limits-Footnote-2222301 Ref: Measuring the dataset limits-Footnote-3222356 Node: Working with catalogs estimating colors222443 Ref: Working with catalogs estimating colors-Footnote-1238399 Node: Column statistics color-magnitude diagram238668 Node: Aperture photometry246030 Ref: Aperture photometry-Footnote-1249789 Node: Matching catalogs249845 Node: Reddest clumps cutouts and parallelization253635 Node: FITS images in a publication259049 Ref: FITS images in a publication-Footnote-1269770 Node: Marking objects for publication269833 Node: Writing scripts to automate the steps282329 Ref: Writing scripts to automate the steps-Footnote-1300798 Node: Citing and acknowledging Gnuastro305508 Node: Detecting large extended targets306593 Ref: Detecting large extended targets-Footnote-1308893 Node: Downloading and validating input data308943 Ref: Downloading and validating input data-Footnote-1313772 Ref: Downloading and validating input data-Footnote-2314010 Node: NoiseChisel optimization314360 Ref: NoiseChisel optimization-Footnote-1334015 Ref: NoiseChisel optimization-Footnote-2334103 Ref: NoiseChisel optimization-Footnote-3334212 Ref: NoiseChisel optimization-Footnote-4334348 Node: Skewness caused by signal and its measurement334503 Node: Image surface brightness limit345709 Ref: Image surface brightness limit-Footnote-1359413 Ref: Image surface brightness limit-Footnote-2359660 Ref: Image surface brightness limit-Footnote-3359723 Node: Achieved surface brightness level359909 Ref: Achieved surface brightness level-Footnote-1367203 Ref: Achieved surface brightness level-Footnote-2368043 Node: Extract clumps and objects368183 Ref: Extract clumps and objects-Footnote-1376957 Ref: Extract clumps and objects-Footnote-2377070 Node: Building the extended PSF377414 Node: Preparing input for extended PSF378549 Ref: Preparing input for extended PSF-Footnote-1380651 Node: Saturated pixels and Segment's clumps380800 Ref: Saturated pixels and Segment's clumps-Footnote-1392566 Node: One object for the whole detection392816 Node: Building outer part of PSF400858 Node: Inner part of the PSF410917 Node: Uniting the different PSF components413953 Node: Subtracting the PSF426326 Ref: Subtracting the PSF-Footnote-1440019 Node: Sufi simulates a detection440269 Ref: Sufi simulates a detection-Footnote-1472256 Ref: Sufi simulates a detection-Footnote-2472510 Ref: Sufi simulates a detection-Footnote-3472885 Node: Detecting lines and extracting spectra in 3D data472945 Ref: Detecting lines and extracting spectra in 3D data-Footnote-1476047 Ref: Detecting lines and extracting spectra in 3D data-Footnote-2476109 Ref: Detecting lines and extracting spectra in 3D data-Footnote-3476183 Ref: Detecting lines and extracting spectra in 3D data-Footnote-4476257 Ref: Detecting lines and extracting spectra in 3D data-Footnote-5476316 Node: Viewing spectra and redshifted lines476960 Node: Sky lines in optical IFUs487492 Node: Continuum subtraction489454 Ref: Continuum subtraction-Footnote-1495034 Node: 3D detection with NoiseChisel495188 Ref: 3D detection with NoiseChisel-Footnote-1501444 Node: 3D measurements and spectra501597 Node: Extracting a single spectrum and plotting it514420 Node: Pseudo narrow-band images517487 Ref: Pseudo narrow-band images-Footnote-1525079 Node: Color images with full dynamic range525718 Node: Color channels in same pixel grid528779 Node: Color image using linear transformation533528 Node: Color for bright regions and grayscale for faint541951 Node: Manually setting color-black-gray regions557894 Node: Weights contrast markers and other customizations562519 Node: Zero point of an image572859 Node: Zero point tutorial with reference image574793 Ref: Zero point tutorial with reference image-Footnote-1598681 Node: Zero point tutorial with reference catalog598836 Node: Pointing pattern design607124 Node: Preparing input and generating exposure map610540 Ref: Preparing input and generating exposure map-Footnote-1620003 Ref: Preparing input and generating exposure map-Footnote-2620146 Ref: Preparing input and generating exposure map-Footnote-3620263 Node: Area of non-blank pixels on sky620506 Node: Script with pointing simulation steps so far624329 Node: Larger steps sizes for better calibration628606 Node: Pointings that account for sky curvature637036 Ref: Pointings that account for sky curvature-Footnote-1646000 Node: Accounting for non-exposed pixels646096 Ref: Accounting for non-exposed pixels-Footnote-1652603 Ref: Accounting for non-exposed pixels-Footnote-2652923 Node: Moire pattern in stacking and its correction653151 Ref: Moire pattern in stacking and its correction-Footnote-1666832 Node: Clipping outliers666926 Node: Building inputs and analysis without clipping669298 Node: Sigma clipping678723 Node: MAD clipping693131 Node: Filled re-clipping698617 Node: Installation705008 Ref: Installation-Footnote-1707583 Node: Dependencies707670 Node: Mandatory dependencies709305 Node: GNU Scientific Library710045 Node: CFITSIO710894 Ref: CFITSIO-Footnote-1715349 Node: WCSLIB715511 Ref: WCSLIB-Footnote-1717780 Ref: WCSLIB-Footnote-2717914 Ref: WCSLIB-Footnote-3718000 Ref: WCSLIB-Footnote-4718031 Node: Optional dependencies718077 Ref: Optional dependencies-Footnote-1726590 Node: Bootstrapping dependencies726870 Ref: Bootstrapping dependencies-Footnote-1735765 Ref: Bootstrapping dependencies-Footnote-2736038 Ref: Bootstrapping dependencies-Footnote-3736497 Ref: Bootstrapping dependencies-Footnote-4736803 Ref: Bootstrapping dependencies-Footnote-5736954 Node: Dependencies from package managers737156 Ref: Dependencies from package managers-Footnote-1749610 Ref: Dependencies from package managers-Footnote-2749692 Ref: Dependencies from package managers-Footnote-3749739 Node: Downloading the source749776 Node: Release tarball750758 Node: Version controlled source753981 Ref: Version controlled source-Footnote-1757049 Node: Bootstrapping757322 Ref: Bootstrapping-Footnote-1763147 Node: Synchronizing763267 Ref: Synchronizing-Footnote-1767633 Ref: Synchronizing-Footnote-2767829 Node: Build and install768018 Node: Configuring769812 Node: Gnuastro configure options771502 Node: Installation directory778952 Ref: Installation directory-Footnote-1793434 Ref: Installation directory-Footnote-2793532 Ref: Installation directory-Footnote-3793663 Ref: Installation directory-Footnote-4793742 Ref: Installation directory-Footnote-5793924 Node: Executable names794577 Node: Configure and build in RAM798451 Node: Separate build and source directories801008 Node: Tests809459 Node: A4 print book811123 Node: Known issues812542 Ref: Known issues-Footnote-1819585 Ref: Known issues-Footnote-2819624 Ref: Known issues-Footnote-3819813 Ref: Known issues-Footnote-4819868 Node: Common program behavior819929 Ref: Common program behavior-Footnote-1823532 Node: Command-line823796 Node: Arguments and options824833 Node: Arguments828508 Node: Options831263 Node: Common options838145 Node: Input output options839048 Ref: Input output options-Footnote-1847574 Ref: Input output options-Footnote-2847711 Node: Processing options847784 Node: Operating mode options855439 Ref: Operating mode options-Footnote-1871210 Node: Shell TAB completion871272 Ref: Shell TAB completion-Footnote-1875435 Ref: Shell TAB completion-Footnote-2875516 Ref: Shell TAB completion-Footnote-3875563 Ref: Shell TAB completion-Footnote-4875654 Ref: Shell TAB completion-Footnote-5875761 Node: Standard input875931 Node: Shell tips880027 Node: Separate shell variables for multiple outputs880540 Ref: Separate shell variables for multiple outputs-Footnote-1885075 Ref: Separate shell variables for multiple outputs-Footnote-2885329 Node: Truncating start of long string FITS keyword values885724 Ref: Truncating start of long string FITS keyword values-Footnote-1887334 Node: Configuration files887693 Ref: Configuration files-Footnote-1889664 Ref: Configuration files-Footnote-2889733 Node: Configuration file format889953 Node: Configuration file precedence892360 Ref: Configuration file precedence-Footnote-1896702 Node: Current directory and User wide896871 Node: System wide898136 Node: Getting help899650 Node: --usage906434 Node: --help907779 Node: Man pages911638 Node: Info912469 Node: help-gnuastro mailing list914877 Node: Multi-threaded operations915946 Node: A note on threads917384 Node: How to run simultaneous operations919945 Ref: How to run simultaneous operations-Footnote-1924298 Ref: How to run simultaneous operations-Footnote-2924696 Ref: How to run simultaneous operations-Footnote-3924741 Ref: How to run simultaneous operations-Footnote-4924793 Node: Numeric data types925321 Node: Memory management932198 Ref: Memory management-Footnote-1942991 Node: Tables943111 Node: Recognized table formats946419 Node: Gnuastro text table format951797 Node: Selecting table columns961911 Node: Tessellation965777 Node: Automatic output971526 Ref: Automatic output-Footnote-1974113 Node: Output FITS files974326 Node: Numeric locale981437 Node: Data containers984377 Node: Fits987284 Ref: Fits-Footnote-1992599 Node: Invoking astfits992666 Node: HDU information and manipulation998136 Node: Keyword inspection and manipulation1009451 Ref: Keyword inspection and manipulation-Footnote-11039547 Ref: Keyword inspection and manipulation-Footnote-21040396 Node: Pixel information images1040469 Ref: Pixel information images-Footnote-11043847 Node: ConvertType1043921 Ref: ConvertType-Footnote-11046074 Node: Raster and Vector graphics1046143 Node: Recognized file formats1048368 Ref: Recognized file formats-Footnote-11057994 Node: Color1058041 Node: Pixel colors1058987 Node: Colormaps for single-channel pixels1061059 Node: Vector graphics colors1064859 Ref: colornames1065914 Node: Annotations for figure in paper1066099 Ref: Annotations for figure in paper-Footnote-11081758 Ref: Annotations for figure in paper-Footnote-21081840 Ref: Annotations for figure in paper-Footnote-31081910 Ref: Annotations for figure in paper-Footnote-41082049 Ref: Annotations for figure in paper-Footnote-51082129 Ref: Annotations for figure in paper-Footnote-61082177 Ref: Annotations for figure in paper-Footnote-71082247 Node: Full script of annotations on figure1082329 Node: Invoking astconvertt1086871 Node: ConvertType input and output1088840 Node: Pixel visualization1095679 Ref: Pixel visualization-Footnote-11103477 Node: Drawing with vector graphics1103529 Node: Table1121640 Ref: Table-Footnote-11125066 Node: Printing floating point numbers1125452 Ref: Printing floating point numbers-Footnote-11131356 Node: Vector columns1131436 Ref: Vector columns-Footnote-11141890 Node: Column arithmetic1141966 Ref: Column arithmetic-Footnote-11164395 Node: Operation precedence in Table1164589 Node: Invoking asttable1179534 Node: Query1229345 Ref: Query-Footnote-11232181 Ref: Query-Footnote-21232222 Node: Available databases1232264 Node: Invoking astquery1243047 Node: Data manipulation1258597 Node: Crop1259329 Node: Crop modes1261474 Node: Crop section syntax1269010 Node: Blank pixels1272140 Node: Invoking astcrop1273819 Node: Crop options1278072 Ref: Crop options-Footnote-11293577 Ref: Crop options-Footnote-21293651 Node: Crop output1293699 Node: Crop known issues1303093 Node: Arithmetic1304866 Node: Reverse polish notation1306243 Ref: Reverse polish notation-Footnote-11313397 Ref: Reverse polish notation-Footnote-21313453 Node: Integer benefits and pitfalls1313567 Node: Noise basics1319221 Node: Photon counting noise1320487 Ref: Photon counting noise-Footnote-11327601 Ref: Photon counting noise-Footnote-21327719 Ref: Photon counting noise-Footnote-31327915 Node: Instrumental noise1328342 Node: Final noised pixel value1329813 Node: Generating random numbers1330334 Ref: Generating random numbers-Footnote-11335530 Ref: Generating random numbers-Footnote-21335630 Ref: Generating random numbers-Footnote-31335701 Node: Arithmetic operators1336035 Node: Basic mathematical operators1341291 Node: Trigonometric and hyperbolic operators1348189 Node: Constants1350914 Node: Coordinate conversion operators1352726 Node: Unit conversion operators1359430 Ref: Unit conversion operators-Footnote-11368445 Node: Statistical operators1368743 Node: Stacking operators1373659 Node: Filtering operators1387144 Node: Pooling operators1392471 Node: Interpolation operators1401835 Node: Dimensionality changing operators1405856 Ref: Dimensionality changing operators-Footnote-11422047 Node: Conditional operators1422116 Node: Mathematical morphology operators1430903 Node: Bitwise operators1438346 Node: Numerical type conversion operators1444693 Node: Random number generators1447705 Ref: Random number generators-Footnote-11474971 Node: Coordinate and border operators1475222 Node: Loading external columns1484888 Node: Size and position operators1486459 Node: Building new dataset and stack management1498667 Node: Operand storage in memory or a file1507676 Ref: Operand storage in memory or a file-Footnote-11512905 Node: Invoking astarithmetic1513196 Node: Convolve1528702 Ref: Convolve-Footnote-11531344 Ref: Convolve-Footnote-21531556 Node: Spatial domain convolution1531840 Ref: Spatial domain convolution-Footnote-11533060 Node: Convolution process1533117 Node: Edges in the spatial domain1535949 Ref: Edges in the spatial domain-Footnote-11539166 Ref: Edges in the spatial domain-Footnote-21539262 Node: Frequency domain and Fourier operations1539344 Node: Fourier series historical background1542105 Ref: epicycle1543674 Ref: Fourier series historical background-Footnote-11546853 Ref: Fourier series historical background-Footnote-21546950 Node: Circles and the complex plane1547306 Ref: iandtime1551760 Ref: Circles and the complex plane-Footnote-11552007 Node: Fourier series1552371 Ref: Fourier series-Footnote-11556487 Node: Fourier transform1556584 Ref: Fourier transform-Footnote-11559655 Node: Dirac delta and comb1559897 Node: Convolution theorem1563291 Ref: Convolution theorem-Footnote-11567372 Node: Sampling theorem1567433 Ref: samplingfreq1570203 Ref: Sampling theorem-Footnote-11574315 Node: Discrete Fourier transform1574460 Ref: Discrete Fourier transform-Footnote-11577770 Ref: Discrete Fourier transform-Footnote-21577876 Node: Fourier operations in two dimensions1578009 Ref: Fourier operations in two dimensions-Footnote-11580785 Node: Edges in the frequency domain1580950 Node: Spatial vs. Frequency domain1584636 Node: Convolution kernel1586193 Node: Invoking astconvolve1588934 Node: Warp1598710 Ref: Warp-Footnote-11602066 Ref: Warp-Footnote-21602208 Node: Linear warping basics1602370 Ref: Linear warping basics-Footnote-11608317 Ref: Linear warping basics-Footnote-21608413 Ref: Linear warping basics-Footnote-31608476 Ref: Linear warping basics-Footnote-41608537 Ref: Linear warping basics-Footnote-51608587 Node: Merging multiple warpings1608841 Node: Resampling1610337 Ref: Resampling-Footnote-11616230 Ref: Resampling-Footnote-21616315 Ref: Resampling-Footnote-31616408 Ref: Resampling-Footnote-41616474 Ref: Resampling-Footnote-51616671 Node: Invoking astwarp1616719 Node: Align pixels with WCS considering distortions1622193 Ref: Align pixels with WCS considering distortions-Footnote-11637685 Ref: Align pixels with WCS considering distortions-Footnote-21637761 Node: Linear warps to be called explicitly1637861 Node: Data analysis1646735 Node: Statistics1647611 Node: Histogram and Cumulative Frequency Plot1649273 Ref: Histogram and Cumulative Frequency Plot-Footnote-11653448 Node: 2D Histograms1653606 Node: 2D histogram as a table for plotting1656384 Ref: 2D histogram as a table for plotting-Footnote-11661395 Node: 2D histogram as an image1661493 Node: Least squares fitting1667610 Ref: Least squares fitting-Footnote-11682068 Node: Sky value1682538 Node: Sky value definition1684688 Ref: Sky value definition-Footnote-11688123 Ref: Sky value definition-Footnote-21688443 Node: Sky value misconceptions1688547 Ref: Sky value misconceptions-Footnote-11691046 Node: Quantifying signal in a tile1691317 Ref: Quantifying signal in a tile-Footnote-11701845 Node: Invoking aststatistics1701940 Ref: Invoking aststatistics-Footnote-11708679 Node: Input to Statistics1708885 Node: Single value measurements1711250 Node: Generating histograms and cumulative frequency plots1720071 Ref: Generating histograms and cumulative frequency plots-Footnote-11732223 Node: Fitting options1732293 Node: Contour options1742526 Node: Statistics on tiles1743729 Node: NoiseChisel1750871 Node: NoiseChisel changes after publication1758947 Ref: NoiseChisel changes after publication-Footnote-11761664 Node: Invoking astnoisechisel1761766 Ref: Invoking astnoisechisel-Footnote-11770331 Node: NoiseChisel input1770584 Node: Detection options1778521 Node: NoiseChisel output1810186 Node: Segment1818822 Ref: Segment-Footnote-11823706 Ref: Segment-Footnote-21823775 Node: Invoking astsegment1823911 Node: Segment input1826786 Node: Segmentation options1837922 Node: Segment output1847088 Node: MakeCatalog1854005 Ref: MakeCatalog-Footnote-11858819 Ref: MakeCatalog-Footnote-21859021 Ref: MakeCatalog-Footnote-31859119 Node: Detection and catalog production1859268 Ref: Detection and catalog production-Footnote-11863115 Node: Brightness flux magnitude1863172 Ref: Brightness flux magnitude-Footnote-11875290 Ref: Brightness flux magnitude-Footnote-21875354 Ref: Brightness flux magnitude-Footnote-31875639 Ref: Brightness flux magnitude-Footnote-41875811 Ref: Brightness flux magnitude-Footnote-51876107 Ref: Brightness flux magnitude-Footnote-61876160 Node: Quantifying measurement limits1876247 Node: Standard deviation vs error1878602 Node: Magnitude measurement error of each detection1888356 Node: Surface brightness error of each detection1889828 Node: Completeness limit of each detection1891172 Node: Upper limit magnitude of each detection1893055 Ref: Upper limit magnitude of each detection-Footnote-11897518 Node: Magnitude limit of image1897693 Node: Surface brightness limit of image1899566 Ref: Surface brightness limit of image-Footnote-11905969 Ref: Surface brightness limit of image-Footnote-21906144 Ref: Surface brightness limit of image-Footnote-31906337 Ref: Surface brightness limit of image-Footnote-41906562 Node: Upper limit surface brightness of image1906916 Node: Measuring elliptical parameters1910700 Node: Adding new columns to MakeCatalog1919154 Node: MakeCatalog measurements1924429 Node: Identifier columns1926958 Node: Position measurements in pixels1928326 Node: Position measurements in WCS1932626 Node: Brightness measurements1936966 Node: Surface brightness measurements1948207 Node: Morphology measurements nonparametric1954172 Node: Morphology measurements elliptical1964213 Node: Measurements per slice spectra1966192 Node: Invoking astmkcatalog1970376 Node: MakeCatalog inputs and basic settings1972900 Node: Upper-limit settings1985394 Ref: Upper-limit settings-Footnote-11994489 Ref: Upper-limit settings-Footnote-21994572 Node: MakeCatalog output1994757 Ref: MakeCatalog output-Footnote-12001945 Node: Match2002206 Node: Matching algorithms2003081 Node: Invoking astmatch2012892 Node: Data modeling2033517 Node: MakeProfiles2034057 Node: Modeling basics2036614 Node: Defining an ellipse and ellipsoid2037407 Ref: Defining an ellipse and ellipsoid-Footnote-12042298 Ref: Defining an ellipse and ellipsoid-Footnote-22042505 Node: PSF2042565 Ref: PSF-Footnote-12047239 Node: Stars2047413 Node: Galaxies2048066 Ref: Galaxies-Footnote-12049378 Node: Sampling from a function2049576 Node: Oversampling2054359 Node: If convolving afterwards2055721 Node: Profile magnitude2056982 Node: Invoking astmkprof2058760 Ref: Invoking astmkprof-Footnote-12064608 Node: MakeProfiles catalog2064861 Ref: MakeProfiles catalog-Footnote-12074651 Node: MakeProfiles profile settings2075038 Ref: MakeProfiles profile settings-Footnote-12094026 Node: MakeProfiles output dataset2094176 Ref: MakeProfiles output dataset-Footnote-12107219 Ref: MakeProfiles output dataset-Footnote-22107796 Node: MakeProfiles log file2112550 Node: High-level calculations2113902 Node: CosmicCalculator2114697 Node: Distance on a 2D curved space2116125 Ref: flatplane2118893 Ref: sphereandplane2121119 Ref: Distance on a 2D curved space-Footnote-12127822 Ref: Distance on a 2D curved space-Footnote-22128104 Ref: Distance on a 2D curved space-Footnote-32128548 Ref: Distance on a 2D curved space-Footnote-42128719 Node: Extending distance concepts to 3D2128807 Node: Invoking astcosmiccal2130327 Node: CosmicCalculator input options2133206 Node: CosmicCalculator basic cosmology calculations2135749 Node: CosmicCalculator spectral line calculations2142013 Node: Installed scripts2146711 Ref: Installed scripts-Footnote-12150476 Node: Sort FITS files by night2151123 Node: Invoking astscript-sort-by-night2156279 Node: Generate radial profile2162842 Node: Invoking astscript-radial-profile2163804 Node: SAO DS9 region files from table2183836 Ref: SAO DS9 region files from table-Footnote-12184831 Node: Invoking astscript-ds9-region2184859 Node: Viewing FITS file contents with DS9 or TOPCAT2191890 Node: Invoking astscript-fits-view2196095 Node: Zero point estimation2202018 Ref: Zero point estimation-Footnote-12204758 Ref: Zero point estimation-Footnote-22204913 Ref: Zero point estimation-Footnote-32205002 Node: Invoking astscript-zeropoint2205079 Node: zero point output2208900 Node: zero point options2210790 Ref: zero point options-Footnote-12217397 Node: Pointing pattern simulation2217499 Node: Invoking astscript-pointing-simulate2221926 Node: Color images with gray faint regions2232676 Node: Invoking astscript-color-faint-gray2234856 Node: PSF construction and subtraction2248859 Ref: PSF construction and subtraction-Footnote-12251222 Node: Overview of the PSF scripts2251389 Node: Invoking astscript-psf-select-stars2257183 Node: Invoking astscript-psf-stamp2265744 Node: Invoking astscript-psf-unite2277016 Node: Invoking astscript-psf-scale-factor2282015 Node: Invoking astscript-psf-subtract2288558 Node: Makefile extensions2293475 Node: Loading the Gnuastro Make functions2294972 Node: Makefile functions of Gnuastro2296491 Node: Text functions for Makefiles2298403 Node: Astronomy functions for Makefiles2301131 Node: Library2306223 Node: Review of library fundamentals2308470 Node: Headers2310588 Ref: Headers-Footnote-12320717 Ref: Headers-Footnote-22320775 Ref: Headers-Footnote-32320966 Ref: Headers-Footnote-42321081 Ref: Headers-Footnote-52321187 Node: Linking2321268 Ref: Linking-Footnote-12332870 Ref: Linking-Footnote-22333061 Ref: Linking-Footnote-32333341 Ref: Linking-Footnote-42333515 Ref: Linking-Footnote-52333771 Node: Summary and example on libraries2333865 Node: BuildProgram2337769 Node: Invoking astbuildprog2339299 Node: Gnuastro library2349455 Ref: Gnuastro library-Footnote-12354506 Node: Configuration information2354643 Ref: Configuration information-Footnote-12359687 Node: Multithreaded programming2359742 Ref: Multithreaded programming-Footnote-12362786 Ref: Multithreaded programming-Footnote-22362944 Node: Implementation of pthread_barrier2363006 Node: Gnuastro's thread related functions2365869 Node: Library data types2374046 Node: Pointers2389903 Node: Library blank values2395984 Node: Library data container2413644 Node: Generic data container2414840 Ref: Generic data container-Footnote-12427971 Ref: Generic data container-Footnote-22428030 Ref: Generic data container-Footnote-32428108 Node: Dataset allocation2428177 Node: Arrays of datasets2432646 Node: Copying datasets2435325 Node: Dimensions2439095 Node: Linked lists2462218 Ref: Linked lists-Footnote-12467280 Node: List of strings2467679 Node: List of int32_t2472113 Node: List of size_t2475849 Ref: List of size_t-Footnote-12480319 Node: List of float2480421 Node: List of double2484108 Node: List of void2488295 Node: Ordered list of size_t2491102 Node: Doubly linked ordered list of size_t2494081 Node: List of gal_data_t2497508 Node: Array input output2502443 Node: Table input output2508137 Node: FITS files2523680 Node: FITS macros errors filenames2525594 Node: CFITSIO and Gnuastro types2528433 Node: FITS HDUs2530940 Node: FITS header keywords2535661 Ref: FITS header keywords-Footnote-12558446 Node: FITS arrays2558660 Node: FITS tables2566730 Node: File input output2572449 Node: Text files2573462 Node: TIFF files2584708 Node: JPEG files2587433 Node: EPS files2590217 Node: PDF files2596647 Node: World Coordinate System2599879 Ref: World Coordinate System-Footnote-12629951 Ref: World Coordinate System-Footnote-22630028 Ref: World Coordinate System-Footnote-32630101 Ref: World Coordinate System-Footnote-42630177 Node: Arithmetic on datasets2630351 Node: Tessellation library2661734 Node: Independent tiles2665885 Node: Tile grid2680852 Node: Bounding box2692738 Node: Polygons2698379 Node: Qsort functions2715219 Node: K-d tree2721164 Ref: K-d tree-Footnote-12732739 Node: Permutations2733138 Ref: Permutations-Footnote-12736397 Node: Matching2736689 Node: Statistical operations2744462 Node: Fitting functions2774148 Ref: Fitting functions-Footnote-12784779 Ref: Fitting functions-Footnote-22784873 Ref: Fitting functions-Footnote-32784970 Ref: Fitting functions-Footnote-42785052 Node: Binary datasets2785139 Node: Labeled datasets2798932 Ref: Labeled datasets-Footnote-12814769 Ref: Labeled datasets-Footnote-22815107 Node: Convolution functions2815274 Ref: Convolution functions-Footnote-12819109 Node: Pooling functions2819162 Node: Interpolation2821169 Ref: Interpolation-Footnote-12833701 Node: Warp library2833763 Node: Color functions2845387 Node: Git wrappers2847477 Node: Python interface2849309 Node: Unit conversion library2852404 Node: Spectral lines library2859007 Ref: Spectral lines library-Footnote-12870328 Node: Cosmology library2870398 Node: SAO DS9 library2873804 Ref: SAO DS9 library-Footnote-12876352 Node: Library demo programs2876415 Node: Library demo - reading a image2877534 Node: Library demo - inspecting neighbors2881560 Node: Library demo - multi-threaded operation2885043 Node: Library demo - reading and writing table columns2892451 Node: Library demo - Warp to another image2900295 Node: Library demo - Warp to new grid2906909 Node: Developing2914098 Node: Why C2916507 Ref: Why C-Footnote-12923521 Ref: Why C-Footnote-22923551 Ref: Why C-Footnote-32923619 Ref: Why C-Footnote-42923653 Ref: Why C-Footnote-52923686 Ref: Why C-Footnote-62923751 Ref: Why C-Footnote-72923950 Ref: Why C-Footnote-82924056 Ref: Why C-Footnote-92924130 Ref: Why C-Footnote-102924256 Ref: Why C-Footnote-112924303 Ref: Why C-Footnote-122924534 Ref: Why C-Footnote-132924650 Node: Program design philosophy2924696 Ref: Program design philosophy-Footnote-12927760 Ref: Program design philosophy-Footnote-22928022 Ref: Program design philosophy-Footnote-32928130 Node: Coding conventions2928178 Ref: Coding conventions-Footnote-12940616 Ref: Coding conventions-Footnote-22940688 Ref: Coding conventions-Footnote-32940994 Ref: Coding conventions-Footnote-42941149 Node: Program source2941417 Node: Mandatory source code files2942524 Node: The TEMPLATE program2951629 Node: Documentation2956835 Node: Building and debugging2961784 Node: Test scripts2964799 Ref: Test scripts-Footnote-12967401 Ref: Test scripts-Footnote-22967568 Node: Bash programmable completion2967752 Node: Bash TAB completion tutorial2969668 Ref: Bash TAB completion tutorial-Footnote-12981241 Ref: Bash TAB completion tutorial-Footnote-22981341 Ref: Bash TAB completion tutorial-Footnote-32981423 Node: Implementing TAB completion in Gnuastro2981505 Node: Developer's checklist2985058 Node: Gnuastro project webpage2986995 Ref: Gnuastro project webpage-Footnote-12991202 Ref: Gnuastro project webpage-Footnote-22991256 Ref: Gnuastro project webpage-Footnote-32991292 Node: Developing mailing lists2991415 Node: Contributing to Gnuastro2993669 Node: Copyright assignment2995669 Node: Commit guidelines2999757 Ref: Commit guidelines-Footnote-13006020 Node: Production workflow3010365 Ref: Production workflow-Footnote-13013262 Ref: Production workflow-Footnote-23013341 Ref: Production workflow-Footnote-33013424 Node: Forking tutorial3013506 Ref: Forking tutorial-Footnote-13021656 Ref: Forking tutorial-Footnote-23021937 Node: Other useful software3022047 Node: SAO DS93022574 Node: TOPCAT3026319 Node: PGPLOT3029175 Ref: PGPLOT-Footnote-13032767 Node: GNU Free Doc License3032819 Node: GNU General Public License3057974 Node: Index3095560  End Tag Table  Local Variables: coding: utf-8 End: ���������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro.info-1�������������������������������������������������������������������0000644�0001750�0001750�00001114252�14557514034�012420� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is gnuastro.info, produced by makeinfo version 7.1 from gnuastro.texi. This book documents version 0.22 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * Match: (gnuastro)Match. Match two separate catalogs. * astmatch: (gnuastro)Invoking astmatch. Options to Match. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Segment: (gnuastro)Segment. Segment detections based on signal structure. * astsegment: (gnuastro)Invoking astsegment. Options to Segment. * Query: (gnuastro)Query. Access remote databases for downloading data. * astquery: (gnuastro)Invoking astquery. Options to Query. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. * astscript: (gnuastro)Installed scripts. Gnuastro's installed scripts. * astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script * astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script * astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script * astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script * astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script * astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script * astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script * astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script * astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script * astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script * astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script END-INFO-DIR-ENTRY  File: gnuastro.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) GNU Astronomy Utilities *********************** This book documents version 0.22 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". * Menu: * Introduction:: General introduction. * Tutorials:: Tutorials or Cookbooks. * Installation:: Requirements and installation. * Common program behavior:: Common behavior in all programs. * Data containers:: Tools to operate on extensions and tables. * Data manipulation:: Tools for basic image manipulation. * Data analysis:: Analyze images. * Data modeling:: Modeling observed data. * High-level calculations:: Physical calculations. * Installed scripts:: Installed scripts that operate like programs. * Makefile extensions:: Use Gnuastro's features as GNU Make functions. * Library:: Gnuastro's library of useful functions. * Developing:: The development environment. * Other useful software:: Installing other useful software. * GNU Free Doc License:: Full text of the GNU Free documentation license. * GNU General Public License:: Full text of the GNU General public license. * Index:: Index of terms -- The Detailed Node Listing -- Introduction * Quick start:: A quick start to installation. * Gnuastro programs list:: List of command-line programs. * Science and its tools:: Some philosophy and history. * Your rights:: User rights. * Logo of Gnuastro:: Meaning behind Gnuastro's logo. * Naming convention:: About names of programs in Gnuastro. * Version numbering:: Understanding version numbers. * New to GNU/Linux?:: Suggested GNU/Linux distribution. * Report a bug:: Search and report the bug you found. * Suggest new feature:: How to suggest a new feature. * Announcements:: How to stay up to date with Gnuastro. * Conventions:: Conventions used in this book. * Acknowledgments:: People who helped in the production. Version numbering * GNU Astronomy Utilities 1.0:: Plans for version 1.0 release New to GNU/Linux? * Command-line interface:: Introduction to the command-line Tutorials * General program usage tutorial:: Tutorial on many programs in generic scenario. * Detecting large extended targets:: NoiseChisel for huge extended targets. * Building the extended PSF:: How to extract an extended PSF from science data. * Sufi simulates a detection:: Simulating a detection. * Detecting lines and extracting spectra in 3D data:: Extracting spectra and emission line properties. * Color images with full dynamic range:: Bright pixels with color, faint pixels in grayscale. * Zero point of an image:: Estimate the zero point of an image. * Pointing pattern design:: Optimizing the pointings of your observations. * Moire pattern in stacking and its correction:: How to avoid this grid-based artifact. * Clipping outliers:: How to avoid outliers in your measurements. General program usage tutorial * Calling Gnuastro's programs:: Easy way to find Gnuastro's programs. * Accessing documentation:: Access to manual of programs you are running. * Setup and data download:: Setup this template and download datasets. * Dataset inspection and cropping:: Crop the flat region to use in next steps. * Angular coverage on the sky:: Measure the field size on the sky. * Cosmological coverage and visualizing tables:: Size in Mpc2, and plotting its change. * Building custom programs with the library:: Easy way to build new programs. * Option management and configuration files:: Dealing with options and configuring them. * Warping to a new pixel grid:: Transforming/warping the dataset. * NoiseChisel and Multi-Extension FITS files:: Running NoiseChisel and having multiple HDUs. * NoiseChisel optimization for detection:: Check NoiseChisel's operation and improve it. * NoiseChisel optimization for storage:: Dramatically decrease output's volume. * Segmentation and making a catalog:: Finding true peaks and creating a catalog. * Measuring the dataset limits:: One way to measure the "depth" of your data. * Working with catalogs estimating colors:: Estimating colors using the catalogs. * Column statistics color-magnitude diagram:: Visualizing column correlations. * Aperture photometry:: Doing photometry on a fixed aperture. * Matching catalogs:: Easily find corresponding rows from two catalogs. * Reddest clumps cutouts and parallelization:: Parallelization and selecting a subset of the data. * FITS images in a publication:: How to display FITS images in a PDF. * Marking objects for publication:: How to mark some objects over the image in a PDF. * Writing scripts to automate the steps:: Scripts will greatly help in re-doing things fast. * Citing and acknowledging Gnuastro:: How to cite and acknowledge Gnuastro in your papers. Detecting large extended targets * Downloading and validating input data:: How to get and check the input data. * NoiseChisel optimization:: Detect the extended and diffuse wings. * Skewness caused by signal and its measurement:: How signal changes the distribution. * Image surface brightness limit:: Standards to quantify the noise level. * Achieved surface brightness level:: Calculate the outer surface brightness. * Extract clumps and objects:: Find sub-structure over the detections. Building the extended PSF * Preparing input for extended PSF:: Which stars should be used? * Saturated pixels and Segment's clumps:: Saturation is a major hurdle! * One object for the whole detection:: Avoiding over-segmentation in objects. * Building outer part of PSF:: Building the outermost PSF wings. * Inner part of the PSF:: Going towards the PSF center. * Uniting the different PSF components:: Merging all the components into one PSF. * Subtracting the PSF:: Having the PSF, we now want to subtract it. Detecting lines and extracting spectra in 3D data * Viewing spectra and redshifted lines:: Interactively see the spectra of an object * Sky lines in optical IFUs:: How to see sky lines in a cube. * Continuum subtraction:: Removing the continuum from a data cube. * 3D detection with NoiseChisel:: Finding emission-lines and their spectra. * 3D measurements and spectra:: Measuring 3d properties including spectra. * Extracting a single spectrum and plotting it:: Extracting a single vector row. * Pseudo narrow-band images:: Collapsing the third dimension into a 2D image. Color images with full dynamic range * Color channels in same pixel grid:: Warping all inputs to the same pixel grid. * Color image using linear transformation:: A linear color mapping won't show much! * Color for bright regions and grayscale for faint:: Show the full dynamic range. * Manually setting color-black-gray regions:: Physically motivated regions. * Weights contrast markers and other customizations:: Nice ways to enhance visual appearance. Zero point of an image * Zero point tutorial with reference image:: Using a reference image. * Zero point tutorial with reference catalog:: Using a reference catalog. Pointing pattern design * Preparing input and generating exposure map:: Download and image and build exposure map. * Area of non-blank pixels on sky:: Account for the curved area on the sky. * Script with pointing simulation steps so far:: Summary of steps for easy testing. * Larger steps sizes for better calibration:: The initial small dither is not enough. * Pointings that account for sky curvature:: Sky curvature will cause problems! * Accounting for non-exposed pixels:: Parts of the detector do not get exposed to light. Clipping outliers * Building inputs and analysis without clipping:: Building a dataset for demonstration below. * Sigma clipping:: Standard deviation (STD) clipping. * MAD clipping:: Median Absolute Deviation (MAD) clipping. * Filled re-clipping:: Two clips with holes filled in the middle. Installation * Dependencies:: Necessary packages for Gnuastro. * Downloading the source:: Ways to download the source code. * Build and install:: Configure, build and install Gnuastro. Dependencies * Mandatory dependencies:: Gnuastro will not install without these. * Optional dependencies:: Adding more functionality. * Bootstrapping dependencies:: If you have the version controlled source. * Dependencies from package managers:: Installing from OS package managers. Mandatory dependencies * GNU Scientific Library:: Installing GSL. * CFITSIO:: C interface to the FITS standard. * WCSLIB:: C interface to the WCS standard of FITS. Downloading the source * Release tarball:: Download a stable official release. * Version controlled source:: Get and use the version controlled source. Version controlled source * Bootstrapping:: Adding all the automatically generated files. * Synchronizing:: Keep your local clone up to date. Build and install * Configuring:: Configure Gnuastro * Separate build and source directories:: Keeping derivate/build files separate. * Tests:: Run tests to see if it is working. * A4 print book:: Customize the print book. * Known issues:: Issues you might encounter. Configuring * Gnuastro configure options:: Configure options particular to Gnuastro. * Installation directory:: Specify the directory to install. * Executable names:: Changing executable names. * Configure and build in RAM:: For minimal use of HDD or SSD, and clean source. Common program behavior * Command-line:: How to use the command-line. * Configuration files:: Values for unspecified variables. * Getting help:: Getting more information on the go. * Multi-threaded operations:: How threads are managed in Gnuastro. * Numeric data types:: Different types and how to specify them. * Memory management:: How memory is allocated (in RAM or HDD/SSD). * Tables:: Recognized table formats. * Tessellation:: Tile the dataset into non-overlapping bins. * Automatic output:: About automatic output names. * Output FITS files:: Common properties when outputs are FITS. * Numeric locale:: Decimal point printed like 0.5 instead of 0,5. Command-line * Arguments and options:: Different ways to specify inputs and configuration. * Common options:: Options that are shared between all programs. * Shell TAB completion:: Customized TAB completion in Gnuastro. * Standard input:: Using output of another program as input. * Shell tips:: Useful tips and tricks for program usage. Arguments and options * Arguments:: For specifying the main input files/operations. * Options:: For configuring the behavior of the program. Common options * Input output options:: Common input/output options. * Processing options:: Options for common processing steps. * Operating mode options:: Common operating mode options. Shell tips * Separate shell variables for multiple outputs:: When you get values from one command. * Truncating start of long string FITS keyword values:: When the end of the string matters. Configuration files * Configuration file format:: ASCII format of configuration file. * Configuration file precedence:: Precedence of configuration files. * Current directory and User wide:: Local and user configuration files. * System wide:: System wide configuration files. Getting help * --usage:: View option names and value formats. * --help:: List all options with description. * Man pages:: Man pages generated from -help. * Info:: View complete book in terminal. * help-gnuastro mailing list:: Contacting experienced users. Multi-threaded operations * A note on threads:: Caution and suggestion on using threads. * How to run simultaneous operations:: How to run things simultaneously. Tables * Recognized table formats:: Table formats that are recognized in Gnuastro. * Gnuastro text table format:: Gnuastro's convention plain text tables. * Selecting table columns:: Identify/select certain columns from a table Recognized table formats * Gnuastro text table format:: Reading plain text tables Data containers * Fits:: View and manipulate extensions and keywords. * ConvertType:: Convert data to various formats. * Table:: Read and Write FITS tables to plain text. * Query:: Import data from external databases. Fits * Invoking astfits:: Arguments and options to Header. Invoking Fits * HDU information and manipulation:: Learn about the HDUs and move them. * Keyword inspection and manipulation:: Manipulate metadata keywords in a HDU. * Pixel information images:: Pixel values contain information on the pixels. ConvertType * Raster and Vector graphics:: Images coming from nature, and the abstract. * Recognized file formats:: Recognized file formats * Color:: Some explanations on color. * Annotations for figure in paper:: Adding coordinates or physical scale. * Invoking astconvertt:: Options and arguments to ConvertType. Color * Pixel colors:: Multiple filters in each pixel. * Colormaps for single-channel pixels:: Better display of single-filter images. * Vector graphics colors:: Annotations for figure in paper * Full script of annotations on figure:: All the steps in one script Invoking ConvertType * ConvertType input and output:: Input/output file names and formats. * Pixel visualization:: Visualizing the pixels in the output. * Drawing with vector graphics:: Adding marks in many shapes and colors over the pixels. Table * Printing floating point numbers:: Optimal storage of floating point types. * Vector columns:: How to keep more than one value in each column. * Column arithmetic:: How to do operations on table columns. * Operation precedence in Table:: Order of running options in Table. * Invoking asttable:: Options and arguments to Table. Query * Available databases:: List of available databases to Query. * Invoking astquery:: Inputs, outputs and configuration of Query. Data manipulation * Crop:: Crop region(s) from a dataset. * Arithmetic:: Arithmetic on input data. * Convolve:: Convolve an image with a kernel. * Warp:: Warp/Transform an image to a different grid. Crop * Crop modes:: Basic modes to define crop region. * Crop section syntax:: How to define a section to crop. * Blank pixels:: Pixels with no value. * Invoking astcrop:: Calling Crop on the command-line Invoking Crop * Crop options:: A list of all the options with explanation. * Crop output:: The outputs of Crop. * Crop known issues:: Known issues in running Crop. Arithmetic * Reverse polish notation:: The current notation style for Arithmetic. * Integer benefits and pitfalls:: Integers have benefits, but require care. * Noise basics:: Introduction various noise models. * Arithmetic operators:: List of operators known to Arithmetic. * Invoking astarithmetic:: How to run Arithmetic: options and output. Noise basics * Photon counting noise:: Poisson noise * Instrumental noise:: Readout, dark current and other sources. * Final noised pixel value:: How the final noised value is calculated. * Generating random numbers:: How random numbers are generated. Arithmetic operators * Basic mathematical operators:: For example, +, -, /, log, and pow. * Trigonometric and hyperbolic operators:: sin, cos, atan, asinh, etc. * Constants:: Physical and Mathematical constants. * Coordinate conversion operators:: For example equatorial J2000 to Galactic. * Unit conversion operators:: Various unit conversions necessary. * Statistical operators:: Statistics of a single dataset (for example, mean). * Stacking operators:: Coadding or combining multiple datasets into one. * Filtering operators:: Smoothing a dataset through mixing pixel with neighbors. * Pooling operators:: Reducing size through statistics of pixels in window. * Interpolation operators:: Giving blank pixels a value. * Dimensionality changing operators:: Collapse or expand a dataset. * Conditional operators:: Select certain pixels within the dataset. * Mathematical morphology operators:: Work on binary images, for example, erode. * Bitwise operators:: Work on bits within one pixel. * Numerical type conversion operators:: Convert the numeric datatype of a dataset. * Random number generators:: Random numbers can be used to add noise for example. * Coordinate and border operators:: Return edges of 2D boxes. * Loading external columns:: Read a column from a table into the stack. * Size and position operators:: Extracting image size and pixel positions. * Building new dataset and stack management:: How to construct an empty dataset from scratch. * Operand storage in memory or a file:: Tools for complex operations in one command. Convolve * Spatial domain convolution:: Only using the input image values. * Frequency domain and Fourier operations:: Using frequencies in input. * Spatial vs. Frequency domain:: When to use which? * Convolution kernel:: How to specify the convolution kernel. * Invoking astconvolve:: Options and argument to Convolve. Spatial domain convolution * Convolution process:: More basic explanations. * Edges in the spatial domain:: Dealing with the edges of an image. Frequency domain and Fourier operations * Fourier series historical background:: Historical background. * Circles and the complex plane:: Interpreting complex numbers. * Fourier series:: Fourier Series definition. * Fourier transform:: Fourier Transform definition. * Dirac delta and comb:: Dirac delta and Dirac comb. * Convolution theorem:: Derivation of Convolution theorem. * Sampling theorem:: Sampling theorem (Nyquist frequency). * Discrete Fourier transform:: Derivation and explanation of DFT. * Fourier operations in two dimensions:: Extend to 2D images. * Edges in the frequency domain:: Interpretation of edge effects. Warp * Linear warping basics:: Basics of coordinate transformation. * Merging multiple warpings:: How to merge multiple matrices. * Resampling:: Warping an image is re-sampling it. * Invoking astwarp:: Arguments and options for Warp. Invoking Warp * Align pixels with WCS considering distortions:: Default operation. * Linear warps to be called explicitly:: Other warps. Data analysis * Statistics:: Calculate dataset statistics. * NoiseChisel:: Detect objects in an image. * Segment:: Segment detections based on signal structure. * MakeCatalog:: Catalog from input and labeled images. * Match:: Match two datasets. Statistics * Histogram and Cumulative Frequency Plot:: Basic definitions. * 2D Histograms:: Plotting the distribution of two variables. * Least squares fitting:: Fitting with various parametric functions. * Sky value:: Definition and derivation of the Sky value. * Invoking aststatistics:: Arguments and options to Statistics. 2D Histograms * 2D histogram as a table for plotting:: Format and usage in table format. * 2D histogram as an image:: Format and usage in image format Sky value * Sky value definition:: Definition of the Sky/reference value. * Sky value misconceptions:: Wrong methods to estimate the Sky value. * Quantifying signal in a tile:: Method to estimate the presence of signal. Invoking Statistics * Input to Statistics:: How to specify the inputs to Statistics. * Single value measurements:: Can be used together (like -mean, or -maximum). * Generating histograms and cumulative frequency plots:: Histogram and CFP tables. * Fitting options:: Least squares fitting. * Contour options:: Table of contours. * Statistics on tiles:: Possible to do single-valued measurements on tiles. NoiseChisel * NoiseChisel changes after publication:: Updates since published papers. * Invoking astnoisechisel:: Options and arguments for NoiseChisel. Invoking NoiseChisel * NoiseChisel input:: NoiseChisel's input options. * Detection options:: Configure detection in NoiseChisel. * NoiseChisel output:: NoiseChisel's output options and format. Segment * Invoking astsegment:: Inputs, outputs and options to Segment Invoking Segment * Segment input:: Input files and options. * Segmentation options:: Parameters of the segmentation process. * Segment output:: Outputs of Segment MakeCatalog * Detection and catalog production:: Discussing why/how to treat these separately * Brightness flux magnitude:: More on Magnitudes, surface brightness, etc. * Quantifying measurement limits:: For comparing different catalogs. * Measuring elliptical parameters:: Estimating elliptical parameters. * Adding new columns to MakeCatalog:: How to add new columns. * MakeCatalog measurements:: List of all the measurements/columns by MakeCatalog. * Invoking astmkcatalog:: Options and arguments to MakeCatalog. Quantifying measurement limits * Standard deviation vs error:: The std is not a measure of the error. * Magnitude measurement error of each detection:: Error in measuring magnitude. * Surface brightness error of each detection:: Error in measuring the Surface brightness. * Completeness limit of each detection:: Possibility of detecting similar objects? * Upper limit magnitude of each detection:: How reliable is your magnitude? * Magnitude limit of image:: Measured magnitude of objects at certain S/N. * Surface brightness limit of image:: Extrapolate per-pixel noise-level to standard units. * Upper limit surface brightness of image:: Measure the noise-level for a certain aperture. MakeCatalog measurements * Identifier columns:: Identifying labels of each row (object/clumps). * Position measurements in pixels:: Containing image/pixel (X/Y) measurements. * Position measurements in WCS:: Containing WCS (for example RA/Dec) measurements. * Brightness measurements:: Using pixel values of each label. * Surface brightness measurements:: Various ways to measure surface brightness. * Morphology measurements nonparametric:: Non-parametric morphology. * Morphology measurements elliptical:: Elliptical morphology measurements. * Measurements per slice spectra:: Measurements on each slice (like spectra). Invoking MakeCatalog * MakeCatalog inputs and basic settings:: Input files and basic settings. * Upper-limit settings:: Settings for upper-limit measurements. * MakeCatalog output:: File names of MakeCatalog's output table. Match * Matching algorithms:: Different ways to find the match * Invoking astmatch:: Inputs, outputs and options of Match Data modeling * MakeProfiles:: Making mock galaxies and stars. MakeProfiles * Modeling basics:: Astronomical modeling basics. * If convolving afterwards:: Considerations for convolving later. * Profile magnitude:: Definition of total profile magnitude. * Invoking astmkprof:: Inputs and Options for MakeProfiles. Modeling basics * Defining an ellipse and ellipsoid:: Definition of these important shapes. * PSF:: Radial profiles for the PSF. * Stars:: Making mock star profiles. * Galaxies:: Radial profiles for galaxies. * Sampling from a function:: Sample a function on a pixelated canvas. * Oversampling:: Oversampling the model. Invoking MakeProfiles * MakeProfiles catalog:: Required catalog properties. * MakeProfiles profile settings:: Configuration parameters for all profiles. * MakeProfiles output dataset:: The canvas/dataset to build profiles over. * MakeProfiles log file:: A description of the optional log file. High-level calculations * CosmicCalculator:: Calculate cosmological variables CosmicCalculator * Distance on a 2D curved space:: Distances in 2D for simplicity. * Extending distance concepts to 3D:: Going to 3D (our real universe). * Invoking astcosmiccal:: How to run CosmicCalculator. Invoking CosmicCalculator * CosmicCalculator input options:: Options to specify input conditions. * CosmicCalculator basic cosmology calculations:: Such as distance modulus and distances. * CosmicCalculator spectral line calculations:: How they get affected by redshift. Installed scripts * Sort FITS files by night:: Sort many files by date. * Generate radial profile:: Radial profile of an object in an image. * SAO DS9 region files from table:: Create ds9 region file from a table. * Viewing FITS file contents with DS9 or TOPCAT:: Open DS9 (images/cubes) or TOPCAT (tables). * Zero point estimation:: Zero point of an image from reference catalog or image(s). * Pointing pattern simulation:: Simulate a stack with a given series of pointings. * Color images with gray faint regions:: Color for bright pixels and grayscale for faint. * PSF construction and subtraction:: Set of scripts to create extended PSF of an image. Sort FITS files by night * Invoking astscript-sort-by-night:: Inputs and outputs to this script. Generate radial profile * Invoking astscript-radial-profile:: How to call astscript-radial-profile SAO DS9 region files from table * Invoking astscript-ds9-region:: How to call astscript-ds9-region Viewing FITS file contents with DS9 or TOPCAT * Invoking astscript-fits-view:: How to call this script Zero point estimation * Invoking astscript-zeropoint:: How to call the script Invoking astscript-zeropoint * zero point output:: Format of the output. * zero point options:: List and details of options. Pointing pattern simulation * Invoking astscript-pointing-simulate:: Options and running mode. Color images with gray faint regions * Invoking astscript-color-faint-gray:: Details of options and arguments. PSF construction and subtraction * Overview of the PSF scripts:: Summary of concepts and methods * Invoking astscript-psf-select-stars:: Select good starts within an image. * Invoking astscript-psf-stamp:: Make a stamp of each star to stack. * Invoking astscript-psf-unite:: Merge stacks of different regions of PSF. * Invoking astscript-psf-scale-factor:: Calculate factor to scale PSF to star. * Invoking astscript-psf-subtract:: Put the PSF in the image to subtract. Makefile extensions (for GNU Make) * Loading the Gnuastro Make functions:: How to find and load Gnuastro's Make library. * Makefile functions of Gnuastro:: The available functions. Makefile functions of Gnuastro * Text functions for Makefiles:: Basic text operations to supplement Make. * Astronomy functions for Makefiles:: Astronomy/FITS related functions. Library * Review of library fundamentals:: Guide on libraries and linking. * BuildProgram:: Link and run source files with this library. * Gnuastro library:: Description of all library functions. * Library demo programs:: Demonstration for using libraries. Review of library fundamentals * Headers:: Header files included in source. * Linking:: Linking the compiled source files into one. * Summary and example on libraries:: A summary and example on using libraries. BuildProgram * Invoking astbuildprog:: Options and examples for using this program. Gnuastro library * Configuration information:: General information about library config. * Multithreaded programming:: Tools for easy multi-threaded operations. * Library data types:: Definitions and functions for types. * Pointers:: Wrappers for easy working with pointers.** * Library blank values:: Blank values and functions to deal with them. * Library data container:: General data container in Gnuastro. * Dimensions:: Dealing with coordinates and dimensions. * Linked lists:: Various types of linked lists. * Array input output:: Reading and writing images or cubes. * Table input output:: Reading and writing table columns. * FITS files:: Working with FITS data. * File input output:: Reading and writing to various file formats. * World Coordinate System:: Dealing with the world coordinate system. * Arithmetic on datasets:: Arithmetic operations on a dataset. * Tessellation library:: Functions for working on tiles. * Bounding box:: Finding the bounding box. * Polygons:: Working with the vertices of a polygon. * Qsort functions:: Helper functions for Qsort. * K-d tree:: Space partitioning in K dimensions. * Permutations:: Re-order (or permute) the values in a dataset. * Matching:: Matching catalogs based on position. * Statistical operations:: Functions for basic statistics. * Fitting functions:: Fit independent and measured variables. * Binary datasets:: Datasets that can only have values of 0 or 1. * Labeled datasets:: Working with Segmented/labeled datasets. * Convolution functions:: Library functions to do convolution. * Pooling functions:: Reduce size of input by statistical methods. * Interpolation:: Interpolate (over blank values possibly). * Warp library:: Warp pixel grid to a new one. * Color functions:: Definitions and operations related to colors. * Git wrappers:: Wrappers for functions in libgit2. * Python interface:: Functions to help in writing Python wrappers. * Unit conversion library:: Converting between recognized units. * Spectral lines library:: Functions for operating on Spectral lines. * Cosmology library:: Cosmological calculations. * SAO DS9 library:: Take inputs from files generated by SAO DS9. Multithreaded programming (‘threads.h’) * Implementation of pthread_barrier:: Some systems do not have pthread_barrier * Gnuastro's thread related functions:: Functions for managing threads. Data container (‘data.h’) * Generic data container:: Definition of Gnuastro's generic container. * Dataset allocation:: Allocate, initialize and free a dataset. * Arrays of datasets:: Functions to help with array of datasets. * Copying datasets:: Functions to copy a dataset to a new one. Linked lists (‘list.h’) * List of strings:: Simply linked list of strings. * List of int32_t:: Simply linked list of int32_ts. * List of size_t:: Simply linked list of size_ts. * List of float:: Simply linked list of floats. * List of double:: Simply linked list of doubles * List of void:: Simply linked list of void * pointers. * Ordered list of size_t:: Simply linked, ordered list of size_t. * Doubly linked ordered list of size_t:: Definition and functions. * List of gal_data_t:: Simply linked list Gnuastro's generic datatype. FITS files (‘fits.h’) * FITS macros errors filenames:: General macros, errors and checking names. * CFITSIO and Gnuastro types:: Conversion between FITS and Gnuastro types. * FITS HDUs:: Opening and getting information about HDUs. * FITS header keywords:: Reading and writing FITS header keywords. * FITS arrays:: Reading and writing FITS images/arrays. * FITS tables:: Reading and writing FITS tables. File input output * Text files:: Reading and writing from/to plain text files. * TIFF files:: Reading and writing from/to TIFF files. * JPEG files:: Reading and writing from/to JPEG files. * EPS files:: Writing to EPS files. * PDF files:: Writing to PDF files. Tessellation library (‘tile.h’) * Independent tiles:: Work on or check independent tiles. * Tile grid:: Cover a full dataset with non-overlapping tiles. Library demo programs * Library demo - reading a image:: Read a FITS image into memory. * Library demo - inspecting neighbors:: Inspect the neighbors of a pixel. * Library demo - multi-threaded operation:: Doing an operation on threads. * Library demo - reading and writing table columns:: Simple Column I/O. * Library demo - Warp to another image:: Output pixel grid and WCS from another image. * Library demo - Warp to new grid:: Define a new pixel grid and WCS to resample the input. Developing * Why C:: Why Gnuastro is designed in C. * Program design philosophy:: General ideas behind the package structure. * Coding conventions:: Gnuastro coding conventions. * Program source:: Conventions for the code. * Documentation:: Documentation is an integral part of Gnuastro. * Building and debugging:: Build and possibly debug during development. * Test scripts:: Understanding the test scripts. * Bash programmable completion:: Auto-completions for better user experience. * Developer's checklist:: Checklist to finalize your changes. * Gnuastro project webpage:: Central hub for Gnuastro activities. * Developing mailing lists:: Stay up to date with Gnuastro's development. * Contributing to Gnuastro:: Share your changes with all users. Program source * Mandatory source code files:: Description of files common to all programs. * The TEMPLATE program:: Template for easy creation of a new program. Bash programmable completion * Bash TAB completion tutorial:: Fast tutorial to get you started on concepts. * Implementing TAB completion in Gnuastro:: How Gnuastro uses Bash auto-completion features. Contributing to Gnuastro * Copyright assignment:: Copyright has to be assigned to the FSF. * Commit guidelines:: Guidelines for commit messages. * Production workflow:: Submitting your commits (work) for inclusion. * Forking tutorial:: Tutorial on workflow steps with Git. Other useful software * SAO DS9:: Viewing FITS images. * TOPCAT:: Plotting tables of data. * PGPLOT:: Plotting directly in C.  File: gnuastro.info, Node: Introduction, Next: Tutorials, Prev: Top, Up: Top 1 Introduction ************** GNU Astronomy Utilities (Gnuastro) is an official GNU package consisting of separate programs and libraries for the manipulation and analysis of astronomical data. All the programs share the same basic command-line user interface for the comfort of both the users and developers. Gnuastro is written to comply fully with the GNU coding standards so it integrates finely with the GNU/Linux operating system. This also enables astronomers to expect a fully familiar experience in the source code, building, installing and command-line user interaction that they have seen in all the other GNU software that they use. The official and always up to date version of this book (or manual) is freely available under *note GNU Free Doc License:: in various formats (PDF, HTML, plain text, info, and as its Texinfo source) at <http://www.gnu.org/software/gnuastro/manual/>. For users who are new to the GNU/Linux environment, unless otherwise specified most of the topics in *note Installation:: and *note Common program behavior:: are common to all GNU software, for example, installation, managing command-line options or getting help (also see *note New to GNU/Linux?::). So if you are new to this empowering environment, we encourage you to go through these chapters carefully. They can be a starting point from which you can continue to learn more from each program's own manual and fully benefit from and enjoy this wonderful environment. Gnuastro also comes with a large set of libraries, so you can write your own programs using Gnuastro's building blocks, see *note Review of library fundamentals:: for an introduction. In Gnuastro, no change to any program or library will be committed to its history, before it has been fully documented here first. As discussed in *note Science and its tools:: this is a founding principle of the Gnuastro. * Menu: * Quick start:: A quick start to installation. * Gnuastro programs list:: List of command-line programs. * Science and its tools:: Some philosophy and history. * Your rights:: User rights. * Logo of Gnuastro:: Meaning behind Gnuastro's logo. * Naming convention:: About names of programs in Gnuastro. * Version numbering:: Understanding version numbers. * New to GNU/Linux?:: Suggested GNU/Linux distribution. * Report a bug:: Search and report the bug you found. * Suggest new feature:: How to suggest a new feature. * Announcements:: How to stay up to date with Gnuastro. * Conventions:: Conventions used in this book. * Acknowledgments:: People who helped in the production.  File: gnuastro.info, Node: Quick start, Next: Gnuastro programs list, Prev: Introduction, Up: Introduction 1.1 Quick start =============== The latest official release tarball is always available as ‘gnuastro-latest.tar.lz’ (http://ftp.gnu.org/gnu/gnuastro/gnuastro-latest.tar.lz). The Lzip (http://www.nongnu.org/lzip/lzip.html) format is used for better compression (smaller output size, thus faster download), and robust archival features and standards. For historical reasons (those users that do not yet have Lzip), the Gzip'd tarball(1) is available at the same URL (just change the ‘.lz’ suffix above to ‘.gz’; however, the Lzip'd file is recommended). See *note Release tarball:: for more details on the tarball release. Let's assume the downloaded tarball is in the ‘TOPGNUASTRO’ directory. You can follow the commands below to download and un-compress the Gnuastro source. You need to have the ‘lzip’ program for the decompression (see *note Dependencies from package managers::) If your Tar implementation does not recognize Lzip (the third command fails), run the fourth command. Note that lines starting with ‘##’ do not need to be typed (they are only a description of the following command): ## Go into the download directory. $ cd TOPGNUASTRO ## If you do not already have the tarball, you can download it: $ wget http://ftp.gnu.org/gnu/gnuastro/gnuastro-latest.tar.lz ## If this fails, run the next command. $ tar -xf gnuastro-latest.tar.lz ## Only when the previous command fails. $ lzip -cd gnuastro-latest.tar.lz | tar -xf - Gnuastro has three mandatory dependencies and some optional dependencies for extra functionality, see *note Dependencies:: for the full list. In *note Dependencies from package managers:: we have prepared the command to easily install Gnuastro's dependencies using the package manager of some operating systems. When the mandatory dependencies are ready, you can configure, compile, check and install Gnuastro on your system with the following commands. See *note Known issues:: if you confront any complications. $ cd gnuastro-X.X # Replace X.X with version number. $ ./configure $ make -j8 # Replace 8 with no. CPU threads. $ make check -j8 # Replace 8 with no. CPU threads. $ sudo make install For each program there is an 'Invoke ProgramName' sub-section in this book which explains how the programs should be run on the command-line (for example, see *note Invoking asttable::). In *note Tutorials::, we have prepared some complete tutorials with common Gnuastro usage scenarios in astronomical research. They even contain links to download the necessary data, and thoroughly describe every step of the process (the science, statistics and optimal usage of the command-line). We therefore recommend to read (an run the commands in) the tutorials before starting to use Gnuastro. ---------- Footnotes ---------- (1) The Gzip library and program are commonly available on most systems. However, Gnuastro recommends Lzip as described above and the beta-releases are also only distributed in ‘tar.lz’.  File: gnuastro.info, Node: Gnuastro programs list, Next: Science and its tools, Prev: Quick start, Up: Introduction 1.2 Gnuastro programs list ========================== One of the most common ways to operate Gnuastro is through its command-line programs. For some tutorials on several real-world usage scenarios, see *note Tutorials::. The list here is just provided as a general summary for those who are new to Gnuastro. GNU Astronomy Utilities 0.22, contains the following programs. They are sorted in alphabetical order and a short description is provided for each program. The description starts with the executable names in ‘thisfont’ followed by a pointer to the respective section in parenthesis. Throughout this book, they are ordered based on their context, please see the top-level contents for contextual ordering (based on what they do). Arithmetic (‘astarithmetic’, see *note Arithmetic::) For arithmetic operations on multiple (theoretically unlimited) number of datasets (images). It has a large and growing set of arithmetic, mathematical, and even statistical operators (for example, ‘+’, ‘-’, ‘*’, ‘/’, ‘sqrt’, ‘log’, ‘min’, ‘average’, ‘median’, see *note Arithmetic operators::). BuildProgram (‘astbuildprog’, see *note BuildProgram::) Compile, link and run custom C programs that depend on the Gnuastro library (see *note Gnuastro library::). This program will automatically link with the libraries that Gnuastro depends on, so there is no need to explicitly mention them every time you are compiling a Gnuastro library dependent program. ConvertType (‘astconvertt’, see *note ConvertType::) Convert astronomical data files (FITS or IMH) to and from several other standard image and data formats, for example, TXT, JPEG, EPS or PDF. Optionally, it is also possible to add vector graphics markers over the output image (for example, circles from catalogs containing RA or Dec). Convolve (‘astconvolve’, see *note Convolve::) Convolve (blur or smooth) data with a given kernel in spatial and frequency domain on multiple threads. Convolve can also do deconvolution to find the appropriate kernel to PSF-match two images. CosmicCalculator (‘astcosmiccal’, see *note CosmicCalculator::) Do cosmological calculations, for example, the luminosity distance, distance modulus, comoving volume and many more. Crop (‘astcrop’, see *note Crop::) Crop region(s) from one or many image(s) and stitch several images if necessary. Input coordinates can be in pixel coordinates or world coordinates. Fits (‘astfits’, see *note Fits::) View and manipulate FITS file extensions and header keywords. MakeCatalog (‘astmkcatalog’, see *note MakeCatalog::) Make catalog of labeled image (output of NoiseChisel). The catalogs are highly customizable and adding new calculations/columns is very straightforward. MakeProfiles (‘astmkprof’, see *note MakeProfiles::) Make mock 2D profiles in an image. The central regions of radial profiles are made with a configurable 2D Monte Carlo integration. It can also build the profiles on an over-sampled image. Match (‘astmatch’, see *note Match::) Given two input catalogs, find the rows that match with each other within a given aperture (may be an ellipse). NoiseChisel (‘astnoisechisel’, see *note NoiseChisel::) Detect signal in noise. It uses a technique to detect very faint and diffuse, irregularly shaped signal in noise (galaxies in the sky), using thresholds that are below the Sky value, see Akhlaghi and Ichikawa 2015 (http://arxiv.org/abs/1505.01664). Query (‘astquery’, see *note Query::) High-level interface to query pre-defined remote, or external databases, and directly download the required sub-tables on the command-line. Segment (‘astsegment’, see *note Segment::) Segment detected regions based on the structure of signal and the input dataset's noise properties. Statistics (‘aststatistics’, see *note Statistics::) Statistical calculations on the input dataset (column in a table, image or datacube). This includes man operations such as generating histogram, sigma clipping, and least squares fitting. Table (‘asttable’, *note Table::) Convert FITS binary and ASCII tables into other such tables, print them on the command-line, save them in a plain text file, do arithmetic on the columns or get the FITS table information. For a full list of operations, see *note Operation precedence in Table::. Warp (‘astwarp’, see *note Warp::) Warp image to new pixel grid. By default it will align the pixel and WCS coordinates, removing any non-linear WCS distortions. Any linear warp (projective transformation or Homography) can also be applied to the input images by explicitly calling the respective operation. The programs listed above are designed to be highly modular and generic. Hence, they are naturally for lower-level operations. In Gnuastro, higher-level operations (combining multiple programs, or running a program in a special way), are done with installed Bash scripts (all prefixed with ‘astscript-’). They can be run just like a program and behave very similarly (with minor differences, see *note Installed scripts::). ‘astscript-ds9-region’ (See *note SAO DS9 region files from table::) Given a table (either as a file or from standard input), create an SAO DS9 region file from the requested positional columns (WCS or image coordinates). ‘astscript-fits-view’ (see *note Viewing FITS file contents with DS9 or TOPCAT::) Given any number of FITS files, this script will either open SAO DS9 (for images or cubes) or TOPCAT (for tables) to view them in a graphic user interface (GUI). ‘astscript-pointing-simulate’ (See *note Pointing pattern simulation::) Given a table of pointings on the sky, create and a reference image that contains your camera's distortions and properties, generate a stacked exposure map. This is very useful in testing the coverage of dither patterns when designing your observing strategy and it is highly customizable. See Akhlaghi 2023 (https://arxiv.org/abs/2310.15006), or the dedicated tutorial in *note Pointing pattern design::. ‘astscript-radial-profile’ (See *note Generate radial profile::) Calculate the radial profile of an object within an image. The object can be at any location in the image, using various measures (median, sigma-clipped mean, etc.), and the radial distance can also be measured on any general ellipse. See Infante-Sainz et al. 2024 (https://arxiv.org/abs/2401.05303). ‘astscript-color-faint-gray’ (see *note Color images with gray faint regions::) Given three images for the Red-Green-Blue (RGB) channels, this script will use the bright pixels for color and will show the faint/diffuse regions in grayscale. This greatly helps in visualizing the full dynamic range of astronomical data. See Infante-Sainz et al. 2024 (https://arxiv.org/abs/2401.03814) or a dedicated tutorial in *note Color images with full dynamic range::. ‘astscript-sort-by-night’ (See *note Sort FITS files by night::) Given a list of FITS files, and a HDU and keyword name (for a date), this script separates the files in the same night (possibly over two calendar days). ‘astscript-zeropoint’ (see *note Zero point estimation::) Estimate the zero point (to calibrate pixel values) of an input image using a reference image or a reference catalog. This is necessary to produce measurements with physical units from new images. See Eskandarlou et al. 2023 (https://arxiv.org/abs/2312.04263), or a dedicated tutorial in *note Zero point of an image::. ‘astscript-psf-*’ The following scripts are used to estimate the extended PSF estimation and subtraction as described in the tutorial *note Building the extended PSF::: ‘astscript-psf-select-stars’ (see *note Invoking astscript-psf-select-stars::) Find all the stars within an image that are suitable for constructing an extended PSF. If the image has WCS, this script can automatically query Gaia to find the good stars. ‘astscript-psf-stamp’ (see *note Invoking astscript-psf-stamp::) build a crop (stamp) of a certain width around a star at a certain coordinate in a larger image. This script will do sub-pixel re-positioning to make sure the star is centered and can optionally mask all other background sources). ‘astscript-psf-scale-factor’ (see *note Invoking astscript-psf-scale-factor::) Given a PSF model, and the central coordinates of a star in an image, find the scale factor that has to be multiplied by the PSF to scale it to that star. ‘astscript-psf-unite’ (see *note Invoking astscript-psf-unite::) Unite the various components of a PSF into one. Because of saturation and non-linearity, to get a good estimate of the extended PSF, it is necessary to construct various parts from different magnitude ranges. ‘astscript-psf-subtract’ (see *note Invoking astscript-psf-subtract::) Given the model of a PSF and the central coordinates of a star in the image, do sub-pixel re-positioning of the PSF, scale it to the star and subtract it from the image.  File: gnuastro.info, Node: Science and its tools, Next: Your rights, Prev: Gnuastro programs list, Up: Introduction 1.3 Gnuastro manifesto: Science and its tools ============================================= History of science indicates that there are always inevitably unseen faults, hidden assumptions, simplifications and approximations in all our theoretical models, data acquisition and analysis techniques. It is precisely these that will ultimately allow future generations to advance the existing experimental and theoretical knowledge through their new solutions and corrections. In the past, scientists would gather data and process them individually to achieve an analysis thus having a much more intricate knowledge of the data and analysis. The theoretical models also required little (if any) simulations to compare with the data. Today both methods are becoming increasingly more dependent on pre-written software. Scientists are dissociating themselves from the intricacies of reducing raw observational data in experimentation or from bringing the theoretical models to life in simulations. These 'intricacies' are precisely those unseen faults, hidden assumptions, simplifications and approximations that define scientific progress. Unfortunately, most persons who have recourse to a computer for statistical analysis of data are not much interested either in computer programming or in statistical method, being primarily concerned with their own proper business. Hence the common use of library programs and various statistical packages. ... It's time that was changed. -- _F.J. Anscombe. The American Statistician, Vol. 27, No. 1. 1973_ Anscombe's quartet (http://en.wikipedia.org/wiki/Anscombe%27s_quartet) demonstrates how four data sets with widely different shapes (when plotted) give nearly identical output from standard regression techniques. Anscombe uses this (now famous) quartet, which was introduced in the paper quoted above, to argue that "_Good statistical analysis is not a purely routine matter, and generally calls for more than one pass through the computer_". Echoing Anscombe's concern after 44 years, some of the highly recognized statisticians of our time (Leek, McShane, Gelman, Colquhoun, Nuijten and Goodman), wrote in Nature that: We need to appreciate that data analysis is not purely computational and algorithmic - it is a human behavior....Researchers who hunt hard enough will turn up a result that fits statistical criteria - but their discovery will probably be a false positive. -- _Five ways to fix statistics, Nature, 551, Nov 2017._ Users of statistical (scientific) methods (software) are therefore not passive (objective) agents in their results. It is necessary to actually understand the method, not just use it as a black box. The subjective experience gained by frequently using a method/software is not sufficient to claim an understanding of how the tool/method works and how relevant it is to the data and analysis. This kind of subjective experience is prone to serious misunderstandings about the data, what the software/statistical-method really does (especially as it gets more complicated), and thus the scientific interpretation of the result. This attitude is further encouraged through non-free software(1), poorly written (or non-existent) scientific software manuals, and non-reproducible papers(2). This approach to scientific software and methods only helps in producing dogmas and an "_obscurantist faith in the expert's special skill, and in his personal knowledge and authority_"(3). Program or be programmed. Choose the former, and you gain access to the control panel of civilization. Choose the latter, and it could be the last real choice you get to make. -- _Douglas Rushkoff. Program or be programmed, O/R Books (2010)._ It is obviously impractical for any one human being to gain the intricate knowledge explained above for every step of an analysis. On the other hand, scientific data can be large and numerous, for example, images produced by telescopes in astronomy. This requires efficient algorithms. To make things worse, natural scientists have generally not been trained in the advanced software techniques, paradigms and architecture that are taught in computer science or engineering courses and thus used in most software. The GNU Astronomy Utilities are an effort to tackle this issue. Gnuastro is not just a software, this book is as important to the idea behind Gnuastro as the source code (software). This book has tried to learn from the success of the "Numerical Recipes" book in educating those who are not software engineers and computer scientists but still heavy users of computational algorithms, like astronomers. There are two major differences. The first difference is that Gnuastro's code and the background information are segregated: the code is moved within the actual Gnuastro software source code and the underlying explanations are given here in this book. In the source code, every non-trivial step is heavily commented and correlated with this book, it follows the same logic of this book, and all the programs follow a similar internal data, function and file structure, see *note Program source::. Complementing the code, this book focuses on thoroughly explaining the concepts behind those codes (history, mathematics, science, software and usage advice when necessary) along with detailed instructions on how to run the programs. At the expense of frustrating "professionals" or "experts", this book and the comments in the code also intentionally avoid jargon and abbreviations. The source code and this book are thus intimately linked, and when considered as a single entity can be thought of as a real (an actual software accompanying the algorithms) "Numerical Recipes" for astronomy. The second major, and arguably more important, difference is that "Numerical Recipes" does not allow you to distribute any code that you have learned from it. In other words, it does not allow you to release your software's source code if you have used their codes, you can only publicly release binaries (a black box) to the community. Therefore, while it empowers the privileged individual who has access to it, it exacerbates social ignorance. Exactly at the opposite end of the spectrum, Gnuastro's source code is released under the GNU general public license (GPL) and this book is released under the GNU free documentation license. You are therefore free to distribute any software you create using parts of Gnuastro's source code or text, or figures from this book, see *note Your rights::. With these principles in mind, Gnuastro's developers aim to impose the minimum requirements on you (in computer science, engineering and even the mathematics behind the tools) to understand and modify any step of Gnuastro if you feel the need to do so, see *note Why C:: and *note Program design philosophy::. Without prior familiarity and experience with optics, it is hard to imagine how, Galileo could have come up with the idea of modifying the Dutch military telescope optics to use in astronomy. Astronomical objects could not be seen with the Dutch military design of the telescope. In other words, it is unlikely that Galileo could have asked a random optician to make modifications (not understood by Galileo) to the Dutch design, to do something no astronomer of the time took seriously. In the paradigm of the day, what could be the purpose of enlarging geometric spheres (planets) or points (stars)? In that paradigm only the position and movement of the heavenly bodies was important, and that had already been accurately studied (recently by Tycho Brahe). In the beginning of his "The Sidereal Messenger" (published in 1610) he cautions the readers on this issue and _before_ describing his results/observations, Galileo instructs us on how to build a suitable instrument. Without a detailed description of _how_ he made his tools and done his observations, no reasonable person would believe his results. Before he actually saw the moons of Jupiter, the mountains on the Moon or the crescent of Venus, Galileo was “evasiveâ€(4) to Kepler. Science is defined by its tools/methods, _not_ its raw results(5). The same is true today: science cannot progress with a black box, or poorly released code. The source code of a research is the new (abstractified) communication language in science, understandable by humans _and_ computers. Source code (in any programming language) is a language/notation designed to express all the details that would be too tedious/long/frustrating to report in spoken languages like English, similar to mathematic notation. An article about computational science [almost all sciences today] ... is not the scholarship itself, it is merely advertising of the scholarship. The Actual Scholarship is the complete software development environment and the complete set of instructions which generated the figures. -- _Buckheit & Donoho, Lecture Notes in Statistics, Vol 103, 1996_ Today, the quality of the source code that goes into a scientific result (and the distribution of that code) is as critical to scientific vitality and integrity, as the quality of its written language/English used in publishing/distributing its paper. A scientific paper will not even be reviewed by any respectable journal if its written in a poor language/English. A similar level of quality assessment is thus increasingly becoming necessary regarding the codes/methods used to derive the results of a scientific paper. For more on this, please see Akhlaghi et al. 2021 (https://arxiv.org/abs/2006.03018)). Bjarne Stroustrup (creator of the C++ language) says: "_Without understanding software, you are reduced to believing in magic_". Ken Thomson (the designer or the Unix operating system) says "_I abhor a system designed for the 'user' if that word is a coded pejorative meaning 'stupid and unsophisticated'_." Certainly no scientist (user of a scientific software) would want to be considered a believer in magic, or stupid and unsophisticated. This can happen when scientists get too distant from the raw data and methods, and are mainly discussing results. In other words, when they feel they have tamed Nature into their own high-level (abstract) models (creations), and are mainly concerned with scaling up, or industrializing those results. Roughly five years before special relativity, and about two decades before quantum mechanics fundamentally changed Physics, Lord Kelvin is quoted as saying: There is nothing new to be discovered in physics now. All that remains is more and more precise measurement. -- _William Thomson (Lord Kelvin), 1900_ A few years earlier Albert. A. Michelson made the following statement: The more important fundamental laws and facts of physical science have all been discovered, and these are now so firmly established that the possibility of their ever being supplanted in consequence of new discoveries is exceedingly remote.... Our future discoveries must be looked for in the sixth place of decimals. -- _Albert. A. Michelson, dedication of Ryerson Physics Lab, U. Chicago 1894_ If scientists are considered to be more than mere puzzle solvers(6) (simply adding to the decimals of existing values or observing a feature in 10, 100, or 100000 more galaxies or stars, as Kelvin and Michelson clearly believed), they cannot just passively sit back and uncritically repeat the previous (observational or theoretical) methods/tools on new data. Today there is a wealth of raw telescope images ready (mostly for free) at the finger tips of anyone who is interested with a fast enough internet connection to download them. The only thing lacking is new ways to analyze this data and dig out the treasure that is lying hidden in them to existing methods and techniques. New data that we insist on analyzing in terms of old ideas (that is, old models which are not questioned) cannot lead us out of the old ideas. However many data we record and analyze, we may just keep repeating the same old errors, missing the same crucially important things that the experiment was competent to find. -- _Jaynes, Probability theory, the logic of science. Cambridge U. Press (2003)._ ---------- Footnotes ---------- (1) <https://www.gnu.org/philosophy/free-sw.html> (2) Where the authors omit many of the analysis/processing "details" from the paper by arguing that they would make the paper too long/unreadable. However, software engineers have been dealing with such issues for a long time. There are thus software management solutions that allow us to supplement papers with all the details necessary to exactly reproduce the result. For example, see Akhlaghi et al. 2021 (https://arxiv.org/abs/2006.03018). (3) Karl Popper. The logic of scientific discovery. 1959. Larger quote is given at the start of the PDF (for print) version of this book. (4) Galileo G. (Translated by Maurice A. Finocchiaro). _The essential Galileo_.Hackett publishing company, first edition, 2008. (5) For example, take the following two results on the age of the universe: roughly 14 billion years (suggested by the current consensus of the standard model of cosmology) and less than 10,000 years (suggested from some interpretations of the Bible). Both these numbers are _results_. What distinguishes these two results, is the tools/methods that were used to derive them. Therefore, as the term "Scientific method" also signifies, a scientific statement it defined by its _method_, not its result. (6) Thomas S. Kuhn. _The Structure of Scientific Revolutions_, University of Chicago Press, 1962.  File: gnuastro.info, Node: Your rights, Next: Logo of Gnuastro, Prev: Science and its tools, Up: Introduction 1.4 Your rights =============== The paragraphs below, in this section, belong to the GNU Texinfo(1) manual and are not written by us! The name "Texinfo" is just changed to "GNU Astronomy Utilities" or "Gnuastro" because they are released under the same licenses and it is beautifully written to inform you of your rights. GNU Astronomy Utilities is "free software"; this means that everyone is free to use it and free to redistribute it on certain conditions. Gnuastro is not in the public domain; it is copyrighted and there are restrictions on its distribution, but these restrictions are designed to permit everything that a good cooperating citizen would want to do. What is not allowed is to try to prevent others from further sharing any version of Gnuastro that they might get from you. Specifically, we want to make sure that you have the right to give away copies of the programs that relate to Gnuastro, that you receive the source code or else can get it if you want it, that you can change these programs or use pieces of them in new free programs, and that you know you can do these things. To make sure that everyone has such rights, we have to forbid you to deprive anyone else of these rights. For example, if you distribute copies of the Gnuastro related programs, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. Also, for our own protection, we must make certain that everyone finds out that there is no warranty for the programs that relate to Gnuastro. If these programs are modified by someone else and passed on, we want their recipients to know that what they have is not what we distributed, so that any problems introduced by others will not reflect on our reputation. The full text of the licenses for the Gnuastro book and software can be respectively found in *note GNU General Public License::(2) and *note GNU Free Doc License::(3). ---------- Footnotes ---------- (1) Texinfo is the GNU documentation system. It is used to create this book in all the various formats. (2) Also available in <http://www.gnu.org/copyleft/gpl.html> (3) Also available in <http://www.gnu.org/copyleft/fdl.html>  File: gnuastro.info, Node: Logo of Gnuastro, Next: Naming convention, Prev: Your rights, Up: Introduction 1.5 Logo of Gnuastro ==================== Gnuastro's logo is an abstract image of a barred spiral galaxy (https://en.wikipedia.org/wiki/Barred_spiral_galaxy). The galaxy is vertically cut in half: on the left side, the beauty of a contiguous galaxy image is visible. But on the right, the image gets pixelated, and we only see the parts that are within the pixels. The pixels that are more near to the center of the galaxy (which is brighter) are also larger. But as we follow the spiral arms (and get more distant from the center), the pixels get smaller (signifying less signal). This sharp distinction between the contiguous and pixelated view of the galaxy signifies the main struggle in science: in the "real" world, objects are not pixelated or discrete and have no noise. However, when we observe nature, we are confined and constrained by the resolution of our data collection (CCD imager in this case). On the other hand, we read English text from the left and progress towards the right. This defines the positioning of the "real" and observed halves of the galaxy: the no-noised and contiguous half (on the left) passes through our observing tools and becomes pixelated and noisy half (on the right). It is the job of scientific software like Gnuastro to help interpret the underlying mechanisms of the "real" universe from the pixelated and noisy data. Gnuastro's logo was designed by Marjan Akbari. The concept behind it was created after several design iterations with Mohammad Akhlaghi.  File: gnuastro.info, Node: Naming convention, Next: Version numbering, Prev: Logo of Gnuastro, Up: Introduction 1.6 Naming convention ===================== Gnuastro is a package of independent programs and a collection of libraries, here we are mainly concerned with the programs. Each program has an official name which consists of one or two words, describing what they do. The latter are printed with no space, for example, NoiseChisel or Crop. On the command-line, you can run them with their executable names which start with an ‘ast’ and might be an abbreviation of the official name, for example, ‘astnoisechisel’ or ‘astcrop’, see *note Executable names::. We will use "ProgramName" for a generic official program name and ‘astprogname’ for a generic executable name. In this book, the programs are classified based on what they do and thoroughly explained. An alphabetical list of the programs that are installed on your system with this installation are given in *note Gnuastro programs list::. That list also contains the executable names and version numbers along with a one line description.  File: gnuastro.info, Node: Version numbering, Next: New to GNU/Linux?, Prev: Naming convention, Up: Introduction 1.7 Version numbering ===================== Gnuastro can have two formats of version numbers, for official and unofficial releases. Official Gnuastro releases are announced on the ‘info-gnuastro’ mailing list, they have a version control tag in Gnuastro's development history, and their version numbers are formatted like "‘A.B’". ‘A’ is a major version number, marking a significant planned achievement (for example, see *note GNU Astronomy Utilities 1.0::), while ‘B’ is a minor version number, see below for more on the distinction. Note that the numbers are not decimals, so version 2.34 is much more recent than version 2.5, which is not equal to 2.50. Gnuastro also allows a unique version number for unofficial releases. Unofficial releases can mark any point in Gnuastro's development history. This is done to allow astronomers to easily use any point in the version controlled history for their data-analysis and research publication. See *note Version controlled source:: for a complete introduction. This section is not just for developers and is intended to straightforward and easy to read, so please have a look if you are interested in the cutting-edge. This unofficial version number is a meaningful and easy to read string of characters, unique to that particular point of history. With this feature, users can easily stay up to date with the most recent bug fixes and additions that are committed between official releases. The unofficial version number is formatted like: ‘A.B.C-D’. ‘A’ and ‘B’ are the most recent official version number. ‘C’ is the number of commits that have been made after version ‘A.B’. ‘D’ is the first 4 or 5 characters of the commit hash number(1). Therefore, the unofficial version number '‘3.92.8-29c8’', corresponds to the 8th commit after the official version ‘3.92’ and its commit hash begins with ‘29c8’. The unofficial version number is sort-able (unlike the raw hash) and as shown above is descriptive of the state of the unofficial release. Of course an official release is preferred for publication (since its tarballs are easily available and it has gone through more tests, making it more stable), so if an official release is announced prior to your publication's final review, please consider updating to the official release. The major version number is set by a major goal which is defined by the developers and user community before hand, for example, see *note GNU Astronomy Utilities 1.0::. The incremental work done in minor releases are commonly small steps in achieving the major goal. Therefore, there is no limit on the number of minor releases and the difference between the (hypothetical) versions 2.927 and 3.0 can be a small (negligible to the user) improvement that finalizes the defined goals. * Menu: * GNU Astronomy Utilities 1.0:: Plans for version 1.0 release ---------- Footnotes ---------- (1) Each point in Gnuastro's history is uniquely identified with a 40 character long hash which is created from its contents and previous history for example: ‘5b17501d8f29ba3cd610673261e6e2229c846d35’. So the string ‘D’ in the version for this commit could be ‘5b17’, or ‘5b175’.  File: gnuastro.info, Node: GNU Astronomy Utilities 1.0, Prev: Version numbering, Up: Version numbering 1.7.1 GNU Astronomy Utilities 1.0 --------------------------------- Currently (prior to Gnuastro 1.0), the aim of Gnuastro is to have a complete system for data manipulation and analysis at least similar to IRAF(1). So an astronomer can take all the standard data analysis steps (starting from raw data to the final reduced product and standard post-reduction tools) with the various programs in Gnuastro. The maintainers of each camera or detector on a telescope can provide a completely transparent shell script or Makefile to the observer for data analysis. This script can set configuration files for all the required programs to work with that particular camera. The script can then run the proper programs in the proper sequence. The user/observer can easily follow the standard shell script to understand (and modify) each step and the parameters used easily. Bash (or other modern GNU/Linux shell scripts) is powerful and made for this gluing job. This will simultaneously improve performance and transparency. Shell scripting (or Makefiles) are also basic constructs that are easy to learn and readily available as part of the Unix-like operating systems. If there is no program to do a desired step, Gnuastro's libraries can be used to build specific programs. The main factor is that all observatories or projects can freely contribute to Gnuastro and all simultaneously benefit from it (since it does not belong to any particular one of them), much like how for-profit organizations (for example, RedHat, or Intel and many others) are major contributors to free and open source software for their shared benefit. Gnuastro's copyright has been fully awarded to GNU, so it does not belong to any particular astronomer or astronomical facility or project. ---------- Footnotes ---------- (1) <http://iraf.noao.edu/>  File: gnuastro.info, Node: New to GNU/Linux?, Next: Report a bug, Prev: Version numbering, Up: Introduction 1.8 New to GNU/Linux? ===================== Some astronomers initially install and use a GNU/Linux operating system because their necessary tools can only be installed in this environment. However, the transition is not necessarily easy. To encourage you in investing the patience and time to make this transition, and actually enjoy it, we will first start with a basic introduction to GNU/Linux operating systems. Afterwards, in *note Command-line interface:: we will discuss the wonderful benefits of the command-line interface, how it beautifully complements the graphic user interface, and why it is worth the (apparently steep) learning curve. Finally a complete chapter (*note Tutorials::) is devoted to real world scenarios of using Gnuastro (on the command-line). Therefore if you do not yet feel comfortable with the command-line we strongly recommend going through that chapter after finishing this section. You might have already noticed that we are not using the name "Linux", but "GNU/Linux". Please take the time to have a look at the following essays and FAQs for a complete understanding of this very important distinction. • <https://gnu.org/philosophy> • <https://www.gnu.org/gnu/the-gnu-project.html> • <https://www.gnu.org/gnu/gnu-users-never-heard-of-gnu.html> • <https://www.gnu.org/gnu/linux-and-gnu.html> • <https://www.gnu.org/gnu/why-gnu-linux.html> • <https://www.gnu.org/gnu/gnu-linux-faq.html> • Recorded talk: <https://peertube.stream/w/ddeSSm33R1eFWKJVqpcthN> (first 20 min is about the history of Unix-like operating systems). In short, the Linux kernel(1) is built using the GNU C library (glibc) and GNU compiler collection (gcc). The Linux kernel software alone is just a means for other software to access the hardware resources, it is useless alone! A normal astronomer (or scientist) will never interact with the kernel directly! For example, the command-line environment that you interact with is usually GNU Bash. It is GNU Bash that then talks to kernel. To better clarify, let's use this analogy inspired from one of the links above(2): saying that you are "running Linux" is like saying you are "driving your engine". The car's engine is the main source of power in the car, no one doubts that. But you do not "drive" the engine, you drive the "car". The engine alone is useless for transportation without the radiator, battery, transmission, wheels, chassis, seats, wind-shield, etc. To have an operating system, you need lower-level tools (to build the kernel), and higher-level (to use it) software packages. For the Linux kernel, both the lower-level and higher-level tools are GNU. In other words,"the whole system is basically GNU with Linux loaded". You can replace the Linux kernel and still have the GNU shell and higher-level utilities. For example, using the "Windows Subsystem for Linux", you can use almost all GNU tools without the original Linux kernel, but using the host Windows operating system, as in <https://ubuntu.com/wsl>. Alternatively, you can build a fully functional GNU-based working environment on a macOS or BSD-based operating system (using the host's kernel and C compiler), for example, through projects like Maneage, see Akhlaghi et al. 2021 (https://arxiv.org/abs/2006.03018), in particular Appendix C with all the GNU software tools that is exactly reproducible on a macOS also. Therefore to acknowledge GNU's instrumental role in the creation and usage of the Linux kernel and the operating systems that use it, we should call these operating systems "GNU/Linux". * Menu: * Command-line interface:: Introduction to the command-line ---------- Footnotes ---------- (1) In Unix-like operating systems, the kernel connects software and hardware worlds. (2) https://www.gnu.org/gnu/gnu-users-never-heard-of-gnu.html  File: gnuastro.info, Node: Command-line interface, Prev: New to GNU/Linux?, Up: New to GNU/Linux? 1.8.1 Command-line interface ---------------------------- One aspect of Gnuastro that might be a little troubling to new GNU/Linux users is that (at least for the time being) it only has a command-line user interface (CLI). This might be contrary to the mostly graphical user interface (GUI) experience with proprietary operating systems. Since the various actions available are not always on the screen, the command-line interface can be complicated, intimidating, and frustrating for a first-time user. This is understandable and also experienced by anyone who started using the computer (from childhood) in a graphical user interface (this includes most of Gnuastro's authors). Here we hope to convince you of the unique benefits of this interface which can greatly enhance your productivity while complementing your GUI experience. Through GNOME 3(1), most GNU/Linux based operating systems now have an advanced and useful GUI. Since the GUI was created long after the command-line, some wrongly consider the command-line to be obsolete. Both interfaces are useful for different tasks. For example, you cannot view an image, video, PDF document or web page on the command-line. On the other hand you cannot reproduce your results easily in the GUI. Therefore they should not be regarded as rivals but as complementary user interfaces, here we will outline how the CLI can be useful in scientific programs. You can think of the GUI as a veneer over the CLI to facilitate a small subset of all the possible CLI operations. Each click you do on the GUI, can be thought of as internally running a different CLI command. So asymptotically (if a good designer can design a GUI which is able to show you all the possibilities to click on) the GUI is only as powerful as the command-line. In practice, such graphical designers are very hard to find for every program, so the GUI operations are always a subset of the internal CLI commands. For programs that are only made for the GUI, this results in not including lots of potentially useful operations. It also results in 'interface design' to be a crucially important part of any GUI program. Scientists do not usually have enough resources to hire a graphical designer, also the complexity of the GUI code is far more than CLI code, which is harmful for a scientific software, see *note Science and its tools::. For programs that have a GUI, one action on the GUI (moving and clicking a mouse, or tapping a touchscreen) might be more efficient and easier than its CLI counterpart (typing the program name and your desired configuration). However, if you have to repeat that same action more than once, the GUI will soon become frustrating and prone to errors. Unless the designers of a particular program decided to design such a system for a particular GUI action, there is no general way to run any possible series of actions automatically on the GUI. On the command-line, you can run any series of actions which can come from various CLI capable programs you have decided yourself in any possible permutation with one command(2). This allows for much more creativity and exact reproducibility that is not possible to a GUI user. For technical and scientific operations, where the same operation (using various programs) has to be done on a large set of data files, this is crucially important. It also allows exact reproducibility which is a foundation principle for scientific results. The most common CLI (which is also known as a shell) in GNU/Linux is GNU Bash, we strongly encourage you to put aside several hours and go through this beautifully explained web page: <https://flossmanuals.net/command-line/>. You do not need to read or even fully understand the whole thing, only a general knowledge of the first few chapters are enough to get you going. Since the operations in the GUI are limited and they are visible, reading a manual is not that important in the GUI (most programs do not even have any!). However, to give you the creative power explained above, with a CLI program, it is best if you first read the manual of any program you are using. You do not need to memorize any details, only an understanding of the generalities is needed. Once you start working, there are more easier ways to remember a particular option or operation detail, see *note Getting help::. To experience the command-line in its full glory and not in the GUI terminal emulator, press the following keys together: <CTRL+ALT+F4>(3) to access the virtual console. To return back to your GUI, press the same keys above replacing <F4> with <F7> (or <F1>, or <F2>, depending on your GNU/Linux distribution). In the virtual console, the GUI, with all its distracting colors and information, is gone. Enabling you to focus entirely on your actual work. For operations that use a lot of your system's resources (processing a large number of large astronomical images for example), the virtual console is the place to run them. This is because the GUI is not competing with your research work for your system's RAM and CPU. Since the virtual consoles are completely independent, you can even log out of your GUI environment to give even more of your hardware resources to the programs you are running and thus reduce the operating time. Since it uses far less system resources, the CLI is also convenient for remote access to your computer. Using secure shell (SSH) you can log in securely to your system (similar to the virtual console) from anywhere even if the connection speeds are low. There are apps for smart phones and tablets which allow you to do this. ---------- Footnotes ---------- (1) <http://www.gnome.org/> (2) By writing a shell script and running it, for example, see the tutorials in *note Tutorials::. (3) Instead of <F4>, you can use any of the keys from <F1> to <F6> for different virtual consoles depending on your GNU/Linux distribution, try them all out. You can also run a separate GUI from within this console if you want to.  File: gnuastro.info, Node: Report a bug, Next: Suggest new feature, Prev: New to GNU/Linux?, Up: Introduction 1.9 Report a bug ================ According to Wikipedia "a software bug is an error, flaw, failure, or fault in a computer program or system that causes it to produce an incorrect or unexpected result, or to behave in unintended ways". So when you see that a program is crashing, not reading your input correctly, giving the wrong results, or not writing your output correctly, you have found a bug. In such cases, it is best if you report the bug to the developers. The programs will also inform you if known impossible situations occur (which are caused by something unexpected) and will ask the users to report the bug issue. Prior to actually filing a bug report, it is best to search previous reports. The issue might have already been found and even solved. The best place to check if your bug has already been discussed is the bugs tracker on *note Gnuastro project webpage:: at <https://savannah.gnu.org/bugs/?group=gnuastro>. In the top search fields (under "Display Criteria") set the "Open/Closed" drop-down menu to "Any" and choose the respective program or general category of the bug in "Category" and click the "Apply" button. The results colored green have already been solved and the status of those colored in red is shown in the table. Recently corrected bugs are probably not yet publicly released because they are scheduled for the next Gnuastro stable release. If the bug is solved but not yet released and it is an urgent issue for you, you can get the version controlled source and compile that, see *note Version controlled source::. To solve the issue as readily as possible, please follow the following to guidelines in your bug report. The How to Report Bugs Effectively (http://www.chiark.greenend.org.uk/~sgtatham/bugs.html) and How To Ask Questions The Smart Way (http://catb.org/~esr/faqs/smart-questions.html) essays also provide some good generic advice for all software (do not contact their authors for Gnuastro's problems). Mastering the art of giving good bug reports (like asking good questions) can greatly enhance your experience with any free and open source software. So investing the time to read through these essays will greatly reduce your frustration after you see something does not work the way you feel it is supposed to for a large range of software, not just Gnuastro. *Be descriptive* Please provide as many details as possible and be very descriptive. Explain what you expected and what the output was: it might be that your expectation was wrong. Also please clearly state which sections of the Gnuastro book (this book), or other references you have studied to understand the problem. This can be useful in correcting the book (adding links to likely places where users will check). But more importantly, it will be encouraging for the developers, since you are showing how serious you are about the problem and that you have actually put some thought into it. "To be able to ask a question clearly is two-thirds of the way to getting it answered." - John Ruskin (1819-1900). *Individual and independent bug reports* If you have found multiple bugs, please send them as separate (and independent) bugs (as much as possible). This will significantly help us in managing and resolving them sooner. *Reproducible bug reports* If we cannot exactly reproduce your bug, then it is very hard to resolve it. So please send us a Minimal working example(1) along with the description. For example, in running a program, please send us the full command-line text and the output with the ‘-P’ option, see *note Operating mode options::. If it is caused only for a certain input, also send us that input file. In case the input FITS is large, please use Crop to only crop the problematic section and make it as small as possible so it can easily be uploaded and downloaded and not waste the archive's storage, see *note Crop::. There are generally two ways to inform us of bugs: • Send a mail to ‘bug-gnuastro@gnu.org’. Any mail you send to this address will be distributed through the bug-gnuastro mailing list(2). This is the simplest way to send us bug reports. The developers will then register the bug into the project web page (next choice) for you. • Use the Gnuastro project web page at <https://savannah.gnu.org/projects/gnuastro/>: There are two ways to get to the submission page as listed below. Fill in the form as described below and submit it (see *note Gnuastro project webpage:: for more on the project web page). • Using the top horizontal menu items, immediately under the top page title. Hovering your mouse on "Support" will open a drop-down list. Select "Submit new". Also if you have an account in Savannah, you can choose "Bugs" in the menu items and then select "Submit new". • In the main body of the page, under the "Communication tools" section, click on "Submit new item". Once the items have been registered in the mailing list or web page, the developers will add it to either the "Bug Tracker" or "Task Manager" trackers of the Gnuastro project web page. These two trackers can only be edited by the Gnuastro project developers, but they can be browsed by anyone, so you can follow the progress on your bug. You are most welcome to join us in developing Gnuastro and fixing the bug you have found maybe a good starting point. Gnuastro is designed to be easy for anyone to develop (see *note Science and its tools::) and there is a full chapter devoted to developing it: *note Developing::. *Savannah's Markup:* When posting to Savannah, it helps to have the code displayed in mono-space font and a different background, you may also want to make a list of items or make some words bold. For features like these, you should use Savannah's "Markup" guide at <https://savannah.gnu.org/markup-test.php>. You can access this page by clicking on the "Full Markup" link that is just beside the "Preview" button, near the box that you write your comments. As you see there, for example when you want to high-light code, you should put it within a "+verbatim+" and "-verbatim-" environment like below: +verbatim+ astarithmetic image.fits image_arith.fits -h1 isblank nan where -verbatim- Unfortunately, Savannah doesn't have a way to edit submitted comments. Therefore be sure to press the "Preview" button and check your report's final format before the final submission. ---------- Footnotes ---------- (1) <http://en.wikipedia.org/wiki/Minimal_Working_Example> (2) <https://lists.gnu.org/mailman/listinfo/bug-gnuastro>  File: gnuastro.info, Node: Suggest new feature, Next: Announcements, Prev: Report a bug, Up: Introduction 1.10 Suggest new feature ======================== We would always be happy to hear of suggested new features. For every program, there are already lists of features that we are planning to add. You can see the current list of plans from the Gnuastro project web page at <https://savannah.gnu.org/projects/gnuastro/> and following "Tasks"→"Browse" on the horizontal menu at the top of the page immediately under the title, see *note Gnuastro project webpage::. If you want to request a feature to an existing program, click on the "Display Criteria" above the list and under "Category", choose that particular program. Under "Category" you can also see the existing suggestions for new programs or other cases like installation, documentation or libraries. Also, be sure to set the "Open/Closed" value to "Any". If the feature you want to suggest is not already listed in the task manager, then follow the steps that are fully described in *note Report a bug::. Please have in mind that the developers are all busy with their own astronomical research, and implementing existing "task"s to add or resolve bugs. Gnuastro is a volunteer effort and none of the developers are paid for their hard work. So, although we will try our best, please do not expect for your suggested feature to be immediately included (for the next release of Gnuastro). The best person to apply the exciting new feature you have in mind is you, since you have the motivation and need. In fact, Gnuastro is designed for making it as easy as possible for you to hack into it (add new features, change existing ones and so on), see *note Science and its tools::. Please have a look at the chapter devoted to developing (*note Developing::) and start applying your desired feature. Once you have added it, you can use it for your own work and if you feel you want others to benefit from your work, you can request for it to become part of Gnuastro. You can then join the developers and start maintaining your own part of Gnuastro. If you choose to take this path of action please contact us beforehand (*note Report a bug::) so we can avoid possible duplicate activities and get interested people in contact. *Gnuastro is a collection of low level programs:* As described in *note Program design philosophy::, a founding principle of Gnuastro is that each library or program should be basic and low-level. High level jobs should be done by running the separate programs or using separate functions in succession through a shell script or calling the libraries by higher level functions, see the examples in *note Tutorials::. So when making the suggestions please consider how your desired job can best be broken into separate steps and modularized.  File: gnuastro.info, Node: Announcements, Next: Conventions, Prev: Suggest new feature, Up: Introduction 1.11 Announcements ================== Gnuastro has a dedicated mailing list for making announcements (‘info-gnuastro’). Anyone can subscribe to this mailing list. Anytime there is a new stable or test release, an email will be circulated there. The email contains a summary of the overall changes along with a detailed list (from the ‘NEWS’ file). This mailing list is thus the best way to stay up to date with new releases, easily learn about the updated/new features, or dependencies (see *note Dependencies::). To subscribe to this list, please visit <https://lists.gnu.org/mailman/listinfo/info-gnuastro>. Traffic (number of mails per unit time) in this list is designed to be low: only a handful of mails per year. Previous announcements are available on its archive (http://lists.gnu.org/archive/html/info-gnuastro/).  File: gnuastro.info, Node: Conventions, Next: Acknowledgments, Prev: Announcements, Up: Introduction 1.12 Conventions ================ In this book we have the following conventions: • All commands that are to be run on the shell (command-line) prompt as the user start with a ‘$’. In case they must be run as a superuser or system administrator, they will start with a single ‘#’. If the command is in a separate line and next line ‘is also in the code type face’, but does not have any of the ‘$’ or ‘#’ signs, then it is the output of the command after it is run. As a user, you do not need to type those lines. A line that starts with ‘##’ is just a comment for explaining the command to a human reader and must not be typed. • If the command becomes larger than the page width a <\> is inserted in the code. If you are typing the code by hand on the command-line, you do not need to use multiple lines or add the extra space characters, so you can omit them. If you want to copy and paste these examples (highly discouraged!) then the <\> should stay. The <\> character is a shell escape character which is used commonly to make characters which have special meaning for the shell, lose that special meaning (the shell will not treat them especially if there is a <\> behind them). When <\> is the last visible character in a line (the next character is a new-line character) the new-line character loses its meaning. Therefore, the shell sees it as a simple white-space character not the end of a command! This enables you to use multiple lines to write your commands. This is not a convention, but a bi-product of the PDF building process of the manual: In the PDF version of this manual, a single quote (or apostrophe) character in the commands or codes is shown like this: ‘'’. Single quotes are sometimes necessary in combination with commands like ‘awk’ or ‘sed’, or when using Column arithmetic in Gnuastro's own Table (see *note Column arithmetic::). Therefore when typing (recommended) or copy-pasting (not recommended) the commands that have a ‘'’, please correct it to the single-quote (or apostrophe) character, otherwise the command will fail.  File: gnuastro.info, Node: Acknowledgments, Prev: Conventions, Up: Introduction 1.13 Acknowledgments ==================== Gnuastro would not have been possible without scholarships and grants from several funding institutions. We thus ask that if you used Gnuastro in any of your papers/reports, please add the proper citation and acknowledge the funding agencies/projects. For details of which papers to cite (may be different for different programs) and get the acknowledgment statement to include in your paper, please run the relevant programs with the common ‘--cite’ option like the example commands below (for more on ‘--cite’, please see *note Operating mode options::). $ astnoisechisel --cite $ astmkcatalog --cite Here, we will acknowledge all the institutions (and their grants) along with the people who helped make Gnuastro possible. The full list of Gnuastro authors is available at the start of this book and the ‘AUTHORS’ file in the source code (both are generated automatically from the version controlled history). The plain text file ‘THANKS’, which is also distributed along with the source code, contains the list of people and institutions who played an indirect role in Gnuastro (not committed any code in the Gnuastro version controlled history). The Japanese Ministry of Education, Culture, Sports, Science, and Technology (MEXT) scholarship for Mohammad Akhlaghi's Masters and PhD degree in Tohoku University Astronomical Institute had an instrumental role in the long term learning and planning that made the idea of Gnuastro possible. The very critical view points of Professor Takashi Ichikawa (Mohammad's adviser) were also instrumental in the initial ideas and creation of Gnuastro. Afterwards, the European Research Council (ERC) advanced grant 339659-MUSICOS (Principal investigator: Roland Bacon) was vital in the growth and expansion of Gnuastro. Working with Roland at the Centre de Recherche Astrophysique de Lyon (CRAL), enabled a thorough re-write of the core functionality of all libraries and programs, turning Gnuastro into the large collection of generic programs and libraries it is today. At the Instituto de Astrofisica de Canarias (IAC, and in particular in collaboration with Johan Knapen and Ignacio Trujillo), Gnuastro matured and its user base significantly grew. Work on improving Gnuastro is now continuing primarily in the Centro de Estudios de Física del Cosmos de Aragón (CEFCA), located in Teruel, Spain. In general, we would like to gratefully thank the following people for their useful and constructive comments and suggestions (in alphabetical order by family name): Valentina Abril-melgarejo, Marjan Akbari, Carlos Allende Prieto, Hamed Altafi, Roland Bacon, Roberto Baena Gallé, Zahra Bagheri, Karl Berry, Faezeh Bidjarchian, Leindert Boogaard, Nicolas Bouché, Stefan Brüns, Fernando Buitrago, Adrian Bunk, Rosa Calvi, Mark Calabretta Nushkia Chamba, Sergio Chueca Urzay, Tamara Civera Lorenzo, Benjamin Clement, Nima Dehdilani, Andrés Del Pino Molina, Antonio Diaz Diaz, Paola Dimauro, Alexey Dokuchaev, Pierre-Alain Duc, Alessandro Ederoclite, Elham Eftekhari, Paul Eggert, Sepideh Eskandarlou, Sílvia Farras, Juan Antonio Fernández Ontiveros, Gaspar Galaz, Andrés García-Serra Romero, Zohre Ghaffari, Thérèse Godefroy, Giulia Golini, Craig Gordon, Martin Guerrero Roncel, Madusha Gunawardhana, Bruno Haible, Stephen Hamer, Siyang He, Zahra Hosseini, Leslie Hunt, Takashi Ichikawa, Raúl Infante Sainz, Brandon Invergo, Oryna Ivashtenko, Aurélien Jarno, Lee Kelvin, Brandon Kelly, Mohammad-Reza Khellat, Johan Knapen, Geoffry Krouchi, Martin Kuemmel, Teet Kuutma, Clotilde Laigle, Floriane Leclercq, Alan Lefor, Javier Licandro, Jeremy Lim, Alejandro Lumbreras Calle, Sebastián Luna Valero, Alberto Madrigal, Guillaume Mahler, Juan Miro, Alireza Molaeinezhad, Javier Moldon, Juan Molina Tobar, Francesco Montanari, Raphael Morales, Carlos Morales Socorro, Sylvain Mottet, Dmitrii Oparin, François Ochsenbein, Bertrand Pain, William Pence, Irene Pintos Castro, Mamta Pommier, Marcel Popescu, Bob Proulx, Joseph Putko, Samane Raji, Ignacio Ruiz Cejudo, Teymoor Saifollahi, Joanna Sakowska, Elham Saremi, Nafise Sedighi, Markus Schaney, Yahya Sefidbakht, Alejandro Serrano Borlaff, Zahra Sharbaf, David Shupe, Leigh Smith, Jenny Sorce, Manuel Sánchez-Benavente, Lee Spitler, Richard Stallman, Michael Stein, Ole Streicher, Alfred M. Szmidt, Michel Tallon, Juan C. Tello, Vincenzo Testa, Éric Thiébaut, Ignacio Trujillo, Peter Teuben, David Valls-Gabaud, Jesús Varela, Aaron Watkins, Richard Wilbur, Michael H.F. Wilkinson, Christopher Willmer, Xiuqin Wu, Sara Yousefi Taemeh, Johannes Zabl. The GNU French Translation Team is also managing the French version of the top Gnuastro web page which we highly appreciate. Finally, we should thank all the (sometimes anonymous) people in various online forums who patiently answered all our small (but important) technical questions. All work on Gnuastro has been voluntary, but the authors are most grateful to the following institutions (in chronological order) for hosting/supporting us in our research. Where necessary, these institutions have disclaimed any ownership of the parts of Gnuastro that were developed there, thus insuring the freedom of Gnuastro for the future (see *note Copyright assignment::). We highly appreciate their support for free software, and thus free science, and therefore a free society. Tohoku University Astronomical Institute, Sendai, Japan. University of Salento, Lecce, Italy. Centre de Recherche Astrophysique de Lyon (CRAL), Lyon, France. Instituto de Astrofisica de Canarias (IAC), Tenerife, Spain. Centro de Estudios de Física del Cosmos de Aragón (CEFCA), Teruel, Spain. Google Summer of Code 2020, 2021 and 2022  File: gnuastro.info, Node: Tutorials, Next: Installation, Prev: Introduction, Up: Top 2 Tutorials *********** To help new users have a smooth and easy start with Gnuastro, in this chapter several thoroughly elaborated tutorials, or cookbooks, are provided. These tutorials demonstrate the capabilities of different Gnuastro programs and libraries, along with tips and guidelines for the best practices of using them in various realistic situations. We strongly recommend going through these tutorials to get a good feeling of how the programs are related (built in a modular design to be used together in a pipeline), very similar to the core Unix-based programs that they were modeled on. Therefore these tutorials will help in optimally using Gnuastro's programs (and generally, the Unix-like command-line environment) effectively for your research. The first three tutorials (*note General program usage tutorial:: and *note Detecting large extended targets:: and *note Building the extended PSF::) use real input datasets from some of the deep Hubble Space Telescope (HST) images, the Sloan Digital Sky Survey (SDSS) and the Javalambre Photometric Local Universe Survey (J-PLUS) respectively. Their aim is to demonstrate some real-world problems that many astronomers often face and how they can be solved with Gnuastro's programs. The fourth tutorial (*note Sufi simulates a detection::) focuses on simulating astronomical images, which is another critical aspect of any analysis! The ultimate aim of *note General program usage tutorial:: is to detect galaxies in a deep HST image, measure their positions, magnitude and select those with the strongest colors. In the process, it takes many detours to introduce you to the useful capabilities of many of the programs. So please be patient in reading it. If you do not have much time and can only try one of the tutorials, we recommend this one. *note Detecting large extended targets:: deals with a major problem in astronomy: effectively detecting the faint outer wings of bright (and large) nearby galaxies to extremely low surface brightness levels (roughly one quarter of the local noise level in the example discussed). Besides the interesting scientific questions in these low-surface brightness features, failure to properly detect them will bias the measurements of the background objects and the survey's noise estimates. This is an important issue, especially in wide surveys. Because bright/large galaxies and stars(1), cover a significant fraction of the survey area. *note Building the extended PSF:: tackles an important problem in astronomy: how the extract the PSF of an image, to the largest possible extent, without assuming any functional form. In Gnuastro we have multiple installed scripts for this job. Their usage and logic behind best tuning them for the particular step, is fully described in this tutorial, on a real dataset. The tutorial concludes with subtracting that extended PSF from the science image; thus giving you a cleaner image (with no scattered light of the brighter stars) for your higher-level analysis. *note Sufi simulates a detection:: has a fictional(2) setting! Showing how Abd al-rahman Sufi (903 - 986 A.D., the first recorded description of "nebulous" objects in the heavens is attributed to him) could have used some of Gnuastro's programs for a realistic simulation of his observations and see if his detection of nebulous objects was trust-able. Because all conditions are under control in a simulated/mock environment/dataset, mock datasets can be a valuable tool to inspect the limitations of your data analysis and processing. But they need to be as realistic as possible, so this tutorial is dedicated to this important step of an analysis (simulations). There are other tutorials also, on things that are commonly necessary in astronomical research: In *note Detecting lines and extracting spectra in 3D data::, we use MUSE cubes (an IFU dataset) to show how you can subtract the continuum, detect emission-line features, extract spectra and build pseudo narrow-band images. In *note Color channels in same pixel grid:: we demonstrate how you can warp multiple images into a single pixel grid (often necessary with multi-wavelength data), and build a single color image. In *note Moire pattern in stacking and its correction:: we show how you can avoid the unwanted Moiré pattern which happens when warping separate exposures to build a stacked/co-add deeper image. In *note Zero point of an image:: we review the process of estimating the zero point of an image using a reference image or catalog. Finally, in *note Pointing pattern design:: we show the process by which you can simulate a dither pattern to find the best observing strategy for your next exciting scientific project. In these tutorials, we have intentionally avoided too many cross references to make it more easy to read. For more information about a particular program, you can visit the section with the same name as the program in this book. Each program section in the subsequent chapters starts by explaining the general concepts behind what it does, for example, see *note Convolve::. If you only want practical information on running a program, for example, its options/configuration, input(s) and output(s), please consult the subsection titled "Invoking ProgramName", for example, see *note Invoking astnoisechisel::. For an explanation of the conventions we use in the example codes through the book, please see *note Conventions::. * Menu: * General program usage tutorial:: Tutorial on many programs in generic scenario. * Detecting large extended targets:: NoiseChisel for huge extended targets. * Building the extended PSF:: How to extract an extended PSF from science data. * Sufi simulates a detection:: Simulating a detection. * Detecting lines and extracting spectra in 3D data:: Extracting spectra and emission line properties. * Color images with full dynamic range:: Bright pixels with color, faint pixels in grayscale. * Zero point of an image:: Estimate the zero point of an image. * Pointing pattern design:: Optimizing the pointings of your observations. * Moire pattern in stacking and its correction:: How to avoid this grid-based artifact. * Clipping outliers:: How to avoid outliers in your measurements. ---------- Footnotes ---------- (1) Stars also have similarly large and extended wings due to the point spread function, see *note PSF::. (2) The two historically motivated tutorials (*note Sufi simulates a detection:: is not intended to be a historical reference (the historical facts of this fictional tutorial used Wikipedia as a reference).) This form of presenting a tutorial was influenced by the PGF/TikZ and Beamer manuals. They are both packages in TeX and LaTeX, the first is a high-level vector graphic programming environment, while with the second you can make presentation slides. On a similar topic, there are also some nice words of wisdom for Unix-like systems called Rootless Root (http://catb.org/esr/writings/unix-koans). These also have a similar style but they use a mythical figure named Master Foo. If you already have some experience in Unix-like systems, you will definitely find these Unix Koans entertaining/educative.  File: gnuastro.info, Node: General program usage tutorial, Next: Detecting large extended targets, Prev: Tutorials, Up: Tutorials 2.1 General program usage tutorial ================================== Measuring colors of astronomical objects in broad-band or narrow-band images is one of the most basic and common steps in astronomical analysis. Here, we will use Gnuastro's programs to get a physical scale (area at certain redshifts) of the field we are studying, detect objects in a Hubble Space Telescope (HST) image, measure their colors and identify the ones with the strongest colors, do a visual inspection of these objects and inspect spatial position in the image. After this tutorial, you can also try the *note Detecting large extended targets:: tutorial which goes into a little more detail on detecting very low surface brightness signal. During the tutorial, we will take many detours to explain, and practically demonstrate, the many capabilities of Gnuastro's programs. In the end you will see that the things you learned during this tutorial are much more generic than this particular problem and can be used in solving a wide variety of problems involving the analysis of data (images or tables). So please do not rush, and go through the steps patiently to optimally master Gnuastro. In this tutorial, we will use the HSTeXtreme Deep Field (https://archive.stsci.edu/prepds/xdf) dataset. Like almost all astronomical surveys, this dataset is free for download and usable by the public. You will need the following tools in this tutorial: Gnuastro, SAO DS9 (1), GNU Wget(2), and AWK (most common implementation is GNU AWK(3)). This tutorial was first prepared for the "Exploring the Ultra-Low Surface Brightness Universe" workshop (November 2017) at the ISSI in Bern, Switzerland. It was further extended in the "4th Indo-French Astronomy School" (July 2018) organized by LIO, CRAL CNRS UMR5574, UCBL, and IUCAA in Lyon, France. We are very grateful to the organizers of these workshops and the attendees for the very fruitful discussions and suggestions that made this tutorial possible. *Write the example commands manually:* Try to type the example commands on your terminal manually and use the history feature of your command-line (by pressing the "up" button to retrieve previous commands). Do not simply copy and paste the commands shown here. This will help simulate future situations when you are processing your own datasets. * Menu: * Calling Gnuastro's programs:: Easy way to find Gnuastro's programs. * Accessing documentation:: Access to manual of programs you are running. * Setup and data download:: Setup this template and download datasets. * Dataset inspection and cropping:: Crop the flat region to use in next steps. * Angular coverage on the sky:: Measure the field size on the sky. * Cosmological coverage and visualizing tables:: Size in Mpc2, and plotting its change. * Building custom programs with the library:: Easy way to build new programs. * Option management and configuration files:: Dealing with options and configuring them. * Warping to a new pixel grid:: Transforming/warping the dataset. * NoiseChisel and Multi-Extension FITS files:: Running NoiseChisel and having multiple HDUs. * NoiseChisel optimization for detection:: Check NoiseChisel's operation and improve it. * NoiseChisel optimization for storage:: Dramatically decrease output's volume. * Segmentation and making a catalog:: Finding true peaks and creating a catalog. * Measuring the dataset limits:: One way to measure the "depth" of your data. * Working with catalogs estimating colors:: Estimating colors using the catalogs. * Column statistics color-magnitude diagram:: Visualizing column correlations. * Aperture photometry:: Doing photometry on a fixed aperture. * Matching catalogs:: Easily find corresponding rows from two catalogs. * Reddest clumps cutouts and parallelization:: Parallelization and selecting a subset of the data. * FITS images in a publication:: How to display FITS images in a PDF. * Marking objects for publication:: How to mark some objects over the image in a PDF. * Writing scripts to automate the steps:: Scripts will greatly help in re-doing things fast. * Citing and acknowledging Gnuastro:: How to cite and acknowledge Gnuastro in your papers. ---------- Footnotes ---------- (1) See *note SAO DS9::, available at <http://ds9.si.edu/site/Home.html> (2) <https://www.gnu.org/software/wget> (3) <https://www.gnu.org/software/gawk>  File: gnuastro.info, Node: Calling Gnuastro's programs, Next: Accessing documentation, Prev: General program usage tutorial, Up: General program usage tutorial 2.1.1 Calling Gnuastro's programs --------------------------------- A handy feature of Gnuastro is that all program names start with ‘ast’. This will allow your command-line processor to easily list and auto-complete Gnuastro's programs for you. Try typing the following command (press <TAB> key when you see ‘<TAB>’) to see the list: $ ast<TAB><TAB> Any program that starts with ‘ast’ (including all Gnuastro programs) will be shown. By choosing the subsequent characters of your desired program and pressing <<TAB><TAB>> again, the list will narrow down and the program name will auto-complete once your input characters are unambiguous. In short, you often do not need to type the full name of the program you want to run.  File: gnuastro.info, Node: Accessing documentation, Next: Setup and data download, Prev: Calling Gnuastro's programs, Up: General program usage tutorial 2.1.2 Accessing documentation ----------------------------- Gnuastro contains a large number of programs and it is natural to forget the details of each program's options or inputs and outputs. Therefore, before starting the analysis steps of this tutorial, let's review how you can access this book to refresh your memory any time you want, without having to take your hands off the keyboard. When you install Gnuastro, this book is also installed on your system along with all the programs and libraries, so you do not need an internet connection to access/read it. Also, by accessing this book as described below, you can be sure that it corresponds to your installed version of Gnuastro. GNU Info(1) is the program in charge of displaying the manual on the command-line (for more, see *note Info::). To see this whole book on your command-line, please run the following command and press subsequent keys. Info has its own mini-environment, therefore we will show the keys that must be pressed in the mini-environment after a ‘->’ sign. You can also ignore anything after the ‘#’ sign in the middle of the line, they are only for your information. $ info gnuastro # Open the top of the manual. -> <SPACE> # All the book chapters. -> <SPACE> # Continue down: show sections. -> <SPACE> ... # Keep pressing space to go down. -> q # Quit Info, return to the command-line. The thing that greatly simplifies navigation in Info is the links (regions with an underline). You can immediately go to the next link in the page with the <<TAB>> key and press <<ENTER>> on it to go into that part of the manual. Try the commands above again, but this time also use <<TAB>> to go to the links and press <<ENTER>> on them to go to the respective section of the book. Then follow a few more links and go deeper into the book. To return to the previous page, press <l> (small L). If you are searching for a specific phrase in the whole book (for example, an option name), press <s> and type your search phrase and end it with an <<ENTER>>. Finally, you can return to the command line and quit Info by pressing the <q> key. You do not need to start from the top of the manual every time. For example, to get to *note Invoking astnoisechisel::, run the following command. In general, all programs have such an "Invoking ProgramName" section in this book. These sections are specifically for the description of inputs, outputs and configuration options of each program. You can access them directly for each program by giving its executable name to Info. $ info astnoisechisel The other sections do not have such shortcuts. To directly access them from the command-line, you need to tell Info to look into Gnuastro's manual, then look for the specific section (an unambiguous title is necessary). For example, if you only want to review/remember NoiseChisel's *note Detection options::), just run the following command. Note how case is irrelevant for Info when calling a title in this manner. $ info gnuastro "Detection options" In general, Info is a powerful and convenient way to access this whole book with detailed information about the programs you are running. If you are not already familiar with it, please run the following command and just read along and do what it says to learn it. Do not stop until you feel sufficiently fluent in it. Please invest the half an hour's time necessary to start using Info comfortably. It will greatly improve your productivity and you will start reaping the rewards of this investment very soon. $ info info As a good scientist you need to feel comfortable to play with the features/options and avoid (be critical to) using default values as much as possible. On the other hand, our human memory is limited, so it is important to be able to easily access any part of this book fast and remember the option names, what they do and their acceptable values. If you just want the option names and a short description, calling the program with the ‘--help’ option might also be a good solution like the first example below. If you know a few characters of the option name, you can feed the printed output to ‘grep’ like the second or third example commands. $ astnoisechisel --help $ astnoisechisel --help | grep quant $ astnoisechisel --help | grep check ---------- Footnotes ---------- (1) GNU Info is already available on almost all Unix-like operating systems.  File: gnuastro.info, Node: Setup and data download, Next: Dataset inspection and cropping, Prev: Accessing documentation, Up: General program usage tutorial 2.1.3 Setup and data download ----------------------------- The first step in the analysis of the tutorial is to download the necessary input datasets. First, to keep things clean, let's create a ‘gnuastro-tutorial’ directory and continue all future steps in it: $ mkdir gnuastro-tutorial $ cd gnuastro-tutorial We will be using the near infra-red Wide Field Camera (http://www.stsci.edu/hst/wfc3) dataset. If you already have them in another directory (for example, ‘XDFDIR’, with the same FITS file names), you can set the ‘download’ directory to be a symbolic link to ‘XDFDIR’ with a command like this: $ ln -s XDFDIR download Otherwise, when the following images are not already present on your system, you can make a ‘download’ directory and download them there. $ mkdir download $ cd download $ xdfurl=http://archive.stsci.edu/pub/hlsp/xdf $ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_f105w_v1_sci.fits $ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_f125w_v1_sci.fits $ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits $ cd .. In this tutorial, we will just use these three filters. Later, you may need to download more filters. To do that, you can use the shell's ‘for’ loop to download them all in series (one after the other(1)) with one command like the one below for the WFC3 filters. Put this command instead of the three ‘wget’ commands above. Recall that all the extra spaces, backslashes (‘\’), and new lines can be ignored if you are typing on the lines on the terminal. $ for f in f105w f125w f140w f160w; do \ wget $xdfurl/hlsp_xdf_hst_wfc3ir-60mas_hudf_"$f"_v1_sci.fits; \ done ---------- Footnotes ---------- (1) Note that you only have one port to the internet, so downloading in parallel will actually be slower than downloading in series.  File: gnuastro.info, Node: Dataset inspection and cropping, Next: Angular coverage on the sky, Prev: Setup and data download, Up: General program usage tutorial 2.1.4 Dataset inspection and cropping ------------------------------------- First, let's visually inspect the datasets we downloaded in *note Setup and data download::. Let's take F160W image as an example. One of the most common programs for viewing FITS images is SAO DS9, which is usually called through the ‘ds9’ command-line program, like the command below. If you do not already have DS9 on your computer and the command below fails, please see *note SAO DS9::. $ ds9 download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits By default, DS9 open a relatively small window (for modern browsers) and its default scale and color bar make it very hard to see any structure in the image: everything will look black. Also, by default, it zooms into the center of the image and you need to scroll to zoom-out and see the whole thing. To avoid these problems, Gnuastro has the ‘astscript-fits-view’ script: $ astscript-fits-view \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits After running this command, you will see that the DS9 window fully covers the height of your monitor, it is showing the whole image, using a more clear color-map, and many more useful things. In fact, you see the DS9 command that is used in your terminal(1). On GNU/Linux operating systems (like Ubuntu, and Fedora), you can also set your graphics user interface to use this script for opening FITS files when you click on them. For more, see the instructions in the checklist at the start of *note Invoking astscript-fits-view::. As you hover your mouse over the image, notice how the "Value" and positional fields on the top of the ds9 window get updated. The first thing you might notice is that when you hover the mouse over the regions with no data, they have a value of zero. The next thing might be that the dataset has a shallower and deeper component (see *note Quantifying measurement limits::). Recall that this is a combined/reduced image of many exposures, and the parts that have more exposures are deeper. In particular, the exposure time of the deep inner region is more than 4 times the exposure time of the outer (more shallower) parts. To simplify the analysis in this tutorial, we will only be working on the deep field, so let's crop it out of the full dataset. Fortunately the XDF survey web page (above) contains the vertices of the deep flat WFC3-IR field(2). With Gnuastro's Crop program, you can use those vertices to cutout this deep region from the larger image (to learn more about the Crop program see *note Crop::). But before that, to keep things organized, let's make a directory called ‘flat-ir’ and keep the flat (single-depth) regions in that directory (with a '‘xdf-’' prefix for a shorter and easier filename). $ mkdir flat-ir $ astcrop --mode=wcs -h0 --output=flat-ir/xdf-f105w.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f105w_v1_sci.fits $ astcrop --mode=wcs -h0 --output=flat-ir/xdf-f125w.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f125w_v1_sci.fits $ astcrop --mode=wcs -h0 --output=flat-ir/xdf-f160w.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_f160w_v1_sci.fits Run the command below to have a look at the cropped images: $ astscript-fits-view flat-ir/*.fits You only see the deep region now, does not the noise look much cleaner? An important result of this crop is that regions with no data now have a NaN (Not-a-Number, or a blank value) value. Any self-respecting statistical program will ignore NaN values, so they will not affect your outputs. For example, notice how changing the DS9 color bar will not affect the NaN pixels (their colors will not change). However, do you remember that in the downloaded files, such regions had a value of zero? That is a big problem! Because zero is a number, and is thus meaningful, especially when you later want to NoiseChisel to detect(3) all the signal from the deep universe in this image. Generally, when you want to ignore some pixels in a dataset, and avoid higher-level ambiguities or complications, it is always best to give them blank values (not zero, or some other absurdly large or small number). Gnuastro has the Arithmetic program for such cases, and we will introduce it later in this tutorial. In the example above, the polygon vertices are in degrees, but you can also replace them with sexagesimal(4) coordinates (for example, using ‘03h32m44.9794’ or ‘03:32:44.9794’ instead of ‘53.187414’, the first RA, and ‘-27d46m44.9472’ or ‘-27:46:44.9472’ instead of ‘-27.779152’, the first Dec). To further simplify things, you can even define your polygon visually as a DS9 "region", save it as a "region file" and give that file to crop. But we need to continue, so if you are interested to learn more, see *note Crop::. Before closing this section, let's just take a look at the three cropping commands we ran above. The only thing varying in the three commands the filter name! Note how everything else is the same! In such cases, you should generally avoid repeating a command manually, it is prone to _many_ bugs, and as you see, it is very hard to read (did not you suddenly write a ‘7’ as an ‘8’?). To simplify the command, and allow you to work on more filters, we can use the shell's ‘for’ loop as shown below. Notice how the place where the filter names (‘f105w’, ‘f125w’ and ‘f160w’) are used above, have been replaced with ‘$f’ (the shell variable that ‘for’ will update in every loop) below. $ rm flat-ir/*.fits $ for f in f105w f125w f160w; do \ astcrop --mode=wcs -h0 --output=flat-ir/xdf-$f.fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" \ download/hlsp_xdf_hst_wfc3ir-60mas_hudf_"$f"_v1_sci.fits; \ done ---------- Footnotes ---------- (1) When comparing DS9's command-line options to Gnuastro's, you will notice how SAO DS9 does not follow the GNU style of options where "long" and "short" options are preceded by ‘--’ and ‘-’ respectively (for example, ‘--width’ and ‘-w’, see *note Options::). (2) <https://archive.stsci.edu/prepds/xdf/#dataproducts> (3) As you will see below, unlike most other detection algorithms, NoiseChisel detects the objects from their faintest parts, it does not start with their high signal-to-noise ratio peaks. Since the Sky is already subtracted in many images and noise fluctuates around zero, zero is commonly higher than the initial threshold applied. Therefore keeping zero-valued pixels in this image will cause them to identified as part of the detections! (4) <https://en.wikipedia.org/wiki/Sexagesimal>  File: gnuastro.info, Node: Angular coverage on the sky, Next: Cosmological coverage and visualizing tables, Prev: Dataset inspection and cropping, Up: General program usage tutorial 2.1.5 Angular coverage on the sky --------------------------------- The cropped images in *note Dataset inspection and cropping:: are the deepest images we currently have of the sky. The first thing that comes to mind may be this: "How large is this field on the sky?". *More accurate method:* the steps mentioned in this section are primarily designed to help you get familiar with the FITS WCS standard and some shells scripting. The accuracy of this method will decrease as your image becomes large (on the scale of degrees). For an accurate method, see *note Area of non-blank pixels on sky::. You can get a fast and crude answer with Gnuastro's Fits program, using this command: $ astfits flat-ir/xdf-f160w.fits --skycoverage It will print the sky coverage in two formats (all numbers are in units of degrees for this image): 1) the image's central RA and Dec and full width around that center, 2) the range of RA and Dec covered by this image. You can use these values in various online query systems. You can also use this option to automatically calculate the area covered by this image. With the ‘--quiet’ option, the printed output of ‘--skycoverage’ will not contain human-readable text, making it easier for automatic (computer) processing: $ astfits flat-ir/xdf-f160w.fits --skycoverage --quiet The second row is the coverage range along RA and Dec (compare with the outputs before using ‘--quiet’). We can thus simply subtract the second from the first column and multiply it with the difference of the fourth and third columns to calculate the image area. We will also multiply each by 60 to have the area in arc-minutes squared. $ astfits flat-ir/xdf-f160w.fits --skycoverage --quiet \ | awk 'NR==2{print ($2-$1)*60*($4-$3)*60}' The returned value is $9.06711$ arcmin$^2$. *However, this method ignores the fact that many of the image pixels are blank!* In other words, the image does cover this area, but there is no data in more than half of the pixels. So let's calculate the area coverage over-which we actually have data. The FITS world coordinate system (WCS) metadata standard contains the key to answering this question. Run the following command to see all the FITS keywords (metadata) for one of the images (almost identical with the other images because they are scaled to the same region of Sky): $ astfits flat-ir/xdf-f160w.fits -h1 Look into the keywords grouped under the '‘World Coordinate System (WCS)’' title. These keywords define how the image relates to the outside world. In particular, the ‘CDELT*’ keywords (or ‘CDELT1’ and ‘CDELT2’ in this 2D image) contain the "Coordinate DELTa" (or change in coordinate units) with a change in one pixel. But what is the units of each "world" coordinate? The ‘CUNIT*’ keywords (for "Coordinate UNIT") have the answer. In this case, both ‘CUNIT1’ and ‘CUNIT1’ have a value of ‘deg’, so both "world" coordinates are in units of degrees. We can thus conclude that the value of ‘CDELT*’ is in units of degrees-per-pixel(1). With the commands below, we will use ‘CDELT’ (along with the number of non-blank pixels) to find the answer of our initial question: "how much of the sky does this image cover?". The lines starting with ‘##’ are just comments for you to read and understand each command. Do not type them on the terminal (no problem if you do, they will just not have any effect). The commands are intentionally repetitive in some places to better understand each step and also to demonstrate the beauty of command-line features like history, variables, pipes and loops (which you will commonly use as you become more proficient on the command-line). *Use shell history:* Do not forget to make effective use of your shell's history: you do not have to re-type previous command to add something to them (like the examples below). This is especially convenient when you just want to make a small change to your previous command. Press the "up" key on your keyboard (possibly multiple times) to see your previous command(s) and modify them accordingly. *Your locale does not use '.' as decimal separator:* on systems that do not use an English language environment, the dates, numbers, etc., can be printed in different formats (for example, '0.5' can be written as '0,5': with a comma). With the ‘LC_NUMERIC’ line at the start of the script below, we are ensuring a unified format in the output of ‘seq’. For more, please see *note Numeric locale::. ## Make sure that the decimal separator is a point in any environment. $ export LC_NUMERIC=C ## See the general statistics of non-blank pixel values. $ aststatistics flat-ir/xdf-f160w.fits ## We only want the number of non-blank pixels (add '--number'). $ aststatistics flat-ir/xdf-f160w.fits --number ## Keep the result of the command above in the shell variable `n'. $ n=$(aststatistics flat-ir/xdf-f160w.fits --number) ## See what is stored the shell variable `n'. $ echo $n ## Show all the FITS keywords of this image. $ astfits flat-ir/xdf-f160w.fits -h1 ## The resolution (in degrees/pixel) is in the `CDELT' keywords. ## Only show lines that contain these characters, by feeding ## the output of the previous command to the `grep' program. $ astfits flat-ir/xdf-f160w.fits -h1 | grep CDELT ## Since the resolution of both dimensions is (approximately) equal, ## we will only read the value of one (CDELT1) with '--keyvalue'. $ astfits flat-ir/xdf-f160w.fits -h1 --keyvalue=CDELT1 ## We do not need the file name in the output (add '--quiet'). $ astfits flat-ir/xdf-f160w.fits -h1 --keyvalue=CDELT1 --quiet ## Save it as the shell variable `r'. $ r=$(astfits flat-ir/xdf-f160w.fits -h1 --keyvalue=CDELT1 --quiet) ## Print the values of `n' and `r'. $ echo $n $r ## Use the number of pixels (first number passed to AWK) and ## length of each pixel's edge (second number passed to AWK) ## to estimate the area of the field in arc-minutes squared. $ echo $n $r | awk '{print $1 * ($2*60)^2}' The output of the last command (area of this field) is 4.03817 (or approximately 4.04) arc-minutes squared. Just for comparison, this is roughly 175 times smaller than the average moon's angular area (with a diameter of 30 arc-minutes or half a degree). Some FITS writers do not use the ‘CDELT’ convention, making it hard to use the steps above. In such cases, you can extract the pixel scale with the ‘--pixelscale’ option of Gnuastro's Fits program like the command below. Similar to the ‘--skycoverage’ option above, you can also use the ‘--quiet’ option to allow easy usage of the values in scripts. $ astfits flat-ir/xdf-f160w.fits --pixelscale *AWK for table/value processing:* As you saw above AWK is a powerful and simple tool for text processing. You will see it often in shell scripts. GNU AWK (the most common implementation) comes with a free and wonderful book (https://www.gnu.org/software/gawk/manual/) in the same format as this book which will allow you to master it nicely. Just like this manual, you can also access GNU AWK's manual on the command-line whenever necessary without taking your hands off the keyboard. Just run ‘info awk’. ---------- Footnotes ---------- (1) With the FITS ‘CDELT’ convention, rotation (‘PC’ or ‘CD’ keywords) and scales (‘CDELT’) are separated. In the FITS standard the ‘CDELT’ keywords are optional. When ‘CDELT’ keywords are not present, the ‘PC’ matrix is assumed to contain _both_ the coordinate rotation and scales. Note that not all FITS writers use the ‘CDELT’ convention. So you might not find the ‘CDELT’ keywords in the WCS metadata of some FITS files. However, all Gnuastro programs (which use the default FITS keyword writing format of WCSLIB) write their output WCS with the ‘CDELT’ convention, even if the input does not have it. If your dataset does not use the ‘CDELT’ convention, you can feed it to any (simple) Gnuastro program (for example, Arithmetic) and the output will have the ‘CDELT’ keyword. See Section 8 of the FITS standard (https://fits.gsfc.nasa.gov/standard40/fits_standard40aa-le.pdf) for more  File: gnuastro.info, Node: Cosmological coverage and visualizing tables, Next: Building custom programs with the library, Prev: Angular coverage on the sky, Up: General program usage tutorial 2.1.6 Cosmological coverage and visualizing tables -------------------------------------------------- Having found the angular coverage of the dataset in *note Angular coverage on the sky::, we can now use Gnuastro to answer a more physically motivated question: "How large is this area at different redshifts?". To get a feeling of the tangential area that this field covers at redshift 2, you can use Gnuastro's CosmicCalcular program (*note CosmicCalculator::). In particular, you need the tangential distance covered by 1 arc-second as raw output. Combined with the field's area that was measured before, we can calculate the tangential distance in Mega Parsecs squared ($Mpc^2$). ## If your system language uses ',' (not '.') as decimal separator. $ export LC_NUMERIC=C ## Print general cosmological properties at redshift 2 (for example). $ astcosmiccal -z2 ## When given a "Specific calculation" option, CosmicCalculator ## will just print that particular calculation. To see all such ## calculations, add a `--help' token to the previous command ## (under the same title). Note that with `--help', no processing ## is done, so you can always simply append it to remember ## something without modifying the command you want to run. $ astcosmiccal -z2 --help ## Only print the "Tangential dist. covered by 1arcsec at z (kpc)". ## in units of kpc/arc-seconds. $ astcosmiccal -z2 --arcsectandist ## It is easier to use the short (single character) version of ## this option when typing (but this is hard to read, so use ## the long version in scripts or notes you plan to archive). $ astcosmiccal -z2 -s ## Short options can be merged (they are only a single character!) $ astcosmiccal -sz2 ## Convert this distance to kpc^2/arcmin^2 and save in `k'. $ k=$(astcosmiccal -sz2 | awk '{print ($1*60)^2}') ## Calculate the area of the dataset in arcmin^2. $ n=$(aststatistics flat-ir/xdf-f160w.fits --number) $ r=$(astfits flat-ir/xdf-f160w.fits -h1 --keyvalue=CDELT1 -q) $ a=$(echo $n $r | awk '{print $1 * ($2*60)^2 }') ## Multiply `k' and `a' and divide by 10^6 for value in Mpc^2. $ echo $k $a | awk '{print $1 * $2 / 1e6}' At redshift 2, this field therefore covers approximately 1.07 $Mpc^2$. If you would like to see how this tangential area changes with redshift, you can use a shell loop like below. $ for z in 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0; do \ k=$(astcosmiccal -sz$z); \ echo $z $k $a | awk '{print $1, ($2*60)^2 * $3 / 1e6}'; \ done Fortunately, the shell has a useful tool/program to print a sequence of numbers that is nicely called ‘seq’ (short for "sequence"). You can use it instead of typing all the different redshifts in the loop above. For example, the loop below will calculate and print the tangential coverage of this field across a larger range of redshifts (0.1 to 5) and with finer increments of 0.1. For more on the ‘LC_NUMERIC’ command, see *note Numeric locale::. ## If your system language uses ',' (not '.') as decimal separator. $ export LC_NUMERIC=C ## The loop over the redshifts $ for z in $(seq 0.1 0.1 5); do \ k=$(astcosmiccal -z$z --arcsectandist); \ echo $z $k $a | awk '{print $1, ($2*60)^2 * $3 / 1e6}'; \ done Have a look at the two printed columns. The first is the redshift, and the second is the area of this image at that redshift (in Mega Parsecs squared). Redshift (https://en.wikipedia.org/wiki/Redshift) ($z$) is a measure of distance in galaxy evolution and cosmology: a higher redshift corresponds to larger distance. Now, have a look at the first few values. At $z=0.1$ and $z=0.5$, this image covers $0.05 Mpc^2$ and $0.57 Mpc^2$ respectively. This increase of coverage with redshift is expected because a fixed angle will cover a larger tangential area at larger distances. However, as you come down the list (to higher redshifts) you will notice that this relation does not hold! The largest coverage is at $z=1.6$: at higher redshifts, the area decreases, and continues decreasing!!! In $\Lambda{}CDM$ cosmology, this happens because of the finite speed of light and the expansion of the universe, see the Wikipedia page (https://en.wikipedia.org/wiki/Angular_diameter_distance#Angular_diameter_turnover_point). In case you have TOPCAT, you can visualize this as a plot (if you do not have TOPCAT, see *note TOPCAT::). To do so, first you need to save the output of the loop above into a FITS table by piping the output to Gnuastro's Table program and giving an output name: $ for z in $(seq 0.1 0.1 5); do \ k=$(astcosmiccal -z$z --arcsectandist); \ echo $z $k $a | awk '{print $1, ($2*60)^2 * $3 / 1e6}'; \ done | asttable --output=z-vs-tandist.fits You can now use Gnuastro's ‘astscript-fits-view’ to open this table in TOPCAT with the command below. Do you remember this script from *note Dataset inspection and cropping::? There, we used it to view a FITS image with DS9! This script will see if the first dataset in the image is a table or an image and will call TOPCAT or DS9 accordingly: making it a very convenient tool to inspect the contents of all types of FITS data. $ astscript-fits-view z-vs-tandist.fits After TOPCAT opens, you will see the name of the table ‘z-vs-tandist.fits’ in the left panel. On the top menu bar, select the "Graphics" menu, then select "Plain plot" to visualize the two columns printed above as a plot and get a better impression of the turn over point of the image cosmological coverage.  File: gnuastro.info, Node: Building custom programs with the library, Next: Option management and configuration files, Prev: Cosmological coverage and visualizing tables, Up: General program usage tutorial 2.1.7 Building custom programs with the library ----------------------------------------------- In *note Cosmological coverage and visualizing tables::, we repeated a certain calculation/output of a program multiple times using the shell's ‘for’ loop. This simple way of repeating a calculation is great when it is only necessary once. However, if you commonly need this calculation and possibly for a larger number of redshifts at higher precision, the command above can be slow. Please try it out by changing the sequence command in the previous section to '‘seq 0.1 0.01 10’'. It will take about 11 seconds(1)! This can be improved by _hundreds_ of times! This section will show you how. Generally, repeated calls to a generic program (like CosmicCalculator) are slow, because a generic program can have a lot of overhead on each call. To be generic and easy to operate, CosmicCalculator has to parse the command-line and all configuration files (see *note Option management and configuration files::) which contain human-readable characters and need a lot of pre-processing to be ready for processing by the computer. Afterwards, CosmicCalculator has to check the sanity of its inputs and check which of its many options you have asked for. All the this pre-processing takes as much time as the high-level calculation you are requesting, and it has to re-do all of these for every redshift in your loop. To greatly speed up the processing, you can directly access the core work-horse of CosmicCalculator without all that overhead by designing your custom program for this job. Using Gnuastro's library, you can write your own tiny program particularly designed for this exact calculation (and nothing else!). To do that, copy and paste the following C program in a file called ‘myprogram.c’. #include <math.h> #include <stdio.h> #include <stdlib.h> #include <gnuastro/cosmology.h> int main(void) { double area=4.03817; /* Area of field (arcmin^2). */ double z, adist, tandist; /* Temporary variables. */ /* Constants from Plank 2018 (arXiv:1807.06209, Table 2) */ double H0=67.66, olambda=0.6889, omatter=0.3111, oradiation=0; /* Do the same thing for all redshifts (z) between 0.1 and 5. */ for(z=0.1; z<10; z+=0.01) { /* Calculate the angular diameter distance. */ adist=gal_cosmology_angular_distance(z, H0, olambda, omatter, oradiation); /* Calculate the tangential distance of one arcsecond. */ tandist = adist * 1000 * M_PI / 3600 / 180; /* Print the redshift and area. */ printf("%-5.2f %g\n", z, pow(tandist * 60,2) * area / 1e6); } /* Tell the system that everything finished successfully. */ return EXIT_SUCCESS; } Then run the following command to compile your program and run it. $ astbuildprog myprogram.c In the command above, you used Gnuastro's BuildProgram program. Its job is to simplify the compilation, linking and running of simple C programs that use Gnuastro's library (like this one). BuildProgram is designed to manage Gnuastro's dependencies, compile and link your custom program and then run it. Did you notice how your custom program created the table almost instantaneously? Technically, it only took about 0.03 seconds! Recall that the ‘for’ loop of *note Cosmological coverage and visualizing tables:: took more than 11 seconds (or $\sim367$ times slower!). Please run the ‘ls’ command to see a listing of the files in the current directory. You will notice that a new file called ‘myprogram’ has been created. This is the compiled program that was created and run by the command above (its in binary machine code format, not human-readable any more). You can run it again to get the same results by executing it: $ ./myprogram The efficiency of your custom ‘myprogram’ compared to repeated calls to CosmicCalculator is because in the latter, the requested processing is comparable to the necessary overheads. For other programs that take large input datasets and do complicated processing on them, the overhead is usually negligible compared to the processing. In such cases, the libraries are only useful if you want a different/new processing compared to the functionalities in Gnuastro's existing programs. Gnuastro has a large library which is used extensively by all the programs. In other words, the library is like the skeleton of Gnuastro. For the full list of available functions classified by context, please see *note Gnuastro library::. Gnuastro's library and BuildProgram are created to make it easy for you to use these powerful features as you like. This gives you a high level of creativity, while also providing efficiency and robustness. Several other complete working examples (involving images and tables) of Gnuastro's libraries can be see in *note Library demo programs::. But for this tutorial, let's stop discussing the libraries here and get back to Gnuastro's already built programs (which do not need C programming). But before continuing, let's clean up the files we do not need any more: $ rm myprogram* z-vs-tandist* ---------- Footnotes ---------- (1) To measure how much time the loop of *note Cosmological coverage and visualizing tables:: takes on your system, you can use the ‘time’ command. First put the whole loop (and pipe) into a plain-text file (to be loaded as a shell script) called ‘z-vs-tandist.sh’. Then run this command: ‘time -p bash z-vs-tandist.sh’. The relevant time (in seconds) is shown after ‘real’.  File: gnuastro.info, Node: Option management and configuration files, Next: Warping to a new pixel grid, Prev: Building custom programs with the library, Up: General program usage tutorial 2.1.8 Option management and configuration files ----------------------------------------------- In the previous section (*note Cosmological coverage and visualizing tables::), when you ran CosmicCalculator, you only specified the redshfit with ‘-z2’ option. You did not specify the cosmological parameters that are necessary for the calculations! Parameters like the Hubble constant ($H_0$) and the matter density. In spite of this, CosmicCalculator done its processing and printed results. None of Gnuastro's programs keep a default value internally within their code (they are all set by the user)! So where did the necessary cosmological parameters that are necessary for its calculations come from? What were the values to those parameters? In short, they come from a configuration file (see *note Configuration file precedence::), and the final used values can be checked/edited on the command-line. In this section we will review this important aspect of all the programs in Gnuastro. Configuration files are an important part of all Gnuastro's programs, especially the ones with a large number of options, so it is important to understand this part well. Once you get comfortable with configuration files, you can make good use of them in all Gnuastro programs (for example, NoiseChisel). For example, to do optimal detection on various datasets, you can have configuration files for different noise properties. The configuration of each program (besides its version) is vital for the reproducibility of your results, so it is important to manage them properly. As we saw above, the full list of the options in all Gnuastro programs can be seen with the ‘--help’ option. Try calling it with CosmicCalculator as shown below. Note how options are grouped by context to make it easier to find your desired option. However, in each group, options are ordered alphabetically. $ astcosmiccal --help After running the command above, please scroll to the line that you ran this command and read through the output (its the same format for all the programs). All options have a long format (starting with ‘--’ and a multi-character name) and some have a short format (starting with ‘-’ and a single character), for more see *note Options::. The options that expect a value, have an <=> sign after their long version. The format of their expected value is also shown as ‘FLT’, ‘INT’ or ‘STR’ for floating point numbers, integer numbers, and strings (filenames for example) respectively. You can see the values of all options that need one with the ‘--printparams’ option (or its short format: ‘-P’). ‘--printparams’ is common to all programs (see *note Common options::). You can see the default cosmological parameters, from the Plank collaboration 2020 (https://arxiv.org/abs/1807.06209), under the ‘# Input:’ title: $ astcosmiccal -P # Input: H0 67.66 # Current expansion rate (Hubble constant). olambda 0.6889 # Current cosmological cst. dens. per crit. dens. omatter 0.3111 # Current matter density per critical density. oradiation 0 # Current radiation density per critical density. Let's say you want to do the calculation in the previous section using $H_0=70$ km/s/Mpc. To do this, just add ‘--H0=70’ after the command above (while keeping the ‘-P’). In the output, you can see that the used Hubble constant has also changed. $ astcosmiccal -P --H0=70 Afterwards, delete the ‘-P’ and add a ‘-z2’ to see the calculations with the new cosmology (or configuration). $ astcosmiccal --H0=70 -z2 From the output of the ‘--help’ option, note how the option for Hubble constant has both short (‘-H’) and long (‘--H0’) formats. One final note is that the equal (<=>) sign is not mandatory. In the short format, the value can stick to the actual option (the short option name is just one character after-all, thus easily identifiable) and in the long format, a white-space character is also enough. $ astcosmiccal -H70 -z2 $ astcosmiccal --H0 70 -z2 --arcsectandist When an option does not need a value, and has a short format (like ‘--arcsectandist’), you can easily append it _before_ other short options. So the last command above can also be written as: $ astcosmiccal --H0 70 -sz2 Let's assume that in one project, you want to only use rounded cosmological parameters ($H_0$ of 70km/s/Mpc and matter density of 0.3). You should therefore run CosmicCalculator like this: $ astcosmiccal --H0=70 --olambda=0.7 --omatter=0.3 -z2 But having to type these extra options every time you run CosmicCalculator will be prone to errors (typos in particular), frustrating and slow. Therefore in Gnuastro, you can put all the options and their values in a "Configuration file" and tell the programs to read the option values from there. Let's create a configuration file... With your favorite text editor, make a file named ‘my-cosmology.conf’ (or ‘my-cosmology.txt’, the suffix does not matter for Gnuastro, but a more descriptive suffix like ‘.conf’ is recommended for humans reading your code and seeing your files: this includes you, looking into your own project, in a couple of months that you have forgot the details!). Then put the following lines inside of the plain-text file. One space between the option value and name is enough, the values are just under each other to help in readability. Also note that you should only use _long option names_ in configuration files. H0 70 olambda 0.7 omatter 0.3 You can now tell CosmicCalculator to read this file for option values immediately using the ‘--config’ option as shown below. Do you see how the output of the following command corresponds to the option values in ‘my-cosmology.conf’, and is therefore identical to the previous command? $ astcosmiccal --config=my-cosmology.conf -z2 But still, having to type ‘--config=my-cosmology.conf’ every time is annoying, is not it? If you need this cosmology every time you are working in a specific directory, you can use Gnuastro's default configuration file names and avoid having to type it manually. The default configuration files (that are checked if they exist) must be placed in the hidden ‘.gnuastro’ sub-directory (in the same directory you are running the program). Their file name (within ‘.gnuastro’) must also be the same as the program's executable name. So in the case of CosmicCalculator, the default configuration file in a given directory is ‘.gnuastro/astcosmiccal.conf’. Let's do this. We will first make a directory for our custom cosmology, then build a ‘.gnuastro’ within it. Finally, we will copy the custom configuration file there: $ mkdir my-cosmology $ mkdir my-cosmology/.gnuastro $ mv my-cosmology.conf my-cosmology/.gnuastro/astcosmiccal.conf Once you run CosmicCalculator within ‘my-cosmology’ (as shown below), you will see how your custom cosmology has been implemented without having to type anything extra on the command-line. $ cd my-cosmology $ astcosmiccal -P # Your custom cosmology is printed. $ cd .. $ astcosmiccal -P # The default cosmology is printed. To further simplify the process, you can use the ‘--setdirconf’ option. If you are already in your desired working directory, calling this option with the others will automatically write the final values (along with descriptions) in ‘.gnuastro/astcosmiccal.conf’. For example, try the commands below: $ mkdir my-cosmology2 $ cd my-cosmology2 $ astcosmiccal -P $ astcosmiccal --H0 70 --olambda=0.7 --omatter=0.3 --setdirconf $ astcosmiccal -P $ cd .. Gnuastro's programs also have default configuration files for a specific user (when run in any directory). This allows you to set a special behavior every time a program is run by a specific user. Only the directory and filename differ from the above, the rest of the process is similar to before. Finally, there are also system-wide configuration files that can be used to define the option values for all users on a system. See *note Configuration file precedence:: for a more detailed discussion. We will stop the discussion on configuration files here, but you can always read about them in *note Configuration files::. Before continuing the tutorial, let's delete the two extra directories that we do not need any more: $ rm -rf my-cosmology*  File: gnuastro.info, Node: Warping to a new pixel grid, Next: NoiseChisel and Multi-Extension FITS files, Prev: Option management and configuration files, Up: General program usage tutorial 2.1.9 Warping to a new pixel grid --------------------------------- We are now ready to start processing the deep HST images that were prepared in *note Dataset inspection and cropping::. One of the most important points while using several images for data processing is that those images must have the same pixel grid. The process of changing the pixel grid is named 'warp'. Fortunately, Gnuastro has Warp program for warping the pixel grid (see *note Warp::). Warping to a different/matched pixel grid is commonly needed before higher-level analysis especially when you are using datasets from different instruments. The XDF datasets we are using here are already aligned to the same pixel grid. But let's have a look at some of Gnuastro's linear warping features here. For example, try rotating one of the images by 20 degrees with the first command below. With the second command, open the output and input to see how it is rotated. $ astwarp flat-ir/xdf-f160w.fits --rotate=20 $ astscript-fits-view flat-ir/xdf-f160w.fits xdf-f160w_rotated.fits Warp can generally be used for many kinds of pixel grid manipulation (warping), not just rotations. For example, the outputs of the commands below will have larger pixels respectively (new resolution being one quarter the original resolution), get shifted by 2.8 (by sub-pixel), get a shear of 2, and be tilted (projected). Run each of them and open the output file to see the effect, they will become handy for you in the future. $ astwarp flat-ir/xdf-f160w.fits --scale=0.25 $ astwarp flat-ir/xdf-f160w.fits --translate=2.8 $ astwarp flat-ir/xdf-f160w.fits --shear=0.2 $ astwarp flat-ir/xdf-f160w.fits --project=0.001,0.0005 $ astscript-fits-view flat-ir/xdf-f160w.fits *.fits If you need to do multiple warps, you can combine them in one call to Warp. For example, to first rotate the image, then scale it, run this command: $ astwarp flat-ir/xdf-f160w.fits --rotate=20 --scale=0.25 If you have multiple warps, do them all in one command. Do not warp them in separate commands because the correlated noise will become too strong. As you see in the matrix that is printed when you run Warp, it merges all the warps into a single warping matrix (see *note Merging multiple warpings::) and simply applies that (mixes the pixel values) just once. However, if you run Warp multiple times, the pixels will be mixed multiple times, creating a strong artificial blur/smoothing, or stronger correlated noise. Recall that the merging of multiple warps is done through matrix multiplication, therefore order matters in the separate operations. At a lower level, through Warp's ‘--matrix’ option, you can directly request your desired final warp and do not have to break it up into different warps like above (see *note Invoking astwarp::). Fortunately these datasets are already aligned to the same pixel grid, so you do not actually need the files that were just generated. You can safely delete them all with the following command. Here, you see why we put the processed outputs that we need later into a separate directory. In this way, the top directory can be used for temporary files for testing that you can simply delete with a generic command like below. $ rm *.fits  File: gnuastro.info, Node: NoiseChisel and Multi-Extension FITS files, Next: NoiseChisel optimization for detection, Prev: Warping to a new pixel grid, Up: General program usage tutorial 2.1.10 NoiseChisel and Multi-Extension FITS files ------------------------------------------------- In the previous sections, we completed a review of the basics of Gnuastro's programs. We are now ready to do some more serious analysis on the downloaded images: extract the pixels containing signal from the image, find sub-structure of the extracted signal, do measurements over the extracted objects and analyze them (finding certain objects of interest in the image). The first step is to separate the signal (galaxies or stars) from the background noise in the image. We will be using the results of *note Dataset inspection and cropping::, so be sure you already have them. Gnuastro has NoiseChisel for this job. But NoiseChisel's output is a multi-extension FITS file, therefore to better understand how to use NoiseChisel, let's take a look at multi-extension FITS files and how you can interact with them. In the FITS format, each extension contains a separate dataset (image in this case). You can get basic information about the extensions in a FITS file with Gnuastro's Fits program (see *note Fits::). To start with, let's run NoiseChisel without any options, then use Gnuastro's Fits program to inspect the number of extensions in this file. $ astnoisechisel flat-ir/xdf-f160w.fits $ astfits xdf-f160w_detected.fits From the output list, we see that NoiseChisel's output contains 5 extensions. The zero-th (counting from zero, with name ‘NOISECHISEL-CONFIG’) is empty: it has value of ‘0’ in the fourth column (which shows its size in pixels). Like NoiseChisel, in all of Gnuastro's programs, the first (or zero-th) extension of the output only contains meta-data: data about/describing the datasets within (all) the output's extensions. This is recommended by the FITS standard, see *note Fits:: for more. In the case of Gnuastro's programs, this generic zero-th/meta-data extension (for the whole file) contains all the configuration options of the program that created the file. Metadata regarding how the analysis was done (or a dataset was created) is very important for higher-level analysis and reproducibility. Therefore, Let's first take a closer look at the ‘NOISECHISEL-CONFIG’ extension. If you specify a special header in the FITS file, Gnuastro's Fits program will print the header keywords (metadata) of that extension. You can either specify the HDU/extension counter (starting from 0), or name. Therefore, the two commands below are identical for this file. We are usually tempted to use the first (shorter format), but when putting your commands into a script, please use the second format which is more human-friendly and understandable for readers of your code who may not know what is in the 0-th extension (this includes yourself in a few months!): $ astfits xdf-f160w_detected.fits -h0 $ astfits xdf-f160w_detected.fits -hNOISECHISEL-CONFIG The first group of FITS header keywords you see (containing the ‘SIMPLE’ and ‘BITPIX’ keywords; before the first empty line) are standard keywords. They are required by the FITS standard and must be present in any FITS extension. The second group starts with the input file name (value to the ‘INPUT’ keyword). The rest of the keywords you see afterwards have the same name as NoiseChisel's options, and the value used by NoiseChisel in this run is shown after the ‘=’ sign. Finally, the last group (starting with ‘DATE’) contains the date and version information of Gnuastro and its dependencies that were used to generate this file. Besides the option values, these are also critical for future reproducibility of the result (you may update Gnuastro or its dependencies, and they may behave differently afterwards). The "versions and date" group of keywords are present in all Gnuastro's FITS extension outputs, for more see *note Output FITS files::. Note that if a keyword name is larger than 8 characters, it is preceded by a ‘HIERARCH’ keyword and that all keyword names are in capital letters. These are all part of the FITS standard and originate from its history. But in short, both can be ignored! For example, with the commands below, let's see at first what the default values are, and then just check the value of ‘--detgrowquant’ option (using the ‘-P’ option described in *note Option management and configuration files::). $ astnoisechisle -P $ astnoisechisel -P | grep detgrowquant To confirm that NoiseChisel used this value when we ran it above, let's use ‘grep’ to extract the keyword line with ‘detgrowquant’ from the metadata extension. However, as you saw above, keyword names in the header is in all caps. So we need to ask ‘grep’ to ignore case with the ‘-i’ option. $ astfits xdf-f160w_detected.fits -h0 | grep -i detgrowquant In the output of the above command, you see ‘HIERARCH’ at the start of the line. According to the FITS standard, ‘HIERARCH’ is placed at the start of all keywords that have a name that is more than 8 characters long. Both the all-caps and the ‘HIERARCH’ keyword can be annoying when you want to read/check the value. Therefore, the best solution is to use the ‘--keyvalue’ option of Gnuastro's ‘astfits’ program as shown below. With it, you do not have to worry about ‘HIERARCH’ or the case of the name (FITS keyword names are not case-sensitive). $ astfits xdf-f160w_detected.fits -h0 --keyvalue=detgrowquant -q The metadata (that is stored in the output) can later be used to exactly reproduce/understand your result, even if you have lost/forgot the command you used to create the file. This feature is present in all of Gnuastro's programs, not just NoiseChisel. The rest of the HDUs in NoiseChisel have data. So let's open them in a DS9 window and then describe each: $ astscript-fits-view xdf-f160w_detected.fits A "cube" window opens along with DS9's main window. The buttons and horizontal scroll bar in this small new window can be used to navigate between the extensions. In this mode, all DS9's settings (for example, zoom or color-bar) will be identical between the extensions. Try zooming into one part and flipping through the extensions to see how the galaxies were detected along with the Sky and Sky standard deviation values for that region. Just have in mind that NoiseChisel's job is _only_ detection (separating signal from noise). We will do segmentation on this result later to find the individual galaxies/peaks over the detected pixels. The second extension of NoiseChisel's output (numbered 1, named ‘INPUT-NO-SKY’) is the Sky-subtracted input that you provided. The third (‘DETECTIONS’) is NoiseChisel's main output which is a binary image with only two possible values for all pixels: 0 for noise and 1 for signal. Since it only has two values, to avoid taking too much space on your computer, its numeric datatype an unsigned 8-bit integer (or ‘uint8’)(1). The fourth and fifth (‘SKY’ and ‘SKY_STD’) extensions, have the Sky and its standard deviation values for the input on a tile grid and were calculated over the undetected regions (for more on the importance of the Sky value, see *note Sky value::). Each HDU/extension in a FITS file is an independent dataset (image or table) which you can delete from the FITS file, or copy/cut to another file. For example, with the command below, you can copy NoiseChisel's ‘DETECTIONS’ HDU/extension to another file: $ astfits xdf-f160w_detected.fits --copy=DETECTIONS -odetections.fits There are similar options to conveniently cut (‘--cut’, copy, then remove from the input) or delete (‘--remove’) HDUs from a FITS file also. See *note HDU information and manipulation:: for more. ---------- Footnotes ---------- (1) To learn more about numeric data types see *note Numeric data types::.  File: gnuastro.info, Node: NoiseChisel optimization for detection, Next: NoiseChisel optimization for storage, Prev: NoiseChisel and Multi-Extension FITS files, Up: General program usage tutorial 2.1.11 NoiseChisel optimization for detection --------------------------------------------- In *note NoiseChisel and Multi-Extension FITS files::, we ran NoiseChisel and reviewed NoiseChisel's output format. Now that you have a better feeling for multi-extension FITS files, let's optimize NoiseChisel for this particular dataset. One good way to see if you have missed any signal (small galaxies, or the wings of brighter galaxies) is to mask all the detected pixels and inspect the noise pixels. For this, you can use Gnuastro's Arithmetic program (in particular its ‘where’ operator, see *note Arithmetic operators::). The command below will produce ‘mask-det.fits’. In it, all the pixels in the ‘INPUT-NO-SKY’ extension that are flagged 1 in the ‘DETECTIONS’ extension (dominated by signal, not noise) will be set to NaN. Since the various extensions are in the same file, for each dataset we need the file and extension name. To make the command easier to read/write/understand, let's use shell variables: '‘in’' will be used for the Sky-subtracted input image and '‘det’' will be used for the detection map. Recall that a shell variable's value can be retrieved by adding a ‘$’ before its name, also note that the double quotations are necessary when we have white-space characters in a variable value (like this case). $ in="xdf-f160w_detected.fits -hINPUT-NO-SKY" $ det="xdf-f160w_detected.fits -hDETECTIONS" $ astarithmetic $in $det nan where --output=mask-det.fits To invert the result (only keep the detected pixels), you can flip the detection map (from 0 to 1 and vice-versa) by adding a '‘not’' after the second ‘$det’: $ astarithmetic $in $det not nan where --output=mask-sky.fits Look again at the ‘DETECTIONS’ extension, in particular the long worm-like structure around (1) pixel 1650 (X) and 1470 (Y). These types of long wiggly structures show that we have dug too deep into the noise, and are a signature of correlated noise. Correlated noise is created when we warp (for example, rotate) individual exposures (that are each slightly offset compared to each other) into the same pixel grid before adding them into one deeper image. During the warping, nearby pixels are mixed and the effect of this mixing on the noise (which is in every pixel) is called "correlated noise". Correlated noise is a form of convolution and it slightly smooths the image. In terms of the number of exposures (and thus correlated noise), the XDF dataset is by no means an ordinary dataset. Therefore the default parameters need to be slightly customized. It is the result of warping and adding roughly 80 separate exposures which can create strong correlated noise/smoothing. In common surveys the number of exposures is usually 10 or less. See Figure 2 of Akhlaghi 2019 (https://arxiv.org/abs/1909.11230) and the discussion on ‘--detgrowquant’ there for more on how NoiseChisel "grow"s the detected objects and the patterns caused by correlated noise. Let's tweak NoiseChisel's configuration a little to get a better result on this dataset. Do not forget that "_Good statistical analysis is not a purely routine matter, and generally calls for more than one pass through the computer_" (Anscombe 1973, see *note Science and its tools::). A good scientist must have a good understanding of her tools to make a meaningful analysis. So do not hesitate in playing with the default configuration and reviewing the manual when you have a new dataset (from a new instrument) in front of you. Robust data analysis is an art, therefore a good scientist must first be a good artist. Once you have found the good configuration for that particular noise pattern (instrument) you can safely use it for all new data that have a similar noise pattern. NoiseChisel can produce "Check images" to help you visualize and inspect how each step is done. You can see all the check images it can produce with this command. $ astnoisechisel --help | grep check Let's check the overall detection process to get a better feeling of what NoiseChisel is doing with the following command. To learn the details of NoiseChisel in more detail, please see *note NoiseChisel::, Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) and Akhlaghi 2019 (https://arxiv.org/abs/1909.11230). $ astnoisechisel flat-ir/xdf-f160w.fits --checkdetection The check images/tables are also multi-extension FITS files. As you saw from the command above, when check datasets are requested, NoiseChisel will not go to the end. It will abort as soon as all the extensions of the check image are ready. Please list the extensions of the output with ‘astfits’ and then opening it with ‘ds9’ as we done above. If you have read the paper, you will see why there are so many extensions in the check image. $ astfits xdf-f160w_detcheck.fits $ astscript-fits-view xdf-f160w_detcheck.fits In order to understand the parameters and their biases (especially as you are starting to use Gnuastro, or running it a new dataset), it is _strongly_ encouraged to play with the different parameters and use the respective check images to see which step is affected by your changes and how, for example, see *note Detecting large extended targets::. Let's focus on one step: the ‘OPENED_AND_LABELED’ extension shows the initial detection step of NoiseChisel. We see the seeds of that correlated noise structure with many small detections (a relatively early stage in the processing). Such connections at the lowest surface brightness limits usually occur when the dataset is too smoothed, the threshold is too low, or the final "growth" is too much. As you see from the 2nd (‘CONVOLVED’) extension, the first operation that NoiseChisel does on the data is to slightly smooth it. However, the natural correlated noise of this dataset is already one level of artificial smoothing, so further smoothing it with the default kernel may be the culprit. To see the effect, let's use a sharper kernel as a first step to convolve/smooth the input. By default NoiseChisel uses a Gaussian with full-width-half-maximum (FWHM) of 2 pixels. We can use Gnuastro's MakeProfiles to build a kernel with FWHM of 1.5 pixel (truncated at 5 times the FWHM, like the default) using the following command. MakeProfiles is a powerful tool to build any number of mock profiles on one image or independently, to learn more of its features and capabilities, see *note MakeProfiles::. $ astmkprof --kernel=gaussian,1.5,5 --oversample=1 Please open the output ‘kernel.fits’ and have a look (it is very small and sharp). We can now tell NoiseChisel to use this instead of the default kernel with the following command (we will keep the ‘--checkdetection’ to continue checking the detection steps) $ astnoisechisel flat-ir/xdf-f160w.fits --kernel=kernel.fits \ --checkdetection Open the output ‘xdf-f160w_detcheck.fits’ as a multi-extension FITS file and go to the last extension (‘DETECTIONS-FINAL’, it is the same pixels as the final NoiseChisel output without ‘--checkdetections’). Look again at that position mentioned above (1650,1470), you see that the long wiggly structure is gone. This shows we are making progress :-). Looking at the new ‘OPENED_AND_LABELED’ extension, we see that the thin connections between smaller peaks has now significantly decreased. Going two extensions/steps ahead (in the first ‘HOLES-FILLED’), you can see that during the process of finding false pseudo-detections, too many holes have been filled: do you see how the many of the brighter galaxies are connected? At this stage all holes are filled, irrespective of their size. Try looking two extensions ahead (in the first ‘PSEUDOS-FOR-SN’), you can see that there are not too many pseudo-detections because of all those extended filled holes. If you look closely, you can see the number of pseudo-detections in the printed outputs of NoiseChisel (around 6400). This is another side-effect of correlated noise. To address it, we should slightly increase the pseudo-detection threshold (before changing ‘--dthresh’, run with ‘-P’ to see the default value): $ astnoisechisel flat-ir/xdf-f160w.fits --kernel=kernel.fits \ --dthresh=0.1 --checkdetection Before visually inspecting the check image, you can already see the effect of this small change in NoiseChisel's command-line output: notice how the number of pseudo-detections has increased to more than 7100! Open the check image now and have a look, you can see how the pseudo-detections are distributed much more evenly in the blank sky regions of the ‘PSEUDOS-FOR-SN’ extension. *Maximize the number of pseudo-detections:* When using NoiseChisel on datasets with a new noise-pattern (for example, going to a Radio astronomy image, or a shallow ground-based image), play with ‘--dthresh’ until you get a maximal number of pseudo-detections: the total number of pseudo-detections is printed on the command-line when you run NoiseChisel, you do not even need to open a FITS viewer. In this particular case, try ‘--dthresh=0.2’ and you will see that the total printed number decreases to around 6700 (recall that with ‘--dthresh=0.1’, it was roughly 7100). So for this type of very deep HST images, we should set ‘--dthresh=0.1’. As discussed in Section 3.1.5 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664), the signal-to-noise ratio of pseudo-detections are critical to identifying/removing false detections. For an optimal detection they are very important to get right (where you want to detect the faintest and smallest objects in the image successfully). Let's have a look at their signal-to-noise distribution with ‘--checksn’. $ astnoisechisel flat-ir/xdf-f160w.fits --kernel=kernel.fits \ --dthresh=0.1 --checkdetection --checksn The output (‘xdf-f160w_detsn.fits’) contains two extensions for the pseudo-detections containing two-column tables over the undetected (‘SKY_PSEUDODET_SN’) regions and those over detections (‘DET_PSEUDODET_SN’). With the first command below you can see the HDUs of this file, and with the second you can see the information of the table in the first HDU (which is the default when you do not use ‘--hdu’): $ astfits xdf-f160w_detsn.fits $ asttable xdf-f160w_detsn.fits -i You can see the table columns with the first command below and get a feeling of the signal-to-noise value distribution with the second command (the two Table and Statistics programs will be discussed later in the tutorial): $ asttable xdf-f160w_detsn.fits -hSKY_PSEUDODET_SN $ aststatistics xdf-f160w_detsn.fits -hSKY_PSEUDODET_SN -c2 ... [output truncated] ... Histogram: | * | *** | ****** | ********* | ********** | ************* | ***************** | ******************** | ************************** | ******************************** |******************************************************* * ** * |---------------------------------------------------------------------- The correlated noise is again visible in the signal-to-noise distribution of sky pseudo-detections! Do you see how skewed this distribution is? In an image with less correlated noise, this distribution would be much more symmetric. A small change in the quantile will translate into a big change in the S/N value. For example, see the difference between the three 0.99, 0.95 and 0.90 quantiles with this command: $ aststatistics xdf-f160w_detsn.fits -hSKY_PSEUDODET_SN -c2 \ --quantile=0.99 --quantile=0.95 --quantile=0.90 We get a change of almost 2 units (which is very significant). If you run NoiseChisel with ‘-P’, you'll see the default signal-to-noise quantile ‘--snquant’ is 0.99. In effect with this option you specify the purity level you want (contamination by false detections). With the ‘aststatistics’ command above, you see that a small number of extra false detections (impurity) in the final result causes a big change in completeness (you can detect more lower signal-to-noise true detections). So let's loosen-up our desired purity level, remove the check-image options, and then mask the detected pixels like before to see if we have missed anything. $ astnoisechisel flat-ir/xdf-f160w.fits --kernel=kernel.fits \ --dthresh=0.1 --snquant=0.95 $ in="xdf-f160w_detected.fits -hINPUT-NO-SKY" $ det="xdf-f160w_detected.fits -hDETECTIONS" $ astarithmetic $in $det nan where --output=mask-det.fits Overall it seems good, but if you play a little with the color-bar and look closer in the noise, you'll see a few very sharp, but faint, objects that have not been detected. For example, the object around pixel (456, 1662). Despite its high valued pixels, this object was lost because erosion ignores the precise pixel values. Losing small/sharp objects like this only happens for under-sampled datasets like HST (where the pixel size is larger than the point spread function FWHM). So this will not happen on ground-based images. To address this problem of sharp objects, we can use NoiseChisel's ‘--noerodequant’ option. All pixels above this quantile will not be eroded, thus allowing us to preserve small/sharp objects (that cover a small area, but have a lot of signal in it). Check its default value, then run NoiseChisel like below and make the mask again. $ astnoisechisel flat-ir/xdf-f160w.fits --kernel=kernel.fits \ --noerodequant=0.95 --dthresh=0.1 --snquant=0.95 This seems to be fine and the object above is now detected. We will stop editing the configuration of NoiseChisel here, but please feel free to keep looking into the data to see if you can improve it even more. Once you have found the proper configuration for the type of images you will be using you do not need to change them any more. The same configuration can be used for any dataset that has been similarly produced (and has a similar noise pattern). But entering all these options on every call to NoiseChisel is annoying and prone to bugs (mistakenly typing the wrong value for example). To simplify things, we will make a configuration file in a visible ‘config’ directory. Then we will define the hidden ‘.gnuastro’ directory (that all Gnuastro's programs will look into for configuration files) as a symbolic link to the ‘config’ directory. Finally, we will write the finalized values of the options into NoiseChisel's standard configuration file within that directory. We will also put the kernel in a separate directory to keep the top directory clean of any files we later need. $ mkdir kernel config $ ln -s config/ .gnuastro $ mv kernel.fits kernel/noisechisel.fits $ echo "kernel kernel/noisechisel.fits" > config/astnoisechisel.conf $ echo "noerodequant 0.95" >> config/astnoisechisel.conf $ echo "dthresh 0.1" >> config/astnoisechisel.conf $ echo "snquant 0.95" >> config/astnoisechisel.conf We are now ready to finally run NoiseChisel on the three filters and keep the output in a dedicated directory (which we will call ‘nc’ for simplicity). $ rm *.fits $ mkdir nc $ for f in f105w f125w f160w; do \ astnoisechisel flat-ir/xdf-$f.fits --output=nc/xdf-$f.fits; \ done ---------- Footnotes ---------- (1) To find a particular coordiante easily in DS9, you can do this: Click on the "Edit" menu, and select "Region". Then click on any random part of the image to see a circle show up in that location (this is the "region"). Double-click on the region and a "Circle" window will open. If you have celestial coordinates, keep the default "fk5" in the scroll-down menu after the "Center". But if you have pixel/image coordinates, click on the "fk5" and select "Image". Now you can set the "Center" coordinates of the region (‘1650’ and ‘1470’ in this case) by manually typing them in the two boxes in front of "Center". Finally, when everything is ready, click on the "Apply" button and your region will go over your requested coordinates. You can zoom out (to see the whole image) and visually find it.  File: gnuastro.info, Node: NoiseChisel optimization for storage, Next: Segmentation and making a catalog, Prev: NoiseChisel optimization for detection, Up: General program usage tutorial 2.1.12 NoiseChisel optimization for storage ------------------------------------------- As we showed before (in *note NoiseChisel and Multi-Extension FITS files::), NoiseChisel's output is a multi-extension FITS file with several images the same size as the input. As the input datasets get larger this output can become hard to manage and waste a lot of storage space. Fortunately there is a solution to this problem (which is also useful for Segment's outputs). In this small section we will take a short detour to show this feature. Please note that the outputs generated here are not needed for the rest of the tutorial. But first, let's have a look at the contents/HDUs and volume of NoiseChisel's output from *note NoiseChisel optimization for detection:: (fast answer, it is larger than 100 mega-bytes): $ astfits nc/xdf-f160w.fits $ ls -lh nc/xdf-f160w.fits Two options can drastically decrease NoiseChisel's output file size: 1) With the ‘--rawoutput’ option, NoiseChisel will not create a Sky-subtracted output. After all, it is redundant: you can always generate it by subtracting the ‘SKY’ extension from the input image (which you have in your database) using the Arithmetic program. 2) With the ‘--oneelempertile’, you can tell NoiseChisel to store its Sky and Sky standard deviation results with one pixel per tile (instead of many pixels per tile). So let's run NoiseChisel with these options, then have another look at the HDUs and the over-all file size: $ astnoisechisel flat-ir/xdf-f160w.fits --oneelempertile --rawoutput \ --output=nc-for-storage.fits $ astfits nc-for-storage.fits $ ls -lh nc-for-storage.fits See how ‘nc-for-storage.fits’ has four HDUs, while ‘nc/xdf-f160w.fits’ had five HDUs? As explained above, the missing extension is ‘INPUT-NO-SKY’. Also, look at the sizes of the ‘SKY’ and ‘SKY_STD’ HDUs, unlike before, they are not the same size as ‘DETECTIONS’, they only have one pixel for each tile (group of pixels in raw input). Finally, you see that ‘nc-for-storage.fits’ is just under 8 mega bytes (while ‘nc/xdf-f160w.fits’ was 100 mega bytes)! But we are not yet finished! You can even be more efficient in storage, archival or transferring NoiseChisel's output by compressing this file. Try the command below to see how NoiseChisel's output has now shrunk to about 250 kilo-byes while keeping all the necessary information as the original 100 mega-byte output. $ gzip --best nc-for-storage.fits $ ls -lh nc-for-storage.fits.gz We can get this wonderful level of compression because NoiseChisel's output is binary with only two values: 0 and 1. Compression algorithms are highly optimized in such scenarios. You can open ‘nc-for-storage.fits.gz’ directly in SAO DS9 or feed it to any of Gnuastro's programs without having to decompress it. Higher-level programs that take NoiseChisel's output (for example, Segment or MakeCatalog) can also deal with this compressed image where the Sky and its Standard deviation are one pixel-per-tile. You just have to give the "values" image as a separate option, for more, see *note Segment:: and *note MakeCatalog::. Segment (the program we will introduce in the next section for identifying sub-structure), also has similar features to optimize its output for storage. Since this file was only created for a fast detour demonstration, let's keep our top directory clean and move to the next step: rm nc-for-storage.fits.gz  File: gnuastro.info, Node: Segmentation and making a catalog, Next: Measuring the dataset limits, Prev: NoiseChisel optimization for storage, Up: General program usage tutorial 2.1.13 Segmentation and making a catalog ---------------------------------------- The main output of NoiseChisel is the binary detection map (‘DETECTIONS’ extension, see *note NoiseChisel optimization for detection::). It only has two values: 1 or 0. This is useful when studying the noise or background properties, but hardly of any use when you actually want to study the targets/galaxies in the image, especially in such a deep field where almost everything is connected. To find the galaxies over the detections, we will use Gnuastro's *note Segment:: program: $ mkdir seg $ astsegment nc/xdf-f160w.fits -oseg/xdf-f160w.fits $ astsegment nc/xdf-f125w.fits -oseg/xdf-f125w.fits $ astsegment nc/xdf-f105w.fits -oseg/xdf-f105w.fits Segment's operation is very much like NoiseChisel (in fact, prior to version 0.6, it was part of NoiseChisel). For example, the output is a multi-extension FITS file (previously discussed in *note NoiseChisel and Multi-Extension FITS files::), it has check images and uses the undetected regions as a reference (previously discussed in *note NoiseChisel optimization for detection::). Please have a look at Segment's multi-extension output to get a good feeling of what it has done. Do not forget to flip through the extensions in the "Cube" window. $ astscript-fits-view seg/xdf-f160w.fits Like NoiseChisel, the first extension is the input. The ‘CLUMPS’ extension shows the true "clumps" with values that are $\ge1$, and the diffuse regions labeled as $-1$. Please flip between the first extension and the clumps extension and zoom-in on some of the clumps to get a feeling of what they are. In the ‘OBJECTS’ extension, we see that the large detections of NoiseChisel (that may have contained many galaxies) are now broken up into separate labels. Play with the color-bar and hover your mouse of the various detections to see their different labels. The clumps are not affected by the hard-to-deblend and low signal-to-noise diffuse regions, they are more robust for calculating the colors (compared to objects). From this step onward, we will continue with clumps. Having localized the regions of interest in the dataset, we are ready to do measurements on them with *note MakeCatalog::. MakeCatalog is specialized and optimized for doing measurements over labeled regions of an image. In other words, through MakeCatalog, you can "reduce" an image to a table (catalog of certain properties of objects in the image). Each requested measurement (over each label) will be given a column in the output table. To see the full set of available measurements run it with ‘--help’ like below (and scroll up), note that measurements are classified by context. $ astmkcatalog --help So let's select the properties we want to measure in this tutorial. First of all, we need to know which measurement belongs to which object or clump, so we will start with the ‘--ids’ (read as: IDs(1)). We also want to measure (in this order) the Right Ascension (with ‘--ra’), Declination (‘--dec’), magnitude (‘--magnitude’), and signal-to-noise ratio (‘--sn’) of the objects and clumps. Furthermore, as mentioned above, we also want measurements on clumps, so we also need to call ‘--clumpscat’. The following command will make these measurements on Segment's F160W output and write them in a catalog for each object and clump in a FITS table. For more on the zero point, see *note Brightness flux magnitude::. $ mkdir cat $ astmkcatalog seg/xdf-f160w.fits --ids --ra --dec --magnitude --sn \ --zeropoint=25.94 --clumpscat --output=cat/xdf-f160w.fits From the printed statements on the command-line, you see that MakeCatalog read all the extensions in Segment's output for the various measurements it needed. Let's look at the output of the command above: $ astfits cat/xdf-f160w.fits You will see that the output of the MakeCatalog has two extensions. The first extension shows the measurements over the ‘OBJECTS’, and the second extension shows the measurements over the clumps ‘CLUMPS’. To calculate colors, we also need magnitude measurements on the other filters. So let's repeat the command above on them, just changing the file names and zero point (which we got from the XDF survey web page): $ astmkcatalog seg/xdf-f125w.fits --ids --ra --dec --magnitude --sn \ --zeropoint=26.23 --clumpscat --output=cat/xdf-f125w.fits $ astmkcatalog seg/xdf-f105w.fits --ids --ra --dec --magnitude --sn \ --zeropoint=26.27 --clumpscat --output=cat/xdf-f105w.fits However, the galaxy properties might differ between the filters (which is the whole purpose behind observing in different filters!). Also, the noise properties and depth of the datasets differ. You can see the effect of these factors in the resulting clump catalogs, with Gnuastro's Table program. We will go deep into working with tables in the next section, but in summary: the ‘-i’ option will print information about the columns and number of rows. To see the column values, just remove the ‘-i’ option. In the output of each command below, look at the ‘Number of rows:’, and note that they are different. $ asttable cat/xdf-f105w.fits -hCLUMPS -i $ asttable cat/xdf-f125w.fits -hCLUMPS -i $ asttable cat/xdf-f160w.fits -hCLUMPS -i Matching the catalogs is possible (for example, with *note Match::). However, the measurements of each column are also done on different pixels: the clump labels can/will differ from one filter to another for one object. Please open them and focus on one object to see for yourself. This can bias the result, if you match catalogs. An accurate color calculation can only be done when magnitudes are measured from the same pixels on all images and this can be done easily with MakeCatalog. In fact this is one of the reasons that NoiseChisel or Segment do not generate a catalog like most other detection/segmentation software. This gives you the freedom of selecting the pixels for measurement in any way you like (from other filters, other software, manually, etc.). Fortunately in these images, the Point spread function (PSF) is very similar, allowing us to use a single labeled image output for all filters(2). The F160W image is deeper, thus providing better detection/segmentation, and redder, thus observing smaller/older stars and representing more of the mass in the galaxies. We will thus use the F160W filter as a reference and use its segment labels to identify which pixels to use for which objects/clumps. But we will do the measurements on the sky-subtracted F105W and F125W images (using MakeCatalog's ‘--valuesfile’ option) as shown below: Notice that the only difference between these calls and the call to generate the raw F160W catalog (excluding the zero point and the output name) is the ‘--valuesfile’. $ astmkcatalog seg/xdf-f160w.fits --ids --ra --dec --magnitude --sn \ --valuesfile=nc/xdf-f125w.fits --zeropoint=26.23 \ --clumpscat --output=cat/xdf-f125w-on-f160w-lab.fits $ astmkcatalog seg/xdf-f160w.fits --ids --ra --dec --magnitude --sn \ --valuesfile=nc/xdf-f105w.fits --zeropoint=26.27 \ --clumpscat --output=cat/xdf-f105w-on-f160w-lab.fits After running the commands above, look into what MakeCatalog printed on the command-line. You can see that (as requested) the object and clump pixel labels in both were taken from the respective extensions in ‘seg/xdf-f160w.fits’. However, the pixel values and pixel Sky standard deviation were respectively taken from ‘nc/xdf-f105w.fits’ and ‘nc/xdf-f125w.fits’. Since we used the same labeled image on all filters, the number of rows in both catalogs are now identical. Let's have a look: $ asttable cat/xdf-f105w-on-f160w-lab.fits -hCLUMPS -i $ asttable cat/xdf-f125w-on-f160w-lab.fits -hCLUMPS -i $ asttable cat/xdf-f160w.fits -hCLUMPS -i Finally, MakeCatalog also does basic calculations on the full dataset (independent of each labeled region but related to whole data), for example, pixel area or per-pixel surface brightness limit. They are stored as keywords in the FITS headers (or lines starting with ‘#’ in plain text). This (and other ways to measure the limits of your dataset) are discussed in the next section: *note Measuring the dataset limits::. ---------- Footnotes ---------- (1) This option is plural because we need two ID columns for identifying "clumps" in the clumps catalog/table: the first column will be the ID of the host "object", and the second one will be the ID of the clump within that object. In the "objects" catalog/table, only a single column will be returned for this option. (2) When the PSFs between two images differ largely, you would have to PSF-match the images before using the same pixels for measurements.  File: gnuastro.info, Node: Measuring the dataset limits, Next: Working with catalogs estimating colors, Prev: Segmentation and making a catalog, Up: General program usage tutorial 2.1.14 Measuring the dataset limits ----------------------------------- In *note Segmentation and making a catalog::, we created a catalog of the different objects with the image. Before measuring colors, or doing any other kind of analysis on the catalogs (and detected objects), it is very important to understand the limitations of the dataset. Without understanding the limitations of your dataset, you cannot make any physical interpretation of your results. The theory behind the calculations discussed here is thoroughly introduced in *note Quantifying measurement limits::. For example, with the command below, let's sort all the detected clumps in the image by magnitude (with ‘--sort=magnitude’) and and print the magnitude and signal-to-noise ratio (S/N; with ‘-cmagnitude,sn’): $ asttable cat/xdf-f160w.fits -hclumps -cmagnitude,sn \ --sort=magnitude --noblank=magnitude As you see, we have clumps with a total magnitude of almost 32! This is _extremely faint_! Are these things trustable? Let's have a look at all of those with a magnitude between 31 and 32 with the command below. We are first using Table to only keep the relevant columns rows, and using Gnuastro's DS9 region file creation script (‘astscript-ds9-region’) to generate DS9 region files, and open DS9: $ asttable cat/xdf-f160w.fits -hclumps -cra,dec \ --range=magnitude,31:32 \ | astscript-ds9-region -c1,2 --radius=0.5 \ --command="ds9 -mecube seg/xdf-f160w.fits -zscale" Zoom-out a little and you will see some green circles (DS9 region files) in some regions of the image. There actually does seem to be a true peak under the selected regions, but as you see, they are very small, diffuse and noisy. How reliable are the measured magnitudes? Using the S/N column from the first command above, you can see that such objects only have a signal to noise of about 2.6 (which is indeed too low for most analysis purposes) $ asttable cat/xdf-f160w.fits -hclumps -csn \ --range=magnitude,31:32 | aststatistics This brings us to the first method of quantifying your dataset's _magnitude limit_, which is also sometimes called _detection limit_ (see *note Magnitude limit of image::). To estimate the $5\sigma$ detection limit of your dataset, you simply report the median magnitude of the objects that have a signal to noise of (approximately) five. This is very easy to calculate with the command below: $ asttable cat/xdf-f160w.fits -hclumps --range=sn,4.8:5.2 -cmagnitude \ | aststatistics --median 29.9949 Let's have a look at these objects, to get a feeling of what these clump looks like: $ asttable cat/xdf-f160w.fits -hclumps --range=sn,4.8:5.2 \ -cra,dec,magnitude \ | astscript-ds9-region -c1,2 --namecol=3 \ --width=2 --radius=0.5 \ --command="ds9 -mecube seg/xdf-f160w.fits -zscale" The number you see on top of each region is the clump's magnitude. Please go over the objects and have a close look at them! It is very important to have a feeling of what your dataset looks like, and how to interpret the numbers to associate an image with them. Generally, they look very small with different levels of diffuse-ness! Those that are sharper make more visual sense (to be $5\sigma$ detections), but the more diffuse ones extend over a larger area. Furthermore, the noise is measured on individual pixel measurements. However, during the reduction many exposures are co-added and stacked, mixing the pixels like a small convolution (creating "correlated noise"). Therefore you clearly see two main issues with the detection limit as defined above: it depends on the morphology, and it does not take into account the correlated noise. A more realistic way to estimate the significance of the detection is to take its footprint, randomly place it in thousands of undetected regions of the image and use that distribution as a reference. This is technically known as upper-limit measurements. For a full discussion, see *note Upper limit magnitude of each detection::). Since it is for each separate object, the upper-limit measurements should be requested as extra columns in MakeCatalog's output. For example, with the command below, let's generate a new catalog of the F160W filter, but with two extra columns compared to the one in ‘cat/’: the upper-limit magnitude and the upper-limit multiple of sigma. $ astmkcatalog seg/xdf-f160w.fits --ids --ra --dec --magnitude --sn \ --zeropoint=25.94 --clumpscat --upnsigma=3 \ --upperlimit-mag --upperlimit-sigma \ --output=xdf-f160w.fits Let's compare the upper-limit magnitude with the measured magnitude of each clump: $ asttable xdf-f160w.fits -hclumps -cmagnitude,upperlimit_mag As you see, in almost all of the cases, the measured magnitude is sufficiently higher than the upper-limit magnitude. Let's subtract the latter from the former to better see this difference in a third column: $ asttable xdf-f160w.fits -hclumps -cmagnitude,upperlimit_mag \ -c'arith upperlimit_mag magnitude -' The ones with a positive third column (difference) show that the clump has sufficiently higher brightness than the noisy background to be usable. Let's use Table's *note Column arithmetic:: to find only those that have a negative difference: $ asttable xdf-f160w.fits -hclumps -cra,dec --noblankend=3 \ -c'arith upperlimit_mag magnitude - set-d d d 0 gt nan where' From more than 3500 clumps, this command only gave $\sim150$ rows (this number may slightly change on different runs due to the random nature of the upper-limit sampling(1))! Let's have a look at them: $ asttable xdf-f160w.fits -hclumps -cra,dec --noblankend=3 \ -c'arith upperlimit_mag magnitude - set-d d d 0 gt nan where' \ | astscript-ds9-region -c1,2 --namecol=3 --width=2 \ --radius=0.5 \ --command="ds9 -mecube seg/xdf-f160w.fits -zscale" You see that they are all extremely faint and diffuse/small peaks. Therefore, if an object's magnitude is fainter than its upper-limit magnitude, you should not use the magnitude: it is not accurate! You should use the upper-limit magnitude instead (with an arrow in your plots to mark which ones are upper-limits). But the main point (in relation to the magnitude limit) with the upper-limit, is the ‘UPPERLIMIT_SIGMA’ column. you can think of this as a _realistic_ S/N for extremely faint/diffuse/small objects). The raw S/N column is simply calculated on a pixel-by-pixel basis, however, the upper-limit sigma is produced by actually taking the label's footprint, and randomly placing it thousands of time over un-detected parts of the image and measuring the brightness of the sky. The clump's brightness is then divided by the standard deviation of the resulting distribution to give you exactly how significant it is (accounting for inter-pixel issues like correlated noise, which are strong in this dataset). You can actually compare the two values with the command below: $ asttable xdf-f160w.fits -hclumps -csn,upperlimit_sigma As you see, the second column (upper-limit sigma) is almost always less than the S/N. This clearly shows the effect of correlated noise! If you now use this column as the reference for deriving the magnitude limit, you will see that it will shift by almost 0.5 magnitudes brighter and is now more reasonable: $ asttable xdf-f160w.fits -hclumps --range=upperlimit_sigma,4.8:5.2 \ -cmagnitude | aststatistics --median 29.6257 We see that the $5\sigma$ detection limit is $\sim29.6$! This is extremely deep! For example, in the Legacy Survey(2), the $5\sigma$ detection limit for _point sources_ is approximately 24.5 (5 magnitudes, or 100 times, shallower than this image). As mentioned above, an important caveat in this simple calculation is that we should only be looking at point-like objects, not simply everything. This is because the shape or radial slope of the profile has an important effect on this measurement: at the same total magnitude, a sharper object will have a higher S/N. To be more precise, we should first perform star-galaxy separation, then do this only for the objects that are classified as stars. A crude, first-order, method is to use the ‘--axis-ratio’ option so MakeCatalog also measures the axis ratio, then call Table with ‘--range=upperlimit_sigma,,4.8:5.2’ and ‘--range=axis_ratio,0.95:1’ (in one command). Please do this for yourself as an exercise to see the difference with the result above. Before continuing, let's remove this temporarily produced catalog: $ rm xdf-f160w.fits Another measure of the dataset's limit is the completeness limit (*note Completeness limit of each detection::). This is necessary when you are looking at populations of objects over the image. You want to know until what magnitude you can be sure that you have detected an object (if it was present). As described in *note Completeness limit of each detection::, the best way to do this is with mock images. But a crude, first order result can be obtained from the actual image: by simply plotting the histogram of the magnitudes: $ aststatistics cat/xdf-f160w.fits -hclumps -cmagnitude ... Histogram: | * | ** **** | *********** | ************* | **************** | ******************* | ********************** | ************************** | ********************************* | ********************************************* |* * ** ** ********************************************************** |---------------------------------------------------------------------- This plot (the histogram of magnitudes; where fainter magnitudes are towards the right) is technically called the dataset's _number count_ plot. You see that the number of objects increases with magnitude as the magnitudes get fainter (to the right). However, beyond a certain magnitude, you see it becomes flat, and soon afterwards, the numbers suddenly drop. Once you have your catalog, you can easily find this point with the two commands below. First we generate a histogram with fewer bins (to have more numbers in each bin). We then use AWK to find the magnitude bin where the number of points decrease compared to the previous bin. But we only do this for bins that have more than 50 items (to avoid scatter in the bright end). Finally, in Statistics, we have manually set the magnitude range and number of bins so each bin is roughly 0.5 magnitudes thick (with ‘--greaterequal=20’, ‘--lessthan=32’ and ‘--numbins=24’) $ aststatistics cat/xdf-f160w.fits -hclumps -cmagnitude --histogram \ --greaterequal=20 --lessthan=32 --numbins=24 \ --output=f160w-hist.txt $ asttable f160w-hist.txt \ | awk '$2>50 && $2<prev{print prevbin; exit} \ {prev=$2; prevbin=$1}' 28.932122667631 Therefore, to first order (and very crudely!) we can say that if an object is in our field of view and has a magnitude of $\sim29$ or brighter, we can be highly confident that we have detected it. But before continuing, let's clean up behind ourselves: $ rm f160w-hist.txt Another important limiting parameter in a processed dataset is the surface brightness limit (*note Surface brightness limit of image::). The surface brightness limit of a dataset is an important measure for extended structures (for example, when you want to look at the outskirts of galaxies). In the next tutorial, we have thoroughly described the derivation of the surface brightness limit of a dataset. So we will just show the final result here, and encourage you to follow up with that tutorial after finishing this tutorial (see *note Image surface brightness limit::) By default, MakeCatalog will estimate the surface brightness limit of a given dataset, and put it in the keywords of the output (all keywords starting with ‘SBL’, which is short for surface brightness limit): $ astfits cat/xdf-f160w.fits -h1 | grep SBL As you see, the only one with a unit of ‘mag/arcsec^2’ is ‘SBLMAG’. It contains the surface brightness limit of the input dataset over ‘SBLAREA’ arcsec$^2$ with ‘SBLNSIG’ multiples of $\sigma$. In the current version of Gnuastro, ‘SBLAREA=100’ and ‘SBLNSIG=3’, so the surface brightness limit of this image is 32.66 mag/arcsec$^2$ ($3\sigma$, over 100 arcsec$^2$). Therefore, if this default area and multiple of sigma are fine for you(3) (these are the most commonly used values), you can simply read the image surface brightness limit from the catalogs produced by MakeCatalog with this command: $ astfits cat/*.fits -h1 --keyvalue=SBLMAG ---------- Footnotes ---------- (1) You can fix the random number generator seed, so you always get the same sampling, see *note Generating random numbers::. (2) <https://www.legacysurvey.org/dr9/description> (3) You can change these values with the ‘--sfmagarea’ and ‘--sfmagnsigma’  File: gnuastro.info, Node: Working with catalogs estimating colors, Next: Column statistics color-magnitude diagram, Prev: Measuring the dataset limits, Up: General program usage tutorial 2.1.15 Working with catalogs (estimating colors) ------------------------------------------------ In the previous step we generated catalogs of objects and clumps over our dataset (see *note Segmentation and making a catalog::). The catalogs are available in the two extensions of the single FITS file(1). Let's see the extensions and their basic properties with the Fits program: $ astfits cat/xdf-f160w.fits # Extension information Let's inspect the table in each extension with Gnuastro's Table program (see *note Table::). We should have used ‘-hOBJECTS’ and ‘-hCLUMPS’ instead of ‘-h1’ and ‘-h2’ respectively. The numbers are just used here to convey that both names or numbers are possible, in the next commands, we will just use names. $ asttable cat/xdf-f160w.fits -h1 --info # Objects catalog info. $ asttable cat/xdf-f160w.fits -h1 # Objects catalog columns. $ asttable cat/xdf-f160w.fits -h2 -i # Clumps catalog info. $ asttable cat/xdf-f160w.fits -h2 # Clumps catalog columns. As you see above, when given a specific table (file name and extension), Table will print the full contents of all the columns. To see the basic metadata about each column (for example, name, units and comments), simply append a ‘--info’ (or ‘-i’) to the command. To print the contents of special column(s), just give the column number(s) (counting from ‘1’) or the column name(s) (if they have one) to the ‘--column’ (or ‘-c’) option. For example, if you just want the magnitude and signal-to-noise ratio of the clumps (in the clumps catalog), you can get it with any of the following commands $ asttable cat/xdf-f160w.fits -hCLUMPS --column=5,6 $ asttable cat/xdf-f160w.fits -hCLUMPS -c5,SN $ asttable cat/xdf-f160w.fits -hCLUMPS -c5 -c6 $ asttable cat/xdf-f160w.fits -hCLUMPS -cMAGNITUDE -cSN Similar to HDUs, when the columns have names, always use the name: it is so common to mis-write numbers or forget the order later! Using column names instead of numbers has many advantages: 1. You do not have to worry about the order of columns in the table. 2. It acts as a documentation in the script. 3. Column meta-data (including a name) are not just limited to FITS tables and can also be used in plain text tables, see *note Gnuastro text table format::. Table also has tools to limit the displayed rows. For example, with the first command below only rows with a magnitude in the range of 29 to 30 will be shown. With the second command, you can further limit the displayed rows to rows with an S/N larger than 10 (a range between 10 to infinity). You can further sort the output rows, only show the top (or bottom) N rows, etc., see *note Table:: for more. $ asttable cat/xdf-f160w.fits -hCLUMPS --range=MAGNITUDE,28:29 $ asttable cat/xdf-f160w.fits -hCLUMPS \ --range=MAGNITUDE,28:29 --range=SN,10:inf Now that you are comfortable in viewing table columns and rows, let's look into merging columns of multiple tables into one table (which is necessary for measuring the color of the clumps). Since ‘cat/xdf-f160w.fits’ and ‘cat/xdf-f105w-on-f160w-lab.fits’ have exactly the same number of rows and the rows correspond to the same clump, let's merge them to have one table with magnitudes in both filters. We can merge columns with the ‘--catcolumnfile’ option like below. You give this option a file name (which is assumed to be a table that has the same number of rows as the main input), and all the table's columns will be concatenated/appended to the main table. Now, try it out with the commands below. We will first look at the metadata of the first table (only the ‘CLUMPS’ extension). With the second command, we will concatenate the two tables and write them in, ‘two-in-one.fits’ and finally, we will check the new catalog's metadata. $ asttable cat/xdf-f160w.fits -i -hCLUMPS $ asttable cat/xdf-f160w.fits -hCLUMPS --output=two-in-one.fits \ --catcolumnfile=cat/xdf-f125w-on-f160w-lab.fits \ --catcolumnhdu=CLUMPS $ asttable two-in-one.fits -i By comparing the two metadata, we see that both tables have the same number of rows. But what might have attracted your attention more, is that ‘two-in-one.fits’ has double the number of columns (as expected, after all, you merged both tables into one file, and did not ask for any specific column). In fact you can concatenate any number of other tables in one command, for example: $ asttable cat/xdf-f160w.fits -hCLUMPS --output=three-in-one.fits \ --catcolumnfile=cat/xdf-f125w-on-f160w-lab.fits \ --catcolumnfile=cat/xdf-f105w-on-f160w-lab.fits \ --catcolumnhdu=CLUMPS --catcolumnhdu=CLUMPS $ asttable three-in-one.fits -i As you see, to avoid confusion in column names, Table has intentionally appended a ‘-1’ to the column names of the first concatenated table if the column names are already present in the original table. For example, we have the original ‘RA’ column, and another one called ‘RA-1’). Similarly a ‘-2’ has been added for the columns of the second concatenated table. However, this example clearly shows a problem with this full concatenation: some columns are identical (for example, ‘HOST_OBJ_ID’ and ‘HOST_OBJ_ID-1’), or not needed (for example, ‘RA-1’ and ‘DEC-1’ which are not necessary here). In such cases, you can use ‘--catcolumns’ to only concatenate certain columns, not the whole table. For example, this command: $ asttable cat/xdf-f160w.fits -hCLUMPS --output=two-in-one-2.fits \ --catcolumnfile=cat/xdf-f125w-on-f160w-lab.fits \ --catcolumnhdu=CLUMPS --catcolumns=MAGNITUDE $ asttable two-in-one-2.fits -i You see that we have now only appended the ‘MAGNITUDE’ column of ‘cat/xdf-f125w-on-f160w-lab.fits’. This is what we needed to be able to later subtract the magnitudes. Let's go ahead and add the F105W magnitudes also with the command below. Note how we need to call ‘--catcolumnhdu’ once for every table that should be appended, but we only call ‘--catcolumn’ once (assuming all the tables that should be appended have this column). $ asttable cat/xdf-f160w.fits -hCLUMPS --output=three-in-one-2.fits \ --catcolumnfile=cat/xdf-f125w-on-f160w-lab.fits \ --catcolumnfile=cat/xdf-f105w-on-f160w-lab.fits \ --catcolumnhdu=CLUMPS --catcolumnhdu=CLUMPS \ --catcolumns=MAGNITUDE $ asttable three-in-one-2.fits -i But we are not finished yet! There is a very big problem: it is not immediately clear which one of ‘MAGNITUDE’, ‘MAGNITUDE-1’ or ‘MAGNITUDE-2’ columns belong to which filter! Right now, you know this because you just ran this command. But in one hour, you'll start doubting yourself and will be forced to go through your command history, trying to figure out if you added F105W first, or F125W. You should never torture your future-self (or your colleagues) like this! So, let's rename these confusing columns in the matched catalog. Fortunately, with the ‘--colmetadata’ option, you can correct the column metadata of the final table (just before it is written). It takes four values: 1) the original column name or number, 2) the new column name, 3) the column unit and 4) the column comments. Since the comments are usually human-friendly sentences and contain space characters, you should put them in double quotations like below. For example, by adding three calls of this option to the previous command, we write the filter name in the magnitude column name and description. $ asttable cat/xdf-f160w.fits -hCLUMPS --output=three-in-one-3.fits \ --catcolumnfile=cat/xdf-f125w-on-f160w-lab.fits \ --catcolumnfile=cat/xdf-f105w-on-f160w-lab.fits \ --catcolumnhdu=CLUMPS --catcolumnhdu=CLUMPS \ --catcolumns=MAGNITUDE \ --colmetadata=MAGNITUDE,MAG-F160W,log,"Magnitude in F160W." \ --colmetadata=MAGNITUDE-1,MAG-F125W,log,"Magnitude in F125W." \ --colmetadata=MAGNITUDE-2,MAG-F105W,log,"Magnitude in F105W." $ asttable three-in-one-3.fits -i We now have all three magnitudes in one table and can start doing arithmetic on them (to estimate colors, which are just a subtraction of magnitudes). To use column arithmetic, simply call the column selection option (‘--column’ or ‘-c’), put the value in single quotations and start the value with ‘arith’ (followed by a space) like the example below. Column arithmetic uses the same "reverse polish notation" as the Arithmetic program (see *note Reverse polish notation::), with almost all the same operators (see *note Arithmetic operators::), and some column-specific operators (that are not available for images). In column-arithmetic, you can identify columns by number (prefixed with a ‘$’) or name, for more see *note Column arithmetic::. So let's estimate one color from ‘three-in-one-3.fits’ using column arithmetic. All the commands below will produce the same output, try them each and focus on the differences. Note that column arithmetic can be mixed with other ways to choose output columns (the ‘-c’ option). $ asttable three-in-one-3.fits -ocolor-cat.fits \ -c1,2,3,4,'arith $5 $7 -' $ asttable three-in-one-3.fits -ocolor-cat.fits \ -c1,2,RA,DEC,'arith MAG-F125W MAG-F160W -' $ asttable three-in-one-3.fits -ocolor-cat.fits -c1,2 \ -cRA,DEC --column='arith MAG-F105W MAG-F160W -' This example again highlights the important point on using column names: if you do not know the commands before, you have no way of making sense of the first command: what is in column 5 and 7? why not subtract columns 3 and 4 from each other? Do you see how cryptic the first one is? Then look at the last one: even if you have no idea how this table was created, you immediately understand the desired operation. *When you have column names, please use them.* If your table does not have column names, give them names with the ‘--colmetadata’ (described above) as you are creating them. But how about the metadata for the column you just created with column arithmetic? Have a look at the column metadata of the table produced above: $ asttable color-cat.fits -i The name of the column produced by arithmetic column is ‘ARITH_1’! This is natural: Arithmetic has no idea what the modified column is! You could have multiplied two columns, or done much more complex transformations with many columns. _Metadata cannot be set automatically, your (the human) input is necessary._ To add metadata, you can use ‘--colmetadata’ like before: $ asttable three-in-one-3.fits -ocolor-cat.fits -c1,2,RA,DEC \ --column='arith MAG-F105W MAG-F160W -' \ --colmetadata=ARITH_1,F105W-F160W,log,"Magnitude difference" $ asttable color-cat.fits -i Sometimes, because of a particular way of storing data, you might need to take all input columns. If there are many columns (for example hundreds!), listing them (like above) will become annoying, buggy and time-consuming. In such cases, you can give ‘-c_all’. Upon execution, ‘_all’ will be replaced with a comma-separated list of all the input columns. This allows you to add new columns easily, without having to worry about the number of input columns that you want anyway. A lower-level but more customizable method is to use the ‘seq’ (sequence) command with the ‘-s’ (separator) option set to ‘','’). For example, if you have 216 columns and only want to return columns 1 and 2 as well as all the columns between 12 to 58 (inclusive), you can use the command below: $ asttable table.fits -c1,2,$(seq -s',' 12 58) We are now ready to make our final table. We want it to have the magnitudes in all three filters, as well as the three possible colors. Recall that by convention in astronomy colors are defined by subtracting the bluer magnitude from the redder magnitude. In this way a larger color value corresponds to a redder object. So from the three magnitudes, we can produce three colors (as shown below). Also, because this is the final table we are creating here and want to use it later, we will store it in ‘cat/’ and we will also give it a clear name and use the ‘--range’ option to only print columns with a signal-to-noise ratio (‘SN’ column, from the F160W filter) above 5. $ asttable three-in-one-3.fits --range=SN,5,inf -c1,2,RA,DEC,SN \ -cMAG-F160W,MAG-F125W,MAG-F105W \ -c'arith MAG-F125W MAG-F160W -' \ -c'arith MAG-F105W MAG-F125W -' \ -c'arith MAG-F105W MAG-F160W -' \ --colmetadata=SN,SN-F160W,ratio,"F160W signal to noise ratio" \ --colmetadata=ARITH_1,F125W-F160W,log,"Color F125W-F160W." \ --colmetadata=ARITH_2,F105W-F125W,log,"Color F105W-F125W." \ --colmetadata=ARITH_3,F105W-F160W,log,"Color F105W-F160W." \ --output=cat/mags-with-color.fits $ asttable cat/mags-with-color.fits -i The table now has all the columns we need and it has the proper metadata to let us safely use it later (without frustrating over column orders!) or passing it to colleagues. Let's finish this section of the tutorial with a useful tip on modifying column metadata. Above, updating/changing column metadata was done with the ‘--colmetadata’ in the same command that produced the newly created Table file. But in many situations, the table is already made and you just want to update the metadata of one column. In such cases using ‘--colmetadata’ is over-kill (wasting CPU/RAM energy or time if the table is large) because it will load the full table data and metadata into memory, just change the metadata and write it back into a file. In scenarios when the table's data does not need to be changed and you just want to set or update the metadata, it is much more efficient to use basic FITS keyword editing. For example, in the FITS standard, column names are stored in the ‘TTYPE’ header keywords, so let's have a look: $ asttable two-in-one.fits -i $ astfits two-in-one.fits -h1 | grep TTYPE Changing/updating the column names is as easy as updating the values to these keywords. You do not need to touch the actual data! With the command below, we will just update the ‘MAGNITUDE’ and ‘MAGNITUDE-1’ columns (which are respectively stored in the ‘TTYPE5’ and ‘TTYPE11’ keywords) by modifying the keyword values and checking the effect by listing the column metadata again: $ astfits two-in-one.fits -h1 \ --update=TTYPE5,MAG-F160W \ --update=TTYPE11,MAG-F125W $ asttable two-in-one.fits -i You can see that the column names have indeed been changed without touching any of the data. You can do the same for the column units or comments by modifying the keywords starting with ‘TUNIT’ or ‘TCOMM’. Generally, Gnuastro's table is a very useful program in data analysis and what you have seen so far is just the tip of the iceberg. But to avoid making the tutorial even longer, we will stop reviewing the features here, for more, please see *note Table::. Before continuing, let's just delete all the temporary FITS tables we placed in the top project directory: rm *.fits ---------- Footnotes ---------- (1) MakeCatalog can also output plain text tables. However, in the plain text format you can only have one table per file. Therefore, if you also request measurements on clumps, two plain text tables will be created (suffixed with ‘_o.txt’ and ‘_c.txt’).  File: gnuastro.info, Node: Column statistics color-magnitude diagram, Next: Aperture photometry, Prev: Working with catalogs estimating colors, Up: General program usage tutorial 2.1.16 Column statistics (color-magnitude diagram) -------------------------------------------------- In *note Working with catalogs estimating colors:: we created a single catalog containing the magnitudes of our desired clumps in all three filters, and their colors. To start with, let's inspect the distribution of three colors with the Statistics program. $ aststatistics cat/mags-with-color.fits -cF105W-F125W $ aststatistics cat/mags-with-color.fits -cF105W-F160W $ aststatistics cat/mags-with-color.fits -cF125W-F160W This tiny and cute ASCII histogram (and the general information printed above it) gives you a crude (but very useful and fast) feeling on the distribution. You can later use Gnuastro's Statistics program with the ‘--histogram’ option to build a much more fine-grained histogram as a table to feed into your favorite plotting program for a much more accurate/appealing plot (for example, with PGFPlots in LaTeX). If you just want a specific measure, for example, the mean, median and standard deviation, you can ask for them specifically, like below: $ aststatistics cat/mags-with-color.fits -cF105W-F160W \ --mean --median --std The basic statistics we measured above were just on one column. In many scenarios this is fine, but things get much more exciting if you look at the correlation of two columns with each other. For example, let's create the color-magnitude diagram for our measured targets. In many papers, the color-magnitude diagram is usually plotted as a scatter plot. However, scatter plots have a major limitation when there are a lot of points and they cluster together in one region of the plot: the possible correlation in that dense region is lost (because the points fall over each other). In such cases, it is much better to use a 2D histogram. In a 2D histogram, the full range in both columns is divided into discrete 2D bins (or pixels!) and we count how many objects fall in that 2D bin. Since a 2D histogram is a pixelated space, we can simply save it as a FITS image and view it in a FITS viewer. Let's do this in the command below. As is common with color-magnitude plots, we will put the redder magnitude on the horizontal axis and the color on the vertical axis. We will set both dimensions to have 100 bins (with ‘--numbins’ for the horizontal and ‘--numbins2’ for the vertical). Also, to avoid strong outliers in any of the dimensions, we will manually set the range of each dimension with the ‘--greaterequal’, ‘--greaterequal2’, ‘--lessthan’ and ‘--lessthan2’ options. $ aststatistics cat/mags-with-color.fits -cMAG-F160W,F105W-F160W \ --histogram2d=image --manualbinrange \ --numbins=100 --greaterequal=22 --lessthan=30 \ --numbins2=100 --greaterequal2=-1 --lessthan2=3 \ --manualbinrange --output=cmd.fits You can now open this FITS file as a normal FITS image, for example, with the command below. Try hovering/zooming over the pixels: not only will you see the number of objects in catalog that fall in each bin/pixel, but you also see the ‘F160W’ magnitude and color of that pixel also (in the same place you usually see RA and Dec when hovering over an astronomical image). $ astscript-fits-view cmd.fits --ds9scale=minmax Having a 2D histogram as a FITS image with WCS has many great advantages. For example, just like FITS images of the night sky, you can "match" many 2D histograms that were created independently. You can add two histograms with each other, or you can use advanced features of FITS viewers to find structure in the correlation of your columns. With the first command below, you can activate the grid feature of DS9 to actually see the coordinate grid, as well as values on each line. With the second command, DS9 will even read the labels of the axes and use them to generate an almost publication-ready plot. $ astscript-fits-view cmd.fits --ds9scale=minmax --ds9extra="-grid yes" $ astscript-fits-view cmd.fits --ds9scale=minmax \ --ds9extra="-grid yes -grid type publication" If you are happy with the grid and coloring and the rest, you can also use ds9 to save this as a JPEG image to directly use in your documents/slides with these extra DS9 options (DS9 will write the image to ‘cmd-2d.jpeg’ and quit immediately afterwards): $ astscript-fits-view cmd.fits --ds9scale=minmax \ --ds9extra="-grid yes -grid type publication" \ --ds9extra="-saveimage cmd-2d.jpeg -quit" This is good for a fast progress update. But for your paper or more official report, you want to show something with higher quality. For that, you can use the PGFPlots package in LaTeX to add axes in the same font as your text, sharp grids and many other elegant/powerful features (like over-plotting interesting points and lines). But to load the 2D histogram into PGFPlots first you need to convert the FITS image into a more standard format, for example, PDF. We will use Gnuastro's *note ConvertType:: for this, and use the ‘sls-inverse’ color map (which will map the pixels with a value of zero to white): $ astconvertt cmd.fits --colormap=sls-inverse --borderwidth=0 -ocmd.pdf Open the resulting ‘cmd.pdf’ and see the PDF. Below you can see a minimally working example of how to add axis numbers, labels and a grid to the PDF generated above. First, let's create a new ‘report’ directory to keep the LaTeX outputs, then put the minimal report's source in a file called ‘report.tex’. Notice the ‘xmin’, ‘xmax’, ‘ymin’, ‘ymax’ values and how they are the same as the range specified above. $ mkdir report-cmd $ mv cmd.pdf report-cmd/ $ cat report-cmd/report.tex \documentclass{article} \usepackage{pgfplots} \dimendef\prevdepth=0 \begin{document} You can write all you want here... \begin{tikzpicture} \begin{axis}[ enlargelimits=false, grid, axis on top, width=\linewidth, height=\linewidth, xlabel={Magnitude (F160W)}, ylabel={Color (F105W-F160W)}] \addplot graphics[xmin=22, xmax=30, ymin=-1, ymax=3] {cmd.pdf}; \end{axis} \end{tikzpicture} \end{document} Run this command to build your PDF (assuming you have LaTeX and PGFPlots). $ cd report-cmd $ pdflatex report.tex Open the newly created ‘report.pdf’ and enjoy the exquisite quality. The improved quality, blending in with the text, vector-graphics resolution and other features make this plot pleasing to the eye, and let your readers focus on the main point of your scientific argument. PGFPlots can also built the PDF of the plot separately from the rest of the paper/report, see *note 2D histogram as a table for plotting:: for the necessary changes in the preamble. We will not go much deeper into the Statistics program here, but there is so much more you can do with it. After finishing the tutorial, see *note Statistics::.  File: gnuastro.info, Node: Aperture photometry, Next: Matching catalogs, Prev: Column statistics color-magnitude diagram, Up: General program usage tutorial 2.1.17 Aperture photometry -------------------------- The colors we calculated in *note Working with catalogs estimating colors:: used a different segmentation map for each object. This might not satisfy some science cases that need the flux within a fixed area/aperture. Fortunately Gnuastro's modular programs make it very easy do this type of measurement (photometry). To do this, we can ignore the labeled images of NoiseChisel of Segment, we can just built our own labeled image! That labeled image can then be given to MakeCatalog To generate the apertures catalog we will use Gnuastro's MakeProfiles (see *note MakeProfiles::). But first we need a list of positions (aperture photometry needs a-priori knowledge of your target positions). So we will first read the clump positions from the F160W catalog, then use AWK to set the other parameters of each profile to be a fixed circle of radius 5 pixels (recall that we want all apertures to have an identical size/area in this scenario). $ rm *.fits *.txt $ asttable cat/xdf-f160w.fits -hCLUMPS -cRA,DEC \ | awk '!/^#/{print NR, $1, $2, 5, 5, 0, 0, 1, NR, 1}' \ > apertures.txt $ cat apertures.txt We can now feed this catalog into MakeProfiles using the command below to build the apertures over the image. The most important option for this particular job is ‘--mforflatpix’, it tells MakeProfiles that the values in the magnitude column should be used for each pixel of a flat profile. Without it, MakeProfiles would build the profiles such that the _sum_ of the pixels of each profile would have a _magnitude_ (in log-scale) of the value given in that column (what you would expect when simulating a galaxy for example). See *note Invoking astmkprof:: for details on the options. $ astmkprof apertures.txt --background=flat-ir/xdf-f160w.fits \ --clearcanvas --replace --type=int16 --mforflatpix \ --mode=wcs --output=apertures.fits Open ‘apertures.fits’ with a FITS image viewer (like SAO DS9) and look around at the circles placed over the targets. Also open the input image and Segment's clumps image and compare them with the positions of these circles. Where the apertures overlap, you will notice that one label has replaced the other (because of the ‘--replace’ option). In the future, MakeCatalog will be able to work with overlapping labels, but currently it does not. If you are interested, please join us in completing Gnuastro with added improvements like this (see task 14750 (1)). We can now feed the ‘apertures.fits’ labeled image into MakeCatalog instead of Segment's output as shown below. In comparison with the previous MakeCatalog call, you will notice that there is no more ‘--clumpscat’ option, since there is no more separate "clump" image now, each aperture is treated as a separate "object". $ astmkcatalog apertures.fits -h1 --zeropoint=26.27 \ --valuesfile=nc/xdf-f105w.fits \ --ids --ra --dec --magnitude --sn \ --output=cat/xdf-f105w-aper.fits This catalog has the same number of rows as the catalog produced from clumps in *note Working with catalogs estimating colors::. Therefore similar to how we found colors, you can compare the aperture and clump magnitudes for example. You can also change the filter name and zero point magnitudes and run this command again to have the fixed aperture magnitude in the F160W filter and measure colors on apertures. ---------- Footnotes ---------- (1) <https://savannah.gnu.org/task/index.php?14750>  File: gnuastro.info, Node: Matching catalogs, Next: Reddest clumps cutouts and parallelization, Prev: Aperture photometry, Up: General program usage tutorial 2.1.18 Matching catalogs ------------------------ In the example above, we had the luxury to generate the catalogs ourselves, and where thus able to generate them in a way that the rows match. But this is not generally the case. In many situations, you need to use catalogs from many different telescopes, or catalogs with high-level calculations that you cannot simply regenerate with the same pixels without spending a lot of time or using heavy computation. In such cases, when each catalog has the coordinates of its own objects, you can use the coordinates to match the rows with Gnuastro's Match program (see *note Match::). As the name suggests, Gnuastro's Match program will match rows based on distance (or aperture in 2D) in one, two, or three columns. For this tutorial, let's try matching the two catalogs that were not created from the same labeled images, recall how each has a different number of rows: $ asttable cat/xdf-f105w.fits -hCLUMPS -i $ asttable cat/xdf-f160w.fits -hCLUMPS -i You give Match two catalogs (from the two different filters we derived above) as argument, and the HDUs containing them (if they are FITS files) with the ‘--hdu’ and ‘--hdu2’ options. The ‘--ccol1’ and ‘--ccol2’ options specify the coordinate-columns which should be matched with which in the two catalogs. With ‘--aperture’ you specify the acceptable error (radius in 2D), in the same units as the columns. $ astmatch cat/xdf-f160w.fits cat/xdf-f105w.fits \ --hdu=CLUMPS --hdu2=CLUMPS \ --ccol1=RA,DEC --ccol2=RA,DEC \ --aperture=0.5/3600 \ --output=matched.fits $ astfits matched.fits From the second command, you see that the output has two extensions and that both have the same number of rows. The rows in each extension are the matched rows of the respective input table: those in the first HDU come from the first input and those in the second HDU come from the second. However, their order may be different from the input tables because the rows match: the first row in the first HDU matches with the first row in the second HDU, etc. You can also see which objects did not match with the ‘--notmatched’, like below. Note how each extension of now has a different number of rows. $ astmatch cat/xdf-f160w.fits cat/xdf-f105w.fits \ --hdu=CLUMPS --hdu2=CLUMPS \ --ccol1=RA,DEC --ccol2=RA,DEC \ --aperture=0.5/3600 \ --output=not-matched.fits --notmatched $ astfits not-matched.fits The ‘--outcols’ of Match is a very convenient feature: you can use it to specify which columns from the two catalogs you want in the output (merge two input catalogs into one). If the first character is an '<a>', the respective matched column (number or name, similar to Table above) in the first catalog will be written in the output table. When the first character is a '<b>', the respective column from the second catalog will be written in the output. Also, if the first character is followed by ‘_all’, then all the columns from the respective catalog will be put in the output. $ astmatch cat/xdf-f160w.fits cat/xdf-f105w.fits \ --hdu=CLUMPS --hdu2=CLUMPS \ --ccol1=RA,DEC --ccol2=RA,DEC \ --aperture=0.35/3600 \ --outcols=a_all,bMAGNITUDE,bSN \ --output=matched.fits $ astfits matched.fits  File: gnuastro.info, Node: Reddest clumps cutouts and parallelization, Next: FITS images in a publication, Prev: Matching catalogs, Up: General program usage tutorial 2.1.19 Reddest clumps, cutouts and parallelization -------------------------------------------------- As a final step, let's go back to the original clumps-based color measurement we generated in *note Working with catalogs estimating colors::. We will find the objects with the strongest color and make a cutout to inspect them visually and finally, we will see how they are located on the image. With the command below, we will select the reddest objects (those with a color larger than 1.5): $ asttable cat/mags-with-color.fits --range=F105W-F160W,1.5,inf You can see how many they are by piping it to ‘wc -l’: $ asttable cat/mags-with-color.fits --range=F105W-F160W,1.5,inf | wc -l Let's crop the F160W image around each of these objects, but we first need a unique identifier for them. We will define this identifier using the object and clump labels (with an underscore between them) and feed the output of the command above to AWK to generate a catalog. Note that since we are making a plain text table, we will define the necessary (for the string-type first column) metadata manually (see *note Gnuastro text table format::). $ echo "# Column 1: ID [name, str10] Object ID" > cat/reddest.txt $ asttable cat/mags-with-color.fits --range=F105W-F160W,1.5,inf \ | awk '{printf("%d_%-10d %f %f\n", $1, $2, $3, $4)}' \ >> cat/reddest.txt Let's see how these objects are positioned over the dataset. DS9 has the "Region"s concept for this purpose. And you build such regions easily from a table using Gnuastro's ‘astscript-ds9-region’ installed script, using the command below: $ astscript-ds9-region cat/reddest.txt -c2,3 --mode=wcs \ --command="ds9 flat-ir/xdf-f160w.fits -zscale" We can now feed ‘cat/reddest.txt’ into Gnuastro's Crop program to get separate postage stamps for each object. To keep things clean, we will make a directory called ‘crop-red’ and ask Crop to save the crops in this directory. We will also add a ‘-f160w.fits’ suffix to the crops (to remind us which filter they came from). The width of the crops will be 15 arc-seconds (or 15/3600 degrees, which is the units of the WCS). $ mkdir crop-red $ astcrop flat-ir/xdf-f160w.fits --mode=wcs --namecol=ID \ --catalog=cat/reddest.txt --width=15/3600,15/3600 \ --suffix=-f160w.fits --output=crop-red Like the MakeProfiles command in *note Aperture photometry::, if you look at the order of the crops, you will notice that the crops are not made in order! This is because each crop is independent of the rest, therefore crops are done in parallel, and parallel operations are asynchronous. So the order can differ in each run, but the final output is the same! In the command above, you can change ‘f160w’ to ‘f105w’ to make the crops in both filters. You can see all the cropped FITS files in the ‘crop-red’ directory with this command: $ astscript-fits-view crop-red/*.fits To view the crops more easily (not having to open ds9 for each image), you can convert the FITS crops into the JPEG format with a shell loop like below. $ cd crop-red $ for f in *.fits; do \ astconvertt $f --fluxlow=-0.001 --fluxhigh=0.005 --invert -ojpg; \ done $ cd .. $ ls crop-red/ You can now use your general graphic user interface image viewer to flip through the images more easily, or import them into your papers/reports. The ‘for’ loop above to convert the images will do the job in series: each file is converted only after the previous one is complete. But like the crops, each JPEG image is independent, so let's parallelize it. In other words, we want to run more than one instance of the command at any moment. To do that, we will use Make (https://en.wikipedia.org/wiki/Make_(software)). Make is a very wonderful pipeline management system, and the most common and powerful implementation is GNU Make (https://www.gnu.org/software/make), which has a complete manual just like this one. We cannot go into the details of Make here, for a hands-on video tutorial, see this video introduction (https://peertube.stream/w/iJitjS3r232Z8UPMxKo6jq). To do the process above in Make, please copy the contents below into a plain-text file called ‘Makefile’. Just replace the ‘__[TAB]__’ part at the start of the line with a single '<TAB>' button on your keyboard. jpgs=$(subst .fits,.jpg,$(wildcard *.fits)) all: $(jpgs) $(jpgs): %.jpg: %.fits __[TAB]__astconvertt $< --fluxlow=-0.001 --fluxhigh=0.005 \ __[TAB]__ --invert -o$ Now that the ‘Makefile’ is ready, you can run Make on 12 threads using the commands below. Feel free to replace the 12 with any number of threads you have on your system (you can find out by running the ‘nproc’ command on GNU/Linux operating systems): $ make -j12 Did you notice how much faster this one was? When possible, it is always very helpful to do your analysis in parallel. You can build very complex workflows with Make, for example, see Akhlaghi 2021 (https://arxiv.org/abs/2006.03018) so it is worth spending some time to master.  File: gnuastro.info, Node: FITS images in a publication, Next: Marking objects for publication, Prev: Reddest clumps cutouts and parallelization, Up: General program usage tutorial 2.1.20 FITS images in a publication ----------------------------------- In the previous section (*note Reddest clumps cutouts and parallelization::), we visually inspected the positions of the reddest objects using DS9. That is very good for an interactive inspection of the objects: you can zoom-in and out, you can do measurements, etc. Once the experimentation phase of your project is complete, you want to show these objects over the whole image in a report, paper or slides. One solution is to use DS9 itself! For example, run the ‘astscript-fits-view’ command of the previous section to open DS9 with the regions over-plotted. Click on the "File" menu and select "Save Image". In the side-menu that opens, you have multiple formats to select from. Usually for publications, we want to show the regions and text (in the colorbar) in vector graphics, so it is best to export to EPS. Once you have made the EPS, you can then convert it to PDF with the ‘epspdf’ command. Another solution is to use Gnuastro's ConvertType program. The main difference is that DS9 is a Graphic User Interface (GUI) program, so it takes relatively long (about a second) to load, and it requires many dependencies. This will slow-down automatic conversion of many files, and will make your code hard to move to another operating system. DS9 does have a command-line interface that you can use to automate the creation of each file, however, it has a very peculiar command-line interface and formats (like the "region" files). However, in ConvertType, there is no graphic interface, so it has very few dependencies, it is fast, and finally, it takes normal tables (in plain-text or FITS) as input. So in this concluding step of the analysis, let's build a nice publication-ready plot, showing the positions of the reddest objects in the image for our paper. In *note Reddest clumps cutouts and parallelization::, we already used ConvertType to make JPEG postage stamps. Here, we will use it to make a PDF image of the whole deep region. To start, let's simply run ConvertType on the F160W image: $ astconvertt flat-ir/xdf-f160w.fits -oxdf.pdf Open the output in a PDF viewer. You see that it is almost fully black! Let's see why this happens! First, with the two commands below, let's calculate the maximum value, and the standard deviation of the sky in this image (using NoiseChisel's output, which we found at the end of *note NoiseChisel optimization for detection::). Note that NoiseChisel writes the median sky standard deviation _before_ interpolation in the ‘MEDSTD’ keyword of the ‘SKY_STD’ HDU. This is more robust than the median of the Sky standard deviation image (which has gone through interpolation). $ max=$(aststatistics nc/xdf-f160w.fits -hINPUT-NO-SKY --maximum) $ skystd=$(astfits nc/xdf-f160w.fits -hSKY_STD --keyvalue=MEDSTD -q) $ echo $max $skystd 58.8292 0.000410282 $ echo $max $skystd | awk '{print $1/$2}' 143387 In the last command above, we divided the maximum by the sky standard deviation. You see that the maximum value is more than $140000$ times larger than the noise level! On the other hand common monitors or printers, usually have a maximum dynamic range of 8-bits, only allowing for $2^8=256$ layers. This is therefore the maximum number of "layers" you can have in a common display formats like JPEG, PDF or PNG! Dividing the result above by 256, we get a layer spacing of $ echo $max $skystd | awk '{print $1/$2/256}' 560.106 In other words, the first layer (which is black) will contain all the pixel values below $\sim560$! So all pixels with a signal-to-noise ratio lower than $\sim560$ will have a black color since they fall in the first layer of an 8-bit PDF (or JPEG) image. This happens because by default we are assuming a linear mapping from floating point to 8-bit integers. To fix this, we should move to a different mapping. A good, physically motivated, mapping is Surface Brightness (which is in log-scale, see *note Brightness flux magnitude::). Fortunately this is very easy to do with Gnuastro's Arithmetic program, as shown in the commands below (using the known zero point(1), and after calculating the pixel area in units of arcsec$^2$): $ zeropoint=25.94 $ pixarcsec2=$(astfits nc/xdf-f160w.fits --pixelareaarcsec2) $ astarithmetic nc/xdf-f160w.fits $zeropoint $pixarcsec2 counts-to-sb \ --output=xdf-f160w-sb.fits With the two commands below, first, let's look at the dynamic range of the image now (dividing the maximum by the minimum), and then let's open the image and have a look at it: $ aststatistics xdf-f160w-sb.fits --minimum --maximum $ astscript-fits-view xdf-f160w-sb.fits The good news is that the dynamic range has now decreased to about 2! In other words, we can distribute the 256 layers of an 8-bit display over a much smaller range of values, and therefore better visualize the data. However, there are two important points to consider from the output of the first command and a visual inspection of the second. • The largest pixel value (faintest surface brightness level) in the image is $\sim43$! This is far too low to be realistic, and is just due to noise. As discussed in *note Measuring the dataset limits::, the $3\sigma$ surface brightness limit of this image, over 100 arcsec$^2$ is roughly 32.66 mag/arcsec$^2$. • You see many NaN pixels in between the galaxies! These are due to the fact that the magnitude is defined on a logarithmic scale and the logarithm of a negative number is not defined. In other words, we should replace all NaN pixels, and pixels with a surface brightness value fainter than the image surface brightness limit to this limit. With the first command below, we will first extract the surface brightness limit from the catalog headers that we calculated before, and then call Arithmetic to use this limit. $ sblimit=$(astfits cat/xdf-f160w.fits --keyvalue=SBLMAG -q) $ astarithmetic nc/xdf-f160w.fits $zeropoint $pixarcsec2 \ counts-to-sb set-sb \ sb sb $sblimit gt sb isblank or $sblimit where \ --output=xdf-f160w-sb.fits Let's convert this image into a PDF with the command below: $ astconvertt xdf-f160w-sb.fits --output=xdf-f160w-sb.pdf It is much better now and we can visualize many features of the FITS file (from the central structures of the galaxies and stars, to a little into the noise and their low surface brightness features. However, the image generally looks a little too gray! This is because of that bright star in the bottom half of the image! Stars are very sharp! So let's manually tell ConvertType to set any pixel with a value less than (brighter than) 20 to black (and not use the minimum). We do this with the ‘--fluxlow’ option: $ astconvertt xdf-f160w-sb.fits --output=xdf-f160w-sb.pdf --fluxlow=20 We are still missing some of the diffuse flux in this PDF. This is because of those negative pixels that were set to NaN. To better show these structures, we should warp the image to larger pixels. So let's warp it to a pixel grid where the new pixels are $4\times4$ larger than the original pixels. But be careful that warping should be done on the original image, not on the surface brightness image. We should re-calculate the surface brightness image after the warping is one. This is because $log(a+b)\ne log(a)+log(b)$. Recall that surface brightness calculation involves a logarithm, and warping involves addition of pixel values. $ astwarp nc/xdf-f160w.fits --scale=1/4 --centeroncorner \ --output=xdf-f160w-warped.fits $ pixarcsec2=$(astfits xdf-f160w-warped.fits --pixelareaarcsec2) $ astarithmetic xdf-f160w-warped.fits $zeropoint $pixarcsec2 \ counts-to-sb set-sb \ sb sb $sblimit gt sb isblank or $sblimit where \ --output=xdf-f160w-sb.fits $ astconvertt xdf-f160w-sb.fits --output=xdf-f160w-sb.pdf --fluxlow=20 Above, we needed to re-calculate the pixel area of the warpped image, but we did not need to re-calculate the surface brightness limit! The reason is that the surface brightness limit is independent of the pixel area (in its derivation, the pixel area has been accounted for). As a side-effect of the warping, the number of pixels in the image also dramatically decreased, therefore the volume of the output PDF (in bytes) is also smaller, making your paper/report easier to upload/download or send by email. This visual resolution is still more than enough for including on top of a column in your paper! *I do not have the zero point of my image:* The absolute value of the zero point is irrelevant for the finally produced PDF. We used it here because it was available and makes the numbers physically understandable. If you do not have the zero point, just set it to zero (which is also the default zero point used by MakeCatalog when it estimates the surface brightness limit). For the value to ‘--fluxlow’ above, you can simply subtract $\sim10$ from the surface brightness limit. To summarize, and to keep the image for the next section in a separate directory, here are the necessary commands: $ zeropoint=25.94 $ mkdir report-image $ cd report-image $ sblimit=$(astfits cat/xdf-f160w.fits --keyvalue=SBLMAG -q) $ astwarp nc/xdf-f160w.fits --scale=1/4 --centeroncorner \ --output=warped.fits $ pixarcsec2=$(astfits warped.fits --pixelareaarcsec2) $ astarithmetic warped.fits $zeropoint $pixarcsec2 \ counts-to-sb set-sb \ sb sb $sblimit gt sb isblank or $sblimit where \ --output=sb.fits $ astconvertt sb.fits --output=sb.pdf --fluxlow=20 Finally, let's remove all the temporary files we built in the top-level tutorial directory: $ rm *.fits *.pdf *Color images:* In this tutorial we just used one of the filters and showed the surface brightness image of that single filter as a grayscale image. But the image can also be in color (using three filters) to better convey the physical properties of the objects in your image. To create an image that shows the full dynamic range of your data, see this dedicated tutorial *note Color images with full dynamic range::. ---------- Footnotes ---------- (1) <https://archive.stsci.edu/prepds/xdf/#science-images>  File: gnuastro.info, Node: Marking objects for publication, Next: Writing scripts to automate the steps, Prev: FITS images in a publication, Up: General program usage tutorial 2.1.21 Marking objects for publication -------------------------------------- In *note FITS images in a publication:: we created a ready-to-print visualization of the FITS image used in this tutorial. However, you rarely want to show a naked image like that! You usually want to highlight some objects (that are the target of your science) over the image and show different marks for the various types of objects you are studying. In this tutorial, we will do just that: select a sub-set of the full catalog of clumps, and show them with different marks shapes and colors, while also adding some text under each mark. To add coordinates on the edges of the figure in your paper, see *note Annotations for figure in paper::. To start with, let's put a red plus sign over the sub-sample of reddest clumps similar to *note Reddest clumps cutouts and parallelization::. First, we will need to make the table of marks. We will choose those with a color stronger than 1.5 magnitudes and a signal-to-noise ratio (in F160W) larger than 5. We also only need the RA, Dec, color and magnitude (in F160W) columns (recall that at the end of the previous section we were already in the ‘report-image/’ directory): $ asttable cat/mags-with-color.fits --range=F105W-F160W,1.5:inf \ --range=sn-f160w,5:inf -cRA,DEC,MAG-F160w,F105W-F160W \ --output=reddest-cat.fits Gnuastro's ConvertType program also has features to add marks over the finally produced PDF. Below, we will start with the same ‘astconvertt’ command of the previous section. The positions of the marks should be given as a table to the ‘--marks’ option. Two other options are also mandatory: ‘--markcoords’ identifies the columns that contain the coordinates of each mark and ‘--mode’ specifies if the coordinates are in image or WCS coordinates. $ astconvertt sb.fits --output=reddest.pdf --fluxlow=20 \ --marks=reddest-cat.fits --mode=wcs \ --markcoords=RA,DEC Open the output ‘reddest.pdf’ and see the result. You will see relatively thick red circles placed over the given coordinates. In your PDF browser, zoom-in to one of the regions, you will see that while the pixels of the background image become larger, the lines of these regions do not degrade! This is the concept/power of Vector Graphics: ideal for publication! For more on raster (pixelated) and vector (infinite-resolution) graphics, see *note Raster and Vector graphics::. We had planned to put a plus-sign on each object. However, because we did not explicitly ask for a certain shape, ConvertType put a circle. Each mark can have its own separate shape. Shapes can be given by a name or a code. The full list of available shapes names and codes is given in the description of ‘--markshape’ option of *note Drawing with vector graphics::. To use a different shape, we need to add a new column to the base table, containing the identifier of the desired shape for each mark. For example, the code for the plus sign is ‘2’. With the commands below, we will add a new column with this fixed value. With the first AWK command we will make a single-column file, where all the rows have the same value. We pipe our base table into AWK, so it has the same number of rows. With the second command, we concatenate (or append) the new column with Table, and give this new column the name ‘SHAPE’ (to easily refer to it later and not have to count). With the third command, we clean-up behind our selves (deleting the extra ‘params.txt’ file). Finally, we use the ‘--markshape’ option to tell ConvertType which column to use for the shape identifier. $ asttable reddest-cat.fits | awk '{print 2}' > params.txt $ asttable reddest-cat.fits --catcolumnfile=params.txt \ --colmetadata=5,SHAPE,id,"Shape of mark" \ --output=reddest-marks.fits $ rm params.txt $ astconvertt sb.fits --output=reddest.pdf --fluxlow=20 \ --marks=reddest-marks.fits --mode=wcs \ --markcoords=RA,DEC --markshape=SHAPE Open the PDF and have a look! You do see red signs over the coordinates, but the thick plus-signs only become visible after you zoom-in multiple times! To make them larger, you can give another column to specify the size of each mark. Let's set the full width of the plus sign to extend 3 arcseconds. The commands are similar to above, try to follow the difference (in particular, how we use ‘--sizeinarcsec’). $ asttable reddest-cat.fits | awk '{print 2, 3}' > params.txt $ asttable reddest-cat.fits --catcolumnfile=params.txt \ --colmetadata=5,SHAPE,id,"Shape of mark" \ --colmetadata=6,SIZE,arcsec,"Size in arcseconds" \ --output=reddest-marks.fits $ rm params.txt $ astconvertt sb.fits --output=reddest.pdf --fluxlow=20 \ --marks=reddest-marks.fits --mode=wcs \ --markcoords=RA,DEC --markshape=SHAPE \ --marksize=SIZE --sizeinarcsec The power of this methodology is that each mark can be completely different! For example, let's show the objects with a color less than 2 magnitudes with a circle, and those with a stronger color with a plus (recall that the code for a circle was ‘1’ and that of a plus was ‘2’). You only need to replace the first command above with the one below. Afterwards, run the rest of the commands in the last code-block. $ asttable reddest-cat.fits -cF105W-F160W \ | awk '{if($1<2) shape=1; else shape=2; print shape, 3}' \ > params.txt Have a look at the resulting ‘reddest.pdf’. You see that the circles are much larger than the plus signs. This is because the "size" of a cross is defined to be its full width, but for a circle, the value in the size column is the radius. The way each shape interprets the value of the size column is fully described under ‘--markshape’ of *note Drawing with vector graphics::. To make them more comparable, let's set the circle sizes to be half of the cross sizes. $ asttable reddest-cat.fits -cF105W-F160W \ | awk '{if($1<2) {shape=1; size=1.5} \ else {shape=2; size=3} \ print shape, size}' \ > params.txt Let's make things a little more complex (and show more information in the visualization) by using color. Gnuastro recognizes the full extended web colors (https://en.wikipedia.org/wiki/Web_colors#Extended_colors), for their full list (containing names and codes) see *note Vector graphics colors::. But like everything else, an even easier way to view and select the color for your figure is on the command-line! If your terminal supports 24-bit true-color, you can see all the colors by running this command (supported on modern GNU/Linux distributions): $ astconvertt --listcolors we will give a "Sienna" color for the objects that are fainter than 29th magnitude and a "deeppink" color to the brighter ones (while keeping the same shapes definition as before) Since there are many colors, using their codes can make the table hard to read by a human! So let's use the color names instead of the color codes in the example below (this is useful in other columns require strings-only, like the font name). The only intricacy is in the making of ‘params.txt’. Recall that string columns need column metadata (*note Gnuastro text table format::). In this particular case, since the string column is the last one, we can safely use AWK's ‘print’ command. But if you have multiple string columns, to be safe it is better to use AWK's ‘printf’ and explicitly specify the number of characters in the string columns. $ asttable reddest-cat.fits -cF105W-F160W,MAG-F160W \ | awk 'BEGIN{print "# Column 3: COLOR [name, str8]"}\ {if($1<2) {shape=1; size=1.5} \ else {shape=2; size=3} \ if($2>29) {color="sienna"} \ else {color="deeppink"} \ print shape, size, color}' \ > params.txt $ asttable reddest-cat.fits --catcolumnfile=params.txt \ --colmetadata=5,SHAPE,id,"Shape of mark" \ --colmetadata=6,SIZE,arcsec,"Size in arcseconds" \ --output=reddest-marks.fits $ rm params.txt $ astconvertt sb.fits --output=reddest.pdf --fluxlow=20 \ --marks=reddest-marks.fits --mode=wcs \ --markcoords=RA,DEC --markshape=SHAPE \ --marksize=SIZE --sizeinarcsec --markcolor=COLOR As one final example, let's write the magnitude of each object under it. Since the magnitude is already in the ‘marks.fits’ that we produced above, it is very easy to add it (just add ‘--marktext’ option to ConvertType): $ astconvertt sb.fits --output=reddest.pdf --fluxlow=20 \ --marks=reddest-marks.fits --mode=wcs \ --markcoords=RA,DEC --markshape=SHAPE \ --marksize=SIZE --sizeinarcsec \ --markcolor=COLOR --marktext=MAG-F160W Open the final PDF (‘reddest.pdf’) and you will see the magnitudes written under each mark in the same color. In the case of magnitudes (where the magnitude error is usually much larger than 0.01 magnitudes, four decimals is not too meaningful. By default, for printing floating point columns, we use the compiler's default precision (which is about 4 digits for 32-bit floating point numbers). But you can over-write this (to only show two digits after the decimal point) with the ‘--marktextprecision=2’ option. You can customize the written text by specifying a different line-width (for the text, different from the main mark), or even specifying a different font for each mark! You can see the full list of available fonts for the text under a mark with the first command below and with the second, you can actually see them in a custom PDF (to only show the fonts). $ astconvertt --listfonts $ astconvertt --showfonts As you see, there are many ways you can customize each mark! The above examples were just the tip of the iceburg! But this section has already become long so we will stop it here (see the box at the end of this section for yet another useful example). Like above, each feature of a mark can be controlled with a column in the table of mark information. Please see in *note Drawing with vector graphics:: for the full list of columns/features that you can use. *Drawing ellipses:* With the commands below, you can measure the elliptical properties of the objects and visualized them in a ready-to-publish PDF (we will only show the ellipses of the largest clumps): $ astmkcatalog ../seg/xdf-f160w.fits --ra --dec --semi-major \ --axis-ratio --position-angle --clumpscat \ --output=ellipseinfo.fits $ asttable ellipseinfo.fits -hCLUMPS | awk '{print 4}' > params.txt $ asttable ellipseinfo.fits -hCLUMPS --catcolumnfile=params.txt \ --range=SEMI_MAJOR,10,inf -oellipse-marks.fits \ --colmetadata=6,SHAPE,id,"Shape of mark" $ astconvertt sb.fits --output=ellipse.pdf --fluxlow=20 \ --marks=ellipse-marks.fits --mode=wcs \ --markcoords=RA,DEC --markshape=SHAPE \ --marksize=SEMI_MAJOR,AXIS_RATIO --sizeinpix \ --markrotate=POSITION_ANGLE To conclude this section, let us highlight an important factor to consider in vector graphics. In ConvertType, things like line width or font size are defined in units of _points_. In vector graphics standards, 72 points correspond to one inch. Therefore, one way you can change these factors for all the objects is to assign a larger or smaller print size to the image. The print size is just a meta-data entry, and will not affect the file's volume in bytes! You can do this with the ‘--widthincm’ option. Try adding this option and giving it very different values like ‘5’ or ‘30’.  File: gnuastro.info, Node: Writing scripts to automate the steps, Next: Citing and acknowledging Gnuastro, Prev: Marking objects for publication, Up: General program usage tutorial 2.1.22 Writing scripts to automate the steps -------------------------------------------- In the previous sub-sections, we went through a series of steps like downloading the necessary datasets (in *note Setup and data download::), detecting the objects in the image, and finally selecting a particular subset of them to inspect visually (in *note Reddest clumps cutouts and parallelization::). To benefit most effectively from this subsection, please go through the previous sub-sections, and if you have not actually done them, we recommended to do/run them before continuing here. Each sub-section/step of the sub-sections above involved several commands on the command-line. Therefore, if you want to reproduce the previous results (for example, to only change one part, and see its effect), you'll have to go through all the sections above and read through them again. If you have ran the commands recently, you may also have them in the history of your shell (command-line environment). You can see many of your previous commands on the shell (even if you have closed the terminal) with the ‘history’ command, like this: $ history Try it in your teminal to see for yourself. By default in GNU Bash, it shows the last 500 commands. You can also save this "history" of previous commands to a file using shell redirection (to have it after your next 500 commands), with this command $ history > my-previous-commands.txt This is a good way to temporarily keep track of every single command you ran. But in the middle of all the useful commands, you will have many extra commands, like tests that you did before/after the good output of a step (that you decided to continue working on), or an unrelated job you had to do in the middle of this project. Because of these impurities, after a few days (that you have forgot the context: tests you did not end-up using, or unrelated jobs) reading this full history will be very frustrating. Keeping the final commands that were used in each step of an analysis is a common problem for anyone who is doing something serious with the computer. But simply keeping the most important commands in a text file is not enough, the small steps in the middle (like making a directory to keep the outputs of one step) are also important. In other words, the only way you can be sure that you are under control of your processing (and actually understand how you produced your final result) is to run the commands automatically. Fortunately, typing commands interactively with your fingers is not the only way to operate the shell. The shell can also take its orders/commands from a plain-text file, which is called a _script_. When given a script, the shell will read it line-by-line as if you have actually typed it manually. Let's continue with an example: try typing the commands below in your shell. With these commands we are making a text file (‘a.txt’) containing a simple $3\times3$ matrix, converting it to a FITS image and computing its basic statistics. After the first three commands open ‘a.txt’ with a text editor to actually see the values we wrote in it, and after the fourth, open the FITS file to see the matrix as an image. ‘a.txt’ is created through the shell's redirection feature: '‘>’' overwrites the existing contents of a file, and '‘>>’' appends the new contents after the old contents. $ echo "1 1 1" > a.txt $ echo "1 2 1" >> a.txt $ echo "1 1 1" >> a.txt $ astconvertt a.txt --output=a.fits $ aststatistics a.fits To automate these series of commands, you should put them in a text file. But that text file must have two special features: 1) It should tell the shell what program should interpret the script. 2) The operating system should know that the file can be directly executed. For the first, Unix-like operating systems define the _shebang_ concept (also known as _sha-bang_ or _hashbang_). In the shebang convention, the first two characters of a file should be '‘#!’'. When confronted with these characters, the script will be interpreted with the program that follows them. In this case, we want to write a shell script and the most common shell program is GNU Bash which is installed in ‘/bin/bash’. So the first line of your script should be '‘#!/bin/bash’'(1). It may happen (rarely) that GNU Bash is in another location on your system. In other cases, you may prefer to use a non-standard version of Bash installed in another location (that has higher priority in your ‘PATH’, see *note Installation directory::). In such cases, you can use the '‘#!/usr/bin/env bash’' shebang instead. Through the ‘env’ program, this shebang will look in your ‘PATH’ and use the first ‘bash’ it finds to run your script. But for simplicity in the rest of the tutorial, we will continue with the '‘#!/bin/bash’' shebang. Using your favorite text editor, make a new empty file, let's call it ‘my-first-script.sh’. Write the GNU Bash shebang (above) as its first line. After the shebang, copy the series of commands we ran above. Just note that the '‘$’' sign at the start of every line above is the prompt of the interactive shell (you never actually typed it, remember?). Therefore, commands in a shell script should not start with a '‘$’'. Once you add the commands, close the text editor and run the ‘cat’ command to confirm its contents. It should look like the example below. Recall that you should only type the line that starts with a '‘$’', the lines without a '‘$’', are printed automatically on the command-line (they are the contents of your script). $ cat my-first-script.sh #!/bin/bash echo "1 1 1" > a.txt echo "1 2 1" >> a.txt echo "1 1 1" >> a.txt astconvertt a.txt --output=a.fits aststatistics a.fits The script contents are now ready, but to run it, you should activate the script file's _executable flag_. In Unix-like operating systems, every file has three types of flags: _read_ (or ‘r’), _write_ (or ‘w’) and _execute_ (or ‘x’). To toggle a file's flags, you should use the ‘chmod’ (for "change mode") command. To activate a flag, you put a '‘+’' before the flag character (for example, ‘+x’). To deactivate it, you put a '‘-’' (for example, ‘-x’). In this case, you want to activate the script's executable flag, so you should run $ chmod +x my-first-script.sh Your script is now ready to run/execute the series of commands. To run it, you should call it while specifying its location in the file system. Since you are currently in the same directory as the script, it is easiest to use relative addressing like below (where '‘./’' means the current directory). But before running your script, first delete the two ‘a.txt’ and ‘a.fits’ files that were created when you interactively ran the commands. $ rm a.txt a.fits $ ls $ ./my-first-script.sh $ ls The script immediately prints the statistics while doing all the previous steps in the background. With the last ‘ls’, you see that it automatically re-built the ‘a.txt’ and ‘a.fits’ files, open them and have a look at their contents. An extremely useful feature of shell scripts is that the shell will ignore anything after a '‘#’' character. You can thus add descriptions/comments to the commands and make them much more useful for the future. For example, after adding comments, your script might look like this: $ cat my-first-script.sh #!/bin/bash # This script is my first attempt at learning to write shell scripts. # As a simple series of commands, I am just building a small FITS # image, and calculating its basic statistics. # Write the matrix into a file. echo "1 1 1" > a.txt echo "1 2 1" >> a.txt echo "1 1 1" >> a.txt # Convert the matrix to a FITS image. astconvertt a.txt --output=a.fits # Calculate the statistics of the FITS image. aststatistics a.fits Is Not this much more easier to read now? Comments help to provide human-friendly context to the raw commands. At the time you make a script, comments may seem like an extra effort and slow you down. But in one year, you will forget almost everything about your script and you will appreciate the effort so much! Think of the comments as an email to your future-self and always put a well-written description of the context/purpose (most importantly, things that are not directly clear by reading the commands) in your scripts. The example above was very basic and mostly redundant series of commands, to show the basic concepts behind scripts. You can put any (arbitrarily long and complex) series of commands in a script by following the two rules: 1) add a shebang, and 2) enable the executable flag. In fact, as you continue your own research projects, you will find that any time you are dealing with more than two or three commands, keeping them in a script (and modifying that script, and running it) is much more easier, and future-proof, then typing the commands directly on the command-line and relying on things like ‘history’. Here are some tips that will come in handy when you are writing your scripts: As a more realistic example, let's have a look at a script that will do the steps of *note Setup and data download:: and *note Dataset inspection and cropping::. In particular note how often we are using variables to avoid repeating fixed strings of characters (usually file/directory names). This greatly helps in scaling up your project, and avoiding hard-to-find bugs that are caused by typos in those fixed strings. $ cat gnuastro-tutorial-1.sh #!/bin/bash # Download the input datasets # --------------------------- # # The default file names have this format (where `FILTER' differs for # each filter): # hlsp_xdf_hst_wfc3ir-60mas_hudf_FILTER_v1_sci.fits # To make the script easier to read, a prefix and suffix variable are # used to sandwich the filter name into one short line. dldir=download xdfsuffix=_v1_sci.fits xdfprefix=hlsp_xdf_hst_wfc3ir-60mas_hudf_ xdfurl=http://archive.stsci.edu/pub/hlsp/xdf # The file name and full URLs of the input data. f105w_in=$xdfprefix"f105w"$xdfsuffix f160w_in=$xdfprefix"f160w"$xdfsuffix f105w_url=$xdfurl/$f105w_in f160w_url=$xdfurl/$f160w_in # Go into the download directory and download the images there, # then come back up to the top running directory. mkdir $dldir cd $dldir wget $f105w_url wget $f160w_url cd .. # Only work on the deep region # ---------------------------- # # To help in readability, each vertice of the deep/flat field is stored # as a separate variable. They are then merged into one variable to # define the polygon. flatdir=flat-ir vertice1="53.187414,-27.779152" vertice2="53.159507,-27.759633" vertice3="53.134517,-27.787144" vertice4="53.161906,-27.807208" f105w_flat=$flatdir/xdf-f105w.fits f160w_flat=$flatdir/xdf-f160w.fits deep_polygon="$vertice1:$vertice2:$vertice3:$vertice4" mkdir $flatdir astcrop --mode=wcs -h0 --output=$f105w_flat \ --polygon=$deep_polygon $dldir/$f105w_in astcrop --mode=wcs -h0 --output=$f160w_flat \ --polygon=$deep_polygon $dldirdir/$f160w_in The first thing you may notice is that even if you already have the downloaded input images, this script will always try to re-download them. Also, if you re-run the script, you will notice that ‘mkdir’ prints an error message that the download directory already exists. Therefore, the script above is not too useful and some modifications are necessary to make it more generally useful. Here are some general tips that are often very useful when writing scripts: *Stop script if a command crashes* By default, if a command in a script crashes (aborts and fails to do what it was meant to do), the script will continue onto the next command. In GNU Bash, you can tell the shell to stop a script in the case of a crash by adding this line at the start of your script: set -e *Check if a file/directory exists to avoid re-creating it* Conditionals are a very useful feature in scripts. One common conditional is to check if a file exists or not. Assuming the file's name is ‘FILENAME’, you can check its existance (to avoid re-doing the commands that build it) like this: if [ -f FILENAME ]; then echo "FILENAME exists" else # Some commands to generate the file echo "done" > FILENAME fi To check the existance of a directory instead of a file, use ‘-d’ instead of ‘-f’. To negate a conditional, use '‘!’' and note that conditionals can be written in one line also (useful for when it is short). One common scenario that you'll need to check the existance of directories is when you are making them: the default ‘mkdir’ command will crash if the desired directory already exists. On some systems (including GNU/Linux distributions), ‘mkdir’ has options to deal with such cases. But if you want your script to be portable, it is best to check yourself like below: if ! [ -d DIRNAME ]; then mkdir DIRNAME; fi *Avoid changing directories (with '‘cd’') within the script* You can directly read and write files within other directories. Therefore using ‘cd’ to enter a directory (like what we did above, around the ‘wget’ commands), running command there and coming out is extra, and not good practice. This is because the running directory is part of the environment of a command. You can simply give the directory name before the input and output file names to use them from anywhere on the file system. See the same ‘wget’ commands below for an example. *Copyright notice:* A very important thing to put _at the top_ of your script is a one-line description of what it does and its copyright information (see the example below). Here, we specify who is the author(s) of this script, in which years, and under what license others are allowed to use this file. Without it, your script does not credibility or identity, and others cannot trust, use or acknowledge your work on it. Since Gnuastro is itself licensed under a copyleft (https://en.wikipedia.org/wiki/Copyleft) license (see *note Your rights:: and *note GNU General Public License:: or GNU GPL, the license finishes with a template on how to add it), any script that uses Gnuastro should also have a copyleft license: we recommend the same GNU GPL v3+ like below. Taking the above points into consideration, we can write a better version of the script above. Please compare this script with the previous one carefully to spot the differences. These are very important points that you will definitely encouter during your own research, and knowing them can greatly help your productiveity, so pay close attention (even in the comments). #!/bin/bash # Script to download and keep the deep region of the XDF survey. # # Copyright (C) 2024 Your Name <yourname@email.company> # Copyright (C) 2021-2024 Initial Author <incase@there-is.any> # # This script is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This script 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. # Abort the script in case of an error. set -e # Download the input datasets # --------------------------- # # The default file names have this format (where `FILTER' differs for # each filter): # hlsp_xdf_hst_wfc3ir-60mas_hudf_FILTER_v1_sci.fits # To make the script easier to read, a prefix and suffix variable are # used to sandwich the filter name into one short line. dldir=download xdfsuffix=_v1_sci.fits xdfprefix=hlsp_xdf_hst_wfc3ir-60mas_hudf_ xdfurl=http://archive.stsci.edu/pub/hlsp/xdf # The file name and full URLs of the input data. f105w_in=$xdfprefix"f105w"$xdfsuffix f160w_in=$xdfprefix"f160w"$xdfsuffix f105w_url=$xdfurl/$f105w_in f160w_url=$xdfurl/$f160w_in # Make sure the download directory exists, and download the images. if ! [ -d $dldir ]; then mkdir $dldir; fi if ! [ -f $f105w_in ]; then wget $f105w_url -O $dldir/$f105w_in; fi if ! [ -f $f160w_in ]; then wget $f160w_url -O $dldir/$f160w_in; fi # Crop out the deep region # ------------------------ # # To help in readability, each vertice of the deep/flat field is stored # as a separate variable. They are then merged into one variable to # define the polygon. flatdir=flat-ir vertice1="53.187414,-27.779152" vertice2="53.159507,-27.759633" vertice3="53.134517,-27.787144" vertice4="53.161906,-27.807208" f105w_flat=$flatdir/xdf-f105w.fits f160w_flat=$flatdir/xdf-f160w.fits deep_polygon="$vertice1:$vertice2:$vertice3:$vertice4" if ! [ -d $flatdir ]; then mkdir $flatdir; fi if ! [ -f $f105w_flat ]; then astcrop --mode=wcs -h0 --output=$f105w_flat \ --polygon=$deep_polygon $dldir/$f105w_in fi if ! [ -f $f160w_flat ]; then astcrop --mode=wcs -h0 --output=$f160w_flat \ --polygon=$deep_polygon $dldir/$f160w_in fi ---------- Footnotes ---------- (1) When the script is to be run by the same shell that is calling it (like this script), the shebang is optional. But it is still recommended, because it ensures that even if the user is not using GNU Bash, the script will be run in GNU Bash: given the differences between various shells, writing truly portable shell scripts, that can be run by many shell programs/implementations, is not easy (sometimes not possible!). ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro.info-2�������������������������������������������������������������������0000644�0001750�0001750�00001115060�14557514034�012417� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is gnuastro.info, produced by makeinfo version 7.1 from gnuastro.texi. This book documents version 0.22 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * Match: (gnuastro)Match. Match two separate catalogs. * astmatch: (gnuastro)Invoking astmatch. Options to Match. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Segment: (gnuastro)Segment. Segment detections based on signal structure. * astsegment: (gnuastro)Invoking astsegment. Options to Segment. * Query: (gnuastro)Query. Access remote databases for downloading data. * astquery: (gnuastro)Invoking astquery. Options to Query. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. * astscript: (gnuastro)Installed scripts. Gnuastro's installed scripts. * astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script * astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script * astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script * astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script * astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script * astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script * astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script * astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script * astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script * astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script * astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script END-INFO-DIR-ENTRY  File: gnuastro.info, Node: Citing and acknowledging Gnuastro, Prev: Writing scripts to automate the steps, Up: General program usage tutorial 2.1.23 Citing and acknowledging Gnuastro ---------------------------------------- In conclusion, we hope this extended tutorial has been a good starting point to help in your exciting research. If this book or any of the programs in Gnuastro have been useful for your research, please cite the respective papers, and acknowledge the funding agencies that made all of this possible. Without citations, we will not be able to secure future funding to continue working on Gnuastro or improving it, so please take software citation seriously (for all the scientific software you use, not just Gnuastro). To help you in this, all Gnuastro programs have a ‘--cite’ option to facilitate the citation and acknowledgment. Just note that it may be necessary to cite additional papers for different programs, so please try it out on all the programs that you used, for example: $ astmkcatalog --cite $ astnoisechisel --cite  File: gnuastro.info, Node: Detecting large extended targets, Next: Building the extended PSF, Prev: General program usage tutorial, Up: Tutorials 2.2 Detecting large extended targets ==================================== The outer wings of large and extended objects can sink into the noise very gradually and can have a large variety of shapes (for example, due to tidal interactions). Therefore separating the outer boundaries of the galaxies from the noise can be particularly tricky. Besides causing an under-estimation in the total estimated brightness of the target, failure to detect such faint wings will also cause a bias in the noise measurements, thereby hampering the accuracy of any measurement on the dataset. Therefore even if they do not constitute a significant fraction of the target's light, or are not your primary target, these regions must not be ignored. In this tutorial, we will walk you through the strategy of detecting such targets using *note NoiseChisel::. *Do not start with this tutorial:* If you have not already completed *note General program usage tutorial::, we strongly recommend going through that tutorial before starting this one. Basic features like access to this book on the command-line, the configuration files of Gnuastro's programs, benefiting from the modular nature of the programs, viewing multi-extension FITS files, or using NoiseChisel's outputs are discussed in more detail there. We will try to detect the faint tidal wings of the beautiful M51 group(1) in this tutorial. We will use a dataset/image from the public Sloan Digital Sky Survey (http://www.sdss.org/), or SDSS. Due to its more peculiar low surface brightness structure/features, we will focus on the dwarf companion galaxy of the group (or NGC 5195). * Menu: * Downloading and validating input data:: How to get and check the input data. * NoiseChisel optimization:: Detect the extended and diffuse wings. * Skewness caused by signal and its measurement:: How signal changes the distribution. * Image surface brightness limit:: Standards to quantify the noise level. * Achieved surface brightness level:: Calculate the outer surface brightness. * Extract clumps and objects:: Find sub-structure over the detections. ---------- Footnotes ---------- (1) <https://en.wikipedia.org/wiki/M51_Group>  File: gnuastro.info, Node: Downloading and validating input data, Next: NoiseChisel optimization, Prev: Detecting large extended targets, Up: Detecting large extended targets 2.2.1 Downloading and validating input data ------------------------------------------- To get the image, you can use the simple field search (https://dr12.sdss.org/fields) tool of SDSS. As long as it is covered by the SDSS, you can find an image containing your desired target either by providing a standard name (if it has one), or its coordinates. To access the dataset we will use here, write ‘NGC5195’ in the "Object Name" field and press "Submit" button. *Type the example commands:* Try to type the example commands on your terminal and use the history feature of your command-line (by pressing the "up" button to retrieve previous commands). Do not simply copy and paste the commands shown here. This will help simulate future situations when you are processing your own datasets. You can see the list of available filters under the color image. For this demonstration, we will use the r-band filter image. By clicking on the "r-band FITS" link, you can download the image. Alternatively, you can just run the following command to download it with GNU Wget(1). To keep things clean, let's also put it in a directory called ‘ngc5195’. With the ‘-O’ option, we are asking Wget to save the downloaded file with a more manageable name: ‘r.fits.bz2’ (this is an r-band image of NGC 5195, which was the directory name). $ mkdir ngc5195 $ cd ngc5195 $ topurl=https://dr12.sdss.org/sas/dr12/boss/photoObj/frames $ wget $topurl/301/3716/6/frame-r-003716-6-0117.fits.bz2 -Or.fits.bz2 When you want to reproduce a previous result (a known analysis, on a known dataset, to get a known result: like the case here!) it is important to verify that the file is correct: that the input file has not changed (on the remote server, or in your own archive), or there was no downloading problem. Otherwise, if the data have changed in your server/archive, and you use the same script, you will get a different result, causing a lot of confusion! One good way to verify the contents of a file is to store its _Checksum_ in your analysis script and check it before any other operation. The _Checksum_ algorithms look into the contents of a file and calculate a fixed-length string from them. If any change (even in a bit or byte) is made within the file, the resulting string will change, for more see Wikipedia (https://en.wikipedia.org/wiki/Checksum). There are many common algorithms, but a simple one is the SHA-1 algorithm (https://en.wikipedia.org/wiki/SHA-1) (Secure Hash Algorithm 1) that you can calculate easily with the command below (the second line is the output, and the checksum is the first/long string: it is independent of the file name) $ sha1sum r.fits.bz2 5fb06a572c6107c72cbc5eb8a9329f536c7e7f65 r.fits.bz2 If the checksum on your computer is different from this, either the file has been incorrectly downloaded (most probable), or it has changed on SDSS servers (very unlikely(2)). To get a better feeling of checksums open your favorite text editor and make a test file by writing something in it. Save it and calculate the text file's SHA-1 checksum with ‘sha1sum’. Try renaming that file, and you'll see the checksum has not changed (checksums only look into the contents, not the name/location of the file). Then open the file with your text editor again, make a change and re-calculate its checksum, you'll see the checksum string has changed. Its always good to keep this short checksum string with your project's scripts and validate your input data before using them. You can do this with a shell conditional like this: filename=r.fits.bz2 expected=5fb06a572c6107c72cbc5eb8a9329f536c7e7f65 sum=$(sha1sum $filename | awk '{print $1}') if [ $sum = $expected ]; then echo "$filename: validated" else echo "$filename: wrong checksum!" exit 1 fi Now that we know you have the same data that we wrote this tutorial with, let's continue. The SDSS server keeps the files in a Bzip2 compressed file format (that have a ‘.bz2’ suffix). So we will first decompress it with the following command to use it as a normal FITS file. By convention, compression programs delete the original file (compressed when uncompressing, or uncompressed when compressing). To keep the original file, you can use the ‘--keep’ or ‘-k’ option which is available in most compression programs for this job. Here, we do not need the compressed file any more, so we will just let ‘bunzip’ delete it for us and keep the directory clean. $ bunzip2 r.fits.bz2 ---------- Footnotes ---------- (1) To make the command easier to view on screen or in a page, we have defined the top URL of the image as the ‘topurl’ shell variable. You can just replace the value of this variable with ‘$topurl’ in the ‘wget’ command. (2) If your checksum is different, try uncompressing the file with the ‘bunzip2’ command after this, and open the resulting FITS file. If it opens and you see the image of M51 and NGC5195, then there was no download problem, and the file has indeed changed on the SDSS servers! In this case, please contact us at ‘bug-gnuastro@gnu.org’.  File: gnuastro.info, Node: NoiseChisel optimization, Next: Skewness caused by signal and its measurement, Prev: Downloading and validating input data, Up: Detecting large extended targets 2.2.2 NoiseChisel optimization ------------------------------ In *note Detecting large extended targets:: we downloaded the single exposure SDSS image. Let's see how NoiseChisel operates on it with its default parameters: $ astnoisechisel r.fits -h0 As described in *note NoiseChisel and Multi-Extension FITS files::, NoiseChisel's default output is a multi-extension FITS file. Open the output ‘r_detected.fits’ file and have a look at the extensions, the 0-th extension is only meta-data and contains NoiseChisel's configuration parameters. The rest are the Sky-subtracted input, the detection map, Sky values and Sky standard deviation. $ ds9 -mecube r_detected.fits -zscale -zoom to fit Flipping through the extensions in a FITS viewer, you will see that the first image (Sky-subtracted image) looks reasonable: there are no major artifacts due to bad Sky subtraction compared to the input. The second extension also seems reasonable with a large detection map that covers the whole of NGC5195, but also extends towards the bottom of the image where we actually see faint and diffuse signal in the input image. Now try flipping between the ‘DETECTIONS’ and ‘SKY’ extensions. In the ‘SKY’ extension, you'll notice that there is still significant signal beyond the detected pixels. You can tell that this signal belongs to the galaxy because the far-right side of the image (away from M51) is dark (has lower values) and the brighter parts in the Sky image (with larger values) are just under the detections and follow a similar pattern. The fact that signal from the galaxy remains in the ‘SKY’ HDU shows that NoiseChisel can be optimized for a much better result. The ‘SKY’ extension must not contain any light around the galaxy. Generally, any time your target is much larger than the tile size and the signal is very diffuse and extended at low signal-to-noise values (like this case), this _will_ happen. Therefore, when there are large objects in the dataset, *the best place* to check the accuracy of your detection is the estimated Sky image. When dominated by the background, noise has a symmetric distribution. However, signal is not symmetric (we do not have negative signal). Therefore when non-constant(1) signal is present in a noisy dataset, the distribution will be positively skewed. For a demonstration, see Figure 1 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). This skewness is a good measure of how much faint signal we have in the distribution. The skewness can be accurately measured by the difference in the mean and median (assuming no strong outliers): the more distant they are, the more skewed the dataset is. This important concept will be discussed more extensively in the next section (*note Skewness caused by signal and its measurement::). However, skewness is only a proxy for signal when the signal has structure (varies per pixel). Therefore, when it is approximately constant over a whole tile, or sub-set of the image, the constant signal's effect is just to shift the symmetric center of the noise distribution to the positive and there will not be any skewness (major difference between the mean and median). This positive(2) shift that preserves the symmetric distribution is the Sky value. When there is a gradient over the dataset, different tiles will have different constant shifts/Sky-values, for example, see Figure 11 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). To make this very large diffuse/flat signal detectable, you will therefore need a larger tile to contain a larger change in the values within it (and improve number statistics, for less scatter when measuring the mean and median). So let's play with the tessellation a little to see how it affects the result. In Gnuastro, you can see the option values (‘--tilesize’ in this case) by adding the ‘-P’ option to your last command. Try running NoiseChisel with ‘-P’ to see its default tile size. You can clearly see that the default tile size is indeed much smaller than this (huge) galaxy and its tidal features. As a result, NoiseChisel was unable to identify the skewness within the tiles under the outer parts of M51 and NGC 5159 and the threshold has been over-estimated on those tiles. To see which tiles were used for estimating the quantile threshold (no skewness was measured), you can use NoiseChisel's ‘--checkqthresh’ option: $ astnoisechisel r.fits -h0 --checkqthresh Did you see how NoiseChisel aborted after finding and applying the quantile thresholds? When you call any of NoiseChisel's ‘--check*’ options, by default, it will abort as soon as all the check steps have been written in the check file (a multi-extension FITS file). This allows you to focus on the problem you wanted to check as soon as possible (you can disable this feature with the ‘--continueaftercheck’ option). To optimize the threshold-related settings for this image, let's play with this quantile threshold check image a little. Do not forget that "_Good statistical analysis is not a purely routine matter, and generally calls for more than one pass through the computer_" (Anscombe 1973, see *note Science and its tools::). A good scientist must have a good understanding of her tools to make a meaningful analysis. So do not hesitate in playing with the default configuration and reviewing the manual when you have a new dataset (from a new instrument) in front of you. Robust data analysis is an art, therefore a good scientist must first be a good artist. So let's open the check image as a multi-extension cube: $ ds9 -mecube r_qthresh.fits -zscale -cmap sls -zoom to fit The first extension (called ‘CONVOLVED’) of ‘r_qthresh.fits’ is the convolved input image where the threshold(s) is(are) defined (and later applied to). For more on the effect of convolution and thresholding, see Sections 3.1.1 and 3.1.2 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). The second extension (‘QTHRESH_ERODE’) has a blank/white value for all the pixels of any tile that was identified as having significant signal. The other tiles have the measured threshold over them. The next two extensions (‘QTHRESH_NOERODE’ and ‘QTHRESH_EXPAND’) are the other two quantile thresholds that are necessary in NoiseChisel's later steps. Every step in this file is repeated on the three thresholds. Play a little with the color bar of the ‘QTHRESH_ERODE’ extension, you clearly see how the non-blank tiles around NGC 5195 have a gradient. As one line of attack against discarding too much signal below the threshold, NoiseChisel rejects outlier tiles. Go forward by three extensions to ‘VALUE1_NO_OUTLIER’ and you will see that many of the tiles over the galaxy have been removed in this step. For more on the outlier rejection algorithm, see the latter half of *note Quantifying signal in a tile::. Even though much of the galaxy's footprint has been rejected as outliers, there are still tiles with signal remaining: play with the DS9 color-bar and you still see a gradient near the outer tidal feature of the galaxy. Before trying to correct this, let's look at the other extensions of this check image. We will use a ‘*’ as a wild-card that can be 1, 2 or 3. In the ‘THRESH*_INTERP’ extensions, you see that all the blank tiles have been interpolated using their nearest neighbors (the relevant option here is ‘--interpnumngb’). In the following ‘THRESH*_SMOOTH’ extensions, you can see the tile values after smoothing (configured with ‘--smoothwidth’ option). Finally, in ‘QTHRESH-APPLIED’, you see the thresholded image: pixels with a value of 1 will be eroded later, but pixels with a value of 2 will pass the erosion step un-touched. Let's get back to the problem of optimizing the result. You have two strategies for detecting the outskirts of the merging galaxies: 1) Increase the tile size to get more accurate measurements of skewness. 2) Strengthen the outlier rejection parameters to discard more of the tiles with signal (primarily by increasing ‘--outliernumngb’). Fortunately in this image we have a sufficiently large region on the right side of the image that the galaxy does not extend to. So we can use the more robust first solution. In situations where this does not happen (for example, if the field of view in this image was shifted to the left to have more of M51 and less sky) you are limited to a combination of the two solutions or just to the second solution. *Skipping convolution for faster tests:* The slowest step of NoiseChisel is the convolution of the input dataset. Therefore when your dataset is large (unlike the one in this test), and you are not changing the input dataset or kernel in multiple runs (as in the tests of this tutorial), it is faster to do the convolution separately once (using *note Convolve::) and use NoiseChisel's ‘--convolved’ option to directly feed the convolved image and avoid convolution. For more on ‘--convolved’, see *note NoiseChisel input::. To better identify the skewness caused by the flat NGC 5195 and M51 tidal features on the tiles under it, we have to choose a larger tile size. Let's try a tile size of 100 by 100 pixels and inspect the check image. $ astnoisechisel r.fits -h0 --tilesize=100,100 --checkqthresh $ ds9 -mecube r_qthresh.fits -zscale -cmap sls -zoom to fit You can clearly see the effect of this increased tile size: the tiles are much larger and when you look into ‘VALUE1_NO_OUTLIER’, you see that all the tiles are nicely grouped on the right side of the image (the farthest from M51, where we do not see a gradient in ‘QTHRESH_ERODE’). Things look good now, so let's remove ‘--checkqthresh’ and let NoiseChisel proceed with its detection. $ astnoisechisel r.fits -h0 --tilesize=100,100 $ ds9 -mecube r_detected.fits -zscale -cmap sls -zoom to fit The detected pixels of the ‘DETECTIONS’ extension have expanded a little, but not as much. Also, the gradient in the ‘SKY’ image is almost fully removed (and does not fall over M51 anymore). However, on the bottom-right of the m51 detection, we see many holes gradually increasing in size. This hints that there is still signal out there. Let's check the next series of detection steps by adding the ‘--checkdetection’ option this time: $ astnoisechisel r.fits -h0 --tilesize=100,100 --checkdetection $ ds9 -mecube r_detcheck.fits -zscale -cmap sls -zoom to fit The output now has 16 extensions, showing every step that is taken by NoiseChisel. The first and second (‘INPUT’ and ‘CONVOLVED’) are clear from their names. The third (‘THRESHOLDED’) is the thresholded image after finding the quantile threshold (last extension of the output of ‘--checkqthresh’). The fourth HDU (‘ERODED’) is new: it is the name-stake of NoiseChisel, or eroding pixels that are above the threshold. By erosion, we mean that all pixels with a value of ‘1’ (above the threshold) that are touching a pixel with a value of ‘0’ (below the threshold) will be flipped to zero (or "carved" out)(3). You can see its effect directly by going back and forth between the ‘THRESHOLDED’ and ‘ERODED’ extensions. In the fifth extension (‘OPENED-AND-LABELED’) the image is "opened", which is a name for eroding once, then dilating (dilation is the inverse of erosion). This is good to remove thin connections that are only due to noise. Each separate connected group of pixels is also given its unique label here. Do you see how just beyond the large M51 detection, there are many smaller detections that get smaller as you go more distant? This hints at the solution: the default number of erosions is too much. Let's see how many erosions take place by default (by adding ‘-P | grep erode’ to the previous command) $ astnoisechisel r.fits -h0 --tilesize=100,100 -P | grep erode We see that the value of ‘erode’ is ‘2’. The default NoiseChisel parameters are primarily targeted to processed images (where there is correlated noise due to all the processing that has gone into the warping and stacking of raw images, see *note NoiseChisel optimization for detection::). In those scenarios 2 erosions are commonly necessary. But here, we have a single-exposure image where there is no correlated noise (the pixels are not mixed). So let's see how things change with only one erosion: $ astnoisechisel r.fits -h0 --tilesize=100,100 --erode=1 \ --checkdetection $ ds9 -mecube r_detcheck.fits -zscale -cmap sls -zoom to fit Looking at the ‘OPENED-AND-LABELED’ extension again, we see that the main/large detection is now much larger than before. While the immediately-outer connected regions are still present, they have decreased dramatically, so we can pass this step. After the ‘OPENED-AND-LABELED’ extension, NoiseChisel goes onto finding false detections using the undetected pixels. The process is fully described in Section 3.1.5. (Defining and Removing False Detections) of Akhlaghi and Ichikawa 2015 (https://arxiv.org/pdf/1505.01664.pdf). Please compare the extensions to what you read there and things will be very clear. In the last HDU (‘DETECTION-FINAL’), we have the final detected pixels that will be used to estimate the Sky and its Standard deviation. We see that the main detection has indeed been detected very far out, so let's see how the full NoiseChisel will estimate the Sky and its standard deviation (by removing ‘--checkdetection’): $ astnoisechisel r.fits -h0 --tilesize=100,100 --erode=1 $ ds9 -mecube r_detected.fits -zscale -cmap sls -zoom to fit The ‘DETECTIONS’ extension of ‘r_detected.fits’ closely follows what the ‘DETECTION-FINAL’ of the check image (looks good!). If you go ahead to the ‘SKY’ extension, things still look good. But it can still be improved. Look at the ‘DETECTIONS’ again, you will see the right-ward edges of M51's detected pixels have many "holes" that are fully surrounded by signal (value of ‘1’) and the signal stretches out in the noise very thinly (the size of the holes increases as we go out). This suggests that there is still undetected signal and that we can still dig deeper into the noise. With the ‘--detgrowquant’ option, NoiseChisel will "grow" the detections in to the noise. Its value is the ultimate limit of the growth in units of quantile (between 0 and 1). Therefore ‘--detgrowquant=1’ means no growth and ‘--detgrowquant=0.5’ means an ultimate limit of the Sky level (which is usually too much and will cover the whole image!). See Figure 2 of Akhlaghi 2019 (https://arxiv.org/pdf/1909.11230.pdf) for more on this option. Try running the previous command with various values (from 0.6 to higher values) to see this option's effect on this dataset. For this particularly huge galaxy (with signal that extends very gradually into the noise), we will set it to ‘0.75’: $ astnoisechisel r.fits -h0 --tilesize=100,100 --erode=1 \ --detgrowquant=0.75 $ ds9 -mecube r_detected.fits -zscale -cmap sls -zoom to fit Beyond this level (smaller ‘--detgrowquant’ values), you see many of the smaller background galaxies (towards the right side of the image) starting to create thin spider-leg-like features, showing that we are following correlated noise for too much. Please try it for yourself by changing it to ‘0.6’ for example. When you look at the ‘DETECTIONS’ extension of the command shown above, you see the wings of the galaxy being detected much farther out, But you also see many holes which are clearly just caused by noise. After growing the objects, NoiseChisel also allows you to fill such holes when they are smaller than a certain size through the ‘--detgrowmaxholesize’ option. In this case, a maximum area/size of 10,000 pixels seems to be good: $ astnoisechisel r.fits -h0 --tilesize=100,100 --erode=1 \ --detgrowquant=0.75 --detgrowmaxholesize=10000 $ ds9 -mecube r_detected.fits -zscale -cmap sls -zoom to fit When looking at the raw input image (which is very "shallow": less than a minute exposure!), you do not see anything so far out of the galaxy. You might just think to yourself that "this is all noise, I have just dug too deep and I'm following systematics"! If you feel like this, have a look at the deep images of this system in Watkins 2015 (https://arxiv.org/abs/1501.04599), or a 12 hour deep image of this system (with a 12-inch telescope): <https://i.redd.it/jfqgpqg0hfk11.jpg>(4). In these deeper images you clearly see how the outer edges of the M51 group follow this exact structure, below in *note Achieved surface brightness level::, we will measure the exact level. As the gradient in the ‘SKY’ extension shows, and the deep images cited above confirm, the galaxy's signal extends even beyond this. But this is already far deeper than what most (if not all) other tools can detect. Therefore, we will stop configuring NoiseChisel at this point in the tutorial and let you play with the other options a little more, while reading more about it in the papers: Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) and 2019 (https://arxiv.org/abs/1909.11230)) and *note NoiseChisel::. When you do find a better configuration feel free to contact us for feedback. Do not forget that good data analysis is an art, so like a sculptor, master your chisel for a good result. To avoid typing all these options every time you run NoiseChisel on this image, you can use Gnuastro's configuration files, see *note Configuration files::. For an applied example of setting/using them, see *note Option management and configuration files::. *This NoiseChisel configuration is NOT GENERIC:* Do not use the configuration derived above, on another instrument's image _blindly_. If you are unsure, just use the default values. As you saw above, the reason we chose this particular configuration for NoiseChisel to detect the wings of the M51 group was strongly influenced by the noise properties of this particular image. Remember *note NoiseChisel optimization for detection::, where we looked into the very deep XDF image which had strong correlated noise? As long as your other images have similar noise properties (from the same data-reduction step of the same instrument), you can use your configuration on any of them. But for images from other instruments, please follow a similar logic to what was presented in these tutorials to find the optimal configuration. *Smart NoiseChisel:* As you saw during this section, there is a clear logic behind the optimal parameter value for each dataset. Therefore, we plan to add capabilities to (optionally) automate some of the choices made here based on the actual dataset, please join us in doing this if you are interested. However, given the many problems in existing "smart" solutions, such automatic changing of the configuration may cause more problems than they solve. So even when they are implemented, we would strongly recommend quality checks for a robust analysis. ---------- Footnotes ---------- (1) by constant, we mean that it has a single value in the region we are measuring. (2) In processed images, where the Sky value can be over-estimated, this constant shift can be negative. (3) Pixels with a value of ‘2’ are very high signal-to-noise pixels, they are not eroded, to preserve sharp and bright sources. (4) The image is taken from this Reddit discussion: <https://www.reddit.com/r/Astronomy/comments/9d6x0q/12_hours_of_exposure_on_the_whirlpool_galaxy/>  File: gnuastro.info, Node: Skewness caused by signal and its measurement, Next: Image surface brightness limit, Prev: NoiseChisel optimization, Up: Detecting large extended targets 2.2.3 Skewness caused by signal and its measurement --------------------------------------------------- In the previous section (*note NoiseChisel optimization::) we showed how to customize NoiseChisel for a single-exposure SDSS image of the M51 group. During the customization, we also discussed the skewness caused by signal. In the next section (*note Image surface brightness limit::), we will use this to measure the surface brightness limit of the image. However, to better understand NoiseChisel and also, the image surface brightness limit, understanding the skewness caused by signal, and how to measure it properly are very important. Therefore now that we have separated signal from noise, let's pause for a moment and look into skewness, how signal creates it, and find the best way to measure it. Let's start masking all the detected pixels found at the end of the previous section (*note NoiseChisel optimization::) and having a look at the noise distribution with Gnuastro's Arithmetic and Statistics programs as shown below (while visually inspecting the masked image with DS9 in the middle). $ astarithmetic r_detected.fits -hINPUT-NO-SKY set-in \ r_detected.fits -hDETECTIONS set-det \ in det nan where -odet-masked.fits $ ds9 det-masked.fits $ aststatistics det-masked.fits You will see that Gnuastro's Statistics program prints an ASCII histogram when no option is given (it is shown below). This is done to give you a fast and easy view of the distribution of values in the dataset (pixels in an image, or rows in a table's column). ------- Input: det-masked.fits (hdu: 1) ------- Number of elements: 903920 Minimum: -0.113543 Maximum: 0.130339 Median: -0.00216306 Mean: -0.0001893073877 Standard deviation: 0.02569057188 ------- Histogram: | ** * | * ** * * | ** ** * * | * ** ** ** * | ** ** ** ** * ** | ** ** ** ** * ** * | * ** ** ** ** * ** ** | ** ** ** ** **** ** ** * | ** ** ** ** ** **** ** ** ** * | ** ** ** ** ** ** ******* ** ** ** * |*********** ** ** ** ******************* ** ** ** ** ***** ** ***** ** |---------------------------------------------------------------------- This histogram shows a roughly symmetric noise distribution, so let's have a look at its skewness. The most commonly used definition of skewness is known as the "Pearson's first skewness coefficient". It measures the difference between the mean and median, in units of the standard deviation (STD): $$\rm{Skewness}\equiv\frac{(\rm{mean}-\rm{median})}{\rm{STD}}$$ The logic behind this definition is simple: as more signal is added to the same pixels that originally only have raw noise (skewness is increased), the mean shifts to the positive faster than the median, so the distance between the mean and median should increase. Let's measure the skewness (as defined above) over the image without any signal. Its very easy with Gnuastro's Statistics program (and piping the output to AWK): $ aststatistics det-masked.fits --mean --median --std \ | awk '{print ($1-$2)/$3}' 0.0768279 We see that the mean and median are only $0.08\sigma$ (rounded) away from each other (which is very close)! All pixels with significant signal are masked, so this is expected, and everything is fine. Now, let's check the pixel distribution of the sky-subtracted input (where pixels with significant signal remain, and are not masked): $ ds9 r_detected.fits $ aststatistics r_detected.fits -hINPUT-NO-SKY ------- Input: r_detected.fits (hdu: INPUT-NO-SKY) Unit: nanomaggy ------- Number of elements: 3049472 Minimum: -0.113543 Maximum: 159.25 Median: 0.0241158 Mean: 0.1057885317 Standard deviation: 0.698167489 ------- Histogram: |* |* |* |* |* |* |* |* |* |* |******************************************* *** ** **** * * * * * |---------------------------------------------------------------------- Comparing the distributions above, you can see that the _minimum_ value of the image has not changed because we have not masked the minimum values. However, as expected, the _maximum_ value of the image has changed (from $0.13$ to $159.25$). This is clearly evident from the ASCII histogram: the distribution is very elongated because the galaxy inside the image is extremely bright. Now, let's limit the displayed information with the ‘--lessthan=0.13’ option of Statistics as shown below (to only use values less than 0.13; the maximum of the image where all signal is masked). $ aststatistics r_detected.fits -hINPUT-NO-SKY --lessthan=0.13 ------- Input: r_detected.fits (hdu: INPUT-NO-SKY) Range: up to (exclusive) 0.13. Unit: nanomaggy ------- Number of elements: 2531949 Minimum: -0.113543 Maximum: 0.126233 Median: 0.0137138 Mean: 0.01735551527 Standard deviation: 0.03590550597 ------- Histogram: | * | * ** ** | * * ** ** ** | * * ** ** ** * | * ** * ** ** ** * | ** ** * ** ** ** * * | * ** ** * ** ** ** * * | ** ** ** * ** ** ** ** * ** * | * ** ** **** ** ** ** **** ** ** ** | * ** ** ** **** ** ** ** ******* ** ** ** * ** ** ** |***** ** ********** ** ** ********** ** ********** ** ************* ** |---------------------------------------------------------------------- The improvement is obvious: the ASCII histogram better shows the pixel values near the noise level. We can now compare with the distribution of ‘det-masked.fits’ that we found earlier. The ASCII histogram of ‘det-masked.fits’ was approximately symmetric, while this is asymmetric in this range, especially in outer (to the right, or positive) direction. The heavier right-side tail is a clear visual demonstration of skewness that is caused by the signal in the un-masked image. Having visually confirmed the skewness, let's quantify it with Pearson's first skewness coefficient. Like before, we can simply use Gnuastro's Statistics and AWK for the measurement and calculation: $ aststatistics r_detected.fits --mean --median --std \ | awk '{print ($1-$2)/$3}' 0.116982 The difference between the mean and median is now approximately $0.12\sigma$. This is larger than the skewness of the masked image (which was approximately $0.08\sigma$). At a glance (only looking at the numbers), it seems that there is not much difference between the two distributions. However, visually looking at the non-masked image, or the ASCII histogram, you would expect the quantified skewness to be much larger than that of the masked image, but that has not happened! Why is that? The reason is that the presence of signal does not only shift the mean and median, it _also_ increases the standard deviation! To see this for yourself, compare the standard deviation of ‘det-masked.fits’ (which was approximately $0.025$) to ‘r_detected.fits’ (without ‘--lessthan’; which was approximately $0.699$). The latter is almost 28 times larger! This happens because the standard deviation is defined only in a symmetric (and Gaussian) distribution. In a non-Gaussian distribution, the standard deviation is poorly defined and is not a good measure of "width". Since Pearson's first skewness coefficient is defined in units of the standard deviation, this very large increase in the standard deviation has hidden the much increased distance between the mean and median after adding signal. We therefore need a better unit or scale to quantify the distance between the mean and median. A unit that is less affected by skewness or outliers. One solution that we have found to be very useful is the quantile units or quantile scale. The quantile scale is defined by first sorting the dataset (which has $N$ elements). If we want the quantile of a value $V$ in a distribution, we first find the nearest data element to $V$ in the sorted dataset. Let's assume the nearest element is the $i$-th element, counting from 0, after sorting. The quantile of V in that distribution is then defined as $i/(N-1)$ (which will have a value between 0 and 1). The quantile of the median is obvious from its definition: 0.5. This is because the median is defined to be the middle element of the distribution after sorting. We can therefore define skewness as the quantile of the mean ($q_m$). If $q_m\sim0.5$ (the median), then the distribution (of signal blended in noise) is symmetric (possibly Gaussian, but the functional form is irrelevant here). A larger value for $|q_m-0.5|$ quantifies a more skewed the distribution. Furthermore, a $q_m>0.5$ signifies a positive skewness, while $q_m<0.5$ signifies a negative skewness. Let's put this definition to a test on the same two images we have already created. Fortunately Gnuastro's Statistics program has the ‘--quantofmean’ option to easily calculate $q_m$ for you. So testing is easy: $ aststatistics det-masked.fits --quantofmean 0.51295636 $ aststatistics r_detected.fits -hINPUT-NO-SKY --quantofmean 0.8105163158 The two quantiles of mean are now very distinctly different ($0.51$ and $0.81$): differing by about $0.3$ (on a scale of 0 to 1)! Recall that when defining skewness with Pearson's first skewness coefficient, their difference was negligible ($0.04\sigma$)! You can now better appreciate why we discussed quantile so extensively in *note NoiseChisel optimization::. In case you would like to know more about the usage of the quantile of the mean in Gnuastro, please see *note Quantifying signal in a tile::, or watch this video demonstration: <https://peertube.stream/w/35b7c398-9fd7-4bcf-8911-1e01c5124585>.  File: gnuastro.info, Node: Image surface brightness limit, Next: Achieved surface brightness level, Prev: Skewness caused by signal and its measurement, Up: Detecting large extended targets 2.2.4 Image surface brightness limit ------------------------------------ When your science is related to extended emission (like the example here) and you are presenting your results in a scientific conference, usually the first thing that someone will ask (if you do not explicitly say it!), is the dataset's _surface brightness limit_ (a standard measure of the noise level), and your target's surface brightness (a measure of the signal, either in the center or outskirts, depending on context). For more on the basics of these important concepts please see *note Quantifying measurement limits::). So in this section of the tutorial, we will measure these values for this image and this target. Before measuring the surface brightness limit, let's see how reliable our detection was. In other words, let's see how "clean" our noise is (after masking all detections, as described previously in *note Skewness caused by signal and its measurement::) $ aststatistics det-masked.fits --quantofmean 0.5111848629 Showing that the mean is indeed very close to the median, although just about 1 quantile larger. As we saw in *note NoiseChisel optimization::, a very small residual signal still remains in the undetected regions and this very small difference is a quantitative measure of that undetected signal. It was up to you as an exercise to improve it, so we will continue with this dataset. The surface brightness limit of the image can be measured from the masked image and the equation in *note Quantifying measurement limits::. Let's do it for a $3\sigma$ surface brightness limit over an area of $25 \rm{arcsec}^2$: $ nsigma=3 $ zeropoint=22.5 $ areaarcsec2=25 $ std=$(aststatistics det-masked.fits --sigclip-std) $ pixarcsec2=$(astfits det-masked.fits --pixelscale --quiet \ | awk '{print $3*3600*3600}') $ astarithmetic --quiet $nsigma $std x \ $areaarcsec2 $pixarcsec2 x \ sqrt / $zeropoint counts-to-mag 26.0241 The customizable steps above are good for any type of mask. For example, your field of view may contain a very deep part so you need to mask all the shallow parts _as well as_ the detections before these steps. But when your image is flat (like this), there is a much simpler method to obtain the same value through MakeCatalog (when the standard deviation image is made by NoiseChisel). NoiseChisel has already calculated the minimum (‘MINSTD’), maximum (‘MAXSTD’) and median (‘MEDSTD’) standard deviation within the tiles during its processing and has stored them as FITS keywords within the ‘SKY_STD’ HDU. You can see them by piping all the keywords in this HDU into ‘grep’. In Grep, each ‘.’ represents one character that can be anything so ‘M..STD’ will match all three keywords mentioned above. $ astfits r_detected.fits --hdu=SKY_STD | grep 'M..STD' The ‘MEDSTD’ value is very similar to the standard deviation derived above, so we can safely use it instead of having to mask and run Statistics. In fact, MakeCatalog also uses this keyword and will report the dataset's $n\sigma$ surface brightness limit as keywords in the output (not as measurement columns, since it is related to the noise, not labeled signal): $ astmkcatalog r_detected.fits -hDETECTIONS --output=sbl.fits \ --forcereadstd --ids Before looking into the measured surface brightness limits, let's review some important points about this call to MakeCatalog first: • We are only concerned with the noise (not the signal), so we do not ask for any further measurements, because they can un-necessarily slow it down. However, MakeCatalog requires at least one column, so we will only ask for the ‘--ids’ column (which does not need any measurement!). The output catalog will therefore have a single row and a single column, with 1 as its value(1). • If we do not ask for any noise-related column (for example, the signal-to-noise ratio column with ‘--sn’, among other noise-related columns), MakeCatalog is not going to read the noise standard deviation image (again, to speed up its operation when it is redundant). We are thus using the ‘--forcereadstd’ option (short for "force read standard deviation image") here so it is ready for the surface brightness limit measurements that are written as keywords. With the command below you can see all the keywords that were measured with the table. Notice the group of keywords that are under the "Surface brightness limit (SBL)" title. $ astfits sbl.fits -h1 Since all the keywords of interest here start with ‘SBL’, we can get a more cleaner view with this command. $ astfits sbl.fits -h1 | grep ^SBL Notice how the ‘SBLSTD’ has the same value as NoiseChisel's ‘MEDSTD’ above. Using ‘SBLSTD’, MakeCatalog has determined the $n\sigma$ surface brightness limiting magnitude in these header keywords. The multiple of $\sigma$, or $n$, is the value of the ‘SBLNSIG’ keyword which you can change with the ‘--sfmagnsigma’. The surface brightness limiting magnitude within a pixel (‘SBLNSIG’) and within a pixel-agnostic area of ‘SBLAREA’ arcsec$^2$ are stored in ‘SBLMAG’. You will notice that the two surface brightness limiting magnitudes above have values around 3 and 4 (which is not correct!). This is because we have not given a zero point magnitude to MakeCatalog, so it uses the default value of ‘0’. SDSS image pixel values are calibrated in units of "nanomaggy" which are defined to have a zero point magnitude of 22.5(2). So with the first command below we give the zero point value and with the second we can see the surface brightness limiting magnitudes with the correct values (around 25 and 26) $ astmkcatalog r_detected.fits -hDETECTIONS --zeropoint=22.5 \ --output=sbl.fits --forcereadstd --ids $ astfits sbl.fits -h1 | grep ^SBL As you see from ‘SBLNSIG’ and ‘SBLAREA’, the default multiple of sigma is 1 and the default area is 1 arcsec$^2$. Usually higher values are used for these two parameters. Following the manual example we did above, you can ask for the multiple of sigma to be 3 and the area to be 25 arcsec$^2$: $ astmkcatalog r_detected.fits -hDETECTIONS --zeropoint=22.5 \ --output=sbl.fits --sfmagarea=25 --sfmagnsigma=3 \ --forcereadstd --ids $ astfits sbl.fits -h1 | awk '/^SBLMAG /{print $3}' 26.02296 You see that the value is identical to the custom surface brightness limiting magnitude we measured above (a difference of $0.00114$ magnitudes is negligible and hundreds of times larger than the typical errors in the zero point magnitude or magnitude measurements). But it is much more easier to have MakeCatalog do this measurement, because these values will be appended (as keywords) into your final catalog of objects within that image. *Custom STD for MakeCatalog's Surface brightness limit:* You can manually change/set the value of the ‘MEDSTD’ keyword in your input STD image with *note Fits::: $ std=$(aststatistics masked.fits --sigclip-std) $ astfits noisechisel.fits -hSKY_STD --update=MEDSTD,$std With this change, MakeCatalog will use your custom standard deviation for the surface brightness limit. This is necessary in scenarios where your image has multiple depths and during your masking, you also mask the shallow regions (as well as the detections of course). We have successfully measured the image's $3\sigma$ surface brightness limiting magnitude over 25 arcsec$^2$. However, as discussed in *note Quantifying measurement limits:: this value is just an extrapolation of the per-pixel standard deviation. Issues like correlated noise will cause the real noise over a large area to be different. So for a more robust measurement, let's use the upper-limit magnitude of similarly sized region. For more on the upper-limit magnitude, see the respective item in *note Quantifying measurement limits::. In summary, the upper-limit measurements involve randomly placing the footprint of an object in undetected parts of the image many times. This results in a random distribution of brightness measurements, the standard deviation of that distribution is then converted into magnitudes. To be comparable with the results above, let's make a circular aperture that has an area of 25 arcsec$^2$ (thus with a radius of $2.82095$ arcsec). zeropoint=22.5 r_arcsec=2.82095 ## Convert the radius (in arcseconds) to pixels. r_pixel=$(astfits r_detected.fits --pixelscale -q \ | awk '{print '$r_arcsec'/($1*3600)}') ## Make circular aperture at pixel (100,100) position is irrelevant. echo "1 100 100 5 $r_pixel 0 0 1 1 1" \ | astmkprof --background=r_detected.fits \ --clearcanvas --mforflatpix --type=uint8 \ --output=lab.fits ## Do the upper-limit measurement, ignoring all NoiseChisel's ## detections as a mask for the upper-limit measurements. astmkcatalog lab.fits -h1 --zeropoint=$zeropoint -osbl.fits \ --sfmagarea=25 --sfmagnsigma=3 --forcereadstd \ --valuesfile=r_detected.fits --valueshdu=INPUT-NO-SKY \ --upmaskfile=r_detected.fits --upmaskhdu=DETECTIONS \ --upnsigma=3 --checkuplim=1 --upnum=1000 \ --ids --upperlimit-sb The ‘sbl.fits’ catalog now contains the upper-limit surface brightness for a circle with an area of 25 arcsec$^2$. You can check the value with the command below, but the great thing is that now you have both of the surface brightness limiting magnitude in the headers discussed above, and the upper-limit surface brightness within the table. You can also add more profiles with different shapes and sizes if necessary. Of course, you can also use ‘--upperlimit-sb’ in your actual science objects and clumps to get an object-specific or clump-specific value. $ asttable sbl.fits -cUPPERLIMIT_SB 25.9119 You will get a slightly different value from the command above. In fact, if you run the MakeCatalog command again and look at the measured upper-limit surface brightness, it will be slightly different with your first trial! Please try exactly the same MakeCatalog command above a few times to see how it changes. This is because of the _random_ factor in the upper-limit measurements: every time you run it, different random points will be checked, resulting in a slightly different distribution. You can decrease the random scatter by increasing the number of random checks (for example, setting ‘--upnum=100000’, compared to 1000 in the command above). But this will be slower and the results will not be exactly reproducible. The only way to ensure you get an identical result later is to fix the random number generator function and seed like the command below(3). This is a very important point regarding any statistical process involving random numbers, please see *note Generating random numbers::. export GSL_RNG_TYPE=ranlxs1 export GSL_RNG_SEED=1616493518 astmkcatalog lab.fits -h1 --zeropoint=$zeropoint -osbl.fits \ --sfmagarea=25 --sfmagnsigma=3 --forcereadstd \ --valuesfile=r_detected.fits --valueshdu=INPUT-NO-SKY \ --upmaskfile=r_detected.fits --upmaskhdu=DETECTIONS \ --upnsigma=3 --checkuplim=1 --upnum=1000 \ --ids --upperlimit-sb --envseed But where do all the random apertures of the upper-limit measurement fall on the image? It is good to actually inspect their location to get a better understanding for the process and also detect possible bugs/biases. When MakeCatalog is run with the ‘--checkuplim’ option, it will print all the random locations and their measured brightness as a table in a file with the suffix ‘_upcheck.fits’. With the first command below you can use Gnuastro's ‘asttable’ and ‘astscript-ds9-region’ to convert the successful aperture locations into a DS9 region file, and with the second can load the region file into the detections and sky-subtracted image to visually see where they are. ## Create a DS9 region file from the check table (activated ## with '--checkuplim') asttable lab_upcheck.fits --noblank=RANDOM_SUM \ | astscript-ds9-region -c1,2 --mode=img \ --radius=$r_pixel ## Have a look at the regions in relation with NoiseChisel's ## detections. ds9 r_detected.fits[INPUT-NO-SKY] -regions load ds9.reg ds9 r_detected.fits[DETECTIONS] -regions load ds9.reg In this example, we were looking at a single-exposure image that has no correlated noise. Because of this, the surface brightness limit and the upper-limit surface brightness are very close. They will have a bigger difference on deep datasets with stronger correlated noise (that are the result of stacking many individual exposures). As an exercise, please try measuring the upper-limit surface brightness level and surface brightness limit for the deep HST data that we used in the previous tutorial (*note General program usage tutorial::). ---------- Footnotes ---------- (1) Recall that NoiseChisel's output is a binary image: 0-valued pixels are noise and 1-valued pixel are signal. NoiseChisel does not identify sub-structure over the signal, this is the job of Segment, see *note Extract clumps and objects::. (2) From <https://www.sdss.org/dr12/algorithms/magnitudes> (3) You can use any integer for the seed. One recommendation is to run MakeCatalog without ‘--envseed’ once and use the randomly generated seed that is printed on the terminal.  File: gnuastro.info, Node: Achieved surface brightness level, Next: Extract clumps and objects, Prev: Image surface brightness limit, Up: Detecting large extended targets 2.2.5 Achieved surface brightness level --------------------------------------- In *note NoiseChisel optimization:: we customized NoiseChisel for a single-exposure SDSS image of the M51 group and in *note Image surface brightness limit:: we measured the surface brightness limit and the upper-limit surface brightness level (which are both measures of the noise level). In this section, let's do some measurements on the outer-most edges of the M51 group to see how they relate to the noise measurements found in the previous section. For this measurement, we will need to estimate the average flux on the outer edges of the detection. Fortunately all this can be done with a few simple commands using *note Arithmetic:: and *note MakeCatalog::. First, let's separate each detected region, or give a unique label/counter to all the connected pixels of NoiseChisel's detection map with the command below. Recall that with the ‘set-’ operator, the popped operand will be given a name (‘det’ in this case) for easy usage later. $ astarithmetic r_detected.fits -hDETECTIONS set-det \ det 2 connected-components -olabeled.fits You can find the label of the main galaxy visually (by opening the image and hovering your mouse over the M51 group's label). But to have a little more fun, let's do this automatically (which is necessary in a general scenario). The M51 group detection is by far the largest detection in this image, this allows us to find its ID/label easily. We will first run MakeCatalog to find the area of all the labels, then we will use Table to find the ID of the largest object and keep it as a shell variable (‘id’): # Run MakeCatalog to find the area of each label. $ astmkcatalog labeled.fits --ids --geo-area -h1 -ocat.fits ## Sort the table by the area column. $ asttable cat.fits --sort=AREA_FULL ## The largest object, is the last one, so we will use '--tail'. $ asttable cat.fits --sort=AREA_FULL --tail=1 ## We only want the ID, so let's only ask for that column: $ asttable cat.fits --sort=AREA_FULL --tail=1 --column=OBJ_ID ## Now, let's put this result in a variable (instead of printing) $ id=$(asttable cat.fits --sort=AREA_FULL --tail=1 --column=OBJ_ID) ## Just to confirm everything is fine. $ echo $id We can now use the ‘id’ variable to reject all other detections: $ astarithmetic labeled.fits $id eq -oonly-m51.fits Open the image and have a look. To separate the outer edges of the detections, we will need to "erode" the M51 group detection. So in the same Arithmetic command as above, we will erode three times (to have more pixels and thus less scatter), using a maximum connectivity of 2 (8-connected neighbors). We will then save the output in ‘eroded.fits’. $ astarithmetic labeled.fits $id eq 2 erode 2 erode 2 erode \ -oeroded.fits In ‘labeled.fits’, we can now set all the 1-valued pixels of ‘eroded.fits’ to 0 using Arithmetic's ‘where’ operator added to the previous command. We will need the pixels of the M51 group in ‘labeled.fits’ two times: once to do the erosion, another time to find the outer pixel layer. To do this (and be efficient and more readable) we will use the ‘set-i’ operator (to give this image the name '‘i’'). In this way we can use it any number of times afterwards, while only reading it from disk and finding M51's pixels once. $ astarithmetic labeled.fits $id eq set-i i \ i 2 erode 2 erode 2 erode 0 where -oedge.fits Open the image and have a look. You'll see that the detected edge of the M51 group is now clearly visible. You can use ‘edge.fits’ to mark (set to blank) this boundary on the input image and get a visual feeling of how far it extends: $ astarithmetic r.fits -h0 edge.fits nan where -oedge-masked.fits To quantify how deep we have detected the low-surface brightness regions (in units of signal to-noise ratio), we will use the command below. In short it just divides all the non-zero pixels of ‘edge.fits’ in the Sky subtracted input (first extension of NoiseChisel's output) by the pixel standard deviation of the same pixel. This will give us a signal-to-noise ratio image. The mean value of this image shows the level of surface brightness that we have achieved. You can also break the command below into multiple calls to Arithmetic and create temporary files to understand it better. However, if you have a look at *note Reverse polish notation:: and *note Arithmetic operators::, you should be able to easily understand what your computer does when you run this command(1). $ astarithmetic edge.fits -h1 set-edge \ r_detected.fits -hSKY_STD set-skystd \ r_detected.fits -hINPUT-NO-SKY set-skysub \ skysub skystd / edge not nan where meanvalue --quiet We have thus detected the wings of the M51 group down to roughly 1/3rd of the noise level in this image which is a very good achievement! But the per-pixel S/N is a relative measurement. Let's also measure the depth of our detection in absolute surface brightness units; or magnitudes per square arc-seconds (see *note Brightness flux magnitude::). We will also ask for the S/N and magnitude of the full edge we have defined. Fortunately doing this is very easy with Gnuastro's MakeCatalog: $ astmkcatalog edge.fits -h1 --valuesfile=r_detected.fits \ --zeropoint=22.5 --ids --sb --sn --magnitude $ asttable edge_cat.fits 1 25.6971 55.2406 15.8994 We have thus reached an outer surface brightness of $25.70$ magnitudes/arcsec$^2$ (second column in ‘edge_cat.fits’) on this single exposure SDSS image! This is very similar to the surface brightness limit measured in *note Image surface brightness limit:: (which is a big achievement!). But another point in the result above is very interesting: the total S/N of the edge is $55.24$ with a total edge magnitude(2) of 15.90!!! This is very large for such a faint signal (recall that the mean S/N per pixel was 0.32) and shows a very important point in the study of galaxies: While the per-pixel signal in their outer edges may be very faint (and invisible to the eye in noise), a lot of signal hides deeply buried in the noise. In interpreting this value, you should just have in mind that NoiseChisel works based on the contiguity of signal in the pixels. Therefore the larger the object, the deeper NoiseChisel can carve it out of the noise (for the same outer surface brightness). In other words, this reported depth, is the depth we have reached for this object in this dataset, processed with this particular NoiseChisel configuration. If the M51 group in this image was larger/smaller than this (the field of view was smaller/larger), or if the image was from a different instrument, or if we had used a different configuration, we would go deeper/shallower. ---------- Footnotes ---------- (1) ‘edge.fits’ (extension ‘1’) is a binary (0 or 1 valued) image. Applying the ‘not’ operator on it, just flips all its pixels (from ‘0’ to ‘1’ and vice-versa). Using the ‘where’ operator, we are then setting all the newly 1-valued pixels (pixels that are not on the edge) to NaN/blank in the sky-subtracted input image (‘r_detected.fits’, extension ‘INPUT-NO-SKY’, which we call ‘skysub’). We are then dividing all the non-blank pixels (only those on the edge) by the sky standard deviation (‘r_detected.fits’, extension ‘SKY_STD’, which we called ‘skystd’). This gives the signal-to-noise ratio (S/N) for each of the pixels on the boundary. Finally, with the ‘meanvalue’ operator, we are taking the mean value of all the non-blank pixels and reporting that as a single number. (2) You can run MakeCatalog on ‘only-m51.fits’ instead of ‘edge.fits’ to see the full magnitude of the M51 group in this image.  File: gnuastro.info, Node: Extract clumps and objects, Prev: Achieved surface brightness level, Up: Detecting large extended targets 2.2.6 Extract clumps and objects (Segmentation) ----------------------------------------------- In *note NoiseChisel optimization:: we found a good detection map over the image, so pixels harboring signal have been differentiated from those that do not. For noise-related measurements like the surface brightness limit, this is fine. However, after finding the pixels with signal, you are most likely interested in knowing the sub-structure within them. For example, how many star forming regions (those bright dots along the spiral arms) of M51 are within this image? What are the colors of each of these star forming regions? In the outer most wings of M51, which pixels belong to background galaxies and foreground stars? And many more similar questions. To address these questions, you can use *note Segment:: to identify all the "clumps" and "objects" over the detection. $ astsegment r_detected.fits --output=r_segmented.fits $ ds9 -mecube r_segmented.fits -cmap sls -zoom to fit -scale limits 0 2 Open the output ‘r_segmented.fits’ as a multi-extension data cube with the second command above and flip through the first and second extensions, zoom-in to the spiral arms of M51 and see the detected clumps (all pixels with a value larger than 1 in the second extension). To optimize the parameters and make sure you have detected what you wanted, we recommend to visually inspect the detected clumps on the input image. For visual inspection, you can make a simple shell script like below. It will first call MakeCatalog to estimate the positions of the clumps, then make an SAO DS9 region file and open ds9 with the image and region file. Recall that in a shell script, the numeric variables (like ‘$1’, ‘$2’, and ‘$3’ in the example below) represent the arguments given to the script. But when used in the AWK arguments, they refer to column numbers. To create the shell script, using your favorite text editor, put the contents below into a file called ‘check-clumps.sh’. Recall that everything after a ‘#’ is just comments to help you understand the command (so read them!). Also note that if you are copying from the PDF version of this book, fix the single quotes in the AWK command. #! /bin/bash set -e # Stop execution when there is an error. set -u # Stop execution when a variable is not initialized. # Run MakeCatalog to write the coordinates into a FITS table. # Default output is `$1_cat.fits'. astmkcatalog $1.fits --clumpscat --ids --ra --dec # Use Gnuastro's Table and astscript-ds9-region to build the DS9 # region file (a circle of radius 1 arcseconds on each point). asttable $1"_cat.fits" -hCLUMPS -cRA,DEC \ | astscript-ds9-region -c1,2 --mode=wcs --radius=1 \ --output=$1.reg # Show the image (with the requested color scale) and the region file. ds9 -geometry 1800x3000 -mecube $1.fits -zoom to fit \ -scale limits $2 $3 -regions load all $1.reg # Clean up (delete intermediate files). rm $1"_cat.fits" $1.reg Finally, you just have to activate the script's executable flag with the command below. This will enable you to directly/easily call the script as a command. $ chmod +x check-clumps.sh This script does not expect the ‘.fits’ suffix of the input's filename as the first argument. Because the script produces intermediate files (a catalog and DS9 region file, which are later deleted). However, we do not want multiple instances of the script (on different files in the same directory) to collide (read/write to the same intermediate files). Therefore, we have used suffixes added to the input's name to identify the intermediate files. Note how all the ‘$1’ instances in the commands (not within the AWK command(1)) are followed by a suffix. If you want to keep the intermediate files, put a ‘#’ at the start of the last line. The few, but high-valued, bright pixels in the central parts of the galaxies can hinder easy visual inspection of the fainter parts of the image. With the second and third arguments to this script, you can set the numerical values of the color map (first is minimum/black, second is maximum/white). You can call this script with any(2) output of Segment (when ‘--rawoutput’ is _not_ used) with a command like this: $ ./check-clumps.sh r_segmented -0.1 2 Go ahead and run this command. You will see the intermediate processing being done and finally it opens SAO DS9 for you with the regions superimposed on all the extensions of Segment's output. The script will only finish (and give you control of the command-line) when you close DS9. If you need your access to the command-line before closing DS9, add a ‘&’ after the end of the command above. While DS9 is open, slide the dynamic range (values for black and white, or minimum/maximum values in different color schemes) and zoom into various regions of the M51 group to see if you are satisfied with the detected clumps. Do not forget that through the "Cube" window that is opened along with DS9, you can flip through the extensions and see the actual clumps also. The questions you should be asking yourself are these: 1) Which real clumps (as you visually _feel_) have been missed? In other words, is the _completeness_ good? 2) Are there any clumps which you _feel_ are false? In other words, is the _purity_ good? Note that completeness and purity are not independent of each other, they are anti-correlated: the higher your purity, the lower your completeness and vice-versa. You can see this by playing with the purity level using the ‘--snquant’ option. Run Segment as shown above again with ‘-P’ and see its default value. Then increase/decrease it for higher/lower purity and check the result as before. You will see that if you want the best purity, you have to sacrifice completeness and vice versa. One interesting region to inspect in this image is the many bright peaks around the central parts of M51. Zoom into that region and inspect how many of them have actually been detected as true clumps. Do you have a good balance between completeness and purity? Also look out far into the wings of the group and inspect the completeness and purity there. An easier way to inspect completeness (and only completeness) is to mask all the pixels detected as clumps and visually inspecting the rest of the pixels. You can do this using Arithmetic in a command like below. For easy reading of the command, we will define the shell variable ‘i’ for the image name and save the output in ‘masked.fits’. $ in="r_segmented.fits -hINPUT-NO-SKY" $ clumps="r_segmented.fits -hCLUMPS" $ astarithmetic $in $clumps 0 gt nan where -oclumps-masked.fits Inspecting ‘clumps-masked.fits’, you can see some very diffuse peaks that have been missed, especially as you go farther away from the group center and into the diffuse wings. This is due to the fact that with this configuration, we have focused more on the sharper clumps. To put the focus more on diffuse clumps, you can use a wider convolution kernel. Using a larger kernel can also help in detecting the existing clumps to fainter levels (thus better separating them from the surrounding diffuse signal). You can make any kernel easily using the ‘--kernel’ option in *note MakeProfiles::. But note that a larger kernel is also going to wash-out many of the sharp/small clumps close to the center of M51 and also some smaller peaks on the wings. Please continue playing with Segment's configuration to obtain a more complete result (while keeping reasonable purity). We will finish the discussion on finding true clumps at this point. The properties of the clumps within M51, or the background objects can then easily be measured using *note MakeCatalog::. To measure the properties of the background objects (detected as clumps over the diffuse region), you should not mask the diffuse region. When measuring clump properties with *note MakeCatalog:: and using the ‘--clumpscat’, the ambient flux (from the diffuse region) is calculated and subtracted. If the diffuse region is masked, its effect on the clump brightness cannot be calculated and subtracted. To keep this tutorial short, we will stop here. See *note Segmentation and making a catalog:: and *note Segment:: for more on using Segment, producing catalogs with MakeCatalog and using those catalogs. ---------- Footnotes ---------- (1) In AWK, ‘$1’ refers to the first column, while in the shell script, it refers to the first argument. (2) Some modifications are necessary based on the input dataset: depending on the dynamic range, you have to adjust the second and third arguments. But more importantly, depending on the dataset's world coordinate system, you have to change the region ‘width’, in the AWK command. Otherwise the circle regions can be too small/large.  File: gnuastro.info, Node: Building the extended PSF, Next: Sufi simulates a detection, Prev: Detecting large extended targets, Up: Tutorials 2.3 Building the extended PSF ============================= Deriving the extended PSF of an image is very important in many aspects of the analysis of the objects within it. Gnuastro has a set of installed scripts, designed to simplify the process following the recipe of Infante-Sainz et al. 2020 (https://arxiv.org/abs/1911.01430); for more, see *note PSF construction and subtraction::. An overview of the process is given in *note Overview of the PSF scripts::. * Menu: * Preparing input for extended PSF:: Which stars should be used? * Saturated pixels and Segment's clumps:: Saturation is a major hurdle! * One object for the whole detection:: Avoiding over-segmentation in objects. * Building outer part of PSF:: Building the outermost PSF wings. * Inner part of the PSF:: Going towards the PSF center. * Uniting the different PSF components:: Merging all the components into one PSF. * Subtracting the PSF:: Having the PSF, we now want to subtract it.  File: gnuastro.info, Node: Preparing input for extended PSF, Next: Saturated pixels and Segment's clumps, Prev: Building the extended PSF, Up: Building the extended PSF 2.3.1 Preparing input for extended PSF -------------------------------------- We will use an image of the M51 galaxy group in the r (SDSS) band of the Javalambre Photometric Local Universe Survey (J-PLUS) to extract its extended PSF. For more information on J-PLUS, and its unique features visit: <http://www.j-plus.es>. First, let's download the image from the J-PLUS web page using ‘wget’. But to have a generalize-able, and easy to read command, we will define some base variables (in all-caps) first. After the download is complete, open the image with SAO DS9 (or any other FITS viewer you prefer!) to have a feeling of the data (and of course, enjoy the beauty of M51 in such a wide field of view): $ urlend="jplus-dr2/get_fits?id=67510" $ urlbase="http://archive.cefca.es/catalogues/vo/siap/" $ mkdir jplus-dr2 $ wget $urlbase$urlend -O jplus-dr2/67510.fits.fz $ astscript-fits-view jplus-dr2/67510.fits.fz After enjoying the large field of view, have a closer look at the edges of the image. Please zoom in to the corners. You will see that on the edges, the pixel values are either zero or with significantly different values than the main body of the image. This is due to the dithering pattern that was used to make this image and happens in all imaging surveys(1). To avoid potential issues or problems that these regions may cause, we will first crop out the main body of the image with the command below. To keep the top-level directory clean, let's also put the crop in a directory called ‘flat’. $ mkdir flat $ astcrop jplus-dr2/67510.fits.fz --section=225:9275,150:9350 \ --mode=img -oflat/67510.fits $ astscript-fits-view flat/67510.fits Please zoom into the edges again, you will see that they now have the same noise-level as the rest of the image (the problematic parts are now gone). ---------- Footnotes ---------- (1) Recall the cropping in a previous tutorial for a similar reason (varying "depth" across the image): *note Dataset inspection and cropping::.  File: gnuastro.info, Node: Saturated pixels and Segment's clumps, Next: One object for the whole detection, Prev: Preparing input for extended PSF, Up: Building the extended PSF 2.3.2 Saturated pixels and Segment's clumps ------------------------------------------- A constant-depth (flat) image was created in the previous section (*note Preparing input for extended PSF::). As explained in *note Overview of the PSF scripts::, an important step when building the PSF is to mask other sources in the image. Therefore, before going onto selecting stars, let's detect all significant signal, and identify the clumps of background objects over the wings of the extended PSF. There is a problem however: the saturated pixels of the bright stars are going to cause problems in the segmentation phase. To see this problem, let's make a $1000\times1000$ crop around a bright star to speed up the test (and its solution). Afterwards we will apply the solution to the whole image. $ astcrop flat/67510.fits --mode=wcs --widthinpix --width=1000 \ --center=203.3916736,46.7968652 --output=saturated.fits $ astnoisechisel saturated.fits --output=sat-nc.fits $ astsegment sat-nc.fits --output=sat-seg.fits $ astscript-fits-view sat-seg.fits Have a look at the ‘CLUMPS’ extension. You will see that instead of a single clump at the center of the bright star, we have many clumps! This has happened because of the saturated pixels! When saturation occurs, the sharp peak of the profile is lost (like cutting off the tip of a mountain to build a telescope!) and all saturated pixels get a noisy value close to the saturation level. To see this saturation noise run the last command again and in SAO DS9, set the "Scale" to "min max" and zoom into the center. You will see the noisy saturation pixels at the center of the star in red. This noise-at-the-peak disrupts Segment's assumption to expand clumps from a local maxima: each noisy peak is being treated as a separate local maxima and thus a separate clump. For more on how Segment defines clumps, see Section 3.2.1 and Figure 8 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). To have the center identified as a single clump, we should mask these saturated pixels in a way that suites Segment's non-parametric methodology. First we need to find the saturation level! The saturation level is usually fixed for any survey or input data that you receive from a certain database, so you will usually have to do this only once (the first time you get data from that database). Let's make a smaller crop of $50\times50$ pixels around the star with the first command below. With the next command, please look at the crop with DS9 to visually understand the problem. You will see the saturated pixels as the noisy red pixels in the center of the image. A non-saturated star will have a single pixel as the maximum and will not have such a large area covered by a noisy constant value (find a few stars in the image and see for yourself). Visual and qualitative inspection of the process is very important for understanding the solution. $ astcrop saturated.fits --mode=wcs --widthinpix --width=50 \ --center=203.3916736,46.7968652 --output=sat-center.fits $ astscript-fits-view sat-center.fits --ds9scale=minmax To quantitatively identify the saturation level in this image, let's have a look at the distribution of pixels with a value larger than 100 (above the noise level): $ aststatistics sat-center.fits --greaterequal=100 Histogram: |* |* |* |* |* * |** * |*** ** |**** ** |****** **** |********** * * * ****** |************************* ************ * *** ******* *** ************ |---------------------------------------------------------------------- The peak you see in the right end (larger values) of the histogram shows the saturated pixels (a constant level, with some scatter due to the large Poisson noise). If there was no saturation, the number of pixels should have decreased at increasing values; until reaching the maximum value of the profile in one pixel. But that is not the case here. Please try this experiment on a non-saturated (fainter) star to see what we mean. If you still have not experimented on a non-saturated star, please stop reading this tutorial! Please open ‘flat/67510.fits’ in DS9, select a fainter/smaller star and repeat the last three commands (with a different center). After you have confirmed the point above (visually, and with the histogram), please continue with the rest of this tutorial. Finding the saturation level is easy with Statistics (by using the ‘--lessthan’ option until the histogram becomes as expected: only decreasing). First, let's try ‘--lessthan=3000’: $ aststatistics sat-center.fits --greaterequal=100 --lessthan=3000 ------- Histogram: |* |* |* |* |* |** |*** * |**** * |******* ** |*********** * * * * * * * **** |************************* * ***** ******* ***** ** ***** * ******** |---------------------------------------------------------------------- We still see an increase in the histogram around 3000. Let's try a threshold of 2500: $ aststatistics sat-center.fits --greaterequal=100 --lessthan=2500 ------- Histogram: |* |* |** |** |** |** |**** |***** |********* |************* * * * * |********************************* ** ** ** *** ** * **** ** ***** |---------------------------------------------------------------------- The peak at the large end of the histogram has gone! But let's have a closer look at the values (the resolution of an ASCII histogram is limited!). To do this, we will ask Statistics to save the histogram into a table with the ‘--histogram’ option, then look at the last 20 rows: $ aststatistics sat-center.fits --greaterequal=100 --lessthan=2500 \ --histogram --output=sat-center-hist.fits $ asttable sat-center-hist.fits --tail=20 2021.1849112701 1 2045.0495397186 0 2068.9141681671 1 2092.7787966156 1 2116.6434250641 0 2140.5080535126 0 2164.3726819611 0 2188.2373104095 0 2212.101938858 1 2235.9665673065 1 2259.831195755 2 2283.6958242035 0 2307.560452652 0 2331.4250811005 1 2355.289709549 1 2379.1543379974 1 2403.0189664459 2 2426.8835948944 1 2450.7482233429 2 2474.6128517914 2 Since the number of points at the extreme end are increasing (from 1 to 2), We therefore see that a value 2500 is still above the saturation level (the number of pixels has started to increase)! A more reasonable saturation level for this image would be 2200! As an exercise, you can try automating this selection with AWK. Therefore, we can set the saturation level in this image(1) to be 2200. Let's mask all such pixels with the command below: $ astarithmetic saturated.fits set-i i i 2200 gt nan where \ --output=sat-masked.fits $ astscript-fits-view sat-masked.fits --ds9scale=minmax Please see the peaks of several bright stars, not just the central very bright star. Zoom into each of the peaks you see. Besides the central very bright one that we were looking at closely until now, only one other star is saturated (its center is NaN, or Not-a-Number). Try to find it. But we are not done yet! Please zoom-in to that central bright star and have another look on the edges of the vertical "bleeding" saturated pixels, there are strong positive/negative values touching it (almost like "waves"). These will also cause problems and have to be masked! So with a small addition to the previous command, let's dilate the saturated regions (with 2-connectivity, or 8-connected neighbors) four times and have another look: $ astarithmetic saturated.fits set-i i i 2200 gt \ 2 dilate 2 dilate 2 dilate 2 dilate \ nan where --output=sat-masked.fits $ astscript-fits-view sat-masked.fits --ds9scale=minmax Now that saturated pixels (and their problematic neighbors) have been masked, we can convolve the image (recall that Segment will use the convolved image for identifying clumps) with the command below. However, we will use the Spatial Domain convolution which can account for blank pixels (for more on the pros and cons of spatial and frequency domain convolution, see *note Spatial vs. Frequency domain::). We will also create a Gaussian kernel with $\rm{FWHM}=2$ pixels, truncated at $5\times\rm{FWHM}$. $ astmkprof --kernel=gaussian,2,5 --oversample=1 -okernel.fits $ astconvolve sat-masked.fits --kernel=kernel.fits --domain=spatial \ --output=sat-masked-conv.fits $ astscript-fits-view sat-masked-conv.fits --ds9scale=minmax Please zoom-in to the star and look closely to see how after spatial-domain convolution, the problematic pixels are still NaN. But Segment requires the profile to start with a maximum value and decrease. So before feeding into Segment, let's fill the blank values with the maximum value of the neighboring pixels in both the input and convolved images (see *note Interpolation operators::): $ astarithmetic sat-masked.fits 2 interpolate-maxofregion \ --output=sat-fill.fits $ astarithmetic sat-masked-conv.fits 2 interpolate-maxofregion \ --output=sat-fill-conv.fits $ astscript-fits-view sat-fill* --ds9scale=minmax Have a closer look at the opened images. Please zoom-in (you will notice that they are already matched and locked, so they will both zoom-in together). Go to the centers of the saturated stars and confirm how they are filled with the largest non-blank pixel. We can now feed this image to NoiseChisel and Segment as the convolved image: $ astnoisechisel sat-fill.fits --convolved=sat-fill-conv.fits \ --output=sat-nc.fits $ astsegment sat-nc.fits --convolved=sat-fill-conv.fits \ --output=sat-seg.fits --rawoutput $ ds9 -mecube sat-seg.fits -zoom to fit -scale limits -1 1 See the ‘CLUMPS’ extension. Do you see how the whole center of the star has indeed been identified as a single clump? We thus achieved our aim and did not let the saturated pixels harm the identification of the center! If the issue was only clumps (like in a normal deep image processing), this was the end of Segment's special considerations. However, in the scenario here, with the very extended wings of the bright stars, it usually happens that background objects become "clumps" in the outskirts and will rip the bright star outskirts into separate "objects". In the next section (*note One object for the whole detection::), we will describe how you can modify Segment to avoid this issue. ---------- Footnotes ---------- (1) In raw exposures, this value is usually around 65000 (close to $2^{16}$, since most CCDs have 16-bit pixels; see *note Numeric data types::). But that is not the case here, because this is a processed/stacked image that has been calibrated.  File: gnuastro.info, Node: One object for the whole detection, Next: Building outer part of PSF, Prev: Saturated pixels and Segment's clumps, Up: Building the extended PSF 2.3.3 One object for the whole detection ---------------------------------------- In *note Saturated pixels and Segment's clumps::, we described how you can run Segment such that saturated pixels do not interfere with its clumps. However, due to the very extended wings of the PSF, the default definition of "objects" should also be modified for the scenario here. To better see the problem, let's inspect now the ‘OBJECTS’ extension, focusing on those objects with a label between 50 to 150 (which include the main star): $ astscript-fits-view sat-seg.fits -hOBJECTS --ds9scale="limits 50 150" We can see that the detection corresponding to the star has been broken into different objects. This is not a good object segmentation image for our scenario here. Since those objects in the outer wings of the bright star's detection harbor a lot of the extended PSF. We want to keep them with the same "object" label as the star (we only need to mask the "clumps" of the background sources). To do this, we will make the following changes to Segment's options (see *note Segmentation options:: for more on this options): • Since we want the extended diffuse flux of the PSF to be taken as a single object, we want all the grown clumps to touch. Therefore, it is necessary to decrease ‘--gthresh’ to very low values, like $-10$. Recall that its value is in units of the input standard deviation, so ‘--gthresh=-10’ corresponds to $-10\sigma$. The default value is not for such extended sources that dominate all background sources. • Since we want all connected grown clumps to be counted as a single object in any case, we will set ‘--objbordersn=0’ (its smallest possible value). Let's make these changes and check if the star has been kept as a single object in the ‘OBJECTS’ extension or not: $ astsegment sat-nc.fits --convolved=sat-fill-conv.fits \ --gthresh=-10 --objbordersn=0 \ --output=sat-seg.fits --rawoutput $ astscript-fits-view sat-seg.fits -hOBJECTS --ds9scale="limits 50 150" Now we can extend these same steps to the whole image. To detect signal, we can run NoiseChisel using the command below. We modified the default value to two of the options, below you can see the reason for these changes. See *note Detecting large extended targets:: for more on optimizing NoiseChisel. • Since the image is so large, we have increased ‘--outliernumngb’ to get better outlier statistics on the tiles. The default value is primarily for small images, so this is usually the first thing you should do when running NoiseChisel on a real/large image. • Since the image is not too deep (made from few exposures), it does not have strong correlated noise, so we will decrease ‘--detgrowquant’ and increase ‘--detgrowmaxholesize’ to better extract signal. Furthermore, since both NoiseChisel and Segment need a convolved image, we will do the convolution before and feed it to both (to save running time). But in the first command below, let's delete all the temporary files we made above. Since the image is large (+300 MB), to avoid wasting storage, any temporary file that is no longer necessary for later processing is deleted after it is used. You can visually check each of them with DS9 before deleting them (or not delete them at all!). Generally, within a pipeline it is best to remove such large temporary files, because space runs out much faster than you think (for example, once you get good results and want to use more fields). $ rm *.fits $ mkdir label $ astmkprof --kernel=gaussian,2,5 --oversample=1 \ -olabel/kernel.fits $ astarithmetic flat/67510.fits set-i i i 2200 gt \ 2 dilate 2 dilate 2 dilate 2 dilate nan where \ --output=label/67510-masked-sat.fits $ astconvolve label/67510-masked-sat.fits --kernel=label/kernel.fits \ --domain=spatial --output=label/67510-masked-conv.fits $ rm label/kernel.fits $ astarithmetic label/67510-masked-sat.fits 2 interpolate-maxofregion \ --output=label/67510-fill.fits $ astarithmetic label/67510-masked-conv.fits 2 interpolate-maxofregion \ --output=label/67510-fill-conv.fits $ rm label/67510-masked-conv.fits $ astnoisechisel label/67510-fill.fits --outliernumngb=100 \ --detgrowquant=0.8 --detgrowmaxholesize=100000 \ --convolved=label/67510-fill-conv.fits \ --output=label/67510-nc.fits $ rm label/67510-fill.fits $ astsegment label/67510-nc.fits --output=label/67510-seg-raw.fits \ --convolved=label/67510-fill-conv.fits --rawoutput \ --gthresh=-10 --objbordersn=0 $ rm label/67510-fill-conv.fits $ astscript-fits-view label/67510-seg-raw.fits We see that the saturated pixels have not caused any problem and the central clumps/objects of bright stars are now a single clump/object. We can now proceed to estimating the outer PSF. But before that, let's make a "standard" segment output: one that can safely be fed into MakeCatalog for measurements and can contain all necessary outputs of this whole process in a single file (as multiple extensions). The main problem is again the saturated pixels: we interpolated them to be the maximum of their nearby pixels. But this will cause problems in any measurement that is done over those regions. To let MakeCatalog know that those pixels should not be used, the first extension of the file given to MakeCatalog should have blank values on those pixels. We will do this with the commands below: ## First HDU of Segment (Sky-subtracted input) $ astarithmetic label/67510-nc.fits -hINPUT-NO-SKY \ label/67510-masked-sat.fits isblank nan where \ --output=label/67510-seg.fits $ astfits label/67510-seg.fits --update=EXTNAME,INPUT-NO-SKY ## Second and third HDUs: CLUMPS and OBJECTS $ astfits label/67510-seg-raw.fits --copy=CLUMPS --copy=OBJECTS \ --output=label/67510-seg.fits ## Fourth HDU: Sky standard deviation (from NoiseChisel): $ astfits label/67510-nc.fits --copy=SKY_STD \ --output=label/67510-seg.fits ## Clean up all the un-necessary files: $ rm label/67510-masked-sat.fits label/67510-nc.fits \ label/67510-seg-raw.fits You can now simply run MakeCatalog on this image and be sure that saturated pixels will not affect the measurements. As one example, you can use MakeCatalog to find the clumps containing saturated pixels: recall that the ‘--area’ column only calculates the area of non-blank pixels, while ‘--geo-area’ calculates the area of the label (independent of their blank-ness in the values image): $ astmkcatalog label/67510-seg.fits --ids --ra --dec --area \ --geo-area --clumpscat --output=cat.fits The information of the clumps that have been affected by saturation can easily be found by selecting those with a differing value in the ‘AREA’ and ‘AREA_FULL’ columns: ## With AWK (second command, counts the number of rows) $ asttable cat.fits -hCLUMPS | awk '$5!=$6' $ asttable cat.fits -hCLUMPS | awk '$5!=$6' | wc -l ## Using Table arithmetic (compared to AWK, you can use column ## names, save as FITS, and be faster): $ asttable cat.fits -hCLUMPS -cRA,DEC --noblankend=3 \ -c'arith AREA AREA AREA_FULL eq nan where' ## Remove the table (which was just for a demo) $ rm cat.fits We are now ready to start building the outer parts of the PSF in *note Building outer part of PSF::.  File: gnuastro.info, Node: Building outer part of PSF, Next: Inner part of the PSF, Prev: One object for the whole detection, Up: Building the extended PSF 2.3.4 Building outer part of PSF -------------------------------- In *note Saturated pixels and Segment's clumps::, and *note One object for the whole detection::, we described how to create a Segment clump and object map, while accounting for saturated stars and not having over-fragmentation of objects in the outskirts of stars. We are now ready to start building the extended PSF. First we will build the outer parts of the PSF, so we want the brightest stars. You will see we have several bright stars in this very large field of view, but we do not yet have a feeling how many they are, and at what magnitudes. So let's use Gnuastro's Query program to find the magnitudes of the brightest stars (those brighter than g-magnitude 10 in Gaia data release 3, or DR3). For more on Query, see *note Query::. $ astquery gaia --dataset=dr3 --overlapwith=flat/67510.fits \ --range=phot_g_mean_mag,-inf,10 \ --output=flat/67510-bright.fits Now, we can easily visualize the magnitude and positions of these stars using ‘astscript-ds9-region’ and the command below (for more on this script, see *note SAO DS9 region files from table::) $ astscript-ds9-region flat/67510-bright.fits -cra,dec \ --namecol=phot_g_mean_mag \ --command="ds9 flat/67510.fits -zoom to fit -zscale" You can see that we have several stars between magnitudes 6 to 10. Let's use ‘astscript-psf-select-stars’ in the command below to select the relevant stars in the image (the brightest; with a magnitude between 6 to 10). The advantage of using this script (instead of a simple ‘--range’ in Table), is that it will also check distances to nearby stars and reject those that are too close (and not good for constructing the PSF). Since we have very bright stars in this very wide-field image, we will also increase the distance to nearby neighbors with brighter or similar magnitudes (the default value is 1 arcmin). To do this, we will set ‘--mindistdeg=0.02’, which corresponds to 1.2 arcmin. The details of the options for this script are discussed in *note Invoking astscript-psf-select-stars::. $ mkdir outer $ astscript-psf-select-stars flat/67510.fits \ --magnituderange=6,10 --mindistdeg=0.02 \ --output=outer/67510-6-10.fits Let's have a look at the selected stars in the image (it is very important to visually check every step when you are first discovering a new dataset). $ astscript-ds9-region outer/67510-6-10.fits -cra,dec \ --namecol=phot_g_mean_mag \ --command="ds9 flat/67510.fits -zoom to fit -zscale" Now that the catalog of good stars is ready, it is time to construct the individual stamps from the catalog above. To create stamps, first, we need to crop a fixed-size box around each isolated star in the catalog. The contaminant objects in the crop should be masked and finally, the fluxes in these cropped images should be normalized. To do these, we will use ‘astscript-psf-stamp’ (for more on this script see *note Invoking astscript-psf-stamp::). One of the most important parameters for this script is the normalization radii ‘--normradii’. This parameter defines a ring for the flux normalization of each star stamp. The normalization of the flux is necessary because each star has a different brightness, and consequently, it is crucial for having all the stamps with the same flux level in the same region. Otherwise the final stack of the different stamps would have no sense. Depending on the PSF shape, internal reflections, ghosts, saturated pixels, and other systematics, it would be necessary to choose the ‘--normradii’ appropriately. The selection of the normalization radii is something that requires a good understanding of the data. To do that, let's use two useful parameters that will help us in the checking of the data: ‘--tmpdir’ and ‘--keeptmp’; • With ‘--tmpdir=checking-normradii’ all temporary files, including the radial profiles, will be save in that directory (instead of an internally-created name). • With ‘--keeptmp’ we will not remove the temporal files, so it is possible to have a look at them (by default the temporary directory gets deleted at the end). It is necessary to specify the ‘--normradii’ even if we do not know yet the final values. Otherwise the script will not generate the radial profile. As a consequence, in this step we put the normalization radii equal to the size of the stamps. By doing this, the script will generate the radial profile of the entire stamp. In this particular step we set it to ‘--normradii=500,510’. We also use the ‘--nocentering’ option to disable sub-pixel warping in this phase (it is only relevant for the central part of the PSF). Furthermore, since there are several stars, we iterate over each row of the catalog using a while loop. $ counter=1 $ mkdir finding-normradii $ asttable outer/67510-6-10.fits \ | while read -r ra dec mag; do astscript-psf-stamp label/67510-seg.fits \ --mode=wcs \ --nocentering \ --center=$ra,$dec \ --normradii=500,510 \ --widthinpix=1000,1000 \ --segment=label/67510-seg.fits \ --output=finding-normradii/$counter.fits \ --tmpdir=finding-normradii --keeptmp; \ counter=$((counter+1)); \ done First let's have a look at all the masked postage stamps of the cropped stars. Once they all open, feel free to zoom-in, they are all matched and locked. It is always good to check the different stamps to ensure the quality and possible two dimensional features that are difficult to detect from the radial profiles (such as ghosts and internal reflections). $ astscript-fits-view finding-normradii/cropped-masked*.fits If everything looks good in the image, let's open all the radial profiles and visually check those with the command below. Note that ‘astscript-fits-view’ calls the ‘topcat’ graphic user interface (GUI) program to visually inspect (plot) tables. If you do not already have it, see *note TOPCAT::. $ astscript-fits-view finding-normradii/rprofile*.fits After some study of this data, we could say that a good normalization ring is those pixels between R=20 and R=30 pixels. Such a ring ensures having a high number of pixels so the estimation of the flux normalization will be robust. Also, at such distance from the center the signal to noise is high and there are not obvious features that can affect the normalization. Note that the profiles are different because we are considering a wide range of magnitudes, so the fainter stars are much more noisy. However, in this tutorial we will keep these stars in order to have a higher number of stars for the outer part. In a real case scenario, we should look for stars with a much more similar brightness (smaller range of magnitudes) to not lose signal to noise as a consequence of the inclusion of fainter stars. $ rm -r finding-normradii $ counter=1 $ mkdir outer/stamps $ asttable outer/67510-6-10.fits \ | while read -r ra dec mag; do astscript-psf-stamp label/67510-seg.fits \ --mode=wcs \ --nocentering \ --center=$ra,$dec \ --normradii=20,30 \ --widthinpix=1000,1000 \ --segment=label/67510-seg.fits \ --output=outer/stamps/67510-$counter.fits; \ counter=$((counter+1)); \ done After the stamps are created, we need to stack them together with a simple Arithmetic command (see *note Stacking operators::). The stack is done using the sigma-clipped mean operator that will preserve more of the signal, while rejecting outliers (more than $3\sigma$ with a tolerance of $0.2$, for more on sigma-clipping see *note Sigma clipping::). Just recall that we need to specify the number of inputs into the stacking operators, so we are reading the list of images and counting them as separate variables before calling Arithmetic. $ numimgs=$(echo outer/stamps/*.fits | wc -w) $ astarithmetic outer/stamps/*.fits $numimgs 3 0.2 sigclip-mean \ -g1 --output=outer/stack.fits --wcsfile=none Did you notice the ‘--wcsfile=none’ option above? With it, the stacked image no longer has any WCS information. This is natural, because the stacked image does not correspond to any specific region of the sky any more. Let's compare this stacked PSF with the images of the individual stars that were used to create it. You can clearly see that the number of masked pixels is significantly decreased and the PSF is much more "cleaner". $ astscript-fits-view outer/stack.fits outer/stamps/*.fits However, the saturation in the center still remains. Also, because we did not have too many images, some regions still are very noisy. If we had more bright stars in our selected magnitude range, we could have filled those outer remaining patches. In a large survey like J-PLUS (that we are using here), you can simply look into other fields that were observed soon before/after the image ID 67510 that we used here (to have a similar PSF) and get more stars in those images to add to these. In fact, the J-PLUS DR2 image ID of the field above was intentionally preserved during the steps above to show how easy it is to use images from other fields and blend them all into the output PSF.  File: gnuastro.info, Node: Inner part of the PSF, Next: Uniting the different PSF components, Prev: Building outer part of PSF, Up: Building the extended PSF 2.3.5 Inner part of the PSF --------------------------- In *note Building outer part of PSF::, we were able to create a stack of the outer-most behavior of the PSF in a J-PLUS survey image. But the central part that was affected by saturation and non-linearity is still remaining, and we still do not have a "complete" PSF! In this section, we will use the same steps before to make stacks of more inner regions of the PSF to ultimately unite them all into a single PSF in *note Uniting the different PSF components::. For the outer PSF, we selected stars in the magnitude range of 6 to 10. So let's have a look and see how many stars we have in the magnitude range of 12 to 13 with a more relaxed condition on the minimum distance for neighbors, ‘--mindistdeg=0.01’ (36 arcsec, since these stars are fainter), and use the ds9 region script to visually inspect them: $ mkdir inner $ astscript-psf-select-stars flat/67510.fits \ --magnituderange=12,13 --mindistdeg=0.01 \ --output=inner/67510-12-13.fits $ astscript-ds9-region inner/67510-12-13.fits -cra,dec \ --namecol=phot_g_mean_mag \ --command="ds9 flat/67510.fits -zoom to fit -zscale" We have 41 stars, but if you zoom into their centers, you will see that they do not have any major bleeding-vertical saturation any more. Only the very central core of some of the stars is saturated. We can therefore use these stars to fill the strong bleeding footprints that were present in the outer stack of ‘outer/stack.fits’. Similar to before, let's build ready-to-stack crops of these stars. To get a better feeling of the normalization radii, follow the same steps of *note Building outer part of PSF:: (setting ‘--tmpdir’ and ‘--keeptmp’). In this case, since the stars are fainter, we can set a smaller size for the individual stamps, ‘--widthinpix=500,500’, to speed up the calculations: $ counter=1 $ mkdir inner/stamps $ asttable inner/67510-12-13.fits \ | while read -r ra dec mag; do astscript-psf-stamp label/67510-seg.fits \ --mode=wcs \ --normradii=5,10 \ --center=$ra,$dec \ --widthinpix=500,500 \ --segment=label/67510-seg.fits \ --output=inner/stamps/67510-$counter.fits; \ counter=$((counter+1)); \ done $ numimgs=$(echo inner/stamps/*.fits | wc -w) $ astarithmetic inner/stamps/*.fits $numimgs 3 0.2 sigclip-mean \ -g1 --output=inner/stack.fits --wcsfile=none $ astscript-fits-view inner/stack.fits inner/stamps/*.fits We are now ready to unite the two stacks we have constructed: the outer and the inner parts.  File: gnuastro.info, Node: Uniting the different PSF components, Next: Subtracting the PSF, Prev: Inner part of the PSF, Up: Building the extended PSF 2.3.6 Uniting the different PSF components ------------------------------------------ In *note Building outer part of PSF:: we built the outer part of the extended PSF and the inner part was built in *note Inner part of the PSF::. The outer part was built with very bright stars, and the inner part using fainter stars to not have saturation in the core of the PSF. The next step is to join these two parts in order to have a single PSF. First of all, let's have a look at the two stacks and also to their radial profiles to have a good feeling of the task. Note that you will need to have TOPCAT to run the last command and plot the radial profile (see *note TOPCAT::). $ astscript-fits-view outer/stack.fits inner/stack.fits $ astscript-radial-profile outer/stack.fits -o outer/profile.fits $ astscript-radial-profile inner/stack.fits -o inner/profile.fits $ astscript-fits-view outer/profile.fits inner/profile.fits From the visual inspection of the images and the radial profiles, it is clear that we have saturation in the center for the outer part. Note that the absolute flux values of the PSFs are meaningless since they depend on the normalization radii we used to obtain them. The uniting step consists in scaling up (or down) the inner part of the PSF to have the same flux at the junction radius, and then, use that flux-scaled inner part to fill the center of the outer PSF. To get a feeling of the process, first, let's open the two radial profiles and find the factor manually first: 1. Run this command to open the two tables in *note TOPCAT::: $ astscript-fits-view outer/profile.fits inner/profile.fits 2. On the left side of the screen, under "Table List", you will see the two imported tables. Click on the first one (profile of the outer part) so it is shown first. 3. Under the "Graphics" menu item, click on "Plane plot". A new window will open with the plot of the first two columns: ‘RADIUS’ on the horizontal axis and ‘MEAN’ on the vertical. The rest of the steps are done in this window. 4. In the bottom settings, within the left panel, click on the "Axes" item. This will allow customization of the plot axes. 5. In the bottom-right panel, click on the box in front of "Y Log" to make the vertical axis logarithmic-scaled. 6. On the "Layers" menu, select "Add Position Control" to allow adding the profile of the inner region. After it, you will see that a new red-blue scatter plot icon opened on the bottom-left menu (with a title of ‘<no table>’). 7. On the bottom-right panel, in the drop-down menu in front of ‘Table:’, select ‘2: profile.fits’. Afterwards, you will see the radial profile of the inner stack as the newly added blue plot. Our goal here is to find the factor that is necessary to multiply with the inner profile so it matches the outer one. 8. On the bottom-right panel, in front of ‘Y:’, you will see ‘MEAN’. Click in the white-space after it, and type this: ‘*100’. This will display the ‘MEAN’ column of the inner profile, after multiplying it by 100. Afterwards, you will see that the inner profile (blue) matches more cleanly with the outer (red); especially in the smaller radii. At larger radii, it does not drop like the red plot. This is because of the extremely low signal-to-noise ratio at those regions in the fainter stars used to make this stack. 9. Take your mouse cursor over the profile, in particular over the bump around a radius of 100 pixels. Scroll your mouse down-ward to zoom-in to the profile and up-ward to zoom-out. You can click-and-hold any part of the profile and if you move your cursor (while still holding the mouse-button) to look at different parts of the profile. This is particular helpful when you have zoomed-in to the profile. 10. Zoom-in to the bump around a radius of 100 pixels until the horizontal axis range becomes around 50 to 130 pixels. 11. You clearly see that the inner stack (blue) is much more noisy than the outer (red) stack. By "noisy", we mean that the scatter of the points is much larger. If you further zoom-out, you will see that the shallow slope at the larger radii of the inner (blue) profile has also affected the height of this bump in the inner profile. This is a _very important_ point: this clearly shows that the inner profile is too noisy at these radii. 12. Click-and-hold your mouse to see the inner parts of the two profiles (in the range 0 to 80). You will see that for radii less than 40 pixels, the inner profile (blue) points loose their scatter (and thus have a good signal-to-noise ratio). 13. Zoom-in to the plot and follow the profiles until smaller radii (for example, 10 pixels). You see that for each radius, the inner (blue) points are consistently above the outer (red) points. This shows that the $\times100$ factor we selected above was too much. 14. In the bottom-right panel, change the ‘100’ to ‘80’ and zoom-in to the same region. At each radius, the blue points are now below the red points, so the scale-factor 80 is not enough. So let's increase it and try ‘90’. After zooming-in, you will notice that in the inner-radii (less than 30 pixels), they are now very similar. The ultimate aim of the steps below is to find this factor automatically. 15. But before continuing, let's focus on another important point about the central regions: non-linearity and saturation. While you are zoomed-in (from the step above), follow (click-and-drag) the profile towards smaller radii. You will see that smaller than a radius of 10, they start to diverge. But this time, the outer (red) profile is getting a shallower slope and diverges significantly from about the radius of 8. We had masked all saturated pixels before, so this divergence for radii smaller than 10 shows the effect of the CCD's non-linearity (where the number of electrons will not be linearly correlated with the number of incident photons). This is present in all CCDs and pixels beyond this level should not be used in measurements (or properly corrected). The items above were only listed so you get a good mental/visual understanding of the logic behind the operation of the next script (and to learn how to tune its parameters where necessary): ‘astscript-psf-scale-factor’. This script is more general than this particular problem, but can be used for this special case also. Its job is to take a model of an object (PSF, or inner stack in this case) and the position of an instance of that model (a star, or the outer stack in this case) in a larger image. Instead of dealing with radial profiles (that enforce a certain shape), this script will put the centers of the inner and outer PSFs over each other and divide the outer by the inner. Let's have a look with the command below. Just note that we are running it with ‘--keeptmp’ so the temporary directory with all the intermediate files remain for further clarification: $ astscript-psf-scale-factor outer/stack.fits \ --psf=inner/stack.fits --center=501,501 \ --mode=img --normradii=10,15 --keeptmp $ astscript-fits-view stack_psfmodelscalefactor/cropped-*.fits \ stack_psfmodelscalefactor/for-factor-*.fits With the second command, you see the four steps of the process: the first two images show the cropped outer and inner stacks (to same width image). The third shows the radial position of each pixel (which is used to only keep the pixels within the desired radial range). The fourth shows the per-pixel division of the outer by the inner within the requested radii. The sigma-clipped median of these pixels is finally reported. Unlike the radial profile method (which averages over a circular/elliptical annulus for each radius), this method imposes no a-priori shape on the PSF. This makes it very useful for complex PSFs (like the case here). To continue, let's remove the temporary directory and re-run the script but with ‘--quiet’ mode so we can put the output in a shell variable. $ rm -r stack_psfmodelscalefactor $ scale=$(astscript-psf-scale-factor outer/stack.fits \ --psf=inner/stack.fits --center=501,501 \ --mode=img --normradii=10,15 --quiet) $ echo $scale Now that we know the scaling factor, we are ready to unite the outer and the inner part of the PSF. To do that, we will use the script ‘astscript-psf-unite’ with the command below (for more on this script, see *note Invoking astscript-psf-unite::). The basic parameters are the inner part of the PSF (given to ‘--inner’), the inner part's scale factor (‘--scale’), and the junction radius (‘--radius’). The inner part is first scaled, and all the pixels of the outer image within the given radius are replaced with the pixels of the inner image. Since the flux factor was computed for a ring of pixels between 10 and 15 pixels, let's set the junction radius to be 12 pixels (roughly in between 10 and 15): $ astscript-psf-unite outer/stack.fits \ --inner=inner/stack.fits --radius=12 \ --scale=$scale --output=psf.fits Let's have a look at the outer stack and the final PSF with the command below. Since we want several other DS9 settings to help you directly see the main point, we are using ‘--ds9extra’. After DS9 is opened, you can see that the center of the PSF has now been nicely filled. You can click on the "Edit" button and then the "Colorbar" and hold your cursor over the image and move it. You can see that besides filling the inner regions nicely, there is also no major discontinuity in the 2D image around the union radius of 12 pixels around the center. $ astscript-fits-view outer/stack.fits psf.fits --ds9scale=minmax \ --ds9extra="-scale limits 0 22000 -match scale" \ --ds9extra="-lock scale yes -zoom 4 -scale log" Nothing demonstrates the effect of a bad analysis than actually seeing a bad result! So let's choose a bad normalization radial range (50 to 60 pixels) and unite the inner and outer parts based on that. The last command will open the two PSFs together in DS9, you should be able to immediately see the discontinuity in the union radius. $ scale=$(astscript-psf-scale-factor outer/stack.fits \ --psf=inner/stack.fits --center=501,501 \ --mode=img --normradii=50,60 --quiet) $ astscript-psf-unite outer/stack.fits \ --inner=inner/stack.fits --radius=55 \ --scale=$scale --output=psf-bad.fits $ astscript-fits-view psf-bad.fits psf.fits --ds9scale=minmax \ --ds9extra="-scale limits 0 50 -match scale" \ --ds9extra="-lock scale yes -zoom 4 -scale log" As you see, the selection of the normalization radii and the unite radius are very important. The first time you are trying to build the PSF of a new dataset, it has to be explored with a visual inspection of the images and radial profiles. Once you have found a good normalization radius for a certain part of the PSF in a survey, you can generally use it comfortably without change. But for a new survey, or a different part of the PSF, be sure to repeat the visual checks above to choose the best radii. As a summary, a good junction radius is one that: • Is large enough to not let saturation and non-linearity (from the outer profile) into the inner region. • Is small enough to have a sufficiently high signal to noise ratio (from the inner profile) to avoid adding noise in the union radius. Now that the complete PSF has been obtained, let's remove that bad-looking PSF, and stick with the nice and clean PSF for the next step in *note Subtracting the PSF::. $ rm -rf psf-bad.fits  File: gnuastro.info, Node: Subtracting the PSF, Prev: Uniting the different PSF components, Up: Building the extended PSF 2.3.7 Subtracting the PSF ------------------------- Previously (in *note Uniting the different PSF components::) we constructed a full PSF, from the central pixel to a radius of 500 pixels. Now, let's use the PSF to subtract the scattered light from each individual star in the image. By construction, the pixel values of the PSF came from the normalization of the individual stamps (that were created for stars of different magnitudes). As a consequence, it is necessary to compute a scale factor to fit that PSF image to each star. This is done with the same ‘astscript-psf-scale-factor’ command that we used previously in *note Uniting the different PSF components::. The difference is that now we are not aiming to join two different PSF parts but looking for the necessary scale factor to match the star with the PSF. Afterwards, we will use ‘astscript-psf-subtract’ for placing the PSF image at the desired coordinates within the same pixel grid as the image. Finally, once the stars have been modeled by the PSF, we will subtract it. First, let's start with a single star. Later, when the basic idea has been explained, we will generalize the method for any number of stars. With the following command we obtain the coordinates (RA and DEC) and magnitude of the brightest star in the image (which is on the top edge of the image): $ mkdir single-star $ center=$(asttable flat/67510-bright.fits --sort phot_g_mean_mag \ --column=ra,dec --head 1 \ | awk '{printf "%s,%s", $1, $2}') $ echo $center With the center position of that star, let's obtain the flux factor using the same normalization ring we used for the creation of the outer part of the PSF: $ scale=$(astscript-psf-scale-factor label/67510-seg.fits \ --mode=wcs --quiet \ --psf=psf.fits \ --center=$center \ --normradii=10,15 \ --segment=label/67510-seg.fits) Now we have all the information necessary to model the star using the PSF: the position on the sky and the flux factor. Let's use this data with the script ‘astscript-psf-subtract’ for modeling this star and have a look with DS9. $ astscript-psf-subtract label/67510-seg.fits \ --mode=wcs \ --psf=psf.fits \ --scale=$scale \ --center=$center \ --output=single-star/subtracted.fits $ astscript-fits-view label/67510-seg.fits single-star/subtracted.fits \ --ds9center=$center --ds9mode=wcs --ds9extra="-zoom 4" You will notice that there is something wrong with this "subtraction"! The box of the extended PSF is clearly visible! The sky noise under the box is clearly larger than the rest of the noise in the image. Before reading on, please try to think about the cause of this yourself. To understand the cause, let's look at the scale factor, the number of stamps used to build the outer part (and its square root): $ echo $scale $ ls outer/stamps/*.fits | wc -l $ ls outer/stamps/*.fits | wc -l | awk '{print sqrt($1)}' You see that the scale is almost 19! As a result, the PSF has been multiplied by 19 before being subtracted. However, the outer part of the PSF was created with only a handful of star stamps. When you stack $N$ images, the stack's signal-to-noise ratio (S/N) improves by $\sqrt{N}$. We had 8 images for the outer part, so the S/N has only improved by a factor of just under 3! When we multiply the final stacked PSF with 19, we are also scaling up the noise by that same factor (most importantly: in the outer most regions where there is almost no signal). So the stacked image's noise-level is $19/3=6.3$ times larger than the noise of the input image. This terrible noise-level is what you clearly see as the footprint of the PSF. To confirm this, let's use the commands below to subtract the faintest of the bright-stars catalog (note the use of ‘--tail’ when finding the central position). You will notice that the scale factor ($\sim1.3$) is now smaller than 3. So when we multiply the PSF with this factor, the PSF's noise level is lower than our input image and we should not see any footprint like before. Note also that we are using a larger zoom factor, because this star is smaller in the image. $ center=$(asttable flat/67510-bright.fits --sort phot_g_mean_mag \ --column=ra,dec --tail 1 \ | awk '{printf "%s,%s", $1, $2}') $ scale=$(astscript-psf-scale-factor label/67510-seg.fits \ --mode=wcs --quiet \ --psf=psf.fits \ --center=$center \ --normradii=10,15 \ --segment=label/67510-seg.fits) $ echo $scale $ astscript-psf-subtract label/67510-seg.fits \ --mode=wcs \ --psf=psf.fits \ --scale=$scale \ --center=$center \ --output=single-star/subtracted.fits $ astscript-fits-view label/67510-seg.fits single-star/subtracted.fits \ --ds9center=$center --ds9mode=wcs --ds9extra="-zoom 10" In a large survey like J-PLUS, it is easy to use more and more bright stars from different pointings (ideally with similar FWHM and similar telescope properties(1)) to improve the S/N of the PSF. As explained before, we designed the output files of this tutorial with the ‘67510’ (which is this image's pointing label in J-PLUS) where necessary so you see how easy it is to add more pointings to use in the creation of the PSF. Let's consider now more than one single star. We should have two things in mind: • The brightest (subtract-able, see the point below) star should be the first star to be subtracted. This is because of its extended wings which may affect the scale factor of nearby stars. So we should sort the catalog by magnitude and come down from the brightest. • We should only subtract stars where the scale factor is less than the S/N of the PSF (in relation to the data). Since it can get a little complex, it is easier to implement this step as a script (that is heavily commented for you to easily understand every step; especially if you put it in a good text editor with color-coding!). You will notice that script also creates a ‘.log’ file, which shows which star was subtracted and which one was not (this is important, and will be used below!). #!/bin/bash # Abort the script on first error. set -e # ID of image to subtract stars from. imageid=67510 # Get S/N level of the final PSF in relation to the actual data: snlevel=$(ls outer/stamps/*.fits | wc -l | awk '{print sqrt($1)}') # Put a copy of the image we want to subtract the PSF from in the # final file (this will be over-written after each subtraction). subtracted=subtracted/$imageid.fits cp label/$imageid-seg.fits $subtracted # Name of log-file to keep status of the subtraction of each star. logname=subtracted/$imageid.log echo "# Column 1: RA [deg, f64] Right ascension of star." > $logname echo "# Column 2: Dec [deg, f64] Declination of star." >> $logname echo "# Column 3: Stat [deg, f64] Status (1: subtracted)" >> $logname # Go over each item in the bright star catalog: asttable flat/67510-bright.fits -cra,dec --sort phot_g_mean_mag \ | while read -r ra dec; do # Put a comma between the RA/Dec to pass to options. center=$(echo $ra $dec | awk '{printf "%s,%s", $1, $2}') # Calculate the scale value scale=$(astscript-psf-scale-factor label/67510-seg.fits \ --mode=wcs --quiet\ --psf=psf.fits \ --center=$center \ --normradii=10,15 \ --segment=label/67510-seg.fits) # Subtract this star if the scale factor is less than the S/N # level calculated above. check=$(echo $snlevel $scale \ | awk '{if($1>$2) c="good"; else c="bad"; print c}') if [ $check = good ]; then # A temporary file to subtract this star. subtmp=subtracted/$imageid-tmp.fits # Subtract this star from the image where all previous stars # were subtracted. astscript-psf-subtract $subtracted \ --mode=wcs \ --psf=psf.fits \ --scale=$scale \ --center=$center \ --output=$subtmp # Rename the temporary subtracted file to the final one: mv $subtmp $subtracted # Keep the status for this star. status=1 else # Let the user know this star did not work, and keep the status # for this star. echo "$center: $scale is larger than $snlevel" status=0 fi # Keep the status in a log file. echo "$ra $dec $status" >> $logname done Copy the contents above into a file called ‘subtract-psf-from-cat.sh’ and run the following commands. Just note that in the script above, we assumed the output is written in the ‘subtracted/’, directory, so we will first make that. $ mkdir subtracted $ chmod +x subtract-psf-from-cat.sh $ ./subtract-psf-from-cat.sh $ astscript-fits-view label/67510-seg.fits subtracted/67510.fits Can you visually find the stars that have been subtracted? Its a little hard, is not it? This shows that you done a good job this time (the sky-noise is not significantly affected)! So let's subtract the actual image from the PSF-subtracted image to see the scattered light field of the subtracted stars. With the second command below we will zoom into the brightest subtracted star, but of course feel free to zoom-out and inspect the others also. $ astarithmetic label/67510-seg.fits subtracted/67510.fits - \ --output=scattered-light.fits -g1 $ center=$(asttable subtracted/67510.log --equal=Stat,1 --head=1 \ -cra,dec | awk '{printf "%s,%s", $1, $2}') $ astscript-fits-view label/67510-seg.fits subtracted/67510.fits \ scattered-light.fits \ --ds9center=$center --ds9mode=wcs \ --ds9extra="-scale limits -0.5 1.5 -match scale" \ --ds9extra="-lock scale yes -zoom 10" \ --ds9extra="-tile mode column" ## We can always make it easily, so let's remove this. $ rm scattered-light.fits You will probably have noticed that in the scattered light field there are some patches that correspond to the saturation of the stars. Since we obtained the scattered light field by subtracting PSF-subtracted image from the original image, it is natural that we have such saturated regions. To solve such inconvenience, this script also has an option to not make the subtraction of the PSF but to give as output the modeled star. For doing that, it is necessary to run the script with the option ‘--modelonly’. We encourage the reader to obtain such scattered light field model. In some scenarios it could be interesting having such way of correcting the PSF. For example, if there are many faint stars that can be modeled at the same time because their flux do not affect each other. In such situation, the task could be easily parallelized without having to wait to model the brighter stars before the fainter ones. At the end, once all stars have been modeled, a simple Arithmetic command could be used to sum the different modeled-PSF stamps to obtain the entire scattered light field. In general you see that the subtraction has been done nicely and almost all the extended wings of the PSF have been subtracted. The central regions of the stars are not perfectly subtracted: • Some may get too dark at the center. This may be due to the non-linearity of the CCD counting (as discussed previously in *note Uniting the different PSF components::). • Others may have a strong gradient: one side is too positive and one side is too negative (only in the very central few pixels). This is due to the non-accurate positioning: most probably this happens because of imperfect astrometry. Note also that during this process we assumed that the PSF does not vary with the CCD position or any other parameter. In other words, we are obtaining an averaged PSF model from a few star stamps that are naturally different, and this also explains the residuals on each subtracted star. We let as an interesting exercise the modeling and subtraction of other stars, for example, the non saturated stars of the image. By doing this, you will notice that in the core region the residuals are different compared to the residuals of brighter stars that we have obtained. In general, in this tutorial we have showed how to deal with the most important challenges for constructing an extended PSF. Each image or dataset will have its own particularities that you will have to take into account when constructing the PSF. ---------- Footnotes ---------- (1) For example, in J-PLUS, the baffle of the secondary mirror was adjusted in 2017 because it produced extra spikes in the PSF. So all images after that date have a PSF with 4 spikes (like this one), while those before it have many more spikes.  File: gnuastro.info, Node: Sufi simulates a detection, Next: Detecting lines and extracting spectra in 3D data, Prev: Building the extended PSF, Up: Tutorials 2.4 Sufi simulates a detection ============================== It is the year 953 A.D. and Abd al-rahman Sufi (903 - 986 A.D.)(1) is in Shiraz as a guest astronomer. He had come there to use the advanced 123 centimeter astrolabe for his studies on the ecliptic. However, something was bothering him for a long time. While mapping the constellations, there were several non-stellar objects that he had detected in the sky, one of them was in the Andromeda constellation. During a trip he had to Yemen, Sufi had seen another such object in the southern skies looking over the Indian ocean. He was not sure if such cloud-like non-stellar objects (which he was the first to call 'SahÄbi' in Arabic or 'nebulous') were real astronomical objects or if they were only the result of some bias in his observations. Could such diffuse objects actually be detected at all with his detection technique? He still had a few hours left until nightfall (when he would continue his studies on the ecliptic) so he decided to find an answer to this question. He had thoroughly studied Claudius Ptolemy's (90 - 168 A.D) Almagest and had made lots of corrections to it, in particular in measuring the brightness. Using his same experience, he was able to measure a magnitude for the objects and wanted to simulate his observation to see if a simulated object with the same brightness and size could be detected in simulated noise with the same detection technique. The general outline of the steps he wants to take are: 1. Make some mock profiles in an over-sampled image. The initial mock image has to be over-sampled prior to convolution or other forms of transformation in the image. Through his experiences, Sufi knew that this is because the image of heavenly bodies is actually transformed by the atmosphere or other sources outside the atmosphere (for example, gravitational lenses) prior to being sampled on an image. Since that transformation occurs on a continuous grid, to best approximate it, he should do all the work on a finer pixel grid. In the end he can resample the result to the initially desired grid size. 2. Convolve the image with a point spread function (PSF, see *note PSF::) that is over-sampled to the same resolution as the mock image. Since he wants to finish in a reasonable time and the PSF kernel will be very large due to oversampling, he has to use frequency domain convolution which has the side effect of dimming the edges of the image. So in the first step above he also has to build the image to be larger by at least half the width of the PSF convolution kernel on each edge. 3. With all the transformations complete, the image should be resampled to the same size of the pixels in his detector. 4. He should remove those extra pixels on all edges to remove frequency domain convolution artifacts in the final product. 5. He should add noise to the (until now, noise-less) mock image. After all, all observations have noise associated with them. Fortunately Sufi had heard of GNU Astronomy Utilities from a colleague in Isfahan (where he worked) and had installed it on his computer a year before. It had tools to do all the steps above. He had used MakeProfiles before, but was not sure which columns he had chosen in his user or system-wide configuration files for which parameters, see *note Configuration files::. So to start his simulation, Sufi runs MakeProfiles with the ‘-P’ option to make sure what columns in a catalog MakeProfiles currently recognizes, and confirm the output image parameters. In particular, Sufi is interested in the recognized columns (shown below). $ astmkprof -P [[[ ... Truncated lines ... ]]] # Output: type float32 # Type of output: e.g., int16, float32, etc. mergedsize 1000,1000 # Number of pixels along first FITS axis. oversample 5 # Scale of oversampling (>0 and odd). [[[ ... Truncated lines ... ]]] # Columns, by info (see `--searchin'), or number (starting from 1): ccol 2 # Coord. columns (one call for each dim.). ccol 3 # Coord. columns (one call for each dim.). fcol 4 # sersic (1), moffat (2), gaussian (3), point # (4), flat (5), circumference (6), distance # (7), custom-prof (8), azimuth (9), # custom-img (10). rcol 5 # Effective radius or FWHM in pixels. ncol 6 # Sersic index or Moffat beta. pcol 7 # Position angle. qcol 8 # Axis ratio. mcol 9 # Magnitude. tcol 10 # Truncation in units of radius or pixels. [[[ ... Truncated lines ... ]]] In Gnuastro, column counting starts from 1, so the columns are ordered such that the first column (number 1) can be an ID he specifies for each object (and MakeProfiles ignores), each subsequent column is used for another property of the profile. It is also possible to use column names for the values of these options and change these defaults, but Sufi preferred to stick to the defaults. Fortunately MakeProfiles has the capability to also make the PSF which is to be used on the mock image and using the ‘--prepforconv’ option, he can also make the mock image to be larger by the correct amount and all the sources to be shifted by the correct amount. For his initial check he decides to simulate the nebula in the Andromeda constellation. The night he was observing, the PSF had roughly a FWHM of about 5 pixels, so as the first row (profile) in the table below, he defines the PSF parameters. Sufi sets the radius column (‘rcol’ above, fifth column) to ‘5.000’, he also chooses a Moffat function for its functional form. Remembering how diffuse the nebula in the Andromeda constellation was, he decides to simulate it with a mock Sérsic index 1.0 profile. He wants the output to be 499 pixels by 499 pixels, so he can put the center of the mock profile in the central pixel of the image which is the 250th pixel along both dimensions (note that an even number does not have a "central" pixel). Looking at his drawings of it, he decides a reasonable effective radius for it would be 40 pixels on this image pixel scale (second row, 5th column below). He also sets the axis ratio (0.4) and position angle (-25 degrees) to approximately correct values too, and finally he sets the total magnitude of the profile to 3.44 which he had measured. Sufi also decides to truncate both the mock profile and PSF at 5 times the respective radius parameters. In the end he decides to put four stars on the four corners of the image at very low magnitudes as a visual scale. While he was preparing the catalog, one of his students approached him and was also following the steps. As described above, the catalog of profiles to build will be a table (multiple columns of numbers) like below: 0 0.000 0.000 2 5 4.7 0.0 1.0 30.0 5.0 1 250.0 250.0 1 40 1.0 -25 0.4 3.44 5.0 2 50.00 50.00 4 0 0.0 0.0 0.0 6.00 0.0 3 450.0 50.00 4 0 0.0 0.0 0.0 6.50 0.0 4 50.00 450.0 4 0 0.0 0.0 0.0 7.00 0.0 5 450.0 450.0 4 0 0.0 0.0 0.0 7.50 0.0 This contains all the "data" to build the profile, and you can easily pass it to Gnuastro's MakeProfiles: since Sufi already knows the columns and expected values very good, he has placed the information in the proper columns. However, when the student sees this, he just sees a mumble-jumble of numbers! Generally, Sufi explains to the student that even if you know the number positions and values very nicely today, in a couple of months you will forget! It will then be very hard for you to interpret the numbers properly. So you should never use naked data (or data without any extra information). Data (or information) that describes other data is called "metadata"! One common example is column names (the name of a column is itself a data element, but data that describes the lower-level data within that column: how to interpret the numbers within it). Sufi explains to his student that Gnuastro has a convention for adding metadata within a plain-text file; and guides him to *note Gnuastro text table format::. Because we do not want metadata to be confused with the actual data, in a plain-text file, we start lines containing metadata with a '‘#’'. For example, see the same data above, but this time with metadata for every column: # Column 1: ID [counter, u8] Identifier # Column 2: X [pix, f32] Horizontal position # Column 3: Y [pix, f32] Vertical position # Column 4: PROFILE [name, u8] Radial profile function # Column 5: R [pix, f32] Effective radius # Column 6: N [n/a, f32] Sersic index # Column 7: PA [deg, f32] Position angle # Column 8: Q [n/a, f32] Axis ratio # Column 9: MAG [log, f32] Magnitude # Column 10: TRUNC [n/a, f32] Truncation (multiple of R) 0 0.000 0.000 2 5 4.7 0.0 1.0 30.0 5.0 1 250.0 250.0 1 40 1.0 -25 0.4 3.44 5.0 2 50.00 50.00 4 0 0.0 0.0 0.0 6.00 0.0 3 450.0 50.00 4 0 0.0 0.0 0.0 6.50 0.0 4 50.00 450.0 4 0 0.0 0.0 0.0 7.00 0.0 5 450.0 450.0 4 0 0.0 0.0 0.0 7.50 0.0 The numbers now make much more sense for the student! Before continuing, Sufi reminded the student that even though metadata may not be strictly/technically necessary (for the computer programs), metadata are critical for human readers! Therefore, a good scientist should never forget to keep metadata with any data that they create, use or archive. To start simulating the nebula, Sufi creates a directory named ‘simulationtest’ in his home directory. Note that the ‘pwd’ command will print the "parent working directory" of the current directory (its a good way to confirm/check your current location in the full file system: it always starts from the root, or '‘/’'). $ mkdir ~/simulationtest $ cd ~/simulationtest $ pwd /home/rahman/simulationtest It is possible to use a plain-text editor to manually put the catalog contents above into a plain-text file. But to easily automate catalog production (in later trials), Sufi decides to fill the input catalog with the redirection features of the command-line (or shell). Sufi's student was not familiar with this feature of the shell! So Sufi decided to do a fast demo; giving the following explanations while running the commands: Shell redirection allows you to "re-direct" the "standard output" of a program (which is usually printed by the program on the command-line during its execution; like the output of ‘pwd’ above) into a file. For example, let's simply "echo" (or print to standard output) the line "This is a test.": $ echo "This is a test." This is a test. As you see, our statement was simply "echo"-ed to the standard output! To redirect this sentence into a file (instead of simply printing it on the standard output), we can simply use the ‘>’ character, followed by the name of the file we want it to be dumped in. $ echo "This is a test." > test.txt This time, the ‘echo’ command did not print anything in the terminal. Instead, the shell (command-line environment) took the output, and "re-directed" it into a file called ‘test.txt’. Let's confirm this with the ‘ls’ command (‘ls’ is short for "list" and will list all the files in the current directory): $ ls test.txt Now that you confirm the existence of ‘test.txt’, you can see its contents with the ‘cat’ command (short for "concatenation"; because it can also merge multiple files together): $ cat test.txt This is a test. Now that we have written our first line in ‘test.txt’, let's try adding a second line (do not forget that our final catalog of objects to simulate will have multiple lines): $ echo "This is my second line." > test.txt $ cat test.txt This is my second line. As you see, the first line that you put in the file is no longer present! This happens because '‘>’' always starts dumping content to a file from the start of the file. In effect, this means that any possibly pre-existing content is over-written by the new content! To append new lines (or dumping new content at the end of existing content), you can use '‘>>’'. for example, with the commands below, first we will write the first sentence (using '‘>’'), then use '‘>>’' to add the second and third sentences. Finally, we will print the contents of ‘test.txt’ to confirm that all three lines are preserved. $ echo "My first sentence." > test.txt $ echo "My second sentence." >> test.txt $ echo "My third sentence." >> test.txt $ cat test.txt My first sentence. My second sentence. My third sentence. The student thanked Sufi for this explanation and now feels more comfortable with redirection. Therefore Sufi continues with the main project. But before that, he deletes the temporary test file: $ rm test.txt To put the catalog of profile data and their metadata (that was described above) into a file, Sufi uses the commands below. While Sufi was writing these commands, the student complained that "I could have done in this in a text editor". Sufi reminded the student that it is indeed possible; but it requires manual intervention. The advantage of a solution like below is that it can be automated (for example, adding more rows; for more profiles in the final image). $ echo "# Column 1: ID [counter, u8] Identifier" > cat.txt $ echo "# Column 2: X [pix, f32] Horizontal position" >> cat.txt $ echo "# Column 3: Y [pix, f32] Vertical position" >> cat.txt $ echo "# Column 4: PROF [name, u8] Radial profile function" \ >> cat.txt $ echo "# Column 5: R [pix, f32] Effective radius" >> cat.txt $ echo "# Column 6: N [n/a, f32] Sersic index" >> cat.txt $ echo "# Column 7: PA [deg, f32] Position angle" >> cat.txt $ echo "# Column 8: Q [n/a, f32] Axis ratio" >> cat.txt $ echo "# Column 9: MAG [log, f32] Magnitude" >> cat.txt $ echo "# Column 10: TRUNC [n/a, f32] Truncation (multiple of R)" \ >> cat.txt $ echo "0 0.000 0.000 2 5 4.7 0.0 1.0 30.0 5.0" >> cat.txt $ echo "1 250.0 250.0 1 40 1.0 -25 0.4 3.44 5.0" >> cat.txt $ echo "2 50.00 50.00 4 0 0.0 0.0 0.0 6.00 0.0" >> cat.txt $ echo "3 450.0 50.00 4 0 0.0 0.0 0.0 6.50 0.0" >> cat.txt $ echo "4 50.00 450.0 4 0 0.0 0.0 0.0 7.00 0.0" >> cat.txt $ echo "5 450.0 450.0 4 0 0.0 0.0 0.0 7.50 0.0" >> cat.txt To make sure if the catalog's content is correct (and there was no typo for example!), Sufi runs '‘cat cat.txt’', and confirms that it is correct. Now that the catalog is created, Sufi is ready to call MakeProfiles to build the image containing these objects. He looks into his records and finds that the zero point magnitude for that night, and that particular detector, was 18 magnitudes. The student was a little confused on the concept of zero point, so Sufi pointed him to *note Brightness flux magnitude::, which the student can study in detail later. Sufi therefore runs MakeProfiles with the command below: $ astmkprof --prepforconv --mergedsize=499,499 --zeropoint=18.0 cat.txt MakeProfiles 0.22 started on Sat Oct 6 16:26:56 953 - 6 profiles read from cat.txt - Random number generator (RNG) type: ranlxs1 - Basic RNG seed: 1652884540 - Using 12 threads. ---- row 3 complete, 5 left to go ---- row 4 complete, 4 left to go ---- row 6 complete, 3 left to go ---- row 5 complete, 2 left to go ---- ./0_cat_profiles.fits created. ---- row 1 complete, 1 left to go ---- row 2 complete, 0 left to go - ./cat_profiles.fits created. 0.092573 seconds -- Output: ./cat_profiles.fits MakeProfiles finished in 0.293644 seconds Sufi encourages the student to read through the printed output. As the statements say, two FITS files should have been created in the running directory. So Sufi ran the command below to confirm: $ ls 0_cat_profiles.fits cat_profiles.fits cat.txt The file ‘0_cat_profiles.fits’ is the PSF Sufi had asked for, and ‘cat_profiles.fits’ is the image containing the main objects in the catalog. Sufi opened the main image with the command below (using SAO DS9): $ astscript-fits-view cat_profiles.fits --ds9scale=95 The student could clearly see the main elliptical structure in the center. However, the size of ‘cat_profiles.fits’ was surprising for the student, instead of 499 by 499 (as we had requested), it was 2615 by 2615 pixels (from the command below): $ astfits cat_profiles.fits Fits (GNU Astronomy Utilities) 0.22 Run on Sat Oct 6 16:26:58 953 ----- HDU (extension) information: 'cat_profiles.fits'. Column 1: Index (counting from 0, usable with '--hdu'). Column 2: Name ('EXTNAME' in FITS standard, usable with '--hdu'). Column 3: Image data type or 'table' format (ASCII or binary). Column 4: Size of data in HDU. ----- 0 MKPROF-CONFIG no-data 0 1 Mock profiles float32 2615x2615 So Sufi explained why oversampling is important in modeling, especially for parts of the image where the flux change is significant over a pixel. Recall that when you oversample the model (for example, by 5 times), for every desired pixel, you get 25 pixels ($5\times5$). Sufi then explained that after convolving (next step below) we will down-sample the image to get our originally desired size/resolution. After seeing the image, the student complained that only the large elliptical model for the Andromeda nebula can be seen in the center. He could not see the four stars that we had also requested in the catalog. So Sufi had to explain that the stars are there in the image, but the reason that they are not visible when looking at the whole image at once, is that they only cover a single pixel! To prove it, he centered the image around the coordinates 2308 and 2308, where one of the stars is located in the over-sampled image [you can do this in ‘ds9’ by selecting "Pan" in the "Edit" menu, then clicking around that position]. Sufi then zoomed in to that region and soon, the star's non-zero pixel could be clearly seen. Sufi explained that the stars will take the shape of the PSF (cover an area of more than one pixel) after convolution. If we did not have an atmosphere and we did not need an aperture, then stars would only cover a single pixel with normal CCD resolutions. So Sufi convolved the image with this command: $ astconvolve --kernel=0_cat_profiles.fits cat_profiles.fits \ --output=cat_convolved.fits Convolve started on Sat Oct 6 16:35:32 953 - Using 8 CPU threads. - Input: cat_profiles.fits (hdu: 1) - Kernel: 0_cat_profiles.fits (hdu: 1) - Input and Kernel images padded. 0.075541 seconds - Images converted to frequency domain. 6.728407 seconds - Multiplied in the frequency domain. 0.040659 seconds - Converted back to the spatial domain. 3.465344 seconds - Padded parts removed. 0.016767 seconds - Output: cat_convolved.fits Convolve finished in: 10.422161 seconds When convolution finished, Sufi opened ‘cat_convolved.fits’ and the four stars could be easily seen now: $ astscript-fits-view cat_convolved.fits --ds9scale=95 It was interesting for the student that all the flux in that single pixel is now distributed over so many pixels (the sum of all the pixels in each convolved star is actually equal to the value of the single pixel before convolution). Sufi explained how a PSF with a larger FWHM would make the points even wider than this (distributing their flux in a larger area). With the convolved image ready, they were prepared to resample it to the original pixel scale Sufi had planned [from the ‘$ astmkprof -P’ command above, recall that MakeProfiles had over-sampled the image by 5 times]. Sufi explained the basic concepts of warping the image to his student and ran Warp with the following command: $ astwarp --scale=1/5 --centeroncorner cat_convolved.fits Warp started on Sat Oct 6 16:51:59 953 Using 8 CPU threads. Input: cat_convolved.fits (hdu: 1) matrix: 0.2000 0.0000 0.4000 0.0000 0.2000 0.4000 0.0000 0.0000 1.0000 $ astfits cat_convolved_scaled.fits --quiet 0 WARP-CONFIG no-data 0 1 Warped float32 523x523 ‘cat_convolved_scaled.fits’ now has the correct pixel scale. However, the image is still larger than what we had wanted, it is $523\times523$ pixels (not our desired $499\times499$). The student is slightly confused, so Sufi also resamples the PSF with the same scale by running $ astwarp --scale=1/5 --centeroncorner 0_cat_profiles.fits $ astfits 0_cat_profiles_scaled.fits --quiet 0 WARP-CONFIG no-data 0 1 Warped float32 25x25 Sufi notes that $25=12+12+1$ and that $523=499+12+12$. He goes on to explain that frequency space convolution will dim the edges and that is why he added the ‘--prepforconv’ option to MakeProfiles above. Now that convolution is done, Sufi can remove those extra pixels using Crop with the command below. Crop's ‘--section’ option accepts coordinates inclusively and counting from 1 (according to the FITS standard), so the crop region's first pixel has to be 13, not 12. $ astcrop cat_convolved_scaled.fits --section=13:*-12,13:*-12 \ --mode=img --zeroisnotblank Crop started on Sat Oct 6 17:03:24 953 - Read metadata of 1 image. 0.001304 seconds ---- ...nvolved_scaled_cropped.fits created: 1 input. Crop finished in: 0.027204 seconds To fully convince the student, Sufi checks the size of the output of the crop command above: $ astfits cat_convolved_scaled_cropped.fits --quiet 0 n/a no-data 0 1 n/a float32 499x499 Finally, ‘cat_convolved_scaled_cropped.fits’ is $499\times499$ pixels and the mock Andromeda galaxy is centered on the central pixel. This is the same dimensions as Sufi had desired in the beginning. All this trouble was certainly worth it because now there is no dimming on the edges of the image and the profile centers are more accurately sampled. The final step to simulate a real observation would be to add noise to the image. Sufi set the zero point magnitude to the same value that he set when making the mock profiles and looking again at his observation log, he had measured the background flux near the nebula had a _per-pixel_ magnitude of 7 that night. For more on how the background value determines the noise, see *note Noise basics::. So using these values he ran Arithmetic's ‘mknoise-sigma-from-mean’ operator, and with the second command, he visually inspected the image. The ‘mknoise-sigma-from-mean’ operator takes the noise standard deviation in linear units, not magnitudes (which are logarithmic). Therefore within the same Arithmetic command, he has converted the sky background magnitude to counts using Arithmetic's ‘counts-to-mag’ operator. $ astarithmetic cat_convolved_scaled_cropped.fits \ 7 18 mag-to-counts mknoise-sigma-from-mean \ --output=out.fits $ astscript-fits-view out.fits The ‘out.fits’ file now contains the noised image of the mock catalog Sufi had asked for. The student had not observed the nebula in the sky, so when he saw the mock image in SAO DS9 (with the second command above), he understood why Sufi was dubious: it was very diffuse! Seeing how the ‘--output’ option allows the user to specify the name of the output file, the student was confused and wanted to know why Sufi had not used it more regularly before? Sufi explained that for intermediate steps, you can rely on the automatic output of the programs (see *note Automatic output::). Doing so will give all the intermediate files a similar basic name structure, so in the end you can simply remove them all with the Shell's capabilities, and it will be familiar for other users. So Sufi decided to show this to the student by making a shell script from the commands he had used before. The command-line shell has the capability to read all the separate input commands from a file. This is useful when you want to do the same thing multiple times, with only the names of the files or minor parameters changing between the different instances. Using the shell's history (by pressing the up keyboard key) Sufi reviewed all the commands and then he retrieved the last 5 commands with the ‘$ history 5’ command. He selected all those lines he had input and put them in a text file named ‘mymock.sh’. Then he defined the ‘edge’ and ‘base’ shell variables for easier customization later, and before every command, he added some comments (lines starting with <#>) for future readability. Finally, Sufi pointed the student to Gnuastro's *note General program usage tutorial::, which has a full section on *note Writing scripts to automate the steps::. #!/bin/bash edge=12 base=cat # Stop running next commands if one fails. set -e # Remove any (possibly) existing output (from previous runs) # before starting. rm -f out.fits # Run MakeProfiles to create an oversampled FITS image. astmkprof --prepforconv --mergedsize=499,499 --zeropoint=18.0 \ "$base".txt # Convolve the created image with the kernel. astconvolve "$base"_profiles.fits \ --kernel=0_"$base"_profiles.fits \ --output="$base"_convolved.fits # Scale the image back to the intended resolution. astwarp --scale=1/5 --centeroncorner "$base"_convolved.fits # Crop the edges out (dimmed during convolution). '--section' # accepts inclusive coordinates, so the start of the section # must be one pixel larger than its end. st_edge=$(( edge + 1 )) astcrop "$base"_convolved_scaled.fits --zeroisnotblank \ --mode=img --section=$st_edge:*-$edge,$st_edge:*-$edge # Add noise to the image. $ astarithmetic "$base"_convolved_scaled_cropped.fits \ 7 18 mag-to-counts mknoise-sigma-from-mean \ --output=out.fits # Remove all the temporary files. rm 0*.fits "$base"*.fits He used this chance to remind the student of the importance of comments in code or shell scripts! Just like metadata in a dataset, when writing the code, you have a good mental picture of what you are doing, so writing comments might seem superfluous and excessive. However, in one month when you want to re-use the script, you have lost that mental picture and remembering it can be time-consuming and frustrating. The importance of comments is further amplified when you want to share the script with a friend/colleague. So it is good to accompany any step of a script, or code, with useful comments while you are writing it (create a good mental picture of why you are doing something: do not just describe the command, but its purpose). Sufi then explained to the eager student that you define a variable by giving it a name, followed by an ‘=’ sign and the value you want. Then you can reference that variable from anywhere in the script by calling its name with a ‘$’ prefix. So in the script whenever you see ‘$base’, the value we defined for it above is used. If you use advanced editors like GNU Emacs or even simpler ones like Gedit (part of the GNOME graphical user interface) the variables will become a different color which can really help in understanding the script. We have put all the ‘$base’ variables in double quotation marks (‘"’) so the variable name and the following text do not get mixed, the shell is going to ignore the ‘"’ after replacing the variable value. To make the script executable, Sufi ran the following command: $ chmod +x mymock.sh Then finally, Sufi ran the script, simply by calling its file name: $ ./mymock.sh After the script finished, the only file remaining is the ‘out.fits’ file that Sufi had wanted in the beginning. Sufi then explained to the student how he could run this script anywhere that he has a catalog if the script is in the same directory. The only thing the student had to modify in the script was the name of the catalog (the value of the ‘base’ variable in the start of the script) and the value to the ‘edge’ variable if he changed the PSF size. The student was also happy to hear that he will not need to make it executable again when he makes changes later, it will remain executable unless he explicitly changes the executable flag with ‘chmod’. The student was really excited, since now, through simple shell scripting, he could really speed up his work and run any command in any fashion he likes allowing him to be much more creative in his works. Until now he was using the graphical user interface which does not have such a facility and doing repetitive things on it was really frustrating and some times he would make mistakes. So he left to go and try scripting on his own computer. He later reminded Sufi that the second tutorial in the Gnuastro book as more complex commands in data analysis, and a more advanced introduction to scripting (see *note General program usage tutorial::). Sufi could now get back to his own work and see if the simulated nebula which resembled the one in the Andromeda constellation could be detected or not. Although it was extremely faint(2). Therefore, Sufi ran Gnuastro's detection software (*note NoiseChisel::) to see if this object is detectable or not. NoiseChisel's output (‘out_detected.fits’) is a multi-extension FITS file, so he used Gnuastro's ‘astscript-fits-view’ program in the second command to see the output: $ astnoisechisel out.fits $ astscript-fits-view out_detected.fits In the "Cube" window (that was opened with DS9), if Sufi clicked on the "Next" button to see the pixels that were detected to contain significant signal. Fortunately the nebula's shape was detectable and he could finally confirm that the nebula he kept in his notebook was actually observable. He wrote this result in the draft manuscript that would later become "Book of fixed stars"(3). He still had to check the other nebula he saw from Yemen and several other such objects, but they could wait until tomorrow (thanks to the shell script, he only has to define a new catalog). It was nearly sunset and they had to begin preparing for the night's measurements on the ecliptic. ---------- Footnotes ---------- (1) In Latin Sufi is known as Azophi. He was an Iranian astronomer. His manuscript "Book of fixed stars" contains the first recorded observations of the Andromeda galaxy, the Large Magellanic Cloud and seven other non-stellar or 'nebulous' objects. (2) The brightness of a diffuse object is added over all its pixels to give its final magnitude, see *note Brightness flux magnitude::. So although the magnitude 3.44 (of the mock nebula) is orders of magnitude brighter than 6 (of the stars), the central galaxy is much fainter. Put another way, the brightness is distributed over a large area in the case of a nebula. (3) <https://en.wikipedia.org/wiki/Book_of_Fixed_Stars>  File: gnuastro.info, Node: Detecting lines and extracting spectra in 3D data, Next: Color images with full dynamic range, Prev: Sufi simulates a detection, Up: Tutorials 2.5 Detecting lines and extracting spectra in 3D data ===================================================== 3D data cubes are an increasingly common format of data products in observational astronomy. As opposed to 2D images (where each 2D "picture element" or "pixel" covers an infinitesimal area on the surface of the sky), 3D data cubes contain "volume elements" or "voxels" that are also connected in a third dimension. The most common case of 3D data in observational astrophysics is when the first two dimensions are spatial (RA and Dec on the sky), and the third dimension is wavelength. This type of data is generically (also outside of astronomy) known as Hyperspectral imaging(1). For example high-level data products of Integral Field Units (IFUs) like MUSE(2) in the optical, ACIS(3) in the X-ray, or in the radio where most data are 3D cubes. In this tutorial, we'll use a small crop of a reduced deep MUSE cube centered on the Abell 370 (https://en.wikipedia.org/wiki/Abell_370) galaxy cluster from the Pilot-WINGS survey; see Lagattuta et al. 2022 (https://arxiv.org/abs/2202.04663). Abell 370 has a spiral galaxy in its background that is stretched due to the cluster's gravitational potential to create a beautiful arch. If you haven't seen it yet, have a look at some of its images in the Wikipedia link above before continuing. The Pilot-WINGS survey data are available in its webpage(4). The cube of the _core_ region is 10.2GBs. This can be prohibitively large to download (and later process) on many networks and smaller computers. Therefore, in this demonstration we won't be using the full cube. We have prepared a small crop(5) of the full cube that you can download with the first command below. The randomly selected crop is centered on (RA,Dec) of (39.96769,-1.58930), with a width of about 27 arcseconds. $ mkdir tutorial-3d $ cd tutorial-3d $ wget http://akhlaghi.org/data/a370-crop.fits # Downloads 287 MB In the sections below, we will first review how you can visually inspect a 3D datacube in DS9 and interactively see the spectra of any region. We will then subtract the continuum emission, detect the emission-lines within this cube and extract their spectra. We will finish with creating pseudo narrow-band images optimized for some of the emission lines. * Menu: * Viewing spectra and redshifted lines:: Interactively see the spectra of an object * Sky lines in optical IFUs:: How to see sky lines in a cube. * Continuum subtraction:: Removing the continuum from a data cube. * 3D detection with NoiseChisel:: Finding emission-lines and their spectra. * 3D measurements and spectra:: Measuring 3d properties including spectra. * Extracting a single spectrum and plotting it:: Extracting a single vector row. * Pseudo narrow-band images:: Collapsing the third dimension into a 2D image. ---------- Footnotes ---------- (1) <https://en.wikipedia.org/wiki/Hyperspectral_imaging> (2) <https://en.wikipedia.org/wiki/Multi-unit_spectroscopic_explorer> (3) <https://en.wikipedia.org/wiki/Advanced_CCD_Imaging_Spectrometer> (4) <https://astro.dur.ac.uk/~hbpn39/pilot-wings.html> (5) You can download the full cube and create the crop your self with the commands below. Due to the decompression of the +10GB file that is necessary for the compressed downloaded file (note that its suffix is ‘.fits.gz’), the Crop command will take a little long. $ wget https://astro.dur.ac.uk/~hbpn39/pilotWINGS/A370_PilotWINGS_CORE.fits.gz $ astcrop A370_PilotWINGS_CORE.fits.gz -hDATA --mode=img \ --section=200:300,100:200 -oa370-crop.fits --metaname=DATA $ astcrop A370_PilotWINGS_CORE.fits.gz -hSTAT --mode=img --append \ --section=200:300,100:200 -oa370-crop.fits --metaname=STAT  File: gnuastro.info, Node: Viewing spectra and redshifted lines, Next: Sky lines in optical IFUs, Prev: Detecting lines and extracting spectra in 3D data, Up: Detecting lines and extracting spectra in 3D data 2.5.1 Viewing spectra and redshifted lines ------------------------------------------ In *note Detecting lines and extracting spectra in 3D data:: we downloaded a small crop from the Pilot-WINGS survey of Abell 370 cluster; observed with MUSE. In this section, we will review how you can visualize/inspect a datacube using that example. With the first command below, we'll open DS9 such that each 2D slice of the cube (at a fixed wavelength) is seen as a single image. If you move the slider in the "Cube" window (that also opens), you can view the same field at different wavelengths. We are ending the first command with a '‘&’' so you can continue viewing DS9 while using the command-line (press one extra ‘ENTER’ to see the prompt). With the second command, you can see that the spacing between each slice is $1.25\times10^{-10}$ meters (or 1.25 Angstroms). $ astscript-fits-view a370-crop.fits -h1 --ds9scale="limits -5 20" & $ astfits a370-crop.fits --pixelscale Basic info. for --pixelscale (remove info with '--quiet' or '-q') Input: a370-crop.fits (hdu 1) has 3 dimensions. Pixel scale in each FITS dimension: 1: 5.55556e-05 (deg/pixel) = 0.2 (arcsec/pixel) 2: 5.55556e-05 (deg/pixel) = 0.2 (arcsec/pixel) 3: 1.25e-10 (m/slice) Pixel area (on each 2D slice) : 3.08642e-09 (deg^2) = 0.04 (arcsec^2) Voxel volume: 3.85802e-19 (deg^2*m) = 5e-12 (arcsec^2*m) = 0.05 (arcsec^2*A) In the DS9 "Cube" window, you will see two numbers on the two sides of the scroller. The left number is the wavelength in meters (WCS coordinate in 3rd dimension) and the right number is the slice number (slice number or array coordinates in 3rd dimension). You can manually edit any of these numbers and press ENTER to go to that slice in any coordinate system. If you want to go one-by-one, simply press the "Next" button. The first few slides are very noisy, but in the rest the noise level decreases and the galaxies are more obvious. As you slide between the different wavelengths, you see that the noise-level is not constant and in some slices, the sky noise is very strong (for example, go to slice 3201 and press the "Next" button). We will discuss these issues below (in *note Sky lines in optical IFUs::). To view the spectra of a region in DS9 take the following steps: 1. Click somewhere on the image (to make sure DS9 receives your keyboard inputs), then press ‘Ctrl+R’ to activate regions and click on the brightest galaxy of this cube (center-right, at RA, Dec of 39.9659175 and -1.5893075). 2. A thin green circle will show up; this is called a "region" in DS9. 3. Double-click on the region, and you will see a "Circle" window. 4. Within the "Circle" window, click on the "Analysis" menu and select "Plot 3D". 5. A second "Circle" window will open that shows the spectra within your selected region. This is just the sum of values on each slice within the region. 6. Don't close the second "circle" window (that shows the spectrum). Click and hold the region in DS9, and move it to other objects within the cube. You will see that the spectrum changes as you move the region, and you can see that different objects have very different spectra. You can even see the spectra of only one part of a galaxy, not the whole galaxy. 7. Take the region back to the first (brightest) galaxy that we originally started with. 8. Slide over different wavelengths in the "Cube" window, you will see the light-blue line moving through the spectrum as you slide to different wavelengths. This line shows the wavelength of the displayed image in the main window over the spectra. 9. The strongest emission line in this galaxy appears to be around 8500 Angstroms or $8.5\times10^{-7}$ meters. From the position of the Balmer break (https://en.wikipedia.org/wiki/Balmer_jump) (blue-ward of 5000 Angstroms for this galaxy), the strong seems to be H-alpha. 10. To confirm that this is H-alpha, you can select the "Edit" menu in the spectrum window and select "Zoom". 11. Double-click and hold (for next step also) somewhere before the strongest line and slightly above the continuum (for example at ‘8E-07’ in the horizontal and $60\times10^{-20}$erg/Angstrom/cm$^2$/s on the vertical). As you move your cursor (while holding), you will see a rectangular box getting created. 12. Move the bottom-left corner of the box to somewhere after the strongest line and below the continuum. For example at ‘9E-07’ and $20\times10^{-20}$erg/Angstrom/cm$^2$/s. 13. Once you remove your finger from the mouse/touchpad, it will zoom-in to that part of the spectrum. 14. To zoom out to the full spectrum, just press the right mouse button over the spectra (or tap with two fingers on a touchpad). 15. Select that zoom-box again to see the brightest line much more clearly. You can also see the two lines of the Nitrogen II doublet that sandwich H-alpha. Beside its relative position to the Balmer break, this is further evidence that the strongest line is H-alpha. 16. Let's have a look at the galaxy in its best glory: right over the H-alpha line: Move the wavelength slider accurately (by pressing the "Previous" or "Next" buttons) such that the blue line falls in the middle of the H-alpha line. We see that the wavelength at this slice is ‘8.56593e-07’ meters or 8565.93 Angstroms. Please compare the image of the galaxy at this wavelength with the wavelengths before (by pressing "Next" or "Previous"). You will also see that it is much more extended and brighter than other wavelengths! H-alpha shows the un-obscured star formation of the galaxy! *Automaticly going to next slice:* When you want to get a general feeling of the cube, pressing the "Next" button many times is annoying and slow. To automatically shift between the slices, you can press the "Play" button in the DS9 "Cube" window. You can adjust the time it stays on each slice by clicking on the "Interval" menu and selecting lower values. Knowing that this is H-alpha at 8565.93 Angstroms, you can get the redshift of the galaxy with the first command below and the location of all other expected lines in Gnuastro's spectral line database with the second command. Because there are many lines in the second command (more than 200!), with the third command, we'll only limit it to the Balmer series (that start with ‘H-’) using ‘grep’. The output of the second command prints the metadata on the top (that is not shown any more in the third command due to the ‘grep’ call). To be complete, the first column is the observed wavelength of the given line in the given redshift and the second column is the name of the line. # Redshift where H-alpha falls on 8565.93. $ astcosmiccal --obsline=H-alpha,8565.93 --usedredshift 0.305221 # Wavelength of all lines in Gnuastro's database at this redshift $ astcosmiccal --obsline=H-alpha,8565.93 --listlinesatz # Only the Balmer series (Lines starting with 'H-'; given to Grep). $ astcosmiccal --obsline=H-alpha,8565.93 --listlinesatz | grep H- 4812.13 H-19 4818.29 H-18 4825.61 H-17 4834.36 H-16 4844.95 H-15 4857.96 H-14 4874.18 H-13 4894.79 H-12 4921.52 H-11 4957.1 H-10 5006.03 H-9 5076.09 H-8 5181.83 H-epsilon 5353.68 H-delta 5665.27 H-gamma 6345.11 H-beta 8565.93 H-alpha 4758.84 H-limit Zoom-out to the full spectrum and move the displayed slice to the location of the first emission line that is blue-ward (at shorter wavelengths) of H-alpha (at around 6300 Angstroms) and follow the previous steps to confirm that you are on its center. You will see that it falls exactly on $6.34468\times10^{-7}$ m or 6344.68 Angstroms. Now, have a look at the Balmer lines above. You have found the H-beta line! The rest of the Balmer series (https://en.wikipedia.org/wiki/Balmer_series) that you see in the list above (like H-gamma, H-delta and H-epsilon) are visible only as absorption lines. Please check their location by moving the blue line on the wavelengths above and confirm the spectral absorption lines with the ones above. The Balmer break is caused by the fact that these stronger Balmer absorption lines become too close to each other. Looking back at the full spectrum, you can also confirm that the only other relatively strong emission line in this galaxy, that is on the blue side of the spectrum is the weakest OII line that is approximately located at 4864 Angstroms in the observed spectra of this galaxy. The numbers after the various OII emission lines show their rest-frame wavelengths ("OII" can correspond to many electron transitions, so we should be clear about which one we are talking about). $ astcosmiccal --obsline=H-alpha,8565.93 --listlinesatz | grep O-II- 4863.3 O-II-3726 4866.93 O-II-3728 5634.82 O-II-4317 5762.42 O-II-4414 9554.21 O-II-7319 9568.22 O-II-7330 Please stop here and spend some time on doing the exercise above on other galaxies in the this cube to get a feeling of types of galaxy spectral features (and later on the full/large cube). You will notice that only star-forming galaxies have such strong emission lines! If you enjoy it, go get the full non-cropped cube and investigate the spectra, redshifts and emission/absorption lines of many more galaxies. But going into those higher-level details of the physical meaning of the spectra (as intriguing as they are!) is beyond the scope of this tutorial. So we have to stop at this stage unfortunately. Now that you have a relatively good feeling of this small cube, let's start doing some analysis to extract the spectra of the objects in this cube.  File: gnuastro.info, Node: Sky lines in optical IFUs, Next: Continuum subtraction, Prev: Viewing spectra and redshifted lines, Up: Detecting lines and extracting spectra in 3D data 2.5.2 Sky lines in optical IFUs ------------------------------- As we were visually inspecting the cube in *note Viewing spectra and redshifted lines::, we noticed some slices with very bad noise. They will later affect our detection within the cube, so in this section let's have a fast look at them here. We'll start by looking at the two cubes within the downloaded FITS file: $ astscript-fits-view a370-crop.fits The cube on the left is the same cube we studied before. The cube on the right (which is called ‘STAT’) shows the variance of each voxel. Go to slice 3195 and press "Next" to view the subsequent slices. Initially (for the first 5 or 6 slices), the noise looks reasonable. But as you pass slice 3206, you will see that the noise becomes very bad in both cubes. It stays like this until about slice 3238! As you go through the whole cube, you will notice that these slices are much more frequent in the reddest wavelengths. These slices are affected by the emission lines from our own atmosphere! The atmosphere's emission in these wavelengths significantly raises the background level in these slices. As a result, the Poisson noise also increases significantly (see *note Photon counting noise::). During the data reduction, the excess background flux of each slice is removed as the Sky (or the mean of undetected pixels, see *note Sky value::). However, the increased Poisson noise (scatter of pixel values) remains! To see spectrum of the sky emission lines, simply put a region somewhere in the ‘STAT’ cube and generate its spectrum (as we did in *note Viewing spectra and redshifted lines::). You will clearly see the comb-like shape of atmospheric emission lines and can use this to know where to expect them.  File: gnuastro.info, Node: Continuum subtraction, Next: 3D detection with NoiseChisel, Prev: Sky lines in optical IFUs, Up: Detecting lines and extracting spectra in 3D data 2.5.3 Continuum subtraction --------------------------- In *note Viewing spectra and redshifted lines::, we visually inspected some of the most prominent emission lines of the brightest galaxy of the demo MUSE cube (see *note Detecting lines and extracting spectra in 3D data::). Here, we will remove the "continuum" flux from under the emission lines to see them more distinctly. Within a spectra, the continuum is the local "background" flux in the third/wavelength dimension. In other words, it is the flux that would be present at that wavelength if the emission line didn't exist. Therefore, to accurately measure the flux of the emission line, we first need to subtract the continuum. One crude way of estimating the continuum flux at every slice is to use the sigma-clipped median value of that same pixel in the $\pm{N/2}$ slides around it (for more on sigma-clipping, see *note Sigma clipping::). In this case, $N=100$ should be a good first approximate (since it is much larger than any of the absorption or emission lines). With the first command below, let's use Arithmetic's filtering operators for estimating the sigma-clipped median only along the third dimension for every pixel in every slice (see *note Filtering operators::). With the second command, have a look at the filtered cube and spectra. Note that the first command is computationally expensive and may take a minute or so. $ astarithmetic a370-crop.fits set-i --output=filtered.fits \ 3 0.2 1 1 100 i filter-sigclip-median $ astscript-fits-view filtered.fits -h1 --ds9scale="limits -5 20" Looking at the filtered cube above, and sliding through the different wavelengths, you will see the noise in each slice has been significantly reduced! This is expected because each pixel's value is now calculated from 100 others (along the third dimension)! Using the same steps as *note Viewing spectra and redshifted lines::, plot the spectra of the brightest galaxy. Then, have a look at its spectra. You see that the emission lines have been significantly smoothed out to become almost(1) invisible. You can now subtract this "continuum" cube from the input cube to create the emission-line cube. In fact, as you see below, we can do it in a single Arithmetic command (blending the filtering and subtraction in one command). Note how the only difference with the previous Arithmetic command is that we added an ‘i’ before the ‘3’ and a ‘-’ after ‘filter-sigclip-median’. For more on Arithmetic's powerful notation, see *note Reverse polish notation::. With the second command below, let's view the input _and_ continuum-subtracted cubes together: $ astarithmetic a370-crop.fits set-i --output=no-continuum.fits \ i 3 0.2 1 1 100 i filter-sigclip-median - $ astscript-fits-view a370-crop.fits no-continuum.fits -h1 \ --ds9scale="limits -5 20" Once the cubes are open, slide through the different wavelengths. Comparing the left (input) and right (continuum-subtracted) slices, you will rarely see any galaxy in the continuum-subtracted one! As its name suggests, the continuum flux is continuously present in all the wavelengths (with gradual change)! But the continuum has been subtracted now; so in the right-side image, you don't see anything on wavelengths that don't contain a spectral emission line. Some dark regions also appear; these are absorption lines! Please spend a few minutes sliding through the wavelengths and seeing how the emission lines pop-up and disappear again. It is almost like scuba diving, with fish appearing out of nowhere and passing by you. Let's go to slice 3046 (corresponding to 8555.93 Angstroms; just before the H-alpha line for the brightest galaxy in *note Viewing spectra and redshifted lines::). Now press the "Next" button to change slices one by one until there is no more emission in the brightest galaxy. As you go to redder slices, you will see that not only does the brightness increase, but the position of the emission also changes. This is the Doppler effect (https://en.wikipedia.org/wiki/Doppler_effect) caused by the rotation of the galaxy: the side that rotating towards us gets blue-shifted to bluer slices and the one that is going away from us gets redshifted to redder slices. If you go to the emission lines of the other galaxies, you will see that they move with a different angle! We can use this to derive the galaxy's rotational properties and kinematics (Gnuastro doesn't have this feature yet). To see the Doppler shift in the spectrum, plot the spectrum over the top-side of the galaxy (which is visible in slice 3047). Then Zoom-in to the H-alpha line (as we did in *note Viewing spectra and redshifted lines::) and press "Next" until you reach the end of the H-alpha emission-line. You see that by the time H-alpha disappears in the spectrum, within the cube, the emission shifts in the vertical axis by about 15 pixels! Then, move the region across the same path that the emission passed. You will clearly see that the H-alpha and Nitrogen II lines also move with you, in the zoomed-in spectra. Again, try this for several other emission lines, and several other galaxies to get a good feeling of this important concept when using hyper-spectral 3D data. ---------- Footnotes ---------- (1) For more on why Sigma-clipping is only a crude solution to background removal, see Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664).  File: gnuastro.info, Node: 3D detection with NoiseChisel, Next: 3D measurements and spectra, Prev: Continuum subtraction, Up: Detecting lines and extracting spectra in 3D data 2.5.4 3D detection with NoiseChisel ----------------------------------- In *note Continuum subtraction:: we subtracted the continuum emission, leaving us with only noise and the absorption and emission lines. The absorption lines are negative and will be missed by detection methods that look for a positive skewness(1) (like *note NoiseChisel::). So we will focus on the detection and extraction of emission lines here. The first step is to extract the voxels that contain emission signal. To do that, we will be using *note NoiseChisel::. NoiseChisel and *note Segment:: operate on 2D images or 3D cubes. But by default, they are configured for 2D images (some parameters like tile size take a different number of values based on the dimensionality). Therefore, to do 3D detection, the first necessary step is to run NoiseChisel with the default 3D configuration file. To see where Gnuastro's programs are installed, you can run the following command (the printed output is the default location when you install Gnuastro from source, but if you used another installation method or manually set a different location, you will see a different output, just use that): $ which astnoisechisel /usr/local/bin/astnoisechisel As you see, the compiled binary programs (like NoiseChisel) are installed in the ‘bin/’ sub-directory of the install path (‘/usr/local’ in the example above, may be different on your system). The configuration files are in the ‘etc/’ sub-directory of the install path (here only showing NoiseChisel's configuration files): $ ls /usr/local/etc/astnoisechisel*.conf /usr/local/etc/astnoisechisel-3d.conf /usr/local/etc/astnoisechisel.conf We should therefore call NoiseChisel with the 3D configuration file like below (please change ‘/usr/local’ to any directory that you find from the ‘which’ command above): $ astnoisechisel --config=/usr/local/etc/astnoisechisel-3d.conf \ no-continuum.fits --output=det.fits But having to add this long ‘--config’ option is annoying and makes the command hard to read! To simplify the calling of NoiseChisel in 3D, let's first make a shell alias called ‘astnoisechisel-3d’ using the ‘alias’ command. Afterwards, we can just use the alias. Afterwards (in the second command below), we are calling the alias, producing the same output as above. Finally (with the last command), let's have a look at NoiseChisel's output: $ alias astnoisechisel-3d="astnoisechisel \ --config=/usr/local/etc/astnoisechisel-3d.conf" $ astnoisechisel-3d no-continuum.fits --output=det.fits $ astscript-fits-view det.fits Similar to its 2D outputs, NoiseChisel's output contains four extensions/HDUs (see *note NoiseChisel output::). For a multi-extension file with 3D data, ‘astscript-fits-view’ shows each cube as a separate DS9 "Frame". In this way, as you slide through the wavelengths, you see the same slice in all the cubes. The third and fourth extensions are the Sky and Sky standard deviation, which are not relevant here, so you can close them. To do that, press on the "Frame" button (in the top row of buttons), then press "delete" two times in the second row of buttons. As a final preparation, manually set the scale of ‘INPUT-NO-SKY’ cube to a fixed range so the changing flux/noise in each slice doesn't interfere with visually comparing the data in the slices as you move around: 1. Click on the ‘INPUT-NO-SKY’ cube, so it is selected. 2. Click on the "Scale" menu, then the "Scale Parameters". 3. For the "Low" value set -2 and for the "High" value set 5. 4. In the "Cube" window, slide between the slices to confirm that the noise level is visually fixed. 5. Go back to the first slice for the next steps. Note that the first and last couple of slices have much higher noise, don't worry about those. As you press the "Next" button in the first few slides, you will notice that the ‘DETECTION’ cube is fully black: showing that nothing has been detected. The first detection pops up in the 55th slice for the galaxy on the top of this cube. As you press "Next" you will see that the detection fades away and other detections pop up. Spend a few minutes shifting between the different slices and comparing the detected voxels with the emission lines in the continuum-subtracted cube (the ‘INPUT-NO-SKY’ extension). Go ahead to slice 2815 and press "Next" a few times. You will notice that the detections suddenly start covering the whole slice and until slice 2859 where the detection map becomes normal (no extra detections!). This is the effect of the sky lines we mentioned before in *note Sky lines in optical IFUs::. The increased noise makes the reduction very hard and as a result, a lot of artifacts appear. To reduce the effect of sky lines, we can divide the cube by its standard deviation (the square root of the variance or ‘STAT’ extension; see *note Sky lines in optical IFUs::) and run NoiseChisel afterwards. $ astarithmetic no-continuum.fits -h1 a370-crop.fits -hSTAT sqrt / \ --output=sn.fits $ astnoisechisel-3d sn.fits --output=det.fits $ astscript-fits-view det.fits After the new detection map opens have another look at the specific slices mentioned above (from slice 2851 to 2859). You will see that there are no more detection maps that cover the whole field of view. Scroll the slide counter across the whole cube, you will rarely see such effects by Sky lines any more. But this is just a crude solution and doesn't remove all sky line artifacts. For example go to slide 650 and press "Next". You will see that the artifacts caused by this sky line are so strong that the solution above wasn't successful. For these very strong emission lines, we need to improve the reduction. But generally, since the number of sky-line affected slices has significantly decreased, we can go ahead. ---------- Footnotes ---------- (1) But if you want to detect the absorption lines, just multiply the cube by $-1$ and repeat the same steps here (the noise is symmetric around 0).  File: gnuastro.info, Node: 3D measurements and spectra, Next: Extracting a single spectrum and plotting it, Prev: 3D detection with NoiseChisel, Up: Detecting lines and extracting spectra in 3D data 2.5.5 3D measurements and spectra --------------------------------- In the context of optical IFUs or radio IFUs in astronomy, a "Spectrum" is defined as separate measurements on each 2D slice of the 3D cube. Each 2D slice is defined by the first two FITS dimensions: the first FITS dimension is the horizontal axis and the second is the vertical axis. As with the tutorial on 2D image analysis (in *note Segmentation and making a catalog::), let's run Segment to see how it works in 3D. Like NoiseChisel above, to simplify the commands, let's make an alias (*note 3D detection with NoiseChisel::): $ alias astsegment-3d="astsegment \ --config=/usr/local/etc/astsegment-3d.conf" $ astsegment-3d det.fits --output=seg.fits $ astscript-fits-view seg.fits You see that we now have 3D clumps and 3D objects. So we can go ahead to do measurements. MakeCatalog can do single-valued measurements (as in 2D) on 3D datasets also. For example, with the command below, let's get the flux-weighted center (in the three dimensions) and sum of pixel values. There isn't usually a standard name for the third WCS dimension (unlike Ra/Dec). So in Gnuastro, we just call it ‘--w3’. With the second command, we are having a look at the first 5 rows. Note that we are not using ‘-Y’ with ‘asttable’ anymore because it the wavelength column would only be shown as zero (since it is in meters!). $ astmkcatalog seg.fits --ids --ra --dec --w3 --sum --output=cat.fits $ asttable cat.fits -h1 -O --txtf64p=5 --head=5 # Column 1: OBJ_ID [counter ,i32,] Object identifier. # Column 2: RA [deg ,f64,] Flux weighted center (WCS axis 1). # Column 3: DEC [deg ,f64,] Flux weighted center (WCS axis 2). # Column 4: AWAV [m ,f64,] Flux weighted center (WCS axis 3). # Column 5: SUM [input-units,f32,] Sum of sky subtracted values. 1 3.99677e+01 -1.58660e+00 4.82994e-07 7.311189e+02 2 3.99660e+01 -1.58927e+00 4.86411e-07 7.872681e+03 3 3.99682e+01 -1.59141e+00 4.90609e-07 1.314548e+03 4 3.99677e+01 -1.58666e+00 4.90816e-07 7.798024e+02 5 3.99659e+01 -1.58930e+00 4.93657e-07 3.255210e+03 Besides the single-valued measurements above (that are shared with 2D inputs), on 3D cubes, MakeCatalog can also do per-slice measurements. The options for these measurements are formatted as ‘--*in-slice’. With the command below, you can check their list: $ astmkcatalog --help | grep in-slice --area-in-slice [3D input] Number of labeled in each slice. --area-other-in-slice [3D input] Area of other lab. in projected area. --area-proj-in-slice [3D input] Num. voxels in '--sum-proj-in-slice'. --sum-err-in-slice [3D input] Error in '--sum-in-slice'. --sum-in-slice [3D input] Sum of values in each slice. --sum-other-err-in-slice [3D input] Area in '--sum-other-in-slice'. --sum-other-in-slice [3D input] Sum of other lab. in projected area. --sum-proj-err-in-slice [3D input] Error of '--sum-proj-in-slice'. --sum-proj-in-slice [3D input] Sum of projected area in each slice. For every label and measurement, these options will give many values in a vector column (see *note Vector columns::). Let's have a look by asking for the sum of values and area of each label in each slice associated to each label with the command below. There is just one important point: in *note 3D detection with NoiseChisel::, we ran NoiseChisel on the signal-to-noise image, not the continuum-subtracted image! So the values to use for the measurement of each label should come from the ‘no-continuum.fits’ file (not ‘seg.fits’). $ astmkcatalog seg.fits --ids --ra --dec --w3 --sum \ --area-in-slice --sum-in-slice --output=cat.fits \ --valuesfile=no-continuum.fits $ asttable -i cat.fits -------- seg_cat.fits (hdu: 1) ------- ----- ---- ------- No.Name Units Type Comment ------- ----- ---- ------- 1 OBJ_ID counter int32 Object identifier. 2 RA deg float64 Flux wht center (WCS 1). 3 DEC deg float64 Flux wht center (WCS 2). 4 AWAV m float64 Flux wht center (WCS 3). 5 SUM input-units float32 Sum of sky-subed values. 6 AREA-IN-SLICE counter int32(3681) Number of pix. in each slice. 7 SUM-IN-SLICE input-units float32(3681) Sum of values in each slice. -------- Number of rows: 211 -------- You can see that the new ‘AREA-IN-SLICE’ and ‘SUM-IN-SLICE’ columns have a ‘(3681)’ in their types. This shows that unlike the single-valued columns before them, in these columns, each row has 3681 values (a "vector" column). If you are not already familiar with vector columns, please take a few minutes to read *note Vector columns::. Since a MUSE data cube has 3681 slices, this is effectively the spectrum of each object. Let's find the object that corresponds to the H-alpha emission of the brightest galaxy (that we found in *note Viewing spectra and redshifted lines::). That emission line was around 8565.93 Angstroms, so let's look for the objects within $\pm5$ Angstroms of that value (between 8560 to 8570 Angstroms): $ asttable cat.fits --range=AWAV,8.560e-7,8.570e-7 -cobj_id,ra,dec -Y 198 39.965897 -1.589279 From the command above, we see that at this wavelength, there was only one object. Let's extract its spectrum by asking for the ‘sum-in-slice’ column: $ asttable cat.fits --range=AWAV,8.560e-7,8.570e-7 \ -carea-in-slice,sum-in-slice If you look into the outputs, you will see that it is a single line! It contains a long list of 0 values at the start and ‘nan’ values in the end. If you scroll slowly, in the middle of each you will see some non-zero and non-NaN numbers. To help interpret this more easily, let's transpose these vector columns (so each value of the vector column becomes a row in the output). We will use the ‘--transpose’ option of Table for this (just note that since transposition changes the number of rows, it can only be used when your table only has vector columns and they all have the same number of elements (as in this case, for more): $ asttable cat.fits --range=AWAV,8.560e-7,8.570e-7 \ -carea-in-slice,sum-in-slice --transpose We now see the measurements on each slice printed in a separate line (making it much more easier to visually read). However, without a counter, it is very hard to interpret them. Let's pipe the output to a new Table command and use column arithmetic's ‘counter’ operator for displaying the slice number (see *note Size and position operators::). Note that since we are piping the output, we also added ‘-O’ so the column metadata are also passed to the new instance of Table: $ asttable cat.fits --range=AWAV,8.560e-7,8.570e-7 -O \ -carea-in-slice,sum-in-slice --transpose \ | asttable -c'arith $1 counter swap',2 ...[[truncated]]... 3040 0 nan 3041 0 nan 3042 0 nan 3043 0 nan 3044 1 4.311140e-01 3045 18 3.936019e+00 3046 161 -5.800080e+00 3047 360 2.967184e+02 3048 625 1.912855e+03 3049 823 5.140487e+03 3050 945 7.174101e+03 3051 999 6.967604e+03 3052 1046 6.468591e+03 3053 1025 6.457354e+03 3054 996 6.599119e+03 3055 966 6.762280e+03 3056 873 5.014052e+03 3057 649 2.003334e+03 3058 335 3.167579e+02 3059 131 1.670975e+01 3060 25 -2.953789e+00 3061 0 nan 3062 0 nan 3063 0 nan 3064 0 nan ...[[truncated]]... $ astscript-fits-view seg.fits After DS9 opens with the last command above, go to slice 3044 (which is the first non-NaN slice in the spectrum above). In the ‘OBJECTS’ extension of this slice, you see several non-zero pixels. The few non-zero pixels on the bottom have a label of 197 and the single non-zero pixel at a higher Y axis position has a label of 198 (which as we saw above, was the label of the H-alpha emission of this galaxy). The few 197 labeled pixels in this slice are the last voxels of the NII emission that is just blue-ward of H-alpha. The single pixel you see in slice 3044 is why you see a value of 1 in the ‘AREA-IN-SLICE’ column. As you go to the next slices, if you count the pixels, you will see they add up to the same number you see in that column. The values in the ‘SUM-IN-SLICE’ are the sum of values in the continuum-subtracted cube for those same voxels. You should now be able to understand why the ‘--sum-in-slice’ column has NaN values in all other slices: because this label doesn't exist in any other slice! Also, within slices that contain label 198, this column only uses the voxels that have the label. So as you see in the second column above, the area that is used in each changes. Therefore ‘--sum-in-slice’ or ‘area-in-slice’ are the raw 3D spectrum of each 3D emission-line. This is a different concept from the traditional "spectrum" where the same area is used over all the slices. To get that you should use the ‘--sumprojinslice’ column of MakeCatalog. All the ‘--*in-slice’ options that contain a ‘proj’ in their name are measurements over the fixed "projection" of the 3D volume on the 2D surface of each slice. To see the effect, let's also ask MakeCatalog to measure this projected sum column: $ astmkcatalog seg.fits --ids --ra --dec --w3 --sum \ --area-in-slice --sum-in-slice --sum-proj-in-slice \ --output=cat.fits --valuesfile=no-continuum.fits $ asttable cat.fits --range=AWAV,8.560e-7,8.570e-7 -O \ -carea-in-slice,sum-in-slice,sum-proj-in-slice \ --transpose \ | asttable -c'arith $1 counter swap',2,3 ...[[truncated]]... 3040 0 nan 8.686357e+02 3041 0 nan 4.384907e+02 3042 0 nan 4.994813e+00 3043 0 nan -1.595918e+02 3044 1 4.311140e-01 -2.793141e+02 3045 18 3.936019e+00 -3.251023e+02 3046 161 -5.800080e+00 -2.709914e+02 3047 360 2.967184e+02 1.049625e+02 3048 625 1.912855e+03 1.841315e+03 3049 823 5.140487e+03 5.108451e+03 3050 945 7.174101e+03 7.149740e+03 3051 999 6.967604e+03 6.913166e+03 3052 1046 6.468591e+03 6.442184e+03 3053 1025 6.457354e+03 6.393185e+03 3054 996 6.599119e+03 6.572642e+03 3055 966 6.762280e+03 6.716916e+03 3056 873 5.014052e+03 4.974084e+03 3057 649 2.003334e+03 1.870787e+03 3058 335 3.167579e+02 1.057906e+02 3059 131 1.670975e+01 -2.415764e+02 3060 25 -2.953789e+00 -3.534623e+02 3061 0 nan -3.745465e+02 3062 0 nan -2.532008e+02 3063 0 nan -2.372232e+02 3064 0 nan -2.153670e+02 ...[[truncated]]... As you see, in the new ‘SUM-PROJ-IN-SLICE’ column, we have a measurement in each slice: including slices that do not have the label of 198 at all. Also, the area used to measure this sum is the same in all slices (similar to a classical spectrometer's output). However, there is a big problem: have a look at the sums in slices 3040 and 3041: the values are increasing! This is because of the emission in the NII line that also falls over the projected area of H-alpha. This shows the power of IFUs as opposed to classical spectrometers: we can distinguish between individual lines based on spatial position and do measurements in 3D! Finally, in case you want the spectrum with the continuum, you just have to change the file given to ‘--valuesfile’: $ astmkcatalog seg.fits --ids --ra --dec --w3 --sum \ --area-in-slice --sum-in-slice --sum-proj-in-slice \ --valuesfile=a370-crop.fits \ --output=cat-with-continuum.fits  File: gnuastro.info, Node: Extracting a single spectrum and plotting it, Next: Pseudo narrow-band images, Prev: 3D measurements and spectra, Up: Detecting lines and extracting spectra in 3D data 2.5.6 Extracting a single spectrum and plotting it -------------------------------------------------- In *note 3D measurements and spectra:: we measured the spectra of all the objects with the MUSE data cube of this demonstration tutorial. Let's now write the resulting spectra for our object 198 into a file to view our measured spectra in TOPCAT for a more visual inspection. But we don't want slice numbers (which are specific to MUSE), we want the horizontal axis to be in Angstroms. To do that, we can use the WCS information: ‘CRPIX3’ The "Coordinate Reference PIXel" in the 3rd dimension (or slice number of reference) Let's call this $s_r$. ‘CRVAL3’ The "Coordinate Reference VALue" in the 3rd dimension (the WCS coordinate of the slice in ‘CRPIX3’. Let's call this $\lambda_r$ ‘CDELT3’ The "Coordinate DELTa" in the 3rd dimension, or how much the WCS changes with every slice. Let's call this $\delta$. To find the $\lambda$ (wavelength) of any slice with number $s$, we can simply use this equation: $$\lambda=\lambda_r+\delta(s-s_r)$$ Let's extract these three values from the FITS WCS keywords as shell variables to automatically do this within Table's column arithmetic. Here we are using the technique that is described in *note Separate shell variables for multiple outputs::. $ eval $(astfits seg.fits --keyvalue=CRPIX3,CRVAL3,CDELT3 -q \ | xargs printf "sr=%s; lr=%s; d=%s;") ## Just for a check: $ echo $sr 1.000000e+00 $ echo $lr 4.749679687500000e-07 $ echo $d 1.250000000000000e-10 Now that we have the necessary constants, we can simply convert the equation above into *note Reverse polish notation:: and use column arithmetic to convert the slice counter into wavelength in the command of *note 3D measurements and spectra::. $ asttable cat.fits --range=AWAV,8.560e-7,8.570e-7 -O \ -carea-in-slice,sum-in-slice,sum-proj-in-slice \ --transpose \ | asttable -c'arith $1 counter '$sr' - '$d' x '$lr' + f32 swap' \ -c2,3 --output=spectrum-obj-198.fits \ --colmetadata=1,WAVELENGTH,m,"Wavelength of slice." \ --colmetadata=2,"AREA-IN-SLICE",voxel,"No. of voxels." $ astscript-fits-view spectrum-obj-198.fits Once TOPCAT opens, take the following steps: 1. In the "Graphics" menu, select "Plane plot". 2. Change ‘AREA-IN-SLICE’ to ‘SUM-PROJ-IN-SLICE’. 3. Select the "Form" tab. 4. Click on the button with the large green "+" button and select "Add line". 5. Un-select the "Mark" item that was originally selected. Of course, the table in ‘spectrum-obj-198.fits’ can be plotted using any other plotting tool you prefer to use in your scientific papers.  File: gnuastro.info, Node: Pseudo narrow-band images, Prev: Extracting a single spectrum and plotting it, Up: Detecting lines and extracting spectra in 3D data 2.5.7 Pseudo narrow-band images ------------------------------- In *note Continuum subtraction:: we subtracted/separated the continuum from the emission/absorption lines of our galaxy in the MUSE cube. Let's visualize the morphology of the galaxy at some of the spectral lines to see how it looks. To do this, we will create pseudo narrow-band 2D images by collapsing the cube along the third dimension within a certain wavelength range that is optimized for that flux. Let's find the wavelength range that corresponds to H-alpha emission we studied in *note Extracting a single spectrum and plotting it::. Fortunately MakeCatalog can calculate the minimum and maximum position of each label along each dimension like the command below. If you always need these values, you can include these columns in the same MakeCatalog with ‘--sum-proj-in-slice’. Here we are running it separately to help you follow the discussion there. $ astmkcatalog seg.fits --output=cat-ranges.fits \ --ids --min-x --max-x --min-y --max-y --min-z --max-z Let's extract the minimum and maximum positions of this particular object with the first command and with the second, we'll write them into different shell variables. With the second command, we are writing those six values into a single string in the format of Crop's *note Crop section syntax::. For more on the ‘eval’-based shell trick we used here, see *note Separate shell variables for multiple outputs::. Finally, we are running Crop and viewing the cropped 3D cube. $ asttable cat-ranges.fits --equal=OBJ_ID,198 \ -cMIN_X,MAX_X,MIN_Y,MAX_Y,MIN_Z,MAX_Z 56 101 11 61 3044 3060 $ eval $(asttable cat-ranges.fits --equal=OBJ_ID,198 \ -cMIN_X,MAX_X,MIN_Y,MAX_Y,MIN_Z,MAX_Z \ | xargs printf "section=%s:%s,%s:%s,%s:%s; ") $ astcrop no-continuum.fits --mode=img --section=$section \ --output=crop-no-continuum.fits $ astscript-fits-view crop-no-continuum.fits Go through the slices and you will only see this particular region of the full cube. We can now collapse the third dimension of this image into a 2D pseudo-narrow band image with Arithmetic's *note Dimensionality changing operators::: $ astarithmetic crop-no-continuum.fits 3 collapse-sum \ --output=collapsed-all.fits $ astscript-fits-view collapsed-all.fits During the collapse, used all the pixels in each slice. This is not good for the faint outskirts in the peak of the emission line: the noise of the slices with less signal decreases the over-all signal-to-noise ratio in the pseudo-narrow band image. So let's set all the pixels that aren't labeled with this object as NaN, then collapse. To do that, we first need to crop the ‘OBJECT’ cube in ‘seg.fits’. With the second command, please have a look to confirm how the labels change as a function of wavelength. $ astcrop seg.fits -hOBJECTS --mode=img --section=$section \ --output=crop-obj.fits $ astscript-fits-view crop-obj.fits Let's use Arithmetic to first set all the pixels that are not equal to 198 in ‘collapsed-obj.fits’ to be NaN in ‘crop-no-continuum.fits’. With the second command, we are opening the two collapsed images together: $ astarithmetic crop-no-continuum.fits set-i \ crop-obj.fits set-o \ i o 198 ne nan where 3 collapse-sum \ --output=collapsed-obj.fits $ astscript-fits-view collapsed-all.fits collapsed-obj.fits \ --ds9extra="-lock scalelimits yes -blink" Let it blink a few times and focus on the outskirts: you will see that the diffuse flux in the outskirts has indeed been preserved better in the object-based collapsed narrow-band image. But this is a little hard to appreciate in the 2D image. To see it better practice, let's get the two radial profiles. We will approximately assume a position angle of -80 and axis ratio of 0.7(1). With the final command below, we are opening both radial profiles in TOPCAT to visualize them. We are also undersampling the radial profile to have better signal-to-noise ratio in the outer radii: $ astscript-radial-profile collapsed-all.fits \ --position-angle=-80 --axis-ratio=0.7 \ --undersample=2 --output=collapsed-all-rad.fits $ astscript-radial-profile collapsed-obj.fits \ --position-angle=-80 --axis-ratio=0.7 \ --undersample=2 --output=collapsed-obj-rad.fits To view the difference, let's merge the two profiles (the ‘MEAN’ column) into one table and simply print the two profiles beside each other. We will then pipe the resulting table containing both columns to a second call to Gnuastro's Table and use column arithmetic to subtract the two mean values and divide them by the optimized one (to get the fractional difference): $ asttable collapsed-all-rad.fits --catcolumns=MEAN -O \ --catcolumnfile=collapsed-obj-rad.fits \ | asttable -c1,2,3 -c'arith $3 $2 - $3 /' \ --colmetadata=2,MEAN-ALL \ --colmetadata=3,MEAN-OBJ \ --colmetadata=4,DIFF,frac,"Fractional diff." -YO # Column 1: RADIUS [pix ,f32,] Radial distance # Column 2: MEAN-ALL [input-units,f32,] Mean of sky subtracted values. # Column 3: MEAN-OBJ [input-units,f32,] Mean of sky subtracted values. # Column 4: DIFF [frac ,f32,] Fractional diff. 0.000 436.737 450.256 0.030 2.000 371.880 384.071 0.032 4.000 313.429 320.138 0.021 6.000 275.744 280.102 0.016 8.000 152.214 154.470 0.015 10.000 59.311 62.207 0.047 12.000 18.466 20.396 0.095 14.000 6.940 8.671 0.200 16.000 3.052 4.256 0.283 18.000 1.590 2.848 0.442 20.000 1.430 2.550 0.439 22.000 0.838 1.975 0.576 As you see, beyond a radius of 10, the last fractional difference column becomes very large, showing that a lot of signal is missing in the ‘MEAN-ALL’ column. For a more visual comparison of the two profiles, you can use the command below to open both tables in TOPCAT: $ astscript-fits-view collapsed-all-rad.fits \ collapsed-obj-rad.fits Once TOPCAT has opened take the following steps: 1. Select ‘collapsed-all-rad.fits’ 2. In the "Graphics" menu, select "Plane Plot". 3. Click on the "Axes" side-bar (by default, at the bottom half of the window), and click on "Y Log" to view the vertical axis in logarithmic scale. 4. In the "Layers" menu, select "Add Position Control". You will see that at the bottom half, a new scatter plot information is displayed. 5. Click on the scroll-down menu in front of "Table" and select ‘2: collapsed-obj-rad.fits’. Afterwards, you will see the optimized pseudo-narrow-band image radial profile as blue points. ---------- Footnotes ---------- (1) To derive the axis ratio and position angle automatically, you can take the following steps. Note that we are not using NoiseChisel because this crop has been intentionally selected to contain signal, so there is no raw noise inside of it. $ aststatistics collapsed-all.fits --sky --tilesize=5,5 $ astarithmetic collapsed-all.fits -h1 collapsed-all_sky.fits -hSKY_STD / 5 gt \ -ocollapsed-lab.fits $ astmkcatalog collapsed-lab.fits -h1 --valuesfile=collapsed-all.fits \ --position-angle --axis-ratio $ asttable collapsed-all_arith_cat.fits -Y -78.817 0.694  File: gnuastro.info, Node: Color images with full dynamic range, Next: Zero point of an image, Prev: Detecting lines and extracting spectra in 3D data, Up: Tutorials 2.6 Color images with full dynamic range ======================================== Color images are fundamental tools to visualize astronomical datasets, allowing to visualize valuable physical information within them. A color image is a composite representation derived from different channels. Each channel usually corresponding to different filters (each showing wavelength intervals of the object's spectrum). In general, most common color image formats (like JPEG, PNG or PDF) are defined from a combination of Red-Green-Blue (RGB) channels (to cover the optical range with normal cameras). These three filters are hard-wired in your monitor and in most normal camera (for example smartphone or DSLR) pixels. For more on the concept and usage of colors, see *note Color:: and *note Colormaps for single-channel pixels::. However, normal images (that you take with your smartphone during the day for example) have a very limited dynamic range (difference between brightest and fainest part of an image). For example in an image you take from a farm, the brightness pixel (the sky) cannot be more than 255 times the faintest/darkest shadow in the image (because normal cameras produce unsigned 8 bit integers; containing $2^8=256$ levels; see *note Numeric data types::). However, astronomical sources span a much wider dynamic range such that their central parts can be tens of millions of times brighter than their larger outer regions. Our astronomical images in the FITS format are therefore usually 32-bit floating points to preserve this information. Therefore a simple linear scaling of 32-bit astronomical data to the 8-bit range will put most of the pixels on the darkest level and barely show anything! This presents a major challenge in visualizing our astronomical images on a monitor, in print or for a projector when showing slides. In this tutorial, we review how to prepare your images and create informative RGB images for your PDF reports. We start with aligning the images to the same pixel grid (which is usually necessary!) and using the low-level engine (Gnuastro's *note ConvertType:: program) directly to create an RGB image. Afterwards, we will use a higher-level installed script (*note Color images with gray faint regions::). This is a high-level wrapper over ConvertType that does some pre-processing and stretches the pixel values to enhance their 8-bit representation before calling ConvertType. * Menu: * Color channels in same pixel grid:: Warping all inputs to the same pixel grid. * Color image using linear transformation:: A linear color mapping won't show much! * Color for bright regions and grayscale for faint:: Show the full dynamic range. * Manually setting color-black-gray regions:: Physically motivated regions. * Weights contrast markers and other customizations:: Nice ways to enhance visual appearance.  File: gnuastro.info, Node: Color channels in same pixel grid, Next: Color image using linear transformation, Prev: Color images with full dynamic range, Up: Color images with full dynamic range 2.6.1 Color channels in same pixel grid --------------------------------------- In order to use different images as color channels, it is important that the images be properly aligned and on the same pixel grid. When your inputs are high-level products of the same survey, this is usually the case. However, in many other situations the images you plan to use as different color channels lie on different sky positions, even if they may have the same number of pixels. In this section we will show how to solve this problem. For an example dataset, let's use the same SDSS field that we used in *note Detecting large extended targets::: the field covering the outer parts of the M51 group. With the commands below, we'll make an ‘inputs’ directory and download and prepare the three g, r and i band images of SDSS over the same field there: $ mkdir in $ sdssurl=https://dr12.sdss.org/sas/dr12/boss/photoObj/frames $ for f in g r i; do \ wget $sdssurl/301/3716/6/frame-$f-003716-6-0117.fits.bz2 \ -O$f.fits.bz2; \ bunzip2 $f.fits.bz2; \ astfits $f.fits --copy=0 -oin/$f-sdss.fits; \ rm $f.fits; \ done Let's have a look at the three three images with the first command, and get their number of pixels with the second: ## Open the images locked by image coordinates $ astscript-fits-view in/*-sdss.fits ## Check the number of pixels along each axis of all images. $ astfits in/*-sdss.fits --keyvalue=NAXIS1,NAXIS2 in/g-sdss.fits 2048 1489 in/i-sdss.fits 2048 1489 in/r-sdss.fits 2048 1489 From the first command, the images look like they cover the same astronomical object (M51) in the same region of the sky, and with the second, we see that they have the same number of pixels. But this general visual inspection does not guarantee that the astronomical objects within the pixel grid cover exactly the same positions (within a pixel!) on the sky. Let's open the images again, but this time asking DS9 to only show one at a time, and to "blink" between them: $ astscript-fits-view in/*-sdss.fits \ --ds9extra="-single -zoom to fit -blink" If you pay attention, you will see that the objects within each image are at slightly different locations. If you don't immediately see it, try zooming in to any star within the image and let DS9 continue blinking. You will see that the star jumps a few pixels between each blink. In essence, the images are not aligned on the same pixel grid, therefore, the same source does not share identical image coordinates across these three images. As a consequence, it is necessary to align the images before making the color image, otherwise this misalignment will generate multiply-peaked point-sources (stars and centers of galaxies) and artificial color gradients in the more diffuse parts. To align the images to the same pixel grid, we will employ Gnuastro's *note Warp:: program. In particular, its features to *note Align pixels with WCS considering distortions::. Let's take the middle (r band) filter as the reference to define our grid. With the first command after building the ‘aligned/’ directory, let's align the r filter to the celestial coordinates (so the M51 group's position angle doesn't depend on the orientation of the telescope when it took this image). With for the other two filters, we will use Warp's ‘--gridfile’ option to ensure that ensure that their pixel grid and WCS exactly match the r band image, but the pixel values come from the other two filters. Finally, in the last command, we'll visualize the three aligned images. ## Put all three channels in the same pixel grid. $ mkdir aligned $ astwarp in/r-sdss.fits --output=aligned/r-sdss.fits $ astwarp in/g-sdss.fits --output=aligned/g-sdss.fits \ --gridfile=aligned/r-sdss.fits $ astwarp in/i-sdss.fits --output=aligned/i-sdss.fits \ --gridfile=aligned/r-sdss.fits ## Open the images locked by image coordinates $ astscript-fits-view aligned/*-sdss.fits \ --ds9extra="-single -zoom to fit -blink" As the images blink between each other, zoom in to some of the smaller stars and you will see that they no longer jump from one blink to the next. These images are now precisely pixel-aligned. We are now equipped with the essential data to proceed with the color image generation in *note Color image using linear transformation::.  File: gnuastro.info, Node: Color image using linear transformation, Next: Color for bright regions and grayscale for faint, Prev: Color channels in same pixel grid, Up: Color images with full dynamic range 2.6.2 Color image using linear transformation --------------------------------------------- Previously (in *note Color channels in same pixel grid::), we downloaded three SDSS filters of M51 and described how you can put them all in the same pixel grid. In this section, we will explore the raw and low-level process of generating color images using the input images (without modifying the pixel value distributions). We will use Gnuastro's ConvertType program (with executable name ‘astconvertt’). Let's create our first color image using the aligned SDSS images mentioned in the previous section. The order in which you provide the images matters, so ensure that you sort the filters from redder to bluer (iSDSS and gSDSS are respectively the reddest and bluest of the three filters used here). $ astconvertt aligned/i-sdss.fits aligned/r-sdss.fits \ aligned/g-sdss.fits -g1 --output=m51.pdf *Other color formats:* In the example above, we are using PDF because this is usually the best format to later also insert marks that are commonly necessary in scientific publications (see *note Marking objects for publication::. But you can also generate JPEG and TIFF outputs simply by using a different suffix for your output file (for example ‘--output=m51.jpg’ or ‘--output=m51.tiff’). Open the image with your PDF viewer and have a look. Do you see something? Initially, it appears predominantly black. However, upon closer inspection, you will discern very tiny points where some color is visible. These points correspond to the brightest part of the brightest sources in this field! The reason you saw much more structure when looking at the image in DS9 previously in *note Color channels in same pixel grid:: was that ‘astscript-fits-view’ used DS9's ‘-zscale’ option to scale the values in a non-linear way! Let's have another look at the images with the linear ‘minmax’ scaling of DS9: $ astscript-fits-view aligned/*-sdss.fits \ --ds9extra="-scale minmax -lock scalelimits" You see that it looks very similar to the PDF we generated above: almost fully black! This phenomenon exemplifies the challenge discussed at the start of this tutorial in *note Color images with full dynamic range::). Given the vast number of pixels close to the sky background level compared to the relatively few very bright pixels, visualizing the entire dynamic range simultaneously is tricky. To address this challenge, the low-level ConvertType program allows you to selectively choose the pixel value ranges to be displayed in the color image. This can be accomplished using the ‘--fluxlow’ and ‘--fluxhigh’ options of ConvertType. Pixel values below ‘--fluxlow’ are mapped to the minimum value (displayed as black in the default colormap), and pixel values above ‘--fluxhigh’ are mapped to the maximum value (displayed as white)) The choice of these values depends on the pixel value distribution of the images. But before that, we have to account for an important differences between the filters: the brightness of the background also has different values in different filters (the sky has colors!) So before making more progress, generally, first you have to subtract the sky from all three images you want to feed to the color channels. In a previous tutorial (*note Detecting large extended targets::) we used these same images as a basis to show how you can do perfect sky subtraction in the presence of large extended objects like M51. Here we are just doing a visualization and bringing pixels to 8-bit, so we don't need that level of precision reached there (we won't be doing photometry!). Therefore, let's just keep the ‘--tilesize=100,100’ of NoiseChisel. $ mkdir no-sky $ for f in i r g; do \ astnoisechisel aligned/$f-sdss.fits --tilesize=100,100 \ --output=no-sky/$f-sdss.fits; \ done *Accounting for zero points:* An important step that we have not implemented in this section is to unify the zero points of the three filters. In the case of SDSS (and some other surveys), the images have already been brought to the same zero point, but that is not generally the case. So before subtracting sky (and estimating the standard deviation) you should also unify the zero points of your images (for example through Arithmetic's ‘counts-to-nanomaggy’ or ‘counts-to-jy’ described in *note Unit conversion operators::). If you don't already have the zero point of your images, see the dedicated tutorial: *note Zero point of an image::. Now that we know the noise fluctuates around zero in all three images, we can start to define the values for the ‘--fluxlow’ and ‘--fluxhigh’. But the sky standard deviation comes from the sky brightness in different filters and is therefore different! Let's have a look by taking the median value of the ‘SKY_STD’ extension of NoiseChisel's output: $ aststatistics no-sky/i-sdss.fits -hSKY_STD --median 2.748338e-02 $ aststatistics no-sky/r-sdss.fits -hSKY_STD --median 1.678463e-02 $ aststatistics no-sky/g-sdss.fits -hSKY_STD --median 9.687680e-03 You see that the sky standard deviation of the reddest filter (i) is almost three times the bluest filter (g)! This is usually the case in any scenario (redder emission usually requires much less energy and gets absorbed less, so the background is usually brighter in the reddest filters). As a result, we should define our limits based on the noise of the reddest filter. Let's set the minimum flux to 0 and the maximum flux to ~50 times the noise of the i-band image ($0.027\times50=1.35$). $ astconvertt no-sky/i-sdss.fits no-sky/r-sdss.fits no-sky/g-sdss.fits \ -g1 --fluxlow=0.0 --fluxhigh=1.35 --output=m51.pdf After opening the new color image, you will observe that a spiral arm of M51 and M51B (or NGC5195, which is interacting with M51), become visible. However, the majority of the image remains black. Feel free to experiment with different values for ‘--fluxhigh’ to set the maximum value closer to the noise-level and see the more diffuse structures. For instance, try with ‘--fluxhigh=0.27’ the brightest pixels will have a signal-to-noise ratio of 10, or even ‘--fluxhigh=0.135’ for a signal-to-noise ratio of 5. But you will notice that, the brighter areas of the galaxy become "saturated": you don't see the structure of brighter parts of the galaxy any more. As you bring down the maximum threshold, the saturated areas also increase in size: loosing some useful information on the bright side! Let's go to the extreme and decrease the threshold to close the noise-level (for example ‘--fluxhigh=0.027’ to have a signal-to-noise ratio of 1)! You will see that the noise now becomes colored! You generally don't want this because the difference in filter values of one pixel are only physically meaningful when they have a high signal-to-noise ratio. For lower signal-to-noise ratios, we should avoid color. Ideally, we want to see both the brighter parts of the central galaxy, as well as the fainter diffuse parts together! But with the simple linear transformation here, that is not possible! You need some pre-processing (before calling ConvertType) to scale the images. For example, you can experiment with taking the logarithm or the square root of the images (using *note Arithmetic::) before creating the color image. These non-linear functions transform pixel values, mapping them to a new range. After applying such transformations, you can use the transformed images as inputs to ‘astconvertt’ to generate color images (similar to how we subtracted the sky; which is a linear operation). In addition to that, it is possible to use a different color schema for showing the different brightness ranges as it is explained in the next section. In the next section (*note Color for bright regions and grayscale for faint::), we'll review one high-level installed script which will simplify all these pre-processings and help you produce images with more information in them.  File: gnuastro.info, Node: Color for bright regions and grayscale for faint, Next: Manually setting color-black-gray regions, Prev: Color image using linear transformation, Up: Color images with full dynamic range 2.6.3 Color for bright regions and grayscale for faint ------------------------------------------------------ In the previous sections we aligned three SDSS images of M51 group *note Color channels in same pixel grid::, and created a linearly-scaled color image (only using ‘astconvertt’ program) in *note Color image using linear transformation::. But we saw that showing the brighter and fainter parts of the galaxy in a single image is impossible in the linear scale! In this section, we will use Gnuastro's ‘astscript-color-faint-gray’ installed script to address this problem and create images which visualize a major fraction of the contents of our astronomical data. This script aims to solve the problems mentioned in the previous section. See Infante-Sainz et al. 2024 (https://arxiv.org/abs/2401.03814), which first introduced this script, for examples of the final images we will be producing in this tutorial. This script uses a non-linear transformation to modify the bright input values before combining them to produce the color image. Furthermore, for the faint regions of the image, it will use grayscale and avoid color over all (as we saw, colored noised is not too nice to look at!). The faint regions are also inverted: so the brightest pixel in the faint (black-and-white or grayscale) region is black and the faintest pixels will be white. Black therefore creates a smooth transition from the colored bright pixels: the faintest colored pixel is also black. Since the background is white and the diffuse parts are black, the final product will also show nice in print or show on a projector (the background is not black, but white!). The SDSS image we used in the previous sections doesn't show the full glory of the M51 group! Therefore, in this section, we will use the wider images from the J-PLUS survey (https://www.j-plus.es). Fortunately J-PLUS includes the SDSS filters, so we can use the same iSDSS, rSDSSS, and gSDSS filters of J-PLUS. As a consequence, similar to the previous section, the R, G, and B channels are respectively mapped to the iSDSS, rSDSS and gSDSS filters of J-PLUS. The J-PLUS identification numbers for the images containing the M51 galaxy group are in these three filters are respectively: 92797, 92801, 92803. The J-PLUS images are already sky subtracted and aligned into the same pixel grid (so we will not need the ‘astwarp’ and ‘astnoisechisel’ steps before). However, zero point magnitudes of the J-PLUS images are different: 23.43, 23.74, 23.74. Also, the field of view of the J-PLUS Camera is very large and we only need a small region to see the M51 galaxy group. Therefore, we will crop the regions around the M51 group with a width of 0.35 degree wide (or 21 arcmin) and put the crops in the same ‘aligned/’ directory we made before (which contains the inputs to the colored images). With all the above information, let's download, crop, and have a look at the images to check that everything is fine. Finally, let's run ‘astscript-color-faint-gray’ on the three cropped images. ## Download $ url=https://archive.cefca.es/catalogues/vo/siap/jplus-dr3/get_fits?id= $ wget "$url"92797 -Oin/i-jplus.fits.fz $ wget "$url"92801 -Oin/r-jplus.fits.fz $ wget "$url"92803 -Oin/g-jplus.fits.fz ## Crop $ widthdeg=0.35 $ ra=202.4741207 $ dec=47.2171879 $ for f in i r g; do \ astcrop in/$f-jplus.fits.fz --center=$ra,$dec \ --width=$widthdeg --output=aligned/$f-jplus.fits; \ done ## Visual inspection of the images used for the color image $ astscript-fits-view aligned/*-jplus.fits ## Create colored image. $ R=aligned/i-jplus.fits $ G=aligned/r-jplus.fits $ B=aligned/g-jplus.fits $ astscript-color-faint-gray $R $G $B -g1 --output=m51.pdf After opening the PDF, you will notice that it is a color image with a gray background, making the M51 group and background galaxies visible together. However, the images does not look nice and there is significant room for improvement! You will notice that at the end of its operation, the script printed some numerical values for four options in a table, to show automatically estimated parameter values. To enhance the output, let's go through and explain these step by step. The first important point to take into account is the photometric calibration. If the images are photometrically calibrated, then it is necessary to use the calibration to put the images in the same physical units and create "real" colors. The script is able to do it through the zero point magnitudes with the option ‘--zeropoint’ (or ‘-z’). With this option, the images are internally transformed to have the same pixel units and then create the color image. Since the magnitude zero points are 23.43, 23.74, 23.74 for the i, r, and g images, let's use them in the definition $ astscript-color-faint-gray $R $G $B -g1 --output=m51.pdf \ -z23.43 -z23.74 -z23.74 Open the image and have a look. This image does not differ too much from the one generated by default (not using the zero point magnitudes). This is because the zero point values used here are similar for the three images. But in other datasets the calibration could make a big difference! Let's consider another vital parameter: the minimum value to be displayed (‘--minimum’ or ‘-m’). Pixel values below this number will not be shown on the color image. In general, if the sky background has been subtracted (see *note Color image using linear transformation::), you can use the same value (0) for all three. However, it is possible to consider different minimum values for the inputs (in this case use as many ‘-m’ as input images). In this particular case, a minimum value of zero for all images is suitable. To keep the command simple, we'll add the zero point, minimum and HDU of each image in the variable that also had its filename. $ R="aligned/i-jplus.fits -h1 --zeropoint=23.43 --minimum=0.0" $ G="aligned/r-jplus.fits -h1 --zeropoint=23.74 --minimum=0.0" $ B="aligned/g-jplus.fits -h1 --zeropoint=23.74 --minimum=0.0" $ astscript-color-faint-gray $R $G $B --output=m51.pdf In contrast to the previous image, the new PDF (with a minimum value of zero) exhibits a better background visualization because it is avoiding negative pixels to be included in the scaling (they are white). Now let's review briefly how the script modifies the pixel value distribution in order to show the entire dynamical range in an appropriate way. The script combines the three images into a single one by using a the mean operator, as a consequence, the combined image is the average of the three R, G, and B images. This averaged image is used for performing the asinh transformation of Lupton et al. 2004 (https://ui.adsabs.harvard.edu/abs/2004PASP..116..133L) that is controlled by two parameters: ‘--qbright’ ($q$) and ‘--stretch’ ($s$). The asinh transformation consists in transforming the combined image ($I$) according to the expression: $f(I) = asinh(q\times{}s\times{}I)/q$. When $q\rightarrow0$, the expression becomes linear with a slope of the "stretch" ($s$) parameter: $f(I) = s\times{}I$. In practice, we can use this characteristic to first set a low value for ‘--qbright’ and see the brighter parts in color, while changing the parameter ‘--stretch’ to show linearly the fainter regions (outskirts of the galaxies for example. The image obtained previously was computed by the default parameters (‘--qthresh=1.0’ and ‘--stretch=1.0’). So, let's set a lower value for ‘--qbright’ and check the result. $ astscript-color-faint-gray $R $G $B --output=m51-qlow.pdf \ --qbright=0.01 Comparing ‘m51.pdf’ and ‘m51-qlow.pdf’, you will see that a large area of the previously colored colored pixels have become black. Only the very brightest pixels (core of the galaxies and stars) are shown in color. Now, let's bring out the fainter regions around the brightest pixels linearly by increasing ‘--stretch’. This allows you to reveal fainter regions, such as outer parts of galaxies, spiral arms, stellar streams, and similar structures. Please, try different values to see the effect of changing this parameter. Here, we will use the value of ‘--stretch=100’. $ astscript-color-faint-gray $R $G $B --output=m51-qlow-shigh.pdf \ --qbright=0.01 --stretch=100 Do you see how the spiral arms and the outskirts of the galaxies have become visible as ‘--stretch’ is increased? After some trials, you will have the necessary feeling to see how it works. Please, play with these two parameters until you obtain the desired results. Depending on the absolute pixel values of the input images and the photometric calibration, these two parameters will be different. So, when using this script on your own data, take your time to study and analyze which parameters are good for showing the entire dynamical range. For this tutorial, we will keep it simple and use the previous parameters. Let's define a new variable to keep the parameters already discussed so we have short command-line examples. $ params="--qbright=0.01 --stretch=100" $ astscript-color-faint-gray $R $G $B $params --output=m51.pdf $ rm m51-qlow.pdf m51-qlow-shigh.pdf Having a separate color-map for the fainter parts is generally a good thing, but for some reason you may not want it! To disable this feature, you can use the ‘--coloronly’ option: $ astscript-color-faint-gray $R $G $B $params --coloronly \ --output=m51-coloronly.pdf Open the image and note that now the coloring has gone all the way into the noise (producing a black background). In contrast with the gray background images before, the fainter/smaller stars/galaxies and the low surface brightness features are not visible anymore! These regions show the interaction of two galaxies; as well as all the other background galaxies and foreground stars. These structures were entirely hidden in the "only-color" images. Consequently, the gray background color scheme is particularly useful for visualizing the most features of your data and you will rarely need to use the ‘--coloronly’ option. We will therefore not use this option anymore in this tutorial; and let's clean the temporary file made before: $ rm m51-coloronly.pdf Now that we have the basic parameters are set, let's consider other parameters that allow to fine tune the three ranges of values: color for the brightest pixel values, black for intermediate pixel values, and gray for the faintest pixel values: • ‘--colorval’ defines the boundary between the color and black regions (the lowest pixel value that is colored). • ‘--grayval’ defines the boundary between the black and gray regions (the highest gray value). Looking at the last lines that the script prints, we see that the default value estimated for ‘--colorval’ and ‘--grayval’ are roughly 1.4. What do they mean? To answer this question it is necessary to have a look at the image that is used to separate those different regions. By default, this image is computed internally by the script and removed at the end. To have a look at it, you need to use the option ‘--keeptmp’ to keep the temporary files. Let's put the temporary files into the ‘tmp’ directory with the option ‘--tmpdir=tmp --keeptmp’. The first will use the name ‘tmp’ for the temporary directory and with the second, we ask the script to not delete (keep) it after all operations are done. $ astscript-color-faint-gray $R $G $B $params --output=m51.pdf \ --tmpdir=tmp --keeptmp The image that defines the thresholds is ‘./tmp/colorgray_threshold.fits’. By default, this image is the asinh-transformed image with the pixel values between 0 (faint) and 100 (bright). If you obtain the statistics of this image, you will see that the median value is exactly the value that the script is giving as the ‘--colorval’. $ aststatistics ./tmp/colorgray_threshold.fits In other words, all pixels between 100 and this value (1.4) on the threshold image will be shown in color. To see its effect, let's increase this parameter to ‘--colorval=25’. By doing this, we expect that only bright pixels (those between 100 and 25 in the threshold image) will be in color. $ astscript-color-faint-gray $R $G $B $params --colorval=25 \ --output=m51-colorval.pdf Open ‘m51-colorval.pdf’ and check that it is true! Only the central part of the objects (very bright pixels, those between 100 and 25 on the threshold image) are shown in color. Fainter pixels (below 25 on the threshold image) are shown in black and gray. However, in many situations it is good to be able to show the outskirts of galaxies and low surface brightness features in pure black, while showing the background in gray. To do that, we can use another threshold that separates the black and gray pixels: ‘--grayval’. Similar to ‘--colorval’, the ‘--grayval’ option defines the separation between the pure black and the gray pixels from the threshold image. For example, by setting ‘--grayval=5’, those pixels below 5 in the threshold image will be shown in gray, brighter pixels will be shown in black until the value 25. Pixels brighter than 25 are shown in color. $ astscript-color-faint-gray $R $G $B $params --output=m51-check.pdf \ --colorval=25 --grayval=5 Open the image and check that the regions shown in color are smaller (as before), and that now there is a region around those color pixels that are in pure black. After the black pixels toward the fainter ones, they are shown in gray. As explained above, in the gray region, the brightest are black and the faintest are white. It is recommended to experiment with different values around the estimated one to have a feeling on how it changes the image. To have even better idea of those regions, please run the following example to keep temporary files and check the labeled image it has produced: $ astscript-color-faint-gray $R $G $B $params --output=m51-check.pdf \ --colorval=25 --grayval=5 \ --tmpdir=tmp --keeptmp $ astscript-fits-view tmp/total_mask-2color-1black-0gray.fits In this segmentation image, pixels equal to 2 will be shown in color, pixels equal to 1 will be shown as pure black, and pixels equal to zero are shown in gray. By default, the script sets the same value for both thresholds. That means that there is not many pure black pixels. By adjusting the ‘--colorval’ and ‘--grayval’ parameters, you can obtain an optimal result to show the bright and faint parts of your data within one printable image. The values used here are somewhat extreme to illustrate the logic of the procedure, but we encourage you to experiment with values close to the estimated by default in order to have a smooth transition between the three regions (color, black, and gray). The script can provide additional information about the pixel value distributions used to estimate the parameters by using the ‘--checkparams’ option. To conclude this section of the tutorial, let's clean up the temporary test files: $ rm m51-check.pdf m51-colorval.pdf  File: gnuastro.info, Node: Manually setting color-black-gray regions, Next: Weights contrast markers and other customizations, Prev: Color for bright regions and grayscale for faint, Up: Color images with full dynamic range 2.6.4 Manually setting color-black-gray regions ----------------------------------------------- In *note Color for bright regions and grayscale for faint::, we created a non-linear colored image. We used the ‘--colorval’ and ‘--grayval’ options to specify which regions to show in gray (faintest values), black (intermediate values) and color (brightest values). We also saw that the script uses a labeled image with three possible values for each pixel to identify how that pixel should be colored. A useful feature of this script is the possibility of providing this labeled image as an input directly. This expands the possibilities of generating color images in a more quantitative way. In this section, we'll use this feature to use a more physically motivated criteria to select these three regions (the surface brightness in the reddest band). First, let's generate a surface brightness image from the R channel. That is, the value of each pixel will be in the units of surface brightness (mag/arcsec$^2$). To do that, we need obtain the pixel area in arcsec and use the zero point value of the image. Then, the ‘counts-to-sb’ operator of ‘astarithmetic’ is used. For more on the conversion of NaN surface brightness values and the value to ‘R_sbl’ (which is roughly the surface brightness limit of this image), see *note FITS images in a publication::. $ sb_sbl=26 $ sb_zp=23.43 $ sb_img=aligned/i-jplus.fits $ pixarea=$(astfits $sb_img --pixelareaarcsec2 --quiet) # Compute the SB image (set NaNs to SB of 26!) $ astarithmetic $sb_img $sb_zp $pixarea counts-to-sb set-sb \ sb sb isblank sb $sb_sbl gt or $sb_sbl where \ --output=sb.fits # Have a look at the image $ astscript-fits-view sb.fits --ds9scale=minmax \ --ds9extra="-invert" Remember that because ‘sb.fits’ is a surface brightness image where lower values are brighter and higher values are fainter. Let's build the labeled image that defines the regions (‘regions.fits’) step-by-step with the following criteria in surface brightness (SB) $\rm{SB}<23$ These are the brightest pixels, we want these in color. In the regions labeled image, these should get a value of 2. $23<\rm{SB}<25$ These are the intermediate pixel values, to see the fainter parts better, we want these in pure black (no change in color in this range). In the regions labeled image, these should get a value of 1. $\rm{SB}>25$ These are the faintest pixel values, we want these in a gray color map (pixels with an SB of 25 will be black and as they become fainter, they will become lighter shades of gray). In the regions labeled image, these should get a value of 0. # SB thresholds (low and high) $ sb_faint=25 $ sb_bright=23 # Select the three ranges of pixels. $ astarithmetic sb.fits set-sb \ sb $sb_bright lt set-color \ sb $sb_bright ge sb $sb_faint lt and set-black \ color 2 u8 x black + \ --output=regions.fits # Check the images $ astscript-fits-view regions.fits We can now use this labeled image with the ‘--regions’ option for obtaining the final image with the desired regions (the ‘R’, ‘G’, ‘B’ and ‘params’ shell variables were set previously in *note Color for bright regions and grayscale for faint::): $ astscript-color-faint-gray $R $G $B $params --output=m51-sb.pdf \ --regions=regions.fits Open ‘m51-sb.pdf’ and have a look. Do you see how the different regions (SB intervals) have been colored differently? They come from the SB levels we defined, and because it is using absolute thresholds in physical units of surface brightness, the visualization is not only a nice looking color image, but can be used in scientific analysis. This is really interesting because now it is possible to use color images for detecting low surface brightness features at the same time they provide quantitative measurements. Of course, here we have defined this region label image just using two surface brightness values, but it is possible to define any other labeled region image that you may need for your particular purpose.  File: gnuastro.info, Node: Weights contrast markers and other customizations, Prev: Manually setting color-black-gray regions, Up: Color images with full dynamic range 2.6.5 Weights, contrast, markers and other customizations --------------------------------------------------------- Previously (in *note Manually setting color-black-gray regions::) we used an absolute (in units of surface brightness) thresholding for selecting which regions to show by color, black and gray. To keep the previous configurations and avoid long commands, let's add the previous options to the ‘params’ shell variable. To help in readability, we will repeat the other shell variables from previous sections also: $ R="aligned/i-jplus.fits -h1 --zeropoint=23.43 --minimum=0.0" $ G="aligned/r-jplus.fits -h1 --zeropoint=23.74 --minimum=0.0" $ B="aligned/g-jplus.fits -h1 --zeropoint=23.74 --minimum=0.0" $ params="--regions=regions.fits --qbright=0.01 --stretch=100" $ astscript-color-faint-gray $R $G $B $params --output=m51.pdf To modify the color balance of the output image, you can weigh the three channels differently with the ‘--weight’ or ‘-w’ option. For example, by using ‘-w1 -w1 -w2’, you give two times more weight to the blue channel than to the red and green channels: $ astscript-color-faint-gray $R $G $B $params -w1 -w1 -w2 \ --output=m51-weighted.pdf The colored pixels of the output are much bluer now and the distinction between the two merging galaxies is more clear. However, keep in mind that altering the different filters can lead to incorrect subsequent analyses by the readers/viewers of this work (for example they will falsely think that the galaxy is blue, and not red!). If the reduction and photometric calibration are correct, and the images represent what you consider as the red, green, and blue channels, then the output color image should be suitable without weights. In certain situations, the combination of channels may not have a traditional color interpretation. For instance, combining an X-ray channel with an optical filter and a far-infrared image can complicate the interpretation in terms of human understanding of color. But the physical interpretation remains valid as the different channels (colors in the output) represent different physical phenomena of astronomical sources. Another easier example is the use of narrow-band filters such as the H-alpha of J-PLUS survey. This is shown in the Bottom-right panel of Figure 1 by Infante-Sainz et al. 2024 (https://arxiv.org/abs/2401.03814), in this case the G channel has been substituted by the image corresponding to the H-alpha filter to show the star formation regions. Therefore, please use the weights with caution, as it can significantly affect the output and misinform your readers/viewers. If you do apply weights be sure to report the weights in the caption of the image (beside the filters that were used for each channel). With great power there must also come great responsibility! Two additional transformations are available to modify the appearance of the output color image. The linear transformation combines bias adjustment and contrast enhancement through the ‘--bias’ and ‘--contrast’ options. In most cases, only the contrast adjustment is necessary to improve the quality of the color image. To illustrate the impact of adjusting image contrast, we will generate an image with higher contrast and compare with the previous one. $ astscript-color-faint-gray $R $G $B $params --contrast=2 \ --output=m51-contrast.pdf When you compare this (‘m51-contrast.pdf’) with the previous output (‘m51.pdf’), you see that the colored parts are now much more clear! Use this option also with caution because it may happen that the bright parts become saturated. Another option available for transforming the image appearance is the gamma correction, a non-linear transformation that can be useful in specific cases. You can experiment with different gamma values to observe the impact on the resulting image. Lower gamma values will enhance faint structures, while higher values will emphasize brighter regions. Let's have a look by giving two very different values to it with the simple loop below: $ for g in 0.4 2.0; do \ astscript-color-faint-gray $R $G $B $params --contrast=2 \ --gamma=$g --output=m51-gamma-$g.pdf; \ done Comparing the last three files (‘m51-contrast.pdf’, ‘m51-gamma-0.4.pdf’ and ‘m51-gamma-2.0.pdf’), you will clearly see the effect of the ‘--gamma’. Instead of using a combination of the three input images for the gray background, you can introduce a fourth image that will be used for generating the gray background. This image is referred to as the "K" channel and may be useful when a particular filter is deeper, has unique characteristics, or you have built by some custom processing to show the diffuse features better. In this case, this image will be used for defining the ‘--colorval’ and ‘--grayval’ thresholds, but the rationale remains the same as explained earlier. Two additional options are available to smooth different regions by convolving with a Gaussian kernel: ‘--colorkernelfwhm’ for smoothing color regions and ‘--graykernelfwhm’ for convolving gray regions. The value specified for these options represents the full width at half maximum of the Gaussian kernel. Finally, another commonly useful feature is ‘--markoptions’: it allows you to mark and label the final output image with vector graphics over the color image. The arguments passed through this option are directly passed to ConvertType for the generation of the output image. This feature was already used in *note Marking objects for publication:: of the *note General program usage tutorial::; see there for a more complete introduction. Let's create four marks/labels just to illustrate the procedure within ‘astscript-color-faint-gray’. First we need to create a table that contains the parameters for creating the marks (coordinates, shape, size, colors, etc.). In order to have an example that could be easily salable to more marks, with elaborated options let's create it by parts: the header with the column names, and the parameters. With the following commands, we'll create the header that contains the column metadata. echo "# Column 1: ra [pix, f32] RA coordinate" > markers.txt echo "# Column 2: dec [pix, f32] Dec coordinate" >> markers.txt echo "# Column 3: shape [none, u8] Marker shape" >> markers.txt echo "# Column 4: size [pix, f32] Marker Size" >> markers.txt echo "# Column 5: aratio [none, f32] Axis ratio" >> markers.txt echo "# Column 6: angle [deg, f32] Position angle" >> markers.txt echo "# Column 7: color [none, u8] Marker color" >> markers.txt Next is to create the parameters that define the markers. In this case, with the lines below we create four markers (cross, ellipse, square, and line) at different positions, with different shapes, and colors. These lines are appended to the header file created previously. echo "400.00 400.00 3 60.000 0.50 0.000 8" >> markers.txt echo "1800.0 400.00 4 120.00 0.30 45.00 58" >> markers.txt echo "400.00 1800.0 6 180.00 1.00 0.000 85" >> markers.txt echo "1800.0 1800.0 8 240.00 1.00 -45.0 25" >> markers.txt Now that we have the table containing the definition of the markers, we use the ‘--markoptions’ option of this script. This option will pass what ever is given to it directly to ConvertType, so you can use all the options in *note Drawing with vector graphics::. For this basic example, let's give it the following options: markoptions="--mode=img \ --sizeinarcsec \ --markshape=shape \ --markrotate=angle \ --markcolor=color \ --marks=markers.txt \ --markcoords=ra,dec \ --marksize=size,aratio" The last step consists in executing the script with the option that provides all the markers options. $ astscript-color-faint-gray $R $G $B $params --contrast=2 \ --markoptions="$markoptions" \ --output=m51-marked.pdf Open the ‘m51-marked.pdf’ and check that the four markers have been printed on the image. With this quick example we just show the possibility of drawing markers on images very easily. This task can be automated, for example by plotting markers from a given catalog at specific positions, and so on. Note that there are many other options for customize your markers/drawings over an output of ConvertType, see *note Drawing with vector graphics:: and *note Marking objects for publication::. Congratulations! By following the tutorial up to this point, we have been able to reproduce three images of Infante-Sainz et al. 2024 (https://arxiv.org/abs/2401.03814). You can see the commands that were used to generate them within the reproducible source of that paper at <https://codeberg.org/gnuastro/papers/src/branch/color-faint-gray>. Remember that this paper is exactly reproducible with Maneage, so you can explore and build the entire paper by yourself. For more on Maneage, see Akhlaghi et al. 2021 (https://ui.adsabs.harvard.edu/abs/2021CSE....23c..82A). This tutorial provided a general overview of the various options to construct a color image from three different FITS images using the ‘astscript-color-faint-gray’ script. Keep in mind that the optimal parameters for generating the best color image depend on your specific goals and the quality of your input images. We encourage you to follow this tutorial with the provided J-PLUS images and later with your own dataset. See *note Color images with gray faint regions:: for more information, and please consider citing Infante-Sainz et al. 2024 (https://arxiv.org/abs/2401.03814) if you use this script in your work (the full BibTeX entry of this paper will be given to you with the ‘--cite’ option).  File: gnuastro.info, Node: Zero point of an image, Next: Pointing pattern design, Prev: Color images with full dynamic range, Up: Tutorials 2.7 Zero point of an image ========================== The "zero point" of an image is astronomical jargon for the calibration factor of its pixel values; allowing us to convert the raw pixel values to physical units. It is therefore a critical step during data reduction. For more on the definition and importance of the zero point magnitude, see *note Brightness flux magnitude:: and *note Zero point estimation::. In this tutorial, we will use Gnuastro's ‘astscript-zeropoint’, to estimate the zero point of a single exposure image from the J-PLUS survey (https://www.j-plus.es), while using an SDSS (http://www.sdss.org) image as reference (recall that all SDSS images have been calibrated to have a fixed zero point of 22.5). In this case, both images that we are using were taken with the SDSS _r_ filter. See Eskandarlou et al. 2023 (https://arxiv.org/abs/2312.04263). *Same filters and SVO filter database:* It is very important that both your images are taken with the same filter. When looking at filter names, don't forget that different filter systems sometimes have the same names for one filter, such as the name "R"; which is used in both the Johnson and SDSS filter systems. Hence if you confront an image in the "R" or "r" filter, double check to see exactly which filter system it corresponds to. If you know which observatory your data came from, you can use the SVO database (http://svo2.cab.inta-csic.es/theory/fps) to confirm the similarity of the transmission curves of the filters of your input and reference images. SVO contains the filter data for many of the observatories world-wide. * Menu: * Zero point tutorial with reference image:: Using a reference image. * Zero point tutorial with reference catalog:: Using a reference catalog.  File: gnuastro.info, Node: Zero point tutorial with reference image, Next: Zero point tutorial with reference catalog, Prev: Zero point of an image, Up: Zero point of an image 2.7.1 Zero point tutorial with reference image ---------------------------------------------- First, let’s create a directory named ‘tutorial-zeropoint’ to keep things clean and work in that. Then, with the commands below, you can download an image from J-PLUS and SDSS. To speed up the analysis, the image is cropped to have a smaller region around its center. $ mkdir tutorial-zeropoint $ cd tutorial-zeropoint $ jplusdr2=http://archive.cefca.es/catalogues/vo/siap/jplus-dr2/reduced $ wget $jplusdr2/get_fits?id=771463 -O jplus.fits.fz $ astcrop jplus.fits.fz --center=107.7263,40.1754 \ --width=0.6 --output=jplus-crop.fits Although we cropped the J-PLUS image, it is still very large in comparison with the SDSS image (the J-PLUS field of view is almost $1.5\times1.5$ deg$^2$, while the field of view of SDSS in each filter is almost $0.3\times0.5$ deg$^2$). Therefore, let's download two SDSS images (and then decompress them) in the region of the cropped J-PLUS image to have a more accurate result compared to a single SDSS footprint: generally, your zero point estimation will have less scatter with more overlap between your reference image(s) and your input image. $ sdssbase=https://dr12.sdss.org/sas/dr12/boss/photoObj/frames $ wget $sdssbase/301/6509/5/frame-r-006509-5-0115.fits.bz2 \ -O sdss1.fits.bz2 $ wget $sdssbase/301/6573/5/frame-r-006573-5-0174.fits.bz2 \ -O sdss2.fits.bz2 $ bunzip2 sdss1.fits.bz2 $ bunzip2 sdss2.fits.bz2 To have a feeling of the data, let's open the three images with ‘astscript-fits-view’ using the command below. Wait a few seconds to see the three images "blinking" one after another. The largest one is the J-PLUS crop and the two smaller ones that partially cover it in different regions are from SDSS. $ astscript-fits-view sdss1.fits sdss2.fits jplus-crop.fits \ --ds9extra="-lock frame wcs -single -zoom to fit -blink yes" The test above showed that the three images are already astrometrically calibrated (the coverage of the pixel positions on the sky is correct in both). To confirm, you can zoom-in to a certain object and confirm it on a pixel level. It is always good to do the visual check above when you are confronted with new images (and may not be confident about the accuracy of the astrometry). Do not forget that the goal here is to find the calibration of pixel values; and that we assume pixel positions are already calibrated (the image already has a good astrometry). The SDSS images are Sky subtracted, while this single-exposure J-PLUS image still contains the counts related to the Sky emission within them. In the J-PLUS survey, the sky-level in each pixel is kept in a separate ‘BACKGROUND_MODEL’ HDU of ‘jplus.fits.fz’; this allows you to use a different sky if you like. The SDSS image FITS files also have multiple extensions. To understand our inputs, let's have a fast look at the basic info of each: $ astfits sdss1.fits Fits (GNU Astronomy Utilities) 0.22 Run on Fri Apr 14 11:24:03 2023 ----- HDU (extension) information: 'sdss1.fits'. Column 1: Index (counting from 0, usable with '--hdu'). Column 2: Name ('EXTNAME' in FITS standard, usable with '--hdu'). ('n/a': no name in HDU metadata) Column 3: Image data type or 'table' format (ASCII or binary). Column 4: Size of data in HDU. Column 5: Units of data in HDU (only images). ('n/a': no unit in HDU metadata, or HDU is a table) ----- 0 n/a float32 2048x1489 nanomaggy 1 n/a float32 2048 n/a 2 n/a table_binary 1x3 n/a 3 n/a table_binary 1x31 n/a $ astfits jplus.fits.fz Fits (GNU Astronomy Utilities) 0.22 Run on Fri Apr 14 11:21:30 2023 ----- HDU (extension) information: 'jplus.fits.fz'. Column 1: Index (counting from 0, usable with '--hdu'). Column 2: Name ('EXTNAME' in FITS standard, usable with '--hdu'). ('n/a': no name in HDU metadata) Column 3: Image data type or 'table' format (ASCII or binary). Column 4: Size of data in HDU. Column 5: Units of data in HDU (only images). ('n/a': no unit in HDU metadata, or HDU is a table) ----- 0 n/a no-data 0 n/a 1 IMAGE float32 9216x9232 adu 2 MASKED_PIXELS int16 9216x9232 n/a 3 BACKGROUND_MODEL float32 9216x9232 n/a 4 MASK_MODEL uint8 9216x9232 n/a Therefore, in order to be able to compare the SDSS and J-PLUS images, we should first subtract the sky from the J-PLUS image. To do that, we can either subtract the ‘BACKGROUND_MODEL’ HDU from the ‘IMAGE’ HDU using *note Arithmetic::, or we can use *note NoiseChisel:: to find a good sky ourselves. As scientists we like to tweak and be creative, so let's estimate it ourselves with the command below. Generally, you may not have a pre-estimated Sky estimation like above, so you should be prepared to subtract the sky yourself. $ astnoisechisel jplus-crop.fits --output=jplus-nc.fits $ astscript-fits-view jplus-nc.fits Notice that there is a relatively bright star in the center-bottom of the image. In the "Cube" window, click on the "Next" button to see the ‘DETECTIONS’ HDU. The large footprint of the bright star is obvious. Press the "Next" button one more time to get to the ‘SKY’ HDU. You see that in the center-bottom, the footprint of the large star is clearly visible in the measured Sky level. This is not good! With Sky values above 54 ADU in the center of the star (the white pixels). This over-subtracted Sky level in part of the image will affect your magnitude measurements and thus the zero point! In *note General program usage tutorial::, we have a section on *note NoiseChisel optimization for detection::, there is also a full tutorial on this in *note Detecting large extended targets::. Therefore, we will not go into the details of NoiseChisel optimization here. Given the large images of J-PLUS, we will increase the tile-size to $100\times100$ pixels and the number of neighbors to identify outlying tiles to 50 (these are usually the first parameters you should start editing when you are confronted with a new image). After the second command, check the ‘SKY’ extension to confirm that there is no footprint of any bright object there. You will still see a gradient, but note the minimum and maximum values of the Sky level: their difference is more than 26 times smaller than the noise standard deviation (so statistically speaking, it is pretty flat!) $ astnoisechisel jplus-crop.fits --output=jplus-nc.fits \ --tilesize=100,100 --outliernumngb=50 $ astscript-fits-view jplus-nc.fits ## Check that the gradient in the sky is statistically negligible. $ aststatistics jplus-nc.fits -hSKY --minimum --maximum \ | awk '{print $2-$1}' 0.32809 $ aststatistics jplus-nc.fits -hSKY_STD --median 8.377977e+00 We are now ready to find the zero point! First, let's run the ‘astscript-zeropoint’ with ‘--help’ to see the option names (recall that you can see more details of each option in *note Invoking astscript-zeropoint::). For the first time, let's use the script in the most simple state possible. We will keep only the essential options: the names of the input and reference images (and their HDUs), the name of the output, and also two apertures with radii of 3 arcsec to start with: $ astscript-zeropoint --help $ astscript-zeropoint jplus-nc.fits --hdu=INPUT-NO-SKY \ --refimgs=sdss1.fits,sdss2.fits \ --output=jplus-zeropoint.fits \ --refimgszp=22.5,22.5 \ --refimgshdu=0,0 \ --aperarcsec=3 The output is a FITS table (because generally, you will give more apertures and choose the best one based on a higher-level analysis). Let's check the output's internal structure with Gnuastro's ‘astfits’ program. $ astfits jplus-zeropoint.fits ----- 0 n/a no-data 0 n/a 1 ZEROPOINTS table_binary 1x3 n/a 2 APER-3 table_binary 321x2 n/a You can see that there are two HDUs in this file. The HDU names give a hint, so let's have a look at each extension with Gnuastro's ‘asttable’ program: $ asttable jplus-zeropoint.fits --hdu=1 -i -------- jplus-zeropoint.fits (hdu: 1) ------- ----- ---- ------- No.Name Units Type Comment ------- ----- ---- ------- 1 APERTURE arcsec float32 n/a 2 ZEROPOINT mag float32 n/a 3 ZPSTD mag float32 n/a -------- Number of rows: 1 -------- As you can see, in the first extension, for each of the apertures you requested (‘APERTURE’), there is a zero point (‘ZEROPOINT’) and the standard deviation of the measurements on the apertures (‘ZPSTD’). In this case, we only requested one aperture, so it only has one row. Now, let's have a look at the next extension: $ asttable jplus-zeropoint.fits --hdu=2 -i -------- jplus-zeropoint.fits (hdu: 2) ------- ----- ---- ------- No.Name Units Type Comment ------- ----- ---- ------- 1 MAG-REF f32 float32 Magnitude of reference. 2 MAG-DIFF f32 float32 Magnitude diff with input. -------- Number of rows: 321 -------- It contains a table of measurements for the aperture with the least scatter. In this case, we only gave one aperture, so it is the same. If you give multiple apertures, only the one with least scatter will be present by default. In the ‘MAG-REF’ column you see the magnitudes within each aperture on the reference (SDSS) image(s). The ‘MAG-DIFF’ column contains the difference of the input (J-PLUS) and reference (SDSS) magnitudes for each aperture (see *note Zero point estimation::). The two catalogs, created by the aperture photometry from the SDSS images, are merged into one so that there are more stars to compare. Therefore, no matter how many reference images you provide, there will only be a single table here. If the two SDSS images overlapped, each object in the overlap region would have two rows (one row for the measurement from one SDSS image, and another from the measurement from the other). Now that we have obtained the zero point of the J-PLUS image, let's go a little deeper into lower-level details of how this script operates. This will help you better understand what happened and how to interpret and improve the outputs when you are confronted with a new image and strange outputs. To keep intermediate results the ‘astscript-zeropoint’ script keeps temporary files in a temporary directory and later deletes it (and all the intermediate products). If you like to check the temporary files of the intermediate steps, you can use ‘--keeptmp’ option to not remove them. Let's take a closer look into the contents of each HDU. First, we'll use Gnuastro’s ‘asttable’ to see the measured zero point for this aperture. We are using ‘-Y’ to have human-friendly (non-scientific!) numbers (which are sufficient here) and ‘-O’ to also show the metadata of each column at the start. $ asttable jplus-zeropoint.fits -Y -O # Column 1: APERTURE [arcsec,f32,] Aperture used. # Column 2: ZEROPOINT [mag ,f32,] Zero point (sig-clip median). # Column 3: ZPSTD [mag ,f32,] Zero point Standard deviation. 3.000 26.435 0.057 Now, let's have a look at the first 10 rows of the second (‘APER-3’) extension. From the previous check we did above, we see that it contains 321 rows! $ asttable jplus-zeropoint.fits -Y -O --hdu=APER-3 --head=10 # Column 1: MAG-REF [f32,f32,] Magnitude of reference. # Column 2: MAG-DIFF [f32,f32,] Magnitude diff with input. 16.461 30.035 16.243 28.209 15.427 26.427 20.064 26.459 17.334 26.425 20.518 26.504 17.100 26.400 16.919 26.428 17.654 26.373 15.392 26.429 But the table above is hard to interpret, so let's plot it. To do this, we'll use the same ‘astscript-fits-view’ command above that we used for images. It detects if the file has a image or table HDU and will call DS9 or TOPCAT respectively. You can also use any other plotter you like (TOPCAT is not part of Gnuastro), this script just calls it. $ astscript-fits-view jplus-zeropoint.fits --hdu=APER-3 After ‘TOPCAT’ opens, you can select the "Graphics" menu and then "Plain plot". This will show a plot with the SDSS (reference image) magnitude on the horizontal axis and the difference of magnitudes between the the input and reference (the zero point) on the vertical axis. In an ideal world, the zero point should be independent of the magnitude of the different stars that were used. Therefore, this plot should be a horizontal line (with some scatter as we go to fainter stars). But as you can see in the plot, in the real world, this expected behavior is seen only for stars with magnitudes about 16 to 19 in the reference SDSS images. The stars that are brighter than 16 are saturated in one (or both) surveys(1). Therefore, they do not have the correct magnitude or mag-diff. You can check some of these stars visually by using the blinking command above and zooming into some of the brighter stars in the SDSS images. On the other hand, it is natural that we cannot measure accurate magnitudes for the fainter stars because the noise level (or "depth") of each image is limited. As a result, the horizontal line becomes wider (scattered) as we go to the right (fainter magnitudes on the horizontal axis). So, let's limit the range of used magnitudes from the SDSS catalog to calculate a more accurate zero point for the J-PLUS image. For this reason, we have the ‘--magnituderange’ option in ‘astscript-zeropoint’. *Necessity of sky subtraction:* To obtain this horizontal line, it is very important that both your images have been sky subtracted. Please, repeat the last ‘astscript-zeropoint’ command above only by changing the input file to ‘jplus-crop.fits’. Then use Gnuastro’s ‘astscript-fits-view’ again to draw a plot with ‘TOPCAT’ (also same as above). Instead of a horizontal line, you will see _a sloped line_ in the magnitude range above! This happens because the sky level acts as a source of constant signal in all apertures, so the magnitude difference will not be independent of the star's magnitude, but dependent on it (the measurement on a fainter star will be dominated by the sky level). *Remember:* if you see a sloped line instead of a horizontal line, the input or reference image(s) are not sky subtracted. Another key parameter of this script is the aperture size (‘--aperarcsec’) for the aperture photometry of images. On one hand, if the selected aperture is too small, you will be at the mercy of the differing PSFs between your input and reference image(s): part of the light of the star will be lost in the image with the worse PSF. On the other hand, with large aperture size, the light of neighboring objects (stars/galaxies) can affect the photometry. We should select an aperture radius of the same order than the one used in the reference image, typically 2 to 3 times the PSF FWHM of the images. For now, let's assume the values 2, 3, 4, 5, and 6 arcsec for the aperture sizes parameter. The script will compare the result for several aperture sizes and choose the one with least standard deviation value, ‘ZPSTD’ column of the ‘ZEROPOINTS’ HDU. Let's re-run the script with the following changes: • Using ‘--magnituderange’ to limit the stars used for estimating the zero point. • Giving more values for aperture size to find the best for these two images as explained above. • Call ‘--keepzpap’ option to keep the result of matching the catalogs done with the selected apertures in the different extensions of the output file. $ astscript-zeropoint jplus-nc.fits --hdu=INPUT-NO-SKY \ --refimgs=sdss1.fits,sdss2.fits \ --output=jplus-zeropoint.fits \ --refimgszp=22.5,22.5 \ --aperarcsec=2,3,4,5,6 \ --magnituderange=16,18 \ --refimgshdu=0,0 \ --keepzpap Now, check number of HDU extensions by ‘astfits’. $ astfits jplus-zeropoint.fits ----- 0 n/a no-data 0 n/a 1 ZEROPOINTS table_binary 5x3 n/a 2 APER-2 table_binary 319x2 n/a 3 APER-3 table_binary 321x2 n/a 4 APER-4 table_binary 323x2 n/a 5 APER-5 table_binary 323x2 n/a 6 APER-6 table_binary 325x2 n/a You can see that the output file now has a separate HDU for each aperture (thanks to ‘--keepzpap’.) The ‘ZEROPOINTS’ hdu contains the final zero point values for each aperture and their error. The best zero point value belongs to the aperture that has the least scatter (has the lowest standard deviation). The rest of extensions contain the zero point value computed within each aperture (as discussed above). Let's check the different tables by plotting all magnitude tables at the same time with ‘TOPCAT’. $ astscript-fits-view jplus-zeropoint.fits After ‘TOPCAT’ has opened take the following steps: 1. From the "Graphics" menu, select "Plain plot". You will see the last HDU's scatter plot open in a new window (for ‘APER-6’, with red points). The Bottom-left panel has the logo of a red-blue scatter plot that has written ‘6:jplus-zeropoint.fits’ in front of it (showing that this is the 6th HDU of this file). In the bottom-right panel, you see the names of the columns that are being displayed. 2. In the "Layers" menu, Click on "Add Position Control". On the bottom-left panel, you will notice that a new blue-red scatter plot has appeared but it just says ‘<no table>’. In the bottom-right panel, in front of "Table:", select any other extension. This will plot the same two columns of that extension as blue points. Zoom-in to the region of the horizontal line to see/compare the different scatters. Change the HDU given to "Table:" and see the distribution of zero points for the different apertures. The manual/visual operation above is critical if this is your first time with a new dataset (it shows all kinds of systematic biases (like the Sky issue above)! But once you know your data has no systematic biases, choosing between the different apertures is not easy visually! Let's have a look at the table the ‘ZEROPOINTS’ HDU (we don't need to explicitly call this HDU since it is the first one): $ asttable jplus-zeropoint.fits -O -Y # Column 1: APERTURE [arcsec,f32,] Aperture used. # Column 2: ZEROPOINT [mag ,f32,] Zero point (sig-clip median). # Column 3: ZPSTD [mag ,f32,] Zero point Standard deviation. 2.000 26.405 0.028 3.000 26.436 0.030 4.000 26.448 0.035 5.000 26.458 0.042 6.000 26.466 0.056 The most accurate zero point is the one where ‘ZPSTD’ is the smallest. In this case, minimum of ‘ZPSTD’ is with radii of 2 and 3 arcseconds. Run the ‘astscript-fits-view’ command above again to open TOPCAT. Let's focus on the magnitude plots in these two apertures and determine a more accurate range of magnitude. The more reliable option is the range between 16.4 (where we have no saturated stars) and 18.5 mag (fainter than this, the scatter becomes too strong). Finally, let's set some more apertures between 2 and 3 arcseconds radius: $ astscript-zeropoint jplus-nc.fits --hdu=INPUT-NO-SKY \ --refimgs=sdss1.fits,sdss2.fits \ --output=jplus-zeropoint.fits \ --magnituderange=16.4,18.5 \ --refimgszp=22.5,22.5 \ --aperarcsec=2,2.5,3,3.5,4 \ --refimgshdu=0,0 \ --keepzpap $ asttable jplus-zeropoint.fits -Y 2.000 26.405 0.037 2.500 26.425 0.033 3.000 26.436 0.034 3.500 26.442 0.039 4.000 26.449 0.044 The aperture with the least scatter is therefore the 2.5 arcsec radius aperture, giving a zero point of 26.425 magnitudes for this image. However, you can see that the scatter for the 3 arcsec aperture is also acceptable. Actually, the ‘ZPSTD’ for of the 2.5 and 3 arcsec apertures only have a difference of $3\%$ ($= (0.034−0.0333)/0.033\times100$). So simply choosing the minimum is just a first-order approximation (which is accurate within $26.436−26.425=0.011$ magnitudes) Note that in aperture photometry, the PSF plays an important role (because the aperture is fixed but the two images can have very different PSFs). The aperture with the least scatter should also account for the differing PSFs. Overall, please, always check the different and intermediate steps to make sure the parameters are the good so the estimation of the zero point is correct. If you are happy with the minimum, you don't have to search for the minimum aperture or its corresponding zero point yourself. This script has written it in ‘ZPVALUE’ keyword of the table. With the first command, we also see the name of the file also, (you can use this on many files for example). With the second command, we are only printing the number by adding the ‘-q’ (or ‘--quiet’) option (this is useful in a script where you want to write the value in a shell variable to use later). $ astfits jplus-zeropoint.fits --keyvalue=ZPVALUE jplus-zeropoint.fits 2.642512e+01 $ astfits jplus-zeropoint.fits --keyvalue=ZPVALUE -q 2.642512e+01 Generally, this script will write the following FITS keywords (all starting with ‘ZP’) for your future reference in its output: $ astfits jplus-zeropoint.fits -h1 | grep ^ZP ZPAPER = 2.5 / Best aperture. ZPVALUE = 26.42512 / Best zero point. ZPSTD = 0.03276644 / Best std. dev. of zeropoint. ZPMAGMIN= 16.4 / Min mag for obtaining zeropoint. ZPMAGMAX= 18.5 / Max mag for obtaining zeropoint. Using the ‘--keyvalue’ option of the *note Fits:: program, you can easily get multiple of the values in one run (where necessary): $ astfits jplus-zeropoint.fits --hdu=1 --quiet \ --keyvalue=ZPAPER,ZPVALUE,ZPSTD 2.500000e+00 2.642512e+01 3.276644e-02 ---------- Footnotes ---------- (1) To learn more about saturated pixels and recognition of the saturated level of the image, please see *note Saturated pixels and Segment's clumps::  File: gnuastro.info, Node: Zero point tutorial with reference catalog, Prev: Zero point tutorial with reference image, Up: Zero point of an image 2.7.2 Zero point tutorial with reference catalog ------------------------------------------------ In *note Zero point tutorial with reference image::, we explained how to use the ‘astscript-zeropoint’ for estimating the zero point of one image based on a reference image. Sometimes there is not a reference image and we need to use a reference catalog. Fortunately, ‘astscript-zeropoint’ can also use the catalog instead of the image to find the zero point. To show this, let's download a catalog of SDSS in the area that overlaps with the cropped J-PLUS image (used in the previous section). For more on Gnuastro's Query program, please see *note Query::. The columns of ID, RA, Dec and magnitude in the SDSS _r_ filter are called by their name in the SDSS catalog. $ astquery vizier \ --dataset=sdss12 \ --overlapwith=jplus-crop.fits \ --column=objID,RA_ICRS,DE_ICRS,rmag \ --output=sdss-catalog.fits To visualize the position of the SDSS objects over the J-PLUS image, let's use ‘astscript-ds9-region’ (for more details please see *note SAO DS9 region files from table::) with the command below (it will automatically open DS9 and load the regions it created): $ astscript-ds9-region sdss-catalog.fits \ --column=RA_ICRS,DE_ICRS \ --color=red --width=3 --output=sdss.reg \ --command="ds9 jplus-nc.fits[INPUT-NO-SKY] \ -scale zscale" Now, we are ready to estimate the zero point of the J-PLUS image based on the SDSS catalog. To download the input image and understand how to use the ‘astscript-zeropoint’, please see *note Zero point tutorial with reference image::. Many of the options (like the aperture size) and magnitude range are the same so we will not discuss them further. You will notice that the only substantive difference of the command below with the last command in the previous section is that we are using ‘--refcat’ instead of ‘--refimgs’. There are also some cosmetic differences for example a new output name, not using ‘--refimgszp’ since it is only necessary for images) and the ‘--*column’ options which are used to identify the names of the necessary columns of the input catalog: $ astscript-zeropoint jplus-nc.fits --hdu=INPUT-NO-SKY \ --refcat=sdss-catalog.fits \ --refcatmag=rmag \ --refcatra=RA_ICRS \ --refcatdec=DE_ICRS \ --output=jplus-zeropoint-cat.fits \ --magnituderange=16.4,18.5 \ --aperarcsec=2,2.5,3,3.5,4 \ --keepzpap Let's inspect the output with the command below. $ asttable jplus-zeropoint-cat.fits -Y 2.000 26.337 0.034 2.500 26.386 0.036 3.000 26.417 0.041 3.500 26.439 0.043 4.000 26.455 0.050 As you see, the values and standard deviations are very similar to the results we got previously in *note Zero point tutorial with reference image::. The Standard deviations are generally a little higher here because we didn't do the photometry ourselves, but they are statistically similar. Before we finish, let's open the two outputs (from a reference image and reference catalog) with the command below. To confirm how they compare, we are showing the result for ‘APER-3’ extension in both (following the TOPCAT plotting recipe in *note Zero point tutorial with reference image::). $ astscript-fits-view jplus-zeropoint.fits jplus-zeropoint-cat.fits \ -hAPER-3 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro.info-3�������������������������������������������������������������������0000644�0001750�0001750�00001110456�14557514034�012424� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is gnuastro.info, produced by makeinfo version 7.1 from gnuastro.texi. This book documents version 0.22 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * Match: (gnuastro)Match. Match two separate catalogs. * astmatch: (gnuastro)Invoking astmatch. Options to Match. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Segment: (gnuastro)Segment. Segment detections based on signal structure. * astsegment: (gnuastro)Invoking astsegment. Options to Segment. * Query: (gnuastro)Query. Access remote databases for downloading data. * astquery: (gnuastro)Invoking astquery. Options to Query. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. * astscript: (gnuastro)Installed scripts. Gnuastro's installed scripts. * astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script * astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script * astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script * astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script * astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script * astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script * astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script * astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script * astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script * astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script * astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script END-INFO-DIR-ENTRY  File: gnuastro.info, Node: Pointing pattern design, Next: Moire pattern in stacking and its correction, Prev: Zero point of an image, Up: Tutorials 2.8 Pointing pattern design =========================== A dataset that is ready for scientific analysis is usually composed of many separate exposures and how they are taken is usually known as "observing strategy". This tutorial describes Gnuastro's tools to simplify the process of deciding the pointing pattern of your observing strategy. A "pointing" is the location on the sky that each exposure is aimed at. Each exposure's pointing is usually moved (on the sky) compared to the previous exposure. This is done for reasons like improving calibration, increasing resolution, expending the area of the observation and etc. Therefore, deciding a suitable pointing pattern is one of the most important steps when planning your observation strategy. There are commonly two types of pointings: "dither" and "offset". These are sometimes used interchangeably with "pointing" (especially when the final stack is roughly the same area as the field of view. Alternatively, "dither" and "offset" are used to distinguish pointings with large or small (on the scale of the field of view) movement compared to a previous one. When a pointing has a large distance to the previous pointing, it is known as an "offset", while pointings with a small displacement are known as a "dither". This distinction originates from the mechanics and optics of most modern telescopes: the overhead (for example the need to re-focus the camera) to make small movements is usually less than large movements. In this tutorial, let's simulate a hypothetical pointing pattern using Gnuastro's ‘astscript-pointing-simulate’ installed script (see *note Pointing pattern simulation::). Since we will be testing very different displacements between pointings, we'll ignore the difference between offset and dither here, and only use the term pointing. Let's assume you want to observe M94 (https://en.wikipedia.org/wiki/Messier_94) in the H-alpha and rSDSS filters (to study the extended star formation in the outer rings of this beautiful galaxy!). Including the outer parts of the rings, the galaxy is half a degree in diameter! This is very large, and you want to design a pointing pattern that will allow you to cover as much area, while not loosing your ability to calibrate properly. *Do not start with this tutorial:* If you are new to Gnuastro and have not already completed *note General program usage tutorial::, we recommend going through that tutorial before starting this one. Basic features like access to this book on the command-line, the configuration files of Gnuastro's programs, benefiting from the modular nature of the programs, viewing multi-extension FITS files, and many others are discussed in more detail there. * Menu: * Preparing input and generating exposure map:: Download and image and build exposure map. * Area of non-blank pixels on sky:: Account for the curved area on the sky. * Script with pointing simulation steps so far:: Summary of steps for easy testing. * Larger steps sizes for better calibration:: The initial small dither is not enough. * Pointings that account for sky curvature:: Sky curvature will cause problems! * Accounting for non-exposed pixels:: Parts of the detector do not get exposed to light.  File: gnuastro.info, Node: Preparing input and generating exposure map, Next: Area of non-blank pixels on sky, Prev: Pointing pattern design, Up: Pointing pattern design 2.8.1 Preparing input and generating exposure map ------------------------------------------------- As mentioned in *note Pointing pattern design::, the assumed goal here is to plan an observations strategy for M94. Let's assume that after some searching, you decide to write a proposal for the JAST80 telescope (https://oaj.cefca.es/telescopes/jast80) at the Observatorio Astrofísico de Javalambre (https://oaj.cefca.es), OAJ(1), in Teruel (Spain). The field of view of this telescope's camera is almost 1.4 degrees wide, nicely fitting M94! It also has these two filters that you need(2). Before we start, as described in *note Pointing pattern simulation::, it is just important to remember that the ideal pointing pattern depends primarily on your scientific objective, as well as the limitations of the instrument you are observing with. Therefore, there is no single pointing pattern for all purposes. However, the tools, methods, criteria or logic to check if your pointing pattern satisfies your scientific requirement are similar. Therefore, you can use the same methods, tools or logic here to simulate or verify that your pointing pattern will produce the products you expect after the observation. To start simulating a pointing pattern for a certain telescope, you just need a single-exposure image of that telescope with WCS information. In other words, after astrometry, but before warping into any other pixel grid (to combine into a deeper stack). The image will give us the default number of the camera's pixels, its pixel scale (width of pixel in arcseconds) and the camera distortion. These are reference parameters that are independent of the position of the image on the sky. Because the actual position of the reference image is irrelevant, let's assume that in a previous project, presumably on NGC 4395 (https://en.wikipedia.org/wiki/NGC_4395), you already had the download command of the following single exposure image. With the last command, please take a look at this image before continuing and explore it. $ mkdir pointing-tutorial $ cd pointing-tutorial $ mkdir input $ siapurl=https://archive.cefca.es/catalogues/vo/siap $ wget $siapurl/jplus-dr3/reduced/get_fits?id=1050345 \ -O input/jplus-1050345.fits.fz $ astscript-fits-view input/jplus-1050345.fits.fz *This is the first time I am using an instrument:* In case you haven't already used images from your desired instrument (to use as reference), you can find such images from their public archives; or contacting them. A single exposure images is rarely of any scientific value (post-processing and stacking is necessary to make high-level and science-ready products). Therefore, they become publicly available very soon after the observation date; furthermore, calibration images are usually public immediately. As you see from the image above, the T80Cam images are large (9216 by 9232 pixels). Therefore, to speed up the pointing testing, let's down-sample the image by a factor of 10. This step is optional and you can safely use the full resolution, which will give you a more precise stack. But it will be much slower (maybe good after you have an almost final solution on the down-sampled image). We will call the output ‘ref.fits’ (since it is the "reference" for our test). We are putting these two "input" files (to the script) in a dedicated directory to keep the running directory clean (and be able to easily delete temporary/test files for a fresh start with a '‘rm *.fits’'). $ astwarp input/jplus-1050345.fits.fz --scale=1/10 -oinput/ref.fits For a first trial, let's create a cross-shaped pointing pattern with 5 points around M94, which is centered at its center on the RA and Dec of 192.721250, 41.120556. We'll center one exposure on the center of the galaxy, and include 4 more exposures that are each 1 arc-minute away along the RA and Dec axes. To simplify the actual command later(3), let's also include the column names in ‘pointing.txt’ through two lines of metadata. Also note that the ‘pointing.txt’ file can be made in any manner you like, for example, by writing the coordinates manually on your favorite text editor, or through another programming language or logic, or etc. Here, we are using AWK because it is sufficiently powerful for this job, and it is a very small program that is available on any Unix-based operating system (allowing you to easily run your programs on any computer). $ step_arcmin=1 $ center_ra=192.721250 $ center_dec=41.120556 $ echo "# Column 1: RA [deg, f64] Right Ascension" > pointing.txt $ echo "# Column 2: Dec [deg, f64] Declination" >> pointing.txt $ echo $center_ra $center_dec \ | awk '{s='$step_arcmin'/60; fmt="%-10.6f %-10.6f\n"; \ printf fmt, $1, $2; \ printf fmt, $1+s, $2; \ printf fmt, $1, $2+s; \ printf fmt, $1-s, $2; \ printf fmt, $1, $2-s}' \ >> pointing.txt With the commands below, let's have a look at the produced file, first as plain-text, then with TOPCAT (which needs conversion to FITS). After TOPCAT is opened, in the "Graphics" menu, select "Plane plot" to see the five points in a flat RA, Dec plot. $ cat pointing.txt # Column 1: RA [deg, f64] Right Ascension # Column 2: Dec [deg, f64] Declination 192.721250 41.120556 192.737917 41.120556 192.721250 41.137223 192.704583 41.120556 192.721250 41.103889 $ asttable pointing.txt -opointing.fits $ astscript-fits-view pointing.fits $ rm pointing.fits We are now ready to generate the exposure map of the pointing pattern above using the reference image that we downloaded before. Let's put the center of our final stack to be on the center of the galaxy, and we'll assume the stack has a size of 2 degrees. With the second command, you can see the exposure map of the final stack. Recall that in this image, each pixel shows the number of input images that went into it. $ astscript-pointing-simulate pointing.txt --output=stack.fits \ --img=input/ref.fits --center=$center_ra,$center_dec \ --width=2 $ astscript-fits-view stack.fits You will see that except for a thin boundary, we have a depth of 5 exposures over the area of the single exposure. Let's see what the width of the deepest part of the image is. First, we'll use Arithmetic to set all pixels that contain less than 5 exposures (the outer pixels) to NaN (Not a Number). In the same Arithmetic command, let's trim all the blank rows and columns, so the output only contains the pixels that are exposed 5 times. With the next command, let's view the deep region and with the last command below, let's use the ‘--skycoverage’ option of the Fits program to see the coverage of deep part on the sky. $ deep_thresh=5 $ astarithmetic stack.fits set-s s s $deep_thresh lt nan where trim \ --output=deep.fits $ astscript-fits-view deep.fits $ astfits deep.fits --skycoverage Input file: deep.fits (hdu: 1) Sky coverage by center and (full) width: Center: 192.72125 41.120556 Width: 1.880835157 1.392461166 Sky coverage by range along dimensions: RA 191.7808324 193.6616676 DEC 40.42058203 41.81304319 As we see, in declination, the width of this deep field is about 1.4 degrees. Recall that RA is only defined on the equator and actual coverage in RA depends on the declination due to the spherical nature of the sky. This area therefore nicely covers the expected outer parts of M94. On first thought, it may seem that we are now finished, but that is not the case unfortunately! There is a problem: with a step size of 1 arc-minute, the brighter central parts of this large galaxy will always be on very similar pixels; making it hard to calibrate those pixels properly. If you are interested in the low surface brightness parts of this galaxy, it is even worse: the outer parts of the galaxy will always cover similar parts of the detector in all the exposures; and they cover a large area on your image. To be able to accurately calibrate the image (in particular to estimate the flat field pattern and subtract the sky), you do not want this to happen! You want each exposure to cover very different sources of astrophysical signal, so you can accurately calibrate the artifacts created by the instrument or environment (for example flat field) or of natural causes (for example the Sky). For an example of how these calibration issues can ruin low surface brightness science, please see the image of M94 in the Legacy Survey interactive viewer (https://www.legacysurvey.org/viewer). After it is loaded, at the bottom-left corner of the window, write "M94" in the box of "Jump to object" and press ENTER. At first, M94 looks good with a black background, but as you increase the "Brightness" (by scrolling it to the right and seeing what is under the originally black pixels), you will see the calibration artifacts clearly. ---------- Footnotes ---------- (1) For full disclosure, Gnuastro is being developed at CEFCA (Centro de Estudios de Física del Cosmos de Aragón); which also hosts OAJ. (2) For the full list of available filters, see the T80Cam description (https://oaj.cefca.es/telescopes/t80cam). (3) Instead of this, later, when you called ‘astscript-pointing-simulate’, you could pass the ‘--racol=1’ and ‘--deccol=2’ options. But having metadata is always preferred (will avoid many bugs/frustrations in the long-run!).  File: gnuastro.info, Node: Area of non-blank pixels on sky, Next: Script with pointing simulation steps so far, Prev: Preparing input and generating exposure map, Up: Pointing pattern design 2.8.2 Area of non-blank pixels on sky ------------------------------------- In *note Preparing input and generating exposure map:: we generated a pointing pattern with very small steps, showing how this can cause calibration problems. Later (in *note Larger steps sizes for better calibration::) using larger steps is discussed. In this section, let's see how we can get an accurate measure of the area that is covered in a certain depth. A first thought would be to simply multiply the widths along RA and Dec reported before: $1.8808\times1.3924=2.6189$ degrees squared. But there are several problems with this: • It ignores the fact that RA only has units of degrees on the equator: at different declinations, differences in RA should be converted to degrees. This is discussed further in this tutorial: *note Pointings that account for sky curvature::. • It doesn't take into account the thin rows/columns of blank pixels (NaN) that are on the four edges of the ‘deep.fits’ image. • The differing area of the pixels on the spherical sky in relation to those blank values can result in wrong estimations of the area. Let's get a very accurate estimation of the area that will not be affected by the issues above. With the first command below, we'll use the ‘--pixelareaonwcs’ option of the Fits program that will return the area of each pixel (in pixel units of degrees squared). After running the second command, please have a look at the produced image. $ astfits deep.fits --pixelareaonwcs --output=deep-pix-area.fits $ astfits deep.fits --pixelscale Basic info. for --pixelscale (remove extra info with '--quiet' or '-q') Input: deep.fits (hdu 1) has 2 dimensions. Pixel scale in each FITS dimension: 1: 0.00154403 (deg/pixel) = 5.5585 (arcsec/pixel) 2: 0.00154403 (deg/pixel) = 5.5585 (arcsec/pixel) Pixel area: 2.38402e-06 (deg^2) = 30.8969 (arcsec^2) $ astscript-fits-view deep-pix-area.fits You see a donut-like shape in DS9. Move your mouse over the central (white) region of the region and look at the values. You will see that the pixel area (in degrees squared) is exactly the same as we saw in the output of ‘--pixelscale’. As you move your mouse away to other colors, you will notice that the area covered by each pixel (its value in this image) deceases very slightly (in the 5th decimal!). This is the effect of the Gnomonic projection (https://en.wikipedia.org/wiki/Gnomonic_projection); summarized as ‘TAN’ (for "tangential") in the FITS WCS standard, the most commonly used in optical astronomical surveys and the default in this script. Having ‘deep-pix-area.fits’, we can now use Arithmetic to set the areas of all the pixels that were NaN in ‘deep.fits’ and sum all the values to get an accurate estimate of the area we get from this pointing pattern: $ astarithmetic deep-pix-area.fits deep.fits isblank nan where -g1 \ sumvalue --quiet 1.93836806631634e+00 Therefore, the actual area that is covered is less than the simple multiplication above. At these declinations, the dominant cause of this difference is the first point above (that RA needs correction), this will be discussed in more detail later in this tutorial (see *note Pointings that account for sky curvature::). Generally, using this method to measure the area of your non-NAN pixels in an image is very easy and robust (automatically takes into account the curvature, coordinate system, projection and blank pixels of the image).  File: gnuastro.info, Node: Script with pointing simulation steps so far, Next: Larger steps sizes for better calibration, Prev: Area of non-blank pixels on sky, Up: Pointing pattern design 2.8.3 Script with pointing simulation steps so far -------------------------------------------------- In *note Preparing input and generating exposure map:: and *note Area of non-blank pixels on sky::, the basic steps to simulate a pointing pattern's exposure map and measure the final output area on the sky where described in detail. From this point on in the tutorial, we will be experimenting with the shell variables that were set above, but the actual commands will not be changed regularly. If a change is necessary in a command, it is clearly mentioned in the text. Therefore, it is better to write the steps above (after downloading the reference image) as a script. In this way, you can simply change those variables and see the final result fast by running your script. For more on writing scripts, see as described in *note Writing scripts to automate the steps::. Here is a summary of some points to remember when transferring the code in the sections before into a script: • Where the commands are edited/changed, please also update them in your script. • Keep all the variables at the top, even if they are used later. This allows to easily view or changed them without digging into the script. • You do not need to include visual check commands like the ‘astscript-fits-view’ or ‘cat’ commands above. Those can be run interactively after your script is finished; recall that a script is for batch (non-interactive) processing. • Put all your intermediate products inside a "build" directory. Here is the script that summarizes the steps in *note Preparing input and generating exposure map:: (after download) and *note Area of non-blank pixels on sky::: #!/bin/bash # # Copyright (C) 2024-2024 Mohammad Akhlaghi <mohammad@akhlaghi.org> # # Copying and distribution of this file, with or without modification, # are permitted in any medium under the GNU GPL v3+, without royalty # provided the copyright notice and this notice are preserved. This # file is offered as-is, without any warranty. # Parameters of the script deep_thresh=5 step_arcmin=1 center_ra=192.721250 center_dec=41.120556 # Input and build directories (can be anywhere in your file system) indir=input bdir=build # Abort the script in case of an error. set -e # Make the build directory if it doesn't already exist. if ! [ -d $bdir ]; then mkdir $bdir; fi # Build the 5-pointing pointing pattern (with the step size above). pointingcat=$bdir/pointing.txt echo "# Column 1: RA [deg, f64] Right Ascension" > $pointingcat echo "# Column 2: Dec [deg, f64] Declination" >> $pointingcat echo $center_ra $center_dec \ | awk '{s='$step_arcmin'/60; fmt="%-10.6f %-10.6f\n"; \ printf fmt, $1, $2; \ printf fmt, $1+s, $2; \ printf fmt, $1, $2+s; \ printf fmt, $1-s, $2; \ printf fmt, $1, $2-s}' \ >> $pointingcat # Simulate the pointing pattern. stack=$bdir/stack.fits astscript-pointing-simulate $pointingcat --output=$stack \ --img=input/ref.fits --center=$center_ra,$center_dec \ --width=2 # Trim the regions shallower than the threshold. deep=$bdir/deep.fits astarithmetic $stack set-s s s $deep_thresh lt nan where trim \ --output=$deep # Calculate the area of each pixel on the curved celestial sphere: pixarea=$bdir/deep-pix-area.fits astfits $deep --pixelareaonwcs --output=$pixarea # Report the final area (the empty 'echo's are for visual help in outputs) echo; echo echo "Area with step of $step_arcmin arcminutes, at $deep_thresh depth:" astarithmetic $pixarea $deep isblank nan where -g1 \ sumvalue --quiet For a description of how to make it executable and how to run it, see *note Writing scripts to automate the steps::. Note that as you start adding your own text to the script, be sure to add your name (and year that you modified) in the copyright notice at the start of the script (this is very important!).  File: gnuastro.info, Node: Larger steps sizes for better calibration, Next: Pointings that account for sky curvature, Prev: Script with pointing simulation steps so far, Up: Pointing pattern design 2.8.4 Larger steps sizes for better calibration ----------------------------------------------- In *note Preparing input and generating exposure map:: we saw that a small pointing pattern is not good for the reduction of data from a large object like M94! M94 is about half a degree in diameter; so let's set ‘step_arcmin=15’. This is one quarter of a degree and will put the center of the four exposures on the four corners of the M94's main ring. Furthermore, *note Script with pointing simulation steps so far::, the steps were summarized into a script to allow easy changing of variables without manually re-entering the individual/separate commands. After you change ‘step_arcmin=15’ and re-run the script, you will get a total area (from counting of per-pixel areas) of approximately 0.96 degrees squared. This is just roughly half the previous area and will barely fit M94! To understand the cause, let's have a look at the full stack (not just the deepest area): $ astscript-fits-view build/stack.fits Compared to the first run (with ‘step_arcmin=1’), we clearly see how there are indeed fewer pixels that get photons in all 5 exposures. As the area of the deepest part has decreased, the areas with fewer exposures have also grown. Let's define our deep region to be the pixels with 3 or more exposures. Please set ‘deep_thresh=3’ in the script and re-run it. You will see that the "deep" area is now almost 2.02 degrees squared! This is (slightly) larger than the first run (with ‘step_arcmin=1’)! The difference between 3 exposures and 5 exposures seems a lot at first. But let's calculate how much it actually affects the achieved signal-to-noise ratio and the surface brightness limit. The surface brightness limit (or upper-limit surface brightness) are both calculated by applying the definition of magnitude to the standard deviation of the background. So we should first calculate how much this difference in depth affects the sky standard deviation. For a complete discussion on the definition of the surface brightness limit, see *note Quantifying measurement limits::. Deep images will usually be dominated by *note Photon counting noise:: (or Poisson noise). Therefore, if a single exposure image has a sky standard deviation of $\sigma_s$, and we combine $N$ such exposures by taking their mean, the final/stacked sky standard deviation ($\sigma$) will be $\sigma=\sigma_s/\sqrt{N}$. As a result, the surface brightness limit between the regions with $N$ exposures and $M$ exposures differs by $2.5\times log_{10}(\sqrt{N/M}) = 1.25\times log_{10}(N/M)$ magnitudes. If we set $N=3$ and $M=5$, we get a surface brightness magnitude difference of 0.28! This is a very small difference; given all the other sources of error that will be present; but how much it improves the calibration artifacts. Therefore at the cost of decreasing our surface brightness limit by 0.28 magnitudes, we are now able to calibrate the individual exposures much better, and even cover a larger area! The argument above didn't involve any image and was primarily theoretical. For the more visually-inclined readers, let's add raw Gaussian noise (with a $\sigma$ of 100 counts) over each simulated exposure. We will then instruct ‘astscript-pointing-simulate’ to stack them as we would stack actual data (by taking the sigma-clipped mean). The command below is identical to the previous call to the pointing simulation script with the following differences. Note that this is just for demonstration, so you should not include this in your script (unless you want to see the noisy stack every time; at double the processing time). ‘--output’ We are using a different output name, so we can compare the output of the new command with the previous one. ‘--stack-operator’ This should be one of the Arithmetic program's *note Stacking operators::. By default the value is ‘sum’; because by default, each pixel of each exposure is given a value of 1. When stacking is defined through the summation operator, we can obtain the exposure map that you have already seen above. But in this run, we are adding noise to each input exposure (through the hook that is described below) and stacking them (as we would stack actual science images). Since the purpose differs here, we are using this option to change the operator. ‘--hook-warp-after’ This is the most visible difference of this command the previous one. Through a "hook", you can give any arbitrarily long (series of) command(s) that will be added to the processing of this script at a certain location. This particular hook gets applied "after" the "warp"ing phase of each exposure (when the pixels of each exposure are mapped to the final pixel grid; but not yet stacked). Since the script runs in parallel (the actual work-horse is a Makefile!), you can't assume any fixed file name for the input(s) and output. Therefore the inputs to, and output(s) of, hooks are some pre-defined shell variables that you should use in the command(s) that you hook into the processing. They are written in full-caps to be clear and separate from your own variables. In this case, they are the ‘$WARPED’ (input file of the hook) and ‘$TARGET’ (output name that next steps in the script will operate on). As you see from the command below, through this hook we are calling the Arithmetic program to add noise to all non-zero pixels in the warped image. For more on the noise-adding operators, see *note Random number generators::. $ center_ra=192.721250 $ center_dec=41.120556 $ astscript-pointing-simulate build/pointing.txt --img=input/ref.fits \ --center=$center_ra,$center_dec \ --width=2 --stack-operator="3 0.2 sigclip-mean" \ --output=build/stack-noised.fits \ --hook-warp-after='astarithmetic $WARPED set-i \ i i 0 uint8 eq nan where \ 100 mknoise-sigma \ --output=$TARGET' $ astscript-fits-view build/stack.fits build/stack-noised.fits When you visually compare the two images of the last command above, you will see that (at least by eye) it is almost impossible to distinguish the differing noise pattern in the regions with 3 exposures from the regions with 5 exposures. But the regions with a single exposure are clearly visible! This is because the surface brightness limit in the single-exposure regions is $1.25\times\log_{10}(1/5)=-0.87$ magnitudes brighter. This almost one magnitude difference in surface brightness is significant and clearly visible in the stacked image (recall that magnitudes are measured in a logarithmic scale). Thanks to the argument above, we can now have a sufficiently large area with a usable depth. However, each the center of each pointing will still contain the central part of the galaxy. In other words, M94 will be present in all the exposures while doing the calibrations. Even in not-too-deep observations, we already see a large ring around this galaxy. When we do a low surface brightness optimized reduction, there is a good chance that the size of the galaxy is much larger than that ring. This very extended structure will make it hard to do the calibrations on very accurate scales. Accurate calibration is necessary if you do not want to loose the faint photons that have been recorded in your exposures. *Calibration is very important:* Better calibration can result in a fainter surface brightness limit than more exposures with poor calibration; especially for very low surface brightness signal that covers a large area and is systematically affected by calibration issues. Ideally, you want your target to be on the four edges/corners of each image. This will make sure that a large fraction of each exposure will not be covered by your final target in each exposure, allowing you to calibrate much more accurately.  File: gnuastro.info, Node: Pointings that account for sky curvature, Next: Accounting for non-exposed pixels, Prev: Larger steps sizes for better calibration, Up: Pointing pattern design 2.8.5 Pointings that account for sky curvature ---------------------------------------------- In *note Larger steps sizes for better calibration::, we saw how a small loss in surface brightness limit can allow better calibration and even a larger area. Let's extend this by setting ‘step_arcmin=40’ (almost half the width of the detector) inside your script (see *note Script with pointing simulation steps so far::). After running the script with this change, take a look at ‘build/deep.fits’: $ astscript-fits-view build/deep.fits --ds9scale=minmax You will see that the region with 5 exposure depth is a horizontally elongated rectangle now! Also, the vertical component of the cross with four exposures is much thicker than the horizontal component! Where does this asymmetry come from? All the steps in our pointing strategy had the same (fixed) size of 40 arc minutes. This happens because the same change in RA and Dec (defined on the curvature of a sphere) will result in different absolute changes on the equator. To visually see this, let's look at the pointing positions in TOPCAT: $ cat build/pointing.txt # Column 1: RA [deg, f64] Right Ascension # Column 2: Dec [deg, f64] Declination 192.721250 41.120556 193.387917 41.120556 192.721250 41.787223 192.054583 41.120556 192.721250 40.453889 $ asttable build/pointing.txt -obuild/pointing.fits $ astscript-fits-view build/pointing.fits After TOPCAT opens, under the "graphics" window, select "Plane Plot". In the newly opened window, click on the "Axes" item on the bottom-left list of items. Then activate the "Aspect lock" box so the vertical and horizontal axes have the same scaling. You will see what you expect from the numbers: we have a beautifully symmetric set of 5 points shaped like a '+' sign. Keep the previous window, and let's go back to the original TOPCAT window. In the first TOPCAT window, click on "Graphics" again, but this time, select "Sky plot". You will notice that the vertical component of the cross is now longer than the horizontal component! If you zoom-out (by scrolling your mouse over the plot) a lot, you will see that this is actually on the spherical surface of the sky! In other words, as you see here, on the sky, the horizontal points are closer to each other than the vertical points; causing a larger overlap between them, making the vertical overlap thicker in ‘build/pointing.fits’. On the celestial sphere, only the declination is measured in degrees. In other words, the difference in declination of two points can be calculated only with their declination. However, except for points that are on the equator, differences in right ascension depend on the declination. Therefore, the origin of this problem is that we done the additions and subtractions for defining the pointing points in a flat space: based on the step size in arc minutes that was applied similarly on RA and Dec (in *note Preparing input and generating exposure map::). To fix this problem, we need to convert our points from the flat RA/Dec into the spherical RA/Dec. In the FITS standard, we have the "World Coordinate System" (WCS) that defines this type of conversion, using pre-defined projections in the ‘CTYPEi’ keyword (short for for "Coordinate TYPE in dimension i"). Let's have a look at the stack to see the default projection of our final stack: $ astfits build/stack.fits -h1 | grep CTYPE CTYPE1 = 'RA---TAN' / Right ascension, gnomonic projection CTYPE2 = 'DEC--TAN' / Declination, gnomonic projection We therefore see that the default projection of our final stack is the ‘TAN’ (short for "tangential") projection, which is more formally known as the Gnomonic projection (https://en.wikipedia.org/wiki/Gnomonic_projection). This is the most commonly used projection in optical astronomy. Now that we know the final projection, we can do this conversion using Table's column arithmetic operator ‘eq-j2000-from-flat’ like below: $ pointingcat=build/pointing.txt $ pointingonsky=build/pointing-on-sky.fits $ asttable $pointingcat --output=$pointingonsky \ -c'arith RA set-r \ DEC set-d \ r meanvalue set-ref-r \ d meanvalue set-ref-d \ r d ref-r ref-d TAN eq-j2000-from-flat' \ --colmetadata=1,RA,deg,"Right ascension" \ --colmetadata=2,Dec,deg,"Declination" $ astscript-fits-view build/pointing-on-sky.fits Here is a break-down of the first command above: to do the flat-to-sky conversion, we need a reference point (where the two are equal). We have used the mean RA and mean Dec (through the ‘meanvalue’ operator in Arithmetic) as our reference point (which are placed in the ‘ref-r’ and ‘red-d’ variables. After calling the ‘eq-j2000-from-flat’ operator, we have just added metadata to the two columns. To confirm that this operator done the job correctly, after the second command above, repeat the same experiment as before with TOPCAT (where you viewed the pointing positions on a flat and spherical coordinate system). You will see that indeed, on the sphere you have a '+' shape, but on the flat plot, it looks stretched. *Script update 1:* you should now add the ‘pointingonsky’ definition and the ‘asttable’ command above into the script of *note Script with pointing simulation steps so far::. They should be placed before the call to ‘astscript-pointing-simulate’. Also, in the call to ‘astscript-pointing-simulate’, ‘$pointingcat’ should be replaced with ‘$pointingonsky’ (so it doesn't use the flat RA, Dec pointings). After implementing this change in your script and running it, open ‘deep.fits’ and you will see that the widths of both the horizontal and vertical regions are much more similar. The top of the vertical overlap is slightly wider than the bottom, but that is something you can't fix by just pointing (your camera's field of view is fixed on the sky!). It can be correctly by slightly rotating some of the exposures, but that will result in different PSFs from one exposure to another; and this can cause more important problems for your final science. *Plotting the spherical RA and Dec in your papers:* The inverse of the ‘eq-j2000-from-flat’ operator above is the ‘eq-j2000-to-flat’. ‘eq-j2000-to-flat’ can be used when you want to plot a set points with spherical RA and Dec in a paper. When the minimum and maximum RA and Dec differ by larger than half a degree, you'll clearly see the difference. For more, see the description of these operators in *note Column arithmetic::. Try to slightly increase ‘step_arcmin’ to make the cross-like region with 4 exposures as thin as possible. For example, set it to ‘step_arcmin=42’. When you open ‘deep.fits’, you will see that the depth across this image is almost contiguous (which is another positive factor!). Try increasing it to 43 arc minutes to see that the central cross will become almost fully NaN in ‘deep.fits’ (which is bad!). You will notice that the vertical region of 4 exposure depth is thinner in the bottom than on the top. This is due to the RA/Dec change above, but across the width of the image. We can't therefore change this by just changing the position of the pointings, we need to rotate some of the exposures if we want it to be removed. But rotation is not yet implemented in this script. You can construct any complex pointing pattern (with more than 5 points and in any shape) based on the logic and reasoning above to help extract the most science from the valuable telescope time that you will be getting. Since the output is a FITS file, you can easily download another FITS file of your target, open it with DS9 (and "lock" the "WCS") with the stack produced by this simulation to make sure that the deep parts correspond to the area of interest for your science case. Factors like the optimal exposure time are also critical for the final result(1), but is was beyond the scope of this tutorial. One relevant factor however is the effect of vignetting: the pixels on the outer extremes of the field of view that are not exposed to light and should be removed from your final stack. They effect your pointing pattern: by decreasing your total area, they act like a larger spacing between your points, causing similar shallow crosses as you saw when you set ‘step_arcmin’ to 43 arc minutes. In *note Accounting for non-exposed pixels::, we will show how this can be done within the same test concept that we done here. ---------- Footnotes ---------- (1) The exposure time will determine the Signal-to-noise ration on a single exposure level.  File: gnuastro.info, Node: Accounting for non-exposed pixels, Prev: Pointings that account for sky curvature, Up: Pointing pattern design 2.8.6 Accounting for non-exposed pixels --------------------------------------- At the end of *note Pointings that account for sky curvature:: we were able to maximize the region of same depth in our stack. But we noticed that issues like strong vignetting (https://en.wikipedia.org/wiki/Vignetting) can create discontinuity in our final stacked data product. In this section, we'll review the steps to account for such effects. Generally, the full area of a detector is not usually used in the final stack. Vignetting is one cause, it can be due to other problems also. For example due to baffles in the optical path (to block stray light), or large regions of bad (unusable or "dead") pixels that may be in any place on the detector(1). Without accounting for these pixels that do not receive any light, the deep area we measured in the sections above will be over-estimated. In this sub-section, let's review the necessary additions to account for such artifacts. Therefore, before continuing, please make sure that you have already read and applied the steps of the previous sections (this sub-section builds upon that section). Vignetting strongly depends on the optical design of the instrument you are using. It can be a constant number of pixels on all the edges the detector, or it can have a more complex shape. For example on cameras that have multiple detectors on the field of view, in this case, the regions to exclude on each detector can be very different and will not be symmetric! Therefore, within Gnuastro's ‘astscript-pointing-simulate’ script there is no parameter for pre-defined vignetting shapes. Instead, you should define a mask that you can apply on each exposure through the provided hook (‘--hook-warp-before’; recall that we previously used another hook in *note Larger steps sizes for better calibration::). Through the mask, you are free to set any vignetted or bad pixel to NaN (thus ignoring them in the stack) and applying it in any way that best suites your instrument and detector. The mask image should be same size as the reference image, but only containing two values: 0 or 1. Pixels in each exposure that have a value of 1 in the mask will be set to NaN before the stacking process and will not contribute to the final stack. Ideally, you can use the master flat field image of the previous reductions to create this mask: any pixel that has a low sensitivity in the master flat (for any reason) can be set to 1, and the rest of the pixels to 0. Let's build a simple mask by assuming that we only have strong vignetting that is affecting the outer 30 arc seconds of the individual exposures. To mask the outer edges of an image we can use Gnuastro's Arithmetic program; and in particular, the ‘indexonly’ operator. To learn more about this operator, see *note Size and position operators::. But before doing that, we need convert this angular distance to pixels on the detector. In *note Pointing pattern design::, we used an undersampled version of the input image, so we should do this conversion on that image: $ margin_arcsec=30 $ margin_pix=$(astfits input/ref.fits --pixelscale --quiet \ | awk '{print int('$margin_arcsec'/($1*3600))}') $ echo $margin_pix 5 To build the mask, we can now follow the recipe under "Image: masking margins" of the ‘index’ operator in Arithmetic (for a full description of what this command is doing(2), see *note Size and position operators::). Finally, in the last command, let's look at the mask image in the "red" color map of DS9 (which will shows the thin 1-valued pixels to mask on the border more clearly). $ width=$(astfits input/ref.fits --keyvalue=NAXIS1 -q) $ height=$(astfits input/ref.fits --keyvalue=NAXIS2 -q) $ astarithmetic input/ref.fits indexonly set-i \ $width uint16 set-w \ $height uint16 set-h \ $margin_pix uint16 set-m \ i w % uint16 set-X \ i w / uint16 set-Y \ X m lt X w m - gt or \ Y m lt Y h m - gt or \ or --output=build/mask.fits $ astscript-fits-view build/mask.fits --ds9extra="-cmap red" We are now ready to run the main pointing simulate script. With the command below, we will use the ‘--hook-warp-before’ to apply this mask on the image of each exposure just before warping. The concept of this hook is very similar to that of ‘--hook-warp-after’ in *note Pointing pattern design::. As the name suggests, this hook is applied "before" the warping. The input to the command given to this hook should be called with ‘$EXPOSURE’ and the output should be called with ‘$TOWARP’. With the second command, let's compare the two outputs: $ astscript-pointing-simulate build/pointing-on-sky.fits \ --output=build/stack-with-trim.fits --img=input/ref.fits \ --center=$center_ra,$center_dec --width=2 \ --hook-warp-before='astarithmetic $EXPOSURE build/mask.fits \ nan where -g1 -o$TOWARP' $ astscript-fits-view build/stack.fits build/stack-with-trim.fits As expected, due to the smaller area of the detector that is exposed to photons, the regions with 4 exposures have become much thinner and on the bottom, it has been removed. To have contiguous depth in the deeper region, use this new call in your script and decrease the ‘step_arcmin=41’. You can use the same command on a mask that is created in any way and as realistic as possible. More generically, you can use the before and after hooks for any other operation; for example to insert objects from a catalog using *note MakeProfiles:: as well as adding noise as we did in *note Pointing pattern design::. Therefore it is also good to add the mask and its application in your script. This should be pretty easy by now (following *note Script with pointing simulation steps so far:: and the "Script update 1" box of *note Pointings that account for sky curvature::). So we will leave this as an exercise. ---------- Footnotes ---------- (1) For an example of bad pixels over the detector, see Figures 4 and 6 of Instrument Science Report WFC3 2019-03 (https://www.stsci.edu/files/live/sites/www/files/home/hst/instrumentation/wfc3/documentation/instrument-science-reports-isrs/_documents/2019/WFC3-2019-03.pdf) by the Space Telescope Science Institute. (2) By learning how this command works, you can customize it. For example, to mask different widths along each separate edge: it often happens that the left/right or top/bottom edges are affected differently by vignetting.  File: gnuastro.info, Node: Moire pattern in stacking and its correction, Next: Clipping outliers, Prev: Pointing pattern design, Up: Tutorials 2.9 Moiré pattern in stacking and its correction ================================================ After warping some images with the default mode of Warp (see *note Align pixels with WCS considering distortions::) you may notice that the background noise is no longer flat. Some regions will be smoother and some will be sharper; depending on the orientation and distortion of the input/output pixel grids. This is due to the Moiré pattern (https://en.wikipedia.org/wiki/Moir%C3%A9_pattern), which is especially noticeable/significant when two slightly different grids are super-imposed. With the commands below, we'll download a single exposure image from the J-PLUS survey (https://www.j-plus.es) and run Warp (on a $8\times8$ arcmin$^2$ region to speed it up the demos here). Finally, we'll open the image to visually see the artificial Moiré pattern on the warped image. ## Download the image (73.7 MB containing an 9216x9232 pixel image) $ jplusdr2=http://archive.cefca.es/catalogues/vo/siap/jplus-dr2/reduced $ wget $jplusdr2/get_fits?id=771463 -Ojplus-exp1.fits.fz ## Align a small part of it with the sky coordinates. $ astwarp jplus-exp1.fits.fz --center=107.62920,39.72472 \ --width=8/60 -ojplus-e1.fits ## Open the aligned region with DS9 $ astscript-fits-view jplus-e1.fits In the opened DS9 window, you can see the Moiré pattern as wave-like patterns in the noise: some parts of the noise are more smooth and some parts are more sharp. Right in the center of the image is a blob of sharp noise. Warp has the ‘--checkmaxfrac’ option for direct inspection of the Moiré pattern (described with the other options in *note Align pixels with WCS considering distortions::). When run with this option, an extra HDU (called ‘MAX-FRAC’) will be added to the output. The image in this HDU has the same size as the output. However, each output pixel will contain the largest (maximum) fraction of area that it covered over the input pixel grid. So if an output pixel has a value of 0.9, this shows that it covered $90\%$ of an input pixel. Let's run Warp with ‘--checkmaxfrac’ and see the output (after DS9 opens, in the "Cube" window, flip between the first and second HDUs): $ astwarp jplus-exp1.fits.fz --center=107.62920,39.72472 \ --width=8/60 -ojplus-e1.fits --checkmaxfrac $ astscript-fits-view jplus-e1.fits By comparing the first and second HDUs/extensions, you will clearly see that the regions with a sharp noise pattern fall exactly on parts of the ‘MAX-FRAC’ extension with values larger than 0.5. In other words, output pixels where one input pixel contributed more than half of the its value. As this fraction increases, the sharpness also increases because a single input pixel's value dominates the value of the output pixel. On the other hand, when this value is small, we see that many input pixels contribute to that output pixel. Since many input pixels contribute to an output pixel, it acts like a convolution, hence that output pixel becomes smoother (see *note Spatial domain convolution::). Let's have a look at the distribution of the ‘MAX-FRAC’ pixel values: $ aststatistics jplus-e1.fits -hMAX-FRAC Statistics (GNU Astronomy Utilities) 0.22 ------- Input: jplus-e1.fits (hdu: MAX-FRAC) ------- Number of elements: 744769 Minimum: 0.250213461 Maximum: 0.9987495374 Mode: 0.5034223567 Mode quantile: 0.3773819498 Median: 0.5520805544 Mean: 0.5693956458 Standard deviation: 0.1554693738 ------- Histogram: | *** | ********** | ***************** | ************************ | ******************************* | ************************************** | ********************************************* | **************************************************** | *********************************************************** | ****************************************************************** |********************************************************************** |---------------------------------------------------------------------- The smallest value is 0.25 (=1/4), showing that 4 input pixels contributed to the output pixels value. While the maximum is almost 1.0, showing that a single input pixel defined the output pixel value. You can also see that the most probable value (the mode) is 0.5, and that the distribution is positively skewed. This is a well-known problem in astronomical imaging and professional photography. If you only have a single image (that is already taken!), you can undersample the input: set the angular size of the output pixels to be larger than the input. This will decrease the resolution of your image, but will ensure that pixel-mixing will always happen. In the example below we are setting the output pixel scale (which is known as ‘CDELT’ in the FITS standard) to $1/0.5=2$ of the input's. In other words each output pixel edge will cover double the input pixel's edge on the sky, and the output's number of pixels in each dimension will be half of the previous output. $ cdelt=$(astfits jplus-exp1.fits.fz --pixelscale -q \ | awk '{print $1}') $ astwarp jplus-exp1.fits.fz --center=107.62920,39.72472 \ --width=8/60 -ojplus-e1.fits --cdelt=$cdelt/0.5 \ --checkmaxfrac In the first extension, you can hardly see any Moiré pattern in the noise. When you go to the next (‘MAX-FRAC’) extension, you will see that almost all the pixels have a value of 1. Of course, decreasing the resolution by half is a little too drastic. Depending on your image, you may be able to reach a sufficiently good result without such a drastic degrading of the input image. For example, if you want an output pixel scale that is just 1.5 times larger than the input, you can divide the original coordinate-delta (or "cdelt") by $1/1.5=0.6666$ and try again. In the ‘MAX-FRAC’ extension, you will see that the range of pixel values is now between 0.56 to 1.0 (recall that originally, this was between 0.25 and 1.0). This shows that the pixels are more similarly mixed and in fact, when you look at the actual warped image, you can hardly distinguish any Moiré pattern in the noise. However, deep astronomical data are usually built by several exposures (images), not a single one. Each image is also taken by (slightly) shifting the telescope compared to the previous exposure. This shift is known as "dithering" or a "pointing pattern", see *note Pointing pattern design::. We do this for many reasons (for example tracking errors in the telescope, high background values, removing the effect of bad pixels or those affected by cosmic rays, robust flat pattern measurement, etc.(1)). One of those "etc." reasons is to correct the Moiré pattern in the final coadded deep image. The Moiré pattern is fixed to the grid of the image, slightly shifting the telescope will result in the pattern appearing in different parts of the sky. Therefore when we later stack, or coadd, the separate exposures into a deep image, the Moiré pattern will be decreased there. However, dithering has possible drawbacks based on the scientific goal. For example when observing time-variable phenomena where cutting the exposures to several shorter ones is not feasible. If this is not the case for you (for example in galaxy evolution), continue with the rest of this section. Because we have multiple exposures that are slightly (sub-pixel) shifted, we can also increase the spatial resolution of the output. For example, let's set the output coordinate-delta (‘--cdelt’, or pixel scale) to be 1/2 of the input. In other words, the number of pixels in each dimension of the output is double the first Warp command of this section: $ astwarp jplus-exp1.fits.fz --center=107.62920,39.72472 \ --width=8/60 -ojplus-e1.fits --cdelt=$cdelt/2 \ --checkmaxfrac $ aststatistics jplus-e1.fits -hMAX-FRAC --minimum --maximum 6.26360438764095e-02 2.50680270139128e-01 $ astscript-fits-view jplus-e1.fits From the last command, you see that like the previous change in ‘--cdelt’, the range of ‘MAX-FRAC’ has decreased. However, when you look at the warped image and the ‘MAX-FRAC’ image with the last command, you still visually see the Moiré pattern in the noise (although it has significantly decreased compared to the original resolution). It is still present because 2 is an exact multiple of 1. Let's try increasing the resolution (oversampling) by a factor of 1.25 (which isn't an exact multiple of 1): $ astwarp jplus-exp1.fits.fz --center=107.62920,39.72472 \ --width=8/60 -ojplus-e1.fits --cdelt=$cdelt/1.25 \ --checkmaxfrac $ astscript-fits-view jplus-e1.fits You don't see any Moiré pattern in the noise any more, but when you look at the ‘MAX-FRAC’ extension, you see it is very different from the ones you had seen before. In the previous ‘MAX-FRAC’ image, you could see large blobs of similar values. But here, you see that the variation is almost on a pixel scale, and the difference between one pixel to the next is not significant. This is why you don't see any Moiré pattern in the warped image. In J-PLUS, each part of the sky was observed with a three-point pointing pattern (very small shifts in each pointing). Let's download the other two exposures and warp the same region of the sky to the same pixel grid (using the ‘--gridfile’ feature). Then, let's open all three warped images in one DS9 instance: $ wget $jplusdr2/get_fits?id=771465 -Ojplus-exp2.fits.fz $ wget $jplusdr2/get_fits?id=771467 -Ojplus-exp3.fits.fz $ astwarp jplus-exp2.fits.fz --gridfile jplus-e1.fits \ -o jplus-e2.fits --checkmaxfrac $ astwarp jplus-exp3.fits.fz --gridfile jplus-e1.fits \ -o jplus-e3.fits --checkmaxfrac $ astscript-fits-view jplus-e*.fits In the three warped images, you don't see any Moiré pattern, so far so good... now, take the following steps: 1. In the small "Cube" window, click the "Next" button so you see the ‘MAX-FRAC’ extension/HDU. 2. Click on the "Frame" button (in the top row of buttons just on top of the image), and select the "Single" button in the bottom row. 3. Open the "Zoom" menu (not button), and select "Zoom 16". 4. Press the <TAB> key to flip through each exposure. 5. Focus your eyes on the pixels with the largest value (white colored pixels), while pressing <TAB> to flip between the exposures. You will see that in each exposure they cover different pixels (nicely getting averaged out after stacking). The exercise above shows that the Moiré pattern (that had already decreased significantly) will be further decreased after we stack the images. So let's stack these three images with the commands below. First, we need to remove the sky-level from each image using *note NoiseChisel::, then we'll stack the ‘INPUT-NO-SKY’ extensions using filled MAD-clipping (to reject outliers, and especially diffuse outliers, robustly, see *note Clipping outliers::). $ for i in $(seq 3); do \ astnoisechisel jplus-e$i.fits -ojplus-nc$i.fits; \ done $ astarithmetic jplus-nc*.fits 3 5 0.2 sigclip-mean \ -gINPUT-NO-SKY -ojplus-stack.fits $ astscript-fits-view jplus-nc*.fits jplus-stack.fits After opening the individual exposures and the final stack with the last command, take the following steps to see the comparisons properly: 1. Click on the stack image so it is selected. 2. Go to the "Frame" menu, then the "Lock" item, then activate "Scale and Limits". 3. Scroll your mouse or touchpad to zoom into the image. You clearly see that the stacked image is deeper and that there is no Moiré pattern, while you have slightly _improved_ the spatial resolution of the output compared to the input. In case you want the stack to have the original pixel resolution, you just need one more warp: $ astwarp jplus-stack.fits --cdelt=$cdelt -ojplus-stack-origres.fits For optimal results, the oversampling should be determined by the dithering pattern of the observation: For example if you only have two dither points, you want the pixels with maximum value in the ‘MAX-FRAC’ image of one exposure to fall on those with a minimum value in the other exposure. Ideally, many more dither points should be chosen when you are planning your observation (not just for the Moiré pattern, but also for all the other reasons mentioned above). Based on the dithering pattern, you want to select the increased resolution such that the maximum ‘MAX-FRAC’ values fall on every different pixel of the output grid for each exposure. Note that this discussion is on small shifts between pointings (dithers), not large ones like offsets); see *note Pointing pattern design::. ---------- Footnotes ---------- (1) E.g., <https://www.stsci.edu/hst/instrumentation/wfc3/proposing/dithering-strategies>  File: gnuastro.info, Node: Clipping outliers, Prev: Moire pattern in stacking and its correction, Up: Tutorials 2.10 Clipping outliers ====================== Outliers occur often in data sets. For example cosmic rays in astronomical imaging: the image of your target galaxy can be affected by a cosmic ray in one of the five exposures you took in one night. As a result, when you compare the measured magnitude of your target galaxy in all the exposures, you will get measurements like this (all in magnitudes) 19.8, 20.1, 20.5, 17.0, 19.9 (all fluctuating around magnitude 20, except the much brighter 17th magnitude measurement). Normally, you would simply take the mean of these measurements to estimate the magnitude of your target with more precision. However, the 17th magnitude measurement above is clearly wrong and will significantly affect the mean: without it, the mean magnitude is 20.07, but with it, the mean is 19.46: $ echo " 19.8 20.1 20.5 17 19.9" \ | tr ' ' '\n' \ | aststatistics --mean 1.94600000000000e+01 $ echo " 19.8 20.1 20.5 19.9" \ | tr ' ' '\n' \ | aststatistics --mean 2.00750000000000e+01 This difference of 0.61 magnitudes (or roughly 1.75 times) is significant (for the definition of magnitudes in astronomy, see *note Brightness flux magnitude::). In the simple example above, you can visually identify the "outlier" and manually remove it. But in most common situations you will not be so lucky! For example when you want to stack the five images of the five exposures above, and each image has $4000\times4000$ (or 16 million!) pixels and not possible by hand in a reasonable time (an average human's lifetime!). This tutorial reviews the effect of outliers and different available ways to remove them. In particular, we will be looking at stacking of multiple datasets and collapsing one dataset along one of its dimensions. But the concepts and methods are applicable to any analysis that is affected by outliers. * Menu: * Building inputs and analysis without clipping:: Building a dataset for demonstration below. * Sigma clipping:: Standard deviation (STD) clipping. * MAD clipping:: Median Absolute Deviation (MAD) clipping. * Filled re-clipping:: Two clips with holes filled in the middle.  File: gnuastro.info, Node: Building inputs and analysis without clipping, Next: Sigma clipping, Prev: Clipping outliers, Up: Clipping outliers 2.10.1 Building inputs and analysis without clipping ---------------------------------------------------- As described in *note Clipping outliers::, the goal of this tutorial is to demonstrate the effects of outliers and show how to "clip" them from basic statistics measurements. This is best done on an actual dataset (rather than pure theory). In this section we will build nine noisy images with the script below, such that one of the images has a circle in the middle. We will then stack the 9 images into one final image based on different statistical measurements: the mean, median, standard deviation (STD), median absolute deviation (MAD) and number of inputs used in each pixel. We will then analyze the resulting stacks to demonstrate the problem with outliers. Put the script below into a plain-text file (assuming it is called ‘script.sh’), and run it with ‘bash ./script.sh’. For more on writing and good practices in shell scripts, see *note Writing scripts to automate the steps::. The last command of the script above calls DS9 to visualize the five output stacked images mentioned above. # Constants list="" sigma=10 number=9 radius=30 width=201 bdir=build profsum=3e5 background=10 random_seed=1699270427 # Clipping parameters (will be set later when we start clipping). # clip_multiple: 3 for sigma; 4.48 for MAD # clip_tolerance: 0.1 for sigma; 0.01 for MAD clip_operator="" clip_multiple="" clip_tolerance="" # Stop if there is any error. set -e # If the build directory does not exist, build it. if ! [ -d $bdir ]; then mkdir $bdir; fi # The final image (with largest number) will contain the outlier: # we'll put a flat circle in the center of the image as the outlier # structure. outlier=$bdir/in-$number.fits nn=$bdir/$number-no-noise.fits export GSL_RNG_SEED=$random_seed center=$(echo $width | awk '{print int($1/2)+1}') echo "1 $center $center 5 $radius 0 0 1 $profsum 1" \ | astmkprof --mode=img --mergedsize=$width,$width \ --oversample=1 --output=$nn --mcolissum astarithmetic $nn $background + $sigma mknoise-sigma \ --envseed -o$outlier # Build pure noise and add elements to the list of images to stack. list=$outlier numnoise=$(echo $number | awk '{print $1-1}') for i in $(seq 1 $numnoise); do img="$bdir/in-$i.fits" if ! [ -f $img ]; then export GSL_RNG_SEED=$(echo $random_seed | awk '{print $1+'$i'}') astarithmetic $width $width 2 makenew float32 $background + \ $sigma mknoise-sigma --envseed --output=$img fi list="$list $img" done # Stack the images, for op in mean median std mad number; do if [ x"$clip_operator" = x ]; then out=$bdir/stack-$op.fits astarithmetic $list $number $op -g1 --output=$out else operator=$clip_operator-$op out=$bdir/stack-$operator.fits astarithmetic $list $number $clip_multiple $clip_tolerance \ $operator -g1 --output=$out fi done # Collapse the first and last image along the 2nd dimension. for i in 1 $number; do if [ x"$clip_operator" = x ]; then out=$bdir/collapsed-$i.fits astarithmetic $bdir/in-$i.fits 2 collapse-median counter \ --writeall --output=$out else out=$bdir/collapsed-$clip_operator-$i.fits astarithmetic $bdir/in-$i.fits $clip_multiple $clip_tolerance \ 2 collapse-$clip_operator-median counter \ --writeall --output=$out fi done After the script finishes, you can see the generated input images with the first command below. The second command shows the stacked images. $ astscript-fits-view build/in-*.fits --ds9extra="-lock scalelimits yes" $ astscript-fits-view build/stack-*.fits Color-blind readers may not clearly see the issue in the opened images with this color bar. In this case, please choose the "color" menu at the top of the DS9 and select "gray" or any other color that makes the circle most visible. The effect of an outlier on the different measurements above can be visually seen (and quantitatively measured) through the visibility of the circle (that was only present in one image, of nine). Let's look at them one by one (from the one that is most affected to the least): ‘std.fits’ The standard deviation (third image in DS9) is the most strongly affected statistic by an outlier. This is so strong that the edge of the circle is also clearly visible! The standard deviation is calculated by first finding the mean, and estimating the difference of each element from the mean. Those differences are then taken to the power of two and finally the square root is taken (after a division by the number). It is the power-of-two component that amplifies the effect of the single outlier as you see here. ‘mean.fits’ The mean (first image in DS9) is also affected by the outlier in such a way that the circle footprint is clearly visible. This is because the nine images have the same importance in the combination with a simple mean. Therefore, the outlier value pushes the result to higher values and the circle is printed. ‘median.fits’ The median (second image in DS9) is also affected by the outlier; although much less significantly than the standard deviation or mean. At first sight the circle may not be too visible! To see it more clearly, click on the "Analysis" menu in DS9 and then the "smooth" item. After smoothing, you will see how the single outlier has leaked into the median stack. Intuitively, we would think that since the median is calculated from the middle element after sorting, the outlier goes to the end and won't affect the result. However, this is not the case as we see here: with 9 elements, the "central" element is the 5th (counting from 1; after sorting). Since the pixels covered by the circle only have 8 pure noise elements; the "true" median should have been the average of the 4th and 5th elements (after sorting). By definition, the 5th element is always larger than the mean of the 4th and 5th (because the 4th element after sorting has a smaller value than the 5th element). Therefore, using the 5th element (after sorting), we are systematically choosing higher noise values in regions that are covered by the circle! With larger datasets, the difference between the central elements will be less. However, the improved precision (in the elements without an outlier) will also be more. A detailed analysis of the effect of a single outlier on the median based on the number of inputs can be done as an exercise; but in general, as this argument shows, the median is not immune to outliers; especially when you care about low signal-to-noise regimes (as we do in astronomy: low surface brightness science). ‘mad.fits’ The median absolute deviation (fourth image in DS9) is affected by outliers in a similar fashion to the median. ‘number.fits’ The number image (last image in DS9) shows the number of images that went into each pixel. Since we haven't rejected any outliers (yet!), all the pixels in this image have a value of 9. The example above included a single outlier. But we are not usually that lucky: there are usually more outliers! For example, the last command in the script above collapsed ‘1.fits’ (that was pure noise, without the circle) and ‘9.fits’ (with the circle) along their second dimension (the vertical). Collapsing was done by taking the median along all the pixels in the vertical dimension. The output of collapsing has one less dimension; in this case, producing a 1D table (with the same number of rows as the image's horizontal axis). To easily plot the output afterwards, we have also used the ‘counter’ operator. With the command below, you can open both tables and compare them: $ astscript-fits-view build/collapsed-*.fits The last command opens TOPCAT. In the "Graphics" menu, select plane plot and you will see all the values fluctuating around 10 (with a maximum/minimum around $\pm2$). Afterwards, click on the "Layers" menu and click on "Add position control". In the opened tab at the bottom (where the scroll bar in front of "Table" is empty), select the other table. In the regions that there was no circle in any of the vertical axes, the two match nicely (the noise level is the same). However, you see that the image columns that were partly covered by the outlying circle gradually get more affected as the width of the circle in that column increases (the full diameter of the circle was in the middle of the image). This shows how the median is biased by outliers as their number increases. To see the problem more prominently, use the ‘collapse-mean’ operator instead of the median. The reason that the mean is more strongly affected by the outlier is exactly the same as above for the stacking of the input images. In the subsections below, we will describe some of the basic ways to reject the effect of these outliers (and have better stacks or collapses). But the methodology is not limited to these types of data and can be generically applied; unless specified explicitly.  File: gnuastro.info, Node: Sigma clipping, Next: MAD clipping, Prev: Building inputs and analysis without clipping, Up: Clipping outliers 2.10.2 Sigma clipping --------------------- Let's assume that you have pure noise (centered on zero) with a clear Gaussian distribution (https://en.wikipedia.org/wiki/Normal_distribution), or see *note Photon counting noise::. Now let's assume you add very bright objects (signal) on the image which have a very sharp boundary. By a sharp boundary, we mean that there is a clear cutoff (from the noise) at the pixels the objects finish. In other words, at their boundaries, the objects do not fade away into the noise. In optical astronomical imaging, cosmic rays (when they collide at a near normal incidence angle) are a very good example of such outliers. The tracks they leave behind in the image are perfectly immune to the blurring caused by the atmosphere on images of stars or galaxies and they have a very high signal-to-noise ratio. They are also very energetic and so their borders are usually clearly separated from the surrounding noise. See Figure 15 in Akhlaghi and Ichikawa, 2015 (https://arxiv.org/abs/1505.01664). In such a case, when you plot the histogram (see *note Histogram and Cumulative Frequency Plot::) of the distribution, the pixels relating to those objects will be clearly separate from pixels that belong to parts of the image that did not have any signal (were just noise). In the cumulative frequency plot, after a steady rise (due to the noise), you would observe a long flat region were for a certain range of data (horizontal axis), there is no increase in the index (vertical axis). In the previous section (*note Building inputs and analysis without clipping::) we created one such dataset (‘9.fits’). With the command below, let's have a look at its histogram and cumulative frequency plot (in simple ASCII format; we are decreasing the default number of bins with ‘--numasciibins’ to show them easily within the width of the print version of this manual; feel free to change this). $ aststatistics build/in-9.fits --asciihist --asciicfp \ --numasciibins=65 ASCII Histogram: Number: 40401 Y: (linear: 0 to 4191) X: (linear: -31.9714 -- 150.323, in 65 bins) | ** | **** | ****** | ****** | ******** | ******** | ********** | ************ | ************** | ****************** ****** |******************************* ************************* |----------------------------------------------------------------- ASCII Cumulative frequency plot: Y: (linear: 0 to 40401) X: (linear: -31.9714 -- 150.323, in 65 bins) | *************** | ********************************************** | *********************************************** | ************************************************* | ************************************************** | *************************************************** | **************************************************** | ***************************************************** | ****************************************************** | ******************************************************** |***************************************************************** |----------------------------------------------------------------- Outliers like the example above can significantly bias the measurement of the background noise statistics. For example let's compare the median, mean and standard deviation of the image above with ‘1.fits’: $ aststatistics build/in-1.fits --median --mean --std 9.90529778313248e+00 9.96143102101206e+00 1.00137568561776e+01 $ aststatistics build/in-9.fits --median --mean --std 1.09305819367634e+01 1.74470443173776e+01 2.88895986970341e+01 The effect of the outliers is obvious in all three measures: the median has become 1.10 times larger, the mean 1.75 times and the standard deviation about 2.88 times! The differing effect of outliers in different statistics was already discussed in *note Building inputs and analysis without clipping::; also see *note Quantifying signal in a tile::. $\sigma$-clipping is one way to remove/clip the effect of such very strong outliers in measures like the above. $\sigma$-clipping is defined as the very simple iteration below. In each iteration, the range of input data might decrease. When the outliers are as strong as above, the outliers will be removed through this iteration. 1. Calculate the standard deviation ($\sigma$) and median ($m$) of a distribution. The median is used because, as shown above, the mean is too significantly affected by the presence of outliers. 2. Remove all points that are smaller or larger than $m\pm\alpha\sigma$. 3. Go back to step 1, unless the selected exit criteria is reached. There are commonly two types of exit criteria (to stop the $\sigma$-clipping iteration). Within Gnuastro's programs that use sigma-clipping, the exit criteria is the second value to the ‘--sclipparams’ option (the first value is the $\alpha$ above): • When a certain number of iterations has taken place (exit criteria is an integer, larger than 1). • When the new measured standard deviation is within a certain tolerance level of the previous iteration (exit criteria is floating point and less than 1.0). The tolerance level is defined by: $$\sigma_{old}-\sigma_{new} \over \sigma_{new}$$ In each clipping, the dispersion in the distribution is either less or equal. So $\sigma_{old}\geq\sigma_{new}$. Let's see the algorithm in practice with the ‘--sigmaclip’ option of Gnuastro's Statistics program (using the default configuration of $3\sigma$ clipping and tolerance of 0.1): $ aststatistics build/in-9.fits --sigmaclip Statistics (GNU Astronomy Utilities) 0.22 ------- Input: build/in-9.fits (hdu: 1) ------- 3-sigma clipping steps until relative change in STD is less than 0.1: round number median STD 1 40401 1.09306e+01 2.88896e+01 2 37660 1.00306e+01 1.07153e+01 3 37539 1.00080e+01 9.93741e+00 ------- Statistics (after clipping): Number of input elements: 40401 Number of clips: 2 Final number of elements: 37539 Median: 1.000803e+01 Mean: 1.001822e+01 Standard deviation: 9.937410e+00 Median Absolute Deviation: 6.772760e+00 After the basic information about the input and settings, the Statistics program has printed the information for each round (iteration) of clipping. Initially, there was 40401 elements (the image is $201\times201$ pixels). After the first round of clipping, only 37660 elements remained and because the difference in standard deviation was larger than the tolerance level, a third clipping was one. But the change in standard deviation after the third clip was smaller than the tolerance level, so the exit criteria was activated and the clipping finished with 37539 elements. In the end, we see that the final median, mean and standard deviation are very similar to the data without any outlier (‘build/1.fits’ in the example above). The example above provided a single statistic from a single dataset. Other scenarios where sigma-clipping becomes necessary are stacking and collapsing (that was the main goal of the script in *note Building inputs and analysis without clipping::). To generate $\sigma$-clipped stacks and collapsed tables, you just need to change the values of the three variables of the script (shown below). After making this change in your favorite text editor, have a look at the outputs: $ grep ^clip_ script.sh clip_operator=sigclip # These variables will be used more clip_multiple=3 # effectively with the clipping clip_tolerance=0.1 # operators of the next sections. $ bash ./script.sh $ astscript-fits-view build/stack-std.fits \ build/stack-sigclip-std.fits \ build/stack-*mean.fits \ build/stack-*median.fits \ build/stack-*number.fits \ --ds9extra="-tile grid layout 2 4 -scale minmax" It is clear that the $\sigma$-clipped results have significantly improved in all four measures (images in the right column in DS9). The reason is clear in the ‘stack-sigclip-number.fits’ image (which show how many images were used for each pixel): almost all of the outlying circle has been accounted for (the pixel values are 8, not 9, showing 8 images went into those). It is the leaked holes in the ‘stack-sigclip-number.fits’ image (with value of 9) that keep the circle in the final stack of the other measures (at various levels). See *note Filled re-clipping:: for stacking operators that can account for this. So far, $\sigma$-clipping has preformed nicely. However, there are important caveats to $\sigma$-clipping that are listed in the box below and further elaborated (with examples) afterwards. *Caveats of $\sigma$-clipping*: There are some important caveats to $\sigma$-clipping: • The standard deviation is itself heavily influenced by the presence of outliers. Therefore a sufficiently small number of outliers can expand the standard deviation such that they stay within the boundaries. • When the outliers do not constitute a clearly distinct distribution like the example here, sigma-clipping will not be able to separate them like here. To demonstrate how weaker outliers will not be clipped in sigma clipping, let's decrease the total sum of values in the outlying circle, then re-run the script: $ grep ^profsum script.sh profsum=1e5 $ bash ./script.sh Let's have a look at the new outlying circle with the first command below. With the second command, let's view its pixel value histogram (recall that previously, the circle had a clearly separate distribution): $ astscript-fits-view build/in-9.fits $ aststatistics build/in-9.fits --asciihist --numasciibins=65 ASCII Histogram: Number: 40401 Y: (linear: 0 to 2654) X: (linear: -31.9714 -- 79.4266, in 65 bins) | ** | ***** | ********* | ********** | ************* | ************** | ***************** | ******************* | *********************** | **************************************** |***************************************************************** |----------------------------------------------------------------- We see that even tough the circle is still clearly visible in the noise, the histogram is not longer separate; it has blended into the noise, and just caused a skewness in the otherwise symmetric noise distribution. Let's try running the ‘--sigmaclip’ option as above: $ aststatistics build/in-9.fits --sigmaclip Statistics (GNU Astronomy Utilities) 0.22 ------- Input: build/in-9.fits (hdu: 1) ------- 3-sigma clipping steps until relative change in STD is less than 0.1: round number median STD 1 40401 1.09295e+01 1.34784e+01 2 39618 1.06762e+01 1.19852e+01 3 39126 1.05265e+01 1.12983e+01 ------- Statistics (after clipping): Number of input elements: 40401 Number of clips: 2 Final number of elements: 39126 Median: 1.052652e+01 Mean: 1.114819e+01 Standard deviation: 1.129831e+01 Median Absolute Deviation: 7.106166e+00 We see that the median, mean and standard deviation are over estimated (each worse than the previous!). Let's see how the $\sigma$-clipping stacking on this outlying flat circle: $ astscript-fits-view build/stack-std.fits \ build/stack-sigclip-std.fits \ build/stack-*mean.fits \ build/stack-*median.fits \ build/stack-*number.fits \ --ds9extra="-tile grid layout 2 4 -scale minmax" Compared to the previous run (where the outlying circle was brighter), we see that $\sigma$-clipping is now less successful in removing the outlying circle from the stacks; or in the single value measurements. This is particularly visible in the ‘stack-sigclip-number.fits’ image: the circle barely visible any more: there is only a very weak clustering of pixels with a value of 8 over the circle's pixels. This has happened because the outliers have biased the standard deviation itself to a level that includes them with this multiple of the standard deviation. To gauge if $\sigma$-clipping will be useful for your dataset, look at the histogram (see *note Histogram and Cumulative Frequency Plot::). The ASCII histogram that is printed on the command-line with ‘--asciihist’ (like above) is good enough in most cases. But you can't do this manually in every case (as in the stacking which involved more than forty thousand pixels)! Clipping outliers should be based on a measure of scatter that is less affected by outliers! Therefore, in Gnuastro we also have median absolute deviation (MAD) clipping which is described in the next section (*note MAD clipping::).  File: gnuastro.info, Node: MAD clipping, Next: Filled re-clipping, Prev: Sigma clipping, Up: Clipping outliers 2.10.3 MAD clipping ------------------- When clipping outliers, it is important that the used measure of dispersion is itself not strongly affected by the outliers. Previously (in *note Sigma clipping::), we saw that the standard deviation is not a good measure of dispersion because of its strong dependency on outliers. In this section, we'll introduce clipping operators that are based on the median absolute deviation (https://en.wikipedia.org/wiki/Median_absolute_deviation) (MAD). The median absolute deviation is defined as the median of the differences of each element from the median of the elements. As mathematically derived in the Wikipedia page above, for a pure Gaussian distribution, the median absolute deviation will be roughly $0.67449\sigma$. We can confirm this numerically from the images with pure noise that we created previously in *note Building inputs and analysis without clipping::. With the first command below we can see the raw standard deviation and median absolute deviation values and the second command shows their division: $ aststatistics build/in-1.fits --std --mad 1.00137568561776e+01 6.74662296703343e+00 $ aststatistics build/in-1.fits --std --mad | awk '{print $2/$1}' 0.673735 The algorithm of MAD-clipping is identical to $\sigma$-clipping, except that instead of $\sigma$, it uses the median absolute deviation. Since the median absolute deviation is smaller than the standard deviation by roughly 0.67, if you regularly use $3\sigma$ there, you should use $(3/0.67)\rm{MAD}=(4.48)\rm{MAD}$ when doing MAD-clipping. The usual tolerance should also be changed due to the differing nature of the median absolute deviation (based on sorted differences) in relation to the standard deviation (based on the sum of squared differences). A tolerance of 0.01 is better suited to the termination criteria of MAD-clipping. To demonstrate the steps in practice, let's assume you have the original script in *note Building inputs and analysis without clipping:: with the changes shown in the first command below. With the second command we'll execute the script, and with the third command we'll do the iterations of MAD-clipping: $ grep '^clip_\|^profsum' script.sh profsum=1e5 clip_operator=madclip clip_multiple=4.48 clip_tolerance=0.01 $ bash ./script.sh $ aststatistics build/in-9.fits --madclip Statistics (GNU Astronomy Utilities) 0.21.6-28a1 ------- Input: build/in-9.fits (hdu: 1) ------- 4.48-MAD clipping steps until relative change in MAD (median absolute deviation) is less than 0.01: round number median MAD 1 40401 1.09295e+01 7.38609e+00 2 38789 1.04261e+01 7.03508e+00 3 38549 1.03469e+01 6.97927e+00 ------- Statistics (after clipping): Number of input elements: 40401 Number of clips: 2 Final number of elements: 38549 Median: 1.034690e+01 Mean: 1.068946e+01 Standard deviation: 1.062083e+01 Median Absolute Deviation: 6.979274e+00 We see that the median, mean and standard deviation after MAD-clipping is much better than the basic $\sigma$-clipping (see *note Sigma clipping::): the median is now 10.3 (was 10.5 in $\sigma$-clipping), mean is 10.7 (was 10.11) and the standard deviation is 10.6 (was 10.12). Let's compare the MAD-clipped stacks with the results of the previous section. Since we want the images shown in a certain order, we'll first construct the list of images (with a ‘for’ loop that will fill the ‘imgs’ variable). Note that this assumes you have ran and carefully read/understand all the commands in the previous sections (*note Building inputs and analysis without clipping:: and *note Sigma clipping::). Tip: the three ‘--ds9extra’ options ensure that the bottom row (showing the number of images used in each pixel) has the same scale and limits in all three columns. $ imgs="" $ p=build/stack # 'p' is short for "prefix" $ for m in std mean median mad number; do \ imgs="$imgs $p-$m.fits $p-sigclip-$m.fits $p-madclip-$m.fits"; \ done $ astscript-fits-view $imgs --ds9extra="-tile grid layout 3 5" \ --ds9extra="-scale limits 1 9" \ --ds9extra="-frame move back -scale limits 1 9" \ --ds9extra="-frame move back -scale limits 1 9" The third column shows the newly created MAD-clipped stacks. We see that the outlying circle is much more weaker in the MAD-clipped stacks than in the $\sigma$-clipped stacks in all measures (except for the "number" measure where the circle should be stronger). However, unfortunately even MAD-clipping is not perfect and we still see the circle in all four cases, even with the MAD-clipped median (more clearly: after smoothing/blocking). The reason is similar to what was described in $\sigma$-clipping (using the original ‘profsum=3e5’: the leaked holes in the numbers image. Because the circle is not too distant from the noise some of its elements do not get clipped, and their stacked value gets systematically higher than the rest of the image. In Gnuastro, we have a fix for this that is described fully in the next section (*note Filled re-clipping::).  File: gnuastro.info, Node: Filled re-clipping, Prev: MAD clipping, Up: Clipping outliers 2.10.4 Filled re-clipping ------------------------- When source of the outlier covers more than one element, and its flux is close to the noise level, not all of its elements will be clipped: because of noise, some of its elements will remain un-clipped; and thus affecting the output. Examples of this were created and thoroughly discussed in previous sections with $\sigma$-clipping and MAD-clipping (see *note Sigma clipping:: and *note MAD clipping::). To avoid this problem, in Gnuastro we have an extra set of clipping operators that will do two rounds of clips and with some basic operations in the middle. 1. The requested clipping is first applied. This will the return the median and dispersion measure (MAD or STD). 2. A mask is created for each input image (in stacking) or 1D array (in collapsing). Any pixel that is outside the requested clip range is set to 1; the rest are set to 0. 3. Isolated regions are found: • For 2D images (were each pixel has 8 neighbors) the mask pixels are first dilated (so the edges of the regions are closed off from the surrounding noise). • For 1D arrays (where each element only has two neighbors), the mask is first eroded. This is necessary because the next step (where the holes are filled), two pixels that have been clipped purely due to noise with a large distance between them can wrongly mask a very large range of the input data. 4. Any 0-valued pixel in the masks that are fully surrounded by 1s (or "holes") are filled (given a value of 1). 5. All the pixels that have a value of 1 in the mask are set to NaN in the respective input data (that the mask corresponds to). 6. The requested clipping is repeated on the newly masked inputs. Through this process, the less significant outliers (which do not get clipped independently) are clipped based on their surrounding elements. The filled re-clipping operators have an extra ‘-fill’ in their names. For example the filled MAD-clipped mean is called ‘madclip-fill-mean’ (while the simple MAD-clipped mean operator was called ‘madclip-mean’). Let's run our script with the filled $\sigma$-clipping and $MAD$-clipping (before each run, make sure the values shown under the ‘grep’ command are correct). With the last command, we'll view all the outputs generated so far (in this section and the previous ones (*note Building inputs and analysis without clipping::, *note Sigma clipping:: and *note MAD clipping::): $ grep '^clip_\|^profsum' script.sh profsum=1e5 clip_operator=madclip-fill clip_multiple=4.48 clip_tolerance=0.01 $ bash ./script $ $ grep '^clip_\|^profsum' script.sh profsum=1e5 clip_operator=sigclip-fill clip_multiple=3 clip_tolerance=0.1 $ bash ./script $ imgs="" $ for m in std mean median mad number; do \ imgs="$imgs $p-$m.fits $p-sigclip-$m.fits $p-sigclip-fill-$m.fits" \ imgs="$p-madclip-$m.fits $p-madclip-fill-$m.fits"; \ done $ astscript-fits-view $imgs --ds9extra="-tile grid layout 5 6" \ --ds9extra="-scale limits 1 9" \ --ds9extra="-frame move back -scale limits 1 9" \ --ds9extra="-frame move back -scale limits 1 9" \ --ds9extra="-frame move back -scale limits 1 9" \ --ds9extra="-frame move back -scale limits 1 9" The last column (belonging to the ‘madclip-fill-*’ operators) is _finally_ free of the outlying circle (that was present in only one of nine inputs). The filling operation did not affect the ‘sigclip-fill-*’ operators (third column DS9 from the last command above)! The reason is clear from the bottom row (showing the number of images used in each pixel). The weak over density of clipped pixels over the circle is barely visible and was not strong enough for defining "holes" (that will be filled). On the contrary, when comparing the ‘madclip-number.fits’ and ‘madclip-fill-number.fits’, the filled holes within the circle are clearly visible. But the script also generated collapsed columns of ‘build/in-9.fits’ (to a 1D table). In this case, for each column, the number of outliers increase as we enter the circle and reach a maximum in the middle of the image. Let's have a look at those outputs: $ astscript-fits-view build/collapsed-madclip-9.fits \ build/collapsed-madclip-fill-9.fits When comparing the two in TOPCAT (following the same process described in *note Building inputs and analysis without clipping::) you will notice that the difference is only in the edges of the circle. The 4.48 multiple of MAD-clipping (corresponding to 3 sigma), was not successful in removing the many outlying pixels due to the circle in the central pixels of the image. This is a relatively high threshold and was used because for the images, we only had 9 elements in each clipping for every pixel. But for the collapsing, we have many more pixels in each vertical direction of the image (201 pixels). Let's decrease the threshold to 3 and calculate the collapsed mean after MAD-clipping, once with filled re-clipping and once without it: $ for m in mean number; do \ for clip in madclip madclip-fill; do \ astarithmetic build/in-9.fits 3 0.01 2 collapse-$clip-$m \ counter --writeall -ocollapse-$clip-$m.fits; \ done; \ done The two loops above created four tables. First, with the command below, let's look at the two measured mean values (one with filling and the other without it): $ astscript-fits-view collapse-*-mean.fits In the table without filled re-clipping, you see a small shift in the center of the image (around 100 in the horizontal axis). Let's have a look at the final number of pixels used in each clipping: $ astscript-fits-view collapse-*-number.fits The difference is now clearly visible when you plot both in one "Plane plot" window. In the filled re-clipping case, we see a clear dip in the number of pixels that very nicely corresponds to the number of pixels associated to the circle. But the dip is much more noisy in the simple MAD-clipping.  File: gnuastro.info, Node: Installation, Next: Common program behavior, Prev: Tutorials, Up: Top 3 Installation ************** The latest released version of Gnuastro source code is always available at the following URL: <http://ftpmirror.gnu.org/gnuastro/gnuastro-latest.tar.gz> *note Quick start:: describes the commands necessary to configure, build, and install Gnuastro on your system. This chapter will be useful in cases where the simple procedure above is not sufficient, for example, your system lacks a mandatory/optional dependency (in other words, you cannot pass the ‘$ ./configure’ step), or you want greater customization, or you want to build and install Gnuastro from other random points in its history, or you want a higher level of control on the installation. Thus if you were happy with downloading the tarball and following *note Quick start::, then you can safely ignore this chapter and come back to it in the future if you need more customization. *note Dependencies:: describes the mandatory, optional and bootstrapping dependencies of Gnuastro. Only the first group are required/mandatory when you are building Gnuastro using a tarball (see *note Release tarball::), they are very basic and low-level tools used in most astronomical software, so you might already have them installed, if not they are very easy to install as described for each. *note Downloading the source:: discusses the two methods you can obtain the source code: as a tarball (a significant snapshot in Gnuastro's history), or the full history(1). The latter allows you to build Gnuastro at any random point in its history (for example, to get bug fixes or new features that are not released as a tarball yet). The building and installation of Gnuastro is heavily customizable, to learn more about them, see *note Build and install::. This section is essentially a thorough explanation of the steps in *note Quick start::. It discusses ways you can influence the building and installation. If you encounter any problems in the installation process, it is probably already explained in *note Known issues::. In *note Other useful software:: the installation and usage of some other free software that are not directly required by Gnuastro but might be useful in conjunction with it is discussed. * Menu: * Dependencies:: Necessary packages for Gnuastro. * Downloading the source:: Ways to download the source code. * Build and install:: Configure, build and install Gnuastro. ---------- Footnotes ---------- (1) *note Bootstrapping dependencies:: are required if you clone the full history.  File: gnuastro.info, Node: Dependencies, Next: Downloading the source, Prev: Installation, Up: Installation 3.1 Dependencies ================ A minimal set of dependencies are mandatory for building Gnuastro from the standard tarball release. If they are not present you cannot pass Gnuastro's configuration step. The mandatory dependencies are therefore very basic (low-level) tools which are easy to obtain, build and install, see *note Mandatory dependencies:: for a full discussion. If you have the packages of *note Optional dependencies::, Gnuastro will have additional functionality (for example, converting FITS images to JPEG or PDF). If you are installing from a tarball as explained in *note Quick start::, you can stop reading after this section. If you are cloning the version controlled source (see *note Version controlled source::), an additional bootstrapping step is required before configuration and its dependencies are explained in *note Bootstrapping dependencies::. Your operating system's package manager is an easy and convenient way to download and install the dependencies that are already pre-built for your operating system. In *note Dependencies from package managers::, we will list some common operating system package manager commands to install the optional and mandatory dependencies. * Menu: * Mandatory dependencies:: Gnuastro will not install without these. * Optional dependencies:: Adding more functionality. * Bootstrapping dependencies:: If you have the version controlled source. * Dependencies from package managers:: Installing from OS package managers.  File: gnuastro.info, Node: Mandatory dependencies, Next: Optional dependencies, Prev: Dependencies, Up: Dependencies 3.1.1 Mandatory dependencies ---------------------------- The mandatory Gnuastro dependencies are very basic and low-level tools. They all follow the same basic GNU based build system (like that shown in *note Quick start::), so even if you do not have them, installing them should be pretty straightforward. In this section we explain each program and any specific note that might be necessary in the installation. * Menu: * GNU Scientific Library:: Installing GSL. * CFITSIO:: C interface to the FITS standard. * WCSLIB:: C interface to the WCS standard of FITS.  File: gnuastro.info, Node: GNU Scientific Library, Next: CFITSIO, Prev: Mandatory dependencies, Up: Mandatory dependencies 3.1.1.1 GNU Scientific Library .............................. The GNU Scientific Library (http://www.gnu.org/software/gsl/), or GSL, is a large collection of functions that are very useful in scientific applications, for example, integration, random number generation, and Fast Fourier Transform among many others. To download and install GSL from source, you can run the following commands. $ wget https://ftp.gnu.org/gnu/gsl/gsl-latest.tar.gz $ tar -xf gsl-latest.tar.gz $ cd gsl-X.X # Replace X.X with version number. $ ./configure CFLAGS="$CFLAGS -g0 -O3" $ make -j8 # Replace 8 with no. CPU threads. $ make check $ sudo make install  File: gnuastro.info, Node: CFITSIO, Next: WCSLIB, Prev: GNU Scientific Library, Up: Mandatory dependencies 3.1.1.2 CFITSIO ............... CFITSIO (http://heasarc.gsfc.nasa.gov/fitsio/) is the closest you can get to the pixels in a FITS image while remaining faithful to the FITS standard (http://fits.gsfc.nasa.gov/fits_standard.html). It is written by William Pence, the principal author of the FITS standard(1), and is regularly updated. Setting the definitions for all other software packages using FITS images. Some GNU/Linux distributions have CFITSIO in their package managers, if it is available and updated, you can use it. One problem that might occur is that CFITSIO might not be configured with the ‘--enable-reentrant’ option by the distribution. This option allows CFITSIO to open a file in multiple threads, it can thus provide great speed improvements. If CFITSIO was not configured with this option, any program which needs this capability will warn you and abort when you ask for multiple threads (see *note Multi-threaded operations::). To install CFITSIO from source, we strongly recommend that you have a look through Chapter 2 (Creating the CFITSIO library) of the CFITSIO manual and understand the options you can pass to ‘$ ./configure’ (they are not too much). This is a very basic package for most astronomical software and it is best that you configure it nicely with your system. Once you download the source and unpack it, the following configure script should be enough for most purposes. Do not forget to read chapter two of the manual though, for example, the second option is only for 64bit systems. The manual also explains how to check if it has been installed correctly. CFITSIO comes with two executable files called ‘fpack’ and ‘funpack’. From their manual: they "are standalone programs for compressing and uncompressing images and tables that are stored in the FITS (Flexible Image Transport System) data format. They are analogous to the gzip and gunzip compression programs except that they are optimized for the types of astronomical images that are often stored in FITS format". The commands below will compile and install them on your system along with CFITSIO. They are not essential for Gnuastro, since they are just wrappers for functions within CFITSIO, but they can come in handy. The ‘make utils’ command is only available for versions above 3.39, it will build these executable files along with several other executable test files which are deleted in the following commands before the installation (otherwise the test files will also be installed). The commands necessary to download the source, decompress, build and install CFITSIO from source are described below. $ urlbase=http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c $ wget $urlbase/cfitsio_latest.tar.gz $ tar -xf cfitsio_latest.tar.gz $ cd cfitsio-X.XX # Replace X.XX with version $ ./configure --prefix=/usr/local --enable-sse2 --enable-reentrant \ CFLAGS="$CFLAGS -g0 -O3" $ make $ make utils $ ./testprog > testprog.lis # See below if this has an error $ diff testprog.lis testprog.out # Should have no output $ cmp testprog.fit testprog.std # Should have no output $ rm cookbook fitscopy imcopy smem speed testprog $ sudo make install In the ‘./testprog > testprog.lis’ step, you may confront an error, complaining that it cannot find ‘libcfitsio.so.AAA’ (where ‘AAA’ is an integer). This is the library that you just built and have not yet installed. But unfortunately some versions of CFITSIO do not account for this on some OSs. To fix the problem, you need to tell your OS to also look into current CFITSIO build directory with the first command below, afterwards, the problematic command (second below) should run properly. $ export LD_LIBRARY_PATH="$(pwd):$LD_LIBRARY_PATH" $ ./testprog > testprog.lis Recall that the modification above is ONLY NECESSARY FOR THIS STEP. _Do not_ put the ‘LD_LIBRARY_PATH’ modification command in a permanent place (like your bash startup file). After installing CFITSIO, close your terminal and continue working on a new terminal (so ‘LD_LIBRARY_PATH’ has its default value). For more on ‘LD_LIBRARY_PATH’, see *note Installation directory::. ---------- Footnotes ---------- (1) Pence, W.D. et al. Definition of the Flexible Image Transport System (FITS), version 3.0. (2010) Astronomy and Astrophysics, Volume 524, id.A42, 40 pp.  File: gnuastro.info, Node: WCSLIB, Prev: CFITSIO, Up: Mandatory dependencies 3.1.1.3 WCSLIB .............. WCSLIB (http://www.atnf.csiro.au/people/mcalabre/WCS/) is written and maintained by one of the authors of the World Coordinate System (WCS) definition in the FITS standard (http://fits.gsfc.nasa.gov/fits_standard.html)(1), Mark Calabretta. It might be already built and ready in your distribution's package management system. However, here the installation from source is explained, for the advantages of installation from source please see *note Mandatory dependencies::. To install WCSLIB you will need to have CFITSIO already installed, see *note CFITSIO::. WCSLIB also has plotting capabilities which use PGPLOT (a plotting library for C). If you wan to use those capabilities in WCSLIB, *note PGPLOT:: provides the PGPLOT installation instructions. However PGPLOT is old(2), so its installation is not easy, there are also many great modern WCS plotting tools (mostly in written in Python). Hence, if you will not be using those plotting functions in WCSLIB, you can configure it with the ‘--without-pgplot’ option as shown below. If you have the cURL library (3) on your system and you installed CFITSIO version 3.42 or later, you will need to also link with the cURL library at configure time (through the ‘-lcurl’ option as shown below). CFITSIO uses the cURL library for its HTTPS (or HTTP Secure(4)) support and if it is present on your system, CFITSIO will depend on it. Therefore, if ‘./configure’ command below fails (you do not have the cURL library), then remove this option and rerun it. To download, configure, build, check and install WCSLIB from source, you can follow the steps below. ## Download and unpack the source tarball $ wget ftp://ftp.atnf.csiro.au/pub/software/wcslib/wcslib.tar.bz2 $ tar -xf wcslib.tar.bz2 ## In the `cd' command, replace `X.X' with version number. $ cd wcslib-X.X ## If `./configure' fails, remove `-lcurl' and run again. $ ./configure LIBS="-pthread -lcurl -lm" --without-pgplot \ --disable-fortran CFLAGS="$CFLAGS -g0 -O3" $ make $ make check $ sudo make install ---------- Footnotes ---------- (1) Greisen E.W., Calabretta M.R. (2002) Representation of world coordinates in FITS. Astronomy and Astrophysics, 395, 1061-1075. (2) As of early June 2016, its most recent version was uploaded in February 2001. (3) <https://curl.haxx.se> (4) <https://en.wikipedia.org/wiki/HTTPS>  File: gnuastro.info, Node: Optional dependencies, Next: Bootstrapping dependencies, Prev: Mandatory dependencies, Up: Dependencies 3.1.2 Optional dependencies --------------------------- The libraries listed here are only used for very specific applications, therefore they are optional and Gnuastro can be built without them (with only those specific features disabled). Since these are pretty low-level tools, they are not too hard to install from source, but you can also use your operating system's package manager to easily install all of them. For more, see *note Dependencies from package managers::. If the ‘./configure’ script cannot find any of these optional dependencies, it will notify you of the operation(s) you cannot do due to not having them. If you continue the build and request an operation that uses a missing library, Gnuastro's programs will warn that the optional library was missing at build-time and abort. Since Gnuastro was built without that library, installing the library afterwards will not help. The only way is to rebuild Gnuastro from scratch (after the library has been installed). However, for program dependencies (like cURL or Ghostscript) things are easier: you can install them after building Gnuastro also. This is because libraries are used to build the internal structure of Gnuastro's executables. However, a program dependency is called by Gnuastro's programs at run-time and has no effect on their internal structure. So if a dependency program becomes available later, it will be used next time it is requested. GNU Libtool Libtool is a program to simplify managing of the libraries to build an executable (a program). GNU Libtool has some added functionality compared to other implementations. If GNU Libtool is not present on your system at configuration time, a warning will be printed and *note BuildProgram:: will not be built or installed. The configure script will look into your search path (‘PATH’) for GNU Libtool through the following executable names: ‘libtool’ (acceptable only if it is the GNU implementation) or ‘glibtool’. See *note Installation directory:: for more on ‘PATH’. GNU Libtool (the binary/executable file) is a low-level program that is probably already present on your system, and if not, is available in your operating system package manager(1). If you want to install GNU Libtool's latest version from source, please visit its web page (https://www.gnu.org/software/libtool/). Gnuastro's tarball is shipped with an internal implementation of GNU Libtool. Even if you have GNU Libtool, Gnuastro's internal implementation is used for the building and installation of Gnuastro. As a result, you can still build, install and use Gnuastro even if you do not have GNU Libtool installed on your system. However, this internal Libtool does not get installed. Therefore, after Gnuastro's installation, if you want to use *note BuildProgram:: to compile and link your own C source code which uses the *note Gnuastro library::, you need to have GNU Libtool available on your system (independent of Gnuastro). See *note Review of library fundamentals:: to learn more about libraries. GNU Make extension headers GNU Make is a workflow management system that can be used to run a series of commands in a specific order, and in parallel if you want. GNU Make offers special features to extend it with custom functions within a dynamic library. They are defined in the ‘gnumake.h’ header. If ‘gnumake.h’ can be found on your system at configuration time, Gnuastro will build a custom library that GNU Make can use for extended functionality in (astronomical) data analysis scenarios. libgit2 Git is one of the most common version control systems (see *note Version controlled source::). When ‘libgit2’ is present, and Gnuastro's programs are run within a version controlled directory, outputs will contain the version number of the working directory's repository for future reproducibility. See the ‘COMMIT’ keyword header in *note Output FITS files:: for a discussion. libjpeg libjpeg is only used by ConvertType to read from and write to JPEG images, see *note Recognized file formats::. libjpeg (http://www.ijg.org/) is a very basic library that provides tools to read and write JPEG images, most Unix-like graphic programs and libraries use it. Therefore you most probably already have it installed. libjpeg-turbo (http://libjpeg-turbo.virtualgl.org/) is an alternative to libjpeg. It uses Single instruction, multiple data (SIMD) instructions for ARM based systems that significantly decreases the processing time of JPEG compression and decompression algorithms. libtiff libtiff is used by ConvertType and the libraries to read TIFF images, see *note Recognized file formats::. libtiff (http://www.simplesystems.org/libtiff/) is a very basic library that provides tools to read and write TIFF images, most Unix-like operating system graphic programs and libraries use it. Therefore even if you do not have it installed, it must be easily available in your package manager. cURL cURL's executable (‘curl’) is called by *note Query:: for submitting queries to remote datasets and retrieving the results. It is not necessary for the build of Gnuastro from source (only a warning will be printed if it cannot be found at configure time), so if you do not have it at build-time there is no problem. Just be sure to have it when you run ‘astquery’, otherwise you'll get an error about not finding ‘curl’. GPL Ghostscript GPL Ghostscript's executable (‘gs’) is called by ConvertType to compile a PDF file from a source PostScript file, see *note ConvertType::. Therefore its headers (and libraries) are not needed. Python3 with Numpy Python is a high-level programming language and Numpy is the most commonly used library within Python to add multi-dimensional arrays and matrices. If you configure Gnuastro with ‘--with-python’ _and_ version 3 of Python is available with a corresponding Numpy Library, Gnuastro's library will be built with some Python-related helper functions. Python wrappers for Gnuastro's library (for example, 'pyGnuastro') can use these functions when being built from source. For more on Gnuastro's Python helper functions, see *note Python interface::. This Python interface is only relevant if you want to build the Python wrappers (like 'pyGnuastro') from source. If you install the Gnuastro Python wrapper from a pre-built repository like PyPI, this feature of your Gnuastro library won't be used. Pre-built libraries contain the full Gnuastro library that they need within them (you don't even need to have Gnuastro at all!). *Can't find the Python3 and Numpy of a virtual environment:* make sure to set the ‘$PYTHON’ variable to point to the ‘python3’ command of the virtual environment before running ‘./configure’. Note that you don't need to activate the virtual env, just point ‘PYTHON’ to its Python3 executable, like the example below: $ python3 -m venv test-env # Setting up the virtual env. $ export PYTHON="$(pwd)/test-env/bin/python3" $ ./configure # Gnuastro's configure script. SAO DS9 SAO DS9 (‘ds9’) is a visualization tool for FITS images. Gnuastro's ‘astscript-fits-view’ program calls DS9 to visualize FITS images. We have a full appendix on it and how to install it in *note SAO DS9::. Since it is a run-time dependency, it can be installed at any later time (after building and installing Gnuastro). TOPCAT TOPCAT (‘topcat’) is a visualization tool for astronomical tables (most commonly: plotting). Gnuastro's ‘astscript-fits-view’ program calls TOPCAT it to visualize tables. We have a full appendix on it and how to install it in *note TOPCAT::. Since it is a run-time dependency, it can be installed at any later time (after building and installing Gnuastro). ---------- Footnotes ---------- (1) Note that we want the binary/executable Libtool program which can be run on the command-line. In Debian-based operating systems which separate various parts of a package, you want want ‘libtool-bin’, the ‘libtool’ package will not contain the executable program.  File: gnuastro.info, Node: Bootstrapping dependencies, Next: Dependencies from package managers, Prev: Optional dependencies, Up: Dependencies 3.1.3 Bootstrapping dependencies -------------------------------- Bootstrapping is only necessary if you have decided to obtain the full version controlled history of Gnuastro, see *note Version controlled source:: and *note Bootstrapping::. Using the version controlled source enables you to always be up to date with the most recent development work of Gnuastro (bug fixes, new functionalities, improved algorithms, etc.). If you have downloaded a tarball (see *note Downloading the source::), then you can ignore this subsection. To successfully run the bootstrapping process, there are some additional dependencies to those discussed in the previous subsections. These are low level tools that are used by a large collection of Unix-like operating systems programs, therefore they are most probably already available in your system. If they are not already installed, you should be able to easily find them in any GNU/Linux distribution package management system (‘apt-get’, ‘yum’, ‘pacman’, etc.). The short names in parenthesis in ‘typewriter’ font after the package name can be used to search for them in your package manager. For the GNU Portability Library, GNU Autoconf Archive and TeX Live, it is recommended to use the instructions here, not your operating system's package manager. GNU Portability Library (Gnulib) To ensure portability for a wider range of operating systems (those that do not include GNU C library, namely glibc), Gnuastro depends on the GNU portability library, or Gnulib. Gnulib keeps a copy of all the functions in glibc, implemented (as much as possible) to be portable to other operating systems. The ‘bootstrap’ script can automatically clone Gnulib (as a ‘gnulib/’ directory inside Gnuastro), however, as described in *note Bootstrapping:: this is not recommended. The recommended way to bootstrap Gnuastro is to first clone Gnulib and the Autoconf archives (see below) into a local directory outside of Gnuastro. Let's call it ‘DEVDIR’(1) (which you can set to any directory; preferentially where you keep your other development projects). Currently in Gnuastro, both Gnulib and Autoconf archives have to be cloned in the same top directory(2) like the case here(3): $ DEVDIR=/home/yourname/Development ## Select any location. $ mkdir $DEVDIR ## If it doesn't exist! $ cd $DEVDIR $ git clone https://git.sv.gnu.org/git/gnulib.git $ git clone https://git.sv.gnu.org/git/autoconf-archive.git Gnulib is a source-based dependency of Gnuastro's bootstrapping process, so simply having it is enough on your computer, there is no need to install, and thus check anything. You now have the full version controlled source of these two repositories in separate directories. Both these packages are regularly updated, so every once in a while, you can run ‘$ git pull’ within them to get any possible updates. GNU Automake (‘automake’) GNU Automake will build the ‘Makefile.in’ files in each sub-directory using the (hand-written) ‘Makefile.am’ files. The ‘Makefile.in’s are subsequently used to generate the ‘Makefile’s when the user runs ‘./configure’ before building. To check that you have a working GNU Automake in your system, you can try this command: $ automake --version GNU Autoconf (‘autoconf’) GNU Autoconf will build the ‘configure’ script using the configurations we have defined (hand-written) in ‘configure.ac’. To check that you have a working GNU Autoconf in your system, you can try this command: $ autoconf --version GNU Autoconf Archive These are a large collection of tests that can be called to run at ‘./configure’ time. See the explanation under GNU Portability Library (Gnulib) above for instructions on obtaining it and keeping it up to date. GNU Autoconf Archive is a source-based dependency of Gnuastro's bootstrapping process, so simply having it is enough on your computer, there is no need to install, and thus check anything. Just do not forget that it has to be in the same directory as Gnulib (described above). GNU Texinfo (‘texinfo’) GNU Texinfo is the tool that formats this manual into the various output formats. To bootstrap Gnuastro you need all of Texinfo's command-line programs. However, some operating systems package them separately, for example, in Fedora, ‘makeinfo’ is packaged in the ‘texinfo-tex’ package. To check that you have a working GNU Texinfo in your system, you can try this command: $ makeinfo --version GNU Libtool (‘libtool’) GNU Libtool is in charge of building all the libraries in Gnuastro. The libraries contain functions that are used by more than one program and are installed for use in other programs. They are thus put in a separate directory (‘lib/’). To check that you have a working GNU Libtool in your system, you can try this command (and from the output, make sure it is GNU's libtool) $ libtool --version GNU help2man (‘help2man’) GNU help2man is used to convert the output of the ‘--help’ option (*note --help::) to the traditional Man page (*note Man pages::). To check that you have a working GNU Help2man in your system, you can try this command: $ help2man --version LaTeX and some TeX packages Some of the figures in this book are built by LaTeX (using the PGF/TikZ package). The LaTeX source for those figures is version controlled for easy maintenance not the actual figures. So the ‘./boostrap’ script will run LaTeX to build the figures. The best way to install LaTeX and all the necessary packages is through TeX live (https://www.tug.org/texlive/) which is a package manager for TeX related tools that is independent of any operating system. It is thus preferred to the TeX Live versions distributed by your operating system. To install TeX Live, go to the web page and download the appropriate installer by following the "download" link. Note that by default the full package repository will be downloaded and installed (around 4 Gigabytes) which can take _very_ long to download and to update later. However, most packages are not needed by everyone, it is easier, faster and better to install only the "Basic scheme" (consisting of only the most basic TeX and LaTeX packages, which is less than 200 Mega bytes)(4). After the installation, be sure to set the environment variables as suggested in the end of the outputs. Any time you confront (need) a package you do not have, simply install it with a command like below (similar to how you install software from your operating system's package manager)(5). To install all the necessary TeX packages for a successful Gnuastro bootstrap, run this command: $ sudo su # tlmgr install epsf jknapltx caption biblatex biber iftex \ etoolbox logreq xstring xkeyval pgf ms \ xcolor pgfplots times rsfs ps2eps epspdf To check that you have a working LaTeX executable in your system, you can try this command (this just checks if LaTeX exists, as described above, if you have a missing package, you can easily identify it from the output and install it with ‘tlmgr’): $ latex --version ImageMagick (‘imagemagick’) ImageMagick is a wonderful and robust program for image manipulation on the command-line. ‘bootstrap’ uses it to convert the book images into the formats necessary for the various book formats. Since ImageMagick version 7, it is necessary to edit the policy file (‘/etc/ImageMagick-7/policy.xml’) to have the following line (it maybe present, but commented, in this case un-comment it): <policy domain="coder" rights="read|write" pattern="{PS,PDF,XPS}"/> If the following line is present, it is also necessary to comment/remove it. <policy domain="delegate" rights="none" pattern="gs" /> To learn more about the ImageMagick security policy please see: <https://imagemagick.org/script/security-policy.php>. To check that you have a working ImageMagick in your system, you can try this command: $ convert --version ---------- Footnotes ---------- (1) If you are not a developer in Gnulib or Autoconf archives, ‘DEVDIR’ can be a directory that you do not backup. In this way the large number of files in these projects will not slow down your backup process or take bandwidth (if you backup to a remote server). (2) If you already have the Autoconf archives in a separate directory, or cannot clone it in the same directory as Gnulib, or you have it with another directory name (not ‘autoconf-archive/’), you can follow this short step. Set ‘AUTOCONFARCHIVES’ to your desired address. Then define a symbolic link in ‘DEVDIR’ with the following command so Gnuastro's bootstrap script can find it: ‘$ ln -s $AUTOCONFARCHIVES $DEVDIR/autoconf-archive’. (3) If your internet connection is active, but Git complains about the network, it might be due to your network setup not recognizing the git protocol. In that case use the following URL for the HTTP protocol instead (for Autoconf archives, replace the name): ‘http://git.sv.gnu.org/r/gnulib.git’ (4) You can also download the DVD iso file at a later time to keep as a backup for when you do not have internet connection if you need a package. (5) After running TeX, or LaTeX, you might get a warning complaining about a ‘missingfile’. Run '‘tlmgr info missingfile’' to see the package(s) containing that file which you can install.  File: gnuastro.info, Node: Dependencies from package managers, Prev: Bootstrapping dependencies, Up: Dependencies 3.1.4 Dependencies from package managers ---------------------------------------- The most basic way to install a package on your system is to build the packages from source yourself. Alternatively, you can use your operating system's package manager to download pre-compiled files and install them. The latter choice is easier and faster. However, we recommend that you build the *note Mandatory dependencies:: yourself from source (all necessary commands and links are given in the respective section). Here are some basic reasons behind this recommendation. 1. Your operating system's pre-built software might not be the most recent release. For example, Gnuastro itself is also packaged in some package managers. For the list see: <https://repology.org/project/gnuastro/versions>. You will notice that Gnuastro's version in some operating systems is more than 10 versions old! It is the same for all the dependencies of Gnuastro. 2. For each package, Gnuastro might preform better (or require) certain configuration options that your distribution's package managers did not add for you. If present, these configuration options are explained during the installation of each in the sections below (for example, in *note CFITSIO::). When the proper configuration has not been set, the programs should complain and inform you. 3. For the libraries, they might separate the binary file from the header files which can cause confusion, see *note Known issues::. 4. Like any other tool, the science you derive from Gnuastro's tools highly depend on these lower level dependencies, so generally it is much better to have a close connection with them. By reading their manuals, installing them and staying up to date with changes/bugs in them, your scientific results and understanding (of what is going on, and thus how you interpret your scientific results) will also correspondingly improve. Based on your package manager, you can use any of the following commands to install the mandatory and optional dependencies. If your package manager is not included in the list below, please send us the respective command, so we add it. For better archivability and compression ratios, Gnuastro's recommended tarball compression format is with the Lzip (http://lzip.nongnu.org/lzip.html) program, see *note Release tarball::. Therefore, the package manager commands below also contain Lzip. ‘apt-get’ (Debian-based OSs: Debian, Ubuntu, Linux Mint, etc.) Debian (https://en.wikipedia.org/wiki/Debian) is one of the oldest GNU/Linux distributions(1). It thus has a very extended user community and a robust internal structure and standards. All of it is free software and based on the work of volunteers around the world. Many distributions are thus derived from it, for example, Ubuntu and Linux Mint. This arguably makes Debian-based OSs the largest, and most used, class of GNU/Linux distributions. All of them use Debian's Advanced Packaging Tool (APT, for example, ‘apt-get’) for managing packages. Development features (Ubuntu or derivatives) By default, a newly installed Ubuntu does not contain the low-level tools that are necessary for building a software from source. Therefore, if you are using Ubuntu, please run the following command. $ sudo apt-get install gcc make zlib1g-dev lzip Mandatory dependencies Without these, Gnuastro cannot be built, they are necessary for input/output and low-level mathematics (see *note Mandatory dependencies::)! $ sudo apt-get install libgsl-dev libcfitsio-dev \ wcslib-dev Optional dependencies If present, these libraries can be used in Gnuastro's build for extra features, see *note Optional dependencies::. $ sudo apt-get install ghostscript libtool-bin \ libjpeg-dev libtiff-dev \ libgit2-dev curl Programs to view FITS images or tables These are not used in Gnuastro's build. They can just help in viewing the inputs/outputs independent of Gnuastro! $ sudo apt-get install saods9 topcat Gnuastro is packaged (https://tracker.debian.org/pkg/gnuastro) in Debian (and thus some of its derivate operating systems). Just make sure it is the most recent version. ‘dnf’ ‘yum’ (Red Hat-based OSs: Red Hat, Fedora, CentOS, Scientific Linux, etc.) Red Hat Enterprise Linux (https://en.wikipedia.org/wiki/Red_Hat) (RHEL) is released by Red Hat Inc. RHEL requires paid subscriptions for use of its binaries and support. But since it is free software, many other teams use its code to spin-off their own distributions based on RHEL. Red Hat-based GNU/Linux distributions initially used the "Yellowdog Updated, Modifier" (YUM) package manager, which has been replaced by "Dandified yum" (DNF). If the latter is not available on your system, you can use ‘yum’ instead of ‘dnf’ in the command below. Mandatory dependencies Without these, Gnuastro cannot be built, they are necessary for input/output and low-level mathematics (see *note Mandatory dependencies::)! $ sudo dnf install gsl-devel cfitsio-devel \ wcslib-devel Optional dependencies If present, these libraries can be used in Gnuastro's build for extra features, see *note Optional dependencies::. $ sudo dnf install ghostscript libtool \ libjpeg-devel libtiff-devel \ libgit2-devel lzip curl Programs to view FITS images or tables These are not used in Gnuastro's build. They can just help in viewing the inputs/outputs independent of Gnuastro! $ sudo dnf install saods9 topcat ‘brew’ (macOS) macOS (https://en.wikipedia.org/wiki/MacOS) is the operating system used on Apple devices. macOS does not come with a package manager pre-installed, but several widely used, third-party package managers exist, such as Homebrew or MacPorts. Both are free software. Currently we have only tested Gnuastro's installation with Homebrew as described below. If not already installed, first obtain Homebrew by following the instructions at <https://brew.sh>. Mandatory dependencies Without these, Gnuastro cannot be built, they are necessary for input/output and low-level mathematics (see *note Mandatory dependencies::)! Homebrew manages packages in different 'taps'. To install WCSLIB via Homebrew you will need to ‘tap’ into ‘brewsci/science’ first (the tap may change in the future, but can be found by calling ‘brew search wcslib’). $ brew tap brewsci/science $ brew install wcslib gsl cfitsio Optional dependencies If present, these libraries can be used in Gnuastro's build for extra features, see *note Optional dependencies::. $ brew install ghostscript libtool libjpeg \ libtiff libgit2 curl lzip Programs to view FITS images or tables These are not used in Gnuastro's build. They can just help in viewing the inputs/outputs independent of Gnuastro! $ brew install saoimageds9 topcat ‘pacman’ (Arch Linux) Arch Linux (https://en.wikipedia.org/wiki/Arch_Linux) is a smaller GNU/Linux distribution, which follows the KISS principle ("keep it simple, stupid") as a general guideline. It "focuses on elegance, code correctness, minimalism and simplicity, and expects the user to be willing to make some effort to understand the system's operation". Arch GNU/Linux uses "Package manager" (Pacman) to manage its packages/components. Mandatory dependencies Without these, Gnuastro cannot be built, they are necessary for input/output and low-level mathematics (see *note Mandatory dependencies::)! $ sudo pacman -S gsl cfitsio wcslib Optional dependencies If present, these libraries can be used in Gnuastro's build for extra features, see *note Optional dependencies::. $ sudo pacman -S ghostscript libtool libjpeg \ libtiff libgit2 curl lzip Programs to view FITS images or tables These are not used in Gnuastro's build. They can just help in viewing the inputs/outputs independent of Gnuastro! SAO DS9 and TOPCAT are not available in the standard Arch GNU/Linux repositories. However, installing and using both is very easy from their own web pages, as described in *note SAO DS9:: and *note TOPCAT::. ‘zypper’ (openSUSE and SUSE Linux Enterprise Server) SUSE Linux Enterprise Server(2) (SLES) is the commercial offering which shares code and tools. Many additional packages are offered in the Build Service(3). openSUSE and SLES use ‘zypper’ (cli) and YaST (GUI) for managing repositories and packages. Configuration When building Gnuastro, run the configure script with the following ‘CPPFLAGS’ environment variable: $ ./configure CPPFLAGS="-I/usr/include/cfitsio" Mandatory dependencies Without these, Gnuastro cannot be built, they are necessary for input/output and low-level mathematics (see *note Mandatory dependencies::)! $ sudo zypper install gsl-devel cfitsio-devel \ wcslib-devel Optional dependencies If present, these libraries can be used in Gnuastro's build for extra features, see *note Optional dependencies::. $ sudo zypper install ghostscript_any libtool \ pkgconfig libcurl-devel \ libgit2-devel \ libjpeg62-devel \ libtiff-devel curl Programs to view FITS images or tables These are not used in Gnuastro's build. They can just help in viewing the inputs/outputs independent of Gnuastro! $ sudo zypper install ds9 topcat Usually, when libraries are installed by operating system package managers, there should be no problems when configuring and building other programs from source (that depend on the libraries: Gnuastro in this case). However, in some special conditions, problems may pop-up during the configuration, building, or checking/running any of Gnuastro's programs. The most common of such problems and their solution are discussed below. *Not finding library during configuration:* If a library is installed, but during Gnuastro's ‘configure’ step the library is not found, then configure Gnuastro like the command below (correcting ‘/path/to/lib’). For more, see *note Known issues:: and *note Installation directory::. $ ./configure LDFLAGS="-L/path/to/lib" *Not finding header (.h) files while building:* If a library is installed, but during Gnuastro's ‘make’ step, the library's header (file with a ‘.h’ suffix) is not found, then configure Gnuastro like the command below (correcting ‘/path/to/include’). For more, see *note Known issues:: and *note Installation directory::. $ ./configure CPPFLAGS="-I/path/to/include" *Gnuastro's programs do not run during check or after install:* If a library is installed, but the programs do not run due to linking problems, set the ‘LD_LIBRARY_PATH’ variable like below (assuming Gnuastro is installed in ‘/path/to/installed’). For more, see *note Known issues:: and *note Installation directory::. $ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/to/installed/lib" ---------- Footnotes ---------- (1) <https://en.wikipedia.org/wiki/List_of_Linux_distributions#Debian-based> (2) <https://www.suse.com/products/server> (3) <https://build.opensuse.org>  File: gnuastro.info, Node: Downloading the source, Next: Build and install, Prev: Dependencies, Up: Installation 3.2 Downloading the source ========================== Gnuastro's source code can be downloaded in two ways. As a tarball, ready to be configured and installed on your system (as described in *note Quick start::), see *note Release tarball::. If you want official releases of stable versions this is the best, easiest and most common option. Alternatively, you can clone the version controlled history of Gnuastro, run one extra bootstrapping step and then follow the same steps as the tarball. This will give you access to all the most recent work that will be included in the next release along with the full project history. The process is thoroughly introduced in *note Version controlled source::. * Menu: * Release tarball:: Download a stable official release. * Version controlled source:: Get and use the version controlled source.  File: gnuastro.info, Node: Release tarball, Next: Version controlled source, Prev: Downloading the source, Up: Downloading the source 3.2.1 Release tarball --------------------- A release tarball (commonly compressed) is the most common way of obtaining free and open source software. A tarball is a snapshot of one particular moment in the Gnuastro development history along with all the necessary files to configure, build, and install Gnuastro easily (see *note Quick start::). It is very straightforward and needs the least set of dependencies (see *note Mandatory dependencies::). Gnuastro has tarballs for official stable releases and pre-releases for testing. See *note Version numbering:: for more on the two types of releases and the formats of the version numbers. The URLs for each type of release are given below. Official stable releases (<http://ftp.gnu.org/gnu/gnuastro>): This URL hosts the official stable releases of Gnuastro. Always use the most recent version (see *note Version numbering::). By clicking on the "Last modified" title of the second column, the files will be sorted by their date which you can also use to find the latest version. It is recommended to use a mirror to download these tarballs, please visit <http://ftpmirror.gnu.org/gnuastro/> and see below. Pre-release tarballs (<http://alpha.gnu.org/gnu/gnuastro>): This URL contains unofficial pre-release versions of Gnuastro. The pre-release versions of Gnuastro here are for enthusiasts to try out before an official release. If there are problems, or bugs then the testers will inform the developers to fix before the next official release. See *note Version numbering:: to understand how the version numbers here are formatted. If you want to remain even more up-to-date with the developing activities, please clone the version controlled source as described in *note Version controlled source::. Gnuastro's official/stable tarball is released with two formats: Gzip (with suffix ‘.tar.gz’) and Lzip (with suffix ‘.tar.lz’). The pre-release tarballs (after version 0.3) are released only as an Lzip tarball. Gzip is a very well-known and widely used compression program created by GNU and available in most systems. However, Lzip provides a better compression ratio and more robust archival capacity. For example, Gnuastro 0.3's tarball was 2.9MB and 4.3MB with Lzip and Gzip respectively, see the Lzip web page (http://www.nongnu.org/lzip/lzip.html) for more. Lzip might not be pre-installed in your operating system, if so, installing it from your operating system's package manager or from source is very easy and fast (it is a very small program). The GNU FTP server is mirrored (has backups) in various locations on the globe (<http://www.gnu.org/order/ftp.html>). You can use the closest mirror to your location for a more faster download. Note that only some mirrors keep track of the pre-release (alpha) tarballs. Also note that if you want to download immediately after and announcement (see *note Announcements::), the mirrors might need some time to synchronize with the main GNU FTP server.  File: gnuastro.info, Node: Version controlled source, Prev: Release tarball, Up: Downloading the source 3.2.2 Version controlled source ------------------------------- The publicly distributed Gnuastro tarball (for example, ‘gnuastro-X.X.tar.gz’) does not contain the revision history, it is only a snapshot of the source code at one significant instant of Gnuastro's history (specified by the version number, see *note Version numbering::), ready to be configured and built. To be able to develop successfully, the revision history of the code can be very useful to track when something was added or changed, also some updates that are not yet officially released might be in it. We use Git for the version control of Gnuastro. For those who are not familiar with it, we recommend the ProGit book (https://git-scm.com/book/en). The whole book is publicly available for online reading and downloading and does a wonderful job at explaining the concepts and best practices. Let's assume you want to keep Gnuastro in the ‘TOPGNUASTRO’ directory (can be any directory, change the value below). The full version controlled history of Gnuastro can be cloned in ‘TOPGNUASTRO/gnuastro’ by running the following commands(1): $ TOPGNUASTRO=/home/yourname/Research/projects/ $ cd $TOPGNUASTRO $ git clone git://git.sv.gnu.org/gnuastro.git The ‘$TOPGNUASTRO/gnuastro’ directory will contain hand-written (version controlled) source code for Gnuastro's programs, libraries, this book and the tests. All are divided into sub-directories with standard and very descriptive names. The version controlled files in the top cloned directory are either mainly in capital letters (for example, ‘THANKS’ and ‘README’) or mainly written in small-caps (for example, ‘configure.ac’ and ‘Makefile.am’). The former are non-programming, standard writing for human readers containing high-level information about the whole package. The latter are instructions to customize the GNU build system for Gnuastro. For more on Gnuastro's source code structure, please see *note Developing::. We will not go any deeper here. The cloned Gnuastro source cannot immediately be configured, compiled, or installed since it only contains hand-written files, not automatically generated or imported files which do all the hard work of the build process. See *note Bootstrapping:: for the process of generating and importing those files (it is not too hard!). Once you have bootstrapped Gnuastro, you can run the standard procedures (in *note Quick start::). Very soon after you have cloned it, Gnuastro's main ‘master’ branch will be updated on the main repository (since the developers are actively working on Gnuastro), for the best practices in keeping your local history in sync with the main repository see *note Synchronizing::. * Menu: * Bootstrapping:: Adding all the automatically generated files. * Synchronizing:: Keep your local clone up to date. ---------- Footnotes ---------- (1) If your internet connection is active, but Git complains about the network, it might be due to your network setup not recognizing the Git protocol. In that case use the following URL which uses the HTTP protocol instead: ‘http://git.sv.gnu.org/r/gnuastro.git’  File: gnuastro.info, Node: Bootstrapping, Next: Synchronizing, Prev: Version controlled source, Up: Version controlled source 3.2.2.1 Bootstrapping ..................... The version controlled source code lacks the source files that we have not written or are automatically built. These automatically generated files are included in the distributed tarball for each distribution (for example, ‘gnuastro-X.X.tar.gz’, see *note Version numbering::) and make it easy to immediately configure, build, and install Gnuastro. However from the perspective of version control, they are just bloatware and sources of confusion (since they are not changed by Gnuastro developers). The process of automatically building and importing necessary files into the cloned directory is known as _bootstrapping_. After bootstrapping is done you are ready to follow the default GNU build steps that you normally run on the tarball (‘./configure && make’ for example, described more in *note Quick start::). Some known issues with bootstrapping may occur during the process, to see how to fix them, please see *note Known issues::. All the instructions for an automatic bootstrapping are available in ‘bootstrap’ and configured using ‘bootstrap.conf’. ‘bootstrap’ and ‘COPYING’ (which contains the software copyright notice) are the only files not written by Gnuastro developers but under version control to enable simple bootstrapping and legal information on usage immediately after cloning. ‘bootstrap.conf’ is maintained by the GNU Portability Library (Gnulib) and this file is an identical copy, so do not make any changes in this file since it will be replaced when Gnulib releases an update. Make all your changes in ‘bootstrap.conf’. The bootstrapping process has its own separate set of dependencies, the full list is given in *note Bootstrapping dependencies::. They are generally very low-level and used by a very large set of commonly used programs, so they are probably already installed on your system. The simplest way to bootstrap Gnuastro is to simply run the bootstrap script within your cloned Gnuastro directory as shown below. However, please read the next paragraph before doing so (see *note Version controlled source:: for ‘TOPGNUASTRO’). $ cd TOPGNUASTRO/gnuastro $ ./bootstrap # Requires internet connection Without any options, ‘bootstrap’ will clone Gnulib within your cloned Gnuastro directory (‘TOPGNUASTRO/gnuastro/gnulib’) and download the necessary Autoconf archives macros. So if you run bootstrap like this, you will need an internet connection every time you decide to bootstrap. Also, Gnulib is a large package and cloning it can be slow. It will also keep the full Gnulib repository within your Gnuastro repository, so if another one of your projects also needs Gnulib, and you insist on running bootstrap like this, you will have two copies. In case you regularly backup your important files, Gnulib will also slow down the backup process. Therefore while the simple invocation above can be used with no problem, it is not recommended. To do better, see the next paragraph. The recommended way to get these two packages is thoroughly discussed in *note Bootstrapping dependencies:: (in short: clone them in the separate ‘DEVDIR/’ directory). The following commands will take you into the cloned Gnuastro directory and run the ‘bootstrap’ script, while telling it to copy some files (instead of making symbolic links, with the ‘--copy’ option, this is not mandatory(1)) and where to look for Gnulib (with the ‘--gnulib-srcdir’ option). Please note that the address given to ‘--gnulib-srcdir’ has to be an absolute address (so do not use ‘~’ or ‘../’ for example). $ cd $TOPGNUASTRO/gnuastro $ ./bootstrap --copy --gnulib-srcdir=$DEVDIR/gnulib Since Gnulib and Autoconf archives are now available in your local directories, you do not need an internet connection every time you decide to remove all un-tracked files and redo the bootstrap (see box below). You can also use the same command on any other project that uses Gnulib. All the necessary GNU C library functions, Autoconf macros and Automake inputs are now available along with the book figures. The standard GNU build system (*note Quick start::) will do the rest of the job. *Undoing the bootstrap:* During the development, it might happen that you want to remove all the automatically generated and imported files. In other words, you might want to reverse the bootstrap process. Fortunately Git has a good program for this job: ‘git clean’. Run the following command and every file that is not version controlled will be removed. git clean -fxd It is best to commit any recent change before running this command. You might have created new files since the last commit and if they have not been committed, they will all be gone forever (using ‘rm’). To get a list of the non-version controlled files instead of deleting them, add the ‘n’ option to ‘git clean’, so it becomes ‘-fxdn’. Besides the ‘bootstrap’ and ‘bootstrap.conf’, the ‘bootstrapped/’ directory and ‘README-hacking’ file are also related to the bootstrapping process. The former hosts all the imported (bootstrapped) directories. Thus, in the version controlled source, it only contains a ‘README’ file, but in the distributed tarball it also contains sub-directories filled with all bootstrapped files. ‘README-hacking’ contains a summary of the bootstrapping process discussed in this section. It is a necessary reference when you have not built this book yet. It is thus not distributed in the Gnuastro tarball. ---------- Footnotes ---------- (1) The ‘--copy’ option is recommended because some backup systems might do strange things with symbolic links.  File: gnuastro.info, Node: Synchronizing, Prev: Bootstrapping, Up: Version controlled source 3.2.2.2 Synchronizing ..................... The bootstrapping script (see *note Bootstrapping::) is not regularly needed: you mainly need it after you have cloned Gnuastro (once) and whenever you want to re-import the files from Gnulib, or Autoconf archives(1) (not too common). However, Gnuastro developers are constantly working on Gnuastro and are pushing their changes to the official repository. Therefore, your local Gnuastro clone will soon be out-dated. Gnuastro has two mailing lists dedicated to its developing activities (see *note Developing mailing lists::). Subscribing to them can help you decide when to synchronize with the official repository. To pull all the most recent work in Gnuastro, run the following command from the top Gnuastro directory. If you do not already have a built system, ignore ‘make distclean’. The separate steps are described in detail afterwards. $ make distclean && git pull && autoreconf -f You can also run the commands separately: $ make distclean $ git pull $ autoreconf -f If Gnuastro was already built in this directory, you do not want some outputs from the previous version being mixed with outputs from the newly pulled work. Therefore, the first step is to clean/delete all the built files with ‘make distclean’. Fortunately the GNU build system allows the separation of source and built files (in separate directories). This is a great feature to keep your source directory clean and you can use it to avoid the cleaning step. Gnuastro comes with a script with some useful options for this job. It is useful if you regularly pull recent changes, see *note Separate build and source directories::. After the pull, we must re-configure Gnuastro with ‘autoreconf -f’ (part of GNU Autoconf). It will update the ‘./configure’ script and all the ‘Makefile.in’(2) files based on the hand-written configurations (in ‘configure.ac’ and the ‘Makefile.am’ files). After running ‘autoreconf -f’, a warning about ‘TEXI2DVI’ might show up, you can ignore that. The most important reason for rebuilding Gnuastro's build system is to generate/update the version number for your updated Gnuastro snapshot. This generated version number will include the commit information (see *note Version numbering::). The version number is included in nearly all outputs of Gnuastro's programs, therefore it is vital for reproducing an old result. As a summary, be sure to run '‘autoreconf -f’' after every change in the Git history. This includes synchronization with the main server or even a commit you have made yourself. If you would like to see what has changed since you last synchronized your local clone, you can take the following steps instead of the simple command above (do not type anything after ‘#’): $ git checkout master # Confirm if you are on master. $ git fetch origin # Fetch all new commits from server. $ git log master..origin/master # See all the new commit messages. $ git merge origin/master # Update your master branch. $ autoreconf -f # Update the build system. By default ‘git log’ prints the most recent commit first, add the ‘--reverse’ option to see the changes chronologically. To see exactly what has been changed in the source code along with the commit message, add a ‘-p’ option to the ‘git log’. If you want to make changes in the code, have a look at *note Developing:: to get started easily. Be sure to commit your changes in a separate branch (keep your ‘master’ branch to follow the official repository) and re-run ‘autoreconf -f’ after the commit. If you intend to send your work to us, you can safely use your commit since it will be ultimately recorded in Gnuastro's official history. If not, please upload your separate branch to a public hosting service, for example, Codeberg (https://codeberg.org), and link to it in your report/paper. Alternatively, run ‘make distcheck’ and upload the output ‘gnuastro-X.X.X.XXXX.tar.gz’ to a publicly accessible web page so your results can be considered scientific (reproducible) later. ---------- Footnotes ---------- (1) <https://savannah.gnu.org/task/index.php?13993> is defined for you to check if significant (for Gnuastro) updates are made in these repositories, since the last time you pulled from them. (2) In the GNU build system, ‘./configure’ will use the ‘Makefile.in’ files to create the necessary ‘Makefile’ files that are later read by ‘make’ to build the package.  File: gnuastro.info, Node: Build and install, Prev: Downloading the source, Up: Installation 3.3 Build and install ===================== This section is basically a longer explanation to the sequence of commands given in *note Quick start::. If you did not have any problems during the *note Quick start:: steps, you want to have all the programs of Gnuastro installed in your system, you do not want to change the executable names during or after installation, you have root access to install the programs in the default system wide directory, the Letter paper size of the print book is fine for you or as a summary you do not feel like going into the details when everything is working, you can safely skip this section. If you have any of the above problems or you want to understand the details for a better control over your build and install, read along. The dependencies which you will need prior to configuring, building and installing Gnuastro are explained in *note Dependencies::. The first three steps in *note Quick start:: need no extra explanation, so we will skip them and start with an explanation of Gnuastro specific configuration options and a discussion on the installation directory in *note Configuring::, followed by some smaller subsections: *note Tests::, *note A4 print book::, and *note Known issues:: which explains the solutions to known problems you might encounter in the installation steps and ways you can solve them. * Menu: * Configuring:: Configure Gnuastro * Separate build and source directories:: Keeping derivate/build files separate. * Tests:: Run tests to see if it is working. * A4 print book:: Customize the print book. * Known issues:: Issues you might encounter.  File: gnuastro.info, Node: Configuring, Next: Separate build and source directories, Prev: Build and install, Up: Build and install 3.3.1 Configuring ----------------- The ‘$ ./configure’ step is the most important step in the build and install process. All the required packages, libraries, headers and environment variables are checked in this step. The behaviors of make and make install can also be set through command-line options to this command. The configure script accepts various arguments and options which enable the final user to highly customize whatever she is building. The options to configure are generally very similar to normal program options explained in *note Arguments and options::. Similar to all GNU programs, you can get a full list of the options along with a short explanation by running $ ./configure --help A complete explanation is also included in the ‘INSTALL’ file. Note that this file was written by the authors of GNU Autoconf (which builds the ‘configure’ script), therefore it is common for all programs which use the ‘$ ./configure’ script for building and installing, not just Gnuastro. Here we only discuss cases where you do not have superuser access to the system and if you want to change the executable names. But before that, a review of the options to configure that are particular to Gnuastro are discussed. * Menu: * Gnuastro configure options:: Configure options particular to Gnuastro. * Installation directory:: Specify the directory to install. * Executable names:: Changing executable names. * Configure and build in RAM:: For minimal use of HDD or SSD, and clean source.  File: gnuastro.info, Node: Gnuastro configure options, Next: Installation directory, Prev: Configuring, Up: Configuring 3.3.1.1 Gnuastro configure options .................................. Most of the options to configure (which are to do with building) are similar for every program which uses this script. Here the options that are particular to Gnuastro are discussed. The next topics explain the usage of other configure options which can be applied to any program using the GNU build system (through the configure script). ‘--enable-debug’ Compile/build Gnuastro with debugging information, no optimization and without shared libraries. In order to allow more efficient programs when using Gnuastro (after the installation), by default Gnuastro is built with a 3rd level (a very high level) optimization and no debugging information. By default, libraries are also built for static _and_ shared linking (see *note Linking::). However, when there are crashes or unexpected behavior, these three features can hinder the process of localizing the problem. This configuration option is identical to manually calling the configuration script with ‘CFLAGS="-g -O0" --disable-shared’. In the (rare) situations where you need to do your debugging on the shared libraries, do not use this option. Instead run the configure script by explicitly setting ‘CFLAGS’ like this: $ ./configure CFLAGS="-g -O0" ‘--enable-check-with-valgrind’ Do the ‘make check’ tests through Valgrind. Therefore, if any crashes or memory-related issues (segmentation faults in particular) occur in the tests, the output of Valgrind will also be put in the ‘tests/test-suite.log’ file without having to manually modify the check scripts. This option will also activate Gnuastro's debug mode (see the ‘--enable-debug’ configure-time option described above). Valgrind is free software. It is a program for easy checking of memory-related issues in programs. It runs a program within its own controlled environment and can thus identify the exact line-number in the program's source where a memory-related issue occurs. However, it can significantly slow-down the tests. So this option is only useful when a segmentation fault is found during ‘make check’. ‘--enable-progname’ Only build and install ‘progname’ along with any other program that is enabled in this fashion. ‘progname’ is the name of the executable without the ‘ast’, for example, ‘crop’ for Crop (with the executable name of ‘astcrop’). Note that by default all the programs will be installed. This option (and the ‘--disable-progname’ options) are only relevant when you do not want to install all the programs. Therefore, if this option is called for any of the programs in Gnuastro, any program which is not explicitly enabled will not be built or installed. ‘--disable-progname’ ‘--enable-progname=no’ Do not build or install the program named ‘progname’. This is very similar to the ‘--enable-progname’, but will build and install all the other programs except this one. *Note:* If some programs are enabled and some are disabled, it is equivalent to simply enabling those that were enabled. Listing the disabled programs is redundant. ‘--enable-gnulibcheck’ Enable checks on the GNU Portability Library (Gnulib). Gnulib is used by Gnuastro to enable users of non-GNU based operating systems (that do not use GNU C library or glibc) to compile and use the advanced features that this library provides. We make extensive use of such functions. If you give this option to ‘$ ./configure’, when you run ‘$ make check’, first the functions in Gnulib will be tested, then the Gnuastro executables. If your operating system does not support glibc or has an older version of it and you have problems in the build process (‘$ make’), you can give this flag to configure to see if the problem is caused by Gnulib not supporting your operating system or Gnuastro, see *note Known issues::. ‘--disable-guide-message’ ‘--enable-guide-message=no’ Do not print a guiding message during the GNU Build process of *note Quick start::. By default, after each step, a message is printed guiding the user what the next command should be. Therefore, after ‘./configure’, it will suggest running ‘make’. After ‘make’, it will suggest running ‘make check’ and so on. If Gnuastro is configured with this option, for example $ ./configure --disable-guide-message Then these messages will not be printed after any step (like most programs). For people who are not yet fully accustomed to this build system, these guidelines can be very useful and encouraging. However, if you find those messages annoying, use this option. ‘--without-libgit2’ Build Gnuastro without libgit2 (for including Git commit hashes in output files), see *note Optional dependencies::. libgit2 is an optional dependency, with this option, Gnuastro will ignore any possibly existing libgit2 that may already be on the system. ‘--without-libjpeg’ Build Gnuastro without libjpeg (for reading/writing to JPEG files), see *note Optional dependencies::. libjpeg is an optional dependency, with this option, Gnuastro will ignore any possibly existing libjpeg that may already be on the system. ‘--without-libtiff’ Build Gnuastro without libtiff (for reading/writing to TIFF files), see *note Optional dependencies::. libtiff is an optional dependency, with this option, Gnuastro will ignore any possibly existing libtiff that may already be on the system. ‘--with-python’ Build the Python interface within Gnuastro's dynamic library. This interface can be used for easy communication with Python wrappers (for example, the pyGnuastro package). When you install the pyGnuastro package from PyPI, the correct configuration of the Gnuastro Library is already packaged with it (with the Python interface) and that is independent of your Gnuastro installation. The Python interface is only necessary if you want to build pyGnuastro from source (which is only necessary for developers). Therefore it has to be explicitly activated at configure time with this option. For more on the interface functions, see *note Python interface::. The tests of some programs might depend on the outputs of the tests of other programs. For example, MakeProfiles is one the first programs to be tested when you run ‘$ make check’. MakeProfiles' test outputs (FITS images) are inputs to many other programs (which in turn provide inputs for other programs). Therefore, if you do not install MakeProfiles for example, the tests for many the other programs will be skipped. To avoid this, in one run, you can install all the programs and run the tests but not install. If everything is working correctly, you can run configure again with only the programs you want. However, do not run the tests and directly install after building.  File: gnuastro.info, Node: Installation directory, Next: Executable names, Prev: Gnuastro configure options, Up: Configuring 3.3.1.2 Installation directory .............................. One of the most commonly used options to ‘./configure’ is ‘--prefix’, it is used to define the directory that will host all the installed files (or the "prefix" in their final absolute file name). For example, when you are using a server and you do not have administrator or root access. In this example scenario, if you do not use the ‘--prefix’ option, you will not be able to install the built files and thus access them from anywhere without having to worry about where they are installed. However, once you prepare your startup file to look into the proper place (as discussed thoroughly below), you will be able to easily use this option and benefit from any software you want to install without having to ask the system administrators or install and use a different version of a software that is already installed on the server. The most basic way to run an executable is to explicitly write its full file name (including all the directory information) and run it. One example is running the configuration script with the ‘$ ./configure’ command (see *note Quick start::). By giving a specific directory (the current directory or ‘./’), we are explicitly telling the shell to look in the current directory for an executable file named '‘configure’'. Directly specifying the directory is thus useful for executables in the current (or nearby) directories. However, when the program (an executable file) is to be used a lot, specifying all those directories will become a significant burden. For example, the ‘ls’ executable lists the contents in a given directory and it is (usually) installed in the ‘/usr/bin/’ directory by the operating system maintainers. Therefore, if using the full address was the only way to access an executable, each time you wanted a listing of a directory, you would have to run the following command (which is very inconvenient, both in writing and in remembering the various directories). $ /usr/bin/ls To address this problem, we have the ‘PATH’ environment variable. To understand it better, we will start with a short introduction to the shell variables. Shell variable values are basically treated as strings of characters. For example, it does not matter if the value is a name (string of _alphabetic_ characters), or a number (string of _numeric_ characters), or both. You can define a variable and a value for it by running $ myvariable1=a_test_value $ myvariable2="a test value" As you see above, if the value contains white space characters, you have to put the whole value (including white space characters) in double quotes (<">). You can see the value it represents by running $ echo $myvariable1 $ echo $myvariable2 If a variable has no value or it was not defined, the last command will only print an empty line. A variable defined like this will be known as long as this shell or terminal is running. Other terminals will have no idea it existed. The main advantage of shell variables is that if they are exported(1), subsequent programs that are run within that shell can access their value. So by changing their value, you can change the "environment" of a program which uses them. The shell variables which are accessed by programs are therefore known as "environment variables"(2). You can see the full list of exported variables that your shell recognizes by running: $ printenv ‘HOME’ is one commonly used environment variable, it is any user's (the one that is logged in) top directory. Try finding it in the command above. It is used so often that the shell has a special expansion (alternative) for it: '‘~’'. Whenever you see file names starting with the tilde sign, it actually represents the value to the ‘HOME’ environment variable, so ‘~/doc’ is the same as ‘$HOME/doc’. Another one of the most commonly used environment variables is ‘PATH’, it is a list of directories to search for executable names. Its value is a list of directories (separated by a colon, or '<:>'). When the address of the executable is not explicitly given (like ‘./configure’ above), the system will look for the executable in the directories specified by ‘PATH’. If you have a computer nearby, try running the following command to see which directories your system will look into when it is searching for executable (binary) files, one example is printed here (notice how ‘/usr/bin’, in the ‘ls’ example above, is one of the directories in ‘PATH’): $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/bin By default ‘PATH’ usually contains system-wide directories, which are readable (but not writable) by all users, like the above example. Therefore if you do not have root (or administrator) access, you need to add another directory to ‘PATH’ which you actually have write access to. The standard directory where you can keep installed files (not just executables) for your own user is the ‘~/.local/’ directory. The names of hidden files start with a '<.>' (dot), so it will not show up in your common command-line listings, or on the graphical user interface. You can use any other directory, but this is the most recognized. The top installation directory will be used to keep all the package's components: programs (executables), libraries, include (header) files, shared data (like manuals), or configuration files (see *note Review of library fundamentals:: for a thorough introduction to headers and linking). So it commonly has some of the following sub-directories for each class of installed components respectively: ‘bin/’, ‘lib/’, ‘include/’ ‘man/’, ‘share/’, ‘etc/’. Since the ‘PATH’ variable is only used for executables, you can add the ‘~/.local/bin’ directory (which keeps the executables/programs or more generally, "binary" files) to ‘PATH’ with the following command. As defined below, first the existing value of ‘PATH’ is used, then your given directory is added to its end and the combined value is put back in ‘PATH’ (run '‘$ echo $PATH’' afterwards to check if it was added). $ PATH=$PATH:~/.local/bin Any executable that you installed in ‘~/.local/bin’ will now be usable without having to remember and write its full address. However, as soon as you leave/close your current terminal session, this modified ‘PATH’ variable will be forgotten. Adding the directories which contain executables to the ‘PATH’ environment variable each time you start a terminal is also very inconvenient and prone to errors. Fortunately, there are standard 'startup files' defined by your shell precisely for this (and other) purposes. There is a special startup file for every significant starting step: ‘/etc/profile’ and everything in ‘/etc/profile.d/’ These startup scripts are called when your whole system starts (for example, after you turn on your computer). Therefore you need administrator or root privileges to access or modify them. ‘~/.bash_profile’ If you are using (GNU) Bash as your shell, the commands in this file are run, when you log in to your account _through Bash_. Most commonly when you login through the virtual console (where there is no graphic user interface). ‘~/.bashrc’ If you are using (GNU) Bash as your shell, the commands here will be run each time you start a terminal and are already logged in. For example, when you open your terminal emulator in the graphic user interface. For security reasons, it is highly recommended to directly type in your ‘HOME’ directory value by hand in startup files instead of using variables. So in the following, let's assume your user name is '‘name’' (so ‘~’ may be replaced with ‘/home/name’). To add ‘~/.local/bin’ to your ‘PATH’ automatically on any startup file, you have to "export" the new value of ‘PATH’ in the startup file that is most relevant to you by adding this line: export PATH=$PATH:/home/name/.local/bin Now that you know your system will look into ‘~/.local/bin’ for executables, you can tell Gnuastro's configure script to install everything in the top ‘~/.local’ directory using the ‘--prefix’ option. When you subsequently run ‘$ make install’, all the install-able files will be put in their respective directory under ‘~/.local/’ (the executables in ‘~/.local/bin’, the compiled library files in ‘~/.local/lib’, the library header files in ‘~/.local/include’ and so on, to learn more about these different files, please see *note Review of library fundamentals::). Note that tilde ('<~>') expansion will not happen if you put a '<=>' between ‘--prefix’ and ‘~/.local’(3), so we have avoided the <=> character here which is optional in GNU-style options, see *note Options::. $ ./configure --prefix ~/.local You can install everything (including libraries like GSL, CFITSIO, or WCSLIB which are Gnuastro's mandatory dependencies, see *note Mandatory dependencies::) locally by configuring them as above. However, recall that ‘PATH’ is only for executable files, not libraries and that libraries can also depend on other libraries. For example, WCSLIB depends on CFITSIO and Gnuastro needs both. Therefore, when you installed a library in a non-recognized directory, you have to guide the program that depends on them to look into the necessary library and header file directories. To do that, you have to define the ‘LDFLAGS’ and ‘CPPFLAGS’ environment variables respectively. This can be done while calling ‘./configure’ as shown below: $ ./configure LDFLAGS=-L/home/name/.local/lib \ CPPFLAGS=-I/home/name/.local/include \ --prefix ~/.local It can be annoying/buggy to do this when configuring every software that depends on such libraries. Hence, you can define these two variables in the most relevant startup file (discussed above). The convention on using these variables does not include a colon to separate values (as ‘PATH’-like variables do). They use white space characters and each value is prefixed with a compiler option(4). Note the ‘-L’ and ‘-I’ above (see *note Options::), for ‘-I’ see *note Headers::, and for ‘-L’, see *note Linking::. Therefore we have to keep the value in double quotation signs to keep the white space characters and adding the following two lines to the startup file of choice: export LDFLAGS="$LDFLAGS -L/home/name/.local/lib" export CPPFLAGS="$CPPFLAGS -I/home/name/.local/include" Dynamic libraries are linked to the executable every time you run a program that depends on them (see *note Linking:: to fully understand this important concept). Hence dynamic libraries also require a special path variable called ‘LD_LIBRARY_PATH’ (same formatting as ‘PATH’). To use programs that depend on these libraries, you need to add ‘~/.local/lib’ to your ‘LD_LIBRARY_PATH’ environment variable by adding the following line to the relevant start-up file: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/name/.local/lib If you also want to access the Info (see *note Info::) and man pages (see *note Man pages::) documentations add ‘~/.local/share/info’ and ‘~/.local/share/man’ to your ‘INFOPATH’(5) and ‘MANPATH’ environment variables respectively. A final note is that order matters in the directories that are searched for all the variables discussed above. In the examples above, the new directory was added after the system specified directories. So if the program, library or manuals are found in the system wide directories, the user directory is no longer searched. If you want to search your local installation first, put the new directory before the already existing list, like the example below. export LD_LIBRARY_PATH=/home/name/.local/lib:$LD_LIBRARY_PATH This is good when a library, for example, CFITSIO, is already present on the system, but the system-wide install was not configured with the correct configuration flags (see *note CFITSIO::), or you want to use a newer version and you do not have administrator or root access to update it on the whole system/server. If you update ‘LD_LIBRARY_PATH’ by placing ‘~/.local/lib’ first (like above), the linker will first find the CFITSIO you installed for yourself and link with it. It thus will never reach the system-wide installation. There are important security problems with using local installations first: all important system-wide executables and libraries (important executables like ‘ls’ and ‘cp’, or libraries like the C library) can be replaced by non-secure versions with the same file names and put in the customized directory (‘~/.local’ in this example). So if you choose to search in your customized directory first, please _be sure_ to keep it clean from executables or libraries with the same names as important system programs or libraries. *Summary:* When you are using a server which does not give you administrator/root access AND you would like to give priority to your own built programs and libraries, not the version that is (possibly already) present on the server, add these lines to your startup file. See above for which startup file is best for your case and for a detailed explanation on each. Do not forget to replace '‘/YOUR-HOME-DIR’' with your home directory (for example, '‘/home/your-id’'): export PATH="/YOUR-HOME-DIR/.local/bin:$PATH" export LDFLAGS="-L/YOUR-HOME-DIR/.local/lib $LDFLAGS" export MANPATH="/YOUR-HOME-DIR/.local/share/man/:$MANPATH" export CPPFLAGS="-I/YOUR-HOME-DIR/.local/include $CPPFLAGS" export INFOPATH="/YOUR-HOME-DIR/.local/share/info/:$INFOPATH" export LD_LIBRARY_PATH="/YOUR-HOME-DIR/.local/lib:$LD_LIBRARY_PATH" Afterwards, you just need to add an extra ‘--prefix=/YOUR-HOME-DIR/.local’ to the ‘./configure’ command of the software that you intend to install. Everything else will be the same as a standard build and install, see *note Quick start::. ---------- Footnotes ---------- (1) By running ‘$ export myvariable=a_test_value’ instead of the simpler case in the text (2) You can use shell variables for other actions too, for example, to temporarily keep some names or run loops on some files. (3) If you insist on using '<=>', you can use ‘--prefix=$HOME/.local’. (4) These variables are ultimately used as options while building the programs. Therefore every value has be an option name followed be a value as discussed in *note Options::. (5) Info has the following convention: "If the value of ‘INFOPATH’ ends with a colon [or it is not defined] ..., the initial list of directories is constructed by appending the build-time default to the value of ‘INFOPATH’." So when installing in a non-standard directory and if ‘INFOPATH’ was not initially defined, add a colon to the end of ‘INFOPATH’ as shown below. Otherwise Info will not be able to find system-wide installed documentation: ‘echo 'export INFOPATH=$INFOPATH:/home/name/.local/share/info:' >> ~/.bashrc’ Note that this is only an internal convention of Info: do not use it for other ‘*PATH’ variables.  File: gnuastro.info, Node: Executable names, Next: Configure and build in RAM, Prev: Installation directory, Up: Configuring 3.3.1.3 Executable names ........................ At first sight, the names of the executables for each program might seem to be uncommonly long, for example, ‘astnoisechisel’ or ‘astcrop’. We could have chosen terse (and cryptic) names like most programs do. We chose this complete naming convention (something like the commands in TeX) so you do not have to spend too much time remembering what the name of a specific program was. Such complete names also enable you to easily search for the programs. To facilitate typing the names in, we suggest using the shell auto-complete. With this facility you can find the executable you want very easily. It is very similar to file name completion in the shell. For example, simply by typing the letters below (where <[TAB]> stands for the Tab key on your keyboard) $ ast[TAB][TAB] you will get the list of all the available executables that start with ‘ast’ in your ‘PATH’ environment variable directories. So, all the Gnuastro executables installed on your system will be listed. Typing the next letter for the specific program you want along with a Tab, will limit this list until you get to your desired program. In case all of this does not convince you and you still want to type short names, some suggestions are given below. You should have in mind though, that if you are writing a shell script that you might want to pass on to others, it is best to use the standard name because other users might not have adopted the same customization. The long names also serve as a form of documentation in such scripts. A similar reasoning can be given for option names in scripts: it is good practice to always use the long formats of the options in shell scripts, see *note Options::. The simplest solution is making a symbolic link to the actual executable. For example, let's assume you want to type ‘ic’ to run Crop instead of ‘astcrop’. Assuming you installed Gnuastro executables in ‘/usr/local/bin’ (default) you can do this simply by running the following command as root: # ln -s /usr/local/bin/astcrop /usr/local/bin/ic In case you update Gnuastro and a new version of Crop is installed, the default executable name is the same, so your custom symbolic link still works. The installed executable names can also be set using options to ‘$ ./configure’, see *note Configuring::. GNU Autoconf (which configures Gnuastro for your particular system), allows the builder to change the name of programs with the three options ‘--program-prefix’, ‘--program-suffix’ and ‘--program-transform-name’. The first two are for adding a fixed prefix or suffix to all the programs that will be installed. This will actually make all the names longer! You can use it to add versions of program names to the programs in order to simultaneously have two executable versions of a program. The third configure option allows you to set the executable name at install time using the SED program. SED is a very useful 'stream editor'. There are various resources on the internet to use it effectively. However, we should caution that using configure options will change the actual executable name of the installed program and on every re-install (an update for example), you have to also add this option to keep the old executable name updated. Also note that the documentation or configuration files do not change from their standard names either. For example, let's assume that typing ‘ast’ on every invocation of every program is really annoying you! You can remove this prefix from all the executables at configure time by adding this option: $ ./configure --program-transform-name='s/ast/ /'  File: gnuastro.info, Node: Configure and build in RAM, Prev: Executable names, Up: Configuring 3.3.1.4 Configure and build in RAM .................................. Gnuastro's configure and build process (the GNU build system) involves the creation, reading, and modification of a large number of files (input/output, or I/O). Therefore file I/O issues can directly affect the work of developers who need to configure and build Gnuastro numerous times. Some of these issues are listed below: • I/O will cause wear and tear on both the HDDs (mechanical failures) and SSDs (decreasing the lifetime). • Having the built files mixed with the source files can greatly affect backing up (synchronization) of source files (since it involves the management of a large number of small files that are regularly changed. Backup software can of course be configured to ignore the built files and directories. However, since the built files are mixed with the source files and can have a large variety, this will require a high level of customization. One solution to address both these problems is to use the tmpfs file system (https://en.wikipedia.org/wiki/Tmpfs). Any file in tmpfs is actually stored in the RAM (and possibly SWAP), not on HDDs or SSDs. The RAM is built for extensive and fast I/O. Therefore the large number of file I/Os associated with configuring and building will not harm the HDDs or SSDs. Due to the volatile nature of RAM, files in the tmpfs file-system will be permanently lost after a power-off. Since all configured and built files are derivative files (not files that have been directly written by hand) there is no problem in this and this feature can be considered as an automatic cleanup. The modern GNU C library (and thus the Linux kernel) defines the ‘/dev/shm’ directory for this purpose in the RAM (POSIX shared memory). To build in it, you can use the GNU build system's ability to build in a separate directory (not necessarily in the source directory) as shown below. Just set ‘SRCDIR’ as the address of Gnuastro's top source directory (for example, where there is the unpacked tarball). $ SRCDIR=/home/username/gnuastro $ mkdir /dev/shm/tmp-gnuastro-build $ cd /dev/shm/tmp-gnuastro-build $ $SRCDIR/configure --srcdir=$SRCDIR $ make Gnuastro comes with a script to simplify this process of configuring and building in a different directory (a "clean" build), for more see *note Separate build and source directories::.  File: gnuastro.info, Node: Separate build and source directories, Next: Tests, Prev: Configuring, Up: Build and install 3.3.2 Separate build and source directories ------------------------------------------- The simple steps of *note Quick start:: will mix the source and built files. This can cause inconvenience for developers or enthusiasts following the most recent work (see *note Version controlled source::). The current section is mainly focused on this later group of Gnuastro users. If you just install Gnuastro on major releases (following *note Announcements::), you can safely ignore this section. When it is necessary to keep the source (which is under version control), but not the derivative (built) files (after checking or installing), the best solution is to keep the source and the built files in separate directories. One application of this is already discussed in *note Configure and build in RAM::. To facilitate this process of configuring and building in a separate directory, Gnuastro comes with the ‘developer-build’ script. It is available in the top source directory and is _not_ installed. It will make a directory under a given top-level directory (given to ‘--top-build-dir’) and build Gnuastro there. It thus keeps the source completely separated from the built files. For easy access to the built files, it also makes a symbolic link to the built directory in the top source files called ‘build’. When running the developer-build script without any options in the Gnuastro's top source directory, default values will be used for its configuration. As with Gnuastro's programs, you can inspect the default values with ‘-P’ (or ‘--printparams’, the output just looks a little different here). The default top-level build directory is ‘/dev/shm’: the shared memory directory in RAM on GNU/Linux systems as described in *note Configure and build in RAM::. Besides these, it also has some features to facilitate the job of developers or bleeding edge users like the ‘--debug’ option to do a fast build, with debug information, no optimization, and no shared libraries. Here is the full list of options you can feed to this script to configure its operations. *Not all Gnuastro's common program behavior usable here:* ‘developer-build’ is just a non-installed script with a very limited scope as described above. It thus does not have all the common option behaviors or configuration files for example. *White space between option and value:* ‘developer-build’ does not accept an <=> sign between the options and their values. It also needs at least one character between the option and its value. Therefore ‘-n 4’ or ‘--numthreads 4’ are acceptable, while ‘-n4’, ‘-n=4’, or ‘--numthreads=4’ are not. Finally multiple short option names cannot be merged: for example, you can say ‘-c -n 4’, but unlike Gnuastro's programs, ‘-cn4’ is not acceptable. *Reusable for other packages:* This script can be used in any software which is configured and built using the GNU Build System. Just copy it in the top source directory of that software and run it from there. *Example usage:* See *note Forking tutorial:: for an example usage of this script in some scenarios. ‘-b STR’ ‘--top-build-dir STR’ The top build directory to make a directory for the build. If this option is not called, the top build directory is ‘/dev/shm’ (only available in GNU/Linux operating systems, see *note Configure and build in RAM::). ‘-V’ ‘--version’ Print the version string of Gnuastro that will be used in the build. This string will be appended to the directory name containing the built files. ‘-a’ ‘--autoreconf’ Run ‘autoreconf -f’ before building the package. In Gnuastro, this is necessary when a new commit has been made to the project history. In Gnuastro's build system, the Git description will be used as the version, see *note Version numbering:: and *note Synchronizing::. ‘-c’ ‘--clean’ Delete the contents of the build directory (clean it) before starting the configuration and building of this run. This is useful when you have recently pulled changes from the main Git repository, or committed a change yourself and ran ‘autoreconf -f’, see *note Synchronizing::. After running GNU Autoconf, the version will be updated and you need to do a clean build. ‘-d’ ‘--debug’ Build with debugging flags (for example, to use in GNU Debugger, also known as GDB, or Valgrind), disable optimization and also the building of shared libraries. Similar to running the configure script of below $ ./configure --enable-debug Besides all the debugging advantages of building with this option, it will also be significantly speed up the build (at the cost of slower built programs). So when you are testing something small or working on the build system itself, it will be much faster to test your work with this option. ‘-v’ ‘--valgrind’ Build all ‘make check’ tests within Valgrind. For more, see the description of ‘--enable-check-with-valgrind’ in *note Gnuastro configure options::. ‘-j INT’ ‘--jobs INT’ The maximum number of threads/jobs for Make to build at any moment. As the name suggests (Make has an identical option), the number given to this option is directly passed on to any call of Make with its ‘-j’ option. ‘-C’ ‘--check’ After finishing the build, also run ‘make check’. By default, ‘make check’ is not run because the developer usually has their own checks to work on (for example, defined in ‘tests/during-dev.sh’). ‘-i’ ‘--install’ After finishing the build, also run ‘make install’. ‘-D’ ‘--dist’ Run ‘make dist-lzip pdf’ to build a distribution tarball (in ‘.tar.lz’ format) and a PDF manual. This can be useful for archiving, or sending to colleagues who do not use Git for an easy build and manual. ‘-u STR’ ‘--upload STR’ Activate the ‘--dist’ (‘-D’) option, then use secure copy (‘scp’, part of the SSH tools) to copy the tarball and PDF to the ‘src’ and ‘pdf’ sub-directories of the specified server and its directory (value to this option). For example, ‘--upload my-server:dir’, will copy the tarball in the ‘dir/src’, and the PDF manual in ‘dir/pdf’ of ‘my-server’ server. It will then make a symbolic link in the top server directory to the tarball that is called ‘gnuastro-latest.tar.lz’. ‘-p STR’ ‘--publish=STR’ Clean, bootstrap, build, check and upload the checked tarball and PDF of the book to the URL given as ‘STR’. This option is just a wrapper for ‘--autoreconf --clean --debug --check --upload STR’. ‘--debug’ is added because it will greatly speed up the build. ‘--debug’ will have no effect on the produced tarball (people who later download will be building with the default optimized, and non-debug mode). This option is good when you have made a commit and are ready to publish it on your server (if nothing crashes). Recall that if any of the previous steps fail the script aborts. ‘-I’ ‘--install-archive’ Short for ‘--autoreconf --clean --check --install --dist’. This is useful when you actually want to install the commit you just made (if the build and checks succeed). It will also produce a distribution tarball and PDF manual for easy access to the installed tarball on your system at a later time. Ideally, Gnuastro's Git version history makes it easy for a prepared system to revert back to a different point in history. But Gnuastro also needs to bootstrap files and also your collaborators might (usually do!) find it too much of a burden to do the bootstrapping themselves. So it is convenient to have a tarball and PDF manual of the version you have installed (and are using in your research) handily available. ‘-h’ ‘--help’ ‘-P’ ‘--printparams’ Print a description of this script along with all the options and their current values.  File: gnuastro.info, Node: Tests, Next: A4 print book, Prev: Separate build and source directories, Up: Build and install 3.3.3 Tests ----------- After successfully building (compiling) the programs with the ‘$ make’ command you can check the installation before installing. To run the tests, run $ make check For every program some tests are designed to check some possible operations. Running the command above will run those tests and give you a final report. If everything is OK and you have built all the programs, all the tests should pass. In case any of the tests fail, please have a look at *note Known issues:: and if that still does not fix your problem, look that the ‘./tests/test-suite.log’ file to see if the source of the error is something particular to your system or more general. If you feel it is general, please contact us because it might be a bug. Note that the tests of some programs depend on the outputs of other program's tests, so if you have not installed them they might be skipped or fail. Prior to releasing every distribution all these tests are checked. If you have a reasonably modern terminal, the outputs of the successful tests will be colored green and the failed ones will be colored red. These scripts can also act as a good set of examples for you to see how the programs are run. All the tests are in the ‘tests/’ directory. The tests for each program are shell scripts (ending with ‘.sh’) in a sub-directory of this directory with the same name as the program. See *note Test scripts:: for more detailed information about these scripts in case you want to inspect them.  File: gnuastro.info, Node: A4 print book, Next: Known issues, Prev: Tests, Up: Build and install 3.3.4 A4 print book ------------------- The default print version of this book is provided in the letter paper size. If you would like to have the print version of this book on paper and you are living in a country which uses A4, then you can rebuild the book. The great thing about the GNU build system is that the book source code which is in Texinfo is also distributed with the program source code, enabling you to do such customization (hacking). In order to change the paper size, you will need to have GNU Texinfo installed. Open ‘doc/gnuastro.texi’ with any text editor. This is the source file that created this book. In the first few lines you will see this line: @c@afourpaper In Texinfo, a line is commented with ‘@c’. Therefore, un-comment this line by deleting the first two characters such that it changes to: @afourpaper Save the file and close it. You can now run the following command $ make pdf and the new PDF book will be available in ‘SRCdir/doc/gnuastro.pdf’. By changing the ‘pdf’ in ‘$ make pdf’ to ‘ps’ or ‘dvi’ you can have the book in those formats. Note that you can do this for any book that is in Texinfo format, they might not have ‘@afourpaper’ line, so you can add it close to the top of the Texinfo source file.  File: gnuastro.info, Node: Known issues, Prev: A4 print book, Up: Build and install 3.3.5 Known issues ------------------ Depending on your operating system and the version of the compiler you are using, you might confront some known problems during the configuration (‘$ ./configure’), compilation (‘$ make’) and tests (‘$ make check’). Here, their solutions are discussed. • ‘$ ./configure’: _Configure complains about not finding a library even though you have installed it._ The possible solution is based on how you installed the package: • From your distribution's package manager. Most probably this is because your distribution has separated the header files of a library from the library parts. Please also install the 'development' packages for those libraries too. Just add a ‘-dev’ or ‘-devel’ to the end of the package name and re-run the package manager. This will not happen if you install the libraries from source. When installed from source, the headers are also installed. • From source. Then your linker is not looking where you installed the library. If you followed the instructions in this chapter, all the libraries will be installed in ‘/usr/local/lib’. So you have to tell your linker to look in this directory. To do so, configure Gnuastro like this: $ ./configure LDFLAGS="-L/usr/local/lib" If you want to use the libraries for your other programming projects, then export this environment variable in a start-up script similar to the case for ‘LD_LIBRARY_PATH’ explained below, also see *note Installation directory::. • ‘$ make’: _Complains about an unknown function on a non-GNU based operating system._ In this case, please run ‘$ ./configure’ with the ‘--enable-gnulibcheck’ option to see if the problem is from the GNU Portability Library (Gnulib) not supporting your system or if there is a problem in Gnuastro, see *note Gnuastro configure options::. If the problem is not in Gnulib and after all its tests you get the same complaint from ‘make’, then please contact us at ‘bug-gnuastro@gnu.org’. The cause is probably that a function that we have used is not supported by your operating system and we did not included it along with the source tarball. If the function is available in Gnulib, it can be fixed immediately. • ‘$ make’: _Cannot find the headers (.h files) of installed libraries._ Your C preprocessor (CPP) is not looking in the right place. To fix this, configure Gnuastro with an additional ‘CPPFLAGS’ like below (assuming the library is installed in ‘/usr/local/include’: $ ./configure CPPFLAGS="-I/usr/local/include" If you want to use the libraries for your other programming projects, then export this environment variable in a start-up script similar to the case for ‘LD_LIBRARY_PATH’ explained below, also see *note Installation directory::. • ‘$ make check’: _Only the first couple of tests pass, all the rest fail or get skipped._ It is highly likely that when searching for shared libraries, your system does not look into the ‘/usr/local/lib’ directory (or wherever you installed Gnuastro or its dependencies). To make sure it is added to the list of directories, add the following line to your ‘~/.bashrc’ file and restart your terminal. Do not forget to change ‘/usr/local/lib’ if the libraries are installed in other (non-standard) directories. export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" You can also add more directories by using a colon '‘:’' to separate them. See *note Installation directory:: and *note Linking:: to learn more on the ‘PATH’ variables and dynamic linking respectively. • ‘$ make check’: _The tests relying on external programs (for example, ‘fitstopdf.sh’ fail.)_ This is probably due to the fact that the version number of the external programs is too old for the tests we have preformed. Please update the program to a more recent version. For example, to create a PDF image, you will need GPL Ghostscript, but older versions do not work, we have successfully tested it on version 9.15. Older versions might cause a failure in the test result. • ‘$ make pdf’: _The PDF book cannot be made._ To make a PDF book, you need to have the GNU Texinfo program (like any program, the more recent the better). A working TeX program is also necessary, which you can get from Tex Live(1). • After ‘make check’: do not copy the programs' executables to another (for example, the installation) directory manually (using ‘cp’, or ‘mv’ for example). In the default configuration(2), the program binaries need to link with Gnuastro's shared library which is also built and installed with the programs. Therefore, to run successfully before and after installation, linking modifications need to be made by GNU Libtool at installation time. ‘make install’ does this internally, but a simple copy might give linking errors when you run it. If you need to copy the executables, you can do so after installation. • ‘$ make’ (when bootstrapping): After you have bootstrapped Gnuastro from the version-controlled source, you may confront the following (or a similar) error when converting images (for more on bootstrapping, see *note Bootstrapping::): convert: attempt to perform an operation not allowed by the security policy `gs' error/delegate.c/ExternalDelegateCommand/378. This error is a known issue(3) with ‘ImageMagick’ security policies in some operating systems. In short, ‘imagemagick’ uses Ghostscript for PDF, EPS, PS and XPS parsing. However, because some security vulnerabilities have been found in Ghostscript(4), by default, ImageMagick may be compiled without Ghostscript library. In such cases, if allowed, ImageMagick will fall back to the external ‘gs’ command instead of the library. But this may be disabled with the following (or a similar) lines in ‘/etc/ImageMagick-7/policy.xml’ (anything related to PDF, PS, or Ghostscript). <policy domain="delegate" rights="none" pattern="gs" /> <policy domain="module" rights="none" pattern="{PS,PDF,XPS}" /> To fix this problem, simply comment such lines (by placing a ‘<!--’ before each statement/line and ‘-->’ at the end of that statement/line). If your problem was not listed above, please file a bug report (*note Report a bug::). ---------- Footnotes ---------- (1) <https://www.tug.org/texlive/> (2) If you configure Gnuastro with the ‘--disable-shared’ option, then the libraries will be statically linked to the programs and this problem will not exist, see *note Linking::. (3) <https://wiki.archlinux.org/title/ImageMagick> (4) <https://security.archlinux.org/package/ghostscript>  File: gnuastro.info, Node: Common program behavior, Next: Data containers, Prev: Installation, Up: Top 4 Common program behavior ************************* All the programs in Gnuastro share a set of common behavior mainly to do with user interaction to facilitate their usage and development. This includes how to feed input datasets into the programs, how to configure them, specifying the outputs, numerical data types, treating columns of information in tables, etc. This chapter is devoted to describing this common behavior in all programs. Because the behaviors discussed here are common to several programs, they are not repeated in each program's description. In *note Command-line::, a very general description of running the programs on the command-line is discussed, like difference between arguments and options, as well as options that are common/shared between all programs. None of Gnuastro's programs keep any internal configuration value (values for their different operational steps), they read their configuration primarily from the command-line, then from specific files in directory, user, or system-wide settings. Using these configuration files can greatly help reproducible and robust usage of Gnuastro, see *note Configuration files:: for more. It is not possible to always have the different options and configurations of each program on the top of your head. It is very natural to forget the options of a program, their current default values, or how it should be run and what it did. Gnuastro's programs have multiple ways to help you refresh your memory in multiple levels (just an option name, a short description, or fast access to the relevant section of the manual. See *note Getting help:: for more for more on benefiting from this very convenient feature. Many of the programs use the multi-threaded character of modern CPUs, in *note Multi-threaded operations:: we will discuss how you can configure this behavior, along with some tips on making best use of them. In *note Numeric data types::, we will review the various types to store numbers in your datasets: setting the proper type for the usage context(1) can greatly improve the file size and also speed of reading, writing or processing them. We will then look into the recognized table formats in *note Tables:: and how large datasets are broken into tiles, or mesh grid in *note Tessellation::. Finally, we will take a look at the behavior regarding output files: *note Automatic output:: describes how the programs set a default name for their output when you do not give one explicitly (using ‘--output’). When the output is a FITS file, all the programs also store some very useful information in the header that is discussed in *note Output FITS files::. * Menu: * Command-line:: How to use the command-line. * Configuration files:: Values for unspecified variables. * Getting help:: Getting more information on the go. * Multi-threaded operations:: How threads are managed in Gnuastro. * Numeric data types:: Different types and how to specify them. * Memory management:: How memory is allocated (in RAM or HDD/SSD). * Tables:: Recognized table formats. * Tessellation:: Tile the dataset into non-overlapping bins. * Automatic output:: About automatic output names. * Output FITS files:: Common properties when outputs are FITS. * Numeric locale:: Decimal point printed like 0.5 instead of 0,5. ---------- Footnotes ---------- (1) For example, if the values in your dataset can only be integers between 0 or 65000, store them in a unsigned 16-bit type, not 64-bit floating point type (which is the default in most systems). It takes four times less space and is much faster to process.  File: gnuastro.info, Node: Command-line, Next: Configuration files, Prev: Common program behavior, Up: Common program behavior 4.1 Command-line ================ Gnuastro's programs are customized through the standard Unix-like command-line environment and GNU style command-line options. Both are very common in many Unix-like operating system programs. In *note Arguments and options:: we will start with the difference between arguments and options and elaborate on the GNU style of options. Afterwards, in *note Common options::, we will go into the detailed list of all the options that are common to all the programs in Gnuastro. * Menu: * Arguments and options:: Different ways to specify inputs and configuration. * Common options:: Options that are shared between all programs. * Shell TAB completion:: Customized TAB completion in Gnuastro. * Standard input:: Using output of another program as input. * Shell tips:: Useful tips and tricks for program usage.  File: gnuastro.info, Node: Arguments and options, Next: Common options, Prev: Command-line, Up: Command-line 4.1.1 Arguments and options --------------------------- When you type a command on the command-line, it is passed onto the shell (a generic name for the program that manages the command-line) as a string of characters. As an example, see the "Invoking ProgramName" sections in this manual for some examples of commands with each program, like *note Invoking asttable::, *note Invoking astfits::, or *note Invoking aststatistics::. The shell then brakes up your string into separate _tokens_ or _words_ using any _metacharacters_ (like white-space, tab, ‘|’, ‘>’ or ‘;’) that are in the string. On the command-line, the first thing you usually enter is the name of the program you want to run. After that, you can specify two types of tokens: _arguments_ and _options_. In the GNU-style, arguments are those tokens that are not preceded by any hyphens (‘-’, see *note Arguments::). Here is one example: $ astcrop --center=53.162551,-27.789676 -w10/3600 --mode=wcs udf.fits In the example above, we are running *note Crop:: to crop a region of width 10 arc-seconds centered at the given RA and Dec from the input Hubble Ultra-Deep Field (UDF) FITS image. Here, the argument is ‘udf.fits’. Arguments are most commonly the input file names containing your data. Options start with one or two hyphens, followed by an identifier for the option (the option's name, for example, ‘--center’, ‘-w’, ‘--mode’ in the example above) and its value (anything after the option name, or the optional <=> character). Through options you can configure how the program runs (interprets the data you provided). Arguments can be mandatory and optional and unlike options, they do not have any identifiers. Hence, when there multiple arguments, their order might also matter (for example, in ‘cp’ which is used for copying one file to another location). The outputs of ‘--usage’ and ‘--help’ shows which arguments are optional and which are mandatory, see *note --usage::. As their name suggests, _options_ can be considered to be optional and most of the time, you do not have to worry about what order you specify them in. When the order does matter, or the option can be invoked multiple times, it is explicitly mentioned in the "Invoking ProgramName" section of each program (this is a very important aspect of an option). If there is only one such character, you can use a backslash (‘\’) before it. If there are multiple, it might be easier to simply put your whole argument or option value inside of double quotes (‘"’). In such cases, everything inside the double quotes will be seen as one token or word. For example, let's say you want to specify the header data unit (HDU) of your FITS file using a complex expression like '‘3; images(exposure > 100)’'. If you simply add these after the ‘--hdu’ (‘-h’) option, the programs in Gnuastro will read the value to the HDU option as '‘3’' and run. Then, the shell will attempt to run a separate command '‘images(exposure > 100)’' and complain about a syntax error. This is because the semicolon (‘;’) is an 'end of command' character in the shell. To solve this problem you can simply put double quotes around the whole string you want to pass to ‘--hdu’ as seen below: $ astcrop --hdu="3; images(exposure > 100)" image.fits * Menu: * Arguments:: For specifying the main input files/operations. * Options:: For configuring the behavior of the program.  File: gnuastro.info, Node: Arguments, Next: Options, Prev: Arguments and options, Up: Arguments and options 4.1.1.1 Arguments ................. In Gnuastro, arguments are almost exclusively used as the input data file names. Please consult the first few paragraph of the "Invoking ProgramName" section for each program for a description of what it expects as input, how many arguments, or input data, it accepts, or in what order. Everything particular about how a program treats arguments, is explained under the "Invoking ProgramName" section for that program. Generally, if there is a standard file name suffix for a particular format, that filename extension is checked to identify their format. In astronomy (and thus Gnuastro), FITS is the preferred format for inputs and outputs, so the focus here and throughout this book is on FITS. However, other formats are also accepted in special cases, for example, *note ConvertType:: also accepts JPEG or TIFF inputs, and writes JPEG, EPS or PDF files. The recognized suffixes for these formats are listed there. The list below shows the recognized suffixes for FITS data files in Gnuastro's programs. However, in some scenarios FITS writers may not append a suffix to the file, or use a non-recognized suffix (not in the list below). Therefore if a FITS file is expected, but it does not have any of these suffixes, Gnuastro programs will look into the contents of the file and if it does conform with the FITS standard, the file will be used. Just note that checking about 5 characters at the end of a name string is much more efficient than opening and checking the contents of a file, so it is generally recommended to have a recognized FITS suffix. • ‘.fits’: The standard file name ending of a FITS image. • ‘.fit’: Alternative (3 character) FITS suffix. • ‘.fits.Z’: A FITS image compressed with ‘compress’. • ‘.fits.gz’: A FITS image compressed with GNU zip (gzip). • ‘.fits.fz’: A FITS image compressed with ‘fpack’. • ‘.imh’: IRAF format image file. Throughout this book and in the command-line outputs, whenever we want to generalize all such astronomical data formats in a text place-holder, we will use ‘ASTRdata’ and assume that the extension is also part of this name. Any file ending with these names is directly passed on to CFITSIO to read. Therefore you do not necessarily have to have these files on your computer, they can also be located on an FTP or HTTP server too, see the CFITSIO manual for more information. CFITSIO has its own error reporting techniques, if your input file(s) cannot be opened, or read, those errors will be printed prior to the final error by Gnuastro.  File: gnuastro.info, Node: Options, Prev: Arguments, Up: Arguments and options 4.1.1.2 Options ............... Command-line options allow configuring the behavior of a program in all GNU/Linux applications for each particular execution on a particular input data. A single option can be called in two ways: _long_ or _short_. All options in Gnuastro accept the long format which has two hyphens an can have many characters (for example, ‘--hdu’). Short options only have one hyphen (<->) followed by one character (for example, ‘-h’). You can see some examples in the list of options in *note Common options:: or those for each program's "Invoking ProgramName" section. Both formats are shown for those which support both. First the short is shown then the long. Usually, the short options are handy when you are writing on the command-line and want to save keystrokes and time. The long options are good for shell scripts, where you are not usually rushing. Long options provide a level of documentation, since they are more descriptive and less cryptic. Usually after a few months of not running a program, the short options will be forgotten and reading your previously written script will not be easy. Some options need to be given a value if they are called and some do not. You can think of the latter type of options as on/off options. These two types of options can be distinguished using the output of the ‘--help’ and ‘--usage’ options, which are common to all GNU software, see *note Getting help::. In Gnuastro we use the following strings to specify when the option needs a value and what format that value should be in. More specific tests will be done in the program and if the values are out of range (for example, negative when the program only wants a positive value), an error will be reported. ‘INT’ The value is read as an integer. ‘FLT’ The value is read as a float. There are generally two types, depending on the context. If they are for fractions, they will have to be less than or equal to unity. ‘STR’ The value is read as a string of characters. For example, column names in a table, or HDU names in a multi-extension FITS file. Other examples include human-readable settings by some programs like the ‘--domain’ option of the Convolve program that can be either ‘spatial’ or ‘frequency’ (to specify the type of convolution, see *note Convolve::). ‘FITS or FITS/TXT’ The value should be a file (most commonly FITS). In many cases, other formats may also be accepted (for example, input tables can be FITS or plain-text, see *note Recognized table formats::). To specify a value in the short format, simply put the value after the option. Note that since the short options are only one character long, you do not have to type anything between the option and its value. For the long option you either need white space or an ‘=’ sign, for example, ‘-h2’, ‘-h 2’, ‘--hdu 2’ or ‘--hdu=2’ are all equivalent. The short format of on/off options (those that do not need values) can be concatenated for example, these two hypothetical sequences of options are equivalent: ‘-a -b -c4’ and ‘-abc4’. As an example, consider the following command to run Crop: $ astcrop -Dr3 --wwidth 3 catalog.txt --deccol=4 ASTRdata The ‘$’ is the shell prompt, ‘astcrop’ is the program name. There are two arguments (‘catalog.txt’ and ‘ASTRdata’) and four options, two of them given in short format (‘-D’, ‘-r’) and two in long format (‘--width’ and ‘--deccol’). Three of them require a value and one (‘-D’) is an on/off option. If an abbreviation is unique between all the options of a program, the long option names can be abbreviated. For example, instead of typing ‘--printparams’, typing ‘--print’ or maybe even ‘--pri’ will be enough, if there are conflicts, the program will warn you and show you the alternatives. Finally, if you want the argument parser to stop parsing arguments beyond a certain point, you can use two dashes: ‘--’. No text on the command-line beyond these two dashes will be parsed. Gnuastro has two types of options with values, those that only take a single value are the most common type. If these options are repeated or called more than once on the command-line, the value of the last time it was called will be assigned to it. This is very useful when you are testing/experimenting. Let's say you want to make a small modification to one option value. You can simply type the option with a new value in the end of the command and see how the script works. If you are satisfied with the change, you can remove the original option for human readability. If the change was not satisfactory, you can remove the one you just added and not worry about forgetting the original value. Without this capability, you would have to memorize or save the original value somewhere else, run the command and then change the value again which is not at all convenient and is potentially cause lots of bugs. On the other hand, some options can be called multiple times in one run of a program and can thus take multiple values (for example, see the ‘--column’ option in *note Invoking asttable::. In these cases, the order of stored values is the same order that you specified on the command-line. Gnuastro's programs do not keep any internal default values, so some options are mandatory and if they do not have a value, the program will complain and abort. Most programs have many such options and typing them by hand on every call is impractical. To facilitate the user experience, after parsing the command-line, Gnuastro's programs read special configuration files to get the necessary values for the options you have not identified on the command-line. These configuration files are fully described in *note Configuration files::. *CAUTION:* In specifying a file address, if you want to use the shell's tilde expansion (‘~’) to specify your home directory, leave at least one space between the option name and your value. For example, use ‘-o ~/test’, ‘--output ~/test’ or ‘--output= ~/test’. Calling them with ‘-o~/test’ or ‘--output=~/test’ will disable shell expansion. *CAUTION:* If you forget to specify a value for an option which requires one, and that option is the last one, Gnuastro will warn you. But if it is in the middle of the command, it will take the text of the next option or argument as the value which can cause undefined behavior. *NOTE:* In some contexts Gnuastro's counting starts from 0 and in others 1. You can assume by default that counting starts from 1, if it starts from 0 for a special option, it will be explicitly mentioned.  File: gnuastro.info, Node: Common options, Next: Shell TAB completion, Prev: Arguments and options, Up: Command-line 4.1.2 Common options -------------------- To facilitate the job of the users and developers, all the programs in Gnuastro share some basic command-line options for the options that are common to many of the programs. The full list is classified as *note Input output options::, *note Processing options::, and *note Operating mode options::. In some programs, some of the options are irrelevant, but still recognized (you will not get an unrecognized option error, but the value is not used). Unless otherwise mentioned, these options are identical between all programs. * Menu: * Input output options:: Common input/output options. * Processing options:: Options for common processing steps. * Operating mode options:: Common operating mode options.  File: gnuastro.info, Node: Input output options, Next: Processing options, Prev: Common options, Up: Common options 4.1.2.1 Input/Output options ............................ These options are to do with the input and outputs of the various programs. ‘--stdintimeout’ Number of micro-seconds to wait for writing/typing in the _first line_ of standard input from the command-line (see *note Standard input::). This is only relevant for programs that also accept input from the standard input, _and_ you want to manually write/type the contents on the terminal. When the standard input is already connected to a pipe (output of another program), there will not be any waiting (hence no timeout, thus making this option redundant). If the first line-break (for example, with the <ENTER> key) is not provided before the timeout, the program will abort with an error that no input was given. Note that this time interval is _only_ for the first line that you type. Once the first line is given, the program will assume that more data will come and accept rest of your inputs without any time limit. You need to specify the ending of the standard input, for example, by pressing <CTRL-D> after a new line. Note that any input you write/type into a program on the command-line with Standard input will be discarded (lost) once the program is finished. It is only recoverable manually from your command-line (where you actually typed) as long as the terminal is open. So only use this feature when you are sure that you do not need the dataset (or have a copy of it somewhere else). ‘-h STR/INT’ ‘--hdu=STR/INT’ The name or number of the desired Header Data Unit, or HDU, in the FITS image. A FITS file can store multiple HDUs or extensions, each with either an image or a table or nothing at all (only a header). Note that counting of the extensions starts from 0(zero), not 1(one). Counting from 0 is forced on us by CFITSIO which directly reads the value you give with this option (see *note CFITSIO::). When specifying the name, case is not important so ‘IMAGE’, ‘image’ or ‘ImAgE’ are equivalent. CFITSIO has many capabilities to help you find the extension you want, far beyond the simple extension number and name. See CFITSIO manual's "HDU Location Specification" section for a very complete explanation with several examples. A ‘#’ is appended to the string you specify for the HDU(1) and the result is put in square brackets and appended to the FITS file name before calling CFITSIO to read the contents of the HDU for all the programs in Gnuastro. *Default HDU is HDU number 1 (counting from 0):* by default, Gnuastro’s programs assume that their (main/first) input is in HDU number 1 (counting from zero). So if you don’t specify the HDU number, the program will read the input from this HDU. For programs that can take multiple FITS datasets as input (like *note Arithmetic::) this default HDU applies to the first input, you still need to call ‘--hdu’ for the other inputs. Generally, all Gnuastro's programs write their outputs in HDU number 1 (HDU 0 is reserved for metadata like the configuration parameters that the program was run with). For more on this, see *note Fits::. ‘-s STR’ ‘--searchin=STR’ Where to match/search for columns when the column identifier was not a number, see *note Selecting table columns::. The acceptable values are ‘name’, ‘unit’, or ‘comment’. This option is only relevant for programs that take table columns as input. ‘-I’ ‘--ignorecase’ Ignore case while matching/searching column meta-data (in the field specified by the ‘--searchin’). The FITS standard suggests to treat the column names as case insensitive, which is strongly recommended here also but is not enforced. This option is only relevant for programs that take table columns as input. This option is not relevant to *note BuildProgram::, hence in that program the short option ‘-I’ is used for include directories, not to ignore case. ‘-o STR’ ‘--output=STR’ The name of the output file or directory. With this option the automatic output names explained in *note Automatic output:: are ignored. ‘-T STR’ ‘--type=STR’ The data type of the output depending on the program context. This option is not applicable to some programs like *note Fits:: and will be ignored by them. The different acceptable values to this option are fully described in *note Numeric data types::. ‘-D’ ‘--dontdelete’ By default, if the output file already exists, Gnuastro's programs will silently delete it and put their own outputs in its place. When this option is activated, if the output file already exists, the programs will not delete it, will warn you, and will abort. ‘-K’ ‘--keepinputdir’ In automatic output names, do not remove the directory information of the input file names. As explained in *note Automatic output::, if no output name is specified (with ‘--output’), then the output name will be made in the existing directory based on your input's file name (ignoring the directory of the input). If you call this option, the directory information of the input will be kept and the automatically generated output name will be in the same directory as the input (usually with a suffix added). Note that his is only relevant if you are running the program in a different directory than the input data. ‘-t STR’ ‘--tableformat=STR’ The output table's type. This option is only relevant when the output is a table and its format cannot be deduced from its filename. For example, if a name ending in ‘.fits’ was given to ‘--output’, then the program knows you want a FITS table. But there are two types of FITS tables: FITS ASCII, and FITS binary. Thus, with this option, the program is able to identify which type you want. The currently recognized values to this option are: ‘--wcslinearmatrix=STR’ Select the linear transformation matrix of the output's WCS. This option only takes two values: ‘pc’ (for the ‘PCi_j’ formalism) and ‘cd’ (for ‘CDi_j’). For more on the different formalisms, please see Section 8.1 of the FITS standard(2), version 4.0. In short, in the ‘PCi_j’ formalism, we only keep the linear rotation matrix in these keywords and put the scaling factor (or the pixel scale in astronomical imaging) in the ‘CDELTi’ keywords. In the ‘CDi_j’ formalism, we blend the scaling into the rotation into a single matrix and keep that matrix in these FITS keywords. By default, Gnuastro uses the ‘PCi_j’ formalism, because it greatly helps in human readability of the raw keywords and is also the default mode of WCSLIB. However, in some circumstances it may be necessary to have the keywords in the CD format; for example, when you need to feed the outputs into other software that do not follow the full FITS standard and only recognize the ‘CDi_j’ formalism. ‘txt’ A plain text table with white-space characters between the columns (see *note Gnuastro text table format::). ‘fits-ascii’ A FITS ASCII table (see *note Recognized table formats::). ‘fits-binary’ A FITS binary table (see *note Recognized table formats::). ‘--outfitsnoconfig’ Do not write any of the program's metadata (option values or versions and dates) into the 0-th HDU of the output FITS file, see *note Output FITS files::. ‘--outfitsnodate’ Do not write the ‘DATE’ or ‘DATEUTC’ keywords into the 0-th HDU of the output FITS file, see *note Output FITS files::. ‘--outfitsnocommit’ Do not write the ‘COMMIT’ keyword into the 0-th HDU of the output FITS file, see *note Output FITS files::. ‘--outfitsnoversions’ Do not write the versions of any dependency software into the 0-th HDU of the output FITS file, see *note Output FITS files::. ---------- Footnotes ---------- (1) With the ‘#’ character, CFITSIO will only read the desired HDU into your memory, not all the existing HDUs in the fits file. (2) <https://fits.gsfc.nasa.gov/standard40/fits_standard40aa-le.pdf>  File: gnuastro.info, Node: Processing options, Next: Operating mode options, Prev: Input output options, Up: Common options 4.1.2.2 Processing options .......................... Some processing steps are common to several programs, so they are defined as common options to all programs. Note that this class of common options is thus necessarily less common between all the programs than those described in *note Input output options::, or *note Operating mode options:: options. Also, if they are irrelevant for a program, these options will not display in the ‘--help’ output of the program. ‘--minmapsize=INT’ The minimum size (in bytes) to memory-map a processing/internal array as a file (on the non-volatile HDD/SSD), and not use the system's RAM. Before using this option, please read *note Memory management::. By default processing arrays will only be memory-mapped to a file when the RAM is full. With this option, you can force the memory-mapping, even when there is enough RAM. To ensure this default behavior, the pre-defined value to this option is an extremely large value (larger than any existing RAM). Please note that using a non-volatile file (in the HDD/SDD) instead of RAM can significantly increase the program's running time, especially on HDDs (where read/write is slower). Also, note that the number of memory-mapped files that your kernel can support is limited. So when this option is necessary, it is best to give it values larger than 1 megabyte (‘--minmapsize=1000000’). You can then decrease it for a specific program's invocation on a large input after you see memory issues arise (for example, an error, or the program not aborting and fully consuming your memory). If you see randomly named files remaining in this directory when the program finishes normally, please send us a bug report so we address the problem, see *note Report a bug::. *Limited number of memory-mapped files:* The operating system kernels usually support a limited number of memory-mapped files. Therefore never set ‘--minmapsize’ to zero or a small number of bytes (so too many files are created). If the kernel capacity is exceeded, the program will crash. ‘--quietmmap’ Do not print any message when an array is stored in non-volatile memory (HDD/SSD) and not RAM, see the description of ‘--minmapsize’ (above) for more. ‘-Z INT[,INT[,...]]’ ‘--tilesize=[,INT[,...]]’ The size of regular tiles for tessellation, see *note Tessellation::. For each dimension an integer length (in units of data-elements or pixels) is necessary. If the number of input dimensions is different from the number of values given to this option, the program will stop with an error. Values must be separated by commas (<,>) and can also be fractions (for example, ‘4/2’). If they are fractions, the result must be an integer, otherwise an error will be printed. ‘-M INT[,INT[,...]]’ ‘--numchannels=INT[,INT[,...]]’ The number of channels for larger input tessellation, see *note Tessellation::. The number and types of acceptable values are similar to ‘--tilesize’. The only difference is that instead of length, the integers values given to this option represent the _number_ of channels, not their size. ‘-F FLT’ ‘--remainderfrac=FLT’ The fraction of remainder size along all dimensions to add to the first tile. See *note Tessellation:: for a complete description. This option is only relevant if ‘--tilesize’ is not exactly divisible by the input dataset's size in a dimension. If the remainder size is larger than this fraction (compared to ‘--tilesize’), then the remainder size will be added with one regular tile size and divided between two tiles at the start and end of the given dimension. ‘--workoverch’ Ignore the channel borders for the high-level job of the given application. As a result, while the channel borders are respected in defining the small tiles (such that no tile will cross a channel border), the higher-level program operation will ignore them, see *note Tessellation::. ‘--checktiles’ Make a FITS file with the same dimensions as the input but each pixel is replaced with the ID of the tile that it is associated with. Note that the tile IDs start from 0. See *note Tessellation:: for more on Tiling an image in Gnuastro. ‘--oneelempertile’ When showing the tile values (for example, with ‘--checktiles’, or when the program's output is tessellated) only use one element for each tile. This can be useful when only the relative values given to each tile compared to the rest are important or need to be checked. Since the tiles usually have a large number of pixels within them the output will be much smaller, and so easier to read, write, store, or send. Note that when the full input size in any dimension is not exactly divisible by the given ‘--tilesize’ in that dimension, the edge tile(s) will have different sizes (in units of the input's size), see ‘--remainderfrac’. But with this option, all displayed values are going to have the (same) size of one data-element. Hence, in such cases, the image proportions are going to be slightly different with this option. If your input image is not exactly divisible by the tile size and you want one value per tile for some higher-level processing, all is not lost though. You can see how many pixels were within each tile (for example, to weight the values or discard some for later processing) with Gnuastro's Statistics (see *note Statistics::) as shown below. The output FITS file is going to have two extensions, one with the median calculated on each tile and one with the number of elements that each tile covers. You can then use the ‘where’ operator in *note Arithmetic:: to set the values of all tiles that do not have the regular area to a blank value. $ aststatistics --median --number --ontile input.fits \ --oneelempertile --output=o.fits $ REGULAR_AREA=1600 # Check second extension of `o.fits'. $ astarithmetic o.fits o.fits $REGULAR_AREA ne nan where \ -h1 -h2 Note that if ‘input.fits’ also has blank values, then the median on tiles with blank values will also be ignored with the command above (which is desirable). ‘--inteponlyblank’ When values are to be interpolated, only change the values of the blank elements, keep the non-blank elements untouched. ‘--interpmetric=STR’ The metric to use for finding nearest neighbors. Currently it only accepts the Manhattan (or taxicab) metric with ‘manhattan’, or the radial metric with ‘radial’. The Manhattan distance between two points is defined with $|\Delta{x}|+|\Delta{y}|$. Thus the Manhattan metric has the advantage of being fast, but at the expense of being less accurate. The radial distance is the standard definition of distance in a Euclidean space: $\sqrt{\Delta{x}^2+\Delta{y}^2}$. It is accurate, but the multiplication and square root can slow down the processing. ‘--interpnumngb=INT’ The number of nearby non-blank neighbors to use for interpolation.  File: gnuastro.info, Node: Operating mode options, Prev: Processing options, Up: Common options 4.1.2.3 Operating mode options .............................. Another group of options that are common to all the programs in Gnuastro are those to do with the general operation of the programs. The explanation for those that are not only limited to Gnuastro but are common to all GNU programs start with (GNU option). ‘--’ (GNU option) Stop parsing the command-line. This option can be useful in scripts or when using the shell history. Suppose you have a long list of options, and want to see if removing some of them (to read from configuration files, see *note Configuration files::) can give a better result. If the ones you want to remove are the last ones on the command-line, you do not have to delete them, you can just add ‘--’ before them and if you do not get what you want, you can remove the ‘--’ and get the same initial result. ‘--usage’ (GNU option) Only print the options and arguments and abort. This is very useful for when you know the what the options do, and have just forgot their long/short identifiers, see *note --usage::. ‘-?’ ‘--help’ (GNU option) Print all options with an explanation and abort. Adding this option will print all the options in their short and long formats, also displaying which ones need a value if they are called (with an ‘=’ after the long format followed by a string specifying the format, see *note Options::). A short explanation is also given for what the option is for. The program will quit immediately after the message is printed and will not do any form of processing, see *note --help::. ‘-V’ ‘--version’ (GNU option) Print a short message, showing the full name, version, copyright information and program authors and abort. On the first line, it will print the official name (not executable name) and version number of the program. Following this is a blank line and a copyright information. The program will not run. ‘-q’ ‘--quiet’ Do not report steps. All the programs in Gnuastro that have multiple major steps will report their steps for you to follow while they are operating. If you do not want to see these reports, you can call this option and only error/warning messages will be printed. If the steps are done very fast (depending on the properties of your input) disabling these reports will also decrease running time. ‘--cite’ Print all necessary information to cite and acknowledge Gnuastro in your published papers. With this option, the programs will print the BibTeX entry to include in your paper for Gnuastro in general, and the particular program's paper (if that program comes with a separate paper). It will also print the necessary acknowledgment statement to add in the respective section of your paper and it will abort. For a more complete explanation, please see *note Acknowledgments::. Citations and acknowledgments are vital for the continued work on Gnuastro. Gnuastro started, and is continued, based on separate research projects. So if you find any of the tools offered in Gnuastro to be useful in your research, please use the output of this command to cite and acknowledge the program (and Gnuastro) in your research paper. Thank you. Gnuastro is still new, there is no separate paper only devoted to Gnuastro yet. Therefore currently the paper to cite for Gnuastro is the paper for NoiseChisel which is the first published paper introducing Gnuastro to the astronomical community. Upon reaching a certain point, a paper completely devoted to describing Gnuastro's many functionalities will be published, see *note GNU Astronomy Utilities 1.0::. ‘-P’ ‘--printparams’ With this option, Gnuastro's programs will read your command-line options and all the configuration files. If there is no problem (like a missing parameter or a value in the wrong format or range) and immediately before actually running, the programs will print the full list of option names, values and descriptions, sorted and grouped by context and abort. They will also report the version number, the date they were configured on your system and the time they were reported. As an example, you can give your full command-line options and even the input and output file names and finally just add ‘-P’ to check if all the parameters are finely set. If everything is OK, you can just run the same command (easily retrieved from the shell history, with the top arrow key) and simply remove the last two characters that showed this option. No program will actually start its processing when this option is called. The otherwise mandatory arguments for each program (for example, input image or catalog files) are no longer required when you call this option. ‘--config=STR’ Parse ‘STR’ as a configuration file name, immediately when this option is confronted (see *note Configuration files::). The ‘--config’ option can be called multiple times in one run of any Gnuastro program on the command-line or in the configuration files. In any case, it will be immediately read (before parsing the rest of the options on the command-line, or lines in a configuration file). If the given file does not exist or cannot be read for any reason, the program will print a warning and continue its processing. The warning can be suppressed with ‘--quiet’. Note that by definition, options on the command-line still take precedence over those in any configuration file, including the file(s) given to this option if they are called before it. Also see ‘--lastconfig’ and ‘--onlyversion’ on how this option can be used for reproducible results. You can use ‘--checkconfig’ (below) to check/confirm the parsing of configuration files. ‘--checkconfig’ Print options and their values, within the command-line or configuration files, as they are parsed (see *note Configuration file precedence::). If an option has already been set, or is ignored by the program, this option will also inform you with special values like ‘--ALREADY-SET--’. Only options that are parsed after this option are printed, so to see the parsing of all input options, it is recommended to put this option immediately after the program name before any other options. This is a very good option to confirm where the value of each option is has been defined in scenarios where there are multiple configuration files (for debugging). ‘--config-prefix=STR’ Accept option names in configuration files that start with the given prefix. Since order matters when reading custom configuration files, this option should be called *before* the ‘--config’ option(s) that contain options with the given prefix. This option does not affect the options within configuration files that have the standard name (without a prefix). This gives unique features to Gnuastro's configuration files, especially in large pipelines. Let's demonstrate this with the simple scenario below. You have multiple configuration files for different instances of one program (let's assume ‘nc-a.conf’ and ‘nc-b.conf’). At the same time, want to load all the option names/values into your shell as environment variables (for example with ‘source’). This happens when you want to use the options as shell variables in other parts of the your pipeline. If the two configuration files have different values for the same option (as shown below), and you don't use ‘--config-prefix’, the shell will over-write the common option values between the configuration files. But thanks to ‘--config-prefix’, you can give a different prefix for the different instances of the same option in different configuration files. $ cat nc-a.conf a_tilesize=20,20 $ cat nc-b.conf b_tilesize=40,40 ## Load configuration files as shell scripts (to define the ## option name and values as shell variables with values). ## Just note that 'source' only takes one file at a time. $ for c in nc-*.conf; do source $c; done $ astnoisechisel img.fits \ --config=nc-a.conf --config-prefix=a_ $ echo "NoiseChisel run with --tilesize=$a_tilesize" $ astnoisechisel img.fits \ --config=nc-b.conf --config-prefix=b_ $ echo "NoiseChisel run with --tilesize=$b_tilesize" ‘-S’ ‘--setdirconf’ Update the current directory configuration file for the Gnuastro program and quit. The full set of command-line and configuration file options will be parsed and options with a value will be written in the current directory configuration file for this program (see *note Configuration files::). If the configuration file or its directory does not exist, it will be created. If a configuration file exists it will be replaced (after it, and all other configuration files have been read). In any case, the program will not run. This is the recommended method(1) to edit/set the configuration file for all future calls to Gnuastro's programs. It will internally check if your values are in the correct range and type and save them according to the configuration file format, see *note Configuration file format::. So if there are unreasonable values to some options, the program will notify you and abort before writing the final configuration file. When this option is called, the otherwise mandatory arguments, for example input image or catalog file(s), are no longer mandatory (since the program will not run). ‘-U’ ‘--setusrconf’ Update the user configuration file and quit (see *note Configuration files::). See explanation under ‘--setdirconf’ for more details. ‘--lastconfig’ This is the last configuration file that must be read. When this option is confronted in any stage of reading the options (on the command-line or in a configuration file), no other configuration file will be parsed, see *note Configuration file precedence:: and *note Current directory and User wide::. Like all on/off options, on the command-line, this option does not take any values. But in a configuration file, it takes the values of ‘0’ or ‘1’, see *note Configuration file format::. If it is present in a configuration file with a value of ‘0’, then all later occurrences of this option will be ignored. ‘--onlyversion=STR’ Only run the program if Gnuastro's version is exactly equal to ‘STR’ (see *note Version numbering::). Note that it is not compared as a number, but as a string of characters, so ‘0’, or ‘0.0’ and ‘0.00’ are different. If the running Gnuastro version is different, then this option will report an error and abort as soon as it is confronted on the command-line or in a configuration file. If the running Gnuastro version is the same as ‘STR’, then the program will run as if this option was not called. This is useful if you want your results to be exactly reproducible and not mistakenly run with an updated/newer or older version of the program. Besides internal algorithmic/behavior changes in programs, the existence of options or their names might change between versions (especially in these earlier versions of Gnuastro). Hence, when using this option (probably in a script or in a configuration file), be sure to call it before other options. The benefit is that, when the version differs, the other options will not be parsed and you, or your collaborators/users, will not get errors saying an option in your configuration does not exist in the running version of the program. Here is one example of how this option can be used in conjunction with the ‘--lastconfig’ option. Let's assume that you were satisfied with the results of this command: ‘astnoisechisel image.fits --snquant=0.95’ (along with various options set in various configuration files). You can save the state of NoiseChisel and reproduce that exact result on ‘image.fits’ later by following these steps (the extra spaces, and <\>, are only for easy readability, if you want to try it out, only one space between each token is enough). $ echo "onlyversion X.XX" > reproducible.conf $ echo "lastconfig 1" >> reproducible.conf $ astnoisechisel image.fits --snquant=0.95 -P \ >> reproducible.conf ‘--onlyversion’ was available from Gnuastro 0.0, so putting it immediately at the start of a configuration file will ensure that later, you (or others using different version) will not get a non-recognized option error in case an option was added/removed. ‘--lastconfig’ will inform the installed NoiseChisel to not parse any other configuration files. This is done because we do not want the user's user-wide or system wide option values affecting our results. Finally, with the third command, which has a ‘-P’ (short for ‘--printparams’), NoiseChisel will print all the option values visible to it (in all the configuration files) and the shell will append them to ‘reproduce.conf’. Hence, you do not have to worry about remembering the (possibly) different options in the different configuration files. Afterwards, if you run NoiseChisel as shown below (telling it to read this configuration file with the ‘--config’ option). You can be sure that there will either be an error (for version mismatch) or it will produce exactly the same result that you got before. $ astnoisechisel --config=reproducible.conf ‘--log’ Some programs can generate extra information about their outputs in a log file. When this option is called in those programs, the log file will also be printed. If the program does not generate a log file, this option is ignored. *‘--log’ is not thread-safe*: The log file usually has a fixed name. Therefore if two simultaneous calls (with ‘--log’) of a program are made in the same directory, the program will try to write to he same file. This will cause problems like unreasonable log file, undefined behavior, or a crash. ‘-N INT’ ‘--numthreads=INT’ Use ‘INT’ CPU threads when running a Gnuastro program (see *note Multi-threaded operations::). If the value is zero (‘0’), or this option is not given on the command-line or any configuration file, the value will be determined at run-time: the maximum number of threads available to the system when you run a Gnuastro program. Note that multi-threaded programming is only relevant to some programs. In others, this option will be ignored. ---------- Footnotes ---------- (1) Alternatively, you can use your favorite text editor.  File: gnuastro.info, Node: Shell TAB completion, Next: Standard input, Prev: Common options, Up: Command-line 4.1.3 Shell TAB completion (highly customized) ---------------------------------------------- *Under development:* Gnuastro's TAB completion in Bash already greatly improves usage of Gnuastro on the command-line, but still under development and not yet complete. If you are interested to try it out, please go ahead and activate it (as described below), we encourage this. But please have in mind that there are known issues(1) and you may find new issues. If you do, please get in touch with us as described in *note Report a bug::. TAB completion is currently only implemented in the following programs: Arithmetic, BuildProgram, ConvertType, Convolve, CosmicCalculator, Crop, Fits and Table. For progress on this task, please see Task 15799(2). Bash provides a built-in feature called _programmable completion_(3) to help increase interactive workflow efficiency and minimize the number of keystrokes _and_ the need to memorize things. It is also known as TAB completion, bash completion, auto-completion, or word completion. Completion is activated by pressing <[TAB]> while you are typing a command. For file arguments this is the default behavior already and you have probably used it a lot with any command-line program. Besides this simple/default mode, Bash also enables a high level of customization features for its completion. These features have been extensively used in Gnuastro to improve your work efficiency(4). For example, if you are running ‘asttable’ (which only accepts files containing a table), and you press <[TAB]>, it will only suggest files containing tables. As another example, if an option needs image HDUs within a FITS file, pressing <[TAB]> will only suggest the image HDUs (and not other possibly existing HDUs that contain tables, or just metadata). Just note that the file name has to be already given on the command-line before reaching such options (that look into the contents of a file). But TAB completion is not limited to file types or contents. Arguments/Options that take certain fixed string values will directly suggest those strings with TAB, and completely ignore the file structure (for example, spectral line names in *note Invoking astcosmiccal::)! As another example, the option ‘--numthreads’ option (to specify the number of threads to use by the program), will find the number of available threads on the system, and suggest the possible numbers with a TAB! To activate Gnuastro's custom TAB completion in Bash, you need to put the following line in one of your Bash startup files (for example, ‘~/.bashrc’). If you installed Gnuastro using the steps of *note Quick start::, you should have already done this (the command just after ‘sudo make install’). For a list of (and discussion on) Bash startup files and installation directories see *note Installation directory::. Of course, if Gnuastro was installed in a custom location, replace the '‘/usr/local’' part of the line below to the value that was given to ‘--prefix’ during Gnuastro's configuration(5). # Enable Gnuastro's TAB completion source /usr/local/share/gnuastro/completion.bash After adding the line above in a Bash startup file, TAB completion will always be activated in any new terminal. To see if it has been activated, try it out with ‘asttable [TAB][TAB]’ and ‘astarithmetic [TAB][TAB]’ in a directory that contains tables and images. The first will only suggest the files with a table, and the second, only those with an image. *TAB completion only works with long option names:* As described above, short options are much more complex to generalize, therefore TAB completion is only available for long options. But do not worry! TAB completion also involves option names, so if you just type ‘--a[TAB][TAB]’, you will get the list of options that start with an ‘--a’. Therefore as a side-effect of TAB completion, your commands will be far more human-readable with minimal key strokes. ---------- Footnotes ---------- (1) <http://savannah.gnu.org/bugs/index.php?group=gnuastro&category_id=128> (2) <https://savannah.gnu.org/task/?15799> (3) <https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html> (4) To learn how Gnuastro implements TAB completion in Bash, see *note Bash programmable completion::. (5) In case you do not know the installation directory of Gnuastro on your system, you can find out with this command: ‘which astfits | sed -e"s|/bin/astfits||"’  File: gnuastro.info, Node: Standard input, Next: Shell tips, Prev: Shell TAB completion, Up: Command-line 4.1.4 Standard input -------------------- The most common way to feed the primary/first input dataset into a program is to give its filename as an argument (discussed in *note Arguments::). When you want to run a series of programs in sequence, this means that each will have to keep the output of each program in a separate file and re-type that file's name in the next command. This can be very slow and frustrating (mis-typing a file's name). To solve the problem, the founders of Unix defined pipes to directly feed the output of one program (its "Standard output" stream) into the "standard input" of a next program. This removes the need to make temporary files between separate processes and became one of the best demonstrations of the Unix-way, or Unix philosophy. Every program has three streams identifying where it reads/writes non-file inputs/outputs: _Standard input_, _Standard output_, and _Standard error_. When a program is called alone, all three are directed to the terminal that you are using. If it needs an input, it will prompt you for one and you can type it in. Or, it prints its results in the terminal for you to see. For example, say you have a FITS table/catalog containing the B and V band magnitudes (‘MAG_B’ and ‘MAG_V’ columns) of a selection of galaxies along with many other columns. If you want to see only these two columns in your terminal, can use Gnuastro's *note Table:: program like below: $ asttable cat.fits -cMAG_B,MAG_V Through the Unix pipe mechanism, when the shell confronts the pipe character (<|>), it connects the standard output of the program before the pipe, to the standard input of the program after it. So it is literally a "pipe": everything that you would see printed by the first program on the command (without any pipe), is now passed to the second program (and not seen by you). To continue the previous example, let's say you want to see the B-V color. To do this, you can pipe Table's output to AWK (a wonderful tool for processing things like plain text tables): $ asttable cat.fits -cMAG_B,MAG_V | awk '{print $1-$2}' But understanding the distribution by visually seeing all the numbers under each other is not too useful! You can therefore feed this single column information into *note Statistics:: to give you a general feeling of the distribution with the same command: $ asttable cat.fits -cMAG_B,MAG_V | awk '{print $1-$2}' | aststatistics Gnuastro's programs that accept input from standard input, only look into the Standard input stream if there is no first argument. In other words, arguments take precedence over Standard input. When no argument is provided, the programs check if the standard input stream is already full or not (output from another program is waiting to be used). If data is present in the standard input stream, it is used. When the standard input is empty, the program will wait ‘--stdintimeout’ micro-seconds for you to manually enter the first line (ending with a new-line character, or the <ENTER> key, see *note Input output options::). If it detects the first line in this time, there is no more time limit, and you can manually write/type all the lines for as long as it takes. To inform the program that Standard input has finished, press <CTRL-D> after a new line. If the program does not catch the first line before the time-out finishes, it will abort with an error saying that no input was provided. *Manual input in Standard input is discarded:* Be careful that when you manually fill the Standard input, the data will be discarded once the program finishes and reproducing the result will be impossible. Therefore this form of providing input is only good for temporary tests. *Standard input currently only for plain text:* Currently Standard input only works for plain text inputs like the example above. We will later allow FITS files into the programs through standard input also.  File: gnuastro.info, Node: Shell tips, Prev: Standard input, Up: Command-line 4.1.5 Shell tips ---------------- Gnuastro's programs are primarily meant to be run on the command-line shell environment. In this section, we will review some useful tips and tricks that can be helpful in the pipelines that you run. * Menu: * Separate shell variables for multiple outputs:: When you get values from one command. * Truncating start of long string FITS keyword values:: When the end of the string matters.  File: gnuastro.info, Node: Separate shell variables for multiple outputs, Next: Truncating start of long string FITS keyword values, Prev: Shell tips, Up: Shell tips 4.1.5.1 Separate shell variables for multiple outputs ..................................................... Sometimes your commands print multiple values and you want to use them as different shell variables. Let's describe the problem (shown in the box below) with an example (that you can reproduce without any external data). With the commands below, we'll first make a noisy ($\sigma=5$) image ($100\times100$ pixels) using *note Arithmetic::. Then, we'll measure(1) its mean and standard deviation using *note Statistics::. $ astarithmetic 100 100 2 makenew 5 mknoise-sigma -oimg.fits $ aststatistics img.fits --mean --std -3.10938611484039e-03 4.99607077069093e+00 *THE PROBLEM:* you want the first number printed above to be stored in a shell variable called ‘my_mean’ and the second number to be stored as the ‘my_std’ shell variable (you are free to choose any name!). The first thing that may come to mind is to run Statistics two times, and write the output into separate variables like below: $ my_std=$(aststatistics img.fits --std) ## NOT SOLUTION! ## $ my_mean=$(aststatistics img.fits --mean) ## NOT SOLUTION! ## But this is not a good solution because as ‘img.fits’ becomes larger (more pixels), the time it takes for Statistics to simply load the data into memory can be significant. This will slow down your pipeline and besides wasting your time, it contributes to global warming (by spending energy on an un-necessary action; take this seriously because your pipeline may scale up to involve thousands of large datasets)! Furthermore, besides loading of the input data, Statistics (and Gnuastro in general) is designed to do multiple measurements in one pass over the data as much as possible (to further decrease Gnuastro's carbon footprint). So when given ‘--mean --std’, it will measure both in one pass over the pixels (not two passes!). In other words, in this case, you get the two measurements for the cost of one. How do you separate the values from the first ‘aststatistics’ command above? One ugly way is to write the two-number output string into a single shell variable and then separate, or tokenize, the string with two subsequent commands like below: $ meanstd=$(aststatistics img.fits --mean --std) ## NOT SOLUTION! ## $ my_mean=$(echo $meanstd | awk '{print $1}') ## NOT SOLUTION! ## $ my_std=$(echo $meanstd | awk '{print $2}') ## NOT SOLUTION! ## *SOLUTION:* The solution is to formatted-print (‘printf’) the numbers as shell variables definitions in a string, and evaluate (‘eval’) that string as a command: $ eval "$(aststatistics img.fits --mean --std \ | xargs printf "my_mean=%s; my_std=%s")" Let's review the solution (in more detail): 1. We pipe the output into ‘xargs’(2) (extended arguments) which puts the two numbers it gets from the pipe, as arguments for ‘printf’ (formatted print; because ‘printf’ doesn't take input from pipes). 2. Within the ‘printf’ call, we write the values after putting a variable name and equal-sign, and in between them we put a <;> (as if it was a shell command). The ‘%s’ tells ‘printf’ to print each input as a string (not to interpret it as a number and loose precision). Here is the output of this phase: $ aststatistics img.fits --mean --std \ | xargs printf "my_mean=%s; my_std=%s" my_mean=-3.10938611484039e-03; my_std=4.99607077069093e+00 3. But the output above is a string! To evaluate this string as a command, we give it to the eval command like above. After the solution above, you will have the two ‘my_mean’ and ‘my_std’ variables to use separately in your pipeline: $ echo $my_mean -3.10938611484039e-03 $ echo $my_std 4.99607077069093e+00 This ‘eval’-based solution has been tested in in GNU Bash, Dash and Zsh and it works nicely in them (is "portable"). This is because the constructs used here are pretty low-level (and widely available). For examples usages of this technique, see the following sections: *note Extracting a single spectrum and plotting it:: and *note Pseudo narrow-band images::. ---------- Footnotes ---------- (1) The actual printed values by ‘aststatistics’ may slightly differ for you. This is because of a different random number generator seed used in ‘astarithmetic’. To get an exactly reproducible result, see *note Generating random numbers:: (2) For more on ‘xargs’, see <https://en.wikipedia.org/wiki/Xargs>. It will take the standard input (from the pipe in this scenario) and put it as arguments of the next program (‘printf’ in this scenario). In other words, it is good for programs that don't take input from standard input (‘printf’ in this case; but also includes others like ‘cp’, ‘rm’, or ‘echo’).  File: gnuastro.info, Node: Truncating start of long string FITS keyword values, Prev: Separate shell variables for multiple outputs, Up: Shell tips 4.1.5.2 Truncating start of long string FITS keyword values ........................................................... When you want to put a string (not a number, for example a file name) into the keyword value, if it is longer than 68 characters, CFITSIO is going to truncate the end of the string. The number 68 is the maximum allowable sting keyword length in the FITS standard(1). A robust way to solve this problem is to break the keyword into multiple keywords and continue the file name there. However, especially when dealing with file names, it is usually the last few characters that you want to preserve (the first ones are usually just basic operating system locations). Below, you can see the three necessary commands to optionally (when the length is too long) truncate such long strings in GNU Bash. When truncation is necessary, to inform the reader that the value has been truncated, we'll put '‘...’' at the start of the string. $ fname="/a/very/long/file/location" $ if [ ${#fname} -gt 68 ]; then value="...${fname: -65}"; \ else value=$fname; \ fi $ astfits image.fits --write=KEYNAME,"$value" Here are the core handy constructs of Bash that we are using here: ‘${#fname}’ Returns the length of the value given to the ‘fname’ variable. ‘${fname: -65}’ Returns the last 65 characters in the value of the ‘fname’ variable. ---------- Footnotes ---------- (1) In the FITS standard, the full length of a keyword (including its name) is 80 characters. The keyword name occupies 8 characters, which is followed by an <=> (1 character). For strings, we need one SPACE after the <=>, and the string should be enclosed in two single quotes. Accounting for all of these, we get $80-8-1-1-2=68$ available characters.  File: gnuastro.info, Node: Configuration files, Next: Getting help, Prev: Command-line, Up: Common program behavior 4.2 Configuration files ======================= Each program needs a certain number of parameters to run. Supplying all the necessary parameters each time you run the program is very frustrating and prone to errors. Therefore all the programs read the values for the necessary options you have not given in the command-line from one of several plain text files (which you can view and edit with any text editor). These files are known as configuration files and are usually kept in a directory named ‘etc/’ according to the file system hierarchy standard(1). The thing to have in mind is that none of the programs in Gnuastro keep any internal default value. All the values must either be stored in one of the configuration files or explicitly called in the command-line. In case the necessary parameters are not given through any of these methods, the program will print a missing option error and abort. The only exception to this is ‘--numthreads’, whose default value is determined at run-time using the number of threads available to your system, see *note Multi-threaded operations::. Of course, you can still provide a default value for the number of threads at any of the levels below, but if you do not, the program will not abort. Also note that through automatic output name generation, the value to the ‘--output’ option is also not mandatory on the command-line or in the configuration files for all programs which do not rely on that value as an input(2), see *note Automatic output::. * Menu: * Configuration file format:: ASCII format of configuration file. * Configuration file precedence:: Precedence of configuration files. * Current directory and User wide:: Local and user configuration files. * System wide:: System wide configuration files. ---------- Footnotes ---------- (1) <http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard> (2) One example of a program that uses the value given to ‘--output’ as an input is ConvertType, this value specifies the type of the output through the value to ‘--output’, see *note Invoking astconvertt::.  File: gnuastro.info, Node: Configuration file format, Next: Configuration file precedence, Prev: Configuration files, Up: Configuration files 4.2.1 Configuration file format ------------------------------- The configuration files for each program have the standard program executable name with a '‘.conf’' suffix. When you download the source code, you can find them in the same directory as the source code of each program, see *note Program source::. Any line in the configuration file whose first non-white character is a <#> is considered to be a comment and is ignored. An empty line is also similarly ignored. The long name of the option should be used as an identifier. The option name and option value should be separated by any number of 'white-space' characters (space, tab or vertical tab) or an equal (<=>). By default several space characters are used. If the value of an option has space characters (most commonly for the ‘hdu’ option), then the full value can be enclosed in double quotation signs (<">, similar to the example in *note Arguments and options::). If it is an option without a value in the ‘--help’ output (on/off option, see *note Options::), then the value should be ‘1’ if it is to be 'on' and ‘0’ otherwise. In each non-commented and non-blank line, any text after the first two words (option identifier and value) is ignored. If an option identifier is not recognized in the configuration file, the name of the file, the line number of the unrecognized option, and the unrecognized identifier name will be reported and the program will abort. If a parameter is repeated more more than once in the configuration files, accepts only one value, and is not set on the command-line, then only the first value will be used, the rest will be ignored. You can build or edit any of the directories and the configuration files yourself using any text editor. However, it is recommended to use the ‘--setdirconf’ and ‘--setusrconf’ options to set default values for the current directory or this user, see *note Operating mode options::. With these options, the values you give will be checked before writing in the configuration file. They will also print a set of commented lines guiding the reader and will also classify the options based on their context and write them in their logical order to be more understandable.  File: gnuastro.info, Node: Configuration file precedence, Next: Current directory and User wide, Prev: Configuration file format, Up: Configuration files 4.2.2 Configuration file precedence ----------------------------------- The option values in all the programs of Gnuastro will be filled in the following order. If an option only takes one value which is given in an earlier step, any value for that option in a later step will be ignored. Note that if the ‘lastconfig’ option is specified in any step below, no other configuration files will be parsed (see *note Operating mode options::). 1. Command-line options, for a particular run of ProgramName. 2. ‘.gnuastro/astprogname.conf’ is parsed by ProgramName in the current directory. 3. ‘.gnuastro/gnuastro.conf’ is parsed by all Gnuastro programs in the current directory. 4. ‘$HOME/.local/etc/astprogname.conf’ is parsed by ProgramName in the user's home directory (see *note Current directory and User wide::). 5. ‘$HOME/.local/etc/gnuastro.conf’ is parsed by all Gnuastro programs in the user's home directory (see *note Current directory and User wide::). 6. ‘prefix/etc/astprogname.conf’ is parsed by ProgramName in the system-wide installation directory (see *note System wide:: for ‘prefix’). 7. ‘prefix/etc/gnuastro.conf’ is parsed by all Gnuastro programs in the system-wide installation directory (see *note System wide:: for ‘prefix’). The basic idea behind setting this progressive state of checking for parameter values is that separate users of a computer or separate folders in a user's file system might need different values for some parameters. *Checking the order:* You can confirm/check the order of parsing configuration files using the ‘--checkconfig’ option with any Gnuastro program, see *note Operating mode options::. Just be sure to place this option immediately after the program name, before any other option. As you see above, there can also be a configuration file containing the common options in all the programs: ‘gnuastro.conf’ (see *note Common options::). If options specific to one program are specified in this file, there will be unrecognized option errors, or unexpected behavior if the option has different behavior in another program. On the other hand, there is no problem with ‘astprogname.conf’ containing common options(1). *Manipulating the order:* You can manipulate this order or add new files with the following two options which are fully described in *note Operating mode options::: ‘--config’ Allows you to define any file to be parsed as a configuration file on the command-line or within the any other configuration file. Recall that the file given to ‘--config’ is parsed immediately when this option is confronted (on the command-line or in a configuration file). ‘--lastconfig’ Allows you to stop the parsing of subsequent configuration files. Note that if this option is given in a configuration file, it will be fully read, so its position in the configuration does not matter (unlike ‘--config’). One example of benefiting from these configuration files can be this: raw telescope images usually have their main image extension in the second FITS extension, while processed FITS images usually only have one extension. If your system-wide default input extension is 0 (the first), then when you want to work with the former group of data you have to explicitly mention it to the programs every time. With this progressive state of default values to check, you can set different default values for the different directories that you would like to run Gnuastro in for your different purposes, so you will not have to worry about this issue any more. The same can be said about the ‘gnuastro.conf’ files: by specifying a behavior in this single file, all Gnuastro programs in the respective directory, user, or system-wide steps will behave similarly. For example, to keep the input's directory when no specific output is given (see *note Automatic output::), or to not delete an existing file if it has the same name as a given output (see *note Input output options::). ---------- Footnotes ---------- (1) As an example, the ‘--setdirconf’ and ‘--setusrconf’ options will also write the common options they have read in their produced ‘astprogname.conf’.  File: gnuastro.info, Node: Current directory and User wide, Next: System wide, Prev: Configuration file precedence, Up: Configuration files 4.2.3 Current directory and User wide ------------------------------------- For the current (local) and user-wide directories, the configuration files are stored in the hidden sub-directories named ‘.gnuastro/’ and ‘$HOME/.local/etc/’ respectively. Unless you have changed it, the ‘$HOME’ environment variable should point to your home directory. You can check it by running ‘$ echo $HOME’. Each time you run any of the programs in Gnuastro, this environment variable is read and placed in the above address. So if you suddenly see that your home configuration files are not being read, probably you (or some other program) has changed the value of this environment variable. Although it might cause confusions like above, this dependence on the ‘HOME’ environment variable enables you to temporarily use a different directory as your home directory. This can come in handy in complicated situations. To set the user or current directory configuration files based on your command-line input, you can use the ‘--setdirconf’ or ‘--setusrconf’, see *note Operating mode options::.  File: gnuastro.info, Node: System wide, Prev: Current directory and User wide, Up: Configuration files 4.2.4 System wide ----------------- When Gnuastro is installed, the configuration files that are shipped with the distribution are copied into the (possibly system wide) ‘prefix/etc/’ directory. For more details on ‘prefix’, see *note Installation directory:: (by default it is: ‘/usr/local’). This directory is the final place (with the lowest priority) that the programs in Gnuastro will check to retrieve parameter values. If you remove an option and its value from the system wide configuration files, you either have to specify it in more immediate configuration files or set it each time in the command-line. Recall that none of the programs in Gnuastro keep any internal default values and will abort if they do not find a value for the necessary parameters (except the number of threads and output file name). So even though you might never expect to use an optional option, it safe to have it available in this system-wide configuration file even if you do not intend to use it frequently. Note that in case you install Gnuastro from your distribution's repositories, ‘prefix’ will either be set to ‘/’ (the root directory) or ‘/usr’, so you can find the system wide configuration variables in ‘/etc/’ or ‘/usr/etc/’. The prefix of ‘/usr/local/’ is conventionally used for programs you install from source by yourself as in *note Quick start::.  File: gnuastro.info, Node: Getting help, Next: Multi-threaded operations, Prev: Configuration files, Up: Common program behavior 4.3 Getting help ================ Probably the first time you read this book, it is either in the PDF or HTML formats. These two formats are very convenient for when you are not actually working, but when you are only reading. Later on, when you start to use the programs and you are deep in the middle of your work, some of the details will inevitably be forgotten. Going to find the PDF file (printed or digital) or the HTML web page is a major distraction. GNU software have a very unique set of tools for aiding your memory on the command-line, where you are working, depending how much of it you need to remember. In the past, such command-line help was known as "online" help, because they were literally provided to you 'on' the command 'line'. However, nowadays the word "online" refers to something on the internet, so that term will not be used. With this type of help, you can resume your exciting research without taking your hands off the keyboard. Another major advantage of such command-line based help routines is that they are installed with the software in your computer, therefore they are always in sync with the executable you are actually running. Three of them are actually part of the executable. You do not have to worry about the version of the book or program. If you rely on external help (a PDF in your personal print or digital archive or HTML from the official web page) you have to check to see if their versions fit with your installed program. If you only need to remember the short or long names of the options, ‘--usage’ is advised. If it is what the options do, then ‘--help’ is a great tool. Man pages are also provided for those who are use to this older system of documentation. This full book is also available to you on the command-line in Info format. If none of these seems to resolve the problems, there is a mailing list which enables you to get in touch with experienced Gnuastro users. In the subsections below each of these methods are reviewed. * Menu: * --usage:: View option names and value formats. * --help:: List all options with description. * Man pages:: Man pages generated from -help. * Info:: View complete book in terminal. * help-gnuastro mailing list:: Contacting experienced users. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro.info-4�������������������������������������������������������������������0000644�0001750�0001750�00001166537�14557514035�012441� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is gnuastro.info, produced by makeinfo version 7.1 from gnuastro.texi. This book documents version 0.22 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * Match: (gnuastro)Match. Match two separate catalogs. * astmatch: (gnuastro)Invoking astmatch. Options to Match. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Segment: (gnuastro)Segment. Segment detections based on signal structure. * astsegment: (gnuastro)Invoking astsegment. Options to Segment. * Query: (gnuastro)Query. Access remote databases for downloading data. * astquery: (gnuastro)Invoking astquery. Options to Query. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. * astscript: (gnuastro)Installed scripts. Gnuastro's installed scripts. * astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script * astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script * astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script * astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script * astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script * astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script * astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script * astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script * astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script * astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script * astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script END-INFO-DIR-ENTRY  File: gnuastro.info, Node: --usage, Next: --help, Prev: Getting help, Up: Getting help 4.3.1 ‘--usage’ --------------- If you give this option, the program will not run. It will only print a very concise message showing the options and arguments. Everything within square brackets (‘[]’) is optional. For example, here are the first and last two lines of Crop's ‘--usage’ is shown: $ astcrop --usage Usage: astcrop [-Do?IPqSVW] [-d INT] [-h INT] [-r INT] [-w INT] [-x INT] [-y INT] [-c INT] [-p STR] [-N INT] [--deccol=INT] .... [--setusrconf] [--usage] [--version] [--wcsmode] [ASCIIcatalog] FITSimage(s).fits There are no explanations on the options, just their short and long names shown separately. After the program name, the short format of all the options that do not require a value (on/off options) is displayed. Those that do require a value then follow in separate brackets, each displaying the format of the input they want, see *note Options::. Since all options are optional, they are shown in square brackets, but arguments can also be optional. For example, in this example, a catalog name is optional and is only required in some modes. This is a standard method of displaying optional arguments for all GNU software.  File: gnuastro.info, Node: --help, Next: Man pages, Prev: --usage, Up: Getting help 4.3.2 ‘--help’ -------------- If the command-line includes this option, the program will not be run. It will print a complete list of all available options along with a short explanation. The options are also grouped by their context. Within each context, the options are sorted alphabetically. Since the options are shown in detail afterwards, the first line of the ‘--help’ output shows the arguments and if they are optional or not, similar to *note --usage::. In the ‘--help’ output of all programs in Gnuastro, the options for each program are classified based on context. The first two contexts are always options to do with the input and output respectively. For example, input image extensions or supplementary input files for the inputs. The last class of options is also fixed in all of Gnuastro, it shows operating mode options. Most of these options are already explained in *note Operating mode options::. The help message will sometimes be longer than the vertical size of your terminal. If you are using a graphical user interface terminal emulator, you can scroll the terminal with your mouse, but we promised no mice distractions! So here are some suggestions: • <Shift + PageUP> to scroll up and <Shift + PageDown> to scroll down. For most help output this should be enough. The problem is that it is limited by the number of lines that your terminal keeps in memory and that you cannot scroll by lines, only by whole screens. • Pipe to ‘less’. A pipe is a form of shell re-direction. The ‘less’ tool in Unix-like systems was made exactly for such outputs of any length. You can pipe (‘|’) the output of any program that is longer than the screen to it and then you can scroll through (up and down) with its many tools. For example: $ astnoisechisel --help | less Once you have gone through the text, you can quit ‘less’ by pressing the <q> key. • Redirect to a file. This is a less convenient way, because you will then have to open the file in a text editor! You can do this with the shell redirection tool (‘>’): $ astnoisechisel --help > filename.txt In case you have a special keyword you are looking for in the help, you do not have to go through the full list. GNU Grep is made for this job. For example, if you only want the list of options whose ‘--help’ output contains the word "axis" in Crop, you can run the following command: $ astcrop --help | grep axis If the output of this option does not fit nicely within the confines of your terminal, GNU does enable you to customize its output through the environment variable ‘ARGP_HELP_FMT’, you can set various parameters which specify the formatting of the help messages. For example, if your terminals are wider than 70 spaces (say 100) and you feel there is too much empty space between the long options and the short explanation, you can change these formats by giving values to this environment variable before running the program with the ‘--help’ output. You can define this environment variable in this manner: $ export ARGP_HELP_FMT=rmargin=100,opt-doc-col=20 This will affect all GNU programs using GNU C library's ‘argp.h’ facilities as long as the environment variable is in memory. You can see the full list of these formatting parameters in the "Argp User Customization" part of the GNU C library manual. If you are more comfortable to read the ‘--help’ outputs of all GNU software in your customized format, you can add your customization (similar to the line above, without the ‘$’ sign) to your ‘~/.bashrc’ file. This is a standard option for all GNU software.  File: gnuastro.info, Node: Man pages, Next: Info, Prev: --help, Up: Getting help 4.3.3 Man pages --------------- Man pages were the Unix method of providing command-line documentation to a program. With GNU Info, see *note Info:: the usage of this method of documentation is highly discouraged. This is because Info provides a much more easier to navigate and read environment. However, some operating systems require a man page for packages that are installed and some people are still used to this method of command-line help. So the programs in Gnuastro also have Man pages which are automatically generated from the outputs of ‘--version’ and ‘--help’ using the GNU help2man program. So if you run $ man programname You will be provided with a man page listing the options in the standard manner.  File: gnuastro.info, Node: Info, Next: help-gnuastro mailing list, Prev: Man pages, Up: Getting help 4.3.4 Info ---------- Info is the standard documentation format for all GNU software. It is a very useful command-line document viewing format, fully equipped with links between the various pages and menus and search capabilities. As explained before, the best thing about it is that it is available for you the moment you need to refresh your memory on any command-line tool in the middle of your work without having to take your hands off the keyboard. This complete book is available in Info format and can be accessed from anywhere on the command-line. To open the Info format of any installed programs or library on your system which has an Info format book, you can simply run the command below (change ‘executablename’ to the executable name of the program or library): $ info executablename In case you are not already familiar with it, run ‘$ info info’. It does a fantastic job in explaining all its capabilities itself. It is very short and you will become sufficiently fluent in about half an hour. Since all GNU software documentation is also provided in Info, your whole GNU/Linux life will significantly improve. Once you've become an efficient navigator in Info, you can go to any part of this book or any other GNU software or library manual, no matter how long it is, in a matter of seconds. It also blends nicely with GNU Emacs (a text editor) and you can search manuals while you are writing your document or programs without taking your hands off the keyboard, this is most useful for libraries like the GNU C library. To be able to access all the Info manuals installed in your GNU/Linux within Emacs, type <Ctrl-H + i>. To see this whole book from the beginning in Info, you can run $ info gnuastro If you run Info with the particular program executable name, for example ‘astcrop’ or ‘astnoisechisel’: $ info astprogramname you will be taken to the section titled "Invoking ProgramName" which explains the inputs and outputs along with the command-line options for that program. Finally, if you run Info with the official program name, for example, Crop or NoiseChisel: $ info ProgramName you will be taken to the top section which introduces the program. Note that in all cases, Info is not case sensitive.  File: gnuastro.info, Node: help-gnuastro mailing list, Prev: Info, Up: Getting help 4.3.5 help-gnuastro mailing list -------------------------------- Gnuastro maintains the help-gnuastro mailing list for users to ask any questions related to Gnuastro. The experienced Gnuastro users and some of its developers are subscribed to this mailing list and your email will be sent to them immediately. However, when contacting this mailing list please have in mind that they are possibly very busy and might not be able to answer immediately. To ask a question from this mailing list, send a mail to ‘help-gnuastro@gnu.org’. Anyone can view the mailing list archives at <http://lists.gnu.org/archive/html/help-gnuastro/>. It is best that before sending a mail, you search the archives to see if anyone has asked a question similar to yours. If you want to make a suggestion or report a bug, please do not send a mail to this mailing list. We have other mailing lists and tools for those purposes, see *note Report a bug:: or *note Suggest new feature::.  File: gnuastro.info, Node: Multi-threaded operations, Next: Numeric data types, Prev: Getting help, Up: Common program behavior 4.4 Multi-threaded operations ============================= Some of the programs benefit significantly when you use all the threads your computer's CPU has to offer to your operating system. The number of threads available can be larger than the number of physical (hardware) cores in the CPU (also known as Simultaneous multithreading). For example, in Intel's CPUs (those that implement its Hyper-threading technology) the number of threads is usually double the number of physical cores in your CPU. On a GNU/Linux system, the number of threads available can be found with the command ‘$ nproc’ command (part of GNU Coreutils). Gnuastro's programs can find the number of threads available to your system internally at run-time (when you execute the program). However, if a value is given to the ‘--numthreads’ option, the given number will be used, see *note Operating mode options:: and *note Configuration files:: for ways to use this option. Thus ‘--numthreads’ is the only common option in Gnuastro's programs with a value that does not have to be specified anywhere on the command-line or in the configuration files. * Menu: * A note on threads:: Caution and suggestion on using threads. * How to run simultaneous operations:: How to run things simultaneously.  File: gnuastro.info, Node: A note on threads, Next: How to run simultaneous operations, Prev: Multi-threaded operations, Up: Multi-threaded operations 4.4.1 A note on threads ----------------------- Spinning off threads is not necessarily the most efficient way to run an application. Creating a new thread is not a cheap operation for the operating system. It is most useful when the input data are fixed and you want the same operation to be done on parts of it. For example, one input image to Crop and multiple crops from various parts of it. In this fashion, the image is loaded into memory once, all the crops are divided between the number of threads internally and each thread cuts out those parts which are assigned to it from the same image. On the other hand, if you have multiple images and you want to crop the same region(s) out of all of them, it is much more efficient to set ‘--numthreads=1’ (so no threads spin off) and run Crop multiple times simultaneously, see *note How to run simultaneous operations::. You can check the boost in speed by first running a program on one of the data sets with the maximum number of threads and another time (with everything else the same) and only using one thread. You will notice that the wall-clock time (reported by most programs at their end) in the former is longer than the latter divided by number of physical CPU cores (not threads) available to your operating system. Asymptotically these two times can be equal (most of the time they are not). So limiting the programs to use only one thread and running them independently on the number of available threads will be more efficient. Note that the operating system keeps a cache of recently processed data, so usually, the second time you process an identical data set (independent of the number of threads used), you will get faster results. In order to make an unbiased comparison, you have to first clean the system's cache with the following command between the two runs. $ sync; echo 3 | sudo tee /proc/sys/vm/drop_caches *SUMMARY: Should I use multiple threads?* Depends: • If you only have *one* data set (image in most cases!), then yes, the more threads you use (with a maximum of the number of threads available to your OS) the faster you will get your results. • If you want to run the same operation on *multiple* data sets, it is best to set the number of threads to 1 and use Make, or GNU Parallel, as explained in *note How to run simultaneous operations::.  File: gnuastro.info, Node: How to run simultaneous operations, Prev: A note on threads, Up: Multi-threaded operations 4.4.2 How to run simultaneous operations ---------------------------------------- There are two(1) approaches to simultaneously execute a program: using GNU Parallel or Make (GNU Make is the most common implementation). The first is very useful when you only want to do one job multiple times and want to get back to your work without actually keeping the command you ran. The second is usually for more important operations, with lots of dependencies between the different products (for example, a full scientific research). GNU Parallel When you only want to run multiple instances of a command on different threads and get on with the rest of your work, the best method is to use GNU parallel. Surprisingly GNU Parallel is one of the few GNU packages that has no Info documentation but only a Man page, see *note Info::. So to see the documentation after installing it please run $ man parallel As an example, let's assume we want to crop a region fixed on the pixels (500, 600) with the default width from all the FITS images in the ‘./data’ directory ending with ‘sci.fits’ to the current directory. To do this, you can run: $ parallel astcrop --numthreads=1 --xc=500 --yc=600 ::: \ ./data/*sci.fits GNU Parallel can help in many more conditions, this is one of the simplest, see the man page for lots of other examples. For absolute beginners: the backslash (‘\’) is only a line breaker to fit nicely in the page. If you type the whole command in one line, you should remove it. Make Make is a program for building "targets" (e.g., files) using "recipes" (a set of operations) when their known "prerequisites" (other files) have been updated. It elegantly allows you to define dependency structures for building your final output and updating it efficiently when the inputs change. It is the most common infra-structure to build software today. Scientific research methodology is very similar to software development: you start by testing a hypothesis on a small sample of objects/targets with a simple set of steps. As you are able to get promising results, you improve the method and use it on a larger, more general, sample. In the process, you will confront many issues that have to be corrected (bugs in software development jargon). Make is a wonderful tool to manage this style of development. Besides the raw data analysis pipeline, Make has been used to for producing reproducible papers, for example, see the reproduction pipeline (https://gitlab.com/makhlaghi/NoiseChisel-paper) of the paper introducing *note NoiseChisel:: (one of Gnuastro's programs). In fact the NoiseChisel paper's Make-based workflow was the foundation of a parallel project called Maneage (http://maneage.org) (_Man_aging data lin_eage_): <http://maneage.org> that is described more fully in Akhlaghi et al. 2021 (https://arxiv.org/abs/2006.03018). Therefore, it is a very useful tool for complex scientific workflows. GNU Make(2) is the most common implementation which (similar to nearly all GNU programs, comes with a wonderful manual(3)). Make is very basic and simple, and thus the manual is short (the most important parts are in the first roughly 100 pages) and easy to read/understand. Make comes with a ‘--jobs’ (‘-j’) option which allows you to specify the maximum number of jobs that can be done simultaneously. For example, if you have 8 threads available to your operating system. You can run: $ make -j8 With this command, Make will process your ‘Makefile’ and create all the targets (can be thousands of FITS images for example) simultaneously on 8 threads, while fully respecting their dependencies (only building a file/target when its prerequisites are successfully built). Make is thus strongly recommended for managing scientific research where robustness, archiving, reproducibility and speed(4) are important. ---------- Footnotes ---------- (1) A third way would be to open multiple terminal emulator windows in your GUI, type the commands separately on each and press <Enter> once on each terminal, but this is far too frustrating, tedious and prone to errors. It's therefore not a realistic solution when tens, hundreds or thousands of operations (your research targets, multiplied by the operations you do on each) are to be done. (2) <https://www.gnu.org/software/make/> (3) <https://www.gnu.org/software/make/manual/> (4) Besides its multi-threaded capabilities, Make will only rebuild those targets that depend on a change you have made, not the whole work. For example, if you have set the prerequisites properly, you can easily test the changing of a parameter on your paper's results without having to re-do everything (which is much faster). This allows you to be much more productive in easily checking various ideas/assumptions of the different stages of your research and thus produce a more robust result for your exciting science.  File: gnuastro.info, Node: Numeric data types, Next: Memory management, Prev: Multi-threaded operations, Up: Common program behavior 4.5 Numeric data types ====================== At the lowest level, the computer stores everything in terms of ‘1’ or ‘0’. For example, each program in Gnuastro, or each astronomical image you take with the telescope is actually a string of millions of these zeros and ones. The space required to keep a zero or one is the smallest unit of storage, and is known as a _bit_. However, understanding and manipulating this string of bits is extremely hard for most people. Therefore, different standards are defined to package the bits into separate _type_s with a fixed interpretation of the bits in each package. To store numbers, the most basic standard/type is for integers ($..., -2, -1, 0, 1, 2, ...$). The common integer types are 8, 16, 32, and 64 bits wide (more bits will give larger limits). Each bit corresponds to a power of 2 and they are summed to create the final number. In the integer types, for each width there are two standards for reading the bits: signed and unsigned. In the 'signed' convention, one bit is reserved for the sign (stating that the integer is positive or negative). The 'unsigned' integers use that bit in the actual number and thus contain only positive numbers (starting from zero). Therefore, at the same number of bits, both signed and unsigned integers can allow the same number of integers, but the positive limit of the ‘unsigned’ types is double their ‘signed’ counterparts with the same width (at the expense of not having negative numbers). When the context of your work does not involve negative numbers (for example, counting, where negative is not defined), it is best to use the ‘unsigned’ types. For the full numerical range of all integer types, see below. Another standard of converting a given number of bits to numbers is the floating point standard, this standard can _approximately_ store any real number with a given precision. There are two common floating point types: 32-bit and 64-bit, for single and double precision floating point numbers respectively. The former is sufficient for data with less than 8 significant decimal digits (most astronomical data), while the latter is good for less than 16 significant decimal digits. The representation of real numbers as bits is much more complex than integers. If you are interested to learn more about it, you can start with the Wikipedia article (https://en.wikipedia.org/wiki/Floating_point). Practically, you can use Gnuastro's Arithmetic program to convert/change the type of an image/datacube (see *note Arithmetic::), or Gnuastro Table program to convert a table column's data type (see *note Column arithmetic::). Conversion of a dataset's type is necessary in some contexts. For example, the program/library, that you intend to feed the data into, only accepts floating point values, but you have an integer image/column. Another situation that conversion can be helpful is when you know that your data only has values that fit within ‘int8’ or ‘uint16’. However it is currently formatted in the ‘float64’ type. The important thing to consider is that operations involving wider, floating point, or signed types can be significantly slower than smaller-width, integer, or unsigned types respectively. Note that besides speed, a wider type also requires much more storage space (by 4 or 8 times). Therefore, when you confront such situations that can be optimized and want to store/archive/transfer the data, it is best to use the most efficient type. For example, if your dataset (image or table column) only has positive integers less than 65535, store it as an unsigned 16-bit integer for faster processing, faster transfer, and less storage space. The short and long names for the recognized numeric data types in Gnuastro are listed below. Both short and long names can be used when you want to specify a type. For example, as a value to the common option ‘--type’ (see *note Input output options::), or in the information comment lines of *note Gnuastro text table format::. The ranges listed below are inclusive. ‘u8’ ‘uint8’ 8-bit unsigned integers, range: $[0\rm{\ to\ }2^8-1]$ or $[0\rm{\ to\ }255]$. ‘i8’ ‘int8’ 8-bit signed integers, range: $[-2^7\rm{\ to\ }2^7-1]$ or $[-128\rm{\ to\ }127]$. ‘u16’ ‘uint16’ 16-bit unsigned integers, range: $[0\rm{\ to\ }2^{16}-1]$ or $[0\rm{\ to\ }65535]$. ‘i16’ ‘int16’ 16-bit signed integers, range: $[-2^{15}\rm{\ to\ }2^{15}-1]$ or $[-32768\rm{\ to\ }32767]$. ‘u32’ ‘uint32’ 32-bit unsigned integers, range: $[0\rm{\ to\ }2^{32}-1]$ or $[0\rm{\ to\ }4294967295]$. ‘i32’ ‘int32’ 32-bit signed integers, range: $[-2^{31}\rm{\ to\ }2^{31}-1]$ or $[-2147483648\rm{\ to\ }2147483647]$. ‘u64’ ‘uint64’ 64-bit unsigned integers, range $[0\rm{\ to\ }2^{64}-1]$ or $[0\rm{\ to\ }18446744073709551615]$. ‘i64’ ‘int64’ 64-bit signed integers, range: $[-2^{63}\rm{\ to\ }2^{63}-1]$ or $[-9223372036854775808\rm{\ to\ }9223372036854775807]$. ‘f32’ ‘float32’ 32-bit (single-precision) floating point types. The maximum (minimum is its negative) possible value is $3.402823\times10^{38}$. Single-precision floating points can accurately represent a floating point number up to $\sim7.2$ significant decimals. Given the heavy noise in astronomical data, this is usually more than sufficient for storing results. For more, see *note Printing floating point numbers::. ‘f64’ ‘float64’ 64-bit (double-precision) floating point types. The maximum (minimum is its negative) possible value is $\sim10^{308}$. Double-precision floating points can accurately represent a floating point number $\sim15.9$ significant decimals. This is usually good for processing (mixing) the data internally, for example, a sum of single precision data (and later storing the result as ‘float32’). For more, see *note Printing floating point numbers::. *Some file formats do not recognize all types.* for example, the FITS standard (see *note Fits::) does not define ‘uint64’ in binary tables or images. When a type is not acceptable for output into a given file format, the respective Gnuastro program or library will let you know and abort. On the command-line, you can convert the numerical type of an image, or table column into another type with *note Arithmetic:: or *note Table:: respectively. If you are writing your own program, you can use the ‘gal_data_copy_to_new_type()’ function in Gnuastro's library, see *note Copying datasets::.  File: gnuastro.info, Node: Memory management, Next: Tables, Prev: Numeric data types, Up: Common program behavior 4.6 Memory management ===================== In this section we will review how Gnuastro manages your input data in your system's memory. Knowing this can help you optimize your usage (in speed and memory consumption) when the data volume is large and approaches, or exceeds, your available RAM (usually in various calls to multiple programs simultaneously). But before diving into the details, let's have a short basic introduction to memory in general and in particular the types of memory most relevant to this discussion. Input datasets (that are later fed into programs for analysis) are commonly first stored in _non-volatile memory_. This is a type of memory that does not need a constant power supply to keep the data and is therefore primarily aimed for long-term storage, like HDDs or SSDs. So data in this type of storage is preserved when you turn off your computer. But by its nature, non-volatile memory is much slower, in reading or writing, than the speeds that CPUs can process the data. Thus relying on this type of memory alone would create a bad bottleneck in the input/output (I/O) phase of any processing. The first step to decrease this bottleneck is to have a faster storage space, but with a much limited storage volume. For this type of storage, computers have a Random Access Memory (or RAM). RAM is classified as a _volatile memory_ because it needs a constant flow of electricity to keep the information. In other words, the moment power is cut-off, all the stored information in your RAM is gone (hence the "volatile" name). But thanks to that constant supply of power, it can access any random address with equal (and very high!) speed. Hence, the general/simplistic way that programs deal with memory is the following (this is general to almost all programs, not just Gnuastro's): 1) Load/copy the input data from the non-volatile memory into RAM. 2) Use the copy of the data in RAM as input for all the internal processing as well as the intermediate data that is necessary during the processing. 3) Finally, when the analysis is complete, write the final output data back into non-volatile memory, and free/delete all the used space in the RAM (the initial copy and all the intermediate data). Usually the RAM is most important for the data of the intermediate steps (that you never see as a user of a program!). When the input dataset(s) to a program are small (compared to the available space in your system's RAM at the moment it is run) Gnuastro's programs and libraries follow the standard series of steps above. The only exception is that deleting the intermediate data is not only done at the end of the program. As soon as an intermediate dataset is no longer necessary for the next internal steps, the space it occupied is deleted/freed. This allows Gnuastro programs to minimize their usage of your system's RAM over the full running time. The situation gets complicated when the datasets are large (compared to your available RAM when the program is run). For example, if a dataset is half the size of your system's available RAM, and the program's internal analysis needs three or more intermediately processed copies of it at one moment in its analysis. There will not be enough RAM to keep those higher-level intermediate data. In such cases, programs that do not do any memory management will crash. But fortunately Gnuastro's programs do have a memory management plans for such situations. When the necessary amount of space for an intermediate dataset cannot be allocated in the RAM, Gnuastro's programs will not use the RAM at all. They will use the "memory-mapped file" concept in modern operating systems to create a randomly-named file in your non-volatile memory and use that instead of the RAM. That file will have the exact size (in bytes) of that intermediate dataset. Any time the program needs that intermediate dataset, the operating system will directly go to that file, and bypass your RAM. As soon as that file is no longer necessary for the analysis, it will be deleted. But as mentioned above, non-volatile memory has much slower I/O speed than the RAM. Hence in such situations, the programs will become noticeably slower (sometimes by factors of 10 times slower, depending on your non-volatile memory speed). Because of the drop in I/O speed (and thus the speed of your running program), the moment that any to-be-allocated dataset is memory-mapped, Gnuastro's programs and libraries will notify you with a descriptive statement like below (can happen in any phase of their analysis). It shows the location of the memory-mapped file, its size, complemented with a small description of the cause, a pointer to this section of the book for more information on how to deal with it (if necessary), and what to do to suppress it. astarithmetic: ./gnuastro_mmap/Fu7Dhs: temporary memory-mapped file (XXXXXXXXXXX bytes) created for intermediate data that is not stored in RAM (see the "Memory management" section of Gnuastro's manual for optimizing your project's memory management, and thus speed). To disable this warning, please use the option '--quiet-mmap' Finally, when the intermediate dataset is no longer necessary, the program will automatically delete it and notify you with a statement like this: astarithmetic: ./gnuastro_mmap/Fu7Dhs: deleted To disable these messages, you can run the program with ‘--quietmmap’, or set the ‘quietmmap’ variable in the allocating library function to be non-zero. An important component of these messages is the name of the memory-mapped file. Knowing that the file has been deleted is important for the user if the program crashes for any reason: internally (for example, a parameter is given wrongly) or externally (for example, you mistakenly kill the running job). In the event of a crash, the memory-mapped files will not be deleted and you have to manually delete them because they are usually large and they may soon fill your full storage if not deleted in a long time due to successive crashes. This brings us to managing the memory-mapped files in your non-volatile memory. In other words: knowing where they are saved, or intentionally placing them in different places of your file system, or deleting them when necessary. As the examples above show, memory-mapped files are stored in a sub-directory of the running directory called ‘gnuastro_mmap’. If this directory does not exist, Gnuastro will automatically create it when memory mapping becomes necessary. Alternatively, it may happen that the ‘gnuastro_mmap’ sub-directory exists and is not writable, or it cannot be created. In such cases, the memory-mapped file for each dataset will be created in the running directory with a ‘gnuastro_mmap_’ prefix. Therefore one easy way to delete all memory-mapped files in case of a crash, is to delete everything within the sub-directory (first command below), or all files stating with this prefix: rm -f gnuastro_mmap/* rm -f gnuastro_mmap_* A much more common issue when dealing with memory-mapped files is their location. For example, you may be running a program in a partition that is hosted by an HDD. But you also have another partition on an SSD (which has much faster I/O). So you want your memory-mapped files to be created in the SSD to speed up your processing. In this scenario, you want your project source directory to only contain your plain-text scripts and you want your project's built products (even the temporary memory-mapped files) to be built in a different location because they are large; thus I/O speed becomes important. To host the memory-mapped files in another location (with fast I/O), you can set (‘gnuastro_mmap’) to be a symbolic link to it. For example, let's assume you want your memory-mapped files to be stored in ‘/path/to/dir/for/mmap’. All you have to do is to run the following command before your Gnuastro analysis command(s). ln -s /path/to/dir/for/mmap gnuastro_mmap The programs will delete a memory-mapped file when it is no longer needed, but they will not delete the ‘gnuastro_mmap’ directory that hosts them. So if your project involves many Gnuastro programs (possibly called in parallel) and you want your memory-mapped files to be in a different location, you just have to make the symbolic link above once at the start, and all the programs will use it if necessary. Another memory-management scenario that may happen is this: you do not want a Gnuastro program to allocate internal datasets in the RAM at all. For example, the speed of your Gnuastro-related project does not matter at that moment, and you have higher-priority jobs that are being run at the same time which need to have RAM available. In such cases, you can use the ‘--minmapsize’ option that is available in all Gnuastro programs (see *note Processing options::). Any intermediate dataset that has a size larger than the value of this option will be memory-mapped, even if there is space available in your RAM. For example, if you want any dataset larger than 100 megabytes to be memory-mapped, use ‘--minmapsize=100000000’ (8 zeros!). You should not set the value of ‘--minmapsize’ to be too small, otherwise even small intermediate values (that are usually very numerous) in the program will be memory-mapped. However the kernel can only host a limited number of memory-mapped files at every moment (by all running programs combined). For example, in the default(1) Linux kernel on GNU/Linux operating systems this limit is roughly 64000. If the total number of memory-mapped files exceeds this number, all the programs using them will crash. Gnuastro's programs will warn you if your given value is too small and may cause a problem later. Actually, the default behavior for Gnuastro's programs (to only use memory-mapped files when there is not enough RAM) is a side-effect of ‘--minmapsize’. The pre-defined value to this option is an extremely large value in the lowest-level Gnuastro configuration file (the installed ‘gnuastro.conf’ described in *note Configuration file precedence::). This value is larger than the largest possible available RAM. You can check by running any Gnuastro program with a ‘-P’ option. Because no dataset will be larger than this, by default the programs will first attempt to use the RAM for temporary storage. But if writing in the RAM fails (for any reason, mainly due to lack of available space), then a memory-mapped file will be created. ---------- Footnotes ---------- (1) If you need to host more memory-mapped files at one moment, you need to build your own customized Linux kernel.  File: gnuastro.info, Node: Tables, Next: Tessellation, Prev: Memory management, Up: Common program behavior 4.7 Tables ========== "A table is a collection of related data held in a structured format within a database. It consists of columns, and rows." (from Wikipedia). Each column in the table contains the values of one property and each row is a collection of properties (columns) for one target object. For example, let's assume you have just ran MakeCatalog (see *note MakeCatalog::) on an image to measure some properties for the labeled regions (which might be detected galaxies for example) in the image. For each labeled region (detected galaxy), there will be a _row_ which groups its measured properties as _columns_, one column for each property. One such property can be the object's magnitude, which is the sum of pixels with that label, or its center can be defined as the light-weighted average value of those pixels. Many such properties can be derived from the raw pixel values and their position, see *note Invoking astmkcatalog:: for a long list. As a summary, for each labeled region (or, galaxy) we have one _row_ and for each measured property we have one _column_. This high-level structure is usually the first step for higher-level analysis, for example, finding the stellar mass or photometric redshift from magnitudes in multiple colors. Thus, tables are not just outputs of programs, in fact it is much more common for tables to be inputs of programs. For example, to make a mock galaxy image, you need to feed in the properties of each galaxy into *note MakeProfiles:: for it do the inverse of the process above and make a simulated image from a catalog, see *note Sufi simulates a detection::. In other cases, you can feed a table into *note Crop:: and it will crop out regions centered on the positions within the table, see *note Reddest clumps cutouts and parallelization::. So to end this relatively long introduction, tables play a very important role in astronomy, or generally all branches of data analysis. In *note Recognized table formats:: the currently recognized table formats in Gnuastro are discussed. You can use any of these tables as input or ask for them to be built as output. The most common type of table format is a simple plain text file with each row on one line and columns separated by white space characters, this format is easy to read/write by eye/hand. To give it the full functionality of more specific table types like the FITS tables, Gnuastro has a special convention which you can use to give each column a name, type, unit, and comments, while still being readable by other plain text table readers. This convention is described in *note Gnuastro text table format::. When tables are input to a program, the program reading it needs to know which column(s) it should use for its desired purposes. Gnuastro's programs all follow a similar convention, on the way you can select columns in a table. They are thoroughly discussed in *note Selecting table columns::. * Menu: * Recognized table formats:: Table formats that are recognized in Gnuastro. * Gnuastro text table format:: Gnuastro's convention plain text tables. * Selecting table columns:: Identify/select certain columns from a table  File: gnuastro.info, Node: Recognized table formats, Next: Gnuastro text table format, Prev: Tables, Up: Tables 4.7.1 Recognized table formats ------------------------------ The list of table formats that Gnuastro can currently read from and write to are described below. Each has their own advantage and disadvantages, so a short review of the format is also provided to help you make the best choice based on how you want to define your input tables or later use your output tables. Plain text table This is the most basic and simplest way to create, view, or edit the table by hand on a text editor. The other formats described below are less eye-friendly and have a more formal structure (for easier computer readability). It is fully described in *note Gnuastro text table format::. FITS ASCII tables The FITS ASCII table extension is fully in ASCII encoding and thus easily readable on any text editor (assuming it is the only extension in the FITS file). If the FITS file also contains binary extensions (for example, an image or binary table extensions), then there will be many hard to print characters. The FITS ASCII format does not have new line characters to separate rows. In the FITS ASCII table standard, each row is defined as a fixed number of characters (value to the ‘NAXIS1’ keyword), so to visually inspect it properly, you would have to adjust your text editor's width to this value. All columns start at given character positions and have a fixed width (number of characters). Numbers in a FITS ASCII table are printed into ASCII format, they are not in binary (that the CPU uses). Hence, they can take a larger space in memory, loose their precision, and take longer to read into memory. If you are dealing with integer type columns (see *note Numeric data types::), another issue with FITS ASCII tables is that the type information for the column will be lost (there is only one integer type in FITS ASCII tables). One problem with the binary format on the other hand is that it is not portable (different CPUs/compilers) have different standards for translating the zeros and ones. But since ASCII characters are defined on a byte and are well recognized, they are better for portability on those various systems. Gnuastro's plain text table format described below is much more portable and easier to read/write/interpret by humans manually. Generally, as the name implies, this format is useful for when your table mainly contains ASCII columns (for example, file names, or descriptions). They can be useful when you need to include columns with structured ASCII information along with other extensions in one FITS file. In such cases, you can also consider header keywords (see *note Fits::). FITS binary tables The FITS binary table is the FITS standard's solution to the issues discussed with keeping numbers in ASCII format as described under the FITS ASCII table title above. Only columns defined as a string type (a string of ASCII characters) are readable in a text editor. The portability problem with binary formats discussed above is mostly solved thanks to the portability of CFITSIO (see *note CFITSIO::) and the very long history of the FITS format which has been widely used since the 1970s. In the case of most numbers, storing them in binary format is more memory efficient than ASCII format. For example, to store ‘-25.72034’ in ASCII format, you need 9 bytes/characters. But if you keep this same number (to the approximate precision possible) as a 4-byte (32-bit) floating point number, you can keep/transmit it with less than half the amount of memory. When catalogs contain thousands/millions of rows in tens/hundreds of columns, this can lead to significant improvements in memory/band-width usage. Moreover, since the CPU does its operations in the binary formats, reading the table in and writing it out is also much faster than an ASCII table. When you are dealing with integer numbers, the compression ratio can be even better, for example, if you know all of the values in a column are positive and less than ‘255’, you can use the ‘unsigned char’ type which only takes one byte! If they are between ‘-128’ and ‘127’, then you can use the (signed) ‘char’ type. So if you are thoughtful about the limits of your integer columns, you can greatly reduce the size of your file and also the speed at which it is read/written. This can be very useful when sharing your results with collaborators or publishing them. To decrease the file size even more you can name your output as ending in ‘.fits.gz’ so it is also compressed after creation. Just note that compression/decompressing is CPU intensive and can slow down the writing/reading of the file. Fortunately the FITS Binary table format also accepts ASCII strings as column types (along with the various numerical types). So your dataset can also contain non-numerical columns. * Menu: * Gnuastro text table format:: Reading plain text tables  File: gnuastro.info, Node: Gnuastro text table format, Next: Selecting table columns, Prev: Recognized table formats, Up: Tables 4.7.2 Gnuastro text table format -------------------------------- Plain text files are the most generic, portable, and easiest way to (manually) create, (visually) inspect, or (manually) edit a table. In this format, the ending of a row is defined by the new-line character (a line on a text editor). So when you view it on a text editor, every row will occupy one line. The delimiters (or characters separating the columns) are white space characters (space, horizontal tab, vertical tab) and a comma (<,>). The only further requirement is that all rows/lines must have the same number of columns. The columns do not have to be exactly under each other and the rows can be arbitrarily long with different lengths. For example, the following contents in a file would be interpreted as a table with 4 columns and 2 rows, with each element interpreted as a 64-bit floating point type (see *note Numeric data types::). 1 2.234948 128 39.8923e8 2 , 4.454 792 72.98348e7 However, the example above has no other information about the columns (it is just raw data, with no meta-data). To use this table, you have to remember what the numbers in each column represent. Also, when you want to select columns, you have to count their position within the table. This can become frustrating and prone to bad errors (getting the columns wrong in your scientific project!) especially as the number of columns increase. It is also bad for sending to a colleague, because they will find it hard to remember/use the columns properly. To solve these problems in Gnuastro's programs/libraries you are not limited to using the column's number, see *note Selecting table columns::. If the columns have names, units, or comments you can also select your columns based on searches/matches in these fields, for example, see *note Table::. Also, in this manner, you cannot guide the program reading the table on how to read the numbers. As an example, the first and third columns above can be read as integer types: the first column might be an ID and the third can be the number of pixels an object occupies in an image. So there is no need to read these to columns as a 64-bit floating point type (which takes more memory, and is slower). In the bare-minimum example above, you also cannot use strings of characters, for example, the names of filters, or some other identifier that includes non-numerical characters. In the absence of any information, only numbers can be read robustly. Assuming we read columns with non-numerical characters as string, there would still be the problem that the strings might contain space (or any delimiter) character for some rows. So, each 'word' in the string will be interpreted as a column and the program will abort with an error that the rows do not have the same number of columns. To correct for these limitations, Gnuastro defines the following convention for storing the table meta-data along with the raw data in one plain text file. The format is primarily designed for ease of reading/writing by eye/fingers, but is also structured enough to be read by a program. When the first non-white character in a line is <#>, or there are no non-white characters in it, then the line will not be considered as a row of data in the table (this is a pretty standard convention in many programs, and higher level languages). In the first case (when the first character of the line is <#>), the line is interpreted as a _comment_. If the comment line starts with '‘# Column N:’', then it is assumed to contain information about column ‘N’ (a number, counting from 1). Comment lines that do not start with this pattern are ignored and you can use them to include any further information you want to store with the table in the text file. The most generic column information comment line has the following format: # Column N: NAME [UNIT, TYPE(NUM), BLANK] COMMENT Any sequence of characters between '<:>' and '<[>' will be interpreted as the column name (so it can contain anything except the '<[>' character). Anything between the '<]>' and the end of the line is defined as a comment. Within the brackets, anything before the first '<,>' is the units (physical units, for example, km/s, or erg/s), anything before the second '<,>' is the short type identifier (see below, and *note Numeric data types::). If the type identifier is not recognized, the default 64-bit floating point type will be used. The type identifier can optionally be followed by an integer within parenthesis. If the parenthesis is present and the integer is larger than 1, the column is assumed to be a "vector column" (which can have multiple values, for more see *note Vector columns::). Finally (still within the brackets), any non-white characters after the second '<,>' are interpreted as the blank value for that column (see *note Blank pixels::). The blank value can either be in the same type as the column (for example, ‘-99’ for a signed integer column), or any string (for example, ‘NaN’ in that same column). In both cases, the values will be stored in memory as Gnuastro's fixed blank values for each type. For floating point types, Gnuastro's internal blank value is IEEE NaN (Not-a-Number). For signed integers, it is the smallest possible value and for unsigned integers its the largest possible value. When a formatting problem occurs, or when the column was already given meta-data in a previous comment, or when the column number is larger than the actual number of columns in the table (the non-commented or empty lines), then the comment information line will be ignored. When a comment information line can be used, the leading and trailing white space characters will be stripped from all of the elements. For example, in this line: # Column 5: column name [km/s, f32,-99] Redshift as speed The ‘NAME’ field will be '‘column name’' and the ‘TYPE’ field will be '‘f32’'. Note how all the white space characters before and after strings are not used, but those in the middle remained. Also, white space characters are not mandatory. Hence, in the example above, the ‘BLANK’ field will be given the value of '‘-99’'. Except for the column number (‘N’), the rest of the fields are optional. Also, the column information comments do not have to be in order. In other words, the information for column $N+m$ ($m>0$) can be given in a line before column $N$. Furthermore, you do not have to specify information for all columns. Those columns that do not have this information will be interpreted with the default settings (like the case above: values are double precision floating point, and the column has no name, unit, or comment). So these lines are all acceptable for any table (the first one, with nothing but the column number is redundant): # Column 5: # Column 1: ID [,i8] The Clump ID. # Column 3: mag_f160w [AB mag, f32] Magnitude from the F160W filter The data type of the column should be specified with one of the following values: • For a numeric column, you can use any of the numeric types (and their recognized identifiers) described in *note Numeric data types::. • '‘strN’': for strings. The ‘N’ value identifies the length of the string (how many characters it has). The start of the string on each row is the first non-delimiter character of the column that has the string type. The next ‘N’ characters will be interpreted as a string and all leading and trailing white space will be removed. If the next column's characters, are closer than ‘N’ characters to the start of the string column in that line/row, they will be considered part of the string column. If there is a new-line character before the ending of the space given to the string column (in other words, the string column is the last column), then reading of the string will stop, even if the ‘N’ characters are not complete yet. See ‘tests/table/table.txt’ for one example. Therefore, the only time you have to pay attention to the positioning and spaces given to the string column is when it is not the last column in the table. The only limitation in this format is that trailing and leading white space characters will be removed from the columns that are read. In most cases, this is the desired behavior, but if trailing and leading white-spaces are critically important to your analysis, define your own starting and ending characters and remove them after the table has been read. For example, in the sample table below, the two '<|>' characters (which are arbitrary) will remain in the value of the second column and you can remove them manually later. If only one of the leading or trailing white spaces is important for your work, you can only use one of the '<|>'s. # Column 1: ID [label, u8] # Column 2: Notes [no unit, str50] 1 leading and trailing white space is ignored here 2.3442e10 2 | but they will be preserved here | 8.2964e11 Note that the FITS binary table standard does not define the ‘unsigned int’ and ‘unsigned long’ types, so if you want to convert your tables to FITS binary tables, use other types. Also, note that in the FITS ASCII table, there is only one integer type (‘long’). So if you convert a Gnuastro plain text table to a FITS ASCII table with the *note Table:: program, the type information for integers will be lost. Conversely if integer types are important for you, you have to manually set them when reading a FITS ASCII table (for example, with the Table program when reading/converting into a file, or with the ‘gnuastro/table.h’ library functions when reading into memory).  File: gnuastro.info, Node: Selecting table columns, Prev: Gnuastro text table format, Up: Tables 4.7.3 Selecting table columns ----------------------------- At the lowest level, the only defining aspect of a column in a table is its number, or position. But selecting columns purely by number is not very convenient and, especially when the tables are large it can be very frustrating and prone to errors. Hence, table file formats (for example, see *note Recognized table formats::) have ways to store additional information about the columns (meta-data). Some of the most common pieces of information about each column are its _name_, the _units_ of data in it, and a _comment_ for longer/informal description of the column's data. To facilitate research with Gnuastro, you can select columns by matching, or searching in these three fields, besides the low-level column number. To view the full list of information on the columns in the table, you can use the Table program (see *note Table::) with the command below (replace ‘table-file’ with the filename of your table, if its FITS, you might also need to specify the HDU/extension which contains the table): $ asttable --information table-file Gnuastro's programs need the columns for different purposes, for example, in Crop, you specify the columns containing the central coordinates of the crop centers with the ‘--coordcol’ option (see *note Crop options::). On the other hand, in MakeProfiles, to specify the column containing the profile position angles, you must use the ‘--pcol’ option (see *note MakeProfiles catalog::). Thus, there can be no unified common option name to select columns for all programs (different columns have different purposes). However, when the program expects a column for a specific context, the option names end in the ‘col’ suffix like the examples above. These options accept values in integer (column number), or string (metadata match/search) format. If the value can be parsed as a positive integer, it will be seen as the low-level column number. Note that column counting starts from 1, so if you ask for column 0, the respective program will abort with an error. When the value cannot be interpreted as an a integer number, it will be seen as a string of characters which will be used to match/search in the table's meta-data. The meta-data field which the value will be compared with can be selected through the ‘--searchin’ option, see *note Input output options::. ‘--searchin’ can take three values: ‘name’, ‘unit’, ‘comment’. The matching will be done following this convention: • If the value is enclosed in two slashes (for example, ‘-x/RA_/’, or ‘--coordcol=/RA_/’, see *note Crop options::), then it is assumed to be a regular expression with the same convention as GNU AWK. GNU AWK has a very well written chapter (https://www.gnu.org/software/gawk/manual/html_node/Regexp.html) describing regular expressions, so we will not continue discussing them here. Regular expressions are a very powerful tool in matching text and useful in many contexts. We thus strongly encourage reviewing this chapter for greatly improving the quality of your work in many cases, not just for searching column meta-data in Gnuastro. • When the string is not enclosed between '</>'s, any column that exactly matches the given value in the given field will be selected. Note that in both cases, you can ignore the case of alphabetic characters with the ‘--ignorecase’ option, see *note Input output options::. Also, in both cases, multiple columns may be selected with one call to this function. In this case, the order of the selected columns (with one call) will be the same order as they appear in the table.  File: gnuastro.info, Node: Tessellation, Next: Automatic output, Prev: Tables, Up: Common program behavior 4.8 Tessellation ================ It is sometimes necessary to classify the elements in a dataset (for example, pixels in an image) into a grid of individual, non-overlapping tiles. For example, when background sky gradients are present in an image, you can define a tile grid over the image. When the tile sizes are set properly, the background's variation over each tile will be negligible, allowing you to measure (and subtract) it. In other cases (for example, spatial domain convolution in Gnuastro, see *note Convolve::), it might simply be for speed of processing: each tile can be processed independently on a separate CPU thread. In the arts and mathematics, this process is formally known as tessellation (https://en.wikipedia.org/wiki/Tessellation). The size of the regular tiles (in units of data-elements, or pixels in an image) can be defined with the ‘--tilesize’ option. It takes multiple numbers (separated by a comma) which will be the length along the respective dimension (in FORTRAN/FITS dimension order). Divisions are also acceptable, but must result in an integer. For example, ‘--tilesize=30,40’ can be used for an image (a 2D dataset). The regular tile size along the first FITS axis (horizontal when viewed in SAO DS9) will be 30 pixels and along the second it will be 40 pixels. Ideally, ‘--tilesize’ should be selected such that all tiles in the image have exactly the same size. In other words, that the dataset length in each dimension is divisible by the tile size in that dimension. However, this is not always possible: the dataset can be any size and every pixel in it is valuable. In such cases, Gnuastro will look at the significance of the remainder length, if it is not significant (for example, one or two pixels), then it will just increase the size of the first tile in the respective dimension and allow the rest of the tiles to have the required size. When the remainder is significant (for example, one pixel less than the size along that dimension), the remainder will be added to one regular tile's size and the large tile will be cut in half and put in the two ends of the grid/tessellation. In this way, all the tiles in the central regions of the dataset will have the regular tile sizes and the tiles on the edge will be slightly larger/smaller depending on the remainder significance. The fraction which defines the remainder significance along all dimensions can be set through ‘--remainderfrac’. The best tile size is directly related to the spatial properties of the property you want to study (for example, gradient on the image). In practice we assume that the gradient is not present over each tile. So if there is a strong gradient (for example, in long wavelength ground based images) or the image is of a crowded area where there is not too much blank area, you have to choose a smaller tile size. A larger mesh will give more pixels and so the scatter in the results will be less (better statistics). For raw image processing, a single tessellation/grid is not sufficient. Raw images are the unprocessed outputs of the camera detectors. Modern detectors usually have multiple readout channels each with its own amplifier. For example, the Hubble Space Telescope Advanced Camera for Surveys (ACS) has four amplifiers over its full detector area dividing the square field of view to four smaller squares. Ground based image detectors are not exempt, for example, each CCD of Subaru Telescope's Hyper Suprime-Cam camera (which has 104 CCDs) has four amplifiers, but they have the same height of the CCD and divide the width by four parts. The bias current on each amplifier is different, and initial bias subtraction is not perfect. So even after subtracting the measured bias current, you can usually still identify the boundaries of different amplifiers by eye. See Figure 11(a) in Akhlaghi and Ichikawa (2015) for an example. This results in the final reduced data to have non-uniform amplifier-shaped regions with higher or lower background flux values. Such systematic biases will then propagate to all subsequent measurements we do on the data (for example, photometry and subsequent stellar mass and star formation rate measurements in the case of galaxies). Therefore an accurate analysis requires a two layer tessellation: the top layer contains larger tiles, each covering one amplifier channel. For clarity we will call these larger tiles "channels". The number of channels along each dimension is defined through the ‘--numchannels’. Each channel is then covered by its own individual smaller tessellation (with tile sizes determined by the ‘--tilesize’ option). This will allow independent analysis of two adjacent pixels from different channels if necessary. If the image is processed or the detector only has one amplifier, you can set the number of channels in both dimension to 1. The final tessellation can be inspected on the image with the ‘--checktiles’ option that is available to all programs which use tessellation for localized operations. When this option is called, a FITS file with a ‘_tiled.fits’ suffix will be created along with the outputs, see *note Automatic output::. Each pixel in this image has the number of the tile that covers it. If the number of channels in any dimension are larger than unity, you will notice that the tile IDs are defined such that the first channels is covered first, then the second and so on. For the full list of processing-related common options (including tessellation options), please see *note Processing options::.  File: gnuastro.info, Node: Automatic output, Next: Output FITS files, Prev: Tessellation, Up: Common program behavior 4.9 Automatic output ==================== All the programs in Gnuastro are designed such that specifying an output file or directory (based on the program context) is optional. When no output name is explicitly given (with ‘--output’, see *note Input output options::), the programs will automatically set an output name based on the input name(s) and what the program does. For example, when you are using ConvertType to save FITS image named ‘dataset.fits’ to a JPEG image and do not specify a name for it, the JPEG output file will be name ‘dataset.jpg’. When the input is from the standard input (for example, a pipe, see *note Standard input::), and ‘--output’ is not given, the output name will be the program's name (for example, ‘converttype.jpg’). Another very important part of the automatic output generation is that all the directory information of the input file name is stripped off of it. This feature can be disabled with the ‘--keepinputdir’ option, see *note Input output options::. It is the default because astronomical data are usually very large and organized specially with special file names. In some cases, the user might not have write permissions in those directories(1). Let's assume that we are working on a report and want to process the FITS images from two projects (ABC and DEF), which are stored in the sub-directories named ‘ABCproject/’ and ‘DEFproject/’ of our top data directory (‘/mnt/data’). The following shell commands show how one image from the former is first converted to a JPEG image through ConvertType and then the objects from an image in the latter project are detected using NoiseChisel. The text after the ‘#’ sign are comments (not typed!). $ pwd # Current location /home/usrname/research/report $ ls # List directory contents ABC01.jpg $ ls /mnt/data/ABCproject # Archive 1 ABC01.fits ABC02.fits ABC03.fits $ ls /mnt/data/DEFproject # Archive 2 DEF01.fits DEF02.fits DEF03.fits $ astconvertt /mnt/data/ABCproject/ABC02.fits --output=jpg # Prog 1 $ ls ABC01.jpg ABC02.jpg $ astnoisechisel /mnt/data/DEFproject/DEF01.fits # Prog 2 $ ls ABC01.jpg ABC02.jpg DEF01_detected.fits ---------- Footnotes ---------- (1) In fact, even if the data is stored on your own computer, it is advised to only grant write permissions to the super user or root. This way, you will not accidentally delete or modify your valuable data!  File: gnuastro.info, Node: Output FITS files, Next: Numeric locale, Prev: Automatic output, Up: Common program behavior 4.10 Output FITS files ====================== The output of many of Gnuastro's programs are (or can be) FITS files. The FITS format has many useful features for storing scientific datasets (cubes, images and tables) along with a robust features for archivability. For more on this standard, please see *note Fits::. As a community convention described in *note Fits::, the first extension of all FITS files produced by Gnuastro's programs only contains the meta-data that is intended for the file's extension(s). For a Gnuastro program, this generic meta-data (that is stored as FITS keyword records) is its configuration when it produced this dataset: file name(s) of input(s) and option names, values and comments. You can use the ‘--outfitsnoconfig’ option to stop the programs from writing these keywords into the first extension of their output. When the configuration is too trivial (only input filename, for example, the program *note Table::) no meta-data is written in this extension. FITS keywords have the following limitations in regards to generic option names and values which are described below: • If a keyword (option name) is longer than 8 characters, the first word in the record (80 character line) is ‘HIERARCH’ which is followed by the keyword name. • Values can be at most 75 characters, but for strings, this changes to 73 (because of the two extra <'> characters that are necessary). However, if the value is a file name, containing slash (</>) characters to separate directories, Gnuastro will break the value into multiple keywords. • Keyword names ignore case, therefore they are all in capital letters. Therefore, if you want to use Grep to inspect these keywords, use the ‘-i’ option, like the example below. $ astfits image_detected.fits -h0 | grep -i snquant The keywords above are classified (separated by an empty line and title) as a group titled "ProgramName configuration". This meta-data extension also contains a final group of keywords to keep the basic date and version information of Gnuastro, its dependencies and the pipeline that is using Gnuastro (if it is under version control); they are listed below. ‘DATE’ The creation time of the FITS file. This date is written directly by CFITSIO and is in UT format. While the date can be a good metadata in most scenarios, it does have a caveat: when everything else in your output is the same between multiple runs, the date will be different! If exact reproducibility is important for you, this can be annoying! To stop any Gnuastro program from writing the ‘DATE’ keyword, you can use the ‘--outfitsnodate’ (see *note Input output options::). ‘DATEUTC’ If the date in the ‘DATE’ keyword is in UTC (https://en.wikipedia.org/wiki/Coordinated_Universal_Time), this keyword will have a value of 1; otherwise, it will have a value of 0. If ‘DATE’ is not written, this is also ignored. ‘COMMIT’ Git's commit description from the running directory of Gnuastro's programs. If the running directory is not version controlled or ‘libgit2’ is not installed (see *note Optional dependencies::) then this keyword will not be present. The printed value is equivalent to the output of the following command: git describe --dirty --always If the running directory contains non-committed work, then the stored value will have a '‘-dirty’' suffix. This can be very helpful to let you know that the data is not ready to be shared with collaborators or submitted to a journal. You should only share results that are produced after all your work is committed (safely stored in the version controlled history and thus reproducible). At first sight, version control appears to be mainly a tool for software developers. However progress in a scientific research is almost identical to progress in software development: first you have a rough idea that starts with handful of easy steps. But as the first results appear to be promising, you will have to extend, or generalize, it to make it more robust and work in all the situations your research covers, not just your first test samples. Slowly you will find wrong assumptions or bad implementations that need to be fixed ('bugs' in software development parlance). Finally, when you submit the research to your collaborators or a journal, many comments and suggestions will come in, and you have to address them. Software developers have created version control systems precisely for this kind of activity. Each significant moment in the project's history is called a "commit", see *note Version controlled source::. A snapshot of the project in each "commit" is safely stored away, so you can revert back to it at a later time, or check changes/progress. This way, you can be sure that your work is reproducible and track the progress and history. With version control, experimentation in the project's analysis is greatly facilitated, since you can easily revert back if a brainstorm test procedure fails. One important feature of version control is that the research result (FITS image, table, report or paper) can be stamped with the unique commit information that produced it. This information will enable you to exactly reproduce that same result later, even if you have made changes/progress. For one example of a research paper's reproduction pipeline, please see the reproduction pipeline (https://gitlab.com/makhlaghi/NoiseChisel-paper) of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) describing *note NoiseChisel::. In case you don't want the ‘COMMIT’ keyword in the first extension of your output FITS file, you can use the ‘--outfitsnocommit’ option (see *note Input output options::). ‘CFITSIO’ The version of CFITSIO used (see *note CFITSIO::). This can be disabled with ‘--outfitsnoversions’ (see *note Input output options::). ‘WCSLIB’ The version of WCSLIB used (see *note WCSLIB::). Note that older versions of WCSLIB do not report the version internally. So this is only available if you are using more recent WCSLIB versions. This can be disabled with ‘--outfitsnoversions’ (see *note Input output options::). ‘GSL’ The version of GNU Scientific Library that was used, see *note GNU Scientific Library::. This can be disabled with ‘--outfitsnoversions’ (see *note Input output options::). ‘GNUASTRO’ The version of Gnuastro used (see *note Version numbering::). This can be disabled with ‘--outfitsnoversions’ (see *note Input output options::).  File: gnuastro.info, Node: Numeric locale, Prev: Output FITS files, Up: Common program behavior 4.11 Numeric locale =================== If your system locale (https://en.wikipedia.org/wiki/Locale_(computer_software)) is not English, it may happen that the '.' is not used as the decimal separator of basic command-line tools for input or output. For example, in Spanish and some other languages the decimal separator (symbol used to separate the integer and fractional part of a number), is a comma. Therefore in such systems, some programs may print $0.5$ as as '‘0,5’' (instead of '‘0.5’'). This mainly happens in some core operating system tools like ‘awk’ or ‘seq’ depend on the locale. This can cause problems for other programs (like those in Gnuastro that expect a '<.>' as the decimal separator). To see the effect, please try the commands below. The first one will print $0.5$ in your default locale's format. The second set will use the Spanish locale for printing numbers (which will put a comma between the 0 and the 5). The third will use the English (US) locale for printing numbers (which will put a point between the 0 and the 5). $ seq 0.5 1 $ export LC_NUMERIC=es_ES.utf8 $ seq 0.5 1 $ export LC_NUMERIC=en_US.utf8 $ seq 0.5 1 With the simple command below, you can check your current locale environment variables for specifying the formats of various things like date, time, monetary, telephone, numbers, etc. You can change any of these, by simply giving different values to the respective variable like above. For a more complete explanation on each variable, see <https://www.baeldung.com/linux/locale-environment-variables>. $ locale To avoid these kinds of locale-specific problems (for example, another program not being able to read '‘0,5’' as half of unity), you can change the locale by giving the value of ‘C’ to the ‘LC_NUMERIC’ environment variable (or the lower-level/generic ‘LC_ALL’). You will notice that ‘C’ is not a human-language and country identifier like ‘en_US’, it is the programming locale, which is well recognized by programmers in all countries and is available on all Unix-like operating systems (others may not be pre-defined and may need installation). You can set the ‘LC_NUMERIC’ only for a single command (the first one below: simply defining the variable in the same line), or all commands within the running session (the second command below, or "exporting" it to all subsequent commands): ## Change the numeric locale, only for this 'seq' command. $ LC_NUMERIC=C seq 0.5 1 ## Change the locale to the standard, for all commands after it. $ export LC_NUMERIC=C If you want to change it generally for all future sessions, you can put the second command in your shell's startup file. For more on startup files, please see *note Installation directory::.  File: gnuastro.info, Node: Data containers, Next: Data manipulation, Prev: Common program behavior, Up: Top 5 Data containers ***************** The most low-level and basic property of a dataset is how it is stored. To process, archive and transmit the data, you need a container to store it first. From the start of the computer age, different formats have been defined to store data, optimized for particular applications. One format/container can never be useful for all applications: the storage defines the application and vice-versa. In astronomy, the Flexible Image Transport System (FITS) standard has become the most common format of data storage and transmission. It has many useful features, for example, multiple sub-containers (also known as extensions or header data units, HDUs) within one file, or support for tables as well as images. Each HDU can store an independent dataset and its corresponding meta-data. Therefore, Gnuastro has one program (see *note Fits::) specifically designed to manipulate FITS HDUs and the meta-data (header keywords) in each HDU. Your astronomical research does not just involve data analysis (where the FITS format is very useful). For example, you want to demonstrate your raw and processed FITS images or spectra as figures within slides, reports, or papers. The FITS format is not defined for such applications. Thus, Gnuastro also comes with the ConvertType program (see *note ConvertType::) which can be used to convert a FITS image to and from (where possible) other formats like plain text and JPEG (which allow two way conversion), along with EPS and PDF (which can only be created from FITS, not the other way round). Finally, the FITS format is not just for images, it can also store tables. Binary tables in particular can be very efficient in storing catalogs that have more than a few tens of columns and rows. However, unlike images (where all elements/pixels have one data type), tables contain multiple columns and each column can have different properties: independent data types (see *note Numeric data types::) and meta-data. In practice, each column can be viewed as a separate container that is grouped with others in the table. The only shared property of the columns in a table is thus the number of elements they contain. To allow easy inspection/manipulation of table columns, Gnuastro has the Table program (see *note Table::). It can be used to select certain table columns in a FITS table and see them as a human readable output on the command-line, or to save them into another plain text or FITS table. * Menu: * Fits:: View and manipulate extensions and keywords. * ConvertType:: Convert data to various formats. * Table:: Read and Write FITS tables to plain text. * Query:: Import data from external databases.  File: gnuastro.info, Node: Fits, Next: ConvertType, Prev: Data containers, Up: Data containers 5.1 Fits ======== The "Flexible Image Transport System", or FITS, is by far the most common data container format in astronomy and in constant use since the 1970s. Archiving (future usage, simplicity) has been one of the primary design principles of this format. In the last few decades it has proved so useful and robust that the Vatican Library has also chosen FITS for its "long-term digital preservation" project(1). Although the full name of the standard invokes the idea that it is only for images, it also contains complete and robust features for tables. It started off in the 1970s and was formally published as a standard in 1981, it was adopted by the International Astronomical Union (IAU) in 1982 and an IAU working group to maintain its future was defined in 1988. The FITS 2.0 and 3.0 standards were approved in 2000 and 2008 respectively, and the 4.0 draft has also been released recently, please see the FITS standard document web page (https://fits.gsfc.nasa.gov/fits_standard.html) for the full text of all versions. Also see the FITS 3.0 standard paper (https://doi.org/10.1051/0004-6361/201015362) for a nice introduction and history along with the full standard. Many common image formats, for example, a JPEG, only have one image/dataset per file, however one great advantage of the FITS standard is that it allows you to keep multiple datasets (images or tables along with their separate meta-data) in one file. In the FITS standard, each data + metadata is known as an extension, or more formally a header data unit or HDU. The HDUs in a file can be completely independent: you can have multiple images of different dimensions/sizes or tables as separate extensions in one file. However, while the standard does not impose any constraints on the relation between the datasets, it is strongly encouraged to group data that are contextually related with each other in one file. For example, an image and the table/catalog of objects and their measured properties in that image. Other examples can be images of one patch of sky in different colors (filters), or one raw telescope image along with its calibration data (tables or images). As discussed above, the extensions in a FITS file can be completely independent. To keep some information (meta-data) about the group of extensions in the FITS file, the community has adopted the following convention: put no data in the first extension, so it is just meta-data. This extension can thus be used to store Meta-data regarding the whole file (grouping of extensions). Subsequent extensions may contain data along with their own separate meta-data. All of Gnuastro's programs also follow this convention: the main output dataset(s) are placed in the second (or later) extension(s). The first extension contains no data the program's configuration (input file name, along with all its option values) are stored as its meta-data, see *note Output FITS files::. The meta-data contain information about the data, for example, which region of the sky an image corresponds to, the units of the data, what telescope, camera, and filter the data were taken with, it observation date, or the software that produced it and its configuration. Without the meta-data, the raw dataset is practically just a collection of numbers and really hard to understand, or connect with the real world (other datasets). It is thus strongly encouraged to supplement your data (at any level of processing) with as much meta-data about your processing/science as possible. The meta-data of a FITS file is in ASCII format, which can be easily viewed or edited with a text editor or on the command-line. Each meta-data element (known as a keyword generally) is composed of a name, value, units and comments (the last two are optional). For example, below you can see three FITS meta-data keywords for specifying the world coordinate system (WCS, or its location in the sky) of a dataset: LATPOLE = -27.805089 / [deg] Native latitude of celestial pole RADESYS = 'FK5' / Equatorial coordinate system EQUINOX = 2000.0 / [yr] Equinox of equatorial coordinates However, there are some limitations which discourage viewing/editing the keywords with text editors. For example, there is a fixed length of 80 characters for each keyword (its name, value, units and comments) and there are no new-line characters, so on a text editor all the keywords are seen in one line. Also, the meta-data keywords are immediately followed by the data which are commonly in binary format and will show up as strange looking characters on a text editor, and significantly slowing down the processor. Gnuastro's Fits program was designed to allow easy manipulation of FITS extensions and meta-data keywords on the command-line while conforming fully with the FITS standard. For example, you can copy or cut (copy and remove) HDUs/extensions from one FITS file to another, or completely delete them. It also has features to delete, add, or edit meta-data keywords within one HDU. * Menu: * Invoking astfits:: Arguments and options to Header. ---------- Footnotes ---------- (1) <https://www.vaticanlibrary.va/home.php?pag=progettodigit>  File: gnuastro.info, Node: Invoking astfits, Prev: Fits, Up: Fits 5.1.1 Invoking Fits ------------------- Fits can print or manipulate the FITS file HDUs (extensions), meta-data keywords in a given HDU. The executable name is ‘astfits’ with the following general template $ astfits [OPTION...] ASTRdata One line examples: ## View general information about every extension: $ astfits image.fits ## Print the header keywords in the second HDU (counting from 0): $ astfits image.fits -h1 ## Only print header keywords that contain `NAXIS': $ astfits image.fits -h1 | grep NAXIS ## Only print the WCS standard PC matrix elements $ astfits image.fits -h1 | grep 'PC._.' ## Copy a HDU from input.fits to out.fits: $ astfits input.fits --copy=hdu-name --output=out.fits ## Update the OLDKEY keyword value to 153.034: $ astfits --update=OLDKEY,153.034,"Old keyword comment" ## Delete one COMMENT keyword and add a new one: $ astfits --delete=COMMENT --comment="Anything you like ;-)." ## Write two new keywords with different values and comments: $ astfits --write=MYKEY1,20.00,"An example keyword" --write=MYKEY2,fd ## Inspect individual pixel area taken based on its WCS (in degree^2). ## Then convert the area to arcsec^2 with the Arithmetic program. $ astfits input.fits --pixelareaonwcs -o pixarea.fits $ astarithmetic pixarea.fits 3600 3600 x x -o pixarea_arcsec2.fits When no action is requested (and only a file name is given), Fits will print a list of information about the extension(s) in the file. This information includes the HDU number, HDU name (‘EXTNAME’ keyword), type of data (see *note Numeric data types::, and the number of data elements it contains (size along each dimension for images and table rows and columns). Optionally, a comment column is printed for special situations (like a 2D HEALPix grid that is usually stored as a 1D dataset/table). You can use this to get a general idea of the contents of the FITS file and what HDU to use for further processing, either with the Fits program or any other Gnuastro program. Here is one example of information about a FITS file with four extensions: the first extension has no data, it is a purely meta-data HDU (commonly used to keep meta-data about the whole file, or grouping of extensions, see *note Fits::). The second extension is an image with name ‘IMAGE’ and single precision floating point type (‘float32’, see *note Numeric data types::), it has 4287 pixels along its first (horizontal) axis and 4286 pixels along its second (vertical) axis. The third extension is also an image with name ‘MASK’. It is in 2-byte integer format (‘int16’) which is commonly used to keep information about pixels (for example, to identify which ones were saturated, or which ones had cosmic rays and so on), note how it has the same size as the ‘IMAGE’ extension. The third extension is a binary table called ‘CATALOG’ which has 12371 rows and 5 columns (it probably contains information about the sources in the image). GNU Astronomy Utilities X.X Run on Day Month DD HH:MM:SS YYYY ----- HDU (extension) information: `image.fits'. Column 1: Index (counting from 0). Column 2: Name (`EXTNAME' in FITS standard). Column 3: Image data type or `table' format (ASCII or binary). Column 4: Size of data in HDU. ----- 0 n/a uint8 0 1 IMAGE float32 4287x4286 2 MASK int16 4287x4286 3 CATALOG table_binary 12371x5 If a specific HDU is identified on the command-line with the ‘--hdu’ (or ‘-h’ option) and no operation requested, then the full list of header keywords in that HDU will be printed (as if the ‘--printallkeys’ was called, see below). It is important to remember that this only occurs when ‘--hdu’ is given on the command-line. The ‘--hdu’ value given in a configuration file will only be used when a specific operation on keywords requested. Therefore as described in the paragraphs above, when no explicit call to the ‘--hdu’ option is made on the command-line and no operation is requested (on the command-line or configuration files), the basic information of each HDU/extension is printed. The operating mode and input/output options to Fits are similar to the other programs and fully described in *note Common options::. The options particular to Fits can be divided into three groups: 1) those related to modifying HDUs or extensions (see *note HDU information and manipulation::), and 2) those related to viewing/modifying meta-data keywords (see *note Keyword inspection and manipulation::). 3) those related to creating meta-images where each pixel shows values for a specific property of the image (see *note Pixel information images::). These three classes of options cannot be called together in one run: you can either work on the extensions, meta-data keywords in any instance of Fits, or create meta-images where each pixel shows a particular information about the image itself. * Menu: * HDU information and manipulation:: Learn about the HDUs and move them. * Keyword inspection and manipulation:: Manipulate metadata keywords in a HDU. * Pixel information images:: Pixel values contain information on the pixels.  File: gnuastro.info, Node: HDU information and manipulation, Next: Keyword inspection and manipulation, Prev: Invoking astfits, Up: Invoking astfits 5.1.1.1 HDU information and manipulation ........................................ Each FITS file header data unit, or HDU (also known as an extension) is an independent dataset (data + meta-data). Multiple HDUs can be stored in one FITS file, see *note Fits::. The general HDU-related options to the Fits program are listed below as two general classes: the first group below focus on HDU information while the latter focus on manipulating (moving or deleting) the HDUs. The options below print information about the given HDU on the command-line. Thus they cannot be called together in one command (each has its own independent output). ‘-n’ ‘--numhdus’ Print the number of extensions/HDUs in the given file. Note that this option must be called alone and will only print a single number. It is thus useful in scripts, for example, when you need to do check the number of extensions in a FITS file. For a complete list of basic meta-data on the extensions in a FITS file, do not use any of the options in this section or in *note Keyword inspection and manipulation::. For more, see *note Invoking astfits::. ‘--hastablehdu’ Print ‘1’ (on standard output) if at least one table HDU (ASCII or binary) exists in the FITS file. Otherwise (when no table HDU exists in the file), print ‘0’. ‘--listtablehdus’ Print the names or numbers (when a name does not exist, counting from zero) of HDUs that contain a table (ASCII or Binary) on standard output, one per line. Otherwise (when no table HDU exists in the file) nothing will be printed. ‘--hasimagehdu’ Print ‘1’ (on standard output) if at least one image HDU exists in the FITS file. Otherwise (when no image HDU exists in the file), print ‘0’. In the FITS standard, any array with any dimensions is called an "image", therefore this option includes 1, 3 and 4 dimensional arrays too. However, an image HDU with zero dimensions (which is usually the first extension and only contains metadata) is not counted here. ‘--listimagehdus’ Print the names or numbers (when a name does not exist, counting from zero) of HDUs that contain an image on standard output, one per line. Otherwise (when no image HDU exists in the file) nothing will be printed. In the FITS standard, any array with any dimensions is called an "image", therefore this option includes 1, 3 and 4 dimensional arrays too. However, an image HDU with zero dimensions (which is usually the first extension and only contains metadata) is not counted here. ‘--listallhdus’ Print the names or numbers (when a name does not exist, counting from zero) of all HDUs within the input file on the standard output, one per line. ‘--pixelscale’ Print the HDU's pixel-scale (change in world coordinate for one pixel along each dimension) and pixel area or voxel volume. Without the ‘--quiet’ option, the output of ‘--pixelscale’ has multiple lines and explanations, thus being more human-friendly. It prints the file/HDU name, number of dimensions, and the units along with the actual pixel scales. Also, when any of the units are in degrees, the pixel scales and area/volume are also printed in units of arc-seconds. For 3D datasets, the pixel area (on each 2D slice of the 3D cube) is printed as well as the voxel volume. If you only want the pixel area of a 2D image in units of arcsec$^2$ you can use ‘--pixelareaarcsec2’ described below. However, in scripts (that are to be run automatically), this human-friendly format is annoying, so when called with the ‘--quiet’ option, only the pixel-scale value(s) along each dimension is(are) printed in one line. These numbers are followed by the pixel area (in the raw WCS units). For 3D datasets, this will be area on each 2D slice. Finally, for 3D datasets, a final number (the voxel volume) is printed. As a summary, in ‘--quiet’ mode, for 2D datasets three numbers are printed and for 3D datasets, 5 numbers are printed. If the dataset has more than 3 dimensions, only the pixel-scale values are printed (no area or volume will be printed). ‘--pixelareaarcsec2’ Print the HDU's pixel area in units of arcsec$^2$. This option only works on 2D images, that have WCS coordinates in units of degrees. For lower-level information about the pixel scale in each dimension, see ‘--pixelscale’ (described above). ‘--skycoverage’ Print the rectangular area (or 3D cube) covered by the given image/datacube HDU over the Sky in the WCS units. The covered area is reported in two ways: 1) the center and full width in each dimension, 2) the minimum and maximum sky coordinates in each dimension. This is option is thus useful when you want to get a general feeling of a new image/dataset, or prepare the inputs to query external databases in the region of the image (for example, with *note Query::). If run without the ‘--quiet’ option, the values are given with a human-friendly description. For example, here is the output of this option on an image taken near the star Castor: $ astfits castor.fits --skycoverage Input file: castor.fits (hdu: 1) Sky coverage by center and (full) width: Center: 113.9149075 31.93759664 Width: 2.41762045 2.67945253 Sky coverage by range along dimensions: RA 112.7235592 115.1411797 DEC 30.59262123 33.27207376 With the ‘--quiet’ option, the values are more machine-friendly (easy to parse). It has two lines, where the first line contains the center/width values and the second line shows the coordinate ranges in each dimension. $ astfits castor.fits --skycoverage --quiet 113.9149075 31.93759664 2.41762045 2.67945253 112.7235592 115.1411797 30.59262123 33.27207376 Note that this is a simple rectangle (cube in 3D) definition, so if the image is rotated in relation to the celestial coordinates a general polygon is necessary to exactly describe the coverage. Hence when there is rotation, the reported area will be larger than the actual area containing data, you can visually see the area with the ‘--pixelareaonwcs’ option of *note Fits::. Currently this option only supports images that are less than 180 degrees in width (which is usually the case!). This requirement has been necessary to account for images that cross the RA=0 hour circle on the sky. Please get in touch with us at <mailto:bug-gnuastro@gnu.org> if you have an image that is larger than 180 degrees so we try to find a solution based on need. ‘--datasum’ Calculate and print the given HDU's "datasum" to stdout. The given HDU is specified with the ‘--hdu’ (or ‘-h’) option. This number is calculated by parsing all the bytes of the given HDU's data records (excluding keywords). This option ignores any possibly existing ‘DATASUM’ keyword in the HDU. For more on ‘DATASUM’ in the FITS standard, see *note Keyword inspection and manipulation:: (under the ‘checksum’ component of ‘--write’). You can use this option to confirm that the data in two different HDUs (possibly with different keywords) is identical. Its advantage over ‘--write=datasum’ (which writes the ‘DATASUM’ keyword into the given HDU) is that it does not require write permissions. ‘--datasum-encoded’ Similar to ‘--datasum’, except that the output will be an encoded string of numbers and small-caps alphabetic characters. This is the same encoding algorithm that is used for the ‘CHECKSUM’ keyword, but applied to the value of the ‘DATASUM’ result. In some scenarios, this string can be more useful than the raw integer. The following options manipulate (move/delete) the HDUs in one FITS file or to another FITS file. These options may be called multiple times in one run. If so, the extensions will be copied from the input FITS file to the output FITS file in the given order (on the command-line and also in configuration files, see *note Configuration file precedence::). If the separate classes are called together in one run of Fits, then first ‘--copy’ is run (on all specified HDUs), followed by ‘--cut’ (again on all specified HDUs), and then ‘--remove’ (on all specified HDUs). The ‘--copy’ and ‘--cut’ options need an output FITS file (specified with the ‘--output’ option). If the output file exists, then the specified HDU will be copied following the last extension of the output file (the existing HDUs in it will be untouched). Thus, after Fits finishes, the copied HDU will be the last HDU of the output file. If no output file name is given, then automatic output will be used to store the HDUs given to this option (see *note Automatic output::). ‘-C STR’ ‘--copy=STR’ Copy the specified extension into the output file, see explanations above. ‘-k STR’ ‘--cut=STR’ Cut (copy to output, remove from input) the specified extension into the output file, see explanations above. ‘-R STR’ ‘--remove=STR’ Remove the specified HDU from the input file. The first (zero-th) HDU cannot be removed with this option. Consider using ‘--copy’ or ‘--cut’ in combination with ‘primaryimghdu’ to not have an empty zero-th HDU. From CFITSIO: "In the case of deleting the primary array (the first HDU in the file) then [it] will be replaced by a null primary array containing the minimum set of required keywords and no data.". So in practice, any existing data (array) and meta-data in the first extension will be removed, but the number of extensions in the file will not change. This is because of the unique position the first FITS extension has in the FITS standard (for example, it cannot be used to store tables). ‘--primaryimghdu’ Copy or cut an image HDU to the zero-th HDU/extension a file that does not yet exist. This option is thus irrelevant if the output file already exists or the copied/cut extension is a FITS table. For example, with the commands below, first we make sure that ‘out.fits’ does not exist, then we copy the first extension of ‘in.fits’ to the zero-th extension of ‘out.fits’. $ rm -f out.fits $ astfits in.fits --copy=1 --primaryimghdu --output=out.fits If we had not used ‘--primaryimghdu’, then the zero-th extension of ‘out.fits’ would have no data, and its second extension would host the copied image (just like any other output of Gnuastro).  File: gnuastro.info, Node: Keyword inspection and manipulation, Next: Pixel information images, Prev: HDU information and manipulation, Up: Invoking astfits 5.1.1.2 Keyword inspection and manipulation ........................................... The meta-data in each header data unit, or HDU (also known as extension, see *note Fits::) is stored as "keyword"s. Each keyword consists of a name, value, unit, and comments. The Fits program (see *note Fits::) options related to viewing and manipulating keywords in a FITS HDU are described below. First, let's review the ‘--keyvalue’ option which should be called separately from the rest of the options described in this section. Also, unlike the rest of the options in this section, with ‘--keyvalue’, you can give more than one input file. ‘-l STR[,STR[,...]’ ‘--keyvalue=STR[,STR[,...]’ Only print the value of the requested keyword(s): the ‘STR’s. ‘--keyvalue’ can be called multiple times, and each call can contain multiple comma-separated keywords. If more than one file is given, this option uses the same HDU/extension for all of them (value to ‘--hdu’). For example, you can get the number of dimensions of the three FITS files in the running directory, as well as the length along each dimension, with this command: $ astfits *.fits --keyvalue=NAXIS,NAXIS1 --keyvalue=NAXIS2 image-a.fits 2 774 672 image-b.fits 2 774 672 image-c.fits 2 387 336 If only one input is given, and the ‘--quiet’ option is activated, the file name is not printed on the first column, only the values of the requested keywords. $ astfits image-a.fits --keyvalue=NAXIS,NAXIS1 \ --keyvalue=NAXIS2 --quiet 2 774 672 *Argument list too long:* if the list of input files are too long, the shell is going to complain with the ‘Argument list too long’ error! To avoid this problem, you can put the list of files in a plain-text file and give that plain-text file to the Fits program through the ‘--arguments’ option discussed below. The output is internally stored (and finally printed) as a table (with one column per keyword). Therefore just like the Table program, you can use ‘--colinfoinstdout’ to print the metadata like the example below (also see *note Invoking asttable::). The keyword metadata (comments and units) are extracted from the comments and units of the keyword in the input files (first file that has a comment or unit). Hence if the keyword does not have units or comments in any of the input files, they will be empty. For more on Gnuastro's plain-text metadata format, see *note Gnuastro text table format::. $ astfits *.fits --keyvalue=NAXIS,NAXIS1,NAXIS2 \ --colinfoinstdout # Column 1: FILENAME [name,str10,] Name of input file. # Column 2: NAXIS [ ,u8 ,] number of data axes # Column 3: NAXIS1 [ ,u16 ,] length of data axis 1 # Column 4: NAXIS2 [ ,u16 ,] length of data axis 2 image-a.fits 2 774 672 image-b.fits 2 774 672 image-c.fits 2 387 336 Another advantage of a table output is that you can directly write the table to a file. For example, if you add ‘--output=fileinfo.fits’, the information above will be printed into a FITS table. You can also pipe it into *note Table:: to select files based on certain properties, to sort them based on another property, or any other operation that can be done with Table (including *note Column arithmetic::). For example, with the command below, you can select all the files that have a size larger than 500 pixels in both dimensions. $ astfits *.fits --keyvalue=NAXIS,NAXIS1,NAXIS2 \ --colinfoinstdout \ | asttable --range=NAXIS1,500,inf \ --range=NAXIS2,500,inf -cFILENAME image-a.fits image-b.fits Note that ‘--colinfoinstdout’ is necessary to use column names when piping to other programs (like ‘asttable’ above). Also, with the ‘-cFILENAME’ option, we are asking Table to only print the final file names (we do not need the sizes any more). The commands with multiple files above used ‘*.fits’, which is only useful when all your FITS files are in the same directory. However, in many cases, your FITS files will be scattered in multiple sub-directories of a certain top-level directory, or you may only want those with more particular file name patterns. A more powerful way to list the input files to ‘--keyvalue’ is to use the ‘find’ program in Unix-like operating systems. For example, with the command below you can search all the FITS files in all the sub-directories of ‘/TOP/DIR’. astfits $(find /TOP/DIR/ -name "*.fits") --keyvalue=NAXIS2 ‘--arguments=STR’ A plain-text file containing the list of input files that will be used in ‘--keyvalue’. Each word (group of characters separated by SPACE or new-line) is assumed to be the name of the separate input file. This option is only relevant when no input files are given as arguments on the command-line: if any arguments are given, this option is ignored. This is necessary when the list of input files are very long; causing the shell to abort with an ‘Argument list too long’ error. In such cases, you can put the list into a plain-text file and use this option like below: $ ls $(path)/*.fits > list.txt $ astfits --arguments=list.txt --keyvalue=NAXIS1 ‘-O’ ‘--colinfoinstdout’ Print column information (or metadata) above the column values when writing keyword values to standard output with ‘--keyvalue’. You can read this option as column-information-in-standard-output. Below we will discuss the options that can be used to manipulate keywords. To see the full list of keywords in a FITS HDU, you can use the ‘--printallkeys’ option. If any of the keyword modification options below are requested (for example, ‘--update’), the headers of the input file/HDU will be changed first, then printed. Keyword modification is done within the input file. Therefore, if you want to keep the original FITS file or HDU intact, it is easiest to create a copy of the file/HDU first and then run Fits on that (for copying a HDU to another file, see *note HDU information and manipulation::. In the FITS standard, keywords are always uppercase. So case does not matter in the input or output keyword names you specify. *‘CHECKSUM’ automatically updated, when present:* the keyword modification options will change the contents of the HDU. Therefore, if a ‘CHECKSUM’ is present in the HDU, after all the keyword modification options have been complete, Fits will also update ‘CHECKSUM’ before closing the file. Most of the options can accept multiple instances in one command. For example, you can add multiple keywords to delete by calling ‘--delete’ multiple times, since repeated keywords are allowed, you can even delete the same keyword multiple times. The action of such options will start from the top most keyword. The precedence of operations are described below. Note that while the order within each class of actions is preserved, the order of individual actions is not. So irrespective of what order you called ‘--delete’ and ‘--update’. First, all the delete operations are going to take effect then the update operations. 1. ‘--delete’ 2. ‘--rename’ 3. ‘--update’ 4. ‘--write’ 5. ‘--asis’ 6. ‘--history’ 7. ‘--comment’ 8. ‘--date’ 9. ‘--printallkeys’ 10. ‘--verify’ 11. ‘--copykeys’ All possible syntax errors will be reported before the keywords are actually written. FITS errors during any of these actions will be reported, but Fits will not stop until all the operations are complete. If ‘--quitonerror’ is called, then Fits will immediately stop upon the first error. If you want to inspect only a certain set of header keywords, it is easiest to pipe the output of the Fits program to GNU Grep. Grep is a very powerful and advanced tool to search strings which is precisely made for such situations. for example, if you only want to check the size of an image FITS HDU, you can run: $ astfits input.fits | grep NAXIS *FITS STANDARD KEYWORDS:* Some header keywords are necessary for later operations on a FITS file, for example, BITPIX or NAXIS, see the FITS standard for their full list. If you modify (for example, remove or rename) such keywords, the FITS file extension might not be usable any more. Also be careful for the world coordinate system keywords, if you modify or change their values, any future world coordinate system (like RA and Dec) measurements on the image will also change. The keyword related options to the Fits program are fully described below. ‘-d STR’ ‘--delete=STR’ Delete one instance of the ‘STR’ keyword from the FITS header. Multiple instances of ‘--delete’ can be given (possibly even for the same keyword, when its repeated in the meta-data). All keywords given will be removed from the headers in the same given order. If the keyword does not exist, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with ‘--quitonerror’. ‘-r STR,STR’ ‘--rename=STR,STR’ Rename a keyword to a new value (for example, ‘--rename=OLDNAME,NEWNAME’. ‘STR’ contains both the existing and new names, which should be separated by either a comma (<,>) or a space character. Note that if you use a space character, you have to put the value to this option within double quotation marks (<">) so the space character is not interpreted as an option separator. Multiple instances of ‘--rename’ can be given in one command. The keywords will be renamed in the specified order. If the keyword does not exist, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with ‘--quitonerror’. ‘-u STR’ ‘--update=STR’ Update a keyword, its value, its comments and its units in the format described below. If there are multiple instances of the keyword in the header, they will be changed from top to bottom (with multiple ‘--update’ options). The format of the values to this option can best be specified with an example: --update=KEYWORD,value,"comments for this keyword",unit If there is a writing error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with ‘--quitonerror’. The value can be any numerical or string value(1). Other than the ‘KEYWORD’, all the other values are optional. To leave a given token empty, follow the preceding comma (<,>) immediately with the next. If any space character is present around the commas, it will be considered part of the respective token. So if more than one token has space characters within it, the safest method to specify a value to this option is to put double quotation marks around each individual token that needs it. Note that without double quotation marks, space characters will be seen as option separators and can lead to undefined behavior. ‘-w STR’ ‘--write=STR’ Write a keyword to the header. For the possible value input formats, comments and units for the keyword, see the ‘--update’ option above. The special names (first string) below will cause a special behavior: ‘/’ Write a "title" to the list of keywords. A title consists of one blank line and another which is blank for several spaces and starts with a slash (</>). The second string given to this option is the "title" or string printed after the slash. For example, with the command below you can add a "title" of 'My keywords' after the existing keywords and add the subsequent ‘K1’ and ‘K2’ keywords under it (note that keyword names are not case sensitive). $ astfits test.fits -h1 --write=/,"My keywords" \ --write=k1,1.23,"My first keyword" \ --write=k2,4.56,"My second keyword" $ astfits test.fits -h1 [[[ ... truncated ... ]]] / My keywords K1 = 1.23 / My first keyword K2 = 4.56 / My second keyword END Adding a "title" before each contextually separate group of header keywords greatly helps in readability and visual inspection of the keywords. So generally, when you want to add new FITS keywords, it is good practice to also add a title before them. The reason you need to use </> as the keyword name for setting a title is that </> is the first non-white character. The title(s) is(are) written into the FITS with the same order that ‘--write’ is called. Therefore in one run of the Fits program, you can specify many different titles (with their own keywords under them). For example, the command below that builds on the previous example and adds another group of keywords named ‘A1’ and ‘A2’. $ astfits test.fits -h1 --write=/,"My keywords" \ --write=k1,1.23,"My first keyword" \ --write=k2,4.56,"My second keyword" \ --write=/,"My second group of keywords" \ --write=a1,7.89,"First keyword" \ --write=a2,0.12,"Second keyword" ‘checksum’ When nothing is given afterwards, the header integrity keywords ‘DATASUM’ and ‘CHECKSUM’ will be calculated and written/updated. The calculation and writing is done fully by CFITSIO, therefore they comply with the FITS standard 4.0(2) that defines these keywords (its Appendix J). If a value is given (e.g., ‘--write=checksum,MyOwnCheckSum’), then CFITSIO will not be called to calculate these two keywords and the value (as well as possible comment and unit) will be written just like any other keyword. This is generally not recommended since ‘CHECKSUM’ is a reserved FITS standard keyword. If you want to calculate the checksum with another hashing standard manually and write it into the header, it is recommended to use another keyword name. In the FITS standard, ‘CHECKSUM’ depends on the HDU's data _and_ header keywords, it will therefore not be valid if you make any further changes to the header after writing the ‘CHECKSUM’ keyword. This includes any further keyword modification options in the same call to the Fits program. However, ‘DATASUM’ only depends on the data section of the HDU/extension, so it is not changed when you add, remove or update the header keywords. Therefore, it is recommended to write these keywords as the last keywords that are written/modified in the extension. You can use the ‘--verify’ option (described below) to verify the values of these two keywords. ‘datasum’ Similar to ‘checksum’, but only write the ‘DATASUM’ keyword (that does not depend on the header keywords, only the data). ‘-a STR’ ‘--asis=STR’ Write the given ‘STR’ _exactly_ as it is, into the given FITS file header with no modifications. If the contents of ‘STR’ does not conform to the FITS standard for keywords, then it may (most probably: it will!) corrupt your file and you may not be able to open it any more. So please be *very careful* with this option (its your responsibility to make sure that the string conforms with the FITS standard for keywords). If you want to define the keyword from scratch, it is best to use the ‘--write’ option (see below) and let CFITSIO worry about complying with the FITS standard. Also, you want to copy keywords from one FITS file to another, you can use ‘--copykeys’ that is described below. Through these high-level instances, you don't have to worry about low-level issues. One common usage of ‘--asis’ occurs when you are given the contents of a FITS header (many keywords) as a plain-text file (so the format of each keyword line conforms with the FITS standard, just the file is plain-text, and you have one keyword per line when you open it in a plain-text editor). In that case, Gnuastro's Fits program won't be able to parse it (it doesn't conform to the FITS standard, which doesn't have a new-line character!). With the command below, you can insert those headers in ‘headers.txt’ into ‘img.fits’ (its HDU number 1, the default; you can change the HDU to modify with ‘--hdu’). $ cat headers.txt \ | while read line; do \ astfits img.fits --asis="$line"; \ done *Don't forget a title:* Since the newly added headers in the example above weren't originally in the file, they are probably some form of high-level metadata. The raw example above will just append the new keywords after the last one. Making it hard for human readability (its not clear what this new group of keywords signify, where they start, and where this group of keywords end). To help the human readability of the header, add a title for this group of keywords before writing them. To do that, run the following command before the ‘cat ...’ command above (replace ‘Imported keys’ with any title that best describes this group of new keywords based on their context): $ astfits img.fits --write=/,"Imported keys" ‘-H STR’ ‘--history STR’ Add a ‘HISTORY’ keyword to the header with the given value. A new ‘HISTORY’ keyword will be created for every instance of this option. If the string given to this option is longer than 70 characters, it will be separated into multiple keyword cards. If there is an error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with ‘--quitonerror’. ‘-c STR’ ‘--comment STR’ Add a ‘COMMENT’ keyword to the header with the given value. Similar to the explanation for ‘--history’ above. ‘-t’ ‘--date’ Put the current date and time in the header. If the ‘DATE’ keyword already exists in the header, it will be updated. If there is a writing error, Fits will give a warning and return with a non-zero value, but will not stop. To stop as soon as an error occurs, run with ‘--quitonerror’. ‘-p’ ‘--printallkeys’ Print the full metadata (keywords, values, units and comments) in the specified FITS extension (HDU). If this option is called along with any of the other keyword editing commands, as described above, all other editing commands take precedence to this. Therefore, it will print the final keywords after all the editing has been done. ‘--printkeynames’ Print only the keyword names of the specified FITS extension (HDU), one line per name. This option must be called alone. ‘-v’ ‘--verify’ Verify the ‘DATASUM’ and ‘CHECKSUM’ data integrity keywords of the FITS standard. See the description under the ‘checksum’ (under ‘--write’, above) for more on these keywords. This option will print ‘Verified’ for both keywords if they can be verified. Otherwise, if they do not exist in the given HDU/extension, it will print ‘NOT-PRESENT’, and if they cannot be verified it will print ‘INCORRECT’. In the latter case (when the keyword values exist but cannot be verified), the Fits program will also return with a failure. By default this function will also print a short description of the ‘DATASUM’ AND ‘CHECKSUM’ keywords. You can suppress this extra information with ‘--quiet’ option. ‘--copykeys=INT:INT/STR,STR[,STR]’ Copy the desired set of the input's keyword records, to the to the output (specified with the ‘--output’ and ‘--outhdu’ for the filename and HDU/extension respectively). The keywords to copy can be given either as a range (in the format of ‘INT:INT’, inclusive) or a list of keyword names as comma-separated strings (‘STR,STR’), the list can have any number of keyword names. More details and examples of the two forms are given below: Range The given string to this option must be two integers separated by a colon (<:>). The first integer must be positive (counting of the keyword records starts from 1). The second integer may be negative (zero is not acceptable) or an integer larger than the first. A negative second integer means counting from the end. So ‘-1’ is the last copy-able keyword (not including the ‘END’ keyword). To see the header keywords of the input with a number before them, you can pipe the output of the Fits program (when it prints all the keywords in an extension) into the ‘cat’ program like below: $ astfits input.fits -h1 | cat -n List of names The given string to this option must be a comma separated list of keyword names. For example, see the command below: $ astfits input.fits -h1 --copykeys=KEY1,KEY2 \ --output=output.fits --outhdu=1 Please consider the notes below when copying keywords with names: • If the number of characters in the name is more than 8, CFITSIO will place a ‘HIERARCH’ before it. In this case simply give the name and do not give the ‘HIERARCH’ (which is a constant and not considered part of the keyword name). • If your keyword name is composed only of digits, do not give it as the first name given to ‘--copykeys’. Otherwise, it will be confused with the range format above. You can safely give an only-digit keyword name as the second, or third requested keywords. • If the keyword is repeated more than once in the header, currently only the first instance will be copied. In other words, even if you call ‘--copykeys’ multiple times with the same keyword name, its first instance will be copied. If you need to copy multiple instances of the same keyword, please get in touch with us at ‘bug-gnuastro@gnu.org’. ‘--outhdu’ The HDU/extension to write the output keywords of ‘--copykeys’. ‘-Q’ ‘--quitonerror’ Quit if any of the operations above are not successful. By default if an error occurs, Fits will warn the user of the faulty keyword and continue with the rest of actions. ‘-s STR’ ‘--datetosec STR’ Interpret the value of the given keyword in the FITS date format (most generally: ‘YYYY-MM-DDThh:mm:ss.ddd...’) and return the corresponding Unix epoch time (number of seconds that have passed since 00:00:00 Thursday, January 1st, 1970). The ‘Thh:mm:ss.ddd...’ section (specifying the time of day), and also the ‘.ddd...’ (specifying the fraction of a second) are optional. The value to this option must be the FITS keyword name that contains the requested date, for example, ‘--datetosec=DATE-OBS’. This option can also interpret the older FITS date format (‘DD/MM/YYThh:mm:ss.ddd...’) where only two characters are given to the year. In this case (following the GNU C Library), this option will make the following assumption: values 68 to 99 correspond to the years 1969 to 1999, and values 0 to 68 as the years 2000 to 2068. This is a very useful option for operations on the FITS date values, for example, sorting FITS files by their dates, or finding the time difference between two FITS files. The advantage of working with the Unix epoch time is that you do not have to worry about calendar details (for example, the number of days in different months, or leap years). ‘--wcscoordsys=STR’ Convert the coordinate system of the image's world coordinate system (WCS) to the given coordinate system (‘STR’) and write it into the file given to ‘--output’ (or an automatically named file if no ‘--output’ has been given). For example, with the command below, ‘img-eq.fits’ will have an identical dataset (pixel values) as ‘image.fits’. However, the WCS coordinate system of ‘img-eq.fits’ will be the equatorial coordinate system in the Julian calendar epoch 2000 (which is the most common epoch used today). Fits will automatically extract the current coordinate system of ‘image.fits’ and as long as it is one of the recognized coordinate systems listed below, it will do the conversion. $ astfits image.fits --wcscoordsys=eq-j2000 \ --output=img-eq.fits The currently recognized coordinate systems are listed below (the most common one today is ‘eq-j2000’): ‘eq-j2000’ 2000.0 (Julian-year) equatorial coordinates. This is also known as FK5 (short for "Fundamental Katalog No 5" which was the source of the star coordinates used to define it). This coordinate system is based on the motion of the Sun and has epochs when the mean equator was used (for example ‘eq-b1950’ below). Furthermore, the definition of year is different: either the Besselian year in 1950.0, or the Julian year in 2000. For more on their difference and links for further reading about epochs in astronomy, please see the description in Wikipedia (https://en.wikipedia.org/wiki/Epoch_(astronomy)). Because of these difficulties, the equatorial J2000.0 coordinate system has been deprecated by the IAU in favor of International Celestial Refernece System (ICRS) but is still used extensively. ICRS is defined based on extra-galactic quasars, so it does not depend on the dynamics of the solar system any more. But to enable historical continuity, ICRS has been defined to be equivalent to the equatorial J2000.0 within its accepted error bars of the latter (tens of milli-arcseconds). This justifies the reason that moving to ICRS has been relatively slow. ‘eq-b1950’ 1950.0 (Besselian-year) equatorial coordinates. ‘ec-j2000’ 2000.0 (Julian-year) ecliptic coordinates. ‘ec-b1950’ 1950.0 (Besselian-year) ecliptic coordinates. ‘galactic’ Galactic coordinates. ‘supergalactic’ Supergalactic coordinates. ‘--wcsdistortion=STR’ If the argument has a WCS distortion, the output (file given with the ‘--output’ option) will have the distortion given to this option (for example, ‘SIP’, ‘TPV’). The output will be a new file (with a copy of the image, and the new WCS), so if it already exists, the file will be delete (unless you use the ‘--dontdelete’ option, see *note Input output options::). With this option, the Fits program will read the minimal set of keywords from the input HDU and the HDU data. It will then write them into the file given to the ‘--output’ option but with a newly created set of WCS-related keywords corresponding to the desired distortion standard. If no ‘--output’ file is specified, an automatically generated output name will be used which is composed of the input's name but with the ‘-DDD.fits’ suffix, see *note Automatic output::. Where ‘DDD’ is the value given to this option (desired output distortion). Note that all possible conversions between all standards are not yet supported. If the requested conversion is not supported, an informative error message will be printed. If this happens, please let us know and we will try our best to add the respective conversions. For example, with the command below, you can be sure that if ‘in.fits’ has a distortion in its WCS, the distortion of ‘out.fits’ will be in the SIP standard. $ astfits in.fits --wcsdistortion=SIP --output=out.fits ---------- Footnotes ---------- (1) Some tricky situations arise with values like '‘87095e5’', if this was intended to be a number it will be kept in the header as ‘8709500000’ and there is no problem. But this can also be a shortened Git commit hash. In the latter case, it should be treated as a string and stored as it is written. Commit hashes are very important in keeping the history of a file during your research and such values might arise without you noticing them in your reproduction pipeline. One solution is to use ‘git describe’ instead of the short hash alone. A less recommended solution is to add a space after the commit hash and Fits will write the value as '‘87095e5 ’' in the header. If you later compare the strings on the shell, the space character will be ignored by the shell in the latter solution and there will be no problem. (2) <https://fits.gsfc.nasa.gov/standard40/fits_standard40aa-le.pdf>  File: gnuastro.info, Node: Pixel information images, Prev: Keyword inspection and manipulation, Up: Invoking astfits 5.1.1.3 Pixel information images ................................ In *note Keyword inspection and manipulation:: options like ‘--pixelscale’ were introduced for information on the pixels from the keywords. But that only provides a single value for all the pixels! This will not be sufficient in some scenarios; for example due to distortion, different regions of the image will have different pixel areas when projected onto the sky. The options in this section provide such "meta" images: images where the pixel values are information about the pixel itself. Such images can be useful in understanding the underlying pixel grid with the same tools that you study the astronomical objects within the image (like *note SAO DS9::). After all, nothing beats visual inspection with tools you are familiar with. ‘--pixelareaonwcs’ Create a meta-image where each pixel's value shows its area in the WCS units (usually degrees squared). The output is therefore the same size as the input. This option uses the same "pixel mixing" or "area resampling" concept that is described in *note Resampling:: (as part of the Warp program). Similar to Warp, its sampling can be tuned with the ‘--edgesampling’ that is described below. One scenario where this option becomes handy is when you are debugging aligned images using the Warp program (see *note Warp::). You may observe gradients after warping and can check if they caused by the distortion of the instrument or not. Such gradients can happen due to distortions because the detectors pixels are measuring photons from different areas on the sky (or the type of projection you're seeing). This effect is more pronounced in images covering larger portions of the sky, for instance, the TESS images(1). Here is an example usage of the ‘--pixelareaonwcs’ option: # Check the area each 'input.fits' pixel takes in sky $ astfits input.fits -h1 --pixelareaonwcs -o pixarea.fits # Convert each pixel's area to arcsec^2 $ astarithmetic pixarea.fits 3600 3600 x x \ --output=pixarea_arcsec2.fits # Compare area relative to the actual reported pixel scale $ pixarea=$(astfits input.fits --pixelscale -q \ | awk '{print $3}') $ astarithmetic pixarea.fits $pixarea / -o pixarea_rel.fits ‘--edgesampling=INT’ Extra sampling along the pixel edges for ‘--pixelareaonwcs’. The default value is 0, meaning that only the pixel vertices are used. Values greater than zero improve the accuracy in the expense of greater time and memory consumption. With that said, the default value of zero usually has a good precision unless the given image has extreme distortions that produce irregular pixel shapes. For more, see *note Align pixels with WCS considering distortions::). *Caution:* This option does not "oversample" the output image! Rather, it makes Warp use more points to calculate the _input_ pixel area. To oversample the output image, set a reasonable ‘--cdelt’ value. ---------- Footnotes ---------- (1) <https://www.nasa.gov/tess-transiting-exoplanet-survey-satellite>  File: gnuastro.info, Node: ConvertType, Next: Table, Prev: Fits, Up: Data containers 5.2 ConvertType =============== The FITS format used in astronomy was defined mainly for archiving, transmission, and processing. In other situations, the data might be useful in other formats. For example, when you are writing a paper or report, or if you are making slides for a talk, you cannot use a FITS image. Other image formats should be used. In other cases you might want your pixel values in a table format as plain text for input to other programs that do not recognize FITS. ConvertType is created for such situations. The various types will increase with future updates and based on need. The conversion is not only one way (from FITS to other formats), but two ways (except the EPS and PDF formats(1)). So you can also convert a JPEG image or text file into a FITS image. Basically, other than EPS/PDF, you can use any of the recognized formats as different color channel inputs to get any of the recognized outputs. Before explaining the options and arguments (in *note Invoking astconvertt::), we will start with a short discussion on the difference between raster and vector graphics in *note Raster and Vector graphics::. In ConvertType, vector graphics are used to add markers over your originally rasterized data, producing high quality images, ready to be used in your exciting papers. We will continue with a description of the recognized files types in *note Recognized file formats::, followed a short introduction to digital color in *note Color::. A tutorial on how to add markers over an image is then given in *note Marking objects for publication:: and we conclude with a LaTeX based solution to add coordinates over an image. * Menu: * Raster and Vector graphics:: Images coming from nature, and the abstract. * Recognized file formats:: Recognized file formats * Color:: Some explanations on color. * Annotations for figure in paper:: Adding coordinates or physical scale. * Invoking astconvertt:: Options and arguments to ConvertType. ---------- Footnotes ---------- (1) Because EPS and PDF are vector, not raster/pixelated formats  File: gnuastro.info, Node: Raster and Vector graphics, Next: Recognized file formats, Prev: ConvertType, Up: ConvertType 5.2.1 Raster and Vector graphics -------------------------------- Images that are produced by a hardware (for example, the camera in your phone, or the camera connected to a telescope) provide pixelated data. Such data are therefore stored in a Raster graphics (https://en.wikipedia.org/wiki/Raster_graphics) format which has discrete, independent, equally spaced data elements. For example, this is the format used FITS (see *note Fits::), JPEG, TIFF, PNG and other image formats. On the other hand, when something is generated by the computer (for example, a diagram, plot or even adding a cross over a camera image to highlight something there), there is no "observation" or connection with nature! Everything is abstract! For such things, it is much easier to draw a mathematical line (with infinite resolution). Therefore, no matter how much you zoom-in, it will never get pixelated. This is the realm of Vector graphics (https://en.wikipedia.org/wiki/Vector_graphics). If you open the Gnuastro manual in PDF format (https://www.gnu.org/software/gnuastro/manual/gnuastro.pdf) You can see such graphics in the Gnuastro manual, for example, in *note Circles and the complex plane:: or *note Distance on a 2D curved space::. The most common vector graphics format is PDF for document sharing or SVG for web-based applications. The pixels of a raster image can be shown as vector-based squares with different shades, so vector graphics can generally also support raster graphics. This is very useful when you want to add some graphics over an image to help your discussion (for example a $+$ over your object of interest). However, vector graphics is not optimized for rasterized data (which are usually also noisy!), and can either not display nicely, or result in much larger file volume (in bytes). Therefore, if it is not necessary to add any marks over a FITS image, for example, it may be better to store it in a rasterized format. The distinction between the vector and raster graphics is also the primary theme behind Gnuastro's logo, see *note Logo of Gnuastro::.  File: gnuastro.info, Node: Recognized file formats, Next: Color, Prev: Raster and Vector graphics, Up: ConvertType 5.2.2 Recognized file formats ----------------------------- The various standards and the file name extensions recognized by ConvertType are listed below. For a review on the difference between Raster and Vector graphics, see *note Raster and Vector graphics::. For a review on the concept of color and channels, see *note Color::. Currently, except for the FITS format, Gnuastro uses the file name's suffix to identify the format, so if the file's name does not end with one of the suffixes mentioned below, it will not be recognized. FITS or IMH Astronomical data are commonly stored in the FITS format (or the older data IRAF ‘.imh’ format), a list of file name suffixes which indicate that the file is in this format is given in *note Arguments::. FITS is a raster graphics format. Each image extension of a FITS file only has one value per pixel/element. Therefore, when used as input, each input FITS image contributes as one color channel. If you want multiple extensions in one FITS file for different color channels, you have to repeat the file name multiple times and use the ‘--hdu’, ‘--hdu2’, ‘--hdu3’ or ‘--hdu4’ options to specify the different extensions. JPEG The JPEG standard was created by the Joint photographic experts group. It is currently one of the most commonly used image formats. Its major advantage is the compression algorithm that is defined by the standard. Like the FITS standard, this is a raster graphics format, which means that it is pixelated. A JPEG file can have 1 (for gray-scale), 3 (for RGB) and 4 (for CMYK) color channels. If you only want to convert one JPEG image into other formats, there is no problem, however, if you want to use it in combination with other input files, make sure that the final number of color channels does not exceed four. If it does, then ConvertType will abort and notify you. The file name endings that are recognized as a JPEG file for input are: ‘.jpg’, ‘.JPG’, ‘.jpeg’, ‘.JPEG’, ‘.jpe’, ‘.jif’, ‘.jfif’ and ‘.jfi’. TIFF TIFF (or Tagged Image File Format) was originally designed as a common format for scanners in the early 90s and since then it has grown to become very general. In many aspects, the TIFF standard is similar to the FITS image standard: it can allow data of many types (see *note Numeric data types::), and also allows multiple images to be stored in a single file (like a FITS extension: each image in the file is called a 'directory' in the TIFF standard). However, unlike FITS, it can only store images, it has no constructs for tables. Also unlike FITS, each 'directory' of a TIFF file can have a multi-channel (e.g., RGB) image. Another (inconvenient) difference with the FITS standard is that keyword names are stored as numbers, not human-readable text. However, outside of astronomy, because of its support of different numeric data types, many fields use TIFF images for accurate (for example, 16-bit integer or floating point for example) imaging data. EPS The Encapsulated PostScript (EPS) format is essentially a one page PostScript file which has a specified size. Postscript is used to store a full document like this whole Gnuastro book. PostScript therefore also includes non-image data, for example, lines and texts. It is a fully functional programming language to describe a document. A PostScript file is a plain text file that can be edited like any program source with any plain-text editor. Therefore in ConvertType, EPS is only an output format and cannot be used as input. Contrary to the FITS or JPEG formats, PostScript is not a raster format, but is categorized as vector graphics. With these features in mind, you can see that when you are compiling a document with TeX or LaTeX, using an EPS file is much more low level than a JPEG and thus you have much greater control and therefore quality. Since it also includes vector graphic lines we also use such lines to make a thin border around the image to make its appearance in the document much better. Furthermore, through EPS, you can add marks over the image in many shapes and colors. No matter the resolution of the display or printer, these lines will always be clear and not pixelated. However, this can be done better with tools within TeX or LaTeX such as PGF/Tikz(1). If the final input image (possibly after all operations on the flux explained below) is a binary image or only has two colors of black and white (in segmentation maps for example), then PostScript has another great advantage compared to other formats. It allows for 1 bit pixels (pixels with a value of 0 or 1), this can decrease the output file size by 8 times. So if a gray-scale image is binary, ConvertType will exploit this property in the EPS and PDF (see below) outputs. The standard formats for an EPS file are ‘.eps’, ‘.EPS’, ‘.epsf’ and ‘.epsi’. The EPS outputs of ConvertType have the ‘.eps’ suffix. PDF The Portable Document Format (PDF) is currently the most common format for documents. It is a vector graphics format, allowing abstract constructs like marks or borders. The PDF format is based on Postscript, so it shares all the features mentioned above for EPS. To be able to display it is programmed content or print, a Postscript file needs to pass through a processor or compiler. A PDF file can be thought of as the processed output of the PostScript compiler. PostScript, EPS and PDF were created and are registered by Adobe Systems. As explained under EPS above, a PDF document is a static document description format, viewing its result is therefore much faster and more efficient than PostScript. To create a PDF output, ConvertType will make an EPS file and convert that to PDF using GPL Ghostscript. The suffixes recognized for a PDF file are: ‘.pdf’, ‘.PDF’. If GPL Ghostscript cannot be run on the PostScript file, The EPS will remain and a warning will be printed (see *note Optional dependencies::). ‘blank’ This is not actually a file type! But can be used to fill one color channel with a blank value. If this argument is given for any color channel, that channel will not be used in the output. Plain text The value of each pixel in a 2D image can be written as a 2D matrix in a plain-text file. Therefore, for the purpose of ConvertType, plain-text files are a single-channel raster graphics file format. Plain text files have the advantage that they can be viewed with any text editor or on the command-line. Most programs also support input as plain text files. As input, each plain text file is considered to contain one color channel. In ConvertType, the recognized extensions for plain text files are ‘.txt’ and ‘.dat’. As described in *note Invoking astconvertt::, if you just give these extensions, (and not a full filename) as output, then automatic output will be preformed to determine the final output name (see *note Automatic output::). Besides these, when the format of a file cannot be recognized from its name, ConvertType will fall back to plain text mode. So you can use any name (even without an extension) for a plain text input or output. Just note that when the suffix is not recognized, automatic output will not be preformed. The basic input/output on plain text images is very similar to how tables are read/written as described in *note Gnuastro text table format::. Simply put, the restrictions are very loose, and there is a convention to define a name, units, data type (see *note Numeric data types::), and comments for the data in a commented line. The only difference is that as a table, a text file can contain many datasets (columns), but as a 2D image, it can only contain one dataset. As a result, only one information comment line is necessary for a 2D image, and instead of the starting '‘# Column N’' (‘N’ is the column number), the information line for a 2D image must start with '‘# Image 1’'. When ConvertType is asked to output to plain text file, this information comment line is written before the image pixel values. When converting an image to plain text, consider the fact that if the image is large, the number of columns in each line will become very large, possibly making it very hard to open in some text editors. Standard output (command-line) This is very similar to the plain text output, but instead of creating a file to keep the printed values, they are printed on the command-line. This can be very useful when you want to redirect the results directly to another program in one command with no intermediate file. The only difference is that only the pixel values are printed (with no information comment line). To print to the standard output, set the output name to '‘stdout’'. ---------- Footnotes ---------- (1) <http://sourceforge.net/projects/pgf/>  File: gnuastro.info, Node: Color, Next: Annotations for figure in paper, Prev: Recognized file formats, Up: ConvertType 5.2.3 Color ----------- Color is generally defined after mixing various data "channels". The values for each channel usually come a filter that is placed in the optical path. Filters, only allow a certain window of the spectrum to pass (for example, the SDSS _r_ filter only allows light from about 5500 to 7000 Angstroms). In digital monitors or common digital cameras, a different set of filters are used: Red, Green and Blue (commonly known as RGB) that are more optimized to the eye's perception. On the other hand, when printing on paper, standard printers use the cyan, magenta, yellow and key (CMYK, key=black) color space. * Menu: * Pixel colors:: Multiple filters in each pixel. * Colormaps for single-channel pixels:: Better display of single-filter images. * Vector graphics colors::  File: gnuastro.info, Node: Pixel colors, Next: Colormaps for single-channel pixels, Prev: Color, Up: Color 5.2.3.1 Pixel colors .................... As discussed in *note Color::, for each displayed/printed pixel of a color image, the dataset/image has three or four values. To store/show the three values for each pixel, cameras and monitors allocate a certain fraction of each pixel's area to red, green and blue filters. These three filters are thus built into the hardware at the pixel level. However, because measurement accuracy is very important in scientific instruments, and we want to do measurements (take images) with various/custom filters (without having to order a new expensive detector!), scientific detectors use the full area of the pixel to store one value for it in a single/mono channel dataset. To make measurements in different filters, we just place a filter in the light path before the detector. Therefore, the FITS format that is used to store astronomical datasets is inherently a mono-channel format (see *note Recognized file formats:: or *note Fits::). When a subject has been imaged in multiple filters, you can feed each different filter into the red, green and blue channels of your monitor and obtain a false-colored visualization. The reason we say "false-color" (or pseudo color) is that generally, the three data channels you provide are not from the same Red, Green and Blue filters of your monitor! So the observed color on your monitor does not correspond the physical "color" that you would have seen if you looked at the object by eye. Nevertheless, it is good (and sometimes necessary) for visualization (of special features). In ConvertType, you can do this by giving each separate single-channel dataset (for example, in the FITS image format) as an argument (in the proper order), then asking for the output in a format that supports multi-channel datasets (for example, see the command below, or *note ConvertType input and output::). $ astconvertt r.fits g.fits b.fits --output=color.jpg  File: gnuastro.info, Node: Colormaps for single-channel pixels, Next: Vector graphics colors, Prev: Pixel colors, Up: Color 5.2.3.2 Colormaps for single-channel pixels ........................................... As discussed in *note Pixel colors::, color is not defined when a dataset/image contains a single value for each pixel. However, we interact with scientific datasets through monitors or printers. They allow multiple channels (independent values) per pixel and produce color with them (on monitors, this is usually with three channels: Red, Green and Blue). As a result, there is a lot of freedom in visualizing a single-channel dataset. The mapping of single-channel values to multi-channel colors is called called a "color map". Since more information can be put in multiple channels, this usually results in better visualizing the dynamic range of your single-channel data. In ConvertType, you can use the ‘--colormap’ option to choose between different mappings of mono-channel inputs, see *note Invoking astconvertt::. Below, we will review two of the basic color maps, please see the description of ‘--colormap’ in *note Invoking astconvertt:: for the full list. • The most basic colormap is shades of black (because of its strong contrast with white). This scheme is called Grayscale (https://en.wikipedia.org/wiki/Grayscale). But ultimately, the black is just one color, so with Grayscale, you are not using the full dynamic range of the three-channel monitor effectively. To help in visualization, more complex mappings can be defined. • A slightly more complex color map can be defined when you scale the values to a range of 0 to 360, and use as it as the "Hue" term of the Hue-Saturation-Value (https://en.wikipedia.org/wiki/HSL_and_HSV) (HSV) color space (while fixing the "Saturation" and "Value" terms). The increased usage of the monitor's 3-channel color space is indeed better, but the resulting images can be un-"natural" to the eye. Since grayscale is a commonly used mapping of single-valued datasets, we will continue with a closer look at how it is stored. One way to represent a gray-scale image in different color spaces is to use the same proportions of the primary colors in each pixel. This is the common way most FITS image viewers work: for each pixel, they fill all the channels with the single value. While this is necessary for displaying a dataset, there are downsides when storing/saving this type of grayscale visualization (for example, in a paper). • Three (for RGB) or four (for CMYK) values have to be stored for every pixel, this makes the output file very heavy (in terms of bytes). • If printing, the printing errors of each color channel can make the printed image slightly more blurred than it actually is. To solve both these problems when storing grayscale visualization, the best way is to save a single-channel dataset into the black channel of the CMYK color space. The JPEG standard is the only common standard that accepts CMYK color space. The JPEG and EPS standards set two sizes for the number of bits in each channel: 8-bit and 12-bit. The former is by far the most common and is what is used in ConvertType. Therefore, each channel should have values between 0 to 2^8-1=255. From this we see how each pixel in a gray-scale image is one byte (8 bits) long, in an RGB image, it is 3 bytes long and in CMYK it is 4 bytes long. But thanks to the JPEG compression algorithms, when all the pixels of one channel have the same value, that channel is compressed to one pixel. Therefore a Grayscale image and a CMYK image that has only the K-channel filled are approximately the same file size.  File: gnuastro.info, Node: Vector graphics colors, Prev: Colormaps for single-channel pixels, Up: Color 5.2.3.3 Vector graphics colors .............................. When creating vector graphics, ConvertType recognizes the extended web colors (https://en.wikipedia.org/wiki/Web_colors#Extended_colors) that are the result of merging the colors in the HTML 4.01, CSS 2.0, SVG 1.0 and CSS3 standards. They are all shown with their standard name in *note Figure 5.1: colornames. The names are not case sensitive so you can use them in any form (for example, ‘turquoise’ is the same as ‘Turquoise’ or ‘TURQUOISE’). On the command-line, you can also get the list of colors with the ‘--listcolors’ option to CovertType, like below. In particular, if your terminal is 24-bit or "true color", in the last column, you will see each color. This greatly helps in selecting the best color for our purpose easily on the command-line (without taking your hands off the keyboard and getting distracted). $ astconvertt --listcolors �[image src="gnuastro-figures/color-names.png" text="../gnuastro-figures//color-names.eps"�] Figure 5.1: Recognized color names in Gnuastro, shown with their numerical identifiers.  File: gnuastro.info, Node: Annotations for figure in paper, Next: Invoking astconvertt, Prev: Color, Up: ConvertType 5.2.4 Annotations for figure in paper ------------------------------------- To make a nice figure from your FITS images, it is important to show more than merely the raw image (converted to a printer friendly format like PDF or JPEG). Annotations (or visual metadata) over the raw image greatly help the readers clearly see your argument and put the image/result in a larger context. Examples include: • Coordinates (Right Ascension and Declination) on the edges of the image, so viewers of your paper or presentation slides can get a physical feeling of the field's sky coverage. • Thick line that has a fixed tangential size (for example, in kilo parsecs) at the redshift/distance of interest. • Contours over the image to show radio/X-ray emission, over an optical image for example. • Text, arrows, etc., over certain parts of the image. Because of the modular philosophy of Gnuastro, ConvertType is only focused on converting your FITS images to printer friendly formats like JPEG or PDF. But to present your results in a slide or paper, you will often need to annotate the raw JPEG or PDF with some of the features above. The good news is that there are many powerful plotting programs that you can use to add such annotations. As a result, there is no point in making a new one, specific to Gnuastro. In this section, we will demonstrate this using the very powerful PGFPlots(1) package of LaTeX. *Single script for easy running:* In this section we are reviewing the reason and details of every step which is good for educational purposes. But when you know the steps already, these separate code blocks can be annoying. Therefore the full script (except for the data download step) is available in *note Full script of annotations on figure::. PGFPlots uses the same LaTeX graphic engine that typesets your paper/slide. Therefore when you build your plots and figures using PGFPlots (and its underlying package PGF/TiKZ(2)) your plots will blend beautifully within your text: same fonts, same colors, same line properties, etc. Since most papers (and presentation slides(3)) are made with LaTeX, PGFPlots is therefore the best tool for those who use LaTeX to create documents. PGFPlots also does not need any extra dependencies beyond a basic/minimal TeX-live installation, so it is much more reliable than tools like Matplotlib in Python that have hundreds of fast-evolving dependencies(4). To demonstrate this, we will create a surface brightness image of a galaxy in the F160W filter of the ABYSS survey(5). In the code-block below, let's make a "build" directory to keep intermediate files and avoid populating the source. Afterwards, we will download the full image and crop out a 20 arcmin wide image around the galaxy with the commands below. You can run these commands in an empty directory. $ mkdir build $ wget http://cdsarc.u-strasbg.fr/ftp/J/A+A/621/A133/fits/ah_f160w.fits $ astcrop ah_f160w.fits --center=53.1616278,-27.7802446 --mode=wcs \ --width=20/3600 --output=build/crop.fits To better show the low surface brightness (LSB) outskirts, we will warp the image, then convert the pixel units to surface brightness with the commands below. It is very important that the warping is done _before_ the conversion to surface brightness (in units of mag/arcsec$^2$), because the definition of surface brightness is non-linear. For more, see the surface brightness topic of *note Brightness flux magnitude::, and for a more complete tutorial, see *note FITS images in a publication::. $ zeropoint=25.94 $ astwarp build/crop.fits --centeroncorner --scale=1/3 \ --output=build/scaled.fits $ pixarea=$(astfits build/scaled.fits --pixelareaarcsec2) $ astarithmetic build/scaled.fits $zeropoint $pixarea counts-to-sb \ --output=build/sb.fits We are now ready to convert the surface brightness image into a PDF. To better show the LSB features, we will also limit the color range with the ‘--fluxlow’ and ‘--fluxhigh’ options: all pixels with a surface brightness brighter than 22 mag/arcsec$^2$ will be shown as black, and all pixels with a surface brightness fainter than 30 mag/arcsec$^2$ will be white. These thresholds are being defined as variables, because we will also need them below (to pass into PGFPlots). We will also set ‘--borderwidth=0’, because the coordinate system we will add over the image will effectively be a border for the image (separating it from the background). $ sblow=22 $ sbhigh=30 $ astconvertt build/sb.fits --colormap=gray --borderwidth=0 \ --fluxhigh=$sbhigh --fluxlow=$sblow --output=build/sb.pdf Please open ‘sb.pdf’ and have a look. Also, please open ‘sb.fits’ in DS9 (or any other FITS viewer) and play with the color range. Can the surface brightness limits be changed to better show the LSB structure? If so, you are free to change the limits above. We now have the printable PDF representation of the image, but as discussed above, it is not enough for a paper. We will add 1) a thick line showing the size of 20 kpc (kilo parsecs) at the redshift of the central galaxy, 2) coordinates and 3) a color bar, showing the surface brightness level of each grayscale level. To get the first job done, we first need to know the redshift of the central galaxy. To do this, we can use Gnuastro's Query program to look into all the objects in NED within this image (only asking for the RA, Dec and redshift columns). We will then use the Match program to find the NED entry that corresponds to our galaxy. $ astquery ned --dataset=objdir --overlapwith=build/sb.fits \ --column=ra,dec,z --output=ned.fits $ astmatch ned.fits -h1 --coord=53.1616278,-27.7802446 \ --ccol1=RA,Dec --aperture=1/3600 $ redshift=$(asttable ned_matched.fits -cz) $ echo $redshift Now that we know the redshift of the central object, we can define the coordinates of the thick line that will show the length of 20 kpc at that redshift. It will be a horizontal line (fixed Declination) across a range of RA. The start of this thick line will be located at the top edge of the image (at the 95-percent of the width and height of the image). With the commands below we will find the three necessary parameters (one declination and two RAs). Just note that in astronomical images, RA increases to the left/east, which is the reason we are using the minimum and ‘+’ to find the RA starting point. $ scalelineinkpc=20 $ coverage=$(astfits build/sb.fits --skycoverage --quiet | awk 'NR==2') $ scalelinedec=$(echo $coverage | awk '{print $4-($4-$3)*0.05}') $ scalelinerastart=$(echo $coverage | awk '{print $1+($2-$1)*0.05}') $ scalelineraend=$(astcosmiccal --redshift=$redshift --arcsectandist \ | awk '{start='$scalelinerastart'; \ width='$scalelineinkpc'/$1/3600; \ print start+width}') To draw coordinates over the image, we need to feed these values into PGFPlots. But manually entering numbers into the PGFPlots source will be very frustrating and prone to many errors! Fortunately there is an easy way to do this: LaTeX macros. New macros are defined by this LaTeX command: \newcommand{\macroname}{value} Anywhere that LaTeX confronts ‘\macroname’, it will replace ‘value’ when building the output. We will have one file called ‘macros.tex’ in the build directory and define macros based on those values. We will use the shell's ‘printf’ command to write these macro definition lines into the macro file. We just have to use double backslashes in the ‘printf’ command, because backslash is a meaningful character for ‘printf’, but we want to keep one of them. Also, we put a ‘\n’ at the end of each line, otherwise, all the commands will go into a single line of the macro file. We will also place the random '‘ma’' string at the start of all our LaTeX macros to help identify the macros for this plot. $ macros=build/macros.tex $ printf '\\newcommand{\\maScaleDec}'"{$scalelinedec}\n" > $macros $ printf '\\newcommand{\\maScaleRAa}'"{$scalelinerastart}\n" >> $macros $ printf '\\newcommand{\\maScaleRAb}'"{$scalelineraend}\n" >> $macros $ printf '\\newcommand{\\maScaleKpc}'"{$scalelineinkpc}\n" >> $macros $ printf '\\newcommand{\\maCenterZ}'"{$redshift}\n" >> $macros Please open the macros file after these commands and have a look to see if they do conform to the expected format above. Another set of macros we will need to feed into PGFPlots is the coordinates of the image corners. Fortunately the ‘coverage’ variable found above is also useful here. We just need to extract each item before feeding it into the macros. To do this, we will use AWK and keep each value with the temporary shell variable '‘v’'. $ v=$(echo $coverage | awk '{print $1}') $ printf '\\newcommand{\\maCropRAMin}'"{$v}\n" >> $macros $ v=$(echo $coverage | awk '{print $2}') $ printf '\\newcommand{\\maCropRAMax}'"{$v}\n" >> $macros $ v=$(echo $coverage | awk '{print $3}') $ printf '\\newcommand{\\maCropDecMin}'"{$v}\n" >> $macros $ v=$(echo $coverage | awk '{print $4}') $ printf '\\newcommand{\\maCropDecMax}'"{$v}\n" >> $macros Finally, we also need to pass some other numbers to PGFPlots: 1) the major tick distance (in the coordinate axes that will be printed on the edge of the image). We will assume 7 ticks for this image. 2) The minimum and maximum surface brightness values that we gave to ConvertType when making the PDF; PGFPlots will define its color-bar based on these two values. $ v=$(echo $coverage | awk '{print ($2-$1)/7}') $ printf '\\newcommand{\\maTickDist}'"{$v}\n" >> $macros $ printf '\\newcommand{\\maSBlow}'"{$sblow}\n" >> $macros $ printf '\\newcommand{\\maSBhigh}'"{$sbhigh}\n" >> $macros All the necessary numbers are now ready. Please copy the contents below into a file called ‘my-figure.tex’. This is the PGFPlots source for this particular plot. Besides the coordinates and scale-line, we will also add some text over the image and an orange arrow pointing to the central object with its redshift printed over it. The parameters are generally human-readable, so you should be able to get a good feeling of every line. There are also comments which will show up as a different color when you copy this into a plain-text editor. \begin{tikzpicture} %% Define the coordinates and colorbar \begin{axis}[ at={(0,0)}, axis on top, x dir=reverse, scale only axis, width=\linewidth, height=\linewidth, minor tick num=10, xmin=\maCropRAMin, xmax=\maCropRAMax, ymin=\maCropDecMin, ymax=\maCropDecMax, enlargelimits=false, every tick/.style={black}, xtick distance=\maTickDist, ytick distance=\maTickDist, yticklabel style={rotate=90}, ylabel={Declination (degrees)}, xlabel={Right Ascension (degrees)}, ticklabel style={font=\small, /pgf/number format/.cd, precision=4,/tikz/.cd}, x label style={at={(axis description cs:0.5,0.02)}, anchor=north,font=\small}, y label style={at={(axis description cs:0.07,0.5)}, anchor=south,font=\small}, colorbar, colormap name=gray, point meta min=\maSBlow, point meta max=\maSBhigh, colorbar style={ at={(1.01,1)}, ylabel={Surface brightness (mag/arcsec$^2$)}, yticklabel style={ /pgf/number format/.cd, precision=1, /tikz/.cd}, y label style={at={(axis description cs:5.3,0.5)}, anchor=south,font=\small}, }, ] %% Put the image in the proper positions of the plot. \addplot graphics[ xmin=\maCropRAMin, xmax=\maCropRAMax, ymin=\maCropDecMin, ymax=\maCropDecMax] {sb.pdf}; %% Draw the scale factor. \addplot[black, line width=5, name=scaleline] coordinates {(\maScaleRAa,\maScaleDec) (\maScaleRAb,\maScaleDec)} node [anchor=north west] {\large $\maScaleKpc$ kpc}; \end{axis} %% Add some text anywhere over the plot. The text is added two %% times: the first time with a white background (that with a %% certain opacity), the second time just the text with opacity. \node[anchor=south west, fill=white, opacity=0.5] at (0.01\linewidth,0.01\linewidth) {(a) Text can be added here}; \node[anchor=south west] at (0.01\linewidth,0.01\linewidth) {(a) Text can be added here}; %% Add an arrow to highlight certain structures. \draw [->, red!70!yellow, line width=5] (0.35\linewidth,0.35\linewidth) -- node [anchor=south, rotate=45]{$z=\maCenterZ$} (0.45\linewidth,0.45\linewidth); \end{tikzpicture} Finally, we need another simple LaTeX source for the main PDF "report" that will host this figure. This can actually be your paper or slides for example. Here, we will suffice to the minimal working example. \documentclass{article} %% Import the TiKZ package and activate its "external" feature. \usepackage{tikz} \usetikzlibrary{external} \tikzexternalize %% PGFPlots (which uses TiKZ). \usepackage{pgfplots} \pgfplotsset{axis line style={thick}} \pgfplotsset{ /pgfplots/colormap={gray}{rgb255=(0,0,0) rgb255=(255,255,255)} } %% Import the macros. \input{macros.tex} %% Start document. \begin{document} You can write anything here. %% Add the figure and its caption. \begin{figure} \input{my-figure.tex} \caption{A demo image.} \end{figure} %% Finish the document. \end{document} You are now ready to create the PDF. But LaTeX creates many temporary files, so to avoid populating our top-level directory, we will copy the two ‘.tex’ files into the build directory, go there and run LaTeX. Before running it though, we will first delete all the files that have the name pattern ‘*-figure0*’, these are "external" files created by TiKZ+PGFPlots, including the actual PDF of the figure. $ cp report.tex my-figure.tex build $ cd build $ rm -f *-figure0* $ pdflatex -shell-escape -halt-on-error report.tex You now have the full "report" in ‘report.pdf’. Try adding some extra text on top of the figure, or in the caption and re-running the last four commands. Also try changing the 20kpc scale line length to 50kpc, or try changing the redshift, to see how the length and text of the thick scale-line will automatically change. But the good news is that you also have the raw PDF of the figure that you can use in other places. You can see that file in ‘report-figure0.pdf’. In a larger paper, you can add multiple such figures (with different ‘.tex’ files that are placed in different ‘figure’ environments with different captions). Each figure will get a number in the build directory. TiKZ also allows setting a file name for each "external" figure (to avoid such numbers that can be annoying if the image orders are changed). PGFPlots is also highly customizable, you can make a lot of changes and customizations. Both TiKZ(6) and PGFPLots(7) have wonderful manuals, so have a look trough them. * Menu: * Full script of annotations on figure:: All the steps in one script ---------- Footnotes ---------- (1) <http://mirrors.ctan.org/graphics/pgf/contrib/pgfplots/doc/pgfplots.pdf> (2) <http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf> (3) To build slides, LaTeX has packages like Beamer, see <http://mirrors.ctan.org/macros/latex/contrib/beamer/doc/beameruserguide.pdf> (4) See Figure 1 of Alliez et al. 2019 (https://arxiv.org/abs/1905.11123). (5) <http://research.iac.es/proyecto/abyss> (6) <http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf> (7) <http://mirrors.ctan.org/graphics/pgf/contrib/pgfplots/doc/pgfplots.pdf>  File: gnuastro.info, Node: Full script of annotations on figure, Prev: Annotations for figure in paper, Up: Annotations for figure in paper 5.2.4.1 Full script of annotations on figure ............................................ In *note Annotations for figure in paper::, we each one of the steps to add annotations over an image were described in detail. So if you have understood the steps, but need to add annotations over an image, repeating those steps individually will be annoying. Therefore in this section, we will summarize all the steps in a single script that you can simply copy-paste into a text editor, configure, and run. *Necessary files:* To run this script, you will need an image to crop your object from (here assuming it is called ‘ah_f160w.fits’ with a certain zero point) and two ‘my-figure.tex’ and ‘report.tex’ files that were fully included in *note Annotations for figure in paper::. Also, we have brought the redshift as a parameter here. But if the center of your image always points to your main object, you can also include the Query command to automatically find the object's redshift from NED. Alternatively, your image may already be cropped, in this case, you can remove the cropping step and # Parameters. sblow=22 # Minimum surface brightness. sbhigh=30 # Maximum surface brightness. bdir=build # Build directory location on filesystem. numticks=7 # Number of major ticks in each axis. redshift=0.619 # Redshift of object of interest. zeropoint=25.94 # Zero point of input image. scalelineinkpc=20 # Length of scale-line (in kilo parsecs). input=ah_f160w.fits # Name of input (to crop). # Stop the script in case of a crash. set -e # Build directory if ! [ -d $bdir ]; then mkdir $bdir; fi # Crop out the desired region. crop=$bdir/crop.fits astcrop $input --center=53.1616278,-27.7802446 --mode=wcs \ --width=20/3600 --output=$crop # Warp the image to larger pixels to show surface brightness better. scaled=$bdir/scaled.fits astwarp $crop --centeroncorner --scale=1/3 --output=$scaled # Calculate the pixel area and convert image to Surface brightness. sb=$bdir/sb.fits pixarea=$(astfits $scaled --pixelareaarcsec2) astarithmetic $scaled $zeropoint $pixarea counts-to-sb \ --output=$sb # Convert the surface brightness image into PDF. sbpdf=$bdir/sb.pdf astconvertt $sb --colormap=gray --borderwidth=0 \ --fluxhigh=$sbhigh --fluxlow=$sblow --output=$sbpdf # Specify the coordinates of the scale line (specifying a certain # width in kpc). We will put it on the top-right side of the image (5% # of the full width of the image away from the edge). coverage=$(astfits $sb --skycoverage --quiet | awk 'NR==2') scalelinedec=$(echo $coverage | awk '{print $4-($4-$3)*0.05}') scalelinerastart=$(echo $coverage | awk '{print $1+($2-$1)*0.05}') scalelineraend=$(astcosmiccal --redshift=$redshift --arcsectandist \ | awk '{start='$scalelinerastart'; \ width='$scalelineinkpc'/$1/3600; \ print start+width}') # Write the LaTeX macros to use in plot. Start with the thick line # showing tangential distance. macros=$bdir/macros.tex printf '\\newcommand{\\maScaleDec}'"{$scalelinedec}\n" > $macros printf '\\newcommand{\\maScaleRAa}'"{$scalelinerastart}\n" >> $macros printf '\\newcommand{\\maScaleRAb}'"{$scalelineraend}\n" >> $macros printf '\\newcommand{\\maScaleKpc}'"{$scalelineinkpc}\n" >> $macros printf '\\newcommand{\\maCenterZ}'"{$redshift}\n" >> $macros # Add image extrema for the coordinates. v=$(echo $coverage | awk '{print $1}') printf '\\newcommand{\maCropRAMin}'"{$v}\n" >> $macros v=$(echo $coverage | awk '{print $2}') printf '\\newcommand{\maCropRAMax}'"{$v}\n" >> $macros v=$(echo $coverage | awk '{print $3}') printf '\\newcommand{\maCropDecMin}'"{$v}\n" >> $macros v=$(echo $coverage | awk '{print $4}') printf '\\newcommand{\maCropDecMax}'"{$v}\n" >> $macros # Distance between each tick value. v=$(echo $coverage | awk '{print ($2-$1)/'$numticks'}') printf '\\newcommand{\maTickDist}'"{$v}\n" >> $macros printf '\\newcommand{\maSBlow}'"{$sblow}\n" >> $macros printf '\\newcommand{\maSBhigh}'"{$sbhigh}\n" >> $macros # Copy the LaTeX source into the build directory and go there to run # it and have all the temporary LaTeX files there. cp report.tex my-figure.tex $bdir cd $bdir rm -f *-figure0* pdflatex -shell-escape -halt-on-error report.tex  File: gnuastro.info, Node: Invoking astconvertt, Prev: Annotations for figure in paper, Up: ConvertType 5.2.5 Invoking ConvertType -------------------------- ConvertType will convert any recognized input file type to any specified output type. The executable name is ‘astconvertt’ with the following general template $ astconvertt [OPTION...] InputFile [InputFile2] ... [InputFile4] One line examples: ## Convert an image in FITS to PDF: $ astconvertt image.fits --output=pdf ## Similar to before, but use the Viridis color map: $ astconvertt image.fits --colormap=viridis --output=pdf ## Add markers to to highlight parts of the image ## ('marks.fits' is a table containing coordinates) $ astconvertt image.fits --marks=marks.fits --output=pdf ## Convert an image in JPEG to FITS (with multiple extensions ## if it has color): $ astconvertt image.jpg -oimage.fits ## Use three 2D arrays to create an RGB JPEG output (two are ## plain-text, the third is FITS, but all have the same size). $ astconvertt f1.txt f2.txt f3.fits -o.jpg ## Use two images and one blank for an RGB EPS output: $ astconvertt M31_r.fits M31_g.fits blank -oeps ## Directly pass input from output of another program through Standard ## input (not a file). $ cat 2darray.txt | astconvertt -oimg.fits In the sub-sections below various options that are specific to ConvertType are grouped in different categories. Please see those sections for a detailed discussion on each group and its options. Besides those, ConvertType also shares the *note Common options:: with other Gnuastro programs. The common options are not repeated here. * Menu: * ConvertType input and output:: Input/output file names and formats. * Pixel visualization:: Visualizing the pixels in the output. * Drawing with vector graphics:: Adding marks in many shapes and colors over the pixels.  File: gnuastro.info, Node: ConvertType input and output, Next: Pixel visualization, Prev: Invoking astconvertt, Up: Invoking astconvertt 5.2.5.1 ConvertType input and output .................................... At most four input files (one for each color channel for formats that allow it) are allowed in ConvertType. The first input dataset can either be a file, or come from Standard input (see *note Standard input:: and *note Recognized file formats::). The order of multiple input files is important. After reading the input file(s) the number of color channels in all the inputs will be used to define which color space to use for the outputs and how each color channel is interpreted: 1 (for grayscale), 3 (for RGB) and 4 (for CMYK) input channels. For more on pixel color channels, see *note Pixel colors::. Depending on the format of the input(s), the number of input files can differ. For example, if you plan to build an RGB PDF and your three channels are in the first HDU of ‘r.fits’, ‘g.fits’ and ‘b.fits’, then you can simply call MakeProfiles like this: $ astconvertt r.fits g.fits b.fits -g1 --output=rgb.pdf However, if the three color channels are in three extensions (assuming the HDUs are respectively named ‘R’, ‘G’ and ‘B’) of a single file (assuming ‘channels.fits’), you should run it like this: $ astconvertt channels.fits -hR -hG -hB --output=rgb.pdf On the other hand, if the channels are already in a multi-channel format (like JPEG), you can simply provide that file: $ astconvertt image.jpg --output=rgb.pdf If multiple channels are given as input, and the output format does not support multiple color channels (for example, FITS), ConvertType will put the channels in different HDUs, like the example below. After running the ‘astfits’ command, if your JPEG file was not grayscale (single channel), you will see multiple HDUs in ‘channels.fits’. $ astconvertt image.jpg --output=channels.fits $ astfits channels.fits As shown above, the output's file format will be interpreted from the name given to the ‘--output’ option (as a common option to all Gnuastro programs, for the description of ‘--output’, see *note Input output options::). It can either be given on the command-line or in any of the configuration files (see *note Configuration files::). When the output suffix is not recognized, it will default to plain text format, see *note Recognized file formats::. If there is one input dataset (color channel) the output will be gray-scale. When three input datasets (color channels) are given, they are respectively considered to be the red, green and blue color channels. Finally, if there are four color channels they will be cyan, magenta, yellow and black (CMYK colors). The value to ‘--output’ (or ‘-o’) can be either a full file name or just the suffix of the desired output format. In the former case (full name), it will be directly used for the output's file name. In the latter case, the name of the output file will be set based on the automatic output guidelines, see *note Automatic output::. Note that the suffix name can optionally start with a ‘.’ (dot), so for example, ‘--output=.jpg’ and ‘--output=jpg’ are equivalent. See *note Recognized file formats::. The relevant options for input/output formats are described below: ‘-h STR/INT’ ‘--hdu=STR/INT’ Input HDU name or counter (counting from 0) for each input FITS file. If the same HDU should be used from all the FITS files, you can use the ‘--globalhdu’ option described below. In ConvertType, it is possible to call the HDU option multiple times for the different input FITS or TIFF files in the same order that they are called on the command-line. Note that in the TIFF standard, one 'directory' (similar to a FITS HDU) may contain multiple color channels (for example, when the image is in RGB). Except for the fact that multiple calls are possible, this option is identical to the common ‘--hdu’ in *note Input output options::. The number of calls to this option cannot be less than the number of input FITS or TIFF files, but if there are more, the extra HDUs will be ignored, note that they will be read in the order described in *note Configuration file precedence::. Unlike CFITSIO, libtiff (which is used to read TIFF files) only recognizes numbers (counting from zero, similar to CFITSIO) for 'directory' identification. Hence the concept of names is not defined for the directories and the values to this option for TIFF files must be numbers. ‘-g STR/INT’ ‘--globalhdu=STR/INT’ Use the value given to this option (a HDU name or a counter, starting from 0) for the HDU identifier of all the input FITS files. This is useful when all the inputs are distributed in different files, but have the same HDU in those files. ‘-w FLT’ ‘--widthincm=FLT’ The width of the output in centimeters. This is only relevant for those formats that accept such a width as metadata (not FITS or plain-text for example), see *note Recognized file formats::. For most digital purposes, the number of pixels is far more important than the value to this parameter because you can adjust the absolute width (in inches or centimeters) in your document preparation program. ‘-x’ ‘--hex’ Use Hexadecimal encoding in creating EPS output. By default the ASCII85 encoding is used which provides a much better compression ratio. When converted to PDF (or included in TeX or LaTeX which is finally saved as a PDF file), an efficient binary encoding is used which is far more efficient than both of them. The choice of EPS encoding will thus have no effect on the final PDF. So if you want to transfer your EPS files (for example, if you want to submit your paper to arXiv or journals in PostScript), their storage might become important if you have large images or lots of small ones. By default ASCII85 encoding is used which offers a much better compression ratio (nearly 40 percent) compared to Hexadecimal encoding. ‘-u INT’ ‘--quality=INT’ The quality (compression) of the output JPEG file with values from 0 to 100 (inclusive). For other formats the value to this option is ignored. Note that only in gray-scale (when one input color channel is given) will this actually be the exact quality (each pixel will correspond to one input value). If it is in color mode, some degradation will occur. While the JPEG standard does support loss-less graphics, it is not commonly supported.  File: gnuastro.info, Node: Pixel visualization, Next: Drawing with vector graphics, Prev: ConvertType input and output, Up: Invoking astconvertt 5.2.5.2 Pixel visualization ........................... The main goal of ConvertType is to visualize pixels to/from print or web friendly formats. Astronomical data usually have a very large dynamic range (difference between maximum and minimum value) and different subjects might be better demonstrated with a limited flux range. ‘--colormap=STR[,FLT,...]’ The color map to visualize a single channel. The first value given to this option is the name of the color map, which is shown below. Some color maps can be configured. In this case, the configuration parameters are optionally given as numbers following the name of the color map for example, see ‘hsv’. The table below contains the usable names of the color maps that are currently supported: ‘gray’ ‘grey’ Grayscale color map. This color map does not have any parameters. The full dataset range will be scaled to 0 and $2^8-1=255$ to be stored in the requested format. ‘hsv’ Hue, Saturation, Value(1) color map. If no values are given after the name (‘--colormap=hsv’), the dataset will be scaled to 0 and 360 for hue covering the full spectrum of colors. However, you can limit the range of hue (to show only a special color range) by explicitly requesting them after the name (for example, ‘--colormap=hsv,20,240’). The mapping of a single-channel dataset to HSV is done through the Hue and Value elements: Lower dataset elements have lower "value" _and_ lower "hue". This creates darker colors for fainter parts, while also respecting the range of colors. ‘viridis’ Viridis is the default colormap of the popular Matplotlib module of Python and available in many other visualization tools like PGFPlots. ‘sls’ The SLS color range, taken from the commonly used SAO DS9 (http://ds9.si.edu). The advantage of this color range is that it starts with black, going into dark blue and finishes with the brighter colors of red and white. So unlike the HSV color range, it includes black and white and brighter colors (like yellow, red) show the larger values. ‘sls-inverse’ The inverse of the SLS color map (see above), where the lowest value corresponds to white and the highest value is black. While SLS is good for visualizing on the monitor, SLS-inverse is good for printing. ‘--rgbtohsv’ When there are three input channels and the output is in the FITS format, interpret the three input channels as red, green and blue channels (RGB) and convert them to the hue, saturation, value (HSV) color space. The currently supported output formats of ConvertType do not have native support for HSV. Therefore this option is only supported when the output is in FITS format and each of the hue, saturation and value arrays can be saved as one FITS extension in the output for further analysis (for example, to select a certain color). ‘-c STR’ ‘--change=STR’ (‘=STR’) Change pixel values with the following format ‘"from1:to1, from2:to2,..."’. This option is very useful in displaying labeled pixels (not actual data images which have noise) like segmentation maps. In labeled images, usually a group of pixels have a fixed integer value. With this option, you can manipulate the labels before the image is displayed to get a better output for print or to emphasize on a particular set of labels and ignore the rest. The labels in the images will be changed in the same order given. By default first the pixel values will be converted then the pixel values will be truncated (see ‘--fluxlow’ and ‘--fluxhigh’). You can use any number for the values irrespective of your final output, your given values are stored and used in the double precision floating point format. So for example, if your input image has labels from 1 to 20000 and you only want to display those with labels 957 and 11342 then you can run ConvertType with these options: $ astconvertt --change=957:50000,11342:50001 --fluxlow=5e4 \ --fluxhigh=1e5 segmentationmap.fits --output=jpg While the output JPEG format is only 8 bit, this operation is done in an intermediate step which is stored in double precision floating point. The pixel values are converted to 8-bit after all operations on the input fluxes have been complete. By placing the value in double quotes you can use as many spaces as you like for better readability. ‘-C’ ‘--changeaftertrunc’ Change pixel values (with ‘--change’) after truncation of the flux values, by default it is the opposite. ‘-L FLT’ ‘--fluxlow=FLT’ The minimum flux (pixel value) to display in the output image, any pixel value below this value will be set to this value in the output. If the value to this option is the same as ‘--fluxhigh’, then no flux truncation will be applied. Note that when multiple channels are given, this value is used for all the color channels. ‘-H FLT’ ‘--fluxhigh=FLT’ The maximum flux (pixel value) to display in the output image, see ‘--fluxlow’. ‘-m INT’ ‘--maxbyte=INT’ This is only used for the JPEG and EPS output formats which have an 8-bit space for each channel of each pixel. The maximum value in each pixel can therefore be $2^8-1=255$. With this option you can change (decrease) the maximum value. By doing so you will decrease the dynamic range. It can be useful if you plan to use those values for other purposes. ‘-A’ ‘--forcemin’ Enforce the value of ‘--fluxlow’ (when it is given), even if it is smaller than the minimum of the dataset and the output is format supporting color. This is particularly useful when you are converting a number of images to a common image format like JPEG or PDF with a single command and want them all to have the same range of colors, independent of the contents of the dataset. Note that if the minimum value is smaller than ‘--fluxlow’, then this option is redundant. By default, when the dataset only has two values, _and_ the output format is PDF or EPS, ConvertType will use the PostScript optimization that allows setting the pixel values per bit, not byte (*note Recognized file formats::). This can greatly help reduce the file size. However, when ‘--fluxlow’ or ‘--fluxhigh’ are called, this optimization is disabled: even though there are only two values (is binary), the difference between them does not correspond to the full contrast of black and white. ‘-B’ ‘--forcemax’ Similar to ‘--forcemin’, but for the maximum. ‘-i’ ‘--invert’ For 8-bit output types (JPEG, EPS, and PDF for example) the final value that is stored is inverted so white becomes black and vice versa. The reason for this is that astronomical images usually have a very large area of blank sky in them. The result will be that a large are of the image will be black. Note that this behavior is ideal for gray-scale images, if you want a color image, the colors are going to be mixed up. ---------- Footnotes ---------- (1) <https://en.wikipedia.org/wiki/HSL_and_HSV>  File: gnuastro.info, Node: Drawing with vector graphics, Prev: Pixel visualization, Up: Invoking astconvertt 5.2.5.3 Drawing with vector graphics .................................... With the options described in this section, you can draw marks over your to-be-published images (for example, in PDF). Each mark can be highly customized so they can have different shapes, colors, line widths, text, text size, etc. The properties of the marks should be stored in a table that is given to the ‘--marks’ option described below. A fully working demo on adding marks is provided in *note Marking objects for publication::. An important factor to consider when drawing vector graphics is that vector graphics standards (the PostScript standard in this case) use a "point" as the primary unit of line thickness or font size. Such that 72 points correspond to 1 inch (or 2.54 centimeters). In other words, there are roughly 3 PostScript points in every millimeter. On the other hand, the pixels of the images you plan to show as the background do not have any real size! Pixels are abstract and can be associated with any print-size. In ConvertType, the print-size of your final image is set with the ‘--widthincm’ option (see *note ConvertType input and output::). The value to ‘--widthincm’ is the to-be width of the image in centimeters. It therefore defines the thickness of lines or font sizes for your vector graphics features (like the image border or marks). Just recall that we are not talking about resolution! Vector graphics have infinite resolution! We are talking about the relative thickness of the lines (or font sizes) in relation to the pixels in your background image. ‘-b INT’ ‘--borderwidth=INT’ The width of the border to be put around the EPS and PDF outputs in units of PostScript points. If you are planning on adding a border, its thickness in relation to your image pixel sizes is highly correlated with the value you give to the ‘--widthincm’ parameter. See the description at the start of this section for more. Unfortunately in the document structuring convention of the PostScript language, the "bounding box" has to be in units of PostScript points with no fractions allowed. So the border values only have to be specified in integers. To have a final border that is thinner than one PostScript point in your document, you can ask for a larger width in ConvertType and then scale down the output EPS or PDF file in your document preparation program. For example, by setting ‘width’ in your ‘includegraphics’ command in TeX or LaTeX to be larger than the value to ‘--widthincm’. Since it is vector graphics, the changes of size have no effect on the quality of your output (pixels do not get different values). ‘--bordercolor=STR’ The name of the color to use for border that will be put around the EPS and PDF outputs. The list of available colors, along with their name and an example can be seen with the following command (also see *note Vector graphics colors::): $ astconvertt --listcolors This option only accepts the name of the color, not the numeric identifier. ‘--marks=STR’ Draw vector graphics (infinite resolution) marks over the image. The value to this option should be the file name of a table containing the mark information. The table given to this option can have various properties for each mark in each column. You can specify which column contains which property of the marks using the options below that start with ‘--mark’. Only two property columns are mandatory (‘--markcoords’), the rest are optional. The table can be in any of the Gnuastro's *note Recognized table formats::. For more on the difference between vector and raster graphics, see *note Raster and Vector graphics::. For example, if your table with mark information is called ‘my-marks.fits’, you can use the command below to draw red circles of radius 5 pixels over the coordinates. $ astconvertt image.fits --output=image.pdf \ --marks=marks.fits --mode=wcs \ --markcoords=RA,DEC You can highly customize each mark with different columns in ‘marks.fits’ using the ‘--mark*’ options below (for example, using different colors, different shapes, different sizes, text, and the rest on each mark). ‘--markshdu=STR/INT’ The HDU (or extension) name or number of the table containing mark properties (file given to ‘--marks’). This is only relevant if the table is in the FITS format and there is more than one HDU in the FITS file. ‘-r STR,STR’ ‘--markcoords=STR,STR’ The column names (or numbers) containing the coordinates of each mark (in table given to ‘--marks’). Only two values should be given to this option (one for each coordinate). They can either be given to one call (‘--markcoords=RA,DEC’) or in separate calls (‘--markcoords=RA --markcoords=DEC’). When ‘--mode=image’ the columns will be associated to the horizontal/vertical coordinates of the image, and interpreted in units of pixels. In ‘--mode=wcs’, the columns will be associated to the WCS coordinates (typically Right Ascension and Declination, in units of degrees). ‘-O STR’ ‘--mode=STR’ The coordinate mode for interpreting the values in the columns given to the ‘--markcoord1’ and ‘--markcoord2’ options. The acceptable values are either ‘img’ (for image or pixel coordinates), and ‘wcs’ for World Coordinate System (typically RA and Dec). For the WCS-mode, the input image should have the necessary WCS keywords, otherwise ConvertType will crash. ‘--markshape=STR/INT’ The column name(s), or number(s), containing the shapes of each mark (in table given to ‘--marks’). The shapes can either be identified by their name, or their numerical identifier. If identifying them by name in a plain-text table, you need to define a string column (see *note Gnuastro text table format::). The full list of names is shown below, with their numerical identifier in parenthesis afterwards. For each shape, you can also specify properties such as the size, line width, rotation, and color. See the description of the relevant ‘--mark*’ option below. ‘circle (1)’ A circular circumference. It's _radius_ is defined by a single size element (the first column given to ‘--marksize’). Any value in the second size column (if given for other shapes in the same call) are ignored by this shape. ‘plus (2)’ The plus sign ($+$). The _length of its lines_ is defined by a single size element (the first column given to ‘--marksize’). Such that the intersection of its lines is on the central coordinate of the mark. Any value in the second size column (if given for other shapes in the same call) are ignored by this shape. ‘cross (3)’ A multiplication sign ($\times$). The _length of its lines_ is defined by a single size element (the first column given to ‘--marksize’). Such that the intersection of its lines is on the central coordinate of the mark. Any value in the second size column (if given for other shapes in the same call) are ignored by this shape. ‘ellipse (4)’ An elliptical circumference. Its major axis radius is defined by the first size element (first column given to ‘--marksize’), and its axis ratio is defined through the second size element (second column given to ‘--marksize’). ‘point (5)’ A point (or a filled circle). Its _radius_ is defined by a single size element (the first column given to ‘--marksize’). Any value in the second size column (if given for other shapes in the same call) are ignored by this shape. This filled circle mark is defined as a "point" because it is usually relevant as a small size (or point in the whole image). But there is no limit on its size, so it can be arbitrarily large. ‘square (6)’ A square circumference. Its _edge length_ is defined by a single size element (the first column given to ‘--marksize’). Any value in the second size column (if given for other shapes in the same call) are ignored by this shape. ‘rectangle (7)’ A rectangular circumference. Its length along the horizontal image axis is defined by first size element (first column given to ‘--marksize’), and its length along the vertical image axis is defined through the second size element (second column given to ‘--marksize’). ‘line (8)’ A line. The line's _length_ is defined by a single size element (the first column given to ‘--marksize’. The line will be centered on the given coordinate. Like all shapes, you can rotate the line about its center using the ‘--markrotate’ column. Any value in the second size column (if given for other shapes in the same call) are ignored by this shape. ‘--markrotate=STR/INT’ Column name or number that contains the mark's rotation angle. The rotation angle should be in degrees and be relative to the horizontal axis of the image. ‘--marksize=STR[,STR]’ The column name(s), or number(s), containing the size(s) of each mark (in table given to ‘--marks’). All shapes need at least one "size" parameter and some need two. For the interpretation of the size column(s) for each shape, see the ‘--markshape’ option's description. Since the size column(s) is (are) optional, when not specified, default values will be used (which may be too small in larger images, so you need to change them). By default, the values in the size column are assumed to be in the same units as the coordinates (defined by the ‘--mode’ option, described above). However, when the coordinates are in WCS-mode, some special cases may occur for the size. • The native WCS units (usually degrees) can be too large, and it may be more convenient for the values in the size column(s) to be in arc-seconds. In this case, you can use the ‘--sizeinarcsec’ option. • Similar to above, but in units of arc-minutes. In this case, you can use the ‘--sizeinarcmin’ option. • Your sizes may be in units of pixels, not the WCS units. In this case, you can use the ‘--sizeinpix’ option. ‘--sizeinpix’ In WCS-mode, assume that the sizes are in units of pixels. By default, when in WCS-mode, the sizes are assumed to be in the units of the WCS coordinates (usually degrees). ‘--sizeinarcsec’ In WCS-mode, assume that the sizes are in units of arc-seconds. By default, when in WCS-mode, the sizes are assumed to be in the units of the WCS coordinates (usually degrees). ‘--sizeinarcmin’ In WCS-mode, assume that the sizes are in units of arc-seconds. By default, when in WCS-mode, the sizes are assumed to be in the units of the WCS coordinates (usually degrees). ‘--marklinewidth=STR/INT’ Column containing the width (thickness) of the line to draw each mark. The line width is measured in units of "points" (where 72 points is one inch), and it can be any positive floating point number. Therefore, the thickness (in relation to the pixels of your image) depends on ‘--widthincm’ option. For more, see the description at the start of this section. ‘--markcolor=STR/INT’ Column containing the color of the mark. This column can be either a string or an integer. As a string, the color name can be written directly in your table (this greatly helps in human readability). For more on string columns see *note Gnuastro text table format::. As an integer, you can simply use the numerical identifier of the column. You can see the list of colors with their names and numerical identifiers in Gnuastro by running ConvertType with ‘--listcolors’, or see *note Vector graphics colors::. ‘--listcolors’ The list of acceptable color names, their codes and their representation can be seen with the ‘--listcolors’ option. By "representation" we mean that the color will be shown on the terminal as the background in that column. But this will only be properly visible with "true color" or 24-bit terminals, see ANSI escape sequence standard (https://en.wikipedia.org/wiki/ANSI_escape_code). Most modern GNU/Linux terminals support 24-bit colors natively, and no modification is necessary. For macOS, see the box below. The printed text in standard output is in the *note Gnuastro text table format::, so if you want to store this table, you can simply pipe the output to Gnuastro's Table program and store it as a FITS table: $ astconvertt --listcolors | astttable -ocolors.fits *macOS terminal colors*: as of August 2022, the default macOS terminal (iTerm) does not support 24-bit colors! The output of ‘--listlines’ therefore does not display the actual colors (you can only use the color names). One tested solution is to install and use iTerm2 (https://iterm2.com), which is free software and available in Homebrew (https://formulae.brew.sh/cask/iterm2). iTerm2 is described as a successor for iTerm and works on macOS 10.14 (released in September 2018) or newer. ‘--marktext=STR/INT’ Column name or number that contains the text that should be printed under the mark. If the column is numeric, the number will be printed under the mark (for example, if you want to write the magnitude or redshift of the object under the mark showing it). For the precision of writing floating point columns, see ‘--marktextprecision’. But if the column has a string format (for example, the name of the object like an NGC1234), you need to define the column as a string column (see *note Gnuastro text table format::). For text with different lengths, set the length in the definition of the column to the maximum length of the strings to be printed. If there are some rows or marks that don't require text, set the string in this column to ‘n/a’ (not applicable; the blank value for strings in Gnuastro). When having strings with different lengths, make sure to have enough white spaces (for the shorter strings) so the adjacent columns are not taken as part of the string (see *note Gnuastro text table format::). ‘--marktextprecision=INT’ The number of decimal digits to print after the floating point. This is only relevant when ‘--marktext’ is given, and the selected column has a floating point format. ‘--markfont=STR/INT’ Column name or number that contains the font for the displayed text under the mark. This is only relevant if ‘--marktext’ is called. The font should be accessible by Ghostscript. If you are not familiar with the available fonts on your system's Ghostscript, you can use the ‘--showfonts’ option to see all the fonts in a custom PDF file (one page per font). If you are already familiar with the font you want, but just want to make sure about its presence (or spelling!), you can get a list (on standard output) of all the available fonts with the ‘--listfonts’ option. Both are described below. It is possible to add custom fonts to Ghostscript as described in the Fonts section (https://ghostscript.com/doc/current/Fonts.htm) of the Ghostscript manual. ‘--markfontsize=STR/INT’ Column name or number that contains the font size to use. This is only relevant if a text column has been defined (with ‘--marktext’, described above). The font size is in units of "point"s, see description at the start of this section for more. ‘--showfonts’ Create a special PDF file that shows the name and shape of all available fonts in your system's Ghostscript. You can use this for selecting the best font to put in the ‘--markfonts’ column. The available fonts can differ from one system to another (depending on how Ghostscript was configured in that system). The PDF file's name is constructed by appending a ‘-fonts.pdf’ to the file name given to the ‘--output’ option. The PDF file will have one page for each font, and the sizes of the pages are customized for showing the fonts (each page is horizontally elongated). This helps to better check the files by disable "continuous" mode in your PDF viewer, and setting the zoom such that the width of the page corresponds to the width of your PDF viewer. Simply pressing the left/right keys will then nicely show each fonts separately. ‘--listfonts’ Print (to standard output) the names of all available fonts in Ghostscript that you can use for the ‘--markfonts’ column. The available fonts can differ from one system to another (depending on how Ghostscript was configured in that system). If you are not already familiar with the shape of each font, please use ‘--showfonts’ (described above).  File: gnuastro.info, Node: Table, Next: Query, Prev: ConvertType, Up: Data containers 5.3 Table ========= Tables are the high-level products of processing on low-leveler data like images or spectra. For example, in Gnuastro, MakeCatalog will process the pixels over an object and produce a catalog (or table) with the properties of each object such as magnitudes and positions (see *note MakeCatalog::). Each one of these properties is a column in its output catalog (or table) and for each input object, we have a row. When there are only a small number of objects (rows) and not too many properties (columns), then a simple plain text file is mainly enough to store, transfer, or even use the produced data. However, to be more efficient, astronomers have defined the FITS binary table standard to store data in a binary format (which cannot be seen in a text editor text). This can offer major advantages: the file size will be greatly reduced and the reading and writing will also be faster (because the RAM and CPU also work in binary). The acceptable table formats are fully described in *note Tables::. Binary tables are not easily readable with basic plain-text editors. There is no fixed/unified standard on how the zero and ones should be interpreted. Unix-like operating systems have flourished because of a simple fact: communication between the various tools is based on human readable characters(1). So while the FITS table standards are very beneficial for the tools that recognize them, they are hard to use in the vast majority of available software. This creates limitations for their generic use. Table is Gnuastro's solution to this problem. Table has a large set of operations that you can directly do on any recognized table (such as selecting certain rows and doing arithmetic on the columns). For operations that Table does not do internally, FITS tables (ASCII or binary) are directly accessible to the users of Unix-like operating systems (in particular those working the command-line or shell, see *note Command-line interface::). With Table, a FITS table (in binary or ASCII formats) is only one command away from AWK (or any other tool you want to use). Just like a plain text file that you read with the ‘cat’ command. You can pipe the output of Table into any other tool for higher-level processing, see the examples in *note Invoking asttable:: for some simple examples. In the sections below we describe how to effectively use the Table program. We start with *note Column arithmetic::, where the basic concept and methods of applying arithmetic operations on one or more columns are discussed. Afterwards, in *note Operation precedence in Table::, we review the various types of operations available and their precedence in an instance of calling Table. This is a good place to get a general feeling of all the things you can do with Table. Finally, in *note Invoking asttable::, we give some examples and describe each option in Table. * Menu: * Printing floating point numbers:: Optimal storage of floating point types. * Vector columns:: How to keep more than one value in each column. * Column arithmetic:: How to do operations on table columns. * Operation precedence in Table:: Order of running options in Table. * Invoking asttable:: Options and arguments to Table. ---------- Footnotes ---------- (1) In "The art of Unix programming", Eric Raymond makes this suggestion to programmers: "When you feel the urge to design a complex binary file format, or a complex binary application protocol, it is generally wise to lie down until the feeling passes.". This is a great book and strongly recommended, give it a look if you want to truly enjoy your work/life in this environment.  File: gnuastro.info, Node: Printing floating point numbers, Next: Vector columns, Prev: Table, Up: Table 5.3.1 Printing floating point numbers ------------------------------------- Many of the columns containing astronomical data will contain floating point numbers (those that aren't an integer, like $1.23$ or $4.56\times10^{-7}$). However, printing (for human readability) of floating point numbers has some intricacies that we will explain in this section. For a basic introduction to different types of integers or floating points, see *note Numeric data types::. It may be tempting to simply use 64-bit floating points all the time and avoid this section over all. But have in mind that compared to 32-bit floating point type, a 64-bit floating point type will consume double the storage, double the RAM and will take almost double the time for processing. So when the statistical precision of your numbers is less than that offered by 32-bit floating point precision, it is much better to store them in this format. Within almost all commonly used CPUs of today, numbers (including integers or floating points) are stored in binary base-2 format (where the only digits that can be used to represent the number are 0 and 1). However, we (humans) are use to numbers in base-10 (where we have 10 digits: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9). For integers, there is a one-to-one correspondence between a base-2 and base-10 representation. Therefore, converting a base-10 integer (that you will be giving as an option value when running a Gnuastro program, for example) to base-2 (that the computer will store in memory), or vice-versa, will not cause any loss of information for integers. The problem is that floating point numbers don't have such a one-to-one correspondence between the two notations. The full discussion on how floating point numbers are stored in binary format is beyond the scope of this book. But please have a look at the corresponding Wikipedia article (https://en.wikipedia.org/wiki/Floating-point_arithmetic) to get a rough feeling about the complexity. Of course, if you are interested in the details, that Wikipedia article should be a good starting point for further reading. The most common convention for storing floating point numbers in digital storage is IEEE Standard for Floating-Point Arithmetic; IEEE 754 (https://en.wikipedia.org/wiki/IEEE_754). In short, the full width (in bits) assigned to that type (for example the 32 bits allocated for 32-bit floating point types) is divided into separate components: The first bit is the "sign" (specifying if the number is negative or positive). In 32-bit floats, the next 8 bits are the "exponent" and finally (again, in 32-bit floats), the "fraction" is stored in the next 23 bits. For example see this image on Wikipedia (https://commons.wikimedia.org/wiki/File:Float_example.svg). In IEEE 754, around zero, the base-2 and base-10 representations approximately match. However, as we go away from 0, you will loose precision. The important concept in understanding the precision of floating point numbers is "decimal digits", or the number of digits in the number, independent of where the decimal point is. For example $1.23$ has three decimal digits and $4.5678\times10^9$ has 5 decimal digits. According to IEEE 754(1), 32-bit and 64-bit floating point numbers can accurately (statistically) represent a floating point with 7.22 and 15.95 decimal digits respectively. *Should I store my columns as 32-bit or 64-bit floating point type?* If your floating point numbers have 7 decimal digits or less (for example noisy image pixel values, measured star or galaxy magnitudes, and anything that is derived from them like galaxy mass and etc), you can safely use 32-bit precision (the statistical error on the measurements is usually significantly larger than 7 digits!). However, some columns require more digits; thus 64-bit precision. For example, RA or Dec with more than one arcsecond accuracy: the degrees can have 3 digits, and 1 arcsecond is $1/3600\sim0.0003$ of a degree, requiring 4 more digits). You can use the *note Numerical type conversion operators:: of *note Column arithmetic:: to convert your columns to a certain type for storage. The discussion above was for the storage of floating point numbers. When printing floating point numbers in a human-friendly format (for example, in a plain-text file or on standard output in the command-line), the computer has to convert its internal base-2 representation to a base-10 representation. This second conversion may cause a small discrepancy between the stored and printed values. *Use FITS tables as output of measurement programs:* When you are doing a measurement to produce a catalog (for example with *note MakeCatalog::) set the output to be a FITS table (for example ‘--output=mycatalog.fits’). A FITS binary table will store the same the base-2 number that was measured by the CPU. However, if you choose to store the output table as a plain-text table, you risk loosing information due to the human friendly base-10 floating point conversion (which is necessary in a plain-text output). To customize how columns containing floating point values are printed (in a plain-text output file, or in the standard output in your terminal), Table has four options for the two different types: ‘--txtf32format’, ‘--txtf32precision’, ‘--txtf64format’ and ‘--txtf64precision’. They are fully described in *note Invoking asttable::. *Summary:* it is therefore recommended to always store your tables as FITS (binary) tables. To view the contents of the table on the command-line or to feed it to a program that doesn't recognize FITS tables, you can use the four options above for a custom base-10 conversion that will not cause any loss of data. ---------- Footnotes ---------- (1) <https://en.wikipedia.org/wiki/IEEE_754#Basic_and_interchange_formats>  File: gnuastro.info, Node: Vector columns, Next: Column arithmetic, Prev: Printing floating point numbers, Up: Table 5.3.2 Vector columns -------------------- In its most common format, each column of a table only has a single value in each row. For example, we usually have one column for the magnitude, another column for the RA (Right Ascension) and yet another column for the DEC (Declination) of a set of galaxies/stars (where each galaxy is represented by one row in the table). This common single-valued column format is sufficient in many scenarios. However, in some situations (like those below) it would help to have multiple values for each row in each column, not just one. • Conceptually: the various numbers are "connected" to each other. In other words, their order and position in relation to each other matters. Common examples in astronomy are the radial profiles of each galaxy in your catalog, or their spectrum. For example, each MUSE(1) spectra has 3681 points (with a sampling of of 1.25 Angstroms). Dealing with this many separate measurements as separate columns in your table is very annoying and prone to error: you don't want to forget moving some of them in an output table for further analysis, mistakenly change their order, or do some operation only on a sub-set of them. • Technically: in the FITS standard, you can only store a maximum of 999 columns in a FITS table. Therefore, if you have more than 999 data points for each galaxy (like the MUSE spectra example above), it is impossible to store each point in one table as separate columns. To address these problems, the FITS standard has defined the concept of "vector" columns in its Binary table format (ASCII FITS tables don't support vector columns, but Gnuastro's plain-text format does, as described here). Within each row of a single vector column, we can store any number of data points (like the MUSE spectra above or the full radial profile of each galaxy). All the values in a vector column have to have the same *note Numeric data types::, and the number of elements within each vector column is the same for all rows. By grouping conceptually similar data points (like a spectrum) in one vector column, we can significantly reduce the number of columns and make it much more manageable, without loosing any information! To demonstrate the vector column features of Gnuastro's Table program, let's start with a randomly generated small (5 rows and 3 columns) catalog. This will allows us to show the outputs of each step here, but you can apply the same concept to vectors with any number of columns. With the command below, we use ‘seq’ to generate a single-column table that is piped to Gnuastro's Table program. Table then uses column arithmetic to generate three columns with random values from that column (for more, see *note Column arithmetic::). Each column becomes noisy, with standard deviations of 2, 5 and 10. Finally, we will add metadata to each column, giving each a different name (using names is always the best way to work with columns): $ seq 1 5 \ | asttable -c'arith $1 2 mknoise-sigma f32' \ -c'arith $1 5 mknoise-sigma f32' \ -c'arith $1 10 mknoise-sigma f32' \ --colmetadata=1,abc,none,"First column." \ --colmetadata=2,def,none,"Second column." \ --colmetadata=3,ghi,none,"Third column." \ --output=table.fits With the command below, let's have a look at the table. When you run it, you will have a different random number generator seed, so the numbers will be slightly different. For making reproducible random numbers, see *note Generating random numbers::. The ‘-Y’ option is used for more easily readable numbers (without it, floating point numbers are written in scientific notation, for more see *note Printing floating point numbers::) and with the ‘-O’ we are asking Table to also print the metadata. For more on Table's options, see *note Invoking asttable:: and for seeing how the short options can be merged (such that ‘-Y -O’ is identical to ‘-YO’), see *note Options::. $ asttable table.fits -YO # Column 1: abc [none,f32,] First column. # Column 2: def [none,f32,] Second column. # Column 3: ghi [none,f32,] Third column. 1.074 5.535 -4.464 0.606 -2.011 15.397 1.475 1.811 5.687 2.248 7.663 -7.789 6.355 17.374 6.767 We see that indeed, it has three columns, with our given names. Now, let's assume that you want to make a two-element vector column from the values in the ‘def’ and ‘ghi’ columns. To do that, you can use the ‘--tovector’ option like below. As the name suggests, ‘--tovector’ will merge the rows of the two columns into one vector column with multiple values in each row. $ asttable table.fits -YO --tovector=def,ghi # Column 1: abc [none,f32 ,] First column. # Column 2: def-VECTOR [none,f32(2),] Vector by merging multiple cols. 1.074 5.535 -4.464 0.606 -2.011 15.397 1.475 1.811 5.687 2.248 7.663 -7.789 6.355 17.374 6.767 If you ignore the metadata, this doesn't seem to have changed anything! You see that each line of numbers still has three "tokens" (to distinguish them from "columns"). But once you look at the metadata, you only see metadata for two columns, not three. If you look closely, the numeric data type of the newly added fourth column is '‘f32(2)’' (look above; previously it was ‘f32’). The ‘(2)’ shows that the second column contains two numbers/tokens not one. If your vector column consisted of 3681 numbers, this would be ‘f32(3681)’. Looking again at the metadata, we see that ‘--tovector’ has also created a new name and comments for the new column. This is done all the time to avoid confusion with the old columns. Let's confirm that the newly added column is indeed a single column but with two values. To do this, with the command below, we'll write the output into a FITS table. In the same command, let's also give a more suitable name for the new merged/vector column). We can get a first confirmation by looking at the table's metadata in the second command below: $ asttable table.fits -YO --tovector=def,ghi --output=vec.fits \ --colmetadata=2,vector,nounits,"New vector column." $ asttable vec.fits -i -------- vec.fits (hdu: 1) ------- ----- ---- ------- No.Name Units Type Comment ------- ----- ---- ------- 1 abc none float32 First column. 2 vector nounits float32(2) New vector column. -------- Number of rows: 5 -------- A more robust confirmation would be to print the values in the newly added ‘vector’ column. As expected, asking for a single column with ‘--column’ (or ‘-c’) will given us two numbers per row/line (instead of one!). $ asttable vec.fits -c vector -YO # Column 1: vector [nounits,f32(2),] New vector column. 5.535 -4.464 -2.011 15.397 1.811 5.687 7.663 -7.789 17.374 6.767 If you want to keep the original single-valued columns that went into the vector column, you can use the ‘--keepvectfin’ option (read it as "KEEP VECtor To/From Inputs"): $ asttable table.fits -YO --tovector=def,ghi --keepvectfin \ --colmetadata=4,vector,nounits,"New vector column." # Column 1: abc [none ,f32 ,] First column. # Column 2: def [none ,f32 ,] Second column. # Column 3: ghi [none ,f32 ,] Third column. # Column 4: vector [nounits,f32(2),] New vector column. 1.074 5.535 -4.464 5.535 -4.464 0.606 -2.011 15.397 -2.011 15.397 1.475 1.811 5.687 1.811 5.687 2.248 7.663 -7.789 7.663 -7.789 6.355 17.374 6.767 17.374 6.767 Now that you know how to create vector columns, let's assume you have the inverse scenario: you want to extract one of the values of a vector column into a separate single-valued column. To do this, you can use the ‘--fromvector’ option. The ‘--fromvector’ option takes the name (or counter) of a vector column, followed by any number of integer counters (counting from 1). It will extract those elements into separate single-valued columns. For example, let's assume you want to extract the second element of the ‘defghi’ column in the file you made before: $ asttable vec.fits --fromvector=vector,2 -YO # Column 1: abc [none ,f32,] First column. # Column 2: vector-2 [nounits,f32,] New vector column. 1.074 -4.464 0.606 15.397 1.475 5.687 2.248 -7.789 6.355 6.767 Just like the case with ‘--tovector’ above, if you want to keep the input vector column, use ‘--keepvectfin’. This feature is useful in scenarios where you want to select some rows based on a single element (or multiple) of the vector column. *Vector columns and FITS ASCII tables:* As mentioned above, the FITS standard only recognizes vector columns in its Binary table format (the default FITS table format in Gnuastro). You can still use the ‘--tableformat=fits-ascii’ option to write your tables in the FITS ASCII format (see *note Input output options::). In this case, if a vector column is present, it will be written as separate single-element columns to avoid loosing information (as if you run called ‘--fromvector’ on all the elements of the vector column). A warning is printed if this occurs. For an application of the vector column concepts introduced here on MUSE data, see the 3D data cube tutorial and in particular these two sections: *note 3D measurements and spectra:: and *note Extracting a single spectrum and plotting it::. ---------- Footnotes ---------- (1) <https://www.eso.org/sci/facilities/develop/instruments/muse.html>  File: gnuastro.info, Node: Column arithmetic, Next: Operation precedence in Table, Prev: Vector columns, Up: Table 5.3.3 Column arithmetic ----------------------- In many scenarios, you want to apply some kind of operation on the columns and save them in another table or feed them into another program. With Table you can do a rich set of operations on the contents of one or more columns in a table, and save the resulting values as new column(s) in the output table. For seeing the precedence of Column arithmetic in relation to other Table operators, see *note Operation precedence in Table::. To enable column arithmetic, the first 6 characters of the value to ‘--column’ (‘-c’) should be the activation word '‘arith ’' (note the space character in the end, after '‘arith’'). After the activation word, you can use reverse polish notation to identify the operators and their operands, see *note Reverse polish notation::. Just note that white-space characters are used between the tokens of the arithmetic expression and that they are meaningful to the command-line environment. Therefore the whole expression (including the activation word) has to be quoted on the command-line or in a shell script (see the examples below). To identify a column you can directly use its name, or specify its number (counting from one, see *note Selecting table columns::). When you are giving a column number, it is necessary to prefix the number with a ‘$’, similar to AWK. Otherwise the number is not distinguishable from a constant number to use in the arithmetic operation. For example, with the command below, the first two columns of ‘table.fits’ will be printed along with a third column that is the result of multiplying the first column with $10^{10}$ (for example, to convert wavelength from Meters to Angstroms). Note that without the '<$>', it is not possible to distinguish between "1" as a column-counter, or "1" as a constant number to use in the arithmetic operation. Also note that because of the significance of <$> for the command-line environment, the single-quotes are the recommended quoting method (as in an AWK expression), not double-quotes (for the significance of using single quotes see the box below). $ asttable table.fits -c1,2 -c'arith $1 1e10 x' *Single quotes when string contains <$>*: On the command-line, or in shell-scripts, <$> is used to expand variables, for example, ‘echo $PATH’ prints the value (a string of characters) in the variable ‘PATH’, it will not simply print ‘$PATH’. This operation is also permitted within double quotes, so ‘echo "$PATH"’ will produce the same output. This is good when printing values, for example, in the command below, ‘$PATH’ will expand to the value within it. $ echo "My path is: $PATH" If you actually want to return the literal string ‘$PATH’, not the value in the ‘PATH’ variable (like the scenario here in column arithmetic), you should put it in single quotes like below. The printed value here will include the ‘$’, please try it to see for yourself and compare to above. $ echo 'My path is: $PATH' Therefore, when your column arithmetic involves the <$> sign (to specify columns by number), quote your ‘arith ’ string with a single quotation mark. Otherwise you can use both single or double quotes. *Manipulate all columns in one call using <$_all>*: Usually we manipulate one column in one call of column arithmetic. For instance, with the command below the elements of the ‘AWAV’ column will be sumed. $ asttable table.fits -c'arith AWAV sumvalue' But sometimes, we want to manipulate more than one column with the same expression. For example we want to sum all the elements of all the columns. In this case we could use the following command (assuming that the table has four different ‘AWAV-*’ columns): $ asttable table.fits -c'arith AWAV-1 sumvalue' \ -c'arith AWAV-2 sumvalue' \ -c'arith AWAV-3 sumvalue' \ -c'arith AWAV-4 sumvalue' To avoid repetition and mistakes, instead of using column arithmetic many times, we can use the ‘$_all’ identifier. When column arithmetic confronts this special string, it will repeat the expression for all the columns in the input table. Therefore the command above can be written as: $ asttable table.fits -c'arith $_all sumvalue' Alternatively, if the columns have meta-data and the first two are respectively called ‘AWAV’ and ‘SPECTRUM’, the command above is equivalent to the command below. Note that the character '<$>' is no longer necessary in this scenario (because names will not be confused with numbers): $ asttable table.fits -cAWAV,SPECTRUM -c'arith AWAV 1e10 x' Comparison of the two commands above clearly shows why it is recommended to use column names instead of numbers. When the columns have descriptive names, the command/script actually becomes much more readable, describing the intent of the operation. It is also independent of the low-level table structure: for the second command, the column numbers of the ‘AWAV’ and ‘SPECTRUM’ columns in ‘table.fits’ is irrelevant. Column arithmetic changes the values of the data within the column. So the old column metadata cannot be used any more. By default the output column of the arithmetic operation will be given a generic metadata (for example, its name will be ‘ARITH_1’, which is hardly useful!). But metadata are critically important and it is good practice to always have short, but descriptive, names for each columns, units and also some comments for more explanation. To add metadata to a column, you can use the ‘--colmetadata’ option that is described in *note Invoking asttable:: and *note Operation precedence in Table::. Since the arithmetic expressions are a value to ‘--column’, it does not necessarily have to be a separate option, so the commands above are also identical to the command below (note that this only has one ‘-c’ option). Just be very careful with the quoting! With the ‘--colmetadata’ option, we are also giving a name, units and a comment to the third column. $ asttable table.fits -cAWAV,SPECTRUM,'arith AWAV 1e10 x' \ --colmetadata=3,AWAV_A,angstrom,"Wavelength (in Angstroms)" In case you need to append columns from other tables (with ‘--catcolumnfile’), you can use those extra columns in column arithmetic also. The easiest, and most robust, way is that your columns of interest (in all files whose columns are to be merged) have different names. In this scenario, you can simply use the names of the columns you plan to append. If there are similar names, note that by default Table appends a ‘-N’ to similar names (where ‘N’ is the file counter given to ‘--catcolumnfile’, see the description of ‘--catcolumnfile’ for more). Using column numbers can get complicated: if the number is smaller than the main input's number of columns, the main input's column will be used. Otherwise (when the requested column number is larger than the main input's number of columns), the final output (after appending all the columns from all the possible files) column number will be used. Almost all the arithmetic operators of *note Arithmetic operators:: are also supported for column arithmetic in Table. In particular, the few that are not present in the Gnuastro library(1) are not yet supported for column arithmetic. Besides the operators in *note Arithmetic operators::, several operators are only available in Table to use on table columns. ‘wcs-to-img’ Convert the given WCS positions to image/dataset coordinates based on the number of dimensions in the WCS structure of ‘--wcshdu’ extension/HDU in ‘--wcsfile’. It will output the same number of columns. The first popped operand is the last FITS dimension. For example, the two commands below (which have the same output) will produce 5 columns. The first three columns are the input table's ID, RA and Dec columns. The fourth and fifth columns will be the pixel positions in ‘image.fits’ that correspond to each RA and Dec. $ asttable table.fits -cID,RA,DEC,'arith RA DEC wcs-to-img' \ --wcsfile=image.fits $ asttable table.fits -cID,RA -cDEC \ -c'arith RA DEC wcs-to-img' --wcsfile=image.fits ‘img-to-wcs’ Similar to ‘wcs-to-img’, except that image/dataset coordinates are converted to WCS coordinates. ‘eq-j2000-to-flat’ Convert spherical RA and Dec (in Julian year 2000.0 equatorial coordinates; which are the most common) into RA and Dec on a flat surface based on the given reference point and projection. The full details of the operands to this operator are given below, but let's start with a practical example to show the concept. At (or very near) the reference point the output of this operator will be the same as the input. But as you move away from the reference point, distortions due to the particular projection will gradually cause changes in the output (when compared to the input). For example if you simply plot RA and Dec without this operator, a circular annulus on the sky will become elongated as the declination of its center goes farther from the equator. For a demonstration of the difference between curved and flat RA and Decs, see *note Pointings that account for sky curvature:: in the Tutorials chapter. Let's assume you want to plot a set of RA and Dec points (defined on a spherical surface) in a paper (a flat surface) and that ‘table.fits’ contains the RA and Dec in columns that are called ‘RA’ and ‘DEC’. With the command below, the points will be converted to flat-RA and flat-Dec using the Gnomonic projection (which is known as ‘TAN’ in the FITS WSC standard; see the description of the first popped operand below): $ asttable table.fits \ -c'arith RA set-r DEC set-d \ r d r meanvalue d meanvalue TAN \ eq-j2000-to-flat' As you see, the RA and Dec (‘r’ and ‘d’) are the last two operators that are popped. Before them, the reference point's coordinates are calculated from the mean of the RA and Decs ('‘r meanvalue’' and '‘d meanvalue’'), and the first popped operand is the projection (‘TAN’). We are using the mean RA and Dec as the reference point since we are assuming that this is the only set of points you want to convert. In case you have to plot multiple sets of points in the same plot, you should give the same reference point in each separate conversion; like the example below: $ ref_ra=123.45 $ ref_dec=-6.789 $ asttable table-1.fits --output=flat-1.txt \ -c'arith RA DEC '$ref_ra' '$ref_dec' TAN \ eq-j2000-to-flat' $ asttable table-2.fits --output=flat-2.txt \ -c'arith RA DEC '$ref_ra' '$ref_dec' TAN \ eq-j2000-to-flat' This operator takes 5 operands: 1. The _first_ popped operand (closest to the operator) is the standard FITS WCS projection to use; and should contain a single element (not a column). The full list of projections can be seen in the description of the ‘--ctype’ option in *note Align pixels with WCS considering distortions::. The most common projection for smaller fields of view is ‘TAN’ (Gnomonic), but when your input catalog contains large portions of the sky, projections like ‘MOL’ (Mollweide) should be used. This is because distortions caused by the ‘TAN’ projection can become very significant after a couple of degrees from the reference point. 2. The _second_ popped operand is the reference point's declination; and should contain a single value (not a column). 3. The _third_ popped operand is the reference point's right ascension; and should contain a single value (not a column). 4. The _fourth_ popped operand is the declination column of your input table (the points that will be converted). 5. The _fifth_ popped operand is the right ascension column of your input table (the points that will be converted). ‘eq-j2000-from-flat’ The inverse of ‘eq-j2000-to-flat’. In other words, you have a set of points defined on the flat RA and Dec (after the projection from spherical to flat), but you want to map them to spherical RA and Dec. For an example, see *note Pointings that account for sky curvature:: in the Gnuastro tutorials. ‘distance-flat’ Return the distance between two points assuming they are on a flat surface. Note that each point needs two coordinates, so this operator needs four operands (currently it only works for 2D spaces). The first and second popped operands are considered to belong to one point and the third and fourth popped operands to the second point. Each of the input points can be a single coordinate or a full table column (containing many points). In other words, the following commands are all valid: $ asttable table.fits \ -c'arith X1 Y1 X2 Y2 distance-flat' $ asttable table.fits \ -c'arith X Y 12.345 6.789 distance-flat' $ asttable table.fits \ -c'arith 12.345 6.789 X Y distance-flat' In the first case we are assuming that ‘table.fits’ has the following four columns ‘X1’, ‘Y1’, ‘X2’, ‘Y2’. The returned column by this operator will be the difference between two points in each row with coordinates like the following (‘X1’, ‘Y1’) and (‘X2’, ‘Y2’). In other words, for each row, the distance between different points is calculated. In the second and third cases (which are identical), it is assumed that ‘table.fits’ has the two columns ‘X’ and ‘Y’. The returned column by this operator will be the difference of each row with the fixed point at (12.345, 6.789). ‘distance-on-sphere’ Return the spherical angular distance (along a great circle, in degrees) between the given two points. Note that each point needs two coordinates (in degrees), so this operator needs four operands. The first and second popped operands are considered to belong to one point and the third and fourth popped operands to the second point. Each of the input points can be a single coordinate or a full table column (containing many points). In other words, the following commands are all valid: $ asttable table.fits \ -c'arith RA1 DEC1 RA2 DEC2 distance-on-sphere' $ asttable table.fits \ -c'arith RA DEC 9.876 5.432 distance-on-sphere' $ asttable table.fits \ -c'arith 9.876 5.432 RA DEC distance-on-sphere' In the first case we are assuming that ‘table.fits’ has the following four columns ‘RA1’, ‘DEC1’, ‘RA2’, ‘DEC2’. The returned column by this operator will be the difference between two points in each row with coordinates like the following (‘RA1’, ‘DEC1’) and (‘RA2’, ‘DEC2’). In other words, for each row, the angular distance between different points is calculated. In the second and third cases (which are identical), it is assumed that ‘table.fits’ has the two columns ‘RA’ and ‘DEC’. The returned column by this operator will be the difference of each row with the fixed point at (9.876, 5.432). The distance (along a great circle) on a sphere between two points is calculated with the equation below, where $r_1$, $r_2$, $d_1$ and $d_2$ are the right ascensions and declinations of points 1 and 2. $$\cos(d)=\sin(d_1)\sin(d_2)+\cos(d_1)\cos(d_2)\cos(r_1-r_2)$$ ‘ra-to-degree’ Convert the hour-wise Right Ascension (RA) string, in the sexagesimal format of ‘_h_m_s’ or ‘_:_:_’, to degrees. Note that the input column has to have a string format. In FITS tables, string columns are well-defined. For plain-text tables, please follow the standards defined in *note Gnuastro text table format::, otherwise the string column will not be read. $ asttable catalog.fits -c'arith RA ra-to-degree' $ asttable catalog.fits -c'arith $5 ra-to-degree' ‘dec-to-degree’ Convert the sexagesimal Declination (Dec) string, in the format of ‘_d_m_s’ or ‘_:_:_’, to degrees (a single floating point number). For more details please see the ‘ra-to-degree’ operator. ‘degree-to-ra’ Convert degrees (a column with a single floating point number) to the Right Ascension, RA, string (in the sexagesimal format hours, minutes and seconds, written as ‘_h_m_s’). The output will be a string column so no further mathematical operations can be done on it. The output file can be in any format (for example, FITS or plain-text). If it is plain-text, the string column will be written following the standards described in *note Gnuastro text table format::. ‘degree-to-dec’ Convert degrees (a column with a single floating point number) to the Declination, Dec, string (in the format of ‘_d_m_s’). See the ‘degree-to-ra’ for more on the format of the output. ‘date-to-sec’ Return the number of seconds from the Unix epoch time (00:00:00 Thursday, January 1st, 1970). The input (popped) operand should be a string column in the FITS date format (most generally: ‘YYYY-MM-DDThh:mm:ss.ddd...’). The returned operand will be named ‘UNIXSEC’ (short for Unix-seconds) and will be a 64-bit, signed integer, see *note Numeric data types::. If the input string has sub-second precision, it will be ignored because floating point numbers cannot accurately store numbers with many significant digits. To preserve sub-second precision, please use ‘date-to-millisec’. For example, in the example below we are using this operator, in combination with the ‘--keyvalue’ option of the Fits program, to sort your desired FITS files by observation date (value in the ‘DATE-OBS’ keyword in example below): $ astfits *.fits --keyvalue=DATE-OBS --colinfoinstdout \ | asttable -cFILENAME,'arith DATE-OBS date-to-sec' \ --colinfoinstdout \ | asttable --sort=UNIXSEC If you do not need to see the Unix-seconds any more, you can add a ‘-cFILENAME’ (short for ‘--column=FILENAME’) at the end. For more on ‘--keyvalue’, see *note Keyword inspection and manipulation::. ‘date-to-millisec’ Return the number of milli-seconds from the Unix epoch time (00:00:00 Thursday, January 1st, 1970). The input (popped) operand should be a string column in the FITS date format (most generally: ‘YYYY-MM-DDThh:mm:ss.ddd...’, where ‘.ddd’ is the optional sub-second component). The returned operand will be named ‘UNIXMILLISEC’ (short for Unix milli-seconds) and will be a 64-bit, signed integer, see *note Numeric data types::. The returned value is not a floating point type because for large numbers, floating point data types loose single-digit precision (which is important here). Other than the units of the output, this operator behaves similarly to ‘date-to-sec’. See the description of that operator for an example. ‘sorted-to-interval’ Given a single column (which must be already sorted and have a numeric data type), return two columns: the first returned column is the minimum and the second returned column is the maximum value of the interval of each row row. The maximum of each row is equal to the minimum of the previous row; thus creating a contiguous interval coverage of the input column's range in all rows. The minimum value of the first row and maximum of the last row will be smaller/larger than the respective row of the input (based on the distance to the next/previous element). This is done to ensure that if your input has a fixed interval length between all elements, the first and last intervals also have that fixed length. For example, with the command below, we'll use this operator on a hypothetical radial profile. Note how the intervals are contiguous even though the radius values are not equally distant (if the row with a radius of 2.5 didn't exist, the intervals would all be the same length). For another example of the usage of this operator, see the example in the description of ‘--customtable’ in *note MakeProfiles profile settings::. $ cat radial-profile.txt # Column 1: RADIUS [pix,f32,] Distance to center in pixels. # Column 2: MEAN [ADU,f32,] Mean value at that radius. 0 100 1 40 2 30 2.5 25 3 20 $ asttable radial-profile.txt --txtf32f=fixed --txtf32p=3 \ -c'arith RADIUS sorted-to-interval',MEAN -0.500 0.500 100.000 0.500 1.500 40.000 1.500 2.250 30.000 2.250 2.750 25.000 2.750 3.250 20.000 Such intervals can be useful in scenarios like generating the input to ‘--customtable’ in MakeProfiles (see *note MakeProfiles profile settings::) from a radial profile (see *note Generate radial profile::). ---------- Footnotes ---------- (1) For a list of the Gnuastro library arithmetic operators, please see the macros starting with ‘GAL_ARITHMETIC_OP’ and ending with the operator name in *note Arithmetic on datasets::.  File: gnuastro.info, Node: Operation precedence in Table, Next: Invoking asttable, Prev: Column arithmetic, Up: Table 5.3.4 Operation precedence in Table ----------------------------------- The Table program can do many operations on the rows and columns of the input tables and they are not always applied in the order you call the operation on the command-line. In this section we will describe which operation is done before/after which operation. Knowing this precedence table is important to avoid confusion when you ask for more than one operation. For a description of each option, please see *note Invoking asttable::. By default, column-based operations will be done first. You can ask for switching to row-based operations to be done first, using the ‘--rowfirst’ option. *Pipes for different precedence:* It may happen that your desired series of operations cannot be done with the precedence mentioned below (in one command). In this case, you can pipe the output of one call to ‘asttable’ to another ‘asttable’. Just don't forget to give ‘-O’ (or ‘--colinfoinstdout’) to the first instance (so the column metadata are also passed to the next instance). Without metadata, all numbers will be read as double-precision (see *note Gnuastro text table format::; recall that piping is done in plain text format), vector columns will be broken into single-valued columns, and column names, units and comments will be lost. At the end of this section, there is an example of doing this. Input table information The first set of operations that will be preformed (if requested) are the printing of the input table information. Therefore, when the following options are called, the column data are not read at all. Table simply reads the main input's column metadata (name, units, numeric data type and comments), and the number of rows and prints them. Table then terminates and no other operation is done. These can therefore be called at the end of an arbitrarily long Table command. When you have forgot some information about the input table. You can then delete these options and continue writing the command (using the shell's history to retrieve the previous command with an up-arrow key). At any time only a single one of the options in this category may be called. The order of checking for these options is therefore important: in the same order that they are described below: Column and row information (‘--information’ or ‘-i’) Print the list of input columns and the metadata of each column in a single row. This includes the column name, numeric data type, units and comments of each column within a separate row of the output. Finally, print the number of rows. Number of columns (‘--info-num-cols’) Print the number of columns in the input table. Only a single integer (number of columns) is printed before Table terminates. Number of rows (‘--info-num-rows’) Print the number of rows in the input table. Only a single integer (number of rows) is printed before Table terminates. Column selection (‘--column’) When this option is given, only the columns given to this option (from the main input) will be used for all future steps. When ‘--column’ (or ‘-c’) is not given, then all the main input's columns will be used in the next steps. Column-based operations By default the following column-based operations will be done before the row-based operations in the next item. If you need to give precedence to row-based operations, use ‘--rowfirst’. Column(s) from other file(s): ‘--catcolumnfile’ When column concatenation (addition) is requested, columns from other tables (in other files, or other HDUs of the same FITS file) will be added after the existing columns are read from the main input. In one command, you can call ‘--catcolumnfile’ multiple times to allow addition of columns from many files. Therefore you can merge the columns of various tables into one table in this step (at the start), then start adding/limiting the rows, or building vector columns, . If any of the row-based operations below are requested in the same ‘asttable’ command, they will also be applied to the rows of the added columns. However, the conditions to keep/reject rows can only be applied to the rows of the columns in main input table (not the columns that are added with these options). Extracting single-valued columns from vectors (‘--fromvector’) Once all the input columns are read into memory, if any of them are vectors, you can extract a single-valued column from the vector columns at this stage. For more on vector columns, see *note Vector columns::. Creating vector columns (‘--tovector’) After column arithmetic, there is no other way to add new columns so the ‘--tovector’ operator is applied at this stage. You can use it to merge multiple columns that are available in this stage to a single vector column. For more, see *note Vector columns::. Column arithmetic Once the final rows are selected in the requested order, column arithmetic is done (if requested). For more on column arithmetic, see *note Column arithmetic::. Row-based operations Row-based operations only work within the rows of existing columns when they are activated. By default row-based operations are activated after column-based operations (which are mentioned above). If you need to give precedence to row-based operations, use ‘--rowfirst’. Rows from other file(s) (‘--catrowfile’) With this feature, you can import rows from other tables (in other files, or other HDUs of the same FITS file). The same column selection of ‘--column’ is applied to the tables given to this option. The column metadata (name, units and comments) will be taken from the main input. Two conditions are mandatory for adding rows: • The number of columns used from the new tables must be equal to the number of columns in memory, by the time control reaches here. • The data type of each column (see *note Numeric data types::) should be the same as the respective column in memory by the time control reaches here. If the data types are different, you can use the type conversion operators of column arithmetic which has higher precedence (and will therefore be applied before this by default). For more on type conversion, see *note Numerical type conversion operators:: and *note Column arithmetic::). Row selection by value in a column The following operations select rows based on the values in them. A more complete description of each of these options is given in *note Invoking asttable::. • ‘--range’: only keep rows where the value in the given column is within a certain interval. • ‘--inpolygon’: only keep rows where the value is within the polygon of ‘--polygon’. • ‘--outpolygon’: only keep rows outside the polygon of ‘--polygon’. • ‘--equal’: only keep rows with an specified value in given column. • ‘--notequal’: only keep rows without specified value in given column. • ‘--noblank’: only keep rows that are not blank in the given column(s). These options can be called any number of times (to limit the final rows based on values in different columns for example). Since these are row-rejection operations, their internal order is irrelevant. In other words, it makes no difference if ‘--equal’ is called before or after ‘--range’ for example. As a side-effect, because NaN/blank values are defined to fail on any condition, these operations will also remove rows with NaN/blank values in the specified column they are checking. Also, the columns that are used for these operations do not necessarily have to be in the final output table (you may not need the column after doing the selection based on it). By default, these options are applied after merging columns from other tables. However, currently, the column given to these options can only come from the main input table. If you need to apply these operations on columns from ‘--catcolumnfile’, pipe the output of one instance of Table with ‘--catcolumnfile’ into another instance of Table as suggested in the box above this list. These row-based operations options are applied first because the speed of later operations can be greatly affected by the number of rows. For example, if you also call the ‘--sort’ option, and your row selection will result in 50 rows (from an input of 10000 rows), limiting the number of rows first will greatly speed up the sorting in your final output. Sorting (‘--sort’) Sort of the rows based on values in a certain column. The column to sort by can only come from the main input table columns (not columns that may have been added with ‘--catcolumnfile’). Row selection (by position) • ‘--head’: keep only requested number of top rows. • ‘--tail’: keep only requested number of bottom rows. • ‘--rowrandom’: keep only a random number of rows. • ‘--rowrange’: keep only rows within a certain positional interval. These options limit/select rows based on their position within the table (not their value in any certain column). Transpose vector columns (‘--transpose’) Transposing vector columns will not affect the number or metadata of columns, it will just re-arrange them in their 2D structure. As a result, after transposing, the number of rows changes, as well as the number of elements in each vector column. See the description of this option in *note Invoking asttable:: for more (with an example). Column metadata (‘--colmetadata’) Once the structure of the final table is set, you can set the column metadata just before finishing. Output row selection (‘--noblankend’) Only keep the output rows that do not have a blank value in the given column(s). For example, you may need to apply arithmetic operations on the columns (through *note Column arithmetic::) before rejecting the undesired rows. After the arithmetic operation is done, you can use the ‘where’ operator to set the non-desired columns to NaN/blank and use ‘--noblankend’ option to remove them just before writing the output. In other scenarios, you may want to remove blank values based on columns in another table. To help in readability, you can also use the final column names that you set with ‘--colmetadata’! See the example below for applying any generic value-based row selection based on ‘--noblankend’. As an example, let's review how Table interprets the command below. We are assuming that ‘table.fits’ contains at least three columns: ‘RA’, ‘DEC’ and ‘PARAM’ and you only want the RA and Dec of the rows where $p\times 2<5$ ($p$ is the value of each row in the ‘PARAM’ column). $ asttable table.fits -cRA,DEC --noblankend=MULTIP \ -c'arith PARAM 2 x set-i i i 5 gt nan where' \ --colmetadata=3,MULTIP,unit,"Description of column" Due to the precedence described in this section, Table does these operations (which are independent of the order of the operations written on the command-line): 1. At the start (with ‘-cRA,DEC’), Table reads the ‘RA’ and ‘DEC’ columns. 2. In between all the operations in the command above, Column arithmetic (with ‘-c'arith ...'’) has the highest precedence. So the arithmetic operation is done and stored as a new (third) column. In this arithmetic operation, we multiply all the values of the ‘PARAM’ column by 2, then set all those with a value larger than 5 to NaN (for more on understanding this operation, see the '‘set-’' and '‘where’' operators in *note Arithmetic operators::). 3. Updating column metadata (with ‘--colmetadata’) is then done to give a name (‘MULTIP’) to the newly calculated (third) column. During the process, besides a name, we also set a unit and description for the new column. These metadata entries are _very important_, so always be sure to add metadata after doing column arithmetic. 4. The lowest precedence operation is ‘--noblankend=MULTIP’. So only rows that are not blank/NaN in the ‘MULTIP’ column are kept. 5. Finally, the output table (with three columns) is written to the command-line. If you also want to print the column metadata, you can use the ‘-O’ (or ‘--colinfoinstdout’) option. Alternatively, if you want the output in a file, you can use the ‘--output’ option to save the table in FITS or plain-text format. It may happen that your desired operation needs a separate precedence. In this case you can pipe the output of Table into another call of Table and use the ‘-O’ (or ‘--colinfoinstdout’) option to preserve the metadata between the two calls. For example, let's assume that you want to sort the output table from the example command above based on the new ‘MULTIP’ column. Since sorting is done prior to column arithmetic, you cannot do it in one command, but you can circumvent this limitation by simply piping the output (including metadata) to another call to Table: asttable table.fits -cRA,DEC --noblankend=MULTIP --colinfoinstdout \ -c'arith PARAM 2 x set-i i i 5 gt nan where' \ --colmetadata=3,MULTIP,unit,"Description of column" \ | asttable --sort=MULTIP --output=selected.fits  File: gnuastro.info, Node: Invoking asttable, Prev: Operation precedence in Table, Up: Table 5.3.5 Invoking Table -------------------- Table will read/write, select, modify, or show the information of the rows and columns in recognized Table formats (including FITS binary, FITS ASCII, and plain text table files, see *note Tables::). Output columns can also be determined by number or regular expression matching of column names, units, or comments. The executable name is ‘asttable’ with the following general template $ asttable [OPTION...] InputFile One line examples: ## Get the table column information (name, units, or data type), and ## the number of rows: $ asttable table.fits --information ## Print columns named RA and DEC, followed by all the columns where ## the name starts with "MAG_": $ asttable table.fits --column=RA --column=DEC --column=/^MAG_/ ## Similar to the above, but with one call to `--column' (or `-c'), ## also sort the rows by the input's photometric redshift (`Z_PHOT') ## column. To confirm the sort, you can add `Z_PHOT' to the columns ## to print. $ asttable table.fits -cRA,DEC,/^MAG_/ --sort=Z_PHOT ## Similar to the above, but only print rows that have a photometric ## redshift between 2 and 3. $ asttable table.fits -cRA,DEC,/^MAG_/ --range=Z_PHOT,2:3 ## Only print rows with a value in the 10th column above 100000: $ asttable table.txt --range=10,10e5,inf ## Only print the 2nd column, and the third column multiplied by 5, ## Save the resulting two columns in `table.txt' $ asttable table.fits -c2,'arith $2 5 x' -otable.fits ## Sort the output columns by the third column, save output: $ asttable table.fits --sort=3 -ooutput.txt ## Subtract the first column from the second in `cat.txt' (can also ## be a FITS table) and keep the third and fourth columns. $ asttable cat.txt -c'arith $2 $1 -',3,4 -ocat.fits ## Convert sexagesimal coordinates to degrees (same can be done in a ## large table given as argument). $ echo "7h34m35.5498 31d53m14.352s" | asttable ## Convert RA and Dec in degrees to sexagesimal (same can be done in a ## large table given as argument). $ echo "113.64812416667 31.88732" \ | asttable -c'arith $1 degree-to-ra $2 degree-to-dec' ## Extract columns 1 and 2, as well as all those between 12 to 58: $ asttable table.fits -c1,2,$(seq -s',' 12 58) Table's input dataset can be given either as a file or from Standard input (piped from another program, see *note Standard input::). In the absence of selected columns, all the input's columns and rows will be written to the output. The full set of operations Table can do are described in detail below, but for a more high-level introduction to the various operations, and their precedence, see *note Operation precedence in Table::. If any output file is explicitly requested (with ‘--output’) the output table will be written in it. When no output file is explicitly requested the output table will be written to the standard output. If the specified output is a FITS file, the type of FITS table (binary or ASCII) will be determined from the ‘--tabletype’ option. If the output is not a FITS file, it will be printed as a plain text table (with space characters between the columns). When the output is not binary (for example standard output or a plain-text), the ‘--txtf32*’ or ‘--txtf64*’ options can be used for the formatting of floating point columns (see *note Printing floating point numbers::). When the columns are accompanied by meta-data (like column name, units, or comments), this information will also printed in the plain text file before the table, as described in *note Gnuastro text table format::. For the full list of options common to all Gnuastro programs please see *note Common options::. Options can also be stored in directory, user or system-wide configuration files to avoid repeating on the command-line, see *note Configuration files::. Table does not follow Automatic output that is common in most Gnuastro programs, see *note Automatic output::. Thus, in the absence of an output file, the selected columns will be printed on the command-line with no column information, ready for redirecting to other tools like ‘awk’. *Sexagesimal coordinates as floats in plain-text tables:* When a column is determined to be a floating point type (32-bit or 64-bit) in a plain-text table, it can contain sexagesimal values in the format of '‘_h_m_s’' (for RA) and '‘_d_m_s’' (for Dec), where the '‘_’'s are place-holders for numbers. In this case, the string will be immediately converted to a single floating point number (in units of degrees) and stored in memory with the rest of the column or table. Besides being useful in large tables, with this feature, conversion to sexagesimal coordinates to degrees becomes very easy, for example: echo "7h34m35.5498 31d53m14.352s" | asttable The inverse can also be done with the more general column arithmetic operators: echo "113.64812416667 31.88732" \ | asttable -c'arith $1 degree-to-ra $2 degree-to-dec' If you want to preserve the sexagesimal contents of a column, you should store that column as a string, see *note Gnuastro text table format::. ‘-i’ ‘--information’ Only print the column information in the specified table on the command-line and exit. Each column's information (number, name, units, data type, and comments) will be printed as a row on the command-line. If the column is a multi-value (vector) a ‘[N]’ is printed after the type, where ‘N’ is the number of elements within that vector. Note that the FITS standard only requires the data type (see *note Numeric data types::), and in plain text tables, no meta-data/information is mandatory. Gnuastro has its own convention in the comments of a plain text table to store and transfer this information as described in *note Gnuastro text table format::. This option will take precedence over all other operations in Table, so when it is called along with other operations, they will be ignored, see *note Operation precedence in Table::. This can be useful if you forget the identifier of a column after you have already typed some on the command-line. You can simply add a ‘-i’ to your already-written command (without changing anything) and run Table, to see the whole list of column names and information. Then you can use the shell history (with the up arrow key on the keyboard), and retrieve the last command with all the previously typed columns present, delete ‘-i’ and add the identifier you had forgot. ‘--info-num-cols’ Similar to ‘--information’, but only the number of the input table's columns will be printed as a single integer (useful in scripts for example). ‘--info-num-rows’ Similar to ‘--information’, but only the number of the input table's rows will be printed as a single integer (useful in scripts for example). ‘-c STR/INT’ ‘--column=STR/INT’ Set the output columns either by specifying the column number, or name. For more on selecting columns, see *note Selecting table columns::. If a value of this option starts with '‘arith ’', column arithmetic will be activated, allowing you to edit/manipulate column contents. For more on column arithmetic see *note Column arithmetic::. To ask for multiple columns this option can be used in two ways: 1) multiple calls to this option, 2) using a comma between each column specifier in one call to this option. These different solutions may be mixed in one call to Table: for example, '‘-cRA,DEC,MAG’', or '‘-cRA,DEC -cMAG’' are both equivalent to '‘-cRA -cDEC -cMAG’'. The order of the output columns will be the same order given to the option or in the configuration files (see *note Configuration file precedence::). This option is not mandatory, if no specific columns are requested, all the input table columns are output. When this option is called multiple times, it is possible to output one column more than once. *Sequence of columns:* when dealing with a large number catalogs (hundreds for example!), it will be frustrating, annoying and buggy to insert the columns manually. If you want to read all the input columns, you can use the special ‘_all’ value to ‘--column’ option. A more generic solution (for example if you want every second one, or all the columns within a special range) is to use the ‘seq’ command's features with an extra ‘-s','’ (so a comma is used as the "separator"). For example if you want columns 1, 2 and all columns between 12 to 58 (inclusive), you can use the following command: $ asttable table.fits -c1,2,$(seq -s',' 12 58) ‘-w FITS’ ‘--wcsfile=FITS’ FITS file that contains the WCS to be used in the ‘wcs-to-img’ and ‘img-to-wcs’ operators of *note Column arithmetic::. The extension name/number within the FITS file can be specified with ‘--wcshdu’. If the value to this option is '‘none’', no WCS will be written in the output. ‘-W STR’ ‘--wcshdu=STR’ FITS extension/HDU in the FITS file given to ‘--wcsfile’ (see the description of ‘--wcsfile’ for more). ‘-L FITS/TXT’ ‘--catcolumnfile=FITS/TXT’ Concatenate (or add, or append) the columns of this option's value (a filename) to the output columns. This option may be called multiple times (to add columns from more than one file into the final output), the columns from each file will be added in the same order that this option is called. The number of rows in the file(s) given to this option has to be the same as the input table (before any type of row-selection), see *note Operation precedence in Table::. By default all the columns of the given file will be appended, if you only want certain columns to be appended, use the ‘--catcolumns’ option to specify their name or number (see *note Selecting table columns::). Note that the columns given to ‘--catcolumns’ must be present in all the given files (if this option is called more than once with more than one file). If the file given to this option is a FITS file, it is necessary to also define the corresponding HDU/extension with ‘--catcolumnhdu’. Also note that no operation (such as row selection and arithmetic) is applied to the table given to this option. If the appended columns have a name, and their name is already present in the table before adding those columns, the column names of each file will be appended with a ‘-N’, where ‘N’ is a counter starting from 1 for each appended table. Just note that in the FITS standard (and thus in Gnuastro), column names are not case-sensitive. This is done because when concatenating columns from multiple tables (more than two) into one, they may have the same name, and it is not good practice to have multiple columns with the same name. You can disable this feature with ‘--catcolumnrawname’. Generally, you can use the ‘--colmetadata’ option to update column metadata in the same command, after all the columns have been concatenated. For example, let's assume you have two catalogs of the same objects (same number of rows) in different filters. Such that ‘f160w-cat.fits’ has a ‘MAGNITUDE’ column that has the magnitude of each object in the ‘F160W’ filter and similarly ‘f105w-cat.fits’, also has a ‘MAGNITUDE’ column, but for the ‘F105W’ filter. You can use column concatenation like below to import the ‘MAGNITUDE’ column from the ‘F105W’ catalog into the ‘F160W’ catalog, while giving each magnitude column a different name: asttable f160w-cat.fits --output=both.fits \ --catcolumnfile=f105w-cat.fits --catcolumns=MAGNITUDE \ --colmetadata=MAGNITUDE,MAG-F160W,log,"Magnitude in F160W" \ --colmetadata=MAGNITUDE-1,MAG-F105W,log,"Magnitude in F105W" For a more complete example, see *note Working with catalogs estimating colors::. *Loading external columns with Arithmetic:* an alternative way to load external columns into your output is to use column arithmetic (*note Column arithmetic::) In particular the ‘load-col-’ operator described in *note Loading external columns::. But this operator will load only one column per file/HDU every time it is called. So if you have many columns to insert, it is much faster to use ‘--catcolumnfile’. Because ‘--catcolumnfile’ will load all the columns in one opening of the file, and possibly even read them all into memory in parallel! ‘-u STR/INT’ ‘--catcolumnhdu=STR/INT’ The HDU/extension of the FITS file(s) that should be concatenated, or appended, by column with ‘--catcolumnfile’. If ‘--catcolumn’ is called more than once with more than one FITS file, it is necessary to call this option more than once. The HDUs will be loaded in the same order as the FITS files given to ‘--catcolumnfile’. ‘-C STR/INT’ ‘--catcolumns=STR/INT’ The column(s) in the file(s) given to ‘--catcolumnfile’ to append. When this option is not given, all the columns will be concatenated. See ‘--catcolumnfile’ for more. ‘--catcolumnrawname’ Do not modify the names of the concatenated (appended) columns, see description in ‘--catcolumnfile’. ‘--transpose’ Transpose (as in a matrix) the given vector column(s) individually. When this operation is done (see *note Operation precedence in Table::), only vector columns of the same data type and with the same number of elements should exist in the table. A usage of this operator is presented in the IFU spectroscopy tutorial in *note Extracting a single spectrum and plotting it::. As a generic example, see the commands below. The ‘in.txt’ table below has two vector columns (each with three elements) in two rows. After running ‘asttable’ with ‘--transpose’, you can see how the vector columns have two elements per row (‘u8(3)’ has been replaced by ‘u8(2)’), and that the table now has three rows. $ cat in.txt # Column 1: abc [nounits,u8(3),] First vector column. # Column 2: def [nounits,u8(3),] Second vector column. 111 112 113 211 212 213 121 122 123 221 222 223 $ asttable in.txt --transpose -O # Column 1: abc [nounits,u8(2),] First vector column. # Column 2: def [nounits,u8(2),] Second vector column. 111 121 211 221 112 122 212 222 113 123 213 223 ‘--fromvector=STR,INT[,INT[,INT]]’ Extract the given tokens/elements from the given vector column into separate single-valued columns. The input vector column can be identified by its name or counter, see *note Selecting table columns::. After the columns are extracted, the input vector is deleted by default. To preserve the input vector column, you can use ‘--keepvectfin’ described below. For a complete usage scenario see *note Vector columns::. ‘--tovector=STR/INT,STR/INT[,STR/INT]’ Move the given columns into a newly created vector column. The given columns can be identified by their name or counter, see *note Selecting table columns::. After the columns are copied, they are deleted by default. To preserve the inputs, you can use ‘--keepvectfin’ described below. For a complete usage scenario see *note Vector columns::. ‘-k’ ‘--keepvectfin’ Do not delete the input column(s) when using ‘--fromvector’ or ‘--tovector’. ‘-R FITS/TXT’ ‘--catrowfile=FITS/TXT’ Add the rows of the given file to the output table. The selected columns in the tables given to this option should have the same number and datatype and the rows before control reaches this phase (after column selection and column concatenation), for more see *note Operation precedence in Table::. For example, if ‘a.fits’, ‘b.fits’ and ‘c.fits’ have the columns ‘RA’, ‘DEC’ and ‘MAGNITUDE’ (possibly in different column-numbers in their respective table, along with many more columns), the command below will add their rows into the final output that will only have these three columns: $ asttable a.fits --catrowfile=b.fits --catrowhdu=1 \ --catrowfile=c.fits --catrowhdu=1 \ -cRA,DEC,MAGNITUDE --output=allrows.fits *Provenance of each row:* When merging rows from separate catalogs, it is important to keep track of the source catalog of each row (its provenance). To do this, you can use ‘--catrowfile’ in combination with the ‘constant’ operator and *note Column arithmetic::. For a working example of this scenario, see the example within the documentation of the ‘constant’ operator in *note Building new dataset and stack management::. *How to avoid repetition when adding rows:* this option will simply add the rows of multiple tables into one, it does not check their contents! Therefore if you use this option on multiple catalogs that may have some shared physical objects in some of their rows, those rows/objects will be repeated in the final table. In such scenarios, to avoid potential repetition, it is better to use *note Match:: (with ‘--notmatched’ and ‘--outcols=AAA,BBB’) instead of Table. For more on using Match for this scenario, see the description of ‘--outcols’ in *note Invoking astmatch::. ‘-X STR’ ‘--catrowhdu=STR’ The HDU/extension of the FITS file(s) that should be concatenated, or appended, by rows with ‘--catrowfile’. If ‘--catrowfile’ is called more than once with more than one FITS file, it is necessary to call this option more than once also (once for every FITS table given to ‘--catrowfile’). The HDUs will be loaded in the same order as the FITS files given to ‘--catrowfile’. ‘-O’ ‘--colinfoinstdout’ Add column metadata when the output is printed in the standard output. Usually the standard output is used for a fast visual check, or to pipe into other metadata-agnostic programs (like AWK) for further processing. So by default meta-data are not included. But when piping to other Gnuastro programs (where metadata can be interpreted and used) it is recommended to use this option and use column names in the next program. ‘-r STR,FLT:FLT’ ‘--range=STR,FLT:FLT’ Only output rows that have a value within the given range in the ‘STR’ column (can be a name or counter). Note that the range is only inclusive in the lower-limit. For example, with ‘--range=sn,5:20’ the output's columns will only contain rows that have a value in the ‘sn’ column (not case-sensitive) that is greater or equal to 5, and less than 20. Also you can use the comma for separating the values such as this ‘--range=sn,5,20’. For the precedence of this operation in relation to others, see *note Operation precedence in Table::. This option can be called multiple times (different ranges for different columns) in one run of the Table program. This is very useful for selecting the final rows from multiple criteria/columns. The chosen column does not have to be in the output columns. This is good when you just want to select using one column's values, but do not need that column anymore afterwards. For one example of using this option, see the example under ‘--sigclip-median’ in *note Invoking aststatistics::. ‘--inpolygon=STR1,STR2’ Only return rows where the given coordinates are inside the polygon specified by the ‘--polygon’ option. The coordinate columns are the given ‘STR1’ and ‘STR2’ columns, they can be a column name or counter (see *note Selecting table columns::). For the precedence of this operation in relation to others, see *note Operation precedence in Table::. Note that the chosen columns does not have to be in the output columns (which are specified by the ‘--column’ option). For example, if we want to select rows in the polygon specified in *note Dataset inspection and cropping::, this option can be used like this (you can remove the double quotations and write them all in one line if you remove the white-spaces around the colon separating the column vertices): asttable table.fits --inpolygon=RA,DEC \ --polygon="53.187414,-27.779152 \ : 53.159507,-27.759633 \ : 53.134517,-27.787144 \ : 53.161906,-27.807208" \ *Flat/Euclidean space: * The ‘--inpolygon’ option assumes a flat/Euclidean space so it is only correct for RA and Dec when the polygon size is very small like the example above. If your polygon is a degree or larger, it may not return correct results. Please get in touch if you need such a feature (see *note Suggest new feature::). ‘--outpolygon=STR1,STR2’ Only return rows where the given coordinates are outside the polygon specified by the ‘--polygon’ option. This option is very similar to the ‘--inpolygon’ option, so see the description there for more. ‘--polygon=STR’ ‘--polygon=FLT,FLT:FLT,FLT:...’ The polygon to use for the ‘--inpolygon’ and ‘--outpolygon’ options. This option is parsed in an identical way to the same option in the Crop program, so for more information on how to use it, see *note Crop options::. ‘-e STR,INT/FLT,...’ ‘--equal=STR,INT/FLT,...’ Only output rows that are equal to the given number(s) in the given column. The first argument is the column identifier (name or number, see *note Selecting table columns::), after that you can specify any number of values. For the precedence of this operation in relation to others, see *note Operation precedence in Table::. For example, ‘--equal=ID,5,6,8’ will only print the rows that have a value of 5, 6, or 8 in the ‘ID’ column. This option can also be called multiple times, so ‘--equal=ID,4,5 --equal=ID,6,7’ has the same effect as ‘--equal=4,5,6,7’. *Equality and floating point numbers:* Floating point numbers are only approximate values (see *note Numeric data types::). In this context, their equality depends on how the input table was originally stored (as a plain text table or as an ASCII/binary FITS table). If you want to select floating point numbers, it is strongly recommended to use the ‘--range’ option and set a very small interval around your desired number, do not use ‘--equal’ or ‘--notequal’. The ‘--equal’ and ‘--notequal’ options also work when the given column has a string type. In this case the given value to the option will also be parsed as a string, not as a number. When dealing with string columns, be careful with trailing white space characters (the actual value maybe adjusted to the right, left, or center of the column's width). If you need to account for such white spaces, you can use shell quoting. For example, ‘--equal=NAME," myname "’. *Strings with a comma (,):* When your desired column values contain a comma, you need to put a '‘\’' before the internal comma (within the value). Otherwise, the comma will be interpreted as a delimiter between multiple values, and anything after it will be interpreted as a separate string. For example, assume column ‘AB’ of your ‘table.fits’ contains this value: '‘cd,ef’' in your desired rows. To extract those rows, you should use the command below: $ asttable table.fits --equal=AB,cd\,ef ‘-n STR,INT/FLT,...’ ‘--notequal=STR,INT/FLT,...’ Only output rows that are _not_ equal to the given number(s) in the given column. The first argument is the column identifier (name or number, see *note Selecting table columns::), after that you can specify any number of values. For example, ‘--notequal=ID,5,6,8’ will only print the rows where the ‘ID’ column does not have value of 5, 6, or 8. This option can also be called multiple times, so ‘--notequal=ID,4,5 --notequal=ID,6,7’ has the same effect as ‘--notequal=4,5,6,7’. Be very careful if you want to use the non-equality with floating point numbers, see the special note under ‘--equal’ for more. This option also works when the given column has a string type, see the description under ‘--equal’ (above) for more. ‘-b STR[,STR[,STR]]’ ‘--noblank=STR[,STR[,STR]]’ Only output rows that are _not_ blank in the given column of the _input_ table. Like above, the columns can be specified by their name or number (counting from 1). This option can be called multiple times, so ‘--noblank=MAG --noblank=PHOTOZ’ is equivalent to ‘--noblank=MAG,PHOTOZ’. For the precedence of this operation in relation to others, see *note Operation precedence in Table::. For example, if ‘table.fits’ has blank values (NaN in floating point types) in the ‘magnitude’ and ‘sn’ columns, with ‘--noblank=magnitude,sn’, the output will not contain any rows with blank values in these two columns. If you want _all_ columns to be checked, simply set the value to ‘_all’ (in other words: ‘--noblank=_all’). This mode is useful when there are many columns in the table and you want a "clean" output table (with no blank values in any column): entering their name or number one-by-one can be buggy and frustrating. In this mode, no other column name should be given. For example, if you give ‘--noblank=_all,magnitude’, then Table will assume that your table actually has a column named ‘_all’ and ‘magnitude’, and if it does not, it will abort with an error. If you want to change column values using *note Column arithmetic:: (and set some to blank, to later remove), or you want to select rows based on columns that you have imported from other tables, you should use the ‘--noblankend’ option described below. Also, see *note Operation precedence in Table::. ‘-s STR’ ‘--sort=STR’ Sort the output rows based on the values in the ‘STR’ column (can be a column name or number). By default the sort is done in ascending/increasing order, to sort in a descending order, use ‘--descending’. For the precedence of this operation in relation to others, see *note Operation precedence in Table::. The chosen column does not have to be in the output columns. This is good when you just want to sort using one column's values, but do not need that column anymore afterwards. ‘-d’ ‘--descending’ When called with ‘--sort’, rows will be sorted in descending order. ‘-H INT’ ‘--head=INT’ Only print the given number of rows from the _top_ of the final table. Note that this option only affects the _output_ table. For example, if you use ‘--sort’, or ‘--range’, the printed rows are the first _after_ applying the sort sorting, or selecting a range of the full input. This option cannot be called with ‘--tail’, ‘--rowrange’ or ‘--rowrandom’. For the precedence of this operation in relation to others, see *note Operation precedence in Table::. If the given value to ‘--head’ is 0, the output columns will not have any rows and if it is larger than the number of rows in the input table, all the rows are printed (this option is effectively ignored). This behavior is taken from the ‘head’ program in GNU Coreutils. ‘-t INT’ ‘--tail=INT’ Only print the given number of rows from the _bottom_ of the final table. See ‘--head’ for more. This option cannot be called with ‘--head’, ‘--rowrange’ or ‘--rowrandom’. ‘--rowrange=INT,INT’ Only return the rows within the requested positional range (inclusive on both sides). Therefore, ‘--rowrange=5,7’ will return 3 of the input rows, row 5, 6 and 7. This option will abort if any of the given values is larger than the total number of rows in the table. For the precedence of this operation in relation to others, see *note Operation precedence in Table::. With the ‘--head’ or ‘--tail’ options you can only see the top or bottom few rows. However, with this option, you can limit the returned rows to a contiguous set of rows in the middle of the table. Therefore this option cannot be called with ‘--head’, ‘--tail’, or ‘--rowrandom’. ‘--rowrandom=INT’ Select ‘INT’ rows from the input table by random (assuming a uniform distribution). This option is applied _after_ the value-based selection options (such as ‘--sort’, ‘--range’, and ‘--polygon’). On the other hand, only the row counters are randomly selected, this option does not change the order. Therefore, if ‘--rowrandom’ is called together with ‘--sort’, the returned rows are still sorted. This option cannot be called with ‘--head’, ‘--tail’, or ‘--rowrange’. For the precedence of this operation in relation to others, see *note Operation precedence in Table::. This option will only have an effect if ‘INT’ is larger than the number of rows when it is activated (after the value-based selection options have been applied). When there are fewer rows, a warning is printed, saying that this option has no effect. The warning can be disabled with the ‘--quiet’ option. Due to its nature (to be random), the output of this option differs in each run. Therefore 5 calls to Table with ‘--rowrandom’ on the same input table will generate 5 different outputs. If you want a reproducible random selection, set the ‘GSL_RNG_SEED’ environment variable and also use the ‘--envseed’ option, for more see *note Generating random numbers::. ‘--envseed’ Read the random number generator seed from the ‘GSL_RNG_SEED’ environment variable for ‘--rowrandom’ (instead of generating a different seed internally on every run). This is useful if you want a reproducible random selection of the input rows. For more, see *note Generating random numbers::. ‘-E STR[,STR[,STR]]’ ‘--noblankend=STR[,STR[,STR]]’ Remove all rows in the requested _output_ columns that have a blank value. Like above, the columns can be specified by their name or number (counting from 1). This option can be called multiple times, so ‘--noblank=MAG --noblank=PHOTOZ’ is equivalent to ‘--noblank=MAG,PHOTOZ’. For the precedence of this operation in relation to others, see *note Operation precedence in Table::. for example, if your final output table (possibly after column arithmetic, or adding new columns) has blank values (NaN in floating point types) in the ‘magnitude’ and ‘sn’ columns, with ‘--noblankend=magnitude,sn’, the output will not contain any rows with blank values in these two columns. If you want blank values to be removed from the main input table _before_ any further processing (like adding columns, sorting or column arithmetic), you should use the ‘--noblank’ option. With the ‘--noblank’ option, the column(s) that is(are) given does not necessarily have to be in the output (it is just temporarily used for reading the inputs and selecting rows, but does not necessarily need to be present in the output). However, the column(s) given to this option should exist in the output. If you want _all_ columns to be checked, simply set the value to ‘_all’ (in other words: ‘--noblankend=_all’). This mode is useful when there are many columns in the table and you want a "clean" output table (with no blank values in any column): entering their name or number one-by-one can be buggy and frustrating. In this mode, no other column name should be given. For example, if you give ‘--noblankend=_all,magnitude’, then Table will assume that your table actually has a column named ‘_all’ and ‘magnitude’, and if it does not, it will abort with an error. This option is applied just before writing the final table (after ‘--colmetadata’ has finished). So in case you changed the column metadata, or added new columns, you can use the new names, or the newly defined column numbers. For the precedence of this operation in relation to others, see *note Operation precedence in Table::. ‘-m STR/INT,STR[,STR[,STR]]’ ‘--colmetadata=STR/INT,STR[,STR[,STR]]’ Update the specified column metadata in the output table. This option is applied after all other column-related operations are complete, for example, column arithmetic, or column concatenation. For the precedence of this operation in relation to others, see *note Operation precedence in Table::. The first value (before the first comma) given to this option is the column's identifier. It can either be a counter (positive integer, counting from 1), or a name (the column's name in the output if this option was not called). After the to-be-updated column is identified, at least one other string should be given, with a maximum of three strings. The first string after the original name will the selected column's new name. The next (optional) string will be the selected column's unit and the third (optional) will be its comments. If the two optional strings are not given, the original column's units or comments will remain unchanged. If any of the values contains a comma, you should place a '‘\’' before the comma to avoid it getting confused with a delimiter. For example, see the command below for a column description that contains a comma: $ asttable table.fits \ --colmetadata=NAME,UNIT,"Comments\, with a comma" Generally, since the comma is commonly used as a delimiter in many scenarios, to avoid complicating your future analysis with the table, it is best to avoid using a comma in the column name and units. Some examples of this option are available in the tutorials, in particular *note Working with catalogs estimating colors::. Here are some more specific examples: ‘--colmetadata=MAGNITUDE,MAG_F160W’ This will convert name of the original ‘MAGNITUDE’ column to ‘MAG_F160W’, leaving the unit and comments unchanged. ‘--colmetadata=3,MAG_F160W,mag’ This will convert name of the third column of the final output to ‘MAG_F160W’ and the units to ‘mag’, while leaving the comments untouched. ‘--colmetadata=MAGNITUDE,MAG_F160W,mag,"Magnitude in F160W filter"’ This will convert name of the original ‘MAGNITUDE’ column to ‘MAG_F160W’, and the units to ‘mag’ and the comments to ‘Magnitude in F160W filter’. Note the double quotations around the comment string, they are necessary to preserve the white-space characters within the column comment from the command-line, into the program (otherwise, upon reaching a white-space character, the shell will consider this option to be finished and cause un-expected behavior). If your table is large and generated by a script, you can first do all your operations on your table's data and write it into a temporary file (maybe called ‘temp.fits’). Then, look into that file's metadata (with ‘asttable temp.fits -i’) to see the exact column positions and possible names, then add the necessary calls to this option to your previous call to ‘asttable’, so it writes proper metadata in the same run (for example, in a script or Makefile). Recall that when a name is given, this option will update the metadata of the first column that matches, so if you have multiple columns with the same name, you can call this options multiple times with the same first argument to change them all to different names. Finally, if you already have a FITS table by other means (for example, by downloading) and you merely want to update the column metadata and leave the data intact, it is much more efficient to directly modify the respective FITS header keywords with ‘astfits’, using the keyword manipulation features described in *note Keyword inspection and manipulation::. ‘--colmetadata’ is mainly intended for scenarios where you want to edit the data so it will always load the full/partial dataset into memory, then write out the resulting datasets with updated/corrected metadata. ‘-f STR’ ‘--txtf32format=STR’ The plain-text format of 32-bit floating point columns when output is not binary (this option is ignored for binary outputs like FITS tables, see *note Printing floating point numbers::). The acceptable values are listed below. This is just the format of the plain-text outputs; see ‘--txtf32precision’ for customizing their precision. ‘fixed’ Fixed-point notation (for example ‘123.4567’). ‘exp’ Exponential notation (for example ‘1.234567e+02’). The default mode is ‘exp’ since it is the most generic and will not cause any loss of data. Be very cautious if you set it to ‘fixed’. As a rule of thumb, the fixed-point notation is only good if the numbers are larger than 1.0, but not too large! Given that the total number of accurate decimal digits is fixed the more digits you have on the left of the decimal point (integer part), the more un-accurate digits will be printed on the right of the decimal point. ‘-p STR’ ‘--txtf32precision=INT’ Number of digits after (to the right side of) the decimal point (precision) for columns with a 32-bit floating point datatype (this option is ignored for binary outputs like FITS tables, see *note Printing floating point numbers::). This can take any positive integer (including 0). When given a value of zero, the floating point number will be rounded to the nearest integer. The default value to this option is 6. This is because according to IEEE 754, 32-bit floating point numbers can be accurately presented to 7.22 decimal digits (see *note Printing floating point numbers::). Since we only have an integer number of digits in a number, we'll round it to 7 decimal digits. Furthermore, the precision is only defined to the right side of the decimal point. In exponential notation (default of ‘--txtf32format’), one decimal digit will be printed on the left of the decimal point. So the default value to this option is $7-1=6$. ‘-A STR’ ‘--txtf64format=STR’ The plain-text format of 64-bit floating point columns when output is not binary (this option is ignored for binary outputs like FITS tables, see *note Printing floating point numbers::). The acceptable values are listed below. This is just the format of the plain-text outputs; see ‘--txtf64precision’ for customizing their precision. ‘fixed’ Fixed-point notation (for example ‘12345.6789012345’). ‘exp’ Exponential notation (for example ‘1.23456789012345e4’). The default mode is ‘exp’ since it is the most generic and will not cause any loss of data. Be very cautious if you set it to ‘fixed’. As a rule of thumb, the fixed-point notation is only good if the numbers are larger than 1.0, but not too large! Given that the total number of accurate decimal digits is fixed the more digits you have on the left of the decimal point (integer part), the more un-accurate digits will be printed on the right of the decimal point. ‘-B STR’ ‘--txtf64precision=INT’ Number of digits after the decimal point (precision) for columns with a 64-bit floating point datatype (this option is ignored for binary outputs like FITS tables, see *note Printing floating point numbers::). This can take any positive integer (including 0). When given a value of zero, the floating point number will be rounded to the nearest integer. The default value to this option is 15. This is because according to IEEE 754, 64-bit floating point numbers can be accurately presented to 15.95 decimal digits (see *note Printing floating point numbers::). Since we only have an integer number of digits in a number, we'll round it to 16 decimal digits. Furthermore, the precision is only defined to the right side of the decimal point. In exponential notation (default of ‘--txtf64format’), one decimal digit will be printed on the left of the decimal point. So the default value to this option is $16-1=15$. ‘-Y’ ‘--txteasy’ When output is a plain-text file or just gets printed on standard output (the terminal), all floating point columns are printed in fixed point notation (as in ‘123.456’) instead of the default exponential notation (as in ‘1.23456e+02’). For 32-bit floating points, this option will use a precision of 3 digits (see ‘--txtf32precision’) and for 64-bit floating points use a precision of 6 digits (see ‘--txtf64precision’). This can be useful for human readability, but be careful with some scenarios (for example ‘1.23e-120’, which will show only as ‘0.0’!). When this option is called any value given the following options is ignored: ‘--txtf32format’, ‘--txtf32precision’, ‘--txtf64format’ and ‘--txtf64precision’. For example below you can see the output of table with and without this option: $ asttable table.fits --head=5 -O # Column 1: OBJNAME [name ,str23, ] Name in HyperLeda. # Column 2: RAJ2000 [deg ,f64 , ] Right Ascension. # Column 3: DEJ2000 [deg ,f64 , ] Declination. # Column 4: RADIUS [arcmin,f32 , ] Major axis radius. NGC0884 2.3736267000000e+00 5.7138753300000e+01 8.994357e+00 NGC1629 4.4935191000000e+00 -7.1838322400000e+01 5.000000e-01 NGC1673 4.7109672000000e+00 -6.9820892700000e+01 3.499210e-01 NGC1842 5.1216920000000e+00 -6.7273195300000e+01 3.999171e-01 $ asttable table.fits --head=5 -O -Y # Column 1: OBJNAME [name ,str23, ] Name in HyperLeda. # Column 2: RAJ2000 [deg ,f64 , ] Right Ascension. # Column 3: DEJ2000 [deg ,f64 , ] Declination. # Column 4: RADIUS [arcmin,f32 , ] Major axis radius. NGC0884 2.373627 57.138753 8.994 NGC1629 4.493519 -71.838322 0.500 NGC1673 4.710967 -69.820893 0.350 NGC1842 5.121692 -67.273195 0.400 This is also useful when you want to make outputs of other programs more "easy" to read, for example: $ echo 123.45678 | asttable 1.234567800000000e+02 $ echo 123.45678 | asttable -Y 123.456780 *Can result in loss of information*: be very careful with this option! It can loose precision or generally the full value if the value is not within a "good" range like this example. Such cases are the reason that this is not the default format of plain-text outputs. $ echo 123.4e-9 | asttable -Y 0.000000 �����������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro.info-5�������������������������������������������������������������������0000644�0001750�0001750�00001037473�14557514036�012437� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is gnuastro.info, produced by makeinfo version 7.1 from gnuastro.texi. This book documents version 0.22 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * Match: (gnuastro)Match. Match two separate catalogs. * astmatch: (gnuastro)Invoking astmatch. Options to Match. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Segment: (gnuastro)Segment. Segment detections based on signal structure. * astsegment: (gnuastro)Invoking astsegment. Options to Segment. * Query: (gnuastro)Query. Access remote databases for downloading data. * astquery: (gnuastro)Invoking astquery. Options to Query. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. * astscript: (gnuastro)Installed scripts. Gnuastro's installed scripts. * astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script * astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script * astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script * astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script * astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script * astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script * astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script * astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script * astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script * astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script * astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script END-INFO-DIR-ENTRY  File: gnuastro.info, Node: Query, Prev: Table, Up: Data containers 5.4 Query ========= There are many astronomical databases available for downloading astronomical data. Most follow the International Virtual Observatory Alliance (IVOA, <https://ivoa.net>) standards (and in particular the Table Access Protocol, or TAP(1)). With TAP, it is possible to submit your queries via a command-line downloader (for example, ‘curl’) to only get specific tables, targets (rows in a table) or measurements (columns in a table): you do not have to download the full table (which can be very large in some cases)! These customizations are done through the Astronomical Data Query Language (ADQL(2)). Therefore, if you are sufficiently familiar with TAP and ADQL, you can easily custom-download any part of an online dataset. However, you also need to keep a record of the URLs of each database and in many cases, the commands will become long and hard/buggy to type on the command-line. On the other hand, most astronomers do not know TAP or ADQL at all, and are forced to go to the database's web page which is slow (it needs to download so many images, and has too much annoying information), requires manual interaction (further making it slow and buggy), and cannot be automated. Gnuastro's Query program is designed to be the middle-man in this process: it provides a simple high-level interface to let you specify your constraints on what you want to download. It then internally constructs the command to download the data based on your inputs and runs it to download your desired data. Query also prints the full command before it executes it (if not called with ‘--quiet’). Also, if you ask for a FITS output table, the full command is written into its 0-th extension along with other input parameters to query (all Gnuastro programs generally keep their input configuration parameters as FITS keywords in the zero-th output). You can see it with Gnuastro's Fits program, like below: $ astfits query-output.fits -h0 With the full command used to download the dataset, you only need a minimal knowledge of ADQL to do lower-level customizations on your downloaded dataset. You can simply copy that command and change the parts of the query string you want: ADQL is very powerful! For example, you can ask the server to do mathematical operations on the columns and apply selections after those operations, or combine/match multiple datasets. We will try to add high-level interfaces for such capabilities, but generally, do not limit yourself to the high-level operations (that cannot cover everything!). * Menu: * Available databases:: List of available databases to Query. * Invoking astquery:: Inputs, outputs and configuration of Query. ---------- Footnotes ---------- (1) <https://ivoa.net/documents/TAP> (2) <https://ivoa.net/documents/ADQL>  File: gnuastro.info, Node: Available databases, Next: Invoking astquery, Prev: Query, Up: Query 5.4.1 Available databases ------------------------- The current list of databases supported by Query are listed at the end of this section. To get the list of available datasets within each database, you can use the ‘--information’ option. for example, with the command below you can get a list of the roughly 100 datasets that are available within the ESA Gaia server with their description: $ astquery gaia --information However, other databases like VizieR host many more datasets (tens of thousands!). Therefore it is very inconvenient to get the _full_ information every time you want to find your dataset of interest (the full metadata file VizieR is more than 20Mb). In such cases, you can limit the downloaded and displayed information with the ‘--limitinfo’ option. For example, with the first command below, you can get all datasets relating to the MUSE (an instrument on the Very Large Telescope), and those that include Roland Bacon (Principle Investigator of MUSE) as an author (‘Bacon, R.’). Recall that ‘-i’ is the short format of ‘--information’. $ astquery vizier -i --limitinfo=MUSE $ astquery vizier -i --limitinfo="Bacon R." Once you find the recognized name of your desired dataset, you can see the column information of that dataset with adding the dataset name. For example, with the command below you can see the column metadata in the ‘J/A+A/608/A2/udf10’ dataset (one of the datasets in the search above) using this command: $ astquery vizier --dataset=J/A+A/608/A2/udf10 -i For very popular datasets of a database, Query provides an easier-to-remember short name that you can feed to ‘--dataset’. This short name will map to the officially recognized name of the dataset on the server. In this mode, Query will also set positional columns accordingly. For example, most VizieR datasets have an ‘RAJ2000’ column (the RA and the epoch of 2000) so it is the default RA column name for coordinate search (using ‘--center’ or ‘--overlapwith’). However, some datasets do not have this column (for example, SDSS DR12). So when you use the short name and Query knows about this dataset, it will internally set the coordinate columns that SDSS DR12 has: ‘RA_ICRS’ and ‘DEC_ICRS’. Recall that you can always change the coordinate columns with ‘--ccol’. For example, in the VizieR and Gaia databases, the recognized name for data release 3 data is respectively ‘I/355/gaiadr3’ and ‘gaiadr3.gaia_source’. These technical names are hard to remember. Therefore Query provides ‘gaiadr3’ (for VizieR) and ‘dr3’ (for ESA's Gaia database) shortcuts which you can give to ‘--dataset’ instead. They will be internally mapped to the fully recognized name by Query. In the list below that describes the available databases, the available short names, that are recognized for each, are also listed. *Not all datasets support TAP:* Large databases like VizieR have TAP access for all their datasets. However, smaller databases have not implemented TAP for all their tables. Therefore some datasets that are searchable in their web interface may not be available for a TAP search. To see the full list of TAP-ed datasets in a database, use the ‘--information’ (or ‘-i’) option with the dataset name like the command below. $ astquery astron -i If your desired dataset is not in this list, but has web-access, contact the database maintainers and ask them to add TAP access for it. After they do it, you should see the name added to the output list of the command above. The list of databases recognized by Query (and their names in Query) is described below. Since Query is a new member of the Gnuastro family (first available in Gnuastro 0.14), this list will hopefully grow significantly in the next releases. If you have any particular datasets in mind, please let us know by sending an email to ‘bug-gnuastro@gnu.org’. If the dataset supports IVOA's TAP (Table Access Protocol), it should be very easy to add. ‘astron’ The ASTRON Virtual Observatory service (<https://vo.astron.nl>) is a database focused on radio astronomy data and images, primarily those collected by ASTRON itself. A query to ‘astron’ is submitted to ‘https://vo.astron.nl/__system__/tap/run/tap/sync’. Here is the list of short names for dataset(s) in ASTRON's VO service: • ‘tgssadr --> tgssadr.main’ ‘gaia’ The Gaia project (<https://www.cosmos.esa.int/web/gaia>) database which is a large collection of star positions on the celestial sphere, as well as peculiar velocities, parallaxes and magnitudes in some bands among many others. Besides scientific studies (like studying resolved stellar populations in the Galaxy and its halo), Gaia is also invaluable for raw data calibrations, like astrometry. A query to ‘gaia’ is submitted to ‘https://gea.esac.esa.int/tap-server/tap/sync’. Here is the list of short names for popular datasets within Gaia: • ‘dr3 --> gaiadr3.gaia_source’ • ‘edr3 --> gaiaedr3.gaia_source’ • ‘dr2 --> gaiadr2.gaia_source’ • ‘dr1 --> gaiadr1.gaia_source’ • ‘tycho2 --> public.tycho2’ • ‘hipparcos --> public.hipparcos’ ‘ned’ The NASA/IPAC Extragalactic Database (NED, <http://ned.ipac.caltech.edu>) is a fusion database, integrating the information about extra-galactic sources from many large sky surveys into a single catalog. It covers the full spectrum, from Gamma rays to radio frequencies and is updated when new data arrives. A TAP query to ‘ned’ is submitted to ‘https://ned.ipac.caltech.edu/tap/sync’. • ‘objdir --> NEDTAP.objdir’: default TAP-based dataset in NED. • ‘extinction’: A command-line interface to the NED Extinction Calculator (https://ned.ipac.caltech.edu/extinction_calculator). It only takes a central coordinate and returns a VOTable of the calculated extinction in many commonly used filters at that point. As a result, options like ‘--width’ or ‘--radius’ are not supported. However, Gnuastro does not yet support the VOTable format. Therefore, if you specify an ‘--output’ file, it should have an ‘.xml’ suffix and the downloaded file will not be checked. Until VOTable support is added to Gnuastro, you can use GREP, AWK and SED to convert the VOTable data into a FITS table with a command like below (assuming the queried VOTable is called ‘ned-extinction.xml’): grep '^<TR><TD>' ned-extinction.xml \ | sed -e's|<TR><TD>||' \ -e's|</TD></TR>||' \ -e's|</TD><TD>|@|g' \ | awk 'BEGIN{FS="@"; \ print "# Column 1: FILTER [name,str15] Filter name"; \ print "# Column 2: CENTRAL [um,f32] Central Wavelength"; \ print "# Column 3: EXTINCTION [mag,f32] Galactic Ext."; \ print "# Column 4: ADS_REF [ref,str50] ADS reference"} \ {printf "%-15s %g %g %s\n", $1, $2, $3, $4}' \ | asttable -oned-extinction.fits Once the table is in FITS, you can easily get the extinction for a certain filter (for example, the ‘SDSS r’ filter) like the command below: asttable ned-extinction.fits --equal=FILTER,"SDSS r" \ -cEXTINCTION ‘vizier’ Vizier (<https://vizier.u-strasbg.fr>) is arguably the largest catalog database in astronomy: containing more than 20500 catalogs as of mid January 2021. Almost all published catalogs in major projects, and even the tables in many papers are archived and accessible here. For example, VizieR also has a full copy of the Gaia database mentioned below, with some additional standardized columns (like RA and Dec in J2000). The current implementation of ‘--limitinfo’ only looks into the description of the datasets, but since VizieR is so large, there is still a lot of room for improvement. Until then, if ‘--limitinfo’ is not sufficient, you can use VizieR's own web-based search for your desired dataset: <http://cdsarc.u-strasbg.fr/viz-bin/cat> Because VizieR curates such a diverse set of data from tens of thousands of projects and aims for interoperability between them, the column names in VizieR may not be identical to the column names in the surveys' own databases (Gaia in the example above). A query to ‘vizier’ is submitted to ‘http://tapvizier.u-strasbg.fr/TAPVizieR/tap/sync’. Here is the list of short names for popular datasets within VizieR (sorted alphabetically by their short name). Please feel free to suggest other major catalogs (covering a wide area or commonly used in your field).. For details on each dataset with necessary citations, and links to web pages, look into their details with their ViziR names in <https://vizier.u-strasbg.fr/viz-bin/VizieR>. • ‘2mass --> II/246/out’ (2MASS All-Sky Catalog) • ‘akarifis --> II/298/fis’ (AKARI/FIS All-Sky Survey) • ‘allwise --> II/328/allwise’ (AllWISE Data Release) • ‘apass9 --> II/336/apass9’ (AAVSO Photometric All Sky Survey, DR9) • ‘catwise --> II/365/catwise’ (CatWISE 2020 catalog) • ‘des1 --> II/357/des_dr1’ (Dark Energy Survey data release 1) • ‘gaiadr3 --> I/355/gaiadr3’ (GAIA Data Release 3) • ‘gaiaedr3 --> I/350/gaiadr3’ (GAIA Early Data Release 3) • ‘gaiadr2 --> I/345/gaia2’ (GAIA Data Release 2) • ‘galex5 --> II/312/ais’ (All-sky Survey of GALEX DR5) • ‘nomad --> I/297/out’ (Naval Observatory Merged Astrometric Dataset) • ‘panstarrs1 --> II/349/ps1’ (Pan-STARRS Data Release 1). • ‘ppmxl --> I/317/sample’ (Positions and proper motions on the ICRS) • ‘sdss12 --> V/147/sdss12’ (SDSS Photometric Catalogue, Release 12) • ‘usnob1 --> I/284/out’ (Whole-Sky USNO-B1.0 Catalog) • ‘ucac5 --> I/340/ucac5’ (5th U.S. Naval Obs. CCD Astrograph Catalog) • ‘unwise --> II/363/unwise’ (Band-merged unWISE Catalog) • ‘wise --> II/311/wise’ (WISE All-Sky data Release)  File: gnuastro.info, Node: Invoking astquery, Prev: Available databases, Up: Query 5.4.2 Invoking Query -------------------- Query provides a high-level interface to downloading subsets of data from databases. The executable name is ‘astquery’ with the following general template $ astquery DATABASE-NAME [OPTION...] ... One line examples: ## Information about all datasets in ESA's GAIA database: $ astquery gaia --information ## Only show catalogs in VizieR that have 'MUSE' in their ## description. The '-i' is short for '--information'. $ astquery vizier -i --limitinfo=MUSE ## List of columns in 'J/A+A/608/A2/udf10' (one of the above). $ astquery vizier --dataset=J/A+A/608/A2/udf10 -i ## ID, RA and Dec of all Gaia sources within an image. $ astquery gaia --dataset=dr3 --overlapwith=image.fits \ -csource_id,ra,dec ## RA, Dec and Spectroscopic redshifts of objects in SDSS DR12 ## spectroscopic redshift that overlap with 'image.fits'. $ astquery vizier --dataset=sdss12 --overlapwith=image.fits \ -cRA_ICRS,DE_ICRS,zsp --range=zsp,1e-10,inf ## All columns of all entries in the Gaia DR3 catalog (hosted at ## VizieR) within 1 arc-minute of the given coordinate. $ astquery vizier --dataset=gaiadr3 --output=my-gaia.fits \ --center=113.8729761,31.9027152 --radius=1/60 \ ## Similar to above, but only ID, RA and Dec columns for objects with ## magnitude range 10 to 15. In VizieR, this column is called 'Gmag'. ## Also, using sexagesimal coordinates instead of degrees for center. $ astquery vizier --dataset=gaiadr3 --output=my-gaia.fits \ --center=07h35m29.51,31d54m9.77 --radius=1/60 \ --range=Gmag,10:15 -cDR3Name,RAJ2000,DEJ2000 Query takes a single argument which is the name of the database. For the full list of available databases and accessing them, see *note Available databases::. There are two methods to query the databases, each is more fully discussed in its option's description below. • *Low-level:* With ‘--query’ you can directly give a raw query statement that is recognized by the database. This is very low level and will require a good knowledge of the database's query language, but of course, it is much more powerful. If this option is given, the raw string is directly passed to the server and all other constraints/options (for Query's high-level interface) are ignored. • *High-level:* With the high-level options (like ‘--column’, ‘--center’, ‘--radius’, ‘--range’ and other constraining options below), the low-level query will be constructed automatically for the particular database. This method is only limited to the generic capabilities that Query provides for all servers. So ‘--query’ is more powerful, however, in this mode, you do not need any knowledge of the database's query language. You can see the internally generated query on the terminal (if ‘--quiet’ is not used) or in the 0-th extension of the output (if it is a FITS file). This full command contains the internally generated query. The name of the downloaded output file can be set with ‘--output’. The requested output format can have any of the *note Recognized table formats:: (currently ‘.txt’ or ‘.fits’). Like all Gnuastro programs, if the output is a FITS file, the zero-th/first HDU of the output will contain all the command-line options given to Query as well as the full command used to access the server. When ‘--output’ is not set, the output name will be in the format of ‘NAME-STRING.fits’, where ‘NAME’ is the name of the database and ‘STRING’ is a randomly selected 6-character set of numbers and alphabetic characters. With this feature, a second run of ‘astquery’ that is not called with ‘--output’ will not over-write an already downloaded one. Generally, when calling Query more than once, it is recommended to set an output name for each call based on your project's context. The outputs of Query will have a common output format, irrespective of the used database. To achieve this, Query will ask the databases to provide a FITS table output (for larger tables, FITS can consume much less download volume). After downloading is complete, the raw downloaded file will be read into memory once by Query, and written into the file given to ‘--output’. The raw downloaded file will be deleted by default, but can be preserved with the ‘--keeprawdownload’ option. This strategy avoids unnecessary surprises depending on database. For example, some databases can download a compressed FITS table, even though we ask for FITS. But with the strategy above, the final output will be an uncompressed FITS file. The metadata that is added by Query (including the full download command) is also very useful for future usage of the downloaded data. Unfortunately many databases do not write the input queries into their generated tables. ‘--dry-run’ Only print the final download command to contact the server, do not actually run it. This option is good when you want to check the finally constructed query or download options given to the download program. You may also want to use the constructed command as a base to do further customizations on it and run it yourself. ‘-k’ ‘--keeprawdownload’ Do not delete the raw downloaded file from the database. The name of the raw download will have a ‘OUTPUT-raw-download.fits’ format. Where ‘OUTPUT’ is either the base-name of the final output file (without a suffix). ‘-i’ ‘--information’ Print the information of all datasets (tables) within a database or all columns within a database. When ‘--dataset’ is specified, the latter mode (all column information) is downloaded and printed and when it is not defined, all dataset information (within the database) is printed. Some databases (like VizieR) contain tens of thousands of datasets, so you can limit the downloaded and printed information for available databases with the ‘--limitinfo’ option (described below). Dataset descriptions are often large and contain a lot of text (unlike column descriptions). Therefore when printing the information of all datasets within a database, the information (e.g., database name) will be printed on separate lines before the description. However, when printing column information, the output has the same format as a similar option in Table (see *note Invoking asttable::). Important note to consider: the printed order of the datasets or columns is just for displaying in the printed output. You cannot ask for datasets or columns based on the printed order, you need to use dataset or column names. ‘-L STR’ ‘--limitinfo=STR’ Limit the information that is downloaded and displayed (with ‘--information’) to those that have the string given to this option in their description. Note that _this is case-sensitive_. This option is only relevant when ‘--information’ is also called. Databases may have thousands (or tens of thousands) of datasets. Therefore just the metadata (information) to show with ‘--information’ can be tens of megabytes (for example, the full VizieR metadata file is about 23Mb as of January 2021). Once downloaded, it can also be hard to parse manually. With ‘--limitinfo’, only the metadata of datasets that contain this string _in their description_ will be downloaded and displayed, greatly improving the speed of finding your desired dataset. ‘-Q "STR"’ ‘--query="STR"’ Directly specify the query to be passed onto the database. The queries will generally contain space and other meta-characters, so we recommend placing the query within quotations. ‘-s STR’ ‘--dataset=STR’ The dataset to query within the database (not compatible with ‘--query’). This option is mandatory when ‘--query’ or ‘--information’ are not provided. You can see the list of available datasets within a database using ‘--information’ (possibly supplemented by ‘--limitinfo’). The output of ‘--information’ will contain the recognized name of the datasets within that database. You can pass the recognized name directly to this option. For more on finding and using your desired database, see *note Available databases::. ‘-c STR’ ‘--column=STR[,STR[,...]]’ The column name(s) to retrieve from the dataset in the given order (not compatible with ‘--query’). If not given, all the dataset's columns for the selected rows will be queried (which can be large!). This option can take multiple values in one instance (for example, ‘--column=ra,dec,mag’), or in multiple instances (for example, ‘-cra -cdec -cmag’), or mixed (for example, ‘-cra,dec -cmag’). In case, you do not know the full list of the dataset's column names a-priori, and you do not want to download all the columns (which can greatly decrease your download speed), you can use the ‘--information’ option combined with the ‘--dataset’ option, see *note Available databases::. ‘-H INT’ ‘--head=INT’ Only ask for the first ‘INT’ rows of the finally selected columns, not all the rows. This can be good when your search can result a large dataset, but before downloading the full volume, you want to see the top rows and get a feeling of what the whole dataset looks like. ‘-v FITS’ ‘--overlapwith=FITS’ File name of FITS file containing an image (in the HDU given by ‘--hdu’) to use for identifying the region to query in the give database and dataset. Based on the image's WCS and pixel size, the sky coverage of the image is estimated and values to the ‘--center’, ‘--width’ will be calculated internally. Hence this option cannot be used with ‘--center’, ‘--width’ or ‘--radius’. Also, since it internally generates the query, it cannot be used with ‘--query’. Note that if the image has WCS distortions and the reference point for the WCS is not within the image, the WCS will not be well-defined. Therefore the resulting catalog may not overlap, or correspond to a larger/small area in the sky. ‘-C FLT,FLT’ ‘--center=FLT,FLT’ The spatial center position (mostly RA and Dec) to use for the automatically generated query (not compatible with ‘--query’). The comma-separated values can either be in degrees (a single number), or sexagesimal (‘_h_m_’ for RA, ‘_d_m_’ for Dec, or ‘_:_:_’ for both). The given values will be compared to two columns in the database to find/return rows within a certain region around this center position will be requested and downloaded. Pre-defined RA and Dec column names are defined in Query for every database, however you can use ‘--ccol’ to select other columns to use instead. The region can either be a circle and the point (configured with ‘--radius’) or a box/rectangle around the point (configured with ‘--width’). ‘--ccol=STR,STR’ The name of the coordinate-columns in the dataset to compare with the values given to ‘--center’. Query will use its internal defaults for each dataset (for example, ‘RAJ2000’ and ‘DEJ2000’ for VizieR data). But each dataset is treated separately and it is not guaranteed that these columns exist in all datasets. Also, more than one coordinate system/epoch may be present in a dataset and you can use this option to construct your spatial constraint based on the others coordinate systems/epochs. ‘-r FLT’ ‘--radius=FLT’ The radius about the requested center to use for the automatically generated query (not compatible with ‘--query’). The radius is in units of degrees, but you can use simple division with this option directly on the command-line. For example, if you want a radius of 20 arc-minutes or 20 arc-seconds, you can use ‘--radius=20/60’ or ‘--radius=20/3600’ respectively (which is much more human-friendly than ‘0.3333’ or ‘0.005556’). ‘-w FLT[,FLT]’ ‘--width=FLT[,FLT]’ The square (or rectangle) side length (width) about the requested center to use for the automatically generated query (not compatible with ‘--query’). If only one value is given to ‘--width’ the region will be a square, but if two values are given, the widths of the query box along each dimension will be different. The value(s) is (are) in the same units as the coordinate column (see ‘--ccol’, usually RA and Dec which are degrees). You can use simple division for each value directly on the command-line if you want relatively small (and more human-friendly) sizes. For example, if you want your box to be 1 arc-minutes along the RA and 2 arc-minutes along Dec, you can use ‘--width=1/60,2/60’. ‘-g STR,FLT,FLT’ ‘--range=STR,FLT,FLT’ The column name and numerical range (inclusive) of acceptable values in that column (not compatible with ‘--query’). This option can be called multiple times for applying range limits on many columns in one call (thus greatly reducing the download size). For example, when used on the ESA gaia database, you can use ‘--range=phot_g_mean_mag,10:15’ to only get rows that have a value between 10 and 15 (inclusive on both sides) in the ‘phot_g_mean_mag’ column. If you want all rows larger, or smaller, than a certain number, you can use ‘inf’, or ‘-inf’ as the first or second values respectively. For example, if you want objects with SDSS spectroscopic redshifts larger than 2 (from the VizieR ‘sdss12’ database), you can use ‘--range=zsp,2,inf’ If you want the interval to not be inclusive on both sides, you can run ‘astquery’ once and get the command that it executes. Then you can edit it to be non-inclusive on your desired side. ‘-b STR[,STR]’ ‘--noblank=STR[,STR]’ Only ask for rows that do not have a blank value in the ‘STR’ column. This option can be called many times, and each call can have multiple column names (separated by a comma or <,>). For example, if you want the retrieved rows to not have a blank value in columns ‘A’, ‘B’, ‘C’ and ‘D’, you can use ‘--noblank=A -bB,C,D’. ‘--sort=STR[,STR]’ Ask for the server to sort the downloaded data based on the given columns. For example, let's assume your desired catalog has column ‘Z’ for redshift and column ‘MAG_R’ for magnitude in the R band. When you call ‘--sort=Z,MAG_R’, it will primarily sort the columns based on the redshift, but if two objects have the same redshift, they will be sorted by magnitude. You can add as many columns as you like for higher-level sorting.  File: gnuastro.info, Node: Data manipulation, Next: Data analysis, Prev: Data containers, Up: Top 6 Data manipulation ******************* Images are one of the major formats of data that is used in astronomy. The functions in this chapter explain the GNU Astronomy Utilities which are provided for their manipulation. For example, cropping out a part of a larger image or convolving the image with a given kernel or applying a transformation to it. * Menu: * Crop:: Crop region(s) from a dataset. * Arithmetic:: Arithmetic on input data. * Convolve:: Convolve an image with a kernel. * Warp:: Warp/Transform an image to a different grid.  File: gnuastro.info, Node: Crop, Next: Arithmetic, Prev: Data manipulation, Up: Data manipulation 6.1 Crop ======== Astronomical images are often very large, filled with thousands of galaxies. It often happens that you only want a section of the image, or you have a catalog of sources and you want to visually analyze them in small postage stamps. Crop is made to do all these things. When more than one crop is required, Crop will divide the crops between multiple threads to significantly reduce the run time. Astronomical surveys are usually extremely large. So large in fact, that the whole survey will not fit into a reasonably sized file. Because of this, surveys usually cut the final image into separate tiles and store each tile in a file. For example, the COSMOS survey's Hubble space telescope, ACS F814W image consists of 81 separate FITS images, with each one having a volume of 1.7 Gigabytes. Even though the tile sizes are chosen to be large enough that too many galaxies/targets do not fall on the edges of the tiles, inevitably some do. So when you simply crop the image of such targets from one tile, you will miss a large area of the surrounding sky (which is essential in estimating the noise). Therefore in its WCS mode, Crop will stitch parts of the tiles that are relevant for a target (with the given width) from all the input images that cover that region into the output. Of course, the tiles have to be present in the list of input files. Besides cropping postage stamps around certain coordinates, Crop can also crop arbitrary polygons from an image (or a set of tiles by stitching the relevant parts of different tiles within the polygon), see ‘--polygon’ in *note Invoking astcrop::. Alternatively, it can crop out rectangular regions through the ‘--section’ option from one image, see *note Crop section syntax::. * Menu: * Crop modes:: Basic modes to define crop region. * Crop section syntax:: How to define a section to crop. * Blank pixels:: Pixels with no value. * Invoking astcrop:: Calling Crop on the command-line  File: gnuastro.info, Node: Crop modes, Next: Crop section syntax, Prev: Crop, Up: Crop 6.1.1 Crop modes ---------------- In order to be comprehensive, intuitive, and easy to use, there are two ways to define the crop: 1. From its center and side length. For example, if you already know the coordinates of an object and want to inspect it in an image or to generate postage stamps of a catalog containing many such coordinates. 2. The vertices of the crop region, this can be useful for larger crops over many targets, for example, to crop out a uniformly deep, or contiguous, region of a large survey. Irrespective of how the crop region is defined, the coordinates to define the crop can be in Image (pixel) or World Coordinate System (WCS) standards. All coordinates are read as floating point numbers (not integers, except for the ‘--section’ option, see below). By setting the _mode_ in Crop, you define the standard that the given coordinates must be interpreted. Here, the different ways to specify the crop region are discussed within each standard. For the full list options, please see *note Invoking astcrop::. When the crop is defined by its center, the respective (integer) central pixel position will be found internally according to the FITS standard. To have this pixel positioned in the center of the cropped region, the final cropped region will have an add number of pixels (even if you give an even number to ‘--width’ in image mode). Furthermore, when the crop is defined as by its center, Crop allows you to only keep crops what do not have any blank pixels in the vicinity of their center (your primary target). This can be very convenient when your input catalog/coordinates originated from another survey/filter which is not fully covered by your input image, to learn more about this feature, please see the description of the ‘--checkcenter’ option in *note Invoking astcrop::. Image coordinates In image mode (‘--mode=img’), Crop interprets the pixel coordinates and widths in units of the input data-elements (for example, pixels in an image, not world coordinates). In image mode, only one image may be input. The output crop(s) can be defined in multiple ways as listed below. Center of multiple crops (in a catalog) The center of (possibly multiple) crops are read from a text file. In this mode, the columns identified with the ‘--coordcol’ option are interpreted as the center of a crop with a width of ‘--width’ pixels along each dimension. The columns can contain any floating point value. The value to ‘--output’ option is seen as a directory which will host (the possibly multiple) separate crop files, see *note Crop output:: for more. For a tutorial using this feature, please see *note Reddest clumps cutouts and parallelization::. Center of a single crop (on the command-line) The center of the crop is given on the command-line with the ‘--center’ option. The crop width is specified by the ‘--width’ option along each dimension. The given coordinates and width can be any floating point number. Vertices of a single crop In Image mode there are two options to define the vertices of a region to crop: ‘--section’ and ‘--polygon’. The former is lower-level (does not accept floating point vertices, and only a rectangular region can be defined), it is also only available in Image mode. Please see *note Crop section syntax:: for a full description of this method. The latter option (‘--polygon’) is a higher-level method to define any polygon (with any number of vertices) with floating point values. Please see the description of this option in *note Invoking astcrop:: for its syntax. WCS coordinates In WCS mode (‘--mode=wcs’), the coordinates and width are interpreted using the World Coordinate System (WCS, that must accompany the dataset), not pixel coordinates. You can optionally use ‘--widthinpix’ for the width to be interpreted in pixels (even though the coordinates are in WCS). In WCS mode, Crop accepts multiple datasets as input. When the cropped region (defined by its center or vertices) overlaps with multiple of the input images/tiles, the overlapping regions will be taken from the respective input (they will be stitched when necessary for each output crop). In this mode, the input images do not necessarily have to be the same size, they just need to have the same orientation and pixel resolution. Currently only orientation along the celestial coordinates is accepted, if your input has a different orientation or resolution you can use Warp's ‘--gridfile’ option to align the image before cropping it (see *note Warp::). Each individual input image/tile can even be smaller than the final crop. In any case, any part of any of the input images which overlaps with the desired region will be used in the crop. Note that if there is an overlap in the input images/tiles, the pixels from the last input image read are going to be used for the overlap. Crop will not change pixel values, so it assumes your overlapping tiles were cutout from the same original image. There are multiple ways to define your cropped region as listed below. Center of multiple crops (in a catalog) Similar to catalog inputs in Image mode (above), except that the values along each dimension are assumed to have the same units as the dataset's WCS information. For example, the central RA and Dec value for each crop will be read from the first and second calls to the ‘--coordcol’ option. The width of the cropped box (in units of the WCS, or degrees in RA and Dec mode) must be specified with the ‘--width’ option. You can optionally use ‘--widthinpix’ for the value of ‘--width’ to be interpreted in pixels. Center of a single crop (on the command-line) You can specify the center of only one crop box with the ‘--center’ option. If it exists in the input images, it will be cropped similar to the catalog mode, see above also for ‘--width’. Vertices of a single crop The ‘--polygon’ option is a high-level method to define any convex polygon (with any number of vertices). Please see the description of this option in *note Invoking astcrop:: for its syntax. *CAUTION:* In WCS mode, the image has to be aligned with the celestial coordinates, such that the first FITS axis is parallel (opposite direction) to the Right Ascension (RA) and the second FITS axis is parallel to the declination. If these conditions are not met for an image, Crop will warn you and abort. You can use Warp to align the input image to standard celestial coordinates, see *note Warp::. As a summary, if you do not specify a catalog, you have to define the cropped region manually on the command-line. In any case the mode is mandatory for Crop to be able to interpret the values given as coordinates or widths.  File: gnuastro.info, Node: Crop section syntax, Next: Blank pixels, Prev: Crop modes, Up: Crop 6.1.2 Crop section syntax ------------------------- When in image mode, one of the methods to crop only one rectangular section from the input image is to use the ‘--section’ option. Crop has a powerful syntax to read the box parameters from a string of characters. If you leave certain parts of the string to be empty, Crop can fill them for you based on the input image sizes. To define a box, you need the coordinates of two points: the first (‘X1’, ‘Y1’) and the last pixel (‘X2’, ‘Y2’) pixel positions in the image, or four integer numbers in total. The four coordinates can be specified with one string in this format: '‘X1:X2,Y1:Y2’'. This string is given to the ‘--section’ option. Therefore, the pixels along the first axis that are $\geq$‘X1’ and $\leq$‘X2’ will be included in the cropped image. The same goes for the second axis. Note that each different term will be read as an integer, not a float. The reason it only accepts integers is that ‘--section’ is a low-level option (which is also very fast!). For a higher-level way to specify region (any polygon, not just a box), please see the ‘--polygon’ option in *note Crop options::. Also note that in the FITS standard, pixel indexes along each axis start from unity(1) not zero(0). You can omit any of the values and they will be filled automatically. The left hand side of the colon (‘:’) will be filled with ‘1’, and the right side with the image size. So, ‘2:,:’ will include the full range of pixels along the second axis and only those with a first axis index larger than ‘2’ in the first axis. If the colon is omitted for a dimension, then the full range is automatically used. So the same string is also equal to ‘2:,’ or ‘2:’ or even ‘2’. If you want such a case for the second axis, you should set it to: ‘,2’. If you specify a negative value, it will be seen as before the indexes of the image which are outside the image along the bottom or left sides when viewed in SAO DS9. In case you want to count from the top or right sides of the image, you can use an asterisk (‘*’). When confronted with a ‘*’, Crop will replace it with the maximum length of the image in that dimension. So ‘*-10:*+10,*-20:*+20’ will mean that the crop box will be 20\times40 pixels in size and only include the top corner of the input image with 3/4 of the image being covered by blank pixels, see *note Blank pixels::. If you feel more comfortable with space characters between the values, you can use as many space characters as you wish, just be careful to put your value in double quotes, for example, ‘--section="5:200, 123:854"’. If you forget the quotes, anything after the first space will not be seen by ‘--section’ and you will most probably get an error because the rest of your string will be read as a filename (which most probably does not exist). See *note Command-line:: for a description of how the command-line works.  File: gnuastro.info, Node: Blank pixels, Next: Invoking astcrop, Prev: Crop section syntax, Up: Crop 6.1.3 Blank pixels ------------------ The cropped box can potentially include pixels that are beyond the image range. For example, when a target in the input catalog was very near the edge of the input image. The parts of the cropped image that were not in the input image will be filled with the following two values depending on the data type of the image. In both cases, SAO DS9 will not color code those pixels. • If the data type of the image is a floating point type (float or double), IEEE NaN (Not a number) will be used. • For integer types, pixels out of the image will be filled with the value of the ‘BLANK’ keyword in the cropped image header. The value assigned to it is the lowest value possible for that type, so you will probably never need it any way. Only for the unsigned character type (‘BITPIX=8’ in the FITS header), the maximum value is used because it is unsigned, the smallest value is zero which is often meaningful. You can ask for such blank regions to not be included in the output crop image using the ‘--noblank’ option. In such cases, there is no guarantee that the image size of your outputs are what you asked for. In some survey images, unfortunately they do not use the ‘BLANK’ FITS keyword. Instead they just give all pixels outside of the survey area a value of zero. So by default, when dealing with float or double image types, any values that are 0.0 are also regarded as blank regions. This can be turned off with the ‘--zeroisnotblank’ option.  File: gnuastro.info, Node: Invoking astcrop, Prev: Blank pixels, Up: Crop 6.1.4 Invoking Crop ------------------- Crop will crop a region from an image. If in WCS mode, it will also stitch parts from separate images in the input files. The executable name is ‘astcrop’ with the following general template $ astcrop [OPTION...] [ASCIIcatalog] ASTRdata ... One line examples: ## Crop all objects in cat.txt from image.fits: $ astcrop --catalog=cat.txt image.fits ## Crop all options in catalog (with RA,DEC) from all the files ## ending in `_drz.fits' in `/mnt/data/COSMOS/': $ astcrop --mode=wcs --catalog=cat.txt /mnt/data/COSMOS/*_drz.fits ## Crop the outer 10 border pixels of the input image and give ## the output HDU a name ('EXTNAME' keyword in FITS) of 'mysection'. $ astcrop --section=10:*-10,10:*-10 --hdu=2 image.fits \ --metaname=mysection ## Crop region around RA and Dec of (189.16704, 62.218203): $ astcrop --mode=wcs --center=189.16704,62.218203 goodsnorth.fits ## Same crop above, but coordinates given in sexagesimal (you can ## also use ':' between the sexagesimal components). $ astcrop --mode=wcs --center=12h36m40.08,62d13m5.53 goodsnorth.fits ## Crop region around pixel coordinate (568.342, 2091.719): $ astcrop --mode=img --center=568.342,2091.719 --width=201 image.fits ## Crop all HDUs within a FITS file at a certain coordinate, while ## preserving the names of the HDUs in the output. $ for hdu in $(astfits input.fits --listimagehdus); do \ astcrop input.fits --hdu=$hdu --append --output=crop.fits \ --metaname=$hdu --mode=wcs --center=189.16704,62.218203 \ --width=10/3600 done Crop has one mandatory argument which is the input image name(s), shown above with ‘ASTRdata ...’. You can use shell expansions, for example, ‘*’ for this if you have lots of images in WCS mode. If the crop box centers are in a catalog, you can use the ‘--catalog’ option. In other cases, you have to provide the single cropped output parameters must be given with command-line options. See *note Crop output:: for how the output file name(s) can be specified. For the full list of general options to all Gnuastro programs (including Crop), please see *note Common options::. Floating point numbers can be used to specify the crop region (except the ‘--section’ option, see *note Crop section syntax::). In such cases, the floating point values will be used to find the desired integer pixel indices based on the FITS standard. Hence, Crop ultimately does not do any sub-pixel cropping (in other words, it does not change pixel values). If you need such crops, you can use *note Warp:: to first warp the image to the a new pixel grid, then crop from that. For example, let's assume you want a crop from pixels 12.982 to 80.982 along the first dimension. You should first translate the image by $-0.482$ (note that the edge of a pixel is at integer multiples of $0.5$). So you should run Warp with ‘--translate=-0.482,0’ and then crop the warped image with ‘--section=13:81’. There are two ways to define the cropped region: with its center or its vertices. See *note Crop modes:: for a full description. In the former case, Crop can check if the central region of the cropped image is indeed filled with data or is blank (see *note Blank pixels::), and not produce any output when the center is blank, see the description under ‘--checkcenter’ for more. When in catalog mode, Crop will run in parallel unless you set ‘--numthreads=1’, see *note Multi-threaded operations::. Note that when multiple outputs are created with threads, the outputs will not be created in the same order. This is because the threads are asynchronous and thus not started in order. This has no effect on each output, see *note Reddest clumps cutouts and parallelization:: for a tutorial on effectively using this feature. * Menu: * Crop options:: A list of all the options with explanation. * Crop output:: The outputs of Crop. * Crop known issues:: Known issues in running Crop.  File: gnuastro.info, Node: Crop options, Next: Crop output, Prev: Invoking astcrop, Up: Invoking astcrop 6.1.4.1 Crop options .................... The options can be classified into the following contexts: Input, Output and operating mode options. Options that are common to all Gnuastro program are listed in *note Common options:: and will not be repeated here. When you are specifying the crop vertices yourself (through ‘--section’, or ‘--polygon’) on relatively small regions (depending on the resolution of your images) the outputs from image and WCS mode can be approximately equivalent. However, as the crop sizes get large, the curved nature of the WCS coordinates have to be considered. For example, when using ‘--section’, the right ascension of the bottom left and top left corners will not be equal. If you only want regions within a given right ascension, use ‘--polygon’ in WCS mode. Input image parameters: ‘--hstartwcs=INT’ Specify the first keyword card (line number) to start finding the input image world coordinate system information. This is useful when certain header keywords of the input may cause bad conflicts with your crop (see an example described below). To get line numbers of the header keywords, you can pipe the fully printed header into ‘cat -n’ like below: $ astfits image.fits -h1 | cat -n For example, distortions have only been present in WCSLIB from version 5.15 (released in mid 2016). Therefore some pipelines still apply their own specific set of WCS keywords for distortions and put them into the image header along with those that WCSLIB does recognize. So now that WCSLIB recognizes most of the standard distortion parameters, they will get confused with the old ones and give wrong results. For example, in the CANDELS-GOODS South images that were created before WCSLIB 5.15(1). The two ‘--hstartwcs’ and ‘--hendwcs’ are thus provided so when using older datasets, you can specify what region in the FITS headers you want to use to read the WCS keywords. Note that this is only relevant for reading the WCS information, basic data information like the image size are read separately. These two options will only be considered when the value to ‘--hendwcs’ is larger than that of ‘--hstartwcs’. So if they are equal or ‘--hstartwcs’ is larger than ‘--hendwcs’, then all the input keywords will be parsed to get the WCS information of the image. ‘--hendwcs=INT’ Specify the last keyword card to read for specifying the image world coordinate system on the input images. See ‘--hstartwcs’ Crop box parameters: ‘-c FLT[,FLT[,...]]’ ‘--center=FLT[,FLT[,...]]’ The central position of the crop in the input image. The positions along each dimension must be separated by a comma (<,>) and fractions are also acceptable. The comma-separated values can either be in degrees (a single number), or sexagesimal (‘_h_m_’ for RA, ‘_d_m_’ for Dec, or ‘_:_:_’ for both). The number of values given to this option must be the same as the dimensions of the input dataset. The width of the crop should be set with ‘--width’. The units of the coordinates are read based on the value to the ‘--mode’ option, see below. ‘-O STR’ ‘--mode=STR’ Mode to interpret the crop's coordinates (for example with ‘--center’, ‘--catalog’ or ‘--polygon’). The value must either be ‘img’ (to assume image/pixel coordinates) or ‘wcs’ (to assume WCS, usually RA/Dec, coordinates), see *note Crop modes:: for a full description. ‘-w FLT[,FLT[,...]]’ ‘--width=FLT[,FLT[,...]]’ Width of the cropped region about coordinate given to ‘--center’. If in WCS mode, value(s) given to this option will be read in the same units as the dataset's WCS information along this dimension (unless ‘--widthinpix’ is given). This option may take either a single value (to be used for all dimensions: ‘--width=10’ in image-mode will crop a $10\times10$ pixel image) or multiple values (a specific value for each dimension: ‘--width=10,20’ in image-mode will crop a $10\times20$ pixel image). The ‘--width’ option also accepts fractions. For example, if you want the width of your crop to be 3 by 5 arcseconds along RA and Dec respectively and you are in wcs-mode, you can use: ‘--width=3/3600,5/3600’. The final output will have an odd number of pixels to allow easy identification of the pixel which keeps your requested coordinate (from ‘--center’ or ‘--catalog’). If you want an even sided crop, you can run Crop afterwards with ‘--section=":*-1,:*-1"’ or ‘--section=2:,2:’ (depending on which side you do not need), see *note Crop section syntax::. The basic reason for making an odd-sided crop is that your given central coordinate will ultimately fall within a discrete pixel in the image (defined by the FITS standard). When the crop has an odd number of pixels in each dimension, that pixel can be very well defined as the "central" pixel of the crop, making it unambiguously easy to identify. However, for an even-sided crop, it will be very hard to identify the central pixel (it can be on any of the four pixels adjacent to the central point of the image!). ‘-X’ ‘--widthinpix’ In WCS mode, interpret the value to ‘--width’ as number of pixels, not the WCS units like degrees. This is useful when you want a fixed crop size in pixels, even though your center coordinates are in WCS (for example, RA and Dec). ‘-l STR’ ‘-l FLT:FLT,...’ ‘--polygon=STR’ ‘--polygon=FLT,FLT:FLT,FLT:...’ Polygon vertice coordinates (when value is in ‘FLT,FLT:FLT,FLT:...’ format) or the filename of a SAO DS9 region file (when the value has no ‘,’ or ‘:’ characters). Each vertice can either be in degrees (a single floating point number) or sexagesimal (in formats of '‘_h_m_’' for RA and '‘_d_m_’' for Dec, or simply '‘_:_:_’' for either of them). The vertices are used to define the polygon: in the same order given to this option. When the vertices are not necessarily ordered in the proper order (for example, one vertice in a square comes after its diagonal opposite), you can add the ‘--polygonsort’ option which will attempt to sort the vertices before cropping. Note that for concave polygons, sorting is not recommended because there is no unique solution, for more, see the description under ‘--polygonsort’. This option can be used both in the image and WCS modes, see *note Crop modes::. If a SAO DS9 region file is used, the coordinate mode of Crop will be determined by the contents of the file and any value given to ‘--mode’ is ignored. The cropped image will be the size of the rectangular region that completely encompasses the polygon. By default all the pixels that are outside of the polygon will be set as blank values (see *note Blank pixels::). However, if ‘--polygonout’ is called all pixels internal to the vertices will be set to blank. In WCS-mode, you may provide many FITS images/tiles: Crop will stitch them to produce this cropped region, then apply the polygon. The syntax for the polygon vertices is similar to, and simpler than, that for ‘--section’. In short, the dimensions of each coordinate are separated by a comma (<,>) and each vertex is separated by a colon (<:>). You can define as many vertices as you like. If you would like to use space characters between the dimensions and vertices to make them more human-readable, then you have to put the value to this option in double quotation marks. For example, let's assume you want to work on the deepest part of the WFC3/IR images of Hubble Space Telescope eXtreme Deep Field (HST-XDF). According to the web page (https://archive.stsci.edu/prepds/xdf/)(2) the deepest part is contained within the coordinates: [ (53.187414,-27.779152), (53.159507,-27.759633), (53.134517,-27.787144), (53.161906,-27.807208) ] They have provided mask images with only these pixels in the WFC3/IR images, but what if you also need to work on the same region in the full resolution ACS images? Also what if you want to use the CANDELS data for the shallow region? Running Crop with ‘--polygon’ will easily pull out this region of the image for you, irrespective of the resolution. If you have set the operating mode to WCS mode in your nearest configuration file (see *note Configuration files::), there is no need to call ‘--mode=wcs’ on the command-line. $ astcrop --mode=wcs desired-filter-image(s).fits \ --polygon="53.187414,-27.779152 : 53.159507,-27.759633 : \ 53.134517,-27.787144 : 53.161906,-27.807208" More generally, you have an image and want to define the polygon yourself (it is not already published like the example above). As the number of vertices increases, checking the vertex coordinates on a FITS viewer (for example, SAO DS9) and typing them in, one by one, can be very tedious and prone to typo errors. In such cases, you can make a polygon "region" in DS9 and using your mouse, easily define (and visually see) it. Given that SAO DS9 has a graphic user interface (GUI), if you do not have the polygon vertices before-hand, it is much more easier build your polygon there and pass it onto Crop through the region file. You can take the following steps to make an SAO DS9 region file containing your polygon. Open your desired FITS image with SAO DS9 and activate its "region" mode with Edit→Region. Then define the region as a polygon with Region→Shape→Polygon. Click on the approximate center of the region you want and a small square will appear. By clicking on the vertices of the square you can shrink or expand it, clicking and dragging anywhere on the edges will enable you to define a new vertex. After the region has been nicely defined, save it as a file with Region→"Save Regions". You can then select the name and address of the output file, keep the format as ‘REG (*.reg)’ and press the "OK" button. In the next window, keep format as "ds9" and "Coordinate System" as "fk5" for RA and Dec (or "Image" for pixel coordinates). A plain text file is now created (let's call it ‘ds9.reg’) which you can pass onto Crop with ‘--polygon=ds9.reg’. For the expected format of the region file, see the description of ‘gal_ds9_reg_read_polygon’ in *note SAO DS9 library::. However, since SAO DS9 makes this file for you, you do not usually need to worry about its internal format unless something un-expected happens and you find a bug. ‘--polygonout’ Keep all the regions outside the polygon and mask the inner ones with blank pixels (see *note Blank pixels::). This is practically the inverse of the default mode of treating polygons. Note that this option only works when you have only provided one input image. If multiple images are given (in WCS mode), then the full area covered by all the images has to be shown and the polygon excluded. This can lead to a very large area if large surveys like COSMOS are used. So Crop will abort and notify you. In such cases, it is best to crop out the larger region you want, then mask the smaller region with this option. ‘--polygonsort’ Sort the given set of vertices to the ‘--polygon’ option. For a concave polygon it will sort the vertices correctly, however for a convex polygon it there is no unique sorting, so be careful because the crop may not be what you expected. Polygons come in two classes: convex and concave (or generally, non-convex!), see below for a demonstration. Convex polygons are those where all inner angles are less than 180 degrees. By contrast, a concave polygon is one where an inner angle may be more than 180 degrees. Concave Polygon Convex Polygon D --------C D------------- C \ | E / | \E | \ | / | \ | A--------B A ----------B ‘-s STR’ ‘--section=STR’ Section of the input image which you want to be cropped. See *note Crop section syntax:: for a complete explanation on the syntax required for this input. ‘-C FITS/TXT’ ‘--catalog=FITS/TXT’ File name of catalog for making multiple crops from the input images/cubes. The catalog can be in any of Gnuastro's recognized *note Recognized table formats::. The columns containing the coordinates for the crop centers can be specified with the ‘--coordcol’ option (using column names or numbers, see *note Selecting table columns::). The catalog can also contain the name of each crop, you can specify the column containing the name with the ‘--namecol’. ‘--cathdu=STR/INT’ The HDU (extension) containing the catalog (if the file given to ‘--catalog’ is a FITS file). This can either be the HDU name (if it has one) or number (counting from 0). By default (if this option is not given), the second HDU will be used (equivalent to ‘--cathdu=1’. For more on how to specify the HDU, see the explanation of the ‘--hdu’ option in *note Input output options::. ‘-x STR/INT’ ‘--coordcol=STR/INT’ The column in a catalog to read as a coordinate. The value can be either the column number (starting from 1), or a match/search in the table meta-data, see *note Selecting table columns::. This option must be called multiple times, depending on the number of dimensions in the input dataset. If it is called more than necessary, the extra columns (later calls to this option on the command-line or configuration files) will be ignored, see *note Configuration file precedence::. ‘-n STR/INT’ ‘--namecol=STR/INT’ Column selection of crop file name. The value can be either the column number (starting from 1), or a match/search in the table meta-data, see *note Selecting table columns::. This option can be used both in Image and WCS modes, and not a mandatory. When a column is given to this option, the final crop base file name will be taken from the contents of this column. The directory will be determined by the ‘--output’ option (current directory if not given) and the value to ‘--suffix’ will be appended. When this column is not given, the row number will be used instead. ---------- Footnotes ---------- (1) <https://archive.stsci.edu/pub/hlsp/candels/goods-s/gs-tot/v1.0/> (2) <https://archive.stsci.edu/prepds/xdf/>  File: gnuastro.info, Node: Crop output, Next: Crop known issues, Prev: Crop options, Up: Invoking astcrop 6.1.4.2 Crop output ................... The string given to ‘--output’ option will be interpreted depending on how many crops were requested, see *note Crop modes::: • When a catalog is given, the value of the ‘--output’ (see *note Common options::) will be read as the directory to store the output cropped images. Hence if it does not already exist, Crop will abort with an "No such file or directory" error. The crop file names will consist of two parts: a variable part (the row number of each target starting from 1) along with a fixed string which you can set with the ‘--suffix’ option. Optionally, you may also use the ‘--namecol’ option to define a column in the input catalog to use as the file name instead of numbers. • When only one crop is desired, the value to ‘--output’ will be read as a file name. If no output is specified or if it is a directory, the output file name will follow the automatic output names of Gnuastro, see *note Automatic output::: The string given to ‘--suffix’ will be replaced with the ‘.fits’ suffix of the input. By default, as suggested by the FITS standard and implemented in all Gnuastro programs, the first/primary extension of the output files will only contain metadata. The cropped images/cubes will be written into the 2nd HDU of their respective FITS file (which is actually counted as ‘1’ because HDU counting starts from ‘0’). However, if you want the cropped data to be written into the primary (0-th) HDU, run Crop with the ‘--primaryimghdu’ option. If the output file already exists by default Crop will re-write it (so that all existing HDUs in it will be deleted). If you want the cropped HDU to be appended to existing HDUs, use ‘--append’ described below. The 0-th HDU of each output cropped image will contain the names of the input image(s) it was cut from. If a name is longer than the 70 character space that the FITS standard allows for header keyword values, the name will be cut into several keywords from the nearest slash (</>). The keywords have the following format: ‘ICFn_m’ (for Crop File). Where ‘n’ is the number of the image used in this crop and ‘m’ is the part of the name (it can be broken into multiple keywords). Following the name is another keyword named ‘ICFnPIX’ which shows the pixel range from that input image in the same syntax as *note Crop section syntax::. So this string can be directly given to the ‘--section’ option later. Once done, a log file can be created in the current directory with the ‘--log’ option. This file will have three columns and the same number of rows as the number of cropped images. There are also comments on the top of the log file explaining basic information about the run and descriptions for the columns. A short description of the columns is also given below: 1. The cropped image file name for that row. 2. The number of input images that were used to create that image. 3. A ‘0’ if the central few pixels (value to the ‘--checkcenter’ option) are blank and ‘1’ if they are not. When the crop was not defined by its center (see *note Crop modes::), or ‘--checkcenter’ was given a value of 0 (see *note Invoking astcrop::), the center will not be checked and this column will be given a value of ‘-1’. If the output crop(s) have a single element (pixel in an image) and ‘--oneelemstdout’ has been called, no output file will be produced! Instead, the single element's value is printed on the standard output. See the description of ‘--oneelemstdout’ below for more: ‘-p STR’ ‘--suffix=STR’ The suffix (or post-fix) of the output files for when you want all the cropped images to have a special ending. One case where this might be helpful is when besides the science images, you want the weight images (or exposure maps, which are also distributed with survey images) of the cropped regions too. So in one run, you can set the input images to the science images and ‘--suffix=_s.fits’. In the next run you can set the weight images as input and ‘--suffix=_w.fits’. ‘-a STR’ ‘--metaname=STR’ Name of cropped HDU (value to the ‘EXTNAME’ keyword of FITS). If not given, a default ‘CROP’ will be placed there (so the ‘EXTNAME’ keyword will always be present in the output). If crop produces many outputs from a catalog, they will be given the same string as ‘EXTNAME’ (the file names containing the cropped HDU will be different). ‘-A’ ‘--append’ If the output file already exists, append the cropped image HDU to the end of any existing HDUs. By default (when this option isn't given), if an output file already exists, any existing HDU in it will be deleted. If the output file doesn't exist, this option is redundant. ‘--primaryimghdu’ Write the output into the primary (0-th) HDU/extension of the output. By default, like all Gnuastro's default outputs, no data is written in the primary extension because the FITS standard suggests keeping that extension free of data and only for metadata. ‘-t’ ‘--oneelemstdout’ When a crop only has a single element (a single pixel), print it to the standard output instead of making a file. By default (without this option), a single-pixel crop will be saved to a file, just like a crop of any other size. When a single crop is requested (either through ‘--center’, or a catalog of one row is given), the single value alone is printed with nothing else. This makes it easy to immediately write the value into a shell variable for example: value=$(astcrop img.fits --mode=wcs --center=1.234,5.678 \ --width=1 --widthinpix --oneelemstdout \ --quiet) If a catalog of coordinates is given (that would produce multiple crops; or multiple values in this scenario), the solution for a single value will not work! Recall that Crop will do the crops in parallel, therefore each time you run it, the order of the rows will be different and not correspond to the order of the inputs. To allow identification of each value (which row of the input catalog it corresponds to), Crop will first print the name of the would-be created file name, and print the value after it (separated by an empty SPACE character). In other words, the file in the first column will not actually be created, but the value of the pixel it would have contained (if this option was not called) is printed after it. ‘-c FLT/INT’ ‘--checkcenter=FLT/INT’ Square box width of region in the center of the image to check for blank values. If any of the pixels in this central region of a crop (defined by its center) are blank, then it will not be stored in an output file. If the value to this option is zero, no checking is done. This check is only applied when the cropped region(s) are defined by their center (not by the vertices, see *note Crop modes::). The units of the value are interpreted based on the ‘--mode’ value (in WCS or pixel units). The ultimate checked region size (in pixels) will be an odd integer around the center (converted from WCS, or when an even number of pixels are given to this option). In WCS mode, the value can be given as fractions, for example, if the WCS units are in degrees, ‘0.1/3600’ will correspond to a check size of 0.1 arcseconds. Because survey regions do not often have a clean square or rectangle shape, some of the pixels on the sides of the survey FITS image do not commonly have any data and are blank (see *note Blank pixels::). So when the catalog was not generated from the input image, it often happens that the image does not have data over some of the points. When the given center of a crop falls in such regions or outside the dataset, and this option has a non-zero value, no crop will be created. Therefore with this option, you can specify a width of a small box (3 pixels is often good enough) around the central pixel of the cropped image. You can check which crops were created and which were not from the command-line (if ‘--quiet’ was not called, see *note Operating mode options::), or in Crop's log file (see *note Crop output::). ‘-b’ ‘--noblank’ Pixels outside of the input image that are in the crop box will not be used. By default they are filled with blank values (depending on type), see *note Blank pixels::. This option only applies only in Image mode, see *note Crop modes::. ‘-z’ ‘--zeroisnotblank’ In float or double images, it is common to give the value of zero to blank pixels. If the input image type is one of these two types, such pixels will also be considered as blank. You can disable this behavior with this option, see *note Blank pixels::.  File: gnuastro.info, Node: Crop known issues, Prev: Crop output, Up: Invoking astcrop 6.1.4.3 Crop known issues ......................... When running Crop, you may encounter strange errors and bugs. In these cases, please report a bug and we will try to fix it as soon as possible, see *note Report a bug::. However, some things are beyond our control, or may take too long to fix directly. In this section we list such known issues that may occur in known cases and suggest the hack (or work-around) to fix the problem: Crash with ‘Killed’ when cropping catalog from ‘.fits.gz’ This happens because CFISTIO (that reads and writes FITS files) will internally decompress the file in a temporary place (possibly in the RAM), then start reading from it. On the other hand, by default when given a catalog (with many crops) and not specifying ‘--numthreads’, Crop will use the maximum number of threads available on your system to do each crop faster. On an normal (not compressed) file, parallel access will not cause a problem, however, when attempting parallel access with the maximum number of threads on a compressed file, CFITSIO crashes with ‘Killed’. Therefore the following solutions can be used to fix this crash: • Decrease the number of threads (at the minimum, set ‘--numthreads=1’). Since this solution does not attempt to change any of your previous Crop command components or does not change your local file structure, it is the preferred way. • Decompress the file (with the command below) and feed the ‘.fits’ file into Crop without changing the number of threads. $ gunzip -k image.fits.gz  File: gnuastro.info, Node: Arithmetic, Next: Convolve, Prev: Crop, Up: Data manipulation 6.2 Arithmetic ============== It is commonly necessary to do operations on some or all of the elements of a dataset independently (pixels in an image). For example, in the reduction of raw data it is necessary to subtract the Sky value (*note Sky value::) from each image image. Later (once the images as warped into a single grid using Warp for example, see *note Warp::), the images are co-added (the output pixel grid is the average of the pixels of the individual input images). Arithmetic is Gnuastro's program for such operations on your datasets directly from the command-line. It currently uses the reverse polish or post-fix notation, see *note Reverse polish notation:: and will work on the native data types of the input images/data to reduce CPU and RAM resources, see *note Numeric data types::. For more information on how to run Arithmetic, please see *note Invoking astarithmetic::. * Menu: * Reverse polish notation:: The current notation style for Arithmetic. * Integer benefits and pitfalls:: Integers have benefits, but require care. * Noise basics:: Introduction various noise models. * Arithmetic operators:: List of operators known to Arithmetic. * Invoking astarithmetic:: How to run Arithmetic: options and output.  File: gnuastro.info, Node: Reverse polish notation, Next: Integer benefits and pitfalls, Prev: Arithmetic, Up: Arithmetic 6.2.1 Reverse polish notation ----------------------------- The most common notation for arithmetic operations is the infix notation (https://en.wikipedia.org/wiki/Infix_notation) where the operator goes between the two operands, for example, $4+5$. The infix notation is the preferred way in most programming languages which come with scripting features for large programs. This is because the infix notation requires a way to define precedence when more than one operator is involved. For example, consider the statement ‘5 + 6 / 2’. Should 6 first be divided by 2, then added by 5? Or should 5 first be added with 6, then divided by 2? Therefore we need parenthesis to show precedence: ‘5+(6/2)’ or ‘(5+6)/2’. Furthermore, if you need to leave a value for later processing, you will need to define a variable for it; for example, ‘a=(5+6)/2’. Gnuastro provides libraries where you can also use infix notation in C or C++ programs. However, Gnuastro's programs are primarily designed to be run on the command-line and the level of complexity that infix notation requires can be annoying/confusing to write on the command-line (where they can get confused with the shell's parenthesis or variable definitions). Therefore Gnuastro's Arithmetic and Table (when doing column arithmetic) programs use the post-fix notation, also known as reverse polish notation (https://en.wikipedia.org/wiki/Reverse_Polish_notation). For example, instead of writing ‘5+6’, we write ‘5 6 +’. The Wikipedia article on the reverse polish notation provides some excellent explanation on this notation but here we will give a short summary here for self-sufficiency. In short, in the reverse polish notation, the operator is placed after the operands. As we will see below this removes the need to define parenthesis and lets you use previous values without needing to define a variable. In the future(1) we do plan to also optionally allow infix notation when arithmetic operations on datasets are desired, but due to time constraints on the developers we cannot do it immediately. To easily understand how the reverse polish notation works, you can think of each operand (‘5’ and ‘6’ in the example above) as a node in a "last-in-first-out" stack. One such stack in daily life is a stack of dishes in the kitchen: you put a clean dish, on the top of a stack of dishes when it is ready for later usage. Later, when you need a dish, you pick the top one (hence the "last" dish placed "in" the stack is the "first" dish that comes "out" when necessary). Each operator will need a certain number of operands (in the example above, the ‘+’ operator needs two operands: ‘5’ and ‘6’). In the kitchen metaphor, an operator can be an oven. Every time an operator is confronted, the operator takes (or "pops") the number of operands it needs from the top of the stack (so they do not exist in the stack any more), does its operation, and places (or "pushes") the result back on top of the stack. So if you want the average of 5 and 6, you would write: ‘5 6 + 2 /’. The operations that are done are: 1. ‘5’ is an operand, so Arithmetic pushes it to the top of the stack (which is initially empty). In the kitchen metaphor, you can visualize this as taking a new dish from the cabinet, putting the number 5 inside of the dish, and putting the dish on top of the (empty) cooking table in front of you. You now have a stack of one dish on the table in front of you. 2. ‘6’ is also an operand, so it is pushed to the top of the stack. Like before, you can visualize this as taking a new dish from the cabinet, putting the number 6 in it and placing it on top of the previous dish. You now have a stack of two dishes on the table in front of you. 3. ‘+’ is a _binary_ operator, so it will pop the top two elements of the stack out of it, and perform addition on them (the order is $5+6$ in the example above). The result is ‘11’ which is pushed to the top of the stack. To visualize this, you can think of the ‘+’ operator as an oven with a place for two dishes. You pick up the top-most dish (that has the number 6 in it) and put it in the oven. The top dish is now the one that has the number 5. You also pick it up and put it in the oven, and close the oven door. When the oven has finished its cooking, it produces a single output (in one dish, with the number 11 inside of it). You take that output dish and put it back on the table. You now have a stack of one dish on the table in front of you. 4. ‘2’ is an operand so push it onto the top of the stack. In the kitchen metaphor, you again go to the cabinet, pick up a dish and put the number 2 inside of it and put the dish over the previous dish (that has the number 11). You now have a stack of two dishes on the table in front of you. 5. ‘/’ (division) is a binary operator, so pull out the top two elements of the stack (top-most is ‘2’, then ‘11’) and divide the second one by the first. In the kitchen metaphor, the ‘/’ operator can be visualized as a microwave that takes two dishes. But unlike the oven (‘+’ operator) before, the order of inputs matters (they are on top of each other: with the top dish holder being the numerator and the bottom one being the denominator). Again, you look at your stack of dishes on the table. You pick up the top one (with value 2 inside of it) and put it in the microwave's bottom (denominator) dish holder. Then you go back to your stack of dishes on the table and pick up the top dish (with value 11 inside of it) and put that in the top (nominator) dish holder. The microwave will do its work and when it is finished, returns a new dish with the single value 5.5 inside of it. You pick up the dish from the microwave and place it back on the table. 6. There are no more operands or operators, so simply return the remaining operand in the output. In the kitchen metaphor, you see that your recipe has no more steps, so you just pick up the remaining dish and take it to the dining room to enjoy a good dinner. In the Arithmetic program, the operands can be FITS images of any dimensionality, or numbers (see *note Invoking astarithmetic::). In Table's column arithmetic, they can be any column in the table (a series of numbers in an array) or a single number (see *note Column arithmetic::). With this notation, very complicated procedures can be created without the need for parenthesis or worrying about precedence. Even functions which take an arbitrary number of arguments can be defined in this notation. This is a very powerful notation and is used in languages like Postscript (2) which produces PDF files when compiled. ---------- Footnotes ---------- (1) <https://savannah.gnu.org/task/index.php?13867> (2) See the EPS and PDF part of *note Recognized file formats:: for a little more on the Postscript language.  File: gnuastro.info, Node: Integer benefits and pitfalls, Next: Noise basics, Prev: Reverse polish notation, Up: Arithmetic 6.2.2 Integer benefits and pitfalls ----------------------------------- Integers are the simplest numerical data types (*note Numeric data types::). Because of this, their storage space is much less, and their processing is much faster than floating point types. You can confirm this on your computer with the series of commands below. You will make four 5000 by 5000 pixel images filled with random values. Two of them will be saved as signed 8-bit integers, and two with 64-bit floating point types. The last command prints the size of the created images. $ astarithmetic 5000 5000 2 makenew 5 mknoise-sigma int8 -oint-1.fits $ astarithmetic 5000 5000 2 makenew 5 mknoise-sigma int8 -oint-2.fits $ astarithmetic 5000 5000 2 makenew 5 mknoise-sigma float64 -oflt-1.fits $ astarithmetic 5000 5000 2 makenew 5 mknoise-sigma float64 -oflt-2.fits $ ls -lh int-*.fits flt-*.fits The 8-bit integer images are only 24MB, while the 64-bit floating point images are 191 MB! Besides helping in storage (on your disk, or in RAM, while the program is running), the small size of these files also helps in faster reading of the inputs. Furthermore, CPUs can process integer operations much faster than floating points. In the integers, the ones with a smaller width (number of bits) can be processed much faster. You can see this with the two commands below where you will add the integer images with each other and the floats with each other: $ astarithmetic flt-1.fits flt-2.fits + -oflt-sum.fits -g1 $ astarithmetic int-1.fits int-2.fits + -oint-sum.fits -g1 Have a look at the running time of the two commands above (that is printed on their last line). On the system that this paragraph was written on, the floating point and integer image sums were respectively done in 0.481 and 0.089 seconds (the integer operation was almost 5 times faster!). *If your data does not have decimal points, use integer types:* integer types are much faster and can take much less space in your storage or RAM (while the program is running). *Select the smallest width that can host the range/precision of values:* for example, if the largest possible value in your dataset is 1000 and all numbers are integers, store it as a 16-bit integer. Also, if you know the values can never become negative, store it as an unsigned 16-bit integer. For floating point types, if you know you will not need a precision of more than 6 significant digits, use the 32-bit floating point type. For more on the range (for integers) and precision (for floats), see *note Numeric data types::. There is a price to be paid for this improved efficiency in integers: your wisdom! If you have not selected your types wisely, strange situations may happen. For example, try the command below: $ astarithmetic 125 10 + You expect the output to be $135$, but it will be $-121$! The reason is that when Arithmetic (or column-arithmetic in Table) confronts a number on the command-line, it use the principles above to select the most efficient type for each number. Both $125$ and $10$ can safely fit within a signed, 8-bit integer type, so arithmetic will store both as an 8-bit integer. However, the sum ($135$) is larger than the maximum possible value of an 8-bit signed integer ($127$). Therefore an integer overflow will occur, and the bits will be over-written. As a result, the value will be $135-128=7$ more than the minimum value of this type ($-128$), which is $-128+7=-121$. When you know situations like this may occur, you can simply use *note Numerical type conversion operators::, to set just one of the inputs to a wider data type (the smallest, wider type to avoid wasting resources). In the example above, this would be ‘uint16’: $ astarithmetic 125 uint16 10 + The reason this worked is that $125$ is now converted into an unsigned 16-bit integer before the ‘+’ operator. Since this is larger than an 8-bit integer, the C programming language's automatic type conversion will treat both as the wider type and store the result of the binary operation (‘+’) in that type. For such a basic operation like the command above, a faster hack would be any of the two commands below (which are equivalent). This is because ‘125.0’ or ‘125.’ are interpreted as floating-point types and they do not suffer from such issues (converting only on one input is enough): $ astarithmetic 125. 10 + $ astarithmetic 125.0 10 + For this particular command, the fix above will be as fast as the ‘uint16’ solution. This is because there are only two numbers, and the overhead of Arithmetic (reading configuration files, etc.) dominates the running time. However, for large datasets, the ‘uint16’ solution will be faster (as you saw above), Arithmetic will consume less RAM while running, and the output will consume less storage in your system (all major benefits)! It is possible to do internal checks in Gnuastro and catch integer overflows and correct them internally. However, we have not opted for this solution because all those checks will consume significant resources and slow down the program (especially with large datasets where RAM, storage and running time become important). To be optimal, we therefore trust that you (the wise Gnuastro user!) make the appropriate type conversion in your commands where necessary (recall that the operators are available in *note Numerical type conversion operators::).  File: gnuastro.info, Node: Noise basics, Next: Arithmetic operators, Prev: Integer benefits and pitfalls, Up: Arithmetic 6.2.3 Noise basics ------------------ Deep astronomical images, like those used in extragalactic studies, seriously suffer from noise in the data. Generally speaking, the sources of noise in an astronomical image are photon counting noise and Instrumental noise which are discussed in *note Photon counting noise:: and *note Instrumental noise::. This review finishes with *note Generating random numbers:: which is a short introduction on how random numbers are generated. We will see that while software random number generators are not perfect, they allow us to obtain a reproducible series of random numbers through setting the random number generator function and seed value. Therefore in this section, we will also discuss how you can set these two parameters in Gnuastro's programs (including the arithmetic operators in *note Random number generators::). * Menu: * Photon counting noise:: Poisson noise * Instrumental noise:: Readout, dark current and other sources. * Final noised pixel value:: How the final noised value is calculated. * Generating random numbers:: How random numbers are generated.  File: gnuastro.info, Node: Photon counting noise, Next: Instrumental noise, Prev: Noise basics, Up: Noise basics 6.2.3.1 Photon counting noise ............................. With the very accurate electronics used in today's detectors, photon counting noise(1) is the most significant source of uncertainty in most datasets. To understand this noise (error in counting) and its effect on the images of astronomical targets, let's start by reviewing how a distribution produced by counting can be modeled as a parametric function. Counting is an inherently discrete operation, which can only produce positive integer outputs (including zero). For example, we cannot count $3.2$ or $-2$ of anything. We only count $0$, $1$, $2$, $3$ and so on. The distribution of values, as a result of counting efforts is formally known as the Poisson distribution (https://en.wikipedia.org/wiki/Poisson_distribution). It is associated to Siméon Denis Poisson, because he discussed it while working on the number of wrongful convictions in court cases in his 1837 book(2). Let's take $\lambda$ to represent the expected mean count of something. Furthermore, let's take $k$ to represent the output of a counting attempt (hence $k$ is a positive integer). The probability density function of getting $k$ counts (in each attempt, given the expected/mean count of $\lambda$) can be written as: $$f(k)={\lambda^k \over k!} e^{-\lambda},\quad k\in {0, 1, 2, 3, \dots }$$ Because the Poisson distribution is only applicable to positive integer values (note the factorial operator, which only applies to non-negative integers), naturally it is very skewed when $\lambda$ is near zero. One qualitative way to understand this behavior is that for smaller values near zero, there simply are not enough integers smaller than the mean, than integers that are larger. Therefore to accommodate all possibilities/counts, it has to be strongly skewed to the positive when the mean is small. For more on Skewness, see *note Skewness caused by signal and its measurement::. As $\lambda$ becomes larger, the distribution becomes more and more symmetric, and the variance of that distribution is equal to its mean. In other words, the standard deviation is the square root of the mean. It can also be proved that when the mean is large, say $\lambda>1000$, the Poisson distribution approaches the Normal (Gaussian) distribution (https://en.wikipedia.org/wiki/Normal_distribution) with mean $\mu=\lambda$ and standard deviation $\sigma=\sqrt{\lambda}$. In other words, a Poisson distribution (with a sufficiently large $\lambda$) is simply a Gaussian that has one free parameter ($\mu=\lambda$ and $\sigma=\sqrt{\lambda}$), instead of the two parameters that the Gaussian distribution originally has (independent $\mu$ and $\sigma$). In real situations, the photons/flux from our targets are combined with photons from a certain background (observationally, the _Sky_ value). The Sky value is defined to be the average flux of a region in the dataset with no targets. Its physical origin can be the brightness of the atmosphere (for ground-based instruments), possible stray light within the imaging instrument, the average flux of undetected targets, etc. The Sky value is thus an ideal definition, because in real datasets, what lies deep in the noise (far lower than the detection limit) is never known(3). To account for all of these, the sky value is defined to be the average count/value of the undetected regions in the image. In a mock image/dataset, we have the luxury of setting the background (Sky) value. In summary, the value in each element of the dataset (pixel in an image) is the sum of contributions from various galaxies and stars (after convolution by the PSF, see *note PSF::). Let's name the convolved sum of possibly overlapping objects in each pixel as $I_{nn}$. $nn$ represents 'no noise'. For now, let's assume the background ($B$) is constant and sufficiently high for the Poisson distribution to be approximated by a Gaussian. Then the flux of that pixel, after adding noise, is _a random value_ taken from a Gaussian distribution with the following mean ($\mu$) and standard deviation ($\sigma$): $$\mu=B+I_{nn}, \quad \sigma=\sqrt{B+I_{nn}}$$ In astronomical instruments, $B$ is enhanced by adding a "bias" level to each pixel before the shutter is even opened (for the exposure to start). As the exposure is ongoing and photo-electrons are accumulating from the astronomical objects, a "dark" current (due to thermal radiation of the instrument) also builds up in the pixels. The "dark" current will accumulate even when the shutter is closed, but the CCD electronics are working (hence the name "dark"). This added dark level further enhances the mean value in a real observation compared to the raw background value (from the atmosphere for example). Since this type of noise is inherent in the objects we study, it is usually measured on the same scale as the astronomical objects, namely the magnitude system, see *note Brightness flux magnitude::. It is then internally converted to the flux scale for further processing. The equations above clearly show the importance of the background value and its effect on the final signal to noise ratio in each pixel of a science image. It is therefore, one of the most important factors in understanding the noise (and properly simulating observations where necessary). An inappropriately bright background value can hide the signal of the mock profile hide behind the noise. In other words, a brighter background has larger standard deviation and vice versa. As a result, the only necessary parameter to define photon-counting noise over a mock image of simulated profiles is the background. For a complete example, see *note Sufi simulates a detection::. To better understand the correlation between the mean (or background) value and the noise standard deviation, let's use an analogy. Consider the profile of your galaxy to be analogous to the profile of a ship that is sailing in the sea. The height of the ship would therefore be analogous to the maximum flux difference between your galaxy's minimum and maximum values. Furthermore, let's take the depth of the sea to represent the background value: a deeper sea, corresponds to a brighter background. In this analogy, the "noise" would be the height of the waves that surround the ship: in deeper waters, the waves would also be taller (the square root of the mean depth at the ship's position). If the ship is in deep waters, the height of waves are greater than when the ship is near to the beach (at lower depths). Therefore, when the ship is in the middle of the sea, there are high waves that are capable of hiding a significant part of the ship from our perspective. This corresponds to a brighter background value in astronomical images: the resulting noise from that brighter background can completely wash out the signal from a fainter galaxy, star or solar system object. ---------- Footnotes ---------- (1) In practice, we are actually counting the electrons that are produced by each photon, not the actual photons. (2) [From Wikipedia] Poisson's result was also derived in a previous study by Abraham de Moivre in 1711. Therefore some people suggest it should rightly be called the de Moivre distribution. (3) In a real image, a relatively large number of very faint objects can be fully buried in the noise and never detected. These undetected objects will bias the background measurement to slightly larger values. Our best approximation is thus to simply assume they are uniform, and consider their average effect. See Figure 1 (a.1 and a.2) and Section 2.2 in Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664).  File: gnuastro.info, Node: Instrumental noise, Next: Final noised pixel value, Prev: Photon counting noise, Up: Noise basics 6.2.3.2 Instrumental noise .......................... While taking images with a camera, a bias current is fed to the pixels, the variation of the value of this bias current over the pixels, also adds to the final image noise. Another source of noise is the readout noise that is produced by the electronics in the detector. Specifically, the parts that attempt to digitize the voltage produced by the photo-electrons in the analog to digital converter. With the current generation of instruments, this source of noise is not as significant as the noise due to the background Sky discussed in *note Photon counting noise::. Let $C$ represent the combined standard deviation of all these instrumental sources of noise. When only this source of noise is present, the noised pixel value would be a random value chosen from a Gaussian distribution with $$\mu=I_{nn}, \quad \sigma=\sqrt{C^2+I_{nn}}$$ This type of noise is independent of the signal in the dataset, it is only determined by the instrument. So the flux scale (and not magnitude scale) is most commonly used for this type of noise. In practice, this value is usually reported in analog-to-digital units or ADUs, not flux or electron counts. The gain value of the device can be used to convert between these two, see *note Brightness flux magnitude::.  File: gnuastro.info, Node: Final noised pixel value, Next: Generating random numbers, Prev: Instrumental noise, Up: Noise basics 6.2.3.3 Final noised pixel value ................................ Based on the discussions in *note Photon counting noise:: and *note Instrumental noise::, depending on the values you specify for $B$ and $C$ from the above, the final noised value for each pixel is a random value chosen from a Gaussian distribution with $$\mu=B+I_{nn}, \quad \sigma=\sqrt{C^2+B+I_{nn}}$$  File: gnuastro.info, Node: Generating random numbers, Prev: Final noised pixel value, Up: Noise basics 6.2.3.4 Generating random numbers ................................. As discussed above, to generate noise we need to make random samples of a particular distribution. So it is important to understand some general concepts regarding the generation of random numbers. For a very complete and nice introduction we strongly advise reading Donald Knuth's "The art of computer programming", volume 2, chapter 3(1). Quoting from the GNU Scientific Library manual, "If you do not own it, you should stop reading right now, run to the nearest bookstore, and buy it"(2)! Using only software, we can only produce what is called a psuedo-random sequence of numbers. A true random number generator is a hardware (let's assume we have made sure it has no systematic biases), for example, throwing dice or flipping coins (which have remained from the ancient times). More modern hardware methods use atmospheric noise, thermal noise or other types of external electromagnetic or quantum phenomena. All pseudo-random number generators (software) require a seed to be the basis of the generation. The advantage of having a seed is that if you specify the same seed for multiple runs, you will get an identical sequence of random numbers which allows you to reproduce the same final noised image. The programs in GNU Astronomy Utilities (for example, MakeNoise or MakeProfiles) use the GNU Scientific Library (GSL) to generate random numbers. GSL allows the user to set the random number generator through environment variables, see *note Installation directory:: for an introduction to environment variables. In the chapter titled "Random Number Generation" they have fully explained the various random number generators that are available (there are a lot of them!). Through the two environment variables ‘GSL_RNG_TYPE’ and ‘GSL_RNG_SEED’ you can specify the generator and its seed respectively. If you do not specify a value for ‘GSL_RNG_TYPE’, GSL will use its default random number generator type. The default type is sufficient for most general applications. If no value is given for the ‘GSL_RNG_SEED’ environment variable and you have asked Gnuastro to read the seed from the environment (through the ‘--envseed’ option), then GSL will use the default value of each generator to give identical outputs. If you do not explicitly tell Gnuastro programs to read the seed value from the environment variable, then they will use the system time (accurate to within a microsecond) to generate (apparently random) seeds. In this manner, every time you run the program, you will get a different random number distribution. There are two ways you can specify values for these environment variables. You can call them on the same command-line for example: $ GSL_RNG_TYPE="taus" GSL_RNG_SEED=345 astarithmetic input.fits \ mknoise-sigma \ --envseed In this manner the values will only be used for this particular execution of Arithmetic. However, it makes your code hard to read! Alternatively, you can define them for the full period of your terminal session or script, using the shell's ‘export’ command with the two separate commands below (for a script remove the ‘$’ signs): $ export GSL_RNG_TYPE="taus" $ export GSL_RNG_SEED=345 The subsequent programs which use GSL's random number generators will hence forth use these values in this session of the terminal you are running or while executing this script. In case you want to set fixed values for these parameters every time you use the GSL random number generator, you can add these two lines to your ‘.bashrc’ startup script(3), see *note Installation directory::. *IMPORTANT NOTE:* If the two environment variables ‘GSL_RNG_TYPE’ and ‘GSL_RNG_SEED’ are defined, GSL will report them by default, even if you do not use the ‘--envseed’ option. For example, see this call to MakeProfiles: $ export GSL_RNG_TYPE=taus $ export GSL_RNG_SEED=345 $ astmkprof -s1 --kernel=gaussian,2,5 GSL_RNG_TYPE=taus GSL_RNG_SEED=345 MakeProfiles V.VV started on DDD MMM DDD HH:MM:SS YYYY - Building one gaussian kernel - Random number generator (RNG) type: taus - Basic RNG seed: 1618960836 ---- ./kernel.fits created. -- Output: ./kernel.fits MakeProfiles finished in 0.068945 seconds The first two output lines (showing the names and values of the GSL environment variables) are printed by GSL before MakeProfiles actually starts generating random numbers. Gnuastro's programs will report the actual values they use independently (after the name of the program), you should check them for the final values used, not GSL's printed values. In the example above, did you notice how the random number generator seed above is different between GSL and MakeProfiles? However, if ‘--envseed’ was given, both printed seeds would be the same. ---------- Footnotes ---------- (1) Knuth, Donald. 1998. The art of computer programming. Addison-Wesley. ISBN 0-201-89684-2 (2) For students, running to the library might be more affordable! (3) Do not forget that if you are going to give your scripts (that use the GSL random number generator) to others you have to make sure you also tell them to set these environment variable separately. So for scripts, it is best to keep all such variable definitions within the script, even if they are within your ‘.bashrc’.  File: gnuastro.info, Node: Arithmetic operators, Next: Invoking astarithmetic, Prev: Noise basics, Up: Arithmetic 6.2.4 Arithmetic operators -------------------------- In this section, list of recognized operators in Arithmetic (and the Table program's *note Column arithmetic::) and discussed in detail with examples. As mentioned before, to be able to easily do complex operations on the command-line, the Reverse Polish Notation is used (where you write '$4\quad5\quad+$' instead of '$4 + 5$'), if you are not already familiar with it, before continuing, please see *note Reverse polish notation::. The operands to all operators can be a data array (for example, a FITS image or data cube) or a number, the output will be an array or number according to the inputs. For example, a number multiplied by an array will produce an array. The numerical data type of the output of each operator is described within it. Here are some generic tips and tricks (relevant to all operators): Multiple operators in one command When you need to use arithmetic commands in several consecutive operations, you can use one command instead of multiple commands and perform all calculations in the same command. For example, assume you want to apply a threshold of 10 on your image, and label the connected groups of pixel above this threshold. You need two operators for this: ‘gt’ (for "greater than", see *note Conditional operators::) and ‘connected-components’ (see *note Mathematical morphology operators::). The bad (non-optimized and slow) way of doing this is to call Arithmetic two times: $ astarithmetic image.fits 10 gt --output=thresh.fits $ astarithmetic thresh.fits 2 connected-components \ --output=labeled.fits $ rm thresh.fits The good (optimal) way is to call them after each other (remember *note Reverse polish notation::): $ astarithmetic image.fits 10 gt 2 connected-components \ --output=labeled.fits You can similarly add any number of operations that must be done sequentially in a single command and benefit from the speed and lack of intermediate files. When your commands become long, you can use the ‘set-AAA’ operator to make it more readable, see *note Operand storage in memory or a file::. Blank pixels in Arithmetic Blank pixels in the image (see *note Blank pixels::) will be stored based on the data type. When the input is floating point type, blank values are NaN. One aspect of NaN values is that by definition they will fail on _any_ comparison. Also, any operator that includes a NaN as a an operand will produce a NaN (irrespective of its other operands). Hence both equal and not-equal operators will fail when both their operands are NaN! Therefore, the only way to guarantee selection of blank pixels is through the ‘isblank’ operator explained above. One way you can exploit this property of the NaN value to your advantage is when you want a fully zero-valued image (even over the blank pixels) based on an already existing image (with same size and world coordinate system settings). The following command will produce this for you: $ astarithmetic input.fits nan eq --output=all-zeros.fits Note that on the command-line you can write NaN in any case (for example, ‘NaN’, or ‘NAN’ are also acceptable). Reading NaN as a floating point number in Gnuastro is not case-sensitive. * Menu: * Basic mathematical operators:: For example, +, -, /, log, and pow. * Trigonometric and hyperbolic operators:: sin, cos, atan, asinh, etc. * Constants:: Physical and Mathematical constants. * Coordinate conversion operators:: For example equatorial J2000 to Galactic. * Unit conversion operators:: Various unit conversions necessary. * Statistical operators:: Statistics of a single dataset (for example, mean). * Stacking operators:: Coadding or combining multiple datasets into one. * Filtering operators:: Smoothing a dataset through mixing pixel with neighbors. * Pooling operators:: Reducing size through statistics of pixels in window. * Interpolation operators:: Giving blank pixels a value. * Dimensionality changing operators:: Collapse or expand a dataset. * Conditional operators:: Select certain pixels within the dataset. * Mathematical morphology operators:: Work on binary images, for example, erode. * Bitwise operators:: Work on bits within one pixel. * Numerical type conversion operators:: Convert the numeric datatype of a dataset. * Random number generators:: Random numbers can be used to add noise for example. * Coordinate and border operators:: Return edges of 2D boxes. * Loading external columns:: Read a column from a table into the stack. * Size and position operators:: Extracting image size and pixel positions. * Building new dataset and stack management:: How to construct an empty dataset from scratch. * Operand storage in memory or a file:: Tools for complex operations in one command.  File: gnuastro.info, Node: Basic mathematical operators, Next: Trigonometric and hyperbolic operators, Prev: Arithmetic operators, Up: Arithmetic operators 6.2.4.1 Basic mathematical operators .................................... These are some of the most common operations you will be doing on your data and include, so no further explanation is necessary. If you are new to Gnuastro, just read the description of each carefully. ‘+’ Addition, so "‘4 5 +’" is equivalent to $4+5$. For example, in the command below, the value 20000 is added to each pixel's value in ‘image.fits’: $ astarithmetic 20000 image.fits + You can also use this operator to sum the values of one pixel in two images (which have to be the same size). For example, in the commands below (which are identical, see paragraph after the commands), each pixel of ‘sum.fits’ is the sum of the same pixel's values in ‘a.fits’ and ‘b.fits’. $ astarithmetic a.fits b.fits + -h1 -h1 --output=sum.fits $ astarithmetic a.fits b.fits + -g1 --output=sum.fits The HDU/extension has to be specified for each image with ‘-h’. However, if the HDUs are the same in all inputs, you can use ‘-g’ to only specify the HDU once If you need to add more than one dataset, one way is to use this operator multiple times, for example, see the two commands below that are identical in the Reverse Polish Notation (*note Reverse polish notation::): $ astarithmetic a.fits b.fits + c.fits + -osum.fits $ astarithmetic a.fits b.fits c.fits + + -osum.fits However, this can get annoying/buggy if you have more than three or four images, in that case, a better way to sum data is to use the ‘sum’ operator (which also ignores blank pixels), that is discussed in *note Stacking operators::. *NaN values:* if a single argument of ‘+’ has a NaN value, the output will also be NaN. To ignore NaN values, use the ‘sum’ operator of *note Stacking operators::. You can see the difference with the two commands below: $ astarithmetic --quiet 1.0 2.0 3.0 nan + + + nan $ astarithmetic --quiet 1.0 2.0 3.0 nan 4 sum 6.000000e+00 The same goes for all the *note Stacking operators:: so if your data may include NaN pixels, be sure to use the stacking operators. ‘-’ Subtraction, so "‘4 5 -’" is equivalent to $4-5$. Usage of this operator is similar to ‘+’ operator, for example: $ astarithmetic 20000 image.fits - $ astarithmetic a.fits b.fits - -g1 --output=sub.fits ‘x’ Multiplication, so "‘4 5 x’" is equivalent to $4\times5$. For example, in the command below, the value of each output pixel is 5 times its value in ‘image.fits’: $ astarithmetic image.fits 5 x And you can multiply the value of each pixel in two images, like this: $ astarithmetic a.fits a.fits x -g1 –output=multip.fits ‘/’ Division, so "‘4 5 /’" is equivalent to $4/5$. Like the multiplication, for example $ astarithmetic image.fits 5 -h1 / $ astarithmetic a.fits b.fits / -g1 –output=div.fits ‘%’ Modulo (remainder), so "‘3 2 %’" will return $1$. Note that the modulo operator only works on integer types (see *note Numeric data types::). This operator is therefore not defined for most processed astronomical astronomical images that have floating-point value. However it is useful in labeled images, for example, *note Segment output::). In such cases, each pixel is the integer label of the object it is associated with hence with the example command below, we can change the labels to only be between 1 and 4 and decrease all objects on the image to 4/5th (all objects with a label that is a multiple of 5 will be set to 0). $ astarithmetic label.fits 5 1 % ‘abs’ Absolute value of first operand, so "‘4 abs’" is equivalent to $|4|$. For example, the output of the command bellow will not have any negative pixels (all negative pixels will be multiplied by $-1$ to become positive) $ astarithmetic image.fits abs ‘pow’ First operand to the power of the second, so "‘4.3 5 pow’" is equivalent to $4.3^{5}$. For example, with the command below all pixels will be squared $ astarithmetic image.fits 2 pow ‘sqrt’ The square root of the first operand, so "‘5 sqrt’" is equivalent to $\sqrt{5}$. Since the square root is only defined for positive values, any negative-valued pixel will become NaN (blank). The output will have a floating point type, but its precision is determined from the input: if the input is a 64-bit floating point, the output will also be 64-bit. Otherwise, the output will be 32-bit floating point (see *note Numeric data types:: for the respective precision). Therefore if you require 64-bit precision in estimating the square root, convert the input to 64-bit floating point first, for example, with ‘5 float64 sqrt’. For example, each pixel of the output of the command below will be the square root of that pixel in the input. $ astarithmetic image.fits sqrt If you just want to scale an image with negative values using this operator (for better visual inspection, and the actual values do not matter for you), you can subtract the image from its minimum value, then take its square root: $ astarithmetic image.fits image.fits minvalue - sqrt -g1 Alternatively, to avoid reading the image into memory two times, you can use the ‘set-’ operator to read it into the variable ‘i’ and use ‘i’ two times to speed up the operation (described below): $ astarithmetic image.fits set-i i i minvalue - sqrt ‘log’ Natural logarithm of first operand, so "‘4 log’" is equivalent to $ln(4)$. Negative pixels will become NaN, and the output type is determined from the input, see the explanation under ‘sqrt’ for more on these features. For example, the command below will take the natural logarithm of every pixel in the input. $ astarithmetic image.fits log --output=log.fits ‘log10’ Base-10 logarithm of first popped operand, so "‘4 log’" is equivalent to $log_{10}(4)$. Negative pixels will become NaN, and the output type is determined from the input, see the explanation under ‘sqrt’ for more on these features. For example, the command below will take the base-10 logarithm of every pixel in the input. $ astarithmetic image.fits log10  File: gnuastro.info, Node: Trigonometric and hyperbolic operators, Next: Constants, Prev: Basic mathematical operators, Up: Arithmetic operators 6.2.4.2 Trigonometric and hyperbolic operators .............................................. All the trigonometric and hyperbolic functions are described here. One good thing with these operators is that they take inputs and outputs in degrees (which we usually need as input or output), not radians (like most other programs/libraries). ‘sin’ ‘cos’ ‘tan’ Basic trigonometric functions. They take one operand, in units of degrees. ‘asin’ ‘acos’ ‘atan’ Inverse trigonometric functions. They take one operand and the returned values are in units of degrees. ‘atan2’ Inverse tangent (output in units of degrees) that uses the signs of the input coordinates to distinguish between the quadrants. This operator therefore needs two operands: the first popped operand is assumed to be the X axis position of the point, and the second popped operand is its Y axis coordinate. For example, see the commands below. To be more clear, we are using Table's *note Column arithmetic:: which uses exactly the same internal library function as the Arithmetic program for images. We are showing the results for four points in the four quadrants of the 2D space (if you want to try running them, you do not need to type/copy the parts after <#>). The first point (2,2) is in the first quadrant, therefore the returned angle is 45 degrees. But the second, third and fourth points are in the quadrants of the same order, and the returned angles reflect the quadrant. $ echo " 2 2" | asttable -c'arith $2 $1 atan2' # --> 45 $ echo " 2 -2" | asttable -c'arith $2 $1 atan2' # --> -45 $ echo "-2 -2" | asttable -c'arith $2 $1 atan2' # --> -135 $ echo "-2 2" | asttable -c'arith $2 $1 atan2' # --> 135 However, if you simply use the classic arc-tangent operator (‘atan’) for the same points, the result will only be in two quadrants as you see below: $ echo " 2 2" | asttable -c'arith $2 $1 / atan' # --> 45 $ echo " 2 -2" | asttable -c'arith $2 $1 / atan' # --> -45 $ echo "-2 -2" | asttable -c'arith $2 $1 / atan' # --> 45 $ echo "-2 2" | asttable -c'arith $2 $1 / atan' # --> -45 ‘sinh’ ‘cosh’ ‘tanh’ Hyperbolic sine, cosine, and tangent. These operators take a single operand. ‘asinh’ ‘acosh’ ‘atanh’ Inverse Hyperbolic sine, cosine, and tangent. These operators take a single operand.  File: gnuastro.info, Node: Constants, Next: Coordinate conversion operators, Prev: Trigonometric and hyperbolic operators, Up: Arithmetic operators 6.2.4.3 Constants ................. During your analysis it is often necessary to have certain constants like the number $\pi$. The "operators" in this section do not actually take any operand, they just replace the desired constant into the stack. So in effect, these are actually operands. But since their value is not inserted by the user, we have placed them in the list of operators. ‘e’ Euler’s number, or the base of the natural logarithm (no units). See Wikipedia (https://en.wikipedia.org/wiki/E_(mathematical_constant)). ‘pi’ Ratio of circle’s circumference to its diameter (no units). See Wikipedia (https://en.wikipedia.org/wiki/Pi). ‘c’ The speed of light in vacuum, in units of $m/s$. see Wikipedia (https://en.wikipedia.org/wiki/Speed_of_light). ‘G’ The gravitational constant, in units of $m^3/kg/s^2$. See Wikipedia (https://en.wikipedia.org/wiki/Gravitational_constant). ‘h’ Plank's constant, in units of $J/Hz$ or $kg\times m^2/s$. See Wikipedia (https://en.wikipedia.org/wiki/Planck_constant). ‘au’ Astronomical Unit, in units of meters. See Wikipedia (https://en.wikipedia.org/wiki/Astronomical_unit). ‘ly’ Distance covered by light in vacuum in one year, in units of meters. See Wikipedia (https://en.wikipedia.org/wiki/Light-year). ‘avogadro’ Avogadro's constant, in units of $1/mol$. See Wikipedia (https://en.wikipedia.org/wiki/Avogadro_constant). ‘fine-structure’ The fine-structure constant (no units). See Wikipedia (https://en.wikipedia.org/wiki/Fine-structure_constant).  File: gnuastro.info, Node: Coordinate conversion operators, Next: Unit conversion operators, Prev: Constants, Up: Arithmetic operators 6.2.4.4 Coordinate conversion operators ....................................... Different celestial coordinate systems are useful for different scenarios. For example, assume you have the RA and Dec of large sample of galaxies that you plan to study the halos of galaxies from. For such studies, you prefer to stay as far away as possible from the Galactic plane, because the density of stars and interstellar filaments (cirrus) significantly increases as you get close to the Milky way's disk. But the Equatorial coordinate system (https://en.wikipedia.org/wiki/Equatorial_coordinate_system) which defines the RA and Dec and is based on Earth's equator; and does not show the position of your objects in relation to the galactic disk. The best way forward in the example above is to convert your RA and Dec table into the Galactic coordinate system (https://en.wikipedia.org/wiki/Galactic_coordinate_system); and select those with a large (positive or negative) Galactic latitude. Alternatively, if you observe a bright point on a galaxy and want to confirm if it was actually a super-nova and not a moving asteroid, a first step is to convert your RA and Dec to the Ecliptic coordinate system (https://en.wikipedia.org/wiki/Ecliptic_coordinate_system) and confirm if you are sufficiently distant from the ecliptic (plane of the Solar System; where fast moving objects are most common). The operators described in this section are precisely for the purpose above: to convert various celestial coordinate systems that are supported within Gnuastro into each other. For example, if you want to convert the RA and Dec equatorial (at the Julian year 2000 equinox) coordinates (within the ‘RA’ and ‘DEC’ columns) of ‘points.fits’ into Galactic longitude and latitude, you can use the command below (the column metadata are not mandatory, but to avoid later confusion, it is always good to have them in your output. $ asttable points.fits -c'arith RA DEC eq-j2000-to-galactic' \ --colmetadata=1,GLON,deg,"Galactic longitude" \ --colmetadata=2,GLAT,deg,"Galactic latitude" \ --output=points-gal.fits One important thing to consider is that the equatorial and ecliptic coordinates are not static: they include the dynamics of Earth in the solar system: in particular, the reference point on the equator moves over decades. Therefore these two (equatorial and ecliptic) coordinate systems are defined within epochs: the 1950 epoch is defined by Besselian years (https://en.wikipedia.org/wiki/Epoch_(astronomy)#Besselian_years), while the 2000 epoch is defined in Julian years (https://en.wikipedia.org/wiki/Epoch_(astronomy)#Julian_years_and_J2000). So when dealing with these coordinates one of the '‘-b1950’' or '‘-j2000’' suffixes are necessary (for example ‘eq-j2000’ or ‘ec-b1950’). The Galactic or Supergalactic coordinates are not defined based on the Earth's dynamics; therefore they do not have any epoch associated with them. Extra-galactic studies do not depend on the dynamics of the earth, but the equatorial coordinate system is the most dominant in that field. Therefore in its 23rd General Assembly, the International Astronomical Union approved the International Celestial Reference System (https://en.wikipedia.org/wiki/International_Celestial_Reference_System_and_its_realizations) or ICRS based on quasars (which are static within our observational limitations)viewed through long baseline radio interferometry (the most accurate method of observation that we currently have). ICRS is designed to be within the errors of the Equatorial J2000 coordinate system, so they are currently very similar; but ICRS has much better accuracy. We will be adding ICRS in the operators below soon. *Floating point errors:* The operation to convert between the coordinate systems involves many sines, cosines (and their inverse). Therefore, floating point errors (due to the limited precision of the definition of floating points in bits) can cause small offsets. For example see the code below were we convert equatorial to galactic and back, then compare the input and output (which is in the 5th and 6th decimal of a degree; or about 0.2 or 0.01 arcseconds). $ sys1=eq-j2000 $ sys2=galactic $ echo "10.2345689 45.6789012" \ | asttable -Afixed -B8 \ -c'arith $1 $2 '$sys1'-to-'$sys2' \ '$sys2'-to-'$sys1' set-lat set-lng \ lng $1 - lat $2 -' 0.00000363 -0.00007725 If you set ‘sys2=ec-j2000’ or ‘sys2=supergalactic’, it will be zero until the full set of 8 decimals that are printed here (the displayed precision can be changed with the value of the ‘-B’ option above). It is therefore useful to have your original coordinates (in the same table for example) and not do too many conversions on conversions (to propagate this problem). ‘eq-b1950-to-eq-j2000’ ‘eq-b1950-to-ec-b1950’ ‘eq-b1950-to-ec-j2000’ ‘eq-b1950-to-galactic’ ‘eq-b1950-to-supergalactic’ Convert Equatorial (B1950 equinox) coordinates into the respective coordinate system within each operator's name. ‘eq-j2000-to-eq-b1950’ ‘eq-j2000-to-ec-b1950’ ‘eq-j2000-to-ec-j2000’ ‘eq-j2000-to-galactic’ ‘eq-j2000-to-supergalactic’ Convert Equatorial (J2000 equinox) coordinates into the respective coordinate system within each operator's name. ‘ec-b1950-to-eq-b1950’ ‘ec-b1950-to-eq-j2000’ ‘ec-b1950-to-ec-j2000’ ‘ec-b1950-to-galactic’ ‘ec-b1950-to-supergalactic’ Convert Ecliptic (B1950 equinox) coordinates into the respective coordinate system within each operator's name. ‘ec-j2000-to-eq-b1950’ ‘ec-j2000-to-eq-j2000’ ‘ec-j2000-to-ec-b1950’ ‘ec-j2000-to-galactic’ ‘ec-j2000-to-supergalactic’ Convert Ecliptic (J2000 equinox) coordinates into the respective coordinate system within each operator's name. ‘galactic-to-eq-b1950’ ‘galactic-to-eq-j2000’ ‘galactic-to-ec-b1950’ ‘galactic-to-ec-j2000’ ‘galactic-to-supergalactic’ Convert Galactic coordinates into the respective coordinate system within each operator's name. ‘supergalactic-to-eq-b1950’ ‘supergalactic-to-eq-j2000’ ‘supergalactic-to-ec-b1950’ ‘supergalactic-to-ec-j2000’ ‘supergalactic-to-galactic’ Convert Supergalactic coordinates into the respective coordinate system within each operator's name.  File: gnuastro.info, Node: Unit conversion operators, Next: Statistical operators, Prev: Coordinate conversion operators, Up: Arithmetic operators 6.2.4.5 Unit conversion operators ................................. It often happens that you have data in one unit (for example, counts on your CCD), but would like to convert it into another (for example, magnitudes, to measure the brightness of a galaxy). While the equations for the unit conversions can be easily found on the internet, the operators in this section are designed to simplify the process and let you do it easily and fast without having to remember constants and relations. ‘counts-to-mag’ Convert counts (usually CCD outputs) to magnitudes using the given zero point. The zero point is the first popped operand and the count image or value is the second popped operand. For example, assume you have measured the standard deviation of the noise in an image to be ‘0.1’ counts, and the image's zero point is ‘22.5’ and you want to measure the _per-pixel_ surface brightness limit of the dataset(1). To apply this operator on an image, simply replace ‘0.1’ with the image name, as described below. $ astarithmetic 0.1 22.5 counts-to-mag --quiet Of course, you can also convert every pixel in an image (or table column in Table's *note Column arithmetic::) with this operator if you replace the second popped operand with an image/column name. For an example of applying this operator on an image, see the description of surface brightness in *note Brightness flux magnitude::, where we will convert an image's pixel values to surface brightness. ‘mag-to-counts’ Convert magnitudes to counts (usually CCD outputs) using the given zero point. The zero point is the first popped operand and the magnitude value is the second. For example, if an object has a magnitude of 20, you can estimate the counts corresponding to it (when the image has a zero point of 24.8) with this command: Note that because the output is a single number, we are using ‘--quiet’ to avoid printing extra information. $ astarithmetic 20 24.8 mag-to-counts --quiet ‘counts-to-sb’ Convert counts to surface brightness using the zero point and area (in units of arcsec$^2$). The first popped operand is the area (in arcsec$^2$), the second popped operand is the zero point and the third are the count values. Estimating the surface brightness involves taking the logarithm. Therefore this operator will produce NaN for counts with a negative value. For example, with the commands below, we read the zero point from the image headers (assuming it is in the ‘ZPOINT’ keyword), we calculate the pixel area from the image itself, and we call this operator to convert the image pixels (in counts) to surface brightness (mag/arcsec$^2$). $ zeropoint=$(astfits image.fits --keyvalue=ZPOINT -q) $ pixarea=$(astfits image.fits --pixelareaarcsec2) $ astarithmetic image.fits $zeropoint $pixarea counts-to-sb \ --output=image-sb.fits For more on the definition of surface brightness see *note Brightness flux magnitude::, and for a fully tutorial on optimal usage of this, see *note FITS images in a publication::. ‘sb-to-counts’ Convert surface brightness using the zero point and area (in units of arcsec$^2$) to counts. The first popped operand is the area (in arcsec$^2$), the second popped operand is the zero point and the third are the surface brightness values. See the description of ‘counts-to-sb’ for more. ‘mag-to-sb’ Convert magnitudes to surface brightness over a certain area (in units of arcsec$^2$). The first popped operand is the area and the second is the magnitude. For example, let's assume you have a table with the two columns of magnitude (called ‘MAG’) and area (called ‘AREAARCSEC2’). In the command below, we will use *note Column arithmetic:: to return the surface brightness. $ asttable table.fits -c'arith MAG AREAARCSEC2 mag-to-sb' ‘sb-to-mag’ Convert surface brightness to magnitudes over a certain area (in units of arcsec$^2$). The first popped operand is the area and the second is the magnitude. See the description of ‘mag-to-sb’ for more. ‘counts-to-jy’ Convert counts (usually CCD outputs) to Janskys through an AB-magnitude based zero point. The top-popped operand is assumed to be the AB-magnitude zero point and the second-popped operand is assumed to be a dataset in units of counts (an image in Arithmetic, and a column in Table's *note Column arithmetic::). For the full equation and basic definitions, see *note Brightness flux magnitude::. For example, SDSS images are calibrated in units of nanomaggies, with a fixed zero point magnitude of 22.5. Therefore you can convert the units of SDSS image pixels to Janskys with the command below: $ astarithmetic sdss-image.fits 22.5 counts-to-jy ‘jy-to-counts’ Convert Janskys to counts (usually CCD outputs) through an AB-magnitude based zero point. This is the inverse operation of the ‘counts-to-jy’, see there for usage example. ‘counts-to-nanomaggy’ Convert counts to Nanomaggy (with fixed zero point of 22.5, used as the pixel units of many surveys like SDSS). For example if your image has a zero point of 24.93, you can convert it to Nanomaggies with the command below: $ astarithmetic image.fits 24.93 counts-to-nanomaggy ‘nanomaggy-to-counts’ Convert Nanomaggy to counts. Nanomaggy is defined to have a fixed zero point of 22.5 and is the pixel units of many surveys like SDSS. For example if you would like to convert an image in units of Nanomaggy (for example from SDSS) to the counts of a camera with a zero point of 25.92, you can use the command below: $ astarithmetic image.fits 25.92 nanomaggy-to-counts ‘mag-to-jy’ Convert AB magnitudes to Janskys, see *note Brightness flux magnitude::. ‘jy-to-mag’ Convert Janskys to AB magnitude, see *note Brightness flux magnitude::. ‘au-to-pc’ Convert Astronomical Units (AUs) to Parsecs (PCs). This operator takes a single argument which is interpreted to be the input AUs. The conversion is based on the definition of Parsecs: $1 \rm{PC} = 1/tan(1^{\prime\prime}) \rm{AU}$, where $1^{\prime\prime}$ is one arcseconds. In other words, $1 (\rm{PC}) = 648000/\pi (\rm{AU})$. For example, if we take Pluto's average distance to the Sun to be 40 AUs, we can obtain its distance in Parsecs using this command: echo 40 | asttable -c'arith $1 au-to-pc' ‘pc-to-au’ Convert Parsecs (PCs) to Astronomical Units (AUs). This operator takes a single argument which is interpreted to be the input PCs. For more on the conversion equation, see description of ‘au-to-pc’. For example, Proxima Centauri (the nearest star to the Solar system) is 1.3020 Parsecs from the Sun, we can calculate this distance in units of AUs with the command below: echo 1.3020 | asttable -c'arith $1 pc-to-au' ‘ly-to-pc’ Convert Light-years (LY) to Parsecs (PCs). This operator takes a single argument which is interpreted to be the input LYs. The conversion is done from IAU's definition of the light-year (9460730472580800 m $\approx$ 63241.077 AU = 0.306601 PC, for the conversion of AU to PC, see the description of ‘au-to-pc’). For example, the distance of Andromeda galaxy to our galaxy is 2.5 million light-years, so its distance in kilo-Parsecs can be calculated with the command below (note that we want the output in kilo-parsecs, so we are dividing the output of this operator by 1000): echo 2.5e6 | asttable -c'arith $1 ly-to-pc 1000 /' ‘pc-to-ly’ Convert Parsecs (PCs) to Light-years (LY). This operator takes a single argument which is interpreted to be the input PCs. For the conversion and an example of the inverse of this operator, see the description of ‘ly-to-pc’. ‘ly-to-au’ Convert Light-years (LY) to Astronomical Units (AUs). This operator takes a single argument which is interpreted to be the input LYs. For the conversion and a similar example, see the description of ‘ly-to-pc’. ‘au-to-ly’ Convert Astronomical Units (AUs) to Light-years (LY). This operator takes a single argument which is interpreted to be the input AUs. For the conversion and a similar example, see the description of ‘ly-to-pc’. ---------- Footnotes ---------- (1) The _per-pixel_ surface brightness limit is the magnitude of the noise standard deviation. For more on surface brightness see *note Brightness flux magnitude::. In the example command, because the output is a single number, we are using ‘--quiet’ to avoid printing extra information.  File: gnuastro.info, Node: Statistical operators, Next: Stacking operators, Prev: Unit conversion operators, Up: Arithmetic operators 6.2.4.6 Statistical operators ............................. The operators in this section take a single dataset as input, and will return the desired statistic as a single value. ‘minvalue’ Minimum value in the first popped operand, so "‘a.fits minvalue’" will push the minimum pixel value in this image onto the stack. When this operator acts on a single image, the output (operand that is put back on the stack) will no longer be an image, but a number. The output of this operand is in the same type as the input. This operator is mainly intended for multi-element datasets (for example, images or data cubes), if the popped operand is a number, it will just return it without any change. Note that when the final remaining/output operand is a single number, it is printed onto the standard output. For example, with the command below the minimum pixel value in ‘image.fits’ will be printed in the terminal: $ astarithmetic image.fits minvalue However, the output above also includes a lot of extra information that are not relevant in this context. If you just want the final number, run Arithmetic in quiet mode: $ astarithmetic image.fits minvalue -q Also see the description of ‘sqrt’ for other example usages of this operator. ‘maxvalue’ Maximum value of first operand in the same type, similar to ‘minvalue’, see the description there for more. For example $ astarithmetic image.fits maxvalue -q ‘numbervalue’ Number of non-blank elements in first operand in the ‘uint64’ type (since it is always a positive integer, see *note Numeric data types::). Its usage is similar to ‘minvalue’, for example $ astarithmetic image.fits numbervalue -q ‘sumvalue’ Sum of non-blank elements in first operand in the ‘float32’ type. Its usage is similar to ‘minvalue’, for example $ astarithmetic image.fits sumvalue -q ‘meanvalue’ Mean value of non-blank elements in first operand in the ‘float32’ type. Its usage is similar to ‘minvalue’, for example $ astarithmetic image.fits meanvalue -q ‘stdvalue’ Standard deviation of non-blank elements in first operand in the ‘float32’ type. Its usage is similar to ‘minvalue’, for example $ astarithmetic image.fits stdvalue -q ‘medianvalue’ Median of non-blank elements in first operand with the same type. Its usage is similar to ‘minvalue’, for example $ astarithmetic image.fits medianvalue -q ‘unique’ Remove all duplicate (and blank) elements from the first popped operand. The unique elements of the dataset will be stored in a single-dimensional dataset. Recall that by default, single-dimensional datasets are stored as a table column in the output. But you can use ‘--onedasimage’ or ‘--onedonstdout’ to respectively store them as a single-dimensional FITS array/image, or to print them on the standard output. Although you can use this operator on the floating point dataset, due to floating-point errors it may give non-reasonable values: because the tenth digit of the decimal point is also considered although it may be statistically meaningless, see *note Numeric data types::. It is therefore better/recommended to use it on the integer dataset like the labeled images of *note Segment output:: where each pixel has the integer label of the object/clump it is associated with. For example, let's assume you have cropped a region of a larger labeled image and want to find the labels/objects that are within the crop. With this operator, this job is trivial: $ astarithmetic seg-crop.fits unique ‘noblank’ Remove all blank elements from the first popped operand. Since the blank pixels are being removed, the output dataset will always be single-dimensional, independent of the dimensionality of the input. Recall that by default, single-dimensional datasets are stored as a table column in the output. But you can use ‘--onedasimage’ or ‘--onedonstdout’ to respectively store them as a single-dimensional FITS array/image, or to print them on the standard output. For example, with the command below, the non-blank pixel values of ‘cropped.fits’ are printed on the command-line (the ‘--quiet’ option is used to remove the extra information that Arithmetic prints as it reads the inputs, its version and its running time). $ astarithmetic cropped.fits noblank --onedonstdout --quiet  File: gnuastro.info, Node: Stacking operators, Next: Filtering operators, Prev: Statistical operators, Up: Arithmetic operators 6.2.4.7 Stacking operators .......................... The operators in this section are used when you have multiple datasets that you would like to merge into one, commonly known as "stacking" or "coaddition". For example, you have taken ten exposures of your scientific target, and you would like to combine them all into one deep stacked image that is deeper. When calling these operators you should determine how many operands they should take in (unlike the rest of the operators that have a fixed number of input operands). As described in the first operand below, you do this through their first popped operand (which should be a single integer number that is larger than one). Below are Some important points for all the stacking operators described in this section: • NaN/blank pixels will be ignored, see *note Blank pixels::. • The output will have the same type as the inputs. This is natural for the ‘min’ and ‘max’ operators, but for other similar operators (for example, ‘sum’, or ‘average’) the per-pixel operations will be done in double precision floating point and then stored back in the input type. Therefore, if the input was an integer, C's internal type conversion will be used. • The operation will be multi-threaded, greatly speeding up the process if you have large and numerous data to stack. You can disable multi-threaded operations with the ‘--numthreads=1’ option (see *note Multi-threaded operations::). ‘min’ ‘max’ ‘sum’ ‘std’ ‘mad’ ‘mean’ ‘median’ ‘number’ For each pixel, calculate the respective statistic from in all given datasets. For the ‘min’ and ‘max’ operators, the output will have the same type as the input. For the ‘number’ operator, the output will have an unsigned 32-bit integer type and the rest will be 32-bit floating point. The first popped operand to this operator must be a positive integer number which specifies how many further operands should be popped from the stack. All the subsequently popped operands must have the same type and size. This operator (and all the variable-operand operators similar to it that are discussed below) will work in multi-threaded mode unless Arithmetic is called with the ‘--numthreads=1’ option, see *note Multi-threaded operations::. For example, the following command will produce an image with the same size and type as the three inputs, but each output pixel value will be the minimum of the same pixel's values in all three input images. $ astarithmetic a.fits b.fits c.fits 3 min --output=min.fits Regarding the ‘number’ operator: some datasets may have blank values (which are also ignored in all similar operators like ‘min’, ‘sum’, ‘mean’ or ‘median’). Hence, the final pixel values of this operator will not, in general, be equal to the number of inputs. This operator is therefore mostly called in parallel with those operators to know the "weight" of each pixel (in case you want to only keep pixels that had the full exposure for example). ‘quantile’ For each pixel, find the quantile from all given datasets. The output will have the same numeric data type and size as the input datasets. Besides the input datasets, the quantile operator also needs a single parameter (the requested quantile). The parameter should be the first popped operand, with a value between (and including) 0 and 1. The second popped operand must be the number of datasets to use. In the example below, the first-popped operand (‘0.7’) is the quantile, the second-popped operand (‘3’) is the number of datasets to pop. astarithmetic a.fits b.fits c.fits 3 0.7 quantile ‘madclip-fill-mad’ ‘madclip-fill-std’ ‘madclip-fill-mean’ ‘madclip-fill-median’ ‘madclip-fill-number’ Find the respective statistic after median absolute deviation (MAD) filled re-clipping of the values of the same element (pixel in an image) of all the inputs. For a complete tutorial on clipping outliers see *note Clipping outliers:: (if you haven't read it yet, we encourage you to read through it before continuing). For the particular case of filled re-clipping (the ‘madclip-fill-*’ operators here) see *note Filled re-clipping::. Spoiler alert: this is currently the most robust stacking operator in Gnuastro. The output data type of all these operators is a 32-bit floating point number, except for ‘madclip-fill-number’, where an unsigned 32-bit integer is returned (see *note Numeric data types::). This operator will combine the given inputs into a single output of the same dimension as one of the inputs. Each pixel of the output contains the requested statistic from the remaining values after filled MAD re-clipping. This operator is very similar to ‘min’, with the exception that it expects two extra operands (parameters for MAD-clipping) before the total number of inputs. The first popped operand is the termination criteria and the second is the multiple of the median absolute deviation. For example, in the command below, the first popped operand (‘0.01’) is the MAD-clipping termination criteria. If the termination criteria is larger than, or equal to, 1 it is interpreted as a pre-defined the number of clips. But if it is between 0 and 1, then it is the tolerance level on the change in the median absolute deviation (see *note MAD clipping::). The second popped operand (‘5’) is the multiple of the median absolute deviation to use in MAD-clipping. The third popped operand (‘3’) is number of datasets that will be used (similar to the first popped operand to ‘min’). $ astarithmetic a.fits b.fits c.fits 3 5 0.01 madclip-fill-std ‘madclip-mad’ ‘madclip-std’ ‘madclip-mean’ ‘madclip-median’ ‘madclip-number’ Find the number of useful values after median absolute deviation (MAD) clipping of the values of the same element (pixel in an image) of all the inputs. These operators are called in an identical fashion to the ‘madclip-fill-*’ operators described above; see the description there for more. ‘sigclip-fill-number’ Find the number of useful values after filled sigma ($\sigma$, which stands for the standard deviation) re-clipping of the values of the same element (pixel in an image) of all the inputs. For a complete tutorial on clipping outliers see *note Clipping outliers:: (if you haven't read it yet, we encourage you to read through it before continuing). For the particular case of filled re-clipping (the ‘sigclip-fill-*’ operators here) see *note Filled re-clipping::. Spoiler alert: MAD filled re-clipping is currently most robust stacking operator in Gnuastro (the ‘madclip-fill-*’ operators). This operator will combine the specified number of inputs into a single output that contains the number of remaining elements after $\sigma$-clipping on each element/pixel (for more on $\sigma$-clipping, see *note Sigma clipping::). This operator is very similar to ‘min’, with the exception that it expects two operands (parameters for $\sigma$-clipping) before the total number of inputs. The first popped operand is the termination criteria and the second is the multiple of $\sigma$. For example, in the command below, the first popped operand (‘0.2’) is the sigma clipping termination criteria. If the termination criteria is larger than, or equal to, 1 it is interpreted as the number of clips to do. But if it is between 0 and 1, then it is the tolerance level on the standard deviation (see *note Sigma clipping::). The second popped operand (‘5’) is the multiple of sigma to use in $\sigma$-clipping. The third popped operand (‘10’) is number of datasets that will be used (similar to the first popped operand to ‘min’). astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-fill-number ‘sigclip-fill-median’ For each pixel, find the $\sigma$-clipped median in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the ‘sigclip-fill-number’ operator, please see there for more. For example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-fill-median ‘sigclip-fill-mean’ For each pixel, find the $\sigma$-clipped mean in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the ‘sigclip-fill-number’ operator, please see there for more. For example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-fill-mean ‘sigclip-fill-std’ For each pixel, find the $\sigma$-clipped standard deviation in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the ‘sigclip-fill-number’ operator, please see there for more. For example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-fill-std ‘sigclip-fill-mad’ For each pixel, find the $\sigma$-clipped median absolute deviation (MAD) in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the ‘sigclip-fill-number’ operator, please see there for more. For example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-fill-mad ‘sigclip-number’ Find the number of useful values after sigma ($\sigma$, which stands for the standard deviation) clipping of the values of the same element (pixel in an image) of all the inputs. For a complete tutorial on clipping outliers see *note Clipping outliers:: (if you haven't read it yet, we encourage you to read through it before continuing). For the particular case of $\sigma$-clipping (the ‘sigclip-*’ operators here) see *note Sigma clipping::. Spoiler alert: MAD filled re-clipping is currently most robust stacking operator in Gnuastro (the ‘madclip-fill-*’ operators). This operator will combine the specified number of inputs into a single output that contains the number of remaining elements after $\sigma$-clipping on each element/pixel (for more on $\sigma$-clipping, see *note Sigma clipping::). This operator is very similar to ‘min’, with the exception that it expects two operands (parameters for $\sigma$-clipping) before the total number of inputs. The first popped operand is the termination criteria and the second is the multiple of $\sigma$. For example, in the command below, the first popped operand (‘0.2’) is the sigma clipping termination criteria. If the termination criteria is larger than, or equal to, 1 it is interpreted as the number of clips to do. But if it is between 0 and 1, then it is the tolerance level on the standard deviation (see *note Sigma clipping::). The second popped operand (‘5’) is the multiple of sigma to use in $\sigma$-clipping. The third popped operand (‘10’) is number of datasets that will be used (similar to the first popped operand to ‘min’). astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-number ‘sigclip-median’ For each pixel, find the $\sigma$-clipped median in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the ‘sigclip-number’ operator, please see there for more. For example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-median ‘sigclip-mean’ For each pixel, find the $\sigma$-clipped mean in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the ‘sigclip-number’ operator, please see there for more. For example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-mean ‘sigclip-std’ For each pixel, find the $\sigma$-clipped standard deviation in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the ‘sigclip-number’ operator, please see there for more. For example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-std ‘sigclip-mad’ For each pixel, find the $\sigma$-clipped median absolute deviation (MAD) in all given datasets. The output will have the a single-precision (32-bit) floating point type. This operator is called similar to the ‘sigclip-number’ operator, please see there for more. For example astarithmetic a.fits b.fits c.fits 3 5 0.2 sigclip-mad  File: gnuastro.info, Node: Filtering operators, Next: Pooling operators, Prev: Stacking operators, Up: Arithmetic operators 6.2.4.8 Filtering (smoothing) operators ....................................... Image filtering is commonly used for smoothing: every pixel value in the output image is created by applying a certain statistic to the pixels in its vicinity. ‘filter-mean’ Apply mean filtering (or moving average (https://en.wikipedia.org/wiki/Moving_average)) on the input dataset. During mean filtering, each pixel (data element) is replaced by the mean value of all its surrounding pixels (excluding blank values). The number of surrounding pixels in each dimension (to calculate the mean) is determined through the earlier operands that have been pushed onto the stack prior to the input dataset. The number of necessary operands is determined by the dimensions of the input dataset (first popped operand). The order of the dimensions on the command-line is the order in FITS format. Here is one example: $ astarithmetic 5 4 image.fits filter-mean In this example, each pixel is replaced by the mean of a 5 by 4 box around it. The box is 5 pixels along the first FITS dimension (horizontal when viewed in ds9) and 4 pixels along the second FITS dimension (vertical). Each pixel will be placed in the center of the box that the mean is calculated on. If the given width along a dimension is even, then the center is assumed to be between the pixels (not in the center of a pixel). When the pixel is close to the edge, the pixels of the box that fall outside the image are ignored. Therefore, on the edge, less points will be used in calculating the mean. The final effect of mean filtering is to smooth the input image, it is essentially a convolution with a kernel that has identical values for all its pixels (is flat), see *note Convolution process::. Note that blank pixels will also be affected by this operator: if there are any non-blank elements in the box surrounding a blank pixel, in the filtered image, it will have the mean of the non-blank elements, therefore it will not be blank any more. If blank elements are important for your analysis, you can use the ‘isblank’ operator with the ‘where’ operator to set them back to blank after filtering. For example in the command below, we are first filtering the image, then setting its original blank elements back to blank in the output of filtering (all within one Arithmetic command). Note how we are using the ‘set-’ operator to give names to the temporary outputs of steps and simplify the code (see *note Operand storage in memory or a file::). $ astarithmetic image.fits -h1 set-in \ 5 4 in filter-mean set-filtered \ filtered in isblank nan where \ --output=out.fits ‘filter-median’ Apply median filtering (https://en.wikipedia.org/wiki/Median_filter) on the input dataset. This is very similar to ‘filter-mean’, except that instead of the mean value of the box pixels, the median value is used to replace a pixel value. For more on how to use this operator, please see ‘filter-mean’. The median is less susceptible to outliers compared to the mean. As a result, after median filtering, the pixel values will be more discontinuous than mean filtering. ‘filter-sigclip-mean’ Apply a $\sigma$-clipped mean filtering onto the input dataset. This is very similar to ‘filter-mean’, except that all outliers (identified by the $\sigma$-clipping algorithm) have been removed, see *note Sigma clipping:: for more on the basics of this algorithm. As described there, two extra input parameters are necessary for $\sigma$-clipping: the multiple of $\sigma$ and the termination criteria. ‘filter-sigclip-mean’ therefore needs to pop two other operands from the stack after the dimensions of the box. For example, the line below uses the same box size as the example of ‘filter-mean’. However, all elements in the box that are iteratively beyond $3\sigma$ of the distribution's median are removed from the final calculation of the mean until the change in $\sigma$ is less than $0.2$. $ astarithmetic 3 0.2 5 4 image.fits filter-sigclip-mean The median (which needs a sorted dataset) is necessary for $\sigma$-clipping, therefore ‘filter-sigclip-mean’ can be significantly slower than ‘filter-mean’. However, if there are strong outliers in the dataset that you want to ignore (for example, emission lines on a spectrum when finding the continuum), this is a much better solution. ‘filter-sigclip-median’ Apply a $\sigma$-clipped median filtering onto the input dataset. This operator and its necessary operands are almost identical to ‘filter-sigclip-mean’, except that after $\sigma$-clipping, the median value (which is less affected by outliers than the mean) is added back to the stack.  File: gnuastro.info, Node: Pooling operators, Next: Interpolation operators, Prev: Filtering operators, Up: Arithmetic operators 6.2.4.9 Pooling operators ......................... Pooling is one way of reducing the complexity of the input image by grouping multiple input pixels into one output pixel (using any statistical measure). As a result, the output image has fewer pixels (less complexity). In Computer Vision, Pooling is commonly used in Convolutional Neural Networks (https://en.wikipedia.org/wiki/Convolutional_neural_network) (CNNs). In pooling, the inputs are an image (e.g., a FITS file) and a square window pixel size that is known as a pooling window. The window has to be smaller than the input's number of pixels in both dimensions and its width is called the "pool size". The pooling window starts at the top-left corner pixel of the input and calculates statistical operations on the pixels that overlap with it. It slides forward by the "stride" pixels, moving over all pixels in the input from the top-left corner to the bottom-right corner, and repeats the same calculation for the overlapping pixels in each position. Usually, the stride (or spacing between the windows as they slide over the input) is equal to the window-size. In other words, in pooling, the separate "windows" do not overlap with each other on the input. However, you can choose any size for the stride. Remember this, It's crucial to ensure that the stride size is less than the pool size. If not, some pixels may be missed during the pooling process. Therefore there are two major differences with *note Spatial domain convolution:: or *note Filtering operators::, but pooling has some similarities to the *note Warp::. • In convolution or filtering the input and output sizes are the same. However, when the stride is larger than 1 then, the output of pooling must have fewer pixels. • In convolution or filters, the kernels slide over the input in a pixel-by-pixel manner. As a result, the same pixel's value will be used in many of the output pixels. However, in pooling each input pixel may be only used in a single output pixel (if the stride and the pool size are the same). • Special cases of Warping an image are similar to pooling. For example calling ‘pool-sum’ with pool size of 2 will give the same pixel values (except the outer edges) as giving the same image to ‘astwarp’ with ‘--scale=1/2 --centeroncorner’. However, warping will only provide the sum of the input pixels, there is no easy way to generically define something like ‘pool-max’ in Warp (which is far more general than pooling). Also, due to its generic features (for example for non-linear warps), Warp is slower than the ‘pool-max’ that is introduced here. *No WCS in output:* As of Gnuastro 0.22, the output of pooling will not contain WCS information (primarily due to a lack of time by developers). Please inform us of your interest in having it, by contacting us at ‘bug-gnuastro@gnu.org’. If you need ‘pool-sum’, you can use *note Warp:: (which also modifies the WCS, see note above). If the width or height of input is not divisible by the stride size, the pool window will go beyond the input pixel grid. In this case, the window pixels that do not overlap with the input are given a blank value (and thus ignored in the calculation of the desired statistical operation). The simple ASCII figure below shows the pooling operation where the input is a $3\times3$ pixel image with a pool size of 2 pixels. In the center of the second row, you see the intermediate input matrix that highlights how the input and output pixels relate with each other. Since the input is $3\times3$ and we have a stride size of 2, as mentioned above blank pseudo-pixels are added with a value of ‘B’ (for blank). Pool window: Input: +-----------+ +-------------+ | | | | 10 12 9 | | _ _ | _ _ |___________________________| 31 4 1 | | | | || || | 16 5 8 | | | | || || +-------------+ +-----------+ || || The pooling window 2*2 || || stride 2 \/ \/ +---------------------+ |/ 10 12\|/ 9 B \| | | | +-------+ pool-min |\ 31 4 /|\ 1 B /| pool-max +-------+ | 4 1 | /------ |---------------------| ------\ |31 9 | | 5 8 | \------ |/ 16 5 \|/ 8 B \| ------/ |16 8 | +-------+ | | | +-------+ |\ B B /.\ B B /| +---------------------+ The choice of the statistic to use depends on the specific use case, the characteristics of the input data, and the desired output. Each statistic has its advantages and disadvantages and the choice of which to use should be informed by the specific needs of the problem at hand. Below, the various pool operators of arithmetic are listed: ‘pool-max’ Apply max-pooling on the input dataset. This operator takes three operands: the first popped operand is the stride and the second is the width of the square pooling window (which should be a single integer). Also, The third operand should be the input image. Within the pooling window, this operator will place the largest value in the output pixel (any blank pixels will be ignored). See the ASCII diagram above for a demonstration of how max-pooling works. Here is an example of using this operator: $ astarithmetic image.fits 2 2 pool-max Max-pooling retains the largest value of the input window in the output, so the returned image is sharper where you have strong signal-to-noise ratio and more noisy in regions with no significant signal (only noise). It is therefore useful when the background of the image is dark and we are interested in only the highest signal-to-noise ratio regions of the image. ‘pool-min’ Apply min-pooling on the input dataset. This operator takes three operands: the first popped operand is the stride and the second is the width of the square pooling window (which should be a single integer). Also, The third operand should be the input image. Except the used statistical measurement, this operator is similar to ‘pool-max’, see the description there for more. Min-pooling is mostly used when the image has a high signal-to-noise ratio and a light background: min-pooling will select darker (lower-valued) pixels. For low signal-to-noise regions, this operator will increase the noise level (similar to the maximum, the scatter in the minimum is very strong). ‘pool-sum’ Apply sum-pooling to the input dataset. This operator takes three operands: the first popped operand is the stride and the second is the width of the square pooling window (which should be a single integer). Also, The third operand should be the input image. Except the used statistical measurement, this operator is similar to ‘pool-max’, see the description there for more. Sum-pooling will increase the signal-to-noise ratio at the cost of having a smoother output (less resolution). ‘pool-mean’ Apply mean pooling on the input dataset. This operator takes three operands: the first popped operand is the stride and the second is the width of the square pooling window (which should be a single integer). Also, The third operand should be the input image. Except the used statistical measurement, this operator is similar to ‘pool-max’, see the description there for more. The mean pooling method smooths out the image and hence the sharp features may not be identified when this pooling method is used. This therefore preserves more information than max-pooling, but may also reduces the effect of the most prominent pixels. Mean is often used where a more accurate representation of the input is required. ‘pool-median’ Apply median pooling on the input dataset. This operator takes three operands: the first popped operand is the stride and the second is the width of the square pooling window (which should be a single integer). Also, The third operand should be the input image. Except the used statistical measurement, this operator is similar to ‘pool-max’, see the description there for more. In general, the mean is mathematically easier to interpret and more susceptible to outliers, while the median outputs as being less subject to the influence of outliers compared to the mean so we have a smoother image. This is therefore better for low signal-to-ratio (noisy) features and extended features (where you don't want a single high or low valued pixel to affect the output).  File: gnuastro.info, Node: Interpolation operators, Next: Dimensionality changing operators, Prev: Pooling operators, Up: Arithmetic operators 6.2.4.10 Interpolation operators ................................ Interpolation is the process of removing blank pixels from a dataset (by giving them a value based on the non-blank neighbors). ‘interpolate-medianngb’ Interpolate the blank elements of the second popped operand with the median of nearest non-blank neighbors to each. The number of the nearest non-blank neighbors used to calculate the median is given by the first popped operand. The distance of the nearest non-blank neighbors is irrelevant in this interpolation. The neighbors of each blank pixel will be parsed in expanding circular rings (for 2D images) or spherical surfaces (for 3D cube) and each non-blank element over them is stored in memory. When the requested number of non-blank neighbors have been found, their median is used to replace that blank element. For example, the line below replaces each blank element with the median of the nearest 5 pixels. $ astarithmetic image.fits 5 interpolate-medianngb When you want to interpolate blank regions and you want each blank region to have a fixed value (for example, the centers of saturated stars) this operator is not good. Because the pixels used to interpolate various parts of the region differ. For such scenarios, you may use ‘interpolate-maxofregion’ or ‘interpolate-inofregion’ (described below). ‘interpolate-meanngb’ Similar to ‘interpolate-medianngb’, but will fill the blank values of the dataset with the mean value of the requested number of nearest neighbors. ‘interpolate-minngb’ Similar to ‘interpolate-medianngb’, but will fill the blank values of the dataset with the minimum value of the requested number of nearest neighbors. ‘interpolate-maxngb’ Similar to ‘interpolate-medianngb’, but will fill the blank values of the dataset with the maximum value of the requested number of nearest neighbors. One useful implementation of this operator is to fill the saturated pixels of stars in images. ‘interpolate-minofregion’ Interpolate all blank regions (consisting of many blank pixels that are touching) in the second popped operand with the minimum value of the pixels that are immediately bordering that region (a single value). The first popped operand is the connectivity (see description in ‘connected-components’). For example, with the command below all the connected blank regions of ‘image.fits’ will be filled. Its an image (2D dataset), so a 2 connectivity means that the independent blank regions are defined by 8-connected neighbors. If connectivity was 1, the regions would be defined by 4-connectivity: blank regions that may only be touching on the corner of one pixel would be identified as separate regions. $ astarithmetic image.fits 2 interpolate-minofregion ‘interpolate-maxofregion’ Similar to ‘interpolate-minofregion’, but the maximum is used to fill the blank regions. This operator can be useful in filling saturated pixels in stars for example. Recall that the ‘interpolate-maxngb’ operator looks for the maximum value with a given number of neighboring pixels and is more useful in small noisy regions. Therefore as the blank regions become larger, ‘interpolate-maxngb’ can cause a fragmentation in the connected blank region because the nearest neighbor to one part of the blank region, may not fall within the pixels searched for the other regions. With this option, the size of the blank region is irrelevant: all the pixels bordering the blank region are parsed and their maximum value is used for the whole region.  File: gnuastro.info, Node: Dimensionality changing operators, Next: Conditional operators, Prev: Interpolation operators, Up: Arithmetic operators 6.2.4.11 Dimensionality changing operators .......................................... Through these operators you can change the dimensions of the output through certain statistics on the dimensions that should be removed. For example, let's assume you have a 3D data cube that has 300 by 300 pixels in the RA and Dec dimensions (first two dimensions), and 3600 slices along the wavelength (third dimension), so the whole cube is $300\times300\times3600$ voxels (volume elements). To create a narrow-band image that only contains 100 slices around a certain wavelength, you can crop that section (using *note Crop::), giving you a $300\times300\times100$ cube. You can now use the ‘collapse-sum’ operator below to "collapse" all the 100 slices into one 2D image that has $300\times300$ pixels. Every pixel in this 2D image will have the flux of the sum of the 100 slices. ‘to-1d’ Convert the input operand into a 1D array; irrespective of the number of dimensions it has. This operator only takes a single operand (the input array) and just updates the metadata. Therefore it does not change the layout of the array contents in memory and is very fast. If no further operation is requested on the 1D array, recall that Arithmetic will write a 1D array as a table column by default. In case you want the output to be saved as a 1D image, or to see it on the standard output, please use the ‘--onedasimage’ or ‘--onedonstdout’ options respectively (see *note Invoking astarithmetic::). This operator is useful in scenarios where after some operations on a 2D image or 3D cube, the dimensionality is no longer relevant for you and you just care about the values. In the example below, we will first make a simple 2D image from a plain-text file, then convert it to a 1D array: ## Contents of 'a.txt' to start with. $ cat a.txt # Image 1: DEMO [counts, uint8] An example image 1 2 3 4 5 6 7 8 9 ## Convert the text image into a FITS image. $ astconvertt a.txt -o a.fits ## Convert it into a table column (1D): $ astarithmetic a.fits to-1d -o table.fits ## Convert it into a 1D image: $ astarithmetic a.fits to-1d -o table.fits --onedasimage A more real-world example would be the following: assume you want to "flatten" two images into a single 1D array (as commonly done in convolutional neural networks, or CNNs(1)). First, we show the contents of a new $2\times2$ image in plain-text image, then convert it to a 2D FITS image (‘b.fits’). We will then use arithmetic to make both ‘a.fits’ (from the example above) and ‘b.fits’ into a 1D array and stitch them together into a single 1D image with one call to Arithmetic. For a description of the ‘stitch’ operator, see below (same section). ## Contents of 'b.txt': $ cat b.txt # Image 1: DEMO [counts, uint8] An example image 10 11 12 13 ## Convert the text image into a FITS image. $ astconvertt b.txt -o b.fits # Flatten the two images into a single 1D image: $ astarithmetic a.fits to-1d b.fits to-1d 2 1 stitch -g1 \ --onedonstdout --quiet 1 2 3 4 5 6 7 8 9 10 11 12 13 ‘stitch’ Stitch (connect) any number of given images together along the given dimension. The output has the same number of dimensions as the input, but the number of pixels along the requested dimension will be different from the inputs. The ‘stitch’ operator takes at least three operands: • The first popped operand (placed just before ‘stitch’) is the direction (dimension) that the images should be stitched along. The first FITS dimension is along the horizontal, therefore a value of ‘1’ will stitch them horizontally. Similarly, giving a value of ‘2’ will result in a vertical stitch. • The second popped operand is the number of images that should be stitched. • Depending on the value given to the second popped operand, ‘stitch’ will pop the given number of datasets from the stack and stitch them along the given dimension. The popped images have to have the same number of pixels along the other dimension. The order of the stitching is defined by how they are placed in the command-line, not how they are popped (after being popped, they are placed in a list in the same order). For example, in the commands below, we will first crop out fixed sized regions of $100\times300$ pixels of a larger image (‘large.fits’) first. In the first call of Arithmetic below, we will stitch the bottom set of crops together along the first (horizontal) axis. In the second Arithmetic call, we will stitch all 6 along both dimensions. ## Crop the fixed-size regions of a larger image ('-O' is the ## short form of the '--mode' option). $ astcrop large.fits -Oimg --section=1:100,1:300 -oa.fits $ astcrop large.fits -Oimg --section=101:200,1:300 -ob.fits $ astcrop large.fits -Oimg --section=201:300,1:300 -oc.fits $ astcrop large.fits -Oimg --section=1:100,301:600 -od.fits $ astcrop large.fits -Oimg --section=101:200,301:600 -oe.fits $ astcrop large.fits -Oimg --section=201:300,301:600 -of.fits ## Stitch the bottom three crops into one image. $ astarithmetic a.fits b.fits c.fits 3 1 stitch -obottom.fits # Stitch all the 6 crops along both dimensions $ astarithmetic a.fits b.fits c.fits 3 1 stitch \ d.fits e.fits f.fits 3 1 stitch \ 2 2 stitch -g1 -oall.fits The start of the last command is like the one before it (stitching the bottom three crops along the first FITS dimension, producing a $300\times300$ image). Later in the same command, we then stitch the top three crops horizontally (again, into a $300\times300$ image) This leaves the the two $300\times300$ images on the stack (see *note Reverse polish notation::). We finally stitch those two along the second (vertical) dimension. This operator is therefore useful in scenarios like placing the CCD amplifiers into one image. ‘trim’ Trim all blank elements from the outer edges of the input operand (it only takes a single operand). For example see the commands below using Table's *note Column arithmetic::: $ cat table.txt nan nan nan 3 4 nan 5 6 nan $ asttable table.txt -Y -c'arith $1 trim' 3.000000 4.000000 nan 5.000000 6.000000 Similarly, on 2D images or 3D cubes, all outer rows/columns or slices that are fully blank get "trim"ed with this operator. This is therefore a very useful operator for extracting a certain feature within your dataset. For example, let's assume that you have set *note NoiseChisel:: and *note Segment:: on an image to extract all clumps and objects. With the command below on Segment's output, you will have a smaller image that only contains the sky-subtracted input pixels corresponding to object 263. $ astarithmetic seg.fits -hINPUT-NO-SKY seg.fits -hOBJECTS \ 263 ne nan where trim --output=obj-263.fits ‘add-dimension-slow’ Build a higher-dimensional dataset from all the input datasets stacked after one another (along the slowest dimension). The first popped operand has to be a single number. It is used by the operator to know how many operands it should pop from the stack (and the size of the output in the new dimension). The rest of the operands must have the same size and numerical data type. This operator currently only works for 2D input operands, please contact us if you want inputs to have different dimensions. The output's WCS (which should have a different dimensionality compared to the inputs) can be read from another file with the ‘--wcsfile’ option. If no file is specified for the WCS, the first dataset's WCS will be used, you can later add/change the necessary WCS keywords with the FITS keyword modification features of the Fits program (see *note Fits::). If your datasets do not have the same type, you can use the type transformation operators of Arithmetic that are discussed below. Just beware of overflow if you are transforming to a smaller type, see *note Numeric data types::. For example, let's assume you have 3 two-dimensional images ‘a.fits’, ‘b.fits’ and ‘c.fits’ (each with $200\times100$ pixels). You can construct a 3D data cube with $200\times100\times3$ voxels (volume-pixels) using the command below: $ astarithmetic a.fits b.fits c.fits 3 add-dimension-slow ‘add-dimension-fast’ Similar to ‘add-dimension-slow’ but along the fastest dimension. This operator currently only works for 1D input operands, please contact us if you want inputs to have different dimensions. For example, let's assume you have 3 one-dimensional datasets, each with 100 elements. With this operator, you can construct a $3\times100$ pixel FITS image that has 3 pixels along the horizontal and 5 pixels along the vertical. ‘collapse-sum’ Collapse the given dataset (second popped operand), by summing all elements along the first popped operand (a dimension in FITS standard: counting from one, from fastest dimension). The returned dataset has one dimension less compared to the input. The output will have a double-precision floating point type irrespective of the input dataset's type. Doing the operation in double-precision (64-bit) floating point will help the collapse (summation) be affected less by floating point errors. But afterwards, single-precision floating points are usually enough in real (noisy) datasets. So depending on the type of the input and its nature, it is recommended to use one of the type conversion operators on the returned dataset. If any WCS is present, the returned dataset will also lack the respective dimension in its WCS matrix. Therefore, when the WCS is important for later processing, be sure that the input is aligned with the respective axes: all non-diagonal elements in the WCS matrix are zero. One common application of this operator is the creation of pseudo broad-band or narrow-band 2D images from 3D data cubes. For example, integral field unit (IFU) data products that have two spatial dimensions (first two FITS dimensions) and one spectral dimension (third FITS dimension). The command below will collapse the whole third dimension into a 2D array the size of the first two dimensions, and then convert the output to single-precision floating point (as discussed above). $ astarithmetic cube.fits 3 collapse-sum float32 ‘collapse-min’ ‘collapse-max’ ‘collapse-mean’ ‘collapse-median’ Similar to ‘collapse-sum’, but the returned dataset will be the desired statistic along the collapsed dimension, not the sum. ‘collapse-madclip-fill-mad’ ‘collapse-madclip-fill-std’ ‘collapse-madclip-fill-mean’ ‘collapse-madclip-fill-median’ ‘collapse-madclip-fill-number’ Collapse the input dataset (fourth popped operand) along the FITS dimension given as the first popped operand by calculating the desired statistic after median absolute deviation (MAD) filled re-clipping. The MAD-clipping parameters (namely, the multiple of sigma and termination criteria) are read as the third and second popped operands respectively. This is the most robust method to reject outliers; for more on filled re-clipping and its advantages, see *note Filled re-clipping::. For a more general tutorial on rejecting outliers, see *note Clipping outliers::. If you have not done this tutorial yet, we recommend you to take an hour or so and go through that tutorial for optimal understanding and results. For example, with the command below, the pixels of the input 2 dimensional ‘image.fits’ will be collapsed to a single dimension output. The first popped operand is ‘2’, so it will collapse all the pixels that are vertically on top of each other. Such that the output will have the same number of pixels as the horizontal axis of the input. During the collapsing, all pixels that are more than $3\sigma$ (third popped operand) are rejected, and the clipping will continue until the standard deviation changes less than $0.2$ between clips. Finally the ‘counter’ operator is used to have a two-column table with the first one being a simple counter starting from one (see *note Size and position operators::). $ astarithmetic image.fits 3 0.2 2 collapse-sigclip-mean \ counter --output=collapsed-vertical.fits *Printing output of collapse in plain-text:* the default datatype of ‘collapse-sigclip-mean’ is 32-bit floating point. This is sufficient for any observed astronomical data. However, if you request a plain-text output, or decide to print/view the output as plain-text on the standard output, the full set of decimals may not be printed in some situations. This can lead to apparently discrete values in the output of this operator when viewed in plain-text! The FITS format is always superior (since it stores the value in binary, therefore not having the problem above). But if you are forced to save the output in plain-text, use the ‘float64’ operator after this to change the type to 64-bit floating point (which will print more decimals). ‘collapse-madclip-mad’ ‘collapse-madclip-std’ ‘collapse-madclip-mean’ ‘collapse-madclip-median’ ‘collapse-madclip-number’ Collapse the input dataset (fourth popped operand) along the FITS dimension given as the first popped operand by calculating the desired statistic after median absolute deviation (MAD) clipping. This operator is called similarly to the ‘collapse-madclip-fill-*’ operators, see the description there for more. ‘collapse-sigclip-fill-mad’ ‘collapse-sigclip-fill-std’ ‘collapse-sigclip-fill-mean’ ‘collapse-sigclip-fill-median’ ‘collapse-sigclip-fill-number’ Collapse the input dataset (fourth popped operand) along the FITS dimension given as the first popped operand by calculating the desired statistic after filled $\sigma$ re-clipping. This operator is called similarly to the ‘collapse-madclip-fill-*’ operators, see the description there for more. ‘collapse-sigclip-mad’ ‘collapse-sigclip-std’ ‘collapse-sigclip-mean’ ‘collapse-sigclip-median’ ‘collapse-sigclip-number’ Collapse the input dataset (fourth popped operand) along the FITS dimension given as the first popped operand by calculating the desired statistic after $\sigma$-clipping. This operator is called similarly to the ‘collapse-madclip-fill-*’ operators, see the description there for more. ---------- Footnotes ---------- (1) <https://en.wikipedia.org/wiki/Convolutional_neural_network>  File: gnuastro.info, Node: Conditional operators, Next: Mathematical morphology operators, Prev: Dimensionality changing operators, Up: Arithmetic operators 6.2.4.12 Conditional operators .............................. Conditional operators take two inputs and return a binary output that can only have two values 0 (for pixels where the condition was false) or 1 (for the pixels where the condition was true). Because of the binary (2-valued) nature of their outputs, the output is therefore stored in an ‘unsigned char’ data type (see *note Numeric data types::) to speed up process and take less space in your storage. There are two exceptions to the general features above: ‘isblank’ only takes one input, and ‘where’ takes three, while not returning a binary output, see their description for more. ‘lt’ Less than: creates a binary output (values either 0 or 1) where each pixel will be 1 if the second popped operand is smaller than the first popped operand and 0 otherwise. If both operands are images, then all the pixels will be compared with their counterparts in the other image. For example, the pixels in the output of the command below will have a value of 1 (true) if their value in ‘image1.fits’ is less than their value in ‘image2.fits’. Otherwise, their value will be 0 (false). $ astarithmetic image1.fits image2.fits lt If only one operand is an image, then all the pixels will be compared with the single value (number) of the other operand. For example: $ astarithmetic image1.fits 1000 lt Finally if both are numbers, then the output is also just one number (0 or 1). $ astarithmetic 4 5 lt ‘le’ Less or equal: similar to ‘lt’ ('less than' operator), but returning 1 when the second popped operand is smaller or equal to the first. For example $ astarithmetic image1.fits 1000 le ‘gt’ Greater than: similar to ‘lt’ ('less than' operator), but returning 1 when the second popped operand is greater than the first. For example $ astarithmetic image1.fits 1000 gt ‘ge’ Greater or equal: similar to ‘lt’ ('less than' operator), but returning 1 when the second popped operand is larger or equal to the first. For example $ astarithmetic image1.fits 1000 ge ‘eq’ Equality: similar to ‘lt’ ('less than' operator), but returning 1 when the two popped operands are equal (to double precision floating point accuracy). $ astarithmetic image1.fits 1000 eq ‘ne’ Non-Equality: similar to ‘lt’ ('less than' operator), but returning 1 when the two popped operands are _not_ equal (to double precision floating point accuracy). $ astarithmetic image1.fits 1000 ne ‘and’ Logical AND: returns 1 if both operands have a non-zero value and 0 if both are zero. Both operands have to be the same kind: either both images or both numbers and it mostly makes meaningful values when the inputs are binary (with pixel values of 0 or 1). $ astarithmetic image1.fits image2.fits -g1 and For example, if you only want to see which pixels in an image have a value _between_ 50 (greater equal, or inclusive) and 200 (less than, or exclusive), you can use this command: $ astarithmetic image.fits set-i i 50 ge i 200 lt and ‘or’ Logical OR: returns 1 if either one of the operands is non-zero and 0 only when both operators are zero. Both operands have to be the same kind: either both images or both numbers. The usage is similar to ‘and’. For example, if you only want to see which pixels in an image have a value _outside of_ -100 (greater equal, or inclusive) and 200 (less than, or exclusive), you can use this command: $ astarithmetic image.fits set-i i -100 lt i 200 ge or ‘not’ Logical NOT: returns 1 when the operand is 0 and 0 when the operand is non-zero. The operand can be an image or number, for an image, it is applied to each pixel separately. For example, if you want to know which pixels are not blank (and assuming that we didn't have the ‘isnotblank’ operator), you can use this ‘not’ operator on the output of the ‘isblank’ operator described below: $ astarithmetic image.fits isblank not ‘isblank’ Test each pixel for being a blank value (see *note Blank pixels::). This is a conditional operator: the output has the same size and dimensions as the input, but has an unsigned 8-bit integer type with two possible values: either 1 (for a pixel that was blank) or 0 (for a pixel that was not blank). See the description of ‘lt’ operator above). The difference is that it only needs one operand. For example: $ astarithmetic image.fits isblank Because of the definition of a blank pixel, a blank value is not even equal to itself, so you cannot use the equal operator above to select blank pixels. See the "Blank pixels" box below for more on Blank pixels in Arithmetic. In case you want to set non-blank pixels to an output pixel value of 1, it is better to use ‘isnotblank’ instead of '‘isblank not’' (for more, see the description of ‘isnotblank’). ‘isnotblank’ The inverse of the ‘isblank’ operator above (see that description for more). Therefore, if a pixel has a blank value, the output of this operator will have a 0 value for it. This operator is therefore similar to running '‘isblank not’', but slightly more efficient (won't need the intermediate product of two operators). ‘where’ Change the input (pixel) value _where_/if a certain condition holds. The conditional operators above can be used to define the condition. Three operands are required for ‘where’. The input format is demonstrated in this simplified example: $ astarithmetic modify.fits binary.fits if-true.fits where The value of any pixel in ‘modify.fits’ that corresponds to a non-zero _and_ non-blank pixel of ‘binary.fits’ will be changed to the value of the same pixel in ‘if-true.fits’ (this may also be a number). The 3rd and 2nd popped operands (‘modify.fits’ and ‘binary.fits’ respectively, see *note Reverse polish notation::) have to have the same dimensions/size. ‘if-true.fits’ can be either a number, or have the same dimension/size as the other two. The 2nd popped operand (‘binary.fits’) has to have ‘uint8’ (or ‘unsigned char’ in standard C) type (see *note Numeric data types::). It is treated as a binary dataset (with only two values: zero and non-zero, hence the name ‘binary.fits’ in this example). However, commonly you will not be dealing with an actual FITS file of a condition/binary image. You will probably define the condition in the same run based on some other reference image and use the conditional and logical operators above to make a true/false (or one/zero) image for you internally. For example, the case below: $ astarithmetic in.fits reference.fits 100 gt new.fits where In the example above, any of the ‘in.fits’ pixels that has a value in ‘reference.fits’ greater than ‘100’, will be replaced with the corresponding pixel in ‘new.fits’. Effectively the ‘reference.fits 100 gt’ part created the condition/binary image which was added to the stack (in memory) and later used by ‘where’. The command above is thus equivalent to these two commands: $ astarithmetic reference.fits 100 gt --output=binary.fits $ astarithmetic in.fits binary.fits new.fits where Finally, the input operands are read and used independently, so you can use the same file more than once as any of the operands. When the 1st popped operand to ‘where’ (‘if-true.fits’) is a single number, it may be a NaN value (or any blank value, depending on its type) like the example below (see *note Blank pixels::). When the number is blank, it will be converted to the blank value of the type of the 3rd popped operand (‘in.fits’). Hence, in the example below, all the pixels in ‘reference.fits’ that have a value greater than 100, will become blank in the natural data type of ‘in.fits’ (even though NaN values are only defined for floating point types). $ astarithmetic in.fits reference.fits 100 gt nan where  File: gnuastro.info, Node: Mathematical morphology operators, Next: Bitwise operators, Prev: Conditional operators, Up: Arithmetic operators 6.2.4.13 Mathematical morphology operators .......................................... From Wikipedia: "Mathematical morphology (MM) is a theory and technique for the analysis and processing of geometrical structures, based on set theory, lattice theory, topology, and random functions. MM is most commonly applied to digital images". In theory it extends a very large body of research and methods in image processing, but currently in Gnuastro it mainly applies to images that are binary (only have a value of 0 or 1). For example, you have applied the greater-than operator (‘gt’, see *note Conditional operators::) to select all pixels in your image that are larger than a value of 100. But they will all have a value of 1, and you want to separate the various groups of pixels that are connected (for example, peaks of stars in your image). With the ‘connected-components’ operator, you can give each connected region of the output of ‘gt’ a separate integer label. ‘erode’ Erode the foreground pixels (with value ‘1’) of the input dataset (second popped operand). The first popped operand is the connectivity (see description in ‘connected-components’). Erosion is simply a flipping of all foreground pixels (with value ‘1’) to background (with value ‘0’) that are "touching" background pixels. "Touching" is defined by the connectivity. In effect, this operator "carves off" the outer borders of the foreground, making them thinner. This operator assumes a binary dataset (all pixels are ‘0’ or ‘1’). For example, imagine that you have an astronomical image with a mean/sky value of 0 units and a standard deviation ($\sigma$) of 100 units and many galaxies in it. With the first command below, you can apply a threshold of $2\sigma$ on the image (by only keeping pixels that are greater than 200 using the ‘gt’ operator). The output of thresholding the image is a binary image (each pixel is either smaller or equal to the threshold or larger than it). You can then erode the binary image with the second command below to remove very small false positives (one or two pixel peaks). $ astarithmetic image.fits 100 gt -obinary.fits $ astarithmetic binary.fits 2 erode -oout.fits In fact, you can merge these operations into one command thanks to the reverse polish notation (see *note Reverse polish notation::): $ astarithmetic image.fits 100 gt 2 erode -oout.fits To see the effect of connectivity, try this: $ astarithmetic image.fits 100 gt 1 erode -oout-con-1.fits ‘dilate’ Dilate the foreground pixels (with value ‘1’) of the binary input dataset (second popped operand). The first popped operand is the connectivity (see description in ‘connected-components’). Dilation is simply a flipping of all background pixels (with value ‘0’) to foreground (with value ‘1’) that are "touching" foreground pixels. "Touching" is defined by the connectivity. In effect, this expands the outer borders of the foreground. This operator assumes a binary dataset (all pixels are ‘0’ and ‘1’). The usage is similar to ‘erode’, for example: $ astarithmetic binary.fits 2 dilate -oout.fits ‘number-neighbors’ Return a dataset of the same size as the second popped operand, but where each non-zero and non-blank input pixel is replaced with the number of its non-zero and non-blank neighbors. The first popped operand is the connectivity (see above) and must be a single-value of an integer type. The dataset is assumed to be binary (having an unsigned, 8-bit dataset). For example with the command below, you can select all pixels above a value of 100 in your image with the "greater-than" or ‘gt’ operator (see *note Conditional operators::). Recall that the output of all conditional operators is a binary output (having a value of 0 or 1). In the same command, we will then find how many neighboring pixels of each pixel (that was originally above the threshold) are also above the threshold. $ astarithmetic image.fits 100 gt 2 number-neighbors ‘connected-components’ Find the connected components in the input dataset (second popped operand). The first popped is the connectivity used in the connected components algorithm. The second popped operand is the dataset where connected components are to be found. It is assumed to be a binary image (with values of 0 or 1). It must have an 8-bit unsigned integer type which is the format produced by conditional operators. This operator will return a labeled dataset where the non-zero pixels in the input will be labeled with a counter (starting from 1). The connectivity is a number between 1 and the number of dimensions in the dataset (inclusive). 1 corresponds to the weakest (symmetric) connectivity between elements and the number of dimensions the strongest. For example, on a 2D image, a connectivity of 1 corresponds to 4-connected neighbors and 2 corresponds to 8-connected neighbors. One example usage of this operator can be the identification of regions above a certain threshold, as in the command below. With this command, Arithmetic will first separate all pixels greater than 100 into a binary image (where pixels with a value of 1 are above that value). Afterwards, it will label all those that are connected. $ astarithmetic in.fits 100 gt 2 connected-components If your input dataset does not have a binary type, but you know all its values are 0 or 1, you can use the ‘uint8’ operator (below) to convert it to binary. ‘fill-holes’ Flip background (0) pixels surrounded by foreground (1) in a binary dataset. This operator takes two operands (similar to ‘connected-components’): the second is the binary (0 or 1 valued) dataset to fill holes in and the first popped operand is the connectivity (to define a hole). Imagine that in your dataset there are some holes with zero value inside the objects with one value (for example, the output of the thresholding example of ‘erode’) and you want to fill the holes: $ astarithmetic binary.fits 2 fill-holes ‘invert’ Invert an unsigned integer dataset (will not work on other data types, see *note Numeric data types::). This is the only operator that ignores blank values (which are set to be the maximum values in the unsigned integer types). This is useful in cases where the target(s) has(have) been imaged in absorption as raw formats (which are unsigned integer types). With this option, the maximum value for the given type will be subtracted from each pixel value, thus "inverting" the image, so the target(s) can be treated as emission. This can be useful when the higher-level analysis methods/tools only work on emission (positive skew in the noise, not negative). $ astarithmetic image.fits invert  File: gnuastro.info, Node: Bitwise operators, Next: Numerical type conversion operators, Prev: Mathematical morphology operators, Up: Arithmetic operators 6.2.4.14 Bitwise operators .......................... Astronomical images are usually stored as an array multi-byte pixels with different sizes for different precision levels (see *note Numeric data types::). For example, images from CCDs are usually in the unsigned 16-bit integer type (each pixel takes 16 bits, or 2 bytes, of memory) and fully reduced deep images have a 32-bit floating point type (each pixel takes 32 bits or 4 bytes). On the other hand, during the data reduction, we need to preserve a lot of meta-data about some pixels. For example, if a cosmic ray had hit the pixel during the exposure, or if the pixel was saturated, or is known to have a problem, or if the optical vignetting is too strong on it. A crude solution is to make a new image when checking for each one of these things and make a binary image where we flag (set to 1) pixels that satisfy any of these conditions above, and set the rest to zero. However, processing pipelines sometimes need more than 20 flags to store important per-pixel meta-data, and recall that the smallest numeric data type is one byte (or 8 bits, that can store up to 256 different values), while we only need two values for each flag! This is a major waste of storage space! A much more optimal solution is to use the bits within each pixel to store different flags! In other words, if you have an 8-bit pixel, use each bit as a flag to mark if a certain condition has happened on a certain pixel or not. For example, let's set the following standard based on the four cases mentioned above: the first bit will show that a cosmic ray has hit that pixel. So if a pixel is only affected by cosmic rays, it will have this sequence of bits (note that the bit-counting starts from the right): ‘00000001’. The second bit shows that the pixel was saturated (‘00000010’), the third bit shows that it has known problems (‘00000100’) and the fourth bit shows that it was affected by vignetting (‘00001000’). Since each bit is independent, we can thus mark multiple metadata about that pixel in the actual image, within a single "flag" or "mask" pixel of a flag or mask image that has the same number of pixels. For example, a flag-pixel with the following bits ‘00001001’ shows that it has been affected by cosmic rays _and_ it has been affected by vignetting at the same time. The common data type to store these flagging pixels are unsigned integer types (see *note Numeric data types::). Therefore when you open an unsigned 8-bit flag image in a viewer like DS9, you will see a single integer in each pixel that actually has 8 layers of metadata in it! For example, the integer you will see for the bit sequences given above will respectively be: $2^0=1$ (for a pixel that only has cosmic ray), $2^1=2$ (for a pixel that was only saturated), $2^2=4$ (for a pixel that only has known problems), $2^3=8$ (for a pixel that is only affected by vignetting) and $2^0 + 2^3 = 9$ (for a pixel that has a cosmic ray _and_ was affected by vignetting). You can later use this bit information to mark objects in your final analysis or to mask certain pixels. For example, you may want to set all pixels affected by vignetting to NaN, but can interpolate over cosmic rays. You therefore need ways to separate the pixels with a desired flag(s) from the rest. It is possible to treat a flag pixel as a single integer (and try to define certain ranges in value to select certain flags). But a much more easier and robust way is to actually look at each pixel as a sequence of bits (not as a single integer!) and use the bitwise operators below for this job. For more on the theory behind bitwise operators, see Wikipedia (https://en.wikipedia.org/wiki/Bitwise_operation). ‘bitand’ Bitwise AND operator: only bits with values of 1 in both popped operands will get the value of 1, the rest will be set to 0. For example, (assuming numbers can be written as bit strings on the command-line): ‘00101000 00100010 bitand’ will give ‘00100000’. Note that the bitwise operators only work on integer type datasets. ‘bitor’ Bitwise inclusive OR operator: The bits where at least one of the two popped operands has a 1 value get a value of 1, the others 0. For example, (assuming numbers can be written as bit strings on the command-line): ‘00101000 00100010 bitand’ will give ‘00101010’. Note that the bitwise operators only work on integer type datasets. ‘bitxor’ Bitwise exclusive OR operator: A bit will be 1 if it differs between the two popped operands. For example, (assuming numbers can be written as bit strings on the command-line): ‘00101000 00100010 bitand’ will give ‘00001010’. Note that the bitwise operators only work on integer type datasets. ‘lshift’ Bitwise left shift operator: shift all the bits of the first operand to the left by a number of times given by the second operand. For example, (assuming numbers can be written as bit strings on the command-line): ‘00101000 2 lshift’ will give ‘10100000’. This is equivalent to multiplication by 4. Note that the bitwise operators only work on integer type datasets. ‘rshift’ Bitwise right shift operator: shift all the bits of the first operand to the right by a number of times given by the second operand. For example, (assuming numbers can be written as bit strings on the command-line): ‘00101000 2 rshift’ will give ‘00001010’. Note that the bitwise operators only work on integer type datasets. ‘bitnot’ Bitwise not (more formally known as one's complement) operator: flip all the bits of the popped operand (note that this is the only unary, or single operand, bitwise operator). In other words, any bit with a value of ‘0’ is changed to ‘1’ and vice-versa. For example, (assuming numbers can be written as bit strings on the command-line): ‘00101000 bitnot’ will give ‘11010111’. Note that the bitwise operators only work on integer type datasets/numbers.  File: gnuastro.info, Node: Numerical type conversion operators, Next: Random number generators, Prev: Bitwise operators, Up: Arithmetic operators 6.2.4.15 Numerical type conversion operators ............................................ With the operators below you can convert the numerical data type of your input, see *note Numeric data types::. Type conversion is particularly useful when dealing with integers, see *note Integer benefits and pitfalls::. As an example, let's assume that your colleague gives you many single exposure images for processing, but they have a double-precision floating point type! You know that the statistical error a single-exposure image can never exceed 6 or 7 significant digits, so you would prefer to archive them as a single-precision floating point and save space on your computer (a double-precision floating point is also double the file size!). You can do this with the ‘float32’ operator described below. ‘u8’ ‘uint8’ Convert the type of the popped operand to 8-bit unsigned integer type (see *note Numeric data types::). The internal conversion of C will be used. ‘i8’ ‘int8’ Convert the type of the popped operand to 8-bit signed integer type (see *note Numeric data types::). The internal conversion of C will be used. ‘u16’ ‘uint16’ Convert the type of the popped operand to 16-bit unsigned integer type (see *note Numeric data types::). The internal conversion of C will be used. ‘i16’ ‘int16’ Convert the type of the popped operand to 16-bit signed integer (see *note Numeric data types::). The internal conversion of C will be used. ‘u32’ ‘uint32’ Convert the type of the popped operand to 32-bit unsigned integer type (see *note Numeric data types::). The internal conversion of C will be used. ‘i32’ ‘int32’ Convert the type of the popped operand to 32-bit signed integer type (see *note Numeric data types::). The internal conversion of C will be used. ‘u64’ ‘uint64’ Convert the type of the popped operand to 64-bit unsigned integer (see *note Numeric data types::). The internal conversion of C will be used. ‘f32’ ‘float32’ Convert the type of the popped operand to 32-bit (single precision) floating point (see *note Numeric data types::). The internal conversion of C will be used. For example, if ‘f64.fits’ is a 64-bit floating point image, and you want to store it as a 32-bit floating point image, you can use the command below (the second command is to show that the output file consumes half the storage) $ astarithmetic f64.fits float32 --output=f32.fits $ ls -lh f64.fits f32.fits ‘f64’ ‘float64’ Convert the type of the popped operand to 64-bit (double precision) floating point (see *note Numeric data types::). The internal conversion of C will be used.  File: gnuastro.info, Node: Random number generators, Next: Coordinate and border operators, Prev: Numerical type conversion operators, Up: Arithmetic operators 6.2.4.16 Random number generators ................................. When you simulate data (for example, see *note Sufi simulates a detection::), everything is ideal and there is no noise! The final step of the process is to add simulated noise to the data. The operators in this section are designed for that purpose. To learn more about the definition and implementation "noise", see *note Noise basics::. In case each data element's random distribution should have an independent parameter (for example $\sigma$ in a Gaussian distribution), the first popped operand can be a dataset of the same size as the second. In this case (when the parameter is not a single value, but an array), each element will have a different parameter. When ‘--quiet’ is not given, a statement will be printed on each invocation of these operators (if there are multiple calls to the ‘mknoise-*’ operators, the statement will be printed multiple times). It will show the random number generator function and seed that was used in that invocation. These are necessary for the future reproducibility of the outputs using the ‘--envseed’ option, for more, see *note Generating random numbers::. For example, with the first command below, ‘image.fits’ will be degraded by a noise of standard deviation 3 units. $ astarithmetic image.fits 3 mknoise-sigma Alternatively, you can use the operators in this section within the *note Column arithmetic:: feature of the Table program. For example, with the command below, you can generate a random number (centered on 0, with $\sigma=3$). With the second command, you can put it into a shell variable for later usage. $ echo 0 | asttable -c'arith $1 3 mknoise-sigma' $ value=$(echo 0 | asttable -c'arith $1 3 mknoise-sigma' --quiet) $ echo $value You can also use the operators here in combination with AWK to easily generate an arbitrarily large table with random columns. In the example below, we will create a two column table with 20 rows. The first column will be centered on 5 and $\sigma_1=2$, the second will be centered on 10 and $\sigma_2=3$: $ echo 5 10 \ | awk '{for(i=0;i<20;++i) print $1, $2}' \ | asttable -c'arith $1 2 mknoise-sigma' \ -c'arith $2 3 mknoise-sigma' By adding an extra ‘--output=random.fits’, the table will be saved into a file called ‘random.fits’, and you can change the ‘i<20’ to ‘i<5000’ to have 5000 rows instead. Of course, if your input table has different values in the desired column the noisy distribution will be centered on each input element, but all will have the same scatter/sigma. As mentioned above, you can use the ‘--envseed’ option to pre-define the random number generator seed (and thus get a reproducible result). For more on ‘--envseed’, see *note Generating random numbers::. When using column arithmetic in Table, it may happen that multiple columns need random numbers (with any of the ‘mknoise-*’ operators) in one call of ‘asttable’. In such cases, the value given to ‘GSL_RNG_SEED’ is incremented by one on every call to the ‘mknoise-*’ operators. Without this increment, when the column values are the same (happens a lot, for no-noised datasets), the returned values for all columns will be identical. But this feature has a side-effect: that if the order of calling the ‘mknoise-*’ operators changes, the seeds used for each operator will change(1). ‘mknoise-sigma’ Add a Gaussian noise with pre-defined $\sigma$ to each element of the input dataset (independent of the input pixel value). $\sigma$ is the standard deviation of the Gaussian or Normal distribution (https://en.wikipedia.org/wiki/Normal_distribution). This operator takes two arguments: the top/first popped operand is the noise standard deviation, the next popped operand is the dataset that the noise should be added to. For example, with the first command below, let's put a Sérsic profile with Sérsic index 1 and effective radius 10 pixels, truncated at 5 times the effective radius in the center of a mock image that is $100\times100$ pixels wide. We will also give it a position angle of 45 degrees and an axis ratio of 0.8, and set it to have a total electron count of 10000 (‘1e4’ in the command). Note that this example is focused on this operator, for a robust simulation, see the tutorial in *note Sufi simulates a detection::. With the second command, let's add noise to this image and with the third command, we'll subtract the raw image from the noised image. Finally, we'll view them both together: $ echo "1 50 50 1 10 1 45 0.8 1e4 5" \ | astmkprof --mergedsize=100,100 --oversample=1 \ --mcolissum --output=raw.fits $ astarithmetic raw.fits 2 mknoise-sigma --output=sigma.fits $ astarithmetic raw.fits sigma.fits - -g1 \ --output=diff-sigma.fits $ astscript-fits-view raw.fits sigma.fits diff-sigma.fits You see that the final ‘diff-sigma.fits’ distribution was independent of the pixel values of the input. You will also notice that within ‘sigma.fits’ the noisy pixels that had a zero value in ‘raw.fits’, the noise fluctuates around zero (is negative in half of those pixels). These behaviors will be different in the case for ‘mknoise-sigma-from-mean’ below, which is more "realistic" (or Poisson-like). ‘mknoise-sigma-from-mean’ Replace each input element (e.g., pixel in an image) of the input with a random value taken from a Gaussian distribution (for pixel $i$) with mean $\mu_i$ and standard deviation $\sigma_i$. Where, $\sigma_i=\sqrt{I_i+B_i}$ and $\mu_i=I_i+B_i$ and $I_i$ and $B_i$ are respectively the values of the input image, and background in that same pixel. In other words, this can be seen as approximating a Poisson distribution at high mean values (where the Poisson distribution becomes identical to the Gaussian distribution). This operator takes two arguments: 1. the first popped operand (just before the operator) is the _per-pixel_ background value (in units of electron counts). 2. The second popped operand is the dataset that the noise should be added to. To demonstrate the effect of this noise pattern, please run the example commands in the description of ‘mknoise-sigma’. With the first command below, let's add this Poisson-like noise (assuming a background level of 4 electron counts, to be similar to a $\sigma=2$ of the example in ‘mknoise-sigma’). With the second command, let's subtract the raw image from this noise pattern: $ astarithmetic raw.fits 4 mknoise-sigma-from-mean \ --output=sigma-from-mean.fits $ astarithmetic raw.fits sigma-from-mean.fits - -g1 \ --output=diff-sigma-from-mean.fits $ astscript-fits-view diff-sigma.fits \ diff-sigma-from-mean.fits You clearly see how the noise in the center of the Sérsic profile is much stronger than the outer parts. As described, above, this is behavior we would expect in a "real" observation: the regions with stronger signal, also have stronger noise as defined through the Poisson distribution (https://en.wikipedia.org/wiki/Poisson_distribution)! The reason we described this operator as "Poisson-like" is that, it has some shortcomings as opposed to the ‘mknoise-poisson’ operator (that is described below): • For low mean values (less than 3 for example), this will produce a symmetric Gaussian distribution, while the Poisson distribution will not be symmetric. • The random values from this distribution are floating point (unlike the Poisson distribution that produces integers. • The random values can be negative (which is not possible in a Poisson distribution). Therefore to simulate photon-starved images (for example UV or X-ray data), the ‘mknoise-poisson’ operator should always be used, not this one. However, in optical (or redder bands) data, the background is very bright (much brighter than 10 counts for example). In such cases (as the mean increases), the Poisson distributions becomes identical to the Gaussian distribution. Furthermore, processed co-add/stacked images are no longer integers, but floating points with the Sky-level already subtracted (see *note Sky value::). Therefore if you are trying to simulate a processed, photon-rich dataset, you can safely use this operator. Recall that the background values reported by observatories (for example, to define dark or gray nights), or in papers, is usually reported in units of magnitudes per arcseconds square. You need to do the conversion to counts per pixel manually. The conversion of magnitudes to counts is described below. For converting arcseconds squared to number of pixels, you can use the ‘--pixelscale’ option of *note Fits::. For example, ‘astfits image.fits --pixelscale’. Except for the noise-model, this operator is very similar to ‘mknoise-sigma’ and the examples there apply here too. The main difference with ‘mknoise-sigma’ is that in a Poisson distribution the scatter/sigma will depend on each element's value. For example, let's assume you have made a mock image called ‘mock.fits’ with *note MakeProfiles:: and it is assumed zero point is 22.5 (for more on the zero point, see *note Brightness flux magnitude::). Let's assume the background level for the Poisson noise has a value of 19 magnitudes. You can first use the ‘mag-to-counts’ operator to convert this background magnitude into counts, then feed the background value in counts to ‘mknoise-sigma-from-mean’ operator: $ astarithmetic mock.fits 19 22.5 mag-to-counts \ mknoise-sigma-from-mean Try changing the background value from 19 to 10 to see the effect! Recall that the tutorial *note Sufi simulates a detection:: shows how you can use MakeProfiles to build mock images. ‘mknoise-poisson’ Replace every pixel of the input with a random integer taken from a Poisson distribution with the mean value of that input pixel. Similar to ‘mknoise-sigma-from-mean’, it takes two operands: 1. The first popped operand (just before the operator) is the per-pixel background value (in units of electron counts). 2. The second popped operand is the dataset that the noise should be added to. To demonstrate this noise pattern, let's use ‘mknoise-poisson’ in the example of the description of ‘mknoise-sigma-from-mean’ with the first command below. The second command below will show you the two images side-by-side, you will notice that the Poisson distribution's un-detected regions are slightly darker (this is because of the skewness of the Poisson distribution). Finally, with the last two commands, you can see the histograms of the two distributions: $ astarithmetic raw.fits 4 mknoise-poisson \ --output=poisson.fits $ astscript-fits-view sigma-from-mean.fits poisson.fits $ aststatistics sigma-from-mean.fits --lessthan=10 ------- Histogram: | *** | ****** | ********** | *********** | ************** | **************** | ****************** | ********************** | ************************** | ********************************** * |* ********************************************************** |------------------------------------------------------------ $ aststatistics poisson.fits --lessthan=10 ------- Histogram: | * * | * * | * * * | * * * * | * * * * * | * * * * * | * * * * * * * | * * * * * * * | * * * * * * * * | * * * * * * * * | * * * * * * * * |------------------------------------------------------------ The extra skewness in the Poisson distribution, and the fact that it only returns integers is therefore clear with the commands above. The comparison was further made above in the description of ‘mknoise-sigma-from-mean’. In summary, you should prefer the Poisson distribution when you are simulating the following scenarios: • A photon-starved image (as in UV or X-ray). • A raw exposure of a photon-rich image (which may be photon-rich, but always integers). ‘mknoise-uniform’ Add uniform noise to each element of the input dataset. This operator takes two arguments: the top/first popped operand is the width of the interval, the second popped operand is the dataset that the noise should be added to (each element will be the center of the interval). The returned random values may happen to be the minimum interval value, but will never be the maximum. Except for the noise-model, this operator behaves very similar to ‘mknoise-sigma’, see the explanation there for more. For example, with the command below, a random value will be selected between 10 to 14 (centered on 12, which is the only input data element, with a total width of 4). echo 12 | asttable -c'arith $1 4 mknoise-uniform' Similar to the example in ‘mknoise-sigma’, you can pipe the output of ‘echo’ to ‘awk’ before passing it to ‘asttable’ to generate a full column of uniformly selected values within the same interval. ‘random-from-hist-raw’ Generate random values from a custom distribution (defined by a histogram). The output will have a double-precision floating point type (see *note Numeric data types::). This operator takes three operands: • The first popped operand (nearest to the operator) is the histogram values. The histogram is a 1-dimensional dataset (a table column) and contains the probability of obtaining a certain interval of values. The histogram does not have to be normalized: the GNU Scientific Library (or GSL, which is used by Gnuastro for this operator), will normalize it internally. The value of each bin (whose probability is given in the histogram) is given in the second popped operand. Therefore these two operands have to have the same number of rows. • The second popped operand is the bin value (mostly the bin center, but it can be anything). The probability of each bin is defined in the histogram operand (first popped operand). The bins can have any width (do not have to be evenly spaced), and any order. Just make sure that the same row in the bins column corresponds to the same row in the histogram: the number of rows in the bins and histogram must be equal. • The third popped operand is the dataset that the random values should be written over. Effectively only its size will be used by this operator (all values will be over-written as a double-precision floating point number). The first two operands have to be single-dimensional (a table column) and have the same number of rows, but the last popped operand can have any number of dimensions. You can use the ‘load-col-’ operator to load the two bins and histogram columns from an external file (see *note Loading external columns::). For example, in the command below, we first construct a fake histogram to represent a $y=x^2$ distribution with AWK. We aim to distribute random values from this distribution in a $100\times100$ image. Therefore, we use the ‘makenew’ operator to construct an empty image of that size, use the ‘load-col-’ operator to load the histogram columns into Arithmetic and put the output in ‘random.fits’. Finally we visually inspect ‘random.fits’ with DS9 and also have a look at its pixel distribution with ‘aststatistics’. $ echo "" | awk '{for(i=1;i<5;++i) print i, i*i}' \ > histogram.txt $ cat histogram.txt 1 1 2 4 3 9 4 16 $ astarithmetic 100 100 2 makenew \ load-col-1-from-histogram.txt \ load-col-2-from-histogram.txt \ random-from-hist-raw \ --output=random.fits $ astscript-fits-view random.fits $ aststatistics random.fits --asciihist --numasciibins=50 | * | * | * | * | * * | * * | * * | * * * | * * * |* * * * |* * * * |-------------------------------------------------- As you see, the 10000 pixels in the image only have values 1, 2, 3 or 4 (which were the values in the bins column of ‘histogram.txt’), and the number of times each of these values occurs follows the $y=x^2$ distribution. Generally, any value given in the bins column will be used for the final output values. For example, in the command below (for generating a histogram from an analytical function), we are adding the bins by 20 (while keeping the same probability distribution of $y=x^2$). If you re-run the Arithmetic command above after this, you will notice that the pixels values are now one of the following 21, 22, 23 or 24 (instead of 1, 2, 3, or 4). But the shape of the histogram of the resulting random distribution will be unchanged. $ echo "" | awk '{for(i=1;i<5;++i) print 20+i, i*i}' \ > histogram.txt If you do not want the outputs to have exactly the value of the bin identifier, but be a randomly selected value from a uniform distribution within the bin, you should use ‘random-from-hist’ (see below). As mentioned above, the output will have a double-precision floating point type (see *note Numeric data types::). Therefore, by default each element of the output will consume 8 bytes (64-bits) of storage. This is usually far more than the statistical error/precision of your data (and just results in wasted storage in your file system, or wasted RAM when a program that uses the data is being run, and a slower running time of the program). It is therefore recommended to use a type-conversion operator after this operator to put the output in the smallest type that can be used to safely store your data without wasting storage, RAM or time. For the list of type conversion operators, see *note Numerical type conversion operators::. Recall that you already know the values returned by this operator (they are one of the values in the bins column). For example, in the example above, the whole image only has values 1, 2, 3 or 4. Since they are always positive and are below 255, we can safely place them in an unsigned 8-bit integer (see *note Numeric data types::) with the command below (note the ‘uint8’ after the operator name, and that we are using a different name for the output). After building the new image, let's have a look at the sizes of the two images with ‘ls -l’: $ astarithmetic 100 100 2 makenew \ load-col-1-from-histogram.txt \ load-col-2-from-histogram.txt \ random-from-hist-raw uint8 \ --output=random-u8.fits $ ls -lh random.fits random-u8.fits -rw-r--r-- 1 name name 85K Jan 01 13:40 random.fits -rw-r--r-- 1 name name 17K Jan 01 13:45 random-u8.fits As you see, when using a suitable data type, we can shrink the size of the file significantly without loosing any information (from 85 kilobytes to 17 kilobytes). This difference can be felt much better for larger (real-world) datasets, so be sure to always set the output data type after calling this operator. ‘random-from-hist’ Similar to ‘random-from-hist-raw’, but do not return the exact bin value, instead return a random value from a uniform distribution within each bin. Therefore the following limitations have to be taken into account (compared to ‘random-from-hist-raw’): • The number associated with each bin (in the bin column) should be its center. • The bins have to be in descending order (so the second row in the bin column is larger than the first). • The bin widths (distance from one bin to another) have to be fixed. For a demonstration, let's replace ‘random-from-hist-raw’ with ‘random-from-hist’ in the example of the description of ‘random-from-hist-raw’. Note how we are manually converting the output of this operator into single-precision floating point (32-bit, since the default 64-bit precision is statistically meaningless in this scenario and we do not want to waste storage, memory and running time): $ echo "" | awk '{for(i=1;i<5;++i) print i, i*i}' \ > histogram.txt $ astarithmetic 100 100 2 makenew \ load-col-1-from-histogram.txt \ load-col-2-from-histogram.txt \ random-from-hist float32 \ --output=random.fits $ aststatistics random.fits --asciihist --numasciibins=50 | * | *** ******** | ************ | ************* | * * ************* | * *********************** | ************************* | ************************* | ************************************* |********* * ************************************** |************************************************** |-------------------------------------------------- You can see that the pixels of ‘histogram.fits’ are no longer just 1, 2, 3 or 4. Instead, the values within each bin are selected from a uniform distribution covering that bin. This creates the step-like feature in the histogram of the output. Of course, this extra uniform random number generation can make your program slower so be sure to check if it is worth it. In particular, one way to avoid this (and use ‘random-from-hist-raw’ with a more contiguous-looking output distribution) is to simply use a higher-resolution histogram (assuming it is possible: you have a sufficient number of data points, or you have an analytical expression that you can sample at smaller bin sizes). To better demonstrate this operator and its practical usage in everyday research, let's look at another example: Assume you want to get 100 random star magnitudes that follow the real-world Gaia Data release 3 magnitude distribution within a radius of 2 degrees around the (RA,Dec) coordinate of (1.23,4.56). Let's further assume that you want to distribute them uniformly over an image of size 1000 by 1000 pixels. So your desired output table should have three columns, the first two are pixel positions of each star, and the third is the magnitude. First, we need to query the Gaia database and ask for all the magnitudes in this region of the sky. We know that Gaia is not complete for stars fainter than the 20th magnitude, so we will use the ‘--range’ option and only ask for those stars that are brighter than magnitude 20. $ astquery gaia --dataset=dr3 --center=1.23,3.45 --radius=2 \ --column=phot_g_mean_mag --output=gaia.fits \ --range=phot_g_mean_mag,-inf,20 We now have more than 25000 magnitudes in ‘gaia.fits’! To get a more accurate random sampling of our stars, let's construct a histogram with 500 bins, and generate our three desired randomly selected columns: $ aststatistics gaia.fits --histogram --numbins=500 \ --output=gaia-hist.fits $ asttable gaia-hist.fits -i $ echo 1000 \ | awk '{for(i=0;i<100;++i) print $1/2}' \ | asttable -c'arith $1 500 mknoise-uniform' \ -c'arith $1 500 mknoise-uniform' \ -c'arith $1 \ load-col-1-from-gaia-hist.fits-hdu-1 \ load-col-2-from-gaia-hist.fits-hdu-1 \ random-from-hist float32' These columns can easily be placed in the format for *note MakeProfiles:: to be inserted into an image automatically. ---------- Footnotes ---------- (1) We have defined Task 15971 (https://savannah.gnu.org/task/?15971) in Gnuastro's project management system to address this. If you need this feature please send us an email at ‘bug-gnuastro@gnu.org’ (to motivate us in its implementation).  File: gnuastro.info, Node: Coordinate and border operators, Next: Loading external columns, Prev: Random number generators, Up: Arithmetic operators 6.2.4.17 Coordinate and border operators ........................................ The operators here help you in defining or manipulating coordinates. For examples to define the "box" (a rectangular region) that surrounds an ellipse or to rotate a point around a reference point. ‘rotate-coord’ Rotate the given point (horizontal and vertical coordinates given in 5th and 4th popped operands) around a center/reference point (coordinates given in the 3rd and 2nd popped operands) by a given angle (first popped operand). For example, if you want to trace the outer edge of a circle centered on (1.23,45.6) with a radius of 0.78, you can use this operator like below. The logic is that we assume a single point that is located on 0.78 units after the center on the horizontal axis (the point's vertical axis position is the same as the center). We then rotate this point in each row by one degree to build the circle's circumference. $ cx=1.23 $ cy=45.6 $ rad=0.78 $ seq 0 360 \ | awk '{print '$rad'+'$cx', '$cy', $1}' \ | asttable -c'arith $1 $2 '$cx' '$cy' $3 rotate-coord' \ --output=circle.fits ## Within TOPCAT, after opening "Plane Plot", within "Axes" select ## "Aspect lock" so the steps in both axis is the same. $ astscript-fits-view circle.fits If you want the points to create a circle on the celestial sphere, you can use the ‘eq-j2000-from-flat’ operator after this one (see *note Column arithmetic::): $ seq 0 360 \ | awk '{print '$rad'+'$cx', '$cy', $1}' \ | asttable -c'arith $1 $2 '$cx' '$cy' $3 rotate-coord \ '$cx' '$cy' TAN eq-j2000-from-flat' \ --output=circle-on-sky.fits When you open TOPCAT, if you open the "Plane Plot", you will see an ellipse. However, if you open "Sky Plot" (from the "Graphics" menu), and select the first and second columns respectively, you will see a circle. The center coordinates and angle can be fixed for all the rows (as in the example above) or be different for every row. Recall that if you want these to change on every row, you should give the column name (or number followed by ‘$’) for these operands instead of the constant number above. ‘box-around-ellipse’ Return the width (along horizontal) and height (along vertical) of a box that encompasses an ellipse with the same center point. The top-popped operand is assumed to be the position angle (angle from the horizontal axis) in _degrees_. The second and third popped operands are the minor and major radii of the ellipse respectively. This operator outputs two operands on the general stack. The first one is the width and the second (which will be the top one when this operator finishes) is the height. If the value to the second popped operand (minor axis) is larger than the third (major axis), a NaN value will be written for both the width and height of that element and a warning will be printed (the warning can be disabled with the ‘--quiet’ option). As an example, if your ellipse has a major axis radius of 10 units, a minor axis radius of 4 units and a position angle of 20 degrees, you can estimate the bounding box with this command: $ echo "10 4 20" \ | asttable -c'arith $1 $2 $3 box-around-ellipse' Alternatively if your three values are in separate FITS arrays/images, you can use the command below to have the width and height in similarly sized fits arrays. In this example ‘a.fits’ and ‘b.fits’ are respectively the major and minor axis lengths and ‘pa.fits’ is the position angle (in degrees). Also, in all three, we assume the first extension is used. After it is done, the height of the box will be put in ‘h.fits’ and the width will be in ‘w.fits’. Just note that because this operator has two output datasets, you need to first write the height (top output operand) into a file and free it with the ‘tofilefree-’ operator, then write the width in the file given to ‘--output’. $ astarithmetic a.fits b.fits pa.fits box-around-ellipse \ tofilefree-h.fits -ow.fits -g1 Finally, if you need to treat the width and height separately for further processing, you can call the ‘set-’ operator two times afterwards like below. Recall that the ‘set-’ operator will pop the top operand, and put it in memory with a certain name, bringing the next operand to the top of the stack. For example, let's assume ‘catalog.fits’ has at least three columns ‘MAJOR’, ‘MINOR’ and ‘PA’ which specify the major axis, minor axis and position angle respectively. But you want the final width and height in 32-bit floating point numbers (not the default 64-bit, which may be too much precision in many scenarios). You can do this with the command below (note you can also break lines with <\>, within the single-quote environment) $ asttable catalog.fits \ -c'arith MAJOR MINOR PA box-around-ellipse \ set-height set-width \ width float32 height float32' ‘box-vertices-on-sphere’ Convert a box center and width to the coordinates of the vertices of the box on a left-hand spherical coordinate system. In a left-handed spherical coordinate system, the longitude increases towards the left while north is up (as in the RA and Dec direction of the equatorial coordinate system used in astronomy). This operator therefore takes four input operands (the RA and Dec of the box's center, as well as the width of the box in each direction). After it is complete, this operator places 8 operands on the stack which contain the RA and Dec of the four vertices of the box in the following anti-clockwise order: 1. Bottom-left vertice Longitude (RA) 2. Bottom-left vertice Latitude (Dec) 3. Bottom-right vertice Longitude (RA) 4. Bottom-right vertice Latitude (Dec) 5. Top-right vertice Longitude (RA) 6. Top-right vertice Latitude (Dec) 7. Top-left vertice Longitude (RA) 8. Top-left vertice Latitude (Dec) For example, with the command below, we will retrieve the vertice coordinates of a rectangle around a point with RA=20 and Dec=0 (on the equator). The rectangle will have a 1 degree edge along the RA direction and a 2 degree edge along the declination. In this example, we are using the ‘-Afixed -B2’ only for demonstration purposes here due to the round numbers! In general, it is best to write your outputs to a binary FITS table to preserve the full precision (see *note Printing floating point numbers::). $ echo "20 0 1 2" \ | asttable -Afixed -B2 \ -c'arith $1 $2 $3 $4 box-vertices-on-sphere' 20.50 -1.00 19.50 -1.00 19.50 1.00 20.50 1.00 We see that the bottom-left vertice is at (RA,Dec) of $(20.50,-1.0)$ and the top-right vertice is at $(19.50,1.00)$. These could have easily been done by manually adding and subtracting! But you will see that the complexity arises at higher/lower declinations. For example, with the command below, let's see how vertice coordinates of the same box, but after moving its center to (RA,Dec) of (20,85): $ echo "20 85 1 2" \ | asttable -Afixed -B2 \ -c'arith $1 $2 $3 $4 box-vertices-on-sphere' 24.78 84.00 15.22 84.00 12.83 86.00 27.17 86.00 Even though, we didn't change the central RA (20) or the size of the box along the RA (1 degree), the RA of the bottom-left vertice is now at 24.78; almost 5 degrees away! This occurs because of the spherical coordinate system, we measure the longitude (e.g., RA) with the following way: 1. Draw a meridian that passes your point. The meridian is half of a great-circle (https://en.wikipedia.org/wiki/Great_circle) (which has a diameter that is equal to the sphere's diameter) passes both poles. 2. Find the intersection of that meridian with the equator. 3. The distance of the intersection and the reference point (along the equator) defines the longitude angle. As you get more distant from the equator (declination becomes non-zero), any change along the RA (towards the east; 1 degree in the example above) will on longer be on a great circle, but along a "small circle (https://en.wikipedia.org/wiki/Circle_of_a_sphere)". On a small circle that is defined by the fixed declination $\delta$, the distance of two points is closer than the distances of their projection on the equator (as described in the definition of longitude above). It is smaller by a factor of $\cos({\delta})$. Therefore, an angular change (let's call it $\Delta_{lon}$) along the small circle defined by the fixed declination of $\delta$ corresponds to $\Delta_{lon}/\cos(\delta)$ on the equator.  File: gnuastro.info, Node: Loading external columns, Next: Size and position operators, Prev: Coordinate and border operators, Up: Arithmetic operators 6.2.4.18 Loading external columns ................................. In the Arithmetic program, you can always load new dataset by simply giving their name. However, they can only be images, not a column. In the Table program, you can load columns in *note Column arithmetic::, but it has to be columns within the same table (and thus the same number of rows). However, in some situations, it is necessary to use certain columns of a table in the Arithmetic program, or columns of different rows (from the main input) in Table. ‘load-col-%-from-%’ ‘load-col-%-from-%-hdu-%’ Load the requested column (first ‘%’) from the requested file (second ‘%’). If the file is a FITS file, it is also necessary to specify a HDU using the second form (where the HDU identifier is the third ‘%’. For example, ‘load-col-MAG-from-catalog.fits-hdu-1’ will load the ‘MAG’ column from HDU 1 of ‘catalog.fits’. For example, let's assume you have the following two tables, and you would like to add the first column of the first with the second: $ asttable tab-1.fits 1 43.23 2 21.91 3 71.28 4 18.10 $ cat tab-2.txt 5 6 7 8 $ asttable tab-1.txt -c'arith $1 load-col-1-from-tab-2.txt +' 6 8 10 12  File: gnuastro.info, Node: Size and position operators, Next: Building new dataset and stack management, Prev: Loading external columns, Up: Arithmetic operators 6.2.4.19 Size and position operators .................................... With the operators below you can get metadata about the top dataset on the stack. ‘index’ Add a new operand to the stack with an integer type and the same size (in all dimensions) as top operand on the stack (before it was called; it is not popped!). The first pixel in the returned operand is zero, and every later pixel's value is incremented by one. It is important to remember that the top operand is not popped by this operand, so it remains on the stack. After this operand is finished, it adds a new operand to the stack. To pop the previous operand, you can use the ‘indexonly’ operator. The data type of the output is always an unsigned integer, and its width is determined from the number of pixels/rows in the top operand. For example if there are only 108 rows in a table, the returned column will have an unsigned 8-bit integer type (that can keep 256 separate values). But if the top operand is a $1000\times1000=10^6$ pixel image, the output will be a 32-bit unsigned integer. For the various types of integers, see *note Numeric data types::. To see the index image along with the actual image, you can use the ‘--writeall’ operator to have a multi-HDU output (without ‘--writeall’, Arithmetic will complain if more than one operand is left at the end). After DS9 opens with the second command, flip between the two extensions. $ astarithmetic image.fits index --writeall $ astscript-fits-view image_arith.fits Below is a review some usage examples of this operator: Image: masking margins With the command below, we will be masking all pixels that are 20 pixels away from the edges of the image (on the margin). Here is a description of the command below (for the basics of Arithmetic's notation, see *note Reverse polish notation::): • The ‘index’ operator just adds a new dataset on the stack: unlike almost all other operators in Arithmetic, ‘index’ doesn't remove its input dataset from the stack (use ‘indexonly’ for the "normal" behavior). This is because ‘index’ returns the pixel metadata not data. As a result, after ‘index’, we have two operands on the stack: the input image and the index image. • With the ‘set-i’ operator, the top operand (the image containing the index of each pixel) is popped from the stack and associated to the name ‘i’. Therefore after this, the stack only has the input image. For more on the ‘set-’ operator, see *note Operand storage in memory or a file::. • We need three values from the commands before Arithmetic (for the width and height of the image and the size of the margin). To make the rest of the command easier to read/use, we'll define them in Arithmetic as three named operators (respectively called ‘w’, ‘h’ and ‘m’). All three are integers that will have a positive value lower than $2^{16}=65536$ (for a "normal" image!). Therefore, we will store them as 16-bit unsigned integers with the ‘uint16’ operator (this will help optimal processing in later steps). For more the type changing operators, see *note Numerical type conversion operators::. • Using the modulo ‘%’ and division (‘/’) operators on the index image and the width, we extract the horizontal (X) and vertical (Y) positions of each pixel in separately named operands called ‘X’ and ‘Y’. The maximum value in these two will also fit within an unsigned 16-bit integer, so we'll also store these in that type. • For the horizontal (X) dimension, we select pixels that are less than the margin (‘X m lt’) and those that are more than the width subtracted by the margin (‘X w m - gt’). • The output of the ‘lt’ and ‘gt’ conditional operators above is a binary (0 or 1 valued) image. We therefore merge them into one binary image using the ‘or’ operator. For more, see *note Conditional operators::. • We repeat the two steps above for the vertical (Y) dimension. • Once the images containing the to-be-masked pixels in each dimension are made, we combine them into one binary image with a final ‘or’ operator. At this point, the stack only has two operands: 1) the input image and 2) the binary image that has a value of 1 for all pixels whose value should be changed. • A single-element operand (‘nan’) is added on the stack. • Using the ‘where’ operator, we replace all the pixels that are non-zero in the second operand (on the margins) to the top operand's value (NaN) in the third popped operand (image that was read from ‘image.fits’). For more on the ‘where’ operator, see *note Conditional operators::. $ margin=20 $ width=$(astfits image.fits --keyvalue=NAXIS1 -q) $ height=$(astfits image.fits --keyvalue=NAXIS2 -q) $ astarithmetic image.fits index set-i \ $width uint16 set-w \ $height uint16 set-h \ $margin uint16 set-m \ i w % uint16 set-X \ i w / uint16 set-Y \ X m lt X w m - gt or \ Y m lt Y h m - gt or \ or nan where Image: Masking regions outside a circle As another example for usage on an image, in the command below we are using ‘index’ to define an image where each pixel contains the distance to the pixel with X,Y coordinates of 345,250. We are then using that distance image to only keep the pixels that are within a 50 pixel radius of that point. The basic concept behind this process is very similar to the previous example, with a different mathematical definition for pixels to mask. The major difference is that we want the distance to a pixel within the image, we need to have negative values and the center coordinates can be in a sub-pixel positions. The best numeric datatype for intermediate steps is therefore floating point. 64-bit floating point can have a precision of up to 15 digits after the decimal point. This is far too much for what we need here: in astronomical imaging, the PSF is usually on the scale of 1 or more pixels (see *note Sampling theorem::). So even reaching a precision of one millionth of a pixel (offered by 32-bit floating points) is beyond our wildest dreams (see *note Numeric data types::). We will also define the horizontal (X) and vertical (Y) operands after shifting to the desired central point. $ radius=50 $ centerx=345.2 $ centery=250.3 $ width=$(astfits image.fits --keyvalue=NAXIS1 -q) $ astarithmetic image.fits index set-i \ $width uint16 set-w \ $radius float32 set-r \ $centerx float32 set-cx \ $centery float32 set-cy \ i w % cx - set-X \ i w / cy - set-Y \ X X x Y Y x + sqrt r gt \ nan where --output=arith-masked.fits *Optimal data types have significant benefits:* choosing the minimum required datatype for your operation is very important to avoid wasting your CPU and RAM. Don't simply default to 64-bit floating points for everything! Integer operations are much faster than floating points, and within floating point types, 32-bit is faster and will use half the RAM/storage! For more, see *note Numeric data types::. The example above was just a demo for usage of the ‘index’ operator and some important concepts. But it is not the easiest way to achieve the desired result above! An easier way for the scenario above (to keep a circle within an image and set everything else to NaN) is to use MakeProfiles in combination with Arithmetic, like below: $ radius=50 $ centerx=345.2 $ centery=250.3 $ echo "1 $centerx $centery 5 $radius 0 0 1 1 1" \ | astmkprof --background=image.fits \ --mforflatpix --clearcanvas \ -omkprof-mask.fits --type=uint8 $ astarithmetic image.fits mkprof-mask.fits not \ nan where -g1 -omkprof-masked.fits Tables: adding new columns with row index Within Table, you can use this operator to add an index column like below (see the ‘counter’ operator for starting the count from one). ## The index will be the second column. $ asttable table.fits -c'arith $1 index' ## The index will be the first column $ asttable table.fits -c'arith $1 index swap' ‘indexonly’ Similar to ‘index’, except that the top operand is popped from the stack and is no longer available afterwards. ‘counter’ Similar to ‘index’, except that counting starts from one (not zero as in ‘index’). Counting from one is usually necessary when adding row counters in tables, like below: $ asttable table.fits -c'arith $1 counter swap' ‘counteronly’ Similar to ‘counter’, but the top operand before it is popped (no longer available). ‘size’ Size of the dataset along a given FITS (or FORTRAN) dimension (counting from 1). The desired dimension should be the first popped operand and the dataset must be the second popped operand. The output will be a single unsigned integer (dimensions cannot be negative). For example, the following command will produce the size of the first extension/HDU (the default HDU) of ‘a.fits’ along the second FITS axis. $ astarithmetic a.fits 2 size *Not optimal:* This operator reads the top element on the stack and then simply reads its size along the given dimension. On a small dataset this won't consume much RAM, but if you want to put this in a pipeline or use it on large image, the extra RAM and slow operation can become meaningful. To avoid such issues, you can read the size along the given dimension using the ‘--keyvalue’ option of *note Keyword inspection and manipulation::. For example, in the code below, the X axis position of every pixel is returned: $ width=$(astfits image.fits --keyvalue=NAXIS1 -q) $ astarithmetic image.fits indexonly $width % -opix-x.fits  File: gnuastro.info, Node: Building new dataset and stack management, Next: Operand storage in memory or a file, Prev: Size and position operators, Up: Arithmetic operators 6.2.4.20 Building new dataset and stack management .................................................. With the operator here, you can create a new dataset from scratch to start certain operations without any input data. ‘makenew’ Create a new dataset that only has zero values. The number of dimensions is read as the first popped operand and the number of elements along each dimension are the next popped operand (in reverse of the popping order). The type of the new dataset is an unsigned 8-bit integer and all pixel values have a value of zero. For example, if you want to create a new 100 by 200 pixel image, you can run this command: $ astarithmetic 100 200 2 makenew To further extend the example, you can use any of the noise-making operators to add noise to this new dataset (see *note Random number generators::), like the command below: $ astarithmetic 100 200 2 makenew 5 mknoise-sigma ‘constant’ Return an operand that will have a constant value (first popped operand) in all its elements. The number of elements is read from the second popped operand. The second popped operand is only used for its number of elements, its numeric data type, or its values are fully ignored and it is later freed. Here is one useful scenario for this operator in tables: you want to merge the objects/rows of some catalogs together, but you first want to give each source catalog a label/counter that distinguishes between the source of each rows in the merged/final catalog (using *note Invoking asttable::). The steps below show the the usage of this. ## Add label 1 to the RA, Dec, magnitude and magnitude error ## rows of the first catalog. $ asttable cat-1.fits -cRA,DEC,MAG,MAG_ERR \ -c'arith $1 1 constant' --output=tab-1.fits ## Similar to above, but for the second catalog. $ asttable cat-2.fits -cRA,DEC,MAG,MAG_ERR \ -c'arith $1 2 constant' --output=tab-2.fits ## Concatenate (merge/blend) the rows of the two tables into ## one for the 5 columns, but also add a counter for each ## object or row in the final catalog. $ asttable tab-1.fits --catrowfile=tab-2.fits \ -c'arith $1 counteronly' \ -cRA,DEC,MAG,MAG_ERR,5 --output=merged.fits \ --colmetadata=1,ID_MERGED,counter,"Merged ID." \ --colmetadata=6,SOURCE-CAT,counter,"Source ID." ## Add keyword information on each input. It is very important ## to preserve this within the merged catalog. If the tables ## came from public databases (for example on VizieR), give ## their public identifier as the value. $ astfits merged.fits --write=/,"Source catalogs" \ --write=CATSRC1,"I/355/gaiadr3","VizieR ID." \ --write=CATSRC2,"Jane Doe","Name of source." ## Check the metadata in 'merged.fits' and clean the ## temporary files. $ rm tab-1.fits tab-2.fits $ astfits merged.fits -h1 Like most operators, ‘constant’ is not limited to tables, you can also apply it on images. In the example below, we'll use ‘constant’ to set all the pixels of the input image to NaN (which is necessary in scenarios that you need to include in an image in an analysis, but you don't want its pixels to affect the processing): $ astarithmetic image.fits nan constant ‘swap’ Swap the top two operands on the stack. For example the ‘index’ operator doesn't pop with the top operand (the input to ‘index’), it just adds the index image to the stack. In case you want your next operation to be on the input to ‘index’, you can simply call ‘swap’ and continue the operations on that image, while keeping the indexed pixels for later steps. In the example below we are using the ‘--writeall’ option to write the full stack and if you open the outputs you will see that the stack order has changed. ## Index image is written in HDU 1. $ astarithmetic image.fits index --writeall \ --output=ind-first.fits ## image.fits in HDU 1. $ astarithmetic image.fits index swap --writeall \ --output=img-first.fits �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro.info-6�������������������������������������������������������������������0000644�0001750�0001750�00001116656�14557514036�012441� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is gnuastro.info, produced by makeinfo version 7.1 from gnuastro.texi. This book documents version 0.22 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * Match: (gnuastro)Match. Match two separate catalogs. * astmatch: (gnuastro)Invoking astmatch. Options to Match. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Segment: (gnuastro)Segment. Segment detections based on signal structure. * astsegment: (gnuastro)Invoking astsegment. Options to Segment. * Query: (gnuastro)Query. Access remote databases for downloading data. * astquery: (gnuastro)Invoking astquery. Options to Query. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. * astscript: (gnuastro)Installed scripts. Gnuastro's installed scripts. * astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script * astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script * astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script * astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script * astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script * astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script * astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script * astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script * astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script * astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script * astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script END-INFO-DIR-ENTRY  File: gnuastro.info, Node: Operand storage in memory or a file, Prev: Building new dataset and stack management, Up: Arithmetic operators 6.2.4.21 Operand storage in memory or a file ............................................ In your early days of using Gnuastro, to do multiple operations, it is likely that you will simply call Arithmetic (or Table, with column arithmetic) multiple times: feed the output file of the first call to the second call. But as you get more proficient in the reverse polish notation, you will find yourself combining many operations into one call. This greatly speeds up your operation, because instead of writing the dataset to a file in one command, and reading it in the next command, it will just keep the intermediate dataset in memory! But adding more complexity to your operations, can make them much harder to debug, or extend even further. Therefore in this section we have some special operators that behave differently from the rest: they do not touch the contents of the data, only where/how they are stored. They are designed to do complex operations, without necessarily having a complex command. ‘set-AAA’ Set the characters after the dash (‘AAA’ in the case shown here) as a name for the first popped operand on the stack. The named dataset will be freed from memory as soon as it is no longer needed, or if the name is reset to refer to another dataset later in the command. This operator thus enables reusability of a dataset without having to reread it from a file every time it is necessary during a process. When a dataset is necessary more than once, this operator can thus help simplify reading/writing on the command-line (thus avoiding potential bugs), while also speeding up the processing. Like all operators, this operator pops the top operand off of the main processing stack, but unlike other operands, it will not add anything back to the stack immediately. It will keep the popped dataset in memory through a separate list of named datasets (not on the main stack). That list will be used to add/copy any requested dataset to the main processing stack when the name is called. The name to give the popped dataset is part of the operator's name. For example, the ‘set-a’ operator of the command below, gives the name "‘a’" to the contents of ‘image.fits’. This name is then used instead of the actual filename to multiply the dataset by two. $ astarithmetic image.fits set-a a 2 x The name can be any string, but avoid strings ending with standard filename suffixes (for example, ‘.fits’)(1). One example of the usefulness of this operator is in the ‘where’ operator. For example, let's assume you want to mask all pixels larger than ‘5’ in ‘image.fits’ (extension number 1) with a NaN value. Without setting a name for the dataset, you have to read the file two times from memory in a command like this: $ astarithmetic image.fits image.fits 5 gt nan where -g1 But with this operator you can simply give ‘image.fits’ the name ‘i’ and simplify the command above to the more readable one below (which greatly helps when the filename is long): $ astarithmetic image.fits set-i i i 5 gt nan where ‘repeat’ Add N copies of the second popped operand to the stack of operands. N is the first popped operand. For example, let's assume ‘image.fits’ is a $100\times100$ image. The output of the command below will be a 3D datacube of size $100\times100\times20$ voxels (volume-pixels): $ astarithmetic image.fits 20 repeat 20 add-dimension-slow ‘tofile-AAA’ Write the top operand on the operands stack into a file called ‘AAA’ (can be any FITS file name) without changing the operands stack. If you do not need the dataset any more and would like to free it, see the ‘tofilefree’ operator below. By default, any file that is given to this operator is deleted before Arithmetic actually starts working on the input datasets. The deletion can be deactivated with the ‘--dontdelete’ option (as in all Gnuastro programs, see *note Input output options::). If the same FITS file is given to this operator multiple times, it will contain multiple extensions (in the same order that it was called. For example, the operator ‘tofile-check.fits’ will write the top operand to ‘check.fits’. Since it does not modify the operands stack, this operator is very convenient when you want to debug, or understanding, a string of operators and operands given to Arithmetic: simply put ‘tofile-AAA’ anywhere in the process to see what is happening behind the scenes without modifying the overall process. ‘tofilefree-AAA’ Similar to the ‘tofile’ operator, with the only difference that the dataset that is written to a file is popped from the operand stack and freed from memory (cannot be used any more). ---------- Footnotes ---------- (1) A dataset name like ‘a.fits’ (which can be set with ‘set-a.fits’) will cause confusion in the initial parser of Arithmetic. It will assume this name is a FITS file, and if it is used multiple times, Arithmetic will abort, complaining that you have not provided enough HDUs.  File: gnuastro.info, Node: Invoking astarithmetic, Prev: Arithmetic operators, Up: Arithmetic 6.2.5 Invoking Arithmetic ------------------------- Arithmetic will do pixel to pixel arithmetic operations on the individual pixels of input data and/or numbers. For the full list of operators with explanations, please see *note Arithmetic operators::. Any operand that only has a single element (number, or single pixel FITS image) will be read as a number, the rest of the inputs must have the same dimensions. The general template is: $ astarithmetic [OPTION...] ASTRdata1 [ASTRdata2] OPERATOR ... One line examples: ## Calculate (10.32-3.84)^2.7 quietly (will just print 155.329): $ astarithmetic -q 10.32 3.84 - 2.7 pow ## Inverse the input image (1/pixel): $ astarithmetic 1 image.fits / --out=inverse.fits ## Multiply each pixel in image by -1: $ astarithmetic image.fits -1 x --out=negative.fits ## Subtract extension 4 from extension 1 (counting from zero): $ astarithmetic image.fits image.fits - --out=skysub.fits \ --hdu=1 --hdu=4 ## Add two images, then divide them by 2 (2 is read as floating point): ## Note that without the '.0', the '2' will be read/used as an integer. $ astarithmetic image1.fits image2.fits + 2.0 / --out=average.fits ## Use Arithmetic's average operator: $ astarithmetic image1.fits image2.fits average --out=average.fits ## Calculate the median of three images in three separate extensions: $ astarithmetic img1.fits img2.fits img3.fits median \ -h0 -h1 -h2 --out=median.fits Arithmetic's notation for giving operands to operators is fully described in *note Reverse polish notation::. The output dataset is last remaining operand on the stack. When the output dataset a single number, and ‘--output’ is not called, it will be printed on the standard output (command-line). When the output is an array, it will be stored as a file. The name of the final file can be specified with the ‘--output’ option, but if it is not given (and the output dataset has more than one element), Arithmetic will use "automatic output" on the name of the first FITS image encountered to generate an output file name, see *note Automatic output::. By default, if the output file already exists, it will be deleted before Arithmetic starts operation. However, this can be disabled with the ‘--dontdelete’ option (see below). At any point during Arithmetic's operation, you can also write the top operand on the stack to a file, using the ‘tofile’ or ‘tofilefree’ operators, see *note Arithmetic operators::. By default, the world coordinate system (WCS) information of the output dataset will be taken from the first input image (that contains a WCS) on the command-line. This can be modified with the ‘--wcsfile’ and ‘--wcshdu’ options described below. When the ‘--quiet’ option is not given, the name and extension of the dataset used for the output's WCS is printed on the command-line. Through operators like those starting with ‘collapse-’, the dimensionality of the inputs may not be the same as the outputs. By default, when the output is 1D, Arithmetic will write it as a table, not an image/array. The format of the output table (plain text or FITS ASCII or binary) can be set with the ‘--tableformat’ option, see *note Input output options::). You can disable this feature (write 1D arrays as FITS images/arrays, or to the standard output) with the ‘--onedasimage’ or ‘--onedonstdout’ options. See *note Common options:: for a review of the options in all Gnuastro programs. Arithmetic just redefines the ‘--hdu’ and ‘--dontdelete’ options as explained below. ‘--arguments=STR’ A plain-text file containing the command-line arguments that will be used by Arithmetic. This option is only relevant when no arguments are given on the command-line: if any arguments are given, this option is ignored. This is necessary when the set of of input files and operators (arguments; see *note Arguments and options::) are very long (thousands of long file names for example; usually generated within large pipelines). Such long arguments will cause the shell to abort with an ‘Argument list too long’ error. In such cases, you can put the list into a plain-text file and use this option like below (assuming you want to stack all the files in a certain directory with the ‘mean’ operator; see *note Stacking operators::): $ counter=0; $ for f in $(pwd)/*.fits; do \ echo $f; counter=$((counter+1)); \ done > arguments.txt; \ echo "$counter mean" >> arguments.txt $ astarithmetic --arguments=list.txt -g1 ‘-h INT/STR’ ‘--hdu INT/STR’ The header data unit of the input FITS images, see *note Input output options::. Unlike most options in Gnuastro (which will ultimately only have one value for this option), Arithmetic allows ‘--hdu’ to be called multiple times and the value of each invocation will be stored separately (for the unlimited number of input images you would like to use). Recall that for other programs this (common) option only takes a single value. So in other programs, if you specify it multiple times on the command-line, only the last value will be used and in the configuration files, it will be ignored if it already has a value. The order of the values to ‘--hdu’ has to be in the same order as input FITS images. Options are first read from the command-line (from left to right), then top-down in each configuration file, see *note Configuration file precedence::. If the number of HDUs is less than the number of input images, Arithmetic will abort and notify you. However, if there are more HDUs than FITS images, there is no problem: they will be used in the given order (every time a FITS image comes up on the stack) and the extra HDUs will be ignored in the end. So there is no problem with having extra HDUs in the configuration files and by default several HDUs with a value of ‘0’ are kept in the system-wide configuration file when you install Gnuastro. ‘-g INT/STR’ ‘--globalhdu INT/STR’ Use the value to this option as the HDU of all input FITS files. This option is very convenient when you have many input files and the dataset of interest is in the same HDU of all the files. When this option is called, any values given to the ‘--hdu’ option (explained above) are ignored and will not be used. ‘-w FITS’ ‘--wcsfile FITS’ FITS Filename containing the WCS structure that must be written to the output. The HDU/extension should be specified with ‘--wcshdu’. When this option is used, the respective WCS will be read before any processing is done on the command-line and directly used in the final output. If the given file does not have any WCS, then the default WCS (first file on the command-line with WCS) will be used in the output. This option will mostly be used when the default file (first of the set of inputs) is not the one containing your desired WCS. But with this option, you can also use Arithmetic to rewrite/change the WCS of an existing FITS dataset from another file: $ astarithmetic data.fits --wcsfile=other.fits -ofinal.fits ‘-W STR’ ‘--wcshdu STR’ HDU/extension to read the WCS within the file given to ‘--wcsfile’. For more, see the description of ‘--wcsfile’. ‘--envseed’ Use the environment for the random number generator settings in operators that need them (for example, ‘mknoise-sigma’). This is very important for obtaining reproducible results, for more see *note Generating random numbers::. ‘-n STR’ ‘--metaname=STR’ Metadata (name) of the output dataset. For a FITS image or table, the string given to this option is written in the ‘EXTNAME’ or ‘TTYPE1’ keyword (respectively). If this keyword is present in a FITS extension, it will be printed in the table output of a command like ‘astfits image.fits’ (for images) or ‘asttable table.fits -i’ (for tables). This metadata can be very helpful for yourself in the future (when you have forgotten the details), so it is recommended to use this option for files that should be archived or shared with colleagues. ‘-u STR’ ‘--metaunit=STR’ Metadata (units) of the output dataset. For a FITS image or table, the string given to this option is written in the ‘BUNIT’ or ‘TTYPE1’ keyword respectively. In the case of tables, recall that the Arithmetic program only outputs a single column, you should use column arithmetic in Table for more than one column (see *note Column arithmetic::). For more on the importance of metadata, see the description of ‘--metaname’. ‘-c STR’ ‘--metacomment=STR’ Metadata (comments) of the output dataset. For a FITS image or table, the string given to this option is written in the ‘COMMENT’ or ‘TCOMM1’ keyword respectively. In the case of tables, recall that the Arithmetic program only outputs a single column, you should use column arithmetic in Table for more than one column (see *note Column arithmetic::). For more on the importance of metadata, see the description of ‘--metaname’. ‘-O’ ‘--onedasimage’ Write final dataset as a FITS image/array even if it has a single dimension. By default, if the output is 1D, it will be written as a table, see above. If the output has more than one dimension, this option is redundant. ‘-s’ ‘--onedonstdout’ Write final dataset (only when it is 1D) to standard output, not as a file. By default 1D datasets will be written as a table, see above. If the output has more than one dimension, this option is redundant. ‘-D’ ‘--dontdelete’ Do not delete the output file, or files given to the ‘tofile’ or ‘tofilefree’ operators, if they already exist. Instead append the desired datasets to the extensions that already exist in the respective file. Note it does not matter if the final output file name is given with the ‘--output’ option, or determined automatically. Arithmetic treats this option differently from its default operation in other Gnuastro programs (see *note Input output options::). If the output file exists, when other Gnuastro programs are called with ‘--dontdelete’, they simply complain and abort. But when Arithmetic is called with ‘--dontdelete’, it will appended the dataset(s) to the existing extension(s) in the file. ‘-a’ ‘--writeall’ Write all datasets on the stack as separate HDUs in the output file. This only affects datasets with multiple dimensions (or single-dimension datasets when the ‘--onedasimg’ is called). This option is useful to debug Arithmetic calls: to check all the images on the stack while you are designing your operation. The top dataset on the stack will be on HDU number 1 of the output, the second dataset will be on HDU number 2 and so on. Arithmetic accepts two kinds of input: images and numbers. Images are considered to be any of the inputs that is a file name of a recognized type (see *note Arguments::) and has more than one element/pixel. Numbers on the command-line will be read into the smallest type (see *note Numeric data types::) that can store them, so ‘-2’ will be read as a ‘char’ type (which is signed on most systems and can thus keep negative values), ‘2500’ will be read as an ‘unsigned short’ (all positive numbers will be read as unsigned), while ‘3.1415926535897’ will be read as a ‘double’ and ‘3.14’ will be read as a ‘float’. To force a number to be read as float, put a ‘.’ after it (possibly followed by a zero for easier readability), or add an ‘f’ after it. Hence while ‘5’ will be read as an integer, ‘5.’, ‘5.0’ or ‘5f’ will be added to the stack as ‘float’ (see *note Reverse polish notation::). Unless otherwise stated (in *note Arithmetic operators::), the operators can deal with numeric multiple data types (see *note Numeric data types::). For example, in "‘a.fits b.fits +’", the image types can be ‘long’ and ‘float’. In such cases, C's internal type conversion will be used. The output type will be set to the higher-ranking type of the two inputs. Unsigned integer types have smaller ranking than their signed counterparts and floating point types have higher ranking than the integer types. So the internal C type conversions done in the example above are equivalent to this piece of C: size_t i; long a[100]; float b[100], out[100]; for(i=0;i<100;++i) out[i]=a[i]+b[i]; Relying on the default C type conversion significantly speeds up the processing and also requires less RAM (when using very large images). Some operators can only work on integer types (of any length, for example, bitwise operators) while others only work on floating point types, (currently only the ‘pow’ operator). In such cases, if the operand type(s) are different, an error will be printed. Arithmetic also comes with internal type conversion operators which you can use to convert the data into the appropriate type, see *note Arithmetic operators::. The hyphen (‘-’) can be used both to specify options (see *note Options::) and also to specify a negative number which might be necessary in your arithmetic. In order to enable you to do this, Arithmetic will first parse all the input strings and if the first character after a hyphen is a digit, then that hyphen is temporarily replaced by the vertical tab character which is not commonly used. The arguments are then parsed and these strings will not be specified as an option. Then the given arguments are parsed and any vertical tabs are replaced back with a hyphen so they can be read as negative numbers. Therefore, as long as the names of the files you want to work on, do not start with a vertical tab followed by a digit, there is no problem. An important consequence of this implementation is that you should not write negative fractions like this: ‘-.3’, instead write them as ‘-0.3’. Without any images, Arithmetic will act like a simple calculator and print the resulting output number on the standard output like the first example above. If you really want such calculator operations on the command-line, AWK (GNU AWK is the most common implementation) is much faster, easier and much more powerful. For example, the numerical one-line example above can be done with the following command. In general AWK is a fantastic tool and GNU AWK has a wonderful manual (<https://www.gnu.org/software/gawk/manual/>). So if you often confront situations like this, or have to work with large text tables/catalogs, be sure to checkout AWK and simplify your life. $ echo "" | awk '{print (10.32-3.84)^2.7}' 155.329  File: gnuastro.info, Node: Convolve, Next: Warp, Prev: Arithmetic, Up: Data manipulation 6.3 Convolve ============ On an image, convolution can be thought of as a process to blur or remove the contrast in an image. If you are already familiar with the concept and just want to run Convolve, you can jump to *note Convolution kernel:: and *note Invoking astconvolve:: and skip the lengthy introduction on the basic definitions and concepts of convolution. There are generally two methods to convolve an image. The first and more intuitive one is in the "spatial domain" or using the actual image pixel values, see *note Spatial domain convolution::. The second method is when we manipulate the "frequency domain", or work on the magnitudes of the different frequencies that constitute the image, see *note Frequency domain and Fourier operations::. Understanding convolution in the spatial domain is more intuitive and thus recommended if you are just starting to learn about convolution. However, getting a good grasp of the frequency domain is a little more involved and needs some concentration and some mathematical proofs. However, its reward is a faster operation and more importantly a very fundamental understanding of this very important operation. Convolution of an image will generally result in blurring the image because it mixes pixel values. In other words, if the image has sharp differences in neighboring pixel values(1), those sharp differences will become smoother. This has very good consequences in detection of signal in noise for example. In an actual observed image, the variation in neighboring pixel values due to noise can be very high. But after convolution, those variations will decrease and we have a better hope in detecting the possible underlying signal. Another case where convolution is extensively used is in mock images and modeling in general, convolution can be used to simulate the effect of the atmosphere or the optical system on the mock profiles that we create, see *note PSF::. Convolution is a very interesting and important topic in any form of signal analysis (including astronomical observations). So we have thoroughly(2) explained the concepts behind it in the following sub-sections. * Menu: * Spatial domain convolution:: Only using the input image values. * Frequency domain and Fourier operations:: Using frequencies in input. * Spatial vs. Frequency domain:: When to use which? * Convolution kernel:: How to specify the convolution kernel. * Invoking astconvolve:: Options and argument to Convolve. ---------- Footnotes ---------- (1) In astronomy, the only major time we confront such sharp borders in signal are cosmic rays. All other sources of signal in an image are already blurred by the atmosphere or the optics of the instrument. (2) A mathematician will certainly consider this explanation is incomplete and inaccurate. However this text is written for an understanding on the operations that are done on a real (not complex, discrete and noisy) astronomical image, not any general form of abstract function  File: gnuastro.info, Node: Spatial domain convolution, Next: Frequency domain and Fourier operations, Prev: Convolve, Up: Convolve 6.3.1 Spatial domain convolution -------------------------------- The pixels in an input image represent different "spatial" positions, therefore when convolution is done only using the actual input pixel values, we name the process as being done in the "Spatial domain". In particular this is in contrast to the "frequency domain" that we will discuss later in *note Frequency domain and Fourier operations::. In the spatial domain (and in realistic situations where the image and the convolution kernel do not extend to infinity), convolution is the process of changing the value of one pixel to the _weighted_ average of all the pixels in its _neighborhood_. The 'neighborhood' of each pixel (how many pixels in which direction) and the 'weight' function (how much each neighboring pixel should contribute depending on its position) are given through a second image which is known as a "kernel"(1). * Menu: * Convolution process:: More basic explanations. * Edges in the spatial domain:: Dealing with the edges of an image. ---------- Footnotes ---------- (1) Also known as filter, here we will use 'kernel'.  File: gnuastro.info, Node: Convolution process, Next: Edges in the spatial domain, Prev: Spatial domain convolution, Up: Spatial domain convolution 6.3.1.1 Convolution process ........................... In convolution, the kernel specifies the weight and positions of the neighbors of each pixel. To find the convolved value of a pixel, the central pixel of the kernel is placed on that pixel. The values of each overlapping pixel in the kernel and image are multiplied by each other and summed for all the kernel pixels. To have one pixel in the center, the sides of the convolution kernel have to be an odd number. This process effectively mixes the pixel values of each pixel with its neighbors, resulting in a blurred image compared to the sharper input image. Formally, convolution is one kind of linear 'spatial filtering' in image processing texts. If we assume that the kernel has $2a+1$ and $2b+1$ pixels on each side, the convolved value of a pixel placed at $x$ and $y$ ($C_{x,y}$) can be calculated from the neighboring pixel values in the input image ($I$) and the kernel ($K$) from $$C_{x,y}=\sum_{s=-a}^{a}\sum_{t=-b}^{b}K_{s,t}\times{}I_{x+s,y+t}.$$ Formally, any pixel that is outside of the image in the equation above will be considered to be zero (although, see *note Edges in the spatial domain::). When the kernel is symmetric about its center the blurred image has the same orientation as the original image. However, if the kernel is not symmetric, the image will be affected in the opposite manner, this is a natural consequence of the definition of spatial filtering. In order to avoid this we can rotate the kernel about its center by 180 degrees so the convolved output can have the same original orientation (this is done by default in the Convolve program). Technically speaking, only if the kernel is flipped the process is known as _Convolution_. If it is not it is known as _Correlation_. To be a weighted average, the sum of the weights (the pixels in the kernel) has to be unity. This will have the consequence that the convolved image of an object and unconvolved object will have the same brightness (see *note Brightness flux magnitude::), which is natural, because convolution should not eat up the object photons, it only disperses them. The convolution of each pixel is independent of the other pixels, and in some cases, it may be necessary to convolve different parts of an image separately (for example, when you have different amplifiers on the CCD). Therefore, to speed up spatial convolution, Gnuastro first defines a tessellation over the input; assigning each group of pixels to "tiles". It then does the convolution in parallel on each tile. For more on how Gnuastro's programs create the tile grid (tessellation), see *note Tessellation::.  File: gnuastro.info, Node: Edges in the spatial domain, Prev: Convolution process, Up: Spatial domain convolution 6.3.1.2 Edges in the spatial domain ................................... In purely 'linear' spatial filtering (convolution), there are problems with the edges of the input image. Here we will explain the problem in the spatial domain. For a discussion of this problem from the frequency domain perspective, see *note Edges in the frequency domain::. The problem originates from the fact that on the edges, in practice, the sum of the weights we use on the actual image pixels is not unity(1). For example, as discussed above, a profile in the center of an image will have the same brightness before and after convolution. However, for partially imaged profile on the edge of the image, the brightness (sum of its pixel fluxes within the image, see *note Brightness flux magnitude::) will not be equal, some of the flux is going to be 'eaten' by the edges. If you run ‘$ make check’ on the source files of Gnuastro, you can see this effect by comparing the ‘convolve_frequency.fits’ with ‘convolve_spatial.fits’ in the ‘./tests/’ directory. In the spatial domain, by default, no assumption will be made about pixels outside of the image or any blank pixels in the image. The problem explained above will also occur on the sides of blank regions (see *note Blank pixels::). The solution to this edge effect problem is only possible in the spatial domain. For pixels near the edge, we have to abandon the assumption that the sum of the kernel pixels is unity during the convolution process(2). So taking $W$ as the sum of the kernel pixels that overlapped with non-blank and in-image pixels, the equation in *note Convolution process:: will become: $$C_{x,y}= { \sum_{s=-a}^{a}\sum_{t=-b}^{b}K_{s,t}\times{}I_{x+s,y+t} \over W}.$$ In this manner, objects which are near the edges of the image or blank pixels will also have the same brightness (within the image) before and after convolution. This correction is applied by default in Convolve when convolving in the spatial domain. To disable it, you can use the ‘--noedgecorrection’ option. In the frequency domain, there is no way to avoid this loss of flux near the edges of the image, see *note Edges in the frequency domain:: for an interpretation from the frequency domain perspective. Note that the edge effect discussed here is different from the one in *note If convolving afterwards::. In making mock images we want to simulate a real observation. In a real observation, the images of the galaxies on the sides of the CCD are first blurred by the atmosphere and instrument, then imaged. So light from the parts of a galaxy which are immediately outside the CCD will affect the parts of the galaxy which are covered by the CCD. Therefore in modeling the observation, we have to convolve an image that is larger than the input image by exactly half of the convolution kernel. We can hence conclude that this correction for the edges is only useful when working on actual observed images (where we do not have any more data on the edges) and not in modeling. ---------- Footnotes ---------- (1) Because we assumed the overlapping pixels outside the input image have a value of zero. (2) Of course the sum of the kernel pixels still have to be unity in general.  File: gnuastro.info, Node: Frequency domain and Fourier operations, Next: Spatial vs. Frequency domain, Prev: Spatial domain convolution, Up: Convolve 6.3.2 Frequency domain and Fourier operations --------------------------------------------- Getting a good grip on the frequency domain is usually not an easy job! So we have decided to give the issue a complete review here. Convolution in the frequency domain (see *note Convolution theorem::) heavily relies on the concepts of Fourier transform (*note Fourier transform::) and Fourier series (*note Fourier series::) so we will be investigating these important operations first. It has become something of a cliché for people to say that the Fourier series "is a way to represent a (wave-like) function as the sum of simple sine waves" (from Wikipedia). However, sines themselves are abstract functions, so this statement really adds no extra layer of physical insight. Before jumping head-first into the equations and proofs, we will begin with a historical background to see how the importance of frequencies actually roots in our ancient desire to see everything in terms of circles. A short review of how the complex plane should be interpreted is then given. Having paved the way with these two basics, we define the Fourier series and subsequently the Fourier transform. The final aim is to explain discrete Fourier transform, however some very important concepts need to be solidified first: The Dirac comb, convolution theorem and sampling theorem. So each of these topics are explained in their own separate sub-sub-section before going on to the discrete Fourier transform. Finally we revisit (after *note Edges in the spatial domain::) the problem of convolution on the edges, but this time in the frequency domain. Understanding the sampling theorem and the discrete Fourier transform is very important in order to be able to pull out valuable science from the discrete image pixels. Therefore we have included the mathematical proofs and figures so you can have a clear understanding of these very important concepts. * Menu: * Fourier series historical background:: Historical background. * Circles and the complex plane:: Interpreting complex numbers. * Fourier series:: Fourier Series definition. * Fourier transform:: Fourier Transform definition. * Dirac delta and comb:: Dirac delta and Dirac comb. * Convolution theorem:: Derivation of Convolution theorem. * Sampling theorem:: Sampling theorem (Nyquist frequency). * Discrete Fourier transform:: Derivation and explanation of DFT. * Fourier operations in two dimensions:: Extend to 2D images. * Edges in the frequency domain:: Interpretation of edge effects.  File: gnuastro.info, Node: Fourier series historical background, Next: Circles and the complex plane, Prev: Frequency domain and Fourier operations, Up: Frequency domain and Fourier operations 6.3.2.1 Fourier series historical background ............................................ Ever since the ancient times, the circle has been (and still is) the simplest shape for abstract comprehension. All you need is a center point and a radius and you are done. All the points on a circle are at a fixed distance from the center. However, the moment you try to connect this elegantly simple and beautiful abstract construct (the circle) with the real world (for example, compute its area or its circumference), things become really hard (ideally, impossible) because the irrational number $\pi$ gets involved. The key to understanding the Fourier series (thus the Fourier transform and finally the Discrete Fourier Transform) is our ancient desire to express everything in terms of circles or the most exceptionally simple and elegant abstract human construct. Most people prefer to say the same thing in a more ahistorical manner: to break a function into sines and cosines. As the term "ancient" in the previous sentence implies, Jean-Baptiste Joseph Fourier (1768 - 1830 A.D.) was not the first person to do this. The main reason we know this process by his name today is that he came up with an ingenious method to find the necessary coefficients (radius of) and frequencies ("speed" of rotation on) the circles for any generic (integrable) function. �[image src="gnuastro-figures/epicycles.png" alt="Middle ages epicycles along with two demonstrations of breaking a generic function using epicycles." text="../gnuastro-figures//epicycles.png"�] Figure 6.1: Epicycles and the Fourier series. Left: A demonstration of Mercury's epicycles relative to the "center of the world" by Qutb al-Din al-Shirazi (1236 - 1311 A.D.) retrieved from Wikipedia (https://commons.wikimedia.org/wiki/File:Ghotb2.jpg). Middle (https://commons.wikimedia.org/wiki/File:Fourier_series_square_wave_circles_animation.gif) and Right: How adding more epicycles (or terms in the Fourier series) will approximate functions. The right (https://commons.wikimedia.org/wiki/File:Fourier_series_sawtooth_wave_circles_animation.gif) animation is also available. Like most aspects of mathematics, this process of interpreting everything in terms of circles, began for astronomical purposes. When astronomers noticed that the orbit of Mars and other outer planets, did not appear to be a simple circle (as everything should have been in the heavens). At some point during their orbit, the revolution of these planets would become slower, stop, go back a little (in what is known as the retrograde motion) and then continue going forward again. The correction proposed by Ptolemy (90 - 168 A.D.) was the most agreed upon. He put the planets on Epicycles or circles whose center itself rotates on a circle whose center is the earth. Eventually, as observations became more and more precise, it was necessary to add more and more epicycles in order to explain the complex motions of the planets(1). *note Figure 6.1: epicycle.(Left) shows an example depiction of the epicycles of Mercury in the late 13th century. Of course we now know that if they had abdicated the Earth from its throne in the center of the heavens and allowed the Sun to take its place, everything would become much simpler and true. But there was not enough observational evidence for changing the "professional consensus" of the time to this radical view suggested by a small minority(2). So the pre-Galilean astronomers chose to keep Earth in the center and find a correction to the models (while keeping the heavens a purely "circular" order). The main reason we are giving this historical background which might appear off topic is to give historical evidence that while such "approximations" do work and are very useful for pragmatic reasons (like measuring the calendar from the movement of astronomical bodies). They offer no physical insight. The astronomers who were involved with the Ptolemaic world view had to add a huge number of epicycles during the centuries after Ptolemy in order to explain more accurate observations. Finally the death knell of this world-view was Galileo's observations with his new instrument (the telescope). So the physical insight, which is what Astronomers and Physicists are interested in (as opposed to Mathematicians and Engineers who just like proving and optimizing or calculating!) comes from being creative and not limiting ourselves to such approximations. Even when they work. ---------- Footnotes ---------- (1) See the Wikipedia page on "Deferent and epicycle" for a more complete historical review. (2) Aristarchus of Samos (310 - 230 B.C.) appears to be one of the first people to suggest the Sun being in the center of the universe. This approach to science (that the standard model is defined by consensus) and the fact that this consensus might be completely wrong still applies equally well to our models of particle physics and cosmology today.  File: gnuastro.info, Node: Circles and the complex plane, Next: Fourier series, Prev: Fourier series historical background, Up: Frequency domain and Fourier operations 6.3.2.2 Circles and the complex plane ..................................... Before going onto the derivation, it is also useful to review how the complex numbers and their plane relate to the circles we talked about above. The two schematics in the middle and right of *note Figure 6.1: epicycle. show how a 1D function of time can be made using the 2D real and imaginary surface. Seeing the animation in Wikipedia will really help in understanding this important concept. At each point in time, we take the vertical coordinate of the point and use it to find the value of the function at that point in time. *note Figure 6.2: iandtime. shows this relation with the axes marked. Leonhard Euler(1) (1707 - 1783 A.D.) showed that the complex exponential ($e^{iv}$ where $v$ is real) is periodic and can be written as: $e^{iv}=\cos{v}+isin{v}$. Therefore $e^{iv+2\pi}=e^{iv}$. Later, Caspar Wessel (mathematician and cartographer 1745 - 1818 A.D.) showed how complex numbers can be displayed as vectors on a plane. Euler's identity might seem counter intuitive at first, so we will try to explain it geometrically (for deeper physical insight). On the real-imaginary 2D plane (like the left hand plot in each box of *note Figure 6.2: iandtime.), multiplying a number by $i$ can be interpreted as rotating the point by $90$ degrees (for example, the value $3$ on the real axis becomes $3i$ on the imaginary axis). On the other hand, $e\equiv\lim_{n\rightarrow\infty}(1+{1\over n})^n$, therefore, defining $m\equiv nu$, we get: $$e^{u}=\lim_{n\rightarrow\infty}\left(1+{1\over n}\right)^{nu} =\lim_{n\rightarrow\infty}\left(1+{u\over nu}\right)^{nu} =\lim_{m\rightarrow\infty}\left(1+{u\over m}\right)^{m}$$ Taking $u\equiv iv$ the result can be written as a generic complex number (a function of $v$): $$e^{iv}=\lim_{m\rightarrow\infty}\left(1+i{v\over m}\right)^{m}=a(v)+ib(v)$$ For $v=\pi$, a nice geometric animation of going to the limit can be seen on Wikipedia (https://commons.wikimedia.org/wiki/File:ExpIPi.gif). We see that $\lim_{m\rightarrow\infty}a(\pi)=-1$, while $\lim_{m\rightarrow\infty}b(\pi)=0$, which gives the famous $e^{i\pi}=-1$ equation. The final value is the real number $-1$, however the distance of the polygon points traversed as $m\rightarrow\infty$ is half the circumference of a circle or $\pi$, showing how $v$ in the equation above can be interpreted as an angle in units of radians and therefore how $a(v)=cos(v)$ and $b(v)=sin(v)$. Since $e^{iv}$ is periodic (let's assume with a period of $T$), it is more clear to write it as $v\equiv{2{\pi}n\over T}t$ (where $n$ is an integer), so $e^{iv}=e^{i{2{\pi}n\over T}t}$. The advantage of this notation is that the period ($T$) is clearly visible and the frequency ($2{\pi}n \over T$, in units of 1/cycle) is defined through the integer $n$. In this notation, $t$ is in units of "cycle"s. As we see from the examples in *note Figure 6.1: epicycle. and *note Figure 6.2: iandtime, for each constituting frequency, we need a respective 'magnitude' or the radius of the circle in order to accurately approximate the desired 1D function. The concepts of "period" and "frequency" are relatively easy to grasp when using temporal units like time because this is how we define them in every-day life. However, in an image (astronomical data), we are dealing with spatial units like distance. Therefore, by one "period" we mean the _distance_ at which the signal is identical and frequency is defined as the inverse of that spatial "period". The complex circle of *note Figure 6.2: iandtime. can be thought of the Moon rotating about Earth which is rotating around the Sun; so the "Real (signal)" axis shows the Moon's position as seen by a distant observer on the Sun as time goes by. Because of the scalar (not having any direction or vector) nature of time, *note Figure 6.2: iandtime. is easier to understand in units of time. When thinking about spatial units, mentally replace the "Time (sec)" axis with "Distance (meters)". Because length has direction and is a vector, visualizing the rotation of the imaginary circle and the advance along the "Distance (meters)" axis is not as simple as temporal units like time. �[image src="gnuastro-figures/iandtime.png" text="../gnuastro-figures//iandtime.eps"�] Figure 6.2: Relation between the real (signal), imaginary ($i\equiv\sqrt{-1}$) and time axes at two snapshots of time. ---------- Footnotes ---------- (1) Other forms of this equation were known before Euler. For example, in 1707 A.D. (the year of Euler's birth) Abraham de Moivre (1667 - 1754 A.D.) showed that $(\cos{x}+i\sin{x})^n=\cos(nx)+i\sin(nx)$. In 1714 A.D., Roger Cotes (1682 - 1716 A.D. a colleague of Newton who proofread the second edition of Principia) showed that: $ix=\ln(\cos{x}+i\sin{x})$.  File: gnuastro.info, Node: Fourier series, Next: Fourier transform, Prev: Circles and the complex plane, Up: Frequency domain and Fourier operations 6.3.2.3 Fourier series ...................... In astronomical images, our variable (brightness, or number of photo-electrons, or signal to be more generic) is recorded over the 2D spatial surface of a camera pixel. However to make things easier to understand, here we will assume that the signal is recorded in 1D (assume one row of the 2D image pixels). Also for this section and the next (*note Fourier transform::) we will be talking about the signal before it is digitized or pixelated. Let's assume that we have the continuous function $f(l)$ which is integrable in the interval $[l_0, l_0+L]$ (always true in practical cases like images). Take $l_0$ as the position of the first pixel in the assumed row of the image and $L$ as the width of the image along that row. The units of $l_0$ and $L$ can be in any spatial units (for example, meters) or an angular unit (like radians) multiplied by a fixed distance which is more common. To approximate $f(l)$ over this interval, we need to find a set of frequencies and their corresponding 'magnitude's (see *note Circles and the complex plane::). Therefore our aim is to show $f(l)$ as the following sum of periodic functions: $$f(l)=\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}n\over L}l} $$ Note that the different frequencies ($2{\pi}n/L$, in units of cycles per meters for example) are not arbitrary. They are all integer multiples of the fundamental frequency of $\omega_0=2\pi/L$. Recall that $L$ was the length of the signal we want to model. Therefore, we see that the smallest possible frequency (or the frequency resolution) in the end, depends on the length we observed the signal or $L$. In the case of each dimension on an image, this is the size of the image in the respective dimension. The frequencies have been defined in this "harmonic" fashion to insure that the final sum is periodic outside of the $[l_0, l_0+L]$ interval too. At this point, you might be thinking that the sky is not periodic with the same period as my camera's view angle. You are absolutely right! The important thing is that since your camera's observed region is the only region we are "observing" and will be using, the rest of the sky is irrelevant; so we can safely assume the sky is periodic outside of it. However, this working assumption will haunt us later in *note Edges in the frequency domain::. The frequencies are thus determined by definition. So all we need to do is to find the coefficients ($c_n$), or magnitudes, or radii of the circles for each frequency which is identified with the integer $n$. Fourier's approach was to multiply both sides with a fixed term: $$f(l)e^{-i{2{\pi}m\over L}l}=\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}(n-m)\over L}l} $$ where $m>0$(1). We can then integrate both sides over the observation period: $$\int_{l_0}^{l_0+L}f(l)e^{-i{2{\pi}m\over L}l}dl =\int_{l_0}^{l_0+L}\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}(n-m)\over L}l}dl=\displaystyle\sum_{n=-\infty}^{\infty}c_n\int_{l_0}^{l_0+L}e^{i{2{\pi}(n-m)\over L}l}dl $$ Both $n$ and $m$ are positive integers. Also, we know that a complex exponential is periodic so after one period ($L$) it comes back to its starting point. Therefore $\int_{l_0}^{l_0+L}e^{2{\pi}k/L}dl=0$ for any $k>0$. However, when $k=0$, this integral becomes: $\int_{l_0}^{l_0+T}e^0dt=\int_{l_0}^{l_0+T}dt=T$. Hence since the integral will be zero for all $n{\neq}m$, we get: $$\displaystyle\sum_{n=-\infty}^{\infty}c_n\int_{l_0}^{l_0+T}e^{i{2{\pi}(n-m)\over L}l}dl=Lc_m $$ The origin of the axis is fundamentally an arbitrary position. So let's set it to the start of the image such that $l_0=0$. So we can find the "magnitude" of the frequency $2{\pi}m/L$ within $f(l)$ through the relation: $$c_m={1\over L}\int_{0}^{L}f(l)e^{-i{2{\pi}m\over L}l}dl $$ ---------- Footnotes ---------- (1) We could have assumed $m<0$ and set the exponential to positive, but this is more clear.  File: gnuastro.info, Node: Fourier transform, Next: Dirac delta and comb, Prev: Fourier series, Up: Frequency domain and Fourier operations 6.3.2.4 Fourier transform ......................... In *note Fourier series::, we had to assume that the function is periodic outside of the desired interval with a period of $L$. Therefore, assuming that $L\rightarrow\infty$ will allow us to work with any function. However, with this approximation, the fundamental frequency ($\omega_0$) or the frequency resolution that we discussed in *note Fourier series:: will tend to zero: $\omega_0\rightarrow0$. In the equation to find $c_m$, every $m$ represented a frequency (multiple of $\omega_0$) and the integration on $l$ removes the dependence of the right side of the equation on $l$, making it only a function of $m$ or frequency. Let's define the following two variables: $$\omega{\equiv}m\omega_0={2{\pi}m\over L}$$ $$F(\omega){\equiv}Lc_m$$ The equation to find the coefficients of each frequency in *note Fourier series:: thus becomes: $$F(\omega)=\int_{-\infty}^{\infty}f(l)e^{-i{\omega}l}dl.$$ The function $F(\omega)$ is thus the _Fourier transform_ of $f(l)$ in the frequency domain. So through this transformation, we can find (analyze) the magnitudes of the constituting frequencies or the value in the frequency space(1) of our spatial input function. The great thing is that we can also do the reverse and later synthesize the input function from its Fourier transform. Let's do it: with the approximations above, multiply the right side of the definition of the Fourier Series (*note Fourier series::) with $1=L/L=({\omega_0}L)/(2\pi)$: $$f(l)={1\over 2\pi}\displaystyle\sum_{n=-\infty}^{\infty}Lc_ne^{{2{\pi}in\over L}l}\omega_0={1\over 2\pi}\displaystyle\sum_{n=-\infty}^{\infty}F(\omega)e^{i{\omega}l}\Delta\omega $$ To find the right most side of this equation, we renamed $\omega_0$ as $\Delta\omega$ because it was our resolution, $2{\pi}n/L$ was written as $\omega$ and finally, $Lc_n$ was written as $F(\omega)$ as we defined above. Now, as $L\rightarrow\infty$, $\Delta\omega\rightarrow0$ so we can write: $$f(l)={1\over 2\pi}\int_{-\infty}^{\infty}F(\omega)e^{i{\omega}l}d\omega $$ Together, these two equations provide us with a very powerful set of tools that we can use to process (analyze) and recreate (synthesize) the input signal. Through the first equation, we can break up our input function into its constituent frequencies and analyze it, hence it is also known as _analysis_. Using the second equation, we can synthesize or make the input function from the known frequencies and their magnitudes. Thus it is known as _synthesis_. Here, we symbolize the Fourier transform (analysis) and its inverse (synthesis) of a function $f(l)$ and its Fourier Transform $F(\omega)$ as ${\cal F}[f]$ and ${\cal F}^{-1}[F]$. ---------- Footnotes ---------- (1) As we discussed before, this 'magnitude' can be interpreted as the radius of the circle rotating at this frequency in the epicyclic interpretation of the Fourier series, see *note Figure 6.1: epicycle. and *note Figure 6.2: iandtime.  File: gnuastro.info, Node: Dirac delta and comb, Next: Convolution theorem, Prev: Fourier transform, Up: Frequency domain and Fourier operations 6.3.2.5 Dirac delta and comb ............................ The Dirac $\delta$ (delta) function (also known as an impulse) is the way that we convert a continuous function into a discrete one. It is defined to satisfy the following integral: $$\int_{-\infty}^{\infty}\delta(l)dl=1$$ When integrated with another function, it gives that function's value at $l=0$: $$\int_{-\infty}^{\infty}f(l)\delta(l)dt=f(0)$$ An impulse positioned at another point (say $l_0$) is written as $\delta(l-l_0)$: $$\int_{-\infty}^{\infty}f(l)\delta(l-l_0)dt=f(l_0)$$ The Dirac $\delta$ function also operates similarly if we use summations instead of integrals. The Fourier transform of the delta function is: $${\cal F}[\delta(l)]=\int_{-\infty}^{\infty}\delta(l)e^{-i{\omega}l}dl=e^{-i{\omega}0}=1$$ $${\cal F}[\delta(l-l_0)]=\int_{-\infty}^{\infty}\delta(l-l_0)e^{-i{\omega}l}dl=e^{-i{\omega}l_0}$$ From the definition of the Dirac $\delta$ we can also define a Dirac comb (${\rm III}_P$) or an impulse train with infinite impulses separated by $P$: $${\rm III}_P(l)\equiv\displaystyle\sum_{k=-\infty}^{\infty}\delta(l-kP) $$ $P$ is chosen to represent "pixel width" later in *note Sampling theorem::. Therefore the Dirac comb is periodic with a period of $P$. We have intentionally used a different name for the period of the Dirac comb compared to the input signal's length of observation that we showed with $L$ in *note Fourier series::. This difference is highlighted here to avoid confusion later when these two periods are needed together in *note Discrete Fourier transform::. The Fourier transform of the Dirac comb will be necessary in *note Sampling theorem::, so let's derive it. By its definition, it is periodic, with a period of $P$, so the Fourier coefficients of its Fourier Series (*note Fourier series::) can be calculated within one period: $${\rm III}_P=\displaystyle\sum_{n=-\infty}^{\infty}c_ne^{i{2{\pi}n\over P}l}$$ We can now find the $c_n$ from *note Fourier series::: $$c_n={1\over P}\int_{-P/2}^{P/2}\delta(l)e^{-i{2{\pi}n\over P}l} ={1\over P}\quad\quad \rightarrow \quad\quad {\rm III}_P={1\over P}\displaystyle\sum_{n=-\infty}^{\infty}e^{i{2{\pi}n\over P}l} $$ So we can write the Fourier transform of the Dirac comb as: $${\cal F}[{\rm III}_P]=\int_{-\infty}^{\infty}{\rm III}_Pe^{-i{\omega}l}dl ={1\over P}\displaystyle\sum_{n=-\infty}^{\infty}\int_{-\infty}^{\infty}e^{-i(\omega-{2{\pi}n\over P})l}dl={1\over P}\displaystyle\sum_{n=-\infty}^{\infty}\delta\left(\omega-{2{\pi}n\over P}\right) $$ In the last step, we used the fact that the complex exponential is a periodic function, that $n$ is an integer and that as we defined in *note Fourier transform::, $\omega{\equiv}m\omega_0$, where $m$ was an integer. The integral will be zero for any $\omega$ that is not equal to $2{\pi}n/P$, a more complete explanation can be seen in *note Fourier series::. Therefore, while in the spatial domain the impulses had spacing of $P$ (meters for example), in the frequency space, the spacing between the different impulses are $2\pi/P$ cycles per meters.  File: gnuastro.info, Node: Convolution theorem, Next: Sampling theorem, Prev: Dirac delta and comb, Up: Frequency domain and Fourier operations 6.3.2.6 Convolution theorem ........................... The convolution (shown with the $\ast$ operator) of the two functions $f(l)$ and $h(l)$ is defined as: $$c(l)\equiv[f{\ast}h](l)=\int_{-\infty}^{\infty}f(\tau)h(l-\tau)d\tau $$ See *note Convolution process:: for a more detailed physical (pixel based) interpretation of this definition. The Fourier transform of convolution ($C(\omega)$) can be written as: $$ C(\omega)=\int_{-\infty}^{\infty}[f{\ast}h](l)e^{-i{\omega}l}dl= \int_{-\infty}^{\infty}f(\tau)\left[\int_{-\infty}^{\infty}h(l-\tau)e^{-i{\omega}l}dl\right]d\tau $$ To solve the inner integral, let's define $s{\equiv}l-\tau$, so that $ds=dl$ and $l=s+\tau$ then the inner integral becomes: $$\int_{-\infty}^{\infty}h(l-\tau)e^{-i{\omega}l}dl= \int_{-\infty}^{\infty}h(s)e^{-i{\omega}(s+\tau)}ds=e^{-i{\omega}\tau}\int_{-\infty}^{\infty}h(s)e^{-i{\omega}s}ds=H(\omega)e^{-i{\omega}\tau} $$ where $H(\omega)$ is the Fourier transform of $h(l)$. Substituting this result for the inner integral above, we get: $$C(\omega)=H(\omega)\int_{-\infty}^{\infty}f(\tau)e^{-i{\omega}\tau}d\tau=H(\omega)F(\omega)=F(\omega)H(\omega) $$ where $F(\omega)$ is the Fourier transform of $f(l)$. So multiplying the Fourier transform of two functions individually, we get the Fourier transform of their convolution. The convolution theorem also proves a relation between the convolutions in the frequency space. Let's define: $$D(\omega){\equiv}F(\omega){\ast}H(\omega)$$ Applying the inverse Fourier Transform or synthesis equation (*note Fourier transform::) to both sides and following the same steps above, we get: $$d(l)=f(l)h(l)$$ Where $d(l)$ is the inverse Fourier transform of $D(\omega)$. We can therefore re-write the two equations above formally as the convolution theorem: $$ {\cal F}[f{\ast}h]={\cal F}[f]{\cal F}[h] $$ $$ {\cal F}[fh]={\cal F}[f]\ast{\cal F}[h] $$ Besides its usefulness in blurring an image by convolving it with a given kernel, the convolution theorem also enables us to do another very useful operation in data analysis: to match the blur (or PSF) between two images taken with different telescopes/cameras or under different atmospheric conditions. This process is also known as deconvolution. Let's take $f(l)$ as the image with a narrower PSF (less blurry) and $c(l)$ as the image with a wider PSF which appears more blurred. Also let's take $h(l)$ to represent the kernel that should be convolved with the sharper image to create the more blurry image. Above, we proved the relation between these three images through the convolution theorem. But there, we assumed that $f(l)$ and $h(l)$ are known (given) and the convolved image is desired. In deconvolution, we have $f(l)$ -the sharper image- and $f*h(l)$ -the more blurry image- and we want to find the kernel $h(l)$. The solution is a direct result of the convolution theorem: $$ {\cal F}[h]={{\cal F}[f{\ast}h]\over {\cal F}[f]} \quad\quad {\rm or} \quad\quad h(l)={\cal F}^{-1}\left[{{\cal F}[f{\ast}h]\over {\cal F}[f]}\right] $$ While this works really nice, it has two problems: • If ${\cal F}[f]$ has any zero values, then the inverse Fourier transform will not be a number! • If there is significant noise in the image, then the high frequencies of the noise are going to significantly reduce the quality of the final result. A standard solution to both these problems is the Weiner deconvolution algorithm(1). ---------- Footnotes ---------- (1) <https://en.wikipedia.org/wiki/Wiener_deconvolution>  File: gnuastro.info, Node: Sampling theorem, Next: Discrete Fourier transform, Prev: Convolution theorem, Up: Frequency domain and Fourier operations 6.3.2.7 Sampling theorem ........................ Our mathematical functions are continuous, however, our data collecting and measuring tools are discrete. Here we want to give a mathematical formulation for digitizing the continuous mathematical functions so that later, we can retrieve the continuous function from the digitized recorded input. Assuming that we have a continuous function $f(l)$, then we can define $f_s(l)$ as the 'sampled' $f(l)$ through the Dirac comb (see *note Dirac delta and comb::): $$f_s(l)=f(l){\rm III}_P=\displaystyle\sum_{n=-\infty}^{\infty}f(l)\delta(l-nP) $$ The discrete data-element $f_k$ (for example, a pixel in an image), where $k$ is an integer, can thus be represented as: $$f_k=\int_{-\infty}^{\infty}f_s(l)dl=\int_{-\infty}^{\infty}f(l)\delta(l-kP)dt=f(kP)$$ Note that in practice, our discrete data points are not found in this fashion. Each detector pixel (in an image for example) has an area and averages the signal it receives over that area, not a mathematical point as the Dirac $\delta$ function defines. However, as long as the variation in the signal over one detector pixel is not significant, this can be a good approximation. Having put this issue to the side, we can now try to find the relation between the Fourier transforms of the un-sampled $f(l)$ and the sampled $f_s(l)$. For a more clear notation, let's define: $$F_s(\omega)\equiv{\cal F}[f_s]$$ $$D(\omega)\equiv{\cal F}[{\rm III}_P]$$ Then using the Convolution theorem (see *note Convolution theorem::), $F_s(\omega)$ can be written as: $$F_s(\omega)={\cal F}[f(l){\rm III}_P]=F(\omega){\ast}D(\omega)$$ Finally, from the definition of convolution and the Fourier transform of the Dirac comb (see *note Dirac delta and comb::), we get: $$\eqalign{ F_s(\omega) &= \int_{-\infty}^{\infty}F(\omega)D(\omega-\mu)d\mu \cr &= {1\over P}\displaystyle\sum_{n=-\infty}^{\infty}\int_{-\infty}^{\infty}F(\omega)\delta\left(\omega-\mu-{2{\pi}n\over P}\right)d\mu \cr &= {1\over P}\displaystyle\sum_{n=-\infty}^{\infty}F\left( \omega-{2{\pi}n\over P}\right).\cr } $$ $F(\omega)$ was only a simple function, see *note Figure 6.3: samplingfreq.(left). However, from the sampled Fourier transform function we see that $F_s(\omega)$ is the superposition of infinite copies of $F(\omega)$ that have been shifted, see *note Figure 6.3: samplingfreq.(right). From the equation, it is clear that the shift in each copy is $2\pi/P$. �[image src="gnuastro-figures/samplingfreq.png" text="../gnuastro-figures//samplingfreq.eps"�] Figure 6.3: Sampling causes infinite repetition in the frequency domain. FT is an abbreviation for 'Fourier transform'. $\omega_m$ represents the maximum frequency present in the input. $F(\omega)$ is only symmetric on both sides of 0 when the input is real (not complex). In general $F(\omega)$ is complex and thus cannot be simply plotted like this. Here we have assumed a real Gaussian $f(t)$ which has produced a Gaussian $F(\omega)$. The input $f(l)$ can have any distribution of frequencies in it. In the example of *note Figure 6.3: samplingfreq.(left), the input consisted of a range of frequencies equal to $\Delta\omega=2\omega_m$. Fortunately as *note Figure 6.3: samplingfreq.(right) shows, the assumed pixel size ($P$) we used to sample this hypothetical function was such that $2\pi/P>\Delta\omega$. The consequence is that each copy of $F(\omega)$ has become completely separate from the surrounding copies. Such a digitized (sampled) data set is thus called _over-sampled_. When $2\pi/P=\Delta\omega$, $P$ is just small enough to finely separate even the largest frequencies in the input signal and thus it is known as _critically-sampled_. Finally if $2\pi/P<\Delta\omega$ we are dealing with an _under-sampled_ data set. In an under-sampled data set, the separate copies of $F(\omega)$ are going to overlap and this will deprive us of recovering high constituent frequencies of $f(l)$. The effects of under-sampling in an image with high rates of change (for example, a brick wall imaged from a distance) can clearly be visually seen and is known as _aliasing_. When the input $f(l)$ is composed of a finite range of frequencies, $f(l)$ is known as a _band-limited_ function. The example in *note Figure 6.3: samplingfreq.(left) was a nice demonstration of such a case: for all $\omega<-\omega_m$ or $\omega>\omega_m$, we have $F(\omega)=0$. Therefore, when the input function is band-limited and our detector's pixels are placed such that we have critically (or over-) sampled it, then we can exactly reproduce the continuous $f(l)$ from the discrete or digitized samples. To do that, we just have to isolate one copy of $F(\omega)$ from the infinite copies and take its inverse Fourier transform. This ability to exactly reproduce the continuous input from the sampled or digitized data leads us to the _sampling theorem_ which connects the inherent property of the continuous signal (its maximum frequency) to that of the detector (the spacing between its pixels). The sampling theorem states that the full (continuous) signal can be recovered when the pixel size ($P$) and the maximum constituent frequency in the signal ($\omega_m$) have the following relation(1): $${2\pi\over P}>2\omega_m$$ This relation was first formulated by Harry Nyquist (1889 - 1976 A.D.) in 1928 and formally proved in 1949 by Claude E. Shannon (1916 - 2001 A.D.) in what is now known as the Nyquist-Shannon sampling theorem. In signal processing, the signal is produced (synthesized) by a transmitter and is received and de-coded (analyzed) by a receiver. Therefore producing a band-limited signal is necessary. In astronomy, we do not produce the shapes of our targets, we are only observers. Galaxies can have any shape and size, therefore ideally, our signal is not band-limited. However, since we are always confined to observing through an aperture, the aperture will cause a point source (for which $\omega_m=\infty$) to be spread over several pixels. This spread is quantitatively known as the point spread function or PSF. This spread does blur the image which is undesirable; however, for this analysis it produces the positive outcome that there will be a finite $\omega_m$. Though we should caution that any detector will have noise which will add lots of very high frequency (ideally infinite) changes between the pixels. However, the coefficients of those noise frequencies are usually exceedingly small. ---------- Footnotes ---------- (1) This equation is also shown in some places without the $2\pi$. Whether $2\pi$ is included or not depends on how you define the frequency  File: gnuastro.info, Node: Discrete Fourier transform, Next: Fourier operations in two dimensions, Prev: Sampling theorem, Up: Frequency domain and Fourier operations 6.3.2.8 Discrete Fourier transform .................................. As we have stated several times so far, the input image is a digitized, pixelated or discrete array of values ($f_s(l)$, see *note Sampling theorem::). The input is not a continuous function. Also, all our numerical calculations can only be done on a sampled, or discrete Fourier transform. Note that $F_s(\omega)$ is not discrete, it is continuous. One way would be to find the analytic $F_s(\omega)$, then sample it at any desired "freq-pixel"(1) spacing. However, this process would involve two steps of operations and computers in particular are not too good at analytic operations for the first step. So here, we will derive a method to directly find the 'freq-pixel'ated $F_s(\omega)$ from the pixelated $f_s(l)$. Let's start with the definition of the Fourier transform (see *note Fourier transform::): $$F_s(\omega)=\int_{-\infty}^{\infty}f_s(l)e^{-i{\omega}l}dl $$ From the definition of $f_s(\omega)$ (using $x$ instead of $n$) we get: $$\eqalign{ F_s(\omega) &= \displaystyle\sum_{x=-\infty}^{\infty} \int_{-\infty}^{\infty}f(l)\delta(l-xP)e^{-i{\omega}l}dl \cr &= \displaystyle\sum_{x=-\infty}^{\infty} f_xe^{-i{\omega}xP} } $$ Where $f_x$ is the value of $f(l)$ on the point $x$ or the value of the $x$th pixel. As shown in *note Sampling theorem:: this function is infinitely periodic with a period of $2\pi/P$. So all we need is the values within one period: $0<\omega<2\pi/P$, see *note Figure 6.3: samplingfreq. We want $X$ samples within this interval, so the frequency difference between each frequency sample or freq-pixel is $1/XP$. Hence we will evaluate the equation above on the points at: $$\omega={u\over XP} \quad\quad u = 0, 1, 2, ..., X-1$$ Therefore the value of the freq-pixel $u$ in the frequency domain is: $$F_u=\displaystyle\sum_{x=0}^{X-1} f_xe^{-i{ux\over X}} $$ Therefore, we see that for each freq-pixel in the frequency domain, we are going to need all the pixels in the spatial domain(2). If the input (spatial) pixel row is also $X$ pixels wide, then we can exactly recover the $x$th pixel with the following summation: $$f_x={1\over X}\displaystyle\sum_{u=0}^{X-1} F_ue^{i{ux\over X}} $$ When the input pixel row (we are still only working on 1D data) has $X$ pixels, then it is $L=XP$ spatial units wide. $L$, or the length of the input data was defined in *note Fourier series:: and $P$ or the space between the pixels in the input was defined in *note Dirac delta and comb::. As we saw in *note Sampling theorem::, the input (spatial) pixel spacing ($P$) specifies the range of frequencies that can be studied and in *note Fourier series:: we saw that the length of the (spatial) input, ($L$) determines the resolution (or size of the freq-pixels) in our discrete Fourier transformed image. Both result from the fact that the frequency domain is the inverse of the spatial domain. ---------- Footnotes ---------- (1) We are using the made-up word "freq-pixel" so they are not confused with spatial domain "pixels". (2) So even if one pixel is a blank pixel (see *note Blank pixels::), all the pixels in the frequency domain will also be blank.  File: gnuastro.info, Node: Fourier operations in two dimensions, Next: Edges in the frequency domain, Prev: Discrete Fourier transform, Up: Frequency domain and Fourier operations 6.3.2.9 Fourier operations in two dimensions ............................................ Once all the relations in the previous sections have been clearly understood in one dimension, it is very easy to generalize them to two or even more dimensions since each dimension is by definition independent. Previously we defined $l$ as the continuous variable in 1D and the inverse of the period in its direction to be $\omega$. Let's show the second spatial direction with $m$ the inverse of the period in the second dimension with $\nu$. The Fourier transform in 2D (see *note Fourier transform::) can be written as: $$F(\omega, \nu)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty} f(l, m)e^{-i({\omega}l+{\nu}m)}dl$$ $$f(l, m)=\int_{-\infty}^{\infty}\int_{-\infty}^{\infty} F(\omega, \nu)e^{i({\omega}l+{\nu}m)}dl$$ The 2D Dirac $\delta(l,m)$ is non-zero only when $l=m=0$. The 2D Dirac comb (or Dirac brush! See *note Dirac delta and comb::) can be written in units of the 2D Dirac $\delta$. For most image detectors, the sides of a pixel are equal in both dimensions. So $P$ remains unchanged, if a specific device is used which has non-square pixels, then for each dimension a different value should be used. $${\rm III}_P(l, m)\equiv\displaystyle\sum_{j=-\infty}^{\infty} \displaystyle\sum_{k=-\infty}^{\infty} \delta(l-jP, m-kP) $$ The Two dimensional Sampling theorem (see *note Sampling theorem::) is thus very easily derived as before since the frequencies in each dimension are independent. Let's take $\nu_m$ as the maximum frequency along the second dimension. Therefore the two dimensional sampling theorem says that a 2D band-limited function can be recovered when the following conditions hold(1): $${2\pi\over P} > 2\omega_m \quad\quad\quad {\rm and} \quad\quad\quad {2\pi\over P} > 2\nu_m$$ Finally, let's represent the pixel counter on the second dimension in the spatial and frequency domains with $y$ and $v$ respectively. Also let's assume that the input image has $Y$ pixels on the second dimension. Then the two dimensional discrete Fourier transform and its inverse (see *note Discrete Fourier transform::) can be written as: $$F_{u,v}=\displaystyle\sum_{x=0}^{X-1}\displaystyle\sum_{y=0}^{Y-1} f_{x,y}e^{-i({ux\over X}+{vy\over Y})} $$ $$f_{x,y}={1\over XY}\displaystyle\sum_{u=0}^{X-1}\displaystyle\sum_{v=0}^{Y-1} F_{u,v}e^{i({ux\over X}+{vy\over Y})} $$ ---------- Footnotes ---------- (1) If the pixels are not a square, then each dimension has to use the respective pixel size, but since most detectors have square pixels, we assume so here too  File: gnuastro.info, Node: Edges in the frequency domain, Prev: Fourier operations in two dimensions, Up: Frequency domain and Fourier operations 6.3.2.10 Edges in the frequency domain ...................................... With a good grasp of the frequency domain, we can revisit the problem of convolution on the image edges, see *note Edges in the spatial domain::. When we apply the convolution theorem (see *note Convolution theorem::) to convolve an image, we first take the discrete Fourier transforms (DFT, *note Discrete Fourier transform::) of both the input image and the kernel, then we multiply them with each other and then take the inverse DFT to construct the convolved image. Of course, in order to multiply them with each other in the frequency domain, the two images have to be the same size, so let's assume that we pad the kernel (it is usually smaller than the input image) with zero valued pixels in both dimensions so it becomes the same size as the input image before the DFT. Having multiplied the two DFTs, we now apply the inverse DFT which is where the problem is usually created. If the DFT of the kernel only had values of 1 (unrealistic condition!) then there would be no problem and the inverse DFT of the multiplication would be identical with the input. However in real situations, the kernel's DFT has a maximum of 1 (because the sum of the kernel has to be one, see *note Convolution process::) and decreases something like the hypothetical profile of *note Figure 6.3: samplingfreq. So when multiplied with the input image's DFT, the coefficients or magnitudes (see *note Circles and the complex plane::) of the smallest frequency (or the sum of the input image pixels) remains unchanged, while the magnitudes of the higher frequencies are significantly reduced. As we saw in *note Sampling theorem::, the Fourier transform of a discrete input will be infinitely repeated. In the final inverse DFT step, the input is in the frequency domain (the multiplied DFT of the input image and the kernel DFT). So the result (our output convolved image) will be infinitely repeated in the spatial domain. In order to accurately reconstruct the input image, we need all the frequencies with the correct magnitudes. However, when the magnitudes of higher frequencies are decreased, longer periods (shorter frequencies) will dominate in the reconstructed pixel values. Therefore, when constructing a pixel on the edge of the image, the newly empowered longer periods will look beyond the input image edges and will find the repeated input image there. So if you convolve an image in this fashion using the convolution theorem, when a bright object exists on one edge of the image, its blurred wings will be present on the other side of the convolved image. This is often termed as circular convolution or cyclic convolution. So, as long as we are dealing with convolution in the frequency domain, there is nothing we can do about the image edges. The least we can do is to eliminate the ghosts of the other side of the image. So, we add zero valued pixels to both the input image and the kernel in both dimensions so the image that will be convolved has a size equal to the sum of both images in each dimension. Of course, the effect of this zero-padding is that the sides of the output convolved image will become dark. To put it another way, the edges are going to drain the flux from nearby objects. But at least it is consistent across all the edges of the image and is predictable. In Convolve, you can see the padded images when inspecting the frequency domain convolution steps with the ‘--viewfreqsteps’ option.  File: gnuastro.info, Node: Spatial vs. Frequency domain, Next: Convolution kernel, Prev: Frequency domain and Fourier operations, Up: Convolve 6.3.3 Spatial vs. Frequency domain ---------------------------------- With the discussions above it might not be clear when to choose the spatial domain and when to choose the frequency domain. Here we will try to list the benefits of each. The spatial domain, • Can correct for the edge effects of convolution, see *note Edges in the spatial domain::. • Can operate on blank pixels. • Can be faster than frequency domain when the kernel is small (in terms of the number of pixels on the sides). The frequency domain, • Will be much faster when the image and kernel are both large. As a general rule of thumb, when working on an image of modeled profiles use the frequency domain and when working on an image of real (observed) objects use the spatial domain (corrected for the edges). The reason is that if you apply a frequency domain convolution to a real image, you are going to loose information on the edges and generally you do not want large kernels. But when you have made the profiles in the image yourself, you can just make a larger input image and crop the central parts to completely remove the edge effect, see *note If convolving afterwards::. Also due to oversampling, both the kernels and the images can become very large and the speed boost of frequency domain convolution will significantly improve the processing time, see *note Oversampling::.  File: gnuastro.info, Node: Convolution kernel, Next: Invoking astconvolve, Prev: Spatial vs. Frequency domain, Up: Convolve 6.3.4 Convolution kernel ------------------------ All the programs that need convolution will need to be given a convolution kernel file and extension. In most cases (other than Convolve, see *note Convolve::) the kernel file name is optional. However, the extension is necessary and must be specified either on the command-line or at least one of the configuration files (see *note Configuration files::). Within Gnuastro, there are two ways to create a kernel image: • MakeProfiles: You can use MakeProfiles to create a parametric (based on a radial function) kernel, see *note MakeProfiles::. By default MakeProfiles will make the Gaussian and Moffat profiles in a separate file so you can feed it into any of the programs. • ConvertType: You can write your own desired kernel into a text file table and convert it to a FITS file with ConvertType, see *note ConvertType::. Just be careful that the kernel has to have an odd number of pixels along its two axes, see *note Convolution process::. All the programs that do convolution will normalize the kernel internally, so if you choose this option, you do not have to worry about normalizing the kernel. Only within Convolve, there is an option to disable normalization, see *note Invoking astconvolve::. The two options to specify a kernel file name and its extension are shown below. These are common between all the programs that will do convolution. ‘-k FITS’ ‘--kernel=FITS’ The convolution kernel file name. The ‘BITPIX’ (data type) value of this file can be any standard type and it does not necessarily have to be normalized. Several operations will be done on the kernel image prior to the program's processing: • It will be converted to floating point type. • All blank pixels (see *note Blank pixels::) will be set to zero. • It will be normalized so the sum of its pixels equal unity. • It will be flipped so the convolved image has the same orientation. This is only relevant if the kernel is not circular. See *note Convolution process::. ‘-U STR’ ‘--khdu=STR’ The convolution kernel HDU. Although the kernel file name is optional, before running any of the programs, they need to have a value for ‘--khdu’ even if the default kernel is to be used. So be sure to keep its value in at least one of the configuration files (see *note Configuration files::). By default, the system configuration file has a value.  File: gnuastro.info, Node: Invoking astconvolve, Prev: Convolution kernel, Up: Convolve 6.3.5 Invoking Convolve ----------------------- Convolve an input dataset (2D image or 1D spectrum for example) with a known kernel, or make the kernel necessary to match two PSFs. The general template for Convolve is: $ astconvolve [OPTION...] ASTRdata One line examples: ## Convolve mockimg.fits with psf.fits: $ astconvolve --kernel=psf.fits mockimg.fits ## Convolve in the spatial domain: $ astconvolve observedimg.fits --kernel=psf.fits --domain=spatial ## Convolve a 3D cube (only spatial domain is supported in 3D). ## It is also necessary to define 3D tiles and channels for ## parallelization (see the Tessellation section for more). $ astconvolve cube.fits --kernel=kernel3d.fits --domain=spatial \ --tilesize=30,30,30 --numchannels=1,1,1 ## Find the kernel to match sharper and blurry PSF images (they both ## have to have the same pixel size). $ astconvolve --kernel=sharperimage.fits --makekernel=10 \ blurryimage.fits ## Convolve a Spectrum (column 14 in the FITS table below) with a ## custom kernel (the kernel will be normalized internally, so only ## the ratios are important). Sed is used to replace the spaces with ## new line characters so Convolve sees them as values in one column. $ echo "1 3 10 3 1" | sed 's/ /\n/g' | astconvolve spectra.fits -c14 The only argument accepted by Convolve is an input image file. Some of the options are the same between Convolve and some other Gnuastro programs. Therefore, to avoid repetition, they will not be repeated here. For the full list of options shared by all Gnuastro programs, please see *note Common options::. In particular, in the spatial domain, on a multi-dimensional datasets, convolve uses Gnuastro's tessellation to speed up the run, see *note Tessellation::. Common options related to tessellation are described in *note Processing options::. 1-dimensional datasets (for example, spectra) are only read as columns within a table (see *note Tables:: for more on how Gnuastro programs read tables). Note that currently 1D convolution is only implemented in the spatial domain and thus kernel-matching is also not supported. Here we will only explain the options particular to Convolve. Run Convolve with ‘--help’ in order to see the full list of options Convolve accepts, irrespective of where they are explained in this book. ‘--kernelcolumn’ Column containing the 1D kernel. When the input dataset is a 1-dimensional column, and the host table has more than one column, use this option to specify which column should be used. ‘--nokernelflip’ Do not flip the kernel after reading; only for spatial domain convolution. This can be useful if the flipping has already been applied to the kernel. By default, the input kernel is flipped to avoid the output getting flipped; see *note Convolution process::. ‘--nokernelnorm’ Do not normalize the kernel after reading it, such that the sum of its pixels is unity. As described in *note Convolution process::, the kernel is normalized by default. ‘--conv-on-blank’ Do not ignore blank pixels in the convolution. The output pixels that were originally non-blank are not affected by this option (they will have the same value if this option is called or not). This option just expands/dilates the non-blank regions of your dataset into the blank regions and only works in spatial domain convolution. Therefore, with this option convolution can be used as a proxy for interpolation or dilation. By default, blank pixels are ignored during spatial domain convolution; so the input and output have exactly the same number of blank pixels. With this option, the blank pixels that are sufficiently close to non-blank pixels (based on the kernel) will be given a value based on the non-blank elements that overlap with the kernel for that blank pixel (see *note Edges in the spatial domain::). ‘-d STR’ ‘--domain=STR’ The domain to use for the convolution. The acceptable values are '‘spatial’' and '‘frequency’', corresponding to the respective domain. For large images, the frequency domain process will be more efficient than convolving in the spatial domain. However, the edges of the image will loose some flux (see *note Edges in the spatial domain::) and the image must not contain any blank pixels, see *note Spatial vs. Frequency domain::. ‘--checkfreqsteps’ With this option a file with the initial name of the output file will be created that is suffixed with ‘_freqsteps.fits’, all the steps done to arrive at the final convolved image are saved as extensions in this file. The extensions in order are: 1. The padded input image. In frequency domain convolution the two images (input and convolved) have to be the same size and both should be padded by zeros. 2. The padded kernel, similar to the above. 3. The Fourier spectrum of the forward Fourier transform of the input image. Note that the Fourier transform is a complex operation (and not view able in one image!) So we either have to show the 'Fourier spectrum' or the 'Phase angle'. For the complex number $a+ib$, the Fourier spectrum is defined as $\sqrt{a^2+b^2}$ while the phase angle is defined as $\arctan(b/a)$. 4. The Fourier spectrum of the forward Fourier transform of the kernel image. 5. The Fourier spectrum of the multiplied (through complex arithmetic) transformed images. 6. The inverse Fourier transform of the multiplied image. If you open it, you will see that the convolved image is now in the center, not on one side of the image as it started with (in the padded image of the first extension). If you are working on a mock image which originally had pixels of precisely 0.0, you will notice that in those parts that your convolved profile(s) did not convert, the values are now $\sim10^{-18}$, this is due to floating-point round off errors. Therefore in the final step (when cropping the central parts of the image), we also remove any pixel with a value less than $10^{-17}$. ‘--noedgecorrection’ Do not correct the edge effect in spatial domain convolution (this correction is done in spatial domain convolution by default). For a full discussion, please see *note Edges in the spatial domain::. ‘-m INT’ ‘--makekernel=INT’ If this option is called, Convolve will do PSF-matching: the output will be the kernel that you should convolve with the sharper image to obtain the blurry one (see *note Convolution theorem::). The two images must have the same size (number of pixels). This option is not yet supported in 1-dimensional datasets. In effect, it is only necessary to give the two PSFs of your two datasets, find the matching kernel based on that, then apply that kernel to the higher-resolution (sharper image). The image given to the ‘--kernel’ option is assumed to be the sharper (less blurry) image and the input image (with no option) is assumed to be the more blurry image. The value given to this option will be used as the maximum radius of the kernel. Any pixel in the final kernel that is larger than this distance from the center will be set to zero. Noise has large frequencies which can make the result less reliable for the higher frequencies of the final result. So all the frequencies which have a spectrum smaller than the value given to the ‘minsharpspec’ option in the sharper input image are set to zero and not divided. This will cause the wings of the final kernel to be flatter than they would ideally be which will make the convolved image result unreliable if it is too high. Some notes to on how to prepare your two input PSFs. Note that these (and several other issues that relate to an accurate estimation of the PSF) are practically described in the following tutorial: *note Building the extended PSF::. • Choose a bright (unsaturated) star and use a region box (with Crop for example, see *note Crop::) that is sufficiently above the noise. • Mask all background sources that may be nearby (you can use Segment's clumps, see *note Segment::). • Use Warp (see *note Warp::) to warp the pixel grid so the star's center is exactly on the center of the central pixel in the cropped image. This will certainly slightly degrade the result, however, it is necessary. If there are multiple good stars, you can shift all of them, then normalize them (so the sum of each star's pixels is one) and then take their average to decrease this effect. • The shifting might move the center of the star by one pixel in any direction, so crop the central pixel of the warped image to have a clean image for the deconvolution. ‘-c’ ‘--minsharpspec’ (‘=FLT’) The minimum frequency spectrum (or coefficient, or pixel value in the frequency domain image) to use in deconvolution, see the explanations under the ‘--makekernel’ option for more information.  File: gnuastro.info, Node: Warp, Prev: Convolve, Up: Data manipulation 6.4 Warp ======== Image warping is the process of mapping the pixels of one image onto a new pixel grid. This process is sometimes known as transformation, however following the discussion of Heckbert 1989(1) we will not be using that term because it can be confused with only pixel value or flux transformations. Here we specifically mean the pixel grid transformation which is better conveyed with 'warp'. Image warping is a very important step in astronomy, both in observational data analysis and in simulating modeled images. In modeling, warping an image is necessary when we want to apply grid transformations to the initial models, for example, in simulating gravitational lensing. Observational reasons for warping an image are listed below: • *Noise:* Most scientifically interesting targets are inherently faint (have a very low Signal to noise ratio). Therefore one short exposure is not enough to detect such objects that are drowned deeply in the noise. We need multiple exposures so we can add them together and increase the objects' signal to noise ratio. Keeping the telescope fixed on one field of the sky is practically impossible. Therefore very deep observations have to put into the same grid before adding them. • *Resolution:* If we have multiple images of one patch of the sky (hopefully at multiple orientations) we can warp them to the same grid. The multiple orientations will allow us to 'guess' the values of pixels on an output pixel grid that has smaller pixel sizes and thus increase the resolution of the output. This process of merging multiple observations is known as Mosaicing. • *Cosmic rays:* Cosmic rays can randomly fall on any part of an image. If they collide vertically with the camera, they are going to create a very sharp and bright spot that in most cases can be separated easily(2). However, depending on the depth of the camera pixels, and the angle that a cosmic rays collides with it, it can cover a line-like larger area on the CCD which makes the detection using their sharp edges very hard and error prone. One of the best methods to remove cosmic rays is to compare multiple images of the same field. To do that, we need all the images to be on the same pixel grid. • *Optical distortion:* In wide field images, the optical distortion that occurs on the outer parts of the focal plane will make accurate comparison of the objects at various locations impossible. It is therefore necessary to warp the image and correct for those distortions prior to the analysis. • *Detector not on focal plane:* In some cases (like the Hubble Space Telescope ACS and WFC3 cameras), the CCD might be tilted compared to the focal plane, therefore the recorded CCD pixels have to be projected onto the focal plane before further analysis. * Menu: * Linear warping basics:: Basics of coordinate transformation. * Merging multiple warpings:: How to merge multiple matrices. * Resampling:: Warping an image is re-sampling it. * Invoking astwarp:: Arguments and options for Warp. ---------- Footnotes ---------- (1) Paul S. Heckbert. 1989. _Fundamentals of Texture mapping and Image Warping_, Master's thesis at University of California, Berkeley. (2) All astronomical targets are blurred with the PSF, see *note PSF::, however a cosmic ray is not and so it is very sharp (it suddenly stops at one pixel).  File: gnuastro.info, Node: Linear warping basics, Next: Merging multiple warpings, Prev: Warp, Up: Warp 6.4.1 Linear warping basics --------------------------- Let's take $\left[\matrix{u&v}\right]$ as the coordinates of a point in the input image and $\left[\matrix{x&y}\right]$ as the coordinates of that same point in the output image(1). The simplest form of coordinate transformation (or warping) is the scaling of the coordinates, let's assume we want to scale the first axis by $M$ and the second by $N$, the output coordinates of that point can be calculated by $$\left[\matrix{x\cr y}\right]= \left[\matrix{Mu\cr Nv}\right]= \left[\matrix{M&0\cr0&N}\right]\left[\matrix{u\cr v}\right]$$ Note that these are matrix multiplications. We thus see that we can represent any such grid warping as a matrix. Another thing we can do with this $2\times2$ matrix is to rotate the output coordinate around the common center of both coordinates. If the output is rotated anticlockwise by $\theta$ degrees from the positive (to the right) horizontal axis, then the warping matrix should become: $$\left[\matrix{x\cr y}\right]= \left[\matrix{ucos\theta-vsin\theta\cr usin\theta+vcos\theta}\right]= \left[\matrix{cos\theta&-sin\theta\cr sin\theta&cos\theta}\right] \left[\matrix{u\cr v}\right] $$ We can also flip the coordinates around the first axis, the second axis and the coordinate center with the following three matrices respectively: $$\left[\matrix{1&0\cr0&-1}\right]\quad\quad \left[\matrix{-1&0\cr0&1}\right]\quad\quad \left[\matrix{-1&0\cr0&-1}\right]$$ The final thing we can do with this definition of a $2\times2$ warping matrix is shear. If we want the output to be sheared along the first axis with $A$ and along the second with $B$, then we can use the matrix: $$\left[\matrix{1&A\cr B&1}\right]$$ To have one matrix representing any combination of these steps, you use matrix multiplication, see *note Merging multiple warpings::. So any combinations of these transformations can be displayed with one $2\times2$ matrix: $$\left[\matrix{a&b\cr c&d}\right]$$ The transformations above can cover a lot of the needs of most coordinate transformations. However they are limited to mapping the point $[\matrix{0&0}]$ to $[\matrix{0&0}]$. Therefore they are useless if you want one coordinate to be shifted compared to the other one. They are also space invariant, meaning that all the coordinates in the image will receive the same transformation. In other words, all the pixels in the output image will have the same area if placed over the input image. So transformations which require varying output pixel sizes like projections cannot be applied through this $2\times2$ matrix either (for example, for the tilted ACS and WFC3 camera detectors on board the Hubble space telescope). To add these further capabilities, namely translation and projection, we use the homogeneous coordinates. They were defined about 200 years ago by August Ferdinand Möbius (1790 - 1868). For simplicity, we will only discuss points on a 2D plane and avoid the complexities of higher dimensions. We cannot provide a deep mathematical introduction here, interested readers can get a more detailed explanation from Wikipedia(2) and the references therein. By adding an extra coordinate to a point we can add the flexibility we need. The point $[\matrix{x&y}]$ can be represented as $[\matrix{xZ&yZ&Z}]$ in homogeneous coordinates. Therefore multiplying all the coordinates of a point in the homogeneous coordinates with a constant will give the same point. Put another way, the point $[\matrix{x&y&Z}]$ corresponds to the point $[\matrix{x/Z&y/Z}]$ on the constant $Z$ plane. Setting $Z=1$, we get the input image plane, so $[\matrix{u&v&1}]$ corresponds to $[\matrix{u&v}]$. With this definition, the transformations above can be generally written as: $$\left[\matrix{x\cr y\cr 1}\right]= \left[\matrix{a&b&0\cr c&d&0\cr 0&0&1}\right] \left[\matrix{u\cr v\cr 1}\right]$$ We thus acquired 4 extra degrees of freedom. By giving non-zero values to the zero valued elements of the last column we can have translation (try the matrix multiplication!). In general, any coordinate transformation that is represented by the matrix below is known as an affine transformation(3): $$\left[\matrix{a&b&c\cr d&e&f\cr 0&0&1}\right]$$ We can now consider translation, but the affine transform is still spatially invariant. Giving non-zero values to the other two elements in the matrix above gives us the projective transformation or Homography(4) which is the most general type of transformation with the $3\times3$ matrix: $$\left[\matrix{x'\cr y'\cr w}\right]= \left[\matrix{a&b&c\cr d&e&f\cr g&h&1}\right] \left[\matrix{u\cr v\cr 1}\right]$$ So the output coordinates can be calculated from: $$x={x' \over w}={au+bv+c \over gu+hv+1}\quad\quad\quad\quad y={y' \over w}={du+ev+f \over gu+hv+1}$$ Thus with Homography we can change the sizes of the output pixels on the input plane, giving a 'perspective'-like visual impression. This can be quantitatively seen in the two equations above. When $g=h=0$, the denominator is independent of $u$ or $v$ and thus we have spatial invariance. Homography preserves lines at all orientations. A very useful fact about Homography is that its inverse is also a Homography. These two properties play a very important role in the implementation of this transformation. A short but instructive and illustrated review of affine, projective and also bi-linear mappings is provided in Heckbert 1989(5). ---------- Footnotes ---------- (1) These can be any real number, we are not necessarily talking about integer pixels here. (2) <http://en.wikipedia.org/wiki/Homogeneous_coordinates> (3) <http://en.wikipedia.org/wiki/Affine_transformation> (4) <http://en.wikipedia.org/wiki/Homography> (5) Paul S. Heckbert. 1989. _Fundamentals of Texture mapping and Image Warping_, Master's thesis at University of California, Berkeley. Note that since points are defined as row vectors there, the matrix is the transpose of the one discussed here.  File: gnuastro.info, Node: Merging multiple warpings, Next: Resampling, Prev: Linear warping basics, Up: Warp 6.4.2 Merging multiple warpings ------------------------------- In *note Linear warping basics:: we saw how a basic warp/transformation can be represented with a matrix. To make more complex warpings (for example, to define a translation, rotation and scale as one warp) the individual matrices have to be multiplied through matrix multiplication. However matrix multiplication is not commutative, so the order of the set of matrices you use for the multiplication is going to be very important. The first warping should be placed as the left-most matrix. The second warping to the right of that and so on. The second transformation is going to occur on the warped coordinates of the first. As an example for merging a few transforms into one matrix, the multiplication below represents the rotation of an image about a point $[\matrix{U&V}]$ anticlockwise from the horizontal axis by an angle of $\theta$. To do this, first we take the origin to $[\matrix{U&V}]$ through translation. Then we rotate the image, then we translate it back to where it was initially. These three operations can be merged in one operation by calculating the matrix multiplication below: $$\left[\matrix{1&0&U\cr0&1&V\cr{}0&0&1}\right] \left[\matrix{cos\theta&-sin\theta&0\cr sin\theta&cos\theta&0\cr 0&0&1}\right] \left[\matrix{1&0&-U\cr0&1&-V\cr{}0&0&1}\right]$$  File: gnuastro.info, Node: Resampling, Next: Invoking astwarp, Prev: Merging multiple warpings, Up: Warp 6.4.3 Resampling ---------------- A digital image is composed of discrete 'picture elements' or 'pixels'. When a real image is created from a camera or detector, each pixel's area is used to store the number of photo-electrons that were created when incident photons collided with that pixel's surface area. This process is called the 'sampling' of a continuous or analog data into digital data. When we change the pixel grid of an image, or "warp" it, we have to calculate the flux value of each pixel on the new grid based on the old grid, or resample it. Because of the calculation (as opposed to observation), any form of warping on the data is going to degrade the image and mix the original pixel values with each other. So if an analysis can be done on an unwarped data image, it is best to leave the image untouched and pursue the analysis. However as discussed in *note Warp:: this is not possible in some scenarios and re-sampling is necessary. When the FWHM of the PSF of the camera is much larger than the pixel scale (see *note Sampling theorem::) we are sampling the signal in a much higher resolution than the camera can offer. This is usually the case in many applications of image processing (nonastronomical imaging). In such cases, we can consider each pixel to be a point and not an area: the PSF doesn't vary much over a single pixel. Approximating a pixel's area to a point can significantly speed up the resampling and also the simplicity of the code. Because resampling becomes a problem of interpolation: points of the input grid need to be interpolated at certain other points (over the output grid). To increase the accuracy, you might also sample more than one point from within a pixel giving you more points for a more accurate interpolation in the output grid. However, interpolation has several problems. The first one is that it will depend on the type of function you want to assume for the interpolation. For example, you can choose a bi-linear or bi-cubic (the 'bi's are for the 2 dimensional nature of the data) interpolation method. For the latter there are various ways to set the constants(1). Such parametric interpolation functions can fail seriously on the edges of an image, or when there is a sharp change in value (for example, the bleeding saturation of bright stars in astronomical CCDs). They will also need normalization so that the flux of the objects before and after the warping is comparable. The parametric nature of these methods adds a level of subjectivity to the data (it makes more assumptions through the functions than the data can handle). For most applications this is fine (as discussed above: when the PSF is over-sampled), but in scientific applications where we push our instruments to the limit and the aim is the detection of the faintest possible galaxies or fainter parts of bright galaxies, we cannot afford this loss. Because of these reasons Warp will not use parametric interpolation techniques. Warp will do interpolation based on "pixel mixing"(2) or "area resampling". This is also similar to what the Hubble Space Telescope pipeline calls "Drizzling"(3). This technique requires no functions, it is thus non-parametric. It is also the closest we can get (make least assumptions) to what actually happens on the detector pixels. In pixel mixing, the basic idea is that you reverse-transform each output pixel to find which pixels of the input image it covers, and what fraction of the area of the input pixels are covered by that output pixel. We then multiply each input pixel's value by the fraction of its area that overlaps with the output pixel (between 0 to 1). The output's pixel value is derived by summing all these multiplications for the input pixels that it covers. Through this process, pixels are treated as an area not as a point (which is how detectors create the image), also the brightness (see *note Brightness flux magnitude::) of an object will be fully preserved. Since it involves the mixing of the input's pixel values, this pixel mixing method is a form of *note Spatial domain convolution::. Therefore, after comparing the input and output, you will notice that the output is slightly smoothed, thus boosting the more diffuse signal, but creating correlated noise. In astronomical imaging the correlated noise will be decreased later when you stack many exposures(4). If there are very high spatial-frequency signals in the image (for example, fringes) which vary on a scale _smaller than_ your output image pixel size (this is rarely the case in astronomical imaging), pixel mixing can cause ailiasing(5). Therefore, in case such fringes are present, they have to be calculated and removed separately (which would naturally be done in any astronomical reduction pipeline). Because of the PSF, no astronomical target has a sharp change in their signal. Thus this issue is less important for astronomical applications, see *note PSF::. To find the overlap area of the output pixel over the input pixels, we need to define polygons and clip them (find the overlap). Usually, it is sufficient to define a pixel with a four-vertice polygon. However, when a non-linear distortion (for example, ‘SIP’ or ‘TPV’) is present and the distortion is significant over an output pixel's size (usually far from the reference point), the shadow of the output pixel on the input grid can be curved. To account for such cases (which can only happen when correcting for non-linear distortions), Warp has the ‘--edgesampling’ option to sample the output pixel over more vertices. For more, see the description of this option in *note Align pixels with WCS considering distortions::. ---------- Footnotes ---------- (1) see <http://entropymine.com/imageworsener/bicubic/> for a nice introduction. (2) For a graphic demonstration see <http://entropymine.com/imageworsener/pixelmixing/>. (3) <http://en.wikipedia.org/wiki/Drizzle_(image_processing)> (4) If you are working on a single exposure image and see pronounced Moiré patterns after Warping, check *note Moire pattern in stacking and its correction:: for a possible way to reduce them (5) <http://en.wikipedia.org/wiki/Aliasing>  File: gnuastro.info, Node: Invoking astwarp, Prev: Resampling, Up: Warp 6.4.4 Invoking Warp ------------------- Warp will warp an input image into a new pixel grid by pixel mixing (see *note Resampling::). Without any options, Warp will remove any non-linear distortions from the image and align the output pixel coordinates to its WCS coordinates. Any homographic warp (for example, scaling, rotation, translation, projection, see *note Linear warping basics::) can also be done by calling the relevant option explicitly. The general template for invoking Warp is: $ astwarp [OPTIONS...] InputImage One line examples: ## Align image with celestial coordinates and remove any distortion $ astwarp image.fits ## Align four exposures to same pixel grid and stack them with ## Arithmetic program's sigma-clipped mean operator (out of many ## stacking operators, see Arithmetic's documentation). $ grid="--center=1.234,5.678 --width=1001,1001 --widthinpix --cdelt=0.2/3600" $ astwarp a.fits $grid --output=A.fits $ astwarp b.fits $grid --output=B.fits $ astwarp c.fits $grid --output=C.fits $ astwarp d.fits $grid --output=D.fits $ astarithmetic A.fits B.fits C.fits D.fits 4 5 0.2 sigclip-mean \ -g1 --output=stack.fits ## Warp a previously created mock image to the same pixel grid as the ## real image (including any distortions). $ astwarp mock.fits --gridfile=real.fits ## Rotate and then scale input image: $ astwarp --rotate=37.92 --scale=0.8 image.fits ## Scale, then translate the input image: $ astwarp --scale 8/3 --translate 2.1 image.fits ## Directly input a custom warping matrix (using fraction): $ astwarp --matrix=1/5,0,4/10,0,1/5,4/10,0,0,1 image.fits ## Directly input a custom warping matrix, with final numbers: $ astwarp --matrix="0.7071,-0.7071, 0.7071,0.7071" image.fits If any processing is to be done, Warp needs to be given a 2D FITS image. As in all Gnuastro programs, when an output is not explicitly set with the ‘--output’ option, the output filename will be set automatically based on the operation, see *note Automatic output::. For the full list of general options to all Gnuastro programs (including Warp), please see *note Common options::. Warp uses pixel mixing to derive the pixel values of the output image, see *note Resampling::. To be the most accurate, the input image will be read as a 64-bit double precision floating point dataset and all internal processing is done in this format. Upon writing, by default it will be converted to 32-bit single precision floating point type (actual observational data rarely have such precision!). In case you want a different output type, you can use the ‘--type’ option that is common to several Gnuastro programs. For example, if your input is a mock image without noise, and you want to preserve the 64-bit precision, use (with ‘--type=float64’. Just note that the file size will also be double! For more on the precision of various types, see *note Numeric data types::. By default (if no linear operation is requested), Warp will align the pixel grid of the input image to the WCS coordinates it contains. This operation and the the options that govern it are described in *note Align pixels with WCS considering distortions::. You can Warp an input image to the same pixel grid as a reference FITS file using the ‘--wcsfile’ option. In this case, the output image will take all the information needed from the reference WCS file and HDU/extension specified with ‘--wcshdu’, thus it will discard any other resampling options given. If you need any custom linear warping (independent of the WCS, see *note Linear warping basics::), you need to call the respective operation manually. These are described in *note Linear warps to be called explicitly::. Please note that you may not use both linear and non-linear modes simultaneously. For example, you cannot scale or rotate the image while removing its non-linear distortions at the same time. The following options are shared between both modes: ‘--hstartwcs=INT’ Specify the first header keyword number (line) that should be used to read the WCS information, see the full explanation in *note Invoking astcrop::. ‘--hendwcs=INT’ Specify the last header keyword number (line) that should be used to read the WCS information, see the full explanation in *note Invoking astcrop::. ‘-C FLT’ ‘--coveredfrac=FLT’ Depending on the warp, the output pixels that cover pixels on the edge of the input image, or blank pixels in the input image, are not going to be fully covered by input data. With this option, you can specify the acceptable covered fraction of such pixels (any value between 0 and 1). If you only want output pixels that are fully covered by the input image area (and are not blank), then you can set ‘--coveredfrac=1’ (which is the default!). Alternatively, a value of ‘0’ will keep output pixels that are even infinitesimally covered by the input. As a result, with ‘--coveredfrac=0’, the sum of the pixels in the input and output images will be exactly the same. * Menu: * Align pixels with WCS considering distortions:: Default operation. * Linear warps to be called explicitly:: Other warps.  File: gnuastro.info, Node: Align pixels with WCS considering distortions, Next: Linear warps to be called explicitly, Prev: Invoking astwarp, Up: Invoking astwarp 6.4.4.1 Align pixels with WCS considering distortions ..................................................... When none of the linear warps(1) are requested, Warp will align the input's pixel axes with it's WCS axes. In the process, any possibly existing distortion is also removed (such as ‘TPV’ and ‘SIP’). Usually, the WCS axes are the Right Ascension and Declination in equatorial coordinates. The output image's pixel grid is highly customizable through the options in this section. To learn about Warp's strategy to build the new pixel grid, see *note Resampling::. For strong distortions (that produce strong curvatures), you can fine-tune the area-based resampling with ‘--edgesampling’, as described below. On the other hand, sometimes you need to Warp an input image to the exact same grid of an already available reference FITS image with an existing WCS. If that image is already aligned, finding its center, number of pixels and pixel scale can be annoying (and just increase the complexity of your script). On the other hand, if that image is not aligned (for example, has a certain rotation in the sky, and has a different distortion), there are too many WCS parameters to set (some are not yet available explicitly in the options here)! For such scenarios, Warp has the ‘--gridfile’ option. When ‘--gridfile’ is called, the options below that are used to define the output's WCS will be ignored (these options: ‘--center’, ‘--widthinpix’, ‘--cdelt’, ‘--ctype’). In this case, the output's WCS and pixel grid will exactly match the image given to ‘--gridfile’ (including any rotation, pixel scale, or distortion or projection). *Set ‘--cdelt’ explicitly when you plan to stack many warped images:* To align some images and later stack them, it is necessary to be sure the pixel sizes of all the images are the same exactly. Most of the time the measured (during astrometry) pixel scale of the separate exposures, will be different in the second or third digit number after the decimal point. It is a normal/statistical error in measuring the astrometry. On a large image, these slight differences can cause different output sizes (of one or two pixels on a very large image). You can fix this by explicitly setting the pixel scale of each warped exposure with Warp's ‘--cdelt’ option that is described below. For good strategies of setting the pixel scale, see *note Moire pattern in stacking and its correction::. Another problem that may arise when aligning images to new pixel grids is the aliasing or visible Moiré patterns on the output image. This artifact should be removed if you are stacking several exposures, especially with a pointing pattern. If not see *note Moire pattern in stacking and its correction:: for ways to mitigate the visible patterns. See the description of ‘--gridfile’ below for more. *Known issue:* Warp's WCS-based aligning works best with WCSLIB version 7.12 (released in September 2022) and above. If you have an older version of WCSLIB, you might get a ‘wcss2p’ error otherwise. ‘-c FLT,FLT’ ‘--center=FLT,FLT’ WCS coordinates of the center of the central pixel of the output image. Since a central pixel is only defined with an odd number of pixels along both dimensions, the output will always have an odd number of pixels. When ‘--center’ or ‘--gridfile’ aren't given, the output will have the same central WCS coordinate as the input. Usually, the WCS coordinates are Right Ascension and Declination (when the first three characters of ‘CTYPE1’ and ‘CTYPE2’ are respectively ‘RA-’ and ‘DEC’). For more on the ‘CTYPEi’ keyword values, see ‘--ctype’ below. ‘-w INT[,INT]’ ‘--width=INT[,INT]’ Width and height of the output image in units of WCS (usually degrees). If you want the values to be read as pixels, also call the ‘--widthinpix’ option with ‘--width’. If a single value is given, Warp will use the same value for the second dimension (creating a square output). When ‘--width’ or ‘--gridfile’ aren't given, Warp will calculate the necessary size of the output pixel grid to fully contain the input image. Usually the WCS coordinates are in units of degrees (defined by the ‘CUNITi’ keywords of the FITS standard). But entering a certain number of arcseconds or arcminutes for the width can be annoying (you will usually need to go to the calculator!). To simplify such situations, this option also accepts division. For example ‘--width=1/60,2/60’ will make an aligned warp that is 1 arcmin along Right Ascension and 2 arcminutes along the Declination. With the ‘--widthinpix’ option the values will be interpreted as numbers of pixels. In this scenario, this option should be given _odd_ integer(s) that are greater than 1. This ensures that the output image can have a _central_ pixel. Recall that through the ‘--center’ option, you specify the WCS coordinate of the center of the central pixel. The central coordinate of an image with an even number of pixels will be on the edge of two pixels, so a "central" pixel is not well defined. If any of the given values are even, Warp will automatically add a single pixel (to make it an odd integer) and print a warning message. ‘--widthinpix’ When called, the values given to the ‘--width’ option will be interpreted as the number of pixels along each dimension(s). See the description of ‘--width’ for more. ‘-x FLT[,FLT]’ ‘--cdelt=FLT[,FLT]’ Coordinate deltas or increments (‘CDELTi’ in the FITS standard), or the pixel scale in both dimensions. If a single value is given, it will be used for both axes. In this way, the output's pixels will be squares on the sky at the reference point (as is usually expected!). When ‘--cdelt’ or ‘--gridfile’ aren't given, Warp will read the input's pixel scale and choose the larger of ‘CDELT1’ or ‘CDELT2’ so the output pixels are square. Usually (when dealing with RA and Dec, and the ‘CUNITi’s have a value of ‘deg’), the units of the given values are degrees/pixel. Warp allows you to easily convert from _arcsec_ to _degrees_ by simply appending a ‘/3600’ to the value. For example, for an output image of pixel scale ‘0.27’ arcsec/pixel, you can use ‘--cdelt=0.27/3600’. ‘--ctype=STR,STR’ The coordinate types of the output (‘CTYPE1’ and ‘CTYPE2’ keywords in the FITS standard), separated by a comma. By default the value to this option is '‘RA---TAN,DEC--TAN’'. However, if ‘--gridfile’ is given, this option is ignored. If you don't call ‘--ctype’ or ‘--gridfile’, the output WCS coordinates will be Right Ascension and Declination, while the output's projection will be Gnomonic (https://en.wikipedia.org/wiki/Gnomonic_projection), also known as Tangential (TAN). This combination is the most common in extra-galactic imaging surveys. For other coordinates and projections in your output use other values, as described below. According to the FITS standard version 4.0(2): ‘CTYPEi’ is the "type for the Intermediate-coordinate Axis $i$. Any coordinate type that is not covered by this Standard or an officially recognized FITS convention shall be taken to be linear. All non-linear coordinate system names must be expressed in '4–3' form: the first four characters specify the coordinate type, the fifth character is a hyphen (‘-’), and the remaining three characters specify an algorithm code for computing the world coordinate value. Coordinate types with names of fewer than four characters are padded on the right with hyphens, and algorithm codes with fewer than three characters are padded on the right with SPACE. Algorithm codes should be three characters" (see list of algorithm codes below). You can use any of the projection algorithms (last three characters of each coordinate's type) provided by your host WCSLIB (a mandatory dependency of Gnuastro; see *note WCSLIB::). For a very elaborate and complete description of projection algorithms in the FITS WCS standard, see Calabretta and Greisen 2002 (https://doi.org/10.1051/0004-6361:20021327). Wikipedia also has a nice article on Map projections (https://en.wikipedia.org/wiki/Map_projection). As an example, WCSLIB 7.12 (released in September 2022) has the following projection algorithms: ‘AZP’ Zenithal/azimuthal perspective ‘SZP’ Slant zenithal perspective ‘TAN’ Gnomonic (tangential) ‘STG’ Stereographic ‘SIN’ Orthographic/synthesis ‘ARC’ Zenithal/azimuthal equidistant ‘ZPN’ Zenithal/azimuthal polynomial ‘ZEA’ Zenithal/azimuthal equal area ‘AIR’ Airy ‘CYP’ Cylindrical perspective ‘CEA’ Cylindrical equal area ‘CAR’ Plate carree ‘MER’ Mercator ‘SFL’ Sanson-Flamsteed ‘PAR’ Parabolic ‘MOL’ Mollweide ‘AIT’ Hammer-Aitoff ‘COP’ Conic perspective ‘COE’ Conic equal area ‘COD’ Conic equidistant ‘COO’ Conic orthomorphic ‘BON’ Bonne ‘PCO’ Polyconic ‘TSC’ Tangential spherical cube ‘CSC’ COBE spherical cube ‘QSC’ Quadrilateralized spherical cube ‘HPX’ HEALPix ‘XPH’ HEALPix polar, aka "butterfly" ‘-G’ ‘--gridfile’ FITS filename containing the final pixel grid and WCS for the output image. The HDU/extension containing should be specified with ‘--gridhdu’ or its short option ‘-H’. The HDU should contain a WCS, otherwise, Warp will abort with a crash. When this option is used, Warp will read the respective WCS and the size of the image to resample the input. Since this WCS of this HDU contains everything needed to construct the WCS the options above will be ignored when ‘--gridfile’ is called: ‘--cdelt’, ‘--center’, and ‘--widthinpix’. In the example below, let's use this option to put the image of M51 in one survey (J-PLUS) into the pixel grid of another survey (SDSS) containing M51. The J-PLUS field of view is very large (almost $1.5\times1.5$ deg$^2$, in $9500\times9500$ pixels), while the field of view of SDSS in each filter is small (almost $0.3\times0.25$ deg$^2$ in $2048\times1489$ pixels). With the first two commands, we'll first download the two images, then we'll extract the portion of the J-PLUS image that overlaps with the SDSS image and align it exactly to SDSS's pixel grid. Note that these are the two images that were used in two of Gnuastro's tutorials: *note Building the extended PSF:: and *note Detecting large extended targets::. ## Download the J-PLUS DR2 image of M51 in the r filter. $ jplusbase="http://archive.cefca.es/catalogues/vo/siap" $ wget $jplusbase/jplus-dr2/get_fits?id=67510 \ -O jplus.fits.fz ## Download the SDSS image in r filter and decompress it ## (Bzip2 is not a standard FITS compression algorithm). $ sdssbase=https://dr12.sdss.org/sas/dr12/boss/photoObj/frames $ wget $sdssbase/301/3716/6/frame-r-003716-6-0117.fits.bz2 \ -O sdss.fits.bz2 $ bunzip2 sdss.fits.bz2 ## Warp and crop the J-PLUS image so the output exactly ## matches the SDSS pixel gid. $ astwarp jplus.fits.fz --gridfile=sdss.fits --gridhdu=0 \ --output=jplus-on-sdss.fits ## View the two images side-by-side: $ astscript-fits-view sdss.fits jplus-on-sdss.fits As the example above shows, this option can therefore be very useful when comparing images from multiple surveys. But there are other very interesting use cases also. For example, when you are making a mock dataset and need to add distortion to the image so it matches the distortion of your camera. Through ‘--gridhdu’, you can easily insert that distortion over the mock image and put the mock image in the pixel grid of an exposure. ‘-H’ ‘--gridhdu’ The HDU/extension of the reference WCS file specified with option ‘--wcsfile’ or its short version ‘-H’ (see the description of ‘--wcsfile’ for more). ‘--edgesampling=INT’ Number of extra samplings along the edge of a pixel. By default the value is ‘0’ (the output pixel's polygon over the input will be a quadrilateral (a polygon with four edges/vertices). Warp uses pixel mixing to derive the output pixel values. For a complete introduction, see *note Resampling::, and in particular its later part on distortions. To account for this possible curvature due to distortion, you can use this option. For example, ‘--edgesampling=1’ will add one extra vertice in the middle of each edge of the output pixel, producing an 8-vertice polygon. Similarly, ‘--edgesampling=5’ will put 5 extra vertices along each edge, thus sampling the shape (and possible curvature) of the output pixel over an input pixel with $4+5\times4=24$ vertice polygon. Since the polygon clipping will happen for every output pixel, a higher value to this option can significantly reduce the running speed and increase the RAM usage of Warp; so use it with caution: in most cases the default ‘--edgesampling=0’ is sufficient. To visually inspect the curvature effect on pixel area of the input image, see option ‘--pixelareaonwcs’ in *note Pixel information images::. ‘--checkmaxfrac’ Check each output pixel's maximum coverage on the input data and append as the '‘MAX-FRAC’' HDU/extension to the output aligned image. This option provides an easy visual inspection for possible recurring patterns or fringes caused by aligning to a new pixel grid. For more detail about the origin of these patterns and how to mitigate them see *note Moire pattern in stacking and its correction::. Note that the '‘MAX-FRAC’' HDU/extension is not showing the patterns themselves; It represents the largest area coverage on the input data for that particular pixel. The values can be in the range between 0 to 1, where 1 means the pixel is covering at least one complete pixel of the input data. On the other hand, 0 means that the pixel is not covering any pixels of the input at all. ---------- Footnotes ---------- (1) For linear warps, see *note Linear warps to be called explicitly::. (2) FITS standard version 4.0: <https://fits.gsfc.nasa.gov/standard40/fits_standard40aa-le.pdf>  File: gnuastro.info, Node: Linear warps to be called explicitly, Prev: Align pixels with WCS considering distortions, Up: Invoking astwarp 6.4.4.2 Linear warps to be called explicitly ............................................ Linear warps include operations like rotation, scaling, sheer, etc. For an introduction, see *note Linear warping basics::. These are warps that don't depend on the WCS of the image and should be explicitly requested. To align the input pixel coordinates with the WCS coordinates, see *note Align pixels with WCS considering distortions::. While they will correct any existing WCS based on the warp, they can also operate on images without any WCS. For example, you have a mock image that doesn't (yet!) have its mock WCS, and it has been created on an over-sampled grid and convolved with an over-sampled PSF. In this scenario, you can use the ‘--scale’ option to under-sample it to your desired resolution. This is similar to the *note Sufi simulates a detection:: tutorial. Linear warps must be specified as command-line options, either as (possibly multiple) modular warpings (for example, ‘--rotate’, or ‘--scale’), or directly as a single raw matrix (with ‘--matrix’). If specified together, the latter (direct matrix) will take precedence and all the modular warpings will be ignored. Any number of modular warpings can be specified on the command-line and configuration files. If more than one modular warping is given, all will be merged to create one warping matrix. As described in *note Merging multiple warpings::, matrix multiplication is not commutative, so the order of specifying the modular warpings on the command-line, and/or configuration files makes a difference (see *note Configuration file precedence::). The full list of modular warpings and the other options particular to Warp are described below. The values to the warping options (modular warpings as well as ‘--matrix’), are a sequence of at least one number. Each number in this sequence is separated from the next by a comma (<,>). Each number can also be written as a single fraction (with a forward-slash </> between the numerator and denominator). Space and Tab characters are permitted between any two numbers, just do not forget to quote the whole value. Otherwise, the value will not be fully passed onto the option. See the examples above as a demonstration. Based on the FITS standard, integer values are assigned to the center of a pixel and the coordinate [1.0, 1.0] is the center of the first pixel (bottom left of the image when viewed in SAO DS9). So the coordinate center [0.0, 0.0] is half a pixel away (in each axis) from the bottom left vertex of the first pixel. The resampling that is done in Warp (see *note Resampling::) is done on the coordinate axes and thus directly depends on the coordinate center. In some situations this if fine, for example, when rotating/aligning a real image, all the edge pixels will be similarly affected. But in other situations (for example, when scaling an over-sampled mock image to its intended resolution, this is not desired: you want the center of the coordinates to be on the corner of the pixel. In such cases, you can use the ‘--centeroncorner’ option which will shift the center by $0.5$ before the main warp, then shift it back by $-0.5$ after the main warp. ‘-r FLT’ ‘--rotate=FLT’ Rotate the input image by the given angle in degrees: $\theta$ in *note Linear warping basics::. Note that commonly, the WCS structure of the image is set such that the RA is the inverse of the image horizontal axis which increases towards the right in the FITS standard and as viewed by SAO DS9. So the default center for rotation is on the right of the image. If you want to rotate about other points, you have to translate the warping center first (with ‘--translate’) then apply your rotation and then return the center back to the original position (with another call to ‘--translate’, see *note Merging multiple warpings::. ‘-s FLT[,FLT]’ ‘--scale=FLT[,FLT]’ Scale the input image by the given factor(s): $M$ and $N$ in *note Linear warping basics::. If only one value is given, then both image axes will be scaled with the given value. When two values are given (separated by a comma), the first will be used to scale the first axis and the second will be used for the second axis. If you only need to scale one axis, use ‘1’ for the axis you do not need to scale. The value(s) can also be written (on the command-line or in configuration files) as a fraction. ‘-f FLT[,FLT]’ ‘--flip=FLT[,FLT]’ Flip the input image around the given axis(s). If only one value is given, then both image axes are flipped. When two values are given (separated by acomma), you can choose which axis to flip over. ‘--flip’ only takes values ‘0’ (for no flip), or ‘1’ (for a flip). Hence, if you want to flip by the second axis only, use ‘--flip=0,1’. ‘-e FLT[,FLT]’ ‘--shear=FLT[,FLT]’ Shear the input image by the given value(s): $A$ and $B$ in *note Linear warping basics::. If only one value is given, then both image axes will be sheared with the given value. When two values are given (separated by a comma), the first will be used to shear the first axis and the second will be used for the second axis. If you only need to shear along one axis, use ‘0’ for the axis that must be untouched. The value(s) can also be written (on the command-line or in configuration files) as a fraction. ‘-t FLT[,FLT]’ ‘--translate=FLT[,FLT]’ Translate (move the center of coordinates) the input image by the given value(s): $c$ and $f$ in *note Linear warping basics::. If only one value is given, then both image axes will be translated by the given value. When two values are given (separated by a comma), the first will be used to translate the first axis and the second will be used for the second axis. If you only need to translate along one axis, use ‘0’ for the axis that must be untouched. The value(s) can also be written (on the command-line or in configuration files) as a fraction. ‘-p FLT[,FLT]’ ‘--project=FLT[,FLT]’ Apply a projection to the input image by the given values(s): $g$ and $h$ in *note Linear warping basics::. If only one value is given, then projection will apply to both axes with the given value. When two values are given (separated by a comma), the first will be used to project the first axis and the second will be used for the second axis. If you only need to project along one axis, use ‘0’ for the axis that must be untouched. The value(s) can also be written (on the command-line or in configuration files) as a fraction. ‘-m STR’ ‘--matrix=STR’ The warp/transformation matrix. All the elements in this matrix must be separated by commas(<,>) characters and as described above, you can also use fractions (a forward-slash between two numbers). The transformation matrix can be either a 2 by 2 (4 numbers), or a 3 by 3 (9 numbers) array. In the former case (if a 2 by 2 matrix is given), then it is put into a 3 by 3 matrix (see *note Linear warping basics::). The determinant of the matrix has to be non-zero and it must not contain any non-number values (for example, infinities or NaNs). The elements of the matrix have to be written row by row. So for the general Homography matrix of *note Linear warping basics::, it should be called with ‘--matrix=a,b,c,d,e,f,g,h,1’. The raw matrix takes precedence over all the modular warping options listed above, so if it is called with any number of modular warps, the latter are ignored. ‘--centeroncorner’ Put the center of coordinates on the corner of the first (bottom-left when viewed in SAO DS9) pixel. This option is applied after the final warping matrix has been finalized: either through modular warpings or the raw matrix. See the explanation above for coordinates in the FITS standard to better understand this option and when it should be used. ‘-k’ ‘--keepwcs’ Do not correct the WCS information of the input image and save it untouched to the output image. By default the WCS (World Coordinate System) information of the input image is going to be corrected in the output image so the objects in the image are at the same WCS coordinates. But in some cases it might be useful to keep it unchanged (for example, to correct alignments).  File: gnuastro.info, Node: Data analysis, Next: Data modeling, Prev: Data manipulation, Up: Top 7 Data analysis *************** Astronomical datasets (images or tables) contain very valuable information, the tools in this section can help in analyzing, extracting, and quantifying that information. For example, getting general or specific statistics of the dataset (with *note Statistics::), detecting signal within a noisy dataset (with *note NoiseChisel::), or creating a catalog from an input dataset (with *note MakeCatalog::). * Menu: * Statistics:: Calculate dataset statistics. * NoiseChisel:: Detect objects in an image. * Segment:: Segment detections based on signal structure. * MakeCatalog:: Catalog from input and labeled images. * Match:: Match two datasets.  File: gnuastro.info, Node: Statistics, Next: NoiseChisel, Prev: Data analysis, Up: Data analysis 7.1 Statistics ============== The distribution of values in a dataset can provide valuable information about it. For example, in an image, if it is a positively skewed distribution, we can see that there is significant data in the image. If the distribution is roughly symmetric, we can tell that there is no significant data in the image. In a table, when we need to select a sample of objects, it is important to first get a general view of the whole sample. On the other hand, you might need to know certain statistical parameters of the dataset. For example, if we have run a detection algorithm on an image, and we want to see how accurate it was, one method is to calculate the average of the undetected pixels and see how reasonable it is (if detection is done correctly, the average of undetected pixels should be approximately equal to the background value, see *note Sky value::). In a table, you might have calculated the magnitudes of a certain class of objects and want to get some general characteristics of the distribution immediately on the command-line (very fast!), to possibly change some parameters. The Statistics program is designed for such situations. * Menu: * Histogram and Cumulative Frequency Plot:: Basic definitions. * 2D Histograms:: Plotting the distribution of two variables. * Least squares fitting:: Fitting with various parametric functions. * Sky value:: Definition and derivation of the Sky value. * Invoking aststatistics:: Arguments and options to Statistics.  File: gnuastro.info, Node: Histogram and Cumulative Frequency Plot, Next: 2D Histograms, Prev: Statistics, Up: Statistics 7.1.1 Histogram and Cumulative Frequency Plot --------------------------------------------- Histograms and the cumulative frequency plots are both used to visually study the distribution of a dataset. A histogram shows the number of data points which lie within pre-defined intervals (bins). So on the horizontal axis we have the bin centers and on the vertical, the number of points that are in that bin. You can use it to get a general view of the distribution: which values have been repeated the most? how close/far are the most significant bins? Are there more values in the larger part of the range of the dataset, or in the lower part? Similarly, many very important properties about the dataset can be deduced from a visual inspection of the histogram. In the Statistics program, the histogram can be either output to a table to plot with your favorite plotting program(1), or it can be shown with ASCII characters on the command-line, which is very crude, but good enough for a fast and on-the-go analysis, see the example in *note Invoking aststatistics::. The width of the bins is only necessary parameter for a histogram. In the limiting case that the bin-widths tend to zero (while assuming the number of points in the dataset tend to infinity), then the histogram will tend to the probability density function (https://en.wikipedia.org/wiki/Probability_density_function) of the distribution. When the absolute number of points in each bin is not relevant to the study (only the shape of the histogram is important), you can _normalize_ a histogram so like the probability density function, the sum of all its bins will be one. In the cumulative frequency plot of a distribution, the horizontal axis is the sorted data values and the y axis is the index of each data in the sorted distribution. Unlike a histogram, a cumulative frequency plot does not involve intervals or bins. This makes it less prone to any sort of bias or error that a given bin-width would have on the analysis. When a larger number of the data points have roughly the same value, then the cumulative frequency plot will become steep in that vicinity. This occurs because on the horizontal axis, there is little change while on the vertical axis, the indexes constantly increase. Normalizing a cumulative frequency plot means to divide each index (y axis) by the total number of data points (or the last value). Unlike the histogram which has a limited number of bins, ideally the cumulative frequency plot should have one point for every data element. Even in small datasets (for example, a $200\times200$ image) this will result in an unreasonably large number of points to plot (40000)! As a result, for practical reasons, it is common to only store its value on a certain number of points (intervals) in the input range rather than the whole dataset, so you should determine the number of bins you want when asking for a cumulative frequency plot. In Gnuastro (and thus the Statistics program), the number reported for each bin is the total number of data points until the larger interval value for that bin. You can see an example histogram and cumulative frequency plot of a single dataset under the ‘--asciihist’ and ‘--asciicfp’ options of *note Invoking aststatistics::. So as a summary, both the histogram and cumulative frequency plot in Statistics will work with bins. Within each bin/interval, the lower value is considered to be within then bin (it is inclusive), but its larger value is not (it is exclusive). Formally, an interval/bin between a and b is represented by [a, b). When the over-all range of the dataset is specified (with the ‘--greaterequal’, ‘--lessthan’, or ‘--qrange’ options), the acceptable values of the dataset are also defined with a similar inclusive-exclusive manner. But when the range is determined from the actual dataset (none of these options is called), the last element in the dataset is included in the last bin's count. ---------- Footnotes ---------- (1) We recommend PGFPlots (http://pgfplots.sourceforge.net/) which generates your plots directly within TeX (the same tool that generates your document).  File: gnuastro.info, Node: 2D Histograms, Next: Least squares fitting, Prev: Histogram and Cumulative Frequency Plot, Up: Statistics 7.1.2 2D Histograms ------------------- In *note Histogram and Cumulative Frequency Plot:: the concept of histograms were introduced on a single dataset. But they are only useful for viewing the distribution of a single variable (column in a table). In many contexts, the distribution of two variables in relation to each other may be of interest. For example, the color-magnitude diagrams in astronomy, where the horizontal axis is the luminosity or magnitude of an object, and the vertical axis is the color. Scatter plots are useful to see these relations between the objects of interest when the number of the objects is small. As the density of points in the scatter plot increases, the points will fall over each other and just make a large connected region hide potentially interesting behaviors/correlations in the densest regions. This is where 2D histograms can become very useful. A 2D histogram is composed of 2D bins (boxes or pixels), just as a 1D histogram consists of 1D bins (lines). The number of points falling within each box/pixel will then be the value of that box. Added with a color-bar, you can now clearly see the distribution independent of the density of points (for example, you can even visualize it in log-scale if you want). Gnuastro's Statistics program has the ‘--histogram2d’ option for this task. It takes a single argument (either ‘table’ or ‘image’) that specifies the format of the output 2D histogram. The two formats will be reviewed separately in the sub-sections below. But let's start with the generalities that are common to both (related to the input, not the output). You can specify the two columns to be shown using the ‘--column’ (or ‘-c’) option. So if you want to plot the color-magnitude diagram from a table with the ‘MAG-R’ column on the horizontal and ‘COLOR-G-R’ on the vertical column, you can use ‘--column=MAG-r,COLOR-G-r’. The number of bins along each dimension can be set with ‘--numbins’ (for first input column) and ‘--numbins2’ (for second input column). Without specifying any range, the full range of values will be used in each dimension. If you only want to focus on a certain interval of the values in the columns in any dimension you can use the ‘--greaterequal’ and ‘--lessthan’ options to limit the values along the first/horizontal dimension and ‘--greaterequal2’ and ‘--lessthan2’ options for the second/vertical dimension. * Menu: * 2D histogram as a table for plotting:: Format and usage in table format. * 2D histogram as an image:: Format and usage in image format  File: gnuastro.info, Node: 2D histogram as a table for plotting, Next: 2D histogram as an image, Prev: 2D Histograms, Up: 2D Histograms 7.1.2.1 2D histogram as a table for plotting ............................................ When called with the ‘--histogram=table’ option, Statistics will output a table file with three columns that have the information of every box as a column. If you asked for ‘--numbins=N’ and ‘--numbins2=M’, all three columns will have $M\times N$ rows (one row for every box/pixel of the 2D histogram). The first and second columns are the position of the box along the first and second dimensions. The third column has the number of input points that fall within that box/pixel. For example, you can make high-quality plots within your paper (using the same LaTeX engine, thus blending very nicely with your text) using PGFPlots (https://ctan.org/pkg/pgfplots). Below you can see one such minimal example, using your favorite text editor, save it into a file, make the two small corrections in it, then run the commands shown at the top. This assumes that you have LaTeX installed, if not the steps to install a minimally sufficient LaTeX package on your system, see the respective section in *note Bootstrapping dependencies::. The two parts that need to be corrected are marked with '‘%% <--’': the first one (‘XXXXXXXXX’) should be replaced by the value to the ‘--numbins’ option which is the number of bins along the first dimension. The second one (‘FILE.txt’) should be replaced with the name of the file generated by Statistics. %% Replace 'XXXXXXXXX' with your selected number of bins in the first %% dimension. %% %% Then run these commands to build the plot in a LaTeX command. %% mkdir tikz %% pdflatex --shell-escape --halt-on-error report.tex \documentclass{article} %% Load PGFPlots and set it to build the figure separately in a 'tikz' %% directory (which has to exist before LaTeX is run). This %% "externalization" is very useful to include the commands of multiple %% plots in the middle of your paper/report, but also have the plots %% separately to use in slides or other scenarios. \usepackage{pgfplots} \usetikzlibrary{external} \tikzexternalize \tikzsetexternalprefix{tikz/} %% Define colormap for the PGFPlots 2D histogram \pgfplotsset{ /pgfplots/colormap={hsvwhitestart}{ rgb255(0cm)=(255,255,255) rgb255(0.10cm)=(128,0,128) rgb255(0.5cm)=(0,0,230) rgb255(1.cm)=(0,255,255) rgb255(2.5cm)=(0,255,0) rgb255(3.5cm)=(255,255,0) rgb255(6cm)=(255,0,0) } } %% Start the prinable document \begin{document} You can write a full paper here and include many figures! Describe what the two axes are, and how you measured them. Also, do not forget to explain what it shows and how to interpret it. You also have separate PDFs for every figure in the `tikz' directory. Feel free to change this text. %% Draw the plot. \begin{tikzpicture} \small \begin{axis}[ width=\linewidth, view={0}{90}, colorbar horizontal, xlabel=X axis, ylabel=Y axis, ylabel shift=-0.1cm, colorbar style={at={(0,1.01)}, anchor=south west, xticklabel pos=upper}, ] \addplot3[ surf, shader=flat corner, mesh/ordering=rowwise, mesh/cols=XXXXXXXXX, %% <-- Number of bins in 1st column. ] file {FILE.txt}; %% <-- Name of aststatistics output. \end{axis} \end{tikzpicture} %% End the printable document. \end{document} Let's assume you have put the LaTeX source above, into a plain-text file called ‘report.tex’. The PGFPlots call above is configured to build the plots as separate PDF files in a ‘tikz/’ directory(1). This allows you to directly load those PDFs in your slides or other reports. Therefore, before building the PDF report, you should first make a ‘tikz/’ directory: $ mkdir tikz To build the final PDF, you should run ‘pdflatex’ with the ‘--shell-escape’ option, so it can build the separate PDF(s) separately. We are also adding the ‘--halt-on-error’ so it immediately aborts in the case of an error (in the case of an error, by default LaTeX will not abort, it will stop and ask for your input to temporarily change things and try fixing the error, but it has a special interface which can be hard to master). $ pdflatex --shell-escape --halt-on-error report.tex You can now open ‘report.pdf’ to see your very high quality 2D histogram within your text. And if you need the plots separately (for example, for slides), you can take the PDF inside the ‘tikz/’ directory. ---------- Footnotes ---------- (1) TiKZ (https://www.ctan.org/pkg/pgf) is the name of the lower-level engine behind PGPlots.  File: gnuastro.info, Node: 2D histogram as an image, Prev: 2D histogram as a table for plotting, Up: 2D Histograms 7.1.2.2 2D histogram as an image ................................ When called with the ‘--histogram=image’ option, Statistics will output a FITS file with an image/array extension. If you asked for ‘--numbins=N’ and ‘--numbins2=M’ the image will have a size of $N\times M$ pixels (one pixel per 2D bin). Also, the FITS image will have a linear WCS that is scaled to the 2D bin size along each dimension. So when you hover your mouse over any part of the image with a FITS viewer (for example, SAO DS9), besides the number of points in each pixel, you can directly also see "coordinates" of the pixels along the two axes. You can also use the optimized and fast FITS viewer features for many aspects of visually inspecting the distributions (which we will not go into further). For example, let's assume you want to derive the color-magnitude diagram (CMD) of the UVUDF survey (http://uvudf.ipac.caltech.edu). You can run the first command below to download the table with magnitudes of objects in many filters and run the second command to see general column metadata after it is downloaded. $ wget http://asd.gsfc.nasa.gov/UVUDF/uvudf_rafelski_2015.fits.gz $ asttable uvudf_rafelski_2015.fits.gz -i Let's assume you want to find the color to be between the ‘F606W’ and ‘F775W’ filters (roughly corresponding to the g and r filters in ground-based imaging). However, the original table does not have color columns (there would be too many combinations!). Therefore you can use the *note Column arithmetic:: feature of Gnuastro's Table program for deriving a new table with the ‘F775W’ magnitude in one column and the difference between the ‘F606W’ and ‘F775W’ on the other column. With the second command, you can see the actual values if you like. $ asttable uvudf_rafelski_2015.fits.gz -cMAG_F775W \ -c'arith MAG_F606W MAG_F775W -' \ --colmetadata=ARITH_1,F606W-F775W,"AB mag" -ocmd.fits $ asttable cmd.fits You can now construct your 2D histogram as a $100\times100$ pixel FITS image with this command (assuming you want ‘F775W’ magnitudes between 22 and 30, colors between -1 and 3 and 100 bins in each dimension). Note that without the ‘--manualbinrange’ option the range of each axis will be determined by the values within the columns (which may be larger or smaller than your desired large). aststatistics cmd.fits -cMAG_F775W,F606W-F775W --histogram2d=image \ --numbins=100 --greaterequal=22 --lessthan=30 \ --numbins2=100 --greaterequal2=-1 --lessthan2=3 \ --manualbinrange --output=cmd-2d-hist.fits If you have SAO DS9, you can now open this FITS file as a normal FITS image, for example, with the command below. Try hovering/zooming over the pixels: not only will you see the number of objects in the UVUDF catalog that fall in each bin, but you also see the ‘F775W’ magnitude and color of that pixel also. $ ds9 cmd-2d-hist.fits -cmap sls -zoom to fit With the first command below, you can activate the grid feature of DS9 to actually see the coordinate grid, as well as values on each line. With the second command, DS9 will even read the labels of the axes and use them to generate an almost publication-ready plot. $ ds9 cmd-2d-hist.fits -cmap sls -zoom to fit -grid yes $ ds9 cmd-2d-hist.fits -cmap sls -zoom to fit -grid yes \ -grid type publication If you are happy with the grid, coloring and the rest, you can also use ds9 to save this as a JPEG image to directly use in your documents/slides with these extra DS9 options (DS9 will write the image to ‘cmd-2d.jpeg’ and quit immediately afterwards): $ ds9 cmd-2d-hist.fits -cmap sls -zoom 4 -grid yes \ -grid type publication -saveimage cmd-2d.jpeg -quit This is good for a fast progress update. But for your paper or more official report, you want to show something with higher quality. For that, you can use the PGFPlots package in LaTeX to add axes in the same font as your text, sharp grids and many other elegant/powerful features (like over-plotting interesting points and lines). But to load the 2D histogram into PGFPlots first you need to convert the FITS image into a more standard format, for example, PDF. We will use Gnuastro's *note ConvertType:: for this, and use the ‘sls-inverse’ color map (which will map the pixels with a value of zero to white): $ astconvertt cmd-2d-hist.fits --colormap=sls-inverse \ --borderwidth=0 -ocmd-2d-hist.pdf Below you can see a minimally working example of how to add axis numbers, labels and a grid to the PDF generated above. Copy and paste the LaTeX code below into a plain-text file called ‘cmd-report.tex’ Notice the ‘xmin’, ‘xmax’, ‘ymin’, ‘ymax’ values and how they are the same as the range specified above. \documentclass{article} \usepackage{pgfplots} \dimendef\prevdepth=0 \begin{document} You can write all you want here... \begin{tikzpicture} \begin{axis}[ enlargelimits=false, grid, axis on top, width=\linewidth, height=\linewidth, xlabel={Magnitude (F775W)}, ylabel={Color (F606W-F775W)}] \addplot graphics[xmin=22, xmax=30, ymin=-1, ymax=3] {cmd-2d-hist.pdf}; \end{axis} \end{tikzpicture} \end{document} Run this command to build your PDF (assuming you have LaTeX and PGFPlots). $ pdflatex cmd-report.tex The improved quality, blending in with the text, vector-graphics resolution and other features make this plot pleasing to the eye, and let your readers focus on the main point of your scientific argument. PGFPlots can also built the PDF of the plot separately from the rest of the paper/report, see *note 2D histogram as a table for plotting:: for the necessary changes in the preamble.  File: gnuastro.info, Node: Least squares fitting, Next: Sky value, Prev: 2D Histograms, Up: Statistics 7.1.3 Least squares fitting --------------------------- After completing a good observation, doing robust data reduction and finalizing the measurements, it is commonly necessary to parameterize the derived correlations. For example, you have derived the radial profile of the PSF of your image (see *note Building the extended PSF::). You now want to parameterize the radial profile to estimate the slope. Alternatively, you may have found the star formation rate and stellar mass of your sample of galaxies. Now, you want to derive the star formation main sequence as a parametric relation between the two. The fitting functions below can be used for such purposes. Gnuastro's least squares fitting features are just wrappers over the least squares fitting methods of the linear (https://www.gnu.org/software/gsl/doc/html/lls.html) and nonlinear (https://www.gnu.org/software/gsl/doc/html/nls.html) least-squares fitting functions of the GNU Scientific Library (GSL). For the low-level details and equations of the methods, please see the GSL documentation. The names have been preserved here in Gnuastro to simplify the connection with GSL and follow the details in the detailed documentation there. GSL is a very low-level library, designed for maximal portability to many scenarios, and power. Therefore calling GSL's functions directly for a fast operation requires a good knowledge of the C programming language and many lines of code. As a low-level library, GSL is designed to be the back-end of higher-level programs (like Gnuastro). Through the Statistics program, in Gnuastro we provide a high-level interface to access to GSL's very powerful least squares fitting engine to read/write from/to standard data formats in astronomy. A fully working example is shown below. To activate fitting in Statistics, simply give your desired fitting method to the ‘--fit’ option (for the full list of acceptable methods, see *note Fitting options::). For example, with the command below, we'll build a fake measurement table (including noise) from the polynomial $y=1.23-4.56x+7.89x^2$. To understand how this equation translates to the command below (part before ‘set-y’), see *note Reverse polish notation:: and *note Column arithmetic::. We will set the X axis to have values from 0.1 to 2, with steps of 0.01 and let's assume a random Gaussian noise to each $y$ measurement: $\sigma_y=0.1y$. To make the random number generation exactly reproducible, we are also setting the seed (see *note Generating random numbers::, which also uses GSL as a backend). To learn more about the ‘mknoise-sigma’ operator, see the Arithmetic program's *note Random number generators::. $ export GSL_RNG_SEED=1664015492 $ seq 0.1 0.01 2 \ | asttable --output=noisy.fits --envseed -c1 \ -c'arith 1.23 -4.56 $1 x + 7.89 $1 x $1 x + set-y \ 0.1 y x set-yerr \ y yerr mknoise-sigma yerr' \ --colmetadata=1,X --colmetadata=2,Y \ --colmetadata=3,Yerr Let's have a look at the output plot with TOPCAT using the command below. $ astscript-fits-view noisy.fits To see the error-bars, after opening the scatter plot, go into the "Form" tab for that plot. Click on the button with a green "+" sign followed by "Forms" and select "XYError". On the side-menu, in front of "Y Positive Error", select the ‘Yerr’ column of the input table. As you see, the error bars do indeed increase for higher X axis values. Since we have error bars in this example (as in any measurement), we can use weighted fitting. Also, this isn't a linear relation, so we'll use a polynomial to second order (a maximum power of 2 in the form of $Y=c_0+c_1X+c_2X^2$): $ aststatistics noisy.fits -cX,Y,Yerr --fit=polynomial-weighted \ --fitmaxpower=2 Statistics (GNU Astronomy Utilities) 0.22 ------- Fitting results (remove extra info with '--quiet' or '-q) Input file: noisy.fits (hdu: 1) with 191 non-blank rows. X column: X Y column: Y Weight column: Yerr [Standard deviation of Y in each row] Fit function: Y = c0 + (c1 * X^1) + (c2 * X^2) + ... (cN * X^N) N: 2 c0: +1.2286211608 c1: -4.5127796636 c2: +7.8435883943 Covariance matrix: +0.0010496001 -0.0039928488 +0.0028367390 -0.0039928488 +0.0175244127 -0.0138030778 +0.0028367390 -0.0138030778 +0.0128129806 Reduced chi^2 of fit: +0.9740670090 As you see from the elaborate message, the weighted polynomial fitting has found return the $c_0$, $c_1$ and $c_2$ of $Y=c_0+c_1X+c_2X^2$ that best represents the data we inserted. Our input values were $c_0=1.23$, $c_1=-4.56$ and $c_2=7.89$, and the fitted values are $c_0\approx1.2286$, $c_1\approx-4.5128$ and $c_2\approx7.8436$ (which is statistically a very good fit! given that we knew the original values a-priori!). The covariance matrix is also calculated, it is necessary to calculate error bars on the estimations and contains a lot of information (e.g., possible correlations between parameters). Finally, the reduced $\chi^2$ (or $\chi_{red}^2$) of the fit is also printed (which was the measure to minimize). A $\chi_{red}^2\approx1$ shows a good fit. This is good for real-world scenarios when you don't know the original values a-priori. For more on interpreting $\chi_{red}^2\approx1$, see Andrae et al. 2010 (https://arxiv.org/abs/1012.3754). The comparison of fitted and input values look pretty good, but nothing beats visual inspection! To see how this looks compared to the data, let's open the table again: $ astscript-fits-view noisy.fits Repeat the steps below to show the scatter plot and error-bars. Then, go to the "Layers" menu and select "Add Function Control". Use the results above to fill the box in front of "Function Expression": ‘1.2286+(-4.5128*x)+(7.8436*x*x)’. You will see that the second order polynomial falls very nicely over the points(1). But this fit is not perfect: it also has errors (inherited from the measurement errors). We need the covariance matrix to estimate the errors on each point, and that can be complex to do by hand. Fortunately GSL has the tools to easily estimate the function at any point and also calculate its corresponding error. To access this feature within Gnuastro's Statistics program, you should use the ‘--fitestimate’ option. You can either give an independent table file name (with ‘--fitestimatehdu’ and ‘--fitestimatecol’ to specify the HDU and column in that file), or just ‘self’ so it uses the same X axis column that was used in this fit. Let's use the easier case: $ aststatistics noisy.fits -cX,Y,Yerr --fit=polynomial-weighted \ --fitmaxpower=2 --fitestimate=self --output=est.fits ...[[truncated; same as above]]... Requested estimation: Written to: est.fits The first lines of the printed text are the same as before. Afterwards, you will see a new line printed in the output, saying that the estimation was written in ‘est.fits’. You can now inspect the two tables with TOPCAT again with the command below. After TOPCAT opens, plot both scatter plots: $ astscript-fits-view noisy.fits est.fits It is clear that they fall nicely on top of each other. The ‘est.fits’ table also has a third column with error bars. You can follow the same steps before and draw the error bars to see how they compare with the scatter of the measured data. They are much smaller than the error in each point because we had a very good sampling of the function in our noisy data. Another useful point with the estimated output file is that it contains all the fitting outputs as keywords in the header: $ astfits est.fits -h1 ...[[truncated]]... / Fit results FITTYPE = 'polynomial-weighted' / Functional form of the fitting. FITMAXP = 2 / Maximum power of polynomial. FITIN = 'noisy.fits' / Name of file with input columns. FITINHDU= '1 ' / Name or Number of HDU with input cols. FITXCOL = 'X ' / Name or Number of independent (X) col. FITYCOL = 'Y ' / Name or Number of measured (Y) column. FITWCOL = 'Yerr ' / Name or Number of weight column. FITWNAT = 'Standard deviation' / Nature of weight column. FRDCHISQ= 0.974067008958516 / Reduced chi^2 of fit. FITC0 = 1.22862116084727 / C0: multiple of x^0 in polynomial FITC1 = -4.51277966356177 / C1: multiple of x^1 in polynomial FITC2 = 7.84358839431161 / C2: multiple of x^2 in polynomial FCOV11 = 0.00104960011629718 / Covariance matrix element (1,1). FCOV12 = -0.00399284880859776 / Covariance matrix element (1,2). FCOV13 = 0.00283673901863388 / Covariance matrix element (1,3). FCOV21 = -0.00399284880859776 / Covariance matrix element (2,1). FCOV22 = 0.0175244126670659 / Covariance matrix element (2,2). FCOV23 = -0.0138030778380786 / Covariance matrix element (2,3). FCOV31 = 0.00283673901863388 / Covariance matrix element (3,1). FCOV32 = -0.0138030778380786 / Covariance matrix element (3,2). FCOV33 = 0.0128129806394559 / Covariance matrix element (3,3). ...[[truncated]]... In scenarios were you don't want the estimation, but only the fitted parameters, all that verbose, human-friendly text or FITS keywords can be an annoying extra step. For such cases, you should use the ‘--quiet’ option like below. It will print the parameters, rows of the covariance matrix and $\chi_{red}^2$ on separate lines with nothing extra. This allows you to parse the values in any way that you would like. $ aststatistics noisy.fits -cX,Y,Yerr --fit=polynomial-weighted \ --fitmaxpower=2 --quiet +1.2286211608 -4.5127796636 +7.8435883943 +0.0010496001 -0.0039928488 +0.0028367390 -0.0039928488 +0.0175244127 -0.0138030778 +0.0028367390 -0.0138030778 +0.0128129806 +0.9740670090 As a final example, because real data usually have outliers, let's look at the "robust" polynomial fit which has special features to remove outliers. First, we need to add some outliers to the table. To do this, we'll make a plain-text table with ‘echo’, and use Table's ‘--catrowfile’ to concatenate (or append) those two rows to the original table. Finally, we'll run the same fitting step above: $ echo "0.6 20 0.01" > outliers.txt $ echo "0.8 20 0.01" >> outliers.txt $ asttable noisy.fits --catrowfile=outliers.txt \ --output=with-outlier.fits $ aststatistics with-outlier.fits -cX,Y,Yerr --fit=polynomial-weighted \ --fitmaxpower=2 --fitestimate=self \ --output=est-out.fits Statistics (GNU Astronomy Utilities) 0.22 ------- Fitting results (remove extra info with '--quiet' or '-q) Input file: with-outlier.fits (hdu: 1) with 193 non-blank rows. X column: X Y column: Y Weight column: Yerr [Standard deviation of Y in each row] Fit function: Y = c0 + (c1 * X^1) + (c2 * X^2) + ... (cN * X^N) N: 2 c0: -13.6446036899 c1: +66.8463258547 c2: -30.8746303591 Covariance matrix: +0.0007889160 -0.0027706310 +0.0022208939 -0.0027706310 +0.0113922468 -0.0100306732 +0.0022208939 -0.0100306732 +0.0094087226 Reduced chi^2 of fit: +4501.8356719150 Requested estimation: Written to: est-out.fit We see that the coefficient values have changed significantly and that $\chi_{red}^2$ has increased to $4501$! Recall that a good fit should have $\chi_{red}^2\approx1$. These numbers clearly show that the fit was bad, but again, nothing beats a visual inspection. To visually see the effect of those outliers, let's plot them with the command below. You see that those two points have clearly caused a turn in the fitted result which is terrible. $ astscript-fits-view with-outlier.fits est-out.fits For such cases, GSL has Robust linear regression (https://www.gnu.org/software/gsl/doc/html/lls.html#robust-linear-regression). In Gnuastro's Statistics, you can access it with ‘--fit=polynomial-robust’, like the example below. Just note that the robust method doesn't take an error column (because it estimates the errors internally while rejecting outliers, based on the method). $ aststatistics with-outlier.fits -cX,Y --fit=polynomial-robust \ --fitmaxpower=2 --fitestimate=self \ --output=est-out.fits --quiet $ astfits est-out.fits -h1 | grep ^FITC FITC0 = 1.20422691185238 / C0: multiple of x^0 in polynomial FITC1 = -4.4779253576348 / C1: multiple of x^1 in polynomial FITC2 = 7.84986153686548 / C2: multiple of x^2 in polynomial $ astscript-fits-view with-outlier.fits est-out.fits It is clear that the coefficients are very similar to the no-outlier scenario above and if you run the second command to view the scatter plots on TOPCAT, you also see that the fit nicely follows the curve and is not affected by those two points. GSL provides many methods to reject outliers. For their full list, see the description of ‘--fitrobust’ in *note Fitting options::. For a description of the outlier rejection methods, see the GSL manual (https://www.gnu.org/software/gsl/doc/html/lls.html#c.gsl_multifit_robust_workspace). You may have noticed that unlike the cases before the last Statistics command above didn't print anything on the standard output. This is becasue ‘--quiet’ and ‘--fitestimate’ were called together. In this case, because all the fitting parameters are written as FITS keywords, because of the ‘--quiet’ option, they are no longer printed on standard output. ---------- Footnotes ---------- (1) After plotting, you will notice that the legend made the plot too thin. Fortunately you have a lot of empty space within the plot. To bring the legend in, click on the "Legend" item on the bottom-left menu, in the "Location" tab, click on "Internal" and hold and move it to the top-left in the box below. To make the functional fit more clear, you can click on the "Function" item of the bottom-left menu. In the "Style" tab, change the color and thickness.  File: gnuastro.info, Node: Sky value, Next: Invoking aststatistics, Prev: Least squares fitting, Up: Statistics 7.1.4 Sky value --------------- One of the most important aspects of a dataset is its reference value: the value of the dataset where there is no signal. Without knowing, and thus removing the effect of, this value it is impossible to compare the derived results of many high-level analyses over the dataset with other datasets (in the attempt to associate our results with the "real" world). In astronomy, this reference value is known as the "Sky" value: the value that noise fluctuates around: where there is no signal from detectable objects or artifacts (for example, galaxies, stars, planets or comets, star spikes or internal optical ghost). Depending on the dataset, the Sky value maybe a fixed value over the whole dataset, or it may vary based on location. For an example of the latter case, see Figure 11 in Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). Because of the significance of the Sky value in astronomical data analysis, we have devoted this subsection to it for a thorough review. We start with a thorough discussion on its definition (*note Sky value definition::). In the astronomical literature, researchers use a variety of methods to estimate the Sky value, so in *note Sky value misconceptions::) we review those and discuss their biases. From the definition of the Sky value, the most accurate way to estimate the Sky value is to run a detection algorithm (for example, *note NoiseChisel::) over the dataset and use the undetected pixels. However, there is also a more crude method that maybe useful when good direct detection is not initially possible (for example, due to too many cosmic rays in a shallow image). A more crude (but simpler method) that is usable in such situations is discussed in *note Quantifying signal in a tile::. * Menu: * Sky value definition:: Definition of the Sky/reference value. * Sky value misconceptions:: Wrong methods to estimate the Sky value. * Quantifying signal in a tile:: Method to estimate the presence of signal.  File: gnuastro.info, Node: Sky value definition, Next: Sky value misconceptions, Prev: Sky value, Up: Sky value 7.1.4.1 Sky value definition ............................ This analysis is taken from Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). Let's assume that all instrument defects - bias, dark and flat - have been corrected and the magnitude (see *note Brightness flux magnitude::) of a detected object, $O$, is desired. The sources of flux on pixel(1) $i$ of the image can be written as follows: • Contribution from the target object ($O_i$). • Contribution from other detected objects ($D_i$). • Undetected objects or the fainter undetected regions of bright objects ($U_i$). • A cosmic ray ($C_i$). • The background flux, which is defined to be the count if none of the others exists on that pixel ($B_i$). The total flux in this pixel ($T_i$) can thus be written as: $$T_i=B_i+D_i+U_i+C_i+O_i.$$ By definition, $D_i$ is detected and it can be assumed that it is correctly estimated (deblended) and subtracted, we can thus set $D_i=0$. There are also methods to detect and remove cosmic rays, for example, the method described in van Dokkum (2001)(2), or by comparing multiple exposures. This allows us to set $C_i=0$. Note that in practice, $D_i$ and $U_i$ are correlated, because they both directly depend on the detection algorithm and its input parameters. Also note that no detection or cosmic ray removal algorithm is perfect. With these limitations in mind, the observed Sky value for this pixel ($S_i$) can be defined as $$S_i\equiv{}B_i+U_i.$$ Therefore, as the detection process (algorithm and input parameters) becomes more accurate, or $U_i\to0$, the Sky value will tend to the background value or $S_i\to B_i$. Hence, we see that while $B_i$ is an inherent property of the data (pixel in an image), $S_i$ depends on the detection process. Over a group of pixels, for example, in an image or part of an image, this equation translates to the average of undetected pixels (Sky$=\sum{S_i}$). With this definition of Sky, the object flux in the data can be calculated, per pixel, with $$T_{i}=S_{i}+O_{i} \quad\rightarrow\quad O_{i}=T_{i}-S_{i}.$$ In the fainter outskirts of an object, a very small fraction of the photo-electrons in a pixel actually belongs to objects, the rest is caused by random factors (noise), see Figure 1b in Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). Therefore even a small over estimation of the Sky value will result in the loss of a very large portion of most galaxies. Besides the lost area/brightness, this will also cause an over-estimation of the Sky value and thus even more under-estimation of the object's magnitude. It is thus very important to detect the diffuse flux of a target, even if they are not your primary target. In summary, the more accurately the Sky is measured, the more accurately the magnitude (calculated from the sum of pixel values) of the target object can be measured (photometry). Any under/over-estimation in the Sky will directly translate to an over/under-estimation of the measured object's magnitude. The *Sky value* is only correctly found when all the detected objects ($D_i$ and $C_i$) have been removed from the data. ---------- Footnotes ---------- (1) For this analysis the dimension of the data (image) is irrelevant. So if the data is an image (2D) with width of $w$ pixels, then a pixel located on column $x$ and row $y$ (where all counting starts from zero and (0, 0) is located on the bottom left corner of the image), would have an index: $i=x+y\times{}w$. (2) van Dokkum, P. G. (2001). Publications of the Astronomical Society of the Pacific. 113, 1420.  File: gnuastro.info, Node: Sky value misconceptions, Next: Quantifying signal in a tile, Prev: Sky value definition, Up: Sky value 7.1.4.2 Sky value misconceptions ................................ As defined in *note Sky value::, the sky value is only accurately defined when the detection algorithm is not significantly reliant on the sky value. In particular its detection threshold. However, most signal-based detection tools(1) use the sky value as a reference to define the detection threshold. These older techniques therefore had to rely on approximations based on other assumptions about the data. A review of those other techniques can be seen in Appendix A of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). These methods were extensively used in astronomical data analysis for several decades, therefore they have given rise to a lot of misconceptions, ambiguities and disagreements about the sky value and how to measure it. As a summary, the major methods used until now were an approximation of the mode of the image pixel distribution and $\sigma$-clipping. • To find the mode of a distribution those methods would either have to assume (or find) a certain probability density function (PDF) or use the histogram. But astronomical datasets can have any distribution, making it almost impossible to define a generic function. Also, histogram-based results are very inaccurate (there is a large dispersion) and it depends on the histogram bin-widths. Generally, the mode of a distribution also shifts as signal is added. Therefore, even if it is accurately measured, the mode is a biased measure for the Sky value. • Another approach was to iteratively clip the brightest pixels in the image (which is known as $\sigma$-clipping). See *note Sigma clipping:: for a complete explanation. $\sigma$-clipping is useful when there are clear outliers (an object with a sharp edge in an image for example). However, real astronomical objects have diffuse and faint wings that penetrate deeply into the noise, see Figure 1 in Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). As discussed in *note Sky value::, the sky value can only be correctly defined as the average of undetected pixels. Therefore all such approaches that try to approximate the sky value prior to detection are ultimately poor approximations. ---------- Footnotes ---------- (1) According to Akhlaghi and Ichikawa (2015), signal-based detection is a detection process that relies heavily on assumptions about the to-be-detected objects. This method was the most heavily used technique prior to the introduction of NoiseChisel in that paper.  File: gnuastro.info, Node: Quantifying signal in a tile, Prev: Sky value misconceptions, Up: Sky value 7.1.4.3 Quantifying signal in a tile .................................... In order to define detection thresholds on the image, or calibrate it for measurements (subtract the signal of the background sky and define errors), we need some basic measurements. For example, the quantile threshold in NoiseChisel (‘--qthresh’ option), or the mean of the undetected regions (Sky) and the Sky standard deviation (Sky STD) which are the output of NoiseChisel and Statistics. But astronomical images will contain a lot of stars and galaxies that will bias those measurements if not properly accounted for. Quantifying where signal is present is thus a very important step in the usage of a dataset; for example, if the Sky level is over-estimated, your target object's magnitude will be under-estimated. Let's start by clarifying some definitions: _Signal_ is defined as the non-random source of flux in each pixel (you can think of this as the mean in a Gaussian or Poisson distribution). In astronomical images, signal is mostly photons coming of a star or galaxy, and counted in each pixel. _Noise_ is defined as the random source of flux in each pixel (or the standard deviation of a Gaussian or Poisson distribution). Noise is mainly due to counting errors in the detector electronics upon data collection. _Data_ is defined as the combination of signal and noise (so a noisy image of a galaxy is one _data_set). When a dataset does not have any signal (for example, you take an image with a closed shutter, producing an image that only contains noise), the mean, median and mode of the distribution are equal within statistical errors. Signal from emitting objects, like astronomical targets, always has a positive value and will never become negative, see Figure 1 in Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). Therefore, when signal is added to the data (you take an image with an open shutter pointing to a galaxy for example), the mean, median and mode of the dataset shift to the positive, creating a positively skewed distribution. The shift of the mean is the largest. The median shifts less, since it is defined after ordering all the elements/pixels (the median is the value at a quantile of 0.5), thus it is not affected by outliers. Finally, the mode's shift to the positive is the least. Inverting the argument above gives us a robust method to quantify the significance of signal in a dataset: when the mean and median of a distribution are approximately equal we can argue that there is no significant signal. In other words: when the quantile of the mean ($q_{mean}$) is around 0.5. This definition of skewness through the quantile of the mean is further introduced with a real image the tutorials, see *note Skewness caused by signal and its measurement::. However, in an astronomical image, some of the pixels will contain more signal than the rest, so we cannot simply check $q_{mean}$ on the whole dataset. For example, if we only look at the patch of pixels that are placed under the central parts of the brightest stars in the field of view, $q_{mean}$ will be very high. The signal in other parts of the image will be weaker, and in some parts it will be much smaller than the noise (for example, 1/100-th of the noise level). When the signal-to-noise ratio is very small, we can generally assume no signal (because its effectively impossible to measure it) and $q_{mean}$ will be approximately 0.5. To address this problem, we break the image into a grid of tiles(1) (see *note Tessellation::). For example, a tile can be a square box of size $30\times30$ pixels. By measuring $q_{mean}$ on each tile, we can find which tiles that contain significant signal and ignore them. Technically, if a tile's $|q_{mean}-0.5|$ is larger than the value given to the ‘--meanmedqdiff’ option, that tile will be ignored for the next steps. You can read this option as "mean-median-quantile-difference". The raw dataset's pixel distribution (in each tile) is noisy, to decrease the noise/error in estimating $q_{mean}$, we convolve the image before tessellation (see *note Convolution process::. Convolution decreases the range of the dataset and enhances its skewness, See Section 3.1.1 and Figure 4 in Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). This enhanced skewness can be interpreted as an increase in the Signal to noise ratio of the objects buried in the noise. Therefore, to obtain an even better measure of the presence of signal in a tile, the mean and median discussed above are measured on the convolved image. There is one final hurdle: raw astronomical datasets are commonly peppered with Cosmic rays. Images of Cosmic rays are not smoothed by the atmosphere or telescope aperture, so they have sharp boundaries. Also, since they do not occupy too many pixels, they do not affect the mode and median calculation. But their very high values can greatly bias the calculation of the mean (recall how the mean shifts the fastest in the presence of outliers), for example, see Figure 15 in Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). The effect of outliers like cosmic rays on the mean and standard deviation can be removed through $\sigma$-clipping, see *note Sigma clipping:: for a complete explanation. Therefore, after asserting that the mean and median are approximately equal in a tile (see *note Tessellation::), the Sky and its STD are measured on each tile after $\sigma$-clipping with the ‘--sigmaclip’ option (see *note Sigma clipping::). In the end, some of the tiles will pass the test and will be given a value. Others (that had signal in them) will just be assigned a NaN (not-a-number) value. But we need a measurement over each tile (and thus pixel). We will therefore use interpolation to assign a value to the NaN tiles. However, prior to interpolating over the failed tiles, another point should be considered: large and extended galaxies, or bright stars, have wings which sink into the noise very gradually. In some cases, the gradient over these wings can be on scales that is larger than the tiles (for example, the pixel value changes by $0.1\sigma$ after 100 pixels, but the tile has a width of 30 pixels). In such cases, the $q_{mean}$ test will be successful, even though there is signal. Recall that $q_{mean}$ is a measure of skewness. If we do not identify (and thus set to NaN) such outlier tiles before the interpolation, the photons of the outskirts of the objects will leak into the detection thresholds or Sky and Sky STD measurements and bias our result, see *note Detecting large extended targets::. Therefore, the final step of "quantifying signal in a tile" is to look at this distribution of successful tiles and remove the outliers. $\sigma$-clipping is a good solution for removing a few outliers, but the problem with outliers of this kind is that there may be many such tiles (depending on the large/bright stars/galaxies in the image). We therefore apply the following local outlier rejection strategy. For each tile, we find the nearest $N_{ngb}$ tiles that had a usable value ($N_{ngb}$ is the value given to ‘--outliernumngb’). We then sort them and find the difference between the largest and second-to-smallest elements (The minimum is not used because the scatter can be large). Let's call this the tile's _slope_ (measured from its neighbors). All the tiles that are on a region of flat noise will have similar slope values, but if a few tiles fall on the wings of a bright star or large galaxy, their slope will be significantly larger than the tiles with no signal. We just have to find the smallest tile slope value that is an outlier compared to the rest, and reject all tiles with a slope larger than that. To identify the smallest outlier, we will use the distribution of distances between sorted elements. Let's assume the total number of tiles with a good mean-median quantile difference is $N$. They are first sorted and searching for the outlier starts on element $N/3$ (integer division). Let's take $v_i$ to be the $i$-th element of the sorted input (with no blank values) and $m$ and $\sigma$ as the $\sigma$-clipped median and standard deviation from the distances of the previous $N/3-1$ elements (not including $v_i$). If the value given to ‘--outliersigma’ is displayed with $s$, the $i$-th element is considered as an outlier when the condition below is true. $${(v_i-v_{i-1})-m\over \sigma}>s$$ Since $i$ begins from the $N/3$-th element in the sorted array (a quantile of $1/3=0.33$), the outlier has to be larger than the $0.33$ quantile value of the dataset (this is usually the case; otherwise, it is hard to define it as an "outlier"!). Once the outlying tiles have been successfully identified and set to NaN, we use nearest-neighbor interpolation to give a value to all tiles in the image. We do not use parametric interpolation methods (like bicubic), because they will effectively extrapolate on the edges, creating strong artifacts. Nearest-neighbor interpolation is very simple: for each tile, we find the $N_{ngb}$ nearest tiles that had a good value, the tile's value is found by estimating the median. You can set $N_{ngb}$ through the ‘--interpnumngb’ option. Once all the tiles are given a value, a smoothing step is implemented to remove the sharp value contrast that can happen on the edges of tiles. The size of the smoothing box is set with the ‘--smoothwidth’ option. As mentioned above, the process above is used for any of the basic measurements (for example, identifying the quantile-based thresholds in NoiseChisel, or the Sky value in Statistics). You can use the check-image feature of NoiseChisel or Statistics to inspect the steps and visually see each step (all the options that start with ‘--check’). For example, as mentioned in the *note NoiseChisel optimization:: tutorial, when given a dataset from a new instrument (with differing noise properties), we highly recommend to use ‘--checkqthresh’ in your first call and visually inspect how the parameters above affect the final quantile threshold (e.g., have the wings of bright sources leaked into the threshold?). The same goes for the ‘--checksky’ option of Statistics or NoiseChisel. ---------- Footnotes ---------- (1) The options to customize the tessellation are discussed in *note Processing options::.  File: gnuastro.info, Node: Invoking aststatistics, Prev: Sky value, Up: Statistics 7.1.5 Invoking Statistics ------------------------- Statistics will print statistical measures of an input dataset (table column or image). The executable name is ‘aststatistics’ with the following general template $ aststatistics [OPTION ...] InputImage.fits One line examples: ## Print some general statistics of input image: $ aststatistics image.fits ## Print some general statistics of column named MAG_F160W: $ aststatistics catalog.fits -h1 --column=MAG_F160W ## Make the histogram of the column named MAG_F160W: $ aststatistics table.fits -cMAG_F160W --histogram ## Find the Sky value on image with a given kernel: $ aststatistics image.fits --sky --kernel=kernel.fits ## Print Sigma-clipped results of records with a MAG_F160W ## column value between 26 and 27: $ aststatistics cat.fits -cMAG_F160W -g26 -l27 --sigmaclip=3,0.2 ## Find the polynomial (to third order) that best fits the X and Y ## columns of 'table.fits'. Robust fitting will be used to reject ## outliers. Also, estimate the fitted polynomial on the same input ## column (with errors). $ aststatistics table.fits --fit=polynomial-robust --fitmaxpower=3 \ -cX,Y --fitestimate=self --output=estimated.fits ## Print the median value of all records in column MAG_F160W that ## have a value larger than 3 in column PHOTO_Z: $ aststatistics tab.txt -rPHOTO_Z -g3 -cMAG_F160W --median ## Calculate the median of the third column in the input table, but only ## for rows where the mean of the first and second columns is >5. $ awk '($1+$2)/2 > 5 {print $3}' table.txt | aststatistics --median Statistics can take its input dataset either from a file (image or table) or the Standard input (see *note Standard input::). If any output file is to be created, the value to the ‘--output’ option, is used as the base name for the generated files. Without ‘--output’, the input name will be used to generate an output name, see *note Automatic output::. The options described below are particular to Statistics, but for general operations, it shares a large collection of options with the other Gnuastro programs, see *note Common options:: for the full list. For more on reading from standard input, please see the description of ‘--stdintimeout’ option in *note Input output options::. Options can also be given in configuration files, for more, please see *note Configuration files::. The input dataset may have blank values (see *note Blank pixels::), in this case, all blank pixels are ignored during the calculation. Initially, the full dataset will be read, but it is possible to select a specific range of data elements to use in the analysis of each run. You can either directly specify a minimum and maximum value for the range of data elements to use (with ‘--greaterequal’ or ‘--lessthan’), or specify the range using quantiles (with ‘--qrange’). If a range is specified, all pixels outside of it are ignored before any processing. When no operation is requested, Statistics will print some general basic properties of the input dataset on the command-line like the example below (ran on one of the output images of ‘make check’(1)). This default behavior is designed to help give you a general feeling of how the data are distributed and help in narrowing down your analysis. $ aststatistics convolve_spatial_scaled_noised.fits \ --greaterequal=9500 --lessthan=11000 Statistics (GNU Astronomy Utilities) X.X ------- Input: convolve_spatial_scaled_noised.fits (hdu: 0) Range: from (inclusive) 9500, upto (exclusive) 11000. Unit: counts ------- Number of elements: 9074 Minimum: 9622.35 Maximum: 10999.7 Mode: 10055.45996 Mode quantile: 0.4001983908 Median: 10093.7 Mean: 10143.98257 Standard deviation: 221.80834 ------- Histogram: | ** | ****** | ******* | ********* | ************* | ************** | ****************** | ******************** | *************************** * | ***************************************** *** |* ************************************************************** |----------------------------------------------------------------- Gnuastro's Statistics is a very general purpose program, so to be able to easily understand this diversity in its operations (and how to possibly run them together), we will divided the operations into two types: those that do not respect the position of the elements and those that do (by tessellating the input on a tile grid, see *note Tessellation::). The former treat the whole dataset as one and can re-arrange all the elements (for example, sort them), but the former do their processing on each tile independently. First, we will review the operations that work on the whole dataset. The group of options below can be used to get single value measurement(s) of the whole dataset. They will print only the requested value as one field in a line/row, like the ‘--mean’, ‘--median’ options. These options can be called any number of times and in any order. The outputs of all such options will be printed on one line following each other (with a space character between them). This feature makes these options very useful in scripts, or to redirect into programs like GNU AWK for higher-level processing. These are some of the most basic measures, Gnuastro is still under heavy development and this list will grow. If you want another statistical parameter, please contact us and we will do out best to add it to this list, see *note Suggest new feature::. * Menu: * Input to Statistics:: How to specify the inputs to Statistics. * Single value measurements:: Can be used together (like -mean, or -maximum). * Generating histograms and cumulative frequency plots:: Histogram and CFP tables. * Fitting options:: Least squares fitting. * Contour options:: Table of contours. * Statistics on tiles:: Possible to do single-valued measurements on tiles. ---------- Footnotes ---------- (1) You can try it by running the command in the ‘tests’ directory, open the image with a FITS viewer and have a look at it to get a sense of how these statistics relate to the input image/dataset.  File: gnuastro.info, Node: Input to Statistics, Next: Single value measurements, Prev: Invoking aststatistics, Up: Invoking aststatistics 7.1.5.1 Input to Statistics ........................... The following set of options are for specifying the input/outputs of Statistics. There are many other input/output options that are common to all Gnuastro programs including Statistics, see *note Input output options:: for those. ‘-c STR/INT’ ‘--column=STR/INT’ The column to use when the input file is a table with more than one column. See *note Selecting table columns:: for a full description of how to use this option. For more on how tables are read in Gnuastro, please see *note Tables::. ‘-g FLT’ ‘--greaterequal=FLT’ Limit the range of inputs into those with values greater and equal to what is given to this option. None of the values below this value will be used in any of the processing steps below. ‘-l FLT’ ‘--lessthan=FLT’ Limit the range of inputs into those with values less-than what is given to this option. None of the values greater or equal to this value will be used in any of the processing steps below. ‘-Q FLT[,FLT]’ ‘--qrange=FLT[,FLT]’ Specify the range of usable inputs using the quantile. This option can take one or two quantiles to specify the range. When only one number is input (let's call it $Q$), the range will be those values in the quantile range $Q$ to $1-Q$. So when only one value is given, it must be less than 0.5. When two values are given, the first is used as the lower quantile range and the second is used as the larger quantile range. The quantile of a given element in a dataset is defined by the fraction of its index to the total number of values in the sorted input array. So the smallest and largest values in the dataset have a quantile of 0.0 and 1.0. The quantile is a very useful non-parametric (making no assumptions about the input) relative measure to specify a range. It can best be understood in terms of the cumulative frequency plot, see *note Histogram and Cumulative Frequency Plot::. The quantile of each horizontal axis value in the cumulative frequency plot is the vertical axis value associate with it.  File: gnuastro.info, Node: Single value measurements, Next: Generating histograms and cumulative frequency plots, Prev: Input to Statistics, Up: Invoking aststatistics 7.1.5.2 Single value measurements ................................. ‘-n’ ‘--number’ Print the number of all used (non-blank and in range) elements. ‘--minimum’ Print the minimum value of all used elements. ‘--maximum’ Print the maximum value of all used elements. ‘--sum’ Print the sum of all used elements. ‘-m’ ‘--mean’ Print the mean (average) of all used elements. ‘-t’ ‘--std’ Print the standard deviation of all used elements. ‘--mad’ Print the median absolute deviation (MAD) of all used elements. ‘-E’ ‘--median’ Print the median of all used elements. ‘-u FLT[,FLT[,...]]’ ‘--quantile=FLT[,FLT[,...]]’ Print the values at the given quantiles of the input dataset. Any number of quantiles may be given and one number will be printed for each. Values can either be written as a single number or as fractions, but must be between zero and one (inclusive). Hence, in effect ‘--quantile=0.25 --quantile=0.75’ is equivalent to ‘--quantile=0.25,3/4’, or ‘-u1/4,3/4’. The returned value is one of the elements from the dataset. Taking $q$ to be your desired quantile, and $N$ to be the total number of used (non-blank and within the given range) elements, the returned value is at the following position in the sorted array: $round(q\times{}N$). ‘--quantfunc=FLT[,FLT[,...]]’ Print the quantiles of the given values in the dataset. This option is the inverse of the ‘--quantile’ and operates similarly except that the acceptable values are within the range of the dataset, not between 0 and 1. Formally it is known as the "Quantile function". Since the dataset is not continuous this function will find the nearest element of the dataset and use its position to estimate the quantile function. ‘--quantofmean’ Print the quantile of the mean in the dataset. This is a very good measure of detecting skewness or outliers. The concept is used by programs like NoiseChisel to identify the presence of signal in a tile of the image (because signal in noise causes skewness). For example, take this simple array: ‘1 2 20 4 5 6 3’. The mean is ‘5.85’. The nearest element to this mean is ‘6’ and the quantile of ‘6’ in this distribution is 0.8333. Here is how we got to this: in the sorted dataset (‘1 2 3 4 5 6 20’), ‘6’ is the 5-th element (counting from zero, since a quantile of zero corresponds to the minimum, by definition) and the maximum is the 6-th element (again, counting from zero). So the quantile of the mean in this case is $5/6=0.8333$. In the example above, if we had ‘7’ instead of ‘20’ (which was an outlier), then the mean would be ‘4’ and the quantile of the mean would be 0.5 (which by definition, is the quantile of the median), showing no outliers. As the number of elements increases, the mean itself is less affected by a small number of outliers, but skewness can be nicely identified by the quantile of the mean. ‘-O’ ‘--mode’ Print the mode of all used elements. The mode is found through the mirror distribution which is fully described in Appendix C of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). See that section for a full description. This mode calculation algorithm is non-parametric, so when the dataset is not large enough (larger than about 1000 elements usually), or does not have a clear mode it can fail. In such cases, this option will return a value of ‘nan’ (for the floating point NaN value). As described in that paper, the easiest way to assess the quality of this mode calculation method is to use it's symmetricity (see ‘--modesym’ below). A better way would be to use the ‘--mirror’ option to generate the histogram and cumulative frequency tables for any given mirror value (the mode in this case) as a table. If you generate plots like those shown in Figure 21 of that paper, then your mode is accurate. ‘--modequant’ Print the quantile of the mode. You can get the actual mode value from the ‘--mode’ described above. In many cases, the absolute value of the mode is irrelevant, but its position within the distribution is important. In such cases, this option will become handy. ‘--modesym’ Print the symmetricity of the calculated mode. See the description of ‘--mode’ for more. This mode algorithm finds the mode based on how symmetric it is, so if the symmetricity returned by this option is too low, the mode is not too accurate. See Appendix C of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) for a full description. In practice, symmetricity values larger than 0.2 are mostly good. ‘--modesymvalue’ Print the value in the distribution where the mirror and input distributions are no longer symmetric, see ‘--mode’ and Appendix C of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) for more. ‘--sigclip-std’ ‘--sigclip-mad’ ‘--sigclip-mean’ ‘--sigclip-number’ ‘--sigclip-median’ Calculate the desired statistic after applying $\sigma$-clipping (see *note Sigma clipping::, part of the tutorial *note Clipping outliers::). $\sigma$-clipping configuration is done with the ‘--sclipparams’ option. Here is one scenario where this can be useful: assume you have a table and you would like to remove the rows that are outliers (not within the $\sigma$-clipping range). Let's assume your table is called ‘table.fits’ and you only want to keep the rows that have a value in ‘COLUMN’ within the $\sigma$-clipped range (to $3\sigma$, with a tolerance of 0.1). This command will return the $\sigma$-clipped median and standard deviation (used to define the range later). $ aststatistics table.fits -cCOLUMN --sclipparams=3,0.1 \ --sigclip-median --sigclip-std You can then use the ‘--range’ option of Table (see *note Table::) to select the proper rows. But for that, you need the actual starting and ending values of the range ($m\pm s\sigma$; where $m$ is the median and $s$ is the multiple of sigma to define an outlier). Therefore, the raw outputs of Statistics in the command above are not enough. To get the starting and ending values of the non-outlier range (and put a '<,>' between them, ready to be used in ‘--range’), pipe the result into AWK. But in AWK, we will also need the multiple of $\sigma$, so we will define it as a shell variable (‘s’) before calling Statistics (note how ‘$s’ is used two times now): $ s=3 $ aststatistics table.fits -cCOLUMN --sclipparams=$s,0.1 \ --sigclip-median --sigclip-std \ | awk '{s='$s'; printf("%f,%f\n", $1-s*$2, $1+s*$2)}' To pass it onto Table, we will need to keep the printed output from the command above in another shell variable (‘r’), not print it. In Bash, can do this by putting the whole statement within a ‘$()’: $ s=3 $ r=$(aststatistics table.fits -cCOLUMN --sclipparams=$s,0.1 \ --sigclip-median --sigclip-std \ | awk '{s='$s'; printf("%f,%f\n", $1-s*$2, $1+s*$2)}') $ echo $r # Just to confirm. Now you can use Table with the ‘--range’ option to only print the rows that have a value in ‘COLUMN’ within the desired range: $ asttable table.fits --range=COLUMN,$r To save the resulting table (that is clean of outliers) in another file (for example, named ‘cleaned.fits’, it can also have a ‘.txt’ suffix), just add ‘--output=cleaned.fits’ to the command above. ‘--madclip-std’ ‘--madclip-mad’ ‘--madclip-mean’ ‘--madclip-number’ ‘--madclip-median’ Calculate the desired statistic after applying median absolute deviation (MAD) clipping (see *note MAD clipping::, part of the tutorial *note Clipping outliers::). MAD-clipping configuration is done with the ‘--mclipparams’ option. This option behaves similarly to ‘--sigclip-*’ options, read their description for usage examples.  File: gnuastro.info, Node: Generating histograms and cumulative frequency plots, Next: Fitting options, Prev: Single value measurements, Up: Invoking aststatistics 7.1.5.3 Generating histograms and cumulative freq. .................................................. The list of options below are for those statistical operations that output more than one value. So while they can be called together in one run, their outputs will be distinct (each one's output will usually be printed in more than one line). ‘-A’ ‘--asciihist’ Print an ASCII histogram of the usable values within the input dataset along with some basic information like the example below (from the UVUDF catalog(1)). The width and height of the histogram (in units of character widths and heights on your command-line terminal) can be set with the ‘--numasciibins’ (for the width) and ‘--asciiheight’ options. For a full description of the histogram, please see *note Histogram and Cumulative Frequency Plot::. An ASCII plot is certainly very crude and cannot be used in any publication, but it is very useful for getting a general feeling of the input dataset very fast and easily on the command-line without having to take your hands off the keyboard (which is a major distraction!). If you want to try it out, you can write it all in one line and ignore the <\> and extra spaces. $ aststatistics uvudf_rafelski_2015.fits.gz --hdu=1 \ --column=MAG_F160W --lessthan=40 \ --asciihist --numasciibins=55 ASCII Histogram: Number: 8593 Y: (linear: 0 to 660) X: (linear: 17.7735 -- 31.4679, in 55 bins) | **** | ***** | ****** | ******** | ********* | *********** | ************** | ***************** | *********************** | ******************************** |*** *************************************************** |------------------------------------------------------- ‘--asciicfp’ Print the cumulative frequency plot of the usable elements in the input dataset. Please see descriptions under ‘--asciihist’ for more, the example below is from the same input table as that example. To better understand the cumulative frequency plot, please see *note Histogram and Cumulative Frequency Plot::. $ aststatistics uvudf_rafelski_2015.fits.gz --hdu=1 \ --column=MAG_F160W --lessthan=40 \ --asciicfp --numasciibins=55 ASCII Cumulative frequency plot: Y: (linear: 0 to 8593) X: (linear: 17.7735 -- 31.4679, in 55 bins) | ******* | ********** | *********** | ************* | ************** | *************** | ***************** | ******************* | *********************** | ****************************** |******************************************************* |------------------------------------------------------- ‘-H’ ‘--histogram’ Save the histogram of the usable values in the input dataset into a table. The first column is the value at the center of the bin and the second is the number of points in that bin. If the ‘--cumulative’ option is also called with this option in a run, then the table will have three columns (the third is the cumulative frequency plot). Through the ‘--numbins’, ‘--onebinstart’, or ‘--manualbinrange’, you can modify the first column values and with ‘--normalize’ and ‘--maxbinone’ you can modify the second columns. See below for the description of each. By default (when no ‘--output’ is specified) a plain text table will be created, see *note Gnuastro text table format::. If a FITS name is specified, you can use the common option ‘--tableformat’ to have it as a FITS ASCII or FITS binary format, see *note Common options::. This table can then be fed into your favorite plotting tool and get a much more clean and nice histogram than what the raw command-line can offer you (with the ‘--asciihist’ option). ‘--histogram2d’ Save the 2D histogram of two input columns into an output file, see *note 2D Histograms::. The output will have three columns: the first two are the coordinates of each box's center in the first and second dimensions/columns. The third will be number of input points that fall within that box. ‘-C’ ‘--cumulative’ Save the cumulative frequency plot of the usable values in the input dataset into a table, similar to ‘--histogram’. ‘--madclip’ Do median absolute deviation (MAD) clipping on the usable pixels of the input dataset. See *note MAD clipping:: for a description on MAD-clipping and *note Clipping outliers:: for a complete tutorial on clipping of outliers. The MAD-clipping parameters can be set through the ‘--mclipparams’ option (see below). ‘-s’ ‘--sigmaclip’ Do $\sigma$-clipping on the usable pixels of the input dataset. See *note Sigma clipping:: for a full description on $\sigma$-clipping and *note Clipping outliers:: for a complete tutorial on clipping of outliers. The $\sigma$-clipping parameters can be set through the ‘--sclipparams’ option (see below). ‘--mirror=FLT’ Make a histogram and cumulative frequency plot of the mirror distribution for the given dataset when the mirror is located at the value to this option. The mirror distribution is fully described in Appendix C of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) and currently it is only used to calculate the mode (see ‘--mode’). Just note that the mirror distribution is a discrete distribution like the input, so while you may give any number as the value to this option, the actual mirror value is the closest number in the input dataset to this value. If the two numbers are different, Statistics will warn you of the actual mirror value used. This option will make a table as output. Depending on your selected name for the output, it will be either a FITS table or a plain text table (which is the default). It contains three columns: the first is the center of the bins, the second is the histogram (with the largest value set to 1) and the third is the normalized cumulative frequency plot of the mirror distribution. The bins will be positioned such that the mode is on the starting interval of one of the bins to make it symmetric around the mirror. With this output file and the input histogram (that you can generate in another run of Statistics, using the ‘--onebinvalue’), it is possible to make plots like Figure 21 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). The list of options below allow customization of the histogram and cumulative frequency plots (for the ‘--histogram’, ‘--cumulative’, ‘--asciihist’, and ‘--asciicfp’ options). ‘--numbins’ The number of bins (rows) to use in the histogram and the cumulative frequency plot tables (outputs of ‘--histogram’ and ‘--cumulative’). ‘--numasciibins’ The number of bins (characters) to use in the ASCII plots when printing the histogram and the cumulative frequency plot (outputs of ‘--asciihist’ and ‘--asciicfp’). ‘--asciiheight’ The number of lines to use when printing the ASCII histogram and cumulative frequency plot on the command-line (outputs of ‘--asciihist’ and ‘--asciicfp’). ‘-n’ ‘--normalize’ Normalize the histogram or cumulative frequency plot tables (outputs of ‘--histogram’ and ‘--cumulative’). For a histogram, the sum of all bins will become one and for a cumulative frequency plot the last bin value will be one. ‘--maxbinone’ Divide all the histogram values by the maximum bin value so it becomes one and the rest are similarly scaled. In some situations (for example, if you want to plot the histogram and cumulative frequency plot in one plot) this can be very useful. ‘--onebinstart=FLT’ Make sure that one bin starts with the value to this option. In practice, this will shift the bins used to find the histogram and cumulative frequency plot such that one bin's lower interval becomes this value. For example, when a histogram range includes negative and positive values and zero has a special significance in your analysis, then zero might fall somewhere in one bin. As a result that bin will have counts of positive and negative. By setting ‘--onebinstart=0’, you can make sure that one bin will only count negative values in the vicinity of zero and the next bin will only count positive ones in that vicinity. Note that by default, the first row of the histogram and cumulative frequency plot show the central values of each bin. So in the example above you will not see the 0.000 in the first column, you will see two symmetric values. If the value is not within the usable input range, this option will be ignored. When it is, this option is the last operation before the bins are finalized, therefore it has a higher priority than options like ‘--manualbinrange’. ‘--manualbinrange’ Use the values given to the ‘--greaterequal’ and ‘--lessthan’ to define the range of all bin-based calculations like the histogram. This option itself does not take any value, but just tells the program to use the values of those two options instead of the minimum and maximum values of a plot. If any of the two options are not given, then the minimum or maximum will be used respectively. Therefore, if none of them are called calling this option is redundant. The ‘--onebinstart’ option has a higher priority than this option. In other words, ‘--onebinstart’ takes effect after the range has been finalized and the initial bins have been defined, therefore it has the power to (possibly) shift the bins. If you want to manually set the range of the bins _and_ have one bin on a special value, it is thus better to avoid ‘--onebinstart’. ‘--numbins2=INT’ Similar to ‘--numbins’, but for the second column when a 2D histogram is requested, see ‘--histogram2d’. ‘--greaterequal2=FLT’ Similar to ‘--greaterequal’, but for the second column when a 2D histogram is requested, see ‘--histogram2d’. ‘--lessthan2=FLT’ Similar to ‘--lessthan’, but for the second column when a 2D histogram is requested, see ‘--histogram2d’. ‘--onebinstart2=FLT’ Similar to ‘--onebinstart’, but for the second column when a 2D histogram is requested, see ‘--histogram2d’. ---------- Footnotes ---------- (1) <https://asd.gsfc.nasa.gov/UVUDF/uvudf_rafelski_2015.fits.gz>  File: gnuastro.info, Node: Fitting options, Next: Contour options, Prev: Generating histograms and cumulative frequency plots, Up: Invoking aststatistics 7.1.5.4 Fitting options ....................... With the options below, you can customize the least squares fitting features of Statistics. For a tutorial of the usage of least squares fitting in Statistics, please see *note Least squares fitting::. Here, we will just review the details of each option. To activate least squares fitting in Statistics, it is necessary to use the ‘--fit’ option to specify the type of fit you want to do. See the description of ‘--fit’ for the various available fitting models. The fitting models that account for weights require three input columns, while the non-weighted ones only take two input columns. Here is a summary of the input columns: 1. The first input column is assumed to be the independent variable (on the horizontal axis of a plot, or $X$ in the equations of each fit). 2. The second input column is assumed to be the measured value (on the vertical axis of a plot, or $Y$ in the equation above). 3. The third input column is only for fittings with a weight. It is assumed to be the "weight" of the measurement column. The nature of the "weight" can be set with the ‘--fitweight’ option, for example, if you have the standard deviation of the error in $Y$, you can use ‘--fitweight=std’ (which is the default, so unless the default value has been changed, you will not need to set this). If three columns are given to a model without weight, or two columns are given to a model that requires weights, Statistics will abort and inform you. Below you can see an example of fitting with the same linear model, once weighted and once without weights. $ aststatistics table.fits --column=X,Y --fit=linear $ aststatistics table.fits --column=X,Y,Yerr --fit=linear-weighted The output of the fitting can be in three modes listed below. For a complete example, see the tutorial in *note Least squares fitting::). Human friendly format By default (for example, the commands above) the output is an elaborate description of the model parameters. For example, $c_0$ and $c_1$ in the linear model ($Y=c_0+c_1X$). Their covariance matrix and the reduced $\chi^2$ of the fit are also printed on the output. Raw numbers If you don't need the human friendly components of the output (which are annoying when you want to parse the outputs in some scenarios), you can use ‘--quiet’ option. Only the raw output numbers will be printed. Estimate on a custom X column Through the ‘--fitestimate’ option, you can specify an independent table column to estimate the fit (it can also take a single value). See the description of this option for more. ‘-f STR’ ‘--fit=STR’ The name of the fitting method to use. They are based on the linear (https://www.gnu.org/software/gsl/doc/html/lls.html) and nonlinear (https://www.gnu.org/software/gsl/doc/html/nls.html) least-squares fitting functions of the GNU Scientific Library (GSL). ‘linear’ $Y=c_0+c_1X$ ‘linear-weighted’ $Y=c_0+c_1X$; accounting for "weights" in $Y$. ‘linear-no-constant’ $Y=c_1X$. ‘linear-no-constant-weighted’ $Y=c_1X$; accounting for "weights" in $Y$. ‘polynomial’ $Y=c_0+c_1X+c_2X^2+\cdots+c_nX^n$; the maximum required power ($n$) is specified by ‘--fitmaxpower’. ‘polynomial-weighted’ $Y=c_0+c_1X+c_2X^2+\cdots+c_nX^n$; accounting for "weights" in $Y$. The maximum required power ($n$) is specified by ‘--fitmaxpower’. ‘polynomial-robust’ $Y=c_0+c_1X+c_2X^2+\cdots+c_nX^n$; rejects outliers. The function to use for outlier removal can be specified with the ‘--fitrobust’ option described below. This model doesn't take weights since they are calculated internally based on the outlier removal function (requires two input columns). The maximum required power ($n$) is specified by ‘--fitmaxpower’. For a comprehensive review of "robust" fitting and the available functions, please see the Robust linear regression (https://www.gnu.org/software/gsl/doc/html/lls.html#robust-linear-regression) section of the GNU Scientific Library. ‘--fitweight=STR’ The nature of the "weight" column (when a weight is necessary for the model). It can take one of the following values: ‘std’ Standard deviation of each $Y$ axis measurement: this is the usual "error" associated with a measurement (for example, in *note MakeCatalog::) and is the default value to this option. ‘var’ Variance of each $Y$ axis measurement. Assuming a Gaussian distribution with standard deviation $\sigma$, the variance is $\sigma^2$. ‘inv-var’ Inverse variance of each $Y$ axis measurement. Assuming a Gaussian distribution with standard deviation $\sigma$, the variance is $1/\sigma^2$. ‘--fitmaxpower=INT’ The maximum power (an integer) in a polynomial ($n$ in $Y=c_0+c_1X+c_2X^2+\cdots+c_nX^n$). This is only relevant when one of the polynomial models is given to ‘--fit’. The fit will return $n+1$ coefficients. ‘--fitrobust=STR’ The function for rejecting outliers in the ‘polynomial-robust’ fitting model. For a comprehensive review of "robust" fitting and the available functions, please see the Robust linear regression (https://www.gnu.org/software/gsl/doc/html/lls.html#robust-linear-regression) section of the GNU Scientific Library. This function can take the following values: ‘bisquare’ Tukey’s biweight (bisquare) function, this is the default function. According to the GSL manual, this is a good general purpose weight function. ‘cauchy’ Cauchy’s function (also known as the Lorentzian function). It doesn't guarantee a unique solution, so it should be used with care. ‘fair’ The fair function. It guarantees a unique solution and has continuous derivatives to three orders. ‘huber’ Huber's $\rho$ function. This is also a good general purpose weight function for rejecting outliers, but can cause difficulty in some special scenarios. ‘ols’ Ordinary Least Squares (OLS) solution with a constant weight of unity. ‘welsch’ Welsch function which is useful when the residuals follow an exponential distribution. ‘--fitestimate=STR/FLT’ Estimate the fitted function at a single point or a complete column of points. The input $X$ axis positions to estimate the function can be specified in the following ways: • A real number: the fitted function will be estimated at that $X$ position and the corresponding $Y$ and its error will be printed to standard output. • ‘self’: in this mode, the same X axis column that was used in the fit will be used for estimating the fitted function. This can be useful to visually/easily check the fit, see *note Least squares fitting::. • A file name: If the value is none of the above, Statistics expects it to be a file name containing a table. If the file is a FITS file, the HDU containing the table should be specified with the ‘--fitestimatehdu’ option. The column of the table to use for the $X$ axis points should be specified with the ‘--fitestimatecol’ option. The output in this mode can be customized in the following ways: • If a single floating point value is given ‘--fitestimate’, the fitted function will be estimated on that point and printed to standard output. • When nothing is given to ‘--output’, the independent column and the estimated values and errors are printed on the standard output. • If a file name is given to ‘--output’, the estimated table above is saved in that file. It can have any of the formats in *note Recognized table formats::. As a FITS file, all the fit outputs (coefficients, covariance matrix and reduced $\chi^2$) are kept as FITS keywords in the same HDU of the estimated table. For a complete example, see *note Least squares fitting::. When the covariance matrix (and thus the $\chi^2$) cannot be calculated (for example if you only have two rows!), the printed values on the terminal will be NaN. However, the FITS standard does not allow NaN values in keyword values! Therefore, when writing the $\chi^2$ and covariance matrix elements into the output FITS keywords, the largest value of the 64-bit floating point type will be written: $1.79769313486232\times10^{308}$; see *note Numeric data types::. • When ‘--quiet’ is given with ‘--fitestimate’, the fitted parameters are no longer printed on the standard output; they are available as FITS keywords in the file given to ‘--output’. ‘--fitestimatehdu=STR/INT’ HDU name or counter (counting from zero) that contains the table to be used for the estimating the fitted function over many points through ‘--fitestimate’. For more on selecting a HDU, see the description of ‘--hdu’ in *note Input output options::. ‘--fitestimatecol=STR/INT’ Column name or counter (counting from one) that contains the table to be used for the estimating the fitted function over many points through ‘--fitestimate’. See *note Selecting table columns::.  File: gnuastro.info, Node: Contour options, Next: Statistics on tiles, Prev: Fitting options, Up: Invoking aststatistics 7.1.5.5 Contour options ....................... Contours are useful to highlight the 2D shape of a certain flux level over an image. To derive contours in Statistics, you can use the option below: ‘-R FLT[,FLT[,FLT...]]’ ‘--contour=FLT[,FLT[,FLT...]]’ Write the contours for the requested levels in a file ending with ‘_contour.txt’. It will have three columns: the first two are the coordinates of each point and the third is the level it belongs to (one of the input values). Each disconnected contour region will be separated by a blank line. This is the requested format for adding contours with PGFPlots in LaTeX. If any other format can be useful for your work please let us know so we can add it. If the image has World Coordinate System information, the written coordinates will be in RA and Dec, otherwise, they will be in pixel coordinates. Note that currently, this is a very crude/simple implementation, please let us know if you find problematic situations so we can fix it.  File: gnuastro.info, Node: Statistics on tiles, Prev: Contour options, Up: Invoking aststatistics 7.1.5.6 Statistics on tiles ........................... All the options described until now were from the first class of operations discussed above: those that treat the whole dataset as one. However, it often happens that the relative position of the dataset elements over the dataset is significant. For example, you do not want one median value for the whole input image, you want to know how the median changes over the image. For such operations, the input has to be tessellated (see *note Tessellation::). Thus this class of options cannot currently be called along with the options above in one run of Statistics. ‘-t’ ‘--ontile’ Do the respective single-valued calculation over one tile of the input dataset, not the whole dataset. This option must be called with at least one of the single valued options discussed above (for example, ‘--mean’ or ‘--quantile’). The output will be a file in the same format as the input. If the ‘--oneelempertile’ option is called, then one element/pixel will be used for each tile (see *note Processing options::). Otherwise, the output will have the same size as the input, but each element will have the value corresponding to that tile's value. If multiple single valued operations are called, then for each operation there will be one extension in the output FITS file. ‘-y’ ‘--sky’ Estimate the Sky value on each tile as fully described in *note Quantifying signal in a tile::. As described in that section, several options are necessary to configure the Sky estimation which are listed below. The output file will have two extensions: the first is the Sky value and the second is the Sky standard deviation on each tile. Similar to ‘--ontile’, if the ‘--oneelempertile’ option is called, then one element/pixel will be used for each tile (see *note Processing options::). The parameters for estimating the sky value can be set with the following options, except for the ‘--sclipparams’ option (which is also used by the ‘--sigmaclip’), the rest are only used for the Sky value estimation. ‘-k=FITS’ ‘--kernel=FITS’ File name of kernel to help in estimating the significance of signal in a tile, see *note Quantifying signal in a tile::. ‘--khdu=STR’ Kernel HDU to help in estimating the significance of signal in a tile, see *note Quantifying signal in a tile::. ‘--meanmedqdiff=FLT’ The maximum acceptable distance between the quantiles of the mean and median, see *note Quantifying signal in a tile::. The initial Sky and its standard deviation estimates are measured on tiles where the quantiles of their mean and median are less distant than the value given to this option. For example, ‘--meanmedqdiff=0.01’ means that only tiles where the mean's quantile is between 0.49 and 0.51 (recall that the median's quantile is 0.5) will be used. ‘--sclipparams=FLT,FLT’ The $\sigma$-clipping parameters, see *note Sigma clipping::. This option takes two values which are separated by a comma (<,>). Each value can either be written as a single number or as a fraction of two numbers (for example, ‘3,1/10’). The first value to this option is the multiple of $\sigma$ that will be clipped ($\alpha$ in that section). The second value is the exit criteria. If it is less than 1, then it is interpreted as tolerance and if it is larger than one it is a specific number. Hence, in the latter case the value must be an integer. ‘--mclipparams=FLT,FLT’ The MAD-clipping parameters. This is very similar to ‘--sclipparams’ above, see there for more. ‘--outliersclip=FLT,FLT’ $\sigma$-clipping parameters for the outlier rejection of the Sky value (similar to ‘--sclipparams’). Outlier rejection is useful when the dataset contains a large and diffuse (almost flat within each tile) signal. The flatness of the profile will cause it to successfully pass the mean-median quantile difference test, so we will need to use the distribution of successful tiles for removing these false positive. For more, see the latter half of *note Quantifying signal in a tile::. ‘--outliernumngb=INT’ Number of neighboring tiles to use for outlier rejection (mostly the wings of bright stars or galaxies). If this option is given a value of zero, no outlier rejection will take place. For more see the latter half of *note Quantifying signal in a tile::. ‘--outliersigma=FLT’ Multiple of sigma to define an outlier in the Sky value estimation. If this option is given a value of zero, no outlier rejection will take place. For more see ‘--outliersclip’ and the latter half of *note Quantifying signal in a tile::. ‘--smoothwidth=INT’ Width of a flat kernel to convolve the interpolated tile values. Tile interpolation is done using the median of the ‘--interpnumngb’ neighbors of each tile (see *note Processing options::). If this option is given a value of zero or one, no smoothing will be done. Without smoothing, strong boundaries will probably be created between the values estimated for each tile. It is thus good to smooth the interpolated image so strong discontinuities do not show up in the final Sky values. The smoothing is done through convolution (see *note Convolution process::) with a flat kernel, so the value to this option must be an odd number. ‘--ignoreblankintiles’ Do not set the input's blank pixels to blank in the tiled outputs (for example, Sky and Sky standard deviation extensions of the output). This is only applicable when the tiled output has the same size as the input, in other words, when ‘--oneelempertile’ is not called. By default, blank values in the input (commonly on the edges which are outside the survey/field area) will be set to blank in the tiled outputs also. But in other scenarios this default behavior is not desired; for example, if you have masked something in the input, but want the tiled output under that also. ‘--checksky’ Create a multi-extension FITS file showing the steps that were used to estimate the Sky value over the input, see *note Quantifying signal in a tile::. The file will have two extensions for each step (one for the Sky and one for the Sky standard deviation). ‘--checkskynointerp’ Similar to ‘--checksky’, but it will stop as soon as the outlier tiles have been identified and before it interpolates the values to cover the whole image. This is useful when you want the good tile values before interpolation, and don't want to slow down your pipeline with the extra computing that interpolation and smoothing require.  File: gnuastro.info, Node: NoiseChisel, Next: Segment, Prev: Statistics, Up: Data analysis 7.2 NoiseChisel =============== Once instrumental signatures are removed from the raw data (image) in the initial reduction process (see *note Data manipulation::). You are naturally eager to start answering the scientific questions that motivated the data collection in the first place. However, the raw dataset/image is just an array of values/pixels, that is all! These raw values cannot directly be used to answer your scientific questions; for example, "how many galaxies are there in the image?" and "What is their magnitude?". The first high-level step your analysis will therefore be to classify, or label, the dataset elements (pixels) into two classes: 1) Noise, where random effects are the major contributor to the value, and 2) Signal, where non-random factors (for example, light from a distant galaxy) are present. This classification of the elements in a dataset is formally known as _detection_. In an observational/experimental dataset, signal is always buried in noise: only mock/simulated datasets are free of noise. Therefore detection, or the process of separating signal from noise, determines the number of objects you study and the accuracy of any higher-level measurement you do on them. Detection is thus the most important step of any analysis and is not trivial. In particular, the most scientifically interesting astronomical targets are faint, can have a large variety of morphologies, along with a large distribution in magnitude and size. Therefore when noise is significant, proper detection of your targets is a uniquely decisive step in your final scientific analysis/result. NoiseChisel is Gnuastro's program for detection of targets that do not have a sharp border (almost all astronomical objects). When the targets have sharp edges/borders (for example, cells in biological imaging), a simple threshold is enough to separate them from noise and each other (if they are not touching). To detect such sharp-edged targets, you can use Gnuastro's Arithmetic program in a command like below (assuming the threshold is ‘100’, see *note Arithmetic::): $ astarithmetic in.fits 100 gt 2 connected-components Since almost no astronomical target has such sharp edges, we need a more advanced detection methodology. NoiseChisel uses a new noise-based paradigm for detection of very extended and diffuse targets that are drowned deeply in the ocean of noise. It was initially introduced in Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) and improvements after the first four were published in Akhlaghi 2019 (https://arxiv.org/abs/1909.11230). Please take the time to go through these papers to most effectively understand the need of NoiseChisel and how best to use it. The name of NoiseChisel is derived from the first thing it does after thresholding the dataset: to erode it. In mathematical morphology, erosion on pixels can be pictured as carving-off boundary pixels. Hence, what NoiseChisel does is similar to what a wood chisel or stone chisel do. It is just not a hardware, but a software. In fact, looking at it as a chisel and your dataset as a solid cube of rock will greatly help in effectively understanding and optimally using it: with NoiseChisel you literally carve your targets out of the noise. Try running it with the ‘--checkdetection’ option, and open the temporary output as a multi-extension cube, to see each step of the carving process on your input dataset (see *note Viewing FITS file contents with DS9 or TOPCAT::). NoiseChisel's primary output is a binary detection map with the same size as the input but its pixels only have two values: 0 (background) and 1 (foreground). Pixels that do not harbor any detected signal (noise) are given a label (or value) of zero and those with a value of 1 have been identified as hosting signal. Segmentation is the process of classifying the signal into higher-level constructs. For example, if you have two separate galaxies in one image, NoiseChisel will give a value of 1 to the pixels of both (each forming an "island" of touching foreground pixels). After segmentation, the connected foreground pixels will get separate labels, enabling you to study them individually. NoiseChisel is only focused on detection (separating signal from noise), to _segment_ the signal (into separate galaxies for example), Gnuastro has a separate specialized program *note Segment::. NoiseChisel's output can be directly/readily fed into Segment. For more on NoiseChisel's output format and its benefits (especially in conjunction with *note Segment:: and later *note MakeCatalog::), please see Akhlaghi 2016 (https://arxiv.org/abs/1611.06387). Just note that when that paper was published, Segment was not yet spun-off into a separate program, and NoiseChisel done both detection and segmentation. NoiseChisel's output is designed to be generic enough to be easily used in any higher-level analysis. If your targets are not touching after running NoiseChisel and you are not interested in their sub-structure, you do not need the Segment program at all. You can ask NoiseChisel to find the connected pixels in the output with the ‘--label’ option. In this case, the output will not be a binary image any more, the signal will have counters/labels starting from 1 for each connected group of pixels. You can then directly feed NoiseChisel's output into MakeCatalog for measurements over the detections and the production of a catalog (see *note MakeCatalog::). Thanks to the published papers mentioned above, there is no need to provide a more complete introduction to NoiseChisel in this book. However, published papers cannot be updated any more, but the software has evolved/changed. The changes since publication are documented in *note NoiseChisel changes after publication::. In *note Invoking astnoisechisel::, the details of running NoiseChisel and its options are discussed. As discussed above, detection is one of the most important steps for your scientific result. It is therefore very important to obtain a good understanding of NoiseChisel (and afterwards *note Segment:: and *note MakeCatalog::). We strongly recommend reviewing two tutorials of *note General program usage tutorial:: and *note Detecting large extended targets::. They are designed to show how to most effectively use NoiseChisel for the detection of small faint objects and large extended objects. In the meantime, they also show the modular principle behind Gnuastro's programs and how they are built to complement, and build upon, each other. *note General program usage tutorial:: culminates in using NoiseChisel to detect galaxies and use its outputs to find the galaxy colors. Defining colors is a very common process in most science-cases. Therefore it is also recommended to (patiently) complete that tutorial for optimal usage of NoiseChisel in conjunction with all the other Gnuastro programs. *note Detecting large extended targets:: shows you can optimize NoiseChisel's settings for very extended objects to successfully carve out to signal-to-noise ratio levels of below 1/10. After going through those tutorials, play a little with the settings (in the order presented in the paper and *note Invoking astnoisechisel::) on a dataset you are familiar with and inspect all the check images (options starting with ‘--check’) to see the effect of each parameter. Below, in *note Invoking astnoisechisel::, we will review NoiseChisel's input, detection, and output options in *note NoiseChisel input::, *note Detection options::, and *note NoiseChisel output::. If you have used NoiseChisel within your research, please run it with ‘--cite’ to list the papers you should cite and how to acknowledge its funding sources. * Menu: * NoiseChisel changes after publication:: Updates since published papers. * Invoking astnoisechisel:: Options and arguments for NoiseChisel.  File: gnuastro.info, Node: NoiseChisel changes after publication, Next: Invoking astnoisechisel, Prev: NoiseChisel, Up: NoiseChisel 7.2.1 NoiseChisel changes after publication ------------------------------------------- NoiseChisel was initially introduced in Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) and updates after the first four years were published in Akhlaghi 2019 (https://arxiv.org/abs/1909.11230). To help in understanding how it works, those papers have many figures showing every step on multiple mock and real examples. We recommended to read these papers for a good understanding of what it does and how each parameter influences the output. However, the papers cannot be updated anymore, but NoiseChisel has evolved (and will continue to do so): better algorithms or steps have been found and implemented and some options have been added, removed or changed behavior. This book is thus the final and definitive guide to NoiseChisel. The aim of this section is to make the transition from the papers above to the installed version on your system, as smooth as possible with the list below. For a more detailed list of changes in each Gnuastro version, please see the ‘NEWS’ file(1). • An improved outlier rejection for identifying tiles without any signal has been implemented in the quantile-threshold phase: Prior to version 0.14, outliers were defined globally: the distribution of all tiles with an acceptable ‘--meanmedqdiff’ was inspected and outliers were found and rejected. However, this caused problems when there are strong gradients over the image (for example, an image prior to flat-fielding, or in the presence of a large foreground galaxy). In these cases, the faint wings of galaxies/stars could be mistakenly identified as Sky (leaving a footprint of the object on the Sky output) and wrongly subtracted. It was possible to play with the parameters to correct this for that particular dataset, but that was frustrating. Therefore from version 0.14, instead of finding outliers from the full tile distribution, we now measure the _slope_ of the tile's nearby tiles and find outliers locally. Three options have been added to configure this part of NoiseChisel: ‘--outliernumngb’, ‘--outliersclip’ and ‘--outliersigma’. For more on the local outlier-by-distance algorithm and the definition of _slope_ mentioned above, see *note Quantifying signal in a tile::. In our tests, this gave a much improved estimate of the quantile thresholds and final Sky values with default values. ---------- Footnotes ---------- (1) The ‘NEWS’ file is present in the released Gnuastro tarball, see *note Release tarball::.  File: gnuastro.info, Node: Invoking astnoisechisel, Prev: NoiseChisel changes after publication, Up: NoiseChisel 7.2.2 Invoking NoiseChisel -------------------------- NoiseChisel will detect signal in noise producing a multi-extension dataset containing a binary detection map which is the same size as the input. Its output can be readily used for input into *note Segment::, for higher-level segmentation, or *note MakeCatalog:: to do measurements and generate a catalog. The executable name is ‘astnoisechisel’ with the following general template $ astnoisechisel [OPTION ...] InputImage.fits One line examples: ## Detect signal in input.fits. $ astnoisechisel input.fits ## Inspect all the detection steps after changing a parameter. $ astnoisechisel input.fits --qthresh=0.4 --checkdetection ## Detect signal assuming input has 4 amplifier channels along first ## dimension and 1 along the second. Also set the regular tile size ## to 100 along both dimensions: $ astnoisechisel --numchannels=4,1 --tilesize=100,100 input.fits If NoiseChisel is to do processing (for example, you do not want to get help, or see the values to each input parameter), an input image should be provided with the recognized extensions (see *note Arguments::). NoiseChisel shares a large set of common operations with other Gnuastro programs, mainly regarding input/output, general processing steps, and general operating modes. To help in a unified experience between all of Gnuastro's programs, these operations have the same command-line options, see *note Common options:: for a full list/description (they are not repeated here). As in all Gnuastro programs, options can also be given to NoiseChisel in configuration files. For a thorough description on Gnuastro's configuration file parsing, please see *note Configuration files::. All of NoiseChisel's options with a short description are also always available on the command-line with the ‘--help’ option, see *note Getting help::. To inspect the option values without actually running NoiseChisel, append your command with ‘--printparams’ (or ‘-P’). NoiseChisel's input image may contain blank elements (see *note Blank pixels::). Blank elements will be ignored in all steps of NoiseChisel. Hence if your dataset has bad pixels which should be masked with a mask image, please use Gnuastro's *note Arithmetic:: program (in particular its ‘where’ operator) to convert those pixels to blank pixels before running NoiseChisel. Gnuastro's Arithmetic program has bitwise operators helping you select specific kinds of bad-pixels when necessary. A convolution kernel can also be optionally given. If a value (file name) is given to ‘--kernel’ on the command-line or in a configuration file (see *note Configuration files::), then that file will be used to convolve the image prior to thresholding. Otherwise a default kernel will be used. For a 2D image, the default kernel is a 2D Gaussian with a FWHM of 2 pixels truncated at 5 times the FWHM. This choice of the default kernel is discussed in Section 3.1.1 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). For a 3D cube, it is a Gaussian with FWHM of 1.5 pixels in the first two dimensions and 0.75 pixels in the third dimension. See *note Convolution kernel:: for kernel related options. Passing ‘none’ to ‘--kernel’ will disable convolution. On the other hand, through the ‘--convolved’ option, you may provide an already convolved image, see descriptions below for more. NoiseChisel defines two tessellations over the input (see *note Tessellation::). This enables it to deal with possible gradients in the input dataset and also significantly improve speed by processing each tile on different threads simultaneously. Tessellation related options are discussed in *note Processing options::. In particular, NoiseChisel uses two tessellations (with everything between them identical except the tile sizes): a fine-grained one with smaller tiles (used in thresholding and Sky value estimations) and another with larger tiles which is used for pseudo-detections over non-detected regions of the image. The common Tessellation options described in *note Processing options:: define all parameters of both tessellations. The large tile size for the latter tessellation is set through the ‘--largetilesize’ option. To inspect the tessellations on your input dataset, run NoiseChisel with ‘--checktiles’. *Usage TIP:* Frequently use the options starting with ‘--check’. Since the noise properties differ between different datasets, you can often play with the parameters/options for a better result than the default parameters. You can start with ‘--checkdetection’ for the main steps. For the full list of NoiseChisel's checking options please run: $ astnoisechisel --help | grep check *Not detecting wings of bright galaxies:* In such cases, probably the best solution is to increase ‘--outliernumngb’ (to reject tiles that are affected by very flat diffuse signal). For more, see *note Quantifying signal in a tile::. When working on 3D datacubes, the tessellation options need three values and updating them every time can be annoying/buggy. To simplify the job, NoiseChisel also installs a ‘astnoisechisel-3d.conf’ configuration file (see *note Configuration files::). You can use this for default values on datacubes. For example, if you installed Gnuastro with the prefix ‘/usr/local’ (the default location, see *note Installation directory::), you can benefit from this configuration file by running NoiseChisel like the example below. $ astnoisechisel cube.fits \ --config=/usr/local/etc/astnoisechisel-3d.conf To further simplify the process, you can define a shell alias in any startup file (for example, ‘~/.bashrc’, see *note Installation directory::). Assuming that you installed Gnuastro in ‘/usr/local’, you can add this line to the startup file (you may put it all in one line, it is broken into two lines here for fitting within page limits). alias astnoisechisel-3d="astnoisechisel \ --config=/usr/local/etc/astnoisechisel-3d.conf" Using this alias, you can call NoiseChisel with the name ‘astnoisechisel-3d’ (instead of ‘astnoisechisel’). It will automatically load the 3D specific configuration file first, and then parse any other arguments, options or configuration files. You can change the default values in this 3D configuration file by calling them on the command-line as you do with ‘astnoisechisel’(1). For example: $ astnoisechisel-3d --numchannels=3,3,1 cube.fits In the sections below, NoiseChisel's options are classified into three general classes to help in easy navigation. *note NoiseChisel input:: mainly discusses the options relating to input and those that are shared in both detection and segmentation. Options to configure the detection are described in *note Detection options:: and *note Segmentation options:: we discuss how you can fine-tune the segmentation of the detections. Finally, in *note NoiseChisel output:: the format of NoiseChisel's output is discussed. The order of options here follow the same logical order that the respective action takes place within NoiseChisel (note that the output of ‘--help’ is sorted alphabetically). Below, we will discuss NoiseChisel's options, classified into two general classes, to help in easy navigation. *note NoiseChisel input:: mainly discusses the basic options relating to inputs and prior to the detection process detection. Afterwards, *note Detection options:: fully describes every configuration parameter (option) related to detection and how they affect the final result. The order of options in this section follow the logical order within NoiseChisel. On first reading (while you are still new to NoiseChisel), it is therefore strongly recommended to read the options in the given order below. The output of ‘--printparams’ (or ‘-P’) also has this order. However, the output of ‘--help’ is sorted alphabetically. Finally, in *note NoiseChisel output:: the format of NoiseChisel's output is discussed. * Menu: * NoiseChisel input:: NoiseChisel's input options. * Detection options:: Configure detection in NoiseChisel. * NoiseChisel output:: NoiseChisel's output options and format. ---------- Footnotes ---------- (1) Recall that for single-invocation options, the last command-line invocation takes precedence over all previous invocations (including those in the 3D configuration file). See the description of ‘--config’ in *note Operating mode options::.  File: gnuastro.info, Node: NoiseChisel input, Next: Detection options, Prev: Invoking astnoisechisel, Up: Invoking astnoisechisel 7.2.2.1 NoiseChisel input ......................... The options here can be used to configure the inputs and output of NoiseChisel, along with some general processing options. Recall that you can always see the full list of Gnuastro's options with the ‘--help’ (see *note Getting help::), or ‘--printparams’ (or ‘-P’) to see their values (see *note Operating mode options::). ‘-k FITS’ ‘--kernel=FITS’ File name of kernel to smooth the image before applying the threshold, see *note Convolution kernel::. If no convolution is needed, give this option a value of ‘none’. The first step of NoiseChisel is to convolve/smooth the image and use the convolved image in multiple steps including the finding and applying of the quantile threshold (see ‘--qthresh’). The ‘--kernel’ option is not mandatory. If not called, for a 2D, image a 2D Gaussian profile with a FWHM of 2 pixels truncated at 5 times the FWHM is used. This choice of the default kernel is discussed in Section 3.1.1 of Akhlaghi and Ichikawa [2015]. For a 3D cube, when no file name is given to ‘--kernel’, a Gaussian with FWHM of 1.5 pixels in the first two dimensions and 0.75 pixels in the third dimension will be used. The reason for this particular configuration is that commonly in astronomical applications, 3D datasets do not have the same nature in all three dimensions, commonly the first two dimensions are spatial (RA and Dec) while the third is spectral (for example, wavelength). The samplings are also different, in the default case, the spatial sampling is assumed to be larger than the spectral sampling, hence a wider FWHM in the spatial directions, see *note Sampling theorem::. You can use MakeProfiles to build a kernel with any of its recognized profile types and parameters. For more details, please see *note MakeProfiles output dataset::. For example, the command below will make a Moffat kernel (with $\beta=2.8$) with FWHM of 2 pixels truncated at 10 times the FWHM. $ astmkprof --oversample=1 --kernel=moffat,2,2.8,10 Since convolution can be the slowest step of NoiseChisel, for large datasets, you can convolve the image once with Gnuastro's Convolve (see *note Convolve::), and use the ‘--convolved’ option to feed it directly to NoiseChisel. This can help getting faster results when you are playing/testing the higher-level options. ‘--khdu=STR’ HDU containing the kernel in the file given to the ‘--kernel’ option. ‘--convolved=FITS’ Use this file as the convolved image and do not do convolution (ignore ‘--kernel’). NoiseChisel will just check the size of the given dataset is the same as the input's size. If a wrong image (with the same size) is given to this option, the results (errors, bugs, etc.) are unpredictable. So please use this option with care and in a highly controlled environment, for example, in the scenario discussed below. In almost all situations, as the input gets larger, the single most CPU (and time) consuming step in NoiseChisel (and other programs that need a convolved image) is convolution. Therefore minimizing the number of convolutions can save a significant amount of time in some scenarios. One such scenario is when you want to segment NoiseChisel's detections using the same kernel (with *note Segment::, which also supports this ‘--convolved’ option). This scenario would require two convolutions of the same dataset: once by NoiseChisel and once by Segment. Using this option in both programs, only one convolution (prior to running NoiseChisel) is enough. Another common scenario where this option can be convenient is when you are testing NoiseChisel (or Segment) for the best parameters. You have to run NoiseChisel multiple times and see the effect of each change. However, once you are happy with the kernel, re-convolving the input on every change of higher-level parameters will greatly hinder, or discourage, further testing. With this option, you can convolve the input image with your chosen kernel once before running NoiseChisel, then feed it to NoiseChisel on each test run and thus save valuable time for better/more tests. To build your desired convolution kernel, you can use *note MakeProfiles::. To convolve the image with a given kernel you can use *note Convolve::. Spatial domain convolution is mandatory: in the frequency domain, blank pixels (if present) will cover the whole image and gradients will appear on the edges, see *note Spatial vs. Frequency domain::. Below you can see an example of the second scenario: you want to see how variation of the growth level (through the ‘--detgrowquant’ option) will affect the final result. Recall that you can ignore all the extra spaces, new lines, and backslash's ('‘\’') if you are typing in the terminal. In a shell script, remove the ‘$’ signs at the start of the lines. ## Make the kernel to convolve with. $ astmkprof --oversample=1 --kernel=gaussian,2,5 ## Convolve the input with the given kernel. $ astconvolve input.fits --kernel=kernel.fits \ --domain=spatial --output=convolved.fits ## Run NoiseChisel with seven growth quantile values. $ for g in 60 65 70 75 80 85 90; do \ astnoisechisel input.fits --convolved=convolved.fits \ --detgrowquant=0.$g --output=$g.fits; \ done ‘--chdu=STR’ The HDU/extension containing the convolved image in the file given to ‘--convolved’. ‘-w FITS’ ‘--widekernel=FITS’ File name of a wider kernel to use in estimating the difference of the mode and median in a tile (this difference is used to identify the significance of signal in that tile, see *note Quantifying signal in a tile::). As displayed in Figure 4 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664), a wider kernel will help in identifying the skewness caused by data in noise. The image that is convolved with this kernel is _only_ used for this purpose. Once the mode is found to be sufficiently close to the median, the quantile threshold is found on the image convolved with the sharper kernel (‘--kernel’), see ‘--qthresh’). Since convolution will significantly slow down the processing, this feature is optional. When it is not given, the image that is convolved with ‘--kernel’ will be used to identify good tiles _and_ apply the quantile threshold. This option is mainly useful in conditions were you have a very large, extended, diffuse signal that is still present in the usable tiles when using ‘--kernel’. See *note Detecting large extended targets:: for a practical demonstration on how to inspect the tiles used in identifying the quantile threshold. ‘--whdu=STR’ HDU containing the kernel file given to the ‘--widekernel’ option. ‘-L INT[,INT]’ ‘--largetilesize=INT[,INT]’ The size of each tile for the tessellation with the larger tile sizes. Except for the tile size, all the other parameters for this tessellation are taken from the common options described in *note Processing options::. The format is identical to that of the ‘--tilesize’ option that is discussed in that section.  File: gnuastro.info, Node: Detection options, Next: NoiseChisel output, Prev: NoiseChisel input, Up: Invoking astnoisechisel 7.2.2.2 Detection options ......................... Detection is the process of separating the pixels in the image into two groups: 1) Signal, and 2) Noise. Through the parameters below, you can customize the detection process in NoiseChisel. Recall that you can always see the full list of NoiseChisel's options with the ‘--help’ (see *note Getting help::), or ‘--printparams’ (or ‘-P’) to see their values (see *note Operating mode options::). ‘-Q FLT’ ‘--meanmedqdiff=FLT’ The maximum acceptable distance between the quantiles of the mean and median in each tile, see *note Quantifying signal in a tile::. The quantile threshold estimates are measured on tiles where the quantiles of their mean and median are less distant than the value given to this option. For example, ‘--meanmedqdiff=0.01’ means that only tiles where the mean's quantile is between 0.49 and 0.51 (recall that the median's quantile is 0.5) will be used. ‘-a INT’ ‘--outliernumngb=INT’ Number of neighboring tiles to use for outlier rejection (mostly the wings of bright stars or galaxies). For optimal detection of the wings of bright stars or galaxies, this is *the most important* option in NoiseChisel. This is because the extended wings of bright galaxies or stars (the PSF) can become flat over the tile. In this case, they will satisfy the ‘--meanmedqdiff’ condition and pass that step. Therefore, to correctly identify such bad tiles, we need to look at the neighboring nearby tiles. A tile that is on the wing of a bright galaxy/star will clearly be an outlier when looking at the neighbors. For more on the details of the outlier rejection algorithm, see the latter half of *note Quantifying signal in a tile::. If this option is given a value of zero, no outlier rejection will take place. ‘--outliersclip=FLT,FLT’ $\sigma$-clipping parameters for the outlier rejection of the quantile threshold. The format of the given values is similar to ‘--sigmaclip’ below. In NoiseChisel, outlier rejection on tiles is used when identifying the quantile thresholds (‘--qthresh’, ‘--noerodequant’, and ‘detgrowquant’). Outlier rejection is useful when the dataset contains a large and diffuse (almost flat within each tile) signal. The flatness of the profile will cause it to successfully pass the mean-median quantile difference test, so we will need to use the distribution of successful tiles for removing these false positives. For more, see the latter half of *note Quantifying signal in a tile::. ‘--outliersigma=FLT’ Multiple of sigma to define an outlier. If this option is given a value of zero, no outlier rejection will take place. For more see ‘--outliersclip’ and the latter half of *note Quantifying signal in a tile::. ‘-t FLT’ ‘--qthresh=FLT’ The quantile threshold to apply to the convolved image. The detection process begins with applying a quantile threshold to each of the tiles in the small tessellation. The quantile is only calculated for tiles that do not have any significant signal within them, see *note Quantifying signal in a tile::. Interpolation is then used to give a value to the unsuccessful tiles and it is finally smoothed. The quantile value is a floating point value between 0 and 1. Assume that we have sorted the $N$ data elements of a distribution (the pixels in each mesh on the convolved image). The quantile ($q$) of this distribution is the value of the element with an index of (the nearest integer to) $q\times{N}$ in the sorted data set. After thresholding is complete, we will have a binary (two valued) image. The pixels above the threshold are known as foreground pixels (have a value of 1) while those which lie below the threshold are known as background (have a value of 0). ‘--smoothwidth=INT’ Width of flat kernel used to smooth the interpolated quantile thresholds, see ‘--qthresh’ for more. ‘--checkqthresh’ Check the quantile threshold values on the mesh grid. A multi-extension FITS file, suffixed with ‘_qthresh.fits’ will be created showing each step of how the final quantile threshold is found. With this option, NoiseChisel will abort as soon as quantile estimation has been completed, allowing you to inspect the steps leading to the final quantile threshold, this can be disabled with ‘--continueaftercheck’. By default the output will have the same pixel size as the input, but with the ‘--oneelempertile’ option, only one pixel will be used for each tile (see *note Processing options::). The key things to remember are: • The measurements to find the thresholds are done on tiles that cover the whole image in a tessellation. Recall that you can set the size of tiles with ‘--tilesize’ and check them with ‘--checktiles’. Therefore except for the first and last extensions, the rest only show tiles. • NoiseChisel ultimately has three thresholds: the quantile threshold (that you set with ‘--qthresh’), the no-erode quantile (set with ‘--noerodequant’) and the growth quantile (set with ‘--detgrowquant’). Therefore for each step, we have three extensions. The output file will have the following extensions. Below, the extensions are put in the same order as you see in the file, with their name. ‘CONVOLVED’ This is the input image after convolution with the kernel (which is a FWHM=2 Gaussian by default, but you can change with ‘--kernel’). Recall that the thresholds are defined on the convolved image. ‘QTHRESH_ERODE’ ‘QTHRESH_NOERODE’ ‘QTHRESH_EXPAND’ In these three extensions, the tiles that have a quantile-of-mean more/less than 0.5 (quantile of median) $\pm d$ are set to NaN ($d$ is the value given to ‘--meanmedqdiff’, see *note Quantifying signal in a tile::). Therefore the non-NaN tiles that you see here are the tiles where there is no significant skewness (changing signal) within that tile. The only differing thing between the three extensions is the values of the non-NaN tiles. These values will be used to construct the final threshold map over the whole image. ‘VALUE1_NO_OUTLIER’ ‘VALUE2_NO_OUTLIER’ ‘VALUE3_NO_OUTLIER’ All outlier tiles have been masked. The reason for removing outliers is that the quantile-of-mean is only sensitive to signal that varies on a scale that is smaller than the tile size. Therefore the extended wings of large galaxies or bright stars (which vary on scales much larger than the tile size) will pass that test. As described in *note Quantifying signal in a tile:: outlier rejection is customized through ‘--outliernumngb’, ‘--outliersclip’ and ‘--outliersigma’. ‘THRESH1_INTERP’ ‘THRESH2_INTERP’ ‘THRESH3_INTERP’ Using the successful values that remain after the previous step, give values to all (interpolate) the tiles in the image. The interpolation is done using the nearest-neighbor method: for each tile, the N nearest neighbors are found and the median of their values is used to fill it. You can set the value of N through the ‘--interpnumngb’ option. ‘THRESH1_SMOOTH’ ‘THRESH2_SMOOTH’ ‘THRESH3_SMOOTH’ Smooth the interpolated image to remove the strong differences between touching tiles. Because we used the median value of the N nearest neighbors in the previous step, there can be strong discontinuities on the edges of tiles (which can directly show in the image after applying the threshold). The scale of the smoothing (number of nearby tiles to smooth with) is set with the ‘--smoothwidth’ option. ‘QTHRESH-APPLIED’ The pixels in this image can only have three values: ‘0’ These pixels had a value below the quantile threshold. ‘1’ These pixels had a value above the quantile threshold, but below the threshold for no erosion. Therefore in the next step, NoiseChisel will erode (set them to 0) these pixels if they are touching a 0-valued pixel. ‘2’ These pixels had a value above the no-erosion threshold. So NoiseChisel will not erode these pixels, it will only apply Opening to them afterwards. Recall that this was done to avoid loosing sharp point-sources (like stars in space-based imaging). ‘--blankasforeground’ In the erosion and opening steps below, treat blank elements as foreground (regions above the threshold). By default, blank elements in the dataset are considered to be background, so if a foreground pixel is touching it, it will be eroded. This option is irrelevant if the datasets contains no blank elements. When there are many blank elements in the dataset, treating them as foreground will systematically erode their regions less, therefore systematically creating more false positives. So use this option (when blank values are present) with care. ‘-e INT’ ‘--erode=INT’ The number of erosions to apply to the binary thresholded image. Erosion is simply the process of flipping (from 1 to 0) any of the foreground pixels that neighbor a background pixel. In a 2D image, there are two kinds of neighbors, 4-connected and 8-connected neighbors. In a 3D dataset, there are three: 6-connected, 18-connected, and 26-connected. You can specify which class of neighbors should be used for erosion with the ‘--erodengb’ option, see below. Erosion has the effect of shrinking the foreground pixels. To put it another way, it expands the holes. This is a founding principle in NoiseChisel: it exploits the fact that with very low thresholds, the holes in the very low surface brightness regions of an image will be smaller than regions that have no signal. Therefore by expanding those holes, we are able to separate the regions harboring signal. ‘--erodengb=INT’ The type of neighborhood (structuring element) used in erosion, see ‘--erode’ for an explanation on erosion. If the input is a 2D image, only two integer values are acceptable: 4 or 8. For a 3D input datacube, the acceptable values are: 6, 18 and 26. In 2D 4-connectivity, the neighbors of a pixel are defined as the four pixels on the top, bottom, right and left of a pixel that share an edge with it. The 8-connected neighbors on the other hand include the 4-connected neighbors along with the other 4 pixels that share a corner with this pixel. See Figure 6 (a) and (b) in Akhlaghi and Ichikawa (2015) for a demonstration. A similar argument applies to 3D datacubes. ‘--noerodequant’ Pure erosion is going to carve off sharp and small objects completely out of the detected regions. This option can be used to avoid missing such sharp and small objects (which have significant pixels, but not over a large area). All pixels with a value larger than the significance level specified by this option will not be eroded during the erosion step above. However, they will undergo the erosion and dilation of the opening step below. Like the ‘--qthresh’ option, the significance level is determined using the quantile (a value between 0 and 1). Just as a reminder, in the normal distribution, $1\sigma$, $1.5\sigma$, and $2\sigma$ are approximately on the 0.84, 0.93, and 0.98 quantiles. ‘-p INT’ ‘--opening=INT’ Depth of opening to be applied to the eroded binary image. Opening is a composite operation. When opening a binary image with a depth of $n$, $n$ erosions (explained in ‘--erode’) are followed by $n$ dilations. Simply put, dilation is the inverse of erosion. When dilating an image any background pixel is flipped (from 0 to 1) to become a foreground pixel. Dilation has the effect of fattening the foreground. Note that in NoiseChisel, the erosion which is part of opening is independent of the initial erosion that is done on the thresholded image (explained in ‘--erode’). The structuring element for the opening can be specified with the ‘--openingngb’ option. Opening has the effect of removing the thin foreground connections (mostly noise) between separate foreground 'islands' (detections) thereby completely isolating them. Once opening is complete, we have _initial_ detections. ‘--openingngb=INT’ The structuring element used for opening, see ‘--erodengb’ for more information about a structuring element. ‘--skyfracnoblank’ Ignore blank pixels when estimating the fraction of undetected pixels for Sky estimation. NoiseChisel only measures the Sky over the tiles that have a sufficiently large fraction of undetected pixels (value given to ‘--minskyfrac’). By default this fraction is found by dividing number of undetected pixels in a tile by the tile's area. But this default behavior ignores the possibility of blank pixels. In situations that blank/masked pixels are scattered across the image and if they are large enough, all the tiles can fail the ‘--minskyfrac’ test, thus not allowing NoiseChisel to proceed. With this option, such scenarios can be fixed: the denominator of the fraction will be the number of non-blank elements in the tile, not the total tile area. ‘-B FLT’ ‘--minskyfrac=FLT’ Minimum fraction (value between 0 and 1) of Sky (undetected) areas in a tile. Only tiles with a fraction of undetected pixels (Sky) larger than this value will be used to estimate the Sky value. NoiseChisel uses this option value twice to estimate the Sky value: after initial detections and in the end when false detections have been removed. Because of the PSF and their intrinsic amorphous properties, astronomical objects (except cosmic rays) never have a clear cutoff and commonly sink into the noise very slowly. Even below the very low thresholds used by NoiseChisel. So when a large fraction of the area of one mesh is covered by detections, it is very plausible that their faint wings are present in the undetected regions (hence causing a bias in any measurement). To get an accurate measurement of the above parameters over the tessellation, tiles that harbor too many detected regions should be excluded. The used tiles are visible in the respective ‘--check’ option of the given step. ‘--checkdetsky’ Check the initial approximation of the sky value and its standard deviation in a FITS file ending with ‘_detsky.fits’. With this option, NoiseChisel will abort as soon as the sky value used for defining pseudo-detections is complete. This allows you to inspect the steps leading to the final quantile threshold, this behavior can be disabled with ‘--continueaftercheck’. By default the output will have the same pixel size as the input, but with the ‘--oneelempertile’ option, only one pixel will be used for each tile (see *note Processing options::). ‘-s FLT,FLT’ ‘--sigmaclip=FLT,FLT’ The $\sigma$-clipping parameters for measuring the initial and final Sky values from the undetected pixels, see *note Sigma clipping::. This option takes two values which are separated by a comma (<,>). Each value can either be written as a single number or as a fraction of two numbers (for example, ‘3,1/10’). The first value to this option is the multiple of $\sigma$ that will be clipped ($\alpha$ in that section). The second value is the exit criteria. If it is less than 1, then it is interpreted as tolerance and if it is larger than one it is assumed to be the fixed number of iterations. Hence, in the latter case the value must be an integer. ‘-R FLT’ ‘--dthresh=FLT’ The detection threshold: a multiple of the initial Sky standard deviation added with the initial Sky approximation (which you can inspect with ‘--checkdetsky’). This flux threshold is applied to the initially undetected regions on the unconvolved image. The background pixels that are completely engulfed in a 4-connected foreground region are converted to background (holes are filled) and one opening (depth of 1) is applied over both the initially detected and undetected regions. The Signal to noise ratio of the resulting 'pseudo-detections' are used to identify true vs. false detections. See Section 3.1.5 and Figure 7 in Akhlaghi and Ichikawa (2015) for a very complete explanation. ‘--dopening=INT’ The number of openings to do after applying ‘--dthresh’. ‘--dopeningngb=INT’ The connectivity used in the opening of ‘--dopening’. In a 2D image this must be either 4 or 8. The stronger the connectivity, the more smaller regions will be discarded. ‘--holengb=INT’ The connectivity (defined by the number of neighbors) to fill holes after applying ‘--dthresh’ (above) to find pseudo-detections. For example, in a 2D image it must be 4 (the neighbors that are most strongly connected) or 8 (all neighbors). The stronger the connectivity, the stronger the hole will be enclosed. So setting a value of 8 in a 2D image means that the walls of the hole are 4-connected. If standard (near Sky level) values are given to ‘--dthresh’, setting ‘--holengb=4’, might fill the complete dataset and thus not create enough pseudo-detections. ‘--pseudoconcomp=INT’ The connectivity (defined by the number of neighbors) to find individual pseudo-detections. If it is a weaker connectivity (4 in a 2D image), then pseudo-detections that are connected on the corners will be treated as separate. ‘-m INT’ ‘--snminarea=INT’ The minimum area to calculate the Signal to noise ratio on the pseudo-detections of both the initially detected and undetected regions. When the area in a pseudo-detection is too small, the Signal to noise ratio measurements will not be accurate and their distribution will be heavily skewed to the positive. So it is best to ignore any pseudo-detection that is smaller than this area. Use ‘--detsnhistnbins’ to check if this value is reasonable or not. ‘--checksn’ Save the S/N values of the pseudo-detections (and possibly grown detections if ‘--cleangrowndet’ is called) into separate tables. If ‘--tableformat’ is a FITS table, each table will be written into a separate extension of one file suffixed with ‘_detsn.fits’. If it is plain text, a separate file will be made for each table (ending in ‘_detsn_sky.txt’, ‘_detsn_det.txt’ and ‘_detsn_grown.txt’). For more on ‘--tableformat’ see *note Input output options::. You can use these to inspect the S/N values and their distribution (in combination with the ‘--checkdetection’ option to see where the pseudo-detections are). You can use Gnuastro's *note Statistics:: to make a histogram of the distribution or any other analysis you would like for better understanding of the distribution (for example, through a histogram). ‘--minnumfalse=INT’ The minimum number of 'pseudo-detections' over the undetected regions to identify a Signal-to-Noise ratio threshold. The Signal to noise ratio (S/N) of false pseudo-detections in each tile is found using the quantile of the S/N distribution of the pseudo-detections over the undetected pixels in each mesh. If the number of S/N measurements is not large enough, the quantile will not be accurate (can have large scatter). For example, if you set ‘--snquant=0.99’ (or the top 1 percent), then it is best to have at least 100 S/N measurements. ‘-c FLT’ ‘--snquant=FLT’ The quantile of the Signal to noise ratio distribution of the pseudo-detections in each mesh to use for filling the large mesh grid. Note that this is only calculated for the large mesh grids that satisfy the minimum fraction of undetected pixels (value of ‘--minbfrac’) and minimum number of pseudo-detections (value of ‘--minnumfalse’). ‘--snthresh=FLT’ Manually set the signal-to-noise ratio of true pseudo-detections. With this option, NoiseChisel will not attempt to find pseudo-detections over the noisy regions of the dataset, but will directly go onto applying the manually input value. This option is useful in crowded images where there is no blank sky to find the sky pseudo-detections. You can get this value on a similarly reduced dataset (from another region of the Sky with more undetected regions spaces). ‘-d FLT’ ‘--detgrowquant=FLT’ Quantile limit to "grow" the final detections. As discussed in the previous options, after applying the initial quantile threshold, layers of pixels are carved off the objects to identify true signal. With this step you can return those low surface brightness layers that were carved off back to the detections. To disable growth, set the value of this option to ‘1’. The process is as follows: after the true detections are found, all the non-detected pixels above this quantile will be put in a list and used to "grow" the true detections (seeds of the growth). Like all quantile thresholds, this threshold is defined and applied to the convolved dataset. Afterwards, the dataset is dilated once (with minimum connectivity) to connect very thin regions on the boundary: imagine building a dam at the point rivers spill into an open sea/ocean. Finally, all holes are filled. In the geography metaphor, holes can be seen as the closed (by the dams) rivers and lakes, so this process is like turning the water in all such rivers and lakes into soil. See ‘--detgrowmaxholesize’ for configuring the hole filling. Note that since the growth occurs on all neighbors of a data element, the quantile for 3D detection must be must larger than that of 2D detection. Recall that in 2D each element has 8 neighbors while in 3D there are 27 neighbors. ‘--detgrowmaxholesize=INT’ The maximum hole size to fill during the final expansion of the true detections as described in ‘--detgrowquant’. This is necessary when the input contains many smaller objects and can be used to avoid marking blank sky regions as detections. For example, multiple galaxies can be positioned such that they surround an empty region of sky. If all the holes are filled, the Sky region in between them will be taken as a detection which is not desired. To avoid such cases, the integer given to this option must be smaller than the hole between such objects. However, we should caution that unless the "hole" is very large, the combined faint wings of the galaxies might actually be present in between them, so be very careful in not filling such holes. On the other hand, if you have a very large (and extended) galaxy, the diffuse wings of the galaxy may create very large holes over the detections. In such cases, a large enough value to this option will cause all such holes to be detected as part of the large galaxy and thus help in detecting it to extremely low surface brightness limits. Therefore, especially when large and extended objects are present in the image, it is recommended to give this option (very) large values. For one real-world example, see *note Detecting large extended targets::. ‘--cleangrowndet’ After dilation, if the signal-to-noise ratio of a detection is less than the derived pseudo-detection S/N limit, that detection will be discarded. In an ideal/clean noise, a true detection's S/N should be larger than its constituent pseudo-detections because its area is larger and it also covers more signal. However, on a false detections (especially at lower ‘--snquant’ values), the increase in size can cause a decrease in S/N below that threshold. This will improve purity and not change completeness (a true detection will not be discarded). Because a true detection has flux in its vicinity and dilation will catch more of that flux and increase the S/N. So on a true detection, the final S/N cannot be less than pseudo-detections. However, in many real images bad processing creates artifacts that cannot be accurately removed by the Sky subtraction. In such cases, this option will decrease the completeness (will artificially discard true detections). So this feature is not default and should to be explicitly called when you know the noise is clean. ‘--checkdetection’ Every step of the detection process will be added as an extension to a file with the suffix ‘_det.fits’. Going through each would just be a repeat of the explanations above and also of those in Akhlaghi and Ichikawa (2015). The extension label should be sufficient to recognize which step you are observing. Viewing all the steps can be the best guide in choosing the best set of parameters. With this option, NoiseChisel will abort as soon as a snapshot of all the detection process is saved. This behavior can be disabled with ‘--continueaftercheck’. ‘--checksky’ Check the derivation of the final sky and its standard deviation values on the mesh grid. With this option, NoiseChisel will abort as soon as the sky value is estimated over the image (on each tile). This behavior can be disabled with ‘--continueaftercheck’. By default the output will have the same pixel size as the input, but with the ‘--oneelempertile’ option, only one pixel will be used for each tile (see *note Processing options::). ����������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro.info-7�������������������������������������������������������������������0000644�0001750�0001750�00001116434�14557514037�012435� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is gnuastro.info, produced by makeinfo version 7.1 from gnuastro.texi. This book documents version 0.22 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * Match: (gnuastro)Match. Match two separate catalogs. * astmatch: (gnuastro)Invoking astmatch. Options to Match. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Segment: (gnuastro)Segment. Segment detections based on signal structure. * astsegment: (gnuastro)Invoking astsegment. Options to Segment. * Query: (gnuastro)Query. Access remote databases for downloading data. * astquery: (gnuastro)Invoking astquery. Options to Query. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. * astscript: (gnuastro)Installed scripts. Gnuastro's installed scripts. * astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script * astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script * astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script * astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script * astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script * astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script * astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script * astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script * astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script * astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script * astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script END-INFO-DIR-ENTRY  File: gnuastro.info, Node: NoiseChisel output, Prev: Detection options, Up: Invoking astnoisechisel 7.2.2.3 NoiseChisel output .......................... NoiseChisel's output is a multi-extension FITS file. The main extension/dataset is a (binary) detection map. It has the same size as the input but with only two possible values for all pixels: 0 (for pixels identified as noise) and 1 (for those identified as signal/detections). The detection map is followed by a Sky and Sky standard deviation dataset (which are calculated from the binary image). By default (when ‘--rawoutput’ is not called), NoiseChisel will also subtract the Sky value from the input and save the sky-subtracted input as the first extension in the output with data. The zero-th extension (that contains no data), contains NoiseChisel's configuration as FITS keywords, see *note Output FITS files::. The name of the output file can be set by giving a value to ‘--output’ (this is a common option between all programs and is therefore discussed in *note Input output options::). If ‘--output’ is not used, the input name will be suffixed with ‘_detected.fits’ and used as output, see *note Automatic output::. If any of the options starting with ‘--check*’ are given, NoiseChisel will not complete and will abort as soon as the respective check images are created. For more information on the different check images, see the description for the ‘--check*’ options in *note Detection options:: (this can be disabled with ‘--continueaftercheck’). The last two extensions of the output are the Sky and its Standard deviation, see *note Sky value:: for a complete explanation. They are calculated on the tile grid that you defined for NoiseChisel. By default these datasets will have the same size as the input, but with all the pixels in one tile given one value. To be more space-efficient (keep only one pixel per tile), you can use the ‘--oneelempertile’ option, see *note Tessellation::. To inspect any of NoiseChisel's output files, assuming you use SAO DS9, you can configure your Graphic User Interface (GUI) to open NoiseChisel's output as a multi-extension data cube. This will allow you to flip through the different extensions and visually inspect the results. This process has been described for the GNOME GUI (most common GUI in GNU/Linux operating systems) in *note Viewing FITS file contents with DS9 or TOPCAT::. NoiseChisel's output configuration options are described in detail below. ‘--continueaftercheck’ Continue NoiseChisel after any of the options starting with ‘--check’ (see *note Detection options::. NoiseChisel involves many steps and as a result, there are many checks, allowing you to inspect the status of the processing. The results of each step affect the next steps of processing. Therefore, when you want to check the status of the processing at one step, the time spent to complete NoiseChisel is just wasted/distracting time. To encourage easier experimentation with the option values, when you use any of the NoiseChisel options that start with ‘--check’, NoiseChisel will abort once its desired extensions have been written. With ‘--continueaftercheck’ option, you can disable this behavior and ask NoiseChisel to continue with the rest of the processing, even after the requested check files are complete. ‘--ignoreblankintiles’ Do not set the input's blank pixels to blank in the tiled outputs (for example, Sky and Sky standard deviation extensions of the output). This is only applicable when the tiled output has the same size as the input, in other words, when ‘--oneelempertile’ is not called. By default, blank values in the input (commonly on the edges which are outside the survey/field area) will be set to blank in the tiled outputs also. But in other scenarios this default behavior is not desired; for example, if you have masked something in the input, but want the tiled output under that also. ‘-l’ ‘--label’ Run a connected-components algorithm on the finally detected pixels to identify which pixels are connected to which. By default the main output is a binary dataset with only two values: 0 (for noise) and 1 (for signal/detections). See *note NoiseChisel output:: for more. The purpose of NoiseChisel is to detect targets that are extended and diffuse, with outer parts that sink into the noise very gradually (galaxies and stars for example). Since NoiseChisel digs down to extremely low surface brightness values, many such targets will commonly be detected together as a single large body of connected pixels. To properly separate connected objects, sophisticated segmentation methods are commonly necessary on NoiseChisel's output. Gnuastro has the dedicated *note Segment:: program for this job. Since input images are commonly large and can take a significant volume, the extra volume necessary to store the labels of the connected components in the detection map (which will be created with this ‘--label’ option, in 32-bit signed integer type) can thus be a major waste of space. Since the default output is just a binary dataset, an 8-bit unsigned dataset is enough. The binary output will also encourage users to segment the result separately prior to doing higher-level analysis. As an alternative to ‘--label’, if you have the binary detection image, you can use the ‘connected-components’ operator in Gnuastro's Arithmetic program to identify regions that are connected with each other. For example, with this command (assuming NoiseChisel's output is called ‘nc.fits’): $ astarithmetic nc.fits 2 connected-components -hDETECTIONS ‘--rawoutput’ Do not include the Sky-subtracted input image as the first extension of the output. By default, the Sky-subtracted input is put in the first extension of the output. The next extensions are NoiseChisel's main outputs described above. The extra Sky-subtracted input can be convenient in checking NoiseChisel's output and comparing the detection map with the input: visually see if everything you expected is detected (reasonable completeness) and that you do not have too many false detections (reasonable purity). This visual inspection is simplified if you use SAO DS9 to view NoiseChisel's output as a multi-extension data-cube, see *note Viewing FITS file contents with DS9 or TOPCAT::. When you are satisfied with your NoiseChisel configuration (therefore you do not need to check on every run), or you want to archive/transfer the outputs, or the datasets become large, or you are running NoiseChisel as part of a pipeline, this Sky-subtracted input image can be a significant burden (take up a large volume). The fact that the input is also noisy, makes it hard to compress it efficiently. In such cases, this ‘--rawoutput’ can be used to avoid the extra sky-subtracted input in the output. It is always possible to easily produce the Sky-subtracted dataset from the input (assuming it is in extension ‘1’ of ‘in.fits’) and the ‘SKY’ extension of NoiseChisel's output (let's call it ‘nc.fits’) with a command like below (assuming NoiseChisel was not run with ‘--oneelempertile’, see *note Tessellation::): $ astarithmetic in.fits nc.fits - -h1 -hSKY *Save space:* with the ‘--rawoutput’ and ‘--oneelempertile’, NoiseChisel's output will only be one binary detection map and two much smaller arrays with one value per tile. Since none of these have noise they can be compressed very effectively (without any loss of data) with exceptionally high compression ratios. This makes it easy to archive, or transfer, NoiseChisel's output even on huge datasets. To compress it with the most efficient method (take up less volume), run the following command: $ gzip --best noisechisel_output.fits The resulting ‘.fits.gz’ file can then be fed into any of Gnuastro's programs directly, or viewed in viewers like SAO DS9, without having to decompress it separately (they will just take a little longer, because they have to internally decompress it before starting). See *note NoiseChisel optimization for storage:: for an example on a real dataset.  File: gnuastro.info, Node: Segment, Next: MakeCatalog, Prev: NoiseChisel, Up: Data analysis 7.3 Segment =========== Once signal is separated from noise (for example, with *note NoiseChisel::), you have a binary dataset: each pixel is either signal (1) or noise (0). Signal (for example, every galaxy in your image) has been "detected", but all detections have a label of 1. Therefore while we know which pixels contain signal, we still cannot find out how many galaxies they contain or which detected pixels correspond to which galaxy. At the lowest (most generic) level, detection is a kind of segmentation (segmenting the whole dataset into signal and noise, see *note NoiseChisel::). Here, we will define segmentation only on signal: to separate sub-structure within the detections. If the targets are clearly separated, or their detected regions are not touching, a simple connected components(1) algorithm (very basic segmentation) is enough to separate the regions that are touching/connected. This is such a basic and simple form of segmentation that Gnuastro's Arithmetic program has an operator for it: see ‘connected-components’ in *note Arithmetic operators::. Assuming the binary dataset is called ‘binary.fits’, you can use it with a command like this: $ astarithmetic binary.fits 2 connected-components You can even do a very basic detection (a threshold, say at value ‘100’) _and_ segmentation in Arithmetic with a single command like below: $ astarithmetic in.fits 100 gt 2 connected-components However, in most astronomical situations our targets are not nicely separated or have a sharp boundary/edge (for a threshold to suffice): they touch (for example, merging galaxies), or are simply in the same line-of-sight (which is much more common). This causes their images to overlap. In particular, when you do your detection with NoiseChisel, you will detect signal to very low surface brightness limits: deep into the faint wings of galaxies or bright stars (which can extend very far and irregularly from their center). Therefore, it often happens that several galaxies are detected as one large detection. Since they are touching, a simple connected components algorithm will not suffice. It is therefore necessary to do a more sophisticated segmentation and break up the detected pixels (even those that are touching) into multiple target objects as accurately as possible. Segment will use a detection map and its corresponding dataset to find sub-structure over the detected areas and use them for its segmentation. Until Gnuastro version 0.6 (released in 2018), Segment was part of *note NoiseChisel::. Therefore, similar to NoiseChisel, the best place to start reading about Segment and understanding what it does (with many illustrative figures) is Section 3.2 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664), and continue with Akhlaghi 2019 (https://arxiv.org/abs/1909.11230). As a summary, Segment first finds true _clump_s over the detections. Clumps are associated with local maxima/minima(2) and extend over the neighboring pixels until they reach a local minimum/maximum (_river_/_watershed_). By default, Segment will use the distribution of clump signal-to-noise ratios over the undetected regions as reference to find "true" clumps over the detections. Using the undetected regions can be disabled by directly giving a signal-to-noise ratio to ‘--clumpsnthresh’. The true clumps are then grown to a certain threshold over the detections. Based on the strength of the connections (rivers/watersheds) between the grown clumps, they are considered parts of one _object_ or as separate _object_s. See Section 3.2 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) for more. Segment's main output are thus two labeled datasets: 1) clumps, and 2) objects. See *note Segment output:: for more. To start learning about Segment, especially in relation to detection (*note NoiseChisel::) and measurement (*note MakeCatalog::), the recommended references are Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664), Akhlaghi 2016 (https://arxiv.org/abs/1611.06387) and Akhlaghi 2019 (https://arxiv.org/abs/1909.11230). If you have used Segment within your research, please run it with ‘--cite’ to list the papers you should cite and how to acknowledge its funding sources. Those papers cannot be updated any more but the software will evolve. For example, Segment became a separate program (from NoiseChisel) in 2018 (after those papers were published). Therefore this book is the definitive reference. Finally, in *note Invoking astsegment::, we will discuss Segment's inputs, outputs and configuration options. * Menu: * Invoking astsegment:: Inputs, outputs and options to Segment ---------- Footnotes ---------- (1) <https://en.wikipedia.org/wiki/Connected-component_labeling> (2) By default the maximum is used as the first clump pixel, to define clumps based on local minima, use the ‘--minima’ option.  File: gnuastro.info, Node: Invoking astsegment, Prev: Segment, Up: Segment 7.3.1 Invoking Segment ---------------------- Segment will identify substructure within the detected regions of an input image. Segment's output labels can be directly used for measurements (for example, with *note MakeCatalog::). The executable name is ‘astsegment’ with the following general template $ astsegment [OPTION ...] InputImage.fits One line examples: ## Segment NoiseChisel's detected regions. $ astsegment default-noisechisel-output.fits ## Use a hand-input S/N value for keeping true clumps ## (avoid finding the S/N using the undetected regions). $ astsegment nc-out.fits --clumpsnthresh=10 ## Inspect all the segmentation steps after changing a parameter. $ astsegment input.fits --snquant=0.9 --checksegmentaion ## Use the fixed value of 0.01 for the input's Sky standard deviation ## (in the units of the input), and assume all the pixels are a ## detection (for example, a large structure extending over the whole ## image), and only keep clumps with S/N>10 as true clumps. $ astsegment in.fits --std=0.01 --detection=all --clumpsnthresh=10 If Segment is to do processing (for example, you do not want to get help, or see the values of each option), at least one input dataset is necessary along with detection and error information, either as separate datasets (per-pixel) or fixed values, see *note Segment input::. Segment shares a large set of common operations with other Gnuastro programs, mainly regarding input/output, general processing steps, and general operating modes. To help in a unified experience between all of Gnuastro's programs, these common operations have the same names and defined in *note Common options::. As in all Gnuastro programs, options can also be given to Segment in configuration files. For a thorough description of Gnuastro's configuration file parsing, please see *note Configuration files::. All of Segment's options with a short description are also always available on the command-line with the ‘--help’ option, see *note Getting help::. To inspect the option values without actually running Segment, append your command with ‘--printparams’ (or ‘-P’). To help in easy navigation between Segment's options, they are separately discussed in the three sub-sections below: *note Segment input:: discusses how you can customize the inputs to Segment. *note Segmentation options:: is devoted to options specific to the high-level segmentation process. Finally, in *note Segment output::, we will discuss options that affect Segment's output. * Menu: * Segment input:: Input files and options. * Segmentation options:: Parameters of the segmentation process. * Segment output:: Outputs of Segment  File: gnuastro.info, Node: Segment input, Next: Segmentation options, Prev: Invoking astsegment, Up: Invoking astsegment 7.3.1.1 Segment input ..................... Besides the input dataset (for example, astronomical image), Segment also needs to know the Sky standard deviation and the regions of the dataset that it should segment. The values dataset is assumed to be Sky subtracted by default. If it is not, you can ask Segment to subtract the Sky internally by calling ‘--sky’. For the rest of this discussion, we will assume it is already sky subtracted. The Sky and its standard deviation can be a single value (to be used for the whole dataset) or a separate dataset (for a separate value per pixel). If a dataset is used for the Sky and its standard deviation, they must either be the size of the input image, or have a single value per tile (generated with ‘--oneelempertile’, see *note Processing options:: and *note Tessellation::). The detected regions/pixels can be specified as a detection map (for example, see *note NoiseChisel output::). If ‘--detection=all’, Segment will not read any detection map and assume the whole input is a single detection. For example, when the dataset is fully covered by a large nearby galaxy/globular cluster. When dataset are to be used for any of the inputs, Segment will assume they are multiple extensions of a single file by default (when ‘--std’ or ‘--detection’ are not called). For example, NoiseChisel's default output *note NoiseChisel output::. When the Sky-subtracted values are in one file, and the detection and Sky standard deviation are in another, you just need to use ‘--detection’: in the absence of ‘--std’, Segment will look for both the detection labels and Sky standard deviation in the file given to ‘--detection’. Ultimately, if all three are in separate files, you need to call both ‘--detection’ and ‘--std’. The extensions of the three mandatory inputs can be specified with ‘--hdu’, ‘--dhdu’, and ‘--stdhdu’. For a full discussion on what to give to these options, see the description of ‘--hdu’ in *note Input output options::. To see their default values (along with all the other options), run Segment with the ‘--printparams’ (or ‘-P’) option. Just recall that in the absence of ‘--detection’ and ‘--std’, all three are assumed to be in the same file. If you only want to see Segment's default values for HDUs on your system, run this command: $ astsegment -P | grep hdu By default Segment will convolve the input with a kernel to improve the signal-to-noise ratio of true peaks. If you already have the convolved input dataset, you can pass it directly to Segment for faster processing (using the ‘--convolved’ and ‘--chdu’ options). Just do not forget that the convolved image must also be Sky-subtracted before calling Segment. If a value/file is given to ‘--sky’, the convolved values will also be Sky subtracted internally. Alternatively, if you prefer to give a kernel (with ‘--kernel’ and ‘--khdu’), Segment can do the convolution internally. To disable convolution, use ‘--kernel=none’. ‘--sky=STR/FLT’ The Sky value(s) to subtract from the input. This option can either be given a constant number or a file name containing a dataset (multiple values, per pixel or per tile). By default, Segment will assume the input dataset is Sky subtracted, so this option is not mandatory. If the value cannot be read as a number, it is assumed to be a file name. When the value is a file, the extension can be specified with ‘--skyhdu’. When it is not a single number, the given dataset must either have the same size as the output or the same size as the tessellation (so there is one pixel per tile, see *note Tessellation::). When this option is given, its value(s) will be subtracted from the input and the (optional) convolved dataset (given to ‘--convolved’) prior to starting the segmentation process. ‘--skyhdu=STR/INT’ The HDU/extension containing the Sky values. This is mandatory when the value given to ‘--sky’ is not a number. Please see the description of ‘--hdu’ in *note Input output options:: for the different ways you can identify a special extension. ‘--std=STR/FLT’ The Sky standard deviation value(s) corresponding to the input. The value can either be a constant number or a file name containing a dataset (multiple values, per pixel or per tile). The Sky standard deviation is mandatory for Segment to operate. If the value cannot be read as a number, it is assumed to be a file name. When the value is a file, the extension can be specified with ‘--skyhdu’. When it is not a single number, the given dataset must either have the same size as the output or the same size as the tessellation (so there is one pixel per tile, see *note Tessellation::). When this option is not called, Segment will assume the standard deviation is a dataset and in a HDU/extension (‘--stdhdu’) of another one of the input file(s). If a file is given to ‘--detection’, it will assume that file contains the standard deviation dataset, otherwise, it will look into input filename (the main argument, without any option). ‘--stdhdu=INT/STR’ The HDU/extension containing the Sky standard deviation values, when the value given to ‘--std’ is a file name. Please see the description of ‘--hdu’ in *note Input output options:: for the different ways you can identify a special extension. ‘--variance’ The input Sky standard deviation value/dataset is actually variance. When this option is called, the square root of input Sky standard deviation (see ‘--std’) is used internally, not its raw value(s). ‘-d FITS’ ‘--detection=FITS’ Detection map to use for segmentation. If given a value of ‘all’, Segment will assume the whole dataset must be segmented, see below. If a detection map is given, the extension can be specified with ‘--dhdu’. If not given, Segment will assume the desired HDU/extension is in the main input argument (input file specified with no option). The final segmentation (clumps or objects) will only be over the non-zero pixels of this detection map. The dataset must have the same size as the input image. Only datasets with an integer type are acceptable for the labeled image, see *note Numeric data types::. If your detection map only has integer values, but it is stored in a floating point container, you can use Gnuastro's Arithmetic program (see *note Arithmetic::) to convert it to an integer container, like the example below: $ astarithmetic float.fits int32 --output=int.fits It may happen that the whole input dataset is covered by signal, for example, when working on parts of the Andromeda galaxy, or nearby globular clusters (that cover the whole field of view). In such cases, segmentation is necessary over the complete dataset, not just specific regions (detections). By default Segment will first use the undetected regions as a reference to find the proper signal-to-noise ratio of "true" clumps (give a purity level specified with ‘--snquant’). Therefore, in such scenarios you also need to manually give a "true" clump signal-to-noise ratio with the ‘--clumpsnthresh’ option to disable looking into the undetected regions, see *note Segmentation options::. In such cases, is possible to make a detection map that only has the value ‘1’ for all pixels (for example, using *note Arithmetic::), but for convenience, you can also use ‘--detection=all’. ‘--dhdu’ The HDU/extension containing the detection map given to ‘--detection’. Please see the description of ‘--hdu’ in *note Input output options:: for the different ways you can identify a special extension. ‘-k FITS’ ‘--kernel=FITS’ The name of file containing kernel that will be used to convolve the input image. The usage of this option is identical to NoiseChisel's ‘--kernel’ option (*note NoiseChisel input::). Please see the descriptions there for more. To disable convolution, you can give it a value of ‘none’. ‘--khdu’ The HDU/extension containing the kernel used for convolution. For acceptable values, please see the description of ‘--hdu’ in *note Input output options::. ‘--convolved=FITS’ The convolved image's file name to avoid internal convolution by Segment. The usage of this option is identical to NoiseChisel's ‘--convolved’ option. Please see *note NoiseChisel input:: for a thorough discussion of the usefulness and best practices of using this option. If you want to use the same convolution kernel for detection (with *note NoiseChisel::) and segmentation, with this option, you can use the same convolved image (that is also available in NoiseChisel) and avoid two convolutions. However, just be careful to use the input to NoiseChisel as the input to Segment also, then use the ‘--sky’ and ‘--std’ to specify the Sky and its standard deviation (from NoiseChisel's output). Recall that when NoiseChisel is not called with ‘--rawoutput’, the first extension of NoiseChisel's output is the _Sky-subtracted_ input (see *note NoiseChisel output::). So if you use the same convolved image that you fed to NoiseChisel, but use NoiseChisel's output with Segment's ‘--convolved’, then the convolved image will not be Sky subtracted. ‘--chdu’ The HDU/extension containing the convolved image (given to ‘--convolved’). For acceptable values, please see the description of ‘--hdu’ in *note Input output options::. ‘-L INT[,INT]’ ‘--largetilesize=INT[,INT]’ The size of the large tiles to use for identifying the clump S/N threshold over the undetected regions. The usage of this option is identical to NoiseChisel's ‘--largetilesize’ option (*note NoiseChisel input::). Please see the descriptions there for more. The undetected regions can be a significant fraction of the dataset and finding clumps requires sorting of the desired regions, which can be slow. To speed up the processing, Segment finds clumps in the undetected regions over separate large tiles. This allows it to have to sort a much smaller set of pixels and also to treat them independently and in parallel. Both these issues greatly speed it up. Just be sure to not decrease the large tile sizes too much (less than 100 pixels in each dimension). It is important for them to be much larger than the clumps.  File: gnuastro.info, Node: Segmentation options, Next: Segment output, Prev: Segment input, Up: Invoking astsegment 7.3.1.2 Segmentation options ............................ The options below can be used to configure every step of the segmentation process in the Segment program. For a more complete explanation (with figures to demonstrate each step), please see Section 3.2 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664), and also *note Segment::. By default, Segment will follow the procedure described in the paper to find the S/N threshold based on the noise properties. This can be disabled by directly giving a trustable signal-to-noise ratio to the ‘--clumpsnthresh’ option. Recall that you can always see the full list of Gnuastro's options with the ‘--help’ (see *note Getting help::), or ‘--printparams’ (or ‘-P’) to see their values (see *note Operating mode options::). ‘-B FLT’ ‘--minskyfrac=FLT’ Minimum fraction (value between 0 and 1) of Sky (undetected) areas in a large tile. Only (large) tiles with a fraction of undetected pixels (Sky) greater than this value will be used for finding clumps. The clumps found in the undetected areas will be used to estimate a S/N threshold for true clumps. Therefore this is an important option (to decrease) in crowded fields. Operationally, this is almost identical to NoiseChisel's ‘--minskyfrac’ option (*note Detection options::). Please see the descriptions there for more. ‘--minima’ Build the clumps based on the local minima, not maxima. By default, clumps are built starting from local maxima (see Figure 8 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664)). Therefore, this option can be useful when you are searching for true local minima (for example, absorption features). ‘-m INT’ ‘--snminarea=INT’ The minimum area which a clump in the undetected regions should have in order to be considered in the clump Signal to noise ratio measurement. If this size is set to a small value, the Signal to noise ratio of false clumps will not be accurately found. It is recommended that this value be larger than the value to NoiseChisel's ‘--snminarea’. Because the clumps are found on the convolved (smoothed) image while the pseudo-detections are found on the input image. You can use ‘--checksn’ and ‘--checksegmentation’ to see if your chosen value is reasonable or not. ‘--checksn’ Save the S/N values of the clumps over the sky and detected regions into separate tables. If ‘--tableformat’ is a FITS format, each table will be written into a separate extension of one file suffixed with ‘_clumpsn.fits’. If it is plain text, a separate file will be made for each table (ending in ‘_clumpsn_sky.txt’ and ‘_clumpsn_det.txt’). For more on ‘--tableformat’ see *note Input output options::. You can use these tables to inspect the S/N values and their distribution (in combination with the ‘--checksegmentation’ option to see where the clumps are). You can use Gnuastro's *note Statistics:: to make a histogram of the distribution (ready for plotting in a text file, or a crude ASCII-art demonstration on the command-line). With this option, Segment will abort as soon as the two tables are created. This allows you to inspect the steps leading to the final S/N quantile threshold, this behavior can be disabled with ‘--continueaftercheck’. ‘--minnumfalse=INT’ The minimum number of clumps over undetected (Sky) regions to identify the requested Signal-to-Noise ratio threshold. Operationally, this is almost identical to NoiseChisel's ‘--minnumfalse’ option (*note Detection options::). Please see the descriptions there for more. ‘-c FLT’ ‘--snquant=FLT’ The quantile of the signal-to-noise ratio distribution of clumps in undetected regions, used to define true clumps. After identifying all the usable clumps in the undetected regions of the dataset, the given quantile of their signal-to-noise ratios is used to define the signal-to-noise ratio of a "true" clump. Effectively, this can be seen as an inverse p-value measure. See Figure 9 and Section 3.2.1 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) for a complete explanation. The full distribution of clump signal-to-noise ratios over the undetected areas can be saved into a table with ‘--checksn’ option and visually inspected with ‘--checksegmentation’. ‘-v’ ‘--keepmaxnearriver’ Keep a clump whose maximum (minimum if ‘--minima’ is called) flux is 8-connected to a river pixel. By default such clumps over detections are considered to be noise and are removed irrespective of their significance measure; see Akhlaghi 2019 (https://arxiv.org/abs/1909.11230). Over large profiles, that sink into the noise very slowly, noise can cause part of the profile (which was flat without noise) to become a very large and with a very high Signal to noise ratio. In such cases, the pixel with the maximum flux in the clump will be immediately touching a river pixel. ‘-s FLT’ ‘--clumpsnthresh=FLT’ The signal-to-noise threshold for true clumps. If this option is given, then the segmentation options above will be ignored and the given value will be directly used to identify true clumps over the detections. This can be useful if you have a large dataset with similar noise properties. You can find a robust signal-to-noise ratio based on a (sufficiently large) smaller portion of the dataset. Afterwards, with this option, you can speed up the processing on the whole dataset. Other scenarios where this option may be useful is when, the image might not contain enough/any Sky regions. ‘-G FLT’ ‘--gthresh=FLT’ Threshold (multiple of the sky standard deviation added with the sky) to stop growing true clumps. Once true clumps are found, they are set as the basis to segment the detected region. They are grown until the threshold specified by this option. ‘-y INT’ ‘--minriverlength=INT’ The minimum length of a river between two grown clumps for it to be considered in signal-to-noise ratio estimations. Similar to ‘--snminarea’, if the length of the river is too short, the signal-to-noise ratio can be noisy and unreliable. Any existing rivers shorter than this length will be considered as non-existent, independent of their Signal to noise ratio. The clumps are grown on the input image, therefore this value can be smaller than the value given to ‘--snminarea’. Recall that the clumps were defined on the convolved image so ‘--snminarea’ should be larger. ‘-O FLT’ ‘--objbordersn=FLT’ The maximum Signal to noise ratio of the rivers between two grown clumps in order to consider them as separate 'objects'. If the Signal to noise ratio of the river between two grown clumps is larger than this value, they are defined to be part of one 'object'. Note that the physical reality of these 'objects' can never be established with one image, or even multiple images from one broad-band filter. Any method we devise to define 'object's over a detected region is ultimately subjective. Two very distant galaxies or satellites in one halo might lie in the same line of sight and be detected as clumps on one detection. On the other hand, the connection (through a spiral arm or tidal tail for example) between two parts of one galaxy might have such a low surface brightness that they are broken up into multiple detections or objects. In fact if you have noticed, exactly for this purpose, this is the only Signal to noise ratio that the user gives into NoiseChisel. The 'true' detections and clumps can be objectively identified from the noise characteristics of the image, so you do not have to give any hand input Signal to noise ratio. ‘--checksegmentation’ A file with the suffix ‘_seg.fits’ will be created. This file keeps all the relevant steps in finding true clumps and segmenting the detections into multiple objects in various extensions. Having read the paper or the steps above. Examining this file can be an excellent guide in choosing the best set of parameters. Note that calling this function will significantly slow NoiseChisel. In verbose mode (without the ‘--quiet’ option, see *note Operating mode options::) the important steps (along with their extension names) will also be reported. With this option, NoiseChisel will abort as soon as the two tables are created. This behavior can be disabled with ‘--continueaftercheck’.  File: gnuastro.info, Node: Segment output, Prev: Segmentation options, Up: Invoking astsegment 7.3.1.3 Segment output ...................... The main output of Segment are two label datasets (with integer types, separating the dataset's elements into different classes). They have HDU/extension names of ‘CLUMPS’ and ‘OBJECTS’. Similar to all Gnuastro's FITS outputs, the zero-th extension/HDU of the main output file only contains header keywords and image or table. It contains the Segment input files and parameters (option names and values) as FITS keywords. Note that if an option name is longer than 8 characters, the keyword name is the second word. The first word is ‘HIERARCH’. Also note that according to the FITS standard, the keyword names must be in capital letters, therefore, if you want to use Grep to inspect these keywords, use the ‘-i’ option, like the example below. $ astfits image_segmented.fits -h0 | grep -i snquant By default, besides the ‘CLUMPS’ and ‘OBJECTS’ extensions, Segment's output will also contain the (technically redundant) sky-subtracted input dataset (‘INPUT-NO-SKY’) and the sky standard deviation dataset (‘SKY_STD’, if it was not a constant number). This can help in visually inspecting the result when viewing the images as a "Multi-extension data cube" in SAO DS9 for example, (see *note Viewing FITS file contents with DS9 or TOPCAT::). You can simply flip through the extensions and see the same region of the image and its corresponding clumps/object labels. It also makes it easy to feed the output (as one file) into MakeCatalog when you intend to make a catalog afterwards (see *note MakeCatalog::. To remove these redundant extensions from the output (for example, when designing a pipeline), you can use ‘--rawoutput’. The ‘OBJECTS’ and ‘CLUMPS’ extensions can be used as input into *note MakeCatalog:: to generate a catalog for higher-level analysis. If you want to treat each clump separately, you can give a very large value (or even a NaN, which will always fail) to the ‘--gthresh’ option (for example, ‘--gthresh=1e10’ or ‘--gthresh=nan’), see *note Segmentation options::. For a complete definition of clumps and objects, please see Section 3.2 of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664) and *note Segmentation options::. The clumps are "true" local maxima (minima if ‘--minima’ is called) and their surrounding pixels until a local minimum/maximum (caused by noise fluctuations, or another "true" clump). Therefore it may happen that some of the input detections are not covered by clumps at all (very diffuse objects without any strong peak), while some objects may contain many clumps. Even in those that have clumps, there will be regions that are too diffuse. The diffuse regions (within the input detected regions) are given a negative label (-1) to help you separate them from the undetected regions (with a value of zero). Each clump is labeled with respect to its host object. Therefore, if an object has three clumps for example, the clumps within it have labels 1, 2 and 3. As a result, if an initial detected region has multiple objects, each with a single clump, all the clumps will have a label of 1. The total number of clumps in the dataset is stored in the ‘NCLUMPS’ keyword of the ‘CLUMPS’ extension and printed in the verbose output of Segment (when ‘--quiet’ is not called). The ‘OBJECTS’ extension of the output will give a positive counter/label to every detected pixel in the input. As described in Akhlaghi and Ichikawa [2015], the true clumps are grown until a certain threshold. If the grown clumps touch other clumps and the connection is strong enough, they are considered part of the same _object_. Once objects (grown clumps) are identified, they are grown to cover the whole detected area. The options to configure the output of Segment are listed below: ‘--continueaftercheck’ Do not abort Segment after producing the check image(s). The usage of this option is identical to NoiseChisel's ‘--continueaftercheck’ option (*note NoiseChisel input::). Please see the descriptions there for more. ‘--noobjects’ Abort Segment after finding true clumps and do not continue with finding options. Therefore, no ‘OBJECTS’ extension will be present in the output. Each true clump in ‘CLUMPS’ will get a unique label, but diffuse regions will still have a negative value. To make a catalog of the clumps, the input detection map (where all the labels are one) can be fed into *note MakeCatalog:: along with the input detection map to Segment (that only had a value of ‘1’ for all detected pixels) with ‘--clumpscat’. In this way, MakeCatalog will assume all the clumps belong to a single "object". ‘--grownclumps’ In the output ‘CLUMPS’ extension, store the grown clumps. If a detected region contains no clumps or only one clump, then it will be fully given a label of ‘1’ (no negative valued pixels). ‘--rawoutput’ Only write the ‘CLUMPS’ and ‘OBJECTS’ datasets in the output file. Without this option (by default), the first and last extensions of the output will the Sky-subtracted input dataset and the Sky standard deviation dataset (if it was not a number). When the datasets are small, these redundant extensions can make it convenient to inspect the results visually or feed the output to *note MakeCatalog:: for measurements. Ultimately both the input and Sky standard deviation datasets are redundant (you had them before running Segment). When the inputs are large/numerous, these extra dataset can be a burden. *Save space:* with the ‘--rawoutput’, Segment's output will only be two labeled datasets (only containing integers). Since they have no noise, such datasets can be compressed very effectively (without any loss of data) with exceptionally high compression ratios. You can use the following command to compress it with the best ratio: $ gzip --best segment_output.fits The resulting ‘.fits.gz’ file can then be fed into any of Gnuastro's programs directly, without having to decompress it separately (it will just take them a little longer, because they have to decompress it internally before use). When the input is a 2D image, to inspect NoiseChisel's output you can configure SAO DS9 in your Graphic User Interface (GUI) to open NoiseChisel's output as a multi-extension data cube. This will allow you to flip through the different extensions and visually inspect the results. This process has been described for the GNOME GUI (most common GUI in GNU/Linux operating systems) in *note Viewing FITS file contents with DS9 or TOPCAT::.  File: gnuastro.info, Node: MakeCatalog, Next: Match, Prev: Segment, Up: Data analysis 7.4 MakeCatalog =============== At the lowest level, a dataset (for example, an image) is just a collection of values, placed after each other in any number of dimensions (for example, an image is a 2D dataset). Each data-element (pixel) just has two properties: its position (relative to the rest) and its value. In higher-level analysis, an entire dataset (an image for example) is rarely treated as a singular entity(1). You usually want to know/measure the properties of the (separate) scientifically interesting targets that are embedded in it. For example, the magnitudes, positions and elliptical properties of the galaxies that are in the image. MakeCatalog is Gnuastro's program for localized measurements over a dataset. In other words, MakeCatalog is Gnuastro's program to convert low-level datasets (like images), to high level catalogs. The role of MakeCatalog in a scientific analysis and the benefits of its model (where detection/segmentation is separated from measurement) is discussed in Akhlaghi 2016 (https://arxiv.org/abs/1611.06387v1)(2) and summarized in *note Detection and catalog production::. We strongly recommend reading this short paper for a better understanding of this methodology. Understanding the effective usage of MakeCatalog, will thus also help effective use of other (lower-level) Gnuastro's programs like *note NoiseChisel:: or *note Segment::. It is important to define your regions of interest for measurements _before_ running MakeCatalog. MakeCatalog is specialized in doing measurements accurately and efficiently. Therefore MakeCatalog will not do detection, segmentation, or defining apertures on requested positions in your dataset. Following Gnuastro's modularity principle, there are separate and highly specialized and customizable programs in Gnuastro for these other jobs as shown below (for a usage example in a real-world analysis, see *note General program usage tutorial:: and *note Detecting large extended targets::). • *note Arithmetic::: Detection with a simple threshold. • *note NoiseChisel::: Advanced detection. • *note Segment::: Segmentation (substructure over detections). • *note MakeProfiles::: Aperture creation for known positions. These programs will/can return labeled dataset(s) to be fed into MakeCatalog. A labeled dataset for measurement has the same size/dimensions as the input, but with integer valued pixels that have the label/counter for each sub-set of pixels that must be measured together. For example, all the pixels covering one galaxy in an image, get the same label. The requested measurements are then done on similarly labeled pixels. The final result is a catalog where each row corresponds to the measurements on pixels with a specific label. For example, the flux weighted average position of all the pixels with a label of 42 will be written into the 42nd row of the output catalog/table's central position column(3). Similarly, the sum of all these pixels will be the 42nd row in the sum column, etc. Pixels with labels equal to, or smaller than, zero will be ignored by MakeCatalog. In other words, the number of rows in MakeCatalog's output is already known before running it (the maximum value of the labeled dataset). Before getting into the details of running MakeCatalog (in *note Invoking astmkcatalog::, we will start with a discussion on the basics of its approach to separating detection from measurements in *note Detection and catalog production::. A very important factor in any measurement is understanding its validity range, or limits. Therefore in *note Quantifying measurement limits::, we will discuss how to estimate the reliability of the detection and basic measurements. This section will continue with a derivation of elliptical parameters from the labeled datasets in *note Measuring elliptical parameters::. For those who feel MakeCatalog's existing measurements/columns are not enough and would like to add further measurements, in *note Adding new columns to MakeCatalog::, a checklist of steps is provided for readily adding your own new measurements/columns. * Menu: * Detection and catalog production:: Discussing why/how to treat these separately * Brightness flux magnitude:: More on Magnitudes, surface brightness, etc. * Quantifying measurement limits:: For comparing different catalogs. * Measuring elliptical parameters:: Estimating elliptical parameters. * Adding new columns to MakeCatalog:: How to add new columns. * MakeCatalog measurements:: List of all the measurements/columns by MakeCatalog. * Invoking astmkcatalog:: Options and arguments to MakeCatalog. ---------- Footnotes ---------- (1) You can derive the over-all properties of a complete dataset (1D table column, 2D image, or 3D data-cube) treated as a single entity with Gnuastro's Statistics program (see *note Statistics::). (2) A published paper cannot undergo any more change, so this manual is the definitive guide. (3) See *note Measuring elliptical parameters:: for a discussion on this and the derivation of positional parameters, which includes the center.  File: gnuastro.info, Node: Detection and catalog production, Next: Brightness flux magnitude, Prev: MakeCatalog, Up: MakeCatalog 7.4.1 Detection and catalog production -------------------------------------- Most existing common tools in low-level astronomical data-analysis (for example, SExtractor(1)) merge the two processes of detection and measurement (catalog production) in one program. However, in light of Gnuastro's modularized approach (modeled on the Unix system) detection is separated from measurements and catalog production. This modularity is therefore new to many experienced astronomers and deserves a short review here. Further discussion on the benefits of this methodology can be seen in Akhlaghi 2016 (https://arxiv.org/abs/1611.06387v1). As discussed in the introduction of *note MakeCatalog::, detection (identifying which pixels to do measurements on) can be done with different programs. Their outputs (a labeled dataset) can be directly fed into MakeCatalog to do the measurements and write the result as a catalog/table. Beyond that, Gnuastro's modular approach has many benefits that will become clear as you get more experienced in astronomical data analysis and want to be more creative in using your valuable data for the exciting scientific project you are working on. In short the reasons for this modularity can be classified as below: • Simplicity/robustness of independent, modular tools: making a catalog is a logically separate process from labeling (detection, segmentation, or aperture production). A user might want to do certain operations on the labeled regions before creating a catalog for them. Another user might want the properties of the same pixels/objects in another image (another filter for example) to measure the colors or SED fittings. Here is an example of doing both: suppose you have images in various broad band filters at various resolutions and orientations. The image of one color will thus not lie exactly on another or even be in the same scale. However, it is imperative that the same pixels be used in measuring the colors of galaxies. To solve the problem, NoiseChisel can be run on the reference image to generate the labeled detection image. Afterwards, the labeled image can be warped into the grid of the other color (using *note Warp::). MakeCatalog will then generate the same catalog for both colors (with the different labeled images). It is currently customary to warp the images to the same pixel grid, however, modification of the scientific dataset is very harmful for the data and creates correlated noise. It is much more accurate to do the transformations on the labeled image. • Complexity of a monolith: Adding in a catalog functionality to the detector program will add several more steps (and many more options) to its processing that can equally well be done outside of it. This makes following what the program does harder for the users and developers, it can also potentially add many bugs. As an example, if the parameter you want to measure over one profile is not provided by the developers of MakeCatalog. You can simply open this tiny little program and add your desired calculation easily. This process is discussed in *note Adding new columns to MakeCatalog::. However, if making a catalog was part of NoiseChisel for example, adding a new column/measurement would require a lot of energy to understand all the steps and internal structures of that huge program. It might even be so intertwined with its processing, that adding new columns might cause problems/bugs in its primary job (detection). ---------- Footnotes ---------- (1) <https://www.astromatic.net/software/sextractor>  File: gnuastro.info, Node: Brightness flux magnitude, Next: Quantifying measurement limits, Prev: Detection and catalog production, Up: MakeCatalog 7.4.2 Brightness, Flux, Magnitude and Surface brightness -------------------------------------------------------- Astronomical data pixels are usually in units of counts(1) or electrons or either one divided by seconds. To convert from the counts to electrons, you will need to know the instrument gain. In any case, they can be directly converted to energy or energy/time using the basic hardware (telescope, camera and filter) information (that is summarized in the _zero point_, and we will discuss below). We will continue the discussion assuming the pixels are in units of energy/time. Brightness The _brightness_ of an object is defined as its measured energy in units of time. If our detector pixels directly measured the energy from the astronomical object(2), then the brightness would be the total sum of pixel values (energy) associated to the object, divided by the exposure time. The _flux_ of an object is defined in units of energy/time/collecting-area. For an astronomical target, the flux is therefore defined as its brightness divided by the area used to collect the light from the source; or the telescope aperture (for example, in units of $cm^2$). Knowing the flux ($f$) and distance to the object ($r$), we can define its _luminosity_: $L=4{\pi}r^2f$. Therefore, while flux and luminosity are intrinsic properties of the object, brightness depends on our detecting tools (hardware and software). In low-level observational astronomy data analysis, we are usually more concerned with measuring the brightness, because it is the thing we directly measure from the image pixels and create in catalogs. On the other hand, luminosity is used in higher-level analysis (after image contents are measured as catalogs to deduce physical interpretations, because high-level things like distance/redshift need to be calculated). At this stage, it is just important avoid confusion between luminosity and brightness because both have the same units of energy per seconds. Magnitude Images of astronomical objects span over a very large range of brightness: the Sun (as the brightest object) is roughly $2.5^{60}=10^{24}$ times brighter than the fainter galaxies we can currently detect in the deepest images. Therefore discussing brightness directly will involve a large range of values which is inconvenient. So astronomers have chosen to use a logarithmic scale for the brightness of astronomical objects. But the logarithm can only be usable with a dimensionless value that is always positive. Fortunately brightness is always positive (at least in theory(3)). To remove the dimensions, we divide the brightness of the object ($B$) by a reference brightness ($B_r$). We then define a logarithmic scale as $magnitude$ through the relation below. The $-2.5$ factor in the definition of magnitudes is a legacy of the our ancient colleagues and in particular Hipparchus of Nicaea (190-120 BC). $$m-m_r=-2.5\log_{10} \left( B \over B_r \right)$$ $m$ is defined as the magnitude of the object and $m_r$ is the pre-defined magnitude of the reference brightness. For estimating the error in measuring a magnitude, see *note Quantifying measurement limits::. Zero point A unique situation in the magnitude equation above occurs when the reference brightness is unity ($B_r=1$). This brightness will thus summarize all the hardware-specific parameters discussed above (like the conversion of pixel values to physical units) into one number. That reference magnitude is commonly known as the _Zero point_ magnitude because when $B=B_r=1$, the right side of the magnitude definition above will be zero. Using the zero point magnitude ($Z$), we can write the magnitude relation above in a more simpler format: $$m = -2.5\log_{10}(B) + Z$$ Gnuastro has an installed script to estimate the zero point of any image, see *note Zero point estimation:: (it contains practical tutorials to help you get started fast). Having the zero point of an image, you can convert its pixel values to physical units like microJanskys (or $\mu{}Jy$). This enables direct pixel-based comparisons with images from other instruments(4). Jansky is a commonly used unit for measuring spectral flux density and one Jansky is equivalent to $10^{-26} W/m^2/Hz$ (watts per square meter per hertz). This conversion can be done with the fact that in the AB magnitude standard(5), $3631Jy$ corresponds to the zero-th magnitude, therefore $B\equiv3631\times10^{6}\mu{Jy}$ and $m\equiv0$. We can therefore estimate the brightness ($B_z$, in $\mu{Jy}$) corresponding to the image zero point ($Z$) using this equation: $$m - Z = -2.5\log_{10}(B/B_z)$$ $$0 - Z = -2.5\log_{10}({3631\times10^{6}\over B_z})$$ $$B_z = 3631\times10^{\left(6 - {Z \over 2.5} \right)} \mu{Jy}$$ Because the image zero point corresponds to a pixel value of $1$, the $B_z$ value calculated above also corresponds to a pixel value of $1$. Therefore you simply have to multiply your image by $B_z$ to convert it to $\mu{Jy}$. Do not forget that this only applies when your zero point was also estimated in the AB magnitude system. On the command-line, you can estimate this value for a certain zero point with AWK, then multiply it to all the pixels in the image with *note Arithmetic::. For example, let's assume you are using an SDSS image with a zero point of 22.5: bz=$(echo 22.5 | awk '{print 3631 * 10^(6-$1/2.5)}') astarithmetic sdss.fits $bz x --output=sdss-in-muJy.fits But in Gnuastro, it gets even easier: Arithmetic has an operator called ‘counts-to-jy’. This will directly convert your image pixels (in units of counts) to Janskys though a provided AB Magnitude-based zero point like below. See *note Arithmetic operators:: for more. $ astarithmetic sdss.fits 22.5 counts-to-jy *Be careful with the exposure time:* as described at the start of this section, we are assuming your data are in units of counts/sec. As a result, the counts you get from the command above, are only for one second of exposure! Please see the discussion below in "Magnitude to counts" for more. Magnitude to counts (accounting for exposure time) Until now, we had assumed that the data are in units of counts/sec. As a result, the equations given above (in the "Zero point" item to convert magnitudes to pixel counts), give the count level for the reference (1 second) exposure. But we rarely take 1 second exposures! It is therefore very important to take the exposure time into account in scenarios like simulating observations with varying exposure times (where you need to know how many counts the object of a certain magnitude will add to a certain image with a certain exposure time). To clarify the concept, let's define $C$ as the _counted_ electrons (which has a linear relation with the photon energy entering the CCD pixel). In this case, if an object of brightness $B$ is observed for $t$ seconds, it will accumulate $C=B\times t$ counts(6). Therefore, the generic magnitude equation above can be written as: $$m = -2.5\log_{10}(B) + Z = -2.5\log_{10}(C/t) + Z$$ From this, we can derive $C(t)$ in relation to $C(1)$, or counts from a 1 second exposure, using this relation: $$C(t) = t\times10^{(m-Z)/2.5} = t\times C(1)$$ In other words, you should simply multiply the counts for one second with the number of observed seconds. Another approach is to shift the time-dependence of the counts into the zero point (after all exposure time is also a hardware issue). Let's derive the equation below: $$m = -2.5\log_{10}(C/t) + Z = -2.5\log_{10}(C) + 2.5\log_{10}(t) + Z$$ Therefore, defining an exposure-time-dependent zero point as $Z(t)$, we can directly correlate a certain object's magnitude with counts after an exposure of $t$ seconds: $$m = -2.5\log_{10}(C) + Z(t) \quad\rm{where}\quad Z(t)=Z + 2.5\log_{10}(t)$$ This solution is useful in programs like *note MakeCatalog:: or *note MakeProfiles::, when you cannot (or do not want to: because of the extra storage/speed costs) manipulate the values image (for example, divide it by the exposure time to use a counts/sec zero point). Surface brightness Another important concept is the distribution of an object's brightness over its area. For this, we define the _surface brightness_ to be the magnitude of an object's brightness divided by its solid angle over the celestial sphere (or coverage in the sky, commonly in units of arcsec$^2$). The solid angle is expressed in units of arcsec$^2$ because astronomical targets are usually much smaller than one steradian. Recall that the steradian is the dimension-less SI unit of a solid angle and 1 steradian covers $1/4\pi$ (almost $8\%$) of the full celestial sphere. Surface brightness is therefore most commonly expressed in units of mag/arcsec$^2$. For example, when the brightness is measured over an area of A arcsec$^2$, then the surface brightness becomes: $$S = -2.5\log_{10}(B/A) + Z = -2.5\log_{10}(B) + 2.5\log_{10}(A) + Z$$ In other words, the surface brightness (in units of mag/arcsec$^2$) is related to the object's magnitude ($m$) and area ($A$, in units of arcsec$^2$) through this equation: $$S = m + 2.5\log_{10}(A)$$ A common mistake is to follow the mag/arcsec$^2$ unit literally, and divide the object's magnitude by its area. But this is wrong because magnitude is a logarithmic scale while area is linear. It is the brightness that should be divided by the solid angle because both have linear scales. The magnitude of that ratio is then defined to be the surface brightness. One usual application of this is to convert an image's pixel values to surface brightness, when you know its zero point. This can be done with the two simple commands below. First, we derive the pixel area (in arcsec$^2$) then we use Arithmetic to convert the pixels into surface brightness, see below for the details. $ zeropoint=22.5 $ pixarea=$(astfits image.fits --pixelareaarcsec2) $ astarithmetic image.fits $zeropoint $pixarea counts-to-sb \ --output=image-sb.fits See *note Reverse polish notation:: for more on Arithmetic's notation and *note Arithmetic operators:: for a description of each operator. And see *note FITS images in a publication:: for a fully working tutorial on how to optimally convert a FITS image to a PDF image for usage in a publication using the surface brightness conversion shown above. *Do not warp or convolve magnitude or surface brightness images:* Warping an image involves calculating new pixel values (of the new pixel grid) from the old pixel values. Convolution is also a process of finding the weighted mean of pixel values. During these processes, many arithmetic operations are done on the original pixel values, for example, addition or multiplication. However, $log_{10}(a+b)\ne log_{10}(a)+log_{10}(b)$. Therefore after calculating a magnitude or surface brightness image, do not apply any such operations on it! If you need to warp or convolve the image, do it _before_ the conversion. ---------- Footnotes ---------- (1) Counts are also known as analog to digital units (ADU). (2) In practice, the measured pixels don't just count the astronomical object's energy: imaging detectors insert a certain bias level before the exposure, they amplify the photo-electrons, there are optical artifacts like flat-fielding, and finally, there is the background light. (3) In practice, for very faint objects, if the background brightness is over-subtracted, we may end up with a negative "brightness" or sum of pixels in a real object. (4) Comparing data from different instruments assumes instrument and observation signatures are properly corrected, things like the flat-field or the Sky absorption. It is also valid for pixel values, assuming that factors that can change the morphology (like the *note PSF::) are the same. (5) <https://en.wikipedia.org/wiki/AB_magnitude> (6) Recall that counts another name for ADUs, which already includes the CCD gain.  File: gnuastro.info, Node: Quantifying measurement limits, Next: Measuring elliptical parameters, Prev: Brightness flux magnitude, Up: MakeCatalog 7.4.3 Quantifying measurement limits ------------------------------------ No measurement on a real dataset can be perfect: you can only reach a certain level/limit of accuracy and a meaningful (scientific) analysis requires an understanding of these limits. Different datasets have different noise properties and different detection methods (one method/algorithm/software that is run with a different set of parameters is considered as a different detection method) will have different abilities to detect or measure certain kinds of signal (astronomical objects) and their properties in the dataset. Hence, quantifying the detection and measurement limitations with a particular dataset and analysis tool is the most crucial/critical aspect of any high-level analysis. In two separate tutorials, we have touched upon some of these points. So to see the discussions below in action (on real data), see *note Measuring the dataset limits:: and *note Image surface brightness limit::. Here, we will review some of the most commonly used methods to quantify the limits in astronomical data analysis and how MakeCatalog makes it easy to measure them. Depending on the higher-level analysis, there are more tests that must be done, but these are relatively low-level and usually necessary in most cases. In astronomy, it is common to use the magnitude (a unit-less scale) and physical units, see *note Brightness flux magnitude::. Therefore the measurements discussed here are commonly used in units of magnitudes. * Menu: * Standard deviation vs error:: The std is not a measure of the error. * Magnitude measurement error of each detection:: Error in measuring magnitude. * Surface brightness error of each detection:: Error in measuring the Surface brightness. * Completeness limit of each detection:: Possibility of detecting similar objects? * Upper limit magnitude of each detection:: How reliable is your magnitude? * Magnitude limit of image:: Measured magnitude of objects at certain S/N. * Surface brightness limit of image:: Extrapolate per-pixel noise-level to standard units. * Upper limit surface brightness of image:: Measure the noise-level for a certain aperture.  File: gnuastro.info, Node: Standard deviation vs error, Next: Magnitude measurement error of each detection, Prev: Quantifying measurement limits, Up: Quantifying measurement limits 7.4.3.1 Standard deviation vs error ................................... The error and the standard deviation are sometimes confused with each other. Therefore, before continuing with the various measurement limits below, let's review these two fundamental concepts. Instead of going into the theoretical definitions of the two (which you can see in their respective Wikipedia pages), we'll discuss the concepts in a hands-on and practical way here. Let's simulate an observation of the sky, but without any astronomical sources! In other words, where we only a background flux level (from the sky emission). With the first command below, let's make an image called ‘1.fits’ that contains $200\times200$ pixels that are filled with random noise from a Poisson distribution with a mean of 100 counts (the flux from the background sky). Recall that the Poisson distribution is equal to a normal distribution for larger mean values (as in this case). The standard deviation ($\sigma$) of the Poisson distribution is the square root of the mean, see *note Photon counting noise::. With the second command, we'll have a look at the image. Note that due to the random nature of the noise, the values reported in the next steps on your computer will be very slightly different. To reproducible exactly the same values in different runs, see *note Generating random numbers::, and for more on the first command, see *note Arithmetic::. $ astarithmetic 200 200 2 makenew 100 mknoise-poisson \ --output=1.fits $ astscript-fits-view 1.fits Each pixel shows the result of one sampling from the Poisson distribution. In other words, assuming the sky emission in our simulation is constant over our field of view, each pixel's value shows one measurement of the sky emission. Statistically speaking, a "measurement" is a sampling from an underlying distribution of values. Through our measurements, we aim to identify that underlying distribution (the "truth")! With the command below, let's look at the pixel statistics of ‘1.fits’ (output is shown immediately under it). $ aststatistics 1.fits Statistics (GNU Astronomy Utilities) 0.22 ------- Input: 1.fits (hdu: 1) ------- Number of elements: 40000 Minimum: 61 Maximum: 155 Median: 100 Mean: 100.044925 Standard deviation: 10.00066032 ------- Histogram: | * * | * * * | * * * * | * * * * * | * * * * * | * * ******** * * | * ************* * | * ****************** * | ************************ * | ********************************* |* ********************************************************** ** * |---------------------------------------------------------------------- As expected, you see that the ASCII histogram nicely resembles a normal distribution. The measured mean and standard deviation ($\sigma_x$) are also very similar to the input (mean of 100, standard deviation of $\sigma=10$). But the measured mean (and standard deviation) aren't exactly equal to the input! Every time we make a different simulated image from the same distribution, the measured mean and standard deviation will slightly differ. With the second command below, let's build 500 images like above and measure their mean and standard deviation. The outputs will be written into a file (‘mean-stds.txt’; in the first command we are deleting it to make sure we write into an empty file within the loop). With the third command, let's view the top 10 rows: $ rm -f mean-stds.txt $ for i in $(seq 500); do \ astarithmetic 200 200 2 makenew 100 mknoise-poisson \ --output=$i.fits --quiet; \ aststatistics $i.fits --mean --std >> mean-stds.txt; \ echo "$i: complete"; \ done $ asttable mean-stds.txt -Y --head=10 99.989381 9.936407 100.036622 10.059997 100.006054 9.985470 99.944535 9.960069 100.050318 9.970116 100.002718 9.905395 100.067555 9.964038 100.027167 10.018562 100.051951 9.995859 100.000212 9.970293 From this table, you see that each simulation has produced a slightly different measured mean and measured standard deviation ($\sigma_x$) that are just fluctuating around the input mean (which was 100) and input standard deviation ($\sigma=10$). Let's have a look at the distribution of mean measurements: $ aststatistics mean-stds.txt -c1 Statistics (GNU Astronomy Utilities) 0.22 ------- Input: mean-stds.txt Column: 1 ------- Number of elements: 500 Minimum: 9.98183528700191e+01 Maximum: 1.00146490891332e+02 Mode: 99.99709739 Mode quantile: 0.49498998 Median: 9.99977393190436e+01 Mean: 99.99891826 Standard deviation: 0.04901635275 ------- Histogram: | * | * ** | ****** **** * * | ****** **** * * * | * * ************* * * | * ****************** ** | * ********************* *** * | * ***************************** *** | *** ********************************** * | *** ******************************************* ** | * ************************************************* ** * |---------------------------------------------------------------------- The standard deviation of the various mean measurements above shows the scatter in measuring the mean with an image of this size from this underlying distribution. This is therefore defined as the _standard error of the mean_, or "error" for short (since most measurements are actually the mean of a population) and shown with $\widehat\sigma_{\bar{x}}$. From the example above, you see that the error is smaller than the standard deviation (smaller when you have a larger sample). In fact, it can be shown (https://en.wikipedia.org/wiki/Standard_error#Derivation) that this "error of the mean" ($\sigma_{\bar{x}}$) is related to the distribution standard deviation ($\sigma$) through the following equation. Where $N$ is the number of points used to measure the mean in one sample ($200\times200=40000$ in this case). Note that the $10.0$ below was reported as "standard deviation" in the first run of ‘aststatistics’ on ‘1.fits’ above): $$\sigma_{\bar{x}}=\frac{\sigma}{\sqrt{N}} \quad\quad {\rm or} \quad\quad \widehat\sigma_{\bar{x}}\approx\frac{\sigma_x}{\sqrt{N}} = \frac{10.0}{200} = 0.05$$ Taking the considerations above into account, we should clearly distinguish the following concepts when talking about the standard deviation or error: Standard deviation of population This is the standard deviation of the underlying distribution (10 in the example above), and shown by $\sigma$. This is something you can never measure, and is just the ideal value. Standard deviation of mean Ideal error of measuring the mean (assuming we know $\sigma$). Standard deviation of sample (i.e., _Standard deviation_) Measured Standard deviation from a sampling of the ideal distribution. This is the second column of ‘mean-stds.txt’ above and is shown with $\sigma_x$ above. In astronomical literature, this is simply referred to as the "standard deviation". In other words, the standard deviation is computed on the input itself and MakeCatalog just needs a "values" file. For example, when measuring the standard deviation of an astronomical object using MakeCatalog it is computed directly from the input values. Standard error (i.e., _error_) Measurable scatter of measuring the mean ($\widehat\sigma_{\bar{x}}$) that can be estimated from the size of the sample and the measured standard deviation ($\sigma_x$). In astronomical literature, this is simply referred to as the "error". In other words, when asking for an "error" measurement with MakeCatalog, a separate standard deviation dataset should be always provided. This dataset should take into account all sources of scatter. For example, during the reduction of an image, the standard deviation dataset should take into account the dispersion of each pixel that comes from the bias, dark, flat fielding, etc. If this image is not available, it is possible to use the ‘SKY_STD’ extension from NoiseChisel as an estimation. For more see *note NoiseChisel output::.  File: gnuastro.info, Node: Magnitude measurement error of each detection, Next: Surface brightness error of each detection, Prev: Standard deviation vs error, Up: Quantifying measurement limits 7.4.3.2 Magnitude measurement error of each detection ..................................................... The raw error in measuring the magnitude is only meaningful when the object's magnitude is brighter than the upper-limit magnitude (see below). As discussed in *note Brightness flux magnitude::, the magnitude ($M$) of an object with brightness $B$ and zero point magnitude $z$ can be written as: $$M=-2.5\log_{10}(B)+z$$ Calculating the derivative with respect to $B$, we get: $${dM\over dB} = {-2.5\over {B\times ln(10)}}$$ From the Tailor series ($\Delta{M}=dM/dB\times\Delta{B}$), we can write: $$\Delta{M} = \left|{-2.5\over ln(10)}\right|\times{\Delta{B}\over{B}}$$ But, $\Delta{B}/B$ is just the inverse of the Signal-to-noise ratio ($S/N$), so we can write the error in magnitude in terms of the signal-to-noise ratio: $$\Delta{M} = {2.5\over{S/N\times ln(10)}} $$ MakeCatalog uses this relation to estimate the magnitude errors. The signal-to-noise ratio is calculated in different ways for clumps and objects, see Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664)), but this single equation can be used to estimate the measured magnitude error afterwards for any type of target.  File: gnuastro.info, Node: Surface brightness error of each detection, Next: Completeness limit of each detection, Prev: Magnitude measurement error of each detection, Up: Quantifying measurement limits 7.4.3.3 Surface brightness error of each detection .................................................. We can derive the error in measuring the surface brightness based on the surface brightness (SB) equation of *note Brightness flux magnitude:: and the generic magnitude error ($\Delta{M}$) of *note Magnitude measurement error of each detection::. Let's set $A$ to represent the area and $\Delta{A}$ to represent the error in measuring the area. For more on $\Delta{A}$, see the description of ‘--spatialresolution’ in *note MakeCatalog inputs and basic settings::. $$\Delta{(SB)} = \Delta{M} + \left|{-2.5\over ln(10)}\right|\times{\Delta{A}\over{A}}$$ In the surface brightness equation mentioned above, $A$ is in units of arcsecond squared and the conversion between arcseconds to pixels is a multiplication factor. Therefore as long as $A$ and $\Delta{A}$ have the same units, it does not matter if they are in arcseconds or pixels. Since the measure of spatial resolution (or area error) is the FWHM of the PSF which is usually defined in terms of pixels, its more intuitive to use pixels for $A$ and $\Delta{A}$.  File: gnuastro.info, Node: Completeness limit of each detection, Next: Upper limit magnitude of each detection, Prev: Surface brightness error of each detection, Up: Quantifying measurement limits 7.4.3.4 Completeness limit of each detection ............................................ As the surface brightness of the objects decreases, the ability to detect them will also decrease. An important statistic is thus the fraction of objects of similar morphology and magnitude that will be detected with our detection algorithm/parameters in a given image. This fraction is known as _completeness_. For brighter objects, completeness is 1: all bright objects that might exist over the image will be detected. However, as we go to objects of lower overall surface brightness, we will fail to detect a fraction of them, and fainter than a certain surface brightness level (for each morphology),nothing will be detectable in the image: you will need more data to construct a "deeper" image. For a given profile and dataset, the magnitude where the completeness drops below a certain level (usually above $90\%$) is known as the completeness limit. Another important parameter in measuring completeness is purity: the fraction of true detections to all detections. In effect purity is the measure of contamination by false detections: the higher the purity, the lower the contamination. Completeness and purity are anti-correlated: if we can allow a large number of false detections (that we might be able to remove by other means), we can significantly increase the completeness limit. One traditional way to measure the completeness and purity of a given sample is by embedding mock profiles in regions of the image with no detection. However in such a study we must be really careful to choose model profiles as similar to the target of interest as possible.  File: gnuastro.info, Node: Upper limit magnitude of each detection, Next: Magnitude limit of image, Prev: Completeness limit of each detection, Up: Quantifying measurement limits 7.4.3.5 Upper limit magnitude of each detection ............................................... Due to the noisy nature of data, it is possible to get arbitrarily faint magnitudes, especially when you use labels from another image (for example see *note Working with catalogs estimating colors::). Given the scatter caused by the dataset's noise, values fainter than a certain level are meaningless: another similar depth observation will give a radically different value. In such cases, measurements like the image magnitude limit are not useful because it is estimated for a certain morphology and is given for the whole image (it is a crude generalization; see see *note Magnitude limit of image::). You want a quality measure that is specific to each object. For example, assume that you have done your detection and segmentation on one filter and now you do measurements over the same labeled regions, but on other filters to measure colors (as we did in the tutorial *note Segmentation and making a catalog::). Some objects are not going to have any significant signal in the other filters, but for example, you measure magnitude of 36 for one of them! This is clearly unreliable (no dataset in current astronomy is able to detect such a faint signal). In another image with the same depth, using the same filter, you might measure a magnitude of 30 for it, and yet another might give you 33. Furthermore, the total sum of pixel values might actually be negative in some images of the same depth (due to noise). In these cases, no magnitude can be defined and MakeCatalog will place a NaN there (recall that a magnitude is a base-10 logarithm). Using such unreliable measurements will directly affect our analysis, so we must not use the raw measurements. When approaching the limits of your detection method, it is therefore important to be able to identify such cases. But how can we know how reliable a measurement of one object on a given dataset is? When we confront such unreasonably faint magnitudes, there is one thing we can deduce: that if something actually exists under our labeled pixels (possibly buried deep under the noise), it's inherent magnitude is fainter than an _upper limit magnitude_. To find this upper limit magnitude, we place the object's footprint (segmentation map) over a random part of the image where there are no detections, and measure the sum of pixel values within the footprint. Doing this a large number of times will give us a distribution of measurements of the sum. The standard deviation ($\sigma$) of that distribution can be used to quantify the upper limit magnitude for that particular object (given its particular shape and area): $$M_{up,n\sigma}=-2.5\times\log_{10}{(n\sigma_m)}+z \quad\quad [mag/target]$$ Traditionally, faint/small object photometry was done using fixed circular apertures (for example, with a diameter of $N$ arc-seconds) and there was not much processing involved (to make a deep stack). Hence, the upper limit was synonymous with the surface brightness limit discussed above: one value for the whole image. The problem with this simplified approach is that the number of pixels in the aperture directly affects the final distribution and thus magnitude. Also the image correlated noise might actually create certain patterns, so the shape of the object can also affect the final result. Fortunately, with the much more advanced hardware and software of today, we can make customized segmentation maps (footprint) for each object and have enough computing power to actually place that footprint over many random places. As a result, the per-target upper-limit magnitude and general surface brightness limit have diverged. When any of the upper-limit-related columns requested, MakeCatalog will randomly place each target's footprint over the undetected parts of the dataset as described above, and estimate the required properties. The procedure is fully configurable with the options in *note Upper-limit settings::. You can get the full list of upper-limit related columns of MakeCatalog with this command (the extra ‘--’ before ‘--upperlimit’ is necessary(1)): $ astmkcatalog --help | grep -- --upperlimit ---------- Footnotes ---------- (1) Without the extra ‘--’, grep will assume that ‘--upperlimit’ is one of its own options, and will thus abort, complaining that it has no option with this name.  File: gnuastro.info, Node: Magnitude limit of image, Next: Surface brightness limit of image, Prev: Upper limit magnitude of each detection, Up: Quantifying measurement limits 7.4.3.6 Magnitude limit of image ................................ Suppose we have taken two images of the same field of view with the same CCD, once with a smaller telescope, and once with a larger one. Because we used the same CCD, the noise will be very similar. However, the larger telescope has gathered more light, therefore the same star or galaxy will have a higher signal-to-noise ratio (S/N) in the image taken with the larger one. The same applies for a stacked image of the field compared to a single-exposure image of the same telescope. This concept is used by some researchers to define the "magnitude limit" or "detection limit" at a certain S/N (sometimes 10, 5 or 3 for example, also written as $10\sigma$, $5\sigma$ or $3\sigma$). To do this, they measure the magnitude and signal-to-noise ratio of all the objects within an image and measure the mean (or median) magnitude of objects at the desired S/N. A fully working example of deriving the magnitude limit is available in the tutorials section: *note Measuring the dataset limits::. However, this method should be used with extreme care! This is because the shape of the object becomes important in this method: a sharper object will have a higher _measured_ S/N compared to a more diffuse object at the same original magnitude. Besides the inherent shape/sharpness of the object, issues like the PSF also become important in this method (because the finally observed shapes of objects are important here): two surveys with the same surface brightness limit (see *note Surface brightness limit of image::) will have different magnitude limits if one is taken from space and the other from the ground.  File: gnuastro.info, Node: Surface brightness limit of image, Next: Upper limit surface brightness of image, Prev: Magnitude limit of image, Up: Quantifying measurement limits 7.4.3.7 Surface brightness limit of image ......................................... As we make more observations on one region of the sky and add/combine the observations into one dataset, both the signal and the noise increase. However, the signal increases much faster than the noise: Assuming you add $N$ datasets with equal exposure times, the signal will increases as a multiple of $N$, while noise increases as $\sqrt{N}$. Therefore the signal-to-noise ratio increases by a factor of $\sqrt{N}$. Visually, fainter (per pixel) parts of the objects/signal in the image will become more visible/detectable. The noise-level is known as the dataset's surface brightness limit. You can think of the noise as muddy water that is completely covering a flat ground(1). The signal (coming from astronomical objects in real data) will be summits/hills that start from the flat sky level (under the muddy water) and their summits can sometimes reach above the muddy water. Let's assume that in your first observation the muddy water has just been stirred and except a few small peaks, you cannot see anything through the mud. As you wait and make more observations/exposures, the mud settles down and the _depth_ of the transparent water increases. As a result, more and more summits become visible and the lower parts of the hills (parts with lower surface brightness) can be seen more clearly. In this analogy(2), height (from the ground) is the _surface brightness_ and the height of the muddy water at the moment you combine your data, is your _surface brightness limit_ for that moment. The outputs of NoiseChisel include the Sky standard deviation ($\sigma$) on every group of pixels (a tile) that were calculated from the undetected pixels in each tile, see *note Tessellation:: and *note NoiseChisel output::. Let's take $\sigma_m$ as the median $\sigma$ over the successful meshes in the image (prior to interpolation or smoothing). It is recorded in the ‘MEDSTD’ keyword of the ‘SKY_STD’ extension of NoiseChisel's output. On different instruments, pixels cover different spatial angles over the sky. For example, the width of each pixel on the ACS camera on the Hubble Space Telescope (HST) is roughly 0.05 seconds of arc, while the pixels of SDSS are each 0.396 seconds of arc (almost eight times wider(3)). Nevertheless, irrespective of its sky coverage, a pixel is our unit of data collection. To start with, we define the low-level Surface brightness limit or _depth_, in units of magnitude/pixel with the equation below (assuming the image has zero point magnitude $z$ and we want the $n$th multiple of $\sigma_m$). $$SB_{n\sigma,\rm pixel}=-2.5\times\log_{10}{(n\sigma_m)}+z \quad\quad [mag/pixel]$$ As an example, the XDF survey covers part of the sky that the HST has observed the most (for 85 orbits) and is consequently very small ($\sim4$ minutes of arc, squared). On the other hand, the CANDELS survey, is one of the widest multi-color surveys done by the HST covering several fields (about 720 arcmin$^2$) but its deepest fields have only 9 orbits observation. The $1\sigma$ depth of the XDF and CANDELS-deep surveys in the near infrared WFC3/F160W filter are respectively 34.40 and 32.45 magnitudes/pixel. In a single orbit image, this same field has a $1\sigma$ depth of 31.32 magnitudes/pixel. Recall that a larger magnitude corresponds to fainter objects, see *note Brightness flux magnitude::. The low-level magnitude/pixel measurement above is only useful when all the datasets you want to use, or compare, have the same pixel size. However, you will often find yourself using, or comparing, datasets from various instruments with different pixel scales (projected pixel width, in arc-seconds). If we know the pixel scale, we can obtain a more easily comparable surface brightness limit in units of: magnitude/arcsec$^2$. But another complication is that astronomical objects are usually larger than 1 arcsec$^2$. As a result, it is common to measure the surface brightness limit over a larger (but fixed, depending on context) area. Let's assume that every pixel is $p$ arcsec$^2$ and we want the surface brightness limit for an object covering A arcsec$^2$ (so $A/p$ is the number of pixels that cover an area of $A$ arcsec$^2$). On the other hand, noise is added in RMS(4), hence the noise level in $A$ arcsec$^2$ is $n\sigma_m\sqrt{A/p}$. But we want the result in units of arcsec$^2$, so we should divide this by $A$ arcsec$^2$: $n\sigma_m\sqrt{A/p}/A=n\sigma_m\sqrt{A/(pA^2)}=n\sigma_m/\sqrt{pA}$. Plugging this into the magnitude equation, we get the $n\sigma$ surface brightness limit, over an area of A arcsec$^2$, in units of magnitudes/arcsec$^2$: $$SB_{{n\sigma,\rm A arcsec}^2}=-2.5\times\log_{10}{\left(n\sigma_m\over \sqrt{pA}\right)+z} \quad\quad [mag/arcsec^2]$$ MakeCatalog will calculate the input dataset's $SB_{n\sigma,\rm pixel}$ and $SB_{{n\sigma,\rm A arcsec}^2}$ and will write them as the ‘SBLMAGPIX’ and ‘SBLMAG’ keywords the output catalog(s), see *note MakeCatalog output::. You can set your desired $n$-th multiple of $\sigma$ and the $A$ arcsec$^2$ area using the following two options respectively: ‘--sfmagnsigma’ and ‘--sfmagarea’ (see *note MakeCatalog output::). Just note that $SB_{{n\sigma,\rm A arcsec}^2}$ is only calculated if the input has World Coordinate System (WCS). Without WCS, the pixel scale cannot be derived. As you saw in its derivation, the calculation above extrapolates the noise in one pixel over all the input's pixels! In other words, all pixels are treated independently in the measurement of the standard deviation. It therefore implicitly assumes that the noise is the same in all of the pixels. But this only happens in individual exposures: reduced data will have correlated noise because they are a stack of many individual exposures that have been warped (thus mixing the pixel values). A more accurate measure which will provide a realistic value for every labeled region is known as the _upper-limit magnitude_, which is discussed in the next section (*note Upper limit surface brightness of image::). ---------- Footnotes ---------- (1) The ground is the sky value in this analogy, see *note Sky value::. Note that this analogy only holds for a flat sky value across the surface of the image or ground. (2) Note that this muddy water analogy is not perfect, because while the water-level remains the same all over a peak, in data analysis, the Poisson noise increases with the level of data. (3) Ground-based instruments like the SDSS suffer from strong smoothing due to the atmosphere. Therefore, increasing the pixel resolution (or decreasing the width of a pixel) will not increase the received information). (4) If you add three datasets with noise $\sigma_1$, $\sigma_2$ and $\sigma_3$, the resulting noise level is $\sigma_t=\sqrt{\sigma_1^2+\sigma_2^2+\sigma_3^2}$, so when $\sigma_1=\sigma_2=\sigma_3\equiv\sigma$, then $\sigma_t=\sigma\sqrt{3}$. In this case, the area $A$ is covered by $A/p$ pixels, so the noise level is $\sigma_t=\sigma\sqrt{A/p}$.  File: gnuastro.info, Node: Upper limit surface brightness of image, Prev: Surface brightness limit of image, Up: Quantifying measurement limits 7.4.3.8 Upper limit surface brightness of image ............................................... As mentioned in *note Surface brightness limit of image::, the surface brightness limit assumes independent pixels when deriving the standard deviation (the main input in the equation). It just extrapolates the standard devaiation derived from one pixel to the requested area. But as mentioned at the end of that section, we have correlated noise in our science-ready (deep) images and the noise of the pixels are not independent. Because of this, the surface brightness limit will always under-estimate the surface brightness (give fainter values than what is statistically possible in the data for the requested area). To account for the correlated noise in the images, we need to derive the standard deviation over a group of pixels that fall within a certain footprint/shape. For example over a circular aperture of radius 5.6419 arcsec, or a square with a side length of $10$ arcsec. Depending on the correlated noise systematics, the limit can be (very) different for different shapes, even if they have the same area (as in the circle and square mentioned in the previous sentence: both have an area of 100 arcsec$^2$). Therefore we need to derive the standard deviation that goes into the surface brightness limit equation over a certain footprint/shape. To do that, we should: 1. Place the desired footprint many times randomly over all the undetected pixels in an image. In MakeCatalog, the number of these random positions can be configured with ‘--upnum’ and you can check their positions with ‘--checkuplim’. 2. Calculate the sum of pixel values in each randomly placed footprint. 3. Calculate the sigma-clipped standard deviation of the resulting distribution (of sum of pixel values in the randomly placed apertures). Therefore, each footprint's measurement is be independent of the other. 4. Calculate the surface brightness of that standrad deviation (after multiplying it with your desired multiple of sigma). For the definition of surface brightness, see *note Brightness flux magnitude::. If you have reviewed the previous sections, the measurements over randomly placed apertures should remind you of *note Upper limit magnitude of each detection::. Generally, the "upper limit" prefix is given to all measurements with this way of measurement. Therefore this limit is called "Upper limit surface brightness" of an image (for a multiple of sigma, over a certain shape). Traditionally a circular aperture of a fixed radius (in arcseconds) has been used. In Gnuastro, a labeled image containing the desired shape/aperture can be generated with MakeProfiles. The position of the label is irrelevant because the upper limit measurements are done on the many randomly placed footprints in undetected regions (independent of where the label is positioned). That labeled image should then be given to MakeCatalog, while requesting ‘--upperlimit-sb’. Of course, all detected signal in the image needs to be masked (set to blank/NaN) so MakeCatalog doesn't use randomly placed apertures that overlap with detected signal in the image. Going into the implementation details can get pretty hard to follow in English, so a full hands-on tutorial is available in the second half of *note Image surface brightness limit::. Read that tutorial with the same input images and run the commands, and see each output image to get a good understanding of how to properly measure the upper limit surface brightness of your images.  File: gnuastro.info, Node: Measuring elliptical parameters, Next: Adding new columns to MakeCatalog, Prev: Quantifying measurement limits, Up: MakeCatalog 7.4.4 Measuring elliptical parameters ------------------------------------- The shape or morphology of a target is one of the most commonly desired parameters of a target. Here, we will review the derivation of the most basic/simple morphological parameters: the elliptical parameters for a set of labeled pixels. The elliptical parameters are: the (semi-)major axis, the (semi-)minor axis and the position angle along with the central position of the profile. The derivations below follow the SExtractor manual derivations with some added explanations for easier reading. Let's begin with one dimension for simplicity: Assume we have a set of $N$ values $B_i$ (for example, showing the spatial distribution of a target's brightness), each at position $x_i$. The simplest parameter we can define is the geometric center of the object ($x_g$) (ignoring the brightness values): $x_g=(\sum_ix_i)/N$. _Moments_ are defined to incorporate both the value (brightness) and position of the data. The first moment can be written as: $$\overline{x}={\sum_iB_ix_i \over \sum_iB_i}$$ This is essentially the weighted (by $B_i$) mean position. The geometric center ($x_g$, defined above) is a special case of this with all $B_i=1$. The second moment is essentially the variance of the distribution: $$\overline{x^2}\equiv{\sum_iB_i(x_i-\overline{x})^2 \over \sum_iB_i} = {\sum_iB_ix_i^2 \over \sum_iB_i} - 2\overline{x}{\sum_iB_ix_i\over\sum_iB_i} + \overline{x}^2 ={\sum_iB_ix_i^2 \over \sum_iB_i} - \overline{x}^2$$ The last step was done from the definition of $\overline{x}$. Hence, the square root of $\overline{x^2}$ is the spatial standard deviation (along the one-dimension) of this particular brightness distribution ($B_i$). Crudely (or qualitatively), you can think of its square root as the distance (from $\overline{x}$) which contains a specific amount of the flux (depending on the $B_i$ distribution). Similar to the first moment, the geometric second moment can be found by setting all $B_i=1$. So while the first moment quantified the position of the brightness distribution, the second moment quantifies how that brightness is dispersed about the first moment. In other words, it quantifies how "sharp" the object's image is. Before continuing to two dimensions and the derivation of the elliptical parameters, let's pause for an important implementation technicality. You can ignore this paragraph and the next two if you do not want to implement these concepts. The basic definition (first definition of $\overline{x^2}$ above) can be used without any major problem. However, using this fraction requires two runs over the data: one run to find $\overline{x}$ and another run to find $\overline{x^2}$ from $\overline{x}$, this can be slow. The advantage of the last fraction above, is that we can estimate both the first and second moments in one run (since the $-\overline{x}^2$ term can easily be added later). The logarithmic nature of floating point number digitization creates a complication however: suppose the object is located between pixels 10000 and 10020. Hence the target's pixels are only distributed over 20 pixels (with a standard deviation $<20$), while the mean has a value of $\sim10000$. The $\sum_iB_i^2x_i^2$ will go to very very large values while the individual pixel differences will be orders of magnitude smaller. This will lower the accuracy of our calculation due to the limited accuracy of floating point operations. The variance only depends on the distance of each point from the mean, so we can shift all position by a constant/arbitrary $K$ which is much closer to the mean: $\overline{x-K}=\overline{x}-K$. Hence we can calculate the second order moment using: $$\overline{x^2}={\sum_iB_i(x_i-K)^2 \over \sum_iB_i} - (\overline{x}-K)^2 $$ The closer $K$ is to $\overline{x}$, the better (the sums of squares will involve smaller numbers), as long as $K$ is within the object limits (in the example above: $10000\leq{K}\leq10020$), the floating point error induced in our calculation will be negligible. For the most simplest implementation, MakeCatalog takes $K$ to be the smallest position of the object in each dimension. Since $K$ is arbitrary and an implementation/technical detail, we will ignore it for the remainder of this discussion. In two dimensions, the mean and variances can be written as: $$\overline{x}={\sum_iB_ix_i\over B_i}, \quad \overline{x^2}={\sum_iB_ix_i^2 \over \sum_iB_i} - \overline{x}^2$$ $$\overline{y}={\sum_iB_iy_i\over B_i}, \quad \overline{y^2}={\sum_iB_iy_i^2 \over \sum_iB_i} - \overline{y}^2$$ $$\quad\quad\quad\quad\quad\quad\quad\quad\quad \overline{xy}={\sum_iB_ix_iy_i \over \sum_iB_i} - \overline{x}\times\overline{y}$$ If an elliptical profile's major axis exactly lies along the $x$ axis, then $\overline{x^2}$ will be directly proportional with the profile's major axis, $\overline{y^2}$ with its minor axis and $\overline{xy}=0$. However, in reality we are not that lucky and (assuming galaxies can be parameterized as an ellipse) the major axis of galaxies can be in any direction on the image (in fact this is one of the core principles behind weak-lensing by shear estimation). So the purpose of the remainder of this section is to define a strategy to measure the position angle and axis ratio of some randomly positioned ellipses in an image, using the raw second moments that we have calculated above in our image coordinates. Let's assume we have rotated the galaxy by $\theta$, the new second order moments are: $$\overline{x_\theta^2} = \overline{x^2}\cos^2\theta + \overline{y^2}\sin^2\theta - 2\overline{xy}\cos\theta\sin\theta $$ $$\overline{y_\theta^2} = \overline{x^2}\sin^2\theta + \overline{y^2}\cos^2\theta + 2\overline{xy}\cos\theta\sin\theta$$ $$\overline{xy_\theta} = \overline{x^2}\cos\theta\sin\theta - \overline{y^2}\cos\theta\sin\theta + \overline{xy}(\cos^2\theta-\sin^2\theta)$$ The best $\theta$ ($\theta_0$, where major axis lies along the $x_\theta$ axis) can be found by: $$\left.{\partial \overline{x_\theta^2} \over \partial \theta}\right|_{\theta_0}=0$$ Taking the derivative, we get: $$2\cos\theta_0\sin\theta_0(\overline{y^2}-\overline{x^2}) + 2(\cos^2\theta_0-\sin^2\theta_0)\overline{xy}=0$$ When $\overline{x^2}\neq\overline{y^2}$, we can write: $$\tan2\theta_0 = 2{\overline{xy} \over \overline{x^2}-\overline{y^2}}.$$ MakeCatalog uses the standard C math library's ‘atan2’ function to estimate $\theta_0$, which we define as the position angle of the ellipse. To recall, this is the angle of the major axis of the ellipse with the $x$ axis. By definition, when the elliptical profile is rotated by $\theta_0$, then $\overline{xy_{\theta_0}}=0$, $\overline{x_{\theta_0}^2}$ will be the extent of the maximum variance and $\overline{y_{\theta_0}^2}$ the extent of the minimum variance (which are perpendicular for an ellipse). Replacing $\theta_0$ in the equations above for $\overline{x_\theta}$ and $\overline{y_\theta}$, we can get the semi-major ($A$) and semi-minor ($B$) lengths: $$A^2\equiv\overline{x_{\theta_0}^2}= {\overline{x^2} + \overline{y^2} \over 2} + \sqrt{\left({\overline{x^2}-\overline{y^2} \over 2}\right)^2 + \overline{xy}^2}$$ $$B^2\equiv\overline{y_{\theta_0}^2}= {\overline{x^2} + \overline{y^2} \over 2} - \sqrt{\left({\overline{x^2}-\overline{y^2} \over 2}\right)^2 + \overline{xy}^2}$$ As a summary, it is important to remember that the units of $A$ and $B$ are in pixels (the standard deviation of a positional distribution) and that they represent the spatial light distribution of the object in both image dimensions (rotated by $\theta_0$). When the object cannot be represented as an ellipse, this interpretation breaks down: $\overline{xy_{\theta_0}}\neq0$ and $\overline{y_{\theta_0}^2}$ will not be the direction of minimum variance.  File: gnuastro.info, Node: Adding new columns to MakeCatalog, Next: MakeCatalog measurements, Prev: Measuring elliptical parameters, Up: MakeCatalog 7.4.5 Adding new columns to MakeCatalog --------------------------------------- MakeCatalog is designed to allow easy addition of different measurements over a labeled image; see Akhlaghi 2016 (https://arxiv.org/abs/1611.06387v1). A check-list style description of necessary steps to do that is described in this section. The common development characteristics of MakeCatalog and other Gnuastro programs is explained in *note Developing::. We strongly encourage you to have a look at that chapter to greatly simplify your navigation in the code. After adding and testing your column, you are most welcome (and encouraged) to share it with us so we can add to the next release of Gnuastro for everyone else to also benefit from your efforts. MakeCatalog will first pass over each label's pixels two times and do necessary raw/internal calculations. Once the passes are done, it will use the raw information for filling the final catalog's columns. In the first pass it will gather mainly object information and in the second run, it will mainly focus on the clumps, or any other measurement that needs an output from the first pass. These two passes are designed to be raw summations: no extra processing. This will allow parallel processing and simplicity/clarity. So if your new calculation, needs new raw information from the pixels, then you will need to also modify the respective ‘mkcatalog_first_pass’ and ‘mkcatalog_second_pass’ functions (both in ‘bin/mkcatalog/mkcatalog.c’) and define new raw table columns in ‘main.h’ (hopefully the comments in the code are clear enough). In all these different places, the final columns are sorted in the same order (same order as *note Invoking astmkcatalog::). This allows a particular column/option to be easily found in all steps. Therefore in adding your new option, be sure to keep it in the same relative place in the list in all the separate places (it does not necessarily have to be in the end), and near conceptually similar options. ‘main.h’ The ‘objectcols’ and ‘clumpcols’ enumerated variables (‘enum’) define the raw/internal calculation columns. If your new column requires new raw calculations, add a row to the respective list. If your calculation requires any other settings parameters, you should add a variable to the ‘mkcatalogparams’ structure. ‘ui.c’ If the new column needs raw calculations (an entry was added in ‘objectcols’ and ‘clumpcols’), specify which inputs it needs in ‘ui_necessary_inputs’, similar to the other options. Afterwards, if your column includes any particular settings (you needed to add a variable to the ‘mkcatalogparams’ structure in ‘main.h’), you should do the sanity checks and preparations for it here. ‘ui.h’ The ‘option_keys_enum’ associates a unique value for each option to MakeCatalog. The options that have a short option version, the single character short comment is used for the value. Those that do not have a short option version, get a large integer automatically. You should add a variable here to identify your desired column. ‘args.h’ This file specifies all the parameters for the GNU C library, Argp structure that is in charge of reading the user's options. To define your new column, just copy an existing set of parameters and change the first, second and 5th values (the only ones that differ between all the columns), you should use the macro you defined in ‘ui.h’ here. ‘columns.c’ This file contains the main definition and high-level calculation of your new column through the ‘columns_define_alloc’ and ‘columns_fill’ functions. In the first, you specify the basic information about the column: its name, units, comments, type (see *note Numeric data types::) and how it should be printed if the output is a text file. You should also specify the raw/internal columns that are necessary for this column here as the many existing examples show. Through the types for objects and rows, you can specify if this column is only for clumps, objects or both. The second main function (‘columns_fill’) writes the final value into the appropriate column for each object and clump. As you can see in the many existing examples, you can define your processing on the raw/internal calculations here and save them in the output. ‘mkcatalog.c’ This file contains the low-level parsing functions. To be optimized, the parsing is done in parallel through the ‘mkcatalog_single_object’ function. This function initializes the necessary arrays and calls the lower-level ‘parse_objects’ and ‘parse_clumps’ for actually going over the pixels. They are all heavily commented, so you should be able to follow where to add your necessary low-level calculations. ‘doc/gnuastro.texi’ Update this manual and add a description for the new column.  File: gnuastro.info, Node: MakeCatalog measurements, Next: Invoking astmkcatalog, Prev: Adding new columns to MakeCatalog, Up: MakeCatalog 7.4.6 MakeCatalog measurements ------------------------------ MakeCatalog's output measurements/columns can be specified using command-line options (*note Options::). The current measurements in MakeCatalog are those which only produce one final value for each label (for example, its magnitude: a single number). All the different label's measurements can be written as one column in a final table/catalog that contains other columns for other similar single-number measurements. In this case, all the different label's measurements can be written as one column in a final table/catalog that contains other columns for other similar single-number measurements. The majority of this section is devoted to MakeCatalog's single-valued measurements. However, MakeCatalog can also do measurements that produce more than one value for each label. Currently the only such measurement is generation of spectra from 3D cubes with the ‘--spectrum’ option and it is discussed in the end of this section. Command-line options are used to identify which measurements you want in the final catalog(s) and in what order. If any of the options below is called on the command-line or in any of the configuration files, it will be included as a column in the output catalog. The order of the columns is in the same order as the options were seen by MakeCatalog (see *note Configuration file precedence::). Some of the columns apply to both "objects" and "clumps" and some are particular to only one of them (for the definition of "objects" and "clumps", see *note Segment::). Columns/options that are unique to one catalog (only objects, or only clumps), are explicitly marked with [Objects] or [Clumps] to specify the catalog they will be placed in. * Menu: * Identifier columns:: Identifying labels of each row (object/clumps). * Position measurements in pixels:: Containing image/pixel (X/Y) measurements. * Position measurements in WCS:: Containing WCS (for example RA/Dec) measurements. * Brightness measurements:: Using pixel values of each label. * Surface brightness measurements:: Various ways to measure surface brightness. * Morphology measurements nonparametric:: Non-parametric morphology. * Morphology measurements elliptical:: Elliptical morphology measurements. * Measurements per slice spectra:: Measurements on each slice (like spectra).  File: gnuastro.info, Node: Identifier columns, Next: Position measurements in pixels, Prev: MakeCatalog measurements, Up: MakeCatalog measurements 7.4.6.1 Identifier columns .......................... The identifier of each row (group of measurements) is usually the first thing you will be requesting from MakeCatalog. Without the identifier, it is not clear which measurement corresponds to which label for the input. Since MakeCatalog can also optionally take sub-structure label (clumps; see *note Segment::), there are various identifiers in general that are listed below. The most generic (and shortest and easiest to type!) is the ‘--ids’ option which can be used in object-only or object-clump catalogs. ‘--i’ ‘--ids’ This is a unique option which can add multiple columns to the final catalog(s). Calling this option will put the object IDs (‘--obj-id’) in the objects catalog and host-object-ID (‘--host-obj-id’) and ID-in-host-object (‘--id-in-host-obj’) into the clumps catalog. Hence if only object catalogs are required, it has the same effect as ‘--obj-id’. ‘--obj-id’ [Objects] ID of this object. ‘-j’ ‘--host-obj-id’ [Clumps] The ID of the object which hosts this clump. ‘--id-in-host-obj’ [Clumps] The ID of this clump in its host object.  File: gnuastro.info, Node: Position measurements in pixels, Next: Position measurements in WCS, Prev: Identifier columns, Up: MakeCatalog measurements 7.4.6.2 Position measurements in pixels ....................................... The position of a labeled region within your input dataset (in its own units) can be measured with the options in this section. By "in its own units" we mean pixels in a 2D image or voxels in a 3D cube. For example if the flux-weighted center of a label lies 123 pixels on the horizontal and 456 pixels on the vertical, the ‘--x’ and ‘--y’ options will put a value of 123 and 456 in their respective columns. As you see below, there are various ways to define the "position" of an object, so read the differences carefully to choose the one that corresponds best to your usage. ‘-x’ ‘--x’ The flux weighted center of all objects and clumps along the first FITS axis (horizontal when viewed in SAO DS9), see $\overline{x}$ in *note Measuring elliptical parameters::. The weight has to have a positive value (pixel value larger than the Sky value) to be meaningful! Specially when doing matched photometry, this might not happen: no pixel value might be above the Sky value. For such detections, the geometric center will be reported in this column (see ‘--geo-x’). You can use ‘--weight-area’ to see which was used. ‘-y’ ‘--y’ The flux weighted center of all objects and clumps along the second FITS axis (vertical when viewed in SAO DS9). See ‘--x’. ‘-z’ ‘--z’ The flux weighted center of all objects and clumps along the third FITS axis. See ‘--x’. ‘--geo-x’ The geometric center of all objects and clumps along the first FITS axis axis. The geometric center is the average pixel positions irrespective of their pixel values. ‘--geo-y’ The geometric center of all objects and clumps along the second FITS axis axis, see ‘--geo-x’. ‘--geo-z’ The geometric center of all objects and clumps along the third FITS axis axis, see ‘--geo-x’. ‘--min-val-x’ Position of pixel with minimum value in objects and clumps, along the first FITS axis. ‘--max-val-x’ Position of pixel with maximum value in objects and clumps, along the first FITS axis. ‘--min-val-y’ Position of pixel with minimum value in objects and clumps, along the first FITS axis. ‘--max-val-y’ Position of pixel with maximum value in objects and clumps, along the first FITS axis. ‘--min-val-z’ Position of pixel with minimum value in objects and clumps, along the first FITS axis. ‘--max-val-z’ Position of pixel with maximum value in objects and clumps, along the first FITS axis. ‘--min-x’ The minimum position of all objects and clumps along the first FITS axis. ‘--max-x’ The maximum position of all objects and clumps along the first FITS axis. ‘--min-y’ The minimum position of all objects and clumps along the second FITS axis. ‘--max-y’ The maximum position of all objects and clumps along the second FITS axis. ‘--min-z’ The minimum position of all objects and clumps along the third FITS axis. ‘--max-z’ The maximum position of all objects and clumps along the third FITS axis. ‘--clumps-x’ [Objects] The flux weighted center of all the clumps in this object along the first FITS axis. See ‘--x’. ‘--clumps-y’ [Objects] The flux weighted center of all the clumps in this object along the second FITS axis. See ‘--x’. ‘--clumps-z’ [Objects] The flux weighted center of all the clumps in this object along the third FITS axis. See ‘--x’. ‘--clumps-geo-x’ [Objects] The geometric center of all the clumps in this object along the first FITS axis. See ‘--geo-x’. ‘--clumps-geo-y’ [Objects] The geometric center of all the clumps in this object along the second FITS axis. See ‘--geo-x’. ‘--clumps-geo-z’ [Objects] The geometric center of all the clumps in this object along the third FITS axis. See ‘--geo-z’.  File: gnuastro.info, Node: Position measurements in WCS, Next: Brightness measurements, Prev: Position measurements in pixels, Up: MakeCatalog measurements 7.4.6.3 Position measurements in WCS .................................... The position of a labeled region within your input dataset (in the World Coordinate System, or WCS) can be measured with the options in this section. As you see below, there are various ways to define the "position" of an object, so read the differences carefully to choose the one that corresponds best to your usage. The most common WCS coordinates are Right Ascension (RA) and Declination in an equatorial system. Therefore, to simplify their usage, we have special ‘--ra’ and ‘--dec’ options. However, the WCS of datasets are in Galactic coordinates, so to be generic, you can use the ‘--w1’, ‘--w2’ or ‘--w3’ (if you have a 3D cube) options. In case your dataset's WCS is not in your desired system (for example it is Galactic, but you want equatorial 2000), you can use the ‘--wcscoordsys’ option of Gnuastro's Fits program on the labeled image before running MakeCatalog (see *note Keyword inspection and manipulation::). ‘-r’ ‘--ra’ Flux weighted right ascension of all objects or clumps, see ‘--x’. This is just an alias for one of the lower-level ‘--w1’ or ‘--w2’ options. Using the FITS WCS keywords (‘CTYPE’), MakeCatalog will determine which axis corresponds to the right ascension. If no ‘CTYPE’ keywords start with ‘RA’, an error will be printed when requesting this column and MakeCatalog will abort. ‘-d’ ‘--dec’ Flux weighted declination of all objects or clumps, see ‘--x’. This is just an alias for one of the lower-level ‘--w1’ or ‘--w2’ options. Using the FITS WCS keywords (‘CTYPE’), MakeCatalog will determine which axis corresponds to the declination. If no ‘CTYPE’ keywords start with ‘DEC’, an error will be printed when requesting this column and MakeCatalog will abort. ‘--w1’ Flux weighted first WCS axis of all objects or clumps, see ‘--x’. The first WCS axis is commonly used as right ascension in images. ‘--w2’ Flux weighted second WCS axis of all objects or clumps, see ‘--x’. The second WCS axis is commonly used as declination in images. ‘--w3’ Flux weighted third WCS axis of all objects or clumps, see ‘--x’. The third WCS axis is commonly used as wavelength in integral field unit data cubes. ‘--geo-w1’ Geometric center in first WCS axis of all objects or clumps, see ‘--geo-x’. The first WCS axis is commonly used as right ascension in images. ‘--geo-w2’ Geometric center in second WCS axis of all objects or clumps, see ‘--geo-x’. The second WCS axis is commonly used as declination in images. ‘--geo-w3’ Geometric center in third WCS axis of all objects or clumps, see ‘--geo-x’. The third WCS axis is commonly used as wavelength in integral field unit data cubes. ‘--clumps-w1’ [Objects] Flux weighted center in first WCS axis of all clumps in this object, see ‘--x’. The first WCS axis is commonly used as right ascension in images. ‘--clumps-w2’ [Objects] Flux weighted declination of all clumps in this object, see ‘--x’. The second WCS axis is commonly used as declination in images. ‘--clumps-w3’ [Objects] Flux weighted center in third WCS axis of all clumps in this object, see ‘--x’. The third WCS axis is commonly used as wavelength in integral field unit data cubes. ‘--clumps-geo-w1’ [Objects] Geometric center right ascension of all clumps in this object, see ‘--geo-x’. The first WCS axis is commonly used as right ascension in images. ‘--clumps-geo-w2’ [Objects] Geometric center declination of all clumps in this object, see ‘--geo-x’. The second WCS axis is commonly used as declination in images. ‘--clumps-geo-w3’ [Objects] Geometric center in third WCS axis of all clumps in this object, see ‘--geo-x’. The third WCS axis is commonly used as wavelength in integral field unit data cubes.  File: gnuastro.info, Node: Brightness measurements, Next: Surface brightness measurements, Prev: Position measurements in WCS, Up: MakeCatalog measurements 7.4.6.4 Brightness measurements ............................... Within an image, pixels have both a position and a value. In the sections above all the measurements involved position (see *note Position measurements in pixels:: or *note Position measurements in WCS::). The measurements in this section only deal with pixel values and ignore the pixel positions completely. In other words, for the options of this section each labeled region within the input is just a group of values (and their associated error values if necessary), and they let you do various types of measurements on the resulting distribution of values. ‘--sum’ The sum of all pixel values associated to this label (object or clump). Note that if a sky value or image has been given, it will be subtracted before any column measurement. For clumps, the ambient values (average of river pixels around the clump, multiplied by the area of the clump) is subtracted, see ‘--river-mean’. So the sum of all the clump-sums in the clump catalog of one object will be smaller than the ‘--clumps-sum’ column of the objects catalog. If no usable pixels are present over the clump or object (for example, they are all blank), the returned value will be NaN (note that zero is meaningful). ‘--sum-error’ The ($1\sigma$) error in measuring the sum of values of a label (objects or clumps). The returned value will be NaN when the label covers only NaN pixels in the values image, or a pixel is NaN in the ‘--instd’ image, but non-NaN in the values image. The latter situation usually happens when there is a bug in the previous steps of your analysis, and is important because those pixels with a NaN in the ‘--instd’ image may contribute significantly to the final error. If you want to ignore those pixels in the error measurement, set them to zero (which is a meaningful number in such scenarios). ‘--clumps-sum’ [Objects] The total sum of the pixels covered by clumps (before subtracting the river) within each object. This is simply the sum of ‘--sum-no-river’ in the clumps catalog (see below). If no usable pixels are present over the clump or object (for example, they are all blank), the stored value will be NaN (note that zero is meaningful). ‘--sum-no-river’ [Clumps] The sum of Sky (not river) subtracted clump pixel values. By definition, for the clumps, the average value of the rivers surrounding it are subtracted from it for a first order accounting for contamination by neighbors. If no usable pixels are present over the clump or object (for example, they are all blank), the stored value will be NaN (note that zero is meaningful). ‘--mean’ The mean sky subtracted value of pixels within the object or clump. For clumps, the average river flux is subtracted from the sky subtracted mean. ‘--std’ The standard deviation of the pixels within the object or clump. For clumps, the river pixels are not subtracted because that is a constant (per pixel) value and should not affect the standard deviation. ‘--median’ The median sky subtracted value of pixels within the object or clump. For clumps, the average river flux is subtracted from the sky subtracted median. ‘--maximum’ The maximum value of pixels within the object or clump. When the label (object or clump) is larger than three pixels, the maximum is actually derived by the mean of the brightest three pixels, not the largest pixel value of the same label. This is because noise fluctuations can be very strong in the extreme values of the objects/clumps due to Poisson noise (which gets stronger as the mean gets higher). Simply using the maximum pixel value will create a strong scatter in results that depend on the maximum (for example, the ‘--fwhm’ option also uses this value internally). ‘--sigclip-number’ The number of elements/pixels in the dataset after sigma-clipping the object or clump. The sigma-clipping parameters can be set with the ‘--sigmaclip’ option described in *note MakeCatalog inputs and basic settings::. For more on Sigma-clipping, see *note Sigma clipping::. ‘--sigclip-median’ The sigma-clipped median value of the object of clump's pixel distribution. For more on sigma-clipping and how to define it, see ‘--sigclip-number’. ‘--sigclip-mean’ The sigma-clipped mean value of the object of clump's pixel distribution. For more on sigma-clipping and how to define it, see ‘--sigclip-number’. ‘--sigclip-std’ The sigma-clipped standard deviation of the object of clump's pixel distribution. For more on sigma-clipping and how to define it, see ‘--sigclip-number’. ‘-m’ ‘--magnitude’ The magnitude of clumps or objects, see ‘--sum’. ‘--magnitude-error’ The magnitude error of clumps or objects. The magnitude error is calculated from the signal-to-noise ratio (see ‘--sn’ and *note Quantifying measurement limits::). Note that until now this error assumes uncorrelated pixel values and also does not include the error in estimating the aperture (or error in generating the labeled image). For now these factors have to be found by other means. Task 14124 (https://savannah.gnu.org/task/index.php?14124) has been defined for work on adding these sources of error too. The returned value will be NaN when the label covers only NaN pixels in the values image, or a pixel is NaN in the ‘--instd’ image, but non-NaN in the values image. The latter situation usually happens when there is a bug in the previous steps of your analysis, and is important because those pixels with a NaN in the ‘--instd’ image may contribute significantly to the final error. If you want to ignore those pixels in the error measurement, set them to zero (which is a meaningful number in such scenarios). ‘--clumps-magnitude’ [Objects] The magnitude of all clumps in this object, see ‘--clumps-sum’. ‘--upperlimit’ The upper limit value (in units of the input image) for this object or clump. This is the sigma-clipped standard deviation of the random distribution, multiplied by the value of ‘--upnsigma’). See *note Quantifying measurement limits:: and *note Upper-limit settings:: for a complete explanation. This is very important for the fainter and smaller objects in the image where the measured magnitudes are not reliable. ‘--upperlimit-mag’ The upper limit magnitude for this object or clump. See *note Quantifying measurement limits:: and *note Upper-limit settings:: for a complete explanation. This is very important for the fainter and smaller objects in the image where the measured magnitudes are not reliable. ‘--upperlimit-onesigma’ The $1\sigma$ upper limit value (in units of the input image) for this object or clump. See *note Quantifying measurement limits:: and *note Upper-limit settings:: for a complete explanation. When ‘--upnsigma=1’, this column's values will be the same as ‘--upperlimit’. ‘--upperlimit-sigma’ The position of the label's sum measured within the distribution of randomly placed upperlimit measurements in units of the distribution's $\sigma$ or standard deviation. See *note Quantifying measurement limits:: and *note Upper-limit settings:: for a complete explanation. ‘--upperlimit-quantile’ The position of the label's sum within the distribution of randomly placed upperlimit measurements as a quantile (value between 0 or 1). See *note Quantifying measurement limits:: and *note Upper-limit settings:: for a complete explanation. If the object is brighter than the brightest randomly placed profile, a value of ‘inf’ is returned. If it is less than the minimum, a value of ‘-inf’ is reported. ‘--upperlimit-skew’ This column contains the non-parametric skew of the $\sigma$-clipped random distribution that was used to estimate the upper-limit magnitude. Taking $\mu$ as the mean, $\nu$ as the median and $\sigma$ as the standard deviation, the traditional definition of skewness is defined as: $(\mu-\nu)/\sigma$. This can be a good measure to see how much you can trust the random measurements, or in other words, how accurately the regions with signal have been masked/detected. If the skewness is strong (and to the positive), then you can tell that you have a lot of undetected signal in the dataset, and therefore that the upper-limit measurement (and other measurements) are not reliable. ‘--river-mean’ [Clumps] The average of the river pixel values around this clump. River pixels were defined in Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). In short they are the pixels immediately outside of the clumps. This value is used internally to find the sum (or magnitude) and signal to noise ratio of the clumps. It can generally also be used as a scale to gauge the base (ambient) flux surrounding the clump. In case there was no river pixels, then this column will have the value of the Sky under the clump. So note that this value is _not_ sky subtracted. ‘--river-num’ [Clumps] The number of river pixels around this clump, see ‘--river-mean’. ‘--river-min’ [Clumps] Minimum river value around this clump, see ‘--river-mean’. ‘--river-max’ [Clumps] Maximum river value around this clump, see ‘--river-mean’. ‘--sn’ The Signal to noise ratio (S/N) of all clumps or objects. See Akhlaghi and Ichikawa (2015) for the exact equations used. The returned value will be NaN when the label covers only NaN pixels in the values image, or a pixel is NaN in the ‘--instd’ image, but non-NaN in the values image. The latter situation usually happens when there is a bug in the previous steps of your analysis, and is important because those pixels with a NaN in the ‘--instd’ image may contribute significantly to the final error. If you want to ignore those pixels in the error measurement, set them to zero (which is a meaningful number). ‘--sky’ The sky flux (per pixel) value under this object or clump. This is actually the mean value of all the pixels in the sky image that lie on the same position as the object or clump. ‘--sky-std’ The sky value standard deviation (per pixel) for this clump or object. This is the square root of the mean variance under the object, or the root mean square.  File: gnuastro.info, Node: Surface brightness measurements, Next: Morphology measurements nonparametric, Prev: Brightness measurements, Up: MakeCatalog measurements 7.4.6.5 Surface brightness measurements ....................................... In astronomy, Surface brightness is most commonly measured in units of magnitudes per arcsec$^2$ (for the formal definition, see *note Brightness flux magnitude::). Therefore it involves both the values of the pixels within each input label (or output row) and their position. ‘--sb’ The surface brightness (in units of mag/arcsec$^2$) of the labeled region (objects or clumps). For more on the definition of the surface brightness, see *note Brightness flux magnitude::. ‘--sb-error’ Error in measuring the surface brightness (the ‘--sb’ column). This column will use the value given to ‘--spatialresolution’ in the processing (in pixels). For more on ‘--spatialresolution’, see *note MakeCatalog inputs and basic settings:: and for the equation used to derive the surface brightness error, see *note Surface brightness error of each detection::. ‘--upperlimit-sb’ The upper-limit surface brightness (in units of mag/arcsec$^2$) of this labeled region (object or clump). In other words, this option measures the surface brightness of noise within the footprint of each input label. This is just a simple wrapper over lower-level columns: setting B and A as the value in the columns ‘--upperlimit’ and ‘--area-arcsec2’, we fill this column by simply use the surface brightness equation of *note Brightness flux magnitude::. ‘--half-sum-sb’ Surface brightness (in units of mag/arcsec$^2$) within the area that contains half the total sum of the label's pixels (object or clump). This is useful as a measure of the sharpness of an astronomical object: for example a star will have very few pixels at half the maximum, so its ‘--half-sum-sb’ will be much brighter than a galaxy at the same magnitude. Also consider ‘--half-max-sb’ below. This column just plugs in the values of half the value of the ‘--sum’ column and the ‘--half-sum-area’ column, into the surface brightness equation. Therefore please see the description in ‘--half-sum-area’ to understand the systematics of this column and potential biases (see *note Morphology measurements nonparametric::). ‘--half-max-sb’ The surface brightness (in units of mag/arcsec$^2$) within the region that contains half the maximum value of the labeled region. Like ‘--half-sum-sb’ this option this is a good way to identify the "central" surface brightness of an object. To know when this measurement is reasonable, see the description of ‘--fwhm’ in *note Morphology measurements nonparametric::. ‘--sigclip-mean-sb’ Surface brightness (over 1 pixel's area in arcsec$^2$) of the sigma-clipped mean value of the pixel values distribution associated to each label (object or clump). This is useful in scenarios where your labels have approximately _constant_ surface brightness values _after_ after removing outliers: for example in a radial profile, see *note Invoking astscript-radial-profile::). In other scenarios it should be used with extreme care. For example over the full area of a galaxy/star the pixel distribution is not constant (or symmetric after adding noise), their pixel distributions are inherently skewed (with fewer pixels in the center, having a very large value and many pixels in the outer parts having lower values). Therefore, sigma-clipping is not meaningful for such objects! For more on the definition of the surface brightness, see *note Brightness flux magnitude::, for more on sigma-clipping, see *note Sigma clipping::. The error in this magnitude can be retrieved from the ‘--sigclip-mean-sb-delta’ column described below, and you can use the ‘--sigclip-std-sb’ column to find when the magnitude has become noise-dominated (signal-to-noise ratio is roughly 1). See the description of these two options for more. ‘--sigclip-mean-sb-delta’ Scatter in the ‘--sigclip-mean-sb’ without using the standard deviation of each pixel (that is given by ‘--instd’ in *note MakeCatalog inputs and basic settings::). The scatter here is measured from the values of the label themselves. This measurement is therefore most meaningful when you expect the flux across one label to be constant (as in a radial profile for example). This is calculated using the equation in *note Surface brightness error of each detection::, where $\Delta{A}=0$ (since sigma-clip is calculated per pixel and there is no error in a single pixel). Within the equation to derive $\Delta{M}$ (the error in magnitude, derived in *note Magnitude measurement error of each detection::), the signal-to-noise ratio is defined by dividing the sigma-clipped mean by the sigma-clipped standard deviation. ‘--sigclip-std-sb’ The surface brightness of the sigma-clipped standard deviation of all the pixels with the same label. For labels that are expected to have the same value in all their pixels (for example each annulus of a radial profile) this can be used to find the reliable ($1\sigma$) surface brightness for that label. In other words, if ‘--sigclip-mean-sb’ is fainter than the value of this column, you know that noise is becoming significant. However, as described in ‘--sigclip-mean-sb’, the sigma-clipped measurements of MakeCatalog should only be used in certain situations like radial profiles, see the description there for more.  File: gnuastro.info, Node: Morphology measurements nonparametric, Next: Morphology measurements elliptical, Prev: Surface brightness measurements, Up: MakeCatalog measurements 7.4.6.6 Morphology measurements (non-parametric) ................................................ Morphology defined as a way to quantify the "shape" of an object in your input image. This includes both the position and value of the pixels within your input labels. There are many ways to define the morphology of an object. In this section, we will review the available non-parametric measures of morphology. By non-parametric, we mean that no functional shape is assumed for the measurement. In *note Morphology measurements elliptical:: you can see some parametric elliptical measurements (which are only valid when the object is actually an ellipse). ‘--num-clumps’ [Objects] The number of clumps in this object. ‘--area’ The raw area (number of pixels/voxels) in any clump or object independent of what pixel it lies over (if it is NaN/blank or unused for example). ‘--arcsec2-area’ The used (non-blank in values image) area of the labeled region in units of arc-seconds squared. This column is just the value of the ‘--area’ column, multiplied by the area of each pixel in the input image (in units of arcsec^2). Similar to the ‘--ra’ or ‘--dec’ columns, for this option to work, the objects extension used has to have a WCS structure. ‘--area-min-val’ The number of pixels that are equal to the minimum value of the labeled region (clump or object). ‘--area-max-val’ The number of pixels that are equal to the maximum value of the labeled region (clump or object). ‘--area-xy’ Similar to ‘--area’, when the clump or object is projected onto the first two dimensions. This is only available for 3-dimensional datasets. When working with Integral Field Unit (IFU) datasets, this projection onto the first two dimensions would be a narrow-band image. ‘--fwhm’ The full width at half maximum (in units of pixels, along the semi-major axis) of the labeled region (object or clump). The maximum value is estimated from the mean of the top-three pixels with the highest values, see the description under ‘--maximum’. The number of pixels that have half the value of that maximum are then found (value in the ‘--half-max-area’ column) and a radius is estimated from the area. See the description under ‘--half-sum-radius’ for more on converting area to radius along major axis. Because of its non-parametric nature, this column is most reliable on clumps and should only be used in objects with great caution. This is because objects can have more than one clump (peak with true signal) and multiple peaks are not treated separately in objects, so the result of this column will be biased. Also, because of its non-parametric nature, this FWHM it does not account for the PSF, and it will be strongly affected by noise if the object is faint/diffuse So when half the maximum value (which can be requested using the ‘--maximum’ column) is too close to the local noise level (which can be requested using the ‘--sky-std’ column), the value returned in this column is meaningless (its just noise peaks which are randomly distributed over the area). You can therefore use the ‘--maximum’ and ‘--sky-std’ columns to remove, or flag, unreliable FWHMs. For example, if a labeled region's maximum is less than 2 times the sky standard deviation, the value will certainly be unreliable (half of that is $1\sigma$!). For a more reliable value, this fraction should be around 4 (so half the maximum is 2$\sigma$). ‘--half-max-area’ The number of pixels with values larger than half the maximum flux within the labeled region. This option is used to estimate ‘--fwhm’, so please read the notes there for the caveats and necessary precautions. ‘--half-max-radius’ The radius of region containing half the maximum flux within the labeled region. This is just half the value reported by ‘--fwhm’. ‘--half-max-sum’ The sum of the pixel values containing half the maximum flux within the labeled region (or those that are counted in ‘--halfmaxarea’). This option uses the pixels within ‘--fwhm’, so please read the notes there for the caveats and necessary precautions. ‘--half-sum-area’ The number of pixels that contain half the object or clump's total sum of pixels (half the value in the ‘--sum’ column). To count this area, all the non-blank values associated with the given label (object or clump) will be sorted and summed in order (starting from the maximum), until the sum becomes larger than half the total sum of the label's pixels. This option is thus good for clumps (which are defined to have a single peak in their morphology), but for objects you should be careful: if the object includes multiple peaks/clumps at roughly the same level, then the area reported by this option will be distributed over all the peaks. ‘--half-sum-radius’ Radius (in units of pixels) derived from the area that contains half the total sum of the label's pixels (value reported by ‘--halfsumarea’). If the area is $A_h$ and the axis ratio is $q$, then the value returned in this column is $\sqrt{A_h/({\pi}q)}$. This option is a good measure of the concentration of the _observed_ (after PSF convolution and noisy) object or clump, But as described below it underestimates the effective radius. Also, it should be used in caution with objects that may have multiple clumps. It is most reliable with clumps or objects that have one or zero clumps, see the note under ‘--halfsumarea’. Recall that in general, for an ellipse with semi-major axis $a$, semi-minor axis $b$, and axis ratio $q=b/a$ the area ($A$) is $A={\pi}ab={\pi}qa^2$. For a circle (where $q=1$), this simplifies to the familiar $A={\pi}a^2$. This option should not be confused with the _effective radius_ for Sérsic profiles, commonly written as $r_e$. For more on the Sérsic profile and $r_e$, please see *note Galaxies::. Therefore, when $r_e$ is meaningful for the target (the target is elliptically symmetric and can be parameterized as a Sérsic profile), $r_e$ should be derived from fitting the profile with a Sérsic function which has been convolved with the PSF. But from the equation above, you see that this radius is derived from the raw image's labeled values (after convolution, with no parametric profile), so this column's value will generally be (much) smaller than $r_e$, depending on the PSF, depth of the dataset, the morphology, or if a fraction of the profile falls on the edge of the image. In other words, this option can only be interpreted as an effective radius if there is no noise and no PSF and the profile within the image extends to infinity (or a very large multiple of the effective radius) and it not near the edge of the image. ‘--frac-max1-area’ ‘--frac-max2-area’ Number of pixels brighter than the given fraction(s) of the maximum pixel value. For the maximum value, see the description of ‘--maximum’ column. The fraction(s) are given through the ‘--frac-max’ option (that can take two values) and is described in *note MakeCatalog inputs and basic settings::. Recall that in ‘--halfmaxarea’, the fraction is fixed to 0.5. Hence, added with these two columns, you can sample three parts of the profile area. ‘--frac-max1-sum’ ‘--frac-max2-sum’ Sum of pixels brighter than the given fraction(s) of the maximum pixel value. For the maximum value, see the description of ‘--maximum’ column below. The fraction(s) are given through the ‘--frac-max’ option (that can take two values) and is described in *note MakeCatalog inputs and basic settings::. Recall that in ‘--halfmaxsum’, the fraction is fixed to 0.5. Hence, added with these two columns, you can sample three parts of the profile's sum of pixels. ‘--frac-max1-radius’ ‘--frac-max2-radius’ Radius (in units of pixels) derived from the area that contains the given fractions of the maximum valued pixel(s) of the label's pixels (value reported by ‘--frac-max1-area’ or ‘--frac-max2-area’). For the maximum value, see the description of ‘--maximum’ column below. The fractions are given through the ‘--frac-max’ option (that can take two values) and is described in *note MakeCatalog inputs and basic settings::. Recall that in ‘--fwhm’, the fraction is fixed to 0.5. Hence, added with these two columns, you can sample three parts of the profile's radius. ‘--clumps-area’ [Objects] The total area of all the clumps in this object. ‘--weight-area’ The area (number of pixels) used in the flux weighted position calculations. ‘--geo-area’ The area of all the pixels labeled with an object or clump. Note that unlike ‘--area’, pixel values are completely ignored in this column. For example, if a pixel value is blank, it will not be counted in ‘--area’, but will be counted here. ‘--geo-area-xy’ Similar to ‘--geo-area’, when the clump or object is projected onto the first two dimensions. This is only available for 3-dimensional datasets. When working with Integral Field Unit (IFU) datasets, this projection onto the first two dimensions would be a narrow-band image.  File: gnuastro.info, Node: Morphology measurements elliptical, Next: Measurements per slice spectra, Prev: Morphology measurements nonparametric, Up: MakeCatalog measurements 7.4.6.7 Morphology measurements (elliptical) ............................................ When your target objects are sufficiently ellipse-like, you can use the measurements below to quantify the various parameters of the ellipse. For details of how the elliptical parameters are measured, see *note Measuring elliptical parameters::. For non-parametric morphological measurements, see *note Morphology measurements nonparametric::. The measures that start with ‘--geo-*’ ignore the pixel values and just do the measurements on the label's "geometric" shape. ‘--semi-major’ The pixel-value weighted root mean square (RMS) along the semi-major axis of the profile (assuming it is an ellipse) in units of pixels. ‘--semi-minor’ The pixel-value weighted root mean square (RMS) along the semi-minor axis of the profile (assuming it is an ellipse) in units of pixels. ‘--axis-ratio’ The pixel-value weighted axis ratio (semi-minor/semi-major) of the object or clump. ‘--position-angle’ The pixel-value weighted angle of the semi-major axis with the first FITS axis in degrees. ‘--geo-semi-major’ The geometric (ignoring pixel values) root mean square (RMS) along the semi-major axis of the profile, assuming it is an ellipse, in units of pixels. ‘--geo-semi-minor’ The geometric (ignoring pixel values) root mean square (RMS) along the semi-minor axis of the profile, assuming it is an ellipse, in units of pixels. ‘--geo-axis-ratio’ The geometric (ignoring pixel values) axis ratio of the profile, assuming it is an ellipse. ‘--geo-position-angle’ The geometric (ignoring pixel values) angle of the semi-major axis with the first FITS axis in degrees.  File: gnuastro.info, Node: Measurements per slice spectra, Prev: Morphology measurements elliptical, Up: MakeCatalog measurements 7.4.6.8 Measurements per slice (spectra) ........................................ When the input is a 3D data cube, MakeCatalog has the following multi-valued measurements per label. For a tutorial on how to use these options and interpret their values, see *note Detecting lines and extracting spectra in 3D data::. These options will do measurements on each 2D slice of the input 3D cube; hence the common the format of ‘--*-in-slice’. Each slice usually corresponds to a certain wavelength, you can also think of these measurements as spectra. For each row (input label), each of the columns described here will contain multiple values as a vector column. The number of measurements in each column is the number of slices in the cube, or the size of the cube along the third dimension. To learn more about vector columns and how to manipulate them, see *note Vector columns::. For example usage of these columns in the tutorial above, see *note 3D measurements and spectra:: and *note Extracting a single spectrum and plotting it::. There are two ways to do each measurement on a slice for each label: Only label The measurement will only be done on the voxels in the slice that are associated to that label. These types of per-slice measurement therefore have the following properties: • This will only be a measurement of that label and will not be affected by any other label. • The number of voxels used in each slice can be different (usually only one or two voxels at the two extremes of the label (along the third dimension), and many in the middle. • Since most labels are localized along the third dimension (maybe only covering 20 slices out of thousands!), many of the measurements (on slices where the label doesn't exist) will be NaN (for the sum measurements for example) or 0 (for the area measurements). Projected label MakeCatalog will first project the 3D label into a 2D surface (along the third dimension) to get its 2D footprint. Afterwards, all the voxels in that 2D footprint will be measured all slices. All these measurements will have a ‘-proj-’ component in their name. These types of per-slice measurement therefore has the following properties: • A measurement will be done on each slice of the cube. • All measurements will be done on the same surface area. • Labels can overlap when they are projected onto the first two FITS dimensions (the spatial coordinates, not spectral). As a result, other emission lines or objects may contaminate the resulting spectrum for each label. To help separate other labels, MakeCatalog can do a third type of measurement on each slice: measurements on the voxels that belong to other labels but overlap with the 2D projection. This can be used to see how much your projected measurement is affected by other emission sources (on the projected spectra) and also if multiple lines (labeled regions) belong to the same physical object. These measurements contain ‘-other-’ in their name. ‘--sum-in-slice’ [Only label] Sum of values in each slice. ‘--sum-err-in-slice’ [Only label] Error in '-sum-in-slice'. ‘--area-in-slice’ [Only label] Number of labeled in each slice. ‘--sum-proj-in-slice’ [Projected label] Sum of projected area in each slice. ‘--area-proj-in-slice:’ [Projected label] Number of voxels that are used in ‘--sum-proj-in-slice’. ‘--sum-proj-err-in-slice’ [Projected label] Error of ‘--sum-proj-in-slice’. ‘--area-other-in-slice’ [Projected label] Area of other label in projected area on each slice. ‘--sum-other-in-slice’ [Projected label] Sum of other label in projected area on each slice. ‘--sum-other-err-in-slice:’ [Projected label] Area in ‘--sum-other-in-slice’.  File: gnuastro.info, Node: Invoking astmkcatalog, Prev: MakeCatalog measurements, Up: MakeCatalog 7.4.7 Invoking MakeCatalog -------------------------- MakeCatalog will do measurements and produce a catalog from a labeled dataset and optional values dataset(s). The executable name is ‘astmkcatalog’ with the following general template $ astmkcatalog [OPTION ...] InputImage.fits One line examples: ## Create catalog with RA, Dec, Magnitude and Magnitude error, ## from Segment's output: $ astmkcatalog --ra --dec --magnitude seg-out.fits ## Same catalog as above (using short options): $ astmkcatalog -rdm seg-out.fits ## Write the catalog to a text table: $ astmkcatalog -rdm seg-out.fits --output=cat.txt ## Output columns specified in `columns.conf': $ astmkcatalog --config=columns.conf seg-out.fits ## Use object and clump labels from a K-band image, but pixel values ## from an i-band image. $ astmkcatalog K_segmented.fits --hdu=DETECTIONS --clumpscat \ --clumpsfile=K_segmented.fits --clumpshdu=CLUMPS \ --valuesfile=i_band.fits If MakeCatalog is to do processing (not printing help or option values), an input labeled image should be provided. The options described in this section are those that are particular to MakeProfiles. For operations that MakeProfiles shares with other programs (mainly involving input/output or general processing steps), see *note Common options::. Also see *note Common program behavior:: for some general characteristics of all Gnuastro programs including MakeCatalog. The various measurements/columns of MakeCatalog are requested as options, either on the command-line or in configuration files, see *note Configuration files::. The full list of available columns is available in *note MakeCatalog measurements::. Depending on the requested columns, MakeCatalog needs more than one input dataset, for more details, please see *note MakeCatalog inputs and basic settings::. The upper-limit measurements in particular need several configuration options which are thoroughly discussed in *note Upper-limit settings::. Finally, in *note MakeCatalog output:: the output file(s) created by MakeCatalog are discussed. * Menu: * MakeCatalog inputs and basic settings:: Input files and basic settings. * Upper-limit settings:: Settings for upper-limit measurements. * MakeCatalog output:: File names of MakeCatalog's output table.  File: gnuastro.info, Node: MakeCatalog inputs and basic settings, Next: Upper-limit settings, Prev: Invoking astmkcatalog, Up: Invoking astmkcatalog 7.4.7.1 MakeCatalog inputs and basic settings ............................................. MakeCatalog works by using a localized/labeled dataset (see *note MakeCatalog::). This dataset maps/labels pixels to a specific target (row number in the final catalog) and is thus the only necessary input dataset to produce a minimal catalog in any situation. Because it only has labels/counters, it must have an integer type (see *note Numeric data types::), see below if your labels are in a floating point container. When the requested measurements only need this dataset (for example, ‘--geo-x’, ‘--geo-y’, or ‘--geo-area’), MakeCatalog will not read any more datasets. Low-level measurements that only use the labeled image are rarely sufficient for any high-level science case. Therefore necessary input datasets depend on the requested columns in each run. For example, let's assume you want the brightness/magnitude and signal-to-noise ratio of your labeled regions. For these columns, you will also need to provide an extra dataset containing values for every pixel of the labeled input (to measure magnitude) and another for the Sky standard deviation (to measure error). All such auxiliary input files have to have the same size (number of pixels in each dimension) as the input labeled image. Their numeric data type is irrelevant (they will be converted to 32-bit floating point internally). For the full list of available measurements, see *note MakeCatalog measurements::. The "values" dataset is used for measurements like brightness/magnitude, or flux-weighted positions. If it is a real image, by default it is assumed to be already Sky-subtracted prior to running MakeCatalog. If it is not, you use the ‘--subtractsky’ option to, so MakeCatalog reads and subtracts the Sky dataset before any processing. To obtain the Sky value, you can use the ‘--sky’ option of *note Statistics::, but the best recommended method is *note NoiseChisel::, see *note Sky value::. MakeCatalog can also do measurements on sub-structures of detections. In other words, it can produce two catalogs. Following the nomenclature of Segment (see *note Segment::), the main labeled input dataset is known as "object" labels and the (optional) sub-structure input dataset is known as "clumps". If MakeCatalog is run with the ‘--clumpscat’ option, it will also need a labeled image containing clumps, similar to what Segment produces (see *note Segment output::). Since clumps are defined within detected regions (they exist over signal, not noise), MakeCatalog uses their boundaries to subtract the level of signal under them. There are separate options to explicitly request a file name and HDU/extension for each of the required input datasets as fully described below (with the ‘--*file’ format). When each dataset is in a separate file, these options are necessary. However, one great advantage of the FITS file format (that is heavily used in astronomy) is that it allows the storage of multiple datasets in one file. So in most situations (for example, if you are using the outputs of *note NoiseChisel:: or *note Segment::), all the necessary input datasets can be in one file. When none of the ‘--*file’ options are given (for example ‘--clumpsfile’ or ‘--valuesfile’), MakeCatalog will assume the necessary input datasets are available as HDUs in the file given as its argument (without any option). When the Sky or Sky standard deviation datasets are necessary and the only ‘--*file’ option called is ‘--valuesfile’, MakeCatalog will search for these datasets (with the default/given HDUs) in the file given to ‘--valuesfile’ (before looking into the main argument file). It may happen that your labeled objects image was created with a program that only outputs floating point files. However, you know it only has integer valued pixels that are stored in a floating point container. In such cases, you can use Gnuastro's Arithmetic program (see *note Arithmetic::) to change the numerical data type of the image (‘float.fits’) to an integer type image (‘int.fits’) with a command like below: $ astarithmetic float.fits int32 --output=int.fits To summarize: if the input file to MakeCatalog is the default/full output of Segment (see *note Segment output::) you do not have to worry about any of the ‘--*file’ options below. You can just give Segment's output file to MakeCatalog as described in *note Invoking astmkcatalog::. To feed NoiseChisel's output into MakeCatalog, just change the labeled dataset's header (with ‘--hdu=DETECTIONS’). The full list of input dataset options and general setting options are described below. ‘-l FITS’ ‘--clumpsfile=FITS’ The FITS file containing the labeled clumps dataset when ‘--clumpscat’ is called (see *note MakeCatalog output::). When ‘--clumpscat’ is called, but this option is not, MakeCatalog will look into the main input file (given as an argument) for the required extension/HDU (value to ‘--clumpshdu’). ‘--clumpshdu=STR’ The HDU/extension of the clump labels dataset. Only pixels with values above zero will be considered. The clump labels dataset has to be an integer data type (see *note Numeric data types::) and only pixels with a value larger than zero will be used. See *note Segment output:: for a description of the expected format. ‘-v FITS’ ‘--valuesfile=FITS’ The file name of the (sky-subtracted) values dataset. When any of the columns need values to associate with the input labels (for example, to measure the sum of pixel values or magnitude of a galaxy, see *note Brightness flux magnitude::), MakeCatalog will look into a "values" for the respective pixel values. In most common processing, this is the actual astronomical image that the labels were defined, or detected, over. The HDU/extension of this dataset in the given file can be specified with ‘--valueshdu’. If this option is not called, MakeCatalog will look for the given extension in the main input file. ‘--valueshdu=STR/INT’ The name or number (counting from zero) of the extension containing the "values" dataset, see the descriptions above and those in ‘--valuesfile’ for more. ‘-s FITS/FLT’ ‘--insky=FITS/FLT’ Sky value as a single number, or the file name containing a dataset (different values per pixel or tile). The Sky dataset is only necessary when ‘--subtractsky’ is called or when a column directly related to the Sky value is requested (currently ‘--sky’). This dataset may be a tessellation, with one element per tile (see ‘--oneelempertile’ of NoiseChisel's *note Processing options::). When the Sky dataset is necessary but this option is not called, MakeCatalog will assume it is an HDU/extension (specified by ‘--skyhdu’) in one of the already given files. First it will look for it in the ‘--valuesfile’ (if it is given) and then the main input file (given as an argument). By default the values dataset is assumed to be already Sky subtracted, so this dataset is not necessary for many of the columns. ‘--skyhdu=STR’ HDU/extension of the Sky dataset, see ‘--skyfile’. ‘--subtractsky’ Subtract the sky value or dataset from the values file prior to any processing. ‘-t STR/FLT’ ‘--instd=STR/FLT’ Sky standard deviation value as a single number, or the file name containing a dataset (different values per pixel or tile). With the ‘--variance’ option you can tell MakeCatalog to interpret this value/dataset as a variance image, not standard deviation. *Important note:* This must only be the SKY standard deviation or variance (not including the signal's contribution to the error). In other words, the final standard deviation of a pixel depends on how much signal there is in it. MakeCatalog will find the amount of signal within each pixel (while subtracting the Sky, if ‘--subtractsky’ is called) and account for the extra error due to it's value (signal). Therefore if the input standard deviation (or variance) image also contains the contribution of signal to the error, then the final error measurements will be over-estimated. ‘--stdhdu=STR’ The HDU of the Sky value standard deviation image. ‘--variance’ The dataset given to ‘--instd’ (and ‘--stdhdu’ has the Sky variance of every pixel, not the Sky standard deviation. ‘--forcereadstd’ Read the input STD image even if it is not required by any of the requested columns. This is because some of the output catalog's metadata may need it, for example, to calculate the dataset's surface brightness limit (see *note Quantifying measurement limits::, configured with ‘--sfmagarea’ and ‘--sfmagnsigma’ in *note MakeCatalog output::). Furthermore, if the input STD image does not have the ‘MEDSTD’ keyword (that is meant to contain the representative standard deviation of the full image), with this option, the median will be calculated and used for the surface brightness limit. ‘-z FLT’ ‘--zeropoint=FLT’ The zero point magnitude for the input image, see *note Brightness flux magnitude::. ‘--sigmaclip FLT,FLT’ The sigma-clipping parameters when any of the sigma-clipping related columns are requested (for example, ‘--sigclip-median’ or ‘--sigclip-number’). This option takes two values: the first is the multiple of $\sigma$, and the second is the termination criteria. If the latter is larger than 1, it is read as an integer number and will be the number of times to clip. If it is smaller than 1, it is interpreted as the tolerance level to stop clipping. See *note Sigma clipping:: for a complete explanation. ‘--frac-max=FLT[,FLT]’ The fractions (one or two) of maximum value in objects or clumps to be used in the related columns, for example, ‘--frac-max1-area’, ‘--frac-max1-sum’ or ‘--frac-max1-radius’, see *note MakeCatalog measurements::. For the maximum value, see the description of ‘--maximum’ column below. The value(s) of this option must be larger than 0 and smaller than 1 (they are a fraction). When only ‘--frac-max1-area’ or ‘--frac-max1-sum’ is requested, one value must be given to this option, but if ‘--frac-max2-area’ or ‘--frac-max2-sum’ are also requested, two values must be given to this option. The values can be written as simple floating point numbers, or as fractions, for example, ‘0.25,0.75’ and ‘0.25,3/4’ are the same. ‘--spatialresolution=FLT’ The error in measuring spatial properties (for example, the area) in units of pixels. You can think of this as the FWHM of the dataset's PSF and is used in measurements like the error in surface brightness (‘--sb-error’, see *note MakeCatalog measurements::). Ideally, images are taken in the optimal Nyquist sampling *note Sampling theorem::, so the default value for this option is 2. But in practice real images my be over-sampled (usually ground-based images, where you will need to increase the default value) or undersampled (some space-based images, where you will need to decrease the default value). ‘--inbetweenints’ Output will contain one row for all integers between 1 and the largest label in the input (irrespective of their existance in the input image). By default, MakeCatalog's output will only contain rows with integers that actually corresponded to at least one pixel in the input dataset. For example, if the input's only labeled pixel values are 11 and 13, MakeCatalog's default output will only have two rows. If you use this option, it will have 13 rows and all the columns corresponding to integer identifiers that did not correspond to any pixel will be 0 or NaN (depending on context).  File: gnuastro.info, Node: Upper-limit settings, Next: MakeCatalog output, Prev: MakeCatalog inputs and basic settings, Up: Invoking astmkcatalog 7.4.7.2 Upper-limit settings ............................ The upper-limit magnitude was discussed in *note Quantifying measurement limits::. Unlike other measured values/columns in MakeCatalog, the upper limit magnitude needs several extra parameters which are discussed here. All the options specific to the upper-limit measurements start with ‘up’ for "upper-limit". The only exception is ‘--envseed’ that is also present in other programs and is general for any job requiring random number generation in Gnuastro (see *note Generating random numbers::). One very important consideration in Gnuastro is reproducibility. Therefore, the values to all of these parameters along with others (like the random number generator type and seed) are also reported in the comments of the final catalog when the upper limit magnitude column is desired. The random seed that is used to define the random positions for each object or clump is unique and set based on the (optionally) given seed, the total number of objects and clumps and also the labels of the clumps and objects. So with identical inputs, an identical upper-limit magnitude will be found. However, even if the seed is identical, when the ordering of the object/clump labels differs between different runs, the result of upper-limit measurements will not be identical. MakeCatalog will randomly place the object/clump footprint over the dataset. When the randomly placed footprint does not fall on any object or masked region (see ‘--upmaskfile’) it will be used in the final distribution. Otherwise that particular random position will be ignored and another random position will be generated. Finally, when the distribution has the desired number of successfully measured random samples (‘--upnum’) the distribution's properties will be measured and placed in the catalog. When the profile is very large or the image is significantly covered by detections, it might not be possible to find the desired number of samplings in a reasonable time. MakeProfiles will continue searching until it is unable to find a successful position (since the last successful measurement(1)), for a large multiple of ‘--upnum’ (currently(2) this is 10). If ‘--upnum’ successful samples cannot be found until this limit is reached, MakeCatalog will set the upper-limit magnitude for that object to NaN (blank). MakeCatalog will also print a warning if the range of positions available for the labeled region is smaller than double the size of the region. In such cases, the limited range of random positions can artificially decrease the standard deviation of the final distribution. If your dataset can allow it (it is large enough), it is recommended to use a larger range if you see such warnings. ‘--upmaskfile=FITS’ File name of mask image to use for upper-limit calculation. In some cases (especially when doing matched photometry), the object labels specified in the main input and mask image might not be adequate. In other words they do not necessarily have to cover _all_ detected objects: the user might have selected only a few of the objects in their labeled image. This option can be used to ignore regions in the image in these situations when estimating the upper-limit magnitude. All the non-zero pixels of the image specified by this option (in the ‘--upmaskhdu’ extension) will be ignored in the upper-limit magnitude measurements. For example, when you are using labels from another image, you can give NoiseChisel's objects image output for this image as the value to this option. In this way, you can be sure that regions with data do not harm your distribution. See *note Quantifying measurement limits:: for more on the upper limit magnitude. ‘--upmaskhdu=STR’ The extension in the file specified by ‘--upmask’. ‘--upnum=INT’ The number of random samples to take for all the objects. A larger value to this option will give a more accurate result (asymptotically), but it will also slow down the process. When a randomly positioned sample overlaps with a detected/masked pixel it is not counted and another random position is found until the object completely lies over an undetected region. So you can be sure that for each object, this many samples over undetected objects are made. See the upper limit magnitude discussion in *note Quantifying measurement limits:: for more. ‘--uprange=INT,INT’ The range/width of the region (in pixels) to do random sampling along each dimension of the input image around each object's position. This is not a mandatory option and if not given (or given a value of zero in a dimension), the full possible range of the dataset along that dimension will be used. This is useful when the noise properties of the dataset vary gradually. In such cases, using the full range of the input dataset is going to bias the result. However, note that decreasing the range of available positions too much will also artificially decrease the standard deviation of the final distribution (and thus bias the upper-limit measurement). ‘--envseed’ Read the random number generator type and seed value from the environment (see *note Generating random numbers::). Random numbers are used in calculating the random positions of different samples of each object. ‘--upsigmaclip=FLT,FLT’ The raw distribution of random values will not be used to find the upper-limit magnitude, it will first be $\sigma$-clipped (see *note Sigma clipping::) to avoid outliers in the distribution (mainly the faint undetected wings of bright/large objects in the image). This option takes two values: the first is the multiple of $\sigma$, and the second is the termination criteria. If the latter is larger than 1, it is read as an integer number and will be the number of times to clip. If it is smaller than 1, it is interpreted as the tolerance level to stop clipping. See *note Sigma clipping:: for a complete explanation. ‘--upnsigma=FLT’ The multiple of the final ($\sigma$-clipped) standard deviation (or $\sigma$) used to measure the upper-limit sum or magnitude. ‘--checkuplim=INT[,INT]’ Print a table of positions and measured values for all the full random distribution used for one particular object or clump. If only one integer is given to this option, it is interpreted to be an object's label. If two values are given, the first is the object label and the second is the ID of requested clump within it. The output is a table with three columns (whether it is FITS or plain-text is determined with the ‘--tableformat’ option, see *note Input output options::). The first two columns are the pixel X,Y positions of the center of each label's tile (see next paragraph), in each random sampling of this particular object/clump. The third column is the measured flux over that region. If the region overlapped with a detection or masked pixel, then its measured value will be a NaN (not-a-number). The total number of rows is thus unknown before running. However, if an upper-limit measurement was made in the main output of MakeCatalog, you can be sure that the number of rows with non-NaN measurements is the number given to the ‘--upnum’ option. The "tile" of each label is defined by the minimum and maximum positions of each label: values of the ‘--min-x’, ‘--max-x’, ‘--min-y’ and ‘--max-y’ columns in the main output table for each label. Therefore, the tile center position that is recorded in the output of this column ignores the distribution of labeled pixels within the tile. Precise interpretation of the position is only relevant when the footprint of your label is highly un-symmetrical and you want to use this catalog to insert your object into the image. In such a case, you can also ask for ‘--min-x’ and ‘--min-y’ and manually calculate their difference with the following two positional measurements of your desired label: ‘--geo-x’ and ‘--geo-y’ (which report the label's "geometric" center; only using the label positions ignoring any "values") or ‘--x’ and ‘--y’ (which report the value-weighted center of the label). Adding the difference with the position reported by this column, will let you define alternative "center"s for your label in particular situations (this will usually not be necessary!). For more on these positional columns, see *note Position measurements in pixels::. ---------- Footnotes ---------- (1) The counting of failed positions restarts on every successful measurement. (2) In Gnuastro's source, this constant number is defined as the ‘MKCATALOG_UPPERLIMIT_MAXFAILS_MULTIP’ macro in ‘bin/mkcatalog/main.h’, see *note Downloading the source::.  File: gnuastro.info, Node: MakeCatalog output, Prev: Upper-limit settings, Up: Invoking astmkcatalog 7.4.7.3 MakeCatalog output .......................... After it has completed all the requested measurements (see *note MakeCatalog measurements::), MakeCatalog will store its measurements in table(s). If an output filename is given (see ‘--output’ in *note Input output options::), the format of the table will be deduced from the name. When it is not given, the input name will be appended with a ‘_cat’ suffix (see *note Automatic output::) and its format will be determined from the ‘--tableformat’ option, which is also discussed in *note Input output options::. ‘--tableformat’ is also necessary when the requested output name is a FITS table (recall that FITS can accept ASCII and binary tables, see *note Table::). By default (when ‘--spectrum’ or ‘--clumpscat’ are not called) only a single catalog/table will be created for the labeled "objects". • if ‘--clumpscat’ is called, a secondary catalog/table will also be created for "clumps" (one of the outputs of the Segment program, for more on "objects" and "clumps", see *note Segment::). In short, if you only have one labeled image, you do not have to worry about clumps and just ignore this. • When ‘--spectrum’ is called, it is not mandatory to specify any single-valued measurement columns. In this case, the output will only be the spectra of each labeled region within a 3D datacube. For more, see the description of ‘--spectrum’ in *note MakeCatalog measurements::. When possible, MakeCatalog will also measure the full input's noise level (also known as surface brightness limit, see *note Quantifying measurement limits::). Since these measurements are related to the noise and not any particular labeled object, they are stored as keywords in the output table. Furthermore, they are only possible when a standard deviation image has been loaded (done automatically for any column measurement that involves noise, for example, ‘--sn’, ‘--magnitude-error’ or ‘--sky-std’). But if you just want the surface brightness limit and no noise-related column, you can use ‘--forcereadstd’. All these keywords start with ‘SBL’ (for "surface brightness limit") and are described below: ‘SBLSTD’ Per-pixel standard deviation. If a ‘MEDSTD’ keyword exists in the standard deviation dataset, then that value is directly used. ‘SBLNSIG’ Sigma multiple for surface brightness limit (value you gave to ‘--sfmagnsigma’), used for ‘SBLMAGPX’ and ‘SBLMAG’. ‘SBLMAGPX’ Per-pixel surface brightness limit (in units of magnitudes/pixel). ‘SBLAREA’ Area (in units of arcsec$^2$) used in ‘SBLMAG’ (value you gave to ‘--sfmagarea’). ‘SBLMAG’ Surface brightness limit of data calculated over ‘SBLAREA’ (in units of mag/arcsec$^2$). When any of the upper-limit measurements are requested, the input parameters for the upper-limit measurement are stored in the keywords starting with ‘UP’: ‘UPNSIGMA’, ‘UPNUMBER’, ‘UPRNGNAM’, ‘UPRNGSEE’, ‘UPSCMLTP’, ‘UPSCTOL’. These are primarily input arguments, so they correspond to the options with a similar name. The full list of MakeCatalog's options relating to the output file format and keywords are listed below. See *note MakeCatalog measurements:: for specifying which columns you want in the final catalog. ‘-C’ ‘--clumpscat’ Do measurements on clumps and produce a second catalog (only devoted to clumps). When this option is given, MakeCatalog will also look for a secondary labeled dataset (identifying substructure) and produce a catalog from that. For more on the definition on "clumps", see *note Segment::. When the output is a FITS file, the objects and clumps catalogs/tables will be stored as multiple extensions of one FITS file. You can use *note Table:: to inspect the column meta-data and contents in this case. However, in plain text format (see *note Gnuastro text table format::), it is only possible to keep one table per file. Therefore, if the output is a text file, two output files will be created, ending in ‘_o.txt’ (for objects) and ‘_c.txt’ (for clumps). ‘--noclumpsort’ Do not sort the clumps catalog based on object ID (only relevant with ‘--clumpscat’). This option will benefit the performance(1) of MakeCatalog when it is run on multiple threads _and_ the position of the rows in the clumps catalog is irrelevant (for example, you just want the number-counts). MakeCatalog does all its measurements on each _object_ independently and in parallel. As a result, while it is writing the measurements on each object's clumps, it does not know how many clumps there were in previous objects. Each thread will just fetch the first available row and write the information of clumps (in order) starting from that row. After all the measurements are done, by default (when this option is not called), MakeCatalog will reorder/permute the clumps catalog to have both the object and clump ID in an ascending order. If you would like to order the catalog later (when it is a plain text file), you can run the following command to sort the rows by object ID (and clump ID within each object), assuming they are respectively the first and second columns: $ awk '!/^#/' out_c.txt | sort -g -k1,1 -k2,2 ‘--sfmagnsigma=FLT’ Value to multiply with the median standard deviation (from a ‘MEDSTD’ keyword in the Sky standard deviation image) for estimating the surface brightness limit. Note that the surface brightness limit is only reported when a standard deviation image is read, in other words a column using it is requested (for example, ‘--sn’) or ‘--forcereadstd’ is called. This value is a per-pixel value, not per object/clump and is not found over an area or aperture, like the common $5\sigma$ values that are commonly reported as a measure of depth or the upper-limit measurements (see *note Quantifying measurement limits::). ‘--sfmagarea=FLT’ Area (in arc-seconds squared) to convert the per-pixel estimation of ‘--sfmagnsigma’ in the comments section of the output tables. Note that the surface brightness limit is only reported when a standard deviation image is read, in other words a column using it is requested (for example, ‘--sn’) or ‘--forcereadstd’ is called. Note that this is just a unit conversion using the World Coordinate System (WCS) information in the input's header. It does not actually do any measurements on this area. For random measurements on any area, please use the upper-limit columns of MakeCatalog (see the discussion on upper-limit measurements in *note Quantifying measurement limits::). ---------- Footnotes ---------- (1) The performance boost due to ‘--noclumpsort’ can only be felt when there are a huge number of objects. Therefore, by default the output is sorted to avoid miss-understandings or bugs in the user's scripts when the user forgets to sort the outputs.  File: gnuastro.info, Node: Match, Prev: MakeCatalog, Up: Data analysis 7.5 Match ========= Data can come come from different telescopes, filters, software and even different configurations for a single software. As a result, one of the primary things to do after generating catalogs from each of these sources (for example, with *note MakeCatalog::), is to find which sources in one catalog correspond to which in the other(s). In other words, to 'match' the two catalogs with each other. Gnuastro's Match program is in charge of such operations. The nearest objects in the two catalogs, within the given aperture, will be found and given as output. The aperture can be a circle or an ellipse with any orientation. * Menu: * Matching algorithms:: Different ways to find the match * Invoking astmatch:: Inputs, outputs and options of Match  File: gnuastro.info, Node: Matching algorithms, Next: Invoking astmatch, Prev: Match, Up: Match 7.5.1 Matching algorithms ------------------------- Matching involves two catalogs, let's call them catalog A (with N rows) and catalog B (with M rows). The most basic matching algorithm that immediately comes to mind is this: for each row in A (let's call it $A_i$), go over all the rows in B ($B_j$, where $0<j<M$) and calculate the distance $|B_j-A_i|$. If this distance is less than a certain acceptable distance threshold (or radius, or aperture), consider $A_i$ and $B_j$ as a match. This basic parsing algorithm is very computationally expensive: $N\times M$ distances have to measured, and calculating the distance requires a square root and power of 2: in 2 dimensions it would be $\sqrt{(B_{ix}-A_{ix})^2+(B_{iy}-A_{iy})^2}$. If an elliptical aperture is necessary, it can even get more complicated, see *note Defining an ellipse and ellipsoid::. Such operations are not simple, and will consume many cycles of your CPU! As a result, this basic algorithm will become terribly slow as your datasets grow in size. For example, when N or M exceed hundreds of thousands (which is common in the current days with datasets like the European Space Agency's Gaia mission). Therefore that basic parsing algorithm will take too much time and more efficient ways to _find the nearest neighbor_ need to be found. Gnuastro's Match currently has algorithms for finding the nearest neighbor: Sort-based In this algorithm, we will use a moving window over the sorted datasets: 1. Sort the two datasets by their first coordinate. Therefore $A_i<A_j$ (when $i<j$; only in first coordinate), and similarly, sort the elements of B based on the first coordinate. 2. Use the radial distance threshold to define the width of a moving interval over both A and B. Therefore, with a single parsing of both simultaneously, for each A-point, we can find all the elements in B that are sufficiently near to it (within the requested aperture). This method has some caveats: 1) It requires sorting, which can again be slow on large numbers. 2) It can only be done on a single CPU thread! So it cannot benefit from the modern CPUs with many threads. 3) There is no way to preserve intermediate information for future matches, for example, this can greatly help when one of the matched datasets is always the same. To use this sorting method in Match, use ‘--kdtree=disable’. k-d tree based The k-d tree concept is much more abstract, but powerful (addressing all the caveats of the sort-based method described above.). In short a k-d tree is a partitioning of a k-dimensional space ("k" is just a place-holder, so together with "d" for dimension, "k-d" means "any number of dimensions"!). The k-d tree of table A is another table with the same number of rows, but only two integer columns: the integers contain the row indexs (counting from zero) of the left and right "branch" (in the "tree") of that row. With a k-d tree we can find the nearest point with much fewer (statistically) checks, compared to always parsing from the top-down. For more on the k-d tree concept and Gnuastro's implementation, please see *note K-d tree::. When given two catalogs (like the command below), Gnuastro's Match will internally construct a k-d tree for catalog A (the first catalog given to it) and use the k-d tree of A, for finding the nearest B-point(s) to each A-point (this is done in parallel on all available CPU threads, unless you specify a certain number of threads to use with ‘--numthreads’, see *note Multi-threaded operations::) $ astmatch A.fits --ccol1=ra,dec B.fits --ccol2=RA,DEC \ --aperture=1/3600 However, optionally, you can also build the k-d tree of A and save it into a file, with a separate call to Match, like below $ astmatch A.fits --ccol1=ra,dec --kdtree=build \ --output=A-kdtree.fits This external k-d tree (‘A-kdtree.fits’) can be fed to Match later (to avoid having to reconstruct it every time you want to match a new catalog with A) like below for matching both ‘B.fits’ and ‘C.fits’ with ‘A.fits’. Note that the same ‘--kdtree’ option above, is now given the file name of the k-d tree, instead of ‘build’. $ astmatch A.fits --ccol1=ra,dec --kdtree=A-kdtree.fits \ B.fits --ccol2=RA,DEC --aperture=1/3600 \ --output=A-B.fits $ astmatch A.fits --ccol1=ra,dec --kdtree=A-kdtree.fits \ C.fits --ccol2=RA,DEC --aperture=1/3600 \ --output=A-C.fits Irrespective of how the k-d tree is made ready (by importing or by constructing internally), it will be used to find the nearest A-point to each B-point. The k-d tree is parsed independently (on different CPU threads) for each row of B. There is just one technical issue however: when there is no neighbor within the acceptable distance of the k-d tree, it is forced to parse all elements to confirm that there is no match! Therefore if one catalog only covers a small portion (in the coordinate space) of the other catalog, the k-d tree algorithm will be forced to parse the full k-d tree for the majority of points! This will dramatically decrease the running speed of Match. Therefore, Match first divides the range of the first input in all its dimensions into bins that have a width of the requested aperture (similar to a histogram), and will only do the k-d tree based search when the point in catalog B actually falls within a bin that has at least one element in A. Above, we described different ways of finding the $A_i$ that is nearest to each $B_j$. But this is not the whole matching process! Let's go ahead with a "basic" description of what happens next... You may be tempted to remove $A_i$ from the search of matches for $B_k$ (where $k>j$). Therefore, as you go down B (and more matches are found), you have to calculate less distances (there are fewer elements in A that remain to be checked). However, this will introduce an important bias: $A_i$ may actually be closer to $B_k$ than to $B_j$! But because $B_j$ happened to be before $B_k$ in your table, $A_i$ was removed from the potential search domain of $B_k$. The good match ($B_k$ with $A_i$ will therefore be lost, and replaced by a false match between $B_j$ and $A_i$! In a single-dimensional match, this bias depends on the sorting of your two datasets (leading to different matches if you shuffle your datasets). But it will get more complex as you add dimensionality. For example, catalogs derived from 2D images or 3D cubes, where you have 2 and 3 different coordinates for each point. To address this problem, in Gnuastro (the Match program, or the matching functions of the library) similar to above, we first parse over the elements of B. But we will not associate the first nearest-neighbor with a match! Instead, we will use an array (with the number of rows in A, let's call it "B-in-A") to keep the list of all nearest element(s) in B that match each A-point. Once all the points in B are parsed, each A-point in B-in-A will (possibly) have a sorted list of B-points (there may be multiple B-points that fall within the acceptable aperture of each A-point). In the previous example, the $i$ element (corresponding to $A_i$) of B-in-A will contain the following list of B-points: $B_j$ and $B_k$. A new array (with the number of points in B, let's call it A-in-B) is then used to find the final match. We parse over B-in-A (that was completed above), and from it extract the nearest B-point to each A-point ($B_k$ for $A_i$ in the example above). If this is the first A-point that is found for this B-point, then we put this A-point into A-in-B (in the example above, element $k$ is filled with $A_k$). If another A-point was previously found for this B-point, then the distance of the two A-points to that B-point are compared, and the A-point with the smaller distance is kept in A-in-B. This will give us the best match between the two catalogs, independent of any sorting issues. Both the B-in-A and A-in-B will also keep the distances, so distances are only measured once. In summary, here are the points to consider when selecting an algorithm, or the order of your inputs (for optimal speed, the match will be the same): • For larger datasets, the k-d tree based method (when running on all threads possible) is much more faster than the classical sort-based method. • The k-d tree is constructed for the first input table and the multi-threading is done on the rows of the second input table. The construction of a larger dataset's k-d tree will take longer, but multi-threading will work better when you have more rows. As a result, the optimal way to place your inputs is to give the smaller input table (with fewer rows) as the first argument (so its k-d tree is constructed), and the larger table as the second argument (so its rows are checked in parallel). • If you always need to match against one catalog (that is large!), the k-d tree construction itself can take a significant fraction of the running time. Therefore you can save its k-d tree into a file and simply give it to later calls, like the example given in the description of the k-d algorithm mentioned above.  File: gnuastro.info, Node: Invoking astmatch, Prev: Matching algorithms, Up: Match 7.5.2 Invoking Match -------------------- When given two catalogs, Match finds the rows that are nearest to each other within an input aperture. The executable name is ‘astmatch’ with the following general template $ astmatch [OPTION ...] input-1 input-2 One line examples: ## 1D wavelength match (within 5 angstroms) of the two inputs. ## The wavelengths are in the 5th and 10th columns respectively. $ astmatch --aperture=5e-10 --ccol1=5 --ccol2=10 in1.fits in2.txt ## Find the row that is closest to (RA,DEC) of (12.3456,6.7890) ## with a maximum distance of 1 arcseconds (1/3600 degrees). ## The coordinates can also be given in sexagesimal. $ astmatch input1.txt --ccol1=ra,dec --coord=12.3456,6.7890 \ --aperture=1/3600 ## Find matching rows of two catalogs with a circular aperture ## of width 2 (same unit as position columns: pixels in this case). $ astmatch input1.txt input2.fits --aperture=2 \ --ccol1=X,Y --ccol2=IMG_X,IMG_Y ## Similar to before, but the output is created by merging various ## columns from the two inputs: columns 1, RA, DEC from the first ## input, followed by all columns starting with `MAG' and the `BRG' ## column from second input and the 10th column from first input. $ astmatch input1.txt input2.fits --aperture=1/3600 \ --ccol1=ra,dec --ccol2=RAJ2000,DEJ2000 \ --outcols=a1,aRA,aDEC,b/^MAG/,bBRG,a10 ## Assuming both inputs have the same column metadata (same name ## and numeric type), the output will contain all the rows of the ## first input, appended with the non-matching rows of the second ## input (good when you need to merge multiple catalogs that ## may have matching items, which you do not want to repeat). $ astmatch input1.fits input2.fits --ccol1=RA,DEC --ccol2=RA,DEC \ --aperture=1/3600 --notmatched --outcols=_all ## Match the two catalogs within an elliptical aperture of 1 and 2 ## arc-seconds along RA and Dec respectively. $ astmatch --aperture=1/3600,2/3600 in1.fits in2.txt ## Match the RA and DEC columns of the first input with the RA_D ## and DEC_D columns of the second within a 0.5 arcseconds aperture. $ astmatch --ccol1=RA,DEC --ccol2=RA_D,DEC_D --aperture=0.5/3600 \ in1.fits in2.fits ## Match in 3D (RA, Dec and Wavelength). $ astmatch --ccol1=2,3,4 --ccol2=2,3,4 -a0.5/3600,0.5/3600,5e-10 \ in1.fits in2.txt Match will find the rows that are nearest to each other in two catalogs (given some coordinate columns). Alternatively, it can construct the k-d tree of one catalog to save in a FITS file for future matching of the same catalog with many others. To understand the inner working of Match and its algorithms, see *note Matching algorithms::. When matching, two catalogs are necessary for input. But for constructing a k-d tree, only a single catalog should be given. The input tables can be plain text tables or FITS tables, for more see *note Tables::. But other ways of feeding inputs area also supported: • The _first_ catalog can also come from the standard input (for example, a pipe that feeds the output of a previous command to Match, see *note Standard input::); • When you only want to match one point with another catalog, you can use the ‘--coord’ option to avoid creating a file for the _second_ input catalog. Match follows the same basic behavior of all Gnuastro programs as fully described in *note Common program behavior::. If the first input is a FITS file, the common ‘--hdu’ option (see *note Input output options::) should be used to identify the extension. When the second input is FITS, the extension must be specified with ‘--hdu2’. When ‘--quiet’ is not called, Match will print its various processing phases (including the number of matches found) in standard output (on the command-line). When matches are found, by default, two tables will be output (if in FITS format, as two HDUs). Each output table will contain the re-arranged rows of the respective input table. In other words, both tables will have the same number of rows, and row N in both corresponds to the 10th match between the two. If no matches are found, the columns of the output table(s) will have zero rows (with proper meta-data). The output format can be changed with the following options: • ‘--outcols’: The output will be a single table with rows chosen from either of the two inputs in any order. • ‘--notmatched’: The output tables will contain the rows that did not match between the two tables. If called with ‘--outcols’, the output will be a single table with all non-matched rows of both tables. • ‘--logasoutput’: The output will be a single table with the contents of the log file, see below. If no output file name is given with the ‘--output’ option, then automatic output *note Automatic output:: will be used to determine the output name(s). Depending on ‘--tableformat’ (see *note Input output options::), the output will be a (possibly multi-extension) FITS file or (possibly two) plain text file(s). Generally, giving a filename to ‘--output’ is recommended. When the ‘--log’ option is called (see *note Operating mode options::), and there was a match, Match will also create a file named ‘astmatch.fits’ (or ‘astmatch.txt’, depending on ‘--tableformat’, see *note Input output options::) in the directory it is run in. This log table will have three columns. The first and second columns show the matching row/record number (counting from 1) of the first and second input catalogs respectively. The third column is the distance between the two matched positions. The units of the distance are the same as the given coordinates (given the possible ellipticity, see description of ‘--aperture’ below). When ‘--logasoutput’ is called, no log file (with a fixed name) will be created. In this case, the output file (possibly given by the ‘--output’ option) will have the contents of this log file. *‘--log’ is not thread-safe*: As described above, when ‘--logasoutput’ is not called, the Log file has a fixed name for all calls to Match. Therefore if a separate log is requested in two simultaneous calls to Match in the same directory, Match will try to write to the same file. This will cause problems like unreasonable log file, undefined behavior, or a crash. Remember that ‘--log’ is mainly intended for debugging purposes, if you want the log file with a specific name, simply use ‘--logasoutput’ (which will also be faster, since no arranging of the input columns is necessary). ‘-H STR’ ‘--hdu2=STR’ The extension/HDU of the second input if it is a FITS file. When it is not a FITS file, this option's value is ignored. For the first input, the common option ‘--hdu’ must be used. ‘-k STR’ ‘--kdtree=STR’ Select the algorithm and/or the way to construct or import the k-d tree. A summary of the four acceptable strings for this option are described here for completeness. However, for a much more detailed discussion on Match's algorithms with examples, see *note Matching algorithms::. ‘internal’ Construct a k-d tree for the first input internally (within the same run of Match), and parallelize over the rows of the second to find the nearest points. This is the default algorithm/method used by Match (when this option is not called). ‘build’ Only construct a k-d tree of a single input and abort. The name of the k-d tree is value to ‘--output’. ‘CUSTOM-FITS-FILE’ Use the given FITS file as a k-d tree (that was previously constructed with Match itself) of the first input, and do not construct any k-d tree internally. The FITS file should have two columns with an unsigned 32-bit integer data type and a ‘KDTROOT’ keyword that contains the index of the root of the k-d tree. For more on Gnuastro's k-d tree format, see *note K-d tree::. ‘disable’ Do not use the k-d tree algorithm for finding the nearest neighbor, instead, use the sort-based method. ‘--kdtreehdu=STR’ The HDU of the FITS file, when a FITS file is given to the ‘--kdtree’ option that was described above. ‘--outcols=STR[,STR,[...]]’ Columns (from both inputs) to write into a single matched table output. The value to ‘--outcols’ must be a comma-separated list of column identifiers (number or name, see *note Selecting table columns::). The expected format depends on ‘--notmatched’ and explained below. By default (when ‘--nomatched’ is not called), the number of rows in the output will be equal to the number of matches. However, when ‘--notmatched’ is called, all the rows (from the requested columns) of the first input are placed in the output, and the not-matched rows of the second input are inserted afterwards (useful when you want to merge unique entries of multiple catalogs into one). Default (only matching rows) The first character of each string specifies the input catalog: ‘a’ for the first and ‘b’ for the second. The rest of the characters of the string will be directly used to identify the proper column(s) in the respective table. See *note Selecting table columns:: for how columns can be specified in Gnuastro. For example, the output of ‘--outcols=a1,bRA,bDEC’ will have three columns: the first column of the first input, along with the ‘RA’ and ‘DEC’ columns of the second input. If the string after ‘a’ or ‘b’ is ‘_all’, then all the columns of the respective input file will be written in the output. For example, the command below will print all the input columns from the first catalog along with the 5th column from the second: $ astmatch a.fits b.fits --outcols=a_all,b5 ‘_all’ can be used multiple times, possibly on both inputs. Tip: if an input's column is called ‘_all’ (an unlikely name!) and you do not want all the columns from that table the output, use its column number to avoid confusion. Another example is given in the one-line examples above. Compared to the default case (where two tables with all their columns) are saved separately, using this option is much faster: it will only read and re-arrange the necessary columns and it will write a single output table. Combined with regular expressions in large tables, this can be a very powerful and convenient way to merge various tables into one. When ‘--coord’ is given, no second catalog will be read. The second catalog will be created internally based on the values given to ‘--coord’. So column names are not defined and you can only request integer column numbers that are less than the number of coordinates given to ‘--coord’. For example, if you want to find the row matching RA of 1.2345 and Dec of 6.7890, then you should use ‘--coord=1.2345,6.7890’. But when using ‘--outcols’, you cannot give ‘bRA’, or ‘b25’. With ‘--notmatched’ Only the column names/numbers should be given (for example, ‘--outcols=RA,DEC,MAGNITUDE’). It is assumed that both input tables have the requested column(s) and that the numerical data types of each column in each input (with same name) is the same as the corresponding column in the other. Therefore if one input has a ‘MAGNITUDE’ column with a 32-bit floating point type, but the ‘MAGNITUDE’ column of the other is 64-bit floating point, Match will crash with an error. The metadata of the columns will come from the first input. As an example, let's assume ‘input1.txt’ and ‘input2.fits’ each have a different number of columns and rows. However, they both have the ‘RA’ (64-bit floating point), ‘DEC’ (64-bit floating point) and ‘MAGNITUDE’ (32-bit floating point) columns. If ‘input1.txt’ has 100 rows and ‘input2.fits’ has 300 rows (such that 50 of them match within 1 arcsec of the first), then the output of the command above will have $100+(300-50)=350$ rows and only three columns. Other columns in each catalog, which may be different, are ignored. $ astmatch input1.txt --ccol1=RA,DEC \ input2.fits --ccol2=RA,DEC \ --aperture=1/3600 \ --notmatched --outcols=RA,DEC,MAGNITUDE ‘-l’ ‘--logasoutput’ The output file will have the contents of the log file: indexes in the two catalogs that match with each other along with their distance, see description of the log file above. When this option is called, a separate log file will not be created and the output will not contain any of the input columns (either as two tables containing the re-arranged columns of each input, or a single table mixing columns), only their indices in the log format. ‘--notmatched’ Write the non-matching rows into the outputs, not the matched ones. By default, this will produce two output tables, that will not necessarily have the same number of rows. However, when called with ‘--outcols’, it is possible to import non-matching rows of the second into the first. See the description of ‘--outcols’ for more. ‘-c INT/STR[,INT/STR]’ ‘--ccol1=INT/STR[,INT/STR]’ The coordinate columns of the first input. The number of dimensions for the match is determined by the number of comma-separated values given to this option. The values can be the column number (counting from 1), exact column name or a regular expression. For more, see *note Selecting table columns::. See the one-line examples above for some usages of this option. ‘-C INT/STR[,INT/STR]’ ‘--ccol2=INT/STR[,INT/STR]’ The coordinate columns of the second input. See the example in ‘--ccol1’ for more. ‘-d FLT[,FLT]’ ‘--coord=FLT[,FLT]’ Manually specify the coordinates to match against the given catalog. With this option, Match will not look for a second input file/table and will directly use the coordinates given to this option. When the coordinates are RA and Dec, the comma-separated values can either be in degrees (a single number), or sexagesimal (‘_h_m_’ for RA, ‘_d_m_’ for Dec, or ‘_:_:_’ for both). When this option is called, the output changes in the following ways: 1) when ‘--outcols’ is specified, for the second input, it can only accept integer numbers that are less than the number of values given to this option, see description of that option for more. 2) By default (when ‘--outcols’ is not used), only the matching row of the first table will be output (a single file), not two separate files (one for each table). This option is good when you have a (large) catalog and only want to match a single coordinate to it (for example, to find the nearest catalog entry to your desired point). With this option, you can write the coordinates on the command-line and thus avoid the need to make a single-row file. ‘-a FLT[,FLT[,FLT]]’ ‘--aperture=FLT[,FLT[,FLT]]’ Parameters of the aperture for matching. The values given to this option can be fractions, for example, when the position columns are in units of degrees, ‘1/3600’ can be used to ask for one arc-second. The interpretation of the values depends on the requested dimensions (determined from ‘--ccol1’ and ‘--ccol2’) and how many values are given to this option. When multiple objects are found within the aperture, the match is defined as the nearest one. In a multi-dimensional dataset, when the aperture is a general ellipse or ellipsoid (and not a circle or sphere), the distance is calculated in the elliptical space along the major axis. For the defintion of this distance, see $r_{el}$ in *note Defining an ellipse and ellipsoid::. 1D match The aperture/interval can only take one value: half of the interval around each point (maximum distance from each point). 2D match In a 2D match, the aperture can be a circle, an ellipse aligned in the axes or an ellipse with a rotated major axis. To simply the usage, you can determine the shape based on the number of free parameters for each. 1 number for example, ‘--aperture=2’. The aperture will be a circle of the given radius. The value will be in the same units as the columns in ‘--ccol1’ and ‘--ccol2’). 2 numbers for example, ‘--aperture=3,4e-10’. The aperture will be an ellipse (if the two numbers are different) with the respective value along each dimension. The numbers are in units of the first and second axis. In the example above, the semi-axis value along the first axis will be 3 (in units of the first coordinate) and along the second axis will be $4\times10^{-10}$ (in units of the second coordinate). Such values can happen if you are comparing catalogs of a spectra for example. If more than one object exists in the aperture, the nearest will be found along the major axis as described in *note Defining an ellipse and ellipsoid::. 3 numbers for example, ‘--aperture=2,0.6,30’. The aperture will be an ellipse (if the second value is not 1). The first number is the semi-major axis, the second is the axis ratio and the third is the position angle (in degrees). If multiple matches are found within the ellipse, the distance (to find the nearest) is calculated along the major axis in the elliptical space, see *note Defining an ellipse and ellipsoid::. 3D match The aperture (matching volume) can be a sphere, an ellipsoid aligned on the three axes or a genenral ellipsoid rotated in any direction. To simplifythe usage, the shape can be determined based on the number of values given to this option. 1 number for example, ‘--aperture=3’. The matching volume will be a sphere of the given radius. The value is in the same units as the input coordinates. 3 numbers for example, ‘--aperture=4,5,6e-10’. The aperture will be a general ellipsoid with the respective extent along each dimension. The numbers must be in the same units as each axis. This is very similar to the two number case of 2D inputs. See there for more. 6 numbers for example, ‘--aperture=4,0.5,0.6,10,20,30’. The numbers represent the full general ellipsoid definition (in any orientation). For the definition of a general ellipsoid, see *note Defining an ellipse and ellipsoid::. The first number is the semi-major axis. The second and third are the two axis ratios. The last three are the three Euler angles in units of degrees in the ZXZ order as fully described in *note Defining an ellipse and ellipsoid::.  File: gnuastro.info, Node: Data modeling, Next: High-level calculations, Prev: Data analysis, Up: Top 8 Data modeling *************** In order to fully understand observations after initial analysis on the image, it is very important to compare them with the existing models to be able to further understand both the models and the data. The tools in this chapter create model galaxies and will provide 2D fittings to be able to understand the detections. * Menu: * MakeProfiles:: Making mock galaxies and stars.  File: gnuastro.info, Node: MakeProfiles, Prev: Data modeling, Up: Data modeling 8.1 MakeProfiles ================ MakeProfiles will create mock astronomical profiles from a catalog, either individually or together in one output image. In data analysis, making a mock image can act like a calibration tool, through which you can test how successfully your detection technique is able to detect a known set of objects. There are commonly two aspects to detecting: the detection of the fainter parts of bright objects (which in the case of galaxies fade into the noise very slowly) or the complete detection of an over-all faint object. Making mock galaxies is the most accurate (and idealistic) way these two aspects of a detection algorithm can be tested. You also need mock profiles in fitting known functional profiles with observations. MakeProfiles was initially built for extra galactic studies, so currently the only astronomical objects it can produce are stars and galaxies. We welcome the simulation of any other astronomical object. The general outline of the steps that MakeProfiles takes are the following: 1. Build the full profile out to its truncation radius in a possibly over-sampled array. 2. Multiply all the elements by a fixed constant so its total magnitude equals the desired total magnitude. 3. If ‘--individual’ is called, save the array for each profile to a FITS file. 4. If ‘--nomerged’ is not called, add the overlapping pixels of all the created profiles to the output image and abort. Using input values, MakeProfiles adds the World Coordinate System (WCS) headers of the FITS standard to all its outputs (except PSF images!). For a simple test on a set of mock galaxies in one image, there is no need for the third step or the WCS information. However in complicated simulations like weak lensing simulations, where each galaxy undergoes various types of individual transformations based on their position, those transformations can be applied to the different individual images with other programs. After all the transformations are applied, using the WCS information in each individual profile image, they can be merged into one output image for convolution and adding noise. * Menu: * Modeling basics:: Astronomical modeling basics. * If convolving afterwards:: Considerations for convolving later. * Profile magnitude:: Definition of total profile magnitude. * Invoking astmkprof:: Inputs and Options for MakeProfiles.  File: gnuastro.info, Node: Modeling basics, Next: If convolving afterwards, Prev: MakeProfiles, Up: MakeProfiles 8.1.1 Modeling basics --------------------- In the subsections below, first a review of some very basic information and concepts behind modeling a real astronomical image is given. You can skip this subsection if you are already sufficiently familiar with these concepts. * Menu: * Defining an ellipse and ellipsoid:: Definition of these important shapes. * PSF:: Radial profiles for the PSF. * Stars:: Making mock star profiles. * Galaxies:: Radial profiles for galaxies. * Sampling from a function:: Sample a function on a pixelated canvas. * Oversampling:: Oversampling the model.  File: gnuastro.info, Node: Defining an ellipse and ellipsoid, Next: PSF, Prev: Modeling basics, Up: Modeling basics 8.1.1.1 Defining an ellipse and ellipsoid ......................................... The PSF, see *note PSF::, and galaxy radial profiles are generally defined on an ellipse. Therefore, in this section we will start defining an ellipse on a pixelated 2D surface. Labeling the major axis of an ellipse $a$, and its minor axis with $b$, the _axis ratio_ is defined as: $q\equiv b/a$. The major axis of an ellipse can be aligned in any direction, therefore the angle of the major axis with respect to the horizontal axis of the image is defined to be the _position angle_ of the ellipse and in this book, we show it with $\theta$. Our aim is to put a radial profile of any functional form $f(r)$ over an ellipse. Hence we need to associate a radius/distance to every point in space. Let's define the radial distance $r_{el}$ as the distance on the major axis to the center of an ellipse which is located at $i_c$ and $j_c$ (in other words $r_{el}\equiv{a}$). We want to find $r_{el}$ of a point located at $(i,j)$ (in the image coordinate system) from the center of the ellipse with axis ratio $q$ and position angle $\theta$. First the coordinate system is rotated(1) by $\theta$ to get the new rotated coordinates of that point $(i_r,j_r)$: $$i_r(i,j)=+(i_c-i)\cos\theta+(j_c-j)\sin\theta$$ $$j_r(i,j)=-(i_c-i)\sin\theta+(j_c-j)\cos\theta$$ Recall that an ellipse is defined by $(i_r/a)^2+(j_r/b)^2=1$ and that we defined $r_{el}\equiv{a}$. Hence, multiplying all elements of the ellipse definition with $r_{el}^2$ we get the elliptical distance at this point point located: $r_{el}=\sqrt{i_r^2+(j_r/q)^2}$. To place the radial profiles explained below over an ellipse, $f(r_{el})$ is calculated based on the functional radial profile desired. An ellipse in 3D, or an ellipsoid (https://en.wikipedia.org/wiki/Ellipsoid), can be defined following similar principles as before. Labeling the major (largest) axis length as $a$, the second and third (in a right-handed coordinate system) axis lengths can be labeled as $b$ and $c$. Hence we have two axis ratios: $q_1\equiv{b/a}$ and $q_2\equiv{c/a}$. The orientation of the ellipsoid can be defined from the orientation of its major axis. There are many ways to define 3D orientation and order matters. So to be clear, here we use the ZXZ (or $Z_1X_2Z_3$) proper Euler angles (https://en.wikipedia.org/wiki/Euler_angles) to define the 3D orientation. In short, when a point is rotated in this order, we first rotate it around the Z axis (third axis) by $\alpha$, then about the (rotated) X axis by $\beta$ and finally about the (rotated) Z axis by $\gamma$. Following the discussion in *note Merging multiple warpings::, we can define the full rotation with the following matrix multiplication. However, here we are rotating the coordinates, not the point. Therefore, both the rotation angles and rotation order are reversed. We are also not using homogeneous coordinates (see *note Linear warping basics::) since we are not concerned with translation in this context: $$\left[\matrix{i_r\cr j_r\cr k_r}\right] = \left[\matrix{cos\gamma&sin\gamma&0\cr -sin\gamma&cos\gamma&0\cr 0&0&1}\right] \left[\matrix{1&0&0\cr 0&cos\beta&sin\beta\cr 0&-sin\beta&cos\beta }\right] \left[\matrix{cos\alpha&sin\alpha&0\cr -sin\alpha&cos\alpha&0\cr 0&0&1}\right] \left[\matrix{i_c-i\cr j_c-j\cr k_c-k}\right] $$ Recall that an ellipsoid can be characterized with $(i_r/a)^2+(j_r/b)^2+(k_r/c)^2=1$, so similar to before ($r_{el}\equiv{a}$), we can find the ellipsoidal radius at pixel $(i,j,k)$ as: $r_{el}=\sqrt{i_r^2+(j_r/q_1)^2+(k_r/q_2)^2}$. MakeProfiles builds the profile starting from the nearest element (pixel in an image) in the dataset to the profile center. The profile value is calculated for that central pixel using Monte Carlo integration, see *note Sampling from a function::. The next pixel is the next nearest neighbor to the central pixel as defined by $r_{el}$. This process goes on until the profile is fully built upto the truncation radius. This is done fairly efficiently using a breadth first parsing strategy(2) which is implemented through an ordered linked list. Using this approach, we build the profile by expanding the circumference. Not one more extra pixel has to be checked (the calculation of $r_{el}$ from above is not cheap in CPU terms). Another consequence of this strategy is that extending MakeProfiles to three dimensions becomes very simple: only the neighbors of each pixel have to be changed. Everything else after that (when the pixel index and its radial profile have entered the linked list) is the same, no matter the number of dimensions we are dealing with. ---------- Footnotes ---------- (1) Do not confuse the signs of $sin$ with the rotation matrix defined in *note Linear warping basics::. In that equation, the point is rotated, here the coordinates are rotated and the point is fixed. (2) <http://en.wikipedia.org/wiki/Breadth-first_search>  File: gnuastro.info, Node: PSF, Next: Stars, Prev: Defining an ellipse and ellipsoid, Up: Modeling basics 8.1.1.2 Point spread function ............................. Assume we have a 'point' source, or a source that is far smaller than the maximum resolution (a pixel). When we take an image of it, it will 'spread' over an area. To quantify that spread, we can define a 'function'. This is how the "point spread function" or the PSF of an image is defined. This 'spread' can have various causes, for example, in ground-based astronomy, due to the atmosphere. In practice we can never surpass the 'spread' due to the diffraction of the telescope aperture (even in Space!). Various other effects can also be quantified through a PSF. For example, the simple fact that we are sampling in a discrete space, namely the pixels, also produces a very small 'spread' in the image. Convolution is the mathematical process by which we can apply a 'spread' to an image, or in other words blur the image, see *note Convolution process::. The sum of pixels of an image should remain unchanged after convolution. Therefore, it is important that the sum of all the pixels of the PSF be unity. The PSF image also has to have an odd number of pixels on its sides so one pixel can be defined as the center. In MakeProfiles, the PSF can be set by the two methods explained below: Parametric functions A known mathematical function is used to make the PSF. In this case, only the parameters to define the functions are necessary and MakeProfiles will make a PSF based on the given parameters for each function. In both cases, the center of the profile has to be exactly in the middle of the central pixel of the PSF (which is automatically done by MakeProfiles). When talking about the PSF, usually, the full width at half maximum or FWHM is used as a scale of the width of the PSF. ‘Gaussian’ In the older papers, and to a lesser extent even today, some researchers use the 2D Gaussian function to approximate the PSF of ground based images. In its most general form, a Gaussian function can be written as: $$f(r)=a \exp \left( -(x-\mu)^2 \over 2\sigma^2 \right)+d$$ Since the center of the profile is pre-defined, $\mu$ and $d$ are constrained. $a$ can also be found because the function has to be normalized. So the only important parameter for MakeProfiles is the $\sigma$. In the Gaussian function we have this relation between the FWHM and $\sigma$: $$\rm{FWHM}_g=2\sqrt{2\ln{2}}\sigma \approx 2.35482\sigma$$ ‘Moffat’ The Gaussian profile is much sharper than the images taken from stars on photographic plates or CCDs. Therefore in 1969, Moffat proposed this functional form for the image of stars: $$f(r)=a \left[ 1+\left( r\over \alpha \right)^2 \right]^{-\beta}$$ Again, $a$ is constrained by the normalization, therefore two parameters define the shape of the Moffat function: $\alpha$ and $\beta$. The radial parameter is $\alpha$ which is related to the FWHM by $$\rm{FWHM}_m=2\alpha\sqrt{2^{1/\beta}-1}$$ Comparing with the PSF predicted from atmospheric turbulence theory with a Moffat function, Trujillo et al.(1) claim that $\beta$ should be 4.765. They also show how the Moffat PSF contains the Gaussian PSF as a limiting case when $\beta\to\infty$. An input FITS image An input image file can also be specified to be used as a PSF. If the sum of its pixels are not equal to 1, the pixels will be multiplied by a fraction so the sum does become 1. Gnuastro has tools to extract the non-parametric (extended) PSF of any image as a FITS file (assuming there are a sufficient number of stars in it), see *note Building the extended PSF::. This method is not perfect (will have noise if you do not have many stars), but it is the actual PSF of the data that is not forced into any parametric form. While the Gaussian is only dependent on the FWHM, the Moffat function is also dependent on $\beta$. Comparing these two functions with a fixed FWHM gives the following results: • Within the FWHM, the functions do not have significant differences. • For a fixed FWHM, as $\beta$ increases, the Moffat function becomes sharper. • The Gaussian function is much sharper than the Moffat functions, even when $\beta$ is large. ---------- Footnotes ---------- (1) Trujillo, I., J. A. L. Aguerri, J. Cepa, and C. M. Gutierrez (2001). "The effects of seeing on Sérsic profiles - II. The Moffat PSF". In: MNRAS 328, pp. 977--985.  File: gnuastro.info, Node: Stars, Next: Galaxies, Prev: PSF, Up: Modeling basics 8.1.1.3 Stars ............. In MakeProfiles, stars are generally considered to be a point source. This is usually the case for extra galactic studies, where nearby stars are also in the field. Since a star is only a point source, we assume that it only fills one pixel prior to convolution. In fact, exactly for this reason, in astronomical images the light profiles of stars are one of the best methods to understand the shape of the PSF and a very large fraction of scientific research is preformed by assuming the shapes of stars to be the PSF of the image.  File: gnuastro.info, Node: Galaxies, Next: Sampling from a function, Prev: Stars, Up: Modeling basics 8.1.1.4 Galaxies ................ Today, most practitioners agree that the flux of galaxies can be modeled with one or a few generalized de Vaucouleur's (or Sérsic) profiles. $$I(r) = I_e \exp \left ( -b_n \left[ \left( r \over r_e \right)^{1/n} -1 \right] \right )$$ Gérard de Vaucouleurs (1918-1995) was first to show in 1948 that this function resembles the galaxy light profiles, with the only difference that he held $n$ fixed to a value of 4. Twenty years later in 1968, J. L. Sérsic showed that $n$ can have a variety of values and does not necessarily need to be 4. This profile depends on the effective radius ($r_e$) which is defined as the radius which contains half of the profile's 2-dimensional integral to infinity (see *note Profile magnitude::). $I_e$ is the flux at the effective radius. The Sérsic index $n$ is used to define the concentration of the profile within $r_e$ and $b_n$ is a constant dependent on $n$. MacArthur et al.(1) show that for $n>0.35$, $b_n$ can be accurately approximated using this equation: $$b_n=2n - {1\over 3} + {4\over 405n} + {46\over 25515n^2} + {131\over 1148175n^3}-{2194697\over 30690717750n^4}$$ ---------- Footnotes ---------- (1) MacArthur, L. A., S. Courteau, and J. A. Holtzman (2003). "Structure of Disk-dominated Galaxies. I. Bulge/Disk Parameters, Simulations, and Secular Evolution". In: ApJ 582, pp. 689--722.  File: gnuastro.info, Node: Sampling from a function, Next: Oversampling, Prev: Galaxies, Up: Modeling basics 8.1.1.5 Sampling from a function ................................ A pixel is the ultimate level of accuracy to gather data, we cannot get any more accurate in one image, this is known as sampling in signal processing. However, the mathematical profiles which describe our models have infinite accuracy. Over a large fraction of the area of astrophysically interesting profiles (for example, galaxies or PSFs), the variation of the profile over the area of one pixel is not too significant. In such cases, the elliptical radius ($r_{el}$) of the center of the pixel can be assigned as the final value of the pixel, (see *note Defining an ellipse and ellipsoid::). As you approach their center, some galaxies become very sharp (their value significantly changes over one pixel's area). This sharpness increases with smaller effective radius and larger Sérsic values. Thus rendering the central value extremely inaccurate. The first method that comes to mind for solving this problem is integration. The functional form of the profile can be integrated over the pixel area in a 2D integration process. However, unfortunately numerical integration techniques also have their limitations and when such sharp profiles are needed they can become extremely inaccurate. The most accurate method of sampling a continuous profile on a discrete space is by choosing a large number of random points within the boundaries of the pixel and taking their average value (or Monte Carlo integration). This is also, generally speaking, what happens in practice with the photons on the pixel. The number of random points can be set with ‘--numrandom’. Unfortunately, repeating this Monte Carlo process would be extremely time and CPU consuming if it is to be applied to every pixel. In order to not loose too much accuracy, in MakeProfiles, the profile is built using both methods explained below. The building of the profile begins from its central pixel and continues (radially) outwards. Monte Carlo integration is first applied (which yields $F_r$), then the central pixel value ($F_c$) is calculated on the same pixel. If the fractional difference ($|F_r-F_c|/F_r$) is lower than a given tolerance level (specified with ‘--tolerance’) MakeProfiles will stop using Monte Carlo integration and only use the central pixel value. The ordering of the pixels in this inside-out construction is based on $r=\sqrt{(i_c-i)^2+(j_c-j)^2}$, not $r_{el}$, see *note Defining an ellipse and ellipsoid::. When the axis ratios are large (near one) this is fine. But when they are small and the object is highly elliptical, it might seem more reasonable to follow $r_{el}$ not $r$. The problem is that the gradient is stronger in pixels with smaller $r$ (and larger $r_{el}$) than those with smaller $r_{el}$. In other words, the gradient is strongest along the minor axis. So if the next pixel is chosen based on $r_{el}$, the tolerance level will be reached sooner and lots of pixels with large fractional differences will be missed. Monte Carlo integration uses a random number of points. Thus, every time you run it, by default, you will get a different distribution of points to sample within the pixel. In the case of large profiles, this will result in a slight difference of the pixels which use Monte Carlo integration each time MakeProfiles is run. To have a deterministic result, you have to fix the random number generator properties which is used to build the random distribution. This can be done by setting the ‘GSL_RNG_TYPE’ and ‘GSL_RNG_SEED’ environment variables and calling MakeProfiles with the ‘--envseed’ option. To learn more about the process of generating random numbers, see *note Generating random numbers::. The seed values are fixed for every profile: with ‘--envseed’, all the profiles have the same seed and without it, each will get a different seed using the system clock (which is accurate to within one microsecond). The same seed will be used to generate a random number for all the sub-pixel positions of all the profiles. So in the former, the sub-pixel points checked for all the pixels undergoing Monte carlo integration in all profiles will be identical. In other words, the sub-pixel points in the first (closest to the center) pixel of all the profiles will be identical with each other. All the second pixels studied for all the profiles will also receive an identical (different from the first pixel) set of sub-pixel points and so on. As long as the number of random points used is large enough or the profiles are not identical, this should not cause any systematic bias.  File: gnuastro.info, Node: Oversampling, Prev: Sampling from a function, Up: Modeling basics 8.1.1.6 Oversampling .................... The steps explained in *note Sampling from a function:: do give an accurate representation of a profile prior to convolution. However, in an actual observation, the image is first convolved with or blurred by the atmospheric and instrument PSF in a continuous space and then it is sampled on the discrete pixels of the camera. In order to more accurately simulate this process, the unconvolved image and the PSF are created on a finer pixel grid. In other words, the output image is a certain odd-integer multiple of the desired size, we can call this 'oversampling'. The user can specify this multiple as a command-line option. The reason this has to be an odd number is that the PSF has to be centered on the center of its image. An image with an even number of pixels on each side does not have a central pixel. The image can then be convolved with the PSF (which should also be oversampled on the same scale). Finally, image can be sub-sampled to get to the initial desired pixel size of the output image. After this, mock noise can be added as explained in the next section. This is because unlike the PSF, the noise occurs in each output pixel, not on a continuous space like all the prior steps.  File: gnuastro.info, Node: If convolving afterwards, Next: Profile magnitude, Prev: Modeling basics, Up: MakeProfiles 8.1.2 If convolving afterwards ------------------------------ In case you want to convolve the image later with a given point spread function, make sure to use a larger image size. After convolution, the profiles become larger and a profile that is normally completely outside of the image might fall within it. On one axis, if you want your final (convolved) image to be $m$ pixels and your PSF is $2n+1$ pixels wide, then when calling MakeProfiles, set the axis size to $m+2n$, not $m$. You also have to shift all the pixel positions of the profile centers on the that axis by $n$ pixels to the positive. After convolution, you can crop the outer $n$ pixels with the section crop box specification of Crop: ‘--section=n+1:*-n,n+1:*-n’ (according to the FITS standard, counting is from 1 so we use ‘n+1’) assuming your PSF is a square, see *note Crop section syntax::. This will also remove all discrete Fourier transform artifacts (blurred sides) from the final image. To facilitate this shift, MakeProfiles has the options ‘--xshift’, ‘--yshift’ and ‘--prepforconv’, see *note Invoking astmkprof::.  File: gnuastro.info, Node: Profile magnitude, Next: Invoking astmkprof, Prev: If convolving afterwards, Up: MakeProfiles 8.1.3 Profile magnitude ----------------------- To find the profile's total magnitude, (see *note Brightness flux magnitude::), it is customary to use the 2D integration of the flux to infinity. However, in MakeProfiles we do not follow this idealistic approach and apply a more realistic method to find the total magnitude: the sum of all the pixels belonging to a profile within its predefined truncation radius. Note that if the truncation radius is not large enough, this can be significantly different from the total integrated light to infinity. An integration to infinity is not a realistic condition because no galaxy extends indefinitely (important for high Sérsic index profiles), pixelation can also cause a significant difference between the actual total pixel sum value of the profile and that of integration to infinity, especially in small and high Sérsic index profiles. To be safe, you can specify a large enough truncation radius for such compact high Sérsic index profiles. If oversampling is used then the pixel value is calculated using the over-sampled image, see *note Oversampling:: which is much more accurate. The profile is first built in an array completely bounding it with a normalization constant of unity (see *note Galaxies::). Taking $V$ to be the desired pixel value and $S$ to be the sum of the pixels in the created profile, every pixel is then multiplied by $V/S$ so the sum is exactly $V$. If the ‘--individual’ option is called, this same array is written to a FITS file. If not, only the overlapping pixels of this array and the output image are kept and added to the output array.  File: gnuastro.info, Node: Invoking astmkprof, Prev: Profile magnitude, Up: MakeProfiles 8.1.4 Invoking MakeProfiles --------------------------- MakeProfiles will make any number of profiles specified in a catalog either individually or in one image. The executable name is ‘astmkprof’ with the following general template $ astmkprof [OPTION ...] [Catalog] One line examples: ## Make an image with profiles in catalog.txt (with default size): $ astmkprof catalog.txt ## Make the profiles in catalog.txt over image.fits: $ astmkprof --background=image.fits catalog.txt ## Make a Moffat PSF with FWHM 3pix, beta=2.8, truncation=5 $ astmkprof --kernel=moffat,3,2.8,5 --oversample=1 ## Make profiles in catalog, using RA and Dec in the given column: $ astmkprof --ccol=RA_CENTER --ccol=DEC_CENTER --mode=wcs catalog.txt ## Make a 1500x1500 merged image (oversampled 500x500) image along ## with an individual image for all the profiles in catalog: $ astmkprof --individual --oversample 3 --mergedsize=500,500 cat.txt The parameters of the mock profiles can either be given through a catalog (which stores the parameters of many mock profiles, see *note MakeProfiles catalog::), or the ‘--kernel’ option (see *note MakeProfiles output dataset::). The catalog can be in the FITS ASCII, FITS binary format, or plain text formats (see *note Tables::). A plain text catalog can also be provided using the Standard input (see *note Standard input::). The columns related to each parameter can be determined both by number, or by match/search criteria using the column names, units, or comments, with the options ending in ‘col’, see below. Without any file given to the ‘--background’ option, MakeProfiles will make a zero-valued image and build the profiles on that (its size and main WCS parameters can also be defined through the options described in *note MakeProfiles output dataset::). Besides the main/merged image containing all the profiles in the catalog, it is also possible to build individual images for each profile (only enclosing one full profile to its truncation radius) with the ‘--individual’ option. If an image is given to the ‘--background’ option, the pixels of that image are used as the background value for every pixel hence flux value of each profile pixel will be added to the pixel in that background value. You can disable this with the ‘--clearcanvas’ option (which will initialize the background to zero-valued pixels and build profiles over that). With the ‘--background’ option, the values to all options relating to the "canvas" (output size and WCS) will be ignored if specified: ‘--oversample’, ‘--mergedsize’, ‘--prepforconv’, ‘--crpix’, ‘--crval’, ‘--cdelt’, ‘--cdelt’, ‘--pc’, ‘cunit’ and ‘ctype’. The sections below discuss the options specific to MakeProfiles based on context: the input catalog settings which can have many rows for different profiles are discussed in *note MakeProfiles catalog::, in *note MakeProfiles profile settings::, we discuss how you can set general profile settings (that are the same for all the profiles in the catalog). Finally *note MakeProfiles output dataset:: and *note MakeProfiles log file:: discuss the outputs of MakeProfiles and how you can configure them. Besides these, MakeProfiles also supports all the common Gnuastro program options that are discussed in *note Common options::, so please flip through them is well for a more comfortable usage. When building 3D profiles, there are more degrees of freedom. Hence, more columns are necessary and all the values related to dimensions (for example, size of dataset in each dimension and the WCS properties) must also have 3 values. To allow having an independent set of default values for creating 3D profiles, MakeProfiles also installs a ‘astmkprof-3d.conf’ configuration file (see *note Configuration files::). You can use this for default 3D profile values. For example, if you installed Gnuastro with the prefix ‘/usr/local’ (the default location, see *note Installation directory::), you can benefit from this configuration file by running MakeProfiles like the example below. As with all configuration files, if you want to customize a given option, call it before the configuration file. $ astmkprof --config=/usr/local/etc/astmkprof-3d.conf catalog.txt To further simplify the process, you can define a shell alias in any startup file (for example, ‘~/.bashrc’, see *note Installation directory::). Assuming that you installed Gnuastro in ‘/usr/local’, you can add this line to the startup file (you may put it all in one line, it is broken into two lines here for fitting within page limits). alias astmkprof-3d="astmkprof --config=/usr/local/etc/astmkprof-3d.conf" Using this alias, you can call MakeProfiles with the name ‘astmkprof-3d’ (instead of ‘astmkprof’). It will automatically load the 3D specific configuration file first, and then parse any other arguments, options or configuration files. You can change the default values in this 3D configuration file by calling them on the command-line as you do with ‘astmkprof’(1). Please see *note Sufi simulates a detection:: for a very complete tutorial explaining how one could use MakeProfiles in conjunction with other Gnuastro's programs to make a complete simulated image of a mock galaxy. * Menu: * MakeProfiles catalog:: Required catalog properties. * MakeProfiles profile settings:: Configuration parameters for all profiles. * MakeProfiles output dataset:: The canvas/dataset to build profiles over. * MakeProfiles log file:: A description of the optional log file. ---------- Footnotes ---------- (1) Recall that for single-invocation options, the last command-line invocation takes precedence over all previous invocations (including those in the 3D configuration file). See the description of ‘--config’ in *note Operating mode options::.  File: gnuastro.info, Node: MakeProfiles catalog, Next: MakeProfiles profile settings, Prev: Invoking astmkprof, Up: Invoking astmkprof 8.1.4.1 MakeProfiles catalog ............................ The catalog containing information about each profile can be in the FITS ASCII, FITS binary, or plain text formats (see *note Tables::). The latter can also be provided using standard input (see *note Standard input::). Its columns can be ordered in any desired manner. You can specify which columns belong to which parameters using the set of options discussed below. For example, through the ‘--rcol’ and ‘--tcol’ options, you can specify the column that contains the radial parameter for each profile and its truncation respectively. See *note Selecting table columns:: for a thorough discussion on the values to these options. The value for the profile center in the catalog (the ‘--ccol’ option) can be a floating point number so the profile center can be on any sub-pixel position. Note that pixel positions in the FITS standard start from 1 and an integer is the pixel center. So a 2D image actually starts from the position (0.5, 0.5), which is the bottom-left corner of the first pixel. When a ‘--background’ image with WCS information is provided, or you specify the WCS parameters with the respective options(1), you may also use RA and Dec to identify the center of each profile (see the ‘--mode’ option below). In MakeProfiles, profile centers do not have to be in (overlap with) the final image. Even if only one pixel of the profile within the truncation radius overlaps with the final image size, the profile is built and included in the final image. Profiles that are completely out of the image will not be created (unless you explicitly ask for it with the ‘--individual’ option). You can use the output log file (created with ‘--log’ to see which profiles were within the image, see *note Common options::. If PSF profiles (Moffat or Gaussian, see *note PSF::) are in the catalog and the profiles are to be built in one image (when ‘--individual’ is not used), it is assumed they are the PSF(s) you want to convolve your created image with. So by default, they will not be built in the output image but as separate files. The sum of pixels of these separate files will also be set to unity (1) so you are ready to convolve, see *note Convolution process::. As a summary, the position and magnitude of PSF profile will be ignored. This behavior can be disabled with the ‘--psfinimg’ option. If you want to create all the profiles separately (with ‘--individual’) and you want the sum of the PSF profile pixels to be unity, you have to set their magnitudes in the catalog to the zero point magnitude and be sure that the central positions of the profiles do not have any fractional part (the PSF center has to be in the center of the pixel). The list of options directly related to the input catalog columns is shown below. ‘--ccol=STR/INT’ Center coordinate column for each dimension. This option must be called two times to define the center coordinates in an image. For example, ‘--ccol=RA’ and ‘--ccol=DEC’ (along with ‘--mode=wcs’) will inform MakeProfiles to look into the catalog columns named ‘RA’ and ‘DEC’ for the Right Ascension and Declination of the profile centers. ‘--fcol=INT/STR’ The functional form of the profile with one of the values below depending on the desired profile. The column can contain either the numeric codes (for example, '‘1’') or string characters (for example, '‘sersic’'). The numeric codes are easier to use in scripts which generate catalogs with hundreds or thousands of profiles. The string format can be easier when the catalog is to be written/checked by hand/eye before running MakeProfiles. It is much more readable and provides a level of documentation. All Gnuastro's recognized table formats (see *note Recognized table formats::) accept string type columns. To have string columns in a plain text table/catalog, see *note Gnuastro text table format::. • Sérsic profile with '‘sersic’' or '‘1’'. • Moffat profile with '‘moffat’' or '‘2’'. • Gaussian profile with '‘gaussian’' or '‘3’'. • Point source with '‘point’' or '‘4’'. • Flat profile with '‘flat’' or '‘5’'. • Circumference profile with '‘circum’' or '‘6’'. A fixed value will be used for all pixels less than or equal to the truncation radius ($r_t$) and greater than $r_t-w$ ($w$ is the value to the ‘--circumwidth’). • Radial distance profile with '‘distance’' or '‘7’'. At the lowest level, each pixel only has an elliptical radial distance given the profile's shape and orientation (see *note Defining an ellipse and ellipsoid::). When this profile is chosen, the pixel's elliptical radial distance from the profile center is written as its value. For this profile, the value in the magnitude column (‘--mcol’) will be ignored. You can use this for checks or as a first approximation to define your own higher-level radial function. In the latter case, just note that the central values are going to be incorrect (see *note Sampling from a function::). • Custom radial profile with '‘custom-prof’' or '‘8’'. The values to use for each radial interval should be in the table given to ‘--customtable’. By default, once the profile is built with the given values, it will be scaled to have a total magnitude that you have requested in the magnitude column of the profile (in ‘--mcol’). If you want the raw values in the 2D profile (to ignore the magnitude column), use ‘--mcolnocustprof’. For more, see the description of ‘--customtable’ in *note MakeProfiles profile settings::. • Azimuthal angle profile with '‘azimuth’' or '‘9’'. Every pixel within the truncation radius will be given its azimuthal angle (in degrees, from 0 to 360) from the major axis. In combination with the radial distance profile, you can now create complex features in polar coordinates, such as tidal tails or tidal shocks (using the Arithmetic program to mix the radius and azimuthal angle through a function to create your desired features). • Custom image with '‘custom-img’' or '‘10’'. The image(s) to use should be given to the ‘--customimg’ option (which can be called multiple times for multiple images). To identify which one of the images (given to ‘--customimg’) should be used, you should specify their counter in the "radius" column below. For more, see the description of ‘custom-img’ in *note MakeProfiles profile settings::. ‘--rcol=STR/INT’ The radius parameter of the profiles. Effective radius ($r_e$) if Sérsic, FWHM if Moffat or Gaussian. For a custom image profile, this option is not interpreted as a radius, but as a counter (identifying which one of the images given to ‘--customimg’ should be used for each row). ‘--ncol=STR/INT’ The Sérsic index ($n$) or Moffat $\beta$. ‘--pcol=STR/INT’ The position angle (in degrees) of the profiles relative to the first FITS axis (horizontal when viewed in SAO DS9). When building a 3D profile, this is the first Euler angle: first rotation of the ellipsoid major axis from the first FITS axis (rotating about the third axis). See *note Defining an ellipse and ellipsoid::. ‘--p2col=STR/INT’ Second Euler angle (in degrees) when building a 3D ellipsoid. This is the second rotation of the ellipsoid major axis (following ‘--pcol’) about the (rotated) X axis. See *note Defining an ellipse and ellipsoid::. This column is ignored when building a 2D profile. ‘--p3col=STR/INT’ Third Euler angle (in degrees) when building a 3D ellipsoid. This is the third rotation of the ellipsoid major axis (following ‘--pcol’ and ‘--p2col’) about the (rotated) Z axis. See *note Defining an ellipse and ellipsoid::. This column is ignored when building a 2D profile. ‘--qcol=STR/INT’ The axis ratio of the profiles (minor axis divided by the major axis in a 2D ellipse). When building a 3D ellipse, this is the ratio of the major axis to the semi-axis length of the second dimension (in a right-handed coordinate system). See $q1$ in *note Defining an ellipse and ellipsoid::. ‘--q2col=STR/INT’ The ratio of the ellipsoid major axis to the third semi-axis length (in a right-handed coordinate system) of a 3D ellipsoid. See $q1$ in *note Defining an ellipse and ellipsoid::. This column is ignored when building a 2D profile. ‘--mcol=STR/INT’ The total pixelated magnitude of the profile within the truncation radius, see *note Profile magnitude::. ‘--tcol=STR/INT’ The truncation radius of this profile. By default it is in units of the radial parameter of the profile (the value in the ‘--rcol’ of the catalog). If ‘--tunitinp’ is given, this value is interpreted in units of pixels (prior to oversampling) irrespective of the profile. ---------- Footnotes ---------- (1) The options to set the WCS are the following: ‘--crpix’, ‘--crval’, ‘--cdelt’, ‘--cdelt’, ‘--pc’, ‘cunit’ and ‘ctype’. Just recall that these options are only used if ‘--background’ is not given: if the image you give to ‘--background’ does not have WCS, these options will not be used and you cannot use WCS-mode coordinates like RA or Dec.  File: gnuastro.info, Node: MakeProfiles profile settings, Next: MakeProfiles output dataset, Prev: MakeProfiles catalog, Up: Invoking astmkprof 8.1.4.2 MakeProfiles profile settings ..................................... The profile parameters that differ between each created profile are specified through the columns in the input catalog and described in *note MakeProfiles catalog::. Besides those there are general settings for some profiles that do not differ between one profile and another, they are a property of the general process. For example, how many random points to use in the monte-carlo integration, this value is fixed for all the profiles. The options described in this section are for configuring such properties. ‘--mode=STR’ Interpret the center position columns (‘--ccol’ in *note MakeProfiles catalog::) in image or WCS coordinates. This option thus accepts only two values: ‘img’ and ‘wcs’. It is mandatory when a catalog is being used as input. ‘-r’ ‘--numrandom’ The number of random points used in the central regions of the profile, see *note Sampling from a function::. ‘-e’ ‘--envseed’ Use the value to the ‘GSL_RNG_SEED’ environment variable to generate the random Monte Carlo sampling distribution, see *note Sampling from a function:: and *note Generating random numbers::. ‘-t FLT’ ‘--tolerance=FLT’ The tolerance to switch from Monte Carlo integration to the central pixel value, see *note Sampling from a function::. ‘-p’ ‘--tunitinp’ The truncation column of the catalog is in units of pixels. By default, the truncation column is considered to be in units of the radial parameters of the profile (‘--rcol’). Read it as 't-unit-in-p' for 'truncation unit in pixels'. ‘-f’ ‘--mforflatpix’ When making fixed value profiles ("flat", "circumference" or "point" profiles, see '‘--fcol’'), do not use the value in the column specified by '‘--mcol’' as the magnitude. Instead use it as the exact value that all the pixels of these profiles should have. This option is irrelevant for other types of profiles. This option is very useful for creating masks, or labeled regions in an image. Any integer, or floating point value can used in this column with this option, including ‘NaN’ (or '‘nan’', or '‘NAN’', case is irrelevant), and infinities (‘inf’, ‘-inf’, or ‘+inf’). For example, with this option if you set the value in the magnitude column (‘--mcol’) to ‘NaN’, you can create an elliptical or circular mask over an image (which can be given as the argument), see *note Blank pixels::. Another useful application of this option is to create labeled elliptical or circular apertures in an image. To do this, set the value in the magnitude column to the label you want for this profile. This labeled image can then be used in combination with NoiseChisel's output (see *note NoiseChisel output::) to do aperture photometry with MakeCatalog (see *note MakeCatalog::). Alternatively, if you want to mark regions of the image (for example, with an elliptical circumference) and you do not want to use NaN values (as explained above) for some technical reason, you can get the minimum or maximum value in the image (1) using Arithmetic (see *note Arithmetic::), then use that value in the magnitude column along with this option for all the profiles. Please note that when using MakeProfiles on an already existing image, you have to set '‘--oversample=1’'. Otherwise all the profiles will be scaled up based on the oversampling scale in your configuration files (see *note Configuration files::) unless you have accounted for oversampling in your catalog. ‘--mcolissum’ The value given in the "magnitude" column (specified by ‘--mcol’, see *note MakeProfiles catalog::) must be interpreted as total sum of pixel values, not magnitude (which is measured from the total sum and zero point, see *note Brightness flux magnitude::). When this option is called, the zero point magnitude (value to the ‘--zeropoint’ option) is ignored and the given value must have the same units as the input dataset's pixels. Recall that the total profile magnitude that is specified with in the ‘--mcol’ column of the input catalog is not an integration to infinity, but the actual sum of pixels in the profile (until the desired truncation radius). See *note Profile magnitude:: for more on this point. ‘--mcolnocustprof’ Do not touch (re-scale) the custom profile that should be inserted in ‘custom-prof’ profile (see the description of ‘--fcol’ in *note MakeProfiles catalog:: or the description of ‘--customtable’ below). By default, MakeProfiles will scale (multiply) the custom image's pixels to have the desired magnitude (or sum of pixels if ‘--mcolissum’ is called) in that row. ‘--mcolnocustimg’ Do not touch (re-scale) the custom image that should be inserted in ‘custom-img’ profile (see the description of ‘--fcol’ in *note MakeProfiles catalog::). By default, MakeProfiles will scale (multiply) the custom image's pixels to have the desired magnitude (or sum of pixels if ‘--mcolissum’ is called) in that row. ‘--magatpeak’ The magnitude column in the catalog (see *note MakeProfiles catalog::) will be used to set the value only for the profile's peak (maximum) pixel, not the full profile. Note that this is the flux of the profile's peak (maximum) pixel in the final output of MakeProfiles. So beware of the oversampling, see *note Oversampling::. This option can be useful if you want to check a mock profile's total magnitude at various truncation radii. Without this option, no matter what the truncation radius is, the total magnitude will be the same as that given in the catalog. But with this option, the total magnitude will become brighter as you increase the truncation radius. In sharper profiles, sometimes the accuracy of measuring the peak profile flux is more than the overall object sum or magnitude. In such cases, with this option, the final profile will be built such that its peak has the given magnitude, not the total profile. *CAUTION:* If you want to use this option for comparing with observations, please note that MakeProfiles does not do convolution. Unless you have deconvolved your data, your images are convolved with the instrument and atmospheric PSF, see *note PSF::. Particularly in sharper profiles, the flux in the peak pixel is strongly decreased after convolution. Also note that in such cases, besides deconvolution, you will have to set ‘--oversample=1’ otherwise after resampling your profile with Warp (see *note Warp::), the peak flux will be different. ‘--customtable FITS/TXT’ The filename of the table to use in the custom radial profiles (see description of ‘--fcol’ in *note MakeProfiles catalog::. This can be a plain-text table, or FITS table, see *note Recognized table formats::, if it is a FITS table, you can use ‘--customtablehdu’ to specify which HDU should be used (described below). A custom radial profile can have any value you want for a given radial profile (including NaN/blank values). Each interval is defined by its minimum (inclusive) and maximum (exclusive) radius, when a pixel center falls within a radius interval, the value specified for that interval will be used. If a pixel is not in the given intervals, a value of 0.0 will be used for that pixel. The table should have 3 columns as shown below. If the intervals are contiguous (the maximum value of the previous interval is equal to the minimum value of an interval) and the intervals all have the same size (difference between minimum and maximum values) the creation of these profiles will be fast. However, if the intervals are not sorted and contiguous, MakeProfiles will parse the intervals from the top of the table and use the first interval that contains the pixel center (this may slow it down). Column 1: The interval's minimum radius. Column 2: The interval's maximum radius. Column 3: The value to be used for pixels within the given interval (including NaN/blank). Gnuastro's column arithmetic in the Table program has the ‘sorted-to-interval’ operator that will generate the first two columns from a single column (your radial profile). See the description of that operator in *note Column arithmetic:: and the example below. By default, once a 2D image is constructed for the radial profile, it will be scaled such that its total magnitude corresponds to the value in the magnitude column (‘--mcol’) of the main input catalog. If you want to disable the scaling and use the raw values in your custom profile (in other words: you want to ignore the magnitude column) you need to call ‘--mcolnocustprof’ (see above). In the example below, we'll start with a certain radial profile, and use this option to build its 2D representation in an image (recall that you can build radial profiles with *note Generate radial profile::). But first, we will need to use the ‘sorted-to-interval’ to build the necessary input format (see *note Column arithmetic::). $ cat radial.txt # Column 1: RADIUS [pix ,f32,] Radial distance # Column 2: MEAN [input-units,f32,] Mean of values. 0.0 1.00000 1.0 0.50184 1.4 0.37121 2.0 0.26414 2.2 0.23427 2.8 0.17868 3.0 0.16627 3.1 0.15567 3.6 0.13132 4.0 0.11404 ## Convert the radius in each row to an interval $ asttable radial.txt --output=interval.fits \ -c'arith RADIUS sorted-to-interval',MEAN ## Inspect the table containing intervals $ asttable interval.fits -ffixed -0.500000 0.500000 1.000000 0.500000 1.200000 0.501840 1.200000 1.700000 0.371210 1.700000 2.100000 0.264140 2.100000 2.500000 0.234270 2.500000 2.900000 0.178680 2.900000 3.050000 0.166270 3.050000 3.350000 0.155670 3.350000 3.800000 0.131320 3.800000 4.200000 0.114040 ## Build the 2D image of the profile from the interval. $ echo "1 7 7 8 10 2.5 0 1 1 2" \ | astmkprof --mergedsize=13,13 --oversample=1 \ --customtable=interval.fits \ --output=image.fits ## View the created FITS image. $ astscript-fits-view image.fits --ds9scale=minmax Recall that if you want your image pixels to have the same values as the ‘MEAN’ column in your profile, you should run MakeProfiles with ‘--mcolnocustprof’. In case you want to build the profile using *note Generate radial profile::, be sure to use the ‘--oversample’ option of ‘astscript-radial-profile’. The higher the oversampling, the better your result will be. For example you can run the following script to see the effect (also see bug 65106 (https://savannah.gnu.org/bugs/?65106)). But don't take the oversampling too high: both the radial profile script and MakeProfiles will become slower and the precision of your results will decrease. #!/bin/bash # Function to avoid repeating code: first generate a radial profile # with a certain oversampling, then build a 2D profile from it): # The first argument is the oversampling, the second is the suffix. gen_rad_make_2dprf () { # Generate the radial profile radraw=$bdir/radial-profile-$2.fits astscript-radial-profile $prof -o$radraw \ --oversample=$1 \ --zeroisnotblank # Generate the custom table format custraw=$bdir/customtable-$2.fits asttable $radraw --output=interval.fits \ -c'arith RADIUS sorted-to-interval',MEAN \ -o$custraw # Build the 2D profile. prof2draw=$bdir/prof2d-$2.fits echo "1 $xc $yc 8 30 0 0 1 0 1" \ | astmkprof --customtable=$custraw \ --mergedsize=$xw,$yw \ --output=$prof2draw \ --mcolnocustprof \ --oversample=1 \ --clearcanvas \ --mode=img } # Directory to hold built files bdir=build if ! [ -d $bdir ]; then mkdir $bdir; fi # Build a Gaussian profile in the center of an image to start with. prof=$bdir/prof.fits astmkprof --kernel=gaussian,2,5 -o$prof # Find the center pixel of the image xw=$(astfits $prof --keyvalue=NAXIS1 --quiet) yw=$(astfits $prof --keyvalue=NAXIS2 --quiet) xc=$(echo $xw | awk '{print int($1/2)+1}') yc=$(echo $yw| awk '{print int($1/2)+1}') # Generate two 2D radial profiles, one with an oversampling of 1 # and another with an oversampling of 5. gen_rad_make_2dprf 1 "raw" gen_rad_make_2dprf 5 "oversample" # View the two images beside each other: astscript-fits-view $bdir/prof2d-raw.fits \ $bdir/prof2d-oversample.fits ‘--customtablehdu INT/STR’ The HDU/extension in the FITS file given to ‘--customtable’. ‘--customimg=STR[,STR]’ A custom FITS image that should be used for the ‘custom-img’ profiles (see the description of ‘--fcol’ in *note MakeProfiles catalog::). Multiple files can be given to this option (separated by a comma), and this option can be called multiple times itself (useful when many custom image profiles should be added). If the HDU of the images are different, you can use ‘--customimghdu’ (described below). Through the "radius" column, MakeProfiles will know which one of the images given to this option should be used in each row. For example, let's assume your input catalog (‘cat.fits’) has the following contents (output of first command below), and you call MakeProfiles like the second command below to insert four profiles into the background ‘back.fits’ image. The first profile below is Sersic (with an ‘--fcol’, or 4-th column, code of ‘1’). So MakeProfiles builds the pixels of the first profile, and all column values are meaningful. However, the second, third and fourth inserted objects are custom images (with an ‘--fcol’ code of ‘10’). For the custom image profiles, you see that the radius column has values of ‘1’ or ‘2’. This tells MakeProfiles to use the first image given to ‘--customimg’ (or ‘gal-1.fits’) for the second and fourth inserted objects. The second image given to ‘--customimage’ (or ‘gal-2.fits’) will be used for the third inserted object. Finally, all three custom image profiles have different magnitudes, and the values in ‘--ncol’, ‘--pcol’, ‘--qcol’ and ‘--tcol’ are ignored. $ cat cat.fits 1 53.15506 -27.785165 1 20 1 20 0.6 25 5 2 53.15602 -27.777887 10 1 0 0 0 22 0 3 53.16440 -27.775876 10 2 0 0 0 24 0 4 53.16849 -27.787406 10 1 0 0 0 23 0 $ astmkprof cat.fits --mode=wcs --zeropoint=25.68 \ --background=back.fits --output=out.fits \ --customimg=gal-1.fits --customimg=gal-2.fits ‘--customimghdu=INT/STR’ The HDU(s) of the images given to ‘--customimghdu’. If this option is only called once, but ‘--customimg’ is called many times, MakeProfiles will assume that all images given to ‘--customimg’ have the same HDU. Otherwise (if the number of HDUs is equal to the number of images), then each image will use its corresponding HDU. ‘-X INT,INT’ ‘--shift=INT,INT’ Shift all the profiles and enlarge the image along each dimension. To better understand this option, please see $n$ in *note If convolving afterwards::. This is useful when you want to convolve the image afterwards. If you are using an external PSF, be sure to oversample it to the same scale used for creating the mock images. If a background image is specified, any possible value to this option is ignored. ‘-c’ ‘--prepforconv’ Shift all the profiles and enlarge the image based on half the width of the first Moffat or Gaussian profile in the catalog, considering any possible oversampling see *note If convolving afterwards::. ‘--prepforconv’ is only checked and possibly activated if ‘--xshift’ and ‘--yshift’ are both zero (after reading the command-line and configuration files). If a background image is specified, any possible value to this option is ignored. ‘-z FLT’ ‘--zeropoint=FLT’ The zero point magnitude of the input. For more on the zero point magnitude, see *note Brightness flux magnitude::. ‘-w FLT’ ‘--circumwidth=FLT’ The width of the circumference if the profile is to be an elliptical circumference or annulus. See the explanations for this type of profile in ‘--fcol’. ‘-R’ ‘--replace’ Do not add the pixels of each profile over the background, or other profiles. But replace the values. By default, when two profiles overlap, the final pixel value is the sum of all the profiles that overlap on that pixel. This is the expected situation when dealing with physical object profiles like galaxies or stars/PSF. However, when MakeProfiles is used to build integer labeled images (for example, in *note Aperture photometry::), this is not the expected situation: the sum of two labels will be a new label. With this option, the pixels are not added but the largest (maximum) value over that pixel is used. Because the maximum operator is independent of the order of values, the output is also thread-safe. ---------- Footnotes ---------- (1) The minimum will give a better result, because the maximum can be too high compared to most pixels in the image, making it harder to display.  File: gnuastro.info, Node: MakeProfiles output dataset, Next: MakeProfiles log file, Prev: MakeProfiles profile settings, Up: Invoking astmkprof 8.1.4.3 MakeProfiles output dataset ................................... MakeProfiles takes an input catalog uses basic properties that are defined there to build a dataset, for example, a 2D image containing the profiles in the catalog. In *note MakeProfiles catalog:: and *note MakeProfiles profile settings::, the catalog and profile settings were discussed. The options of this section, allow you to configure the output dataset (or the canvas that will host the built profiles). ‘-k FITS’ ‘--background=FITS’ A background image FITS file to build the profiles on. The extension that contains the image should be specified with the ‘--backhdu’ option, see below. When a background image is specified, it will be used to derive all the information about the output image. Hence, the following options will be ignored: ‘--mergedsize’, ‘--oversample’, ‘--crpix’, ‘--crval’ (generally, all other WCS related parameters) and the output's data type (see ‘--type’ in *note Input output options::). The background image will act like a canvas to build the profiles on: profile pixel values will be summed with the background image pixel values. With the ‘--replace’ option you can disable this behavior and replace the profile pixels with the background pixels. If you want to use all the image information above, except for the pixel values (you want to have a blank canvas to build the profiles on, based on an input image), you can call ‘--clearcanvas’, to set all the input image's pixels to zero before starting to build the profiles over it (this is done in memory after reading the input, so nothing will happen to your input file). ‘-B STR/INT’ ‘--backhdu=STR/INT’ The header data unit (HDU) of the file given to ‘--background’. ‘-C’ ‘--clearcanvas’ When an input image is specified (with the ‘--background’ option, set all its pixels to 0.0 immediately after reading it into memory. Effectively, this will allow you to use all its properties (described under the ‘--background’ option), without having to worry about the pixel values. ‘--clearcanvas’ can come in handy in many situations, for example, if you want to create a labeled image (segmentation map) for creating a catalog (see *note MakeCatalog::). In other cases, you might have modeled the objects in an image and want to create them on the same frame, but without the original pixel values. ‘-E STR/INT,FLT[,FLT,[...]]’ ‘--kernel=STR/INT,FLT[,FLT,[...]]’ Only build one kernel profile with the parameters given as the values to this option. The different values must be separated by a comma (<,>). The first value identifies the radial function of the profile, either through a string or through a number (see description of ‘--fcol’ in *note MakeProfiles catalog::). Each radial profile needs a different total number of parameters: Sérsic and Moffat functions need 3 parameters: radial, Sérsic index or Moffat $\beta$, and truncation radius. The Gaussian function needs two parameters: radial and truncation radius. The point function does not need any parameters and flat and circumference profiles just need one parameter (truncation radius). The PSF or kernel is a unique (and highly constrained) type of profile: the sum of its pixels must be one, its center must be the center of the central pixel (in an image with an odd number of pixels on each side), and commonly it is circular, so its axis ratio and position angle are one and zero respectively. Kernels are commonly necessary for various data analysis and data manipulation steps (for example, see *note Convolve::, and *note NoiseChisel::. Because of this it is inconvenient to define a catalog with one row and many zero valued columns (for all the non-necessary parameters). Hence, with this option, it is possible to create a kernel with MakeProfiles without the need to create a catalog. Here are some examples: ‘--kernel=moffat,3,2.8,5’ A Moffat kernel with FWHM of 3 pixels, $\beta=2.8$ which is truncated at 5 times the FWHM. ‘--kernel=gaussian,2,3’ A circular Gaussian kernel with FWHM of 2 pixels and truncated at 3 times the FWHM. This option may also be used to create a 3D kernel. To do that, two small modifications are necessary: add a ‘-3d’ (or ‘-3D’) to the profile name (for example, ‘moffat-3d’) and add a number (axis-ratio along the third dimension) to the end of the parameters for all profiles except ‘point’. The main reason behind providing an axis ratio in the third dimension is that in 3D astronomical datasets, commonly the third dimension does not have the same nature (units/sampling) as the first and second. For example, in IFU (optical) or Radio data cubes, the first and second dimensions are commonly spatial/angular positions (like RA and Dec) but the third dimension is wavelength or frequency (in units of Angstroms for Herz). Because of this different nature (which also affects the processing), it may be necessary for the kernel to have a different extent in that direction. If the 3rd dimension axis ratio is equal to $1.0$, then the kernel will be a spheroid. If it is smaller than $1.0$, the kernel will be button-shaped: extended less in the third dimension. However, when it islarger than $1.0$, the kernel will be bullet-shaped: extended more in the third dimension. In the latter case, the radial parameter will correspond to the length along the 3rd dimension. For example, let's have a look at the two examples above but in 3D: ‘--kernel=moffat-3d,3,2.8,5,0.5’ An ellipsoid Moffat kernel with FWHM of 3 pixels, $\beta=2.8$ which is truncated at 5 times the FWHM. The ellipsoid is circular in the first two dimensions, but in the third dimension its extent is half the first two. ‘--kernel=gaussian-3d,2,3,1’ A spherical Gaussian kernel with FWHM of 2 pixels and truncated at 3 times the FWHM. Of course, if a specific kernel is needed that does not fit the constraints imposed by this option, you can always use a catalog to define any arbitrary kernel. Just call the ‘--individual’ and ‘--nomerged’ options to make sure that it is built as a separate file (individually) and no "merged" image of the input profiles is created. ‘-x INT,INT’ ‘--mergedsize=INT,INT’ The number of pixels along each axis of the output, in FITS order. This is before over-sampling. For example, if you call MakeProfiles with ‘--mergedsize=100,150 --oversample=5’ (assuming no shift due for later convolution), then the final image size along the first axis will be 500 by 750 pixels. Fractions are acceptable as values for each dimension, however, they must reduce to an integer, so ‘--mergedsize=150/3,300/3’ is acceptable but ‘--mergedsize=150/4,300/4’ is not. When viewing a FITS image in DS9, the first FITS dimension is in the horizontal direction and the second is vertical. As an example, the image created with the example above will have 500 pixels horizontally and 750 pixels vertically. If a background image is specified, this option is ignored. ‘-s INT’ ‘--oversample=INT’ The scale to over-sample the profiles and final image. If not an odd number, will be added by one, see *note Oversampling::. Note that this ‘--oversample’ will remain active even if an input image is specified. If your input catalog is based on the background image, be sure to set ‘--oversample=1’. ‘--psfinimg’ Build the possibly existing PSF profiles (Moffat or Gaussian) in the catalog into the final image. By default they are built separately so you can convolve your images with them, thus their magnitude and positions are ignored. With this option, they will be built in the final image like every other galaxy profile. To have a final PSF in your image, make a point profile where you want the PSF and after convolution it will be the PSF. ‘-i’ ‘--individual’ If this option is called, each profile is created in a separate FITS file within the same directory as the output and the row number of the profile (starting from zero) in the name. The file for each row's profile will be in the same directory as the final combined image of all the profiles and will have the final image's name as a suffix. So for example, if the final combined image is named ‘./out/fromcatalog.fits’, then the first profile that will be created with this option will be named ‘./out/0_fromcatalog.fits’. Since each image only has one full profile out to the truncation radius the profile is centered and so, only the sub-pixel position of the profile center is important for the outputs of this option. The output will have an odd number of pixels. If there is no oversampling, the central pixel will contain the profile center. If the value to ‘--oversample’ is larger than unity, then the profile center is on any of the central ‘--oversample’'d pixels depending on the fractional value of the profile center. If the fractional value is larger than half, it is on the bottom half of the central region. This is due to the FITS definition of a real number position: The center of a pixel has fractional value $0.00$ so each pixel contains these fractions: .5 - .75 - .00 (pixel center) - .25 - .5. ‘-m’ ‘--nomerged’ Do not make a merged image. By default after making the profiles, they are added to a final image with side lengths specified by ‘--mergedsize’ if they overlap with it. The options below can be used to define the world coordinate system (WCS) properties of the MakeProfiles outputs. The option names are deliberately chosen to be the same as the FITS standard WCS keywords. See Section 8 of Pence et al [2010] (https://doi.org/10.1051/0004-6361/201015362) for a short introduction to WCS in the FITS standard(1). If you look into the headers of a FITS image with WCS for example, you will see all these names but in uppercase and with numbers to represent the dimensions, for example, ‘CRPIX1’ and ‘PC2_1’. You can see the FITS headers with Gnuastro's *note Fits:: program using a command like this: ‘$ astfits -p image.fits’. If the values given to any of these options does not correspond to the number of dimensions in the output dataset, then no WCS information will be added. Also recall that if you use the ‘--background’ option, all of these options are ignored. Such that if the image given to ‘--background’ does not have any WCS, the output of MakeProfiles will also not have any WCS, even if these options are given(2). ‘--crpix=FLT,FLT’ The pixel coordinates of the WCS reference point. Fractions are acceptable for the values of this option. ‘--crval=FLT,FLT’ The WCS coordinates of the Reference point. Fractions are acceptable for the values of this option. The comma-separated values can either be in degrees (a single number), or sexagesimal (‘_h_m_’ for RA, ‘_d_m_’ for Dec, or ‘_:_:_’ for both). In any case, the final value that will be written in the ‘CRVAL’ keyword will be a floating point number in degrees (according to the FITS standard). ‘--cdelt=FLT,FLT’ The resolution (size of one data-unit or pixel in WCS units) of the non-oversampled dataset. Fractions are acceptable for the values of this option. ‘--pc=FLT,FLT,FLT,FLT’ The PC matrix of the WCS rotation, see the FITS standard (link above) to better understand the PC matrix. ‘--cunit=STR,STR’ The units of each WCS axis, for example, ‘deg’. Note that these values are part of the FITS standard (link above). MakeProfiles will not complain if you use non-standard values, but later usage of them might cause trouble. ‘--ctype=STR,STR’ The type of each WCS axis, for example, ‘RA---TAN’ and ‘DEC--TAN’. Note that these values are part of the FITS standard (link above). MakeProfiles will not complain if you use non-standard values, but later usage of them might cause trouble. ---------- Footnotes ---------- (1) The world coordinate standard in FITS is a very beautiful and powerful concept to link/associate datasets with the outside world (other datasets). The description in the FITS standard (link above) only touches the tip of the ice-burg. To learn more please see Greisen and Calabretta [2002] (https://doi.org/10.1051/0004-6361:20021326), Calabretta and Greisen [2002] (https://doi.org/10.1051/0004-6361:20021327), Greisen et al. [2006] (https://doi.org/10.1051/0004-6361:20053818), and Calabretta et al. (http://www.atnf.csiro.au/people/mcalabre/WCS/dcs_20040422.pdf) (2) If you want to add profiles _and_ WCS over the background image (to produce your output), you need more than one command: 1. You should use ‘--mergedsize’ in MakeProfiles to manually set the output number of pixels equal to your desired background image (so the background is zero). In this mode, you can use these WCS-related options to define the WCS. 2. Then use Arithmetic to add the pixels of your mock image to the background (see *note Arithmetic::. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro.info-8�������������������������������������������������������������������0000644�0001750�0001750�00001114046�14557514037�012433� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is gnuastro.info, produced by makeinfo version 7.1 from gnuastro.texi. This book documents version 0.22 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * Match: (gnuastro)Match. Match two separate catalogs. * astmatch: (gnuastro)Invoking astmatch. Options to Match. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Segment: (gnuastro)Segment. Segment detections based on signal structure. * astsegment: (gnuastro)Invoking astsegment. Options to Segment. * Query: (gnuastro)Query. Access remote databases for downloading data. * astquery: (gnuastro)Invoking astquery. Options to Query. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. * astscript: (gnuastro)Installed scripts. Gnuastro's installed scripts. * astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script * astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script * astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script * astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script * astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script * astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script * astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script * astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script * astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script * astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script * astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script END-INFO-DIR-ENTRY  File: gnuastro.info, Node: MakeProfiles log file, Prev: MakeProfiles output dataset, Up: Invoking astmkprof 8.1.4.4 MakeProfiles log file ............................. Besides the final merged dataset of all the profiles, or the individual datasets (see *note MakeProfiles output dataset::), if the ‘--log’ option is called MakeProfiles will also create a log file in the current directory (where you run MockProfiles). See *note Common options:: for a full description of ‘--log’ and other options that are shared between all Gnuastro programs. The values for each column are explained in the first few commented lines of the log file (starting with ‘#’ character). Here is a more complete description. • An ID (row number of profile in input catalog). • The total magnitude of the profile in the output dataset. When the profile does not completely overlap with the output dataset, this will be different from your input magnitude. • The number of pixels (in the oversampled image) which used Monte Carlo integration and not the central pixel value, see *note Sampling from a function::. • The fraction of flux in the Monte Carlo integrated pixels. • If an individual image was created, this column will have a value of ‘1’, otherwise it will have a value of ‘0’.  File: gnuastro.info, Node: High-level calculations, Next: Installed scripts, Prev: Data modeling, Up: Top 9 High-level calculations ************************* After the reduction of raw data (for example, with the programs in *note Data manipulation::) you will have reduced images/data ready for processing/analyzing (for example, with the programs in *note Data analysis::). But the processed/analyzed data (or catalogs) are still not enough to derive any scientific result. Even higher-level analysis is still needed to convert the observed magnitudes, sizes or volumes into physical quantities that we associate with each catalog entry or detected object which is the purpose of the tools in this section. * Menu: * CosmicCalculator:: Calculate cosmological variables  File: gnuastro.info, Node: CosmicCalculator, Prev: High-level calculations, Up: High-level calculations 9.1 CosmicCalculator ==================== To derive higher-level information regarding our sources in extra-galactic astronomy, cosmological calculations are necessary. In Gnuastro, CosmicCalculator is in charge of such calculations. Before discussing how CosmicCalculator is called and operates (in *note Invoking astcosmiccal::), it is important to provide a rough but mostly self sufficient review of the basics and the equations used in the analysis. In *note Distance on a 2D curved space:: the basic idea of understanding distances in a curved and expanding 2D universe (which we can visualize) are reviewed. Having solidified the concepts there, in *note Extending distance concepts to 3D::, the formalism is extended to the 3D universe we are trying to study in our research. The focus here is obtaining a physical insight into these equations (mainly for the use in real observational studies). There are many books thoroughly deriving and proving all the equations with all possible initial conditions and assumptions for any abstract universe, interested readers can study those books. * Menu: * Distance on a 2D curved space:: Distances in 2D for simplicity. * Extending distance concepts to 3D:: Going to 3D (our real universe). * Invoking astcosmiccal:: How to run CosmicCalculator.  File: gnuastro.info, Node: Distance on a 2D curved space, Next: Extending distance concepts to 3D, Prev: CosmicCalculator, Up: CosmicCalculator 9.1.1 Distance on a 2D curved space ----------------------------------- The observations to date (for example, the Planck 2015 results), have not measured(1) the presence of significant curvature in the universe. However to be generic (and allow its measurement if it does in fact exist), it is very important to create a framework that allows non-zero uniform curvature. However, this section is not intended to be a fully thorough and mathematically complete derivation of these concepts. There are many references available for such reviews that go deep into the abstract mathematical proofs. The emphasis here is on visualization of the concepts for a beginner. As 3D beings, it is difficult for us to mentally create (visualize) a picture of the curvature of a 3D volume. Hence, here we will assume a 2D surface/space and discuss distances on that 2D surface when it is flat and when it is curved. Once the concepts have been created/visualized here, we will extend them, in *note Extending distance concepts to 3D::, to a real 3D spatial _slice_ of the Universe we live in and hope to study. To be more understandable (actively discuss from an observer's point of view) let's assume there's an imaginary 2D creature living on the 2D space (which _might_ be curved in 3D). Here, we will be working with this creature in its efforts to analyze distances in its 2D universe. The start of the analysis might seem too mundane, but since it is difficult to imagine a 3D curved space, it is important to review all the very basic concepts thoroughly for an easy transition to a universe that is more difficult to visualize (a curved 3D space embedded in 4D). To start, let's assume a static (not expanding or shrinking), flat 2D surface similar to *note Figure 9.1: flatplane. and that the 2D creature is observing its universe from point $A$. One of the most basic ways to parameterize this space is through the Cartesian coordinates ($x$, $y$). In *note Figure 9.1: flatplane, the basic axes of these two coordinates are plotted. An infinitesimal change in the direction of each axis is written as $dx$ and $dy$. For each point, the infinitesimal changes are parallel with the respective axes and are not shown for clarity. Another very useful way of parameterizing this space is through polar coordinates. For each point, we define a radius ($r$) and angle ($\phi$) from a fixed (but arbitrary) reference axis. In *note Figure 9.1: flatplane. the infinitesimal changes for each polar coordinate are plotted for a random point and a dashed circle is shown for all points with the same radius. �[image src="gnuastro-figures/flatplane.png" text="../gnuastro-figures//flatplane.eps"�] Figure 9.1: Two dimensional Cartesian and polar coordinates on a flat plane. Assuming an object is placed at a certain position, which can be parameterized as $(x,y)$, or $(r,\phi)$, a general infinitesimal change in its position will place it in the coordinates $(x+dx,y+dy)$, or $(r+dr,\phi+d\phi)$. The distance (on the flat 2D surface) that is covered by this infinitesimal change in the static universe ($ds_s$, the subscript signifies the static nature of this universe) can be written as: $$ds_s^2=dx^2+dy^2=dr^2+r^2d\phi^2$$ The main question is this: how can the 2D creature incorporate the (possible) curvature in its universe when it's calculating distances? The universe that it lives in might equally be a curved surface like *note Figure 9.2: sphereandplane. The answer to this question but for a 3D being (us) is the whole purpose to this discussion. Here, we want to give the 2D creature (and later, ourselves) the tools to measure distances if the space (that hosts the objects) is curved. *note Figure 9.2: sphereandplane. assumes a spherical shell with radius $R$ as the curved 2D plane for simplicity. The 2D plane is tangent to the spherical shell and only touches it at $A$. This idea will be generalized later. The first step in measuring the distance in a curved space is to imagine a third dimension along the $z$ axis as shown in *note Figure 9.2: sphereandplane. For simplicity, the $z$ axis is assumed to pass through the center of the spherical shell. Our imaginary 2D creature cannot visualize the third dimension or a curved 2D surface within it, so the remainder of this discussion is purely abstract for it (similar to us having difficulty in visualizing a 3D curved space in 4D). But since we are 3D creatures, we have the advantage of visualizing the following steps. Fortunately the 2D creature is already familiar with our mathematical constructs, so it can follow our reasoning. With the third axis added, a generic infinitesimal change over _the full_ 3D space corresponds to the distance: $$ds_s^2=dx^2+dy^2+dz^2=dr^2+r^2d\phi^2+dz^2.$$ �[image src="gnuastro-figures/sphereandplane.png" text="../gnuastro-figures//sphereandplane.eps"�] Figure 9.2: 2D spherical shell (centered on $O$) and flat plane (light gray) tangent to it at point $A$. It is very important to recognize that this change of distance is for _any_ point in the 3D space, not just those changes that occur on the 2D spherical shell of *note Figure 9.2: sphereandplane. Recall that our 2D friend can only do measurements on the 2D surfaces, not the full 3D space. So we have to constrain this general change to any change on the 2D spherical shell. To do that, let's look at the arbitrary point $P$ on the 2D spherical shell. Its image ($P'$) on the flat plain is also displayed. From the dark gray triangle, we see that $$\sin\theta={r\over R},\quad\cos\theta={R-z\over R}.$$These relations allow the 2D creature to find the value of $z$ (an abstract dimension for it) as a function of r (distance on a flat 2D plane, which it can visualize) and thus eliminate $z$. From $\sin^2\theta+\cos^2\theta=1$, we get $z^2-2Rz+r^2=0$ and solving for $z$, we find: $$z=R\left(1\pm\sqrt{1-{r^2\over R^2}}\right).$$ The $\pm$ can be understood from *note Figure 9.2: sphereandplane.: For each $r$, there are two points on the sphere, one in the upper hemisphere and one in the lower hemisphere. An infinitesimal change in $r$, will create the following infinitesimal change in $z$: $$dz={\mp r\over R}\left(1\over \sqrt{1-{r^2/R^2}}\right)dr.$$Using the positive signed equation instead of $dz$ in the $ds_s^2$ equation above, we get: $$ds_s^2={dr^2\over 1-r^2/R^2}+r^2d\phi^2.$$ The derivation above was done for a spherical shell of radius $R$ as a curved 2D surface. To generalize it to any surface, we can define $K=1/R^2$ as the curvature parameter. Then the general infinitesimal change in a static universe can be written as: $$ds_s^2={dr^2\over 1-Kr^2}+r^2d\phi^2.$$ Therefore, when $K>0$ (and curvature is the same everywhere), we have a finite universe, where $r$ cannot become larger than $R$ as in *note Figure 9.2: sphereandplane. When $K=0$, we have a flat plane (*note Figure 9.1: flatplane.) and a negative $K$ will correspond to an imaginary $R$. The latter two cases may be infinite in area (which is not a simple concept, but mathematically can be modeled with $r$ extending infinitely), or finite-area (like a cylinder is flat everywhere with $ds_s^2={dx^2 + dy^2}$, but finite in one direction in size). A very important issue that can be discussed now (while we are still in 2D and can actually visualize things) is that $\overrightarrow{r}$ is tangent to the curved space at the observer's position. In other words, it is on the gray flat surface of *note Figure 9.2: sphereandplane, even when the universe if curved: $\overrightarrow{r}=P'-A$. Therefore for the point $P$ on a curved space, the raw coordinate $r$ is the distance to $P'$, not $P$. The distance to the point $P$ (at a specific coordinate $r$ on the flat plane) over the curved surface (thick line in *note Figure 9.2: sphereandplane.) is called the _proper distance_ and is displayed with $l$. For the specific example of *note Figure 9.2: sphereandplane, the proper distance can be calculated with: $l=R\theta$ ($\theta$ is in radians). Using the $\sin\theta$ relation found above, we can find $l$ as a function of $r$: $$\theta=\sin^{-1}\left({r\over R}\right)\quad\rightarrow\quad l(r)=R\sin^{-1}\left({r\over R}\right)$$ $R$ is just an arbitrary constant and can be directly found from $K$, so for cleaner equations, it is common practice to set $R=1$, which gives: $l(r)=\sin^{-1}r$. Also note that when $R=1$, then $l=\theta$. Generally, depending on the curvature, in a _static_ universe the proper distance can be written as a function of the coordinate $r$ as (from now on we are assuming $R=1$): $$l(r)=\sin^{-1}(r)\quad(K>0),\quad\quad l(r)=r\quad(K=0),\quad\quad l(r)=\sinh^{-1}(r)\quad(K<0).$$With $l$, the infinitesimal change of distance can be written in a more simpler and abstract form of $$ds_s^2=dl^2+r^2d\phi^2.$$ Until now, we had assumed a static universe (not changing with time). But our observations so far appear to indicate that the universe is expanding (it is not static). Since there is no reason to expect the observed expansion is unique to our particular position of the universe, we expect the universe to be expanding at all points with the same rate at the same time. Therefore, to add a time dependence to our distance measurements, we can include a multiplicative scaling factor, which is a function of time: $a(t)$. The functional form of $a(t)$ comes from the cosmology, the physics we assume for it: general relativity, and the choice of whether the universe is uniform ('homogeneous') in density and curvature or inhomogeneous. In this section, the functional form of $a(t)$ is irrelevant, so we can avoid these issues. With this scaling factor, the proper distance will also depend on time. As the universe expands, the distance between two given points will shift to larger values. We thus define a distance measure, or coordinate, that is independent of time and thus does not 'move'. We call it the _comoving distance_ and display with $\chi$ such that: $l(r,t)=\chi(r)a(t)$. We have therefore, shifted the $r$ dependence of the proper distance we derived above for a static universe to the comoving distance: $$\chi(r)=\sin^{-1}(r)\quad(K>0),\quad\quad \chi(r)=r\quad(K=0),\quad\quad \chi(r)=\sinh^{-1}(r)\quad(K<0).$$ Therefore, $\chi(r)$ is the proper distance to an object at a specific reference time: $t=t_r$ (the $r$ subscript signifies "reference") when $a(t_r)=1$. At any arbitrary moment ($t\neq{t_r}$) before or after $t_r$, the proper distance to the object can be scaled with $a(t)$. Measuring the change of distance in a time-dependent (expanding) universe only makes sense if we can add up space and time(2). But we can only add bits of space and time together if we measure them in the same units: with a conversion constant (similar to how 1000 is used to convert a kilometer into meters). Experimentally, we find strong support for the hypothesis that this conversion constant is the speed of light (or gravitational waves(3)) in a vacuum. This speed is postulated to be constant(4) and is almost always written as $c$. We can thus parameterize the change in distance on an expanding 2D surface as $$ds^2=c^2dt^2-a^2(t)ds_s^2 = c^2dt^2-a^2(t)(d\chi^2+r^2d\phi^2).$$ ---------- Footnotes ---------- (1) The observations are interpreted under the assumption of uniform curvature. For a relativistic alternative to dark energy (and maybe also some part of dark matter), non-uniform curvature may be even be more critical, but that is beyond the scope of this brief explanation. (2) In other words, making our space-time consistent with Minkowski space-time geometry. In this geometry, different observers at a given point (event) in space-time split up space-time into 'space' and 'time' in different ways, just like people at the same spatial position can make different choices of splitting up a map into 'left-right' and 'up-down'. This model is well supported by twentieth and twenty-first century observations. (3) The speed of gravitational waves was recently found to be very similar to that of light in vacuum, see LIGO Collaboration 2017 (https://arxiv.org/abs/1710.05834). (4) In _natural units_, speed is measured in units of the speed of light in vacuum.  File: gnuastro.info, Node: Extending distance concepts to 3D, Next: Invoking astcosmiccal, Prev: Distance on a 2D curved space, Up: CosmicCalculator 9.1.2 Extending distance concepts to 3D --------------------------------------- The concepts of *note Distance on a 2D curved space:: are here extended to a 3D space that _might_ be curved. We can start with the generic infinitesimal distance in a static 3D universe, but this time in spherical coordinates instead of polar coordinates. $\theta$ is shown in *note Figure 9.2: sphereandplane, but here we are 3D beings, positioned on $O$ (the center of the sphere) and the point $O$ is tangent to a 4D-sphere. In our 3D space, a generic infinitesimal displacement will correspond to the following distance in spherical coordinates: $$ds_s^2=dx^2+dy^2+dz^2=dr^2+r^2(d\theta^2+\sin^2{\theta}d\phi^2).$$ Like the 2D creature before, we now have to assume an abstract dimension which we cannot visualize easily. Let's call the fourth dimension $w$, then the general change in coordinates in the _full_ four dimensional space will be: $$ds_s^2=dr^2+r^2(d\theta^2+\sin^2{\theta}d\phi^2)+dw^2.$$ But we can only work on a 3D curved space, so following exactly the same steps and conventions as our 2D friend, we arrive at: $$ds_s^2={dr^2\over 1-Kr^2}+r^2(d\theta^2+\sin^2{\theta}d\phi^2).$$ In a non-static universe (with a scale factor a(t)), the distance can be written as: $$ds^2=c^2dt^2-a^2(t)[d\chi^2+r^2(d\theta^2+\sin^2{\theta}d\phi^2)].$$  File: gnuastro.info, Node: Invoking astcosmiccal, Prev: Extending distance concepts to 3D, Up: CosmicCalculator 9.1.3 Invoking CosmicCalculator ------------------------------- CosmicCalculator will calculate cosmological variables based on the input parameters. The executable name is ‘astcosmiccal’ with the following general template $ astcosmiccal [OPTION...] ... One line examples: ## Print basic cosmological properties at redshift 2.5: $ astcosmiccal -z2.5 ## Only print Comoving volume over 4pi stradian to z (Mpc^3): $ astcosmiccal --redshift=0.8 --volume ## Print redshift and age of universe when Lyman-alpha line is ## at 6000 angstrom (another way to specify redshift). $ astcosmiccal --obsline=Ly-alpha,6000 --age ## Print luminosity distance, angular diameter distance and age ## of universe in one row at redshift 0.4 $ astcosmiccal -z0.4 -LAg ## Assume Lambda and matter density of 0.7 and 0.3 and print ## basic cosmological parameters for redshift 2.1: $ astcosmiccal -l0.7 -m0.3 -z2.1 ## Print wavelength of all pre-defined spectral lines when ## Lyman-alpha is observed at 4000 Angstroms. $ astcosmiccal --obsline=Ly-alpha,4000 --listlinesatz The input parameters (current matter density, etc.) can be given as command-line options or in the configuration files, see *note Configuration files::. For a definition of the different parameters, please see the sections prior to this. If no redshift is given, CosmicCalculator will just print its input parameters and abort. For a full list of the input options, please see *note CosmicCalculator input options::. Without any particular output requested (and only a given redshift), CosmicCalculator will print all basic cosmological calculations (one per line) with some explanations before each. This can be good when you want a general feeling of the conditions at a specific redshift. Alternatively, if any specific calculation(s) are requested (its possible to call more than one), only the requested value(s) will be calculated and printed with one character space between them. In this case, no description or units will be printed. See *note CosmicCalculator basic cosmology calculations:: for the full list of these options along with some explanations how when/how they can be useful. Another common operation in observational cosmology is dealing with spectral lines at different redshifts. CosmicCalculator also has features to help in such situations, please see *note CosmicCalculator spectral line calculations::. * Menu: * CosmicCalculator input options:: Options to specify input conditions. * CosmicCalculator basic cosmology calculations:: Such as distance modulus and distances. * CosmicCalculator spectral line calculations:: How they get affected by redshift.  File: gnuastro.info, Node: CosmicCalculator input options, Next: CosmicCalculator basic cosmology calculations, Prev: Invoking astcosmiccal, Up: Invoking astcosmiccal 9.1.3.1 CosmicCalculator input options ...................................... The inputs to CosmicCalculator can be specified with the following options: ‘-z FLT’ ‘--redshift=FLT’ The redshift of interest. There are two other ways that you can specify the target redshift: 1) Spectral lines and their observed wavelengths, see ‘--obsline’. 2) Velocity, see ‘--velocity’. Hence this option cannot be called with ‘--obsline’ or ‘--velocity’. ‘-y FLT’ ‘--velocity=FLT’ Input velocity in km/s. The given value will be converted to redshift internally, and used in any subsequent calculation. This option is thus an alternative to ‘--redshift’ or ‘--obsline’, it cannot be used with them. The conversion will be done with the more general and accurate relativistic equation of $1+z=\sqrt{(c+v)/(c-v)}$, not the simplified $z\approx v/c$. ‘-H FLT’ ‘--H0=FLT’ Current expansion rate (in km sec$^{-1}$ Mpc$^{-1}$). ‘-l FLT’ ‘--olambda=FLT’ Cosmological constant density divided by the critical density in the current Universe ($\Omega_{\Lambda,0}$). ‘-m FLT’ ‘--omatter=FLT’ Matter (including massive neutrinos) density divided by the critical density in the current Universe ($\Omega_{m,0}$). ‘-r FLT’ ‘--oradiation=FLT’ Radiation density divided by the critical density in the current Universe ($\Omega_{r,0}$). ‘-O STR/FLT,FLT’ ‘--obsline=STR/FLT,FLT’ Find the redshift to use in next steps based on the rest-frame and observed wavelengths of a line. This option is thus an alternative to ‘--redshift’ or ‘--velocity’, it cannot be used with them. The first argument identifies the line. It can be one of the standard names, or any rest-frame wavelength in Angstroms. The second argument is the observed wavelength of that line. For example, ‘--obsline=Ly-alpha,6000’ is the same as ‘--obsline=1215.64,6000’. Wavelengths are assumed to be in Angstroms by default (other units can be selected with ‘--lineunit’, see *note CosmicCalculator spectral line calculations::). The list of pre-defined names for the lines in Gnuastro's database is available by running $ astcosmiccal --listlines  File: gnuastro.info, Node: CosmicCalculator basic cosmology calculations, Next: CosmicCalculator spectral line calculations, Prev: CosmicCalculator input options, Up: Invoking astcosmiccal 9.1.3.2 CosmicCalculator basic cosmology calculations ..................................................... By default, when no specific calculations are requested, CosmicCalculator will print a complete set of all its calculators (one line for each calculation, see *note Invoking astcosmiccal::). The full list of calculations can be useful when you do not want any specific value, but just a general view. In other contexts (for example, in a batch script or during a discussion), you know exactly what you want and do not want to be distracted by all the extra information. You can use any number of the options described below in any order. When any of these options are requested, CosmicCalculator's output will just be a single line with a single space between the (possibly) multiple values. In the example below, only the tangential distance along one arc-second (in kpc), absolute magnitude conversion, and age of the universe at redshift 2 are printed (recall that you can merge short options together, see *note Options::). $ astcosmiccal -z2 -sag 8.585046 44.819248 3.289979 Here is one example of using this feature in scripts: by adding the following two lines in a script to keep/use the comoving volume with varying redshifts: z=3.12 vol=$(astcosmiccal --redshift=$z --volume) In a script, this operation might be necessary for a large number of objects (several of galaxies in a catalog for example). So the fact that all the other default calculations are ignored will also help you get to your result faster. If you are indeed dealing with many (for example, thousands) of redshifts, using CosmicCalculator is not the best/fastest solution. Because it has to go through all the configuration files and preparations for each invocation. To get the best efficiency (least overhead), we recommend using Gnuastro's cosmology library (see *note Cosmology library::). CosmicCalculator also calls the library functions defined there for its calculations, so you get the same result with no overhead. Gnuastro also has libraries for easily reading tables into a C program, see *note Table input output::. Afterwards, you can easily build and run your C program for the particular processing with *note BuildProgram::. If you just want to inspect the value of a variable visually, the description (which comes with units) might be more useful. In such cases, the following command might be better. The other calculations will also be done, but they are so fast that you will not notice on modern computers (the time it takes your eye to focus on the result is usually longer than the processing: a fraction of a second). $ astcosmiccal --redshift=0.832 | grep volume The full list of CosmicCalculator's specific calculations is present below in two groups: basic cosmology calculations and those related to spectral lines. In case you have forgot the units, you can use the ‘--help’ option which has the units along with a short description. ‘-e’ ‘--usedredshift’ The redshift that was used in this run. In many cases this is the main input parameter to CosmicCalculator, but it is useful in others. For example, in combination with ‘--obsline’ (where you give an observed and rest-frame wavelength and would like to know the redshift) or with ‘--velocity’ (where you specify the velocity instead of redshift). Another example is when you run CosmicCalculator in a loop, while changing the redshift and you want to keep the redshift value with the resulting calculation. ‘-Y’ ‘--usedvelocity’ The velocity (in km/s) that was used in this run. The conversion from redshift will be done with the more general and accurate relativistic equation of $1+z=\sqrt{(c+v)/(c-v)}$, not the simplified $z\approx v/c$. ‘-G’ ‘--agenow’ The current age of the universe (given the input parameters) in Ga (Giga annum, or billion years). ‘-C’ ‘--criticaldensitynow’ The current critical density (given the input parameters) in grams per centimeter-cube ($g/cm^3$). ‘-d’ ‘--properdistance’ The proper distance (at current time) to object at the given redshift in Megaparsecs (Mpc). See *note Distance on a 2D curved space:: for a description of the proper distance. ‘-A’ ‘--angulardiamdist’ The angular diameter distance to object at given redshift in Megaparsecs (Mpc). ‘-s’ ‘--arcsectandist’ The tangential distance covered by 1 arc-seconds at the given redshift in kiloparsecs (Kpc). This can be useful when trying to estimate the resolution or pixel scale of an instrument (usually in units of arc-seconds) at a given redshift. ‘-L’ ‘--luminositydist’ The luminosity distance to object at given redshift in Megaparsecs (Mpc). ‘-u’ ‘--distancemodulus’ The distance modulus at given redshift. ‘-a’ ‘--absmagconv’ The conversion factor (addition) to absolute magnitude. Note that this is practically the distance modulus added with $-2.5\log{(1+z)}$ for the desired redshift based on the input parameters. Once the apparent magnitude and redshift of an object is known, this value may be added with the apparent magnitude to give the object's absolute magnitude. ‘-g’ ‘--age’ Age of the universe at given redshift in Ga (Giga annum, or billion years). ‘-b’ ‘--lookbacktime’ The look-back time to given redshift in Ga (Giga annum, or billion years). The look-back time at a given redshift is defined as the current age of the universe (‘--agenow’) subtracted by the age of the universe at the given redshift. ‘-c’ ‘--criticaldensity’ The critical density at given redshift in grams per centimeter-cube ($g/cm^3$). ‘-v’ ‘--onlyvolume’ The comoving volume in Megaparsecs cube (Mpc$^3$) until the desired redshift based on the input parameters.  File: gnuastro.info, Node: CosmicCalculator spectral line calculations, Prev: CosmicCalculator basic cosmology calculations, Up: Invoking astcosmiccal 9.1.3.3 CosmicCalculator spectral line calculations ................................................... At different redshifts, observed spectral lines are shifted compared to their rest frame wavelengths with this simple relation: $\lambda_{obs}=\lambda_{rest}(1+z)$. Although this relation is very simple and can be done for one line in the head (or a simple calculator!), it slowly becomes tiring when dealing with a lot of lines or redshifts, or some precision is necessary. The options in this section are thus provided to greatly simplify usage of this simple equation, and also helping by storing a list of pre-defined spectral line wavelengths. For example, if you want to know the wavelength of the $H\alpha$ line (at 6562.8 Angstroms in rest frame), when $Ly\alpha$ is at 8000 Angstroms, you can call CosmicCalculator like the first example below. And if you want the wavelength of all pre-defined spectral lines at this redshift, you can use the second command. $ astcosmiccal --obsline=lyalpha,8000 --lineatz=halpha $ astcosmiccal --obsline=lyalpha,8000 --listlinesatz Bellow you can see the printed/output calculations of CosmicCalculator that are related to spectral lines. Note that ‘--obsline’ is an input parameter, so it is discussed (with the full list of known lines) in *note CosmicCalculator input options::. ‘--listlines’ List the pre-defined rest frame spectral line wavelengths and their names on standard output, then abort CosmicCalculator. The units of the displayed wavelengths for each line can be determined with ‘--lineunit’ (see below). When this option is given, other operations on the command-line will be ignored. This is convenient when you forget the specific name of the spectral line used within Gnuastro, or when you forget the exact wavelength of a certain line. These names can be used with the options that deal with spectral lines, for example, ‘--obsline’ and ‘--lineatz’ (*note CosmicCalculator basic cosmology calculations::). The format of the output list is a two-column table, with Gnuastro's text table format (see *note Gnuastro text table format::). Therefore, if you are only looking for lines in a specific range, you can pipe the output into Gnuastro's table program and use its ‘--range’ option on the ‘wavelength’ (first) column. For example, if you only want to see the lines between 4000 and 6000 Angstroms, you can run this command: $ astcosmiccal --listlines \ | asttable --range=wavelength,4000,6000 And if you want to use the list later and have it as a table in a file, you can easily add the ‘--output’ (or ‘-o’) option to the ‘asttable’ command, and specify the filename, for example, ‘--output=lines.fits’ or ‘--output=lines.txt’. ‘--listlinesatz’ Similar to ‘--listlines’ (above), but the printed wavelength is not in the rest frame, but redshifted to the given redshift. Recall that the redshift can be specified by ‘--redshift’ directly or by ‘--obsline’, see *note CosmicCalculator input options::. For an example usage of this option, see *note Viewing spectra and redshifted lines::. ‘-i STR/FLT’ ‘--lineatz=STR/FLT’ The wavelength of the specified line at the redshift given to CosmicCalculator. The line can be specified either by its name or directly as a number (its wavelength). The units of the displayed wavelengths for each line can be determined with ‘--lineunit’ (see below). To get the list of pre-defined names for the lines and their wavelength, you can use the ‘--listlines’ option, see *note CosmicCalculator input options::. In the former case (when a name is given), the returned number is in units of Angstroms. In the latter (when a number is given), the returned value is the same units of the input number (assuming it is a wavelength). ‘--lineunit=STR’ The units to display line wavelengths above. It can take the following four values. If you need any other unit, please contact us at ‘bug-gnuastro@gnu.org’. ‘m’ Meter. ‘micro-m’ Micrometer or $10^{-6}m$. ‘nano-m’ Nanometer, or $10^{-9}m$. ‘angstrom’ Angstrom or $10^{-10}m$; the default unit when this option is not called.  File: gnuastro.info, Node: Installed scripts, Next: Makefile extensions, Prev: High-level calculations, Up: Top 10 Installed scripts ******************** Gnuastro's programs (introduced in previous chapters) are designed to be highly modular and thus contain lower-level operations on the data. However, in many contexts, certain higher-level are also shared between many contexts. For example, a sequence of calls to multiple Gnuastro programs, or a special way of running a program and treating the output. To facilitate such higher-level data analysis, Gnuastro also installs some scripts on your system with the (‘astscript-’) prefix (in contrast to the other programs that only have the ‘ast’ prefix). Like all of Gnuastro's source code, these scripts are also heavily commented. They are written in portable shell scripts (command-line environments), which does not need compilation. Therefore, if you open the installed scripts in a text editor, you can actually read them(1). For example, with this command (just replace ‘nano’ with your favorite text editor, like ‘emacs’ or ‘vim’): $ nano $(which astscript-NAME) Shell scripting is the same language that you use when typing on the command-line. Therefore shell scripting is much more widely known and used compared to C (the language of other Gnuastro programs). Because Gnuastro's installed scripts do higher-level operations, customizing these scripts for a special project will be more common than the programs. These scripts also accept options and are in many ways similar to the programs (see *note Common options::) with some minor differences: • Currently they do not accept configuration files themselves. However, the configuration files of the Gnuastro programs they call are indeed parsed and used by those programs. As a result, they do not have the following options: ‘--checkconfig’, ‘--config’, ‘--lastconfig’, ‘--onlyversion’, ‘--printparams’, ‘--setdirconf’ and ‘--setusrconf’. • They do not directly allocate any memory, so there is no ‘--minmapsize’. • They do not have an independent ‘--usage’ option: when called with ‘--usage’, they just recommend running ‘--help’. • The output of ‘--help’ is not configurable like the programs (see *note --help::). • The scripts will commonly use your installed shell and other basic command-line tools (for example, AWK or SED). Different systems have different versions and implementations of these basic tools (for example, GNU/Linux systems use GNU Bash, GNU AWK and GNU SED which are far more advanced and up to date then the minimalist AWK and SED of most other systems). Therefore, unexpected errors in these tools might come up when you run these scripts on non-GNU/Linux operating systems. If you do confront such strange errors, please submit a bug report so we fix it as soon as possible (see *note Report a bug::). * Menu: * Sort FITS files by night:: Sort many files by date. * Generate radial profile:: Radial profile of an object in an image. * SAO DS9 region files from table:: Create ds9 region file from a table. * Viewing FITS file contents with DS9 or TOPCAT:: Open DS9 (images/cubes) or TOPCAT (tables). * Zero point estimation:: Zero point of an image from reference catalog or image(s). * Pointing pattern simulation:: Simulate a stack with a given series of pointings. * Color images with gray faint regions:: Color for bright pixels and grayscale for faint. * PSF construction and subtraction:: Set of scripts to create extended PSF of an image. ---------- Footnotes ---------- (1) Gnuastro's installed programs (those only starting with ‘ast’) are not human-readable. They are written in C and need to be compiled before execution. Compilation optimizes the steps into the low-level hardware CPU instructions/language to improve efficiency. Because compiled programs do not need an interpreter like Bash on every run, they are much faster and more independent than scripts. To read the source code of the programs, look into the ‘bin/progname’ directory of Gnuastro's source (*note Downloading the source::). If you would like to read more about why C was chosen for the programs, please see *note Why C::.  File: gnuastro.info, Node: Sort FITS files by night, Next: Generate radial profile, Prev: Installed scripts, Up: Installed scripts 10.1 Sort FITS files by night ============================= FITS images usually contain (several) keywords for preserving important dates. In particular, for lower-level data, this is usually the observation date and time (for example, stored in the ‘DATE-OBS’ keyword value). When analyzing observed datasets, many calibration steps (like the dark, bias or flat-field), are commonly calculated on a per-observing-night basis. However, the FITS standard's date format (‘YYYY-MM-DDThh:mm:ss.ddd’) is based on the western (Gregorian) calendar. Dates that are stored in this format are complicated for automatic processing: a night starts in the final hours of one calendar day, and extends to the early hours of the next calendar day. As a result, to identify datasets from one night, we commonly need to search for two dates. However calendar peculiarities can make this identification very difficult. For example, when an observation is done on the night separating two months (like the night starting on March 31st and going into April 1st), or two years (like the night starting on December 31st 2018 and going into January 1st, 2019). To account for such situations, it is necessary to keep track of how many days are in a month, and leap years, etc. Gnuastro's ‘astscript-sort-by-night’ script is created to help in such important scenarios. It uses *note Fits:: to convert the FITS date format into the Unix epoch time (number of seconds since 00:00:00 of January 1st, 1970), using the ‘--datetosec’ option. The Unix epoch time is a single number (integer, if not given in sub-second precision), enabling easy comparison and sorting of dates after January 1st, 1970. You can use this script as a basis for making a much more highly customized sorting script. Here are some examples • If you need to copy the files, but only need a single extension (not the whole file), you can add a step just before the making of the symbolic links, or copies, and change it to only copy a certain extension of the FITS file using the Fits program's ‘--copy’ option, see *note HDU information and manipulation::. • If you need to classify the files with finer detail (for example, the purpose of the dataset), you can add a step just before the making of the symbolic links, or copies, to specify a file-name prefix based on other certain keyword values in the files. For example, when the FITS files have a keyword to specify if the dataset is a science, bias, or flat-field image. You can read it and to add a ‘sci-’, ‘bias-’, or ‘flat-’ to the created file (after the ‘--prefix’) automatically. For example, let's assume the observing mode is stored in the hypothetical ‘MODE’ keyword, which can have three values of ‘BIAS-IMAGE’, ‘SCIENCE-IMAGE’ and ‘FLAT-EXP’. With the step below, you can generate a mode-prefix, and add it to the generated link/copy names (just correct the filename and extension of the first line to the script's variables): modepref=$(astfits infile.fits -h1 \ | sed -e"s/'/ /g" \ | awk '$1=="MODE"{ \ if($3=="BIAS-IMAGE") print "bias-"; \ else if($3=="SCIENCE-IMAGE") print "sci-"; \ else if($3==FLAT-EXP) print "flat-"; \ else print $3, "NOT recognized"; exit 1}') Here is a description of it. We first use ‘astfits’ to print all the keywords in extension ‘1’ of ‘infile.fits’. In the FITS standard, string values (that we are assuming here) are placed in single quotes (<'>) which are annoying in this context/use-case. Therefore, we pipe the output of ‘astfits’ into ‘sed’ to remove all such quotes (substituting them with a blank space). The result is then piped to AWK for giving us the final mode-prefix: with ‘$1=="MODE"’, we ask AWK to only consider the line where the first column is ‘MODE’. There is an equal sign between the key name and value, so the value is the third column (‘$3’ in AWK). We thus use a simple ‘if-else’ structure to look into this value and print our custom prefix based on it. The output of AWK is then stored in the ‘modepref’ shell variable which you can add to the link/copy name. With the solution above, the increment of the file counter for each night will be independent of the mode. If you want the counter to be mode-dependent, you can add a different counter for each mode and use that counter instead of the generic counter for each night (based on the value of ‘modepref’). But we will leave the implementation of this step to you as an exercise. * Menu: * Invoking astscript-sort-by-night:: Inputs and outputs to this script.  File: gnuastro.info, Node: Invoking astscript-sort-by-night, Prev: Sort FITS files by night, Up: Sort FITS files by night 10.1.1 Invoking astscript-sort-by-night --------------------------------------- This installed script will read a FITS date formatted value from the given keyword, and classify the input FITS files into individual nights. For more on installed scripts please see (see *note Installed scripts::). This script can be used with the following general template: $ astscript-sort-by-night [OPTION...] FITS-files One line examples: ## Use the DATE-OBS keyword $ astscript-sort-by-night --key=DATE-OBS /path/to/data/*.fits ## Make links to the input files with the `img-' prefix $ astscript-sort-by-night --link --prefix=img- /path/to/data/*.fits This script will look into a HDU/extension (‘--hdu’) for a keyword (‘--key’) in the given FITS files and interpret the value as a date. The inputs will be separated by "night"s (11:00a.m to next day's 10:59:59a.m, spanning two calendar days, exact hour can be set with ‘--hour’). The default output is a list of all the input files along with the following two columns: night number and file number in that night (sorted by time). With ‘--link’ a symbolic link will be made (one for each input) that contains the night number, and number of file in that night (sorted by time), see the description of ‘--link’ for more. When ‘--copy’ is used instead of a link, a copy of the inputs will be made instead of symbolic link. Below you can see one example where all the ‘target-*.fits’ files in the ‘data’ directory should be separated by observing night according to the ‘DATE-OBS’ keyword value in their second extension (number ‘1’, recall that HDU counting starts from 0). You can see the output after the ‘ls’ command. $ astscript-sort-by-night -pimg- -h1 -kDATE-OBS data/target-*.fits $ ls img-n1-1.fits img-n1-2.fits img-n2-1.fits ... The outputs can be placed in a different (already existing) directory by including that directory's name in the ‘--prefix’ value, for example, ‘--prefix=sorted/img-’ will put them all under the ‘sorted’ directory. This script can be configured like all Gnuastro's programs (through command-line options, see *note Common options::), with some minor differences that are described in *note Installed scripts::. The particular options to this script are listed below: ‘-h STR’ ‘--hdu=STR’ The HDU/extension to use in all the given FITS files. All of the given FITS files must have this extension. ‘-k STR’ ‘--key=STR’ The keyword name that contains the FITS date format to classify/sort by. ‘-H FLT’ ‘--hour=FLT’ The hour that defines the next "night". By default, all times before 11:00a.m are considered to belong to the previous calendar night. If a sub-hour value is necessary, it should be given in units of hours, for example, ‘--hour=9.5’ corresponds to 9:30a.m. *Dealing with time zones:* The time that is recorded in ‘--key’ may be in UTC (Universal Time Coordinate). However, the organization of the images taken during the night depends on the local time. It is possible to take this into account by setting the ‘--hour’ option to the local time in UTC. For example, consider a set of images taken in Auckland (New Zealand, UTC+12) during different nights. If you want to classify these images by night, you have to know at which time (in UTC time) the Sun rises (or any other separator/definition of a different night). For example, if your observing night finishes before 9:00a.m in Auckland, you can use ‘--hour=21’. Because in Auckland the local time of 9:00 corresponds to 21:00 UTC. ‘-l’ ‘--link’ Create a symbolic link for each input FITS file. This option cannot be used with ‘--copy’. The link will have a standard name in the following format (variable parts are written in ‘CAPITAL’ letters and described after it): PnN-I.fits ‘P’ This is the value given to ‘--prefix’. By default, its value is ‘./’ (to store the links in the directory this script was run in). See the description of ‘--prefix’ for more. ‘N’ This is the night-counter: starting from 1. ‘N’ is just incremented by 1 for the next night, no matter how many nights (without any dataset) there are between two subsequent observing nights (its just an identifier for each night which you can easily map to different calendar nights). ‘I’ File counter in that night, sorted by time. ‘-c’ ‘--copy’ Make a copy of each input FITS file with the standard naming convention described in ‘--link’. With this option, instead of making a link, a copy is made. This option cannot be used with ‘--link’. ‘-p STR’ ‘--prefix=STR’ Prefix to append before the night-identifier of each newly created link or copy. This option is thus only relevant with the ‘--copy’ or ‘--link’ options. See the description of ‘--link’ for how it is used. For example, with ‘--prefix=img-’, all the created file names in the current directory will start with ‘img-’, making outputs like ‘img-n1-1.fits’ or ‘img-n3-42.fits’. ‘--prefix’ can also be used to store the links/copies in another directory relative to the directory this script is being run (it must already exist). For example, ‘--prefix=/path/to/processing/img-’ will put all the links/copies in the ‘/path/to/processing’ directory, and the files (in that directory) will all start with ‘img-’. ‘--stdintimeout=INT’ Number of micro-seconds to wait for standard input within this script. This does not correspond to general inputs into the script, inputs to the script should always be given as a file. However, within the script, pipes are often used to pass the output of one program to another. The value given to this option will be passed to those internal pipes. When running this script, if you confront an error, saying "No input!", you should be able to fix it by giving a larger number to this option (the default value is 10000000 micro-seconds or 10 seconds).  File: gnuastro.info, Node: Generate radial profile, Next: SAO DS9 region files from table, Prev: Sort FITS files by night, Up: Installed scripts 10.2 Generate radial profile ============================ The 1 dimensional radial profile of an object is an important parameter in many aspects of astronomical image processing. For example, you want to study how the light of a galaxy is distributed as a function of the radial distance from the center. In other cases, the radial profile of a star can show the PSF (see *note PSF::). Gnuastro's ‘astscript-radial-profile’ script is created to obtain such radial profiles for one object within an image. This script uses *note MakeProfiles:: to generate elliptical apertures with the values equal to the distance from the center of the object and *note MakeCatalog:: for measuring the values over the apertures. * Menu: * Invoking astscript-radial-profile:: How to call astscript-radial-profile  File: gnuastro.info, Node: Invoking astscript-radial-profile, Prev: Generate radial profile, Up: Generate radial profile 10.2.1 Invoking astscript-radial-profile ---------------------------------------- This installed script will measure the radial profile of an object within an image. A general overview of this script has been published in Infante-Sainz et al. 2024) (https://arxiv.org/abs/2401.05303); please cite it if this script proves useful in your research. For more on installed scripts please see (see *note Installed scripts::). This script can be used with the following general template: $ astscript-radial-profile [OPTION...] FITS-file Examples: ## Generate the radial profile with default options (assuming the ## object is in the center of the image, and using the mean). $ astscript-radial-profile image.fits ## Generate the radial profile centered at x=44 and y=37 (in pixels), ## up to a radial distance of 19 pixels, use the mean value. $ astscript-radial-profile image.fits --center=44,37 --rmax=19 ## Generate the radial profile centered at x=44 and y=37 (in pixels), ## up to a radial distance of 100 pixels, compute sigma clipped ## mean and standard deviation (sigclip-mean and sigclip-std) using ## 5 sigma and 0.1 tolerance (default is 3 sigma and 0.2 tolerance). $ astscript-radial-profile image.fits --center=44,37 --rmax=100 \ --sigmaclip=5,0.1 \ --measure=sigclip-mean,sigclip-std ## Generate the radial profile centered at RA=20.53751695, ## DEC=0.9454292263, up to a radial distance of 88 pixels, ## axis ratio equal to 0.32, and position angle of 148 deg. ## Name the output table as `radial-profile.fits' $ astscript-radial-profile image.fits --mode=wcs \ --center=20.53751695,0.9454292263 \ --rmax=88 --axis-ratio=0.32 \ --position-angle=148 -oradial-profile.fits ## Generate the radial profile centered at RA=40.062675270971, ## DEC=-8.1511992735126, up to a radial distance of 20 pixels, ## and calculate the SNR using the INPUT-NO-SKY and SKY-STD ## extensions of the NoiseChisel output file. $ astscript-radial-profile image_detected.fits -hINPUT-NO-SKY \ --mode=wcs --measure=sn \ --center=40.062675270971,-8.1511992735126 \ --rmax=20 --stdhdu=SKY_STD ## Generate the radial profile centered at RA=40.062675270971, ## DEC=-8.1511992735126, up to a radial distance of 20 pixels, ## and compute the SNR with a fixed value for std, std=10. $ astscript-radial-profile image.fits -h1 --mode=wcs --rmax=20 \ --center=40.062675270971,-8.1511992735126 \ --measure=sn --instd=10 ## Generate the radial profile centered at X=1201, Y=1201 pixels, up ## to a radial distance of 20 pixels and compute the median and the ## SNR using the first extension of sky-std.fits as the dataset for std ## values. $ astscript-radial-profile image.fits -h1 --mode=img --rmax=20 \ --center=1201,1201 --measure=median,sn \ --instd=sky-std.fits This installed script will read a FITS image and will use it as the basis for constructing the radial profile. The output radial profile is a table (FITS or plain-text) containing the radial distance from the center in the first row and the specified measurements in the other columns (mean, median, sigclip-mean, sigclip-median, etc.). To measure the radial profile, this script needs to generate temporary files. All these temporary files will be created within the directory given to the ‘--tmpdir’ option. When ‘--tmpdir’ is not called, a temporary directory (with a name based on the inputs) will be created in the running directory. If the directory does not exist at run-time, this script will create it. After the output is created, this script will delete the directory by default, unless you call the ‘--keeptmp’ option. With the default options, the script will generate a circular radial profile using the mean value and centered at the center of the image. In order to have more flexibility, several options are available to configure for the desired radial profile. In this sense, you can change the center position, the maximum radius, the axis ratio and the position angle (elliptical apertures are considered), the operator for obtaining the profiles, and others (described below). *Debug your profile:* to debug your results, especially close to the center of your object, you can see the radial distance associated to every pixel in your input. To do this, use ‘--keeptmp’ to keep the temporary files, and compare ‘crop.fits’ (crop of your input image centered on your desired coordinate) with ‘apertures.fits’ (radial distance of each pixel). *Finding properties of your elliptical target: * you want to measure the radial profile of a galaxy, but do not know its exact location, position angle or axis ratio. To obtain these values, you can use *note NoiseChisel:: to detect signal in the image, feed it to *note Segment:: to do basic segmentation, then use *note MakeCatalog:: to measure the center (‘--x’ and ‘--y’ in MakeCatalog), axis ratio (‘--axis-ratio’) and position angle (‘--position-angle’). *Masking other sources:* The image of an astronomical object will usually have many other sources with your main target. A crude solution is to use sigma-clipped measurements for the profile. However, sigma-clipped measurements can easily be biased when the number of sources at each radial distance increases at larger distances. Therefore a robust solution is to mask all other detections within the image. You can use *note NoiseChisel:: and *note Segment:: to detect and segment the sources, then set all pixels that do not belong to your target to blank using *note Arithmetic:: (in particular, its ‘where’ operator). ‘-h STR’ ‘--hdu=STR’ The HDU/extension of the input image to use. ‘-o STR’ ‘--output=STR’ Filename of measured radial profile. It can be either a FITS table, or plain-text table (determined from your given file name suffix). ‘-c FLT[,FLT[,...]]’ ‘--center=FLT[,FLT[,...]]’ The central position of the radial profile. This option is used for placing the center of the profiles. This parameter is used in *note Crop:: to center and crop the region. The positions along each dimension must be separated by a comma (<,>) and fractions are also acceptable. The number of values given to this option must be the same as the dimensions of the input dataset. The units of the coordinates are read based on the value to the ‘--mode’ option, see below. ‘-O STR’ ‘--mode=STR’ Interpret the center position of the object (values given to ‘--center’) in image or WCS coordinates. This option thus accepts only two values: ‘img’ or ‘wcs’. By default, it is ‘--mode=img’. ‘-R FLT’ ‘--rmax=FLT’ Maximum radius for the radial profile (in pixels). By default, the radial profile will be computed up to a radial distance equal to the maximum radius that fits into the image (assuming circular shape). ‘-P INT’ ‘--precision=INT’ The precision (number of digits after the decimal point) in resolving the radius. The default value is ‘--precision=0’ (or ‘-P0’), and the value cannot be larger than ‘6’. A higher precision is primarily useful when the very central few pixels are important for you. A larger precision will over-resolve larger radial regions, causing scatter to significantly affect the measurements. For example, in the command below, we will generate the radial profile of an imaginary source (at RA,DEC of 1.23,4.567) and check the output without setting a precision: $ astscript-radial-profile image.fits --center=1.23,4.567 \ --mode=wcs --measure=mean,area --rmax=10 \ --output=radial.fits --quiet $ asttable radial.fits --head=10 -ffixed -p4 0.0000 0.0139 1 1.0000 0.0048 8 2.0000 0.0023 16 3.0000 0.0015 20 4.0000 0.0011 24 5.0000 0.0008 40 6.0000 0.0006 36 7.0000 0.0005 48 8.0000 0.0004 56 9.0000 0.0003 56 Let's repeat the command above, but use a precision of 3 to resolve more finer details of the radial profile, while only printing the top 10 rows of the profile: $ astscript-radial-profile image.fits --center=1.23,4.567 \ --mode=wcs --measure=mean,area --rmax=10 \ --precision=3 --output=radial.fits --quiet $ asttable radial.fits --head=10 -ffixed -p4 0.0000 0.0139 1 1.0000 0.0056 4 1.4140 0.0040 4 2.0000 0.0027 4 2.2360 0.0024 8 2.8280 0.0018 4 3.0000 0.0017 4 3.1620 0.0016 8 3.6050 0.0013 8 4.0000 0.0011 4 Do you see how many more radii have been added? Between 1.0 and 2.0, we now have one extra radius, between 2.0 to 3.0, we have two new radii and so on. If you go to larger and larger radii, you will notice that they get resolved into many sub-components and the number of pixels used in each measurement will not be significant (you can already see that in the comparison above). This has two problems: 1. statistically, the scatter in larger radii (where the signal-to-noise ratio is usually low will make it hard to interpret the profile. 2. technically, the output table will have many more rows! *Use higher precision only for small radii:* If you want to look at the whole profile (or the outer parts!), don't set the precision, the default mode is usually more than enough! But when you are targeting the very central few pixels (usually less than a pixel radius of 5), use a higher precision. ‘-v INT’ ‘--oversample=INT’ Oversample the input dataset to the fraction given to this option. Therefore if you set ‘--rmax=20’ for example, and ‘--oversample=5’, your output will have 100 rows (without ‘--oversample’ it will only have 20 rows). Unless the object is heavily undersampled (the pixels are larger than the actual object), this method provides a much more accurate result and there are sufficient number of pixels to get the profile accurately. Due to the discrete nature of pixels, if you use this option to oversample your profile, set ‘--precision=0’. Otherwise, your profile will become step-like (with several radii having a single value). ‘-u INT’ ‘--undersample=INT’ Undersample the input dataset by the number given to this option. This option is for considering larger apertures than the original pixel size (aperture size is equal to 1 pixel). For example, if a radial profile computed by default has 100 different radii (apertures of 1 pixel width), by considering ‘--undersample=2’ the radial profile will be computed over apertures of 2 pixels, so the final radial profile will have 50 different radii. This option is good to measure over a larger number of pixels to improve the measurement. ‘-Q FLT’ ‘--axis-ratio=FLT’ The axis ratio of the apertures (minor axis divided by the major axis in a 2D ellipse). By default (when this option is not given), the radial profile will be circular (axis ratio of 1). This parameter is used as the option ‘--qcol’ in the generation of the apertures with ‘astmkprof’. ‘-p FLT’ ‘--position-angle=FLT’ The position angle (in degrees) of the profiles relative to the first FITS axis (horizontal when viewed in SAO DS9). By default, it is ‘--position-angle=0’, which means that the semi-major axis of the profiles will be parallel to the first FITS axis. ‘-a FLT,FLT’ ‘--azimuth=FLT,FLT’ Limit the profile to the given azimuthal angle range (two numbers given to this option, in degrees, from 0 to 360) from the major axis (defined by ‘--position-angle’). The radial profile will therefore be created on a wedge-like shape, not the full circle/ellipse. The pixel containing the center of the profile will always be included in the profile (because it contains all azimuthal angles!). If the first angle is _smaller_ than the second (for example, ‘--azimuth=10,80’), the region between, or _inside_, the two angles will be used. Otherwise (for example, ‘--azimuth=80,10’), the region _outside_ the two angles will be used. The latter case can be useful when you want to ignore part of the 2D shape (for example, due to a bright star that can be contaminating it). You can visually see the shape of the region used by running this script with ‘--keeptmp’ and viewing the ‘values.fits’ and ‘apertures.fits’ files of the temporary directory with a FITS image viewer like *note SAO DS9::. You can use *note Viewing FITS file contents with DS9 or TOPCAT:: to open them together in one instance of DS9, with both frames matched and locked (for easy comparison in case you want to zoom-in or out). For example, see the commands below (based on your target object, just change the image name, center, position angle, etc.): ## Generate the radial profile $ astscript-radial-profile image.fits --center=1.234,6.789 \ --mode=wcs --rmax=50 --position-angle=20 \ --axis-ratio=0.8 --azimuth=95,150 --keeptmp \ --tmpdir=radial-tmp ## Visually check the values and apertures used. $ astscript-fits-view radial-tmp/values.fits \ radial-tmp/apertures.fits ‘-m STR’ ‘--measure=STR’ The operator for measuring the values over each radial distance. The values given to this option will be directly passed to *note MakeCatalog::. As a consequence, all MakeCatalog measurements like the magnitude, magnitude error, median, mean, signal-to-noise ratio (S/N), std, surface brightness, sigclip-mean, and sigclip-number can be used here. For a full list of MakeCatalog's measurements, please run ‘astmkcatalog --help’ or see *note MakeCatalog measurements::. Multiple values can be given to this option, each separated by a comma. This option can also be called multiple times. *Masking background/foreground objects:* For crude rejection of outliers, you can use sigma-clipping using MakeCatalog measurements like ‘--sigclip-mean’ or ‘--sigclip-mean-sb’ (see *note MakeCatalog measurements::). To properly mask the effect of background/foreground objects from your target object's radial profile, you can use ‘astscript-psf-stamp’ script, see *note Invoking astscript-psf-stamp::, and feed it the output of *note Segment::. This script will mask unwanted objects from the image that is later used to measure the radial profile. Some measurements by MakeCatalog require a per-pixel sky standard deviation (for example, magnitude error or S/N). Therefore when asking for such measurements, use the ‘--instd’ option (described below) to specify the per-pixel sky standard deviation over each pixel. For other measurements like the magnitude or surface brightness, MakeCatalog will need a Zero point, which you can set with the ‘--zeropoint’ option. For example, by setting ‘--measure=mean,sigclip-mean --measure=median’, the mean, sigma-clipped mean and median values will be computed. The output radial profile will have 4 columns in this order: radial distance, mean, sigma-clipped and median. By default (when this option is not given), the mean of all pixels at each radial position will be computed. ‘-s FLT,FLT’ ‘--sigmaclip=FLT,FLT’ Sigma clipping parameters: only relevant if sigma-clipping operators are requested by ‘--measure’. For more on sigma-clipping, see *note Sigma clipping::. If given, the value to this option is directly passed to the ‘--sigmaclip’ option of *note MakeCatalog::, see *note MakeCatalog inputs and basic settings::. By default (when this option is not given), the default values within MakeCatalog will be used. To see the default value of this option in MakeCatalog, you can run this command: $ astmkcatalog -P | grep " sigmaclip " ‘-z FLT’ ‘--zeropoint=FLT’ The Zero point of the input dataset. This is necessary when you request measurements like magnitude, or surface brightness. ‘-Z’ ‘--zeroisnotblank’ Account for zero-valued pixels in the profile. By default, such pixels are not considered (when this script crops the necessary region of the image before generating the profile). The long format of this option is identical to a similarly named option in Crop (see *note Invoking astcrop::). When this option is called, it is passed directly to Crop, therefore the zero-valued pixels are not considered as blank and used in the profile creation. ‘-i FLT/STR’ ‘--instd=FLT/STR’ Sky standard deviation as a single number (FLT) or as the filename (STR) containing the image with the std value for each pixel (the HDU within the file should be given to the ‘--stdhdu’ option mentioned below). This is only necessary when the requested measurement (value given to ‘--measure’) by MakeCatalog needs the Standard deviation (for example, the signal-to-noise ratio or magnitude error). If your measurements do not require a standard deviation, it is best to ignore this option (because it will slow down the script). ‘-d INT/STR’ ‘--stdhdu=INT/STR’ HDU/extension of the sky standard deviation image specified with ‘--instd’. ‘-t STR’ ‘--tmpdir=STR’ Several intermediate files are necessary to obtain the radial profile. All of these temporal files are saved into a temporal directory. With this option, you can directly specify this directory. By default (when this option is not called), it will be built in the running directory and given an input-based name. If the directory does not exist at run-time, this script will create it. Once the radial profile has been obtained, this directory is removed. You can disable the deletion of the temporary directory with the ‘--keeptmp’ option. ‘-k’ ‘--keeptmp’ Do not delete the temporary directory (see description of ‘--tmpdir’ above). This option is useful for debugging. For example, to check that the profiles generated for obtaining the radial profile have the desired center, shape and orientation. ‘--cite’ Give BibTeX and acknowledgment information for citing this script within your paper. For more, see ‘Operating mode options’.  File: gnuastro.info, Node: SAO DS9 region files from table, Next: Viewing FITS file contents with DS9 or TOPCAT, Prev: Generate radial profile, Up: Installed scripts 10.3 SAO DS9 region files from table ==================================== Once your desired catalog (containing the positions of some objects) is created (for example, with *note MakeCatalog::, *note Match::, or *note Table::) it often happens that you want to see your selected objects on an image for a feeling of the spatial properties of your objects. For example, you want to see their positions relative to each other. In this section we describe a simple installed script that is provided within Gnuastro for converting your given columns to an SAO DS9 region file to help in this process. SAO DS9(1) is one of the most common FITS image visualization tools in astronomy and is free software. * Menu: * Invoking astscript-ds9-region:: How to call astscript-ds9-region ---------- Footnotes ---------- (1) <http://ds9.si.edu>  File: gnuastro.info, Node: Invoking astscript-ds9-region, Prev: SAO DS9 region files from table, Up: SAO DS9 region files from table 10.3.1 Invoking astscript-ds9-region ------------------------------------ This installed script will read two positional columns within an input table and generate an SAO DS9 region file to visualize the position of the given objects over an image. For more on installed scripts please see (see *note Installed scripts::). This script can be used with the following general template: ## Use the RA and DEC columns of 'table.fits' for the region file. $ astscript-ds9-region table.fits --column=RA,DEC \ --output=ds9.reg ## Select objects with a magnitude between 18 to 20, and generate the ## region file directly (through a pipe), each region with radius of ## 0.5 arcseconds. $ asttable table.fits --range=MAG,18:20 --column=RA,DEC \ | astscript-ds9-region --column=1,2 --radius=0.5 ## With the first command, select objects with a magnitude of 25 to 26 ## as red regions in 'bright.reg'. With the second command, select ## objects with a magnitude between 28 to 29 as a green region and ## show both. $ asttable cat.fits --range=MAG_F160W,25:26 -cRA,DEC \ | astscript-ds9-region -c1,2 --color=red -obright.reg $ asttable cat.fits --range=MAG_F160W,28:29 -cRA,DEC \ | astscript-ds9-region -c1,2 --color=green \ --command="ds9 image.fits -regions bright.reg" The input can either be passed as a named file, or from standard input (a pipe). Only the ‘--column’ option is mandatory (to specify the input table columns): two columns from the input table must be specified, either by name (recommended) or number. You can optionally also specify the region's radius, width and color of the regions with the ‘--radius’, ‘--width’ and ‘--color’ options, otherwise default values will be used for these (described under each option). The created region file will be written into the file name given to ‘--output’. When ‘--output’ is not called, the default name of ‘ds9.reg’ will be used (in the running directory). If the file exists before calling this script, it will be overwritten, unless you pass the ‘--dontdelete’ option. Optionally you can also use the ‘--command’ option to give the full command that should be run to execute SAO DS9 (see example above and description below). In this mode, the created region file will be deleted once DS9 is closed (unless you pass the ‘--dontdelete’ option). A full description of each option is given below. ‘-h INT/STR’ ‘--hdu INT/STR’ The HDU of the input table when a named FITS file is given as input. The HDU (or extension) can be either a name or number (counting from zero). For more on this option, see *note Input output options::. ‘-c STR,STR’ ‘--column=STR,STR’ Identifiers of the two positional columns to use in the DS9 region file from the table. They can either be in WCS (RA and Dec) or image (pixel) coordinates. The mode can be specified with the ‘--mode’ option, described below. ‘-n STR’ ‘--namecol=STR’ The column containing the name (or label) of each region. The type of the column (numeric or a character-based string) is irrelevant: you can use both types of columns as a name or label for the region. This feature is useful when you need to recognize each region with a certain ID or property (for example, magnitude or redshift). ‘-m wcs|img’ ‘--mode=wcs|org’ The coordinate system of the positional columns (can be either ‘--mode=wcs’ and ‘--mode=img’). In the WCS mode, the values within the columns are interpreted to be RA and Dec. In the image mode, they are interpreted to be pixel X and Y positions. This option also affects the interpretation of the value given to ‘--radius’. When this option is not explicitly given, the columns are assumed to be in WCS mode. ‘-C STR’ ‘--color=STR’ The color to use for created regions. These will be directly interpreted by SAO DS9 when it wants to open the region file so it must be recognizable by SAO DS9. As of SAO DS9 8.2, the recognized color names are ‘black’, ‘white’, ‘red’, ‘green’, ‘blue’, ‘cyan’, ‘magenta’ and ‘yellow’. The default color (when this option is not called) is ‘green’ ‘-w INT’ ‘--width=INT’ The line width of the regions. These will be directly interpreted by SAO DS9 when it wants to open the region file so it must be recognizable by SAO DS9. The default value is ‘1’. ‘-r FLT’ ‘--radius=FLT’ The radius of all the regions. In WCS mode, the radius is assumed to be in arc-seconds, in image mode, it is in pixel units. If this option is not explicitly given, in WCS mode the default radius is 1 arc-seconds and in image mode it is 3 pixels. ‘--dontdelete’ If the output file name exists, abort the program and do not over-write the contents of the file. This option is thus good if you want to avoid accidentally writing over an important file. Also, do not delete the created region file when ‘--command’ is given (by default, when ‘--command’ is given, the created region file will be deleted after SAO DS9 closes). ‘-o STR’ ‘--output=STR’ Write the created SAO DS9 region file into the name given to this option. If not explicitly given on the command-line, a default name of ‘ds9.reg’ will be used. If the file already exists, it will be over-written, you can avoid the deletion (or over-writing) of an existing file with the ‘--dontdelete’. ‘--command="STR"’ After creating the region file, run the string given to this option as a command-line command. The SAO DS9 region command will be appended to the end of the given command. Because the command will mostly likely contain white-space characters it is recommended to put the given string in double quotations. For example, let's assume ‘--command="ds9 image.fits -zscale"’. After making the region file (assuming it is called ‘ds9.reg’), the following command will be executed: ds9 image.fits -zscale -regions ds9.reg You can customize all aspects of SAO DS9 with its command-line options, therefore the value of this option can be as long and complicated as you like. For example, if you also want the image to fit into the window, this option will be: ‘--command="ds9 image.fits -zscale -zoom to fit"’. You can see the SAO DS9 command-line descriptions by clicking on the "Help" menu and selecting "Reference Manual". In the opened window, click on "Command Line Options".  File: gnuastro.info, Node: Viewing FITS file contents with DS9 or TOPCAT, Next: Zero point estimation, Prev: SAO DS9 region files from table, Up: Installed scripts 10.4 Viewing FITS file contents with DS9 or TOPCAT ================================================== The FITS definition allows for multiple extensions (or HDUs) inside one FITS file. Each HDU can have a completely independent dataset inside of it. One HDU can be a table, another can be an image and another can be another independent image. For example, each image HDU can be one CCD of a multi-CCD camera, or in processed images one can be the deep science image and the next can be its weight map, alternatively, one HDU can be an image, and another can be the catalog/table of objects within it. The most common software for viewing FITS images is SAO DS9 (see *note SAO DS9::) and for plotting tables, TOPCAT is the most commonly used tool in astronomy (see *note TOPCAT::). After installing them (as described in the respective appendix linked in the previous sentence), you can open any number of FITS images or tables with DS9 or TOPCAT with the commands below: $ ds9 image-a.fits image-b.fits $ topcat table-a.fits table-b.fits But usually the default mode is not enough. For example, in DS9, the window can be too small (not covering the height of your monitor), you probably want to match and lock multiple images, you have a favorite color map that you prefer to use, or you may want to open a multi-extension FITS file as a cube. Using the simple commands above, you need to manually do all these in the DS9 window once it opens and this can take several tens of seconds (which is enough to distract you from what you wanted to inspect). For example, if you have a multi-extension file containing 2D images, one way to load and switch between each 2D extension is to take the following steps in the SAO DS9 window: "File"→"Open Other"→"Open Multi Ext Cube" and then choose the Multi extension FITS file in your computer's file structure. The method above is a little tedious to do every time you want view a multi-extension FITS file. A different series of steps is also necessary if you the extensions are 3D data cubes (since they are already cubes, and should be opened as multi-frame). Furthermore, if you have multiple images and want to "match" and "lock" them (so when you zoom-in to one, all get zoomed-in) you will need several other sequence of menus and clicks. Fortunately SAO DS9 also provides command-line options that you can use to specify a particular behavior before/after opening a file. One of those options is ‘-mecube’ which opens a FITS image as a multi-extension data cube (treating each 2D extension as a slice in a 3D cube). This allows you to flip through the extensions easily while keeping all the settings similar. Just to avoid confusion, note that SAO DS9 does not follow the GNU style of separating long and short options as explained in *note Arguments and options::. In the GNU style, this 'long' (multi-character) option should have been called like ‘--mecube’, but SAO DS9 follows its own conventions. For example, try running ‘$ds9 -mecube foo.fits’ to see the effect (for example, on the output of *note NoiseChisel::). If the file has multiple extensions, a small window will also be opened along with the main DS9 window. This small window allows you to slide through the image extensions of ‘foo.fits’. If ‘foo.fits’ only consists of one extension, then SAO DS9 will open as usual. On the other hand, for visualizing the contents of tables (that are also commonly stored in the FITS format), you need to call a different software (most commonly, people use TOPCAT, see *note TOPCAT::). And to make things more inconvenient, by default both of these are only installed as command-line software, so while you are navigating in your GUI, you need to open a terminal there, and run these commands. All of the issues above are the founding purpose of the installed script that is introduced in *note Invoking astscript-fits-view::. * Menu: * Invoking astscript-fits-view:: How to call this script  File: gnuastro.info, Node: Invoking astscript-fits-view, Prev: Viewing FITS file contents with DS9 or TOPCAT, Up: Viewing FITS file contents with DS9 or TOPCAT 10.4.1 Invoking astscript-fits-view ----------------------------------- Given any number of FITS files, this script will either open SAO DS9 (for images or cubes) or TOPCAT (for tables) to visualize their contents in a graphic user interface (GUI). For more on installed scripts please see (see *note Installed scripts::). This script can be used with the following general template: $ astscript-fits-view [OPTION] input.fits [input-b.fits ...] One line examples ## Call TOPCAT to load all the input FITS tables. $ astscript-fits-view table-*.fits ## Call SAO DS9 to open all the input FITS images. $ astscript-fits-view image-*.fits This script will use Gnuastro's *note Fits:: program to see if the file is a table or image. If the first input file contains an image HDU, then the sequence of files will be given to *note SAO DS9::. Otherwise, the input(s) will be given to *note TOPCAT:: to visualize (plot) as tables. When opening DS9 it will also inspect the dimensionality of the first image HDU of the first input and open it slightly differently when the input is 2D or 3D: 2D DS9's ‘-mecube’ will be used to open all the 2D extensions of each input file as a "Multi-extension cube". A "Cube" window will also be opened with DS9 that can be used to slide/flip through each extensions. When multiple files are given, each file will be in one "frame". 3D DS9's ‘-multiframe’ option will be used to open all the extensions in a separate "frame" (since each input is already a 3D cube, the ‘-mecube’ option can be confusing). To flip through the extensions (while keeping the slice fixed), click the "frame" button on the top row of buttons, then use the last four buttons of the bottom row ("first", "previous", "next" and "last") to change between the extensions. If multiple files are given, there will be a separate frame for each HDU of each input (each HDU's name or number will be put in square brackets after its name). *Double-clicking on FITS file to open DS9 or TOPCAT:* for those graphic user interface (GUI) that follow the freedesktop.org standards (including GNOME, KDS Plasma, or Xfce) Gnuastro installs a ‘fits-view.desktop’ file to instruct your GUI to call this script for opening FITS files when you click on them. To activate this feature take the following steps: 1. Run the following command, while replacing ‘PREFIX’. If you do not know what to put in ‘PREFIX’, run ‘which astfits’ on the command-line, and extract ‘PREFIX’ from the output (the string before ‘/bin/astfits’). For more, see *note Installation directory::. ln -sf PREFIX/share/gnuastro/astscript-fits-view.desktop \ ~/.local/share/applications/ 2. Right-click on a FITS file, and choose these items in order (based on GNOME, may be different in KDE or Xfce): "Open with other application"→"View all applications"→"astscript-fits-view". This script takes the following options ‘-h STR’ ‘--hdu=STR’ The HDU (extension) of the input dataset to display. The value can be the HDU name or number (the first HDU is counted from 0). ‘-p STR’ ‘--prefix=STR’ Directory to search for SAO DS9 or TOPCAT's executables (assumed to be ‘ds9’ and ‘topcat’). If not called they will be assumed to be present in your ‘PATH’ (see *note Installation directory::). If you do not have them already installed, their installation directories are available in *note SAO DS9:: and *note TOPCAT:: (they can be installed in non-system-wide locations that do not require administrator/root permissions). ‘-s STR’ ‘--ds9scale=STR’ The string to give to DS9's ‘-scale’ option. You can use this option to use a different scaling. The Fits-view script will place ‘-scale’ before your given string when calling DS9. If you do not call this option, the default behavior is to cal DS9 with: ‘-scale mode zscale’ or ‘--ds9scale="mode zscale"’ when using this script. The Fits-view script has the following aliases to simplify the calling of this option (and avoid the double-quotations and ‘mode’ in the example above): ‘zscale’ or ‘--ds9scale=zscale’ equivalent to ‘--ds9scale="mode zscale"’. ‘minmax’ or ‘--ds9scale=minmax’ equivalent to ‘--ds9scale="mode minmax"’. ‘-c=FLT,FLT’ ‘--ds9center=FLT,FLT’ The central coordinate for DS9's view of the FITS image after it opens. This is equivalent to the "Pan" button in DS9. The nature of the coordinates will be determined by the ‘--ds9mode’ option that is described below. ‘-O img/wcs’ ‘--ds9mode=img/wcs’ The coordinate system (or mode) to interpret the values given to ‘--ds9center’. This can either be ‘img’ (or DS9's "Image" coordinates) or ‘wcs’ (or DS9's "wcs fk5" coordinates). ‘-g INTxINT’ ‘--ds9geometry=INTxINT’ The initial DS9 window geometry (value to DS9's ‘-geometry’ option). ‘-m’ ‘--ds9colorbarmulti’ Do not show a single color bar for all the loaded images. By default this script will call DS9 in a way that a single color bar is shown for any number of images. A single color bar is preferred for two reasons: 1) when there are a lot of images, they consume a large fraction of the display area. 2) the color-bars are locked by this script, so there is no difference between! With this option, you can have separate color bars under each image.  File: gnuastro.info, Node: Zero point estimation, Next: Pointing pattern simulation, Prev: Viewing FITS file contents with DS9 or TOPCAT, Up: Installed scripts 10.5 Zero point estimation ========================== Through the "zero point", we are able to give physical units to the pixel values of an image (often in units of "counts" or ADUs) and thus compare them with other images (as well as measurements that are done on them). The zero point is therefore an important calibration of pixel values (as astromerty is a calibration of the pixel positions). The fundamental concepts behind the zero point are described in *note Brightness flux magnitude::. We will therefore not go deeper into the basics here and stick to the practical aspects of it. The purpose of Gnuastro’s ‘astscript-zeropoint’ script is to obtain the zero point of an image by considering another image (where the zero point is already known), or a catalog. In the The operation involves multiple lower-level programs in a standard series of steps. For example, when using another image, the script will take the following steps: 1. Download the Gaia catalog that overlaps with the input image using Gnuastro’s Query program (see *note Query::). This is done to determine the stars within the image(1). 2. Perform aperture photometry(2) with *note MakeProfiles:: *note MakeCatalog::. We will assume a zero point of 0 for the input image. If the reference is an image, then we should perform aperture photometry also in that image. 3. Match the two catalogs(3) with *note Match::. 4. The difference between the input and reference magnitudes should be independent of the magnitude of the stars. This does not hold when the stars are saturated in one/both the images (giving us a bright-limit for the magnitude range to use) or for stars fainter than a certain magnitude, where the signal-to-noise ratio drops significantly in one/both images (giving us a faint limit for the magnitude range to use). 5. Since a zero point of 0 was used for the input image, the magnitude difference above (in the reliable magnitude range) is the zero point of the input image. In the "Tutorials" chapter of this Gnuastro book, there are two tutorials dedicated to the usage of this script. The first uses an image as a reference (*note Zero point tutorial with reference image::) and the second uses a catalog (*note Zero point tutorial with reference catalog::). For the full set of options an a detailed description of each, see *note Invoking astscript-zeropoint::. * Menu: * Invoking astscript-zeropoint:: How to call the script ---------- Footnotes ---------- (1) Stars have an almost identical shape in the image (as opposed to galaxies for example), using confirmed stars will produce a more reliable result. (2) For a complete tutorial on aperture photometry, see *note Aperture photometry::. (3) For a tutorial on matching catalogs, see *note Matching catalogs::).  File: gnuastro.info, Node: Invoking astscript-zeropoint, Prev: Zero point estimation, Up: Zero point estimation 10.5.1 Invoking astscript-zeropoint ----------------------------------- This installed script will calculate the zero point of an input image to calibrate it. A general overview of this script has been published in Eskandarlou et al. 2023 (https://arxiv.org/abs/2312.04263); please cite it if this script proves useful in your research. The reference can be an image or catalog (which have been previously calibrated) The executable name is ‘astscript-zeropoint’, with the following general template: ## Using a reference image in four apertures. $ astscript-zeropoint image.fits --hdu=1 \ --refimgs=ref-img1.fits,ref-img2.fits \ --refimgshdu=1,1 \ --refimgszp=22.5,22.5 \ --aperarcsec=1.5,2,2.5,3 \ --magnituderange=16,18 \ --output=output.fits ## Using a reference catalog $ astscript-zeropoint image.fits --hdu=1 \ --refcat=cat.fits \ --refcathdu=1 \ --aperarcsec=1.5,2,2.5,3 \ --magnituderange=16,18 \ --output=output.fits To learn more about the core concepts behind the zero point, please see *note Brightness flux magnitude::. For a practical review of how to optimally use this script and ways to interpret its results, we have two tutorials: *note Zero point tutorial with reference image:: and *note Zero point tutorial with reference catalog::. To find the zero point of your input image, this script can use a reference image (that already has a zero point) or a reference catalog (that just has magnitudes). In any case, it is mandatory to identify at least one aperture for aperture photometry over the image (using ‘--aperarcsec’). If reference image(s) is(are) given, it is mandatory to specify its(their) zero point(s) using the ‘--refimgszp’ option (it can take a separate value for each reference image). When a catalog is given, it should already contain the magnitudes of the object (you can specify which column to use). This script will not estimate the zero point based on all the objects in the reference image or catalog. It will first query Gaia database and only select objects have a significant parallax (because Gaia's algorithms sometimes confuse galaxies and stars based on pure morphology). You can bypass this step (which needs internet connection and can only be used on real data, not simulations) using the ‘--starcat’ option described in *note zero point options::. This script will then match the catalog of stars (either through Gaia or ‘--starcat’) with the reference catalog and only use them. If the reference is an image, it will simply use the stars catalog to do aperture photometry. By default, this script will estimate the number of available threads and run all independent steps in parallel on those threads. To control this behavior (and allow it to only run on a certain number of threads), you can use the ‘--numthreads’ option. During its operation, this script will build a temporary file in the running directory that will be deleted once it is finished. The ‘--tmpdir’ option can be used to manually set the temporary directory's location at any location in your file system. The ‘--keeptmp’ option can be used to stop the deletion of that directory (useful for when you want to debug the script or better understand what it does). * Menu: * zero point output:: Format of the output. * zero point options:: List and details of options.  File: gnuastro.info, Node: zero point output, Next: zero point options, Prev: Invoking astscript-zeropoint, Up: Invoking astscript-zeropoint 10.5.1.1 astscript-zeropoint output ................................... The output will be a multi-extension FITS table. The first table in the output gives the zero point and its standard deviation for all the requested apertures. This gives you the ability to inspect them and select the best. The other table(s) give the exact measurements for each star that was used (if you use ‘--keepzpap’, it will be for all your apertures, if not, only for the aperture with the smallest standard deviation). For a full tutorial on how to interpret the output of this script, see *note Zero point tutorial with reference image:: If you just want the estimated zero point with the least standard deviation, this script will write it as a FITS keyword in the first table of the output. ‘ZPAPER’ Read as "Zero Point APERture". This shows the aperture radius (in arcseconds) that had the smallest standard deviation in the estimated zero points. ‘ZPVALUE’ The zero point estimation for the aperture of ‘ZPAPER’. ‘ZPSTD’ The standard deviation of the zero point (for all the stars used, within the aperture of ‘ZPAPER’). ‘ZPMAGMIN’ The minimum (brightest) magnitude used to estimate the zero point. ‘ZPMAGMAX’ The maximum (faintest) magnitude used to estimate the zero point. A simple way to see these keywords, or read the value of one is shown below. For more on viewing and manipulating FITS keywords, see *note Keyword inspection and manipulation::. ## See all the keywords written by this script (that start with 'ZP') $ astfits out.fits -h1 | grep ^ZP ## If you just want the zero point $ astfits jplus-zeropoint.fits -h1 --keyvalue=ZPVALUE  File: gnuastro.info, Node: zero point options, Prev: zero point output, Up: Invoking astscript-zeropoint 10.5.1.2 astscript-zeropoint options .................................... All the operating phases of the this script can be customized through the options below. ‘-h STR/INT’ ‘--hdu=STR/INT’ The HDU/extension of the input image to use. ‘-o STR’ ‘--output=STR’ The name of the output file produced by this script. See *note zero point output:: for the format of its contents. ‘-N INT’ ‘--numthreads=INT’ The number of threads to use. By default this script will attempt to find the number of available threads at run-time and will use them. ‘-a FLT,[FLT]’ ‘--aperarcsec=FLT,[FLT]’ The radius/radii (in arc seconds) of aperture(s) used in aperture photometry of the input image. This option can take many values (to check different apertures and find the best for a more accurate zero point estimation). If a reference image is used, the same aperture radii will be used for aperture photometry there. ‘-M FLT,FLT’ ‘--magnituderange=FLT,FLT’ Range of the magnitude for finding the best aperture and zero point. Very bright stars get saturated and fainter stars are affected too much by noise. Therefore, it is important to limit the range of magnitudes used in estimating the zero point. A full tutorial is given in *note Zero point tutorial with reference image::. ‘-S STR’ ‘--starcat=STR’ Name of catalog containing the RA and Dec of positions for aperture photometry in the input image and reference (catalog or image). If not given, the Gaia database will be queried for all stars that overlap with the input image (see *note Available databases::). This option is therefore useful in the following scenarios (among others): • No internet connection. • Many images having a major overlap in the sky, making it inefficient to query Gaia for every image separately: you can query the larger area (containing all the images) once, and directly give the downloaded table to all the separate runs of this script. Especially if the field is wide, the download time can be the slowest part of this script. • In simulations (where you have a pre-defined list of stars). Through the ‘--starcathdu’, ‘--starcatra’ and ‘--starcatdec’ options described below, you can specify the HDU, RA column and Dec Column within this file. The reference image or catalog probably have many objects that are not stars. But it is only stars that have the same shape (the PSF) across the image(1). Therefore ‘--starcathdu=STR/INT’ The HDU name or number in file given to ‘--starcat’ (described above) that contains the table of RA and Dec positions for aperture photometry. If not given, it is assumed that the table is in HDU number 1 (counting from 0). ‘--starcatra=STR/INT’ The column name or number (in the table given to ‘--starcat’) that contains the Right Ascension. ‘--starcatdec=STR/INT’ The column name or number (in the table given to ‘--starcat’) that contains the Declination. ‘-c STR’ ‘--refcat=STR’ Reference catalog used to estimate the zero point of the input image. This option is mutually exclusive with (cannot be given at the same time as) ‘--refimgs’. This catalog should have RA, Dec and Magnitude of the stars (that match with Gaia or ‘--starcat’). ‘-C STR/INT’ ‘--refcathdu=STR/INT’ The HDU/extension of the reference catalog will be calculated. ‘-r STR’ ‘--refcatra=STR’ Right Ascension column name of the reference catalog. ‘-d STR’ ‘--refcatdec=STR’ Declination column name of the reference catalog. ‘-m STR’ ‘--refcatmag=STR’ Magnitude column name of the reference catalog. ‘-s FLT’ ‘--matchradius=FLT’ Matching radius of stars (in arc seconds) and reference catalog in arc-seconds. By default it is 0.2 arc seconds. ‘-R STR,[STR]’ ‘--refimgs=STR,[STR]’ Reference image(s) for estimating the zero point. This option can take any number of separate file names, separated by a comma. The HDUs of each reference image should be given to the ‘refimgshdu’ option. In case the images are in separate HDUs of the same file, you need to repeat the file name here. This option is mutually exclusive with (cannot be given at the same time as) ‘--refimgs’. ‘-H STR/INT’ ‘--refimgshdu=STR/INT’ HDU/Extension name of number of the reference files. The number of values given to this option should be the same as the number of reference image(s). ‘-z FLT,[FLT]’ ‘--refimgszp=FLT,[FLT]’ Zero point of the reference image(s). The number of values given to this should be the same as the number of names given to ‘--refimgs’. ‘-K’ ‘--keepzpap’ Keep the table of separate zero points found for each star for all apertures. By default, this table is only present for the aperture that had the least standard deviation in the estimated zero point. ‘-t’ ‘--tmpdir’ Directory to keep temporary files during the execution of the script. If the directory does not exist at run$-$time, this script will create it. By default, upon completion of the script, this directory will be deleted. However, if you would like to keep the intermediate files, you can use the ‘--keeptmp’ option. ‘-k’ ‘--keeptmp’ Its recommended to not remove the temporary directory (see description of ‘--keeptmp’). This option is useful for debugging and checking the outputs of internal steps. ‘--mksrc=STR’ Use a non-standard Makefile for the Makefile to call. This option is primarily useful during the development of this script and its Makefile, not for normal/regular user. So if you are not developing this script, you can safely ignore this option. When this option is given, the default installed Makefile will not be used: the file given to this option will be read by ‘make’ (within the script) instead. ‘--cite’ Give BibTeX and acknowledgment information for citing this script within your paper. For more, see ‘Operating mode options’. ---------- Footnotes ---------- (1) The PSF itself can vary across the field of view; but that is second-order for this analysis.  File: gnuastro.info, Node: Pointing pattern simulation, Next: Color images with gray faint regions, Prev: Zero point estimation, Up: Installed scripts 10.6 Pointing pattern simulation ================================ Astronomical images are often composed of many single exposures. When the science topic does not depend on the time of observation (for example galaxy evolution), after completing the observations, we stack those single exposures into one "deep" image. Designing the strategy to take those single exposures is therefore a very important aspect of planning your astronomical observation. There are many reasons for taking many short exposures instead of one long exposure: • Modern astronomical telescopes have very high precision (with pixels that are often much smaller than an arc-second or 1/3600 degrees. However, the Earth is orbiting the Sun at a very high speed of roughly 15 degrees every hour! Keeping the (often very large!) telescopes in track with this fast moving sky is not easy; such that most cannot continue accurate tracking more than 10 minutes. • For ground-based observations, the turbulence of the atmosphere changes very fast (on the scale of minutes!). So if you plan to observe at 10 minutes and at the start of your observations the seeing is good, it may happen that on the 8th minute, it becomes bad. This will affect the quality of your final exposure! • When an exposure is taken, the instrument/environment imprint a lot of artifacts on it. One common example that we also see in normal cameras is vignetting (https://en.wikipedia.org/wiki/Vignetting); where the center receives a larger fraction of the incoming light than the periphery). In order to characterize and remove such artifacts (which depend on many factors at the precision that we need in astronomy!), we need to take many exposures of our science target. • By taking many exposures we can build a stack that has a higher resolution; this is often done in under-sampled data, like those in the Hubble Space Telescope (HST) or James Webb Space Telescope (JWST). • The scientific target can be larger than the field of view of your telescope and camera. In the jargon of observational astronomers, each exposure is also known as a "dither" (literally/generally meaning "trembling" or "vibration"). This name was chosen because two exposures are not usually taken on exactly the same position of the sky (known as "pointing"). In order to improve all the item above, we often move the center of the field of view from one exposure to the next. In most cases this movement is small compared to the field of view, so most of the central part of the final stack has a fixed depth, but the edges are shallower (conveying a sense of vibration). When the spacing between pointings is large, they are known as an "offset". A "pointing" is used to refer to either a dither or an offset. For example see Figures 3 and 4 of Illingworth et al. 2013 (https://arxiv.org/pdf/1305.1931.pdf) which show the exposures that went into the XDF survey. The pointing pattern can also be large compared to the field of view, for example see Figure 1 of Trujillo et al. 2021 (https://arxiv.org/pdf/2109.07478.pdf), which show the pointing strategy for the LIGHTS survey. These types of images (where each pixel contains the number of exposures, or time, that were used in it) are known as exposure maps. The pointing pattern therefore is strongly defined by the science case (high-level purpose of the observation) and your telescope's field of view. For example in the XDF survey is focused on very high redshift (most distant!) galaxies. These are very small objects and within that small footprint (of just 1 arcmin) we have thousands of them. However, the LIGHTS survey is focused on the halos of large nearby galaxies (that can be more than 10 arcminutes wide!). In *note Invoking astscript-pointing-simulate:: of Gnuastro's *note Installed scripts:: is described in detail. This script is designed to simplify the process of selecting the best pointing pattern for your observation strategy. For a practical tutorial on using this script, see *note Pointing pattern design::. * Menu: * Invoking astscript-pointing-simulate:: Options and running mode.  File: gnuastro.info, Node: Invoking astscript-pointing-simulate, Prev: Pointing pattern simulation, Up: Pointing pattern simulation 10.6.1 Invoking astscript-pointing-simulate ------------------------------------------- This installed script will simulate a final stacked image from a certain pointing pattern (given as a table). A general overview of this script has been published in Akhlaghi (2023) (https://ui.adsabs.harvard.edu/abs/2023RNAAS...7..211A); please cite it if this script proves useful in your research. The executable name is ‘astscript-pointing-simulate’, with the following general template: $ astscript-pointing-simulate [OPTION...] pointings.fits Examples (for a tutorial, see *note Pointing pattern design::): $ astscript-pointing-simulate pointing.fits --output=stack.fits \ --img=image.fits --center=10,10 --width=1,1 The default output of this script is a stacked image that results from placing the given image (given to ‘--img’) in the pointings of a pointing pattern. The Right Ascension (RA) and Declination (Dec) of each pointing is given in the main input catalog (‘pointing.fits’ in the example above). The center and width of the final stack (both in degrees by default) should be specified using the ‘--width’ option. Therefore, in order to successfully run, this script at least needs the following four inputs: Pointing positions A table containing the RA and Dec of each pointing (the only input argument). The actual column names that contain them can be set with the ‘--racol’ and ‘--deccol’ options (see below). An image This is used for its distortion and rotation, its pixel values and position on the sky will be ignored. The file containing the image should be given to the ‘--img’ option. Stack's central coordinate The central RA and Dec of the finally produced stack (given to the ‘--center’ option). Stack's width The width (in degrees) of the final stack (given to the ‘--width’ option). This script will ignore the pixel values of the reference image (given to ‘--img’) and the Reference coordinates (values to ‘CRVAL1’ and ‘CRVAL2’ in its WCS keywords). For each pointing pointing, this script will put the given RA and Dec into the ‘CRVAL1’ and ‘CRVAL2’ keywords of a copy of the input (not changing the input in anyway), and reset that input's pixel values to 1. The script will then warp the modified copy into the final pixel grid (correcting any rotation and distortions that are used from the original input). This process is done for all the pointing points in parallel. Finally, all the exposures in the pointing list are stacked together to produce an exposure map (showing how many exposures go into each pixel of the final stack. Except for the table of pointing positions, the rest of the inputs and settings are configured through *note Options::, just note the restrictions in *note Installed scripts::. ‘-o STR’ ‘--output=STR’ Name of the output. The output is an image of the requested size (‘--width’) and position (‘--center’) in the sky, but each pixel will contain the number of exposures that go into it after the pointing has been done. See description above for more. ‘-h STR/INT’ ‘--hdu=STR/INT’ The name or counter (counting from zero; from the FITS standard) of HDU containing the table of pointing pointing positions (the file name of this table is the main input argument to this script). For more, see the description of this option in *note Input output options::. ‘-i STR’ ‘--img=STR’ The references image. The pixel values and central location in this image will be ignored by the script. The only relevant information within this script are the WCS properties (except for ‘CRVAL1’ and ‘CRVAL2’, which connect it to a certain position on the sky) and image size. See the description above for more. ‘-H STR/INT’ ‘--imghdu=STR/INT’ The name or counter (counting from zero; from the FITS standard) of the HDU containing the reference image (file name should be given to the ‘--img’ option). If not given, a default value of ‘1’ is assumed; so this is not a mandatory option. ‘-r STR/INT’ ‘--racol=STR/INT’ The name or counter (counting from 1; from the FITS standard) of the column containing the Right Ascension (RA) of each pointing to be used in the pointing pattern. The file containing the table is given to this script as its only argument. ‘-d STR/INT’ ‘--deccol=STR/INT’ The name or counter (counting from 1; from the FITS standard) of the column containing the Declination (Dec) of each pointing to be used in the pointing pattern. The file containing the table is given to this script as its only argument. ‘-C FLT,FLT’ ‘--center=FLT,FLT’ The central RA and Declination of the final stack in degrees. ‘-w FLT,FLT’ ‘--width=FLT,FLT’ The width of the final stack in degrees. If ‘--widthinpix’ is given, the two values given to this option will be interpreted as degrees. ‘--widthinpix’ Interpret the values given to ‘--width’ as number of pixels along each dimension), and not as degrees. ‘--ctype=STR,STR’ The projection of the output stack (‘CTYPEi’ keyword in the FITS WCS standard). For more, see the description of the same option in *note Align pixels with WCS considering distortions::. ‘--hook-warp-before='STR'’ Command to run before warping each exposure into the output pixel grid. By default, the exposure is immediately warped to the final pixel grid, but in some scenarios it is necessary to do some operations on the exposure before warping (for example account for vignetting; see *note Accounting for non-exposed pixels::). The warping of each exposure is done in parallel by default; therefore there are pre-defined variables that you should use for the input and output file names of your command: ‘$EXPOSURE’ Input: name of file with the same size as the reference image with all pixels having a fixed value of 1. The WCS has also been corrected based on the pointing pattern. ‘$TOWARP’ Output: name of the expected output of your hook. If it is not created by your script, the script will complain and abort. This file will be given to Warp to be warped into the output pixel grid. For an example of using hooks with an extended discussion, see *note Pointing pattern design:: and *note Accounting for non-exposed pixels::. To develop your command, you can use ‘--hook-warp-before='...; echo GOOD; exit 1'’ (where ‘...’ can be replaced by any command) and run the script on a single thread (with ‘--numthreads=1’) to produce a single file and simplify the checking that your desired operation works as expected. All the files will be within the temporary directory (see ‘--tmpdir’). ‘--hook-warp-after='STR'’ Command to run after the warp of each exposure into the output pixel grid, but before the stacking of all exposures. For more on hooks, see the description of ‘--hook-warp-before’, *note Pointing pattern design:: and *note Accounting for non-exposed pixels::. ‘$WARPED’ Input: name of file containing the warped exposure in the output pixel grid. ‘$TOWARP’ Output: name of the expected output of your hook. If it is not created by your script, the script will complain and abort. This file will be stacked from the same file for all exposures into the final output. ‘--stack-operator="STR"’ The operator to use for stacking the warped individual exposures into the final output of this script. For the full list, see *note Stacking operators::. By default it is the ‘sum’ operator (to produce an output exposure map). For an example usage, see the tutorial in *note Pointing pattern design::. ‘--mksrc=STR’ Use a non-standard Makefile for the Makefile to call. This option is primarily useful during the development of this script and its Makefile, not for normal/regular usage. So if you are not developing this script, you can safely ignore this option. When this option is given, the default installed Makefile will not be used: the file given to this option will be read by ‘make’ (within the script) instead. ‘-t STR’ ‘--tmpdir=STR’ Name of directory containing temporary files. If not given, a temporary directory will be created in the running directory with a long name using some of the input options. By default, this temporary directory will be deleted after the output is created. You can disable the deletion of the temporary directory (useful for debugging!) with the ‘--keeptmp’ option. Using this option has multiple benefits in larger pipelines: • You can avoid conflicts in case the used inputs in the default name are the same. • You can put this directory somewhere else in the running file system to avoid mixing output files with your source, or to use other storage hardware that are mounted on the running file system. ‘-k’ ‘--keeptmp’ Keep the temporary directory (and do not delete it). ‘-?’ ‘--help’ Print a list of all the options, along with a short description and context for the program. For more, see ‘Operating mode options’. ‘-N INT’ ‘--numthreads=INT’ The number of threads to use for parallel operations (warping the input into the different pointing points). If not given (by default), the script will try to find the number of available threads on the running system and use that. For more, see ‘Operating mode options’. ‘--cite’ Give BibTeX and acknowledgment information for citing this script within your paper. For more, see ‘Operating mode options’. ‘-q’ ‘--quiet’ Do not print the series of commands or their outputs in the terminal. For more, see ‘Operating mode options’. ‘-V’ ‘--version’ Print the version of the running Gnuastro along with a copyright notice and list of authors that contributed to this script. For more, see ‘Operating mode options’.  File: gnuastro.info, Node: Color images with gray faint regions, Next: PSF construction and subtraction, Prev: Pointing pattern simulation, Up: Installed scripts 10.7 Color images with gray faint regions ========================================= Typical astronomical images have a very wide range of pixel values and generally, it is difficult to show the entire dynamical range in a color image. For example, by using *note ConvertType::, it is possible to obtain a color image with three FITS images as each of the Red-Green-Blue (or RGB) color channels. However, depending on the pixel distribution, it could be very difficult to see the different regions together (faint and bright objects at the same time). In something like DS9, you end up changing the color map parameters to see the regions you are most interested in. The reason is that images usually have a lot of faint pixels (near to the sky background or noise values), and few bright pixels (corresponding to the center of stars, galaxies, etc.) that can be millions of times brighter! As a consequence, by considering the images without any modification, it is extremely hard to visualize the entire range of values in a color image. This is because standard color formats like JPEG, TIFF or PDF are defined as 8-bit integer precision, while astronomical data are usually 32-bit floating point! To solve this issue, it is possible to perform some transformations of the images and then obtain the color image. This is actually what the current script does: it makes some non-linear transformations and then uses Gnuastro's ConvertType to generate the color image. There are several parameters and options in order to change the final output that are described in *note Invoking astscript-color-faint-gray::. A full tutorial describing this script with actual data is available in *note Color images with full dynamic range::. A general overview of this script is published in Infante-Sainz et al. 2024 (https://arxiv.org/abs/2401.03814); please cite it if this script proves useful in your research. * Menu: * Invoking astscript-color-faint-gray:: Details of options and arguments.  File: gnuastro.info, Node: Invoking astscript-color-faint-gray, Prev: Color images with gray faint regions, Up: Color images with gray faint regions 10.7.1 Invoking astscript-color-faint-gray ------------------------------------------ This installed script will consider several images to combine them into a single color image to visualize the full dynamic range. The executable name is ‘astscript-color-faint-gray’, with the following general template: $ astscript-color-faint-gray [OPTION...] r.fits g.fits b.fits Examples (for a tutorial, see *note Color images with full dynamic range::): ## Generate a color image from three images with default options. $ astscript-color-faint-gray r.fits g.fits b.fits -g1 --output color.pdf ## Generate a color image, consider the minimum value to be zero. $ astscript-color-faint-gray r.fits g.fits b.fits -g1 \ --minimum=0.0 --output=color.jpg ## Generate a color image considering different zero points, minimum ## values, weights, and also increasing the contrast. $ astscript-color-faint-gray r.fits g.fits b.fits -g1 \ -z=22.4 -z=25.5 -z=24.6 \ -m=-0.1 -m=0.0 -m=0.1 \ -w=1 -w=2 -w=3 \ --contrast=3 \ --output=color.tiff This script takes three inputs images to generate a RGB color image as the output. The order of the images matters, reddest (longest wavelength) filter (R), green (an intermediate wavelength) filter (G) and bluest (shortest wavelength). In astronomy, these can be any filter (for example from infra-red, radio, optical or x-ray); the "RGB" designation is from the general definition of colors (see <https://en.wikipedia.org/wiki/RGB_color_spaces>) These images are internally manipulated by a series of non-linear transformations and normalized to homogenize and finally combine them into a color image. In general, for typical astronomical images, the default output is an image with bright pixels in color and noise pixels in black. The option ‘--minimum’ sets the minimum value to be shown and it is a key parameter, it uses to be a value close to the sky background level. The current non-linear transformation is from Lupton et al. 2004 (https://ui.adsabs.harvard.edu/abs/2004PASP..116..133L), which we call the "asinh" transformation. The two important parameters that control this transformation are ‘--qthresh’ and ‘--stretch’. With the option ‘--coloronly’, it is possible to generate a color image with the background in black: bright pixels in color and the sky background (or noise) values in black. It is possible to provide a fourth image (K) that will be used for showing the gray region: R, G, B, K The generation of a good color image is something that requires several trials, so we encourage the user to play with the different parameters cleverly. After some testing, we find it useful to follow the steps. For a more complete description of the logic of the process, see the dedicated tutorial in *note Color images with full dynamic range::. 1. Use the default options to estimate the parameters. By running the script with no options at all, it will estimate the parameters and they will be printed on the command-line. 2. Select a good sky background value of the images. If the sky background has been subtracted, a minimum value of zero could be a good option: ‘--minimum=0.0’. 3. Focus on the bright regions to tweak ‘--qbright’ and ‘--stretch’. First, try low values of ‘--qbright’ to show the bright parts. Then, adjust ‘--stretch’ to show the fainter regions around bright parts. Overall, play with these two parameters to show the color regions appropriately. 4. Change ‘--colorval’ to separate the color and black regions. This is the lowest value of the threshold image that is shown in color. 5. Change ‘--grayval’ to separate the black and gray regions. This is highest value of the threshold image that is shown in gray. 6. Use ‘--checkparams’ to check the pixel value distributions. 7. Use ‘--keeptmp’ to not remove the threshold image and check it. A full description of each option is given below: ‘-h’ ‘--hdu=STR/INT’ Input HDU name or counter (counting from 0) for each input FITS file. If the same HDU should be used from all the FITS files, you can use the ‘--globalhdu’ option described below to avoid repeating this option. ‘-g’ ‘--globalhdu=STR/INT’ Use the value given to this option (a HDU name or a counter, starting from 0) for the HDU identifier of all the input FITS files. This is useful when all the inputs are distributed in different files, but have the same HDU in those files. ‘-o’ ‘--output’ Output color image name. The output can be in any of the recognized output formats of ConvertType (including PDF, JPEG and TIFF). ‘-m’ ‘--minimum=FLT’ Minimum value to be mapped for each R, G, B, and K FITS images. If a single value is given to this option it will be used for all the input images. This parameter controls the smallest visualized pixel value. In general, it is a good decision to set this value close to the sky background level. This value can dramatically change the output color image (especially when there are large negative values in the image that you do not intend to visualize). ‘-Z’ ‘--zeropoint=FLT’ Zero point value for each R, G, B, and K FITS images. If a single value is given, it is used for all the input images. Internally, the zero point values are used to transform the pixel values in units of Janskys. The units are not important for a color image, but the fact that the images are photometrically calibrated is important for obtaining an output color image whose color distribution is realistic. ‘-w’ ‘--weight=FLT’ Relative weight for each R, G, B channel. With this parameter, it is possible to change the importance of each channel to modify the color balance of the image. For example, ‘-w=1 -w=2 -w=5’ indicates that the B band will be 5 times more important than the R band, and that the G band is 2 times more important than the R channel. In this particular example, the combination will be done as $\rm{colored}=(1{\times}\rm{R}+2{\times}\rm{G}+5{\times}\rm{B})/(1 + 2 + 5)=0.125{\times}\rm{R} + 0.250{\times}\rm{G} + 0.625{\times}\rm{B}$. In principle, a color image should recreate "real" colors, but "real" is a very subjective matter and with this option, it is possible to change the color balance and make it more aesthetically interesting. However, be careful to avoid confusing the viewers of your image and report the weights with the filters you used for each channel. It is up to the user to use this parameter carefully. ‘-Q’ ‘--qbright=FLT’ It is one of the parameters that control the asinh transformation. It should be used in combination with ‘--stretch’. In general, it has to be set to low values to better show the brightest regions. Afterwards, adjust ‘--stretch’ to set the linear stretch (show the intermediate/faint structures). ‘-s’ ‘--stretch=FLT’ It is one of the parameters that control the asinh transformation. It should be used in combination with ‘--qbright’. It is used for bringing out the faint/intermediate bright structures of the image that are shown linearly. In general, this parameter is chosen after setting ‘--qbright’ to a low value. *The asinh transformation.* The asinh transformation is done on the stacked R, G, B image. It consists in the modification of the stacked image (I) in order to show the entire dynamical range appropriately following the expression: $f(I) = asinh($ ‘qbright’ $\cdot$ ‘stretch’ $\cdot I) /$ ‘qbright’. See *note Color images with full dynamic range:: for a complete tutorial that shows the intricacies of this transformation with step-by-step examples. ‘--coloronly’ By default, the fainter parts of the image are shown in grayscale (not color, since colored noise is not too informative). With this option, the output image will be fully in color with the background (noise pixels) in black. ‘--colorval=FLT’ The value that separates the color and black regions. By default, it ranges from 100 (all pixels becoming in color) to 0 (all pixels becoming black). Check the histogram ‘FOR COLOR and GRAY THRESHOLDS’ with the option ‘--checkparams’ for selecting a good value. ‘--grayval=FLT’ This parameter defines the value that separates the black and gray regions. It ranges from 100 (all pixels becoming black) to 0 (all pixels becoming white). Check the histogram ‘FOR COLOR and GRAY THRESHOLDS’ with the option ‘--checkparams’ to select the value. ‘--regions=STR’ Labeled image, identifying the pixels to use for color (value 2), those to use for black (value 1) and those to use for gray (value 0). When this option is given the ‘--colorval’ and ‘--grayval’ options will be ignored. This gives you the freedom to select the pixels to show in color, black or gray based on any criteria that is relevant for your purpose. For an example of using this option to get a physically motivated threshold, see *note Manually setting color-black-gray regions::. *IMPORTANT NOTE.* The options ‘--colorval’ and ‘--grayval’ are related one to each other. They are defined from the threshold image (an image generated in the temporary directory) named ‘colorgray_threshold.fits’. By default, this image is computed from the stack and later asinh-transformation of the three R, G, B channels. Its pixel values range between 100 (brightest) to 0 (faintest). The ‘--colorval’ value computed by default is the median of this image. Pixels above this value are shown in color. Pixels below this value are shown in gray. Regions of pure black color can be defined with the ‘--grayval’ option if this value is between 0 and ‘--colorval’. In other words. Color region are defined by those pixels between 100 and ‘--colorval’. Pure black region are defined by those pixels between ‘--colorval’ to ‘grayval’. Gray region are defined by those pixels between ‘--grayval’ to 0. If a fourth image is provided as the "K" channel, then this image is used as the threshold image. See *note Color images with full dynamic range:: for a complete tutorial. ‘--colorkernelfwhm=FLT’ Gaussian kernel FWHM (in pixels) for convolving the color regions. Sometimes, a convolution of the color regions (bright pixels) is desired to further increase their signal-to-noise ratio (but make them look smoother). With this option, the kernel will be created internally and convolved with the colored regions. ‘--graykernelfwhm=FLT’ Gaussian kernel FWHM (in pixels) for convolving the background image. Sometimes, a convolution of the background image is necessary to smooth the noisier regions and increase their signal-to-noise ratios. With this option, the kernel will be created internally and convolved with the colored regions. ‘-b’ ‘--bias=FLT’ Change the brightness of the final image. By increasing this value, a pedestal value will be added to the color image. This option is rarely useful, it is most common to use ‘--contrast’, see below. ‘-c’ ‘--contrast=FLT’ Change the contrast of the final image. The transformation is: $\rm{output}=\rm{contrast}\times{image}+brightness$. ‘-G’ ‘--gamma=FLT’ Gamma exponent value for a gamma transformation. This transformation is not linear: $\rm{output}=\rm{image}^{gamma}$. This option overrides ‘--bias’ or ‘--contrast’. ‘--markoptions=STR’ Options to draw marks on the final output image. Anything given to this option is passed directly to ConvertType in order to draw marks on the output image. For example, if you construct a table named ‘marks.txt’ that contains the column names: x, y, shape, size, axis ratio, angle, color; you will execute the script with the following option: ‘--markoptions="--marks=markers.txt --markcoords=x,y --markshape=shape --marksize=size,axisratio --markrotate=angle --markcolor=color"’. See *note Drawing with vector graphics:: for more information on how to draw markers and *note Weights contrast markers and other customizations:: for a tutorial. ‘--checkparams’ Print the statistics of intermediate images that are used for estimating the parameters. This option is useful to decide the optimum set of parameters. ‘--keeptmp’ Do not remove the temporary directory. This is useful for debugging and checking the outputs of internal steps. ‘--cite’ Give BibTeX and acknowledgment information for citing this script within your paper. For more, see ‘Operating mode options’. ‘-q’ ‘--quiet’ Do not print the series of commands or their outputs in the terminal. For more, see ‘Operating mode options’. ‘-V’ ‘--version’ Print the version of the running Gnuastro along with a copyright notice and list of authors that contributed to this script. For more, see ‘Operating mode options’.  File: gnuastro.info, Node: PSF construction and subtraction, Prev: Color images with gray faint regions, Up: Installed scripts 10.8 PSF construction and subtraction ===================================== The point spread function (PSF) describes how the light of a point-like source is affected by several optical scattering effects (atmosphere, telescope, instrument, etc.). Since the light of all astrophysical sources undergoes all these effects, characterizing the PSF is key in astronomical analysis (for small and large objects). Consequently, having a good characterization of the PSF is fundamental to any analysis. In some situations(1) a parametric (analytical) model is sufficient for the PSF (such as Gaussian or Moffat, see *note PSF::). However, once you are interested in objects that are larger than a handful of pixels, it is almost impossible to find an analytic function to adequately characterize the PSF. Therefore, it is necessary to obtain an empirical (non-parametric) and extended PSF. In this section we describe a set of installed scrips in Gnuastro that will let you construct the non-parametric PSF using point-like sources. They allow you to derive the PSF from the same astronomical images that the science is derived from (without assuming any analytical function). The scripts are based on the concepts described in Infante-Sainz et al. 2020 (https://arxiv.org/abs/1911.01430). But to be complete, we first give a summary of the logic and overview of their combined usage in *note Overview of the PSF scripts::. Furthermore, before going into the technical details of each script, we encourage you to go through the tutorial that is devoted to this at *note Building the extended PSF::. The tutorial uses a real dataset and includes all the logic and reasoning behind every step of the usage in every installed script. * Menu: * Overview of the PSF scripts:: Summary of concepts and methods * Invoking astscript-psf-select-stars:: Select good starts within an image. * Invoking astscript-psf-stamp:: Make a stamp of each star to stack. * Invoking astscript-psf-unite:: Merge stacks of different regions of PSF. * Invoking astscript-psf-scale-factor:: Calculate factor to scale PSF to star. * Invoking astscript-psf-subtract:: Put the PSF in the image to subtract. ---------- Footnotes ---------- (1) An example scenario where a parametric PSF may be enough: you are only interested in very small, high redshift objects that only extended a handful of pixels.  File: gnuastro.info, Node: Overview of the PSF scripts, Next: Invoking astscript-psf-select-stars, Prev: PSF construction and subtraction, Up: PSF construction and subtraction 10.8.1 Overview of the PSF scripts ---------------------------------- To obtain an extended and non-parametric PSF, several steps are necessary and we will go through them here. The fundamental ideas of the following methodology are thoroughly described in Infante-Sainz et al. 2020 (https://arxiv.org/abs/1911.01430). A full tutorial is also available in *note Building the extended PSF::. The tutorial will go through the full process on a pre-selected dataset, but will describe the logic behind every step in away that can easily be modified/generalized to other datasets. This section is basically just a summary of that tutorial. We could have put all these steps into one large program (installed script), however this would introduce several problems. The most prominent of these problems are: • The command would require _many_ options, making it very complex to run every time. • You usually have many stars in an image, and many of the steps can be optimized or parallelized depending on the particular analysis scenario. Predicting all the possible optimizations for all the possible usage scenarios would make the code extremely complex (filled with many unforeseen bugs!). Therefore, following the modularity principle of software engineering, after several years of working on this, we have broken the full job into the smallest number of independent steps as separate scripts. All scripts are independent of each other, meaning this that you are free to use all of them as you wish (for example, only some of them, using another program for a certain step, using them for other purposes, or running independent parts in parallel). For constructing the PSF from your dataset, the first step is to obtain a catalog of stars within it (you cannot use galaxies to build the PSF!). But you cannot blindly use all the stars either! For example, we do not want contamination from other bright, and nearby objects. The first script below is therefore designed for selecting only good star candidates in your image. It will use different criteria, for example, good parallax (where available, to avoid confusion with galaxies), not being near to bright stars, axis ratio, etc. For more on this script, see *note Invoking astscript-psf-select-stars::. Once the catalog of stars is constructed, another script is in charge of making appropriate stamps of the stars. Each stamp is a cropped image of the star with the desired size, normalization of the flux, and mask of the contaminant objects. For more on this script, see *note Invoking astscript-psf-stamp:: After obtaining a set of star stamps, they can be stacked for obtaining the combined PSF from many stars (for example, with *note Stacking operators::). In the combined PSF, the masked background objects of each star's image will be covered and the signal-to-noise ratio will increase, giving a very nice view of the "clean" PSF. However, it is usually necessary to obtain different regions of the same PSF from different stars. For example, to construct the far outer wings of the PSF, it is necessary to consider very bright stars. However, these stars will be saturated in the most inner part, and immediately outside of the saturation level, they will be deformed due to non-linearity effects. Consequently, fainter stars are necessary for the inner regions. Therefore, you need to repeat the steps above for certain stars (in a certain magnitude range) to obtain the PSF in certain radial ranges. For example, in Infante-Sainz et al. 2020 (https://arxiv.org/abs/1911.01430), the final PSF was constructed from three regions (and thus, using stars from three ranges in magnitude). In other cases, we even needed four groups of stars! But in the example dataset from the tutorial, only two groups are necessary (see *note Building the extended PSF::). Once clean stacks of different parts of the PSF have been constructed through the steps above, it is therefore necessary to blend them all into one. This is done by finding a common radial region in both, and scaling the inner region by a factor to add with the outer region. This is not trivial, therefore, a third script is in charge of it, see *note Invoking astscript-psf-unite::. Having constructed the PSF as described above (or by any other procedure), it can be scaled to the magnitude of the various stars in the image to get subtracted (and thus remove the extended/bright wings; better showing the background objects of interest). Note that the absolute flux of a PSF is meaningless (and in fact, it is usually normalized to have a total sum of unity!), so it should be scaled. We therefore have another script that will calculate the scale (multiplication) factor of the PSF for each star. For more on the scaling script, see *note Invoking astscript-psf-scale-factor::. Once the flux factor has been computed, a final script is in charge of placing the scaled PSF over the proper location in the image, and subtracting it. It is also possible to only obtain the modeled star by the PSF. For more on the scaling and positioning script, see *note Invoking astscript-psf-subtract::. As mentioned above, in the following sections, each script has its own documentation and list of options for very detailed customization (if necessary). But if you are new to these scripts, before continuing, we recommend that you do the tutorial *note Building the extended PSF::. Just do not forget to run every command, and try to tweak its steps based on the logic to nicely understand it.  File: gnuastro.info, Node: Invoking astscript-psf-select-stars, Next: Invoking astscript-psf-stamp, Prev: Overview of the PSF scripts, Up: PSF construction and subtraction 10.8.2 Invoking astscript-psf-select-stars ------------------------------------------ This installed script will select good star candidates for constructing a PSF. It will consider stars within a given range of magnitudes without nearby contaminant objects. To do that, it allows to the user to specify different options described here. A complete tutorial is available to show the operation of this script as a modular component to extract the PSF of a dataset: *note Building the extended PSF::. The executable name is ‘astscript-psf-select-stars’, with the following general template: $ astscript-psf-select-stars [OPTION...] FITS-file Examples: ## Select all stars within 'image.fits' with magnitude in range ## of 6 to 10; only keeping those that are less than 0.02 degrees ## from other nearby stars. $ astscript-psf-select-stars image.fits \ --magnituderange=6,10 --mindistdeg=0.02 The input of this script is an image, and the output is a catalog of stars with magnitude in the requested range of magnitudes (provided with ‘--magnituderange’). The output catalog will also only contain stars that are sufficiently distant (‘--mindistdeg’) from all other brighter, and some fainter stars. It is possible to consider different datasets with the option ‘--dataset’ (by default, Gaia DR3 dataset is considered) All stars that are ‘--faintmagdiff’ fainter than the faintest limit will also be accounted for, when selecting good stars. The ‘--magnituderange’, and ‘--mindistdeg’ are mandatory: if not specified the code will abort. The output of this script is a file whose name can be specified with the (optional) ‘--output’ option. If not given, an automatically generated name will be used for the output. A full description of each option is given below. ‘-h STR/INT’ ‘--hdu=STR/INT’ The HDU/extension of the input image to use. ‘-S STR’ ‘--segmented=STR’ Optional segmentation file obtained by *note Segment::. It should have two extensions (‘CLUMPS’ and ‘OBJECTS’). If given, a catalog of ‘CLUMPS’ will be computed and matched with the Gaia catalog to reject those objects that are too elliptical (see ‘--minaxisratio’). The matching will occur on an aperture (in degrees) specified by ‘--matchaperturedeg’. ‘-a FLT’ ‘--matchaperturedeg=FLT’ This option determines the aperture (in degrees) for matching the catalog from gaia with the clumps catalog that is produced by the segmentation image given to ‘--segmented’. The default value is 10 arc-seconds. ‘-c STR’ ‘--catalog=STR’ Optional reference catalog to use for selecting stars (instead of querying an external catalog like Gaia). When this option is given, ‘--dataset’ (described below) will be ignored and no internet connection will be necessary. ‘-d STR’ ‘--dataset=STR’ Optional dataset to query (see *note Query::). It should contain the database and dataset entries to Query. Its value will be immediately given to ‘astquery’. By default, its value is ‘gaia --dataset=dr3’ (so it connects to the Gaia database and requests the data release 3). For example, if you want to use VizieR's Gaia DR3 instead (for example due to a maintenance on ESA's Gaia servers), you should use ‘--dataset="vizier --dataset=gaiadr3"’. It is possible to specify a different dataset from which the catalog is downloaded. In that case, the necessary column names may also differ, so you also have to set ‘--refcatra’, ‘--refcatdec’ and ‘--field’. See their description for more. ‘-r STR’ ‘--refcatra=STR’ The name of the column containing the Right Ascension (RA) in the requested dataset (‘--dataset’). If the user does not determine this option, the default value is assumed to be ‘ra’. ‘-d STR’ ‘--refcatdec=STR’ The name of the column containing the Declination (Dec) in the requested dataset (‘--dataset’). If the user does not determine this option, the default value is assumed to be ‘dec’. ‘-f STR’ ‘--field=STR’ The name of the column containing the magnitude in the requested dataset (‘--dataset’). The output will only contain stars that have a value in this column, between the values given to ‘--magnituderange’ (see below). By default, the value of this option is ‘phot_g_mean_mag’ (that corresponds to the name of the magnitude of the G-band in the Gaia catalog). ‘-m FLT,FLT’ ‘--magnituderange=FLT,FLT’ The acceptable range of values for the column in ‘--field’. This option is mandatory and no default value is assumed. ‘-p STR,STR’ ‘--parallaxanderrorcolumn=STR,STR’ With this option the user can provide the parallax and parallax error column names in the requested dataset. When given, the output will only contain stars for which the parallax value is smaller than three times the parallax error. If the user does not provide this option, the script will not use parallax information for selecting the stars. In the case of Gaia, if you want to use parallax to further limit the good stars, you can pass ‘parallax,parallax_error’. ‘-D FLT’ ‘--mindistdeg=FLT’ Stars with nearby bright stars closer than this distance are rejected. The default value is 1 arc minute. For fainter stars (when constructing the center of the PSF), you should decrease the value. ‘-b INT’ ‘--brightmag=INT’ The brightest star magnitude to avoid (should be brighter than the brightest of ‘--magnituderange’). The basic idea is this: if a user asks for stars with magnitude 6 to 10 and one of those stars is near a magnitude 3 star, that star (with a magnitude of 6 to 10) should be rejected because it is contaminated. But since the catalog is constrained to stars of magnitudes 6-10, the star with magnitude 3 is not present and cannot be compared with! Therefore, when considering proximity to nearby stars, it is important to use a larger magnitude range than the user's requested magnitude range for good stars. The acceptable proximity is defined by ‘--mindistdeg’. With this option, you specify the brightest limit for the proximity check. The default value is a magnitude of $-10$, so you'll rarely need to change or customize this option! The faint limit of the proximity check is specified by ‘--faintmagdiff’. As the name suggests, this is a "diff" or relative value. The default value is 4. Therefore if the user wants to build the PSF with stars in the magnitude range of 6 to 10, the faintest stars used for the proximity check will have a magnitude of 14: $10+4$. In summary, by default, the proximity check will be done with stars in the magnitude range $-10$ to $14$. ‘-F INT’ ‘--faintmagdiff’ The magnitude difference of the faintest star used for proximity checks to the faintest limit of ‘--magnituderange’. For more, see the description of ‘--brightmag’. ‘-Q FLT’ ‘--minaxisratio=FLT’ Minimum acceptable axis ratio for the selected stars. In other words, only stars with axis ratio between ‘--minaxisratio’ to 1.0 will be selected. Default value is ‘--minaxisratio=0.9’. Recall that the axis ratio is only used when you also give a segmented image with ‘--segmented’. ‘-t’ ‘--tmpdir’ Directory to keep temporary files during the execution of the script. If the directory does not exist at run-time, this script will create it. By default, upon completion of the script, this directory will be deleted. However, if you would like to keep the intermediate files, you can use the ‘--keeptmp’ option. ‘-k’ ‘--keeptmp’ Do not remove the temporary directory (see description of ‘--keeptmp’). This option is useful for debugging and checking the outputs of internal steps. ‘-o STR’ ‘--output=STR’ The output name of the final catalog containing good stars.  File: gnuastro.info, Node: Invoking astscript-psf-stamp, Next: Invoking astscript-psf-unite, Prev: Invoking astscript-psf-select-stars, Up: PSF construction and subtraction 10.8.3 Invoking astscript-psf-stamp ----------------------------------- This installed script will generate a stamp of fixed size, centered at the provided coordinates (performing sub-pixel re-gridding if necessary) and normalized at a certain normalization radius. Optionally, it will also mask all the other background sources. A complete tutorial is available to show the operation of this script as a modular component to extract the PSF of a dataset: *note Building the extended PSF::. The executable name is ‘astscript-psf-stamp’, with the following general template: $ astscript-psf-stamp [OPTION...] FITS-file Examples: ## Make a stamp around (x,y)=(53,69) of width=151 pixels. ## Normalize the stamp within the radii 20 and 30 pixels. $ astscript-psf-stamp image.fits --mode=img \ --center=53,69 --widthinpix=151,151 --normradii=20,30 \ --output=stamp.fits ## Iterate over a catalog with positions of stars that are ## in the input image. Use WCS coordinates. $ asttable catalog.fits | while read -r ra dec mag; do \ astscript-psf-stamp image.fits \ --mode=wcs \ --center=$ra,$dec \ --normradii=20,30 \ --widthinpix=150,150 \ --output=stamp-"$ra"-"$dec".fits; done The input is an image from which the stamp of the stars are constructed. The output image will have the following properties: • A certain width (specified by ‘--widthinpix’ in pixels). • Centered at the coordinate specified by the option ‘--center’ (it can be in image/pixel or WCS coordinates, see ‘--mode’). If no center is specified, then it is assumed that the object of interest is already in the center of the image. • If the given coordinate has sub-pixel elements (for example, pixel coordinates 1.234,4.567), the pixel grid of the output will be warped so your given coordinate falls in the center of the central pixel of the final output. This is very important for building the central parts of the PSF, but not too effective for the middle or outer parts (to speed up the program in such cases, you can disable it with the ‘--nocentering’ option). • Normalized "normalized" by the value computed within the ring around the center (at a radial distance between the two radii specified by the option ‘--normradii’). If no normalization ring is considered, the output will not be normalized. In the following cases, this script will produce a fully NaN-valued stamp (of the size given to ‘--widthinpix’). A fully NaN image can safely be used with the stacking operators of Arithmetic (see *note Stacking operators::) because they will be ignored. In case you do not want to waste storage with fully NaN images, you can compress them with ‘gzip --best output.fits’, and give the resulting ‘.fits.gz’ file to Arithmetic. • The requested box (center coordinate with desired width) is not within the input image at all. • If a normalization radius is requested, and all the pixels within the normalization radii are NaN. Here are some scenarios that this can happen: 1) You have a saturated star (where the saturated pixels are NaN), and your normalization radius falls within the saturated region. 2) The star is outside the image by more than your larger normalization radius (so there are no pixels for doing normalization), but the full stamp width still overlaps part of the image. The full set of options are listed below for optimal customization in different scenarios: ‘-h STR’ ‘--hdu=STR’ The HDU/extension of the input image to use. ‘-O STR’ ‘--mode=STR’ Interpret the center position of the object (values given to ‘--center’) in image or WCS coordinates. This option thus accepts only two values: ‘img’ or ‘wcs’. ‘-c FLT,FLT’ ‘--center=FLT,FLT’ The central position of the object. This option is used for placing the center of the stamp. This parameter is used in *note Crop:: to center and crop the image. The positions along each dimension must be separated by a comma (<,>). The units of the coordinates are read based on the value to the ‘--mode’ option, see the examples above. The given coordinate for the central value can have sub-pixel elements (for example, it falls on coordinate 123.4,567.8 of the input image pixel grid). In such cases, after cropping, this script will use Gnuastro's *note Warp:: to shift (or translate) the pixel grid by $-0.4$ pixels along the horizontal and $1-0.8=0.2$ pixels along the vertical. Finally the newly added pixels (due to the warping) will be trimmed to have your desired coordinate exactly in the center of the central pixel of the output. This is very important (critical!) when you are constructing the central part of the PSF. But for the outer parts it is not too effective, so to avoid wasting time for the warping, you can simply use ‘--nocentering’ to disable it. ‘-d’ ‘--nocentering’ Do not do the sub-pixel centering to a new pixel grid. See the description of the ‘--center’ option for more. ‘-W INT,INT’ ‘--widthinpix=INT,INT’ Size (width) of the output image stamp in pixels. The size of the output image will be always an odd number of pixels. As a consequence, if the user specify an even number, the final size will be the specified size plus 1 pixel. This is necessary to place the specified coordinate (given to ‘--center’) in the center of the central pixel. This is very important (and necessary) in the case of the centers of stars, therefore a sub-pixel translation will be performed internally to ensure this. ‘-n FLT,FLT’ ‘--normradii=FLT,FLT’ Minimum and maximum radius of ring to normalize the image. This option takes two values, separated by a comma (<,>). The first value is the inner radius, the second is the outer radius. ‘-S STR’ ‘--segment=STR’ Optional filename of a segmentation image from Segment's output (must contain the ‘CLUMPS’ and ‘OBJECT’ HDUs). For more on the definition of "objects" and "clumps", see *note Segment::. If given, Segment's output is used to mask all background sources from the large foreground object (a bright star): • Objects that are not the central object. • Clumps (within the central object) that are not the central clump. The result is that all objects and clumps that contaminate the central source are masked, while the diffuse flux of the central object remains. The non masked object and clump labels are kept into the header of the output image. The keywords are ‘CLABEL’ and ‘OLABEL’. If no segmentation image is used, then their values are set to ‘none’. ‘-T FLT’ ‘--snthresh=FLT’ Mask all the pixels below the given signal-to-noise ratio (S/N) threshold. This option is only valid with the ‘--segment’ option (it will use the ‘SKY_STD’ extension of the *note Segment output::. This threshold is applied prior to the possible normalization or centering of the stamp. After all pixels below the given threshold are masked, the mask is also dilated by one level to avoid single pixels above the threshold (which are mainly due to noise when the threshold is lower). After applying the signal-to-noise threshold (if it is requested), any extra pixels that are not connected to the central target are also masked. Such pixels can remain in rivers between bright clumps and will cause problem in the final stack, if they are not masked. This is useful for increasing the S/N of inner parts of each region of the finally stacked PSF. As the stars (that are to be stacked) become fainter, the S/N of their outer parts (at a fixed radius) decreases. The stack of a higher-S/N image with a lower-S/N image will have an S/N that is lower than the higher one. But we can still use the inner parts of those fainter stars (that have sufficiently high S/N). ‘-N STR’ ‘--normop=STR’ The operator for measuring the values within the ring defined by the option ‘--normradii’. The operator given to this option will be directly passed to the radial profile script ‘astscript-radial-profile’, see *note Generate radial profile::. As a consequence, all MakeCatalog measurements (median, mean, sigclip-mean, sigclip-number, etc.) can be used here. For a full list of MakeCatalog's measurements, please run ‘astmkcatalog --help’. The final normalization value is saved into the header of the output image with the keyword ‘NORMVAL’. If no normalization is done, then the value is set to ‘1.0’. ‘-Q FLT’ ‘--axis-ratio=FLT’ The axis ratio of the radial profiles for computing the normalization value. By default (when this option is not given), the radial profile will be circular (axis ratio of 1). This parameter is used directly in the ‘astscript-radial-profile’ script. ‘-p FLT’ ‘--position-angle=FLT’ The position angle (in degrees) of the profiles relative to the first FITS axis (horizontal when viewed in SAO DS9). By default, it is ‘--position-angle=0’, which means that the semi-major axis of the profiles will be parallel to the first FITS axis. This parameter is used directly in the ‘astscript-radial-profile’ script. ‘-s FLT,FLT’ ‘--sigmaclip=FLT,FLT’ Sigma clipping parameters: only relevant if sigma-clipping operators are requested by ‘--normop’. For more on sigma-clipping, see *note Sigma clipping::. ‘-t’ ‘--tmpdir’ Directory to keep temporary files during the execution of the script. If the directory does not exist at run-time, this script will create it. By default, upon completion of the script, this directory will be deleted. However, if you would like to keep the intermediate files, you can use the ‘--keeptmp’ option. ‘-k’ ‘--keeptmp’ Do not remove the temporary directory (see description of ‘--keeptmp’). This option is useful for debugging and checking the outputs of internal steps. ‘-o STR’ ‘--output=STR’ Filename of stamp image. By default the name of the stamp will be a combination of the input image name, the name of the script, and the coordinates of the center. For example, if the input image is named image.fits and the center is ‘--center=33,78’, then the output name wil be: image_stamp_33_78.fits The main reason of setting this name is to have an unique name for each stamp by default.  File: gnuastro.info, Node: Invoking astscript-psf-unite, Next: Invoking astscript-psf-scale-factor, Prev: Invoking astscript-psf-stamp, Up: PSF construction and subtraction 10.8.4 Invoking astscript-psf-unite ----------------------------------- This installed script will join two PSF images at a given radius. This operation is commonly used when merging (uniting) the inner and outer parts of the PSF. A complete tutorial is available to show the operation of this script as a modular component to extract the PSF of a dataset: *note Building the extended PSF::. The executable name is ‘astscript-psf-unite’, with the following general template: $ astscript-psf-unite [OPTION...] FITS-file Examples: ## Multiply inner.fits by 3 and put it in the center (within a radius of ## 25 pixels) of outer.fits. The core goes up to a radius of 25 pixels. $ astscript-psf-unite outer.fits \ --core=inner.fits --scale=3 \ --radius=25 --output=joined.fits ## Same example than the above, but considering an ## ellipse (instead of a circle). $ astscript-psf-unite outer.fits \ --core=inner.fits --scale=3 \ --radius=25 --axis-ratio=0.5 \ --position-angle=40 --output=joined.fits The junction is done by considering the input image as the outer part. The central part is specified by FITS image given to ‘--inner’ and it is multiplied by the factor ‘--scale’. All pixels within ‘--radius’ (in pixels) of the center of the outer part are then replaced with the inner image. The scale factor to multiply with the inner part has to be explicitly provided (see the description of ‘--scale’ below). Note that this script assumes that PSF is centered in both images. More options are available with the goal of obtaining a good junction. A full description of each option is given below. ‘-h STR’ ‘--hdu=STR’ The HDU/extension of the input image to use. ‘-i STR’ ‘--inner=STR’ Filename of the inner PSF. This image is considered to be the central part of the PSF. It will be cropped at the radius specified by the option ‘--radius’, and multiplied by the factor specified by ‘--scale’. After that, it will be appended to the outer part (input image). ‘-I STR’ ‘--innerhdu=STR’ The HDU/extension of the inner PSF (option ‘--inner’). ‘-f FLT’ ‘--scale=FLT’ Factor by which the inner part (‘--inner’) is multiplied. This factor is necessary to put the two different parts of the PSF at the same flux level. A convenient way of obtaining this value is by using the script ‘astscript-model-scale-factor’, see *note Invoking astscript-psf-scale-factor::. There is also a full tutorial on using all the ‘astscript-psf-*’ installed scripts together, see *note Building the extended PSF::. We recommend doing that tutorial before starting to work on your own datasets. ‘-r FLT’ ‘--radius=FLT’ Radius (in pixels) at which the junction of the images is done. All pixels in the outer image within this radius (from its center) will be replaced with the pixels of the inner image (that has been scaled). By default, a circle is assumed for the shape of the inner region, but this can be tweaked with ‘--axis-ratio’ and ‘--position-angle’ (see below). ‘-Q FLT’ ‘--axisratio=FLT’ Axis ratio of ellipse to define the inner region. By default this option has a value of 1.0, so all central pixels (of the outer image) within a circle of radius ‘--radius’ are replaced with the scaled inner image pixels. With this option, you can customize the shape of pixels to take from the inner and outer profiles. For a PSF, it will usually not be necessary to change this option: even if the PSF is non-circular, the inner and outer parts will both have the same ellipticity. So if the scale factor is chosen accurately, using a circle to select which pixels from the inner image to use in the outer image will be irrelevant. ‘-p FLT’ ‘--position-angle=FLT’ Position angle of the ellipse (in degrees) to define which central pixels of the outer image to replace with the scaled inner image. Similar to ‘--axis-ratio’ (see above). ‘-t’ ‘--tmpdir’ Directory to keep temporary files during the execution of the script. If the directory does not exist at run-time, this script will create it. By default, upon completion of the script, this directory will be deleted. However, if you would like to keep the intermediate files, you can use the ‘--keeptmp’ option. ‘-k’ ‘--keeptmp’ Do not remove the temporary directory (see description of ‘--keeptmp’). This option is useful for debugging and checking the outputs of internal steps.  File: gnuastro.info, Node: Invoking astscript-psf-scale-factor, Next: Invoking astscript-psf-subtract, Prev: Invoking astscript-psf-unite, Up: PSF construction and subtraction 10.8.5 Invoking astscript-psf-scale-factor ------------------------------------------ This installed script will compute the multiplicative factor (scale) that is necessary to match the PSF to a given star. The match in flux is done within a ring of pixels. It can also be used to compute the scale factor to multiply the inner part of the PSF with the outer part during the creation of a PSF. A complete tutorial is available to show the operation of this script as a modular component to extract the PSF of a dataset: *note Building the extended PSF::. The executable name is ‘astscript-psf-scale-factor’, with the following general template: $ astscript-psf-scale-factor [OPTION...] FITS-file Examples: ## Compute the scale factor for the object at (x,y)=(53,69) for ## the PSF (psf.fits). Compute it in the ring 20-30 pixels. $ astscript-psf-scale-factor image.fits --mode=img \ --center=53,69 --normradii=20,30 --psf=psf.fits ## Iterate over a catalog with RA,Dec positions of stars that are in ## the input image to compute their scale factors. $ asttable catalog.fits | while read -r ra dec mag; do \ astscript-psf-scale-factor image.fits \ --mode=wcs \ --psf=psf.fits \ --center=$ra,$dec --quiet \ --normradii=20,30 > scale-"$ra"-"$dec".txt; done The input should be an image containing the star that you want to match in flux with the PSF. The output will be a single number that is printed on the command-line. That number is the multiplicative factor to scale the PSF image (given to ‘--psf’) to match in flux with the given star (which is located in ‘--center’ coordinate of the input image). The scale factor will be calculated within the ring of pixels specified by the option ‘--normradii’. All the pixels within this ring will be separated from both the PSF and input images. For the input image, around the selected coordinate; while masking all other sources (see ‘--segment’). The finally selected pixels of the input image will then be divided by those of the PSF image. This gives us an image containing one scale factor per pixel. The finally reported value is the sigma-clipped median of all the scale factors in the finally-used pixels. To fully understand the process on first usage, we recommend that you run this script with ‘--keeptmp’ and inspect the files inside of the temporary directory. The most common use-cases of this scale factor are: 1. To find the factor for joining two different parts of the same PSF, see *note Invoking astscript-psf-unite::. 2. When modeling a star in order to subtract it using the PSF, see *note Invoking astscript-psf-subtract::. For a full tutorial on how to use this script along with the other ‘astscript-psf-*’ scripts in Gnuastro, please see *note Building the extended PSF::. To allow full customizability, the following options are available with this script. ‘-h STR’ ‘--hdu=STR’ The HDU/extension of the input image to use. ‘-p STR’ ‘--psf=STR’ Filename of the PSF image. The PSF is assumed to be centered in this image. ‘-P STR’ ‘--psfhdu=STR’ The HDU/extension of the PSF image. ‘-c FLT,FLT’ ‘--center=FLT,FLT’ The central position of the object to scale with the PSF. This parameter is passed to Gnuastro's Crop program make a crop for further processing (see *note Crop::). The positions along each dimension must be separated by a comma (<,>). The units of the coordinates are interpreted based on the value to the ‘--mode’ option (see below). ‘-O STR’ ‘--mode=STR’ Interpret the center position of the object (values given to ‘--center’) in image or WCS coordinates. This option thus accepts only two values: ‘img’ or ‘wcs’. ‘-n INT,INT’ ‘--normradii=INT,INT’ Inner (inclusive) and outer (exclusive) radii (in units of pixels) around the central position in which the scale factor is computed. The option takes two values separated by a comma (<,>). The first value is the inner radius, the second is the outer radius. These two radii define a ring of pixels around the center that is used for obtaining the scale factor value. ‘-W INT,INT’ ‘--widthinpix=INT,INT’ Size (width) of the image stamp in pixels. This is an intermediate product computed internally by the script. By default, the size of the stamp is automatically set to be as small as possible (i.e., two times the external radius of the ring specified by ‘--normradii’) to make the computation fast. As a consequence, this option is only relevant for checking and testing that everything is fine (debugging; it will usually not be necessary). ‘-S STR’ ‘--segment=STR’ Optional filename of a segmentation image from Segment's output (must contain the ‘CLUMPS’ and ‘OBJECT’ HDUs). For more on the definition of "objects" and "clumps", see *note Segment::. If given, Segment's output is used to mask all background sources from the large foreground object (a bright star): • Objects that are not the central object. • Clumps (within the central object) that are not the central clump. The result is that all objects and clumps that contaminate the central source are masked, while the diffuse flux of the central object remains. ‘-s FLT,FLT’ ‘--sigmaclip=FLT,FLT’ Sigma clipping parameters used in the end to find the final scale factor from the distribution of all pixels used. For more on sigma-clipping, see *note Sigma clipping::. ‘-t’ ‘--tmpdir’ Directory to keep temporary files during the execution of the script. If the directory does not exist at run-time, this script will create it. By default, upon completion of the script, this directory will be deleted. However, if you would like to keep the intermediate files, you can use the ‘--keeptmp’ option. ‘-k’ ‘--keeptmp’ Do not remove the temporary directory (see description of ‘--keeptmp’). This option is useful for debugging and checking the outputs of internal steps.  File: gnuastro.info, Node: Invoking astscript-psf-subtract, Prev: Invoking astscript-psf-scale-factor, Up: PSF construction and subtraction 10.8.6 Invoking astscript-psf-subtract -------------------------------------- This installed script will put the provided PSF into a given position within the input image (implementing sub-pixel adjustments where necessary), and then it will subtract it. It is aimed at modeling and subtracting the scattered light field of an input image. It is also possible to obtain the modeled star with the PSF (and not make the subtraction of it from the original image). A complete tutorial is available to show the operation of this script as a modular component to extract the PSF of a dataset: *note Building the extended PSF::. The executable name is ‘astscript-psf-subtract’, with the following general template: $ astscript-psf-subtract [OPTION...] FITS-file Examples: ## Multiply the PSF (psf.fits) by 3 and subtract it from the ## input image (image.fits) at the pixel position (x,y)=(53,69). $ astscript-psf-subtract image.fits \ --psf=psf.fits \ --mode=img \ --scale=3 \ --center=53,69 \ --output=star-53_69.fits ## Iterate over a catalog with positions of stars that are ## in the input image. Use WCS coordinates. $ asttable catalog.fits | while read -r ra dec mag; do scale=$(cat scale-"$ra"_"$dec".txt) astscript-psf-subtract image.fits \ --mode=wcs \ --psf=psf.fits \ --scale=$scale \ --center=$ra,$dec; done The input is an image from which the star is considered. The result is the same image but with the star subtracted (modeled by the PSF). The modeling of the star is done with the PSF image specified with the option ‘--psf’, and flux-scaled with the option ‘--scale’ at the position defined by ‘--center’. Instead of obtaining the PSF-subtracted image, it is also possible to obtain the modeled star by the PSF. To do that, use the option ‘--modelonly’. With this option, the output will be an image with the same size as the original one with the PSF situated in the star coordinates and flux-scaled. In this case, the region not covered by the PSF are set to zero values. Note that this script works over individual objects. As a consequence, to generate a scattered light field of many stars, it is necessary to make multiple calls. A full description of each option is given below. ‘-h STR’ ‘--hdu=STR’ The HDU/extension of the input image to use. ‘-p STR’ ‘--psf=STR’ Filename of the PSF image. The PSF is assumed to be centered in this image. ‘-P STR’ ‘--psfhdu=STR’ The HDU/extension of the PSF image. ‘-O STR’ ‘--mode=STR’ Interpret the center position of the object (values given to ‘--center’) in image or WCS coordinates. This option thus accepts only two values: ‘img’ or ‘wcs’. ‘-c FLT,FLT’ ‘--center=FLT,FLT’ The central position of the object. This parameter is used in *note Crop:: to center and crop the image. The positions along each dimension must be separated by a comma (<,>). The number of values given to this option must be the same as the dimensions of the input dataset. The units of the coordinates are read based on the value to the ‘--mode’ option, see above. If the central position does not fall in the center of a pixel in the input image, the PSF is resampled with sub-pixel change in the pixel grid before subtraction. ‘-s FLT’ ‘--scale=FLT’ Factor by which the PSF (‘--psf’) is multiplied. This factor is necessary to put the PSF with the desired flux level. A convenient way of obtaining this value is by using the script ‘astscript-scale-factor’, see *note Invoking astscript-psf-scale-factor::. For a full tutorial on using the ‘astscript-psf-*’ scripts together, see *note Building the extended PSF::. ‘-t’ ‘--tmpdir’ Directory to keep temporary files during the execution of the script. If the directory does not exist at run-time, this script will create it. By default, upon completion of the script, this directory will be deleted. However, if you would like to keep the intermediate files, you can use the ‘--keeptmp’ option. ‘-k’ ‘--keeptmp’ Do not remove the temporary directory (see description of ‘--keeptmp’). This option is useful for debugging and checking the outputs of internal steps. ‘-m’ ‘--modelonly’ Do not make the subtraction of the modeled star by the PSF. This option is useful when the user wants to obtain the scattered light field given by the PSF modeled star.  File: gnuastro.info, Node: Makefile extensions, Next: Library, Prev: Installed scripts, Up: Top 11 Makefile extensions (for GNU Make) ************************************* Make (https://en.wikipedia.org/wiki/Make_(software)) is a build automation tool. It can greatly help manage your analysis workflow, even very complex projects with thousands of files and hundreds of processing steps. In this book, we have discussed Make previously in the context of parallelization (see *note How to run simultaneous operations::). It has also been used in GNU Make is the most common and powerful implementation of Make, with many unique additions to the core POSIX standard of Make. One of those features is the ability to add extensions using a dynamic library (that Gnuastro provides). For the details of this feature from GNU Make's own manual, see its Loading dynamic objects (https://www.gnu.org/software/make/manual/html_node/Loading-Objects.html) section. Through this feature, Gnuastro provides additional Make functions that are useful in the context of data analysis. To use this feature, Gnuastro has to be built in shared library more. Gnuastro's Make extensions will not work if you build Gnuastro without shared libraries (for example, when you configure Gnuastro with ‘--disable-shared’ or ‘--debug’). * Menu: * Loading the Gnuastro Make functions:: How to find and load Gnuastro's Make library. * Makefile functions of Gnuastro:: The available functions.  File: gnuastro.info, Node: Loading the Gnuastro Make functions, Next: Makefile functions of Gnuastro, Prev: Makefile extensions, Up: Makefile extensions 11.1 Loading the Gnuastro Make functions ======================================== To load Gnuastro's Make functions in your Makefile, you should use the ‘load’ command of GNU Make in your Makefile. The load command should be given Gnuastro's ‘libgnuastro_make.so’ dynamic library, which has been specifically written for being called by GNU Make. The generic command looks like this (the ‘/PATH/TO’ part should be changed): load /PATH/TO/lib/libgnuastro_make.so Here are the possible replacements of the ‘/PATH/TO’ component: ‘/usr/local’ If you installed Gnuastro from source and did not use the ‘--prefix’ option at configuration time, you should use this base directory. ‘/usr/’ If you installed Gnuastro through your operating system's package manager, it is highly likely that Gnuastro's library is here. ‘~/.local’ If you installed Gnuastro from source, but used ‘--prefix’ to install Gnuastro in your home directory (as described in *note Installation directory::). If you cannot find ‘libgnuastro_make.so’ in the locations above, the command below should give you its location. It assumes that the libraries are in the same base directory as the programs (which is usually the case). $ which astfits | sed -e's|bin/astfits|lib/libgnuastro_make.so|'  File: gnuastro.info, Node: Makefile functions of Gnuastro, Prev: Loading the Gnuastro Make functions, Up: Makefile extensions 11.2 Makefile functions of Gnuastro =================================== All Gnuastro Make functions start with the ‘ast-’ prefix (similar to the programs on the command-line, but with a dash). After you have loaded Gnuastro's shared library for Makefiles within your Makefile, you can call these functions just like any Make function. For instructions on how to load Gnuastro's Make functions, see *note Loading the Gnuastro Make functions::. There are two types of Make functions in Gnuastro's Make extensions: 1) Basic operations on text which more general than astronomy or Gnuastro, see *note Text functions for Makefiles::). 2) Operations that are directly related to astronomy (mostly FITS files) and Gnuastro, see *note Astronomy functions for Makefiles::). *Difference between '‘=’' or '‘:=’' for variable definition* When you define a variable with '‘=’', its value is expanded only when used, not when defined. However, when you use '‘:=’', it is immediately expanded when defined. Therefore the location of a '‘:=’' variable in the Makefile matters: if used before its definition, it will be empty! Those defined by '‘=’' can be used even before they are defined! On the other hand, if your variable invokes functions (like ‘foreach’ or ‘wildcard’), it is better to use '‘:=’'. Otherwise, each time the value is used, the function will be expanded (possibly may times) and this will reduce the speed of your pipeline. For more, see the The two flavors of variables (https://www.gnu.org/software/make/manual/html_node/Flavors.html) in the GNU Make manual. * Menu: * Text functions for Makefiles:: Basic text operations to supplement Make. * Astronomy functions for Makefiles:: Astronomy/FITS related functions.  File: gnuastro.info, Node: Text functions for Makefiles, Next: Astronomy functions for Makefiles, Prev: Makefile functions of Gnuastro, Up: Makefile functions of Gnuastro 11.2.1 Text functions for Makefiles ----------------------------------- The functions described below are generic (not limited to astronomy/FITS) functions that operate on plain text. You can see these as functions that should have been implemented in GNU Make itself. The names of these functions start with ‘ast-text-*’ and each has a fully working example to demonstrate its usage. ‘$(ast-text-contains STRING, TEXT)’ Returns all white-space-separated words in ‘TEXT’ that contain the ‘STRING’, removing any words that _do not_ match. For example, the following minimal Makefile will only print the ‘bAaz Aah’ word of the list. load /usr/local/lib/libgnuastro_make.so list = fooo baar bAaz uggh Aah all: echo $(ast-text-contains Aa, $(list)) This can be thought of as Make's own ‘filter’ function, but if it would accept two patterns in a format like this ‘$(filter %Aa%,$(list))’ (for the example above). In fact, the first sentence describing this function is taken from the Make manual's first sentence that describes the ‘filter’ function! However, unfortunately Make's ‘filter’ function only accepts a single ‘%’, not two! ‘$(ast-text-not-contains STRING, TEXT)’ Returns all white-space-separated words in ‘TEXT’ that _do not_ contain the ‘STRING’, removing any words that _do not_ match. This is the inverse of the ‘ast-text-contains’ function. For example, the following minimal Makefile will print ‘fooo baar uggh’ word of the list. load /usr/local/lib/libgnuastro_make.so list = fooo baar bAaz uggh Aah all: echo $(ast-text-not-contains Aa, $(list)) ‘$(ast-text-to-upper STRING)’ Returns the input string but with all characters in UPPER-CASE. For example, the following minimal Makefile will print ‘FOOO BAAR UGGH’ word of the list. load /usr/local/lib/libgnuastro_make.so list = fOOo bAar UggH ulist := $(ast-text-to-upper $(list)) all:; echo $(ulist) ‘$(ast-text-to-lower STRING)’ Returns the input string but with all characters in lower-case. For example, the following minimal Makefile will print ‘fooo baar uggh’ word of the list. load /usr/local/lib/libgnuastro_make.so list = fOOo bAar UggH list := $(ast-text-to-lower $(list)) all:; echo $(ulist)  File: gnuastro.info, Node: Astronomy functions for Makefiles, Prev: Text functions for Makefiles, Up: Makefile functions of Gnuastro 11.2.2 Astronomy functions for Makefiles ---------------------------------------- FITS files (the standard data format in astronomy) have unique features (header keywords and HDUs) that can greatly help designing workflows in Makefiles. The Makefile extension functions of this section allow you to optimally use those features within your pipelines. Besides FITS, when designing your workflow/pipeline with Gnuastro, there are also special features like version checking that simplify your design. ‘$(ast-version-is STRING)’ Returns ‘1’ if the version of the used Gnuastro is equal to ‘STRING’, and ‘0’ otherwise. This is useful/critical for obtaining reproducible results on different systems. It can be used in combination with Conditionals in Make (https://www.gnu.org/software/make/manual/html_node/Conditionals.html) to ensure the required version of Gnuastro is going to be used in your workflow. For example, in the minimal working Makefile below, we are using it to specify if the default (first) target (‘all’) should have any prerequisites (and let the workflow start), or if it should simply print a message (that the required version of Gnuastro isn't installed) and abort (without any prerequisites). load /usr/local/lib/libgnuastro_make.so gnuastro-version = 0.19 ifeq ($(ast-version-is $(gnuastro-version)),1) all: paper.pdf else all:; @echo "Please use Gnuastro $(gnuastro-version)" endif result.fits: input.fits astnoisechisel $< --output=$@ paper.pdf: result.fits pdflatex --halt-on-error paper.tex ‘$(ast-fits-with-keyvalue KEYNAME, KEYVALUES, HDU, FITS_FILES)’ Will select only the FITS files (from a list of many in ‘FITS_FILES’, non-FITS files are ignored), where the ‘KEYNAME’ keyword has the value(s) given in ‘KEYVALUES’. Only the HDU given in the ‘HDU’ argument will be checked. According to the FITS standard, the keyword name is not case sensitive, but the keyword value is. For example, if you have many FITS files in the ‘/datasets/images’ directory, the minimal Makefile below will put those with a value of ‘BAR’ or ‘BAZ’ for the ‘FOO’ keyword in HDU number ‘1’ in the ‘selected’ Make variable. Notice how there is no comma between ‘BAR’ and ‘BAZ’: you can specify any series of values. load /usr/local/lib/libgnuastro_make.so files := $(wildcard /datasets/images/*.fits) selected := $(ast-fits-with-keyvalue FOO, BAR BAZ, 1, $(files)) all: echo "Full: $(words $(files)) files"; echo "Selected: $(words $(selected)) files" ‘$(ast-fits-unique-keyvalues KEYNAME, HDU, FITS_FILES)’ Will return the unique values given to the given FITS keyword (‘KEYNAME’) in the given HDU of all the input FITS files (non-FITS files are ignored). For example, after the commands below, the ‘keyvalues’ variable will contain the unique values given to the ‘FOO’ keyword in HDU number 1 of all the FITS files in ‘/datasets/images/*.fits’. files := $(wildcard /datasets/images/*.fits) keyvalues := $(ast-fits-unique-keyvalues FOO, 1, $(files)) This is useful when you do not know the full range of values a-priori. For example, let's assume that you are looking at a night's observations with a telescope and the purpose of the FITS image is written in the ‘OBJECT’ keyword of the image (which we can assume is in HDU number 1). This keyword can have the name of the various science targets (for example, ‘NGC123’ and ‘M31’) and calibration targets (for example, ‘BIAS’ and ‘FLAT’). The list of science targets is different from project to project, such that in one night, you can observe multiple projects. But the calibration frames have unique names. Knowing the calibration keyword values, you can extract the science keyword values of the night with the command below (feeding the output of this function to Make's ‘filter-out’ function). calib = BIAS FLAT files := $(wildcard /datasets/images/*.fits) science := $(filter-out $(calib), \ $(ast-fits-unique-keyvalues OBJECT, 1, $(files))) The ‘science’ variable will now contain the unique science targets that were observed in your selected FITS images. You can use it to group the various exposures together in the next stages to make separate stacks of deep images for each science target (you can select FITS files based on their keyword values using the ‘ast-fits-with-keyvalue’ function, which is described separately in this section).  File: gnuastro.info, Node: Library, Next: Developing, Prev: Makefile extensions, Up: Top 12 Library ********** Each program in Gnuastro that was discussed in the prior chapters (or any program in general) is a collection of functions that is compiled into one executable file which can communicate directly with the outside world. The outside world in this context is the operating system. By communication, we mean that control is directly passed to a program from the operating system with a (possible) set of inputs and after it is finished, the program will pass control back to the operating system. For programs written in C and C++, the unique ‘main’ function is in charge of this communication. Similar to a program, a library is also a collection of functions that is compiled into one executable file. However, unlike programs, libraries do not have a ‘main’ function. Therefore they cannot communicate directly with the outside world. This gives you the chance to write your own ‘main’ function and call library functions from within it. After compiling your program into a binary executable, you just have to _link_ it to the library and you are ready to run (execute) your program. In this way, you can use Gnuastro at a much lower-level, and in combination with other libraries on your system, you can significantly boost your creativity. This chapter starts with a basic introduction to libraries and how you can use them in *note Review of library fundamentals::. The separate functions in the Gnuastro library are then introduced (classified by context) in *note Gnuastro library::. If you end up routinely using a fixed set of library functions, with a well-defined input and output, it will be much more beneficial if you define a program for the job. Therefore, in its *note Version controlled source::, Gnuastro comes with the *note The TEMPLATE program:: to easily define your own programs(s). * Menu: * Review of library fundamentals:: Guide on libraries and linking. * BuildProgram:: Link and run source files with this library. * Gnuastro library:: Description of all library functions. * Library demo programs:: Demonstration for using libraries.  File: gnuastro.info, Node: Review of library fundamentals, Next: BuildProgram, Prev: Library, Up: Library 12.1 Review of library fundamentals =================================== Gnuastro's libraries are written in the C programming language. In *note Why C::, we have thoroughly discussed the reasons behind this choice. C was actually created to write Unix, thus understanding the way C works can greatly help in effectively using programs and libraries in all Unix-like operating systems. Therefore, in the following subsections some important aspects of C, as it relates to libraries (and thus programs that depend on them) on Unix are reviewed. First we will discuss header files in *note Headers:: and then go onto *note Linking::. This section finishes with *note Summary and example on libraries::. If you are already familiar with these concepts, please skip this section and go directly to *note Gnuastro library::. In theory, a full operating system (or any software) can be written as one function. Such a software would not need any headers or linking (that are discussed in the subsections below). However, writing that single function and maintaining it (adding new features, fixing bugs, documentation, etc.) would be a programmer or scientist's worst nightmare! Furthermore, all the hard work that went into creating it cannot be reused in other software: every other programmer or scientist would have to re-invent the wheel. The ultimate purpose behind libraries (which come with headers and have to be linked) is to address this problem and increase modularity: "the degree to which a system's components may be separated and recombined" (from Wikipedia). The more modular the source code of a program or library, the easier maintaining it will be, and all the hard work that went into creating it can be reused for a wider range of problems. * Menu: * Headers:: Header files included in source. * Linking:: Linking the compiled source files into one. * Summary and example on libraries:: A summary and example on using libraries.  File: gnuastro.info, Node: Headers, Next: Linking, Prev: Review of library fundamentals, Up: Review of library fundamentals 12.1.1 Headers -------------- C source code is read from top to bottom in the source file, therefore program components (for example, variables, data structures and functions) should all be _defined_ or _declared_ closer to the top of the source file: before they are used. _Defining_ something in C or C++ is jargon for providing its full details. _Declaring_ it, on the other-hand, is jargon for only providing the minimum information needed for the compiler to pass it temporarily and fill in the detailed definition later. For a function, the _declaration_ only contains the inputs and their data-types along with the output's type(1). The _definition_ adds to the declaration by including the exact details of what operations are done to the inputs to generate the output. As an example, take this simple summation function: double sum(double a, double b) { return a + b; } What you see above is the _definition_ of this function: it shows you (and the compiler) exactly what it does to the two ‘double’ type inputs and that the output also has a ‘double’ type. Note that a function's internal operations are rarely so simple and short, it can be arbitrarily long and complicated. This unreasonably short and simple function was chosen here for ease of reading. The declaration for this function is: double sum(double a, double b); You can think of a function's declaration as a building's address in the city, and the definition as the building's complete blueprints. When the compiler confronts a call to a function during its processing, it does not need to know anything about how the inputs are processed to generate the output. Just as the postman does not need to know the inner structure of a building when delivering the mail. The declaration (address) is enough. Therefore by _declaring_ the functions once at the start of the source files, we do not have to worry about _defining_ them after they are used. Even for a simple real-world operation (not a simple summation like above!), you will soon need many functions (for example, some for reading/preparing the inputs, some for the processing, and some for preparing the output). Although it is technically possible, managing all the necessary functions in one file is not easy and is contrary to the modularity principle (see *note Review of library fundamentals::), for example, the functions for preparing the input can be usable in your other projects with a different processing. Therefore, as we will see later (in *note Linking::), the functions do not necessarily need to be defined in the source file where they are used. As long as their definitions are ultimately linked to the final executable, everything will be fine. For now, it is just important to remember that the functions that are called within one source file must be declared within the source file (declarations are mandatory), but not necessarily defined there. In the spirit of modularity, it is common to define contextually similar functions in one source file. For example, in Gnuastro, functions that calculate the median, mean and other statistical functions are defined in ‘lib/statistics.c’, while functions that deal directly with FITS files are defined in ‘lib/fits.c’. Keeping the definition of similar functions in a separate file greatly helps their management and modularity, but this fact alone does not make things much easier for the caller's source code: recall that while definitions are optional, declarations are mandatory. So if this was all, the caller would have to manually copy and paste (_include_) all the declarations from the various source files into the file they are working on now. To address this problem, programmers have adopted the header file convention: the header file of a source code contains all the declarations that a caller would need to be able to use any of its functions. For example, in Gnuastro, ‘lib/statistics.c’ (file containing function definitions) comes with ‘lib/gnuastro/statistics.h’ (only containing function declarations). The discussion above was mainly focused on functions, however, there are many more programming constructs such as preprocessor macros and data structures. Like functions, they also need to be known to the compiler when it confronts a call to them. So the header file also contains their definitions or declarations when they are necessary for the functions. Preprocessor macros (or macros for short) are replaced with their defined value by the preprocessor before compilation. Conventionally they are written only in capital letters to be easily recognized. It is just important to understand that the compiler does not see the macros, it sees their fixed values. So when a header specifies macros you can do your programming without worrying about the actual values. The standard C types (for example, ‘int’, or ‘float’) are very low-level and basic. We can collect multiple C types into a _structure_ for a higher-level way to keep and pass-along data. See *note Generic data container:: for some examples of macros and data structures. The contents in the header need to be _include_d into the caller's source code with a special preprocessor command: ‘#include <path/to/header.h>’. As the name suggests, the _preprocessor_ goes through the source code prior to the processor (or compiler). One of its jobs is to include, or merge, the contents of files that are mentioned with this directive in the source code. Therefore the compiler sees a single entity containing the contents of the main file and all the included files. This allows you to include many (sometimes thousands of) declarations into your code with only one line. Since the headers are also installed with the library into your system, you do not even need to keep a copy of them for each separate program, making things even more convenient. Try opening some of the ‘.c’ files in Gnuastro's ‘lib/’ directory with a text editor to check out the include directives at the start of the file (after the copyright notice). Let's take ‘lib/fits.c’ as an example. You will notice that Gnuastro's header files (like ‘gnuastro/fits.h’) are indeed within this directory (the ‘fits.h’ file is in the ‘gnuastro/’ directory). You will notice that files like ‘stdio.h’, or ‘string.h’ are not in this directory (or anywhere within Gnuastro). On most systems the basic C header files (like ‘stdio.h’ and ‘string.h’ mentioned above) are located in ‘/usr/include/’(2). Your compiler is configured to automatically search that directory (and possibly others), so you do not have to explicitly mention these directories. Go ahead, look into the ‘/usr/include’ directory and find ‘stdio.h’ for example. When the necessary header files are not in those specific libraries, the preprocessor can also search in places other than the current directory. You can specify those directories with this preprocessor option(3): ‘-I DIR’ "Add the directory ‘DIR’ to the list of directories to be searched for header files. Directories named by '-I' are searched before the standard system include directories. If the directory ‘DIR’ is a standard system include directory, the option is ignored to ensure that the default search order for system directories and the special treatment of system headers are not defeated..." (quoted from the GNU Compiler Collection manual). Note that the space between <I> and the directory is optional and commonly not used. If the preprocessor cannot find the included files, it will abort with an error. In fact a common error when building programs that depend on a library is that the compiler does not know where a library's header is (see *note Known issues::). So you have to manually tell the compiler where to look for the library's headers with the ‘-I’ option. For a small software with one or two source files, this can be done manually (see *note Summary and example on libraries::). However, to enhance modularity, Gnuastro (and most other bin/libraries) contain many source files, so the compiler is invoked many times(4). This makes manual addition or modification of this option practically impossible. To solve this problem, in the GNU build system, there are conventional environment variables for the various kinds of compiler options (or flags). These environment variables are used in every call to the compiler (they can be empty). The environment variable used for the C preprocessor (or CPP) is ‘CPPFLAGS’. By giving ‘CPPFLAGS’ a value once, you can be sure that each call to the compiler will be affected. See *note Known issues:: for an example of how to set this variable at configure time. As described in *note Installation directory::, you can select the top installation directory of a software using the GNU build system, when you ‘./configure’ it. All the separate components will be put in their separate sub-directory under that, for example, the programs, compiled libraries and library headers will go into ‘$prefix/bin’ (replace ‘$prefix’ with a directory), ‘$prefix/lib’, and ‘$prefix/include’ respectively. For enhanced modularity, libraries that contain diverse collections of functions (like GSL, WCSLIB, and Gnuastro), put their header files in a sub-directory unique to themselves. For example, all Gnuastro's header files are installed in ‘$prefix/include/gnuastro’. In your source code, you need to keep the library's sub-directory when including the headers from such libraries, for example, ‘#include <gnuastro/fits.h>’(5). Not all libraries need to follow this convention, for example, CFITSIO only has one header (‘fitsio.h’) which is directly installed in ‘$prefix/include’. ---------- Footnotes ---------- (1) Recall that in C, functions only have one output. (2) The ‘include/’ directory name is taken from the pre-processor's ‘#include’ directive, which is also the motivation behind the 'I' in the ‘-I’ option to the pre-processor. (3) Try running Gnuastro's ‘make’ and find the directories given to the compiler with the ‘-I’ option. (4) Nearly every command you see being executed after running ‘make’ is one call to the compiler. (5) the top ‘$prefix/include’ directory is usually known to the compiler  File: gnuastro.info, Node: Linking, Next: Summary and example on libraries, Prev: Headers, Up: Review of library fundamentals 12.1.2 Linking -------------- To enhance modularity, similar functions are defined in one source file (with a ‘.c’ suffix, see *note Headers:: for more). After running ‘make’, each human-readable, ‘.c’ file is translated (or compiled) into a computer-readable "object" file (ending with ‘.o’). Note that object files are also created when building programs, they are not particular to libraries. Try opening Gnuastro's ‘lib/’ and ‘bin/progname/’ directories after running ‘make’ to see these object files(1). Afterwards, the object files are _linked_ together to create an executable program or a library. The object files contain the full definition of the functions in the respective ‘.c’ file along with a list of any other function (or generally "symbol") that is referenced there. To get a list of those functions you can use the ‘nm’ program which is part of GNU Binutils. For example, from the top Gnuastro directory, run: $ nm bin/arithmetic/arithmetic.o This will print a list of all the functions (more generally, 'symbols') that were called within ‘bin/arithmetic/arithmetic.c’ along with some further information (for example, a ‘T’ in the second column shows that this function is actually defined here, ‘U’ says that it is undefined here). Try opening the ‘.c’ file to check some of these functions for yourself. Run ‘info nm’ for more information. To recap, the _compiler_ created the separate object files mentioned above for each ‘.c’ file. The _linker_ will then combine all the symbols of the various object files (and libraries) into one program or library. In the case of Arithmetic (a program) the contents of the object files in ‘bin/arithmetic/’ are copied (and re-ordered) into one final executable file which we can run from the operating system. There are two ways to _link_ all the necessary symbols: static and dynamic/shared. When the symbols (computer-readable function definitions in most cases) are copied into the output, it is called _static_ linking. When the symbols are kept in their original file and only a reference to them is kept in the executable, it is called _dynamic_, or _shared_ linking. Let's have a closer look at the executable to understand this better: we will assume you have built Gnuastro without any customization and installed Gnuastro into the default ‘/usr/local/’ directory (see *note Installation directory::). If you tried the ‘nm’ command on one of Arithmetic's object files above, then with the command below you can confirm that all the functions that were defined in the object file above (had a ‘T’ in the second column) are also defined in the ‘astarithmetic’ executable: $ nm /usr/local/bin/astarithmetic These symbols/function have been statically linked (copied) in the final executable. But you will notice that there are still many undefined symbols in the executable (those with a ‘U’ in the second column). One class of such functions are Gnuastro's own library functions that start with '‘gal_’': $ nm /usr/local/bin/astarithmetic | grep gal_ These undefined symbols (functions) are present in another file and will be linked to the Arithmetic program every time you run it. Therefore they are known as dynamically _linked_ libraries (2). As we saw above, static linking is done when the executable is being built. However, when a program is dynamically linked to a library, at build-time, the library's symbols are only checked with the available libraries: they are not actually copied into the program's executable. Every time you run the program, the (dynamic) linker will be activated and will try to link the program to the installed library before the program starts. If you want all the libraries to be statically linked to the executables, you have to tell Libtool (which Gnuastro uses for the linking) to disable shared libraries at configure time(3): $ configure --disable-shared Try configuring Gnuastro with the command above, then build and install it (as described in *note Quick start::). Afterwards, check the ‘gal_’ symbols in the installed Arithmetic executable like before. You will see that they are actually copied this time (have a ‘T’ in the second column). If the second column does not convince you, look at the executable file size with the following command: $ ls -lh /usr/local/bin/astarithmetic It should be around 4.2 Megabytes with this static linking. If you configure and build Gnuastro again with shared libraries enabled (which is the default), you will notice that it is roughly 100 Kilobytes! This huge difference would have been very significant in the old days, but with the roughly Terabyte storage drives commonly in use today, it is negligible. Fortunately, output file size is not the only benefit of dynamic linking: since it links to the libraries at run-time (rather than build-time), you do not have to rebuild a higher-level program or library when an update comes for one of the lower-level libraries it depends on. You just install the new low-level library and it will automatically be used/linked next time in the programs that use it. To be fair, this also creates a few complications(4): • Reproducibility: Even though your high-level tool has the same version as before, with the updated library, you might not get the same results. • Broken links: if some functions have been changed or removed in the updated library, then the linker will abort with an error at run-time. Therefore you need to rebuild your higher-level program or library. To see a list of all the shared libraries that are needed for a program or a shared library to run, you can use GNU C library's ‘ldd’(5) program, for example: $ ldd /usr/local/bin/astarithmetic Library file names (in their installation directory) start with a ‘lib’ and their ending (suffix) shows if they are static (‘.a’) or dynamic (‘.so’), as described below. The name of the library is in the middle of these two, for example, ‘libgsl.a’ or ‘libgnuastro.a’ (GSL and Gnuastro's static libraries), and ‘libgsl.so.23.0.0’ or ‘libgnuastro.so.4.0.0’ (GSL and Gnuastro's shared library, the numbers may be different). • A static library is known as an archive file and has the ‘.a’ suffix. A static library is not an executable file. • A shared library ends with the ‘.so.X.Y.Z’ suffix and is executable. The three numbers in the suffix, describe the version of the shared library. Shared library versions are defined to allow multiple versions of a shared library simultaneously on a system and to help detect possible updates in the library and programs that depend on it by the linker. It is very important to mention that this version number is different from the software version number (see *note Version numbering::), so do not confuse the two. See the "Library interface versions" chapter of GNU Libtool for more. For each shared library, we also have two symbolic links ending with ‘.so.X’ and ‘.so’. They are automatically set by the installer, but you can change them (point them to another version of the library) when you have multiple versions of a library on your system. Libraries that are built with GNU Libtool (including Gnuastro and its dependencies), build both static and dynamic libraries by default and install them in ‘prefix/lib/’ directory (for more on ‘prefix’, see *note Installation directory::). In this way, programs depending on the libraries can link with them however they prefer. See the contents of ‘/usr/local/lib’ with the command below to see both the static and shared libraries available there, along with their executable nature and the symbolic links: $ ls -l /usr/local/lib/ To link with a library, the linker needs to know where to find the library. _At compilation time_, these locations can be passed to the linker with two separate options (see *note Summary and example on libraries:: for an example) as described below. You can see these options and their usage in practice while building Gnuastro (after running ‘make’): ‘-L DIR’ Will tell the linker to look into ‘DIR’ for the libraries. For example, ‘-L/usr/local/lib’, or ‘-L/home/yourname/.local/lib’. You can make multiple calls to this option, so the linker looks into several directories at compilation time. Note that the space between <L> and the directory is optional and commonly ignored (written as ‘-LDIR’). ‘-lLIBRARY’ Specify the unique library identifier/name (not containing directory or shared/dynamic nature) to be linked with the executable. As discussed above, library file names have fixed parts which must not be given to this option. So ‘-lgsl’ will guide the linker to either look for ‘libgsl.a’ or ‘libgsl.so’ (depending on the type of linking it is suppose to do). You can link many libraries by repeated calls to this option. *Very important: * The place of this option on the compiler's command matters. This is often a source of confusion for beginners, so let's assume you have asked the linker to link with library A using this option. As soon as the linker confronts this option, it looks into the list of the undefined symbols it has found until that point and does a search in library A for any of those symbols. If any pending undefined symbol is found in library A, it is used. After the search in undefined symbols is complete, the contents of library A are completely discarded from the linker's memory. Therefore, if a later object file or library uses an unlinked symbol in library A, the linker will abort after it has finished its search in all the input libraries or object files. As an example, Gnuastro's ‘gal_fits_img_read’ function depends on the ‘fits_read_pix’ function of CFITSIO (specified with ‘-lcfitsio’, which in turn depends on the cURL library, called with ‘-lcurl’). So the proper way to link something that uses this function is ‘-lgnuastro -lcfitsio -lcurl’. If instead, you give: ‘-lcfitsio -lgnuastro’ the linker will complain and abort. To avoid such linking complexities when using Gnuastro's library, we recommend using *note BuildProgram::. If you have compiled and linked your program with a dynamic library, then the dynamic linker also needs to know the location of the libraries after building the program: _every time_ the program is run afterwards. Therefore, it may happen that you do not get any errors when compiling/linking a program, but are unable to run your program because of a failure to find a library. This happens because the dynamic linker has not found the dynamic library _at run time_. To find the dynamic libraries at run-time, the linker looks into the paths, or directories, in the ‘LD_LIBRARY_PATH’ environment variable. For a discussion on environment variables, especially search paths like ‘LD_LIBRARY_PATH’, and how you can add new directories to them, see *note Installation directory::. ---------- Footnotes ---------- (1) Gnuastro uses GNU Libtool for portable library creation. Libtool will also make a ‘.lo’ file for each ‘.c’ file when building libraries (‘.lo’ files are human-readable). (2) Do not confuse dynamically _linked_ libraries with dynamically _loaded_ libraries. The former (that is discussed here) are only loaded once at the program startup. However, the latter can be loaded anytime during the program's execution, they are also known as plugins. (3) Libtool is very common and is commonly used. Therefore, you can use this option to configure on most programs using the GNU build system if you want static linking. (4) Both of these can be avoided by joining the mailing lists of the lower-level libraries and checking the changes in newer versions before installing them. Updates that result in such behaviors are generally heavily emphasized in the release notes. (5) If your operating system is not using the GNU C library, you might need another tool.  File: gnuastro.info, Node: Summary and example on libraries, Prev: Linking, Up: Review of library fundamentals 12.1.3 Summary and example on libraries --------------------------------------- After the mostly abstract discussions of *note Headers:: and *note Linking::, we will give a small tutorial here. But before that, let's recall the general steps of how your source code is prepared, compiled and linked to the libraries it depends on so you can run it: 1. The *preprocessor* includes the header (‘.h’) files into the function definition (‘.c’) files, expands preprocessor macros. Generally the preprocessor prepares the human-readable source for compilation (reviewed in *note Headers::). 2. The *compiler* will translate (compile) the human-readable contents of each source (merged ‘.c’ and the ‘.h’ files, or generally the output of the preprocessor) into the computer-readable code of ‘.o’ files. 3. The *linker* will link the called function definitions from various compiled files to create one unified object. When the unified product has a ‘main’ function, this function is the product's only entry point, enabling the operating system or user to directly interact with it, so the product is a program. When the product does not have a ‘main’ function, the linker's product is a library and it is exported functions can be linked to other executables (it has many entry points). The GNU Compiler Collection (or GCC for short) will do all three steps. So as a first example, from Gnuastro's source, go to ‘tests/lib/’. This directory contains the library tests, you can use these as some simple tutorials. For this demonstration, we will compile and run the ‘arraymanip.c’. This small program will call Gnuastro library for some simple operations on an array (open it and have a look). To compile this program, run this command inside the directory containing it. $ gcc arraymanip.c -lgnuastro -lm -o arraymanip The two ‘-lgnuastro’ and ‘-lm’ options (in this order) tell GCC to first link with the Gnuastro library and then with C's math library. The ‘-o’ option is used to specify the name of the output executable, without it the output file name will be ‘a.out’ (on most OSs), independent of your input file name(s). If your top Gnuastro installation directory (let's call it ‘$prefix’, see *note Installation directory::) is not recognized by GCC, you will get preprocessor errors for unknown header files. Once you fix it, you will get linker errors for undefined functions. To fix both, you should run GCC as follows: additionally telling it which directories it can find Gnuastro's headers and compiled library (see *note Headers:: and *note Linking::): $ gcc -I$prefix/include -L$prefix/lib arraymanip.c -lgnuastro -lm \ -o arraymanip This single command has done all the preprocessor, compilation and linker operations. Therefore no intermediate files (object files in particular) were created, only a single output executable was created. You are now ready to run the program with: $ ./arraymanip The Gnuastro functions called by this program only needed to be linked with the C math library. But if your program needs WCS coordinate transformations, needs to read a FITS file, needs special math operations (which include its linear algebra operations), or you want it to run on multiple CPU threads, you also need to add these libraries in the call to GCC: ‘-lgnuastro -lwcs -lcfitsio -lgsl -lgslcblas -pthread -lm’. In *note Gnuastro library::, where each function is documented, it is mentioned which libraries (if any) must also be linked when you call a function. If you feel all these linkings can be confusing, please consider Gnuastro's *note BuildProgram:: program.  File: gnuastro.info, Node: BuildProgram, Next: Gnuastro library, Prev: Review of library fundamentals, Up: Library 12.2 BuildProgram ================= The number and order of libraries that are necessary for linking a program with Gnuastro library might be too confusing when you need to compile a small program for one particular job (with one source file). BuildProgram will use the information gathered during configuring Gnuastro and link with all the appropriate libraries on your system. This will allow you to easily compile, link and run programs that use Gnuastro's library with one simple command and not worry about which libraries to link to, or the linking order. BuildProgram uses GNU Libtool to find the necessary libraries to link against (GNU Libtool is the same program that builds all of Gnuastro's libraries and programs when you run ‘make’). So in the future, if Gnuastro's prerequisite libraries change or other libraries are added, you do not have to worry, you can just run BuildProgram and internal linking will be done correctly. *BuildProgram requires GNU Libtool:* BuildProgram depends on GNU Libtool, other implementations do not have some necessary features. If GNU Libtool is not available at Gnuastro's configure time, you will get a notice at the end of the configuration step and BuildProgram will not be built or installed. Please see *note Optional dependencies:: for more information. * Menu: * Invoking astbuildprog:: Options and examples for using this program.  File: gnuastro.info, Node: Invoking astbuildprog, Prev: BuildProgram, Up: BuildProgram 12.2.1 Invoking BuildProgram ---------------------------- BuildProgram will compile and link a C source program with Gnuastro's library and all its dependencies, greatly facilitating the compilation and running of small programs that use Gnuastro's library. The executable name is ‘astbuildprog’ with the following general template: $ astbuildprog [OPTION...] C_SOURCE_FILE One line examples: ## Compile, link and run `myprogram.c': $ astbuildprog myprogram.c ## Similar to previous, but with optimization and compiler warnings: $ astbuildprog -Wall -O2 myprogram.c ## Compile and link `myprogram.c', then run it with `image.fits' ## as its argument: $ astbuildprog myprogram.c image.fits ## Also look in other directories for headers and linking: $ astbuildprog -Lother -Iother/dir myprogram.c ## Just build (compile and link) `myprogram.c', do not run it: $ astbuildprog --onlybuild myprogram.c If BuildProgram is to run, it needs a C programming language source file as input. By default it will compile and link the given source into a final executable program and run it. The built executable name can be set with the optional ‘--output’ option. When no output name is set, BuildProgram will use Gnuastro's *note Automatic output:: system to remove the suffix of the input source file (usually ‘.c’) and use the resulting name as the built program name. For the full list of options that BuildProgram shares with other Gnuastro programs, see *note Common options::. You may also use Gnuastro's *note Configuration files:: to specify other libraries/headers to use for special directories and not have to type them in every time. The C compiler can be chosen with the ‘--cc’ option, or environment variables, please see the description of ‘--cc’ for more. The two common ‘LDFLAGS’ and ‘CPPFLAGS’ environment variables are also checked and used in the build by default. Note that they are placed after the values to the corresponding options ‘--includedir’ and ‘--linkdir’. Therefore BuildProgram's own options take precedence. Using environment variables can be disabled with the ‘--noenv’ option. Just note that BuildProgram also keeps the important flags in these environment variables in its configuration file. Therefore, in many cases, even though you may needed them to build Gnuastro, you will not need them in BuildProgram. The first argument is considered to be the C source file that must be compiled and linked. Any other arguments (non-option tokens on the command-line) will be passed onto the program when BuildProgram wants to run it. Recall that by default BuildProgram will run the program after building it. This behavior can be disabled with the ‘--onlybuild’ option. When the ‘--quiet’ option (see *note Operating mode options::) is not called, BuildPrograms will print the compilation and running commands. Once your program grows and you break it up into multiple files (which are much more easily managed with Make), you can use the linking flags of the non-quiet output in your ‘Makefile’. ‘-c STR’ ‘--cc=STR’ C compiler to use for the compilation, if not given environment variables will be used as described in the next paragraph. If the compiler is in your system's search path, you can simply give its name, for example, ‘--cc=gcc’. If it is not in your system's search path, you can give its full path, for example, ‘--cc=/path/to/your/custom/cc’. If this option has no value after parsing the command-line and all configuration files (see *note Configuration file precedence::), then BuildProgram will look into the following environment variables in the given order ‘CC’ and ‘GCC’. If they are also not defined, BuildProgram will ultimately default to the ‘gcc’ command which is present in many systems (sometimes as a link to other compilers). ‘-I STR’ ‘--includedir=STR’ Directory to search for files that you ‘#include’ in your C program. Note that headers relating to Gnuastro and its dependencies do not need this option. This is only necessary if you want to use other headers. It may be called multiple times and order matters. This directory will be searched before those of Gnuastro's build and also the system search directories. See *note Headers:: for a thorough introduction. From the GNU C preprocessor manual: "Add the directory ‘STR’ to the list of directories to be searched for header files. Directories named by ‘-I’ are searched before the standard system include directories. If the directory ‘STR’ is a standard system include directory, the option is ignored to ensure that the default search order for system directories and the special treatment of system headers are not defeated". ‘-L STR’ ‘--linkdir=STR’ Directory to search for compiled libraries to link the program with. Note that all the directories that Gnuastro was built with will already be used by BuildProgram (GNU Libtool). This option is only necessary if your libraries are in other directories. Multiple calls to this option are possible and order matters. This directory will be searched before those of Gnuastro's build and also the system search directories. See *note Linking:: for a thorough introduction. ‘-l STR’ ‘--linklib=STR’ Library to link with your program. Note that all the libraries that Gnuastro was built with will already be linked by BuildProgram (GNU Libtool). This option is only necessary if you want to link with other directories. Multiple calls to this option are possible and order matters. This library will be linked before Gnuastro's library or its dependencies. See *note Linking:: for a thorough introduction. ‘-O INT/STR’ ‘--optimize=INT/STR’ Compiler optimization level: 0 (for no optimization, good debugging), 1, 2, 3 (for the highest level of optimizations). From the GNU Compiler Collection (GCC) manual: "Without any optimization option, the compiler's goal is to reduce the cost of compilation and to make debugging produce the expected results. Statements are independent: if you stop the program with a break point between statements, you can then assign a new value to any variable or change the program counter to any other statement in the function and get exactly the results you expect from the source code. Turning on optimization flags makes the compiler attempt to improve the performance and/or code size at the expense of compilation time and possibly the ability to debug the program." Please see your compiler's manual for the full list of acceptable values to this option. ‘-g’ ‘--debug’ Emit extra information in the compiled binary for use by a debugger. When calling this option, it is best to explicitly disable optimization with ‘-O0’. To combine both options you can run ‘-gO0’ (see *note Options:: for how short options can be merged into one). ‘-W STR’ ‘--warning=STR’ Print compiler warnings on command-line during compilation. "Warnings are diagnostic messages that report constructions that are not inherently erroneous but that are risky or suggest there may have been an error." (from the GCC manual). It is always recommended to compile your programs with warnings enabled. All compiler warning options that start with ‘W’ are usable by this option in BuildProgram also, see your compiler's manual for the full list. Some of the most common values to this option are: ‘pedantic’ (Warnings related to standard C) and ‘all’ (all issues the compiler confronts). ‘-t’ ‘--tag=STR’ The language configuration information. Libtool can build objects and libraries in many languages. In many cases, it can identify the language automatically, but when it does not you can use this option to explicitly notify Libtool of the language. The acceptable values are: ‘CC’ for C, ‘CXX’ for C++, ‘GCJ’ for Java, ‘F77’ for Fortran 77, ‘FC’ for Fortran, ‘GO’ for Go and ‘RC’ for Windows Resource. Note that the Gnuastro library is not yet fully compatible with all these languages. ‘-b’ ‘--onlybuild’ Only build the program, do not run it. By default, the built program is immediately run afterwards. ‘-d’ ‘--deletecompiled’ Delete the compiled binary file after running it. This option is only relevant when the compiled program is run after being built. In other words, it is only relevant when ‘--onlybuild’ is not called. It can be useful when you are busy testing a program or just want a fast result and the actual binary/compiled file is not of later use. ‘-a STR’ ‘--la=STR’ Use the given ‘.la’ file (Libtool control file) instead of the one that was produced from Gnuastro's configuration results. The Libtool control file keeps all the necessary information for building and linking a program with a library built by Libtool. The default ‘prefix/lib/libgnuastro.la’ keeps all the information necessary to build a program using the Gnuastro library gathered during configure time (see *note Installation directory:: for prefix). This option is useful when you prefer to use another Libtool control file. ‘-e’ ‘--noenv’ Do not use environment variables in the build, just use the values given to the options. As described above, environment variables like ‘CC’, ‘GCC’, ‘LDFLAGS’, ‘CPPFLAGS’ will be read by default and used in the build if they have been defined.  File: gnuastro.info, Node: Gnuastro library, Next: Library demo programs, Prev: BuildProgram, Up: Library 12.3 Gnuastro library ===================== Gnuastro library's programming constructs (function declarations, macros, data structures, or global variables) are classified by context into multiple header files (see *note Headers::)(1). In this section, the functions in each header will be discussed under a separate sub-section, which includes the name of the header. Assuming a function declaration is in ‘headername.h’, you can include its declaration in your source code with: # include <gnuastro/headername.h> The names of all constructs in ‘headername.h’ are prefixed with ‘gal_headername_’ (or ‘GAL_HEADERNAME_’ for macros). The ‘gal_’ prefix stands for _G_NU _A_stronomy _L_ibrary. Gnuastro library functions are compiled into a single file which can be linked on the command-line with the ‘-lgnuastro’ option. See *note Linking:: and *note Summary and example on libraries:: for an introduction on linking and some fully working examples of the libraries. Gnuastro's library is a high-level library which depends on lower level libraries for some operations (see *note Dependencies::). Therefore if at least one of Gnuastro's functions in your program use functions from the dependencies, you will also need to link those dependencies after linking with Gnuastro. See *note BuildProgram:: for a convenient way to deal with the dependencies. BuildProgram will take care of the libraries to link with your program (which uses the Gnuastro library), and can even run the built program afterwards. Therefore it allows you to conveniently focus on your exciting science/research when using Gnuastro's libraries. *Libraries are still under heavy development: * Gnuastro was initially created to be a collection of command-line programs. However, as the programs and their the shared functions grew, internal (not installed) libraries were added. Since the 0.2 release, the libraries are install-able. Hence the libraries are currently under heavy development and will significantly evolve between releases and will become more mature and stable in due time. It will stabilize with the removal of this notice. Check the ‘NEWS’ file for interface changes. If you use the Info version of this manual (see *note Info::), you do not have to worry: the documentation will correspond to your installed version. * Menu: * Configuration information:: General information about library config. * Multithreaded programming:: Tools for easy multi-threaded operations. * Library data types:: Definitions and functions for types. * Pointers:: Wrappers for easy working with pointers.** * Library blank values:: Blank values and functions to deal with them. * Library data container:: General data container in Gnuastro. * Dimensions:: Dealing with coordinates and dimensions. * Linked lists:: Various types of linked lists. * Array input output:: Reading and writing images or cubes. * Table input output:: Reading and writing table columns. * FITS files:: Working with FITS data. * File input output:: Reading and writing to various file formats. * World Coordinate System:: Dealing with the world coordinate system. * Arithmetic on datasets:: Arithmetic operations on a dataset. * Tessellation library:: Functions for working on tiles. * Bounding box:: Finding the bounding box. * Polygons:: Working with the vertices of a polygon. * Qsort functions:: Helper functions for Qsort. * K-d tree:: Space partitioning in K dimensions. * Permutations:: Re-order (or permute) the values in a dataset. * Matching:: Matching catalogs based on position. * Statistical operations:: Functions for basic statistics. * Fitting functions:: Fit independent and measured variables. * Binary datasets:: Datasets that can only have values of 0 or 1. * Labeled datasets:: Working with Segmented/labeled datasets. * Convolution functions:: Library functions to do convolution. * Pooling functions:: Reduce size of input by statistical methods. * Interpolation:: Interpolate (over blank values possibly). * Warp library:: Warp pixel grid to a new one. * Color functions:: Definitions and operations related to colors. * Git wrappers:: Wrappers for functions in libgit2. * Python interface:: Functions to help in writing Python wrappers. * Unit conversion library:: Converting between recognized units. * Spectral lines library:: Functions for operating on Spectral lines. * Cosmology library:: Cosmological calculations. * SAO DS9 library:: Take inputs from files generated by SAO DS9. ---------- Footnotes ---------- (1) Within Gnuastro's source, all installed ‘.h’ files in ‘lib/gnuastro/’ are accompanied by a ‘.c’ file in ‘/lib/’.  File: gnuastro.info, Node: Configuration information, Next: Multithreaded programming, Prev: Gnuastro library, Up: Gnuastro library 12.3.1 Configuration information (‘config.h’) --------------------------------------------- The ‘gnuastro/config.h’ header contains information about the full Gnuastro installation on your system. Gnuastro developers should note that this is the only header that is not available within Gnuastro, it is only available to a Gnuastro library user _after_ installation. Within Gnuastro, ‘config.h’ (which is included in every Gnuastro ‘.c’ file, see *note Coding conventions::) has more than enough information about the overall Gnuastro installation. -- Macro: GAL_CONFIG_VERSION This macro can be used as a string literal(1) containing the version of Gnuastro that is being used. See *note Version numbering:: for the version formats. For example: printf("Gnuastro version: %s\n", GAL_CONFIG_VERSION); or char *gnuastro_version=GAL_CONFIG_VERSION; -- Macro: GAL_CONFIG_HAVE_GSL_INTERP_STEFFEN GNU Scientific Library (GSL) is a mandatory dependency of Gnuastro (see *note GNU Scientific Library::). The Steffen interpolation function that can be used in Gnuastro was introduced in GSL version 2.0 (released in October 2015). This macro will have a value of ‘1’ if the host GSL contains this feature at configure time, and ‘0’ otherwise. -- Macro: GAL_CONFIG_HAVE_FITS_IS_REENTRANT This macro will have a value of 1 when the CFITSIO of the host system has the ‘fits_is_reentrant’ function (available from CFITSIO version 3.30). This function is used to see if CFITSIO was configured to read a FITS file simultaneously on different threads. -- Macro: GAL_CONFIG_HAVE_WCSLIB_VERSION WCSLIB is the reference library for world coordinate system transformation (see *note WCSLIB:: and *note World Coordinate System::). However, only more recent versions of WCSLIB also provide its version number. If the WCSLIB that is installed on the system provides its version (through the possibly existing ‘wcslib_version’ function), this macro will have a value of one, otherwise it will have a value of zero. -- Macro: GAL_CONFIG_HAVE_WCSLIB_DIS_H This macro has a value of 1 if the host's WCSLIB has the ‘wcslib/dis.h’ header for distortion-related operations. -- Macro: GAL_CONFIG_HAVE_WCSLIB_MJDREF This macro has a value of 1 if the host's WCSLIB reads and stores the ‘MJDREF’ FITS header keyword as part of its core ‘wcsprm’ structure. -- Macro: GAL_CONFIG_HAVE_WCSLIB_OBSFIX This macro has a value of 1 if the host's WCSLIB supports the ‘OBSFIX’ feature (used by ‘wcsfix’ function to parse the input WCS for known errors). -- Macro: GAL_CONFIG_HAVE_PTHREAD_BARRIER The POSIX threads standard define barriers as an optional requirement. Therefore, some operating systems choose to not include it. As one of the ‘./configure’ step checks, Gnuastro we check if your system has this POSIX thread barriers. If so, this macro will have a value of ‘1’, otherwise it will have a value of ‘0’. see *note Implementation of pthread_barrier:: for more. -- Macro: GAL_CONFIG_SIZEOF_LONG -- Macro: GAL_CONFIG_SIZEOF_SIZE_T The size of (number of bytes in) the system's ‘long’ and ‘size_t’ types. Their values are commonly either 4 or 8 for 32-bit and 64-bit systems. You can also get this value with the expression '‘sizeof size_t’' for example, without having to include this header. -- Macro: GAL_CONFIG_HAVE_LIBGIT2 Libgit2 is an optional dependency of Gnuastro (see *note Optional dependencies::). When it is installed and detected at configure time, this macro will have a value of ‘1’ (one). Otherwise, it will have a value of ‘0’ (zero). Gnuastro also comes with some wrappers to make it easier to use libgit2 (see *note Git wrappers::). -- Macro: GAL_CONFIG_HAVE_PYTHON Gnuastro can optionally provide a set of basic functions to facilitate wrapper libraries in Python (see *note Python interface::). If a version of Python 3.X was found on the host system that has the necessary Numpy headers, this macro will be given a value of ‘1’. Otherwise, it will be given a value of ‘0’ and the the Python interface functions won't be available in the host's Gnuastro library. -- Macro: GAL_CONFIG_HAVE_GNUMAKE_H Gnuastro provides a set of GNU Make extension functions (see *note Makefile extensions::). In order to use those, the host should have ‘gnumake.h’ in its include paths. This check is done at Gnuastro's configuration time. If it was found, this macro is given a value of ‘1’, otherwise, it will have a value of ‘0’. ---------- Footnotes ---------- (1) <https://en.wikipedia.org/wiki/String_literal>  File: gnuastro.info, Node: Multithreaded programming, Next: Library data types, Prev: Configuration information, Up: Gnuastro library 12.3.2 Multithreaded programming (‘threads.h’) ---------------------------------------------- In recent years, newer CPUs do not have significantly higher frequencies any more. However, CPUs are being manufactured with more cores, enabling more than one operation (thread) at each instant. This can be very useful to speed up many aspects of processing and in particular image processing. Most of the programs in Gnuastro utilize multi-threaded programming for the CPU intensive processing steps. This can potentially lead to a significant decrease in the running time of a program, see *note A note on threads::. In terms of reading the code, you do not need to know anything about multi-threaded programming. You can simply follow the case where only one thread is to be used. In these cases, threads are not used and can be completely ignored. When the C language was defined (the K&R's book was written), using threads was not common, so C's threading capabilities are not introduced there. Gnuastro uses POSIX threads for multi-threaded programming, defined in the ‘pthread.h’ system wide header. There are various resources for learning to use POSIX threads. An excellent tutorial (https://computing.llnl.gov/tutorials/pthreads/) is provided by the Lawrence Livermore National Laboratory, with abundant figures to better understand the concepts, it is a very good start. The book 'Advanced programming in the Unix environment'(1), by Richard Stevens and Stephen Rago, Addison-Wesley, 2013 (Third edition) also has two chapters explaining the POSIX thread constructs which can be very helpful. An alternative to POSIX threads was OpenMP, but POSIX threads are low level, allowing much more control, while being easier to understand, see *note Why C::. All the situations where threads are used in Gnuastro currently are completely independent with no need of coordination between the threads. Such problems are known as "embarrassingly parallel" problems. They are some of the simplest problems to solve with threads and are also the ones that benefit most from them, see the LLNL introduction(2). One very useful POSIX thread concept is ‘pthread_barrier’. Unfortunately, it is only an optional feature in the POSIX standard, so some operating systems do not include it. Therefore in *note Implementation of pthread_barrier::, we introduce our own implementation. This is a rather technical section only necessary for more technical readers and you can safely ignore it. Following that, we describe the helper functions in this header that can greatly simplify writing a multi-threaded program, see *note Gnuastro's thread related functions:: for more. * Menu: * Implementation of pthread_barrier:: Some systems do not have pthread_barrier * Gnuastro's thread related functions:: Functions for managing threads. ---------- Footnotes ---------- (1) Do not let the title scare you! The two chapters on Multi-threaded programming are very self-sufficient and do not need any more knowledge than K&R. (2) <https://computing.llnl.gov/tutorials/parallel_comp/>  File: gnuastro.info, Node: Implementation of pthread_barrier, Next: Gnuastro's thread related functions, Prev: Multithreaded programming, Up: Multithreaded programming 12.3.2.1 Implementation of ‘pthread_barrier’ ............................................ One optional feature of the POSIX Threads standard is the ‘pthread_barrier’ concept. It is a very useful high-level construct that allows for independent threads to "wait" behind a "barrier" for the rest after they finish. Barriers can thus greatly simplify the code in a multi-threaded program, so they are heavily used in Gnuastro. However, since it is an optional feature in the POSIX standard, some operating systems do not include it. So to make Gnuastro portable, we have written our own implementation of those ‘pthread_barrier’ functions. At ‘./configure’ time, Gnuastro will check if ‘pthread_barrier’ constructs are available on your system or not. If ‘pthread_barrier’ is not available, our internal implementation will be compiled into the Gnuastro library and the definitions and declarations below will be usable in your code with ‘#include <gnuastro/threads.h>’. -- Type: pthread_barrierattr_t Type to specify the attributes of a POSIX threads barrier. -- Type: pthread_barrier_t Structure defining the POSIX threads barrier. -- Function: int pthread_barrier_init (pthread_barrier_t *b, pthread_barrierattr_t *attr, unsigned int limit) Initialize the barrier ‘b’, with the attributes ‘attr’ and total ‘limit’ (a number of) threads that must wait behind it. This function must be called before spinning off threads. -- Function: int pthread_barrier_wait (pthread_barrier_t *b) This function is called within each thread, just before it is ready to return. Once a thread's function hits this, it will "wait" until all the other functions are also finished. -- Function: int pthread_barrier_destroy (pthread_barrier_t *b) Destroy all the information in the barrier structure. This should be called by the function that spun-off the threads after all the threads have finished. *Destroy a barrier before re-using it:* It is very important to destroy the barrier before (possibly) reusing it. This destroy function not only destroys the internal structures, it also waits (in 1 microsecond intervals, so you will not notice!) until all the threads do not need the barrier structure any more. If you immediately start spinning off new threads with a not-destroyed barrier, then the internal structure of the remaining threads will get mixed with the new ones and you will get very strange and apparently random errors that are extremely hard to debug.  File: gnuastro.info, Node: Gnuastro's thread related functions, Prev: Implementation of pthread_barrier, Up: Multithreaded programming 12.3.2.2 Gnuastro's thread related functions ............................................ The POSIX Threads functions offered in the C library are very low-level and offer a great range of control over the properties of the threads. So if you are interested in customizing your tools for complicated thread applications, it is strongly encouraged to get a nice familiarity with them. Some resources were introduced in *note Multithreaded programming::. However, in many cases used in astronomical data analysis, you do not need communication between threads and each target operation can be done independently. Since such operations are very common, Gnuastro provides the tools below to facilitate the creation and management of jobs without any particular knowledge of POSIX Threads for such operations. The most interesting high-level functions of this section are the ‘gal_threads_number’ and ‘gal_threads_spin_off’ that identify the number of threads on the system and spin-off threads. You can see a demonstration of using these functions in *note Library demo - multi-threaded operation::. -- C struct: gal_threads_params Structure keeping the parameters of each thread. When each thread is created, a pointer to this structure is passed to it. The ‘params’ element can be the pointer to a structure defined by the user which contains all the necessary parameters to pass onto the worker function. The rest of the elements within this structure are set internally by ‘gal_threads_spin_off’ and are relevant to the worker function. struct gal_threads_params { size_t id; /* Id of this thread. */ void *params; /* User-identified pointer. */ size_t *indexs; /* Target indices given to this thread. */ pthread_barrier_t *b; /* Barrier for all threads. */ }; -- Function: size_t gal_threads_number () Return the number of threads that the operating system has available for your program. This number is usually fixed for a single machine and does not change. So this function is useful when you want to run your program on different machines (with different CPUs). -- Function: void gal_threads_spin_off (void *(*worker)(void *), void *caller_params, size_t numactions, size_t numthreads, size_t minmapsize, int quietmmap) Distribute ‘numactions’ jobs between ‘numthreads’ threads and spin-off each thread by calling the ‘worker’ function. The ‘caller_params’ pointer will also be passed to ‘worker’ as part of the ‘gal_threads_params’ structure. For a fully working example of this function, please see *note Library demo - multi-threaded operation::. If there are many jobs (millions or billions) to organize, memory issues may become important. With ‘minmapsize’ you can specify the minimum byte-size to allocate the necessary space in a memory-mapped file or alternatively in RAM. If ‘quietmmap’ is non-zero, then a warning will be printed upon creating a memory-mapped file. For more on Gnuastro's memory management, see *note Memory management::. -- Function: void gal_threads_attr_barrier_init (pthread_attr_t *attr, pthread_barrier_t *b, size_t limit) This is a low-level function in case you do not want to use ‘gal_threads_spin_off’. It will initialize the general thread attribute ‘attr’ and the barrier ‘b’ with ‘limit’ threads to wait behind the barrier. For maximum efficiency, the threads initialized with this function will be detached. Therefore no communication is possible between these threads and in particular ‘pthread_join’ will not work on these threads. You have to use the barrier constructs to wait for all threads to finish. -- Function: char * gal_threads_dist_in_threads (size_t numactions, size_t numthreads, size_t minmapsize, int quietmmap, size_t **indexs, size_t *icols) This is a low-level function in case you do not want to use ‘gal_threads_spin_off’. The job of this function is to distribute ‘numactions’ jobs/actions in ‘numthreads’ threads. To do this, it will assign each job an ID, ranging from 0 to ‘numactions’-1. The output is the allocated ‘*indexs’ array and the ‘*icols’ number. In memory, it is just a simple 1D array that has ‘numthreads’ $\times$ ‘*icols’ elements. But you can visualize it as a 2D array with ‘numthreads’ rows and ‘*icols’ columns. For more on the logic of the distribution, see below. When you have millions/billions of jobs to distribute, ‘indexs’ will become very large. For memory management (when to use a memory-mapped file, and when to use RAM), you need to specify the ‘minmapsize’ and ‘quietmmap’ arguments. For more on memory management, see *note Memory management::. In general, if your distributed jobs will not be on the scale of billions (and you want everything to always be written in RAM), just set ‘minmapsize=-1’ and ‘quietmmap=1’. When ‘indexs’ is actually in a memory-mapped file, this function will return a string containing the name of the file (that you can later give to ‘gal_pointer_mmap_free’ to free/delete). When ‘indexs’ is in RAM, this function will return a ‘NULL’ pointer. So after you are finished with ‘indexs’, you can free it like this: char *mmapname; int quietmmap=1; size_t *indexs, thrdcols; size_t numactions=5000, minmapsize=-1; size_t numthreads=gal_threads_number(); /* Distribute the jobs. */ mmapname=gal_threads_dist_in_threads(numactions, numthreads, minmapsize, quietmmap, &indexs, &thrdcols); /* Do any processing you want... */ /* Free the 'indexs' array. */ if(mmapname) gal_pointer_mmap_free(&mmapname, quietmmap); else free(indexs); Here is a brief description of the reasoning behind the ‘indexs’ array and how the jobs are distributed. Let's assume you have $A$ actions (where there is only one function and the input values differ for each action) and $T$ threads available to the system with $A>T$ (common values for these two would be $A>1000$ and $T<10$). Spinning off a thread is not a cheap job and requires a significant number of CPU cycles. Therefore, creating $A$ threads is not the best way to address such a problem. The most efficient way to manage the actions is such that only $T$ threads are created, and each thread works on a list of actions identified for it in series (one after the other). This way your CPU will get all the actions done with minimal overhead. The purpose of this function is to do what we explained above: each row in the ‘indexs’ array contains the indices of actions which must be done by one thread (so it has ‘numthreads’ rows with ‘*icols’ columns). However, when using ‘indexs’, you do not have to know the number of columns. It is guaranteed that all the rows finish with ‘GAL_BLANK_SIZE_T’ (see *note Library blank values::). The ‘GAL_BLANK_SIZE_T’ macro plays a role very similar to a string's ‘\0’: every row finishes with this macro, so can easily stop parsing the indexes in the row as soon as you confront ‘GAL_BLANK_SIZE_T’. For some real examples, please see the example program in ‘tests/lib/multithread.c’ for a demonstration.  File: gnuastro.info, Node: Library data types, Next: Pointers, Prev: Multithreaded programming, Up: Gnuastro library 12.3.3 Library data types (‘type.h’) ------------------------------------ Data in astronomy can have many types, numeric (numbers) and strings (names, identifiers). The former can also be divided into integers and floats, see *note Numeric data types:: for a thorough discussion of the different numeric data types and which one is useful for different contexts. To deal with the very large diversity of types that are available (and used in different contexts), in Gnuastro each type is identified with global integer variable with a fixed name, this variable is then passed onto functions that can work on any type or is stored in Gnuastro's *note Generic data container:: as one piece of meta-data. The actual values within these integer constants is irrelevant and you should never rely on them. When you need to check, explicitly use the named variable in the table below. If you want to check with more than one type, you can use C's ‘switch’ statement. Since Gnuastro heavily deals with file input-output, the types it defines are fixed width types, these types are portable to all systems and are defined in the standard C header ‘stdint.h’. You do not need to include this header, it is included by any Gnuastro header that deals with the different types. However, the most commonly used types in a C (or C++) program (for example, ‘int’ or ‘long’) are not defined by their exact width (storage size), but by their minimum storage. So for example, on some systems, ‘int’ may be 2 bytes (16-bits, the minimum required by the standard) and on others it may be 4 bytes (32-bits, common in modern systems). With every type, a unique "blank" value (or place-holder showing the absence of data) can be defined. Please see *note Library blank values:: for constants that Gnuastro recognizes as a blank value for each type. See *note Numeric data types:: for more explanation on the limits and particular aspects of each type. -- Global integer: GAL_TYPE_INVALID This is just a place-holder to specifically mark that no type has been set. -- Global integer: GAL_TYPE_BIT Identifier for a bit-stream. Currently no program in Gnuastro works directly on bits, but features will be added in the future. -- Global integer: GAL_TYPE_UINT8 Identifier for an unsigned, 8-bit integer type: ‘uint8_t’ (from ‘stdint.h’), or an ‘unsigned char’ in most modern systems. -- Global integer: GAL_TYPE_INT8 Identifier for a signed, 8-bit integer type: ‘int8_t’ (from ‘stdint.h’), or an ‘signed char’ in most modern systems. -- Global integer: GAL_TYPE_UINT16 Identifier for an unsigned, 16-bit integer type: ‘uint16_t’ (from ‘stdint.h’), or an ‘unsigned short’ in most modern systems. -- Global integer: GAL_TYPE_INT16 Identifier for a signed, 16-bit integer type: ‘int16_t’ (from ‘stdint.h’), or a ‘short’ in most modern systems. -- Global integer: GAL_TYPE_UINT32 Identifier for an unsigned, 32-bit integer type: ‘uint32_t’ (from ‘stdint.h’), or an ‘unsigned int’ in most modern systems. -- Global integer: GAL_TYPE_INT32 Identifier for a signed, 32-bit integer type: ‘int32_t’ (from ‘stdint.h’), or an ‘int’ in most modern systems. -- Global integer: GAL_TYPE_UINT64 Identifier for an unsigned, 64-bit integer type: ‘uint64_t’ (from ‘stdint.h’), or an ‘unsigned long’ in most modern 64-bit systems. -- Global integer: GAL_TYPE_INT64 Identifier for a signed, 64-bit integer type: ‘int64_t’ (from ‘stdint.h’), or an ‘long’ in most modern 64-bit systems. -- Global integer: GAL_TYPE_INT Identifier for a ‘int’ type. This is just an alias to ‘int16’, or ‘int32’ types, depending on the system. -- Global integer: GAL_TYPE_UINT Identifier for a ‘unsigned int’ type. This is just an alias to ‘uint16’, or ‘uint32’ types, depending on the system. -- Global integer: GAL_TYPE_ULONG Identifier for a ‘unsigned long’ type. This is just an alias to ‘uint32’, or ‘uint64’ types for 32-bit, or 64-bit systems respectively. -- Global integer: GAL_TYPE_LONG Identifier for a ‘long’ type. This is just an alias to ‘int32’, or ‘int64’ types for 32-bit, or 64-bit systems respectively. -- Global integer: GAL_TYPE_SIZE_T Identifier for a ‘size_t’ type. This is just an alias to ‘uint32’, or ‘uint64’ types for 32-bit, or 64-bit systems respectively. -- Global integer: GAL_TYPE_FLOAT32 Identifier for a 32-bit single precision floating point type or ‘float’ in C. -- Global integer: GAL_TYPE_FLOAT64 Identifier for a 64-bit double precision floating point type or ‘double’ in C. -- Global integer: GAL_TYPE_COMPLEX32 Identifier for a complex number composed of two ‘float’ types. Note that the complex type is not yet fully implemented in all Gnuastro's programs. -- Global integer: GAL_TYPE_COMPLEX64 Identifier for a complex number composed of two ‘double’ types. Note that the complex type is not yet fully implemented in all Gnuastro's programs. -- Global integer: GAL_TYPE_STRING Identifier for a string of characters (‘char *’). -- Global integer: GAL_TYPE_STRLL Identifier for a linked list of string of characters (‘gal_list_str_t’, see *note List of strings::). The functions below are defined to make working with the integer constants above easier. In the functions below, the constants above can be used for the ‘type’ input argument. -- Function: size_t gal_type_sizeof (uint8_t type) Return the number of bytes occupied by ‘type’. Internally, this function uses C's ‘sizeof’ operator to measure the size of each type. For strings, this function will return the size of ‘char *’. -- Function: char * gal_type_name (uint8_t type, int long_name) Return a string literal that contains the name of ‘type’. It can return both short and long formats of the type names (for example, ‘f32’ and ‘float32’). If ‘long_name’ is non-zero, the long format will be returned, otherwise the short name will be returned. The output string is statically allocated, so it should not be freed. This function is the inverse of the ‘gal_type_from_name’ function. For the full list of names/strings that this function will return, see *note Numeric data types::. -- Function: uint8_t gal_type_from_name (char *str) Return the Gnuastro integer constant that corresponds to the string ‘str’. This function is the inverse of the ‘gal_type_name’ function and accepts both the short and long formats of each type. For the full list of names/strings that this function will return, see *note Numeric data types::. -- Function: void gal_type_min (uint8_t type, void *in) Put the minimum possible value of ‘type’ in the space pointed to by ‘in’. Since the value can have any type, this function does not return anything, it assumes the space for the given type is available to ‘in’ and writes the value there. Here is one example int32_t min; gal_type_min(GAL_TYPE_INT32, &min); Note: Do not use the minimum value for a blank value of a general (initially unknown) type, please use the constants/functions provided in *note Library blank values:: for the definition and usage of blank values. -- Function: void gal_type_max (uint8_t type, void *in) Put the maximum possible value of ‘type’ in the space pointed to by ‘in’. Since the value can have any type, this function does not return anything, it assumes the space for the given type is available to ‘in’ and writes the value there. Here is one example uint16_t max; gal_type_max(GAL_TYPE_INT16, &max); Note: Do not use the maximum value for a blank value of a general (initially unknown) type, please use the constants/functions provided in *note Library blank values:: for the definition and usage of blank values. -- Function: int gal_type_is_int (uint8_t type) Return 1 if the type is an integer (any width and any sign). -- Function: int gal_type_is_list (uint8_t type) Return 1 if the type is a linked list and zero otherwise. -- Function: int gal_type_out (int first_type, int second_type) Return the larger of the two given types which can be used for the type of the output of an operation involving the two input types. -- Function: char * gal_type_bit_string (void *in, size_t size) Return the bit-string in the ‘size’ bytes that ‘in’ points to. The string is dynamically allocated and must be freed afterwards. You can use it to inspect the bits within one region of memory. Here is one short example: int32_t a=2017; char *bitstr=gal_type_bit_string(&a, 4); printf("%d: %s (%X)\n", a, bitstr, a); free(bitstr); which will produce: 2017: 11100001000001110000000000000000 (7E1) As the example above shows, the bit-string is not the most efficient way to inspect bits. If you are familiar with hexadecimal notation, it is much more compact, see <https://en.wikipedia.org/wiki/Hexadecimal>. You can use ‘printf’'s ‘%x’ or ‘%X’ to print integers in hexadecimal format. -- Function: char * gal_type_to_string (void *ptr, uint8_t type, int quote_if_str_has_space); Read the contents of the memory that ‘ptr’ points to (assuming it has type ‘type’ and print it into an allocated string which is returned. If the memory is a string of characters and ‘quote_if_str_has_space’ is non-zero, the output string will have double-quotes around it if it contains space characters. Also, note that in this case, ‘ptr’ must be a pointer to an array of characters (or ‘char **’), as in the example below (which will put ‘"sample string"’ into ‘out’): char *out, *string="sample string" out = gal_type_to_string(&string, GAL_TYPE_STRING, 1); -- Function: int gal_type_from_string (void **out, char *string, uint8_t type) Read a string as a given data type and put a pointer to it in ‘*out’. When ‘*out!=NULL’, then it is assumed to be already allocated and the value will be simply put there. If ‘*out==NULL’, then space will be allocated for the given type and the string will be read into that type. Note that when we are dealing with a string type, ‘*out’ should be interpreted as ‘char **’ (one element in an array of pointers to different strings). In other words, ‘out’ should be ‘char ***’. This function can be used to fill in arrays of numbers from strings (in an already allocated data structure), or add nodes to a linked list (if the type is a list type). For an array, you have to pass the pointer to the ‘i’th element where you want the value to be stored, for example, ‘&(array[i])’. If the string was successfully parsed to the requested type, this function will return a ‘0’ (zero), otherwise it will return ‘1’ (one). This output format will help you check the status of the conversion in a code like the example below where we will try reading a string as a single precision floating point number. float out; void *outptr=&out; if( gal_type_from_string(&outptr, string, GAL_TYPE_FLOAT32) ) { fprintf(stderr, "%s could not be read as float32\n", string); exit(EXIT_FAILURE); } When you need to read many numbers into an array, ‘out’ would be an array, and you can simply increment ‘outptr=out+i’ (where you increment ‘i’). -- Function: void * gal_type_string_to_number (char *string, uint8_t *type) Read ‘string’ into smallest type that can host the number, the allocated space for the number will be returned and the type of the number will be put into the memory that ‘type’ points to. If ‘string’ could not be read as a number, this function will return ‘NULL’. This function first calls the C library's ‘strtod’ function to read ‘string’ as a double-precision floating point number. When successful, it will check the value to put it in the smallest numerical data type that can handle it; for example, ‘120’ and ‘50000’ will be read as a signed 8-bit integer and unsigned 16-bit integer types. When reading as an integer, the C library's ‘strtol’ function is used (in base-10) to parse the string again. This re-parsing as an integer is necessary because integers with many digits (for example, the Unix epoch seconds) will not be accurately stored as a floating point and we cannot use the result of ‘strtod’. When ‘string’ is successfully parsed as a number _and_ there is ‘.’ in ‘string’, it will force the number into floating point types. For example, ‘"5"’ is read as an integer, while ‘"5."’ or ‘"5.0"’, or ‘"5.00"’ will be read as a floating point (single-precision). For floating point types, this function will count the number of significant digits and determine if the given string is single or double precision as described in *note Numeric data types::. For integers, negative numbers will always be placed in signed types (as expected). If a positive integer falls below the maximum of a signed type of a certain width, it will be signed (for example, ‘10’ and ‘150’ will be defined as a signed and unsigned 8-bit integer respectively). In other words, even though ‘10’ can be unsigned, it will be read as a signed 8-bit integer. This is done to respect the C implicit type conversion in binary operators, where signed integers will be interpreted as unsigned, when the other operand is an unsigned integer of the same width. For example, see the short program below. It will print ‘-50 is larger than 100000’ (which is wrong!). This happens because when a negative number is parsed as an unsigned, the value is effectively subtracted from the maximum and $4294967295-50$ is indeed larger than 100000 (recall that $4294967295$ is the largest unsigned 32-bit integer, see *note Numeric data types::). #include <stdio.h> #include <stdlib.h> #include <stdint.h> int main(void) { int32_t a=-50; uint32_t b=100000; printf("%d is %s than %d\n", a, a>b ? "larger" : "less or equal", b); return 0; } However, if we read 100000 as a signed 32-bit integer, there will not be any problem and the printed sentence will be logically correct (for someone who does not know anything about numeric data types: users of your programs). For the advantages of integers, see *note Integer benefits and pitfalls::.  File: gnuastro.info, Node: Pointers, Next: Library blank values, Prev: Library data types, Up: Gnuastro library 12.3.4 Pointers (‘pointer.h’) ----------------------------- Pointers play an important role in the C programming language. As the name suggests, they _point_ to a byte in memory (like an address in a city). The C programming language gives you complete freedom in how to use the byte (and the bytes that follow it). Pointers are thus a very powerful feature of C. However, as the saying goes: "With great power comes great responsibility", so they must be approached with care. The functions in this header are not very complex, they are just wrappers over some basic pointer functionality regarding pointer arithmetic and allocation (in memory or HDD/SSD). -- Function: void * gal_pointer_increment (void *pointer, size_t increment, uint8_t type) Return a pointer to an element that is ‘increment’ elements ahead of ‘pointer’, assuming each element has type of ‘type’. For the type codes, see *note Library data types::. When working with the ‘array’ elements of ‘gal_data_t’, we are actually dealing with ‘void *’ pointers. However, pointer arithmetic does not apply to ‘void *’, because the system does not know how many bytes there are in each element to increment the pointer respectively. This function will use the given ‘type’ to calculate where the incremented element is located in memory. -- Function: size_t gal_pointer_num_between (void *earlier, void *later, uint8_t type) Return the number of elements (in the given ‘type’) between ‘earlier’ and ‘later’. For the type codes, see *note Library data types::). -- Function: void * gal_pointer_allocate (uint8_t type, size_t size, int clear, const char *funcname, const char *varname) Allocate an array of type ‘type’ with ‘size’ elements in RAM (for the type codes, see *note Library data types::). If ‘clear!=0’, then the allocated space is set to zero (cleared). This is effectively just a wrapper around C's ‘malloc’ or ‘calloc’ functions but takes Gnuastro's integer type codes and will also abort with a clear error if there the allocation was not successful. The number of allocated bytes is the value given to ‘size’ that is multiplied by the returned value of ‘gal_type_sizeof’ for the given type. So if you want to allocate space for an array of strings you should pass the type ‘GAL_TYPE_STRING’. Otherwise, if you just want space for one string (for example, 6 bytes for ‘hello’, including the string-termination character), you should set the type ‘GAL_TYPE_UINT8’. When space cannot be allocated, this function will abort the program with a message containing the reason for the failure. ‘funcname’ (name of the function calling this function) and ‘varname’ (name of variable that needs this space) will be used in this error message if they are not ‘NULL’. In most modern compilers, you can use the generic ‘__func__’ variable for ‘funcname’. In this way, you do not have to manually copy and paste the function name or worry about it changing later (‘__func__’ was standardized in C99). To use this function effectively and avoid memory leaks, make sure to free the allocated array after you are done with it. Also, be mindful of any functions that make use of this function as they should also free any allocated arrays to maintain memory management and prevent issues with the system. -- Function: void * gal_pointer_allocate_ram_or_mmap (uint8_t type, size_t size, int clear, size_t minmapsize, char **mmapname, int quietmmap, const char *funcname, const char *varname) Allocate the given space either in RAM or in a memory-mapped file. This function is just a high-level wrapper to ‘gal_pointer_allocate’ (to allocate in RAM) or ‘gal_pointer_mmap_allocate’ (to use a memory-mapped file). For more on memory management in Gnuastro, please see *note Memory management::. The various arguments are more fully explained in the two functions above. -- Function: void * gal_pointer_mmap_allocate (size_t size, uint8_t type, int clear, char **mmapname) Allocate the necessary space to keep ‘size’ elements of type ‘type’ in HDD/SSD (a file, not in RAM). For the type codes, see *note Library data types::. If ‘clear!=0’, then the allocated space will also be cleared. The allocation is done using C's ‘mmap’ function. The name of the file containing the allocated space is an allocated string that will be put in ‘*mmapname’. Note that the kernel does not allow an infinite number of memory mappings to files. So it is not recommended to use this function with every allocation. The best-case scenario to use this function is for arrays that are very large and can fill up the RAM. Keep the smaller arrays in RAM, which is faster and can have a (theoretically) unlimited number of allocations. When you are done with the dataset and do not need it anymore, do not use ‘free’ (the dataset is not in RAM). Just delete the file (and the allocated space for the filename) with the commands below, or simply use ‘gal_pointer_mmap_free’. remove(mmapname); free(mmapname); -- Function: void gal_pointer_mmap_free (char **mmapname, int quietmmap) "Free" (actually delete) the memory-mapped file that is named ‘*mmapname’, then free the string. If ‘quietmmap’ is non-zero, then a warning will be printed for the user to know that the given file has been deleted.  File: gnuastro.info, Node: Library blank values, Next: Library data container, Prev: Pointers, Up: Gnuastro library 12.3.5 Library blank values (‘blank.h’) --------------------------------------- When the position of an element in a dataset is important (for example, a pixel in an image), a place-holder is necessary for the element if we do not have a value to fill it with (for example, the CCD cannot read those pixels). We cannot simply shift all the other pixels to fill in the one we have no value for. In other cases, it often occurs that the field of sky that you are studying is not a clean rectangle to nicely fit into the boundaries of an image. You need a way to separate the pixels outside your scientific field from those inside it. Blank values act as these place holders in a dataset. They have no usable value but they have a position. Every type needs a corresponding blank value (see *note Numeric data types:: and *note Library data types::). Floating point types have a unique value identified by IEEE known as Not-a-Number (or NaN) which is a unique value that is recognized by the compiler. However, integer and string types do not have any standard value. For integers, in Gnuastro we take an extremum of the given type: for signed types (that allow negatives), the minimum possible value is used as blank and for unsigned types (that only accept positives), the maximum possible value is used. To be generic and easy to read/write we define a macro for these blank values and strongly encourage you only use these, and never make any assumption on the value of a type's blank value. The IEEE NaN blank value type is defined to fail on any comparison, so if you are dealing with floating point types, you cannot use equality (a NaN will _not_ be equal to a NaN). If you know your dataset is floating point, you can use the ‘isnan’ function in C's ‘math.h’ header. For a description of numeric data types see *note Numeric data types::. For the constants identifying integers, please see *note Library data types::. -- Global integer: GAL_BLANK_UINT8 Blank value for an unsigned, 8-bit integer. -- Global integer: GAL_BLANK_INT8 Blank value for a signed, 8-bit integer. -- Global integer: GAL_BLANK_UINT16 Blank value for an unsigned, 16-bit integer. -- Global integer: GAL_BLANK_INT16 Blank value for a signed, 16-bit integer. -- Global integer: GAL_BLANK_UINT32 Blank value for an unsigned, 32-bit integer. -- Global integer: GAL_BLANK_INT32 Blank value for a signed, 32-bit integer. -- Global integer: GAL_BLANK_UINT64 Blank value for an unsigned, 64-bit integer. -- Global integer: GAL_BLANK_INT64 Blank value for a signed, 64-bit integer. -- Global integer: GAL_BLANK_INT Blank value for ‘int’ type (‘int16_t’ or ‘int32_t’ depending on the system. -- Global integer: GAL_BLANK_UINT Blank value for ‘int’ type (‘int16_t’ or ‘int32_t’ depending on the system. -- Global integer: GAL_BLANK_LONG Blank value for ‘long’ type (‘int32_t’ or ‘int64_t’ in 32-bit or 64-bit systems). -- Global integer: GAL_BLANK_ULONG Blank value for ‘unsigned long’ type (‘uint32_t’ or ‘uint64_t’ in 32-bit or 64-bit systems). -- Global integer: GAL_BLANK_SIZE_T Blank value for ‘size_t’ type (‘uint32_t’ or ‘uint64_t’ in 32-bit or 64-bit systems). -- Global integer: GAL_BLANK_FLOAT32 Blank value for a single precision, 32-bit floating point type (IEEE NaN value). -- Global integer: GAL_BLANK_FLOAT64 Blank value for a double precision, 64-bit floating point type (IEEE NaN value). -- Global integer: GAL_BLANK_STRING Blank value for string types (this is itself a string, it is not the ‘NULL’ pointer). The functions below can be used to work with blank pixels. -- Function: void gal_blank_write (void *pointer, uint8_t type) Write the blank value for the given ‘type’ into the space that ‘pointer’ points to. This can be used when the space is already allocated (for example, one element in an array or a statically allocated variable). -- Function: void * gal_blank_alloc_write (uint8_t type) Allocate the space required to keep the blank for the given data type ‘type’, write the blank value into it and return the pointer to it. -- Function: void gal_blank_initialize (gal_data_t *input) Initialize all the elements in the ‘input’ dataset to the blank value that corresponds to its type. If ‘input’ is not a string, and is a tile over a larger dataset, only the region that the tile covers will be set to blank. For strings, the full dataset will be initialized. -- Function: void gal_blank_initialize_array (void *array, size_t size, uint8_t type) Initialize all the elements in the ‘array’ to the blank value that corresponds to its type (identified with ‘type’), assuming the array has ‘size’ elements. -- Function: char * gal_blank_as_string (uint8_t type, int width) Write the blank value for the given data type ‘type’ into a string and return it. The space for the string is dynamically allocated so it must be freed after you are done with it. If ‘width!=0’, then the final string will be padded with white space characters to have the requested width if it is smaller. -- Function: int gal_blank_is (void *pointer, uint8_t type) Return 1 if the contents of ‘pointer’ (assuming a type of ‘type’) is blank. Otherwise, return 0. Note that this function only works on one element of the given type. So if ‘pointer’ is an array, only its first element will be checked. Therefore for strings, the type of ‘pointer’ is assumed to be ‘char *’. To check if an array/dataset has blank elements or to find which elements in an array are blank, you can use ‘gal_blank_present’ or ‘gal_blank_flag’ respectively (described below). -- Function: int gal_blank_present (gal_data_t *input, int updateflag) Return 1 if the dataset has a blank value and zero if it does not. Before checking the dataset, this function will look at ‘input’'s flags. If the ‘GAL_DATA_FLAG_BLANK_CH’ bit of ‘input->flag’ is on, this function will not do any check and will just use the information in the flags. This can greatly speed up processing when a dataset needs to be checked multiple times. When the dataset's flags were not used and ‘updateflags’ is non-zero, this function will set the flags appropriately to avoid having to re-check the dataset in future calls. When ‘updateflags==0’, this function has no side-effects on the dataset: it will not toggle the flags. If you want to re-check a dataset with the blank-value-check flag already set (for example, if you have made changes to it), then explicitly set the ‘GAL_DATA_FLAG_BLANK_CH’ bit to zero before calling this function. When there are no other flags, you can just set the flags to zero (‘input->flag=0’), otherwise you can use this expression: input->flag &= ~GAL_DATA_FLAG_BLANK_CH; -- Function: size_t gal_blank_number (gal_data_t *input, int updateflag) Return the number of blank elements in ‘input’. If ‘updateflag!=0’, then the dataset blank keyword flags will be updated. See the description of ‘gal_blank_present’ (above) for more on these flags. If ‘input==NULL’, then this function will return ‘GAL_BLANK_SIZE_T’. -- Function: gal_data_t * gal_blank_flag (gal_data_t *input) Return a "flag" dataset with the same size as the input, but with an ‘uint8_t’ type that has a value of 1 for data elements that are blank and 0 for those that are not. -- Function: gal_data_t * gal_blank_flag_not (gal_data_t *input) Return a "flag" dataset with the same size as the input, but with an ‘uint8_t’ type that has a value of 1 for data elements that are _not_ blank and 0 for those that are blank. -- Function: size_t * gal_blank_not_minmax_coords (gal_data_t *input) Find the minimum and maximum coordinates of the non-blank regions within the input dataset. The coordinates are in C order: starting from 0, and with the slowest dimension being first. The output is an allocated array (that should be freed later) with $2\times N$ elements; where $N$ is the number of dimensions. The first two elements contain the minimum and maximum of regions containing non-blank elements along the 0-th dimension (the slowest), the second two elements contain the next dimension's extrema; and so on. -- Function: gal_data_t * gal_blank_trim (gal_data_t *input, int inplace) Trim all the outer layers of blank values from the input dataset. For example in the 2D image, "layers" would correspond to columns or rows that are fully blank and touching the edge of the image. For a more complete description, see the description of the ‘trim’ operator in *note Dimensionality changing operators::. -- Function: void gal_blank_flag_apply (gal_data_t *input, gal_data_t *flag) Set all non-zero and non-blank elements of ‘flag’ to blank in ‘input’. ‘flag’ has to have an unsigned 8-bit type and be the same size as ‘input’. -- Function: void gal_blank_flag_remove (gal_data_t *input, gal_data_t *flag) Remove all elements within ‘input’ that are flagged, convert it to a 1D dataset and adjust the size properly (the number of non-flagged elements). In practice this function does not‘realloc’ the input array (see ‘gal_blank_remove_realloc’ for shrinking/re-allocating also), it just shifts the blank elements to the end and adjusts the size elements of the ‘gal_data_t’, see *note Generic data container::. Note that elements that are blank, but not flagged will not be removed. This function will only remove flagged elements. If all the elements were flagged, then ‘input->size’ will be zero. This is thus a good parameter to check after calling this function to see if there actually were any non-flagged elements in the input or not and take the appropriate measure. This check is highly recommended because it will avoid strange bugs in later steps. -- Function: void gal_blank_remove (gal_data_t *input) Remove blank elements from a dataset, convert it to a 1D dataset, adjust the size properly (the number of non-blank elements), and toggle the blank-value-related bit-flags. In practice this function does not‘realloc’ the input array (see ‘gal_blank_remove_realloc’ for shrinking/re-allocating also), it just shifts the blank elements to the end and adjusts the size elements of the ‘gal_data_t’, see *note Generic data container::. If all the elements were blank, then ‘input->size’ will be zero. This is thus a good parameter to check after calling this function to see if there actually were any non-blank elements in the input or not and take the appropriate measure. This check is highly recommended because it will avoid strange bugs in later steps. -- Function: void gal_blank_remove_realloc (gal_data_t *input) Similar to ‘gal_blank_remove’, but also shrinks/re-allocates the dataset's allocated memory. -- Function: gal_data_t * gal_blank_remove_rows (gal_data_t *columns, gal_list_sizet_t *column_indexs, int onlydim0) Remove (in place) any row that has at least one blank value in any of the input columns and return a "flag" dataset (that should be freed later). The input ‘columns’ is a list of ‘gal_data_t’s (see *note List of gal_data_t::). When ‘onlydim0!=0’ the vector columns (with 2 dimensions) will not be checked for the presence of blank values. After this function, all the elements in ‘columns’ will still have the same size as each other, but if any of the searched columns has blank elements, all their sizes will decrease together. The returned flag dataset has the same size as the original input dataset, with a type of ‘uint8_t’. Every row that has been removed from the original dataset has a value of 1, and the rest have a value of 0. When ‘column_indexs!=NULL’, only the columns whose index (counting from zero) is in ‘column_indexs’ will be used to check for blank values (see *note List of size_t::. Therefore, if you want to check all columns, just set this to ‘NULL’. In any case (no matter which columns are checked for blanks), the selected rows from all columns will be removed. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro.info-9�������������������������������������������������������������������0000644�0001750�0001750�00001115007�14557514040�012424� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is gnuastro.info, produced by makeinfo version 7.1 from gnuastro.texi. This book documents version 0.22 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * Match: (gnuastro)Match. Match two separate catalogs. * astmatch: (gnuastro)Invoking astmatch. Options to Match. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Segment: (gnuastro)Segment. Segment detections based on signal structure. * astsegment: (gnuastro)Invoking astsegment. Options to Segment. * Query: (gnuastro)Query. Access remote databases for downloading data. * astquery: (gnuastro)Invoking astquery. Options to Query. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. * astscript: (gnuastro)Installed scripts. Gnuastro's installed scripts. * astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script * astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script * astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script * astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script * astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script * astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script * astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script * astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script * astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script * astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script * astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script END-INFO-DIR-ENTRY  File: gnuastro.info, Node: Library data container, Next: Dimensions, Prev: Library blank values, Up: Gnuastro library 12.3.6 Data container (‘data.h’) -------------------------------- Astronomical datasets have various dimensions, for example, 1D spectra or table columns, 2D images, or 3D Integral field data cubes. Datasets can also have various numeric data types, depending on the operation/purpose, for example, processed images are commonly stored in floating point format, but their mask images are integers (allowing bit-wise flags to identify certain classes of pixels to keep or mask, see *note Numeric data types::). Certain other information about a dataset are also commonly necessary, for example, the units of the dataset, the name of the dataset and some comments. To deal with any generic dataset, Gnuastro defines the ‘gal_data_t’ as input or output. * Menu: * Generic data container:: Definition of Gnuastro's generic container. * Dataset allocation:: Allocate, initialize and free a dataset. * Arrays of datasets:: Functions to help with array of datasets. * Copying datasets:: Functions to copy a dataset to a new one.  File: gnuastro.info, Node: Generic data container, Next: Dataset allocation, Prev: Library data container, Up: Library data container 12.3.6.1 Generic data container (‘gal_data_t’) .............................................. To be able to deal with any dataset (various dimensions, numeric data types, units and higher-level structures), Gnuastro defines the ‘gal_data_t’ type which is the input/output container of choice for many of Gnuastro library's functions. It is defined in ‘gnuastro/data.h’. If you will be using ('‘# include’'ing) those libraries, you do not need to include this header explicitly, it is already included by any library header that uses ‘gal_data_t’. -- Type (C struct): gal_data_t The main container for datasets in Gnuastro. It can host data of any dimensions, with any numeric data type. It is actually a structure, but ‘typedef’'d as a new type to avoid having to write the ‘struct’ before any declaration. The actual structure is shown below which is followed by a description of each element. typedef struct gal_data_t { void *restrict array; /* Basic array information. */ uint8_t type; size_t ndim; size_t *dsize; size_t size; int quietmmap; char *mmapname; size_t minmapsize; int nwcs; /* WCS information. */ struct wcsprm *wcs; uint8_t flag; /* Content description. */ int status; char *name; char *unit; char *comment; int disp_fmt; /* For text printing. */ int disp_width; int disp_precision; struct gal_data_t *next; /* For higher-level datasets. */ struct gal_data_t *block; } gal_data_t; The list below contains a description for each ‘gal_data_t’ element. ‘void *restrict array’ This is the pointer to the main array of the dataset containing the raw data (values). All the other elements in this data-structure are actually meta-data enabling us to use/understand the series of values in this array. It must allow data of any type (see *note Numeric data types::), so it is defined as a ‘void *’ pointer. A ‘void *’ array is not directly usable in C, so you have to cast it to proper type before using it, please see *note Library demo - reading a image:: for a demonstration. The ‘restrict’ keyword was formally introduced in C99 and is used to tell the compiler that at any moment only this pointer will modify what it points to (a pixel in an image for example)(1). This extra piece of information can greatly help in compiler optimizations and thus the running time of the program. But older compilers might not have this capability, so at ‘./configure’ time, Gnuastro checks this feature and if the user's compiler does not support ‘restrict’, it will be removed from this definition. ‘uint8_t type’ A fixed code (integer) used to identify the type of data in ‘array’ (see *note Numeric data types::). For the list of acceptable values to this variable, please see *note Library data types::. ‘size_t ndim’ The dataset's number of dimensions. ‘size_t *dsize’ The size of the dataset along each dimension. This is an array (with ‘ndim’ elements), of positive integers in row-major order(2) (based on C). When a data file is read into memory with Gnuastro's libraries, this array is dynamically allocated based on the number of dimensions that the dataset has. It is important to remember that C's row-major ordering is the opposite of the FITS standard which is in column-major order: in the FITS standard the fastest dimension's size is specified by ‘NAXIS1’, and slower dimensions follow. The FITS standard was defined mainly based on the FORTRAN language which is the opposite of C's approach to multi-dimensional arrays (and also starts counting from 1 not 0). Hence if a FITS image has ‘NAXIS1==20’ and ‘NAXIS2==50’, the ‘dsize’ array must be filled with ‘dsize[0]==50’ and ‘dsize[1]==20’. The fastest dimension is the one that is contiguous in memory: to increment by one along that dimension, just go to the next element in the array. As we go to slower dimensions, the number of memory cells we have to skip for an increment along that dimension becomes larger. ‘size_t size’ The total number of elements in the dataset. This is actually a multiplication of all the values in the ‘dsize’ array, so it is not an independent parameter. However, low-level operations with the dataset (irrespective of its dimensions) commonly need this number, so this element is designed to avoid calculating it every time. ‘int quietmmap’ When this value is zero, and the dataset must not be allocated in RAM (see ‘mmapname’ and ‘minmapsize’ below), a warning will be printed to inform the user when the file is created and when it is deleted. The warning includes the filename, the size in bytes, and the fact that they can toggle this behavior through ‘--minmapsize’ option in Gnuastro's programs. ‘char *mmapname’ Name of file hosting the ‘mmap’'d contents of ‘array’. If the value of this variable is ‘NULL’, then the contents of ‘array’ are actually stored in RAM, not in a file on the HDD/SSD. See the description of ‘minmapsize’ below for more. If a file is used, it will be kept in the ‘gnuastro_mmap’ directory of the running directory. Its name is randomly selected to allow multiple arrays at the same time, see description of ‘--minmapsize’ in *note Processing options::. When ‘gal_data_free’ is called the randomly named file will be deleted. ‘size_t minmapsize’ The minimum size of an array (in bytes) to store the contents of ‘array’ as a file (on the non-volatile HDD/SSD), not in RAM. This can be very useful for large datasets which can be very memory intensive and the user's RAM might not be sufficient to keep/process it. A random filename is assigned to the array which is available in the ‘mmapname’ element of ‘gal_data_t’ (above), see there for more. ‘minmapsize’ is stored in each ‘gal_data_t’, so it can be passed on to subsequent/derived datasets. See the description of the ‘--minmapsize’ option in *note Processing options:: for more on using this value. ‘nwcs’ The number of WCS coordinate representations (for WCSLIB). ‘struct wcsprm *wcs’ The main WCSLIB structure keeping all the relevant information necessary for WCSLIB to do its processing and convert data-set positions into real-world positions. When it is given a ‘NULL’ value, all possible WCS calculations/measurements will be ignored. ‘uint8_t flag’ Bit-wise flags to describe general properties of the dataset. The number of bytes available in this flag is stored in the ‘GAL_DATA_FLAG_SIZE’ macro. Note that you should use bit-wise operators(3) to check these flags. The currently recognized bits are stored in these macros: ‘GAL_DATA_FLAG_BLANK_CH’ Marking that the dataset has been checked for blank values or not. When a dataset does not have any blank values, the ‘GAL_DATA_FLAG_HASBLANK’ bit will be zero. But upon initialization, all bits also get a value of zero. Therefore, a checker needs this flag to see if the value in ‘GAL_DATA_FLAG_HASBLANK’ is reliable (dataset has actually been parsed for a blank value) or not. Also, if it is necessary to re-check the presence of flags, you just have to set this flag to zero and call ‘gal_blank_present’ for example, to parse the dataset and check for blank values. Note that for improved efficiency, when this flag is set, ‘gal_blank_present’ will not actually parse the dataset, it will just use ‘GAL_DATA_FLAG_HASBLANK’. ‘GAL_DATA_FLAG_HASBLANK’ This bit has a value of ‘1’ when the given dataset has blank values. If this bit is ‘0’ and ‘GAL_DATA_FLAG_BLANK_CH’ is ‘1’, then the dataset has been checked and it did not have any blank values, so there is no more need for further checks. ‘GAL_DATA_FLAG_SORT_CH’ Marking that the dataset is already checked for being sorted or not and thus that the possible ‘0’ values in ‘GAL_DATA_FLAG_SORTED_I’ and ‘GAL_DATA_FLAG_SORTED_D’ are meaningful. The logic behind this is similar to that in ‘GAL_DATA_FLAG_BLANK_CH’. ‘GAL_DATA_FLAG_SORTED_I’ This bit has a value of ‘1’ when the given dataset is sorted in an increasing manner. If this bit is ‘0’ and ‘GAL_DATA_FLAG_SORT_CH’ is ‘1’, then the dataset has been checked and was not sorted (increasing), so there is no more need for further checks. ‘GAL_DATA_FLAG_SORTED_D’ This bit has a value of ‘1’ when the given dataset is sorted in a decreasing manner. If this bit is ‘0’ and ‘GAL_DATA_FLAG_SORT_CH’ is ‘1’, then the dataset has been checked and was not sorted (decreasing), so there is no more need for further checks. The macro ‘GAL_DATA_FLAG_MAXFLAG’ contains the largest internally used bit-position. Higher-level flags can be defined with the bit-wise shift operators using this macro to define internal flags for libraries/programs that depend on Gnuastro without causing any possible conflict with the internal flags discussed above or having to check the values manually on every release. ‘int status’ A context-specific status values for this data-structure. This integer will not be set by Gnuastro's libraries. You can use it keep some additional information about the dataset (with integer constants) depending on your applications. ‘char *name’ The name of the dataset. If the dataset is a multi-dimensional array and read/written as a FITS image, this will be the value in the ‘EXTNAME’ FITS keyword. If the dataset is a one-dimensional table column, this will be the column name. If it is set to ‘NULL’ (by default), it will be ignored. ‘char *unit’ The units of the dataset (for example, ‘BUNIT’ in the standard FITS keywords) that will be read from or written to files/tables along with the dataset. If it is set to ‘NULL’ (by default), it will be ignored. ‘char *comment’ Any further explanation about the dataset which will be written to any output file if present. ‘disp_fmt’ Format to use for printing each element of the dataset to a plain text file, the acceptable values to this element are defined in *note Table input output::. Based on C's ‘printf’ standards. ‘disp_width’ Width of printing each element of the dataset to a plain text file, the acceptable values to this element are defined in *note Table input output::. Based on C's ‘printf’ standards. ‘disp_precision’ Precision of printing each element of the dataset to a plain text file, the acceptable values to this element are defined in *note Table input output::. Based on C's ‘printf’ standards. ‘gal_data_t *next’ Through this pointer, you can link a ‘gal_data_t’ with other datasets related datasets, for example, the different columns in a dataset each have one ‘gal_data_t’ associate with them and they are linked to each other using this element. There are several functions described below to facilitate using ‘gal_data_t’ as a linked list. See *note Linked lists:: for more on these wonderful high-level constructs. ‘gal_data_t *block’ Pointer to the start of the complete allocated block of memory. When this pointer is not ‘NULL’, the dataset is not treated as a contiguous patch of memory. Rather, it is seen as covering only a portion of the larger patch of memory that ‘block’ points to. See *note Tessellation library:: for a more thorough explanation and functions to help work with tiles that are created from this pointer. ---------- Footnotes ---------- (1) Also see <https://en.wikipedia.org/wiki/Restrict>. (2) Also see <https://en.wikipedia.org/wiki/Row-_and_column-major_order>. (3) See <https://en.wikipedia.org/wiki/Bitwise_operations_in_C>.  File: gnuastro.info, Node: Dataset allocation, Next: Arrays of datasets, Prev: Generic data container, Up: Library data container 12.3.6.2 Dataset allocation ........................... Gnuastro's main data container was defined in *note Generic data container::. The functions listed in this section describe the most basic operations on ‘gal_data_t’: those related to allocation and freeing. These functions are declared in ‘gnuastro/data.h’ which is also visible from the function names (see *note Gnuastro library::). -- Function: gal_data_t * gal_data_alloc (void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, int quietmmap, char *name, char *unit, char *comment) Dynamically allocate a ‘gal_data_t’ and initialize it will all the given values. See the description of ‘gal_data_initialize’ and *note Generic data container:: for more information. This function will often be the most frequently used because it allocates the ‘gal_data_t’ hosting all the values _and_ initializes it. Once you are done with the dataset, be sure to clean up all the allocated spaces with ‘gal_data_free’. -- Function: void gal_data_initialize (gal_data_t *data, void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, int quietmmap, char *name, char *unit, char *comment) Initialize the given data structure (‘data’) with all the given values. Note that the raw input ‘gal_data_t’ must already have been allocated before calling this function. For a description of each variable see *note Generic data container::. It will set the values and do the necessary allocations. If they are not ‘NULL’, all input arrays (‘dsize’, ‘wcs’, ‘name’, ‘unit’, ‘comment’) are separately copied (allocated) by this function for usage in ‘data’, so you can safely use one value to initialize many datasets or use statically allocated variables in this function call. Once you are done with the dataset, you can free all the allocated spaces with ‘gal_data_free_contents’. If ‘array’ is not ‘NULL’, it will be directly copied into ‘data->array’ (based on the total number of elements calculated from ‘dsize’) and no new space will be allocated for the array of this dataset, this has many low-level advantages and can be used to work on regions of a dataset instead of the whole allocated array (see the description under ‘block’ in *note Generic data container:: for one example). If the given pointer is not the start of an allocated block of memory or it is used in multiple datasets, be sure to set it to ‘NULL’ (with ‘data->array=NULL’) before cleaning up with ‘gal_data_free_contents’. ‘ndim’ may be zero. In this case no allocation will occur, ‘data->array’ and ‘data->dsize’ will be set to ‘NULL’ and ‘data->size’ will be zero. However (when necessary) ‘dsize’ must not have any zero values (a dimension of length zero is not defined). -- Function: gal_data_t * gal_data_alloc_empty (size_t ndim, size_t minmapsize, int quietmmap) Allocate an empty dataset with a certain number of dimensions, but no 'array' component. The ‘size’ element will be set to zero and the ‘dsize’ array will be properly allocated (based on the number of dimensions), but all elements will be zero. This is useful in scenarios where you just need a ‘gal_data_t’ for metadata. -- Function: void gal_data_free_contents (gal_data_t *data) Free all the non-‘NULL’ pointers in ‘gal_data_t’ except for ‘next’ and ‘block’. All freed arrays are set to ‘NULL’. If ‘data’ is actually a tile (‘data->block!=NULL’, see *note Tessellation library::), then ‘data->array’ is not freed. For a complete description of ‘gal_data_t’ and its contents, see *note Generic data container::. -- Function: void gal_data_free (gal_data_t *data) Free all the non-‘NULL’ pointers in ‘gal_data_t’, then free the actual data structure.  File: gnuastro.info, Node: Arrays of datasets, Next: Copying datasets, Prev: Dataset allocation, Up: Library data container 12.3.6.3 Arrays of datasets ........................... Gnuastro's generic data container (‘gal_data_t’) is a very versatile structure that can be used in many higher-level contexts. One such higher-level construct is an array of ‘gal_data_t’ structures to simplify the allocation (and later cleaning) of several ‘gal_data_t’s that are related. For example, each column in a table is usually represented by one ‘gal_data_t’ (so it has its own name, data type, units, etc.). A table (with many columns) can be seen as an array of ‘gal_data_t’s (when the number of columns is known a-priori). The functions below are defined to create a cleared array of data structures and to free them when none are necessary any more. These functions are declared in ‘gnuastro/data.h’ which is also visible from the function names (see *note Gnuastro library::). -- Function: gal_data_t * gal_data_array_calloc (size_t size) Allocate an array of ‘gal_data_t’ with ‘size’ elements. This function will also initialize all the values (‘NULL’ for pointers and 0 for other types). You can use ‘gal_data_initialize’ to fill each element of the array afterwards. The following code snippet is one example of doing this. size_t i; gal_data_t *dataarr; dataarr=gal_data_array_calloc(10); for(i=0;i<10;++i) gal_data_initialize(&dataarr[i], ...); ... gal_data_array_free(dataarr, 10, 1); -- Function: void gal_data_array_free (gal_data_t *dataarr, size_t num, int free_array) Free all the ‘num’ elements within ‘dataarr’ and the actual allocated array. If ‘free_array’ is not zero, then the ‘array’ element of all the datasets will also be freed, see *note Generic data container::. -- Function: gal_data_t ** gal_data_array_ptr_calloc (size_t size) Allocate an array of pointers to Gnuastro's generic data structure and initialize all pointers to ‘NULL’. This is useful when you want to allocate individual datasets later (for example, with ‘gal_data_alloc’). -- Function: void gal_data_array_ptr_free (gal_data_t **dataptr, size_t size, int free_array); Free all the individual datasets within the elements of ‘dataptr’, then free ‘dataptr’ itself (the array of pointers that was probably allocated with ‘gal_data_array_ptr_calloc’.  File: gnuastro.info, Node: Copying datasets, Prev: Arrays of datasets, Up: Library data container 12.3.6.4 Copying datasets ......................... The functions in this section describes Gnuastro's facilities to copy a given dataset into another. The new dataset can have a different type (including a string), it can be already allocated (in which case only the values will be written into it). In all these cases, if the input dataset is a tile or a list, only the data within the given tile, or the given node in a list, are copied. If the input is a list, the ‘next’ pointer will also be copied to the output, see *note List of gal_data_t::. In many of the functions here, it is possible to copy the dataset to a new numeric data type (see *note Numeric data types::. In such cases, Gnuastro's library is going to use the native conversion by C. So if you are converting to a smaller type, it is up to you to make sure that the values fit into the output type. -- Function: gal_data_t * gal_data_copy (gal_data_t *in) Return a new dataset that is a copy of ‘in’, all of ‘in’'s meta-data will also copied into the output, except for ‘block’. If the dataset is a tile/list, only the given tile/node will be copied, the ‘next’ pointer will also be copied however. -- Function: gal_data_t * gal_data_copy_to_new_type (gal_data_t *in, uint8_t newtype) Return a copy of the dataset ‘in’, converted to ‘newtype’, see *note Library data types:: for Gnuastro library's type identifiers. The returned dataset will have all meta-data except their type and ‘block’ equal to the input's metadata. If the dataset is a tile/list, only the given tile/node will be copied, the ‘next’ pointer will also be copied however. -- Function: gal_data_t * gal_data_copy_to_new_type_free (gal_data_t *in, uint8_t newtype) Return a copy of the dataset ‘in’ that is converted to ‘newtype’ and free the input dataset. See *note Library data types:: for Gnuastro library's type identifiers. The returned dataset will have all meta-data, except their type, equal to the input's metadata (including ‘next’). Note that if the input is a tile within a larger block, it will not be freed. This function is similar to ‘gal_data_copy_to_new_type’, except that it will free the input dataset. -- Function: void gal_data_copy_to_allocated (gal_data_t *in, gal_data_t *out) Copy the contents of the array in ‘in’ into the already allocated array in ‘out’. The types of the input and output may be different, type conversion will be done internally. When ‘in->size != out->size’ this function will behave as follows: ‘out->size < in->size’ This function will not re-allocate the necessary space, it will abort with an error, so please check before calling this function. ‘out->size > in->size’ This function will write the values in ‘out->size’ and ‘out->dsize’ from the same values of ‘in’. So if you want to use a pre-allocated space/dataset multiple times with varying input sizes, be sure to reset ‘out->size’ before every call to this function. -- Function: gal_data_t * gal_data_copy_string_to_number (char *string) Read ‘string’ into the smallest type that can store the value (see *note Numeric data types::). This function is just a wrapper for the ‘gal_type_string_to_number’, but will put the value into a single-element dataset.  File: gnuastro.info, Node: Dimensions, Next: Linked lists, Prev: Library data container, Up: Gnuastro library 12.3.7 Dimensions (‘dimension.h’) --------------------------------- An array is a contiguous region of memory. Hence, at the lowest level, every element of an array just has one single-valued position: the number of elements that lie between it and the first element in the array. This is also known as the _index_ of the element within the array. A dataset's number of dimensions is high-level abstraction (meta-data) that we project onto that contiguous patch of memory. When the array is interpreted as a one-dimensional dataset, this index is also the _coordinate_ of the element. But once we associate the patch of memory with a higher dimension, there must also be one coordinate for each dimension. The functions and macros in this section provide you with the tools to convert an index into a coordinate and vice-versa along with several other issues for example, issues with the neighbors of an element in a multi-dimensional context. -- Function: size_t gal_dimension_total_size (size_t ndim, size_t *dsize) Return the total number of elements for a dataset with ‘ndim’ dimensions that has ‘dsize’ elements along each dimension. -- Function: int gal_dimension_is_different (gal_data_t *first, gal_data_t *second) Return ‘1’ (one) if the two datasets do not have the same size along all dimensions. This function will also return ‘1’ when the number of dimensions of the two datasets are different. -- Function: size_t * gal_dimension_increment (size_t ndim, size_t *dsize) Return an allocated array that has the number of elements necessary to increment an index along every dimension. For example, along the fastest dimension (last element in the ‘dsize’ and returned arrays), the value is ‘1’ (one). -- Function: size_t gal_dimension_num_neighbors (size_t ndim) The maximum number of neighbors (any connectivity) that a data element can have in ‘ndim’ dimensions. Effectively, this function just returns $3^n-1$ (where $n$ is the number of dimensions). -- Function-like macro: GAL_DIMENSION_FLT_TO_INT (FLT) Calculate the integer pixel position that the floating point ‘FLT’ number belongs to. In the FITS format (and thus in Gnuastro), the center of each pixel is allocated on an integer (not it edge), so the pixel which hosts a floating point number cannot simply be found with internal type conversion. -- Function: void gal_dimension_add_coords (size_t *c1, size_t *c2, size_t *out, size_t ndim) For every dimension, add the coordinates in ‘c1’ with ‘c2’ and put the result into ‘out’. In other words, for dimension ‘i’ run ‘out[i]=c1[i]+c2[i];’. Hence ‘out’ may be equal to any one of ‘c1’ or ‘c2’. -- Function: size_t gal_dimension_coord_to_index (size_t ndim, size_t *dsize, size_t *coord) Return the index (counting from zero) from the coordinates in ‘coord’ (counting from zero) assuming the dataset has ‘ndim’ elements and the size of the dataset along each dimension is in the ‘dsize’ array. -- Function: void gal_dimension_index_to_coord (size_t index, size_t ndim, size_t *dsize, size_t *coord) Fill in the ‘coord’ array with the coordinates that correspond to ‘index’ assuming the dataset has ‘ndim’ elements and the size of the dataset along each dimension is in the ‘dsize’ array. Note that both ‘index’ and each value in ‘coord’ are assumed to start from ‘0’ (zero). Also that the space which ‘coord’ points to must already be allocated before calling this function. -- Function: size_t gal_dimension_dist_manhattan (size_t *a, size_t *b, size_t ndim) Return the manhattan distance (see Wikipedia (https://en.wikipedia.org/wiki/Taxicab_geometry)) between the two coordinates ‘a’ and ‘b’ (each an array of ‘ndim’ elements). -- Function: float gal_dimension_dist_radial (size_t *a, size_t *b, size_t ndim) Return the radial distance between the two coordinates ‘a’ and ‘b’ (each an array of ‘ndim’ elements). -- Function: float gal_dimension_dist_elliptical (double *center, double *pa_deg, double *q, size_t ndim, double *point) Return the elliptical/ellipsoidal distance of the single point ‘point’ (containing ‘ndim’ values: coordinates of the point in each dimension) from an ellipse that is defined by ‘center’, ‘pa_deg’ and ‘q’. ‘center’ is the coordinates of the ellipse center (also with ‘ndim’ elements). ‘pa’ is the position-angle in degrees (the angle of the semi-major axis from the first dimension in a 2D ellipse) and ‘q’ is the axis ratio. In a 2D ellipse, ‘pa’ and ‘q’ are a single-element array. However, in a 3D ellipsoid, ‘pa’ must have three elements, and ‘q’ must have 2 elements. For more see *note Defining an ellipse and ellipsoid::. -- Function: gal_data_t * gal_dimension_collapse_sum (gal_data_t *in, size_t c_dim, gal_data_t *weight) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by summing all elements in that direction. If ‘weight!=NULL’, it must be a single-dimensional array, with the same size as the dimension to be collapsed. The respective weight will be multiplied to each element during the collapse. For generality, the returned dataset will have a ‘GAL_TYPE_FLOAT64’ type. See *note Copying datasets:: for converting the returned dataset to a desired type. Also, for more on the application of this function, see the Arithmetic program's ‘collapse-sum’ operator (which uses this function) in *note Arithmetic operators::. -- Function: gal_data_t * gal_dimension_collapse_mean (gal_data_t *in, size_t c_dim, gal_data_t *weight) Similar to ‘gal_dimension_collapse_sum’ (above), but the collapse will be done by calculating the mean along the requested dimension, not summing over it. -- Function: gal_data_t * gal_dimension_collapse_number (gal_data_t *in, size_t c_dim) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by counting how many non-blank elements there are along that dimension. For generality, the returned dataset will have a ‘GAL_TYPE_INT32’ type. See *note Copying datasets:: for converting the returned dataset to a desired type. Also, for more on the application of this function, see the Arithmetic program's ‘collapse-number’ operator (which uses this function) in *note Arithmetic operators::. -- Function: gal_data_t * gal_dimension_collapse_minmax (gal_data_t *in, size_t c_dim, int max1_min0) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by using the largest/smallest non-blank value along that dimension. If ‘max1_min0’ is non-zero, then the collapsed dataset will have the maximum value along the given dimension and if it is zero, the minimum. -- Function: gal_data_t * gal_dimension_collapse_median (gal_data_t *in, size_t c_dim, size_t numthreads, size_t minmapsize, int quietmmap) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by finding the median non-blank value along that dimension. Since the median involves sorting, this operator benefits from many threads (which needs to be set with ‘numthreads’). For more on ‘minmapsize’ and ‘quietmmap’ see *note Memory management::. -- Function: gal_data_t * gal_dimension_collapse_sclip_std (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by finding the standard deviation of pixels along that dimension after sigma-clipping. Since sigma-clipping involves sorting, this operator benefits from many threads (which needs to be set with ‘numthreads’). For more on ‘minmapsize’ and ‘quietmmap’ see *note Memory management::. For more on sigma clipping, see *note Sigma clipping::. -- Function: gal_data_t * gal_dimension_collapse_sclip_fill_std (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Similar to ‘gal_dimension_collapse_sclip_std’, but with filled re-clipping (see *note Filled re-clipping::). -- Function: gal_data_t * gal_dimension_collapse_sclip_mad (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by finding the median absolute deviation (MAD) of pixels along that dimension after sigma-clipping. Since sigma-clipping involves sorting, this operator benefits from many threads (which needs to be set with ‘numthreads’). For more on ‘minmapsize’ and ‘quietmmap’ see *note Memory management::. For more on sigma clipping, see *note Sigma clipping::. -- Function: gal_data_t * gal_dimension_collapse_sclip_fill_mad (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Similar to ‘gal_dimension_collapse_sclip_mad’, but with filled re-clipping (see *note Filled re-clipping::). -- Function: gal_data_t * gal_dimension_collapse_sclip_mean (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by finding the mean of pixels along that dimension after sigma-clipping. Since sigma-clipping involves sorting, this operator benefits from many threads (which needs to be set with ‘numthreads’). For more on ‘minmapsize’ and ‘quietmmap’ see *note Memory management::. For more on sigma clipping, see *note Sigma clipping::. -- Function: gal_data_t * gal_dimension_collapse_sclip_fill_mean (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Similar to ‘gal_dimension_collapse_sclip_mean’, but with filled re-clipping (see *note Filled re-clipping::). -- Function: gal_data_t * gal_dimension_collapse_sclip_median (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by finding the median of pixels along that dimension after sigma-clipping. Since sigma-clipping involves sorting, this operator benefits from many threads (which needs to be set with ‘numthreads’). For more on ‘minmapsize’ and ‘quietmmap’ see *note Memory management::. For more on sigma clipping, see *note Sigma clipping::. -- Function: gal_data_t * gal_dimension_collapse_sclip_fill_median (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Similar to ‘gal_dimension_collapse_sclip_median’, but with filled re-clipping (see *note Filled re-clipping::). -- Function: gal_data_t * gal_dimension_collapse_sclip_number (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by finding the number of pixels along that dimension after sigma-clipping. Since sigma-clipping involves sorting, this operator benefits from many threads (which needs to be set with ‘numthreads’). For more on ‘minmapsize’ and ‘quietmmap’ see *note Memory management::. For more on sigma clipping, see *note Sigma clipping::. -- Function: gal_data_t * gal_dimension_collapse_sclip_fill_number (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Similar to ‘gal_dimension_collapse_sclip_number’, but with filled re-clipping (see *note Filled re-clipping::). -- Function: gal_data_t * gal_dimension_collapse_mclip_std (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by finding the standard deviation of pixels along that dimension after median absolute deviation (MAD) clipping. Since MAD-clipping involves sorting, this operator benefits from many threads (which needs to be set with ‘numthreads’). For more on ‘minmapsize’ and ‘quietmmap’ see *note Memory management::. For more on MAD-clipping, see *note MAD clipping::. -- Function: gal_data_t * gal_dimension_collapse_mclip_fill_std (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Similar to ‘gal_dimension_collapse_mclip_std’, but with filled re-clipping (see *note Filled re-clipping::). -- Function: gal_data_t * gal_dimension_collapse_mclip_mad (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by finding the median absolute deviation (MAD) of pixels along that dimension after median absolute deviation (MAD) clipping. Since MAD-clipping involves sorting, this operator benefits from many threads (which needs to be set with ‘numthreads’). For more on ‘minmapsize’ and ‘quietmmap’ see *note Memory management::. For more on MAD-clipping, see *note MAD clipping::. -- Function: gal_data_t * gal_dimension_collapse_mclip_fill_mad (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Similar to ‘gal_dimension_collapse_mclip_mad’, but with filled re-clipping (see *note Filled re-clipping::). -- Function: gal_data_t * gal_dimension_collapse_mclip_mean (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by finding the mean of pixels along that dimension after median absolute deviation (MAD) clipping. Since MAD-clipping involves sorting, this operator benefits from many threads (which needs to be set with ‘numthreads’). For more on ‘minmapsize’ and ‘quietmmap’ see *note Memory management::. For more on MAD-clipping, see *note MAD clipping::. -- Function: gal_data_t * gal_dimension_collapse_mclip_fill_mean (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Similar to ‘gal_dimension_collapse_mclip_mean’, but with filled re-clipping (see *note Filled re-clipping::). -- Function: gal_data_t * gal_dimension_collapse_mclip_median (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by finding the median of pixels along that dimension after median absolute deviation (MAD) clipping. Since MAD-clipping involves sorting, this operator benefits from many threads (which needs to be set with ‘numthreads’). For more on ‘minmapsize’ and ‘quietmmap’ see *note Memory management::. For more on MAD-clipping, see *note MAD clipping::. -- Function: gal_data_t * gal_dimension_collapse_mclip_fill_median (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Similar to ‘gal_dimension_collapse_mclip_median’, but with filled re-clipping (see *note Filled re-clipping::). -- Function: gal_data_t * gal_dimension_collapse_mclip_number (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Collapse the input dataset (‘in’) along the given dimension (‘c_dim’, in C definition: starting from zero, from the slowest dimension), by finding the number of pixels along that dimension after median absolute deviation (MAD) clipping. Since MAD-clipping involves sorting, this operator benefits from many threads (which needs to be set with ‘numthreads’). For more on ‘minmapsize’ and ‘quietmmap’ see *note Memory management::. For more on MAD-clipping, see *note MAD clipping::. -- Function: gal_data_t * gal_dimension_collapse_mclip_fill_number (gal_data_t *in, size_t c_dim, float multip, float param, size_t numthreads, size_t minmapsize, int quietmmap) Similar to ‘gal_dimension_collapse_mclip_number’, but with filled re-clipping (see *note Filled re-clipping::). -- Function: size_t gal_dimension_remove_extra (size_t ndim, size_t *dsize, struct wcsprm *wcs) Remove extra dimensions (those that only have a length of 1) from the basic size information of a dataset. ‘ndim’ is the number of dimensions and ‘dsize’ is an array with ‘ndim’ elements containing the size along each dimension in the C dimension order. When ‘wcs!=NULL’, the respective dimension will also be removed from the WCS. This function will return the new number of dimensions and the ‘dsize’ elements will contain the length along each new dimension. -- Function-like macro: GAL_DIMENSION_NEIGHBOR_OP (index, ndim, dsize, connectivity, dinc, operation) Parse the neighbors of the element located at ‘index’ and do the requested operation on them. This is defined as a macro to allow easy definition of any operation on the neighbors of a given element without having to use loops within your source code (the loops are implemented by this macro). For an example of using this function, please see *note Library demo - inspecting neighbors::. The input arguments to this function-like macro are described below: ‘index’ Distance of this element from the first element in the array on a contiguous patch of memory (starting from 0), see the discussion above. ‘ndim’ The number of dimensions associated with the contiguous patch of memory. ‘dsize’ The full array size along each dimension. This must be an array and is assumed to have the same number elements as ‘ndim’. See the discussion under the same element in *note Generic data container::. ‘connectivity’ Most distant neighbors to consider. Depending on the number of dimensions, different neighbors may be defined for each element. This function-like macro distinguish between these different neighbors with this argument. It has a value between ‘1’ (one) and ‘ndim’. For example, in a 2D dataset, 4-connected neighbors have a connectivity of ‘1’ and 8-connected neighbors have a connectivity of ‘2’. Note that this is inclusive, so in this example, a connectivity of ‘2’ will also include connectivity ‘1’ neighbors. ‘dinc’ An array keeping the length necessary to increment along each dimension. You can make this array with the following function. Just do not forget to free the array after you are done with it: size_t *dinc=gal_dimension_increment(ndim, dsize); free(dinc); ‘dinc’ depends on ‘ndim’ and ‘dsize’, but it must be defined outside this function-like macro since it involves allocation to help in performance. ‘operation’ Any C operation that you would like to do on the neighbor. This macro will provide you a ‘nind’ variable that can be used as the index of the neighbor that is currently being studied. It is defined as '‘size_t ndim;’'. Note that ‘operation’ will be repeated the number of times there is a neighbor for this element. This macro works fully within its own ‘{}’ block and except for the ‘nind’ variable that shows the neighbor's index, all the variables within this macro's block start with ‘gdn_’.  File: gnuastro.info, Node: Linked lists, Next: Array input output, Prev: Dimensions, Up: Gnuastro library 12.3.8 Linked lists (‘list.h’) ------------------------------ An array is a contiguous region of memory that is very efficient and easy to use for recording and later accessing any random element as fast as any other. This makes array the primary data container when you have many elements (for example, an image which has millions of pixels). One major problem with an array is that the number of elements that go into it must be known in advance and adding or removing an element will require a re-set of all the other elements. For example, if you want to remove the 3rd element in a 1000 element array, all 997 subsequent elements have to pulled back by one position, the reverse will happen if you need to add an element. In many contexts such situations never come up, for example, you do not want to shift all the pixels in an image by one or two pixels from some random position in the image: their positions have scientific value. But in other contexts you will find yourself frequently adding/removing an a-priori unknown number of elements. Linked lists (or _lists_ for short) are the data-container of choice in such situations. As in a chain, each _node_ in a list is an independent C structure, keeping its own data along with pointer(s) to its immediate neighbor(s). Below, you can see one simple linked list node structure along with an ASCII art schematic of how we can use the ‘next’ pointer to add any number of elements to the list that we want. By convention, a list is terminated when ‘next’ is the ‘NULL’ pointer. struct list_float /* --------- --------- */ { /* | Value | | Value | */ float value; /* | --- | | --- | */ struct list_float *next; /* | next-|--> | next-|--> NULL */ } /* --------- --------- */ The schematic shows another great advantage of linked lists: it is very easy to add or remove/pop a node anywhere in the list. If you want to modify the first node, you just have to change one pointer. If it is in the middle, you just have to change two. You initially define a variable of this type with a ‘NULL’ pointer as shown below: struct list_float *list=NULL; To add or remove/pop a node from the list you can use functions provided for the respective type in the sections below. When you add an element to the list, it is conventionally added to the "top" of the list: the general list pointer will point to the newly created node, which will point to the previously created node and so on. So when you "pop" from the top of the list, you are actually retrieving the last value you put in and changing the list pointer to the next youngest node. This is thus known as a "last-in-first-out" list. This is the most efficient type of linked list (easier to implement and faster to process). Alternatively, you can add each newly created node at the end of the list. If you do that, you will get a "first-in-first-out" list. But that will force you to go through the whole list for each new element that is created (this will slow down the processing)(1). The node example above creates the simplest kind of a list. We can define each node with two pointers to both the next and previous neighbors, this is called a "Doubly linked list". In general, lists are very powerful and simple constructs that can be very useful. But going into more detail would be out of the scope of this short introduction in this book. Wikipedia (https://en.wikipedia.org/wiki/Linked_list) has a nice and more thorough discussion of the various types of lists. To appreciate/use the beauty and elegance of these powerful constructs even further, see Chapter 2 (Information Structures, in volume 1) of Donald Knuth's "The art of computer programming". In this section we will review the functions and structures that are available in Gnuastro for working on lists. They differ by the type of data that each node can keep. For each linked-list node structure, we will first introduce the structure, then the functions for working on the structure. All these structures and functions are defined and declared in ‘gnuastro/list.h’. * Menu: * List of strings:: Simply linked list of strings. * List of int32_t:: Simply linked list of int32_ts. * List of size_t:: Simply linked list of size_ts. * List of float:: Simply linked list of floats. * List of double:: Simply linked list of doubles * List of void:: Simply linked list of void * pointers. * Ordered list of size_t:: Simply linked, ordered list of size_t. * Doubly linked ordered list of size_t:: Definition and functions. * List of gal_data_t:: Simply linked list Gnuastro's generic datatype. ---------- Footnotes ---------- (1) A better way to get a first-in-first-out is to first keep the data as last-in-first-out until they are all read. Afterwards, reverse the list by popping each node and immediately add it to the new list. This practically reverses the last-in-first-out list to a first-in-first-out one. All the list types discussed in this chapter have a function with a ‘_reverse’ suffix for this job.  File: gnuastro.info, Node: List of strings, Next: List of int32_t, Prev: Linked lists, Up: Linked lists 12.3.8.1 List of strings ........................ Probably one of the most common lists you will be using are lists of strings. They are the best tools when you are reading the user's inputs, or when adding comments to the output files. Below you can see Gnuastro's string list type and several functions to help in adding, removing/popping, reversing and freeing the list. -- Type (C struct): gal_list_str_t A single node in a list containing a string of characters. typedef struct gal_list_str_t { char *v; struct gal_list_str_t *next; } gal_list_str_t; -- Function: void gal_list_str_add (gal_list_str_t **list, char *value, int allocate) Add a new node to the list of strings (‘list’) and update it. The new node will contain the string ‘value’. If ‘allocate’ is not zero, space will be allocated specifically for the string of the new node and the contents of ‘value’ will be copied into it. This can be useful when your string may be changed later in the program, but you want your list to remain. Here is one short/simple example of initializing and adding elements to a string list: gal_list_str_t *list=NULL; gal_list_str_add(&list, "bottom of list.", 1); gal_list_str_add(&list, "second last element of list.", 1); -- Function: char * gal_list_str_pop (gal_list_str_t **list) Pop the top element of ‘list’, change ‘list’ to point to the next node in the list, and return the string that was in the popped node. If ‘*list==NULL’, then this function will also return a ‘NULL’ pointer. -- Function: size_t gal_list_str_number (gal_list_str_t *list) Return the number of nodes in ‘list’. -- Function: gal_list_str_t * gal_list_str_last (gal_list_str_t *list) Return a pointer to the last node in ‘list’. -- Function: void gal_list_str_print (gal_list_str_t *list) Print the strings within each node of ‘*list’ on the standard output in the same order that they are stored. Each string is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, it is best to make your own implementation with a better, more user-friendly, format. For example, the following code snippet. size_t i=0; gal_list_str_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("String %zu: %s\n", ++i, tmp->v); -- Function: void gal_list_str_reverse (gal_list_str_t **list) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: void gal_list_str_free (gal_list_str_t *list, int freevalue) Free every node in ‘list’. If ‘freevalue’ is not zero, also free the string within the nodes. -- Function: gal_list_str_t * gal_list_str_extract (char *string) Extract space-separated components of the input string. If any space element should be kept (and not considered as a delimiter between two tokens), precede it with a backslash (‘\’). Be aware that in C programming, when including a backslash character within a string literal, the correct format is indeed to use two backslashes ("\\") to represent a single backslash: gal_list_str_extract("bottom of\\ list"); -- Function: char * gal_list_str_cat (gal_list_str_t *list, char delimiter) Concatenate (append) the input list of strings into a single string where each node is separated from the next with the given ‘delimiter’. The space for the output string is allocated by this function and should be freed when you have finished with it. If there is any delimiter characters are present in any of the elements, a backslash (‘\’) will be printed before the SPACE character. This is necessary, otherwise, a function like ‘gal_list_str_extract’ will not be able to extract the elements back into separate elements in a list.  File: gnuastro.info, Node: List of int32_t, Next: List of size_t, Prev: List of strings, Up: Linked lists 12.3.8.2 List of ‘int32_t’ .......................... Signed integers are the best types when you are dealing with a positive or negative integers. The are generally useful in many contexts, for example when you want to keep the order of a series of states (each state stored as a given number in an ‘enum’ for example). On many modern systems, ‘int32_t’ is just an alias for ‘int’, so you can use them interchangeably. To make sure, check the size of ‘int’ on your system: -- Type (C struct): gal_list_i32_t A single node in a list containing a 32-bit signed integer (see *note Numeric data types::). typedef struct gal_list_i32_t { int32_t v; struct gal_list_i32_t *next; } gal_list_i32_t; -- Function: void gal_list_i32_add (gal_list_i32_t **list, int32_t value) Add a new node (containing ‘value’) to the top of the ‘list’ of ‘int32_t’s (‘uint32_t’ is equal to ‘int’ on many modern systems), and update ‘list’. Here is one short example of initializing and adding elements to a string list: gal_list_i32_t *list=NULL; gal_list_i32_add(&list, 52); gal_list_i32_add(&list, -4); -- Function: int32_t gal_list_i32_pop (gal_list_i32_t **list) Pop the top element of ‘list’ and return the value. This function will also change ‘list’ to point to the next node in the list. If ‘*list==NULL’, then this function will also return ‘GAL_BLANK_INT32’ (see *note Library blank values::). -- Function: size_t gal_list_i32_number (gal_list_i32_t *list) Return the number of nodes in ‘list’. -- Function: size_t gal_list_i32_last (gal_list_i32_t *list) Return a pointer to the last node in ‘list’. -- Function: void gal_list_i32_print (gal_list_i32_t *list) Print the integers within each node of ‘*list’ on the standard output in the same order that they are stored. Each integer is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, it is best to make your own implementation with a better, more user-friendly format. For example, the following code snippet. You can also modify it to print all values in one line, etc., depending on the context of your program. size_t i=0; gal_list_i32_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("Number %zu: %s\n", ++i, tmp->v); -- Function: void gal_list_i32_reverse (gal_list_i32_t **list) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: int32_t * gal_list_i32_to_array (gal_list_i32_t *list, int reverse, size_t *num) Dynamically allocate an array and fill it with the values in ‘list’. The function will return a pointer to the allocated array and put the number of elements in the array into the ‘num’ pointer. If ‘reverse’ has a non-zero value, the array will be filled in the opposite order of elements in ‘list’. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. -- Function: void gal_list_i32_free (gal_list_i32_t *list) Free every node in ‘list’.  File: gnuastro.info, Node: List of size_t, Next: List of float, Prev: List of int32_t, Up: Linked lists 12.3.8.3 List of ‘size_t’ ......................... The ‘size_t’ type is a unique type in C: as the name suggests it is defined to store sizes, or more accurately, the distances between memory locations. Hence it is always positive (an ‘unsigned’ type) and it is directly related to the address-able spaces on the host system: on 32-bit and 64-bit systems it is an alias for ‘uint32_t’ and ‘uint64_t’, respectively (see *note Numeric data types::). ‘size_t’ is the default compiler type to index an array (recall that an array index in C is just a pointer increment of a given _size_). Since it is unsigned, it is a great type for counting (where negative is not defined), you are always sure it will never exceed the system's (virtual) memory and since its name has the word "size" inside it, it provides a good level of documentation(1). In Gnuastro, we do all counting and array indexing with this type, so this list is very handy. As discussed above, ‘size_t’ maps to different types on different machines, so a portable way to print them with ‘printf’ is to use C99's ‘%zu’ format. -- Type (C struct): gal_list_sizet_t A single node in a list containing a ‘size_t’ value (which maps to ‘uint32_t’ or ‘uint64_t’ on 32-bit and 64-bit systems), see *note Numeric data types::. typedef struct gal_list_sizet_t { size_t v; struct gal_list_sizet_t *next; } gal_list_sizet_t; -- Function: void gal_list_sizet_add (gal_list_sizet_t **list, size_t value) Add a new node (containing ‘value’) to the top of the ‘list’ of ‘size_t’s and update ‘list’. Here is one short example of initializing and adding elements to a string list: gal_list_sizet_t *list=NULL; gal_list_sizet_add(&list, 45493); gal_list_sizet_add(&list, 930484); -- Function: sizet_t gal_list_sizet_pop (gal_list_sizet_t **list) Pop the top element of ‘list’ and return the value. This function will also change ‘list’ to point to the next node in the list. If ‘*list==NULL’, then this function will also return ‘GAL_BLANK_SIZE_T’ (see *note Library blank values::). -- Function: size_t gal_list_sizet_number (gal_list_sizet_t *list) Return the number of nodes in ‘list’. -- Function: size_t gal_list_sizet_last (gal_list_sizet_t *list) Return a pointer to the last node in ‘list’. -- Function: void gal_list_sizet_print (gal_list_sizet_t *list) Print the values within each node of ‘*list’ on the standard output in the same order that they are stored. Each integer is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, it is best to make your own implementation with a better, more user-friendly format. For example, the following code snippet. You can also modify it to print all values in one line, etc., depending on the context of your program. size_t i=0; gal_list_sizet_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("Number %zu: %zu\n", ++i, tmp->v); -- Function: void gal_list_sizet_reverse (gal_list_sizet_t **list) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: size_t * gal_list_sizet_to_array (gal_list_sizet_t *list, int reverse, size_t *num) Dynamically allocate an array and fill it with the values in ‘list’. The function will return a pointer to the allocated array and put the number of elements in the array into the ‘num’ pointer. If ‘reverse’ has a non-zero value, the array will be filled in the inverse of the order of elements in ‘list’. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. -- Function: void gal_list_sizet_free (gal_list_sizet_t *list) Free every node in ‘list’. ---------- Footnotes ---------- (1) So you know that a variable of this type is not used to store some generic state for example.  File: gnuastro.info, Node: List of float, Next: List of double, Prev: List of size_t, Up: Linked lists 12.3.8.4 List of ‘float’ ........................ Single precision floating point numbers can accurately store real number until 7.2 decimals and only consume 4 bytes (32-bits) of memory, see *note Numeric data types::. Since astronomical data rarely reach that level of precision, single precision floating points are the type of choice to keep and read data. However, when processing the data, it is best to use double precision floating points (since errors propagate). -- Type (C struct): gal_list_f32_t A single node in a list containing a 32-bit single precision ‘float’ value: see *note Numeric data types::. typedef struct gal_list_f32_t { float v; struct gal_list_f32_t *next; } gal_list_f32_t; -- Function: void gal_list_f32_add (gal_list_f32_t **list, float value) Add a new node (containing ‘value’) to the top of the ‘list’ of ‘float’s and update ‘list’. Here is one short example of initializing and adding elements to a string list: gal_list_f32_t *list=NULL; gal_list_f32_add(&list, 3.89); gal_list_f32_add(&list, 1.23e-20); -- Function: float gal_list_f32_pop (gal_list_f32_t **list) Pop the top element of ‘list’ and return the value. This function will also change ‘list’ to point to the next node in the list. If ‘*list==NULL’, then this function will return ‘GAL_BLANK_FLOAT32’ (NaN, see *note Library blank values::). -- Function: size_t gal_list_f32_number (gal_list_f32_t *list) Return the number of nodes in ‘list’. -- Function: size_t gal_list_f32_last (gal_list_f32_t *list) Return a pointer to the last node in ‘list’. -- Function: void gal_list_f32_print (gal_list_f32_t *list) Print the values within each node of ‘*list’ on the standard output in the same order that they are stored. Each floating point number is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, it is best to make your own implementation with a better, more user-friendly format. For example, in the following code snippet. You can also modify it to print all values in one line, etc., depending on the context of your program. size_t i=0; gal_list_f32_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("Number %zu: %f\n", ++i, tmp->v); -- Function: void gal_list_f32_reverse (gal_list_f32_t **list) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: float * gal_list_f32_to_array (gal_list_f32_t *list, int reverse, size_t *num) Dynamically allocate an array and fill it with the values in ‘list’. The function will return a pointer to the allocated array and put the number of elements in the array into the ‘num’ pointer. If ‘reverse’ has a non-zero value, the array will be filled in the inverse of the order of elements in ‘list’. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. -- Function: void gal_list_f32_free (gal_list_f32_t *list) Free every node in ‘list’.  File: gnuastro.info, Node: List of double, Next: List of void, Prev: List of float, Up: Linked lists 12.3.8.5 List of ‘double’ ......................... Double precision floating point numbers can accurately store real number until 15.9 decimals and consume 8 bytes (64-bits) of memory, see *note Numeric data types::. This level of precision makes them very good for serious processing in the middle of a program's execution: in many cases, the propagation of errors will still be insignificant compared to actual observational errors in a data set. But since they consume 8 bytes and more CPU processing power, they are often not the best choice for storing and transferring of data. -- Type (C struct): gal_list_f64_t A single node in a list containing a 64-bit double precision ‘double’ value: see *note Numeric data types::. typedef struct gal_list_f64_t { double v; struct gal_list_f64_t *next; } gal_list_f64_t; -- Function: void gal_list_f64_add (gal_list_f64_t **list, double value) Add a new node (containing ‘value’) to the top of the ‘list’ of ‘double’s and update ‘list’. Here is one short example of initializing and adding elements to a string list: gal_list_f64_t *list=NULL; gal_list_f64_add(&list, 3.8129395763193); gal_list_f64_add(&list, 1.239378923931e-20); -- Function: double gal_list_f64_pop (gal_list_f64_t **list) Pop the top element of ‘list’ and return the value. This function will also change ‘list’ to point to the next node in the list. If ‘*list==NULL’, then this function will return ‘GAL_BLANK_FLOAT64’ (NaN, see *note Library blank values::). -- Function: size_t gal_list_f64_number (gal_list_f64_t *list) Return the number of nodes in ‘list’. -- Function: size_t gal_list_f64_last (gal_list_f64_t *list) Return a pointer to the last node in ‘list’. -- Function: void gal_list_f64_print (gal_list_f64_t *list) Print the values within each node of ‘*list’ on the standard output in the same order that they are stored. Each floating point number is printed on one line. This function is mainly good for checking/debugging your program. For program outputs, it is best to make your own implementation with a better, more user-friendly format. For example, in the following code snippet. You can also modify it to print all values in one line, etc., depending on the context of your program. size_t i=0; gal_list_f64_t *tmp; for(tmp=list; tmp!=NULL; tmp=tmp->next) printf("Number %zu: %f\n", ++i, tmp->v); -- Function: void gal_list_f64_reverse (gal_list_f64_t **list) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: double * gal_list_f64_to_array (gal_list_f64_t *list, int reverse, size_t *num) Dynamically allocate an array and fill it with the values in ‘list’. The function will return a pointer to the allocated array and put the number of elements in the array into the ‘num’ pointer. If ‘reverse’ has a non-zero value, the array will be filled in the inverse of the order of elements in ‘list’. This function can be useful after you have finished reading an initially unknown number of values and want to put them in an array for easy random access. -- Function: gal_data_t * gal_list_f64_to_data (gal_list_f64_t *list, uint8_t type, size_t minmapsize, int quietmmap) Write the values in the given ‘list’ into a ‘gal_data_t’ dataset of the requested ‘type’. The order of the values in the dataset will be the same as the order from the top of the list. -- Function: void gal_list_f64_free (gal_list_f64_t *list) Free every node in ‘list’.  File: gnuastro.info, Node: List of void, Next: Ordered list of size_t, Prev: List of double, Up: Linked lists 12.3.8.6 List of ‘void *’ ......................... In C, ‘void *’ is the most generic pointer. Usually pointers are associated with the type of content they point to. For example, ‘int *’ means a pointer to an integer. This ancillary information about the contents of the memory location is very useful for the compiler, catching bad errors and also documentation (it helps the reader see what the address in memory actually contains). However, ‘void *’ is just a raw address (pointer), it contains no information on the contents it points to. These properties make the ‘void *’ very useful when you want to treat the contents of an address in different ways. You can use the ‘void *’ list defined in this section and its function on any kind of data: for example, you can use it to keep a list of custom data structures that you have built for your own separate program. Each node in the list can keep anything and this gives you great versatility. But in using ‘void *’, please beware that "with great power comes great responsibility". -- Type (C struct): gal_list_void_t A single node in a list containing a ‘void *’ pointer. typedef struct gal_list_void_t { void *v; struct gal_list_void_t *next; } gal_list_void_t; -- Function: void gal_list_void_add (gal_list_void_t **list, void *value) Add a new node (containing ‘value’) to the top of the ‘list’ of ‘void *’s and update ‘list’. Here is one short example of initializing and adding elements to a string list: gal_list_void_t *list=NULL; gal_list_f64_add(&list, some_pointer); gal_list_f64_add(&list, another_pointer); -- Function: void * gal_list_void_pop (gal_list_void_t **list) Pop the top element of ‘list’ and return the value. This function will also change ‘list’ to point to the next node in the list. If ‘*list==NULL’, then this function will return ‘NULL’. -- Function: size_t gal_list_void_number (gal_list_void_t *list) Return the number of nodes in ‘list’. -- Function: size_t gal_list_void_last (gal_list_void_t *list) Return a pointer to the last node in ‘list’. -- Function: void gal_list_void_reverse (gal_list_void_t **list) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: void gal_list_void_free (gal_list_void_t *list) Free every node in ‘list’.  File: gnuastro.info, Node: Ordered list of size_t, Next: Doubly linked ordered list of size_t, Prev: List of void, Up: Linked lists 12.3.8.7 Ordered list of ‘size_t’ ................................. Positions/sizes in a dataset are conventionally in the ‘size_t’ type (see *note List of size_t::) and it sometimes occurs that you want to parse and read the values in a specific order. For example, you want to start from one pixel and add pixels to the list based on their distance to that pixel. So that ever time you pop an element from the list, you know it is the nearest that has not yet been studied. The ‘gal_list_osizet_t’ type and its functions in this section are designed to facilitate such operations. -- Type (C struct): gal_list_osizet_t Each node in this singly-linked list contains a ‘size_t’ value and a floating point value. The floating point value is used as a reference to add new nodes in a sorted manner. At any moment, the first popped node in this list will have the smallest ‘tosort’ value, and subsequent nodes will have larger to values. typedef struct gal_list_osizet_t { size_t v; /* The actual value. */ float s; /* The parameter to sort by. */ struct gal_list_osizet_t *next; } gal_list_osizet_t; -- Function: void gal_list_osizet_add (gal_list_osizet_t **list, size_t value, float tosort) Allocate space for a new node in ‘list’, and store ‘value’ and ‘tosort’ into it. The new node will not necessarily be at the "top" of the list. If ‘*list!=NULL’, then the ‘tosort’ values of existing nodes is inspected and the given node is placed in the list such that the top element (which is popped with ‘gal_list_osizet_pop’) has the smallest ‘tosort’ value. -- Function: size_t gal_list_osizet_pop (gal_list_osizet_t **list, float *sortvalue) Pop a node from the top of ‘list’, return the node's ‘value’ and put its sort value in the space that ‘sortvalue’ points to. This function will also free the allocated space for the popped node and after this function, ‘list’ will point to the next node (which has a larger ‘tosort’ element). -- Function: void gal_list_osizet_to_sizet_free (gal_list_osizet_t *in, gal_list_sizet_t **out) Convert the ordered list of ‘size_t’s into an ordinary ‘size_t’ linked list. This can be useful when all the elements have been added and you just need to pop-out elements and do not care about the sorting values any more. After the conversion is done, this function will free the input list. Note that the ‘out’ list does not have to be empty. If it already contains some nodes, the new nodes will be added on top of them.  File: gnuastro.info, Node: Doubly linked ordered list of size_t, Next: List of gal_data_t, Prev: Ordered list of size_t, Up: Linked lists 12.3.8.8 Doubly linked ordered list of ‘size_t’ ............................................... An ordered list of indices is required in many contexts, one example was discussed at the beginning of *note Ordered list of size_t::. But the list that was introduced there only has one point of entry: you can always only parse the list from smallest to largest. In this section, the doubly-linked ‘gal_list_dosizet_t’ node is defined which will allow us to parse the values in ascending or descending order. -- Type (C struct): gal_list_dosizet_t Doubly-linked, ordered ‘size_t’ list node structure. Each node in this Doubly-linked list contains a ‘size_t’ value and a floating point value. The floating point value is used as a reference to add new nodes in a sorted manner. In the functions here, this linked list can be pointed to by two pointers (largest and smallest) with the following format: largest pointer | NULL <-- (v0,s0) <--> (v1,s1) <--> ... (vn,sn) --> NULL | smallest pointer At any moment, the two pointers will point to the nodes containing the "largest" and "smallest" values and the rest of the nodes will be sorted. This is useful when an unknown number of nodes are being added continuously and during the operations it is important to have the nodes in a sorted format. typedef struct gal_list_dosizet_t { size_t v; /* The actual value. */ float s; /* The parameter to sort by. */ struct gal_list_dosizet_t *prev; struct gal_list_dosizet_t *next; } gal_list_dosizet_t; -- Function: void gal_list_dosizet_add (gal_list_dosizet_t **largest, gal_list_dosizet_t **smallest, size_t value, float tosort) Allocate space for a new node in ‘list’, and store ‘value’ and ‘tosort’ into it. If the list is empty, both ‘largest’ and ‘smallest’ must be ‘NULL’. -- Function: size_t gal_list_dosizet_pop_smallest (gal_list_dosizet_t **largest, gal_list_dosizet_t **smallest, float tosort) Pop the value with the smallest reference from the doubly linked list and store the reference into the space pointed to by ‘tosort’. Note that even though only the smallest pointer will be popped, when there was only one node in the list, the ‘largest’ pointer also has to change, so we need both. -- Function: void gal_list_dosizet_print (gal_list_dosizet_t *largest, gal_list_dosizet_t *smallest) Print the largest and smallest values sequentially until the list is parsed. -- Function: void gal_list_dosizet_to_sizet (gal_list_dosizet_t *in, gal_list_sizet_t **out) Convert the doubly linked, ordered ‘size_t’ list into a singly-linked list of ‘size_t’. -- Function: void gal_list_dosizet_free (gal_list_dosizet_t *largest) Free the doubly linked, ordered ‘sizet_t’ list.  File: gnuastro.info, Node: List of gal_data_t, Prev: Doubly linked ordered list of size_t, Up: Linked lists 12.3.8.9 List of ‘gal_data_t’ ............................. Gnuastro's generic data container has a ‘next’ element which enables it to be used as a singly-linked list (see *note Generic data container::). The ability to connect the different data containers offers great advantages. For example, each column in a table in an independent dataset: with its own name, units, numeric data type (see *note Numeric data types::). Another application is in Tessellating an input dataset into separate tiles or only studying particular regions, or tiles, of a larger dataset (see *note Tessellation:: and *note Tessellation library::). Each independent tile over the dataset can be connected to the others as a linked list and thus any number of tiles can be represented with one variable. -- Function: void gal_list_data_add (gal_data_t **list, gal_data_t *newnode) Add an already allocated dataset (‘newnode’) to top of ‘list’. Note that if ‘newnode->next!=NULL’ (‘newnode’ is itself a list), then ‘list’ will be added to its end. In this example multiple images are linked together as a list: int quietmmap=1; size_t minmapsize=-1; gal_data_t *tmp, *list=NULL; tmp = gal_fits_img_read("file1.fits", "1", minmapsize, quietmmap, NULL); gal_list_data_add( &list, tmp ); tmp = gal_fits_img_read("file2.fits", "1", minmapsize, quietmmap, NULL); gal_list_data_add( &list, tmp ); -- Function: void gal_list_data_add_alloc (gal_data_t **list, void *array, uint8_t type, size_t ndim, size_t *dsize, struct wcsprm *wcs, int clear, size_t minmapsize, int quietmmap, char *name, char *unit, char *comment) Allocate a new dataset (with ‘gal_data_alloc’ in *note Dataset allocation::) and put it as the first element of ‘list’. Note that if this is the first node to be added to the list, ‘list’ must be ‘NULL’. -- Function: gal_data_t * gal_list_data_pop (gal_data_t **list) Pop the top node from ‘list’ and return it. -- Function: void gal_list_data_remove (gal_data_t **list, gal_data_t *node) Remove ‘node’ from the given ‘list’. After finding the given node, this function will just set ‘node->next=NULL’ and correct the ‘next’ node of its previous element to its next element (thus "removing" it from the list). If ‘node’ doesn't exist in the list, this function won't make any change to list. -- Function: gal_data_t * gal_list_data_select_by_name (gal_data_t *list, char *name) Select the dataset within the list, that has a ‘name’ element that is identical (case-sensitive) to the given ‘name’. If not found, a ‘NULL’ pointer will be returned. Note that this dataset will not be popped from the list, only a pointer to it will be returned and if you free it or change its ‘next’ element, it may harm your original list. -- Function: gal_data_t * gal_list_data_select_by_id (gal_data_t *table, char *idstr, size_t *index) Select the dataset within the list that can be identified with the string given to ‘idstr’ (which can be a counter, starting from 1, or a name). If not found, a ‘NULL’ pointer will be returned. Note that this dataset will not be popped from the list, only a pointer to it will be returned and if you free it or change its ‘next’ element, it may harm your original list. -- Function: void gal_list_data_reverse (gal_data_t **list) Reverse the order of the list such that the top node in the list before calling this function becomes the bottom node after it. -- Function: gal_data_t ** gal_list_data_to_array_ptr (gal_data_t *list, size_t *num) Allocate and return an array of ‘gal_data_t *’ pointers with the same number of elements as the nodes in ‘list’. The pointers will be put in the same order that the list is parsed. Hence the N-th element in the array will point to the same dataset that the N-th node in the list points to. -- Function: size_t gal_list_data_number (gal_data_t *list) Return the number of nodes in ‘list’. -- Function: gal_data_t * gal_list_data_last (gal_data_t *list) Return a pointer to the last node in ‘list’. -- Function: void gal_list_data_free (gal_data_t *list) Free all the datasets in ‘list’ along with all the allocated spaces in each.  File: gnuastro.info, Node: Array input output, Next: Table input output, Prev: Linked lists, Up: Gnuastro library 12.3.9 Array input output ------------------------- Getting arrays (commonly images or cubes) from a file into your program or writing them after the processing into an output file are some of the most common operations. The functions in this section are designed for such operations with the known file types. The functions here are thus just wrappers around functions of lower-level file type functions of this library, for example, *note FITS files:: or *note TIFF files::. If the file type of the input/output file is already known, you can use the functions in those sections respectively. -- Function: int gal_array_name_recognized (char *filename) Return 1 if the given file name corresponds to one of the recognized file types for reading arrays. -- Function: int gal_array_name_recognized_multiext (char *filename) Return 1 if the given file name corresponds to one of the recognized file types for reading arrays which may contain multiple extensions (for example FITS or TIFF) formats. -- Function: int gal_array_file_recognized (char *filename) Similar to ‘gal_array_name_recognized’, but for FITS files, it will also check the contents of the file if the recognized file name suffix is not found. See the description of ‘gal_fits_file_recognized’ for more (*note FITS macros errors filenames::). -- Function: gal_data_t gal_array_read (char *filename, char *extension, gal_list_str_t *lines, size_t minmapsize, int quietmmap, char *hdu_option_name) Read the array within the given extension (‘extension’) of ‘filename’, or the ‘lines’ list (see below). If the array is larger than ‘minmapsize’ bytes, then it will not be read into RAM, but a file on the HDD/SSD (no difference for the programmer). Messages about the memory-mapped file can be disabled with ‘quietmmap’. ‘extension’ will be ignored for files that do not support them (for example JPEG or text). For FITS files, ‘extension’ can be a number or a string (name of the extension), but for TIFF files, it has to be number. In both cases, counting starts from zero. For multi-channel formats (like RGB images in JPEG or TIFF), this function will return a *note List of gal_data_t::: one data structure per channel. Thus if you just want a single array (and want to check if the user has not given a multi-channel input), you can check the ‘next’ pointer of the returned ‘gal_data_t’. ‘lines’ is a list of strings with each node representing one line (including the new-line character), see *note List of strings::. It will mostly be the output of ‘gal_txt_stdin_read’, which is used to read the program's input as separate lines from the standard input (see *note Text files::). Note that ‘filename’ and ‘lines’ are mutually exclusive and one of them must be ‘NULL’. ‘hdu_option_name’ is used in error messages related to extensions (e.g., HDUs in FITS) and is expected to be the command-line option name that users of your program can specify to select an input HDU for this particular input; for example, if the kernel is used as the input, users should determine ‘--khdu’ for this option. If the given ‘extension’ doesn't exist in ‘filename’, a descriptive error message is printed instructing the users how to find and fix the problem. This error message also suggests the option to use in order to help users of your program to inform them what option they should give a HDU to. If you don't have an option that is configured by the users of your program, you can set this to ‘NONE’ or ‘NULL’. -- Function: void gal_array_read_to_type (char *filename, char *extension, gal_list_str_t *lines, uint8_t type, size_t minmapsize, int quietmmap, char *hdu_option_name) Similar to ‘gal_array_read’, but the output data structure(s) will have a numeric data type of ‘type’, see *note Numeric data types::. -- Function: void gal_array_read_one_ch (char *filename, char *extension, gal_list_str_t *lines, size_t minmapsize, int quietmmap, char *hdu_option_name) Read the dataset within ‘filename’ (extension/hdu/dir ‘extension’) and make sure it is only a single channel. This is just a simple wrapper around ‘gal_array_read’ that checks if there was more than one dataset and aborts with an informative error if there is more than one channel in the dataset. Formats like JPEG or TIFF support multiple channels per input, but it may happen that your program only works on a single dataset. This function can be a convenient way to make sure that the data that comes into your program is only one channel. Regarding ‘*hdu_option_name’, see the description for the same argument in the description of ‘gal_array_read’. -- Function: void gal_array_read_one_ch_to_type (char *filename, char *extension, gal_list_str_t *lines, uint8_t type, size_t minmapsize, int quietmmap, char *hdu_option_name) Similar to ‘gal_array_read_one_ch’, but the output data structure will has a numeric data type of ‘type’, see *note Numeric data types::.  File: gnuastro.info, Node: Table input output, Next: FITS files, Prev: Array input output, Up: Gnuastro library 12.3.10 Table input output (‘table.h’) -------------------------------------- Tables are a collection of one dimensional datasets that are packed together into one file. They are the single most common format to store high-level (processed) information, hence they play a very important role in Gnuastro. For a more thorough introduction, please see *note Table::. Gnuastro's Table program, and all the other programs that can read from and write into tables, use the functions of this section for reading and writing their input/output tables. For a simple demonstration of using the constructs introduced here, see *note Library demo - reading and writing table columns::. Currently only plain text (see *note Gnuastro text table format::) and FITS (ASCII and binary) tables are supported by Gnuastro. However, the low-level table infra-structure is written such that accommodating other formats is also possible and in future releases more formats will hopefully be supported. Please do not hesitate to suggest your favorite format so it can be implemented when possible. -- Macro: GAL_TABLE_DEF_WIDTH_STR -- Macro: GAL_TABLE_DEF_WIDTH_INT -- Macro: GAL_TABLE_DEF_WIDTH_LINT -- Macro: GAL_TABLE_DEF_WIDTH_FLT -- Macro: GAL_TABLE_DEF_WIDTH_DBL -- Macro: GAL_TABLE_DEF_PRECISION_INT -- Macro: GAL_TABLE_DEF_PRECISION_FLT -- Macro: GAL_TABLE_DEF_PRECISION_DBL The default width and precision for generic types to use in writing numeric types into a text file (plain text and FITS ASCII tables). When the dataset does not have any pre-set width and precision (see ‘disp_width’ and ‘disp_precision’ in *note Generic data container::) these will be directly used in C's ‘printf’ command to write the number as a string. -- Macro: GAL_TABLE_DISPLAY_FMT_STRING -- Macro: GAL_TABLE_DISPLAY_FMT_DECIMAL -- Macro: GAL_TABLE_DISPLAY_FMT_UDECIMAL -- Macro: GAL_TABLE_DISPLAY_FMT_OCTAL -- Macro: GAL_TABLE_DISPLAY_FMT_HEX -- Macro: GAL_TABLE_DISPLAY_FMT_FIXED -- Macro: GAL_TABLE_DISPLAY_FMT_EXP -- Macro: GAL_TABLE_DISPLAY_FMT_GENERAL The display format used in C's ‘printf’ to display data of different types. The ‘_STRING’ and ‘_DECIMAL’ are unique for printing strings and signed integers, they are mainly here for completeness. However, unsigned integers and floating points can be displayed in multiple formats: Unsigned integer For unsigned integers, it is possible to choose from ‘_UDECIMAL’ (unsigned decimal), ‘_OCTAL’ (octal notation, for example, ‘125’ in decimal will be displayed as ‘175’), and ‘_HEX’ (hexadecimal notation, for example, ‘125’ in decimal will be displayed as ‘7D’). Floating point For floating point, it is possible to display the number in ‘_FLOAT’ (floating point, for example, ‘1500.345’), ‘_EXP’ (exponential, for example, ‘1.500345e+03’), or ‘_GENERAL’ which is the best of the two for the given number. -- Macro: GAL_TABLE_FORMAT_INVALID -- Macro: GAL_TABLE_FORMAT_TXT -- Macro: GAL_TABLE_FORMAT_AFITS -- Macro: GAL_TABLE_FORMAT_BFITS All the current acceptable table formats to Gnuastro. The ‘AFITS’ and ‘BFITS’ represent FITS ASCII tables and FITS Binary tables. You can use these anywhere you see the ‘tableformat’ variable. -- Macro: GAL_TABLE_SEARCH_INVALID -- Macro: GAL_TABLE_SEARCH_NAME -- Macro: GAL_TABLE_SEARCH_UNIT -- Macro: GAL_TABLE_SEARCH_COMMENT When the desired column is not a number, these values determine if the string to match, or regular expression to search, be in the _name_, _units_ or _comments_ of the column metadata. These values should be used for the ‘searchin’ variables of the functions. -- Function: uint8_t gal_table_displayflt_from_str (char *string) Convert the input ‘string’ into one of the ‘GAL_TABLE_DISPLAY_FMT_FIXED’ (for fixed-point notation) or ‘GAL_TABLE_DISPLAY_FMT_EXP’ (for exponential notation). -- Function: char * gal_table_displayflt_to_str (uint8_t id) Convert the input identifier (one of the ‘GAL_TABLE_DISPLAY_FMT_FIXED’; for fixed-point notation, or ‘GAL_TABLE_DISPLAY_FMT_EXP’; for exponential notation) into a standard string that is used to identify them. -- Function: gal_data_t * gal_table_info (char *filename, char *hdu, gal_list_str_t *lines, size_t *numcols, size_t *numrows, int *tableformat) Store the information of each column of a table into an array of meta-data ‘gal_data_t’s. In a metadata ‘gal_data_t’, the size elements are zero (‘ndim=size=0’ and ‘dsize=NULL’) but other relevant elements are filled). See the end of this description for the exact components of each ‘gal_data_t’ that are filled. The returned array of ‘gal_data_t’s has ‘numcols’ datasets (one data structure for each column). The number of rows in each dataset is stored in ‘numrows’ (in a table, all the columns have the same number of rows). The format of the table (e.g., ASCII text file, or FITS binary or ASCII table) will be put in ‘tableformat’ (macros defined above). If the ‘filename’ is not a FITS file, then ‘hdu’ will not be used (can be ‘NULL’). The input must be either a file (specified by ‘filename’) or a list of strings (‘lines’). ‘lines’ is a list of strings with each node representing one line (including the new-line character), see *note List of strings::. It will mostly be the output of ‘gal_txt_stdin_read’, which is used to read the program's input as separate lines from the standard input (see *note Text files::). Note that ‘filename’ and ‘lines’ are mutually exclusive and one of them must be ‘NULL’. In the output datasets, only the meta-data strings (column name, units and comments), will be allocated and set as shown below. This function is just for column information (meta-data), not column contents. *restrict array -> Blank value (if present, in col's own type). type -> Type of column data. ndim -> 0 *dsize -> NULL size -> 0 quietmmap -> ------------ *mmapname -> ------------ minmapsize -> Repeat (length of vector; 1 if not vector). nwcs -> ------------ *wcs -> ------------ flag -> 'GAL_TABLEINTERN_FLAG_*' macros. status -> ------------ *name -> Column name. *unit -> Column unit. *comment -> Column comments. disp_fmt -> 'GAL_TABLE_DISPLAY_FMT' macros. disp_width -> Width of string columns. disp_precision -> ------------ *next -> Pointer to next column's metadata *block -> ------------ -- Function: void gal_table_print_info (gal_data_t *allcols, size_t numcols, size_t numrows, char *hdu_option_name) Print the column information for all the columns (output of ‘gal_table_info’) to standard output. The output is in the same format as this command with Gnuastro Table program (see *note Invoking asttable::): $ asttable --info table.fits -- Function: gal_data_t * gal_table_read (char *filename, char *hdu, gal_list_str_t *lines, gal_list_str_t *cols, int searchin, int ignorecase, size_t numthreads, size_t minmapsize, int quietmmap, size_t *colmatch, char *hdu_option_name) Read the specified columns in a file (named ‘filename’), or list of strings (‘lines’) into a linked list of data structures. If the file is FITS, then ‘hdu’ will also be used, otherwise, ‘hdu’ is ignored. For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. ‘lines’ is a list of strings with each node representing one line (including the new-line character), see *note List of strings::. It will mostly be the output of ‘gal_txt_stdin_read’, which is used to read the program's input as separate lines from the standard input (see *note Text files::). Note that ‘filename’ and ‘lines’ are mutually exclusive and one of them must be ‘NULL’. The information to search for columns should be specified by the ‘cols’ list of strings (see *note List of strings::). The string in each node of the list may be a number, an exact match to a column name, or a regular expression (in GNU AWK format) enclosed in ‘/ /’. The ‘searchin’ value must be one of the macros defined above. If ‘cols’ is NULL, then this function will read the full table. Also, the ‘ignorecase’ value should be 1 if you want to ignore the case of alphabetic characters while matching/searching column meta-data (see *note Input output options::). For FITS tables, each column will be read independently. Therefore they will be read in ‘numthreads’ CPU threads to greatly speed up the reading when there are many columns and rows. However, this only happens if CFITSIO was configured with ‘--enable-reentrant’. This test has been done at Gnuastro's configuration time; if so, ‘GAL_CONFIG_HAVE_FITS_IS_REENTRANT’ will have a value of 1, otherwise, it will have a value of 0. For more on this macro, see *note Configuration information::). Multi-threaded table reading is not currently applicable to other table formats (only for FITS tables). The output is an individually allocated list of datasets (see *note List of gal_data_t::) with the same order of the ‘cols’ list. Note that one column node in the ‘cols’ list might give multiple columns (for example, from regular expressions), in this case, the order of output columns that correspond to that one input, are in order of the table (which column was read first). So the first requested column is the first popped data structure and so on. if ‘colmatch!=NULL’, it is assumed to be an array that has at least the same number of elements as nodes in the ‘cols’ list. The number of columns that matched each input column will be stored in each element. -- Function: gal_list_sizet_t * gal_table_list_of_indexs (gal_list_str_t *cols, gal_data_t *allcols, size_t numcols, int searchin, int ignorecase, char *filename, char *hdu, size_t *colmatch) Returns a list of indices (starting from 0) of the input columns that match the names/numbers given to ‘cols’. This is a low-level operation which is called by ‘gal_table_read’ (described above), see there for more on each argument's description. ‘allcols’ is the returned array of ‘gal_table_info’. -- Function: void gal_table_comments_add_intro (gal_list_str_t **comments, char *program_string, time_t *rawtime) Add some basic information to the list of ‘comments’. This basic information includes the following information • If the program is run in a Git version controlled directory, Git's description is printed (see description under ‘COMMIT’ in *note Output FITS files::). • The calendar time that is stored in ‘rawtime’ (‘time_t’ is C's calendar time format defined in ‘time.h’). You can calculate the time in this format with the following expressions: time_t rawtime; time(&rawtime); • The name of your program in ‘program_string’. If it is ‘NULL’, this line is ignored. -- Function: void gal_table_write (gal_data_t *cols, struct gal_fits_list_key_t **keylist, gal_list_str_t *comments, int tableformat, char *filename, char *extname, uint8_t colinfoinstdout, int freekeys) Write ‘cols’ (a list of datasets, see *note List of gal_data_t::) into a table stored in ‘filename’. The format of the table can be determined with ‘tableformat’ that accepts the macros defined above. When ‘filename==NULL’, the column information will be printed on the standard output (command-line). If ‘comments!=NULL’, the list of comments (see *note List of strings::) will also be printed into the output table. When the output table is a plain text file, every node of ‘comments’ will be printed after a ‘#’ (so it can be considered as a comment) and in FITS table they will follow a ‘COMMENT’ keyword. If a file named ‘filename’ already exists, the operation depends on the type of output. When ‘filename’ is a FITS file, the table will be added as a new extension after all existing extensions. If ‘filename’ is a plain text file, this function will abort with an error. If ‘filename’ is a FITS file, the table extension will have the name ‘extname’. When ‘colinfoinstdout!=0’ and ‘filename==NULL’ (columns are printed in the standard output), the dataset metadata will also printed in the standard output. When printing to the standard output, the column information can be piped into another program for further processing and thus the meta-data (lines starting with a ‘#’) must be ignored. In such cases, you only print the column values by passing ‘0’ to ‘colinfoinstdout’. -- Function: void gal_table_write_log (gal_data_t *logll, char *program_string, time_t *rawtime, gal_list_str_t *comments, char *filename, int quiet) Write the ‘logll’ list of datasets into a table in ‘filename’ (see *note List of gal_data_t::). This function is just a wrapper around ‘gal_table_comments_add_intro’ and ‘gal_table_write’ (see above). If ‘quiet’ is non-zero, this function will print a message saying that the ‘filename’ has been created. -- Function: gal_data_t * gal_table_col_vector_extract (gal_data_t *vector, gal_list_sizet_t *indexs) Given the "vector" column ‘vector’ (which is assumed to be a 2D dataset), extract the tokens that are identified in the ‘indexs’ list into a list of one dimensional datasets. For more on vector columns in tables, see *note Vector columns::. -- Function: gal_data_t * gal_table_cols_to_vector (gal_data_t *list) Merge the one-dimensional datasets in the given list into one 2-dimensional dataset that can be treated as a vector column. All the input datasets have to have the same size and type. For more on vector columns in tables, see *note Vector columns::.  File: gnuastro.info, Node: FITS files, Next: File input output, Prev: Table input output, Up: Gnuastro library 12.3.11 FITS files (‘fits.h’) ----------------------------- The FITS format is the most common format to store data (images and tables) in astronomy. The CFITSIO library already provides a very good low-level collection of functions for manipulating FITS data. The low-level nature of CFITSIO is defined for versatility and portability. As a result, even a simple and basic operation, like reading an image or table column into memory, will require a special sequence of CFITSIO function calls which can be inconvenient and buggy to manage in separate locations. To ease this process, Gnuastro's library provides wrappers for CFITSIO functions. With these, it much easier to read, write, or modify FITS file data, header keywords and extensions. Hence, if you feel these functions do not exactly do what you want, we strongly recommend reading the CFITSIO manual to use its great features directly (afterwards, send us your wrappers so we can include it here for others to benefit also). All the functions and macros introduced in this section are declared in ‘gnuastro/fits.h’. When you include this header, you are also including CFITSIO's ‘fitsio.h’ header. So you do not need to explicitly include ‘fitsio.h’ anymore and can freely use any of its macros or functions in your code along with those discussed here. * Menu: * FITS macros errors filenames:: General macros, errors and checking names. * CFITSIO and Gnuastro types:: Conversion between FITS and Gnuastro types. * FITS HDUs:: Opening and getting information about HDUs. * FITS header keywords:: Reading and writing FITS header keywords. * FITS arrays:: Reading and writing FITS images/arrays. * FITS tables:: Reading and writing FITS tables.  File: gnuastro.info, Node: FITS macros errors filenames, Next: CFITSIO and Gnuastro types, Prev: FITS files, Up: FITS files 12.3.11.1 FITS Macros, errors and filenames ........................................... Some general constructs provided by Gnuastro's FITS handling functions are discussed here. In particular there are several useful functions about FITS file names. -- Macro: GAL_FITS_MAX_NDIM The maximum number of dimensions a dataset can have in FITS format, according to the FITS standard this is 999. -- Function: void gal_fits_io_error (int status, char *message) If ‘status’ is non-zero, this function will print the CFITSIO error message corresponding to status, print ‘message’ (optional) in the next line and abort the program. If ‘message==NULL’, it will print a default string after the CFITSIO error. -- Function: int gal_fits_name_is_fits (char *name) If the ‘name’ is an acceptable CFITSIO FITS filename return ‘1’ (one), otherwise return ‘0’ (zero). The currently acceptable FITS suffixes are ‘.fits’, ‘.fit’, ‘.fits.gz’, ‘.fits.Z’, ‘.imh’, ‘.fits.fz’. IMH is the IRAF format which is acceptable to CFITSIO. -- Function: int gal_fits_suffix_is_fits (char *suffix) Similar to ‘gal_fits_name_is_fits’, but only for the suffix. The suffix does not have to start with '<.>': this function will return ‘1’ (one) for both ‘fits’ and ‘.fits’. -- Function: int gal_fits_file_recognized (char *name) Return ‘1’ if the given file name (possibly including its contents) is a FITS file. This is necessary in when the contents of a FITS file do follow the FITS standard, but it the file does not have a Gnuastro-recognized FITS suffix. Therefore, it will first call ‘gal_fits_name_is_fits’, if the result is negative, then this function will attempt to open the file with CFITSIO and if it works, it will close it again and return 1. In the process of opening the file, CFITSIO will just to open the file, no reading will take place, so it should have minimal CPU footprint. -- Function: char * gal_fits_name_save_as_string (char *filename, char *hdu) If the name is a FITS name, then put a ‘(hdu: ...)’ after it and return the string. If it is not a FITS file, just print the name, if ‘filename==NULL’, then return the string ‘stdin’. Note that the output string's space is allocated. This function is useful when you want to report a random file to the user which may be FITS or not (for a FITS file, simply the filename is not enough, the HDU is also necessary).  File: gnuastro.info, Node: CFITSIO and Gnuastro types, Next: FITS HDUs, Prev: FITS macros errors filenames, Up: FITS files 12.3.11.2 CFITSIO and Gnuastro types .................................... Both Gnuastro and CFITSIO have special and different identifiers for each type that they accept. Gnuastro's type identifiers are fully described in *note Library data types:: and are usable for all kinds of datasets (images, table columns, etc) as part of Gnuastro's *note Generic data container::. However, following the FITS standard, CFITSIO has different identifiers for images and tables. Following CFITSIO's own convention, we will use ‘bitpix’ for image type identifiers and ‘datatype’ for its internal identifiers (and mainly used in tables). The functions introduced in this section can be used to convert between CFITSIO and Gnuastro's type identifiers. One important issue to consider is that CFITSIO's types are not fixed width (for example, ‘long’ may be 32-bits or 64-bits on different systems). However, Gnuastro's types are defined by their width. These functions will use information on the host system to do the proper conversion. To have a portable (usable on different systems) code, is thus recommended to use these functions and not to assume a fixed correspondence between CFITSIO and Gnuastro's types. -- Function: uint8_t gal_fits_bitpix_to_type (int bitpix) Return the Gnuastro type identifier that corresponds to CFITSIO's ‘bitpix’ on this system. -- Function: int gal_fits_type_to_bitpix (uint8_t type) Return the CFITSIO ‘bitpix’ value that corresponds to Gnuastro's ‘type’. -- Function: char gal_fits_type_to_bin_tform (uint8_t type) Return the FITS standard binary table ‘TFORM’ character that corresponds to Gnuastro's ‘type’. -- Function: int gal_fits_type_to_datatype (uint8_t type) Return the CFITSIO ‘datatype’ that corresponds to Gnuastro's ‘type’ on this machine. -- Function: uint8_t gal_fits_datatype_to_type (int datatype, int is_table_column) Return Gnuastro's type identifier that corresponds to the CFITSIO ‘datatype’. Note that when dealing with CFITSIO's ‘TLONG’, the fixed width type differs between tables and images. So if the corresponding dataset is a table column, put a non-zero value into ‘is_table_column’.  File: gnuastro.info, Node: FITS HDUs, Next: FITS header keywords, Prev: CFITSIO and Gnuastro types, Up: FITS files 12.3.11.3 FITS HDUs ................... A FITS file can contain multiple HDUs/extensions. The functions in this section can be used to get basic information about the extensions or open them. Note that ‘fitsfile’ is defined in CFITSIO's ‘fitsio.h’ which is automatically included by Gnuastro's ‘gnuastro/fits.h’. -- Function: fitsfile * gal_fits_open_to_write (char *filename) If ‘filename’ exists, open it and return the ‘fitsfile’ pointer that corresponds to it. If ‘filename’ does not exist, the file will be created which contains a blank first extension and the pointer to its next extension will be returned. -- Function: size_t gal_fits_hdu_num (char *filename) Return the number of HDUs/extensions in ‘filename’. -- Function: unsigned long gal_fits_hdu_datasum (char *filename, char *hdu, char *hdu_option_name) Return the ‘DATASUM’ of the given HDU in the given FITS file. For more on ‘DATASUM’ in the FITS standard, see *note Keyword inspection and manipulation:: (under the ‘checksum’ component of ‘--write’). For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. -- Function: unsigned long gal_fits_hdu_datasum_encoded (char *filename, char *hdu, char *hdu_option_name) Similar to ‘gal_fits_hdu_datasum’, but the returned value is always a 16-character string following the encoding that is described in the FITS standard (primarily for the ‘CHECKSUM’ keyword, but can also be used for ‘DATASUM’. -- Function: unsigned long gal_fits_hdu_datasum_ptr (fitsfile *fptr) Return the ‘DATASUM’ of the already opened HDU in ‘fptr’. For more on ‘DATASUM’ in the FITS standard, see *note Keyword inspection and manipulation:: (under the ‘checksum’ component of ‘--write’). -- Function: int gal_fits_hdu_format (char *filename, char *hdu, char *hdu_option_name) Return the format of the HDU as one of CFITSIO's recognized macros: ‘IMAGE_HDU’, ‘ASCII_TBL’, or ‘BINARY_TBL’. For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. -- Function: int gal_fits_hdu_is_healpix (fitsfile *fptr) Return ‘1’ if the dataset may be a HEALpix grid and ‘0’ otherwise. Technically, it is considered to be a HEALPix if the HDU is not an ASCII table, and has the ‘NSIDE’, ‘FIRSTPIX’ and ‘LASTPIX’. -- Function: fitsfile * gal_fits_hdu_open (char *filename, char *hdu, int iomode, int exitonerror, char *hdu_option_name) Open the HDU/extension ‘hdu’ from ‘filename’ and return a pointer to CFITSIO's ‘fitsfile’. ‘iomode’ determines how the FITS file will be opened using CFITSIO's macros: ‘READONLY’ or ‘READWRITE’. The string in ‘hdu’ will be appended to ‘filename’ in square brackets so CFITSIO only opens this extension. You can use any formatting for the ‘hdu’ that is acceptable to CFITSIO. See the description under ‘--hdu’ in *note Input output options:: for more. If ‘exitonerror!=0’ and the given HDU cannot be opened for any reason, the function will exit the program, and print an informative message. Otherwise, when the HDU cannot be opened, it will just return a NULL pointer. For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. -- Function: fitsfile * gal_fits_hdu_open_format (char *filename, char *hdu, int img0_tab1, char *hdu_option_name) Open (in read-only format) the ‘hdu’ HDU/extension of ‘filename’ as an image or table. When ‘img0_tab1’ is ‘0’(zero) but the HDU is a table, this function will abort with an error. It will also abort with an error when ‘img0_tab1’ is ‘1’ (one), but the HDU is an image. For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. A FITS HDU may contain both tables or images. When your program needs one of these formats, you can call this function so if the user provided the wrong HDU/file, it will abort and inform the user that the file/HDU is has the wrong format.  File: gnuastro.info, Node: FITS header keywords, Next: FITS arrays, Prev: FITS HDUs, Up: FITS files 12.3.11.4 FITS header keywords .............................. Each FITS extension/HDU contains a raw dataset which can either be a table or an image along with some header keywords. The keywords can be used to store meta-data about the actual dataset. The functions in this section describe Gnuastro's high-level functions for reading and writing FITS keywords. Similar to all Gnuastro's FITS-related functions, these functions are all wrappers for CFITSIO's low-level functions. The necessary meta-data (header keywords) for a particular dataset are commonly numerous, it is much more efficient to list them in one variable and call the reading/writing functions once. Hence the functions in this section use linked lists, a thorough introduction to them is given in *note Linked lists::. To reading FITS keywords, these functions use a list of Gnuastro's generic dataset format that is discussed in *note List of gal_data_t::. To write FITS keywords we define the ‘gal_fits_list_key_t’ node that is defined below. -- Type (C struct): gal_fits_list_key_t Structure for writing FITS keywords. This structure is used for one keyword and you do not need to set all elements. With the ‘next’ element, you can link it to another keyword thus creating a linked list to add any number of keywords easily and at any step during your program (see *note Linked lists:: for an introduction on lists). See the functions below for adding elements to the list. typedef struct gal_fits_list_key_t { int tfree; /* ==1, free title string. */ int kfree; /* ==1, free keyword name. */ int vfree; /* ==1, free keyword value. */ int cfree; /* ==1, free comment. */ int ufree; /* ==1, free unit. */ uint8_t type; /* Keyword value type. */ char *title; /* !=NULL, only print title.*/ char *keyname; /* Keyword Name. */ void *value; /* Keyword value. */ char *comment; /* Keyword comment. */ char *unit; /* Keyword unit. */ struct gal_fits_list_key_t *next; /* Pointer next keyword. */ } gal_fits_list_key_t; -- Function: int gal_fits_key_exists_fptr (fitsfile *fptr, char *keyname) Return 1 (true) if the opened FITS file pointer contains the requested keyword and 0 (false) otherwise. -- Function: void * gal_fits_key_img_blank (uint8_t type) Returns a pointer to an allocated space containing the value to the FITS ‘BLANK’ header keyword, when the input array has a type of ‘type’. This is useful when you want to write the ‘BLANK’ keyword using CFITSIO's ‘fits_write_key’ function. According to the FITS standard: "If the ‘BSCALE’ and ‘BZERO’ keywords do not have the default values of 1.0 and 0.0, respectively, then the value of the ‘BLANK’ keyword must equal the actual value in the FITS data array that is used to represent an undefined pixel and not the corresponding physical value". Therefore a special ‘BLANK’ value is needed for datasets containing signed 8-bit, unsigned 16-bit, unsigned 32-bit, and unsigned 64-bit integers (types that are defined with ‘BSCALE’ and ‘BZERO’ in the FITS standard). *Not usable when reading a dataset:* As quoted from the FITS standard above, the value returned by this function can only be generically used for the writing of the ‘BLANK’ keyword header. It _must not_ be used as the blank pointer when when reading a FITS array using CFITSIO. When reading an array with CFITSIO, you can use ‘gal_blank_alloc_write’ to generate the necessary pointer. -- Function: void gal_fits_key_clean_str_value (char *string) Remove the single quotes and possible extra spaces around the keyword values that CFITSIO returns when reading a string keyword. CFITSIO does not remove the two single quotes around the string value of a keyword. Hence the strings it reads are like: ‘'value '’, or ‘'some_very_long_value'’. To use the value during your processing, it is commonly necessary to remove the single quotes (and possible extra spaces). This function will do this within the allocated space of the string. -- Function: char * gal_fits_key_date_to_struct_tm (char *fitsdate, struct tm *tp) Parse ‘fitsdate’ as a FITS date format string (most generally: ‘YYYY-MM-DDThh:mm:ss.ddd...’) into the C library's broken-down time structure, or ‘struct tm’ (declared in ‘time.h’) and return a pointer to a newly allocated array for the sub-second part of the format (‘.ddd...’). Therefore it needs to be freed afterwards (if it is not ‘NULL’) When there is no sub-second portion, this pointer will be ‘NULL’. This is a relatively low-level function, an easier function to use is ‘gal_fits_key_date_to_seconds’ which will return the sub-seconds as double precision floating point. Note that the FITS date format mentioned above is the most complete representation. The following two formats are also acceptable: ‘YYYY-MM-DDThh:mm:ss’ and ‘YYYY-MM-DD’. This option can also interpret the older FITS date format where only two characters are given to the year and the date format is reversed (‘DD/MM/YYThh:mm:ss.ddd...’). In this case (following the GNU C Library), this option will make the following assumption: values 68 to 99 correspond to the years 1969 to 1999, and values 0 to 68 as the years 2000 to 2068. -- Function: size_t gal_fits_key_date_to_seconds (char *fitsdate, char **subsecstr, double *subsec) Return the Unix epoch time (number of seconds that have passed since 00:00:00 Thursday, January 1st, 1970) corresponding to the FITS date format string ‘fitsdate’ (see description of ‘gal_fits_key_date_to_struct_tm’ above). This function will return ‘GAL_BLANK_SIZE_T’ if the broken-down time could not be converted to seconds. The Unix epoch time is in units of seconds, but the FITS date format allows sub-second accuracy. The last two arguments are for the optional sub-second portion. If you do not want sub-second information, just set the second argument to ‘NULL’. If ‘fitsdate’ contains sub-second accuracy and ‘subsecstr!=NULL’, then the starting of the sub-second part's string is stored in ‘subsecstr’ (malloc'ed), and ‘subsec’ will be the corresponding numerical value (between 0 and 1, in double precision floating point). So to avoid leaking memory, if a sub-second string is requested, it must be freed after calling this function. When a sub-second string does not exist (and it is requested), then a value of ‘NULL’ and NaN will be written in ‘*subsecstr’ and ‘*subsec’ respectively. This is a very useful function for operations on the FITS date values, for example, sorting FITS files by their dates, or finding the time difference between two FITS files. The advantage of working with the Unix epoch time is that you do not have to worry about calendar details (such as the number of days in different months or leap years). -- Function: void gal_fits_key_read_from_ptr (fitsfile *fptr, gal_data_t *keysll, int readcomment, int readunit) Read the list of keyword values from a FITS pointer. The input should be a linked list of Gnuastro's generic data container (‘gal_data_t’). Before calling this function, you just have to set the ‘name’, and optionally, the desired ‘type’ of the value of each keyword. The given ‘name’ value will be directly passed to CFITSIO to read the desired keyword name. This function will allocate space to keep the value. If no pre-defined type is requested for a certain keyword's value, the smallest possible type to host the value will be found and used. If ‘readcomment’ and ‘readunit’ are non-zero, this function will also try to read the possible comments and units of the keyword. Here is one example of using this function: /* Allocate an array of datasets. */ gal_data_t *keysll=gal_data_array_calloc(N); /* Make the array usable as a list too (by setting `next'). */ for(i=0;i<N-1;++i) keysll[i].next=&keysll[i+1]; /* Fill the datasets with a `name' and a `type'. */ keysll[0].name="NAME1"; keysll[0].type=GAL_TYPE_INT32; keysll[1].name="NAME2"; keysll[1].type=GAL_TYPE_STRING; ... ... /* Call this function. */ gal_fits_key_read_from_ptr(fptr, keysll, 0, 0); /* Use the values as you like... */ /* Free all the allocated spaces. Note that `name' was not allocated in this example, so we should explicitly set it to NULL before calling `gal_data_array_free'. */ for(i=0;i<N;++i) keysll[i].name=NULL; gal_data_array_free(keysll, N, 1); If the ‘array’ pointer of each keyword's dataset is not ‘NULL’, then it is assumed that the space to keep the value has already been allocated. If it is ‘NULL’, space will be allocated for the value by this function. Strings need special consideration: the reason is that generally, ‘gal_data_t’ needs to also allow for array of strings (as it supports arrays of integers for example). Hence when reading a string value, two allocations may be done by this function (one if ‘array!=NULL’). Therefore, when using the values of strings after this function, ‘keysll[i].array’ must be interpreted as ‘char **’: one allocation for the pointer, one for the actual characters. If you use something like the example, above you do not have to worry about the freeing, ‘gal_data_array_free’ will free both allocations. So to read a string, one easy way would be the following: char *str, **strarray; strarr = keysll[i].array; str = strarray[0]; If CFITSIO is unable to read a keyword for any reason the ‘status’ element of the respective ‘gal_data_t’ will be non-zero. If it is zero, then the keyword was found and successfully read. Otherwise, it is a CFITSIO status value. You can use CFITSIO's error reporting tools or ‘gal_fits_io_error’ (see *note FITS macros errors filenames::) for reporting the reason of the failure. A tip: when the keyword does not exist, CFITSIO's status value will be ‘KEY_NO_EXIST’. CFITSIO will start searching for the keywords from the last place in the header that it searched for a keyword. So it is much more efficient if the order that you ask for keywords is based on the order they are stored in the header. -- Function: void gal_fits_key_read (char *filename, char *hdu, gal_data_t *keysll, int readcomment, int readunit, char *hdu_option_name) Same as ‘gal_fits_read_keywords_fptr’ (see above), but accepts the filename and HDU as input instead of an already opened CFITSIO ‘fitsfile’ pointer. -- Function: void gal_fits_key_list_add (gal_fits_list_key_t **list, uint8_t type, char *keyname, int kfree, void *value, int vfree, char *comment, int cfree, char *unit, int ufree) Add a keyword to the top of list of header keywords that need to be written into a FITS file. In the end, the keywords will have to be freed, so it is important to know before hand if they were allocated or not (hence the presence of the arguments ending in ‘free’). If the space for the respective element is not allocated, set these arguments to ‘0’ (zero). You can call this function multiple times on a single list add several keys that will be written in one call to ‘gal_fits_key_write’ or ‘gal_fits_key_write_in_ptr’. However, the resulting list will be a last-in-first-out list (for more on lists, see *note Linked lists::). Hence, the written keys will have the inverse order of your calls to this function. To avoid this problem, you can either use ‘gal_fits_key_list_add_end’ instead (which will add each key to the end of the list, not to the top like this function). Alternatively, you can use ‘gal_fits_key_list_reverse’ after adding all the keys with this function. *Important note for strings*: the value should be the pointer to the string its-self (‘char *’), not a pointer to a pointer (‘char **’). -- Function: void gal_fits_key_list_add_end (gal_fits_list_key_t **list, uint8_t type, char *keyname, int kfree, void *value, int vfree, char *comment, int cfree, char *unit, int ufree) Similar to ‘gal_fits_key_list_add’, but add the given keyword to the end of the list, see the description of ‘gal_fits_key_list_add’ for more. Use this function if you want the keywords to be written in the same order that you add nodes to the list of keywords. -- Function: void gal_fits_key_list_title_add (gal_fits_list_key_t **list, char *title, int tfree) Add a special "title" keyword (with the ‘title’ string) to the top of the keywords list. If ‘cfree’ is non-zero, the space allocated for ‘comment’ will be freed immediately after writing the keyword (in another function). -- Function: void gal_fits_key_list_title_add_end (gal_fits_list_key_t **list, char *title, int tfree) Similar to ‘gal_fits_key_list_title_add’, but put the comments at the end of the list. -- Function: void gal_fits_key_list_fullcomment_add (gal_fits_list_key_t **list, char *comment, int fcfree) Add a ‘COMMENT’ keyword to the top of the keywords list. If the comment is longer than 70 characters, CFITSIO will automatically break it into multiple ‘COMMENT’ keywords. If ‘fcfree’ is non-zero, the space allocated for ‘comment’ will be freed immediately after writing the keyword (in another function). -- Function: void gal_fits_key_list_fullcomment_add_end (gal_fits_list_key_t **list, char *comment, int fcfree) Similar to ‘gal_fits_key_list_comment_add’, but put the comments at the end of the list. -- Function: void gal_fits_key_list_add_date (gal_fits_list_key_t **keylist, char *comment) Add a ‘DATE’ keyword to the input list of keywords containing the date this function was activated in the format of ‘YYYY-MM-DDThh:mm:ss’. This function will also add a ‘DATEUTC’ keyword that specifies if the date is in UTC or local time (this depends on CFITSIO being able to detect UTC in the running operating system or not). The comment of the keyword should also be specified as the second argument. The comment is useful to inform users what this date refers to; for example the program starting time, its ending time, or etc. For more, see the description under ‘DATE’ in *note Output FITS files::. -- Function: void gal_fits_key_list_add_software_versions (gal_fits_list_key_t **keylist) Add the version of Gnuastro *note Mandatory dependencies:: to the list of keywords. Each software's keyword has the same name as the software itself (for example ‘GNUASTRO’ or ‘GSL’. For the full list of software, see *note Output FITS files::. -- Function: void gal_fits_key_list_add_git_commit (gal_fits_list_key_t **keylist) If the optional libgit2 dependency is installed and your program is being run in a directory that is under version control, a ‘COMMIT’ keyword will be added on the top of the list of keywords. For more, see the description of ‘COMMIT’ in *note Output FITS files::. -- Function: void gal_fits_key_list_reverse (gal_fits_list_key_t **list) Reverse the input list of keywords. -- Function: void gal_fits_key_write_title_in_ptr (char *title, fitsfile *fptr) Add two lines of "title" keywords to the given CFITSIO ‘fptr’ pointer. The first line will be blank and the second will have the string in ‘title’ roughly in the middle of the line (a fixed distance from the start of the keyword line). A title in the list of keywords helps in classifying the keywords into groups and inspecting them by eye. If ‘title==NULL’, this function will not do anything. -- Function: void gal_fits_key_write_filename (char *keynamebase, char *filename, gal_fits_list_key_t **list, int top1end0, int quiet) Put ‘filename’ into the ‘gal_fits_list_key_t’ list (possibly broken up into multiple keywords) to later write into a HDU header. The ‘keynamebase’ string will be appended with a ‘_N’ (N>0) and used as the keyword name. If ‘top1end0!=0’, then the keywords containing the filename will be added to the top of the list. The FITS standard sets a maximum length of 69 characters for the string values of a keyword(1). This creates problems with file names (which include directories) because file names/addresses can become longer than the maximum number of characters in a FITS keyword (around 70 characters). Therefore, when ‘filename’ is longer than the maximum length of a FITS keyword value, this function will break it into several keywords (breaking up the string on directory separators). So the full file/directory address (including directories) can be longer than 69 characters. However, if a single file or directory name (within a larger address) is longer than 69 characters, this function will truncate the name and print a warning. If ‘quiet!=0’, then the warning will not be printed. -- Function: void gal_fits_key_write_wcsstr (fitsfile *fptr, struct wcsprm wcs, char *wcsstr, int nkeyrec) Write the WCS header string (produced with WCSLIB's ‘wcshdo’ function) into the CFITSIO ‘fitsfile’ pointer. ‘nkeyrec’ is the number of FITS header keywords in ‘wcsstr’. This function will put a few blank keyword lines along with a comment ‘WCS information’ before writing each keyword record. -- Function: void gal_fits_key_write (gal_fits_list_key_t **keylist, char *filename, char *hdu, char *hdu_option_name, int freekeys, int create_fits_not_exists) Write the list of keywords in ‘keylist’ into the ‘hdu’ extension of the file called ‘filename’. If the file may not exist before this function is activated, set ‘create_fits_not_exists’ to non-zero and set the HDU to ‘"0"’. If the keywords should be freed after they are written, set the ‘freekeys’ value to non-zero. For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. The list nodes are meant to be dynamically allocated (because they will be freed after being written). We thus recommend using the ‘gal_fits_key_list_add’ or ‘gal_fits_key_list_add_end’ to create and fill the list. Below is one fully working example of using this function to write a keyword into an existing FITS file. #include <stdio.h> #include <stdlib.h> #include <gnuastro/fits.h> int main() { char *filename="test.fits"; gal_fits_list_key_t *keylist=NULL; char *unit="unit"; float value=123.456; char *keyname="MYKEY"; char *comment="A good description of the key"; gal_fits_key_list_add_end(&keylist, GAL_TYPE_FLOAT32, keyname, 0, &value, 0, comment, 0, unit, 0); gal_fits_key_list_title_add(&keylist, "Matching metadata", 0); gal_fits_key_write(&keylist, filename, "1", "NONE", 1, 0); return EXIT_SUCCESS; } -- Function: void gal_fits_key_write_in_ptr (gal_fits_list_key_t **keylist, fitsfile *fptr, int freekeys) Write the list of keywords in ‘keylist’ into the given CFITSIO ‘fitsfile’ pointer and free keylist. For more on the input ‘keylist’, see the description and example for ‘gal_fits_key_write’, above. -- Function: gal_list_str_t * gal_fits_with_keyvalue (gal_list_str_t *files, char *hdu, char *name, gal_list_str_t *values, char *hdu_option_name) Given a list of FITS file names (‘files’), a certain HDU (‘hdu’), a certain keyword name (‘name’), and a list of acceptable values (‘values’), return the subset of file names where the requested keyword name has one of the acceptable values. For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. -- Function: gal_list_str_t * gal_fits_unique_keyvalues (gal_list_str_t *files, char *hdu, char *name, char *hdu_option_name) Given a list of FITS file names (‘files’), a certain HDU (‘hdu’), a certain keyword name (‘name’), return the list of unique values to that keyword name in all the files. For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. ---------- Footnotes ---------- (1) The limit is actually 71 characters (which is the full 80 character length, subtracted by 8 for the keyword name and one character for the <=>). However, for strings, FITS also requires two single quotes.  File: gnuastro.info, Node: FITS arrays, Next: FITS tables, Prev: FITS header keywords, Up: FITS files 12.3.11.5 FITS arrays (images) .............................. Images (or multi-dimensional arrays in general) are one of the common data formats that is stored in FITS files. Only one image may be stored in each FITS HDU/extension. The functions described here can be used to get the information of, read, or write images in FITS files. -- Function: void gal_fits_img_info (fitsfile *fptr, int *type, size_t *ndim, size_t **dsize, char **name, char **unit) Read the type (see *note Library data types::), number of dimensions, and size along each dimension of the CFITSIO ‘fitsfile’ into the ‘type’, ‘ndim’, and ‘dsize’ pointers respectively. If ‘name’ and ‘unit’ are not ‘NULL’ (point to a ‘char *’), then if the image has a name and units, the respective string will be put in these pointers. -- Function: size_t * gal_fits_img_info_dim (char *filename, char *hdu, size_t *ndim, char *hdu_option_name) Put the number of dimensions in the ‘hdu’ extension of ‘filename’ in the space that ‘ndim’ points to and return the size of the dataset along each dimension as an allocated array with ‘*ndim’ elements. For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. -- Function: gal_data_t * gal_fits_img_read (char *filename, char *hdu, size_t minmapsize, int quietmmap, char *hdu_option_name) Read the contents of the ‘hdu’ extension/HDU of ‘filename’ into a Gnuastro generic data container (see *note Generic data container::) and return it. If the necessary space is larger than ‘minmapsize’, then do not keep the data in RAM, but in a file on the HDD/SSD. For more on ‘minmapsize’ and ‘quietmmap’ see the description under the same name in *note Generic data container::. For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. Note that this function only reads the main data within the requested FITS extension, the WCS will not be read into the returned dataset. To read the WCS, you can use ‘gal_wcs_read’ function as shown below. Afterwards, the ‘gal_data_free’ function will free both the dataset and any WCS structure (if there are any). data=gal_fits_img_read(filename, hdu, -1, 1, NULL); data->wcs=gal_wcs_read(filename, hdu, 0, 0, 0, &data->wcs->nwcs, NULL); -- Function: gal_data_t * gal_fits_img_read_to_type (char *inputname, char *inhdu, uint8_t type, size_t minmapsize, int quietmmap, char *hdu_option_name) Read the contents of the ‘hdu’ extension/HDU of ‘filename’ into a Gnuastro generic data container (see *note Generic data container::) of type ‘type’ and return it. This is just a wrapper around ‘gal_fits_img_read’ (to read the image/array of any type) and ‘gal_data_copy_to_new_type_free’ (to convert it to ‘type’ and free the initially read dataset). See the description there for more. -- Function: gal_data_t * gal_fits_img_read_kernel (char *filename, char *hdu, size_t minmapsize, int quietmmap, char *hdu_option_name) Read the ‘hdu’ of ‘filename’ as a convolution kernel. A convolution kernel must have an odd size along all dimensions, it must not have blank (NaN in floating point types) values and must be flipped around the center to make the proper convolution (see *note Convolution process::). If there are blank values, this function will change the blank values to ‘0.0’. If the input image does not have the other two requirements, this function will abort with an error describing the condition to the user. The finally returned dataset will have a ‘float32’ type. For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. -- Function: fitsfile * gal_fits_img_write_to_ptr (gal_data_t *input, char *filename, gal_fits_list_key_t *keylist, int freekeys) Write the ‘input’ dataset into a FITS file named ‘filename’ and return the corresponding CFITSIO ‘fitsfile’ pointer. This function will not close ‘fitsfile’, so you can still add other extensions to it after this function or make other modifications. In case you want to add keywords into the HDU that contain the data, you can use the second two arguments (see the description of ‘gal_fits_key_write’). These keywords will be written into the HDU before writing the data: when there are more than roughly 5 keywords (assuming your dataset has WCS) and your dataset is large, this can result in significant optimization of the running time (because adding a keyword beyond the 36 key slots will cause the whole data to shift for another block of 36 keywords). -- Function: void gal_fits_img_write (gal_data_t *data, char *filename, gal_fits_list_key_t *keylist, int freekeys) Write the ‘input’ dataset into the FITS file named ‘filename’. Also add the list of header keywords (‘keylist’) to the newly created HDU/extension The list of keywords will be freed after writing into the HDU, if you need them later, keep a separate copy of the list before calling this function. For the importance of why it is better to add your keywords in this function (before writing the data) or after it, see the description of ‘gal_fits_img_write_to_ptr’. -- Function: void gal_fits_img_write_to_type (gal_data_t *data, char *filename, gal_fits_list_key_t *keylist, int type, int freekeys) Convert the ‘input’ dataset into ‘type’, then write it into the FITS file named ‘filename’. Also add the ‘keylist’ keywords to the newly created HDU/extension along with your program's name (‘program_string’). After the FITS file is written, this function will free the copied dataset (with type ‘type’) from memory. For the importance of why it is better to add your keywords in this function (before writing the data) or after it, see the description of ‘gal_fits_img_write_to_ptr’. This is just a wrapper for the ‘gal_data_copy_to_new_type’ and ‘gal_fits_img_write’ functions. -- Function: void gal_fits_img_write_corr_wcs_str (gal_data_t *data, char *filename, char *wcsstr, int nkeyrec, double *crpix, gal_fits_list_key_t *keylist, int freekeys) Write the ‘input’ dataset into ‘filename’ using the ‘wcsstr’ while correcting the ‘CRPIX’ values. For the importance of why it is better to add your keywords in this function (before writing the data) or after it, see the description of ‘gal_fits_img_write_to_ptr’. This function is mainly useful when you want to make FITS files in parallel (from one main WCS structure, with just a differing CRPIX), for more on the arguments, see the description of ‘gal_fits_img_write’. This can happen in the following cases for example: • When a large number of FITS images (with WCS) need to be created in parallel, it can be much more efficient to write the header's WCS keywords once at first, write them in the FITS file, then just correct the CRPIX values. • WCSLIB's header writing function is not thread safe. So when writing FITS images in parallel, we cannot write the header keywords in each thread.  File: gnuastro.info, Node: FITS tables, Prev: FITS arrays, Up: FITS files 12.3.11.6 FITS tables ..................... Tables are one of the common formats of data that is stored in FITS files. Only one table may be stored in each FITS HDU/extension, but each table column must be viewed as a different dataset (with its own name, units and numeric data type for example). The only constraint of the column datasets in a table is that they must be one-dimensional and have the same number of elements as the other columns. The functions described here can be used to get the information of, read, or write columns into FITS tables. -- Function: void gal_fits_tab_size (fitsfile *fitsptr, size_t *nrows, size_t *ncols) Read the number of rows and columns in the table within CFITSIO's ‘fitsptr’. -- Function: int gal_fits_tab_format (fitsfile *fitsptr) Return the format of the FITS table contained in CFITSIO's ‘fitsptr’. Recall that FITS tables can be in binary or ASCII formats. This function will return ‘GAL_TABLE_FORMAT_AFITS’ or ‘GAL_TABLE_FORMAT_BFITS’ (defined in *note Table input output::). If the ‘fitsptr’ is not a table, this function will abort the program with an error message informing the user of the problem. -- Function: gal_data_t * gal_fits_tab_info (char *filename, char *hdu, size_t *numcols, size_t *numrows, int *tableformat, char *hdu_option_name) Store the information of each column in ‘hdu’ of ‘filename’ into an array of data structures with ‘numcols’ elements (one data structure for each column) see *note Arrays of datasets::. The total number of rows in the table is also put into the memory that ‘numrows’ points to. The format of the table (e.g., FITS binary or ASCII table) will be put in ‘tableformat’ (macros defined in *note Table input output::). For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. This function is just for column information. Therefore it only stores meta-data like column name, units and comments. No actual data (contents of the columns for example, the ‘array’ or ‘dsize’ elements) will be allocated by this function. This is a low-level function particular to reading tables in FITS format. To be generic, it is recommended to use ‘gal_table_info’ which will allow getting information from a variety of table formats based on the filename (see *note Table input output::). -- Function: gal_data_t * gal_fits_tab_read (char *filename, char *hdu, size_t numrows, gal_data_t *colinfo, gal_list_sizet_t *indexll, size_t numthreads, size_t minmapsize, int quietmmap, char *hdu_option_name) Read the columns given in the list ‘indexll’ from a FITS table (in ‘filename’ and HDU/extension ‘hdu’) into the returned linked list of data structures, see *note List of size_t:: and *note List of gal_data_t::. For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. Each column will be read independently, therefore they will be read in ‘numthreads’ CPU threads to greatly speed up the reading when there are many columns and rows. However, this only happens if CFITSIO was configured with ‘--enable-reentrant’. This test has been done at Gnuastro's configuration time; if so, ‘GAL_CONFIG_HAVE_FITS_IS_REENTRANT’ will have a value of 1, otherwise, it will have a value of 0. For more on this macro, see *note Configuration information::). If the necessary space for each column is larger than ‘minmapsize’, do not keep it in the RAM, but in a file in the HDD/SSD. For more on ‘minmapsize’ and ‘quietmmap’, see the description under the same name in *note Generic data container::. Each column will have ‘numrows’ rows and ‘colinfo’ contains any further information about the columns (returned by ‘gal_fits_tab_info’, described above). Note that this is a low-level function, so the output data linked list is the inverse of the input indexes linked list. It is recommended to use ‘gal_table_read’ for generic reading of tables, see *note Table input output::. -- Function: void gal_fits_tab_write (gal_data_t *cols, gal_list_str_t *comments, int tableformat, char *filename, char *extname, gal_fits_list_key_t *keywords, int freekeys) Write the list of datasets in ‘cols’ (see *note List of gal_data_t::) as separate columns in a FITS table in ‘filename’. If ‘filename’ already exists then this function will write the table as a new extension called ‘extname’, after all existing ones. The format of the table (ASCII or binary) may be specified with the ‘tableformat’ (see *note Table input output::). If ‘comments!=NULL’, each node of the list of strings will be written as a ‘COMMENT’ keywords in the output FITS file (see *note List of strings::. In case your table needs metadata keywords, you can use the ‘listkeys’ and ‘freekeys’. For more on these, see the description of ‘gal_fits_key_write_in_ptr’. This is a low-level function for tables. It is recommended to use ‘gal_table_write’ for generic writing of tables in a variety of formats, see *note Table input output::.  File: gnuastro.info, Node: File input output, Next: World Coordinate System, Prev: FITS files, Up: Gnuastro library 12.3.12 File input output ------------------------- The most commonly used file format in astronomical data analysis is the FITS format (see *note Fits:: for an introduction), therefore Gnuastro's library provides a large and separate collection of functions to read/write data from/to them (see *note FITS files::). However, FITS is not well recognized outside the astronomical community and cannot be imported into documents or slides. Therefore, in this section, we discuss the other different file formats that Gnuastro's library recognizes. * Menu: * Text files:: Reading and writing from/to plain text files. * TIFF files:: Reading and writing from/to TIFF files. * JPEG files:: Reading and writing from/to JPEG files. * EPS files:: Writing to EPS files. * PDF files:: Writing to PDF files.  File: gnuastro.info, Node: Text files, Next: TIFF files, Prev: File input output, Up: File input output 12.3.12.1 Text files (‘txt.h’) .............................. The most universal and portable format for data storage are plain text files. They can be viewed and edited on any text editor or even on the command-line. This section are describes some functions that help in reading from and writing to plain text files. Lines are one of the most basic building blocks (delimiters) of a text file. Some operating systems like Microsoft Windows, terminate their ASCII text lines with a carriage return character and a new-line character (two characters, also known as CRLF line terminators). While Unix-like operating systems just use a single new-line character. The functions below that read an ASCII text file are able to identify lines with both kinds of line terminators. Gnuastro defines a simple format for metadata of table columns in a plain text file that is discussed in *note Gnuastro text table format::. The functions to get information from, read from and write to plain text files also follow those conventions. -- Macro: GAL_TXT_LINESTAT_INVALID -- Macro: GAL_TXT_LINESTAT_BLANK -- Macro: GAL_TXT_LINESTAT_COMMENT -- Macro: GAL_TXT_LINESTAT_DATAROW Status codes for lines in a plain text file that are returned by ‘gal_txt_line_stat’. Lines which have a <#> character as their first non-white character are considered to be comments. Lines with nothing but white space characters are considered blank. The remaining lines are considered as containing data. -- Function: int gal_txt_line_stat (char *line) Check the contents of ‘line’ and see if it is a blank, comment, or data line. The returned values are the macros that start with ‘GAL_TXT_LINESTAT’. -- Function: char * gal_txt_trim_space (char *str) Trim the white space characters before and after the given string. The operation is done within the allocated space of the string, so if you need the string untouched, please pass an allocated copy of the string to this function. The returned pointer is within the input string. If the input pointer is ‘NULL’, or the string only has white-space characters, the returned pointer will be ‘NULL’. -- Function: int gal_txt_contains_string (char *full, char *match) Return 1 if the string that ‘match’ points to, can be exactly found within the string that ‘full’ points to (character by character). The to-match string can be in any part of the full string. If any of the two strings have zero length or are a ‘NULL’ pointer, this function will return 0. -- Function: gal_data_t * gal_txt_table_info (char *filename, gal_list_str_t *lines, size_t *numcols, size_t *numrows) Store the information of each column in a text file ‘filename’, or list of strings (‘lines’) into an array of data structures with ‘numcols’ elements (one data structure for each column) see *note Arrays of datasets::. The total number of rows in the table is also put into the memory that ‘numrows’ points to. ‘lines’ is a list of strings with each node representing one line (including the new-line character), see *note List of strings::. It will mostly be the output of ‘gal_txt_stdin_read’, which is used to read the program's input as separate lines from the standard input (see below). Note that ‘filename’ and ‘lines’ are mutually exclusive and one of them must be ‘NULL’. This function is just for column information. Therefore it only stores meta-data like column name, units and comments. No actual data (contents of the columns for example, the ‘array’ or ‘dsize’ elements) will be allocated by this function. This is a low-level function particular to reading tables in plain text format. To be generic, it is recommended to use ‘gal_table_info’ which will allow getting information from a variety of table formats based on the filename (see *note Table input output::). -- Function: gal_data_t * gal_txt_table_read (char *filename, gal_list_str_t *lines, size_t numrows, gal_data_t *colinfo, gal_list_sizet_t *indexll, size_t minmapsize, int quietmmap) Read the columns given in the list ‘indexll’ from a plain text file (‘filename’) or list of strings (‘lines’), into a linked list of data structures (see *note List of size_t:: and *note List of gal_data_t::). If the necessary space for each column is larger than ‘minmapsize’, do not keep it in the RAM, but in a file on the HDD/SSD. For more one ‘minmapsize’ and ‘quietmmap’, see the description under the same name in *note Generic data container::. ‘lines’ is a list of strings with each node representing one line (including the new-line character), see *note List of strings::. It will mostly be the output of ‘gal_txt_stdin_read’, which is used to read the program's input as separate lines from the standard input (see below). Note that ‘filename’ and ‘lines’ are mutually exclusive and one of them must be ‘NULL’. Note that this is a low-level function, so the output data list is the inverse of the input indices linked list. It is recommended to use ‘gal_table_read’ for generic reading of tables in any format, see *note Table input output::. -- Function: gal_data_t * gal_txt_image_read (char *filename, gal_list_str_t *lines, size_t minmapsize, int quietmmap) Read the 2D plain text dataset in file (‘filename’) or list of strings (‘lines’) into a dataset and return the dataset. If the necessary space for the image is larger than ‘minmapsize’, do not keep it in the RAM, but in a file on the HDD/SSD. For more on ‘minmapsize’ and ‘quietmmap’, see the description under the same name in *note Generic data container::. ‘lines’ is a list of strings with each node representing one line (including the new-line character), see *note List of strings::. It will mostly be the output of ‘gal_txt_stdin_read’, which is used to read the program's input as separate lines from the standard input (see below). Note that ‘filename’ and ‘lines’ are mutually exclusive and one of them must be ‘NULL’. -- Function: gal_list_str_t * gal_txt_stdin_read (long timeout_microsec) Read the complete standard input and return a list of strings with each line (including the new-line character) as one node of that list. If the standard input is already filled (for example, connected to another program's output with a pipe), then this function will parse the whole stream. If Standard input is not pre-configured and the _first line_ is typed/written in the terminal before ‘timeout_microsec’ micro-seconds, it will continue parsing until reaches an end-of-file character (<CTRL-D> after a new-line on the keyboard) with no time limit. If nothing is entered before ‘timeout_microsec’ micro-seconds, it will return ‘NULL’. All the functions that can read plain text tables will accept a filename as well as a list of strings (intended to be the output of this function for using Standard input). The reason for keeping the standard input is that once something is read from the standard input, it is hard to put it back. We often need to read a text file several times: once to count how many columns it has and which ones are requested, and another time to read the desired columns. So it easier to keep it all in allocated memory and pass it on from the start for each round. -- Function: gal_list_str_t * gal_txt_read_to_list (char *filename) Read the contents of the given plain-text file and put each word (separated by a SPACE character, into a new node of the output list. The order of nodes in the output is the same as the input. Any new-line character at the end of a word is removed in the output list. -- Function: void gal_txt_write (gal_data_t *cols, struct gal_fits_list_key_t **keylist, gal_list_str_t *comment, char *filename, uint8_t colinfoinstdout, int tab0_img1, int freekeys) Write ‘cols’ in a plain text file ‘filename’ (table when ‘tab0_img1==0’ and image when ‘tab0_img1==1’). ‘cols’ may have one or two dimensions which determines the output: 1D ‘cols’ is treated as a column and a list of datasets (see *note List of gal_data_t::): every node in the list is written as one column in a table. 2D ‘cols’ is a two dimensional array, it cannot be treated as a list (only one 2D array can currently be written to a text file). So if ‘cols->next!=NULL’ the next nodes in the list are ignored and will not be written. This is a low-level function for tables. It is recommended to use ‘gal_table_write’ for generic writing of tables in a variety of formats, see *note Table input output::. It is possible to add two types of metadata to the printed table: comments and keywords. Each string in the list given to ‘comments’ will be printed into the file as a separate line, starting with ‘#’. Keywords have a more specific and computer-parsable format and are passed through ‘keylist’. Each keyword is also printed in one line, but with the format below. Because of the various components in a keyword, it is thus necessary to use the ‘gal_fits_list_key_t’ data structure. For more, see *note FITS header keywords::. # [key] NAME: VALUE / [UNIT] KEYWORD COMMENT. If ‘filename’ already exists this function will abort with an error and will not write over the existing file. Before calling this function make sure if the file exists or not. If ‘comments!=NULL’, a ‘#’ will be put at the start of each node of the list of strings and will be written in the file before the column meta-data in ‘filename’ (see *note List of strings::). When ‘filename==NULL’, the column information will be printed on the standard output (command-line). When ‘colinfoinstdout!=0’ and ‘filename==NULL’ (columns are printed in the standard output), the dataset metadata will also printed in the standard output. When printing to the standard output, the column information can be piped into another program for further processing and thus the meta-data (lines starting with a ‘#’) must be ignored. In such cases, you only print the column values by passing ‘0’ to ‘colinfoinstdout’.  File: gnuastro.info, Node: TIFF files, Next: JPEG files, Prev: Text files, Up: File input output 12.3.12.2 TIFF files (‘tiff.h’) ............................... Outside of astronomy, the TIFF standard is arguably the most commonly used format to store high-precision data/images. Unlike FITS however, the TIFF standard only supports images (not tables), but like FITS, it has support for all standard data types (see *note Numeric data types::) which is the primary reason other fields use it. Another similarity of the TIFF and FITS standards is that TIFF supports multiple images in one file. The TIFF standard calls each one of these images (and their accompanying meta-data) a 'directory' (roughly equivalent to the FITS extensions). Unlike FITS however, the directories can only be identified by their number (counting from zero), recall that in FITS you can also use the extension name to identify it. The functions described here allow easy reading (and later writing) of TIFF files within Gnuastro or for users of Gnuastro's libraries. Currently only reading is supported, but if you are interested, please get in touch with us. -- Function: int gal_tiff_name_is_tiff (char *name) Return ‘1’ if ‘name’ has a TIFF suffix. This can be used to make sure that a given input file is TIFF. See ‘gal_tiff_suffix_is_tiff’ for a list of recognized suffixes. -- Function: int gal_tiff_suffix_is_tiff (char *name) Return ‘1’ if ‘suffix’ is a recognized TIFF suffix. The recognized suffixes are ‘tif’, ‘tiff’, ‘TIFF’ and ‘TIFF’. -- Function: size_t gal_tiff_dir_string_read (char *string) Return the number within ‘string’ as a ‘size_t’ number to identify a TIFF directory. Note that the directories start counting from zero. -- Function: gal_data_t * gal_tiff_read (char *filename, size_t dir, size_t minmapsize, int quietmmap) Read the ‘dir’ directory within the TIFF file ‘filename’ and return the contents of that TIFF directory as ‘gal_data_t’. If the directory's image contains multiple channels, the output will be a list (see *note List of gal_data_t::). -- Function: void gal_tiff_write (gal_data_t *in, char *filename, int widthinpx, int heightinpix, int bitspersample, int numimg) Write the given dataset (‘in’) into ‘filename’ (a TIFF file) with the specified image width in pixels (‘widthinpix’),height in pixels (‘heightinpix’), bits per sample (‘bitspersample’), and number of images (‘numimg’).  File: gnuastro.info, Node: JPEG files, Next: EPS files, Prev: TIFF files, Up: File input output 12.3.12.3 JPEG files (‘jpeg.h’) ............................... The JPEG file format is one of the most common formats for storing and transferring images, recognized by almost all image rendering and processing programs. In particular, because of its lossy compression algorithm, JPEG files can have low volumes, making it used heavily on the internet. For more on this file format, and a comparison with others, please see *note Recognized file formats::. For scientific purposes, the lossy compression and very limited dynamic range (8-bit integers) make JPEG very unattractive for storing of valuable data. However, because of its commonality, it will inevitably be needed in some situations. The functions here can be used to read and write JPEG images into Gnuastro's *note Generic data container::. If the JPEG file has more than one color channel, each channel is treated as a separate node in a list of datasets (see *note List of gal_data_t::). -- Function: int gal_jpeg_name_is_jpeg (char *name) Return ‘1’ if ‘name’ has a JPEG suffix. This can be used to make sure that a given input file is JPEG. See ‘gal_jpeg_suffix_is_jpeg’ for a list of recognized suffixes. -- Function: int gal_jpeg_suffix_is_jpeg (char *name) Return ‘1’ if ‘suffix’ is a recognized JPEG suffix. The recognized suffixes are ‘.jpg’, ‘.JPG’, ‘.jpeg’, ‘.JPEG’, ‘.jpe’, ‘.jif’, ‘.jfif’ and ‘.jfi’. -- Function: gal_data_t * gal_jpeg_read (char *filename, size_t minmapsize, int quietmmap) Read the JPEG file ‘filename’ and return the contents as ‘gal_data_t’. If the directory's image contains multiple colors/channels, the output will be a list with one node per color/channel (see *note List of gal_data_t::). -- Function: void gal_jpeg_write (gal_data_t *in, char *filename, uint8_t quality, float widthincm) Write the given dataset (‘in’) into ‘filename’ (a JPEG file). If ‘in’ is a list, then each node in the list will be a color channel, therefore there can only be 1, 3 or 4 nodes in the list. If the number of nodes is different, then this function will abort the program with a message describing the cause. The lossy JPEG compression level can be set through ‘quality’ which is a value between 0 and 100 (inclusive, 100 being the best quality). The display width of the JPEG file in units of centimeters (to suggest to viewers/users, only a meta-data) can be set through ‘widthincm’.  File: gnuastro.info, Node: EPS files, Next: PDF files, Prev: JPEG files, Up: File input output 12.3.12.4 EPS files (‘eps.h’) ............................. The Encapsulated PostScript (EPS) format is commonly used to store images (or individual/single-page parts of a document) in the PostScript documents. For a more complete introduction, please see *note Recognized file formats::. To provide high quality graphics, the Postscript language is a vectorized format, therefore pixels (elements of a "rasterized" format) are not defined in their context. To display rasterized images, PostScript does allow arrays of pixels. However, since the over-all EPS file may contain many vectorized elements (for example, borders, text, or other lines over the text) and interpreting them is not trivial or necessary within Gnuastro's scope, Gnuastro only provides some functions to write a dataset (in the ‘gal_data_t’ format, see *note Generic data container::) into EPS. -- Macro: GAL_EPS_MARK_COLNAME_TEXT -- Macro: GAL_EPS_MARK_COLNAME_FONT -- Macro: GAL_EPS_MARK_COLNAME_XPIX -- Macro: GAL_EPS_MARK_COLNAME_YPIX -- Macro: GAL_EPS_MARK_COLNAME_SHAPE -- Macro: GAL_EPS_MARK_COLNAME_COLOR -- Macro: GAL_EPS_MARK_COLNAME_SIZE1 -- Macro: GAL_EPS_MARK_COLNAME_SIZE2 -- Macro: GAL_EPS_MARK_COLNAME_ROTATE -- Macro: GAL_EPS_MARK_COLNAME_FONTSIZE -- Macro: GAL_EPS_MARK_COLNAME_LINEWIDTH Name of column that the required property will be read from. -- Macro: GAL_EPS_MARK_DEFAULT_SHAPE -- Macro: GAL_EPS_MARK_DEFAULT_COLOR -- Macro: GAL_EPS_MARK_DEFAULT_SIZE1 -- Macro: GAL_EPS_MARK_DEFAULT_SIZE2 -- Macro: GAL_EPS_MARK_DEFAULT_SIZE2_ELLIPSE -- Macro: GAL_EPS_MARK_DEFAULT_ROTATE -- Macro: GAL_EPS_MARK_DEFAULT_LINEWIDTH -- Macro: GAL_EPS_MARK_DEFAULT_FONT -- Macro: GAL_EPS_MARK_DEFAULT_FONTSIZE Default values for the various mark properties. These constants will be used if the caller has not provided any of the given property. -- Function: int gal_eps_name_is_eps (char *name) Return ‘1’ if ‘name’ has an EPS suffix. This can be used to make sure that a given input file is EPS. See ‘gal_eps_suffix_is_eps’ for a list of recognized suffixes. -- Function: int gal_eps_suffix_is_eps (char *name) Return ‘1’ if ‘suffix’ is a recognized EPS suffix. The recognized suffixes are ‘.eps’, ‘.EPS’, ‘.epsf’, ‘.epsi’. -- Function: void gal_eps_to_pt (float widthincm, size_t *dsize, size_t *w_h_in_pt) Given a specific width in centimeters (‘widthincm’ and the number of he dataset's pixels in each dimension (‘dsize’) calculate the size of he output in PostScript points. The output values are written in the ‘w_h_in_pt’ array (which has to be allocated before calling this unction). The first element in ‘w_h_in_pt’ is the width and the second is the height of the image. -- Function: uint8_t gal_eps_shape_name_to_id (char *name) Return the shape ID of a mark from its name (which is not case-sensitive). -- Function: uint8_t gal_eps_shape_id_to_name (uint8_t id) Return the shape name from its ID. -- Function: void gal_eps_write (gal_data_t *in, char *filename, float widthincm, uint32_t borderwidth, uint8_t bordercolor, int hex, int dontoptimize, int forps, gal_data_t *marks) Write the ‘in’ dataset into an EPS file called ‘filename’. ‘in’ has to be an unsigned 8-bit character type ‘GAL_TYPE_UINT8’, see *note Numeric data types::). The desired width of the image in human/non-pixel units can be set with he ‘widthincm’ argument. If ‘borderwidth’ is non-zero, it is interpreted as the width (in points) of a solid black border around the mage. A border can helpful when importing the EPS file into a document. The color of the border can be set with ‘bordercolor’, use the macros in *note Color functions::. If ‘forpdf’ is not zero, the output can be imported into a Postscript file directly (not as an "encapsulated" postscript, which is the default). EPS files are plain-text (can be opened/edited in a text editor), therefore there are different encodings to store the data (pixel values) within them. Gnuastro supports the Hexadecimal and ASCII85 encoding. ASCII85 is more efficient (producing small file sizes), so it is the default encoding. To use Hexadecimal encoding, set ‘hex’ to a non-zero value. By default, when the dataset only has two values, this function will use the PostScript optimization that allows setting the pixel values per bit, not byte (*note Recognized file formats::). This can greatly help reduce the file size. However, when ‘dontoptimize!=0’, this optimization is disabled: even though there are only two values (is binary), the difference between them does not correspond to the full contrast of black and white. If ‘marks!=NULL’, it is assumed to contain multiple columns of information to draw marks over the background image. The multiple columns are a linked list of 1D ‘gal_data_t’ of the same size (number of rows) that are connected to each other through the ‘next’ element (this is the same format that Gnuastro's library uses for tables, see *note Table input output:: or *note Library demo - reading and writing table columns::). The macros defined above that have the format of ‘GAL_EPS_MARK_COLNAME_*’ show all the possible columns that you can provide in this linked list. Only the two coordinate columns are mandatory (‘GAL_EPS_MARK_COLNAME_XPIX’ and ‘GAL_EPS_MARK_COLNAME_YPIX’. If any of the other properties is not in the linked list, then the default properties of the ‘GAL_EPS_MARK_DEFAULT_*’ macros will be used (also defined above. The columns are identified based on the ‘name’ element of Gnuastro's generic data structure (see *note Generic data container::). The names must have the pre-defined names of the ‘GAL_EPS_MARK_COLNAME_*’ macros (case sensitive). Therefore, the order of columns in the list is irrelevant!  File: gnuastro.info, Node: PDF files, Prev: EPS files, Up: File input output 12.3.12.5 PDF files (‘pdf.h’) ............................. The portable document format (PDF) has arguably become the most common format used for distribution of documents. In practice, a PDF file is just a compiled PostScript file. For a more complete introduction, please see *note Recognized file formats::. To provide high quality graphics, the PDF is a vectorized format, therefore pixels (elements of a "rasterized" format) are not defined in their context. As a result, similar to *note EPS files::, Gnuastro only writes datasets to a PDF file, not vice-versa. -- Function: int gal_pdf_name_is_pdf (char *name) Return ‘1’ if ‘name’ has an PDF suffix. This can be used to make sure that a given input file is PDF. See ‘gal_pdf_suffix_is_pdf’ for a list of recognized suffixes. -- Function: int gal_pdf_suffix_is_pdf (char *name) Return ‘1’ if ‘suffix’ is a recognized PDF suffix. The recognized suffixes are ‘.pdf’ and ‘.PDF’. -- Function: void gal_pdf_write (gal_data_t *in, char *filename, float widthincm, uint32_t borderwidth, uint8_t bordercolor, int dontoptimize, gal_data_t *marks) Write the ‘in’ dataset into an EPS file called ‘filename’. ‘in’ has to be an unsigned 8-bit character type (‘GAL_TYPE_UINT8’, see *note Numeric data types::). The desired width of the image in human/non-pixel units can be set with the ‘widthincm’ argument. If ‘borderwidth’ is non-zero, it is interpreted as the width (in points) of a solid black border around the image. A border can helpful when importing the PDF file into a document. The color of the border can be set with ‘bordercolor’, use the macros in *note Color functions::. This function is just a wrapper for the ‘gal_eps_write’ function in *note EPS files::. After making the EPS file, Ghostscript (with a version of 9.10 or above, see *note Optional dependencies::) will be used to compile the EPS file to a PDF file. Therefore if Ghostscript does not exist, does not have the proper version, or fails for any other reason, the EPS file will remain. It can be used to find the cause, or use another converter or PostScript compiler. By default, when the dataset only has two values, this function will use the PostScript optimization that allows setting the pixel values per bit,not byte (*note Recognized file formats::). This can greatly help reduce the file size. However, when ‘dontoptimize!=0’, this optimization is disabled: even though there are only two values (is binary), the difference between them does not correspond to the full contrast of black and white. If ‘marks!=NULL’, it is assumed to contain information on how to draw marks over the image. This is directly fed to the ‘gal_eps_write’ function, so for more on how to provide the mark information, see the description of ‘gal_eps_write’ in *note EPS files::.  File: gnuastro.info, Node: World Coordinate System, Next: Arithmetic on datasets, Prev: File input output, Up: Gnuastro library 12.3.13 World Coordinate System (‘wcs.h’) ----------------------------------------- The FITS standard defines the world coordinate system (WCS) as a mechanism to associate physical values to positions within a dataset. For example, it can be used to convert pixel coordinates in an image to celestial coordinates like the right ascension and declination. The functions in this section are mainly just wrappers over CFITSIO, WCSLIB and GSL library functions to help in common applications. [*Tread safety*] Since WCSLIB version 5.18 (released in January 2018), most WCSLIB functions are thread safe(1). Gnuastro has high-level functions to easily spin-off threads and speed up your programs. For a fully working example see *note Library demo - multi-threaded operation::. However you still need to be cautious in the following scenarios below. • Many users or operating systems may still use an older version. • The ‘wcsprm’ structure of WCSLIB is not thread-safe: you can't use the same pointer on multiple threads. For example, if you use ‘gal_wcs_img_to_world’ simultaneously on multiple threads, you shouldn't pass the same ‘wcsprm’ structure pointer. You can use ‘gal_wcs_copy’ to keep and use separate copies the main structure within each thread, and later free the copies with ‘gal_wcs_free’. The full set of functions and global constants that are defined by Gnuastro's ‘gnuastro/wcs.h’ are described below. -- Global integer: GAL_WCS_DISTORTION_TPD -- Global integer: GAL_WCS_DISTORTION_SIP -- Global integer: GAL_WCS_DISTORTION_TPV -- Global integer: GAL_WCS_DISTORTION_DSS -- Global integer: GAL_WCS_DISTORTION_WAT -- Global integer: GAL_WCS_DISTORTION_INVALID Gnuastro identifiers of the various WCS distortion conventions, for more, see Calabretta et al. (2004, preprint)(2). Among these, SIP is a prior distortion, the rest other are sequent distortions. TPD is a superset of all these, hence it has both prior and sequeal distortion coefficients. More information is given in the documentation of ‘dis.h’, from the WCSLIB manual(3). -- Global integer: GAL_WCS_COORDSYS_EQB1950 -- Global integer: GAL_WCS_COORDSYS_EQJ2000 -- Global integer: GAL_WCS_COORDSYS_ECB1950 -- Global integer: GAL_WCS_COORDSYS_ECJ2000 -- Global integer: GAL_WCS_COORDSYS_GALACTIC -- Global integer: GAL_WCS_COORDSYS_SUPERGALACTIC -- Global integer: GAL_WCS_COORDSYS_INVALID Recognized WCS coordinate systems in Gnuastro. ‘EQ’ and ‘EC’ stand for the EQuatorial and ECliptic coordinate systems. In the equatorial and ecliptic coordinates, ‘B1950’ stands for the Besselian 1950 epoch and ‘J2000’ stands for the Julian 2000 epoch. -- Global integer: GAL_WCS_LINEAR_MATRIX_PC -- Global integer: GAL_WCS_LINEAR_MATRIX_CD -- Global integer: GAL_WCS_LINEAR_MATRIX_INVALID Identifiers of the linear transformation matrix: either in the ‘PCi_j’ or the ‘CDi_j’ formalism. For more, see the description of ‘--wcslinearmatrix’ in *note Input output options::. -- Global integer: GAL_WCS_PROJECTION_AZP -- Global integer: GAL_WCS_PROJECTION_SZP -- Global integer: GAL_WCS_PROJECTION_TAN -- Global integer: GAL_WCS_PROJECTION_STG -- Global integer: GAL_WCS_PROJECTION_SIN -- Global integer: GAL_WCS_PROJECTION_ARC -- Global integer: GAL_WCS_PROJECTION_ZPN -- Global integer: GAL_WCS_PROJECTION_ZEA -- Global integer: GAL_WCS_PROJECTION_AIR -- Global integer: GAL_WCS_PROJECTION_CYP -- Global integer: GAL_WCS_PROJECTION_CEA -- Global integer: GAL_WCS_PROJECTION_CAR -- Global integer: GAL_WCS_PROJECTION_MER -- Global integer: GAL_WCS_PROJECTION_SFL -- Global integer: GAL_WCS_PROJECTION_PAR -- Global integer: GAL_WCS_PROJECTION_MOL -- Global integer: GAL_WCS_PROJECTION_AIT -- Global integer: GAL_WCS_PROJECTION_COP -- Global integer: GAL_WCS_PROJECTION_COE -- Global integer: GAL_WCS_PROJECTION_COD -- Global integer: GAL_WCS_PROJECTION_COO -- Global integer: GAL_WCS_PROJECTION_BON -- Global integer: GAL_WCS_PROJECTION_PCO -- Global integer: GAL_WCS_PROJECTION_TSC -- Global integer: GAL_WCS_PROJECTION_CSC -- Global integer: GAL_WCS_PROJECTION_QSC -- Global integer: GAL_WCS_PROJECTION_HPX -- Global integer: GAL_WCS_PROJECTION_XPH The various types of recognized FITS WCS projections; for more details see *note Align pixels with WCS considering distortions::. -- Macro: GAL_WCS_FLTERROR Limit of rounding for floating point errors. -- Function: int gal_wcs_distortion_name_to_id (char *name) Convert the given string (assumed to be a FITS-standard, string-based distortion identifier) to a Gnuastro's integer-based distortion identifier (one of the ‘GAL_WCS_DISTORTION_*’ macros defined above). The sting-based distortion identifiers have three characters and are all in capital letters. -- Function: int gal_wcs_distortion_name_from_id (int id) Convert the given Gnuastro integer-based distortion identifier (one of the ‘GAL_WCS_DISTORTION_*’ macros defined above) to the string-based distortion identifier) of the FITS standard. The sting-based distortion identifiers have three characters and are all in capital letters. -- Function: int gal_wcs_coordsys_name_to_id (char *name) Convert the given string to Gnuastro's integer-based WCS coordinate system identifier (one of the ‘GAL_WCS_COORDSYS_*’, listed above). The expected strings can be seen in the description of the ‘--wcscoordsys’ option of the Fits program, see *note Keyword inspection and manipulation::. -- Function: int gal_wcs_distortion_name_to_id (char *name) Convert the given string (assumed to be a FITS-standard, string-based distortion identifier) to a Gnuastro's integer-based distortion identifier (one of the ‘GAL_WCS_DISTORTION_*’ macros defined above). The sting-based distortion identifiers have three characters and are all in capital letters. -- Function: int gal_wcs_projection_name_from_id (int id) Convert the given Gnuastro integer-based projection identifier (one of the ‘GAL_WCS_PROJECTION_*’ macros defined above) to the string-based distortion identifier) of the FITS standard. The string-based projection identifiers have three characters and are all in capital letters. For a description of the various projections, see *note Align pixels with WCS considering distortions::. -- Function: int gal_wcs_projection_name_to_id (char *name) Convert the given string (assumed to be a FITS-standard, string-based projection identifier) to a Gnuastro's integer-based projection identifier (one of the ‘GAL_WCS_PROJECTION_*’ macros defined above). The string-based projection identifiers have three characters and are all in capital letters. For a description of the various projections, see *note Align pixels with WCS considering distortions::. -- Function: struct wcsprm * gal_wcs_create (double *crpix, double *crval, double *cdelt, double *pc, char **cunit, char **ctype, size_t ndim, int linearmatrix) Given all the most common standard components of the WCS standard, construct a ‘struct wcsprm’, initialize and set it for future processing. See the FITS WCS standard for more on these keywords. All the arrays must have ‘ndim’ elements with them except for ‘pc’ which should have ‘ndim*ndim’ elements (a square matrix). Also, ‘cunit’ and ‘ctype’ are arrays of strings. If ‘GAL_WCS_LINEAR_MATRIX_CD’ is passed to ‘linearmatrix’ then the output WCS structure will have a CD matrix (even though you have given a PC and CDELT matrix as input to this function). Otherwise, the output will have a PC and CDELT matrix (which is the recommended format by WCSLIB). #include <stdio.h> #include <stdlib.h> #include <gnuastro/wcs.h> int main(void) { int status; size_t ndim=2; struct wcsprm *wcs; double crpix[]={50, 50}; double pc[]={-1, 0, 0, 1}; double cdelt[]={0.4, 0.4}; double crval[]={178.23, 36.98}; char *cunit[]={"deg", "deg"}; char *ctype[]={"RA---TAN", "DEC--TAN"}; int linearmatrix = GAL_WCS_LINEAR_MATRIX_PC; /* Allocate and fill the 'wcsprm' structure. */ wcs=gal_wcs_create(crpix, crval, cdelt, pc, cunit, ctype, ndim, linearmatrix); printf("WCS structure created.\n"); /*... Add any operation with the WCS structure here ...*/ /* Free the WCS structure. */ gal_wcs_free(wcs); printf("WCS structure freed.\n"); /* Return successfully. */ return EXIT_SUCCESS; } -- Function: struct wcsprm * gal_wcs_read_fitsptr (fitsfile *fptr, int linearmatrix, size_t hstartwcs, size_t hendwcs, int *nwcs) Return the WCSLIB ‘wcsprm’ structure that is read from the CFITSIO ‘fptr’ pointer to an opened FITS file. With older WCSLIB versions (in particular below version 5.18) this function may not be thread-safe. Also put the number of coordinate representations found into the space that ‘nwcs’ points to. To read the WCS structure directly from a filename, see ‘gal_wcs_read’ below. After processing has finished, you should free the WCS structure that this function returns with ‘gal_wcs_free’. The ‘linearmatrix’ argument takes one of three values: ‘0’, ‘GAL_WCS_LINEAR_MATRIX_PC’ and ‘GAL_WCS_LINEAR_MATRIX_CD’. It will determine the format of the WCS when it is later written to file with ‘gal_wcs_write’ or ‘gal_wcs_write_in_fitsptr’ (which is called by ‘gal_fits_img_write’) So if you do not want to write the WCS into a file later, just give it a value of ‘0’. For more on the difference between these modes, see the description of ‘--wcslinearmatrix’ in *note Input output options::. If you do not want to search the full FITS header for WCS-related FITS keywords (for example, due to conflicting keywords), but only a specific range of the header keywords you can use the ‘hstartwcs’ and ‘hendwcs’ arguments to specify the keyword number range (counting from zero). If ‘hendwcs’ is larger than ‘hstartwcs’, then only keywords in the given range will be checked. Hence, to ignore this feature (and search the full FITS header), give both these arguments the same value. If the WCS information could not be read from the FITS file, this function will return a ‘NULL’ pointer and put a zero in ‘nwcs’. A WCSLIB error message will also be printed in ‘stderr’ if there was an error. This function is just a wrapper over WCSLIB's ‘wcspih’ function which is not thread-safe. Therefore, be sure to not call this function simultaneously (over multiple threads). -- Function: struct wcsprm * gal_wcs_read (char *filename, char *hdu, int linearmatrix, size_t hstartwcs, size_t hendwcs, int *nwcs, char *hdu_option_name) [*Not thread-safe*] Return the WCSLIB structure that is read from the HDU/extension ‘hdu’ of the file ‘filename’. Also put the number of coordinate representations found into the space that ‘nwcs’ points to. Please see ‘gal_wcs_read_fitsptr’ for more. For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. After processing has finished, you should free the WCS structure that this function returns with ‘gal_wcs_free’. -- Function: void gal_wcs_free (struct wcsprm *wcs) Free the contents _and_ the space that ‘wcs’ points to. WCSLIB's ‘wcsfree’ function only frees the contents of the ‘wcsprm’ structure, not the actual pointer. However, Gnuastro's ‘wcsprm’ creation and reading functions allocate the structure also. This higher-level function therefore simplifies the processing. A complete working example is given in the description of ‘gal_wcs_create’. -- Function: char * gal_wcs_dimension_name (struct wcsprm *wcs, size_t dimension) Return an allocated string array (that should be freed later) containing the first part of the ‘CTYPEi’ FITS keyword (which contains the dimension name in the FITS standard). For example, if ‘CTYPE1’ is ‘RA---TAN’, the string that function returns will be ‘RA’. Recall that the second component of ‘CTYPEi’ contains the type of projection. -- Function: char * gal_wcs_write_wcsstr (struct wcsprm *wcs, int *nkeyrec) Return an allocated string which contains the respective FITS keywords for the given WCS structure into it. The number of keywords is written in the space pointed by ‘nkeyrec’. Each FITS keyword is 80 characters wide (according to the FITS standard), and the next one is placed immediately after it, so the full string has ‘80*nkeyrec’ bytes. The output of this function can later be written into an opened FITS file using ‘gal_fits_key_write_wcsstr’ (see *note FITS header keywords::). -- Function: void gal_wcs_write (struct wcsprm *wcs, char *filename, char *extname, gal_fits_list_key_t *keylist, int freekeys) Write the given WCS structure into the second extension of an empty FITS header. The first/primary extension will be empty like the default format of all Gnuastro outputs. When ‘extname!=NULL’ it will be used as the FITS extension name. Any set of extra headers can also be written through the ‘keylist’ list. If ‘freekeys!=0’ then the list of keywords will be freed after they are written. -- Function: void gal_wcs_write_in_fitsptr (fitsfile *fptr, struct wcsprm *wcs) Convert the input ‘wcs’ structure (keeping the WCS programmatically) into FITS keywords and write them into the given FITS file pointer. This is a relatively low-level function which assumes the FITS file has already been opened with CFITSIO. If you just want to write the WCS into an empty file, you can use ‘gal_wcs_write’ (which internally calls this function after creating the FITS file and later closes it safely). -- Function: struct wcsprm * gal_wcs_copy (struct wcsprm *wcs) Return a fully allocated (independent) copy of ‘wcs’. -- Function: struct wcsprm * gal_wcs_copy_new_crval (struct wcsprm *wcs, double *crval) Return a fully allocated (independent) copy of ‘wcs’ with a new set of ‘CRVAL’ values. WCSLIB keeps a lot of extra information within ‘wcsprm’ and for optimizations, those extra information are used in its calculations. Therefore, if you want to change parameters like the reference point's sky coordinate values (‘CRVAL’), simply changing the values in ‘wcs->crval[0]’ or ‘wcs->crval[1]’ will not affect WCSLIB's calculations; you need to call this function. -- Function: void gal_wcs_remove_dimension (struct wcsprm *wcs, size_t fitsdim) Remove the given FITS dimension from the given ‘wcs’ structure. -- Function: void gal_wcs_on_tile (gal_data_t *tile) Create a WCSLIB ‘wcsprm’ structure for ‘tile’ using WCS parameters of the tile's allocated block dataset, see *note Tessellation library:: for the definition of tiles. If ‘tile’ already has a WCS structure, this function will not do anything. In many cases, tiles are created for internal/low-level processing. Hence for performance reasons, when creating the tiles they do not have any WCS structure. When needed, this function can be used to add a WCS structure to each tile tile by copying the WCS structure of its block and correcting the reference point's coordinates within the tile. -- Function: double * gal_wcs_warp_matrix (struct wcsprm *wcs) Return the Warping matrix of the given WCS structure as an array of double precision floating points. This will be the final matrix, irrespective of the type of storage in the WCS structure. Recall that the FITS standard has several methods to store the matrix. The output is an allocated square matrix with each side equal to the number of dimensions. -- Function: void gal_wcs_clean_small_errors (struct wcsprm *wcs) Errors can make small differences between the pixel-scale elements (‘CDELT’) and can also lead to extremely small values in the ‘PC’ matrix. With this function, such errors will be "cleaned" as follows: 1) if the maximum difference between the ‘CDELT’ elements is smaller than the reference error, it will be set to the mean value. When the FITS keyword ‘CRDER’ (optional) is defined it will be used as a reference, if not the default value is ‘GAL_WCS_FLTERROR’. 2) If any of the PC elements differ from 0, 1 or -1 by less than ‘GAL_WCS_FLTERROR’, they will be rounded to the respective value. -- Function: void gal_wcs_decompose_pc_cdelt (struct wcsprm *wcs) Decompose the ‘PCi_j’ and ‘CDELTi’ elements of ‘wcs’. According to the FITS standard, in the ‘PCi_j’ WCS formalism, the rotation matrix elements $m_{ij}$ are encoded in the ‘PCi_j’ keywords and the scale factors are encoded in the ‘CDELTi’ keywords. There is also another formalism (the ‘CDi_j’ formalism) which merges the two into one matrix. However, WCSLIB's internal operations are apparently done in the ‘PCi_j’ formalism. So its outputs are also all in that format by default. When the input is a ‘CDi_j’, WCSLIB will still read the matrix directly into the ‘PCi_j’ matrix and the ‘CDELTi’ values are set to ‘1’ (one). This function is designed to correct such issues: after it is finished, the ‘CDELTi’ values in ‘wcs’ will correspond to the pixel scale, and the ‘PCi_j’ will correction show the rotation. -- Function: void gal_wcs_to_cd (struct wcsprm *wcs) Make sure that the WCS structure's ‘PCi_j’ and ‘CDi_j’ keywords have the same value and that the ‘CDELTi’ keywords have a value of 1.0. Also, set the ‘wcs->altlin=2’ (for the ‘CDi_j’ formalism). With these changes ‘gal_wcs_write_in_fitsptr’ (and thus ‘gal_wcs_write’ and ‘gal_fits_img_write’ and its derivatives) will have an output file in the format of ‘CDi_j’. -- Function: int gal_wcs_coordsys_identify (struct wcsprm *wcs) Read the given WCS structure and return its coordinate system as one of Gnuastro's WCS coordinate system identifiers (the macros ‘GAL_WCS_COORDSYS_*’, listed above). -- Function: struct wcsprm * gal_wcs_coordsys_convert (struct wcsprm *inwcs, int coordsysid) Return a newly allocated WCS structure with the ‘coordsysid’ coordinate system identifier. The Gnuastro WCS distortion identifiers are defined in the ‘GAL_WCS_COORDSYS_*’ macros mentioned above. Since the returned dataset is newly allocated, if you do not need the original dataset after this, use the WCSLIB library function ‘wcsfree’ to free the input, for example, ‘wcsfree(inwcs)’. -- Function: void gal_wcs_coordsys_convert_points (int sys1, double *lng1_d, double *lat1_d, int sys2, double *lng2_d, double *lat2_d, size_t number) Convert the input set of longitudes (‘lng1_d’, in degrees) and latitudes (‘lat1_d’, in degrees) within a recognized coordinate system (‘sys1’; one of the ‘GAL_WCS_COORDSYS_*’ macros above) into an output coordinate system (‘sys2’). The output values are written in ‘lng2_d’ and ‘lng2_d’. The total number of points should be given in ‘number’. If you want the operation to be done in place (without allocating a new dataset), give the same pointers to the coordinate arguments. -- Function: void gal_wcs_coordsys_sys1_ref_in_sys2 (int sys1, int sys2, double *lng2, double *lat2) Return the longitude and latitude of the reference point (on the equator) of the first coordinate system (‘sys1’) within the second system (‘sys2’). Coordinate systems are identified by the ‘GAL_WCS_COORDSYS_*’ macros above. -- Function: int gal_wcs_distortion_identify (struct wcsprm *wcs) Returns the Gnuastro identifier for the distortion of the input WCS structure. The returned value is one of the ‘GAL_WCS_DISTORTION_*’ macros defined above. When the input pointer to a structure is ‘NULL’, or it does not contain a distortion, the returned value will be ‘GAL_WCS_DISTORTION_INVALID’. -- Function: struct wcsprm * gal_wcs_distortion_convert(struct wcsprm *inwcs, int outdisptype, size_t *fitsize) Return a newly allocated WCS structure, where the distortion is implemented in a different standard, identified by the identifier ‘outdisptype’. The Gnuastro WCS distortion identifiers are defined in the ‘GAL_WCS_DISTORTION_*’ macros mentioned above. The available conversions in this function will grow. Currently it only supports converting TPV to SIP and vice versa, following the recipe of Shupe et al. (2012)(4). Please get in touch with us if you need other types of conversions. For some conversions, direct analytical conversions do not exist. It is thus necessary to model and fit the two types. In such cases, it is also necessary to specify the ‘fitsize’ array that is the size of the array along each C-ordered dimension, so you can simply pass the ‘dsize’ element of your ‘gal_data_t’ dataset, see *note Generic data container::. Currently this is only necessary when converting TPV to SIP. For other conversions you may simply pass a ‘NULL’ pointer. For example, if you want to convert the TPV coefficients of your input ‘image.fits’ to SIP coefficients, you can use the following functions (which are also available as a command-line operation in *note Fits::). int nwcs; gal_data_t *data=gal_fits_img_read("image.fits", "1", -1, 1, NULL); inwcs=gal_wcs_read("image.fits", "1", 0, 0, 0, &nwcs, NULL); data->wcs=gal_wcs_distortion_convert(inwcs, GAL_WCS_DISTORTION_TPV, NULL); wcsfree(inwcs); gal_fits_img_write(data, "tpv.fits", NULL, 0); -- Function: double gal_wcs_angular_distance_deg (double r1, double d1, double r2, double d2) Return the angular distance (in degrees) between a point located at (‘r1’, ‘d1’) to (‘r2’, ‘d2’). All input coordinates are in degrees. The distance (along a great circle) on a sphere between two points is calculated with the equation below. $$\cos(d)=\sin(d_1)\sin(d_2)+\cos(d_1)\cos(d_2)\cos(r_1-r_2)$$ However, since the pixel scales are usually very small numbers, this function will not use that direct formula. It will be use the Haversine formula (https://en.wikipedia.org/wiki/Haversine_formula) which is better considering floating point errors: $${\sin^2(d)\over 2}=\sin^2\left( {d_1-d_2\over 2} \right)+\cos(d_1)\cos(d_2)\sin^2\left( {r_1-r_2\over 2} \right)$$ -- Function: void gal_wcs_box_vertices_from_center (double ra_center, double dec_center, double ra_delta, double dec_delta, double *out) Calculate the vertices of a rectangular box given the central RA and Dec and delta of each. The vertice coordinates are written in the space that ‘out’ points to (assuming it has space for eight ‘double’s). Given the spherical nature of the coordinate system, the vertice lengths can't be calculated with a simple addition/subtraction. For the declination, a simple addition/subtraction is enough. Also, on the equator (where the RA is defined), a simple addition/subtraction along the RA is fine. However, at other declinations, the new RA after a shift needs special treatment, such that close to the poles, a shift of 1 degree can correspond to a new RA that is much more distant than the original RA. Assuming a point at Right Ascension (RA) and Declination of $\alpha$ and $\delta$, a shift of $R$ degrees along the positive RA direction corresponds to a right ascension of $\alpha+\frac{R}{\cos(\delta)}$. For more, see the description of ‘box-vertices-on-sphere’ in *note Coordinate and border operators::. The 8 coordinates of the 4 vertices of the box are written in the order below. Where "bottom" corresponds to a lower declination and "top" to higher declination, "left" corresponds to a larger RA and "right" corresponds to lower RA. out[0]: bottom-left RA out[1]: bottom-left Dec out[2]: bottom-right RA out[3]: bottom-right Dec out[4]: top-right RA out[5]: top-right Dec out[6]: top-left RA out[7]: top-left Dec -- Function: double * gal_wcs_pixel_scale (struct wcsprm *wcs) Return the pixel scale for each dimension of ‘wcs’ in degrees. The output is an allocated array of double precision floating point type with one element for each dimension. If it is not successful, this function will return ‘NULL’. -- Function: double gal_wcs_pixel_area_arcsec2 (struct wcsprm *wcs) Return the pixel area of ‘wcs’ in arc-second squared. This only works when the input dataset has at least two dimensions and the units of the first two dimensions (‘CUNIT’ keywords) are ‘deg’ (for degrees). In other cases, this function will return a NaN. -- Function: int gal_wcs_coverage (char *filename, char *hdu, size_t *ondim, double **ocenter, double **owidth, double **omin, double **omax, char *hdu_option_name) Find the sky coverage of the image HDU (‘hdu’) within ‘filename’. The number of dimensions is written into ‘ndim’, and space for the various output arrays is internally allocated and filled with the respective values. Therefore you need to free them afterwards. For more on ‘hdu_option_name’ see the description of ‘gal_array_read’ in *note Array input output::. Currently this function only supports images that are less than 180 degrees in width (which is usually the case!). This requirement has been necessary to account for images that cross the RA=0 hour circle on the sky. Please get in touch with us at <mailto:bug-gnuastro@gnu.org> if you have an image that is larger than 180 degrees so we try to find a solution based on need. -- Function: gal_data_t * gal_wcs_world_to_img (gal_data_t *coords, struct wcsprm *wcs, int inplace) Convert the linked list of world coordinates in ‘coords’ to a linked list of image coordinates given the input WCS structure. ‘coords’ must be a linked list of data structures of float64 ('double') type, see*note Linked lists:: and *note List of gal_data_t::. The top (first popped/read) node of the linked list must be the first WCS coordinate (RA in an image usually) etc. Similarly, the top node of the output will be the first image coordinate (in the FITS standard). In case WCSLIB fails to convert any of the coordinates (for example, the RA of one coordinate is given as 400!), the respective element in the output will be written as NaN. If ‘inplace’ is zero, then the output will be a newly allocated list and the input list will be untouched. However, if ‘inplace’ is non-zero, the output values will be written into the input's already allocated array and the returned pointer will be the same pointer to ‘coords’ (in other words, you can ignore the returned value). Note that in the latter case, only the values will be changed, things like units or name (if present) will be untouched. -- Function: gal_data_t * gal_wcs_img_to_world (gal_data_t *coords, struct wcsprm *wcs, int inplace) Convert the linked list of image coordinates in ‘coords’ to a linked list of world coordinates given the input WCS structure. See the description of ‘gal_wcs_world_to_img’ for more details. ---------- Footnotes ---------- (1) <https://www.atnf.csiro.au/people/mcalabre/WCS/wcslib/threads.html> (2) <https://www.atnf.csiro.au/people/mcalabre/WCS/dcs_20040422.pdf> (3) <https://www.atnf.csiro.au/people/mcalabre/WCS/wcslib/dis_8h.html> (4) Proc. of SPIE Vol. 8451 84511M-1. <https://doi.org/10.1117/12.925460>, also available at <http://web.ipac.caltech.edu/staff/shupe/reprints/SIP_to_PV_SPIE2012.pdf>.  File: gnuastro.info, Node: Arithmetic on datasets, Next: Tessellation library, Prev: World Coordinate System, Up: Gnuastro library 12.3.14 Arithmetic on datasets (‘arithmetic.h’) ----------------------------------------------- When the dataset's type and other information are already known, any programming language (including C) provides some very good tools for various operations (including arithmetic operations like addition) on the dataset with a simple loop. However, as an author of a program, making assumptions about the type of data, its dimensions and other basic characteristics will come with a large processing burden. For example, if you always read your data as double precision floating points for a simple operation like addition with an integer constant, you will be wasting a lot of CPU and memory when the input dataset is ‘int32’ type for example, (see *note Numeric data types::). This overhead may be small for small images, but as you scale your process up and work with hundred/thousands of files that can be very large, this overhead will take a significant portion of the processing power. The functions and macros in this section are designed precisely for this purpose: to allow you to do any of the defined operations on any dataset with no overhead (in the native type of the dataset). Gnuastro's Arithmetic program uses the functions and macros of this section, so please also have a look at the *note Arithmetic:: program and in particular *note Arithmetic operators:: for a better description of the operators discussed here. The main function of this library is ‘gal_arithmetic’ that is described below. It can take an arbitrary number of arguments as operands (depending on the operator, similar to ‘printf’). Its first two arguments are integers specifying the flags and operator. So first we will review the constants for the recognized flags and operators and discuss them, then introduce the actual function. -- Macro: GAL_ARITHMETIC_FLAG_INPLACE -- Macro: GAL_ARITHMETIC_FLAG_FREE -- Macro: GAL_ARITHMETIC_FLAG_NUMOK -- Macro: GAL_ARITHMETIC_FLAG_ENVSEED -- Macro: GAL_ARITHMETIC_FLAG_QUIET -- Macro: GAL_ARITHMETIC_FLAGS_BASIC Bit-wise flags to pass onto ‘gal_arithmetic’ (see below). To pass multiple flags, use the bitwise-or operator. For example, if you pass ‘GAL_ARITHMETIC_FLAG_INPLACE | GAL_ARITHMETIC_FLAG_NUMOK’, then the operation will be done in-place (without allocating a new array), and a single number will also be acceptable (that will be applied to all the pixels). Each flag is described below: ‘GAL_ARITHMETIC_FLAG_INPLACE’ Do the operation in-place (in the input dataset, thus modifying it) to improve CPU and memory usage. If this flag is used, after ‘gal_arithmetic’ finishes, the input dataset will be modified. It is thus useful if you have no more need for the input after the operation. ‘GAL_ARITHMETIC_FLAG_FREE’ Free (all the) input dataset(s) after the operation is done. Hence the inputs are no longer usable after ‘gal_arithmetic’. ‘GAL_ARITHMETIC_FLAG_NUMOK’ It is acceptable to use a number and an array together. For example, if you want to add all the pixels in an image with a single number you can pass this flag to avoid having to allocate a constant array the size of the image (with all the pixels having the same number). ‘GAL_ARITHMETIC_FLAG_ENVSEED’ Use the pre-defined environment variable for setting the random number generator seed when an operator needs it (for example, ‘mknoise-sigma’). For more on random number generation in Gnuastro see *note Generating random numbers::. ‘GAL_ARITHMETIC_FLAG_QUIET’ Do not print any warnings or messages for operators that may benefit from it. For example, by default the ‘mknoise-sigma’ operator prints the random number generator function and seed that it used (in case the user wants to reproduce this result later). By activating this bit flag to the call, that extra information is not printed on the command-line. ‘GAL_ARITHMETIC_FLAGS_BASIC’ A wrapper for activating the three "basic" operations that are commonly necessary together: ‘GAL_ARITHMETIC_FLAG_INPLACE’, ‘GAL_ARITHMETIC_FLAG_FREE’ and ‘GAL_ARITHMETIC_FLAG_NUMOK’. -- Macro: GAL_ARITHMETIC_OP_PLUS -- Macro: GAL_ARITHMETIC_OP_MINUS -- Macro: GAL_ARITHMETIC_OP_MULTIPLY -- Macro: GAL_ARITHMETIC_OP_DIVIDE -- Macro: GAL_ARITHMETIC_OP_LT -- Macro: GAL_ARITHMETIC_OP_LE -- Macro: GAL_ARITHMETIC_OP_GT -- Macro: GAL_ARITHMETIC_OP_GE -- Macro: GAL_ARITHMETIC_OP_EQ -- Macro: GAL_ARITHMETIC_OP_NE -- Macro: GAL_ARITHMETIC_OP_AND -- Macro: GAL_ARITHMETIC_OP_OR Binary operators (requiring two operands) that accept datasets of any recognized type (see *note Numeric data types::). When ‘gal_arithmetic’ is called with any of these operators, it expects two datasets as arguments. For a full description of these operators with the same name, see *note Arithmetic operators::. The first dataset/operand will be put on the left of the operator and the second will be put on the right. The output type of the first four is determined from the input types (largest type of the inputs). The rest (which are all conditional operators) will output a binary ‘uint8_t’ (or ‘unsigned char’) dataset with values of either ‘0’ (zero) or ‘1’ (one). -- Macro: GAL_ARITHMETIC_OP_NOT The logical NOT operator. When ‘gal_arithmetic’ is called with this operator, it only expects one operand (dataset), since this is a unary operator. The output is ‘uint8_t’ (or ‘unsigned char’) dataset of the same size as the input. Any non-zero element in the input will be ‘0’ (zero) in the output and any ‘0’ (zero) will have a value of ‘1’ (one). -- Macro: GAL_ARITHMETIC_OP_ISBLANK A unary operator with output that is ‘1’ for any element in the input that is blank, and ‘0’ for any non-blank element. When ‘gal_arithmetic’ is called with this operator, it will only expect one input dataset. The output dataset will have ‘uint8_t’ (or ‘unsigned char’) type. ‘gal_arithmetic’ with this operator is just a wrapper for the ‘gal_blank_flag’ function of *note Library blank values:: and this operator is just included for completeness in arithmetic operations. So in your program, it might be easier to just call ‘gal_blank_flag’. -- Macro: GAL_ARITHMETIC_OP_WHERE The three-operand _where_ operator thoroughly discussed in *note Arithmetic operators::. When ‘gal_arithmetic’ is called with this operator, it will only expect three input datasets: the first (which is the same as the returned dataset) is the array that will be modified. The second is the condition dataset (that must have a ‘uint8_t’ or ‘unsigned char’ type), and the third is the value to be used if condition is non-zero. As a result, note that the order of operands when calling ‘gal_arithmetic’ with ‘GAL_ARITHMETIC_OP_WHERE’ is the opposite of running Gnuastro's Arithmetic program with the ‘where’ operator (see *note Arithmetic::). This is because the latter uses the reverse-Polish notation which is not necessary when calling a function (see *note Reverse polish notation::). -- Macro: GAL_ARITHMETIC_OP_SQRT -- Macro: GAL_ARITHMETIC_OP_LOG -- Macro: GAL_ARITHMETIC_OP_LOG10 Unary operator functions for calculating the square root ($\sqrt{i}$), $ln(i)$ and $log(i)$ mathematical operators on each element of the input dataset. The returned dataset will have a floating point type, but its precision is determined from the input: if the input is a 64-bit floating point, the output will also be 64-bit. Otherwise, the returned dataset will be 32-bit floating point: you do not gain precision by using these operators, but you gain in operating speed if you use the sufficient precision. See *note Numeric data types:: for more on the precision of floating point numbers to help in selecting your required floating point precision. If you want your output to be 64-bit floating point but your input is a different type, you can convert the input to a 64-bit floating point type with ‘gal_data_copy_to_new_type’ or ‘gal_data_copy_to_new_type_free’(see *note Copying datasets::). Alternatively, you can use the ‘GAL_ARITHMETIC_OP_TO_FLOAT64’ operators in the arithmetic library. -- Macro: GAL_ARITHMETIC_OP_SIN -- Macro: GAL_ARITHMETIC_OP_COS -- Macro: GAL_ARITHMETIC_OP_TAN -- Macro: GAL_ARITHMETIC_OP_ASIN -- Macro: GAL_ARITHMETIC_OP_ACOS -- Macro: GAL_ARITHMETIC_OP_ATAN -- Macro: GAL_ARITHMETIC_OP_ATAN2 Trigonometric functions (and their inverse). All the angles, either inputs or outputs, are in units of degrees. -- Macro: GAL_ARITHMETIC_OP_SINH -- Macro: GAL_ARITHMETIC_OP_COSH -- Macro: GAL_ARITHMETIC_OP_TANH -- Macro: GAL_ARITHMETIC_OP_ASINH -- Macro: GAL_ARITHMETIC_OP_ACOSH -- Macro: GAL_ARITHMETIC_OP_ATANH Hyperbolic functions (and their inverse). -- Macro: GAL_ARITHMETIC_OP_RA_TO_DEGREE -- Macro: GAL_ARITHMETIC_OP_DEC_TO_DEGREE -- Macro: GAL_ARITHMETIC_OP_DEGREE_TO_RA -- Macro: GAL_ARITHMETIC_OP_DEGREE_TO_DEC Unary operators to convert between degrees (as a single floating point number) to the sexagesimal Right Ascension and Declination format (as strings, respectively in the format of ‘_h_m_s’ and ‘_d_m_s’). The first two operators expect a string operand (in the sexagesimal formats mentioned above, but also in the ‘_:_:_’) and will return a double-precision floating point operand. The latter two are the opposite. -- Macro: GAL_ARITHMETIC_OP_COUNTS_TO_MAG -- Macro: GAL_ARITHMETIC_OP_MAG_TO_COUNTS -- Macro: GAL_ARITHMETIC_OP_MAG_TO_SB -- Macro: GAL_ARITHMETIC_OP_SB_TO_MAG -- Macro: GAL_ARITHMETIC_OP_COUNTS_TO_JY -- Macro: GAL_ARITHMETIC_OP_JY_TO_COUNTS -- Macro: GAL_ARITHMETIC_OP_MAG_TO_JY -- Macro: GAL_ARITHMETIC_OP_JY_TO_MAG -- Macro: GAL_ARITHMETIC_OP_MAG_TO_NANOMAGGY -- Macro: GAL_ARITHMETIC_OP_NANOMAGGY_TO_MAG Binary operators for converting brightness and surface brightness units to and from each other. The first operand to all of them are the values in the input unit (left of the ‘-TO-’, for example counts in ‘COUNTS_TO_MAG’). The second popped operand is the zero point (right of the ‘-TO-’, for example magnitudes in ‘COUNTS_TO_MAG’). The exceptions are the operators that involve surface brightness (those with ‘SB’). For the surface brightness related operators, the second popped operand is the area in units of arcsec$^2$ and the third popped operand is the final unit. -- Macro: GAL_ARITHMETIC_OP_COUNTS_TO_SB -- Macro: GAL_ARITHMETIC_OP_SB_TO_COUNTS Operators for converting counts to surface brightness and vice-versa. These operators take three operands: 1) the input dataset in units of counts or surface brightness (depending on the operator), 2) the zero point, 3) the area in units of arcsec$^2$. -- Macro: GAL_ARITHMETIC_OP_AU_TO_PC -- Macro: GAL_ARITHMETIC_OP_PC_TO_AU -- Macro: GAL_ARITHMETIC_OP_LY_TO_PC -- Macro: GAL_ARITHMETIC_OP_PC_TO_LY -- Macro: GAL_ARITHMETIC_OP_LY_TO_AU -- Macro: GAL_ARITHMETIC_OP_AU_TO_LY Unary operators to convert various distance units to and from each other: Astronomical Units (AU), Parsecs (PC) and Light years (LY). -- Macro: GAL_ARITHMETIC_OP_MINVAL -- Macro: GAL_ARITHMETIC_OP_MAXVAL -- Macro: GAL_ARITHMETIC_OP_NUMBERVAL -- Macro: GAL_ARITHMETIC_OP_SUMVAL -- Macro: GAL_ARITHMETIC_OP_MEANVAL -- Macro: GAL_ARITHMETIC_OP_STDVAL -- Macro: GAL_ARITHMETIC_OP_MEDIANVAL Unary operand statistical operators that will return a single value for datasets of any size. These are just wrappers around similar functions in *note Statistical operations:: and are included in ‘gal_arithmetic’ only for completeness (to use easily in *note Arithmetic::). In your programs, it will probably be easier if you use those ‘gal_statistics_’ functions directly. -- Macro: GAL_ARITHMETIC_OP_UNIQUE -- Macro: GAL_ARITHMETIC_OP_NOBLANK Unary operands that will remove some elements from the input dataset. The first will return the unique elements, and the second will return the non-blank elements. Due to the removal of elements, the dimensionality of the output will be lost. These are just wrappers over the ‘gal_statistics_unique’ and ‘gal_blank_remove’. These are just wrappers around similar functions in *note Statistical operations:: and are included in ‘gal_arithmetic’ only for completeness (to use easily in *note Arithmetic::). In your programs, it will probably be easier if you use those ‘gal_statistics_’ functions directly. -- Macro: GAL_ARITHMETIC_OP_ABS Unary operand absolute-value operator. -- Macro: GAL_ARITHMETIC_OP_MIN -- Macro: GAL_ARITHMETIC_OP_MAX -- Macro: GAL_ARITHMETIC_OP_NUMBER -- Macro: GAL_ARITHMETIC_OP_SUM -- Macro: GAL_ARITHMETIC_OP_MEAN -- Macro: GAL_ARITHMETIC_OP_STD -- Macro: GAL_ARITHMETIC_OP_MEDIAN Multi-operand statistical operations. When ‘gal_arithmetic’ is called with any of these operators, it will expect only a single operand that will be interpreted as a list of datasets (see *note List of gal_data_t::). These operators can work on multiple threads using the ‘numthreads’ argument. See the discussion under the ‘min’ operator in *note Arithmetic operators::. The output will be a single dataset with each of its elements replaced by the respective statistical operation on the whole list. The type of the output is determined from the operator (irrespective of the input type): for ‘GAL_ARITHMETIC_OP_MIN’ and ‘GAL_ARITHMETIC_OP_MAX’, it will be the same type as the input, for ‘GAL_ARITHMETIC_OP_NUMBER’, the output will be ‘GAL_TYPE_UINT32’ and for the rest, it will be ‘GAL_TYPE_FLOAT32’. -- Macro: GAL_ARITHMETIC_OP_QUANTILE Similar to the operands above (including ‘GAL_ARITHMETIC_MIN’), except that when ‘gal_arithmetic’ is called with these operators, it requires two arguments. The first is the list of datasets like before, and the second is the 1-element dataset with the quantile value. The output type is the same as the inputs. -- Macro: GAL_ARITHMETIC_OP_SIGCLIP_STD -- Macro: GAL_ARITHMETIC_OP_SIGCLIP_MEAN -- Macro: GAL_ARITHMETIC_OP_SIGCLIP_MEDIAN -- Macro: GAL_ARITHMETIC_OP_SIGCLIP_NUMBER Similar to the operands above (including ‘GAL_ARITHMETIC_MIN’), except that when ‘gal_arithmetic’ is called with these operators, it requires two arguments. The first is the list of datasets like before, and the second is the 2-element list of $\sigma$-clipping parameters. The first element in the parameters list is the multiple of sigma and the second is the termination criteria (see *note Sigma clipping::). The output type of ‘GAL_ARITHMETIC_OP_SIGCLIP_NUMBER’ will be ‘GAL_TYPE_UINT32’ and for the rest it will be ‘GAL_TYPE_FLOAT32’. -- Macro: GAL_ARITHMETIC_OP_MKNOISE_SIGMA -- Macro: GAL_ARITHMETIC_OP_MKNOISE_POISSON -- Macro: GAL_ARITHMETIC_OP_MKNOISE_UNIFORM Add noise to the input dataset. These operators take two arguments: the first is the input data set (can have any dimensionality or number of elements. The second argument is the noise specifier (a single element, of any type): for a fixed-sigma noise, it is the Gaussian standard deviation, for the Poisson noise, it is the background (see *note Photon counting noise::) and for the uniform distribution it is the width of the interval around each element of the input dataset. By default, a separate random number generator seed will be used on each separate run of these operators. Therefore two identical runs on the same input will produce different results. You can get reproducible results by setting the ‘GAL_RNG_SEED’ environment variable and activating the ‘GAL_ARITHMETIC_FLAG_ENVSEED’ flag. For more on random number generation in Gnuastro, see *note Generating random numbers::. By default these operators will print the random number generator function and seed (in case the user wants to reproduce the result later), but this can be disabled by activating the bit-flag ‘GAL_ARITHMETIC_FLAG_QUIET’ described above. -- Macro: GAL_ARITHMETIC_OP_RANDOM_FROM_HIST -- Macro: GAL_ARITHMETIC_OP_RANDOM_FROM_HIST_RAW Select random values from a custom distribution (defined by a histogram). For more, see the description of the respective operators in *note Generating random numbers::. -- Macro: GAL_ARITHMETIC_OP_STITCH Stitch a list of input datasets along the requested dimension. See the description of the ‘stitch’ operator in Arithmetic (*note Dimensionality changing operators::). -- Macro: GAL_ARITHMETIC_OP_POW Binary operator to-power operator. When ‘gal_arithmetic’ is called with any of these operators, it will expect two operands: raising the first by the second (returning a floating point, inputs can be integers). -- Macro: GAL_ARITHMETIC_OP_BITAND -- Macro: GAL_ARITHMETIC_OP_BITOR -- Macro: GAL_ARITHMETIC_OP_BITXOR -- Macro: GAL_ARITHMETIC_OP_BITLSH -- Macro: GAL_ARITHMETIC_OP_BITRSH -- Macro: GAL_ARITHMETIC_OP_MODULO Binary integer-only operand operators. These operators are only defined on integer data types. When ‘gal_arithmetic’ is called with any of these operators, it will expect two operands: the first is put on the left of the operator and the second on the right. The ones starting with ‘BIT’ are the respective bit-wise operators in C and ‘MODULO’ is the modulo/remainder operator. For a discussion on these operators, please see *note Arithmetic operators::. The output type is determined from the input types and C's internal conversions: it is strongly recommended that both inputs have the same type (any integer type), otherwise the bit-wise behavior will be determined by your compiler. -- Macro: GAL_ARITHMETIC_OP_BITNOT The unary bit-wise NOT operator. When ‘gal_arithmetic’ is called with any of these operators, it will expect one operand of an integer type and preform the bitwise-NOT operation on it. The output will have the same type as the input. -- Macro: GAL_ARITHMETIC_OP_TO_UINT8 -- Macro: GAL_ARITHMETIC_OP_TO_INT8 -- Macro: GAL_ARITHMETIC_OP_TO_UINT16 -- Macro: GAL_ARITHMETIC_OP_TO_INT16 -- Macro: GAL_ARITHMETIC_OP_TO_UINT32 -- Macro: GAL_ARITHMETIC_OP_TO_INT32 -- Macro: GAL_ARITHMETIC_OP_TO_UINT64 -- Macro: GAL_ARITHMETIC_OP_TO_INT64 -- Macro: GAL_ARITHMETIC_OP_TO_FLOAT32 -- Macro: GAL_ARITHMETIC_OP_TO_FLOAT64 Unary type-conversion operators. When ‘gal_arithmetic’ is called with any of these operators, it will expect one operand and convert it to the requested type. Note that with these operators, ‘gal_arithmetic’ is just a wrapper over the ‘gal_data_copy_to_new_type’ or ‘gal_data_copy_to_new_type_free’ that are discussed in ‘Copying datasets’. It accepts these operators only for completeness and easy usage in *note Arithmetic::. So in your programs, it might be preferable to directly use those functions. -- Macro: GAL_ARITHMETIC_OP_E -- Macro: GAL_ARITHMETIC_OP_C -- Macro: GAL_ARITHMETIC_OP_G -- Macro: GAL_ARITHMETIC_OP_H -- Macro: GAL_ARITHMETIC_OP_AU -- Macro: GAL_ARITHMETIC_OP_LY -- Macro: GAL_ARITHMETIC_OP_PI -- Macro: GAL_ARITHMETIC_OP_AVOGADRO -- Macro: GAL_ARITHMETIC_OP_FINESTRUCTURE Return the respective mathematical constant. For their description please see *note Constants::. The constant values are taken from the GNU Scientific Library's headers (defined in ‘gsl/gsl_math.h’). -- Macro: GAL_ARITHMETIC_OP_BOX_AROUND_ELLIPSE Return the width (along horizontal) and height (along vertical) of a box that encompasses an ellipse with the same center point. For more on the three input operands to this operator see the description of ‘box-around-ellipse’. This function returns two datasets as a ‘gal_data_t’ linked list. The top element of the list is the height and its next element is the width. -- Macro: GAL_ARITHMETIC_OP_BOX_VERTICES_ON_SPHERE Return the vertices of a (possibly rectangular) box on a sphere, given its center RA, Dec and the width of the box along the two dimensions. It will take the spherical nature of the coordinate system into account (for more, see the description of ‘gal_wcs_box_vertices_from_center’ in *note World Coordinate System::). This function returns 8 datasets as a ‘gal_data_t’ linked list in the following order: bottom-left RA, bottom-left Dec, bottom-right RA, bottom-right Dec, top-right RA, top-right Dec, top-left RA, top-left Dec. -- Macro: GAL_ARITHMETIC_OP_MAKENEW Create a new, zero-valued dataset with an unsigned 8-bit data type. The length along each dimension of the dataset should be given as a single list of ‘gal_data_t’s. The number of dimensions is derived from the number of nodes in the list and the length along each dimension is the single-valued element within that list. Just note that the list should be in the reverse of the desired dimensions. -- Macro: GAL_ARITHMETIC_OP_MAKENEW Given a dataset and a constant, -- Macro: GAL_ARITHMETIC_OPSTR_LOADCOL_HDU -- Macro: GAL_ARITHMETIC_OPSTR_LOADCOL_FILE -- Macro: GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX -- Macro: GAL_ARITHMETIC_OPSTR_LOADCOL_HDU_LEN -- Macro: GAL_ARITHMETIC_OPSTR_LOADCOL_FILE_LEN -- Macro: GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX_LEN Constant components of the ‘load-col-’ operator (see *note Loading external columns::). These are just fixed strings (and their lengths) that are placed in between the various components of that operator to allow choosing a certain column of a certain HDU of a certain file. -- Macro: GAL_ARITHMETIC_OP_INDEX -- Macro: GAL_ARITHMETIC_OP_COUNTER -- Macro: GAL_ARITHMETIC_OP_INDEXONLY -- Macro: GAL_ARITHMETIC_OP_COUNTERONLY Return a dataset with the same number of elements and dimensionality as the first (and only!) input dataset. But each output pixel's value will be replaced by its index (counting from 0) or counter (counting from 1). Note that the ‘GAL_ARITHMETIC_OP_INDEX’ and ‘GAL_ARITHMETIC_OP_INDEXONLY’ operators are identical within the library (same for the counter operators). They are given separate macros here to help the higher-level callers to manage their inputs separately (see *note Size and position operators::). -- Macro: GAL_ARITHMETIC_OP_SIZE Size operator that will return a single value for datasets of any kind. When ‘gal_arithmetic’ is called with this operator, it requires two arguments. The first is the dataset, and the second is a single integer value. The output type is a single integer. -- Macro: GAL_ARITHMETIC_OP_SWAP Return the first dataset, but with the second dataset being placed in the ‘next’ element of the first. This is useful to swap the operators on the stacks of the higher-level programs that call the arithmetic library. -- Macro: GAL_ARITHMETIC_OP_EQB1950_TO_EQJ2000 -- Macro: GAL_ARITHMETIC_OP_EQB1950_TO_ECB1950 -- Macro: GAL_ARITHMETIC_OP_EQB1950_TO_ECJ2000 -- Macro: GAL_ARITHMETIC_OP_EQB1950_TO_GALACTIC -- Macro: GAL_ARITHMETIC_OP_EQB1950_TO_SUPERGALACTIC -- Macro: GAL_ARITHMETIC_OP_EQJ2000_TO_EQB1950 -- Macro: GAL_ARITHMETIC_OP_EQJ2000_TO_ECB1950 -- Macro: GAL_ARITHMETIC_OP_EQJ2000_TO_ECJ2000 -- Macro: GAL_ARITHMETIC_OP_EQJ2000_TO_GALACTIC -- Macro: GAL_ARITHMETIC_OP_EQJ2000_TO_SUPERGALACTIC -- Macro: GAL_ARITHMETIC_OP_ECB1950_TO_EQB1950 -- Macro: GAL_ARITHMETIC_OP_ECB1950_TO_EQJ2000 -- Macro: GAL_ARITHMETIC_OP_ECB1950_TO_ECJ2000 -- Macro: GAL_ARITHMETIC_OP_ECB1950_TO_GALACTIC -- Macro: GAL_ARITHMETIC_OP_ECB1950_TO_SUPERGALACTIC -- Macro: GAL_ARITHMETIC_OP_ECJ2000_TO_EQB1950 -- Macro: GAL_ARITHMETIC_OP_ECJ2000_TO_EQJ2000 -- Macro: GAL_ARITHMETIC_OP_ECJ2000_TO_ECB1950 -- Macro: GAL_ARITHMETIC_OP_ECJ2000_TO_GALACTIC -- Macro: GAL_ARITHMETIC_OP_ECJ2000_TO_SUPERGALACTIC -- Macro: GAL_ARITHMETIC_OP_GALACTIC_TO_EQB1950 -- Macro: GAL_ARITHMETIC_OP_GALACTIC_TO_EQJ2000 -- Macro: GAL_ARITHMETIC_OP_GALACTIC_TO_ECB1950 -- Macro: GAL_ARITHMETIC_OP_GALACTIC_TO_ECJ2000 -- Macro: GAL_ARITHMETIC_OP_GALACTIC_TO_SUPERGALACTIC -- Macro: GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQB1950 -- Macro: GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQJ2000 -- Macro: GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECB1950 -- Macro: GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECJ2000 -- Macro: GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_GALACTIC Operators that convert recognized celestial coordinates to and from each other. They all take two operands and return two ‘gal_data_t’s (as a list). For more on celestial coordinate conversion, see *note Coordinate conversion operators::. -- Function: gal_data_t * gal_arithmetic (int operator, size_t numthreads, int flags, ...) Apply the requested arithmetic operator on the operand(s). The _operator_ is identified through the macros above (that start with ‘GAL_ARITHMETIC_OP_’). The number of necessary operands (number of arguments to replace '‘...’' in the declaration of this function, above) depends on the operator and is described under each operator, above. Each operand has a type of '‘gal_data_t *’' (see last paragraph with example). If the operator can work on multiple threads, the number of threads can be specified with ‘numthreads’. When the operator is single-threaded, ‘numthreads’ will be ignored. Special conditions can also be specified with the ‘flag’ operator (a bit-flag with bits described above, for example, ‘GAL_ARITHMETIC_FLAG_INPLACE’ or ‘GAL_ARITHMETIC_FLAG_FREE’). ‘gal_arithmetic’ is a multi-argument function (like C's ‘printf’). In other words, the number of necessary arguments is not fixed and depends on the value to ‘operator’. Below, you can see a minimal, fully working example, showing how different operators need different numbers of arguments. #include <stdio.h> #include <stdlib.h> #include <gnuastro/fits.h> #include <gnuastro/arithmetic.h> int main(void) { /* Define the datasets and flag. */ gal_data_t *in1, *in2, *out1, *out2; int flag=GAL_ARITHMETIC_FLAGS_BASIC; /* Read the input images. */ in1=gal_fits_img_read("image1.fits", "1", -1, 1, NULL); in2=gal_fits_img_read("image2.fits", "1", -1, 1, NULL); /* Take the logarithm (base-e) of the first input. */ out1=gal_arithmetic(GAL_ARITHMETIC_OP_LOG, 1, flag, in1); /* Add the second input with the logarithm of the first. */ out2=gal_arithmetic(GAL_ARITHMETIC_OP_PLUS, 1, flag, in2, out1); /* Write the output into a file. */ gal_fits_img_write(out2, "out.fits", NULL, 0); /* Clean up. Due to the in-place flag (in * 'GAL_ARITHMETIC_FLAGS_BASIC'), 'out1' and 'out2' point to the * same array in memory and due to the freeing flag, any input * dataset(s) that were not returned have been freed internally * by 'gal_arithmetic'. Therefore it is only necessary to free * 'out2': all other allocated spaces have been freed internally. * before reaching this point. */ gal_data_free(out2); /* Return control back to the OS (saying that we succeeded). */ return EXIT_SUCCESS; } As you see above, you can feed the returned dataset from one call of ‘gal_arithmetic’ to another call. The advantage of using ‘gal_arithmetic’ (as opposed to manually writing a ‘for’ or ‘while’ loop and doing the operation with the ‘+’ operator and ‘log()’ function yourself), is that you do not have to worry about the type of the input data (for a list of acceptable data types in Gnuastro, see *note Library data types::). Arithmetic will automatically deal with the data types internally and choose the best output type depending on the operator. -- Function: int gal_arithmetic_set_operator (char *string, size_t *num_operands) Return the operator macro/code that corresponds to ‘string’. The number of operands that it needs are written into the space that ‘*num_operands’ points to. If the string could not be interpreted as an operator, this function will return ‘GAL_ARITHMETIC_OP_INVALID’. This function will check ‘string’ with the fixed human-readable names (using ‘strcmp’) for the operators and return the two numbers. Note that ‘string’ must only contain the single operator name and nothing else (not even any extra white space). -- Function: char * gal_arithmetic_operator_string (int operator) Return the human-readable standard string that corresponds to the given operator. For example, when the input is ‘GAL_ARITHMETIC_OP_PLUS’ or ‘GAL_ARITHMETIC_OP_MEAN’, the strings ‘+’ or ‘mean’ will be returned. -- Function: gal_data_t * gal_arithmetic_load_col (char *str, int searchin, int ignorecase, size_t minmapsize, int quietmmap) Return the column that corresponds to the identifier in the input string (‘str’). ‘str’ is expected to be in the format of the ‘load-col-’ operator (see *note Loading external columns::). This function will extract the column identifier, the file name and the HDU (if necessary) from the string, read the requested column in memory and return it. See *note Table input output:: for the macros that can be given to ‘searchin’ and ‘ignorecase’ and *note Generic data container:: for the definitions of ‘minmapsize’ and ‘quietmmap’.  File: gnuastro.info, Node: Tessellation library, Next: Bounding box, Prev: Arithmetic on datasets, Up: Gnuastro library 12.3.15 Tessellation library (‘tile.h’) --------------------------------------- In many contexts, it is desirable to slice the dataset into subsets or tiles (overlapping or not). In such a way that you can work on each tile independently. One method would be to copy that region to a separate allocated space, but in many contexts this is not necessary and in fact can be a big burden on CPU/Memory usage. The ‘block’ pointer in Gnuastro's *note Generic data container:: is defined for such situations: where allocation is not necessary. You just want to read the data or write to it independently (or in coordination with) other regions of the dataset. Added with parallel processing, this can greatly improve the time/memory consumption. See the figure below for example: assume the ‘larger’ dataset is a contiguous block of memory that you are interpreting as a 2D array. But you only want to work on the smaller ‘tile’ region. larger --------------------------------- | | | tile | | ---------- | | | | | | |_ | | | |*| | | | ---------- | | tile->block = larger | |_ | |*| | --------------------------------- To use ‘gal_data_t’'s ‘block’ concept, you allocate a ‘gal_data_t *tile’ which is initialized with the pointer to the first element in the sub-array (as its ‘array’ argument). Note that this is not necessarily the first element in the larger array. You can set the size of the tile along with the initialization as you please. Recall that, when given a non-‘NULL’ pointer as ‘array’, ‘gal_data_initialize’ (and thus ‘gal_data_alloc’) do not allocate any space and just uses the given pointer for the new ‘array’ element of the ‘gal_data_t’. So your ‘tile’ data structure will not be pointing to a separately allocated space. After the allocation is done, you just point ‘tile->block’ to the ‘larger’ dataset which hosts the full block of memory. Where relevant, Gnuastro's library functions will check the ‘block’ pointer of their input dataset to see how to deal with dimensions and increments so they can always remain within the tile. The tools introduced in this section are designed to help in defining and working with tiles that are created in this manner. Since the block structure is defined as a pointer, arbitrary levels of tessellation/grid-ing are possible (‘tile->block’ may itself be a tile in an even larger allocated space). Therefore, just like a linked-list (see *note Linked lists::), it is important to have the ‘block’ pointer of the largest (allocated) dataset set to ‘NULL’. Normally, you will not have to worry about this, because ‘gal_data_initialize’ (and thus ‘gal_data_alloc’) will set the ‘block’ element to ‘NULL’ by default, just remember not to change it. You can then only change the ‘block’ element for the tiles you define over the allocated space. Below, we will first review constructs for *note Independent tiles:: and then define the current approach to fully tessellating a dataset (or covering every pixel/data-element with a non-overlapping tile grid in *note Tile grid::. This approach to dealing with parts of a larger block was inspired from a similarly named concept in the GNU Scientific Library (GSL), see its "Vectors and Matrices" chapter for their implementation. * Menu: * Independent tiles:: Work on or check independent tiles. * Tile grid:: Cover a full dataset with non-overlapping tiles.  File: gnuastro.info, Node: Independent tiles, Next: Tile grid, Prev: Tessellation library, Up: Tessellation library 12.3.15.1 Independent tiles ........................... The most general application of tiles is to treat each independently, for example they may overlap, or they may not cover the full image. This section provides functions to help in checking/inspecting such tiles. In *note Tile grid:: we will discuss functions that define/work-with a tile grid (where the tiles do not overlap and fully cover the input dataset). Therefore, the functions in this section are general and can be used for the tiles produced by that section also. -- Function: void gal_tile_start_coord (gal_data_t *tile, size_t *start_coord) Calculate the starting coordinates of a tile in its allocated block of memory and write them in the memory that ‘start_coord’ points to (which must have ‘tile->ndim’ elements). -- Function: void gal_tile_start_end_coord (gal_data_t *tile, size_t *start_end, int rel_block) Put the starting and ending (end point is not inclusive) coordinates of ‘tile’ into the ‘start_end’ array. It is assumed that a space of ‘2*tile->ndim’ has been already allocated (static or dynamic) for ‘start_end’ before this function is called. ‘rel_block’ (or relative-to-block) is only relevant when ‘tile’ has an intermediate tile between it and the allocated space (like a channel, see ‘gal_tile_full_two_layers’). If it does not (‘tile->block’ points the allocated dataset), then the value to ‘rel_block’ is irrelevant. When ‘tile->block’ is itself a larger block and ‘rel_block’ is set to 0, then the starting and ending positions will be based on the position within ‘tile->block’, not the allocated space. -- Function: void * gal_tile_start_end_ind_inclusive (gal_data_t *tile, gal_data_t *work, size_t *start_end_inc) Put the indices of the first/start and last/end pixels (inclusive) in a tile into the ‘start_end’ array (that must have two elements). NOTE: this function stores the index of each point, not its coordinates. It will then return the pointer to the start of the tile in the ‘work’ data structure (which does not have to be equal to ‘tile->block’. The outputs of this function are defined to make it easy to parse over an n-dimensional tile. For example, this function is one of the most important parts of the internal processing of in ‘GAL_TILE_PARSE_OPERATE’ function-like macro that is described below. -- Function: gal_data_t * gal_tile_series_from_minmax (gal_data_t *block, size_t *minmax, size_t number) Construct a list of tile(s) given coordinates of the minimum and maximum of each tile. The minimum and maximums are assumed to be inclusive and in C order (slowest dimension first). The returned pointer is an allocated ‘gal_data_t’ array that can later be freed with ‘gal_data_array_free’ (see *note Arrays of datasets::). Internally, each element of the output array points to the next element, so the output may also be treated as a list of datasets (see *note List of gal_data_t::) and passed onto the other functions described in this section. The array keeping the minimum and maximum coordinates for each tile must have the following format. So in total ‘minmax’ must have ‘2*ndim*number’ elements. | min0_d0 | min0_d1 | max0_d0 | max0_d1 | ... ... | minN_d0 | minN_d1 | maxN_d0 | maxN_d1 | -- Function: gal_data_t * gal_tile_block (gal_data_t *tile) Return the dataset that contains ‘tile’'s allocated block of memory. If tile is immediately defined as part of the allocated block, then this is equivalent to ‘tile->block’. However, it is possible to have multiple layers of tiles (where ‘tile->block’ is itself a tile). So this function is the most generic way to get to the actual allocated dataset. -- Function: size_t gal_tile_block_increment (gal_data_t *block, size_t *tsize, size_t num_increment, size_t *coord) Return the increment necessary to start at the next contiguous patch memory associated with a tile. ‘block’ is the allocated block of memory and ‘tsize’ is the size of the tile along every dimension. If ‘coord’ is ‘NULL’, it is ignored. Otherwise, it will contain the coordinate of the start of the next contiguous patch of memory. This function is intended to be used in a loop and ‘num_increment’ is the main variable to this function. For the first time you call this function, it should be ‘1’. In subsequent calls (while you are parsing a tile), it should be increased by one. -- Function: gal_data_t * gal_tile_block_write_const_value (gal_data_t *tilevalues, gal_data_t *tilesll, int withblank, int initialize) Write a constant value for each tile over the area it covers in an allocated dataset that is the size of ‘tile’'s allocated block of memory (found through ‘gal_tile_block’ described above). The arguments to this function are: ‘tilevalues’ This must be an array that has the same number of elements as the nodes in in ‘tilesll’ and in the same order that 'tilesll' elements are parsed (from top to bottom, see *note Linked lists::). As a result the array's number of dimensions is irrelevant, it will be parsed contiguously. ‘tilesll’ The list of input tiles (see *note List of gal_data_t::). Internally, it might be stored as an array (for example, the output of ‘gal_tile_series_from_minmax’ described above), but this function does not care, it will parse the ‘next’ elements to go to the next tile. This function will not pop-from or free the ‘tilesll’, it will only parse it from start to end. ‘withblank’ If the block containing the tiles has blank elements, those blank elements will be blank in the output of this function also, hence the array will be initialized with blank values when this option is called (see below). ‘initialize’ Initialize the allocated space with blank values before writing in the constant values. This can be useful when the tiles do not cover the full allocated block. -- Function: gal_data_t * gal_tile_block_check_tiles (gal_data_t *tilesll) Make a copy of the memory block and fill it with the index of each tile in ‘tilesll’ (counting from 0). The non-filled areas will have blank values. The output dataset will have a type of ‘GAL_TYPE_INT32’ (see *note Library data types::). This function can be used when you want to check the coverage of each tile over the allocated block of memory. It is just a wrapper over the ‘gal_tile_block_write_const_value’ (with ‘withblank’ set to zero). -- Function: void * gal_tile_block_relative_to_other (gal_data_t *tile, gal_data_t *other) Return the pointer corresponding to the start of the region covered by ‘tile’ over the ‘other’ dataset. See the examples in ‘GAL_TILE_PARSE_OPERATE’ for some example applications of this function. -- Function: void gal_tile_block_blank_flag (gal_data_t *tilell, size_t numthreads) Check if each tile in the list has blank values and update its ‘flag’ to mark this check and its result (see *note Generic data container::). The operation will be done on ‘numthreads’ threads. -- Function-like macro: GAL_TILE_PARSE_OPERATE (IN, OTHER, PARSE_OTHER, CHECK_BLANK, OP) Parse ‘IN’ (which can be a tile or a fully allocated block of memory) and do the ‘OP’ operation on it. ‘OP’ can be any combination of C expressions. If ‘OTHER!=NULL’, ‘OTHER’ will be interpreted as a dataset and this macro will allow access to its element(s) and it can optionally be parsed while parsing over ‘IN’. If ‘OTHER’ is a fully allocated block of memory (not a tile), then the same region that is covered by ‘IN’ within its own block will be parsed (the same starting pixel with the same number of pixels in each dimension). Hence, in this case, the blocks of ‘OTHER’ and ‘IN’ must have the same size. When ‘OTHER’ is a tile it must have the same size as ‘IN’ and parsing will start from its starting element/pixel. Also, the respective allocated blocks of ‘OTHER’ and ‘IN’ (if different) may have different sizes. Using ‘OTHER’ (along with ‘PARSE_OTHER’), this function-like macro will thus enable you to parse and define your own operation on two fixed size regions in one or two blocks of memory. In the latter case, they may have different numeric data types, see *note Numeric data types::). The input arguments to this macro are explained below, the expected type of each argument are also written following the argument name: ‘IN (gal_data_t)’ Input dataset, this can be a tile or an allocated block of memory. ‘OTHER (gal_data_t)’ Dataset (‘gal_data_t’) to parse along with ‘IN’. It can be ‘NULL’. In that case, ‘o’ (see description of ‘OP’ below) will be ‘NULL’ and should not be used. If ‘PARSE_OTHER’ is zero, only its first element will be used and the size of this dataset is irrelevant. When ‘OTHER’ is a block of memory, it has to have the same size as the allocated block of ‘IN’. When it s a tile, it has to have the same size as ‘IN’. ‘PARSE_OTHER (int)’ Parse the other dataset along with the input. When this is non-zero and ‘OTHER!=NULL’, then the ‘o’ pointer will be incremented to cover the ‘OTHER’ tile at the same rate as ‘i’, see description of ‘OP’ for ‘i’ and ‘o’. ‘CHECK_BLANK (int)’ If it is non-zero, then the input will be checked for blank values and ‘OP’ will only be called when we are not on a blank element. ‘OP’ Operator: this can be any number of C expressions. This macro is going to define a ‘itype *i’ variable which will increment over each element of the input array/tile. ‘itype’ will be replaced with the C type that corresponds to the type of ‘INPUT’. As an example, if ‘INPUT’'s type is ‘GAL_DATA_UINT16’ or ‘GAL_DATA_FLOAT32’, ‘i’ will be defined as ‘uint16’ or ‘float’ respectively. This function-like macro will also define an ‘otype *o’ which you can use to access an element of the ‘OTHER’ dataset (if ‘OTHER!=NULL’). ‘o’ will correspond to the type of ‘OTHER’ (similar to ‘itype’ and ‘INPUT’ discussed above). If ‘PARSE_OTHER’ is non-zero, then ‘o’ will also be incremented to the same index element but in the other array. You can use these along with any other variable you define before this macro to process the input and/or the other. All variables within this function-like macro begin with ‘tpo_’ except for the three variables listed below. Therefore, as long as you do not start the names of your variables with this prefix everything will be fine. Note that ‘i’ (and possibly ‘o’) will be incremented once by this function-like macro, so do not increment them within ‘OP’. ‘i’ Pointer to the element of ‘INPUT’ that is being parsed with the proper type. ‘o’ Pointer to the element of ‘OTHER’ that is being parsed with the proper type. ‘o’ can only be used if ‘OTHER!=NULL’ and it will be parsed/incremented if ‘PARSE_OTHER’ is non-zero. ‘b’ Blank value in the type of ‘INPUT’. You can use a given tile (‘tile’ on a dataset that it was not initialized with but has the same size, let's call it ‘new’) with the following steps: void *tarray; gal_data_t *tblock; /* `tile->block' must be corrected AFTER `tile->array'. */ tarray = tile->array; tblock = tile->block; tile->array = gal_tile_block_relative_to_other(tile, new); tile->block = new; /* Parse and operate over this region of the `new' dataset. */ GAL_TILE_PARSE_OPERATE(tile, NULL, 0, 0, { YOUR_PROCESSING; }); /* Reset `tile->block' and `tile->array'. */ tile->array=tarray; tile->block=tblock; You can work on the same region of another block in one run of this function-like macro. To do that, you can make a fake tile and pass that as the ‘OTHER’ argument. Below is a demonstration, ‘tile’ is the actual tile that you start with and ‘new’ is the other block of allocated memory. size_t zero=0; gal_data_t *faketile; /* Allocate the fake tile, these can be done outside a loop * (over many tiles). */ faketile=gal_data_alloc(NULL, new->type, 1, &zero, NULL, 0, -1, 1, NULL, NULL, NULL); free(faketile->array); /* To keep things clean. */ free(faketile->dsize); /* To keep things clean. */ faketile->block = new; faketile->ndim = new->ndim; /* These can be done in a loop (over many tiles). */ faketile->size = tile->size; faketile->dsize = tile->dsize; faketile->array = gal_tile_block_relative_to_other(tile, new); /* Do your processing.... in a loop (over many tiles). */ GAL_TILE_PARSE_OPERATE(tile, faketile, 1, 1, { YOUR_PROCESSING_EXPRESSIONS; }); /* Clean up (outside the loop). */ faketile->array=NULL; faketile->dsize=NULL; gal_data_free(faketile);  File: gnuastro.info, Node: Tile grid, Prev: Independent tiles, Up: Tessellation library 12.3.15.2 Tile grid ................... One very useful application of tiles is to completely cover an input dataset with tiles. Such that you know every pixel/data-element of the input image is covered by only one tile. The constructs in this section allow easy definition of such a tile structure. They will create lists of tiles that are also usable by the general tools discussed in *note Independent tiles::. As discussed in *note Tessellation::, (mainly raw) astronomical images will mostly require two layers of tessellation, one for amplifier channels which all have the same size and another (smaller tile-size) tessellation over each channel. Hence, in this section we define a general structure to keep the main parameters of this two-layer tessellation and help in benefiting from it. -- Type (C struct): gal_tile_two_layer_params The general structure to keep all the necessary parameters for a two-layer tessellation. struct gal_tile_two_layer_params { /* Inputs */ size_t *tilesize; /*******************************/ size_t *numchannels; /* These parameters have to be */ float remainderfrac; /* filled manually before */ uint8_t workoverch; /* calling the functions in */ uint8_t checktiles; /* this section. */ uint8_t oneelempertile; /*******************************/ /* Internal parameters. */ size_t ndim; size_t tottiles; size_t tottilesinch; size_t totchannels; size_t *channelsize; size_t *numtiles; size_t *numtilesinch; char *tilecheckname; size_t *permutation; size_t *firsttsize; /* Tile and channel arrays (which are also lists). */ gal_data_t *tiles; gal_data_t *channels; }; -- Function: size_t * gal_tile_full (gal_data_t *input, size_t *regular, float remainderfrac, gal_data_t **out, size_t multiple, size_t **firsttsize) Cover the full dataset with (mostly) identical tiles and return the number of tiles created along each dimension. The regular tile size (along each dimension) is determined from the ‘regular’ array. If ‘input’'s size is not an exact multiple of ‘regular’ for each dimension, then the tiles touching the edges in that dimension will have a different size to fully cover every element of the input (depending on ‘remainderfrac’). The output is an array with the same dimensions as ‘input’ which contains the number of tiles along each dimension. See *note Tessellation:: for a description of its application in Gnuastro's programs and ‘remainderfrac’, just note that this function defines only one layer of tiles. This is a low-level function (independent of the ‘gal_tile_two_layer_params’ structure defined above). If you want a two-layer tessellation, directly call ‘gal_tile_full_two_layers’ that is described below. The input arguments to this function are: ‘input’ The main dataset (allocated block) which you want to create a tessellation over (only used for its sizes). So ‘input’ may be a tile also. ‘regular’ The size of the regular tiles along each of the input's dimensions. So it must have the same number of elements as the dimensions of ‘input’ (or ‘input->ndim’). ‘remainderfrac’ The significant fraction of the remainder space to see if it should be split into two and put on both sides of a dimension or not. This is thus only relevant ‘input’ length along a dimension is not an exact multiple of the regular tile size along that dimension. See *note Tessellation:: for a more thorough discussion. ‘out’ Pointer to the array of data structures that will keep all the tiles (see *note Arrays of datasets::). If ‘*out==NULL’, then the necessary space to keep all the tiles will be allocated. If not, then all the tile information will be filled from the dataset that ‘*out’ points to, see ‘multiple’ for more. ‘multiple’ When ‘*out==NULL’ (and thus will be allocated by this function), allocate space for ‘multiple’ times the number of tiles needed. This can be very useful when you have several more identically sized ‘inputs’, and you want all their tiles to be allocated (and thus indexed) together, even though they have different ‘block’ datasets (that then link to one allocated space). See the definition of channels in *note Tessellation:: and ‘gal_tile_full_two_layers’ below. ‘firsttsize’ The size of the first tile along every dimension. This is only different from the regular tile size when ‘regular’ is not an exact multiple of ‘input’'s length along every dimension. This array is allocated internally by this function. -- Function: void gal_tile_full_sanity_check (char *filename, char *hdu, gal_data_t *input, struct gal_tile_two_layer_params *tl) Make sure that the input parameters (in ‘tl’, short for two-layer) correspond to the input dataset. ‘filename’ and ‘hdu’ are only required for error messages. Also, allocate and fill the ‘tl->channelsize’ array. -- Function: void gal_tile_full_two_layers (gal_data_t *input, struct gal_tile_two_layer_params *tl) Create the two layered tessellation in ‘tl’. The general set of steps you need to take to define the two-layered tessellation over an image can be seen in the example code below. gal_data_t *input; struct gal_tile_two_layer_params tl; char *filename="input.fits", *hdu="1"; /* Set all the inputs shown in the structure definition. */ ... /* Read the input dataset. */ input=gal_fits_img_read(filename, hdu, -1, 1, NULL); /* Do a sanity check and preparations. */ gal_tile_full_sanity_check(filename, hdu, input, &tl); /* Build the two-layer tessellation*/ gal_tile_full_two_layers(input, &tl); /* `tl.tiles' and `tl.channels' are now a lists of tiles.*/ -- Function: void gal_tile_full_permutation (struct gal_tile_two_layer_params *tl) Make a permutation to allow the conversion of tile location in memory to its location in the full input dataset and put it in ‘tl->permutation’. If a permutation has already been defined for the tessellation, this function will not do anything. If permutation will not be necessary (there is only one channel or one dimension), then this function will not do anything (‘tl->permutation’ must have been initialized to ‘NULL’). When there is only one channel OR one dimension, the tiles are allocated in memory in the same order that they represent the input data. However, to make channel-independent processing possible in a generic way, the tiles of each channel are allocated contiguously. So, when there is more than one channel AND more than one dimension, the index of the tile does not correspond to its position in the grid covering the input dataset. The example below may help clarify: assume you have a 6x6 tessellation with two channels in the horizontal and one in the vertical. On the left you can see how the tile IDs correspond to the input dataset. NOTE how '03' is on the second row, not on the first after '02'. On the right, you can see how the tiles are stored in memory (and shown if you simply write the array into a FITS file for example). Corresponding to input In memory ---------------------- -------------- 15 16 17 33 34 35 30 31 32 33 34 35 12 13 14 30 31 32 24 25 26 27 28 29 09 10 11 27 28 29 18 19 20 21 22 23 06 07 08 24 25 26 <-- 12 13 14 15 16 17 03 04 05 21 22 23 06 07 08 09 10 11 00 01 02 18 19 20 00 01 02 03 04 05 As a result, if your values are stored in same order as the tiles, and you want them in over-all memory (for example, to save as a FITS file), you need to permute the values: gal_permutation_apply(values, tl->permutation); If you have values over-all and you want them in tile-order, you can apply the inverse permutation: gal_permutation_apply_inverse(values, tl->permutation); Recall that this is the definition of permutation in this context: permute: IN_ALL[ i ] = IN_MEMORY[ perm[i] ] inverse: IN_ALL[ perm[i] ] = IN_MEMORY[ i ] -- Function: void gal_permutation_apply_onlydim0 (gal_data_t *input, size_t *permutation) Similar to ‘gal_permutation_apply’, but when the dataset is 2-dimensional, permute each row (dimension 1 in C) as one element. In other words, only permute along dimension 0. The ‘permutation’ array should therefore only have ‘input->dsize[0]’ elements. -- Function: void gal_tile_full_values_write (gal_data_t *tilevalues, struct gal_tile_two_layer_params *tl, int withblank, char *filename, gal_fits_list_key_t *keys, int freekeys) Write one value for each tile into a file. It is important to note that the values in ‘tilevalues’ must be ordered in the same manner as the tiles, so ‘tilevalues->array[i]’ is the value that should be given to ‘tl->tiles[i]’. The ‘tl->permutation’ array must have been initialized before calling this function with ‘gal_tile_full_permutation’. If ‘withblank’ is non-zero, then block structure of the tiles will be checked and all blank pixels in the block will be blank in the final output file also. -- Function: gal_data_t * gal_tile_full_values_smooth (gal_data_t *tilevalues, struct gal_tile_two_layer_params *tl, size_t width, size_t numthreads) Smooth the given values with a flat kernel of the given ‘width’. This cannot be done manually because if ‘tl->workoverch==0’, tiles in different channels must not be mixed/smoothed. Also the tiles are contiguous within the channel, not within the image, see the description under ‘gal_tile_full_permutation’. -- Function: size_t gal_tile_full_id_from_coord (struct gal_tile_two_layer_params *tl, size_t *coord) Return the ID of the tile that corresponds to the coordinates ‘coord’. Having this ID, you can use the ‘tl->tiles’ array to get to the proper tile or read/write a value into an array that has one value per tile. -- Function: void gal_tile_full_free_contents (struct gal_tile_two_layer_params *tl) Free all the allocated arrays within ‘tl’.  File: gnuastro.info, Node: Bounding box, Next: Polygons, Prev: Tessellation library, Up: Gnuastro library 12.3.16 Bounding box (‘box.h’) ------------------------------ Functions related to reporting the bounding box of certain inputs are declared in ‘gnuastro/box.h’. All coordinates in this header are in the FITS format (first axis is the horizontal and the second axis is vertical). -- Function: void gal_box_bound_ellipse_extent (double a, double b, double theta_deg, double *extent) Return the maximum extent along each dimension of the given ellipse from the center of the ellipse. Therefore this is half the extent of the box in each dimension. ‘a’ is the ellipse semi-major axis, ‘b’ is the semi-minor axis, ‘theta_deg’ is the position angle in degrees. The extent in each dimension is in floating point format and stored in ‘extent’ which must already be allocated before this function. -- Function: void gal_box_bound_ellipse (double a, double b, double theta_deg, long *width) Any ellipse can be enclosed into a rectangular box. This function will write the height and width of that box where ‘width’ points to. It assumes the center of the ellipse is located within the central pixel of the box. ‘a’ is the ellipse semi-major axis length, ‘b’ is the semi-minor axis, ‘theta_deg’ is the position angle in degrees. The ‘width’ array will contain the output size in long integer type. ‘width[0]’, and ‘width[1]’ are the number of pixels along the first and second FITS axis. Since the ellipse center is assumed to be in the center of the box, all the values in ‘width’ will be an odd integer. -- Function: void gal_box_bound_ellipsoid_extent (double *semiaxes, double *euler_deg, double *extent) Return the maximum extent along each dimension of the given ellipsoid from its center. Therefore this is half the extent of the box in each dimension. The semi-axis lengths of the ellipsoid must be present in the 3 element ‘semiaxis’ array. The ‘euler_deg’ array contains the three ellipsoid Euler angles in degrees. For a description of the Euler angles, see description of ‘gal_box_bound_ellipsoid’ below. The extent in each dimension is in floating point format and stored in ‘extent’ which must already be allocated before this function. -- Function: void gal_box_bound_ellipsoid (double *semiaxes, double *euler_deg, long *width) Any ellipsoid can be enclosed into a rectangular volume/box. The purpose of this function is to give the integer size/width of that box. The semi-axes lengths of the ellipse must be in the ‘semiaxes’ array (with three elements). The major axis length must be the first element of ‘semiaxes’. The only other condition is that the next two semi-axes must both be smaller than the first. The orientation of the major axis is defined through three proper Euler angles (ZXZ order in degrees) that are given in the ‘euler_deg’ array. The ‘width’ array will contain the output size in long integer type (in FITS axis order). Since the ellipsoid center is assumed to be in the center of the box, all the values in ‘width’ will be an odd integer. The proper Euler angles can be defined in many ways (which axes to rotate about). For a full description of the Euler angles, please see Wikipedia (https://en.wikipedia.org/wiki/Euler_angles). Here we adopt the ZXZ (or $Z_1X_2Z_3$) proper Euler angles were the first rotation is done around the Z axis, the second one about the (rotated) X axis and the third about the (rotated) Z axis. -- Function: void gal_box_border_from_center (double center, size_t ndim, long *width, long *fpixel, long *lpixel) Given the center coordinates in ‘center’ and the ‘width’ (along each dimension) of a box, return the coordinates of the first (‘fpixel’) and last (‘lpixel’) pixels. All arrays must have ‘ndim’ elements (one for each dimension). -- Function: void gal_box_border_rotate_around_center (long *fpixel, long *lpixel, size_t ndim, float rotate_deg) Modify the input first and last pixels (‘fpixel’ and ‘lpixel’, that you can estimate with ‘gal_box_border_from_center’) to account for the given rotation (in units of degrees) in 2D (currently ‘ndim’ can only have a value of ‘2’). -- Function: int gal_box_overlap (long *naxes, long *fpixel_i, long *lpixel_i, long *fpixel_o, long *lpixel_o, size_t ndim) An ‘ndim’-dimensional dataset of size ‘naxes’ (along each dimension, in FITS order) and a box with first and last (inclusive) coordinate of ‘fpixel_i’ and ‘lpixel_i’ is given. This box does not necessarily have to lie within the dataset, it can be outside of it, or only partially overlap. This function will change the values of ‘fpixel_i’ and ‘lpixel_i’ to exactly cover the overlap in the input dataset's coordinates. This function will return 1 if there is an overlap and 0 if there is not. When there is an overlap, the coordinates of the first and last pixels of the overlap will be put in ‘fpixel_o’ and ‘lpixel_o’.  File: gnuastro.info, Node: Polygons, Next: Qsort functions, Prev: Bounding box, Up: Gnuastro library 12.3.17 Polygons (‘polygon.h’) ------------------------------ Polygons are commonly necessary in image processing. For example, in Crop they are used for cutting out non-rectangular regions of a image (see *note Crop::), and in Warp, for mapping different pixel grids over each other (see *note Warp::). Polygons come in two classes: convex and concave (or generally, non-convex!), see below for a demonstration. Convex polygons are those where all inner angles are less than 180 degrees. By contrast, a convex polygon is one where an inner angle may be more than 180 degress. Concave Polygon Convex Polygon D --------C D------------- C \ | E / | \E | \ | / | \ | A--------B A ----------B In all the functions here the vertices (and points) are defined as an array. So a polygon with 4 vertices will be identified with an array of 8 elements with the first two elements keeping the 2D coordinates of the first vertice and so on. -- Macro: GAL_POLYGON_MAX_CORNERS The largest number of vertices a polygon can have in this library. -- Macro: GAL_POLYGON_ROUND_ERR We have to consider floating point round-off errors when dealing with polygons. For example, we will take ‘A’ as the maximum of ‘A’ and ‘B’ when ‘A>B-GAL_POLYGON_ROUND_ERR’. -- Function: void gal_polygon_vertices_sort_convex (double *in, size_t n, size_t *ordinds) We have a simple polygon (that can result from projection, so its edges do not collide or it does not have holes) and we want to order its corners in an anticlockwise fashion. This is necessary for clipping it and finding its area later. The input vertices can have practically any order. The input (‘in’) is an array containing the coordinates (two values) of each vertice. ‘n’ is the number of corners. So ‘in’ should have ‘2*n’ elements. The output (‘ordinds’) is an array with ‘n’ elements specifying the indices in order. This array must have been allocated before calling this function. The indexes are output for more generic usage, for example, in a homographic transform (necessary in warping an image, see *note Linear warping basics::), the necessary order of vertices is the same for all the pixels. In other words, only the positions of the vertices change, not the way they need to be ordered. Therefore, this function would only be necessary once. As a summary, the input is unchanged, only ‘n’ values will be put in the ‘ordinds’ array. Such that calling the input coordinates in the following fashion will give an anti-clockwise order when there are 4 vertices: 1st vertice: in[ordinds[0]*2], in[ordinds[0]*2+1] 2nd vertice: in[ordinds[1]*2], in[ordinds[1]*2+1] 3rd vertice: in[ordinds[2]*2], in[ordinds[2]*2+1] 4th vertice: in[ordinds[3]*2], in[ordinds[3]*2+1] The implementation of this is very similar to the Graham scan in finding the Convex Hull. However, in projection we will never have a concave polygon (the left condition below, where this algorithm will get to E before D), we will always have a convex polygon (right case) or E will not exist! This is because we are always going to be calculating the area of the overlap between a quadrilateral and the pixel grid or the quadrilateral itself. The ‘GAL_POLYGON_MAX_CORNERS’ macro is defined so there will be no need to allocate these temporary arrays separately. Since we are dealing with pixels, the polygon cannot really have too many vertices. -- Function: int gal_polygon_is_convex (double *v, size_t n) Returns ‘1’ if the polygon is convex with vertices defined by ‘v’ and ‘0’ if it is a concave polygon. Note that the vertices of the polygon should be sorted in an anti-clockwise manner. -- Function: double gal_polygon_area_flat (double *v, size_t n) Find the area of a polygon with vertices defined in ‘v’ on a euclidian (flat) coordinate system. ‘v’ points to an array of doubles which keep the positions of the vertices such that ‘v[0]’ and ‘v[1]’ are the positions of the first vertice to be considered. -- Function: double gal_polygon_area_sky (double *v, size_t n) Find the area of a polygon with vertices defined in ‘v’ on a celestial coordinate system. This is a coordinate system where the first coordinate goes from 0 to 360 (increasing to the right), while the second coordinate ranges from -90 to +90 (on the poles). ‘v’ points to an array of doubles which keep the positions of the vertices such that ‘v[0]’ and ‘v[1]’ are the positions of the first vertice to be considered. This function uses an approximation to account for the curvature of the sky and the different nature of spherical coordinates with respect to the flat coordinate system. Bug 64617 (https://savannah.gnu.org/bugs/index.php?64617) has been defined in Gnuastro to address this problem. Please check that bug in case it has been fixed. Until this bug is fixed, here are some tips: • Subtract the RA and Dec of all the vertice coordinates from a constant so the center of the polygon falls on (RA, Dec) of (180,0). The sphere has a similar nature everywhere on it, so shifting the polygon vertices will not change its area; this also removes issues with the RA=0 or RA=360 coordinate and decrease issues caused by RA depending on declination. • These approximations should not cause any statistically significant error on normal (less than a few degrees) scales. But it won't hurt to do a small sanity check for your particular usage scenario. • Any help (even in the mathematics of the problem; not necessary programming) would be appreciated (we didn't have time to derive the necessary equations), so if you have some background in this and can prepare the mathematical description of the problem, please get in touch. -- Function: int gal_polygon_is_inside (double *v, double *p, size_t n) Returns ‘0’ if point ‘p’ in inside a polygon, either convex or concave. The vertices of the polygon are defined by ‘v’ and ‘0’ otherwise, they have to be ordered in an anti-clockwise manner. This function uses the winding number algorithm (https://en.wikipedia.org/wiki/Point_in_polygon#Winding_number_algorithm), to check the points. Note that this is a generic function (working on both concave and convex polygons, so if you know before-hand that your polygon is convex, it is much more efficient to use ‘gal_polygon_is_inside_convex’. -- Function: int gal_polygon_is_inside_convex (double *v, double *p, size_t n) Return ‘1’ if the point ‘p’ is within the polygon whose vertices are defined by ‘v’. The polygon is assumed to be convex, for a more generic function that deals with concave and convex polygons, see ‘gal_polygon_is_inside’. Note that the vertices of the polygon have to be sorted in an anti-clock-wise manner. -- Function: int gal_polygon_ppropin (double *v, double *p, size_t n) Similar to ‘gal_polygon_is_inside_convex’, except that if the point ‘p’ is on one of the edges of a polygon, this will return ‘0’. -- Function: int gal_polygon_is_counterclockwise (double *v, size_t n) Returns ‘1’ if the sorted polygon has a counter-clockwise orientation and ‘0’ otherwise. This function uses the concept of "winding", which defines the relative order in which the vertices of a polygon are listed to determine the orientation of vertices. For complex polygons (where edges, or sides, intersect), the most significant orientation is returned. In a complex polygon, when the alternative windings are equal (for example, an ‘8’-shape) it will return ‘1’ (as if it was counter-clockwise). Note that the polygon vertices have to be sorted before calling this function. -- Function: int gal_polygon_to_counterclockwise (double *v, size_t n) Arrange the vertices of the sorted polygon in place, to be in a counter-clockwise direction. If the input polygon already has a counter-clockwise direction it will not touch the input. The return value is ‘1’ on successful execution. This function is just a wrapper over ‘gal_polygon_is_counterclockwise’, and will reverse the order of the vertices when necessary. -- Function: void gal_polygon_clip (double *s, size_t n, double *c, size_t m, double *o, size_t *numcrn) Clip (find the overlap of) two polygons. This function uses the Sutherland-Hodgman (https://en.wikipedia.org/wiki/Sutherland%E2%80%93Hodgman_algorithm) polygon clipping algorithm. Note that the vertices of both polygons have to be sorted in an anti-clock-wise manner. The Pseudocode from Wikipedia: List outputList = subjectPolygon; for (Edge clipEdge in clipPolygon) do List inputList = outputList; outputList.clear(); Point S = inputList.last; for (Point E in inputList) do if (E inside clipEdge) then if (S not inside clipEdge) then outputList.add(ComputeIntersection(S,E,clipEdge)); end if outputList.add(E); else if (S inside clipEdge) then outputList.add(ComputeIntersection(S,E,clipEdge)); end if S = E; done done The difference is that we are not using lists, but arrays to keep polygon vertices. The two polygons are called Subject ‘s’ and Clip ‘c’ with ‘n’ and ‘m’ vertices respectively. The output is stored in ‘o’ and the number of elements in the output are stored in what ‘*numcrn’ (for number of corners) points to. -- Function: void gal_polygon_vertices_sort (double *vertices, size_t n, size_t *ordinds) Sort the indices of the un-ordered ‘vertices’ array to a counter-clockwise polygon in the already allocated space of ‘ordinds’. It is assumed that there are ‘n’ vertices, and thus that ‘vertices’ contains ‘2*n’ elements where the two coordinates of the first vertice occupy the first two elements of the array and so on. The polygon can be both concave and convex (see the start of this section). However, note that for concave polygons there is no unique sort from an un-ordered set of vertices. So after this function you may want to use ‘gal_polygon_is_convex’ and print a warning to check the output if the polygon was concave. Note that the contents of the ‘vertices’ array are left untouched by this function. If you want to write the ordered vertice coordinates in another array with the same size, you can use a loop like this: for(i=0;i<n;++i) { ordered[i*2 ] = vertices[ ordinds[i]*2 ]; ordered[i*2+1] = vertices[ ordinds[i]*2 + 1]; } In this algorithm, we find the rightmost and leftmost points (based on their x-coordinate) and use the diagonal vector between those points to group the points in arrays based on their position with respect to this vector. For anticlockwise sorting, all the points below the vector are sorted by their ascending x-coordinates and points above the vector are sorted in decreasing order using ‘qsort’. Finally, both these arrays are merged together to get the final sorted array of points, from which the points are indexed into the ‘ordinds’ using linear search. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro.info-10������������������������������������������������������������������0000644�0001750�0001750�00001100352�14557514041�012472� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is gnuastro.info, produced by makeinfo version 7.1 from gnuastro.texi. This book documents version 0.22 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * Match: (gnuastro)Match. Match two separate catalogs. * astmatch: (gnuastro)Invoking astmatch. Options to Match. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Segment: (gnuastro)Segment. Segment detections based on signal structure. * astsegment: (gnuastro)Invoking astsegment. Options to Segment. * Query: (gnuastro)Query. Access remote databases for downloading data. * astquery: (gnuastro)Invoking astquery. Options to Query. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. * astscript: (gnuastro)Installed scripts. Gnuastro's installed scripts. * astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script * astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script * astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script * astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script * astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script * astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script * astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script * astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script * astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script * astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script * astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script END-INFO-DIR-ENTRY  File: gnuastro.info, Node: Qsort functions, Next: K-d tree, Prev: Polygons, Up: Gnuastro library 12.3.18 Qsort functions (‘qsort.h’) ----------------------------------- When sorting a dataset is necessary, the C programming language provides the ‘qsort’ (Quick sort) function. ‘qsort’ is a generic function which allows you to sort any kind of data structure (not just a single array of numbers). To define "greater" and "smaller" (for sorting), ‘qsort’ needs another function, even for simple numerical types. The functions introduced in this section are to passed onto ‘qsort’. Note that larger and smaller operators are not defined on NaN elements. Therefore, if the input array is a floating point type, and contains NaN values, the relevant functions of this section are going to put the NaN elements at the end of the list (after the sorted non-NaN elements), irrespective of the requested sorting order (increasing or decreasing). The first class of functions below (with ‘TYPE’ in their names) can be used for sorting a simple numeric array. Just replace ‘TYPE’ with the dataset's numeric datatype. The second set of functions can be used to sort indices (leave the actual numbers untouched). To use the second set of functions, a global variable or structure are also necessary as described below. -- Global variable: gal_qsort_index_single Pointer to an array (for example, ‘float *’ or ‘int *’) to use as a reference in ‘gal_qsort_index_single_TYPE_d’ or ‘gal_qsort_index_single_TYPE_i’, see the explanation of these functions for more. Note that if _more than one_ array is to be sorted in a multi-threaded operation, these functions will not work as expected. However, when all the threads just sort the indices based on a _single array_, this global variable can safely be used in a multi-threaded scenario. -- Type (C struct): gal_qsort_index_multi Structure to get the sorted indices of multiple datasets on multiple threads with ‘gal_qsort_index_multi_d’ or ‘gal_qsort_index_multi_i’. Note that the ‘values’ array will not be changed by these functions, it is only read. Therefore all the ‘values’ elements in the (to be sorted) array of ‘gal_qsort_index_multi’ must point to the same place. struct gal_qsort_index_multi { float *values; /* Array of values (same in all). */ size_t index; /* Index of each element to be sorted. */ }; -- Function: int gal_qsort_TYPE_d (const void *a, const void *b) When passed to ‘qsort’, this function will sort a ‘TYPE’ array in decreasing order (first element will be the largest). Please replace ‘TYPE’ (in the function name) with one of the *note Numeric data types::, for example, ‘gal_qsort_int32_d’, or ‘gal_qsort_float64_d’. -- Function: int gal_qsort_TYPE_i (const void *a, const void *b) When passed to ‘qsort’, this function will sort a ‘TYPE’ array in increasing order (first element will be the smallest). Please replace ‘TYPE’ (in the function name) with one of the *note Numeric data types::, for example, ‘gal_qsort_int32_i’, or ‘gal_qsort_float64_i’. -- Function: int gal_qsort_index_single_TYPE_d (const void *a, const void *b) When passed to ‘qsort’, this function will sort a ‘size_t’ array based on decreasing values in the ‘gal_qsort_index_single’. The global ‘gal_qsort_index_single’ pointer has a ‘void *’ pointer which will be cast to the proper type based on this function: for example ‘gal_qsort_index_single_uint16_d’ will cast the array to an unsigned 16-bit integer type. The array that ‘gal_qsort_index_single’ points to will not be changed, it is only read. For example, see this demo program: #include <stdio.h> #include <stdlib.h> /* qsort is defined in stdlib.h. */ #include <gnuastro/qsort.h> int main (void) { size_t s[4]={0, 1, 2, 3}; float f[4]={1.3,0.2,1.8,0.1}; gal_qsort_index_single=f; qsort(s, 4, sizeof(size_t), gal_qsort_index_single_float_d); printf("%zu, %zu, %zu, %zu\n", s[0], s[1], s[2], s[3]); return EXIT_SUCCESS; } The output will be: ‘2, 0, 1, 3’. -- Function: int gal_qsort_index_single_TYPE_i (const void *a, const void *b) Similar to ‘gal_qsort_index_single_TYPE_d’, but will sort the indexes such that the values of ‘gal_qsort_index_single’ can be parsed in increasing order. -- Function: int gal_qsort_index_multi_d (const void *a, const void *b) When passed to ‘qsort’ with an array of ‘gal_qsort_index_multi’, this function will sort the array based on the values of the given indices. The sorting will be ordered according to the ‘values’ pointer of ‘gal_qsort_index_multi’. Note that ‘values’ must point to the same place in all the structures of the ‘gal_qsort_index_multi’ array. This function is only useful when the indices of multiple arrays on multiple threads are to be sorted. If your program is single threaded, or all the indices belong to a single array (sorting different sub-sets of indices in a single array on multiple threads), it is recommended to use ‘gal_qsort_index_single_d’. -- Function: int gal_qsort_index_multi_i (const void *a, const void *b) Similar to ‘gal_qsort_index_multi_d’, but the result will be sorted in increasing order (first element will have the smallest value).  File: gnuastro.info, Node: K-d tree, Next: Permutations, Prev: Qsort functions, Up: Gnuastro library 12.3.19 K-d tree (‘kdtree.h’) ----------------------------- K-d tree is a space-partitioning binary search tree for organizing points in a k-dimensional space. They are a very useful data structure for multidimensional searches like range searches and nearest neighbor searches. For a more formal and complete introduction see the Wikipedia page (https://en.wikipedia.org/wiki/K-d_tree). Each non-leaf node in a k-d tree divides the space into two parts, known as half-spaces. To select the top/root node for partitioning, we find the median of the points and make a hyperplane normal to the first dimension. The points to the left of this space are represented by the left subtree of that node and points to the right of the space are represented by the right subtree. This is then repeated for all the points in the input, thus associating a "left" and "right" branch for each input point. Gnuastro uses the standard algorithms of the k-d tree with one small difference that makes it much more memory and CPU optimized. The set of input points that define the tree nodes are given as a list of Gnuastro's data container type, see *note List of gal_data_t::. Each ‘gal_data_t’ in the list represents the point's coordinate in one dimension, and the first element in the list is the first dimension. Hence the number of data values in each ‘gal_data_t’ (which must be equal in all of them) represents the number of points. This is the same format that Gnuastro's Table reading/writing functions read/write columns in tables, see *note Table input output::. The output k-d tree is a list of two ‘gal_data_t’s, representing the input's row-number (or index, counting from 0) of the left and right subtrees of each row. Each ‘gal_data_t’ thus has the same number of rows (or points) as the input, but only containing integers with a type of ‘uint32_t’ (unsigned 32-bit integer). If a node has no left, or right subtree, then ‘GAL_BLANK_UINT32’ will be used. Below you can see the simple tree for 2D points from Wikipedia. The input point coordinates are represented as two input ‘gal_data_t’s (‘X’ and ‘Y’, where ‘X->next=Y’ and ‘Y->next=NULL’). If you had three dimensional points, you could define an extra ‘gal_data_t’ such that ‘Y->next=Z’ and ‘Z->next=NULL’. The output is always a list of two ‘gal_data_t’s, where the first one contains the index of the left sub-tree in the input, and the second one, the index of the right subtree. The index of the root node (‘0’ in the case below(1)) is also returned as a single number. INDEX INPUT OUTPUT K-D Tree (as guide) X --> Y LEFT --> RIGHT (visualized) ---------- ------- -------------- ------------------ 0 5 4 1 2 (5,4) 1 2 3 BLANK 4 / \ 2 7 2 5 3 (2,3) \ 3 9 6 BLANK BLANK \ (7,2) 4 4 7 BLANK BLANK (4,7) / \ 5 8 1 BLANK BLANK (8,1) (9,6) This format is therefore scalable to any number of dimensions: the number of dimensions are determined from the number of nodes in the input list of ‘gal_data_t’s (for example, using ‘gal_list_data_number’). In Gnuastro's k-d tree implementation, there are thus no special structures to keep every tree node (which would take extra memory and would need to be moved around as the tree is being created). Everything is done internally on the index of each point in the input dataset: the only thing that is flipped/sorted during tree creation is the index to the input row for any number of dimensions. As a result, Gnuastro's k-d tree implementation is very memory and CPU efficient and its two output columns can directly be written into a standard table (without having to define any special binary format). -- Function: gal_data_t * gal_kdtree_create (gal_data_t *coords_raw, size_t *root) Create a k-d tree in a bottom-up manner (from leaves to the root). This function returns two ‘gal_data_t’s connected as a list, see description above. The first dataset contains the indexes of left and right nodes of the subtrees for each input node. The index of the root node is written into the memory that ‘root’ points to. ‘coords_raw’ is the list of the input points (one ‘gal_data_t’ per dimension, see above). If the input dataset has no data (‘coords_raw->size==0’), this function will return a ‘NULL’ pointer. For example, assume you have the simple set of points below (from the visualized example at the start of this section) in a plain-text file called ‘coordinates.txt’: $ cat coordinates.txt 5 4 2 3 7 2 9 6 4 7 8 1 With the program below, you can calculate the kd-tree, and write it in a FITS file (while keeping the root index as a FITS keyword inside of it). #include <stdio.h> #include <gnuastro/table.h> #include <gnuastro/kdtree.h> int main (void) { gal_data_t *input, *kdtree; char kdtreefile[]="kd-tree.fits"; char inputfile[]="coordinates.txt"; /* To write the root within the saved file. */ size_t root; char *unit="index"; char *keyname="KDTROOT"; gal_fits_list_key_t *keylist=NULL; char *comment="k-d tree root index (counting from 0)."; /* Read the input table. Note: this assumes the table only * contains your input point coordinates (one column for each * dimension). If it contains more columns with other properties * for each point, you can specify which columns to read by * name or number, see the documentation of 'gal_table_read'. */ input=gal_table_read(inputfile, "1", NULL, NULL, GAL_TABLE_SEARCH_NAME, 0, -1, 0, NULL); /* Construct a k-d tree. The index of root is stored in `root` */ kdtree=gal_kdtree_create(input, &root); /* Write the k-d tree to a file and write root index and input * name as FITS keywords ('gal_table_write' frees 'keylist').*/ gal_fits_key_list_title_add(&keylist, "k-d tree parameters", 0); gal_fits_key_write_filename("KDTIN", inputfile, &keylist, 0, 1); gal_fits_key_list_add_end(&keylist, GAL_TYPE_SIZE_T, keyname, 0, &root, 0, comment, 0, unit, 0); gal_table_write(kdtree, &keylist, NULL, GAL_TABLE_FORMAT_BFITS, kdtreefile, "kdtree", 0, 1); /* Clean up and return. */ gal_list_data_free(input); gal_list_data_free(kdtree); return EXIT_SUCCESS; } You can inspect the saved k-d tree FITS table with Gnuastro's *note Table:: (first command below), and you can see the keywords containing the root index with *note Fits:: (second command below): asttable kd-tree.fits astfits kd-tree.fits -h1 -- Function: size_t gal_kdtree_nearest_neighbour (gal_data_t *coords_raw, gal_data_t *kdtree, size_t root, double *point, double *least_dist) Returns the index of the nearest input point to the query point (‘point’, assumed to be an array with same number of elements as ‘gal_data_t’s in ‘coords_raw’). The distance between the query point and its nearest neighbor is stored in the space that ‘least_dist’ points to. This search is efficient due to the constant checking for the presence of possible best points in other branches. If it is not possible for the other branch to have a better nearest neighbor, that branch is not searched. As an example, let's use the k-d tree that was created in the example of ‘gal_kdtree_create’ (above) and find the nearest row to a given coordinate (‘point’). This will be a very common scenario, especially in large and multi-dimensional datasets where the k-d tree creation can take long and you do not want to re-create the k-d tree every time. In the ‘gal_kdtree_create’ example output, we also wrote the k-d tree root index as a FITS keyword (‘KDTROOT’), so after loading the two table data (input coordinates and k-d tree), we will read the root from the FITS keyword. This is a very simple example, but the scalability is clear: for example, it is trivial to parallelize (see *note Library demo - multi-threaded operation::). #include <stdio.h> #include <gnuastro/table.h> #include <gnuastro/kdtree.h> int main (void) { /* INPUT: desired point. */ double point[2]={8.9,5.9}; /* Same as example in description of 'gal_kdtree_create'. */ gal_data_t *input, *kdtree; char kdtreefile[]="kd-tree.fits"; char inputfile[]="coordinates.txt"; /* Processing variables of this function. */ char kdtreehdu[]="1"; double *in_x, *in_y, least_dist; size_t root, nkeys=1, nearest_index; gal_data_t *rkey, *keysll=gal_data_array_calloc(nkeys); /* Read the input coordinates, see comments in example of * 'gal_kdtree_create' for more. */ input=gal_table_read(inputfile, "1", NULL, NULL, GAL_TABLE_SEARCH_NAME, 0, -1, 0, NULL); /* Read the k-d tree contents (created before). */ kdtree=gal_table_read(kdtreefile, "1", NULL, NULL, GAL_TABLE_SEARCH_NAME, 0, -1, 0, NULL); /* Read the k-d tree root index from the header keyword. * See example in description of 'gal_fits_key_read_from_ptr'.*/ keysll[0].name="KDTROOT"; keysll[0].type=GAL_TYPE_SIZE_T; gal_fits_key_read(kdtreefile, kdtreehdu, keysll, 0, 0, NULL); keysll[0].name=NULL; /* Since we did not allocate it. */ rkey=gal_data_copy_to_new_type(&keysll[0], GAL_TYPE_SIZE_T); root=((size_t *)(rkey->array))[0]; /* Find the nearest neighbour of the point. */ nearest_index=gal_kdtree_nearest_neighbour(input, kdtree, root, point, &least_dist); /* Print the results. */ in_x=input->array; in_y=input->next->array; printf("(%g, %g): nearest is (%g, %g), with a distance of %g\n", point[0], point[1], in_x[nearest_index], in_y[nearest_index], least_dist); /* Clean up and return. */ gal_data_free(rkey); gal_list_data_free(input); gal_list_data_free(kdtree); gal_data_array_free(keysll, nkeys, 1); return EXIT_SUCCESS; } ---------- Footnotes ---------- (1) This example input table is the same as the example in Wikipedia (as of December 2020). However, on the Wikipedia output, the root node is (7,2), not (5,4). The difference is primarily because there are 6 rows and the median element of an even number of elements can vary by integer calculation strategies. Here we use 0-based indexes for finding median and round to the smaller integer.  File: gnuastro.info, Node: Permutations, Next: Matching, Prev: K-d tree, Up: Gnuastro library 12.3.20 Permutations (‘permutation.h’) -------------------------------------- Permutation is the technical name for re-ordering of values. The need for permutations occurs a lot during (mainly low-level) processing. To do permutation, you must provide two inputs: an array of values (that you want to re-order in place) and a permutation array which contains the new index of each element (let's call it ‘perm’). The diagram below shows the input array before and after the re-ordering. permute: AFTER[ i ] = BEFORE[ perm[i] ] i = 0 .. N-1 inverse: AFTER[ perm[i] ] = BEFORE[ i ] i = 0 .. N-1 The functions here are a re-implementation of the GNU Scientific Library's ‘gsl_permute’ function. The reason we did not use that function was that it uses system-specific types (like ‘long’ and ‘int’) which can have different widths on different systems, hence are not easily convertible to Gnuastro's fixed width types (see *note Numeric data types::). There is also a separate function for each type, heavily using macros to allow a ‘base’ function to work on all the types. Thus it is hard to read/understand. Hence, Gnuastro contains a re-write of their steps in a new type-agnostic method which is a single function that can work on any type. As described in GSL's source code and manual, this implementation comes from Donald Knuth's _Art of computer programming_ book, in the "Sorting and Searching" chapter of Volume 3 (3rd ed). Exercise 10 of Section 5.2 defines the problem and in the answers, Knuth describes the solution. So if you are interested, please have a look there for more. We are in contact with the GSL developers and in the future(1) we will submit these implementations to GSL. If they are finally incorporated there, we will delete this section in future versions. -- Function: void gal_permutation_check (size_t *permutation, size_t size) Print how ‘permutation’ will re-order an array that has ‘size’ elements for each element in one one line. -- Function: void gal_permutation_apply (gal_data_t *input, size_t *permutation) Apply ‘permutation’ on the ‘input’ dataset (can have any type), see above for the definition of permutation. -- Function: void gal_permutation_apply_inverse (gal_data_t *input, size_t *permutation) Apply the inverse of ‘permutation’ on the ‘input’ dataset (can have any type), see above for the definition of permutation. -- Function: void gal_permutation_transpose_2d (gal_data_t *input) Transpose an input 2D matrix into a new dataset. If the input is not a square, this function will change the ‘input->array’ element to a newly allocated array (the old one will be freed internally). Therefore, in case you have already stored ‘input->array’ for other usage _before_ this function, and the input is not a square, be sure to update the previously stored pointer if the input is not a square. ---------- Footnotes ---------- (1) Gnuastro's Task 14497 (http://savannah.gnu.org/task/?14497). If this task is still "postponed" when you are reading this and you are interested to help, your contributions would be very welcome. Both Gnuastro and GSL developers are very busy, hence both would appreciate your help.  File: gnuastro.info, Node: Matching, Next: Statistical operations, Prev: Permutations, Up: Gnuastro library 12.3.21 Matching (‘match.h’) ---------------------------- Matching is often necessary when two measurements of the same points have been done using different instruments (or hardware), different software or different configurations of the same software. In other words, you have two catalogs or tables, and each has N columns containing the N-dimensional "coordinate" values of each point. Each table can have other columns too, for example, one can have magnitudes in one filter, and another can have morphology measurements. The matching functions here will use the coordinate columns of the two tables to find a permutation for each, and the total number of matched rows ($N_{match}$). This will enable you to match by the positions if you like. At a higher level, you can apply the permutation to the magnitude or morphology columns to merge the catalogs over the $N_{match}$ rows. The input and output data formats of the functions are the some and described below before the actual functions. Each function also has extra arguments due to the particular algorithm it uses for the matching. The two inputs of the functions (‘coord1’ and ‘coord2’) must be *note List of gal_data_t::. Each ‘gal_data_t’ node in ‘coord1’ or ‘coord2’ should be a single dimensional dataset (column in a table) and all the nodes (in each) must have the same number of elements (rows). In other words, each column can be visualized as having the coordinates of each point in its respective dimension. The dimensions of the coordinates is determined by the number of ‘gal_data_t’ nodes in the two input lists (which must be equal). The number of rows (or the number of elements in each ‘gal_data_t’) in the columns of ‘coord1’ and ‘coord2’ can (and, usually will!) be different. In summary, these functions will be happy if you use ‘gal_table_read’ to read the two coordinate columns from a file, see *note Table input output::. The functions below return a simply-linked list of three 1D datasets (see *note List of gal_data_t::), let's call the returned dataset ‘ret’. The first two (‘ret’ and ‘ret->next’) are permutations. In other words, the ‘array’ elements of both have a type of ‘size_t’, see *note Permutations::. The third node (‘ret->next->next’) is the calculated distance for that match and its array has a type of ‘double’. The number of matches will be put in the space pointed by the ‘nummatched’ argument. If there was not any match, this function will return ‘NULL’. The two permutations can be applied to the rows of the two inputs: the first one (‘ret’) should be applied to the rows of the table containing ‘coord1’ and the second one (‘ret->next’) to the table containing ‘coord2’. After applying the returned permutations to the inputs, the top ‘nummatched’ elements of both will match with each other. The ordering of the rest of the elements is undefined (depends on the matching function used). The third node is the distances between the respective match (which may be elliptical distance, see discussion of "aperture" below). The functions will not simply return the nearest neighbor as a match. This is because the nearest neighbor may be too far to be a meaningful! They will check the distance between the nearest neighbor of each point and only return a match if it is within an acceptable N-dimensional distance (or "aperture"). The matching aperture is defined by the ‘aperture’ array that is an input argument to the functions. If several points of one catalog lie within this aperture of a point in the other catalog, the nearest is defined as the match. In a 2D situation (where the input lists have two nodes), for the most generic case, ‘aperture’ must have three elements: the major axis length, axis ratio and position angle (see *note Defining an ellipse and ellipsoid::). If ‘aperture[1]==1’, the aperture will be a circle of radius ‘aperture[0]’ and the third value will not be used. When the aperture is an ellipse, distances between the points are also calculated in the respective elliptical distances ($r_{el}$ in *note Defining an ellipse and ellipsoid::). *Output permutations ignore internal sorting*: the output permutations will correspond to the initial inputs. Therefore, even when ‘inplace!=0’ (and this function re-arranges the inputs in place), the output permutation will correspond to original (possibly non-sorted) inputs. The reason for this is that you rarely want to permute the actual positional columns after the match. Usually, you also have other columns (such as the magnitude and morphology) and you want to find how they differ between the objects that match. Once you have the permutations, they can be applied to those other columns (see *note Permutations::) and the higher-level processing can continue. So if you do not need the coordinate columns for the rest of your analysis, it is better to set ‘inplace=1’. -- Function: gal_data_t * gal_match_sort_based (gal_data_t *coord1, gal_data_t *coord2, double *aperture, int sorted_by_first, int inplace, size_t minmapsize, int quietmmap, size_t *nummatched) Use a basic sort-based match to find the matching points of two input coordinates. See the descriptions above on the format of the inputs and outputs. To speed up the search, this function will sort the input coordinates by their first column (first axis). If _both_ are already sorted by their first column, you can avoid the sorting step by giving a non-zero value to ‘sorted_by_first’. When sorting is necessary and ‘inplace’ is non-zero, the actual input columns will be sorted. Otherwise, an internal copy of the inputs will be made, used (sorted) and later freed before returning. Therefore, when ‘inplace==0’, inputs will remain untouched, but this function will take more time and memory. If internal allocation is necessary and the space is larger than ‘minmapsize’, the space will be not allocated in the RAM, but in a file, see description of ‘--minmapsize’ and ‘--quietmmap’ in *note Processing options::. -- Function: gal_data_t * gal_match_kdtree (gal_data_t *coord1, gal_data_t *coord2, gal_data_t *coord1_kdtree, size_t kdtree_root, double *aperture, size_t numthreads, size_t minmapsize, int quietmmap, size_t *nummatched) Use the k-d tree concept for finding matches between two catalogs, optionally in parallel (on ‘numthreads’ threads). The k-d tree of the first input (‘coord1_kdtree’), and its root index (‘kdtree_root’), should be constructed and found before calling this function, to do this, you can use the ‘gal_kdtree_create’ of *note K-d tree::. The desired ‘aperture’ array is the same as ‘gal_match_sort_based’ and described at the top of this section. If ‘coord1_kdtree==NULL’, this function will return a ‘NULL’ pointer and write a value of ‘0’ in the space that ‘nummatched’ points to. The final number of matches is returned in ‘nummatched’ and the format of the returned dataset (three columns) is described above. If internal allocation is necessary and the space is larger than ‘minmapsize’, the space will be not allocated in the RAM, but in a file, see description of ‘--minmapsize’ and ‘--quietmmap’ in *note Processing options::.  File: gnuastro.info, Node: Statistical operations, Next: Fitting functions, Prev: Matching, Up: Gnuastro library 12.3.22 Statistical operations (‘statistics.h’) ----------------------------------------------- After reading a dataset into memory from a file or fully simulating it with another process, the most common processes that will be done on it are statistical operations to let you quantify different aspects of the data. the functions in this section describe Gnuastro's current set of tools for this job. All these functions can work on any numeric data type natively (see *note Numeric data types::) and can also work on tiles over a dataset. Hence the inputs and outputs are in Gnuastro's *note Generic data container::. -- Macro: GAL_STATISTICS_SIG_CLIP_MAX_CONVERGE The maximum number of clips, when $\sigma$-clipping should be done by convergence. If the clipping does not converge before making this many clips, all $\sigma$-clipping outputs will be NaN. -- Macro: GAL_STATISTICS_MODE_GOOD_SYM The minimum acceptable symmetricity of the mode calculation. If the symmetricity of the derived mode is less than this value, all the returned values by ‘gal_statistics_mode’ will have a value of NaN. -- Macro: GAL_STATISTICS_BINS_INVALID -- Macro: GAL_STATISTICS_BINS_REGULAR -- Macro: GAL_STATISTICS_BINS_IRREGULAR Macros used to identify if the regularity of the bins when defining bins. -- Macro: GAL_STATISTICS_CLIP_OUTCOL_STD -- Macro: GAL_STATISTICS_CLIP_OUTCOL_MAD -- Macro: GAL_STATISTICS_CLIP_OUTCOL_MEAN -- Macro: GAL_STATISTICS_CLIP_OUTCOL_MEDIAN -- Macro: GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED -- Macro: GAL_STATISTICS_CLIP_OUTCOL_NUMBER_CLIPS Macros containing the index of the clipping outputs, see the descriptions of ‘gal_statistics_clip_sigma’ below. -- Macro: GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD -- Macro: GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MAD -- Macro: GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN Macros containing bit flags for optional clipping outputs, see the descriptions of ‘gal_statistics_clip_sigma’ below. -- Function: gal_data_t * gal_statistics_number (gal_data_t *input) Return a single-element dataset with type ‘size_t’ which contains the number of non-blank elements in ‘input’. -- Function: gal_data_t * gal_statistics_minimum (gal_data_t *input) Return a single-element dataset containing the minimum non-blank value in ‘input’. The numerical datatype of the output is the same as ‘input’. -- Function: gal_data_t * gal_statistics_maximum (gal_data_t *input) Return a single-element dataset containing the maximum non-blank value in ‘input’. The numerical datatype of the output is the same as ‘input’. -- Function: gal_data_t * gal_statistics_sum (gal_data_t *input) Return a single-element (‘double’ or ‘float64’) dataset containing the sum of the non-blank values in ‘input’. -- Function: gal_data_t * gal_statistics_mean (gal_data_t *input) Return a single-element (‘double’ or ‘float64’) dataset containing the mean of the non-blank values in ‘input’. -- Function: gal_data_t * gal_statistics_std (gal_data_t *input) Return a single-element (‘double’ or ‘float64’) dataset containing the standard deviation of the non-blank values in ‘input’. -- Function: gal_data_t * gal_statistics_mean_std (gal_data_t *input) Return a two-element (‘double’ or ‘float64’) dataset containing the mean and standard deviation of the non-blank values in ‘input’. The first element of the returned dataset is the mean and the second is the standard deviation. This function will calculate both values in one pass over the dataset. Hence when both the mean and standard deviation of a dataset are necessary, this function is much more efficient than calling ‘gal_statistics_mean’ and ‘gal_statistics_std’ separately. -- Function: double gal_statistics_std_from_sums (double sum, double sump2, size_t num) Return the standard deviation from the values that can be obtained in a single pass through the distribution: ‘sum’: the sum of the elements, ‘sump2’: the sum of the power-of-2 of each element, and ‘num’: the number of elements. This is a low-level function that is only useful after the distribution of values has been parsed (and the three input arguments are calculated). It is the lower-level function that is used in functions like ‘gal_statistics_std’, or other components of Gnuastro that measure the standard deviation (for example, MakeCatalog's ‘--std’ column). -- Function: gal_data_t * gal_statistics_median (gal_data_t *input, int inplace) Return a single-element dataset containing the median of the non-blank values in ‘input’. The numerical datatype of the output is the same as ‘input’. Calculating the median involves sorting the dataset and removing blank values, for better performance (and less memory usage), you can give a non-zero value to the ‘inplace’ argument. In this case, the sorting and removal of blank elements will be done directly on the input dataset. However, after this function the original dataset may have changed (if it was not sorted or had blank values). -- Function: gal_data_t * gal_statistics_mad (gal_data_t *input, int inplace) Return a single-element dataset with same type as input, containing the median absolute deviation (MAD) of the non-blank values in ‘input’. If ‘inplace==0’, the input dataset will remain untouched. Otherwise, the MAD calculation will be done on the input dataset without allocating a new one (its values will be changed after this function). This is good when you do not need the input after this function and avoid taking extra RAM and CPU. -- Function: gal_data_t * gal_statistics_median_mad (gal_data_t *input, int inplace) Return a two-element dataset with same type as input, containing the median and median absolute deviation (MAD) of the non-blank values in ‘input’. If ‘inplace==0’, the input dataset will remain untouched. Otherwise, the MAD calculation will be done on the input dataset without allocating a new one (its values will be changed after this function). This is good when you do not need the input after this function and avoid taking extra RAM and CPU. -- Function: size_t gal_statistics_quantile_index (size_t size, double quantile) Return the index of the element that has a quantile of ‘quantile’ assuming the dataset has ‘size’ elements. -- Function: gal_data_t * gal_statistics_quantile (gal_data_t *input, double quantile, int inplace) Return a single-element dataset containing the value with in a quantile ‘quantile’ of the non-blank values in ‘input’. The numerical datatype of the output is the same as ‘input’. See ‘gal_statistics_median’ for a description of ‘inplace’. -- Function: size_t gal_statistics_quantile_function_index (gal_data_t *input, gal_data_t *value, int inplace) Return the index of the quantile function (inverse quantile) of ‘input’ at ‘value’. In other words, this function will return the index of the nearest element (of a sorted and non-blank) ‘input’ to ‘value’. If the value is outside the range of the input, then this function will return ‘GAL_BLANK_SIZE_T’. -- Function: gal_data_t * gal_statistics_quantile_function (gal_data_t *input, gal_data_t *value, int inplace) Return a single-element dataset containing the quantile function of the non-blank values in ‘input’ at ‘value’ (a single-element dataset). The numerical data type is of the returned dataset is ‘float64’ (or ‘double’). In other words, this function will return the quantile of ‘value’ in ‘input’. ‘value’ has to have the same type as ‘input’. See ‘gal_statistics_median’ for a description of ‘inplace’. When all elements are blank, the returned value will be NaN. If the value is smaller than the input's smallest element, the returned value will be negative infinity. If the value is larger than the input's largest element, then the returned value will be positive infinity -- Function: gal_data_t * gal_statistics_unique (gal_data_t *input, int inplace) Return a 1D dataset with the same numeric data type as the input, but only containing its unique elements and without any (possible) blank/NaN elements. Note that the input's number of dimensions is irrelevant for this function. If ‘inplace’ is not zero, then the unique values will over-write the allocated space of the input, otherwise a new space will be allocated and the input will not be touched. -- Function: int gal_statistics_has_negative (gal_data_t *input) Return ‘1’ if the input dataset contains a negative number and ‘0’ otherwise. If the dataset doesn't have a numeric type (as in a string), this function will abort with, saying that it does not recognize the file type. -- Function: gal_data_t * gal_statistics_mode (gal_data_t *input, float mirrordist, int inplace) Return a four-element (‘double’ or ‘float64’) dataset that contains the mode of the ‘input’ distribution. This function implements the non-parametric algorithm to find the mode that is described in Appendix C of Akhlaghi and Ichikawa 2015 (https://arxiv.org/abs/1505.01664). In short it compares the actual distribution and its "mirror distribution" to find the mode. In order to be efficient, you can determine how far the comparison goes away from the mirror through the ‘mirrordist’ parameter (think of it as a multiple of sigma/error). See ‘gal_statistics_median’ for a description of ‘inplace’. The output array has the following elements (in the given order, note that counting in C starts from 0). array[0]: mode array[1]: mode quantile. array[2]: symmetricity. array[3]: value at the end of symmetricity. -- Function: gal_data_t * gal_statistics_mode_mirror_plots (gal_data_t *input, gal_data_t *value, size_t numbins, int inplace, double *mirror_val) Make a mirrored histogram and cumulative frequency plot (with ‘numbins’) with the mirror distribution of the ‘input’ having a value in ‘value’. If all the input elements are blank, or the mirror value is outside the range of the input, this function will return a ‘NULL’ pointer. The output is a list of data structures (see *note List of gal_data_t::): the first is the bins with one bin at the mirror point, the second is the histogram with a maximum of one and the third is the cumulative frequency plot (with a maximum of one). -- Function: int gal_statistics_is_sorted (gal_data_t *input, int updateflags) Return ‘0’ if the input is not sorted, if it is sorted, this function will return ‘1’ and ‘2’ if it is increasing or decreasing, respectively. This function will abort with an error if ‘input’ has zero elements and will return ‘1’ (sorted, increasing) when there is only one element. This function will only look into the dataset if the ‘GAL_DATA_FLAG_SORT_CH’ bit of ‘input->flag’ is ‘0’, see *note Generic data container::. When the flags do not indicate a previous check _and_ ‘updateflags’ is non-zero, this function will set the flags appropriately to avoid having to re-check the dataset in future calls (this can be very useful when repeated checks are necessary). When ‘updateflags==0’, this function has no side-effects on the dataset: it will not toggle the flags. If you want to re-check a dataset with the blank-value-check flag already set (for example, if you have made changes to it), then explicitly set the ‘GAL_DATA_FLAG_SORT_CH’ bit to zero before calling this function. When there are no other flags, you can simply set the flags to zero (with ‘input->flag=0’), otherwise you can use this expression: input->flag &= ~GAL_DATA_FLAG_SORT_CH; -- Function: void gal_statistics_sort_increasing (gal_data_t *input) Sort the input dataset (in place) in an increasing order and toggle the sort-related bit flags accordingly. -- Function: void gal_statistics_sort_decreasing (gal_data_t *input) Sort the input dataset (in place) in a decreasing order and toggle the sort-related bit flags accordingly. -- Function: gal_data_t * gal_statistics_no_blank_sorted (gal_data_t *input, int inplace) Remove all the blanks and sort the input dataset. If ‘inplace’ is non-zero this will happen on the input dataset (in the allocated space of the input dataset). However, if ‘inplace’ is zero, this function will allocate a new copy of the dataset and work on that. Therefore if ‘inplace==0’, the input dataset will be modified. This function uses the bit flags of the input, so if you have modified the dataset, set ‘input->flag=0’ before calling this function. Also note that ‘inplace’ is only for the dataset elements. Therefore even when ‘inplace==0’, if the input is already sorted _and_ has no blank values, then the flags will be updated to show this. If all the elements were blank, then the returned dataset's ‘size’ will be zero. This is thus a good parameter to check after calling this function to see if there actually were any non-blank elements in the input or not and take the appropriate measure. This can help avoid strange bugs in later steps. The flags of a zero-sized returned dataset will indicate that it has no blanks and is sorted in an increasing order. Even if having blank values or being sorted is not defined on a zero-element dataset, it is up to the caller to choose what they will do with a zero-element dataset. The flags have to be set after this function any way. -- Function: gal_data_t * gal_statistics_regular_bins (gal_data_t *input, gal_data_t *inrange, size_t numbins, double onebinstart) Generate an array of regularly spaced elements as a 1D array (column) of type ‘double’ (i.e., ‘float64’, it has to be double to account for small differences on the bin edges). The input arguments are described below ‘input’ The dataset you want to apply the bins to. This is only necessary if the range argument is not complete, see below. If ‘inrange’ has all the necessary information, you can pass a ‘NULL’ pointer for this. ‘inrange’ This dataset keeps the desired range along each dimension of the input data structure, it has to be in ‘float’ (i.e., ‘float32’) type. • If you want the full range of the dataset (in any dimensions, then just set ‘inrange’ to ‘NULL’ and the range will be specified from the minimum and maximum value of the dataset (‘input’ cannot be ‘NULL’ in this case). • If there is one element for each dimension in range, then it is viewed as a quantile (Q), and the range will be: 'Q to 1-Q'. • If there are two elements for each dimension in range, then they are assumed to be your desired minimum and maximum values. When either of the two are NaN, the minimum and maximum will be calculated for it. ‘numbins’ The number of bins: must be larger than 0. ‘onebinstart’ A desired value to start one bin. Note that with this option, the bins will not start and end exactly on the given range values, it will be slightly shifted to accommodate this request (enough for the bin containing the value to start at it). If you do not have any preference on where to start a bin, set this to NAN. -- Function: gal_data_t * gal_statistics_histogram (gal_data_t *input, gal_data_t *bins, int normalize, int maxone) Make a histogram of all the elements in the given dataset with bin values that are defined in the ‘bins’ structure (see ‘gal_statistics_regular_bins’, they currently have to be equally spaced). The returned histogram is a 1-D ‘gal_data_t’ of type ‘GAL_TYPE_FLOAT32’, with the same number of elements as ‘bins’. For each bin, it will contain the number of input elements that fell inside of that bin. Let's write the center of the $i$th element of the bin array as $b_i$, and the fixed half-bin width as $h$. Then element $j$ of the input array ($in_j$) will be counted in $b_i$ if $(b_i-h) \le in_j < (b_i+h)$. However, if $in_j$ is somewhere in the last bin, the condition changes to $(b_i-h) \le in_j \le (b_i+h)$. If ‘normalize!=0’, the histogram will be "normalized" such that the sum of the counts column will be one. In other words, all the counts in every bin will be divided by the total number of counts. If ‘maxone!=0’, the histogram's maximum count will be 1. In other words, the counts in every bin will be divided by the value of the maximum. In both of these cases, the output dataset will have a ‘GAL_DATA_FLOAT32’ datatype. -- Function: gal_data_t * gal_statistics_histogram2d (gal_data_t *input, gal_data_t *bins) This function is very similar to ‘gal_statistics_histogram’, but will build a 2D histogram (count how many of the elements of ‘input’ are a within a 2D box. The bins comprising the first dimension of the 2D box are defined by ‘bins’. The bins of the second dimension are defined by ‘bins->next’ (‘bins’ is a *note List of gal_data_t::). Both the ‘bin’ and ‘bin->next’ can be created with ‘gal_statistics_regular_bins’. This function returns a list of ‘gal_data_t’ with three nodes/columns, so you can directly write them into a table (see *note Table input output::). Assuming ‘bins’ has $N1$ bins and ‘bins->next’ has $N2$ bins, each node/column of the returned output is a 1D array with $N1\times N2$ elements. The first and second columns are the center of the 2D bin along the first and second dimensions and have a ‘double’ data type. The third column is the 2D histogram (the number of input elements that have a value within that 2D bin) and has a ‘uint32’ data type (see *note Numeric data types::). -- Function: gal_data_t * gal_statistics_cfp (gal_data_t *input, gal_data_t *bins, int normalize) Make a cumulative frequency plot (CFP) of all the elements in ‘input’ with bin values that are defined in the ‘bins’ structure (see ‘gal_statistics_regular_bins’). The CFP is built from the histogram: in each bin, the value is the sum of all previous bins in the histogram. Thus, if you have already calculated the histogram before calling this function, you can pass it onto this function as the data structure in ‘bins->next’ (see ‘List of gal_data_t’). If ‘bin->next!=NULL’, then it is assumed to be the histogram. If it is ‘NULL’, then the histogram will be calculated internally and freed after the job is finished. When a histogram is given and it is normalized, the CFP will also be normalized (even if the normalized flag is not set here): note that a normalized CFP's maximum value is 1. -- Function: gal_data_t * gal_statistics_clip_sigma (gal_data_t *input, float multip, float param, float extrastats, int inplace, int quiet) Apply $\sigma$-clipping on a given dataset and return a dataset that contains the results. For a description of $\sigma$-clipping see *note Sigma clipping::. ‘multip’ is the multiple of the standard deviation (or $\sigma$, that is used to define outliers in each round of clipping). The role of ‘param’ is determined based on its value. If ‘param’ is larger than ‘1’ (one), it must be an integer and will be interpreted as the number clips to do. If it is less than ‘1’ (one), it is interpreted as the tolerance level to stop the iteration. The returned dataset (let's call it ‘out’) contains a 6-element array with type ‘GAL_TYPE_FLOAT32’. Through the ‘GAL_STATISTICS_CLIP_OUTCOL_*’ macros below, you can access any particular measurement. out=gal_statistics_clip_sigma(input, ....); float *array=out->array; array[ GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED ] array[ GAL_STATISTICS_CLIP_OUTCOL_MEAN ] array[ GAL_STATISTICS_CLIP_OUTCOL_STD ] array[ GAL_STATISTICS_CLIP_OUTCOL_MEDIAN ] array[ GAL_STATISTICS_CLIP_OUTCOL_MAD ] array[ GAL_STATISTICS_CLIP_OUTCOL_NUMBER_CLIPS ] However, note that all are not measured by default! Since the mean and MAD are not necessary during sigma-clipping, if you want them, you have to set the following two bit flags in the ‘extrastats’ argument as below. int extrastats=0; /* To initialize all bits */ /* If you want the sigma-clipped MAD. */ extrastats |= GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MAD; /* If you want the sigma-clipped mean. */ extrastats |= GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN; If the $\sigma$-clipping does not converge or all input elements are blank, then this function will return NaN values for all the elements above. -- Function: gal_data_t * gal_statistics_clip_mad (gal_data_t *input, float multip, float param, uint8_t extrastats, int inplace, int quiet) Similar to ‘gal_statistics_clip_sigma’, but will do median absolute deviation (MAD) based clipping, see *note MAD clipping::. The only difference is that for this function the MAD is automatically calculated during clipping. It is the mean and standard deviation that will not be calculated unless requested with the ‘GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN’ and ‘GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD’ bit flats respectively. -- Function: gal_data_t * gal_statistics_outlier_bydistance (int pos1_neg0, gal_data_t *input, size_t window_size, float sigma, float sigclip_multip, float sigclip_param, int inplace, int quiet) Find the first positive outlier (if ‘pos1_neg0!=0’) in the ‘input’ distribution. When ‘pos1_neg0==0’, the same algorithm goes to the start of the dataset. The returned dataset contains a single element: the first positive outlier. It is one of the dataset's elements, in the same type as the input. If the process fails for any reason (for example, no outlier was found), a ‘NULL’ pointer will be returned. All (possibly existing) blank elements are first removed from the input dataset, then it is sorted. A sliding window of ‘window_size’ elements is parsed over the dataset. Starting from the ‘window_size’-th element of the dataset, in the direction of increasing values. This window is used as a reference. The first element where the distance to the previous (sorted) element is ‘sigma’ units away from the distribution of distances in its window is considered an outlier and returned by this function. Formally, if we assume there are $N$ non-blank elements. They are first sorted. Searching for the outlier starts on element $W$. Let's take $v_i$ to be the $i$-th element of the sorted input (with no blank values) and $m$ and $\sigma$ as the $\sigma$-clipped median and standard deviation from the distances of the previous $W$ elements (not including $v_i$). If the value given to ‘sigma’ is displayed with $s$, the $i$-th element is considered as an outlier when the condition below is true. $${(v_i-v_{i-1})-m\over \sigma}>s$$ The ‘sigclip_multip’ and ‘sigclip_param’ arguments specify the properties of the $\sigma$-clipping (see *note Sigma clipping:: for more). You see that by this definition, the outlier cannot be any of the lower half elements. The advantage of this algorithm compared to $\sigma$-clippign is that it only looks backwards (in the sorted array) and parses it in one direction. If ‘inplace!=0’, the removing of blank elements and sorting will be done within the input dataset's allocated space. Otherwise, this function will internally allocate (and later free) the necessary space to keep the intermediate space that this process requires. If ‘quiet!=0’, this function will report the parameters every time it moves the window as a separate line with several columns. The first column is the value, the second (in square brackets) is the sorted index, the third is the distance of this element from the previous one. The Fourth and fifth (in parenthesis) are the median and standard deviation of the $\sigma$-clipped distribution within the window and the last column is the difference between the third and fourth, divided by the fifth. -- Function: gal_data_t * gal_statistics_outlier_flat_cfp (gal_data_t *input, size_t numprev, float sigclip_multip, float sigclip_param, float thresh, size_t numcontig, int inplace, int quiet, size_t *index) Return the first element in the given dataset where the cumulative frequency plot first becomes significantly flat for a sufficient number of elements. The returned dataset only has one element (with the same type as the input). If ‘index!=NULL’, the index (counting from zero, after sorting the dataset and removing any blanks) is written in the space that ‘index’ points to. If no sufficiently flat portion is found, the returned pointer will be ‘NULL’. The flatness on the cumulative frequency plot is defined like this (see *note Histogram and Cumulative Frequency Plot::): on the sorted dataset, for every point ($a_i$), we calculate $d_i=a_{i+2}-a_{i-2}$. This done on the first $N$ elements (value of ‘numprev’). After element $a_{N+2}$, we start estimating the flatness as follows: for every element we use the $N$, $d_i$ measurements before it as the reference. Let's call this set $D_i$ for element $i$. The $\sigma$-clipped median ($m$) and standard deviation ($s$) of $D_i$ are then calculated. The $\sigma$-clipping can be configured with the two ‘sigclip_param’ and ‘sigclip_multip’ arguments. Taking $t$ as the significance threshold (value to ‘thresh’), a point is considered flat when $a_i>m+t\sigma$. But a single point satisfying this condition will probably just be due to noise. To make a more robust estimate, this significance/condition has to hold for ‘numcontig’ contiguous elements after $a_i$. When this is satisfied, $a_i$ is returned as the point where the distribution's cumulative frequency plot becomes flat. To get a good estimate of $m$ and $s$, it is thus recommended to set ‘numprev’ as large as possible. However, be careful not to set it too high: the checks in the paragraph above are not done on the first ‘numprev’ elements and this function assumes the flatness occurs after them. Also, be sure that the value to ‘numcontig’ is much less than ‘numprev’, otherwise $\sigma$-clipping may not be able to remove the immediate outliers in $D_i$ near the boundary of the flat region. When ‘quiet==0’, the basic measurements done on each element are printed on the command-line (good for finding the best parameters). When ‘inplace!=0’, the sorting and removal of blank elements is done on the input dataset, so the input may be altered after this function.  File: gnuastro.info, Node: Fitting functions, Next: Binary datasets, Prev: Statistical operations, Up: Gnuastro library 12.3.23 Fitting functions (‘fit.h’) ----------------------------------- After doing a measurement, it is usually necessary to parameterize the relation that has been found. The functions in this section are wrappers over the GNU Scientific Library (GSL) Linear Least-Squares Fitting (https://www.gnu.org/software/gsl/doc/html/lls.html), to make them easily accessible using Gnuastro's *note Generic data container::. The respective GSL function is mentioned under each function. -- Global integer: GAL_FIT_INVALID -- Global integer: GAL_FIT_LINEAR -- Global integer: GAL_FIT_LINEAR_WEIGHTED -- Global integer: GAL_FIT_LINEAR_NO_CONSTANT -- Global integer: GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED -- Global integer: GAL_FIT_POLYNOMIAL -- Global integer: GAL_FIT_POLYNOMIAL_WEIGHTED -- Global integer: GAL_FIT_POLYNOMIAL_NUMBER Identifiers for the various types of fitting functions. These can be used by the callers of these functions to select between various fitting types. They can easily be converted to, and from, fixed human-readable strings using the ‘gal_fit_name_*’ functions below. The last one ‘GAL_FIT_ROBUST_NUMBER’ is the total number of available fitting methods (can be used to add more macros in the calling program and to avoid overlaps with existing codes). -- Global integer: GAL_FIT_ROBUST_INVALID -- Global integer: GAL_FIT_ROBUST_DEFAULT -- Global integer: GAL_FIT_ROBUST_BISQUARE -- Global integer: GAL_FIT_ROBUST_CAUCHY -- Global integer: GAL_FIT_ROBUST_FAIR -- Global integer: GAL_FIT_ROBUST_HUBER -- Global integer: GAL_FIT_ROBUST_OLS -- Global integer: GAL_FIT_ROBUST_WELSCH -- Global integer: GAL_FIT_ROBUST_NUMBER Identifiers for the various types of robust polynomial fitting functions. For a description of each, see <https://www.gnu.org/s/gsl/doc/html/lls.html#c.gsl_multifit_robust_alloc>. The last one ‘GAL_FIT_ROBUST_NUMBER’ is the total number of available functions (can be used to add more macros in the calling program and to avoid overlaps with existing codes). -- Function: uint8_t gal_fit_name_to_id (char *name) Return the internal code of a standard human-readable name for the various fitting functions. If the name is not recognized, the returned value will be ‘GAL_FIT_INVALID’. -- Function: char * gal_fit_name_from_id (uint8_t fitid) Return a standard human-readable name for the fitting function identified with the ‘fitid’ (read as "fitting ID"). If the fitting ID couldn't be recognized, a NULL pointer is returned. -- Function: uint8_t gal_fit_name_robust_to_id (char *name) Return the internal code of a standard human-readable name for the various robust fitting types. If the name is not recognized, the returned value will be ‘GAL_FIT_INVALID’. -- Function: char * gal_fit_name_robust_from_id (uint8_t robustid) Return a standard human-readable name for the input robust fitting type. If the fitting ID couldn't be recognized, a NULL pointer is returned. -- Function: gal_data_t * gal_fit_1d_linear (gal_data_t *xin, gal_data_t *yin, gal_data_t *ywht) Preform a 1D linear regression fit with a constant term(1) in the form of $Y=c_0+c_1X$. The input ‘xin’ contains the independent variable values and ‘yin’ contains the measured variable values for each independent variable. When ‘ywht!=NULL’, it is assumed to contain the "weight" of each Y measurement (if you don't have weights on your measured values, simply set this to ‘NULL’). The weight of each measurement is the inverse of its variance. For a Gaussian error distribution with standard deviation $\sigma$, the weight is therefore $1/\sigma^2$. If any of the values in any of the inputs is blank (NaN in floating point), the final fitted parameters will all be NaN. To remove rows with a NaN/blank, you can use ‘gal_blank_remove_rows’ (which will remove all rows with a blank values in any of the columns with a single call). The output is a single dataset with a ‘GAL_TYPE_FLOAT64’ type with 6 elements: 1. $c_0$: the constant in $Y=c_0+c_1X$. 2. $c_1$: the multiple in $Y=c_0+c_1X$. 3. First element of variance-covariance matrix. 4. Second and third (which are equal) elements of the variance-covariance matrix. 5. Fourth element of the variance-covariance matrix. 6. The reduced $\chi^2$ of the fit. -- Function: gal_data_t * gal_fit_1d_linear_no_constant (gal_data_t *xin, gal_data_t *yin, gal_data_t *ywht) Preform a 1D linear regression fit _without_ a constant term(2), formally: $Y=c_1X$. The input ‘xin’ contains the independent variable values and ‘yin’ contains the measured variable values for each independent variable. When ‘ywht!=NULL’, it is assumed to contain the "weight" of each Y measurement (if you don't have weights on your measured values, simply set this to ‘NULL’). The weight of each measurement is the inverse of its variance. For a Gaussian error distribution with standard deviation $\sigma$, the weight is therefore $1/\sigma^2$. If any of the values in any of the inputs is blank (NaN in floating point), the final fitted parameters will all be NaN. To remove rows with a NaN/blank, you can use ‘gal_blank_remove_rows’ (which will remove all rows with a blank values in any of the columns with a single call). The output is a single dataset with a ‘GAL_TYPE_FLOAT64’ type with 3 elements: 1. $c_1$: the multiple in $Y=c_0+c_1X$. 2. Variance of $c_1$. 3. The reduced $\chi^2$ of the fit. -- Function: gal_data_t * gal_fit_1d_linear_estimate (gal_data_t *fit, gal_data_t *xin) Given a linear least squares fit output (‘fit’), estimate the fit on an arbitrary number of independent variable (horizontal axis, or X, in an X-Y plot) within ‘xin’. ‘fit’ is assumed to be the output of either ‘gal_fit_1d_linear’ or ‘gal_fit_1d_linear_no_constant’. In case you haven't used those functions to obtain the constants and covariance matrix elements, see the description of those functions for the expected format of ‘fit’. This function returns two columns (as a *note List of gal_data_t::): The top node of the list is the estimated values at the input X-axis positions, and the next node is the errors in the estimation. Naturally, both have the same number of elements as ‘xin’. Being a list, helps in easily printing the output columns to a table (see *note Table input output::). -- Function: gal_data_t * gal_fit_1d_polynomial (gal_data_t *xin, gal_data_t *yin, gal_data_t *ywht, size_t maxpower, double *redchisq) Preform a 1D polynomial fit, formally: $Y=c+0+c_1X+c_2X^2+\cdots+c_nX^n$ (using GSL's multi-parameter regression(3)). The largest power of $X$ is determined with the ‘maxpower’ argument (which is $n$ in the equation above). The reduced $\chi^2$ of the fit is written in the space that ‘*redchisq’ points to. The input ‘xin’ contains the independent variable values and the input ‘yin’ contains the measured variable values for each independent variable. When ‘ywht!=NULL’, it is assumed to contain the "weight" of each Y measurement (if you don't have weights on your measured values, simply set this to ‘NULL’). The weight of each measurement is the inverse of its variance. For a Gaussian error distribution with standard deviation $\sigma$, the weight is therefore $1/\sigma^2$. If any of the values in any of the inputs is blank (NaN in floating point), the final fitted parameters will all be NaN. To remove rows with a NaN/blank, you can use ‘gal_blank_remove_rows’ (which will remove all rows with a blank values in any of the columns with a single call). The output of this function is a list of two datasets, linked as a list (as a *note List of gal_data_t::). Both have a ‘GAL_TYPE_FLOAT64’ type, and are described below (in order). 1. A one dimensional and contains $n+1$ elements (for the $n+1$ constants that have been found $(c_0, c_1, c_2, \cdots, c_n)$. 2. A two dimensional variance-covariance matrix with $(n+1)\times(n+1)$ elements. -- Function: gal_data_t * gal_fit_1d_polynomial_robust (gal_data_t *xin, gal_data_t *yin, size_t maxpower, uint8_t robustid, double *redchisq) Preform a 1D robust polynomial fit, formally: $Y=c+0+c_1X+c_2X^2+\cdots+c_nX^n$ (using GSL's robust linear regression(4)). See the description there for the details. The inputs and outputs of this function are almost identical to ‘gal_fit_1d_polynomial’, with the difference that you need to specify the function to reject outliers through the ‘robustid’ input argument. You can pass any of the ‘GAL_FIT_ROBUST_*’ codes defined at the top of this section to this (the names are identical to the names in GSL). -- Function: gal_data_t * gal_fit_1d_polynomial_estimate (gal_data_t *fit, gal_data_t *xin) Given a 1D polynomial fit output (‘fit’), estimate the fit on an arbitrary number of independent variable (horizontal axis, or X, in an X-Y plot) within ‘xin’. ‘fit’ is assumed to be the output of ‘gal_fit_1d_polynomial’. In case you haven't used this function to obtain the constants and covariance matrix, see the description of that function for the expected format of ‘fit’. This function returns two columns (as a *note List of gal_data_t::): The top node of the list is the estimated values at the input X-axis positions, and the next node is the errors in the estimation. Naturally, both have the same number of elements as ‘xin’. Being a list, helps in easily printing the output columns to a table (see *note Table input output::). ---------- Footnotes ---------- (1) <https://www.gnu.org/s/gsl/doc/html/lls.html#linear-regression-with-a-constant-term> (2) <https://www.gnu.org/s/gsl/doc/html/lls.html#linear-regression-without-a-constant-term> (3) <https://www.gnu.org/s/gsl/doc/html/lls.html#multi-parameter-regression> (4) <https://www.gnu.org/software/gsl/doc/html/lls.html#robust-linear-regression>  File: gnuastro.info, Node: Binary datasets, Next: Labeled datasets, Prev: Fitting functions, Up: Gnuastro library 12.3.24 Binary datasets (‘binary.h’) ------------------------------------ Binary datasets only have two (usable) values: 0 (also known as background) or 1 (also known as foreground). They are created after some binary classification is applied to the dataset. The most common is thresholding: for example, in an image, pixels with a value above the threshold are given a value of 1 and those with a value less than the threshold are assigned a value of 0. Since there is only two values, in the processing of binary images, you are usually concerned with the positioning of an element and its vicinity (neighbors). When a dataset has more than one dimension, multiple classes of immediate neighbors (that are touching the element) can be defined for each data-element. To separate these different classes of immediate neighbors, we define _connectivity_. The classification is done by the distance from element center to the neighbor's center. The nearest immediate neighbors have a connectivity of 1, the second nearest class of neighbors have a connectivity of 2 and so on. In total, the largest possible connectivity for data with ‘ndim’ dimensions is ‘ndim’. For example, in a 2D dataset, 4-connected neighbors (that share an edge and have a distance of 1 pixel) have a connectivity of 1. The other 4 neighbors that only share a vertice (with a distance of $\sqrt{2}$ pixels) have a connectivity of 2. Conventionally, the class of connectivity-2 neighbors also includes the connectivity 1 neighbors, so for example, we call them 8-connected neighbors in 2D datasets. Ideally, one bit is sufficient for each element of a binary dataset. However, CPUs are not designed to work on individual bits, the smallest unit of memory addresses is a byte (containing 8 bits on modern CPUs). Therefore, in Gnuastro, the type used for binary dataset is ‘uint8_t’ (see *note Numeric data types::). Although it does take 8-times more memory, this choice offers much better performance and the some extra (useful) features. The advantage of using a full byte for each element of a binary dataset is that you can also have other values (that will be ignored in the processing). One such common "other" value in real datasets is a blank value (to mark regions that should not be processed because there is no data). The constant ‘GAL_BLANK_UINT8’ value must be used in these cases (see *note Library blank values::). Another is some temporary value(s) that can be given to a processed pixel to avoid having another copy of the dataset as in ‘GAL_BINARY_TMP_VALUE’ that is described below. -- Macro: GAL_BINARY_TMP_VALUE The functions described below work on a ‘uint8_t’ type dataset with values of 1 or 0 (no other pixel will be touched). However, in some cases, it is necessary to put temporary values in each element during the processing of the functions. This temporary value has a special meaning for the operation and will be operated on. So if your input datasets have values other than 0 and 1 that you do not want these functions to work on, be sure they are not equal to this macro's value. Note that this value is also different from ‘GAL_BLANK_UINT8’, so your input datasets may also contain blank elements. -- Function: gal_data_t * gal_binary_erode (gal_data_t *input, size_t num, int connectivity, int inplace) Do ‘num’ erosions on the ‘connectivity’-connected neighbors of ‘input’ (see above for the definition of connectivity). If ‘inplace’ is non-zero _and_ the input's type is ‘GAL_TYPE_UINT8’, then the erosion will be done within the input dataset and the returned pointer will be ‘input’. Otherwise, ‘input’ is copied (and converted if necessary) to ‘GAL_TYPE_UINT8’ and erosion will be done on this new dataset which will also be returned. This function will only work on the elements with a value of 1 or 0. It will leave all the rest unchanged. Erosion (inverse of dilation) is an operation in mathematical morphology where each foreground pixel that is touching a background pixel is flipped (changed to background). The ‘connectivity’ value determines the definition of "touching". Erosion will thus decrease the area of the foreground regions by one layer of pixels. -- Function: gal_data_t * gal_binary_dilate (gal_data_t *input, size_t num, int connectivity, int inplace) Do ‘num’ dilations on the ‘connectivity’-connected neighbors of ‘input’ (see above for the definition of connectivity). For more on ‘inplace’ and the output, see ‘gal_binary_erode’. Dilation (inverse of erosion) is an operation in mathematical morphology where each background pixel that is touching a foreground pixel is flipped (changed to foreground). The ‘connectivity’ value determines the definition of "touching". Dilation will thus increase the area of the foreground regions by one layer of pixels. -- Function: gal_data_t * gal_binary_open (gal_data_t *input, size_t num, int connectivity, int inplace) Do ‘num’ openings on the ‘connectivity’-connected neighbors of ‘input’ (see above for the definition of connectivity). For more on ‘inplace’ and the output, see ‘gal_binary_erode’. Opening is an operation in mathematical morphology which is defined as erosion followed by dilation (see above for the definitions of erosion and dilation). Opening will thus remove the outer structure of the foreground. In this implementation, ‘num’ erosions are going to be applied on the dataset, then ‘num’ dilations. -- Function: gal_data_t * gal_binary_number_neighbors (gal_data_t *input, int connectivity, int inplace) Return an image of the same size as the input, but where each non-zero and non-blank input pixel is replaced with the number of its non-zero and non-blank neighbors. The input dataset is assumed to be binary (having an unsigned, 8-bit dataset). The neighbors are defined through the ‘connectivity’ argument (see above) and if ‘inplace!=0’, then the output will be written into the input. -- Function: size_t gal_binary_connected_components (gal_data_t *binary, gal_data_t **out, int connectivity) Return the number of connected components in ‘binary’ through the breadth first search algorithm (finding all pixels belonging to one component before going on to the next). Connection between two pixels is defined based on the value to ‘connectivity’. ‘out’ is a dataset with the same size as ‘binary’ with ‘GAL_TYPE_INT32’ type. Every pixel in ‘out’ will have the label of the connected component it belongs to. The labeling of connected components starts from 1, so a label of zero is given to the input's background pixels. When ‘*out!=NULL’ (its space is already allocated), it will be cleared (to zero) at the start of this function. Otherwise, when ‘*out==NULL’, the necessary dataset to keep the output will be allocated by this function. ‘binary’ must have a type of ‘GAL_TYPE_UINT8’, otherwise this function will abort with an error. Other than blank pixels (with a value of ‘GAL_BLANK_UINT8’ defined in *note Library blank values::), all other non-zero pixels in ‘binary’ will be considered as foreground (and will be labeled). Blank pixels in the input will also be blank in the output. -- Function: gal_data_t * gal_binary_connected_indexs(gal_data_t *binary, int connectivity) Build a ‘gal_data_t’ linked list, where each node of the list contains an array with indices of the connected regions. Therefore the arrays of each node can have a different size. Note that the indices will only be calculated on the pixels with a value of 1 and internally, it will temporarily change the values to 2 (and return them back to 1 in the end). -- Function: gal_data_t * gal_binary_connected_adjacency_matrix (gal_data_t *adjacency, size_t *numconnected) Find the number of connected labels and new labels based on an adjacency matrix, which must be a square binary array (type ‘GAL_TYPE_UINT8’). The returned dataset is a list of new labels for each old label. In other words, this function will find the objects that are connected (possibly through a third object) and in the output array, the respective elements for all input labels is going to have the same value. The total number of connected labels is put into the space that ‘numconnected’ points to. An adjacency matrix defines connection between two labels. For example, let's assume we have 5 labels and we know that labels 1 and 5 are connected to label 3, but are not connected with each other. Also, labels 2 and 4 are not touching any other label. So in total we have 3 final labels: one combined object (merged from labels 1, 3, and 5) and the initial labels 2 and 4. The input adjacency matrix would look like this (note the extra row and column for a label 0 which is ignored): INPUT OUTPUT ===== ====== in_lab 1 2 3 4 5 | | numconnected = 3 0 0 0 0 0 0 | in_lab 1 --> 0 0 0 1 0 0 | in_lab 2 --> 0 0 0 0 0 0 | Returned: new labels for the in_lab 3 --> 0 1 0 0 0 1 | 5 initial objects in_lab 4 --> 0 0 0 0 0 0 | | 0 | 1 | 2 | 1 | 3 | 1 | in_lab 5 --> 0 0 0 1 0 0 | Although the adjacency matrix as used here is symmetric, currently this function assumes that it is filled on both sides of the diagonal. -- Function: gal_data_t * gal_binary_connected_adjacency_list (gal_list_sizet_t **listarr, size_t number, size_t minmapsize, int quietmmap, size_t *numconnected) Find the number of connected labels and new labels based on an adjacency list. The output of this function is identical to that of ‘gal_binary_connected_adjacency_matrix’. But the major difference is that it uses a list of connected labels to each label instead of a square adjacency matrix. This is done because when the number of labels becomes very large (for example, on the scale of 100,000), the adjacency matrix can consume more than 10GB of RAM! The input list has the following format: it is an array of pointers to ‘gal_list_sizet_t *’ (or ‘gal_list_sizet_t **’). The array has ‘number’ elements and each ‘listarr[i]’ is a linked list of ‘gal_list_sizet_t *’. As a demonstration, the input of the same example in ‘gal_binary_connected_adjacency_matrix’ would look like below and the output of this function will be identical to there. listarr[0] = NULL listarr[1] = 3 listarr[2] = NULL listarr[3] = 1 -> 5 listarr[4] = NULL listarr[5] = 3 From this example, it is already clear that this method will consume far less memory. But because it needs to parse lists (and not easily jump between array elements), it can be slower. But in scenarios where there are too many objects (that may exceed the whole system's RAM+SWAP), this option is a good alternative and the drop in processing speed is worth getting the job done. Similar to ‘gal_binary_connected_adjacency_matrix’, this function will write the final number of connected labels in ‘numconnected’. But since it takes no ‘gal_data_t *’ argument (where it can inherit the ‘minmapsize’ and ‘quietmmap’ parameters), it also needs these as input. For more on ‘minmapsize’ and ‘quietmmap’, see *note Memory management::. -- Function: gal_data_t * gal_binary_holes_label (gal_data_t *input, int connectivity, size_t *numholes) Label all the holes in the foreground (non-zero elements in input) as independent regions. Holes are background regions (zero-valued in input) that are fully surrounded by the foreground, as defined by ‘connectivity’. The returned dataset has a 32-bit signed integer type with the size of the input. All holes in the input will have labels/counters greater or equal to ‘1’. The rest of the background regions will still have a value of ‘0’ and the initial foreground pixels will have a value of ‘-1’. The total number of holes will be written where ‘numholes’ points to. -- Function: void gal_binary_holes_fill (gal_data_t *input, int connectivity, size_t maxsize) Fill all the holes (0 valued pixels surrounded by 1 valued pixels) of the binary ‘input’ dataset. The connectivity of the holes can be set with ‘connectivity’. Holes larger than ‘maxsize’ are not filled. This function currently only works on a 2D dataset.  File: gnuastro.info, Node: Labeled datasets, Next: Convolution functions, Prev: Binary datasets, Up: Gnuastro library 12.3.25 Labeled datasets (‘label.h’) ------------------------------------ A labeled dataset is one where each element/pixel has an integer label (or counter). The label identifies the group/class that the element belongs to. This form of labeling allows the higher-level study of all pixels within a certain class. For example, to detect objects/targets in an image/dataset, you can apply a threshold to separate the noise from the signal (to detect diffuse signal, a threshold is useless and more advanced methods are necessary, for example *note NoiseChisel::). But the output of detection is a binary dataset (which is just a very low-level labeling of ‘0’ for noise and ‘1’ for signal). The raw detection map is therefore hardly useful for any kind of analysis on objects/targets in the image. One solution is to use a connected-components algorithm (see ‘gal_binary_connected_components’ in *note Binary datasets::). It is a simple and useful way to separate/label connected patches in the foreground. This higher-level (but still elementary) labeling therefore allows you to count how many connected patches of signal there are in the dataset and is a major improvement compared to the raw detection. However, when your objects/targets are touching, the simple connected components algorithm is not enough and a still higher-level labeling mechanism is necessary. This brings us to the necessity of the functions in this part of Gnuastro's library. The main inputs to the functions in this section are already labeled datasets (for example, with the connected components algorithm above). Each of the labeled regions are independent of each other (the labels specify different classes of targets). Therefore, especially in large datasets, it is often useful to process each label on independent CPU threads in parallel rather than in series. Therefore the functions of this section actually use an array of pixel/element indices (belonging to each label/class) as the main identifier of a region. Using indices will also allow processing of overlapping labels (for example, in deblending problems). Just note that overlapping labels are not yet implemented, but planned. You can use ‘gal_label_indexs’ to generate lists of indices belonging to separate classes from the labeled input. -- Macro: GAL_LABEL_INIT -- Macro: GAL_LABEL_RIVER -- Macro: GAL_LABEL_TMPCHECK Special negative integer values used internally by some of the functions in this section. Recall that meaningful labels are considered to be positive integers ($\geq1$). Zero is conventionally kept for regions with no labels, therefore negative integers can be used for any extra classification in the labeled datasets. -- Function: gal_data_t * gal_label_indexs (gal_data_t *labels, size_t numlabs, size_t minmapsize, int quietmmap) Return an array of ‘gal_data_t’ containers, each containing the pixel indices of the respective label (see *note Generic data container::). ‘labels’ contains the label of each element and has to have an ‘GAL_TYPE_INT32’ type (see *note Library data types::). Only positive (greater than zero) values in ‘labels’ will be used/indexed, other elements will be ignored. Meaningful labels start from ‘1’ and not ‘0’, therefore the output array of ‘gal_data_t’ will contain ‘numlabs+1’ elements. The first (zero-th) element of the output (‘indexs[0]’ in the example below) will be initialized to a dataset with zero elements. This will allow easy (non-confusing) access to the indices of each (meaningful) label. ‘numlabs’ is the number of labels in the dataset. If it is given a value of zero, then the maximum value in the input (largest label) will be found and used. Therefore if it is given, but smaller than the actual number of labels, this function may/will crash (it will write in un-allocated space). ‘numlabs’ is therefore useful in a highly optimized/checked environment. For example, if the returned array is called ‘indexs’, then ‘indexs[10].size’ contains the number of elements that have a label of ‘10’ in ‘labels’ and ‘indexs[10].array’ is an array (after casting to ‘size_t *’) containing the indices of each one of those elements/pixels. By _index_ we mean the 1D position: the input number of dimensions is irrelevant (any dimensionality is supported). In other words, each element's index is the number of elements/pixels between it and the dataset's first element/pixel. Therefore it is always greater or equal to zero and stored in ‘size_t’ type. -- Function: size_t gal_label_watershed (gal_data_t *values, gal_data_t *indexs, gal_data_t *label, size_t *topinds, int min0_max1) Use the watershed algorithm(1) to "over-segment" the pixels in the ‘indexs’ dataset based on values in the ‘values’ dataset. Internally, each local extrema (maximum or minimum, based on ‘min0_max1’) and its surrounding pixels will be given a unique label. For demonstration, see Figures 8 and 9 of Akhlaghi and Ichikawa 2015 (http://arxiv.org/abs/1505.01664). If ‘topinds!=NULL’, it is assumed to point to an already allocated space to write the index of each clump's local extrema, otherwise, it is ignored. The ‘values’ dataset must have a 32-bit floating point type (‘GAL_TYPE_FLOAT32’, see *note Library data types::) and will only be read by this function. ‘indexs’ must contain the indices of the elements/pixels that will be over-segmented by this function and have a ‘GAL_TYPE_SIZE_T’ type, see the description of ‘gal_label_indexs’, above. The final labels will be written in the respective positions of ‘labels’, which must have a ‘GAL_TYPE_INT32’ type and be the same size as ‘values’. When ‘indexs’ is already sorted, this function will ignore ‘min0_max1’. To judge if the dataset is sorted or not (by the values the indices correspond to in ‘values’, not the actual indices), this function will look into the bits of ‘indexs->flag’, for the respective bit flags, see *note Generic data container::. If ‘indexs’ is not already sorted, this function will sort it according to the values of the respective pixel in ‘values’. The increasing/decreasing order will be determined by ‘min0_max1’. Note that if this function is called on multiple threads _and_ ‘values’ points to a different array on each thread, this function will not return a reasonable result. In this case, please sort ‘indexs’ prior to calling this function (see ‘gal_qsort_index_multi_d’ in *note Qsort functions::). When ‘indexs’ is decreasing (increasing), or ‘min0_max1’ is ‘1’ (‘0’), local minima (maxima), are considered rivers (watersheds) and given a label of ‘GAL_LABEL_RIVER’ (see above). Note that rivers/watersheds will also be formed on the edges of the labeled regions or when the labeled pixels touch a blank pixel. Therefore this function will need to check for the presence of blank values. To be most efficient, it is thus recommended to use ‘gal_blank_present’ (with ‘updateflag=1’) prior to calling this function (see *note Library blank values::. Once the flag has been set, no other function (including this one) that needs special behavior for blank pixels will have to parse the dataset to see if it has blank values any more. If you are sure your dataset does not have blank values (by the design of your software), to avoid an extra parsing of the dataset and improve performance, you can set the two bits manually (see the description of ‘flags’ in *note Generic data container::): input->flag |= GAL_DATA_FLAG_BLANK_CH; /* Set bit to 1. */ input->flag &= ~GAL_DATA_FLAG_HASBLANK; /* Set bit to 0. */ -- Function: void gal_label_clump_significance (gal_data_t *values, gal_data_t *std, gal_data_t *label, gal_data_t *indexs, struct gal_tile_two_layer_params *tl, size_t numclumps, size_t minarea, int variance, int keepsmall, gal_data_t *sig, gal_data_t *sigind) This function is usually called after ‘gal_label_watershed’, and is used as a measure to identify which over-segmented "clumps" are real and which are noise. A measurement is done on each clump (using the ‘values’ and ‘std’ datasets, see below). To help in multi-threaded environments, the operation is only done on pixels which are indexed in ‘indexs’. It is expected for ‘indexs’ to be sorted by their values in ‘values’. If not sorted, the measurement may not be reliable. If sorted in a decreasing order, then clump building will start from their highest value and vice-versa. See the description of ‘gal_label_watershed’ for more on ‘indexs’. Each "clump" (identified by a positive integer) is assumed to be surrounded by at least one river/watershed pixel (with a non-positive label). This function will parse the pixels identified in ‘indexs’ and make a measurement on each clump and over all the river/watershed pixels. The number of clumps (‘numclumps’) must be given as an input argument and any clump that is smaller than ‘minarea’ is ignored (because of scatter). If ‘variance’ is non-zero, then the ‘std’ dataset is interpreted as variance, not standard deviation. The ‘values’ and ‘std’ datasets must have a ‘float’ (32-bit floating point) type. Also, ‘label’ and ‘indexs’ must respectively have ‘int32’ and ‘size_t’ types. ‘values’ and ‘label’ must have the same size, but ‘std’ can have three possible sizes: 1) a single element (which will be used for the whole dataset, 2) the same size as ‘values’ (so a different error can be assigned to every pixel), 3) a single value for each tile, based on the ‘tl’ tessellation (see *note Tile grid::). In the last case, a tile/value will be associated to each clump based on its flux-weighted (only positive values) center. The main output is an internally allocated, 1-dimensional array with one value per label. The array information (length, type, etc.) will be written into the ‘sig’ generic data container. Therefore ‘sig->array’ must be ‘NULL’ when this function is called. After this function, the details of the array (number of elements, type and size, etc) will be written in to the various components of ‘sig’, see the definition of ‘gal_data_t’ in *note Generic data container::. Therefore ‘sig’ must already be allocated before calling this function. Optionally (when ‘sigind!=NULL’, similar to ‘sig’) the clump labels of each measurement in ‘sig’ will be written in ‘sigind->array’. If ‘keepsmall’ zero, small clumps (where no measurement is made) will not be included in the output table. This function is initially intended for a multi-threaded environment. In such cases, you will be writing arrays of clump measures from different regions in parallel into an array of ‘gal_data_t’s. You can simply allocate (and initialize), such an array with the ‘gal_data_array_calloc’ function in *note Arrays of datasets::. For example, if the ‘gal_data_t’ array is called ‘array’, you can pass ‘&array[i]’ as ‘sig’. Along with some other functions in ‘label.h’, this function was initially written for *note Segment::. The description of the parameter used to measure a clump's significance is fully given in Akhlaghi 2019 (https://arxiv.org/abs/1909.11230). -- Function: void gal_label_grow_indexs (gal_data_t *labels, gal_data_t *indexs, int withrivers, int connectivity) Grow the (positive) labels of ‘labels’ over the pixels in ‘indexs’ (see description of ‘gal_label_indexs’). The pixels (position in ‘indexs’, values in ‘labels’) that must be "grown" must have a value of ‘GAL_LABEL_INIT’ in ‘labels’ before calling this function. For a demonstration see Columns 2 and 3 of Figure 10 in Akhlaghi and Ichikawa 2015 (http://arxiv.org/abs/1505.01664). In many aspects, this function is very similar to over-segmentation (watershed algorithm, ‘gal_label_watershed’). The big difference is that in over-segmentation local maximums (that are not touching any already labeled pixel) get a separate label. However, here the final number of labels will not change. All pixels that are not directly touching a labeled pixel just get pushed back to the start of the loop, and the loop iterates until its size does not change any more. This is because in a generic scenario some of the indexed pixels might not be reachable through other indexed pixels. The next major difference with over-segmentation is that when there is only one label in growth region(s), it is not mandatory for ‘indexs’ to be sorted by values. If there are multiple labeled regions in growth region(s), then values are important and you can use ‘qsort’ with ‘gal_qsort_index_single_d’ to sort the indices by values in a separate array (see *note Qsort functions::). This function looks for positive-valued neighbors of each pixel in ‘indexs’ and will label a pixel if it touches one. Therefore, it is very important that only pixels/labels that are intended for growth have positive values in ‘labels’ before calling this function. Any non-positive (zero or negative) value will be ignored as a label by this function. Thus, it is recommended that while filling in the ‘indexs’ array values, you initialize all the pixels that are in ‘indexs’ with ‘GAL_LABEL_INIT’, and set non-labeled pixels that you do not want to grow to ‘0’. This function will write into both the input datasets. After this function, some of the non-positive ‘labels’ pixels will have a new positivelabel and the number of useful elements in ‘indexs’ will have decreased. The index of those pixels that could not be labeled will remain inside ‘indexs’. If ‘withrivers’ is non-zero, then pixels that are immediately touching more than one positive value will be given a ‘GAL_LABEL_RIVER’ label. Note that the ‘indexs->array’ is not re-allocated to its new size at the end(2). But since ‘indexs->dsize[0]’ and ‘indexs->size’ have new values after this function is returned, the extra elements just will not be used until they are ultimately freed by ‘gal_data_free’. Connectivity is a value between ‘1’ (fewest number of neighbors) and the number of dimensions in the input (most number of neighbors). For example, in a 2D dataset, a connectivity of ‘1’ and ‘2’ corresponds to 4-connected and 8-connected neighbors. ---------- Footnotes ---------- (1) The watershed algorithm was initially introduced by Vincent and Soille (https://doi.org/10.1109/34.87344). It starts from the minima and puts the pixels in, one by one, to grow them until the touch (create a watershed). For more, also see the Wikipedia article: <https://en.wikipedia.org/wiki/Watershed_%28image_processing%29>. (2) Note that according to the GNU C Library, even a ‘realloc’ to a smaller size can also cause a re-write of the whole array, which is not a cheap operation.  File: gnuastro.info, Node: Convolution functions, Next: Pooling functions, Prev: Labeled datasets, Up: Gnuastro library 12.3.26 Convolution functions (‘convolve.h’) -------------------------------------------- Convolution is a very common operation during data analysis and is thoroughly described as part of Gnuastro's *note Convolve:: program which is fully devoted to this job. Because of the complete introduction that was presented there, we will directly skip onto the currently available convolution functions in Gnuastro's library. As of this version, only spatial domain convolution is available in Gnuastro's libraries. We have not had the time to liberate the frequency domain function convolution and deconvolution functions that are available in the Convolve program(1). -- Function: gal_data_t * gal_convolve_spatial (gal_data_t *tiles, gal_data_t *kernel, size_t numthreads, int edgecorrection, int convoverch, int conv_on_blank) Convolve the given ‘tiles’ dataset (possibly a list of tiles, see *note List of gal_data_t:: and *note Tessellation library::) with ‘kernel’ on ‘numthreads’ threads. When ‘edgecorrection’ is non-zero, it will correct for the edge dimming effects as discussed in *note Edges in the spatial domain::. When ‘conv_on_blank’ is non-zero, this function will also attempt convolution over the blank pixels (and therefore give values to the blank pixels that are near non-blank pixels). ‘tiles’ can be a single/complete dataset, but in that case the speed will be very slow. Therefore, for larger images, it is recommended to give a list of tiles covering a dataset. To create a tessellation that fully covers an input image, you may use ‘gal_tile_full’, or ‘gal_tile_full_two_layers’ to also define channels over your input dataset. These functions are discussed in *note Tile grid::. You may then pass the list of tiles to this function. This is the recommended way to call this function because spatial domain convolution is slow and breaking the job into many small tiles and working on simultaneously on several threads can greatly speed up the processing. If the tiles are defined within a channel (a larger tile), by default convolution will be done within the channel, so pixels on the edge of a channel will not be affected by their neighbors that are in another channel. See *note Tessellation:: for the necessity of channels in astronomical data analysis. This behavior may be disabled when ‘convoverch’ is non-zero. In this case, it will ignore channel borders (if they exist) and mix all pixels that cover the kernel within the dataset. -- Function: void gal_convolve_spatial_correct_ch_edge (gal_data_t *tiles, gal_data_t *kernel, size_t numthreads, int edgecorrection, int conv_on_blank, gal_data_t *tocorrect) Correct the edges of channels in an already convolved image when it was initially convolved with ‘gal_convolve_spatial’ and ‘convoverch==0’. In that case, strong boundaries might exist on the channel edges. So if you later need to remove those boundaries at later steps of your processing, you can call this function. It will only do convolution on the tiles that are near the edge and were effected by the channel borders. Other pixels in the image will not be touched. Hence, it is much faster. When ‘conv_on_blank’ is non-zero, this function will also attempt convolution over the blank pixels (and therefore give values to the blank pixels that are near non-blank pixels). ---------- Footnotes ---------- (1) Hence any help would be greatly appreciated.  File: gnuastro.info, Node: Pooling functions, Next: Interpolation, Prev: Convolution functions, Up: Gnuastro library 12.3.27 Pooling functions (‘pool.h’) ------------------------------------ Pooling is the process of reducing the complexity of the input image (its size and variation of pixel values). Its underlying concepts, and an analysis of its usefulness, is fully described in *note Pooling operators::. The following functions are available pooling in Gnuastro. Just note that unlike the Arithmetic operators, the output of these functions should contain a correct WCS in their output. -- Function: gal_data_t * gal_pool_max (gal_data_t *input, size_t psize, size_t numthreads) Return the max-pool of ‘input’, assuming a pool size of ‘psize’ pixels. The number of threads to use can be set with ‘numthreads’. -- Function: gal_data_t * gal_pool_min (gal_data_t *input, size_t psize, size_t numthreads) Return the min-pool of ‘input’, assuming a pool size of ‘psize’ pixels. The number of threads to use can be set with ‘numthreads’. -- Function: gal_data_t * gal_pool_sum (gal_data_t *input, size_t psize, size_t numthreads) Return the sum-pool of ‘input’, assuming a pool size of ‘psize’ pixels. The number of threads to use can be set with ‘numthreads’. -- Function: gal_data_t * gal_pool_mean (gal_data_t *input, size_t psize, size_t numthreads) Return the mean-pool of ‘input’, assuming a pool size of ‘psize’ pixels. The number of threads to use can be set with ‘numthreads’. -- Function: gal_data_t * gal_pool_median (gal_data_t *input, size_t psize, size_t numthreads) Return the median-pool of ‘input’, assuming a pool size of ‘psize’ pixels. The number of threads to use can be set with ‘numthreads’.  File: gnuastro.info, Node: Interpolation, Next: Warp library, Prev: Pooling functions, Up: Gnuastro library 12.3.28 Interpolation (‘interpolate.h’) --------------------------------------- During data analysis, it happens that parts of the data cannot be given a value, but one is necessary for the higher-level analysis. For example, a very bright star saturated part of your image and you need to fill in the saturated pixels with some values. Another common usage case are masked sky-lines in 1D spectra that similarly need to be assigned a value for higher-level analysis. In other situations, you might want a value in an arbitrary point: between the elements/pixels where you have data. The functions described in this section are for such operations. The parametric interpolations discussed below are wrappers around the interpolation functions of the GNU Scientific Library (or GSL, see *note GNU Scientific Library::). To identify the different GSL interpolation types, Gnuastro's ‘gnuastro/interpolate.h’ header file contains macros that are discussed below. The GSL wrappers provided here are not yet complete because we are too busy. If you need them, please consider helping us in adding them to Gnuastro's library. Your contributions would be very welcome and appreciated. -- Macro: GAL_INTERPOLATE_NEIGHBORS_METRIC_RADIAL -- Macro: GAL_INTERPOLATE_NEIGHBORS_METRIC_MANHATTAN -- Macro: GAL_INTERPOLATE_NEIGHBORS_METRIC_INVALID The metric used to find distance for nearest neighbor interpolation. A radial metric uses the simple Euclidean function to find the distance between two pixels. A manhattan metric will always be an integer and is like steps (but is also much faster to calculate than radial metric because it does not need a square root calculation). -- Macro: GAL_INTERPOLATE_NEIGHBORS_FUNC_MIN -- Macro: GAL_INTERPOLATE_NEIGHBORS_FUNC_MAX -- Macro: GAL_INTERPOLATE_NEIGHBORS_FUNC_MEAN -- Macro: GAL_INTERPOLATE_NEIGHBORS_FUNC_MEDIAN -- Macro: GAL_INTERPOLATE_NEIGHBORS_FUNC_INVALID The various types of nearest-neighbor interpolation functions for ‘gal_interpolate_neighbors’. The names are descriptive for the operation they do, so we will not go into much more detail here. The median operator will be one of the most used, but operators like the maximum are good to fill the center of saturated stars. -- Function: gal_data_t * gal_interpolate_neighbors (gal_data_t *input, struct gal_tile_two_layer_params *tl, uint8_t metric, size_t numneighbors, size_t numthreads, int onlyblank, int aslinkedlist, int function) Interpolate the values in the input dataset using a calculated statistics from the distribution of their ‘numneighbors’ closest neighbors. The desired statistics is determined from the ‘func’ argument, which takes any of the ‘GAL_INTERPOLATE_NEIGHBORS_FUNC_’ macros (see above). This function is non-parametric and thus agnostic to the input's number of dimension or shape of the distribution. Distance can be defined on different metrics that are identified through ‘metric’ (taking values determined by the ‘GAL_INTERPOLATE_NEIGHBORS_METRIC_’ macros described above). If ‘onlyblank’ is non-zero, then only blank elements will be interpolated and pixels that already have a value will be left untouched. This function is multi-threaded and will run on ‘numthreads’ threads (see ‘gal_threads_number’ in *note Multithreaded programming::). ‘tl’ is Gnuastro's tessellation structure used to define tiles over an image and is fully described in *note Tile grid::. When ‘tl!=NULL’, then it is assumed that the ‘input->array’ contains one value per tile and interpolation will respect certain tessellation properties, for example, to not interpolate over channel borders. If several datasets have the same set of blank values, you do not need to call this function multiple times. When ‘aslinkedlist’ is non-zero, then ‘input’ will be seen as a *note List of gal_data_t::. In this case, the same neighbors will be used for all the datasets in the list. Of course, the values for each dataset will be different, so a different value will be written in each dataset, but the neighbor checking that is the most CPU intensive part will only be done once. This is a non-parametric and robust function for interpolation. The interpolated values are also always within the range of the non-blank values and strong outliers do not get created. However, this type of interpolation must be used with care when there are gradients. This is because it is non-parametric and if there are not enough neighbors, step-like features can be created. -- Macro: GAL_INTERPOLATE_1D_INVALID This is just a place-holder to manage errors. -- Macro: GAL_INTERPOLATE_1D_LINEAR [From GSL:] Linear interpolation. This interpolation method does not require any additional memory. -- Macro: GAL_INTERPOLATE_1D_POLYNOMIAL [From GSL:] Polynomial interpolation. This method should only be used for interpolating small numbers of points because polynomial interpolation introduces large oscillations, even for well-behaved datasets. The number of terms in the interpolating polynomial is equal to the number of points. -- Macro: GAL_INTERPOLATE_1D_CSPLINE [From GSL:] Cubic spline with natural boundary conditions. The resulting curve is piece-wise cubic on each interval, with matching first and second derivatives at the supplied data-points. The second derivative is chosen to be zero at the first point and last point. -- Macro: GAL_INTERPOLATE_1D_CSPLINE_PERIODIC [From GSL:] Cubic spline with periodic boundary conditions. The resulting curve is piece-wise cubic on each interval, with matching first and second derivatives at the supplied data-points. The derivatives at the first and last points are also matched. Note that the last point in the data must have the same y-value as the first point, otherwise the resulting periodic interpolation will have a discontinuity at the boundary. -- Macro: GAL_INTERPOLATE_1D_AKIMA [From GSL:] Non-rounded Akima spline with natural boundary conditions. This method uses the non-rounded corner algorithm of Wodicka. -- Macro: GAL_INTERPOLATE_1D_AKIMA_PERIODIC [From GSL:] Non-rounded Akima spline with periodic boundary conditions. This method uses the non-rounded corner algorithm of Wodicka. -- Macro: GAL_INTERPOLATE_1D_STEFFEN [From GSL:] Steffen's method(1) guarantees the monotonicity of the interpolating function between the given data points. Therefore, minima and maxima can only occur exactly at the data points, and there can never be spurious oscillations between data points. The interpolated function is piece-wise cubic in each interval. The resulting curve and its first derivative are guaranteed to be continuous, but the second derivative may be discontinuous. -- Function: gsl_spline * gal_interpolate_1d_make_gsl_spline (gal_data_t *X, gal_data_t *Y, int type_1d) Allocate and initialize a GNU Scientific Library (GSL) 1D ‘gsl_spline’ structure using the non-blank elements of ‘Y’. ‘type_1d’ identifies the interpolation scheme and must be one of the ‘GAL_INTERPOLATE_1D_*’ macros defined above. If ‘X==NULL’, the X-axis is assumed to be integers starting from zero (the index of each element in ‘Y’). Otherwise, the values in ‘X’ will be used to initialize the interpolation structure. Note that when given, ‘X’ must _not_ contain any blank elements and it must be sorted (in increasing order). Each interpolation scheme needs a minimum number of elements to successfully operate. If the number of non-blank values in ‘Y’ is less than this number, this function will return a ‘NULL’ pointer. To be as generic and modular as possible, GSL's tools are low-level. Therefore before doing the interpolation, many steps are necessary (like preparing your dataset, then allocating and initializing ‘gsl_spline’). The metadata available in Gnuastro's *note Generic data container:: make it easy to hide all those preparations within this function. Once ‘gsl_spline’ has been initialized by this function, the interpolation can be evaluated for any X value within the non-blank range of the input using ‘gsl_spline_eval’ or ‘gsl_spline_eval_e’. For example, in the small program below (‘sample-interp.c’), we read the first two columns of the table in ‘table.txt’ and feed them to this function to later estimate the values in the second column for three selected points. You can use *note BuildProgram:: to compile and run this function, see *note Library demo programs:: for more. Contents of the ‘table.txt’ file: $ cat table.txt 0 0 1 2 3 6 4 8 6 12 8 16 9 18 Contents of the ‘sample-interp.c’ file: #include <stdio.h> #include <stdlib.h> #include <gnuastro/table.h> #include <gnuastro/interpolate.h> int main(void) { size_t i; gal_data_t *X, *Y; gsl_spline *spline; gsl_interp_accel *acc; gal_list_str_t *cols=NULL; /* Change the values based on your input table. */ double points[]={1.8, 2.5, 7}; /* Read the first two columns from `tab.txt'. IMPORTANT: the list is first-in-first-out, so the output column order is the inverse of the input order. */ gal_list_str_add(&cols, "1", 0); gal_list_str_add(&cols, "2", 0); Y=gal_table_read("table.txt", NULL, NULL, cols, GAL_TABLE_SEARCH_NAME, 0, 1, -1, 1, NULL); X=Y->next; /* Allocate the GSL interpolation accelerator and make the `gsl_spline' structure. */ acc=gsl_interp_accel_alloc(); spline=gal_interpolate_1d_make_gsl_spline(X, Y, GAL_INTERPOLATE_1D_STEFFEN); /* Calculate the respective value for all the given points, if `spline' could be allocated. */ if(spline) for(i=0; i<(sizeof points)/(sizeof *points); ++i) printf("%f: %f\n", points[i], gsl_spline_eval(spline, points[i], acc)); /* Clean up and return. */ gal_data_free(X); gal_data_free(Y); gsl_spline_free(spline); gsl_interp_accel_free(acc); gal_list_str_free(cols, 0); return EXIT_SUCCESS; } Compile and run this program with *note BuildProgram:: to see the interpolation results for the three points within the program. $ astbuildprog sample-interp.c --quiet 1.800000: 3.600000 2.500000: 5.000000 7.000000: 14.000000 -- Function: void gal_interpolate_1d_blank (gal_data_t *in, int type_1d) Fill the blank elements of ‘in’ using the rest of the elements and the given interpolation. The interpolation scheme can be set through ‘type_1d’, which accepts any of the ‘GAL_INTERPOLATE_1D_*’ macros above. The interpolation is internally done in 64-bit floating point type (‘double’). However the evaluated/interpolated values (originally blank) will be written (in ‘in’) with its original numeric datatype, using C's standard type conversion. By definition, interpolation is only defined "between" valid points. Therefore, if any number of elements on the start or end of the 1D array are blank, those elements will not be interpolated and will remain blank. To see if any blank (non-interpolated) elements remain, you can use ‘gal_blank_present’ on ‘in’ after this function is finished. ---------- Footnotes ---------- (1) <http://adsabs.harvard.edu/abs/1990A%26A...239..443S>  File: gnuastro.info, Node: Warp library, Next: Color functions, Prev: Interpolation, Up: Gnuastro library 12.3.29 Warp library (‘warp.h’) ------------------------------- Warping an image to a new pixel grid is commonly necessary as part of astronomical data reduction, for an introduction, see *note Warp::. For details of how we resample the old pixel grid to the new pixel grid, see *note Resampling::. Gnuastro's Warp program uses the following functions for its default mode (when no linear warps are requested). Through the following functions, you can directly access those features in your own custom programs. The linear warping operations of the Warp program aren't yet brought into the library. If you need them please get in touch with us at ‘bug-gnuastro@gnu.org’. For usage examples of this library, please see *note Library demo - Warp to another image:: or *note Library demo - Warp to new grid::. You are free to provide any valid WCS keywords to the functions defined in this library using the ‘gal_warp_wcsalign_t’ data type. This might be used to align the input image to the standard WCS grid, potentially changing the pixel scale, removing any valid WCS non-linear distortion available, and projecting to any valid WCS projection type. Further details of the warp library functions and parameters are shown below: -- Macro: GAL_WARP_OUTPUT_NAME_WARPED -- Macro: GAL_WARP_OUTPUT_NAME_MAXFRAC Names of the output datasets (in the ‘name’ component of the output ‘gal_data_t’s). By default the output is only a single dataset, but when the ‘checkmaxfrac’ component of the input is non-zero, it will contain two datasets. -- Type (C struct): gal_warp_wcsalign_t The main data container for inputs, output and internal variables to simplify the WCS-aligning functions. Due to the large number of input variables, this structure makes it easy to call the main functions. Similar to ‘gal_data_t’, the ‘gal_warp_wcsalign_t’ is a structure ‘typedef’'d as a new type, see *note Library data container::. Please note that this structure has elements that are _allocated_ dynamically and must be freed after usage. ‘gal_warp_wcsalign_free’ only frees the internal variables, so you are responsible for freeing your own inputs (‘cdelt’, ‘input’, etc.) and the output. The internal variables are cached here to cut cpu-intensive computations. To prevent from using uninitialized variables, we recommend using the helper function ‘gal_warp_wcsalign_template’ to get a clean structure before setting your own variables. The structure and each of its elements are defined below: typedef struct { /* Arguments given (and later freed) by the caller. If 'twcs' is given, then the "WCS To build" elements will be ignored. */ gal_data_t *input; size_t numthreads; double coveredfrac; size_t edgesampling; gal_data_t *widthinpix; uint8_t checkmaxfrac; struct wcsprm *twcs; /* WCS Predefined. */ gal_data_t *ctype; /* WCS To build. */ gal_data_t *cdelt; /* WCS To build. */ gal_data_t *center; /* WCS To build. */ /* Output (must be freed by caller) */ gal_data_t *output; /* Internal variables (allocated and freed internally) */ size_t v0; size_t nhor; size_t ncrn; size_t gcrn; int isccw; gal_data_t *vertices; } gal_warp_wcsalign_t; ‘gal_data_t *input’ The input dataset. This dataset must contain both the image array of type ‘GAL_TYPE_FLOAT64’, and ‘input->wcs’ should not be ‘NULL’ for the WCS-aligning operations to work, see *note Library demo - Warp to new grid::. ‘size_t numthreads’ Number of threads to use during the WCS aligning operations. If the given value is ‘0’, the library will calculate the number of available threads at run-time. The ‘warp’ library functions are _thread-safe_ so you can freely enjoy the merits of parallel processing. ‘double coveredfrac’ Acceptable fraction of output pixel that is covered by input pixels. The value should be between 0 and 1 (inclusive). If the area of an output pixel is covered by less than this fraction, its value will be ‘NaN’. For more, see the description of ‘--coveredfrac’ in *note Invoking astwarp::. ‘size_t edgesampling’ Set the number of extra vertices along each edge of the output pixel's polygon to account for potential curvature due to projection or distortion. A value of ‘0’ is usually enough for this (so the pixel is only defined by a four vertice polygon. Greater values increase memory usage and program execution time. For more, please see the description of ‘--edgesampling’ in *note Align pixels with WCS considering distortions::. ‘gal_data_t *widthinpix’ Output image size (width and height) in number of pixels. If a ‘NULL’ pointer is passed, the WCS-aligning operations will estimate the output image size internally such that it contains the full input. This dataset should have a type of ‘GAL_TYPE_SIZE_T’ and contain exactly two _odd_ values. This ensures that the center of the central pixel lies at the requested central coordinate (note that an image with an even number of pixels doesn't have a "central" pixel! ‘struct wcsprm *twcs’ The target grid WCS which must follow the standard WCSLIB structure. You can read it from a file using ‘gal_wcs_read’ or create an entirely new one with ‘gal_wcs_create’ and later free it with ‘gal_wcs_free’, see *note World Coordinate System::. If this element is given, the ‘ctype’, ‘cdelt’ and ‘center’ elements (which are used to construct a WCS internally) are ignored. Please note that the ‘wcsprm’ structure doesn't contain the image size. To set the final image size, you should use ‘widthinpix’. ‘gal_data_t *ctype’ The output's projection type. The dataset has to have the type ‘GAL_TYPE_STRING’, containing exactly two strings. Both strings will be directly passed to WCSLIB and should conform to the FITS standard's ‘CTYPEi’ keywords, see the description of ‘--ctype’ in *note Align pixels with WCS considering distortions::. For example, ‘"RA---TAN"’ and ‘"DEC--TAN"’, or ‘"RA---HPX"’ and ‘"DEC--HPX"’. ‘gal_data_t *cdelt’ Output pixel scale (size of pixel in the WCS units: value to ‘CUNITi’ keywords in FITS, usually degrees). The dataset should have a type of ‘GAL_TYPE_FLOAT64’ and contain exactly two values. Hint: to convert arcsec to degrees, just divide by 3600. ‘gal_data_t *center’ WCS coordinate of the center of the central pixel of the output. The units depend on the WCS, for example, if the ‘CUNITi’ keywords are ‘deg’, it is in degrees. This dataset should have a type of ‘GAL_TYPE_FLOAT64’ and contain exactly two values. ‘uint8_t checkmaxfrac’ When this is non-zero, the output will be a two-element *note List of gal_data_t::. The second element shows the Moiré pattern (https://en.wikipedia.org/wiki/Moir%C3%A9_pattern) of the warp. For more, see *note Moire pattern in stacking and its correction::. -- Function: gal_warp_wcsalign_t gal_warp_wcsalign_template (void) A high-level helper function that returns a clean ‘gal_warp_wcsalign_t’ struct with all values initialized This function returns a copy of a statically allocated structure. So you don't need to free the returned structure. The Warp library decides on the program flow based on this struct. Uninitialized pointers can point to random space in RAM which can create segmentation faults, or even worse, produce unnoticed side-effects. It is therefore good practice to manually set unused pointers to ‘NULL’ and give blank values to numbers Since there are many variables and pointers in ‘gal_warp_wcsalign_t’, it is easy to forget _initializing_ them. With that said, we recommend using this function to minimize human error. -- Function: void gal_warp_wcsalign (gal_warp_wcsalign_t *wa) A high-level function to align the input dataset's pixels to its WCS coordinates and write the result in ‘wa->output’. This function assumes that the input variables have already been set in the ‘wa’ structure. The input variables are clearly shown in the definition of ‘gal_warp_wcsalign_t’. It will call the lower level functions below to do the job and will free the internal variables afterwards. The following low-level functions are called from the high-level ‘gal_warp_wcsalign’ function. They are provided here in scenarios where fine grain control over the thread workflow is necessary, see *note Multithreaded programming::. -- Function: void gal_warp_wcsalign_init (gal_warp_wcsalign_t *wa) Low-level function to initialize all the elements inside the ‘wa’ structure assuming that the input variables have been set. The input variables are clearly shown in the definition of ‘gal_warp_wcsalign_t’. This includes sanity checking the input arguments, as well as allocating the output image's empty pixels (that can be filled with ‘gal_warp_wcsalign_onpix’, possibly on threads). -- Function: void gal_warp_wcsalign_onpix (gal_warp_wcsalign_t *nl, size_t ind) Low-level function that fills pixel ‘ind’ (counting from 0) in the already initialized output image. -- Function: void * gal_warp_wcsalign_onthread (void *inparam) Low-level worker function that can be passed to the high-level ‘gal_threads_spin_off’ or the lower-level ‘pthread_create’ with some modifications, see *note Multithreaded programming::. -- Function: void gal_warp_wcsalign_free (gal_warp_wcsalign_t *wa) Low-level function to free the internal variables inside ‘wa’ only. The caller must free the input pointers themselves, this function will not free them (they may be necessary in other parts of the caller's higher-level architecture). -- Function: void gal_warp_pixelarea (gal_warp_wcsalign_t *wa) Calculate each input pixel's area based on its WCS and save it to a copy of the input image with only one difference: the pixel values now show pixel area. For examples on its usage, see *note Pixel information images::.  File: gnuastro.info, Node: Color functions, Next: Git wrappers, Prev: Warp library, Up: Gnuastro library 12.3.30 Color functions (‘color.h’) ----------------------------------- The available pre-defined colors in Gnuastro are shown and discussed in *note Vector graphics colors::. This part of Gnuastro is currently in charge of mapping the color names to the color IDs and to return the red-green-blue fractions of each color. On a terminal that supports 24-bit (true color), you can see the full list of color names and a demo of each color with this command: $ astconvertt --listcolors For each color we have a separate macro that starts with ‘GAL_COLOR_’, and ends with the color name in all-caps. -- Macro: GAL_COLOR_INVALID -- Macro: GAL_COLOR_MEDIUMVIOLETRED -- Macro: GAL_COLOR_DEEPPINK -- Macro: GAL_COLOR_* The integer identifiers for each of the named colors in Gnuastro. Except for the first one (‘GAL_COLOR_INVALID’), we currently have 140 colors from the extended web colors (https://en.wikipedia.org/wiki/Web_colors#Extended_colors). The full list of colors and a demo can be visually inspected on the command-line with the ‘astconvertt --listcolors’ command and is also shown in *note Vector graphics colors::. The macros have the same names, just in full-caps. The functions below can be used to interact with the pre-defined colors: -- Function: uint8_t gal_color_name_to_id (char *name) Given the name of a color, return the identifier. The name matching is not case-sensitive. -- Function: char * gal_color_id_to_name (uint8_t color) Given the ID of a color, return its name. -- Function: void gal_color_in_rgb (uint8_t color, float *f) Given the identifier of a color, write the color's red-green-blue fractions in the space that ‘f’ points to. It is up to the caller to have the space for three 32-bit floating point numbers to be already allocated before calling this function.  File: gnuastro.info, Node: Git wrappers, Next: Python interface, Prev: Color functions, Up: Gnuastro library 12.3.31 Git wrappers (‘git.h’) ------------------------------ Git is one of the most common tools for version control and it can often be useful during development, for example, see ‘COMMIT’ keyword in *note Output FITS files::. At installation time, Gnuastro will also check for the existence of libgit2, and store the value in the ‘GAL_CONFIG_HAVE_LIBGIT2’, see *note Configuration information:: and *note Optional dependencies::. ‘gnuastro/git.h’ includes ‘gnuastro/config.h’ internally, so you will not have to include both for this macro. -- Function: char * gal_git_describe ( ) When libgit2 is present and the program is called within a directory that is version controlled, this function will return a string containing the commit description (similar to Gnuastro's unofficial version number, see *note Version numbering::). If there are uncommitted changes in the running directory, it will add a '‘-dirty’' prefix to the description. When there is no tagged point in the previous commit, this function will return a uniquely abbreviated commit object as fallback. This function is used for generating the value of the ‘COMMIT’ keyword in *note Output FITS files::. The output string is similar to the output of the following command: $ git describe --dirty --always Space for the output string is allocated within this function, so after using the value you have to ‘free’ the output string. If libgit2 is not installed or the program calling this function is not within a version controlled directory, then the output will be the ‘NULL’ pointer.  File: gnuastro.info, Node: Python interface, Next: Unit conversion library, Prev: Git wrappers, Up: Gnuastro library 12.3.32 Python interface (‘python.h’) ------------------------------------- Python (https://en.wikipedia.org/wiki/Python_(programming_language)) is a high-level interpreted programming language that is used by some for data analysis. Python itself is written in C, which is the same language that Gnuastro is written in. Hence Gnuastro's library can be directly used in Python wrappers. The functions in this section provide some low-level features to simplify the creation of Python modules that may want to use Gnuastro's advanced and powerful features directly. To see why Gnuastro was written in C, please see *note Why C::. *Python interface is not built by default:* to have the features described in this section, Gnuastro's library needs to be built with the ‘--with-python’ configuration option. For more, on this configuration option, see *note Gnuastro configure options::. To see if the Gnuastro library that you are linking with has these features, you can check the value of ‘GAL_CONFIG_HAVE_PYTHON’ macro, see *note Configuration information::. The Gnuastro Python Package is built using CPython. This entails using Python wrappers around currently existing Gnuastro library functions to build Python Extension Modules (https://docs.python.org/3/extending/extending.html#). It also makes use of the NumPy C-API (https://numpy.org/doc/stable/reference/c-api/index.html) for dealing with data arrays. Writing an interface between these and Gnuastro can be simplified using the functions below. Since many of these functions depend on the Gnuastro Library itself, it is more convenient to package them with the Library to facilitate the work of Python package. These functions will be expanding as Gnuastro's own Python module (pyGnuastro) grows. The Python interface of Gnuastro's library is built and installed by default if a Python 3.0.0 or greater with NumPy is found in ‘$PATH’. Users may disable this interface with the ‘--without-python’ option to ‘./configure’ when they installed Gnuastro, see *note Gnuastro configure options::. If you have problems in a Python virtual env, see *note Optional dependencies::. Because Python is an optional dependency of Gnuastro, the following functions may not be available on some systems. To check if the installed Gnuastro library was compiled with the following functions, you can use the ‘GAL_CONFIG_HAVE_PYTHON’ macro which is defined in ‘gnuastro/config.h’, see *note Configuration information::. -- Function: int gal_python_type_to_numpy (uint8_t type) Returns the NumPy datatype corresponding to a certain Gnuastro ‘type’, see *note Library data types::. -- Function: uint8_t gal_python_type_from_numpy (int type) Returns Gnuastro's numerical datatype that corresponds to the input NumPy ‘type’. For Gnuastro's recognized data types, see *note Library data types::.  File: gnuastro.info, Node: Unit conversion library, Next: Spectral lines library, Prev: Python interface, Up: Gnuastro library 12.3.33 Unit conversion library (‘units.h’) ------------------------------------------- Datasets can contain values in various formats or units. The functions in this section are defined to facilitate the easy conversion between them and are declared in ‘units.h’. If there are certain conversions that are useful for your work, please get in touch. -- Function: int gal_units_extract_decimal (char *convert, const char *delimiter, double *args, size_t n) Parse the input ‘convert’ string with a certain delimiter (for example, ‘01:23:45’, where the delimiter is ‘":"’) as multiple numbers (for example, 1,23,45) and write them as an array in the space that ‘args’ is pointing to. The expected number of values in the string is specified by the ‘n’ argument (3 in the example above). If the function succeeds, it will return 1, otherwise it will return 0 and the values may not be fully written into ‘args’. If the number of values parsed in the string is different from ‘n’, this function will fail. -- Function: double gal_units_ra_to_degree (char *convert) Convert the input Right Ascension (RA) string (in the format of hours, minutes and seconds either as ‘_h_m_s’ or ‘_:_:_’) to degrees (a single floating point number). -- Function: double gal_units_dec_to_degree (char *convert) Convert the input Declination (Dec) string (in the format of degrees, arc-minutes and arc-seconds either as ‘_d_m_s’ or ‘_:_:_’) to degrees (a single floating point number). -- Function: char * gal_units_degree_to_ra (double decimal, int usecolon) Convert the input Right Ascension (RA) degree (a single floating point number) to old/standard notation (in the format of hours, minutes and seconds of ‘_h_m_s’). If ‘usecolon!=0’, then the delimiters between the components will be colons: ‘_:_:_’. -- Function: char * gal_units_degree_to_dec (double decimal, int usecolon) Convert the input Declination (Dec) degree (a single floating point number) to old/standard notation (in the format of degrees, arc-minutes and arc-seconds of ‘_d_m_s’). If ‘usecolon!=0’, then the delimiters between the components will be colons: ‘_:_:_’. -- Function: double gal_units_counts_to_mag (double counts, double zeropoint) Convert counts to magnitudes through the given zero point. For more on the equation, see *note Brightness flux magnitude::. -- Function: double gal_units_mag_to_counts (double mag, double zeropoint) Convert magnitudes to counts through the given zero point. For more on the equation, see *note Brightness flux magnitude::. -- Function: double gal_units_mag_to_sb (double mag, double area_arcsec2) Calculate the surface brightness of a given magnitude, over a certain area in units of arcsec$^2$. For more on the equation, see *note Brightness flux magnitude::. -- Function: double gal_units_sb_to_mag (double sb, double area_arcsec2) Calculate the magnitude of a given surface brightness, over a certain area in units of arcsec$^2$. For more on the equation, see *note Brightness flux magnitude::. -- Function: double gal_units_counts_to_sb (double counts, double zeropoint_ab, double area_arcsec2) Calculate the surface brightness of a given count level, over a certain area in units of arcsec$^2$, assuming a certain AB zero point. For more on the equation, see *note Brightness flux magnitude::. -- Function: double gal_units_sb_to_counts (double sb, double zeropoint_ab, double area_arcsec2) Calculate the counts corresponding to a given surface brightness, over a certain area in units of arcsec$^2$. For more on the equation, see *note Brightness flux magnitude::. -- Function: double gal_units_counts_to_jy (double counts, double zeropoint_ab) Convert counts to Janskys through an AB magnitude-based zero point. For more on the equation, see *note Brightness flux magnitude::. -- Function: double gal_units_au_to_pc (double au) Convert the input value (assumed to be in Astronomical Units) to Parsecs. For the conversion equation, see the description of ‘au-to-pc’ operator in *note Arithmetic operators::. -- Function: double gal_units_counts_to_nanomaggy (double counts, double zeropoint_ab) Convert counts to Nanomaggy (with fixed zero point of 22.5) through an AB magnitude-based zero point. -- Function: double gal_units_nanomaggy_to_counts (double counts, double zeropoint_ab) Convert Nanomaggy (with fixed zero point of 22.5) to counts through an AB magnitude-based zero point. -- Function: double gal_units_pc_to_au (double pc) Convert the input value (assumed to be in Parsecs) to Astronomical Units (AUs). For the conversion equation, see the description of ‘au-to-pc’ operator in *note Arithmetic operators::. -- Function: double gal_units_ly_to_pc (double ly) Convert the input value (assumed to be in Light-years) to Parsecs. For the conversion equation, see the description of ‘ly-to-pc’ operator in *note Arithmetic operators::. -- Function: double gal_units_pc_to_ly (double pc) Convert the input value (assumed to be in Parsecs) to Light-years. For the conversion equation, see the description of ‘ly-to-pc’ operator in *note Arithmetic operators::. -- Function: double gal_units_ly_to_au (double ly) Convert the input value (assumed to be in Light-years) to Astronomical Units. For the conversion equation, see the description of ‘ly-to-pc’ operator in *note Arithmetic operators::. -- Function: double gal_units_au_to_ly (double au) Convert the input value (assumed to be in Astronomical Units) to Light-years. For the conversion equation, see the description of ‘ly-to-pc’ operator in *note Arithmetic operators::.  File: gnuastro.info, Node: Spectral lines library, Next: Cosmology library, Prev: Unit conversion library, Up: Gnuastro library 12.3.34 Spectral lines library (‘speclines.h’) ---------------------------------------------- Gnuastro's library has the following macros and functions for dealing with spectral lines. All these functions are declared in ‘gnuastro/spectra.h’. -- Macro: GAL_SPECLINES_INVALID -- Macro: GAL_SPECLINES_Ne_VIII_770 -- Macro: GAL_SPECLINES_Ne_VIII_780 -- Macro: GAL_SPECLINES_Ly_epsilon -- Macro: GAL_SPECLINES_Ly_delta -- Macro: GAL_SPECLINES_Ly_gamma -- Macro: GAL_SPECLINES_C_III_977 -- Macro: GAL_SPECLINES_N_III_989 -- Macro: GAL_SPECLINES_N_III_991_51 -- Macro: GAL_SPECLINES_N_III_991_57 -- Macro: GAL_SPECLINES_Ly_beta -- Macro: GAL_SPECLINES_O_VI_1031 -- Macro: GAL_SPECLINES_O_VI_1037 -- Macro: GAL_SPECLINES_Ar_I_1066 -- Macro: GAL_SPECLINES_Ly_alpha -- Macro: GAL_SPECLINES_N_V_1238 -- Macro: GAL_SPECLINES_N_V_1242 -- Macro: GAL_SPECLINES_Si_II_1260 -- Macro: GAL_SPECLINES_Si_II_1264 -- Macro: GAL_SPECLINES_O_I_1302 -- Macro: GAL_SPECLINES_C_II_1334 -- Macro: GAL_SPECLINES_C_II_1335 -- Macro: GAL_SPECLINES_Si_IV_1393 -- Macro: GAL_SPECLINES_O_IV_1397 -- Macro: GAL_SPECLINES_O_IV_1399 -- Macro: GAL_SPECLINES_Si_IV_1402 -- Macro: GAL_SPECLINES_N_IV_1486 -- Macro: GAL_SPECLINES_C_IV_1548 -- Macro: GAL_SPECLINES_C_IV_1550 -- Macro: GAL_SPECLINES_He_II_1640 -- Macro: GAL_SPECLINES_O_III_1660 -- Macro: GAL_SPECLINES_O_III_1666 -- Macro: GAL_SPECLINES_N_III_1746 -- Macro: GAL_SPECLINES_N_III_1748 -- Macro: GAL_SPECLINES_Al_III_1854 -- Macro: GAL_SPECLINES_Al_III_1862 -- Macro: GAL_SPECLINES_Si_III -- Macro: GAL_SPECLINES_C_III_1908 -- Macro: GAL_SPECLINES_N_II_2142 -- Macro: GAL_SPECLINES_O_III_2320 -- Macro: GAL_SPECLINES_C_II_2323 -- Macro: GAL_SPECLINES_C_II_2324 -- Macro: GAL_SPECLINES_Fe_XI_2648 -- Macro: GAL_SPECLINES_He_II_2733 -- Macro: GAL_SPECLINES_Mg_V_2782 -- Macro: GAL_SPECLINES_Mg_II_2795 -- Macro: GAL_SPECLINES_Mg_II_2802 -- Macro: GAL_SPECLINES_Fe_IV_2829 -- Macro: GAL_SPECLINES_Fe_IV_2835 -- Macro: GAL_SPECLINES_Ar_IV_2853 -- Macro: GAL_SPECLINES_Ar_IV_2868 -- Macro: GAL_SPECLINES_Mg_V_2928 -- Macro: GAL_SPECLINES_He_I_2945 -- Macro: GAL_SPECLINES_O_III_3132 -- Macro: GAL_SPECLINES_He_I_3187 -- Macro: GAL_SPECLINES_He_II_3203 -- Macro: GAL_SPECLINES_O_III_3312 -- Macro: GAL_SPECLINES_Ne_V_3345 -- Macro: GAL_SPECLINES_Ne_V_3425 -- Macro: GAL_SPECLINES_O_III_3444 -- Macro: GAL_SPECLINES_N_I_3466_4 -- Macro: GAL_SPECLINES_N_I_3466_5 -- Macro: GAL_SPECLINES_He_I_3487 -- Macro: GAL_SPECLINES_Fe_VII_3586 -- Macro: GAL_SPECLINES_Fe_VI_3662 -- Macro: GAL_SPECLINES_H_19 -- Macro: GAL_SPECLINES_H_18 -- Macro: GAL_SPECLINES_H_17 -- Macro: GAL_SPECLINES_H_16 -- Macro: GAL_SPECLINES_H_15 -- Macro: GAL_SPECLINES_H_14 -- Macro: GAL_SPECLINES_O_II_3726 -- Macro: GAL_SPECLINES_O_II_3728 -- Macro: GAL_SPECLINES_H_13 -- Macro: GAL_SPECLINES_H_12 -- Macro: GAL_SPECLINES_Fe_VII_3758 -- Macro: GAL_SPECLINES_H_11 -- Macro: GAL_SPECLINES_H_10 -- Macro: GAL_SPECLINES_H_9 -- Macro: GAL_SPECLINES_Fe_V_3839 -- Macro: GAL_SPECLINES_Ne_III_3868 -- Macro: GAL_SPECLINES_He_I_3888 -- Macro: GAL_SPECLINES_H_8 -- Macro: GAL_SPECLINES_Fe_V_3891 -- Macro: GAL_SPECLINES_Fe_V_3911 -- Macro: GAL_SPECLINES_Ne_III_3967 -- Macro: GAL_SPECLINES_H_epsilon -- Macro: GAL_SPECLINES_He_I_4026 -- Macro: GAL_SPECLINES_S_II_4068 -- Macro: GAL_SPECLINES_Fe_V_4071 -- Macro: GAL_SPECLINES_S_II_4076 -- Macro: GAL_SPECLINES_H_delta -- Macro: GAL_SPECLINES_He_I_4143 -- Macro: GAL_SPECLINES_Fe_II_4178 -- Macro: GAL_SPECLINES_Fe_V_4180 -- Macro: GAL_SPECLINES_Fe_II_4233 -- Macro: GAL_SPECLINES_Fe_V_4227 -- Macro: GAL_SPECLINES_Fe_II_4287 -- Macro: GAL_SPECLINES_Fe_II_4304 -- Macro: GAL_SPECLINES_O_II_4317 -- Macro: GAL_SPECLINES_H_gamma -- Macro: GAL_SPECLINES_O_III_4363 -- Macro: GAL_SPECLINES_Ar_XIV -- Macro: GAL_SPECLINES_O_II_4414 -- Macro: GAL_SPECLINES_Fe_II_4416 -- Macro: GAL_SPECLINES_Fe_II_4452 -- Macro: GAL_SPECLINES_He_I_4471 -- Macro: GAL_SPECLINES_Fe_II_4489 -- Macro: GAL_SPECLINES_Fe_II_4491 -- Macro: GAL_SPECLINES_N_III_4510 -- Macro: GAL_SPECLINES_Fe_II_4522 -- Macro: GAL_SPECLINES_Fe_II_4555 -- Macro: GAL_SPECLINES_Fe_II_4582 -- Macro: GAL_SPECLINES_Fe_II_4583 -- Macro: GAL_SPECLINES_Fe_II_4629 -- Macro: GAL_SPECLINES_N_III_4634 -- Macro: GAL_SPECLINES_N_III_4640 -- Macro: GAL_SPECLINES_N_III_4641 -- Macro: GAL_SPECLINES_C_III_4647 -- Macro: GAL_SPECLINES_C_III_4650 -- Macro: GAL_SPECLINES_C_III_5651 -- Macro: GAL_SPECLINES_Fe_III_4658 -- Macro: GAL_SPECLINES_He_II_4685 -- Macro: GAL_SPECLINES_Ar_IV_4711 -- Macro: GAL_SPECLINES_Ar_IV_4740 -- Macro: GAL_SPECLINES_H_beta -- Macro: GAL_SPECLINES_Fe_VII_4893 -- Macro: GAL_SPECLINES_Fe_IV_4903 -- Macro: GAL_SPECLINES_Fe_II_4923 -- Macro: GAL_SPECLINES_O_III_4958 -- Macro: GAL_SPECLINES_O_III_5006 -- Macro: GAL_SPECLINES_Fe_II_5018 -- Macro: GAL_SPECLINES_Fe_III_5084 -- Macro: GAL_SPECLINES_Fe_VI_5145 -- Macro: GAL_SPECLINES_Fe_VII_5158 -- Macro: GAL_SPECLINES_Fe_II_5169 -- Macro: GAL_SPECLINES_Fe_VI_5176 -- Macro: GAL_SPECLINES_Fe_II_5197 -- Macro: GAL_SPECLINES_N_I_5200 -- Macro: GAL_SPECLINES_Fe_II_5234 -- Macro: GAL_SPECLINES_Fe_IV_5236 -- Macro: GAL_SPECLINES_Fe_III_5270 -- Macro: GAL_SPECLINES_Fe_II_5276 -- Macro: GAL_SPECLINES_Fe_VII_5276 -- Macro: GAL_SPECLINES_Fe_XIV -- Macro: GAL_SPECLINES_Ca_V -- Macro: GAL_SPECLINES_Fe_II_5316_6 -- Macro: GAL_SPECLINES_Fe_II_5316_7 -- Macro: GAL_SPECLINES_Fe_VI_5335 -- Macro: GAL_SPECLINES_Fe_VI_5424 -- Macro: GAL_SPECLINES_Cl_III_5517 -- Macro: GAL_SPECLINES_Cl_III_5537 -- Macro: GAL_SPECLINES_Fe_VI_5637 -- Macro: GAL_SPECLINES_Fe_VI_5677 -- Macro: GAL_SPECLINES_C_III_5697 -- Macro: GAL_SPECLINES_Fe_VII_5720 -- Macro: GAL_SPECLINES_N_II_5754 -- Macro: GAL_SPECLINES_C_IV_5801 -- Macro: GAL_SPECLINES_C_IV_5811 -- Macro: GAL_SPECLINES_He_I_5875 -- Macro: GAL_SPECLINES_O_I_6046 -- Macro: GAL_SPECLINES_Fe_VII_6087 -- Macro: GAL_SPECLINES_O_I_6300 -- Macro: GAL_SPECLINES_S_III_6312 -- Macro: GAL_SPECLINES_Si_II_6347 -- Macro: GAL_SPECLINES_O_I_6363 -- Macro: GAL_SPECLINES_Fe_II_6369 -- Macro: GAL_SPECLINES_Fe_X -- Macro: GAL_SPECLINES_Fe_II_6516 -- Macro: GAL_SPECLINES_N_II_6548 -- Macro: GAL_SPECLINES_H_alpha -- Macro: GAL_SPECLINES_N_II_6583 -- Macro: GAL_SPECLINES_S_II_6716 -- Macro: GAL_SPECLINES_S_II_6730 -- Macro: GAL_SPECLINES_O_I_7002 -- Macro: GAL_SPECLINES_Ar_V -- Macro: GAL_SPECLINES_He_I_7065 -- Macro: GAL_SPECLINES_Ar_III_7135 -- Macro: GAL_SPECLINES_Fe_II_7155 -- Macro: GAL_SPECLINES_Ar_IV_7170 -- Macro: GAL_SPECLINES_Fe_II_7172 -- Macro: GAL_SPECLINES_C_II_7236 -- Macro: GAL_SPECLINES_Ar_IV_7237 -- Macro: GAL_SPECLINES_O_I_7254 -- Macro: GAL_SPECLINES_Ar_IV_7262 -- Macro: GAL_SPECLINES_He_I_7281 -- Macro: GAL_SPECLINES_O_II_7319 -- Macro: GAL_SPECLINES_O_II_7330 -- Macro: GAL_SPECLINES_Ni_II_7377 -- Macro: GAL_SPECLINES_Ni_II_7411 -- Macro: GAL_SPECLINES_Fe_II_7452 -- Macro: GAL_SPECLINES_N_I_7468 -- Macro: GAL_SPECLINES_S_XII -- Macro: GAL_SPECLINES_Ar_III_7751 -- Macro: GAL_SPECLINES_He_I_7816 -- Macro: GAL_SPECLINES_Ar_I_7868 -- Macro: GAL_SPECLINES_Ni_III -- Macro: GAL_SPECLINES_Fe_XI_7891 -- Macro: GAL_SPECLINES_He_II_8236 -- Macro: GAL_SPECLINES_Pa_20 -- Macro: GAL_SPECLINES_Pa_19 -- Macro: GAL_SPECLINES_Pa_18 -- Macro: GAL_SPECLINES_O_I_8446 -- Macro: GAL_SPECLINES_Pa_17 -- Macro: GAL_SPECLINES_Ca_II_8498 -- Macro: GAL_SPECLINES_Pa_16 -- Macro: GAL_SPECLINES_Ca_II_8542 -- Macro: GAL_SPECLINES_Pa_15 -- Macro: GAL_SPECLINES_Cl_II -- Macro: GAL_SPECLINES_Pa_14 -- Macro: GAL_SPECLINES_Fe_II_8616 -- Macro: GAL_SPECLINES_Ca_II_8662 -- Macro: GAL_SPECLINES_Pa_13 -- Macro: GAL_SPECLINES_N_I_8680 -- Macro: GAL_SPECLINES_N_I_8703 -- Macro: GAL_SPECLINES_N_I_8711 -- Macro: GAL_SPECLINES_Pa_12 -- Macro: GAL_SPECLINES_Pa_11 -- Macro: GAL_SPECLINES_Fe_II_8891 -- Macro: GAL_SPECLINES_Pa_10 -- Macro: GAL_SPECLINES_S_III_9068 -- Macro: GAL_SPECLINES_Pa_9 -- Macro: GAL_SPECLINES_S_III_9531 -- Macro: GAL_SPECLINES_Pa_epsilon -- Macro: GAL_SPECLINES_C_I_9824 -- Macro: GAL_SPECLINES_C_I_9850 -- Macro: GAL_SPECLINES_S_VIII -- Macro: GAL_SPECLINES_He_I_10027 -- Macro: GAL_SPECLINES_He_I_10031 -- Macro: GAL_SPECLINES_Pa_delta -- Macro: GAL_SPECLINES_S_II_10286 -- Macro: GAL_SPECLINES_S_II_10320 -- Macro: GAL_SPECLINES_S_II_10336 -- Macro: GAL_SPECLINES_Fe_XIII -- Macro: GAL_SPECLINES_He_I_10830 -- Macro: GAL_SPECLINES_Pa_gamma -- Macro: GAL_SPECLINES_NUMBER Internal values/identifiers for recognized spectral lines as is clear from their names. They are based on the UV an optical table of galaxy emission lines of Drew Chojnowski(1). Note the first and last macros, they can be used when parsing the lines automatically: both do not correspond to any line, but their integer values correspond to the two integers just before and after the first and last line identifier: ‘GAL_SPECLINES_INVALID’ has a value of zero, and allows you to have a fixed integer which never corresponds to a line. ‘GAL_SPECLINES_INVALID_MAX’ is the total number of pre-defined lines, plus one. So you can parse all the known lines with a ‘for’ loop like this: for(i=1;i<GAL_SPECLINES_INVALID_MAX;++i) -- Macro: GAL_SPECLINES_ANGSTROM_* Wavelength (in Angstroms) of the named lines. The ‘*’ can take any of the line names of the ‘GAL_SPECLINES_*’ Macros above. -- Macro: GAL_SPECLINES_NAME_* Names (as literal stings without any space) that can be used to refer to the lines in your program and converted to and from line identifiers using the functions below. The ‘*’ can take any of the line names of the ‘GAL_SPECLINES_*’ Macros above. -- Function: char * gal_speclines_line_name (int linecode) Return the literal string of the given spectral line identifier Macro (for example ‘GAL_SPECLINES_HALPHA’ or ‘GAL_SPECLINES_LYLIMIT’). -- Function: int gal_speclines_line_code (char *name) Return the spectral line identifier of the given standard name (for example ‘GAL_SPECLINES_NAME_HALPHA’ or ‘GAL_SPECLINES_NAME_LYLIMIT’). -- Function: double gal_speclines_line_angstrom (int linecode) Return the wavelength (in Angstroms) of the given line. -- Function: double gal_speclines_line_redshift (double obsline, double restline) Return the redshift where the observed wavelength (‘obsline’) was emitted from (if its restframe wavelength was ‘restline’). -- Function: double gal_speclines_line_redshift_code (double obsline, int linecode) Return the redshift where the observed wavelength (‘obsline’) was emitted from a pre-defined spectral line in the macros above. For example, you want the redshift where the H-alpha line falls at a wavelength of 8000 Angstroms, you can call this function like this: gal_speclines_line_redshift_code(8000, GAL_SPECLINES_H_alpha); ---------- Footnotes ---------- (1) <http://astronomy.nmsu.edu/drewski/tableofemissionlines.html>  File: gnuastro.info, Node: Cosmology library, Next: SAO DS9 library, Prev: Spectral lines library, Up: Gnuastro library 12.3.35 Cosmology library (‘cosmology.h’) ----------------------------------------- This library does the main cosmological calculations that are commonly necessary in extra-galactic astronomical studies. The main variable in this context is the redshift ($z$). The cosmological input parameters in the functions below are ‘H0’, ‘o_lambda_0’, ‘o_matter_0’, ‘o_radiation_0’ which respectively represent the current (at redshift 0) expansion rate (Hubble constant in units of km/sec/Mpc), cosmological constant ($\Lambda$), matter and radiation densities. All these functions are declared in ‘gnuastro/cosmology.h’. For a more extended introduction/discussion of the cosmological parameters, please see *note CosmicCalculator::. -- Function: double gal_cosmology_age (double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) Returns the age of the universe at redshift ‘z’ in units of Giga years. -- Function: double gal_cosmology_proper_distance (double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) Returns the proper distance to an object at redshift ‘z’ in units of Mega parsecs. -- Function: double gal_cosmology_comoving_volume (double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) Returns the comoving volume over 4pi stradian to ‘z’ in units of Mega parsecs cube. -- Function: double gal_cosmology_critical_density (double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) Returns the critical density at redshift ‘z’ in units of $g/cm^3$. -- Function: double gal_cosmology_angular_distance (double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) Return the angular diameter distance to an object at redshift ‘z’ in units of Mega parsecs. -- Function: double gal_cosmology_luminosity_distance (double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) Return the luminosity diameter distance to an object at redshift ‘z’ in units of Mega parsecs. -- Function: double gal_cosmology_distance_modulus (double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) Return the distance modulus at redshift ‘z’ (with no units). -- Function: double gal_cosmology_to_absolute_mag (double z, double H0, double o_lambda_0, double o_matter_0, double o_radiation_0) Return the conversion from apparent to absolute magnitude for an object at redshift ‘z’. This value has to be added to the apparent magnitude to give the absolute magnitude of an object at redshift ‘z’. -- Function: double gal_cosmology_velocity_from_z (double z) Return the velocity (in km/s) corresponding to the given redshift (‘z’). -- Function: double gal_cosmology_z_from_velocity (double v) Return the redshift corresponding to the given velocity (‘v’ in km/s).  File: gnuastro.info, Node: SAO DS9 library, Prev: Cosmology library, Up: Gnuastro library 12.3.36 SAO DS9 library (‘ds9.h’) --------------------------------- This library operates on the output files of SAO DS9(1). SAO DS9 is one of the most commonly used FITS image and cube viewers today with an easy to use graphic user interface (GUI), see *note SAO DS9::. But besides merely opening FITS data, it can also produce certain kinds of files that can be useful in common analysis. For example, on DS9's GUI, it is very easy to define a (possibly complex) polygon as a "region". You can then save that "region" into a file and using the functions below, feed the polygon into Gnuastro's programs (or your custom programs). -- Macro: GAL_DS9_COORD_MODE_IMG -- Macro: GAL_DS9_COORD_MODE_WCS -- Macro: GAL_DS9_COORD_MODE_INVALID Macros to identify the coordinate mode of the DS9 file. Their names are sufficiently descriptive. The last one (‘INVALID’) is for sanity checks (for example, to know if the mode is already selected). -- Function: gal_data_t * gal_ds9_reg_read_polygon (char *filename) Returns an allocated generic data container (‘gal_data_t’, with an array of ‘GAL_TYPE_FLOAT64’) containing the vertices of a polygon within the SAO DS9 region file given by ‘*filename’. Since SAO DS9 region files are 2 dimensional, if there are $N$ vertices in the SAO DS9 region file, the returned dataset will have $2\times N$ elements (first two elements belonging to first vertice, etc.). The mode to interpret the vertice coordinates is also read from the SAO DS9 region file and written into the ‘status’ attribute of the output ‘gal_data_t’. The coordinate mode can be one of the ‘GAL_DS9_COORD_MODE_*’ macros, mentioned above. It is assumed that the file begins with ‘# Region file format: DS9’ and it has two more lines (at least): a line containing the mode of the coordinates (the line should only contain either ‘fk5’ or ‘image’), a line with the polygon vertices following this format: ‘polygon(V1X,V1Y,V2X,V2Y,...)’ where ‘V1X’ and ‘V1Y’ are the horizontal and vertical coordinates of the first vertice, and so on. For example, here is a minimal acceptable SAO DS9 region file: # Region file format: DS9 fk5 polygon(53.187414,-27.779152,53.159507,-27.759633,...) ---------- Footnotes ---------- (1) <https://sites.google.com/cfa.harvard.edu/saoimageds9>  File: gnuastro.info, Node: Library demo programs, Prev: Gnuastro library, Up: Library 12.4 Library demo programs ========================== In this final section of *note Library::, we give some example Gnuastro programs to demonstrate various features in the library. All these programs have been tested and once Gnuastro is installed you can compile and run them with Gnuastro's *note BuildProgram:: program that will take care of linking issues. If you do not have any FITS file to experiment on, you can use those that are generated by Gnuastro after ‘make check’ in the ‘tests/’ directory, see *note Quick start::. * Menu: * Library demo - reading a image:: Read a FITS image into memory. * Library demo - inspecting neighbors:: Inspect the neighbors of a pixel. * Library demo - multi-threaded operation:: Doing an operation on threads. * Library demo - reading and writing table columns:: Simple Column I/O. * Library demo - Warp to another image:: Output pixel grid and WCS from another image. * Library demo - Warp to new grid:: Define a new pixel grid and WCS to resample the input.  File: gnuastro.info, Node: Library demo - reading a image, Next: Library demo - inspecting neighbors, Prev: Library demo programs, Up: Library demo programs 12.4.1 Library demo - reading a FITS image ------------------------------------------ The following simple program demonstrates how to read a FITS image into memory and use the ‘void *array’ pointer in of *note Generic data container::. For easy linking/compilation of this program along with a first run see *note BuildProgram:: (in short: Compile, link and run ‘myprogram.c' with this command: '‘astbuildprog myprogram.c’). Before running, also change the ‘filename’ and ‘hdu’ variable values to specify an existing FITS file and/or extension/HDU. This is just intended to demonstrate how to use the ‘array’ pointer of ‘gal_data_t’. Hence it does not do important sanity checks, for example in real datasets you may also have blank pixels. In such cases, this program will return a NaN value (see *note Blank pixels::). So for general statistical information of a dataset, it is much better to use Gnuastro's *note Statistics:: program which can deal with blank pixels and many other issues in a generic dataset. To encourage good coding practices, this script contains a copyright notice with a place holder for your name and your email (as you customize it for your own purpose). Always keep a one-line description and copyright notice like this in all your scripts, such "metadata" is very important to accompany every source file you write. Of course, when you write the source file from scratch and just learn how to use a single function from this manual, only your name/year should appear. The existing name of the original author of this example program is only for cases where you copy-paste this whole file. /* Reading a FITS image into memory. * * The following simple program demonstrates how to read a FITS image * into memory and use the 'void *array' pointer. This is just intended * to demonstrate how to use the array pointer of 'gal_data_t'. * * Copyright (C) 2024 Your Name <your@email.address> * Copyright (C) 2020-2024 Mohammad Akhlaghi <mohammad@akhlaghi.org> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <gnuastro/fits.h> /* includes gnuastro's data.h and type.h */ #include <gnuastro/statistics.h> int main(void) { size_t i; float *farray; double sum=0.0f; gal_data_t *image; char *filename="img.fits", *hdu="1"; /* Read `img.fits' (HDU: 1) as a float32 array. */ image=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32, -1, 1, NULL); /* Use the allocated space as a single precision floating * point array (recall that `image->array' has `void *' * type, so it is not directly usable). */ farray=image->array; /* Calculate the sum of all the values. */ for(i=0; i<image->size; ++i) sum += farray[i]; /* Report the sum. */ printf("Sum of values in %s (hdu %s) is: %f\n", filename, hdu, sum); /* Clean up and return. */ gal_data_free(image); return EXIT_SUCCESS; }  File: gnuastro.info, Node: Library demo - inspecting neighbors, Next: Library demo - multi-threaded operation, Prev: Library demo - reading a image, Up: Library demo programs 12.4.2 Library demo - inspecting neighbors ------------------------------------------ The following simple program shows how you can inspect the neighbors of a pixel using the ‘GAL_DIMENSION_NEIGHBOR_OP’ function-like macro that was introduced in *note Dimensions::. For easy linking/compilation of this program along with a first run see *note BuildProgram::. Before running, also change the file name and HDU (first and second arguments to ‘gal_fits_img_read_to_type’) to specify an existing FITS file and/or extension/HDU. To encourage good coding practices, this script contains a copyright notice with a place holder for your name and your email (as you customize it for your own purpose). Always keep a one-line description and copyright notice like this in all your scripts, such "metadata" is very important to accompany every source file you write. Of course, when you write the source file from scratch and just learn how to use a single function from this manual, only your name/year should appear. The existing name of the original author of this example program is only for cases where you copy-paste this whole file. /* Reading a FITS image into memory. * * The following simple program shows how you can inspect the neighbors * of a pixel using the GAL_DIMENSION_NEIGHBOR_OP function-like macro. * * Copyright (C) 2024 Your Name <your@email.address> * Copyright (C) 2020-2024 Mohammad Akhlaghi <mohammad@akhlaghi.org> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <gnuastro/fits.h> #include <gnuastro/dimension.h> int main(void) { double sum; float *array; size_t i, num, *dinc; gal_data_t *input=gal_fits_img_read_to_type("input.fits", "1", GAL_TYPE_FLOAT32, -1, 1, NULL); /* To avoid the `void *' pointer and have `dinc'. */ array=input->array; dinc=gal_dimension_increment(input->ndim, input->dsize); /* Go over all the pixels. */ for(i=0;i<input->size;++i) { num=0; sum=0.0f; GAL_DIMENSION_NEIGHBOR_OP( i, input->ndim, input->dsize, input->ndim, dinc, {++num; sum+=array[nind];} ); printf("%zu: num: %zu, sum: %f\n", i, num, sum); } /* Clean up and return. */ gal_data_free(input); free(dinc); return EXIT_SUCCESS; }  File: gnuastro.info, Node: Library demo - multi-threaded operation, Next: Library demo - reading and writing table columns, Prev: Library demo - inspecting neighbors, Up: Library demo programs 12.4.3 Library demo - multi-threaded operation ---------------------------------------------- The following simple program shows how to use Gnuastro to simplify spinning off threads and distributing different jobs between the threads. The relevant thread-related functions are defined in *note Gnuastro's thread related functions::. For easy linking/compilation of this program, along with a first run, see Gnuastro's *note BuildProgram::. Before running, also change the ‘filename’ and ‘hdu’ variable values to specify an existing FITS file and/or extension/HDU. This is a very simple program to open a FITS image, distribute its pixels between different threads and print the value of each pixel and the thread it was assigned to. The actual operation is very simple (and would not usually be done with threads in a real-life program). It is intentionally chosen to put more focus on the important steps in spinning off threads and how the worker function (which is called by each thread) can identify the job-IDs it should work on. For example, instead of an array of pixels, you can define an array of tiles or any other context-specific structures as separate targets. The important thing is that each action should have its own unique ID (counting from zero, as is done in an array in C). You can then follow the process below and use each thread to work on all the targets that are assigned to it. Recall that spinning off threads is itself an expensive process and we do not want to spin-off one thread for each target (see the description of ‘gal_threads_dist_in_threads’ in *note Gnuastro's thread related functions::. There are many (more complicated, real-world) examples of using ‘gal_threads_spin_off’ in Gnuastro's actual source code, you can see them by searching for the ‘gal_threads_spin_off’ function from the top source (after unpacking the tarball) directory (for example, with this command): $ grep -r gal_threads_spin_off ./ To encourage good coding practices, this script contains a copyright notice with a place holder for your name and your email (as you customize it for your own purpose). Always keep a one-line description and copyright notice like this in all your scripts, such "metadata" is very important to accompany every source file you write. Of course, when you write the source file from scratch and just learn how to use a single function from this manual, only your name/year should appear. The existing name of the original author of this example program is only for cases where you copy-paste this whole file. The code of this demonstration program is shown below. This program was also built and run when you ran ‘make check’ during the building of Gnuastro (‘tests/lib/multithread.c’), so it is already tested for your system and you can safely use it as a guide. /* Demo of Gnuastro's high-level multi-threaded interface. * * This is a very simple program to open a FITS image, distribute its * pixels between different threads and print the value of each pixel * and the thread it was assigned to. * * Copyright (C) 2024 Your Name <your@email.address> * Copyright (C) 2020-2024 Mohammad Akhlaghi <mohammad@akhlaghi.org> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <gnuastro/fits.h> #include <gnuastro/threads.h> /* This structure can keep all information you want to pass onto the * worker function on each thread. */ struct params { gal_data_t *image; /* Dataset to print values of. */ }; /* This is the main worker function which will be called by the * different threads. `gal_threads_params' is defined in * `gnuastro/threads.h' and contains the pointer to the parameter we * want. Note that the input argument and returned value of this * function always must have `void *' type. */ void * worker_on_thread(void *in_prm) { /* Low-level definitions to be done first. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct params *p=(struct params *)tprm->params; /* Subsequent definitions. */ float *array=p->image->array; size_t i, index, *dsize=p->image->dsize; /* Go over all the actions (pixels in this case) that were assigned * to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ index = tprm->indexs[i]; /* Print the information. */ printf("(%zu, %zu) on thread %zu: %g\n", index%dsize[1]+1, index/dsize[1]+1, tprm->id, array[index]); } /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* High-level function (called by the operating system). */ int main(void) { struct params p; char *filename="input.fits", *hdu="1"; size_t numthreads=gal_threads_number(); /* We are using * `-1' for `minmapsize' to ensure that the image is * read into * memory and `1' for `quietmmap' (which can also be * zero), see the "Memory management" section in the book. */ int quietmmap=1; size_t minmapsize=-1; /* Read the image into memory as a float32 data type. */ p.image=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32, minmapsize, quietmmap, NULL); /* Print some basic information before the actual contents: */ printf("Pixel values of %s (HDU: %s) on %zu threads.\n", filename, hdu, numthreads); printf("Used to check the compiled library's capability in opening " "a FITS file, and also spinning off threads.\n"); /* A small sanity check: this is only intended for 2D arrays (to * print the coordinates of each pixel). */ if(p.image->ndim!=2) { fprintf(stderr, "only 2D images are supported."); exit(EXIT_FAILURE); } /* Spin-off the threads and do the processing on each thread. */ gal_threads_spin_off(worker_on_thread, &p, p.image->size, numthreads, minmapsize, quietmmap); /* Clean up and return. */ gal_data_free(p.image); return EXIT_SUCCESS; }  File: gnuastro.info, Node: Library demo - reading and writing table columns, Next: Library demo - Warp to another image, Prev: Library demo - multi-threaded operation, Up: Library demo programs 12.4.4 Library demo - reading and writing table columns ------------------------------------------------------- Tables are some of the most common inputs to, and outputs of programs. This section contains a small program for reading and writing tables using the constructs described in *note Table input output::. For easy linking/compilation of this program, along with a first run, see Gnuastro's *note BuildProgram::. Before running, also set the following file and column names in the first two lines of ‘main’. The input and output names may be ‘.txt’ and ‘.fits’ tables, ‘gal_table_read’ and ‘gal_table_write’ will be able to write to both formats. For plain text tables see *note Gnuastro text table format::. If you do not have any table in text file format to use as your input, you can use the table that is generated in *note Sufi simulates a detection:: section. This example program reads three columns from a table. The first two columns are selected by their name (‘NAME1’ and ‘NAME2’) and the third is selected by its number: column 10 (counting from 1). Gnuastro's column selection is discussed in *note Selecting table columns::. The first and second columns can be any type, but this program will convert them to ‘int32_t’ and ‘float’ for its internal usage respectively. However, the third column must be double for this program. So if it is not, the program will abort with an error. Having the columns in memory, it will print them out along with their sum (just a simple application, you can do what ever you want at this stage). Reading the table finishes here. The rest of the program is a demonstration of writing a table. While parsing the rows, this program will change the first column (to be counters) and multiply the second by 10 (so the output will be different). Then it will define the order of the output columns by setting the ‘next’ element (to create a *note List of gal_data_t::). Before writing, this function will also set names for the columns (units and comments can be defined in a similar manner). Writing the columns to a file is then done through a simple call to ‘gal_table_write’. The operations that are shown in this example program are not necessary all the time. For example, in many cases, you know the numerical data type of the column before writing your program (see *note Numeric data types::), so type checking and copying to a specific type will not be necessary. To encourage good coding practices, this script contains a copyright notice with a place holder for your name and your email (as you customize it for your own purpose). Always keep a one-line description and copyright notice like this in all your scripts, such "metadata" is very important to accompany every source file you write. Of course, when you write the source file from scratch and just learn how to use a single function from this manual, only your name/year should appear. The existing name of the original author of this example program is only for cases where you copy-paste this whole file. /* Reading and writing table columns. * * This example program reads three columns from a table. Having the * columns in memory, it will print them out along with their sum. The * rest of the program is a demonstration of writing a table. * * Copyright (C) 2024 Your Name <your@@email.address> * Copyright (C) 2020-2024 Mohammad Akhlaghi <mohammad@@akhlaghi.org> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <gnuastro/table.h> int main(void) { /* File names and column names (which may also be numbers). */ char *c1_name="NAME1", *c2_name="NAME2", *c3_name="10"; char *inname="input.fits", *hdu="1", *outname="out.fits"; /* Internal parameters. */ float *array2=NULL; double *array3=NULL; int32_t *array1=NULL; size_t i, counter=0; gal_data_t *c1=NULL; gal_data_t *c2=NULL; gal_data_t tmp, *col, *columns; gal_list_str_t *column_ids=NULL; /* Define the columns to read. */ gal_list_str_add(&column_ids, c1_name, 0); gal_list_str_add(&column_ids, c2_name, 0); gal_list_str_add(&column_ids, c3_name, 0); /* The columns were added in reverse, so correct it. */ gal_list_str_reverse(&column_ids); /* Read the desired columns. */ columns = gal_table_read(inname, hdu, NULL, column_ids, GAL_TABLE_SEARCH_NAME, 0, 1, -1, 1, NULL); /* Go over the columns, we will assume that you do not know their type * a-priori, so we will check */ counter=1; for(col=columns; col!=NULL; col=col->next) switch(counter++) { case 1: /* First column: we want it as int32_t. */ c1=gal_data_copy_to_new_type(col, GAL_TYPE_INT32); array1 = c1->array; break; case 2: /* Second column: we want it as float. */ c2=gal_data_copy_to_new_type(col, GAL_TYPE_FLOAT32); array2 = c2->array; break; case 3: /* Third column: it MUST be double. */ if(col->type!=GAL_TYPE_FLOAT64) { fprintf(stderr, "Column %s must be float64 type, it is " "%s", c3_name, gal_type_name(col->type, 1)); exit(EXIT_FAILURE); } array3 = col->array; break; default: exit(EXIT_FAILURE); } /* As an example application we will just print them out. In the * meantime (just for a simple demonstration), change the first * array value to the counter and multiply the second by 10. */ for(i=0;i<c1->size;++i) { printf("%zu: %d + %f + %f = %f\n", i+1, array1[i], array2[i], array3[i], array1[i]+array2[i]+array3[i]); array1[i] = i+1; array2[i] *= 10; } /* Link the first two columns as a list. */ c1->next = c2; c2->next = NULL; /* Set names for the columns and write them out. */ c1->name = "COUNTER"; c2->name = "VALUE"; gal_table_write(c1, NULL, NULL, GAL_TABLE_FORMAT_BFITS, outname, "MY-COLUMNS", 0, 0); /* The names were not allocated, so to avoid cleaning-up problems, * we will set them to NULL. */ c1->name = c2->name = NULL; /* Clean up and return. */ gal_data_free(c1); gal_data_free(c2); gal_list_data_free(columns); gal_list_str_free(column_ids, 0); /* strings were not allocated. */ return EXIT_SUCCESS; }  File: gnuastro.info, Node: Library demo - Warp to another image, Next: Library demo - Warp to new grid, Prev: Library demo - reading and writing table columns, Up: Library demo programs 12.4.5 Library demo - Warp to another image ------------------------------------------- Gnuastro's warp library (that you can access by including ‘gnuastro/warp.h’) allows you to resample an image from a grid to another entirely using the WCSLIB (while accounting for distortions if necessary; see *note Warp library::). The Warp library uses a pixel-mixing or area-based resampling approach which is fully described in *note Resampling::. The most generic uses cases for this library are already available in the *note Invoking astwarp:: program. For a related demo (where the output grid and WCS are constructed from scratch), see *note Library demo - Warp to new grid::. In the example below, we are warping the ‘input.fits’ file to the same pixel grid and WCS as ‘reference.fits’ image (assuming it is in hdu ‘0’). You can download the FITS files in the *note Color channels in same pixel grid:: section and use them as ‘input.fits’ and ‘reference.fits’ files. Feel free to change these names to your own test file names. This can be useful when you have a complex grid and WCS containing various keywords such as non-linear distortion coefficients, etc. For example datasets, see the description of the ‘--gridfile’ option in *note Align pixels with WCS considering distortions::. To compile the demonstration program below, copy and paste the contents in a plain-text file (let's assume you named it ‘align-to-img.c’) and use *note BuildProgram:: with this command: '‘astbuildprog align-to-img.c’'. Please note that the demo program does not perform many sanity checks to avoid making it too complex and to highlight this particular feature in the library. For a robust method write programs with all the necessary sanity checks, see Gnuastro's Warp source code, see *note Program source::. To encourage good coding practices, this script contains a copyright notice with a place holder for your name and your email (as you customize it for your own purpose). Always keep a one-line description and copyright notice like this in all your scripts, such "metadata" is very important to accompany every source file you write. Of course, when you write the source file from scratch and just learn how to use a single function from this manual, only your name/year should appear. The existing name of the original author of this example program is only for cases where you copy-paste this whole file. /* Warp to another image. * * In the example below, we are warping the input.fits file to the same * pixel grid and WCS as reference.fits image. * * Copyright (C) 2024 Your Name <your@@email.address> * Copyright (C) 2022-2024 Pedram Ashofteh-Ardakani <pedramardakani@pm.me> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <gnuastro/wcs.h> /* contains gnuastro's fits.h */ #include <gnuastro/warp.h> /* contains gnuastro's data.h */ #include <gnuastro/array.h> /* contains gnuastro's type.h */ int main(void) { /* Input file's name and HDU. */ char *filename="input.fits", *hdu="1"; /* Reference file's name and HDU. */ char *gridfile="reference.fits", *gridhdu="0"; /* Output file name. */ char *outname="align-to-img.fits"; /* Low-level variables needed to read the reference file's size. */ int nwcs; size_t ndim, *dsize; /* Initialize the 'wa' struct with empty values and NULL pointers. */ gal_warp_wcsalign_t wa=gal_warp_wcsalign_template(); /* Read the input image and its WCS. */ wa.input=gal_array_read_one_ch_to_type(filename, hdu, NULL, GAL_TYPE_FLOAT64, -1, 0, NULL); wa.input->wcs=gal_wcs_read(filename, hdu, 0, 0, 0, &wa.input->nwcs, NULL); /* Prepare the warp input structure, use all threads available. */ wa.coveredfrac=1; wa.edgesampling=0; wa.numthreads=0; /* Set the target grid to be the same as wcsref.fits file on hdu 0. */ wa.twcs=gal_wcs_read(gridfile, gridhdu, 0, 0, 0, &nwcs, NULL); if(wa.twcs==NULL) { fprintf(stderr, "%s (hdu %s): no WCS! Can't continue\n", gridfile, gridhdu); exit(EXIT_FAILURE); } /* Read the output image size (from the reference image). Note that * 'dsize' will be freed while freeing 'widthinpix'). */ dsize=gal_fits_img_info_dim(gridfile, gridhdu, &ndim, NULL); /* Convert the 'dsize' to a 'gal_data_t' so the library can use it. */ wa.widthinpix=gal_data_alloc(dsize, GAL_TYPE_SIZE_T, 1, &ndim, NULL, 1, -1, 0, NULL, NULL, NULL); /* Do the warp, then convert the output to a 32-bit float (the default * float64 is too much for observational data and just wastes * storage!). But if you are warping mock data before adding noise * (where you do have float64 level precision), remove the type * conversion line. */ gal_warp_wcsalign(&wa); wa.output=gal_data_copy_to_new_type_free(wa.output, GAL_TYPE_FLOAT32); /* WARNING: make sure there is no file with same name as 'out.fits' * or the result will be appended to its final HDU. */ gal_fits_img_write(wa.output, outname, NULL, 0); /* Clean up. */ gal_data_free(wa.input); gal_data_free(wa.output); gal_data_free(wa.widthinpix); /* Give control back to the operating system. */ return EXIT_SUCCESS; }  File: gnuastro.info, Node: Library demo - Warp to new grid, Prev: Library demo - Warp to another image, Up: Library demo programs 12.4.6 Library demo - Warp to new grid -------------------------------------- Gnuastro's warp library (that you can access by including ‘gnuastro/warp.h’) allows you to resample an image from a grid to another entirely using the WCSLIB (while accounting for distortions if necessary; see *note Warp library::). The Warp library uses a pixel-mixing or area-based resampling approach which is fully described in *note Resampling::. The most generic uses cases for this library are already available in the *note Invoking astwarp:: program. For a related demo (where the output grid and WCS are imported from another file), see *note Library demo - Warp to another image::. In the example below, we'll assume you have the SDSS image downloaded in *note Downloading and validating input data::. After downloading the image as described there, you will have ‘r.fits’ in your current directory. We will therefore use ‘r.fits’ as the input to the rest program here. The image is not aligned to the celestial coordinates, so we will align the pixel and WCS coordinates, but set the center of the pixel grid to be at (RA,Dec) of (202.4173735,47.3374525). We also give it a ‘TAN’ projection with a pixel scale of 0.27 arcsecs, a defined center pixel. However, we'll let the Warp library measure the proper output image size that will contain the aligned image. To compile the demonstration program below, copy and paste the contents in a plain-text file (let's assume you named it ‘align-to-new.c’) and use *note BuildProgram:: with this command: '‘astbuildprog align-to-new.c’'. Please note that the demo program does not perform many sanity checks to avoid making it too complex and to highlight this particular feature in the library. For a robust method write programs with all the necessary sanity checks, see Gnuastro's Warp source code, see *note Program source::. To encourage good coding practices, this script contains a copyright notice with a place holder for your name and your email (as you customize it for your own purpose). Always keep a one-line description and copyright notice like this in all your scripts, such "metadata" is very important to accompany every source file you write. Of course, when you write the source file from scratch and just learn how to use a single function from this manual, only your name/year should appear. The existing name of the original author of this example program is only for cases where you copy-paste this whole file. /* Warp an image to a new grid. * * In the example below, We will use 'r.fits' as the input. The image is * not aligned to the celestial coordinates, so we will align the pixel * and WCS coordinates. We also give it a TAN projection. However, we’ll * let the Warp library measure the proper output image size that will * contain the aligned image. * * Copyright (C) 2024 Your Name <your@@email.address> * Copyright (C) 2022-2024 Pedram Ashofteh-Ardakani <pedramardakani@pm.me> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <stdio.h> #include <stdlib.h> #include <gnuastro/wcs.h> /* Contains gnuastro's fits.h */ #include <gnuastro/warp.h> /* Contains gnuastro's data.h */ #include <gnuastro/array.h> /* Contains gnuastro's type.h */ int main(void) { /* Input file's name and HDU. */ char *filename="r.fits", *hdu="0"; /* Output file name. */ char *outname="align-to-new.fits"; /* RA/Dec of the center of the central pixel of output. Please * change the center based on your input. */ double center[]={202.4173735, 47.3374525}; /* Coordinate and Projection algorithms of output. */ char *ctype[2]={"RA---TAN", "DEC--TAN"}; /* Output pixel scale (in units of degrees/pixel). */ double cdelt[]={0.27/3600, 0.27/3600}; /* For intermediate steps. */ size_t two=2; /* Initialize the 'wa' struct with empty values and NULL pointers. */ gal_warp_wcsalign_t wa=gal_warp_wcsalign_template(); /* Set the width (and height!) of the output in pixels (as a 1D and * 2 element 'gal_data_t'). When it is NULL, the library will * calculate the appropriate width to fully fit the input image * after alignment. */ wa.widthinpix=NULL; /* Set the number of threads to use. If the value is '0', the * library will estimate the maximum available threads at * run-time on the host operating system. */ wa.numthreads=0; /* Read the input image and its WCS. */ wa.input=gal_array_read_one_ch_to_type(filename, hdu, NULL, GAL_TYPE_FLOAT64, -1, 0, NULL); wa.input->wcs=gal_wcs_read(filename, hdu, 0, 0, 0, &wa.input->nwcs, NULL); /* Prepare the warp input structure. */ wa.coveredfrac=1; wa.edgesampling=0; wa.ctype=gal_data_alloc(ctype, GAL_TYPE_STRING, 1, &two, NULL, 1, -1, 0, NULL, NULL, NULL); wa.cdelt=gal_data_alloc(cdelt, GAL_TYPE_FLOAT64, 1, &two, NULL, 1, -1, 0, NULL, NULL, NULL); wa.center=gal_data_alloc(center, GAL_TYPE_FLOAT64, 1, &two, NULL, 1, -1, 0, NULL, NULL, NULL); /* Do the warp, then convert it to a 32-bit float. */ gal_warp_wcsalign(&wa); wa.output=gal_data_copy_to_new_type_free(wa.output, GAL_TYPE_FLOAT32); /* WARNING: make sure there is no file with same name as 'out.fits' * or the result will be appended to its final HDU. */ gal_fits_img_write(wa.output, outname, NULL, 0); /* Remove the pointers to arrays that we didn't allocate (and thus, * should not be freed by 'gal_data_free' below). */ wa.cdelt->array=wa.center->array=wa.ctype->array=NULL; /* Clean up. */ gal_data_free(wa.cdelt); gal_data_free(wa.ctype); gal_data_free(wa.input); gal_data_free(wa.output); gal_data_free(wa.center); gal_data_free(wa.widthinpix); /* Give control back to the operating system. */ return EXIT_SUCCESS; }  File: gnuastro.info, Node: Developing, Next: Other useful software, Prev: Library, Up: Top 13 Developing ************* The basic idea of GNU Astronomy Utilities is for an interested astronomer to be able to easily understand the code of any of the programs or libraries, be able to modify the code if s/he feels there is an improvement and finally, to be able to add new programs or libraries for their own benefit, and the larger community if they are willing to share it. In short, we hope that at least from the software point of view, the "obscurantist faith in the expert's special skill and in his personal knowledge and authority" can be broken, see *note Science and its tools::. With this aim in mind, Gnuastro was designed to have a very basic, simple, and easy to understand architecture for any interested inquirer. This chapter starts with very general design choices, in particular *note Why C:: and *note Program design philosophy::. It will then get a little more technical about the Gnuastro code and file/directory structure in *note Coding conventions:: and *note Program source::. *note The TEMPLATE program:: discusses a minimal (and working) template to help in creating new programs or easier learning of a program's internal structure. Some other general issues about documentation, building and debugging are then discussed. This chapter concludes with how you can learn about the development and get involved in *note Gnuastro project webpage::, *note Developing mailing lists:: and *note Contributing to Gnuastro::. * Menu: * Why C:: Why Gnuastro is designed in C. * Program design philosophy:: General ideas behind the package structure. * Coding conventions:: Gnuastro coding conventions. * Program source:: Conventions for the code. * Documentation:: Documentation is an integral part of Gnuastro. * Building and debugging:: Build and possibly debug during development. * Test scripts:: Understanding the test scripts. * Bash programmable completion:: Auto-completions for better user experience. * Developer's checklist:: Checklist to finalize your changes. * Gnuastro project webpage:: Central hub for Gnuastro activities. * Developing mailing lists:: Stay up to date with Gnuastro's development. * Contributing to Gnuastro:: Share your changes with all users.  File: gnuastro.info, Node: Why C, Next: Program design philosophy, Prev: Developing, Up: Developing 13.1 Why C programming language? ================================ Currently the programming languages that are commonly used in scientific applications are C++(1), Java(2); Python(3), and Julia(4) (which is a newcomer but swiftly gaining ground). One of the main reasons behind choosing these is their high-level abstractions. However, GNU Astronomy Utilities is fully written in the C programming language(5). The reasons can be summarized with simplicity, portability and efficiency/speed. All four are very important in a scientific software and we will discuss them below. Simplicity can best be demonstrated in a comparison of the main books of C++ and C. The "C programming language"(6) book, written by the authors of C, is only 286 pages and covers a very good fraction of the language, it has also remained unchanged from 1988. C is the main programming language of nearly all operating systems and there is no plan of any significant update. On the other hand, the most recent "C++ programming language"(7) book, also written by its author, has 1366 pages and its fourth edition came out in 2013! As discussed in *note Science and its tools::, it is very important for other scientists to be able to readily read the code of a program at their will with minimum requirements. In C++ or Java, inheritance in the object oriented programming paradigm and their internal functions make the code very easy to write for a programmer who is deeply invested in those objects and understands all their relations well. But it simultaneously makes reading the program for a first time reader (a curious scientist who wants to know only how a small step was done) extremely hard. Before understanding the methods, the scientist has to invest a lot of time and energy in understanding those objects and their relations. But in C, everything is done with basic language types for example ‘int’s or ‘float’s and their pointers to define arrays. So when an outside reader is only interested in one part of the program, that part is all they have to understand. Recently it is also becoming common to write scientific software in Python, or a combination of it with C or C++. Python is a high level scripting language which does not need compilation. It is very useful when you want to do something on the go and do not want to be halted by the troubles of compiling, linking, memory checking, etc. When the datasets are small and the job is temporary, this ability of Python is great and is highly encouraged. A very good example might be plotting, in which Python is undoubtedly one of the best. But as the data sets increase in size and the processing becomes more complicated, the speed of Python scripts significantly decrease. So when the program does not change too often and is widely used in a large community, mostly on large data sets (like astronomical images), using Python will waste a lot of valuable research-hours. It is possible to wrap C or C++ functions with Python to fix the speed issue. But this creates further complexity, because the interested scientist has to master two programming languages and their connection (which is not trivial). Like C++, Python is object oriented, so as explained above, it needs a high level of experience with that particular program to reasonably understand its inner workings. To make things worse, since it is mainly for on-the-go programming(8), it can undergo significant changes. One recent example is how Python 2.x and Python 3.x are not compatible. Lots of research teams that invested heavily in Python 2.x cannot benefit from Python 3.x or future versions any more. Some converters are available, but since they are automatic, lots of complications might arise in the conversion(9). If a research project begins using Python 3.x today, there is no telling how compatible their investments will be when Python 4.x or 5.x will come out. Java is also fully object-oriented, but uses a different paradigm: its compilation generates a hardware-independent _bytecode_, and a _Java Virtual Machine_ (JVM) is required for the actual execution of this bytecode on a computer. Java also evolved with time, and tried to remain backward compatible, but inevitably this evolution required discontinuities and replacements of a few Java components which were first declared as becoming _deprecated_, and removed from later versions. This stems from the core principles of high-level languages like Python or Java: that they evolve significantly on the scale of roughly 5 to 10 years. They are therefore useful when you want to solve a short-term problem and you are ready to pay the high cost of keeping your software up to date with all the changes in the language. This is fine for private companies, but usually too expensive for scientific projects that have limited funding for a fixed period. As a result, the reproducibility of the result (ability to regenerate the result in the future, which is a core principal of any scientific result) and reusability of all the investments that went into the science software will be lost to future generations! Rebuilding all the dependencies of a software in an obsolete language is not easy, or even not possible. Future-proof code (as long as current operating systems will be used) is therefore written in C. The portability of C is best demonstrated by the fact that C++, Java and Python are part of the C-family of programming languages which also include Julia, Perl, and many other languages. C libraries can be immediately included in C++, and it is easy to write wrappers for them in all C-family programming languages. This will allow other scientists to benefit from C libraries using any C-family language that they prefer. As a result, Gnuastro's library is already usable in C and C++, and wrappers will be(10) added for higher-level languages like Python, Julia and Java. The final reason was speed. This is another very important aspect of C which is not independent of simplicity (first reason discussed above). The abstractions provided by the higher-level languages (which also makes learning them harder for a newcomer) come at the cost of speed. Since C is a low-level language(11) (closer to the hardware), it has a direct access to the CPU(12), is generally considered as being faster in its execution, and is much less complex for both the human reader _and_ the computer. The benefits of simplicity for a human were discussed above. Simplicity for the computer translates into more efficient (faster) programs. This creates a much closer relation between the scientist/programmer (or their program) and the actual data and processing. The GNU coding standards(13) also encourage the use of C over all other languages when generality of usage and "high speed" is desired. ---------- Footnotes ---------- (1) <https://isocpp.org/> (2) <https://en.wikipedia.org/wiki/Java_(programming_language)> (3) <https://www.python.org/> (4) <https://julialang.org/> (5) <https://en.wikipedia.org/wiki/C_(programming_language)> (6) Brian Kernighan, Dennis Ritchie. _The C programming language_. Prentice Hall, Inc., Second edition, 1988. It is also commonly known as K&R and is based on the ANSI C and ISO C90 standards. (7) Bjarne Stroustrup. _The C++ programming language_. Addison-Wesley Professional; 4 edition, 2013. (8) Note that Python is good for fast programming, not fast programs. (9) For example see Jenness 2017 (https://arxiv.org/abs/1712.00461), which describes how LSST is managing the transition. (10) <http://savannah.gnu.org/task/?13786> (11) Low-level languages are those that directly operate the hardware like assembly languages. So C is actually a high-level language, but it can be considered one of the lowest-level languages among all high-level languages. (12) for instance the _long double_ numbers with at least 64-bit mantissa are not accessible in Python or Java. (13) <http://www.gnu.org/prep/standards/>  File: gnuastro.info, Node: Program design philosophy, Next: Coding conventions, Prev: Why C, Up: Developing 13.2 Program design philosophy ============================== The core processing functions of each program (and all libraries) are written mostly with the basic ISO C90 standard. We do make lots of use of the GNU additions to the C language in the GNU C library(1), but these functions are mainly used in the user interface functions (reading your inputs and preparing them prior to or after the analysis). The actual algorithms, which most scientists would be more interested in, are much more closer to ISO C90. For this reason, program source files that deal with user interface issues and those doing the actual processing are clearly separated, see *note Program source::. If anything particular to the GNU C library is used in the processing functions, it is explained in the comments in between the code. All the Gnuastro programs provide very low level and modular operations (modeled on GNU Coreutils). Almost all the basic command-line programs like ‘ls’, ‘cp’ or ‘rm’ on GNU/Linux operating systems are part of GNU Coreutils. This enables you to use shell scripting languages (for example, GNU Bash) to operate on a large number of files or do very complex things through the creative combinations of these tools that the authors had never dreamed of. We have put a few simple examples in *note Tutorials::. For example, all the analysis output can be saved as ASCII tables which can be fed into your favorite plotting program to inspect visually. Python's Matplotlib is very useful for fast plotting of the tables to immediately check your results. If you want to include the plots in a document, you can use the PGFplots package within LaTeX, no attempt is made to include such operations in Gnuastro. In short, Bash can act as a glue to connect the inputs and outputs of all these various Gnuastro programs (and other programs) in any fashion. Of course, Gnuastro's programs are just front-ends to the main workhorse (*note Gnuastro library::), allowing a user to create their own programs (for example, with *note BuildProgram::). So once the functions within programs become mature enough, they will be moved within the libraries for even more general applications. The advantage of this architecture is that the programs become small and transparent: the starting and finishing point of every program is clearly demarcated. For nearly all operations on a modern computer (fast file input-output) with a modest level of complexity, the read/write speed is insignificant compared to the actual processing a program does. Therefore the complexity which arises from sharing memory in a large application is simply not worth the speed gain. Gnuastro's design is heavily influenced from Eric Raymond's "The Art of Unix Programming"(2) which beautifully describes the design philosophy and practice which lead to the success of Unix-based operating systems(3). ---------- Footnotes ---------- (1) Gnuastro uses many GNU additions to the C library. However, thanks to the GNU Portability library (Gnulib) which is included in the Gnuastro tarball, users of non-GNU/Linux operating systems can also benefit from all these features when using Gnuastro. (2) Eric S. Raymond, 2004, _The Art of Unix Programming_, Addison-Wesley Professional Computing Series. (3) KISS principle: Keep It Simple, Stupid!  File: gnuastro.info, Node: Coding conventions, Next: Program source, Prev: Program design philosophy, Up: Developing 13.3 Coding conventions ======================= In Gnuastro, we try our best to follow the GNU coding standards. Added to those, Gnuastro defines the following conventions. It is very important for readability that the whole package follows the same convention. • The code must be easy to read by eye. So when the order of several lines within a function does not matter (for example, when defining variables at the start of a function). You should put the lines in the order of increasing length and group the variables with similar types such that this half-pyramid of declarations becomes most visible. If the reader is interested, a simple search will show them the variable they are interested in. However, this visual aid greatly helps in general inspections of the code and help the reader get a grip of the function's processing. • A function that cannot be fully displayed (vertically) in your monitor is probably too long and may be more useful if it is broken up into multiple functions. 40 lines is usually a good reference. When the start and end of a function are clearly visible in one glance, the function is much more easier to understand. This is most important for low-level functions (which usually define a lot of variables). Low-level functions do most of the processing, they will also be the most interesting part of a program for an inquiring astronomer. This convention is less important for higher level functions that do not define too many variables and whose only purpose is to run the lower-level functions in a specific order and with checks. In general you can be very liberal in breaking up the functions into smaller parts, the GNU Compiler Collection (GCC) will automatically compile the functions as inline functions when the optimizations are turned on. So you do not have to worry about decreasing the speed. By default Gnuastro will compile with the ‘-O3’ optimization flag. • All Gnuastro hand-written text files (C source code, Texinfo documentation source, and version control commit messages) should normally be no more than *75* characters per line. Monitors today are certainly much wider, but with this limit, reading the functions becomes much more easier. Also for the developers, it allows multiple files (or multiple views of one file) to be displayed beside each other on wide monitors. Emacs's buffers are excellent for this capability, setting a buffer width of 80 with '<C-u 80 C-x 3>' will allow you to view and work on several files or different parts of one file using the wide monitors common today. Emacs buffers can also be used as a shell prompt and compile the program (with <M-x compile>), and 80 characters is the default width in most terminal emulators. If you use Emacs, Gnuastro sets the 75 character ‘fill-column’ variable automatically for you, see cartouche below. For long comments you can use press <Alt-q> in Emacs to separate them into separate lines automatically. For long literal strings, you can use the fact that in C, two strings immediately after each other are concatenated, for example, ‘"The first part, " "and the second part."’. Note the space character in the end of the first part. Since they are now separated, you can easily break a long literal string into several lines and adhere to the maximum 75 character line length policy. • The headers required by each source file (ending with ‘.c’) should be defined inside of it. All the headers a complete program needs should _not_ be stacked in another header to include in all source files (for example ‘main.h’). Although most 'professional' programmers choose this single header method, Gnuastro is primarily written for professional/inquisitive astronomers (who are generally amateur programmers). The list of header files included provides valuable general information and helps the reader. ‘main.h’ may only include the header file(s) that define types that the main program structure needs, see ‘main.h’ in *note Program source::. Those particular header files that are included in ‘main.h’ can of course be ignored (not included) in separate source files. • The headers should be classified (by an empty line) into separate groups: 1. ‘#include <config.h>’: This must be the first code line (not commented or blank) in each source file _within Gnuastro_. It sets macros that the GNU Portability Library (Gnulib) will use for a unified environment (GNU C Library), even when the user is building on a system that does not use the GNU C library. 2. The C library header files, for example, ‘stdio.h’, ‘stdlib.h’, or ‘math.h’. 3. Installed library header files, including Gnuastro's installed headers (for example ‘cfitsio.h’ or ‘gsl/gsl_rng.h’, or ‘gnuastro/fits.h’). 4. Gnuastro's internal headers (that are not installed), for example ‘gnuastro-internal/options.h’. 5. For programs, the ‘main.h’ file (which is needed by the next group of headers). 6. That particular program's header files, for example, ‘mkprof.h’, or ‘noisechisel.h’. As much as order does not matter when you include the header of each group, sort them by length, as described above. • All function names, variables, etc., should be in lower case. Macros and constant global ‘enum’s should be in upper case. • For the naming of exported header files, functions, variables, macros, and library functions, we adopt similar conventions to those used by the GNU Scientific Library (GSL)(1). In particular, in order to avoid clashes with the names of functions and variables coming from other libraries the name-space '‘gal_’' is prefixed to them. GAL stands for _G_NU _A_stronomy _L_ibrary. • All installed header files should be in the ‘lib/gnuastro’ directory (under the top Gnuastro source directory). After installation, they will be put in the ‘$prefix/include/gnuastro’ directory (see *note Installation directory:: for ‘$prefix’). Therefore with this convention Gnuastro's headers can be included in internal (to Gnuastro) and external (a library user) source files with the same line # include <gnuastro/headername.h> Note that the GSL convention for header file names is ‘gsl_specialname.h’, so your include directive for a GSL header must be something like ‘#include <gsl/gsl_specialname.h>’. Gnuastro does not follow this GSL guideline because of the repeated ‘gsl’ in the include directive. It can be confusing and cause bugs for beginners. All Gnuastro (and GSL) headers must be located within a unique directory and will not be mixed with other headers. Therefore the '‘gsl_’' prefix to the header file names is redundant(2). • All installed functions and variables should also include the base-name of the file in which they are defined as prefix, using underscores to separate words(3). The same applies to exported macros, but in upper case. For example, in Gnuastro's top source directory, the prototype of function ‘gal_box_border_from_center’ is in ‘lib/gnuastro/box.h’, and the macro ‘GAL_POLYGON_MAX_CORNERS’ is defined in ‘lib/gnuastro/polygon.h’. This is necessary to give any user (who is not familiar with the library structure) the ability to follow the code. This convention does make the function names longer (a little harder to write), but the extra documentation it provides plays an important role in Gnuastro and is worth the cost. • There should be no trailing white space in a line. To do this automatically every time you save a file in Emacs, add the following line to your ‘~/.emacs’ file. (add-hook 'before-save-hook 'delete-trailing-whitespace) • There should be no tabs in the indentation(4). • Individual, contextually similar, functions in a source file are separated by 5 blank lines to be easily seen to be related in a group when parsing the source code by eye. In Emacs you can use <CTRL-u 5 CTRL-o>. • One group of contextually similar functions in a source file is separated from another with 20 blank lines. In Emacs you can use <CTRL-u 20 CTRL-o>. Each group of functions has short descriptive title of the functions in that group. This title is surrounded by asterisks (<*>) to make it clearly distinguishable. Such contextual grouping and clear title are very important for easily understanding the code. • Always read the comments before the patch of code under it. Similarly, try to add as many comments as you can regarding every patch of code. Effectively, we want someone to get a good feeling of the steps, without having to read the C code and only by reading the comments. This follows similar principles as Literate programming (https://en.wikipedia.org/wiki/Literate_programming). The last two conventions are not common and might benefit from a short discussion here. With a good experience in advanced text editor operations, the last two are redundant for a professional developer. However, recall that Gnuastro aspires to be friendly to unfamiliar, and inexperienced (in programming) eyes. In other words, as discussed in *note Science and its tools::, we want the code to appear welcoming to someone who is completely new to coding (and text editors) and only has a scientific curiosity. Newcomers to coding and development, who are curious enough to venture into the code, will probably not be using (or have any knowledge of) advanced text editors. They will see the raw code in the web page or on a simple text editor (like Gedit) as plain text. Trying to learn and understand a file with dense functions that are all spaced with one or two blank lines can be very taunting for a newcomer. But when they scroll through the file and see clear titles and meaningful spaces for similar functions, we are helping them find and focus on the part they are most interested in sooner and easier. *GNU Emacs, the recommended text editor:* GNU Emacs is an extensible and easily customizable text editor which many programmers rely on for developing due to its countless features. Among them, it allows specification of certain settings that are applied to a single file or to all files in a directory and its sub-directories. In order to harmonize code coming from different contributors, Gnuastro comes with a ‘.dir-locals.el’ file which automatically configures Emacs to satisfy most of the coding conventions above when you are using it within Gnuastro's directories. Thus, Emacs users can readily start hacking into Gnuastro. If you are new to developing, we strongly recommend this editor. Emacs was the first project released by GNU and is still one of its flagship projects. Some resources can be found at: Official manual At <https://www.gnu.org/software/emacs/manual/emacs.html>. This is a great and very complete manual which is being improved for over 30 years and is the best starting point to learn it. It just requires a little patience and practice, but rest assured that you will be rewarded. If you install Emacs, you also have access to this manual on the command-line with the following command (see *note Info::). $ info emacs A guided tour of emacs At <https://www.gnu.org/software/emacs/tour/>. A short visual tour of Emacs, officially maintained by the Emacs developers. Unofficial mini-manual At <https://tuhdo.github.io/emacs-tutor.html>. A shorter manual which contains nice animated images of using Emacs. ---------- Footnotes ---------- (1) <https://www.gnu.org/software/gsl/design/gsl-design.html#SEC15> (2) For GSL, this prefix has an internal technical application: GSL's architecture mixes installed and not-installed headers in the same directory. This prefix is used to identify their installation status. Therefore this filename prefix in GSL a technical internal issue (for developers, not users). (3) The convention to use underscores to separate words, called "snake case" (or "snake_case"). This is also recommended by the GNU coding standards. (4) If you use Emacs, Gnuastro's ‘.dir-locals.el’ file will automatically never use tabs for indentation. To make this a default in all your Emacs sessions, you can add the following line to your ‘~/.emacs’ file: ‘(setq-default indent-tabs-mode nil)’  File: gnuastro.info, Node: Program source, Next: Documentation, Prev: Coding conventions, Up: Developing 13.4 Program source =================== Besides the fact that all the programs share some functions that were explained in *note Library::, everything else about each program is completely independent. Recall that Gnuastro is written for an active astronomer/scientist (not a passive one who just uses a software). It must thus be easily navigable. Hence there are fixed source files (that contain fixed operations) that must be present in all programs, these are discussed fully in *note Mandatory source code files::. To easily understand the explanations in this section you can use *note The TEMPLATE program:: which contains the bare minimum code for one working program. This template can also be used to easily add new utilities: just copy and paste the directory and change ‘TEMPLATE’ with your program's name. * Menu: * Mandatory source code files:: Description of files common to all programs. * The TEMPLATE program:: Template for easy creation of a new program.  File: gnuastro.info, Node: Mandatory source code files, Next: The TEMPLATE program, Prev: Program source, Up: Program source 13.4.1 Mandatory source code files ---------------------------------- Some programs might need lots of source files and if there is no fixed convention, navigating them can become very hard for a new inquirer into the code. The following source files exist in every program's source directory (which is located in ‘bin/progname’). For small programs, these files are enough. Larger programs will need more files and developers are encouraged to define any number of new files. It is just important that the following list of files exist and do what is described here. When creating other source files, please choose filenames that are a complete single word: do not abbreviate (abbreviations are cryptic). For a minimal program containing all these files, see *note The TEMPLATE program::. ‘main.c’ Each executable has a ‘main’ function, which is located in ‘main.c’. Therefore this file is the starting point when reading any program's source code. No actual processing functions must be defined in this file, the function(s) in this file are only meant to connect the most high level steps of each program. Generally, ‘main’ will first call the top user interface function to read user input and make all the preparations. Then it will pass control to the top processing function for that program. The functions to do both these jobs must be defined in other source files. ‘main.h’ All the major parameters which will be used in the program must be stored in a structure which is defined in ‘main.h’. The name of this structure is usually ‘prognameparams’, for example, ‘cropparams’ or ‘noisechiselparams’. So ‘#include "main.h"’ will be a staple in all the source codes of the program. It is also regularly the first (and only) argument of many of the program's functions which greatly helps in readability. Keeping all the major parameters of a program in this structure has the major benefit that most functions will only need one argument: a pointer to this structure. This will significantly facilitate the job of the programmer, the inquirer and the computer. All the programs in Gnuastro are designed to be low-level, small and independent parts, so this structure should not get too large. The main root structure of all programs contains at least one instance of the ‘gal_options_common_params’ structure. This structure will keep the values to all common options in Gnuastro's programs (see *note Common options::). This top root structure is conveniently called ‘p’ (short for parameters) by all the functions in the programs and the common options parameters within it are called ‘cp’. With this convention any reader can immediately understand where to look for the definition of one parameter. For example, you know that ‘p->cp->output’ is in the common parameters while ‘p->threshold’ is in the program's parameters. With this basic root structure, the source code of functions can potentially become full of structure de-reference operators (‘->’) which can make the code very unreadable. In order to avoid this, whenever a structure element is used more than a couple of times in a function, a variable of the same type and with the same name (so it can be searched) as the desired structure element should be defined with the value of the root structure inside of it in definition time. Here is an example: char *hdu=p->cp.hdu; float threshold=p->threshold; ‘args.h’ The options particular to each program are defined in this file. Each option is defined by a block of parameters in ‘program_options’. These blocks are all you should modify in this file, leave the bottom group of definitions untouched. These are fed directly into the GNU C library's Argp facilities and it is recommended to have a look at that for better understand what is going on, although this is not required here. Each element of the block defining an option is described under ‘argp_option’ in ‘bootstrapped/lib/argp.h’ (from Gnuastro's top source file). Note that the last few elements of this structure are Gnuastro additions (not documented in the standard Argp manual). The values to these last elements are defined in ‘lib/gnuastro/type.h’ and ‘lib/gnuastro-internal/options.h’ (from Gnuastro's top source directory). ‘ui.h’ Besides declaring the exported functions of ‘ui.c’, this header also keeps the "key"s to every program-specific option. The first class of keys for the options that have a short-option version (single letter, see *note Options::). The character that is defined here is the option's short option name. The list of available alphabet characters can be seen in the comments. Recall that some common options also take some characters, for those, see ‘lib/gnuastro-internal/options.h’. The second group of options are those that do not have a short option alternative. Only the first in this group needs a value (‘1000’), the rest will be given a value by C's ‘enum’ definition, so the actual value is irrelevant and must never be used, always use the name. ‘ui.c’ Everything related to reading the user input arguments and options, checking the configuration files and checking the consistency of the input parameters before the actual processing is run should be done in this file. Since most functions are the same, with only the internal checks and structure parameters differing. We recommend going through the ‘ui.c’ of *note The TEMPLATE program::, or several other programs for a better understanding. The most high-level function in ‘ui.c’ is named ‘ui_read_check_inputs_setup’. It accepts the raw command-line inputs and a pointer to the root structure for that program (see the explanation for ‘main.h’). This is the function that ‘main’ calls. The basic idea of the functions in this file is that the processing functions should need a minimum number of such checks. With this convention an inquirer who only wants to understand only one part (mostly the processing part and not user input details and sanity checks) of the code can easily do so in the later files. It also makes all the errors related to input appear before the processing begins which is more convenient for the user. ‘progname.c, progname.h’ The high-level processing functions in each program are in a file named ‘progname.c’, for example, ‘crop.c’ or ‘noisechisel.c’. The function within these files which ‘main’ calls is also named after the program, for example: void crop(struct cropparams *p) or void noisechisel(struct noisechiselparams *p) In this manner, if an inquirer is interested in the processing steps, they can immediately come and check this file for the first processing step without having to go through ‘main.c’ and ‘ui.c’ first. In most situations, any failure in any step of the programs will result in an informative error message and an immediate abort in the program. So there is usually no need for return values. Under more complicated situations where a return value might be necessary, ‘void’ will be replaced with an ‘int’ in the examples above. This value must be directly returned by ‘main’, so it has to be an ‘int’. ‘authors-cite.h’ This header file keeps the global variable for the program authors and its BibTeX record for citation. They are used in the outputs of the common options ‘--version’ and ‘--cite’, see *note Operating mode options::. ‘progname-complete.bash’ This shell script is used for implementing auto-completion features when running Gnuastro's programs within GNU Bash. For more on the concept of shell auto-completion and how it is managed in Gnuastro, see *note Bash programmable completion::. These files assume a set of common shell functions that have the prefix ‘_gnuastro_autocomplete_’ in their name and are defined in ‘bin/complete.bash.in’ (of the source directory, and under version control) and ‘bin/complete.bash.built’ (built during the building of Gnuastro in the build directory). During Gnuastro's build, all these Bash completion files are merged into one file that is installed and the user can ‘source’ them into their Bash startup file, for example, see *note Quick start::.  File: gnuastro.info, Node: The TEMPLATE program, Prev: Mandatory source code files, Up: Program source 13.4.2 The TEMPLATE program --------------------------- The extra creativity offered by libraries comes at a cost: you have to actually write your ‘main’ function and get your hands dirty in managing user inputs: are all the necessary parameters given a value? is the input in the correct format? do the options and the inputs correspond? and many other similar checks. So when an operation has well-defined inputs and outputs and is commonly needed, it is much more worthwhile to simply do use all the great features that Gnuastro has already defined for such operations. To make it easier to learn/apply the internal program infrastructure discussed in *note Mandatory source code files::, in the *note Version controlled source::, Gnuastro ships with a template program. This template program is not available in the Gnuastro tarball so it does not confuse people using the tarball. The ‘bin/TEMPLATE’ directory in Gnuastro's Git repository contains the bare minimum files necessary to define a new program and all the basic/necessary files/functions are pre-defined there. Below you can see a list of initial steps to take for customizing this template. We just assume that after cloning Gnuastro's history, you have already bootstrapped Gnuastro, if not, please see *note Bootstrapping::. 1. Select a name for your new program (for example, ‘myprog’). 2. Copy the ‘TEMPLATE’ directory to a directory with your program's name: $ cp -R bin/TEMPLATE bin/myprog 3. As with all source files in Gnuastro, all the files in template also have a copyright notice at their top. Open all the files and correct these notices: 1) The first line contains a single-line description of the program. 2) In the second line only the name or your program needs to be fixed and 3) Add your name and email as a "Contributing author". As your program grows, you will need to add new files, do not forget to add this notice in those new files too, just put your name and email under "Original author" and correct the copyright years. 4. Open ‘configure.ac’ in the top Gnuastro source. This file manages the operations that are done when a user runs ‘./configure’. Going down the file, you will notice repetitive parts for each program. You will notice that the program names follow an alphabetic ordering in each part. There is also a commented line/patch for the ‘TEMPLATE’ program in each part. You can copy one line/patch (from the program above or below your desired name for example) and paste it in the proper place for your new program. Then correct the names of the copied program to your new program name. There are multiple places where this has to be done, so be patient and go down to the bottom of the file. Ultimately add ‘bin/myprog/Makefile’ to ‘AC_CONFIG_FILES’, only here the ordering depends on the length of the name (it is not alphabetical). 5. Open ‘Makefile.am’ in the top Gnuastro source. Similar to the previous step, add your new program similar to all the other programs. Here there are only two places: 1) at the top where we define the conditionals (three lines per program), and 2) immediately under it as part of the value for ‘SUBDIRS’. 6. Open ‘doc/Makefile.am’ and similar to ‘Makefile.am’ (above), add the proper entries for the man page of your program to be created (here, the variable that keeps all the man pages to be created is ‘dist_man_MANS’). Then scroll down and add a rule to build the man page similar to the other existing rules (in alphabetical order). Do not forget to add a short one-line description here, it will be displayed on top of the man page. 7. Change ‘TEMPLATE.c’ and ‘TEMPLATE.h’ to ‘myprog.c’ and ‘myprog.h’ in the file names: $ cd bin/myprog $ mv TEMPLATE.c myprog.c $ mv TEMPLATE.h myprog.h 8. Correct all occurrences of ‘TEMPLATE’ in the input files to ‘myprog’ (in short or long format). You can get a list of all occurrences with the following command. If you use Emacs, it will be able to parse the Grep output and open the proper file and line automatically. So this step can be very easy. $ grep --color -nHi -e template * 9. Run the following commands to rebuild the configuration and build system, and then to configure and build Gnuastro (which now includes your exciting new program). $ autoreconf -f $ ./configure $ make 10. You are done! You can now start customizing your new program to do your special processing. When it is complete, just do not forget to add checks also, so it can be tested at least once on a user's system with ‘make check’, see *note Test scripts::. Finally, if you would like to share it with all Gnuastro users, inform us so we merge it into Gnuastro's main history.  File: gnuastro.info, Node: Documentation, Next: Building and debugging, Prev: Program source, Up: Developing 13.5 Documentation ================== Documentation (this book) is an integral part of Gnuastro (see *note Science and its tools::). Documentation is not considered a separate project and must be written by its developers. Users can make edits/corrections, but the initial writing must be by the developer. So, no change is considered valid for implementation unless the respective parts of the book have also been updated. The following procedure can be a good suggestion to take when you have a new idea and are about to start implementing it. The steps below are not a requirement, the important thing is that when you send your work to be included in Gnuastro, the book and the code have to both be fully up-to-date and compatible, with the purpose of the update very clearly explained. You can follow any strategy you like, the following strategy was what we have found to be most useful until now. 1. Edit the book and fully explain your desired change, such that your idea is completely embedded in the general context of the book with no sense of discontinuity for a first time reader. This will allow you to plan the idea much more accurately and in the general context of Gnuastro (a particular program or library). Later on, when you are coding, this general context will significantly help you as a road-map. A very important part of this process is the program/library introduction. These first few paragraphs explain the purposes of the program or library and are fundamental to Gnuastro. Before actually starting to code, explain your idea's purpose thoroughly in the start of the respective/new section you wish to work on. While actually writing its purpose for a new reader, you will probably get some valuable and interesting ideas that you had not thought of before. This has occurred several times during the creation of Gnuastro. If an introduction already exists, embed or blend your idea's purpose with the existing introduction. We emphasize that doing this is equally useful for you (as the programmer) as it is useful for the user (reader). Recall that the purpose of a program is very important, see *note Program design philosophy::. As you have already noticed for every program/library, it is very important that the basics of the science and technique be explained in separate subsections prior to the 'Invoking Programname' subsection. If you are writing a new program or your addition to an existing program involves a new concept, also include such subsections and explain the concepts so a person completely unfamiliar with the concepts can get a general initial understanding. You do not have to go deep into the details, just enough to get an interested person (with absolutely no background) started with some good pointers/links to where they can continue studying if they are more interested. If you feel you cannot do that, then you have probably not understood the concept yourself. If you feel you do not have the time, then think about yourself as the reader in one year: you will forget almost all the details, so now that you have done all the theoretical preparations, add a few more hours and document it. Therefore in one year, when you find a bug or want to add a new feature, you do not have to prepare as much. Have in mind that your only limitation in length is the fatigue of the reader after reading a long text, nothing else. So as long as you keep it relevant/interesting for the reader, there is no page number limit/cost. It might also help if you start discussing the usage of your idea in the 'Invoking ProgramName' subsection (explaining the options and arguments you have in mind) at this stage too. Actually starting to write it here will really help you later when you are coding. 2. After you have finished adding your initial intended plan to the book, then start coding your change or new program within the Gnuastro source files. While you are coding, you will notice that somethings should be different from what you wrote in the book (your initial plan). So correct them as you are actually coding, but do not worry too much about missing a few things (see the next step). 3. After your work has been fully implemented, read the section documentation from the start and check if you did not miss any change in the coding. Also, ensure that the context is fairly continuous for a first-time reader (who has not seen the book or has known Gnuastro before you made your change). 4. If the change is notable, also update the ‘NEWS’ file.  File: gnuastro.info, Node: Building and debugging, Next: Test scripts, Prev: Documentation, Up: Developing 13.6 Building and debugging =========================== To build the various programs and libraries in Gnuastro, the GNU build system is used which defines the steps in *note Quick start::. It consists of GNU Autoconf, GNU Automake and GNU Libtool which are collectively known as GNU Autotools. They provide a very portable system to check the hosts environment and compile Gnuastro based on that. They also make installing everything in their standard places very easy for the programmer. Most of the small caps files that you see in the top source directory of the tarball are created by these three tools (see *note Version controlled source::). To facilitate the building and testing of your work during development, Gnuastro comes with two useful scripts: ‘developer-build’ This is more fully described in *note Configure and build in RAM::. During development, you will usually run this command only once (at the start of your work). ‘tests/during-dev.sh’ This script is designed to be run each time you make a change and want to test your work (with some possible input and output). The script itself is heavily commented and thoroughly describes the best way to use it, so we will not repeat it here. For a usage example, see *note Forking tutorial::. As a short summary: you specify the build directory, an output directory (for the built program to be run in, and also contains the inputs), the program's short name and the arguments and options that it should be run with. This script will then build Gnuastro, go to the output directory and run the built executable from there. One option for the output directory might be your desktop, so you can easily see the output files and delete them when you are finished. The main purpose of these scripts is to keep your source directory clean and facilitate your development. By default all the programs are compiled with optimization flags for increased speed. A side effect of optimization is that valuable debugging information is lost. All the libraries are also linked as shared libraries by default. Shared libraries further complicate the debugging process and significantly slow down the compilation (the ‘make’ command). So during development it is recommended to configure Gnuastro as follows: $ ./configure --enable-debug In ‘developer-build’ you can ask for this behavior through the ‘--debug’ option, see *note Separate build and source directories::. In order to understand the building process, you can go through the Autoconf, Automake and Libtool manuals, like all GNU manuals they provide both a great tutorial and technical documentation. The "A small Hello World" section in Automake's manual (in chapter 2) can be a good starting guide after you have read the separate introductions.  File: gnuastro.info, Node: Test scripts, Next: Bash programmable completion, Prev: Building and debugging, Up: Developing 13.7 Test scripts ================= As explained in *note Tests::, for every program some simple tests are written to check the various independent features of the program. All the tests are placed in the ‘tests/’ directory. The ‘tests/prepconf.sh’ script is the first 'test' that will be run. It will copy all the configuration files from the various directories to a ‘tests/.gnuastro’ directory (which it will make) so the various tests can set the default values. This script will also make sure the programs do not go searching for user and system wide configuration files to avoid the mixing of values with different Gnuastro version on the system. For each program, the tests are placed inside directories with the program name. Each test is written as a shell script. The last line of this script is the test which runs the program with certain parameters. The return value of this script determines the fate of the test, see the "Support for test suites" chapter of the Automake manual for a very nice and complete explanation. In every script, two variables are defined at first: ‘prog’ and ‘execname’. The first specifies the program name and the second the location of the executable. The most important thing to have in mind about all the test scripts is that they are run from inside the ‘tests/’ directory in the "build tree". Which can be different from the directory they are stored in (known as the "source tree")(1). This distinction is made by GNU Autoconf and Automake (which configure, build and install Gnuastro) so that you can install the program even if you do not have write access to the directory keeping the source files. See the "Parallel build trees (a.k.a VPATH builds)" in the Automake manual for a nice explanation. Because of this, any necessary inputs that are distributed in the tarball(2), for example, the catalogs necessary for checks in MakeProfiles and Crop, must be identified with the ‘$topsrc’ prefix instead of ‘../’ (for the top source directory that is unpacked). This ‘$topsrc’ variable points to the source tree where the script can find the source data (it is defined in ‘tests/Makefile.am’). The executables and other test products were built in the build tree (where they are being run), so they do not need to be prefixed with that variable. This is also true for images or files that were produced by other tests. ---------- Footnotes ---------- (1) The ‘developer-build’ script also uses this feature to keep the source and build directories separate (see *note Separate build and source directories::). (2) In many cases, the inputs of a test are outputs of previous tests, this does not apply to this class of inputs. Because all outputs of previous tests are in the "build tree".  File: gnuastro.info, Node: Bash programmable completion, Next: Developer's checklist, Prev: Test scripts, Up: Developing 13.8 Bash programmable completion ================================= *Under development:* While work on TAB completion is ongoing, it is not yet fully ready, please see the notice at the start of *note Shell TAB completion::. Gnuastro provides Programmable completion facilities in Bash. This greatly helps users reach their desired result with minimal keystrokes, and helps them spend less time on figuring out the option names and values their acceptable values. Gnuastro's completion script not only completes the half-written commands, but also prints suggestions based on previous arguments. Imagine a scenario where we need to download three columns containing the right ascension, declination, and parallax from the GAIA DR3 dataset. We have to make sure how these columns are abbreviated or spelled. So we can call the command below, and store the column names in a file such as ‘gaia-dr3-columns.txt’. $ astquery gaia --information > gaia-dr3-columns.txt Then we need to memorize or copy the column names of interest, and specify an output fits file name such as ‘gaia.fits’: $ astquery gaia --dataset=dr3 --output=gaia.fits \ --column=ra,dec,parallax However, this is much easier using the auto-completion feature: $ astquery gaia --dataset=dr3 --output=gaia.fits --column=<[TAB]> After pressing <[TAB]>, a full list of gaia dr3 dataset column names will be displayed. Typing the first key of the desired column and pressing <[TAB]> again will limit the displayed list to only the matching ones until the desired column is found. * Menu: * Bash TAB completion tutorial:: Fast tutorial to get you started on concepts. * Implementing TAB completion in Gnuastro:: How Gnuastro uses Bash auto-completion features.  File: gnuastro.info, Node: Bash TAB completion tutorial, Next: Implementing TAB completion in Gnuastro, Prev: Bash programmable completion, Up: Bash programmable completion 13.8.1 Bash TAB completion tutorial ----------------------------------- When a user presses the <[TAB]> key while typing commands, Bash will inspect the input to find a relevant "completion specification", or ‘compspec’. If available, the ‘compspec’ will generate a list of possible suggestions to complete the current word. A custom ‘compsec’ can be generated for any command using bash completion builtins(1) and the bash variables that start with the ‘COMP’ keyword(2). First, let's see a quick example of how you can make a completion script in just one line of code. With the command below, we are asking Bash to give us three suggestions for ‘echo’: ‘foo’, ‘bar’ and ‘bAr’. Please run it in your terminal for the next steps. $ complete -W "foo bar bAr" echo The possible completion suggestions are fed into ‘complete’ using the ‘-W’ option followed by a list of space delimited words. Let's see it in action: $ echo <[TAB][TAB]> bar bAr foo Nicely done! Just note that the strings are sorted alphabetically, not in the original order. Also, an arbitrary number of space characters are printed between them (based on the number of suggestions and terminal size, etc.). Now, if you type ‘f’ and press <[TAB]>, bash will automatically figure out that you wanted ‘foo’ and it be completed right away: $ myprogram f<[TAB]> $ myprogram foo However, nothing will happen if you type ‘b’ and press <[TAB]> only once. This is because of the ambiguity: there is not enough information to figure out which suggestion you want: ‘bar’ or ‘bAr’? So, if you press <[TAB]> twice, it will print out all the options that start with ‘b’: $ echo b<[TAB][TAB]> bar bAr $ echo ba<[TAB]> $ echo bar Not bad for a simple program. But what if you need more control? By passing the ‘-F’ option to ‘complete’ instead of ‘-W’, it will run a function for generating the suggestions, instead of using a static string. For example, let's assume that the expected value after ‘foo’ is the number of files in the current directory. Since the logic is getting more complex, let's write and save the commands below into a shell script with an arbitrary name such as ‘completion-tutorial.sh’: $ cat completion-tutorial.sh _echo(){ if [ "$3" == "foo" ]; then COMPREPLY=( $(ls | wc -l) ) else COMPREPLY=( $(compgen -W "foo bar bAr" -- "$2") ) fi } complete -F _echo echo We will look at it in detail soon. But for now, let's ‘source’ the file into your current terminal and check if it works as expected: $ source completion-tutorial.sh $ echo <[TAB][TAB]> foo bar bAr $ echo foo <[TAB]> $ touch empty.txt $ echo foo <[TAB]> Success! As you see, this allows for setting up highly customized completion scripts. Now let's have a closer look at the ‘completion-tutorial.sh’ completion script from above. First, the ‘-F’ option in front the ‘complete’ command indicates that we want shell to execute the ‘_echo’ function whenever ‘echo’ is called. As a convention, the function name should be the same as the program name, but prefixed with an underscore (‘_’). Within the ‘_echo’ function, we're checking if ‘$3’ is equal to ‘foo’. In Bash's auto-complete, ‘$3’ means the word before current cursor position. In fact, these are the arguments that the ‘_echo’ function is receiving: ‘$1’ The name of the command, here it is ‘echo’. ‘$2’ The current word being completed (empty unless we are in the middle of typing a word). ‘$3’ The word before the word being completed. To tell the completion script what to reply with, we use the ‘COMPREPLY’ array. This array holds all the suggestions that ‘complete’ will show for the user in the end. In the example above, we simply give it the string output of ‘ls | wc -l’. Finally, we have the ‘compgen’ command. According to bash programmable completion builtins manual, the command ‘compgen [OPTION] [WORD]’ generates possible completion matches for ‘[WORD]’ according to ‘[OPTIONS]’. Using the ‘-W’ option asks ‘compgen’ to generate a list of words from an input string. This is known as Word Splitting(3). ‘compgen’ will automatically use the ‘$IFS’ variable to split the string into a list of words. You can check the default delimiters by calling: $ printf %q "$IFS" The default value of ‘$IFS’ might be ‘ \t\n’. This means the SPACE, TAB, and New-line characters. Finally, notice the ‘-- "$2"’ in this command: COMPREPLY=( $(compgen -W "foo bar bAr" -- "$2") ) Here, the ‘--’ instructs ‘compgen’ to only reply with a list of words that match ‘$2’, i.e. the current word being completed. That is why when you type the letter ‘b’, ‘complete’ will reply only with its matches (‘bar’ and ‘bAr’), and will exclude ‘foo’. Let's get a little more realistic, and develop a very basic completion script for one of Gnuastro's programs. Since the ‘--help’ option will list all the options available in Gnuastro's programs, we are going to use its output and create a very basic TAB completion for it. Note that the actual TAB completion in Gnuastro is a little more complex than this and fully described in *note Implementing TAB completion in Gnuastro::. But this is a good exercise to get started. We will use ‘asttable’ as the demo, and the goal is to suggest all options that this program has to offer. You can print all of them (with a lot of extra information) with this command: $ asttable --help Let's write an ‘awk’ script that prints all of the long options. When printing the option names we can safely ignore the short options because if a user knows about the short options, s/he already knows exactly what they want! Also, due to their single-character length, they will be too cryptic without their descriptions. One way to catch the long options is through ‘awk’ as shown below. We only keep the lines that 1) starting with an empty space, 2) their first no-white character is ‘-’ and that have the format of ‘--’ followed by any number of numbers or characters. Within those lines, if the first word ends in a comma (‘,’), the first word is the short option, so we want the second word (which is the long option). Otherwise, the first word is the long option. But for options that take a value, this will also include the format of the value (for example, ‘--column=STR’). So with a ‘sed’ command, we remove everything that is after the equal sign, but keep the equal sign itself (to highlight to the user that this option should have a value). $ asttable --help \ | awk '/^ / && $1 ~ /^-/ && /--+[a-zA-Z0-9]*/ { \ if($1 ~ /,$/) name=$2; \ else name=$1; \ print name}' \ | sed -e's|=.*|=|' If we wanted to show all the options to the user, we could simply feed the values of the command above to ‘compgen’ and ‘COMPREPLY’ subsequently. But, we need _smarter_ completions: we want to offer suggestions based on the previous options that have already been typed in. Just Beware! Sometimes the program might not be acting as you expected. In that case, using debug messages can clear things up. You can add a ‘echo’ command before the completion function ends, and check all current variables. This can save a lot of headaches, since things can get complex. Take the option ‘--wcsfile=’ for example. This option accepts a FITS file. Usually, the user is trying to feed a FITS file from the current directory. So it would be nice if we could help them and print only a list of FITS files sitting in the current directory - or whatever directory they have typed-in so far. But there's a catch. When splitting the user's input line, Bash will consider ‘=’ as a separate word. To avoid getting caught in changing the ‘IFS’ or ‘WORDBREAKS’ values, we will simply check for ‘=’ and act accordingly. That is, if the previous word is a ‘=’, we will ignore it and take the word before that as the previous word. Also, if the current word is a ‘=’, ignore it completely. Taking all of that into consideration, the code below might serve well: _asttable(){ if [ "$2" = "=" ]; then word="" else word="$2" fi if [ "$3" = "=" ]; then prev="${COMP_WORDS[COMP_CWORD-2]}" else prev="${COMP_WORDS[COMP_CWORD-1]}" fi case "$prev" in --wcsfile) COMPREPLY=( $(compgen -f -X "!*.[fF][iI][tT][sS]" -- "$word") ) ;; esac } complete -o nospace -F _asttable asttable To test the code above, write it into ‘asttable-tutorial.sh’, and load it into your running terminal with this command: $ source asttable-tutorial.sh If you then go to a directory that has at least one FITS file (with a ‘.fits’ suffix, among other files), you can checkout the function by typing the following command. You will see that only files ending in ‘.fits’ are shown, not any other file. asttable --wcsfile=[TAB][TAB] The code above first identifies the current and previous words. It then checks if the previous word is equal to ‘--wcsfile’ and if so, fills ‘COMPREPLY’ array with the necessary suggestions. We are using ‘case’ here (instead of ‘if’) because in a real scenario, we need to check many more values and ‘case’ is far better suited for such cases (cleaner and more efficient code). The ‘-f’ option in ‘compgen’ indicates we're looking for a file. The ‘-X’ option _filters out_ the filenames that match the next regular expression pattern. Therefore we should start the regular expression with ‘!’ if we want the files matching the regular expression. The ‘-- "$word"’ component collects only filenames that match the current word being typed. And last but not least, the ‘-o nospace’ option in the ‘complete’ command instructs the completion script to _not_ append a white space after each suggestion. That is important because the long format of an option, its value is more clear when it sticks to the option name with a ‘=’ sign. You have now written a very basic and working TAB completion script that can easily be generalized to include more options (and be good for a single/simple program). However, Gnuastro has many programs that share many similar things and the options are not independent. Also, complex situations do often come up: for example, some people use a ‘.fit’ suffix for FITS files and others do not even use a suffix at all! So in practice, things need to get a little more complicated, but the core concept is what you learnt in this section. We just modularize the process (breaking logically independent steps into separate functions to use in different situations). In *note Implementing TAB completion in Gnuastro::, we will review the generalities of Gnuastro's implementation of Bash TAB completion. ---------- Footnotes ---------- (1) <https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html> (2) <https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html> (3) <https://www.gnu.org/software/bash/manual/html_node/Word-Splitting.html>  File: gnuastro.info, Node: Implementing TAB completion in Gnuastro, Prev: Bash TAB completion tutorial, Up: Bash programmable completion 13.8.2 Implementing TAB completion in Gnuastro ---------------------------------------------- The basics of Bash auto-completion was reviewed in *note Bash TAB completion tutorial::. Gnuastro is a very complex package of many programs, that have many similar features, so implementing those principles in an easy to maintain manner requires a modular solution. As a result, Bash's TAB completion is implemented as multiple files in Gnuastro: ‘bin/completion.bash.built’ (in build directory, automatically created) This file contains the values of all Gnuastro options or arguments that take fixed strings as values (not file names). For example, the names of Arithmetic's operators (see *note Arithmetic operators::), or spectral line names (like ‘--obsline’ in *note CosmicCalculator input options::). This file is created automatically during the building of Gnuastro. The recipe to build it is available in Gnuastro's top-level ‘Makefile.am’ (under the target ‘bin/completion.bash’). It parses the respective Gnuastro source file that contains the necessary user-specified strings. All the acceptable values values are then stored as shell variables (within a function). ‘bin/completion.bash.in’ (in source directory, under version control) All the low-level completion functions that are common to all programs are stored here. It thus contains functions that will parse the command-line or files, or suggest the completion replies. ‘PROGNAME-complete.bash’ (in source directory, under version control) All Gnuastro programs contain a ‘PROGNAME-complete.bash’ script within their source (for more on the fixed files of each program, see *note Program source::). This file contains the very high-level (program-specific) Bash programmable completion features that are almost always defined in Gnuastro-generic Bash completion file (‘bin/completion.bash.in’). The top-level function that is called by Bash should be called ‘_gnuastro_autocomplete_PROGNAME’ and its last line should be the ‘complete’ command of Bash which calls this function. The contents of ‘_gnuastro_autocomplete_PROGNAME’ are almost identical for all the programs, it is just a very high-level function that either calls ‘_gnuastro_autocomplete_PROGNAME_arguments’ to manage suggestions for the program's arguments or ‘_gnuastro_autocomplete_PROGNAME_option_value’ to manage suggestions for the program's option values. The scripts above follow the following conventions. After reviewing the list, please also look into the functions for examples of each point. • No global shell variables in any completion script: the contents of the files above are directly loaded into the user's environment. So to keep the user's environment clean and avoid annoyance to the users, everything should be defined as shell functions, and any variable within the functions should be set as ‘local’. • All the function names should start with '‘_gnuastro_autocomplete_’', again to avoid populating the user's function name-space with possibly conflicting names. • Outputs of functions should be written in the ‘local’ variables of the higher-level functions that called them.  File: gnuastro.info, Node: Developer's checklist, Next: Gnuastro project webpage, Prev: Bash programmable completion, Up: Developing 13.9 Developer's checklist ========================== This is a checklist of things to do after applying your changes/additions in Gnuastro: 1. If the change is non-trivial, write test(s) in the ‘tests/progname/’ directory to test the change(s)/addition(s) you have made. Then add their file names to ‘tests/Makefile.am’. 2. If your change involves a change in command-line behavior of a Gnuastro program or script (for example, adding a new option or argument), create or update the respective ‘bin/PROGNAME/completion.sh’ file described under the *note Bash programmable completion:: section. 3. Run ‘$ make check’ to make sure everything is working correctly. 4. Make sure the documentation (this book) is completely up to date with your changes, see *note Documentation::. 5. Commit the change to your issue branch (see *note Production workflow:: and *note Forking tutorial::). Afterwards, run Autoreconf to generate the appropriate version number: $ autoreconf -f 6. Finally, to make sure everything will be built, installed and checked correctly run the following command (after re-configuring, and rebuilding). To greatly speed up the process, use multiple threads (8 in the example below, change it appropriately) $ make distcheck -j8 This command will create a distribution file (ending with ‘.tar.gz’) and try to compile it in the most general cases, then it will run the tests on what it has built in its own mini-environment. If ‘$ make distcheck’ finishes successfully, then you are safe to send your changes to us to implement or for your own purposes. See *note Production workflow:: and *note Forking tutorial::.  File: gnuastro.info, Node: Gnuastro project webpage, Next: Developing mailing lists, Prev: Developer's checklist, Up: Developing 13.10 Gnuastro project webpage ============================== Gnuastro's central management hub (https://savannah.gnu.org/projects/gnuastro/)(1) is located on GNU Savannah (https://savannah.gnu.org/)(2). Savannah is the central software development management system for many GNU projects. Through this central hub, you can view the list of activities that the developers are engaged in, their activity on the version controlled source, and other things. Each defined activity in the development cycle is known as an 'issue' (or 'item'). An issue can be a bug (see *note Report a bug::), or a suggested feature (see *note Suggest new feature::) or an enhancement or generally any _one_ job that is to be done. In Savannah, issues are classified into three categories or 'tracker's: Support This tracker is a way that (possibly anonymous) users can get in touch with the Gnuastro developers. It is a complement to the bug-gnuastro mailing list (see *note Report a bug::). Anyone can post an issue to this tracker. The developers will not submit an issue to this list. They will only reassign the issues in this list to the other two trackers if they are valid(3). Ideally (when the developers have time to put on Gnuastro, please do not forget that Gnuastro is a volunteer effort), there should be no open items in this tracker. Bugs This tracker contains all the known bugs in Gnuastro (problems with the existing tools). Tasks The items in this tracker contain the future plans (or new features/capabilities) that are to be added to Gnuastro. All the trackers can be browsed by a (possibly anonymous) visitor, but to edit and comment on the Bugs and Tasks trackers, you have to be a registered on Savannah. When posting an issue to a tracker, it is very important to choose the 'Category' and 'Item Group' options accurately. The first contains a list of all Gnuastro's programs along with 'Installation', 'New program' and 'Webpage'. The "Item Group" contains the nature of the issue, for example, if it is a 'Crash' in the software (a bug), or a problem in the documentation (also a bug) or a feature request or an enhancement. The set of horizontal links on the top of the page (Starting with 'Main' and 'Homepage' and finishing with 'News') are the easiest way to access these trackers (and other major aspects of the project) from any part of the project web page. Hovering your mouse over them will open a drop down menu that will link you to the different things you can do on each tracker (for example, 'Submit new' or 'Browse'). When you browse each tracker, you can use the "Display Criteria" link above the list to limit the displayed issues to what you are interested in. The 'Category' and 'Group Item' (explained above) are a good starting point. Any new issue that is submitted to any of the trackers, or any comments that are posted for an issue, is directly forwarded to the gnuastro-devel mailing list (<https://lists.gnu.org/mailman/listinfo/gnuastro-devel>, see *note Developing mailing lists:: for more). This will allow anyone interested to be up to date on the over-all development activity in Gnuastro and will also provide an alternative (to Savannah) archiving for the development discussions. Therefore, it is not recommended to directly post an email to this mailing list, but do all the activities (for example add new issues, or comment on existing ones) on Savannah. *Do I need to be a member in Savannah to contribute to Gnuastro?* No. The full version controlled history of Gnuastro is available for anonymous download or cloning. See *note Production workflow:: for a description of Gnuastro's Integration-Manager Workflow. In short, you can either send in patches, or make your own fork. If you choose the latter, you can push your changes to your own fork and inform us. We will then pull your changes and merge them into the main project. Please see *note Forking tutorial:: for a tutorial. ---------- Footnotes ---------- (1) <https://savannah.gnu.org/projects/gnuastro/> (2) <https://savannah.gnu.org/> (3) Some of the issues registered here might be due to a mistake on the user's side, not an actual bug in the program.  File: gnuastro.info, Node: Developing mailing lists, Next: Contributing to Gnuastro, Prev: Gnuastro project webpage, Up: Developing 13.11 Developing mailing lists ============================== To keep the developers and interested users up to date with the activity and discussions within Gnuastro, there are two mailing lists which you can subscribe to: ‘gnuastro-devel@gnu.org’ (at <https://lists.gnu.org/mailman/listinfo/gnuastro-devel>) All the posts made in the support, bugs and tasks discussions of *note Gnuastro project webpage:: are also sent to this mailing address and archived. By subscribing to this list you can stay up to date with the discussions that are going on between the developers before, during and (possibly) after working on an issue. All discussions are either in the context of bugs or tasks which are done on Savannah and circulated to all interested people through this mailing list. Therefore it is not recommended to post anything directly to this mailing list. Any mail that is sent to it from Savannah to this list has a link under the title "Reply to this item at:". That link will take you directly to the issue discussion page, where you can read the discussion history or join it. While you are posting comments on the Savannah issues, be sure to update the meta-data. For example, if the task/bug is not assigned to anyone and you would like to take it, change the "Assigned to" box, or if you want to report that it has been applied, change the status and so on. All these changes will also be circulated with the email very clearly. ‘gnuastro-commits@gnu.org’ (at <https://lists.gnu.org/mailman/listinfo/gnuastro-commits>) This mailing list is defined to circulate all commits that are done in Gnuastro's version controlled source, see *note Version controlled source::. If you have any ideas, or suggestions on the commits, please use the bug and task trackers on Savannah to followup the discussion, do not post to this list. All the commits that are made for an already defined issue or task will state the respective ID so you can find it easily.  File: gnuastro.info, Node: Contributing to Gnuastro, Prev: Developing mailing lists, Up: Developing 13.12 Contributing to Gnuastro ============================== You have this great idea or have found a good fix to a problem which you would like to implement in Gnuastro. You have also become familiar with the general design of Gnuastro in the previous sections of this chapter (see *note Developing::) and want to start working on and sharing your new addition/change with the whole community as part of the official release. This is great and your contribution is most welcome. This section and the next (see *note Developer's checklist::) are written in the hope of making it as easy as possible for you to share your great idea with the community. In this section we discuss the final steps you have to take: legal and technical. From the legal perspective, the copyright of any work you do on Gnuastro has to be assigned to the Free Software Foundation (FSF) and the GNU operating system, or you have to sign a disclaimer. We do this to ensure that Gnuastro can remain free in the future, see *note Copyright assignment::. From the technical point of view, in this section we also discuss commit guidelines (*note Commit guidelines::) and the general version control workflow of Gnuastro in *note Production workflow::, along with a tutorial in *note Forking tutorial::. Recall that before starting the work on your idea, be sure to checkout the bugs and tasks trackers in *note Gnuastro project webpage:: and announce your work there so you do not end up spending time on something others have already worked on, and also to attract similarly interested developers to help you. * Menu: * Copyright assignment:: Copyright has to be assigned to the FSF. * Commit guidelines:: Guidelines for commit messages. * Production workflow:: Submitting your commits (work) for inclusion. * Forking tutorial:: Tutorial on workflow steps with Git.  File: gnuastro.info, Node: Copyright assignment, Next: Commit guidelines, Prev: Contributing to Gnuastro, Up: Contributing to Gnuastro 13.12.1 Copyright assignment ---------------------------- Gnuastro's copyright is owned by the Free Software Foundation (FSF) to ensure that Gnuastro always remains free. The FSF has also provided a Contributor FAQ (https://www.fsf.org/licensing/contributor-faq) to further clarify the reasons, so we encourage you to read it. Professor Eben Moglen, of the Columbia University Law School has given a nice summary of the reasons for this at <https://www.gnu.org/licenses/why-assign>. Below we are copying it verbatim for self consistency (in case you are offline or reading in print). Under US copyright law, which is the law under which most free software programs have historically been first published, there are very substantial procedural advantages to registration of copyright. And despite the broad right of distribution conveyed by the GPL, enforcement of copyright is generally not possible for distributors: only the copyright holder or someone having assignment of the copyright can enforce the license. If there are multiple authors of a copyrighted work, successful enforcement depends on having the cooperation of all authors. In order to make sure that all of our copyrights can meet the record keeping and other requirements of registration, and in order to be able to enforce the GPL most effectively, FSF requires that each author of code incorporated in FSF projects provide a copyright assignment, and, where appropriate, a disclaimer of any work-for-hire ownership claims by the programmer's employer. That way we can be sure that all the code in FSF projects is free code, whose freedom we can most effectively protect, and therefore on which other developers can completely rely. Please get in touch with the Gnuastro maintainer (currently Mohammad Akhlaghi, mohammad -at- akhlaghi -dot- org) to follow the procedures. It is possible to do this for each change (good for a single contribution), and also more generally for all the changes/additions you do in the future within Gnuastro. So if you have already assigned the copyright of your work on another GNU software to the FSF, it should be done again for Gnuastro. The FSF has staff working on these legal issues and the maintainer will get you in touch with them to do the paperwork. The maintainer will just be informed in the end so your contributions can be merged within the Gnuastro source code. Gnuastro will gratefully acknowledge (see *note Acknowledgments::) all the people who have assigned their copyright to the FSF and have thus helped to guarantee the freedom and reliability of Gnuastro. The Free Software Foundation will also acknowledge your copyright contributions in the Free Software Supporter: <https://www.fsf.org/free-software-supporter> which will circulate to a very large community (225,910 people in July 2021). See the archives for some examples and subscribe to receive interesting updates. The very active code contributors (or developers) will also be recognized as project members on the Gnuastro project web page (see *note Gnuastro project webpage::) and can be given a ‘gnu.org’ email address. So your very valuable contribution and copyright assignment will not be forgotten and is highly appreciated by a very large community. If you are reluctant to sign an assignment, a disclaimer is also acceptable. *Do I need a disclaimer from my university or employer?* It depends on the contract with your university or employer. From the FSF's ‘/gd/gnuorg/conditions.text’: "If you are employed to do programming, or have made an agreement with your employer that says it owns programs you write, we need a signed piece of paper from your employer disclaiming rights to" Gnuastro. The FSF's copyright clerk will kindly help you decide, please consult the following email address: "assign -at- gnu -dot- org".  File: gnuastro.info, Node: Commit guidelines, Next: Production workflow, Prev: Copyright assignment, Up: Contributing to Gnuastro 13.12.2 Commit guidelines ------------------------- To be able to cleanly integrate your work with the other developers, *never commit on the ‘master’ branch* (see *note Production workflow:: for a complete discussion and *note Forking tutorial:: for a cookbook example). In short, leave ‘master’ only for changes you fetch, or pull from the official repository (see *note Synchronizing::). In the Gnuastro commit messages, we strive to follow these standards. Note that in the early phases of Gnuastro's development, we are experimenting and so if you notice earlier commits do not satisfy some of the guidelines below, it is because they predate that guideline. Commit title The commits have to start with one short descriptive title. The title is separated from the body with one blank line. Run ‘git log’ to see some of the most recent commit messages as an example. In general, the title should satisfy the following conditions: • It is best for the title to be short, about 60 (or even 50) characters. Most emulated command-line terminals are about 80 characters wide. However, we should also allow for the commit hashes which are printed in ‘git log --oneline’, and also branch names or the graph structure outputs of ‘git log’ which are also commonly used. • The title should not finish with any full-stops or periods ('<.>'). Commit body The body of the commit message is separated from the title by one empty line. Recall that anyone who has subscribed to ‘gnuastro-commits’ mailing list will get the commit in their email after it has been pushed to ‘master’. People will also read them when they synchronize with the main Gnuastro repository (see *note Synchronizing::). Finally, the commit messages will later be used to update the ‘NEWS’ file on each release. Therefore the commit message body plays a very important role in the development of Gnuastro, so please adhere to the following guidelines. • The body should be very descriptive. Start the commit message body by explaining what changes your commit makes from a user's perspective (added, changed, or removed options, or arguments to programs or libraries, or modified algorithms, or new installation step, etc.). • Try to explain the committed contents as best as you can. Recall that the readers of your commit message do not necessarily have your current background. After some time you will also forget the context, so this request is not just for others(1). Therefore be very descriptive and explain as much as possible: what the bug/task was, justify the way you fixed it and discuss other possible solutions that you might not have included. For the last item, it is best to discuss them thoroughly as comments in the appropriate section of the code, but only give a short summary in the commit message. Note that all added and removed source code lines will also be circulated in the ‘gnuastro-commits’ mailing list. • Like all other Gnuastro's text files, the lines in the commit body should not be longer than 75 characters, see *note Coding conventions::. This is to ensure that on standard terminal emulators (with 80 character width), the ‘git log’ output can be cleanly displayed (note that the commit message is indented in the output of ‘git log’). If you use Emacs, Gnuastro's ‘.dir-locals.el’ file will ensure that your commits satisfy this condition (using <M-q>). • When the commit is related to a task or a bug, please include the respective ID (in the format of ‘bug/task #ID’, note the space) in the commit message (from *note Gnuastro project webpage::) for interested people to be able to followup the discussion that took place there. If the commit fixes a bug or finishes a task, the recommended way is to add a line after the body with '‘This fixes bug #ID.’', or '‘This finishes task #ID.’'. Do not assume that the reader has internet access to check the bug's full description when reading the commit message, so give a short introduction too. Below you can see a good commit message example (do not forget to read it, it has tips for you). After reading this, please run ‘git log’ on the ‘master’ branch and read some of the recent commits for more realistic examples. The first line should be the title of the commit An empty line is necessary after the title so Git does not confuse lines. This top paragraph of the body of the commit usually describes the reason this commit was done. Therefore it usually starts with "Until now ...". It is very useful to explain the reason behind the change, things that are not immediately obvious when looking into the code. You do not need to list the names of the files, or what lines have been changed, do not forget that the code changes are fully stored within Git :-). In the second paragraph (or any later paragraph!) of the body, we describe the solution and why (not "how"!) the particular solution was implemented. So we usually start this part of the commit body with "With this commit ...". Again, you do not need to go into the details that can be seen from the 'git diff' command (like the file names that have been changed or the code that has been implemented). The important thing here is the things that are not immediately obvious from looking into the code. You can continue the explanation and it is encouraged to be very explicit about the "human factor" of the change as much as possible, not technical details. ---------- Footnotes ---------- (1) <http://catb.org/esr/writings/unix-koans/prodigy.html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/doc/gnuastro.info-11������������������������������������������������������������������0000644�0001750�0001750�00001500276�14557514041�012504� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is gnuastro.info, produced by makeinfo version 7.1 from gnuastro.texi. This book documents version 0.22 of the GNU Astronomy Utilities (Gnuastro). Gnuastro provides various programs and libraries for astronomical data manipulation and analysis. Copyright © 2015-2024 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Astronomy START-INFO-DIR-ENTRY * Gnuastro: (gnuastro). GNU Astronomy Utilities. * libgnuastro: (gnuastro)Gnuastro library. Full Gnuastro library doc. * help-gnuastro: (gnuastro)help-gnuastro mailing list. Getting help. * bug-gnuastro: (gnuastro)Report a bug. How to report bugs * Arithmetic: (gnuastro)Arithmetic. Arithmetic operations on pixels. * astarithmetic: (gnuastro)Invoking astarithmetic. Options to Arithmetic. * BuildProgram: (gnuastro)BuildProgram. Compile and run programs using Gnuastro's library. * astbuildprog: (gnuastro)Invoking astbuildprog. Options to BuildProgram. * ConvertType: (gnuastro)ConvertType. Convert different file types. * astconvertt: (gnuastro)Invoking astconvertt. Options to ConvertType. * Convolve: (gnuastro)Convolve. Convolve an input file with kernel. * astconvolve: (gnuastro)Invoking astconvolve. Options to Convolve. * CosmicCalculator: (gnuastro)CosmicCalculator. For cosmological params. * astcosmiccal: (gnuastro)Invoking astcosmiccal. Options to CosmicCalculator. * Crop: (gnuastro)Crop. Crop region(s) from image(s). * astcrop: (gnuastro)Invoking astcrop. Options to Crop. * Fits: (gnuastro)Fits. View and manipulate FITS extensions and keywords. * astfits: (gnuastro)Invoking astfits. Options to Fits. * MakeCatalog: (gnuastro)MakeCatalog. Make a catalog from labeled image. * astmkcatalog: (gnuastro)Invoking astmkcatalog. Options to MakeCatalog. * MakeProfiles: (gnuastro)MakeProfiles. Make mock profiles. * astmkprof: (gnuastro)Invoking astmkprof. Options to MakeProfiles. * Match: (gnuastro)Match. Match two separate catalogs. * astmatch: (gnuastro)Invoking astmatch. Options to Match. * NoiseChisel: (gnuastro)NoiseChisel. Detect signal in noise. * astnoisechisel: (gnuastro)Invoking astnoisechisel. Options to NoiseChisel. * Segment: (gnuastro)Segment. Segment detections based on signal structure. * astsegment: (gnuastro)Invoking astsegment. Options to Segment. * Query: (gnuastro)Query. Access remote databases for downloading data. * astquery: (gnuastro)Invoking astquery. Options to Query. * Statistics: (gnuastro)Statistics. Get image Statistics. * aststatistics: (gnuastro)Invoking aststatistics. Options to Statistics. * Table: (gnuastro)Table. Read and write FITS binary or ASCII tables. * asttable: (gnuastro)Invoking asttable. Options to Table. * Warp: (gnuastro)Warp. Warp a dataset to a new grid. * astwarp: (gnuastro)Invoking astwarp. Options to Warp. * astscript: (gnuastro)Installed scripts. Gnuastro's installed scripts. * astscript-ds9-region: (gnuastro)Invoking astscript-ds9-region. Options to this script * astscript-fits-view: (gnuastro)Invoking astscript-fits-view. Options to this script * astscript-pointing-simulate: (gnuastro)Invoking astscript-pointing-simulate. Options to this script * astscript-psf-scale-factor: (gnuastro)Invoking astscript-psf-scale-factor. Options to this script * astscript-psf-select-stars: (gnuastro)Invoking astscript-psf-select-stars. Options to this script * astscript-psf-stamp: (gnuastro)Invoking astscript-psf-stamp. Options to this script * astscript-psf-subtract: (gnuastro)Invoking astscript-psf-subtract. Options to this script * astscript-psf-unite: (gnuastro)Invoking astscript-psf-unite. Options to this script * astscript-radial-profile: (gnuastro)Invoking astscript-radial-profile. Options to this script * astscript-sort-by-night: (gnuastro)Invoking astscript-sort-by-night. Options to this script * astscript-zeropoint: (gnuastro)Invoking astscript-zeropoint. Options to this script END-INFO-DIR-ENTRY  File: gnuastro.info, Node: Production workflow, Next: Forking tutorial, Prev: Commit guidelines, Up: Contributing to Gnuastro 13.12.3 Production workflow --------------------------- Fortunately 'Pro Git' has done a wonderful job in explaining the different workflows in Chapter 5(1) and in particular the "Integration-Manager Workflow" explained there. The implementation of this workflow is nicely explained in Section 5.2(2) under "Forked-Public-Project". We have also prepared a short tutorial in *note Forking tutorial::. Anything on the master branch should always be tested and ready to be built and used. As described in 'Pro Git', there are two methods for you to contribute to Gnuastro in the Integration-Manager Workflow: 1. You can send commit patches by email as fully explained in 'Pro Git'. This is good for your first few contributions. Just note that raw patches (containing only the diff) do not have any meta-data (author name, date, etc.). Therefore they will not allow us to fully acknowledge your contributions as an author in Gnuastro: in the ‘AUTHORS’ file and at the start of the PDF book. These author lists are created automatically from the version controlled source. To receive full acknowledgment when submitting a patch, is thus advised to use Git's ‘format-patch’ tool. See Pro Git's Public project over email (https://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project#Public-Project-over-Email) section for a nice explanation. If you would like to get more heavily involved in Gnuastro's development, then you can try the next solution. 2. You can have your own forked copy of Gnuastro on any hosting site you like (Codeberg, Gitlab, GitHub, BitBucket, etc.) and inform us when your changes are ready so we merge them in Gnuastro. This is more suited for people who commonly contribute to the code (see *note Forking tutorial::). In both cases, your commits (with your name and information) will be preserved and your contributions will thus be fully recorded in the history of Gnuastro and in the ‘AUTHORS’ file and this book (second page in the PDF format) once they have been incorporated into the official repository. Needless to say that in such cases, be sure to follow the bug or task trackers (or subscribe to the ‘gnuastro-devel’ mailing list) and contact us before hand so you do not do something that someone else is already working on. In that case, you can get in touch with them and help the job go on faster, see *note Gnuastro project webpage::. This workflow is currently mostly borrowed from the general recommendations of Git(3) and GitHub. But since Gnuastro is currently under heavy development, these might change and evolve to better suit our needs. ---------- Footnotes ---------- (1) <http://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows> (2) <http://git-scm.com/book/en/v2/Distributed-Git-Contributing-to-a-Project> (3) <https://github.com/git/git/blob/master/Documentation/SubmittingPatches>  File: gnuastro.info, Node: Forking tutorial, Prev: Production workflow, Up: Contributing to Gnuastro 13.12.4 Forking tutorial ------------------------ This is a tutorial on the second suggested method (commonly known as forking) that you can submit your modifications in Gnuastro (see *note Production workflow::). To start, please create an _empty_ repository on your hosting service web page (we recommend Codeberg since it is fully free software(1)). By empty, we mean that you don't let the web service fill your new repository with a ‘README.md’ file (they usually have a check-box for this). Also, since Gnuastro is a public repository, it is much easier if you define your project as a public repository (not a private one). If this is your first hosted repository on the web page, you also have to upload your public SSH key(2) for the ‘git push’ command below to work. Here we will assume you use the name ‘janedoe’ to refer to yourself everywhere and that you choose ‘gnuastro’ as the name of your Gnuastro fork. Any online hosting service will give you an address (similar to the '‘git@codeberg.org:...’' below) of the empty repository you have created using their web page, use that address in the third line below. $ git clone git://git.sv.gnu.org/gnuastro.git $ cd gnuastro $ git remote add janedoe git@codeberg.org:janedoe/gnuastro.git $ git push janedoe master The full Gnuastro history is now pushed onto your hosting service and the ‘janedoe’ remote is now also following your ‘master’ branch. If you run ‘git remote show REMOTENAME’ for the ‘origin’ and ‘janedoe’ remotes, you will see their difference: the first has pull access and the second does not. This nicely summarizes the main idea behind this workflow: you push to your remote repository, we pull from it and merge it into ‘master’, then you finalize it by pulling from the main repository. To test (compile) your changes during your work, you will need to bootstrap the version controlled source, see *note Bootstrapping:: for a full description. The cloning process above is only necessary for your first time setup, you do not need to repeat it. However, please repeat the steps below for each independent issue you intend to work on. Let's assume you have found a bug in ‘lib/statistics.c’'s median calculating function. Before actually doing anything, please announce it (see *note Report a bug::) so everyone knows you are working on it, or to confirm if others are not already working on it. With the commands below, you make a branch, checkout to it, correct the bug and check if it is indeed fixed. But before all of this, make sure that you are on the ‘master’ branch and that your ‘master’ branch is up to date with the main Gnuastro repository with the first two commands. $ git checkout master $ git pull $ git checkout -b bug-median-stats # Choose a descriptive name $ emacs lib/statistics.c With the commands above, you have opened your favorite text editor (if it is not Emacs, feel free to use any other!) and are starting to make changes. Making changes will usually involve checking the compilation and outputs of the parts you have changed. Gnuastro already has some facilities to help you in your checks during/after development. ‘developer-build’ This script does a full build (from the configuration phase to producing the final distribution tarball). During the process, if there is any error or crash, it will abort. This allows you to find problems that you hadn't predicted while modifying the files. This script is described more completely in *note Separate build and source directories::. Here is an example of running this script from scratch (the ‘junk’ is just a place-holder for a URL): $ ./developer-build -p junk If you just want a fast build to start your developing, the recommended way is to run it in debugging mode like below: $ ./developer-build -d Without debugging mode, building Gnuastro can take several minutes due to the highly optimizable code structure of Gnuastro (which significantly improves the run-time of the programs, but is slower in the compilation phase). During development, you rarely need high speed at _run-time_. This is because once you find the bug, you can decrease the size of the dataset to be very small and not be affected by run-time optimizations. However, during development, you do need a high speed at _build-time_ to see the changes fast and also need debugging flags (for example to run with Valgrind). Debugging flags are lost in the default highly-optimized build. ‘tests/during-dev.sh’ This script is most commonly used during the development of a new feature within the library or programs (it is also mentioned in *note Building and debugging::). It assumes that you have built Gnuastro with the ‘./developer-build’ script (usually in debugging mode). In other words, it assumes that all the built products are in the ‘build’ directory. It has internal variables to set the name of the program you are testing, the name of its arguments and options, as well as the location that the built program should be run in. It is heavily commented, so we recommend reading those comments and will not go into more detail here. ‘make pdf’ When making changes in the book, you can run this in the ‘build’ directory to see your changes in the final PDF before committing. Furthermore, if you add or update an example code block of the book, you should copy-paste it into a text editor and check that it runs correctly (typos are very common and can be very annoying for first-time readers). If there are no problems, you can add your modification and commit it. Once you have implemented your bug fix and made sure that it works, through the checks above, you are ready to stage, commit and push your changes with the commands below. Since Gnuastro is a large project, commit messages have to follow certain standards that you should follow, they are described in *note Commit guidelines::. Please read that section carefully, and view previous commits (with ‘git log’) before writing the commit message: $ git add lib/statistics.c $ git commit $ git push janedoe bug-median-stats Your new branch is now on your hosted repository. Through the respective tacker on Savannah (see *note Gnuastro project webpage::) you can then let the other developers know that your ‘bug-median-stats’ branch is ready. They will pull your work, test it themselves and if it is ready to be merged into the main Gnuastro history, they will merge it into the ‘master’ branch. After that is done, you can simply checkout your local ‘master’ branch and pull all the changes from the main repository. After the pull you can run '‘git log’' as shown below, to see how ‘bug-median-stats’ is merged with master. To finalize, you can push all the changes to your hosted repository and delete the branch: $ git checkout master $ git pull $ git log --oneline --graph --decorate --all $ git push janedoe master $ git branch -d bug-median-stats # delete local branch $ git push janedoe --delete bug-median-stats # delete remote branch Just as a reminder, always keep your work on each issue in a separate local and remote branch so work can progress on them independently. After you make your announcement, other people might contribute to the branch before merging it in to ‘master’, so this is very important. As a final reminder: before starting each issue branch from ‘master’, be sure to run ‘git pull’ in ‘master’ as shown above. This will enable you to start your branch (work) from the most recent commit and thus simplify the final merging of your work. ---------- Footnotes ---------- (1) See <https://www.gnu.org/software/repo-criteria-evaluation.html> for an evaluation of the major existing repositories. Gnuastro uses GNU Savannah (which also has the highest ranking in the evaluation), but for starters, Codeberg may be easier (it is fully free software). (2) for example, see this explanation provided by Codeberg: <https://docs.codeberg.org/security/ssh-key>.  File: gnuastro.info, Node: Other useful software, Next: GNU Free Doc License, Prev: Developing, Up: Top Appendix A Other useful software ******************************** In this appendix the installation of programs and libraries that are not direct Gnuastro dependencies are discussed. However they can be useful for working with Gnuastro. * Menu: * SAO DS9:: Viewing FITS images. * TOPCAT:: Plotting tables of data. * PGPLOT:: Plotting directly in C.  File: gnuastro.info, Node: SAO DS9, Next: TOPCAT, Prev: Other useful software, Up: Other useful software A.1 SAO DS9 =========== SAO DS9 (http://ds9.si.edu) is not a requirement of Gnuastro, it is a FITS image viewer. It is therefore a useful tool to visually inspect the images/cubes of your Gnuastro inputs or outputs (for tables, see *note TOPCAT::). In Gnuastro we have an installed script to run DS9 or TOPCAT on any number of FITS files (depending on it being an image or table), see *note Viewing FITS file contents with DS9 or TOPCAT:: (which also includes a ‘.desktop’ file for GUI integration). After installing DS9, you can easily use that script to open any FITS file (table, image or cube). Like the other packages, it might already be available in your distribution's repositories; but these may be outdated. DS9 is also already pre-compiled for many common operating systems in the download section of its own web page: 1. Find your operating system in <https://ds9.si.edu/download>. Here are some tips when trying to find the proper directory: • Many GNU/Linux operating systems are compatible with Debian or Fedora, so if you don't find your operating system's name, probably the latest Debian or Fedora will also work for you. • macOS uses the low-level "Darwin" kernel. Therefore, if you have a macOS, also consider those directories that start with ‘darwin’. • The CPU architectures (as suffixes) at the end of the directory names can be classified like this: ‘x86’ Intel CPUs. ‘arm64’ Apple's M1 CPUs. 2. With the operating system directories, you will find a compressed tarball that you need to download (choose the latest one). 3. Unpack the tarball with a command like below: $ tar -xf ds9.XXXXXXX.X.X.X.tar.gz 4. This should produce a simple ‘ds9’ file. Before installing, it is good to actually test it like below: $ ./ds9 5. If the command above opened DS9 with no error, you can safely install it with this command: $ rm ds9*.tar.gz $ sudo mv ds9* /usr/local/bin 6. Go to your home directory and try running DS9 with the two commands below. If it doesn't find it, then you need to add ‘/usr/local/bin’ to your ‘PATH’, see *note Installation directory::. $ cd $ ds9 *Install without root permissions:* If you do not have root permissions, you can simply replace ‘/usr/local/bin’ in the command above with ‘$HOME/.local/bin’. If this directory is not in your ‘PATH’, you can simply add it with the command below (in your startup file, e.g., ‘~/.bashrc’). For more on ‘PATH’ and the startup files, see *note Installation directory::. export PATH="$HOME/.local/bin:$PATH" Below you can see a list of known issues in some operating systems that we have found so far. You should be able to identify any potential error when running DS9 from the command-line like above. • There might be a complaint about the Xss library, which you can find in your distribution package management system. • You might also get an ‘XPA’ related error. In this case, you have to add the following line to your ‘~/.bashrc’ and ‘~/.profile’ file (you will have to log out and back in again for the latter): export XPA_METHOD=local • Your system may not have the SSL library in its standard library path, in this case, put this command in your startup file (for example, ‘~/.bashrc’): export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/ssl/lib"  File: gnuastro.info, Node: TOPCAT, Next: PGPLOT, Prev: SAO DS9, Up: Other useful software A.2 TOPCAT ========== TOPCAT (http://www.star.bris.ac.uk/~mbt/topcat) is not a requirement of Gnuastro, it is a table viewer and plotter (in many input formats, including FITS, VOTable, and others). TOPCAT is therefore a useful tool to visually inspect the tables of your Gnuastro inputs or outputs (for images, see *note SAO DS9::). In Gnuastro we have an installed script to run DS9 or TOPCAT on any number of FITS files (depending on it being an image or table), see *note Viewing FITS file contents with DS9 or TOPCAT:: (which also includes a ‘.desktop’ file for GUI integration). After installing DS9, you can easily use that script to open any FITS file (table, image or cube). TOPCAT is a very large package with many capabilities to visualize tables (as plots). It also has an extensive documentation (http://www.star.bris.ac.uk/~mbt/topcat/#docs) that you can read for optimally using it. TOPCAT is written in Java, so it just needs a relatively recent (in the last decade) Java Virtual Machine (JVM) and Java Runtime Environment (JRE). Your operating system already has a relatively recent Java installation in its package manager, and there is a large chance that it is already installed. So before trying to install Java, try running TOPCAT. If it complains about not finding a suitable Java environment, then proceed to search your operating system's package manager. To install TOPCAT, you just need to run the following two commands. The first ‘.jar’ file is the main TOPCAT Java ARchive (JAR). JAR is a compressed package of Java files and definitions that should be run with a special Java command. But to avoid bothering users with details of how to call Java, TOPCAT also provides a simple shell script (the second downloaded file below) that is easier to call and will do all the internal checks and call Java properly. $ wget http://www.star.bris.ac.uk/~mbt/topcat/topcat-full.jar $ wget http://www.star.bris.ac.uk/~mbt/topcat/topcat $ chmod +x topcat $ ./topcat # Just for a check to see if everything works! $ sudo mv topcat-full.jar topcat /usr/local/bin/ Once the two TOPCAT files are copied in the system-wide directory, you can easily open tables with a command like below from anywhere in your operating system. $ topcat table.fits *Install without root permissions:* If you do not have root permissions, you can simply replace ‘/usr/local/bin’ in the command above with ‘$HOME/.local/bin’. If this directory is not in your ‘PATH’, you can simply add it with the command below (in your startup file, e.g., ‘~/.bashrc’). For more on ‘PATH’ and the startup files, see *note Installation directory::. export PATH="$HOME/.local/bin:$PATH"  File: gnuastro.info, Node: PGPLOT, Prev: TOPCAT, Up: Other useful software A.3 PGPLOT ========== PGPLOT is a package for making plots in C. It is not directly needed by Gnuastro, but can be used by WCSLIB, see *note WCSLIB::. As explained in *note WCSLIB::, you can install WCSLIB without it too. It is very old (the most recent version was released early 2001!), but remains one of the main packages for plotting directly in C. WCSLIB uses this package to make plots if you want it to make plots. If you are interested you can also use it for your own purposes. If you want your plotting codes in between your C program, PGPLOT is currently one of your best options. The recommended alternative to this method is to get the raw data for the plots in text files and input them into any of the various more modern and capable plotting tools separately, for example, the Matplotlib library in Python or PGFplots in LaTeX. This will also significantly help code readability. Let's get back to PGPLOT for the sake of WCSLIB. Installing it is a little tricky (mainly because it is so old!). You can download the most recent version from the FTP link in its web page(1). You can unpack it with the ‘tar -xf’ command. Let's assume the directory you have unpacked it to is ‘PGPLOT’, most probably it is: ‘/home/username/Downloads/pgplot/’. Open the ‘drivers.list’ file: $ gedit drivers.list Remove the ‘!’ for the following lines and save the file in the end: PSDRIV 1 /PS PSDRIV 2 /VPS PSDRIV 3 /CPS PSDRIV 4 /VCPS XWDRIV 1 /XWINDOW XWDRIV 2 /XSERVE Do not choose GIF or VGIF, there is a problem in their codes. Open the ‘PGPLOT/sys_linux/g77_gcc.conf’ file: $ gedit PGPLOT/sys_linux/g77_gcc.conf change the line saying: ‘FCOMPL="g77"’ to ‘FCOMPL="gfortran"’, and save it. This is a very important step during the compilation of the code if you are in GNU/Linux. You now have to create a folder in ‘/usr/local’, do not forget to replace ‘PGPLOT’ with your unpacked address: $ su # mkdir /usr/local/pgplot # cd /usr/local/pgplot # cp PGPLOT/drivers.list ./ To make the Makefile, type the following command: # PGPLOT/makemake PGPLOT linux g77_gcc It should finish by saying: ‘Determining object file dependencies’. You have done the hard part! The rest is easy: run these three commands in order: # make # make clean # make cpg Finally you have to place the position of this directory you just made into the ‘LD_LIBRARY_PATH’ environment variable and define the environment variable ‘PGPLOT_DIR’. To do that, you have to edit your ‘.bashrc’ file: $ cd ~ $ gedit .bashrc Copy these lines into the text editor and save it: PGPLOT_DIR="/usr/local/pgplot/"; export PGPLOT_DIR LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/pgplot/ export LD_LIBRARY_PATH You need to log out and log back in again so these definitions take effect. After you logged back in, you want to see the result of all this labor, right? Tim Pearson has done that for you, create a temporary folder in your home directory and copy all the demonstration files in it: $ cd ~ $ mkdir temp $ cd temp $ cp /usr/local/pgplot/pgdemo* ./ $ ls You will see a lot of pgdemoXX files, where XX is a number. In order to execute them type the following command and drink your coffee while looking at all the beautiful plots! You are now ready to create your own. $ ./pgdemoXX ---------- Footnotes ---------- (1) <http://www.astro.caltech.edu/~tjp/pgplot/>  File: gnuastro.info, Node: GNU Free Doc License, Next: GNU General Public License, Prev: Other useful software, Up: Top Appendix B GNU Free Doc. License ******************************** Version 1.3, 3 November 2008 Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. <https://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document “free†in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See <https://www.gnu.org/licenses/>. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  File: gnuastro.info, Node: GNU General Public License, Next: Index, Prev: GNU Free Doc License, Up: Top Appendix C GNU Gen. Pub. License v3 *********************************** Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble ======== The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS ==================== 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a. The work must carry prominent notices stating that you modified it, and giving a relevant date. b. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d. Limiting the use for publicity purposes of names of licensors or authors of the material; or e. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS =========================== How to Apply These Terms to Your New Programs ============================================= If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. Copyright (C) YEAR NAME OF AUTHOR This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: PROGRAM Copyright (C) YEAR NAME OF AUTHOR This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’. This is free software, and you are welcome to redistribute it under certain conditions; type ‘show c’ for details. The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <https://www.gnu.org/licenses/why-not-lgpl.html>.  File: gnuastro.info, Node: Index, Prev: GNU General Public License, Up: Top Index: Macros, structures and functions *************************************** All Gnuastro library's exported macros start with ‘GAL_’, and its exported structures and functions start with ‘gal_’. This abbreviation stands for _G_NU _A_stronomy _L_ibrary. The next element in the name is the name of the header which declares or defines them, so to use the ‘gal_array_fset_const’ function, you have to ‘#include <gnuastro/array.h>’. See *note Gnuastro library:: for more. The ‘pthread_barrier’ constructs are our implementation and are only available on systems that do not have them, see *note Implementation of pthread_barrier::. �[index�] * Menu: * gal_arithmetic: Arithmetic on datasets. (line 514) * GAL_ARITHMETIC_FLAG_ENVSEED: Arithmetic on datasets. (line 39) * GAL_ARITHMETIC_FLAG_FREE: Arithmetic on datasets. (line 37) * GAL_ARITHMETIC_FLAG_INPLACE: Arithmetic on datasets. (line 36) * GAL_ARITHMETIC_FLAG_NUMOK: Arithmetic on datasets. (line 38) * GAL_ARITHMETIC_FLAG_QUIET: Arithmetic on datasets. (line 40) * GAL_ARITHMETIC_FLAGS_BASIC: Arithmetic on datasets. (line 41) * gal_arithmetic_load_col: Arithmetic on datasets. (line 610) * GAL_ARITHMETIC_OP_ABS: Arithmetic on datasets. (line 263) * GAL_ARITHMETIC_OP_ACOS: Arithmetic on datasets. (line 173) * GAL_ARITHMETIC_OP_ACOSH: Arithmetic on datasets. (line 183) * GAL_ARITHMETIC_OP_AND: Arithmetic on datasets. (line 96) * GAL_ARITHMETIC_OP_ASIN: Arithmetic on datasets. (line 172) * GAL_ARITHMETIC_OP_ASINH: Arithmetic on datasets. (line 182) * GAL_ARITHMETIC_OP_ATAN: Arithmetic on datasets. (line 174) * GAL_ARITHMETIC_OP_ATAN2: Arithmetic on datasets. (line 175) * GAL_ARITHMETIC_OP_ATANH: Arithmetic on datasets. (line 184) * GAL_ARITHMETIC_OP_AU: Arithmetic on datasets. (line 401) * GAL_ARITHMETIC_OP_AU_TO_LY: Arithmetic on datasets. (line 231) * GAL_ARITHMETIC_OP_AU_TO_PC: Arithmetic on datasets. (line 226) * GAL_ARITHMETIC_OP_AVOGADRO: Arithmetic on datasets. (line 404) * GAL_ARITHMETIC_OP_BITAND: Arithmetic on datasets. (line 351) * GAL_ARITHMETIC_OP_BITLSH: Arithmetic on datasets. (line 354) * GAL_ARITHMETIC_OP_BITNOT: Arithmetic on datasets. (line 371) * GAL_ARITHMETIC_OP_BITOR: Arithmetic on datasets. (line 352) * GAL_ARITHMETIC_OP_BITRSH: Arithmetic on datasets. (line 355) * GAL_ARITHMETIC_OP_BITXOR: Arithmetic on datasets. (line 353) * GAL_ARITHMETIC_OP_BOX_AROUND_ELLIPSE: Arithmetic on datasets. (line 411) * GAL_ARITHMETIC_OP_BOX_VERTICES_ON_SPHERE: Arithmetic on datasets. (line 419) * GAL_ARITHMETIC_OP_C: Arithmetic on datasets. (line 398) * GAL_ARITHMETIC_OP_COS: Arithmetic on datasets. (line 170) * GAL_ARITHMETIC_OP_COSH: Arithmetic on datasets. (line 180) * GAL_ARITHMETIC_OP_COUNTER: Arithmetic on datasets. (line 454) * GAL_ARITHMETIC_OP_COUNTERONLY: Arithmetic on datasets. (line 456) * GAL_ARITHMETIC_OP_COUNTS_TO_JY: Arithmetic on datasets. (line 203) * GAL_ARITHMETIC_OP_COUNTS_TO_MAG: Arithmetic on datasets. (line 199) * GAL_ARITHMETIC_OP_COUNTS_TO_SB: Arithmetic on datasets. (line 219) * GAL_ARITHMETIC_OP_DEC_TO_DEGREE: Arithmetic on datasets. (line 188) * GAL_ARITHMETIC_OP_DEGREE_TO_DEC: Arithmetic on datasets. (line 190) * GAL_ARITHMETIC_OP_DEGREE_TO_RA: Arithmetic on datasets. (line 189) * GAL_ARITHMETIC_OP_DIVIDE: Arithmetic on datasets. (line 89) * GAL_ARITHMETIC_OP_E: Arithmetic on datasets. (line 397) * GAL_ARITHMETIC_OP_ECB1950_TO_ECJ2000: Arithmetic on datasets. (line 491) * GAL_ARITHMETIC_OP_ECB1950_TO_EQB1950: Arithmetic on datasets. (line 489) * GAL_ARITHMETIC_OP_ECB1950_TO_EQJ2000: Arithmetic on datasets. (line 490) * GAL_ARITHMETIC_OP_ECB1950_TO_GALACTIC: Arithmetic on datasets. (line 492) * GAL_ARITHMETIC_OP_ECB1950_TO_SUPERGALACTIC: Arithmetic on datasets. (line 493) * GAL_ARITHMETIC_OP_ECJ2000_TO_ECB1950: Arithmetic on datasets. (line 496) * GAL_ARITHMETIC_OP_ECJ2000_TO_EQB1950: Arithmetic on datasets. (line 494) * GAL_ARITHMETIC_OP_ECJ2000_TO_EQJ2000: Arithmetic on datasets. (line 495) * GAL_ARITHMETIC_OP_ECJ2000_TO_GALACTIC: Arithmetic on datasets. (line 497) * GAL_ARITHMETIC_OP_ECJ2000_TO_SUPERGALACTIC: Arithmetic on datasets. (line 498) * GAL_ARITHMETIC_OP_EQ: Arithmetic on datasets. (line 94) * GAL_ARITHMETIC_OP_EQB1950_TO_ECB1950: Arithmetic on datasets. (line 480) * GAL_ARITHMETIC_OP_EQB1950_TO_ECJ2000: Arithmetic on datasets. (line 481) * GAL_ARITHMETIC_OP_EQB1950_TO_EQJ2000: Arithmetic on datasets. (line 479) * GAL_ARITHMETIC_OP_EQB1950_TO_GALACTIC: Arithmetic on datasets. (line 482) * GAL_ARITHMETIC_OP_EQB1950_TO_SUPERGALACTIC: Arithmetic on datasets. (line 483) * GAL_ARITHMETIC_OP_EQJ2000_TO_ECB1950: Arithmetic on datasets. (line 485) * GAL_ARITHMETIC_OP_EQJ2000_TO_ECJ2000: Arithmetic on datasets. (line 486) * GAL_ARITHMETIC_OP_EQJ2000_TO_EQB1950: Arithmetic on datasets. (line 484) * GAL_ARITHMETIC_OP_EQJ2000_TO_GALACTIC: Arithmetic on datasets. (line 487) * GAL_ARITHMETIC_OP_EQJ2000_TO_SUPERGALACTIC: Arithmetic on datasets. (line 488) * GAL_ARITHMETIC_OP_FINESTRUCTURE: Arithmetic on datasets. (line 405) * GAL_ARITHMETIC_OP_G: Arithmetic on datasets. (line 399) * GAL_ARITHMETIC_OP_GALACTIC_TO_ECB1950: Arithmetic on datasets. (line 501) * GAL_ARITHMETIC_OP_GALACTIC_TO_ECJ2000: Arithmetic on datasets. (line 502) * GAL_ARITHMETIC_OP_GALACTIC_TO_EQB1950: Arithmetic on datasets. (line 499) * GAL_ARITHMETIC_OP_GALACTIC_TO_EQJ2000: Arithmetic on datasets. (line 500) * GAL_ARITHMETIC_OP_GALACTIC_TO_SUPERGALACTIC: Arithmetic on datasets. (line 503) * GAL_ARITHMETIC_OP_GE: Arithmetic on datasets. (line 93) * GAL_ARITHMETIC_OP_GT: Arithmetic on datasets. (line 92) * GAL_ARITHMETIC_OP_H: Arithmetic on datasets. (line 400) * GAL_ARITHMETIC_OP_INDEX: Arithmetic on datasets. (line 453) * GAL_ARITHMETIC_OP_INDEXONLY: Arithmetic on datasets. (line 455) * GAL_ARITHMETIC_OP_ISBLANK: Arithmetic on datasets. (line 118) * GAL_ARITHMETIC_OP_JY_TO_COUNTS: Arithmetic on datasets. (line 204) * GAL_ARITHMETIC_OP_JY_TO_MAG: Arithmetic on datasets. (line 206) * GAL_ARITHMETIC_OP_LE: Arithmetic on datasets. (line 91) * GAL_ARITHMETIC_OP_LOG: Arithmetic on datasets. (line 148) * GAL_ARITHMETIC_OP_LOG10: Arithmetic on datasets. (line 149) * GAL_ARITHMETIC_OP_LT: Arithmetic on datasets. (line 90) * GAL_ARITHMETIC_OP_LY: Arithmetic on datasets. (line 402) * GAL_ARITHMETIC_OP_LY_TO_AU: Arithmetic on datasets. (line 230) * GAL_ARITHMETIC_OP_LY_TO_PC: Arithmetic on datasets. (line 228) * GAL_ARITHMETIC_OP_MAG_TO_COUNTS: Arithmetic on datasets. (line 200) * GAL_ARITHMETIC_OP_MAG_TO_JY: Arithmetic on datasets. (line 205) * GAL_ARITHMETIC_OP_MAG_TO_NANOMAGGY: Arithmetic on datasets. (line 207) * GAL_ARITHMETIC_OP_MAG_TO_SB: Arithmetic on datasets. (line 201) * GAL_ARITHMETIC_OP_MAKENEW: Arithmetic on datasets. (line 430) * GAL_ARITHMETIC_OP_MAKENEW <1>: Arithmetic on datasets. (line 438) * GAL_ARITHMETIC_OP_MAX: Arithmetic on datasets. (line 267) * GAL_ARITHMETIC_OP_MAXVAL: Arithmetic on datasets. (line 236) * GAL_ARITHMETIC_OP_MEAN: Arithmetic on datasets. (line 270) * GAL_ARITHMETIC_OP_MEANVAL: Arithmetic on datasets. (line 239) * GAL_ARITHMETIC_OP_MEDIAN: Arithmetic on datasets. (line 272) * GAL_ARITHMETIC_OP_MEDIANVAL: Arithmetic on datasets. (line 241) * GAL_ARITHMETIC_OP_MIN: Arithmetic on datasets. (line 266) * GAL_ARITHMETIC_OP_MINUS: Arithmetic on datasets. (line 87) * GAL_ARITHMETIC_OP_MINVAL: Arithmetic on datasets. (line 235) * GAL_ARITHMETIC_OP_MKNOISE_POISSON: Arithmetic on datasets. (line 310) * GAL_ARITHMETIC_OP_MKNOISE_SIGMA: Arithmetic on datasets. (line 309) * GAL_ARITHMETIC_OP_MKNOISE_UNIFORM: Arithmetic on datasets. (line 311) * GAL_ARITHMETIC_OP_MODULO: Arithmetic on datasets. (line 356) * GAL_ARITHMETIC_OP_MULTIPLY: Arithmetic on datasets. (line 88) * GAL_ARITHMETIC_OP_NANOMAGGY_TO_MAG: Arithmetic on datasets. (line 208) * GAL_ARITHMETIC_OP_NE: Arithmetic on datasets. (line 95) * GAL_ARITHMETIC_OP_NOBLANK: Arithmetic on datasets. (line 250) * GAL_ARITHMETIC_OP_NOT: Arithmetic on datasets. (line 110) * GAL_ARITHMETIC_OP_NUMBER: Arithmetic on datasets. (line 268) * GAL_ARITHMETIC_OP_NUMBERVAL: Arithmetic on datasets. (line 237) * GAL_ARITHMETIC_OP_OR: Arithmetic on datasets. (line 97) * GAL_ARITHMETIC_OP_PC_TO_AU: Arithmetic on datasets. (line 227) * GAL_ARITHMETIC_OP_PC_TO_LY: Arithmetic on datasets. (line 229) * GAL_ARITHMETIC_OP_PI: Arithmetic on datasets. (line 403) * GAL_ARITHMETIC_OP_PLUS: Arithmetic on datasets. (line 86) * GAL_ARITHMETIC_OP_POW: Arithmetic on datasets. (line 345) * GAL_ARITHMETIC_OP_QUANTILE: Arithmetic on datasets. (line 288) * GAL_ARITHMETIC_OP_RA_TO_DEGREE: Arithmetic on datasets. (line 187) * GAL_ARITHMETIC_OP_RANDOM_FROM_HIST: Arithmetic on datasets. (line 334) * GAL_ARITHMETIC_OP_RANDOM_FROM_HIST_RAW: Arithmetic on datasets. (line 335) * GAL_ARITHMETIC_OP_SB_TO_COUNTS: Arithmetic on datasets. (line 220) * GAL_ARITHMETIC_OP_SB_TO_MAG: Arithmetic on datasets. (line 202) * GAL_ARITHMETIC_OP_SIGCLIP_MEAN: Arithmetic on datasets. (line 296) * GAL_ARITHMETIC_OP_SIGCLIP_MEDIAN: Arithmetic on datasets. (line 297) * GAL_ARITHMETIC_OP_SIGCLIP_NUMBER: Arithmetic on datasets. (line 298) * GAL_ARITHMETIC_OP_SIGCLIP_STD: Arithmetic on datasets. (line 295) * GAL_ARITHMETIC_OP_SIN: Arithmetic on datasets. (line 169) * GAL_ARITHMETIC_OP_SINH: Arithmetic on datasets. (line 179) * GAL_ARITHMETIC_OP_SIZE: Arithmetic on datasets. (line 467) * GAL_ARITHMETIC_OP_SQRT: Arithmetic on datasets. (line 147) * GAL_ARITHMETIC_OP_STD: Arithmetic on datasets. (line 271) * GAL_ARITHMETIC_OP_STDVAL: Arithmetic on datasets. (line 240) * GAL_ARITHMETIC_OP_STITCH: Arithmetic on datasets. (line 340) * GAL_ARITHMETIC_OP_SUM: Arithmetic on datasets. (line 269) * GAL_ARITHMETIC_OP_SUMVAL: Arithmetic on datasets. (line 238) * GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECB1950: Arithmetic on datasets. (line 506) * GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_ECJ2000: Arithmetic on datasets. (line 507) * GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQB1950: Arithmetic on datasets. (line 504) * GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_EQJ2000: Arithmetic on datasets. (line 505) * GAL_ARITHMETIC_OP_SUPERGALACTIC_TO_GALACTIC: Arithmetic on datasets. (line 508) * GAL_ARITHMETIC_OP_SWAP: Arithmetic on datasets. (line 473) * GAL_ARITHMETIC_OP_TAN: Arithmetic on datasets. (line 171) * GAL_ARITHMETIC_OP_TANH: Arithmetic on datasets. (line 181) * GAL_ARITHMETIC_OP_TO_FLOAT32: Arithmetic on datasets. (line 385) * GAL_ARITHMETIC_OP_TO_FLOAT64: Arithmetic on datasets. (line 386) * GAL_ARITHMETIC_OP_TO_INT16: Arithmetic on datasets. (line 380) * GAL_ARITHMETIC_OP_TO_INT32: Arithmetic on datasets. (line 382) * GAL_ARITHMETIC_OP_TO_INT64: Arithmetic on datasets. (line 384) * GAL_ARITHMETIC_OP_TO_INT8: Arithmetic on datasets. (line 378) * GAL_ARITHMETIC_OP_TO_UINT16: Arithmetic on datasets. (line 379) * GAL_ARITHMETIC_OP_TO_UINT32: Arithmetic on datasets. (line 381) * GAL_ARITHMETIC_OP_TO_UINT64: Arithmetic on datasets. (line 383) * GAL_ARITHMETIC_OP_TO_UINT8: Arithmetic on datasets. (line 377) * GAL_ARITHMETIC_OP_UNIQUE: Arithmetic on datasets. (line 249) * GAL_ARITHMETIC_OP_WHERE: Arithmetic on datasets. (line 131) * gal_arithmetic_operator_string: Arithmetic on datasets. (line 602) * GAL_ARITHMETIC_OPSTR_LOADCOL_FILE: Arithmetic on datasets. (line 442) * GAL_ARITHMETIC_OPSTR_LOADCOL_FILE_LEN: Arithmetic on datasets. (line 445) * GAL_ARITHMETIC_OPSTR_LOADCOL_HDU: Arithmetic on datasets. (line 441) * GAL_ARITHMETIC_OPSTR_LOADCOL_HDU_LEN: Arithmetic on datasets. (line 444) * GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX: Arithmetic on datasets. (line 443) * GAL_ARITHMETIC_OPSTR_LOADCOL_PREFIX_LEN: Arithmetic on datasets. (line 446) * gal_arithmetic_set_operator: Arithmetic on datasets. (line 587) * gal_array_file_recognized: Array input output. (line 28) * gal_array_name_recognized: Array input output. (line 15) * gal_array_name_recognized_multiext: Array input output. (line 21) * gal_array_read: Array input output. (line 37) * gal_array_read_one_ch: Array input output. (line 88) * gal_array_read_one_ch_to_type: Array input output. (line 107) * gal_array_read_to_type: Array input output. (line 80) * gal_binary_connected_adjacency_list: Binary datasets. (line 198) * gal_binary_connected_adjacency_matrix: Binary datasets. (line 161) * gal_binary_connected_components: Binary datasets. (line 125) * gal_binary_connected_indexs(gal_data_t: Binary datasets. (line 150) * gal_binary_dilate: Binary datasets. (line 84) * gal_binary_erode: Binary datasets. (line 62) * gal_binary_holes_fill: Binary datasets. (line 254) * gal_binary_holes_label: Binary datasets. (line 240) * gal_binary_number_neighbors: Binary datasets. (line 114) * gal_binary_open: Binary datasets. (line 99) * GAL_BINARY_TMP_VALUE: Binary datasets. (line 50) * gal_blank_alloc_write: Library blank values. (line 103) * gal_blank_as_string: Library blank values. (line 127) * gal_blank_flag: Library blank values. (line 182) * gal_blank_flag_apply: Library blank values. (line 218) * gal_blank_flag_not: Library blank values. (line 189) * gal_blank_flag_remove: Library blank values. (line 225) * GAL_BLANK_FLOAT32: Library blank values. (line 81) * GAL_BLANK_FLOAT64: Library blank values. (line 85) * gal_blank_initialize: Library blank values. (line 110) * gal_blank_initialize_array: Library blank values. (line 119) * GAL_BLANK_INT: Library blank values. (line 61) * GAL_BLANK_INT16: Library blank values. (line 46) * GAL_BLANK_INT32: Library blank values. (line 52) * GAL_BLANK_INT64: Library blank values. (line 58) * GAL_BLANK_INT8: Library blank values. (line 40) * gal_blank_is: Library blank values. (line 136) * GAL_BLANK_LONG: Library blank values. (line 69) * gal_blank_not_minmax_coords: Library blank values. (line 196) * gal_blank_number: Library blank values. (line 173) * gal_blank_present: Library blank values. (line 148) * gal_blank_remove: Library blank values. (line 245) * gal_blank_remove_realloc: Library blank values. (line 262) * gal_blank_remove_rows: Library blank values. (line 268) * GAL_BLANK_SIZE_T: Library blank values. (line 77) * GAL_BLANK_STRING: Library blank values. (line 89) * gal_blank_trim: Library blank values. (line 209) * GAL_BLANK_UINT: Library blank values. (line 65) * GAL_BLANK_UINT16: Library blank values. (line 43) * GAL_BLANK_UINT32: Library blank values. (line 49) * GAL_BLANK_UINT64: Library blank values. (line 55) * GAL_BLANK_UINT8: Library blank values. (line 37) * GAL_BLANK_ULONG: Library blank values. (line 73) * gal_blank_write: Library blank values. (line 95) * gal_box_border_from_center: Bounding box. (line 76) * gal_box_border_rotate_around_center: Bounding box. (line 85) * gal_box_bound_ellipse: Bounding box. (line 23) * gal_box_bound_ellipse_extent: Bounding box. (line 11) * gal_box_bound_ellipsoid: Bounding box. (line 52) * gal_box_bound_ellipsoid_extent: Bounding box. (line 38) * gal_box_overlap: Bounding box. (line 94) * GAL_COLOR_*: Color functions. (line 21) * GAL_COLOR_DEEPPINK: Color functions. (line 20) * gal_color_id_to_name: Color functions. (line 39) * gal_color_in_rgb: Color functions. (line 44) * GAL_COLOR_INVALID: Color functions. (line 18) * GAL_COLOR_MEDIUMVIOLETRED: Color functions. (line 19) * gal_color_name_to_id: Color functions. (line 33) * GAL_CONFIG_HAVE_FITS_IS_REENTRANT: Configuration information. (line 33) * GAL_CONFIG_HAVE_GNUMAKE_H: Configuration information. (line 95) * GAL_CONFIG_HAVE_GSL_INTERP_STEFFEN: Configuration information. (line 25) * GAL_CONFIG_HAVE_LIBGIT2: Configuration information. (line 78) * GAL_CONFIG_HAVE_PTHREAD_BARRIER: Configuration information. (line 62) * GAL_CONFIG_HAVE_PYTHON: Configuration information. (line 86) * GAL_CONFIG_HAVE_WCSLIB_DIS_H: Configuration information. (line 48) * GAL_CONFIG_HAVE_WCSLIB_MJDREF: Configuration information. (line 52) * GAL_CONFIG_HAVE_WCSLIB_OBSFIX: Configuration information. (line 57) * GAL_CONFIG_HAVE_WCSLIB_VERSION: Configuration information. (line 39) * GAL_CONFIG_SIZEOF_LONG: Configuration information. (line 70) * GAL_CONFIG_SIZEOF_SIZE_T: Configuration information. (line 71) * GAL_CONFIG_VERSION: Configuration information. (line 14) * gal_convolve_spatial: Convolution functions. (line 17) * gal_convolve_spatial_correct_ch_edge: Convolution functions. (line 52) * gal_cosmology_age: Cosmology library. (line 18) * gal_cosmology_angular_distance: Cosmology library. (line 45) * gal_cosmology_comoving_volume: Cosmology library. (line 32) * gal_cosmology_critical_density: Cosmology library. (line 39) * gal_cosmology_distance_modulus: Cosmology library. (line 59) * gal_cosmology_luminosity_distance: Cosmology library. (line 52) * gal_cosmology_proper_distance: Cosmology library. (line 25) * gal_cosmology_to_absolute_mag: Cosmology library. (line 65) * gal_cosmology_velocity_from_z: Cosmology library. (line 74) * gal_cosmology_z_from_velocity: Cosmology library. (line 80) * gal_data_alloc: Dataset allocation. (line 12) * gal_data_alloc_empty: Dataset allocation. (line 62) * gal_data_array_calloc: Arrays of datasets. (line 21) * gal_data_array_free: Arrays of datasets. (line 37) * gal_data_array_ptr_calloc: Arrays of datasets. (line 46) * gal_data_array_ptr_free: Arrays of datasets. (line 54) * gal_data_copy: Copying datasets. (line 21) * gal_data_copy_string_to_number: Copying datasets. (line 72) * gal_data_copy_to_allocated: Copying datasets. (line 52) * gal_data_copy_to_new_type: Copying datasets. (line 29) * gal_data_copy_to_new_type_free: Copying datasets. (line 39) * gal_data_free: Dataset allocation. (line 82) * gal_data_free_contents: Dataset allocation. (line 72) * gal_data_initialize: Dataset allocation. (line 26) * gal_dimension_add_coords: Dimensions. (line 58) * gal_dimension_collapse_mclip_fill_mad: Dimensions. (line 328) * gal_dimension_collapse_mclip_fill_mean: Dimensions. (line 350) * gal_dimension_collapse_mclip_fill_median: Dimensions. (line 372) * gal_dimension_collapse_mclip_fill_number: Dimensions. (line 394) * gal_dimension_collapse_mclip_fill_std: Dimensions. (line 305) * gal_dimension_collapse_mclip_mad: Dimensions. (line 313) * gal_dimension_collapse_mclip_mean: Dimensions. (line 336) * gal_dimension_collapse_mclip_median: Dimensions. (line 358) * gal_dimension_collapse_mclip_number: Dimensions. (line 380) * gal_dimension_collapse_mclip_std: Dimensions. (line 291) * gal_dimension_collapse_mean: Dimensions. (line 135) * gal_dimension_collapse_median: Dimensions. (line 169) * gal_dimension_collapse_minmax: Dimensions. (line 158) * gal_dimension_collapse_number: Dimensions. (line 143) * gal_dimension_collapse_sclip_fill_mad: Dimensions. (line 217) * gal_dimension_collapse_sclip_fill_mean: Dimensions. (line 239) * gal_dimension_collapse_sclip_fill_median: Dimensions. (line 261) * gal_dimension_collapse_sclip_fill_number: Dimensions. (line 283) * gal_dimension_collapse_sclip_fill_std: Dimensions. (line 195) * gal_dimension_collapse_sclip_mad: Dimensions. (line 203) * gal_dimension_collapse_sclip_mean: Dimensions. (line 225) * gal_dimension_collapse_sclip_median: Dimensions. (line 247) * gal_dimension_collapse_sclip_number: Dimensions. (line 269) * gal_dimension_collapse_sclip_std: Dimensions. (line 181) * gal_dimension_collapse_sum: Dimensions. (line 118) * gal_dimension_coord_to_index: Dimensions. (line 67) * gal_dimension_dist_elliptical: Dimensions. (line 101) * gal_dimension_dist_manhattan: Dimensions. (line 87) * gal_dimension_dist_radial: Dimensions. (line 95) * GAL_DIMENSION_FLT_TO_INT: Dimensions. (line 51) * gal_dimension_increment: Dimensions. (line 36) * gal_dimension_index_to_coord: Dimensions. (line 76) * gal_dimension_is_different: Dimensions. (line 28) * GAL_DIMENSION_NEIGHBOR_OP: Dimensions. (line 416) * gal_dimension_num_neighbors: Dimensions. (line 44) * gal_dimension_remove_extra: Dimensions. (line 402) * gal_dimension_total_size: Dimensions. (line 22) * GAL_DS9_COORD_MODE_IMG: SAO DS9 library. (line 15) * GAL_DS9_COORD_MODE_INVALID: SAO DS9 library. (line 17) * GAL_DS9_COORD_MODE_WCS: SAO DS9 library. (line 16) * gal_ds9_reg_read_polygon: SAO DS9 library. (line 23) * GAL_EPS_MARK_COLNAME_COLOR: EPS files. (line 25) * GAL_EPS_MARK_COLNAME_FONT: EPS files. (line 21) * GAL_EPS_MARK_COLNAME_FONTSIZE: EPS files. (line 29) * GAL_EPS_MARK_COLNAME_LINEWIDTH: EPS files. (line 30) * GAL_EPS_MARK_COLNAME_ROTATE: EPS files. (line 28) * GAL_EPS_MARK_COLNAME_SHAPE: EPS files. (line 24) * GAL_EPS_MARK_COLNAME_SIZE1: EPS files. (line 26) * GAL_EPS_MARK_COLNAME_SIZE2: EPS files. (line 27) * GAL_EPS_MARK_COLNAME_TEXT: EPS files. (line 20) * GAL_EPS_MARK_COLNAME_XPIX: EPS files. (line 22) * GAL_EPS_MARK_COLNAME_YPIX: EPS files. (line 23) * GAL_EPS_MARK_DEFAULT_COLOR: EPS files. (line 34) * GAL_EPS_MARK_DEFAULT_FONT: EPS files. (line 40) * GAL_EPS_MARK_DEFAULT_FONTSIZE: EPS files. (line 41) * GAL_EPS_MARK_DEFAULT_LINEWIDTH: EPS files. (line 39) * GAL_EPS_MARK_DEFAULT_ROTATE: EPS files. (line 38) * GAL_EPS_MARK_DEFAULT_SHAPE: EPS files. (line 33) * GAL_EPS_MARK_DEFAULT_SIZE1: EPS files. (line 35) * GAL_EPS_MARK_DEFAULT_SIZE2: EPS files. (line 36) * GAL_EPS_MARK_DEFAULT_SIZE2_ELLIPSE: EPS files. (line 37) * gal_eps_name_is_eps: EPS files. (line 46) * gal_eps_shape_id_to_name: EPS files. (line 76) * gal_eps_shape_name_to_id: EPS files. (line 70) * gal_eps_suffix_is_eps: EPS files. (line 53) * gal_eps_to_pt: EPS files. (line 59) * gal_eps_write: EPS files. (line 81) * gal_fit_1d_linear: Fitting functions. (line 73) * gal_fit_1d_linear_estimate: Fitting functions. (line 129) * gal_fit_1d_linear_no_constant: Fitting functions. (line 103) * gal_fit_1d_polynomial: Fitting functions. (line 147) * gal_fit_1d_polynomial_estimate: Fitting functions. (line 196) * gal_fit_1d_polynomial_robust: Fitting functions. (line 181) * GAL_FIT_INVALID: Fitting functions. (line 13) * GAL_FIT_LINEAR: Fitting functions. (line 14) * GAL_FIT_LINEAR_NO_CONSTANT: Fitting functions. (line 16) * GAL_FIT_LINEAR_NO_CONSTANT_WEIGHTED: Fitting functions. (line 17) * GAL_FIT_LINEAR_WEIGHTED: Fitting functions. (line 15) * gal_fit_name_from_id: Fitting functions. (line 52) * gal_fit_name_robust_from_id: Fitting functions. (line 66) * gal_fit_name_robust_to_id: Fitting functions. (line 59) * gal_fit_name_to_id: Fitting functions. (line 45) * GAL_FIT_POLYNOMIAL: Fitting functions. (line 18) * GAL_FIT_POLYNOMIAL_NUMBER: Fitting functions. (line 20) * GAL_FIT_POLYNOMIAL_WEIGHTED: Fitting functions. (line 19) * GAL_FIT_ROBUST_BISQUARE: Fitting functions. (line 31) * GAL_FIT_ROBUST_CAUCHY: Fitting functions. (line 32) * GAL_FIT_ROBUST_DEFAULT: Fitting functions. (line 30) * GAL_FIT_ROBUST_FAIR: Fitting functions. (line 33) * GAL_FIT_ROBUST_HUBER: Fitting functions. (line 34) * GAL_FIT_ROBUST_INVALID: Fitting functions. (line 29) * GAL_FIT_ROBUST_NUMBER: Fitting functions. (line 37) * GAL_FIT_ROBUST_OLS: Fitting functions. (line 35) * GAL_FIT_ROBUST_WELSCH: Fitting functions. (line 36) * gal_fits_bitpix_to_type: CFITSIO and Gnuastro types. (line 25) * gal_fits_datatype_to_type: CFITSIO and Gnuastro types. (line 49) * gal_fits_file_recognized: FITS macros errors filenames. (line 37) * gal_fits_hdu_datasum: FITS HDUs. (line 24) * gal_fits_hdu_datasum_encoded: FITS HDUs. (line 34) * gal_fits_hdu_datasum_ptr: FITS HDUs. (line 43) * gal_fits_hdu_format: FITS HDUs. (line 50) * gal_fits_hdu_is_healpix: FITS HDUs. (line 59) * gal_fits_hdu_num: FITS HDUs. (line 19) * gal_fits_hdu_open: FITS HDUs. (line 66) * gal_fits_hdu_open_format: FITS HDUs. (line 85) * gal_fits_img_info: FITS arrays. (line 11) * gal_fits_img_info_dim: FITS arrays. (line 22) * gal_fits_img_read: FITS arrays. (line 32) * gal_fits_img_read_kernel: FITS arrays. (line 69) * gal_fits_img_read_to_type: FITS arrays. (line 55) * gal_fits_img_write: FITS arrays. (line 104) * gal_fits_img_write_corr_wcs_str: FITS arrays. (line 133) * gal_fits_img_write_to_ptr: FITS arrays. (line 86) * gal_fits_img_write_to_type: FITS arrays. (line 118) * gal_fits_io_error: FITS macros errors filenames. (line 14) * gal_fits_key_clean_str_value: FITS header keywords. (line 78) * gal_fits_key_date_to_seconds: FITS header keywords. (line 115) * gal_fits_key_date_to_struct_tm: FITS header keywords. (line 90) * gal_fits_key_exists_fptr: FITS header keywords. (line 47) * gal_fits_key_img_blank: FITS header keywords. (line 53) * gal_fits_key_list_add: FITS header keywords. (line 234) * gal_fits_key_list_add_date: FITS header keywords. (line 305) * gal_fits_key_list_add_end: FITS header keywords. (line 262) * gal_fits_key_list_add_git_commit: FITS header keywords. (line 331) * gal_fits_key_list_add_software_versions: FITS header keywords. (line 322) * gal_fits_key_list_fullcomment_add: FITS header keywords. (line 288) * gal_fits_key_list_fullcomment_add_end: FITS header keywords. (line 298) * gal_fits_key_list_reverse: FITS header keywords. (line 340) * gal_fits_key_list_title_add: FITS header keywords. (line 272) * gal_fits_key_list_title_add_end: FITS header keywords. (line 281) * gal_fits_key_read: FITS header keywords. (line 226) * gal_fits_key_read_from_ptr: FITS header keywords. (line 148) * gal_fits_key_write: FITS header keywords. (line 392) * gal_fits_key_write_filename: FITS header keywords. (line 356) * gal_fits_key_write_in_ptr: FITS header keywords. (line 431) * gal_fits_key_write_title_in_ptr: FITS header keywords. (line 345) * gal_fits_key_write_wcsstr: FITS header keywords. (line 381) * GAL_FITS_MAX_NDIM: FITS macros errors filenames. (line 10) * gal_fits_name_is_fits: FITS macros errors filenames. (line 22) * gal_fits_name_save_as_string: FITS macros errors filenames. (line 50) * gal_fits_open_to_write: FITS HDUs. (line 11) * gal_fits_suffix_is_fits: FITS macros errors filenames. (line 30) * gal_fits_tab_format: FITS tables. (line 22) * gal_fits_tab_info: FITS tables. (line 32) * gal_fits_tab_read: FITS tables. (line 54) * gal_fits_tab_size: FITS tables. (line 15) * gal_fits_tab_write: FITS tables. (line 88) * gal_fits_type_to_bin_tform: CFITSIO and Gnuastro types. (line 37) * gal_fits_type_to_bitpix: CFITSIO and Gnuastro types. (line 31) * gal_fits_type_to_datatype: CFITSIO and Gnuastro types. (line 43) * gal_fits_unique_keyvalues: FITS header keywords. (line 451) * gal_fits_with_keyvalue: FITS header keywords. (line 440) * gal_git_describe: Git wrappers. (line 15) * GAL_INTERPOLATE_1D_AKIMA: Interpolation. (line 117) * GAL_INTERPOLATE_1D_AKIMA_PERIODIC: Interpolation. (line 121) * gal_interpolate_1d_blank: Interpolation. (line 237) * GAL_INTERPOLATE_1D_CSPLINE: Interpolation. (line 103) * GAL_INTERPOLATE_1D_CSPLINE_PERIODIC: Interpolation. (line 109) * GAL_INTERPOLATE_1D_INVALID: Interpolation. (line 92) * GAL_INTERPOLATE_1D_LINEAR: Interpolation. (line 94) * gal_interpolate_1d_make_gsl_spline: Interpolation. (line 134) * GAL_INTERPOLATE_1D_POLYNOMIAL: Interpolation. (line 97) * GAL_INTERPOLATE_1D_STEFFEN: Interpolation. (line 125) * gal_interpolate_neighbors: Interpolation. (line 46) * GAL_INTERPOLATE_NEIGHBORS_FUNC_INVALID: Interpolation. (line 39) * GAL_INTERPOLATE_NEIGHBORS_FUNC_MAX: Interpolation. (line 36) * GAL_INTERPOLATE_NEIGHBORS_FUNC_MEAN: Interpolation. (line 37) * GAL_INTERPOLATE_NEIGHBORS_FUNC_MEDIAN: Interpolation. (line 38) * GAL_INTERPOLATE_NEIGHBORS_FUNC_MIN: Interpolation. (line 35) * GAL_INTERPOLATE_NEIGHBORS_METRIC_INVALID: Interpolation. (line 27) * GAL_INTERPOLATE_NEIGHBORS_METRIC_MANHATTAN: Interpolation. (line 26) * GAL_INTERPOLATE_NEIGHBORS_METRIC_RADIAL: Interpolation. (line 25) * gal_jpeg_name_is_jpeg: JPEG files. (line 22) * gal_jpeg_read: JPEG files. (line 36) * gal_jpeg_suffix_is_jpeg: JPEG files. (line 29) * gal_jpeg_write: JPEG files. (line 45) * gal_kdtree_create: K-d tree. (line 70) * gal_kdtree_nearest_neighbour: K-d tree. (line 150) * gal_label_clump_significance: Labeled datasets. (line 151) * gal_label_grow_indexs: Labeled datasets. (line 220) * gal_label_indexs: Labeled datasets. (line 55) * GAL_LABEL_INIT: Labeled datasets. (line 45) * GAL_LABEL_RIVER: Labeled datasets. (line 46) * GAL_LABEL_TMPCHECK: Labeled datasets. (line 47) * gal_label_watershed: Labeled datasets. (line 93) * gal_list_data_add: List of gal_data_t. (line 18) * gal_list_data_add_alloc: List of gal_data_t. (line 36) * gal_list_data_free: List of gal_data_t. (line 109) * gal_list_data_last: List of gal_data_t. (line 104) * gal_list_data_number: List of gal_data_t. (line 99) * gal_list_data_pop: List of gal_data_t. (line 47) * gal_list_data_remove: List of gal_data_t. (line 52) * gal_list_data_reverse: List of gal_data_t. (line 84) * gal_list_data_select_by_id: List of gal_data_t. (line 72) * gal_list_data_select_by_name: List of gal_data_t. (line 61) * gal_list_data_to_array_ptr: List of gal_data_t. (line 90) * gal_list_dosizet_add: Doubly linked ordered list of size_t. (line 40) * gal_list_dosizet_free: Doubly linked ordered list of size_t. (line 72) * gal_list_dosizet_pop_smallest: Doubly linked ordered list of size_t. (line 48) * gal_list_dosizet_print: Doubly linked ordered list of size_t. (line 58) * gal_list_dosizet_to_sizet: Doubly linked ordered list of size_t. (line 65) * gal_list_f32_add: List of float. (line 22) * gal_list_f32_free: List of float. (line 86) * gal_list_f32_last: List of float. (line 46) * gal_list_f32_number: List of float. (line 41) * gal_list_f32_pop: List of float. (line 33) * gal_list_f32_print: List of float. (line 51) * gal_list_f32_reverse: List of float. (line 68) * gal_list_f32_to_array: List of float. (line 74) * gal_list_f64_add: List of double. (line 24) * gal_list_f64_free: List of double. (line 96) * gal_list_f64_last: List of double. (line 48) * gal_list_f64_number: List of double. (line 43) * gal_list_f64_pop: List of double. (line 35) * gal_list_f64_print: List of double. (line 53) * gal_list_f64_reverse: List of double. (line 70) * gal_list_f64_to_array: List of double. (line 76) * gal_list_f64_to_data: List of double. (line 88) * gal_list_i32_add: List of int32_t. (line 23) * gal_list_i32_free: List of int32_t. (line 88) * gal_list_i32_last: List of int32_t. (line 48) * gal_list_i32_number: List of int32_t. (line 43) * gal_list_i32_pop: List of int32_t. (line 35) * gal_list_i32_print: List of int32_t. (line 53) * gal_list_i32_reverse: List of int32_t. (line 70) * gal_list_i32_to_array: List of int32_t. (line 76) * gal_list_osizet_add: Ordered list of size_t. (line 28) * gal_list_osizet_pop: Ordered list of size_t. (line 39) * gal_list_osizet_to_sizet_free: Ordered list of size_t. (line 49) * gal_list_sizet_add: List of size_t. (line 34) * gal_list_sizet_free: List of size_t. (line 98) * gal_list_sizet_last: List of size_t. (line 58) * gal_list_sizet_number: List of size_t. (line 53) * gal_list_sizet_pop: List of size_t. (line 45) * gal_list_sizet_print: List of size_t. (line 63) * gal_list_sizet_reverse: List of size_t. (line 80) * gal_list_sizet_to_array: List of size_t. (line 86) * gal_list_str_add: List of strings. (line 20) * gal_list_str_cat: List of strings. (line 93) * gal_list_str_extract: List of strings. (line 81) * gal_list_str_free: List of strings. (line 75) * gal_list_str_last: List of strings. (line 49) * gal_list_str_number: List of strings. (line 44) * gal_list_str_pop: List of strings. (line 36) * gal_list_str_print: List of strings. (line 54) * gal_list_str_reverse: List of strings. (line 69) * gal_list_void_add: List of void. (line 31) * gal_list_void_free: List of void. (line 65) * gal_list_void_last: List of void. (line 54) * gal_list_void_number: List of void. (line 49) * gal_list_void_pop: List of void. (line 42) * gal_list_void_reverse: List of void. (line 59) * gal_match_kdtree: Matching. (line 110) * gal_match_sort_based: Matching. (line 87) * gal_pdf_name_is_pdf: PDF files. (line 15) * gal_pdf_suffix_is_pdf: PDF files. (line 22) * gal_pdf_write: PDF files. (line 28) * gal_permutation_apply: Permutations. (line 43) * gal_permutation_apply_inverse: Permutations. (line 49) * gal_permutation_apply_onlydim0: Tile grid. (line 205) * gal_permutation_check: Permutations. (line 37) * gal_permutation_transpose_2d: Permutations. (line 56) * gal_pointer_allocate: Pointers. (line 39) * gal_pointer_allocate_ram_or_mmap: Pointers. (line 74) * gal_pointer_increment: Pointers. (line 16) * gal_pointer_mmap_allocate: Pointers. (line 87) * gal_pointer_mmap_free: Pointers. (line 113) * gal_pointer_num_between: Pointers. (line 31) * gal_polygon_area_flat: Polygons. (line 89) * gal_polygon_area_sky: Polygons. (line 97) * gal_polygon_clip: Polygons. (line 181) * gal_polygon_is_convex: Polygons. (line 82) * gal_polygon_is_counterclockwise: Polygons. (line 158) * gal_polygon_is_inside: Polygons. (line 130) * gal_polygon_is_inside_convex: Polygons. (line 143) * GAL_POLYGON_MAX_CORNERS: Polygons. (line 29) * gal_polygon_ppropin: Polygons. (line 152) * GAL_POLYGON_ROUND_ERR: Polygons. (line 32) * gal_polygon_to_counterclockwise: Polygons. (line 171) * gal_polygon_vertices_sort: Polygons. (line 216) * gal_polygon_vertices_sort_convex: Polygons. (line 37) * gal_pool_max: Pooling functions. (line 13) * gal_pool_mean: Pooling functions. (line 34) * gal_pool_median: Pooling functions. (line 41) * gal_pool_min: Pooling functions. (line 20) * gal_pool_sum: Pooling functions. (line 27) * gal_python_type_from_numpy: Python interface. (line 55) * gal_python_type_to_numpy: Python interface. (line 49) * gal_qsort_index_multi_d: Qsort functions. (line 105) * gal_qsort_index_multi_i: Qsort functions. (line 121) * gal_qsort_index_single: Qsort functions. (line 27) * gal_qsort_index_single_TYPE_d: Qsort functions. (line 69) * gal_qsort_index_single_TYPE_i: Qsort functions. (line 98) * gal_qsort_TYPE_d: Qsort functions. (line 51) * gal_qsort_TYPE_i: Qsort functions. (line 60) * GAL_SPECLINES_Al_III_1854: Spectral lines library. (line 44) * GAL_SPECLINES_Al_III_1862: Spectral lines library. (line 45) * GAL_SPECLINES_ANGSTROM_*: Spectral lines library. (line 261) * GAL_SPECLINES_Ar_I_1066: Spectral lines library. (line 23) * GAL_SPECLINES_Ar_I_7868: Spectral lines library. (line 205) * GAL_SPECLINES_Ar_III_7135: Spectral lines library. (line 187) * GAL_SPECLINES_Ar_III_7751: Spectral lines library. (line 203) * GAL_SPECLINES_Ar_IV_2853: Spectral lines library. (line 59) * GAL_SPECLINES_Ar_IV_2868: Spectral lines library. (line 60) * GAL_SPECLINES_Ar_IV_4711: Spectral lines library. (line 133) * GAL_SPECLINES_Ar_IV_4740: Spectral lines library. (line 134) * GAL_SPECLINES_Ar_IV_7170: Spectral lines library. (line 189) * GAL_SPECLINES_Ar_IV_7237: Spectral lines library. (line 192) * GAL_SPECLINES_Ar_IV_7262: Spectral lines library. (line 194) * GAL_SPECLINES_Ar_V: Spectral lines library. (line 185) * GAL_SPECLINES_Ar_XIV: Spectral lines library. (line 112) * GAL_SPECLINES_C_I_9824: Spectral lines library. (line 234) * GAL_SPECLINES_C_I_9850: Spectral lines library. (line 235) * GAL_SPECLINES_C_II_1334: Spectral lines library. (line 30) * GAL_SPECLINES_C_II_1335: Spectral lines library. (line 31) * GAL_SPECLINES_C_II_2323: Spectral lines library. (line 50) * GAL_SPECLINES_C_II_2324: Spectral lines library. (line 51) * GAL_SPECLINES_C_II_7236: Spectral lines library. (line 191) * GAL_SPECLINES_C_III_1908: Spectral lines library. (line 47) * GAL_SPECLINES_C_III_4647: Spectral lines library. (line 128) * GAL_SPECLINES_C_III_4650: Spectral lines library. (line 129) * GAL_SPECLINES_C_III_5651: Spectral lines library. (line 130) * GAL_SPECLINES_C_III_5697: Spectral lines library. (line 164) * GAL_SPECLINES_C_III_977: Spectral lines library. (line 16) * GAL_SPECLINES_C_IV_1548: Spectral lines library. (line 37) * GAL_SPECLINES_C_IV_1550: Spectral lines library. (line 38) * GAL_SPECLINES_C_IV_5801: Spectral lines library. (line 167) * GAL_SPECLINES_C_IV_5811: Spectral lines library. (line 168) * GAL_SPECLINES_Ca_II_8498: Spectral lines library. (line 214) * GAL_SPECLINES_Ca_II_8542: Spectral lines library. (line 216) * GAL_SPECLINES_Ca_II_8662: Spectral lines library. (line 221) * GAL_SPECLINES_Ca_V: Spectral lines library. (line 155) * GAL_SPECLINES_Cl_II: Spectral lines library. (line 218) * GAL_SPECLINES_Cl_III_5517: Spectral lines library. (line 160) * GAL_SPECLINES_Cl_III_5537: Spectral lines library. (line 161) * GAL_SPECLINES_Fe_II_4178: Spectral lines library. (line 103) * GAL_SPECLINES_Fe_II_4233: Spectral lines library. (line 105) * GAL_SPECLINES_Fe_II_4287: Spectral lines library. (line 107) * GAL_SPECLINES_Fe_II_4304: Spectral lines library. (line 108) * GAL_SPECLINES_Fe_II_4416: Spectral lines library. (line 114) * GAL_SPECLINES_Fe_II_4452: Spectral lines library. (line 115) * GAL_SPECLINES_Fe_II_4489: Spectral lines library. (line 117) * GAL_SPECLINES_Fe_II_4491: Spectral lines library. (line 118) * GAL_SPECLINES_Fe_II_4522: Spectral lines library. (line 120) * GAL_SPECLINES_Fe_II_4555: Spectral lines library. (line 121) * GAL_SPECLINES_Fe_II_4582: Spectral lines library. (line 122) * GAL_SPECLINES_Fe_II_4583: Spectral lines library. (line 123) * GAL_SPECLINES_Fe_II_4629: Spectral lines library. (line 124) * GAL_SPECLINES_Fe_II_4923: Spectral lines library. (line 138) * GAL_SPECLINES_Fe_II_5018: Spectral lines library. (line 141) * GAL_SPECLINES_Fe_II_5169: Spectral lines library. (line 145) * GAL_SPECLINES_Fe_II_5197: Spectral lines library. (line 147) * GAL_SPECLINES_Fe_II_5234: Spectral lines library. (line 149) * GAL_SPECLINES_Fe_II_5276: Spectral lines library. (line 152) * GAL_SPECLINES_Fe_II_5316_6: Spectral lines library. (line 156) * GAL_SPECLINES_Fe_II_5316_7: Spectral lines library. (line 157) * GAL_SPECLINES_Fe_II_6369: Spectral lines library. (line 176) * GAL_SPECLINES_Fe_II_6516: Spectral lines library. (line 178) * GAL_SPECLINES_Fe_II_7155: Spectral lines library. (line 188) * GAL_SPECLINES_Fe_II_7172: Spectral lines library. (line 190) * GAL_SPECLINES_Fe_II_7452: Spectral lines library. (line 200) * GAL_SPECLINES_Fe_II_8616: Spectral lines library. (line 220) * GAL_SPECLINES_Fe_II_8891: Spectral lines library. (line 228) * GAL_SPECLINES_Fe_III_4658: Spectral lines library. (line 131) * GAL_SPECLINES_Fe_III_5084: Spectral lines library. (line 142) * GAL_SPECLINES_Fe_III_5270: Spectral lines library. (line 151) * GAL_SPECLINES_Fe_IV_2829: Spectral lines library. (line 57) * GAL_SPECLINES_Fe_IV_2835: Spectral lines library. (line 58) * GAL_SPECLINES_Fe_IV_4903: Spectral lines library. (line 137) * GAL_SPECLINES_Fe_IV_5236: Spectral lines library. (line 150) * GAL_SPECLINES_Fe_V_3839: Spectral lines library. (line 89) * GAL_SPECLINES_Fe_V_3891: Spectral lines library. (line 93) * GAL_SPECLINES_Fe_V_3911: Spectral lines library. (line 94) * GAL_SPECLINES_Fe_V_4071: Spectral lines library. (line 99) * GAL_SPECLINES_Fe_V_4180: Spectral lines library. (line 104) * GAL_SPECLINES_Fe_V_4227: Spectral lines library. (line 106) * GAL_SPECLINES_Fe_VI_3662: Spectral lines library. (line 74) * GAL_SPECLINES_Fe_VI_5145: Spectral lines library. (line 143) * GAL_SPECLINES_Fe_VI_5176: Spectral lines library. (line 146) * GAL_SPECLINES_Fe_VI_5335: Spectral lines library. (line 158) * GAL_SPECLINES_Fe_VI_5424: Spectral lines library. (line 159) * GAL_SPECLINES_Fe_VI_5637: Spectral lines library. (line 162) * GAL_SPECLINES_Fe_VI_5677: Spectral lines library. (line 163) * GAL_SPECLINES_Fe_VII_3586: Spectral lines library. (line 73) * GAL_SPECLINES_Fe_VII_3758: Spectral lines library. (line 85) * GAL_SPECLINES_Fe_VII_4893: Spectral lines library. (line 136) * GAL_SPECLINES_Fe_VII_5158: Spectral lines library. (line 144) * GAL_SPECLINES_Fe_VII_5276: Spectral lines library. (line 153) * GAL_SPECLINES_Fe_VII_5720: Spectral lines library. (line 165) * GAL_SPECLINES_Fe_VII_6087: Spectral lines library. (line 171) * GAL_SPECLINES_Fe_X: Spectral lines library. (line 177) * GAL_SPECLINES_Fe_XI_2648: Spectral lines library. (line 52) * GAL_SPECLINES_Fe_XI_7891: Spectral lines library. (line 207) * GAL_SPECLINES_Fe_XIII: Spectral lines library. (line 243) * GAL_SPECLINES_Fe_XIV: Spectral lines library. (line 154) * GAL_SPECLINES_H_10: Spectral lines library. (line 87) * GAL_SPECLINES_H_11: Spectral lines library. (line 86) * GAL_SPECLINES_H_12: Spectral lines library. (line 84) * GAL_SPECLINES_H_13: Spectral lines library. (line 83) * GAL_SPECLINES_H_14: Spectral lines library. (line 80) * GAL_SPECLINES_H_15: Spectral lines library. (line 79) * GAL_SPECLINES_H_16: Spectral lines library. (line 78) * GAL_SPECLINES_H_17: Spectral lines library. (line 77) * GAL_SPECLINES_H_18: Spectral lines library. (line 76) * GAL_SPECLINES_H_19: Spectral lines library. (line 75) * GAL_SPECLINES_H_8: Spectral lines library. (line 92) * GAL_SPECLINES_H_9: Spectral lines library. (line 88) * GAL_SPECLINES_H_alpha: Spectral lines library. (line 180) * GAL_SPECLINES_H_beta: Spectral lines library. (line 135) * GAL_SPECLINES_H_delta: Spectral lines library. (line 101) * GAL_SPECLINES_H_epsilon: Spectral lines library. (line 96) * GAL_SPECLINES_H_gamma: Spectral lines library. (line 110) * GAL_SPECLINES_He_I_10027: Spectral lines library. (line 237) * GAL_SPECLINES_He_I_10031: Spectral lines library. (line 238) * GAL_SPECLINES_He_I_10830: Spectral lines library. (line 244) * GAL_SPECLINES_He_I_2945: Spectral lines library. (line 62) * GAL_SPECLINES_He_I_3187: Spectral lines library. (line 64) * GAL_SPECLINES_He_I_3487: Spectral lines library. (line 72) * GAL_SPECLINES_He_I_3888: Spectral lines library. (line 91) * GAL_SPECLINES_He_I_4026: Spectral lines library. (line 97) * GAL_SPECLINES_He_I_4143: Spectral lines library. (line 102) * GAL_SPECLINES_He_I_4471: Spectral lines library. (line 116) * GAL_SPECLINES_He_I_5875: Spectral lines library. (line 169) * GAL_SPECLINES_He_I_7065: Spectral lines library. (line 186) * GAL_SPECLINES_He_I_7281: Spectral lines library. (line 195) * GAL_SPECLINES_He_I_7816: Spectral lines library. (line 204) * GAL_SPECLINES_He_II_1640: Spectral lines library. (line 39) * GAL_SPECLINES_He_II_2733: Spectral lines library. (line 53) * GAL_SPECLINES_He_II_3203: Spectral lines library. (line 65) * GAL_SPECLINES_He_II_4685: Spectral lines library. (line 132) * GAL_SPECLINES_He_II_8236: Spectral lines library. (line 208) * GAL_SPECLINES_INVALID: Spectral lines library. (line 10) * gal_speclines_line_angstrom: Spectral lines library. (line 285) * gal_speclines_line_code: Spectral lines library. (line 278) * gal_speclines_line_name: Spectral lines library. (line 271) * gal_speclines_line_redshift: Spectral lines library. (line 290) * gal_speclines_line_redshift_code: Spectral lines library. (line 296) * GAL_SPECLINES_Ly_alpha: Spectral lines library. (line 24) * GAL_SPECLINES_Ly_beta: Spectral lines library. (line 20) * GAL_SPECLINES_Ly_delta: Spectral lines library. (line 14) * GAL_SPECLINES_Ly_epsilon: Spectral lines library. (line 13) * GAL_SPECLINES_Ly_gamma: Spectral lines library. (line 15) * GAL_SPECLINES_Mg_II_2795: Spectral lines library. (line 55) * GAL_SPECLINES_Mg_II_2802: Spectral lines library. (line 56) * GAL_SPECLINES_Mg_V_2782: Spectral lines library. (line 54) * GAL_SPECLINES_Mg_V_2928: Spectral lines library. (line 61) * GAL_SPECLINES_N_I_3466_4: Spectral lines library. (line 70) * GAL_SPECLINES_N_I_3466_5: Spectral lines library. (line 71) * GAL_SPECLINES_N_I_5200: Spectral lines library. (line 148) * GAL_SPECLINES_N_I_7468: Spectral lines library. (line 201) * GAL_SPECLINES_N_I_8680: Spectral lines library. (line 223) * GAL_SPECLINES_N_I_8703: Spectral lines library. (line 224) * GAL_SPECLINES_N_I_8711: Spectral lines library. (line 225) * GAL_SPECLINES_N_II_2142: Spectral lines library. (line 48) * GAL_SPECLINES_N_II_5754: Spectral lines library. (line 166) * GAL_SPECLINES_N_II_6548: Spectral lines library. (line 179) * GAL_SPECLINES_N_II_6583: Spectral lines library. (line 181) * GAL_SPECLINES_N_III_1746: Spectral lines library. (line 42) * GAL_SPECLINES_N_III_1748: Spectral lines library. (line 43) * GAL_SPECLINES_N_III_4510: Spectral lines library. (line 119) * GAL_SPECLINES_N_III_4634: Spectral lines library. (line 125) * GAL_SPECLINES_N_III_4640: Spectral lines library. (line 126) * GAL_SPECLINES_N_III_4641: Spectral lines library. (line 127) * GAL_SPECLINES_N_III_989: Spectral lines library. (line 17) * GAL_SPECLINES_N_III_991_51: Spectral lines library. (line 18) * GAL_SPECLINES_N_III_991_57: Spectral lines library. (line 19) * GAL_SPECLINES_N_IV_1486: Spectral lines library. (line 36) * GAL_SPECLINES_N_V_1238: Spectral lines library. (line 25) * GAL_SPECLINES_N_V_1242: Spectral lines library. (line 26) * GAL_SPECLINES_NAME_*: Spectral lines library. (line 265) * GAL_SPECLINES_Ne_III_3868: Spectral lines library. (line 90) * GAL_SPECLINES_Ne_III_3967: Spectral lines library. (line 95) * GAL_SPECLINES_Ne_V_3345: Spectral lines library. (line 67) * GAL_SPECLINES_Ne_V_3425: Spectral lines library. (line 68) * GAL_SPECLINES_Ne_VIII_770: Spectral lines library. (line 11) * GAL_SPECLINES_Ne_VIII_780: Spectral lines library. (line 12) * GAL_SPECLINES_Ni_II_7377: Spectral lines library. (line 198) * GAL_SPECLINES_Ni_II_7411: Spectral lines library. (line 199) * GAL_SPECLINES_Ni_III: Spectral lines library. (line 206) * GAL_SPECLINES_NUMBER: Spectral lines library. (line 246) * GAL_SPECLINES_O_I_1302: Spectral lines library. (line 29) * GAL_SPECLINES_O_I_6046: Spectral lines library. (line 170) * GAL_SPECLINES_O_I_6300: Spectral lines library. (line 172) * GAL_SPECLINES_O_I_6363: Spectral lines library. (line 175) * GAL_SPECLINES_O_I_7002: Spectral lines library. (line 184) * GAL_SPECLINES_O_I_7254: Spectral lines library. (line 193) * GAL_SPECLINES_O_I_8446: Spectral lines library. (line 212) * GAL_SPECLINES_O_II_3726: Spectral lines library. (line 81) * GAL_SPECLINES_O_II_3728: Spectral lines library. (line 82) * GAL_SPECLINES_O_II_4317: Spectral lines library. (line 109) * GAL_SPECLINES_O_II_4414: Spectral lines library. (line 113) * GAL_SPECLINES_O_II_7319: Spectral lines library. (line 196) * GAL_SPECLINES_O_II_7330: Spectral lines library. (line 197) * GAL_SPECLINES_O_III_1660: Spectral lines library. (line 40) * GAL_SPECLINES_O_III_1666: Spectral lines library. (line 41) * GAL_SPECLINES_O_III_2320: Spectral lines library. (line 49) * GAL_SPECLINES_O_III_3132: Spectral lines library. (line 63) * GAL_SPECLINES_O_III_3312: Spectral lines library. (line 66) * GAL_SPECLINES_O_III_3444: Spectral lines library. (line 69) * GAL_SPECLINES_O_III_4363: Spectral lines library. (line 111) * GAL_SPECLINES_O_III_4958: Spectral lines library. (line 139) * GAL_SPECLINES_O_III_5006: Spectral lines library. (line 140) * GAL_SPECLINES_O_IV_1397: Spectral lines library. (line 33) * GAL_SPECLINES_O_IV_1399: Spectral lines library. (line 34) * GAL_SPECLINES_O_VI_1031: Spectral lines library. (line 21) * GAL_SPECLINES_O_VI_1037: Spectral lines library. (line 22) * GAL_SPECLINES_Pa_10: Spectral lines library. (line 229) * GAL_SPECLINES_Pa_11: Spectral lines library. (line 227) * GAL_SPECLINES_Pa_12: Spectral lines library. (line 226) * GAL_SPECLINES_Pa_13: Spectral lines library. (line 222) * GAL_SPECLINES_Pa_14: Spectral lines library. (line 219) * GAL_SPECLINES_Pa_15: Spectral lines library. (line 217) * GAL_SPECLINES_Pa_16: Spectral lines library. (line 215) * GAL_SPECLINES_Pa_17: Spectral lines library. (line 213) * GAL_SPECLINES_Pa_18: Spectral lines library. (line 211) * GAL_SPECLINES_Pa_19: Spectral lines library. (line 210) * GAL_SPECLINES_Pa_20: Spectral lines library. (line 209) * GAL_SPECLINES_Pa_9: Spectral lines library. (line 231) * GAL_SPECLINES_Pa_delta: Spectral lines library. (line 239) * GAL_SPECLINES_Pa_epsilon: Spectral lines library. (line 233) * GAL_SPECLINES_Pa_gamma: Spectral lines library. (line 245) * GAL_SPECLINES_S_II_10286: Spectral lines library. (line 240) * GAL_SPECLINES_S_II_10320: Spectral lines library. (line 241) * GAL_SPECLINES_S_II_10336: Spectral lines library. (line 242) * GAL_SPECLINES_S_II_4068: Spectral lines library. (line 98) * GAL_SPECLINES_S_II_4076: Spectral lines library. (line 100) * GAL_SPECLINES_S_II_6716: Spectral lines library. (line 182) * GAL_SPECLINES_S_II_6730: Spectral lines library. (line 183) * GAL_SPECLINES_S_III_6312: Spectral lines library. (line 173) * GAL_SPECLINES_S_III_9068: Spectral lines library. (line 230) * GAL_SPECLINES_S_III_9531: Spectral lines library. (line 232) * GAL_SPECLINES_S_VIII: Spectral lines library. (line 236) * GAL_SPECLINES_S_XII: Spectral lines library. (line 202) * GAL_SPECLINES_Si_II_1260: Spectral lines library. (line 27) * GAL_SPECLINES_Si_II_1264: Spectral lines library. (line 28) * GAL_SPECLINES_Si_II_6347: Spectral lines library. (line 174) * GAL_SPECLINES_Si_III: Spectral lines library. (line 46) * GAL_SPECLINES_Si_IV_1393: Spectral lines library. (line 32) * GAL_SPECLINES_Si_IV_1402: Spectral lines library. (line 35) * GAL_STATISTICS_BINS_INVALID: Statistical operations. (line 26) * GAL_STATISTICS_BINS_IRREGULAR: Statistical operations. (line 28) * GAL_STATISTICS_BINS_REGULAR: Statistical operations. (line 27) * gal_statistics_cfp: Statistical operations. (line 420) * gal_statistics_clip_mad: Statistical operations. (line 489) * GAL_STATISTICS_CLIP_OUTCOL_MAD: Statistical operations. (line 33) * GAL_STATISTICS_CLIP_OUTCOL_MEAN: Statistical operations. (line 34) * GAL_STATISTICS_CLIP_OUTCOL_MEDIAN: Statistical operations. (line 35) * GAL_STATISTICS_CLIP_OUTCOL_NUMBER_CLIPS: Statistical operations. (line 37) * GAL_STATISTICS_CLIP_OUTCOL_NUMBER_USED: Statistical operations. (line 36) * GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MAD: Statistical operations. (line 42) * GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_MEAN: Statistical operations. (line 43) * GAL_STATISTICS_CLIP_OUTCOL_OPTIONAL_STD: Statistical operations. (line 41) * GAL_STATISTICS_CLIP_OUTCOL_STD: Statistical operations. (line 32) * gal_statistics_clip_sigma: Statistical operations. (line 441) * gal_statistics_has_negative: Statistical operations. (line 210) * gal_statistics_histogram: Statistical operations. (line 371) * gal_statistics_histogram2d: Statistical operations. (line 397) * gal_statistics_is_sorted: Statistical operations. (line 258) * gal_statistics_mad: Statistical operations. (line 129) * gal_statistics_maximum: Statistical operations. (line 60) * gal_statistics_mean: Statistical operations. (line 73) * gal_statistics_mean_std: Statistical operations. (line 85) * gal_statistics_median: Statistical operations. (line 114) * gal_statistics_median_mad: Statistical operations. (line 142) * gal_statistics_minimum: Statistical operations. (line 53) * gal_statistics_mode: Statistical operations. (line 218) * GAL_STATISTICS_MODE_GOOD_SYM: Statistical operations. (line 20) * gal_statistics_mode_mirror_plots: Statistical operations. (line 242) * gal_statistics_no_blank_sorted: Statistical operations. (line 297) * gal_statistics_number: Statistical operations. (line 47) * gal_statistics_outlier_bydistance: Statistical operations. (line 502) * gal_statistics_outlier_flat_cfp: Statistical operations. (line 557) * gal_statistics_quantile: Statistical operations. (line 161) * gal_statistics_quantile_function: Statistical operations. (line 180) * gal_statistics_quantile_function_index: Statistical operations. (line 170) * gal_statistics_quantile_index: Statistical operations. (line 155) * gal_statistics_regular_bins: Statistical operations. (line 325) * GAL_STATISTICS_SIG_CLIP_MAX_CONVERGE: Statistical operations. (line 15) * gal_statistics_sort_decreasing: Statistical operations. (line 291) * gal_statistics_sort_increasing: Statistical operations. (line 285) * gal_statistics_std: Statistical operations. (line 79) * gal_statistics_std_from_sums: Statistical operations. (line 98) * gal_statistics_sum: Statistical operations. (line 67) * gal_statistics_unique: Statistical operations. (line 199) * gal_table_col_vector_extract: Table input output. (line 290) * gal_table_cols_to_vector: Table input output. (line 299) * gal_table_comments_add_intro: Table input output. (line 226) * GAL_TABLE_DEF_PRECISION_DBL: Table input output. (line 30) * GAL_TABLE_DEF_PRECISION_FLT: Table input output. (line 29) * GAL_TABLE_DEF_PRECISION_INT: Table input output. (line 28) * GAL_TABLE_DEF_WIDTH_DBL: Table input output. (line 27) * GAL_TABLE_DEF_WIDTH_FLT: Table input output. (line 26) * GAL_TABLE_DEF_WIDTH_INT: Table input output. (line 24) * GAL_TABLE_DEF_WIDTH_LINT: Table input output. (line 25) * GAL_TABLE_DEF_WIDTH_STR: Table input output. (line 23) * GAL_TABLE_DISPLAY_FMT_DECIMAL: Table input output. (line 39) * GAL_TABLE_DISPLAY_FMT_EXP: Table input output. (line 44) * GAL_TABLE_DISPLAY_FMT_FIXED: Table input output. (line 43) * GAL_TABLE_DISPLAY_FMT_GENERAL: Table input output. (line 45) * GAL_TABLE_DISPLAY_FMT_HEX: Table input output. (line 42) * GAL_TABLE_DISPLAY_FMT_OCTAL: Table input output. (line 41) * GAL_TABLE_DISPLAY_FMT_STRING: Table input output. (line 38) * GAL_TABLE_DISPLAY_FMT_UDECIMAL: Table input output. (line 40) * gal_table_displayflt_from_str: Table input output. (line 82) * gal_table_displayflt_to_str: Table input output. (line 89) * GAL_TABLE_FORMAT_AFITS: Table input output. (line 67) * GAL_TABLE_FORMAT_BFITS: Table input output. (line 68) * GAL_TABLE_FORMAT_INVALID: Table input output. (line 65) * GAL_TABLE_FORMAT_TXT: Table input output. (line 66) * gal_table_info: Table input output. (line 97) * gal_table_list_of_indexs: Table input output. (line 215) * gal_table_print_info: Table input output. (line 151) * gal_table_read: Table input output. (line 161) * GAL_TABLE_SEARCH_COMMENT: Table input output. (line 76) * GAL_TABLE_SEARCH_INVALID: Table input output. (line 73) * GAL_TABLE_SEARCH_NAME: Table input output. (line 74) * GAL_TABLE_SEARCH_UNIT: Table input output. (line 75) * gal_table_write: Table input output. (line 243) * gal_table_write_log: Table input output. (line 279) * gal_threads_attr_barrier_init: Gnuastro's thread related functions. (line 69) * gal_threads_dist_in_threads: Gnuastro's thread related functions. (line 82) * gal_threads_number: Gnuastro's thread related functions. (line 40) * gal_threads_spin_off: Gnuastro's thread related functions. (line 49) * gal_tiff_dir_string_read: TIFF files. (line 37) * gal_tiff_name_is_tiff: TIFF files. (line 24) * gal_tiff_read: TIFF files. (line 44) * gal_tiff_suffix_is_tiff: TIFF files. (line 31) * gal_tiff_write: TIFF files. (line 53) * gal_tile_block: Independent tiles. (line 78) * gal_tile_block_blank_flag: Independent tiles. (line 161) * gal_tile_block_check_tiles: Independent tiles. (line 139) * gal_tile_block_increment: Independent tiles. (line 88) * gal_tile_block_relative_to_other: Independent tiles. (line 152) * gal_tile_block_write_const_value: Independent tiles. (line 104) * gal_tile_full: Tile grid. (line 51) * gal_tile_full_free_contents: Tile grid. (line 250) * gal_tile_full_id_from_coord: Tile grid. (line 241) * gal_tile_full_permutation: Tile grid. (line 152) * gal_tile_full_sanity_check: Tile grid. (line 117) * gal_tile_full_two_layers: Tile grid. (line 126) * gal_tile_full_values_smooth: Tile grid. (line 230) * gal_tile_full_values_write: Tile grid. (line 214) * GAL_TILE_PARSE_OPERATE: Independent tiles. (line 169) * gal_tile_series_from_minmax: Independent tiles. (line 57) * gal_tile_start_coord: Independent tiles. (line 14) * gal_tile_start_end_coord: Independent tiles. (line 21) * gal_tile_start_end_ind_inclusive: Independent tiles. (line 40) * gal_txt_contains_string: Text files. (line 51) * gal_txt_image_read: Text files. (line 111) * gal_txt_line_stat: Text files. (line 34) * GAL_TXT_LINESTAT_BLANK: Text files. (line 25) * GAL_TXT_LINESTAT_COMMENT: Text files. (line 26) * GAL_TXT_LINESTAT_DATAROW: Text files. (line 27) * GAL_TXT_LINESTAT_INVALID: Text files. (line 24) * gal_txt_read_to_list: Text files. (line 155) * gal_txt_stdin_read: Text files. (line 129) * gal_txt_table_info: Text files. (line 60) * gal_txt_table_read: Text files. (line 86) * gal_txt_trim_space: Text files. (line 41) * gal_txt_write: Text files. (line 164) * GAL_TYPE_BIT: Library data types. (line 44) * gal_type_bit_string: Library data types. (line 204) * GAL_TYPE_COMPLEX32: Library data types. (line 109) * GAL_TYPE_COMPLEX64: Library data types. (line 114) * GAL_TYPE_FLOAT32: Library data types. (line 101) * GAL_TYPE_FLOAT64: Library data types. (line 105) * gal_type_from_name: Library data types. (line 149) * gal_type_from_string: Library data types. (line 244) * GAL_TYPE_INT: Library data types. (line 80) * GAL_TYPE_INT16: Library data types. (line 60) * GAL_TYPE_INT32: Library data types. (line 68) * GAL_TYPE_INT64: Library data types. (line 76) * GAL_TYPE_INT8: Library data types. (line 52) * GAL_TYPE_INVALID: Library data types. (line 40) * gal_type_is_int: Library data types. (line 188) * gal_type_is_list: Library data types. (line 193) * GAL_TYPE_LONG: Library data types. (line 93) * gal_type_max: Library data types. (line 173) * gal_type_min: Library data types. (line 158) * gal_type_name: Library data types. (line 137) * gal_type_out: Library data types. (line 198) * GAL_TYPE_SIZE_T: Library data types. (line 97) * gal_type_sizeof: Library data types. (line 130) * GAL_TYPE_STRING: Library data types. (line 119) * gal_type_string_to_number: Library data types. (line 281) * GAL_TYPE_STRLL: Library data types. (line 122) * gal_type_to_string: Library data types. (line 226) * GAL_TYPE_UINT: Library data types. (line 84) * GAL_TYPE_UINT16: Library data types. (line 56) * GAL_TYPE_UINT32: Library data types. (line 64) * GAL_TYPE_UINT64: Library data types. (line 72) * GAL_TYPE_UINT8: Library data types. (line 48) * GAL_TYPE_ULONG: Library data types. (line 88) * gal_units_au_to_ly: Unit conversion library. (line 155) * gal_units_au_to_pc: Unit conversion library. (line 106) * gal_units_counts_to_jy: Unit conversion library. (line 100) * gal_units_counts_to_mag: Unit conversion library. (line 57) * gal_units_counts_to_nanomaggy: Unit conversion library. (line 113) * gal_units_counts_to_sb: Unit conversion library. (line 83) * gal_units_dec_to_degree: Unit conversion library. (line 34) * gal_units_degree_to_dec: Unit conversion library. (line 49) * gal_units_degree_to_ra: Unit conversion library. (line 41) * gal_units_extract_decimal: Unit conversion library. (line 11) * gal_units_ly_to_au: Unit conversion library. (line 148) * gal_units_ly_to_pc: Unit conversion library. (line 134) * gal_units_mag_to_counts: Unit conversion library. (line 63) * gal_units_mag_to_sb: Unit conversion library. (line 69) * gal_units_nanomaggy_to_counts: Unit conversion library. (line 120) * gal_units_pc_to_au: Unit conversion library. (line 127) * gal_units_pc_to_ly: Unit conversion library. (line 141) * gal_units_ra_to_degree: Unit conversion library. (line 27) * gal_units_sb_to_counts: Unit conversion library. (line 92) * gal_units_sb_to_mag: Unit conversion library. (line 76) * GAL_WARP_OUTPUT_NAME_MAXFRAC: Warp library. (line 27) * GAL_WARP_OUTPUT_NAME_WARPED: Warp library. (line 26) * gal_warp_pixelarea: Warp library. (line 225) * gal_warp_wcsalign: Warp library. (line 177) * gal_warp_wcsalign_free: Warp library. (line 217) * gal_warp_wcsalign_init: Warp library. (line 193) * gal_warp_wcsalign_onpix: Warp library. (line 204) * gal_warp_wcsalign_onthread: Warp library. (line 210) * gal_warp_wcsalign_template: Warp library. (line 160) * gal_wcs_angular_distance_deg: World Coordinate System. (line 492) * gal_wcs_box_vertices_from_center: World Coordinate System. (line 510) * gal_wcs_clean_small_errors: World Coordinate System. (line 362) * gal_wcs_coordsys_convert: World Coordinate System. (line 412) * gal_wcs_coordsys_convert_points: World Coordinate System. (line 424) * GAL_WCS_COORDSYS_ECB1950: World Coordinate System. (line 45) * GAL_WCS_COORDSYS_ECJ2000: World Coordinate System. (line 46) * GAL_WCS_COORDSYS_EQB1950: World Coordinate System. (line 43) * GAL_WCS_COORDSYS_EQJ2000: World Coordinate System. (line 44) * GAL_WCS_COORDSYS_GALACTIC: World Coordinate System. (line 47) * gal_wcs_coordsys_identify: World Coordinate System. (line 405) * GAL_WCS_COORDSYS_INVALID: World Coordinate System. (line 49) * gal_wcs_coordsys_name_to_id: World Coordinate System. (line 114) * GAL_WCS_COORDSYS_SUPERGALACTIC: World Coordinate System. (line 48) * gal_wcs_coordsys_sys1_ref_in_sys2: World Coordinate System. (line 438) * gal_wcs_copy: World Coordinate System. (line 316) * gal_wcs_copy_new_crval: World Coordinate System. (line 321) * gal_wcs_coverage: World Coordinate System. (line 564) * gal_wcs_create: World Coordinate System. (line 154) * gal_wcs_decompose_pc_cdelt: World Coordinate System. (line 376) * gal_wcs_dimension_name: World Coordinate System. (line 272) * gal_wcs_distortion_convert(struct: World Coordinate System. (line 456) * GAL_WCS_DISTORTION_DSS: World Coordinate System. (line 33) * gal_wcs_distortion_identify: World Coordinate System. (line 447) * GAL_WCS_DISTORTION_INVALID: World Coordinate System. (line 35) * gal_wcs_distortion_name_from_id: World Coordinate System. (line 105) * gal_wcs_distortion_name_to_id: World Coordinate System. (line 96) * gal_wcs_distortion_name_to_id <1>: World Coordinate System. (line 123) * GAL_WCS_DISTORTION_SIP: World Coordinate System. (line 31) * GAL_WCS_DISTORTION_TPD: World Coordinate System. (line 30) * GAL_WCS_DISTORTION_TPV: World Coordinate System. (line 32) * GAL_WCS_DISTORTION_WAT: World Coordinate System. (line 34) * GAL_WCS_FLTERROR: World Coordinate System. (line 93) * gal_wcs_free: World Coordinate System. (line 261) * gal_wcs_img_to_world: World Coordinate System. (line 607) * GAL_WCS_LINEAR_MATRIX_CD: World Coordinate System. (line 56) * GAL_WCS_LINEAR_MATRIX_INVALID: World Coordinate System. (line 57) * GAL_WCS_LINEAR_MATRIX_PC: World Coordinate System. (line 55) * gal_wcs_on_tile: World Coordinate System. (line 337) * gal_wcs_pixel_area_arcsec2: World Coordinate System. (line 556) * gal_wcs_pixel_scale: World Coordinate System. (line 548) * GAL_WCS_PROJECTION_AIR: World Coordinate System. (line 70) * GAL_WCS_PROJECTION_AIT: World Coordinate System. (line 78) * GAL_WCS_PROJECTION_ARC: World Coordinate System. (line 67) * GAL_WCS_PROJECTION_AZP: World Coordinate System. (line 62) * GAL_WCS_PROJECTION_BON: World Coordinate System. (line 83) * GAL_WCS_PROJECTION_CAR: World Coordinate System. (line 73) * GAL_WCS_PROJECTION_CEA: World Coordinate System. (line 72) * GAL_WCS_PROJECTION_COD: World Coordinate System. (line 81) * GAL_WCS_PROJECTION_COE: World Coordinate System. (line 80) * GAL_WCS_PROJECTION_COO: World Coordinate System. (line 82) * GAL_WCS_PROJECTION_COP: World Coordinate System. (line 79) * GAL_WCS_PROJECTION_CSC: World Coordinate System. (line 86) * GAL_WCS_PROJECTION_CYP: World Coordinate System. (line 71) * GAL_WCS_PROJECTION_HPX: World Coordinate System. (line 88) * GAL_WCS_PROJECTION_MER: World Coordinate System. (line 74) * GAL_WCS_PROJECTION_MOL: World Coordinate System. (line 77) * gal_wcs_projection_name_from_id: World Coordinate System. (line 132) * gal_wcs_projection_name_to_id: World Coordinate System. (line 143) * GAL_WCS_PROJECTION_PAR: World Coordinate System. (line 76) * GAL_WCS_PROJECTION_PCO: World Coordinate System. (line 84) * GAL_WCS_PROJECTION_QSC: World Coordinate System. (line 87) * GAL_WCS_PROJECTION_SFL: World Coordinate System. (line 75) * GAL_WCS_PROJECTION_SIN: World Coordinate System. (line 66) * GAL_WCS_PROJECTION_STG: World Coordinate System. (line 65) * GAL_WCS_PROJECTION_SZP: World Coordinate System. (line 63) * GAL_WCS_PROJECTION_TAN: World Coordinate System. (line 64) * GAL_WCS_PROJECTION_TSC: World Coordinate System. (line 85) * GAL_WCS_PROJECTION_XPH: World Coordinate System. (line 89) * GAL_WCS_PROJECTION_ZEA: World Coordinate System. (line 69) * GAL_WCS_PROJECTION_ZPN: World Coordinate System. (line 68) * gal_wcs_read: World Coordinate System. (line 246) * gal_wcs_read_fitsptr: World Coordinate System. (line 204) * gal_wcs_remove_dimension: World Coordinate System. (line 332) * gal_wcs_to_cd: World Coordinate System. (line 395) * gal_wcs_warp_matrix: World Coordinate System. (line 352) * gal_wcs_world_to_img: World Coordinate System. (line 583) * gal_wcs_write: World Coordinate System. (line 294) * gal_wcs_write_in_fitsptr: World Coordinate System. (line 305) * gal_wcs_write_wcsstr: World Coordinate System. (line 282) * pthread_barrier_destroy: Implementation of pthread_barrier. (line 43) * pthread_barrier_init: Implementation of pthread_barrier. (line 28) * pthread_barrier_t: Implementation of pthread_barrier. (line 25) * pthread_barrier_wait: Implementation of pthread_barrier. (line 36) * pthread_barrierattr_t: Implementation of pthread_barrier. (line 22) Index ***** �[index�] * Menu: * --: Operating mode options. (line 11) * --checkconfig: Operating mode options. (line 121) * --cite: Operating mode options. (line 55) * --config-prefix=STR: Operating mode options. (line 135) * --config=STR: Operating mode options. (line 103) * --disable-guide-message: Gnuastro configure options. (line 84) * --disable-progname: Gnuastro configure options. (line 61) * --dontdelete: Input output options. (line 98) * --enable-check-with-valgrind: Gnuastro configure options. (line 31) * --enable-debug: Gnuastro configure options. (line 12) * --enable-gnulibcheck: Gnuastro configure options. (line 71) * --enable-gnulibcheck <1>: Known issues. (line 37) * --enable-guide-message=no: Gnuastro configure options. (line 85) * --enable-progname: Gnuastro configure options. (line 48) * --enable-progname=no: Gnuastro configure options. (line 62) * --enable-reentrant: CFITSIO. (line 13) * --hdu=STR/INT: Input output options. (line 36) * --help: Arguments and options. (line 33) * --help <1>: Operating mode options. (line 27) * --help <2>: --help. (line 6) * --help output customization: --help. (line 55) * --ignorecase: Input output options. (line 73) * --keepinputdir: Input output options. (line 105) * --keepinputdir <1>: Automatic output. (line 18) * --lastconfig: Operating mode options. (line 208) * --log: Operating mode options. (line 280) * --numthreads: Configuration files. (line 15) * --numthreads <1>: Multi-threaded operations. (line 16) * --numthreads=INT: Operating mode options. (line 293) * --onlyversion=STR: Operating mode options. (line 220) * --outfitsnocommit: Input output options. (line 162) * --outfitsnoconfig: Input output options. (line 153) * --outfitsnodate: Input output options. (line 158) * --outfitsnoversions: Input output options. (line 166) * --output: Configuration files. (line 15) * --output=STR: Input output options. (line 85) * --prefix: Installation directory. (line 6) * --printparams: Options. (line 73) * --printparams <1>: Operating mode options. (line 81) * --program-prefix: Executable names. (line 50) * --program-suffix: Executable names. (line 50) * --program-transform-name: Executable names. (line 50) * --quiet: Operating mode options. (line 46) * --searchin=STR: Input output options. (line 66) * --setdirconf: Operating mode options. (line 179) * --setdirconf <1>: Current directory and User wide. (line 16) * --setusrconf: Operating mode options. (line 203) * --setusrconf <1>: Current directory and User wide. (line 16) * --stdintimeout: Input output options. (line 9) * --tableformat=STR: Input output options. (line 118) * --type=STR: Input output options. (line 91) * --usage: Arguments and options. (line 33) * --usage <1>: Operating mode options. (line 21) * --usage <2>: --usage. (line 6) * --version: Operating mode options. (line 38) * --wcslinearmatrix=STR: Input output options. (line 127) * --with-python: Gnuastro configure options. (line 116) * --without-libgit2: Gnuastro configure options. (line 98) * --without-libjpeg: Gnuastro configure options. (line 104) * --without-libtiff: Gnuastro configure options. (line 110) * --without-pgplot: WCSLIB. (line 16) * -?: Operating mode options. (line 26) * -D: Input output options. (line 97) * -h STR/INT: Input output options. (line 35) * -I: Input output options. (line 72) * -K: Input output options. (line 104) * -mecube (DS9): Viewing FITS file contents with DS9 or TOPCAT. (line 40) * -N INT: Operating mode options. (line 292) * -o STR: Input output options. (line 84) * -P: Operating mode options. (line 80) * -q: Operating mode options. (line 45) * -S: Operating mode options. (line 178) * -s STR: Input output options. (line 65) * -T STR: Input output options. (line 90) * -t STR: Input output options. (line 117) * -U: Operating mode options. (line 202) * -V: Operating mode options. (line 37) * ./.gnuastro/: Current directory and User wide. (line 6) * ./configure: Configuring. (line 6) * ./configure <1>: Installation directory. (line 72) * ./configure options: Gnuastro configure options. (line 6) * .bashrc: --help. (line 65) * .bashrc <1>: Generating random numbers. (line 64) * $g$ (gravitational constant): Constants. (line 26) * $h$ (Plank's constant): Constants. (line 30) * $HOME: Current directory and User wide. (line 6) * $HOME/.local/etc/: Current directory and User wide. (line 6) * 24-bit terminal: Vector graphics colors. (line 14) * 2D histogram: Column statistics color-magnitude diagram. (line 32) * 2D histogram <1>: 2D Histograms. (line 6) * 2D histogram <2>: Statistical operations. (line 401) * 2MASS All-Sky Catalog: Available databases. (line 177) * 32-bit: Configuration information. (line 70) * 3D data cube: Detecting lines and extracting spectra in 3D data. (line 6) * 3D data-cubes: Dimensionality changing operators. (line 245) * 3D data-cubes <1>: Measurements per slice spectra. (line 6) * 64-bit: Configuration information. (line 70) * A4 paper size: A4 print book. (line 6) * A4 print book: A4 print book. (line 6) * AAVSO Photometric All Sky Survey, DR9: Available databases. (line 177) * AB magnitude: Unit conversion operators. (line 92) * AB magnitude <1>: Brightness flux magnitude. (line 77) * AB Magnitude: Unit conversion library. (line 103) * Abd al-rahman Sufi: Sufi simulates a detection. (line 6) * Abell 370 galaxy cluster: Detecting lines and extracting spectra in 3D data. (line 20) * Abraham de Moivre: Circles and the complex plane. (line 16) * ACIS: Detecting lines and extracting spectra in 3D data. (line 6) * ACS: Warp. (line 53) * ACS camera: Surface brightness limit of image. (line 38) * Adding Ghostscript fonts: Drawing with vector graphics. (line 315) * Additions to Gnuastro: Suggest new feature. (line 6) * Adjacency matrix: Binary datasets. (line 165) * Adobe systems: Recognized file formats. (line 102) * ADQL (Astronomical Data Query Language): Query. (line 6) * ADU: Instrumental noise. (line 23) * ADU <1>: Brightness flux magnitude. (line 6) * Advanced camera for surveys: Warp. (line 53) * Advanced Camera for Surveys: Linear warping basics. (line 51) * Advanced Packaging Tool (APT, Debian): Dependencies from package managers. (line 51) * Affine Transformation: Linear warping basics. (line 85) * Airy projection: Align pixels with WCS considering distortions. (line 176) * AKARI/FIS All-Sky Survey: Available databases. (line 177) * Akima spline interpolation: Interpolation. (line 118) * al-Shirazi, Qutb al-Din: Fourier series historical background. (line 27) * Albert. A. Michelson: Science and its tools. (line 193) * Algorithm: watershed: Labeled datasets. (line 97) * Alias (shell): Invoking astnoisechisel. (line 108) * Alias, shell: Invoking astmkprof. (line 85) * Align: Align pixels with WCS considering distortions. (line 121) * Align <1>: Interpolation. (line 255) * Align pixel and WCS coordinates: Align pixels with WCS considering distortions. (line 6) * Aligning an image: Align pixels with WCS considering distortions. (line 58) * All-sky Survey of GALEX DR5: Available databases. (line 177) * AllWISE Data Release: Available databases. (line 177) * Almagest: Sufi simulates a detection. (line 19) * Amplifier: Tessellation. (line 54) * Angular coverage: Brightness flux magnitude. (line 163) * Annotation of images for paper: Annotations for figure in paper. (line 6) * Announcements: Announcements. (line 6) * Anonymous bug submission: Report a bug. (line 84) * Anscombe F. J.: Science and its tools. (line 24) * Anscombe's quartet: Science and its tools. (line 32) * ANSI C: Why C. (line 15) * apt-get: Dependencies from package managers. (line 51) * Arch GNU/Linux: Dependencies from package managers. (line 155) * Area of pixel on sky: Pixel information images. (line 30) * Area resampling: Pixel information images. (line 25) * Area, ellipse: Morphology measurements nonparametric. (line 121) * Argp argument parser: --help. (line 55) * Argp argument parser <1>: Mandatory source code files. (line 69) * ARGP_HELP_FMT: --help. (line 55) * args.h: Mandatory source code files. (line 68) * Argument list too long: Keyword inspection and manipulation. (line 40) * Argument list too long <1>: Invoking astarithmetic. (line 85) * Arguments to programs: Arguments and options. (line 6) * Aristarchus of Samos: Fourier series historical background. (line 56) * Array: Linked lists. (line 6) * ASCII plot: Invoking aststatistics. (line 67) * ASCII table, FITS: Recognized table formats. (line 19) * ASCII85 encoding: ConvertType input and output. (line 113) * ASCII85 encoding <1>: EPS files. (line 98) * astprogname: Naming convention. (line 15) * Astrometry: Zero point estimation. (line 6) * ASTRON: Available databases. (line 82) * Astronomical data format: Recognized file formats. (line 15) * Astronomical Data Query Language (ADQL): Query. (line 6) * Astronomical Magnitude system: Brightness flux magnitude. (line 40) * Astronomical Unit (AU): Constants. (line 34) * Astronomical Units (AU): Unit conversion operators. (line 138) * Astronomical Units (AU) <1>: Unit conversion library. (line 109) * Asynchronous thread allocation: Invoking astcrop. (line 74) * Atmosphere: Convolve. (line 25) * Atmosphere emission lines: Sky lines in optical IFUs. (line 23) * AU (Astronomical Unit): Constants. (line 34) * authors-cite.h: Mandatory source code files. (line 147) * Auto-complete in the shell: Executable names. (line 14) * Autocomplete (in the shell/Bash): Shell TAB completion. (line 17) * Autocomplete (in the shell/Bash) <1>: Mandatory source code files. (line 154) * Autocomplete (in the shell/Bash) <2>: Bash programmable completion. (line 10) * Automatic configuration file writing: Configuration file format. (line 33) * Automatic output file names: Automatic output. (line 6) * Automatically created build files: Bootstrapping. (line 6) * Available number of threads: Multi-threaded operations. (line 16) * Average: Statistical operations. (line 73) * Average, weighted: Convolve. (line 6) * Avogradro's number: Constants. (line 42) * AWK: Extract clumps and objects. (line 71) * AWK <1>: Standard input. (line 41) * AWK <2>: Table. (line 23) * AWK <3>: Invoking asttable. (line 149) * AWK <4>: Invoking astarithmetic. (line 294) * AWK <5>: Invoking aststatistics. (line 114) * AWK <6>: Table input output. (line 181) * Axis ratio: Defining an ellipse and ellipsoid. (line 6) * Axis ratio <1>: Dimensions. (line 105) * Azimuthal range (radial profile): Invoking astscript-radial-profile. (line 258) * Azophi: Sufi simulates a detection. (line 6) * Background flux: Photon counting noise. (line 52) * Background flux <1>: Sky value definition. (line 18) * Background pixels: Detection options. (line 69) * Backup: Configure and build in RAM. (line 15) * Bad pixels: Accounting for non-exposed pixels. (line 6) * Baffle: Accounting for non-exposed pixels. (line 6) * Balmer limit: Spectral lines library. (line 10) * Band-merged unWISE Catalog: Available databases. (line 177) * Base of natural logarithm ($e$): Constants. (line 13) * Bash auto-complete: Shell TAB completion. (line 17) * Bash auto-complete <1>: Mandatory source code files. (line 154) * Bash auto-complete <2>: Bash programmable completion. (line 10) * Bash programmable completion: Shell TAB completion. (line 17) * Bash programmable completion <1>: Mandatory source code files. (line 154) * Bash programmable completion <2>: Bash programmable completion. (line 10) * Best use of CPU threads: A note on threads. (line 6) * Bi-linear interpolation: Resampling. (line 23) * Bias current: Tessellation. (line 54) * Bias level in detectors: Photon counting noise. (line 77) * Bicubic interpolation: Resampling. (line 23) * Bicubic interpolation <1>: Quantifying signal in a tile. (line 152) * Bin width, histogram: Histogram and Cumulative Frequency Plot. (line 21) * Binary datasets: Binary datasets. (line 6) * Binary image: Recognized file formats. (line 88) * Binary image <1>: Detection options. (line 69) * Binary table, FITS: Recognized table formats. (line 54) * Bisquare function of Tukey: Fitting options. (line 121) * Bit: Numeric data types. (line 6) * bit-32: Configuration information. (line 70) * bit-64: Configuration information. (line 70) * Bitwise operators: Bitwise operators. (line 6) * Bitwise Or: Arithmetic on datasets. (line 42) * Biweight function of Tukey: Fitting options. (line 121) * Black and white image: Recognized file formats. (line 88) * blank color channel: Recognized file formats. (line 123) * Blank data: Generic data container. (line 157) * Blank pixel: Blank pixels. (line 6) * Blank pixel <1>: Conditional operators. (line 98) * Blur image: Convolve. (line 25) * Blur image <1>: PSF. (line 19) * Bonne projection: Align pixels with WCS considering distortions. (line 202) * Book formats: Getting help. (line 6) * Bootstrapping: Bootstrapping. (line 6) * Border on an image: Drawing with vector graphics. (line 34) * Brahe, Tycho: Science and its tools. (line 124) * Breadth first search: Defining an ellipse and ellipsoid. (line 68) * Breadth first search <1>: Binary datasets. (line 129) * brew: Dependencies from package managers. (line 123) * Brightness: Brightness flux magnitude. (line 14) * Brightness <1>: Galaxies. (line 11) * Buffers (Emacs): Coding conventions. (line 41) * Bug: Report a bug. (line 6) * Bug <1>: Gnuastro project webpage. (line 6) * Bug reporting: Report a bug. (line 16) * Bug tracker: Report a bug. (line 99) * bug-gnuastro@gnu.org: Report a bug. (line 78) * Build: Quick start. (line 6) * Build individual profiles: MakeProfiles output dataset. (line 167) * Build tree: Test scripts. (line 25) * Building from source: Dependencies from package managers. (line 6) * Butterfly projection: Align pixels with WCS considering distortions. (line 214) * Byte: Numeric data types. (line 16) * Bzip2: Downloading and validating input data. (line 81) * C compiler: Invoking astbuildprog. (line 72) * C preprocessor: Invoking astbuildprog. (line 89) * C programming language: Why C. (line 6) * C, plotting: PGPLOT. (line 6) * C: restrict: Generic data container. (line 61) * C++ programming language: Why C. (line 6) * C99: Pointers. (line 59) * Cache, system: A note on threads. (line 29) * Calendar: Sort FITS files by night. (line 6) * Calibration: Zero point estimation. (line 6) * Camera: Resampling. (line 6) * CANDELS survey: Crop options. (line 32) * CANDELS survey <1>: Surface brightness limit of image. (line 52) * Carbon footprint: Separate shell variables for multiple outputs. (line 30) * Caspar Wessel: Circles and the complex plane. (line 16) * Catalog, Gaia: Available databases. (line 92) * Catalog, Vizier: Available databases. (line 156) * CatWISE 2020 catalog: Available databases. (line 177) * Cauchy's function (robust weight): Fitting options. (line 125) * CC: Invoking astbuildprog. (line 204) * CCD: Tessellation. (line 54) * CCD <1>: Warp. (line 53) * CDELT: Angular coverage on the sky. (line 6) * CDELT <1>: Moire pattern in stacking and its correction. (line 97) * CDELT <2>: Input output options. (line 133) * CDELTi: Align pixels with WCS considering distortions. (line 105) * CDS, VizieR: Available databases. (line 156) * Celestial sphere: Pointings that account for sky curvature. (line 55) * Celestial sphere <1>: Brightness flux magnitude. (line 163) * CentOS: Dependencies from package managers. (line 93) * Central management: Gnuastro project webpage. (line 6) * CFITSIO: CFITSIO. (line 6) * CFITSIO <1>: Keyword inspection and manipulation. (line 291) * CFITSIO <2>: Configuration information. (line 34) * CFITSIO <3>: FITS files. (line 6) * CFITSIO version on outputs: Output FITS files. (line 6) * Change converted pixel values: Pixel visualization. (line 73) * Channel: Tessellation. (line 65) * Channel <1>: Array input output. (line 93) * Channel (color): Color. (line 6) * Channel, color: Pixel colors. (line 6) * Charge-coupled device: Warp. (line 53) * Check: Quick start. (line 6) * Check center of crop: Crop output. (line 136) * Checking detection algorithms: MakeProfiles. (line 6) * Checking tests: Tests. (line 6) * Checksum: Downloading and validating input data. (line 41) * CHECKSUM: FITS keyword: Keyword inspection and manipulation. (line 291) * Chi-squared: Fitting functions. (line 93) * CIII doublet: Spectral lines library. (line 10) * Circle (great): Coordinate and border operators. (line 166) * Circle (small): Coordinate and border operators. (line 174) * Citation information: Mandatory source code files. (line 148) * Claudius Ptolemy: Sufi simulates a detection. (line 19) * CLI: command-line user interface: Command-line interface. (line 6) * CLI: repeating operations: Command-line interface. (line 53) * Clipping of outliers: Clipping outliers. (line 6) * Clump: Labeled datasets. (line 158) * Clump magnitude limit: Quantifying measurement limits. (line 6) * CMYK: Pixel colors. (line 6) * Coaddition: Moire pattern in stacking and its correction. (line 128) * Coaddition <1>: Stacking operators. (line 6) * Coaddition <2>: Align pixels with WCS considering distortions. (line 31) * Coadds: Random number generators. (line 157) * COBE spherical cube projection: Align pixels with WCS considering distortions. (line 208) * Color: Pixel colors. (line 6) * Color channel: Color. (line 6) * Color channel <1>: Pixel colors. (line 6) * Color channel <2>: Array input output. (line 93) * Color in macOS terminals: Drawing with vector graphics. (line 268) * Color-magnitude diagram: Column statistics color-magnitude diagram. (line 27) * Color-magnitude diagram <1>: 2D histogram as an image. (line 18) * Colormap: Pixel colors. (line 6) * Colormap, gray-scale: Colormaps for single-channel pixels. (line 23) * Colormap, HSV: Colormaps for single-channel pixels. (line 6) * Colormap: SLS: Pixel visualization. (line 46) * Colormap: SLS-inverse: Pixel visualization. (line 54) * Colormap: Viridis: Pixel visualization. (line 41) * Colors: Color functions. (line 6) * Colors (web): Vector graphics colors. (line 6) * Colors, broad-band photometry: General program usage tutorial. (line 6) * Colorspace, gray-scale: Pixel visualization. (line 23) * Colorspace, HSV: Pixel visualization. (line 28) * Columns (Vector): Vector columns. (line 6) * Command-line arguments: Arguments and options. (line 6) * Command-line help: Getting help. (line 13) * Command-line options: Arguments and options. (line 6) * Command-line scroll: --help. (line 27) * Command-line searching text: --help. (line 47) * Command-line user interface: Command-line interface. (line 6) * Command-line, long outputs: --help. (line 22) * Command-line, viewing full book: Info. (line 6) * Comments: Sufi simulates a detection. (line 550) * Commutative property: Merging multiple warpings. (line 6) * Comoving distance: Distance on a 2D curved space. (line 169) * Compare Moffat and Gaussian: PSF. (line 70) * Compare Poisson and Gaussian: Photon counting noise. (line 40) * Compile: Quick start. (line 6) * Compiled PostScript: Recognized file formats. (line 102) * Compiler, C: Invoking astbuildprog. (line 72) * Compiling from source: Dependencies from package managers. (line 6) * Completeness: Extract clumps and objects. (line 98) * Completeness <1>: Completeness limit of each detection. (line 6) * Completion in the shell: Shell TAB completion. (line 17) * Completion in the shell <1>: Mandatory source code files. (line 154) * Completion in the shell <2>: Bash programmable completion. (line 10) * Complex numbers: Invoking astconvolve. (line 114) * Compression: NoiseChisel output. (line 145) * Compression <1>: Segment output. (line 107) * Compression quality in JPEG: ConvertType input and output. (line 129) * Concave polygons: Crop options. (line 231) * Concave polygons <1>: Polygons. (line 11) * Configuration file directories: Configuration file precedence. (line 6) * Configuration file format: Configuration file format. (line 11) * Configuration file precedence: Configuration file precedence. (line 6) * Configuration file suffix: Configuration file format. (line 6) * Configuration files: Options. (line 101) * Configuration files <1>: Configuration files. (line 6) * Configuration files, system wide: System wide. (line 6) * Configuration files, writing: Configuration file format. (line 33) * Configuration, not finding library: Known issues. (line 11) * Configure options: Configuring. (line 12) * Configure options particular to Gnuastro: Gnuastro configure options. (line 6) * Configuring: Configuring. (line 6) * Conic equal area projection: Align pixels with WCS considering distortions. (line 196) * Conic equidistant projection: Align pixels with WCS considering distortions. (line 198) * Conic orthomorphic projection: Align pixels with WCS considering distortions. (line 200) * Conic perspective projection: Align pixels with WCS considering distortions. (line 194) * Connected component labeling: Segment. (line 17) * Connected component labeling <1>: Binary datasets. (line 129) * Connected components: Mathematical morphology operators. (line 81) * Connectivity: Binary datasets. (line 13) * Continuum subtraction: Continuum subtraction. (line 6) * Contour: Contour options. (line 12) * Convenient book formats: Getting help. (line 6) * Convention for program source: Program source. (line 6) * Converting data formats: ConvertType. (line 6) * Converting image formats: ConvertType. (line 6) * ConvertType (astconvertt): ConvertType. (line 6) * Convex Hull: Polygons. (line 69) * Convex polygons: Crop options. (line 231) * Convex polygons <1>: Polygons. (line 11) * Convolution: Convolve. (line 6) * Convolution <1>: Convolution process. (line 24) * Convolution <2>: Quantifying signal in a tile. (line 70) * Convolution <3>: PSF. (line 19) * Convolution kernel: FITS arrays. (line 69) * Convolutional Neural Networks: Pooling operators. (line 6) * Cookbook: Tutorials. (line 6) * Coordinate matching: Matching. (line 6) * Coordinate scales: Angular coverage on the sky. (line 6) * Coordinate system: Ecliptic: Keyword inspection and manipulation. (line 510) * Coordinate system: Ecliptic <1>: World Coordinate System. (line 50) * Coordinate system: Equatorial: Keyword inspection and manipulation. (line 510) * Coordinate system: Equatorial <1>: World Coordinate System. (line 50) * Coordinate system: Galactic: Keyword inspection and manipulation. (line 510) * Coordinate system: Galactic <1>: World Coordinate System. (line 50) * Coordinate system: Supergalactic: Keyword inspection and manipulation. (line 510) * Coordinate system: Supergalactic <1>: World Coordinate System. (line 50) * Coordinate transformation: Linear warping basics. (line 6) * Coordinates, homogeneou: Linear warping basics. (line 63) * Copyright: Your rights. (line 12) * Correlated noise: NoiseChisel optimization for detection. (line 39) * Correlated noise <1>: Measuring the dataset limits. (line 70) * Correlated noise <2>: Upper limit magnitude of each detection. (line 51) * Correlated noise <3>: Surface brightness limit of image. (line 98) * Correlated noise <4>: Upper limit surface brightness of image. (line 6) * Correlation: Convolution process. (line 24) * Cosmic ray removal: Sky value definition. (line 24) * Cosmic rays: Sigma clipping. (line 76) * Cosmic rays <1>: Convolve. (line 25) * Cosmic rays <2>: Warp. (line 36) * Cosmic rays <3>: Sky value definition. (line 17) * Cosmic rays <4>: Quantifying signal in a tile. (line 81) * COSMOS survey: Crop. (line 13) * Cotes, Roger: Circles and the complex plane. (line 16) * Counting error: Photon counting noise. (line 6) * Counting from zero.: Options. (line 119) * Counts: Instrumental noise. (line 23) * Counts <1>: Brightness flux magnitude. (line 6) * Covariance matrix: Fitting functions. (line 93) * Coverage of image over sky: HDU information and manipulation. (line 100) * CPPFLAGS: Known issues. (line 49) * CPPFLAGS <1>: Headers. (line 153) * CPPFLAGS <2>: Invoking astbuildprog. (line 204) * CPU threads: Multi-threaded operations. (line 6) * CPU threads, number: Configuration files. (line 15) * CPU threads, set number: Operating mode options. (line 292) * CPU, using all threads: Multi-threaded operations. (line 6) * CRLF line terminator: Text files. (line 11) * Crop (astcrop): Crop. (line 6) * Crop a given section of image: Crop section syntax. (line 6) * Crop part of image: Crop. (line 6) * Crop section format: Crop section syntax. (line 27) * CRVALi: Align pixels with WCS considering distortions. (line 58) * CTYPEi: Align pixels with WCS considering distortions. (line 121) * Cube (3D) spectra: Detecting lines and extracting spectra in 3D data. (line 6) * Cubes (3D data): Dimensionality changing operators. (line 245) * Cubes (3D data) <1>: Measurements per slice spectra. (line 6) * Cubic spline interpolation: Interpolation. (line 104) * Cumulative Frequency Plot: Histogram and Cumulative Frequency Plot. (line 31) * cURL (downloading tool): Optional dependencies. (line 97) * Customize --help output: --help. (line 55) * Customize executable names: Executable names. (line 28) * Customizing installation: Configuring. (line 12) * Cylindrical equal area projection: Align pixels with WCS considering distortions. (line 180) * Cylindrical perspective projection: Align pixels with WCS considering distortions. (line 178) * Dark Energy Survey data release 1: Available databases. (line 177) * Dark level in detectors: Photon counting noise. (line 77) * Dark night: Random number generators. (line 168) * Dash shell: Separate shell variables for multiple outputs. (line 85) * Data: Quantifying signal in a tile. (line 18) * Data cubes: Dimensionality changing operators. (line 245) * Data format conversion: ConvertType. (line 6) * Data structures: Headers. (line 89) * Data type: Generic data container. (line 70) * Data's depth: Surface brightness limit of image. (line 30) * Database, Gaia: Available databases. (line 92) * Database, VizieR: Available databases. (line 156) * Dataset: binary: Binary datasets. (line 6) * DATASUM: FITS keyword: HDU information and manipulation. (line 148) * DATASUM: FITS keyword <1>: Keyword inspection and manipulation. (line 291) * DATASUM: FITS keyword <2>: FITS HDUs. (line 28) * DATASUM: FITS keyword <3>: FITS HDUs. (line 46) * Date: FITS format: FITS header keywords. (line 93) * de Moivre, Abraham: Photon counting noise. (line 6) * de Moivre, Abraham <1>: Circles and the complex plane. (line 16) * de Vaucouleur profile: Galaxies. (line 11) * Debian: Dependencies from package managers. (line 51) * Debug: Separate build and source directories. (line 36) * Debug <1>: Operating mode options. (line 131) * Debug <2>: Invoking astbuildprog. (line 145) * Debugging: Gnuastro configure options. (line 13) * Debugging <1>: Building and debugging. (line 40) * Decimal digits: Printing floating point numbers. (line 53) * Decimal separator: Numeric locale. (line 6) * Declination: Pointings that account for sky curvature. (line 55) * Declination <1>: Column arithmetic. (line 344) * Declination <2>: Arithmetic on datasets. (line 191) * Declination <3>: Unit conversion library. (line 37) * Declination <4>: Unit conversion library. (line 52) * Default executable search directory: Installation directory. (line 72) * Default library search directory: Installation directory. (line 164) * Default option values: Options. (line 101) * Default option values <1>: Configuration files. (line 6) * Define section to crop: Crop section syntax. (line 12) * Dependencies, Gnuastro: Mandatory dependencies. (line 6) * Depth of data: Zero point tutorial with reference image. (line 295) * Depth of data <1>: Quantifying measurement limits. (line 6) * Depth of data <2>: Pointing pattern simulation. (line 6) * Detached threads: Gnuastro's thread related functions. (line 73) * Detection: Convolve. (line 25) * Detection <1>: NoiseChisel. (line 6) * Detections false: Completeness limit of each detection. (line 20) * Detector: Resampling. (line 6) * developer-build: Building and debugging. (line 18) * developer-build <1>: Test scripts. (line 25) * Development packages: Known issues. (line 11) * Diagram, Color-magnitude: 2D histogram as an image. (line 18) * Diffraction limited: PSF. (line 6) * Dilation: Mathematical morphology operators. (line 51) * Dilation <1>: Binary datasets. (line 92) * Dilation (image processing): NoiseChisel optimization. (line 206) * Directory, install: Installation directory. (line 149) * Discrete Fourier transform: Invoking astconvolve. (line 92) * Distance, elliptical/ellipsoidal: Dimensions. (line 105) * Distance, Manhattan: Dimensions. (line 91) * Distortion: Pixel information images. (line 30) * Distortion, optical: Warp. (line 47) * Distortion, WCS: Keyword inspection and manipulation. (line 567) * Distortion, WCS <1>: World Coordinate System. (line 36) * Distortion, WCS <2>: World Coordinate System. (line 447) * Distribution mode: Sky value misconceptions. (line 22) * Distributions, GNU/Linux: Dependencies from package managers. (line 6) * Dithering: Pointing pattern design. (line 6) * dnf: Dependencies from package managers. (line 93) * Doppler effect: Continuum subtraction. (line 71) * Doublet: CIII: Spectral lines library. (line 10) * Doublet: MgII: Spectral lines library. (line 10) * Doublet: NII: Spectral lines library. (line 10) * Doublet: OII: Spectral lines library. (line 10) * Doublet: OIII: Spectral lines library. (line 10) * Doublet: SII: Spectral lines library. (line 10) * Douglas Rushkoff: Science and its tools. (line 66) * Drizzle: Resampling. (line 58) * DS9: Reddest clumps cutouts and parallelization. (line 32) * DS9 <1>: Extract clumps and objects. (line 22) * DS9 <2>: Pixel visualization. (line 46) * DS9 <3>: Segment output. (line 21) * DSS WCS distortion: World Coordinate System. (line 36) * Dynamic libraries: Installation directory. (line 194) * Dynamic linking: Linking. (line 38) * Dynamic linking <1>: Linking. (line 64) * Dynamic range: Color images with full dynamic range. (line 18) * e (base of natural logarithm): Constants. (line 13) * Ecliptic coordinate system: Keyword inspection and manipulation. (line 510) * Ecliptic coordinate system <1>: Coordinate conversion operators. (line 6) * Ecliptic coordinate system <2>: World Coordinate System. (line 50) * Edges, image: Resampling. (line 38) * Effective radius: Morphology measurements nonparametric. (line 126) * Effective radius <1>: Galaxies. (line 11) * Efficient use of CPU threads: A note on threads. (line 6) * Ellipse: Defining an ellipse and ellipsoid. (line 6) * Ellipse <1>: Dimensions. (line 105) * Ellipse area: Morphology measurements nonparametric. (line 121) * Ellipsoid: Defining an ellipse and ellipsoid. (line 35) * Ellipsoid <1>: Dimensions. (line 105) * Ellipsoidal distance: Dimensions. (line 105) * Elliptical distance: Defining an ellipse and ellipsoid. (line 28) * Elliptical distance <1>: Dimensions. (line 105) * Emacs buffers: Coding conventions. (line 41) * Encapsulated PostScript: Recognized file formats. (line 66) * Environment: Installation directory. (line 52) * Environment variable, HOME: Installation directory. (line 65) * Environment variables: Installation directory. (line 38) * Environment variables <1>: Installation directory. (line 52) * Environment variables <2>: Generating random numbers. (line 26) * Epoch time, Unix: FITS header keywords. (line 119) * Epoch, Unix time: Keyword inspection and manipulation. (line 486) * Epoch, Unix time <1>: Column arithmetic. (line 349) * Epoch, Unix time <2>: Sort FITS files by night. (line 26) * EPS: Recognized file formats. (line 66) * EPS <1>: Pixel visualization. (line 139) * EPS <2>: EPS files. (line 105) * EPS <3>: PDF files. (line 52) * Equatorial coordinate system: Keyword inspection and manipulation. (line 510) * Equatorial coordinate system <1>: Coordinate conversion operators. (line 6) * Equatorial coordinate system <2>: World Coordinate System. (line 50) * Erosion: Mathematical morphology operators. (line 21) * Erosion <1>: NoiseChisel. (line 34) * Erosion <2>: Detection options. (line 194) * Erosion <3>: Binary datasets. (line 77) * Erosion (image processing): NoiseChisel optimization. (line 194) * Error in surface brightness: Surface brightness error of each detection. (line 6) * Error, floating point round-off: Invoking astconvolve. (line 128) * etc: Configuration files. (line 6) * Euler angles: Defining an ellipse and ellipsoid. (line 35) * Euler angles <1>: Bounding box. (line 69) * Euler, Leonhard: Circles and the complex plane. (line 16) * Euler's number ($e$): Constants. (line 13) * eval to evaluate string as command: Separate shell variables for multiple outputs. (line 52) * Evaluate string as command (eval): Separate shell variables for multiple outputs. (line 52) * Exact area resampling: Resampling. (line 58) * Executable names: Executable names. (line 6) * Exposure map: Pointing pattern simulation. (line 53) * Exposure time: Brightness flux magnitude. (line 125) * eXtreme Deep Field (XDF) survey: General program usage tutorial. (line 25) * eXtreme Deep Field (XDF) survey <1>: Surface brightness limit of image. (line 52) * Fair function (robust weight): Fitting options. (line 129) * False color: Pixel colors. (line 22) * False detections: Completeness limit of each detection. (line 20) * Feature request: Gnuastro project webpage. (line 6) * Feature requests: Suggest new feature. (line 6) * Fedora: Dependencies from package managers. (line 93) * File flags: Writing scripts to automate the steps. (line 116) * File I/O: Configure and build in RAM. (line 6) * File operations: Data containers. (line 6) * File system Hierarchy Standard: Configuration files. (line 6) * file systems, tmpfs: Configure and build in RAM. (line 23) * Filename suffix: Arguments. (line 13) * Filter: Color. (line 6) * Filter transmission curve: Zero point of an image. (line 21) * Fine structure constant: Constants. (line 46) * first-in-first-out: Linked lists. (line 47) * first-in-first-out <1>: FITS header keywords. (line 23) * first-in-first-out <2>: Interpolation. (line 181) * FITS: Output FITS files. (line 6) * FITS <1>: FITS files. (line 6) * FITS filename suffixes: Arguments. (line 13) * FITS image viewer: SAO DS9. (line 6) * FITS or FITS/TXT: Options. (line 51) * FITS standard: CFITSIO. (line 6) * FITS standard <1>: Linear warps to be called explicitly. (line 43) * FITS standard <2>: Generic data container. (line 78) * FITS Tables: Recognized table formats. (line 19) * Fitting: Data modeling. (line 6) * Fitting <1>: Fitting functions. (line 6) * Fitting (least squares): Least squares fitting. (line 6) * Fitting (polynomial): Fitting functions. (line 151) * FK5: Keyword inspection and manipulation. (line 510) * Flag (mask) images: Bitwise operators. (line 26) * Flags, file: Writing scripts to automate the steps. (line 116) * Flat field: Preparing input and generating exposure map. (line 159) * Flattening (CNNs): Dimensionality changing operators. (line 55) * Flip coordinates: Linear warping basics. (line 30) * Floating point error: Measuring elliptical parameters. (line 47) * Floating point numbers: Printing floating point numbers. (line 6) * Floating point round-off error: Invoking astconvolve. (line 128) * FLT: Options. (line 38) * Flux: Brightness flux magnitude. (line 14) * Flux to magnitude conversion: Brightness flux magnitude. (line 40) * Fonts: Drawing with vector graphics. (line 303) * Foreground pixels: Detection options. (line 69) * FORTRAN: Generic data container. (line 78) * Fourier spectrum: Invoking astconvolve. (line 114) * Free software: Your rights. (line 12) * Free Software Foundation: Contributing to Gnuastro. (line 16) * Free Software Foundation <1>: Copyright assignment. (line 6) * FSF: Contributing to Gnuastro. (line 16) * Full Width at Half Maximum: PSF. (line 31) * Function gradient over pixel area: Sampling from a function. (line 16) * Function groups: Coding conventions. (line 153) * Functions for user interface: Mandatory source code files. (line 102) * FWHM: NoiseChisel optimization for detection. (line 104) * FWHM <1>: Morphology measurements nonparametric. (line 49) * FWHM <2>: PSF. (line 31) * Gaia catalog: Available databases. (line 92) * GAIA Data Release (2 or 3): Available databases. (line 177) * Gain: Instrumental noise. (line 23) * Gain <1>: Brightness flux magnitude. (line 6) * Galactic coordinate system: Keyword inspection and manipulation. (line 510) * Galactic coordinate system <1>: Coordinate conversion operators. (line 6) * Galactic coordinate system <2>: World Coordinate System. (line 50) * Galaxy kinematics: Continuum subtraction. (line 71) * Galaxy profiles: Galaxies. (line 6) * Galileo, Galilei: Science and its tools. (line 124) * Gaussian: Invoking astnoisechisel. (line 28) * Gaussian <1>: Invoking astsegment. (line 31) * Gaussian <2>: Invoking astmkcatalog. (line 33) * Gaussian distribution: Quantifying signal in a tile. (line 18) * Gaussian distribution <1>: PSF. (line 41) * Gaussian FWHM: PSF. (line 54) * Gaussian noise: Least squares fitting. (line 36) * GCC: Invoking astbuildprog. (line 204) * GCC: GNU Compiler Collection: New to GNU/Linux?. (line 40) * GCC: GNU Compiler Collection <1>: Summary and example on libraries. (line 30) * GCC: GNU Compiler Collection <2>: Invoking astbuildprog. (line 72) * GCC: GNU Compiler Collection <3>: Invoking astbuildprog. (line 128) * GCC: GNU Compiler Collection <4>: Coding conventions. (line 34) * Gedit: Sufi simulates a detection. (line 562) * General file operations: Data containers. (line 6) * Generalized de Vaucouleur profile: Galaxies. (line 6) * Gérard de Vaucouleurs: Galaxies. (line 11) * Ghostscript fonts: Drawing with vector graphics. (line 303) * Git: Optional dependencies. (line 68) * Git <1>: Version controlled source. (line 6) * Git <2>: Gnuastro configure options. (line 99) * Git <3>: Table input output. (line 226) * Git <4>: Git wrappers. (line 6) * Global warming: Separate shell variables for multiple outputs. (line 30) * GNOME: NoiseChisel output. (line 37) * GNOME 3: Command-line interface. (line 19) * Gnomonic (tangential) projection: Align pixels with WCS considering distortions. (line 164) * Gnomonic projection (TAN in WCS): Area of non-blank pixels on sky. (line 44) * GNU Astronomy Utilities (Gnuastro): Introduction. (line 6) * GNU Autoconf: Bootstrapping dependencies. (line 72) * GNU Autoconf <1>: Bootstrapping. (line 71) * GNU Autoconf <2>: Synchronizing. (line 29) * GNU Autoconf <3>: Configuring. (line 21) * GNU Autoconf <4>: Building and debugging. (line 6) * GNU Autoconf Archive: Bootstrapping dependencies. (line 81) * GNU Autoconf Archive <1>: Bootstrapping. (line 6) * GNU Automake: Bootstrapping dependencies. (line 61) * GNU Automake <1>: Bootstrapping. (line 71) * GNU Automake <2>: Building and debugging. (line 6) * GNU Autoreconf: Separate build and source directories. (line 85) * GNU AWK: Angular coverage on the sky. (line 146) * GNU AWK <1>: Aperture photometry. (line 15) * GNU AWK <2>: Reddest clumps cutouts and parallelization. (line 6) * GNU AWK <3>: Extract clumps and objects. (line 71) * GNU AWK <4>: Standard input. (line 41) * GNU AWK <5>: Table. (line 23) * GNU AWK <6>: Invoking asttable. (line 149) * GNU AWK <7>: Invoking astarithmetic. (line 294) * GNU AWK <8>: Invoking aststatistics. (line 114) * GNU AWK <9>: Single value measurements. (line 147) * GNU AWK <10>: Installed scripts. (line 51) * GNU AWK <11>: Sort FITS files by night. (line 66) * GNU AWK <12>: Table input output. (line 181) * GNU Bash: Command-line interface. (line 53) * GNU Bash <1>: Writing scripts to automate the steps. (line 26) * GNU Bash <2>: Installation directory. (line 112) * GNU Bash <3>: Installation directory. (line 122) * GNU Bash <4>: Installed scripts. (line 15) * GNU Bash <5>: Program design philosophy. (line 27) * GNU Bash <6>: Mandatory source code files. (line 154) * GNU Binutils: Linking. (line 16) * GNU build system: Mandatory dependencies. (line 6) * GNU build system <1>: Bootstrapping. (line 71) * GNU build system <2>: Installation directory. (line 149) * GNU build system <3>: Configure and build in RAM. (line 34) * GNU build system <4>: Separate build and source directories. (line 13) * GNU build system <5>: Headers. (line 153) * GNU build system <6>: Headers. (line 162) * GNU build system <7>: Building and debugging. (line 6) * GNU C library: New to GNU/Linux?. (line 40) * GNU C library <1>: Bootstrapping dependencies. (line 28) * GNU C library <2>: Bootstrapping. (line 71) * GNU C library <3>: Gnuastro configure options. (line 72) * GNU C library <4>: Configure and build in RAM. (line 34) * GNU C library <5>: Info. (line 28) * GNU C Library: Keyword inspection and manipulation. (line 495) * GNU C library <6>: Adding new columns to MakeCatalog. (line 61) * GNU C library <7>: Linking. (line 112) * GNU C library <8>: Labeled datasets. (line 266) * GNU C library <9>: Coding conventions. (line 83) * GNU C library <10>: Mandatory source code files. (line 69) * GNU coding standards: Introduction. (line 6) * GNU coding standards <1>: Coding conventions. (line 6) * GNU coding standards <2>: Coding conventions. (line 132) * GNU Compiler Collection (GCC): New to GNU/Linux?. (line 40) * GNU Compiler Collection (GCC) <1>: Summary and example on libraries. (line 30) * GNU Compiler Collection (GCC) <2>: Invoking astbuildprog. (line 72) * GNU Compiler Collection (GCC) <3>: Invoking astbuildprog. (line 128) * GNU Compiler Collection (GCC) <4>: Coding conventions. (line 34) * GNU Coreutils: Multi-threaded operations. (line 6) * GNU Coreutils <1>: Invoking asttable. (line 562) * GNU Coreutils <2>: Program design philosophy. (line 18) * GNU CPP: Invoking astbuildprog. (line 89) * GNU Debugger: Gnuastro configure options. (line 13) * GNU Debugger (GDB): Separate build and source directories. (line 95) * GNU Emacs: Command-line interface. (line 76) * GNU Emacs <1>: Sufi simulates a detection. (line 562) * GNU Emacs <2>: Info. (line 28) * GNU Emacs <3>: Coding conventions. (line 146) * GNU Emacs <4>: Coding conventions. (line 153) * GNU Emacs <5>: Coding conventions. (line 192) * GNU free documentation license: Science and its tools. (line 105) * GNU Free Documentation License: Your rights. (line 40) * GNU Free Documentation License <1>: GNU Free Doc License. (line 6) * GNU General Public License (GPL): Science and its tools. (line 105) * GNU General Public License (GPL) <1>: Your rights. (line 40) * GNU General Public License (GPL) <2>: GNU General Public License. (line 6) * GNU Grep: --help. (line 47) * GNU Grep <1>: Keyword inspection and manipulation. (line 169) * GNU Grep <2>: CosmicCalculator basic cosmology calculations. (line 32) * GNU Grep <3>: The TEMPLATE program. (line 80) * GNU Gzip: NoiseChisel output. (line 154) * GNU Gzip <1>: Segment output. (line 113) * GNU help2man: Bootstrapping dependencies. (line 117) * GNU Info: Accessing documentation. (line 18) * GNU Info <1>: Info. (line 6) * GNU Libtool: Optional dependencies. (line 29) * GNU Libtool <1>: Bootstrapping dependencies. (line 105) * GNU Libtool <2>: Bootstrapping. (line 71) * GNU Libtool <3>: Known issues. (line 92) * GNU Libtool <4>: Linking. (line 6) * GNU Libtool <5>: Linking. (line 64) * GNU Libtool <6>: Linking. (line 147) * GNU Libtool <7>: BuildProgram. (line 15) * GNU Libtool <8>: Invoking astbuildprog. (line 107) * GNU Libtool <9>: Building and debugging. (line 6) * GNU Make: Reddest clumps cutouts and parallelization. (line 78) * GNU Make <1>: Optional dependencies. (line 58) * GNU Make <2>: How to run simultaneous operations. (line 65) * GNU Make <3>: Makefile extensions. (line 13) * GNU Make <4>: Invoking astbuildprog. (line 64) * GNU Parallel: How to run simultaneous operations. (line 15) * GNU Portability Library (Gnulib): Bootstrapping dependencies. (line 28) * GNU Portability Library (Gnulib) <1>: Bootstrapping. (line 6) * GNU Portability Library (Gnulib) <2>: Gnuastro configure options. (line 72) * GNU Portability Library (Gnulib) <3>: Known issues. (line 37) * GNU Portability Library (Gnulib) <4>: Coding conventions. (line 83) * GNU Savannah: Gnuastro project webpage. (line 6) * GNU Scientific Library: GNU Scientific Library. (line 6) * GNU Scientific Library <1>: Generating random numbers. (line 26) * GNU Scientific Library <2>: Least squares fitting. (line 16) * GNU Scientific Library <3>: Permutations. (line 16) * GNU Scientific Library <4>: Interpolation. (line 16) * GNU Scientific Library <5>: Interpolation. (line 138) * GNU SED: Installed scripts. (line 51) * GNU Sed: Sort FITS files by night. (line 66) * GNU software documentation: Info. (line 22) * GNU style options: Options. (line 6) * GNU Tar: Quick start. (line 6) * GNU Texinfo: Your rights. (line 6) * GNU Texinfo <1>: Bootstrapping dependencies. (line 93) * GNU Texinfo <2>: Bootstrapping. (line 71) * GNU Texinfo <3>: A4 print book. (line 13) * GNU Texinfo <4>: Known issues. (line 87) * GNU Wget: Downloading and validating input data. (line 19) * GNU/Linux: New to GNU/Linux?. (line 40) * Gnuastro coding convention: Coding conventions. (line 6) * Gnuastro common options: Common options. (line 6) * Gnuastro major version number: GNU Astronomy Utilities 1.0. (line 6) * Gnuastro program structure convention: Program source. (line 6) * Gnuastro project page: Report a bug. (line 84) * Gnuastro test scripts: Test scripts. (line 6) * Gnulib: Program design philosophy. (line 6) * Gnulib: GNU Portability Library: Bootstrapping dependencies. (line 28) * Gnulib: GNU Portability Library <1>: Bootstrapping. (line 6) * Gnulib: GNU Portability Library <2>: Gnuastro configure options. (line 72) * Gnulib: GNU Portability Library <3>: Known issues. (line 37) * Gnulib: GNU Portability Library <4>: Coding conventions. (line 83) * GPL: GNU General Public License. (line 6) * GPL Ghostscript: Optional dependencies. (line 13) * GPL Ghostscript <1>: Optional dependencies. (line 106) * GPL Ghostscript <2>: Known issues. (line 78) * GPL Ghostscript <3>: Recognized file formats. (line 113) * Gradient over pixel area: Sampling from a function. (line 16) * Graphic user interface: Command-line interface. (line 6) * Graphics (raster): Raster and Vector graphics. (line 6) * Graphics (vector): Raster and Vector graphics. (line 14) * Gravitational constant ($g$): Constants. (line 26) * Gravitational lensing: Warp. (line 13) * Gray night: Random number generators. (line 168) * Grayscale: Colormaps for single-channel pixels. (line 23) * Great circle: Coordinate and border operators. (line 166) * Groups of similar functions: Coding conventions. (line 153) * GSL: Least squares fitting. (line 16) * GUI: graphic user interface: Command-line interface. (line 6) * GUI: repeating operations: Command-line interface. (line 44) * Gzip: Quick start. (line 6) * Gzip <1>: Release tarball. (line 37) * H-alpha: Viewing spectra and redshifted lines. (line 70) * H-alpha <1>: Spectral lines library. (line 10) * H-beta: Viewing spectra and redshifted lines. (line 151) * H-beta <1>: Spectral lines library. (line 10) * H-delta: Spectral lines library. (line 10) * H-epsilon: Spectral lines library. (line 10) * H-gamma: Spectral lines library. (line 10) * Halted program: Report a bug. (line 6) * Hammer-Aitoff projection: Align pixels with WCS considering distortions. (line 192) * Hashbang: Writing scripts to automate the steps. (line 78) * HDD: Configure and build in RAM. (line 12) * HDU: Arguments and options. (line 53) * HDU <1>: Input output options. (line 35) * HDU <2>: Invoking astfits. (line 43) * Header data unit: Arguments and options. (line 53) * Header data unit <1>: Input output options. (line 35) * Header file: Coding conventions. (line 67) * HEALPix: Invoking astfits. (line 43) * HEALPix <1>: FITS HDUs. (line 62) * HEALPix polar projection: Align pixels with WCS considering distortions. (line 214) * HEALPix projection: Align pixels with WCS considering distortions. (line 212) * Help: Getting help. (line 6) * help-gnuastro mailing list: help-gnuastro mailing list. (line 6) * help-gnuastro@gnu.org: help-gnuastro mailing list. (line 13) * Hexadecimal encoding: ConvertType input and output. (line 113) * Hexadecimal encoding <1>: EPS files. (line 98) * Hipparchus of Nicaea: Brightness flux magnitude. (line 48) * Histogram: Histogram and Cumulative Frequency Plot. (line 6) * Histogram <1>: Sky value misconceptions. (line 22) * Histogram <2>: Statistical operations. (line 375) * Histogram, 2D: Column statistics color-magnitude diagram. (line 32) * Histogram, 2D <1>: 2D Histograms. (line 6) * Histogram, 2D <2>: Statistical operations. (line 401) * history: Writing scripts to automate the steps. (line 15) * HOME: Installation directory. (line 65) * HOME/.local/: Installation directory. (line 65) * Homebrew: Dependencies from package managers. (line 123) * Homogeneous coordinates: Linear warping basics. (line 63) * Homography: Linear warping basics. (line 93) * Hook (programming): Larger steps sizes for better calibration. (line 86) * Hook (programming) <1>: Accounting for non-exposed pixels. (line 24) * HSV: Hue Saturation Value: Colormaps for single-channel pixels. (line 6) * HSV: Hue Saturation Value <1>: Pixel visualization. (line 28) * Hubble Space Telescope (HST): General program usage tutorial. (line 6) * Hubble Space Telescope (HST) <1>: Tessellation. (line 54) * Hubble Space Telescope (HST) <2>: Crop. (line 13) * Hubble Space Telescope (HST) <3>: Warp. (line 53) * Hubble Space Telescope (HST) <4>: Linear warping basics. (line 51) * Huber function (robust weight): Fitting options. (line 132) * Hue, saturation, value: Pixel visualization. (line 28) * Hyper Suprime-Cam: Tessellation. (line 54) * Hyperbolic functions: Trigonometric and hyperbolic operators. (line 57) * Hyperspectral imaging: Detecting lines and extracting spectra in 3D data. (line 6) * IAU, international astronomical union: Fits. (line 13) * ICRS: Coordinate conversion operators. (line 55) * Identifying outliers: Quantifying signal in a tile. (line 134) * IEEE 754: Invoking asttable. (line 771) * IEEE 754 <1>: Invoking asttable. (line 812) * IEEE 754 (floating point): Printing floating point numbers. (line 42) * IFU: Detecting lines and extracting spectra in 3D data. (line 6) * IFU: Integral Field Unit: Dimensionality changing operators. (line 245) * IFU: Integral Field Unit <1>: Morphology measurements nonparametric. (line 42) * IFU: Integral Field Unit <2>: Measurements per slice spectra. (line 6) * Image: Pixel colors. (line 6) * Image annotation: Annotations for figure in paper. (line 6) * Image blurring: PSF. (line 19) * Image edges: Resampling. (line 38) * Image format conversion: ConvertType. (line 6) * Image mosaic: Crop. (line 13) * Image mosaic <1>: Warp. (line 29) * Image noise: Noise basics. (line 6) * Image tiles: Crop. (line 13) * Image transformations: MakeProfiles. (line 41) * Image's sky coverage: HDU information and manipulation. (line 100) * ImageMagick: Bootstrapping dependencies. (line 165) * Imaging surveys: Crop. (line 13) * Immediate neighbors: Binary datasets. (line 13) * Inconsistent results: Report a bug. (line 6) * Individual profiles: MakeProfiles output dataset. (line 167) * info-gnuastro@gnu.org: Synchronizing. (line 29) * INFOPATH: Installation directory. (line 164) * Input/Output, file: Configure and build in RAM. (line 6) * Inside-out construction: Defining an ellipse and ellipsoid. (line 68) * Inside-out construction <1>: Sampling from a function. (line 44) * Install directory: Installation directory. (line 149) * Install with no superuser access: Installation directory. (line 6) * Installation: Installation. (line 6) * Installation, customizing: Configuring. (line 12) * Installed help methods: Getting help. (line 22) * Instrumental noise: Instrumental noise. (line 6) * INT: Options. (line 35) * Integer overflow: Integer benefits and pitfalls. (line 57) * Integer, Signed: Numeric data types. (line 16) * Integral field unit: Detecting lines and extracting spectra in 3D data. (line 6) * Integral Field Unit: Morphology measurements nonparametric. (line 42) * Integral field unit (IFU): Dimensionality changing operators. (line 245) * Integral field unit (IFU) <1>: Measurements per slice spectra. (line 6) * Integration over pixel: Sampling from a function. (line 16) * Integration to infinity: Profile magnitude. (line 15) * Internal default value: Configuration files. (line 15) * Internally stored option value: Multi-threaded operations. (line 16) * Interpolation: Resampling. (line 23) * Interpolation <1>: Interpolation. (line 6) * Interpolation, bi-linear: Resampling. (line 23) * Interpolation, bicubic: Resampling. (line 23) * Interpolation, bicubic <1>: Quantifying signal in a tile. (line 152) * Interpolation, nearest-neighbor: Quantifying signal in a tile. (line 152) * Interpolation: Akima spline: Interpolation. (line 118) * Interpolation: monotonic: Interpolation. (line 126) * Interpolation: Polynomial: Interpolation. (line 98) * Interpolation: Spline: Interpolation. (line 104) * Interpolation: Steffen: Interpolation. (line 126) * Intervals, histogram: Histogram and Cumulative Frequency Plot. (line 21) * IRAF: Recognized file formats. (line 15) * ISO C90: Why C. (line 15) * Issue: Gnuastro project webpage. (line 6) * iTerm: Drawing with vector graphics. (line 268) * IVOA: Query. (line 6) * Jansky (Jy): Unit conversion library. (line 103) * Janskys (Jy): Brightness flux magnitude. (line 77) * Java programming language: Why C. (line 6) * Java Virtual Machine (JVM): Why C. (line 71) * Jaynes E. T.: Science and its tools. (line 211) * Johnson filters: Zero point of an image. (line 21) * Johnson vs. SDSS filters: Zero point of an image. (line 21) * JPEG compression quality: ConvertType input and output. (line 129) * JPEG compression quality <1>: JPEG files. (line 45) * JPEG format: Optional dependencies. (line 76) * JPEG format <1>: Gnuastro configure options. (line 105) * JPEG format <2>: Recognized file formats. (line 29) * JPEG format <3>: JPEG files. (line 6) * JVM: Java virtual machine: Why C. (line 71) * K-d tree: K-d tree. (line 6) * k-d tree matching: Matching. (line 117) * Ken Thomson: Science and its tools. (line 171) * Kernel, convolution: Convolve. (line 6) * Kernel, convolution <1>: FITS arrays. (line 69) * Kernel, Linux: Memory management. (line 167) * Kernighan, Brian: Why C. (line 15) * Kinematics (galaxies): Continuum subtraction. (line 71) * Labeling: NoiseChisel. (line 6) * Language of command-line: Numeric locale. (line 6) * Large astronomical images: Crop. (line 6) * last-in-first-out: Linked lists. (line 47) * last-in-first-out <1>: FITS header keywords. (line 23) * LaTeX: Bootstrapping dependencies. (line 126) * LaTeX <1>: Recognized file formats. (line 77) * LaTeX <2>: Program design philosophy. (line 27) * Lawrence Livermore National Laboratory: Multithreaded programming. (line 20) * LC_ALL: Numeric locale. (line 6) * LC_NUMERIC: Numeric locale. (line 6) * LD_LIBRARY_PATH: Installation directory. (line 164) * LD_LIBRARY_PATH <1>: Known issues. (line 62) * LD_LIBRARY_PATH <2>: PGPLOT. (line 62) * LDFLAGS: Known issues. (line 24) * LDFLAGS <1>: Invoking astbuildprog. (line 204) * Learning GNU Info: Info. (line 22) * Least squares fitting: Least squares fitting. (line 6) * Least squares fitting <1>: Fitting functions. (line 6) * Lensing simulations: MakeProfiles. (line 41) * Leonhard Euler: Circles and the complex plane. (line 16) * less: --help. (line 33) * libgit2: Optional dependencies. (line 68) * libgit2 <1>: Gnuastro configure options. (line 99) * libgit2 <2>: Git wrappers. (line 6) * libjpeg: Optional dependencies. (line 76) * libjpeg <1>: Gnuastro configure options. (line 105) * Library search directory: Installation directory. (line 164) * Library: shared: Linking. (line 64) * libtiff: Optional dependencies. (line 88) * libtiff <1>: Gnuastro configure options. (line 111) * Light year: Constants. (line 38) * Light-year: Unit conversion operators. (line 159) * Light-year <1>: Unit conversion library. (line 137) * Limit, object/clump magnitude: Quantifying measurement limits. (line 6) * Limit, surface brightness: Image surface brightness limit. (line 6) * Limit, surface brightness <1>: Surface brightness limit of image. (line 38) * Limit, Surface brightness: MakeCatalog output. (line 31) * Line terminator, CRLF: Text files. (line 11) * Linear spatial filtering: Convolution process. (line 16) * Linked list: Linked lists. (line 6) * Linked list <1>: FITS header keywords. (line 23) * Linking: Linking. (line 31) * Linking: Dynamic: Linking. (line 38) * Linking: dynamic: Linking. (line 64) * Linking: Static: Linking. (line 38) * Linux: New to GNU/Linux?. (line 40) * Linux kernel: Configure and build in RAM. (line 34) * Linux kernel <1>: Memory management. (line 167) * Linux Mint: Dependencies from package managers. (line 51) * Locale: Numeric locale. (line 6) * Long option abbreviation: Options. (line 73) * Long outputs: --help. (line 22) * Lord Kelvin: Science and its tools. (line 187) * Lorentzian function (robust weight): Fitting options. (line 125) * Low level programming: Why C. (line 105) * Luminosity: Brightness flux magnitude. (line 14) * Lyman limit: Spectral lines library. (line 10) * Lyman-alpha: Spectral lines library. (line 10) * Lzip: Quick start. (line 6) * Lzip <1>: Release tarball. (line 37) * M51: Detecting large extended targets. (line 26) * macOS: Dependencies from package managers. (line 123) * macOS terminal 24-bit color: Drawing with vector graphics. (line 268) * MacPorts: Dependencies from package managers. (line 123) * Macro: Headers. (line 89) * MAD (median absolute deviation): MAD clipping. (line 6) * MAD (Median absolute deviation): Stacking operators. (line 90) * MAD (Median absolute deviation) <1>: Statistical operations. (line 129) * Magnitude: Unit conversion library. (line 60) * Magnitude <1>: Unit conversion library. (line 66) * Magnitude <2>: Unit conversion library. (line 72) * Magnitude (nanomaggy): Unit conversion library. (line 117) * Magnitude limit: Magnitude limit of image. (line 6) * Magnitude zero point: Brightness flux magnitude. (line 65) * Magnitude, AB: Unit conversion operators. (line 92) * Magnitude, AB <1>: Brightness flux magnitude. (line 77) * Magnitude, AB <2>: Unit conversion library. (line 103) * Magnitude, object/clump detection limit: Quantifying measurement limits. (line 6) * Magnitude, upper limit: Upper limit magnitude of each detection. (line 31) * Magnitudes from flux: Brightness flux magnitude. (line 40) * Mailing list archives: Report a bug. (line 78) * Mailing list archives <1>: help-gnuastro mailing list. (line 13) * Mailing list: bug-gnuastro: Report a bug. (line 78) * Mailing list: bug-gnuastro <1>: Gnuastro project webpage. (line 19) * Mailing list: gnuastro-commits: Developing mailing lists. (line 37) * Mailing list: gnuastro-commits <1>: Commit guidelines. (line 34) * Mailing list: gnuastro-commits <2>: Commit guidelines. (line 50) * Mailing list: gnuastro-commits <3>: Commit guidelines. (line 72) * Mailing list: gnuastro-devel: Gnuastro project webpage. (line 58) * Mailing list: gnuastro-devel <1>: Developing mailing lists. (line 13) * Mailing list: help-gnuastro: help-gnuastro mailing list. (line 6) * Mailing list: info-gnuastro: Version numbering. (line 6) * Mailing list: info-gnuastro <1>: Announcements. (line 6) * Mailing list: info-gnuastro <2>: Synchronizing. (line 29) * main function: Mandatory source code files. (line 19) * Main parameters C structure: Mandatory source code files. (line 30) * main.c: Mandatory source code files. (line 18) * main.h: Mandatory source code files. (line 29) * Major version number: Version numbering. (line 6) * Make: How to run simultaneous operations. (line 38) * Make <1>: Makefile extensions. (line 6) * make check: Tests. (line 6) * Makefile: Reddest clumps cutouts and parallelization. (line 78) * MakeProfiles (astmkprof): MakeProfiles. (line 6) * Making a distribution package: Developer's checklist. (line 30) * Making profiles pixel by pixel: Defining an ellipse and ellipsoid. (line 68) * Man pages: Man pages. (line 6) * Management hub: Gnuastro project webpage. (line 6) * Mandatory arguments: Arguments and options. (line 33) * Mandatory arguments <1>: --usage. (line 6) * Manhattan distance: Dimensions. (line 91) * Manhattan metric: Processing options. (line 133) * MANPATH: Installation directory. (line 164) * Mask (flag) images: Bitwise operators. (line 26) * Matching: Matching. (line 6) * Matching by k-d tree: Matching. (line 117) * Mathematical morphology: Mathematical morphology operators. (line 6) * Mathematical morphology <1>: Binary datasets. (line 77) * Matplotlib: Annotations for figure in paper. (line 36) * matplotlib: Pixel visualization. (line 41) * Matplotlib, Python: Program design philosophy. (line 27) * Matplotlib, Python <1>: PGPLOT. (line 14) * Matrix: Linear warping basics. (line 17) * Matrix (covariance): Fitting functions. (line 93) * Matrix multiplication: Merging multiple warpings. (line 6) * Matrix, adjacency: Binary datasets. (line 165) * Maximum: Statistical operations. (line 60) * Mean: Quantifying signal in a tile. (line 43) * Mean <1>: Statistical operations. (line 73) * Median: Quantifying signal in a tile. (line 43) * Median <1>: Statistical operations. (line 114) * Median absolute deviation (MAD): MAD clipping. (line 6) * Median absolute deviation (MAD) <1>: Stacking operators. (line 90) * Median absolute deviation (MAD) <2>: Statistical operations. (line 129) * Memory management: Memory management. (line 6) * Memory management <1>: Gnuastro's thread related functions. (line 97) * Memory-mapped file: Memory management. (line 63) * Memory, non-volatile: Memory management. (line 6) * Memory, volatile: Memory management. (line 24) * Mercator projection: Align pixels with WCS considering distortions. (line 184) * Meridian: Coordinate and border operators. (line 166) * Meta image: Pixel information images. (line 13) * Meta-data: Fits. (line 26) * Metacharacters on the command-line In case your arguments or option values contain any of the shell's meta-characters, you have to quote them.: Arguments and options. (line 47) * Metadata: Sufi simulates a detection. (line 151) * Metric: Manhattan, Taxicab, Radial: Processing options. (line 133) * MgII doublet: Spectral lines library. (line 10) * Michelson, Albert. A.: Science and its tools. (line 193) * Minimum: Statistical operations. (line 53) * Minor version number: Version numbering. (line 6) * Mixing pixel values: Convolve. (line 25) * Mixing pixel values <1>: Resampling. (line 6) * Möbius, August. F.: Linear warping basics. (line 63) * mock.fits: Tests. (line 6) * Mode of a distribution: Sky value misconceptions. (line 22) * Modeling: Data modeling. (line 6) * Modeling stars: Stars. (line 6) * Modifying print book: A4 print book. (line 6) * Modularity: Review of library fundamentals. (line 18) * Moffat beta: PSF. (line 63) * Moffat function: PSF. (line 57) * Moffat FWHM: PSF. (line 68) * Moiré pattern or fringes: Moire pattern in stacking and its correction. (line 6) * Mollweide projection: Align pixels with WCS considering distortions. (line 190) * Moments: Measuring elliptical parameters. (line 15) * Monte carlo integration: Sampling from a function. (line 26) * Mosaicing: Crop. (line 13) * Mosaicing <1>: Warp. (line 29) * Multi-Extension FITS: Viewing FITS file contents with DS9 or TOPCAT. (line 6) * Multi-threaded operation: Qsort functions. (line 28) * Multi-threaded programs: Multi-threaded operations. (line 6) * Multi-value columns (vector): Vector columns. (line 6) * Multiple file opening, reentrancy: CFITSIO. (line 13) * Multiplication, Matrix: Linear warping basics. (line 17) * Multiplication, matrix: Merging multiple warpings. (line 6) * Multithreaded programming: Multithreaded programming. (line 6) * MUSE: Detecting lines and extracting spectra in 3D data. (line 6) * MUSE <1>: Vector columns. (line 15) * Names of executables: Executable names. (line 6) * Names, customize: Executable names. (line 28) * Names, programs: Naming convention. (line 6) * NaN: Gnuastro text table format. (line 77) * NaN <1>: Stacking operators. (line 19) * NaN <2>: Linear warps to be called explicitly. (line 136) * NaN <3>: Generating histograms and cumulative frequency plots. (line 195) * NaN <4>: Detection options. (line 83) * NaN <5>: Library blank values. (line 17) * NaN <6>: Library blank values. (line 29) * NaN <7>: Library blank values. (line 81) * NaN <8>: Library blank values. (line 85) * NaN <9>: FITS arrays. (line 69) * NaN <10>: Qsort functions. (line 13) * Nanomaggy: Image surface brightness limit. (line 108) * Nanomaggy <1>: Unit conversion operators. (line 100) * Nanomaggy <2>: Unit conversion operators. (line 113) * Nanomaggy <3>: Unit conversion operators. (line 121) * Nanomaggy <4>: Unit conversion library. (line 117) * Narrow-band image: Dimensionality changing operators. (line 245) * NASA/IPAC Extragalactic Database (NED): Available databases. (line 110) * Naval Observatory Merged Astrometric Dataset: Available databases. (line 177) * Navigating source files: Program source. (line 6) * Nearest-neighbor interpolation: Quantifying signal in a tile. (line 152) * Necessary parameters: Configuration files. (line 6) * NED (NASA/IPAC Extragalactic Database): Available databases. (line 110) * Neighborhood: Convolve. (line 6) * Neighbors, immediate: Binary datasets. (line 13) * NGC5195: Detecting large extended targets. (line 26) * Nights (dark or gray): Random number generators. (line 168) * NII doublet: Viewing spectra and redshifted lines. (line 95) * NII doublet <1>: Spectral lines library. (line 10) * No access to superuser install: Installation directory. (line 6) * Noise: Noise basics. (line 6) * Noise <1>: Quantifying signal in a tile. (line 18) * Noise (correlated): Measuring the dataset limits. (line 70) * Noise (Gaussian): Least squares fitting. (line 36) * Noise simulation: Photon counting noise. (line 65) * Noise, correlated: NoiseChisel optimization for detection. (line 39) * Noise, correlated <1>: Surface brightness limit of image. (line 98) * Noise, correlated <2>: Upper limit surface brightness of image. (line 6) * Noise, instrumental: Instrumental noise. (line 6) * Non-commutative operations: Merging multiple warpings. (line 6) * Non-linear distortion: Align pixels with WCS considering distortions. (line 6) * Non-linear distortion <1>: Interpolation. (line 254) * Non-linearity (CCDs): Uniting the different PSF components. (line 92) * Non-volatile memory: Memory management. (line 6) * Normalizing histogram: Histogram and Cumulative Frequency Plot. (line 21) * nproc: Multi-threaded operations. (line 6) * Number: Statistical operations. (line 47) * Number count: Measuring the dataset limits. (line 203) * Number of CPU threads to use: Operating mode options. (line 292) * Number of CPU threads to use <1>: Configuration files. (line 15) * Number of threads available: Multi-threaded operations. (line 16) * Number, version: Version numbering. (line 6) * Numbers, complex: Invoking astconvolve. (line 114) * Numbers, psuedo-random: Generating random numbers. (line 14) * Numbers, random: Generating random numbers. (line 6) * Numpy: Optional dependencies. (line 112) * O-H lines (from atmosphere): Sky lines in optical IFUs. (line 6) * Object magnitude limit: Quantifying measurement limits. (line 6) * Object oriented programming: Why C. (line 27) * Observing strategy: Pointing pattern design. (line 6) * Offset (in observing strategy): Pointing pattern design. (line 6) * OII doublet: Spectral lines library. (line 10) * OIII doublet: Spectral lines library. (line 10) * On/Off options: Options. (line 25) * Online help: Getting help. (line 13) * Opening: Achieved surface brightness level. (line 14) * Opening (Mathematical morphology): Binary datasets. (line 107) * Opening multi-extension FITS: Viewing FITS file contents with DS9 or TOPCAT. (line 6) * OpenMP: Multithreaded programming. (line 32) * openSUSE: Dependencies from package managers. (line 185) * Operations on files: Data containers. (line 6) * Operations, non-commutative: Merging multiple warpings. (line 6) * Operator, structure de-reference: Mandatory source code files. (line 56) * Optical distortion: Warp. (line 47) * Optimization: Invoking astbuildprog. (line 128) * Optimization <1>: Building and debugging. (line 40) * Optimization flag: Coding conventions. (line 34) * Option values: Options. (line 56) * Optional and mandatory tokens: --usage. (line 6) * Options: Invoking astarithmetic. (line 280) * Options common to all programs: Common options. (line 6) * Options to programs: Arguments and options. (line 6) * Options, abbreviation: Options. (line 73) * Options, GNU style: Options. (line 6) * Options, on/off: Options. (line 25) * Options, repeated: Options. (line 81) * Options, short (-) and long (--): Options. (line 6) * Order in search directory: Installation directory. (line 209) * Orthographic/synthesis projection: Align pixels with WCS considering distortions. (line 168) * Outlier: Clipping outliers. (line 6) * Outlier <1>: Single value measurements. (line 135) * Outliers: Quantifying signal in a tile. (line 134) * Output file names, automatic: Automatic output. (line 6) * Output FITS headers: Output FITS files. (line 6) * Output, wrong: Report a bug. (line 6) * Overflow, integer: Integer benefits and pitfalls. (line 57) * Oversample: Sufi simulates a detection. (line 332) * Oversampling: Oversampling. (line 6) * p: Mandatory source code files. (line 45) * Package managers: Dependencies from package managers. (line 6) * pacman: Dependencies from package managers. (line 155) * Pan-STARRS Data Release 1: Available databases. (line 177) * Paper size, A4: A4 print book. (line 6) * Paper size, US letter: A4 print book. (line 6) * Parabolic projection: Align pixels with WCS considering distortions. (line 188) * Parametric PSFs: PSF. (line 31) * Parsecs: Unit conversion operators. (line 138) * Parsecs <1>: Unit conversion library. (line 109) * PATH: Installation directory. (line 72) * PDF: Recognized file formats. (line 102) * PDF <1>: Pixel visualization. (line 139) * PDF <2>: EPS files. (line 105) * PDF <3>: PDF files. (line 52) * permutation: Permutations. (line 6) * Permutation: Matching. (line 37) * PGFPlots: Annotations for figure in paper. (line 20) * PGFPlots (LaTeX package): Column statistics color-magnitude diagram. (line 90) * PGFPlots (LaTeX package) <1>: 2D histogram as an image. (line 78) * PGFplots in TeX or LaTeX: Program design philosophy. (line 27) * PGFplots in TeX or LaTeX <1>: PGPLOT. (line 14) * PGPLOT: PGPLOT. (line 6) * Phase angle: Invoking astconvolve. (line 114) * photo-electrons: Sky value definition. (line 49) * Photoelectrons: Resampling. (line 6) * Photon counting noise: Photon counting noise. (line 6) * Photon-starved images: Random number generators. (line 157) * Pi: Constants. (line 6) * Pi <1>: Constants. (line 18) * Picture element: Resampling. (line 6) * Pipe: --help. (line 33) * Pixel: Detecting lines and extracting spectra in 3D data. (line 6) * Pixel <1>: Resampling. (line 6) * Pixel by pixel making of profiles: Defining an ellipse and ellipsoid. (line 68) * Pixel mixing: Pixel information images. (line 25) * Pixel mixing <1>: Convolve. (line 25) * Pixel mixing <2>: Resampling. (line 6) * Pixel mixing <3>: Resampling. (line 58) * Pixel scale: Moire pattern in stacking and its correction. (line 97) * Pixel scale <1>: Align pixels with WCS considering distortions. (line 105) * Pixel scale <2>: Surface brightness limit of image. (line 64) * Pixelated graphics: Recognized file formats. (line 29) * Pixels: Pixel colors. (line 6) * Plain text: Recognized file formats. (line 128) * Plank's constant ($h$): Constants. (line 30) * Plate carree projection: Align pixels with WCS considering distortions. (line 182) * Plot, scatter: Column statistics color-magnitude diagram. (line 32) * Plot: contour: Contour options. (line 12) * Plotting directly in C: PGPLOT. (line 6) * Plugin: Linking. (line 64) * PNG standard: Colormaps for single-channel pixels. (line 54) * Point (Vector graphics; PostScript): Marking objects for publication. (line 229) * Point (Vector graphics; PostScript) <1>: Drawing with vector graphics. (line 14) * Point pixels: Resampling. (line 23) * Point source: PSF. (line 6) * Point spread function: Tutorials. (line 37) * Point spread function <1>: PSF. (line 6) * Pointers: Pointers. (line 6) * Pointing: Moire pattern in stacking and its correction. (line 128) * Pointing <1>: Pointing pattern simulation. (line 41) * Pointings: Pointing pattern design. (line 6) * Poisson distribution: Photon counting noise. (line 6) * Poisson distribution <1>: Photon counting noise. (line 28) * Poisson noise: Larger steps sizes for better calibration. (line 42) * Poisson noise <1>: Random number generators. (line 110) * Poisson, Siméon Denis: Photon counting noise. (line 6) * Polyconic projection: Align pixels with WCS considering distortions. (line 204) * Polygon: Coordinate and border operators. (line 114) * Polygons, Concave: Crop options. (line 231) * Polygons, Concave <1>: Polygons. (line 11) * Polygons, Convex: Crop options. (line 231) * Polygons, Convex <1>: Polygons. (line 11) * Polynomial fit: Fitting functions. (line 151) * Polynomial fit (robust): Fitting options. (line 79) * Polynomial interpolation: Interpolation. (line 98) * Pooling: Pooling operators. (line 6) * Portable Document format: Recognized file formats. (line 102) * Portable script: Separate shell variables for multiple outputs. (line 85) * Portable shell: Installed scripts. (line 15) * Position angle: Measuring elliptical parameters. (line 132) * Position angle <1>: Defining an ellipse and ellipsoid. (line 6) * Position angle <2>: Dimensions. (line 105) * POSIX threads: Implementation of pthread_barrier. (line 6) * POSIX Threads: Gnuastro's thread related functions. (line 6) * POSIX threads library: Multithreaded programming. (line 20) * Post-fix notation: Reverse polish notation. (line 6) * Postage stamp images: Crop. (line 6) * PostScript: Recognized file formats. (line 66) * PostScript <1>: Pixel visualization. (line 139) * PostScript <2>: EPS files. (line 105) * PostScript <3>: PDF files. (line 52) * PostScript point: Drawing with vector graphics. (line 14) * PostScript vs. PDF: Recognized file formats. (line 102) * Pre-Processor: Headers. (line 6) * Pre-processor macros: Headers. (line 89) * Precedence, configuration files: Configuration file precedence. (line 6) * Precision of floats: Printing floating point numbers. (line 53) * prefix/etc/: System wide. (line 6) * Primary colors: Pixel colors. (line 6) * printf: Table input output. (line 31) * Printing floating point numbers: Printing floating point numbers. (line 6) * Prior WCS distortion: World Coordinate System. (line 36) * Probability density function: Photon counting noise. (line 22) * Probability density function <1>: Histogram and Cumulative Frequency Plot. (line 21) * Probability density function <2>: Sky value misconceptions. (line 22) * Profile, profile: Generate radial profile. (line 6) * Profiles, galaxies: Galaxies. (line 6) * progname-complete.bash: Mandatory source code files. (line 153) * progname.c, progname.h: Mandatory source code files. (line 122) * prognameparams: Mandatory source code files. (line 30) * Program crashing: Report a bug. (line 6) * Program names: Naming convention. (line 6) * Program structure convention: Program source. (line 6) * Programming, low level: Why C. (line 105) * ProgramName: Naming convention. (line 15) * Projections (world coordinate system): Align pixels with WCS considering distortions. (line 148) * Projective transformation: Linear warping basics. (line 93) * Proper distance: Distance on a 2D curved space. (line 138) * Provenance: Invoking asttable. (line 347) * Provenance <1>: Building new dataset and stack management. (line 33) * Pseudo color: Pixel colors. (line 22) * PSF: Tutorials. (line 37) * PSF <1>: Sufi simulates a detection. (line 40) * PSF <2>: PSF. (line 6) * PSF image size: PSF. (line 19) * PSF over-sample: Oversampling. (line 12) * PSF width: PSF. (line 31) * PSF, Moffat compared Gaussian: PSF. (line 70) * Psuedo-random numbers: Generating random numbers. (line 14) * pthread: Multi-threaded operations. (line 6) * pthread_barrier: Implementation of pthread_barrier. (line 6) * Ptolemy, Claudius: Sufi simulates a detection. (line 19) * Public domain: Your rights. (line 12) * Purity: Extract clumps and objects. (line 98) * Purity <1>: Completeness limit of each detection. (line 20) * Puzzle solving scientist: Science and its tools. (line 200) * PyPI: Optional dependencies. (line 122) * PyPI <1>: Gnuastro configure options. (line 117) * Python: Gnuastro configure options. (line 117) * Python Matplotlib: Program design philosophy. (line 27) * Python Matplotlib <1>: PGPLOT. (line 14) * Python programming language: Why C. (line 6) * Python3: Optional dependencies. (line 112) * qsort: Qsort functions. (line 6) * Quadrilateralized spherical cube projection: Align pixels with WCS considering distortions. (line 210) * Quality of compression in JPEG: ConvertType input and output. (line 129) * Quantile: Skewness caused by signal and its measurement. (line 191) * Quantile <1>: Quantifying signal in a tile. (line 43) * Quantile <2>: Input to Statistics. (line 40) * Quantile <3>: Detection options. (line 69) * Quantile <4>: Statistical operations. (line 155) * Quantile of the mean: Single value measurements. (line 61) * Query: Query. (line 6) * Qutb al-Din al-Shirazi: Fourier series historical background. (line 27) * Radial metric: Processing options. (line 133) * Radial profile: Vector columns. (line 15) * Radial profile <1>: Least squares fitting. (line 6) * Radial profile <2>: Generate radial profile. (line 6) * Radial profile on ellipse: Defining an ellipse and ellipsoid. (line 15) * Radio astronomy: Available databases. (line 82) * Radius, effective: Galaxies. (line 11) * RAM: Memory management. (line 24) * RAM <1>: Gnuastro's thread related functions. (line 97) * RAM <2>: Binary datasets. (line 203) * Random number generation: Image surface brightness limit. (line 206) * Random number generator, Seed: Generating random numbers. (line 36) * Random number generator, Seed <1>: Generating random numbers. (line 89) * Random number generator, Seed <2>: Upper-limit settings. (line 99) * Random number generator, Seed <3>: Sampling from a function. (line 67) * Random number generator, Seed <4>: MakeProfiles profile settings. (line 28) * Random numbers: Generating random numbers. (line 6) * Random row selection: Invoking asttable. (line 589) * Raster graphics: Raster and Vector graphics. (line 6) * Raster graphics <1>: Recognized file formats. (line 29) * Readout noise: Instrumental noise. (line 6) * Red Hat: Dependencies from package managers. (line 93) * Redirection: Sufi simulates a detection. (line 197) * Redirection in shell: Writing scripts to automate the steps. (line 57) * Redirection of output: --help. (line 22) * Redirection of output <1>: --help. (line 42) * Reentrancy, multiple file opening: CFITSIO. (line 13) * Region file (SAO DS9): Crop options. (line 180) * Region file (SAO DS9) <1>: SAO DS9 library. (line 26) * Remembering options: Getting help. (line 6) * Remote operation: Command-line interface. (line 92) * Removing ast from executables: Executable names. (line 70) * Repeated options: Options. (line 81) * Report a bug: Gnuastro project webpage. (line 6) * Reproducibility: Invoking asttable. (line 606) * Reproducibility <1>: Upper-limit settings. (line 15) * Reproducibility <2>: Astronomy functions for Makefiles. (line 14) * Reproducibility <3>: Why C. (line 80) * Reproducible bug reports: Report a bug. (line 64) * Reproducible results: Command-line interface. (line 53) * Resampling: Resampling. (line 6) * Resampling <1>: Align pixels with WCS considering distortions. (line 6) * Resampling <2>: Align pixels with WCS considering distortions. (line 121) * Resampling <3>: Interpolation. (line 255) * Resampling by area: Pixel information images. (line 25) * Resource heavy operations: Command-line interface. (line 84) * Rest frame wavelength: CosmicCalculator spectral line calculations. (line 6) * Rest-frame: Spectral lines library. (line 293) * Rest-frame wavelength: CosmicCalculator input options. (line 47) * restrict: Generic data container. (line 61) * Results, wrong: Report a bug. (line 6) * Reverse Polish Notation: Reverse polish notation. (line 6) * RGB: Color. (line 6) * RGB <1>: Pixel colors. (line 6) * RHEL: Dependencies from package managers. (line 93) * Right Ascension: Pointings that account for sky curvature. (line 55) * Right Ascension <1>: Column arithmetic. (line 334) * Right Ascension <2>: Arithmetic on datasets. (line 191) * Right Ascension <3>: Unit conversion library. (line 30) * Right Ascension <4>: Unit conversion library. (line 44) * Ritchie, Dennis: Why C. (line 15) * river: Segment. (line 58) * Robust polynomial fit: Fitting options. (line 79) * Robust Polynomial fit: Fitting functions. (line 185) * Roger Cotes: Circles and the complex plane. (line 16) * Root access, not possible: Installation directory. (line 6) * Root parameter structure: Mandatory source code files. (line 30) * Rotation of coordinates: Linear warping basics. (line 17) * Round-off error: Invoking astconvolve. (line 128) * Round-off error <1>: Polygons. (line 33) * Row selection, by random: Invoking asttable. (line 589) * Sampling: Resampling. (line 6) * Sampling <1>: Sampling from a function. (line 6) * Sampling theorem: Resampling. (line 23) * Sanson-Flamsteed projection: Align pixels with WCS considering distortions. (line 186) * SAO DS9: Reddest clumps cutouts and parallelization. (line 32) * SAO DS9 <1>: Extract clumps and objects. (line 22) * SAO DS9 <2>: Pixel visualization. (line 46) * SAO DS9 <3>: Segment output. (line 21) * SAO DS9 <4>: SAO DS9 library. (line 6) * SAO DS9 <5>: SAO DS9. (line 6) * SAO DS9 region file: Crop options. (line 180) * SAO DS9 region file <1>: SAO DS9 library. (line 26) * Saturated pixels: Interpolation operators. (line 67) * Saturated stars: Interpolation. (line 40) * Saturation (CCDs): Uniting the different PSF components. (line 92) * Save output to file: --help. (line 42) * Saving binary image: Recognized file formats. (line 88) * Scales, coordinate: Angular coverage on the sky. (line 6) * Scaling: Linear warping basics. (line 6) * Scatter plot: Column statistics color-magnitude diagram. (line 32) * Scientific Linux: Dependencies from package managers. (line 93) * Scientist, puzzle solver: Science and its tools. (line 200) * Script, shell: Writing scripts to automate the steps. (line 51) * Scripts, startup: Installation directory. (line 112) * Scroll command-line: --help. (line 27) * SDSS: Image surface brightness limit. (line 108) * SDSS <1>: Zero point of an image. (line 13) * SDSS <2>: Unit conversion operators. (line 100) * SDSS <3>: Brightness flux magnitude. (line 97) * SDSS DR12: Available databases. (line 36) * SDSS Photometric Catalogue, Release 12: Available databases. (line 177) * SDSS vs. Johnson filters: Zero point of an image. (line 21) * SDSS, Sloan Digital Sky Survey: Detecting large extended targets. (line 26) * Search directory for executables: Installation directory. (line 72) * Search directory order: Installation directory. (line 209) * Searching text: --help. (line 47) * Second moment: Measuring elliptical parameters. (line 25) * Section of an image: Crop. (line 6) * Secure shell: Command-line interface. (line 92) * SED, stream editor: Executable names. (line 60) * Seed, random number generator: Image surface brightness limit. (line 206) * Seed, Random number generator: Generating random numbers. (line 36) * Seed, Random number generator <1>: Generating random numbers. (line 89) * Seed, Random number generator <2>: Upper-limit settings. (line 99) * Seed, Random number generator <3>: Sampling from a function. (line 67) * Seed, Random number generator <4>: MakeProfiles profile settings. (line 28) * Seeing: Pointing pattern simulation. (line 21) * Segmentation: NoiseChisel. (line 6) * Segmentation <1>: NoiseChisel. (line 67) * sequent WCS distortion: World Coordinate System. (line 36) * Sérsic index: Galaxies. (line 11) * Sérsic profile: Morphology measurements nonparametric. (line 126) * Sérsic profile <1>: Galaxies. (line 6) * Sérsic, J. L.: Galaxies. (line 11) * Setting output file names automatically: Automatic output. (line 6) * Setting PATH: Installation directory. (line 72) * Sexagesimal: Column arithmetic. (line 334) * Sexagesimal <1>: Crop options. (line 121) * Sexagesimal <2>: Arithmetic on datasets. (line 191) * SHA-1 checksum: Downloading and validating input data. (line 41) * Shapes for marks (vector graphics): Drawing with vector graphics. (line 119) * Shared library: Linking. (line 64) * Shared library versioning: Linking. (line 129) * Shear: Linear warping basics. (line 38) * Shebang: Writing scripts to automate the steps. (line 78) * Shell: Command-line interface. (line 6) * Shell <1>: Arguments and options. (line 6) * Shell alias: Invoking astnoisechisel. (line 108) * Shell alias <1>: Invoking astmkprof. (line 85) * Shell auto-complete: Executable names. (line 14) * Shell history: Writing scripts to automate the steps. (line 15) * Shell redirection: Writing scripts to automate the steps. (line 57) * Shell script: GNU Astronomy Utilities 1.0. (line 12) * Shell script <1>: Writing scripts to automate the steps. (line 51) * Shell startup: Invoking astnoisechisel. (line 108) * Shell startup <1>: Invoking astmkprof. (line 85) * Shell variables: Installation directory. (line 38) * Shell, portable: Installed scripts. (line 15) * <Shift + PageUP> and <Shift + PageDown>: --help. (line 27) * SI (International System of Units): Brightness flux magnitude. (line 163) * Sigma-clipping: Sky value misconceptions. (line 32) * Sigma-clipping <1>: Statistical operations. (line 573) * Signal: Quantifying signal in a tile. (line 18) * Signal to noise ratio: Warp. (line 20) * Signal to noise ratio <1>: Resampling. (line 23) * Signal-to-noise ratio: Quantifying signal in a tile. (line 51) * Signed integer: Numeric data types. (line 16) * SII doublet: Spectral lines library. (line 10) * Simulating noise: Photon counting noise. (line 65) * Simultaneous multithreading: Multi-threaded operations. (line 6) * Single channel CMYK: Colormaps for single-channel pixels. (line 54) * SIP distortion: Align pixels with WCS considering distortions. (line 6) * SIP WCS distortion: Keyword inspection and manipulation. (line 567) * SIP WCS distortion <1>: World Coordinate System. (line 36) * SIP WCS distortion <2>: World Coordinate System. (line 456) * size_t: Ordered list of size_t. (line 16) * size_t <1>: Doubly linked ordered list of size_t. (line 14) * Skewed Poisson distribution: Photon counting noise. (line 30) * Skewness: Skewness caused by signal and its measurement. (line 59) * Skewness <1>: Quantifying signal in a tile. (line 70) * Skewness <2>: Brightness measurements. (line 179) * Sky: Sky lines in optical IFUs. (line 23) * Sky <1>: Sky value. (line 6) * Sky emission-lines: Sky lines in optical IFUs. (line 6) * Sky line: Interpolation. (line 6) * Sky value: Preparing input and generating exposure map. (line 159) * Sky value <1>: Photon counting noise. (line 52) * Sky value <2>: Sky value definition. (line 6) * Sky value <3>: Sky value definition. (line 35) * Slant zenithal projection: Align pixels with WCS considering distortions. (line 162) * Sloan Digital Sky Survey, SDSS: Detecting large extended targets. (line 26) * SLS Color: Pixel visualization. (line 46) * Small circle: Coordinate and border operators. (line 174) * Software bug: Report a bug. (line 6) * Source code building: Dependencies from package managers. (line 6) * Source code compilation: Dependencies from package managers. (line 6) * Source file navigation: Program source. (line 6) * Source tree: Test scripts. (line 25) * Source, uncompress: Quick start. (line 6) * Spectrum: Detecting lines and extracting spectra in 3D data. (line 6) * Spectrum <1>: Vector columns. (line 15) * Spectrum <2>: Measurements per slice spectra. (line 6) * Spectrum (of astronomical source): Measurements per slice spectra. (line 6) * Spectrum, Fourier: Invoking astconvolve. (line 114) * Speed of light: Constants. (line 22) * Spline (Akima) interpolation: Interpolation. (line 118) * Spline (cubic) interpolation: Interpolation. (line 104) * Spread of a point source: PSF. (line 6) * SSD: Configure and build in RAM. (line 12) * SSH: Command-line interface. (line 92) * Stacking: Moire pattern in stacking and its correction. (line 128) * Stacking <1>: Stacking operators. (line 6) * Stacking <2>: Random number generators. (line 157) * Stacking <3>: Align pixels with WCS considering distortions. (line 31) * Standard deviation: Measuring elliptical parameters. (line 35) * Standard deviation <1>: Statistical operations. (line 79) * Standard error of mean: Standard deviation vs error. (line 139) * Standard input: Input output options. (line 9) * Standard input <1>: Standard input. (line 6) * Standard input <2>: Separate shell variables for multiple outputs. (line 61) * Standard input <3>: Automatic output. (line 6) * Standard input <4>: ConvertType input and output. (line 6) * Standard input <5>: Invoking aststatistics. (line 45) * Standard input <6>: Text files. (line 132) * Standard output: Sufi simulates a detection. (line 197) * Standard output <1>: Invoking asttable. (line 376) * Standard output stream: Standard input. (line 13) * Standard, FITS: Generic data container. (line 78) * Star formation main sequence: Least squares fitting. (line 6) * Stars, modeling: Stars. (line 6) * Startup scripts: Installation directory. (line 112) * Startup scripts <1>: Generating random numbers. (line 64) * Startup, shell: Invoking astnoisechisel. (line 108) * Startup, shell <1>: Invoking astmkprof. (line 85) * Static document description format: Recognized file formats. (line 102) * Static linking: Linking. (line 38) * Statistical analysis: Science and its tools. (line 32) * Steffen interpolation: Interpolation. (line 126) * Steradian: Brightness flux magnitude. (line 163) * Stereographic projection: Align pixels with WCS considering distortions. (line 166) * Stitch multiple images: Crop. (line 20) * STR: Options. (line 43) * Stream editor, SED: Executable names. (line 60) * Stream: standard input: Standard input. (line 6) * Stream: standard output: Standard input. (line 13) * Stride: Pooling operators. (line 13) * Stroustrup, Bjarne: Science and its tools. (line 171) * Stroustrup, Bjarne <1>: Why C. (line 15) * Structure de-reference operator: Mandatory source code files. (line 56) * Structures: Headers. (line 89) * Subaru Telescope: Tessellation. (line 54) * Submit new tracker item: Report a bug. (line 84) * Suffix (filename): Arguments. (line 13) * Suffixes, EPS format: Recognized file formats. (line 97) * Suffixes, JPEG images: Recognized file formats. (line 42) * Suffixes, PDF format: Recognized file formats. (line 113) * Suffixes, plain text: Recognized file formats. (line 128) * Sufi, Abd al-rahman: Sufi simulates a detection. (line 6) * Sum: Statistical operations. (line 67) * Sum for total flux: Profile magnitude. (line 6) * Supergalactic coordinate system: Keyword inspection and manipulation. (line 510) * Supergalactic coordinate system <1>: World Coordinate System. (line 50) * Superuser, not possible: Installation directory. (line 6) * Support request manager: Report a bug. (line 84) * Surface Brightness: FITS images in a publication. (line 80) * Surface brightness: Achieved surface brightness level. (line 103) * Surface brightness <1>: Brightness flux magnitude. (line 163) * Surface brightness <2>: Surface brightness limit of image. (line 6) * Surface Brightness <1>: Arithmetic on datasets. (line 209) * Surface Brightness <2>: Unit conversion library. (line 72) * Surface brightness error: Surface brightness error of each detection. (line 6) * Surface brightness limit: Image surface brightness limit. (line 6) * Surface brightness limit <1>: Surface brightness limit of image. (line 38) * Surface brightness limit <2>: MakeCatalog output. (line 31) * SUSE Linux Enterprise Server: Dependencies from package managers. (line 185) * SVO database (filter transmission curve): Zero point of an image. (line 21) * Symbolic link: Executable names. (line 38) * System Cache: A note on threads. (line 29) * System wide configuration files: System wide. (line 6) * Table viewer: TOPCAT. (line 6) * Tables FITS: Recognized table formats. (line 19) * Tabs are evil: Coding conventions. (line 151) * TAN in WCS (Gnomonic projection): Area of non-blank pixels on sky. (line 44) * Tangential spherical cube projection: Align pixels with WCS considering distortions. (line 206) * TAP (Table Access Protocol): Query. (line 6) * Task tracker: Report a bug. (line 99) * Taxicab metric: Processing options. (line 133) * Terminal (true color, 24 bit): Vector graphics colors. (line 14) * Test: Quick start. (line 6) * Test scripts: Test scripts. (line 6) * Tests, error in converting images: Known issues. (line 103) * Tests, only one passes: Known issues. (line 62) * Tests, running: Tests. (line 6) * tests/during-dev.sh: Building and debugging. (line 23) * TeX: Known issues. (line 87) * TeX <1>: Recognized file formats. (line 77) * TeX Live: Bootstrapping dependencies. (line 126) * Thread safety: World Coordinate System. (line 13) * Thread safety <1>: Qsort functions. (line 28) * Thresholding: Binary datasets. (line 6) * TIFF format: Optional dependencies. (line 88) * TIFF format <1>: Gnuastro configure options. (line 111) * TIFF format <2>: Recognized file formats. (line 47) * TIFF format <3>: TIFF files. (line 6) * TiKZ: Annotations for figure in paper. (line 36) * Tilde expansion as option values: Options. (line 110) * Time zone: Invoking astscript-sort-by-night. (line 72) * Time, Unix epoch: Keyword inspection and manipulation. (line 486) * Time, Unix epoch <1>: Column arithmetic. (line 349) * Time, Unix epoch <2>: Sort FITS files by night. (line 26) * Timeout: Input output options. (line 9) * tmpfs file system: Configure and build in RAM. (line 23) * Tokens: Vector columns. (line 105) * Top processing source file: Mandatory source code files. (line 123) * Top root structure: Mandatory source code files. (line 30) * TPD WCS distortion: World Coordinate System. (line 36) * TPV distortion: Align pixels with WCS considering distortions. (line 6) * TPV WCS distortion: Keyword inspection and manipulation. (line 567) * TPV WCS distortion <1>: World Coordinate System. (line 36) * TPV WCS distortion <2>: World Coordinate System. (line 456) * Tracker: Report a bug. (line 99) * Tracker <1>: Gnuastro project webpage. (line 6) * Trailing space: Coding conventions. (line 146) * Transform image: MakeProfiles. (line 41) * Transformation, affine: Linear warping basics. (line 85) * Transformation, projective: Linear warping basics. (line 93) * Transmission curve of filters: Zero point of an image. (line 21) * Trigonometry: Trigonometric and hyperbolic operators. (line 14) * True color terminal: Vector graphics colors. (line 14) * Truncation radius: Profile magnitude. (line 6) * Tukey’s biweight (bisquare) function: Fitting options. (line 121) * Turn over point (angular diameter distance): Cosmological coverage and visualizing tables. (line 85) * Tutorial: Tutorials. (line 6) * Type: Numeric data types. (line 6) * U.S. Naval Observatory CCD Astrograph Catalog: Available databases. (line 177) * Ubuntu: Dependencies from package managers. (line 51) * ui.c: Mandatory source code files. (line 101) * ui.h: Mandatory source code files. (line 85) * Uncompress source: Quick start. (line 6) * Undetected objects: Photon counting noise. (line 52) * Universal time coordinate (UTC): Invoking astscript-sort-by-night. (line 72) * Unix epoch time: Keyword inspection and manipulation. (line 486) * Unix epoch time <1>: Column arithmetic. (line 349) * Unix epoch time <2>: Sort FITS files by night. (line 26) * Unix epoch time <3>: FITS header keywords. (line 119) * Unsigned integer: Numeric data types. (line 16) * Upper limit magnitude: Upper limit magnitude of each detection. (line 31) * Upper-limit: Measuring the dataset limits. (line 80) * US letter paper size: A4 print book. (line 6) * Usage pattern: --usage. (line 6) * User interface functions: Mandatory source code files. (line 102) * Using CPU threads: Multi-threaded operations. (line 6) * Using multiple CPU cores: Multi-threaded operations. (line 6) * Using multiple threads: A note on threads. (line 6) * UTC (Universal time coordinate): Invoking astscript-sort-by-night. (line 72) * Valgrind: Gnuastro configure options. (line 13) * Valgrind <1>: Gnuastro configure options. (line 32) * Valgrind <2>: Separate build and source directories. (line 95) * Valgrind <3>: Separate build and source directories. (line 110) * Values to options: Options. (line 56) * Variance: Measuring elliptical parameters. (line 25) * Variance-covariance matrix: Fitting functions. (line 93) * Vatican library: Fits. (line 6) * Vector columns: Vector columns. (line 6) * Vector graphics: Raster and Vector graphics. (line 14) * Vector graphics <1>: Recognized file formats. (line 66) * Vector graphics point: Drawing with vector graphics. (line 14) * Verification, checksum: Downloading and validating input data. (line 41) * Version control: Report a bug. (line 27) * Version control <1>: Version controlled source. (line 6) * Version control systems: Optional dependencies. (line 68) * Version control systems <1>: Gnuastro configure options. (line 99) * Version number: Version numbering. (line 6) * Versioning: Shared library: Linking. (line 129) * Vertices on sphere (sky): Coordinate and border operators. (line 114) * Viewing trackers: Report a bug. (line 99) * Vignetting: Accounting for non-exposed pixels. (line 6) * Vignetting <1>: Pointing pattern simulation. (line 26) * Viridis: Colormap: Pixel visualization. (line 41) * Virtual console: Command-line interface. (line 76) * Visualization: Colormaps for single-channel pixels. (line 6) * VizieR: Available databases. (line 156) * void *: Generic data container. (line 51) * Volatile memory: Memory management. (line 24) * VOTable: Available databases. (line 120) * VOTable <1>: TOPCAT. (line 6) * Voxel: Detecting lines and extracting spectra in 3D data. (line 6) * Wall-clock time: A note on threads. (line 19) * Warp: Interpolation. (line 255) * Wassel, Caspar: Circles and the complex plane. (line 16) * WAT WCS distortion: World Coordinate System. (line 36) * Watershed algorithm: Segment. (line 58) * Watershed algorithm <1>: Labeled datasets. (line 97) * Wavelength, rest-frame: CosmicCalculator input options. (line 47) * WCS: WCSLIB. (line 6) * WCS distortion: Keyword inspection and manipulation. (line 567) * WCS distortion <1>: Align pixels with WCS considering distortions. (line 6) * WCS distortion <2>: World Coordinate System. (line 36) * WCS distortion <3>: World Coordinate System. (line 447) * WCS distortion <4>: Interpolation. (line 255) * WCS Projections: Align pixels with WCS considering distortions. (line 148) * WCS: World Coordinate System: Column arithmetic. (line 148) * WCSLIB: WCSLIB. (line 6) * WCSLIB <1>: Align pixels with WCS considering distortions. (line 52) * WCSLIB <2>: Linear warps to be called explicitly. (line 156) * WCSLIB thread safety: World Coordinate System. (line 13) * Web colors: Vector graphics colors. (line 6) * Wedge (radial profile): Invoking astscript-radial-profile. (line 258) * Weight (in fitting): Fitting functions. (line 77) * Weight (in fitting) <1>: Fitting functions. (line 107) * Weighted average: Convolve. (line 6) * Welsch function (robust weight): Fitting options. (line 139) * WFC3: Warp. (line 53) * White space character: Configuration file format. (line 11) * Whole-Sky USNO-B1.0 Catalog: Available databases. (line 177) * Wide Field Camera 3: Warp. (line 53) * Wide Field Camera 3 <1>: Linear warping basics. (line 51) * William Thomson: Science and its tools. (line 187) * Window Subsystem for Linux: New to GNU/Linux?. (line 56) * WISE All-Sky data Release: Available databases. (line 177) * World Coordinate System: WCSLIB. (line 6) * World Coordinate System <1>: Linear warps to be called explicitly. (line 156) * World Coordinate System (WCS): Column arithmetic. (line 148) * World Coordinate System (WCS) <1>: Dimensionality changing operators. (line 239) * World Coordinate System (WCS) <2>: Surface brightness limit of image. (line 88) * Writing configuration files: Configuration file format. (line 33) * Wrong output: Report a bug. (line 6) * Wrong results: Report a bug. (line 6) * xargs (extended arguments): Separate shell variables for multiple outputs. (line 61) * XDF survey: General program usage tutorial. (line 25) * XDF survey <1>: Surface brightness limit of image. (line 52) * yum: Dependencies from package managers. (line 93) * Zenithal/azimuthal equal area projection: Align pixels with WCS considering distortions. (line 174) * Zenithal/azimuthal equidistant projection: Align pixels with WCS considering distortions. (line 170) * Zenithal/azimuthal polynomial projection: Align pixels with WCS considering distortions. (line 172) * Zenithal/azimuthal projection: Align pixels with WCS considering distortions. (line 160) * Zero point: Sufi simulates a detection. (line 300) * Zero point <1>: Zero point estimation. (line 6) * Zero point magnitude: Image surface brightness limit. (line 108) * Zero point magnitude <1>: Brightness flux magnitude. (line 65) * Zsh shell: Separate shell variables for multiple outputs. (line 85) * zypper, OpenSUSE package manager: Dependencies from package managers. (line 185) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/��������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�010210� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/arithmetic/���������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�012341� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/arithmetic/or.sh����������������������������������������������������������������0000755�0001750�0001750�00000003171�14551337306�013243� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Choose two detected regions with the 'or' operator # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=arithmetic execname=../bin/$prog/ast$prog img=convolve_spatial_noised_detected_segmented.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img 1 eq $img 3 eq or -gOBJECTS --output=or.fits �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/arithmetic/where.sh�������������������������������������������������������������0000755�0001750�0001750�00000003234�14551337306�013735� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Mask non-detected pixels in the image with the 'where' operator. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=arithmetic execname=../bin/$prog/ast$prog img=convolve_spatial_noised_detected.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img -h1 $img -h2 0 uint8 eq nan where \ --output=where.fits ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/arithmetic/snimage.sh�����������������������������������������������������������0000755�0001750�0001750�00000003416�14551337306�014250� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make an S/N image to test Arithmetic. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=arithmetic execname=../bin/$prog/ast$prog imgin=convolve_spatial_noised.fits imgnc=convolve_spatial_noised_detected.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $imgin ]; then echo "$imgin does not exist."; exit 77; fi if [ ! -f $imgnc ]; then echo "$imgnc does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $imgin $imgnc - $imgnc / --hdu=1 --hdu=SKY \ --hdu=SKY_STD --output=snimage.fits ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/arithmetic/onlynumbers.sh�������������������������������������������������������0000755�0001750�0001750�00000002545�14551337306�015204� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make an S/N image to test Arithmetic. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=arithmetic execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname -1 3.45 x �����������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/arithmetic/connected-components.sh����������������������������������������������0000755�0001750�0001750�00000003257�14551337306�016755� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Find the connected components in NoiseChisel's output. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=arithmetic execname=../bin/$prog/ast$prog img=convolve_spatial_noised_detected.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img 2 connected-components -hDETECTIONS \ --output=connected-components.fits �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/arithmetic/mknoise-sigma-from-mean.sh�������������������������������������������0000755�0001750�0001750�00000004621�14551337306�017246� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Add noise to an input image. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). # # We will be adding noise to two images: the warped (smaller) and unwarped # (larger) mock images. The warped one will be used by programs that don't # care about the size of the image, but the larger one will be used by # those that do: for example SubtractSky and NoiseChisel will be better # tested on a larger image. prog=arithmetic img1=convolve_spatial.fits execname=../bin/$prog/ast$prog out1=convolve_spatial_noised.fits img2=convolve_spatial_scaled.fits out2=convolve_spatial_scaled_noised.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname doesn't exist."; exit 77; fi if [ ! -f $img1 ]; then echo "$img1 does not exist."; exit 77; fi if [ ! -f $img2 ]; then echo "$img2 does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. zeropoint=0 background=-10 export GSL_RNG_SEED=1 export GSL_RNG_TYPE=ranlxs2 $check_with_program $execname --envseed --output=$out1 \ $img1 $background $zeropoint mag-to-counts \ mknoise-sigma-from-mean $check_with_program $execname --envseed --output=$out2 \ $img2 $background $zeropoint mag-to-counts \ mknoise-sigma-from-mean ���������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/arithmetic/mknoise-sigma-from-mean-3d.sh����������������������������������������0000755�0001750�0001750�00000003451�14470463063�017552� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Add noise to an input cube. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <akhlaghi@gnu.org> # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). # # We will be adding noise to two images: the warped (smaller) and unwarped # (larger) mock images. The warped one will be used by programs that don't # care about the size of the image, but the larger one will be used by # those that do: for example SubtractSky and NoiseChisel will be better # tested on a larger image. prog=arithmetic img=3d-cat.fits out=3d-cat_noised.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname doesn't exist."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== zeropoint=0 background=-10 export GSL_RNG_SEED=1 export GSL_RNG_TYPE=ranlxs2 $check_with_program $execname --envseed --output=$out \ $img $background $zeropoint mag-to-counts \ mknoise-sigma-from-mean �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/buildprog/����������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�012177� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/buildprog/simpleio.sh�����������������������������������������������������������0000755�0001750�0001750�00000004164�14551337306�014305� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make labeled regions on an image with blank pixels. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.fits prog=buildprog execname=../bin/$prog/ast$prog source=$topsrc/tests/$prog/simpleio.c # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi if [ ! -f $source ]; then echo "$source does not exist."; exit 77; fi # Actual test script # ================== # # We want to use the 'libgnuastro.la' corresponding to this install, not # the one (that is possibly) installed (hence the use of '--la'). # # Except for 'gnuastro/config.h', all headers are installed in # '$topsrc/lib' and 'gnuastro/config.h' is in "../lib/" # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. echo "Test Environment" echo "----------------" echo "CPPFLAGS: $CPPFLAGS" echo "LDFLAGS: $LDFLAGS" echo "----------------" $check_with_program $execname $source $img 1 --la=../lib/libgnuastro.la \ -I$topsrc/lib -I../lib/ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/buildprog/simpleio.c������������������������������������������������������������0000644�0001750�0001750�00000003422�14551337306�014106� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* A test program to multithreaded building using Gnuastro's helpers. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include "gnuastro/fits.h" int main(int argc, char *argv[]) { gal_data_t *image; char *outname="simpleio.fits"; /* We need two arguments, note that the system also gives the executable name, so argc is one more than the number of arguments. */ if(argc!=3) { fprintf(stderr, "this program only accepts two arguments"); return EXIT_FAILURE; } /* Read the image into memory. */ image=gal_fits_img_read(argv[1], argv[2], -1, 1, "ARGUMENT-2"); /* Let the user know. */ printf("%s (hdu %s) is read into memory.\n", argv[1], argv[2]); /* Save the image in memory into another file. */ gal_fits_img_write(image, outname, NULL, 0); /* Let the user know. */ printf("%s created.\n", outname); /* Clean up and return. */ gal_data_free(image); return EXIT_SUCCESS; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convertt/�����������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�012054� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convertt/blankch.sh�������������������������������������������������������������0000755�0001750�0001750�00000003316�14551337306�013741� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert a FITS image into a one color JPEG file. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.fits prog=convertt execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - libjpeg was not present on the system. if [ ! -f $execname ];then echo "$execname not created.";exit 77;fi if [ ! -f $img ];then echo "$img does not exist."; exit 77;fi if [ "x$haslibjpeg" != "xyes" ];then echo "libjpeg not present."; exit 77;fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname blank $img blank --output=blankch.jpg ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convertt/fitstotxt.sh�����������������������������������������������������������0000755�0001750�0001750�00000003046�14551337306�014407� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert a FITS image into a text file. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.fits prog=convertt execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --output=psf.txt ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convertt/jpegtotxt.sh�����������������������������������������������������������0000755�0001750�0001750�00000003321�14551337306�014363� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert a FITS image into a single channel JPEG image to text. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.jpg prog=convertt execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - libjpeg was not present on the system. if [ ! -f $execname ];then echo "$execname not created.";exit 77;fi if [ ! -f $img ];then echo "$img does not exist."; exit 77;fi if [ "x$haslibjpeg" != "xyes" ];then echo "libjpeg not present."; exit 77;fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --output=jpegtotxt.txt ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convertt/fitstopdf.sh�����������������������������������������������������������0000755�0001750�0001750�00000003326�14551337306�014342� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert a FITS image into an PDF file. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=convertt img=crop_section.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - Ghostscript was not present on the system. if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi if [ "x$hasghostscript" != "xyes" ]; then echo "Ghostscript 9.10 or above not present."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --output=pdf --invert ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convertt/jpegtofits.sh����������������������������������������������������������0000755�0001750�0001750�00000003276�14551337306�014522� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert a FITS image into a one color JPEG file. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=convertt img=blankch.jpg execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - libjpeg was not present on the system. if [ ! -f $execname ];then echo "$execname not created.";exit 77;fi if [ ! -f $img ];then echo "$img does not exist."; exit 77;fi if [ "x$haslibjpeg" != "xyes" ];then echo "libjpeg not present."; exit 77;fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --output=fits ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convertt/fitstotiff.sh����������������������������������������������������������0000755�0001750�0001750�00000003340�14551337306�014515� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert a FITS image into a TIFF file. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Fathma Mehnoor <fathmamehnoor@gmail.com> # Copyright (C) 2023-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.fits prog=convertt execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - libjtiff was not present on the system. if [ ! -f $execname ];then echo "$execname not created.";exit 77;fi if [ ! -f $img ];then echo "$img does not exist."; exit 77;fi if [ "x$haslibtiff" != "xyes" ];then echo "libtiff not present."; exit 77;fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --output=tif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convertt/fitstojpeg.sh����������������������������������������������������������0000755�0001750�0001750�00000003271�14551337306�014515� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert a FITS image into a JPEG file. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.fits prog=convertt execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - libjpeg was not present on the system. if [ ! -f $execname ];then echo "$execname not created.";exit 77;fi if [ ! -f $img ];then echo "$img does not exist."; exit 77;fi if [ "x$haslibjpeg" != "xyes" ];then echo "libjpeg not present."; exit 77;fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --invert --output=jpg ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convertt/fitstojpegcmyk.sh������������������������������������������������������0000755�0001750�0001750�00000003311�14551337306�015374� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert a FITS image into a JPEG file. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.fits prog=convertt execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - libjpeg was not present on the system. if [ ! -f $execname ];then echo "$execname not created.";exit 77;fi if [ ! -f $img ];then echo "$img does not exist."; exit 77;fi if [ "x$haslibjpeg" != "xyes" ];then echo "libjpeg not present."; exit 77;fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname blank blank blank $img --output=f2jcmyk.jpg �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convolve/�����������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�012043� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convolve/spatial.sh�������������������������������������������������������������0000755�0001750�0001750�00000003323�14551337306�013761� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convolve an image in the spatial domain. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). psf=psf.fits prog=convolve img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi if [ ! -f $psf ]; then echo "$psf does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --kernel=$psf --domain=spatial \ --output=convolve_spatial.fits �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convolve/frequency.sh�����������������������������������������������������������0000755�0001750�0001750�00000003327�14551337306�014331� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convolve an image in the frequency domain. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). psf=psf.fits prog=convolve img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi if [ ! -f $psf ]; then echo "$psf does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --kernel=$psf --domain=frequency \ --output=convolve_frequency.fits ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convolve/psf-match.sh�����������������������������������������������������������0000755�0001750�0001750�00000005414�14551337306�014211� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Find the matching kernel for two PSFs # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2022-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=convolve psfwide=psf.fits psfsharp=psf-sharp.fits fitsprog=$progbdir/astfits cropprog=$progbdir/astcrop execname=$progbdir/ast$prog arithprog=$progbdir/astarithmetic # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $psfwide ]; then echo "$psfwide does not exist."; exit 77; fi if [ ! -f $psfsharp ]; then echo "$psfsharp does not exist."; exit 77; fi if [ ! -f $fitsprog ]; then echo "$fitsprog does not exist."; exit 77; fi if [ ! -f $cropprog ]; then echo "$cropprog does not exist."; exit 77; fi if [ ! -f $arithprog ]; then echo "$arithprog does not exist."; exit 77; fi # Prepare Sharper PSF # ------------------- # # It is necessary that the two PSFs be the same width. So before finding # the matching PSF, it is necessary to make the sharper (smaller) PSF have # the same pixel size as the wider one. psfsharpwidth=psf-sharp-width-set.fits psfsharpnoblank=psf-sharp-no-blank.fits wwidth=$($fitsprog $psfwide --keyvalue=naxis1 --quiet) center=$($fitsprog $psfsharp --keyvalue=naxis1 --quiet \ | $AWK '{print int($1/2)+1}') $cropprog $psfsharp --center=$center,$center --width=$wwidth \ --mode=img --output=$psfsharpwidth $arithprog $psfsharpwidth set-i i i isblank 0 where \ --output=$psfsharpnoblank # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $psfwide --kernel=$psfsharpnoblank \ --makekernel=10 \ --output=psf-match.fits \ && rm $psfsharpwidth $psfsharpnoblank ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convolve/spectrum-1d.sh���������������������������������������������������������0000755�0001750�0001750�00000003324�14551337306�014471� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convolve a 1D spectrum, that will also check reading from standard input # for the kernel. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=convolve execname=../bin/$prog/ast$prog spec=$topsrc/tests/$prog/spectrum.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $spec ]; then echo "$spec does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. printf '1\n3\n10\n3\n1\n' \ | $check_with_program $execname $spec --domain=spatial \ --output=convolve_spectrum.txt ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/convolve/spectrum.txt�����������������������������������������������������������0000644�0001750�0001750�00000000103�14435153342�014356� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Test spectrum for 1D convolution 5 3 6 3 2 8 20 10 5 4 6 2 5 4 1 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/cosmiccal/����������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�012145� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/cosmiccal/simpletest.sh���������������������������������������������������������0000755�0001750�0001750�00000002577�14551337306�014631� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# A simple run of CosmicCalculator to check if it can run. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=cosmiccal execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname --redshift=2.5 ���������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/crop/���������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�011153� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/crop/imgcat.sh������������������������������������������������������������������0000755�0001750�0001750�00000004000�14551337306�012671� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Crop from a catalog using x and y coordinates in Image mode. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # The number of threads is one so if CFITSIO does is not configured to # enable multithreaded access to files, the tests pass. It is the # users choice to enable this feature. # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. cat=$topsrc/tests/$prog/cat.txt $check_with_program $execname $img --catalog=$cat --suffix=_imgcat.fits \ --numthreads=1 --zeroisnotblank --mode=img \ --coordcol=X_CENTER --coordcol=Y_CENTER \ --namecol=NAME --width=201 gnuastro-0.22/tests/crop/wcscat.sh������������������������������������������������������������������0000755�0001750�0001750�00000003775�14551337306�012733� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Crop from a catalog using x and y coordinates in WCS mode. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat*.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi for fn in $img; do if [ ! -f $fn ]; then echo "$fn doesn't exist."; exit 77; fi; done # Actual test script # ================== # # The number of threads is one so if CFITSIO does is not configured to # enable multithreaded access to files, the tests pass. It is the # users choice to enable this feature. # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. cat=$topsrc/tests/$prog/cat.txt $check_with_program $execname $img --catalog=$cat --suffix=_wcscat.fits \ --zeroisnotblank --coordcol=4 --mode=wcs \ --coordcol=DEC_CENTER --numthreads=1 \ --width=3/3600 ���gnuastro-0.22/tests/crop/section.sh�����������������������������������������������������������������0000755�0001750�0001750�00000003475�14551337306�013110� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Crop a box based on a specified section. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # The number of threads is one so if CFITSIO does is not configured to # enable multithreaded access to files, the tests pass. It is the # users choice to enable this feature. # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --section=-10:*+10,:250 --mode=img \ --output=crop_section.fits --numthreads=1 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/crop/imgcenter.sh���������������������������������������������������������������0000755�0001750�0001750�00000003517�14551337306�013416� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make a single crop with center defined in Image mode. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # The number of threads is one so if CFITSIO does is not configured to # enable multithreaded access to files, the tests pass. It is the # users choice to enable this feature. # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --center=251,251 --mode=img --width=201 \ --output=crop_imgcenter.fits --numthreads=1 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/crop/wcscenter.sh���������������������������������������������������������������0000755�0001750�0001750�00000003322�14551337306�013430� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Crop a box based on center in WCS coordinates. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat*.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi for fn in $img; do if [ ! -f $fn ]; then echo "$fn does not exist."; exit 77; fi; done # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --center=0.99917157,1.0008283 \ --output=crop_wcscenter.fits --mode=wcs \ --width=0.3/3600 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/crop/imgpolygon.sh��������������������������������������������������������������0000755�0001750�0001750�00000003350�14551337306�013620� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Crop an image based polygon from an image. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img $cat --mode=img --zeroisnotblank \ --output=imgpolygon.fits \ --polygon=209,50:436.76,151:475.64,438.2:210.6,454.04:121.4,289.88 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/crop/wcspolygon.sh��������������������������������������������������������������0000755�0001750�0001750�00000003407�14551337306�013643� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Crop from a catalog using x and y coordinates in WCS mode. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat*.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi for fn in $img; do if [ ! -f $fn ]; then echo "$fn doesn't exist."; exit 77; fi; done # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --mode=wcs --zeroisnotblank \ --output=wcspolygon.fits \ --polygon=0.99980497,1.0001967:0.998378,1.0012267:0.9999766,1.0013217 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/crop/imgpolygonout.sh�����������������������������������������������������������0000755�0001750�0001750�00000003642�14551337306�014354� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Crop an image based polygon from an image. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # The number of threads is one so if CFITSIO does is not configured to # enable multithreaded access to files, the tests pass. It is the # users choice to enable this feature. # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img $cat --mode=img --zeroisnotblank \ --polygonout --output=imgpolygonout.fits \ --polygon=209,50:436.76,151:475.64,438.2:210.6,454.04:121.4,289.88 ����������������������������������������������������������������������������������������������gnuastro-0.22/tests/crop/imgcenternoblank.sh��������������������������������������������������������0000755�0001750�0001750�00000003634�14551337306�014763� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Crop a region defined by its center in image coordinates, with no blank # pixels. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=crop img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # The number of threads is one so if CFITSIO does is not configured to # enable multithreaded access to files, the tests pass. It is the # users choice to enable this feature. # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --center=500,500 --noblank --numthreads=1 \ --output=crop_imgcenternoblank.fits --mode=img \ --width=201 ����������������������������������������������������������������������������������������������������gnuastro-0.22/tests/crop/cat.txt��������������������������������������������������������������������0000644�0001750�0001750�00000001222�14551337306�012401� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Column 1: NAME [name,str4] Name of object. # Column 2: X_CENTER [pixels,f64] Image X axis position. # Column 3: Y_CENTER [pixels,f64] Image Y axis position. # Column 4: RA_CENTER [deg,f64] Right Ascension. # Column 5: DEC_CENTER [deg,f64] Declination. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. A0B1 500.00 500.00 0.99917157 1.0008283 c2d3 251.00 251.00 0.99958658 1.0004150 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/fits/���������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�011155� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/fits/write.sh�������������������������������������������������������������������0000755�0001750�0001750�00000003521�14551337306�012570� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Write a junk header to a FITS file # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=fits img=mkprofcat1.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. cp $img fitstest.fits $check_with_program $execname fitstest.fits \ --write=ABSJUNK,10.92,"A Fits keyword Test.",m/s \ --date \ --write=ABSJNK2,2343fdsa,"Another absolute junk test!" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/fits/print.sh�������������������������������������������������������������������0000755�0001750�0001750�00000003025�14551337306�012571� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Print the full header information # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=fits img=fitstest.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like 'Valgrind' or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/fits/update.sh������������������������������������������������������������������0000755�0001750�0001750�00000003222�14551337306�012716� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Update the full header information # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=fits img=fitstest.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --update=ABSJUNK,8.231,"An updated value.",s \ --update=ABSJNK2,1232,"Another updated value",kg ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/fits/delete.sh������������������������������������������������������������������0000755�0001750�0001750�00000003056�14551337306�012703� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Delete header information. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=fits img=fitstest.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --delete=ABSJUNK --delete=ABSJNK2 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/fits/copyhdu.sh�����������������������������������������������������������������0000755�0001750�0001750�00000003241�14551337306�013110� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copy an extension from one file to another. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=fits img1=fitstest.fits img2=mkprofcat2.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img1 ]; then echo "$img1 does not exist."; exit 77; fi if [ ! -f $img2 ]; then echo "$img2 does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img2 --copy="Mock profiles" --output=$img1 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/lib/����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�010756� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/lib/multithread.c���������������������������������������������������������������0000644�0001750�0001750�00000007673�14551337306�013402� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* A test program to multithreaded building using Gnuastro's helpers. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2017-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include "gnuastro/fits.h" #include "gnuastro/threads.h" /* This structure can keep all information you want to pass onto the worker function on each thread. */ struct params { gal_data_t *image; /* Dataset to print values of. */ }; /* This is the main worker function which will be called by the different threads. 'gal_threads_params' is defined in 'gnuastro/threads.h' and contains the pointer to the paramter we want. Note that its input and output must have 'void *' types. */ void * worker_on_thread(void *in_prm) { /* Low-level definitions to be done first. */ struct gal_threads_params *tprm=(struct gal_threads_params *)in_prm; struct params *p=(struct params *)tprm->params; /* Subsequent definitions. */ float *array=p->image->array; size_t i, index, *dsize=p->image->dsize; /* Go over all the pixels that were assigned to this thread. */ for(i=0; tprm->indexs[i] != GAL_BLANK_SIZE_T; ++i) { /* For easy reading. */ index = tprm->indexs[i]; /* Print the information. */ printf("(%zu, %zu) on thread %zu: %g\n", index%dsize[1]+1, index/dsize[1]+1, tprm->id, array[index]); } /* Wait for all the other threads to finish, then return. */ if(tprm->b) pthread_barrier_wait(tprm->b); return NULL; } /* A simple program to open a FITS image, distributes its pixels between different threads and print the value of each pixel and the thread it was assigned to, this will test both the opening of a FITS file and also the multi-threaded functions. After running 'make check' you can see the outputs in 'tests/multithread.log'. Please run the following command for an explanation on easily linking and compiling C programs that use Gnuastro's libraries (without having to worry about the libraries to link to) anywhere on your system: $ info gnuastro "Automatic linking script" */ int main(void) { struct params p; int quietmmap=1; size_t minmapsize=-1; char *filename="psf.fits", *hdu="1"; size_t numthreads=gal_threads_number(); /* Read the image into memory as a float32 data type. */ p.image=gal_fits_img_read_to_type(filename, hdu, GAL_TYPE_FLOAT32, minmapsize, quietmmap, "HARDCODED"); /* Print some basic information before the actual contents: */ printf("Pixel values of %s (HDU: %s) on %zu threads.\n", filename, hdu, numthreads); printf("Used to check the compiled library's capability in opening a " "FITS file, and also spinning-off threads.\n"); /* A small sanity check: this is only intended for 2D arrays. */ if(p.image->ndim!=2) { fprintf(stderr, "only 2D images are supported."); exit(EXIT_FAILURE); } /* Spin-off the threads and do the processing on each thread. */ gal_threads_spin_off(worker_on_thread, &p, p.image->size, numthreads, minmapsize, quietmmap); /* Clean up and return. */ gal_data_free(p.image); return EXIT_SUCCESS; } ���������������������������������������������������������������������gnuastro-0.22/tests/lib/versioncxx.cpp��������������������������������������������������������������0000644�0001750�0001750�00000002170�14551337306�013613� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/********************************************************************* A test program to get and use the version number of Gnuastro within C++. Original author: Mohammad Akhlaghi <mohammad@akhlaghi.org> Contributing author(s): Copyright (C) 2015-2024 Free Software Foundation, Inc. Gnuastro is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gnuastro 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 General Public License for more details. You should have received a copy of the GNU General Public License along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. **********************************************************************/ #include <cstdlib> #include <iostream> #include <gnuastro/config.h> int main(void) { std::cout << "Gnuastro version is: " << GAL_CONFIG_VERSION << ".\n"; return EXIT_SUCCESS; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/lib/multithread.sh��������������������������������������������������������������0000755�0001750�0001750�00000003012�14551337306�013554� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Run the program to test reading a FITS file to memory and writing it on # the command-line in multi-threaded mode. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). img=psf.fits execname=./multithread # SKIP or FAIL? # ============= # # If the actual executable wasn't built, then this is a hard error and must # be FAIL. But if the input doesn't exist, its not this test's fault. So # just SKIP this test. if [ ! -f $execname ]; then echo "$execname library program not compiled."; exit 99; fi; if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi; # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/lib/versioncxx.sh���������������������������������������������������������������0000755�0001750�0001750�00000002433�14551337306�013450� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Run the program to build a report the Gnuastro version in C++. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). execname=./versioncxx # Skip? # ===== # # If the actual executable wasn't built, then this is a hard error and must # be FAIL. if [ ! -f $execname ]; then echo "$execname library program not compiled."; exit 99; fi; # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/match/��������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�011304� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/match/sort-based.sh�������������������������������������������������������������0000755�0001750�0001750�00000003320�14551337306�013625� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Match the two input catalogs (using the classical sort-based method). # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=match execname=../bin/$prog/ast$prog cat1=$topsrc/tests/$prog/positions-1.txt cat2=$topsrc/tests/$prog/positions-2.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $cat1 $cat2 --aperture=0.5 \ --ccol1=2,3 --ccol2=2,3 --kdtree=disable \ --output=match-sort-based.fits ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/match/merged-cols.sh������������������������������������������������������������0000755�0001750�0001750�00000003326�14551337306�013771� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Match the two input catalogs and return merged output # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=match execname=../bin/$prog/ast$prog cat1=$topsrc/tests/$prog/positions-1.txt cat2=$topsrc/tests/$prog/positions-2.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $cat1 $cat2 --aperture=0.5 --ccol1=2,3 \ --ccol2=2,3 -omatch-merged-cols.txt \ --outcols=a1,aEFGH,bACCU1,aIJKL,bACCU2 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/match/kdtree-internal.sh��������������������������������������������������������0000755�0001750�0001750�00000003443�14551337306�014660� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Match the two input catalogs based on k-d tree matching (the k-d tree is # constructed and used internally). # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Sachin Kumar Singh <sachinkumarsingh092@gmail.com> # Contributing author(s): # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=match execname=../bin/$prog/ast$prog cat1=$topsrc/tests/$prog/positions-1.txt cat2=$topsrc/tests/$prog/positions-2.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $cat1 $cat2 --aperture=0.5 \ --ccol1=2,3 --ccol2=2,3 \ --output=match-kdtree-internal.fits �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/match/kdtree-separate.sh��������������������������������������������������������0000755�0001750�0001750�00000003637�14551337306�014655� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Match the two input catalogs based on k-d tree matching (the k-d tree is # constructed first as a separate file, then used in a later call). # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=match execname=../bin/$prog/ast$prog cat1=$topsrc/tests/$prog/positions-1.txt cat2=$topsrc/tests/$prog/positions-2.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $cat1 --ccol1=2,3 --kdtree=build \ --output=match-kdtree.fits $check_with_program $execname $cat1 $cat2 --aperture=0.5 --ccol1=2,3 \ --ccol2=2,3 --kdtree=match-kdtree.fits \ --output=match-kdtree-separate.fits �������������������������������������������������������������������������������������������������gnuastro-0.22/tests/match/positions-1.txt�����������������������������������������������������������0000644�0001750�0001750�00000000663�14551337306�014160� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Column 1: ABCD # Column 2: EFGH # Column 3: IJKL # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 �����������������������������������������������������������������������������gnuastro-0.22/tests/match/positions-2.txt�����������������������������������������������������������0000644�0001750�0001750�00000000722�14551337306�014155� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Column 1: ABCD # Column 2: ACCU1 # Column 3: ACCU2 # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. 1 8.20 7.90 2 20.1 2.80 3 4.80 5.20 4 5.01 4.99 5 0.01 0.02 6 6.10 6.05 7 0.99 1.10 ����������������������������������������������gnuastro-0.22/tests/mkcatalog/����������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�012152� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkcatalog/detections.sh���������������������������������������������������������0000755�0001750�0001750�00000003535�14551337306�014601� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make a simple catalog for NoiseChisel's output. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkcatalog execname=../bin/$prog/ast$prog labels=connected-components.fits base=convolve_spatial_noised_detected.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $labels ]; then echo "$labels does not exist."; exit 77; fi if [ ! -f $base ]; then echo "$base does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $labels -h1 --valuesfile=$base \ --tableformat=txt --output=detections.txt \ --x --y --ra --dec --magnitude --sn �������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkcatalog/simple-3d.sh����������������������������������������������������������0000755�0001750�0001750�00000002536�14470407761�014240� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make a simple catalog for NoiseChisel's output. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <akhlaghi@gnu.org> # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkcatalog execname=../bin/$prog/ast$prog img=3d-cat_noised_detected_segmented.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img --x --y --z --w1 --w2 --w3 --area --sum --sn \ --upperlimit ������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkcatalog/objects-clumps.sh�����������������������������������������������������0000755�0001750�0001750�00000003376�14551337306�015375� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make a simple catalog for NoiseChisel's output. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkcatalog execname=../bin/$prog/ast$prog img=convolve_spatial_noised_detected_segmented.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like 'Valgrind' or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --x --y --ra --dec --magnitude \ --upperlimit-mag --sn --tableformat=txt \ --clumpscat --output=objects-clumps.txt ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkcatalog/aperturephot.sh�������������������������������������������������������0000755�0001750�0001750�00000003505�14551337306�015157� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make a simple catalog for NoiseChisel's output. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkcatalog objimg=clearcanvas.fits execname=../bin/$prog/ast$prog img=convolve_spatial_noised_detected.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi if [ ! -f $objimg ]; then echo "$objimg does not exist"; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $objimg --hdu=1 --valuesfile=$img \ --output=aperturephot.fits \ --obj-id --x --y --ra --dec --magnitude --sn �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�011506� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/3d-cat.sh����������������������������������������������������������������0000755�0001750�0001750�00000002453�14435153342�013042� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Create a 3D image with MakeProfiles # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <akhlaghi@gnu.org> # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog cat=$topsrc/tests/$prog/3d-cat.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi # Actual test script # ================== $execname $cat --config=.gnuastro/astmkprof-3d.conf --oversample=1 \ --output=3d-cat.fits ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/mosaic1.sh���������������������������������������������������������������0000755�0001750�0001750�00000003533�14551337306�013326� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Create a mock image from cat1.txt: # # - It includes one large and bright profile that is on the last # pixel of this image. The other tests will also build the same # profile with the absolute place fixed. # # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog cat=$topsrc/tests/$prog/mkprofcat1.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $cat --mergedsize=100,100 \ --output=mkprofcat1.fits --zeropoint=0 \ && mv 0_mkprofcat1.fits psf.fits \ && mv 1_mkprofcat1.fits psf-sharp.fits ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/mosaic2.sh���������������������������������������������������������������0000755�0001750�0001750�00000003466�14551337306�013334� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Create a mock image from cat2.txt: # # - It doesn't have any random profiles, only the large profile from # cat1.txt. The central position is set to be on the same real # place as in cat1.txt # # - Also here, test the individual option. # # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog cat=$topsrc/tests/$prog/mkprofcat2.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $cat --mergedsize=100,100 --crpix=-99,1 \ --output=mkprofcat2.fits --individual ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/mosaic3.sh���������������������������������������������������������������0000755�0001750�0001750�00000003371�14551337306�013330� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Create a mock image from cat2.txt: # # - It doesn't have any random profiles, only the large profile from # cat1.txt. The central position is set to be on the same real # place as in cat1.txt # # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog cat=$topsrc/tests/$prog/mkprofcat3.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option) # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $cat --mergedsize=100,100 --crpix=1,-99 \ --output=mkprofcat3.fits �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/mosaic4.sh���������������������������������������������������������������0000755�0001750�0001750�00000003375�14551337306�013335� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Create a mock image from cat2.txt: # # - It doesn't have any random profiles, only the large profile from # cat1.txt. The central position is set to be on the same real # place as in cat1.txt # # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog cat=$topsrc/tests/$prog/mkprofcat4.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $cat --mergedsize=100,100 --crpix=-99,-99 \ --output=mkprofcat4.fits �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/radeccat.sh��������������������������������������������������������������0000755�0001750�0001750�00000003150�14551337306�013533� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Create a mock image from radeccat.txt # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog cat=$topsrc/tests/$prog/radeccat.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $cat --ccol=RA --ccol=Dec --mode=wcs \ --mergedsize=100,100 --output=radeccat.fits ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/3d-kernel.sh�������������������������������������������������������������0000755�0001750�0001750�00000002301�14435153342�013543� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Create a 3D kernel with MakeProfiles. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <akhlaghi@gnu.org> # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi # Actual test script # ================== $execname $cat --kernel=gaussian-3d,2,3,0.5 --oversample=1 \ --output=3d-kernel.fits �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/clearcanvas.sh�����������������������������������������������������������0000755�0001750�0001750�00000003516�14551337306�014255� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make labeled regions on an image with blank pixels. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog img=convolve_spatial_noised.fits cat=$topsrc/tests/$prog/clearcanvas.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $cat --background=$img --mforflatpix \ --clearcanvas --type=int32 --output="clearcanvas.fits" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/ellipticalmasks.sh�������������������������������������������������������0000755�0001750�0001750�00000003540�14551337306�015151� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Make two masks (one flat and one circumference) cat1.txt # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=mkprof execname=../bin/$prog/ast$prog img=convolve_spatial_scaled_noised.fits cat=$topsrc/tests/$prog/ellipticalmasks.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). # # - Catalog doesn't exist (problem in tarball release). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $cat ]; then echo "$cat does not exist."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $cat --background=$img --mforflatpix --replace \ --oversample=1 --output="ellipticalmasks.fits" ����������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/3d-cat.txt���������������������������������������������������������������0000644�0001750�0001750�00000002137�14470407761�013251� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Column 1: id [counter, f32] ID of object. # Column 2: x [pix, f32] X axis (1st dim in FITS) position. # Column 3: y [pix, f32] Y axis (2nd dim in FITS) position. # Column 4: z [pix, f32] Z axis (3rd dim in FITS) position. # Column 5: Profile [name, str8] Profile function. # Column 6: re [pix, f32] Effective radius in pixels. # Column 7: n [n/a, f32] Sersic index in pixels. # Column 8: p1 [deg, f32] Position angle 1 (1st X-Z-X Euler angle). # Column 9: p2 [deg, f32] Position angle 2 (2nd X-Z-X Euler angle). # Column 10: p3 [deg, f32] Position angle 3 (3rd X-Z-X Euler angle). # Column 11: q1 [n/a, f32] Axis ratio 1 (major/dim2). # Column 12: q2 [n/a, f32] Axis ratio 2 (major/dim3). # Column 13: mag [log, f32] Magnitude # Column 14: t [n/a, f32] Truncation (multiple of re). 1 10 5 1 sersic 20 2 45 0 0 0.5 0.25 -16 2 2 50 50 160 sersic 10 4 20 30 40 1 0.5 -14 2 3 80 50 80 sersic 30 1 80 50 20 0.4 0.8 -18 2 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/clearcanvas.txt����������������������������������������������������������0000644�0001750�0001750�00000002444�14551337306�014456� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Column 1: ID [count, u8] Object ID # Column 2: X [pixel, f64] X axis position of profile center # Column 3: Y [pixel, f64] Y axis position of profile center # Column 4: Function [name, str4] Profile's radial function # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile # # Note that the positions and radii are multiplied by 5 compared to # 'mkprofcat1.txt', because we are using the over-sampled image as a # canvas. # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. 1 502 502 flat 100 1 45.000 1.000 1 2.000 2 251.605 254.135 flat 29.89 1 77.650 0.801 2 2.000 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/ellipticalmasks.txt������������������������������������������������������0000644�0001750�0001750�00000002340�14551337306�015350� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Column 1: ID [count, u8] Object ID # Column 2: X [pixel, f64] X axis position of profile center # Column 3: Y [pixel, f64] Y axis position of profile center # Column 4: Function [name, str7] Profile's radial function # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. 1 100.40 100.40 circum 20.00 2.500 45.000 1.000 NaN 2.000 2 50.321 50.827 flat 5.978 1.320 77.650 0.801 -1 2.000 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/mkprofcat1.txt�����������������������������������������������������������0000644�0001750�0001750�00000007175�14551337306�014251� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Column 1: ID [count, u8] Object ID # Column 2: X [pixel, f64] X axis position of profile center # Column 3: Y [pixel, f64] Y axis position of profile center # Column 4: Function [name, str9] Profile's radial function # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. 1 0.0000 0.0000 moffat 3.000 4.765 0.0000 1.000 0.000 5.000 1 0.0000 0.0000 gaussian 2.000 0.000 0.0000 1.000 0.000 5.000 2 100.40 100.40 sersic 20.00 2.500 45.000 1.000 -18.0 5.000 3 50.321 50.827 sersic 5.978 1.320 77.650 0.801 -15.0 5.000 4 12.874 87.816 point 0 0 0 0 -12 1 5 15.574 65.532 point 0 0 0 0 -12 1 6 41.682 33.876 point 0 0 0 0 -12 1 7 20.397 31.320 point 0 0 0 0 -12 1 8 20.397 47.640 point 0 0 0 0 -12 1 9 81.000 22.956 point 0 0 0 0 -12 1 10 45.797 14.148 point 0 0 0 0 -12 1 11 12.586 15.000 point 0 0 0 0 -12 1 12 3.935 5.4960 point 0 0 0 0 -12 1 13 5.495 40.404 point 0 0 0 0 -12 1 14 66.950 74.892 point 0 0 0 0 -12 1 15 58.287 84.972 point 0 0 0 0 -12 1 16 35.299 76.032 point 0 0 0 0 -12 1 17 49.769 50.340 point 0 0 0 0 -12 1 18 74.041 54.456 point 0 0 0 0 -12 1 19 70.357 2.3760 point 0 0 0 0 -12 1 20 90.502 9.6120 point 0 0 0 0 -12 1 21 90.934 71.916 point 0 0 0 0 -12 1 22 48.077 95.328 point 0 0 0 0 -12 1 23 66.518 39.276 point 0 0 0 0 -12 1 24 92.350 44.100 point 0 0 0 0 -12 1 25 86.819 57.156 point 0 0 0 0 -12 1 26 3.360 97.608 point 0 0 0 0 -12 1 27 45.941 64.536 point 0 0 0 0 -12 1 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/mkprofcat2.txt�����������������������������������������������������������0000644�0001750�0001750�00000002205�14551337306�014237� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Column 1: ID [count, u8] Object ID # Column 2: X [pixel, f64] X axis position of profile center # Column 3: Y [pixel, f64] Y axis position of profile center # Column 4: Function [code, i32] Profile's radial function code # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. 1 0.400 100.40 1 20.00 2.500 45.000 1.00 -18.0 5.000 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/mkprofcat3.txt�����������������������������������������������������������0000644�0001750�0001750�00000002204�14551337306�014237� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Column 1: ID [count, u8] Object ID # Column 2: X [pixel, f64] X axis position of profile center # Column 3: Y [pixel, f64] Y axis position of profile center # Column 4: Function [code, i32] Profile's radial function code # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. 1 100.40 0.40 1 20.00 2.500 45.000 1.00 -18.0 5.000 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/mkprofcat4.txt�����������������������������������������������������������0000644�0001750�0001750�00000002202�14551337306�014236� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Column 1: ID [count, u8] Object ID # Column 2: X [pixel, f64] X axis position of profile center # Column 3: Y [pixel, f64] Y axis position of profile center # Column 4: Function [name, str7] Profile's radial function # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. 1 0.40 0.40 sersic 20.00 2.500 45.000 1.00 -18.0 5.000 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/mkprof/radeccat.txt�������������������������������������������������������������0000644�0001750�0001750�00000002373�14551337306�013743� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Column 1: ID [count, u8] Object ID # Column 2: RA [deg, f64] Right Ascension of profile center # Column 3: Dec [deg, f64] Declination of profile center # Column 4: Function [name, str7] Profile's radial function # Column 5: Width [pixel, f64] For Sersic: effective radius, for Moffat, FWHM # Column 6: Sersic index [none, f64] Sersic index, or Moffat beta # Column 7: Position angle [deg, f64] Position angle of profile # Column 8: Axis ratio [frac, f64] Axis ratio of profile # Column 9: Magnitude [ABmag, f64] Magnitude of profile within truncation radius # Column 10: Truncation radius [dist, f64] Truncation radius to stop building profile # # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. 1 0.99987331 1.0001617 sersic 10.00 2.500 45.000 0.3 -6.0 2.000 2 0.99929656 1.0006917 sersic 10.00 2.500 135.00 0.3 -6.0 2.000 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/noisechisel/��������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�012515� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/noisechisel/noisechisel.sh������������������������������������������������������0000755�0001750�0001750�00000003305�14551337306�015303� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Detect objects in an image using NoiseChisel. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=noisechisel execname=../bin/$prog/ast$prog img=convolve_spatial_noised.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --detgrowquant=0.7 \ --cleangrowndet --checkdetection \ --continueaftercheck ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/noisechisel/noisechisel-3d.sh���������������������������������������������������0000755�0001750�0001750�00000002472�14435153342�015610� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Detect objects and clumps in an image using NoiseChisel. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <akhlaghi@gnu.org> # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=noisechisel img=3d-cat_noised.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img --config=.gnuastro/astnoisechisel-3d.conf ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/script/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�011514� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/script/psf-unite.sh�������������������������������������������������������������0000755�0001750�0001750�00000004665�14470407761�013724� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generate two stamps from a mock image to test the PSF stamps script # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Raul Infante-Sainz <infantesainz@gmail.com> # Contributing author(s): # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Copyright (C) 2015-2021, Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (the executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=psf-unite execname=../bin/script/astscript-$prog fits1name=0_mkprofcat2.fits dep1name=$progbdir/astcrop dep2name=$progbdir/astfits dep3name=$progbdir/astwarp dep4name=$progbdir/astmkprof dep5name=$progbdir/astarithmetic # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable script was not made. # - The programs it use weren't made. # - The input data weren't made. if [ ! -f $execname ]; then echo "$execname doesn't exist."; exit 77; fi if [ ! -f $dep1name ]; then echo "$dep1name doesn't exist."; exit 77; fi if [ ! -f $dep2name ]; then echo "$dep2name doesn't exist."; exit 77; fi if [ ! -f $dep3name ]; then echo "$dep3name doesn't exist."; exit 77; fi if [ ! -f $dep4name ]; then echo "$dep4name doesn't exist."; exit 77; fi if [ ! -f $dep5name ]; then echo "$dep5name doesn't exist."; exit 77; fi if [ ! -f $fits1name ]; then echo "$fits1name doesn't exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. # # Since we want the script to recognize the programs that it will use from # this same build of Gnuastro, we'll add the current directory to PATH. export PATH="$progbdir:$PATH" $check_with_program $execname $fits1name --inner=$fits1name \ --scale=3.3 --radius=5 \ --output=$prog.fits \ --tmpdir=tmpdir-$prog ���������������������������������������������������������������������������gnuastro-0.22/tests/script/psf-stamp.sh�������������������������������������������������������������0000755�0001750�0001750�00000005254�14551337306�013714� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generate two stamps from a mock image to test the PSF stamps script # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Raul Infante-Sainz <infantesainz@gmail.com> # Contributing author(s): # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (the executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=psf-stamp execname=../bin/script/astscript-$prog fits1name=0_mkprofcat2.fits dep1name=$progbdir/astcrop dep2name=$progbdir/astfits dep3name=$progbdir/asttable dep4name=$progbdir/astarithmetic dep5name=$progbdir/aststatistics dep6name=$progbdir/astscript-radial-profile # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable script was not made. # - The programs it use weren't made. # - The input data weren't made. if [ ! -f $execname ]; then echo "$execname doesn't exist."; exit 77; fi if [ ! -f $dep1name ]; then echo "$dep1name doesn't exist."; exit 77; fi if [ ! -f $dep2name ]; then echo "$dep2name doesn't exist."; exit 77; fi if [ ! -f $dep3name ]; then echo "$dep3name doesn't exist."; exit 77; fi if [ ! -f $dep4name ]; then echo "$dep4name doesn't exist."; exit 77; fi if [ ! -f $dep5name ]; then echo "$dep5name doesn't exist."; exit 77; fi if [ ! -f $dep6name ]; then echo "$dep6name doesn't exist."; exit 77; fi if [ ! -f $fits1name ]; then echo "$fits1name doesn't exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. # # Since we want the script to recognize the programs that it will use from # this same build of Gnuastro, we'll add the current directory to PATH. export PATH="$progbdir:$PATH" x=$($dep2name $fits1name -h1 | awk '/^NAXIS1/{print $3/2}') y=$($dep2name $fits1name -h1 | awk '/^NAXIS2/{print $3/2}') $check_with_program $execname $fits1name --center=$x,$y --mode=img \ --widthinpix=100,100 \ --output=$prog.fits \ --tmpdir=tmpdir-$prog ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/script/zeropoint.sh�������������������������������������������������������������0000755�0001750�0001750�00000005457�14470463063�014040� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check the zeropoint script. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Sepideh Eskandarlou <sepideh.eskandarlou@gmail.com> # Contributing author(s): # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Copyright (C) 2021, Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (the executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=zeropoint execname=../bin/script/astscript-$prog dep1name=$progbdir/astfits dep2name=$progbdir/asttable dep3name=$progbdir/astmatch dep4name=$progbdir/astmkprof dep5name=$progbdir/astmkcatalog intable=table-img-to-wcs.fits inimg=convolve_spatial_scaled_noised.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable script was not made. # - The programs it use weren't made. # - The input data weren't made. if [ ! -f $execname ]; then echo "$execname doesn't exist."; exit 77; fi if [ ! -f $dep1name ]; then echo "$dep1name doesn't exist."; exit 77; fi if [ ! -f $dep2name ]; then echo "$dep2name doesn't exist."; exit 77; fi if [ ! -f $dep3name ]; then echo "$dep3name doesn't exist."; exit 77; fi if [ ! -f $dep4name ]; then echo "$dep4name doesn't exist."; exit 77; fi if [ ! -f $dep5name ]; then echo "$dep5name doesn't exist."; exit 77; fi if [ ! -f $intable ]; then echo "$intable doesn't exist."; exit 77; fi if [ ! -f $inimg ]; then echo "$inimg doesn't exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. # # Since we want the script to recognize the programs that it will use from # this same build of Gnuastro, we'll add the current directory to PATH. export PATH="$progbdir:$PATH" # Test the script: finding the zeropoint. $check_with_program $execname \ $inimg \ --hdu=1 \ --keepzpap \ --refcatra=RA \ --refcatdec=DEC \ --refcat=$intable \ --starcat=$intable \ --refcatmag=Magnitude \ --aperarcsec=0.09,0.13 \ --output=zeropoint-cat.fits \ --mksrc=$topsrc/bin/script/zeropoint.mk �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/script/psf-subtract.sh����������������������������������������������������������0000755�0001750�0001750�00000005260�14470407761�014417� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generate a simple scattered light field with one single object # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Raul Infante-Sainz <infantesainz@gmail.com> # Contributing author(s): # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Copyright (C) 2015-2021, Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (the executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=psf-subtract execname=../bin/script/astscript-$prog fits1name=mkprofcat1.fits dep1name=$progbdir/astfits dep2name=$progbdir/astcrop dep3name=$progbdir/asttable dep4name=$progbdir/astarithmetic dep5name=$progbdir/aststatistics dep6name=$progbdir/astscript-radial-profile # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable script was not made. # - The programs it use weren't made. # - The input data weren't made. if [ ! -f $execname ]; then echo "$execname doesn't exist."; exit 77; fi if [ ! -f $dep1name ]; then echo "$dep1name doesn't exist."; exit 77; fi if [ ! -f $dep2name ]; then echo "$dep2name doesn't exist."; exit 77; fi if [ ! -f $dep3name ]; then echo "$dep3name doesn't exist."; exit 77; fi if [ ! -f $dep4name ]; then echo "$dep4name doesn't exist."; exit 77; fi if [ ! -f $dep5name ]; then echo "$dep5name doesn't exist."; exit 77; fi if [ ! -f $dep6name ]; then echo "$dep6name doesn't exist."; exit 77; fi if [ ! -f $fits1name ]; then echo "$fits1name doesn't exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. # # Since we want the script to recognize the programs that it will use from # this same build of Gnuastro, we'll add the current directory to PATH. export PATH="$progbdir:$PATH" x=$($dep1name $fits1name -h1 | awk '/^NAXIS1/{print $3/2}') y=$($dep1name $fits1name -h1 | awk '/^NAXIS2/{print $3/2}') $check_with_program $execname $fits1name --center=$x,$y --mode=img \ --psf=$fits1name --scale=3.3 \ --output=$prog.fits \ --tmpdir=tmpdir-$prog ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/script/sort-by-night.sh���������������������������������������������������������0000755�0001750�0001750�00000004607�14551337306�014511� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# List all FITS files in build directory by date. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=sort-by-night execname=../bin/script/astscript-$prog dep1name=$progbdir/astfits dep2name=$progbdir/asttable fits1name=clearcanvas.fits fits2name=aperturephot.fits fits3name=convolve_spatial.fits fits4name=convolve_spatial_noised.fits fits5name=convolve_spatial_noised_detected.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable script was not made. # - The programs it use weren't made. # - The input data weren't made. if [ ! -f $execname ]; then echo "$execname doesn't exist."; exit 77; fi if [ ! -f $dep1name ]; then echo "$dep1name doesn't exist."; exit 77; fi if [ ! -f $dep2name ]; then echo "$dep2name doesn't exist."; exit 77; fi if [ ! -f $fits1name ]; then echo "$dep1name doesn't exist."; exit 77; fi if [ ! -f $fits2name ]; then echo "$dep1name doesn't exist."; exit 77; fi if [ ! -f $fits3name ]; then echo "$dep1name doesn't exist."; exit 77; fi if [ ! -f $fits4name ]; then echo "$dep1name doesn't exist."; exit 77; fi if [ ! -f $fits5name ]; then echo "$dep1name doesn't exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. # # Since we want the script to recognize the programs that it will use from # this same build of Gnuastro, we'll add the current directory to PATH. export PATH="$progbdir:$PATH" $check_with_program $execname $fits1name $fits2name $fits3name \ $fits4name $fits5name �������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/script/radial-profile.sh��������������������������������������������������������0000755�0001750�0001750�00000005072�14551337306�014672� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Construct the radial profile of an image generated by mkprofile. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Raul Infante-Sainz <infantesainz@gmail.com> # Contributing author(s): # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (the executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=radial-profile execname=../bin/script/astscript-$prog dep1name=$progbdir/astfits dep2name=$progbdir/astcrop dep3name=$progbdir/astwarp dep4name=$progbdir/asttable fits1name=0_mkprofcat2.fits dep5name=$progbdir/astmkprof dep6name=$progbdir/astmkcatalog dep7name=$progbdir/astarithmetic dep8name=$progbdir/aststatistics # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable script was not made. # - The programs it use weren't made. # - The input data weren't made. if [ ! -f $execname ]; then echo "$execname doesn't exist."; exit 77; fi if [ ! -f $dep1name ]; then echo "$dep1name doesn't exist."; exit 77; fi if [ ! -f $dep2name ]; then echo "$dep2name doesn't exist."; exit 77; fi if [ ! -f $dep3name ]; then echo "$dep3name doesn't exist."; exit 77; fi if [ ! -f $dep4name ]; then echo "$dep4name doesn't exist."; exit 77; fi if [ ! -f $dep5name ]; then echo "$dep5name doesn't exist."; exit 77; fi if [ ! -f $dep6name ]; then echo "$dep6name doesn't exist."; exit 77; fi if [ ! -f $dep7name ]; then echo "$dep7name doesn't exist."; exit 77; fi if [ ! -f $dep8name ]; then echo "$dep8name doesn't exist."; exit 77; fi if [ ! -f $fits1name ]; then echo "$fits1name doesn't exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. # # Since we want the script to recognize the programs that it will use from # this same build of Gnuastro, we'll add the current directory to PATH. export PATH="$progbdir:$PATH" $check_with_program $execname $fits1name ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/script/color-faint-gray.sh������������������������������������������������������0000755�0001750�0001750�00000004635�14551337306�015161� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generate a color image from three fits files # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Raul Infante-Sainz <infantesainz@gmail.com> # Contributing author(s): # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (the executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=color-faint-gray execname=../bin/script/astscript-$prog fits1name=0_mkprofcat2.fits dep1name=$progbdir/astmkprof dep2name=$progbdir/astconvertt dep3name=$progbdir/astconvolve dep4name=$progbdir/astarithmetic dep5name=$progbdir/aststatistics # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable script was not made. # - The programs it use weren't made. # - The input data weren't made. if [ ! -f $execname ]; then echo "$execname doesn't exist."; exit 77; fi if [ ! -f $dep1name ]; then echo "$dep1name doesn't exist."; exit 77; fi if [ ! -f $dep2name ]; then echo "$dep2name doesn't exist."; exit 77; fi if [ ! -f $dep3name ]; then echo "$dep3name doesn't exist."; exit 77; fi if [ ! -f $dep4name ]; then echo "$dep4name doesn't exist."; exit 77; fi if [ ! -f $dep5name ]; then echo "$dep5name doesn't exist."; exit 77; fi if [ ! -f $fits1name ]; then echo "$fits1name doesn't exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. # # Since we want the script to recognize the programs that it will use from # this same build of Gnuastro, we'll add the current directory to PATH. export PATH="$progbdir:$PATH" $check_with_program $execname $fits1name --hdu 1 \ $fits1name --hdu 1 \ $fits1name --hdu 1 \ --output=$prog.jpg ���������������������������������������������������������������������������������������������������gnuastro-0.22/tests/script/psf-scale-factor.sh������������������������������������������������������0000755�0001750�0001750�00000005166�14470407761�015140� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Compute the flux factor of one object by itself # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Raul Infante-Sainz <infantesainz@gmail.com> # Contributing author(s): # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Copyright (C) 2015-2021, Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (the executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=psf-scale-factor execname=../bin/script/astscript-$prog fits1name=mkprofcat1.fits dep1name=$progbdir/astfits dep2name=$progbdir/astcrop dep3name=$progbdir/asttable dep4name=$progbdir/astarithmetic dep5name=$progbdir/aststatistics dep6name=$progbdir/astscript-radial-profile # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable script was not made. # - The programs it use weren't made. # - The input data weren't made. if [ ! -f $execname ]; then echo "$execname doesn't exist."; exit 77; fi if [ ! -f $dep1name ]; then echo "$dep1name doesn't exist."; exit 77; fi if [ ! -f $dep2name ]; then echo "$dep2name doesn't exist."; exit 77; fi if [ ! -f $dep3name ]; then echo "$dep3name doesn't exist."; exit 77; fi if [ ! -f $dep4name ]; then echo "$dep4name doesn't exist."; exit 77; fi if [ ! -f $dep5name ]; then echo "$dep5name doesn't exist."; exit 77; fi if [ ! -f $dep6name ]; then echo "$dep6name doesn't exist."; exit 77; fi if [ ! -f $fits1name ]; then echo "$fits1name doesn't exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. # # Since we want the script to recognize the programs that it will use from # this same build of Gnuastro, we'll add the current directory to PATH. export PATH="$progbdir:$PATH" x=$($dep1name $fits1name -h1 | awk '/^NAXIS1/{print $3/2}') y=$($dep1name $fits1name -h1 | awk '/^NAXIS2/{print $3/2}') $check_with_program $execname $fits1name --center=$x,$y --mode=img \ --psf=$fits1name --normradii=5,10 \ --tmpdir=tmpdir-$prog ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/script/psf-select-stars.sh������������������������������������������������������0000755�0001750�0001750�00000005561�14470407761�015205� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Generate a catalog of stars to test the select-stars PSF script # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Raul Infante-Sainz <infantesainz@gmail.com> # Contributing author(s): # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Copyright (C) 2021, Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (the executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=psf-select-stars execname=../bin/script/astscript-$prog dep1name=$progbdir/astmatch dep2name=$progbdir/astmkcatalog fits1name=convolve_spatial_noised.fits fits2name=convolve_spatial_noised_detected_segmented.fits fits3name=convolve_spatial_noised_detected_segmented_catalog.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable script was not made. # - The programs it use weren't made. # - The input data weren't made. if [ ! -f $execname ]; then echo "$execname doesn't exist."; exit 77; fi if [ ! -f $dep1name ]; then echo "$dep1name doesn't exist."; exit 77; fi if [ ! -f $dep2name ]; then echo "$dep2name doesn't exist."; exit 77; fi if [ ! -f $fits1name ]; then echo "$fits1name doesn't exist."; exit 77; fi if [ ! -f $fits2name ]; then echo "$fits2name doesn't exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. # # Since we want the script to recognize the programs that it will use from # this same build of Gnuastro, we'll add the current directory to PATH. export PATH="$progbdir:$PATH" # Create a catalog with appropiate parameters $check_with_program astmkcatalog $fits2name \ --ra --dec --magnitude \ --axis-ratio --output=$fits3name # Test the script: selecting good stars $check_with_program $execname $fits1name --hdu=1 \ --segmented=$fits2name \ --catalog=$fits3name \ --field=magnitude \ --magnituderange=-17,-10 \ --minaxisratio=0.85 \ --mindistdeg=0.05 \ --matchaperturedeg=0.5 \ --output=$prog.fits \ --tmpdir=tmpdir-$prog �����������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/segment/������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�011652� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/segment/segment.sh��������������������������������������������������������������0000755�0001750�0001750�00000003136�14551337306�013577� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Segment the detections into clumps and objects. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=segment execname=../bin/$prog/ast$prog img=convolve_spatial_noised_detected.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --tilesize=100,100 --snquant=0.99 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/segment/segment-3d.sh�����������������������������������������������������������0000755�0001750�0001750�00000002561�14435153342�014101� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Segment the 3D detections into clumps and objects. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=segment execname=../bin/$prog/ast$prog img=3d-cat_noised_detected.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== $execname $img --largetilesize=100,100,30 --snquant=0.99 \ --config=.gnuastro/astsegment-3d.conf �����������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/statistics/���������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�012402� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/statistics/basicstats.sh��������������������������������������������������������0000755�0001750�0001750�00000003112�14551337306�015017� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Get basic image statistics. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=statistics execname=../bin/$prog/ast$prog img=convolve_spatial_scaled_noised.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img -g9500 -l11000 --numasciibins=65 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/statistics/from-stdin.sh��������������������������������������������������������0000755�0001750�0001750�00000003106�14551337306�014744� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Measure basic table statistics using standard input. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=statistics execname=../bin/$prog/ast$prog in=$topsrc/tests/$prog/stdin-input.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $in ]; then echo "$in does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. cat $in | $check_with_program $execname ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/statistics/estimate_sky.sh������������������������������������������������������0000755�0001750�0001750�00000003452�14551337306�015367� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Estimate the Sky value on input image. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=statistics execname=../bin/$prog/ast$prog img=convolve_spatial_noised.fits # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # Note that to keep things simple we are not convolving the image, so the # result will not be too accurate! Here we just want to see if the full # tessellation, estimation, interpolation and smoothing go nicely without # any errors. # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --sky --checksky ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/statistics/fitting-polynomial-robust.sh�����������������������������������������0000755�0001750�0001750�00000003317�14551337306�020027� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Do a robust polynomial fit to the given data # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2022-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=statistics execname=../bin/$prog/ast$prog table=$topsrc/tests/statistics/fitting-data.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $table ]; then echo "$table does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $table -cX,Y --fit=polynomial-robust \ --fitmaxpower=2 --fitestimate=self \ --output=fitting-estimate.txt �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/statistics/fitting-data.txt�����������������������������������������������������0000644�0001750�0001750�00000006205�14551337306�015442� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Table to test the fitting features of Statistics # # This table was generated with the following commands using Gnuastro 0.19. # # $ export GSL_RNG_SEED=1664015492 # $ seq 0.1 0.05 2 \ # | asttable -ofitting-data.txt --envseed -c1 \ # -c'arith 1.23 -4.56 $1 x + 7.89 $1 x $1 x + set-y \ # 0.1 y x set-yerr \ # y yerr mknoise-sigma yerr' \ # --colmetadata=1,X \ # --colmetadata=2,Y \ # --colmetadata=3,Yerr # # Copyright (C) 2022-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. # # Column 1: X [ ,f64,] # Column 2: Y [arith_unit_7,f64,] Column from arithmetic operation 7 # Column 3: Yerr [ ,f64,] 0.1 0.89231850942267 0.085290003616959 0.15 0.5266417844425 0.072352503543384 0.2 0.74688387286754 0.063360003461838 0.25 0.68313579973585 0.058312503372319 0.3 0.56406673731523 0.057210003274828 0.35 0.72296542514828 0.060052503169365 0.4 0.63978968990778 0.06684000305593 0.45 0.68345010851872 0.077572502934523 0.5 0.85462157058084 0.092250002805144 0.55 1.0907144431374 0.11087250266779 0.6 1.4194495635087 0.13344000252247 0.65 1.5886836818975 0.15995250236917 0.7 1.5345607654082 0.19041000220791 0.75 2.5068820594536 0.22481250203867 0.8 2.6457411697165 0.26316000186145 0.85 3.6429002647991 0.30545250167627 0.9 3.4988944766376 0.35169000148311 0.95 3.9566235305386 0.40187250128198 1 4.7519722911804 0.45600000107288 1.05 5.2957101184984 0.51407250085581 1.1 6.3431257005222 0.57609000063077 1.15 5.8520058385084 0.64205250039775 1.2 6.612813901809 0.71196000015676 1.25 7.8955679134514 0.7858124999078 1.3 8.8245735526149 0.86360999965087 1.35 7.7953468595072 0.94535249938596 1.4 9.8088627943 1.0310399991131 1.45 11.561043909455 1.1206724988322 1.5 13.267813490096 1.2142499985434 1.55 14.12894084285 1.3117724982466 1.6 14.259646409046 1.4132399979419 1.65 15.735055395656 1.5186524976291 1.7 15.535047056382 1.6280099973084 1.75 19.426912050868 1.7413124969797 1.8 17.000366817577 1.8585599966431 1.85 18.847181551801 1.9797524962984 1.9 18.270437654511 2.1048899959458 1.95 24.684339280065 2.2339724955853 2 24.522383853646 2.3669999952167 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/statistics/stdin-input.txt������������������������������������������������������0000644�0001750�0001750�00000000664�14551337306�015350� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. 5.3932774677668 4.7389534611694 4.6367278925857 4.9336122599431 4.5610196897253 4.4582019512818 4.4601551641468 5.4839550970881 5.5289562129159 ����������������������������������������������������������������������������gnuastro-0.22/tests/table/��������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�011277� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/table/arith-img-to-wcs.sh�������������������������������������������������������0000755�0001750�0001750�00000004311�14551337306�014651� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check conversion of coordinates. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Sepideh Eskandarlou <sepideh.eskandarlou@gmail.com> # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=table execname=../bin/$prog/ast$prog inimg=convolve_spatial_scaled_noised.fits intable=$topsrc/tests/mkprof/mkprofcat1.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $intable ]; then echo "$intable doesn't exist."; exit 77; fi if [ ! -f $inimg ]; then echo "$inimg doesn't exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like 'Valgrind' or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. # # This table will be used for checking the zeropoint script. Be carful # about column metadata. $check_with_program $execname $intable \ --wcsfile=$inimg \ --equal=Function,point \ --output=table-img-to-wcs.fits \ -c'arith X Y img-to-wcs',Magnitude \ --colmetadata=2,DEC,deg,"Declination" \ --colmetadata=1,RA,deg,"Right Ascension" \ --colmetadata=3,Magnitude,log,"Magnitude of profile" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/table/txt-to-fits-ascii.sh������������������������������������������������������0000755�0001750�0001750�00000003204�14551337306�015046� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert an ASCII table to a binary table # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=table execname=../bin/$prog/ast$prog table=$topsrc/tests/$prog/table.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $table ]; then echo "$table doesn't exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $table --output=ascii-table.fits \ --tableformat=fits-ascii ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/table/fits-ascii-to-txt.sh������������������������������������������������������0000755�0001750�0001750�00000003100�14551337306�015041� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert an ASCII table to a binary table # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=table table=ascii-table.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $table ]; then echo "$table doesn't exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $table --output=from-ascii-table.txt ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/table/txt-to-fits-binary.sh�����������������������������������������������������0000755�0001750�0001750�00000003204�14551337306�015242� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert an ASCII table to a binary table # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=table execname=../bin/$prog/ast$prog table=$topsrc/tests/$prog/table.txt # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $table ]; then echo "$table does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $table --output=binary-table.fits \ --tableformat=fits-binary ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/table/fits-binary-to-txt.sh�����������������������������������������������������0000755�0001750�0001750�00000003104�14551337306�015241� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert an ASCII table to a binary table # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=table table=binary-table.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $table ]; then echo "$table doesn't exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like 'Valgrind' or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $table --output=from-binary-table.txt ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/table/sexagesimal-to-deg.sh�����������������������������������������������������0000755�0001750�0001750�00000003016�14551337306�015236� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Convert sexagesimal coordinates to degrees, while also reading input from # a pipe. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2021-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=table execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like 'Valgrind' or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. echo "7h34m35.5498 31d53m14.352s" | $check_with_program $execname ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/table/table.txt�����������������������������������������������������������������0000644�0001750�0001750�00000006620�14551337306�013054� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# A single table to test the reading and writing functions. # # - It contains all the types. # - String columns, names, and units have space characters. # - Blank values in all the columns. # - Empty lines (not comment or data. # - Column information comments are not in the same order as data. # - A column (12, i.e., the last) with no information. # - A vector column. # - Some blank values different from the internal blank values. # Column 10: DOUBLE [no units, f64, 255] Column with double values # Column 1: UINT8_DATA [no units, u8, 5] Column with unsigned char values # Column 2: INT8 [no-units, i8] Column with char values # Column 3: STRING data [, str21, no data] Column with string values # Column 4: UINT16 data [,u16] Column with unsigned short values # Column 5: INT16 [no units, i16] Column with short values # Column 7: INT32 [no units, i32] Column with long values # Column 8: INT64 [no units, i64] Another column of long values # Column 9: FLOAT32 [no units, f32,-99] Column with float values # Column 6: UINT32 [,u32] # Column 11: VECTOR [no-units, f32(3)] Each row has three values # IMPORTANT NOTE FOR FITS ASCII tables: CFITSIO will give its error # 412 (data type conversion overflow) when the number cannot be # printed in the provided space (with full precision). So make sure # that the full-integer part of the number has less characters than # the 'width - precision - 1' (when everything is default, you can get # these values from 'lib/gnuastro/table.h'). # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice and # this notice are preserved. This file is offered as-is, without any # warranty. 1 -1 The vertical lines 3455 -3455 1 -1 9 1874.103872 8.391334343995 +0.672147 +1.806462 -1.191592 1 2 -2 are only for easy 3466 -3466 2 -2 10 123.93373 893.3497e5 +5.600531 +3.342579 +4.003947 2 3 -3 visual identification 3467 -3467 3 -3 12 -0.737648 nan +8.286964 +1.593513 -11.908021 3 4 -4 of the limits of this 3468 -3468 4 -4 800 78.983 8.2328438e8 +1.831690 -0.370989 +10.096006 4 5 -5 |string column. | 3469 -3469 5 -5 8923 -99 -7.32384e4 -16.008546 +7.949368 +2.401607 5 6 -6 |characters beyond | 20821 -20821 6 -6 9823 -99 nan +1.724322 +1.178122 -1.299836 6 7 -7 the last one will be 20822 -20822 7 -7 7232 9999 8.3343e-5 +2.044397 +2.859421 -2.17172 7 8 -8 read as a number. 20823 -20823 8 -8 921 2.3 934892734.82 +9.722353 -5.720703 +4.191695 8 9 -9 With@Some#!STRANGE@ 60983 -25722 9 -9 8127 -99 3474924.489252 +2.304411 +6.798331 -1.780500 9 10 -10 Characters%^&*()~ 62182 -30100 10 -10 8287 7.3e-4 -3467.3432e5 +1.537032 -5.253743 +3.832875 10 11 -12 no data 65500 -32700 11 -11 999 8.73E2 nan +9.388170 -2.710523 +2.262376 11 255 -12 -- Last Line :-) -- 65501 -32701 12 -12 8282 892.23 8975.3653 -10.782658 +2.881371 +0.951901 12 ����������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/warp/���������������������������������������������������������������������������0000755�0001750�0001750�00000000000�14557514203�011161� 5�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/warp/warp_scale.sh��������������������������������������������������������������0000755�0001750�0001750�00000003102�14551337306�013555� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Scale an image to 1/5th of its input scale. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=warp img=convolve_spatial.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --scale=1/5 --centeroncorner ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/warp/homographic.sh�������������������������������������������������������������0000755�0001750�0001750�00000003320�14551337306�013737� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Apply a general homographic transformation to an image. # # See the Tests subsection of the manual for a complete explanation # (in the Installing gnuastro section). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2015-2024 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # Preliminaries # ============= # # Set the variables (The executable is in the build tree). Do the # basic checks to see if the executable is made or if the defaults # file exists (basicchecks.sh is in the source tree). prog=warp img=convolve_spatial.fits execname=../bin/$prog/ast$prog # Skip? # ===== # # If the dependencies of the test don't exist, then skip it. There are two # types of dependencies: # # - The executable was not made (for example due to a configure option), # # - The input data was not made (for example the test that created the # data file failed). if [ ! -f $execname ]; then echo "$execname not created."; exit 77; fi if [ ! -f $img ]; then echo "$img does not exist."; exit 77; fi # Actual test script # ================== # # 'check_with_program' can be something like Valgrind or an empty # string. Such programs will execute the command if present and help in # debugging when the developer doesn't have access to the user's system. $check_with_program $execname $img --output=homographic.fits --coveredfrac=0.5 \ --matrix="0.707106781,-0.707106781,0, 0.707106781, 0.707106781,0, 0.001,0.002,1" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/Makefile.am���������������������������������������������������������������������0000644�0001750�0001750�00000032626�14551337306�012176� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.inx ## ## Original author: ## Mohammad Akhlaghi <mohammad@akhlaghi.org> ## Contributing author(s): ## Copyright (C) 2015-2024 Free Software Foundation, Inc. ## ## Gnuastro is free software: you can redistribute it and/or modify it ## under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## Gnuastro 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 ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. ## Translate conditions that came from './configure' into variables that can ## be used here. This includes the programs and teh dependencies of the ## checks. ## ## Dependency structure ## ==================== ## ## The tests depend on each other. One way to fix this is to call them in ## the order that their dependence is satisfied. But that is prone to ## errors and a lot of problem. The user also not want to build all the ## programs. Also, Make allows us to work with multiple threads (with ## '-jN') and in that case, it is vital to define the dependencies. ## ## The output of all the tests that should be used (is recognized by ## Automake and will not mess the system) is the name of the test file ## appended by a '.log'. It contains the output of the program on standard ## output and error. THIS IS IMPORTANT: So even if the program fails, the ## .log file is created. The check if the input for a test exists or not ## should be checked in the test that depends on it, it can't be done here ## in the Makefile. if COND_CHECK_WITH_VALGRIND MAYBE_CHECK_WITH_PROGRAM = "valgrind" endif if COND_HASGHOSTSCRIPT MAYBE_HASGHOSTSCRIPT = "yes" endif if COND_HASLIBJPEG MAYBE_HASLIBJPEG = "yes" endif if COND_HASLIBTIFF MAYBE_HASLIBTIFF = "yes" endif if COND_HASCXX MAYBE_CXX_PROGS = versioncxx MAYBE_CXX_TESTS = lib/versioncxx.sh versioncxx_SOURCES = lib/versioncxx.cpp endif if COND_ARITHMETIC MAYBE_ARITHMETIC_TESTS = arithmetic/or.sh \ arithmetic/where.sh \ arithmetic/snimage.sh \ arithmetic/onlynumbers.sh \ arithmetic/connected-components.sh \ arithmetic/mknoise-sigma-from-mean.sh \ arithmetic/mknoise-sigma-from-mean-3d.sh arithmetic/or.sh: segment/segment.sh.log arithmetic/onlynumbers.sh: prepconf.sh.log arithmetic/where.sh: noisechisel/noisechisel.sh.log arithmetic/snimage.sh: noisechisel/noisechisel.sh.log arithmetic/mknoise-sigma-from-mean.sh: warp/warp_scale.sh.log arithmetic/mknoise-sigma-from-mean-3d.sh: mkprof/3d-cat.sh.log arithmetic/connected-components.sh: noisechisel/noisechisel.sh.log endif if COND_BUILDPROG MAYBE_BUILDPROG_TESTS = buildprog/simpleio.sh buildprog/simpleio.sh: mkprof/mosaic1.sh.log endif if COND_CONVERTT MAYBE_CONVERTT_TESTS = convertt/blankch.sh \ convertt/fitstotxt.sh \ convertt/jpegtotxt.sh \ convertt/fitstopdf.sh \ convertt/jpegtofits.sh \ convertt/fitstotiff.sh \ convertt/fitstojpeg.sh \ convertt/fitstojpegcmyk.sh convertt/fitstopdf.sh: crop/section.sh.log convertt/blankch.sh: mkprof/mosaic1.sh.log convertt/fitstotxt.sh: mkprof/mosaic1.sh.log convertt/fitstojpeg.sh: mkprof/mosaic1.sh.log convertt/fitstotiff.sh: mkprof/mosaic1.sh.log convertt/jpegtofits.sh: convertt/blankch.sh.log convertt/jpegtotxt.sh: convertt/fitstojpeg.sh.log convertt/fitstojpegcmyk.sh: mkprof/mosaic1.sh.log endif if COND_CONVOLVE MAYBE_CONVOLVE_TESTS = convolve/spatial.sh \ convolve/frequency.sh \ convolve/psf-match.sh \ convolve/spectrum-1d.sh convolve/spectrum-1d.sh: prepconf.sh.log convolve/spatial.sh: mkprof/mosaic1.sh.log convolve/psf-match.sh: mkprof/mosaic1.sh.log convolve/frequency.sh: mkprof/mosaic1.sh.log endif if COND_COSMICCAL MAYBE_COSMICCAL_TESTS = cosmiccal/simpletest.sh cosmiccal/simpletest.sh: prepconf.sh.log endif if COND_CROP MAYBE_CROP_TESTS = crop/imgcat.sh \ crop/wcscat.sh \ crop/section.sh \ crop/imgcenter.sh \ crop/wcscenter.sh \ crop/imgpolygon.sh \ crop/wcspolygon.sh \ crop/imgpolygonout.sh \ crop/imgcenternoblank.sh crop/imgcat.sh: mkprof/mosaic1.sh.log crop/wcscat.sh: mkprof/mosaic1.sh.log \ mkprof/mosaic2.sh.log \ mkprof/mosaic3.sh.log \ mkprof/mosaic4.sh.log crop/section.sh: mkprof/mosaic1.sh.log crop/imgcenter.sh: mkprof/mosaic1.sh.log crop/wcscenter.sh: mkprof/mosaic1.sh.log \ mkprof/mosaic2.sh.log \ mkprof/mosaic3.sh.log \ mkprof/mosaic4.sh.log crop/imgpolygon.sh: mkprof/mosaic1.sh.log crop/wcspolygon.sh: mkprof/mosaic1.sh.log \ mkprof/mosaic2.sh.log \ mkprof/mosaic3.sh.log \ mkprof/mosaic4.sh.log crop/imgpolygonout.sh: mkprof/mosaic1.sh.log crop/imgcenternoblank.sh: mkprof/mosaic1.sh.log endif if COND_FITS MAYBE_FITS_TESTS = fits/write.sh \ fits/print.sh \ fits/update.sh \ fits/delete.sh \ fits/copyhdu.sh fits/print.sh: fits/write.sh.log fits/update.sh: fits/write.sh.log fits/delete.sh: fits/write.sh.log fits/write.sh: mkprof/mosaic1.sh.log fits/copyhdu.sh: fits/write.sh.log mkprof/mosaic2.sh.log endif if COND_MATCH MAYBE_MATCH_TESTS = match/sort-based.sh \ match/merged-cols.sh \ match/kdtree-internal.sh \ match/kdtree-separate.sh match/sort-based.sh: prepconf.sh.log match/merged-cols.sh: prepconf.sh.log match/kdtree-internal.sh: prepconf.sh.log match/kdtree-separate.sh: prepconf.sh.log endif if COND_MKCATALOG MAYBE_MKCATALOG_TESTS = mkcatalog/detections.sh \ mkcatalog/simple-3d.sh \ mkcatalog/objects-clumps.sh \ mkcatalog/aperturephot.sh mkcatalog/simple-3d.sh: segment/segment-3d.sh.log mkcatalog/objects-clumps.sh: segment/segment.sh.log mkcatalog/aperturephot.sh: noisechisel/noisechisel.sh.log \ mkprof/clearcanvas.sh.log mkcatalog/detections.sh: arithmetic/connected-components.sh.log endif if COND_MKPROF MAYBE_MKPROF_TESTS = mkprof/3d-cat.sh \ mkprof/mosaic1.sh \ mkprof/mosaic2.sh \ mkprof/mosaic3.sh \ mkprof/mosaic4.sh \ mkprof/radeccat.sh \ mkprof/3d-kernel.sh \ mkprof/clearcanvas.sh \ mkprof/ellipticalmasks.sh mkprof/3d-cat.sh: prepconf.sh.log mkprof/mosaic1.sh: prepconf.sh.log mkprof/mosaic2.sh: prepconf.sh.log mkprof/mosaic3.sh: prepconf.sh.log mkprof/mosaic4.sh: prepconf.sh.log mkprof/radeccat.sh: prepconf.sh.log mkprof/3d-kernel.sh: prepconf.sh.log mkprof/clearcanvas.sh: arithmetic/mknoise-sigma-from-mean.sh.log mkprof/ellipticalmasks.sh: arithmetic/mknoise-sigma-from-mean.sh.log endif if COND_NOISECHISEL MAYBE_NOISECHISEL_TESTS = noisechisel/noisechisel.sh \ noisechisel/noisechisel-3d.sh noisechisel/noisechisel.sh: arithmetic/mknoise-sigma-from-mean.sh.log noisechisel/noisechisel-3d.sh: arithmetic/mknoise-sigma-from-mean-3d.sh.log endif if COND_SEGMENT MAYBE_SEGMENT_TESTS = segment/segment.sh \ segment/segment-3d.sh segment/segment.sh: noisechisel/noisechisel.sh.log segment/segment-3d.sh: noisechisel/noisechisel-3d.sh.log endif if COND_STATISTICS MAYBE_STATISTICS_TESTS = statistics/basicstats.sh \ statistics/from-stdin.sh \ statistics/estimate_sky.sh \ statistics/fitting-polynomial-robust.sh statistics/from-stdin.sh: prepconf.sh.log statistics/fitting-polynomial-robust.sh: prepconf.sh.log statistics/basicstats.sh: arithmetic/mknoise-sigma-from-mean.sh.log statistics/estimate_sky.sh: arithmetic/mknoise-sigma-from-mean.sh.log endif if COND_TABLE MAYBE_TABLE_TESTS = table/arith-img-to-wcs.sh \ table/txt-to-fits-ascii.sh \ table/fits-ascii-to-txt.sh \ table/txt-to-fits-binary.sh \ table/fits-binary-to-txt.sh \ table/sexagesimal-to-deg.sh table/txt-to-fits-ascii.sh: prepconf.sh.log table/txt-to-fits-binary.sh: prepconf.sh.log table/sexagesimal-to-deg.sh: prepconf.sh.log table/fits-ascii-to-txt.sh: table/txt-to-fits-ascii.sh.log table/fits-binary-to-txt.sh: table/txt-to-fits-binary.sh.log table/arith-img-to-wcs.sh: arithmetic/mknoise-sigma-from-mean.sh.log endif if COND_WARP MAYBE_WARP_TESTS = warp/warp_scale.sh \ warp/homographic.sh warp/warp_scale.sh: convolve/spatial.sh.log warp/homographic.sh: convolve/spatial.sh.log endif # Script tests. SCRIPT_TESTS = script/psf-unite.sh \ script/psf-stamp.sh \ script/zeropoint.sh \ script/psf-subtract.sh \ script/sort-by-night.sh \ script/radial-profile.sh \ script/color-faint-gray.sh \ script/psf-scale-factor.sh \ script/psf-select-stars.sh # We want to have several FITS files as input for this script. script/psf-unite.sh: mkprof/mosaic2.sh.log script/psf-stamp.sh: mkprof/mosaic2.sh.log script/psf-subtract.sh: mkprof/mosaic1.sh.log script/radial-profile.sh: mkprof/mosaic2.sh.log script/psf-scale-factor.sh: mkprof/mosaic1.sh.log script/color-faint-gray.sh: mkprof/mosaic2.sh.log script/psf-select-stars.sh: segment/segment.sh.log script/zeropoint.sh: table/arith-img-to-wcs.sh.log script/sort-by-night.sh: mkcatalog/aperturephot.sh.log # Environment variables for the test scripts. AM_TESTS_ENVIRONMENT = \ export LANG=C; \ export AWK=$(AWK); \ export LC_NUMERIC=C; \ export mkdir_p="$(MKDIR_P)"; \ export progbdir=programs-built; \ export topsrc=$(abs_top_srcdir); \ export topbuild=$(abs_top_builddir); \ export haslibjpeg=$(MAYBE_HASLIBJPEG); \ export haslibtiff=$(MAYBE_HASLIBTIFF); \ export hasghostscript=$(MAYBE_HASGHOSTSCRIPT); \ export check_with_program=$(MAYBE_CHECK_WITH_PROGRAM); # Library checks # ============== # # The Gnuastro library is checked by compiling programs and linking them # with the library. As described in the last paragraph of the "Scripts # based test suites" section of the Automake manual, all targets specified # by 'check_PROGRAMS' are compiled prior to actually running the targets of # 'TESTS'. So they do not need to be specified as any dependency, they will # be present when the '.sh' based tests are run. # The 'gnuastro/config.h' (needed by Gnuastro's library) is built by # '../lib/Makefile.am' and is only meant for outside users (to be tested # here). Thus (unlike the programs, which use 'config.h') we need to add # the top build directory to the include search directories ('-I'). LDADD = -lgnuastro $(CONFIG_LDADD) AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_srcdir)/lib -I\$(top_builddir)/lib # Rest of library check settings. check_PROGRAMS = multithread $(MAYBE_CXX_PROGS) multithread_SOURCES = lib/multithread.c lib/multithread.sh: mkprof/mosaic1.sh.log # Final Tests # =========== TESTS = prepconf.sh \ lib/multithread.sh \ $(MAYBE_CXX_TESTS) \ $(MAYBE_ARITHMETIC_TESTS) \ $(MAYBE_BUILDPROG_TESTS) \ $(MAYBE_CONVERTT_TESTS) \ $(MAYBE_CONVOLVE_TESTS) \ $(MAYBE_COSMICCAL_TESTS) \ $(MAYBE_CROP_TESTS) \ $(MAYBE_FITS_TESTS) \ $(MAYBE_MATCH_TESTS) \ $(MAYBE_MKCATALOG_TESTS) \ $(MAYBE_MKPROF_TESTS) \ $(MAYBE_NOISECHISEL_TESTS) \ $(MAYBE_SEGMENT_TESTS) \ $(MAYBE_STATISTICS_TESTS) \ $(MAYBE_SUBTRACTSKY_TESTS) \ $(MAYBE_TABLE_TESTS) \ $(MAYBE_WARP_TESTS) \ $(SCRIPT_TESTS) # Files to distribute within the tarball (sorted alphabetically). EXTRA_DIST = $(TESTS) during-dev.sh \ buildprog/simpleio.c \ convolve/spectrum.txt \ crop/cat.txt \ match/positions-1.txt \ match/positions-2.txt \ mkprof/3d-cat.txt \ mkprof/clearcanvas.txt \ mkprof/ellipticalmasks.txt \ mkprof/mkprofcat1.txt \ mkprof/mkprofcat2.txt \ mkprof/mkprofcat3.txt \ mkprof/mkprofcat4.txt \ mkprof/radeccat.txt \ statistics/fitting-data.txt \ statistics/stdin-input.txt \ table/table.txt # Files that must be cleaned with 'make clean'. CLEANFILES = *.log *.txt *.jpg *.fits *.pdf *.eps *.tif simpleio # CLEANFILES is only for files, not directories. Therefore we are using # Automake's extending rules to clean the temporary '.gnuastro' directory # that was built by the 'prepconf.sh' scripot. See "Extending Automake # rules", and the "What Gets Cleaned" sections of the Automake manual. clean-local:; rm -rf .gnuastro ����������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/Makefile.in���������������������������������������������������������������������0000644�0001750�0001750�00000506330�14557513751�012213� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = multithread$(EXEEXT) $(am__EXEEXT_1) TESTS = prepconf.sh lib/multithread.sh $(MAYBE_CXX_TESTS) \ $(MAYBE_ARITHMETIC_TESTS) $(MAYBE_BUILDPROG_TESTS) \ $(MAYBE_CONVERTT_TESTS) $(MAYBE_CONVOLVE_TESTS) \ $(MAYBE_COSMICCAL_TESTS) $(MAYBE_CROP_TESTS) \ $(MAYBE_FITS_TESTS) $(MAYBE_MATCH_TESTS) \ $(MAYBE_MKCATALOG_TESTS) $(MAYBE_MKPROF_TESTS) \ $(MAYBE_NOISECHISEL_TESTS) $(MAYBE_SEGMENT_TESTS) \ $(MAYBE_STATISTICS_TESTS) $(MAYBE_TABLE_TESTS) \ $(MAYBE_WARP_TESTS) $(SCRIPT_TESTS) subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/bootstrapped/m4/00gnulib.m4 \ $(top_srcdir)/bootstrapped/m4/__inline.m4 \ $(top_srcdir)/bootstrapped/m4/absolute-header.m4 \ $(top_srcdir)/bootstrapped/m4/access.m4 \ $(top_srcdir)/bootstrapped/m4/alloca.m4 \ $(top_srcdir)/bootstrapped/m4/argp.m4 \ $(top_srcdir)/bootstrapped/m4/arpa_inet_h.m4 \ $(top_srcdir)/bootstrapped/m4/assert_h.m4 \ $(top_srcdir)/bootstrapped/m4/ax_check_compile_flag.m4 \ $(top_srcdir)/bootstrapped/m4/ax_compare_version.m4 \ $(top_srcdir)/bootstrapped/m4/ax_pthread.m4 \ $(top_srcdir)/bootstrapped/m4/btowc.m4 \ $(top_srcdir)/bootstrapped/m4/builtin-expect.m4 \ $(top_srcdir)/bootstrapped/m4/c-bool.m4 \ $(top_srcdir)/bootstrapped/m4/c32rtomb.m4 \ $(top_srcdir)/bootstrapped/m4/calloc.m4 \ $(top_srcdir)/bootstrapped/m4/chdir-long.m4 \ $(top_srcdir)/bootstrapped/m4/close.m4 \ $(top_srcdir)/bootstrapped/m4/codeset.m4 \ $(top_srcdir)/bootstrapped/m4/creat.m4 \ $(top_srcdir)/bootstrapped/m4/ctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirent_h.m4 \ $(top_srcdir)/bootstrapped/m4/dirfd.m4 \ $(top_srcdir)/bootstrapped/m4/double-slash-root.m4 \ $(top_srcdir)/bootstrapped/m4/dup.m4 \ $(top_srcdir)/bootstrapped/m4/dup2.m4 \ $(top_srcdir)/bootstrapped/m4/eealloc.m4 \ $(top_srcdir)/bootstrapped/m4/environ.m4 \ $(top_srcdir)/bootstrapped/m4/errno_h.m4 \ $(top_srcdir)/bootstrapped/m4/error.m4 \ $(top_srcdir)/bootstrapped/m4/error_h.m4 \ $(top_srcdir)/bootstrapped/m4/euidaccess.m4 \ $(top_srcdir)/bootstrapped/m4/exponentd.m4 \ $(top_srcdir)/bootstrapped/m4/exponentf.m4 \ $(top_srcdir)/bootstrapped/m4/exponentl.m4 \ $(top_srcdir)/bootstrapped/m4/extensions.m4 \ $(top_srcdir)/bootstrapped/m4/extern-inline.m4 \ $(top_srcdir)/bootstrapped/m4/faccessat.m4 \ $(top_srcdir)/bootstrapped/m4/fchdir.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl-o.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl.m4 \ $(top_srcdir)/bootstrapped/m4/fcntl_h.m4 \ $(top_srcdir)/bootstrapped/m4/fdopen.m4 \ $(top_srcdir)/bootstrapped/m4/filenamecat.m4 \ $(top_srcdir)/bootstrapped/m4/flexmember.m4 \ $(top_srcdir)/bootstrapped/m4/float_h.m4 \ $(top_srcdir)/bootstrapped/m4/fpieee.m4 \ $(top_srcdir)/bootstrapped/m4/free.m4 \ $(top_srcdir)/bootstrapped/m4/fstat.m4 \ $(top_srcdir)/bootstrapped/m4/fstatat.m4 \ $(top_srcdir)/bootstrapped/m4/ftruncate.m4 \ $(top_srcdir)/bootstrapped/m4/func.m4 \ $(top_srcdir)/bootstrapped/m4/getcwd.m4 \ $(top_srcdir)/bootstrapped/m4/getdelim.m4 \ $(top_srcdir)/bootstrapped/m4/getdtablesize.m4 \ $(top_srcdir)/bootstrapped/m4/getgroups.m4 \ $(top_srcdir)/bootstrapped/m4/getline.m4 \ $(top_srcdir)/bootstrapped/m4/getopt.m4 \ $(top_srcdir)/bootstrapped/m4/getpagesize.m4 \ $(top_srcdir)/bootstrapped/m4/getprogname.m4 \ $(top_srcdir)/bootstrapped/m4/gettimeofday.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-common.m4 \ $(top_srcdir)/bootstrapped/m4/gnulib-comp.m4 \ $(top_srcdir)/bootstrapped/m4/group-member.m4 \ $(top_srcdir)/bootstrapped/m4/host-cpu-c-abi.m4 \ $(top_srcdir)/bootstrapped/m4/include_next.m4 \ $(top_srcdir)/bootstrapped/m4/inet_pton.m4 \ $(top_srcdir)/bootstrapped/m4/intl-thread-locale.m4 \ $(top_srcdir)/bootstrapped/m4/intlmacosx.m4 \ $(top_srcdir)/bootstrapped/m4/intmax_t.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes.m4 \ $(top_srcdir)/bootstrapped/m4/inttypes_h.m4 \ $(top_srcdir)/bootstrapped/m4/ioctl.m4 \ $(top_srcdir)/bootstrapped/m4/isblank.m4 \ $(top_srcdir)/bootstrapped/m4/isnand.m4 \ $(top_srcdir)/bootstrapped/m4/isnanf.m4 \ $(top_srcdir)/bootstrapped/m4/isnanl.m4 \ $(top_srcdir)/bootstrapped/m4/iswblank.m4 \ $(top_srcdir)/bootstrapped/m4/iswctype.m4 \ $(top_srcdir)/bootstrapped/m4/iswdigit.m4 \ $(top_srcdir)/bootstrapped/m4/iswpunct.m4 \ $(top_srcdir)/bootstrapped/m4/iswxdigit.m4 \ $(top_srcdir)/bootstrapped/m4/langinfo_h.m4 \ $(top_srcdir)/bootstrapped/m4/largefile.m4 \ $(top_srcdir)/bootstrapped/m4/lcmessage.m4 \ $(top_srcdir)/bootstrapped/m4/ldexp.m4 \ $(top_srcdir)/bootstrapped/m4/lib-ld.m4 \ $(top_srcdir)/bootstrapped/m4/lib-link.m4 \ $(top_srcdir)/bootstrapped/m4/lib-prefix.m4 \ $(top_srcdir)/bootstrapped/m4/libtool.m4 \ $(top_srcdir)/bootstrapped/m4/libunistring-base.m4 \ $(top_srcdir)/bootstrapped/m4/limits-h.m4 \ $(top_srcdir)/bootstrapped/m4/localcharset.m4 \ $(top_srcdir)/bootstrapped/m4/locale-fr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-ja.m4 \ $(top_srcdir)/bootstrapped/m4/locale-tr.m4 \ $(top_srcdir)/bootstrapped/m4/locale-zh.m4 \ $(top_srcdir)/bootstrapped/m4/locale_h.m4 \ $(top_srcdir)/bootstrapped/m4/localeconv.m4 \ $(top_srcdir)/bootstrapped/m4/localename.m4 \ $(top_srcdir)/bootstrapped/m4/lock.m4 \ $(top_srcdir)/bootstrapped/m4/lstat.m4 \ $(top_srcdir)/bootstrapped/m4/ltoptions.m4 \ $(top_srcdir)/bootstrapped/m4/ltsugar.m4 \ $(top_srcdir)/bootstrapped/m4/ltversion.m4 \ $(top_srcdir)/bootstrapped/m4/lt~obsolete.m4 \ $(top_srcdir)/bootstrapped/m4/malloc.m4 \ $(top_srcdir)/bootstrapped/m4/malloca.m4 \ $(top_srcdir)/bootstrapped/m4/math_h.m4 \ $(top_srcdir)/bootstrapped/m4/mbchar.m4 \ $(top_srcdir)/bootstrapped/m4/mbiter.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtoc32.m4 \ $(top_srcdir)/bootstrapped/m4/mbrtowc.m4 \ $(top_srcdir)/bootstrapped/m4/mbsinit.m4 \ $(top_srcdir)/bootstrapped/m4/mbstate_t.m4 \ $(top_srcdir)/bootstrapped/m4/mbtowc.m4 \ $(top_srcdir)/bootstrapped/m4/memchr.m4 \ $(top_srcdir)/bootstrapped/m4/memmove.m4 \ $(top_srcdir)/bootstrapped/m4/mempcpy.m4 \ $(top_srcdir)/bootstrapped/m4/memrchr.m4 \ $(top_srcdir)/bootstrapped/m4/minmax.m4 \ $(top_srcdir)/bootstrapped/m4/mktime.m4 \ $(top_srcdir)/bootstrapped/m4/mmap-anon.m4 \ $(top_srcdir)/bootstrapped/m4/mode_t.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-inval.m4 \ $(top_srcdir)/bootstrapped/m4/msvc-nothrow.m4 \ $(top_srcdir)/bootstrapped/m4/multiarch.m4 \ $(top_srcdir)/bootstrapped/m4/musl.m4 \ $(top_srcdir)/bootstrapped/m4/nan-mips.m4 \ $(top_srcdir)/bootstrapped/m4/nanosleep.m4 \ $(top_srcdir)/bootstrapped/m4/netinet_in_h.m4 \ $(top_srcdir)/bootstrapped/m4/nl_langinfo.m4 \ $(top_srcdir)/bootstrapped/m4/nocrash.m4 \ $(top_srcdir)/bootstrapped/m4/nproc.m4 \ $(top_srcdir)/bootstrapped/m4/off_t.m4 \ $(top_srcdir)/bootstrapped/m4/open-cloexec.m4 \ $(top_srcdir)/bootstrapped/m4/open-slash.m4 \ $(top_srcdir)/bootstrapped/m4/open.m4 \ $(top_srcdir)/bootstrapped/m4/openat.m4 \ $(top_srcdir)/bootstrapped/m4/pathmax.m4 \ $(top_srcdir)/bootstrapped/m4/perror.m4 \ $(top_srcdir)/bootstrapped/m4/pipe.m4 \ $(top_srcdir)/bootstrapped/m4/printf.m4 \ $(top_srcdir)/bootstrapped/m4/pselect.m4 \ $(top_srcdir)/bootstrapped/m4/pthread-thread.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_h.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/bootstrapped/m4/pthread_sigmask.m4 \ $(top_srcdir)/bootstrapped/m4/putenv.m4 \ $(top_srcdir)/bootstrapped/m4/raise.m4 \ $(top_srcdir)/bootstrapped/m4/random.m4 \ $(top_srcdir)/bootstrapped/m4/random_r.m4 \ $(top_srcdir)/bootstrapped/m4/rawmemchr.m4 \ $(top_srcdir)/bootstrapped/m4/realloc.m4 \ $(top_srcdir)/bootstrapped/m4/reallocarray.m4 \ $(top_srcdir)/bootstrapped/m4/regex.m4 \ $(top_srcdir)/bootstrapped/m4/save-cwd.m4 \ $(top_srcdir)/bootstrapped/m4/sched_h.m4 \ $(top_srcdir)/bootstrapped/m4/sched_yield.m4 \ $(top_srcdir)/bootstrapped/m4/secure_getenv.m4 \ $(top_srcdir)/bootstrapped/m4/select.m4 \ $(top_srcdir)/bootstrapped/m4/semaphore.m4 \ $(top_srcdir)/bootstrapped/m4/setenv.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale.m4 \ $(top_srcdir)/bootstrapped/m4/setlocale_null.m4 \ $(top_srcdir)/bootstrapped/m4/signal_h.m4 \ $(top_srcdir)/bootstrapped/m4/signalblocking.m4 \ $(top_srcdir)/bootstrapped/m4/signbit.m4 \ $(top_srcdir)/bootstrapped/m4/size_max.m4 \ $(top_srcdir)/bootstrapped/m4/sleep.m4 \ $(top_srcdir)/bootstrapped/m4/snan.m4 \ $(top_srcdir)/bootstrapped/m4/socketlib.m4 \ $(top_srcdir)/bootstrapped/m4/sockets.m4 \ $(top_srcdir)/bootstrapped/m4/socklen.m4 \ $(top_srcdir)/bootstrapped/m4/sockpfaf.m4 \ $(top_srcdir)/bootstrapped/m4/ssize_t.m4 \ $(top_srcdir)/bootstrapped/m4/stat-time.m4 \ $(top_srcdir)/bootstrapped/m4/stat.m4 \ $(top_srcdir)/bootstrapped/m4/stdalign.m4 \ $(top_srcdir)/bootstrapped/m4/stddef_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdint.m4 \ $(top_srcdir)/bootstrapped/m4/stdint_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdio_h.m4 \ $(top_srcdir)/bootstrapped/m4/stdlib_h.m4 \ $(top_srcdir)/bootstrapped/m4/strcase.m4 \ $(top_srcdir)/bootstrapped/m4/strchrnul.m4 \ $(top_srcdir)/bootstrapped/m4/strdup.m4 \ $(top_srcdir)/bootstrapped/m4/strerror.m4 \ $(top_srcdir)/bootstrapped/m4/strerror_r.m4 \ $(top_srcdir)/bootstrapped/m4/string_h.m4 \ $(top_srcdir)/bootstrapped/m4/strings_h.m4 \ $(top_srcdir)/bootstrapped/m4/strndup.m4 \ $(top_srcdir)/bootstrapped/m4/strnlen.m4 \ $(top_srcdir)/bootstrapped/m4/strptime.m4 \ $(top_srcdir)/bootstrapped/m4/strtod.m4 \ $(top_srcdir)/bootstrapped/m4/strtok_r.m4 \ $(top_srcdir)/bootstrapped/m4/symlink.m4 \ $(top_srcdir)/bootstrapped/m4/sys_ioctl_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_select_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_socket_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_stat_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_time_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_types_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_uio_h.m4 \ $(top_srcdir)/bootstrapped/m4/sys_wait_h.m4 \ $(top_srcdir)/bootstrapped/m4/sysexits.m4 \ $(top_srcdir)/bootstrapped/m4/thread.m4 \ $(top_srcdir)/bootstrapped/m4/threadlib.m4 \ $(top_srcdir)/bootstrapped/m4/time.m4 \ $(top_srcdir)/bootstrapped/m4/time_h.m4 \ $(top_srcdir)/bootstrapped/m4/time_r.m4 \ $(top_srcdir)/bootstrapped/m4/tm_gmtoff.m4 \ $(top_srcdir)/bootstrapped/m4/uchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/unicase_h.m4 \ $(top_srcdir)/bootstrapped/m4/unictype_h.m4 \ $(top_srcdir)/bootstrapped/m4/uninorm_h.m4 \ $(top_srcdir)/bootstrapped/m4/unistd-safer.m4 \ $(top_srcdir)/bootstrapped/m4/unistd_h.m4 \ $(top_srcdir)/bootstrapped/m4/usleep.m4 \ $(top_srcdir)/bootstrapped/m4/vasnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/visibility.m4 \ $(top_srcdir)/bootstrapped/m4/vsnprintf.m4 \ $(top_srcdir)/bootstrapped/m4/warn-on-use.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_h.m4 \ $(top_srcdir)/bootstrapped/m4/wchar_t.m4 \ $(top_srcdir)/bootstrapped/m4/wcrtomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctob.m4 \ $(top_srcdir)/bootstrapped/m4/wctomb.m4 \ $(top_srcdir)/bootstrapped/m4/wctype.m4 \ $(top_srcdir)/bootstrapped/m4/wctype_h.m4 \ $(top_srcdir)/bootstrapped/m4/wcwidth.m4 \ $(top_srcdir)/bootstrapped/m4/wint_t.m4 \ $(top_srcdir)/bootstrapped/m4/xalloc.m4 \ $(top_srcdir)/bootstrapped/m4/xsize.m4 \ $(top_srcdir)/bootstrapped/m4/yield.m4 \ $(top_srcdir)/bootstrapped/m4/zzgnulib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = @COND_HASCXX_TRUE@am__EXEEXT_1 = versioncxx$(EXEEXT) am__dirstamp = $(am__leading_dot)dirstamp am_multithread_OBJECTS = lib/multithread.$(OBJEXT) multithread_OBJECTS = $(am_multithread_OBJECTS) multithread_LDADD = $(LDADD) am__DEPENDENCIES_1 = multithread_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am__versioncxx_SOURCES_DIST = lib/versioncxx.cpp @COND_HASCXX_TRUE@am_versioncxx_OBJECTS = lib/versioncxx.$(OBJEXT) versioncxx_OBJECTS = $(am_versioncxx_OBJECTS) versioncxx_LDADD = $(LDADD) versioncxx_DEPENDENCIES = $(am__DEPENDENCIES_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = lib/$(DEPDIR)/multithread.Po \ lib/$(DEPDIR)/versioncxx.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(multithread_SOURCES) $(versioncxx_SOURCES) DIST_SOURCES = $(multithread_SOURCES) $(am__versioncxx_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/bootstrapped/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) \ $(top_srcdir)/bootstrapped/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/bootstrapped/build-aux/depcomp \ $(top_srcdir)/bootstrapped/build-aux/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASSERT_H = @ASSERT_H@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CONFIG_LDADD = @CONFIG_LDADD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DIR_HAS_FD_MEMBER = @DIR_HAS_FD_MEMBER@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENABLE_SHARED = @ENABLE_SHARED@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EUIDACCESS_LIBGEN = @EUIDACCESS_LIBGEN@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ FLOAT_H = @FLOAT_H@ GAL_LT_VERSION = @GAL_LT_VERSION@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_CXXFLAG_ALLOW_WARNINGS = @GL_CXXFLAG_ALLOW_WARNINGS@ GL_GNULIB_ACCEPT = @GL_GNULIB_ACCEPT@ GL_GNULIB_ACCEPT4 = @GL_GNULIB_ACCEPT4@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BIND = @GL_GNULIB_BIND@ GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHMOD = @GL_GNULIB_CHMOD@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_CONNECT = @GL_GNULIB_CONNECT@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@ GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@ GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_INET_NTOP = @GL_GNULIB_INET_NTOP@ GL_GNULIB_INET_PTON = @GL_GNULIB_INET_PTON@ GL_GNULIB_IOCTL = @GL_GNULIB_IOCTL@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISBLANK = @GL_GNULIB_ISBLANK@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PSELECT = @GL_GNULIB_PSELECT@ GL_GNULIB_PTHREAD_COND = @GL_GNULIB_PTHREAD_COND@ GL_GNULIB_PTHREAD_MUTEX = @GL_GNULIB_PTHREAD_MUTEX@ GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GL_GNULIB_PTHREAD_MUTEX_TIMEDLOCK@ GL_GNULIB_PTHREAD_ONCE = @GL_GNULIB_PTHREAD_ONCE@ GL_GNULIB_PTHREAD_RWLOCK = @GL_GNULIB_PTHREAD_RWLOCK@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTHREAD_SPIN = @GL_GNULIB_PTHREAD_SPIN@ GL_GNULIB_PTHREAD_THREAD = @GL_GNULIB_PTHREAD_THREAD@ GL_GNULIB_PTHREAD_TSS = @GL_GNULIB_PTHREAD_TSS@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RAND = @GL_GNULIB_RAND@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_RECV = @GL_GNULIB_RECV@ GL_GNULIB_RECVFROM = @GL_GNULIB_RECVFROM@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SELECT = @GL_GNULIB_SELECT@ GL_GNULIB_SEND = @GL_GNULIB_SEND@ GL_GNULIB_SENDTO = @GL_GNULIB_SENDTO@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SETSOCKOPT = @GL_GNULIB_SETSOCKOPT@ GL_GNULIB_SHUTDOWN = @GL_GNULIB_SHUTDOWN@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SOCKET = @GL_GNULIB_SOCKET@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIME = @GL_GNULIB_TIME@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GREP = @GREP@ GUIDEMESSAGE = @GUIDEMESSAGE@ HARD_LOCALE_LIB = @HARD_LOCALE_LIB@ HAVE_ACCEPT4 = @HAVE_ACCEPT4@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C32RTOMB = @HAVE_C32RTOMB@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_GETW = @HAVE_DECL_GETW@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ HAVE_DECL_PUTW = @HAVE_DECL_PUTW@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_ERROR = @HAVE_ERROR@ HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ HAVE_ERROR_H = @HAVE_ERROR_H@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FITS_IS_REENTRANT = @HAVE_FITS_IS_REENTRANT@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETPROGNAME = @HAVE_GETPROGNAME@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GNUMAKE_H = @HAVE_GNUMAKE_H@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_GSL_STEFFEN = @HAVE_GSL_STEFFEN@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXABS = @HAVE_IMAXABS@ HAVE_IMAXDIV = @HAVE_IMAXDIV@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISBLANK = @HAVE_ISBLANK@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBBZ2 = @HAVE_LIBBZ2@ HAVE_LIBCFITSIO = @HAVE_LIBCFITSIO@ HAVE_LIBCURL = @HAVE_LIBCURL@ HAVE_LIBGIT2 = @HAVE_LIBGIT2@ HAVE_LIBGIT2_FOR_CONF = @HAVE_LIBGIT2_FOR_CONF@ HAVE_LIBGSL = @HAVE_LIBGSL@ HAVE_LIBJPEG = @HAVE_LIBJPEG@ HAVE_LIBLZMA = @HAVE_LIBLZMA@ HAVE_LIBM = @HAVE_LIBM@ HAVE_LIBTIFF = @HAVE_LIBTIFF@ HAVE_LIBWCS = @HAVE_LIBWCS@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOC16 = @HAVE_MBRTOC16@ HAVE_MBRTOC32 = @HAVE_MBRTOC32@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PSELECT = @HAVE_PSELECT@ HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@ HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@ HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@ HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@ HAVE_PTHREAD_BARRIER = @HAVE_PTHREAD_BARRIER@ HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@ HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@ HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@ HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@ HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@ HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@ HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@ HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@ HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@ HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@ HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@ HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@ HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@ HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@ HAVE_PTHREAD_H = @HAVE_PTHREAD_H@ HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@ HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@ HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@ HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@ HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@ HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@ HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@ HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@ HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@ HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@ HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@ HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@ HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@ HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@ HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@ HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@ HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@ HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@ HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@ HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@ HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@ HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@ HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@ HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@ HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@ HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@ HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@ HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@ HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@ HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@ HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@ HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@ HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@ HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@ HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@ HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@ HAVE_PTHREAD_T = @HAVE_PTHREAD_T@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_PYTHON = @HAVE_PYTHON@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@ HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_IOCTL_H = @HAVE_SYS_IOCTL_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@ HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TOTALORDER = @HAVE_TOTALORDER@ HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ HAVE_TOTALORDERL = @HAVE_TOTALORDERL@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UCHAR_H = @HAVE_UCHAR_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSLIB_DIS_H = @HAVE_WCSLIB_DIS_H@ HAVE_WCSLIB_MJDREF = @HAVE_WCSLIB_MJDREF@ HAVE_WCSLIB_OBSFIX = @HAVE_WCSLIB_OBSFIX@ HAVE_WCSLIB_VERSION = @HAVE_WCSLIB_VERSION@ HAVE_WCSLIB_WCSCCS = @HAVE_WCSLIB_WCSCCS@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@ HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__EXIT = @HAVE__EXIT@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INET_PTON_LIB = @INET_PTON_LIB@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBBZ2 = @LIBBZ2@ LIBBZ2_PREFIX = @LIBBZ2_PREFIX@ LIBCFITSIO = @LIBCFITSIO@ LIBCFITSIO_PREFIX = @LIBCFITSIO_PREFIX@ LIBCURL = @LIBCURL@ LIBCURL_PREFIX = @LIBCURL_PREFIX@ LIBGIT2 = @LIBGIT2@ LIBGIT2_PREFIX = @LIBGIT2_PREFIX@ LIBGSL = @LIBGSL@ LIBGSL_PREFIX = @LIBGSL_PREFIX@ LIBINTL = @LIBINTL@ LIBJPEG = @LIBJPEG@ LIBJPEG_PREFIX = @LIBJPEG_PREFIX@ LIBLZMA = @LIBLZMA@ LIBLZMA_PREFIX = @LIBLZMA_PREFIX@ LIBM = @LIBM@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBM_PREFIX = @LIBM_PREFIX@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBSOCKET = @LIBSOCKET@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ LIBTHREAD = @LIBTHREAD@ LIBTIFF = @LIBTIFF@ LIBTIFF_PREFIX = @LIBTIFF_PREFIX@ LIBTOOL = @LIBTOOL@ LIBUNISTRING_UNICASE_H = @LIBUNISTRING_UNICASE_H@ LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@ LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@ LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@ LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@ LIBWCS = @LIBWCS@ LIBWCS_PREFIX = @LIBWCS_PREFIX@ LIBZ = @LIBZ@ LIBZ_PREFIX = @LIBZ_PREFIX@ LIB_EACCESS = @LIB_EACCESS@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NANOSLEEP = @LIB_NANOSLEEP@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_PTHREAD = @LIB_PTHREAD@ LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELECT = @LIB_SELECT@ LIB_SEMAPHORE = @LIB_SEMAPHORE@ LIB_SETLOCALE = @LIB_SETLOCALE@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBBZ2 = @LTLIBBZ2@ LTLIBCFITSIO = @LTLIBCFITSIO@ LTLIBCURL = @LTLIBCURL@ LTLIBGIT2 = @LTLIBGIT2@ LTLIBGSL = @LTLIBGSL@ LTLIBINTL = @LTLIBINTL@ LTLIBJPEG = @LTLIBJPEG@ LTLIBLZMA = @LTLIBLZMA@ LTLIBM = @LTLIBM@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBTHREAD = @LTLIBTHREAD@ LTLIBTIFF = @LTLIBTIFF@ LTLIBWCS = @LTLIBWCS@ LTLIBZ = @LTLIBZ@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MBRTOWC_LIB = @MBRTOWC_LIB@ MKDIR_P = @MKDIR_P@ NANOSLEEP_LIB = @NANOSLEEP_LIB@ NETINET_IN_H = @NETINET_IN_H@ NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@ NEXT_ASSERT_H = @NEXT_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@ NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@ NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@ NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_IOCTL_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_CTYPE_H = @NEXT_CTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_ERROR_H = @NEXT_ERROR_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@ NEXT_PTHREAD_H = @NEXT_PTHREAD_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@ NEXT_SYS_IOCTL_H = @NEXT_SYS_IOCTL_H@ NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@ NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UCHAR_H = @NEXT_UCHAR_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ NUMPY_INCLUDE_DIR = @NUMPY_INCLUDE_DIR@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_CXX = @PTHREAD_CXX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTHREAD_LIBS = @PTHREAD_LIBS@ PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ PYTHON = @PYTHON@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_INCLUDE_DIR = @PYTHON_INCLUDE_DIR@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_C32RTOMB = @REPLACE_C32RTOMB@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHMOD = @REPLACE_CHMOD@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUP3 = @REPLACE_DUP3@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_ERROR = @REPLACE_ERROR@ REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHDIR = @REPLACE_FCHDIR@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDATASYNC = @REPLACE_FDATASYNC@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETENTROPY = @REPLACE_GETENTROPY@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_IMAXABS = @REPLACE_IMAXABS@ REPLACE_IMAXDIV = @REPLACE_IMAXDIV@ REPLACE_INET_NTOP = @REPLACE_INET_NTOP@ REPLACE_INET_PTON = @REPLACE_INET_PTON@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_IOCTL = @REPLACE_IOCTL@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXP = @REPLACE_LDEXP@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_PIPE2 = @REPLACE_PIPE2@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PSELECT = @REPLACE_PSELECT@ REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@ REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@ REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@ REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@ REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@ REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@ REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@ REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@ REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@ REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@ REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@ REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@ REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@ REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@ REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@ REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@ REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@ REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@ REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@ REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@ REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@ REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@ REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@ REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@ REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@ REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@ REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@ REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@ REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@ REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@ REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@ REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@ REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@ REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@ REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@ REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@ REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@ REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@ REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@ REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@ REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@ REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@ REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@ REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@ REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@ REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@ REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@ REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@ REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RAND = @REPLACE_RAND@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READDIR = @REPLACE_READDIR@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_REWINDDIR = @REPLACE_REWINDDIR@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SELECT = @REPLACE_SELECT@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPCPY = @REPLACE_STPCPY@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIME = @REPLACE_TIME@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSCMP = @REPLACE_WCSCMP@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNCMP = @REPLACE_WCSNCMP@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSSTR = @REPLACE_WCSSTR@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCTRANS = @REPLACE_WCTRANS@ REPLACE_WCTYPE = @REPLACE_WCTYPE@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@ REPLACE_WRITE = @REPLACE_WRITE@ REPLACE__EXIT = @REPLACE__EXIT@ RESTRICT_REPLACEMENT = @RESTRICT_REPLACEMENT@ SCHED_YIELD_LIB = @SCHED_YIELD_LIB@ SED = @SED@ SELECT_LIB = @SELECT_LIB@ SETLOCALE_LIB = @SETLOCALE_LIB@ SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZEOF_INT = @SIZEOF_INT@ SIZEOF_LONG = @SIZEOF_LONG@ SIZEOF_SIZE_T = @SIZEOF_SIZE_T@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ SMALL_WCHAR_T = @SMALL_WCHAR_T@ STDCKDINT_H = @STDCKDINT_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SUGGESTEDJOBS = @SUGGESTEDJOBS@ SYSEXITS_H = @SYSEXITS_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H = @SYS_IOCTL_H_HAVE_WINSOCK2_H@ SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ YIELD_LIB = @YIELD_LIB@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ has_bash = @has_bash@ has_curl = @has_curl@ has_cxx = @has_cxx@ has_ds9 = @has_ds9@ has_ghostscript = @has_ghostscript@ has_glibtool = @has_glibtool@ has_help2man = @has_help2man@ has_libtool = @has_libtool@ has_nproc = @has_nproc@ has_sysctl = @has_sysctl@ has_topcat = @has_topcat@ has_valgrind = @has_valgrind@ has_zsh = @has_zsh@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @COND_CHECK_WITH_VALGRIND_TRUE@MAYBE_CHECK_WITH_PROGRAM = "valgrind" @COND_HASGHOSTSCRIPT_TRUE@MAYBE_HASGHOSTSCRIPT = "yes" @COND_HASLIBJPEG_TRUE@MAYBE_HASLIBJPEG = "yes" @COND_HASLIBTIFF_TRUE@MAYBE_HASLIBTIFF = "yes" @COND_HASCXX_TRUE@MAYBE_CXX_PROGS = versioncxx @COND_HASCXX_TRUE@MAYBE_CXX_TESTS = lib/versioncxx.sh @COND_HASCXX_TRUE@versioncxx_SOURCES = lib/versioncxx.cpp @COND_ARITHMETIC_TRUE@MAYBE_ARITHMETIC_TESTS = arithmetic/or.sh \ @COND_ARITHMETIC_TRUE@ arithmetic/where.sh \ @COND_ARITHMETIC_TRUE@ arithmetic/snimage.sh \ @COND_ARITHMETIC_TRUE@ arithmetic/onlynumbers.sh \ @COND_ARITHMETIC_TRUE@ arithmetic/connected-components.sh \ @COND_ARITHMETIC_TRUE@ arithmetic/mknoise-sigma-from-mean.sh \ @COND_ARITHMETIC_TRUE@ arithmetic/mknoise-sigma-from-mean-3d.sh @COND_BUILDPROG_TRUE@MAYBE_BUILDPROG_TESTS = buildprog/simpleio.sh @COND_CONVERTT_TRUE@MAYBE_CONVERTT_TESTS = convertt/blankch.sh \ @COND_CONVERTT_TRUE@ convertt/fitstotxt.sh \ @COND_CONVERTT_TRUE@ convertt/jpegtotxt.sh \ @COND_CONVERTT_TRUE@ convertt/fitstopdf.sh \ @COND_CONVERTT_TRUE@ convertt/jpegtofits.sh \ @COND_CONVERTT_TRUE@ convertt/fitstotiff.sh \ @COND_CONVERTT_TRUE@ convertt/fitstojpeg.sh \ @COND_CONVERTT_TRUE@ convertt/fitstojpegcmyk.sh @COND_CONVOLVE_TRUE@MAYBE_CONVOLVE_TESTS = convolve/spatial.sh \ @COND_CONVOLVE_TRUE@ convolve/frequency.sh \ @COND_CONVOLVE_TRUE@ convolve/psf-match.sh \ @COND_CONVOLVE_TRUE@ convolve/spectrum-1d.sh @COND_COSMICCAL_TRUE@MAYBE_COSMICCAL_TESTS = cosmiccal/simpletest.sh @COND_CROP_TRUE@MAYBE_CROP_TESTS = crop/imgcat.sh \ @COND_CROP_TRUE@ crop/wcscat.sh \ @COND_CROP_TRUE@ crop/section.sh \ @COND_CROP_TRUE@ crop/imgcenter.sh \ @COND_CROP_TRUE@ crop/wcscenter.sh \ @COND_CROP_TRUE@ crop/imgpolygon.sh \ @COND_CROP_TRUE@ crop/wcspolygon.sh \ @COND_CROP_TRUE@ crop/imgpolygonout.sh \ @COND_CROP_TRUE@ crop/imgcenternoblank.sh @COND_FITS_TRUE@MAYBE_FITS_TESTS = fits/write.sh \ @COND_FITS_TRUE@ fits/print.sh \ @COND_FITS_TRUE@ fits/update.sh \ @COND_FITS_TRUE@ fits/delete.sh \ @COND_FITS_TRUE@ fits/copyhdu.sh @COND_MATCH_TRUE@MAYBE_MATCH_TESTS = match/sort-based.sh \ @COND_MATCH_TRUE@ match/merged-cols.sh \ @COND_MATCH_TRUE@ match/kdtree-internal.sh \ @COND_MATCH_TRUE@ match/kdtree-separate.sh @COND_MKCATALOG_TRUE@MAYBE_MKCATALOG_TESTS = mkcatalog/detections.sh \ @COND_MKCATALOG_TRUE@ mkcatalog/simple-3d.sh \ @COND_MKCATALOG_TRUE@ mkcatalog/objects-clumps.sh \ @COND_MKCATALOG_TRUE@ mkcatalog/aperturephot.sh @COND_MKPROF_TRUE@MAYBE_MKPROF_TESTS = mkprof/3d-cat.sh \ @COND_MKPROF_TRUE@ mkprof/mosaic1.sh \ @COND_MKPROF_TRUE@ mkprof/mosaic2.sh \ @COND_MKPROF_TRUE@ mkprof/mosaic3.sh \ @COND_MKPROF_TRUE@ mkprof/mosaic4.sh \ @COND_MKPROF_TRUE@ mkprof/radeccat.sh \ @COND_MKPROF_TRUE@ mkprof/3d-kernel.sh \ @COND_MKPROF_TRUE@ mkprof/clearcanvas.sh \ @COND_MKPROF_TRUE@ mkprof/ellipticalmasks.sh @COND_NOISECHISEL_TRUE@MAYBE_NOISECHISEL_TESTS = noisechisel/noisechisel.sh \ @COND_NOISECHISEL_TRUE@ noisechisel/noisechisel-3d.sh @COND_SEGMENT_TRUE@MAYBE_SEGMENT_TESTS = segment/segment.sh \ @COND_SEGMENT_TRUE@ segment/segment-3d.sh @COND_STATISTICS_TRUE@MAYBE_STATISTICS_TESTS = statistics/basicstats.sh \ @COND_STATISTICS_TRUE@ statistics/from-stdin.sh \ @COND_STATISTICS_TRUE@ statistics/estimate_sky.sh \ @COND_STATISTICS_TRUE@ statistics/fitting-polynomial-robust.sh @COND_TABLE_TRUE@MAYBE_TABLE_TESTS = table/arith-img-to-wcs.sh \ @COND_TABLE_TRUE@ table/txt-to-fits-ascii.sh \ @COND_TABLE_TRUE@ table/fits-ascii-to-txt.sh \ @COND_TABLE_TRUE@ table/txt-to-fits-binary.sh \ @COND_TABLE_TRUE@ table/fits-binary-to-txt.sh \ @COND_TABLE_TRUE@ table/sexagesimal-to-deg.sh @COND_WARP_TRUE@MAYBE_WARP_TESTS = warp/warp_scale.sh \ @COND_WARP_TRUE@ warp/homographic.sh # Script tests. SCRIPT_TESTS = script/psf-unite.sh \ script/psf-stamp.sh \ script/zeropoint.sh \ script/psf-subtract.sh \ script/sort-by-night.sh \ script/radial-profile.sh \ script/color-faint-gray.sh \ script/psf-scale-factor.sh \ script/psf-select-stars.sh # Environment variables for the test scripts. AM_TESTS_ENVIRONMENT = \ export LANG=C; \ export AWK=$(AWK); \ export LC_NUMERIC=C; \ export mkdir_p="$(MKDIR_P)"; \ export progbdir=programs-built; \ export topsrc=$(abs_top_srcdir); \ export topbuild=$(abs_top_builddir); \ export haslibjpeg=$(MAYBE_HASLIBJPEG); \ export haslibtiff=$(MAYBE_HASLIBTIFF); \ export hasghostscript=$(MAYBE_HASGHOSTSCRIPT); \ export check_with_program=$(MAYBE_CHECK_WITH_PROGRAM); # Library checks # ============== # # The Gnuastro library is checked by compiling programs and linking them # with the library. As described in the last paragraph of the "Scripts # based test suites" section of the Automake manual, all targets specified # by 'check_PROGRAMS' are compiled prior to actually running the targets of # 'TESTS'. So they do not need to be specified as any dependency, they will # be present when the '.sh' based tests are run. # The 'gnuastro/config.h' (needed by Gnuastro's library) is built by # '../lib/Makefile.am' and is only meant for outside users (to be tested # here). Thus (unlike the programs, which use 'config.h') we need to add # the top build directory to the include search directories ('-I'). LDADD = -lgnuastro $(CONFIG_LDADD) AM_LDFLAGS = -L\$(top_builddir)/lib AM_CPPFLAGS = -I\$(top_srcdir)/lib -I\$(top_builddir)/lib multithread_SOURCES = lib/multithread.c # Files to distribute within the tarball (sorted alphabetically). EXTRA_DIST = $(TESTS) during-dev.sh \ buildprog/simpleio.c \ convolve/spectrum.txt \ crop/cat.txt \ match/positions-1.txt \ match/positions-2.txt \ mkprof/3d-cat.txt \ mkprof/clearcanvas.txt \ mkprof/ellipticalmasks.txt \ mkprof/mkprofcat1.txt \ mkprof/mkprofcat2.txt \ mkprof/mkprofcat3.txt \ mkprof/mkprofcat4.txt \ mkprof/radeccat.txt \ statistics/fitting-data.txt \ statistics/stdin-input.txt \ table/table.txt # Files that must be cleaned with 'make clean'. CLEANFILES = *.log *.txt *.jpg *.fits *.pdf *.eps *.tif simpleio all: all-am .SUFFIXES: .SUFFIXES: .c .cpp .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list lib/$(am__dirstamp): @$(MKDIR_P) lib @: > lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) lib/$(DEPDIR) @: > lib/$(DEPDIR)/$(am__dirstamp) lib/multithread.$(OBJEXT): lib/$(am__dirstamp) \ lib/$(DEPDIR)/$(am__dirstamp) multithread$(EXEEXT): $(multithread_OBJECTS) $(multithread_DEPENDENCIES) $(EXTRA_multithread_DEPENDENCIES) @rm -f multithread$(EXEEXT) $(AM_V_CCLD)$(LINK) $(multithread_OBJECTS) $(multithread_LDADD) $(LIBS) lib/versioncxx.$(OBJEXT): lib/$(am__dirstamp) \ lib/$(DEPDIR)/$(am__dirstamp) versioncxx$(EXEEXT): $(versioncxx_OBJECTS) $(versioncxx_DEPENDENCIES) $(EXTRA_versioncxx_DEPENDENCIES) @rm -f versioncxx$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(versioncxx_OBJECTS) $(versioncxx_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f lib/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/multithread.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/versioncxx.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: $(check_PROGRAMS) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? prepconf.sh.log: prepconf.sh @p='prepconf.sh'; \ b='prepconf.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) lib/multithread.sh.log: lib/multithread.sh @p='lib/multithread.sh'; \ b='lib/multithread.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) lib/versioncxx.sh.log: lib/versioncxx.sh @p='lib/versioncxx.sh'; \ b='lib/versioncxx.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) arithmetic/or.sh.log: arithmetic/or.sh @p='arithmetic/or.sh'; \ b='arithmetic/or.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) arithmetic/where.sh.log: arithmetic/where.sh @p='arithmetic/where.sh'; \ b='arithmetic/where.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) arithmetic/snimage.sh.log: arithmetic/snimage.sh @p='arithmetic/snimage.sh'; \ b='arithmetic/snimage.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) arithmetic/onlynumbers.sh.log: arithmetic/onlynumbers.sh @p='arithmetic/onlynumbers.sh'; \ b='arithmetic/onlynumbers.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) arithmetic/connected-components.sh.log: arithmetic/connected-components.sh @p='arithmetic/connected-components.sh'; \ b='arithmetic/connected-components.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) arithmetic/mknoise-sigma-from-mean.sh.log: arithmetic/mknoise-sigma-from-mean.sh @p='arithmetic/mknoise-sigma-from-mean.sh'; \ b='arithmetic/mknoise-sigma-from-mean.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) arithmetic/mknoise-sigma-from-mean-3d.sh.log: arithmetic/mknoise-sigma-from-mean-3d.sh @p='arithmetic/mknoise-sigma-from-mean-3d.sh'; \ b='arithmetic/mknoise-sigma-from-mean-3d.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) buildprog/simpleio.sh.log: buildprog/simpleio.sh @p='buildprog/simpleio.sh'; \ b='buildprog/simpleio.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/blankch.sh.log: convertt/blankch.sh @p='convertt/blankch.sh'; \ b='convertt/blankch.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/fitstotxt.sh.log: convertt/fitstotxt.sh @p='convertt/fitstotxt.sh'; \ b='convertt/fitstotxt.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/jpegtotxt.sh.log: convertt/jpegtotxt.sh @p='convertt/jpegtotxt.sh'; \ b='convertt/jpegtotxt.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/fitstopdf.sh.log: convertt/fitstopdf.sh @p='convertt/fitstopdf.sh'; \ b='convertt/fitstopdf.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/jpegtofits.sh.log: convertt/jpegtofits.sh @p='convertt/jpegtofits.sh'; \ b='convertt/jpegtofits.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/fitstotiff.sh.log: convertt/fitstotiff.sh @p='convertt/fitstotiff.sh'; \ b='convertt/fitstotiff.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/fitstojpeg.sh.log: convertt/fitstojpeg.sh @p='convertt/fitstojpeg.sh'; \ b='convertt/fitstojpeg.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convertt/fitstojpegcmyk.sh.log: convertt/fitstojpegcmyk.sh @p='convertt/fitstojpegcmyk.sh'; \ b='convertt/fitstojpegcmyk.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convolve/spatial.sh.log: convolve/spatial.sh @p='convolve/spatial.sh'; \ b='convolve/spatial.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convolve/frequency.sh.log: convolve/frequency.sh @p='convolve/frequency.sh'; \ b='convolve/frequency.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convolve/psf-match.sh.log: convolve/psf-match.sh @p='convolve/psf-match.sh'; \ b='convolve/psf-match.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) convolve/spectrum-1d.sh.log: convolve/spectrum-1d.sh @p='convolve/spectrum-1d.sh'; \ b='convolve/spectrum-1d.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) cosmiccal/simpletest.sh.log: cosmiccal/simpletest.sh @p='cosmiccal/simpletest.sh'; \ b='cosmiccal/simpletest.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/imgcat.sh.log: crop/imgcat.sh @p='crop/imgcat.sh'; \ b='crop/imgcat.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/wcscat.sh.log: crop/wcscat.sh @p='crop/wcscat.sh'; \ b='crop/wcscat.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/section.sh.log: crop/section.sh @p='crop/section.sh'; \ b='crop/section.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/imgcenter.sh.log: crop/imgcenter.sh @p='crop/imgcenter.sh'; \ b='crop/imgcenter.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/wcscenter.sh.log: crop/wcscenter.sh @p='crop/wcscenter.sh'; \ b='crop/wcscenter.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/imgpolygon.sh.log: crop/imgpolygon.sh @p='crop/imgpolygon.sh'; \ b='crop/imgpolygon.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/wcspolygon.sh.log: crop/wcspolygon.sh @p='crop/wcspolygon.sh'; \ b='crop/wcspolygon.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/imgpolygonout.sh.log: crop/imgpolygonout.sh @p='crop/imgpolygonout.sh'; \ b='crop/imgpolygonout.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) crop/imgcenternoblank.sh.log: crop/imgcenternoblank.sh @p='crop/imgcenternoblank.sh'; \ b='crop/imgcenternoblank.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) fits/write.sh.log: fits/write.sh @p='fits/write.sh'; \ b='fits/write.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) fits/print.sh.log: fits/print.sh @p='fits/print.sh'; \ b='fits/print.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) fits/update.sh.log: fits/update.sh @p='fits/update.sh'; \ b='fits/update.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) fits/delete.sh.log: fits/delete.sh @p='fits/delete.sh'; \ b='fits/delete.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) fits/copyhdu.sh.log: fits/copyhdu.sh @p='fits/copyhdu.sh'; \ b='fits/copyhdu.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) match/sort-based.sh.log: match/sort-based.sh @p='match/sort-based.sh'; \ b='match/sort-based.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) match/merged-cols.sh.log: match/merged-cols.sh @p='match/merged-cols.sh'; \ b='match/merged-cols.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) match/kdtree-internal.sh.log: match/kdtree-internal.sh @p='match/kdtree-internal.sh'; \ b='match/kdtree-internal.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) match/kdtree-separate.sh.log: match/kdtree-separate.sh @p='match/kdtree-separate.sh'; \ b='match/kdtree-separate.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkcatalog/detections.sh.log: mkcatalog/detections.sh @p='mkcatalog/detections.sh'; \ b='mkcatalog/detections.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkcatalog/simple-3d.sh.log: mkcatalog/simple-3d.sh @p='mkcatalog/simple-3d.sh'; \ b='mkcatalog/simple-3d.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkcatalog/objects-clumps.sh.log: mkcatalog/objects-clumps.sh @p='mkcatalog/objects-clumps.sh'; \ b='mkcatalog/objects-clumps.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkcatalog/aperturephot.sh.log: mkcatalog/aperturephot.sh @p='mkcatalog/aperturephot.sh'; \ b='mkcatalog/aperturephot.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/3d-cat.sh.log: mkprof/3d-cat.sh @p='mkprof/3d-cat.sh'; \ b='mkprof/3d-cat.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/mosaic1.sh.log: mkprof/mosaic1.sh @p='mkprof/mosaic1.sh'; \ b='mkprof/mosaic1.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/mosaic2.sh.log: mkprof/mosaic2.sh @p='mkprof/mosaic2.sh'; \ b='mkprof/mosaic2.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/mosaic3.sh.log: mkprof/mosaic3.sh @p='mkprof/mosaic3.sh'; \ b='mkprof/mosaic3.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/mosaic4.sh.log: mkprof/mosaic4.sh @p='mkprof/mosaic4.sh'; \ b='mkprof/mosaic4.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/radeccat.sh.log: mkprof/radeccat.sh @p='mkprof/radeccat.sh'; \ b='mkprof/radeccat.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/3d-kernel.sh.log: mkprof/3d-kernel.sh @p='mkprof/3d-kernel.sh'; \ b='mkprof/3d-kernel.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/clearcanvas.sh.log: mkprof/clearcanvas.sh @p='mkprof/clearcanvas.sh'; \ b='mkprof/clearcanvas.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mkprof/ellipticalmasks.sh.log: mkprof/ellipticalmasks.sh @p='mkprof/ellipticalmasks.sh'; \ b='mkprof/ellipticalmasks.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) noisechisel/noisechisel.sh.log: noisechisel/noisechisel.sh @p='noisechisel/noisechisel.sh'; \ b='noisechisel/noisechisel.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) noisechisel/noisechisel-3d.sh.log: noisechisel/noisechisel-3d.sh @p='noisechisel/noisechisel-3d.sh'; \ b='noisechisel/noisechisel-3d.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) segment/segment.sh.log: segment/segment.sh @p='segment/segment.sh'; \ b='segment/segment.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) segment/segment-3d.sh.log: segment/segment-3d.sh @p='segment/segment-3d.sh'; \ b='segment/segment-3d.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) statistics/basicstats.sh.log: statistics/basicstats.sh @p='statistics/basicstats.sh'; \ b='statistics/basicstats.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) statistics/from-stdin.sh.log: statistics/from-stdin.sh @p='statistics/from-stdin.sh'; \ b='statistics/from-stdin.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) statistics/estimate_sky.sh.log: statistics/estimate_sky.sh @p='statistics/estimate_sky.sh'; \ b='statistics/estimate_sky.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) statistics/fitting-polynomial-robust.sh.log: statistics/fitting-polynomial-robust.sh @p='statistics/fitting-polynomial-robust.sh'; \ b='statistics/fitting-polynomial-robust.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) table/arith-img-to-wcs.sh.log: table/arith-img-to-wcs.sh @p='table/arith-img-to-wcs.sh'; \ b='table/arith-img-to-wcs.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) table/txt-to-fits-ascii.sh.log: table/txt-to-fits-ascii.sh @p='table/txt-to-fits-ascii.sh'; \ b='table/txt-to-fits-ascii.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) table/fits-ascii-to-txt.sh.log: table/fits-ascii-to-txt.sh @p='table/fits-ascii-to-txt.sh'; \ b='table/fits-ascii-to-txt.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) table/txt-to-fits-binary.sh.log: table/txt-to-fits-binary.sh @p='table/txt-to-fits-binary.sh'; \ b='table/txt-to-fits-binary.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) table/fits-binary-to-txt.sh.log: table/fits-binary-to-txt.sh @p='table/fits-binary-to-txt.sh'; \ b='table/fits-binary-to-txt.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) table/sexagesimal-to-deg.sh.log: table/sexagesimal-to-deg.sh @p='table/sexagesimal-to-deg.sh'; \ b='table/sexagesimal-to-deg.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) warp/warp_scale.sh.log: warp/warp_scale.sh @p='warp/warp_scale.sh'; \ b='warp/warp_scale.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) warp/homographic.sh.log: warp/homographic.sh @p='warp/homographic.sh'; \ b='warp/homographic.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) script/psf-unite.sh.log: script/psf-unite.sh @p='script/psf-unite.sh'; \ b='script/psf-unite.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) script/psf-stamp.sh.log: script/psf-stamp.sh @p='script/psf-stamp.sh'; \ b='script/psf-stamp.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) script/zeropoint.sh.log: script/zeropoint.sh @p='script/zeropoint.sh'; \ b='script/zeropoint.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) script/psf-subtract.sh.log: script/psf-subtract.sh @p='script/psf-subtract.sh'; \ b='script/psf-subtract.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) script/sort-by-night.sh.log: script/sort-by-night.sh @p='script/sort-by-night.sh'; \ b='script/sort-by-night.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) script/radial-profile.sh.log: script/radial-profile.sh @p='script/radial-profile.sh'; \ b='script/radial-profile.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) script/color-faint-gray.sh.log: script/color-faint-gray.sh @p='script/color-faint-gray.sh'; \ b='script/color-faint-gray.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) script/psf-scale-factor.sh.log: script/psf-scale-factor.sh @p='script/psf-scale-factor.sh'; \ b='script/psf-scale-factor.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) script/psf-select-stars.sh.log: script/psf-select-stars.sh @p='script/psf-select-stars.sh'; \ b='script/psf-select-stars.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f lib/$(DEPDIR)/$(am__dirstamp) -rm -f lib/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \ mostlyclean-am distclean: distclean-am -rm -f lib/$(DEPDIR)/multithread.Po -rm -f lib/$(DEPDIR)/versioncxx.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f lib/$(DEPDIR)/multithread.Po -rm -f lib/$(DEPDIR)/versioncxx.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-checkPROGRAMS clean-generic clean-libtool \ clean-local cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am recheck tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile @COND_ARITHMETIC_TRUE@ arithmetic/or.sh: segment/segment.sh.log @COND_ARITHMETIC_TRUE@ arithmetic/onlynumbers.sh: prepconf.sh.log @COND_ARITHMETIC_TRUE@ arithmetic/where.sh: noisechisel/noisechisel.sh.log @COND_ARITHMETIC_TRUE@ arithmetic/snimage.sh: noisechisel/noisechisel.sh.log @COND_ARITHMETIC_TRUE@ arithmetic/mknoise-sigma-from-mean.sh: warp/warp_scale.sh.log @COND_ARITHMETIC_TRUE@ arithmetic/mknoise-sigma-from-mean-3d.sh: mkprof/3d-cat.sh.log @COND_ARITHMETIC_TRUE@ arithmetic/connected-components.sh: noisechisel/noisechisel.sh.log @COND_BUILDPROG_TRUE@ buildprog/simpleio.sh: mkprof/mosaic1.sh.log @COND_CONVERTT_TRUE@ convertt/fitstopdf.sh: crop/section.sh.log @COND_CONVERTT_TRUE@ convertt/blankch.sh: mkprof/mosaic1.sh.log @COND_CONVERTT_TRUE@ convertt/fitstotxt.sh: mkprof/mosaic1.sh.log @COND_CONVERTT_TRUE@ convertt/fitstojpeg.sh: mkprof/mosaic1.sh.log @COND_CONVERTT_TRUE@ convertt/fitstotiff.sh: mkprof/mosaic1.sh.log @COND_CONVERTT_TRUE@ convertt/jpegtofits.sh: convertt/blankch.sh.log @COND_CONVERTT_TRUE@ convertt/jpegtotxt.sh: convertt/fitstojpeg.sh.log @COND_CONVERTT_TRUE@ convertt/fitstojpegcmyk.sh: mkprof/mosaic1.sh.log @COND_CONVOLVE_TRUE@ convolve/spectrum-1d.sh: prepconf.sh.log @COND_CONVOLVE_TRUE@ convolve/spatial.sh: mkprof/mosaic1.sh.log @COND_CONVOLVE_TRUE@ convolve/psf-match.sh: mkprof/mosaic1.sh.log @COND_CONVOLVE_TRUE@ convolve/frequency.sh: mkprof/mosaic1.sh.log @COND_COSMICCAL_TRUE@ cosmiccal/simpletest.sh: prepconf.sh.log @COND_CROP_TRUE@ crop/imgcat.sh: mkprof/mosaic1.sh.log @COND_CROP_TRUE@ crop/wcscat.sh: mkprof/mosaic1.sh.log \ @COND_CROP_TRUE@ mkprof/mosaic2.sh.log \ @COND_CROP_TRUE@ mkprof/mosaic3.sh.log \ @COND_CROP_TRUE@ mkprof/mosaic4.sh.log @COND_CROP_TRUE@ crop/section.sh: mkprof/mosaic1.sh.log @COND_CROP_TRUE@ crop/imgcenter.sh: mkprof/mosaic1.sh.log @COND_CROP_TRUE@ crop/wcscenter.sh: mkprof/mosaic1.sh.log \ @COND_CROP_TRUE@ mkprof/mosaic2.sh.log \ @COND_CROP_TRUE@ mkprof/mosaic3.sh.log \ @COND_CROP_TRUE@ mkprof/mosaic4.sh.log @COND_CROP_TRUE@ crop/imgpolygon.sh: mkprof/mosaic1.sh.log @COND_CROP_TRUE@ crop/wcspolygon.sh: mkprof/mosaic1.sh.log \ @COND_CROP_TRUE@ mkprof/mosaic2.sh.log \ @COND_CROP_TRUE@ mkprof/mosaic3.sh.log \ @COND_CROP_TRUE@ mkprof/mosaic4.sh.log @COND_CROP_TRUE@ crop/imgpolygonout.sh: mkprof/mosaic1.sh.log @COND_CROP_TRUE@ crop/imgcenternoblank.sh: mkprof/mosaic1.sh.log @COND_FITS_TRUE@ fits/print.sh: fits/write.sh.log @COND_FITS_TRUE@ fits/update.sh: fits/write.sh.log @COND_FITS_TRUE@ fits/delete.sh: fits/write.sh.log @COND_FITS_TRUE@ fits/write.sh: mkprof/mosaic1.sh.log @COND_FITS_TRUE@ fits/copyhdu.sh: fits/write.sh.log mkprof/mosaic2.sh.log @COND_MATCH_TRUE@ match/sort-based.sh: prepconf.sh.log @COND_MATCH_TRUE@ match/merged-cols.sh: prepconf.sh.log @COND_MATCH_TRUE@ match/kdtree-internal.sh: prepconf.sh.log @COND_MATCH_TRUE@ match/kdtree-separate.sh: prepconf.sh.log @COND_MKCATALOG_TRUE@ mkcatalog/simple-3d.sh: segment/segment-3d.sh.log @COND_MKCATALOG_TRUE@ mkcatalog/objects-clumps.sh: segment/segment.sh.log @COND_MKCATALOG_TRUE@ mkcatalog/aperturephot.sh: noisechisel/noisechisel.sh.log \ @COND_MKCATALOG_TRUE@ mkprof/clearcanvas.sh.log @COND_MKCATALOG_TRUE@ mkcatalog/detections.sh: arithmetic/connected-components.sh.log @COND_MKPROF_TRUE@ mkprof/3d-cat.sh: prepconf.sh.log @COND_MKPROF_TRUE@ mkprof/mosaic1.sh: prepconf.sh.log @COND_MKPROF_TRUE@ mkprof/mosaic2.sh: prepconf.sh.log @COND_MKPROF_TRUE@ mkprof/mosaic3.sh: prepconf.sh.log @COND_MKPROF_TRUE@ mkprof/mosaic4.sh: prepconf.sh.log @COND_MKPROF_TRUE@ mkprof/radeccat.sh: prepconf.sh.log @COND_MKPROF_TRUE@ mkprof/3d-kernel.sh: prepconf.sh.log @COND_MKPROF_TRUE@ mkprof/clearcanvas.sh: arithmetic/mknoise-sigma-from-mean.sh.log @COND_MKPROF_TRUE@ mkprof/ellipticalmasks.sh: arithmetic/mknoise-sigma-from-mean.sh.log @COND_NOISECHISEL_TRUE@ noisechisel/noisechisel.sh: arithmetic/mknoise-sigma-from-mean.sh.log @COND_NOISECHISEL_TRUE@ noisechisel/noisechisel-3d.sh: arithmetic/mknoise-sigma-from-mean-3d.sh.log @COND_SEGMENT_TRUE@ segment/segment.sh: noisechisel/noisechisel.sh.log @COND_SEGMENT_TRUE@ segment/segment-3d.sh: noisechisel/noisechisel-3d.sh.log @COND_STATISTICS_TRUE@ statistics/from-stdin.sh: prepconf.sh.log @COND_STATISTICS_TRUE@ statistics/fitting-polynomial-robust.sh: prepconf.sh.log @COND_STATISTICS_TRUE@ statistics/basicstats.sh: arithmetic/mknoise-sigma-from-mean.sh.log @COND_STATISTICS_TRUE@ statistics/estimate_sky.sh: arithmetic/mknoise-sigma-from-mean.sh.log @COND_TABLE_TRUE@ table/txt-to-fits-ascii.sh: prepconf.sh.log @COND_TABLE_TRUE@ table/txt-to-fits-binary.sh: prepconf.sh.log @COND_TABLE_TRUE@ table/sexagesimal-to-deg.sh: prepconf.sh.log @COND_TABLE_TRUE@ table/fits-ascii-to-txt.sh: table/txt-to-fits-ascii.sh.log @COND_TABLE_TRUE@ table/fits-binary-to-txt.sh: table/txt-to-fits-binary.sh.log @COND_TABLE_TRUE@ table/arith-img-to-wcs.sh: arithmetic/mknoise-sigma-from-mean.sh.log @COND_WARP_TRUE@ warp/warp_scale.sh: convolve/spatial.sh.log @COND_WARP_TRUE@ warp/homographic.sh: convolve/spatial.sh.log # We want to have several FITS files as input for this script. script/psf-unite.sh: mkprof/mosaic2.sh.log script/psf-stamp.sh: mkprof/mosaic2.sh.log script/psf-subtract.sh: mkprof/mosaic1.sh.log script/radial-profile.sh: mkprof/mosaic2.sh.log script/psf-scale-factor.sh: mkprof/mosaic1.sh.log script/color-faint-gray.sh: mkprof/mosaic2.sh.log script/psf-select-stars.sh: segment/segment.sh.log script/zeropoint.sh: table/arith-img-to-wcs.sh.log script/sort-by-night.sh: mkcatalog/aperturephot.sh.log lib/multithread.sh: mkprof/mosaic1.sh.log # CLEANFILES is only for files, not directories. Therefore we are using # Automake's extending rules to clean the temporary '.gnuastro' directory # that was built by the 'prepconf.sh' scripot. See "Extending Automake # rules", and the "What Gets Cleaned" sections of the Automake manual. clean-local:; rm -rf .gnuastro # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/prepconf.sh���������������������������������������������������������������������0000755�0001750�0001750�00000010164�14551337306�012306� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This is not actually a test of any of the programs, it just brings # in all the configuration files into a locally created .gnuastro # directory for all the tests to use. It is part of the GNU Astronomy # Utilities (Gnuastro). # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2016-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # Gnuastro 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Gnuastro. If not, see <http://www.gnu.org/licenses/>. # Make the .gnuastro directory # ---------------------------- # # This directory will keep the default configuration files for all the # programs. If it already exists, delete it. 'mkdir_p' is the equivalent to # GNU's 'mkdir -p' which might not exist on some systems. It comes from # Autoconf's tests and is exported to the test shell scripts from the # 'tests/Makefile.am' file. $mkdir_p .gnuastro # Common options for all programs # ------------------------------- # # Copy the common options while adding the following optios only for make # check. # # - 'lastconfig' will make sure that the program stop searching for # configuration files after this one. # # - Log files are not necessary during tests, they are mainly used for # reporting extra information about successful tests. Failed messages # will be printed on the command-line not in a log-file. So to keep # this directory clean, we'll ask the programs to not generate any. cat > addedoptions.txt <<EOF # Added only for "make check": lastconfig 1 log 0 EOF cat $topsrc/bin/gnuastro.conf addedoptions.txt > .gnuastro/gnuastro.conf rm addedoptions.txt # Necessary files to simplify tests # --------------------------------- # # Each utility's configuration file is copied in the 'tests' directory for # easy readability. Note that some programs may need to build their # configuration files during compilation. Hence, their configuration files # are in the build directory, not the source directory. # # To test the 'astscript-*'s, we need to make sure that all the internally # built programs are used, not the (possibly existing) host operating # system's programs. Since each program is built within its own directory # of 'bin', instead of adding all those to the PATH, we will simply put a # symbolic link to the program in a special directory. if ! [ -d $progbdir ]; then mkdir $progbdir; fi for prog in arithmetic buildprog convertt convolve cosmiccal crop \ fits match mkcatalog mknoise mkprof noisechisel segment \ statistics table warp do # Get the configuration file. if test -f $topsrc/bin/$prog/ast$prog.conf; then ctopdir=$topsrc else ctopdir=$topbuild fi cp $ctopdir/bin/$prog/*.conf .gnuastro/ # If the program was built, put a symbolic link to it: if [ -f $topbuild/bin/$prog/ast$prog ]; then ln -sf $topbuild/bin/$prog/ast$prog $progbdir/ fi done # Extract all the intalled script filenames from the # 'bin/script/Makefile.am' and put a link to them in the temporary # directory for all Gnuastro executables. This is because some # 'astscript-*'s depend on others. # # Initially we were using 'find' to obtain the script names, but it has # portability problems between GNU/Linux and macOS. So we just parse the # Makefile.am to obtain them. scriptnames=$($AWK '/^bin_SCRIPTS/{parse=1; printf "%s ", $3} \ parse==1 && $1~/^astscript/{printf "%s ", $1; \ if($2=="") parse=0}' \ $topsrc/bin/script/Makefile.am) for f in $scriptnames; do ln -sf $topbuild/bin/script/$f $progbdir/ done ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/tests/during-dev.sh�������������������������������������������������������������������0000755�0001750�0001750�00000017430�14557454752�012554� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/bash # Script to rebuild and test a utility during development. # # During the development of Gnuastro, you often make changes in a utility # then need to rebuild and run it with special arguments and options (to # test your work). This script is made to facilitate this process. It will # take these steps: # # 1. Delete an existing utility executable. # # 2. Run Make on all Gnuastro. # # 3. If Make was successful, then go into the output directory, and run # utility with the given arguments and options. The executable is run # within an output directory (possibly different from the source or # build directories) so if you need to make lots of temporary test # files, there they won't get mixed up with non-output files. # # Combined with the 'developer-build', this script can be used to greatly # simplify the development process. After running that script once, for # subsequent builds during your development, you can run this script from # the top source directory (by running './tests/during-dev.sh', or giving # this to the 'compile' command in Emacs). Note that you have to set the # first few variables (directories, utility name, arguments and options) # manually before each major development activity. # # This file will be changed alot during development. So please make sure # you have left the variable values empty before committing. This will # remind each developer running this script to set the values based on # their particular work. Alternatively you can reset this file to its # version controlled status before committing your main work with the # command below: # # git checkout -- tests/during-dev.sh # # This file can also be used as a model to write a test for the work you # have done (to be checked with 'make check'). Just copy and paste an # existing test from the utility and replace the last few lines based on # this file. # # Original author: # Mohammad Akhlaghi <mohammad@akhlaghi.org> # Contributing author(s): # Copyright (C) 2016-2024 Free Software Foundation, Inc. # # Gnuastro is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. # # Gnuastro 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 General Public License for # more details. # # You should have received a copy of the GNU General Public License along # with Gnuastro. If not, see <http://www.gnu.org/licenses/>. # SET INPUT PARAMETERS # ==================== # Set the basic test directories. If you are building over the source # directory, then set 'builddir' to './'. If you want the outputs to be in # the top source directory, set it to './'. Since 'build' is the assumed # symbolic link in 'developer-build', it is also assumed in the version # controlled version of this script. Note, if your directory names have # space characters in them, quote the full value numjobs=8 builddir=build outdir= # Set the utility name, along with its arguments and options. NOTE, for # multiple arguments and options, please put them all between quotation # marks so the space characters are included. If there are spaces in the # values of the options or arguments, quote them two times (once for this # script, and once for the utility. In such cases it might be easier to # just add the argument/option to the final script that runs the utility # rather than these variables. # # TEST ASTSCRIPTs: if the problem is in the compiled programs used within # the script, you have to add a line under the line below # 'if [ -f "$utility" ]; then rm "$utility"; fi' # that will delete that particular program. utilname= arguments= options= # RUN THE PROCEDURES # ================== # Stop the script if there are any errors. set -e # First, make sure the variables are set. Note that arguments and options # are not absolutly vital! so they are not checked here. The utility will # warn and halt if it needs them. if [ x"$outdir" = x ]; then echo "outdir is not set."; exit 1; fi if [ x"$numjobs" = x ]; then echo "numjobs is not set."; exit 1; fi if [ x"$utilname" = x ]; then echo "utilname is not set."; exit 1; fi if [ x"$builddir" = x ]; then echo "builddir is not set."; exit 1; fi # Make sure 'utilname' doesn't start with 'ast' (a common mistake). astprefix="${utilname:0:3}" if [ x"$astprefix" = x"ast" ]; then echo "'utilname' must not start with 'ast'."; exit 1; fi # If builddir is relative, then append the current directory to make it # absolute. This is done because we will be going into the output directory # for executing the utility and we need to know the absolute address of the # top build directory. srcdir=$(pwd) if [ ! "${builddir:0:1}" = "/" ]; then builddir="$srcdir/$builddir" fi # Set the utility's executable file name longprefix="${utilname:0:6}" if [ x"$longprefix" = x"script" ]; then execdir="script" # We need to delete all the compiled programs so they are recompiled # (for usage in the script, if this slows down your tests, comment it # and only delete the particular program that is causing problems). find "$builddir/bin" -type f -executable -exec rm "{}" \; else execdir="$utilname" fi utility="$builddir/bin/$execdir/ast$utilname" # If the utility is already built, then remove the executable so it is # definitely remade. if [ -f "$utility" ]; then rm "$utility"; fi # Make Gnuastro (note that during development, it is sometimes necessary to # edit/rebuild the libraries too). If Make is successful, then change to # the output directory and run the utility with the given arguments and # options. # # Before actually running put a copy of the configuration file in the # output directory and also add the onlydirconf option so user or system # wide configuration files don't interfere. if make -j$numjobs -C "$builddir"; then # Change to the output directory. cd "$outdir" # Make the .gnuastro directory if it doesn't exist. if [ ! -d .gnuastro ]; then mkdir .gnuastro fi # Put a copy of this utility's configuration file there and add the # onlydirconf option. We are first printing an empty line just in case # the last line in the configuration file doesn't actualy end with a # new line (in which case the appended string will be added to the end # of the last line). if [ $utilname = buildprog ]; then extraopts="--la=$builddir/lib/libgnuastro.la" extraopts="$extraopts -I$srcdir/lib -L$builddir/lib" topconfdir="$builddir" else topconfdir="$srcdir" fi # Copy the configuration file(s). cfiles="$srcdir/bin/gnuastro.conf" if [ x"$longprefix" != x"script" ]; then cfiles="$cfiles $topconfdir/bin/$utilname/ast$utilname.conf" fi cp $cfiles .gnuastro/ # Append 'lastconfig' option to 'gnuastro.conf', so the program doesn't # go into the system headers. echo "" >> .gnuastro/gnuastro.conf echo " lastconfig 1" >> .gnuastro/gnuastro.conf # A script can call any of the Gnuastro programs, we need to add this # installation's programs in the PATH and add all configuration files. if [ x"$longprefix" = x"script" ]; then addpath="" for f in "$builddir"/bin/*; do if [ -d $f ]; then if [ x"$addpath" = x ]; then addpath="$f" else addpath="$f:$addpath" fi fi done export PATH="$addpath:$PATH" cp "$srcdir"/bin/*/*.conf .gnuastro/ fi # Run the built utility with the given arguments and options. "$utility" $arguments $options $extraopts # Clean up. rm -rf .gnuastro fi ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gnuastro-0.22/.tarball-version����������������������������������������������������������������������0000644�0001750�0001750�00000000005�14557514203�012066� ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0.22 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������